/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of ISO 7816-4 APDU processing
 */



/**
 * Create an APDU
 *
 * <p>This constructor supports the signatures</p>
 * <ul>
 *  <li>APDU(ByteString command)</li>
 *  <li>APDU(Number cla, Number ins, Number p1, Number p2)</li>
 *  <li>APDU(Number cla, Number ins, Number p1, Number p2, data)</li>
 *  <li>APDU(Number cla, Number ins, Number p1, Number p2, data, Ne)</li>
 * </ul>
 * @class Class implementing support for command and response APDUs
 * @constructor
 * @param {ByteString} command the command APDU
 * @param {Number} cla the class byte
 * @param {Number} ins the instruction byte
 * @param {Number} p1 the first parameter
 * @param {Number} p2 the second parameter
 * @param {ByteString} data the data field (optional)
 * @param {Number} Ne the number of expected bytes (optional)
 */
function APDU() {
	if (arguments.length > 0) {
		var arg = arguments[0];
		if (arg instanceof ByteString) {
			if (arguments.length != 1) {
				throw new GPError("APDU", GPError.INVALID_ARGUMENTS, APDU.SW_GENERALERROR, "Only one argument of type ByteString expected");
			}
			this.fromByteString(arg);
		} else {
			if ((arguments.length < 4) || (arguments.length > 6)) {
				throw new GPError("APDU", GPError.INVALID_ARGUMENTS, APDU.SW_GENERALERROR, "4 to 6 arguments expected");
			}

			for (var i = 0; i < 4; i++) {
				if (typeof(arguments[i]) != "number") {
					throw new GPError("APDU", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Argument must be of type Number");
				}
			}
			this.cla = arguments[0];
			this.ins = arguments[1];
			this.p1 = arguments[2];
			this.p2 = arguments[3];

			var i = 4;
			if (arguments.length > i) {
				if (arguments[i] instanceof ByteString) {
					this.cdata = arguments[i];
					i++;
				}
			}

			if (arguments.length > i) {
				if (typeof(arguments[i]) != "number") {
					throw new GPError("APDU", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Argument must be of type Number");
				}
				this.ne = arguments[i];
			}
		}
	}
	this.rapdu = null;
	this.SW = APDU.SW_GENERALERROR;
}

exports.APDU = APDU;



APDU.INS_DEACTIVATE		= 0x04;
APDU.INS_VERIFY			= 0x20;
APDU.INS_MANAGE_SE		= 0x22;
APDU.INS_CHANGE_REFERENCE_DATA	= 0x24;
APDU.INS_PSO			= 0x2A;
APDU.INS_RESET_RETRY_COUNTER	= 0x2C;
APDU.INS_ACTIVATE		= 0x44;
APDU.INS_GENERATE_KEY_PAIR	= 0x46;
APDU.INS_GENERATE_KEY		= 0x48;
APDU.INS_INITIALIZE_UPDATE	= 0x50;
APDU.INS_EXTERNAL_AUTHENTICATE	= 0x82;
APDU.INS_GET_CHALLENGE		= 0x84;
APDU.INS_GENERAL_AUTHENTICATE	= 0x86;
APDU.INS_COMPUTE_DIGITAL_SIGN	= 0x9E;
APDU.INS_SELECT			= 0xA4;
APDU.INS_READBINARY		= 0xB0;
APDU.INS_READ_BINARY		= 0xB0;
APDU.INS_READ_RECORD		= 0xB2;
APDU.INS_VERIFY_CERTIFICATE	= 0xBE;
APDU.INS_GET_RESPONSE		= 0xC0;
APDU.INS_GET_DATA		= 0xCA;
APDU.INS_UPDATE_BINARY		= 0xD6;
APDU.INS_PUT_KEY		= 0xD8;
APDU.INS_PUT_DATA		= 0xDA;
APDU.INS_DELETE			= 0xE4;
APDU.INS_TERMINATE		= 0xE6;
APDU.INS_SET_STATUS		= 0xF0;

APDU.SW_OK                 = 0x9000;      	/* Process completed                 */

APDU.SW_TIMEOUT            = 0x6401;      	/* Exec error: Command timeout       */

APDU.SW_OKMOREDATA         = 0x6100;      	/*-Process completed, more data available*/
APDU.SW_WARNING            = 0x6200;      	/*-Warning: NV-Ram not changed       */
APDU.SW_WARNING1           = 0x6201;      	/*-Warning: NV-Ram not changed 1     */
APDU.SW_DATAINV            = 0x6281;      	/*-Warning: Part of data corrupted   */
APDU.SW_EOF                = 0x6282;      	/*-Warning: End of file reached      */
APDU.SW_INVFILE            = 0x6283;      	/* Warning: Invalidated file         */
APDU.SW_INVFORMAT          = 0x6284;      	/* Warning: Invalid file control     */
APDU.SW_WARNINGNVCHG       = 0x6300;      	/*-Warning: NV-Ram changed           */
APDU.SW_WARNINGCOUNT       = 0x63C0;      	/*-Warning: Warning with counter     */
APDU.SW_WARNING0LEFT       = 0x63C0;      	/*-Warning: Verify fail, no try left */
APDU.SW_WARNING1LEFT       = 0x63C1;      	/*-Warning: Verify fail, 1 try left  */
APDU.SW_WARNING2LEFT       = 0x63C2;      	/*-Warning: Verify fail, 2 tries left*/
APDU.SW_WARNING3LEFT       = 0x63C3;      	/*-Warning: Verify fail, 3 tries left*/
APDU.SW_EXECERR            = 0x6400;      	/*-Exec error: NV-Ram not changed    */
APDU.SW_MEMERR             = 0x6501;      	/*-Exec error: Memory failure        */
APDU.SW_MEMERRWRITE        = 0x6581;      	/*-Exec error: Memory failure        */
APDU.SW_WRONGLENGTH        = 0x6700;      	/*-Checking error: Wrong length      */

APDU.SW_CLANOTSUPPORTED    = 0x6800;      	/*-Checking error: Function in CLA byte not supported */
APDU.SW_LCNOTSUPPORTED     = 0x6881;      	/*-Checking error: Logical channel not supported */
APDU.SW_SMNOTSUPPORTED     = 0x6882;      	/*-Checking error: Secure Messaging not supported */
APDU.SW_LASTCMDEXPECTED    = 0x6883;      	/*-Checking error: Last command of the chain expected */
APDU.SW_CHAINNOTSUPPORTED  = 0x6884;      	/*-Checking error: Command chaining not supported */

APDU.SW_COMNOTALLOWED      = 0x6900;      	/*-Checking error: Command not allowed */
APDU.SW_COMINCOMPATIBLE    = 0x6981;      	/*-Checking error: Command incompatible with file structure */
APDU.SW_SECSTATNOTSAT      = 0x6982;      	/*-Checking error: Security condition not satisfied */
APDU.SW_AUTHMETHLOCKED     = 0x6983;      	/*-Checking error: Authentication method locked */
APDU.SW_REFDATANOTUSABLE   = 0x6984;      	/*-Checking error: Reference data not usable */
APDU.SW_CONDOFUSENOTSAT    = 0x6985;      	/*-Checking error: Condition of use not satisfied */
APDU.SW_COMNOTALLOWNOEF    = 0x6986;      	/*-Checking error: Command not allowed (no current EF) */
APDU.SW_SMOBJMISSING       = 0x6987;      	/*-Checking error: Expected secure messaging object missing */
APDU.SW_INCSMDATAOBJECT    = 0x6988;      	/*-Checking error: Incorrect secure messaging data object */

APDU.SW_INVPARA            = 0x6A00;      	/*-Checking error: Wrong parameter P1-P2 */
APDU.SW_INVDATA            = 0x6A80;      	/*-Checking error: Incorrect parameter in the command data field*/
APDU.SW_FUNCNOTSUPPORTED   = 0x6A81;      	/*-Checking error: Function not supported */
APDU.SW_NOAPPL             = 0x6A82;      	/*-Checking error: File not found    */
APDU.SW_FILENOTFOUND       = 0x6A82;      	/*-Checking error: File not found    */
APDU.SW_RECORDNOTFOUND     = 0x6A83;      	/*-Checking error: Record not found    */
APDU.SW_OUTOFMEMORY        = 0x6A84;      	/*-Checking error: Not enough memory space in the file   */
APDU.SW_INVLCTLV           = 0x6A85;      	/*-Checking error: Nc inconsistent with TLV structure */
APDU.SW_INVACC             = 0x6A85;      	/*-Checking error: Access cond. n/f  */
APDU.SW_INCP1P2            = 0x6A86;      	/*-Checking error: Incorrect P1-P2   */
APDU.SW_INVLC              = 0x6A87;      	/*-Checking error: Lc inconsistent with P1-P2 */
APDU.SW_RDNOTFOUND         = 0x6A88;      	/*-Checking error: Reference data not found*/
APDU.SW_FILEEXISTS         = 0x6A89;      	/*-Checking error: File already exists */
APDU.SW_DFNAMEEXISTS       = 0x6A8A;      	/*-Checking error: DF name already exists */

APDU.SW_INVP1P2            = 0x6B00;      	/*-Checking error: Wrong parameter P1-P2 */
APDU.SW_INVLE              = 0x6C00;      	/*-Checking error: Invalid Le        */
APDU.SW_INVINS             = 0x6D00;      	/*-Checking error: Wrong instruction */
APDU.SW_INVCLA             = 0x6E00;      	/*-Checking error: Class not supported */
APDU.SW_ACNOTSATISFIED     = 0x9804;      	/* Access conditions not satisfied   */
APDU.SW_NOMORESTORAGE      = 0x9210;      	/* No more storage available         */
APDU.SW_GENERALERROR       = 0x6F00;      	/*-Checking error: No precise diagnosis */


/**
 * Create an APDU object from the encoded form (Called internally)
 *
 * @param {ByteString} bs
 */
APDU.prototype.fromByteString = function(bs) {
	if (bs.length < 4) {
		throw new GPError("APDU", GPError.INVALID_DATA, APDU.SW_GENERALERROR, "Command APDU must be at least 4 bytes long");
	}
	this.cla = bs.byteAt(0);
	this.ins = bs.byteAt(1);
	this.p1 = bs.byteAt(2);
	this.p2 = bs.byteAt(3);

	if (bs.length > 4) {
		var extended = false;

		var i = 4;
		var l = bs.length - i;
		var n = bs.byteAt(i++);
		l--;

		if ((n == 0) && (l > 0)) {
			extended = true;
			if (l < 2) {
				throw new GPError("APDU", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Extended length APDU too short");
			}
			n = (bs.byteAt(i) << 8) + bs.byteAt(i + 1);
			i += 2;
			l -= 2;
		}

		if (l > 0) {	// Case 3s / Case 3e / Case 4s / Case 4e
			if (l < n) {
				throw new GPError("APDU", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Invalid Lc in APDU");
			}
			this.cdata = bs.bytes(i, n);
			i += n;
			l -= n;

			if (l > 0) {	// Case 4s / Case 4e
				n = bs.byteAt(i++);
				l--;
				if (extended) {
					if (l < 1) {
						throw new GPError("APDU", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Invalid Le in extended APDU");
					}
					n = (n << 8) + bs.byteAt(i++);
					l--;
				}
				this.ne = (extended && (n == 0) ? 65536 : n);
			}
		} else {
			this.ne = (extended && (n == 0) ? 65536 : n);
		}

		if (l > 0) {
			throw new GPError("APDU", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Too many bytes in APDU");
		}
	}
}



/**
 * Get encoded command APDU
 *
 * @type ByteString
 * @return the encoded command APDU
 */
APDU.prototype.getCommandAPDU = function() {
	var bb = new ByteBuffer();

	bb.append(this.cla);
	bb.append(this.ins);
	bb.append(this.p1);
	bb.append(this.p2);

	var hasCData = (typeof(this.cdata) != "undefined");
	var hasNe = (typeof(this.ne) != "undefined");

	var extended = ((hasCData && this.cdata.length > 255) ||
					(hasNe && this.ne > 256));

	if (extended) {
		bb.append(0);
	}

	if (hasCData && this.cdata.length > 0) {
		if (extended) {
			bb.append(this.cdata.length >> 8);
		}
		bb.append(this.cdata.length & 0xFF);
		bb.append(this.cdata);
	}

	if (hasNe) {
		if (extended) {
			bb.append(this.ne >> 8);
		}
		bb.append(this.ne & 0xFF);
	}

	return bb.toByteString();
}



/**
 * Get encoded response APDU
 *
 * @type ByteString
 * @return the encoded response APDU
 */
APDU.prototype.getResponseAPDU = function() {
	var bb = new ByteBuffer();

	if (this.rdata) {
		bb.append(this.rdata);
	}

	bb.append(this.SW >> 8);
	bb.append(this.SW & 0xFF);

	return bb.toByteString();
}



/**
 * Gets the class byte
 *
 * @type Number
 * @return the class byte
 */
APDU.prototype.getCLA = function() {
	return this.cla;
}



/**
 * Sets the class byte, e.g. after a transformation
 *
 * @parameter {Number} the new CLA byte
 */
APDU.prototype.setCLA = function(cla) {
	this.cla = cla;
}



/**
 * Test if command is an ISO command
 *
 * @type boolean
 * @return true if command has ISO class byte
 */
APDU.prototype.isISO = function() {
	return (this.cla & 0x80) == 0x00;
}



/**
 * Test if command uses extended length
 *
 * @type boolean
 * @return true if APDU uses extended length
 */
APDU.prototype.isExtendedLength = function() {
	return ((this.hasCData() && this.cdata.length > 255) || (this.hasLe() && (this.ne > 256)));
}



/**
 * Test if command chaining is indicated
 *
 * @type boolean
 * @return true if chaining bit is set
 */
APDU.prototype.isChained = function() {
	return (this.cla & 0x10) == 0x10;
}



/**
 * Test if command is send using secure messaging
 *
 * @type boolean
 * @return true if secure messaging is indicated in CLA byte
 */
APDU.prototype.isSecureMessaging = function() {
	return (this.cla & 0x08) == 0x08;
}



/**
 * Test if command is send using secure messaging
 *
 * @type boolean
 * @return true if secure messaging is using an authenticated header
 */
APDU.prototype.isAuthenticatedHeader = function() {
	return (this.cla & 0x0C) == 0x0C;
}



/**
 * Gets the instruction byte
 *
 * @type Number
 * @return the instruction byte
 */
APDU.prototype.getINS = function() {
	return this.ins;
}



/**
 * Gets the P1 byte
 *
 * @type Number
 * @return the P1 byte
 */
APDU.prototype.getP1 = function() {
	return this.p1;
}



/**
 * Gets the P2 byte
 *
 * @type Number
 * @return the P2 byte
 */
APDU.prototype.getP2 = function() {
	return this.p2;
}



/**
 * Set the command data
 *
 * @param {ByteString} cdata the command data
 */
APDU.prototype.setCData = function(cdata) {
	if (cdata instanceof ByteString) {
		this.cdata = cdata;
	} else {
		delete this.cdata;
	}
}



/**
 * Gets the command data
 *
 * @type ByteString
 * @return the command data, if any else undefined
 */
APDU.prototype.getCData = function() {
	return this.cdata;
}



/**
 * Check if APDU has command data
 *
 * @type boolean
 * @return true if command APDU has data field
 */
APDU.prototype.hasCData = function() {
	return typeof(this.cdata) != "undefined";
}



/**
 * Gets the command data as a list of TLV objects
 *
 * @type TLVList
 * @return the command data as TLV list, if any else undefined
 */
APDU.prototype.getCDataAsTLVList = function() {
	if (!this.hasCData()) {
		throw new GPError("APDU", GPError.INVALID_DATA, APDU.SW_INVDATA, "No data in command APDU");
	}

	try	{
		var a = new TLVList(this.cdata, TLV.EMV);
	}
	catch(e) {
		throw new GPError("APDU", GPError.INVALID_DATA, APDU.SW_INVDATA, "Invalid TLV data in command APDU");
	}

	return a;
}



/**
 * Gets the number of expected bytes
 *
 * @type Number
 * @return the number of expected bytes or undefined
 */
APDU.prototype.getNe = function() {
	return this.ne;
}



/**
 * Check if APDU has Le field
 *
 * @type boolean
 * @return true if command APDU has Le field
 */
APDU.prototype.hasLe = function() {
	return typeof(this.ne) != "undefined";
}



/**
 * Set secure channel object to be used in wrap and unwrap methods
 *
 * @param {SecureChannel} secureChannel the channel
 */
APDU.prototype.setSecureChannel = function(secureChannel) {
	this.secureChannel = secureChannel;
}



/**
 * Return the secure channel, if any
 *
 * @type SecureChannel
 * @return the secure channel
 */
APDU.prototype.getSecureChannel = function() {
	return this.secureChannel;
}



/**
 * Test if a secure channel is defined for this APDU
 *
 * @type boolean
 * @return true, if secure channel is set
 */
APDU.prototype.hasSecureChannel = function() {
	return (typeof(this.secureChannel) != "undefined") && (this.secureChannel != null);
}



/**
 * Wrap APDU using secure channel
 */
APDU.prototype.wrap = function() {
	if (this.hasSecureChannel()) {
		this.secureChannel.wrap(this);
	}
}



/**
 * Unwrap APDU using secure channel
 */
APDU.prototype.unwrap = function() {
	if (this.hasSecureChannel()) {
		this.secureChannel.unwrap(this);
	}
}



/**
 * Sets the response data field for the response APDU
 *
 * @param {ByteString} data the response data field
 */
APDU.prototype.setRData = function(data) {
	if ((data.length > 256) && !this.isExtendedLength()) {
		throw new GPError("APDU", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Too many bytes in APDU");
	}
	this.rdata = data;
}



/**
 * Get the response data
 *
 * @type ByteString
 * @return the response data
 */
APDU.prototype.getRData = function() {
	return this.rdata;
}



/**
 * Check if APDU has response data
 *
 * @type boolean
 * @return true if response APDU has data field
 */
APDU.prototype.hasRData = function() {
	return ((typeof(this.rdata) != "undefined") && (this.rdata != null));
}



/**
 * Sets the status word for the response ADPU
 *
 * @param {Number} sw the status word
 */
APDU.prototype.setSW = function(sw) {
	this.SW = sw;
}



/**
 * Get the status word
 *
 * @type Number
 * @return the status word
 */
APDU.prototype.getSW = function() {
	return this.SW;
}



/**
 * Return a human readable form of this object
 */
APDU.prototype.toString = function() {
	return this.getCommandAPDU().toString(HEX) + " : " + this.getResponseAPDU().toString(HEX);
}



/**
 * Simple unit test
 */
APDU.test = function() {
	// Case 1
	var a = new APDU(0x00, 0xA4, 0x00, 0x0C);
	print(a);
	assert(!a.isExtendedLength());
	var b = a.getCommandAPDU();
	assert(b.toString(HEX) == "00A4000C");
	var c = new APDU(b);
	assert(a.toString() == c.toString());

	// Case 2 Short
	var a = new APDU(0x00, 0xA4, 0x00, 0x0C, 0);
	print(a);
	assert(!a.isExtendedLength());
	var b = a.getCommandAPDU();
	assert(b.toString(HEX) == "00A4000C00");
	var c = new APDU(b);
	assert(a.toString() == c.toString());

	// Case 2 Extended
	var a = new APDU(0x00, 0xA4, 0x00, 0x0C, 65536);
	print(a);
	assert(a.isExtendedLength());
	var b = a.getCommandAPDU();
	assert(b.toString(HEX) == "00A4000C000000");
	var c = new APDU(b);
	print(c);
	assert(a.toString() == c.toString());

	// Case 3 Short
	var a = new APDU(0x00, 0xA4, 0x00, 0x0C, new ByteString("3F00", HEX));
	print(a);
	assert(!a.isExtendedLength());
	var b = a.getCommandAPDU();
	assert(b.toString(HEX) == "00A4000C023F00");
	var c = new APDU(b);
	assert(a.toString() == c.toString());

	// Case 3 Extended
	var data = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF";
	var a = new APDU(0x00, 0xA4, 0x00, 0x0C, new ByteString(data, HEX));
	print(a);
	assert(a.isExtendedLength());
	var b = a.getCommandAPDU();
	assert(b.toString(HEX) == "00A4000C000100" + data);
	var c = new APDU(b);
	assert(a.toString() == c.toString());

	// Case 4 Short
	var a = new APDU(0x00, 0xA4, 0x00, 0x0C, new ByteString("3F00", HEX), 0);
	print(a);
	assert(!a.isExtendedLength());
	var b = a.getCommandAPDU();
	assert(b.toString(HEX) == "00A4000C023F0000");
	var c = new APDU(b);
	assert(a.toString() == c.toString());

	// Case 4b Extended
	var a = new APDU(0x00, 0xA4, 0x00, 0x0C, new ByteString(data, HEX), 0);
	print(a);
	assert(a.isExtendedLength());
	var b = a.getCommandAPDU();
	assert(b.toString(HEX) == "00A4000C000100" + data + "0000");
	var c = new APDU(b);
	assert(a.toString() == c.toString());

	// Case 4b Extended
	var a = new APDU(0x00, 0xA4, 0x00, 0x0C, new ByteString("3F00", HEX), 65536);
	print(a);
	assert(a.isExtendedLength());
	var b = a.getCommandAPDU();
	assert(b.toString(HEX) == "00A4000C0000023F000000");
	var c = new APDU(b);
	assert(a.toString() == c.toString());
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview AccessController base class
 */

 
/**
 * Create an default controller granting read but denying write access 
 * @Class Class implementing a default access controller
 * @constructor
 */
function AccessController() {
	this.name = "AccessController";
}

exports.AccessController = AccessController;



/**
 * Check if read access to file system node is allowed
 *
 * @param {APDU} apdu the APDU used to access the object
 * @param {FSNode} node the file system object
 * @type boolean
 * @return true if access is allowed
 */
AccessController.prototype.checkFileReadAccess = function(ci, apdu, node) {
	return true;
}



/**
 * Check if write access to file system node is allowed
 *
 * @param {APDU} apdu the APDU used to access the object
 * @param {FSNode} node the file system object
 * @type boolean
 * @return true if access is allowed
 */
AccessController.prototype.checkFileWriteAccess = function(ci, apdu, node) {
	return false;
}



/**
 * Check if command is allowed
 *
 * @param {APDU} apdu the APDU to check
 * @type boolean
 * @return true if access is allowed
 */
AccessController.prototype.checkCommandAccess = function(ci, apdu) {
	return true;
}



AccessController.prototype.toString = function() {
	return this.name;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview AuthenticationObject - Password, PIN or key container for external authentication
 */

var FileSystemIdObject  = require('scsh/cardsim/FileSystemIdObject').FileSystemIdObject;
var APDU                = require('scsh/cardsim/APDU').APDU;



/**
 * Create an authentication object
 *
 * @class Class implementing authentication objects like PINs, PACE passwords or keys
 *
 * @param {String} name the human readable name of the object
 * @param {String} type one of AuthenticationObject.TYPE_PACE or AuthenticationObject.TYPE_PIN
 * @param {Number} id the password or key id
 * @param {ByteString} value the reference value
 */
function AuthenticationObject(name, type, id, value) {
	FileSystemIdObject.call(this, name, id);
	this.type = type;
	this.value = value;
	this.retrycounter = 3;
	this.initialretrycounter = 3;
	this.usecounter = -1;
	this.resetcounter = -1;
	this.minLength = 4;
	this.isActive = true;				// State after using ACTIVATE / DEACTIVATE
	this.isEnabled = true;				// State after using ENABLE / DISABLE VERIFICATION REQUIREMENT
	this.isTransport = false;			// State before first change PIN
	this.isTerminated = false;			// State after TERMINATE
	this.allowActivate = false;
	this.allowDeactivate = false;
	this.allowEnable = false;
	this.allowDisable = false;
	this.allowResetRetryCounter = false;
	this.allowResetValue = false;
	this.allowTerminate = false;
	this.unsuspendAuthenticationObject = null;
	this.unblockAuthenticationObject = null;
}

AuthenticationObject.prototype = new FileSystemIdObject();
AuthenticationObject.prototype.constructor = AuthenticationObject;

exports.AuthenticationObject = AuthenticationObject;


AuthenticationObject.TYPE_PACE = "pace";
AuthenticationObject.TYPE_PIN = "pin";



/**
 * Override from base class
 */
AuthenticationObject.prototype.getType = function() {
	return this.type;
}



AuthenticationObject.prototype.isBlocked = function() {
	return ((this.initialretrycounter != 0) && (this.retrycounter == 0));
}



AuthenticationObject.prototype.isSuspended = function() {
	return ((this.initialretrycounter != 0) && (this.retrycounter == 1));
}



/**
 * Activate authentication object
 */
AuthenticationObject.prototype.activate = function() {
	if (!this.allowActivate) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_CONDOFUSENOTSAT, "Activate not allowed for authentication object");
	}
	this.isActive = true;
}



/**
 * Deactivate authentication object
 */
AuthenticationObject.prototype.deactivate = function() {
	if (!this.allowDeactivate) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_CONDOFUSENOTSAT, "Deactivate not allowed for authentication object");
	}
	this.isActive = false;
}



/**
 * Reset retry counter and optionally set new reference value
 *
 * @param {ByteString} newValue new reference value
 */
AuthenticationObject.prototype.resetRetryCounter = function(newValue) {
	if (!this.allowResetRetryCounter) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_CONDOFUSENOTSAT, "Reset retry counter not allowed for authentication object");
	}
	if (newValue && !this.allowResetValue) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_CONDOFUSENOTSAT, "Reset retry counter not allowed with new value for authentication object");
	}
	if (this.resetcounter != -1) {
		if (this.resetcounter == 0) {
			throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_CONDOFUSENOTSAT, "Reset retry counter is 0");
		}
		this.resetcounter--;
	}
	if (newValue && (newValue.length < this.minLength)) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "New reference data too short");
	}
	this.retrycounter = this.initialretrycounter;
	this.isActive = true;

	if (this.initialretrycounter) {
		this.retrycounter = this.initialretrycounter;
	}
	if (newValue) {
		this.isTransport = false;
		this.value = newValue;
	}
}



/**
 * Change reference data, optionally verifying the old value before
 *
 * @param {Number} qualifier command qualifier, 00 = oldPIN||newPIN, 01 = newPIN
 * @param {ByteString} value new reference value
 */
AuthenticationObject.prototype.changeReferenceData = function(qualifier, value) {
	if (!this.allowChangeReferenceData) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_CONDOFUSENOTSAT, "Change reference data not allowed for authentication object");
	}
	if (qualifier == 0x01) {
		if (!this.isTerminated) {
			throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_CONDOFUSENOTSAT, "Change reference data with P1=01 not allowed non terminated authentication object");
		}
		if (this.associatedKey && !this.associatedKey.isTerminated) {
			throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_REFDATANOTUSABLE, "Associated key is not terminated");
		}
	}
	if ((qualifier == 0x00) && (value.length <= this.value.length)) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_INVDATA, "Command data does not contain a new PIN value for P1=00");
	}
	if (qualifier == 0x00) {
		this.verify(value.left(this.value.length));
		value = value.bytes(this.value.length);
	}

	if (value.length < this.minLength) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "New reference data too short");
	}

	this.value = value;
	this.isTerminated = false;
}



/**
 * Verify PIN value
 *
 * @param {ByteString} value reference value
 */
AuthenticationObject.prototype.verify = function(value) {
	if (this.isBlocked()) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_AUTHMETHLOCKED, "Authentication method blocked");
	}
	if (this.isTerminated) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_REFDATANOTUSABLE, "Authentication method terminated");
	}
	this.decreaseRetryCounter();
	if (!this.value.equals(value)) {
		var sw = APDU.SW_WARNINGCOUNT | this.retrycounter;
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, sw, "Authentication failed");
	}
	this.restoreRetryCounter();
}



/**
 * Deactivate authentication object
 */
AuthenticationObject.prototype.decreaseRetryCounter = function() {
	if (this.initialretrycounter) {
		this.retrycounter--;
	}
}



/**
 * Deactivate authentication object
 */
AuthenticationObject.prototype.restoreRetryCounter = function() {
	if (this.initialretrycounter) {
		this.retrycounter = this.initialretrycounter;
	}
}



/**
 * Terminate authentication object
 */
AuthenticationObject.prototype.terminate = function() {
	if (!this.allowTerminate) {
		throw new GPError("AuthenticationObject", GPError.INVALID_DATA, APDU.SW_CONDOFUSENOTSAT, "Terminate not allowed for authentication object");
	}
	this.isTerminated = true;
}



/**
 * Convert object to a human readable string
 */
AuthenticationObject.prototype.toString = function() {
	var state = "";
	if (this.isBlocked()) {
		state += "blocked ";
	} else if (this.isTerminated) {
		state += "terminated ";
	} else {
		if (this.isActive) {
			state += "active ";
		}
		if (this.isActive) {
			state += "enabled ";
		} else {
			state += "disabled ";
		}
		if (this.isTransport) {
			state += "transport ";
		}
	}
	var str = this.type + ":" + this.name + "(" + this.id + ") is " + state;
	if (this.initialretrycounter) {
		str += " RC=" + this.retrycounter;
	}
	return str;
}


/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of an ISO 7816-4 command interpreter
 */

var TransparentEF   = require('scsh/cardsim/TransparentEF').TransparentEF;
var LinearEF        = require('scsh/cardsim/LinearEF').LinearEF;
var APDU            = require('scsh/cardsim/APDU').APDU;
var DataUnitAPDU    = require('scsh/cardsim/DataUnitAPDU').DataUnitAPDU;



/**
 * Create a command interpreter
 *
 * @class Class implementing a command interpreter that handles ISO 7816-4 command APDUs
 * @constructor
 * @param {FileSelector} fileSelector the file selector object
 */
function CommandInterpreter(fileSelector) {
	this.fileSelector = fileSelector;
}

exports.CommandInterpreter = CommandInterpreter;



/**
 * Set secure channel
 *
 * @param {SecureChannel} secureChannel the secure channel to used for unwrapping and wrapping APDUs
 */
CommandInterpreter.prototype.setSecureChannel = function(secureChannel) {
	this.secureChannel = secureChannel;
}



/**
 * Return status of secure channel
 *
 * @type boolean
 * @return true if secure channel is active
 */
CommandInterpreter.prototype.hasSecureChannel = function() {
	return (typeof(this.secureChannel) != "undefined") && (this.secureChannel != null);
}



/**
 * Process a READ BINARY APDU
 *
 * @param {APDU} apdu the command and response APDU
 */
CommandInterpreter.prototype.readBinary = function(apdu) {
	if (!apdu.hasLe()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Wrong length - missing Le field");
	}

	if (apdu.isChained()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_CHAINNOTSUPPORTED, "Chaining not supported in READ BINARY");
	}

	var dua = new DataUnitAPDU(apdu);

	if (dua.hasCData()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_INVDATA, "Command data not expected in  READ BINARY");
	}

	var ef;
	var sfi = dua.getSFI();
	var fid = dua.getFID();

	if (sfi >= 0) {
		ef = this.fileSelector.selectSFI(sfi);
	} else if (fid != null) {
		ef = this.fileSelector.selectFID(fid, false, false);
	} else {
		ef = this.fileSelector.getCurrentEF();

		if (ef == null) {
			throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_COMNOTALLOWNOEF, "No current EF in READ BINARY");
		}
	}

	if (!(ef instanceof TransparentEF)) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_COMINCOMPATIBLE, "EF is not a transparent file in READ BINARY");
	}

	var ac = this.fileSelector.getMeta("accessController");
	if (ac && !ac.checkFileReadAccess(this, apdu, ef)) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_SECSTATNOTSAT, "Read access not allowed as determined by " + ac);
	}

	var offset = dua.getOffset();
	var length = apdu.getNe();

	var data = ef.readBinary(apdu, offset, length);

	apdu.setRData(data);
}



/**
 * Process an UPDATE BINARY APDU
 *
 * @param {APDU} apdu the command and response APDU
 */
CommandInterpreter.prototype.updateBinary = function(apdu) {
	if (apdu.isChained()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_CHAINNOTSUPPORTED, "Chaining not supported in READ BINARY");
	}

	if (!apdu.hasCData()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "No data found in UPDATE BINARY");
	}

	var dua = new DataUnitAPDU(apdu);

	if (!dua.hasCData()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_INVDATA, "No data found in UPDATE BINARY");
	}

	var ef;
	var sfi = dua.getSFI();
	var fid = dua.getFID();

	if (sfi >= 0) {
		ef = this.fileSelector.selectSFI(sfi);
	} else if (fid != null) {
		ef = this.fileSelector.selectFID(fid, false, false);
	} else {
		ef = this.fileSelector.getCurrentEF();

		if (ef == null) {
			throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_COMNOTALLOWNOEF, "No current EF in UPDATE BINARY");
		}
	}

	if (!(ef instanceof TransparentEF)) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_COMINCOMPATIBLE, "EF is not a transparent file in UPDATE BINARY");
	}

	var ac = this.fileSelector.getMeta("accessController");
	if (ac && !ac.checkFileWriteAccess(this, apdu, ef)) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_SECSTATNOTSAT, "Write access not allowed as determined by " + ac);
	}

	var offset = dua.getOffset();
	var data = dua.getCData();

	ef.updateBinary(apdu, offset, data);
}



/**
 * Process a READ RECORD APDU
 *
 * @param {APDU} apdu the command and response APDU
 */
CommandInterpreter.prototype.readRecord = function(apdu) {
	if (!apdu.hasLe()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Wrong length - missing Le field");
	}

	if (apdu.isChained()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_CHAINNOTSUPPORTED, "Chaining not supported in READ RECORD");
	}

	var recno = apdu.getP1();
	var sfi = apdu.getP2() >> 3;
	var qualifier = apdu.getP2() & 0x7;

	if (sfi > 0) {
		ef = this.fileSelector.selectSFI(sfi);
	} else {
		ef = this.fileSelector.getCurrentEF();

		if (ef == null) {
			throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_COMNOTALLOWNOEF, "No current EF in READ RECORD");
		}
	}

	if (!(ef instanceof LinearEF)) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_COMINCOMPATIBLE, "EF is not a linear file in READ RECORD");
	}

	var ac = this.fileSelector.getMeta("accessController");
	if (ac && !ac.checkFileReadAccess(this, apdu, ef)) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_SECSTATNOTSAT, "Read access not allowed as determined by " + ac);
	}

	var data = ef.readRecord(apdu, recno, qualifier, apdu.getNe());

	apdu.setRData(data);
}



/**
 * Performs a VERIFY command
 *
 * @param {APDU} the apdu
 */
CommandInterpreter.prototype.verify = function(apdu) {
	if (apdu.isChained()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_CHAINNOTSUPPORTED, "Chaining not supported in command");
	}

	var pinao = this.fileSelector.getObject(AuthenticationObject.TYPE_PIN, apdu.getP2());
	if (!pinao) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_RDNOTFOUND, "PIN with reference " + apdu.getP2() + " not found");
	}

	if (apdu.hasCData()) {
		pinao.verify(apdu.getCData());
	} else {
		if (!this.fileSelector.isAuthenticated(ao)) {
			pinao.determineStatus();
		}
	}

	apdu.setSW(APDU.SW_OK);
}



/**
 * Performs a CHANGE REFERENCE DATA command
 *
 * @param {APDU} the apdu
 */
CommandInterpreter.prototype.changeReferenceData = function(apdu) {
	if (apdu.isChained()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_CHAINNOTSUPPORTED, "Chaining not supported in command");
	}
	if (!apdu.hasCData()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Command must have C-data");
	}

	var pinao = this.fileSelector.getObject(AuthenticationObject.TYPE_PIN, apdu.getP2());
	if (!pinao) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_RDNOTFOUND, "PIN with reference " + apdu.getP2() + " not found");
	}

	pinao.changeReferenceData(apdu.getP1(), apdu.getCData());

	apdu.setSW(APDU.SW_OK);
}



/**
 * Performs a RESET RETRY COUNTER command
 *
 * @param {APDU} the apdu
 */
CommandInterpreter.prototype.resetRetryCounter = function(apdu) {
	if (apdu.isChained()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_CHAINNOTSUPPORTED, "Chaining not supported in command");
	}
	var p1 = apdu.getP1();

	if (p1 == 0x02) {
		if (!apdu.hasCData()) {
			throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Command must have C-data");
		}
	} else if (p1 == 0x03) {
		if (apdu.hasCData()) {
			throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Command must not have C-data");
		}
	} else {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_INCP1P2, "Invalid P1 or P2");
	}

	var pinao = this.fileSelector.getObject(AuthenticationObject.TYPE_PIN, apdu.getP2());
	if (!pinao) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_RDNOTFOUND, "PIN with reference " + apdu.getP2() + " not found");
	}

	pinao.resetRetryCounter(apdu.getCData());

	apdu.setSW(APDU.SW_OK);
}



/**
 * Process a MANAGE SECURITY ENVIRONMENT APDU
 *
 * @param {APDU} apdu the command and response APDU
 */
CommandInterpreter.prototype.manageSecurityEnvironment = function(apdu) {
	var p1 = apdu.getP1();
	var p2 = apdu.getP2();

	var se = this.fileSelector.getSecurityEnvironment();

	if ((p1 & 0x0F) != 1) { 	// SET
		throw new GPError("CommandInterpreter", GPError.INVALID_TYPE, APDU.APDU.SW_FUNCNOTSUPPORTED, "Only MANAGE SE set variant supported");
	}

	var tlv = new ASN1(p2, apdu.getCData());

	if (p1 & 0x80) {					// Verification, Encryption, External Authentication and Key Agreement
		var t = new ASN1(tlv.getBytes());		// Dirty trick to deserialize as TLV tree
		se.VEXK.add(t);
	}
	if (p1 & 0x40) {					// Calculation, Decryption, Internal Authentication and Key Agreement
		var t = new ASN1(tlv.getBytes());		// Dirty trick to deserialize as TLV tree
		se.CDIK.add(t);
	}
	if (p1 & 0x20) {					// Secure Messaging Response
		var t = new ASN1(tlv.getBytes());		// Dirty trick to deserialize as TLV tree
		se.SMRES.add(t);
	}
	if (p1 & 0x10) {					// Secure Messaging Command
		var t = new ASN1(tlv.getBytes());		// Dirty trick to deserialize as TLV tree
		se.SMCOM.add(t);
	}
	apdu.setSW(APDU.SW_OK);
}



/**
 * Process a secure messaging command APDU, if secure messaging is active.
 *
 * @param {APDU} apdu the command APDU
 */
CommandInterpreter.prototype.handleSecMsgCommandAPDU = function(apdu) {
	if (apdu.isSecureMessaging()) {
		if (this.hasSecureChannel()) {
			try	{
				apdu.setSecureChannel(this.secureChannel);
				apdu.unwrap();
			}
			catch(e) {
				this.setSecureChannel();	// Reset secure channel
				throw e;
			}
		} else {
			throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_SMNOTSUPPORTED, "No secure messaging channel");
		}
	} else {
		if (this.hasSecureChannel()) {
			this.setSecureChannel();	// Reset secure channel
		}
	}
}



/**
 * Process a secure messaging response APDU, if secure messaging is active
 *
 * @param {APDU} apdu the response APDU
 */
CommandInterpreter.prototype.handleSecMsgResponseAPDU = function(apdu) {
	if (apdu.isSecureMessaging() && this.hasSecureChannel()) {
		apdu.wrap();
	}
}



/**
 * Dispatch to command handler based on instruction code
 *
 * @param {APDU} apdu the command and response APDU
 * @param {Number} ins instruction code
 */
CommandInterpreter.prototype.dispatch = function(apdu, ins) {
	if (!apdu.isISO()) {
		apdu.setSW(APDU.SW_INVCLA);
		return;
	}

	if (apdu.isChained()) {
		throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_CHAINNOTSUPPORTED, "Chaining not supported");
	}

	switch(ins) {
		case APDU.INS_SELECT:
			this.fileSelector.processSelectAPDU(apdu);
			break;
		case APDU.INS_READ_BINARY:
			this.readBinary(apdu);
			break;
		case APDU.INS_UPDATE_BINARY:
			this.updateBinary(apdu);
			break;
		case APDU.INS_READ_RECORD:
			this.readRecord(apdu);
			break;
		case APDU.INS_VERIFY:
			this.verify(apdu);
			break;
		case APDU.INS_RESET_RETRY_COUNTER:
			this.resetRetryCounter(apdu);
			break;
		case APDU.INS_CHANGE_REFERENCE_DATA:
			this.changeReferenceData(apdu);
			break;
		case APDU.INS_MANAGE_SE:
			this.manageSecurityEnvironment(apdu);
			break;
		default:
			apdu.setSW(APDU.SW_INVINS);
	}
}



/**
 * Process a command APDU
 *
 * @param {APDU} apdu the command and response APDU
 */
CommandInterpreter.prototype.processAPDU = function(apdu) {
	try	{
		this.handleSecMsgCommandAPDU(apdu);

		var cla = apdu.getCLA();
		var ins = apdu.getINS();
		var tlv = (ins & 1) == 1;
		ins &= 0xFE;

		var ac = this.fileSelector.getMeta("accessController");
		if (ac && !ac.checkCommandAccess(this, apdu)) {
			throw new GPError("CommandInterpreter", GPError.INVALID_DATA, APDU.SW_SECSTATNOTSAT, "Command not allowed as determined by " + ac);
		}

		this.dispatch(apdu, ins);
	}
	catch(e) {
		GPSystem.trace(e.fileName + "#" + e.lineNumber + ": " + e);
		var sw = APDU.SW_GENERALERROR;
		if ((e instanceof GPError) && (e.reason >= 0x6200)) {
			apdu.setSW(e.reason);
		} else {
			apdu.setSW(APDU.SW_GENERALERROR);
		}
	}
	this.handleSecMsgResponseAPDU(apdu);
}

/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of a ISO 7816-4 file system simulation
 */

var APDU                = require('scsh/cardsim/APDU').APDU;
var FSNode              = require('scsh/cardsim/FSNode').FSNode;
var FileSystemIdObject  = require('scsh/cardsim/FileSystemIdObject').FileSystemIdObject;



/**
 * Creates a Dedicated File (DF)
 *
 * <p>The constructor supports as argument a list of child elements</p>
 *
 * @class Class implementing dedicated files
 * @constructor
 * @param {FCP} the file control parameter
 */
function DF(fcp) {
	this.childs = new Array();
	this.fidmap = new Array();
	this.sfimap = new Array();
	this.aidmap = new Array();
	this.meta = new Array();

	FSNode.call(this, fcp);

	if (arguments.length > 1) {
		for (var i = 1; i < arguments.length; i++) {
			var arg = arguments[i];
			this.add(arg);
		}
	}
}

DF.prototype = new FSNode();
DF.prototype.constructor = DF;

exports.DF = DF;


/**
 * Adds a new child node to the DF
 *
 * @param {FSNode} node the node to add
 */
DF.prototype.add = function(node) {
	this.childs.push(node);
	node.setParent(this);

	var f = node.getFCP();

	var fid = f.getFID();
	if (fid) {
		if (this.fidmap[fid]) {
			throw new GPError("DF", GPError.INVALID_DATA, APDU.SW_FILEEXISTS, "Duplicate file identifier " + fid);
		}
		this.fidmap[fid] = node;
	}

	if (node.isDF()) {
		var aid = f.getAID();
		if (aid) {
			if (this.aidmap[aid]) {
				throw new GPError("DF", GPError.INVALID_DATA, APDU.SW_FILEEXISTS, "Duplicate application identifier " + aid);
			}
			this.aidmap[aid] = node;
		}
	} else {
		var sfi = f.getSFI();
//		print("Found SFI " + sfi);
		if (typeof(sfi) != "undefined") {
			if (this.sfimap[sfi]) {
				throw new GPError("DF", GPError.INVALID_DATA, APDU.SW_FILEEXISTS, "Duplicate short file identifier " + sfi);
			}
			this.sfimap[sfi] = node;
		}
	}

}



/**
 * Add meta information to DF
 *
 * @param {String} name name of meta information
 * @param {Object} value value of meta information
 */
DF.prototype.addMeta = function(name, value) {
	this.meta[name] = value;
}



/**
 * Add object to DF
 *
 * @param {Object} o object to be added. Must have property type and id.
 */
DF.prototype.addObject = function(o) {
	assert((typeof(o) == "object") && (o instanceof FileSystemIdObject), "Argument must be instance of FileSystemIdObject");
	if (typeof(this.meta[o.getType()]) == "undefined") {
		this.meta[o.getType()] = [];
	}
	this.meta[o.getType()][o.getId()] = o;
}



/**
 * Select a file contained in the DF using the file identifier
 *
 * @param {ByteString} the file identifier
 * @type FSNode
 * @return the found node or undefined
 */
DF.prototype.selectByFID = function(fid) {
	return this.fidmap[fid];
}



/**
 * Select a file contained in the DF using the short file identifier
 *
 * @param {Number} the short file identifier
 * @type FSNode
 * @return the found node or undefined
 */
DF.prototype.selectBySFI = function(sfi) {
	return this.sfimap[sfi];
}



/**
 * Select a DF contained in the DF using the application identifier
 *
 * @param {ByteString} the application identifier
 * @type FSNode
 * @return the found node or undefined
 */
DF.prototype.selectByAID = function(aid) {
	return this.aidmap[aid];
}



/**
 * Returns true as this is a DF
 *
 * @type boolean
 * @return true this is a DF
 */
DF.prototype.isDF = function() {
	return true;
}



/**
 * Dump the file system system recursively starting this this node
 *
 * @param {String} indent the string to prefix the output with
 * @type String
 * @return the dump
 */
DF.prototype.dump = function(indent) {
	if (typeof(indent) == "undefined") {
		indent = "";
	}
	var str = indent + this.toString() + "\n";

	if (this instanceof DF) {
		for (var i in this.meta) {
			str += indent + "  Meta:" + i + "\n";
			if (typeof(this.meta[i]) == "object") {
				for each (var e in this.meta[i]) {
					if (e instanceof FileSystemIdObject) {
						str += indent + "    " + e.toString() + "\n";
					}
				}
			}
		}
	}

	for (var i = 0; i < this.childs.length; i++) {
		var c = this.childs[i];

		if (c instanceof DF) {
			str += c.dump("  " + indent);
		} else {
			str += "  " + indent + c.toString() + "\n";
		}
	}
	return str;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview AuthenticationObject - Password, PIN or key container for external authentication
 */

var APDU                = require('scsh/cardsim/APDU').APDU;



/**
 * Create an adapter to decode a APDU for data unit handling
 *
 * @class Adapter class to decode APDUs for data unit handling
 * @constructor
 * @param {APDU} apdu the APDU to decode
 */
function DataUnitAPDU(apdu) {
	this.apdu = apdu;

	var p1 = apdu.getP1();

	if ((this.apdu.getINS() & 1) == 0) {		// Even instruction
		if ((p1 & 0x80) == 0x80) {				// SFI in P1
			this.offset = this.apdu.getP2();
			this.sfi = p1 & 0x1F;
		} else {
			this.offset = (p1 << 8) + this.apdu.getP2();
		}
		this.data = apdu.getCData();
	} else {									// Odd instruction
		var p2 = apdu.getP2();
		var fid = (p1 << 8) + p2;				// FID in P1 P2
		// If bits b16 - b6 are all 0 and b5 - b1 are not all equal, then we have an SFI
		if (((fid & 0xFFE0) == 0) && ((fid & 0x1F) >= 1) && ((fid & 0x1F) <= 30)) {
			this.sfi = fid & 0x1F;
		} else if (fid != 0) {					// FID = 0000 means current file
			var bb = new ByteBuffer();
			bb.append(p1);
			bb.append(p2);
			this.fid = bb.toByteString();
		}

		var a = this.apdu.getCDataAsTLVList();

		if ((a.length < 1) || (a.length > 2)) {
			throw new GPError("DataUnitAPDU", GPError.INVALID_DATA, APDU.SW_INVDATA, "Invalid data for odd instruction data handling command, less than one or more than two elements in TLV");
		}

		var o = a.index(0);
		if (o.getTag() != 0x54) {
			throw new GPError("DataUnitAPDU", GPError.INVALID_DATA, APDU.SW_INVDATA, "Invalid data for odd instruction data handling command, first tag must be '54' offset");
		}

		this.offset = o.getValue().toUnsigned();

		if (a.length == 2) {
			var o = a.index(1);
			var t = o.getTag();
			if ((t != 0x53) && (t != 0x73)) {
				throw new GPError("DataUnitAPDU", GPError.INVALID_DATA, APDU.SW_INVDATA, "Invalid data for odd instruction data handling command, second tag must be '53' or '73'");
			}

			this.data = o.getValue();
		}
	}
}

exports.DataUnitAPDU = DataUnitAPDU;



/**
 * Gets the short file identifier, if one defined
 *
 * @type Number
 * @return the short file identifier in the range 1 to 30 or -1 if not defined
 */
DataUnitAPDU.prototype.getSFI = function() {
	if (typeof(this.sfi) == "undefined") {
		return -1;
	}
	return this.sfi;
}



/**
 * Gets the file identifier, if one defined
 *
 * @type ByteString
 * @return the file identifier or null if not defined
 */
DataUnitAPDU.prototype.getFID = function() {
	if (typeof(this.fid) == "undefined") {
		return null;
	}
	return this.fid;
}



/**
 * Gets the offset
 *
 * @type Number
 * @return the offset to read from or write to
 */
DataUnitAPDU.prototype.getOffset = function() {
	return this.offset;
}



/**
 * Get the command data
 *
 * @type ByteString
 * @return the command data
 */
DataUnitAPDU.prototype.getCData = function() {
	if (!this.hasCData()) {
		throw new GPError("APDU", GPError.INVALID_DATA, APDU.SW_INVDATA, "No data in command APDU");
	}
	return this.data;
}



/**
 * Returns true if command data in contained in the APDU
 *
 * @type boolean
 * @returns true if command data contained
 */
DataUnitAPDU.prototype.hasCData = function() {
	return ((typeof(this.data) != "undefined") && (this.data != null));
}



/**
 * Simple Unit Test
 */
DataUnitAPDU.test = function() {
	var apdu = new APDU(0x00, 0xB0, 0, 0, 0);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0);
	assert(!dh.hasCData());

	var apdu = new APDU(0x00, 0xB0, 0x7F, 0xFF, 0);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0x7FFF);
	assert(!dh.hasCData());

	var apdu = new APDU(0x00, 0xB0, 0x80, 0, 0);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0);
	assert(!dh.hasCData());

	var apdu = new APDU(0x00, 0xB0, 0x80, 0xFF, 0);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0xFF);
	assert(!dh.hasCData());

	var apdu = new APDU(0x00, 0xB1, 0, 0, new ByteString("540100", HEX), 0);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0);
	assert(!dh.hasCData());

	var apdu = new APDU(0x00, 0xB1, 0, 0, new ByteString("5401FF", HEX), 0);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0xFF);
	assert(!dh.hasCData());

	var apdu = new APDU(0x00, 0xB1, 0, 0, new ByteString("540401000000", HEX), 0);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0x01000000);
	assert(!dh.hasCData());

	var data = new ByteString("1234", ASCII);

	var apdu = new APDU(0x00, 0xD6, 0, 0, data);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0);
	assert(dh.hasCData());
	assert(dh.getCData().equals(data));

	var apdu = new APDU(0x00, 0xD6, 0x7F, 0xFF, data);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0x7FFF);
	assert(dh.hasCData());
	assert(dh.getCData().equals(data));

	var apdu = new APDU(0x00, 0xD6, 0x80, 0, data);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0);
	assert(dh.hasCData());
	assert(dh.getCData().equals(data));

	var apdu = new APDU(0x00, 0xD6, 0x80, 0xFF, data);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0xFF);
	assert(dh.hasCData());
	assert(dh.getCData().equals(data));

	var apdu = new APDU(0x00, 0xD7, 0, 0, (new ByteString("5401005304", HEX)).concat(data), 0);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0);
	assert(dh.hasCData());
	assert(dh.getCData().equals(data));

	var apdu = new APDU(0x00, 0xD7, 0, 0, (new ByteString("5401FF5304", HEX)).concat(data), 0);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0xFF);
	assert(dh.hasCData());
	assert(dh.getCData().equals(data));

	var apdu = new APDU(0x00, 0xD7, 0, 0, (new ByteString("5404010000005304", HEX)).concat(data), 0);
	var dh = new DataUnitAPDU(apdu);
	assert(dh.getOffset() == 0x01000000);
	assert(dh.hasCData());
	assert(dh.getCData().equals(data));
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of a ISO 7816-4 file system simulation
 */



/**
 * Create a File Control Parameter containing information about a file system node
 *
 * @class Class storing File Control Parameter for a file system node
 * @constructor
 */
function FCP() {
}

exports.FCP = FCP;


/** File type for DF */
FCP.DEDICATEDFILE = 0x38;

/** File type for transparent EF */
FCP.TRANSPARENT   = 0x01;

/** File type for record oriented EF with fixed record size */
FCP.LINEARFIXED   = 0x02;

/** File type for record oriented EF with variable record size */
FCP.LINEARVARIABLE   = 0x04;


/**
 * Convert an integer value into an two byte ByteString
 *
 * @param {Number} val the value
 * @type ByteString
 * @return the 2 byte encoded value MSB||LSB
 */
FCP.short2bytestring = function(val) {
	var bb = new ByteBuffer();
	bb.append(val >> 8);
	bb.append(val & 0xFF);
	return(bb.toByteString());
}



/**
 * Construct a new FCP object from parameters.
 *
 * <p>This function should never be called directly. Use newTransparentDF(), newDF() or newLinearEF() instead.</p>
 *
 * @param {String|ByteString} fid the file identifier (2 Bytes)
 * @param {Number} sfi the short file identifier or -1 or 0 if not defined
 * @param {Number} type the file type, one of FCP.DEDICATEDFILE, FCP.TRANSPARENT or FCP.LINEAR*
 * @param {Boolean} shareable true, if file may be shared between logical channels
 * @param {Boolean} internal true, if file is internal only and not externally selectable
 * @param {ByteString} supl supplemental information
 * @type FCP
 * @return the newly constructed FCP object
 */
FCP.newFCP = function(fid, sfi, type, shareable, internal, supl) {
	var fcp = new FCP();
	
	if (fid != null) {
		if (typeof(fid) == "string") {
			if (fid.length != 4) {
				throw new GPError("FCP", GPError.INVALID_DATA, 0, "File Identifier must be 2 bytes");
			}
			fcp.fid = new ByteString(fid, HEX);
		} else if (fid instanceof ByteString) {
			if (fid.length != 2) {
				throw new GPError("FCP", GPError.INVALID_DATA, 0, "File Identifier must be 2 bytes");
			}
			fcp.fid = fid;
		} else {
			throw new GPError("FCP", GPError.INVALID_TYPE, 0, "Argument must be of type String or ByteString");
		}
	}
	
	if (typeof(sfi) != "number") {
		throw new GPError("FCP", GPError.INVALID_TYPE, 1, "Argument must be of type Number");
	}
	if ((sfi >= -1) && (sfi <= 30)) {
		if (sfi > 0) {
			fcp.sfi = sfi;
		}
	} else {
		throw new GPError("FCP", GPError.INVALID_DATA, 1, "SFI must be in the range 1 to 30 or 0 if not defined");
	}

	if (typeof(type) != "number") {
		throw new GPError("FCP", GPError.INVALID_TYPE, 2, "Argument must be of type Number");
	}
	fcp.type = type;

	if (typeof(shareable) != "boolean") {
		throw new GPError("FCP", GPError.INVALID_TYPE, 3, "Argument must be of type Boolean");
	}
	fcp.shareable = shareable;

	if (typeof(internal) != "boolean") {
		throw new GPError("FCP", GPError.INVALID_TYPE, 4, "Argument must be of type Boolean");
	}
	fcp.internal = internal;

	fcp.supl = supl;
	return fcp;
}



/**
 * Construct a new FCP object for an EF of type transparent.
 *
 * @param {String|ByteString} fid the file identifier (2 Bytes)
 * @param {Number} sfi the short file identifier or -1 or 0 if not defined
 * @param {Number} size the file size
 * @param {ByteString} supl supplemental information
 * @type FCP
 * @return the newly constructed FCP object
 */
FCP.newTransparentEF = function(fid, sfi, size, supl) {
	if (typeof(size) != "number") {
		throw new GPError("FCP", GPError.INVALID_TYPE, 2, "Argument size must be of type Number");
	}

	var fcp = FCP.newFCP(fid, sfi, FCP.TRANSPARENT, false, false, supl);

	fcp.size = size;
	return fcp;
}



/**
 * Construct a new FCP object for a DF.
 *
 * @param {String|ByteString} fid the file identifier (2 Bytes)
 * @param {ByteString} aid the DF's application identifier (DFName)
 * @param {ByteString} supl supplemental information
 * @type FCP
 * @return the newly constructed FCP object
 */
FCP.newDF = function(fid, aid, supl) {
	var fcp = FCP.newFCP(fid, -1, FCP.DEDICATEDFILE, false, false, supl);

	if (aid != null) {
		if ((typeof(aid) != "object") && !(aid instanceof(ByteString))) {
			throw new GPError("FCP", GPError.INVALID_TYPE, 2, "Argument size must be of type Number");
		}
		fcp.aid = aid;
	}

	return fcp;
}



/**
 * Construct a new FCP object for an EF of type linear.
 *
 * @param {String|ByteString} fid the file identifier (2 Bytes)
 * @param {Number} sfi the short file identifier or -1 or 0 if not defined
 * @param {Number} type the file type, one of FCP.LINEARFIXED or FCP.LINEARVARIABLE
 * @param {Number} recno the maximum number of records
 * @param {Number} recsize the maximum or fixed record size
 * @param {ByteString} supl supplemental information
 * @type FCP
 * @return the newly constructed FCP object
 */
FCP.newLinearEF = function(fid, sfi, type, recno, recsize, supl) {
	if (typeof(recsize) != "number") {
		throw new GPError("FCP", GPError.INVALID_TYPE, 3, "Argument recsize must be of type Number");
	}
	if (typeof(recno) != "number") {
		throw new GPError("FCP", GPError.INVALID_TYPE, 4, "Argument recno must be of type Number");
	}

	var fcp = FCP.newFCP(fid, sfi, type, false, false, supl);
	return fcp;
}



/**
 * Returns the File Identifier (FID)
 *
 * @type ByteString
 * @return the FID
 */
FCP.prototype.getFID = function() {
	return this.fid;
}



/**
 * Returns the Application Identifier (AID)
 *
 * @type ByteString
 * @return the AID
 */
FCP.prototype.getAID = function() {
	return this.aid;
}



/**
 * Returns the Short File Identifier (SFI)
 *
 * @type Number
 * @return the SFI
 */
FCP.prototype.getSFI = function() {
	return this.sfi;
}



/**
 * Returns the encoded FCP
 *
 * @type ByteString
 * @return the encoded FCP
 */
FCP.prototype.getBytes = function() {
	var fcp = new ASN1("fcp", 0x62);

	if (typeof(this.size) != "undefined") {
		fcp.add(new ASN1("fileSizeTransparent", 0x80, FCP.short2bytestring(this.size)));
	}

	var bb = new ByteBuffer();
	bb.append(this.type);
	
	// ToDo: extra type bytes
	
	fcp.add(new ASN1("fileDescriptor", 0x82, bb.toByteString()));
	
	if (typeof(this.fid) != "undefined") {
		fcp.add(new ASN1("fileIdentifier", 0x83, this.fid));
	}
	
	if (typeof(this.aid) != "undefined") {
		fcp.add(new ASN1("dFName", 0x84, this.aid));
	}
	
	if (typeof(this.sfi) != "undefined") {
		var bb = new ByteBuffer();
		bb.append(this.sfi << 3);
		fcp.add(new ASN1("shortFileIdentifier", 0x88, bb.toByteString()));
	}
	
	return(fcp.getBytes());
}



/**
 * Returns the FCI
 *
 * @type ASN1
 * @return the FCI
 */
FCP.prototype.getFCI = function() {
	var fci = new ASN1("fci", 0x6F);

	if (typeof(this.aid) != "undefined") {
		fci.add(new ASN1("dFName", 0x84, this.aid));
	}

	if (this.supl) {
		fci.add(new ASN1(this.supl));
	}

	return(fci);
}



/**
 * Return a human readible string for this object
 *
 * @type String
 * @return the string
 */
FCP.prototype.toString = function() {
	var str = "FCP(";
	
	for (var i in this) {
		if (typeof(this[i]) != "function") {
			str += i + "=" + this[i] + ",";
		}
	}
	str += ")";
	return str;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of a ISO 7816-4 file system simulation
 */



/**
 * Construct a file system node
 *
 * @class Abstract class for file system nodes
 * @constructor
 */
function FSNode(fcp) {
	this.parent = null;
	this.fcp = fcp;
}

exports.FSNode = FSNode;



/**
 * Sets the parent for this node
 *
 * @param {DF} the parent node
 */
FSNode.prototype.setParent = function(parent) {
	if ((typeof(parent) != "object") && !(parent.isDF())) {
		throw new GPError("FSNode", GPError.INVALID_TYPE, 0, "Argument parent must be of type DF");
	}
	this.parent = parent;
}



/**
 * Gets the parent node for this node
 *
 * @type DF
 * @returns the parent node
 */
FSNode.prototype.getParent = function() {
	return this.parent;
}



/**
 * Gets the file control parameter for this node
 *
 * @type FCP
 * @returns the FCP
 */
FSNode.prototype.getFCP = function() {
	return this.fcp;
}



/**
 * Returns true if this is a DF
 *
 * @type boolean
 * @return true if this is a DF
 */
FSNode.prototype.isDF = function() {
	return false;
}



/**
 * Returns a human readible string
 *
 * @type String
 * @return a string
 */
FSNode.prototype.toString = function() {
	if (!this.fcp || !this.fcp.getFID()) {
		return "FSNode";
	}
	return this.fcp.getFID().toString(HEX);
}

/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of a ISO 7816-4 file system simulation
 */

var APDU                = require('scsh/cardsim/APDU').APDU;
var FCP                 = require('scsh/cardsim/FCP').FCP;
var DF                  = require('scsh/cardsim/DF').DF
var TransparentEF       = require('scsh/cardsim/TransparentEF').TransparentEF;
var SecurityEnvironment = require('scsh/cardsim/SecurityEnvironment').SecurityEnvironment;



/**
 * Create a file selector object
 *
 * @class Class implementing a file selector used to store information about the currently selected
 *        file system object and to process the SELECT APDU
 * @constructor
 * @param {DF} mf the master file
 */
function FileSelector(mf) {
	if ((typeof(mf) != "object") && !(mf instanceof DF)) {
		throw new GPError("FileSelector", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Argument 1 must be of type DF");
	}

	this.mf = mf;
	this.selectMF();

	this.se = { VEXK: new SecurityEnvironment(), CDIK: new SecurityEnvironment(), SMRES: new SecurityEnvironment(), SMCOM: new SecurityEnvironment()};
	this.globalAuthenticationState = [];
}

exports.FileSelector = FileSelector;



/**
 * Returns the current EF, if any
 *
 * @type EF
 * @return the current EF or null
 */
FileSelector.prototype.getCurrentEF = function() {
	return this.currentEF;
}



/**
 * Return the current security environment
 *
 * @type Object
 * @returns Object with properties VEXK, CDIK, SMRES and SMCOM containing SecurityEnvironment objects
 */
FileSelector.prototype.getSecurityEnvironment = function() {
	return this.se;
}



/**
 * Return meta data associated with the current DF or MF
 *
 * @param {String} name the meta data name
 * @type Object
 * @returns The meta data
 */
FileSelector.prototype.getMeta = function(name) {
	var meta;

	if (this.currentDF) {
//		print("DF selected: " + this.currentDF);
		var meta = this.currentDF.meta[name];
//		print("Found: " + meta);
	}

	if (!meta) {
		meta = this.mf.meta[name];
	}
	return meta;
}



/**
 * Return object of given type identified by id
 *
 * <p>If bit b8 in the id is 1, then the search will start in the current DF. If the object
 *    is not found, the search is continued in the MF. If the bit is not set, then the search
 *    will only look into the MF.</p>
 *
 * @param {String} type the type of the object
 * @param {Number} id the id, bit b8 indicating local DF or global MF search
 * @type {Object}
 * @returns the object of the requested type or null if not found
 */
FileSelector.prototype.getObject = function(type, id) {
	var olist;

	if (id & 0x80) {
		olist = this.currentDF.meta[type];
		if (olist) {
			var o = olist[id & 0x7F];

			if (o) {
				return o;
			}
		}
	}

	olist = this.mf.meta[type];
	if (olist) {
		var o = olist[id & 0x7F];

		if (o) {
			return o;
		}
	}
	return null;
}



/**
 * Enumerate objects of a defined type
 *
 * @param {String} type the type of the object
 * @type {Number[]}
 * @returns the list of objects found
 */
FileSelector.prototype.enumerateObjects = function(type) {
	var idlist = [];

	if (this.mf != this.currentDF) {
		for each (var o in this.currentDF.meta[type]) {
			idlist.push(o.getId());
		}
	}

	for each (var o in this.mf.meta[type]) {
		idlist.push(o.getId());
	}

	return idlist;
}



/**
 * Add authenticated object to the list of authentication states for the local DF or global MF
 *
 * @param{boolean} global true if global state else local DF state
 * @param{AuthenticationObject} ao the authentication object for which authentication was successfull
 */
FileSelector.prototype.addAuthenticationState = function(global, ao) {
	if (global) {
		this.globalAuthenticationState.push(ao);
	} else {
		this.localAuthenticationState.push(ao);
	}
}



/**
 * Add authenticated object to the list of authentication states for the local DF or global MF
 *
 * @param{boolean} global true if global state else local DF state
 * @param{AuthenticationObject} ao the authentication object for which authentication was successfull
 */
FileSelector.prototype.isAuthenticated = function(global, ao) {
	if (global) {
		var list = this.globalAuthenticationState;
	} else {
		var list = this.localAuthenticationState;
	}
	for each (var aao in list) {
		if (aao === ao) {
			return true;
		}
	}
	return false;
}



/**
 * Select the MF
 */
FileSelector.prototype.selectMF = function() {
	this.currentDF = this.mf;
	this.currentEF = null;
	this.localAuthenticationState = [];

	return this.mf;
}



/**
 * Select a DF entry by FID
 *
 * @param {ByteString} fid the file identifier
 * @param {boolean} check if file matches expected type EF or DF
 * @param {boolean} df true if the check must check for a DF type, else a EF type
 * @type FSNode
 * @return the selected file system node
 */
FileSelector.prototype.selectFID = function(fid, check, df) {
	var node = this.currentDF.selectByFID(fid);

	if (!node) {
		throw new GPError("FileSelector", GPError.INVALID_DATA, APDU.SW_FILENOTFOUND, "File " + fid + " not found");
	}

	if (check) {
		if ((df && !node.isDF()) || (!df && node.isDF())) {
			throw new GPError("FileSelector", GPError.INVALID_DATA, APDU.SW_FILENOTFOUND, "File " + fid + " not found or not of matching type");
		}
	}

	if (node.isDF()) {
		this.currentDF = node;
		this.localAuthenticationState = [];
		this.currentEF = null;
	} else {
		this.currentEF = node;
	}
	return node;
}



/**
 * Select a DF entry by SFI
 *
 * @param {Number} sfi the short file identifier
 * @type FSNode
 * @return the selected file system node
 */
FileSelector.prototype.selectSFI = function(sfi) {
	var node = this.currentDF.selectBySFI(sfi);

	if (!node) {
		throw new GPError("FileSelector", GPError.INVALID_DATA, APDU.SW_FILENOTFOUND, "File with SFI " + sfi + " not found");
	}

	this.currentEF = node;
	return node;
}



/**
 * Processes the SELECT APDU
 *
 * <p>Supports in P1</p>
 * <ul>
 *  <li>'00' with empty data to select the MF</li>
 *  <li>'00' with "3F00" to select the MF</li>
 *  <li>'00' with fid to select an entry in the current DF</li>
 *  <li>'01' with fid to select a DF in the current DF</li>
 *  <li>'02' with fid to select an EF in the current DF</li>
 *  <li>'03' with empty data to select the parent</li>
 * </ul>
 * <p>Supports in P2</p>
 * <ul>
 *  <li>'00' with P1=='00' return no data</li>
 *  <li>'04' return FCP</li>
 *  <li>'0C' return no data</li>
 * </ul>
 * @param {APDU} apdu the select APDU
 */
FileSelector.prototype.processSelectAPDU = function(apdu) {
	var node;

	var p2 = apdu.getP2();
	if ((p2 != 0x00) && (p2 != 0x04) && (p2 != 0x0C)) {
		throw new GPError("FileSelector", GPError.INVALID_DATA, APDU.SW_INCP1P2, "Incorrect parameter P2 (" + p2.toString(16) + ")");
	}

	var data = apdu.getCData();
	var p1 = apdu.getP1();
	switch(p1) {
	case 0x00:
		if ((typeof(data) == "undefined") || (data.toString(HEX) == "3F00")) {
			node = this.selectMF();
		} else {
			node = this.selectFID(data, false, false);
		}
		break;
	case 0x01:
		node = this.selectFID(data, true, true);
		break;
	case 0x02:
		node = this.selectFID(data, true, false);
		break;
	case 0x03:
		if (typeof(data) != "undefined") {
			throw new GPError("FileSelector", GPError.INVALID_DATA, APDU.APDU.SW_INVDATA, "Empty C-Data expected");
		}

		node = this.currentDF.getParent();
		if (node) {
			this.currentDF = node;
			this.localAuthenticationState = [];
		} else {
			node = this.currentDF;
		}
		this.currentEF = null;
		break;
	case 0x04:
		node = this.mf.selectByAID(data);
		if (typeof(node) == "undefined") {
			throw new GPError("FileSelector", GPError.INVALID_DATA, APDU.SW_FILENOTFOUND, "Application " + data + " not found");
		}
		this.currentDF = node;
		this.currentEF = null;
		this.localAuthenticationState = [];
		break;
	default:
		throw new GPError("FileSelector", GPError.INVALID_DATA, APDU.SW_INCP1P2, "Incorrect parameter P1 (" + p1.toString(16) + ")");
	}

	switch(p2) {
	case 0x00:
		apdu.setRData(node.getFCP().getFCI().getBytes());
		break;
	case 0x04:
		apdu.setRData(node.getFCP().getBytes());
		break;
	}

	apdu.setSW(APDU.SW_OK);
}



/**
 * Return a human readable string for this object
 */
FileSelector.prototype.toString = function() {
	var str = "FileSelector: Current DF=" + this.currentDF + " / Current EF=" + this.currentEF;
	if (this.globalAuthenticationState.length > 0) {
		str += "\nGlobally authenticated objects:";
		for each (var aao in this.globalAuthenticationState) {
			str += "\n" + aao.toString();
		}
	}
	if (this.localAuthenticationState.length > 0) {
		str += "\nLocally authenticated objects:";
		for each (var aao in this.localAuthenticationState) {
			str += "\n" + aao.toString();
		}
	}
	return str;
}



FileSelector.test = function() {

	var aid = new ByteString("A0000000010101", HEX);

	var mf = new DF(FCP.newDF("3F00", null),
						new TransparentEF(FCP.newTransparentEF("2F00", -1, 100)),
						new TransparentEF(FCP.newTransparentEF("2F01", 0x17, 100)),
						new DF(FCP.newDF("DF01", aid),
							new TransparentEF(FCP.newTransparentEF("2F01", -1, 100))
						)
					);

	print(mf.dump(""));

	assert(mf.isDF());

	var ef = mf.selectByFID(new ByteString("2F00", HEX));
	assert(!ef.isDF());
	assert(ef.getFCP().getFID().toString(HEX) == "2F00");

	var ef = mf.selectBySFI(0x17);
	assert(ef.getFCP().getFID().toString(HEX) == "2F01");

	var df = mf.selectByAID(aid);
	assert(df.getFCP().getFID().toString(HEX) == "DF01");

	var fs = new FileSelector(mf);

	var a = new APDU(0x00, 0xA4, 0x00, 0x0C, new ByteString("3F00", HEX));
	fs.processSelectAPDU(a);
	print(fs);
	print(a);

	var a = new APDU(0x00, 0xA4, 0x00, 0x0C, new ByteString("2F00", HEX));
	fs.processSelectAPDU(a);
	print(fs);
	print(a);

	var a = new APDU(0x00, 0xA4, 0x01, 0x0C, new ByteString("DF01", HEX));
	fs.processSelectAPDU(a);
	print(fs);
	print(a);

	var a = new APDU(0x00, 0xA4, 0x02, 0x0C, new ByteString("2F01", HEX));
	fs.processSelectAPDU(a);
	print(fs);
	print(a);
}


// test();

/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of ISO 7816-4 APDU processing
 */



/**
 * Create a file system object identifiable by an id
 *
 * @class Abstract class for file system objects identified by an identifier
 *
 * @param {String} name the human readable name of the object
 * @param {Number} id the id
 */
function FileSystemIdObject(name, id) {
	this.name = name;
	this.id = id;
}

exports.FileSystemIdObject = FileSystemIdObject;


/**
 * Return id of object
 */
FileSystemIdObject.prototype.getId = function() {
	return this.id;
}



/**
 * Return type of object
 * @type string
 * @return type of object
 */
FileSystemIdObject.prototype.getType = function() {
	throw new GPError("FileSystemIdObject", GPError.NOT_IMPLEMENTED, 0, "Derived class must override getType()");
}



/**
 * Return human readable string
 */
FileSystemIdObject.prototype.toString = function() {
	return this.name + "(" + this.id + ")";
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of a ISO 7816-4 file system simulation
 */

var APDU                = require('scsh/cardsim/APDU').APDU;
var FCP                 = require('scsh/cardsim/FCP').FCP;
var FSNode              = require('scsh/cardsim/FSNode').FSNode;



/**
 * Creates a LinearEF
 *
 * @class Class implementing linear EFs
 * @constructor
 * @param {FCP} the file control parameter
 * @param {ByteString[]} records the array of records
 */
function LinearEF(fcp, records) {
	if (!(fcp instanceof FCP)) {
		throw new GPError("LinearEF", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Argument 1 must be of type FCP");
	}
//	print(typeof(records));
	if ((typeof(records) != "undefined") && (records != null) && (typeof(records) != "object")) {
		throw new GPError("LinearEF", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Argument 2 must be of type ByteString[]");
	}

	FSNode.call(this, fcp);
	this.records = records;
}

LinearEF.prototype = new FSNode();
LinearEF.prototype.constructor = LinearEF;

exports.LinearEF = LinearEF;



/**
 * Reads a record from a linear EF
 *
 * @param {APDU} apdu the APDU used for reading
 * @param {Number} recno the record number
 * @param {Number} qualifier the qualifier as encoded in bit b3 - b1 of P1
 * @param {Number} length the length in bytes or 0 for all in short APDU or 65536 for all in extended APDUs
 * @type ByteString
 * @return the data read
 */
LinearEF.prototype.readRecord = function(apdu, recno, qualifier, length) {
	if (typeof(recno) != "number") {
		throw new GPError("LinearEF", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Record number must be type Number");
	}
	if (typeof(qualifier) != "number") {
		throw new GPError("LinearEF", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Qualifier must be type Number");
	}

	if (recno == 0) {
		throw new GPError("LinearEF", GPError.INVALID_DATA, APDU.SW_INCP1P2, "Current record referencing with P1=00 not support");
	}
	recno--;

	if (recno >= this.records.length) {
		throw new GPError("LinearEF", GPError.INVALID_DATA, APDU.SW_RECORDNOTFOUND, "Record number exeeds number of defined records");
	}

	if (qualifier != 4) {
		throw new GPError("LinearEF", GPError.INVALID_DATA, APDU.SW_INCP1P2, "Only absolute record references supported");
	}

	var record = this.records[recno];

	var rlen = length;
	if ((length == 0) || (length == 65536)) {
		rlen = record.length;
		if ((length == 0) && (rlen > 256)) {
			rlen = 256;
		}
	}

	if (rlen > record.length) {
		apdu.setSW(APDU.SW_EOF);
		rlen = record.length;
	} else {
		apdu.setSW(APDU.SW_OK);
	}

	return record.left(rlen);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of a secure messaging channel as defined in ISO 7814-4 and eSign-K
 */

var APDU                                = require('scsh/cardsim/APDU').APDU;
var SecureMessagingCommandAPDUDecoder   = require('scsh/cardsim/SecureMessagingCommandAPDUDecoder').SecureMessagingCommandAPDUDecoder;



/**
 * Create a secure channel
 *
 * @class Class implementing a secure messaging channel
 * @constructor
 * @param {Crypto} crypto the crypto provider
 */
function SecureChannelHandler(crypto) {
	this.crypto = crypto;
	this.policy = IsoSecureChannel.SSC_DEFAULT_POLICY;
}

exports.SecureChannelHandler = SecureChannelHandler;



/**
 * Sets the policy for handling send sequence counters
 *
 * See IsoSecureChannel for details
 *
 * @param {Number} policy one of IsoSecureChannel.SSC_DEFAULT_POLICY, SSC_SYNC_POLICY or SSC_SYNC_ENC_POLICY
 */
SecureChannelHandler.prototype.setSendSequenceCounterPolicy = function(policy) {
	this.policy = policy;
}



/**
 * Sets the key used for encryption
 *
 * @param {Key} key the encryption key
 */
SecureChannelHandler.prototype.setEncKey = function(key) {
	this.encKey = key;

	if (key.getComponent(Key.AES)) {
		this.encBlockSize = 16;
		this.encMechanism = Crypto.AES_CBC;
		this.iv = new ByteString("00000000000000000000000000000000", HEX);
	} else {
		this.encBlockSize = 8;
		this.encMechanism = Crypto.DES_CBC;
		this.iv = new ByteString("0000000000000000", HEX);
	}
}



/**
 * Sets the key used for message authentication
 *
 * @param {Key} key the message authentication key
 */
SecureChannelHandler.prototype.setMacKey = function(key) {
	this.macKey = key;

	if (key.getComponent(Key.AES)) {
		this.macBlockSize = 16;
		this.macMechanism = Crypto.AES_CMAC;
	} else {
		this.macBlockSize = 8;
		this.macMechanism = Crypto.DES_MAC_EMV;
	}
}



/**
 * Set the send sequence counter for MAC calculation
 *
 * @param {ByteString} ssc the send sequence counter
 */
SecureChannelHandler.prototype.setMACSendSequenceCounter = function(ssc) {
	this.macSendSequenceCounter = ssc;
}



/**
 * Set the send sequence counter for encryption calculation
 *
 * @param {ByteString} ssc the send sequence counter
 */
SecureChannelHandler.prototype.setEncSendSequenceCounter = function(ssc) {
	this.encSendSequenceCounter = ssc;
}



/**
 * Return an initialisation vector based on the defined policy
 *
 * @type ByteString
 * @return the IV
 */
SecureChannelHandler.prototype.getIV = function() {
	var iv = this.iv;
	if (this.policy == IsoSecureChannel.SSC_SYNC_ENC_POLICY) {
		iv = this.crypto.encrypt(this.encKey, this.encMechanism, this.macSendSequenceCounter, iv);
	} else if (this.policy == IsoSecureChannel.SSC_SYNC_POLICY) {
		iv = this.macSendSequenceCounter;
	} else {
		if (typeof(this.encSendSequenceCounter) != "undefined") {
			iv = this.encSendSequenceCounter
		}
	}
	return iv;
}



/**
 * Unwrap a secure messaging APDU recovering the content
 *
 * @param {APDU} apdu the APDU to unwrap
 */
SecureChannelHandler.prototype.unwrap = function(apdu) {
	var decoder = new SecureMessagingCommandAPDUDecoder(this, apdu);
	if (!decoder.verifyMAC(this.macKey)) {
		throw new GPError("SecureChannelHandler", GPError.CRYPTO_FAILED, APDU.SW_INCSMDATAOBJECT, "MAC verification failed");
	}

	var le = decoder.getLe();
	if (le >= 0) {
		apdu.ne = le;
	} else {
		apdu.ne = undefined;
	}

	var plain = decoder.decryptBody(this.encKey);
	apdu.setCData(plain);
}



/**
 * Wrap an APDU for secure messaging
 *
 * @param {APDU} apdu the APDU to wrap
 */
SecureChannelHandler.prototype.wrap = function(apdu) {
	var rdata = new ByteBuffer();

	var macinp = new ByteBuffer();

	if (typeof(this.macSendSequenceCounter) != "undefined") {
		var ssc = this.macSendSequenceCounter.add(1);
		this.macSendSequenceCounter = ssc;
		macinp.append(ssc);
	}

	if (apdu.hasRData()) {
		var padbuff = new ByteBuffer(apdu.getRData());
		SecureMessagingCommandAPDUDecoder.pad(padbuff, this.encBlockSize);
		var iv = this.getIV();
		var cryptogram = this.crypto.encrypt(this.encKey, this.encMechanism, padbuff.toByteString(), iv);
		var padind = new ByteString("01", HEX);

		var do87 = new TLV(0x87, padind.concat(cryptogram), TLV.EMV);
		rdata.append(do87.getTLV());
	}

	rdata.append(0x99);
	rdata.append(2);
	rdata.append(apdu.getSW() >> 8);
	rdata.append(apdu.getSW() & 0xFF);

	macinp.append(rdata);

	SecureMessagingCommandAPDUDecoder.pad(macinp, this.macBlockSize);
	var mac = this.crypto.sign(this.macKey, this.macMechanism, macinp.toByteString());

	rdata.append(0x8E);
	rdata.append(0x08);
	rdata.append(mac.left(8));

	apdu.setRData(rdata.toByteString());
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of a secure messaging channel as defined in ISO 7814-4 and eSign-K
 */

var APDU            = require('scsh/cardsim/APDU').APDU;



/**
 * Creates a decoder for a single secure messaging command APDU
 *
 * @class Decoder for a secure messaging APDU
 * @constructor
 * @param {SecureChannel} channel the secure channel object
 * @param {APDU} apdu the secure messaging APDU
 */
function SecureMessagingCommandAPDUDecoder(channel, apdu) {
	this.channel = channel;
	this.apdu = apdu;
	this.tlvlist = apdu.getCDataAsTLVList();
}

exports.SecureMessagingCommandAPDUDecoder = SecureMessagingCommandAPDUDecoder;



/**
 * Verify the message authentication code (MAC)
 *
 * @type boolean
 * @return true if the MAC is valid
 */
SecureMessagingCommandAPDUDecoder.prototype.verifyMAC = function() {
	var macinp = this.buildMACInput();

	var mac = this.tlvlist.find(0x8E);

	if (mac == null) {
		throw new GPError("SecureMessagingCommandAPDUDecoder", GPError.INVALID_DATA, APDU.SW_SMOBJMISSING, "MAC data object (8E) not found");
	}

	return this.channel.crypto.verify(this.channel.macKey, this.channel.macMechanism, macinp, mac.getValue());
}



/**
 * Build the MAC input block
 *
 * @type ByteString
 * @return the MAC calculation input block
 */
SecureMessagingCommandAPDUDecoder.prototype.buildMACInput = function() {
	var macinp = new ByteBuffer();

	if (typeof(this.channel.macSendSequenceCounter) != "undefined") {
		var ssc = this.channel.macSendSequenceCounter.add(1);
		this.channel.macSendSequenceCounter = ssc;
		macinp.append(ssc);
	}

	if (this.apdu.isAuthenticatedHeader()) {
		macinp.append(this.apdu.getCLA());
		macinp.append(this.apdu.getINS());
		macinp.append(this.apdu.getP1());
		macinp.append(this.apdu.getP2());
		SecureMessagingCommandAPDUDecoder.pad(macinp, this.channel.macBlockSize);
	}

	var someadded = false;
	for (var i = 0; i < this.tlvlist.length; i++) {
		var tlv = this.tlvlist.index(i);

		if (tlv.getTag() & 0x01) {
			macinp.append(tlv.getTLV());
			someadded = true;
		}
	}
	if (someadded) {
		SecureMessagingCommandAPDUDecoder.pad(macinp, this.channel.macBlockSize);
	}
	return macinp.toByteString();
}



/**
 * Decrypt the body of a secure messaging APDU
 *
 * @param {Key} key the encryption key
 * @type ByteString
 * @return the plain body or undefined if no encrypted body
 */
SecureMessagingCommandAPDUDecoder.prototype.decryptBody = function(key) {
	var body = this.tlvlist.find(0x87);
	var ofs = 1;
	if (body == null) {
		var body = this.tlvlist.find(0x85);
		if (body == null) {
			return undefined;
		}
		var ofs = 0;
	} else {
		var paddingIndicator = body.getValue().byteAt(0);
		if (paddingIndicator != 0x01) {
			throw new GPError("SecureMessagingCommandAPDUDecoder", GPError.INVALID_DATA, APDU.SW_INCSMDATAOBJECT, "Padding indicator " + paddingIndicator + " not supported");
		}
	}

	var cryptogram = body.getValue().bytes(ofs);

	var iv = this.channel.getIV();
	var plain = this.channel.crypto.decrypt(this.channel.encKey, this.channel.encMechanism, cryptogram, iv);

	plain = SecureMessagingCommandAPDUDecoder.removePadding(plain);

	return plain;
}



/**
 * Return value of optional Le element with tag '97'
 *
 * @type Number
 * @return the value of the Le element
 */
SecureMessagingCommandAPDUDecoder.prototype.getLe = function() {
	var le = this.tlvlist.find(0x97);
	if (le == null) {
		return -1;
	}
	var value = le.getValue().toUnsigned();
	if (le.getL() == 2 && value == 0) {
		return 65536;
	}
	return value;
}



/**
 * Applies ISO padding to the input buffer
 *
 * @param {ByteBuffer} buffer the input buffer
 * @param {Number} blocksize the block size
 * @type ByteBuffer
 * @return the buffer argument
 */
SecureMessagingCommandAPDUDecoder.pad = function(buffer, blocksize) {
	buffer.append(0x80);
	while (buffer.length % blocksize) {
		buffer.append(0x00);
	}
	return buffer;
}



/**
 * Removes the ISO padding
 *
 * @param {ByteString} buffer the input with with padding
 * @type ByteString
 * @return the buffer without padding
 */
SecureMessagingCommandAPDUDecoder.removePadding = function(buffer) {
	var i = buffer.length - 1;

	while ((i >= 0) && (buffer.byteAt(i) == 0x00)) {
		i--;
	}

	if ((i < 0) || (buffer.byteAt(i) != 0x80)) {
		throw new GPError("SecureMessagingCommandAPDUDecoder", GPError.CRYPTO_FAILED, APDU.SW_INCSMDATAOBJECT, "Invalid ISO padding");
	}

	return buffer.left(i);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Security environment - a container for security related data elements
 */



/**
 * Creates a security environment container that collects cryptographic reference templates (CRT)
 *
 * @class Class implementing a security environment for cryptographic operations.
 * @constructor
 */
function SecurityEnvironment() {
	this.t = { AT:null, KAT: null, HT: null, CCT:null, DST:null, CT: null };
}

exports.SecurityEnvironment = SecurityEnvironment;



/**
 * Adds CRT elements to a named template.
 *
 * @param {String} tname the CRT name one of AT, KAT, HT, CCT, DST or CT
 * @param {ASN1} tlv the tlv object containing the CRT elements
 **/
SecurityEnvironment.prototype.addElements = function(tname, tlv) {
	var t = this.t[tname];
	if (t) {
		for (var i = 0; i < tlv.elements; i++) {
			var o = tlv.get(i);
			SecurityEnvironment.decorateCRT(o);
			var j = 0;
			while(j < t.elements) {
				if (t.get(j).tag == o.tag) {
					t.remove(j);
				} else {
					j++;
				}
			}
			t.add(o);
		}
	} else {
		for (var i = 0; i < tlv.elements; i++) {
			var o = tlv.get(i);
			SecurityEnvironment.decorateCRT(o);
		}
		this.t[tname] = tlv;
	}
}



/**
 * Adds a CRT identified by it's tag
 *
 * @param {ASN1} tlv the tlv object
 */
SecurityEnvironment.prototype.add = function(tlv) {
	switch(tlv.tag) {
	case 0xA4:
		tlv.setName("AT");
		break;
	case 0xA6:
		tlv.setName("KAT");
		break;
	case 0xAA:
		tlv.setName("HT");
		break;
	case 0xB4:
		tlv.setName("CCT");
		break;
	case 0xB6:
		tlv.setName("DST");
		break;
	case 0xB8:
		tlv.setName("CT");
		break;
	default:
		throw new GPError("SecurityEnvironment", GPError.INVALID_DATA, tlv.tag, "Invalid tag for CRT");
	}
	this.addElements(tlv.name, tlv);
}



/**
 * Return textual representation of security environment container
 */
SecurityEnvironment.prototype.toString = function() {
	var str = "";

	if (this.t.AT) {
		str += "Authentication Template (AT)\n" + this.t.AT;
	}
	if (this.t.KAT) {
		str += "Key Agreement Template (KAT)\n" + this.t.KAT;
	}
	if (this.t.HT) {
		str += "Hash Template (HT)\n" + this.t.HT;
	}
	if (this.t.CCT) {
		str += "Cryptographic Checksum Template (CCT)\n" + this.t.CCT;
	}
	if (this.t.DST) {
		str += "Digital Signature Template (DST)\n" + this.t.DST;
	}
	if (this.t.CT) {
		str += "Confidentiality Template (CT)\n" + this.t.CT;
	}
	return str;
}



/**
 * Decorates a tlv object from the CRT
 */
SecurityEnvironment.decorateCRT = function(asn1) {
	switch(asn1.tag) {
	case 0x80:
		asn1.setName("cryptographicMechanism 80");
		break;
	case 0x81:
		asn1.setName("fileIdentifierOrPath 81");
		break;
	case 0x82:
		asn1.setName("dFName 82");
		break;
	case 0x83:
		asn1.setName("secretOrPublicKeyReference 83");
		break;
	case 0x84:
		asn1.setName("sessionOrPrivateKeyReference 84");
		break;
	case 0x85:
		asn1.setName("nullBlock 85");
		break;
	case 0x86:
		asn1.setName("chainingBlock 86");
		break;
	case 0x87:
		asn1.setName("initialBlock 87");
		break;
	case 0x88:
		asn1.setName("previousChallenge 88");
		break;
	case 0x89:
		asn1.setName("proprietaryDataElementIndex 89");
		break;
	case 0x8A:
		asn1.setName("proprietaryDataElementIndex 8A");
		break;
	case 0x8B:
		asn1.setName("proprietaryDataElementIndex 8B");
		break;
	case 0x8C:
		asn1.setName("proprietaryDataElementIndex 8C");
		break;
	case 0x8D:
		asn1.setName("proprietaryDataElementIndex 8D");
		break;
	case 0x90:
		asn1.setName("cardHashCode 90");
		break;
	case 0x91:
		asn1.setName("ephemeralPublicKey 91");
		break;
	case 0x92:
		asn1.setName("cardTimeStamp 92");
		break;
	case 0x93:
		asn1.setName("dsiCounter 93");
		break;
	case 0x94:
		asn1.setName("challengeOrDerivationParameter 94");
		break;
	case 0x95:
		asn1.setName("usageQualifier 95");
		break;
	case 0x8E:
		asn1.setName("cryptographicContentReference 8E");
		break;
	case 0x67:
		asn1.setName("auxiliaryAuthenticatedData 67");
		break;
	case 0x67:
		asn1.setName("auxiliaryAuthenticatedData 67");
		break;
	case 0x7F4C:
		asn1.setName("certificateHolderAuthorisationTemplate 7F4C");
		break;
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview SignatureKey - Object storing information related to PrK.QES
 */

var FileSystemIdObject  = require('scsh/cardsim/FileSystemIdObject').FileSystemIdObject;
var APDU                = require('scsh/cardsim/APDU').APDU;



/**
 * Create a signature key object
 *
 * @class Class implementing signature keys
 *
 * @param {String} name the human readable name of the object
 * @param {Number} id the key id
 */
function SignatureKey(name, id) {
	FileSystemIdObject.call(this, name, id);
	this.isTerminated = true;			// State after TERMINATE
	this.allowTerminate = true;
}

SignatureKey.prototype = new FileSystemIdObject();
SignatureKey.prototype.constructor = SignatureKey;

exports.SignatureKey = SignatureKey;


SignatureKey.TYPE_KEY = "signaturekey";



/**
 * Override from base class
 */
SignatureKey.prototype.getType = function() {
	return SignatureKey.TYPE_KEY = "signaturekey";
}



/**
 * Terminate authentication object
 */
SignatureKey.prototype.terminate = function() {
	if (!this.allowTerminate) {
		throw new GPError("SignatureKey", GPError.INVALID_DATA, APDU.SW_CONDOFUSENOTSAT, "Terminate not allowed for signature key");
	}
	this.isTerminated = true;
}



/**
 * Convert object to a human readable string
 */
SignatureKey.prototype.toString = function() {
	return this.name + (this.isTerminated ? " terminated" : " active");
}


/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of a ISO 7816-4 file system simulation
 */

var APDU                = require('scsh/cardsim/APDU').APDU;
var FCP                 = require('scsh/cardsim/FCP').FCP;
var FSNode              = require('scsh/cardsim/FSNode').FSNode;



/**
 * Create a file system node that represents a transparent EF
 *
 * @class Class implementing a transparent EF
 * @constructor
 * @param {FCP} fcp the FCP for this EF
 * @param {ByteString} contents the contents for this EF
 */
function TransparentEF(fcp, contents) {
	if (!(fcp instanceof FCP)) {
		throw new GPError("TransparentEF", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Argument 1 must be of type FCP");
	}

	if ((typeof(contents) != "undefined") && (contents != null) && !(contents instanceof ByteString)) {
		throw new GPError("TransparentEF", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Argument 2 must be of type ByteString");
	}

	FSNode.call(this, fcp);
	this.content = contents;
}

TransparentEF.prototype = new FSNode();
TransparentEF.prototype.constructor = TransparentEF;

exports.TransparentEF = TransparentEF;



/**
 * Reads data from a transparent EF
 *
 * @param {APDU} apdu the APDU used for reading
 * @param {Number} offset the offset to read from
 * @param {Number} length the length in bytes or 0 for all in short APDU or 65536 for all in extended APDUs
 * @type ByteString
 * @return the data read
 */
TransparentEF.prototype.readBinary = function(apdu, offset, length) {
	if (typeof(offset) != "number") {
		throw new GPError("TransparentEF", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Offset must be type Number");
	}
	if (typeof(length) != "number") {
		throw new GPError("TransparentEF", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Length must be type Number");
	}

	if (offset >= this.content.length) {
		throw new GPError("TransparentEF", GPError.INVALID_DATA, APDU.SW_INCP1P2, "Offset out of range");
	}

	var rlen = length;
	if ((length == 0) || (length == 65536)) {
		rlen = this.content.length - offset;
		if ((length == 0) && (rlen > 256)) {
			rlen = 256;
		}
	}

	if (offset + rlen > this.content.length) {
		apdu.setSW(APDU.SW_EOF);
		rlen = this.content.length - offset;
	} else {
		apdu.setSW(APDU.SW_OK);
	}

	return this.content.bytes(offset, rlen);
}



/**
 * Update data in transparent EF
 *
 * @param {APDU} apdu the APDU used for updating
 * @param {Number} offset the offset to update
 * @param {ByteString} data the data to write into the EF
 */
TransparentEF.prototype.updateBinary = function(apdu, offset, data) {
	if (typeof(offset) != "number") {
		throw new GPError("TransparentEF", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Offset must be type Number");
	}
	if ((typeof(data) != "object") || !(data instanceof ByteString)) {
		throw new GPError("TransparentEF", GPError.INVALID_TYPE, APDU.SW_GENERALERROR, "Data must be a ByteString");
	}

	if (offset + data.length > this.fcp.size) {
		throw new GPError("TransparentEF", GPError.INVALID_DATA, APDU.SW_WRONGLENGTH, "Writing beyond file limit");
	}

	if (this.content) {
		if (offset > this.content.length) {
			throw new GPError("TransparentEF", GPError.INVALID_DATA, APDU.SW_INCP1P2, "Offset out of range");
		}
		var newcontent = this.content.bytes(0, offset).concat(data);
		if (this.content.length > newcontent.length) {
			newcontent = newcontent.concat(this.content.bytes(newcontent.length));
		}
	} else {
		if (offset > 0) {
			throw new GPError("TransparentEF", GPError.INVALID_DATA, APDU.SW_INCP1P2, "Offset out of range");
		}
		var newcontent = data;
	}

	this.content = newcontent;
	apdu.setSW(APDU.SW_OK);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview TrustAnchor Base class for card verifiable certificate based access controller
 */

var FileSystemIdObject = require('scsh/cardsim/FileSystemIdObject').FileSystemIdObject;
var APDU = require('scsh/cardsim/APDU').APDU;
var CVC = require("scsh/eac/CVC").CVC;



/**
 * Create a TrustAnchor object that handles certificate validation, terminal authentication and access control
 *
 * @constructor
 * @class Class implementing a CVC based access controller
 * @param {CVC} root the root certificate
 */
function TrustAnchor(root) {
	if (typeof(root) == "undefined") {
		return;
	}

	this.chain = [];
	this.chain.push(root);
	this.recentCAROnly = false;					// Maintain only the latest trust anchor

	// Save in file system under id, which is the last byte in the CHAT OID
	var chat = root.getCHAT();
	var id = chat.get(0).value.right(1).toUnsigned();
	var name = root.getCHR().getHolder();		// Use the name of the CVCA
	FileSystemIdObject.call(this, name, id);
}

TrustAnchor.prototype = new FileSystemIdObject();
TrustAnchor.prototype.constructor = TrustAnchor;

TrustAnchor.TYPE = "TrustAnchor";
TrustAnchor.idIS = new ByteString("id-IS", OID);

exports.TrustAnchor = TrustAnchor;


/**
 * Return type of file system object
 *
 * @type String
 * @return the type string
 */
TrustAnchor.prototype.getType = function() {
	return TrustAnchor.TYPE;
}




/**
 * Add recent trust anchor to PACE response
 *
 * @param {ASN1} response the response object to receive tag 87 and 88
 */
TrustAnchor.prototype.addCARforPACE = function(response) {
	var cl = this.chain.length;
	response.add(new ASN1(0x87, this.chain[cl - 1].getCHR().getBytes()));
	if ((cl > 1) && !this.recentCAROnly) {
		response.add(new ASN1(0x88, this.chain[cl - 2].getCHR().getBytes()));
	}
}



/**
 * Is a recent trust anchor issuer of the certificate chr in question
 *
 * @param {PublicKeyReference} chr the certificate holder
 * @type boolean
 * @return true if trust anchor issued certificate
 */
TrustAnchor.prototype.isIssuer = function(chr) {
	var cvc = this.getCertificateFor(chr);
//	print("isIssuer(" + chr + "):");
//	print(cvc);
	return cvc != null;
}



/**
 * Get public key from certificate, possibly determine the domain parameter from previous trust anchors
 *
 * @param {PublicKeyReference} chr the certificate holder
 * @type Key
 * @return the public key or null
 */
TrustAnchor.prototype.getPublicKeyFor = function(chr) {
//	print("Get public key for " + chr);
	var cl = this.chain.length - 1;
	for (; (cl >= 0) && !this.chain[cl].getCHR().equals(chr); cl--) {
	}

	if (cl < 0) {
//		print("chr not found");
		return null;
	}

	var i = cl;
	if (CVC.isECDSA(this.chain[cl].getPublicKeyOID()) && !this.chain[i].containsDomainParameter()) {
//		print("Looking for DPs down the chain");
		for (cl--; (cl >= 0) && !this.chain[cl].containsDomainParameter(); cl--) {}
		if (cl < 0) {
			return null;
		}
//		print("Found domain parameter in " + this.chain[cl]);
		var dp = this.chain[cl].getPublicKey();
		return this.chain[i].getPublicKey(dp);
	} else {
//		print(this.chain[i]);
		return this.chain[i].getPublicKey();
	}
}



/**
 * Return certificate for chr
 *
 * @param {PublicKeyReference} chr the certificate holder
 * @type CVC
 * @return the certificate or null
 */
TrustAnchor.prototype.getCertificateFor = function(chr) {
	var cl = this.chain.length;
	if (this.chain[cl - 1].getCHR().toString() == chr) {
		return this.chain[cl - 1];
	}
	if ((cl > 1) && !this.recentCAROnly) {
		if (this.chain[cl - 2].getCHR().toString() == chr) {
			return this.chain[cl - 2];
		}
	}
	return null;
}



/**
 * Update EF.CVCA with list of valid trust anchors
 *
 * @param {Object} dataProvider object implementing getDate(), setDate() and updateEFCVCA()
 */
TrustAnchor.prototype.updateEFCVCA = function(dataProvider) {
	var cl = this.chain.length - 1;
	var bb = new ByteBuffer();
	bb.append((new ASN1(0x42, this.chain[cl].getCHR().getBytes())).getBytes());
	if ((cl > 0) && !this.recentCAROnly) {
		bb.append((new ASN1(0x42, this.chain[cl - 1].getCHR().getBytes())).getBytes());
	}
	bb.append(0);
	dataProvider.updateEFCVCA(bb.toByteString());
}



/**
 * Check certificate
 *
 * <p>This method updates the current date for certificates issued by domestic DVCAs.</p>
 * @param {CVC} issuer the issuing certificate
 * @param {CVC} subject the subjects certificate
 * @param {Object} dataProvider object implementing getDate(), setDate() and updateEFCVCA()
 * @param {Key} dp domain parameter for checking the public key
 */
TrustAnchor.prototype.checkCertificate = function(issuer, subject, dataProvider, dp) {
	// Some basic sanity checks
	if (subject.getCXD().valueOf() < subject.getCED().valueOf()) {
		throw new GPError("TrustAnchor", GPError.INVALID_DATA, APDU.SW_INVDATA, "Certificate expiration is before effective date");
	}

	try	{
		var puk = subject.getPublicKey(dp);
		if (puk.getComponent(Key.ECC_QX).length + puk.getComponent(Key.ECC_QY).length != (puk.getComponent(Key.ECC_P).length << 1)) {
			throw new GPError("TrustAnchor", GPError.INVALID_DATA, APDU.SW_INVDATA, "Invalid public key");
		}
	}
	catch(e) {
		throw new GPError("TrustAnchor", GPError.INVALID_DATA, APDU.SW_INVDATA, e.message);
	}

	var chatissuer = issuer.getCHAT();
	var chatsubject = subject.getCHAT();

	var rolesubject = chatsubject.get(0).value;
	if (!chatissuer.get(0).value.equals(rolesubject)) {
		throw new GPError("TrustAnchor", GPError.INVALID_DATA, APDU.SW_INVDATA, "Role mismatch");
	}

	var rightsissuer = chatissuer.get(1).value;
	var rightssubject = chatsubject.get(1).value;

	if (rightsissuer.length != rightssubject.length) {
		throw new GPError("TrustAnchor", GPError.INVALID_DATA, APDU.SW_INVDATA, "Different size in rights mask of chat");
	}

	var typeissuer = rightsissuer.byteAt(0) & 0xC0;
	var typesubject = rightssubject.byteAt(0) & 0xC0;

	// C0 - CVCA, 80 - DV domestic, 40 - DV foreign, 00 - Terminal
	if (typeissuer == 0x40) {		// Ignore domestic and foreign
		typeissuer = 0x80;
	}
	if (typesubject == 0x40) {
		typesubject = 0x80;
	}
//	print("issuer " + typeissuer);
//	print("subject " + typesubject);

	if (((typesubject >= typeissuer) && (typeissuer != 0xC0)) ||
		((typesubject == 0x00) && (typeissuer == 0xC0))) {
		throw new GPError("TrustAnchor", GPError.INVALID_DATA, APDU.SW_INVDATA, "Certificate hierachy invalid");
	}

	if (!issuer.getPublicKeyOID().equals(subject.getPublicKeyOID())) {
		throw new GPError("TrustAnchor", GPError.INVALID_DATA, APDU.SW_INVDATA, "Public key algorithm mismatch");
	}

	var date = dataProvider.getDate().valueOf();
	if (typesubject != 0xC0) {			// CVCA certificates do not expire
		if (subject.getCXD().valueOf() < date) {
			throw new GPError("TrustAnchor", GPError.INVALID_DATA, APDU.SW_INVDATA, "Certificate is expired");
		}
	} else {
//		print("Add to chain: " + subject);
		this.chain.push(subject);							// Add new CVCA link to the chain
		if (rolesubject.equals(TrustAnchor.idIS)) {
			this.updateEFCVCA(dataProvider);					// Update /DF.ePass/EF.CVCA
		}
	}

	if ((rightsissuer.byteAt(0) & 0xC0) != 0x40) {			// Trust all except foreign DVCAs
		if (subject.getCED().valueOf() > date) {
			dataProvider.setDate(subject.getCED());
		}
	}
}



/**
 * Validate certificate issued by CVCA
 *
 * @param {Crypto} crypto the crypto object to use for verification
 * @param {CVC} cert the certificate to validate
 * @param {Object} dataProvider object implementing getDate(), setDate() and updateEFCVCA()
 */
TrustAnchor.prototype.validateCertificateIssuedByCVCA = function(crypto, cert, dataProvider) {
	var cc = this.getCertificateFor(cert.getCAR());
	var puk = this.getPublicKeyFor(cert.getCAR());
	if (!puk || !cert.verifyWith(crypto, puk, cc.getPublicKeyOID())) {
		throw new GPError("TrustAnchor", GPError.INVALID_DATA, APDU.SW_INVDATA, "Could not verify certificate signature");
	}
	this.checkCertificate(cc, cert, dataProvider, puk);
}



/**
 * Validate certificate issued by CVCA
 *
 * @param {Crypto} crypto the crypto object to use for verification
 * @param {CVC} cert the certificate to validate
 * @param {CVC} dvca the issuing certificate
 * @param {Object} dataProvider object implementing getDate(), setDate() and updateEFCVCA()
 */
TrustAnchor.prototype.validateCertificateIssuedByDVCA = function(crypto, cert, dvca, dataProvider) {
	var dp = this.getPublicKeyFor(dvca.getCAR());
//	print(dp);
	if (!dp || !cert.verifyWith(crypto, dvca.getPublicKey(dp), dvca.getPublicKeyOID())) {
		throw new GPError("TrustAnchor", GPError.INVALID_DATA, APDU.SW_INVDATA, "Could not verify certificate signature");
	}
	this.checkCertificate(dvca, cert, dataProvider, dvca.getPublicKey(dp));
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Support for card verifiable certificates and certificate requests according to EAC 1.1/2.0
 */


// Imports
var PublicKeyReference = require('scsh/eac/PublicKeyReference').PublicKeyReference;



/**
 * Create a CVC object from a DER encoded ByteString.
 *
 * @class Class implementing a decoder for card verifiable certificates or requests according to
 *        Extended Access Control (EAC) as defined in BSI TR-03110 1.11 and 2.02.
 * @constructor
 * @param {ByteString} param the DER encoded certificate
 * @return
 */
function CVC() {
	if (arguments.length > 0) {
		var arg = arguments[0];
		if (arg instanceof ASN1) {
			this.asn = arg;
			this.bin = this.asn.getBytes();
		} else if (arg instanceof ByteString) {
			this.bin = arg;
			this.asn = new ASN1(this.bin);
		} else {
			throw new GPError("CVC", GPError.INVALID_DATA, 0, "Argument must be of type ByteString or ASN1");
		}
		if (this.asn.tag == CVC.TAG_AT) {
			this.body = this.asn.get(0).get(0);
		} else if (this.asn.tag == CVC.TAG_CVC) {
			this.body = this.asn.get(0);
		} else {
			throw new GPError("CVC", GPError.INVALID_DATA, 0, "Argument is neither a CVC or CVC request");
		}
	}
}

exports.CVC = CVC;

CVC.crypto = new Crypto();


/** Authentication Template */
CVC.TAG_AT = 0x67;
/** CV Certificate */
CVC.TAG_CVC = 0x7F21;
/** Certificate Body */
CVC.TAG_BODY = 0x7F4E;
/** Certificate Profile Identifier */
CVC.TAG_CPI = 0x5F29;
/** Certification Authority Reference */
CVC.TAG_CAR = 0x42;
/** Public Key */
CVC.TAG_PUK = 0x7F49;
/** Prime Modulus */
CVC.TAG_ECC_P = 0x81;
/** First coefficient a */
CVC.TAG_ECC_A = 0x82;
/** Second coefficient b */
CVC.TAG_ECC_B = 0x83;
/** Base Point G */
CVC.TAG_ECC_G = 0x84;
/** Order of the base point */
CVC.TAG_ECC_N = 0x85;
/** Public Point y */
CVC.TAG_ECC_Q = 0x86;
/** Cofactor f */
CVC.TAG_ECC_H = 0x87;
/** Certificate Holder Reference */
CVC.TAG_CHR = 0x5F20;
/** Certificate Holder Authorisation Template */
CVC.TAG_CHAT = 0x7F4C;
/** Relative Authorization */
CVC.TAG_AUT = 0x53;
/** Certificate Extension */
CVC.TAG_EXTN = 0x65;
/** Certificate Effective Date */
CVC.TAG_CED = 0x5F25;
/** Certificate Expiration Date */
CVC.TAG_CXD = 0x5F24;
/** Signature */
CVC.TAG_SIG = 0x5F37;


/** Table of tag names */
CVC.OBJECTNAMES = []
CVC.OBJECTNAMES[CVC.TAG_AT] = "Authentication Template";
CVC.OBJECTNAMES[CVC.TAG_CVC] = "CV Certificate";
CVC.OBJECTNAMES[CVC.TAG_BODY] = "Certificate Body";
CVC.OBJECTNAMES[CVC.TAG_CPI] = "Certificate Profile Indicator";
CVC.OBJECTNAMES[CVC.TAG_CAR] = "Certification Authority Reference";
CVC.OBJECTNAMES[CVC.TAG_PUK] = "Public Key";
CVC.OBJECTNAMES[CVC.TAG_ECC_P] = "Prime/Modulus";
CVC.OBJECTNAMES[CVC.TAG_ECC_A] = "First coefficient a/Exponent";
CVC.OBJECTNAMES[CVC.TAG_ECC_B] = "Second coefficient b";
CVC.OBJECTNAMES[CVC.TAG_ECC_G] = "Base Point G";
CVC.OBJECTNAMES[CVC.TAG_ECC_N] = "Order of the base point";
CVC.OBJECTNAMES[CVC.TAG_ECC_Q] = "Public Point y";
CVC.OBJECTNAMES[CVC.TAG_ECC_H] = "Cofactor f";
CVC.OBJECTNAMES[CVC.TAG_CHR] = "Certificate Holder Reference";
CVC.OBJECTNAMES[CVC.TAG_CHAT] = "Certificate Holder Authentication Template";
CVC.OBJECTNAMES[CVC.TAG_AUT] = "Relative Authorization";
CVC.OBJECTNAMES[CVC.TAG_EXTN] = "Extension";
CVC.OBJECTNAMES[CVC.TAG_CED] = "Certificate Effective Date";
CVC.OBJECTNAMES[CVC.TAG_CXD] = "Certificate Expiration Date";
CVC.OBJECTNAMES[CVC.TAG_SIG] = "Signature";

CVC.PUK_SYNTAX = [
	{ tag: 0x06, minlen: 2, maxlen: 20 },
	{ tag: CVC.TAG_ECC_P, minlen: 20, maxlen: 512, optional: true },
	{ tag: CVC.TAG_ECC_A, minlen: 1, maxlen: 512, optional: true },
	{ tag: CVC.TAG_ECC_B, minlen: 20, maxlen: 66, optional: true },
	{ tag: CVC.TAG_ECC_G, minlen: 41, maxlen: 133, optional: true },
	{ tag: CVC.TAG_ECC_N, minlen: 20, maxlen: 66, optional: true },
	{ tag: CVC.TAG_ECC_Q, minlen: 41, maxlen: 133, optional: true },
	{ tag: CVC.TAG_ECC_H, minlen: 1, maxlen: 1, optional: true }
];

CVC.REQ_BODY_SYNTAX = [
	{ tag: CVC.TAG_CPI, minlen: 1, maxlen: 1 },
	{ tag: CVC.TAG_CAR, minlen: 8, maxlen: 16, optional: true },
	{ tag: CVC.TAG_PUK, content: CVC.PUK_SYNTAX },
	{ tag: CVC.TAG_CHR, minlen: 8, maxlen: 16 },
	{ tag: CVC.TAG_EXTN, optional: true }
];

CVC.REQ_SYNTAX = [
	{ tag: CVC.TAG_BODY, content: CVC.REQ_BODY_SYNTAX },
	{ tag: CVC.TAG_SIG, minlen: 40, maxlen: 550 }
];

CVC.ATREQ_SYNTAX = [
	{ tag: CVC.TAG_CVC, content: CVC.REQ_SYNTAX },
	{ tag: CVC.TAG_CAR, minlen: 8, maxlen: 16 },
	{ tag: CVC.TAG_SIG, minlen: 40, maxlen: 550 }
];

CVC.CHAT_SYNTAX = [
	{ tag: 0x06, minlen: 2, maxlen: 20 },
	{ tag: CVC.TAG_AUT, minlen: 1, maxlen: 5 }
];

CVC.CERT_BODY_SYNTAX = [
	{ tag: CVC.TAG_CPI, minlen: 1, maxlen: 1 },
	{ tag: CVC.TAG_CAR, minlen: 8, maxlen: 16 },
	{ tag: CVC.TAG_PUK, content: CVC.PUK_SYNTAX },
	{ tag: CVC.TAG_CHR, minlen: 8, maxlen: 16 },
	{ tag: CVC.TAG_CHAT, content: CVC.CHAT_SYNTAX },
	{ tag: CVC.TAG_CED, minlen: 6, maxlen: 6 },
	{ tag: CVC.TAG_CXD, minlen: 6, maxlen: 6 },
	{ tag: CVC.TAG_EXTN, optional: true }
];

CVC.CERT_SYNTAX = [
	{ tag: CVC.TAG_BODY, content: CVC.CERT_BODY_SYNTAX },
	{ tag: CVC.TAG_SIG, minlen: 24, maxlen: 550 }
];



/** Table of rights description for id-IS */
CVC.ISRIGHTS = [
	"Read access to ePassport application: DG 3 (Fingerprint)",
	"Read access to ePassport application: DG 4 (Iris)",
	"RFU (Bit 3)",
	"RFU (Bit 4)",
	"RFU (Bit 5)",
	"Read access to eID application"
];
CVC.idIS = new ByteString("id-IS", OID);


/** Table of rights description for id-AT */
CVC.ATRIGHTS = [
	"Age Verification",
	"Community ID Verification",
	"Restricted Identification",
	"Privileged Terminal",
	"CAN allowed",
	"PIN Management",
	"Install Certificate",
	"Install Qualified Certificate",

	"Read Access DG 1 (Document Type)",
	"Read Access DG 2 (Issuing State)",
	"Read Access DG 3 (Date of Expiration)",
	"Read Access DG 4 (Given Name)",
	"Read Access DG 5 (Surname)",
	"Read Access DG 6 (Pseudonym)",
	"Read Access DG 7 (Academic Grade)",
	"Read Access DG 8 (Date of Birth)",

	"Read Access DG 9 (Place of Birth)",
	"Read Access DG 10",
	"Read Access DG 11",
	"Read Access DG 12",
	"Read Access DG 13",
	"Read Access DG 14",
	"Read Access DG 15",
	"Read Access DG 16",

	"Read Access DG 17 (Place of Residence)",
	"Read Access DG 18 (Community ID)",
	"Read Access DG 19 (Conditions I-eAT)",
	"Read Access DG 20 (Conditions II-eAT)",
	"Read Access DG 21",
	"RFU (Bit 29)",
	"RFU (Bit 30)",
	"RFU (Bit 31)",

	"RFU (Bit 32)",
	"Write Access DG 21",
	"Write Access DG 20 (Conditions II-eAT)",
	"Write Access DG 19 (Conditions I-eAT)",
	"Write Access DG 18 (Community ID)",
	"Write Access DG 17 (Place of Residence)"
];
CVC.idAT = new ByteString("id-AT", OID);



/** Table of rights description for id-ST */
CVC.STRIGHTS = [
	"Generate electronic signature",
	"Generate qualified electronic signature",
	"RFU (Bit 2)",
	"RFU (Bit 3)",
	"RFU (Bit 4)",
	"RFU (Bit 5)"
];
CVC.idST = new ByteString("id-ST", OID);

CVC.idSC_HSM = new ByteString("2B0601040181C31F030101", HEX);
CVC.idBW_SE = new ByteString("2B0601040181C31F030102", HEX);



/** TA constants */
CVC.id_TA_ECDSA = new ByteString("id-TA-ECDSA", OID);
CVC.id_TA_ECDSA_SHA_1 = new ByteString("id-TA-ECDSA-SHA-1", OID);
CVC.id_TA_ECDSA_SHA_224 = new ByteString("id-TA-ECDSA-SHA-224", OID);
CVC.id_TA_ECDSA_SHA_256 = new ByteString("id-TA-ECDSA-SHA-256", OID);
CVC.id_TA_ECDSA_SHA_384 = new ByteString("id-TA-ECDSA-SHA-384", OID);
CVC.id_TA_ECDSA_SHA_512 = new ByteString("id-TA-ECDSA-SHA-512", OID);
CVC.id_TA_RSA_v1_5_SHA_1 = new ByteString("id-TA-RSA-v1-5-SHA-1", OID);
CVC.id_TA_RSA_v1_5_SHA_256 = new ByteString("id-TA-RSA-v1-5-SHA-256", OID);
CVC.id_TA_RSA_v1_5_SHA_512 = new ByteString("id-TA-RSA-v1-5-SHA-512", OID);
CVC.id_TA_RSA_PSS_SHA_1 = new ByteString("id-TA-RSA-PSS-SHA-1", OID);
CVC.id_TA_RSA_PSS_SHA_256 = new ByteString("id-TA-RSA-PSS-SHA-256", OID);
CVC.id_TA_RSA_PSS_SHA_512 = new ByteString("id-TA-RSA-PSS-SHA-512", OID);

CVC.id_ECPUBLICKEY = new ByteString("id-ecPublicKey", OID);
CVC.id_ANSIX9 = new ByteString("iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) prime(1)", OID);
CVC.id_CERTICOM = new ByteString("iso(1) identified-organization(3) certicom(132) curve(0)", OID);
CVC.id_BRAINPOOL = new ByteString("ellipticCurve", OID);

CVC.id_ECDSA_WITH_SHA2 = new ByteString("iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3)", OID);
CVC.id_ECDSA_WITH_SHA256 = new ByteString("ecdsa-with-SHA256", OID);
CVC.id_ECDSA_WITH_SHA384 = new ByteString("ecdsa-with-SHA384", OID);
CVC.id_ECDSA_WITH_SHA512 = new ByteString("ecdsa-with-SHA512", OID);




/**
 * Return signature mechanism for object identifier
 *
 * @param {ByteString} oid the object identifer from the public key object
 * @returns the signature mechanism as Crypto. constant or -1 if not defined
 * @type Number
 */
CVC.getSignatureMech = function(oid, keysize) {
	if (oid.equals(CVC.id_TA_ECDSA_SHA_1))
		return Crypto.ECDSA_SHA1;
	if (oid.equals(CVC.id_TA_ECDSA_SHA_224))
		return Crypto.ECDSA_SHA224;
	if (oid.equals(CVC.id_TA_ECDSA_SHA_256))
		return Crypto.ECDSA_SHA256;
	if (oid.equals(CVC.id_TA_ECDSA_SHA_384))
		return Crypto.ECDSA_SHA384;
	if (oid.equals(CVC.id_TA_ECDSA_SHA_512))
		return Crypto.ECDSA_SHA512;
	if (oid.equals(CVC.id_TA_RSA_v1_5_SHA_1))
		return Crypto.RSA_SHA1;
	if (oid.equals(CVC.id_TA_RSA_v1_5_SHA_256))
		return Crypto.RSA_SHA256;
	if (oid.equals(CVC.id_TA_RSA_v1_5_SHA_512))
		return Crypto.RSA_SHA512;
	if (oid.equals(CVC.id_TA_RSA_PSS_SHA_1))
		return Crypto.RSA_PSS_SHA1;
	if (oid.equals(CVC.id_TA_RSA_PSS_SHA_256))
		return Crypto.RSA_PSS_SHA256;
	if (oid.equals(CVC.id_TA_RSA_PSS_SHA_512))
		return Crypto.RSA_PSS_SHA512;
	if (oid.equals(CVC.id_ECDSA_WITH_SHA256))
		return Crypto.ECDSA_SHA256;
	if (oid.equals(CVC.id_ECDSA_WITH_SHA384))
		return Crypto.ECDSA_SHA384;
	if (oid.equals(CVC.id_ECDSA_WITH_SHA512))
		return Crypto.ECDSA_SHA512;
	if (CVC.isCurveOID(oid)) {
		assert(typeof(keysize) == "number", "Argument keysize must be number");
		if (keysize >= 512) {
			return Crypto.ECDSA_SHA512;
		} else if (keysize >= 384) {
			return Crypto.ECDSA_SHA384;
		} else if (keysize >= 256) {
			return Crypto.ECDSA_SHA256;
		} else if (keysize >= 224) {
			return Crypto.ECDSA_SHA224;
		}
	}

	return -1;
}



/**
 * Return hash mechanism for object identifier
 *
 * @param {ByteString} oid the object identifer from the public key object
 * @returns the hash mechanism as Crypto. constant or -1 if not defined
 * @type Number
 */
CVC.getHashMech = function(oid) {
	if (oid.equals(CVC.id_TA_ECDSA_SHA_1))
		return Crypto.SHA_1;
	if (oid.equals(CVC.id_TA_ECDSA_SHA_224))
		return Crypto.SHA_224;
	if (oid.equals(CVC.id_TA_ECDSA_SHA_256))
		return Crypto.SHA_256;
	if (oid.equals(CVC.id_TA_ECDSA_SHA_384))
		return Crypto.SHA_384;
	if (oid.equals(CVC.id_TA_ECDSA_SHA_512))
		return Crypto.SHA_512;
	if (oid.equals(CVC.id_ECDSA_WITH_SHA256))
		return Crypto.SHA_256;
	if (oid.equals(CVC.id_ECDSA_WITH_SHA384))
		return Crypto.SHA_384;
	if (oid.equals(CVC.id_ECDSA_WITH_SHA512))
		return Crypto.SHA_512;
	if (oid.equals(CVC.id_TA_RSA_v1_5_SHA_1))
		return Crypto.SHA_1;
	if (oid.equals(CVC.id_TA_RSA_v1_5_SHA_256))
		return Crypto.SHA_256;
	if (oid.equals(CVC.id_TA_RSA_v1_5_SHA_512))
		return Crypto.SHA_512;
	if (oid.equals(CVC.id_TA_RSA_PSS_SHA_1))
		return Crypto.SHA_1;
	if (oid.equals(CVC.id_TA_RSA_PSS_SHA_256))
		return Crypto.SHA_256;
	if (oid.equals(CVC.id_TA_RSA_PSS_SHA_512))
		return Crypto.SHA_512;
	return -1;
}



/**
 * Return true of the object identifier denotes a curve
 *
 * @type boolean
 * @return true, if ECDSA based OID
 */
CVC.isCurveOID = function(oid) {
	if (oid.startsWith(CVC.id_BRAINPOOL) == CVC.id_BRAINPOOL.length) {
		return true;
	}
	if (oid.startsWith(CVC.id_ANSIX9) == CVC.id_ANSIX9.length) {
		return true;
	}
	if (oid.startsWith(CVC.id_CERTICOM) == CVC.id_CERTICOM.length) {
		return true;
	}
	return false;
}



/**
 * Return true of the object identifier starts with id-TA-ECDSA
 *
 * @type boolean
 * @return true, if ECDSA based OID
 */
CVC.isECDSA = function(oid) {
	if (oid.startsWith(CVC.id_TA_ECDSA) == CVC.id_TA_ECDSA.length) {
		return true;
	}
	if (oid.startsWith(CVC.id_ECDSA_WITH_SHA2) == CVC.id_ECDSA_WITH_SHA2.length) {
		return true;
	}
	if (oid.equals(CVC.id_ECPUBLICKEY)) {
		return true;
	}
	if (CVC.isCurveOID(oid)) {
		return true;
	}
	return false;
}



/**
 * Wrap an ECDSA signature in the format r || s into a TLV encoding as defined by RFC 3279
 *
 * @param signature ByteString containing the concatenation of r and s as unsigned integer values
 * @returns ASN.1 SEQUENCE objects containing two signed integer r and s
 */
CVC.wrapSignature = function(signature) {
	var len = signature.length / 2;

	// r and s are unsigned big integer. We might need to pad a zero for ASN.1 INTEGER which is signed
	var r = signature.bytes(0, len);
	while ((r.length > 1) && (r.byteAt(0) == 0)) {
		r = r.bytes(1);
	}
	if (r.byteAt(0) >= 0x80) {
		r = ByteString.valueOf(0, 1).concat(r);
	}

	var s = signature.bytes(len, len);
	while ((s.length > 1) && (s.byteAt(0) == 0)) {
		s = s.bytes(1);
	}
	if (s.byteAt(0) >= 0x80) {
		s = ByteString.valueOf(0, 1).concat(s);
	}

	var t = new ASN1(ASN1.SEQUENCE);
	t.add(new ASN1(ASN1.INTEGER, r));
	t.add(new ASN1(ASN1.INTEGER, s));

	return t.getBytes();
}



/**
 * Integer to octet string conversion
 */
CVC.I2O = function(value, length) {
	if (value.length > length) {
		value = value.right(length);
	}
	while (value.length < length) {
		value = CVC.PAD.left((length - value.length - 1 & 15) + 1).concat(value);
	}
	return value;
}
CVC.PAD = new ByteString("00000000000000000000000000000000", HEX);



/**
 * Unwrap a ECDSA signature from the TLV encoding according to RFC3279 into the concatenation
 * of the unsigned integer r and s
 *
 * @param signature TLV encoded signature
 * @param keylen optional parameter to specify the key lengths in bytes.
 * @returns concatenation of r and s
 */
CVC.unwrapSignature = function(signature, keylen) {
	var t = new ASN1(signature);
	if (typeof(keylen) != "undefined") {
		var r = CVC.I2O(t.get(0).value, keylen);
		var s = CVC.I2O(t.get(1).value, keylen);
	} else {
		var r = t.get(0).value;
		if (r.byteAt(0) == 00)
			r = r.bytes(1);

		var s = t.get(1).value;
		if (s.byteAt(0) == 00)
			s = s.bytes(1);
	}

	return r.concat(s);
}



/**
 * Rewrap an ECDSA signature that contains redundant leading zeros in integer.
 *
 * @param signature the signature
 * @type ByteString
 * @param the fixed signature
 */
CVC.rewrapSignature = function(signature) {
	var a = new ASN1(signature);
	var r = a.get(0).value;
	while ((r.byteAt(0) == 0) && (r.byteAt(1) < 0x80)) {
		r = r.bytes(1);
	}

	var s = a.get(1).value;
	while ((s.byteAt(0) == 0) && (s.byteAt(1) < 0x80)) {
		s = s.bytes(1);
	}
	return (new ASN1(0x30, new ASN1(0x02, r), new ASN1(0x02, s))).getBytes();
}



/**
 * Check a ASN sequence against a structure description
 *
 * @private
 * @param {Object} s the structure description
 * @param {ASN1} asn the asn sequence
 * @type String
 * @return null if valid or the validation error message
 */
CVC.checkStructure = function(s, asn) {
	var j = 0;
	for (var i = 0; i < s.length; i++) {
		var d = s[i];

//		print("Checking tag " + d.tag.toString(HEX));

		if (j < asn.elements) {
			var a = asn.get(j);

			if (a.tag == d.tag) {
				if ((typeof(d.minlen) != "undefined") && (a.value.length < d.minlen)) {
					return "Length (" + a.value.length + ") of " + CVC.OBJECTNAMES[d.tag] + "(" + d.tag.toString(HEX) + ") less than " + d.minlen;
				}
				if ((typeof(d.maxlen) != "undefined") && (a.value.length > d.maxlen)) {
					return "Length (" + a.value.length + ") of " + CVC.OBJECTNAMES[d.tag] + "(" + d.tag.toString(HEX) + ") more than " + d.maxlen;
				}
				if ((typeof(d.content) != "undefined")) {
					var r = CVC.checkStructure(d.content, a);
					if (r) {
						return r;
					}
				}
				j++;
			} else {
				if (!d.optional) {
					return "Expecting " + CVC.OBJECTNAMES[d.tag] + "(" + d.tag.toString(HEX) + ") but found tag " + a.tag.toString(HEX);
				}
			}
		} else {
			if (!d.optional) {
				return "Expecting " + CVC.OBJECTNAMES[d.tag] + "(" + d.tag.toString(HEX) + ") but sequence is exhaused";
			}
		}
	}
	return null;
}



/**
 * Validate ASN1 semantic for card verifiable certificate or certificate request
 *
 * @type String
 * @return null if no error, or error message
 */
CVC.prototype.validate = function() {
	var r = null;
	if (this.asn.tag == CVC.TAG_AT) {
		r = CVC.checkStructure(CVC.ATREQ_SYNTAX, this.asn);
	} else {
		if (this.body.find(CVC.TAG_CED)) {
			r = CVC.checkStructure(CVC.CERT_SYNTAX, this.asn);
		} else {
			r = CVC.checkStructure(CVC.REQ_SYNTAX, this.asn);
		}
	}
	return r;
}



/**
 * Return true of the certificate contains domain parameter
 *
 * @type boolean
 * @return true, if certificate contains domain parameter
 */
CVC.prototype.containsDomainParameter = function() {
	var pdo = this.body.find(CVC.TAG_PUK);
	if (pdo == null) {
		return false;
	}

	var d = pdo.find(0x84);		// Generator
	return (d != null);
}



/**
 * Returns the certificate profile indicator (CPI)
 *
 * @return the CPI or null
 * @type Number
 */
CVC.prototype.getCPI = function() {
	var cpido = this.body.find(CVC.TAG_CPI);

	if (!cpido) {
		return null;
	}

	return cpido.value.toUnsigned();
}



/**
 * Returns the certification authority reference (CAR).
 *
 * @return the CAR or null
 * @type PublicKeyReference
 */
CVC.prototype.getCAR = function() {
	var cardo = this.body.find(CVC.TAG_CAR);

	if (!cardo) {
		return null;
	}

	return new PublicKeyReference(cardo.value);
}



/**
 * Returns the certificate holder reference (CHR).
 *
 * @return the CHR
 * @type PublicKeyReference
 */
CVC.prototype.getCHR = function() {
	var chrdo = this.body.find(CVC.TAG_CHR);

	if (!chrdo) {
		throw new GPError("CVC", GPError.OBJECT_NOT_FOUND, 0, "Certificate does not contain a CHR");
	}

	return new PublicKeyReference(chrdo.value);
}



/**
 * Returns the certificate effective date (CED).
 *
 * @return the CED or null
 * @type Date
 */
CVC.prototype.getCED = function() {
	var ceddo = this.body.find(CVC.TAG_CED);

	if (!ceddo) {
		return null
	}

	var b = ceddo.value;

	var d = new Date();
	d.setFullYear(b.byteAt(0) * 10 + b.byteAt(1) + 2000,
				  b.byteAt(2) * 10 + b.byteAt(3) - 1,
				  b.byteAt(4) * 10 + b.byteAt(5));
	d.setHours(12, 0, 0, 0);
	return d;
}



/**
 * Returns the certificate expiration date (CXD).
 *
 * @return the CXD or null
 * @type Date
 */
CVC.prototype.getCXD = function() {
	var cxddo = this.body.find(CVC.TAG_CXD);

	if (!cxddo) {
		return null
	}

	var b = cxddo.value;

	var d = new Date();
	d.setFullYear(b.byteAt(0) * 10 + b.byteAt(1) + 2000,
				  b.byteAt(2) * 10 + b.byteAt(3) - 1,
				  b.byteAt(4) * 10 + b.byteAt(5));
	d.setHours(12, 0, 0, 0);
	return d;
}



/**
 * Returns the outer certification authority reference (CAR).
 *
 * @return the outer CAR or null
 * @type PublicKeyReference
 */
CVC.prototype.getOuterCAR = function() {
	if (!this.isAuthenticatedRequest()) {
		return null;
	}
	var cardo = this.asn.get(1);

	if (!cardo) {
		return null
	}

	return new PublicKeyReference(cardo.value);
}



/**
 * Returns the extension identified by the object identifier.
 *
 * @return the extension including the OID or null if not defined
 * @type ASN1
 */
CVC.prototype.getExtension = function(extoid) {
	var extdo = this.body.find(CVC.TAG_EXTN);

	if (!extdo) {
		return null;
	}

//	print(extdo);

	for (var i = 0; i < extdo.elements; i++) {
		var ext = extdo.get(i);
		var oid = ext.get(0);
		assert(oid.tag == ASN1.OBJECT_IDENTIFIER);
		if (oid.value.equals(extoid)) {
			return ext;
		}
	}
	return null;
}



/**
 * Returns the Certificate Holder Authorization Template.
 *
 * @return the chat or null if not defined
 * @type ASN1
 */
CVC.prototype.getCHAT = function() {
	var chat = this.body.find(CVC.TAG_CHAT);

	return chat;
}



/**
 * Returns the public key object identifier
 *
 * @returns the object identifier assigned to the public key
 * @type ByteString
 */
CVC.prototype.getPublicKeyOID = function() {
	var pdo = this.body.find(CVC.TAG_PUK);
	if (pdo == null) {
		throw new GPError("CVC", GPError.OBJECT_NOT_FOUND, 0, "Certificate does not contain a public key");
	}

	var d = pdo.find(ASN1.OBJECT_IDENTIFIER);
	if (d == null) {
		throw new GPError("CVC", GPError.OBJECT_NOT_FOUND, 0, "Public key does not contain an object identifier");
	}
	return d.value;
}



/**
 * Decode a public key from the TR-03110 format
 *
 * @param {ASN1} pdo the public key data object
 * @param {Key} key the key object to fill
 */
CVC.decodeECPublicKey = function(pdo, key) {

	var d = pdo.find(0x86);		// Public point
	if (d == null) {
		throw new GPError("CVC", GPError.OBJECT_NOT_FOUND, 0, "Certificate does not contain a public key value");
	}

	var b = d.value.bytes(1);
	key.setComponent(Key.ECC_QX, b.left(b.length >> 1));
	key.setComponent(Key.ECC_QY, b.right(b.length >> 1));

	var d = pdo.find(0x81);		// Prime modulus
	if (d != null) {
		key.setComponent(Key.ECC_P, d.value);
	}

	var d = pdo.find(0x82);		// First coefficient a
	if (d != null) {
		key.setComponent(Key.ECC_A, d.value);
	}

	var d = pdo.find(0x83);		// First coefficient b
	if (d != null) {
		key.setComponent(Key.ECC_B, d.value);
	}

	var d = pdo.find(0x84);		// Base Point G
	if (d != null) {
		var b = d.value.bytes(1);
		key.setComponent(Key.ECC_GX, b.left(b.length >> 1));
		key.setComponent(Key.ECC_GY, b.right(b.length >> 1));
	}

	var d = pdo.find(0x85);		// Order of the base point
	if (d != null) {
		key.setComponent(Key.ECC_N, d.value);
	}

	var d = pdo.find(0x87);		// Cofactor f
	if (d != null) {
		key.setComponent(Key.ECC_H, d.value);
	}
}



/**
 * Returns the EC public key contained in the certificate.
 *
 * @param {Key} domParam optional domain parameter if they are not contained in certificate
 * @return the public key object
 * @type Key
 */
CVC.prototype.getECPublicKey = function(domParam) {
	var oid = this.getPublicKeyOID();
	if (CVC.isCurveOID(oid)) {
		var key = new Key();
		key.setComponent(Key.ECC_CURVE_OID, oid);
	} else if (typeof(domParam) != "undefined") {
		var key = new Key(domParam);
	} else {
		if (typeof(this.domParam) != "undefined") {
			var key = new Key(this.domParam);
		} else {
			var key = new Key();
		}
	}

	key.setType(Key.PUBLIC);

	var pdo = this.body.find(CVC.TAG_PUK);
	if (pdo == null) {
		throw new GPError("CVC", GPError.OBJECT_NOT_FOUND, 0, "Certificate does not contain a public key");
	}

	CVC.decodeECPublicKey(pdo, key);

	return key;
}



/**
 * Returns the RSA public key contained in the certificate.
 *
 * @return the public key object
 * @type Key
 */
CVC.prototype.getRSAPublicKey = function() {
	var key = new Key();

	key.setType(Key.PUBLIC);

	var pdo = this.body.find(CVC.TAG_PUK);
	if (pdo == null) {
		throw new GPError("CVC", GPError.OBJECT_NOT_FOUND, 0, "Certificate does not contain a public key");
	}

	var d = pdo.find(0x81);		// modulus
	if (d != null) {
		key.setComponent(Key.MODULUS, d.value);
	}

	var d = pdo.find(0x82);		// public exponent
	if (d != null) {
		key.setComponent(Key.EXPONENT, d.value);
	}

	return key;
}



/**
 * Returns the public key contained in the certificate.
 *
 * @param {Key} domParam optional domain parameter if they are not contained in certificate
 * @return the public key object
 * @type Key
 */
CVC.prototype.getPublicKey = function(domParam) {
	var pkoid = this.getPublicKeyOID();

	if (CVC.isECDSA(pkoid)) {
		return this.getECPublicKey(domParam);
	}
	return this.getRSAPublicKey();
}



/**
 * Determine the SubjectKeyIdentifier as defined in X.509
 *
 * @return the key identifier
 * @type ByteString
 */
CVC.prototype.determineKeyIdentifier = function() {
	var pdo = this.body.find(CVC.TAG_PUK);
	if (pdo == null) {
		throw new GPError("CVC", GPError.OBJECT_NOT_FOUND, 0, "Certificate does not contain a public key");
	}

	var pkoid = this.getPublicKeyOID();

	var keybin;
	if (CVC.isECDSA(pkoid)) {
		var d = pdo.find(0x86);		// Public point
		keybin = d.value;
	} else {
		var modulus = pdo.find(0x81).value;		// modulus
		if (modulus.byteAt(0) >= 0x80) {
			modulus = ByteString.valueOf(0).concat(modulus);
		}
		var exponent = pdo.find(0x82).value;		// public exponent
		var rsapub = new ASN1("RSAPublicKey", ASN1.SEQUENCE,
				      new ASN1("modulus", ASN1.INTEGER, modulus),
				      new ASN1("publicKeyExponent", ASN1.INTEGER, exponent));

		keybin = rsapub.getBytes();
	}
	return CVC.crypto.digest(Crypto.SHA_1, keybin);
}



/**
 * Return the x-coordinate of the EC Public Key.
 *
 * @return the key identifier
 * @type ByteString
 */
CVC.prototype.getECPublicKeyIdentifier = function() {
	var pdo = this.body.find(CVC.TAG_PUK);
	if (pdo == null) {
		throw new GPError("CVC", GPError.OBJECT_NOT_FOUND, 0, "Certificate does not contain a public key");
	}

	var pkoid = this.getPublicKeyOID();
	if (!CVC.isECDSA(pkoid)) {
		throw new GPError("CVC", GPError.OBJECT_NOT_FOUND, 0, "Certificate does not contain a EC Public Key");
	}

	var d = pdo.find(0x86);		// Public point
	var l = d.length >> 1;
	return d.value.bytes(1, l);
}



/**
 * Determine if this is an authenticated request
 *
 * @returns true, if authenticated request
 * @type Boolean
 */
CVC.prototype.isAuthenticatedRequest = function() {
	return (this.asn.tag == CVC.TAG_AT);
}



/**
 * Determine if this is a certificate request
 *
 * @returns true, if certificate request
 * @type Boolean
 */
CVC.prototype.isCertificateRequest = function() {
	if (this.isAuthenticatedRequest()) {
		return true;
	}

	var ced = this.getCED();
	return ced == null;
}



/**
 * Determine if this is a countersigned authenticated request
 *
 * @returns true, if countersigned authenticated request
 * @type Boolean
 */
CVC.prototype.isCountersignedRequest = function() {
	if (!this.isAuthenticatedRequest()) {
		return false;
	}
	return (this.getCHR().getHolder() != this.getOuterCAR().getHolder());
}



/**
 * Determine if this certificate is expired
 *
 * @returns true, if certificate is expired
 * @type Boolean
 */
CVC.prototype.isExpired = function() {
	var now = new Date();
	now.setHours(12, 0, 0, 0);
	return (now.valueOf() > this.getCXD().valueOf());
}



/**
 * Verify certificate signature with public key
 *
 * @param {Crypto} crypto the crypto instance to use for verification
 * @param {Key} puk the public key
 * @param {ByteString} oid the signature algorithm
 * @returns true if the signature is valid
 * @type Boolean
 */
CVC.prototype.verifyWith = function(crypto, puk, oid) {
	if (this.asn.tag == CVC.TAG_AT) {
		var signature = this.asn.get(0).get(1);
	} else {
		var signature = this.asn.get(1);
	}

	if (typeof(oid) == "undefined") {
		var oid = this.getPublicKeyOID();
	}
	var mech = CVC.getSignatureMech(oid, puk.getSize());

	if (CVC.isECDSA(oid)) {
		var signatureValue = CVC.wrapSignature(signature.value);
		this.domParam = puk;
	} else {
		var signatureValue = signature.value;
	}

	return crypto.verify(puk, mech, this.body.getBytes(), signatureValue);
}



/**
 * Verify certificate signature with public key from card verifiable certificate
 *
 * @param {CVC} cvc the card verifiable certificate used to obtain the public key
 * @returns true if the signature is valid
 * @type Boolean
 */
CVC.prototype.verifyWithCVC = function(crypto, cvc) {
	return this.verifyWith(crypto, cvc.getPublicKey(), cvc.getPublicKeyOID());
}



/**
 * Verify outer signature of an authenticated request with public key
 *
 * @param {Key} puk the public key
 * @param {ByteString} oid the signature algorithm
 * @returns true if the signature is valid
 * @type Boolean
 */
CVC.prototype.verifyATWith = function(crypto, puk, oid) {
	if (!this.isAuthenticatedRequest()) {
		throw new GPError("CVC", GPError.INVALID_DATA, 0, "Not an authenticated request");
	}

	var signature = this.asn.get(2);
	var signatureInput = this.asn.get(0).getBytes().concat(this.asn.get(1).getBytes());

	if (typeof(oid) == "undefined") {
		var oid = this.getPublicKeyOID();
	}
	var mech = CVC.getSignatureMech(oid);

	if (CVC.isECDSA(oid)) {
		var signatureValue = CVC.wrapSignature(signature.value);
	} else {
		var signatureValue = signature.value;
	}
	return crypto.verify(puk, mech, signatureInput, signatureValue);
}



/**
 * Verify outer signature of an authenticated request with public key from card verifiable certificate
 *
 * @param {CVC} cvc the card verifiable certificate used to obtain the public key
 * @returns true if the signature is valid
 * @type Boolean
 */
CVC.prototype.verifyATWithCVC = function(crypto, cvc) {
	return this.verifyATWith(crypto, cvc.getPublicKey(), cvc.getPublicKeyOID());
}



/**
 * Returns the encoded certificate
 *
 * @return the DER encoded certificate
 * @type ByteString
 */
CVC.prototype.getBytes = function() {
	return this.bin;
}



/**
 * Returns the certificate as ASN1 structure
 *
 * @return the certificate as ASN1 structure
 * @type ASN1
 */
CVC.prototype.getASN1 = function() {
	return this.asn;
}



/**
 * Function to recursively walk the ASN.1 tree
 */
CVC.decorateTree = function(node) {
	var name = CVC.OBJECTNAMES[node.tag];

	if (name) {
		node.setName(name);
	}

	if (node.isconstructed) {
		for (var i = 0; i < node.elements; i++) {
			CVC.decorateTree(node.get(i));
		}
	}
}



/**
 * Decorate the ASN.1 object with the correct name
 */
CVC.prototype.decorate = function() {
	CVC.decorateTree(this.asn);
	var cxddo = this.body.find(CVC.TAG_CXD);
	if (cxddo == null) {
		if (this.asn.tag == CVC.TAG_AT) {
			this.asn.setName("Authenticated CVC Request");
		} else {
			this.asn.setName("CVC Request");
		}
	}
}



/**
 * Return list of rights granted by the certificate
 *
 * @returns the list of rights
 * @type String[]
 */
CVC.prototype.getRightsAsList = function() {
	var list = [];

	var rtab;
	var chat = this.getCHAT();
	if (chat == null) {
		return list;
	}

	var oid = chat.get(0).value;

	if (oid.equals(CVC.idIS)) {
		rtab = CVC.ISRIGHTS;
	} else if (oid.equals(CVC.idAT)) {
		rtab = CVC.ATRIGHTS;
	} else if (oid.equals(CVC.idST)) {
		rtab = CVC.STRIGHTS;
	} else {
		return null;
	}

	var mask = chat.get(1).value;
	var c = 0;
	for (var i = mask.length - 1; i >= 0; i--) {
		var akku = mask.byteAt(i);
		for (var j = 0; j < (i == 0 ? 6 : 8); j++) {
			if (akku & 1) {
				list.push(rtab[c]);
			}
			c++;
			akku >>= 1;
		}
	}
	return list;
}



/**
 * Return position of certificate in PKI hierachie
 *
 * @returns Position in PKI hierachie: 0 unknown, 1-CVCA, 2-DVCA, 3-Terminal
 * @type Number
 */
CVC.prototype.getLevel = function() {
	var chat = this.getCHAT();
	if (!chat) {
		return 0;
	}

	var l = chat.get(1).value.byteAt(0) & 0xC0;
	if (l == 0xC0) {
		return 1;
	}
	return l == 0x00 ? 3 : 2;
}



/**
 * Return a string describing the certificate type
 *
 * @returns a describing string
 * @type String
 */
CVC.prototype.getType = function() {
	var ced = this.getCED();
	var chat = this.getCHAT();

	// Decode certificate / request type
	var str = "CVC ";
	if (ced == null) {
		if (this.asn.tag == CVC.TAG_AT) {
			str = "AT-CVREQ ";
		} else {
			str = "CVREQ ";
		}
	}

	// Decode CA type
	if (chat != null) {
		var oid = chat.get(0).value;

		if (oid.equals(CVC.idSC_HSM) || oid.equals(CVC.idBW_SE)) {
			if (oid.equals(CVC.idSC_HSM)) {
				str += "id-SC-HSM ";
			} else {
				str += "id-BW-SE ";
			}
			switch(chat.get(1).value.byteAt(0) & 0xC0) {
				case 0xC0: str += "SRCA "; break;
				case 0x80: str += "DICA "; break;
				case 0x40: str += "MICA "; break;
				case 0x00: str += "Device "; break;
			}
		} else {
			var trustedDV = "";
			var untrustedDV = "";

			if (oid.equals(CVC.idIS)) {
				str += "id-IS ";
				trustedDV = "(official domestic) ";
				untrustedDV = "(official foreign) ";
			} else if (oid.equals(CVC.idAT)) {
				str += "id-AT ";
				trustedDV = "(official domestic) ";
				untrustedDV = "(non-official / foreign) ";
			} else if (oid.equals(CVC.idST)) {
				str += "id-ST ";
				trustedDV = "(accreditation body) ";
				untrustedDV = "(certification service provider) ";
			} else {
				str += oid.toString(OID) + " ";
			}

			switch(chat.get(1).value.byteAt(0) & 0xC0) {
				case 0xC0: str += "CVCA "; break;
				case 0x80: str += "DV " + trustedDV; break;
				case 0x40: str += "DV " + untrustedDV; break;
				case 0x00: str += "Terminal "; break;
			}
		}
	}

	return str;
}



/**
 * Return a textual description of the certificate
 *
 * @returns a string containing information about the certificate
 * @type String
 */
CVC.prototype.toString = function() {
	var car = this.getCAR();
	var ced = this.getCED();

	var str = this.getType();

	if (car) {
		str += "CAR=" + car.toString() + " ";
	}

	str += "CHR=" + this.getCHR().toString() + " ";

	if (ced) {
		str += "CED=" + ced.toLocaleDateString() + " ";
	}

	var cxd = this.getCXD();
	if (cxd) {
		str += "CXD=" + cxd.toLocaleDateString() + " ";
	}

	if (this.isAuthenticatedRequest()) {
		str += "oCAR=" + this.getOuterCAR().toString() + " ";
	}

	return str;
}



/**
 * Return object suitable for JSON encoding
 *
 * @returns a JSON encodable object
 * @type Object
 */
CVC.prototype.toJSON = function() {
	return { clazz: "CVC", value: this.bin };
}



/**
 * Recreate object from JSON encoding
 *
 * @returns the CVC object
 * @type Object
 */
CVC.fromJSON = function(obj) {
	assert(obj.clazz.equals("CVC"), "JSON object must contain clazz: CVC");
	return new CVC(obj.value);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Simple CVC-CA
 */


// Imports
var CVC = require('scsh/eac/CVC').CVC;
var CVCertificateStore = require('scsh/eac/CVCertificateStore').CVCertificateStore;
var PublicKeyReference = require('scsh/eac/PublicKeyReference').PublicKeyReference;
var EAC2CVRequestGenerator = require('scsh/eac/EAC2CVRequestGenerator').EAC2CVRequestGenerator;
var EAC2CVCertificateGenerator = require('scsh/eac/EAC2CVCertificateGenerator').EAC2CVCertificateGenerator;



/**
 * Creates a new CVC-CA instance
 *
 * @class Class supporting a certification authority that can issue CVC certificates
 * for the EAC protocol.
 *
 * @constructor
 * @param {Crypto} crypto the crypto provider to use
 * @param {CVCertificateStore} certstore the certificate store to use
 * @param {String} path the path of holderIDs (eg. "/UTCVCA/UTDVCA/UTTERM")
 */
function CVCCA(crypto, certstore, holderId, parentId, path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + crypto + "," + certstore + "," + holderId + "," + parentId + "," + path + ")");

	this.crypto = crypto;
	this.certstore = certstore;

	if (typeof(path) == "undefined") {	// ToDo: Remove after migration
		this.holderId = holderId;
		this.parentId = parentId;

		if (this.isRootCA()) {		// CVCA
			this.path = "/" + holderId;
		} else {					// DVCA
			this.path = "/" + parentId + "/" + holderId;
		}
	} else {
		this.path = path;
		var pe = path.substr(1).split("/");
		var l = pe.length;
		assert(l >= 1);
		this.holderId = pe[l - 1];
		if (l > 1) {
			this.parentId = pe[l - 2];
		} else {
			this.parentId = this.holderId;
		}
	}
	this.keyspec = new Key();
	this.keyspec.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));
	this.taAlgorithmIdentifier = new ByteString("id-TA-ECDSA-SHA-256", OID);
	this.countryseq = null;
}

exports.CVCCA = CVCCA;



/**
 * Set factory generating EACCryptoProvider for private key operations (create, use, delete)
 *
 * @param {EACCryptoProvider} eaccp the EAC Crypto Provider for this instance
 * @param {String} eaccpid the instance id
 */
CVCCA.prototype.setEACCryptoProviderFactory = function(eaccpf, eaccpid) {
	this.eaccpf = eaccpf;
	this.eaccpid = eaccpid;
}



/**
 * Return a suitable crypto instance
 *
 */
CVCCA.prototype.getCrypto = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCrypto()");

	if (this.crypto) {
		return this.crypto;
	}

	if (this.eaccpf) {
		var eaccp = this.eaccpf.getEACCryptoProvider(this.eaccpid, true);
		return eaccp.getCrypto();
	}

	return this.certstore.getCrypto()
}



/**
 * Returns true if this is a root CA
 *
 * @returns true if this is a root CA
 * @type boolean
 */
CVCCA.prototype.isRootCA = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "isRootCA()");

	return this.holderId == this.parentId;
}



/**
 * Returns true if this CA has a certificate.
 *
 * @returns true if this CA is operational
 * @type boolean
 */
CVCCA.prototype.hasCertificate = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "hasCertificate()");

	var currentchr = this.certstore.getCurrentCHR(this.path);
	return currentchr != null;
}



/**
 * Returns true if this CA is operational.
 *
 * @returns true if this CA is operational
 * @type boolean
 */
CVCCA.prototype.isOperational = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "isOperational()");

	var currentchr = this.certstore.getCurrentCHR(this.path);
	if (currentchr == null) {
		return false;
	}
	var cvc = this.certstore.getCertificate(this.path, currentchr);
	return !cvc.isExpired();
}



/**
 * Sets the key specification for generating requests
 *
 * @param {Key} keyparam a key object containing key parameters (e.g. EC Curve)
 * @param {ByteString} algorithm the terminal authentication algorithm object identifier
 */
CVCCA.prototype.setKeySpec = function(keyparam, algorithm) {
	GPSystem.log(GPSystem.DEBUG, module.id, "setKeySpec(" + keyparam + "," + algorithm + ")");

	this.keyspec = keyparam;
	this.taAlgorithmIdentifier = algorithm;
}



/**
 * Set flags that controls the removal of the previous key if the certificate for the new key is imported
 *
 * @param {boolean} removePreviousKey true to remove, false to keep
 */
CVCCA.prototype.setRemovePreviousKey = function(removePreviousKey) {
	GPSystem.log(GPSystem.DEBUG, module.id, "setRemovePreviousKey(" + removePreviousKey + ")");

	this.removePreviousKey = removePreviousKey;
}



/**
 * Set country code to be included in sequence number of public key reference
 *
 * @param {String} countryseq the two character country code
 */
CVCCA.prototype.setCountryCodeForSequence = function(countryseq) {
	GPSystem.log(GPSystem.DEBUG, module.id, "setCountryCodeForSequence(" + countryseq + ")");

	this.countryseq = countryseq;
}



/**
 * Return private key handle, either from EACCryptoProvider or Certificate Store
 *
 */
CVCCA.prototype.getPrivateKey = function(path, chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getPrivateKey(" + path + "," + chr + ")");

	if (this.eaccpf) {
		var eaccp = this.eaccpf.getEACCryptoProvider(this.eaccpid, true);

		var blob = this.certstore.getSigner(path, chr);
		var prkey = eaccp.getPrivateKey(path, chr, blob);

		if (prkey && !blob) {		// Have a key but no matching signer
			GPSystem.log(GPSystem.DEBUG, module.id, "Signer " + chr + " not found in database, but on crypto device. Creating signer now.");

			// Calculate current signer number
			var seq = chr.getSequenceNo();
			var cnt = parseInt(seq.substr(-5), 10);			// Full 5 digit sequence
			if (isNaN(cnt)) {
				var cnt = parseInt(seq.substr(-3), 10);		// 3 Digit sequence number
			}

			GPSystem.log(GPSystem.DEBUG, module.id, "Setting signer number to " + cnt);
			this.certstore.setSignerNo(path, cnt);
			this.certstore.newSigner(path, chr);
		}
		return prkey;
	} else {
		return this.certstore.getPrivateKey(path, chr);
	}
}



/**
 * Generate a certificate request
 *
 * @param {PublicKeyReference} car the CA at which this request is addressed
 * @param {boolean} forceInitial force an initial request, even if a current certificate is available
 * @param {boolean} signinitial sign with initial key (sequence = 00000)
 * @return the certificate request
 * @type CVC
 */
CVCCA.prototype.generateRequest = function(car, forceinitial, signinitial) {
	GPSystem.log(GPSystem.DEBUG, module.id, "generateRequest(" + car + "," + forceinitial + "," + signinitial + ")");

	if (typeof(this.certstore.sc) != "undefined") {
		return this.generateRequestHSM(car, forceinitial, signinitial);
	}

	if (this.eaccpf) {
		var eaccp = this.eaccpf.getEACCryptoProvider(this.eaccpid, true);
		if (typeof(eaccp.generateRequest) == "function") {
			return this.generateRequestHSMCP(eaccp, car, forceinitial, signinitial);
		}
	}

	// Obtain key parameter

	if (typeof(this.keyspec.getComponent(Key.ECC_P)) != "undefined") {
		var prk = new Key(this.keyspec);
		prk.setType(Key.PRIVATE);
		var keyalg = Crypto.EC;
	} else {
		var prk = new Key();
		prk.setType(Key.PRIVATE);
		var keyalg = Crypto.RSA;
	}
	var puk = new Key(this.keyspec);
	puk.setType(Key.PUBLIC);

	// Determine CHR
	var currentchr = this.certstore.getCurrentCHR(this.path);
	var nextchr = this.certstore.getNextCHR(this.path, this.countryseq);

	// Generate key pair
	if (this.eaccpf) {
		var eaccp = this.eaccpf.getEACCryptoProvider(this.eaccpid, true);
		eaccp.generateKeyPair(this.path, nextchr, keyalg, prk, puk);
	} else {
		this.certstore.generateKeyPair(this.path, nextchr, keyalg, prk, puk);
	}

	// Generate certificate request
	var reqGenerator = new EAC2CVRequestGenerator(this.getCrypto());

	// Set CPI
	reqGenerator.setProfileIdentifier(0x00);

	// Set public key for request
	reqGenerator.setPublicKey(puk);

	// Set oid of algorithm
	reqGenerator.setTAAlgorithmIdentifier(this.taAlgorithmIdentifier);

	// Set CHR for the request
	reqGenerator.setCHR(nextchr);

	if ((typeof(car) != "undefined") && (car != null)) {
		reqGenerator.setCAR(car);
	}

	if ((currentchr != null) && !forceinitial) {
		var previousprk = this.getPrivateKey(this.path, currentchr);
		var previouscvc = this.certstore.getCertificate(this.path, currentchr);
		var req = reqGenerator.generateAuthenticatedCVRequest(prk, previousprk, currentchr, previouscvc.getPublicKeyOID());
	} else {
		// Generate the request
		if (signinitial) {
			var initialchr = new PublicKeyReference(nextchr.getHolder() + "00000");
			var firstprk = this.getPrivateKey(this.path, initialchr);
			var req = reqGenerator.generateAuthenticatedCVRequest(prk, firstprk, initialchr);
		} else {
			var req = reqGenerator.generateCVRequest(prk);
		}
	}

	req = new CVC(req);

	this.certstore.storeRequest(this.path, req);

	return req;
}



/**
 * Generate a certificate request using a SmartCard-HSM based private key
 *
 * @param {PublicKeyReference} car the CA at which this request is addressed
 * @param {boolean} forceInitial force an initial request, even if a current certificate is available
 * @param {boolean} signinitial sign with initial key (sequence = 00000)
 * @return the certificate request
 * @type CVC
 */
CVCCA.prototype.generateRequestHSM = function(car, forceinitial, signinitial) {
	GPSystem.log(GPSystem.DEBUG, module.id, "generateRequestHSM(" + car + "," + forceinitial + "," + signinitial + ")");

	var req = this.certstore.generateRequest(this.path, car, forceinitial, signinitial, this.keyspec, this.taAlgorithmIdentifier, this.countryseq);
	this.certstore.storeRequest(this.path, req);

	return req;
}



/**
 * Generate a certificate request using a SmartCard-HSM based private key via EACCryptoProvider
 *
 * @param {EACCryptoProvider} prov the EACCryptoProvider
 * @param {PublicKeyReference} car the CA at which this request is addressed
 * @param {boolean} forceInitial force an initial request, even if a current certificate is available
 * @param {boolean} signinitial sign with initial key (sequence = 00000)
 * @return the certificate request
 * @type CVC
 */
CVCCA.prototype.generateRequestHSMCP = function(prov, car, forceinitial, signinitial) {
	GPSystem.log(GPSystem.DEBUG, module.id, "generateRequestHSM(" + car + "," + forceinitial + "," + signinitial + ")");

	// Determine CHR
	var currentchr = this.certstore.getCurrentCHR(this.path);
	do	{
		var nextchr = this.certstore.getNextCHR(this.path, this.countryseq);
		var prk = this.getPrivateKey(this.path, nextchr);
		if (!prk) {
			break;
		}
		GPSystem.log(GPSystem.INFO, module.id, "CHR " + nextchr + " already in use, skipping to next CHR");
	} while (true);

	var req = prov.generateRequest(this.path, currentchr, nextchr, car, forceinitial, signinitial, this.keyspec, this.taAlgorithmIdentifier);
	this.certstore.storeRequest(this.path, req);
	this.certstore.newSigner(this.path, nextchr);

	return req;
}



/**
 * Counter-sign a request
 *
 * @param {CVC} req the initial request
 * @return the certificate request
 * @type CVC
 */
CVCCA.prototype.counterSignRequest = function(request) {
	GPSystem.log(GPSystem.DEBUG, module.id, "counterSignRequest('" + request + "')");

	assert(!request.isAuthenticatedRequest());

	var car = this.certstore.getCurrentCHR(this.path);
	assert(car != null);

	var cacvc = this.certstore.getCertificate(this.path, car);
	assert(cacvc != null);

	var signingTAAlgorithmIdentifier = cacvc.getPublicKeyOID();
	var prk = this.getPrivateKey(this.path, car);

	var req = EAC2CVRequestGenerator.signAuthenticatedCVRequest(this.getCrypto(), request.getASN1(), prk, car, signingTAAlgorithmIdentifier);
	return new CVC(req);
}



/**
 * Generate an initial certificate request
 *
 * @param {PublicKeyReference} car the CA at which this request is addressed
 * @return the certificate request
 * @type CVC
 */
CVCCA.prototype.generateInitialRequest = function(car) {
	GPSystem.log(GPSystem.DEBUG, module.id, "generateInitialRequest(" + car + ")");

	return this.generateRequest(car, true, false);
}



/**
 * Generate a signed initial certificate request
 *
 * @param {PublicKeyReference} car the CA at which this request is addressed
 * @return the certificate request
 * @type CVC
 */
CVCCA.prototype.generateSignedInitialRequest = function(car) {
	GPSystem.log(GPSystem.DEBUG, module.id, "generateSignedInitialRequest(" + car + ")");

	return this.generateRequest(car, true, true);
}



/**
 * Generate certificate for certificate request
 *
 * <p>Certificate contents is defined through the policy object:</p>
 * <pre>
 *  	var policy = { certificateValidityDays: 2,
 * 				   chatRoleOID: new ByteString("id-IS", OID),
 * 				   chatRights: new ByteString("E3", HEX),
 * 				   includeDomainParameter: true,
 * 				   extensions: []
 * 				 };
 * </pre>
 *
 * @param {CVC} req the certificate request
 * @param {Object} policy the object with policy settings
 * @returns the certificate
 * @type CVC
 */
CVCCA.prototype.generateCertificate = function(req, policy) {
	GPSystem.log(GPSystem.DEBUG, module.id, "generateCertificate('" + req + "'" + policy + ")");

	var car = this.certstore.getCurrentCHR(this.path);
	var maxExpDate = null;

	if (car == null) {				// No CA certificate found
		if (this.isRootCA()) {
			car = req.getCHR();		// Generate a self-signed root certificate
		} else {
			throw new GPError("CVCCA", GPError.INVALID_DATA, 0, "No current certificate found");
		}
		if (policy.publicKeyOID) {
			var signingTAAlgorithmIdentifier = policy.publicKeyOID;
		} else {
			var signingTAAlgorithmIdentifier = req.getPublicKeyOID();
		}
	} else {
		var cacvc = this.certstore.getCertificate(this.path, car);
		var signingTAAlgorithmIdentifier = cacvc.getPublicKeyOID();
		if (policy.shellModelForExpirationDate) {
			maxExpDate = cacvc.getCXD();
		}
	}

	var generator = new EAC2CVCertificateGenerator(this.getCrypto());
	generator.setCAR(car);
	generator.setCHR(req.getCHR());
	var effDate = new Date();
	if (policy.ced) {
		effDate = policy.ced;
	}
	effDate.setHours(12, 0, 0, 0);
	var expDate = new Date((policy.certificateValidityDays - 1) * (1000 * 60 * 60 * 24) + effDate.getTime());
	expDate.setHours(12, 0, 0, 0);

	if (maxExpDate != null) {
		if (effDate.getTime() > maxExpDate.getTime()) {
			throw new GPError("CVCCA", GPError.INVALID_DATA, 0, "CA certificate is expired");
		}
		// Expiration date of issued certificate must not exceed expiration date of issuing CA
		if (expDate.getTime() > maxExpDate.getTime()) {
			expDate = maxExpDate;
		}
	}

	generator.setEffectiveDate(effDate);
	generator.setExpiryDate(expDate);
	generator.setChatOID(policy.chatRoleOID);
	generator.setChatAuthorizationLevel(policy.chatRights);
	generator.setPublicKey(req.getPublicKey());
	generator.setProfileIdentifier(0x00);
	if (policy.publicKeyOID) {
		generator.setTAAlgorithmIdentifier(policy.publicKeyOID);
	} else {
		generator.setTAAlgorithmIdentifier(req.getPublicKeyOID());
	}

	generator.setIncludeDomainParameters(policy.includeDomainParameter);
	generator.setExtensions(policy.extensions);
	var prk = this.getPrivateKey(this.path, car);
	var cvc = generator.generateCVCertificate(prk, signingTAAlgorithmIdentifier);

	return cvc;
}



/**
 * Store issued certificate
 *
 * @param {CVC} cert a newly issued certificate
 */
CVCCA.prototype.storeCertificate = function(cert) {
	GPSystem.log(GPSystem.DEBUG, module.id, "storeCertificate('" + cert + "')");

	var chrHolder = cert.getCHR().getHolder();
	this.certstore.storeCertificate(this.path + "/" + chrHolder, cert, false);
}



/**
 * Remove previous key
 *
 * @param {PublicKeyReference} previous the previously used CHR
 */
CVCCA.prototype.removePreviouslyUsedKey = function(previous) {
	GPSystem.log(GPSystem.DEBUG, module.id, "removePreviouslyUsedKey('" + previous + "')");

	if (previous.equals(this.certstore.getCurrentCHR(this.path))) {
		GPSystem.log(GPSystem.INFO, module.id, "CHR " + previous + " is still the active key. Not deleting it");
		return;
	}

	if (this.eaccpf) {
		var eaccp = this.eaccpf.getEACCryptoProvider(this.eaccpid, true);
		eaccp.deletePrivateKey(this.path, previous);
	} else {
		this.certstore.deletePrivateKey(this.path, previous);
	}
}



/**
 * Import a certificate into the certificate store and make it the current certificate
 *
 * @param {CVC} cert the certificate
 */
CVCCA.prototype.importCertificate = function(cert) {
	GPSystem.log(GPSystem.DEBUG, module.id, "importCertificate('" + cert + "')");

	var chr = cert.getCHR();
	var prk = this.getPrivateKey(this.path, chr);
	if (prk == null) {
		throw new GPError("CVCCA", GPError.INVALID_DATA, 0, "Invalid certificate, no matching private key");
	}
	var c = this.certstore.getCertificate(this.path, cert.getCHR());
	if (c != null) {
		GPSystem.log(GPSystem.INFO, module.id, "Certificate " + c + " already existing");
	}

	// Save currentchr
	var currentchr = this.certstore.getCurrentCHR(this.path);

	if (this.isRootCA() && !this.isOperational()) {
		this.certstore.storeCertificate(this.path, cert, (c == null));
	} else {
		if (!this.certstore.insertCertificate(this.getCrypto(), cert, this.path)) {
			throw new GPError("CVCCA", GPError.CRYPTO_FAILED, 0, "Could not validate certificate");
		}
	}
	if (this.removePreviousKey && currentchr) {
		this.removePreviouslyUsedKey(currentchr);
	}
}



/**
 * Import a list of certificates into the certificate store
 *
 * @param {CVC[]} certs the list of certificates
 */
CVCCA.prototype.importCertificates = function(certs) {
	GPSystem.log(GPSystem.DEBUG, module.id, "importCertificates('" + certs + "')");

	// Save currentchr
	var currentchr = this.certstore.getCurrentCHR(this.path);

	var list = this.certstore.insertCertificates(this.getCrypto(), certs, true, this.path);

	if (this.removePreviousKey && currentchr) {
		this.removePreviouslyUsedKey(currentchr);
	}

	return list;
}



/**
 * Returns a list of relevant certificates.
 *
 * <p>If the CA is the root CA, then all self-signed and link certificates are returned.</p>
 * <p>If the CA is a DVCA, then all certificates of the associated root and the current
 *    DVCA certificate is returned.</p>
 *
 * @param {PublicKeyReference} fromCAR the optional starting point for the list if not a root CA
 */
CVCCA.prototype.getCertificateList = function(fromCAR) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCertificateList(" + fromCAR + ")");

	var list;

	if (this.isRootCA()) {
		list = this.certstore.listCertificates(this.path);
	} else {
		var path = this.path;

		while(true) {
			var chr = this.certstore.getCurrentCHR(path);
			if (chr == null) {
				var ofs = path.lastIndexOf("/");
				if (ofs == 0) {
					list = [];
				} else {
					path = path.substr(0, ofs);
					continue;
				}
			} else {
				list = this.certstore.getCertificateChain(path, chr, fromCAR);
			}
			break;
		}
	}

	return list;
}



/**
 * Return certificate issued by this CA
 *
 * @param {PublicKeyReference} chr the certificate holder reference
 * @returns the certificate or null if not found
 * @type CVC
 */
CVCCA.prototype.getIssuedCertificate = function(chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getIssuedCertificate(" + chr + ")");

	var path = this.path + "/" + chr.getHolder();

	var cvc = this.certstore.getCertificate(path, chr);
	if (cvc == null) {
		GPSystem.trace("No certificate found for " + chr);
		return null;
	}

	return cvc;
}



/**
 * Return authentic public key with domain parameter for a given CHR subordinate to the CA
 *
 * @param {PublicKeyReference} chr the certificate holder reference
 * @returns the public key or null
 * @type Key
 */
CVCCA.prototype.getAuthenticPublicKey = function(chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getAuthenticPublicKey(" + chr + ")");

	var cvc = this.getIssuedCertificate(chr);

	if (cvc == null) {
		return null;
	}

	if (this.isRootCA()) {
		var dp = this.certstore.getDomainParameter(cvc.getCAR());
	} else {
		var dvcacvc = this.certstore.getCertificate(this.path, cvc.getCAR());
		if (dvcacvc == null) {
			GPSystem.trace("No certificate found for " + cvc.getCAR());
			return null;
		}
		var dp = this.certstore.getDomainParameter(dvcacvc.getCAR());
	}

	return(cvc.getPublicKey(dp));
}



CVCCA.test = function(daofcvca, daofdvca, daofterm) {

	var crypto = new Crypto();

	var ss = new CVCertificateStore(daofcvca);
	ss.setContextMarker(0);
	var cvca = new CVCCA(crypto, ss, null, null, "/UTCVCA");

	// Create a new request
	var req = cvca.generateRequest(null, false);
	GPSystem.trace("Request: " + req);
	GPSystem.trace(req.getASN1());

	assert(req.verifyWith(crypto, req.getPublicKey()));

	// Create self-signed or link certificate based on request
	var policy = { certificateValidityDays: 2,
				   chatRoleOID: new ByteString("id-IS", OID),
				   chatRights: new ByteString("E3", HEX),
				   includeDomainParameter: true,
				   extensions: []
				 };
	var cert = cvca.generateCertificate(req, policy);
	GPSystem.trace("Certificate: " + cert);
	GPSystem.trace(cert.getASN1());

	// Import certificate into store, making it the most current certificate
	cvca.importCertificate(cert);

	// Generate additional self-signed root certificate
	// This must be done after the link certificate has been imported
	var policy = { certificateValidityDays: 2,
				   chatRoleOID: new ByteString("id-IS", OID),
				   chatRights: new ByteString("E3", HEX),
				   includeDomainParameter: true,
				   extensions: []
				 };
	var cert = cvca.generateCertificate(req, policy);
	GPSystem.trace("Certificate: " + cert);
	GPSystem.trace(cert.getASN1());

	// Import certificate into store, making it the most current certificate
	cvca.importCertificate(cert);

	var ss = new CVCertificateStore(daofdvca);
	ss.setContextMarker(1);
	var dvca = new CVCCA(crypto, ss, null, null, "/UTCVCA/UTDVCA");

	var certlist = cvca.getCertificateList();
	var list = dvca.importCertificates(certlist);

	if (list.length > 0) {
		GPSystem.trace("Warning: Could not import the following certificates");
		for (var i = 0; i < list.length; i++) {
			GPSystem.trace(list[i]);
		}
	}

	// Create a new request
	var req = dvca.generateRequest(null, false);
	GPSystem.trace("Request: " + req);
	GPSystem.trace(req.getASN1());

	// Sign this request with root CA
	// This must be done after the link certificate has been imported
	var policy = { certificateValidityDays: 2,
				   chatRoleOID: new ByteString("id-IS", OID),
				   chatRights: new ByteString("A3", HEX),
				   includeDomainParameter: false,
				   extensions: []
				 };
	var cert = cvca.generateCertificate(req, policy);
	GPSystem.trace("Certificate: " + cert);
	GPSystem.trace(cert.getASN1());

	cvca.storeCertificate(cert);
	dvca.importCertificate(cert);


	var ss = new CVCertificateStore(daofterm);
	ss.setContextMarker(2);
	var term = new CVCCA(crypto, ss, null, null, "/UTCVCA/UTDVCA/UTTERM");

	term.setRemovePreviousKey(true);

	var certlist = dvca.getCertificateList();
	GPSystem.trace("Certificate list: ");
	GPSystem.trace(certlist);
	var list = term.importCertificates(certlist);

	if (list.length > 0) {
		GPSystem.trace("Warning: Could not import the following certificates");
		for (var i = 0; i < list.length; i++) {
			GPSystem.trace(list[i]);
		}
	}

	// Create a new request
	var req = term.generateRequest(null, false);
	GPSystem.trace("Request: " + req);
	GPSystem.trace(req.getASN1());

	// Sign this request with DVCA
	// This must be done after the link certificate has been imported
	var policy = { certificateValidityDays: 2,
				   chatRoleOID: new ByteString("id-IS", OID),
				   chatRights: new ByteString("23", HEX),
				   includeDomainParameter: false,
				   extensions: []
				 };
	var cert = dvca.generateCertificate(req, policy);
	GPSystem.trace("Certificate: " + cert);
	GPSystem.trace(cert.getASN1());

	dvca.storeCertificate(cert);
	term.importCertificate(cert);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Support for a card verifiable certificates store according to EAC 1.1/2.0 using Data Access Objects
 */

// Imports
var CVC = require('scsh/eac/CVC').CVC;
var PublicKeyReference = require('scsh/eac/PublicKeyReference').PublicKeyReference;
var Certificate = require('scsh/pki-db/Certificate').Certificate;
var Holder = require('scsh/pki-db/Holder').Holder;
var PKCS8 = require('scsh/pkcs/PKCS8').PKCS8;



/**
 * Create an object to access a certificate store.
 *
 * @class Class that abstracts a certificate and key store for a EAC PKI.
 *
 * @constructor
 * @param {DAOFactory} DAOFactory the factory that can create data access objects for persistent information
 */
function CVCertificateStore(daof) {
	assert(daof, "Parameter doaf can't be empty");

	if (typeof(daof) == "string") {
		var DAOFactoryFileSystem    = require('scsh/pki-db/DAOFactoryFileSystem').DAOFactoryFileSystem;
		daof = new DAOFactoryFileSystem(daof);
	}

	this.daof = daof;
	this.certtype = Holder.CVC;
}

exports.CVCertificateStore = CVCertificateStore;



/**
 * Check path
 *
 * This method validates the path for semantic errors and should be called for input
 * validation before using the path in the certificate store API.
 *
 * @param {String} path the path to validate
 */
CVCertificateStore.checkPath = function(path) {
	if ((path.indexOf("/..") >= 0) ||
		(path.indexOf("../") >= 0) ||
		(path.indexOf("\\..") >= 0) ||
		(path.indexOf("..\\") >= 0) ||
		(path.indexOf("\0") >= 0) ||
		(path.indexOf("~") >= 0)) {
		throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Path \"" + path + "\" contains illegal characters");
	}

	var pa = path.split("/");
	if ((pa.length < 2) || (pa.length > 4)) {
		throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Path must not contain less than one or more that three elements");
	}
	if (pa[0] != "") {
		throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Path must start with /");
	}
	for (var i = 1; i < pa.length; i++) {
		if ((pa[i].length < 3) || (pa[i].length > 11)) {
			throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Path element length must be between 3 and 11");
		}
	}
}



/**
 * Strip the last element of the path, effectively defining the parent within the path
 *
 * @param {String} path the path to strip the last element from
 * @returns the parent path or null for the root
 * @type String
 */
CVCertificateStore.parentPathOf = function(path) {
	var ofs = path.lastIndexOf("/");
	if (ofs <= 0) {
		return null;
	}
	return path.substr(0, ofs);
}



/**
 * Return the n-element of the path
 *
 * @param {String} path the path to return the last element from
 * @returns the last path element or null for the root
 * @type String
 */
CVCertificateStore.nthElementOf = function(path, n) {
	var pe = path.substr(1).split("/");
	if (typeof(n) == "undefined") {
		return pe[pe.length - 1];
	}
	return pe[n];
}



/**
 * Set a context marker that goes into the certificate type
 *
 * The context marker allows to have different certificate stores with different
 * namespaces in the same database. The default context marker is 0.
 *
 * The context marker is stored with the Holder table.
 *
 * @param {Number} contextMarker the marker
 */
CVCertificateStore.prototype.setContextMarker = function(contextMarker) {
	this.certtype = (contextMarker << 4) + Holder.CVC;
}



/**
 * Return a suitable crypto object. This may be overwritten by derived classes
 *
 * @type Crypto
 * @return the Crypto object
 */
CVCertificateStore.prototype.getCrypto = function() {
	if (this.crypto == undefined) {
		this.crypto = new Crypto();
	}
	return this.crypto;
}



/**
 * Check if holder exists for path
 *
 * @param {String} path
 * @type Holder
 * @return true if holder exists
 * @private
 */
CVCertificateStore.prototype.hasHolder = function(path) {
	var holderdao = this.daof.getHolderDAO();

	var holder = holderdao.getHolder(path, this.certtype);
	return holder != null;
}



/**
 * List certificate holders for a given PKI element
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
 * @returns a list of holder ids, possibly empty
 * @type String[]
 */
CVCertificateStore.prototype.listHolders = function(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listHolders(" + path + ")");

	var holderdao = this.daof.getHolderDAO();

	var result = holderdao.getHolderList(path, this.certtype);
	return result;
}



/**
 * Get existing holder object for given path
 *
 * @param {String} path
 * @param {Boolean} create create if holder doesn't exist
 * @type Holder
 * @return the holder object
 * @private
 */
CVCertificateStore.prototype.getHolder = function(path, create) {
	var holderdao = this.daof.getHolderDAO();

	var holder = holderdao.getHolder(path, this.certtype);

	if (!holder) {
		if (!create) {
			throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Could not locate holder for " + path);
		}
		GPSystem.log(GPSystem.DEBUG, module.id, "Holder not found, creating new.");
		holder = holderdao.newHolder(path, this.certtype);
	}

	return holder;
}



/**
 * Return the current CHR for which a valid certificate exists
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
 * @returns the current CHR for which a certificate exists or null if none exists
 * @type PublicKeyReference
 */
CVCertificateStore.prototype.getCurrentCHR = function(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCurrentCHR(" + path + ")");

	var holderdao = this.daof.getHolderDAO();

	var holder = holderdao.getHolder(path, this.certtype);

	if (!holder) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Holder not found");
		return null;
	}

	var certdao = this.daof.getCertificateDAO();

	var certificate = certdao.getCurrentCertificate(holder);
	if (!certificate) {
		GPSystem.log(GPSystem.DEBUG, module.id, "getCurrentCHR(" + path + ") : No current certificate");
		return null;
	}

	var cvc = new CVC(certificate.bytes);
	var chr = cvc.getCHR();
	GPSystem.log(GPSystem.DEBUG, module.id, "getCurrentCHR(" + path + ") : " + chr);
	return chr;
}



/**
 * Return the next CHR
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
 * @param {String} countryseq the 2 digit country code to include in the sequence number (optional)
 * @returns the next CHR based on the sequence counter maintained in the configuration file
 * @type PublicKeyReference
 */
CVCertificateStore.prototype.getNextCHR = function(path, countryseq) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getNextCHR(" + path + "," + countryseq + ")");

	var holderdao = this.daof.getHolderDAO();

	var holder = holderdao.getHolder(path, this.certtype);

	if (!holder) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Holder not found, creating new.");
		holder = holderdao.newHolder(path, this.certtype);
	}

	holderdao.updateSignerNo(holder, holder.signerNo + 1);

	return this.getCHRForSequenceNumber(path, holder.signerNo, countryseq);
}



/**
 * Set the new signer number, if it is larger than the current
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
 * @param {Number} signerNo the new signer number
 */
CVCertificateStore.prototype.setSignerNo = function(path, signerNo) {
	GPSystem.log(GPSystem.DEBUG, module.id, "setSignerNo(" + path + "," + signerNo + ")");

	var holderdao = this.daof.getHolderDAO();

	var holder = holderdao.getHolder(path, this.certtype);

	if (!holder) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Holder not found, creating new.");
		holder = holderdao.newHolder(path, this.certtype);
	}

	if (signerNo > holder.signerNo) {
		holderdao.updateSignerNo(holder, signerNo);
	}
}



/**
 * Generate key pair
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key pair
 * @param {Number} algo the key generation algorithm (Crypto.EC or Crypto.RSA)
 * @param {Key} prk the private key template
 * @param {Key} puk the public key template
 */
CVCertificateStore.prototype.generateKeyPair = function(path, chr, algo, prk, puk) {
	GPSystem.log(GPSystem.DEBUG, module.id, "generateKeyPair(" + path + "," + chr + ")");

	var holder = this.getHolder(path, false);

	var crypto = this.getCrypto();

	// Generate key pair
	crypto.generateKeyPair(algo, puk, prk);

	var signerDAO = this.daof.getSignerDAO();
	var signer = signerDAO.newSigner(holder, chr.toString(), chr.getBytes());

	var p8 = PKCS8.encodeKeyUsingPKCS8Format(prk);
	signerDAO.updateSignerKey(signer, p8);
}



/**
 * Get a private key in the certificate store
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key
 * @returns the private key or null if not found
 * @type Key
 */
CVCertificateStore.prototype.getPrivateKey = function(path, chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getPrivateKey(" + path + "," + chr + ")");

	var holder = this.getHolder(path, false);

	var signerDAO = this.daof.getSignerDAO();
	var signer = signerDAO.getSignerByKeyId(holder, chr.getBytes());

	if (!signer) {
		return null;
	}

	return PKCS8.decodeKeyFromPKCS8Format(signer.keyblob);
}



/**
 * Remove private key
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key
 * @returns true is deleted
 * @type boolean
 */
CVCertificateStore.prototype.deletePrivateKey = function(path, chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteRequest(" + path + "," + chr + ")");

	var holder = this.getHolder(path, true);

	var signerDAO = this.daof.getSignerDAO();
	var signer = signerDAO.getSignerByName(holder, chr.toString());

	if (!signer) {
		return false;
	}

	return signerDAO.deleteSigner(signer);
}



/**
 * Create Signer
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key pair
 * @param {Number} algo the key generation algorithm (Crypto.EC or Crypto.RSA)
 * @param {Key} prk the private key template
 * @param {Key} puk the public key template
 */
CVCertificateStore.prototype.newSigner = function(path, chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newSigner(" + path + "," + chr + ")");

	var holder = this.getHolder(path, false);

	var signerDAO = this.daof.getSignerDAO();
	var signer = signerDAO.newSigner(holder, chr.toString(), chr.getBytes());
}



/**
 * Get Signer
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key
 * @returns the private key blob
 * @type ByteString
 */
CVCertificateStore.prototype.getSigner = function(path, chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSigner(" + path + "," + chr + ")");

	if (!this.hasHolder(path)) {
		return null;
	}

	var holder = this.getHolder(path, false);

	var signerDAO = this.daof.getSignerDAO();
	var signer = signerDAO.getSignerByKeyId(holder, chr.getBytes());

	if (!signer) {
		return null;
	}

	var blob = signer.keyblob;
	if (!blob) {
		blob = new ByteString("", HEX);
	}

	return blob;
}



/**
 * Remove Signer
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key
 * @returns true is deleted
 * @type boolean
 */
CVCertificateStore.prototype.deleteSigner = function(path, chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteSigner(" + path + "," + chr + ")");

	var holder = this.getHolder(path, true);

	var signerDAO = this.daof.getSignerDAO();
	var signer = signerDAO.getSignerByName(holder, chr.toString());

	if (!signer) {
		return false;
	}

	return signerDAO.deleteSigner(signer);
}



/**
 * Store a certificate request in the certificate store
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {CVC} req the request
 */
CVCertificateStore.prototype.storeRequest = function(path, req) {
	GPSystem.log(GPSystem.DEBUG, module.id, "storeRequest(" + path + "," + req + ")");

	var chr = req.getCHR();

	var holder = this.getHolder(path, true);

	var requestDAO = this.daof.getRequestDAO();
	requestDAO.newRequest(holder, chr.getBytes(), req.getBytes());
}



/**
 * Return request for given CHR
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for the certificate
 * @type CVC
 * @return the request or null
 */
CVCertificateStore.prototype.getRequest = function(path, chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getRequest(" + path + "," + chr + ")");

	var holder = this.getHolder(path, true);

	var requestDAO = this.daof.getRequestDAO();
	var request = requestDAO.getRequestByKeyId(holder, chr.getBytes());

	if (!request) {
		return null;
	}

	var req = new CVC(request.bytes);
	return req;
}



/**
 * Remove request
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this request
 * @returns true is deleted
 * @type boolean
 */
CVCertificateStore.prototype.deleteRequest = function(path, chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteRequest(" + path + "," + chr + ")");

	var holder = this.getHolder(path, true);

	var requestDAO = this.daof.getRequestDAO();
	var request = requestDAO.getRequestByKeyId(holder, chr.getBytes());

	if (!request) {
		return false;
	}

	return requestDAO.deleteRequest(request);
}



/**
 * Store a certificate in the certificate store
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {CVC} cert the certificate
 * @param {Boolean} makeCurrent true if this certificate becomes the current certificate
 * @param {Boolean} forceUpdate true if certificate should be updated even if one already exists
 */
CVCertificateStore.prototype.storeCertificate = function(path, cert, makeCurrent, forceUpdate) {
	GPSystem.log(GPSystem.DEBUG, module.id, "storeCertificate(" + path + ",'" + cert + "'," + makeCurrent + ")");

	var holderdao = this.daof.getHolderDAO();

	var holder = holderdao.getHolder(path, this.certtype);

	if (!holder) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Holder not found, creating new.");
		holder = holderdao.newHolder(path, this.certtype);
	}

	var certdao = this.daof.getCertificateDAO();

	var car = cert.getCAR();
	var chr = cert.getCHR();
	var dir = Certificate.UP;

	if (car.equals(chr)) {
		dir = Certificate.SHORT;
	}

	var certificate = certdao.getCertificateBySerial(holder, chr.toString(), dir);

	if (certificate) {
		var ecvc = new CVC(certificate.bytes);

		GPSystem.log(GPSystem.INFO, module.id, "storeCertificate() : We already have a certificate for that serial number");
		GPSystem.log(GPSystem.INFO, module.id, "Existing: " + ecvc);
		GPSystem.log(GPSystem.INFO, module.id, "New     : " + cert);
		GPSystem.log(GPSystem.INFO, module.id, "Both are " + (cert.getBytes().equals(certificate.bytes) ? "identical" : "different"));

		if (ecvc.getCAR().equals(ecvc.getCHR()) && (dir == Certificate.UP)) {
			GPSystem.log(GPSystem.INFO, module.id, "This is an additional link certificate for an existing root certificate");
		} else {
			if (!forceUpdate) {
				return;
			}
		}
	}

	var template = {
		keyId: chr.getBytes()
	};

	var certificate = certdao.newCertificate(holder, chr.toString(), dir, cert.getBytes(), template);

	if (makeCurrent) {
		holderdao.updateCurrentCertificate(holder, certificate);
	}
}



/**
 * Return certificate for a given CHR in binary format
 *
 * <p>This method returns a self-signed root certificate if the selfsigned
 *    parameter is set. If not set or set to false, then matching link certificate,
 *    if any, is returned rather than the self-signed certificate.</p>
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for the certificate
 * @param {boolean} selfsigned return the self-signed root certificate rather than a link certificate
 * @returns the certificate or null if not found
 * @type ByteString
 */
CVCertificateStore.prototype.getCertificateBinary = function(path, chr, selfsigned) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCertificateBinary(" + path + "," + chr + "," + selfsigned + ")");

	var holderdao = this.daof.getHolderDAO();

	var holder = holderdao.getHolder(path, this.certtype);

	if (!holder) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Holder at " + path + " not found");
		return null;
	}

	var certificateDAO = this.daof.getCertificateDAO();

	var certificate = certificateDAO.getCertificateBySerial(holder, chr.toString(), selfsigned ? Certificate.SHORT : Certificate.UP );

	if (!certificate) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Certificate for " + chr.toString() + " not found");
		return null;
	}

	GPSystem.log(GPSystem.DEBUG, module.id, "getCertificateBinary:" + certificate.bytes.bytes(0,10).toString(HEX));
	return certificate.bytes;
}



/**
 * Return certificate for a given CHR
 *
 * <p>This method returns a self-signed root certificate if the selfsigned
 *    parameter is set. If not set or set to false, then matching link certificate,
 *    if any, is returned rather than the self-signed certificate.</p>
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for the certificate
 * @param {boolean} selfsigned return the self-signed root certificate rather than a link certificate
 * @returns the certificate or null if not found
 * @type CVC
 */
CVCertificateStore.prototype.getCertificate = function(path, chr, selfsigned) {
	var bin = this.getCertificateBinary(path, chr, selfsigned);

	if (bin == null) {
		return null;
	}

	var cvc = null;
	try	{
		cvc = new CVC(bin);
	}
	catch (e) {
		GPSystem.log(GPSystem.ERROR, module.id, e);
	}
	return cvc;
}



/**
 * Try locating a certificate with the given CHR
 *
 * This method tries to find a specific certificate in the store, irrespectively of the holder.
 *
 * @param {PublicKeyReference} chr the public key reference for the certificate
 * @returns the certificate or null if none found or more than one found
 * @type CVC
 */
CVCertificateStore.prototype.locateCertificate = function(chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "locateCertificate(" + chr + ")");

	var certificateDAO = this.daof.getCertificateDAO();

	if (typeof(certificateDAO.getCertificateBySerialAndType) == "undefined") {
		return null;
	}

	var certificate = certificateDAO.getCertificateBySerialAndType(chr.toString(), this.certtype);

	if (!certificate) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Certificate for " + chr.toString() + " not found or not unique");
		return null;
	}

	cvc = new CVC(certificate.bytes);
	return cvc;
}



/**
 * Remove certificate
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this certificate
 * @param {boolean} selfsigned delete the self-signed root certificate rather than a link certificate
 * @returns true is deleted
 * @type boolean
 */
CVCertificateStore.prototype.deleteCertificate = function(path, chr, selfsigned) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteCertificate(" + path + "," + chr + "," + selfsigned + ")");

	var holder = this.getHolder(path, false);

	if (!holder) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Holder not found");
		return null;
	}

	var certificateDAO = this.daof.getCertificateDAO();

	var certificate = certificateDAO.getCertificateBySerial(holder, chr.toString(), selfsigned ? Certificate.SHORT : Certificate.UP );

	if (!certificate) {
		return false;
	}
	return certificateDAO.deleteCertificate(certificate);
}



/**
 * Return a chain of certificates resembling a path from root to end entity.
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} tochr the public key reference for the certificate at the end of the chain
 * @param {PublicKeyReference} fromcar the public key reference for the certificate to start with or root if undefined
 * @returns the list of certificates starting with a self signed root certificate (fromcar undefined) a certificate
 *          issued by fromcar up to an including the certificate referenced by tochr. Return null if fromcar is not found.
 * @type CVC[]
 */
CVCertificateStore.prototype.getCertificateChain = function(path, tochr, fromcar) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCertificateChain(" + path + "," + tochr + "," + fromcar + ")");

	var chain = [];
	var chr = tochr;

	while (true) {
		var cvc = this.getCertificate(path, chr, false);
		if (cvc == null) {
			throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Could not locate certificate " + chr);
		}
		chain.push(cvc);
		if (typeof(fromcar) == "undefined") {
			if (cvc.getCAR().equals(cvc.getCHR())) {
				break;
			}
		} else {
			if (cvc.getCAR().equals(fromcar)) {
				break;
			}
			if (cvc.getCAR().equals(cvc.getCHR())) {
				return null;	// fromcar not found along the chain
			}
		}
		var ofs = path.lastIndexOf("/");
		if (ofs > 0) {
			path = path.substr(0, ofs);
		}
		chr = cvc.getCAR();
	}

	return chain.reverse();
}



/**
 * List certificates stored for given PKI element sorted by CHR
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @returns a list of certificates, possibly empty
 * @type CVC[]
 */
CVCertificateStore.prototype.listCertificates = function(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listCertificates(" + path + ")");

	var result = [];

	var holder = this.getHolder(path, true);

	var certificateDAO = this.daof.getCertificateDAO();

	var certificates = certificateDAO.enumerateCertificates(holder);

	if (!certificates) {
		GPSystem.log(GPSystem.DEBUG, module.id, "No certificates found");
		return result;
	}

	for (var i = 0; i < certificates.length; i++) {
		var cvc = new CVC(certificates[i].bytes);
		result.push(cvc);
	}

	result.sort(function(a,b) { return a.getCHR().toString() < b.getCHR().toString() ? -1 : (a.getCHR().toString() > b.getCHR().toString() ? 1 : 0) } );
	GPSystem.log(GPSystem.DEBUG, module.id, "listCertificates:" + result.length);
	return result;

}



/**
 * Returns the domain parameter for a certificate identified by its CHR
 *
 * <p>This method traverses the certificate hierachie upwards and follows link certificates
 *    until domain parameter are found.</p>
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
 * @param {PublicKeyReference} chr the CHR of the certificate to start the search with
 * @return the domain parameter
 * @type Key
 */
CVCertificateStore.prototype.getDomainParameter = function(path, chr) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getDomainParameter(" + path + "," + chr + ")");

	if (typeof(chr) == "undefined") {	// ToDo remove after migration
		chr = path;
		var path = "/" + chr.getHolder();
	}

	do	{
		var ofs = path.lastIndexOf("/");
		if (ofs > 0) {
			var cvc = this.getCertificate(path, chr);
			if (cvc == null) {
				throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Could not locate certificate " + chr);
			}
			chr = cvc.getCAR();
			path = path.substr(0, ofs);
		}
	} while (ofs > 0);

	do {
		var cvc = this.getCertificate(path, chr);

		if (cvc == null) {
			throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Could not locate certificate " + chr + " in " + path);
		}

		var p = cvc.getPublicKey();
		if (typeof(p.getComponent(Key.ECC_P)) != "undefined") {
			return p;
		}
		chr = cvc.getCAR();
	} while (!chr.equals(cvc.getCHR()));

	throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Could not locate CVCA certificate with domain parameter");
}



/**
 * Returns the default domain parameter for a given PKI
 *
 * @param {String} path the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant
 * @return the domain parameter
 * @type Key
 */
CVCertificateStore.prototype.getDefaultDomainParameter = function(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getDefaultDomainParameter(" + path + ")");

	var pe = path.substr(1).split("/");
	chr = this.getCurrentCHR("/" + pe[0]);
	if (chr == null) {
		throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Could not locate current CVCA certificate");
	}
	return this.getDomainParameter(chr);
}



/**
 * Returns the default algorithm identifier OID from the most recent link certificate
 *
 * @param {String} path the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant
 * @return the algorithm identifier
 * @type ByteString
 */
CVCertificateStore.prototype.getDefaultPublicKeyOID = function(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getDefaultPublicKeyOID(" + path + ")");

	var pe = path.substr(1).split("/");
	chr = this.getCurrentCHR("/" + pe[0]);
	if (chr == null) {
		throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Could not locate current CVCA certificate");
	}
	var cvc = this.getCertificate("/" + pe[0], chr);
	if (cvc == null) {
		throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Could not locate current CVCA certificate");
	}

	return cvc.getPublicKeyOID();
}



/**
 * Encode a three character alpha-numeric sequence number
 *
 * <p>This function encodes values in the range 0 to 999 as numeric string with leading zeros.</p>
 * <p>Value in the range 1000 to 34695 (999 + 26 * 36 * 36) are encoded as alphanumeric string.</p>
 * <p>Value beyond 34696 are truncated</p>
 *
 * @param {Number} value integer sequence value
 * @type String
 * @return the 3 character string
 * @private
 */
CVCertificateStore.encodeBase36 = function(value) {
	value = value % (1000 + 26 * 36 * 36);
	var seq;
	if (value < 1000) {
		seq = "" + value;
	} else {
		value += 11960;			10 * 36 * 36 - 1000
		seq = "";
		while(value > 0) {
			var c = value % 36;
			if (c >= 10) {
				c += 55;
			} else {
				c += 48;
			}
			seq = String.fromCharCode(c) + seq;
			value = Math.floor(value / 36);
		}
	}
	seq = "000".substr(0, 3 - seq.length) + seq;
	return seq;
}



/**
 * Create a CHR for the given path and sequence number
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
 * @param {Number} the sequence number to be translated
 * @param {String} countryseq the 2 digit country code to include in the sequence number (optional)
 * @return the CHR
 * @type PublicKeyReference
 * @private
 */
CVCertificateStore.prototype.getCHRForSequenceNumber = function(path, sequence, countryseq) {
	var pe = path.substr(1).split("/");
	var l = pe[pe.length - 1];

	var str;
	if (countryseq) {
		str = countryseq + CVCertificateStore.encodeBase36(sequence);
	} else {
		str = "" + sequence;
		str = "0000".substr(4 - (5 - str.length)).concat(str);
	}
	return new PublicKeyReference(l + str);
}



/**
 * Determine path for certificate issuer
 *
 * For CVCA and DVCA certificates we can determined the path from the CAR. For Terminal
 * certificates we dont know the full path, as we don't know under which CVCA the DVCA operates
 * that issued the Terminal certificate. So we use a two-step heuristic which first tries to locate
 * the DVCA certificate based on the CAR and if that is not unique uses the cvcahint to determine the path
 * of the issuer
 */
CVCertificateStore.prototype.getIssuerPathFor = function(cvc, cvcahint) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getIssuerPathFor('" + cvc + "'," + cvcahint + ")");

	var car = cvc.getCAR();
	var level = cvc.getLevel();

	if (level != 3) {
		var path = "/" + car.getHolder();
	} else {
		var cacert = this.locateCertificate(car);
		if (cacert) {
			path = "/" + cacert.getCAR().getHolder() + "/" + car.getHolder();
			GPSystem.log(GPSystem.DEBUG, module.id, "getIssuerPathFor() using path based on located issuer certificate " + path);
		} else {
			path = "/" + CVCertificateStore.nthElementOf(cvcahint, 0) + "/" + car.getHolder();
			GPSystem.log(GPSystem.DEBUG, module.id, "getIssuerPathFor() using path based on hint " + path);
		}
	}

	return path;
}



/**
 * Validate a certificate against a certificate already stored in the certificate store
 *
 * <p>If the certificate is a terminal certificate, then the first element of the path given
 *    in cvcahint is used to determine the correct CVCA.</p>
 *
 * Throws an exception if the certificate can not be validated
 *
 * @param {Crypto} crypto the crypto provider to be used for certificate verification
 * @param {CVC} cvc the certificate
 * @param {String} cvcahint the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant
 * @returns object containing the path and domain parameter used for validating the certificate. Returns null if no issuer could be found
 * @type Object
 */
CVCertificateStore.prototype.validateCertificate = function(crypto, cvc, cvcahint) {
	GPSystem.log(GPSystem.DEBUG, module.id, "validateCertificate('" + cvc + "'," + cvcahint + ")");

	var car = cvc.getCAR();
	var level = cvc.getLevel();

	if (car.equals(cvc.getCHR())) { // Self signed
		if (level != 1) {
			GPSystem.log(GPSystem.ERROR, module.id, "Self-signed certificates only allowed for CVCA: " + cvc);
			throw new GPError(module.id, GPError.CRYPTO_FAILED, 0, "Self-signed certificates only allowed for CVCA: " + cvc);
		}
		if (!cvc.verifyWith(crypto, cvc.getPublicKey(), cvc.getPublicKeyOID())) {
			GPSystem.log(GPSystem.ERROR, module.id, "Self-signed certificate failed signature verification. " + cvc);
			throw new GPError(module.id, GPError.CRYPTO_FAILED, 0, "Self-signed certificate failed signature verification. " + cvc);
		}
		return;
	}

	var path = this.getIssuerPathFor(cvc, cvcahint);
	var cacert = this.getCertificate(path, car);

	if (cacert == null) {
		GPSystem.log(GPSystem.ERROR, module.id, "Can't find issuer " + car);
		return;
	}

	var oid = cacert.getPublicKeyOID();
	if (CVC.isECDSA(oid)) {
		var dp = this.getDomainParameter(path, car);
	} else {
		var dp = null;
	}
	var result = cvc.verifyWith(crypto, cacert.getPublicKey(dp), oid);
	if (!result) {
		GPSystem.log(GPSystem.ERROR, module.id, "Certificate " + cvc + " failed signature verification with " + cacert);
		throw new GPError(module.id, GPError.CRYPTO_FAILED, 0, "Certificate " + cvc + " failed signature verification with " + cacert);
	}

	return { path: path + "/" + cvc.getCHR().getHolder(), dp: dp };
}



/**
 * Insert a single certificates into the certificate store
 *
 * <p>Before a certificate is imported, the signature is verified.</p>
 * <p>If the certificate is a terminal certificate, then the first element of the path given
 *    in cvcahint is used to determine the correct CVCA.</p>
 *
 * @param {Crypto} crypto the crypto provider to be used for certificate verification
 * @param {CVC} cvc the certificate
 * @param {String} cvcahint the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant
 * @param {Boolean} forceUpdate true if certificate should be updated even if one already exists
 * @returns true, if the certificate was inserted
 * @type boolean
 */
CVCertificateStore.prototype.insertCertificate = function(crypto, cvc, cvcahint, forceUpdate) {
	GPSystem.log(GPSystem.DEBUG, module.id, "insertCertificate('" + cvc + "'," + cvcahint + ")");

	var car = cvc.getCAR();
	var path = this.getIssuerPathFor(cvc, cvcahint);

	var cacert = this.getCertificate(path, car);
	if (cacert == null) {
		GPSystem.log(GPSystem.ERROR, module.id, "Can't find issuer " + car);
		return false;
	}

	if (CVC.isECDSA(cacert.getPublicKeyOID())) {
		var dp = this.getDomainParameter(path, car);
	} else {
		var dp = null;
	}
	var result = cvc.verifyWith(crypto, cacert.getPublicKey(dp), cacert.getPublicKeyOID());
	if (!result) {
		GPSystem.log(GPSystem.ERROR, module.id, "Certificate " + cvc + " failed signature verification with " + cacert);
		return false;
	}

	var chr = cvc.getCHR();
	var holder = chr.getHolder();

	if (holder == car.getHolder()) {	// Link certificate
		this.storeCertificate("/" + holder, cvc, true, forceUpdate);
	} else {							// Subordinate certificate
		this.storeCertificate(path + "/" + holder, cvc, true, forceUpdate);
	}

	return true;
}



/**
 * Insert certificates into certificate store
 *
 * <p>The import into the internal data structure is done in three steps:</p>
 * <ol>
 *  <li>If allowed, all self-signed certificates are imported</li>
 *  <li>All possible certificate chains are build</li>
 *  <li>Certificate chains are processed starting with the topmost certificate in the hierachie</li>
 * </ol>
 * <p>Certificates at the terminal level can only be imported, if the issuing
 *    DVCA certificate is contained in the list or a hint for the relevant CVCA is
 *    given in the first element of the path contained in parameter cvcahint.</p>
 * <p>Before a certificate is imported, the signature is verified.</p>
 *
 * @param {Crypto} crypto the crypto provider to be used for certificate verification
 * @param {CVC[]} certlist the unordered list of certificates
 * @param {Boolean} insertSelfSigned true, if the import of root certificates is allowed
 * @param {String} cvcahint the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant
 * @param {Boolean} forceUpdate true if certificate should be updated even if one already exists
 * @returns the (ideally empty) list of unprocessed certificates. This does not contains certificates
 *          that fail signature verification.
 * @type CVC[]
 */
CVCertificateStore.prototype.insertCertificates = function(crypto, certlist, insertSelfSigned, cvcahint, forceUpdate) {
	GPSystem.log(GPSystem.DEBUG, module.id, "insertCertificates('" + certlist + "'," + insertSelfSigned + "," + cvcahint + ")");

	var chrmap = [];

	// Iterate certificate list and store self-signed certificates, if allowed
	// Generate a map of certificate holder references
	var unprocessed = [];
	for (var i = 0; i < certlist.length; i++) {
		var cvc = certlist[i];
		var chr = cvc.getCHR().toString();

		if (chr == cvc.getCAR().toString()) { // Self signed
			var result = cvc.verifyWith(crypto, cvc.getPublicKey(), cvc.getPublicKeyOID());

			if (result) {
				var path = "/" + cvc.getCHR().getHolder();
				if (insertSelfSigned) {		// Store self-signed certificates
					this.storeCertificate(path, cvc, true, forceUpdate);
				}
			} else {
				GPSystem.log(GPSystem.ERROR, module.id, "Self-signed certificate failed signature verification. " + cvc);
			}
		} else {
			var state = { cvc: cvc, end: true, stored: false };
			unprocessed.push(state);
			if (typeof(chrmap[chr]) == "undefined") {
				chrmap[chr] = state;
			} else {
				// Duplicate CHRs for terminals are allowed
				chrmap[cvc.getCAR().toString() + "/" + chr] = state;
			}
		}
	}

	// Mark certificates that are surely CAs, because an issued certificate is contained in the list
	certlist = unprocessed;
	for (var i = 0; i < certlist.length; i++) {
		var cvc = certlist[i].cvc;
		var state = chrmap[cvc.getCAR().toString()];
		if (typeof(state) != "undefined") {
			GPSystem.log(GPSystem.DEBUG, module.id, "Mark as CA: " + state.cvc);
			state.end = false;
		}
	}

	var unprocessed = [];
	for (var i = 0; i < certlist.length; i++) {
		var state = certlist[i];
		if (state.end) {		// Find all certificates which are at the end of the chain
			var list = [];
			var lastpathelement = state.cvc.getCHR().getHolder();
			var path = "/" + lastpathelement;
			var singlecert = true;
			while(true)	{		// Build a certificate chain and the path for the last certificate
				var pathelement = state.cvc.getCAR().getHolder();
				if (pathelement != lastpathelement) {		// CVCA Link Certificates don't add to the path
					path = "/" + pathelement + path;
				}
				lastpathelement = pathelement;

				if (!state.stored) {			// If not already stored, add to the list
					list.push(state);
					state.stored = true;
				}
				state = chrmap[state.cvc.getCAR().toString()];
				if (typeof(state) == "undefined") {
					break;
				}
				singlecert = false;
			}
			if (singlecert && cvcahint) {
				GPSystem.log(GPSystem.DEBUG, module.id, "Single certificate might be a terminal certificate, using cvca hint " + cvcahint);
				path = cvcahint;
			} else {
				GPSystem.log(GPSystem.DEBUG, module.id, "Path is " + path);
			}
			for (var j = list.length - 1; j >= 0; j--) {	// Process chain in reverse order
				var cvc = list[j].cvc;
				if (!this.insertCertificate(crypto, cvc, path, forceUpdate)) {
					unprocessed.push(cvc);
				}
			}
		}
	}

	return unprocessed;
}
// For backward compatibility
CVCertificateStore.prototype.insertCertificates2 = CVCertificateStore.prototype.insertCertificates;
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of the chip authentication protocol for both card and terminal
 * as defined for EAC 2.0
 */



/**
 * Create a ChipAuthenticationInfo object
 *
 * @class <p>This class encodes and decodes ChipAuthenticationInfo objects.</p>
 * <p>The class implements the following ASN.1 syntax:</p>
 * <pre>
 *	ChipAuthenticationInfo ::= SEQUENCE {
 *		protocol OBJECT IDENTIFIER(
 *			id-CA-DH-3DES-CBC-CBC |
 *			id-CA-DH-AES-CBC-CMAC-128 |
 *			id-CA-DH-AES-CBC-CMAC-192 |
 *			id-CA-DH-AES-CBC-CMAC-256 |
 *			id-CA-ECDH-3DES-CBC-CBC |
 *			id-CA-ECDH-AES-CBC-CMAC-128 |
 *			id-CA-ECDH-AES-CBC-CMAC-192 |
 *			id-CA-ECDH-AES-CBC-CMAC-256),
 *		version INTEGER, -- MUST be 1 or 2
 *		keyId INTEGER OPTIONAL
 * }
 * </pre>
 * @constructor
 * @param {ASN1} the optional tlv structure to initialize the object
 */
function ChipAuthenticationInfo(tlv) {
	if (tlv && (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements >= 2);

		var i = 0;
		var t = tlv.get(i++);
		assert(t.tag == ASN1.OBJECT_IDENTIFIER);
		this.protocol = t.value;

		var t = tlv.get(i++);
		assert(t.tag == ASN1.INTEGER);
		this.version = t.value.toSigned();

		if (i < tlv.elements) {
			var t = tlv.get(i++);
			assert(t.tag == ASN1.INTEGER);
			this.keyId = t.value.toSigned();
		}

	}
}

exports.ChipAuthenticationInfo = ChipAuthenticationInfo;


/**
 * Convert object to TLV structure
 *
 * @return the TLV structure
 * @type ASN1
 */
ChipAuthenticationInfo.prototype.toTLV = function() {
	var t = new ASN1(ASN1.SEQUENCE);

	t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, this.protocol));

	var bb = new ByteBuffer();
	bb.append(this.version);
	t.add(new ASN1(ASN1.INTEGER, bb.toByteString()));

	if (typeof(this.keyId) != "undefined") {
		t.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(this.keyId)));
	}
	return t;
}



ChipAuthenticationInfo.prototype.toString = function() {
	return "ChipAuthenticationInfo(protocol=" + this.protocol + ", version=" + this.version + ", keyId=" + this.keyId + ")";
}



/**
 * Create a ChipAuthenticationDomainParameterInfo object
 *
 * @class <p>This class encodes and decodes ChipAuthenticationDomainParameterInfo objects.</p>
 * <p>The class implements the following ASN.1 syntax:</p>
 * <pre>
 *	ChipAuthenticationDomainParameterInfo ::= SEQUENCE {
 *		protocol OBJECT IDENTIFIER(id-CA-DH | id-CA-ECDH),
 *		domainParameter AlgorithmIdentifier,
 *		keyId INTEGER OPTIONAL
 * }
 * </pre>
 * @constructor
 * @param {ASN1} the optional tlv structure to initialize the object
 */
function ChipAuthenticationDomainParameterInfo(tlv) {
	if (tlv && (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements >= 2);

		var i = 0;
		var t = tlv.get(i++);
		assert(t.tag == ASN1.OBJECT_IDENTIFIER);
		this.protocol = t.value;

		var t = tlv.get(i++);
		assert(t.tag == ASN1.SEQUENCE);

		if (t.elements > 0) {
			var oid = t.get(0);
			assert(oid.tag == ASN1.OBJECT_IDENTIFIER);
			if (oid.value.equals(new ByteString("standardizedDomainParameter", OID))) {
				this.standardizedDomainParameter = t.get(1).value.toUnsigned();
				var curveoid = ChipAuthentication.standardizedDomainParameter[this.standardizedDomainParameter];
				if (!curveoid) {
					throw new GPError("ChipAuthenticationPublicKeyInfo", GPError.INVALID_DATA, 0, "Standardized domain parameter " + this.standardizedDomainParameter + " is unknown");
				}
				this.domainParameter = new Key();
				this.domainParameter.setComponent(Key.ECC_CURVE_OID, new ByteString(curveoid, OID));
			} else {
				this.domainParameter = ECCUtils.decodeECParameters(t.get(1));
			}
		} else {
			this.domainParameter = new Key();
			this.domainParameter.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));
		}

		if (i < tlv.elements) {
			var t = tlv.get(i++);
			assert(t.tag == ASN1.INTEGER);
			this.keyId = t.value.toSigned();
		}
	}
}

if (typeof(exports) != "undefined")
	exports.ChipAuthenticationDomainParameterInfo = ChipAuthenticationDomainParameterInfo;


/**
 * Convert object to TLV structure
 *
 * @return the TLV structure
 * @type ASN1
 */
ChipAuthenticationDomainParameterInfo.prototype.toTLV = function() {
	var t = new ASN1(ASN1.SEQUENCE);

	t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, this.protocol));

	var c = new ASN1(ASN1.SEQUENCE);
	if (this.standardizedDomainParameter) {
		c.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("standardizedDomainParameter", OID)));
		c.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(this.standardizedDomainParameter)));
	} else {

	}
	t.add(c);

	if (typeof(this.keyId) != "undefined") {
		t.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(this.keyId)));
	}
	return t;
}



ChipAuthenticationDomainParameterInfo.prototype.toString = function() {
	return "ChipAuthenticationDomainParameterInfo(protocol=" + this.protocol + ", keyId=" + this.keyId + ")";
}



/**
 * Create a ChipAuthenticationPublicKeyInfo object
 *
 * @class <p>This class encodes and decodes ChipAuthenticationPublicKeyInfo objects.</p>
 * <p>The class implements the following ASN.1 syntax:</p>
 * <pre>
 *	ChipAuthenticationPublicKeyInfo ::= SEQUENCE {
 *		protocol OBJECT IDENTIFIER(id-PK-DH | id-PK-ECDH),
 *		chipAuthenticationPublicKey SubjectPublicKeyInfo,
 *		keyId INTEGER OPTIONAL
 *	}
 *
 *	SubjectPublicKeyInfo ::= SEQUENCE {
 *		algorithm  AlgorithmIdentifier,
 *		subjectPublicKey BIT STRING
 *	}
 *
 *	AlgorithmIdentifier ::= SEQUENCE {
 *		algorithm  OBJECT IDENTIFIER,
 *		parameters ANY DEFINED BY algorithm OPTIONAL
 *	}
 * </pre>
 * @constructor
 * @param {ASN1} the optional tlv structure to initialize the object
 */
function ChipAuthenticationPublicKeyInfo(tlv) {
	if (tlv && (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements >= 2);

		var i = 0;
		var t = tlv.get(i++);
		assert(t.tag == ASN1.OBJECT_IDENTIFIER);		// protocol
		this.protocol = t.value;

		var t = tlv.get(i++);
		assert(t.tag == ASN1.SEQUENCE);					// Subject public key info
		assert(t.elements == 2);

		var algo = t.get(0);
		assert(algo.tag == ASN1.SEQUENCE);				// Algorithm Identifier
		assert(algo.elements == 2);

		var oid = algo.get(0);							// algorithm
		assert(oid.tag == ASN1.OBJECT_IDENTIFIER);
		this.algorithm = oid.value;

		if (oid.value.equals(new ByteString("standardizedDomainParameter", OID))) {
			this.standardizedDomainParameter = algo.get(1).value.toUnsigned();
			var curveoid = ChipAuthentication.standardizedDomainParameter[this.standardizedDomainParameter];
			if (!curveoid) {
				throw new GPError("ChipAuthenticationPublicKeyInfo", GPError.INVALID_DATA, 0, "Standardized domain parameter " + this.standardizedDomainParameter + " is unknown");
			}
			this.domainParameter = new Key();
			this.domainParameter.setComponent(Key.ECC_CURVE_OID, new ByteString(curveoid, OID));
		} else {
			this.domainParameter = ECCUtils.decodeECParameters(algo.get(1));
		}

		var puk = t.get(1);
		assert(puk.tag == ASN1.BIT_STRING);
		this.publicKey = puk.value.bytes(1);

		if (i < tlv.elements) {
			var t = tlv.get(i++);
			assert(t.tag == ASN1.INTEGER);
			this.keyId = t.value.toSigned();
		}
	}
}

if (typeof(exports) != "undefined")
	exports.ChipAuthenticationPublicKeyInfo = ChipAuthenticationPublicKeyInfo;



/**
 * Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
 *
 * This prevent interpretation of the integer representation if converted into
 * a signed ASN1 INTEGER.
 *
 * @param {ByteString} value the value to convert
 * @return the converted value
 * @type ByteString
 */
ChipAuthenticationPublicKeyInfo.convertUnsignedInteger = function(value) {
	assert(value.length > 0);

	var i = 0;
	for (var i = 0; (i < value.length - 1) && (value.byteAt(i) == 0); i++);

	if (value.byteAt(i) >= 0x80) {
		value = (new ByteString("00", HEX)).concat(value.bytes(i));
	} else {
		value = value.bytes(i);
	}

	return value;
}



/**
 * Creates the EC Public Key as subjectPublicKeyInfo TLV structure object.
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *	SubjectPublicKeyInfo  ::=  SEQUENCE  {
 *		algorithm            AlgorithmIdentifier,
 *		subjectPublicKey     BIT STRING  }
 *
 *	AlgorithmIdentifier  ::=  SEQUENCE  {
 *		algorithm               OBJECT IDENTIFIER,
 *		parameters              ANY DEFINED BY algorithm OPTIONAL  }
 *
 *	id-ecPublicKey OBJECT IDENTIFIER ::= {
 *		iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 }
 *
 *	ECParameters ::= CHOICE {
 *		namedCurve         OBJECT IDENTIFIER,
 *		implicitCurve      NULL,
 *		specifiedCurve     SpecifiedECDomain }
 * </pre>
 * @return the subjectPublicKey TLV structure
 * @type ASN1
 */
ChipAuthenticationPublicKeyInfo.createECSubjectPublicKeyInfo = function(publicKey, encodeECDomainParameter) {
	var t = new ASN1("subjectPublicKeyInfo", ASN1.SEQUENCE);

	var algorithm = new ASN1("algorithm", ASN1.SEQUENCE,
			new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("1.2.840.10045.2.1", OID))
		);

	if (encodeECDomainParameter) {
		if (publicKey.getComponent(Key.ECC_P)) {		// Make sure curve components are available if only curve oid is defined
			publicKey.setComponent(Key.ECC_CURVE_OID, publicKey.getComponent(Key.ECC_CURVE_OID));
		}
		groupCAPuk.setComponent(Key.ECC_CURVE_OID, groupCAPuk.getComponent(Key.ECC_CURVE_OID));
		var ecParameter =
			new ASN1("ecParameters", ASN1.SEQUENCE,
				new ASN1("version", ASN1.INTEGER, new ByteString("01", HEX)),
				new ASN1("fieldID", ASN1.SEQUENCE,
					new ASN1("fieldType", ASN1.OBJECT_IDENTIFIER, new ByteString("prime-field", OID)),
					new ASN1("prime", ASN1.INTEGER,
						ChipAuthenticationPublicKeyInfo.convertUnsignedInteger(publicKey.getComponent(Key.ECC_P)))
				),
				new ASN1("curve", ASN1.SEQUENCE,
					new ASN1("a", ASN1.OCTET_STRING,
						ChipAuthenticationPublicKeyInfo.convertUnsignedInteger(publicKey.getComponent(Key.ECC_A))),
					new ASN1("b", ASN1.OCTET_STRING,
						ChipAuthenticationPublicKeyInfo.convertUnsignedInteger(publicKey.getComponent(Key.ECC_B)))
				),
				new ASN1("base", ASN1.OCTET_STRING,
						(new ByteString("04", HEX)).concat(publicKey.getComponent(Key.ECC_GX)).concat(publicKey.getComponent(Key.ECC_GY))),
				new ASN1("order", ASN1.INTEGER,
					ChipAuthenticationPublicKeyInfo.convertUnsignedInteger(publicKey.getComponent(Key.ECC_N)))
			);

		var cofactor = publicKey.getComponent(Key.ECC_H);
		var i = 0;
		for (; (i < cofactor.length) && (cofactor.byteAt(i) == 0); i++);
		if (i < cofactor.length) {
			ecParameter.add(new ASN1("cofactor", ASN1.INTEGER, cofactor.bytes(i)));
		}
		algorithm.add(ecParameter);
	} else {
		algorithm.add(new ASN1("parameters", ASN1.OBJECT_IDENTIFIER, publicKey.getComponent(Key.ECC_CURVE_OID)));
	}

	t.add(algorithm);

	// Prefix a 00 to form correct bitstring
	// Prefix a 04 to indicate uncompressed format
	var keybin = new ByteString("0004", HEX);
	keybin = keybin.concat(publicKey.getComponent(Key.ECC_QX));
	keybin = keybin.concat(publicKey.getComponent(Key.ECC_QY));
	t.add(new ASN1("subjectPublicKey", ASN1.BIT_STRING, keybin));

	return t;
}



/**
 * Convert object to TLV structure
 *
 * @return the TLV structure
 * @type ASN1
 */
ChipAuthenticationPublicKeyInfo.prototype.toTLV = function() {
	var t = new ASN1("chipAuthenticationPublicKeyInfo", ASN1.SEQUENCE);

	t.add(new ASN1("protocol", ASN1.OBJECT_IDENTIFIER, this.protocol));

	if (this.algorithm.equals(new ByteString("id-ecPublicKey", OID))) {
		var spki = ChipAuthenticationPublicKeyInfo.createECSubjectPublicKeyInfo(this.publicKey, true);
	} else {
		var algoid = new ASN1("algorithm", ASN1.SEQUENCE, new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, this.algorithm));
		if (this.algorithm.equals(new ByteString("standardizedDomainParameter", OID))) {
			algoid.add(new ASN1("standardizedDomainParameter", ASN1.INTEGER, ByteString.valueOf(this.standardizedDomainParameter)));
		}

		var spki = new ASN1("subjectPublicKey", ASN1.SEQUENCE);
		spki.add(algoid);
		var puk = (new ByteString("0004", HEX)).concat(this.publicKey.getComponent(Key.ECC_QX)).concat(this.publicKey.getComponent(Key.ECC_QY));
		spki.add(new ASN1("publicKey", ASN1.BIT_STRING, puk));

	}

	t.add(spki);

	if (typeof(this.keyId) != "undefined") {
		t.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(this.keyId)));
	}
	return t;
}



ChipAuthenticationPublicKeyInfo.prototype.toString = function() {
	return "ChipAuthenticationPublicKeyInfo(protocol=" + this.protocol + ", algorithm=" + this.algorithm + ", publicKey=" + this.publicKey + ", keyId=" + this.keyId + ")";
}



/**
 * Create a ChipAuthentication protocol object
 *
 * @class This class implements the ChipAuthentication protocol
 *
 * @constructor
 *
 * @param {Crypto} crypto the crypto provider
 * @param {ByteString} algo the algorithm OID
 * @param {Key} domparam the key object holding ECC domain parameter
 */
function ChipAuthentication(crypto, algo, domparam) {
	this.crypto = crypto;
	this.algo = algo;
	this.domparam = domparam;
	this.includeDPinAuthToken = false;
	this.noPadding = false;

//	print(ECCUtils.ECParametersToString(domparam));
}

if (typeof(exports) != "undefined")
	exports.ChipAuthentication = ChipAuthentication;


ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC = (new ByteString("id-CA-ECDH-3DES-CBC-CBC", OID));
ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_128 = (new ByteString("id-CA-ECDH-AES-CBC-CMAC-128", OID));
ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_192 = (new ByteString("id-CA-ECDH-AES-CBC-CMAC-192", OID));
ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_256 = (new ByteString("id-CA-ECDH-AES-CBC-CMAC-256", OID));

ChipAuthentication.standardizedDomainParameter = [];
ChipAuthentication.standardizedDomainParameter[8] = "secp192r1";
ChipAuthentication.standardizedDomainParameter[9] = "brainpoolP192r1";
ChipAuthentication.standardizedDomainParameter[10] = "secp224r1";
ChipAuthentication.standardizedDomainParameter[11] = "brainpoolP224r1";
ChipAuthentication.standardizedDomainParameter[12] = "secp256r1";
ChipAuthentication.standardizedDomainParameter[13] = "brainpoolP256r1";
ChipAuthentication.standardizedDomainParameter[14] = "brainpoolP320r1";
ChipAuthentication.standardizedDomainParameter[15] = "secp384r1";
ChipAuthentication.standardizedDomainParameter[16] = "brainpoolP384r1";
ChipAuthentication.standardizedDomainParameter[17] = "brainpoolP512r1";
ChipAuthentication.standardizedDomainParameter[18] = "secp521r1";


/**
 * Derive key from input parameter, counter and optional nonce
 *
 * @param {ByteString} input the first part of the hash input
 * @param {Number} counter the counter value
 * @param {nonce} the optional nonce inserted between the input and the counter
 * @return the key object
 * @type Key
 */
ChipAuthentication.prototype.deriveKey = function(input, counter, nonce) {
	if (typeof(nonce) != "undefined") {
		input = input.concat(nonce);
	}

	var bb = new ByteBuffer("000000", HEX);
	bb.append(counter);

	input = input.concat(bb.toByteString());

	var key = new Key();

	if (this.algo.equals(ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC)) {
		var digest = this.crypto.digest(Crypto.SHA_1, input);
		key.setComponent(Key.DES, digest.left(16));
	} else if (this.algo.equals(ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_128)) {
		var digest = this.crypto.digest(Crypto.SHA_1, input);
		key.setComponent(Key.AES, digest.left(16));
	} else if (this.algo.equals(ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_192)) {
		var digest = this.crypto.digest(Crypto.SHA_256, input);
		key.setComponent(Key.AES, digest.left(24));
	} else if (this.algo.equals(ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_256)) {
		var digest = this.crypto.digest(Crypto.SHA_256, input);
		key.setComponent(Key.AES, digest);
	} else {
		throw new GPError("ChipAuthentication", GPError.INVALID_MECH, 0, "Algorithm not supported");
	}

	return key;
}



/**
 * Generate ephemeral key pair
 */
ChipAuthentication.prototype.generateEphemeralCAKeyPair = function() {
	this.prkCA = new Key(this.domparam);
	this.prkCA.setType(Key.PRIVATE);

	this.pukCA = new Key(this.domparam);
	this.pukCA.setType(Key.PUBLIC);

	this.crypto.generateKeyPair(Crypto.EC, this.pukCA, this.prkCA);
}



/**
 * Set chip authentication keys
 *
 * @param {Key} prk the private key
 * @param {Key} puk the public key
 */
ChipAuthentication.prototype.setKeyPair = function(prk, puk) {
	this.prkCA = prk;
	this.pukCA = puk;
}



/**
 * Returns the x coordinate of the public key
 *
 * @return the encoded public key
 * @type ByteString
 */
ChipAuthentication.prototype.getCompressedPublicKey = function() {
	return (this.pukCA.getComponent(Key.ECC_QX));
}



/**
 * Returns the ephemeral public key
 *
 * @return the encoded public key
 * @type ByteString
 */
ChipAuthentication.prototype.getEphemeralPublicKey = function() {
	var ecpk = new ByteString("04", HEX);
	ecpk = ecpk.concat(this.pukCA.getComponent(Key.ECC_QX));
	ecpk = ecpk.concat(this.pukCA.getComponent(Key.ECC_QY));
	return ecpk;
}



/**
 * Decodes the ephemeral public key
 *
 * @return the decoded public key
 * @type ByteString
 */
ChipAuthentication.prototype.decodeEphemeralPublicKey = function(encodedKey) {
	if (encodedKey.byteAt(0) != 0x04) {
		throw new GPError("ChipAuthentication", GPError.INVALID_DATA, 0, "Terminal ephemeral public key does not start with '04'");
	}

	var key = new Key(this.domparam);
	var l = key.getSize() >> 3;

	if (encodedKey.length != 1 + (l << 1)) {
		throw new GPError("ChipAuthentication", GPError.INVALID_DATA, 0, "Length of terminal ephemeral public key does not match curve");
	}

	key.setType(Key.PUBLIC);
	key.setComponent(Key.ECC_QX, encodedKey.bytes(1, l));
	key.setComponent(Key.ECC_QY, encodedKey.bytes(1 + l, l));
	return key;
}



/**
 * Performs the mapping operation with mapping data from the other side
 *
 * @param {ByteString} publicKey the public key in encoded format
 */
ChipAuthentication.prototype.performKeyAgreement = function(publicKey, nonce) {
	if (publicKey.byteAt(0) != 0x04)
		throw new GPError("ChipAuthentication", GPError.INVALID_DATA, 0, "Public key must start with '04'");

	if ((nonce != undefined) && !(nonce instanceof ByteString))
		throw new GPError("ChipAuthentication", GPError.INVALID_TYPE, 0, "nonce must be of type ByteString");

	var l = (publicKey.length - 1) >> 1;
	if (l != this.prkCA.getComponent(Key.ECC_P).length) {
		throw new GPError("ChipAuthentication", GPError.INVALID_DATA, 0, "Public key size does not match private key size");
	}

	this.otherPuK = new Key(this.domparam);
	this.otherPuK.setComponent(Key.ECC_QX, publicKey.bytes(    1, l));
	this.otherPuK.setComponent(Key.ECC_QY, publicKey.bytes(l + 1, l));

	var k = this.crypto.decrypt(this.prkCA, Crypto.ECDH, publicKey.bytes(1));
//	GPSystem.trace("Shared Secret K:");
//	GPSystem.trace(k);
	this.kenc = this.deriveKey(k, 1, nonce);
	this.kmac = this.deriveKey(k, 2, nonce);
}



/**
 * Calculate and verify the authentication token over the public key received from
 * the other side
 *
 * @param {ByteString} the MAC over the authentication data
 * @return true if the MAC is valid
 * @type Boolean
 */
ChipAuthentication.prototype.verifyAuthenticationToken = function(authToken) {
	var t = ChipAuthentication.encodePublicKey(this.algo.toString(OID), this.pukCA, this.includeDPinAuthToken);
//	GPSystem.trace("Authentication Token for verification:");
//	GPSystem.trace(t);

	if (this.algo.equals(ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC)) {
		if (this.noPadding) {
			var inp = t.getBytes();
		} else {
			var inp = t.getBytes().pad(Crypto.ISO9797_METHOD_2);
		}
		var at = this.crypto.sign(this.kmac, Crypto.DES_MAC_EMV, inp);
		return at.equals(authToken);
	} else {
		var at = this.crypto.sign(this.kmac, Crypto.AES_CMAC, t.getBytes());
		return at.left(8).equals(authToken);
	}
}



/**
 * Calculate the authentication token over the public key received from
 * the other side
 *
 * @param {ByteString} the MAC over the authentication data
 * @return true if the MAC is valid
 * @type Boolean
 */
ChipAuthentication.prototype.calculateAuthenticationToken = function() {
	var t = ChipAuthentication.encodePublicKey(this.algo.toString(OID), this.otherPuK, this.includeDPinAuthToken);
//	GPSystem.trace("Authentication Token for signing:");
//	GPSystem.trace(t);

	if (this.algo.equals(ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC)) {
		if (this.noPadding) {
			var inp = t.getBytes();
		} else {
			var inp = t.getBytes().pad(Crypto.ISO9797_METHOD_2);
		}
		var at = this.crypto.sign(this.kmac, Crypto.DES_MAC_EMV, inp);
	} else {
		var at = this.crypto.sign(this.kmac, Crypto.AES_CMAC, t.getBytes()).left(8);
	}
	return at;
}



/**
 * Strips leading zeros of a ByteString
 *
 * @param {ByteString} value the ByteString value
 * @return the stripped ByteString object, may be an empty ByteString
 * @type ByteString
 */
ChipAuthentication.stripLeadingZeros = function(value) {
	var i = 0;
	for (; (i < value.length) && (value.byteAt(i) == 0); i++);

	return value.right(value.length - i);
}



/**
 * Encode an ECC public key in the format defined by the EAC 2.0 specification
 *
 * @param {String} oid the object identifier to encode
 * @param {Key} key the EC public key
 * @param {Boolean} withDP true to encode domain parameter as well
 */
ChipAuthentication.encodePublicKey = function(oid, key, withDP) {

	var t = new ASN1("ecPublicKey", 0x7F49);
	t.add(new ASN1("objectIdentifier", ASN1.OBJECT_IDENTIFIER, new ByteString(oid, OID)));
	if (withDP) {
		t.add(new ASN1("primeModulus", 0x81, key.getComponent(Key.ECC_P)));
		t.add(new ASN1("firstCoefficient", 0x82, key.getComponent(Key.ECC_A)));
		t.add(new ASN1("secondCoefficient", 0x83, key.getComponent(Key.ECC_B)));

		var point = new ByteString("04", HEX);
		point = point.concat(key.getComponent(Key.ECC_GX));
		point = point.concat(key.getComponent(Key.ECC_GY));
		t.add(new ASN1("basePoint", 0x84, point));

		t.add(new ASN1("orderOfTheBasePoint", 0x85, key.getComponent(Key.ECC_N)));
	}
	var point = new ByteString("04", HEX);
	point = point.concat(key.getComponent(Key.ECC_QX));
	point = point.concat(key.getComponent(Key.ECC_QY));
	t.add(new ASN1("publicPoint", 0x86, point));

	if (withDP) {
		var cofactor = key.getComponent(Key.ECC_H);
		cofactor = ChipAuthentication.stripLeadingZeros(cofactor);

		t.add(new ASN1("cofactor", 0x87, cofactor));
	}

	return t;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of the Extended Access Control protocol in version 2.0
 */

// Imports
var CVC = require('scsh/eac/CVC').CVC;
var PublicKeyReference = require('scsh/eac/PublicKeyReference').PublicKeyReference;

var PACEDomainParameterInfo = require('scsh/eac/PACE').PACEDomainParameterInfo;
var PACEInfo = require('scsh/eac/PACE').PACEInfo;
var PACE = require('scsh/eac/PACE').PACE;

var ChipAuthenticationInfo = require('scsh/eac/ChipAuthentication').ChipAuthenticationInfo;
var ChipAuthenticationDomainParameterInfo = require('scsh/eac/ChipAuthentication').ChipAuthenticationDomainParameterInfo;
var ChipAuthenticationPublicKeyInfo = require('scsh/eac/ChipAuthentication').ChipAuthenticationPublicKeyInfo;
var ChipAuthentication = require('scsh/eac/ChipAuthentication').ChipAuthentication;

var RestrictedIdentification = require('scsh/eac/RestrictedIdentification').RestrictedIdentification;
var RestrictedIdentificationInfo = require('scsh/eac/RestrictedIdentification').RestrictedIdentificationInfo;
var RestrictedIdentificationDomainParameterInfo = require('scsh/eac/RestrictedIdentification').RestrictedIdentificationDomainParameterInfo;



/**
 * Create a protocol object for EAC
 *
 * @class Class implementing support for Extended Access Control V2
 * @constructor
 * @param {Crypto} crypto the crypto provider
 * @param {Card} card the card object
 */
function EAC20(crypto, card) {
	this.crypto = crypto;
	this.card = card;
	this.sm = null;
	this.includeDPinAuthToken = false;		// Standard for PACE version >= 2

	this.PACEInfos = new Array();
	this.PACEDPs = new Array();

	this.CAInfos = new Array();
	this.CADPs = new Array();
	this.CAPublicKeys = new Array();

	this.RIInfos = new Array();
	this.maxRData = 0;
	this.maxCData = 239;		// Used for update binary
	this.useFID = false;		// Use FIDs rather than SFIs
	this.verbose = false;
	this.selectADFwithoutSM = false;	// Send SELECT ADF without SM (for applets)
}

exports.EAC20 = EAC20;


/** PACE PWD is the hashed MRZ */
EAC20.ID_MRZ = 1;
/** PACE PWD is the CAN */
EAC20.ID_CAN = 2;
/** PACE PWD is the PIN */
EAC20.ID_PIN = 3;
/** PACE PWD is the PUK */
EAC20.ID_PUK = 4;

EAC20.AID_LDS = new ByteString("A0000002471001", HEX);
EAC20.AID_eID = new ByteString("E80704007F00070302", HEX);
EAC20.AID_eSign = new ByteString("A000000167455349474E", HEX);

EAC20.SFI_CVCA = 0x1C;
EAC20.SFI_ChipSecurity = 0x1B;
EAC20.SFI_CardAccess = 0x1C;
EAC20.SFI_CardSecurity = 0x1D;
EAC20.SFI_COM = 0x1E;


EAC20.prototype.log = function(str) {
	if (this.verbose) {
		GPSystem.trace(str);
	}
}



/**
 * Process a list of security infos from EF.CardInfo, EF.CardSecurity or EF.ChipSecurity
 *
 * @param {ASN1} si the security info ASN Sequence
 * @param {boolean} fromCardSecurity true if security infos are taken from EF.CardSecurity, EF.ChipSecurity or EF.DG14
 */
EAC20.prototype.processSecurityInfos = function(si, fromCardSecurity) {
	this.log("SecurityInfos:");
	this.log(si);

	var id_PACE = new ByteString("id-PACE", OID);
	var id_PACE_DH_GM = new ByteString("id-PACE-DH-GM", OID);
	var id_PACE_ECDH_GM = new ByteString("id-PACE-ECDH-GM", OID);
	var id_PACE_DH_IM = new ByteString("id-PACE-DH-IM", OID);
	var id_PACE_ECDH_IM = new ByteString("id-PACE-ECDH-IM", OID);
	var id_PK_ECDH = new ByteString("id-PK-ECDH", OID);
	var id_CA = new ByteString("id-CA", OID);
	var id_CA_DH = new ByteString("id-CA-DH", OID);
	var id_CA_ECDH = new ByteString("id-CA-ECDH", OID);
	var id_TA = new ByteString("id-TA", OID);
	var id_PT = new ByteString("id-PT", OID);

	for (var i = 0; i < si.elements; i++) {
		var o = si.get(i);
		assert((o.elements >= 1) && (o.elements <= 3));

		var oid = o.get(0);
		assert(oid.tag == ASN1.OBJECT_IDENTIFIER);

		if (oid.value.startsWith(id_TA) == id_TA.length) {
			this.log("TA : " + o);
		} else if (oid.value.startsWith(id_PACE) == id_PACE.length) {
			if (oid.value.equals(id_PACE_DH_GM) ||
				oid.value.equals(id_PACE_ECDH_GM) ||
				oid.value.equals(id_PACE_DH_IM) ||
				oid.value.equals(id_PACE_ECDH_GM)) {
				this.log("PaceDomainParameterInfo : " + o);

				var pdpi = new PACEDomainParameterInfo(o);
				this.log(pdpi);

				var id = pdpi.parameterId;

				if (typeof(id) == "undefined") {
					id = 0;
				}

				if (!fromCardSecurity && (typeof(this.PACEDPs[id]) != "undefined")) {
					throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Duplicate parameterId " + id + " for PACEDomainParameter");
				}

				this.PACEDPs[id] = pdpi;
			} else {
				this.log("PaceInfo : " + o);

				var pi = new PACEInfo(o);
				this.log(pi);

				var id = pi.parameterId;

				if (typeof(id) == "undefined") {
					id = 0;
				}

				if (pi.version == 1) {
					if (!fromCardSecurity && (typeof(this.PACEInfos[id]) != "undefined")) {
						throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Duplicate parameterId " + id + " for PACEInfo");
					}
				} else {
					id = 0;
				}
				this.PACEInfos[id] = pi;
			}
		} else if (oid.value.equals(id_PK_ECDH)) {
			this.log("ChipAuthenticationPublicKeyInfo : " + o);

			var capki = new ChipAuthenticationPublicKeyInfo(o);
			this.log(capki);

			var id = capki.keyId;

			if (typeof(id) == "undefined") {
				this.log("Using default key id 0");
				id = 0;
			}

			if (!fromCardSecurity && (typeof(this.CAPublicKeys[id]) != "undefined")) {
				throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Duplicate keyId " + id + " for ChipAuthenticationPublicKeyInfo");
			}

			this.CAPublicKeys[id] = capki;
		} else if (oid.value.startsWith(id_CA) == id_CA.length) {
			if (oid.value.equals(id_CA_DH) ||
				oid.value.equals(id_CA_ECDH)) {
				this.log("ChipAuthenticationDomainParameterInfo : " + o);

				var cadpi = new ChipAuthenticationDomainParameterInfo(o);
				this.log(cadpi);

				var id = cadpi.keyId;

				if (typeof(id) == "undefined") {
					this.log("Using default key id 0");
					id = 0;
				}

				if (!fromCardSecurity && (typeof(this.CADPs[id]) != "undefined")) {
					throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Duplicate keyId " + id + " for ChipAuthenticationDomainParameter");
				}

				this.CADPs[id] = cadpi;
			} else {
				this.log("ChipAuthenticationInfo : " + o);

				var cai = new ChipAuthenticationInfo(o);
				this.log(cai);

				var id = cai.keyId;

				if (typeof(id) == "undefined") {
					this.log("Using default key id 0");
					id = 0;
				}

				if (!fromCardSecurity && (typeof(this.CAInfos[id]) != "undefined")) {
					throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Duplicate keyId " + id + " for ChipAuthenticationInfo");
				}

				this.CAInfos[id] = cai;
			}
		} else if (oid.value.startsWith(RestrictedIdentification.id_RI) == RestrictedIdentification.id_RI.length) {
			if (oid.value.equals(RestrictedIdentification.id_RI_DH) ||
				oid.value.equals(RestrictedIdentification.id_RI_ECDH)) {
				this.log("RestrictedIdentificationDomainParameterInfo : " + o);

				var ridpi = new RestrictedIdentificationDomainParameterInfo(o);
				this.log(ridpi);

				if (!fromCardSecurity && (typeof(this.RIDP) != "undefined")) {
					throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Duplicate RestrictedIdentificationDomainParameter");
				this.RIDP = ridpi;
				}
			} else {
				this.log("RestrictedIdentificationInfo : " + o);

				var rii = new RestrictedIdentificationInfo(o);
				this.log(rii);

				var id = rii.keyId;

				if (typeof(id) == "undefined") {
					this.log("Using default key id 0");
					id = 0;
				}

				if (!fromCardSecurity && (typeof(this.RIInfos[id]) != "undefined")) {
					throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Duplicate keyId " + id + " for RestrictedIdentificationInfo");
				}

				this.RIInfos[id] = rii;
			}
		} else if (oid.value.equals(id_PT)) {
			this.log("PrivilegedTerminalInfo : " + o);
			this.processSecurityInfos(o.get(1), fromCardSecurity);
		}
	}
}



/**
 * Select EF using FID and read elementary file
 *
 * @param {ByteString} fid 2 byte file identifier
 * @type ByteString
 * @return the content of the EF
 */
EAC20.prototype.readEFwithFID = function(fid) {
	assert(fid.length == 2, "Length of fid must be 2 bytes");
	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xA4, 0x02, 0x0C, fid, [0x9000]);

	var bb = new ByteBuffer();
	var offset = 0;
	do	{
		var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xB0, offset >> 8, offset & 0xFF, this.maxRData);
		bb.append(rsp);
		offset += rsp.length;
	} while ((this.card.SW == 0x9000) && (rsp.length > 0));

	return bb.toByteString();
}



/**
 * Select EF using FID and update content
 *
 * @param {ByteString} fid 2 byte file identifier
 * @param {ByteString} data data to be written
 */
EAC20.prototype.updateEFwithFID = function(fid, data) {
	assert(fid.length == 2, "Length of fid must be 2 bytes");
	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xA4, 0x02, 0x0C, fid, [0x9000]);

	var offset = 0;
	while (offset < data.length) {
		var len = data.length - offset;
		len = this.maxCData < len ? this.maxCData : len;
		this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xD6, offset >> 8, offset & 0xFF, data.bytes(offset, len), [0x9000]);
		offset += len;
	}
}



/**
 * Select and read EF using SFI
 *
 * @param {Number} short file identifier
 * @type ByteString
 * @return the content of the EF
 */
EAC20.prototype.readEFwithSFI = function(sfi) {
	assert(typeof(sfi) == "number", "Parameter must be a number");

	if (this.useFID) {
		var fid = ByteString.valueOf(0x0100 + sfi, 2);
		return this.readEFwithFID(fid);
	}

	var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xB0, 0x80 | sfi, 0x00, this.maxRData, [0x9000]);

	var bb = new ByteBuffer(rsp);
	var offset = bb.length;
	do	{
		var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xB0, offset >> 8, offset & 0xFF, this.maxRData);
		bb.append(rsp);
		offset += rsp.length;
	} while ((this.card.SW == 0x9000) && (rsp.length > 0));

	return bb.toByteString();
}



/**
 * Select and read a TLV encoded EF using SFI
 *
 * @param {Number} short file identifier
 * @type ByteString
 * @return the TLV content of the EF
 */
EAC20.prototype.readTLVEFwithSFI = function(sfi) {
	assert(typeof(sfi) == "number", "Parameter must be a number");

	if (this.useFID) {
		var fid = ByteString.valueOf(0x0100 + sfi, 2);
		return this.readEFwithFID(fid);
	}

	var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xB0, 0x80 | sfi, 0x00, this.maxRData, [0x9000]);

	var bb = new ByteBuffer(rsp);
	var offset = bb.length;
	do	{
		var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xB0, offset >> 8, offset & 0xFF, this.maxRData);
		bb.append(rsp);
		offset += rsp.length;
	} while ((this.card.SW == 0x9000) && (rsp.length > 0));

	return bb.toByteString();
}



/**
 * Select EF using SFI and update content
 *
 * @param {Number} short file identifier
 * @param {ByteString} data data to be written
 */
EAC20.prototype.updateEFwithSFI = function(sfi, data) {
	assert(typeof(sfi) == "number", "Parameter must be a number");

	if (this.useFID) {
		var fid = ByteString.valueOf(0x0100 + sfi, 2);
		return this.updateEFwithFID(fid, data);
	}

	var offset = 0;
	var p1 = 0x80 | sfi;
	while (offset < data.length) {
		var len = data.length - offset;
		len = this.maxCData < len ? this.maxCData : len;
		this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xD6, p1, offset & 0xFF, data.bytes(offset, len), [0x9000]);
		offset += len;
		p1 = offset >> 8;
	}
}



/**
 * Select application DF
 *
 * @param {ByteString} aid the application identifier
 */
EAC20.prototype.selectADF = function(aid) {
	if (this.selectADFwithoutSM) {
		this.card.sendApdu(0x00, 0xA4, 0x04, 0x0C, aid, [0x9000]);
	} else {
		this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xA4, 0x04, 0x0C, aid, [0x9000]);
	}
}



/**
 * Select ePass LDS Application
 */
EAC20.prototype.selectLDS = function() {
	this.selectADF(EAC20.AID_LDS);
}



/**
 * Select eID Application
 */
EAC20.prototype.select_eID = function() {
	this.selectADF(EAC20.AID_eID);
}



/**
 * Select eSign Application
 */
EAC20.prototype.select_eSign = function() {
	this.selectADF(EAC20.AID_eSign);
}



/**
 * Read EF.DG14 and process security infos
 *
 */
EAC20.prototype.readDG14 = function() {
	var cibin = this.readEFwithSFI(14);
	var citlv = new ASN1(cibin);
	this.log(citlv);

	this.processSecurityInfos(citlv.get(0), true);
}



/**
 * Read EF.CVCA and process contained CARs
 *
 */
EAC20.prototype.readCVCA = function() {
	var cvcabin = this.readEFwithSFI(EAC20.SFI_CVCA);
	assert(cvcabin.byteAt(0) == 0x42);

	var cvca = new ASN1(cvcabin);
	this.lastCAR = new PublicKeyReference(cvca.value);

	if (cvcabin.byteAt(cvca.size) == 0x42) {
		var cvca = new ASN1(cvcabin.bytes(cvca.size));
		this.previousCAR = new PublicKeyReference(cvca.value);
	}
}



/**
 * Read EF.CardAccess and process security infos
 *
 */
EAC20.prototype.readCardAccess = function() {
	var cibin = this.readEFwithSFI(EAC20.SFI_CardAccess);
	var citlv = new ASN1(cibin);
	this.log(citlv);

	this.processSecurityInfos(citlv, false);
}

// Deprecated
EAC20.prototype.readCardInfo = EAC20.prototype.readCardAccess;



/**
 * Read EF.CardSecurity and process security infos
 */
EAC20.prototype.readCardSecurity = function() {
	var csbin = this.readEFwithSFI(EAC20.SFI_CardSecurity);
	var cstlv = new ASN1(csbin);
	this.log("EF.CardSecurity:");
	this.log(cstlv);

	var cms = new CMSSignedData(csbin);

	var certs = cms.getSignedDataCertificates();

	this.log("EF.CardSecurity Certificates:");
	for (var i = 0; i < certs.length; i++) {
		this.log(certs[i]);
	}

	this.log("DocSigner Signature is " + (cms.isSignerInfoSignatureValid(0) ? "valid" : "not valid"));

	var data = cms.getSignedContent();

	this.log(data);

	var cstlv = new ASN1(data);

	this.log(cstlv);

	this.processSecurityInfos(cstlv, true);
}



/**
 * Read EF.ChipSecurity and process security infos
 */
EAC20.prototype.readChipSecurity = function() {
	var csbin = this.readEFwithSFI(EAC20.SFI_ChipSecurity);
	var cstlv = new ASN1(csbin);
	this.log("EF.ChipSecurity:");
	this.log(cstlv);

	var cms = new CMSSignedData(csbin);

	var certs = cms.getSignedDataCertificates();

	this.log("EF.ChipSecurity Certificates:");
	for (var i = 0; i < certs.length; i++) {
		this.log(certs[i]);
	}

	this.log("DocSigner Signature is " + (cms.isSignerInfoSignatureValid(0) ? "valid" : "not valid"));

	var data = cms.getSignedContent();

	this.log(data);

	var cstlv = new ASN1(data);

	this.log(cstlv);

	this.processSecurityInfos(cstlv, true);
}



/**
 * Return the list of PACEInfo objects
 *
 * @return the list of PACEInfo objects read from the card, indexed by the parameterId
 * @type PACEInfo[]
 */
EAC20.prototype.getPACEInfos = function() {
	return this.PACEInfos;
}



/**
 * Return the list of PACEDomainParameterInfo objects
 *
 * @return the list of PACEDomainParameterInfo objects read from the card, indexed by the parameterId
 * @type PACEDomainParameterInfo[]
 */
EAC20.prototype.getPACEDomainParameterInfos = function() {
	return this.PACEDPs;
}



/**
 * Return the list of ChipAuthenticationInfo objects
 *
 * @return the list of ChipAuthenticationInfo objects read from the card, indexed by the keyId
 * @type ChipAuthenticationInfo[]
 */
EAC20.prototype.getCAInfos = function() {
	return this.CAInfos;
}



/**
 * Return the list of ChipAuthenticationDomainParameterInfo objects
 *
 * @return the list of ChipAuthenticationDomainParameterInfo objects read from the card, indexed by the keyId
 * @type ChipAuthenticationDomainParameterInfo[]
 */
EAC20.prototype.getCADomainParameterInfos = function() {
	return this.CADPs;
}



/**
 * Return the key id of the chip authentication key
 *
 * @return the key id
 * @type
 */
EAC20.prototype.getCAKeyId = function(privileged) {
	for (var i in this.CAInfos) {		// Locate first entry in list
		if (this.CAInfos[i].keyId) {
			if (privileged) {
				privileged = false;		// Select second key if privileged key requested
			} else {
				return this.CAInfos[i].keyId;
			}
		}
	}
	return 0;
}



/**
 * Return the key id of the restricted identification key
 *
 * @param {boolean} authOnly return the RI key available after authentication only (to calculate the pseudonym)
 * @return the key id
 * @type
 */
EAC20.prototype.getRIKeyId = function(authOnly) {
	for each (var rii in this.RIInfos) {
		if (!authOnly == !rii.authorizedOnly) {
			return rii.keyId;
		}
	}
	return 0;
}



/**
 * Decode document number from 2 or 3 line MRZ
 *
 * <p>This method supports a document number in a three line MRZ longer than 10 digits.</p>
 *
 * @param {String} mrz the concatenation of the MRZ lines
 * @type String
 * @return the document number
 */
EAC20.decodeDocumentNumber = function(mrz) {
	if (mrz.length == 88) {			// Two line MRZ
		var docno = mrz.substr(44, 10);
	} else {						// Three line MRZ
		if (mrz.charAt(14) == "<") {
			var sep = mrz.indexOf("<", 15);
			var docno = mrz.substr(5,9).concat(mrz.substring(15,sep));
		} else {
			var docno = mrz.substr(5, 10);
		}
	}
	return docno;
}


/**
 * Calculate the hash over document number, date of birth and date of expiration from 2 or 3 line MRZ
 *
 * <pre>
 * 2 line MRZ of Silver Data Set
 *   P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<
 *   L898902C<3UTO6908061F9406236ZE184226B<<<<<14
 *   '-DocNo--'   '-DoB-' '-DoE-'
 *
 * 3 line MRZ of Silver Data Set
 *   I<UTOL898902C<3<<<<<<<<<<<<<<<
 *        '-DocNo--'
 *   6908061F9406236UTO<<<<<<<<<<<1
 *   '-DoB-' '-DoE-'
 *   ERIKSON<<ANNA<MARIA<<<<<<<<<<<
 * </pre>
 *
 * @param {String} mrz 2 line or 3 line machine readable zone
 * @type ByteString
 * @return the SHA-1 hash over the concatenation of document number, date of birth and date of expiration
 */
EAC20.prototype.hashMRZ = function(mrz) {
	var hash_input = new ByteString(EAC20.decodeDocumentNumber(mrz), ASCII);
	// Convert to byte string
	var strbin = new ByteString(mrz, ASCII);

	if (strbin.length == 88) {			// 2 line MRZ
		// Extract Date of Birth and Date of Expiration
		hash_input = hash_input.concat(strbin.bytes(57, 7));
		hash_input = hash_input.concat(strbin.bytes(65, 7));
	} else if (strbin.length == 90) {		// 3 line MRZ
		// Extract Date of Birth and Date of Expiration
		hash_input = hash_input.concat(strbin.bytes(30, 7));
		hash_input = hash_input.concat(strbin.bytes(38, 7));
	} else {
		throw new GPError("EAC20", GPError.INVALID_DATA, strbin.length, "MRZ must be either 88 or 90 character long");
	}

	this.log("Hash Input : " + hash_input.toString(ASCII));
	var mrz_hash = this.crypto.digest(Crypto.SHA_1, hash_input);
	this.log("MRZ Hash : " + mrz_hash);
	return mrz_hash;
}



/**
 * Calculate the Basic Access Control (BAC) key from the MRZ
 *
 * @param {String} mrz 2 line or 3 line machine readable zone
 * @param {Number} keyno Number of key to calculate (1 for Kenc and 2 for Kmac)
 * @type Key
 * @returns the key object
 */
EAC20.prototype.calculateBACKey = function(mrz, keyno) {
	var mrz_hash = this.hashMRZ(mrz);

	// Extract first 16 byte and append 00000001 or 00000002
	var bb = new ByteBuffer(mrz_hash.bytes(0, 16));
	bb.append(new ByteString("000000", HEX));
	bb.append(keyno);

	// Hash again to calculate key value
	var keyval = this.crypto.digest(Crypto.SHA_1, bb.toByteString());
	keyval = keyval.bytes(0, 16);
	this.log("Value of Key : " + keyval);
	var key = new Key();
	key.setComponent(Key.DES, keyval);

	return key;
}



/**
 * Perform BAC using the provided Kenc and Kmac values.
 *
 * @param {Key} kenc the key Kenc
 * @param {Key} kmac the key Kmac
 */
EAC20.prototype.performBACWithMRZ = function(mrz) {
	this.setIDPICC(new ByteString(EAC20.decodeDocumentNumber(mrz), ASCII));

	var kenc = this.calculateBACKey(mrz, 1);
	var kmac = this.calculateBACKey(mrz, 2);

	this.performBAC(kenc, kmac);
}



/**
 * Perform BAC using the provided Kenc and Kmac values.
 *
 * @param {Key} kenc the key Kenc
 * @param {Key} kmac the key Kmac
 */
EAC20.prototype.performBAC = function(kenc, kmac) {

	// GET CHALLENGE
	var rndicc = this.card.sendApdu(0x00, 0x84, 0x00, 0x00, 0x08, [0x9000]);

	var rndifd = this.crypto.generateRandom(8);
	var kifd = this.crypto.generateRandom(16);

	var plain = rndifd.concat(rndicc).concat(kifd);

	var cryptogram = this.crypto.encrypt(kenc, Crypto.DES_CBC, plain, new ByteString("0000000000000000", HEX));

	var mac = this.crypto.sign(kmac, Crypto.DES_MAC_EMV, cryptogram.pad(Crypto.ISO9797_METHOD_2));

	// EXTERNAL AUTHENTICATE
	var autresp = this.card.sendApdu(0x00, 0x82, 0x00, 0x00, cryptogram.concat(mac), 0);

	if (this.card.SW != 0x9000) {
		this.log("Mutual authenticate failed with " + this.card.SW.toString(16) + " \"" + this.card.SWMSG + "\". MRZ correct ?");
		throw new GPError("EAC20", GPError.CRYPTO_FAILED, 0, "Card did not accept MAC in BAC establishment");
	}

	cryptogram = autresp.bytes(0, 32);
	mac = autresp.bytes(32, 8);

	if (!this.crypto.verify(kmac, Crypto.DES_MAC_EMV, cryptogram.pad(Crypto.ISO9797_METHOD_2), mac)) {
		throw new GPError("EAC20", GPError.CRYPTO_FAILED, 0, "Card MAC did not verify correctly");
	}

	plain = this.crypto.decrypt(kenc, Crypto.DES_CBC, cryptogram, new ByteString("0000000000000000", HEX));

	if (!plain.bytes(0, 8).equals(rndicc)) {
		throw new GPError("EAC20", GPError.CRYPTO_FAILED, 0, "Card response does not contain matching RND.ICC");
	}

	if (!plain.bytes(8, 8).equals(rndifd)) {
		throw new GPError("EAC20", GPError.CRYPTO_FAILED, 0, "Card response does not contain matching RND.IFD");
	}

	var kicc = plain.bytes(16, 16);
	keyinp = kicc.xor(kifd);

	var hashin = keyinp.concat(new ByteString("00000001", HEX));
	var kencval = this.crypto.digest(Crypto.SHA_1, hashin);
	kencval = kencval.bytes(0, 16);
	var kenc = new Key();
	kenc.setComponent(Key.DES, kencval);

	var hashin = keyinp.concat(new ByteString("00000002", HEX));
	var kmacval = this.crypto.digest(Crypto.SHA_1, hashin);
	kmacval = kmacval.bytes(0, 16);
	var kmac = new Key();
	kmac.setComponent(Key.DES, kmacval);

	var ssc = rndicc.bytes(4, 4).concat(rndifd.bytes(4, 4));

	this.sm = new IsoSecureChannel(this.crypto);
	this.sm.setEncKey(kenc);
	this.sm.setMacKey(kmac);
	this.sm.setSendSequenceCounter(ssc);

	this.card.setCredential(this.sm);
}



/**
 * Perform PACE using the indicated parameter set, the identified password, the password value and
 * an optional cardholder authentication template.
 *
 * <p>This method supports PACE version 1 and 2. For version 2, parameterId with a value between 0 and 31 denotes
 * a standardized domain parameter as defined in TR-03110 2.04 or later.</p>
 *
 * @param {Number} parameterId the identifier for the PACEInfo and PACEDomainParameterInfo from EF.CardInfo. Use 0 for
 *                             the default.
 * @param {Number} pwdid one of EAC20.ID_MRZ, EAC20.ID_CAN, EAC20.ID_PIN, EAC20.ID_PUK
 * @param {ByteString} pwd the PACE password or PACE key
 * @param {ASN1} chat the CHAT data object with tag 7F4C or null
 * @param {ASN1} certExt the certificate extensions data object with tag 65 or null
 */
EAC20.prototype.performPACE = function(parameterId, pwdid, pwd, chat, certExt) {

	var paceinfo = this.PACEInfos[parameterId];
	if (typeof(paceinfo) == "undefined") {
		throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Unknown parameterId " + parameterId + " for PACEInfo");
	}

	var domainParameter;

	// Used for Chip Authentication
	this.includeDPinAuthToken = !(paceinfo.version >= 2);

	if ((paceinfo.version == 1) || ((paceinfo.version == 2) && (parameterId > 31))) {
		var pacedp = this.PACEDPs[parameterId];
		if (typeof(pacedp) == "undefined") {
			throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Unknown parameterId " + parameterId + " for PACEDomainParameterInfo");
		}
		domainParameter = pacedp.domainParameter;
	} else {
		domainParameter = PACEDomainParameterInfo.getStandardizedDomainParameter(parameterId);
	}

	if (!(pwd instanceof ByteString) && !(pwd instanceof Key)) {
		throw new GPError("EAC20", GPError.INVALID_TYPE, 0, "Argument pwd must be of type ByteString or Key");
	}

	if ((chat != null) && !(chat instanceof ASN1)) {
		throw new GPError("EAC20", GPError.INVALID_TYPE, 0, "Argument chat must be of type ASN1");
	}


	var pace = new PACE(this.crypto, paceinfo.protocol, domainParameter, paceinfo.version);
	if (pwd instanceof(ByteString)) {
		pace.setPassword(pwd);
	} else {
		pace.setPACEKey(pwd);
	}

	// Manage SE
	var crt = new ByteBuffer();
	crt.append((new ASN1(0x80, paceinfo.protocol)).getBytes());
	crt.append(new ByteString("8301", HEX));
	crt.append(pwdid);
	if (chat != null) {
		crt.append(chat.getBytes());
	}
	if (certExt != null) {
		crt.append(certExt.getBytes());
	}

	this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x22, 0xC1, 0xA4, crt.toByteString(), [0x9000, 0x63C2, 0x63C1 ]);

	// General Authenticate
	var dado = new ASN1(0x7C);

	dadobin = this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO|Card.RENC, 0x10, 0x86, 0x00, 0x00, dado.getBytes(), 0, [0x9000]);

	var dado = new ASN1(dadobin);
	assert(dado.tag == 0x7C);
	assert(dado.elements == 1);
	var encryptedNonceDO = dado.get(0);
	assert(encryptedNonceDO.tag == 0x80);
	var encryptedNonce = encryptedNonceDO.value;

	this.log("Encrypted nonce: " + encryptedNonce);

	pace.decryptNonce(encryptedNonce);

	var mappingData = pace.getMappingData();

	var dado = new ASN1(0x7C, new ASN1(0x81, mappingData));

	dadobin = this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO|Card.RENC, 0x10, 0x86, 0x00, 0x00, dado.getBytes(), 0, [0x9000]);

	var dado = new ASN1(dadobin);
	assert(dado.tag == 0x7C);
	assert(dado.elements == 1);
	var mappingDataDO = dado.get(0);
	assert(mappingDataDO.tag == 0x82);

	pace.performMapping(mappingDataDO.value);

	var ephemeralPublicKeyIfd = pace.getEphemeralPublicKey();

	var dado = new ASN1(0x7C, new ASN1(0x83, ephemeralPublicKeyIfd));

	dadobin = this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO|Card.RENC, 0x10, 0x86, 0x00, 0x00, dado.getBytes(), 0, [0x9000]);

	var dado = new ASN1(dadobin);
	assert(dado.tag == 0x7C);
	assert(dado.elements == 1);
	var ephemeralPublicKeyICC = dado.get(0);
	assert(ephemeralPublicKeyICC.tag == 0x84);

	this.idPICC = ephemeralPublicKeyICC.value.bytes(1, (ephemeralPublicKeyICC.value.length - 1) >> 1);
	this.log("ID_PICC : " + this.idPICC);

	pace.performKeyAgreement(ephemeralPublicKeyICC.value);


	var authToken = pace.calculateAuthenticationToken();

	var dado = new ASN1(0x7C, new ASN1(0x85, authToken));

	dadobin = this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO|Card.RENC, 0x00, 0x86, 0x00, 0x00, dado.getBytes(), 0, [0x9000, 0x63C2, 0x63C1, 0x63C0, 0x6283 ]);

	if ((this.card.SW & 0xFFF0) == 0x63C0) {
		throw new GPError("EAC20", GPError.DEVICE_ERROR, this.card.SW, "Authentication failed: " + (this.card.SW & 0xF) + " tries left");
	}

	if (this.card.SW == 0x6300) {
		throw new GPError("EAC20", GPError.DEVICE_ERROR, this.card.SW, "Authentication failed");
	}

	var dado = new ASN1(dadobin);
	this.log(dado);
	assert(dado.tag == 0x7C);
	assert(dado.elements >= 1);
	assert(dado.elements <= 3);
	var authTokenDO = dado.get(0);
	assert(authTokenDO.tag == 0x86);

	if (dado.elements > 1) {
		var cardo = dado.get(1);
		assert(cardo.tag == 0x87);
		this.lastCAR = new PublicKeyReference(cardo.value);
	}

	if (dado.elements > 2) {
		var cardo = dado.get(2);
		assert(cardo.tag == 0x88);
		this.previousCAR = new PublicKeyReference(cardo.value);
	}

	var sm = null;

	if (pace.verifyAuthenticationToken(authTokenDO.value)) {
		this.log("Authentication token valid");

		var symalgo = pace.getSymmetricAlgorithm();

		if (symalgo == Key.AES) {
			sm = new IsoSecureChannel(this.crypto, IsoSecureChannel.SSC_SYNC_ENC_POLICY);
			sm.setEncKey(pace.kenc);
			sm.setMacKey(pace.kmac);
			sm.setMACSendSequenceCounter(new ByteString("00000000000000000000000000000000", HEX));
		} else {
			sm = new IsoSecureChannel(this.crypto);
			sm.setEncKey(pace.kenc);
			sm.setMacKey(pace.kmac);
			sm.setMACSendSequenceCounter(new ByteString("0000000000000000", HEX));
		}
		this.card.setCredential(sm);
	}
	this.sm = sm;
}



/**
 * Return the trust anchor's CAR as indicated by the card in the PACE protocol
 *
 * @param {boolean} previous, true to return the previous CAR, if any
 * @return the CertificationAuthorityReference (CAR)
 * @type PublicKeyReference
 */
EAC20.prototype.getTrustAnchorCAR = function(previous) {
	if (previous) {
		return this.previousCAR;
	} else {
		return this.lastCAR;
	}
}



/**
 * Submit a list of certificates to the card for verification
 *
 * @param {CVC[]} cvcchain the list of certificates, starting with link certificates, DVCA certificate and terminal certificate.
 */
EAC20.prototype.verifyCertificateChain = function(cvcchain) {

	var i = cvcchain.length;
	do {
		i--;
		var cvc = cvcchain[i];

		var car = cvc.getCAR().getBytes();

		var pukrefdo = new ASN1(0x83, car);
		var pukref = pukrefdo.getBytes();

		this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x22, 0x81, 0xB6, pukref);
	} while ((this.card.SW != 0x9000) && (i > 0));

	for (; i < cvcchain.length; i++) {
		var cvc = cvcchain[i];

		var car = cvc.getCAR().getBytes();

		var pukrefdo = new ASN1(0x83, car);
		var pukref = pukrefdo.getBytes();

		this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x22, 0x81, 0xB6, pukref, [0x9000]);

		// Extract value of 7F21
		var tl = new TLVList(cvc.getBytes(), TLV.EMV);
		var t = tl.index(0);
		var v = t.getValue();

		this.log("Certificate: ");
		this.log(new ASN1(v));
		this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x2A, 0x00, 0xBE, v, [0x9000]);
	}

	this.terminalCert = cvcchain[cvcchain.length - 1];
}



/**
 * Set the ID_PICC used for terminal authentication in EAC 1.11
 *
 * @param {ByteString} id
 * @param {Key} kmac the key Kmac
 */
EAC20.prototype.setIDPICC = function(idPICC) {
	this.idPICC = idPICC;
}



/**
 * Perform terminal authentication using a given terminal key
 *
 * @param {Key} termkey the terminal private key
 * @param {ByteString} auxdata auxiliary data (tag '67') to be included in terminal authentication
 * @param {Crypto} crypto optional alternative crypto provider (e.g. for key in SmartCard-HSM)
 */
EAC20.prototype.performTerminalAuthentication = function(termkey, auxdata, crypto) {
	var signatureInput = this.performTerminalAuthenticationSetup(auxdata);

	if (crypto == undefined) {
		var crypto = this.crypto;
	}
	var signature = crypto.sign(termkey, CVC.getSignatureMech(this.terminalCert.getPublicKeyOID()), signatureInput);

	var keysize = termkey.getSize();
	if (keysize < 0) {
		keysize = termkey.getComponent(Key.ECC_P).length;
	} else {
		keysize >>= 3;
	}

	signature = CVC.unwrapSignature(signature, keysize);
	this.log("Signature (Encoded):");
	this.log(signature);

	this.performTerminalAuthenticationFinal(signature);
}



/**
 * Prepare terminal authentication by setting the required security environment
 *
 * @param {ByteString} auxdata auxiliary data (tag '67') to be included in terminal authentication
 */
EAC20.prototype.performTerminalAuthenticationSetup = function(auxdata) {

	var idIFD = this.ca.getCompressedPublicKey();

	var bb = new ByteBuffer();

	if (typeof(this.cakeyId) != "undefined") {
		bb.append(new ASN1(0x80, this.terminalCert.getPublicKeyOID()).getBytes());
	}

	bb.append(new ASN1(0x83, this.terminalCert.getCHR().getBytes()).getBytes());

	if (typeof(this.cakeyId) != "undefined") {
		if (auxdata) {
			bb.append(auxdata);
		}
		bb.append(new ASN1(0x91, idIFD).getBytes());
	}

	var msedata = bb.toByteString();
	this.log("Manage SE data:");
	this.log(msedata);
	this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x22, 0x81, 0xA4, msedata, [0x9000]);

	var challenge = this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO|Card.RENC, 0x00, 0x84, 0x00, 0x00, 8, [0x9000]);

	var bb = new ByteBuffer();
	bb.append(this.idPICC);
	bb.append(challenge);
	bb.append(idIFD);
	if (auxdata) {
		bb.append(auxdata);
	}
	var signatureInput = bb.toByteString();
	this.log("Signature Input:");
	this.log(signatureInput);
	return signatureInput;
}



/**
 * Complete terminal authentication by submitting the signature to the card
 *
 * @param {ByteString} signature the signature as concatenation of r and s
 */
EAC20.prototype.performTerminalAuthenticationFinal = function(signature) {
	this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x82, 0x00, 0x00, signature, [0x9000]);
}



/**
 * Perform chip authentication in version 1 and establish a secure channel
 *
 * @return true, if chip authentication was successfull
 * @type boolean
 */
EAC20.prototype.performChipAuthenticationV1 = function(keyid) {
	this.log("performChipAuthenticationV1() called");

	if (typeof(keyid) == "undefined") {
		keyid = 0;
	}

	var cainfo = this.CAInfos[keyid];
	if (typeof(cainfo) == "undefined") {
		throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Unknown keyId " + keyid + " for ChipAuthenticationInfo");
	}

	var capuk = this.CAPublicKeys[keyid];
	if (typeof(capuk) == "undefined") {
		throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Unknown keyId " + keyid + " for ChipAuthenticationPublicKeyInfo");
	}

	var domainParameter = capuk.domainParameter;

	this.ca = new ChipAuthentication(this.crypto, cainfo.protocol, domainParameter);

	this.ca.generateEphemeralCAKeyPair();

	if (cainfo.protocol.equals(ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC)) {
		var bb = new ByteBuffer();
		bb.append(new ASN1(0x91, this.ca.getEphemeralPublicKey()).getBytes());

		if (typeof(cainfo.keyId) != "undefined") {
			bb.append(new ByteString("8401", HEX));
			bb.append(cainfo.keyId);
		}

		var msedata = bb.toByteString();
		this.log("Manage SE data:");
		this.log(msedata);
		this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x22, 0x41, 0xA6, msedata, [0x9000]);

		this.ca.performKeyAgreement(capuk.publicKey);

		this.log("Create DES based secure channel");
		var sm = new IsoSecureChannel(this.crypto);
		sm.setEncKey(this.ca.kenc);
		sm.setMacKey(this.ca.kmac);
		sm.setSendSequenceCounter(new ByteString("0000000000000000", HEX));
	} else {
		var bb = new ByteBuffer();
		bb.append(new ASN1(0x80, cainfo.protocol).getBytes());

		if (typeof(cainfo.keyId) != "undefined") {
			bb.append(new ByteString("8401", HEX));
			bb.append(cainfo.keyId);
		}

		var msedata = bb.toByteString();
		this.log("Manage SE data:");
		this.log(msedata);
		this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x22, 0x41, 0xA4, msedata, [0x9000]);

		var ephemeralPublicKeyIfd = this.ca.getEphemeralPublicKey();

		var dado = new ASN1(0x7C, new ASN1(0x80, ephemeralPublicKeyIfd));

		this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO|Card.RENC, 0x00, 0x86, 0x00, 0x00, dado.getBytes(), 0, [0x9000]);

		this.ca.performKeyAgreement(capuk.publicKey);

		this.log("Create AES based secure channel");
		var sm = new IsoSecureChannel(this.crypto, IsoSecureChannel.SSC_SYNC_ENC_POLICY);
		sm.setEncKey(this.ca.kenc);
		sm.setMacKey(this.ca.kmac);
		sm.setMACSendSequenceCounter(new ByteString("00000000000000000000000000000000", HEX));
	}

	this.card.setCredential(sm);
	this.sm = sm;
}



/**
 * Prepare chip authentication by generating the ephemeral key pair
 *
 * @param {Number} keyId the key identifier to be used for chip authentication
 */
EAC20.prototype.prepareChipAuthentication = function(keyId) {
	this.log("prepareChipAuthentication() called");

	this.cakeyId = keyId;

	var cainfo = this.CAInfos[keyId];
	if (typeof(cainfo) == "undefined") {
		throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Unknown keyId " + keyId + " for ChipAuthenticationInfo");
	}

	var cadp = this.CADPs[keyId];
	if (typeof(cadp) == "undefined") {
		throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Unknown keyId " + keyId + " for ChipAuthenticationDomainParameterInfo");
	}
	this.cadp = cadp;

	this.ca = new ChipAuthentication(this.crypto, cainfo.protocol, cadp.domainParameter);

	this.ca.includeDPinAuthToken = this.includeDPinAuthToken;
	this.ca.generateEphemeralCAKeyPair();
}



/**
 * Perform chip authentication in version 2 and establish a secure channel
 *
 * @return true, if chip authentication was successfull
 * @type boolean
 */
EAC20.prototype.performChipAuthenticationV2 = function() {
	this.log("performChipAuthenticationV2() called");

	var cainfo = this.CAInfos[this.cakeyId];
	if (typeof(cainfo) == "undefined") {
		throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Unknown keyId " + this.cakeyId + " for ChipAuthenticationInfo");
	}

	if (this.ca.algo != cainfo.protocol) {
		this.log("Special handling for ChipAuthenticationInfo in EF.CardSecurity overwriting ChipAuthenticationInfo in EF.CardAccess");
		this.log("Protocol in EF.CardAccess: " + this.ca.algo);
		this.log("Protocol is EF.CardSecurity: " + cainfo.protocol);
		this.ca.algo = cainfo.protocol;
	}

	var capuk = this.CAPublicKeys[this.cakeyId];
	if (typeof(capuk) == "undefined") {
		throw new GPError("EAC20", GPError.INVALID_DATA, 0, "Unknown keyId " + this.cakeyId + " for ChipAuthenticationPublicKeyInfo");
	}

	var bb = new ByteBuffer();
	bb.append(new ASN1(0x80, cainfo.protocol).getBytes());

	if (typeof(cainfo.keyId) != "undefined") {
		bb.append(new ByteString("8401", HEX));
		bb.append(cainfo.keyId);
	}

	var msedata = bb.toByteString();
	this.log("Manage SE data:");
	this.log(msedata);
	this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x22, 0x41, 0xA4, msedata, [0x9000]);

	var ephemeralPublicKeyIfd = this.ca.getEphemeralPublicKey();

	var dado = new ASN1(0x7C, new ASN1(0x80, ephemeralPublicKeyIfd));

	var dadobin = this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO|Card.RENC, 0x00, 0x86, 0x00, 0x00, dado.getBytes(), 0, [0x9000]);

	this.log(dadobin);

	var dado = new ASN1(dadobin);
	assert(dado.tag == 0x7C);
	assert(dado.elements == 2);
	var nonceDO = dado.get(0);
	assert(nonceDO.tag == 0x81);
	var nonce = nonceDO.value;

	var authTokenDO = dado.get(1);
	assert(authTokenDO.tag == 0x82);
	var authToken = authTokenDO.value;

	this.ca.performKeyAgreement(capuk.publicKey, nonce);

	var result = this.ca.verifyAuthenticationToken(authToken);

	if (result) {
		this.log("Authentication token valid");

		if (this.ca.algo.equals(ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC)) {
			this.log("Create DES based secure channel");
			var sm = new IsoSecureChannel(this.crypto);
			sm.setEncKey(this.ca.kenc);
			sm.setMacKey(this.ca.kmac);
			sm.setMACSendSequenceCounter(new ByteString("0000000000000000", HEX));
		} else {
			this.log("Create AES based secure channel");
			var sm = new IsoSecureChannel(this.crypto, IsoSecureChannel.SSC_SYNC_ENC_POLICY);
			sm.setEncKey(this.ca.kenc);
			sm.setMacKey(this.ca.kmac);
			sm.setMACSendSequenceCounter(new ByteString("00000000000000000000000000000000", HEX));
		}
		this.card.setCredential(sm);
		this.sm = sm;
	} else {
		this.log("Authentication token invalid");
	}

	return result;
}



/**
 * Verify authenticated auxiliary data
 *
 * @param {ByteString} oid the object identifier for the auxiliary data provided during terminal authentication
 * @return true, if auxiliary data was verified
 * @type boolean
 */
EAC20.prototype.verifyAuxiliaryData = function(oid) {
	var o = new ASN1(ASN1.OBJECT_IDENTIFIER, oid);
	this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x20, 0x80, 0x00, o.getBytes(), [0x9000,0x6300]);
	return this.card.SW == 0x9000;
}



/**
 * Perform chip authentication and establish a secure channel
 *
 * @param {Number} keyid the key identifier (only required for ChipAuthentication in version 1)
 * @return true, if chip authentication was successfull
 * @type boolean
 */
EAC20.prototype.performChipAuthentication = function(keyid) {
	if (typeof(this.cakeyId) != "undefined") {
		return this.performChipAuthenticationV2();
	} else {
		return this.performChipAuthenticationV1(keyid);
	}
}



/**
 * Perform restricted identification
 *
 * @param {Number} keyId restricted identification key identifier
 * @param {ByteString} sectorPublicKey the sector public key data
 * @param {Number} sectorPublicKeyIndex optional argument that allows to select a specific sector public key in the terminal certificate
 * @return the sector specific identifier
 * @type ByteString
 */
EAC20.prototype.performRestrictedIdentification = function(keyId, sectorPublicKey, sectorPublicKeyIndex) {
	var bb = new ByteBuffer();
	bb.append(new ASN1(0x80, new ByteString("id-RI-ECDH-SHA-256", OID)).getBytes());

	bb.append(new ByteString("8401", HEX));
	bb.append(keyId);

	var msedata = bb.toByteString();
	this.log("Manage SE data:");
	this.log(msedata);
	this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x22, 0x41, 0xA4, msedata, [0x9000]);

	var tag = 0xA0;
	if (sectorPublicKeyIndex) {
		tag = 0xA0 + (sectorPublicKeyIndex << 1);
	}

	// ToDo change to sectorPublicKey.value
	var dado = new ASN1(0x7C, new ASN1(tag, sectorPublicKey.bytes(5)));

	this.log("GA Input: " + dado.getBytes());

	var dadobin = this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO|Card.RENC, 0x00, 0x86, 0x00, 0x00, dado.getBytes(), 0, [0x9000]);

	this.log(dadobin);

	var dado = new ASN1(dadobin);
	assert(dado.tag == 0x7C);
	assert(dado.elements == 1);
	var nonceDO = dado.get(0);
	assert((nonceDO.tag == 0x81) || (nonceDO.tag == 0x83));
	var sectorId = nonceDO.value;

	this.log("Sector specific identifier: " + sectorId);
	return sectorId;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview EAC2CVCertificateGenerator - Simple CV certificate generator class
 * based on "Advanced Security Mechanisms for Machine Readable Travel Documents", Version 2.0
 */

// Imports
var CVC = require('scsh/eac/CVC').CVC;
var PublicKeyReference = require('scsh/eac/PublicKeyReference').PublicKeyReference;



/**
 * Define a generator object for CV certificates
 *
 * @class Class implementing a generator for CV certificates according to EAC 1.1 and EAC 2.0 specifications.
 *
 * @constructor
 * @param {Crypto} crypto the crypto provider to be used
 */
function EAC2CVCertificateGenerator(crypto) {
	this.crypto = crypto;
}

exports.EAC2CVCertificateGenerator = EAC2CVCertificateGenerator;


/**
 * Convert x/y coordinates to uncompressed format
 *
 * @param {ByteString} x the x-coordinate of the point
 * @param {ByteString} y the y-coordinate of the point
 * @return the point in uncompressed format
 * @type ByteString
 */
EAC2CVCertificateGenerator.encodeUncompressedECPoint = function(x,y) {

	var bb = new ByteBuffer();

	// uncompressed encoding
	bb.append(new ByteString("04", HEX));
	bb.append(new ByteString(x, HEX));
	bb.append(new ByteString(y, HEX));

	return bb.toByteString();
}



/**
 * Decode x/y coordinates from uncompressed format
 *
 * @param {ByteString} uncompressedPoint the uncompressed point
 * @return the x-/y-coordinate of the point
 * @type ByteString
 */
EAC2CVCertificateGenerator.decodeUncompressedECPoint = function(uncompressedPoint) {

	// Determine the size of the coordinates ignoring the indicator byte '04'
	var length = uncompressedPoint.length - 1;

	var sizeOfCoordinate = length / 2;

	var xValue = uncompressedPoint.bytes(1, sizeOfCoordinate);
	var yValue = uncompressedPoint.bytes(1 + sizeOfCoordinate, sizeOfCoordinate);

	return { x:xValue, y:yValue };
}



/**
 * Convert integer to fixed length string with leading zeros.
 *
 * @private
 * @param {Number} value the value to convert to a string.
 * @param {Number} digits the number of digits in output string. Must be <= 20.
 * @return the 0-padded string
 * @type String
 */
EAC2CVCertificateGenerator.itos = function(value, digits) {
	if (digits > 20) {
		throw new Error("Digits must be <= 20");
	}
	var str = "" + value;
	str = "0000000000000000000".substr(19 - (digits - str.length)).concat(str);
	return str;
}



/**
 * Convert date to string with format YYMMDD.
 *
 * @param {Date} d the date object.
 * @return the date/time string.
 * @type String
 */
EAC2CVCertificateGenerator.dtos = function(d) {
	var s = EAC2CVCertificateGenerator.itos(d.getFullYear() % 100, 2) +
			EAC2CVCertificateGenerator.itos(d.getMonth() + 1, 2) +
			EAC2CVCertificateGenerator.itos(d.getDate(), 2);
	return s;
}



/**
 * Set the profile identifier
 *
 * @param {Number} profileID the profile identifier
 */
EAC2CVCertificateGenerator.prototype.setProfileIdentifier = function(profileID) {
	this.profileIdentifier = profileID;
}



/**
 * Set the certification authority reference
 *
 * @param {String} CAR the CAR value
 * @param {ByteString} CAR the CAR value
 * @param {PublicKeyReference} CAR the CAR value
 */
EAC2CVCertificateGenerator.prototype.setCAR = function(CAR) {
	if (CAR instanceof ByteString) {
		this.CAR = CAR;
	} else if (CAR instanceof PublicKeyReference) {
		this.CAR = CAR.getBytes();
	} else {
		this.CAR = new ByteString(CAR.toString(), ASCII);
	}
}



/**
 * Set the certificate holder reference
 *
 * @param {String} CHR the CHR value
 * @param {ByteString} CHR the CHR value
 * @param {PublicKeyReference} CHR the CHR value
 */
EAC2CVCertificateGenerator.prototype.setCHR = function(CHR) {
	if (CHR instanceof ByteString) {
		this.CHR = CHR;
	} else if (CHR instanceof PublicKeyReference) {
		this.CHR = CHR.getBytes();
	} else {
		this.CHR = new ByteString(CHR.toString(), ASCII);
	}
}



/**
 * Set the effective date
 *
 * @param {String} effectiveDate the effective date in the format YYMMDD
 * @param {Date} effectiveDate the effective date as Date object
 */
EAC2CVCertificateGenerator.prototype.setEffectiveDate = function(effectiveDate) {
	if (effectiveDate instanceof Date) {
		this.effectiveDate = EAC2CVCertificateGenerator.dtos(effectiveDate);
	} else {
		this.effectiveDate = effectiveDate;
	}
}



/**
 * Set the expiry date
 *
 * @param {String} expiryDate the expiry date in the format YYMMDD
 * @param {Date} expiryDate the expiry date as Date object
 */
EAC2CVCertificateGenerator.prototype.setExpiryDate = function(expiryDate) {
	if (expiryDate instanceof Date) {
		this.expiryDate = EAC2CVCertificateGenerator.dtos(expiryDate);
	} else {
		this.expiryDate = expiryDate;
	}
}



/**
 * Set the object identifier of the authorization template for the generated certificate
 *
 * @param {ByteString} oid the object identifier for the chat
 */
EAC2CVCertificateGenerator.prototype.setChatOID = function(oid) {
	this.chatOID = oid;
}



/**
 * Set the authorization level of the authorization template for the generated certificate
 *
 * @param {ByteString} authLevel the encoded authorization level
 */
EAC2CVCertificateGenerator.prototype.setChatAuthorizationLevel = function(authLevel) {
	this.chatAuthorizationLevel = authLevel;
}



/**
 * Set the algorithm identifier for terminal authentication
 *
 * @param {ByteString} oid the object identifier as specified in appendix A.6.4
 */
EAC2CVCertificateGenerator.prototype.setTAAlgorithmIdentifier = function(oid) {
	this.taOID = oid;
}



/**
 * Set some additional extensions
 *
 * @param {Array of ASN.1 objects} extensions array containing the ASN.1 encoded extensions for the certificate
 */
EAC2CVCertificateGenerator.prototype.setExtensions = function(extensions) {
	this.extensions = extensions;
}



/**
 * Set the public key to be included in the certificate
 *
 * @param {Key} publicKey the public key object to be certified
 */
EAC2CVCertificateGenerator.prototype.setPublicKey = function(publicKey) {
	this.publicKey = publicKey;
}



/**
 * Set whether to include domain parameters in the certificate or not
 *
 * @param {Boolean} value the flag indicator
 */
EAC2CVCertificateGenerator.prototype.setIncludeDomainParameters = function(value) {
	this.includeDomainParameters = value;
}



/**
 * Internal functions for the generation of a certificate
 * @private
 */
EAC2CVCertificateGenerator.prototype.getCAR = function() {
	var t = new ASN1("Certification Authority Reference", 0x42, this.CAR);
	return t;
}



/**
 * Internal functions for the generation of a certificate
 * @private
 */
EAC2CVCertificateGenerator.prototype.getCHR = function() {
	var t = new ASN1("Certification Holder Reference", 0x5F20, this.CHR);
	return t;
}



/**
 * Internal functions for the generation of a certificate
 * @private
 */
EAC2CVCertificateGenerator.convertDate = function(date) {

	var temp = new ByteString(date, ASCII);
	var bb = new ByteBuffer();
	var singleByte;

	for (var i = 0; i < temp.length; i++) {
		bb.append(temp.byteAt(i) - 0x30);
	}

	return bb.toByteString();
}



/**
 * Internal functions for the generation of a certificate
 * @private
 */
EAC2CVCertificateGenerator.prototype.getEffectiveDate = function() {
	var t = new ASN1("Certificate Effective Date", 0x5F25,
			EAC2CVCertificateGenerator.convertDate(this.effectiveDate));
	return t;
}



/**
 * Internal functions for the generation of a certificate
 * @private
 */
EAC2CVCertificateGenerator.prototype.getExpiryDate = function() {
	var t = new ASN1("Certificate Expiration Date", 0x5F24,
			EAC2CVCertificateGenerator.convertDate(this.expiryDate));
	return t;
}



/**
 * Internal functions for the generation of a certificate
 * @private
 */
EAC2CVCertificateGenerator.prototype.getCHAT = function() {
	var t = new ASN1("Certificate Holder Authorization Template", 0x7F4C);

	var oid = new ASN1("Object Identifier", ASN1.OBJECT_IDENTIFIER, this.chatOID);
	var authLevel = new ASN1("Authorization Level", 0x53, this.chatAuthorizationLevel);

	t.add(oid);
	t.add(authLevel);

	return t;
}



/**
 * Strips leading zeros of a ByteString
 *
 * @param {ByteString} value the ByteString value
 * @return the stripped ByteString object, may be an empty ByteString
 * @type ByteString
 */
EAC2CVCertificateGenerator.prototype.stripLeadingZeros = function(value) {
	var i = 0;
	for (; (i < value.length) && (value.byteAt(i) == 0); i++);

	return value.right(value.length - i);
}



/**
 * Get the encoded public key including domain parameters
 *
 * @private
 */
EAC2CVCertificateGenerator.prototype.getPublicKey = function() {

	var t = new ASN1("Public Key", 0x7F49);
	t.add(new ASN1("Object Identifier", 0x06, this.taOID));

	if (typeof(this.publicKey.getComponent(Key.ECC_P)) != "undefined") {
		if (this.includeDomainParameters == true) {

			t.add(new ASN1("Prime Modulus", 0x81, this.stripLeadingZeros(this.publicKey.getComponent(Key.ECC_P))));
			t.add(new ASN1("First coefficient a", 0x82, this.stripLeadingZeros(this.publicKey.getComponent(Key.ECC_A))));
			t.add(new ASN1("Second coefficient b", 0x83, this.stripLeadingZeros(this.publicKey.getComponent(Key.ECC_B))));

			t.add(new ASN1("Base Point G", 0x84, EAC2CVCertificateGenerator.encodeUncompressedECPoint(this.publicKey.getComponent(Key.ECC_GX), this.publicKey.getComponent(Key.ECC_GY))));

			t.add(new ASN1("Order of the base point", 0x85, this.stripLeadingZeros(this.publicKey.getComponent(Key.ECC_N))));
		}

		t.add(new ASN1("Public Point y", 0x86, EAC2CVCertificateGenerator.encodeUncompressedECPoint(this.publicKey.getComponent(Key.ECC_QX), this.publicKey.getComponent(Key.ECC_QY))));

		if (this.includeDomainParameters == true) {
			t.add(new ASN1("Cofactor f", 0x87, this.stripLeadingZeros(this.publicKey.getComponent(Key.ECC_H))));
		}
	} else {
		t.add(new ASN1("Composite Modulus", 0x81, this.stripLeadingZeros(this.publicKey.getComponent(Key.MODULUS))));
		t.add(new ASN1("Public Exponent", 0x82, this.stripLeadingZeros(this.publicKey.getComponent(Key.EXPONENT))));
	}

	return t;
}



/**
 * Internal functions for the generation of a certificate
 * @private
 */
EAC2CVCertificateGenerator.prototype.getProfileIdentifier = function() {

	var bb = new ByteBuffer();
	bb.append(this.profileIdentifier);

	var t = new ASN1("Certificate Profile Identifier", 0x5F29, bb.toByteString());
	return t;
}



/**
 * Internal functions for the generation of a certificate
 * @private
 */
EAC2CVCertificateGenerator.prototype.getExtensions = function() {
	var t = new ASN1("Certificate Extensions", 0x65);
	for (var i = 0; i < this.extensions.length; i++)
		t.add(this.extensions[i]);
	return t;
}



/**
 * Internal functions for the generation of a certificate
 * @private
 */
EAC2CVCertificateGenerator.prototype.getCertificateBody = function() {

	var t = new ASN1("Certificate Body", 0x7F4E);

	t.add(this.getProfileIdentifier());

	t.add(this.getCAR());

	t.add(this.getPublicKey());

	t.add(this.getCHR());

	t.add(this.getCHAT());

	t.add(this.getEffectiveDate());

	t.add(this.getExpiryDate());

	if (this.extensions) {
		t.add(this.getExtensions());
	}

	return t;
}



/**
 * Generate a certificate based on the parameter set using the setter methods.
 *
 * @param {Key} signingKey the key to be used for signing the certificate
 * @param {ByteString} taOID the object identifier associated with the signing key
 * @return the CVC certificate
 * @type CVC
 */
EAC2CVCertificateGenerator.prototype.generateCVCertificate = function(signingKey, outertaOID) {

	var certificate = new ASN1("CV Certificate", 0x7F21);

	var body = this.getCertificateBody();

	if (typeof(outertaOID) == "undefined") {
		outertaOID = this.taOID;
	}
	var mech = CVC.getSignatureMech(outertaOID);
	var signature = this.crypto.sign(signingKey, mech, body.getBytes());

	if (CVC.isECDSA(outertaOID)) {
		var keylen = (signingKey.getSize() + 7) >> 3;
		var signatureValue = new ASN1("Signature", 0x5F37, CVC.unwrapSignature(signature, keylen));
	} else {
		var signatureValue = new ASN1("Signature", 0x5F37, signature);
	}

	certificate.add(body);

	certificate.add(signatureValue);

	return new CVC(certificate);
}



EAC2CVCertificateGenerator.test = function() {
	var test = function(crypto, priKey, pubKey, taOID) {
		generator = new EAC2CVCertificateGenerator(crypto);

		var CAR = "decvca00000";
		generator.setCAR(CAR);

		var CHR = "decvca00000";
		generator.setCHR(CHR);

		generator.setEffectiveDate(new Date());

		var notAfter = "110225";
		generator.setExpiryDate(notAfter);

		var chatOID = "0.4.0.127.0.7.3.1.2.1"; // inspection system
		generator.setChatOID(new ByteString(chatOID, OID));

		var chatAuth = "E3"; // CVCA, read access to eID, DG3, DG4

		generator.setChatAuthorizationLevel(new ByteString(chatAuth, HEX));

		generator.setPublicKey(pubKey);

		var profileIdentifier = 0x00;

		generator.setProfileIdentifier(profileIdentifier);

		generator.setTAAlgorithmIdentifier(taOID);

		//var extensions = new Array();
		//extensions[0] = new ASN1("ext1", ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX));
		//extensions[1] = new ASN1("ext2", ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX));

		//generator.setExtensions(extensions);

		generator.setIncludeDomainParameters(true);

		var cvc = generator.generateCVCertificate(priKey, taOID);
		GPSystem.trace(cvc);

		GPSystem.trace(new ASN1(cvc.getBytes()));
		cvc.verifyWith(crypto, cvc.getPublicKey(), cvc.getPublicKeyOID());
	}

	var crypto = new Crypto();

	var priKey = new Key();
	var pubKey = new Key();
	priKey.setType(Key.PRIVATE);
	pubKey.setType(Key.PUBLIC);
	priKey.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256t1", OID));
	pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256t1", OID));
	crypto.generateKeyPair(Crypto.EC, pubKey, priKey);

	test(crypto, priKey, pubKey, new ByteString("id-TA-ECDSA-SHA-256", OID));


	var priKey = new Key();
	var pubKey = new Key();
	priKey.setType(Key.PRIVATE);
	pubKey.setType(Key.PUBLIC);
	priKey.setComponent(Key.ECC_CURVE_OID, new ByteString("secp521r1", OID));
	pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString("secp521r1", OID));
	crypto.generateKeyPair(Crypto.EC, pubKey, priKey);

	test(crypto, priKey, pubKey, new ByteString("id-TA-ECDSA-SHA-512", OID));


	var priKey = new Key();
	var pubKey = new Key();
	priKey.setType(Key.PRIVATE);
	pubKey.setType(Key.PUBLIC);
	pubKey.setSize(1024);
	crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);

	test(crypto, priKey, pubKey, new ByteString("id-TA-RSA-v1-5-SHA-256", OID));
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of Simple CV request generator based on
 * TR-03110 "Advanced Security Mechanisms for Machine Readable Travel Documents", Version 2.0
 *
 */

// Imports
var CVC = require('scsh/eac/CVC').CVC;
var PublicKeyReference = require('scsh/eac/PublicKeyReference').PublicKeyReference;



/**
 * Constructor for request generator
 *
 * @class Class implementing a generator for CVC requests
 *
 * @constructor
 * @param {Crypto} Crypto object to use
 */
function EAC2CVRequestGenerator(crypto) {
	this.crypto = crypto;
}

exports.EAC2CVRequestGenerator = EAC2CVRequestGenerator;



/*
 * Convert x/y coordinates to uncompressed format
 *
 * x/y - coordinates of EC point
 *
 * return ByteString containing compressed format
 *
 * TODO: Move to ECUtils
 */
EAC2CVRequestGenerator.encodeUncompressedECPoint = function(x, y) {

    var bb = new ByteBuffer();

    // uncompressed encoding
    bb.append(new ByteString("04", HEX));
    bb.append(new ByteString(x, HEX));
    bb.append(new ByteString(y, HEX));

    return bb.toByteString();
}



/**
 * Strips leading zeros of a ByteString
 *
 * @param {ByteString} value the ByteString value
 * @return the stripped ByteString object, may be an empty ByteString
 * @type ByteString
 *
 * TODO: Move to Utils
 */
EAC2CVRequestGenerator.stripLeadingZeros = function(value) {
	var i = 0;
	for (; (i < value.length) && (value.byteAt(i) == 0); i++);

	return value.right(value.length - i);
}



/**
 * Set the public key that should be encoded within the request
 *
 * @param {Key} publicKey Public Key
 */
EAC2CVRequestGenerator.prototype.setPublicKey = function(publicKey) {
	this.publicKey = publicKey;
}



/**
 * Set the certficate holder reference (CHR) for the request
 *
 * @param {String} chr CHR for the request
 */
EAC2CVRequestGenerator.prototype.setCHR = function(chr) {
	if (chr instanceof ByteString) {
		this.CHR = chr;
	} else if (chr instanceof PublicKeyReference) {
		this.CHR = chr.getBytes();
	} else {
		this.CHR = new ByteString(chr.toString(), ASCII);
	}
}



/**
 * Reset the current generator object
 *
 * TODO: Implement me
 */
EAC2CVRequestGenerator.prototype.reset = function() {
}



/**
 * Set the certificate profile identifier (CPI) for the request
 *
 * @param {Number} profileID CPI for the request
 */
EAC2CVRequestGenerator.prototype.setProfileIdentifier = function(profileID) {
	this.profileIdentifier = profileID;
}



/**
 * Set the certficate authorization reference (CAR) for the request
 *
 * The usage of this method is optional - if no CAR is set, there will be no
 * "inner" CAR included within the certficate request
 *
 * @param {String} car CAR for the request
 */
EAC2CVRequestGenerator.prototype.setCAR = function(car) {
	if (car instanceof ByteString) {
		this.CAR = car;
	} else if (car instanceof PublicKeyReference) {
		this.CAR = car.getBytes();
	} else {
		this.CAR = new ByteString(car.toString(), ASCII);
	}
}



/**
 * Set the extension values that should be included within the request
 *
 * @param {ByteString[]} extensions Array of DER-encoded extensions
 */
EAC2CVRequestGenerator.prototype.setExtensions = function(extensions) {
	this.extensions = extensions;
}



/**
 * Set the object identifier that should be included in the public key domain parameters
 *
 * @param {ByteString} oid Object identifier as specified in appendix A.6.4
 */
EAC2CVRequestGenerator.prototype.setTAAlgorithmIdentifier = function(oid) {
	this.taOID = oid;
}



/**
 * Get the CAR as ByteString object
 *
 * @private
 */
EAC2CVRequestGenerator.prototype.getCAR = function() {
	var t = new ASN1("Certification Authority Reference", 0x42, this.CAR);
	return t;
}



/**
 * Get the CHR as ByteString object
 *
 * @private
 */
EAC2CVRequestGenerator.prototype.getCHR = function() {
	var t = new ASN1("Certification Holder Reference", 0x5F20, this.CHR);
	return t;
}



/**
 * Get the encoded public key including domain parameters
 *
 * @private
 */
EAC2CVRequestGenerator.prototype.getPublicKey = function() {

	var t = new ASN1("Public Key", 0x7F49);
	t.add(new ASN1("Object Identifier", 0x06, this.taOID));

	if (typeof(this.publicKey.getComponent(Key.ECC_P)) != "undefined") {
		t.add(new ASN1("Prime Modulus", 0x81, EAC2CVRequestGenerator.stripLeadingZeros(this.publicKey.getComponent(Key.ECC_P))));
		t.add(new ASN1("First coefficient a", 0x82, EAC2CVRequestGenerator.stripLeadingZeros(this.publicKey.getComponent(Key.ECC_A))));
		t.add(new ASN1("Second coefficient b", 0x83, EAC2CVRequestGenerator.stripLeadingZeros(this.publicKey.getComponent(Key.ECC_B))));
		t.add(new ASN1("Base Point G", 0x84, EAC2CVRequestGenerator.encodeUncompressedECPoint(this.publicKey.getComponent(Key.ECC_GX), this.publicKey.getComponent(Key.ECC_GY))));
		t.add(new ASN1("Order of the base point", 0x85, EAC2CVRequestGenerator.stripLeadingZeros(this.publicKey.getComponent(Key.ECC_N))));

		t.add(new ASN1("Public Point y", 0x86, EAC2CVRequestGenerator.encodeUncompressedECPoint(this.publicKey.getComponent(Key.ECC_QX), this.publicKey.getComponent(Key.ECC_QY))));

		t.add(new ASN1("Cofactor f", 0x87, EAC2CVRequestGenerator.stripLeadingZeros(this.publicKey.getComponent(Key.ECC_H))));
	} else {
		t.add(new ASN1("Composite Modulus", 0x81, EAC2CVRequestGenerator.stripLeadingZeros(this.publicKey.getComponent(Key.MODULUS))));
		t.add(new ASN1("Public Exponent", 0x82, EAC2CVRequestGenerator.stripLeadingZeros(this.publicKey.getComponent(Key.EXPONENT))));
	}

	return t;
}



/**
 * Get the encoded CPI as ByteString
 *
 * @private
 */
EAC2CVRequestGenerator.prototype.getProfileIdentifier = function() {
	var bb = new ByteBuffer();
	bb.append(this.profileIdentifier);

	var t = new ASN1("Certificate Profile Identifier", 0x5F29, bb.toByteString());
	return t;
}



/**
 * Get the DER-encoded extension vector
 *
 * @private
 */
EAC2CVRequestGenerator.prototype.getExtensions = function() {
	var t = new ASN1("Certificate Extensions", 0x65);
	for (var i = 0; i < this.extensions.length; i++)
		t.add(this.extensions[i]);
	return t;
}



/**
 * Get the encoded certificate request body
 *
 * @private
 */
EAC2CVRequestGenerator.prototype.getCertificateBody = function() {

	var t = new ASN1("Certificate Body", 0x7F4E);
	t.add(this.getProfileIdentifier());

	if (this.CAR) {
		t.add(this.getCAR());
	}

	t.add(this.getPublicKey());
	t.add(this.getCHR());

	if (this.extensions) {
		t.add(this.getExtensions());
	}
	return t;
}



/**
 * Generate initial certificate request using the specified private key for signing
 *
 * @param {Key} privateKey Private key for signature creation
 * @return The DER-encoded CV request
 * @type ASN1
 */
EAC2CVRequestGenerator.prototype.generateCVRequest = function(privateKey) {
	var request = new ASN1("CV Certificate", 0x7F21);

	var body = this.getCertificateBody();

	request.add(body);

	var mech = CVC.getSignatureMech(this.taOID);
	var signature = this.crypto.sign(privateKey, mech, body.getBytes());
	if (CVC.isECDSA(this.taOID)) {
		var keylen = (privateKey.getSize() + 7) >> 3;
		var signatureValue = new ASN1("Signature", 0x5F37, CVC.unwrapSignature(signature, keylen));
	} else {
		var signatureValue = new ASN1("Signature", 0x5F37, signature);
	}

	request.add(signatureValue);

	return request;
}



/**
 * Countersign request
 *
 * @param {Crypto} crypto the crypto provide to use for signing the request
 * @param {CVC} request the self-signed request
 * @param {Key} authenticationKey Private key for used for signing and authenticating the request
 * @param {PublicKeyReference} authCHR CHR of the authenticating authority
 * @param {ByteString} taOID the public key object identifier of the authentication key
 *
 * @return The DER-encoded authenticated CV request
 * @type ASN1
 */
EAC2CVRequestGenerator.signAuthenticatedCVRequest = function(crypto, request, authenticationKey, authCHR, outertaOID) {
	var authRequest = new ASN1("Authentication", 0x67);

	var chr = new ASN1("Certification Authority Reference", 0x42, authCHR.getBytes());

	var signatureInput = request.getBytes().concat(chr.getBytes());

	var mech = CVC.getSignatureMech(outertaOID);
	var signature = crypto.sign(authenticationKey, mech, signatureInput);

	if (CVC.isECDSA(outertaOID)) {
		var keylen = authenticationKey.getSize() >> 3;
		var signatureValue = new ASN1("Signature", 0x5F37, CVC.unwrapSignature(signature, keylen));
	} else {
		var signatureValue = new ASN1("Signature", 0x5F37, signature);
	}

	authRequest.add(request);
	authRequest.add(chr);
	authRequest.add(signatureValue);

	return authRequest;
}



/**
 * Generate authenticated request
 *
 * @param {Key} requestKey Private key for the request signature
 * @param {Key} authenticationKey Private key for used for signing and authenticating the request
 * @param {PublicKeyReference} authCHR CHR of the authenticating authority
 * @param {ByteString} taOID the public key object identifier of the authentication key
 *
 * @return The DER-encoded authenticated CV request
 * @type ASN1
 */
EAC2CVRequestGenerator.prototype.generateAuthenticatedCVRequest = function(requestKey, authenticationKey, authCHR, outertaOID) {

	var request = this.generateCVRequest(requestKey);

	if (typeof(outertaOID) == "undefined") {
		outertaOID = this.taOID;
	}
	return EAC2CVRequestGenerator.signAuthenticatedCVRequest(this.crypto, request, authenticationKey, authCHR, outertaOID);
}



EAC2CVRequestGenerator.test = function() {
	var test = function(crypto, priKey, pubKey, taOID) {
		var reqGenerator = new EAC2CVRequestGenerator(crypto);

		// Set CPI
		reqGenerator.setProfileIdentifier(0x00);

		// Set "inner" CAR
		var CAR = "decvca00000";
		reqGenerator.setCAR(CAR);

		// Set public key for request
		reqGenerator.setPublicKey(pubKey);

		// Set oid of algorithm
		reqGenerator.setTAAlgorithmIdentifier(taOID);

		// Set some dummy extensions
		var ext1 = new ASN1("ext1", new ByteString("06022A11", HEX));
		var ext2 = new ASN1("ext2", new ByteString("06022A12", HEX));
		reqGenerator.setExtensions([ext1, ext2]);

		// Set CHR for the request
		var CHR = "dedvca00001";
		reqGenerator.setCHR(CHR);

		// Generate the request
		var req = reqGenerator.generateAuthenticatedCVRequest(priKey, priKey, new PublicKeyReference("dedvca00000"), taOID);
		GPSystem.trace(req);

		var cvreq = new CVC(req);
		GPSystem.trace(cvreq);

		assert(cvreq.verifyWith(crypto, pubKey, taOID));
		assert(cvreq.verifyATWith(crypto, pubKey, taOID));
	}

	var crypto = new Crypto();

	var priKey = new Key();
	var pubKey = new Key();
	priKey.setType(Key.PRIVATE);
	pubKey.setType(Key.PUBLIC);
	priKey.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256t1", OID));
	pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256t1", OID));
	crypto.generateKeyPair(Crypto.EC, pubKey, priKey);

	test(crypto, priKey, pubKey, new ByteString("id-TA-ECDSA-SHA-256", OID));


	var priKey = new Key();
	var pubKey = new Key();
	priKey.setType(Key.PRIVATE);
	pubKey.setType(Key.PUBLIC);
	priKey.setComponent(Key.ECC_CURVE_OID, new ByteString("secp521r1", OID));
	pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString("secp521r1", OID));
	crypto.generateKeyPair(Crypto.EC, pubKey, priKey);

	test(crypto, priKey, pubKey, new ByteString("id-TA-ECDSA-SHA-512", OID));


	var priKey = new Key();
	var pubKey = new Key();
	priKey.setType(Key.PRIVATE);
	pubKey.setType(Key.PUBLIC);
	pubKey.setSize(1024);
	crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);

	test(crypto, priKey, pubKey, new ByteString("id-TA-RSA-v1-5-SHA-256", OID));
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A card verifiable certificate store using a PKCS#11 device as key store
 */

// Imports

var PublicKeyReference	 = require('scsh/eac/PublicKeyReference').PublicKeyReference;
var CVC			 = require('scsh/eac/CVC').CVC;
var CVCertificateStore	 = require('scsh/eac/CVCertificateStore').CVCertificateStore;
var CVCCA		 = require('scsh/eac/CVCCA').CVCCA;



/**
 * Create a CV certificate store using a PKCS#11 device as secure key store
 *
 * @class CV certificate store with PKCS#11 as secure key store
 * @constructor
 * @param {DAOFactory} daof the factory that can create data access objects for persistent information
 * @param {PKCS11Session} p11session logged in PKCS#11 session with device
 */
function P11CVCertificateStore(daof, p11session) {
	CVCertificateStore.call(this, daof);
	this.p11session = p11session;
	this.crypto = new P11Crypto(p11session);
}

P11CVCertificateStore.prototype = Object.create(CVCertificateStore.prototype);
P11CVCertificateStore.constructor = P11CVCertificateStore;

exports.P11CVCertificateStore = P11CVCertificateStore;



/**
 * Get crypto object
 *
 * @type HSMCrypto
 * @return the HSMCrypto object
 */
P11CVCertificateStore.prototype.getCrypto = function() {
	return this.crypto;
}



/**
 * Transform path and certificate holder into a label
 *
 * @param {String} path the path
 * @param {PublicKeyReference} chr the certificate holder reference
 * @type String
 * @return the key label
 */
P11CVCertificateStore.path2label = function(path, chr) {
	return path.substr(1) + chr.getSequenceNo();
}



/**
 * Get a private key in the certificate store. Overrides method in CVCertificateStore.
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key
 * @returns the private key or null if not found
 * @type Key
 */
P11CVCertificateStore.prototype.getPrivateKey = function(path, car) {
	var label = P11CVCertificateStore.path2label(path, car);

	var attr = new Array();
	attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_PRIVATE_KEY;
	attr[PKCS11Object.CKA_LABEL] = new ByteString(label, ASCII);
	var o = this.p11session.enumerateObjects(attr);

	print(o.length);
	for (var i = 0; i < o.length; i++) {
		print(o[i].getAttribute(PKCS11Object.CKA_LABEL));
	}
	if (o.length == 0) {
		return null;
	}

	if (o.length != 1) {
		throw new GPError("P11CVCertificateStore", GPError.INVALID_ARGUMENT, o.length, "Duplicate key with label " + label + " found");
	}

	var p11key = o[0];

	var key = new Key();
	key.setType(Key.PRIVATE);

	var curve = p11key.getAttribute(PKCS11Object.CKA_EC_PARAMS);
	if (curve) {
		var a = new ASN1(curve);

		key.setComponent(Key.ECC_CURVE_OID, a.value);
	}
	key.p11 = p11key;
	return key;
}



/**
 * Determine curve from key parameter
 *
 * @param {Key} key the key
 * @type ByteString
 * @return the curve OID
 */
P11CVCertificateStore.determineCurve = function(key) {
	var curves = [
		new ByteString("brainpoolP192r1", OID),
		new ByteString("brainpoolP224r1", OID),
		new ByteString("brainpoolP256r1", OID),
		new ByteString("brainpoolP384r1", OID),
		new ByteString("brainpoolP512r1", OID)
	];

	if (key.getComponent(Key.ECC_CURVE_OID)) {
		return key.getComponent(Key.ECC_CURVE_OID);
	}

	for (var i = 0; i < curves.length; i++) {
		var spec = new Key();
		spec.setComponent(Key.ECC_CURVE_OID, curves[i]);
		if (key.getComponent(Key.ECC_P).equals(spec.getComponent(Key.ECC_P))) {
			return curves[i];
		}
	}
	throw new GPError("P11CVCertificateStore", GPError.INVALID_ARGUMENT, 0, "Unknown curve");
}



/**
 * Generate key pair
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key pair
 * @param {Number} algo the key generation algorithm (Crypto.EC or Crypto.RSA)
 * @param {Key} prk the private key template
 * @param {Key} puk the public key template
 */
P11CVCertificateStore.prototype.generateKeyPair = function(path, chr, algo, prk, puk) {
	var label = P11CVCertificateStore.path2label(path, chr);

	label = new ByteString(label, ASCII);

	var priAttr = new Array();
	priAttr[PKCS11Object.CKA_TOKEN] = true;
	priAttr[PKCS11Object.CKA_SIGN] = true;
	priAttr[PKCS11Object.CKA_SENSITIVE] = true;
	priAttr[PKCS11Object.CKA_PRIVATE] = true;
	priAttr[PKCS11Object.CKA_LABEL] = label;

	var pubAttr = new Array();
	pubAttr[PKCS11Object.CKA_TOKEN] = true;
	pubAttr[PKCS11Object.CKA_VERIFY] = true;
	pubAttr[PKCS11Object.CKA_LABEL] = label;

	if (algo == Crypto.RSA) {
		pubAttr[PKCS11Object.CKA_MODULUS_BITS] = puk.getSize();
		pubAttr[PKCS11Object.CKA_PUBLIC_EXPONENT] = new ByteString("010001", HEX);
		var keys = this.p11session.generateKeyPair(PKCS11Session.CKM_RSA_PKCS_KEY_PAIR_GEN, null, pubAttr, priAttr);

		var value = keys[0].getAttribute(PKCS11Object.CKA_VALUE);
		var pk = new ASN1(value);
		print(pk);
		puk.setComponent(Key.MODULUS, pk.get(0).value.right(puk.getSize() >> 3));
		puk.setComponent(Key.EXPONENT, pk.get(1).value);
	} else {
		var curve = P11CVCertificateStore.determineCurve(puk);
		var curveasn = new ASN1(ASN1.OBJECT_IDENTIFIER, curve);

		pubAttr[PKCS11Object.CKA_EC_PARAMS] = curveasn.getBytes();
		var keys = this.p11session.generateKeyPair(PKCS11Session.CKM_EC_KEY_PAIR_GEN, null, pubAttr, priAttr);

		var value = keys[0].getAttribute(PKCS11Object.CKA_VALUE);
		var pk = new ASN1(value);
		var point = pk.value.bytes(1);

		prk.setComponent(Key.ECC_CURVE_OID, curve);
		puk.setComponent(Key.ECC_QX, point.left(point.length >> 1));
		puk.setComponent(Key.ECC_QY, point.right(point.length >> 1));
	}

	puk.p11 = keys[0];
	prk.p11 = keys[1];
}



function P11Crypto(p11session) {
	this.p11session = p11session;
	this.crypto = new Crypto();
}



P11Crypto.prototype.sign = function(key, mech, data, iv) {
	var ckm_sign = 0;
	var mech_hash = 0;
	var wrap = false;

	switch(mech) {
		case Crypto.ECDSA_SHA1:
			ckm_sign = PKCS11Session.CKM_ECDSA;
			mech_hash = Crypto.SHA_1;
			wrap = true;
			break;
		case Crypto.ECDSA_SHA224:
			ckm_sign = PKCS11Session.CKM_ECDSA;
			mech_hash = Crypto.SHA_224;
			wrap = true;
			break;
		case Crypto.ECDSA_SHA256:
			ckm_sign = PKCS11Session.CKM_ECDSA;
			mech_hash = Crypto.SHA_256;
			wrap = true;
			break;
		case Crypto.ECDSA_SHA384:
			ckm_sign = PKCS11Session.CKM_ECDSA;
			mech_hash = Crypto.SHA_384;
			wrap = true;
			break;
		case Crypto.ECDSA_SHA512:
			ckm_sign = PKCS11Session.CKM_ECDSA;
			mech_hash = Crypto.SHA_512;
			wrap = true;
			break;
		case Crypto.ECDSA:
			ckm_sign = PKCS11Session.CKM_ECDSA;
			wrap = true;
			break;
		case Crypto.RSA_SHA1:
			ckm_sign = PKCS11Session.CKM_SHA1_RSA_PKCS;
			break;
		case Crypto.RSA_SHA256:
			ckm_sign = PKCS11Session.CKM_SHA256_RSA_PKCS;
			break;
		case Crypto.RSA_SHA512:
			ckm_sign = PKCS11Session.CKM_SHA512_RSA_PKCS;
			break;
		case Crypto.RSA_PSS_SHA1:
			ckm_sign = PKCS11Session.CKM_SHA1_RSA_PKCS_PSS;
			break;
		case Crypto.RSA_PSS_SHA256:
			ckm_sign = PKCS11Session.CKM_SHA256_RSA_PKCS_PSS;
			break;
		case Crypto.RSA_PSS_SHA512:
			ckm_sign = PKCS11Session.CKM_SHA512_RSA_PKCS_PSS;
			break;
		default:
			throw new GPError("P11Crypto", GPError.INVALID_ARGUMENT, 2, "Unsupported mechanism");
	}

	if (mech_hash) {
		data = this.crypto.digest(mech_hash, data);
	}

	// Test with single step C_Sign
	this.p11session.signInit(ckm_sign, key.p11);

	var signature = this.p11session.sign(data);

	if (wrap) {
		signature = CVC.wrapSignature(signature);
	}

	return signature;
}



P11Crypto.prototype.verify = function(key, mech, data, sig) {
	return this.crypto.verify(key, mech, data, sig);
}



P11CVCertificateStore.testPath = GPSystem.mapFilename("testca", GPSystem.CWD);

P11CVCertificateStore.test = function() {
	var p = new PKCS11Provider("/usr/local/lib/opensc-pkcs11.so");

	try	{
		var slots = p.getSlots();
		print(slots);
		var slot = slots[1];

		print("Using slot: " + slot.getId());

		// Open R/W session
		var s = new PKCS11Session(p, slot.getId(), true);

		// Login with USER PIN
		s.login("648219");

		var cs = new P11CVCertificateStore(P11CVCertificateStore.testPath + "/cvca", s);

		var crypto = cs.getCrypto();

		var prk = new Key();
		prk.setType(Key.PRIVATE);
		prk.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));
		var puk = new Key();
		puk.setType(Key.PUBLIC);
		puk.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));

		var chr = new PublicKeyReference("DE00001");
		cs.generateKeyPair("/test", chr, Crypto.ECC, prk, puk);
		var msg = new ByteString("Hello World", ASCII);

		var sig = crypto.sign(prk, Crypto.ECDSA_SHA1, msg);
		assert(crypto.verify(puk, Crypto.ECDSA_SHA1, msg, sig));

		var sig = crypto.sign(prk, Crypto.ECDSA_SHA224, msg);
		assert(crypto.verify(puk, Crypto.ECDSA_SHA224, msg, sig));

		var sig = crypto.sign(prk, Crypto.ECDSA_SHA256, msg);
		assert(crypto.verify(puk, Crypto.ECDSA_SHA256, msg, sig));

		var sig = crypto.sign(prk, Crypto.ECDSA_SHA384, msg);
		assert(crypto.verify(puk, Crypto.ECDSA_SHA384, msg, sig));

		var sig = crypto.sign(prk, Crypto.ECDSA_SHA512, msg);
		assert(crypto.verify(puk, Crypto.ECDSA_SHA512, msg, sig));


		var cvca = new CVCCA(crypto, cs, null, null, "/UTCVCA");

		// Create a new request
		var car = new PublicKeyReference("UTCVCA00000");

		var req = cvca.generateRequest(car, false);
		print("Request: " + req);
		print(req.getASN1());

		assert(req.verifyWith(crypto, req.getPublicKey()));

		// Create self-signed or link certificate based on request
		var policy = { certificateValidityDays: 2,
				   chatRoleOID: new ByteString("id-IS", OID),
				   chatRights: new ByteString("E3", HEX),
				   includeDomainParameter: true,
				   extensions: []
				 };
		var cert = cvca.generateCertificate(req, policy);
		print("Certificate: " + cert);
		print(cert.getASN1());

		// Import certificate into store, making it the most current certificate
		cvca.storeCertificate(cert);

		// Generate additional self-signed root certificate
		// This must be done after the link certificate has been imported
		var policy = { certificateValidityDays: 2,
				   chatRoleOID: new ByteString("id-IS", OID),
				   chatRights: new ByteString("E3", HEX),
				   includeDomainParameter: true,
				   extensions: []
				 };
		var cert = cvca.generateCertificate(req, policy);
		print("Certificate: " + cert);
		print(cert.getASN1());

		// Import certificate into store, making it the most current certificate
		cvca.storeCertificate(cert);
	}
	finally {
		p.cleanup();
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of the PACE/SAC protocol for both card and terminal
 */



/**
 * Create a PACEInfo object
 *
 * @class <p>This class encodes and decodes PACEInfo objects.</p>
 * <p>The class implements the following ASN.1 syntax:</p>
 * <pre>
 * PACEInfo ::= SEQUENCE {
 * 		protocol	OBJECT IDENTIFIER,
 * 		version INTEGER, -- MUST be 1 or 2
 * 		parameterId INTEGER OPTIONAL
 * }
 * </pre>
 * @constructor
 * @param {ASN1} the optional tlv structure to initialize the object
 */
function PACEInfo(tlv) {
	if (tlv && (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements >= 2);

		var i = 0;
		var t = tlv.get(i++);
		assert(t.tag == ASN1.OBJECT_IDENTIFIER);
		this.protocol = t.value;

		var t = tlv.get(i++);
		assert(t.tag == ASN1.INTEGER);
		this.version = t.value.toSigned();

		if (i < tlv.elements) {
			var t = tlv.get(i++);
			assert(t.tag == ASN1.INTEGER);
			this.parameterId = t.value.toSigned();
		}
	}
}

exports.PACEInfo = PACEInfo;



/**
 * Convert object to TLV structure
 *
 * @return the TLV structure
 * @type ASN1
 */
PACEInfo.prototype.toTLV = function() {
	var t = new ASN1(ASN1.SEQUENCE);

	t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, this.protocol));

	var bb = new ByteBuffer();
	bb.append(this.version);
	t.add(new ASN1(ASN1.INTEGER, bb.toByteString()));

	if (typeof(this.parameterId) != "undefined") {
		var bb = new ByteBuffer();
		bb.append(this.parameterId);
		t.add(new ASN1(ASN1.INTEGER, bb.toByteString()));
	}
	return t;
}



PACEInfo.prototype.toString = function() {
	return "PACEInfo(protocol=" + this.protocol + ", version=" + this.version + ", parameterId=" + this.parameterId + ")";
}



/**
 * Create a PACEDomainParameterInfo object
 *
 * @class <p>This class encodes and decodes PACEDomainParameterInfo objects.</p>
 * <p>The class implements the following ASN.1 syntax:</p>
 * <pre>
 *   PACEDomainParameterInfo ::= SEQUENCE {
 *   	protocol OBJECT IDENTIFIER(id-PACE-DH | id-PACE-ECDH),
 *   	domainParameter AlgorithmIdentifier,
 *   	parameterId INTEGER OPTIONAL
 *   }
 * </pre>
 * @constructor
 * @param {ASN1} the optional tlv structure to initialize the object
 */
function PACEDomainParameterInfo(tlv) {
	if (tlv && (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements >= 2);

		var i = 0;
		var t = tlv.get(i++);
		assert(t.tag == ASN1.OBJECT_IDENTIFIER);
		this.protocol = t.value;

		var t = tlv.get(i++);
		assert(t.tag == ASN1.SEQUENCE);

		if (t.elements > 0) {
			this.domainParameter = ECCUtils.decodeECParameters(t.get(1));
		} else {
			this.domainParameter = new Key();
			this.domainParameter.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));
		}

		if (i < tlv.elements) {
			var t = tlv.get(i++);
			assert(t.tag == ASN1.INTEGER);
			this.parameterId = t.value.toSigned();
		}

	}
}

exports.PACEDomainParameterInfo = PACEDomainParameterInfo;



/**
 * Convert object to TLV structure
 *
 * @return the TLV structure
 * @type ASN1
 */
PACEDomainParameterInfo.prototype.toTLV = function() {
	var t = new ASN1(ASN1.SEQUENCE);

	t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, this.protocol));

	var c = new ASN1(ASN1.SEQUENCE);
	if (this.standardizedDomainParameter) {
		c.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("standardizedDomainParameter", OID)));
		c.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(this.standardizedDomainParameter)));
	} else {

	}
	t.add(c);

	if (typeof(this.parameterId) != "undefined") {
		var bb = new ByteBuffer();
		bb.append(this.parameterId);
		t.add(new ASN1(ASN1.INTEGER, bb.toByteString()));
	}
	return t;
}



PACEDomainParameterInfo.getStandardizedDomainParameter = function(id) {
	var key = new Key();
	key.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));
	return key;
}



PACEDomainParameterInfo.prototype.toString = function() {
	return "PACEDomainParameterInfo(protocol=" + this.protocol + ", parameterId=" + this.parameterId + ")";
}



/**
 * Create a PACE protocol object
 *
 * @class This class implements the PACE protocol
 *
 * @constructor
 *
 * @param {Crypto} crypto the crypto provider
 * @param {ByteString} algo the algorithm OID
 * @param {Key} domainparam the key object holding ECC domain parameter
 * @param {Number} version protocol version (1 or 2)
 */
function PACE(crypto, algo, domparam, version) {
	this.crypto = crypto;
	this.algo = algo.toString(OID);
	this.domparam = domparam;

	if (typeof(version) != "undefined") {
		this.version = version;
	} else {
		this.version = 1;
	}

	if (this.algo == PACE.id_PACE_ECDH_GM_3DES_CBC_CBC) {
		this.symalgo = Key.DES;
	} else {
		this.symalgo = Key.AES;
	}

	this.sym = Crypto.AES;
}

exports.PACE = PACE;



/**
 * Return algorithm type
 *
 * @type Number
 * @returns Either Key.DES or Key.AES
 */
PACE.prototype.getSymmetricAlgorithm = function() {
	return this.symalgo;
}



/**
 * Derive key from input parameter, counter and optional nonce
 *
 * @param {ByteString} input the first part of the hash input
 * @param {Number} counter the counter value
 * @param {nonce} the optional nonce inserted between the input and the counter
 * @return the key object
 * @type Key
 */
PACE.prototype.deriveKey = function(input, counter, nonce) {
	if (typeof(nonce) != "undefined") {
		input = input.concat(nonce);
	}

	var bb = new ByteBuffer("000000", HEX);
	bb.append(counter);

	input = input.concat(bb.toByteString());

	var key = new Key();

	if (this.algo == PACE.id_PACE_ECDH_GM_3DES_CBC_CBC) {
		var digest = this.crypto.digest(Crypto.SHA_1, input);
		key.setComponent(Key.DES, digest.left(16));
	} else if (this.algo == PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_128) {
		var digest = this.crypto.digest(Crypto.SHA_1, input);
		key.setComponent(Key.AES, digest.left(16));
	} else if (this.algo == PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_192) {
		var digest = this.crypto.digest(Crypto.SHA_256, input);
		key.setComponent(Key.AES, digest.left(24));
	} else if (this.algo == PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_256) {
		var digest = this.crypto.digest(Crypto.SHA_256, input);
		key.setComponent(Key.AES, digest);
	} else {
		throw new GPError("pace", GPError.INVALID_MECH, 0x6A80, "Algorithm not supported");
	}
	return key;
}



/**
 * Set the password and derive the PACE key.
 * @param {ByteString} pwd the PACE password (Hash Value for MRZ and ASCII string for others)
 * @return the PACE key.
 */
PACE.prototype.setPassword = function(pwd) {
	this.pacekey = this.deriveKey(pwd, 3);
}



/**
 * Set the PACE key.
 * @param {ByteString} key the PACE key
 * @return the PACE key.
 */
PACE.prototype.setPACEKey = function(key) {
	this.pacekey = key;
}



/**
 * Generate nonce and encrypt using PACE key.
 * @return the encrypted nonce
 * @type ByteString
 */
PACE.prototype.getEncryptedNonce = function() {
	this.nonce = this.crypto.generateRandom(16);
	if (this.symalgo == Key.DES) {
		var encnonce = this.crypto.encrypt(this.pacekey, Crypto.DES_CBC, this.nonce);
	} else {
		var encnonce = this.crypto.encrypt(this.pacekey, Crypto.AES_ECB, this.nonce);
	}
	return encnonce;
}



/**
 * Decrypt and store nonce using PACE key.
 *
 * @param {ByteString} nonce the encrypted nonce
 */
PACE.prototype.decryptNonce = function(encnonce) {
	if (this.symalgo == Key.DES) {
		this.nonce = this.crypto.decrypt(this.pacekey, Crypto.DES_CBC, encnonce);
	} else {
		this.nonce = this.crypto.decrypt(this.pacekey, Crypto.AES_ECB, encnonce);
	}
}



/**
 * Returns true, if the nonce is known.
 * @return true if the nonce is known
 * @type Boolean
 */
PACE.prototype.hasNonce = function() {
	return (typeof(this.nonce) != "undefined");
}



/**
 * Generate ephemeral ECC key pair.
 *
 * @param domainParameter the domain parameter for the key pair
 * @return the ephemeral public key
 * @type Key
 */
PACE.prototype.generateEphemeralKeyPair = function(domainParameter) {
	this.prk = new Key(domainParameter);
	this.prk.setType(Key.PRIVATE);

	this.puk = new Key(domainParameter);
	this.puk.setType(Key.PUBLIC);

	this.crypto.generateKeyPair(Crypto.EC, this.puk, this.prk);

	return this.puk;
}



/**
 * Generates and returns the mapping data for this instance
 * @return the mapping data
 * @type ByteString
 */
PACE.prototype.getMappingData = function() {
	if (typeof(this.prk) == "undefined") {
		this.generateEphemeralKeyPair(this.domparam);
	}

	var ecpk = new ByteString("04", HEX);
	ecpk = ecpk.concat(this.puk.getComponent(Key.ECC_QX));
	ecpk = ecpk.concat(this.puk.getComponent(Key.ECC_QY));
	return ecpk;
}



/**
 * Performs the mapping operation with mapping data from the other side
 *
 */
PACE.prototype.performMapping = function(mappingData) {
	if (mappingData.byteAt(0) != 0x04)
		throw new GPError("PACE", GPError.INVALID_DATA, 0x6A80, "Public key must start with '04'");

	if (typeof(this.nonce) == "undefined")
		throw new GPError("PACE", GPError.INVALID_MECH, 0x6985, "Nonce is not yet defined");

	var l = (mappingData.length - 1) >> 1;
	if (l != this.prk.getComponent(Key.ECC_P).length) {
		throw new GPError("PACE", GPError.INVALID_DATA, 0, "Public key size does not match private key size");
	}

	var h = this.crypto.decrypt(this.prk, Crypto.ECDHP, mappingData.bytes(1));

	var l = h.length >> 1;
	var H = new Key(this.domparam);
	H.setComponent(Key.ECC_QX, h.bytes(0, l));
	H.setComponent(Key.ECC_QY, h.bytes(l, l));

	var G = new Key(this.domparam);
	// Copy generator point into public key point
	G.setComponent(Key.ECC_QX, G.getComponent(Key.ECC_GX));
	G.setComponent(Key.ECC_QY, G.getComponent(Key.ECC_GY));

	// Calculate G' = s * G + P, where P is initially stored in H and
	// G' is finally stored in H.
	this.crypto.deriveKey(G, Crypto.EC_MULTIPLY_ADD, this.nonce, H);

	// Create new domain parameter with G'
	this.ephDomParam = new Key(this.domparam);
	this.ephDomParam.setComponent(Key.ECC_GX, H.getComponent(Key.ECC_QX));
	this.ephDomParam.setComponent(Key.ECC_GY, H.getComponent(Key.ECC_QY));
}



/**
 * Returns the ephemeral public key based on the new domain parameter
 *
 * @return the encoded public key
 * @type ByteString
 */
PACE.prototype.getEphemeralPublicKey = function() {
	this.generateEphemeralKeyPair(this.ephDomParam);
	var ecpk = new ByteString("04", HEX);
	ecpk = ecpk.concat(this.puk.getComponent(Key.ECC_QX));
	ecpk = ecpk.concat(this.puk.getComponent(Key.ECC_QY));
	return ecpk;
}



/**
 * Performs the mapping operation with mapping data from the other side
 *
 * @param {ByteString} publicKey the public key in encoded format
 */
PACE.prototype.performKeyAgreement = function(publicKey) {
	if (publicKey.byteAt(0) != 0x04)
		throw new GPError("PACE", GPError.INVALID_DATA, 0x6A80, "Public key must start with '04'");

	if (typeof(this.nonce) == "undefined")
		throw new GPError("PACE", GPError.INVALID_MECH, 0x6985, "Nonce is not yet defined");

	var l = (publicKey.length - 1) >> 1;
	if (l != this.prk.getComponent(Key.ECC_P).length) {
		throw new GPError("PACE", GPError.INVALID_DATA, 0, "Public key size does not match private key size");
	}

	this.otherPuK = new Key(this.ephDomParam);
	this.otherPuK.setComponent(Key.ECC_QX, publicKey.bytes(    1, l));
	this.otherPuK.setComponent(Key.ECC_QY, publicKey.bytes(l + 1, l));

	var k = this.crypto.decrypt(this.prk, Crypto.ECDH, publicKey.bytes(1));
	GPSystem.trace("Shared Secret K:");
	GPSystem.trace(k);
	this.kenc = this.deriveKey(k, 1);
	this.kmac = this.deriveKey(k, 2);

}



/**
 * Strips leading zeros of a ByteString
 *
 * @param {ByteString} value the ByteString value
 * @return the stripped ByteString object, may be an empty ByteString
 * @type ByteString
 */
PACE.stripLeadingZeros = function(value) {
	var i = 0;
	for (; (i < value.length) && (value.byteAt(i) == 0); i++);

	return value.right(value.length - i);
}



/**
 * Encode an ECC public key in the format defined by the EAC 2.0 specification
 *
 * @param {String} oid the object identifier to encode
 * @param {Key} key the EC public key
 * @param {Boolean} withDP true to encode domain parameter as well
 * @type ASN1
 * @returns the ASN1 encoded public key object
 */
PACE.encodePublicKey = function(oid, key, withDP) {

	var t = new ASN1("ecPublicKey", 0x7F49);
	t.add(new ASN1("objectIdentifier", ASN1.OBJECT_IDENTIFIER, new ByteString(oid, OID)));
	if (withDP) {
		t.add(new ASN1("primeModulus", 0x81, key.getComponent(Key.ECC_P)));
		t.add(new ASN1("firstCoefficient", 0x82, key.getComponent(Key.ECC_A)));
		t.add(new ASN1("secondCoefficient", 0x83, key.getComponent(Key.ECC_B)));

		var point = new ByteString("04", HEX);
		point = point.concat(key.getComponent(Key.ECC_GX));
		point = point.concat(key.getComponent(Key.ECC_GY));
		t.add(new ASN1("basePoint", 0x84, point));

		t.add(new ASN1("orderOfTheBasePoint", 0x85, key.getComponent(Key.ECC_N)));
	}
	var point = new ByteString("04", HEX);
	point = point.concat(key.getComponent(Key.ECC_QX));
	point = point.concat(key.getComponent(Key.ECC_QY));
	t.add(new ASN1("publicPoint", 0x86, point));

	if (withDP) {
		var cofactor = key.getComponent(Key.ECC_H);
		cofactor = PACE.stripLeadingZeros(cofactor);

		t.add(new ASN1("cofactor", 0x87, cofactor));
	}

	return t;
}



/**
 * Calculate the authentication token over the public key received from
 * the other side
 *
 * @return the MAC over the authentication data
 * @type ByteString
 */
PACE.prototype.calculateAuthenticationToken = function() {
	var t = PACE.encodePublicKey(this.algo, this.otherPuK, (this.version == 1));
	GPSystem.trace("Authentication Token:");
	GPSystem.trace(t);

	if (this.symalgo == Key.DES) {
		var inp = t.getBytes().pad(Crypto.ISO9797_METHOD_2);
		var at = this.crypto.sign(this.kmac, Crypto.DES_MAC_EMV, inp);
	} else {
		var at = this.crypto.sign(this.kmac, Crypto.AES_CMAC, t.getBytes()).left(8);
	}

	return at;
}



/**
 * Calculate and verify the authentication token over the public key received from
 * the other side
 *
 * @param {ByteString} the MAC over the authentication data
 * @return true if the MAC is valid
 * @type Boolean
 */
PACE.prototype.verifyAuthenticationToken = function(authToken) {
	var t = PACE.encodePublicKey(this.algo, this.puk, (this.version == 1));
	GPSystem.trace("Authentication Token:");
	GPSystem.trace(t);

	if (this.symalgo == Key.DES) {
		var inp = t.getBytes().pad(Crypto.ISO9797_METHOD_2);
		var at = this.crypto.sign(this.kmac, Crypto.DES_MAC_EMV, inp);
	} else {
		var at = this.crypto.sign(this.kmac, Crypto.AES_CMAC, t.getBytes()).left(8);
	}

	return at.equals(authToken);
}



/**
 * Returns true, if the mapping has been performed.
 * @return true if the mapping has been performed
 * @type Boolean
 */
PACE.prototype.hasMapping = function() {
	return (typeof(this.ephDomParam) != "undefined");
}



/**
 * Describe key
 * @param {Key} the key
 * @return the string describing the key
 * @type String
 */
PACE.keyToString = function(key) {
	var str = "";
	var kval = key.getComponent(Key.AES);
	if (kval) {
		str += "(AES) " + kval + "\n";
	}
	var kval = key.getComponent(Key.DES);
	if (kval) {
		str += "(DES) " + kval + "\n";
	}
	return str;
}



/**
 * Returns a human readable presentation of the current pace state.
 * return {String} the object information
 */
PACE.prototype.toString = function() {
	var str = "Algorithm " + this.algo + "\n";

	if (typeof(this.pacekey) != "undefined") {
		str += "PACE Key " + PACE.keyToString(this.pacekey);
	}

	if (typeof(this.nonce) != "undefined") {
		str += "Nonce " + this.nonce + "\n";
	}

	if (typeof(this.ephDomParam) != "undefined") {
		str += "Point G' " + this.ephDomParam.getComponent(Key.ECC_GX) + " " + this.ephDomParam.getComponent(Key.ECC_GY) + "\n";
	}

	if (typeof(this.kenc) != "undefined") {
		str += "Kenc " + PACE.keyToString(this.kenc);
	}

	if (typeof(this.kmac) != "undefined") {
		str += "Kmac" + PACE.keyToString(this.kmac);
	}

	return str;
}


PACE.bsi_de = "0.4.0.127.0.7";
PACE.id_PACE = PACE.bsi_de + ".2.2.4";
PACE.id_PACE_ECDH_GM = PACE.id_PACE + ".2";
PACE.id_PACE_ECDH_GM_3DES_CBC_CBC     = PACE.id_PACE_ECDH_GM + ".1";
PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_128 = PACE.id_PACE_ECDH_GM + ".2";
PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_192 = PACE.id_PACE_ECDH_GM + ".3";
PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_256 = PACE.id_PACE_ECDH_GM + ".4";

PACE.id_roles = PACE.bsi_de + ".3.1.2";
PACE.id_IS = PACE.id_roles + ".1";

/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 * 
 * @fileoverview Public Key Reference, the value stored in CAR and CHR of CV-Certificates
 */
 



/**
 * <p>Create a public key reference (CAR/CHR) from binary representation or individual fields.</p>
 *
 * <p>Use one of the following signatures:</p>
 *
 * <ul>
 *  <li>PublicKeyReference(ByteString value) - binary public key reference</li>
 *  <li>PublicKeyReference(String value) - string encoded public key reference</li>
 *  <li>PublicKeyReference(String countryCode, String holderMnemonic, String sequenceNumber) - string encoded public key reference</li>
 * </ul>
 * <p>@see PublicKeyReference.test() for an example.</P>
 *
 * @class <p>A class that implements a public key reference to be used as CAR and CHR in
 *        card verifiable certificates (CVC).</p>
 * @constructor
 */
function PublicKeyReference() {
	if (arguments.length > 0) {
		if (arguments.length == 1) {
			if (typeof(arguments[0]) == "string") {
				this.bin = new ByteString(arguments[0], ASCII);
			} else {
				this.bin = arguments[0];
			}
		} else {
			var cc = arguments[0];
			var mn = arguments[1];
			var sq = arguments[2];
			this.bin = new ByteString(cc + mn + sq, ASCII);
		}
	}
}

exports.PublicKeyReference = PublicKeyReference;



/**
 * Returns the 2 character country code
 *
 * @return the country code
 * @type String
 */
PublicKeyReference.prototype.getCountryCode = function() {
	return this.bin.bytes(0, 2).toString(ASCII);
}



/**
 * Returns the variable length holder mnemonic
 *
 * @return the holder mnemonic
 * @type String
 */
PublicKeyReference.prototype.getMnemonic = function() {
	return this.bin.bytes(2, this.bin.length - 7).toString(ASCII);
}



/**
 * Returns the 5 character sequence number
 *
 * @return the sequence number
 * @type String
 */
PublicKeyReference.prototype.getSequenceNo = function() {
	return this.bin.bytes(this.bin.length - 5, 5).toString(ASCII);
}



/**
 * Returns the certificate holder name, which is the concatenation of the country code and the
 * holder mnemonic.
 *
 * @return the holder name
 * @type String
 */
PublicKeyReference.prototype.getHolder = function() {
	return this.getCountryCode() + this.getMnemonic();
}



/**
 * Returns the binary encoded public key reference
 *
 * @return the public key reference
 * @type ByteString
 */
PublicKeyReference.prototype.getBytes = function() {
	return this.bin;
}



/**
 * Returns the string representation of the public key reference
 *
 * @return the public key reference
 * @type String
 */
PublicKeyReference.prototype.toString = function() {
	return this.bin.toString(ASCII);
}



/**
 * Returns true if other public key reference equals this public key reference
 *
 * @return true if equals
 * @type boolean
 */
PublicKeyReference.prototype.equals = function(other) {
	return this.bin.equals(other.bin);
}



/**
 * Test function
 */
PublicKeyReference.test = function() {
	var p = new PublicKeyReference(new ByteString("UTABCDF0000", ASCII));
	assert(p.getCountryCode() == "UT");
	assert(p.getMnemonic() == "ABCD");
	assert(p.getSequenceNo() == "F0000");
	assert(p.getHolder() == "UTABCD");
	
	var p = new PublicKeyReference("UT", "ABCD", "F0000");
	assert(p.getCountryCode() == "UT");
	assert(p.getMnemonic() == "ABCD");
	assert(p.getSequenceNo() == "F0000");
	assert(p.getHolder() == "UTABCD");
	
	var p = new PublicKeyReference("UTABCDF0000");
	assert(p.getCountryCode() == "UT");
	assert(p.getMnemonic() == "ABCD");
	assert(p.getSequenceNo() == "F0000");
	assert(p.getHolder() == "UTABCD");
	
	assert(p.getBytes().toString(ASCII) == "UTABCDF0000");
}

/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Implementation of the ASN.1 structures for restricted identification
 */



/**
 * Create a RestrictedIdentificationInfo object
 *
 * @class <p>This class encodes and decodes RestrictedIdentificationInfo objects.</p>
 * <p>The class implements the following ASN.1 syntax:</p>
 * <pre>
 * RestrictedIdentificationInfo ::= SEQUENCE {
 *   protocol  OBJECT IDENTIFIER(
 *             id-RI-DH-SHA-1  |
 *             id-RI-DH-SHA-224  |
 *             id-RI-DH-SHA-256  |
 *             id-RI-DH-SHA-384 |
 *             id-RI-DH-SHA-512 |
 *             id-RI-ECDH-SHA-1  |
 *             id-RI-ECDH-SHA-224  |
 *             id-RI-ECDH-SHA-256 |
 *             id-RI-ECDH-SHA-384 |
 *             id-RI-ECDH-SHA-512),
 *   params    ProtocolParams,
 *   maxKeyLen INTEGER OPTIONAL
 * }
 * ProtocolParams ::= SEQUENCE {
 *   version         INTEGER, -- MUST be 1
 *   keyId           INTEGER,
 *   authorizedOnly  BOOLEAN
 * }
 * </pre>
 * @constructor
 * @param {ASN1} the optional tlv structure to initialize the object
 */
function RestrictedIdentificationInfo(tlv) {
	if (tlv && (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements >= 2);

		var i = 0;
		var t = tlv.get(i++);
		assert(t.tag == ASN1.OBJECT_IDENTIFIER);
		this.protocol = t.value;

		var params = tlv.get(i++);
		assert(params.tag == ASN1.SEQUENCE);
		assert(params.elements == 3);

		assert(params.get(0).tag == ASN1.INTEGER);
		this.version = params.get(0).value.toSigned();

		assert(params.get(1).tag == ASN1.INTEGER);
		this.keyId = params.get(1).value.toSigned();

		assert(params.get(2).tag == ASN1.BOOLEAN);
		this.authorizedOnly = params.get(2).value.toSigned();

		if (i < tlv.elements) {
			var t = tlv.get(i++);
			assert(t.tag == ASN1.INTEGER);
			this.maxKeyLen = t.value.toSigned();
		}
	}
}

exports.RestrictedIdentificationInfo = RestrictedIdentificationInfo;



/**
 * Convert object to TLV structure
 *
 * @return the TLV structure
 * @type ASN1
 */
RestrictedIdentificationInfo.prototype.toTLV = function() {
	var t = new ASN1(ASN1.SEQUENCE,
				new ASN1(ASN1.OBJECT_IDENTIFIER, this.protocol),
				new ASN1(ASN1.SEQUENCE,
					new ASN1(ASN1.INTEGER, ByteString.valueOf(this.version)),
					new ASN1(ASN1.INTEGER, ByteString.valueOf(this.keyId)),
					new ASN1(ASN1.BOOLEAN, ByteString.valueOf(this.authorizedOnly ? 0xFF : 0x00))
				)
	);

	if (typeof(this.maxKeyLen) != "undefined") {
		t.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(this.maxKeyLen)));
	}
	return t;
}



RestrictedIdentificationInfo.prototype.toString = function() {
	return "RestrictedIdentificationInfo(protocol=" + this.protocol + ", version=" + this.version + ", keyId=" + this.keyId + ",authOnly=" + this.authorizedOnly + ",maxKeyLen=" + this.maxKeyLen + ")";
}



/**
 * Create a RestrictedIdentificationDomainParameterInfo object
 *
 * @class <p>This class encodes and decodes RestrictedIdentificationDomainParameterInfo objects.</p>
 * <p>The class implements the following ASN.1 syntax:</p>
 * <pre>
 *	RestrictedIdentificationDomainParameterInfo ::= SEQUENCE {
 *		protocol OBJECT IDENTIFIER(id-CA-DH | id-CA-ECDH),
 *		domainParameter AlgorithmIdentifier,
 * }
 * </pre>
 * @constructor
 * @param {ASN1} the optional tlv structure to initialize the object
 */
function RestrictedIdentificationDomainParameterInfo(tlv) {
	if (tlv && (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements >= 2);
		
		var i = 0;
		var t = tlv.get(i++);
		assert(t.tag == ASN1.OBJECT_IDENTIFIER);
		this.protocol = t.value;
		
		var t = tlv.get(i++);
		assert(t.tag == ASN1.SEQUENCE);

		if (t.elements > 0) {
			var oid = t.get(0);
			assert(oid.tag == ASN1.OBJECT_IDENTIFIER);
			if (oid.value.equals(new ByteString("standardizedDomainParameter", OID))) {
				this.standardizedDomainParameter = t.get(1).value.toUnsigned();
				var curveoid = RestrictedIdentification.standardizedDomainParameter[this.standardizedDomainParameter];
				if (!curveoid) {
					throw new GPError("RestrictedIdentificationPublicKeyInfo", GPError.INVALID_DATA, 0, "Standardized domain parameter " + this.standardizedDomainParameter + " is unknown");
				}
				this.domainParameter = new Key();
				this.domainParameter.setComponent(Key.ECC_CURVE_OID, new ByteString(curveoid, OID));
			} else {
				this.domainParameter = ECCUtils.decodeECParameters(t.get(1));
			}
		} else {
			this.domainParameter = new Key();
			this.domainParameter.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));
		}
	}
}

exports.RestrictedIdentificationDomainParameterInfo = RestrictedIdentificationDomainParameterInfo;



/**
 * Convert object to TLV structure
 *
 * @return the TLV structure
 * @type ASN1
 */
RestrictedIdentificationDomainParameterInfo.prototype.toTLV = function() {
	var t = new ASN1(ASN1.SEQUENCE);

	t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, this.protocol));

	var c = new ASN1(ASN1.SEQUENCE);
	if (this.standardizedDomainParameter) {
		c.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("standardizedDomainParameter", OID)));
		c.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(this.standardizedDomainParameter)));
	} else {

	}
	t.add(c);

	return t;
}



RestrictedIdentificationDomainParameterInfo.prototype.toString = function() {
	return "RestrictedIdentificationDomainParameterInfo(protocol=" + this.protocol + ", keyId=" + this.keyId + ")";
}


RestrictedIdentification = {
	id_RI: new ByteString("id-RI", OID),
	id_RI_DH: new ByteString("id-RI-DH", OID),
	id_RI_ECDH: new ByteString("id-RI-ECDH", OID)
};

exports.RestrictedIdentification = RestrictedIdentification;

RestrictedIdentification.standardizedDomainParameter = [];
RestrictedIdentification.standardizedDomainParameter[8] = "secp192r1";
RestrictedIdentification.standardizedDomainParameter[9] = "brainpoolP192r1";
RestrictedIdentification.standardizedDomainParameter[10] = "secp224r1";
RestrictedIdentification.standardizedDomainParameter[11] = "brainpoolP224r1";
RestrictedIdentification.standardizedDomainParameter[12] = "secp256r1";
RestrictedIdentification.standardizedDomainParameter[13] = "brainpoolP256r1";
RestrictedIdentification.standardizedDomainParameter[14] = "brainpoolP320r1";
RestrictedIdentification.standardizedDomainParameter[15] = "secp384r1";
RestrictedIdentification.standardizedDomainParameter[16] = "brainpoolP384r1";
RestrictedIdentification.standardizedDomainParameter[17] = "brainpoolP512r1";
RestrictedIdentification.standardizedDomainParameter[18] = "secp521r1";
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview General File I/O Class
 */



/**
 * Create a reference to a file system object (file or directory)
 *
 * @class Class implementing basic support for files
 * @constructor
 * @param {String} name relative or absolute file path
 * @param {Number} location one of GPSystem.CWD, GPSystem.USR, GPSystem.SYS, GPSystem.AUTO to resolve relative names. Default GPSystem.CWD
 */
function File(name, location) {
	this.name = name;
	this.location = location;
}

exports.File = File;



/**
 * Return absolute path
 *
 * @param{Number} mode one of GPSystem.AUTO, GPSystem.CWD, GPSystem.USR or GPSystem.SYS. See GPSystem.mapFilename() for details
 * @type String
 * @return the absolute path
 */
File.prototype.getAbsolutePath = function(mode) {
	if (typeof(mode) == "undefined") {
		if (typeof(this.location) == "undefined") {
			mode = GPSystem.AUTO;
		} else {
			mode = this.location;
		}
	}

	var path = GPSystem.mapFilename(this.name, mode);
	if (path == null) {
		return undefined;
	}
	return path;
}



/**
 * @private
 * Return a java.io.File object
 */
File.prototype.getFile = function() {
	if (typeof(this.file) == "undefined") {
		var path = this.getAbsolutePath();
		if (path) {
			this.file = new java.io.File(path);
		}
	}
	return this.file;
}



/**
 * Return true if file exists
 */
File.prototype.exists = function() {
	var f = this.getFile();

	if (!f) {
		return false;
	}
	return f.exists();
}



/**
 * Close streams associated with file
 */
File.prototype.close = function() {
	if (typeof(this.os) != "undefined") {
		this.os.close();
		delete(this.os);
	}

	if (typeof(this.is) != "undefined") {
		this.is.close();
		delete(this.is);
	}
}



/**
 * @private
 * Return a java.io.FileInputStream
 */
File.prototype.getInputStream = function() {
	if (typeof(this.is) == "undefined") {
		var path = this.getAbsolutePath();
		if (!path) {
			throw new GPError(module.id, GPError.OBJECT_NOT_FOUND, 0, "File " + this.name + " not found");
		}
		this.is = new java.io.FileInputStream(path);
	}
	return this.is;
}



/**
 * @private
 * Return a java.io.FileOutputStream
 */
File.prototype.getOutputStream = function() {
	if (typeof(this.os) == "undefined") {
		var path = this.getAbsolutePath();
		if (!path) {
			throw new GPError(module.id, GPError.OBJECT_NOT_FOUND, 0, "File " + this.name + " not found");
		}
		this.os = new java.io.FileOutputStream(path);
	}
	return this.os;
}



/**
 * Read complete file into ByteString object
 *
 * @type ByteString
 * @return the binary content
 */
File.prototype.readAllAsBinary = function() {
	var is = this.getInputStream();

	// Determine file size
	var flen = is.available();

	// Allocate native byte array
	var bs = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, flen);

	// Read into byte array
	var len = is.read(bs);

	this.close();

	// Allocate JavaScript ByteBuffer from native/wrapped byte array
	var bb = new ByteBuffer(bs);

	// Convert to JavaScript ByteString
	var data = bb.toByteString();

	return data;
}



/**
 * Read complete file into String object
 *
 * @type String
 * @return the text content
 */
File.prototype.readAllAsString = function(encoding) {

	if (typeof(encoding) == "undefined") {
		encoding = UTF8;
	}

	return this.readAllAsBinary().toString(encoding);
}



/**
 * Write the object to file
 *
 * @param{Object} obj to write to file (Using toString() for any other than String and ByteString)
 * @param{Number} one of UTF8 or ASCII (Default is UTF8)
 */
File.prototype.writeAll = function(obj, encoding) {
	if ((typeof(obj) != "string") && !(obj instanceof ByteString)) {
		obj = obj.toString();
	}
	if (typeof(obj) == "string") {
		if (typeof(encoding) == "undefined") {
			encoding = UTF8;
		}
		obj = new ByteString(obj, encoding);
	}

	var os = this.getOutputStream();
	os.write(obj);
	this.close();
}



/**
 * Return list of files contained in the directory referenced by the File object
 *
 * @type String[]
 * @return the list of file names
 */
File.prototype.list = function() {
	var list = this.getFile().list();
	var jslist = [];

	if (list) {
		for (var i = 0; i < list.length; i++) {
			jslist.push(new String(list[i]));
		}
	}

	return jslist;
}



/**
 * Return the parent file of this file object
 *
 * @type File
 * @return the parent file object or null
 */
File.prototype.getParentFile = function() {
	var file = this.getFile();
	var parent = file.getParent();
	if (parent == null) {
		return null;
	}
	return new File(parent);
}



File.test = function() {
	var file = new File("test.bin");
	var b = new ByteString("Hello World", ASCII);
	file.writeAll(b);

	var file = new File("test.bin");
	var c = file.readAllAsBinary();
	print(c.toString(ASCII));

	var file = new File("test.txt");
	var s = "Hello World";
	file.writeAll(s);

	var file = new File("test.txt");
	var c = file.readAllAsString();
	print(c);

	var dir = file.getParentFile();
	print(dir.getAbsolutePath());
	print(dir.list());

}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2026 CardContact Systems GmbH
 * |'##> <##'|  32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview File encryptor.
 */

var CVC = require("scsh/eac/CVC").CVC;
var PKIXCommon = require("scsh/x509/PKIXCommon").PKIXCommon;



/**
 * Craate a FileEncryptor instance.
 *
 * @class Class implementing file encryption
 * @constructor
 * @param {SmartCardHSM} sc the SmartCardHSM object used to access the token or undefined at the sender in the hybrid scheme.
 * @param {Number} mode the mode to use (One of FileEncryptor.NATIVE, .DERIVED or .HYBRID). Must be specified at the sending side.
 */
 function FileEncryptor(sc, mode) {
	this.mode = mode;
	this.sc = sc;
	this.crypto = new Crypto();

	this.keyId = new ByteString("UNKNOWN", ASCII);
}

exports.FileEncryptor = FileEncryptor;

FileEncryptor.NATIVE = 1;
FileEncryptor.DERIVED = 2;
FileEncryptor.HYBRID = 3;



/**
 * Get the crypto object.
 *
 * @private
 * @type Crypto
 * @return the crypto object.
 */
FileEncryptor.prototype.getCrypto = function() {
	if (typeof(this.sc) != "undefined") {
		return this.sc.getCrypto();
	}
	return this.crypto;
}



/**
 * Generate the IV
 *
 * @private
 */
FileEncryptor.prototype.generateIV = function() {
	this.iv = this.crypto.generateRandom(16);
}



/**
 * Calculate the hash of the encrypted payload.
 *
 * @private
 * @param {ByteString} content the encrypted payload
 * @type ByteString
 * @return the hash value.
 */
FileEncryptor.prototype.calculateHash = function(content) {
	return this.crypto.digest(Crypto.SHA_256, content);
}



/**
 * Create the TLV encoded header of the encrypted file.
 *
 * @private
 * @type ASN1
 * @return the header.
 */
FileEncryptor.prototype.createHeader = function() {
	var tbs = new ASN1("tbs", ASN1.SEQUENCE,
				new ASN1("oid", ASN1.OBJECT_IDENTIFIER, new ByteString("CardContact 4 6 " + this.mode, OID)),
				new ASN1("keyId", ASN1.OCTET_STRING, this.keyId),
				new ASN1("hash", ASN1.OCTET_STRING, this.hash),
				new ASN1("iv", ASN1.OCTET_STRING, this.iv),
				new ASN1("extensions", ASN1.SEQUENCE)
			);

	if (this.mode == FileEncryptor.HYBRID) {
		tbs.add(new ASN1("senderPublicKey", 0xA0, PKIXCommon.createECSubjectPublicKeyInfo(this.pukey)));
	}

	var mac = this.getCrypto().sign(this.mackey, Crypto.AES_CMAC, tbs.getBytes());

	var header =
		new ASN1("EncryptionHeader", ASN1.SEQUENCE,
			tbs,
			new ASN1("mac", ASN1.OCTET_STRING, mac)
		);

	return header;
}



/**
 * Parse the header of the encrypted file.
 *
 * @param {ByteString} buffer the encrypted file with header.
 * @type Number
 * @return the offset at which the payload starts.
 */
FileEncryptor.prototype.parseHeader = function(buffer) {
	if (buffer.byteAt(0) != 0x30) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Header corrupted");
	}

	var a = new ASN1(buffer);

	if (a.elements != 2) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Header corrupted");
	}

	this.mac = a.get(1).value;
	this.tbs = a.get(0);
	if ((this.tbs.elements < 5) || (this.tbs.elements > 6)) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Header corrupted");
	}

	var oid = this.tbs.get(0).value;
	if (!oid.startsWith(new ByteString("CardContact 4 6", OID))) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "File format not supported");
	}

	this.mode = oid.byteAt(oid.length - 1);
	this.keyId = this.tbs.get(1).value;
	this.hash = this.tbs.get(2).value;
	this.iv = this.tbs.get(3).value;

	if (this.tbs.elements == 6) {
		// Parse sender public key
		var spki = this.tbs.get(5).get(0);
		var oid = spki.get(0).get(1).value;
		var pk = spki.get(1).value.bytes(2);
		this.pukey = new Key();
		this.pukey.setType(Key.PUBLIC);
		this.pukey.setComponent(Key.ECC_CURVE_OID, oid);
		this.pukey.setComponent(Key.ECC_QX, pk.left(pk.length >> 1));
		this.pukey.setComponent(Key.ECC_QY, pk.right(pk.length >> 1));
	}

	return a.size;
}



/**
 * Validate the Message Authentication Code (MAC) over the header.
 *
 * @throws GPError is MAC verification failed.
 */
FileEncryptor.prototype.validateHeader = function() {
	var mac = this.getCrypto().sign(this.mackey, Crypto.AES_CMAC, this.tbs.getBytes());
	if (!mac.equals(this.mac)) {
		throw new GPError(module.id, GPError.CRYPTO_FAILED, 0, "Integrity check failed (Invalid MAC).");
	}
}



/**
 * Generate ephemeral EC key pair at the sending side in hybrid scheme.
 *
 * @param {Key} key the domain parameter.
 */
FileEncryptor.prototype.generateEphemeralKeyPair = function(dp) {
	this.prkey = new Key(dp);
	this.prkey.setType(Key.PRIVATE);

	this.pukey = new Key(dp);
	this.pukey.setType(Key.PUBLIC);

	this.crypto.generateKeyPair(Crypto.EC, this.pukey, this.prkey);
}



/**
 * Derive a AES key from a AES master key using a CMAC based Key Derivation Function in
 * Counter Mode as per NIST SP 800-108.
 *
 * @param {Key} key the AES master key.
 * @param {Number} size the requested number of derived bytes.
 * @param {ByteString} context the derivation context used to differ keys derived from the same master.
 * @type ByteString
 * @return the derived key value.
 */
FileEncryptor.prototype.keyDerivationFunction1 = function(key, size, context) {
	var dd = new ByteBuffer();
	var os = size;
	var iter = 1;
	while (os > 0) {
		var dp = new ByteBuffer();
		dp.append(ByteString.valueOf(iter, 4));
		dp.append(context);
		dp.append(ByteString.valueOf(size << 3, 4));

		var mac = this.getCrypto().sign(key, Crypto.AES_CMAC, dp.toByteString());

		dd.append(mac.left(os > mac.length ? mac.length : os));
		os -= mac.length;
		mac.clear();
		iter++;
	}
	var result = dd.toByteString();
	dd.clear();
	return result;
}



/**
 * Derive an AES key from the shared secret resulting from performing the ECDH using
 * a one-step-kdf with SHA-256 (Option 1) as defined in NIST SP 800-56C.
 *
 * @param {Number} id the key identifier (0x01 for K.ENC, 0x02 for K.MAC).
 * @param {ByteString} sharedSecret the shared secret resulting from ECDH.
 * @return the key value as 32 bytes.
 */
FileEncryptor.prototype.keyDerivationFunction2 = function(id, sharedSecret) {
	var inp = ByteString.valueOf(1, 4).concat(sharedSecret).concat(ByteString.valueOf(id));
	var res = this.crypto.digest(Crypto.SHA_256, inp);
	inp.clear();
	return res;
}



/**
 * Derive K.ENC and K.MAC based on the selected scheme.
 *
 * @param {Key} key the AES key or private EC key.
 * @param {CVC} key the CVC with the public of the receiver.
 */
FileEncryptor.prototype.deriveKey = function(key) {
	if (typeof(this.iv) == "undefined") {
		this.generateIV();
	}

	switch(this.mode) {
		case FileEncryptor.NATIVE:
			this.mackey = key;
			this.enckey = key;
			if (typeof(key.getPKCS15Id) == "function") {
				this.keyId = key.getPKCS15Id();
			}
			break;
		case FileEncryptor.DERIVED:
			this.mackey = key;
			this.enckey = new Key();
			var kv = this.keyDerivationFunction1(key, key.getSize() >> 3, this.iv);
			this.enckey.setComponent(Key.AES, kv);
			kv.clear();

			if (typeof(key.getPKCS15Id) == "function") {
				this.keyId = key.getPKCS15Id();
			}
			break;
		case FileEncryptor.HYBRID:
			var ss;
			if (key instanceof CVC) {
				var pk = key.getPublicKey();
				this.generateEphemeralKeyPair(pk);
				var point = pk.getComponent(Key.ECC_QX).concat(pk.getComponent(Key.ECC_QY));
				ss = this.crypto.decrypt(this.prkey, Crypto.ECDHP, point, new ByteString("", HEX));
				this.keyId = key.determineKeyIdentifier();
			} else {
				var point = this.pukey.getComponent(Key.ECC_QX).concat(this.pukey.getComponent(Key.ECC_QY));
				ss = this.getCrypto().decrypt(key, Crypto.ECDHP, point, new ByteString("", HEX));
			}

			this.enckey = new Key();
			var kv = this.keyDerivationFunction2(1, ss);
			this.enckey.setComponent(Key.AES, kv);
			kv.clear();

			this.mackey = new Key();
			var kv = this.keyDerivationFunction2(2, ss);
			this.mackey.setComponent(Key.AES, kv);
			kv.clear();
			ss.clear();
			break;
		default:
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "Mode not defined or invalid");
	}
}



/**
 * Encrypt the buffer with K.ENC previously derived with deriveKey() and prepend header.
 *
 * @param {ByteString} plain the plain input. The caller should clear the buffer after use with plain.clear().
 * @type ByteString
 * @return the header concatenated with the encrypted payload.
 */
FileEncryptor.prototype.encrypt = function(plain) {

	var p = plain.pad(Crypto.ISO9797_METHOD_2_16);

	var c = this.getCrypto().encrypt(this.enckey, Crypto.AES_CBC, p, this.iv);
	p.clear();

	this.hash = this.calculateHash(c);

	var header = this.createHeader();

	return header.getBytes().concat(c);
}



/**
 * Validate and strip the ISO padding.
 *
 * @param {ByteString} buffer the decrypted buffer.
 * @throw GPError is padding is invalid, indicating the wrong key or corrupted cipher.
 * @type ByteString
 * @return the buffer without padding.
 */
FileEncryptor.stripPadding = function(buffer) {

	var ofs = buffer.length - 1;
	while((ofs > 0) && (buffer.byteAt(ofs) == 0)) {
		ofs--;
	}

	if ((ofs <= 0) || (buffer.byteAt(ofs) != 0x80)) {
		throw new GPError(module.id, GPError.CRYPTO_FAILED, 0, "Plain block has invalid padding. Key probably wrong.");
	}

	return buffer.left(ofs);
}



/**
 * Validate and decrypt the payload.
 *
 * @param {ByteString} buffer the encrypted payload.
 * @type ByteString
 * @return the plain content.
 */
FileEncryptor.prototype.decrypt = function(buffer) {

	this.validateHeader();

	var hash = this.calculateHash(buffer);
	if (!hash.equals(this.hash)) {
		throw new GPError(module.id, GPError.CRYPTO_FAILED, 0, "Integrity check failed (Invalid hash).");
	}

	var pp = this.getCrypto().decrypt(this.enckey, Crypto.AES_CBC, buffer, this.iv);
	var p = FileEncryptor.stripPadding(pp);
	pp.clear();

	return p;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2026 CardContact Systems GmbH
 * |'##> <##'|  32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Public Key File Format
 */

var File = require("scsh/file/File").File;
var SmartCardHSM = require("scsh/sc-hsm/SmartCardHSM").SmartCardHSM;
var CVC = require("scsh/eac/CVC").CVC;



/**
 * Create a Public Key File object.
 *
 * @class Read and write encoded SmartCard-HSM public keys.
 * @constructor
 * @param {String} arg the file to read from
 * @param {CVC[]} arg the certificate chain with the public key first.
 */
function PublicKeyFile(arg) {
	if (typeof(arg == "string")) {
		var f = new File(arg);
		var bin = f.readAllAsBinary();
		this.parse(bin);
	} else {
		this.chain = arg;
	}
}

exports.PublicKeyFile = PublicKeyFile;



PublicKeyFile.prototype.getChain = function() {
	return this.chain;
}



/**
 * Parse the binary file content as TLV structure and validate the certificate chain.
 *
 * @param {ByteString} content the file content.
 */
PublicKeyFile.prototype.parse = function(content) {
	if (content.byteAt(0) != 0x30) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "File does not contain a public key with certificates");
	}

	var a = new ASN1(content);

	if (a.get(0).tag == ASN1.OBJECT_IDENTIFIER) {
		var oid = new ByteString("CardContact 4 3 1", OID);
		assert(a.get(0).value.equals(oid), "Invalid file format");
		var pk = new CVC(a.find(0x63).get(0));
		var devcert = new CVC(a.find(0x62).get(0));
		var dicacert = new CVC(a.find(0x61).get(0));
	} else {
		var pk = new CVC(a.get(0));
		var devcert = new CVC(a.get(1));
		var dicacert = new CVC(a.get(2));
	}

	var crypto = new Crypto();
	assert(dicacert.verifyWithCVC(crypto, SmartCardHSM.rootCerts[dicacert.getCAR()]));
	assert(devcert.verifyWith(crypto, dicacert.getPublicKey(SmartCardHSM.rootCerts.UTSRCACC100001.getPublicKey()), dicacert.getPublicKeyOID()));

	this.chain = [ pk, devcert, dicacert ];
}



/**
 * Encode the certificate chain in TLV encoding.
 *
 * @type ByteString
 * @return the encoded content for the file
 */
PublicKeyFile.prototype.encode = function() {

	var asn = new ASN1(ASN1.SEQUENCE,
			new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("CardContact 4 3 1", OID)),
			new ASN1(0x61, this.chain[2].getASN1()),
			new ASN1(0x62, this.chain[1].getASN1()),
			new ASN1(0x63, this.chain[0].getASN1())
	);

//	print(asn);
	return asn.getBytes();
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Support for Global Platform SCP03 protocol
 */

var APDU = require('scsh/cardsim/APDU').APDU;



/**
 * Class implementing support for Global Platform SCP03 secure messaging protocol
 *
 * @constructor
 * @param {Crypto} crypto the crypto provider
 * @param {Key} kenc the static secure channel encryption key
 * @param {Key} kmac the static secure channel message authentication code key
 * @param {Key} kdek the static data encryption key
 * @param {ByteString} aid the AID to use for challenge calculation
 */
function GPSCP03(crypto, kenc, kmac, kdek, aid) {
	this.crypto = crypto;
	this.kenc = kenc;
	this.kmac = kmac;
	this.kdek = kdek;
	this.chaining = ByteString.valueOf(0, 16);
	this.enccnt = 1;
	this.seclevel = 0;
	this.keyVersion = 1;
	this.parami = 0;

	if (aid != undefined) {
		assert(aid instanceof ByteString, "Argument aid must be ByteString");
		this.aid = aid;
	} else {
		this.aid = new ByteString("A000000151000000", HEX);
	}
}

exports.GPSCP03 = GPSCP03;



/**
 * Strip the ISO padding from dechipered cryptogram
 *
 * @param {ByteString} the plain text with padding
 * @type ByteString
 * @return the plain text without padding
 */
GPSCP03.stripPadding = function(plain) {
	var i = plain.length - 1;
	while ((i > 0) && (plain.byteAt(i) == 0)) {
		i--;
	}
	if (plain.byteAt(i) != 0x80) {
		throw new GPError(module.id, GPError.CRYPTO_FAILED, 0, "Padding check failed");
	}
	return plain.left(i);
}



/**
 * Reset the internal state
 **/
GPSCP03.prototype.reset = function() {
	this.chaining = ByteString.valueOf(0, 16);
	this.enccnt = 1;
	this.seclevel = 0;
}



/**
 * Called by the secure messaging wrapper to wrap the command APDU
 */
GPSCP03.prototype.wrap = function(apduToWrap, usageQualifier) {

	if (this.seclevel & 0x01) {
		var apdu = new APDU(apduToWrap);

		if (apdu.hasCData()) {
			if (this.seclevel & 0x02) {
				var ivinp = ByteString.valueOf(this.enccnt, 16);
				var iv = this.crypto.encrypt(this.skenc, Crypto.AES_ECB, ivinp);
				var encinp = apdu.getCData().pad(Crypto.ISO9797_METHOD_2_16);

				apdu.setCData(this.crypto.encrypt(this.skenc, Crypto.AES_CBC, encinp, iv));
			}
		} else {
			apdu.setCData(new ByteString("", HEX));
		}

		var bb = new ByteBuffer();
		bb.append(this.chaining);

		var cla = apdu.getCLA();
		if (cla & 0x40) {
			// GP Format
			cla = cla & 0xC0 | 0x40;
			apdu.cla |= 0x40;
		} else {
			// ISO Format
			cla = cla & 0x90 | 0x04;
			apdu.cla |= 0x04;
		}
		bb.append(cla);
		bb.append(apdu.getINS());
		bb.append(apdu.getP1());
		bb.append(apdu.getP2());

		var lc = apdu.getCData().length + 8;
		if (apdu.isExtendedLength()) {
			bb.append(0);
			bb.append(ByteString.valueOf(lc, 2));
		} else {
			bb.append(ByteString.valueOf(lc, 1));
		}

		bb.append(apdu.getCData());
		var mac = this.crypto.sign(this.skmac, Crypto.AES_CMAC, bb.toByteString());

		this.chaining = mac;

		apdu.setCData(apdu.getCData().concat(mac.left(8)));

		if (this.clatransformation) {
			apdu.setCLA(this.clatransformation(apdu.getCLA()));
		}

		apduToWrap = apdu.getCommandAPDU();
	}
	return apduToWrap;
}



/**
 * Called by the secure messaging wrapper to unwrap the response APDU
 */
GPSCP03.prototype.unwrap = function(apduToUnwrap, usageQualifier) {
	if ((this.seclevel & 0x10) && (apduToUnwrap.length > 2)) {
		var bb = new ByteBuffer();
		bb.append(this.chaining);
		bb.append(apduToUnwrap.left(apduToUnwrap.length - 10));
		bb.append(apduToUnwrap.right(2));

		var mac = this.crypto.sign(this.skrmac, Crypto.AES_CMAC, bb.toByteString()).left(8);

		if (!mac.equals(apduToUnwrap.bytes(apduToUnwrap.length - 10, 8))) {
			throw new GPError(module.id, GPError.CRYPTO_FAILED, 0, "MAC on R-Data failed verification");
		}

		if ((this.seclevel & 0x20) && (apduToUnwrap.length > 10)) {
			var ivinp = ByteString.valueOf(0x80).concat(ByteString.valueOf(this.enccnt, 15));
			var iv = this.crypto.encrypt(this.skenc, Crypto.AES_ECB, ivinp);

			var plain = this.crypto.decrypt(this.skenc, Crypto.AES_CBC, apduToUnwrap.left(apduToUnwrap.length - 10), iv);
			apduToUnwrap = GPSCP03.stripPadding(plain).concat(apduToUnwrap.right(2));
		} else {
			apduToUnwrap = apduToUnwrap.left(apduToUnwrap.length - 10).concat(apduToUnwrap.right(2));
		}
	}

	this.enccnt++;

	return apduToUnwrap;
}




/**
 * Counterpart to wrap and meant to be used in a simulator
 */
GPSCP03.prototype.unwrapCommandAPDU = function(apdu) {
	if (this.seclevel == 0) {
		throw new GPError(module.id, GPError.CRYPTO_FAILED, APDU.SW_CONDOFUSENOTSAT, "No secure messaging active");
	}

	if (this.seclevel & 0x01) {
		if (!apdu.hasCData() || apdu.getCData().length < 8) {
			throw new GPError(module.id, GPError.CRYPTO_FAILED, APDU.SW_SMOBJMISSING, "MAC on C-Data missing");
		}
		var bb = new ByteBuffer();
		bb.append(this.chaining);

		var cla = apdu.getCLA();
		if (cla & 0x40) {
			// GP Format
			cla = cla & 0xC0 | 0x40;
		} else {
			// ISO Format
			cla = cla & 0x90 | 0x04;
		}

		bb.append(cla);
		bb.append(apdu.getINS());
		bb.append(apdu.getP1());
		bb.append(apdu.getP2());

		var lc = apdu.getCData().length;
		if (apdu.isExtendedLength()) {
			bb.append(0);
			bb.append(ByteString.valueOf(lc, 2));
		} else {
			bb.append(ByteString.valueOf(lc, 1));
		}

		bb.append(apdu.getCData().left(lc - 8));

		var mac = this.crypto.sign(this.skmac, Crypto.AES_CMAC, bb.toByteString());

		if (!mac.left(8).equals(apdu.getCData().right(8))) {
			throw new GPError(module.id, GPError.CRYPTO_FAILED, APDU.SW_SECSTATNOTSAT, "MAC on C-Data failed verification");
		}

		this.chaining = mac;

		apdu.setCData(apdu.getCData().left(lc - 8));

		if ((this.seclevel & 0x02) && (lc > 8)) {
			var ivinp = ByteString.valueOf(this.enccnt, 16);
			var iv = this.crypto.encrypt(this.skenc, Crypto.AES_ECB, ivinp);

			var plain = this.crypto.decrypt(this.skenc, Crypto.AES_CBC, apdu.getCData(), iv);
			apdu.setCData(GPSCP03.stripPadding(plain));
		}

	}
}



/**
 * Counterpart to unwrap and meant to be used in a simulator
 */
GPSCP03.prototype.wrapResponseAPDU = function(apdu) {
	if (this.seclevel & 0x10) {
		if ((this.seclevel & 0x20) && apdu.hasRData()) {
			var ivinp = ByteString.valueOf(0x80).concat(ByteString.valueOf(this.enccnt, 15));
			var iv = this.crypto.encrypt(this.skenc, Crypto.AES_ECB, ivinp);
			var plain = apdu.getRData().pad(Crypto.ISO9797_METHOD_2_16);

			var cryptogram = this.crypto.encrypt(this.skenc, Crypto.AES_CBC, plain, iv);
			apdu.setRData(cryptogram);
		}

		var bb = new ByteBuffer();
		bb.append(this.chaining);

		bb.append(apdu.getResponseAPDU());

		var mac = this.crypto.sign(this.skrmac, Crypto.AES_CMAC, bb.toByteString()).left(8);

		apdu.setRData(apdu.hasRData() ? apdu.getRData().concat(mac) : mac);
	}

	this.enccnt++;
}



GPSCP03.prototype.setCLATransformation = function(clatransformation) {
	assert(typeof(clatransformation) == "function", "Argument clatransformation must be a function");
	this.clatransformation = clatransformation;
}



/**
 * Issue INITIALIZE UPDATE command to card and parse response
 *
 * @param {Card} card the card to use
 * @param {Number} keyVersion the version of the key to use (0 for default)
 * @param {Number} keyId the key id to use (usually 0)
 */
GPSCP03.prototype.initializeUpdate = function(card, keyVersion, keyId) {
	this.hostChallenge = this.crypto.generateRandom(8);

	var cla = 0x80;
	if (this.clatransformation) {
		cla = this.clatransformation(cla);
	}

	var rsp = card.sendApdu(cla, 0x50, keyVersion, keyId, this.hostChallenge, 0, [0x9000]);

	this.diversificationData = rsp.bytes(0, 10);
	this.keyInformation = rsp.bytes(10, 3);
	this.keyVersion = this.keyInformation.byteAt(0);
	this.parami = this.keyInformation.byteAt(2);
	this.cardChallenge = rsp.bytes(13, 8);
	this.cardCryptogram = rsp.bytes(21, 8);
	if (rsp.length > 29) {
		this.sequenceCounter = rsp.bytes(29,3);
		var context = this.sequenceCounter.concat(this.aid);
		var ref = this.deriveKey(this.kenc, 2, 8, context);
		assert(ref.equals(this.cardChallenge), "Pseudo-random card challenge does not match Kenc");
	}
}



/**
 * Set the sequence number for pseudo-random card challenges
 *
 * @param {ByteString} cnt the last used counter value
 */
GPSCP03.prototype.setSequenceCounter = function(cnt) {
	assert(cnt instanceof ByteString, "Argument cnt must be ByteString");
	assert(cnt.length == 3, "Argument cnt must be 3 bytes long");
	this.sequenceCounter = cnt;
}



/**
 * Set the key version and protocol parameter
 *
 * @param {Number} version the key version indicated in INITIALIZE_UPDATE
 * @param {Number} parami the i parameter for the SCP03 protocol (Default '00')
 */
GPSCP03.prototype.setKeyInfo = function(version, parami) {
	assert(typeof(version) == "number", "Argument version must be of type number");
	if (typeof(parami) != "undefined") {
		this.parami = parami;
	}
	this.keyVersion = version;
	this.keyInformation = ByteString.valueOf(this.keyVersion).concat(ByteString.valueOf(0x03)).concat(ByteString.valueOf(this.parami));
}



/**
 * Determine random or pseudo-random card challenge
 *
 */
GPSCP03.prototype.determineCardChallenge = function() {
	if (typeof(this.sequenceCounter) == "undefined") {
		this.cardChallenge = this.crypto.generateRandom(8);
	} else {
		var cnt = this.sequenceCounter.toUnsigned() + 1;
		this.sequenceCounter = ByteString.valueOf(cnt, 3);
		var context = this.sequenceCounter.concat(this.aid);
		this.cardChallenge = this.deriveKey(this.kenc, 2, 8, context);
	}
}



/**
 * Handle processing of INITIALIZE UPDATE command
 *
 * @param {ByteString} hostCryptogram the cryptogram calculated at the host
 */
GPSCP03.prototype.handleInitializeUpdate = function(hostChallenge) {
	this.hostChallenge = hostChallenge;
	this.determineCardChallenge();

	this.diversificationData = new ByteString("0102030405060708090A", HEX);

	if (typeof(this.keyInformation) == "undefined") {
		this.keyInformation = new ByteString("010300", HEX);
	}

	this.deriveSessionKeys();
	var context = this.hostChallenge.concat(this.cardChallenge);
	this.cardCryptogram = this.deriveKey(this.skmac, 0, 8, context);

	this.seclevel = 1;
	this.chaining = ByteString.valueOf(0, 16);

	var bb = new ByteBuffer();
	bb.append(this.diversificationData);
	bb.append(this.keyVersion);
	bb.append(0x03);
	bb.append(this.parami);
	bb.append(this.cardChallenge);
	bb.append(this.cardCryptogram);
	if (this.sequenceCounter != undefined) {
		bb.append(this.sequenceCounter);
	}
	return bb.toByteString();
}



/**
 * Issue EXTERNAL AUTHENTICATE command to card.
 *
 * @param {Card} card the card to use
 * @param {Number} level the security level (a combination of bits B5 (R-ENC), B4 (R-MAC), B2 (C-ENC) and B1 (C-MAC))
 * @param {ByteString} hostCryptogram optional parameter, calculated internally if missing
 */
GPSCP03.prototype.externalAuthenticate = function(card, level, hostCryptogram) {
	assert(card instanceof Card, "Argument card must be instance of Card");
	assert(typeof(level) == "number", "Argument level must be a number");
	assert((level & ~0x33) == 0, "Argument level must use only bits B5,B4,B2 or B1");
	assert((hostCryptogram == undefined) || (hostCryptogram instanceof ByteString), "hostCryptogram must be missing or ByteString");

	if (hostCryptogram == undefined) {
		this.calculateHostCryptogram();
	} else {
		this.hostCryptogram = hostCryptogram;
	}
	this.seclevel = 1;

	card.sendSecMsgApdu(Card.ALL, 0x80, 0x82, level, 0x00, this.hostCryptogram, [0x9000]);
	this.seclevel = level;
	this.enccnt = 1;
}



/**
 * Handle processing of PUT KEY command
 *
 * @param {ByteString} cdata the C-Data field of the APDU
 */
GPSCP03.prototype.handlePutKey = function(cdata) {
	var version = cdata.byteAt(0);
	cdata = cdata.bytes(1);
	var kd = GPSCP03.parseKeyDataField(cdata);
	var kenc = this.validateKeyBlock(kd);
	cdata = cdata.bytes(kd.length);

	var kd = GPSCP03.parseKeyDataField(cdata);
	var kmac = this.validateKeyBlock(kd);
	cdata = cdata.bytes(kd.length);

	var kd = GPSCP03.parseKeyDataField(cdata);
	var kdek = this.validateKeyBlock(kd);

	this.keyVersion = version;
	this.kenc = kenc;
	this.kmac = kmac;
	this.kdek = kdek;
}



/**
 * Derive S-ENC, S-MAC and S-RMAC session keys
 */
GPSCP03.prototype.deriveSessionKeys = function() {
	var context = this.hostChallenge.concat(this.cardChallenge);

	var keysize = this.kmac.getSize() >> 3;

	// Derive S-MAC
	var ss = this.deriveKey(this.kmac, 6, keysize, context);
	this.skmac = new Key();
	this.skmac.setComponent(Key.AES, ss);

	// Derive S-RMAC
	var ss = this.deriveKey(this.kmac, 7, keysize, context);
	this.skrmac = new Key();
	this.skrmac.setComponent(Key.AES, ss);

	// Derive S-ENC
	var ss = this.deriveKey(this.kenc, 4, keysize, context);
	this.skenc = new Key();
	this.skenc.setComponent(Key.AES, ss);
}



/**
 * Verify card cryptogram
 *
 * @type boolean
 * @return true if cryptogram is valid
 */
GPSCP03.prototype.verifyCardCryptogram = function() {
	var context = this.hostChallenge.concat(this.cardChallenge);

	var ss = this.deriveKey(this.skmac, 0, 8, context);
	return ss.equals(this.cardCryptogram);
}



/**
 * Calculate host cryptogram using the key derive method
 *
 * @type ByteString
 * @return the 8 byte cryptogram
 */
GPSCP03.prototype.calculateHostCryptogram = function() {
	var context = this.hostChallenge.concat(this.cardChallenge);

	this.hostCryptogram = this.deriveKey(this.skmac, 1, 8, context);
	return this.hostCryptogram;
}



/**
 * Encrypt key and prepare key block for PUT KEY command
 *
 * @param {Key} dek the data encryption key
 * @param {Key} key the key to wrap
 * @type ByteString
 * @return the key type, length, cryptogram and key check value
 */
GPSCP03.prototype.prepareKeyBlock = function(dek, key) {
	assert(dek instanceof Key, "Argument dek must be instance of Key");
	assert(key instanceof Key, "Argument key must be instance of Key");

	var keysize = key.getSize() >> 3;
	var ones = new ByteString("01010101010101010101010101010101", HEX);
	var kcv = this.crypto.encrypt(key, Crypto.AES_ECB, ones).left(3);

	var iv = ByteString.valueOf(0, 16);
	var ck = this.crypto.encrypt(dek, Crypto.AES_CBC, key.getComponent(Key.AES), iv);
	var ckbin = new ByteBuffer("88", HEX);
	ckbin.append(keysize + 1);
	ckbin.append(keysize);
	ckbin.append(ck);
	ckbin.append(3);
	ckbin.append(kcv);

	return ckbin.toByteString();
}



/**
 * Extract a key data field from C-Data in a PUT KEY APDU
 *
 * @param {ByteString} keyDataField the list of key data fields
 * @type ByteString
 * @return the extracted key data
 */
GPSCP03.parseKeyDataField = function(keyDataField) {
	var i = keyDataField.byteAt(1);
	if (i - 1 != keyDataField.byteAt(2)) {
		throw new GPError(module.id, GPError.INVALID_DATA, APDU.SW_INVDATA, "Field length does not match");
	}
	i += 2;
	i += keyDataField.byteAt(i) + 1;
	return keyDataField.left(i);
}



/**
 * Decrypt and validate key blob containing AES key wrapped with DEK
 *
 * @param {ByteString} keyblob the wrapped key
 * @type Key
 * @return the unwrapped key
 */
GPSCP03.prototype.validateKeyBlock = function(keyblob) {
	assert(keyblob instanceof ByteString, "Argument keyblob must be instance of ByteString");

	if (keyblob.byteAt(0) != 0x88) {
		throw new GPError(module.id, GPError.INVALID_DATA, APDU.SW_INVDATA, "AES key blob must start with '88'");
	}

	var l = keyblob.byteAt(1);
	if (keyblob.length <= l + 2) {
		throw new GPError(module.id, GPError.INVALID_DATA, APDU.SW_INVDATA, "Length exceeds key blob");
	}

	var kcvlen = keyblob.byteAt(3 + l - 1);
	var ck = keyblob.bytes(3, l - 1);
	var iv = ByteString.valueOf(0, 16);
	var plain = this.crypto.decrypt(this.kdek, Crypto.AES_CBC, ck, iv);

	var key = new Key();
	key.setComponent(Key.AES, plain);

	var ones = new ByteString("01010101010101010101010101010101", HEX);
	var kcv = this.crypto.encrypt(key, Crypto.AES_ECB, ones).left(kcvlen);

	if (!keyblob.right(3).equals(kcv)) {
		throw new GPError(module.id, GPError.CRYPTO_FAILED, APDU.SW_SECSTATNOTSAT, "KCV does not match");
	}
	return key;
}



/**
 * Derive a session key or cryptogram
 *
 * @param {Key} key the master key
 * @param {Number} ddc the data derivation constant
 * @param {Number} size the size of byte of the resulting key or cryptogram
 * @param {ByteString} context the context (usually hostChallenge || cardChallenge)
 * @return the derived value
 * @type ByteString
 */
GPSCP03.prototype.deriveKey = function(key, ddc, size, context) {
	assert(key instanceof Key, "Argument key must be instance of Key");
	assert(typeof(ddc) == "number", "Argument ddc must be a number");
	assert(typeof(size) == "number", "Argument size must be a number");
	assert(context instanceof ByteString, "Argument context must be instance of ByteString");

	var dd = new ByteBuffer();
	var os = size;
	var iter = 1;
	while (os > 0) {
		var dp = new ByteBuffer();
		dp.append(ByteString.valueOf(ddc, 12));
		dp.append(0);
		dp.append(ByteString.valueOf(size << 3, 2));
		dp.append(ByteString.valueOf(iter));
		dp.append(context);

		var mac = this.crypto.sign(key, Crypto.AES_CMAC, dp.toByteString());

		dd.append(mac.left(os > mac.length ? mac.length : os));
		os -= mac.length;
		iter++;
	}
	return dd.toByteString();
}



GPSCP03.test = function() {
	var crypto = new Crypto();

	var kmac = new Key();
	kmac.setComponent(Key.AES, new ByteString("404142434445464748494a4b4c4d4e4f", HEX));

	var kenc = new Key();
	kenc.setComponent(Key.AES, new ByteString("404142434445464748494a4b4c4d4e4f", HEX));

	var kdek = new Key();
	kdek.setComponent(Key.AES, new ByteString("404142434445464748494a4b4c4d4e4f", HEX));

	var card = new Card(_scsh3.reader);

	card.sendApdu(0x00, 0xA4, 0x04, 0x00, new ByteString("A000000151000000", HEX));

	var scp = new GPSCP03(crypto, kenc, kmac, kdek);

	scp.initializeUpdate(card, 0, 0);
	scp.deriveSessionKeys();
	assert(scp.verifyCardCryptogram());
	card.setCredential(scp);
	scp.externalAuthenticate(card, 1);

	var aid = new ByteString("E82B0601040181C31F0202", HEX);
	var cdata = (new ASN1(0x4F, aid)).getBytes();

	card.sendSecMsgApdu(Card.ALL, 0x80, 0xE4, 0x00, 0x80, cdata, [0x9000, 0x6A88]);
	card.sendSecMsgApdu(Card.ALL, 0x80, 0xE4, 0x00, 0x80, cdata, 0, [0x9000, 0x6A88]);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Simple CVC-CA
 */

PKIXCommon 		= require('scsh/x509/PKIXCommon').PKIXCommon;

//
//	CscaMasterList
//	{ iso-itu-t(2) international-organization(23) icao(136) mrtd(1)
//	security(1) masterlist(2)}
//
//	DEFINITIONS IMPLICIT TAGS ::=
//	BEGIN
//
//	IMPORTS
//
//	-- Imports from RFC 3280 [PROFILE], Appendix A.1
//		Certificate
//			FROM PKIX1Explicit88
//				{ iso(1) identified-organization(3) dod(6)
//				internet(1) security(5) mechanisms(5) pkix(7)
//				mod(0) pkix1-explicit(18) };
//
//	-- CSCA Master List
//
//	CscaMasterListVersion ::= INTEGER {v0(0)}
//
//	CscaMasterList ::= SEQUENCE {
//		version		CscaMasterListVersion,
//		certList	SET OF Certificate }
//
//	-- Object Identifiers
//
//	id-icao OBJECT IDENTIFIER ::= {2 23 136 }
//	id-icao-mrtd OBJECT IDENTIFIER ::= {id-icao 1}
//	id-icao-mrtd-security OBJECT IDENTIFIER ::= {id-icao-mrtd 1}
//	id-icao-cscaMasterList OBJECT IDENTIFIER ::= {id-icao-mrtd-security 2}
//	id-icao-cscaMasterListSigningKey OBJECT IDENTIFIER ::= {id-icao-mrtd-security 3}
//	END


/**
 * Create MasterList object initialized from passed Master List
 *
 * @constructor
 * @param {ByteString} masterList the binary master list
 */
function MasterList(masterList) {
	this.masterList = masterList;
	this.mlcms = new CMSSignedData(this.masterList);

	var ct = this.mlcms.getEContentType();

	if (!ct.equals(new ByteString("id-icao-cscaMasterList", OID))) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Content type is not id-icao-cscaMasterList, but " + ct.toString(OID));
	}

	var signers = this.mlcms.getNumberOfSigners();
	if (signers < 1) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "No signer found in master list");
	}

	var cert = this.mlcms.getCertificate(0);
	this.signerDN = cert.getSubjectDNString();
	GPSystem.log(GPSystem.DEBUG, module.id, "Signed by   : " + this.signerDN);

	var rdns = PKIXCommon.parseDN(this.signerDN);

	var cn = rdns[rdns.length - 1].CN;
	if (!cn) {
		cn = rdns[0].CN;
	}

	this.signerCN = cn;
	GPSystem.log(GPSystem.DEBUG, module.id, "Signer CN   : " + this.signerCN);

	this.signingTime = this.mlcms.getSignerInfoSignedAttribute(0, CMSSignedData.ATTR_SIGNINGTIME).toString(ASCII);
	GPSystem.log(GPSystem.DEBUG, module.id, "Signing time: " + this.signingTime);
}

exports.MasterList = MasterList;



/**
 * Check if certificate is a root certificate
 *
 * @private
 * @param {X509} cert the certificate
 * @type boolean
 * @return true if self-signed root
 */
MasterList.isRootCondition = function(issuer, subject, autid, subid) {
	if (autid) {
		return autid.equals(subid);
	}

	return (issuer.equals(subject));
}



/**
 * Check if certificate is a root certificate
 *
 * @param {X509} cert the certificate
 * @type boolean
 * @return true if self-signed root
 */
MasterList.isRoot = function(cert) {
	var issuer = cert.getIssuerDNString();
	var subject = cert.getSubjectDNString();
	var autid = cert.getAuthorityKeyIdentifier();
	var subid = cert.getSubjectKeyIdentifier();
	return MasterList.isRootCondition(issuer, subject, autid, subid);
}



/**
 * Get the master list signing time
 *
 * @type Date
 * @return the date and time when the master list was signed
 */
MasterList.prototype.getSigningTime = function() {
	var st = this.signingTime;

	var year = 2000 + parseInt(st.substr(0,2), 10);
	var mon = parseInt(st.substr(2,2), 10) - 1;
	var day = parseInt(st.substr(4,2), 10);
	var hour = parseInt(st.substr(6,2), 10);
	var min = parseInt(st.substr(8,2), 10);
	var sec = parseInt(st.substr(10,2), 10);

	return new Date(Date.UTC(year, mon, day, hour, min, sec));
}



/**
 * Get the master list signer DN
 *
 * @type String
 * @return the signer DN
 */
MasterList.prototype.getSignerDN = function() {
	return this.signerDN;
}



/**
 * Get the list of certificates from the Master List
 *
 * @type X509[]
 * @return the list of certificates
 */
MasterList.prototype.getCertificateList = function() {
	var sc = this.mlcms.getSignedContent();

	var a = new ASN1(sc);
	var version = a.get(0).value;
	assert(version.byteAt(0) == 0, "version must be 0");
	var certList = a.get(1);

	var list = [];

	for (var i = 0; i < certList.elements; i++) {
		var certbin = certList.get(i).getBytes();
		var cert = new X509(certbin);
		list.push(cert);
	}
	return list;
}



/**
 * Get the list of certificates from the Master List
 *
 * @type X509[]
 * @return the list of certificates
 */
MasterList.prototype.decode = function() {
	var sc = this.mlcms.getSignedContent();

	var a = new ASN1(sc);
	var version = a.get(0).value;
	assert(version.byteAt(0) == 0, "version must be 0");
	var certList = a.get(1);

	this.kidMap = {};
	this.dnMap = {};

	for (var i = 0; i < certList.elements; i++) {
		var certbin = certList.get(i).getBytes();
		var cert = new X509(certbin);

		var issuer = cert.getIssuerDNString();
		var subject = cert.getSubjectDNString();
		var autid = cert.getAuthorityKeyIdentifier();
		var subid = cert.getSubjectKeyIdentifier();

		if (MasterList.isRootCondition(issuer, subject, autid, subid)) {
			GPSystem.log(GPSystem.DEBUG, module.id, "+I:" + issuer);
			GPSystem.log(GPSystem.DEBUG, module.id, "+S:" + subject);
			if (this.kidMap[subid.toString(HEX)]) {
				GPSystem.log(GPSystem.DEBUG, module.id, "Duplicate root certificate for key id " + subid);
			}
			this.kidMap[subid.toString(HEX)] = cert;
			this.dnMap[subject] = cert;
		} else {
			GPSystem.log(GPSystem.DEBUG, module.id, "-I:" + issuer);
			GPSystem.log(GPSystem.DEBUG, module.id, "-S:" + subject);
		}
	}
}



/**
 * Validate master list certificate and signature using existing master list as trust anchor
 *
 * This method will accept any CSCA certificate in the master list as CA for the master list signer certificate
 *
 * Throws an exception if validation failed.
 *
 * @param {MasterList} masterlist the existing master list
 */
MasterList.prototype.validateWithMasterList = function(masterlist) {
	var cert = this.mlcms.getCertificate(0);

	var autid = cert.getAuthorityKeyIdentifier();

	var issuer = masterlist.getCertificateByKeyId(autid);
	if (!issuer) {
		throw new GPError("", GPError.OBJECT_NOT_FOUND, 0, "No certificate found to validate Master List signer certificate");
	}

	cert.verifyWith(issuer);

	if (!this.mlcms.isSignerInfoSignatureValid(0, cert.getBytes())) {
		throw new GPError("", GPError.SIGNATURE_FAILED, 0, "Master List signature verification failed");
	}
}



/**
 * Return trusted certificate with the given SubjectkeyIdentifier
 *
 * @param {ByteString} keyId the key identifier
 * @type X509
 * @return the certificate or undefined
 */
MasterList.prototype.getCertificateByKeyId = function(keyId) {
	return(this.kidMap[keyId.toString(HEX)]);
}



/**
 * Return trusted certificate with the given Subject DN
 *
 * @param {String} dn the issuer's DN
 * @type X509
 * @return the certificate or undefined
 */
MasterList.prototype.getCertificateByDN = function(dn) {
	return(this.dnMap[dn]);
}



/**
 * Return encoded Masterlist
 *
 * @type ByteString
 * @return the encoded master list
 */
MasterList.prototype.getBytes = function() {
	return this.masterList;
}



MasterList.prototype.toString = function() {
	return this.signerCN + " (" + this.signingTime.toString(ASCII) + ")";
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2016 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Master List Signer
 */



X509CertificateGenerator = require('scsh/x509/X509CertificateGenerator').X509CertificateGenerator;
PKIXCommon = require('scsh/x509/PKIXCommon').PKIXCommon;



function MasterListSigner() {
	this.cms = new CMSGenerator(CMSGenerator.TYPE_SIGNED_DATA);

	// Default Distinguished Names
	this.cscaDN = { C:"UT", O:"IT", OU:"SEC", CN:"CSCA Self Signed" };
	this.mlsDN = { C:"UT", O:"IT", OU:"SEC", CN:"CSCA Master List Signer" };
}

exports.MasterListSigner = MasterListSigner;



/**
 * Set a list of CSCA certificates to this Master List
 *
 * @param {X509[]} the list of CSCA certificates
 */
MasterListSigner.prototype.setCSCACertificateList = function(certificates) {
	var content = new ASN1(ASN1.SEQUENCE);

	// Add CscaMasterList Version
	content.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));

	// Add set of certificates
	var certSet = new ASN1(ASN1.SET);
	for (var i = 0; i < certificates.length; i++) {
		certSet.add(new ASN1(certificates[i].getBytes()));
	}
	// Add CSCA certificate
	certSet.add(new ASN1(this.cscaCert.getBytes()));
	content.add(certSet);

	this.cms.setDataContent(content.getBytes());
}



/**
 * Add certificates which belong to the CMS SignedData type.
 * According to the TR-CSCA countersigning and Master List Issuance V1.0
 * the signer certificate must be included and the csca certificate should be
 * included.
 *
 * @param {X509} signerCertificate the Master List Signer Certificate
 * @param {X509} cscaCertificate the optional CSCA certificate
 */
MasterListSigner.prototype.addSignerCertificates = function(signerCertificate, cscaCertificate) {
	this.cms.addCertificate(signerCertificate);
	if (cscaCertificate) {
		this.cms.addCertificate(cscaCertificate);
	}
}



/**
 * Add signing key, certificate and hash algorithm to this Master List Signer.
 *
 * @param {Key} signingKey the signing key of this Master List Signer
 * @param {X509} signerCertificate the signer certificate of this Master List Signer
 * @param {ByteString} hashOID the hash algorithm OID used for signing
 */
MasterListSigner.prototype.addSignerWithIssuerAndSerial = function(signingKey, signerCertificate, hashOID) {
	this.cms.addSigner(signingKey, signerCertificate, hashOID);
}



/**
 * Add signing key, certificate and hash algorithm to this Master List Signer.
 *
 * @param {Key} signingKey the signing key of this Master List Signer
 * @param {X509} signerCertificate the signer certificate of this Master List Signer
 * @param {ByteString} hashOID the hash algorithm OID used for signing
 */
MasterListSigner.prototype.addSignerWithSubjectKeyID = function(signingKey, signerCertificate, hashOID) {
	var keyID = signerCertificate.getNative().getExtensionValue("2.5.29.14").bytes(4);
	this.cms.addSigner(signingKey, keyID, hashOID);
}



/**
 * Helper function to generate certificates
 *
 * @param {Key} priKey the signing key
 * @param {Key} pubKey the certificates public key
 * @param {Object} issuer the issuer name
 * @param {Object} subject the subject name
 * @param {Key} signerPubKey the optional signer's public key which will be referenced in the authority key identifier
 */
MasterListSigner.prototype.generateCertificate = function(priKey, pubKey, issuer, subject, signerPubKey) {
	var crypto = new Crypto();

	var x = new X509CertificateGenerator(crypto);

	x.reset();
	x.setSerialNumber(new ByteString("01", HEX));
	x.setSignatureAlgorithm(Crypto.RSA_SHA256);

	x.setIssuer(issuer);
	var t = new Date();
	x.setNotBefore(t);
	x.setNotAfter(PKIXCommon.addDays(t, 180));
	x.setSubject(subject);

	x.setPublicKey(pubKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );

	x.addBasicConstraintsExtension(true, 0);
	x.addSubjectKeyIdentifierExtension();
	if (signerPubKey) {
		x.addAuthorityKeyIdentifierExtension(signerPubKey);
	}

	var cert = x.generateX509Certificate(priKey);
	return cert;
}



/**
 * Generate CSCA key pair and root certificate
 *
 * @param {Object} dn the optional distinguished name
 */
MasterListSigner.prototype.setupCSCA = function(dn) {
	if (dn) {
		this.cscaDN = dn;
	}

	// CA Key Pair
	this.cscaPriKey = new Key();
	this.cscaPriKey.setType(Key.PRIVATE);
	this.cscaPubKey = new Key();
	this.cscaPubKey.setType(Key.PUBLIC);
	this.cscaPubKey.setSize(2048);
	var crypto = new Crypto();
	crypto.generateKeyPair(Crypto.RSA, this.cscaPubKey, this.cscaPriKey);

	// CA Root Certificate
	this.cscaCert = this.generateCertificate(this.cscaPriKey, this.cscaPubKey, this.cscaDN, this.cscaDN, this.cscaPubKey);
}



/**
 * Generate Master List Signer key pair and certificate
 * issued by the CSCA
 *
 * @param {Object} dn the optional distinguished name
 */
MasterListSigner.prototype.setupSigner = function(dn) {
	if (!this.cscaPriKey || !this.cscaCert) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Missing CSCA private key or certificate");
	}

	if (dn) {
		this.mlsDN = dn;
	}

	// Master List Key Pair
	this.mlPriKey = new Key();
	this.mlPriKey.setType(Key.PRIVATE);
	this.mlPubKey = new Key();
	this.mlPubKey.setType(Key.PUBLIC);
	this.mlPubKey.setSize(2048);
	var crypto = new Crypto();
	crypto.generateKeyPair(Crypto.RSA, this.mlPubKey, this.mlPriKey);

	// Master List Signer Certificate
	this.mlCert = this.generateCertificate(this.cscaPriKey, this.mlPubKey, this.cscaDN, this.mlsDN, this.cscaCert.getPublicKey());

	// Setup this signer
	this.addSignerCertificates(this.mlCert, this.cscaCert);
	this.addSignerWithSubjectKeyID(this.mlPriKey, this.mlCert, new ByteString("id-sha256", OID));
}


/**
 * Quick setup.
 * Generate the signing key and corresponding certificates
 */
MasterListSigner.prototype.setup = function() {
	this.setupCSCA();
	this.setupSigner();
}



/**
 * Generate the Master List.
 *
 * Prior to generating the Master List, the setup functions addSignerCertificates and addSignerWithIssuerAndSerial/addSignerWithSubjectKeyID must be called.
 *
 * @type ByteString
 * @return the Master List
 */
MasterListSigner.prototype.generateMasterList = function() {
	return this.cms.generate(new ByteString("id-icao-cscaMasterList", OID));
}



/**
 * Reset signer and all certificates. Keep generated keys.
 */
MasterListSigner.prototype.resetCMS = function() {
	this.cms = new CMSGenerator(CMSGenerator.TYPE_SIGNED_DATA);
}/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2016 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Generate invalid master lists for test purpose
 */



MasterListSigner = require('scsh/mrtd/MasterListSigner').MasterListSigner;
X509CertificateGenerator = require('scsh/x509/X509CertificateGenerator').X509CertificateGenerator;
PKIXCommon = require('scsh/x509/PKIXCommon').PKIXCommon;



function MasterListTestDataGen () {
	MasterListSigner.call(this);
}
MasterListTestDataGen.prototype = Object.create(MasterListSigner.prototype);
MasterListTestDataGen.constructor = MasterListTestDataGen;

exports.MasterListTestDataGen = MasterListTestDataGen;



/**
 * Generate CSCA key pair and root certificate
 *
 * @param {Object} dn the optional distinguished name
 * @param {Date} notBefore the optional effective date of the certificate
 * @param {Date} notAfter the optional expiration date of the certificate
 */
MasterListSigner.prototype.setupCSCA = function(dn, notBefore, notAfter) {
	if (dn) {
		this.cscaDN = dn;
	}

	// CA Key Pair
	this.cscaPriKey = new Key();
	this.cscaPriKey.setType(Key.PRIVATE);
	this.cscaPubKey = new Key();
	this.cscaPubKey.setType(Key.PUBLIC);
	this.cscaPubKey.setSize(2048);
	var crypto = new Crypto();
	crypto.generateKeyPair(Crypto.RSA, this.cscaPubKey, this.cscaPriKey);

	// CA Root Certificate
	this.cscaCert = this.generateCertificate(this.cscaPriKey, this.cscaPubKey, this.cscaDN, this.cscaDN, this.cscaPubKey, notBefore, notAfter);
}



/**
 * Quick setup.
 * Generate the signing key and corresponding certificates
 */
MasterListSigner.prototype.setupWithAlternativeSID = function() {
	this.setupCSCA();
	this.setupSignerWithAlternativeSID();
}



/**
 * Generate Master List Signer key pair and certificate
 * issued by the CSCA
 * @param {Date} notBefore the optional effective date of the certificate
 * @param {Date} notAfter the optional expiration date of the certificate
 */
MasterListSigner.prototype.setupSignerWithAlternativeSID = function(notBefore, notAfter) {
	if (!this.cscaPriKey || !this.cscaCert) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Missing CSCA private key or certificate");
	}

	// Master List Key Pair
	this.mlPriKey = new Key();
	this.mlPriKey.setType(Key.PRIVATE);
	this.mlPubKey = new Key();
	this.mlPubKey.setType(Key.PUBLIC);
	this.mlPubKey.setSize(2048);
	var crypto = new Crypto();
	crypto.generateKeyPair(Crypto.RSA, this.mlPubKey, this.mlPriKey);

	// Master List Signer Certificate
	this.mlsDN = { C:"UT", O:"IT", OU:"SEC", CN:"CSCA Master List Signer" };
	this.mlCert = this.generateCertificate(this.cscaPriKey, this.mlPubKey, this.cscaDN, this.mlsDN, this.cscaCert.getPublicKey(), notBefore, notAfter);

	// Setup this signer
	this.addSignerCertificates(this.mlCert, this.cscaCert);
	this.addSignerWithIssuerAndSerial(this.mlPriKey, this.mlCert, new ByteString("id-sha256", OID));
}



/**
 * Generate the Master List with an incorrect eContentType
 *
 * @type ByteString
 * @return the encoded Master List with an incorrect eContentType
 */
MasterListSigner.prototype.generateMasterListWithIncorrectEContentType = function() {
	return this.cms.generate(new ByteString("0.4.0.127.0.7.3.2.2", OID));
}



/**
 * Generate the Master List with an invalid signature
 *
 * @type ByteString
 * @return the encoded Master List with an invalid signature
 */
MasterListSigner.prototype.generateMasterListWithInvalidSignature = function() {
	var encodedML =  this.cms.generate(new ByteString("id-icao-cscaMasterList", OID));
	return this.invalidateSignature(encodedML);
}



/**
 * Manipulate the signature of a given Master List
 *
 * @param {ByteString} encodedML the encoded Master List
 * @type ByteString
 * @return the encoded Master List with an invalid signature
 */
MasterListTestDataGen.prototype.invalidateSignature = function(encodedML) {
	var mlcms = new CMSSignedData(encodedML);
	assert(mlcms.isSignerInfoSignatureValid(0));

	// Invalidate signature
	var signature = mlcms.getSignerInfoSignature(0);
	var invSig = signature.add(1);

	// Replace signature in encoded master list with the invalid one

	var offs = encodedML.find(signature);
	var upperPart = encodedML.bytes(0, offs);
	var lowerPart = encodedML.bytes(offs + signature.length);
	var invML = upperPart.concat(invSig).concat(lowerPart);

	var mlcms = new CMSSignedData(invML);
	assert(!mlcms.isSignerInfoSignatureValid(0));

	return invML;
}



/**
 * Helper function to generate certificates
 *
 * @param {Key} priKey the signing key
 * @param {Key} pubKey the certificates public key
 * @param {Object} issuer the issuer name
 * @param {Object} subject the subject name
 * @param {Key} signerPubKey the optional signer's public key which will be referenced in the authority key identifier
 * @param {Date} notBefore the optional effective date of the certificate
 * @param {Date} notAfter the optional expiration date of the certificate
 */
MasterListTestDataGen.prototype.generateCertificate = function(priKey, pubKey, issuer, subject, signerPubKey, notBefore, notAfter) {
	var crypto = new Crypto();

	var x = new X509CertificateGenerator(crypto);

	x.reset();
	x.setSerialNumber(new ByteString("01", HEX));
	x.setSignatureAlgorithm(Crypto.RSA_SHA256);

	x.setIssuer(issuer);
	if (notBefore && notAfter) {
		x.setNotBefore(notBefore);
		x.setNotAfter(notAfter);
	} else {
		var t = new Date();
		x.setNotBefore(t);
		x.setNotAfter(PKIXCommon.addDays(t, 180));
	}
	x.setSubject(subject);

	x.setPublicKey(pubKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );

	x.addBasicConstraintsExtension(true, 0);
	x.addSubjectKeyIdentifierExtension();
	if (signerPubKey) {
		x.addAuthorityKeyIdentifierExtension(signerPubKey);
	}

	var cert = x.generateX509Certificate(priKey);
	return cert;
}/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Register of CardContact object identifier
 */


ASN1.defineObjectIdentifier("CardContact", "1.3.6.1.4.1.24991");

ASN1.defineObjectIdentifier("OpenSCDP", "CardContact 1");
ASN1.defineObjectIdentifier("cc-iso7816", "CardContact 2");
ASN1.defineObjectIdentifier("cc-pki", "CardContact 3");
ASN1.defineObjectIdentifier("cc-format", "CardContact 4");
ASN1.defineObjectIdentifier("cc-gp-profiles", "CardContact 16");

ASN1.defineObjectIdentifier("scsh3", "OpenSCDP 1");
ASN1.defineObjectIdentifier("scsh3gui", "OpenSCDP 2");

ASN1.defineObjectIdentifier("SmartCard-HSM", "cc-iso7816 1");
ASN1.defineObjectIdentifier("cc-apdutest", "cc-iso7816 2");
ASN1.defineObjectIdentifier("cc-packages", "cc-iso7816 127");

ASN1.defineObjectIdentifier("cc-roles", "cc-pki 1");
ASN1.defineObjectIdentifier("cc-role-sc-hsm", "cc-roles 1");
ASN1.defineObjectIdentifier("cc-role-bw-se", "cc-roles 2");

ASN1.defineObjectIdentifier("cc-extensions", "cc-pki 2");
ASN1.defineObjectIdentifier("id-IMPU", "cc-extensions 1");
ASN1.defineObjectIdentifier("id-key-domain-uid", "cc-extensions 2");
ASN1.defineObjectIdentifier("id-security-classification", "cc-extensions 3");

ASN1.defineObjectIdentifier("cc-ff-deviceid", "cc-format 1");
ASN1.defineObjectIdentifier("cc-ff-kdm", "cc-format 2");
ASN1.defineObjectIdentifier("cc-ff-pka", "cc-format 3");
ASN1.defineObjectIdentifier("cc-ff-kda", "cc-format 4");
ASN1.defineObjectIdentifier("cc-ff-kdc", "cc-format 5");

ASN1.defineObjectIdentifier("cc-kdc-groupvpn-v1", "cc-ff-kdc 1 1");
ASN1.defineObjectIdentifier("cc-kdc-psk-v1", "cc-ff-kdc 2 1");
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Register of predefined object identifier for ICAO applications
 */


ASN1.defineObjectIdentifier("id-icao", "2.23.136");
ASN1.defineObjectIdentifier("id-icao-mrtd", "id-icao 1");
ASN1.defineObjectIdentifier("id-icao-mrtd-security", "id-icao-mrtd 1");
ASN1.defineObjectIdentifier("id-icao-ldsSecurityObject", "id-icao-mrtd-security 1");
ASN1.defineObjectIdentifier("id-icao-cscaMasterList", "id-icao-mrtd-security 2");
ASN1.defineObjectIdentifier("id-icao-cscaMasterListSigningKey", "id-icao-mrtd-security 3");


ASN1.defineObjectIdentifier("bsi-de", "itu-t(0) identified-organization(4) etsi(0) reserved(127) etsi-identified-organization(0) 7");

// ECC from TR 03111
ASN1.defineObjectIdentifier("id-ecc", "bsi-de algorithms(1) 1");

ASN1.defineObjectIdentifier("ansi-X9-62", "iso(1) member-body(2) us(840) 10045");
ASN1.defineObjectIdentifier("id-publicKeyType", "ansi-X9-62 keyType(2)");
ASN1.defineObjectIdentifier("id-ecPublicKey", "id-publicKeyType 1");
ASN1.defineObjectIdentifier("id-fieldType", "ansi-X9-62 fieldType(1)");
ASN1.defineObjectIdentifier("prime-field", "id-fieldType 1");
ASN1.defineObjectIdentifier("id-ecSigType", "ansi-X9-62 signatures(4)");

ASN1.defineObjectIdentifier("id-ecTLVKeyFormat", "id-ecc keyType(2) 2");
ASN1.defineObjectIdentifier("id-ecTLVPublicKey", "id-ecTLVKeyFormat unrestricted(1)");
ASN1.defineObjectIdentifier("ecdsa-plain-signatures", "id-ecc signatures(4) 1");
ASN1.defineObjectIdentifier("ecdsa-plain-SHA1", "ecdsa-plain-signatures 1");
ASN1.defineObjectIdentifier("ecdsa-plain-SHA224", "ecdsa-plain-signatures 2");
ASN1.defineObjectIdentifier("ecdsa-plain-SHA256", "ecdsa-plain-signatures 3");
ASN1.defineObjectIdentifier("ecdsa-plain-SHA384", "ecdsa-plain-signatures 4");
ASN1.defineObjectIdentifier("ecdsa-plain-SHA512", "ecdsa-plain-signatures 5");
ASN1.defineObjectIdentifier("ecdsa-plain-RIPEMD160", "ecdsa-plain-signatures 6");

ASN1.defineObjectIdentifier("ecka-eg", "id-ecc key-establishment(5) 1");
ASN1.defineObjectIdentifier("ecka-eg-X963KDF", "ecka-eg 1");
ASN1.defineObjectIdentifier("ecka-eg-X963KDF-SHA1", "ecka-eg-X963KDF 1");
ASN1.defineObjectIdentifier("ecka-eg-X963KDF-SHA224", "ecka-eg-X963KDF 2");
ASN1.defineObjectIdentifier("ecka-eg-X963KDF-SHA256", "ecka-eg-X963KDF 3");
ASN1.defineObjectIdentifier("ecka-eg-X963KDF-SHA384", "ecka-eg-X963KDF 4");
ASN1.defineObjectIdentifier("ecka-eg-X963KDF-SHA512", "ecka-eg-X963KDF 5");
ASN1.defineObjectIdentifier("ecka-eg-X963KDF-RIPEMD160", "ecka-eg-X963KDF 6");
ASN1.defineObjectIdentifier("ecka-eg-SessionKDF", "ecka-eg 2");
ASN1.defineObjectIdentifier("ecka-eg-SessionKDF-3DES", "ecka-eg-SessionKDF 1");
ASN1.defineObjectIdentifier("ecka-eg-SessionKDF-AES128", "ecka-eg-SessionKDF 2");
ASN1.defineObjectIdentifier("ecka-eg-SessionKDF-AES192", "ecka-eg-SessionKDF 3");
ASN1.defineObjectIdentifier("ecka-eg-SessionKDF-AES256", "ecka-eg-SessionKDF 4");

ASN1.defineObjectIdentifier("ecka-dh", "id-ecc key-establishment(5) 2");
ASN1.defineObjectIdentifier("ecka-dh-X963KDF", "ecka-dh 1");
ASN1.defineObjectIdentifier("ecka-dh-X963KDF-SHA1", "ecka-dh-X963KDF 1");
ASN1.defineObjectIdentifier("ecka-dh-X963KDF-SHA224", "ecka-dh-X963KDF 2");
ASN1.defineObjectIdentifier("ecka-dh-X963KDF-SHA256", "ecka-dh-X963KDF 3");
ASN1.defineObjectIdentifier("ecka-dh-X963KDF-SHA384", "ecka-dh-X963KDF 4");
ASN1.defineObjectIdentifier("ecka-dh-X963KDF-SHA512", "ecka-dh-X963KDF 5");
ASN1.defineObjectIdentifier("ecka-dh-X963KDF-RIPEMD160", "ecka-dh-X963KDF 6");
ASN1.defineObjectIdentifier("ecka-dh-SessionKDF", "ecka-dh 2");
ASN1.defineObjectIdentifier("ecka-dh-SessionKDF-3DES", "ecka-dh-SessionKDF 1");
ASN1.defineObjectIdentifier("ecka-dh-SessionKDF-AES128", "ecka-dh-SessionKDF 2");
ASN1.defineObjectIdentifier("ecka-dh-SessionKDF-AES192", "ecka-dh-SessionKDF 3");
ASN1.defineObjectIdentifier("ecka-dh-SessionKDF-AES256", "ecka-dh-SessionKDF 4");

ASN1.defineObjectIdentifier("ecStdCurvesAndGeneration", "iso(1) identified-organization(3) teletrust(36) algorithm(3) signature-algorithm(3) ecSign(2) ecStdCurvesAndGeneration(8)");
ASN1.defineObjectIdentifier("ellipticCurve", "ecStdCurvesAndGeneration 1");
ASN1.defineObjectIdentifier("versionOne", "ellipticCurve 1");
ASN1.defineObjectIdentifier("brainpoolP160r1", "versionOne 1");
ASN1.defineObjectIdentifier("brainpoolP160t1", "versionOne 2");
ASN1.defineObjectIdentifier("brainpoolP192r1", "versionOne 3");
ASN1.defineObjectIdentifier("brainpoolP192t1", "versionOne 4");
ASN1.defineObjectIdentifier("brainpoolP224r1", "versionOne 5");
ASN1.defineObjectIdentifier("brainpoolP224t1", "versionOne 6");
ASN1.defineObjectIdentifier("brainpoolP256r1", "versionOne 7");
ASN1.defineObjectIdentifier("brainpoolP256t1", "versionOne 8");
ASN1.defineObjectIdentifier("brainpoolP320r1", "versionOne 9");
ASN1.defineObjectIdentifier("brainpoolP320t1", "versionOne 10");
ASN1.defineObjectIdentifier("brainpoolP384r1", "versionOne 11");
ASN1.defineObjectIdentifier("brainpoolP384t1", "versionOne 12");
ASN1.defineObjectIdentifier("brainpoolP512r1", "versionOne 13");
ASN1.defineObjectIdentifier("brainpoolP512t1", "versionOne 14");


// PACE from TR 03110 (EAC 2.0)
ASN1.defineObjectIdentifier("id-PACE", "bsi-de protocols(2) smartcard(2) 4");
ASN1.defineObjectIdentifier("id-PACE-DH-GM", "id-PACE 1");
ASN1.defineObjectIdentifier("id-PACE-DH-GM-3DES-CBC-CBC", "id-PACE-DH-GM 1");
ASN1.defineObjectIdentifier("id-PACE-DH-GM-AES-CBC-CMAC-128", "id-PACE-DH-GM 2");
ASN1.defineObjectIdentifier("id-PACE-DH-GM-AES-CBC-CMAC-192", "id-PACE-DH-GM 3");
ASN1.defineObjectIdentifier("id-PACE-DH-GM-AES-CBC-CMAC-256", "id-PACE-DH-GM 4");

ASN1.defineObjectIdentifier("id-PACE-ECDH-GM", "id-PACE 2");
ASN1.defineObjectIdentifier("id-PACE-ECDH-GM-3DES-CBC-CBC", "id-PACE-ECDH-GM 1");
ASN1.defineObjectIdentifier("id-PACE-ECDH-GM-AES-CBC-CMAC-128", "id-PACE-ECDH-GM 2");
ASN1.defineObjectIdentifier("id-PACE-ECDH-GM-AES-CBC-CMAC-192", "id-PACE-ECDH-GM 3");
ASN1.defineObjectIdentifier("id-PACE-ECDH-GM-AES-CBC-CMAC-256", "id-PACE-ECDH-GM 4");

ASN1.defineObjectIdentifier("id-PACE-DH-IM", "id-PACE 3");
ASN1.defineObjectIdentifier("id-PACE-DH-IM-3DES-CBC-CBC", "id-PACE-DH-IM 1");
ASN1.defineObjectIdentifier("id-PACE-DH-IM-AES-CBC-CMAC-128", "id-PACE-DH-IM 2");
ASN1.defineObjectIdentifier("id-PACE-DH-IM-AES-CBC-CMAC-192", "id-PACE-DH-IM 3");
ASN1.defineObjectIdentifier("id-PACE-DH-IM-AES-CBC-CMAC-256", "id-PACE-DH-IM 4");

ASN1.defineObjectIdentifier("id-PACE-ECDH-IM", "id-PACE 4");
ASN1.defineObjectIdentifier("id-PACE-ECDH-IM-3DES-CBC-CBC", "id-PACE-ECDH-IM 1");
ASN1.defineObjectIdentifier("id-PACE-ECDH-IM-AES-CBC-CMAC-128", "id-PACE-ECDH-IM 2");
ASN1.defineObjectIdentifier("id-PACE-ECDH-IM-AES-CBC-CMAC-192", "id-PACE-ECDH-IM 3");
ASN1.defineObjectIdentifier("id-PACE-ECDH-IM-AES-CBC-CMAC-256", "id-PACE-ECDH-IM 4");


// CA from TR 03110 (EAC 2.0)
ASN1.defineObjectIdentifier("id-CA", "bsi-de protocols(2) smartcard(2) 3");

ASN1.defineObjectIdentifier("id-CA-DH", "id-CA 1");
ASN1.defineObjectIdentifier("id-CA-DH-3DES-CBC-CBC", "id-CA-DH 1");
ASN1.defineObjectIdentifier("id-CA-DH-AES-CBC-CMAC-128", "id-CA-DH 2");
ASN1.defineObjectIdentifier("id-CA-DH-AES-CBC-CMAC-192", "id-CA-DH 3");
ASN1.defineObjectIdentifier("id-CA-DH-AES-CBC-CMAC-256", "id-CA-DH 4");

ASN1.defineObjectIdentifier("id-CA-ECDH", "id-CA 2");
ASN1.defineObjectIdentifier("id-CA-ECDH-3DES-CBC-CBC", "id-CA-ECDH 1");
ASN1.defineObjectIdentifier("id-CA-ECDH-AES-CBC-CMAC-128", "id-CA-ECDH 2");
ASN1.defineObjectIdentifier("id-CA-ECDH-AES-CBC-CMAC-192", "id-CA-ECDH 3");
ASN1.defineObjectIdentifier("id-CA-ECDH-AES-CBC-CMAC-256", "id-CA-ECDH 4");


// CA from TR 03110 (EAC 2.0)
ASN1.defineObjectIdentifier("id-PK", "bsi-de protocols(2) smartcard(2) 1 ");

ASN1.defineObjectIdentifier("id-PK-DH", "id-PK 1");
ASN1.defineObjectIdentifier("id-PK-ECDH", "id-PK 2");


ASN1.defineObjectIdentifier("id-TA", "bsi-de protocols(2) smartcard(2) 2");

ASN1.defineObjectIdentifier("id-TA-RSA", "id-TA 1");
ASN1.defineObjectIdentifier("id-TA-RSA-v1-5-SHA-1", "id-TA-RSA 1");
ASN1.defineObjectIdentifier("id-TA-RSA-v1-5-SHA-256", "id-TA-RSA 2");
ASN1.defineObjectIdentifier("id-TA-RSA-PSS-SHA-1", "id-TA-RSA 3");
ASN1.defineObjectIdentifier("id-TA-RSA-PSS-SHA-256", "id-TA-RSA 4");
ASN1.defineObjectIdentifier("id-TA-RSA-v1-5-SHA-512", "id-TA-RSA 5");
ASN1.defineObjectIdentifier("id-TA-RSA-PSS-SHA-512", "id-TA-RSA 6");

ASN1.defineObjectIdentifier("id-TA-ECDSA", "id-TA 2");
ASN1.defineObjectIdentifier("id-TA-ECDSA-SHA-1", "id-TA-ECDSA 1");
ASN1.defineObjectIdentifier("id-TA-ECDSA-SHA-224", "id-TA-ECDSA 2");
ASN1.defineObjectIdentifier("id-TA-ECDSA-SHA-256", "id-TA-ECDSA 3");
ASN1.defineObjectIdentifier("id-TA-ECDSA-SHA-384", "id-TA-ECDSA 4");
ASN1.defineObjectIdentifier("id-TA-ECDSA-SHA-512", "id-TA-ECDSA 5");


ASN1.defineObjectIdentifier("id-RI", "bsi-de protocols(2) smartcard(2) 5");

ASN1.defineObjectIdentifier("id-RI-DH", "id-RI 1");
ASN1.defineObjectIdentifier("id-RI-DH-SHA-1", "id-RI-DH 1");
ASN1.defineObjectIdentifier("id-RI-DH-SHA-224", "id-RI-DH 2");
ASN1.defineObjectIdentifier("id-RI-DH-SHA-256", "id-RI-DH 3");

ASN1.defineObjectIdentifier("id-RI-ECDH", "id-RI 2");
ASN1.defineObjectIdentifier("id-RI-ECDH-SHA-1", "id-RI-ECDH 1");
ASN1.defineObjectIdentifier("id-RI-ECDH-SHA-224", "id-RI-ECDH 2");
ASN1.defineObjectIdentifier("id-RI-ECDH-SHA-256", "id-RI-ECDH 3");


ASN1.defineObjectIdentifier("id-CI", "bsi-de protocols(2) smartcard(2) 6");


ASN1.defineObjectIdentifier("id-auxiliaryData", "bsi-de applications(3) mrtd(1) 4");
ASN1.defineObjectIdentifier("id-DateOfBirth", "id-auxiliaryData 1");
ASN1.defineObjectIdentifier("id-DateOfExpiry", "id-auxiliaryData 2");
ASN1.defineObjectIdentifier("id-CommunityID", "id-auxiliaryData 3");

ASN1.defineObjectIdentifier("id-extensions", "bsi-de applications(3) mrtd(1) 3");
ASN1.defineObjectIdentifier("id-description", "id-extensions 1");
ASN1.defineObjectIdentifier("id-plainFormat", "id-description 1");
ASN1.defineObjectIdentifier("id-htmlFormat", "id-description 2");
ASN1.defineObjectIdentifier("id-pdfFormat", "id-description 3");
ASN1.defineObjectIdentifier("id-sector", "id-extensions 2");

ASN1.defineObjectIdentifier("id-eIDSecurity", "bsi-de protocols(2) smartcard(2) 7");
ASN1.defineObjectIdentifier("id-PT", "bsi-de protocols(2) smartcard(2) 8");
 
ASN1.defineObjectIdentifier("id-roles", "bsi-de applications(3) mrtd(1) 2");

// From BSI/TG-03129
ASN1.defineObjectIdentifier("id-DefectList", "bsi-de applications(3) mrtd(1) 5");

ASN1.defineObjectIdentifier("id-AuthDefect", "id-DefectList 1");
ASN1.defineObjectIdentifier("id-CertRevoked", "id-AuthDefect 1");
ASN1.defineObjectIdentifier("id-CertReplaced", "id-AuthDefect 2");
ASN1.defineObjectIdentifier("id-ChipAuthKeyRevoked", "id-AuthDefect 3");
ASN1.defineObjectIdentifier("id-ActiveAuthKeyRevoked", "id-AuthDefect 4");
ASN1.defineObjectIdentifier("id-ActiveAuthKeyRevoked", "id-AuthDefect 4");

ASN1.defineObjectIdentifier("id-ePassportDefect", "id-DefectList 2");
ASN1.defineObjectIdentifier("id-ePassportDGMalformed", "id-ePassportDefect 1");
ASN1.defineObjectIdentifier("id-SODInvalid", "id-ePassportDefect 2");

ASN1.defineObjectIdentifier("id-eIDDefect", "id-DefectList 3");
ASN1.defineObjectIdentifier("id-eIDDGMalformed", "id-eIDDefect 1");
ASN1.defineObjectIdentifier("id-eIDIntegrity", "id-eIDDefect 2");

ASN1.defineObjectIdentifier("id-DocumentDefect", "id-DefectList 4");
ASN1.defineObjectIdentifier("id-CardSecurityMalformed", "id-DocumentDefect 1");
ASN1.defineObjectIdentifier("id-ChipSecurityMalformed", "id-DocumentDefect 2");
ASN1.defineObjectIdentifier("id-PowerDownReq", "id-DocumentDefect 3");

ASN1.defineObjectIdentifier("id-ListContentDescription", "bsi-de applications(3) mrtd(1) 6");


ASN1.defineObjectIdentifier("id-IS", "id-roles 1");
ASN1.defineObjectIdentifier("id-AT", "id-roles 2");
ASN1.defineObjectIdentifier("id-ST", "id-roles 3");

ASN1.defineObjectIdentifier("id-eID", "bsi-de applications(3) 2");
ASN1.defineObjectIdentifier("id-SecurityObject", "id-eID 1");

ASN1.defineObjectIdentifier("id-BlackList", "id-eID 2");


ASN1.defineObjectIdentifier("standardizedDomainParameter", "bsi-de algorithms(1) 2");


// From CSN 369791
ASN1.defineObjectIdentifier("id-csn-369791", "iso(1) member-body(2) cz(203) moi(7064) orpeg(1) cdbp(1) csn369791(369791)");
ASN1.defineObjectIdentifier("id-csn-369791-tls-client", "id-csn-369791 1");
ASN1.defineObjectIdentifier("id-csn-369791-tls-server", "id-csn-369791 2");

// ASN1.defineObjectIdentifier("", "");
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Load all object identifier definitions
 */

load("pkix.js");
load("icao.js");
load("pca.js");
load("cardcontact.js");
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Register of predefined object identifier for PCA applications
 */



ASN1.defineObjectIdentifier("id-BSNk-scheme-nl", "2.16.528.1.1003.10");

ASN1.defineObjectIdentifier("id-PCA", "id-BSNk-scheme-nl 9");

ASN1.defineObjectIdentifier("id-PCA-info", "id-PCA 1");

ASN1.defineObjectIdentifier("id-PCA-AT", "id-PCA 2");

ASN1.defineObjectIdentifier("id-PCA-PIP-formats", "id-PCA 3");

ASN1.defineObjectIdentifier("id-PCA-PIP", "id-PCA-PIP-formats 1");
ASN1.defineObjectIdentifier("id-PCA-PIP-compressed", "id-PCA-PIP-formats 2");
ASN1.defineObjectIdentifier("id-PCA-PIP-reduced-compressed", "id-PCA-PIP-formats 3");
ASN1.defineObjectIdentifier("id-PCA-PIP-reduced-uncompressed", "id-PCA-PIP-formats 4");

ASN1.defineObjectIdentifier("id-PCA-PP-formats", "id-PCA 4");

ASN1.defineObjectIdentifier("id-PCA-PP", "id-PCA-PP-formats 1");
ASN1.defineObjectIdentifier("id-PCA-PP-compressed", "id-PCA-PP-formats 2");
ASN1.defineObjectIdentifier("id-PCA-PP-reduced-compressed", "id-PCA-PP-formats 3");
ASN1.defineObjectIdentifier("id-PCA-PP-reduced-uncompressed", "id-PCA-PP-formats 4");

ASN1.defineObjectIdentifier("id-PCA-PI-formats", "id-PCA 5");

ASN1.defineObjectIdentifier("id-PCA-PI", "id-PCA-PI-formats 1");
ASN1.defineObjectIdentifier("id-PCA-PI-compressed", "id-PCA-PI-formats 2");
ASN1.defineObjectIdentifier("id-PCA-PI-reduced-compressed", "id-PCA-PI-formats 3");
ASN1.defineObjectIdentifier("id-PCA-PI-reduced-uncompressed", "id-PCA-PI-formats 4");
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Register of predefined object identifier for PKIX applications
 */


ASN1.defineObjectIdentifier("id-pkix", "iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7)");

ASN1.defineObjectIdentifier("id-pe", "id-pkix 1");
ASN1.defineObjectIdentifier("id-qt", "id-pkix 2");
ASN1.defineObjectIdentifier("id-kp", "id-pkix 3");
ASN1.defineObjectIdentifier("id-pda", "id-pkix 9");
ASN1.defineObjectIdentifier("id-qcs", "id-pkix 11");
ASN1.defineObjectIdentifier("id-ad", "id-pkix 48");

ASN1.defineObjectIdentifier("id-pe-biometricInfo", "id-pe 2");
ASN1.defineObjectIdentifier("id-pe-qcStatements", "id-pe 3");

ASN1.defineObjectIdentifier("id-pda-dateOfBirth", "id-pda 1");
ASN1.defineObjectIdentifier("id-pda-placeOfBirth", "id-pda 2");
ASN1.defineObjectIdentifier("id-pda-gender", "id-pda 3");
ASN1.defineObjectIdentifier("id-pda-countryOfCitizenship", "id-pda 4");
ASN1.defineObjectIdentifier("id-pda-countryOfResidence", "id-pda 5");

ASN1.defineObjectIdentifier("id-qt-cps", "id-qt 1");
ASN1.defineObjectIdentifier("id-qt-unotice", "id-qt 2");

ASN1.defineObjectIdentifier("id-ad-ocsp", "id-ad 1");
ASN1.defineObjectIdentifier("id-ad-caIssuers", "id-ad 2");
ASN1.defineObjectIdentifier("id-ad-timeStamping", "id-ad 3");
ASN1.defineObjectIdentifier("id-ad-caRepository", "id-ad 5");

ASN1.defineObjectIdentifier("id-at", "joint-iso-ccitt(2) ds(5) 4");

ASN1.defineObjectIdentifier("id-at-name", "id-at 41");
ASN1.defineObjectIdentifier("id-at-surname", "id-at  4");
ASN1.defineObjectIdentifier("id-at-givenName", "id-at 42");
ASN1.defineObjectIdentifier("id-at-initials", "id-at 43");
ASN1.defineObjectIdentifier("id-at-generationQualifier", "id-at 44");
ASN1.defineObjectIdentifier("id-at-commonName", "id-at 3");
ASN1.defineObjectIdentifier("id-at-localityName", "id-at 7");

ASN1.defineObjectIdentifier("id-at-stateOrProvinceName", "id-at 8");
ASN1.defineObjectIdentifier("id-at-organizationName", "id-at 10");
ASN1.defineObjectIdentifier("id-at-organizationalUnitName", "id-at 11");
ASN1.defineObjectIdentifier("id-at-title", "id-at 12");
ASN1.defineObjectIdentifier("id-at-dnQualifier", "id-at 46");
ASN1.defineObjectIdentifier("id-at-countryName", "id-at 6");
ASN1.defineObjectIdentifier("id-at-serialNumber", "id-at 5");
ASN1.defineObjectIdentifier("id-at-postalAddress", "id-at 16");

ASN1.defineObjectIdentifier("id-at-pseudonym", "id-at 65");
ASN1.defineObjectIdentifier("id-domainComponent", "0 9 2342 19200300 100 1 25");

// RFC1274
ASN1.defineObjectIdentifier("id-userId", "ccitt(0) data(9) pss(2342) ucl(19200300) pilot(100) pilotAttributeType(1) 1");

ASN1.defineObjectIdentifier("id-qcs-pkixQCSyntax-v1", "id-qcs 1");

// ETSI TS 101 862
ASN1.defineObjectIdentifier("id-etsi-qcs", "itu-t(0) identified-organization(4) etsi(0) id-qc-profile(1862) 1");
ASN1.defineObjectIdentifier("id-etsi-qcs-QcCompliance", "id-etsi-qcs 1");
ASN1.defineObjectIdentifier("id-etsi-qcs-QcLimitValue", "id-etsi-qcs 2");
ASN1.defineObjectIdentifier("id-etsi-qcs-QcRetentionPeriod", "id-etsi-qcs 3");
ASN1.defineObjectIdentifier("id-etsi-qcs-QcSSCD", "id-etsi-qcs 4");

ASN1.defineObjectIdentifier("pkcs-9", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9");
ASN1.defineObjectIdentifier("id-emailAddress", "pkcs-9 1");
ASN1.defineObjectIdentifier("id-ce", "joint-iso-ccitt(2) ds(5) 29");
ASN1.defineObjectIdentifier("id-ce-authorityKeyIdentifier", "id-ce 35");
ASN1.defineObjectIdentifier("id-ce-subjectKeyIdentifier", "id-ce 14");
ASN1.defineObjectIdentifier("id-ce-keyUsage", "id-ce 15");
ASN1.defineObjectIdentifier("id-ce-privateKeyUsagePeriod", "id-ce 16");
ASN1.defineObjectIdentifier("id-ce-certificatePolicies", "id-ce 32");
ASN1.defineObjectIdentifier("anyPolicy", "id-ce-certificatePolicies 0");
ASN1.defineObjectIdentifier("id-ce-policyMappings", "id-ce 33");
ASN1.defineObjectIdentifier("id-ce-subjectAltName", "id-ce 17");
ASN1.defineObjectIdentifier("id-ce-issuerAltName", "id-ce 18");
ASN1.defineObjectIdentifier("id-ce-subjectDirectoryAttributes", "id-ce 9");
ASN1.defineObjectIdentifier("id-ce-basicConstraints", "id-ce 19");
ASN1.defineObjectIdentifier("id-ce-nameConstraints", "id-ce 30");
ASN1.defineObjectIdentifier("id-ce-policyConstraints", "id-ce 36");
ASN1.defineObjectIdentifier("id-ce-cRLDistributionPoints", "id-ce 31");
ASN1.defineObjectIdentifier("id-ce-extKeyUsage", "id-ce 37");

ASN1.defineObjectIdentifier("anyExtendedKeyUsage", "id-ce-extKeyUsage 0");

ASN1.defineObjectIdentifier("id-kp-serverAuth", "id-kp 1");
ASN1.defineObjectIdentifier("id-kp-clientAuth", "id-kp 2");
ASN1.defineObjectIdentifier("id-kp-codeSigning", "id-kp 3");
ASN1.defineObjectIdentifier("id-kp-emailProtection", "id-kp 4");
ASN1.defineObjectIdentifier("id-kp-timeStamping", "id-kp 8");
ASN1.defineObjectIdentifier("id-kp-OCSPSigning", "id-kp 9");

ASN1.defineObjectIdentifier("microsoft", "1 3 6 1 4 1 311");
ASN1.defineObjectIdentifier("szOID_KP_SMARTCARD_LOGON", "microsoft 20 2 2");
ASN1.defineObjectIdentifier("szOID_NT_PRINCIPAL_NAME", "microsoft 20 2 3");

ASN1.defineObjectIdentifier("id-ce-inhibitAnyPolicy", "id-ce 54");

ASN1.defineObjectIdentifier("id-ce-freshestCRL", "id-ce 46");
ASN1.defineObjectIdentifier("id-pe-authorityInfoAccess", "id-pe 1");
ASN1.defineObjectIdentifier("id-pe-subjectInfoAccess", "id-pe 11");
ASN1.defineObjectIdentifier("id-ce-cRLNumber", "id-ce 20");
ASN1.defineObjectIdentifier("id-ce-issuingDistributionPoint", "id-ce 28");



ASN1.defineObjectIdentifier("id-ce-deltaCRLIndicator", "id-ce 27");

ASN1.defineObjectIdentifier("id-ce-cRLReasons", "id-ce 21");
ASN1.defineObjectIdentifier("id-ce-certificateIssuer", "id-ce 29");
ASN1.defineObjectIdentifier("id-ce-holdInstructionCode", "id-ce 23");
ASN1.defineObjectIdentifier("holdInstruction", "joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2");
ASN1.defineObjectIdentifier("id-holdinstruction-none", "holdInstruction 1");
ASN1.defineObjectIdentifier("id-holdinstruction-callissuer", "holdInstruction 2");
ASN1.defineObjectIdentifier("id-holdinstruction-reject", "holdInstruction 3");
ASN1.defineObjectIdentifier("id-ce-invalidityDate", "id-ce 24");


ASN1.defineObjectIdentifier("secp192r1", "iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) prime(1) 1");
ASN1.defineObjectIdentifier("secp192k1", "iso(1) identified-organization(3) certicom(132) curve(0) 31");
ASN1.defineObjectIdentifier("sect163k1", "iso(1) identified-organization(3) certicom(132) curve(0) 1");
ASN1.defineObjectIdentifier("sect163r2", "iso(1) identified-organization(3) certicom(132) curve(0) 15");
ASN1.defineObjectIdentifier("secp224r1", "iso(1) identified-organization(3) certicom(132) curve(0) 33");
ASN1.defineObjectIdentifier("secp224k1", "iso(1) identified-organization(3) certicom(132) curve(0) 32");
ASN1.defineObjectIdentifier("sect233k1", "iso(1) identified-organization(3) certicom(132) curve(0) 26");
ASN1.defineObjectIdentifier("sect233r1", "iso(1) identified-organization(3) certicom(132) curve(0) 27");
ASN1.defineObjectIdentifier("secp256r1", "iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) prime(1) 7");
ASN1.defineObjectIdentifier("secp256k1", "iso(1) identified-organization(3) certicom(132) curve(0) 10");
ASN1.defineObjectIdentifier("sect283k1", "iso(1) identified-organization(3) certicom(132) curve(0) 16");
ASN1.defineObjectIdentifier("sect283r1", "iso(1) identified-organization(3) certicom(132) curve(0) 17");
ASN1.defineObjectIdentifier("secp384r1", "iso(1) identified-organization(3) certicom(132) curve(0) 34");
ASN1.defineObjectIdentifier("sect409k1", "iso(1) identified-organization(3) certicom(132) curve(0) 36");
ASN1.defineObjectIdentifier("sect409r1", "iso(1) identified-organization(3) certicom(132) curve(0) 37");
ASN1.defineObjectIdentifier("secp521r1", "iso(1) identified-organization(3) certicom(132) curve(0) 35");
ASN1.defineObjectIdentifier("sect571k1", "iso(1) identified-organization(3) certicom(132) curve(0) 38");
ASN1.defineObjectIdentifier("sect571r1", "iso(1) identified-organization(3) certicom(132) curve(0) 39");

ASN1.defineObjectIdentifier("id-ecDH", "iso(1) identified-organization(3) certicom(132) schemes(1) ecdh(12)");
ASN1.defineObjectIdentifier("id-ecMQV", "iso(1) identified-organization(3) certicom(132) schemes(1) ecmqv(13)");

ASN1.defineObjectIdentifier("id-md2", "iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 2");
ASN1.defineObjectIdentifier("id-md5 ", "iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 5");
ASN1.defineObjectIdentifier("id-sha1", "iso(1) identified-organization(3) oiw(14) secsig(3) algorithm(2) 26");
ASN1.defineObjectIdentifier("id-sha224", "joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 4");
ASN1.defineObjectIdentifier("id-sha256", "joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 1");
ASN1.defineObjectIdentifier("id-sha384", "joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 2");
ASN1.defineObjectIdentifier("id-sha512", "joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 3");

ASN1.defineObjectIdentifier("dhpublicnumber", "iso(1) member-body(2) us(840) ansi-x942(10046) number-type(2) 1");
ASN1.defineObjectIdentifier("id-keyExchangeAlgorithm", "joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) dod(2) infosec(1) algorithms(1) 22");

// PKCS#1
ASN1.defineObjectIdentifier("pkcs-1", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1)");
ASN1.defineObjectIdentifier("rsaEncryption", "pkcs-1 1");
ASN1.defineObjectIdentifier("md2WithRSAEncryption", "pkcs-1 2");
ASN1.defineObjectIdentifier("md5WithRSAEncryption", "pkcs-1 4");
ASN1.defineObjectIdentifier("sha1WithRSAEncryption", "pkcs-1 5");
ASN1.defineObjectIdentifier("id-RSAES-OAEP", "pkcs-1 7");
ASN1.defineObjectIdentifier("id-mgf1", "pkcs-1 8");
ASN1.defineObjectIdentifier("id-pSpecified", "pkcs-1 9");
ASN1.defineObjectIdentifier("id-RSASSA-PSS", "pkcs-1 10");
ASN1.defineObjectIdentifier("sha256WithRSAEncryption", "pkcs-1 11");
ASN1.defineObjectIdentifier("sha384WithRSAEncryption", "pkcs-1 12");
ASN1.defineObjectIdentifier("sha512WithRSAEncryption", "pkcs-1 13");

ASN1.defineObjectIdentifier("id-dsa-with-sha1", "iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 3");
ASN1.defineObjectIdentifier("id-dsa-with-sha224", "joint-iso-ccitt(2) country(16) us(840) organization(1) gov(101) csor(3) algorithms(4) id-dsa-with-sha2(3) 1");
ASN1.defineObjectIdentifier("id-dsa-with-sha256", "joint-iso-ccitt(2) country(16) us(840) organization(1) gov(101) csor(3) algorithms(4) id-dsa-with-sha2(3) 2");

ASN1.defineObjectIdentifier("ecdsa-with-SHA1", "iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) 1");
ASN1.defineObjectIdentifier("ecdsa-with-SHA2", "iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3)");
ASN1.defineObjectIdentifier("ecdsa-with-SHA224", "ecdsa-with-SHA2 1");
ASN1.defineObjectIdentifier("ecdsa-with-SHA256", "ecdsa-with-SHA2 2");
ASN1.defineObjectIdentifier("ecdsa-with-SHA384", "ecdsa-with-SHA2 3");
ASN1.defineObjectIdentifier("ecdsa-with-SHA512", "ecdsa-with-SHA2 4");


ASN1.defineObjectIdentifier("CryptographicMessageSyntax", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) cms(1)");

ASN1.defineObjectIdentifier("id-alg-ESDH", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 5");
ASN1.defineObjectIdentifier("id-alg-CMS3DESwrap", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 6");
ASN1.defineObjectIdentifier("id-alg-CMSRC2wrap", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 7");
ASN1.defineObjectIdentifier("des-ede3-cbc", "iso(1) member-body(2) us(840) rsadsi(113549) encryptionAlgorithm(3) 7");
ASN1.defineObjectIdentifier("rc2-cbc", "iso(1) member-body(2) us(840) rsadsi(113549) encryptionAlgorithm(3) 2");
ASN1.defineObjectIdentifier("hMAC-SHA1", "iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) 8 1 2");

ASN1.defineObjectIdentifier("id-ct-contentInfo", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 6");
ASN1.defineObjectIdentifier("id-data", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 1");
ASN1.defineObjectIdentifier("id-signedData", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2");
ASN1.defineObjectIdentifier("id-envelopedData", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 3");
ASN1.defineObjectIdentifier("id-digestedData", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 5");
ASN1.defineObjectIdentifier("id-encryptedData", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 6");
ASN1.defineObjectIdentifier("id-ct-authData", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 2");
ASN1.defineObjectIdentifier("id-contentType", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 3");
ASN1.defineObjectIdentifier("id-messageDigest", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 4");
ASN1.defineObjectIdentifier("id-signingTime", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 5");
ASN1.defineObjectIdentifier("id-countersignature", "iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 6");

ASN1.defineObjectIdentifier("dhSinglePass_StdDH_SHA1KDF", "1.3.133.16.840.63.0.2");

ASN1.defineObjectIdentifier("id-aes", "2.16.840.1.101.3.4.1");
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 * Consult your license package for usage terms and conditions.
 *
 * @fileoverview Card Task
 */



function CardTask(scheduler, reader) {
	this.scheduler = scheduler;
	this.reader = reader;

	this.task = new Task(this);
}

exports.CardTask = CardTask;



CardTask.prototype.start = function() {
	this.running = true;
	this.task.start();
}



CardTask.prototype.stop = function() {
	this.running = false;
	this.task.stop();
	this.task.dispose();
	this.task = undefined;
}



CardTask.prototype.run = function() {
	try 	{
		this.card = new Card(this.reader);
		this.card.reset(Card.RESET_COLD);

		var msg = this.scheduler.handleCard(this.card);
		this.task.setMessage(this.reader + " : " + msg);
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, "CardTask", e);
		this.task.setMessage(this.reader + " : " + e.message);
		throw e;
	}
	finally {
		if (this.card) {
			this.card.close();
		}
	}
}



CardTask.prototype.notify = function() {
	this.task.setMessage(this.reader + " : " + this.card.remoteMessage + "(" + this.card.remoteMessageId + ")");
}



CardTask.prototype.toString = function() {
	return this.reader;
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 * Consult your license package for usage terms and conditions.
 *
 * @fileoverview DICA Task
 */



function DICATask(card, url) {
	this.card = card;
	this.url = url;
	this.task = new Task(this);
	this.task.setContextMenu([ "Stop" ]);
}

exports.DICATask = DICATask;



DICATask.prototype.start = function() {
	this.running = true;
	this.task.start();
}



DICATask.prototype.stop = function() {
	this.running = false;
	this.task.stop();
	this.task.dispose();
	this.task = undefined;
}



DICATask.prototype.run = function() {
	try 	{
		this.card.remoteUpdate(this.url);
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, "DICATask", e);
		this.task.setMessage(this.reader + " : " + e.message);
		throw e;
	}
	finally {
		if (this.card) {
			this.card.close();
		}
	}
}



DICATask.prototype.actionListener = function(source, action) {
	switch(action) {
	case "Stop":
		this.card.cancelRemoteUpdate();
		Card.setCardEventListener();
		this.stop();
		break;
	}
}



DICATask.prototype.notify = function() {
	this.task.setMessage(this.reader + " : " + this.card.remoteMessage + "(" + this.card.remoteMessageId + ")");
}



DICATask.prototype.toString = function() {
	return "DICA connected to " + this.url;
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 * Consult your license package for usage terms and conditions.
 *
 * @fileoverview Post Issuance Functions
 */

var SCPAuthenticator = require("scsh/perso/SCPAuthenticator").SCPAuthenticator;



function Initializer(job) {
	this.job = job;
	this.authenticator = new SCPAuthenticator(CustomerKeys[job.Keys]);

	this.aid = new ByteString("A000000151000000", HEX);

	this.af = new ApplicationFactory(new Crypto());
	this.af.addApplicationProfile("scsh/perso/ap_jcop_cardmanager.xml");
}

exports.Initializer = Initializer;

Initializer.type = "initializer";



Initializer.prototype.handleCard = function(card) {

	card.reset(Card.RESET_COLD);

	var data = {
		applAid: new ByteString("E82B0601040181C31F0201", HEX)
	};

	var dm = {
		get: function(name, fixed, length, encoding) {
			if (typeof(data[name]) == "undefined") {
				return null;
			}

			return data[name];
		}
	}

	var appl = this.af.getApplicationInstance(dm, this.aid, card, this.job.Profile);
	appl.keyProvider = this.authenticator;

	for (var i = 0; i < this.job.Steps.length; i++) {
		var e = this.job.Steps[i];
		if (typeof(e) == "string") {
			appl.run(this.job.Steps[i]);
		} else {
			data = e.data;
			appl.run(e.step);
		}
	}

	return "OK";
}



Initializer.prototype.configure = function() {
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 * Consult your license package for usage terms and conditions.
 *
 * @fileoverview Initializer for JCOP4 cards
 */

var File = require("scsh/file/File").File;
var SCPAuthenticator = require("scsh/perso/SCPAuthenticator").SCPAuthenticator;



function JCOP4Initializer(job) {
	this.job = job;
	this.jcopkeys = JCOPKeys.JCOP4;

	this.authenticator = new SCPAuthenticator(CustomerKeys[job.Keys]);

	this.aid = new ByteString("A000000151000000", HEX);

	this.af = new ApplicationFactory(new Crypto());

	var f = new File("profiles");
	var l = f.list();
	for (var i = 0; i < l.length; i++) {
		if (l[i].search(/^ap_jcop.*$/) == 0) {
			var name = l[i];
			print("Loading profile " + name);
			this.af.addApplicationProfile("profiles/" + name);
		}
	}
}

exports.JCOP4Initializer = JCOP4Initializer;

JCOP4Initializer.type = "initializer";



JCOP4Initializer.prototype.determineConfigId = function(card) {
	var iddata = card.sendApdu(0x80, 0xCA, 0x00, 0xFE, new ByteString("DF28", HEX), 0);

	if (card.SW != 0x9000) {
		return;
	}

	print("IDENTIFY returns:");
	print(iddata);

	var a = new ASN1(0x30, (new ASN1(iddata)).get(0).value);
	var a = new ASN1(a.getBytes());

	var epromid = a.find(0x01).value;
	print("EEPROM ID          " + epromid.toString(HEX));
	var configid = epromid.bytes(1,3).toString(HEX);
	print("  Configuration ID " + configid);
	var backgroundid = epromid.bytes(4,8);
	print("  Background ID    " + backgroundid.toString(HEX));
	print("Patch ID           " + a.find(0x02).value.toString(HEX));
	var pbid = a.find(0x03).value;
	print("Platform build ID  " + pbid.bytes(0, 16).toString(ASCII) + "-" + pbid.bytes(16, 8).toString(HEX));
	print("FIPS Mode          " + a.find(0x05).value.toString(HEX));
	print("Pre-perso state    " + a.find(0x07).value.toString(HEX));
	print("ROM ID             " + a.find(0x08).value.toString(HEX));

	return configid;
}



JCOP4Initializer.prototype.determineKeyVersion = function(card) {
	card.sendApdu(0x00, 0xA4, 0x04, 0x00, this.aid, [0x9000, 0x6D00]);

	var kit = card.sendApdu(0x00, 0xCA, 0x00, 0xE0, 0, [0x9000, 0x6982]);

	if (card.SW == 0x6982) {
		return 0xFF;
	}

	var kid = kit.byteAt(3);
	print("ISD Key Version    " + kid);
	return kid;
}



JCOP4Initializer.prototype.handleCard = function(card) {

	card.reset(Card.RESET_COLD);
	this.configid = this.determineConfigId(card);
	var kid = this.determineKeyVersion(card);

	if (typeof(this.job.RequiredKID) == "object") {
		if (this.job.RequiredKID.indexOf(kid) < 0) {
			throw new Error("KID does not match requirement");
		}
	}

	var jkeys = this.jcopkeys[this.configid];

	if (kid == 255) {
		if (typeof(jkeys) == "undefined") {
			throw new Error("Configuration id " + configid + " not found. Entry in keys.js missing ?");
		}

		this.authenticator.transportKeys = jkeys.transportKey;
	}

	var data = {
		applAid: new ByteString("E82B0601040181C31F0201", HEX)
	};

	var dm = {
		get: function(name, fixed, length, encoding) {
			if (typeof(data[name]) == "undefined") {
				return null;
			}

			return data[name];
		}
	}

	var appl = this.af.getApplicationInstance(dm, this.aid, card, this.job.Profile);
	appl.keyProvider = this.authenticator;

	for (var i = 0; i < this.job.Steps.length; i++) {
		var e = this.job.Steps[i];
		if (typeof(e) == "string") {
			appl.run(this.job.Steps[i]);
		} else {
			data = e.data;
			appl.run(e.step);
		}
	}

	return "OK";
}



JCOP4Initializer.prototype.configure = function() {
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2020 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Personalization Client forthe PKI-as-a-Service Portal
 */

var SmartCardHSM = require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;
var CVC = require("scsh/eac/CVC").CVC;
var DICATask = require("scsh/perso/DICATask").DICATask;


function PortalPersonalizer(job) {
	this.job = job;
}

exports.PortalPersonalizer = PortalPersonalizer;

PortalPersonalizer.type = "personalizer";




PortalPersonalizer.prototype.configure = function() {
	this.parseSubjectURL();
	this.login();
	if (typeof(this.job.dicaId) != "undefined") {
		this.dicaId = this.job.dicaId;
	} else {
		this.getDICA();
	}
	if (Dialog.prompt("Connect DICA Token to Portal ?")) {
		this.attachDICA();
	}
}



PortalPersonalizer.prototype.parseSubjectURL = function(url) {

	var url = "https://www.pki-as-a-service.net/se/paas/subject/<id>";
	var subjectPath = "/se/paas/subject/";
	var prompt = true;

	if (typeof(this.job.url) != "undefined") {
		url = this.job.url;
	}

	while (true) {
		var pathIdx = url.indexOf(subjectPath);
		if (pathIdx < 0) {
			assert(Dialog.prompt("URL must contain " + subjectPath));
		} else {
			var id = parseInt(url.substring(pathIdx + subjectPath.length));
			if (isNaN(id)) {
				assert(Dialog.prompt("URL must contain a subject id after " + subjectPath));
			} else {
				break;
			}
		}

		url = Dialog.prompt("Enter the URL of the Device Issuer", url);
		assert(url, "User abort");
	}

	this.host = url.substring(0, pathIdx);
	this.subjectId = id;
}



PortalPersonalizer.prototype.attachDICA = function() {
	var readerList = Card.getReaderList();
	var lastreader = _scsh3.DICAToken;
	if (!lastreader) {
		lastreader = _scsh3.reader;
	}
	while (true) {
		var reader = Dialog.prompt("Please select reader with DICA token", lastreader, readerList);
		assert(reader, "User abort");
		_scsh3.setProperty("DICAToken", reader);

		try	{
			var card = new Card(reader);
			var sc = new SmartCardHSM(card);
			sc.verifyUserPIN();
			break;
		}
		catch(e) {
			print(e);
		}
	}

	var idx = this.host.lastIndexOf(":");
	if (idx >= 0) {
		var url = this.host.substr(0, idx) + ":8081/rt/hsm";
	} else {
		var url = this.host + "/sems-rt/";
	}

	url = Dialog.prompt("Connect to", url);
	assert(url, "User abort");

	this.dicatask = new DICATask(card, url);
	this.dicatask.start();
}



PortalPersonalizer.prototype.login = function() {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var login2 = false;
	// Get new session
	var baseURL = this.host + "/se";
	var c = new URLConnection(baseURL);
	c.addHeaderField("Accept", "application/json");
	var result = c.get();

	var cookie = c.getHeaderField("Set-Cookie");
	this.session = cookie[0].substr(0, cookie[0].indexOf(";"));

	if (c.contentType == "application/json") {
		login2 = true;
		print(result);
		result = JSON.parse(result);

		var conInfo = {
			url: result.rt.url,
			pinrequired: result.rt.pinRequired,
			sessionId: result.rt.sessionId
		};
	} else {
		// Get connection string

		c.addHeaderField("Cookie", this.session);
		var result = c.get();

		var html = result.match(/<html xmlns="http:\/\/www.w3.org\/1999\/xhtml" lang="en" xml:lang="en">[\s\S]*<\/html>/);
		var page = new XML(html);

		var content = page..div.(@id == "content");
		var img = content..img;
		var remoteStr = img.@src.toXMLString();

		var queryStr = remoteStr.substr(remoteStr.indexOf("?") + 1);

		var params = queryStr.split("&amp;");
		var conInfo = {};
		for (var i = 0; i < params.length; i++) {
			var param = params[i];
			var res = param.split("=");
			conInfo[res[0]] = res[1];
		}
	}


	// Authenticate with login token

	var readerList = Card.getReaderList();
	var lastreader = _scsh3.portalReader;
	if (!lastreader) {
		lastreader = _scsh3.reader;
	}
	var reader = Dialog.prompt("Please select reader with token to log in", lastreader, readerList);
	assert(reader, "User abort");
	_scsh3.setProperty("portalReader", reader);

	var card = new Card(reader);

	if (conInfo.pinrequired == 1) {
		GPSystem.trace("Authenticate User");
		var sc = new SmartCardHSM(card);
		if (sc.verifyUserPIN() != 0x9000) {
			throw new Error("Wrong PIN. Login aborted");
		}
	}

	GPSystem.trace("Connect Card");
	card.remoteUpdate(conInfo.url, conInfo.sessionId);
	print("id  " + card.remoteMessageId);
	print("msg " + card.remoteMessage);

	if (login2) {
		var c = new URLConnection(baseURL);
		c.addHeaderField("Accept", "application/json");
		c.addHeaderField("Cookie", this.session);
		var result = c.get();
		print(result);
	}

	var sel = Dialog.prompt("Please remove the token to prevent accidently overwriting it");
	assert(sel, "User abort");
}



PortalPersonalizer.prototype.getDICA = function() {
	// Retrieve DICA

	var dicaURL = this.host + "/se/paas/subject-rest/" + this.subjectId + "/dica";

	var c = new URLConnection(dicaURL);
	c.addHeaderField("Cookie", this.session);
	var result = c.get();
	GPSystem.trace(result);

	var deviceIssuer = JSON.parse(result);

	if (deviceIssuer.dica.length == 0) {
		throw new Error("No DICA found. Is this the correct subject ?");
	}

	var labels = [];
	for (var i = 0; i < deviceIssuer.dica.length; i++) {
		labels.push(deviceIssuer.dica[i].label);
	}

	var dicaLabel = Dialog.prompt("Select DICA", deviceIssuer.dica[0].label, labels);

	for (var i = 0; i < deviceIssuer.dica.length; i++) {
		var dica = deviceIssuer.dica[i];
		if (dica.label == dicaLabel) {
			this.dicaId = dica.id;
			print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
			print("You have selected the dica " + dicaLabel + " of Device Issuer "  + deviceIssuer.name + ".");
			print("Update your jobs.js configuration to the following to remember this decision for future use.");
			print("");
			print("PortalPersonalizer: {");
			print("\turl: \"" + this.host + "/se/paas/subject/" + this.subjectId + "\",");
			print("\tdicaId: " + this.dicaId);
			print("}");
			print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
		}
	}
}



PortalPersonalizer.prototype.createServiceRequest = function() {
	var srURL = this.host + "/se/paas/sr-rest/new";
	srURL += "?process=DICAPersonalization";
	srURL += "&ca=" + this.subjectId;
	srURL += "&dicaId=" + this.dicaId;
	if (typeof(this.job.ccr) != "undefined") {
		srURL += "&ccr=" + this.job.ccr;
	}
	if (typeof(this.job.hardware) != "undefined") {
		srURL += "&hardware=" + this.job.hardware;
	}
	if (typeof(this.job.kmc) != "undefined") {
		srURL += "&kmc=" + this.job.kmc;
	}

//	print("Post Personalization Request");

	var c = new URLConnection(srURL);
	c.addHeaderField("Cookie", this.session);
	var result = c.post("");
	if (c.responseCode != 201) {
		throw new GPError(module.id, GPError.OBJECTCREATIONFAILED, 0, "Failed to create personalization service request (" + c.responseCode + ")");
	}

	print(result);
	var rsp = JSON.parse(result);

	if (rsp.message != "msg.completed") {
		throw new GPError(module.id, GPError.OBJECTCREATIONFAILED, 0, "Failed to create personalization service request (" + rsp.detail + ")");
	}

	return rsp;
}



PortalPersonalizer.prototype.handleCard = function(card) {
	var sr = this.createServiceRequest();

	var remoteUpdateURL = sr.url;

	GPSystem.trace("Connect card to service request");
	card.remoteUpdate(remoteUpdateURL);

	if (card.remoteMessageId != 0) {
		throw new GPError(module.id, GPError.OBJECTCREATIONFAILED, 0, "Personalization service request failed: " + card.remoteMessage);
	}

	return "OK " + card.remoteMessage;
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 * Consult your license package for usage terms and conditions.
 *
 * @fileoverview Personalization Client
 */

var CardTask = require("scsh/perso/CardTask").CardTask;
var File = require("scsh/file/File").File;



function SCPAuthenticator(keys) {
	this.crypto = new Crypto();
	this.keys = keys;
	this.locateKMC();
}

exports.SCPAuthenticator = SCPAuthenticator;



SCPAuthenticator.prototype.deriveKeyAESKMC = function(key, ddc, size, dd) {
	var context = ByteString.valueOf(ddc, 4).concat(ByteString.valueOf(0)).concat(dd);

	var dd = new ByteBuffer();
	var os = size;
	var iter = 1;
	while (os > 0) {
		var dp = new ByteBuffer();
		dp.append(ByteString.valueOf(iter));
		dp.append(context);

		var mac = key.sign(Crypto.AES_CMAC, dp.toByteString());

		dd.append(mac.left(os > mac.length ? mac.length : os));
		os -= mac.length;
		iter++;
	}
	return dd.toByteString();
}



SCPAuthenticator.prototype.getGPScpKeySet = function(scp, version, derivationData, forReplacement) {
	print("SCP0" + scp + " Key Version " + version);

	var kt = scp == 2 ? Key.DES : Key.AES;

	var kenc = new Key();
	var kmac = new Key();
	var kdek = new Key();

	if (version == -1) {		// The NXP Transport Key
		if (typeof(this.transportKeys) == "undefined") {
			throw new GPError(module.id, GPError.OBJECT_NOT_FOUND, 0, "No transport key defined");
		}

		kenc.setComponent(kt, this.transportKeys.bytes(0, 16));
		kmac.setComponent(kt, this.transportKeys.bytes(16, 16));
		kdek.setComponent(kt, this.transportKeys.bytes(32, 16));
	} else if (version == 1) {	// The Key for Secure Transport (KST)
		if (!forReplacement) {
			var a = new ASN1(this.keys.KST);
		} else {
			var a = new ASN1(this.keys.NewKST);
		}
		kenc.setComponent(kt, a.get(0).value);
		kmac.setComponent(kt, a.get(1).value);
		kdek.setComponent(kt, a.get(2).value);
	} else if ((version == 2) && (scp == 2)) {	// The old KMC key derivation scheme using a DES KMC
		if (typeof(this.keys.KMC) == "undefined") {
			throw new GPError(module.id, GPError.OBJECT_NOT_FOUND, 0, "No DES KMC for version 2 defined");
		}
		var kmc = new Key();
		kmc.setComponent(Key.DES, this.keys.KMC);
		var dd = derivationData.right(6);
		var derivationParam = dd.concat(new ByteString("F001", HEX)).concat(dd).concat(new ByteString("0F01", HEX));
		this.crypto.deriveKey(kmc, Crypto.DES_ECB, derivationParam, kenc);
		var derivationParam = dd.concat(new ByteString("F002", HEX)).concat(dd).concat(new ByteString("0F02", HEX));
		this.crypto.deriveKey(kmc, Crypto.DES_ECB, derivationParam, kmac);
		var derivationParam = dd.concat(new ByteString("F003", HEX)).concat(dd).concat(new ByteString("0F03", HEX));
		this.crypto.deriveKey(kmc, Crypto.DES_ECB, derivationParam, kdek);
	} else if ((version == 3) || ((version == 2) && (scp == 3))) {	// The new KMC key derivation scheme using a AES KMC on a SC-HSM
		if (typeof(this.kmc) == "undefined") {
			throw new GPError(module.id, GPError.OBJECT_NOT_FOUND, 0, "No KMC for version 3 defined");
		}
		kenc.setComponent(kt, this.deriveKeyAESKMC(this.kmc, 1, 16, derivationData));
		kmac.setComponent(kt, this.deriveKeyAESKMC(this.kmc, 2, 16, derivationData));
		kdek.setComponent(kt, this.deriveKeyAESKMC(this.kmc, 3, 16, derivationData));
	} else {
		throw new GPError(module.id, GPError.OBJECT_NOT_FOUND, 0, "Unsupported key version");
	}

	return new GPScpKeySet(version, kenc, kmac, kdek);
}



SCPAuthenticator.prototype.locateKMC = function() {
	if (typeof(km) == "undefined") {
		return;
	}

	if (typeof(km.managementToken) == "undefined") {
		return;
	}

	if (typeof(km.managementToken.tmk) == "undefined") {
		return;
	}

	this.kmc = km.managementToken.tmk;
	print("Found KMC for V3");
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 * Consult your license package for usage terms and conditions.
 *
 * @fileoverview Personalization Client
 */

var CardTask = require("scsh/perso/CardTask").CardTask;
var File = require("scsh/file/File").File;



function Scheduler(jobs) {
	this.jobs = jobs;
	this.taskmap = [];
	this.handler = {};
}

exports.Scheduler = Scheduler;



Scheduler.prototype.handleSingle = function(readername) {
	this.term.off();
	this.card = new Card(readername);
	try	{
		var msg = scheduler.handleCard(this.card);
		print("Personalization complete: " + msg);
		this.term.green();
		if (this.printer) {
			this.printer.ejectCard();
		}
	}
	catch(e) {
		GPSystem.trace(e);
		GPSystem.trace(e.stack);
		print("Personalization failed with " + e.message);
		this.term.red();
		GPSystem.wait(200);
		this.term.off();
		GPSystem.wait(200);
		this.term.red();
		if (this.printer) {
			this.printer.rejectCard();
			var ok = Dialog.prompt("Card rejected. Continue ?");
			if (ok != "OK") {
				throw new Error("User abort");
			}
		}
	}
	delete this.card;
}



Scheduler.prototype.handleOneByOne = function() {
	while(true) {
		if (this.printer.feedCard()) {
			print("Card inserted");
		} else {
			print("Could not feed card. Stopped");
			return;
		}
		this.handleSingle(_scsh3.reader);
	}
}



Scheduler.prototype.isIgnoredReader = function(readername) {
	if ((_scsh3.reader == null) || (_scsh3.reader.length == 0)) {
		return false;
	}

	var str = "!" + readername;
	var list = _scsh3.reader.split(";");
	return list.indexOf(str) >= 0;
}



Scheduler.prototype.cardInserted = function(readername) {
	print("Inserted " + readername);

	if (this.isIgnoredReader(readername)) {
		print("Skipped reader");
		return;
	}

	if (this.mode == 2) {
		var t = this.taskmap[readername];

		if (typeof(t) != "undefined") {
			print("Reader " + readername + " already running. Ignored");
		}

		t = new CardTask(this, readername);
		this.taskmap[readername] = t;
		t.start();
	} else if (this.mode == 1) {
		if (this.card) {
			print("Personalization in progress...");
			return;
		}
		this.handleSingle(readername);
	}
}



Scheduler.prototype.cardRemoved = function(readername) {
	print("Removed " + readername);

	if (this.isIgnoredReader(readername)) {
		print("Skipped reader");
		return;
	}

	if (this.mode == 2) {
		var t = this.taskmap[readername];
		if (typeof(t) != "undefined") {
			t.stop();
			delete this.taskmap[readername];
		}
	} else {
		if (this.printer) {
			if (this.printer.feedCard()) {
				print("Card inserted");
			} else {
				print("Could not feed card. Stopped");
				Card.setCardEventListener();
			}
		}
	}
}



Scheduler.prototype.cardNotification = function(readername) {
	if (this.isIgnoredReader(readername)) {
		print("Skipped reader");
		return;
	}

	if (this.mode == 2) {
		var t = this.taskmap[readername];
		if (typeof(t) != "undefined") {
			t.notify();
		}
	} else {
		print(this.card.remoteMessage + " (" + this.card.remoteMessageId + ")");
	}
}



Scheduler.prototype.handleCard = function(card) {
	var msg = "Done";

	if (this.initializer) {
		var msg = this.initializer.handleCard(card);
	}
	if (this.personalizer) {
		var msg = this.personalizer.handleCard(card);
	}
	print(msg);

	return msg;
}



Scheduler.prototype.configureJob = function() {
	for (var n in this.job) {
		if (n == "Name") {
			continue;
		}

		var cfg = n;
		if (n == "PortalPersonalizer2") {
			n = "PortalPersonalizer";
		} else if (n == "PreIssuance") {
			n = "Initializer";
		} else if (n == "PostIssuance") {
			n = "Initializer";
		}

//		print("###Locating " + n);

		var clazz = this.handler[n];
		if (typeof(clazz) == "undefined") {
			var prefix = "";
			var f = new File(clazz + ".js");
			if (!f.exists()) {
				prefix = "scsh/perso/";
			}
			clazz = require(prefix + n)[n];
			this.handler[n] = clazz;
		}
//		print("###Type : " + clazz.type);

		this[clazz.type] = new clazz(this.job[cfg]);
		this[clazz.type].configure();
	}
}



Scheduler.prototype.selectJob = function() {
	var list = [];

	for (var i = 0; i < this.jobs.length; i++) {
		list.push(this.jobs[i].Name);
	}

	var cust = Dialog.prompt("Select job", "", list);
	if (cust == null) {
		throw new Error("User abort");
	}

	var i = list.indexOf(cust);
	this.job = this.jobs[i];

	this.configureJob();
}



Scheduler.prototype.selectMode = function() {
	var modelist = [ "Single-Shot", "Single-Card-Insert", "Multi-Card-Insert" ];

	var defsel = modelist[1];
	if (this.printer) {
		defsel = "One-by-One";
		modelist.push(defsel);
	}

	var sel = Dialog.prompt("Mode", defsel, modelist);
	if (sel == null) throw new Error("User abort");

	this.mode = modelist.indexOf(sel);

	if (this.mode != 2) {
		this.term = new AccessTerminal();
		this.term.green();
	}

	if (this.mode == 0) {
		scheduler.handleSingle(_scsh3.reader);
	} else if (this.mode == 3) {
		scheduler.handleOneByOne();
	} else {
		Card.setCardEventListener(this);
		if (this.printer) {
			if (this.printer.feedCard()) {
				print("Card inserted");
			} else {
				print("Could not start card feed");
				Card.setCardEventListener();
			}
		} else {
			print("Personalization system ready. Please insert card.");
		}
	}
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2024 CardContact Systems GmbH
 * |'##> <##'|  32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 * Consult your license package for usage terms and conditions.
 *
 * @fileoverview Printer control using a shell command
 */

function ShellPrinterControl(param) {
	this.param = param;
	this.runtime = java.lang.Runtime.getRuntime();
}

exports.ShellPrinterControl = ShellPrinterControl;

ShellPrinterControl.type = "printer";



ShellPrinterControl.prototype.configure = function() {
}



/**
 * Execute command and parse first line of output.
 *
 * @param {Object} the command spec
 * @type Boolean
 * @return true if command completed and output matched regex in field ok
 */
ShellPrinterControl.prototype.exec = function(f) {
	GPSystem.trace("Call " + f.cmd);
	var process = this.runtime.exec(f.cmd);

	var reader = new java.io.BufferedReader(new java.io.InputStreamReader(process.getInputStream()));

	var rc = process.waitFor();
	if (rc != 0) {
		GPSystem.trace("Exit code " + rc);
		return false;
	}

	var line = reader.readLine();
	GPSystem.trace(line);
	return line.match(f.ok) != null;
}



/**
 * Move a card in the printer to the reader unit
 */
ShellPrinterControl.prototype.feedCard = function() {
	return this.exec(this.param.feed);
}



/**
 * Eject a good card from the reader unit
 */
ShellPrinterControl.prototype.ejectCard = function() {
	return this.exec(this.param.eject);
}



/**
 * Eject a bad card from the reader unit into the reject outlet
 */
ShellPrinterControl.prototype.rejectCard = function() {
	return this.exec(this.param.reject);
}



ShellPrinterControl.test = function() {
	var param = {
		feed: {
			cmd: [ "evocom", "-pEvolis Quantum2", "Sis;" ],
			ok: /^OK$/
		},
		eject: {
			cmd: [ "evocom", "-pEvolis Quantum2", "Se;" ],
			ok: /^OK$/
		},
		reject: {
			cmd: [ "evocom", "-pEvolis Quantum2", "Ser;" ],
			ok: /^OK$/
		}
	};

	var s = new ShellPrinterControl(param);
	print(s.feedCard());
	print(s.ejectCard());
	print(s.rejectCard());
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2024 CardContact Systems GmbH
 * |'##> <##'|  32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 * Consult your license package for usage terms and conditions.
 *
 * @fileoverview Printer control using a shell command
 */

function TestAPDU(job) {
	this.job = job;
}

exports.TestAPDU = TestAPDU;

TestAPDU.type = "initializer";



TestAPDU.prototype.configure = function() {
}



TestAPDU.prototype.handleCard = function(card) {
	card.plainApdu(new ByteString(this.job.apdu, HEX), [0x9000]);
	return "OK";
}

<?xml version="1.0" encoding="UTF-8"?>
<gp:ApplicationProfile xmlns="http://namespaces.globalplatform.org/systems-profiles/1.1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://namespaces.globalplatform.org/systems-profiles/1.1.0 http://namespaces.globalplatform.org/systems-profiles/1.1.0/GP.systems.profiles.1.1.0.ApplicationProfile.xsd"
	xmlns:gp="http://namespaces.globalplatform.org/systems-profiles/1.1.0"
	xmlns:scdp="http://www.openscdp.org/namespaces/gp/systems-profiles/1.0.0"
	UniqueID="2B0601040181C31F10050201" ProfileVersion="1.0.0">
	<gp:Description>JCOP Card Manager Application Profile</gp:Description>
	<gp:Revisions arrayElement="Revision" arrayIndex="#">
		<gp:Revision Version="1.0.0" Date="2006-07-24" Time="12:00:00" By="www.CardContact.de" Digest=""></gp:Revision>
	</gp:Revisions>
	<gp:ConflictRules arrayElement="" arrayIndex=""></gp:ConflictRules>
	<gp:ApplicationInfo Version="1.0.0" Type="GP" Subtype="CM" Owner="GP" Developer="CardContact" Provider="GP" Domain="GP" VolatileDataSpaceMin="1000" NonVolatileDataSpaceMin="2000">
		<gp:Privileges/>
		<gp:LifeCycles arrayElement="LifeCycle" arrayIndex="#">
			<gp:LifeCycle Name=""/>
			<gp:LifeCycle Name=""/>
			<gp:LifeCycle Name=""/>
		</gp:LifeCycles>
	</gp:ApplicationInfo>

	<gp:DataElement Name="loadFileName" External="true" Type="ByteString" Encoding="ASCII"/>
	<gp:DataElement Name="loadFileAid" External="true" Type="ByteString"/>
	<gp:DataElement Name="moduleAid" External="true" Type="ByteString"/>
	<gp:DataElement Name="applAid" External="true" Type="ByteString"/>
	<gp:DataElement Name="applPrivileges" External="true" Type="ByteString"/>
	<gp:DataElement Name="installParam" External="true" Type="ByteString"/>

	<gp:Function Name="encryptDESkey" Param="dek, key">
		<gp:Description />
		<gp:Script><![CDATA[

			// Determine KCV, encrypt and encode key for PUT KEY command

			var zeros = new ByteString("0000000000000000", HEX);
			var kcv = this.crypto.encrypt(key, Crypto.DES_ECB, zeros).left(3);

			var ck = this.crypto.encrypt(dek, Crypto.DES_ECB, key.getComponent(Key.DES));
			var ckbin = (new ByteString("8010", HEX)).concat(ck);
			ckbin = ckbin.concat(new ByteString("03", HEX));
			ckbin = ckbin.concat(kcv);

			return ckbin;

		]]></gp:Script>

	</gp:Function>

	<gp:Function Name="encryptAESkey" Param="dek, key">
		<gp:Description />
		<gp:Script><![CDATA[

			var kv = dek.getComponent(Key.DES);
			if (kv) {
				print("Rewrite DES key " + kv + " to AES");
				var dek = new Key();
				dek.setComponent(Key.AES, kv);
			}

			var kv = key.getComponent(Key.DES);
			if (kv) {
				print("Rewrite DES key " + kv + " to AES");
				var key = new Key();
				key.setComponent(Key.AES, kv);
			}

			assert(dek instanceof Key, "Argument dek must be instance of Key");
			assert(key instanceof Key, "Argument key must be instance of Key");

			var keysize = key.getSize() >> 3;
			var ones = new ByteString("01010101010101010101010101010101", HEX);
			var kcv = this.crypto.encrypt(key, Crypto.AES_ECB, ones).left(3);

			var iv = ByteString.valueOf(0, 16);
			var ck = this.crypto.encrypt(dek, Crypto.AES_CBC, key.getComponent(Key.AES), iv);
			var ckbin = new ByteBuffer("88", HEX);
			ckbin.append(keysize + 1);
			ckbin.append(keysize);
			ckbin.append(ck);
			ckbin.append(3);
			ckbin.append(kcv);

			return ckbin.toByteString();
		]]></gp:Script>

	</gp:Function>

	<gp:ScriptFragment Name="TEST" StartLifeCycle="one" EndLifeCycle="two">
		<gp:Script><![CDATA[
			GPSystem.trace("TEST script started");

			this.select();
			this.openSecureChannel(3);		// 00-Plain, 01-Mac, 03-Mac+Enc

			]]></gp:Script>
	</gp:ScriptFragment>

    <gp:ScriptFragment Name="SETKST" StartLifeCycle="one" EndLifeCycle="two">
		<gp:Script><![CDATA[
			GPSystem.trace("SETKST script started");

			this.select();

			this.openSecureChannel(3);		// 00-Plain, 01-Mac, 03-Mac+Enc

			var kit = this.sendApdu(0x00, 0xCA, 0x00, 0xE0, 0, [0x9000, 0x6982]);

			if (this.card.SW == 0x9000) {
				var kid = kit.byteAt(3);
			} else {
				var kid = 255;
			}
			GPSystem.trace("ISD Key Version    " + kid);

			var scp = this.secureChannel instanceof GPScp02 ? 2 : 3;
			var keyset = this.keyProvider.getGPScpKeySet(scp, 1, kid == 1);

			// Encrypt card keys and add KCV
			if (scp == 2) {
				var ckbinenc = this.encryptDESkey(this.secureChannel.getDekKey(), keyset.getEncKey());
				var ckbinmac = this.encryptDESkey(this.secureChannel.getDekKey(), keyset.getMacKey());
				var ckbindek = this.encryptDESkey(this.secureChannel.getDekKey(), keyset.getDekKey());
			} else {
				var ckbinenc = this.encryptAESkey(this.secureChannel.getDekKey(), keyset.getEncKey());
				var ckbinmac = this.encryptAESkey(this.secureChannel.getDekKey(), keyset.getMacKey());
				var ckbindek = this.encryptAESkey(this.secureChannel.getDekKey(), keyset.getDekKey());
			}

			var cdata = new ByteString("01", HEX);
			cdata = cdata.concat(ckbinenc).concat(ckbinmac).concat(ckbindek);

			var p1 = kid == 255 ? 0 : kid;
			this.sendApdu(0x80, 0xD8, p1, 0x81, cdata, [0x9000]);
		]]></gp:Script>
	</gp:ScriptFragment>

	<gp:ScriptFragment Name="LOAD" StartLifeCycle="one" EndLifeCycle="two">
		<gp:Script><![CDATA[
			GPSystem.trace("LOAD script started");
			this.card.reset(Card.RESET_COLD);

			assert(this instanceof GPSecurityDomain);
			this.select();

			this.openSecureChannel(3);		// 00-Plain, 01-Mac, 03-Mac+Enc

			GPSystem.trace("Delete old applet instance...");
			this.deleteAID(this.data.applAid, [0x9000, 0x6A88, 0x6A80] );

			GPSystem.trace("Delete old applet load file...");
			this.deleteAID(this.data.loadFileAid, [0x9000, 0x6A88, 0x6A80] );

			GPSystem.trace("InstallForLoad applet...");
			this.installForLoad(this.data.loadFileAid, this.aid, null, null, null);

			GPSystem.trace("Loading " + this.data.loadFileName.toString(ASCII) + "...");
			print("Loading " + this.data.loadFileName.toString(ASCII) + "...");
			this.loadByName(this.data.loadFileName);

			GPSystem.trace("Instantiating applet...");
			var applPrivileges = new ByteString("00", HEX);
			var installParam = new ByteString("C900", HEX);
			this.installForInstallAndSelectable(this.data.loadFileAid, this.data.moduleAid, this.data.applAid, this.data.applPrivileges, this.data.installParam, null);

			]]></gp:Script>
	</gp:ScriptFragment>

	<gp:ScriptFragment Name="LOADCAP" StartLifeCycle="one" EndLifeCycle="two">
		<gp:Script><![CDATA[
			GPSystem.trace("LOADCAP script started");

			this.select();
			this.openSecureChannel(3);		// 00-Plain, 01-Mac, 03-Mac+Enc

			GPSystem.trace("InstallForLoad applet...");
			this.installForLoad(this.data.loadFileAid, this.aid, null, null, null);

			GPSystem.trace("Requesting " + this.data.loadFileName.toString(ASCII) + "...");
			var fn = this.data.loadFileName.toString(ASCII);
			if (fn.indexOf("apps/persoserver/") == 0) {
				fn = "sc-hsm-persoserver/" + fn.substr(17);
			}

			print("Loading " + fn + "...");
			this.loadByName(fn);
			]]></gp:Script>
	</gp:ScriptFragment>

	<gp:ScriptFragment Name="LOADROM" StartLifeCycle="one" EndLifeCycle="two">
		<gp:Script><![CDATA[
			GPSystem.trace("LOADROM script started");

			this.select();
			this.openSecureChannel(1);		// 00-Plain, 01-Mac, 03-Mac+Enc

			GPSystem.trace("InstallForLoad applet from ROM...");
			this.installForLoad(this.data.loadFileAid, this.aid, null, this.data.installParam, null);
			]]></gp:Script>
	</gp:ScriptFragment>

	<gp:ScriptFragment Name="DELETECAP" StartLifeCycle="one" EndLifeCycle="two">
		<gp:Script><![CDATA[
			GPSystem.trace("DELETECAP script started");

			this.select();
			this.openSecureChannel(1);		// 00-Plain, 01-Mac, 03-Mac+Enc

			GPSystem.trace("Delete old applet instance...");
			this.deleteAID(this.data.applAid, [0x9000, 0x6A88, 0x6A80] );

			GPSystem.trace("Delete old applet load file...");
			this.deleteAID(this.data.loadFileAid, [0x9000, 0x6A88, 0x6A80] );
			]]></gp:Script>
	</gp:ScriptFragment>

	<gp:ScriptFragment Name="INSTANTIATE" StartLifeCycle="one" EndLifeCycle="two">
		<gp:Script><![CDATA[
			GPSystem.trace("INSTANTIATE script started");

			this.select();
			this.openSecureChannel(1);		// 00-Plain, 01-Mac, 03-Mac+Enc

			GPSystem.trace("Instantiating applet...");
			var applPrivileges = new ByteString("00", HEX);
			var installParam = new ByteString("C900", HEX);
			this.installForInstallAndSelectable(this.data.loadFileAid, this.data.moduleAid, this.data.applAid, this.data.applPrivileges, this.data.installParam, null);
			]]></gp:Script>
	</gp:ScriptFragment>

	<gp:ScriptFragment Name="DELETEINSTANCE" StartLifeCycle="one" EndLifeCycle="two">
		<gp:Script><![CDATA[
			GPSystem.trace("DELETEINSTANCE script started");

			this.select();
			this.openSecureChannel(1);		// 00-Plain, 01-Mac, 03-Mac+Enc

			GPSystem.trace("Delete old applet instance...");
			this.deleteAID(this.data.applAid, [0x9000, 0x6A88, 0x6A80] );
			]]></gp:Script>
	</gp:ScriptFragment>

	<gp:ScriptFragment Name="SECURED" StartLifeCycle="one" EndLifeCycle="two">
		<gp:Script><![CDATA[
			GPSystem.trace("SECURED script started");

			this.select();

			this.openSecureChannel(1);		// 00-Plain, 01-Mac, 03-Mac+Enc

			var rsp = this.sendApdu(0x80, 0xF2, 0x80, 0x00, [0x9000]);
			var lc = rsp.byteAt(rsp.byteAt(0) + 1);

			if (lc == 1) {
				GPSystem.trace("Setting life cycle to INITIALIZED...");
				this.sendApdu(0x80, 0xF0, 0x80, 0x07, [0x9000]);
				GPSystem.trace("Setting life cycle to SECURED...");
				this.sendApdu(0x80, 0xF0, 0x80, 0x0F, [0x9000]);
			}
			]]></gp:Script>
	</gp:ScriptFragment>
</gp:ApplicationProfile>

/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2015 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Basic helper functions to encode and decode PKCS#1 padding
 */



/**
 * Empty constructor
 */
function PKCS1() {
}

if (typeof(exports) != "undefined")
	exports.PKCS1 = PKCS1;


/**
 * Mask Generation Function 1
 *
 * @param {Crypto} crypto instance providing hash
 * @param {Number} hashalg Hash algorithm (one of Crypto.SHA_xxx)
 * @param {ByteString} mgfSeed Seed byte string
 * @param {Number} maskLen length of requested masked
 * @type ByteString
 * @return the generated mask
 */
PKCS1.MGF1 = function(crypto, hashalg, mgfSeed, maskLen) {
	if ((maskLen < 0) || (maskLen > 256)) {
		throw new Error("maskLen out of range");
	}
	var t = new ByteString("", HEX);

	var c = 0;
	while (t.length < maskLen) {
		t = t.concat(crypto.digest(hashalg, mgfSeed.concat(ByteString.valueOf(c, 4))));
		c++;
	}
	return t.left(maskLen);
}



/**
 * EME-OAEP decoder as defined in PKCS#1 V2.1 chapter 7.1.2
 *
 * @param {Crypto} crypto instance providing hash function
 * @param {ByteString} label additional label for encryption
 * @param {Number} hashalg Hash algorithm (one of Crypto.SHA_xxx)
 * @param {ByteString} em encoded messages after RSA decrypt
 * @type ByteString
 * @return null if padding error or recovered message
 */
PKCS1.decode_EME_OAEP = function(crypto, label, hashalg, em) {
	if (!label) {
		label = new ByteString("", HEX);
	}

	var lHash = crypto.digest(hashalg, label);
	var hLen = lHash.length;
	var y = em.byteAt(0);
	var maskedSeed = em.bytes(1, hLen);
	var maskedDB = em.bytes(1 + hLen);

	var seedMask = PKCS1.MGF1(crypto, hashalg, maskedDB, hLen);
	var seed = maskedSeed.xor(seedMask);
	var dbMask = PKCS1.MGF1(crypto, hashalg, seed, em.length - hLen - 1);
	var DB = maskedDB.xor(dbMask);

	var c1 = y == 0;
	var c2 = DB.left(hLen).equals(lHash);
	var cnt = 0;
	var i = hLen;
	for (; (i < DB.length) && (DB.byteAt(i) != 0x01); i++) {
		cnt += (DB.byteAt(i) == 0x00) ? 1 : 0;
	}

	var c3 = i < DB.length;
	var c4 = cnt == (i - hLen);

	if (!c1 || !c2 || !c3 || !c4) {
		return null;
	}
	return DB.bytes(i + 1);
}



/**
 * EME-PKCS1-v1_5 decoder as defined in PKCS#1 V2.1 chapter 7.2.2
 *
 * @param {ByteString} em encoded messages after RSA decrypt
 * @type ByteString
 * @return null if padding error or recovered message
 */
PKCS1.decode_EME_V15 = function(em) {
	var c1 = em.byteAt(0) == 0;
	var c2 = em.byteAt(1) == 2;

	for (i = 2; (i < em.length) && (em.byteAt(i) != 0x00); i++);

	var c3 = i < em.length;

	if (!c1 || !c2 || !c3) {
		return null;
	}
	return em.bytes(i + 1);
}



PKCS1.ALLFF = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", HEX);

/**
 * EMSA-PKCS-v1_5 encoder as defined in PKCS#1 V2.1 chapter 9.2
 *
 * This method uses the length of the hash to determine the hash algorithm, i.e. MD5(16), SHA-1(20), SHA-224(28), SHA-256(32), SHA-384(48) or SHA-512(64)
 *
 * @param {Number} keysize the key size in bits
 * @param {ByteString} hash the hash value
 * @type ByteString
 * @return the encoded message
 */
PKCS1.encode_EMSA_V15 = function(keysize, hash) {
	switch(hash.length) {
		case 16:
			var oid = new ByteString("id-md5", OID);
			break;
		case 20:
			var oid = new ByteString("id-sha1", OID);
			break;
		case 28:
			var oid = new ByteString("id-sha224", OID);
			break;
		case 32:
			var oid = new ByteString("id-sha256", OID);
			break;
		case 48:
			var oid = new ByteString("id-sha384", OID);
			break;
		case 64:
			var oid = new ByteString("id-sha512", OID);
			break;
		default:
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "Invalid hash length");
	}
	var di = new ASN1(ASN1.SEQUENCE,
			new ASN1(ASN1.SEQUENCE,
				new ASN1(ASN1.OBJECT_IDENTIFIER, oid),
				new ASN1(ASN1.NULL, new ByteString("", HEX))
			    ),
			new ASN1(ASN1.OCTET_STRING, hash)
		     );

	var t = di.getBytes();
	var em = new ByteBuffer("0001", HEX);
	var pslen = (keysize >> 3) - t.length - 3;
	while (pslen > 0) {
		var l = pslen > 256 ? 256 : pslen;
		em.append(PKCS1.ALLFF.left(l));
		pslen -= l;
	}
	em.append(0x00);
	em.append(t);
	return em.toByteString();
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2015 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview PKCS#10 Decoder
 */

var PKIXCommon = require('scsh/x509/PKIXCommon').PKIXCommon;
var X509Name = require('scsh/x509/X509Name').X509Name;


/**
 * Class supporting PKCS#10 certificate signing requests
 *
 * @param {ASN1} req the certificate request
 */
function PKCS10(req) {

	if (req instanceof ASN1) {
		this.req = req;
	} else if (req instanceof ByteString) {
		var asn = new ASN1(req);
		this.req = asn;
	} else {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Argument must be either type of ByteString or ASN1");
	}

	this.reqInfo = this.req.get(0);
	this.sigAlg = this.req.get(1);
	this.sig = this.req.get(2);
}

exports.PKCS10 = PKCS10;

PKCS10.RSA = new ByteString("rsaEncryption", OID);
PKCS10.RSA_PSS = new ByteString("id-RSASSA-PSS", OID);
PKCS10.EC = new ByteString("id-ecPublicKey", OID);



/**
 * Get the encoded request
 *
 * @return the encoded request
 * @type ByteString
 */
PKCS10.prototype.getBytes = function() {
	return this.req.getBytes();
}



/**
 * Gets the subject name as TLV object
 *
 * @return the issuer RDNSequence
 * @type ASN1
 */
PKCS10.prototype.getSubject = function() {
	return this.reqInfo.get(1);
}



/**
 * Get the public key
 *
 * @type key
 * @return the public key
 */
PKCS10.prototype.getPublicKey = function() {
	var algorithm = this.reqInfo.get(2).get(0).get(0).value;

	var bitString = this.reqInfo.get(2).get(1).value;	// subjectPublicKey
	bitString = PKIXCommon.removeLeadingZeroBytes(bitString);

	var key = new Key();
	key.setType(Key.PUBLIC);

	if (algorithm.equals(PKCS10.RSA) || algorithm.equals(PKCS10.RSA_PSS)) {
		var p = new ASN1(bitString);
		key.setComponent(Key.MODULUS, PKIXCommon.removeLeadingZeroBytes(p.get(0).value));
		key.setComponent(Key.EXPONENT, PKIXCommon.removeLeadingZeroBytes(p.get(1).value));
	} else {
		key.setComponent(Key.ECC_CURVE_OID, this.reqInfo.get(2).get(0).get(1).value);
		if (bitString.byteAt(0) != 4) {
			throw new GPError(module.id, GPError.INVALID_MECH, 0, "Only uncompressed keys supported (04)");
		}
		var l = (bitString.length - 1) >> 1;
		key.setComponent(Key.ECC_QX, bitString.bytes(1, l));
		key.setComponent(Key.ECC_QY, bitString.bytes(1 + l, l));
	}

	return key;
}



/**
 * Get the signature algorithm as Crypto.X constant
 *
 * @type Number
 * @return the signature algorithm
 */
PKCS10.prototype.getSignatureAlgorithm = function() {
	var algOID = this.sigAlg.get(0).value;
	if (this.sigAlg.elements > 1) {
		var param = this.sigAlg.get(1).getBytes();
	}
	var alg = PKIXCommon.decodeSignatureAlgorithm(algOID, param);

	if (!alg) {
		throw new GPError(module.id, GPError.INVALID_MECH, alg, "Invalid algorithm");
	}
	return alg;
}



/**
 * Get the signature value
 *
 * @type ByteString
 * @return the signature
 */
PKCS10.prototype.getSignature = function() {
	var signature = this.sig.value;

	if (signature.byteAt(0) == 0x00) {
		signature = signature.bytes(1);
	}
	return signature;
}



/**
 * Verify signature
 *
 * @param {Key} pubKey optional public key to use for verification
 * @type boolean
 * @return true if signature is valid
 */
PKCS10.prototype.verify = function(pubKey) {
	var crypto = new Crypto();
	if (!pubKey) {
		pubKey = this.getPublicKey();
	}
	var alg = this.getSignatureAlgorithm();
	var signature = this.getSignature();

	return crypto.verify(pubKey, alg, this.reqInfo.getBytes(), signature);
}



PKCS10.prototype.toString = function() {
	var s = "PKCS#10 Request:";

	var k = this.getPublicKey();
	if (k.getComponent(Key.MODULUS)) {
		s+= "Type=RSA,";
	} else {
		s+= "Type=EC,";
		var curve = ASN1.nameForObjectIdentifier(k.getComponent(Key.ECC_CURVE_OID));
		if (curve) {
			s += "Curve=" + curve + ",";
		}
	}
	s+= "Size=" + k.getSize();

	var subject = this.getSubject();
	if (subject) {
		var xName = new X509Name(subject)
		s += "," + xName.toString();
	}

	return s;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Basic helper functions to convert PKCS#8 data to GP keys and vice versa
 */



/**
 * Empty constructor
 */
function PKCS8() {
}

if (typeof(exports) != "undefined")
	exports.PKCS8 = PKCS8;


PKCS8.idEcPublicKey = new ByteString("id-ecPublicKey", OID);
PKCS8.rsaEncryption = new ByteString("1.2.840.113549.1.1.1", OID);

/**
 * Convert x/y coordinates to uncompressed format
 *
 * @param {ByteString} x the x coordinate
 * @param {ByteString} y the y coordinate
 * @type ByteString
 * @return ByteString containing compressed format
 *
 */
PKCS8.encodeUncompressedECPoint = function(x,y) {

	var bb = new ByteBuffer();

	// uncompressed encoding
	bb.append(new ByteString("04", HEX));
	bb.append(x);
	bb.append(y);

	return bb.toByteString();
}



/**
 * Convert uncompressed format to x and y coordinates
 *
 * @param {ByteString} compressed point
 * @type Object
 * @return Object with ByteString properties x and y
 *
 */
PKCS8.decodeUncompressedECPoint = function(uncompressedPoint) {

	// Determine the size of the coordinates ignoring the indicator byte '04'
	var length = uncompressedPoint.length - 1;

	var sizeOfCoordinate = length >> 1;

	var xValue = uncompressedPoint.bytes(1, sizeOfCoordinate);
	var yValue = uncompressedPoint.bytes(1 + sizeOfCoordinate, sizeOfCoordinate);

	return { x:xValue, y:yValue };
}



/**
 * Integer to octet string conversion
 *
 * @param {ByteString} value the encoded integer value
 * @param {Number} the number of digits
 * @type ByteString
 * @return the truncated or padded result
 */
PKCS8.I2O = function(value, length) {
	if (value.length > length) {
		value = value.right(length);
	}
	while (value.length < length) {
		value = PKCS8.PAD.left((length - value.length - 1 & 15) + 1).concat(value);
	}
	return value;
}
PKCS8.PAD = new ByteString("00000000000000000000000000000000", HEX);



/**
 * Strips leading zeros of a ByteString
 *
 * @param {ByteString} value the ByteString value
 * @return the stripped ByteString object, may be an empty ByteString
 * @type ByteString
 */
PKCS8.stripLeadingZeros = function(value, size) {
	if (typeof(size) == "undefined") {
		var limit = value.length;
	} else {
		limit = value.length - size;
	}

	var i = 0;
	for (; (i < limit) && (value.byteAt(i) == 0); i++);

	return value.bytes(i);
}



/**
 * Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
 *
 * This prevent interpretation of the integer representation if converted into
 * a signed ASN1 INTEGER.
 *
 * @param {ByteString} value the value to convert
 * @return the converted value
 * @type ByteString
 */
PKCS8.convertUnsignedInteger = function(value) {
	assert(value.length > 0);

	var i = 0;
	for (; (i < value.length - 1) && (value.byteAt(i) == 0); i++);

	if (value.byteAt(i) >= 0x80) {
		value = (new ByteString("00", HEX)).concat(value.bytes(i));
	} else {
		value = value.bytes(i);
	}

	return value;
}



/**
 * Encode a given GP ECC private key as specified by the PKCS#8 format
 *
 * @param {Key} the private key object that should be encoded
 * @return the encoded PKCS#8 private key
 * @type ByteString
 */
PKCS8.encodeECCKeyUsingPKCS8Format = function(privateKey) {
	var privateKeyInfo = new ASN1(ASN1.SEQUENCE);

	// Set the version number - must be zero
	privateKeyInfo.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX)));

	var privateKeyAlgorithm = new ASN1(ASN1.SEQUENCE);
	privateKeyAlgorithm.add(new ASN1(ASN1.OBJECT_IDENTIFIER, PKCS8.idEcPublicKey));

	var domainInfo = new ASN1(ASN1.SEQUENCE);

	// Cofactor - must be 1
	domainInfo.add(new ASN1(ASN1.INTEGER, PKCS8.stripLeadingZeros(privateKey.getComponent(Key.ECC_H))));

	var field = new ASN1(ASN1.SEQUENCE);

	// we are using a prime field
	field.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("prime-field", OID))); // prime field

	var primeOrder = privateKey.getComponent(Key.ECC_P);
	if (primeOrder.byteAt(0) >= 0x80) { // signed int? -> add 0x00
		field.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX).concat(privateKey.getComponent(Key.ECC_P))));
	} else {
		field.add(new ASN1(ASN1.INTEGER, privateKey.getComponent(Key.ECC_P)));
	}

	domainInfo.add(field);

	// Coefficients a and b
	var coeff = new ASN1(ASN1.SEQUENCE);

	// first coefficient
	coeff.add(new ASN1(ASN1.OCTET_STRING, privateKey.getComponent(Key.ECC_A)));

	// second coefficient
	coeff.add(new ASN1(ASN1.OCTET_STRING, privateKey.getComponent(Key.ECC_B)));

	domainInfo.add(coeff);

	// Base point (uncompressed)
	var gx = privateKey.getComponent(Key.ECC_GX);
	var gy = privateKey.getComponent(Key.ECC_GY);

	domainInfo.add(new ASN1(ASN1.OCTET_STRING, PKCS8.encodeUncompressedECPoint(gx, gy)));

	// group order generated by the base point
	var groupOrder = privateKey.getComponent(Key.ECC_N);
	if (groupOrder.byteAt(0) >= 0x80) { // signed int? -> add 0x00
		domainInfo.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX).concat(privateKey.getComponent(Key.ECC_N))));
	} else {
		domainInfo.add(new ASN1(ASN1.INTEGER, privateKey.getComponent(Key.ECC_N)));
	}

	privateKeyAlgorithm.add(domainInfo);

	// encode the key information
	privateKeyInfo.add(privateKeyAlgorithm);

	// encode the private key
	var encodedPrivateKey = new ASN1(ASN1.OCTET_STRING);

	var pk = privateKey.getComponent(Key.ECC_D);
	var key = new ASN1(ASN1.SEQUENCE);
	key.add(new ASN1(ASN1.INTEGER, new ByteString("01", HEX)));
	key.add(new ASN1(ASN1.OCTET_STRING, pk));

	encodedPrivateKey.add(key);

	privateKeyInfo.add(encodedPrivateKey);

//	print(privateKeyInfo);
	return privateKeyInfo.getBytes();
}



/**
 * Encode RSA private key as defined in PKCS#1
 *
 * RSAPrivateKey ::= SEQUENCE {
 *     version           Version,
 *     modulus           INTEGER,  -- n
 *     publicExponent    INTEGER,  -- e
 *     privateExponent   INTEGER,  -- d
 *     prime1            INTEGER,  -- p
 *     prime2            INTEGER,  -- q
 *     exponent1         INTEGER,  -- d mod (p-1)
 *     exponent2         INTEGER,  -- d mod (q-1)
 *     coefficient       INTEGER,  -- (inverse of q) mod p
 *     otherPrimeInfos   OtherPrimeInfos OPTIONAL
 * }
 * @param {Key} privateKey the private RSA key in CRT format
 * @type ByteString
 * @return the encoded RSA key
 */
PKCS8.encodeRSAKey = function(privateKey, publicKey) {
	var rsaPrivateKey =
		new ASN1(ASN1.SEQUENCE);

	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));
	if (typeof(publicKey) != "undefined") {
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(publicKey.getComponent(Key.MODULUS))));
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(publicKey.getComponent(Key.EXPONENT))));
	} else {
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));
	}
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));		// Private Exponent not at interface for CRT format
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_P))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_Q))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_DP1))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_DQ1))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_PQ))));

	return rsaPrivateKey.getBytes();
}



/**
 * Encode a given GP RSA private key as specified by the PKCS#8 format
 *
 * @param {Key} the private key object that should be encoded
 * @return the encoded PKCS#8 private key
 * @type ByteString
 */
PKCS8.encodeRSAKeyUsingPKCS8Format = function(privateKey, publicKey) {
	var privateKeyInfo = new ASN1(ASN1.SEQUENCE);

	// Set the version number - must be zero
	privateKeyInfo.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX)));

	var privateKeyAlgorithm = new ASN1(ASN1.SEQUENCE);
	privateKeyAlgorithm.add(new ASN1(ASN1.OBJECT_IDENTIFIER, PKCS8.rsaEncryption));
	privateKeyAlgorithm.add(new ASN1(ASN1.NULL));

	// encode the key information
	privateKeyInfo.add(privateKeyAlgorithm);

	// encode the private key
	var encodedPrivateKey = new ASN1(ASN1.OCTET_STRING, PKCS8.encodeRSAKey(privateKey, publicKey));

	privateKeyInfo.add(encodedPrivateKey);

//	print(privateKeyInfo);
	return privateKeyInfo.getBytes();
}



/**
 * Encode a given GP private key as specified by the PKCS#8 format
 *
 * For now we only support the encoding of ECC private keys in a prime field
 *
 * @param {Key} the private key object that should be encoded
 * @return the encoded PKCS#8 private key
 * @type ByteString
 */
PKCS8.encodeKeyUsingPKCS8Format = function(privateKey, publicKey) {

	assert(privateKey.getType() == Key.PRIVATE);
	if (typeof(privateKey.getComponent(Key.ECC_P)) != "undefined") {
		return PKCS8.encodeECCKeyUsingPKCS8Format(privateKey);
	} else {
		return PKCS8.encodeRSAKeyUsingPKCS8Format(privateKey, publicKey);
	}
}



/**
 * Decode a given PKCS#8 ECC private key from the given TLV objects and create a GP key object
 *
 * For now we only support the decoding of ECC private keys in a prime field
 *
 * @param {ASN1} algparam the algorithm parameter from AlgorithmInfo
 * @param {ASN1} privateKey the privateKey element from the PKCS#8 structure
 * @return the GP key object
 * @type Key
 */
PKCS8.decodeECCKeyFromPKCS8Format = function(domainParameter, encodedKey) {

	var key = new Key();

	key.setType(Key.PRIVATE);

	if (domainParameter.tag == ASN1.OBJECT_IDENTIFIER) {
		key.setComponent(Key.ECC_CURVE_OID, domainParameter.value);
	} else {
		// Decode the domain parameters
		var cofactor = domainParameter.get(0);
		key.setComponent(Key.ECC_H, cofactor.value);

		var order = domainParameter.get(1).get(1);
		key.setComponent(Key.ECC_P, PKCS8.stripLeadingZeros(order.value));

		var coeff_A = domainParameter.get(2).get(0);
		key.setComponent(Key.ECC_A, coeff_A.value);

		var coeff_B = domainParameter.get(2).get(1);
		key.setComponent(Key.ECC_B, coeff_B.value);

		var generatorPoint = domainParameter.get(3).value;

		var coordinates = PKCS8.decodeUncompressedECPoint(generatorPoint);

		key.setComponent(Key.ECC_GX, coordinates.x);
		key.setComponent(Key.ECC_GY, coordinates.y);

		var groupOrder = domainParameter.get(4);

		key.setComponent(Key.ECC_N, PKCS8.stripLeadingZeros(groupOrder.value));
	}

	key.setComponent(Key.ECC_D, encodedKey.get(1).value);

	return key;
}



/**
 * Decode a PKCS#1 encoded RSA private key from the given TLV objects and create a GP key object with the private key
 *
 * @param {ASN1} algparam the algorithm parameter from AlgorithmInfo
 * @param {ASN1} privateKey the privateKey element from the PKCS#8 structure
 * @return the GP key object
 * @type Key
 */
PKCS8.decodeRSAPrivateKeyFromPKCS1Format = function(privateKey) {

	var key = new Key();

	key.setType(Key.PRIVATE);

	assert(privateKey.tag == ASN1.SEQUENCE);
	assert(privateKey.isconstructed);
	assert(privateKey.elements >= 9);

	for (var i = 0; i < 9; i++) {
		var e = privateKey.get(i);
		assert(e.tag == ASN1.INTEGER);
		assert(!e.isconstructed);
	}

	assert(privateKey.get(0).value.toUnsigned() == 0);

	var p = PKCS8.stripLeadingZeros(privateKey.get(4).value);
	var l = p.length;
	key.setComponent(Key.CRT_P,   p);
	key.setComponent(Key.CRT_Q,   PKCS8.I2O(privateKey.get(5).value, l));
	key.setComponent(Key.CRT_DP1, PKCS8.I2O(privateKey.get(6).value, l));
	key.setComponent(Key.CRT_DQ1, PKCS8.I2O(privateKey.get(7).value, l));
	key.setComponent(Key.CRT_PQ,  PKCS8.I2O(privateKey.get(8).value, l));

	return key;
}



/**
 * Decode a PKCS#1 encoded RSA private key from the given TLV objects and create a GP key object with the public key
 *
 * @param {ASN1} algparam the algorithm parameter from AlgorithmInfo
 * @param {ASN1} privateKey the privateKey element from the PKCS#8 structure
 * @return the GP key object
 * @type Key
 */
PKCS8.decodeRSAPublicKeyFromPKCS1Format = function(privateKey) {

	var key = new Key();

	key.setType(Key.MODULUS);

	assert(privateKey.tag == ASN1.SEQUENCE);
	assert(privateKey.isconstructed);
	assert(privateKey.elements >= 9);

	for (var i = 0; i < 9; i++) {
		var e = privateKey.get(i);
		assert(e.tag == ASN1.INTEGER);
		assert(!e.isconstructed);
	}

	assert(privateKey.get(0).value.toUnsigned() == 0);

	key.setComponent(Key.MODULUS,  PKCS8.stripLeadingZeros(privateKey.get(1).value));
	key.setComponent(Key.EXPONENT, PKCS8.stripLeadingZeros(privateKey.get(2).value));

	return key;
}



/**
 * Decode a given PKCS#8 RSA private key from the given TLV objects and create a GP key object
 *
 * @param {ASN1} algparam the algorithm parameter from AlgorithmInfo
 * @param {ASN1} privateKey the privateKey element from the PKCS#8 structure
 * @return the GP key object
 * @type Key
 */
PKCS8.decodeRSAKeyFromPKCS8Format = function(algparam, privateKey) {

	var key = new Key();

	key.setType(Key.PRIVATE);

	assert(algparam.tag == ASN1.NULL);
	assert(!algparam.isconstructed);
	assert(algparam.length == 0);

	return PKCS8.decodeRSAPrivateKeyFromPKCS1Format(privateKey);
}



/**
 * Decode a given PKCS#8 private key from the given ByteString and create a GP key object
 *
 * For now we only support the decoding of ECC private keys in a prime field
 *
 * @param {ByteString} the private key object in PKCS#8 format
 * @return the GP key object
 * @type Key
 */
PKCS8.decodeKeyFromPKCS8Format = function(encodedKey) {
	var p8 = new ASN1(encodedKey);

	assert(p8.isconstructed);
	assert(p8.elements >= 3);

	var version = p8.get(0);
	assert(version.tag == ASN1.INTEGER);
	assert(version.value.toUnsigned() == 0);

	var pkai = p8.get(1);
	assert(pkai.tag == ASN1.SEQUENCE);
	assert(pkai.isconstructed);
	assert(pkai.elements == 2);
	var keytype = pkai.get(0);

	assert(keytype.tag == ASN1.OBJECT_IDENTIFIER);

	var algparam = pkai.get(1);

	var privateKey = p8.get(2);
	assert(privateKey.tag == ASN1.OCTET_STRING);
	if (privateKey.isconstructed) {
		privateKey = privateKey.get(0);
	} else {
		privateKey = new ASN1(privateKey.value);
	}

	if (keytype.value.equals(PKCS8.rsaEncryption)) {
		return PKCS8.decodeRSAKeyFromPKCS8Format(algparam, privateKey);
	} else if (keytype.value.equals(PKCS8.idEcPublicKey)) {
		return PKCS8.decodeECCKeyFromPKCS8Format(algparam, privateKey);
	} else {
		throw new Error("Unknown key type " + keytype.value.toString(OID));
	}
}



/**
 * Simple self-test
 */
PKCS8.test = function() {

	// Set OID for EC curve
	var ecCurve = "1.3.36.3.3.2.8.1.1.7";

    var crypto = new Crypto("BC");

    // Create empty public key object
    var pubKey = new Key();
    pubKey.setType(Key.PUBLIC);
    pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString(ecCurve, OID));

    // Create empty private key object
    var priKey = new Key();
    priKey.setType(Key.PRIVATE);
    priKey.setComponent(Key.ECC_CURVE_OID, new ByteString(ecCurve, OID));

    // Generate key pair
    crypto.generateKeyPair(Crypto.EC, pubKey, priKey);

    // Encode
    var p8Key = PKCS8.encodeKeyUsingPKCS8Format(priKey);

    // Decode
    var decodedKeyObject = PKCS8.decodeKeyFromPKCS8Format(p8Key);

    // Compare
    assert(decodedKeyObject.getComponent(Key.ECC_D).equals(priKey.getComponent(Key.ECC_D)));

    assert(decodedKeyObject.getComponent(Key.ECC_GX).equals(priKey.getComponent(Key.ECC_GX)));
    assert(decodedKeyObject.getComponent(Key.ECC_GY).equals(priKey.getComponent(Key.ECC_GY)));
    assert(decodedKeyObject.getComponent(Key.ECC_A).equals(pubKey.getComponent(Key.ECC_A)));
    assert(decodedKeyObject.getComponent(Key.ECC_B).equals(pubKey.getComponent(Key.ECC_B)));

    // Encode
    var refp8Key = PKCS8.encodeKeyUsingPKCS8Format(decodedKeyObject);

    // Compare
    assert(p8Key.equals(refp8Key));


    // Create empty public key object
	var pubKey = new Key();
    pubKey.setType(Key.PUBLIC);
    pubKey.setSize(1024);

    // Create empty private key object
    var priKey = new Key();
    priKey.setType(Key.PRIVATE);

    // Generate key pair
    crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);

    // Encode
    var p8Key = PKCS8.encodeKeyUsingPKCS8Format(priKey);

    // Decode
    var decodedKeyObject = PKCS8.decodeKeyFromPKCS8Format(p8Key);

    // Compare
    assert(decodedKeyObject.getComponent(Key.CRT_P).equals(priKey.getComponent(Key.CRT_P)));
    assert(decodedKeyObject.getComponent(Key.CRT_Q).equals(priKey.getComponent(Key.CRT_Q)));
    assert(decodedKeyObject.getComponent(Key.CRT_DP1).equals(priKey.getComponent(Key.CRT_DP1)));
    assert(decodedKeyObject.getComponent(Key.CRT_DQ1).equals(priKey.getComponent(Key.CRT_DQ1)));
    assert(decodedKeyObject.getComponent(Key.CRT_PQ).equals(priKey.getComponent(Key.CRT_PQ)));

    // Encode
    var refp8Key = PKCS8.encodeKeyUsingPKCS8Format(decodedKeyObject);

    // Compare
    assert(p8Key.equals(refp8Key));
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Certificate Object
 */



function Certificate(dao, holder, serial, dir, certbin, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + dao + "," + holder + "," + serial + "," + dir + "," + (certbin ? certbin.bytes(0,10).toString(HEX) : certbin) + ")");

	this.dao = dao;

	// Must match database scheme
	this.id = 0;
	if (typeof(holder) != "undefined") {
		this.holderId = holder.id;
	}
	this.serial = serial;
	this.linkDir = dir;
	this.bytes = certbin;

	if (template) {
		for (var i in template) {
			this[i] = template[i];
		}
	}

	// Private properties
	this._holder = holder;
}

exports.Certificate = Certificate;


/*
 * Select which certificate should be selected if multiple are available
 */
Certificate.UP = 0;		// Select certificate for following upstream link (e.g. CVCA-Link Certificate)
Certificate.SHORT = 1;		// Select shortest path to next self-signed certificate
Certificate.DOWN = 2;		// Select certificate for following downstream link (reverse link certificate build path to newer certificates)


Certificate.prototype.toString = function() {
	return "Certificate " + this.id;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Configuration Object
 */



function Configuration(dao, name, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + dao + "," + name + ")");

	this.dao = dao;

	// Must match database scheme
	this.id = 0;
	this.name = name;

	if (template) {
		for (var i in template) {
			this[i] = template[i];
		}
	}

	// Private properties
}

exports.Configuration = Configuration;



Configuration.prototype.getConfigurationObject = function() {
	if (typeof(this.content) == "undefined") {
		return {};
	}

	GPSystem.log(GPSystem.DEBUG, module.id, "read config : " + this.content);
	var c = JSON.parse(this.content);
	return c;
}



Configuration.prototype.updateConfigurationObject = function(c) {
	var str = JSON.stringify(c, null, "\t");
	GPSystem.log(GPSystem.DEBUG, module.id, "update config : " + str);
	this.dao.updateContent(this, str);
}



Configuration.prototype.toString = function() {
	return "Configuration " + this.id;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview DAO Factory for database persistence
 */


var HolderDAO = require('scsh/pki-db/db/HolderDAO').HolderDAO;
var SignerDAO = require('scsh/pki-db/db/SignerDAO').SignerDAO;
var RequestDAO = require('scsh/pki-db/db/RequestDAO').RequestDAO;
var CertificateDAO = require('scsh/pki-db/db/CertificateDAO').CertificateDAO;
var ServiceRequestDAO = require('scsh/pki-db/db/ServiceRequestDAO').ServiceRequestDAO;
var ConfigurationDAO = require('scsh/pki-db/db/ConfigurationDAO').ConfigurationDAO;
var TokenDAO = require('scsh/pki-db/db/TokenDAO').TokenDAO;
var SubjectDAO = require('scsh/pki-db/db/SubjectDAO').SubjectDAO;
var RoleDAO = require('scsh/pki-db/db/RoleDAO').RoleDAO;
var KeyEscrowDAO = require('scsh/pki-db/db/KeyEscrowDAO').KeyEscrowDAO;
var LongDate = require('scsh/pki-db/LongDate').LongDate;



/**
 * A factory that can create data access objects for the PKI database
 *
 * @param {String} path the root directory for the file system structure
 */
function DAOFactoryDatabase(type, url, user, password) {
	this.type = type;
	switch(type) {
		case "MySQL":
			if (url.indexOf("?") == -1) {
				url += "?";
			} else {
				url += "&";
			}
			url += "zeroDateTimeBehavior=convertToNull";
// 			url += "&logger=com.mysql.jdbc.log.Slf4JLogger&profileSQL=true"; // Enable logging
			this.ds = new Packages.org.mariadb.jdbc.MariaDbDataSource(url);
			this.ds.setUser(user);
			this.ds.setPassword(password);
			break;
		case "H2":
			url += ";DATABASE_TO_UPPER=FALSE";
			this.ds = Packages.org.h2.jdbcx.JdbcConnectionPool.create(url, user, password);
			break;
		default:
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "Unknown database type " + type);
	}
	this.url = url;
}

exports.DAOFactoryDatabase = DAOFactoryDatabase;

DAOFactoryDatabase.INT		= java.sql.Types.INTEGER;
DAOFactoryDatabase.SMALLINT	= java.sql.Types.SMALLINT;
DAOFactoryDatabase.BIGINT	= java.sql.Types.BIGINT;
DAOFactoryDatabase.VARCHAR	= java.sql.Types.VARCHAR;
DAOFactoryDatabase.VARBINARY	= java.sql.Types.VARBINARY;
DAOFactoryDatabase.BLOB		= java.sql.Types.BLOB;
DAOFactoryDatabase.CLOB		= java.sql.Types.CLOB;
DAOFactoryDatabase.MEDIUMBLOB	= java.sql.Types.LONGVARBINARY;
DAOFactoryDatabase.TIMESTAMP	= java.sql.Types.TIMESTAMP;



DAOFactoryDatabase.prototype.toString = function() {
	return "DBDAO(" + this.type + ")";
}



DAOFactoryDatabase.prototype.getHolderDAO = function() {
	if (typeof(this.holderDAO) == "undefined") {
		this.holderDAO = new HolderDAO(this);
	}
	return this.holderDAO;
}



DAOFactoryDatabase.prototype.getCertificateDAO = function() {
	if (typeof(this.certificateDAO) == "undefined") {
		this.certificateDAO = new CertificateDAO(this);
	}
	return this.certificateDAO;
}



DAOFactoryDatabase.prototype.getSignerDAO = function() {
	if (typeof(this.signerDAO) == "undefined") {
		this.signerDAO = new SignerDAO(this);
	}
	return this.signerDAO;
}



DAOFactoryDatabase.prototype.getRequestDAO = function() {
	if (typeof(this.requestDAO) == "undefined") {
		this.requestDAO = new RequestDAO(this);
	}
	return this.requestDAO;
}



DAOFactoryDatabase.prototype.getServiceRequestDAO = function() {
	if (typeof(this.serviceRequestDAO) == "undefined") {
		this.serviceRequestDAO = new ServiceRequestDAO(this);
	}
	return this.serviceRequestDAO;
}



DAOFactoryDatabase.prototype.getConfigurationDAO = function() {
	if (typeof(this.configurationDAO) == "undefined") {
		this.configurationDAO = new ConfigurationDAO(this);
	}
	return this.configurationDAO;
}



DAOFactoryDatabase.prototype.getTokenDAO = function() {
	if (typeof(this.tokenDAO) == "undefined") {
		this.tokenDAO = new TokenDAO(this);
	}
	return this.tokenDAO;
}



DAOFactoryDatabase.prototype.getSubjectDAO = function() {
	if (typeof(this.subjectDAO) == "undefined") {
		this.subjectDAO = new SubjectDAO(this);
	}
	return this.subjectDAO;
}



DAOFactoryDatabase.prototype.getRoleDAO = function() {
	if (typeof(this.roleDAO) == "undefined") {
		this.roleDAO = new RoleDAO(this);
	}
	return this.roleDAO;
}



DAOFactoryDatabase.prototype.getKeyEscrowDAO = function() {
	if (typeof(this.keyEscrowDAO) == "undefined") {
		this.keyEscrowDAO = new KeyEscrowDAO(this);
	}
	return this.keyEscrowDAO;
}



DAOFactoryDatabase.prototype.getConnection = function() {
	return this.ds.getConnection();
}



DAOFactoryDatabase.prototype.executeScript = function(stmt, script) {
	if (typeof(script) == "string") {
		script = [ script ];
	}
	for (var i = 0; i < script.length; i++) {
		var s = script[i];

		if (s instanceof Object) {
			s = s[this.type];

			if (s instanceof Object) {
				var cs = s.IsEmpty;

				var rs = stmt.executeQuery(cs);
				if (rs.next()) {
					rs.close();
					continue;
				}
				rs.close();

				s = s.Statement;
			}
		}
		if (s) {
			stmt.executeUpdate(s);
		}
	}
}



DAOFactoryDatabase.prototype.createTables = function() {
	var con = null;
	var stmt = null;

	try	{
		con = this.getConnection();

		stmt = con.createStatement();
		this.executeScript(stmt, RoleDAO.createRole);
		this.executeScript(stmt, SubjectDAO.create);
		this.executeScript(stmt, HolderDAO.create);
		if (this.type == "MySQL") {
			this.executeScript(stmt, HolderDAO.alter);
		}
		this.executeScript(stmt, SignerDAO.create);
		this.executeScript(stmt, RequestDAO.create);
		this.executeScript(stmt, ServiceRequestDAO.create);
		if (this.type == "MySQL") {
			this.executeScript(stmt, ServiceRequestDAO.alter);
		}
		this.executeScript(stmt, SubjectDAO.addForeignKey);
		this.executeScript(stmt, RoleDAO.createAssignedRole);
		this.executeScript(stmt, RoleDAO.update);
		this.executeScript(stmt, CertificateDAO.create);
		this.executeScript(stmt, ConfigurationDAO.create);
		this.executeScript(stmt, TokenDAO.create);
		if (this.type == "MySQL") {
			this.executeScript(stmt, TokenDAO.alter);
		}
		this.executeScript(stmt, KeyEscrowDAO.create);
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



DAOFactoryDatabase.prototype.dropTables = function() {
	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.getConnection();

		stmt = con.createStatement();
		if (this.type == "MySQL") {
			this.executeScript(stmt, "SET FOREIGN_KEY_CHECKS=0;");
		}
		this.executeScript(stmt, TokenDAO.drop);
		this.executeScript(stmt, ConfigurationDAO.drop);
		this.executeScript(stmt, CertificateDAO.drop);
		this.executeScript(stmt, SubjectDAO.dropForeignKey);
		this.executeScript(stmt, ServiceRequestDAO.drop);
		this.executeScript(stmt, RequestDAO.drop);
		this.executeScript(stmt, SignerDAO.drop);
		this.executeScript(stmt, HolderDAO.drop);
		this.executeScript(stmt, RoleDAO.dropAssignedRole);
		this.executeScript(stmt, SubjectDAO.drop);
		this.executeScript(stmt, RoleDAO.dropRole);
	}
	finally {
		if (this.type == "MySQL") {
			this.executeScript(stmt, "SET FOREIGN_KEY_CHECKS=1;");
		}

		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Change encoding of serial field from decimal to hexadecimal
 */
DAOFactoryDatabase.updateCertificateSerial = function(rs) {
	var bytes = rs.getBytes("bytes");
	var x = new X509(bytes);
	var newserial = x.getSerialNumber().toString(HEX);
	var oldserial = rs.getString("serial");
	GPSystem.log(GPSystem.INFO, module.id, "From serial " + oldserial + " to " + newserial);
	rs.updateString("serial", newserial);
}



DAOFactoryDatabase.prototype.updateTables = function(version) {
	switch(version) {
		case 3:
			GPSystem.log(GPSystem.INFO, module.id, "Update database to version 0.3");
			var dao = this.getCertificateDAO();
			dao.updateBatch(DAOFactoryDatabase.updateCertificateSerial);
		break;
	}
}



/**
 * Iternate result set and fill properties in object with matching data types
 *
 * The method map SQL type to SCSH types, namely (string, int and ByteString)
 *
 * @param {ResultSet} rs the result set returned from a database query
 * @param {Object} obj the object into which the columns shall be injected
 */
DAOFactoryDatabase.prototype.resultSetToProperties = function(rs, obj) {
	var meta = rs.getMetaData();

	var l = meta.getColumnCount();
	for (var i = 1; i <= l; i++) {
		var propname = meta.getColumnName(i);
		var type = meta.getColumnType(i)
// 		print("propname " + propname);
// 		print(" type: " + type);
// 		print(" getColumnTypeName " + meta.getColumnTypeName(i));

		switch(type) {
			case DAOFactoryDatabase.INT:
			case DAOFactoryDatabase.SMALLINT:
				var v = rs.getInt(i);
				if (!rs.wasNull()) {
					obj[propname] = v;
				}
				break;
			case DAOFactoryDatabase.BIGINT:
				var v = rs.getLong(i);
				if (!rs.wasNull()) {
					obj[propname] = v;
				}
				break;
			case DAOFactoryDatabase.CLOB:
			case DAOFactoryDatabase.VARCHAR:
				var v = rs.getString(i);
				if (!rs.wasNull()) {
					obj[propname] = v;
				}
				break;
			case DAOFactoryDatabase.VARBINARY:
			case DAOFactoryDatabase.BLOB:
			case DAOFactoryDatabase.MEDIUMBLOB:
				var v = rs.getBytes(i);
				if (!rs.wasNull()) {
					obj[propname] = v;
				}
				break;
			case DAOFactoryDatabase.TIMESTAMP:
				var v = rs.getTimestamp(i);
				if (!rs.wasNull()) {
					obj[propname] = new Date(v.getTime());
				}
				break;
			default:
				if (meta.getColumnTypeName(i) == "VARCHAR") {
					// Columns of type [LONG]TEXT have no equivalent java.sql.Type
					var v = rs.getString(i);
					if (!rs.wasNull()) {
						obj[propname] = v;
					}
				} else {
					throw new GPError(module.id, GPError.INVALID_DATA, i, "Unknown type " + type + ":" + meta.getColumnTypeName(i));
				}
		}
	}
}



/**
 * Create a SQL insert statement from the given object with the list of properties
 *
 * If the list of elements is not defined, then the method will create a list of properties
 * that do not start with "_" or a function properties. Properties with the name id, dao or holder
 * are ignored as well.
 *
 * @param {java.sql.Connection} con the SQL connection
 * @param {String} table the table name
 * @param {Object} obj the property object
 * @param {String[]} el the list of elements to insert
 */
DAOFactoryDatabase.prototype.insertStatementFromObject = function(con, table, obj, el) {

	if (!el) {
		var el = [];
		for (var i in obj) {
			if ((i.charAt(0) != "_") && (i != "id") && (i != "dao") && (i != "holder") && typeof(obj[i]) != "function") {
				el.push(i);
			}
		}
	}

	var vl = "";
	for (var i = 0; i < el.length; i++) {
		if (vl.length) {
			vl += ",?";
		} else {
			vl += "?";
		}
	}

	var str = "insert into " + table + " (" + el + ") values (" + vl + ");";

	GPSystem.log(GPSystem.DEBUG, module.id, str);

	stmt = con.prepareStatement(str, java.sql.Statement.RETURN_GENERATED_KEYS);

	for (var i = 1; i <= el.length; i++) {
		var e = obj[el[i - 1]];

		if (typeof(e) == "string") {
			stmt.setString(i, e);
		} else if (typeof(e) == "number") {
			stmt.setInt(i, e);
		} else if (e instanceof ByteString) {
			stmt.setBytes(i, e);
		} else if (e instanceof Date) {
			var ts = new java.sql.Timestamp(e.valueOf());
			stmt.setTimestamp(i, ts);
		} else if (e instanceof LongDate) {
			stmt.setLong(i, e.date.valueOf());
		} else {
			throw new GPError(module.id, GPError.INVALID_DATA, i, "Unsupported property " + el[i - 1] + " with type " + typeof(e) + " and value " + e);
		}
	}
	return stmt;
}



/**
 * Create a SQL select statement from a filter
 *
 * @param {java.sql.Connection} con the SQL connection
 * @param {String} table the table name
 * @param {Object} filter an object whose properties define the columns and values to match
 * @param {String[]} columnNames the list of column names to return (undefined for *)
 * @param {Number} offset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 */
DAOFactoryDatabase.prototype.selectStatementFromFilter = function(con, table, filter, columnNames, offset, page) {
	var filstr = "";
	var logicalOp = "and";
	for (var i in filter) {
		var compOp = "=";
		if (typeof(filter[i]) == 'object') {
			compOp = filter[i].compOp;
		}
		if (filstr) {
			filstr += " and ";
		}
		if (compOp.equals("like")) {
			filstr += "LOWER( " + i + " ) " + compOp +" ?";
		} else if (filter[i] != null) {
			filstr += i + " " + compOp +" ?";
		} else {
			filstr += i + " is null";
		}
	}

	var colstr = "*";
	if (columnNames) {
		colstr = columnNames.toString();
	}

	var str = "select " + colstr + " from " + table;

	if (filstr) {
		str += " where " + filstr;
	}

	if (page) {
		str += " limit ?,?";
	}

	var stmt = con.prepareStatement(str);

	var c = 1;
	for (var i in filter) {
		var e = filter[i];

		if (e != null) {
			if (typeof(e) == "string") {
				stmt.setString(c, e);
			} else if (typeof(e) == "number") {
				stmt.setInt(c, e);
			} else if (e instanceof ByteString) {
				stmt.setBytes(c, e);
			} else if (typeof(filter[i] == 'object')) {
				stmt.setString(c, filter[i].value);
			} else {
				throw new GPError(module.id, GPError.INVALID_DATA, c, "Unsupported property " + i + " with type " + typeof(e) + " and value " + e);
			}
			c++;
		}
	}

	if (page) {
		stmt.setInt(c++, offset);
		stmt.setInt(c++, page);
	}

	return stmt;
}



/**
 * Where clause from filter
 *
 * @param {Object} filter an object whose properties define the columns and values to match
 * @type String
 * @return the where clause based on the filter
 */
DAOFactoryDatabase.prototype.whereClauseFromFilter = function(filter, logicalOp) {
	GPSystem.log(GPSystem.DEBUG, module.id, "whereClauseFromFilter(" + logicalOp + ")");

	var filstr = "";

	if (!logicalOp) {
		logicalOp = "and";
	}

	for (var i in filter) {
		var compOp = "=";

		if (typeof(filter[i]) == 'object') {
			if (filter[i].logicalOp) {
				if (filstr) {
					filstr += " " + logicalOp;
				}
				filstr += " (" + this.whereClauseFromFilter(filter[i].value, filter[i].logicalOp) + ")";
				continue;
			} else {
				compOp = filter[i].compOp;
			}
		}

		if (filstr) {
			filstr += " " + logicalOp + " ";
		}

		if (compOp.equals("like")) {
			filstr += "LOWER( " + i + " ) " + compOp +" ?";
		} else if (filter[i] != null) {
			filstr += i + " " + compOp +" ?";
		} else {
			filstr += i + " is null";
		}
	}

	return filstr;
}



/**
 * Set arguments in where statement from filter
 *
 * @param {java.sql.Statement} stmt the SQL statement containing the where clause created with whereClauseFromFilter().
 * @param {Number} offset the offset in the argument list
 * @param {Object} filter an object whose properties define the columns and values to match
 * @type Number
 * @return the next offset in the argument list
 */
DAOFactoryDatabase.prototype.setArgumentsFromFilter = function(stmt, offset, filter, pageStart, pageEnd) {
	GPSystem.log(GPSystem.DEBUG, module.id, "setArgumentsFromFilter(" + offset + "," + pageStart + "," + pageEnd + ")");

	for (var i in filter) {
		var e = filter[i];

		if (e != null) {
			if (typeof(e) == "string") {
				stmt.setString(offset++, e);
			} else if (typeof(e) == "number") {
				stmt.setInt(offset++, e);
			} else if (e instanceof ByteString) {
				stmt.setBytes(offset++, e);
			} else if (typeof(filter[i] == 'object')) {
				if (filter[i].logicalOp) {
					offset = this.setArgumentsFromFilter(stmt, offset, filter[i].value);
				} else {
					GPSystem.log(GPSystem.DEBUG, module.id, "Set argument from object " + filter[i].value + " at offset " + offset);
					stmt.setString(offset++, filter[i].value);
				}
			} else {
				throw new GPError(module.id, GPError.INVALID_DATA, offset, "Unsupported property " + i + " with type " + typeof(e) + " and value " + e);
			}
		}
	}

	if (pageEnd) {
		stmt.setInt(offset++, pageStart);
		stmt.setInt(offset++, pageEnd);
	}

	return offset;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview DAO Factory for file system based persistence
 */


var File = require('scsh/file/File').File;
var HolderDAO = require('scsh/pki-db/fs/HolderDAO').HolderDAO;
var SignerDAO = require('scsh/pki-db/fs/SignerDAO').SignerDAO;
var RequestDAO = require('scsh/pki-db/fs/RequestDAO').RequestDAO;
var CertificateDAO = require('scsh/pki-db/fs/CertificateDAO').CertificateDAO;



/**
 * A factory that can create data access objects for the PKI database
 *
 * @param {String} path the root directory for the file system structure
 */
function DAOFactoryFileSystem(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + path + ")");
	this.basepath = path;
}

exports.DAOFactoryFileSystem = DAOFactoryFileSystem;



DAOFactoryFileSystem.prototype.toString = function() {
	return "FSDAO";
}



DAOFactoryFileSystem.prototype.getHolderDAO = function() {
	if (typeof(this.holderDAO) == "undefined") {
		this.holderDAO = new HolderDAO(this);
	}
	return this.holderDAO;
}



DAOFactoryFileSystem.prototype.getCertificateDAO = function() {
	if (typeof(this.certificateDAO) == "undefined") {
		this.certificateDAO = new CertificateDAO(this);
	}
	return this.certificateDAO;
}



DAOFactoryFileSystem.prototype.getSignerDAO = function() {
	if (typeof(this.signerDAO) == "undefined") {
		this.signerDAO = new SignerDAO(this);
	}
	return this.signerDAO;
}



DAOFactoryFileSystem.prototype.getRequestDAO = function() {
	if (typeof(this.requestDAO) == "undefined") {
		this.requestDAO = new RequestDAO(this);
	}
	return this.requestDAO;
}



/**
 * Check path for legal encodings
 *
 * @private
 */
DAOFactoryFileSystem.checkPath = function(path) {
	if ((path.indexOf("/..") >= 0) ||
		(path.indexOf("../") >= 0) ||
		(path.indexOf("\\..") >= 0) ||
		(path.indexOf("..\\") >= 0) ||
		(path.indexOf("\0") >= 0) ||
		(path.indexOf("~") >= 0)) {
		throw new GPError("DAOFactoryFileSystem", GPError.INVALID_ARGUMENTS, 0, "Path \"" + path + "\" contains illegal characters");
	}
}



/**
 * Map to absolute path on file system
 * @param {String} path the relative path
 * @type String
 * @return the absolute path on the file system
 * @private
 */
DAOFactoryFileSystem.prototype.mapPath = function(path) {
	DAOFactoryFileSystem.checkPath(path);
	return this.basepath + path;
}



/**
 * Enumerate file name under the given path
 *
 * @param {String} path the relative path
 * @param {Regex} the filter criteria. Directories if null or not defined
 * @private
 */
DAOFactoryFileSystem.prototype.enumerateFiles = function(path, filter) {

	var result = [];

	var fn = this.mapPath(path);
	var f = new java.io.File(fn);
	if (!f.exists()) {
		return result;
	}
	var files = f.list();

	for (var i = 0; i < files.length; i++) {
		var s = new String(files[i]);
		var fd = new java.io.File(f, s);

		if (filter) {
			var n = s.match(filter);
		} else {
			var n = fd.isDirectory();
		}
		if (n) {
			result.push(s);
		}
	}
	return result;
}



/**
 * Loads a binary file from disk
 *
 * @param {String} filename the fully qualified file name
 * @return the binary content
 * @type ByteString
 */
DAOFactoryFileSystem.prototype.loadBinaryFile = function(name) {
	var fn = this.mapPath(name);
	var f = new File(fn);

	var data = f.readAllAsBinary();
	f.close();

	return data;
}



/**
 * Saves a binary file to disk
 *
 * @param {String} name the file name appended to the base path
 * @param {ByteString} data the binary content
 */
DAOFactoryFileSystem.prototype.saveBinaryFile = function(name, data) {
	var fn = this.mapPath(name);
	var f = new File(fn);
	f.writeAll(data);
	f.close();
}



/**
 * Loads a XML file from disk
 *
 * @param {String} filename the fully qualified file name
 * @return the XML content
 * @type XML
 */
DAOFactoryFileSystem.loadXMLFile = function(filename) {
	// Open stream
	var f = new java.io.FileReader(filename);
	var bfr = new java.io.BufferedReader(f);

	// Skip processing instructions
	var result;
	do	{
		result = bfr.readLine();
	} while ((result != null) && (result.substr(0, 2) == "<?"));

	if (result == null) {
		bfr.close();
		f.close();
		return null;
	}

	var line;
	while ((line = bfr.readLine()) != null) {
		result += line + "\n";
	}
	bfr.close();
	f.close();
	default xml namespace = "";
	return new XML(result);
}



/**
 * Saves XML to disk
 *
 * @param {String} filename the fully qualified file name
 * @param {XML} data the XML content
 */
DAOFactoryFileSystem.saveXMLFile = function(filename, xml) {
	var fw = new java.io.FileWriter(filename);
	fw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
	fw.write(xml.toXMLString());
	fw.close();
}




/**
 * Load configuration
 *
 * @param {String} path the relative path of the PKI element (e.g. "UTCVCA1/UTDVCA1")
 * @return the configuration object or null if none defined
 * @type XML
 */
DAOFactoryFileSystem.prototype.loadConfig = function(path) {
	var fn = this.mapPath(path + "/config.xml");
	var cfgxml = null;

	try	{
		var cfgxml = DAOFactoryFileSystem.loadXMLFile(fn);
	}
	catch(e) {
//		GPSystem.trace(e);
	}
	return cfgxml;
}



/**
 * Save configuration
 *
 * <p>This method will create the necessary path and save the configuration to config.xml</p>

 * @param {String} path the relative path of the PKI element (e.g. "UTCVCA1/UTDVCA1")
 * @param {XML} cfg the configuration object
 */
DAOFactoryFileSystem.prototype.saveConfig = function(path, cfg) {

	if (arguments.length != 2) {
		throw new GPError("DAOFactoryFileSystem", GPError.INVALID_ARGUMENTS, 0, "path and cfg argument required");
	}

	var fn = this.mapPath(path);
	var f = new java.io.File(fn);
	if (!f.exists()) {
		f.mkdirs();
	}

	var fn = this.mapPath(path + "/config.xml");
	DAOFactoryFileSystem.saveXMLFile(fn, cfg);
}



/**
 * Create a default configuration
 *
 * @returns a suitable default configuration object
 * @type XML
 */
DAOFactoryFileSystem.prototype.getDefaultConfig = function() {
	default xml namespace = "";
	var defaultCfg =
		<CAConfig>
			<sequence>
				<current>0</current>
			</sequence>
		</CAConfig>;
	return defaultCfg;
}



/**
 * Delete file
 */
DAOFactoryFileSystem.prototype.deleteFile = function(name) {
	var fn = this.mapPath(name);
	var f = new java.io.File(fn);
	return f["delete"]();		// delete is a reserved keyword
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Holder Object
 */

var SerializableBusinessObject = require('scsh/pki-db/SerializableBusinessObject').SerializableBusinessObject;



function Holder(dao, path, certtype, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + dao + "," + path + "," + certtype + ")");

	this.dao = dao;

	// Must match database scheme
	this.id = 0;
	if (path) {
		this.name = path.substr(path.lastIndexOf("/") + 1);
	}
	this.certificateType = certtype;

	this.signerNo = 0;

	if (template) {
		for (var i in template) {
			this[i] = template[i];
		}
	}

	// Private properties
	this._path = path;
}

Holder.prototype = Object.create(SerializableBusinessObject.prototype);
Holder.constructor = Holder;

exports.Holder = Holder;


Holder.CVC = 1;		// Holder of CVC certificates
Holder.X509 = 2;	// Holder of X509 certificates
Holder.TYPEMASK = 0x0F;	// Mask to split certificate type from context



Holder.prototype.getReadablePath = function() {
	var path = this.dao.determineHolderPathList(this);
	var name = "";

	for (var j = 0; j < path.length; j++) {
		var holder = path[j];
		if (j > 0) {
			name += " / ";
		}
		name += holder.name;
	}

	return name;
}



Holder.prototype.toString = function() {
	var str = "Holder";
	str += "\nid '" + this.id + "'";
	if (this.certificateType == 2) {
		str += "\ncertificateType X509";
	} else {
		str += "\ncertificateType '" + this.certificateType + "'";
	}
	str += "\nparentId '" + this.parentId + "'";
	str += "\nname '" + this.name + "'";
	str += "\nsubjectId '" + this.subjectId + "'";
	str += "\nsignerNo '" + this.signerNo + "'";
	str += "\ncertId '" + this.certId + "'";

	return str;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2025 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview KeyEscrow Object
 */



function KeyEscrow(dao, template) {
	this.dao = dao;

	// Must match database scheme
	this.id = 0;

	if (template) {
		for (var i in template) {
			this[i] = template[i];
		}
	}
}

exports.KeyEscrow = KeyEscrow;



KeyEscrow.prototype.toString = function() {
	return "KeyEscrow " + this.id;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview DAO Factory for database persistence
 */

function LongDate(date) {
	this.date = date;
}

exports.LongDate = LongDate;/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Request Object
 */



function Request(dao, holder, keyId, encodedRequest, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + dao + "," + holder + "," + keyId + "," + encodedRequest + ")");

	this.dao = dao;

	// Must match database scheme
	this.id = 0;
	if (holder) {
		this.holderId = holder.id;
	}
	this.keyId = keyId;
	this.bytes = encodedRequest;

	if (template) {
		for (var i in template) {
			this[i] = template[i];
		}
	}

	// Private properties
	this._holder = holder;
}

exports.Request = Request;



Request.prototype.toString = function() {
	return "Request " + this.id;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Role Object
 */



function Role(dao, name, managingRoleId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + dao + "," + name + ", " + managingRoleId + ")");

	this.dao = dao;

	// Must match database scheme
	this.name = name;
	if (managingRoleId) {
		this.managingRoleId = managingRoleId;
	}
}

exports.Role = Role;



Role.prototype.toString = function() {
	return "Role " + this.name;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Serializable Business Object
 */

function SerializableBusinessObject() {

}

exports.SerializableBusinessObject = SerializableBusinessObject;



SerializableBusinessObject.prototype.getContent = function() {
	if (this._content) {
		return this._content;
	}
	if (!this.content) {
		return {};
	}
	this._content = this.deserialize(this.content);
	return this._content;
}



SerializableBusinessObject.prototype.setContent = function(obj) {
	this._content = obj;
	this.content = this.serialize();
}



SerializableBusinessObject.prototype.serialize = function() {
	if (typeof(this._content) != "undefined") {
		this.content = JSON.stringify(this._content, null, '\t');
	}
	return this.content;
}



/**
 * Recreate embedded objects
 *
 * @private
 */
SerializableBusinessObject.JSONReviver = function(key, value) {
	if (value && value.clazz) {
		switch(value.clazz) {
			case "ByteString": value = ByteString.fromJSON(value); break;
		}
	}
	return value;
}



SerializableBusinessObject.prototype.deserialize = function(json) {
	return JSON.parse(json, SerializableBusinessObject.JSONReviver);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Service Request Object
 */

var SerializableBusinessObject = require('scsh/pki-db/SerializableBusinessObject').SerializableBusinessObject;

function ServiceRequest(dao, template) {
	this.dao = dao;

	// Must match database scheme
	this.id = 0;
	this.lifecycle = 1;

	if (template) {
		for (var i in template) {
			if ((i == "content") && typeof(template[i]) != "string") {
				this.setContent(template[i]);
			} else {
				this[i] = template[i];
			}
		}
	}

	// Private properties
}

ServiceRequest.prototype = Object.create(SerializableBusinessObject.prototype);
ServiceRequest.constructor = ServiceRequest;

exports.ServiceRequest = ServiceRequest;



ServiceRequest.prototype.toString = function() {
// 	return "ServiceRequest " + this.id;
	var str = "ServiceRequest";
	str += "\nid '" + this.id + "'";
	str += "\nparentServiceRequestId '" + this.parentServiceRequestId + "'";
	str += "\nprocess '" + this.process + "'";
	str += "\ndetails '" + this.details + "'";
	str += "\nstate '" + this.state + "'";
	str += "\nlifecycle '" + this.lifecycle + "'";
	str += "\noriginatorId '" + this.originatorId + "'";
	str += "\nrecipientId  '" + this.recipientId + "'";
	str += "\nassignedToRole '" + this.assignedToRole + "'";
	str += "\ncreated '" + this.created + "'";
	str += "\ncontent '" + this.content + "'";

	return str;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Service Request State Object
 */

var SerializableBusinessObject = require('scsh/pki-db/SerializableBusinessObject').SerializableBusinessObject;

function ServiceRequestState(dao, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + dao + ")");

	this.dao = dao;

	// Must match database scheme
	this.id = 0;

	if (template) {
		for (var i in template) {
			this[i] = template[i];
		}
	}

	// Private properties
}

ServiceRequestState.prototype = Object.create(SerializableBusinessObject.prototype);
ServiceRequestState.constructor = ServiceRequestState;

exports.ServiceRequestState = ServiceRequestState;



ServiceRequestState.prototype.toString = function() {
	var str = "ServiceRequestState";
	str += "\nid [ " + this.id + " ]";
	str += "\nserviceRequestId [ " + this.serviceRequestId + " ]";
	str += "\nlifecycle [ " + this.lifecycle + " ]";
	str += "\ntransitionTime [ " + this.transitionTime + " ]";
	str += "\ncaseHandlerId [ " + this.caseHandlerId + " ]";
	str += "\ncontent [ " + this.content + " ]";

	return str;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Signer Object
 */

var SerializableBusinessObject = require('scsh/pki-db/SerializableBusinessObject').SerializableBusinessObject;

function Signer(dao, holder, name, keyId, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + dao + "," + holder + ")");

	this.dao = dao;

	// Must match database scheme
	this.id = 0;
	if (holder) {
		this.holderId = holder.id;
	}
	this.name = name;
	this.keyId = keyId;

	if (template) {
		for (var i in template) {
			this[i] = template[i];
		}
	}

	// Private properties
	this._holder = holder;
}

Signer.prototype = Object.create(SerializableBusinessObject.prototype);
Signer.constructor = Signer;

exports.Signer = Signer;



Signer.prototype.toString = function() {
	return "Signer " + this.id;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Subject Object
 */

var SerializableBusinessObject = require('scsh/pki-db/SerializableBusinessObject').SerializableBusinessObject;

function Subject(dao, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + dao + ")");

	this.dao = dao;

	// Must match database scheme
	this.id = 0;

	if (template) {
		for (var i in template) {
			this[i] = template[i];
		}
	}
}

Subject.prototype = Object.create(SerializableBusinessObject.prototype);
Subject.constructor = Subject;

exports.Subject = Subject;



Subject.prototype.toString = function() {
	var str = "Subject id=" + this.id;

	if (this.email) {
		str += ", email=" + this.email;
	}
	if (this.name) {
		str += ", name=" + this.name;
	}
	if (this.managedByRoleId) {
		str += ", managedByRoleId=" + this.managedByRoleId;
	}
	if (this.assuranceLevel > 0) {
		str += ", assuranceLevel=" + this.assuranceLevel;
	}

	str += ", content=" + this.content;

	return str;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Token Object
 */



function Token(dao, tokenPath, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + dao + "," + tokenPath + "," + template + ")");

	this.dao = dao;

	// Must match database scheme
	this.path = tokenPath;

	if (template) {
		for (var i in template) {
			this[i] = template[i];
		}
	}
}

exports.Token = Token;



Token.prototype.toString = function() {
	var str =  "Token " + this.path;

	if (this.subjectId) {
		str += " assigned to subject" + this.subjectId;
	}

	if (this.serviceRequestId) {
		str += ", ServiceRequest=" + this.serviceRequestId;
	}

	return str;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview TokenAction Object
 */



function TokenAction(dao, tokenId, serviceRequestId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new(" + dao + "," + tokenId + "," + serviceRequestId + ")");

	this.dao = dao;

	// Must match database scheme
	this.tokenId = tokenId;
	this.serviceRequestId = serviceRequestId;
}

exports.TokenAction = TokenAction;



TokenAction.prototype.toString = function() {
	return "TokenAction(" + this.id + "," + this.tokenId + "," + this.serviceRequestId + ")";
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview DAO Factory for file system based persistence
 */

var Certificate = require('scsh/pki-db/Certificate').Certificate;
var Holder = require('scsh/pki-db/Holder').Holder;



/**
 * Data access object for certificates
 *
 * @param {Object} the factory that created this DAO
 */
function CertificateDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.CertificateDAO = CertificateDAO;



CertificateDAO.create = [
"CREATE TABLE IF NOT EXISTS Certificate (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	holderId MEDIUMINT UNSIGNED NOT NULL," +
"	serviceRequestId MEDIUMINT UNSIGNED REFERENCES ServiceRequest(id)," +
"	expiry BIGINT," +
"	status SMALLINT NOT NULL DEFAULT 0," +
"	revocationDate TIMESTAMP NULL," +
"	invalidityDate TIMESTAMP NULL," +
"	serial VARCHAR(100) NOT NULL," +
"	linkDir SMALLINT NOT NULL," +
"	keyId VARBINARY(64)," +
"	bytes VARBINARY(8192) NOT NULL," +
"	PRIMARY KEY (id)," +
"	UNIQUE (holderId, serial, linkDir)," +
"	FOREIGN KEY (holderId) REFERENCES Holder(id) ON DELETE CASCADE" +
")",
{	H2: "CREATE INDEX IF NOT EXISTS Certificate_Idx1 ON Certificate(holderId, serial, linkDir);",
	MySQL: {
		IsEmpty: "SHOW INDEX FROM Certificate WHERE Key_name = 'Certificate_Idx1';",
		Statement: "ALTER TABLE Certificate ADD INDEX Certificate_Idx1 (holderId, serial, linkDir);"
	}},
{	H2: "CREATE INDEX IF NOT EXISTS Certificate_Idx2 ON Certificate(keyId);",
	MySQL: {
		IsEmpty: "SHOW INDEX FROM Certificate WHERE Key_name = 'Certificate_Idx2';",
		Statement: "ALTER TABLE Certificate ADD INDEX Certificate_Idx2 (keyId);"
	}}
];



CertificateDAO.drop = "DROP TABLE IF EXISTS Certificate";



CertificateDAO.prototype.toString = function() {
	return "CertificateDAO(db)";
}



/**
 * Create and persists a new certificate object
 *
 * For certificates the serial number is used as unique identifier, as the keyId can be re-used if more
 * than one certificate is issued for the same key.
 *
 * @param {Holder} holder the holder of this certificate
 * @param {String} serial the serial number of this certificate (full CHR for CVC and decimal serial for X.509)
 * @param {Number} dir one of Certificate.UP, Certificate.SHORT or Certificate.DOWN. See Certificate for explanation
 * @param {ByteString} certbin the binary presentation of the certificate
 * @type Certificate
 * @return the newly created certificate object
 */
CertificateDAO.prototype.newCertificate = function(holder, serial, dir, certbin, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newCertificate(" + holder + "," + serial + "," + dir + "," + certbin.bytes(0,10).toString(HEX) + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(serial, "Parameter serial must not be empty");
	assert(typeof(serial) == "string", "Parameter serial must be a String");
	assert(dir == Certificate.UP || dir == Certificate.SHORT || dir == Certificate.DOWN, "Parameter dir invalid");
	assert(certbin, "Parameter certbin must not be empty");
	assert(certbin instanceof ByteString, "Parameter must be instance of ByteString");
	assert((typeof(template) == "undefined") || (template instanceof Object), "Parameter template be an object");

	var certificate = new Certificate(this, holder, serial, dir, certbin, template);

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = this.factory.insertStatementFromObject(con, "Certificate", certificate);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		certificate.id = rs.getInt(1);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return certificate;
}



/**
 * Get certificate identified by id
 *
 * @param {Number} id the certificate database id
 * @type Certificate
 * @return the certificate object or null if not found
 */
CertificateDAO.prototype.getCertificateById = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCertificateById(" + id + ")");

	assert(typeof(id) == "number", "Parameter id must be number");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Certificate where id = ?;");
		stmt.setInt(1, id);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "No certificate with id " + id + " found");
			return null;
		}
		var certificate = new Certificate(this);
		this.factory.resultSetToProperties(rs, certificate);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return certificate;
}



/**
 * Get certificate identified by serial number for given holder
 *
 * @param {Holder} holder the holder of this certificate
 * @param {String} serial the serial number of this certificate (full CHR for CVC and hexadecimal serial for X.509)
 * @param {Number} dir one of Certificate.UP, Certificate.SHORT or Certificate.DOWN. See Certificate for explanation
 * @type Certificate
 * @return the certificate object or null if not found
 */
CertificateDAO.prototype.getCertificateBySerial = function(holder, serial, dir) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCertificateBySerial(" + holder + "," + serial + "," + dir + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(serial, "Parameter serial must not be empty");
	assert(typeof(serial) == "string", "Parameter serial must be a String");
	assert(dir == Certificate.UP || dir == Certificate.SHORT || dir == Certificate.DOWN, "Parameter dir invalid");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Certificate where holderId = ? and serial = ? and linkDir = ?;");
		stmt.setInt(1, holder.id);
		stmt.setString(2, serial);
		stmt.setInt(3, dir);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			rs.close();

			if (dir == Certificate.SHORT) {
				stmt.close();
				con.close();
				GPSystem.log(GPSystem.DEBUG, module.id, "Root certificate " + serial + " not found");
				return null;
			}

			stmt.setInt(3, Certificate.SHORT);
			rs = stmt.executeQuery();
			if (!rs.next()) {
				rs.close();
				stmt.close();
				con.close();
				GPSystem.log(GPSystem.DEBUG, module.id, "No certificate with " + serial + " found");
				return null;
			}
		}
		var certificate = new Certificate(this, holder);
		this.factory.resultSetToProperties(rs, certificate);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return certificate;
}



/**
 * Get certificate identified by serial number for a certain certificate type
 *
 * This method is used to locate the issuer of a CVC terminal certificate when building a chain to the root.
 * The method is not guaranteed to find a certificate, if multiple certificates of the same name exist in a PKI,
 * e.g. if two different DVCAs use the same terminal naming scheme.
 *
 * @param {String} serial the serial number of this certificate (full CHR for CVC and decimal serial for X.509)
 * @param {Number} certtype one of Holder.CVC(default) or Holder.X509. See Holder for explanation
 * @type Certificate
 * @return the certificate object or null if not found
 */
CertificateDAO.prototype.getCertificateBySerialAndType = function(serial, certtype) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCertificateBySerialAndType(" + certtype + "," + serial + ")");

	assert(serial, "Parameter serial must not be empty");
	assert(typeof(serial) == "string", "Parameter serial must be a String");

	if (!certtype) {
		certtype = Holder.CVC;
	}

	assert(((certtype & 0xF) == Holder.CVC) || ((certtype & 0xF) == Holder.X509), "Parameter certtype invalid");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Certificate join Holder on Certificate.holderId = Holder.id where Certificate.serial = ? and Holder.certificateType = ?;");

		stmt.setString(1, serial);
		stmt.setInt(2, certtype);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			rs.close();
			stmt.close();
			con.close();
			GPSystem.log(GPSystem.DEBUG, module.id, "No certificate found with serial " + serial);
			return null;
		}

		var certificate = new Certificate(this, { id: -1} );
		this.factory.resultSetToProperties(rs, certificate);

		if (rs.next()) {
			rs.close();
			stmt.close();
			con.close();
			GPSystem.log(GPSystem.DEBUG, module.id, "Multiple certificates found with serial " + serial);
			return null;
		}

	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return certificate;
}



/**
 * Get certificate identified by key id
 *
 * @param {Number} keyId the certificate database keyId
 * @type Certificate
 * @return the certificate object or null if not found
 */
CertificateDAO.prototype.getCertificateByKeyId = function(keyId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCertificateByKeyId(" + keyId + ")");

	assert(keyId instanceof ByteString, "Parameter must be instance of ByteString");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Certificate where keyId = ?;");
		stmt.setBytes(1, keyId);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "No certificate with keyId " + keyId + " found");
			return null;
		}
		var certificate = new Certificate(this);
		this.factory.resultSetToProperties(rs, certificate);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return certificate;
}



/**
 * Get the current certificate in use by this holder
 *
 * @param {Holder} holder the holder of this certificate
 * @type Certificate
 * @return the certificate object or null if no current certificate
 */
CertificateDAO.prototype.getCurrentCertificate = function(holder) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCurrentCertificate(" + holder + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");

	if (!holder.certId) {
		return null;
	}

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Certificate where id = ?;");
		stmt.setInt(1, holder.certId);
		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "id " + holder.certId + " not found");
			return null;
		}
		var certificate = new Certificate(this, holder);
		this.factory.resultSetToProperties(rs, certificate);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return certificate;
}



/**
 * Get all certificates issued to this holder
 *
 * @param {Holder} holder the holder of the certificates
 * @type Certificate[]
 * @return the list of certificates, which my be empty
 */
CertificateDAO.prototype.enumerateCertificates = function(holder) {
	GPSystem.log(GPSystem.DEBUG, module.id, "enumerateCertificates(" + holder + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");

	var con = null;
	var stmt = null;
	var rs = null;
	var result = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Certificate where holderId = ?;");
		stmt.setInt(1, holder.id);
		rs = stmt.executeQuery();
		while (rs.next()) {
			var certificate = new Certificate(this, holder);
			this.factory.resultSetToProperties(rs, certificate);
			result.push(certificate);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return result;
}



/**
 * Get all certificates that were imported by the given service request id
 *
 * @param {Number} serviceRequestId the service request id
 * @type Certificate[]
 * @return the list of certificates, which my be empty
 */
CertificateDAO.prototype.enumerateCertificatesByServiceRequestId = function(serviceRequestId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "enumerateCertificatesByServiceRequestId(" + serviceRequestId + ")");

	assert(typeof(serviceRequestId) == "number", "Parameter serviceRequestId must be number");
	assert(serviceRequestId > 0, "Invalid argument value for serviceRequestId");

	var con = null;
	var stmt = null;
	var rs = null;
	var result = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Certificate where serviceRequestId = ?;");
		stmt.setInt(1, serviceRequestId);
		rs = stmt.executeQuery();
		while (rs.next()) {
			var certificate = new Certificate(this);
			this.factory.resultSetToProperties(rs, certificate);
			result.push(certificate);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return result;
}



/**
 * Delete certificate
 *
 * @param {Certificate} certificate the certificate to delete
 * @type boolean
 * @return true if deleted
 */
CertificateDAO.prototype.deleteCertificate = function(certificate) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteCertificate(" + certificate + ")");

	assert(certificate, "Parameter certificate must not be empty");
	assert(certificate instanceof Certificate, "Parameter must be instance of Certificate");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("delete from Certificate where id = ?;");

		stmt.setInt(1, certificate.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return true;
}



/**
 * Update revocation status
 *
 * @param {Number} certId the certificate id
 * @param {Number} status the status id
 * @type boolean
 * @return true if updated
 */
CertificateDAO.prototype.updateRevocationStatus = function(certId, status) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateRevocationStatus( certificateId=" + certId + " status=" + status + ")");

	assert(typeof(certId) == "number", "Parameter id must be number");
	assert(typeof(status) == "number", "Parameter status must be number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Certificate set status = ? where id = ?;");

		stmt.setInt(1, status);
		stmt.setInt(2, certId);
		var updated = stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return updated > 0;
}



/**
 * Update revocation date
 *
 * @param {Number} certId the certificate id
 * @param {Date/NULL} date the revocation date or null
 * @type boolean
 * @return true if updated
 */
CertificateDAO.prototype.updateRevocationDate = function(certId, date) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateRevocationDate( certificateId=" + certId + " date=" + date + ")");

	assert(typeof(certId) == "number", "Parameter id must be number");
	assert(date instanceof Date || date == null, "Parameter date must be an object of type Date or null");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		if (date == null) {
			stmt = con.prepareStatement("update Certificate set revocationDate = NULL where id = ?;");
			stmt.setInt(1, certId);
		} else {
			stmt = con.prepareStatement("update Certificate set revocationDate = ? where id = ?;");
			var ts = new java.sql.Timestamp(date.valueOf());
			stmt.setTimestamp(1, ts);
			stmt.setInt(2, certId);
		}

		var updated = stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return updated > 0;
}



/**
 * Update invalidity date
 *
 * @param {Number} certId the certificate id
 * @param {Date/NULL} date the invalidity date or null
 * @type boolean
 * @return true if updated
 */
CertificateDAO.prototype.updateInvalidityDate = function(certId, date) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateInvalidityDate( certificateId=" + certId + " date=" + date + ")");

	assert(typeof(certId) == "number", "Parameter id must be number");
	assert(date instanceof Date || date == null, "Parameter date must be an object of type Date or null");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		if (date == null) {
			stmt = con.prepareStatement("update Certificate set invalidityDate = NULL where id = ?;");
			stmt.setInt(1, certId);
		} else {
			stmt = con.prepareStatement("update Certificate set invalidityDate = ? where id = ?;");
			var ts = new java.sql.Timestamp(date.valueOf());
			stmt.setTimestamp(1, ts);
			stmt.setInt(2, certId);
		}

		var updated = stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return updated > 0;
}



/**
 * Update service request id
 *
 * @param {Number} certId the certificate id
 * @param {Number} srId the service request id
 * @type boolean
 * @return true if updated
 */
CertificateDAO.prototype.updateServiceRequestId = function(certId, srId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateServiceRequestId( certificateId=" + certId + " srId=" + srId + ")");

	assert(typeof(certId) == "number", "Parameter id must be number");
	assert(typeof(srId) == "number", "Parameter srId must be number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Certificate set serviceRequestId = ? where id = ?;");

		stmt.setInt(1, srId);
		stmt.setInt(2, certId);
		var updated = stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return updated > 0;
}



/**
 * Get all revoked certificates issued to the given holder
 *
 * @param {Number} parentHolderId the issuer's holder id
 * @param {Date} revocationDate the date to check the expiration date of the certificates
 * @type Certificate[]
 * @return the list of certificates, which my be empty
 */
CertificateDAO.prototype.getRevokedCertificates = function(parentHolderId, revocationDate) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getRevokedCertificates(" + parentHolderId + ", " + revocationDate + ")");

	assert(typeof(parentHolderId) == "number", "Parameter parentHolderId must be number");
	assert(revocationDate instanceof Date, "Parameter revocationDate must be an object of type Date or null");

	var con = null;
	var stmt = null;
	var rs = null;
	var result = [];

	try	{
		con = this.factory.getConnection();

		var sql = "select c.id, c.holderId, c.serviceRequestId, c.expiry, c.status, c.revocationDate, c.invalidityDate, c.serial, c.linkDir, c.keyId, c.bytes "
			+ "from Certificate c join Holder h on (c.holderId = h.id) "
			+ "where h.parentId = ? and c.status > 0 and c.expiry > ?;";

		stmt = con.prepareStatement(sql);
		stmt.setInt(1, parentHolderId);
		stmt.setLong(2, revocationDate.valueOf());
		rs = stmt.executeQuery();
		while (rs.next()) {
			var certificate = new Certificate(this);
			this.factory.resultSetToProperties(rs, certificate);
			result.push(certificate);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return result;
}



/**
 * Update full table
 *
 * @param {Function} updatefunc the callback to receive the result set to be modified
 */
CertificateDAO.prototype.updateBatch = function(updatefunc) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateBatch()");

	assert(typeof(updatefunc) == "function", "Parameter updatefunc must be a function");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();
		stmt = con.createStatement(java.sql.ResultSet.TYPE_SCROLL_SENSITIVE, java.sql.ResultSet.CONCUR_UPDATABLE);
		rs = stmt.executeQuery("select * from Certificate;");

		while (rs.next()) {
			updatefunc(rs);
			rs.updateRow();
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview DAO Factory for database based configuration persistence
 */

var Configuration = require('scsh/pki-db/Configuration').Configuration;



/**
 * Data access object for configurations
 *
 * @param {Object} the factory that created this DAO
 */
function ConfigurationDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.ConfigurationDAO = ConfigurationDAO;



ConfigurationDAO.create =
"CREATE TABLE IF NOT EXISTS Configuration (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	name VARCHAR(250)," +
"	content LONGTEXT," +
"	PRIMARY KEY (id)" +
")";

ConfigurationDAO.drop = "DROP TABLE IF EXISTS Configuration";



ConfigurationDAO.prototype.toString = function() {
	return "ConfigurationDAO(db)";
}



/**
 * Create and persists a new configuration
 *
 * @type Configuration
 * @return the newly created configuration object
 */
ConfigurationDAO.prototype.newConfiguration = function(name, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newConfiguration(" + name + ")");

	var sr = new Configuration(this, name, template);

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = this.factory.insertStatementFromObject(con, "Configuration", sr);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		sr.id = rs.getInt(1);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return sr;
}



/**
 * Get configuration identified by id
 *
 * @param {Number} id the id
 * @type Configuration
 * @return the configuration or null if not found
 */
ConfigurationDAO.prototype.getConfigurationById = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getConfigurationById(" + id + ")");

	assert(typeof(id) == "number", "Parameter id must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Configuration where id = ?");
		stmt.setInt(1, id);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "id " + id + " not found");
			return null;
		}
		var configuration = new Configuration(this);
		this.factory.resultSetToProperties(rs, configuration);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return configuration;
}



/**
 * Get configuration identified by name
 *
 * @param {String} name the name of the configuration
 * @type Configuration
 * @return the configuration or null if not found
 */
ConfigurationDAO.prototype.getConfigurationByName = function(name) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getConfigurationByName(" + name + ")");

	assert(typeof(name) == "string", "Parameter name must be a String");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Configuration where name = ?");
		stmt.setString(1, name);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "name " + name + " not found");
			return null;
		}
		var configuration = new Configuration(this);
		this.factory.resultSetToProperties(rs, configuration);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return configuration;
}



/**
 * Update the Configuration content
 *
 * @param {Configuration} configuration the configuration to update
 * @param {String} content the new content
 */
ConfigurationDAO.prototype.updateContent = function(configuration, content) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateContent(" + configuration + "," + content + ")");

	assert(configuration, "Parameter configuration must not be empty");
	assert(configuration instanceof Configuration, "Parameter must be instance of Configuration");
	assert(typeof(content) == "string", "Parameter val must be a String");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Configuration set content = ? where id = ?;");

		stmt.setString(1, content);
		stmt.setInt(2, configuration.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	configuration.content = content;
}



/**
 * Delete Configuration
 *
 * @param {Configuration} configuration the configuration to delete
 * @type boolean
 * @return true if deleted
 */
ConfigurationDAO.prototype.deleteConfiguration = function(configuration) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteConfiguration(" + configuration + ")");

	assert(configuration, "Parameter configuration must not be empty");
	assert(configuration instanceof Configuration, "Parameter must be instance of Configuration");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("delete from Configuration where id = ?;");

		stmt.setInt(1, configuration.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return true;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview HolderDAO for database objects
 */

var Holder = require('scsh/pki-db/Holder').Holder;
var Certificate = require('scsh/pki-db/Certificate').Certificate;



/**
 * Data access object for certificate holders
 *
 * @param {Object} the factory that created this DAO
 */
function HolderDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.HolderDAO = HolderDAO;


HolderDAO.create =
"CREATE TABLE IF NOT EXISTS Holder (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	type VARCHAR(20)," +
"	certificateType SMALLINT UNSIGNED NOT NULL," +
"	parentId MEDIUMINT UNSIGNED," +
"	name VARCHAR(100)," +
"	subjectId MEDIUMINT UNSIGNED," +
"	signerNo MEDIUMINT UNSIGNED," +
"	certId MEDIUMINT UNSIGNED," +
"	content LONGTEXT," +
"	UNIQUE (certificateType, parentId, name)," +
"	PRIMARY KEY (id)," +
"	FOREIGN KEY (parentId) REFERENCES Holder(id) ON DELETE CASCADE," +
"	FOREIGN KEY (subjectId) REFERENCES Subject(id) ON DELETE SET NULL" +
")";


HolderDAO.drop = "DROP TABLE IF EXISTS Holder";


HolderDAO.alter = [
	"ALTER TABLE Holder " +
	"ADD COLUMN IF NOT EXISTS type VARCHAR(20)",

	"ALTER TABLE Holder " +
	"ADD COLUMN IF NOT EXISTS content LONGTEXT",
];


HolderDAO.prototype.toString = function() {
	return "HolderDAO(db)";
}



/**
 * Strip the last element of the path, effectively defining the parent within the path
 *
 * @private
 * @param {String} path the path to strip the last element from
 * @returns the parent path or null for the root
 * @type String
 */
HolderDAO.parentPathOf = function(path) {
	var ofs = path.lastIndexOf("/");
	if (ofs <= 0) {
		return null;
	}
	return path.substr(0, ofs);
}



/**
 * Determine object id for holder identified by path
 *
 * @param {String} path the PKI path
 * @type Number
 * @return the id or 0 if not found
 */
HolderDAO.prototype.determineId = function(path, certtype) {
	GPSystem.log(GPSystem.DEBUG, module.id, "determineId(" + path + "," + certtype + ")");

	var path = path.substr(1).split("/");
	assert(path.length > 0, "Path must contain at least one element");
	assert(typeof(certtype) == "number", "Certtype must be number");

	var con = null;
	var stmt = null;
	var rs = null;
	var id = 0;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select id from Holder where certificateType = ? and parentId is null and name = ?;");
		stmt.setInt(1, certtype);
		stmt.setString(2, path[0]);
		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "name " + path[0] + " at root level not found for certtype = " + certtype);
			return 0;
		}

		var id = rs.getInt(1);
		rs.close();
		stmt.close();

		stmt = con.prepareStatement("select id from Holder where parentId = ? and name = ?;");
		for (var i = 1; i < path.length; i++) {
			stmt.setInt(1, id);
			stmt.setString(2, path[i]);
			rs = stmt.executeQuery();
			if (!rs.next()) {
				GPSystem.log(GPSystem.DEBUG, module.id, "name " + path[i] + " at level " + i + "not found");
				return 0;
			}
			id = rs.getInt(1);
			rs.close();
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return id;
}



/**
 * Create and persists a new holder object without a path specifier
 *
 * @param {Number} certtype one of Holder.CVC or Holder.X509. See Holder for explanation
 * @type Holder
 * @return the newly created holder object
 */
HolderDAO.prototype.newHolderForParent = function(parentId, certtype, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newHolderForParent(" + parentId + "," + certtype + ")");

	assert(typeof(parentId) == "number", "Parameter parentId must be number");

	if (!certtype) {
		certtype = Holder.CVC;
	}

	assert(((certtype & 0xF) == Holder.CVC) || ((certtype & 0xF) == Holder.X509), "Parameter certtype invalid");
	assert((typeof(template) == "undefined") || (template instanceof Object), "Parameter template be an object");

	var holder = new Holder(this, undefined, certtype, template);

	var con = null;
	var stmt = null;
	var rs = null;

	if (parentId) {
		holder.parentId = parentId;
	}

	try	{
		con = this.factory.getConnection();

		var stmt = this.factory.insertStatementFromObject(con, "Holder", holder);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		holder.id = rs.getInt(1);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return holder;
}



/**
 * Create and persists a new holder object
 *
 * @param {String} path the path in the PKI hierachie
 * @param {Number} certtype one of Holder.CVC or Holder.X509. See Holder for explanation
 * @type Holder
 * @return the newly created holder object
 */
HolderDAO.prototype.newHolder = function(path, certtype, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newHolder(" + path + "," + certtype + ")");

	assert(path, "Parameter path must not be empty");
	assert(typeof(path) == "string", "Parameter path must be a String");

	if (!certtype) {
		certtype = Holder.CVC;
	}

	assert(((certtype & 0xF) == Holder.CVC) || ((certtype & 0xF) == Holder.X509), "Parameter certtype invalid");
	assert((typeof(template) == "undefined") || (template instanceof Object), "Parameter template be an object");

	var holder = new Holder(this, path, certtype, template);

	var con = null;
	var stmt = null;
	var rs = null;

	var parentid = 0;

	var ofs = path.lastIndexOf("/");

	if (ofs > 0) {
		parentid = this.determineId(path.substr(0, ofs), certtype);
		if (!parentid) {
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "Path " + path + " is invalid");
		}
		holder.parentId = parentid;
	}

	try	{
		con = this.factory.getConnection();

		var stmt = this.factory.insertStatementFromObject(con, "Holder", holder);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		holder.id = rs.getInt(1);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return holder;
}



/**
 * Get holder for given PKI path
 *
 * @param {String} path the path in the PKI hierachie
 * @type Holder
 * @return the holder at the path
 */
HolderDAO.prototype.getHolder = function(path, certtype) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getHolder(" + path + "," + certtype + ")");

	assert(path, "Parameter path must not be empty");
	assert(typeof(path) == "string", "Parameter path must be a String");
	assert(typeof(certtype) == "number", "Certtype must be number");

	var con = null;
	var stmt = null;
	var rs = null;
	var holder = null;
	var ofs = path.lastIndexOf("/");

	var parentid = 0;
	if (ofs > 0) {
		parentid = this.determineId(path.substr(0, ofs), certtype);
		if (!parentid) {
			GPSystem.log(GPSystem.DEBUG, module.id, "Path " + path + " is invalid");
			return null;
		}

	}

	var name = path.substr(ofs + 1);

	try	{
		con = this.factory.getConnection();

		if (parentid) {
			stmt = con.prepareStatement("select * from Holder where name = ? and parentId = ?;");
			stmt.setInt(2, parentid);
		} else {
			stmt = con.prepareStatement("select * from Holder where name = ? and parentId is null and certificateType = ?;");
			stmt.setInt(2, certtype);
		}
		stmt.setString(1, name);
		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "name " + name + " not found with parent " + parentid);
			return null;
		}
		holder = new Holder(this, path);
		this.factory.resultSetToProperties(rs, holder);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return holder;
}



/**
 * Get holder for given id
 *
 * @param {Number} id the holder id
 * @type Holder
 * @return the holder for the given id
 */
HolderDAO.prototype.getHolderById = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getHolderById(" + id + ")");

	assert(typeof(id) == "number", "Parameter id must be number");

	var con = null;
	var stmt = null;
	var rs = null;
	var holder = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Holder where id = ?;");
		stmt.setInt(1, id);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "id " + id + " not found");
			return null;
		}
		holder = new Holder(this, undefined);
		this.factory.resultSetToProperties(rs, holder);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return holder;
}



/**
 * Get holder for a given subject, parent holder and certificate type
 *
 * @param {Number} subjectId the subject id
 * @param {Number} parentId the parent holder id
 * @param {Number} certificateType one of Holder.CVC or Holder.X509. See Holder for explanation
 * @type Holder
 * @return the holder or null if not found
 */
HolderDAO.prototype.getHolderBySubjectAndParent = function(subjectId, parentId, certificateType) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getHolderBySubjectAndParent(subjectId=" + subjectId + ", parentId=" + parentId + ", certificateType=" + certificateType + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");
	assert(typeof(parentId) == "number", "Parameter parentId must be a number");
	assert(typeof(certificateType) == "number", "Parameter certificateType must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var holder = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Holder where subjectId = ? and parentId = ? and certificateType = ?;");
		stmt.setInt(1, subjectId);
		stmt.setInt(2, parentId);
		stmt.setInt(3, certificateType);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "No holder found");
			return null;
		}
		holder = new Holder(this, undefined);
		this.factory.resultSetToProperties(rs, holder);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return holder;
}



/**
 * Get holder for a given subject, parent holder and certificate type
 *
 * @param {Number} subjectId the subject id
 * @param {Number} parentId the parent holder id
 * @param {Number} certificateType one of Holder.CVC or Holder.X509. See Holder for explanation
 * @type Holder
 * @return the holder or null if not found
 */
HolderDAO.prototype.getHolderByTypeAndName = function(parentId, name, certificateType) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getHolderByTypeAndName(parentId=" + parentId + ", name=" + name + ", certificateType=" + certificateType + ")");

	assert(typeof(parentId) == "number", "Parameter parentId must be a number");
	assert(typeof(name) == "string", "Parameter name must be a number");
	assert(typeof(certificateType) == "number", "Parameter certificateType must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var holder = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Holder where parentId = ? and name = ? and certificateType = ?;");
		stmt.setInt(1, parentId);
		stmt.setString(2, name);
		stmt.setInt(3, certificateType);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "No holder found");
			return null;
		}
		holder = new Holder(this, undefined);
		this.factory.resultSetToProperties(rs, holder);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return holder;
}



/**
 * Get a list of holders under the PKI path.
 *
 * @param {String} path the path in the PKI hierachie, use "/" to obtain root holders.
 * @type String[]
 * @return the list of holder names at the path
 */
HolderDAO.prototype.getHolderList = function(path, certtype) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getHolderList(" + path + "," + certtype + ")");

	assert(typeof(path) == "string", "Parameter path must be a String");
	assert(typeof(certtype) == "number", "Certtype must be number");

	var con = null;
	var stmt = null;
	var rs = null;

	var parentid = 0;
	if (path.length > 1) {
		parentid = this.determineId(path, certtype);
		if (!parentid) {
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "Path " + path + " is invalid");
		}

	}

	var list = [];

	try	{
		con = this.factory.getConnection();

		if (parentid) {
			stmt = con.prepareStatement("select name from Holder where parentId = ?;");
			stmt.setInt(1, parentid);
		} else {
			stmt = con.prepareStatement("select name from Holder where certificateType = ? and parentId is null;");
			stmt.setInt(1, certtype);
		}
		rs = stmt.executeQuery();
		while (rs.next()) {
			list.push(rs.getString(1));
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Count the number of holders where the given holder is parent
 *
 * @param {Number} holderId the holder id
 * @type Number
 * @return number of child holders
 */
HolderDAO.prototype.countSubHolder = function(holderId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "countSubHolder(" + holderId + ")");

    assert(typeof(holderId) == "number", "Parameter holderId must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var count = 0;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select count(1) from Holder where parentId = ?;");
		stmt.setInt(1, holderId);

		rs = stmt.executeQuery();
        if (rs.next()) {
            count = rs.getInt(1);
        }
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return count;
}



/**
 * Get a list of sub holders for the given parent id
 *
 * @param {Number} parentId the parent's holder id
 * @type Holder[]
 * @return the holder list
 */
HolderDAO.prototype.getSubHolderList = function(parentId, pageOffset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSubHolderList(" + parentId + ")");

    assert(typeof(parentId) == "number", "Parameter parentId must be a number");
	assert(typeof(pageOffset) == "undefined" || typeof(pageOffset) == "number", "Parameter pageOffset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;
	var list = [];

	try	{
		con = this.factory.getConnection();

		var sql = "select * from Holder where parentId = ?"
		if (page) {
			sql += " limit ?,?";
		}
		stmt = con.prepareStatement(sql);

		stmt.setInt(1, parentId);
		if (page) {
			stmt.setInt(2, pageOffset);
			stmt.setInt(3, page);
		}

		rs = stmt.executeQuery();
        while (rs.next()) {
			var holder = new Holder(this, undefined);
			this.factory.resultSetToProperties(rs, holder);
			list.push(holder);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}




/**
 * Get a list of holder for a given subject
 *
 * @param {Number} subjectId the subject id
 * @type Holder[]
 * @return the holder list
 */
HolderDAO.prototype.getHolderListBySubject = function(subjectId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getHolderListBySubject(subjectId=" + subjectId + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Holder where subjectId = ?;");
		stmt.setInt(1, subjectId);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var holder = new Holder(this, undefined);
			this.factory.resultSetToProperties(rs, holder);
			list.push(holder);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Get a list of holder for a given subject
 *
 * @param {Number} subjectId the subject id
 * @param {String} type the holder's type
 * @type Holder[]
 * @return the holder list
 */
HolderDAO.prototype.getHolderListBySubjectAndType = function(subjectId, type) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getHolderListBySubjectAndType(subjectId=" + subjectId+ ", " + type + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");
	assert(typeof(type) == "string", "Parameter type must be a String");

	var con = null;
	var stmt = null;
	var rs = null;
	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Holder where subjectId = ? and type like ?;");
		stmt.setInt(1, subjectId);
		stmt.setString(2, type);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var holder = new Holder(this, undefined);
			this.factory.resultSetToProperties(rs, holder);
			list.push(holder);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Get a list of holder for a given type
 *
 * @param {String} type the holder's type
 * @type Holder[]
 * @return the holder list
 */
HolderDAO.prototype.getHolderListByType = function(type) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getHolderListByType(" + type + ")");

	assert(typeof(type) == "string", "Parameter type must be a String");

	var con = null;
	var stmt = null;
	var rs = null;
	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Holder where type like ?;");
		stmt.setString(1, type);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var holder = new Holder(this, undefined);
			this.factory.resultSetToProperties(rs, holder);
			list.push(holder);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Determine the path for the given holder
 *
 * @param {Holder} holder the holder
 * @type Holder[]
 * @return the path as a list of holders
 */
HolderDAO.prototype.determineHolderPathList = function(holder) {
	GPSystem.log(GPSystem.DEBUG, module.id, "determineHolderPathList(holder=" + holder + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");

	var list = null;

	if (holder.parentId) {
		var parent = this.getHolderById(holder.parentId);
		list = this.determineHolderPathList(parent);
		list.push(holder);
	} else {
		list = []
		list.push(holder); // root holder
	}

	return list;
}



/**
 * Update the holder name
 *
 * @param {Holder} holderId the holder id
 * @param {Number} name the new holder name
 */
HolderDAO.prototype.updateName = function(holderId, name) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateName(" + holderId + "," + name + ")");

	assert(typeof(holderId) == "number", "Parameter holderId must be a Number");
	assert(typeof(name) == "string", "Parameter name must be a String");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Holder set name = ? where id = ?;");

		stmt.setString(1, name);
		stmt.setInt(2, holderId);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Update the holder content
 *
 * @param {Holder} holder the holder to update
 * @param {String} content the new content
 */
HolderDAO.prototype.updateContent = function(holder) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateContent(" + holder + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Holder set content = ? where id = ?;");

		stmt.setString(1, holder.serialize());
		stmt.setInt(2, holder.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Update the subject id
 *
 * @param {Holder} holder the holder
 * @param {Number} val the subject id
 */
HolderDAO.prototype.updateSubjectId = function(holder, val) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateSubjectId(" + holder + "," + val + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(typeof(val) == "number", "Parameter val must be a Number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Holder set subjectId = ? where id = ?;");

		stmt.setInt(1, val);
		stmt.setInt(2, holder.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	holder.subjectId = val;
}


/**
 * Update the signer number
 *
 * @param {Holder} holder the holder
 * @param {Number} val the new signer number
 */
HolderDAO.prototype.updateSignerNo = function(holder, val) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateSignerNo(" + holder + "," + val + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(typeof(val) == "number", "Parameter val must be a Number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Holder set signerNo = ? where id = ?;");

		stmt.setInt(1, val);
		stmt.setInt(2, holder.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	holder.signerNo = val;
}



/**
 * Update the current certificate
 *
 * @param {Holder} holder the holder
 * @param {Number} val the new signer number
 */
HolderDAO.prototype.updateCurrentCertificate = function(holder, certificate) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateCurrentCertificate(" + holder + "," + certificate + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(certificate, "Parameter certificate must not be empty");
	assert(certificate instanceof Certificate, "Parameter must be instance of Certificate");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Holder set certId = ? where id = ?;");

		stmt.setInt(1, certificate.id);
		stmt.setInt(2, holder.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	holder.certId = certificate.id;
}



/**
 * Delete holder
 *
 * @param {Holder} holder the holder to delete
 * @type boolean
 * @return true if deleted
 */
HolderDAO.prototype.deleteHolder = function(holder) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteHolder(" + holder + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("delete from Holder where id = ?;");

		stmt.setInt(1, holder.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return true;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2025 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview KeyEscrowDAO
 */

var KeyEscrow = require('scsh/pki-db/KeyEscrow').KeyEscrow;



 /**
 * Data access object for key escrows
 *
 * @param {Object} the factory that created this DAO
 */
function KeyEscrowDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.KeyEscrowDAO = KeyEscrowDAO;



KeyEscrowDAO.create = [
"CREATE TABLE IF NOT EXISTS KeyEscrow (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	signerId MEDIUMINT UNSIGNED NOT NULL," +
"	keyId VARBINARY(64) NOT NULL," +
"	name VARCHAR(100) NOT NULL," +
"	exportCertificateChain VARBINARY(2700) NOT NULL," +
"	keyblob VARBINARY(8192) NOT NULL," +
"	PRIMARY KEY (id)," +
"	FOREIGN KEY (signerId) REFERENCES Signer(id) ON DELETE CASCADE" +
")",
{	H2: "CREATE INDEX IF NOT EXISTS KeyEscrow_Idx1 ON KeyEscrow(keyId);",
	MySQL: {
		IsEmpty: "SHOW INDEX FROM KeyEscrow WHERE Key_name = 'KeyEscrow_Idx1';",
		Statement: "ALTER TABLE KeyEscrow ADD INDEX KeyEscrow_Idx1 (keyId);"
	}}
];

KeyEscrowDAO.drop = "DROP TABLE IF EXISTS KeyEscrow";



KeyEscrowDAO.prototype.toString = function() {
	return "KeyEscrowDAO(db)";
}



/**
 * Get a list of keys in escrow for the given signer
 *
 * @param {Number} signerId the signerId of the escrow key
 * @type KeyEscrow[]
 * @return the list of keys in escrow
 */
KeyEscrowDAO.prototype.getKeyEscrowBySigner = function(signerId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getKeyEscrowBySigner(" + signerId + ")");

	assert(typeof(signerId) == "number", "signerId must be number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("SELECT * FROM KeyEscrow WHERE signerId = ?;");
		stmt.setInt(1, signerId);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var keyEscrow = new KeyEscrow(this);
			this.factory.resultSetToProperties(rs, keyEscrow);
			list.push(keyEscrow);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview RequestDAO
 */

var Holder = require('scsh/pki-db/Holder').Holder;
var Request = require('scsh/pki-db/Request').Request;



/**
 * Data access object for requests
 *
 * @param {Object} the factory that created this DAO
 */
function RequestDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.RequestDAO = RequestDAO;



RequestDAO.create = [
"CREATE TABLE IF NOT EXISTS Request (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	holderId MEDIUMINT UNSIGNED NOT NULL," +
"	keyId VARBINARY(64) NOT NULL," +
"	bytes VARBINARY(4096) NOT NULL," +
"	PRIMARY KEY (id)," +
"	FOREIGN KEY (holderId) REFERENCES Holder(id) ON DELETE CASCADE" +
")",
{	H2: "CREATE INDEX IF NOT EXISTS Request_Idx1 ON Request(keyId);",
	MySQL: {
		IsEmpty: "SHOW INDEX FROM Request WHERE Key_name = 'Request_Idx1';",
		Statement: "ALTER TABLE Request ADD INDEX Request_Idx1 (keyId);"
	}}
];

RequestDAO.drop = "DROP TABLE IF EXISTS Request";



RequestDAO.prototype.toString = function() {
	return "RequestDAO(db)";
}



/**
 * Create and persists a new request object
 *
 * @param {Holder} holder the holder of this request
 * @param {ByteString} keyId the keyId of the request
 * @param {ByteString} encodedRequest the request
 * @param {Object} template with additional database fields
 * @type Request
 * @return the newly created request object
 */
RequestDAO.prototype.newRequest = function(holder, keyId, encodedRequest, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newRequest(" + holder + "," + keyId + "," + encodedRequest + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(keyId, "Parameter keyId must not be empty");
	assert(keyId instanceof ByteString, "Parameter must be instance of ByteString");
	assert(encodedRequest, "Parameter encodedRequest must not be empty");
	assert(encodedRequest instanceof ByteString, "Parameter must be instance of ByteString");
	assert((typeof(template) == "undefined") || (template instanceof Object), "Parameter template be an object");

	var request = new Request(this, holder, keyId, encodedRequest, template);

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = this.factory.insertStatementFromObject(con, "Request", request);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		request.id = rs.getInt(1);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return request;
}



/**
 * Get request identified by id
 *
 * @param {Number} id the request id
 * @param {Holder} holder the holder of this request
 * @type Request
 * @return the request object or null if not found
 */
RequestDAO.prototype.getRequest = function(id, holder) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getRequest(" + id + ")");

	assert(typeof(id) == "number", "Parameter id must be number");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Request where id = ?;");
		stmt.setInt(1, id);
		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "id " + id + " not found");
			return null;
		}
		var request = new Request(this, holder);
		this.factory.resultSetToProperties(rs, request);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return request;
}



/**
 * Get request identified by keyId
 *
 * @param {Holder} holder the holder of this request
 * @param {ByteString} keyId the keyId of the request
 * @type Request
 * @return the request object or null if not found
 */
RequestDAO.prototype.getRequestByKeyId = function(holder, keyId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getRequest(" + holder + "," + keyId + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(keyId, "Parameter keyId must not be empty");
	assert(keyId instanceof ByteString, "Parameter must be instance of ByteString");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Request where keyId = ? and holderId = ?;");
		stmt.setBytes(1, keyId);
		stmt.setInt(2, holder.id);
		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "keyId " + keyId + " not found");
			return null;
		}
		var request = new Request(this, holder, keyId);
		this.factory.resultSetToProperties(rs, request);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return request;
}



/**
 * Delete request
 *
 * @param {Request} request the request to delete
 * @type boolean
 * @return true if deleted
 */
RequestDAO.prototype.deleteRequest = function(request) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteRequest(" + request + ")");

	assert(request, "Parameter request must not be empty");
	assert(request instanceof Request, "Parameter must be instance of Request");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("delete from Request where id = ?;");

		stmt.setInt(1, request.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return true;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2016 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview DAO Factory for file system based persistence
 */

var Role = require('scsh/pki-db/Role').Role;
var Subject = require('scsh/pki-db/Subject').Subject;


/**
 * Data access object for service requests
 *
 * @param {Object} the factory that created this DAO
 */
function RoleDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.RoleDAO = RoleDAO;


RoleDAO.createRole = [
"CREATE TABLE IF NOT EXISTS Role (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	name VARCHAR(100) NOT NULL," +
"	managingRoleId MEDIUMINT UNSIGNED REFERENCES Role(id)," +
"	requiresApproval SMALLINT NOT NULL DEFAULT 0," +
"	PRIMARY KEY (id)," +
"	UNIQUE (name)" +
");"
// ,"INSERT INTO Role (name) values ('God');"
];

RoleDAO.createAssignedRole =
"CREATE TABLE IF NOT EXISTS AssignedRole (" +
"	subjectId MEDIUMINT UNSIGNED NOT NULL REFERENCES Subject(id)," +
"	roleId MEDIUMINT UNSIGNED NOT NULL REFERENCES Role(id)," +
"	serviceRequestId MEDIUMINT UNSIGNED REFERENCES ServiceRequest(id)," +
"	PRIMARY KEY (subjectId, roleId)" +
");";

RoleDAO.dropRole = "DROP TABLE IF EXISTS Role;";
RoleDAO.dropAssignedRole = "DROP TABLE IF EXISTS AssignedRole;";

RoleDAO.update = "UPDATE Role SET name = 'TokenManager' where id = 7 AND name like 'Role7';"



/**
 * Create and persists a new role
 *
 * @param {String} name the name of the role
 * @param {Number} managingRoleId the id of the managing role (optional)
 * @type Role
 * @return the newly created role object
 */
RoleDAO.prototype.newRole = function(name, managingRoleId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newRole(" + name + ", " + managingRoleId + ")");

	assert(name, "Parameter name must not be empty");
	assert(typeof(name) == "string", "Parameter name must be a String");

	var role = new Role(this, name, managingRoleId);

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = this.factory.insertStatementFromObject(con, "Role", role);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		role.id = rs.getInt(1);

		if (!managingRoleId) {
			role.managingRoleId = role.id;

			stmt.close();

			stmt = con.prepareStatement("update Role set managingRoleId = ? where id = ?;");
			stmt.setInt(1, role.id);
			stmt.setInt(2, role.id);
			stmt.executeUpdate();
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}



	return role;
}



RoleDAO.ID_SystemAdmin = 1;
RoleDAO.ID_HSMAdmin = 2;
RoleDAO.ID_Auditor = 3;
RoleDAO.ID_SubscriberManager = 4;
RoleDAO.ID_Subscriber = 5;
RoleDAO.ID_RegistrationManager = 6;
RoleDAO.ID_TokenManager = 7;

RoleDAO.prototype.createPredefinedRoles = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "createPredefinedRoles()");

	if (this.getRoleById(1) != null) {
		return;
	}

	this.newRole("SystemAdmin");					// Id 1
	this.newRole("HSMAdmin");					// Id 2
	this.newRole("Auditor");					// Id 3
	this.newRole("SubscriberManager");				// Id 4
	this.newRole("Subscriber", RoleDAO.ID_SubscriberManager);	// Id 5
	this.newRole("RegistrationManager");				// Id 6
	this.newRole("TokenManager");				// Id 7
	for (var i = 8; i < 100; i++) {					// Id 8 to Id 99 reserved
		this.newRole("Role" + i);
	}
}



/**
 * Get the role object
 *
 * @param {String} name the role's name
 * @type Role
 * @return the role or null
 */
RoleDAO.prototype.getRole = function(name) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getRole(" + name + ")");

	assert(name, "Parameter name must not be empty");
	assert(typeof(name) == "string", "Parameter name must be a string");

	var con = null;
	var stmt = null;
	var rs = null;
	var role = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Role where name = ?;");
		stmt.setString(1, name);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "No role with name " + name + " found");
			return null;
		}

		role = new Role(this);
		this.factory.resultSetToProperties(rs, role);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return role;
}



/**
 * Get the role object
 *
 * @param {Number} id the role's id
 * @type Role
 * @return the role or null
 */
RoleDAO.prototype.getRoleById = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getRoleById(" + id + ")");

	assert(id, "Parameter id must not be empty");
	assert(typeof(id) == "number", "Parameter id must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var role = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Role where id = ?;");
		stmt.setInt(1, id);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "No role found for id " + id);
			return null;
		}

		role = new Role(this);
		this.factory.resultSetToProperties(rs, role);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return role;
}



/**
 * Create and persists a new relation which assignes a role to a subject
 *
 * @param {Number} subjectId the subject the role will be assigned to
 * @param {Number} roleId the role to be assigned
 */
RoleDAO.prototype.newAssignedRole = function(subjectId, roleId, serviceRequestId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newAssignedRole(" + subjectId + "," + roleId + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");
	assert(typeof(roleId) == "number", "Parameter roleId must be a number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		var obj = {
			subjectId: subjectId,
			roleId: roleId
		};
		if (serviceRequestId) {
			obj.serviceRequestId = serviceRequestId;
		}

		stmt = this.factory.insertStatementFromObject(con, "AssignedRole", obj);

		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Delete an assigned role
 *
 * @param {Number} subjectId the subject the role was assigned to
 * @param {Number} roleId the role to be removed
 */
RoleDAO.prototype.deleteAssignedRole = function(subjectId, roleId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newAssignedRole(" + subjectId + "," + roleId + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");
	assert(typeof(roleId) == "number", "Parameter roleId must be a number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		var sql = "DELETE FROM AssignedRole "
			+ "WHERE subjectId = ? AND roleId = ?"
		stmt = con.prepareStatement(sql);
		stmt.setInt(1, subjectId);
		stmt.setInt(2, roleId);

		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Get all roles that are managed by the given subject
 *
 * @param {Subject} subject the assigned subjet
 * @type Role[]
 * @return the list of roles
 */
RoleDAO.prototype.getManagedRoles = function(subjectId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getManagedRoles(" + subjectId + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var roles = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("SELECT id, name, managingRoleId FROM AssignedRole join Role on (roleId = managingRoleId) WHERE subjectId = ?");
		stmt.setInt(1, subjectId);
		rs = stmt.executeQuery();

		while (rs.next()) {
			var id = rs.getInt(1);
			var name = rs.getString(2);
			var managingRoleId = rs.getInt(3);
			var role = new Role(this, name, managingRoleId);
			role.id = id;
			if (role) {
				roles.push(role);
			}
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	if (roles.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "No role managed by subject " + subjectId);
	}
	return roles;
}



/**
 * Get all roles assigned to the given subject
 *
 * @param {Subject} subject the assigned subjet
 * @type Role[]
 * @return the list of roles
 */
RoleDAO.prototype.getAssignedRoles = function(subjectId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getAssignedRole(" + subjectId + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var roles = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select roleId, serviceRequestId from AssignedRole where subjectId= ?;");
		stmt.setInt(1, subjectId);

		rs = stmt.executeQuery();

		while (rs.next()) {
			var role = this.getRoleById(rs.getInt(1));
			if (role) {
				role.serviceRequestId = rs.getInt(2);
				roles.push(role);
			}
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	if (roles.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "No role assigned to subject " + subjectId);
	}
	return roles;
}



/**
 * Get all roles ids assigned to the given subject
 *
 * @param {Subject} subject the assigned subjet
 * @type Number[]
 * @return the list of roles ids
 */
RoleDAO.prototype.getAssignedRoleIds = function(subjectId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getAssignedRoleIds(" + subjectId + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var roles = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select roleId from AssignedRole where subjectId= ?;");
		stmt.setInt(1, subjectId);

		rs = stmt.executeQuery();

		while (rs.next()) {
			roles.push(rs.getInt(1));
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	if (roles.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "No role assigned to subject " + subjectId);
	}
	return roles;
}



/**
 * Get all subjects assigned to the given role
 *
 * @param {Role} role the assigned role
 * @type Subject[]
 * @return the list of assigned subjects
 */
RoleDAO.prototype.getAssignedSubject = function(roleId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getAssignedSubjects(" + roleId + ")");

	assert(typeof(roleId) == "number", "Parameter roleId must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var subjects = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select subjectId from AssignedRole where roleId= ?;");
		stmt.setInt(1, roleId);

		rs = stmt.executeQuery();
		var subjectDAO = this.factory.getSubjectDAO();

		while (rs.next()) {

			var subject = subjectDAO.getSubject(rs.getInt(1));
			if (subject) {
				subjects.push(subject);
			}
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	if (subjects.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "No subjects assigned to role " + role);
	}
	return subjects;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview DAO Factory for file system based persistence
 */

var ServiceRequest = require('scsh/pki-db/ServiceRequest').ServiceRequest;
var ServiceRequestState = require('scsh/pki-db/ServiceRequestState').ServiceRequestState;
var Subject = require('scsh/pki-db/Subject').Subject;



/**
 * Data access object for service requests
 *
 * @param {Object} the factory that created this DAO
 */
function ServiceRequestDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.ServiceRequestDAO = ServiceRequestDAO;



ServiceRequestDAO.create = [
"CREATE TABLE IF NOT EXISTS ServiceRequest (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	parentServiceRequestId MEDIUMINT UNSIGNED," +
"	process VARCHAR(250)," +
"	title VARCHAR(250)," +
"	details VARCHAR(250)," +
"	state VARCHAR(250)," +
"	lifecycle MEDIUMINT NOT NULL DEFAULT 1," +
"	originatorId MEDIUMINT UNSIGNED," +
"	recipientId MEDIUMINT UNSIGNED," +
"	messageId VARCHAR(250)," +
"	assignedToRole MEDIUMINT UNSIGNED REFERENCES Role(id)," +
"	created TIMESTAMP DEFAULT NOW()," +
"	due TIMESTAMP NULL," +
"	content LONGTEXT," +
"	PRIMARY KEY (id)," +
"	FOREIGN KEY (parentServiceRequestId) REFERENCES ServiceRequest(id)," +
"	FOREIGN KEY (originatorId) REFERENCES Subject(id)," +
"	FOREIGN KEY (recipientId) REFERENCES Subject(id)" +
")",
"CREATE TABLE IF NOT EXISTS ServiceRequestState (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	serviceRequestId MEDIUMINT UNSIGNED," +
"	lifecycle MEDIUMINT NOT NULL," +
"	state VARCHAR(250)," +
"	transitionTime TIMESTAMP DEFAULT NOW()," +
"	caseHandlerId MEDIUMINT UNSIGNED," +
"	caseHandlerRole MEDIUMINT UNSIGNED," +
"	content LONGTEXT," +
"	PRIMARY KEY (id)," +
"	FOREIGN KEY (serviceRequestId) REFERENCES ServiceRequest(id)," +
"	FOREIGN KEY (caseHandlerId) REFERENCES Subject(id)," +
"	CONSTRAINT FK_ServiceRequestState_Role FOREIGN KEY (caseHandlerRole) REFERENCES Role(id)" +
")"
];

ServiceRequestDAO.drop = [
"DROP TABLE IF EXISTS ServiceRequestState",
"DROP TABLE IF EXISTS ServiceRequest"
]

ServiceRequestDAO.alter = [
	"ALTER TABLE ServiceRequestState " +
	"ADD COLUMN IF NOT EXISTS caseHandlerRole MEDIUMINT UNSIGNED",

	{
		H2:
			"ALTER TABLE ServiceRequestState " +
			"ADD CONSTRAINT IF NOT EXISTS ServiceRequestState_fk FOREIGN KEY (caseHandlerRole) REFERENCES Role(id);",
		MySQL:
			"ALTER TABLE ServiceRequestState " +
			"ADD CONSTRAINT FK_ServiceRequestState_Role FOREIGN KEY IF NOT EXISTS (caseHandlerRole) REFERENCES Role(id)"
	}
]



ServiceRequestDAO.prototype.toString = function() {
	return "ServiceRequestDAO(db)";
}



/**
 * Create and persists a new service request
 *
 * @type ServiceRequest
 * @return the newly created service request object
 */
ServiceRequestDAO.prototype.newServiceRequest = function(template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newServiceRequest()");

	var sr = new ServiceRequest(this, template);

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = this.factory.insertStatementFromObject(con, "ServiceRequest", sr);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		sr.id = rs.getInt(1);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return sr;
}



/**
 * Get service request identified by id
 *
 * @param {Number} id the id
 * @type ServiceRequest
 * @return the service request or null if not found
 */
ServiceRequestDAO.prototype.getServiceRequestById = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getServiceRequestById(" + id + ")");

	assert(typeof(id) == "number", "Parameter id must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from ServiceRequest where id = ?");
		stmt.setInt(1, id);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "id " + id + " not found");
			return null;
		}
		var serviceRequest = new ServiceRequest(this);
		this.factory.resultSetToProperties(rs, serviceRequest);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return serviceRequest;
}



/**
 * Get service request identified by originator and messageId
 *
 * @param {String} originator the originator
 * @param {String} messageId the messageId
 * @type ServiceRequest
 * @return the service request or null if not found
 */
ServiceRequestDAO.prototype.getServiceRequestByOriginatorAndMessageId = function(originator, messageId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getServiceRequestById(" + originator + "," + messageId + ")");

	assert(typeof(originator) == "string", "Parameter originator must be a String");
	assert(typeof(messageId) == "string", "Parameter messageId must be a String");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from ServiceRequest where originator = ? and messageId = ?");
		stmt.setString(1, originator);
		stmt.setString(2, messageId);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "messageId " + messageId + " for " + originator + " not found");
			return null;
		}
		var serviceRequest = new ServiceRequest(this);
		this.factory.resultSetToProperties(rs, serviceRequest);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return serviceRequest;
}



/**
 * Get service requests for given originator
 *
 * @param {String} originator the originator
 * @param {Number} offset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type ServiceRequest[]
 * @return the list of service requests which may be empty
 */
ServiceRequestDAO.prototype.listServiceRequestsByOriginator = function(originator, offset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listServiceRequestsByOriginator(" + originator + "," + offset + "," + page + ")");

	assert(typeof(originator) == "string", "Parameter originator must be a String");
	assert(typeof(offset) == "undefined" || typeof(offset) == "number", "Parameter offset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var filter = { originator: originator };
	return this.listServiceRequestsByFilter(filter, offset, page);
}



/**
 * Get service requests for given recipient
 *
 * @param {String} recipient the recipient
 * @param {Number} offset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type ServiceRequest[]
 * @return the list of service requests which may be empty
 */
ServiceRequestDAO.prototype.listServiceRequestsByRecipient = function(recipient, offset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listServiceRequestsByRecipient(" + recipient + "," + offset + "," + page + ")");

	assert(typeof(recipient) == "string", "Parameter recipient must be a String");
	assert(typeof(offset) == "undefined" || typeof(offset) == "number", "Parameter offset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var filter = { recipient: recipient };
	return this.listServiceRequestsByFilter(filter, offset, page);
}



/**
 * Get list of service requests that match the given criteria
 *
 * @param {Object} filter the filter criteria object
 * @param {Number} offset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type ServiceRequest[]
 * @return the list of service requests which may be empty
 */
ServiceRequestDAO.prototype.listServiceRequestsByFilter = function(filter, offset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listServiceRequestsByFilter(" + filter + "," + offset + "," + page + ")");

	assert(typeof(filter) == "object", "Parameter filter must be an object");
	assert(typeof(offset) == "undefined" || typeof(offset) == "number", "Parameter offset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var stmt = this.factory.selectStatementFromFilter(con, "ServiceRequest", filter, null, offset, page);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var serviceRequest = new ServiceRequest(this);
			this.factory.resultSetToProperties(rs, serviceRequest);
			list.push(serviceRequest);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Get list of service requests that are related to the given service request
 *
 * @param {Number} id the service request id
 * @type ServiceRequest[]
 * @return the list of service requests which may be empty
 */
ServiceRequestDAO.prototype.listRelatedServiceRequests = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listRelatedServiceRequests(" + id + ")");

	assert(typeof(id) == "number", "Parameter id must be number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from ServiceRequest where parentServiceRequestId = ?;");

		stmt.setInt(1, id);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var serviceRequest = new ServiceRequest(this);
			this.factory.resultSetToProperties(rs, serviceRequest);
			list.push(serviceRequest);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Return all service request states for a given service request
 *
 * @param {Number} id the service request id
 * @type ServiceRequestState[]
 * @return the list of service request states that belongs to the service request id
 */
ServiceRequestDAO.prototype.listServiceRequestStates = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listServiceRequestStates(" + id + ")");
	var con = null;
	var stmt = null;
	var rs = null;
	var states = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from ServiceRequestState where serviceRequestId = ?");
		stmt.setInt(1, id);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var srState = new ServiceRequestState(this);
			this.factory.resultSetToProperties(rs, srState);
			states.push(srState);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	if (states.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "No ServiceRequestState found for serviceRequestId " + id);
	}

	return states;
}


/**
 * Count the service requests that match the given criteria
 *
 * @param {Object} filter the filter criteria object
 * @type Number
 * @return the number of service requests that match the given filter
 */
ServiceRequestDAO.prototype.countServiceRequestsByFilter = function(filter) {
	GPSystem.log(GPSystem.DEBUG, module.id, "countServiceRequestsByFilter(" + filter + ")");

	assert(typeof(filter) == "object", "Parameter filter must be an object");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var stmt = this.factory.selectStatementFromFilter(con, "ServiceRequest", filter, ["count(id)"]);

		rs = stmt.executeQuery();
		rs.next();
		var count = rs.getInt(1);

		GPSystem.log(GPSystem.DEBUG, module.id, "countServiceRequestsByFilter() returns " + count);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return count;
}



/**
 * Get list of service requests that match the given criteria and are assigned to a role the
 * subject holds.
 *
 * @param {Number} subjectId the subject id of the subject in question
 * @param {Object} filter the filter criteria object
 * @param {Number} offset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type ServiceRequest[]
 * @return the list of service requests which may be empty.
 */
ServiceRequestDAO.prototype.listServiceRequestsAssignedToSubjectsRoleByFilter = function(subjectId, filter, offset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listServiceRequestsAssignedToSubjectsRoleByFilter(" + subjectId + "," + filter + "," + offset + "," + page + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");
	assert(typeof(filter) == "object", "Parameter filter must be an object");
	assert(typeof(offset) == "undefined" || typeof(offset) == "number", "Parameter offset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var where = this.factory.whereClauseFromFilter(filter);

		if (where.length > 0) {
			where += " and";
		}

		where += " assignedToRole in (select roleId from AssignedRole where subjectId = ?)";
		if (page) {
			where += " limit ?,?";
		}
//		stmt = con.prepareStatement("select id,process,state,originatorId,recipientId,messageId,assignedToRole,created,due from ServiceRequest where " + where);

		GPSystem.log(GPSystem.DEBUG, module.id, "select * from ServiceRequest where " + where);
		stmt = con.prepareStatement("select * from ServiceRequest where " + where);

		var paramOffset = this.factory.setArgumentsFromFilter(stmt, 1, filter);
		stmt.setInt(paramOffset++, subjectId);
		if (page) {
			stmt.setInt(paramOffset++, offset);
			stmt.setInt(paramOffset, page);
		}

		rs = stmt.executeQuery();
		GPSystem.log(GPSystem.DEBUG, module.id, "sr list: " + list);
		while (rs.next()) {
			var serviceRequest = new ServiceRequest(this);
			this.factory.resultSetToProperties(rs, serviceRequest);
			list.push(serviceRequest);
			GPSystem.log(GPSystem.DEBUG, module.id, "add sr " + serviceRequest.id + " to list");
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	GPSystem.log(GPSystem.DEBUG, module.id, "sr list: " + list);
	return list;
}



/**
 * Get list of service requests that match the given criteria and where the subject was involved
 *
 * @param {Number} subjectId the subject id of the subject in question
 * @param {Object} filter the filter criteria object
 * @param {Number} offset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type ServiceRequest[]
 * @return the list of service requests which may be empty.
 */
ServiceRequestDAO.prototype.listServiceRequestsInvolvedBySubject = function(subjectId, filter, offset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listServiceRequestsInvolvedBySubject(" + subjectId + "," + filter + "," + offset + "," + page + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");
	assert(typeof(filter) == "object", "Parameter filter must be an object");
	assert(typeof(offset) == "undefined" || typeof(offset) == "number", "Parameter offset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var where = this.factory.whereClauseFromFilter(filter);

		if (where.length > 0) {
			where += " and";
		}

		where += " id in (select distinct serviceRequestId from ServiceRequestState where caseHandlerId = ?)";
		stmt = con.prepareStatement("select * from ServiceRequest where " + where);

		var offset = this.factory.setArgumentsFromFilter(stmt, 1, filter);
		stmt.setInt(offset, subjectId);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var serviceRequest = new ServiceRequest(this);
			this.factory.resultSetToProperties(rs, serviceRequest);
			list.push(serviceRequest);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Get list of service requests that match the given criteria and where one of the given roles was involved
 *
 * @param {Number[]} roles the list of role ids where at least one must be involved
 * @param {Object} filter the filter criteria object
 * @param {Number} pageOffset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type ServiceRequest[]
 * @return the list of service requests which may be empty.
 */
ServiceRequestDAO.prototype.listServiceRequestsInvolvedByRoles = function(roles, filter, pageOffset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listServiceRequestsInvolvedByRoles(" + roles + "," + filter + "," + pageOffset + "," + page + ")");

	assert(typeof(roles) == "object", "Parameter roles must be a object (list)");
	assert(roles instanceof Array, "Parameter roles must be a list");
	assert(typeof(filter) == "object", "Parameter filter must be an object");
	assert(typeof(pageOffset) == "undefined" || typeof(pageOffset) == "number", "Parameter pageOffset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];
	if (roles.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "The list of roles is empty");
		return list;
	}

	try	{
		con = this.factory.getConnection();

		var where = this.factory.whereClauseFromFilter(filter);

		if (where.length > 0) {
			where += " and";
		}

		where += " id in (select distinct serviceRequestId from ServiceRequestState where";
		for (var i = 1; i <= roles.length; i++) {
			where += " caseHandlerRole = ? OR";
		}
		where = where.substr(0, where.length - 3); // Remove " OR"
		where += ")";

		if (page) {
			where += " limit ?,?";
		}

		stmt = con.prepareStatement("select * from ServiceRequest where " + where);

		var offset = this.factory.setArgumentsFromFilter(stmt, 1, filter);
		for (var i = 0; i < roles.length; i++) {
			stmt.setInt(offset++, roles[i]);
		}

		if (page) {
			stmt.setInt(offset++, pageOffset);
			stmt.setInt(offset, page);
		}

		rs = stmt.executeQuery();
		while (rs.next()) {
			var serviceRequest = new ServiceRequest(this);
			this.factory.resultSetToProperties(rs, serviceRequest);
			list.push(serviceRequest);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Get list of service requests that match the given criteria and where the subject was involved
 *
 * @param {Number} subjectId the subject id of the subject in question
 * @param {Number[]} roles the list of role ids that might be involved or undefined
 * @param {Object} filter the filter criteria object
 * @param {Number} pageOffset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type ServiceRequest[]
 * @return the list of service requests which may be empty.
 */
ServiceRequestDAO.prototype.listServiceRequests = function(subjectId, roles, filter, pageOffset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listServiceRequests(" + subjectId + "," + pageOffset + "," + page + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");
	assert(typeof(roles) == "undefined" || roles instanceof Array, "Parameter roles must be a list");
	assert(typeof(filter) == "object", "Parameter filter must be an object");
	assert(typeof(pageOffset) == "undefined" || typeof(pageOffset) == "number", "Parameter pageOffset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var where = this.factory.whereClauseFromFilter(filter);

		if (where.length > 0) {
			where += " and";
		}

		// my service requests
		where += " (originatorId = ?";

		// assigned to me
		where += " or assignedToRole in (select roleId from AssignedRole where subjectId = ?) ";

		// involves me
		where += " or id in (select distinct serviceRequestId from ServiceRequestState where caseHandlerId = ?)";

		// involved by role
		if (roles && roles.length > 0) {
			where += "or id in (select distinct serviceRequestId from ServiceRequestState where";
			for (var i = 1; i <= roles.length; i++) {
				where += " caseHandlerRole = ? OR";
			}
			where = where.substr(0, where.length - 3); // Remove " OR"
			where += ")";
		}

		where += ")";

		if (page) {
			where += " limit ?,?";
		}

		stmt = con.prepareStatement("select * from ServiceRequest where " + where);

		var offset = this.factory.setArgumentsFromFilter(stmt, 1, filter);
		stmt.setInt(offset++, subjectId); // set originatorId
		stmt.setInt(offset++, subjectId); // set assigned roles to subjectId
		stmt.setInt(offset++, subjectId); // set caseHandlerId

		if (roles) {
			for (var i = 0; i < roles.length; i++) {
				stmt.setInt(offset++, roles[i]);
			}
		}

		if (page) {
			stmt.setInt(offset++, pageOffset);
			stmt.setInt(offset, page);
		}

		rs = stmt.executeQuery();
		while (rs.next()) {
			var serviceRequest = new ServiceRequest(this);
			this.factory.resultSetToProperties(rs, serviceRequest);
			list.push(serviceRequest);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Count the service requests that match the given criteria and where the subject was involved
 *
 * @param {Number} subjectId the subject id of the subject in question
 * @param {Object} filter the filter criteria object
 * @param {Number[]} roles the list of role ids that might be involved or undefined
 * @type {Number
 * @return the number of service requests that match the given criteria and where the subject was involved
 */
ServiceRequestDAO.prototype.countServiceRequests = function(subjectId, filter, roles) {
	GPSystem.log(GPSystem.DEBUG, module.id, "countServiceRequests(" + subjectId + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");
	assert(typeof(filter) == "object", "Parameter filter must be an object");
	assert(typeof(roles) == "undefined" || roles instanceof Array, "Parameter roles must be a list");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var where = this.factory.whereClauseFromFilter(filter);

		if (where.length > 0) {
			where += " and";
		}

		// my service requests
		where += " (originatorId = ?";

		// assigned to me
		where += " or assignedToRole in (select roleId from AssignedRole where subjectId = ?) ";

		// involves me
		where += " or id in (select distinct serviceRequestId from ServiceRequestState where caseHandlerId = ?)";

		// involved by role
		if (roles && roles.length > 0) {
			where += "or id in (select distinct serviceRequestId from ServiceRequestState where";
			for (var i = 1; i <= roles.length; i++) {
				where += " caseHandlerRole = ? OR";
			}
			where = where.substr(0, where.length - 3); // Remove " OR"
			where += ")";
		}

		where += ")"

		stmt = con.prepareStatement("select count(id) from ServiceRequest where " + where);

		var offset = this.factory.setArgumentsFromFilter(stmt, 1, filter);
		stmt.setInt(offset++, subjectId); // set originatorId
		stmt.setInt(offset++, subjectId); // set roles
		stmt.setInt(offset++, subjectId); // set caseHandlerId

		if (roles) {
			for (var i = 0; i < roles.length; i++) {
				stmt.setInt(offset++, roles[i]);
			}
		}

		rs = stmt.executeQuery();
		rs.next();
		var count = rs.getInt(1);
		GPSystem.log(GPSystem.DEBUG, module.id, "countServiceRequests() returns " + count);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return count;
}



/**
 * Count the service requests assigned to a role that the identified subject holds and that matches the given criteria
 *
 * @param {Number} subjectId the subject id of the subject in question
 * @param {Object} filter the filter criteria object
 * @type Number
 * @return the number of service requests that match the given filter
 */
ServiceRequestDAO.prototype.countServiceRequestsAssignedToSubjectsRoleByFilter = function(subjectId, filter) {
	GPSystem.log(GPSystem.DEBUG, module.id, "countServiceRequestsAssignedToSubjectsRoleByFilter(" + subjectId + "," + filter + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");
	assert(typeof(filter) == "object", "Parameter filter must be an object");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var where = this.factory.whereClauseFromFilter(filter);

		if (where.length > 0) {
			where += " and";
		}

		where += " assignedToRole in (select roleId from AssignedRole where subjectId = ?)";
		stmt = con.prepareStatement("select count(id) from ServiceRequest where " + where);

		var offset = this.factory.setArgumentsFromFilter(stmt, 1, filter);
		stmt.setInt(offset, subjectId);

		rs = stmt.executeQuery();
		rs.next();
		var count = rs.getInt(1);
		GPSystem.log(GPSystem.DEBUG, module.id, "countServiceRequestsAssignedToSubjectsRoleByFilter() returns " + count);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return count;
}



/**
 * Get a list of all processes
 *
 * @type String[]
 * @return the process list
 */
ServiceRequestDAO.prototype.getProcessList = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "getProcessList()");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select distinct process from ServiceRequest");

		rs = stmt.executeQuery();

		while (rs.next()) {
			list.push(rs.getString(1));
		}
	} finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Update the Service Request title
 *
 * @param {ServiceRequest} serviceRequest the serviceRequest to update
 * @param {String} title the new title
 */
ServiceRequestDAO.prototype.updateTitle = function(serviceRequest, title) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateTitle(" + serviceRequest + "," + title + ")");

	assert(serviceRequest, "Parameter serviceRequest must not be empty");
	assert(serviceRequest instanceof ServiceRequest, "Parameter must be instance of ServiceRequest");
	assert(typeof(title) == "string", "Parameter title must be a String");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update ServiceRequest set title = ? where id = ?;");

		stmt.setString(1, title);
		stmt.setInt(2, serviceRequest.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	serviceRequest.title = title;
}



/**
 * Update the Service Request details
 *
 * @param {ServiceRequest} serviceRequest the serviceRequest to update
 * @param {String} details the new details
 */
ServiceRequestDAO.prototype.updateDetails = function(serviceRequest, details) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateDetails(" + serviceRequest + "," + details + ")");

	assert(serviceRequest, "Parameter serviceRequest must not be empty");
	assert(serviceRequest instanceof ServiceRequest, "Parameter must be instance of ServiceRequest");
	assert(typeof(details) == "string", "Parameter details must be a String");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update ServiceRequest set details = ? where id = ?;");

		stmt.setString(1, details);
		stmt.setInt(2, serviceRequest.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	serviceRequest.details = details;
}



/**
 * Update the Service Request content
 *
 * @param {ServiceRequest} serviceRequest the serviceRequest to update
 * @param {String} content the new content
 */
ServiceRequestDAO.prototype.updateContent = function(serviceRequest, content) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateContent(" + serviceRequest + "," + content + ")");

	assert(serviceRequest, "Parameter serviceRequest must not be empty");
	assert(serviceRequest instanceof ServiceRequest, "Parameter must be instance of ServiceRequest");

	if (typeof(content) != "undefined") {
		assert(typeof(content) == "string", "Parameter val must be a String");
	} else {
		content = serviceRequest.serialize();
	}

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update ServiceRequest set content = ? where id = ?;");

		stmt.setString(1, content);
		stmt.setInt(2, serviceRequest.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	serviceRequest.content = content;
}



/**
 * Update the Service Request state, lifecycle and content
 *
 * @param {ServiceRequest} serviceRequest the serviceRequest to update
 * @param {Object} template to initialize caseHandlerId and content column in ServiceRequestState
 */
ServiceRequestDAO.prototype.addLifeCycleTransition = function(serviceRequest, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "addLifeCycleTransition(" + serviceRequest + "," + template + ")");

	assert(serviceRequest, "Parameter serviceRequest must not be empty");
	assert(serviceRequest instanceof ServiceRequest, "Parameter must be instance of ServiceRequest");

	assert(template, "Parameter template must not be empty");
	assert(typeof(template) == "object", "Parameter template must be a object");

	var content = serviceRequest.serialize();

	var srstate = new ServiceRequestState(this, template);

	srstate.serviceRequestId = serviceRequest.id;
	srstate.lifecycle = serviceRequest.lifecycle;
	srstate.state = serviceRequest.state;
	if (serviceRequest.assignedToRole) {
		srstate.caseHandlerRole = serviceRequest.assignedToRole;
	}

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();
		con.setAutoCommit(false);

		stmt = this.factory.insertStatementFromObject(con, "ServiceRequestState", srstate);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		srstate.id = rs.getInt(1);

		stmt = con.prepareStatement("update ServiceRequest set state = ?,lifecycle = ?, assignedToRole = ?, content = ? where id = ?;");

		stmt.setString(1, serviceRequest.state);
		stmt.setInt(2, serviceRequest.lifecycle);
		if (serviceRequest.assignedToRole) {
			stmt.setInt(3, serviceRequest.assignedToRole);
		} else {
			stmt.setNull(3, java.sql.Types.INTEGER);
		}
		stmt.setString(4, content);
		stmt.setInt(5, serviceRequest.id);
		stmt.executeUpdate();
		con.commit();
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.setAutoCommit(true);
			con.close();
		}
	}

	return srstate;
}



/**
 * Update the Service Request state and lifecycle
 *
 * @param {ServiceRequest} serviceRequest the serviceRequest to update
 */
ServiceRequestDAO.prototype.updateState = function(serviceRequest) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateState(" + serviceRequest + ")");

	assert(serviceRequest, "Parameter serviceRequest must not be empty");
	assert(serviceRequest instanceof ServiceRequest, "Parameter must be instance of ServiceRequest");

	var con = null;
	var stmt = null;

	try     {
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update ServiceRequest set state = ?,lifecycle = ? where id = ?;");

		stmt.setString(1, serviceRequest.state);
		stmt.setInt(2, serviceRequest.lifecycle);
		stmt.setInt(3, serviceRequest.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Update the Service Request originator id
 *
 * @param {ServiceRequest} serviceRequest the serviceRequest to update
 * @param {Subject} subject the originator
 */
ServiceRequestDAO.prototype.updateOriginatorId = function(serviceRequest, subject) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateOriginatorId(" + serviceRequest + "," + subject + ")");

	assert(serviceRequest, "Parameter serviceRequest must not be empty");
	assert(serviceRequest instanceof ServiceRequest, "Parameter must be instance of ServiceRequest");
	assert(subject, "Parameter subject must not be empty");
	assert(subject instanceof Subject, "Parameter must be instance of Subject");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update ServiceRequest set originatorId = ? where id = ?;");

		stmt.setInt(1, subject.id);
		stmt.setInt(2, serviceRequest.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	serviceRequest.originatorId = subject.id;
}



/**
 * Update the Service Request recipient id
 *
 * @param {ServiceRequest} serviceRequest the serviceRequest to update
 * @param {Subject} subject the recipient
 */
ServiceRequestDAO.prototype.updateRecipientId = function(serviceRequest, subject) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateRecipientId(" + serviceRequest + "," + subject + ")");

	assert(serviceRequest, "Parameter serviceRequest must not be empty");
	assert(serviceRequest instanceof ServiceRequest, "Parameter must be instance of ServiceRequest");
	assert(subject, "Parameter subject must not be empty");
	assert(subject instanceof Subject, "Parameter must be instance of Subject");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update ServiceRequest set recipientId = ? where id = ?;");

		stmt.setInt(1, subject.id);
		stmt.setInt(2, serviceRequest.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	serviceRequest.recipientId = subject.id;
}



/**
 * Delete Service Request
 *
 * @param {ServiceRequest} serviceRequest the serviceRequest to delete
 * @type boolean
 * @return true if deleted
 */
ServiceRequestDAO.prototype.deleteServiceRequest = function(serviceRequest) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteServiceRequest(" + serviceRequest + ")");

	assert(serviceRequest, "Parameter serviceRequest must not be empty");
	assert(serviceRequest instanceof ServiceRequest, "Parameter must be instance of ServiceRequest");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("delete from ServiceRequest where id = ?;");

		stmt.setInt(1, serviceRequest.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return true;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview SignerDAO
 */

var Holder = require('scsh/pki-db/Holder').Holder;
var Signer = require('scsh/pki-db/Signer').Signer;



/**
 * Data access object for signers
 *
 * @param {Object} the factory that created this DAO
 */
function SignerDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.SignerDAO = SignerDAO;



SignerDAO.create = [
"CREATE TABLE IF NOT EXISTS Signer (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	holderId MEDIUMINT UNSIGNED NOT NULL," +
"	name VARCHAR(100) NOT NULL," +
"	keyId VARBINARY(64)," +
"	keyDomain VARBINARY(32)," +
"	keyblob VARBINARY(4096)," +
"	content LONGTEXT," +
"	PRIMARY KEY (id)," +
"	UNIQUE (holderId, name)," +
"	FOREIGN KEY (holderId) REFERENCES Holder(id) ON DELETE CASCADE" +
")",
{	H2: "CREATE INDEX IF NOT EXISTS Signer_Idx1 ON Signer(keyId);",
	MySQL: {
		IsEmpty: "SHOW INDEX FROM Signer WHERE Key_name = 'Signer_Idx1';",
		Statement: "ALTER TABLE Signer ADD INDEX Signer_Idx1 (keyId);"
	}}
];

SignerDAO.drop = "DROP TABLE IF EXISTS Signer";



SignerDAO.prototype.toString = function() {
	return "ServiceRequestDAO(db)";
}



SignerDAO.prototype.toString = function() {
	return "SignerDAO(db)";
}



/**
 * Create and persists a new signer object
 *
 * @param {Holder} holder the holder of this signer
 * @param {String} name the name of the signer
 * @param {ByteString} keyId the key identifier
 * @type Signer
 * @return the newly created signer object
 */
SignerDAO.prototype.newSigner = function(holder, name, keyId, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newSigner(" + holder + "," + name + "," + keyId + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(name, "Parameter name must not be empty");
	assert(typeof(name) == "string", "Parameter name must be a String");
	assert(keyId, "Parameter name must not be empty");
	assert(keyId instanceof ByteString, "Parameter must be instance of ByteString");
	assert((typeof(template) == "undefined") || (template instanceof Object), "Parameter template be an object");

	var signer = new Signer(this, holder, name, keyId, template);

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = this.factory.insertStatementFromObject(con, "Signer", signer);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		signer.id = rs.getInt(1);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return signer;
}



/**
 * Get signer identified by id
 *
 * @param {Number} id the id
 * @type Signer
 * @return the signer object or null if not found
 */
SignerDAO.prototype.getSignerByID = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSigner(" + id + ")");

	assert(typeof(id) == "number", "Parameter id must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Signer where id = ?;");
		stmt.setInt(1, id);
		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "No matching signer found for ID " + id);
			return null;
		}
		var signer = new Signer(this);
		this.factory.resultSetToProperties(rs, signer);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return signer;
}



/**
 * Get signer identified by name
 *
 * @param {Holder} holder the holder of this signer
 * @param {String} name the name of the signer
 * @type Signer
 * @return the signer object or null if not found
 */
SignerDAO.prototype.getSignerByName = function(holder, name) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSigner(" + holder + "," + name + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(name, "Parameter name must not be empty");
	assert(typeof(name) == "string", "Parameter name must be a String");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Signer where name = ? and holderId = ?;");
		stmt.setString(1, name);
		stmt.setInt(2, holder.id);
		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "name " + name + " not found");
			return null;
		}
		var signer = new Signer(this, holder);
		this.factory.resultSetToProperties(rs, signer);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return signer;
}



/**
 * TODO The tuple (holderId,keyId) is not unique.
 * 		The result set may consists of more than one row.
 *
 * Get signer identified by key id
 *
 * @param {Holder} holder the holder of this signer
 * @param {ByteString} keyId the key identifier
 * @type Signer
 * @return the signer object or null if not found
 */
SignerDAO.prototype.getSignerByKeyId = function(holder, keyId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSigner(" + holder + "," + keyId + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(keyId, "Parameter keyId must not be empty");
	assert(keyId instanceof ByteString, "Parameter must be instance of ByteString");

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Signer where keyId = ? and holderId = ?;");
		stmt.setBytes(1, keyId);
		stmt.setInt(2, holder.id);
		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "KeyId " + keyId + " not found");
			return null;
		}
		var signer = new Signer(this, holder);
		this.factory.resultSetToProperties(rs, signer);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return signer;
}



/**
 * List all signer for the given holder id
 *
 * @param {ByteString} keyId the key identifier
 * @type Signer[]
 * @return list of signer
 */
SignerDAO.prototype.listSignerByHolderId = function(holderId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listSignerByHolderId( " + holderId + " )");

	assert(holderId, "Parameter holderId must not be empty");
	assert(typeof(holderId) == "number", "Parameter holderId must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Signer where holderId = ?;");
		stmt.setInt(1, holderId);
		rs = stmt.executeQuery();

		while (rs.next()) {
			var signer = new Signer(this);
			this.factory.resultSetToProperties(rs, signer);
			list.push(signer);
		}

		if (list.length == 0) {
			GPSystem.log(GPSystem.DEBUG, module.id, "holderId " + holderId + " not found");
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * List all signer for the given key id
 *
 * @param {ByteString} keyId the key identifier
 * @type Signer[]
 * @return list of signer
 */
SignerDAO.prototype.listSignerByKeyId = function(keyId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listSignerByKeyId( " + keyId + " )");

	assert(keyId, "Parameter name must not be empty");
	assert(keyId instanceof ByteString, "Parameter must be instance of ByteString");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Signer where keyId = ?;");
		stmt.setBytes(1, keyId);
		rs = stmt.executeQuery();

		while (rs.next()) {
			var signer = new Signer(this);
			this.factory.resultSetToProperties(rs, signer);
			list.push(signer);
		}

		if (list.length == 0) {
			GPSystem.log(GPSystem.DEBUG, module.id, "KeyId " + keyId + " not found");
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Update signer key
 *
 * @param {Signer} signer the signer for which the key shall be updated
 * @param {ByteString} keyblob the private key
 */
SignerDAO.prototype.updateSignerKey = function(signer, keyblob) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateSignerKey(" + signer + ")");

	assert(signer, "Parameter signer must not be empty");
	assert(signer instanceof Signer, "Parameter must be instance of Signer");

	assert(keyblob, "Parameter keyblob must not be empty");
	assert(keyblob instanceof ByteString, "Parameter must be instance of ByteString");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Signer set keyblob = ? where id = ?;");

		stmt.setBytes(1, keyblob);
		stmt.setInt(2, signer.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Delete signer
 *
 * @param {Signer} signer the signer to delete
 * @type boolean
 * @return true if deleted
 */
SignerDAO.prototype.deleteSigner = function(signer) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteSigner(" + signer + ")");

	assert(signer, "Parameter signer must not be empty");
	assert(signer instanceof Signer, "Parameter must be instance of Signer");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("delete from Signer where id = ?;");

		stmt.setInt(1, signer.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return true;
}



/**
 * Update the signer content
 *
 * @param {Signer} signer the signer to update
 * @param {String} content the new content
 */
SignerDAO.prototype.updateContent = function(signer) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateContent(" + signer + ")");

	assert(signer, "Parameter subject must not be empty");
	assert(signer instanceof Signer, "Parameter must be instance of Signer");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Signer set content = ? where id = ?;");

		stmt.setString(1, signer.serialize());
		stmt.setInt(2, signer.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2016 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview SubjectDAO for database objects
 */

var Subject = require('scsh/pki-db/Subject').Subject;
var Role = require('scsh/pki-db/Role').Role;



/**
 * Data access object for certificate subjects
 *
 * @param {Object} the factory that created this DAO
 */
function SubjectDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.SubjectDAO = SubjectDAO;



SubjectDAO.TYPE_PERSON = "Person";
SubjectDAO.TYPE_SYSTEM = "System";
SubjectDAO.TYPE_TRUST_CENTER = "TrustCenter";
SubjectDAO.TYPE_EST_Server = "ESTServer";
SubjectDAO.TYPE_GROUP_MANAGER = "GroupManager";
SubjectDAO.TYPE_CA = "CA";
SubjectDAO.TYPE_ROOT_CA = "X509RootCA";
SubjectDAO.TYPE_SCHEME_ROOT_CA = "SchemeRootCA";
SubjectDAO.TYPE_DEVICE_ISSUER = "DeviceIssuer";

SubjectDAO.LIFECYCLE_PRIVATE = 0;
SubjectDAO.LIFECYCLE_PUBLIC = 1;
SubjectDAO.LIFECYCLE_SUSPENDED = 2;
SubjectDAO.LIFECYCLE_TERMINATED = 3;



SubjectDAO.create =
"CREATE TABLE IF NOT EXISTS Subject (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	email VARCHAR(100)," +
"	name VARCHAR(100)," +
"	type VARCHAR(20)," +
"	assuranceLevel MEDIUMINT UNSIGNED NOT NULL DEFAULT 0," +
"	managedByRoleId MEDIUMINT UNSIGNED REFERENCES Role(id)," +
"	lifecycle MEDIUMINT UNSIGNED NOT NULL DEFAULT 0," +
"	serviceRequestId MEDIUMINT UNSIGNED," +
"	content LONGTEXT," +
"	PRIMARY KEY (id)," +
"	UNIQUE (email)," +
"	UNIQUE (type, name)" +
")";



SubjectDAO.addForeignKey = [
	{
		H2:
			"ALTER TABLE Subject " +
			"ADD CONSTRAINT IF NOT EXISTS Subject_FK FOREIGN KEY (serviceRequestId) " +
			"REFERENCES ServiceRequest(id);",
		MySQL:
			"ALTER TABLE Subject " +
			"ADD CONSTRAINT Subject_FK FOREIGN KEY IF NOT EXISTS (serviceRequestId) " +
			"REFERENCES ServiceRequest(id);"
	}
];



SubjectDAO.drop = "DROP TABLE IF EXISTS Subject";



SubjectDAO.dropForeignKey = [
	{
		H2:
			"ALTER TABLE Subject DROP CONSTRAINT IF EXISTS Subject_FK",
		MySQL:
			"ALTER TABLE Subject DROP FOREIGN KEY IF EXISTS Subject_FK"
	}
]


SubjectDAO.prototype.toString = function() {
	return "SubjectDAO(db)";
}



/**
 * Create and persists a new subject
 *
 * @type Subject
 * @return the newly created subject object
 */
SubjectDAO.prototype.newSubject = function(template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newSubject()");

	var subject = new Subject(this, template);

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = this.factory.insertStatementFromObject(con, "Subject", subject);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		subject.id = rs.getInt(1);
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return subject;
}



/**
 * Get the subject object
 *
 * @param {Number} id the subject id
 * @type Subject
 * @return the subject for the given id or null
 */
SubjectDAO.prototype.getSubject = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSubject(" + id + ")");

	assert(id, "Parameter id must not be empty");
	assert(typeof(id) == "number", "Parameter id must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;
	var subject = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Subject where id = ?;");
		stmt.setInt(1, id);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "id " + id + " not found");
			return null;
		}

		subject = new Subject(this);
		this.factory.resultSetToProperties(rs, subject);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return subject;
}



/**
 * Get the subject object
 *
 * @param {String} email the subject's e-mail address
 * @type Subject
 * @return the subject or null
 */
SubjectDAO.prototype.getSubjectByEmail = function(email) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSubject(" + email + ")");

	assert(email, "Parameter email must not be empty");
	assert(typeof(email) == "string", "Parameter email must be a string");

	var con = null;
	var stmt = null;
	var rs = null;
	var subject = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Subject where email = ?;");
		stmt.setString(1, email);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "e-mail address " + email + " not found");
			return null;
		}

		subject = new Subject(this);
		this.factory.resultSetToProperties(rs, subject);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return subject;
}



/**
 * Get the subject object
 *
 * @param {String} name the subject's name
 * @type Subject
 * @return the subject or null
 */
SubjectDAO.prototype.getSubjectByName = function(name) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSubjectByName(" + name + ")");

	assert(name, "Parameter name must not be empty");
	assert(typeof(name) == "string", "Parameter name must be a string");

	var con = null;
	var stmt = null;
	var rs = null;
	var subject = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Subject where name = ?;");
		stmt.setString(1, name);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "No subject found for name " + name);
			return null;
		}

		subject = new Subject(this);
		this.factory.resultSetToProperties(rs, subject);

		if (rs.next()) {
			GPSystem.log(GPSystem.WARN, module.id, "Multiple subjects found for name " + name);
			return null;
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return subject;
}



/**
 * Get subject object by type and name
 *
 * @param {String} type the subject's type
 * @param {String} name the subject's name
 * @type Subject
 * @return the subject or null
 */
SubjectDAO.prototype.getSubjectByTypeAndName = function(type, name) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSubjectByTypeAndName(" + type + "," + name + ")");

	assert(type, "Parameter type must not be empty");
	assert(typeof(type) == "string", "Parameter type must be a string");
	assert(name, "Parameter name must not be empty");
	assert(typeof(name) == "string", "Parameter name must be a string");

	var con = null;
	var stmt = null;
	var rs = null;
	var subject = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Subject where type = ? and name = ?;");
		stmt.setString(1, type);
		stmt.setString(2, name);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "No subject found for type " + type + " and name " + name);
			return null;
		}

		subject = new Subject(this);
		this.factory.resultSetToProperties(rs, subject);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return subject;
}



/**
 * Get a list of subjects that are managed by the given manager role
 *
 * @param {Role} role the manager role
 * @type Subject[]
 * @return the list of managed subjects
 */
SubjectDAO.prototype.getManagedSubjects = function(roleId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getManagedSubject(" + roleId + ")");

	assert(roleId, "Parameter id must not be empty");
	assert(typeof(roleId) == "number", "Parameter id must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;
	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Subject where managedByRoleId = ?;");
		stmt.setInt(1, roleId);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var subject = new Subject(this);
			this.factory.resultSetToProperties(rs, subject);
			list.push(subject);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * List all subjects that match the given filter
 *
 * @param {Object} filter the filter criteria object
 * @param {Number} offset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type Subject[]
 * @return list of subjects
 */
SubjectDAO.prototype.listManagedSubjectsByFilter = function(filter, offset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listManagedSubjectsByFilter(" + filter + "," + offset + "," + page + ")");

	assert(typeof(filter) == "object", "Parameter filter must be an object");
	assert(typeof(offset) == "undefined" || typeof(offset) == "number", "Parameter offset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

 		var query = "SELECT id, email, name, type, assuranceLevel, managedByRoleId, content "
 		+ "FROM Subject left join AssignedRole on (roleId = managedByRoleId)";

		var filstr = this.factory.whereClauseFromFilter(filter);
		if (filstr.length > 0) {
			query += " WHERE " + filstr;
		}

		if (page) {
			query += " LIMIT ?,?";
		}

		GPSystem.log(GPSystem.DEBUG, module.id, "query= " + query);

		stmt = con.prepareStatement(query);

		var c = this.factory.setArgumentsFromFilter(stmt, 1, filter, offset, page);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var subject = new Subject(this);
			this.factory.resultSetToProperties(rs, subject);
			list.push(subject);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Count the subjects that match the given criteria
 *
 * @param {Object} filter the filter criteria object
 * @type Number
 * @return the number of subjects that match the given filter
 */
SubjectDAO.prototype.countManagedSubjectsByFilter = function(filter) {
	GPSystem.log(GPSystem.DEBUG, module.id, "countManagedSubjectsByFilter(" + filter + ")");

	assert(typeof(filter) == "object", "Parameter filter must be an object");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var query = "SELECT count(1) "
		+ "FROM Subject left join AssignedRole on (roleId = managedByRoleId)"

		var filstr = this.factory.whereClauseFromFilter(filter);
		if (filstr.length > 0) {
			query += " WHERE " + filstr;
		}
		GPSystem.log(GPSystem.DEBUG, module.id, "query= " + query);

		stmt = con.prepareStatement(query);

		this.factory.setArgumentsFromFilter(stmt, 1, filter);

		rs = stmt.executeQuery();
		rs.next();
		var count = rs.getInt(1);

		GPSystem.log(GPSystem.DEBUG, module.id, "countManagedSubjectsByFilter() returns " + count);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return count;
}



/**
 * List all managed subjects that match the given filter
 *
 * @param {Object} filter the filter criteria object
 * @param {Number} offset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type Subject[]
 * @return list of subjects
 */
SubjectDAO.prototype.listManagedSubjects = function(subjectId, managedByRoleId, typeFilter, nameFilter, emailFilter, pageStart, pageEnd) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listManagedSubjects(" + subjectId + "," + managedByRoleId + "," + typeFilter + "," + nameFilter + "," + emailFilter + "," + pageStart + "," + pageEnd + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a Number");

	assert(typeof(managedByRoleId) == "undefined" || typeof(managedByRoleId) == "number", "Parameter managedByRoleId must be a Number");
	assert(typeof(typeFilter) == "undefined" || typeof(typeFilter) == "string", "Parameter typeFilter must be a string");
	assert(typeof(nameFilter) == "undefined" || typeof(nameFilter) == "string", "Parameter nameFilter must be a string");
	assert(typeof(emailFilter) == "undefined" || typeof(emailFilter) == "string", "Parameter emailFilter must be a string");
	assert(typeof(pageStart) == "undefined" || typeof(pageStart) == "number", "Parameter pageStart must be a Number");
	assert(typeof(pageEnd) == "undefined" || typeof(pageEnd) == "number", "Parameter pageEnd must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var query = "select * from Subject "
		+ "where (managedByRoleId  IN (" // managed subjects
		+ "select roleId "
		+ "from AssignedRole "
		+ "where subjectId = ?) "
		+ "or id = ? " // own subject
		+ "or lifecycle = 1"; // public subjects

		if (managedByRoleId) {
			query += " or managedByRoleId = ?";
		}

		query += ")";

		if (typeFilter) {
			query += " and lower(type) like ?";
		}

		if (nameFilter) {
			query += " and lower(name) like ?";
		}

		if (emailFilter) {
			query += " and lower(email) like ?";
		}

		if (pageEnd) {
			query += " LIMIT ?,?";
		}

		GPSystem.log(GPSystem.DEBUG, module.id, "query= " + query);

		stmt = con.prepareStatement(query);
		var i = 1;
		stmt.setInt(i++, subjectId);
		stmt.setInt(i++, subjectId);
		if (managedByRoleId) {
			stmt.setInt(i++, managedByRoleId);
		}
		if (typeFilter) {
			stmt.setString(i++, "%" + typeFilter.toLowerCase() + "%");
		}
		if (nameFilter) {
			stmt.setString(i++, "%" + nameFilter.toLowerCase() + "%");
		}
		if (emailFilter) {
			stmt.setString(i++, "%" + emailFilter.toLowerCase() + "%");
		}
		if (pageEnd) {
			stmt.setInt(i++, pageStart);
			stmt.setInt(i++, pageEnd);
		}

		rs = stmt.executeQuery();
		while (rs.next()) {
			var subject = new Subject(this);
			this.factory.resultSetToProperties(rs, subject);
			list.push(subject);
		}
		GPSystem.log(GPSystem.DEBUG, module.id, "list= " + list);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Count all managed subjects that match the given criteria
 *
 * @param {Object} filter the filter criteria object
 * @type Number
 * @return the number of subjects that match the given filter
 */
SubjectDAO.prototype.countManagedSubjects = function(subjectId, managedByRoleId, typeFilter, nameFilter, emailFilter) {
	GPSystem.log(GPSystem.DEBUG, module.id, "countManagedSubjects(" + subjectId + "," + managedByRoleId + "," + typeFilter + "," + nameFilter + "," + emailFilter + ")");

	assert(typeof(subjectId) == "number", "Parameter subjectId must be a Number");

	assert(typeof(managedByRoleId) == "undefined" || typeof(managedByRoleId) == "number", "Parameter managedByRoleId must be a Number");
	assert(typeof(typeFilter) == "undefined" || typeof(typeFilter) == "string", "Parameter typeFilter must be a string");
	assert(typeof(nameFilter) == "undefined" || typeof(nameFilter) == "string", "Parameter nameFilter must be a string");
	assert(typeof(emailFilter) == "undefined" || typeof(emailFilter) == "string", "Parameter emailFilter must be a string");

	var con = null;
	var stmt = null;
	var rs = null;

	var count = 0;

	try	{
		con = this.factory.getConnection();

		var query = "select count(1) from Subject "
		+ "where (managedByRoleId  IN (" // managed subjects
		+ "select roleId "
		+ "from AssignedRole "
		+ "where subjectId = ?) "
		+ "or id = ? " // own subject
		+ "or lifecycle = 1"; // public subjects

		if (managedByRoleId) {
			query += " or managedByRoleId = ?";
		}

		query += ")";

		if (typeFilter) {
			query += " and type like ?";
		}

		if (nameFilter) {
			query += " and name like ?";
		}

		if (emailFilter) {
			query += " and email like ?";
		}

		GPSystem.log(GPSystem.DEBUG, module.id, "query= " + query);

		stmt = con.prepareStatement(query);
		var i = 1;
		stmt.setInt(i++, subjectId);
		stmt.setInt(i++, subjectId);
		if (managedByRoleId) {
			stmt.setInt(i++, managedByRoleId);
		}
		if (typeFilter) {
			stmt.setString(i++, "%" + typeFilter + "%");
		}
		if (nameFilter) {
			stmt.setString(i++, "%" + nameFilter + "%");
		}
		if (emailFilter) {
			stmt.setString(i++, "%" + emailFilter + "%");
		}

		rs = stmt.executeQuery();
		if (rs.next()) {
			count = rs.getInt(1);
		}
		GPSystem.log(GPSystem.DEBUG, module.id, "count= " + count);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return count;
}



/**
 * List all subjects that match the given filter
 *
 * @param {Object} filter the filter criteria object
 * @param {Number} offset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type Subject[]
 * @return list of subjects
 */
SubjectDAO.prototype.listSubjectsByFilter = function(filter, offset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listSubjectsByFilter(" + filter + "," + offset + "," + page + ")");

	assert(typeof(filter) == "object", "Parameter filter must be an object");
	assert(typeof(offset) == "undefined" || typeof(offset) == "number", "Parameter offset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var stmt = this.factory.selectStatementFromFilter(con, "Subject", filter, null, offset, page);

		rs = stmt.executeQuery();
		while (rs.next()) {
			var subject = new Subject(this);
			this.factory.resultSetToProperties(rs, subject);
			list.push(subject);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return list;
}



/**
 * Count the subjects that match the given criteria
 *
 * @param {Object} filter the filter criteria object
 * @type Number
 * @return the number of subjects that match the given filter
 */
SubjectDAO.prototype.countSubjectsByFilter = function(filter) {
	GPSystem.log(GPSystem.DEBUG, module.id, "countSubjectsByFilter(" + filter + ")");

	assert(typeof(filter) == "object", "Parameter filter must be an object");

	var con = null;
	var stmt = null;
	var rs = null;

	var list = [];

	try	{
		con = this.factory.getConnection();

		var stmt = this.factory.selectStatementFromFilter(con, "Subject", filter, ["count(id)"]);

		rs = stmt.executeQuery();
		rs.next();
		var count = rs.getInt(1);

		GPSystem.log(GPSystem.DEBUG, module.id, "countSubjectsByFilter() returns " + count);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return count;
}



/**
 * List all subjects for the given type
 *
 * @param {String} type the subject type, e.g. SubjectDAO.TYPE_TRUST_CENTER
 * @type Subject[]
 * @return list of subjects
 */
SubjectDAO.prototype.listSubjectsByType = function(type) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listSubjectsByType(" + type + ")");
	assert(type, "Parameter type must not be empty");
	assert(typeof(type) == "string", "Parameter type must be a string");

	var con = null;
	var stmt = null;
	var rs = null;
	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Subject where type = ?;");
		stmt.setString(1, type);

		rs = stmt.executeQuery();

		while (rs.next()) {
			var subject = new Subject(this);
			this.factory.resultSetToProperties(rs, subject);
			list.push(subject);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	if (list.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "No subject found for type " + type);
	}
	return list;
}



/**
 * List all subject types
 *
 * @type String[]
 * @return list of subject types
 */
SubjectDAO.prototype.listSubjectTypes = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "listSubjectTypes()");

	var con = null;
	var stmt = null;
	var rs = null;
	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select distinct type from Subject;");

		rs = stmt.executeQuery();

		while (rs.next()) {
			list.push(rs.getString(1));
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	if (list.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Subjects table is empty");
	}
	return list;
}



/**
 * Update the subject's assurance level
 *
 * @param {Subject} subject the subject to update
 * @param {Number} assuranceLevel the assurance level
 */
SubjectDAO.prototype.updateAssuranceLevel = function(subject, assuranceLevel) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateAssuranceLevel(" + subject + "," + assuranceLevel + ")");

	assert(subject, "Parameter subject must not be empty");
	assert(subject instanceof Subject, "Parameter must be instance of Subject");
	assert(typeof(assuranceLevel) == "number", "Parameter assuranceLevel must be a Number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Subject set assuranceLevel = ? where id = ?;");

		stmt.setInt(1, assuranceLevel);
		stmt.setInt(2, subject.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	subject.assuranceLevel = assuranceLevel;
}



/**
 * Update the subject's e-mail address
 *
 * @param {Subject} subject the subject to update
 * @param {String} email the e-mail address
 */
SubjectDAO.prototype.updateEmail = function(subject, email) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateEmail(" + subject + "," + email + ")");

	assert(subject, "Parameter subject must not be empty");
	assert(subject instanceof Subject, "Parameter must be instance of Subject");
	assert(email, "Parameter email must not be empty");
	assert(typeof(email) == "string", "Parameter email must be a string");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Subject set email = ? where id = ?;");

		stmt.setString(1, email);
		stmt.setInt(2, subject.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	subject.email = email;
}



/**
 * Update the subject's type
 *
 * @param {Subject} subject the subject to update
 * @param {String} type the subject's type must be one of SubjectDAO.TYPE_*
 */
SubjectDAO.prototype.updateType = function(subject, type) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateType(" + subject + "," + type + ")");

	assert(subject, "Parameter subject must not be empty");
	assert(subject instanceof Subject, "Parameter must be instance of Subject");
	assert(type, "Parameter type must not be empty");
	assert(typeof(type) == "string", "Parameter type must be a string");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Subject set type = ? where id = ?;");

		stmt.setString(1, type);
		stmt.setInt(2, subject.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	subject.type = type;
}



/**
 * Update the Subject content
 *
 * @param {Subject} subject the subject to update
 * @param {String} content the new content
 */
SubjectDAO.prototype.updateContent = function(subject) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateContent(" + subject + ")");

	assert(subject, "Parameter subject must not be empty");
	assert(subject instanceof Subject, "Parameter must be instance of Subject");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Subject set content = ? where id = ?;");

		stmt.setString(1, subject.serialize());
		stmt.setInt(2, subject.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Update the Subject name
 *
 * @param {Subject} subject the subject to update
 * @param {String} name the new name
 */
SubjectDAO.prototype.updateName = function(subject, name) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateName(" + subject + "," + name + ")");

	assert(subject, "Parameter subject must not be empty");
	assert(subject instanceof Subject, "Parameter must be instance of Subject");
	assert(typeof(name) == "string", "Parameter name must be a String");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Subject set name = ? where id = ?;");

		stmt.setString(1, name);
		stmt.setInt(2, subject.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	//subject.name = subject;
	subject.name = name;
}



/**
 * Update the Subject's manager role
 *
 * @param {Subject} subject the subject to update
 * @param {Number} roleId the manager role id
 */
SubjectDAO.prototype.updateManagedByRoleId = function(subject, roleId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateManagedByRoleId(" + subject + "," + roleId + ")");

	assert(subject, "Parameter subject must not be empty");
	assert(subject instanceof Subject, "Parameter must be instance of Subject");
	assert(roleId, "Parameter roleId must not be empty");
	assert(typeof(roleId) == "number", "Parameter roleId must be a number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Subject set managedByRoleId = ? where id = ?;");

		stmt.setInt(1, roleId);
		stmt.setInt(2, subject.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	subject.managedByRoleId = roleId;
}



/**
 * Update the Subject's life-cycle
 *
 * @param {Subject} subject the subject to update
 * @param {Number} lifecycle the new life-cycle
 */
SubjectDAO.prototype.updateLifeCycle = function(subject, lifecycle) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateLifeCycle(" + subject + "," + lifecycle + ")");

	assert(subject, "Parameter subject must not be empty");
	assert(subject instanceof Subject, "Parameter must be instance of Subject");
	assert(typeof(lifecycle) == "number", "Parameter lifecycle must be a number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Subject set lifecycle = ? where id = ?;");

		stmt.setInt(1, lifecycle);
		stmt.setInt(2, subject.id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	subject.lifecycle = lifecycle;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview TokenDAO for database objects
 */

var Token			= require('scsh/pki-db/Token').Token;
var TokenAction		= require('scsh/pki-db/TokenAction').TokenAction;
var Subject			= require('scsh/pki-db/Subject').Subject;
var ServiceRequest 		= require('scsh/pki-db/ServiceRequest').ServiceRequest;


/**
 * Data access object for token
 *
 * @param {Object} the factory that created this DAO
 */
function TokenDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.TokenDAO = TokenDAO;


TokenDAO.create = [
"CREATE TABLE IF NOT EXISTS Token (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	path VARCHAR(100) NOT NULL," +
"	subjectId MEDIUMINT UNSIGNED," +
"	lastSeen TIMESTAMP DEFAULT NOW()," +
"	lastSeenAt VARCHAR(100)," +
"   online MEDIUMINT UNSIGNED DEFAULT 0,"+
"	serviceRequestId MEDIUMINT UNSIGNED," +
"	type INT UNSIGNED,"+
"	managedByRoleId MEDIUMINT UNSIGNED,"+
"	hardware VARCHAR(100),"+
"	certId MEDIUMINT UNSIGNED,"+
"	PRIMARY KEY (id)," +
"	unique (path), " +
"	CONSTRAINT FK_Token_Role FOREIGN KEY (managedByRoleId) REFERENCES Role(id)," +
"	CONSTRAINT FK_Token_Certificate FOREIGN KEY (certId) REFERENCES Certificate(id) ON DELETE SET NULL," +
"	FOREIGN KEY (serviceRequestId) REFERENCES ServiceRequest(id) ON DELETE SET NULL," +
"	FOREIGN KEY (subjectId) REFERENCES Subject(id) ON DELETE SET NULL" +
")",
"CREATE TABLE IF NOT EXISTS TokenAction (" +
"	id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT," +
"	tokenId MEDIUMINT UNSIGNED," +
"	serviceRequestId MEDIUMINT UNSIGNED," +
"	PRIMARY KEY (id)," +
"	FOREIGN KEY (tokenId) REFERENCES Token(id) ON DELETE CASCADE," +
"	FOREIGN KEY (serviceRequestId) REFERENCES ServiceRequest(id) ON DELETE CASCADE" +
")"
];


TokenDAO.drop = [
"DROP TABLE IF EXISTS TokenAction",
"DROP TABLE IF EXISTS Token"
];



TokenDAO.alter = [
	"ALTER TABLE Token " +
	"DROP COLUMN IF EXISTS keyDomain",

	"ALTER TABLE Token " +
	"ADD COLUMN IF NOT EXISTS type INT UNSIGNED",

	"ALTER TABLE Token " +
	"ADD COLUMN IF NOT EXISTS managedByRoleId MEDIUMINT UNSIGNED",

	"ALTER TABLE Token " +
	"ADD CONSTRAINT FK_Token_Role FOREIGN KEY IF NOT EXISTS (managedByRoleId) REFERENCES Role(id)",

	"ALTER TABLE Token " +
	"ADD COLUMN IF NOT EXISTS hardware VARCHAR(100)",

	"ALTER TABLE Token " +
	"ADD COLUMN IF NOT EXISTS certId MEDIUMINT UNSIGNED",

	"ALTER TABLE Token " +
	"ADD CONSTRAINT FK_Token_Certificate FOREIGN KEY IF NOT EXISTS (certId) REFERENCES Certificate(id) ON DELETE SET NULL",

	"ALTER TABLE Token " +
	"ADD COLUMN IF NOT EXISTS lastSeenAt VARCHAR(100)",

	"ALTER TABLE Token " +
	"ADD COLUMN IF NOT EXISTS online MEDIUMINT UNSIGNED DEFAULT 0"
]



TokenDAO.prototype.toString = function() {
	return "TokenDAO(db)";
}



/**
 * Create and persists a new token
 *
 * @param {String} tokenPath the path of this token
 * @param {Object} template the optional template
 * @type Token
 * @return the newly created token object
 */
TokenDAO.prototype.newToken = function(tokenPath, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newToken(" + tokenPath + ")");

	assert(tokenPath, "Parameter tokenPath must not be empty");
	assert(typeof(tokenPath) == "string", "Parameter tokenPath must be a String");

	var token = new Token(this, tokenPath, template);

	var con = null;
	var stmt = null;
	var rs = null;

	try	{
		con = this.factory.getConnection();

		stmt = this.factory.insertStatementFromObject(con, "Token", token);

		stmt.executeUpdate();
		rs = stmt.getGeneratedKeys();
		rs.next();
		token.id = rs.getInt(1);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return token;
}



/**
 * Delete token
 *
 * @param {String} path the token path
 * @type boolean
 * @return true if deleted
 */
TokenDAO.prototype.deleteToken = function(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteToken(" + path + ")");

	assert(path, "Parameter path must not be empty");
	assert(typeof(path) == "string", "Parameter path must be a String");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("delete from Token where path = ?;");

		stmt.setString(1, path);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
	return true;
}



/**
 * Get token for given id
 *
 * @param {Number} id the id of the token
 * @type Token
 * @return the token for the given id or null
 */
TokenDAO.prototype.getTokenById = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getTokenById(" + id + ")");

	assert(typeof(id) == "number", "Parameter id must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;
	var token = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Token where id = ?;");
		stmt.setInt(1, id);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "id " + id + " not found");
			return null;
		}

		token = new Token(this);
		this.factory.resultSetToProperties(rs, token);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return token;
}



/**
 * Get token for given path
 *
 * @param {String} path the path of the token
 * @type Token
 * @return the token for the given path or null
 */
TokenDAO.prototype.getToken = function(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getToken(" + path + ")");

	assert(path, "Parameter path must not be empty");
	assert(typeof(path) == "string", "Parameter path must be a String");

	var con = null;
	var stmt = null;
	var rs = null;
	var token = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Token where path = ?;");
		stmt.setString(1, path);

		rs = stmt.executeQuery();
		if (!rs.next()) {
			GPSystem.log(GPSystem.DEBUG, module.id, "path " + path + " not found");
			return null;
		}

		token = new Token(this);
		this.factory.resultSetToProperties(rs, token);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return token;
}



/**
 * Get all token which are registered for a given subject
 *
 * @param {Number} subjectId the subject id of the requested token
 * @type Token[]
 * @return the list of token for the given subject id
 */
TokenDAO.prototype.getTokenListBySubjectId = function(subjectId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getTokenListBySubjectId(" + subjectId + ")");

	assert(subjectId, "Parameter subjectId must not be empty");
	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var token = null;
	var list = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from Token where subjectId = ?;");
		stmt.setInt(1, subjectId);

		rs = stmt.executeQuery();

		while (rs.next()) {
			token = new Token(this);
			this.factory.resultSetToProperties(rs, token);
			list.push(token);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	if (list.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "No token found for subject id " + subjectId);
	}

	return list;
}



/**
 * Get a list of all token
 *
 * @param {Object} filter the filter criteria object
 * @param {Number} pageOffset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type Token[]
 * @return the list of token
 */
TokenDAO.prototype.getTokenList = function(filter, pageOffset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getTokenList()");

	assert(typeof(filter) == "object", "Parameter filter must be an object");
	assert(typeof(pageOffset) == "undefined" || typeof(pageOffset) == "number", "Parameter pageOffset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;
	var token = null;
	var list = [];

	try	{
		con = this.factory.getConnection();

		var sql = "select * from Token";

		var where = this.factory.whereClauseFromFilter(filter);
		if (where.length > 0) {
			sql += " where " + where;
		}

		if (page) {
			sql += " limit ?,?";
		}

		stmt = con.prepareStatement(sql);

		var offset = this.factory.setArgumentsFromFilter(stmt, 1, filter);

		if (page) {
			stmt.setInt(offset++, pageOffset);
			stmt.setInt(offset, page);
		}

		rs = stmt.executeQuery();

		while (rs.next()) {
			token = new Token(this);
			this.factory.resultSetToProperties(rs, token);
			list.push(token);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	if (list.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "The token table is empty");
	}

	return list;
}



/**
 * Count token
 *
 * @param {Object} filter the filter criteria object
 * @type Token[]
 * @return the list of token
 */
TokenDAO.prototype.countTokenList = function(filter) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getTokenListByManagedByRoleId()");

	assert(typeof(filter) == "object", "Parameter filter must be an object");

	var con = null;
	var stmt = null;
	var rs = null;
	var token = null;
	var list = [];

	try	{
		con = this.factory.getConnection();

		var sql = "select count(id) from Token";

		var where = this.factory.whereClauseFromFilter(filter);
		if (where.length > 0) {
			sql += " where " + where;
		}

		stmt = con.prepareStatement(sql);

		var offset = this.factory.setArgumentsFromFilter(stmt, 1, filter);

		rs = stmt.executeQuery();
		rs.next();
		var count = rs.getInt(1);
		GPSystem.log(GPSystem.DEBUG, module.id, "countTokenList() returns " + count);
		return count;
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	if (list.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "The token table is empty");
	}

	return list;
}



/**
 * Get all token that a managed by one of the given roles
 *
 * @param {Number[]} roles the list of role ids that might be involved or undefined
 * @param {Object} filter the filter criteria object
 * @param {Number} pageOffset the offset into the result set (optional)
 * @param {Number} page the maximum number of records (optional)
 * @type Token[]
 * @return the list of token
 */
TokenDAO.prototype.getTokenListByManagedByRoleId = function(roles, filter, pageOffset, page) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getTokenListByManagedByRoleId(" + roles + ")");

	assert(roles instanceof Array, "Parameter roles must be a list");
	assert(typeof(filter) == "object", "Parameter filter must be an object");
	assert(typeof(pageOffset) == "undefined" || typeof(pageOffset) == "number", "Parameter pageOffset must be a Number");
	assert(typeof(page) == "undefined" || typeof(page) == "number", "Parameter page must be a Number");

	var con = null;
	var stmt = null;
	var rs = null;
	var token = null;
	var list = [];

	if (roles.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "The list of roles is empty");
		return list;
	}

	try	{
		con = this.factory.getConnection();

		var where = this.factory.whereClauseFromFilter(filter);
		if (where.length > 0) {
			where += " or ";
		}

		var sql = "select * from Token where " + where;
		sql += "managedByRoleId in (";
		for (var i = 0; i < roles.length; i++) {
			if (i < roles.length -1) {
				sql += "?,"
			} else {
				sql += "?)"
			}
		}

		if (page) {
			sql += " limit ?,?";
		}

		stmt = con.prepareStatement(sql);

		var offset = this.factory.setArgumentsFromFilter(stmt, 1, filter);

		for (var i = 0; i < roles.length; i++) {
			stmt.setInt(offset++, roles[i]);
		}

		if (page) {
			stmt.setInt(offset++, pageOffset);
			stmt.setInt(offset, page);
		}

		rs = stmt.executeQuery();

		while (rs.next()) {
			token = new Token(this);
			this.factory.resultSetToProperties(rs, token);
			list.push(token);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	if (list.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "No token is managed by one of the roles: " + roles);
	}

	return list;
}



/**
 * Count token that a managed by one of the given roles
 *
 * @param {Number[]} roles the list of role ids that might be involved or undefined
 * @param {Object} filter the filter criteria object
 * @type Token[]
 * @return the list of token
 */
TokenDAO.prototype.countTokenByManagedByRoleId = function(roles, filter) {
	GPSystem.log(GPSystem.DEBUG, module.id, "countTokenByManagedByRoleId(" + roles + ")");

	assert(roles instanceof Array, "Parameter roles must be a list");
	assert(typeof(filter) == "object", "Parameter filter must be an object");

	var con = null;
	var stmt = null;
	var rs = null;
	var token = null;
	var list = [];

	if (roles.length == 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "The list of roles is empty");
		return list;
	}

	try	{
		con = this.factory.getConnection();

		var where = this.factory.whereClauseFromFilter(filter);
		if (where.length > 0) {
			where += " or ";
		}

		var sql = "select count(id) from Token where " + where;
		sql += "managedByRoleId in (";
		for (var i = 0; i < roles.length; i++) {
			if (i < roles.length -1) {
				sql += "?,"
			} else {
				sql += "?);"
			}
		}

		stmt = con.prepareStatement(sql);

		var offset = this.factory.setArgumentsFromFilter(stmt, 1, filter);

		for (var i = 0; i < roles.length; i++) {
			stmt.setInt(offset++, roles[i]);
		}

		rs = stmt.executeQuery();
		rs.next();
		var count = rs.getInt(1);
		GPSystem.log(GPSystem.DEBUG, module.id, "countTokenByManagedByRoleId() returns " + count);
		return count;
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Get the encoded token type
 *
 * @param {Number} type the token type - 01 for SC-HSM
 * @param {Number} platform the platform version
 * @param {Number} major the major version
 * @param {Number} minor the minor version
 * @type Number
 * @return the encoded type
 */
TokenDAO.prototype.encodeType= function(type, platform, major, minor) {
	var tokenType = type << 24;
	tokenType += platform << 16;
	tokenType += major << 8;
	tokenType += minor;
	GPSystem.log(GPSystem.DEBUG, module.id, "DB Token Type: " + tokenType.toString(HEX));
	GPSystem.log(GPSystem.DEBUG, module.id, "DB Token Type: " + tokenType);
	return tokenType;
}



/**
 * Update the token type, platform version, major version, minor version and last seen timestamp
 *
 * @param {String} path the path of this token
 * @param {Number} type the token type - 01 for SC-HSM
 * @param {Number} platform the platform version
 * @param {Number} major the major version
 * @param {Number} minor the minor version
 */
TokenDAO.prototype.updateTypeAndLastSeen= function(path, type, platform, major, minor) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateMetaData(" + path + ", " + type + ", " + platform + ", " + major + ", " + minor + ")");

	assert(path, "Parameter path must not be empty");
	assert(typeof(path) == "string", "Parameter path must be a String");

	assert(type, "Parameter type must not be empty");
	assert(typeof(type) == "number", "Parameter type must be a number");

	assert(typeof(platform) == "number", "Parameter platform must be a number");

	assert(typeof(major) == "number", "Parameter major must be a number");

	assert(typeof(minor) == "number", "Parameter minor must be a number");

	var con = null;
	var stmt = null;

	var tokenType = this.encodeType(type, platform, major, minor);

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Token set lastSeen = ?, type = ? where path = ?;");

		var ts = new java.sql.Timestamp(new Date());
		stmt.setTimestamp(1, ts);
		stmt.setInt(2, tokenType);
		stmt.setString(3, path);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Update the token's subject
 *
 * @param {Token} token the token
 * @param {Number} subjectId the new subject
 */
TokenDAO.prototype.updateSubjectId = function(token, subjectId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateSubjectId(" + token + "," + subjectId + ")");

	assert(token, "Parameter token must not be empty");
	assert(token instanceof Token, "Parameter must be instance of Token");
	assert(subjectId, "Parameter subjectId must not be empty");
	assert(typeof(subjectId) == "number", "Parameter subjectId must be a number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Token set subjectId = ? where path = ?;");

		stmt.setInt(1, subjectId);
		stmt.setString(2, token.path);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	token.subjectId = subjectId;
}



/**
 * Update the token's service request
 *
 * @param {Token} token the token
 * @param {Number} serviceRequestId the service request id
 */
TokenDAO.prototype.updateServiceRequestId = function(token, serviceRequestId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateServiceRequestId(" + token + "," + serviceRequestId+ ")");

	assert(token, "Parameter token must not be empty");
	assert(token instanceof Token, "Parameter must be instance of Token");
	assert(serviceRequestId, "Parameter serviceRequestId must not be empty");
	assert(typeof(serviceRequestId) == "number", "Parameter serviceRequestId must be a number");
	serviceRequestId

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Token set serviceRequestId = ? where path = ?;");

		stmt.setInt(1, serviceRequestId);
		stmt.setString(2, token.path);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	token.serviceRequestId = serviceRequestId;
}



/**
 * Set the token's subject id to null
 *
 * @param {Token} token the token
 */
TokenDAO.prototype.deregisterToken = function(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deregisterToken(" + path + ")");

	assert(path, "Parameter path must not be empty");
	assert(typeof(path) == "string", "Parameter path must be a String");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("update Token set subjectId = NULL, serviceRequestId = NULL where path = ?;");

		stmt.setString(1, path);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Add token action
 *
 * @param {Number} tokenId the token database id
 * @param {Number} serviceRequestId the database id of the service request handling this action
 */
TokenDAO.prototype.addTokenAction = function(tokenId, serviceRequestId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "addTokenAction(" + tokenId + "," + serviceRequestId + ")");

	assert(typeof(tokenId) == "number", "Parameter tokenId must be a number");
	assert(typeof(serviceRequestId) == "number", "Parameter serviceRequestId must be a number");

	var con = null;
	var stmt = null;
	var rs = null;

	var tokenAction = new TokenAction(this, tokenId, serviceRequestId);

	try	{
		con = this.factory.getConnection();

		stmt = this.factory.insertStatementFromObject(con, "TokenAction", tokenAction);

		stmt.executeUpdate();

		rs = stmt.getGeneratedKeys();
		rs.next();
		tokenAction.id = rs.getInt(1);
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return tokenAction;
}



/**
 * Enumerate pending service requests for token
 *
 * @param {Token} token the token
 */
TokenDAO.prototype.enumerateTokenAction = function(tokenId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "enumerateTokenAction(" + tokenId + ")");

	assert(typeof(tokenId) == "number", "Parameter tokenId must be a number");

	var con = null;
	var stmt = null;
	var rs = null;
	var result = [];

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("select * from TokenAction where tokenId = ? order by id;");
		stmt.setInt(1, tokenId);
		rs = stmt.executeQuery();
		while (rs.next()) {
			var action = new TokenAction(this);
			this.factory.resultSetToProperties(rs, action);
			result.push(action);
		}
	}
	finally {
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}

	return result;
}



/**
 * Remove token action
 *
 * @param {Number} id the token action id
 */
TokenDAO.prototype.removeTokenAction = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "removeTokenAction(" + id + ")");

	assert(typeof(id) == "number", "Parameter id must be a number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("delete from TokenAction where id = ?;");

		stmt.setInt(1, id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}



/**
 * Remove token action
 *
 * @param {Number} id the service request id
 */
TokenDAO.prototype.removeTokenActionForServiceRequest = function(id) {
	GPSystem.log(GPSystem.DEBUG, module.id, "removeTokenActionForServiceRequest(" + id + ")");

	assert(typeof(id) == "number", "Parameter id must be a number");

	var con = null;
	var stmt = null;

	try	{
		con = this.factory.getConnection();

		stmt = con.prepareStatement("delete from TokenAction where serviceRequestId = ?;");

		stmt.setInt(1, id);
		stmt.executeUpdate();
	}
	finally {
		if (stmt != null) {
			stmt.close();
		}
		if (con != null) {
			con.close();
		}
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview DAO Factory for file system based persistence
 */

var Certificate = require('scsh/pki-db/Certificate').Certificate;
var Holder = require('scsh/pki-db/Holder').Holder;



/**
 * Data access object for certificates
 *
 * @param {Object} the factory that created this DAO
 */
function CertificateDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.CertificateDAO = CertificateDAO;



CertificateDAO.prototype.toString = function() {
	return "CertificateDAO(fs)";
}



/**
 * Create and persists a new certificate object
 *
 * @param {Holder} holder the holder of this certificate
 * @param {String} serial the serial number of this certificate (full CHR for CVC and decimal serial for X.509)
 * @param {Number} dir one of Certificate.UP, Certificate.SHORT or Certificate.DOWN. See Certificate for explanation
 * @param {ByteString} certbin the binary presentation of the certificate
 * @type Certificate
 * @return the newly created certificate object
 */
CertificateDAO.prototype.newCertificate = function(holder, serial, dir, certbin, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newCertificate(" + holder + "," + serial + "," + dir + "," + certbin.bytes(0,10).toString(HEX) + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(serial, "Parameter serial must not be empty");
	assert(typeof(serial) == "string", "Parameter serial must be a String");
	assert(dir == Certificate.UP || dir == Certificate.SHORT || dir == Certificate.DOWN, "Parameter dir invalid");
	assert(certbin, "Parameter certbin must not be empty");
	assert(certbin instanceof ByteString, "Parameter must be instance of ByteString");
	assert((typeof(template) == "undefined") || (template instanceof Object), "Parameter template be an object");

	var fn = this.getFilename(holder, serial, dir);
	GPSystem.log(GPSystem.INFO, module.id, "Saving certificate to " + fn);
	this.factory.saveBinaryFile(fn, certbin);

	var c = new Certificate(this, holder, serial, dir, certbin, template);

	return c;
}



/**
 * @private
 */
CertificateDAO.prototype.getFilename = function(holder, serial, dir) {
	if ((holder.certificateType & 0xF) == Holder.CVC) {
		switch(dir) {
			case Certificate.UP:
				var fn = holder._path + "/" + serial + ".cvcert";
				break;
			case Certificate.SHORT:
				var fn = holder._path + "/" + serial + ".selfsigned.cvcert";
				break;
			case Certificate.DOWN:
				var fn = holder._path + "/" + serial + ".cross.cvcert";
				break;
			default:
				new GPError(module.id, GPError.INVALID_DATA, dir, "Invalid option in parameter dir");
		}
	} else {
		var fn = holder._path + "/" + serial + ".cer";
	}
	return fn;
}



/**
 * Get certificate identified by serial number for given holder
 *
 * @param {Holder} holder the holder of this certificate
 * @param {String} serial the serial number of this certificate (full CHR for CVC and decimal serial for X.509)
 * @param {Number} dir one of Certificate.UP, Certificate.SHORT or Certificate.DOWN. See Certificate for explanation
 * @type Certificate
 * @return the certificate object or null if not found
 */
CertificateDAO.prototype.getCertificateBySerial = function(holder, serial, dir) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCertificateBySerial(" + holder + "," + serial + "," + dir + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(serial, "Parameter serial must not be empty");
	assert(typeof(serial) == "string", "Parameter serial must be a String");
	assert(dir == Certificate.UP || dir == Certificate.SHORT || dir == Certificate.DOWN, "Parameter dir invalid");

	var fn = this.getFilename(holder, serial, dir);

	try	{
		var bin = this.factory.loadBinaryFile(fn);
	}
	catch(e) {
		if ((dir == Certificate.SHORT) || ((holder.certificateType & 0xF) == Holder.X509)) {
			GPSystem.log(GPSystem.DEBUG, module.id, "File " + fn + " not found");
			return null;
		}

		// Look if there is a selfsigned root
		var fn = holder._path + "/" + serial + ".selfsigned.cvcert";
		dir = Certificate.SHORT;

		try	{
			var bin = this.factory.loadBinaryFile(fn);
		}
		catch(e) {
			GPSystem.log(GPSystem.DEBUG, module.id, "File " + fn + " not found");
			return null;
		}
	}

	var c = new Certificate(this, holder, serial, dir, bin);

	if ((holder.certificateType & 0xF) == Holder.X509) {
		var x = new X509(bin);
		c.keyId = x.getSubjectKeyIdentifier();
	}

	return c;
}



/**
 * Get the current certificate in use by this holder
 *
 * @param {Holder} holder the holder of this certificate
 * @type Certificate
 * @return the certificate object or null if no current certificate
 */
CertificateDAO.prototype.getCurrentCertificate = function(holder) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCurrentCertificate(" + holder + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");

	default xml namespace = "";
	var cfg = this.factory.loadConfig(holder._path);
	if (cfg == null) {
		GPSystem.log(GPSystem.DEBUG, module.id, "getCurrentCertificate(" + holder + ") : null");
		return null;
	}

	var str = cfg.sequence.currentCHR.toString();
	if (!str) {
		return null;
	}

	return this.getCertificateBySerial(holder, str, Certificate.UP);
}



/**
 * Get all certificates issued to this holder
 *
 * @param {Holder} holder the holder of the certificates
 * @type Certificate[]
 * @return the list of certificates, which my be empty
 */
CertificateDAO.prototype.enumerateCertificates = function(holder) {
	GPSystem.log(GPSystem.DEBUG, module.id, "enumerateCertificates(" + holder + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");

	var list = this.factory.enumerateFiles(holder._path, /\.(cvcert|CVCERT)$/);
	var result = [];

	for (var i = 0; i < list.length; i++) {
		var str = list[i];
		var bin = this.factory.loadBinaryFile(holder._path + "/" + str);
		var dir = Certificate.UP;

		if (str.indexOf("selfsigned") > 0) {
			dir = Certificate.SHORT;
		} else if (str.indexOf("cross") > 0) {
			dir = Certificate.DOWN;
		}

		var serial = str.match(/(^.+?)\./)[1];
		var c = new Certificate(this, holder, serial, dir, bin);
		result.push(c);
	}
	return result;
}



/**
 * Delete certificate
 *
 * @param {Certificate} certificate the certificate to delete
 * @type boolean
 * @return true if deleted
 */
CertificateDAO.prototype.deleteCertificate = function(certificate) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteCertificate(" + certificate + ")");

	assert(certificate, "Parameter certificate must not be empty");
	assert(certificate instanceof Certificate, "Parameter must be instance of Certificate");

	var fn = this.getFilename(certificate._holder, certificate.serial, certificate.linkDir);
	return this.factory.deleteFile(fn);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview HolderDAO
 */

var Holder = require('scsh/pki-db/Holder').Holder;
var Certificate = require('scsh/pki-db/Certificate').Certificate;



/**
 * Data access object for certificate holders
 *
 * @param {Object} the factory that created this DAO
 */
function HolderDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.HolderDAO = HolderDAO;



HolderDAO.prototype.toString = function() {
	return "HolderDAO(fs)";
}



/**
 * Create and persists a new holder object
 *
 * @param {String} path the path in the PKI hierachie
 * @param {Number} certtype one of Holder.CVC or Holder.X509. See Holder for explanation
 * @type Holder
 * @return the newly created holder object
 */
HolderDAO.prototype.newHolder = function(path, certtype) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newHolder(" + path + "," + certtype + ")");

	assert(path, "Parameter path must not be empty");
	assert(typeof(path) == "string", "Parameter path must be a String");

	if (!certtype) {
		certtype = Holder.CVC;
	}

	assert(((certtype & 0xF) == Holder.CVC) || ((certtype & 0xF) == Holder.X509), "Parameter certtype invalid");

	var h = new Holder(this, path, certtype);
	this.updateConfig(h, "certificateType", certtype);
	return h;
}



/**
 * @private
 */
HolderDAO.prototype.updateConfig = function(holder, key, val) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateConfig(" + holder + "," + key + "," + val + ")");

	default xml namespace = "";
	var cfg = this.factory.loadConfig(holder._path);
	if (cfg == null) {
		GPSystem.log(GPSystem.DEBUG, module.id, "defaultConfig");
		cfg = this.factory.getDefaultConfig();
	}

	if (key) {
		cfg.sequence[key] = val;
	}

	this.factory.saveConfig(holder._path, cfg);
}



/**
 * Get holder for given PKI path
 *
 * @param {String} path the path in the PKI hierachie
 * @type Holder
 * @return the holder at the path
 */
HolderDAO.prototype.getHolder = function(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getHolder(" + path + ")");

	assert(path, "Parameter path must not be empty");
	assert(typeof(path) == "string", "Parameter path must be a String");

	default xml namespace = "";
	var cfg = this.factory.loadConfig(path);

	if (!cfg) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Holder not found");
		return null;
	}

	if (cfg.sequence.certificateType.toString().length > 0) {
		var certtype = parseInt(cfg.sequence.certificateType);
		GPSystem.log(GPSystem.DEBUG, module.id, "certtype=" + certtype);
	} else {
		certtype = Holder.CVC;
	}

	var signerNo = parseInt(cfg.sequence.current);
	GPSystem.log(GPSystem.DEBUG, module.id, "signerNo=" + signerNo);

	var h = new Holder(this, path);
	h.signerNo = signerNo;
	h.certificateType = certtype;
	return h;
}



/**
 * Get a list of holders under the PKI path.
 *
 * @param {String} path the path in the PKI hierachie, use "/" to obtain root holders.
 * @type String[]
 * @return the list of holder names at the path
 */
HolderDAO.prototype.getHolderList = function(path) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getHolderList(" + path + ")");

	assert(typeof(path) == "string", "Parameter path must be a String");

	var list = this.factory.enumerateFiles(path);
	return list;
}



/**
 * Update the signer number
 *
 * @param {Holder} holder the holder
 * @param {Number} val the new signer number
 */
HolderDAO.prototype.updateSignerNo = function(holder, val) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateSignerNo(" + holder + "," + val + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(typeof(val) == "number", "Parameter val must be a Number");

	this.updateConfig(holder, "current", val);
	holder.signerNo = val;
}



/**
 * Update the current certificate
 *
 * @param {Holder} holder the holder
 * @param {Number} val the new signer number
 */
HolderDAO.prototype.updateCurrentCertificate = function(holder, certificate) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateSignerNo(" + holder + "," + certificate + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(certificate, "Parameter certificate must not be empty");
	assert(certificate instanceof Certificate, "Parameter must be instance of Certificate");

	this.updateConfig(holder, "currentCHR", certificate.serial);
	holder.currentCertificate = certificate;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview RequestDAO
 */

var Holder = require('scsh/pki-db/Holder').Holder;
var Request = require('scsh/pki-db/Request').Request;



/**
 * Data access object for requests
 *
 * @param {Object} the factory that created this DAO
 */
function RequestDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.RequestDAO = RequestDAO;



RequestDAO.prototype.toString = function() {
	return "RequestDAO(db)";
}



RequestDAO.prototype.getFilename = function(holder, keyId) {
	if ((holder.certificateType & 0xF) == Holder.CVC) {
		return keyId.toString(ASCII) + ".cvreq";
	} else {
		return keyId.toString(HEX) + ".pkcs10";
	}
}



/**
 * Create and persists a new request object
 *
 * @param {Holder} holder the holder of this request
 * @param {ByteString} keyId the keyId of the request
 * @param {ByteString} encodedRequest the request
 * @param {Object} template with additional database fields
 * @type Request
 * @return the newly created request object
 */
RequestDAO.prototype.newRequest = function(holder, keyId, encodedRequest, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newRequest(" + holder + "," + keyId + "," + encodedRequest + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(keyId, "Parameter keyId must not be empty");
	assert(keyId instanceof ByteString, "Parameter must be instance of ByteString");
	assert(encodedRequest, "Parameter encodedRequest must not be empty");
	assert(encodedRequest instanceof ByteString, "Parameter must be instance of ByteString");
	assert((typeof(template) == "undefined") || (template instanceof Object), "Parameter template be an object");

	var r = new Request(this, holder, keyId, encodedRequest, template);

	var fn = holder._path + "/" + this.getFilename(holder, keyId);
	GPSystem.log(GPSystem.INFO, module.id, "Saving request to " + fn);
	this.factory.saveBinaryFile(fn, encodedRequest);

	return r;
}



/**
 * Get request identified by keyId
 *
 * @param {Holder} holder the holder of this request
 * @param {ByteString} keyId the keyId of the request
 * @type Request
 * @return the request object or null if not found
 */
RequestDAO.prototype.getRequestByKeyId = function(holder, keyId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getRequest(" + holder + "," + keyId + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(keyId, "Parameter keyId must not be empty");
	assert(keyId instanceof ByteString, "Parameter must be instance of ByteString");

	var r = new Request(this, holder, keyId);

	var fn = holder._path + "/" + this.getFilename(holder, keyId);
	var bin = this.factory.loadBinaryFile(fn);

	var r = new Request(this, holder, keyId, bin);

	return r;
}



/**
 * Delete request
 *
 * @param {Request} request the request to delete
 * @type boolean
 * @return true if deleted
 */
RequestDAO.prototype.deleteRequest = function(request) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteRequest(" + request + ")");

	assert(request, "Parameter request must not be empty");
	assert(request instanceof Request, "Parameter must be instance of Request");

	var fn = request._holder._path + "/" + this.getFilename(request._holder, request.keyId);
	return this.factory.deleteFile(fn);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview SignerDAO
 */

var Holder = require('scsh/pki-db/Holder').Holder;
var Signer = require('scsh/pki-db/Signer').Signer;



/**
 * Data access object for signers
 *
 * @param {Object} the factory that created this DAO
 */
function SignerDAO(factory) {
	GPSystem.log(GPSystem.DEBUG, module.id, "new()");

	this.factory = factory;
}

exports.SignerDAO = SignerDAO;



SignerDAO.prototype.toString = function() {
	return "SignerDAO(fs)";
}



/**
 * Create and persists a new signer object
 *
 * @param {Holder} holder the holder of this signer
 * @param {String} name the name of the signer
 * @param {ByteString} keyId the key identifier
 * @type Signer
 * @return the newly created signer object
 */
SignerDAO.prototype.newSigner = function(holder, name, keyId, template) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newSigner(" + holder + "," + name + "," + keyId + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(name, "Parameter name must not be empty");
	assert(typeof(name) == "string", "Parameter name must be a String");
	assert(keyId, "Parameter name must not be empty");
	assert(keyId instanceof ByteString, "Parameter must be instance of ByteString");
	assert((typeof(template) == "undefined") || (template instanceof Object), "Parameter template be an object");

	var s = new Signer(this, holder, name, keyId, template);

	if (s.keyblob) {
		this.updateSignerKey(s, s.keyblob);
	}
	return s;
}



SignerDAO.prototype.getFilename = function(holder, keyId) {
	if ((holder.certificateType & 0xF) == Holder.CVC) {
		return keyId.toString(ASCII) + ".pkcs8";
	} else {
		return keyId.toString(HEX) + ".pkcs8";
	}
}



/**
 * Get signer identified by name
 *
 * @param {Holder} holder the holder of this signer
 * @param {String} name the name of the signer
 * @type Signer
 * @return the signer object or null if not found
 */
SignerDAO.prototype.getSignerByName = function(holder, name) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSigner(" + holder + "," + name + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(name, "Parameter name must not be empty");
	assert(typeof(name) == "string", "Parameter name must be a String");

	var signer = new Signer(this, holder, name, new ByteString(name, ASCII));

	var fn = holder._path + "/" + name + ".pkcs8";

	try	{
		var bin = this.factory.loadBinaryFile(fn);
	}
	catch(e) {
		GPSystem.log(GPSystem.DEBUG, module.id, "File " + fn + " not found");
		return null;
	}

	signer.keyblob = bin;
	return signer;
}



/**
 * Get signer identified by key id
 *
 * @param {Holder} holder the holder of this signer
 * @param {ByteString} keyId the key identifier
 * @type Signer
 * @return the signer object or null if not found
 */
SignerDAO.prototype.getSignerByKeyId = function(holder, keyId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSigner(" + holder + "," + keyId + ")");

	assert(holder, "Parameter holder must not be empty");
	assert(holder instanceof Holder, "Parameter must be instance of Holder");
	assert(keyId, "Parameter name must not be empty");
	assert(keyId instanceof ByteString, "Parameter must be instance of ByteString");

	var signer = new Signer(this, holder, keyId.toString(ASCII), keyId);

	var fn = holder._path + "/" + this.getFilename(holder, keyId);

	try	{
		var bin = this.factory.loadBinaryFile(fn);
	}
	catch(e) {
		GPSystem.log(GPSystem.DEBUG, module.id, "File " + fn + " not found");
		return null;
	}

	signer.keyblob = bin;
	return signer;
}



/**
 * Update signer key
 *
 * @param {Signer} signer the signer for which the key shall be updated
 * @param {ByteString} keyblob the private key
 */
SignerDAO.prototype.updateSignerKey = function(signer, keyblob) {
	GPSystem.log(GPSystem.DEBUG, module.id, "updateSignerKey(" + signer + ")");

	assert(signer, "Parameter signer must not be empty");
	assert(signer instanceof Signer, "Parameter must be instance of Signer");

	assert(keyblob, "Parameter keyblob must not be empty");
	assert(keyblob instanceof ByteString, "Parameter must be instance of ByteString");

	var fn = signer._holder._path + "/" + this.getFilename(signer._holder, signer.keyId);
	GPSystem.log(GPSystem.INFO, module.id, "Saving private key to " + fn);
	this.factory.saveBinaryFile(fn, keyblob);
	this.keyblob = keyblob;
}



/**
 * Delete signer
 *
 * @param {Signer} signer the signer to delete
 * @type boolean
 * @return true if deleted
 */
SignerDAO.prototype.deleteSigner = function(signer) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteSigner(" + signer + ")");

	assert(signer, "Parameter signer must not be empty");
	assert(signer instanceof Signer, "Parameter must be instance of Signer");

	var fn = signer._holder._path + "/" + this.getFilename(signer._holder, signer.keyId);
	return this.factory.deleteFile(fn);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Remote Application Management over HTTP (RAMoverHTTP) client
 */

/**
 * Create a client instance for attaching a card to a server via the RAMOverHTTP procotol
 *
 * @Class Class implementing a RAMOverHTTP client
 * @constructor
 * @param {Card} card the card instance to attach
 * @param {String} url the URL to connect to
 * @param {String} session the session cookie
 */
function RAMClient(card, url, session) {
	this.card = card;
	this.url = url;
	this.session = session;
	this.httpCode = -1;
	this.apduCount = 0;
	this.aPDULimit = 100000;
	this.httpcount = 0;
	this.httplimit = 100000;
	this.forceFailSW = 0;
	this.returnAllSW = false;
}



exports.RAMClient = RAMClient;



/**
 * Prepend a 0, if the encoded integer is interpreted as negative value otherwise
 */
RAMClient.asSignedInteger = function(val) {
	var enc = ByteString.valueOf(val);
	if (enc.byteAt(0) >= 0x80) {
		enc = ByteString.valueOf(0).concat(enc);
	}
	return enc;
}



/**
 * @private
 */
RAMClient.prototype.encodeInitiation = function(atr) {
	var pit = new ASN1(0xE8, new ASN1(0xC0, atr));
	if (typeof(this.maxCAPDUSize) == "number") {
		pit.add(new ASN1(0xC1, RAMClient.asSignedInteger(this.maxCAPDUSize)));
	}
	if (typeof(this.maxRAPDUSize) == "number") {
		pit.add(new ASN1(0xC2, RAMClient.asSignedInteger(this.maxRAPDUSize)));
	}
	return pit.getBytes();
}



/**
 * Set a notification listener.
 *
 * The listener object must implement a notificationReceived() method that
 * receives the three parameter id, msg and ttc.
 *
 * @param {Object} the listener object implementing notificationReceived()
 */
RAMClient.prototype.setNotificationListener = function(notificationListener) {
	this.notificationListener = notificationListener;
}



/**
 * Set a limiting number of APDUs
 *
 * This is helpful for testing to intercept processing after a certain number
 * of APDUs (Default 100000).
 *
 * @param {Number} aPDULimit the maximum number of APDU processing in update()
 * @param {Number} forceFailSW the final SW1/SW2
 */
RAMClient.prototype.setAPDULimit = function(aPDULimit, forceFailSW) {
	this.aPDULimit = aPDULimit;
	this.forceFailSW = forceFailSW;
}



/**
 * Set a limiting number of HTTP roundtrips
 *
 * This is helpful for testing to intercept processing after a certain number
 * of HTTP roundtrips (Default 100000).
 *
 * @param {Number} aPDULimit the maximum number of APDU processing in update()
 * @param {Number} forceFailSW the final SW1/SW2
 */
RAMClient.prototype.setHTTPLimit = function(httplimit) {
	this.httplimit = httplimit;
}



/**
 * Set a maximum command and response APDU size
 *
 * @param {Number} maxCAPDUSize The maximum number of bytes in the command APDU
 * @param {Number} maxRAPDUSize The maximum number of bytes in the response APDU
 */
RAMClient.prototype.setMaxAPDUSize = function(maxCAPDUSize, maxRAPDUSize) {
	this.maxCAPDUSize = maxCAPDUSize;
	this.maxRAPDUSize = maxRAPDUSize;
}



/**
 * @private
 */
RAMClient.prototype.getURLConnection = function() {
	if (typeof(this.connectionFactory) != "undefined") {
		c = this.connectionFactory.getConnection(this.url, this.session);
	} else {
		var c = new URLConnection(this.url);
		if (typeof(this.session) != "undefined") {
//			print(typeof(this.session));
			c.addHeaderField("Cookie", this.session);
		}
	}
	c.addHeaderField("Content-Type", "application/org.openscdp-content-mgt-response;version=1.0");
	return c;
}



/**
 * @private
 */
RAMClient.prototype.initialConnect = function() {
	var c = this.getURLConnection();
	var atr = this.card.getATR();
	var b = this.encodeInitiation(atr.toByteString());
	var cst = c.postBinary(b);

	var cookie = c.getHeaderField("Set-Cookie");
	if (cookie) {
//		print(cookie);
		this.session = cookie[0];
	}

	this.httpCode = c.responseCode;
	return cst;
}



/**
 * @private
 */
RAMClient.prototype.next = function(rst) {
	var c = this.getURLConnection();
	var cst = c.postBinary(rst);

	this.httpCode = c.responseCode;
	return cst;
}



/**
 * @private
 */
RAMClient.prototype.processAPDU = function(capdu) {
	var rapdu = this.card.plainApdu(capdu);
	rapdu = rapdu.concat(ByteString.valueOf(this.card.SW, 2));
	this.apduCount++;

	if ((this.apduCount >= this.aPDULimit) && this.forceFailSW) {
		rapdu = ByteString.valueOf(this.forceFailSW, 2);
	}
	return new ASN1(0x23, rapdu);
}



/**
 * @private
 */
RAMClient.prototype.processReset = function() {
	var atr = this.card.reset(Card.RESET_COLD);
	if (atr instanceof Atr) {
		atr = atr.toByteString();
	}
	return new ASN1(0xC0, atr);
}



/**
 * @private
 */
RAMClient.prototype.processNotify = function(e) {
	if (this.notificationListener) {
		var id = e.get(0).value.toSigned();
		var str = e.get(1).value.toString(UTF8);
		var ttc = undefined;
		if (e.elements > 2) {
			ttc = e.get(0).value.toUnsigned();
		}
		this.notificationListener.notificationReceived(id, str, ttc);
	} else {
		print("Notify:");
		print(e);
	}
}



RAMClient.SW9000 = new ByteString("9000", HEX);

/**
 * @private
 */
RAMClient.prototype.process = function(cst) {
//	print(cst);
	var a = new ASN1(cst);
//	print(a);

	var rst = new ASN1(0xAB);

	var cnt = 0;
	var rsp;

	for (var i = 0; (i < a.elements); i++) {
		var e = a.get(i);
		switch(e.tag) {
			case 0x22:
				// Abort processing of APDU sequence if SW != 9000
				if (rsp && !rsp.value.right(2).equals(RAMClient.SW9000)) {
					print("Abort sequence");
					print(rsp);
					i = a.elements;
					break;
				}
				rsp = this.processAPDU(e.value);
				if (this.returnAllSW) {
					rst.add(rsp);
				}
				cnt++;
				break;
			case 0xC0:
				rst.add(this.processReset());
				break;
			case 0xE0:
				this.processNotify(e);
				break;
		}
	}

	if (rsp && !this.returnAllSW) {
		rst.add(rsp);
	}
	rst.add(new ASN1(0x80, RAMClient.asSignedInteger(cnt)));
//	print(rst);
//	print(rst.getBytes());
	return rst.getBytes();
}



/**
 * Close connection, e.g. after exception on the client side
 *
 * @param {Number} id the message id
 * @param {String} msg the closing message
 */
RAMClient.prototype.close = function(id, msg) {
	var c = this.getURLConnection();

	var rst = new ASN1(0xAB,
			new ASN1(0xE1,
				 new ASN1(ASN1.INTEGER, RAMClient.asSignedInteger(id)),
				 new ASN1(ASN1.UTF8String, new ByteString(msg, UTF8))
			    )
		      ).getBytes();

	var cst = this.next(rst);
	while (this.httpCode == 200) {
		var rst = this.process(cst);
		cst = this.next(rst);
	}
}



/**
 * Perform update operation
 */
RAMClient.prototype.update = function() {
	this.httpCode = -1;
	this.apduCount = 0;
	var cst = this.initialConnect();
	while ((this.httpCode == 200) && (this.httpcount < this.httplimit)) {
		this.httpcount++;
		var rst = this.process(cst);
		cst = this.next(rst);
	}
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2016 CardContact Systems GmbH
 * |'##> <##'|  32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Online-CA Connection
 */



/**
 * Creates a web service connector to access an online CA
 *
 * @class Class implementing a CA web service connector
 * @constructor
 * @param {String} url the web service endpoint
 */
function CAConnection(url) {
	this.url = url;
	this.soapcon = new SOAPConnection();
	this.verbose = true;
	this.lastReturnCode = null;
}

exports.CAConnection = CAConnection;


/**
 * Get the last return code
 *
 * @returns the last return code received or null if none defined
 * @type String
 */
CAConnection.prototype.getLastReturnCode = function() {
	return this.lastReturnCode;
}



/**
 * Gets the last request
 *
 * @returns the last request
 * @type XML
 */
CAConnection.prototype.getLastRequest = function() {
	return this.request;
}



/**
 * Gets the last response
 *
 * @returns the last response
 * @type XML
 */
CAConnection.prototype.getLastResponse = function() {
	return this.response;
}



/**
 * Close the connector and release allocated resources
 */
CAConnection.prototype.close = function() {
	this.soapcon.close();
}



/**
 * Request a certificate from the CA using a web service
 *
 * @param {ByteString} certreq the certificate request
 * @param {String} messageID the messageID for asynchronous requests (optional)
 * @param {String} responseURL the URL to which the asynchronous response is send (optional)
 * @returns the new certificates
 * @type ByteString[]
 */
CAConnection.prototype.requestCertificate = function(certreq, devicecert, commonName, eMailAddress, activationCode) {

	this.lastReturnCode = null;

	var soapConnection = new SOAPConnection();

	var ns = new Namespace("http://www.openscdp.org/CAService");

	var request =
		<ns:RequestCertificate xmlns:ns={ns}>
			<CertificateSigningRequest>{certreq.toString(BASE64)}</CertificateSigningRequest>
			<DeviceCertificate>{devicecert.toString(BASE64)}</DeviceCertificate>
			<CommonName>{commonName}</CommonName>
			<eMailAddress>{eMailAddress}</eMailAddress>
		</ns:RequestCertificate>

	if (activationCode) {
		request.eMailAddress += <ActivationCode>{activationCode}</ActivationCode>;
	}

	if (this.verbose) {
		GPSystem.trace(request.toXMLString());
	}

	this.request = request;

	try	{
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.trace(response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.trace("SOAP call to " + this.url + " failed : " + e);
		throw new GPError("CAConnection", GPError.DEVICE_ERROR, 0, "RequestCertificate failed with : " + e);
	}

	this.response = response;

	var certlist = [];

	this.lastReturnCode = response.ReturnCode.toString();

	if (this.lastReturnCode != "ok") {
		return null;
	}

	GPSystem.trace("Received certificates:");
	for each (var c in response.Certificates.Certificate) {
		var cert = new ByteString(c, BASE64);
		certlist.push(cert);
		GPSystem.trace(cert);
	}

	return certlist;
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2016 CardContact Systems GmbH
 * |'##> <##'|  Schuelerweg 38, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview SmartCard-HSM Crypto Provider
 */

var SmartCardHSM				= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;
var SmartCardHSMKeySpecGenerator		= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSMKeySpecGenerator;
var SmartCardHSMSymmetricKeySpecGenerator	= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSMSymmetricKeySpecGenerator;
var HSMKeyStore					= require('scsh/sc-hsm/HSMKeyStore').HSMKeyStore;



/**
 * Crypto Provider for accessing a SmartCard-HSM
 *
 * @param {SmartCardHSM} sc the associated SmartCard-HSM
 * @param {Number} slot the key domain slot. If undefined or -1 no key domain will be set
 */
function CryptoProvider(sc, id, slot) {
	this.id = id;
	this.slot = slot; // the key domain slot
	this.setSmartCardHSM(sc);
	this.deleteIfExists = false;
}

exports.CryptoProvider = CryptoProvider;



/**
 * Replace SmartCard-HSM
 *
 * @param {SmartCardHSM} sc the new SmartCard-HSM
 */
CryptoProvider.prototype.setSmartCardHSM = function(sc) {
	this.sc = sc;
	this.ks = new HSMKeyStore(sc);
}



/**
 * Release this crypto provider
 *
 * The release() method shall be called if the provider is not used anymore
 * Place the release in the finally statement of a try/catch block
 */
CryptoProvider.prototype.release = function() {
}



/**
 * Get crypto object
 *
 * This method is part of the API.
 *
 * @type HSMCrypto
 * @return the HSMCrypto object
 */
CryptoProvider.prototype.getCrypto = function() {
	if (this.sc) {
		return this.sc.getCrypto();
	}
	return new Crypto();
}



/**
 * Get a handle for a private key stored on the SmartCard-HSM
 *
 * @param {String} label the label of the private key
 * @param {ByteString} blob the optional key blob
 * @returns the private key
 * @type Key
 */
CryptoProvider.prototype.getPrivateKeyByLabel = function(label, blob) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getPrivateKeyByLabel(" + label + ")");
	var key = this.ks.getKey(label);
	GPSystem.log(GPSystem.DEBUG, module.id, "key " + key);
	return key;
}



/**
 * Get a handle for a private key stored on the SmartCard-HSM
 *
 * @param {String} label the label of the private key
 * @param {ByteString} blob the optional key blob
 * @returns the private key
 * @type Key
 */
CryptoProvider.prototype.getPrivateKeyByKeyId = function(keyid, blob) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getPrivateKeyByKeyId(" + keyid + ")");
	var key = this.ks.getKey(keyid);
	GPSystem.log(GPSystem.DEBUG, module.id, "key " + key);
	return key;
}



/**
 * Generate a key pair under the given label with the key characteristics defined in keyspec
 *
 * @param {String} label the label for this key
 * @param {Key} the key specification
 * @return an object containing the private key as property prk and the public key as property puk
 * @type Object
 */
CryptoProvider.prototype.generateKeyPair = function(label, keyspec) {
	GPSystem.log(GPSystem.DEBUG, module.id, "generateKeyPair(" + label + ")");

	if (this.ks.hasKey(label)) {
		if (this.deleteIfExists) {
			this.ks.deleteKey(label);
		} else {
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "A key with label " + label + " does already exist");
		}
	}

	if (typeof(keyspec.getComponent(Key.ECC_P)) != "undefined") {
		var kg = new SmartCardHSMKeySpecGenerator(Crypto.EC, keyspec);
	} else {
		var kg = new SmartCardHSMKeySpecGenerator(Crypto.RSA, keyspec.getSize());
	}

	if (this.slot >= 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "set key domain to " + this.slot);
		kg.setKeyDomain(this.slot);
	}

	var req = this.ks.generateKeyPair(label, kg);
	this.ks.storeEndEntityCertificate(label, req);

	var puk = req.getPublicKey();
	var prk = this.ks.getKey(label);
	return { prk: prk, puk: puk, req: req.getBytes() };
}



/**
 * Delete private key
 *
 * @param {String} label the key label
 */
CryptoProvider.prototype.deletePrivateKey = function(label) {
	this.ks.deleteKey(label);
}



/**
 * Generate a symmetric key under the given label
 *
 * @param {String} label the label for this key
 * @param {Number} keySize either 128, 192 or 256
 * @param {ByteString} allowedAlgorithms the optional list of allowed algorithms (0x10 for encryption, 0x11 for decryption, 0x18 for CMAC). By default all algorithms are allowed.
 * @param {String} wrappingKeyLabel the label of the optional wrapping key
 * @return the new key wrapped with the wrapping key
 * @type ByteString
 */
CryptoProvider.prototype.generateKey = function(label, keySize, allowedAlgorithms, wrappingKeyLabel) {
	GPSystem.log(GPSystem.DEBUG, module.id, "generateKey(" + label + ", " + keySize + ")");

	if (this.ks.hasKey(label)) {
		if (this.deleteIfExists) {
			this.ks.deleteKey(label);
		} else {
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "A key with label " + label + " does already exist");
		}
	}

	if (!allowedAlgorithms) {
		var allowedAlgorithms = new ByteString("101118", HEX);
	}

	var kg = new SmartCardHSMKeySpecGenerator(Crypto.AES, keySize);
	kg.setAlgorithms(allowedAlgorithms);

	if (wrappingKeyLabel) {
		if (!this.ks.hasKey(wrappingKeyLabel)) {
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "A key with label " + wrappingKeyLabel + " does already exist");
		}
		var wrappingKey = this.ks.getKey(wrappingKeyLabel);
		kg.wrappingKey = wrappingKey.getId();
	}

	if (this.slot >= 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "set key domain to " + this.slot);
		kg.setKeyDomain(this.slot);
	}

	var wrapbin = this.ks.generateKey(label, kg);
	return wrapbin;
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview DKEK key wrapper
 */



/**
 * Class supporting DKEK functions outside the SmartCard-HSM
 *
 * @constructor
 * @param {Crypto} crypto the crypto provider
 */
function DKEK(crypto) {
	this.crypto = crypto;
	this.dkek = new ByteString("0000000000000000000000000000000000000000000000000000000000000000", HEX);
}

exports.DKEK = DKEK;



/**
 * Import a DKEK share
 *
 * @param {ByteString} share a 32 byte share
 */
DKEK.prototype.importDKEKShare = function(share) {
	assert(share instanceof ByteString, "Share must be of type ByteString");
	assert(share.length == 32, "Share must be 32 byte long");
	var ndkek = this.dkek.xor(share);
	this.dkek.clear();
	this.dkek = ndkek;
}



/**
 * Zeroize DKEK
 *
 */
DKEK.prototype.clear = function() {
	this.dkek.clear();
}



/**
 * Return the Key Check Value (KCV) of the internal DKEK
 *
 * @type ByteString
 * @return the KCV
 */
DKEK.prototype.getKCV = function() {
	return this.crypto.digest(Crypto.SHA_256, this.dkek).left(8);
}



/**
 * Derive the encryption key from the DKEK
 *
 * @type ByteString
 * @return the encryption key
 */
DKEK.prototype.getKENC = function() {
	var kencval = this.crypto.digest(Crypto.SHA_256, this.dkek.concat(new ByteString("00000001", HEX)));
	var kenc = new Key();
	kenc.setComponent(Key.AES, kencval);
	return kenc;
}



/**
 * Derive the message authentication key from the DKEK
 *
 * @type ByteString
 * @return the message authentication key
 */
DKEK.prototype.getKMAC = function() {
	var kmacval = this.crypto.digest(Crypto.SHA_256, this.dkek.concat(new ByteString("00000002", HEX)));
	var kmac = new Key();
	kmac.setComponent(Key.AES, kmacval);
	return kmac;
}



/**
 * Derive DKEK share encryption key from password
 *
 * @param {ByteString} password the password
 * @type ByteString
 * @return the derived key (32 Byte) concatenated with the IV (16 Byte)
 */
DKEK.deriveDKEKShareKey = function(salt, password) {
	var crypto = new Crypto();

	var d = new ByteString("", HEX);
	var keyivbuff = new ByteBuffer(48);

	for (j = 0; j < 3; j++) {
		print("Derive DKEK share encryption key (Step " + (j + 1) + " of 3)...");
		var nd = d.concat(password);
		d.clear();
		d = nd;

		var nd = d.concat(salt);
		d.clear();
		d = nd;

		try	{
			// Try the fast hash available in scdp4j 3.8
			var h = crypto.digest(Crypto.MD5, d, 10000000);
			d.clear();
			d = h;
		}
		catch(e) {
			// Fallback to slow variant
			for (var i = 10000000; i > 0; i--) {
				d = crypto.digest(Crypto.MD5, d);
			}
		}
		keyivbuff.append(d);
	}

	var keyiv = keyivbuff.toByteString();
	keyivbuff.clear();
	return keyiv;
}



/**
 * Encrypt a DKEK share
 *
 * @param {ByteString} keyshare the key share
 * @param {ByteString} password the password
 * @type ByteString
 * @return Encrypted DKEK share value
 */
DKEK.encryptKeyShare = function(keyshare, password) {
	assert(keyshare instanceof ByteString, "Argument keyshare must be ByteString");
	assert(keyshare.length == 32, "Argument keyshare must be 32 bytes");
	assert(password instanceof ByteString, "Argument password must be ByteString");

	var crypto = new Crypto();
	var salt = crypto.generateRandom(8);

	var keyiv = DKEK.deriveDKEKShareKey(salt, password);

	var k = new Key();
	k.setComponent(Key.AES, keyiv.bytes(0, 32));
	var iv = keyiv.bytes(32, 16);
	keyiv.clear();

	var plain = keyshare.concat(new ByteString("10101010101010101010101010101010", HEX));
	var cipher = crypto.encrypt(k, Crypto.AES_CBC, plain, iv);
	plain.clear();
	k.getComponent(Key.AES).clear();

	var blob = (new ByteString("Salted__", ASCII)).concat(salt).concat(cipher);
	return blob;
}



/**
 * Decrypt a DKEK share
 *
 * @param {ByteString} keyshare the encrypted key share as read from the .pbe file
 * @param {ByteString} password the password
 * @type ByteString
 * @return plain DKEK value
 */
DKEK.decryptKeyShare = function(keyshare, password) {
	assert(password instanceof ByteString, "Argument password must be ByteString");
	if ((keyshare.length != 64) || !keyshare.bytes(0, 8).toString(ASCII).equals("Salted__")) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Does not seem to be an encrypted key share");
	}

	var crypto = new Crypto();
	var salt = keyshare.bytes(8, 8);

	var keyiv = DKEK.deriveDKEKShareKey(salt, password);

	var k = new Key();
	k.setComponent(Key.AES, keyiv.bytes(0, 32));
	var iv = keyiv.bytes(32, 16);
	keyiv.clear();

	var plain = crypto.decrypt(k, Crypto.AES_CBC, keyshare.bytes(16), iv);
	k.getComponent(Key.AES).clear();

	if (!(new ByteString("10101010101010101010101010101010", HEX)).equals(plain.right(16))) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Decryption of DKEK failed. Wrong password ?");
	}

	var val = plain.left(32);
	plain.clear();

	return val;
}



/**
 * Test DKEK share encryption / decryption
 *
 * @private
 */
DKEK.testDKEK = function() {
	var crypto = new Crypto();
	var dkek = crypto.generateRandom(32);
	var password = new ByteString("Password", ASCII);
	var enc = DKEK.encryptKeyShare(dkek, password);
	print(enc);
	var plain = DKEK.decryptKeyShare(enc, password);
	assert(dkek.equals(plain), "Reference does not match");
}



/**
 * Wrap AES key
 *
 * @param {Key} key the secret key
 * @type ByteString
 * @return the secret key wrapped with the DKEK
 */
DKEK.prototype.encodeAESKey = function(key) {
	var bb = new ByteBuffer();
	bb.append(this.getKCV());

	assert(key.getType() == Key.SECRET)

	bb.append(15);

	var daid = new ByteString("2.16.840.1.101.3.4.1", OID);
	bb.append(ByteString.valueOf(daid.length, 2));
	bb.append(daid);

	var aaid = new ByteString("10 11 18 99", HEX);
	bb.append(ByteString.valueOf(aaid.length, 2));
	bb.append(aaid);

	bb.append(ByteString.valueOf(0, 2));
	bb.append(ByteString.valueOf(0, 2));

	var kb = new ByteBuffer(256);
	kb.append(this.crypto.generateRandom(8));

	kb.append(ByteString.valueOf(key.getSize() / 8, 2));
	kb.append(key.getComponent(Key.AES));

	var unpadded = kb.toByteString();
	var plain = unpadded.pad(Crypto.ISO9797_METHOD_2);
	unpadded.clear();

	if (plain.length & 0xF) {		// pad() padds to 8 byte blocks, but we 16 byte blocks
		var nplain = plain.concat(new ByteString("0000000000000000", HEX));
		plain.clear();
		plain = nplain;
	}

	var iv = new ByteString("00000000000000000000000000000000", HEX);
	var kenc = this.getKENC();
	var cipher = this.crypto.encrypt(kenc, Crypto.AES_CBC, plain, iv);
	kenc.getComponent(Key.AES).clear();
	plain.clear();

	bb.append(cipher);

	var kmac = this.getKMAC();
	bb.append(this.crypto.sign(kmac, Crypto.AES_CMAC, bb.toByteString()));
	kmac.getComponent(Key.AES).clear();

	return bb.toByteString();
}



/**
 * Wrap RSA or ECC key
 *
 * @param {Key} pri the private key in CRT format
 * @param {Key} pub the public key
 * @type Key
 * @return the private key in private exponent / modulus format
 */
DKEK.prototype.convertCRT2PEM = function(pri, pub) {
	var n = pub.getComponent(Key.MODULUS);
	var r = ByteString.valueOf(0).concat(n);
	r = r.sub(ByteString.valueOf(0).concat(pri.getComponent(Key.CRT_P)));
	r = r.sub(ByteString.valueOf(0).concat(pri.getComponent(Key.CRT_Q)));
	r = r.biAdd(ByteString.valueOf(1));
	var e = pub.getComponent(Key.EXPONENT);
	var d = e.modInverse(r);

	// Strip leading zero in private exponent
	if (d.byteAt(0) == 0) {
		d = d.bytes(1);
	}

	var nk = new Key();
	nk.setType(Key.PRIVATE);
	nk.setComponent(Key.MODULUS, n);
	nk.setComponent(Key.EXPONENT, d);
	return nk;
}



/**
 * Wrap RSA or ECC key
 *
 * @param {Key} pri the private key
 * @param {Key} pub the public key
 * @type ByteString
 * @return the private key wrapped with the DKEK
 */
DKEK.prototype.encodeKey = function(pri, pub) {
	var bb = new ByteBuffer();
	bb.append(this.getKCV());

	var mod = pub.getComponent(Key.MODULUS);
	if (mod) {
		// Convert RSA keys larger than 2048 bit and in CRT format
		if ((mod.length > 256) && pri.getComponent(Key.CRT_P)) {
			pri = this.convertCRT2PEM(pri, pub);
		}
		if (pri.getComponent(Key.CRT_P)) {
			bb.append(6);
		} else {
			bb.append(5);
		}
		var algo = new ByteString("id-TA-RSA-v1-5-SHA-256", OID);
	} else {
		bb.append(12);
		var algo = new ByteString("id-TA-ECDSA-SHA-256", OID);
	}

	bb.append(ByteString.valueOf(algo.length, 2));
	bb.append(algo);

	bb.append(ByteString.valueOf(0, 2));
	bb.append(ByteString.valueOf(0, 2));
	bb.append(ByteString.valueOf(0, 2));

	var kb = new ByteBuffer(4096);
	kb.append(this.crypto.generateRandom(8));

	if (pub.getComponent(Key.MODULUS)) {
		kb.append(ByteString.valueOf(pub.getComponent(Key.MODULUS).length << 3, 2));

		if (pri.getComponent(Key.CRT_P)) {
			var c = pri.getComponent(Key.CRT_DP1);
			kb.append(ByteString.valueOf(c.length, 2));
			kb.append(c);

			var c = pri.getComponent(Key.CRT_DQ1);
			kb.append(ByteString.valueOf(c.length, 2));
			kb.append(c);

			var c = pri.getComponent(Key.CRT_P);
			kb.append(ByteString.valueOf(c.length, 2));
			kb.append(c);

			var c = pri.getComponent(Key.CRT_PQ);
			kb.append(ByteString.valueOf(c.length, 2));
			kb.append(c);

			var c = pri.getComponent(Key.CRT_Q);
			kb.append(ByteString.valueOf(c.length, 2));
			kb.append(c);
		} else {
			var c = pri.getComponent(Key.EXPONENT);
			kb.append(ByteString.valueOf(c.length, 2));
			kb.append(c);
		}

		var c = pub.getComponent(Key.MODULUS);
		kb.append(ByteString.valueOf(c.length, 2));
		kb.append(c);

		var c = pub.getComponent(Key.EXPONENT);
		kb.append(ByteString.valueOf(c.length, 2));
		kb.append(c);
	} else {
		kb.append(ByteString.valueOf(pub.getComponent(Key.ECC_P).length << 3, 2));

		var c = pri.getComponent(Key.ECC_A);
		kb.append(ByteString.valueOf(c.length, 2));
		kb.append(c);

		var c = pri.getComponent(Key.ECC_B);
		kb.append(ByteString.valueOf(c.length, 2));
		kb.append(c);

		var c = pri.getComponent(Key.ECC_P);
		kb.append(ByteString.valueOf(c.length, 2));
		kb.append(c);

		var c = pri.getComponent(Key.ECC_N);
		kb.append(ByteString.valueOf(c.length, 2));
		kb.append(c);

		var c = (new ByteString("04", HEX)).concat(pri.getComponent(Key.ECC_GX)).concat(pri.getComponent(Key.ECC_GY));
		kb.append(ByteString.valueOf(c.length, 2));
		kb.append(c);

		var c = pri.getComponent(Key.ECC_D);
		kb.append(ByteString.valueOf(c.length, 2));
		kb.append(c);

		var c = (new ByteString("04", HEX)).concat(pub.getComponent(Key.ECC_QX)).concat(pub.getComponent(Key.ECC_QY));
		kb.append(ByteString.valueOf(c.length, 2));
		kb.append(c);
	}

	var unpadded = kb.toByteString();
	var plain = unpadded.pad(Crypto.ISO9797_METHOD_2);
	unpadded.clear();

	if (plain.length & 0xF) {		// pad() padds to 8 byte blocks, but we 16 byte blocks
		var nplain = plain.concat(new ByteString("0000000000000000", HEX));
		plain.clear();
		plain = nplain;
	}
	// print(plain);

	var iv = new ByteString("00000000000000000000000000000000", HEX);
	var kenc = this.getKENC();
	var cipher = this.crypto.encrypt(kenc, Crypto.AES_CBC, plain, iv);
	kenc.getComponent(Key.AES).clear();
	plain.clear();

	bb.append(cipher);

	var kmac = this.getKMAC();
	bb.append(this.crypto.sign(kmac, Crypto.AES_CMAC, bb.toByteString()));
	kmac.getComponent(Key.AES).clear();

//	this.dumpKeyBLOB(bb.toByteString());
	return bb.toByteString();
}

DKEK.prototype.encodeRSAKey = DKEK.prototype.encodeKey;



DKEK.prototype.dumpKeyBLOB = function(keyblob) {
	// Verify MAC on last 16 byte of blob

	var macok = this.crypto.verify(this.getKMAC(), Crypto.AES_CMAC, keyblob.bytes(0, keyblob.length - 16), keyblob.right(16));

	var keytype = keyblob.byteAt(8);
	print("Values from key blob:");
	print("---------------------");
	print("Checking the MAC      : " + (macok ? "Passed" : "Failed"));
	print("KCV                   : " + keyblob.bytes(0, 8).toString(HEX) + "    [Must match the KCV of the DKEK for import]");
	print("Key type              : " + keytype + "    [5=RSA, 6=RSA-CRT, 12=ECC, 15=AES]");

	var ofs = 9;
	var len = keyblob.bytes(ofs, 2).toUnsigned();

	if ((keytype == 15) && (keyblob.byteAt(ofs + 2) != 0x60)) {
		print("Default Algorithm ID  : " + keyblob.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")     [Wrong encoding in V3.0 to V3.2]");
	} else {
		print("Default Algorithm ID  : " + keyblob.bytes(ofs + 2, len).toString(OID) + " (" + len + ")     [Default algorithm]");
	}

	ofs += len + 2;
	var len = keyblob.bytes(ofs, 2).toUnsigned();

	print("Allowed Algorithm IDs : " + keyblob.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

	ofs += len + 2;
	var len = keyblob.bytes(ofs, 2).toUnsigned();

	print("Access Conditions     : " + keyblob.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")    [Not used]");

	ofs += len + 2;
	var len = keyblob.bytes(ofs, 2).toUnsigned();

	print("Key OID               : " + keyblob.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")    [Not used]");

	ofs += len + 2;


	// Decrypt key data

	var iv = new ByteString("00000000000000000000000000000000", HEX);
	var plainkey = this.crypto.decrypt(this.getKENC(), Crypto.AES_CBC, keyblob.bytes(ofs, keyblob.length - 16 - ofs), iv);
	// print(plainkey);

	print("Randomize             : " + plainkey.bytes(0, 8).toString(HEX) + "    [Random data prepended at export]");

	var keysize = plainkey.bytes(8, 2).toUnsigned();
	print("Key size              : " + keysize + "    [Key size in bits (ECC/RSA) or bytes (AES)]");

	var ofs = 10;

	if (keytype == 5) {
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Private Exponent      : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Modulus               : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Public Exponent       : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");
	} else if (keytype == 6) {
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("DP1 = d mod (p - 1)   : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("DQ1 = d mod (q - 1)   : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Prime factor p        : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("PQ = q - 1 mod p      : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Prime factor q        : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Modulus               : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Public Exponent       : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");
	} else if (keytype == 12) {
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("A                     : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("B                     : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Prime factor P        : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Order                 : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Generator G           : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Secret D              : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");

		ofs += len + 2;
		var len = plainkey.bytes(ofs, 2).toUnsigned();

		print("Public Point Q        : " + plainkey.bytes(ofs + 2, len).toString(HEX) + " (" + len + ")");
	} else if (keytype == 15) {
		print("Key Value             : " + plainkey.bytes(ofs, keysize).toString(HEX));
	} else {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Unknown key type " + keytype);
	}
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2016 CardContact Systems GmbH
 * |'##> <##'|  Schuelerweg 38, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview SmartCard-HSM Crypto Provider for EAC-PKI
 */

var CVC					= require('scsh/eac/CVC').CVC;
var PublicKeyReference			= require('scsh/eac/PublicKeyReference').PublicKeyReference;
var SmartCardHSM			= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;
var SmartCardHSMKey			= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSMKey;
var SmartCardHSMKeySpecGenerator	= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSMKeySpecGenerator;



/**
 * Crypto Provider for EAC-PKI
 *
 * @param {SmartCardHSM} sc the associated SmartCard-HSM
 */
function EACCryptoProvider(sc, id) {
	this.sc = sc;
	this.id = id;
	sc.enumerateKeys();
}

exports.EACCryptoProvider = EACCryptoProvider;

EACCryptoProvider.CVCCACERTIFICATEPREFIX = 0xD0;
EACCryptoProvider.PATH_EF_FID = 0xD100;



/**
 * Replace SmartCard-HSM
 *
 * @param {SmartCardHSM} sc the new SmartCard-HSM
 */
EACCryptoProvider.prototype.setSmartCardHSM = function(sc) {
	this.sc = sc;
	sc.enumerateKeys();
}



/**
 * Get crypto object
 *
 * This method is part of the API.
 *
 * @type HSMCrypto
 * @return the HSMCrypto object
 */
EACCryptoProvider.prototype.getCrypto = function() {
	if (this.sc) {
		return this.sc.getCrypto();
	}
	return new Crypto();
}



/**
 * Transform path and certificate holder into a label
 *
 * @param {String} path the path
 * @param {PublicKeyReference} chr the certificate holder reference
 * @type String
 * @return the key label
 */
EACCryptoProvider.path2label = function(path, chr) {
	return path.substr(1) + chr.getSequenceNo();
}



/**
 * Get a handle for a private key stored on the SmartCard-HSM
 *
 * This method is part of the API.
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key
 * @param {ByteString} blob the optional key blob
 * @returns the private key or null if not found
 * @type Key
 */
EACCryptoProvider.prototype.getPrivateKey = function(path, chr, blob) {
	var label = EACCryptoProvider.path2label(path, chr);
	GPSystem.log(GPSystem.DEBUG, module.id, "Get private key " + label);

	return this.sc.getKey(label);
}



/**
 * Delete private key from SmartCard-HSM
 *
 * This method is part of the API.
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key
 */
EACCryptoProvider.prototype.deletePrivateKey = function(path, chr) {
	var label = EACCryptoProvider.path2label(path, chr);
	GPSystem.log(GPSystem.DEBUG, module.id, "Delete private key " + label);
	var key = this.sc.getKey(label);
	if (!key) {
		return;
	}

	var kid = key.getId();
	var fid = ByteString.valueOf((SmartCardHSM.KEYPREFIX << 8) + kid);
	this.sc.deleteFile(fid);

	try	{
		var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + kid);
		this.sc.deleteFile(fid);

		var fid = ByteString.valueOf((SmartCardHSM.EECERTIFICATEPREFIX << 8) + kid);
		this.sc.deleteFile(fid);
	}
	catch(e) {
		// Ignore
	}
	this.sc.enumerateKeys();
}



/**
 * Generate a certificate request using a private key in the SmartCard-HSM
 *
 * This method is part of the API.
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
 * @param {PublicKeyReference} currentchr the current CHR for the key in use
 * @param {PublicKeyReference} nextchr the next available CHR
 * @param {PublicKeyReference} car the CA at which this request is addressed
 * @param {boolean} forceInitial force an initial request, even if a current certificate is available
 * @param {boolean} signinitial sign with initial key (sequence = 00000)
 * @param {Key} keyspec a key object containing key parameters (e.g. EC Curve)
 * @param {ByteString} algo the terminal authentication algorithm object identifier
 * @return the certificate request
 * @type CVC
 */
EACCryptoProvider.prototype.generateRequest = function(path, currentchr, nextchr, car, forceinitial, signinitial, keyspec, algo) {

	var label = EACCryptoProvider.path2label(path, nextchr);
	GPSystem.log(GPSystem.DEBUG, module.id, "Generate private key " + label);

	if (car == null) {			// CAR is not optional in SmartCard-HSM generated requests
		car = nextchr;			// Use the CHR if no CAR defined.
	}

	var key = this.sc.getKey(label);
	if (key) {
		var newkid = key.getId();
	} else {
		var newkid = this.sc.determineFreeKeyId();
	}

	var kg = null;
	if (typeof(keyspec.getComponent(Key.ECC_P)) != "undefined") {
		var keysize = keyspec.getSize();
		if (keysize < 0) {
			var keysize = keyspec.getComponent(Key.ECC_P).length << 3;
		}
		if (keysize == 528) {
			keysize = 521;
		}
		var kg = new SmartCardHSMKeySpecGenerator(Crypto.EC, keyspec);
		var keydesc = SmartCardHSM.buildPrkDforECC(newkid, label, keysize);
	} else {
		var kg = new SmartCardHSMKeySpecGenerator(Crypto.RSA, keyspec.getSize());
		var keydesc = SmartCardHSM.buildPrkDforRSA(newkid, label, keyspec.getSize());
	}

	kg.defaultAlgo = algo;
	kg.setInnerCAR(car)
	kg.setCHR(nextchr);
	GPSystem.log(GPSystem.DEBUG, module.id, "key domain slot " + this.id);
	if (this.id >= 0) {
		GPSystem.log(GPSystem.DEBUG, module.id, "set key domain slot to " + this.id);
		kg.setKeyDomain(this.id);
	}
	var keydata = kg.encode();
	GPSystem.log(GPSystem.DEBUG, module.id, "gakp cdata");
	GPSystem.log(GPSystem.DEBUG, module.id, keydata);

	var reqbin = this.sc.generateAsymmetricKeyPair(newkid, 0, keydata);

	var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + newkid);
	this.sc.updateBinary(fid, 0, keydesc.getBytes());

	if (((currentchr == null) || forceinitial) && !signinitial) {
		var a = new ASN1(reqbin);
		a = a.get(0);
		var req = new CVC(a.getBytes());
	} else {
		var req = new CVC(reqbin);
	}

	var hkey = new SmartCardHSMKey(this.sc, newkid);
	hkey.setDescription(keydesc);
	this.sc.addKeyToMap(hkey);

	return req;
}


// ---- Functions below are used to synchronize Certificates between the certstore and SmartCard-HSM

/**
 * Read the systems path from the SmartCard-HSM
 *
 * The path is used to configure the namespace for the node to which the SmartCard-HSM is connected
 */
EACCryptoProvider.prototype.getPathFromDevice = function() {
	var fid = ByteString.valueOf(EACCryptoProvider.PATH_EF_FID);
	if (!this.sc.hasFile(fid)) {
		return;
	}
	var s = this.sc.readBinary();
	return s.toString(ASCII);
}



/**
 * Enumerate keys on the SmartCard-HSM
 *
 * The method returns an array of objects with the following properties
 *
 * label       String - The key name on the device
 * path        String - The label transformed into a PKI path
 * chr         PublicKeyReference - the CHR for the key
 * kid         Number - The key identifier on the device
 * cvc         CVC - the card verifiable certificate or undefined if none on the device
 *
 * @type Object[]
 * @return the list of keys on the device
 */
EACCryptoProvider.prototype.enumerateKeys = function() {
	var list = this.sc.enumerateKeys();

	var keylist = [];

	for each (label in list) {
		if (label.indexOf("/") < 0) {
			continue;
		}

		var pe = label.split("/");
		var chr = new PublicKeyReference(pe[pe.length - 1]);

		var path = "";
		for (var i = 0; i < pe.length - 1; i++) {
			path += "/" + pe[i];
		}
		path += "/" + chr.getHolder();

		var key = this.sc.getKey(label);
		var kid = key.getId();

		var cvc = undefined;
		var fid = ByteString.valueOf((SmartCardHSM.EECERTIFICATEPREFIX << 8) + kid);
		if (this.sc.hasFile(fid)) {
			var certbin = this.sc.readBinary(fid);
			cvc = new CVC(certbin);
		}
		keylist.push( { label: label, path: path, chr: chr, kid: kid, cvc: cvc } );
	}

	return keylist;
}



/**
 * Enumerate CVC certificates for CAs
 *
 * @type CVC[]
 * @return the list of CA certificates on the device
 */
EACCryptoProvider.prototype.enumerateCertificates = function() {
	var fids = this.sc.enumerateObjects();

	var certlist = [];

	for (var i = 0; i < fids.length; i += 2) {
		if (fids.byteAt(i) == EACCryptoProvider.CVCCACERTIFICATEPREFIX) {
			var fid = fids.bytes(i, 2);
			try	{
				var certbin = this.sc.readBinary(fid);
				cvc = new CVC(certbin);
				certlist.push(cvc);
			}
			catch(e) {
				GPSystem.log(GPSystem.ERROR, module.id, "Trying to read certificate : " + e);
			}
		}
	}

	return certlist;
}



/**
 * Delete CA certificates on device
 */
EACCryptoProvider.prototype.deleteCertificates = function() {
	var fids = this.sc.enumerateObjects();

	for (var i = 0; i < fids.length; i += 2) {
		if (fids.byteAt(i) == EACCryptoProvider.CVCCACERTIFICATEPREFIX) {
			var fid = fids.bytes(i, 2);
			this.sc.deleteFile(fid);
		}
	}
}



/**
 * Delete certificate on device for a given key
 *
 * @param {Object} k the key as returned by enumerateKeys()
 */
EACCryptoProvider.prototype.deleteCertificateForKey = function(k) {
	var fid = ByteString.valueOf((SmartCardHSM.EECERTIFICATEPREFIX << 8) + k.kid);
	this.sc.deleteFile(fid);
}



/**
 * Export CA and EE certificates
 *
 * This method erases all existing CA certificates on the device first
 *
 * @param {String} path the PKI path to be exported
 * @param {CVC[]} eecertlist the list of end-entity certificates
 * @param {CVC[]} cacertlist the list of CA certificates
 */
EACCryptoProvider.prototype.exportCertificates = function(path, eecertlist, cacertlist) {
	this.deleteCertificates();

	var keylist = this.enumerateKeys();

	var cnt = 0;
	for (var i = 0; i < keylist.length; i++) {
		var k = keylist[i];
		GPSystem.log(GPSystem.DEBUG, module.id, "Find matching certificate for " + k.label );

		for (j = 0; j < eecertlist.length; j++) {
			var cvc = eecertlist[j];

			if (cvc.getCHR().equals(k.chr)) {
				GPSystem.log(GPSystem.DEBUG, module.id, "Found matching certificate " + cvc );
				var fid = ByteString.valueOf((SmartCardHSM.EECERTIFICATEPREFIX << 8) + k.kid);

				if (k.cvc) {
					if (!k.cvc.getBytes().equals(cvc.getBytes())) {
						this.sc.deleteFile(fid);
						this.sc.updateBinary(fid, 0, cvc.getBytes());
					} else {
						GPSystem.log(GPSystem.DEBUG, module.id, "Certificate already on device - not saved");
					}
				} else {
					this.sc.updateBinary(fid, 0, cvc.getBytes());
				}

				cnt++;
			}
		}
	}

	for (var i = 0; i < cacertlist.length; i++) {
		var cvc = cacertlist[i];
		var fid = ByteString.valueOf((EACCryptoProvider.CVCCACERTIFICATEPREFIX << 8) + i);
		GPSystem.log(GPSystem.DEBUG, module.id, "Writing to " + fid + " the certificate " + cvc );
		this.sc.updateBinary(fid, 0, cvc.getBytes());
		cnt++;
	}

	GPSystem.log(GPSystem.DEBUG, module.id, "Writing path " + path );
	var fid = ByteString.valueOf(EACCryptoProvider.PATH_EF_FID);
	try 	{
		this.sc.deleteFile(fid);
	}
	catch(e) {
		// Ignore
	}

	this.sc.updateBinary(fid, 0, new ByteString(path, ASCII));

	return cnt;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A card verifiable certificate store using a SmartCard-HSM as key store
 */

// Imports

var PublicKeyReference	 = require('scsh/eac/PublicKeyReference').PublicKeyReference;
var CVC					 = require('scsh/eac/CVC').CVC;
var CVCertificateStore	 = require('scsh/eac/CVCertificateStore').CVCertificateStore;
var SmartCardHSM		 = require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;
var SmartCardHSMKey		 = require('scsh/sc-hsm/SmartCardHSM').SmartCardHSMKey;
var CVCCA				 = require('scsh/eac/CVCCA').CVCCA;



/**
 * Create a CV certificate store using a SmartCard-HSM as secure key store
 *
 * @class CV certificate store with SmartCard-HSM as secure key store
 * @constructor
 * @param {DAOFactory} daof the factory that can create data access objects for persistent information
 * @param {SmartCardHSM} sc the SmartCard-HSM access object
 */
function HSMCVCertificateStore(daof, sc) {
	CVCertificateStore.call(this, daof);
	if (sc) {
		this.sc = sc;
		sc.enumerateKeys();
	}
}

HSMCVCertificateStore.prototype = Object.create(CVCertificateStore.prototype);
HSMCVCertificateStore.constructor = HSMCVCertificateStore;

exports.HSMCVCertificateStore = HSMCVCertificateStore;



HSMCVCertificateStore.prototype.setSmartCardHSM = function(sc) {
	this.sc = sc;
	sc.enumerateKeys();
}



/**
 * Get crypto object
 *
 * @type HSMCrypto
 * @return the HSMCrypto object
 */
HSMCVCertificateStore.prototype.getCrypto = function() {
	if (this.sc) {
		return this.sc.getCrypto();
	}
	return new Crypto();
}



/**
 * Transform path and certificate holder into a label
 *
 * @param {String} path the path
 * @param {PublicKeyReference} chr the certificate holder reference
 * @type String
 * @return the key label
 */
HSMCVCertificateStore.path2label = function(path, chr) {
	return path.substr(1) + chr.getSequenceNo();
}



/**
 * Get a private key in the certificate store. Overrides method in CVCertificateStore.
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key
 * @returns the private key or null if not found
 * @type Key
 */
HSMCVCertificateStore.prototype.getPrivateKey = function(path, car) {
	var label = HSMCVCertificateStore.path2label(path, car);
	print("Get private key " + label);

	return this.sc.getKey(label);
}



/**
 * Generate a certificate request using a private key in the SmartCard-HSM
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
 * @param {PublicKeyReference} car the CA at which this request is addressed
 * @param {boolean} forceInitial force an initial request, even if a current certificate is available
 * @param {boolean} signinitial sign with initial key (sequence = 00000)
 * @param {Key} keyspec a key object containing key parameters (e.g. EC Curve)
 * @param {ByteString} algo the terminal authentication algorithm object identifier
 * @return the certificate request
 * @type CVC
 */
HSMCVCertificateStore.prototype.generateRequest = function(path, car, forceinitial, signinitial, keyspec, algo, countryseq) {

	// Determine CHR
	var currentchr = this.getCurrentCHR(path);
	var nextchr = this.getNextCHR(path, countryseq);
	var label = HSMCVCertificateStore.path2label(path, nextchr);

	if (car == null) {			// CAR is not optional in SmartCard-HSM generated requests
		car = nextchr;			// Use the CHR if no CAR defined.
	}

	var signkid = 0;
	if ((currentchr != null) && !forceinitial) {
		var curlabel = HSMCVCertificateStore.path2label(path, currentchr);
		var key = this.sc.getKey(curlabel);
		if (key == null) {
			throw new GPError("HSMCVCertificateStore", GPError.DEVICE_ERROR, 0, "Key " + curlabel + " not found");
		}
		var signkid = key.getId();
		var outerCAR = currentchr;
	}

	var key = this.sc.getKey(label);
	if (key) {
		var newkid = key.getId();
	} else {
		var newkid = this.sc.determineFreeKeyId();
	}

	if (typeof(keyspec.getComponent(Key.ECC_P)) != "undefined") {
		var keysize = keyspec.getSize();
		print("1:Keysize " + keysize);
		if (keysize < 0) {
			var keysize = keyspec.getComponent(Key.ECC_P).length << 3;
			print("2:Keysize " + keysize);
		}
		var keydata = SmartCardHSM.buildGAKPwithECC(car, algo, nextchr, keyspec, outerCAR);
		var keydesc = SmartCardHSM.buildPrkDforECC(newkid, label, keysize);
	} else {
		var keydata = SmartCardHSM.buildGAKPwithRSA(car, algo, nextchr, keyspec.getSize(), outerCAR);
		var keydesc = SmartCardHSM.buildPrkDforRSA(newkid, label, keyspec.getSize());
	}

	var reqbin = this.sc.generateAsymmetricKeyPair(newkid, signkid, keydata);

	var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + newkid);
	this.sc.updateBinary(fid, 0, keydesc.getBytes());

	if (((currentchr == null) || forceinitial) && !signinitial) {
		var a = new ASN1(reqbin);
		a = a.get(0);
		var req = new CVC(a.getBytes());
	} else {
		var req = new CVC(reqbin);
	}

	var hkey = new SmartCardHSMKey(this.sc, newkid);
	hkey.setDescription(keydesc);
	this.sc.addKeyToMap(hkey);

	return req;
}



/**
 * Get a private key in the certificate store. Overrides method in CVCertificateStore.
 *
 * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
 * @param {PublicKeyReference} chr the public key reference for this key
 * @returns the private key or null if not found
 * @type Key
 */
HSMCVCertificateStore.prototype.deletePrivateKey = function(path, car) {
	var label = HSMCVCertificateStore.path2label(path, car);
	print("Get private key " + label);

	return this.sc.getKey(label);
}



HSMCVCertificateStore.testPath = GPSystem.mapFilename("testca", GPSystem.CWD);

HSMCVCertificateStore.test = function() {
	var card = new Card(_scsh3.reader);

	var sc = new SmartCardHSM(card);
	sc.verifyUserPIN(new ByteString("648219", ASCII));
	var cs = new HSMCVCertificateStore(HSMCVCertificateStore.testPath + "/cvca", sc);

	var crypto = sc.getCrypto();

	var cvca = new CVCCA(crypto, cs, null, null, "/UTCVCA");

	// Create a new request
	var car = new PublicKeyReference("UTCVCA00000");

	var req = cvca.generateRequest(car, false);
	print("Request: " + req);
	print(req.getASN1());

	assert(req.verifyWith(crypto, req.getPublicKey()));

	// Create self-signed or link certificate based on request
	var policy = { certificateValidityDays: 2,
				   chatRoleOID: new ByteString("id-IS", OID),
				   chatRights: new ByteString("E3", HEX),
				   includeDomainParameter: true,
				   extensions: []
				 };
	var cert = cvca.generateCertificate(req, policy);
	print("Certificate: " + cert);
	print(cert.getASN1());

	// Import certificate into store, making it the most current certificate
	cvca.storeCertificate(cert);

	// Generate additional self-signed root certificate
	// This must be done after the link certificate has been imported
	var policy = { certificateValidityDays: 2,
				   chatRoleOID: new ByteString("id-IS", OID),
				   chatRights: new ByteString("E3", HEX),
				   includeDomainParameter: true,
				   extensions: []
				 };
	var cert = cvca.generateCertificate(req, policy);
	print("Certificate: " + cert);
	print(cert.getASN1());

	// Import certificate into store, making it the most current certificate
	cvca.storeCertificate(cert);
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Class implementing a key store for X.509 certificate and private keys stored on a SmartCard-HSM
 */

var PublicKeyReference = require('scsh/eac/PublicKeyReference').PublicKeyReference;
var SmartCardHSM = require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;
var SmartCardHSMKey = require('scsh/sc-hsm/SmartCardHSM').SmartCardHSMKey;
var CVC = require("scsh/eac/CVC").CVC;



/**
 * Create a simple key store front-end
 *
 * @class Class implementing some simple access functions to generate key pairs and store certificates
 * @param {SmartCardHSM} sc the SmartCard-HSM card service
 */
function HSMKeyStore(sc) {
	this.sc = sc;
	this.chr = new PublicKeyReference("UTNULL00000");
	this.car = new PublicKeyReference("UTNULL00000");
}

exports.HSMKeyStore = HSMKeyStore;



/**
 * Generate a key pair
 *
 * @param {String} label the label under which the key pair shall be stored
 * @param {SmartCardHSMKeySpecGenerator} initialized key spec generator
 * @type CVC
 * @return the authenticated request
 */
HSMKeyStore.prototype.generateKeyPair = function(label, spec) {

	if ((spec.keytype != Crypto.RSA) && (spec.keytype != Crypto.EC)) {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Unsupported key type");
	}

	var key = this.sc.getKey(label);
	if (key) {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Key with label " + label + " does already exist");
	}

	var newkid = this.sc.determineFreeKeyId();
	var reqbin = this.sc.generateAsymmetricKeyPair(newkid, 0, spec.encode());
	var req = new CVC(reqbin);
	var keyid = req.determineKeyIdentifier();

	switch(spec.keytype) {
		case Crypto.RSA:
			var keydesc = SmartCardHSM.buildPrkDforRSA(keyid, label, spec.keysize);
			break;
		case Crypto.EC:
			var keydesc = SmartCardHSM.buildPrkDforECC(keyid, label, spec.domainParameter.getSize());
			break;
		default:
			throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Unsupported key type");
	}

	var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + newkid);
	this.sc.updateBinary(fid, 0, keydesc.getBytes());

	var hkey = new SmartCardHSMKey(this.sc, newkid);
	hkey.setDescription(keydesc);
	this.sc.addKeyToMap(hkey);
	return req;
}



/**
 * Generate a symmetric key
 *
 * @param {String} label the label under which the key shall be stored
 * @param {SmartCardHSMKeySpecGenerator} initialized key spec generator
 * @type ByteString
 * @return the new key wrapped with the symmetric key defined with SmartCardHSMKeySpecGenerator.setWrappingKey()
 */
HSMKeyStore.prototype.generateKey = function(label, spec) {

	if (spec.keytype != Crypto.AES) {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Unsupported key type");
	}

	var key = this.sc.getKey(label);
	if (key) {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Key with label " + label + " does already exist");
	}

	var newkid = this.sc.determineFreeKeyId();

	var genalg;
	switch(spec.keysize) {
		case 128: genalg = 0xB0; break;
		case 192: genalg = 0xB1; break;
		case 256: genalg = 0xB2; break;
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Unsupported key size");
	}

	var wrapbin = this.sc.generateSymmetricKey(newkid, genalg, spec.encode());

	var deralg;
	if (spec.algorithms.find(ByteString.valueOf(SmartCardHSM.ALG_CMAC)) >= 0) {
		deralg = SmartCardHSM.ALG_CMAC;
	} else if (spec.algorithms.find(ByteString.valueOf(SmartCardHSM.ALG_DERIVE_SP800_56C)) >= 0) {
		deralg = SmartCardHSM.ALG_DERIVE_SP800_56C;
	}

	var keyid;
	if (deralg) {
		keyid = this.sc.deriveSymmetricKey(newkid, deralg, new ByteString("KeyCheckValue", ASCII)).left(8);
	} else {
		keyid = ByteString.valueOf(newkid);
	}

	var keydesc = SmartCardHSM.buildSKDforAES(keyid, label, spec.keysize);

	var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + newkid);
	this.sc.updateBinary(fid, 0, keydesc.getBytes());

	var hkey = new SmartCardHSMKey(this.sc, newkid);
	hkey.setDescription(keydesc);
	this.sc.addKeyToMap(hkey);
	return wrapbin;
}



/**
 * Generate a RSA key pair
 *
 * @param {String} label the label under which the key pair shall be stored
 * @param {Number} keysize the key size in bits (1024, 1536 or 2048)
 */
HSMKeyStore.prototype.generateRSAKeyPair = function(label, keysize) {

	var key = this.sc.getKey(label);
	if (key) {
		var newkid = key.getId();
	} else {
		var newkid = this.sc.determineFreeKeyId();
	}

	var algo = new ByteString("id-TA-RSA-v1-5-SHA-256", OID);

	var keydata = SmartCardHSM.buildGAKPwithRSA(this.car, algo, this.chr, keysize);
	var keydesc = SmartCardHSM.buildPrkDforRSA(newkid, label, keysize);

	var reqbin = this.sc.generateAsymmetricKeyPair(newkid, 0, keydata);

	var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + newkid);
	this.sc.updateBinary(fid, 0, keydesc.getBytes());
	var req = new CVC(reqbin);

	var hkey = new SmartCardHSMKey(this.sc, newkid);
	hkey.setDescription(keydesc);
	this.sc.addKeyToMap(hkey);
	return req;
}



/**
 * Generate an ECDSA key pair
 *
 * @param {String} label the label under which the key pair shall be stored
 * @param {String} curve the curve object identifier
 */
HSMKeyStore.prototype.generateECCKeyPair = function(label, curve) {

	var key = this.sc.getKey(label);
	if (key) {
		var newkid = key.getId();
	} else {
		var newkid = this.sc.determineFreeKeyId();
	}

	var algo = new ByteString("id-TA-ECDSA-SHA-256", OID);

	var dp = new Key();
	dp.setComponent(Key.ECC_CURVE_OID, new ByteString(curve, OID));

	var keydata = SmartCardHSM.buildGAKPwithECC(this.car, algo, this.chr, dp);
//	print("Keysize: " + dp.getSize());
	var keydesc = SmartCardHSM.buildPrkDforECC(newkid, label, dp.getSize());

	var reqbin = this.sc.generateAsymmetricKeyPair(newkid, 0, keydata);

	var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + newkid);
	this.sc.updateBinary(fid, 0, keydesc.getBytes());
	var req = new CVC(reqbin);

	var hkey = new SmartCardHSMKey(this.sc, newkid);
	hkey.setDescription(keydesc);
	this.sc.addKeyToMap(hkey);

	return req;
}



/**
 * Import a key blob, meta data and certificate
 *
 * @param {ByteString} keywrap the binary key in SmartCard-HSM format
 */
HSMKeyStore.prototype.importKey = function(keywrap) {

	var a = new ASN1(keywrap);

	var wrap = a.get(0).value;
	var id = this.sc.determineFreeKeyId();

	if (id < 0) {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Key identifier exhausted");
	}

	this.sc.unwrapKey(id, wrap);

	var hkey = new SmartCardHSMKey(this.sc, id);

	if (a.elements > 1) {
		var meta = a.get(1);
		this.sc.updateBinary(ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + id), 0, meta.getBytes());
		hkey.setDescription(meta);
	}

	var bin = new ByteString("", HEX);
	for (var i = 2; i < a.elements; i++) {
		var cert = a.get(i);
		bin = bin.concat(cert.getBytes());
	}
	this.sc.updateBinary(ByteString.valueOf((SmartCardHSM.EECERTIFICATEPREFIX << 8) + id), 0, bin);

	this.sc.addKeyToMap(hkey);

	return hkey;
}



/**
 * Export a key blob, meta data and certificate
 *
 * @param {String/Number/Key} labelOrIdOrKey the label, id or object of the key to be removed
 * @type ByteString
 * @return the blob with key, meta data and certificate
 */
HSMKeyStore.prototype.exportKey = function(labelOrIdOrKey) {

	var key = labelOrIdOrKey;
	if (!(key instanceof SmartCardHSMKey)) {
		key = this.getKey(labelOrIdOrKey);
	}

	if (key) {
		var id = key.getId();
	} else {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Could not find a key with label or id " + labelOrIdOrKey);
	}

	var wrap = this.sc.wrapKey(id);
	var a = new ASN1(0x30, new ASN1(0x04, wrap));

	try	{
		var meta = this.sc.readBinary(ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + id));
		a.add(new ASN1(meta));

		var fid = ByteString.valueOf((SmartCardHSM.EECERTIFICATEPREFIX << 8) + id);
		if (this.sc.hasFile(fid)) {
			var cert = this.sc.readBinary(fid);

			// Copy list of CVCs
			if ((cert.byteAt(0) == 0x67) || (cert.byteAt(0) == 0x7F)) {
				var list = SmartCardHSM.parseCertificateList(cert);
				for (var i = 0; i < list.length; i++) {
					a.add(list[i].getASN1());
				}
				if ((cert.byteAt(0) == 0x67) && (list.length == 1)) {
					print("Adding device and DICA certificate to export");
					var devAutCert = this.sc.readBinary(SmartCardHSM.C_DevAut);
					var list = SmartCardHSM.parseCertificateList(devAutCert);
					for (var i = 0; i < list.length; i++) {
						a.add(list[i].getASN1());
					}
				}
			} else {
				a.add(new ASN1(cert));
			}
		}
	}
	catch(e) {
		print("Ignoring meta data or certificate: " + e);
	}

	return a.getBytes();
}



/**
 * Import a RSA key blob
 *
 * @param {String} label the key label
 * @param {ByteString} keyblob the binary key in SmartCard-HSM format
 * @param {Number} keysize in bits
 * @param {Number/ByteString} keyid the optional PKCS#15 key identifier.
 * Default value is the next free key id of the SmartCard-HSM.
 * @type SmartCardHSMKey
 */
HSMKeyStore.prototype.importRSAKey = function(label, keyblob, keysize, keyid) {
	var keytype = keyblob.byteAt(8);
	if ((keytype != 5) && (keytype != 6)) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "keyblob does not contain a RSA key");
	}

	var key = this.sc.getKey(label);
	if (key) {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "A key with label " + label + " does already exist");
	}
	var newkid = this.sc.determineFreeKeyId();

	this.sc.unwrapKey(newkid, keyblob);

	if (typeof(keyid) == "undefined") {
		keyid = newkid;
	}

	var keydesc = SmartCardHSM.buildPrkDforRSA(keyid, label, keysize);

	var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + newkid);
	this.sc.updateBinary(fid, 0, keydesc.getBytes());

	var hkey = new SmartCardHSMKey(this.sc, newkid);
	hkey.setDescription(keydesc);
	this.sc.addKeyToMap(hkey);

	return hkey;
}



/**
 * Import an ECC key blob
 *
 * @param {String} label the key label
 * @param {ByteString} keyblob the binary key in SmartCard-HSM format
 * @param {Number} keysize in bits
 * @param {Number/ByteString} keyid the optional PKCS#15 key identifier.
 * Default value is the next free key id of the SmartCard-HSM.
 * @type SmartCardHSMKey
 */
HSMKeyStore.prototype.importECCKey = function(label, keyblob, keysize, keyid) {
	var keytype = keyblob.byteAt(8);
	if (keytype != 12) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "keyblob does not contain an ECC key");
	}
	var key = this.sc.getKey(label);
	if (key) {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "A key with label " + label + " does already exist");
	}
	var newkid = this.sc.determineFreeKeyId();

	this.sc.unwrapKey(newkid, keyblob);

	if (typeof(keyid) == "undefined") {
		keyid = newkid;
	}

	var keydesc = SmartCardHSM.buildPrkDforECC(keyid, label, keysize);

	var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + newkid);
	this.sc.updateBinary(fid, 0, keydesc.getBytes());

	var hkey = new SmartCardHSMKey(this.sc, newkid);
	hkey.setDescription(keydesc);
	this.sc.addKeyToMap(hkey);

	return hkey;
}



/**
 * Import an AES key blob
 *
 * @param {String} label the key label
 * @param {ByteString} keyblob the binary key in SmartCard-HSM format
 * @param {Number} keysize in bits
 * @param {ByteString} keyid the PKCS#15 key id (CKA_ID)
 * @type
 */
HSMKeyStore.prototype.importAESKey = function(label, keyblob, keysize, keyid) {

	var key = this.sc.getKey(label);
	if (key) {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "A key with label " + label + " does already exist");
	}
	var newkid = this.sc.determineFreeKeyId();

	this.sc.unwrapKey(newkid, keyblob);

	if (typeof(keyid) == "undefined") {
		keyid = newkid;
	}

	var keydesc = SmartCardHSM.buildSKDforAES(keyid, label, keysize);

	var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + newkid);
	this.sc.updateBinary(fid, 0, keydesc.getBytes());

	var hkey = new SmartCardHSMKey(this.sc, newkid);
	hkey.setDescription(keydesc);
	this.sc.addKeyToMap(hkey);

	return hkey;
}



/**
 * Store certificate under given label
 *
 * @param {String/Number/Key} labelOrIdOrKey the label, id or object of the key for which the certificate should be stored
 * @param {X509} cert the certificate
 */
HSMKeyStore.prototype.storeEndEntityCertificate = function(labelOrIdOrKey, cert) {
	var key = labelOrIdOrKey;
	if (!(key instanceof SmartCardHSMKey)) {
		key = this.getKey(labelOrIdOrKey);
	}

	if (key) {
		var kid = key.getId();
	} else {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Could not find a key with label " + label);
	}

	var fid = ByteString.valueOf((SmartCardHSM.EECERTIFICATEPREFIX << 8) + kid);
	if (!(cert instanceof ByteString)) {
		cert = cert.getBytes();
	}
	this.sc.updateBinary(fid, 0, cert);
}



/**
 * Store CA certificate under given label
 *
 * @param {String} label the label under which the certificate shall be stored
 * @param {X509} cert the certificate
 */
HSMKeyStore.prototype.storeCACertificate = function(label, cert) {
	this.sc.enumerateCACertificates();
	var id = this.sc.caidmap[label];
	if (id == undefined) {
		id = this.sc.determineFreeCAId();
	}

	var fid = ByteString.valueOf((SmartCardHSM.CACERTIFICATEPREFIX << 8) + id);
	this.sc.updateBinary(fid, 0, cert.getBytes());

	var descr = SmartCardHSM.buildCertDescription(label, null, cert.getPublicKey(), fid);
	var fid = ByteString.valueOf((SmartCardHSM.CERTDPREFIX << 8) + id);
	this.sc.updateBinary(fid, 0, descr.getBytes());
	this.sc.addCACertificateToMap(cert, id, label);
}



/**
 * Delete CA certificate with given label
 *
 * @param {String} label the label of certificate to be removed
 */
HSMKeyStore.prototype.deleteCACertificate = function(label) {
	var cert = this.sc.getCACertificate(label);

	if (!cert) {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Could not find a certificate with label " + label);
	}

	var fid = ByteString.valueOf((SmartCardHSM.CERTDPREFIX << 8) + cert.id);
	this.sc.deleteFile(fid);
	var fid = ByteString.valueOf((SmartCardHSM.CACERTIFICATEPREFIX << 8) + cert.id);
	this.sc.deleteFile(fid);
	this.sc.enumerateCACertificates();
}



/**
 * Delete key and certificate with given label
 *
 * @param {String/Number/Key} labelOrIdOrKey the label, id or object of the key to be removed
 */
HSMKeyStore.prototype.deleteKey = function(labelOrIdOrKey) {
	var key = labelOrIdOrKey;
	if (!(key instanceof SmartCardHSMKey)) {
		key = this.getKey(labelOrIdOrKey);
	}

	if (key) {
		var kid = key.getId();
	} else {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Could not find a key with label " + labelOrIdOrKey);
	}

	var fid = ByteString.valueOf((SmartCardHSM.KEYPREFIX << 8) + kid);
	this.sc.deleteFile(fid);

	try	{
		var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + kid);
		this.sc.deleteFile(fid);

		var fid = ByteString.valueOf((SmartCardHSM.EECERTIFICATEPREFIX << 8) + kid);
		this.sc.deleteFile(fid);
	}
	catch(e) {
		// Ignore
	}

	this.enumerateKeys();
}



/**
 * Return list of keys
 *
 * @type String[]
 * @return the list of key names
 */
HSMKeyStore.prototype.enumerateKeys = function() {
	return this.sc.enumerateKeys();
}



/**
 * Check if key with label exists
 *
 * @param {String / Number} the key label or id
 * @type Boolean
 * @return true if key exists
 */
HSMKeyStore.prototype.hasKey = function(labelOrId) {
	var key = this.sc.getKey(labelOrId);
	return key != null;
}



/**
 * Get key for given label
 *
 * @param {String / Number} the key label or id
 * @type Key
 * @return the key
 */
HSMKeyStore.prototype.getKey = function(labelOrId) {
	var key = this.sc.getKey(labelOrId);
	if (!key) {
		throw new GPError("HSMKeyStore", GPError.INVALID_DATA, 0, "Could not find a key with label/id " + labelOrId);
	}
	return key;
}



/**
 * Check if key has a certificate
 *
 * @param {String/Number/Key} labelOrIdOrKey the certificate label, id or key
 * @type Boolean
 * @return true of a certificate is present
 */
HSMKeyStore.prototype.hasCertificate = function(labelOrIdOrKey) {
	var key = labelOrIdOrKey;
	if (!(key instanceof SmartCardHSMKey)) {
		key = this.getKey(labelOrIdOrKey);
	}
	var kid = key.getId();
	var fid = ByteString.valueOf((SmartCardHSM.EECERTIFICATEPREFIX << 8) + kid);
	return this.sc.hasFile(fid);
}



/**
 * Get raw certificate for given label
 *
 * @param {String/Number/Key} labelOrIdOrKey the certificate label, id or key
 * @type ByteString
 * @return the certificate
 */
HSMKeyStore.prototype.getCertificate = function(labelOrIdOrKey) {
	var key = labelOrIdOrKey;
	if (!(key instanceof SmartCardHSMKey)) {
		key = this.getKey(labelOrIdOrKey);
	}
	var kid = key.getId();
	var fid = ByteString.valueOf((SmartCardHSM.EECERTIFICATEPREFIX << 8) + kid);
	var certbin = this.sc.readBinary(fid);
	return certbin;
}



/**
 * Get certificate for given label
 *
 * @param {String/Number/Key} labelOrIdOrKey the certificate label, id or key
 * @type X509
 * @return the certificate
 */
HSMKeyStore.prototype.getEndEntityCertificate = function(labelOrIdOrKey) {
	var certbin = this.getCertificate(labelOrIdOrKey);
	return new X509(certbin);
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview SmartCard-HSM Public Key Authentication Support
 */

var CVC = require("scsh/eac/CVC").CVC;
var PublicKeyReference = require("scsh/eac/PublicKeyReference").PublicKeyReference;



/**
 * Manage Public Key Authentication
 *
 * @class Class providing support for public key authentication
 * @constructor
 * @param {SmartCardHSM} sc the SmartCard-HSM used as target for PKA
 * @param {ByteString} deviceId the device id as returned by getCHR().getBytes() for the device certificate
 */
function ManagePKA(sc, deviceId) {

	this.sc = sc;
	this.deviceId = deviceId;
	this.card = sc.card;

	this.numberOfPublicKeys = 0; 		// Dummy
	this.missingPublicKeys = 0;
	this.requiredPublicKeysForAuthentication = 0;
	this.authenticatedPublicKeys = 0;
}

exports.ManagePKA = ManagePKA;



/**
 * Update internal status
 * @private
 */
ManagePKA.prototype.updateStatus = function(status) {
	this.numberOfPublicKeys = status.byteAt(0);
	this.missingPublicKeys = status.byteAt(1);
	this.requiredPublicKeysForAuthentication = status.byteAt(2);
	this.authenticatedPublicKeys = status.byteAt(3);
}



/**
 * Check if public key authentication is active for device
 *
 * @type boolean
 * @return true if supported and active
 */
ManagePKA.prototype.isActive = function() {
	var status = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x54, 0x00, 0x00, 0);
	if (this.card.SW != 0x9000) {
		return false;
	}
	this.updateStatus(status);
	return true;
}



/**
 * Check if registered public keys can be enumerated
 *
 * @type boolean
 * @return true if enumeration is supported
 */
ManagePKA.prototype.canEnumeratePublicKeys = function() {
	this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x54, 0x02, 0x00, 0, [0x9000, 0x9001, 0x6A88, 0x6A86 ] );
	return this.card.SW != 0x6A86;
}



ManagePKA.KEY_PRESENT = 1;
ManagePKA.KEY_NOT_FOUND = 2;
ManagePKA.KEY_ALREADY_AUTHENTICATED = 3;

/**
 * Check status of public key
 *
 * @param {PublicKeyReference} chr the public key reference under which the public key is registered
 * @type Number
 * @return ManagePKA.KEY_PRESENT if key is registered in SmartCard-HSM, ManagePKA.KEY_NOT_FOUND if not.
 *         ManagePKA.KEY_ALREADY_AUTHENTICATED is returned if the public key has already been authenticated
 */
ManagePKA.prototype.checkKeyStatus = function(chr) {
	var pukrefdo = new ASN1(0x83, chr.getBytes());
	var pukref = pukrefdo.getBytes();

	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x22, 0x81, 0xA4, pukref, [0x9000, 0x6A88, 0x6985 ]);

	switch(this.card.SW) {
		case 0x9000: return ManagePKA.KEY_PRESENT;
		case 0x6A88: return ManagePKA.KEY_NOT_FOUND;
		case 0x6985: return ManagePKA.KEY_ALREADY_AUTHENTICATED;
	}
}



/**
 * Perform authentication with source SmartCard-HSM and key on that device
 *
 * @param {SmartCardHSM} srcsc the SmartCard-HSM containing the private key for authentication
 * @param {Key} key the private key
 */
ManagePKA.prototype.performAuthentication = function(srcsc, key) {
	var challenge = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x84, 0x00, 0x00, 8, [0x9000]);

	var input = this.deviceId.concat(challenge);

	var crypto = srcsc.getCrypto();

	var signature = crypto.sign(key, Crypto.ECDSA_SHA256, input);

	signature = CVC.unwrapSignature(signature, 32);
	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x82, 0x00, 0x00, signature, [0x9000]);

	var status = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x54, 0x00, 0x00, 0, [0x9000] );
	this.updateStatus(status);
}



/**
 * Get number of public keys (m)
 *
 * @type Number
 * @return the number of public keys (m)
 */
ManagePKA.prototype.getNumberOfPublicKeys = function() {
	return this.numberOfPublicKeys;
}



/**
 * Get number of public keys missing for complete setup
 *
 * @type Number
 * @return the number of public keys missing for complete setup
 */
ManagePKA.prototype.getMissingPublicKeys = function() {
	return this.missingPublicKeys;
}



/**
 * Get number of keys required for successfull authentication (n)
 *
 * @type Number
 * @return the number of keys required for successfull authentication (n)
 */
ManagePKA.prototype.getRequiredPublicKeysForAuthentication = function() {
	return this.requiredPublicKeysForAuthentication;
}


/**
 * Get number of keys already authenticated in this session
 *
 * @type Number
 * @return the number of keys already authenticated in this session
 */
ManagePKA.prototype.getAuthenticatedPublicKeys = function() {
	return this.authenticatedPublicKeys;
}



/**
 * Describe current status in human readable form
 *
 * @type String
 * @return the status
 */
ManagePKA.prototype.describeStatus = function() {
	if (this.missingPublicKeys) {
		return "" + this.missingPublicKeys + " missing key(s) in " + this.requiredPublicKeysForAuthentication + " of " + this.numberOfPublicKeys + " public key authentication";
	} else {
		return "" + this.authenticatedPublicKeys + " authenticated public key(s) in " + this.requiredPublicKeysForAuthentication + " of " + this.numberOfPublicKeys + " scheme";
	}
}



/**
 * Enumerate names (CHR) or registered public keys
 *
 * @type Object
 * @return Object with property chr containing the PublicKeyReference and with property
 *         status containing ManagePKA.KEY_PRESENT if a key is registered at that slot,
 *         ManagePKA.KEY_NOT_FOUND if not. ManagePKA.KEY_ALREADY_AUTHENTICATED is returned
 *         if the public key has already been authenticated.
 */
ManagePKA.prototype.enumeratePublicKeys = function() {
	var list = [];

	for (var i = 0; i < this.numberOfPublicKeys; i++) {
		var bin = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x54, 0x02, i, 0, [0x9000, 0x9001, 0x6A88 ] );

		if (this.card.SW == 0x6A88) {
			list.push( { status: ManagePKA.KEY_NOT_FOUND } );
		} else {
			var chr = new PublicKeyReference(bin);
			if (this.card.SW == 0x9000) {
				status = ManagePKA.KEY_PRESENT;
			} else {
				status = ManagePKA.KEY_ALREADY_AUTHENTICATED;
			}
			list.push( { chr: chr, status: status} );
		}
	}
	return list;
}



/**
 * Validate and register public key
 *
 * @param {CVC} pk public key in CSR format from card
 * @param {CVC} devcert device certificate
 * @param {CVC} dicacert device issuer certificate
 * @param {Number} replace the id of the key to be replaced (0-based) or undefined
 */
ManagePKA.prototype.registerPublicKey = function(pk, devcert, dicacert, replace) {
	if (pk.getPublicKey().getSize() != 256) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Authentication key must be a 256 bit EC key");
	}

	this.sc.verifyCertificate(dicacert);
	this.sc.verifyCertificate(devcert);

	var car = pk.getOuterCAR().getBytes();

	var pukrefdo = new ASN1(0x83, car);
	var pukref = pukrefdo.getBytes();

	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x22, 0x81, 0xB6, pukref, [0x9000]);

	// Extract value of 67
	var tl = new TLVList(pk.getBytes(), TLV.EMV);
	var t = tl.index(0);
	var v = t.getValue();

	if (typeof(replace) == "number") {
		var p1 = 1;
		var p2 = replace;
	} else {
		var p1 = 0;
		var p2 = 0;
	}

	var status = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x54, p1, p2, v, 0, [0x9000] );
	this.updateStatus(status);
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview PaperKey Encoder and Decoder
 */



/**
 * Create a PaperKey encoder/decoder
 *
 * @class Encoder / Decoder for PaperKeys
 * @constructor
 */
function PaperKeyEncoding() {
	this.base  = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	this.alpha = "ABCDEFGH!JKLMN*PQRSTUVWXYZabcdefghijk%mnopqrstuvwxyz0123456789+/";
}

exports.PaperKeyEncoding = PaperKeyEncoding;

PaperKeyEncoding.E_INV_LENGTH = "Input does not contain 12 characters";
PaperKeyEncoding.E_WRONG_SEGMENT = "Wrong segment number";
PaperKeyEncoding.E_CHECK_FAILED = "Check value failed";



/**
 * Encode an 8 byte segment in human readable form.
 *
 * Based on BASE64 encoding with visually confusable characters replaced.
 *
 * I is replaced by !
 * O is replaced by *
 * l is replaced by %
 *
 * A LUHN-64 character is appended.
 *
 * A segment identifier is encoded in 2 bit at the end of the encoded 64 bit string.
 *
 * @param {Number} segment
 * @param {ByteString} data
 * @type String
 * @return the encoded string
 */
PaperKeyEncoding.prototype.encodeSegment = function(segment, data) {
	if (typeof(segment) != "number" || segment < 0) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "segment must be a positive number");
	}

	if (!(data instanceof ByteString)) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "data must be ByteString");
	}

	if (data.length != 8) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "data must be 8 byte");
	}

	var bb = new ByteBuffer();

	// Append segment number's less 2 bit
	data = data.concat(ByteString.valueOf((segment & 3) << 6));

//	print(data.toString(BASE64));

	var cs = 0;
	var cf = 1;

	for (var i = 0; i < data.length; i += 3) {
		var a = data.bytes(i, 3).toUnsigned();
		var s = (a >> 18) & 0x3F;

		cs += s << cf;
//		print("s = " + s + " cf = " + cf + " cs = " + cs);
		cf = cf ^ 1;

		bb.append(this.alpha.charAt(s));

		s = (a >> 12) & 0x3F;

		cs += s << cf;
//		print("s = " + s + " cf = " + cf + " cs = " + cs);
		cf = cf ^ 1;

		bb.append(this.alpha.charAt(s));

		s = (a >> 6) & 0x3F;

		cs += s << cf;
//		print("s = " + s + " cf = " + cf + " cs = " + cs);
		cf = cf ^ 1;

		bb.append(this.alpha.charAt(s));

		if (i <= 3) {
			s = a & 0x3F;

			cs += s << cf;
//			print("s = " + s + " cf = " + cf + " cs = " + cs);
			cf = cf ^ 1;

			bb.append(this.alpha.charAt(s));
		}
	}

	bb.append(this.alpha.charAt(cs & 0x3F));

	return bb.toString(ASCII);
}



/**
 * Decode an 8 byte segment from 12 input characters.
 *
 * Characters not in the alphabet are ignored.
 *
 * Throws GPError with GPError.INVALID_LENGTH if the input does not contain at least 12 usable characters.
 * Throws GPError with GPError.SIGNATURE_FAILED if the check digit based validation fails.
 * Throws GPError with GPError.INVALID_DATA if the segment number does not match the expected value.
 *
 * @param {Number} segment
 * @param {String} str the user input
 * @type ByteString
 * @return the 8 byte segment
 */
PaperKeyEncoding.prototype.decodeSegment = function(segment, str) {
	if (typeof(segment) != "number" || segment < 0) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "segment must be a positive number");
	}

	if (typeof(str) != "string") {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "str must be String");
	}

//	print(str);
	var bb = new ByteBuffer();

	var cs = 0;
	var cf = 1;
	var a = 0;
	var p = 0;

	for (var i = 0; i < 12; i++) {
		do	{
			var ch = str.charAt(p++);
			if (ch == "") {
				throw new GPError(module.id, GPError.INVALID_LENGTH, 0, PaperKeyEncoding.E_INV_LENGTH);
			}
			var v = this.alpha.indexOf(ch);
			if (v < 0) {
				var v = this.base.indexOf(ch);
			}
		} while (v < 0);

		cs += v << cf;
//		print("v = " + v + " cf = " + cf + " cs = " + cs);
		cf = cf ^ 1;

		a = (a << 6) | v;

		if ((i + 1 & 3) == 0) {
			bb.append(ByteString.valueOf(a, 3));
			a = 0;
		}
	}

	bb.append(ByteString.valueOf(a, 3));

	cs -= v << (1 - cf);
	if (v != (cs & 0x3F)) {
		throw new GPError(module.id, GPError.SIGNATURE_FAILED, 0, PaperKeyEncoding.E_CHECK_FAILED);
	}

//	print(bb);
	if ((bb.byteAt(8) >> 6) != (segment & 3)) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, PaperKeyEncoding.E_WRONG_SEGMENT);
	}

	var r = bb.toByteString().left(8);
	bb.clear();
	return r;
}



/**
 * Format a segment by splitting the input after each 4 characters and inserting " - "
 *
 * @param {String} str the unformatted string
 * @type String
 * @return the formatted string
 */
PaperKeyEncoding.formatSegment = function(str) {
	var res = "";
	var j = 0;
	while(j < str.length) {
		if (j > 0) {
			res += " - ";
		}
		res += str.substr(j, 4);
		j += 4;
	}
	return res;
}



/**
 * Dump a key
 *
 * @param {ByteString} data the key value (length must be a multiple of 8)
 * @type String
 * @return the formatted key with 3 groups of 4 digits per line
 */
PaperKeyEncoding.dumpKey = function(data) {
	if (!(data instanceof ByteString)) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "data must be ByteString");
	}

	if (data.length & 7 != 0) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "data must be a multiple of 8 byte");
	}

	var pc = new PaperKeyEncoding();

	var segments = data.length >> 3;

	var str = "";
	for (var i = 0; i < segments; i++) {
		var s = pc.encodeSegment(i, data.bytes(i * 8, 8));
		str += PaperKeyEncoding.formatSegment(s) + "\n";
	}
	return str;
}



PaperKeyEncoding.test = function() {
	var pc = new PaperKeyEncoding();

	var ref = ByteString.valueOf(0, 8);
	var enc = pc.encodeSegment(0, ref);
	assert("AAAAAAAAAAAA" == enc, "All zero seg 0 encoding failed");
	var res = pc.decodeSegment(0, enc);
	assert(ref.equals(res), "Decoding failed");

	var enc = pc.encodeSegment(3, ref);
	assert("AAAAAAAAAADG" == enc, "All zero seg 3 encoding failed");
	var res = pc.decodeSegment(3, enc);
	assert(ref.equals(res), "Decoding failed");

	var enc = pc.encodeSegment(7, ref);
	assert("AAAAAAAAAADG" == enc, "All zero seg 7 encoding failed");

	try {
		var res = pc.decodeSegment(6, enc);
		assert(false, "Did not detect wrong segment");
	}
	catch(e) {
		assert(e.error == GPError.INVALID_DATA, "Must be GPError.INVALID_DATA");
		assert(e.message == PaperKeyEncoding.E_WRONG_SEGMENT, "Must be PaperKeyEncoding.E_WRONG_SEGMENT");
	}

	try {
		var res = pc.decodeSegment(7, "AAAAAAAAAADA");
		assert(false, "Did not detect wrong check digit");
	}
	catch(e) {
		assert(e.error == GPError.SIGNATURE_FAILED, "Must be GPError.SIGNATURE_FAILED");
		assert(e.message == PaperKeyEncoding.E_CHECK_FAILED, "Must be PaperKeyEncoding.E_CHECK_FAILED");
	}

	var ref = ref.not();
	var enc = pc.encodeSegment(0, ref);
	assert("//////////8p" == enc, "All one seg 0 encoding failed");
	var res = pc.decodeSegment(0, enc);
	assert(ref.equals(res), "Decoding failed");
	var enc = pc.encodeSegment(3, ref);
	assert("///////////v" == enc, "All one seg 3 encoding failed");
	var res = pc.decodeSegment(3, enc);
	assert(ref.equals(res), "Decoding failed");

	var ref = ByteString.valueOf(0x04).concat(ByteString.valueOf(0, 7));
	var enc = pc.encodeSegment(0, ref);
	assert("BAAAAAAAAAAC" == enc, "First one encoding failed");
	var res = pc.decodeSegment(0, enc);
	assert(ref.equals(res), "Decoding failed");

	var ref = ByteString.valueOf(0x10, 2).concat(ByteString.valueOf(0, 6));
	var enc = pc.encodeSegment(0, ref);
	assert("ABAAAAAAAAAB" == enc, "Second one encoding failed");
	var res = pc.decodeSegment(0, enc);
	assert(ref.equals(res), "Decoding failed");

	var ref = ByteString.valueOf(0xFC).concat(ByteString.valueOf(0, 7));
	var enc = pc.encodeSegment(0, ref);
	assert("/AAAAAAAAAA+" == enc, "First max encoding failed");
	var res = pc.decodeSegment(0, enc);
	assert(ref.equals(res), "Decoding failed");

	var ref = ByteString.valueOf(0x03F0, 2).concat(ByteString.valueOf(0, 6));
	var enc = pc.encodeSegment(0, ref);
	assert("A/AAAAAAAAA/" == enc, "Second max encoding failed");
	var res = pc.decodeSegment(0, enc);
	assert(ref.equals(res), "Decoding failed");



	var crypto = new Crypto();

	var kv = crypto.generateRandom(32);
	print(PaperKeyEncoding.dumpKey(kv));

	while (true) {
		var kv = crypto.generateRandom(8);
		var str = PaperKeyEncoding.formatSegment(pc.encodeSegment(0, kv));
		print(str);
		var inp = Dialog.prompt("Enter segment " + str, "");
		if (inp == null) {
			throw new Error("User abort");
		}
		try	{
			var val = pc.decodeSegment(0, inp);
			if (!kv.equals(val)) {
				throw new GPError(module.id, GPError.INVALID_DATA, 0, "Entered value does not match key");
			}
		}
		catch(e) {
			Dialog.prompt(e.message);
		}
	}
}
/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview SmartCard-HSM Card Service
 */

// Imports
var CVC = require("scsh/eac/CVC").CVC;
var PublicKeyReference = require("scsh/eac/PublicKeyReference").PublicKeyReference;
var ChipAuthentication = require("scsh/eac/ChipAuthentication").ChipAuthentication;
var PKCS1 = require("scsh/pkcs/PKCS1").PKCS1;
var DKEK = require("scsh/sc-hsm/DKEK").DKEK;
var Bitmap = require("scsh/utils/Bitmap").Bitmap;



/**
 * Create a SmartCard-HSM access object
 * @class Class implementing support for SmartCard-HSM access
 * @constructor
 * @param {Card} card the card object
 */
function SmartCardHSM(card) {
	this.card = card;

	this.maxCAPDU = 1232;			// APDU buffer limit in JCOP 3
	this.maxRAPDU = 1232;
	this.limitedAPDUTransport = false;	// The APDU transport does not support the full response side

	if (card.readerName.indexOf("Secure Flash Card") == 0) {
		this.maxCAPDU = 478;
		this.maxRAPDU = 506;
		this.limitedAPDUTransport = true;
	} else if (card.readerName.indexOf("REINER SCT cyberJack") == 0) {
		this.maxCAPDU = 1014;
		this.maxRAPDU = 1014;
		this.limitedAPDUTransport = true;
	} else if (card.readerName.indexOf("ACS APG8201") == 0) {
		this.maxCAPDU = 1141;
		this.maxRAPDU = 1141;
		this.limitedAPDUTransport = true;
	} else if (card.readerName.indexOf("Gemalto IDBridge") == 0) {
		this.maxCAPDU = 262;
		this.maxRAPDU = 499;
		this.limitedAPDUTransport = true;
	}

	if (typeof(this.card.maxReaderCAPDU) != "undefined") {
		if (this.card.maxReaderCAPDU < this.maxCAPDU) {
			this.maxCAPDU = this.card.maxReaderCAPDU;
			this.limitedAPDUTransport = true;
		}
	}

	if (typeof(this.card.maxReaderRAPDU) != "undefined") {
		if (this.card.maxReaderRAPDU < this.maxRAPDU) {
			this.maxRAPDU = this.card.maxReaderRAPDU;
			this.limitedAPDUTransport = true;
		}
	}

	// 9 Byte CLA|INS|P1|P2|LcEx||LeEx
	// 19 Byte SM overhead (Tag 85, 3 byte length, 1 byte padding indicator, tag 97 02 <Le> and tag 8E 08 <mac>
	// 1 byte required for padding
	this.maxCData = Math.floor((this.maxCAPDU - 9 - 19) / 16) * 16 - 1;
//	print("maxCData=" + this.maxCData);

	// 19 Byte SM overhead (Tag 85, 3 byte length, 1 byte padding indicator, tag 99 02 SW1SW2 and tag 8E 08 <mac>
	// 2 byte SW1/SW2
	// 1 byte required for padding
	this.maxRData = Math.floor((this.maxRAPDU - 18 - 2) / 16) * 16 - 1;
//	print("maxRData=" + this.maxRData);

	this.useExternalHashInECDSA = false;	// Disable hashing in card if affected by bug #93

	// Check if SmartCard-HSM is already selected and authenticated
	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x20, 0x00, 0x81, 0);

	if (this.card.SW != 0x9000) {
		this.logout();		// Select application
	}

	this.namemap = [];
	this.idmap = [];
}

exports.SmartCardHSM = SmartCardHSM;


SmartCardHSM.C_DevAut = new ByteString("2F02", HEX);
SmartCardHSM.EF_TokenInfo = new ByteString("2F03", HEX);
SmartCardHSM.EF_StaticTokenInfo = new ByteString("CB00", HEX);

SmartCardHSM.PrK_DevAut = 0;
SmartCardHSM.PIN_User = 0x81;

SmartCardHSM.PRKDPREFIX = 0xC4;
SmartCardHSM.KDDPREFIX = 0xC7;
SmartCardHSM.CERTDPREFIX = 0xC8;
SmartCardHSM.DODPREFIX = 0xC9;
SmartCardHSM.CACERTIFICATEPREFIX = 0xCA;
SmartCardHSM.KEYMETAPREFIX = 0xCB;	// Changed in V2.3
SmartCardHSM.READONLYDATAPREFIX = 0xCB;	// Starting with V2.3
SmartCardHSM.KEYPREFIX = 0xCC;
SmartCardHSM.CONFIDENTIALDATAPREFIX = 0xCD;
SmartCardHSM.EECERTIFICATEPREFIX = 0xCE;
SmartCardHSM.PUBLICDATAPREFIX = 0xCF;

SmartCardHSM.ALGORITHMS = [];

// Symmetric
SmartCardHSM.ALG_CBC_ENC = 0x10;
SmartCardHSM.ALG_CBC_DEC = 0x11;
SmartCardHSM.ALG_CMAC = 0x18;

SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_CBC_ENC] = "CBC_ENC";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_CBC_DEC] = "CBC_DEC";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_CMAC] = "CMAC";


// RSA Block
SmartCardHSM.ALG_RSA_SIGN_RAW = 0x20;
SmartCardHSM.ALG_RSA_DECRYPT_RAW = 0x21;
SmartCardHSM.ALG_RSA_DECRYPT_V15 = 0x22;
SmartCardHSM.ALG_RSA_DECRYPT_OAEP = 0x23;

SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_SIGN_RAW] = "RSA_RAW";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_DECRYPT_RAW] = "RSA_DECRYPT_RAW";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_DECRYPT_V15] = "RSA_DECRYPT_V15";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_DECRYPT_OAEP] = "RSA_DECRYPT_OAEP";


// RSA Sign with hash and PKCS#1 V1.5
SmartCardHSM.ALG_RSA_SIGN_V15_SHA1 = 0x31;
SmartCardHSM.ALG_RSA_SIGN_V15_SHA256 = 0x33;
SmartCardHSM.ALG_RSA_SIGN_V15_SHA512 = 0x35;

SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_SIGN_V15_SHA1] = "RSA_V15_SHA1";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_SIGN_V15_SHA256] = "RSA_V15_SHA256";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_SIGN_V15_SHA512] = "RSA_V15_SHA512";


// RSA Sign with hash and PSS
SmartCardHSM.ALG_RSA_SIGN_PSS = 0x40;
SmartCardHSM.ALG_RSA_SIGN_PSS_SHA1 = 0x41;
SmartCardHSM.ALG_RSA_SIGN_PSS_SHA256 = 0x43;
SmartCardHSM.ALG_RSA_SIGN_PSS_SHA512 = 0x45;

SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_SIGN_PSS] = "RSA_PSS";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_SIGN_PSS_SHA1] = "RSA_PSS_SHA1";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_SIGN_PSS_SHA256] = "RSA_PSS_SHA256";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_RSA_SIGN_PSS_SHA512] = "RSA_PSS_SHA512";


// ECDSA
SmartCardHSM.ALG_ECDSA = 0x70;
SmartCardHSM.ALG_ECDSA_SHA1 = 0x71;
SmartCardHSM.ALG_ECDSA_SHA224 = 0x72;
SmartCardHSM.ALG_ECDSA_SHA256 = 0x73;
SmartCardHSM.ALG_ECDSA_SHA384 = 0x74;
SmartCardHSM.ALG_ECDSA_SHA512 = 0x75;

SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_ECDSA] = "ECDSA";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_ECDSA_SHA1] = "ECDSA_SHA1";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_ECDSA_SHA224] = "ECDSA_SHA224";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_ECDSA_SHA256] = "ECDSA_SHA256";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_ECDSA_SHA384] = "ECDSA_SHA384";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_ECDSA_SHA512] = "ECDSA_SHA512";


// ECDH
SmartCardHSM.ALG_ECDH = 0x80;
SmartCardHSM.ALG_ECDHAutPuk = 0x83;
SmartCardHSM.ALG_ECDHXKEK = 0x84;

SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_ECDH] = "ECDH";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_ECDHAutPuk] = "ECDH_AUTPUK";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_ECDHXKEK] = "ECDH_XKEK";


// Wrap
SmartCardHSM.ALG_WRAP = 0x92;
SmartCardHSM.ALG_UNWRAP = 0x93;
SmartCardHSM.ALG_REPLACE = 0x94;

SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_WRAP] = "WRAP";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_UNWRAP] = "UNWRAP";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_REPLACE] = "REPLACE";


// Derive
SmartCardHSM.ALG_DERIVE_EC_KEY = 0x98;
SmartCardHSM.ALG_DERIVE_SP800_56C = 0x99;

SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_DERIVE_EC_KEY] = "DERIVE_EC";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_DERIVE_SP800_56C] = "DERIVE_SP800_56C";


SmartCardHSM.ALG_SIGN_DEFAULT = 0xA0;
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_SIGN_DEFAULT] = "SIGN_DEFAULT";


// Key Generation
SmartCardHSM.ALG_GENERATE_AES128 = 0xB0;
SmartCardHSM.ALG_GENERATE_AES192 = 0xB1;
SmartCardHSM.ALG_GENERATE_AES256 = 0xB2;

SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_GENERATE_AES128] = "GENERATE_AES128";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_GENERATE_AES192] = "GENERATE_AES192";
SmartCardHSM.ALGORITHMS[SmartCardHSM.ALG_GENERATE_AES256] = "GENERATE_AES256";


SmartCardHSM.ALGOMAP = {};
for (var i = 0; i < SmartCardHSM.ALGORITHMS.length; i++) {
	var name = SmartCardHSM.ALGORITHMS[i];
	if (typeof(name) != "undefined") {
		SmartCardHSM.ALGOMAP[name] = i;
	}
}


SmartCardHSM.rootCerts = {
	DESRCACC100001: new CVC(new ByteString("7F218201B47F4E82016C5F290100420E44455352434143433130303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641046D025A8026CDBA245F10DF1B72E9880FFF746DAB40A43A3D5C6BEBF27707C30F6DEA72430EE3287B0665C1EAA6EAA4FA26C46303001983F82BD1AA31E03DA0628701015F200E44455352434143433130303030317F4C10060B2B0601040181C31F0301015301C05F25060102010100095F24060302010100085F37409DBB382B1711D2BAACB0C623D40C6267D0B52BA455C01F56333DC9554810B9B2878DAF9EC3ADA19C7B065D780D6C9C3C2ECEDFD78DEB18AF40778ADF89E861CA", HEX)),
	UTSRCACC100001: new CVC(new ByteString("7F218201B47F4E82016C5F290100420E55545352434143433130303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104A041FEB2FD116B2AD19CA6B7EACD71C9892F941BB88D67DCEEC92501F070011957E22122BA6C2CF5FF02936F482E35A6129CCBBA8E9383836D3106879C408EF08701015F200E55545352434143433130303030317F4C10060B2B0601040181C31F0301015301C05F25060102010100095F24060302010100085F3740914DD0FA00615C44048D1467435400423A4AD1BD37FD98D6DE84FD8037489582325C72956D4FDFABC6EDBA48184A754F37F1BE5142DD1C27D66569308CE19AAF", HEX))
}

SmartCardHSM.devAutPuk = new Key();
SmartCardHSM.devAutPuk.setType(Key.PUBLIC);
SmartCardHSM.devAutPuk.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));
SmartCardHSM.devAutPuk.setComponent(Key.ECC_QX, new ByteString("4C01EA36C5065FF47E8F0676A77CDCED6C8F745E6784F7807F5520124F81ED05", HEX));
SmartCardHSM.devAutPuk.setComponent(Key.ECC_QY, new ByteString("4112DCE471CA003442830A10C75B31F9BFADD60628F47131628C7254AD8B956A", HEX));



/**
 * Remove Root Certificate of Development SRCA
 *
 * Always call this on a productive system
 */
SmartCardHSM.disableUTSRCA = function() {
	delete SmartCardHSM.rootCerts.UTSRCACC100001;
}



/**
 * Set the list of trusted SRCA certificates
 *
 * @param {ByteString[]} srcalist the list of binary encoded SRCA certificates
 */
SmartCardHSM.setTrustedSRCACertificates = function(srcalist) {
	SmartCardHSM.rootCerts = {};
	for (var i = 0; i < srcalist.length; i++) {
		var cert = new CVC(srcalist[i]);
		GPSystem.log(GPSystem.DEBUG, module.id, "Adding as trusted SRCA certificate : " + cert);
		SmartCardHSM.rootCerts[cert.getCHR().toString()] = cert;
	}
}



/**
 * Parse list of CVC in a binary blob
 *
 * @param {ByteString} a binary blob (e.g an EF) containing concatenated CVCs
 * @type CVC[]
 * @return the list of CVCs
 */
SmartCardHSM.parseCertificateList = function(bin) {
	var a = new ASN1((new ASN1(0x30, bin)).getBytes());
	var list = [];
	for (var i = 0; i < a.elements; i++) {
		try	{
			var cvc = new CVC(a.get(i));
			list.push(cvc);
		}
		catch(e) {
			print("Index " + i + " is not a CVC");
			print(a.get(i));
		}
	}
	return list;
}



/**
 * Validate device certificate chain
 *
 * @param {Crypto} crypto the crypto provider to use
 * @param {ByteString} devAutCert the device certificate chain read from EF.C_DevAut
 * @type Key
 * @return the device authentication public key
 */
SmartCardHSM.validateCertificateChain = function(crypto, devAutCert) {
	// Device device certificate
	var cvc = new CVC(devAutCert);
	GPSystem.log(GPSystem.DEBUG, module.id, "Device Certificate    : " + cvc);

	if (cvc.getCAR().toString() == "DECA00001") {		// CA used for development version up to 0.17
		if (typeof(SmartCardHSM.rootCerts.UTSRCACC100001) == "undefined") {
			GPSystem.log(GPSystem.DEBUG, module.id, "Device certificate DECA00001 disabled");
			return null;
		}
		if (!cvc.verifyWith(crypto, SmartCardHSM.devAutPuk)) {
			GPSystem.log(GPSystem.DEBUG, module.id, "Device certificate verification failed for CAR=DECA00001");
			return null;
		}
		var path = "/" + cvc.getCAR().getHolder() + "/" + cvc.getCHR().getHolder();
		return { devicecert: cvc, publicKey:cvc.getPublicKey(), path:path };
	}

	// Decode device issuer certificate
	var len = cvc.getASN1().size;
	var cvc = new CVC(devAutCert.left(len));
	var dica = new CVC(devAutCert.bytes(len));
	GPSystem.log(GPSystem.DEBUG, module.id, "Device Issuer CA      : " + dica);

	if (typeof(SmartCardHSM.rootCerts[dica.getCAR()]) == "undefined") {
		GPSystem.log(GPSystem.DEBUG, module.id, "Unknown or disabled root CA " + dica.getCAR());
		return null;
	}

	// Determine root certificateSmartCardHSM.rootCerts[dica.getCAR()]
	var srca = SmartCardHSM.rootCerts[dica.getCAR()];
	GPSystem.log(GPSystem.DEBUG, module.id, "SmartCard-HSM Root CA : " + srca);

	// Validate chain
	var srcapuk = srca.getPublicKey();
	var oid = srca.getPublicKeyOID();
	if (!dica.verifyWith(crypto, srcapuk, oid)) {
		GPSystem.log(GPSystem.DEBUG, module.id, "DICA certificate not verified");
		return null;
	}

	var dicapuk = dica.getPublicKey(srcapuk);
	if (!cvc.verifyWith(crypto, dicapuk, oid)) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Device certificate verification failed");
		return null;
	}

	var path = "/" + srca.getCHR().getHolder() + "/" + dica.getCHR().getHolder() + "/" + cvc.getCHR().getHolder();
	return { srca: srca, dica: dica, devicecert: cvc, publicKey:cvc.getPublicKey(srcapuk), path:path };
}



/**
 * Decode algorithm list and return string array with names
 *
 * @param {ByteString} list the algorithm list, e.g. as returned in the key meta data
 * @type String[]
 * @return the list of algorithm names
 */
SmartCardHSM.decodeAlgorithmList = function(list) {
	var a = [];
	for (var i = 0; i < list.length; i++) {
		a.push(SmartCardHSM.ALGORITHMS[list.byteAt(i)]);
	}

	return a;
}



/**
 * Parse and encode the algorithm list containing either algorithm ids or names
 *
 * @param {String | String[]} list the list of algorithms
 * @type ByteString
 * @return the algorithm list
 */
SmartCardHSM.encodeAlgorithmList = function(list) {
	if (typeof(list) == "string") {
		if (list.indexOf(".") != -1) {
			list = list.split(".");
		} else {
			list = list.split(",");
		}
	}

	var bb = new ByteBuffer();

	for (var i = 0; i < list.length; i++) {
		var e = list[i].trim();
		var id = NaN;
		if (e.length == 2) {
			id = parseInt(e, 16);
		}
		if (isNaN(id)) {
			var id = SmartCardHSM.ALGOMAP[e.toUpperCase()];
			if (typeof(id) == "undefined") {
				print("Unknown keyword or number " + list[i]);
				return null;
			}
		}
		bb.append(id);
	}

	return bb.toByteString();
}



/**
 * Return a string describing the SmartCard-HSM Version
 *
 * @type String
 * @return the version string
 */
SmartCardHSM.prototype.getVersionInfo = function() {
	if (typeof(this.major) == "undefined") {
		return "Version unknown";
	}

	var str = "Version " + this.major + "." + this.minor;

	if (typeof(this.platform) != "undefined") {
		switch(this.platform) {
			case 0: str += " on JCOP"; break;
			case 1: str += " Demo on JCOP"; break;
			case 2: str += " on JCOP 2.4.1r3"; break;
			case 3: str += " on JCOP 2.4.2r3"; break;
			case 4: str += " on JCOP 2.4.2r1"; break;
			case 5: str += " on JCOP 3"; break;
			case 6: str += " on JCOP 4"; break;
			case 7: str += " on JCOP 4.5"; break;
		}
	}
	return str;
}



/**
 * Return the native OCF SmartCardHSMCardService
 *
 * @type de.cardcontact.opencard.service.smartcardhsm.SmartCardHSMCardService
 * @return the OCF SmartCardHSMCardService
 */
SmartCardHSM.prototype.getNativeCardService = function() {
	if (this.nativeCardService) {
		return this.nativeCardService;
	}
	this.nativeCardService = this.card.getCardService("de.cardcontact.opencard.service.smartcardhsm.SmartCardHSMCardService");

	return this.nativeCardService;
}



/**
 * Validate device certificate chain
 *
 * @param {Crypto} crypto the crypto provider to use
 * @type Key
 * @return the device authentication public key
 */
SmartCardHSM.prototype.validateCertificateChain = function(crypto) {
	// Read concatenation of both certificates
	var devAutCert = this.readBinary(SmartCardHSM.C_DevAut);
	var chain = SmartCardHSM.validateCertificateChain(crypto, devAutCert);
	if (chain == null) {
		return null;
	}
	return chain.publicKey;
}



/**
 * Open a secure channel using device authentication
 *
 * @param {Crypto} crypto the crypto provider to use
 * @param {Key} devAuthPK the device authentication public key
 * @param {Number} Key.AES or Key.DES to request AES or DES secure messaging (Default probe)
 * @type ISOSecureChannel
 * @return the initialized secure channel
 */
SmartCardHSM.prototype.openSecureChannel = function(crypto, devAuthPK, smtype) {

	var type;

	if (smtype) {
		type = smtype;
	} else {
		type = Key.AES;
	}

	if (type == Key.DES) {
		var protocol = new ByteString("id-CA-ECDH-3DES-CBC-CBC", OID);
	} else {
		var protocol = new ByteString("id-CA-ECDH-AES-CBC-CMAC-128", OID);
	}

	// Try AES first and fallback to DES is not supported by card

	var bb = new ByteBuffer();
	bb.append(new ASN1(0x80, protocol).getBytes());

	this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x22, 0x41, 0xA4, bb.toByteString(), [0x9000, 0x6A80]);

	if (this.card.SW == 0x6A80) {
		if (smtype) {
			throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 3, "Requested secure messaging not supported");
		}

		type = Key.DES;

		var protocol = new ByteString("id-CA-ECDH-3DES-CBC-CBC", OID);

		var bb = new ByteBuffer();
		bb.append(new ASN1(0x80, protocol).getBytes());

		this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO, 0x00, 0x22, 0x41, 0xA4, bb.toByteString(), [0x9000]);
	}

	var ca = new ChipAuthentication(crypto, protocol, devAuthPK);	// For domain parameter
	ca.noPadding = true;
	ca.generateEphemeralCAKeyPair();

	var ephemeralPublicKeyIfd = ca.getEphemeralPublicKey();

	var dado = new ASN1(0x7C, new ASN1(0x80, ephemeralPublicKeyIfd));

	var dadobin = this.card.sendSecMsgApdu(Card.CPRO|Card.CENC|Card.RPRO|Card.RENC, 0x00, 0x86, 0x00, 0x00, dado.getBytes(), 0, [0x9000]);

//	GPSystem.log(GPSystem.DEBUG, module.id, dadobin);

	var dado = new ASN1(dadobin);
	assert(dado.tag == 0x7C);
	assert(dado.elements == 2);
	var nonceDO = dado.get(0);
	assert(nonceDO.tag == 0x81);
	var nonce = nonceDO.value;

	var authTokenDO = dado.get(1);
	assert(authTokenDO.tag == 0x82);
	var authToken = authTokenDO.value;

	var enc = new ByteString("04", HEX);
	enc = enc.concat(devAuthPK.getComponent(Key.ECC_QX));
	enc = enc.concat(devAuthPK.getComponent(Key.ECC_QY));

	GPSystem.log(GPSystem.DEBUG, module.id, "Encoded CA public key: " + enc);
	ca.performKeyAgreement(enc, nonce);
	var result = ca.verifyAuthenticationToken(authToken);

	if (!result) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Authentication token invalid");
		throw new Error("Authentication token invalid");
	}
	GPSystem.log(GPSystem.DEBUG, module.id, "Authentication token valid");

	if (type == Key.DES) {
		var sm = new IsoSecureChannel(crypto);
		sm.setEncKey(ca.kenc);
		sm.setMacKey(ca.kmac);
		sm.setMACSendSequenceCounter(new ByteString("0000000000000000", HEX));
	} else {
		var sm = new IsoSecureChannel(crypto, IsoSecureChannel.SSC_SYNC_ENC_POLICY);
		sm.setEncKey(ca.kenc);
		sm.setMacKey(ca.kmac);
		sm.setMACSendSequenceCounter(new ByteString("00000000000000000000000000000000", HEX));
	}

	this.card.setCredential(sm);
	this.smactive = true;
	return sm;
}



/**
 * Update transparent EF referenced by file identifier
 *
 * @param {ByteString} fid the two byte file identifier
 * @param {Number} offset the offset into the EF
 * @param {ByteString} data the data to write
 */
SmartCardHSM.prototype.updateBinary = function(fid, offset, data) {
	if (typeof(offset) == "undefined") {
		offset = 0;
	}

	var bytesLeft = data.length;
	var sent = 0;

	// 8 bytes are required for T54(4) and T53(4)
	var blksize = this.maxCData - 8;

	while (bytesLeft > 0) {
		var toSend = bytesLeft >= blksize ? blksize : bytesLeft;

		var t54 = new ASN1(0x54, ByteString.valueOf(offset, 2));
		var t53 = new ASN1(0x53, data.bytes(sent, toSend));

		var cdata = t54.getBytes().concat(t53.getBytes());
		this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xD7, fid.byteAt(0), fid.byteAt(1), cdata, [0x9000]);

		bytesLeft -= toSend;
		offset += toSend;
		sent += toSend;
	}
}



/**
 * Read transparent EF referenced by file identifier
 *
 * @param {ByteString} fid the two byte file identifier (optional - use currently selected EF if absent)
 * @param {Number} offset the offset into the EF (optional)
 * @param {Number} length the number of byte to read (optional)
 * @type ByteString
 * @return the data read from the EF
 */
SmartCardHSM.prototype.readBinary = function(fid, offset, length) {
	if (typeof(offset) == "undefined") {
		offset = 0;
	}
	if (typeof(fid) == "undefined") {
		fid = new ByteString("0000", HEX);
	}

	var rsp = new ByteBuffer();
	do	{
		var t54 = new ASN1(0x54, ByteString.valueOf(offset, 2));

		if (length || this.limitedAPDUTransport || this.smactive) {				// Is a length defined ?
			var le = (!length || (length > this.maxRData)) ? this.maxRData: length;		// Truncate if larger than maximum APDU size ?
		} else {
			var le = this.maxRAPDU <= 256 ? 0 : 65536;					// Get all with Le=0 in either short or extended APDU mode
		}

		var data = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xB1, fid.byteAt(0), fid.byteAt(1), t54.getBytes(), le, [0x9000, 0x6282]);

		if (data.length == 0) {
			break;
		}

		rsp.append(data);
		offset += data.length;

		if (length) {					// Length was defined, see if we already got everything
			length -= data.length;
			if (length <= 0) {
				break;
			}
		}
	} while ((this.card.SW == 0x9000) || (this.card.SW == 0x6282));

	return rsp.toByteString();
}



/**
 * Select the file or key an return the FCP
 *
 * @param {ByteString} fid the two byte file object identifier
 */
SmartCardHSM.prototype.selectFile = function(fid) {
	var fcp = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xA4, 0x00, 0x04, fid, 0, [0x9000]);
	return fcp;
}



/**
 * Try selecting the file to see if is present
 *
 * @param {ByteString} fid the two byte file object identifier
 */
SmartCardHSM.prototype.hasFile = function(fid) {
	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xA4, 0x00, 0x04, fid, 0);
	return this.card.SW == 0x9000;
}



/**
 * Delete file system object (EF or key)
 *
 * @param {ByteString} fid the two byte file object identifier
 */
SmartCardHSM.prototype.deleteFile = function(fid) {
	return this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xE4, 0x02, 0x00, fid, [0x9000]);
}



/**
 * Strips leading zeros of a ByteString
 *
 * @param {ByteString} value the ByteString value
 * @return the stripped ByteString object, may be an empty ByteString
 * @type ByteString
 */
SmartCardHSM.stripLeadingZeros = function(value) {
	var i = 0;
	for (; (i < value.length) && (value.byteAt(i) == 0); i++);

	return value.right(value.length - i);
}



/**
 * Build input for Generate Asymmetric Key Pair command for generating an ECC key pair
 *
 * @param {PublicKeyReference} innerCAR the CA the request shall be directed to
 * @param {ByteString} algo the public key algorithm
 * @param {PublicKeyReference} chr the certificate holder reference associated with this key
 * @param {Key} dp the domain parameter for the key
 * @param {PublicKeyReference} outerCAR the certificate holder reference of the public key for verifying the outer signature
 * @param {Key} privateKey optional parameter to supply a private key value for import. This only works with the development version
 *              of the SmartCard-HSM.
 * @type ByteString
 * @return the encoded C-Data for GENERATE ASYMMETRIC KEY PAIR
 */
SmartCardHSM.buildGAKPwithECC = function(innerCAR, algo, chr, dp, outerCAR, priKey) {

	// Encode G
	var bb = new ByteBuffer();
	// uncompressed encoding
	bb.append(new ByteString("04", HEX));
	bb.append(dp.getComponent(Key.ECC_GX));
	bb.append(dp.getComponent(Key.ECC_GY));
	var G = bb.toByteString();

	var t = new ASN1(0x30,
				new ASN1("CPI", 0x5F29, new ByteString("00", HEX)),
				new ASN1("CAR", 0x42, innerCAR.getBytes()),
				new ASN1("Public Key", 0x7F49,
					new ASN1("Object Identifier", 0x06, algo),
					new ASN1("Prime Modulus", 0x81, dp.getComponent(Key.ECC_P)),
					new ASN1("First coefficient a", 0x82, dp.getComponent(Key.ECC_A)),
					new ASN1("Second coefficient b", 0x83, dp.getComponent(Key.ECC_B)),
					new ASN1("Base Point G", 0x84, G),
					new ASN1("Order of the base point", 0x85, dp.getComponent(Key.ECC_N)),
					new ASN1("Cofactor f", 0x87, SmartCardHSM.stripLeadingZeros(dp.getComponent(Key.ECC_H)))
				),
				new ASN1("CHR", 0x5F20, chr.getBytes())
			);

	if (typeof(outerCAR) != "undefined") {
		t.add(new ASN1("OuterCAR", 0x45, outerCAR.getBytes()));
	}

	if (priKey != undefined) {
		var d = new ASN1("Private Key", 0x8A, priKey.getComponent(Key.ECC_D));
		t.get(2).add(d);
//		GPSystem.log(GPSystem.DEBUG, module.id, t);
	}
	return t.value;
}



/**
 * Build input for Generate Asymmetric Key Pair command for generating a RSA key pair
 *
 * @param {PublicKeyReference} innerCAR the CA the request shall be directed to
 * @param {ByteString} algo the public key algorithm
 * @param {PublicKeyReference} chr the certificate holder reference associated with this key
 * @param {Number} keysize the module size in bits (1024, 1536 or 2048)
 * @param {PublicKeyReference} outerCAR the certificate holder reference of the public key for verifying the outer signature
 * @type ByteString
 * @return the encoded C-Data for GENERATE ASYMMETRIC KEY PAIR
 */
SmartCardHSM.buildGAKPwithRSA = function(innerCAR, algo, chr, keysize, outerCAR) {

	var t = new ASN1(0x30,
				new ASN1("CPI", 0x5F29, new ByteString("00", HEX)),
				new ASN1("CAR", 0x42, innerCAR.getBytes()),
				new ASN1("Public Key", 0x7F49,
					new ASN1("Object Identifier", 0x06, algo),
					new ASN1("Public Key Exponent", 0x82, ByteString.valueOf(65537)),
					new ASN1("Key Size", 0x02, ByteString.valueOf(keysize))
				),
				new ASN1("CHR", 0x5F20, chr.getBytes())
			);

	if (typeof(outerCAR) != "undefined") {
		t.add(new ASN1("OuterCAR", 0x45, outerCAR.getBytes()));
	}
	return t.value;
}



/**
 * Create a PKCS#15 PrivateECCKey description
 *
 * @param {Number/ByteString} keyid the key identifier
 * @param {String} label the key label
 * @type ASN1
 * @return the PrivateECCKey description
 */
SmartCardHSM.buildPrkDforECC = function(keyid, label, keysize) {
	if (typeof(keyid) == "number") {
		keyid = ByteString.valueOf(keyid);
	}

	var prkd = 	new ASN1(0xA0,
					new ASN1(ASN1.SEQUENCE,
						new ASN1(ASN1.UTF8String, new ByteString(label, UTF8))
//						new ASN1(ASN1.BIT_STRING, new ByteString("0780", HEX)),
//						new ASN1(ASN1.OCTET_STRING, new ByteString("01", HEX))
					),
					new ASN1(ASN1.SEQUENCE,
						new ASN1(ASN1.OCTET_STRING, keyid),
						new ASN1(ASN1.BIT_STRING, new ByteString("072080", HEX))
					),
					new ASN1(0xA1,
						new ASN1(ASN1.SEQUENCE,
							new ASN1(ASN1.SEQUENCE,
								new ASN1(ASN1.OCTET_STRING, new ByteString("", HEX))
							)
						)
					)
				);

	if (keysize != undefined) {
		assert(keysize > 0, "Key size must be > 0");
		var tlvint = ByteString.valueOf(keysize);
		if (tlvint.byteAt(0) >= 0x80) {
			tlvint = (new ByteString("00", HEX)).concat(tlvint);
		}
		prkd.get(2).get(0).add(new ASN1(ASN1.INTEGER, tlvint));
	}

//	GPSystem.log(GPSystem.DEBUG, module.id, prkd);
	return prkd;
}



/**
 * Create a PKCS#15 PrivateRSAKey description
 *
 * @param {Number/ByteString} keyid the key identifier
 * @param {String} label the key label
 * @param {Number} modulussize
 * @type ASN1
 * @return the PrivateECCKey description
 */
SmartCardHSM.buildPrkDforRSA = function(keyid, label, modulussize) {
	if (typeof(keyid) == "number") {
		keyid = ByteString.valueOf(keyid);
	}

	var prkd = 	new ASN1(0x30,
					new ASN1(ASN1.SEQUENCE,
						new ASN1(ASN1.UTF8String, new ByteString(label, UTF8))
//						new ASN1(ASN1.BIT_STRING, new ByteString("0780", HEX)),
//						new ASN1(ASN1.OCTET_STRING, new ByteString("01", HEX))
					),
					new ASN1(ASN1.SEQUENCE,
						new ASN1(ASN1.OCTET_STRING, keyid),
						new ASN1(ASN1.BIT_STRING, new ByteString("0274", HEX))
					),
					new ASN1(0xA1,
						new ASN1(ASN1.SEQUENCE,
							new ASN1(ASN1.SEQUENCE,
								new ASN1(ASN1.OCTET_STRING, new ByteString("", HEX))
							),
							new ASN1(ASN1.INTEGER, ByteString.valueOf(modulussize))
						)
					)
				);
//	GPSystem.log(GPSystem.DEBUG, module.id, prkd);
	return prkd;
}



/**
 * Create a PKCS#15 SecretKey description
 *
 * @param {Number/ByteString} keyid the key identifier
 * @param {String} label the key label
 * @param {Number} keysize
 * @type ASN1
 * @return the secret key description
 */
SmartCardHSM.buildSKDforAES = function(keyid, label, keysize) {
	if (typeof(keyid) == "number") {
		keyid = ByteString.valueOf(keyid);
	}

	var skd =
		new ASN1(0xA8,
			// CommonObjectAttributes
			new ASN1(ASN1.SEQUENCE,
				new ASN1(ASN1.UTF8String, new ByteString(label, UTF8))
				//						new ASN1(ASN1.BIT_STRING, new ByteString("0780", HEX)),
				//						new ASN1(ASN1.OCTET_STRING, new ByteString("01", HEX))
			),
			// ClassAttributes: CommonKeyAttributes
			new ASN1(ASN1.SEQUENCE,
				new ASN1(ASN1.OCTET_STRING, keyid),
				new ASN1(ASN1.BIT_STRING, new ByteString("07C010", HEX))
			),
			// SubClassAttribute: CommonSecretKeyAttributes
			new ASN1(0xA0,
				new ASN1(ASN1.SEQUENCE,
					new ASN1(ASN1.INTEGER, ByteString.valueOf(keysize, 2))
				)
			),
			new ASN1(0xA1,
				new ASN1(ASN1.SEQUENCE,
					new ASN1(ASN1.SEQUENCE,
						new ASN1(ASN1.OCTET_STRING, new ByteString("", HEX))
					)
				)
			)

		);
//	GPSystem.log(GPSystem.DEBUG, module.id, skd);
	return skd;
}



/**
 * Create a PKCS#15 certificate description
 *
 * @param {ByteString} commonObjectFlags default value is '0640'
 * @param {String} label the key label
 * @param {Key} pubKey the public key
 * @param {ByteString} certFID the file identifier of the certificate
 * @type ASN1
 * @return the certificate description
 */
SmartCardHSM.buildCertDescription = function(label, commonObjectFlags, pubKey, certFID) {
	if (!commonObjectFlags) {
		commonObjectFlags = new ByteString("0x0640", HEX);
	}

	// generate subject key id
	var qx = pubKey.getComponent(Key.ECC_QX)
	if (qx) {
	  var enc = qx;
	} else {
	  var enc = pubKey.getComponent(Key.MODULUS);
	}
	var crypto = new Crypto();
	var subjectKeyID = crypto.digest(Crypto.SHA_1, enc);

	var desc = 	new ASN1(ASN1.SEQUENCE,
				new ASN1(ASN1.SEQUENCE,			// common object attributes
					new ASN1(ASN1.UTF8String, new ByteString(label, UTF8)),
					new ASN1(ASN1.BIT_STRING, commonObjectFlags)
				),
				new ASN1(ASN1.SEQUENCE,			// common certificate attributes
					  new ASN1(ASN1.OCTET_STRING, subjectKeyID)
				),
				new ASN1(0xA1,					// type attributes
					new ASN1(ASN1.SEQUENCE,			// x.509 certificate attributes
						new ASN1(ASN1.SEQUENCE,			// path
							new ASN1(ASN1.OCTET_STRING, certFID)
						)
					)
				)
			);
	return desc;
}



/**
 * Create a PKCS#15 data object description
 *
 * @param {String} label the key label
 * @param {ByteString} commonObjectFlags default value is '0640'
 * @param {ByteString} fid the file identifier of the data object
 * @param {String} applicationName the application name (Default "SmartCard-HSM")
 * @type ASN1
 * @return the Data Object Description
 */
SmartCardHSM.buildDataObjectDescription = function(label, commonObjectFlags, fid, applicationName) {
	var privateDO = fid.byteAt(0) == SmartCardHSM.CONFIDENTIALDATAPREFIX;

	if (applicationName == undefined) {
		applicationName = "SmartCard-HSM";
	}
	if (!commonObjectFlags) {
		if (privateDO) {
			commonObjectFlags = new ByteString("0x06C0", HEX);
		} else {
			commonObjectFlags = new ByteString("0x0640", HEX);
		}
	}

	var desc = 	new ASN1(ASN1.SEQUENCE,
				new ASN1(ASN1.SEQUENCE,			// common object attributes
					new ASN1(ASN1.UTF8String, new ByteString(label, UTF8)),
					new ASN1(ASN1.BIT_STRING, commonObjectFlags)
				),
				new ASN1(ASN1.SEQUENCE,			// common data object attributes
					  new ASN1(ASN1.UTF8String, new ByteString(applicationName, UTF8))
				),
				new ASN1(0xA1,					// type attributes
					new ASN1(ASN1.SEQUENCE,			// path
						new ASN1(ASN1.OCTET_STRING, fid)
					)
				)
			);

	if (privateDO) {
		desc.get(0).add(new ASN1(ASN1.OCTET_STRING, ByteString.valueOf(1)));
	}
	return desc;
}



/**
 * Create a PKCS#15 like KeyDomain description
 *
 * @param {String} label the key domain label
 * @type ASN1
 * @return the KeyDomain description
 */
SmartCardHSM.buildKeyDomainDescription = function(label) {
	var kdd = 	new ASN1(ASN1.SEQUENCE,
					new ASN1(ASN1.SEQUENCE,
						new ASN1(ASN1.UTF8String, new ByteString(label, UTF8))
					)
				);

	return kdd;
}



/**
 * Dump C-Data of Generate Asymmetric Key Pair command
 *
 * @param {ByteString} keydata the content of C-Data
 */
SmartCardHSM.dumpKeyData = function(keydata) {
	GPSystem.log(GPSystem.DEBUG, module.id, keydata);
	var a = new ASN1(0x30, keydata);
	var a = new ASN1(a.getBytes());
	for (var i = 0; i < a.elements; i++) {
		GPSystem.log(GPSystem.DEBUG, module.id, a.get(i));
	}
}



/**
 * Generate an asymmetric key pair
 *
 * @param {Number} newkid key identifier for new key
 * @param {Number} signkid key identifier for signing the new public key
 * @param {ByteString} keydata the key data template
 * @type ByteString
 * @return the certificate signing request containing the new public key
 */
SmartCardHSM.prototype.generateAsymmetricKeyPair = function(newkid, signkid, keydata) {

	if (!this.limitedAPDUTransport) { // Use extended length
		var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x46, newkid, signkid, keydata, 65536, [0x9000]);
	} else {
		this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x46, newkid, signkid, keydata, [0x9000]);
		var rsp = this.readBinary(ByteString.valueOf(0xCE00 + newkid), 0);
	}

	return rsp;
}



/**
 * Generate a symmetric key
 *
 * @param {Number} newkid key identifier for new key
 * @param {Number} algo key generation algorithm
 * @param {ByteString} keydata the key data template
 * @type ByteString
 * @return
 */
SmartCardHSM.prototype.generateSymmetricKey = function(newkid, algo, keydata) {

	var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x48, newkid, algo, keydata, 0, [0x9000]);
	return rsp;
}



/**
 * Return true is SmartCard-HSM is initialized
 *
 * @type Boolean
 * @return true if initialized
 */
SmartCardHSM.prototype.isInitialized = function() {
	var sw = this.queryUserPINStatus();
	if ((sw == 0x6984) || (sw == 0x6A88)) {		// V1.2: Not initialized / V2.0: Transport PIN
		var sw = this.queryInitializationCodeStatus();
		if (sw == 0x6A88) {
			return false;
		}
	}
	return true;
}



/**
 * Initialize device and clear all keys and files
 *
 * @param {ByteString} options two byte option mask
 * @param {ByteString} initialPIN initial user PIN value
 * @param {ByteString} initializationCode secret code for device initialization (set during first use)
 * @param {Number} retryCounterInitial retry counter for user PIN
 * @param {Number} keyshares number of device key encryption key shares (optional)
 */
SmartCardHSM.prototype.initDevice = function(options, initialPIN, initializationCode, retryCounterInitial, keyshares) {
	var s = new ASN1(0x30,
				new ASN1(0x80, options),
				new ASN1(0x81, initialPIN),
				new ASN1(0x82, initializationCode),
				new ASN1(0x91, ByteString.valueOf(retryCounterInitial))
				);

	if (typeof(keyshares) != "undefined") {
		s.add(new ASN1(0x92, ByteString.valueOf(keyshares)));
	}
	this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x50, 0x00, 0x00, s.value, [0x9000]);
}



/**
 * Determine free memory
 *
 * @type Number
 * @return the number of available bytes (this values is capped to 32767 on JCOP 2.4.1)
 */
SmartCardHSM.prototype.getFreeMemory = function() {
	var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x50, 0x00, 0x00, 0, [0x9000, 0x6700]);

	if (this.card.SW != 0x9000) {
		return -1;
	}

	this.options = rsp.bytes(0, 2).toUnsigned();
	this.major = rsp.byteAt(rsp.length - 2);
	this.minor = rsp.byteAt(rsp.length - 1);
	this.platform = rsp.byteAt(rsp.length - 3);
	return rsp.bytes(rsp.length - 7, 4).toUnsigned();
}



/**
 * Check if the RESET RETRY COUNTER command is enabled
 *
 * @type Boolean
 * @return true if enable during initialization
 */
SmartCardHSM.prototype.isResetRetryCounterEnabled = function() {
	if (typeof(this.options) == "undefined") {
		this.getFreeMemory();
	}
	return (this.options & 1) == 1;
}



/**
 * Check if the RESET RETRY COUNTER command can reset the PIN
 *
 * @type Boolean
 * @return true if enable during initialization
 */
SmartCardHSM.prototype.isPINResetEnabled = function() {
	if (typeof(this.options) == "undefined") {
		this.getFreeMemory();
	}
	return (this.options & 0x20) == 0;
}



/**
 * Parse the key domain status returned from the device
 *
 * @param {ByteString} status the R-DATA from the MANAGE KEY DOMAIN command
 * @type object
 * @return the decoded status Info
 */
SmartCardHSM.prototype.parseKeyDomainStatus = function(status) {
	if (status.length == 0) {
		return { sw: this.card.SW };
	}

	var statusObject = {
		sw: this.card.SW,
		shares: status.byteAt(0),
		outstanding: status.byteAt(1),
		kcv: status.bytes(2, 8)
	}

	if (status.length > 10) {
		statusObject.keyDomain = status.bytes(10);
	}

	return statusObject;
}



/*
 * Create DKEK Key Domain
 *
 * @param {Number} keyDomain number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command
 * @param {Number} shares the number of DKEK shares to import
 * @type Object
 * @return object with properties sw{Number}, shares{Number}, outstanding{Number} and kcv{ByteString}
 */
SmartCardHSM.prototype.createDKEKKeyDomain = function(keyDomain, shares, label) {
	if (typeof(keyDomain) != "number") {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "keyDomain must be a number");
	}
	if (typeof(shares) != "number") {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "shares must be a number");
	}

	if (label && typeof(label) != "string") {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "label must be a string");
	}

	var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x52, 0x01, keyDomain, ByteString.valueOf(shares), 0, [0x9000]);

	var status = this.parseKeyDomainStatus(rsp);

	if (label) {
		status.label = label;
		var fid = ByteString.valueOf((SmartCardHSM.KDDPREFIX << 8) + keyDomain);
		if (this.hasFile(fid)) {
			this.deleteFile(fid);
		}

		var kdd = SmartCardHSM.buildKeyDomainDescription(status.label);
		this.updateBinary(fid, 0, kdd.getBytes());
	}

	return status;
}



/**
 * Create XKEK Key Domain
 *
 * @param {Number} keyDomain number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command
 * @param {ByteString} keyDomainMembership either a 64 byte signature (old format) or a encoded TLV object with tag 54 or 55
 * @return object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and the key domain UID{ByteString}
 * @type Object
 */
SmartCardHSM.prototype.createXKEKKeyDomain = function(keyDomain, groupSignerPublicKey, keyDomainMembership) {
	if (typeof(keyDomain) != "number") {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "keyDomain must be a number");
	}
	if ((keyDomain < 0) || (keyDomain > 0xFF)) {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "keyDomain must be between 0 and 255");
	}
	if (!(groupSignerPublicKey instanceof CVC)) {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "groupSignerPublicKey must be a CVC instance");
	}
	if (!(keyDomainMembership instanceof ByteString)) {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "keyDomainMembership must be a ByteString");
	}

	var car = groupSignerPublicKey.getOuterCAR().getBytes();
	var chr = groupSignerPublicKey.getCHR();

	var pukrefdo = new ASN1(0x83, car);
	var pukref = pukrefdo.getBytes();

	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x22, 0x81, 0xB6, pukref, [0x9000]);

	if (keyDomainMembership.length == 64) {
		keyDomainMembership = new ASN1(0x53, keyDomainMembership).getBytes();
	}
	var cdata = groupSignerPublicKey.getASN1().value.concat(keyDomainMembership);

	if (cdata.length <= this.maxCData) {
		var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x52, 0x02, keyDomain, cdata, 0, [0x9000]);
	} else {
		this.updateBinary(ByteString.valueOf(0x2F10), 0, cdata);
		var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x52, 0x02, keyDomain, 0, [0x9000]);
	}

	var status = this.parseKeyDomainStatus(rsp);

	status.label = chr.toString();

	var fid = ByteString.valueOf((SmartCardHSM.KDDPREFIX << 8) + keyDomain);
	if (this.hasFile(fid)) {
		this.deleteFile(fid);
	}

	var kdd = SmartCardHSM.buildKeyDomainDescription(status.label);
	this.updateBinary(fid, 0, kdd.getBytes());

	return status;
}



/**
 * Associate XKEK Key Domain
 *
 * @param {Number} keyDomain number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command
 * @param {ByteString} keyDomainUID a encoded TLV object with tag 51 containing the key domain uid of the associated domain
 * @param {ByteString} keyDomainAssociation a encoded TLV object with tag 56 or 57
 * @return object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and the key domain UID{ByteString}
 * @type Object
 */
SmartCardHSM.prototype.associateXKEKKeyDomain = function(keyDomain, groupSignerPublicKey, keyDomainUID, keyDomainAssociation) {
	if (typeof(keyDomain) != "number") {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "keyDomain must be a number");
	}
	if ((keyDomain < 0) || (keyDomain > 0xFF)) {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "keyDomain must be between 0 and 255");
	}
	if (!(groupSignerPublicKey instanceof CVC)) {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "groupSignerPublicKey must be a ByteString");
	}
	if (!(keyDomainUID instanceof ByteString)) {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "keyDomainUID must be a ByteString");
	}
	if (!(keyDomainAssociation instanceof ByteString)) {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "keyDomainAssociation must be a ByteString");
	}

	var car = groupSignerPublicKey.getOuterCAR().getBytes();

	var pukrefdo = new ASN1(0x83, car);
	var pukref = pukrefdo.getBytes();

	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x22, 0x81, 0xB6, pukref, [0x9000]);

	var cdata = groupSignerPublicKey.getASN1().value.concat(keyDomainUID).concat(keyDomainAssociation);

	if (cdata.length <= this.maxCData) {
		var status = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x52, 0x05, keyDomain, cdata, 0);
	} else {
		this.updateBinary(ByteString.valueOf(0x2F10), 0, cdata);
		var status = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x52, 0x05, keyDomain, 0);
	}

	return this.parseKeyDomainStatus(status);
}



/**
 * Derive XKEK
 *
 * @param {Number} keyDomain number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command
 * @param {ByteString} derivationParam
 * @return object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and the key domain UID{ByteString}
 * @type Object
 */
SmartCardHSM.prototype.deriveXKEK = function(keyid, peerPublicKey, derivationParam) {
	if (typeof(keyid) != "number") {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "keyid must be a number");
	}
	if ((keyid < 1) || (keyid > 0xFF)) {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "keyid must be between 1 and 255");
	}
	if (!(peerPublicKey instanceof CVC)) {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "peerPublicKey must be a CVC");
	}
	if (!(derivationParam instanceof ByteString)) {
		throw new GPError("SmartCardHSM", GPError.INVALID_DATA, 1, "derivationParam must be a ByteString");
	}

	var car = peerPublicKey.getOuterCAR().getBytes();

	var pukrefdo = new ASN1(0x83, car);
	var pukref = pukrefdo.getBytes();

	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x22, 0x81, 0xB6, pukref, [0x9000]);

	var kdp = new ASN1(0x50, derivationParam).getBytes();
	var cdata = peerPublicKey.getASN1().value.concat(kdp);

	if (cdata.length <= this.maxCData) {
		// Le is usually not required, but versions 3.1 to 3.3 fail without Le (#178)
		this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x62, keyid, 0x84, cdata, 0, [0x9000]);
	} else {
		this.updateBinary(ByteString.valueOf(0x2F10), 0, cdata);
		this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x62, keyid, 0x84, [0x9000]);
	}
}



/**
 * Query the status of the key domain
 *
 * @param {Number} keyDomain the number of the key domain which will be queried, default is 0
 * @type Object
 * @return object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and for a XKEK key domain the key domain UID{ByteString}
 */
SmartCardHSM.prototype.queryKeyDomainStatus = function(keyDomain) {
	if (!keyDomain) {
		keyDomain = 0;
	}

	var status = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x52, 0x00, keyDomain, 0);

	return this.parseKeyDomainStatus(status);
}



/**
 * Delete the key encryption key in a key domain
 *
 * @param {Number} keyDomain the number of the key domain
 */
SmartCardHSM.prototype.deleteKEK = function(keyDomain) {
	var status = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x52, 0x04, keyDomain, [0x9000]);

	return this.parseKeyDomainStatus(status);
}



/**
 * Delete the empty key domain
 *
 * @param {Number} keyDomain the number of the key domain
 */
SmartCardHSM.prototype.deleteKeyDomain = function(keyDomain) {
	this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x52, 0x03, keyDomain, [0x9000]);

	var fid = ByteString.valueOf((SmartCardHSM.KDDPREFIX << 8) + keyDomain);
	if (this.hasFile(fid)) {
		this.deleteFile(fid);
	}
}



/**
 * Return the label associated with the key domain or undefined.
 *
 * @param {Number} keyDomain the number of the key domain
 */
SmartCardHSM.prototype.getKeyDomainLabel = function(keyDomain) {
	var fid = ByteString.valueOf((SmartCardHSM.KDDPREFIX << 8) + keyDomain);
	try	{
		var bin = this.readBinary(fid);
		if (bin.byteAt(0) != 0x30) {
			return;
		}
		var a = new ASN1(bin);
		return a.get(0).get(0).value.toString(UTF8);
	} catch(e) {
		// Return undefined if no description is set
		return;
	}
}



/**
 * Import DKEK share or query status
 *
 * @param {Number} keyDomain the number of the key domain
 * @param {ByteString} keyshare 32 byte key share
 * @type Object
 * @return object with properties sw{Number}, shares{Number}, outstanding{Number} and kcv{ByteString}
 */
SmartCardHSM.prototype.importKeyShare = function(keyDomain, keyshare) {
	if (typeof(keyDomain) != "number") {
		keyshare = keyDomain;
		keyDomain = 0;
	}
	if (typeof(keyshare) != "undefined") {
		var status = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x52, 0x00, keyDomain, keyshare, 0, [0x9000]);
	} else {
		var status = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x52, 0x00, keyDomain, 0);
	}
	if (status.length == 0) {
		return { sw: this.card.SW };
	}

	var statusObject = {
		sw: this.card.SW,
		shares: status.byteAt(0),
		outstanding: status.byteAt(1),
		kcv: status.bytes(2, 8)
	}

	if (status.length > 10) {
		statusObject.keyDomain = status.bytes(10);
	}

	return statusObject;
}



/**
 * Decrypt and import a DKEK share
 *
 * @param {ByteString} keyshare the encrypted key share as read from the .pbe file
 * @param {ByteString} password the password
 * @param {Number} keyDomain the number of the key domain
 * @return object with properties sw{Number}, shares{Number}, outstanding{Number} and kcv{ByteString}
 */
SmartCardHSM.prototype.importEncryptedKeyShare = function(keyshare, password, keyDomain) {
	if (typeof(keyDomain) == "undefined") {
		keyDomain = 0;
	}

	var dkek = DKEK.decryptKeyShare(keyshare, password);
//	print("Importing into SmartCard-HSM");
	var r = this.importKeyShare(keyDomain, dkek);
	dkek.clear();
	return r;
}



/**
 * Wrap key under DKEK
 *
 * @param {Number} id key id
 * @type ByteString
 * @return key blob with encrypted key value
 */
SmartCardHSM.prototype.wrapKey = function(id) {
	var keyblob = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x72, id, 0x92, 65536, [0x9000]);
	return keyblob;
}



/**
 * Unwrap key with DKEK
 *
 * @param {Number} id key id
 * @param {ByteString} keyblob the wrapped key
 */
SmartCardHSM.prototype.unwrapKey = function(id, keyblob) {
	if (keyblob.length < this.maxCData) {
		this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x74, id, 0x93, keyblob, [0x9000]);
	} else {
		this.updateBinary(ByteString.valueOf(0x2F10), 0, keyblob);
		this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x74, id, 0x93, [0x9000]);
	}
}



/**
 * Replace symmetric key value encrypted under current key
 *
 * @param {Number} id key id
 * @param {ByteString} keyblob the wrapped key
 */
SmartCardHSM.prototype.unwrapAndReplaceKey = function(id, keyblob) {
	this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x74, id, 0x94, keyblob, [0x9000]);
}



/**
 * Derive Symmetric Key
 *
 * @param {Number} id key id
 * @param {Number} algo algorithm id (one of ALG_CBC_ENC, ALG_CBC_DEC, ALG_CMAC or ALG_DERIVE_SP800_56C)
 * @param {ByteString} derivationParam the derivation parameter
 * @type ByteString
 * @return derived key value
 */
SmartCardHSM.prototype.deriveSymmetricKey = function(id, algo, derivationParam) {
	var derivedKeyValue = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x78, id, algo, derivationParam, 0, [0x9000]);
	return derivedKeyValue;
}



/**
 * Verify User PIN
 *
 * @param {ByteString} userPIN user PIN value
 * @return the status word SW1/SW2 returned by the device
 */
SmartCardHSM.prototype.verifyUserPIN = function(userPIN) {
	if (userPIN) {
		this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x20, 0x00, 0x81, userPIN);
		return this.card.SW;
	} else {
		var cs = this.getNativeCardService();
		cs.verifyPassword();
		return this.queryUserPINStatus();
	}
}



/**
 * Logout
 *
 */
SmartCardHSM.prototype.logout = function() {
	this.card.clearCredential();
	var fcp = this.card.sendApdu(0x00, 0xA4, 0x04, 0x04, new ByteString("E82B0601040181C31F0201", HEX), 0, [0x9000]);
	var a = new ASN1(fcp);
	var v = a.find(0x85).value;
	this.options = v.bytes(0, 2).toUnsigned();
	this.major = v.byteAt(v.length - 2);
	this.minor = v.byteAt(v.length - 1);
	if (v.length >= 5) {
		this.platform = v.byteAt(v.length - 3);
	}
}



/**
 * Change User PIN
 *
 * @param {ByteString} currentPIN current user PIN value
 * @param {ByteString} newPIN new user PIN value
 */
SmartCardHSM.prototype.changeUserPIN = function(currentPIN, newPIN) {
	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x24, 0x00, 0x81, currentPIN.concat(newPIN), [0x9000]);
}



/**
 * Unblock and set User PIN
 *
 * @param {ByteString} initializationCode the initialization code
 * @param {ByteString} newPIN new user PIN value (optional)
 */
SmartCardHSM.prototype.unblockUserPIN = function(initializationCode, newPIN) {
	if (newPIN) {
		this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x2C, 0x00, 0x81, initializationCode.concat(newPIN), [0x9000]);
	} else {
		this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x2C, 0x01, 0x81, initializationCode, [0x9000]);
	}
}



/**
 * Change InitializationCode
 *
 * @param {ByteString} initializationCode current initialization code
 * @param {ByteString} newInitializationCode new initialization code
 */
SmartCardHSM.prototype.changeInitializationCode = function(initializationCode, newInitializationCode) {
	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x24, 0x00, 0x88, initializationCode.concat(newInitializationCode), [0x9000]);
}



SmartCardHSM.describePINStatus = function(sw, name) {
	var str;
	switch(sw) {
	case 0x9000:
		str = name + " authenticated";
		break;
	case 0x6984:
		str = name + " in transport mode or device not initialized";
		break;
	case 0x6A88:
		str = name + " not initialized";
		break;
	case 0x6983:
		str = name + " blocked";
		break;
	case 0x6300:
		str = name + " not authenticated";
		break;
	default:
		str = name + " not verified, " + (sw & 0xF) + " tries remaining";
		break;
	}
	return str + " (" + ByteString.valueOf(sw).toString(HEX) + ")";
}



/**
 * Request PIN Status Information
 *
 * @param {Number} p2 the PIN object id
 * @type Number
 * @return the status word SW1/SW2 returned by the device
 */
SmartCardHSM.prototype.queryPINStatus = function(p2) {
	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x20, 0x00, p2, 0);
	return this.card.SW;
}



/**
 * Request PIN Status Information
 *
 * @type Number
 * @return the status word SW1/SW2 returned by the device
 */
SmartCardHSM.prototype.queryUserPINStatus = function() {
	return this.queryPINStatus(0x81);
}



/**
 * Request Initialization Code Status
 *
 * @type Number
 * @return the status word SW1/SW2 returned by the device
 */
SmartCardHSM.prototype.queryInitializationCodeStatus = function() {
	return this.queryPINStatus(0x88);
}



/**
 * Enumerate Objects
 *
 * @return the enumeration
 */
SmartCardHSM.prototype.enumerateObjects = function() {
	var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x58, 0x00, 0x00, 65536, [0x9000]);
	return rsp;
}



/**
 * Generate random data
 *
 * @param {Number} length number of bytes
 * @return the random bytes
 */
SmartCardHSM.prototype.generateRandom = function(length) {
	var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x84, 0x00, 0x00, length, [0x9000]);
	return rsp;
}



/**
 * Sign data using referenced key
 *
 * @param {Number} keyid the key identifier for signing
 * @param {algo} algo the algorithm identifier
 * @param {ByteString} data the data to be signed
 * @return the signature value
 */
SmartCardHSM.prototype.sign = function(keyid, algo, data) {
	if (data.length <= this.maxCData) {
		var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x68, keyid, algo, data, 0x10000, [0x9000]);
	} else {
		this.updateBinary(ByteString.valueOf(0x2F10), 0, data);
		var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x68, keyid, algo, 0x10000, [0x9000]);
	}

	return rsp;
}



/**
 * Decipher cryptogram or agree shared secret using Diffie-Hellman
 *
 * @param {Number} keyid the key identifier
 * @param {Number} algo the algorithm identifier
 * @param {ByteString} data the the cryptogram or concatenation of x || y of ECC public key
 * @return the plain output
 */
SmartCardHSM.prototype.decipher = function(keyid, algo, data) {
	var rsp = this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x62, keyid, algo, data, 0x00, [0x9000]);
	return rsp;
}



/**
 * Verify card verifiable certificate
 *
 * @param {CVC} cvc the card verifiable certificate
 **/
SmartCardHSM.prototype.verifyCertificate = function(cvc) {

	// Check if public key is already known
	var chr = cvc.getCHR().getBytes();

	var pukrefdo = new ASN1(0x83, chr);
	var pukref = pukrefdo.getBytes();

	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x22, 0x81, 0xB6, pukref, [0x9000, 0x6A88]);

	if (this.card.SW == 0x9000) {
		return;
	}

	// Select public key for verification
	var car = cvc.getCAR().getBytes();

	var pukrefdo = new ASN1(0x83, car);
	var pukref = pukrefdo.getBytes();

	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x22, 0x81, 0xB6, pukref, [0x9000]);

	// Extract value of 7F21
	var tl = new TLVList(cvc.getBytes(), TLV.EMV);
	var t = tl.index(0);
	var v = t.getValue();

	this.card.sendSecMsgApdu(Card.ALL, 0x00, 0x2A, 0x00, 0xBE, v, [0x9000]);
}



/**
 * Enumerate CA certificates
 *
 * @type String[]
 * @return the list of certificate labels
 */
SmartCardHSM.prototype.enumerateCACertificates = function() {
	this.canamemap = [];
	this.caidmap = []
	this.caids = [];
	var certlist = [];

	var fobs = this.enumerateObjects();

	// Process PKCS#15 certificate descriptions
	for (var i = 0; i < fobs.length; i+= 2) {
		if (fobs.byteAt(i) == SmartCardHSM.CERTDPREFIX) {
			var id = fobs.byteAt(i + 1);
			this.caids.push(id);
			var fid = ByteString.valueOf((SmartCardHSM.CACERTIFICATEPREFIX << 8) + id);
			var descbin = this.readBinary(fobs.bytes(i, 2));
			var asn = new ASN1(descbin);
			var coa = asn.get(0);
			if (coa.elements > 0) {
				var label = coa.get(0).value.toString(ASCII);
			} else {
				var label = "No label (" + i + ")";
			}
			var cert = this.readBinary(fid);
			certlist.push(label);
			this.canamemap[label] = cert;
			cert.id = id;
			this.caidmap[label] = id;
		}
	}

	return certlist;
}



/**
 * Return CA certificate with label
 *
 * @param {String} label the certificate label
 * @type ByteString
 * @return the encoded certificate
 */
SmartCardHSM.prototype.getCACertificate = function(label) {
	if (typeof(this.caids) == "undefined") {
		this.enumerateCACertificates();
	}

	return this.canamemap[label];
}



/**
 * Determine an unused CA certificate identifier
 *
 * @type Number
 * @return a free CA certificate identifier or -1 if all identifier in use
 */
SmartCardHSM.prototype.determineFreeCAId = function() {
	var fobs = this.enumerateObjects();

	return SmartCardHSM.determineFreeId(SmartCardHSM.CACERTIFICATEPREFIX, fobs);
}



/**
 * Add a new CA certificate to the map
 *
 * @param {X509} cert the CA certificate
 * @param {Number} id the corresponding id
 * @param {String} label the corresponding label
 */
SmartCardHSM.prototype.addCACertificateToMap = function(cert, id, label) {
	if (!this.caidmap[label]) {
		// new id
		this.caids.push(id);
		this.caidmap[label] = id;
	}
	this.canamemap[label] = cert;
}



/**
 * Enumerate key objects in the SmartCard-HSM and build the map of keys
 *
 * @type String[]
 * @return the list of key labels
 */
SmartCardHSM.prototype.enumerateKeys = function() {
	this.namemap = [];
	this.idmap = [];
	this.idlist = [];
	this.p15idmap = [];

	var fobs = this.enumerateObjects();

	// Process keys
	for (var i = 0; i < fobs.length; i += 2) {
		if ((fobs.byteAt(i) == SmartCardHSM.KEYPREFIX) || (fobs.byteAt(i) == 0xFF)) {
			var kid = fobs.byteAt(i + 1);
			if (kid > 0) {
//				GPSystem.log(GPSystem.DEBUG, module.id, "Found key: " + kid);
				var key = new SmartCardHSMKey(this, kid);
				this.idmap[kid] = key;
				this.idlist.push(kid);
				this.updateKey(key);
			}
		}
	}

	var keylist = [];
	// Process PKCS#15 private key descriptions
	for (var i = 0; i < fobs.length; i += 2) {
		if (fobs.byteAt(i) == SmartCardHSM.PRKDPREFIX) {
			var kid = fobs.byteAt(i + 1);
			var descbin = this.readBinary(fobs.bytes(i, 2));
			if (descbin.length > 2) {
				try {
					var desc = new ASN1(descbin);
					if (desc.elements < 3) {
						continue;
					}
				}
				catch(e) {
					continue;
				}
				var key = this.idmap[kid];
				if (key) {
					key.setDescription(desc);
					var label = key.getLabel();
//					GPSystem.log(GPSystem.DEBUG, module.id, key.getId() + " - " + label);
					if (label) {
						keylist.push(label);
						this.namemap[label] = key;
					}
					var p15id = key.getPKCS15Id();
					this.p15idmap[p15id.toString(HEX)] = key;
				}
			}
		}
	}

	return keylist;
}



/**
 * Get key ids
 *
 * @type Number[]
 * @return a list of key identifier
 */
SmartCardHSM.prototype.getKeyIds = function() {
	if (typeof(this.idlist) == "undefined") {
		this.enumerateKeys();
	}
	return this.idlist;
}



/**
 * Determine an unused key identifier
 *
 * @type Number
 * @return a free key identifier or -1 if all key identifier in use
 */
SmartCardHSM.prototype.determineFreeKeyId = function() {
	if (typeof(this.idlist) == "undefined") {
		this.enumerateKeys();
	}
	for (var i = 1; i < 256; i++) {
		if (this.idmap[i] == undefined) {
			return i;
		}
	}
	throw new GPError("SmartCardHSM", GPError.OUT_OF_MEMORY, 1, "Key idx exhausted");
}



/**
 * Update key attributes, in particular the use counter
 *
 * @param {HSMKey} key the HSM key
 */
SmartCardHSM.prototype.updateKey = function(key) {
	var fid = ByteString.valueOf((SmartCardHSM.KEYPREFIX << 8) + key.getId());
	try	{
		var fcp = this.selectFile(fid);
	}
	catch(e) {
		return;
	}
	var a = new ASN1(fcp);
	var pi = a.find(0xA5);
	if (!pi) {
		return;
	}
	var kc = pi.find(0x90);
	if (kc) {
		var c = kc.value.toUnsigned();

		if (c != 0xFFFFFFFF) {
			key.useCounter = c;
		}
	}

	var kd = pi.find(0x91);
	if (kd) {
		key.algorithms = kd.value;
	}

	var kd = pi.find(0x92);
	if (kd) {
		key.keyDomain = kd.value.toUnsigned();
	}
}



/**
 * Add a new key to the map of keys
 *
 * @param {HSMKey} key the HSM key
 */
SmartCardHSM.prototype.addKeyToMap = function(key) {
	var id = key.getId();
	this.idmap[id] = key;

	var label = key.getLabel();
	if (label) {
		this.namemap[label] = key;
	}

	var p15id = key.getPKCS15Id();
	if (p15id) {
		this.p15idmap[p15id.toString(HEX)] = key;
	}
}



/**
 * Get a key reference object
 *
 * @param {String/Number/ByteString} labelOrId label or id of key
 * @returns the key or null if not found
 * @type Key
 */
SmartCardHSM.prototype.getKey = function(labelOrId) {
	if (typeof(this.idlist) == "undefined") {
		this.enumerateKeys();
	}

	if (typeof(labelOrId) == "number") {
		var key = this.idmap[labelOrId];
	} else if (typeof(labelOrId) == "string") {
		var key = this.namemap[labelOrId];
	} else {
		var key = this.p15idmap[labelOrId.toString(HEX)];
	}

	if (key == undefined) {
		return null;
	}
	return key;
}



/**
 * Return a list of key objects
 *
 * @type SmartCardHSMKey[]
 * @return the list of keys
 */
SmartCardHSM.prototype.getKeys = function() {
	if (typeof(this.idlist) == "undefined") {
		this.enumerateKeys();
	}

	var keylist = [];
	for (var i in this.idmap) {
		keylist.push(this.idmap[i]);
	}
	return keylist;
}



/**
 * Determine a free id in the list of FID for the given prefix.
 *
 * @param {Number} the prefix to look at
 * @param {ByteString} the list of FID as returned from the device
 * @type Number
 * @return a free id for the given prefix or -1 if range is exhausted.
 */
SmartCardHSM.determineFreeId = function(prefix, fobs) {
	var map = new Bitmap(256);

	for (var i = 0; i < fobs.length; i+= 2) {
		if (fobs.byteAt(i) == prefix) {
			map.toggle(fobs.byteAt(i + 1));
		}
	}

	return map.determineFirstUnset();
}



/**
 * Determine a free FID in the list of FID for the given prefix.
 *
 * @param {Number} the prefix to look at
 * @param {ByteString} the list of FID as returned from the device
 * @type ByteString
 * @return a free two byte file identifier (FID) for the given prefix or null if range is exhausted.
 */
SmartCardHSM.determineFreeFid = function(prefix, fobs) {
	var id = SmartCardHSM.determineFreeId(prefix, fobs);
	if (id < 0) {
		return null;
	}
	return ByteString.valueOf((prefix << 8) + id);
}



/**
 * Enumerate Data Objects
 *
 * @type String[]
 * @return the list of data object labels
 */
SmartCardHSM.prototype.enumerateDataObjects = function() {
	this.donamemap = [];
	var dolist = [];

	var fobs = this.enumerateObjects();

	// Process PKCS#15 data object descriptions
	for (var i = 0; i < fobs.length; i+= 2) {
		if (fobs.byteAt(i) == SmartCardHSM.DODPREFIX) {
			var descfid = fobs.bytes(i, 2);
			var descbin = this.readBinary(descfid);
			var asn = new ASN1(descbin);
//			print(asn);
			var coa = asn.get(0);
			if (coa.elements > 0) {
				var label = coa.get(0).value.toString(ASCII);
			} else {
				var label = "No label (" + i + ")";
			}
			var taga1 = asn.find(0xA1);
			if (taga1) {
				var datafid = taga1.get(0).get(0).value;
				this.donamemap[label] = { datafid: datafid, descfid: descfid };
				dolist.push(label);
			}
		}
	}

	return dolist;
}



/**
 * Check if the data object is present
 *
 * @param {String} label the label
 * @type boolean
 * @return true if the data object exists
 */
SmartCardHSM.prototype.hasDataObject = function(label) {
	if (typeof(this.donamemap) == "undefined"){
		this.enumerateDataObjects();
	}
	return (this.donamemap[label] != undefined);
}



/**
 * Return the file identifier containing the data object.
 *
 * @param {String} label the label.
 * @type ByteString
 * @return the two byte file identifier
 */
SmartCardHSM.prototype.getDataObjectFileIdentifier = function(label) {
	if (typeof(this.donamemap) == "undefined"){
		this.enumerateDataObjects();
	}
	var e = this.donamemap[label];
	if (e == undefined) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Data object " + label + " not found");
	}
	return e.datafid;
}



/**
 * Import a data object
 *
 * @param {String} label the unique label to reference the new data object
 * @param {Boolean} privObj true to store the data object with read protection
 * @param {ByteString} data the data blob to store
 */
SmartCardHSM.prototype.importDataObject = function(label, privObj, data) {
	var fobs = this.enumerateObjects();

	var e = this.donamemap[label];
	if (e != undefined) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Data object " + label + " does already exist");
	}

	if (privObj) {
		var datafid = SmartCardHSM.determineFreeFid(SmartCardHSM.CONFIDENTIALDATAPREFIX, fobs);
	} else {
		var datafid = SmartCardHSM.determineFreeFid(SmartCardHSM.PUBLICDATAPREFIX, fobs);
	}

	if (datafid == null) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Out of space for data objects");
	}

	var desc = SmartCardHSM.buildDataObjectDescription(label, undefined, datafid, "KeyManager");

	var descfid = SmartCardHSM.determineFreeFid(SmartCardHSM.DODPREFIX, fobs);

	if (descfid == null) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Out of space for data objects descriptor");
	}

	this.updateBinary(datafid, 0, data);
	this.updateBinary(descfid, 0, desc.getBytes());
	this.donamemap[label] = { datafid: datafid, descfid: descfid };
}



/**
 * Delete the data object references by the label.
 *
 * @param {String} label the label of the data object
 */
SmartCardHSM.prototype.deleteDataObject = function(label) {
	if (typeof(this.donamemap) == "undefined"){
		this.enumerateDataObjects();
	}
	var e = this.donamemap[label];
	if (e == undefined) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Data object " + label + " not found");
	}
	this.deleteFile(e.descfid);
	this.deleteFile(e.datafid);
	delete this.donamemap[label];
}



/**
 * Get crypto object
 *
 * @type HSMCrypto
 * @return the HSMCrypto object
 */
SmartCardHSM.prototype.getCrypto = function() {
	if (this.crypto == undefined) {
		this.crypto = new SmartCardHSMCrypto(new Crypto());
	}
	return this.crypto;
}



/**
 * @private
 */
SmartCardHSM.prototype.getTokenInfo = function() {
	if (this.tokenInfo != undefined) {
		return this.tokenInfo;
	}

	if (!this.hasFile(SmartCardHSM.EF_TokenInfo)) {
		return;
	}

	var bin = this.readBinary(SmartCardHSM.EF_TokenInfo);
	this.tokenInfo = new ASN1(bin);
	return this.tokenInfo;
}



/**
 * Get Token Label
 *
 * @type String
 * @return the token label from CIAInfo
 */
SmartCardHSM.prototype.getLabel = function() {
	var ti = this.getTokenInfo();
	if (!ti) {
		return;
	}

	var a = ti.find(0x80);
	if (!a) {
		return;
	}
	return a.value.toString(UTF8);
}



/**
 * @private
 */
SmartCardHSM.prototype.getStaticTokenInfo = function() {
	if (this.staticTokenInfo != undefined) {
		return this.staticTokenInfo;
	}

	if (!this.hasFile(SmartCardHSM.EF_StaticTokenInfo)) {
		return;
	}

	var bin = this.readBinary(SmartCardHSM.EF_StaticTokenInfo);
	this.staticTokenInfo = new ASN1(bin);
	return this.staticTokenInfo;
}



/**
 * Get ProvisioningURL
 *
 * @type String
 * @return the configured ProvisioningURL or undefined
 */
SmartCardHSM.prototype.getProvisioningURL = function() {
	var ti = this.getStaticTokenInfo();
	if (!ti) {
		return;
	}

	var a = ti.find(0x80);
	if (!a) {
		return;
	}
	return a.value.toString(UTF8);
}



/**
 * Get Key Check Value of Token Management Key
 *
 * @type ByteString
 * @return the configured KCV of the Token Management Key or undefined
 */
SmartCardHSM.prototype.getTokenManagementKeyKCV = function() {
	var ti = this.getStaticTokenInfo();
	if (!ti) {
		return;
	}

	var a = ti.find(0x81);
	if (!a) {
		return;
	}
	return a.value;
}



/**
 * Get salt for SO-PIN derivation using  the Token Management Key
 *
 * @type ByteString
 * @return the configured salt
 */
SmartCardHSM.prototype.getTokenManagementKeySalt = function() {
	var ti = this.getStaticTokenInfo();
	if (!ti) {
		return;
	}

	var a = ti.find(0x82);
	if (!a) {
		return;
	}
	return a.value;
}



/**
 * Create crypto object implementing access to the SmartCard-HSM
 *
 * @class Wrapper to provide Crypto interface to SmartCard-HSM
 * @constructor
 * @param {Crypto} crypto the backend crypto provider
 */
function SmartCardHSMCrypto(crypto) {
	this.crypto = crypto;
}



/**
 * Sign a message using the defined mechanism and key
 *
 * @param {HSMKey} key the private key
 * @param {Number} mech the mechanism (e.g. Crypto.ECDSA)
 * @param {ByteString} message the message to be signed
 * @type ByteString
 * @return the signature
 */
SmartCardHSMCrypto.prototype.sign = function(key, mech, message) {
	if (key instanceof SmartCardHSMKey) {
		return key.sign(mech, message);
	} else {
		return this.crypto.sign(key, mech, message);
	}
}



/**
 * Encrypt a message using the defined mechanism and key
 *
 * @param {HSMKey} key the key
 * @param {Number} mech the mechanism (e.g. Crypto.RSA_PKCS1)
 * @param {ByteString} data the cryptogram
 * @param {ByteString} iv the initialization vector for symmetric ciphers
 * @type ByteString
 * @return the plain text
 */
SmartCardHSMCrypto.prototype.encrypt = function(key, mech, data, iv) {
	if (key instanceof SmartCardHSMKey) {
		return key.encrypt(mech, data, iv);
	} else {
		return this.crypto.encrypt(key, mech, data, iv);
	}
}



/**
 * Decrypt a message using the defined mechanism and key
 *
 * @param {HSMKey} key the key
 * @param {Number} mech the mechanism (e.g. Crypto.RSA_PKCS1)
 * @param {ByteString} data the cryptogram
 * @param {ByteString} iv the initialization vector for symmetric ciphers
 * @type ByteString
 * @return the plain text
 */
SmartCardHSMCrypto.prototype.decrypt = function(key, mech, data, iv) {
	if (key instanceof SmartCardHSMKey) {
		return key.decrypt(mech, data, iv);
	} else {
		return this.crypto.decrypt(key, mech, data, iv);
	}
}



/**
 * Verify a message using the defined mechanism and key
 *
 * @param {Key} key the public key
 * @param {Number} mech the mechanism (e.g. Crypto.ECDSA)
 * @param {ByteString} message the message to be signed
 * @param {ByteString} signature the signature to verify
 * @type Boolean
 * @return true if signature is valid
 */
SmartCardHSMCrypto.prototype.verify = function(key, mech, message, signature) {
	return this.crypto.verify(key, mech, message, signature);
}



/**
 * Create a key access object
 *
 * @class Class implementing key access
 * @param {SmartCardHSM} sc the card access object
 * @param {Number} id the key identifier
 */
function SmartCardHSMKey(sc, id) {
	this.sc = sc;
	this.id = id;
	if (this.sc.useExternalHashInECDSA) {
		this.crypto = new Crypto();
	}
}

exports.SmartCardHSMKey = SmartCardHSMKey;


/**
 * Set the PKCS#15 private key description
 *
 * @param {ASN1} desc the description
 */
SmartCardHSMKey.prototype.setDescription = function(desc) {
	this.desc = desc;
}



/**
 * Return the key identifier
 *
 * @type Number
 * @return the key identifier
 */
SmartCardHSMKey.prototype.getId = function() {
	return this.id;
}



/**
 * Return the key label as encoded in the PKCS#15 structure
 *
 * @type String
 * @return the key label
 */
SmartCardHSMKey.prototype.getLabel = function() {
	if (this.desc == undefined) {
		return undefined;
	}
	if ((this.desc.get(0).elements == 0) || this.desc.get(0).get(0).tag != 0x0C) {
		return undefined;
	}

	return this.desc.get(0).get(0).value.toString(UTF8);
}



/**
 * Return the key id as encoded in the PKCS#15 structure
 *
 * @type ByteString
 * @return the key identifier
 */
SmartCardHSMKey.prototype.getPKCS15Id = function() {
	if (this.desc == undefined) {
		return undefined;
	}
	return this.desc.get(1).get(0).value;
}



/**
 * Return the key size in bits
 *
 * @type Number
 * @return the key size in bits
 */
SmartCardHSMKey.prototype.getSize = function() {
	if (this.desc == undefined) {
		return undefined;
	}
//	GPSystem.log(GPSystem.DEBUG, module.id, this.desc);
	if (this.desc.get(2).elements > 1) {	// Fix a bug from early versions
		return this.desc.get(2).get(1).value.toUnsigned();
	}

	if (this.desc.tag == 0xA8) {
		var size = this.desc.get(2).get(0).get(0).value.toUnsigned();
	} else {
		var a1 = this.desc.find(0xA1);
		var size = a1.get(0).get(1).value.toUnsigned();

		if (size == 528) {
			size = 521;		// Fix bug in OpenSCDP returning the wrong key size for secp521 keys
		}
	}

	return size;
}



/**
 * Return the key type
 *
 * @type String
 * @return the key type
 */
SmartCardHSMKey.prototype.getType = function() {
	if (this.desc == undefined) {
		return undefined;
	}

	if (this.desc.tag == 0xA0) {
		return "EC";
	} else if (this.desc.tag == 0x30) {
		return "RSA";
	} else if (this.desc.tag == 0xA8) {
		return "AES";
	}

	return undefined;
}



/**
 * Sign data using a key in the SmartCard-HSM
 *
 * @param {Number} mech the signing mechanism
 * @param {ByteString} data to be signed
 * @type ByteString
 * @return the signature
 */
SmartCardHSMKey.prototype.sign = function(mech, data) {
	var algo;
	if (mech) {
		switch(mech) {
		case Crypto.RSA:
			algo = 0x20;
			break;
		case Crypto.RSA_SHA1:
			algo = 0x31;
			break;
		case Crypto.RSA_SHA224:
			algo = 0x32;
			break;
		case Crypto.RSA_SHA256:
			algo = 0x33;
			break;
		case Crypto.RSA_SHA384:
			algo = 0x34;
			break;
		case Crypto.RSA_SHA512:
			algo = 0x35;
			break;
		case Crypto.RSA_PKCS1:
			if (this.sc.major && this.sc.major >= 4) {
				algo = 0x30;
			} else {
				algo = 0x20;
				var keysize = this.getSize();
				if (!keysize) {
					throw new GPError(module.id, GPError.INVALID_DATA, 0, "Can't determine key size");
				}
				data = PKCS1.encode_EMSA_V15(keysize, data);
			}
			break;
		case Crypto.RSA_PSS:
		case 0x80:
			algo = 0x40;
			break;
		case Crypto.RSA_PSS_SHA1:
			algo = 0x41;
			break;
		case Crypto.RSA_PSS_SHA224:
			algo = 0x42;
			break;
		case Crypto.RSA_PSS_SHA256:
			algo = 0x43;
			break;
		case Crypto.RSA_PSS_SHA384:
			algo = 0x44;
			break;
		case Crypto.RSA_PSS_SHA512:
			algo = 0x45;
			break;
		case Crypto.ECDSA:
			algo = 0x70;
			break;
		case Crypto.ECDSA_SHA1:
			if (this.sc.useExternalHashInECDSA) {
				algo = 0x70;
				var data = this.crypto.digest(Crypto.SHA_1, data);
			} else {
				algo = 0x71;
			}
			break;
		case Crypto.ECDSA_SHA224:
			if (this.sc.useExternalHashInECDSA) {
				algo = 0x70;
				var data = this.crypto.digest(Crypto.SHA_224, data);
			} else {
				algo = 0x72;
			}
			break;
		case Crypto.ECDSA_SHA256:
			if (this.sc.useExternalHashInECDSA) {
				algo = 0x70;
				var data = this.crypto.digest(Crypto.SHA_256, data);
			} else {
				algo = 0x73;
			}
			break;
		case Crypto.ECDSA_SHA384:
			if (this.sc.useExternalHashInECDSA) {
				algo = 0x70;
				var data = this.crypto.digest(Crypto.SHA_384, data);
			} else {
				algo = 0x74;
			}
			break;
		case Crypto.ECDSA_SHA512:
			if (this.sc.useExternalHashInECDSA) {
				algo = 0x70;
				var data = this.crypto.digest(Crypto.SHA_512, data);
			} else {
				algo = 0x75;
			}
			break;
		case Crypto.AES_CMAC:
			return this.sc.deriveSymmetricKey(this.id, SmartCardHSM.ALG_CMAC, data);
		default:
			throw new GPError("SmartCardHSMKey", GPError.INVALID_DATA, mech, "Unsupported crypto mechanism");
		}
	}

	return this.sc.sign(this.id, algo, data);
}



/**
 * @private
 */
SmartCardHSMKey.prototype.symmetricblock = function(mech, data, iv) {
	var max = this.sc.maxCData & ~0xF;

	var bb = new ByteBuffer();

	var ofs = 0;
	while(ofs < data.length) {
		var len = data.length - ofs;
		if (len > max) {
			len = max;
		}

		var fragment = data.bytes(ofs, len);
//		print("1 [" + max + "]: " + fragment);
		if (mech == SmartCardHSM.ALG_CBC_ENC) {
			fragment = fragment.left(16).xor(iv).concat(fragment.bytes(16));
		}
//		print("1: " + fragment);
		var c = this.sc.deriveSymmetricKey(this.id, mech, fragment);

		if (mech == SmartCardHSM.ALG_CBC_DEC) {
			c = c.left(16).xor(iv).concat(c.bytes(16));
			iv = fragment.right(16);
		} else {
			iv = c.right(16);
		}

		bb.append(c);
		ofs += len;
	}

	return bb.toByteString();
}



/**
 * Encrypt data using a key in the SmartCard-HSM
 *
 * @param {Number} mech the encipherr mechanism
 * @param {ByteString} data to be enciphered
 * @type ByteString
 * @return the plain message
 */
SmartCardHSMKey.prototype.encrypt = function(mech, data, iv) {
	var algo;
	if (mech) {
		switch(mech) {
		case Crypto.AES_CBC:
			return this.symmetricblock(SmartCardHSM.ALG_CBC_ENC, data, iv);
		default:
			throw new GPError("SmartCardHSMKey", GPError.INVALID_DATA, mech, "Unsupported crypto mechanism");
		}
	}
}



/**
 * Decrypt data using a key in the SmartCard-HSM
 *
 * @param {Number} mech the decipher mechanism
 * @param {ByteString} data to be deciphered
 * @type ByteString
 * @return the plain message
 */
SmartCardHSMKey.prototype.decrypt = function(mech, data, iv) {
	var algo;
	if (mech) {
		switch(mech) {
		case Crypto.RSA:
			break;
		case Crypto.RSA_PKCS1:
			break;
		case Crypto.RSA_OAEP_SHA224:
			algo = Crypto.SHA_224;
			break;
		case Crypto.RSA_OAEP_SHA256:
			algo = Crypto.SHA_256;
			break;
		case Crypto.RSA_OAEP_SHA384:
			algo = Crypto.SHA_384;
			break;
		case Crypto.RSA_OAEP_SHA512:
			algo = Crypto.SHA_512;
			break;
		case Crypto.ECDHP:
			return this.sc.decipher(this.id, 0x80, ByteString.valueOf(4).concat(data)).bytes(1);
		case Crypto.AES_CBC:
			return this.symmetricblock(SmartCardHSM.ALG_CBC_DEC, data, iv);
		default:
			throw new GPError("SmartCardHSMKey", GPError.INVALID_DATA, mech, "Unsupported crypto mechanism");
		}
	}

	var em = this.sc.decipher(this.id, 0x21, data);

	var plain = em;

	if (mech != Crypto.RSA) {
		if (mech == Crypto.RSA_PKCS1) {
			var plain = PKCS1.decode_EME_V15(em);
		} else {
			var crypto = this.sc.getCrypto().crypto;

			var plain = PKCS1.decode_EME_OAEP(crypto, null, algo, em);
		}

		if (!plain) {
			throw new GPError("SmartCardHSMKey", GPError.CRYPTO_FAILED, mech, "Decryption failed");
		}
	}

	return plain;
}



/**
 * Return human readable string
 */
SmartCardHSMKey.prototype.toString = function() {
	return "SmartCardHSMKey(id=" + this.id + ")";
}



/**
 * Initialize SmartCard-HSM
 *
 * @class Class implementing the device initialization methods
 * @param {Card} card the card object
 */
function SmartCardHSMInitializer(card) {
	this.card = card;
	this.initializationCode = new ByteString("57621880", ASCII);
	this.userPIN = new ByteString("648219", ASCII);
	this.userPINSet = false;
	this.useDefaultUserPIN = true;
	this.retryCounterInitial = 3;
	this.options = 0x0001;
	this.keyshares = -1;
	this.keyDomains = -1;
	this.numberOfPublicKeys = 0;
	this.requiredPublicKeysForAuthentication = 0;
	this.bioslot = [];
	this.label = undefined;
}

exports.SmartCardHSMInitializer = SmartCardHSMInitializer;



/**
 * Set the initialization code
 *
 * @param {ByteString} initializationCode an 8 byte code
 */
SmartCardHSMInitializer.prototype.setInitializationCode = function(initializationCode) {
	if (!(initializationCode instanceof ByteString)) {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 1, "initializationCode must be a ByteString");
	}
	if (initializationCode.length != 8) {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 1, "initializationCode must have 8 bytes");
	}

	this.initializationCode = initializationCode;
}



/**
 * Set the User PIN
 *
 * @param {ByteString} userPIN a 6 to 16 byte code
 */
SmartCardHSMInitializer.prototype.setUserPIN = function(userPIN) {
	if (!(userPIN instanceof ByteString)) {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 1, "userPIN must be a ByteString");
	}
	if ((userPIN.length < 6) || (userPIN.length > 16)) {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 1, "userPIN must be between 6 and 16 bytes");
	}

	this.userPIN = userPIN;
	this.userPINSet = true;
	this.useDefaultUserPIN = false;
}



/**
 * Set the retry counter
 *
 * The SmartCard-HSM enforces a retry counter <= 3 for PIN length 6
 * The SmartCard-HSM enforces a retry counter <= 5 for PIN length 7
 * The SmartCard-HSM enforces a retry counter <= 10 for PIN length larger than 7
 *
 * @param {Number} retryCounterInitial in the range 1 to 10.
 */
SmartCardHSMInitializer.prototype.setRetryCounterInitial = function(retryCounterInitial) {
	if (typeof(retryCounterInitial) != "number") {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 1, "retryCounterInitial must be a number");
	}
	if ((retryCounterInitial < 1) || (retryCounterInitial > 10)) {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 1, "retryCounterInitial must be between 1 and 10");
	}
	this.retryCounterInitial = retryCounterInitial;
}



/**
 * Set the number of DKEK shares
 *
 * @param {Number} keyshares number of DKEK shares in the range 0 to 255
 */
SmartCardHSMInitializer.prototype.setDKEKShares = function(keyshares) {
	if (typeof(keyshares) != "number") {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 1, "keyshares must be a number");
	}
	if ((keyshares < 0) || (keyshares > 255)) {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 1, "keyshares must be between 0 and 255");
	}
	this.keyshares = keyshares;
	this.keyDomains = -1;
}



/**
 * Set the number of key domains
 *
 * @param {Number} keyDomains number of key domains
 */
SmartCardHSMInitializer.prototype.setKeyDomains = function(keyDomains) {
	if (typeof(keyDomains) != "number") {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 1, "keyDomains must be a number");
	}

	this.keyDomains = keyDomains;
	this.keyshares = -1;
}



/**
 * Enable or disable RESET RETRY COUNTER command
 *
 * @param {Boolean} enable true (default) to allow RESET RETRY COUNTER command to reset user PIN using the initialization code
 */
SmartCardHSMInitializer.prototype.setResetRetryCounterMode = function(enable) {
	if (typeof(enable) == "undefined") {
		var enable = false;
	}

	this.options = (this.options & 0xFFFE) + (enable ? 1 : 0);
}



/**
 * Enable or disable transport PIN mode
 *
 * @param {Boolean} enable true (non-default) to set user PIN to transport state
 */
SmartCardHSMInitializer.prototype.setTransportPINMode = function(enable) {
	if (typeof(enable) == "undefined") {
		var enable = true;
	}

	this.options = (this.options & 0xFFFD) + (enable ? 2 : 0);
}



/**
 * Enable or disable session PIN mode
 *
 * @param {Number} 0 - disable, 1 - enable with clear-on-reset 3 - enable with explicit clearing
 */
SmartCardHSMInitializer.prototype.setSessionPINMode = function(mode) {
	assert(typeof(mode) == "number", "Argument mode must be number");
	assert(mode >= 0 && mode <= 3 && mode != 2, "Argument mode must be 0, 1 or 3");

	this.options = (this.options & 0xFFF3) + (mode << 2);
}



/**
 * Enable or disable replacing of a PKA key
 *
 * @param {Boolean} enable true (non-default) to allow replacing of a PKA key
 */
SmartCardHSMInitializer.prototype.setReplacePKAKeyMode = function(enable) {
	if (typeof(enable) == "undefined") {
		var enable = false;
	}

	this.options = (this.options & 0xFFF7) + (enable ? 8 : 0);
}



/**
 * Enable the combined authentication mode of user pin and public key authentication.
 *
 * @param {Boolean} enable true (non-default) to require public key authentication and user authentication
 */
SmartCardHSMInitializer.prototype.setCombinedAuthenticationMode = function(enable) {
	if (typeof(enable) == "undefined") {
		var enable = false;
	}

	this.options = (this.options & 0xFFEF) + (enable ? 16 : 0);
}



/**
 * If enabled RESET RETRY COUNTER only resets the error counter.
 * Otherwise  RRC allows changing the PIN
 *
 * @param {Boolean} resetOnly true to only reset the error counter, false otherwise (default)
 */
SmartCardHSMInitializer.prototype.setResetRetryCounterResetOnlyMode = function(resetOnly) {
	if (typeof(resetOnly) == "undefined") {
		var resetOnly = false;
	}

	this.options = (this.options & 0xFFDF) + (resetOnly ? 32 : 0);
}



/**
 * Set parameter for public key authentication with n-of-m scheme, namely the values for n and m
 *
 * @param {Number} requiredPublicKeysForAuthentication number of key that must be authenticated for access
 * @param {Number} numberOfPublicKeys to register
 */
SmartCardHSMInitializer.prototype.setPublicKeyAuthenticationParameter = function(requiredPublicKeysForAuthentication, numberOfPublicKeys) {
	if ((numberOfPublicKeys < 1) || (numberOfPublicKeys > 90)) {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 1, "numberOfPublicKeys must be between 1 and 90");
	}
	if ((requiredPublicKeysForAuthentication < 1) || (requiredPublicKeysForAuthentication > numberOfPublicKeys)) {
		throw new GPError("SmartCardHSMInitializer", GPError.INVALID_DATA, 2, "requiredPublicKeysForAuthentication must be between 1 and " + numberOfPublicKeys);
	}
	this.numberOfPublicKeys = numberOfPublicKeys;
	this.requiredPublicKeysForAuthentication = requiredPublicKeysForAuthentication;
	this.useDefaultUserPIN = false;
}



/**
 * Select the biometric matching server for a one of the biometric templates
 *
 * @param {Number} slot either 0 or 1 for first or second template
 * @param {ByteString} aid the application identifier of the on-card biometric server
 * @param {Number} param one byte parameter passed to the server during initialization
 */
SmartCardHSMInitializer.prototype.setBioTemplate = function(slot, aid, param) {
	assert(typeof(slot) == "number", "slot must be a number");
	assert(slot >= 0 && slot <= 1, "slot must be either 0 or 1");
	assert(aid instanceof ByteString, "aid must be a ByteString");
	assert(typeof(param) == "number", "param must be a number");
	assert(param >= 0 && param <= 255, "param must be between 0 and 255");

	this.bioslot[slot] = { aid: aid, param: param };
	this.useDefaultUserPIN = false;
}



/**
 * Set the label to be written to a minimal CIAInfo in EF 2F03
 *
 * @param {String} label the label
 */
SmartCardHSMInitializer.prototype.setLabel = function(label) {
	this.label = label;
}



/**
 * Set the provisioning URL to be written to fixed parameter in CB00.
 *
 * @param {String} provisioningURL the URL at which this SE will be provisioned
 */
SmartCardHSMInitializer.prototype.setProvisioningURL = function(provisioningURL) {
	this.provisioningURL = provisioningURL;
}



/**
 * Set the key check value of the token management key and the optional salt
 * used for SO-PIN derivation
 *
 * @param {ByteString} kcv the key check value of the token management key
 * @param {ByteString} salt the salt used to derive the SO-PIN
 */
SmartCardHSMInitializer.prototype.setTokenManagementKey = function(kcv, salt) {
	this.tokenManagementKeyKCV = kcv;
	this.tokenManagementKeySalt = salt;
}



/**
 * Perform Initialization
 */
SmartCardHSMInitializer.prototype.initialize = function() {
	var s = new ASN1(0x30,	new ASN1(0x80, ByteString.valueOf(this.options, 2)));

	if (this.userPINSet || this.useDefaultUserPIN) {
		s.add(new ASN1(0x81, this.userPIN));
	}

	s.add(new ASN1(0x82, this.initializationCode));

	if (this.userPINSet || this.useDefaultUserPIN) {
		s.add(new ASN1(0x91, ByteString.valueOf(this.retryCounterInitial)));
	}

	if (this.keyshares != -1) {
		s.add(new ASN1(0x92, ByteString.valueOf(this.keyshares)));
	}

	if (this.keyDomains != -1) {
		s.add(new ASN1(0x97, ByteString.valueOf(this.keyDomains)));
	}

	if (this.numberOfPublicKeys > 0) {
		s.add(new ASN1(0x93, ByteString.valueOf(this.numberOfPublicKeys).concat(ByteString.valueOf(this.requiredPublicKeysForAuthentication))));
	}

	if (this.bioslot[0]) {
		var o = this.bioslot[0];
		s.add(new ASN1(0x95, ByteString.valueOf(o.param).concat(o.aid)));
	}

	if (this.bioslot[1]) {
		var o = this.bioslot[1];
		s.add(new ASN1(0x96, ByteString.valueOf(o.param).concat(o.aid)));
	}

	this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x50, 0x00, 0x00, s.value, [0x9000, 0x6A84]);

	if (this.card.SW == 0x6A84) {
		// Due to the nature of the JCRE, a first call to initialize may run out of memory,
		// as the garbage collector for the removed objects is only run during the next
		// APDU invocation.
		this.card.sendSecMsgApdu(Card.ALL, 0x80, 0x50, 0x00, 0x00, s.value, [0x9000]);
	}

	if (this.label) {
		var a = new ASN1(0x30,
				new ASN1(0x54, new ByteString("0000", HEX)),
				new ASN1(0x53,
					new ASN1(0x30,
						new ASN1(0x02, new ByteString("00", HEX)),
						new ASN1(0x80, new ByteString(this.label, UTF8)),
						new ASN1(0x03, new ByteString("0500", HEX)))
				)
			);

		var p1 = SmartCardHSM.EF_TokenInfo.byteAt(0);
		var p2 = SmartCardHSM.EF_TokenInfo.byteAt(1);
		this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xD7, p1, p2, a.value, [0x9000]);
	}

	if (this.provisioningURL || this.tokenManagementKeyKCV || this.tokenManagementKeySalt) {
		var l = new ASN1(ASN1.SEQUENCE);
		if (this.provisioningURL) {
			l.add(new ASN1(0x80, new ByteString(this.provisioningURL, UTF8)));
		}
		if (this.tokenManagementKeyKCV) {
			l.add(new ASN1(0x81, this.tokenManagementKeyKCV));
		}
		if (this.tokenManagementKeySalt) {
			l.add(new ASN1(0x82, this.tokenManagementKeySalt));
		}

		var a = new ASN1(0x30,
				new ASN1(0x54, new ByteString("0000", HEX)),
				new ASN1(0x53, l)
			);

		var p1 = SmartCardHSM.EF_StaticTokenInfo.byteAt(0);
		var p2 = SmartCardHSM.EF_StaticTokenInfo.byteAt(1);
		this.card.sendSecMsgApdu(Card.ALL, 0x00, 0xD7, p1, p2, a.value, [0x9000]);
	}
}



/**
 * Create a key specification generator instance
 *
 * @class Class implementing an encoder for the C-Data required in GENERATE ASYMMETRIC KEY PAIR
 * @param {Number} keytype must be either Crypto.RSA, Crypto.EC or Crypto.AES
 * @param {Number/Key} keysizeOrDP must be 1024, 1536, 2048, 3072 or 4096 for RSA, 128, 192 or 256 for AES and key object with Key.ECC_CURVE_OID set for EC
 */
function SmartCardHSMKeySpecGenerator(keytype, keysizeOrDP) {
	this.keytype = keytype;

	switch(keytype) {
		case Crypto.RSA:
			if (typeof(keysizeOrDP) != "number") {
				throw new GPError("SmartCardHSMKeySpecGenerator", GPError.INVALID_DATA, 3, "keysizeIdDP must be of a number for RSA keys");
			}
			this.keysize = keysizeOrDP;
			this.defaultAlgo = new ByteString("id-TA-RSA-v1-5-SHA-256", OID);
			break;
		case Crypto.EC:
			if ((typeof(keysizeOrDP) != "object") || !(keysizeOrDP instanceof Key)) {
				throw new GPError("SmartCardHSMKeySpecGenerator", GPError.INVALID_DATA, 3, "keysizeIdDP must be a Key instance");
			}
			this.domainParameter = keysizeOrDP;
			this.defaultAlgo = new ByteString("id-TA-ECDSA-SHA-256", OID);
			break;
		case Crypto.AES:
			if (typeof(keysizeOrDP) != "number") {
				throw new GPError("SmartCardHSMKeySpecGenerator", GPError.INVALID_DATA, 3, "keysizeIdDP must be of a number for AES keys");
			}
			this.keysize = keysizeOrDP;
			break;
		default:
			throw new GPError("SmartCardHSMKeySpecGenerator", GPError.INVALID_DATA, 3, "keytype must be Crypto.RSA or Crypto.EC");
	}
	this.CHR = new PublicKeyReference("UTDUMMY00001");
	this.innerCAR = new PublicKeyReference("UTDUMMY00001");
}

exports.SmartCardHSMKeySpecGenerator = SmartCardHSMKeySpecGenerator;



/**
 * Set key use counter for key
 *
 * @param {keyUseCounter} keyUseCounter in the range 1 to 2^64 - 2
 */
SmartCardHSMKeySpecGenerator.prototype.setKeyUseCounter = function(keyUseCounter) {
	if ((keyUseCounter < 0) || (keyUseCounter >= 0xFFFFFFFF)) {
		throw new GPError("SmartCardHSMKeySpecGenerator", GPError.INVALID_DATA, 1, "keyUseCounter must be between 0 and 0xFFFFFFFF");
	}
	this.keyUseCounter = keyUseCounter;
}



/**
 * Set key domain
 *
 * @param {Number} keyDomain the key domain to which the key shall be added
 */
SmartCardHSMKeySpecGenerator.prototype.setKeyDomain = function(keyDomain) {
	this.keyDomain = keyDomain;
}



/**
 * Set wrapping key
 *
 * @param {Number} wrappingKey the key to used for wrapping a newly generated symmetric key
 */
SmartCardHSMKeySpecGenerator.prototype.setWrappingKey = function(wrappingKey) {
	this.wrappingKey = wrappingKey;
}



/**
 * Set algorithm list
 *
 * @param {ByteString} algorithms the list of algorithms allowed for this key
 */
SmartCardHSMKeySpecGenerator.prototype.setAlgorithms = function(algorithms) {
	this.algorithms = algorithms;
}



/**
 * Set certificate holder reference for key
 *
 * @param {PublicKeyReference} CHR certificate holder reference
 */
SmartCardHSMKeySpecGenerator.prototype.setCHR = function(CHR) {
	this.CHR = CHR;
}



/**
 * Set certificate holder reference of CA this request shall be sent to
 *
 * @param {PublicKeyReference} CAR certificate holder reference
 */
SmartCardHSMKeySpecGenerator.prototype.setInnerCAR = function(CAR) {
	this.innerCAR = CAR;
}



/**
 * Set holder reference of the key signing this request
 *
 * @param {PublicKeyReference} CAR certificate holder reference
 */
SmartCardHSMKeySpecGenerator.prototype.setOuterCAR = function(CAR) {
	this.outerCAR = CAR;
}



/**
 * @private
 */
SmartCardHSMKeySpecGenerator.prototype.encodeRSAKeySpec = function() {
	var p = new ASN1("Public Key", 0x7F49,
			new ASN1("Object Identifier", 0x06, this.defaultAlgo),
			new ASN1("Public Key Exponent", 0x82, ByteString.valueOf(65537)),
			new ASN1("Key Size", 0x02, ByteString.valueOf(this.keysize))
		);
	return p;
}



/**
 * @private
 */
SmartCardHSMKeySpecGenerator.prototype.encodeECKeySpec = function() {
	// Encode G
	var bb = new ByteBuffer();
	// uncompressed encoding
	bb.append(new ByteString("04", HEX));
	bb.append(this.domainParameter.getComponent(Key.ECC_GX));
	bb.append(this.domainParameter.getComponent(Key.ECC_GY));
	var G = bb.toByteString();

	var p = new ASN1("Public Key", 0x7F49,
			new ASN1("Object Identifier", 0x06, this.defaultAlgo),
			new ASN1("Prime Modulus", 0x81, this.domainParameter.getComponent(Key.ECC_P)),
			new ASN1("First coefficient a", 0x82, this.domainParameter.getComponent(Key.ECC_A)),
			new ASN1("Second coefficient b", 0x83, this.domainParameter.getComponent(Key.ECC_B)),
			new ASN1("Base Point G", 0x84, G),
			new ASN1("Order of the base point", 0x85, this.domainParameter.getComponent(Key.ECC_N)),
			new ASN1("Cofactor f", 0x87, SmartCardHSM.stripLeadingZeros(this.domainParameter.getComponent(Key.ECC_H)))
		);
	return p;
}



/**
 * @private
 */
SmartCardHSMKeySpecGenerator.prototype.encodeKeySpec = function() {
	if (this.keytype == Crypto.RSA) {
		return this.encodeRSAKeySpec();
	} else {
		return this.encodeECKeySpec();
	}
}



/**
 * Return the encoded key specification
 *
 * @type ByteString
 * @return the encoded C-Data for GENERATE ASYMMETRIC KEY PAIR
 */
SmartCardHSMKeySpecGenerator.prototype.encode = function() {
	var t = new ASN1(0x30);

	if (this.keytype != Crypto.AES) {
		t.add(new ASN1("CPI", 0x5F29, new ByteString("00", HEX)));

		if ((typeof(this.innerCAR) != "undefined") && (this.innerCAR)) {
			t.add(new ASN1("CAR", 0x42, this.innerCAR.getBytes()));
		}

		t.add(this.encodeKeySpec());
		t.add(new ASN1("CHR", 0x5F20, this.CHR.getBytes()));

		if (typeof(this.outerCAR) != "undefined") {
			t.add(new ASN1("OuterCAR", 0x45, this.outerCAR.getBytes()));
		}
	}

	if (typeof(this.keyUseCounter) != "undefined") {
		t.add(new ASN1("Key use counter", 0x90, ByteString.valueOf(this.keyUseCounter, 4)));
	}

	if (typeof(this.algorithms) != "undefined") {
		t.add(new ASN1("Algorithms", 0x91, this.algorithms));
	}

	if (typeof(this.keyDomain) != "undefined") {
		t.add(new ASN1("KeyDomain", 0x92, ByteString.valueOf(this.keyDomain)));
	}

	if (typeof(this.wrappingKey) != "undefined") {
		t.add(new ASN1("Wrapping Key", 0x93, ByteString.valueOf(this.wrappingKey)));
	}

	return t.value;
}



/**
 * Create a key specification generator instance for AES keys
 *
 * @class Class implementing an encoder for the C-Data required in Generate Symmetric Key
 * @param {ByteString} allowedAlgorithms the list of allowed algorithm identifier
 */
function SmartCardHSMSymmetricKeySpecGenerator(allowedAlgorithms) {
	this.algorithms = allowedAlgorithms;
}

exports.SmartCardHSMSymmetricKeySpecGenerator = SmartCardHSMSymmetricKeySpecGenerator;



/**
 * Set key domain
 *
 * @param {Number} keyDomain the key domain to which the key shall be added
 */
SmartCardHSMSymmetricKeySpecGenerator.prototype.setKeyDomain = function(keyDomain) {
	this.keyDomain = keyDomain;
}



/**
 * Return the encoded AES key specification
 *
 * @type ByteString
 * @return the encoded C-Data for Generate Symmetric Key
 */
SmartCardHSMSymmetricKeySpecGenerator.prototype.encode = function() {
	var t = new ASN1(0x30);

	t.add(new ASN1("Algorithms", 0x91, this.algorithms));

	if (typeof(this.keyUseCounter) != "undefined") {
		t.add(new ASN1("Key use counter", 0x90, ByteString.valueOf(this.keyUseCounter, 4)));
	}

	if (typeof(this.keyDomain) != "undefined") {
		t.add(new ASN1("Key Domain", 0x92, ByteString.valueOf(this.keyDomain)));
	}

	if (typeof(this.wrappingKey) != "undefined") {
		t.add(new ASN1("Wrapping Key", 0x93, this.wrappingKey));
	}

	return t.value;
}



SmartCardHSM.test = function() {
	var crypto = new Crypto();
	var card = new Card(_scsh3.reader);
	var sc = new SmartCardHSM(card);

	var sci = new SmartCardHSMInitializer(card);
	sci.initialize();

	var pubKey = sc.validateCertificateChain(crypto);
	sc.openSecureChannel(crypto, pubKey);

	sc.verifyUserPIN(sci.userPIN);

	var kg = new SmartCardHSMKeySpecGenerator(Crypto.RSA, 1024);
	sc.generateAsymmetricKeyPair(1, 0, kg.encode());

	var dp = new Key();
	dp.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));

	var kg = new SmartCardHSMKeySpecGenerator(Crypto.EC, dp);
	sc.generateAsymmetricKeyPair(2, 0, kg.encode());

	var list = sc.enumerateKeys();
	GPSystem.log(GPSystem.DEBUG, module.id, "Keys on device: " + list);

	var crypto = sc.getCrypto();
	var message = new ByteString("Hello World", ASCII);

	var key = sc.getKey(1);
	var signature = crypto.sign(key, Crypto.RSA_SHA256, message);
	GPSystem.log(GPSystem.DEBUG, module.id, "Signature: " + signature);

	var key = sc.getKey(2);
	var signature = crypto.sign(key, Crypto.ECDSA, message);
	GPSystem.log(GPSystem.DEBUG, module.id, "Signature: " + signature);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Connector implementing a web service interface to a SPOC for the
 * distribution of card verifiable certificates used for terminal authentication as defined in CSN 36 9791
 */



/**
 * Creates a web service connector to access services of a SPOC as defined in CSN 36 9791
 *
 * @class Class implementing a SPOC web service connector
 * @constructor
 * @param {String} url the web service endpoint
 */
function SPOCConnection(url) {
	this.url = url;
	this.soapcon = new SOAPConnection(SOAPConnection.SOAP11);
	this.verbose = true;
	this.lastReturnCode = null;
}

exports.SPOCConnection = SPOCConnection;


/**
 * Get the last return code
 *
 * @returns the last return code received or null if none defined
 * @type String
 */
SPOCConnection.prototype.getLastReturnCode = function() {
	return this.lastReturnCode;
}



/**
 * Close the connector and release allocated resources
 */
SPOCConnection.prototype.close = function() {
	this.soapcon.close();
}



/**
 * Obtain a list of certificates from the SPOC
 *
 * @param {String} callerID two letter country code of the calling CVCA
 * @param {String} messageID unique message id generated by the caller
 * @returns a lists of card verifiable certificates from the SPOC or null in case of error
 * @type ByteString[]
 */
SPOCConnection.prototype.getCACertificates = function(callerID, messageID) {

	this.lastReturnCode = null;

	var ns = new Namespace("http://namespaces.unmz.cz/csn369791");

	var request =
		<csn:GetCACertificatesRequest xmlns:csn={ns}>
			<csn:callerID>{callerID}</csn:callerID>
			<csn:messageID>{messageID}</csn:messageID>
		</csn:GetCACertificatesRequest>

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try	 {
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError(module.id, GPError.DEVICE_ERROR, 0, "GetCACertificates failed with : " + e.message);
	}

	this.response = response;

	var certlist = [];

	this.lastReturnCode = response.ns::result.toString();

	if (this.lastReturnCode == "ok_cert_available") {
		for each (var c in response.ns::certificateSequence.ns::certificate) {
			var cvc = new ByteString(c, BASE64);
			certlist.push(cvc);
			if (this.verbose) {
				GPSystem.log(GPSystem.INFO, module.id, cvc);
			}
		}
	} else {
		return null;
	}

	return certlist;
}



/**
 * Request a certificate from the SPOC using a web service
 *
 * @param {String} callerID two letter country code of the calling CVCA
 * @param {String} messageID unique message id generated by the caller
 * @param {ByteString} certreq the certificate request
 * @returns the new certificates
 * @type ByteString[]
 */
SPOCConnection.prototype.requestCertificate = function(certreq, callerID, messageID) {

	var soapConnection = new SOAPConnection();

	var ns = new Namespace("http://namespaces.unmz.cz/csn369791");

	var request =
		<csn:RequestCertificateRequest xmlns:csn={ns}>
			<csn:callerID>{callerID}</csn:callerID>
			<csn:messageID>{messageID}</csn:messageID>
			<csn:certificateRequest>{certreq.toString(BASE64)}</csn:certificateRequest>
		</csn:RequestCertificateRequest>

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try	{
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError(module.id, GPError.DEVICE_ERROR, 0, "RequestCertificate failed with : " + e.message);
	}

	this.response = response;

	var certlist = [];

	this.lastReturnCode = response.ns::result.toString();

	if (this.lastReturnCode == "ok_cert_available") {
		for each (var c in response.ns::certificateSequence.ns::certificate) {
			var cvc = new ByteString(c, BASE64);
			certlist.push(cvc);
			if (this.verbose) {
				GPSystem.log(GPSystem.INFO, module.id, cvc);
			}
		}
	} else {
		return null;
	}

	return certlist;
}



/**
 * Send certificates to the SPOC
 *
 * @param {ByteString[]} certificates the list of certificates to post or null
 * @param {String} callerID two letter country code of the calling CVCA
 * @param {String} messageID unique message id generated by the caller (optional)
 * @param {String} statusInfo the status info provided by the sender
 * @type String
 * @return the returnCode
 */
SPOCConnection.prototype.sendCertificates = function(certificates, callerID, messageID, statusInfo) {

	var soapConnection = new SOAPConnection();

	var ns = new Namespace("http://namespaces.unmz.cz/csn369791");

	if (messageID) {
		if (certificates && certificates.length) {
			var request =
			<csn:SendCertificatesRequest xmlns:csn={ns}>
				<csn:callerID>{callerID}</csn:callerID>
				<!--Optional:-->
				<csn:messageID>{messageID}</csn:messageID>
				<!--Optional:-->
				<csn:certificateSequence>
				</csn:certificateSequence>
				<csn:statusInfo>{statusInfo}</csn:statusInfo>
			</csn:SendCertificatesRequest>
		} else {
			var request =
			<csn:SendCertificatesRequest xmlns:csn={ns}>
				<csn:callerID>{callerID}</csn:callerID>
				<!--Optional:-->
				<csn:messageID>{messageID}</csn:messageID>
				<csn:statusInfo>{statusInfo}</csn:statusInfo>
			</csn:SendCertificatesRequest>
		}
	} else {
		if (certificates && certificates.length) {
			var request =
			<csn:SendCertificatesRequest xmlns:csn={ns}>
				<csn:callerID>{callerID}</csn:callerID>
				<!--Optional:-->
				<csn:certificateSequence>
				</csn:certificateSequence>
				<csn:statusInfo>{statusInfo}</csn:statusInfo>
			</csn:SendCertificatesRequest>
		} else {
			var request =
			<csn:SendCertificatesRequest xmlns:csn={ns}>
				<csn:callerID>{callerID}</csn:callerID>
				<!--Optional:-->
				<csn:statusInfo>{statusInfo}</csn:statusInfo>
			</csn:SendCertificatesRequest>
		}
	}

	if (certificates && certificates.length) {
		var list = request.ns::certificateSequence;
		for (var i = 0; i < certificates.length; i++) {
			var cvc = certificates[i];
			list.ns::certificate += <csn:certificate xmlns:csn={ns}>{cvc.toString(BASE64)}</csn:certificate>
		}
	}

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try	{
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError(module.id, GPError.DEVICE_ERROR, 0, "SendCertificates failed with : " + e.message);
	}

	this.response = response;

	this.lastReturnCode = response.ns::result.toString();

	return this.lastReturnCode;
}



/**
 * Obtain a list of certificates from the SPOC
 *
 * @param {String} callerID two letter country code of the calling CVCA
 * @param {String} messageID unique message id generated by the caller
 * @param {String} subject the subject of the message
 * @param {String} body the body of the message
 */
SPOCConnection.prototype.generalMessage = function(callerID, messageID, subject, body) {

	this.lastReturnCode = null;

	var ns = new Namespace("http://namespaces.unmz.cz/csn369791");

	var request =
		<csn:GeneralMessageRequest xmlns:csn={ns}>
			<csn:callerID>{callerID}</csn:callerID>
			<csn:messageID>{messageID}</csn:messageID>
			<csn:subject>{subject}</csn:subject>
			<csn:body>{body}</csn:body>
		</csn:GeneralMessageRequest>

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try	 {
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError(module.id, GPError.DEVICE_ERROR, 0, "GeneralMessage failed with : " + e.message);
	}

	this.response = response;

	this.lastReturnCode = response.ns::result.toString();
}



/**
 * Convert a list of certificates in binary format to a list of CVC objects
 *
 * @param {ByteString[]} certlist the list of certificates
 * @type CVC[]
 * @return the list of certificate objects
 */
SPOCConnection.toCVCList = function(certlist) {
	var certs = [];
	for each (var cvcbin in certlist) {
		certs.push(new CVC(cvcbin));
	}
	return certs;
}



/**
 * Convert a list of certificate objects into a list of certificates in binary format
 *
 * @param {CVC[]} certlist the list of certificate objects
 * @type ByteString[]
 * @return the list of certificates
 */
SPOCConnection.fromCVCList = function(certlist) {
	var certs = [];
	for each (var cvc in certlist) {
		certs.push(cvc.getBytes());
	}
	return certs;
}



SPOCConnection.test = function() {
	var c = new SPOCConnection("http://localhost:8080/se/spoc");
	c.verbose = true;
	var certlist = c.getCACertificates("UT", "4711");
	for (var i = 0; i < certlist.length; i++) {
		print(certlist[i]);
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions 
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns:SPOC="http://namespaces.unmz.cz/csn369791"
	targetNamespace="http://namespaces.unmz.cz/csn369791">
	<wsdl:types>
		<xs:schema xmlns="http://namespaces.unmz.cz/csn369791"
			targetNamespace="http://namespaces.unmz.cz/csn369791"
			elementFormDefault="qualified"
			attributeFormDefault="unqualified">
			<xs:element name="certificateSequence">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="certificate" type="xs:base64Binary" minOccurs="1" maxOccurs="unbounded"></xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="RequestCertificateRequest">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="callerID" type="xs:string">
						</xs:element>
						<xs:element name="messageID" type="xs:string">
						</xs:element>
						<xs:element name="certificateRequest" type="xs:base64Binary">
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="RequestCertificateResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element ref="certificateSequence" minOccurs="0" maxOccurs="1">
						</xs:element>
						<xs:element name="result">
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:enumeration value="ok_cert_available"></xs:enumeration>
									<xs:enumeration value="ok_reception_ack"></xs:enumeration>
									<xs:enumeration value="failure_inner_signature"></xs:enumeration>
									<xs:enumeration value="failure_outer_signature"></xs:enumeration>
									<xs:enumeration value="failure_syntax"></xs:enumeration>
									<xs:enumeration value="failure_request_not_accepted"></xs:enumeration>
									<xs:enumeration value="failure_internal_error"></xs:enumeration>
								</xs:restriction>
							</xs:simpleType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="SendCertificatesRequest">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="callerID" type="xs:string">
						</xs:element>
						<xs:element name="messageID" type="xs:string" minOccurs="0" maxOccurs="1">
						</xs:element>
						<xs:element minOccurs="0" maxOccurs="1" ref="certificateSequence">
						</xs:element>
						<xs:element name="statusInfo">
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:enumeration value="new_cer_available_notification"></xs:enumeration>
									<xs:enumeration value="ok_cert_available"></xs:enumeration>
									<xs:enumeration value="failure_inner_signature"></xs:enumeration>
									<xs:enumeration value="failure_outer_signature"></xs:enumeration>
									<xs:enumeration value="failure_syntax"></xs:enumeration>
									<xs:enumeration value="failure_request_not_accepted"></xs:enumeration>
									<xs:enumeration value="failure_internal_error"></xs:enumeration>
								</xs:restriction>
							</xs:simpleType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="SendCertificatesResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="result">
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:enumeration value="ok_received_correctly"></xs:enumeration>
									<xs:enumeration value="failure_syntax"></xs:enumeration>
									<xs:enumeration value="failure_messageID_unknown"></xs:enumeration>
									<xs:enumeration value="failure_internal_error"></xs:enumeration>
								</xs:restriction>
							</xs:simpleType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GetCACertificatesRequest">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="callerID" type="xs:string">
						</xs:element>
						<xs:element name="messageID" type="xs:string">
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GetCACertificatesResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element ref="certificateSequence" minOccurs="0" maxOccurs="1">
						</xs:element>
						<xs:element name="result">
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:enumeration value="ok_cert_available"></xs:enumeration>
									<xs:enumeration value="ok_reception_ack"></xs:enumeration>
									<xs:enumeration value="failure_request_not_accepted"></xs:enumeration>
									<xs:enumeration value="failure_internal_error"></xs:enumeration>
								</xs:restriction>
							</xs:simpleType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GeneralMessageRequest">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="callerID" type="xs:string">
						</xs:element>
						<xs:element name="messageID" type="xs:string">
						</xs:element>
						<xs:element name="subject" type="xs:string">
						</xs:element>
						<xs:element name="body" type="xs:string">
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GeneralMessageResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="result">
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:enumeration value="ok"></xs:enumeration>
									<xs:enumeration value="failure_internal_error"></xs:enumeration>
								</xs:restriction>
							</xs:simpleType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:schema>
	</wsdl:types>
	<wsdl:message name="RequestCertificateRequest">
		<wsdl:part name="RequestCertificateRequest" element="SPOC:RequestCertificateRequest"></wsdl:part>
	</wsdl:message>
	<wsdl:message name="RequestCertificateResponse">
		<wsdl:part name="RequestCertificateResponse" element="SPOC:RequestCertificateResponse"></wsdl:part>
	</wsdl:message>
	<wsdl:message name="SendCertificatesRequest">
		<wsdl:part name="SendCertificatesRequest" element="SPOC:SendCertificatesRequest"></wsdl:part>
	</wsdl:message>
	<wsdl:message name="SendCertificatesResponse">
		<wsdl:part name="SendCertificatesResponse" element="SPOC:SendCertificatesResponse"></wsdl:part>
	</wsdl:message>
	<wsdl:message name="GetCACertificatesRequest">
		<wsdl:part name="GetCACertificatesRequest" element="SPOC:GetCACertificatesRequest"></wsdl:part>
	</wsdl:message>
	<wsdl:message name="GetCACertificatesResponse">
		<wsdl:part name="GetCACertificatesResponse" element="SPOC:GetCACertificatesResponse"></wsdl:part>
	</wsdl:message>
	<wsdl:message name="GeneralMessageRequest">
		<wsdl:part name="GeneralMessageRequest" element="SPOC:GeneralMessageRequest"></wsdl:part>
	</wsdl:message>
	<wsdl:message name="GeneralMessageResponse">
		<wsdl:part name="GeneralMessageResponse" element="SPOC:GeneralMessageResponse"></wsdl:part>
	</wsdl:message>
	<wsdl:portType name="SPOCPortType">
		<wsdl:operation name="RequestCertificate">
			<wsdl:input message="SPOC:RequestCertificateRequest"></wsdl:input>
			<wsdl:output message="SPOC:RequestCertificateResponse"></wsdl:output>			
		</wsdl:operation>
		<wsdl:operation name="SendCertificates">
			<wsdl:input message="SPOC:SendCertificatesRequest"></wsdl:input>
			<wsdl:output message="SPOC:SendCertificatesResponse"></wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="GetCACertificates">
			<wsdl:input message="SPOC:GetCACertificatesRequest"></wsdl:input>
			<wsdl:output message="SPOC:GetCACertificatesResponse"></wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="GeneralMessage">
			<wsdl:input message="SPOC:GeneralMessageRequest"></wsdl:input>
			<wsdl:output message="SPOC:GeneralMessageResponse"></wsdl:output>
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:binding name="SPOCSOAPBinding" type="SPOC:SPOCPortType">
		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
		<wsdl:operation name="RequestCertificate">
			<soap:operation soapAction="RequestCertificate"/>
			<wsdl:input>
				<soap:body parts="RequestCertificateRequest" use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body parts="RequestCertificateResponse" use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="SendCertificates">
			<soap:operation soapAction="SendCertificates"/>
			<wsdl:input>
				<soap:body parts="SendCertificatesRequest" use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body parts="SendCertificatesResponse" use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="GetCACertificates">
			<soap:operation soapAction="GetCACertificates"/>
			<wsdl:input>
				<soap:body parts="GetCACertificatesRequest" use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body parts="GetCACertificatesResponse" use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="GeneralMessage">
			<soap:operation soapAction="GeneralMessage"/>
			<wsdl:input>
				<soap:body parts="GeneralMessageRequest" use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body parts="GeneralMessageResponse" use="literal"/>
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:service name="SPOC">
		<wsdl:port name="SPOCPort" binding="SPOC:SPOCSOAPBinding">
			<soap:address location="http://spoc-server/SPOC"/>
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A simple application server supporting a web UI, SOAP services and remote card terminals
 */


var AuthenticationWizard	= require('scsh/srv-cc1/AuthenticationWizard').AuthenticationWizard;
var CardAction			= require('scsh/srv-cc1/CardAction').CardAction;
var File			= require('scsh/file/File').File;



/**
 * Creates an application server instance.
 *
 * @class <p>Provides for a simple application server.</p>
 *
 * @constructor
 */
function ApplicationServer() {
	this.ports = [];
	this.uiPort = 8080;
	this.restarted = true;
	if (__ServletContext) {
		this.contextPath = __ServletContext.getContextPath();
	} else {
		this.contextPath = "";
	}

	this.parseServerConf();

	this.setServerURL("http://localhost:" + this.uiPort);
}

exports.ApplicationServer = ApplicationServer;



/**
 * Set server url. The servlet context path is appended.
 *
 * @param {String} url the server URL (Default http://localhost:8080)
 */
ApplicationServer.prototype.setServerURL = function(url) {
	this.serverURL = url.concat(this.contextPath);
	GPSystem.log(GPSystem.INFO, module.id, "Server URL: " + url);
}



/**
 * Determine server port from jetty configuration
 *
 */
ApplicationServer.prototype.parseServerConf = function() {
	var f = new File("etc/server.conf", GPSystem.USR);

	if (!f.exists()) {
		var f = new File("etc/server.conf", GPSystem.SYS);
	}

	if (f.exists()) {
		var s = f.readAllAsString();
		var lines = s.split("\n");
		for (var i = 0; i < lines.length; i++) {
			var s = lines[i];
			if (s.indexOf("scriptingserver.mainport.port") == 0) {
				var p = s.substr(s.indexOf("=") + 1);
				this.uiPort = parseInt(p);
			}
		}
		f.close();
	}
}



/**
 * Register an object that provides web services for a given relative url.
 *
 * @param {url} url the relativ URL under which the service responds
 * @param {Object} soapService the service implementation that serves POST requests
 * @param {Object} uiFactory a factory that can create new UI objects using the newUI() method
 */
ApplicationServer.prototype.registerService = function(url, soapService, uiFactory, cardHandler) {
	port = this.uiPort;

	if (!this.ports[port]) {
		this.ports[port] = [];
	}

	this.ports[port][url] = { url: url, service: soapService, ui: uiFactory, cardHandler: cardHandler };
}



/**
 * Register a service based on a service descriptor
 *
 * The service descriptor may contain an object reference for uiFactory, soapService, cardHandler and restHandler.
 *
 * uiFactory is an object providing a newUI(session) method, called by the ApplicationServer for each new session
 * started with the service.
 *
 * soapService is an object providing SOAP calls as methods taking the soap body, http request and http response as
 * parameter. Each webservice method must be marked in the function prototype with WebService=true.
 *
 * restHandler is an object providing a handleREST(req, res) method to process RESTfull requests.
 *
 * cardHandler is an object providing a handleCard() method that processes inbound requests at the remote terminal interface
 *
 * @param {url} url the relativ URL under which the service responds
 * @param {Object} desc the service decriptor
 * @param {Number} port the port this service shall be bound to (optional, default bound to UI port)
 */
ApplicationServer.prototype.registerServiceForURL = function(url, desc, port) {
	if (!port) {
		port = this.uiPort;
	}

	if (!this.ports[port]) {
		this.ports[port] = [];
	}

	this.ports[port][url] = {
		url: url,
		name: desc.name,
		description: desc.description,
		service: desc.soapService,
		ui: desc.uiFactory,
		cardHandler: desc.cardHandler,
		restHandler: desc.restHandler };
}



/**
 * Set an AuthorizationManager object to enforce user authentication
 *
 * @param {AuthorizationManager} authorizationManager the authorization manager to use for authentication
 * @param {Boolean} pinNotRequired do not explicity request PIN verification, but perform card authentication only
 */
ApplicationServer.prototype.setAuthorizationManager = function(authorizationManager, pinNotRequired) {
	this.authorizationManager = authorizationManager;
	this.pinRequired = !pinNotRequired;
}



/**
 * Enable the PKI-as-a-Service style for the AuthenticationWizard
 */
ApplicationServer.prototype.enablePaaSStyle = function() {
	this.style = AuthenticationWizard.STYLE_PAAS;
}



/**
 * Set the optional imprintURL
 */
ApplicationServer.prototype.setImprintURL = function(imprintURL) {
	this.imprintURL = imprintURL;
}



/**
 * Return session associated with req.
 *
 * If the scripting environment has been restarted, then invalidate the session first
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
ApplicationServer.prototype.getSession = function(req, res) {
    	var session = req.getSession();

	if (this.restarted) {							// For development purposes invalidate the current UI session
		session.nativeSession.invalidate();
		session = req.getSession();
		this.restarted = false;
	}
	return session;
}



/**
 * Redirect to first server with a UI
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
ApplicationServer.prototype.redirectToFirstUI = function(req, res) {
	var s = { url: ".." };

	var registry = this.ports[this.uiPort];

	for (var i in registry) {
		s = registry[i];
		if (s.ui) {
			break;
		}
	}
	GPSystem.log(GPSystem.DEBUG, module.id, "Redirect to " + this.contextPath + "/se/" + s.url);
	res.setStatus(HttpResponse.SC_SEE_OTHER);
	res.addHeader("Location", this.contextPath + "/se/" + s.url );
	return;
}



/**
 * Provide session state as JSON and allow authentication with token.
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
ApplicationServer.prototype.statusJSON = function(req, res) {
	var session = this.getSession(req, res);

	var r = { };
	if (typeof(VERSION) != "undefined") {
		r.version = VERSION;
	}

	r.rt = {};
	r.rt.url = ApplicationServer.instance.serverURL + "/rt";
	r.rt.sessionId = req.getSession().id;
	if (this.pinRequired) {
		r.rt.pinRequired = 1;
	}

	if (typeof(session.wizard) == "undefined") {
		session.wizard = new AuthenticationWizard(null, this.authorizationManager, this.pinRequired, this.style, this.imprintURL);
	} else {
		if ((session.wizard instanceof AuthenticationWizard) && (session.wizard.cardState)) {
			r.cardState = {
				pinState: session.wizard.cardState.pinState,
				authState: session.wizard.state
			};
			delete session.wizard;
		}
	}

	// Login is only valid, if
	// 1. The cardState object indicates a successfull login (with PIN)
	// 2. A user object is created
	// 3. The user object is associated with user id
	if (session.cardState && session.user && session.user.id) {
		r.user = {};
		if (session.user.name) {
			r.user.name = session.user.name;
		}
		if (session.user.id) {
			r.user.id = session.user.id;
		}
	}

	var str = JSON.stringify(r, null, "\t");
	res.setContentType("application/json");
	res.setStatus(HttpResponse.SC_OK);
	res.println(str);
}



/**
 * Ensure authentication, if configured
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
ApplicationServer.prototype.statusPage = function(req, res) {
   	var session = this.getSession(req, res);

	// No authentication required or authentication performed
	if ((typeof(this.authorizationManager) == "undefined") || session.cardState) {
		if (session.startURL) {
			res.setStatus(HttpResponse.SC_SEE_OTHER);
			res.addHeader("Location", this.contextPath + "/se" + session.startURL );
			delete session.startURL;
		} else {
			this.redirectToFirstUI(req, res);
		}

		return;
	}

	GPSystem.log(GPSystem.DEBUG, module.id, "Processing AuthenticationWizard");

	if (typeof(session.wizard) == "undefined") {
		GPSystem.log(GPSystem.DEBUG, module.id, "Create new AuthenticationWizard");
		session.wizard = new AuthenticationWizard(null, this.authorizationManager, this.pinRequired, this.style, this.imprintURL);
	}

	var page = session.wizard.getPage(req, res);

	if (page) {
		session.wizard.sendPage(req, res, page);
	} else {
		// Wizard has completed
		var rc = session.wizard.getReturnCode();
		GPSystem.log(GPSystem.DEBUG, module.id, "AuthenticationWizard completed with " + rc);

		delete session.wizard;

		res.setStatus(HttpResponse.SC_SEE_OTHER);
		res.addHeader("Location", this.contextPath + "/se" );
	}
}



/**
 * Logout user from server
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
ApplicationServer.prototype.logout = function(req, res) {
	GPSystem.log(GPSystem.DEBUG, module.id, "logout() called");

	var session = this.getSession(req, res);

	delete session.cardState;
	delete session.userId;
	delete session.user;
	res.setStatus(HttpResponse.SC_SEE_OTHER);
	res.addHeader("Location", this.contextPath + "/se");
}



/**
 * Generate a list of services that provide a UI
 */
ApplicationServer.prototype.getUIList = function() {
	var list = [];

	var registry = this.ports[this.uiPort];

	for (var i in registry) {
		var spec = registry[i];
		if (spec.ui) {
			var url = this.contextPath + "/se/" + spec.url;
			var name = spec.name;
			if (!name) {
				name = spec.url;
			}
			var entry = { id: spec.url, name: name, description: spec.description, url: url, roleRequired: spec.ui.roleRequired };
			list.push(entry);
		}
	}

	return list;
}



/**
 * Dispatch a SOAP request to the addressed service
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {Object} service the service entry in the registry
 */
ApplicationServer.prototype.dispatchSOAPRequest = function(req, res, service) {
	try	{
		var soapenv = req.getEntityAsXML();

		GPSystem.log(GPSystem.INFO, module.id, "Received SOAP message for " + req.pathInfo);
		GPSystem.log(GPSystem.DEBUG, module.id, soapenv);

		if (typeof(service.service) == "undefined") {
			GPSystem.log(GPSystem.ERROR, module.id, "No SOAP service available at this URL");
			res.setStatus(HttpResponse.SC_BAD_REQUEST);
			return;
		}

		var soapns = soapenv.namespace();
		var soap12 = (soapns == "http://www.w3.org/2003/05/soap-envelope")

		var soapprefix = soapns.prefix;

		var soapbody = soapenv.soapns::Body.elements()[0];
		var method = soapbody.localName();
		var bodyns = soapbody.namespace();

		var servicehandler = service.service[method];
		if ((typeof(servicehandler) != "function") || (typeof(servicehandler.WebService) == "undefined")) {
			GPSystem.log(GPSystem.ERROR, module.id, "No implementation found for message " + method);
			res.setStatus(HttpResponse.SC_NOT_FOUND);
			return;
		}

		var result = service.service[method](soapbody, req, res);

		var response =
		<{soapprefix}:Envelope xmlns:{soapprefix}={soapns}>
			<{soapprefix}:Header/>
			<{soapprefix}:Body>
			<response/>
			</{soapprefix}:Body>
		</{soapprefix}:Envelope>;

		response.soapns::Body.response = result;

		if (soap12) {
			res.setContentType("application/soap+xml; charset=utf-8");
		} else {
			res.setContentType("text/xml; charset=utf-8");
		}

		var responseStr = response.toXMLString();
		GPSystem.log(GPSystem.INFO, module.id, "Responding with SOAP message for " + req.pathInfo);
		GPSystem.log(GPSystem.INFO, module.id, responseStr);

		res.print(responseStr);
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "Exception during SOAP processing in " + e.fileName + "#" + e.lineNumber);
		GPSystem.log(GPSystem.ERROR, module.id, e);
		res.setStatus(HttpResponse.SC_BAD_REQUEST);
	}
}



/**
 * Dispatch a REST request to the addressed service
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {Object} service the service entry in the registry
 */
ApplicationServer.prototype.dispatchRESTRequest = function(req, res, service) {
	return service.restHandler.handleRequest(req, res);
}



/**
 * Dispatch a UI request to the addressed service
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {Object} service the service entry in the registry
 */
ApplicationServer.prototype.dispatchUIRequest = function(req, res, service) {
    	var session = this.getSession(req, res);

	if (this.authorizationManager && (!session.cardState || !session.user)) {
		session.startURL = req.pathInfo;
		if (req.queryString) {
			session.startURL = session.startURL + "?" + req.queryString;
		}
		res.setStatus(HttpResponse.SC_SEE_OTHER);
		res.addHeader("Location", this.contextPath + "/se");
		return;
	}

	if (typeof(session.ui) == "undefined") {
		session.ui = [];
	}

	if (typeof(session.ui[service.url]) == "undefined") {
		session.ui[service.url] = service.ui.newUI(session);
	}

	session.ui[service.url].handleRequest(req, res);
}



/**
 * Dispatch a card update request to the addressed service
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {Object} service the service entry in the registry
 */
ApplicationServer.prototype.performCardUpdate = function(session, pathInfo, queryInfo) {
	GPSystem.log(GPSystem.DEBUG, module.id, "Application server performs card update for " + pathInfo + " " + queryInfo);
	if (!pathInfo) {			// Handle SmartCard Login
		if (session.wizard) {
			session.wizard.handleCard(session, pathInfo, queryInfo);
		}
		return;
	}

	var url = pathInfo.split("/");

	var registry = this.ports[this.uiPort];

	if (!registry) {
		GPSystem.log(GPSystem.ERROR, module.id, "No service registered for port " + port);
		res.setStatus(HttpResponse.SC_NOT_FOUND);
		return;
	}

	var service = registry[url[1]];

	if (!service) {
		GPSystem.log(GPSystem.ERROR, module.id, "Service URL " + pathInfo + " not defined");
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Service URL " + pathInfo + " not defined");
	}

	if ((typeof(session.ui) == "undefined") || (typeof(session.ui[service.url]) == "undefined")) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Service URL " + pathInfo + " has no active UI session");
		if (service.cardHandler) {
			return service.cardHandler.handleCard(session, pathInfo, queryInfo);
		}
		return;
	}

	session.ui[service.url].handleCard(session, pathInfo, queryInfo);
}



/**
 * Dispatches calls to service or GUI class.
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
ApplicationServer.prototype.handleRequest = function(req, res) {
	var port = req.localPort;

	if (!port) {				// Ensure backwards compatiblity for server without req.localPort
		port = this.uiPort;
	}

	if (req.pathInfo == null) {
		if (port == this.uiPort) {
			var acceptHeader = req.getHeaderField("Accept");
			if ((acceptHeader.length > 0) && (acceptHeader[0] == "application/json")) {
				this.statusJSON(req, res);
			} else {
				this.statusPage(req, res);
			}
		} else {
			res.setStatus(HttpResponse.SC_METHOD_NOT_ALLOWED);
		}
	} else {
		req.url = req.pathInfo.substr(1).split("/");

		var registry = this.ports[port];

		if (!registry) {
			GPSystem.log(GPSystem.ERROR, module.id, "No service registered for port " + port);
			res.setStatus(HttpResponse.SC_NOT_FOUND);
			return;
		}

		var service = registry[req.url[0]];

		if (!service) {
			GPSystem.log(GPSystem.ERROR, module.id, "Service URL " + req.pathInfo + " not defined");
			res.setStatus(HttpResponse.SC_NOT_FOUND);
			return;
		}

		if (req.method == "GET") {
			if (req.queryString &&
					((req.queryString.toLowerCase() == "wsdl") ||
					 (req.queryString.substr(0, 3).toLowerCase() == "xsd"))) {
				if (typeof(service.service.GetWSDL) != "undefined") {
					GPSystem.log(GPSystem.DEBUG, module.id, req.queryString);
					service.service.GetWSDL(req, res);
				} else {
					GPSystem.log(GPSystem.DEBUG, module.id, "No WSDL found");
					res.setStatus(HttpResponse.SC_NOT_FOUND);
				}
			} else if (service.restHandler) {
				GPSystem.log(GPSystem.DEBUG, module.id, "Received REST GET for " + req.pathInfo);
				this.dispatchRESTRequest(req, res, service);
			} else {
				GPSystem.log(GPSystem.DEBUG, module.id, "Received GET for " + req.pathInfo);
				this.dispatchUIRequest(req, res, service);
			}
		} else if (req.method == "POST") {
			GPSystem.log(GPSystem.DEBUG, module.id, "Content-type : " + req.contentType);
			// SOAP 1.2 requires "application/soap+xml"
			// SOAP 1.1 defines "text/xml
			if (req.contentType && ((req.contentType.substr(0, 8).toLowerCase()  == "text/xml") ||
				(req.contentType.substr(0, 20).toLowerCase() == "application/soap+xml"))) {
				this.dispatchSOAPRequest(req, res, service);
			} else if (req.contentType && service.restHandler && (req.contentType.substr(0, 16).toLowerCase()  == "application/json")) {
				GPSystem.log(GPSystem.DEBUG, module.id, "Received REST POST for " + req.pathInfo);
				this.dispatchRESTRequest(req, res, service);
			} else {
				GPSystem.log(GPSystem.DEBUG, module.id, "Received POST for " + req.pathInfo);
				this.dispatchUIRequest(req, res, service);
			}
		} else {
			GPSystem.log(GPSystem.ERROR, module.id, "Method " + req.method + " not supported");
			res.setStatus(HttpResponse.SC_METHOD_NOT_ALLOWED);
		}
	}
}



//
// Create global server instance
//
ApplicationServer.instance = new ApplicationServer();

GPSystem.log(GPSystem.INFO, module.id, "ApplicationServer instance created");
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview The wizard retrieves the information from the HSM which is necessary for authorization and queries the Authorization Manager
 */

var CardAction		= require('scsh/srv-cc1/CardAction').CardAction;
var SmartCardHSM	= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;

/**
 * Create a new AuthenticationWizard
 *
 * The AuthenticationWizard uses the remote terminal to authenticate a SmartCard-HSM using the
 * device authentication certificate chain.
 *
 * The wizard injects a cardState object into the session object, containing the properties chain
 * (from SmartCardHSM.validateCertificateChain()) and pinState (the SW1/SW2 returned by VERIFY).
 *
 * If the an authorizationManager is defined, then the getUser() method is called with
 * the SmartCard-HSM unique id passed as parameter. The user is injected as property user into the
 * session object.
 *
 * If the returned user object has the pinRequired property set, then the wizard enforces that the PIN was validated.
 * The same is true if requestpin is set in the constructor
 *
 * @param {CommonUI} ui the service ui (can be null)
 * @param {AuthorizationManager} authorizationManager a class implementing a getUser() method that maps a unique id to a user object
 * @param {Boolean} requestpin request client to try PIN verification
 */
function AuthenticationWizard(ui, authorizationManager, requestpin, style, imprintURL) {
	CardAction.call(this, ui);
	this.authorizationManager = authorizationManager;
	this.requestpin = requestpin;
	this.style = AuthenticationWizard.STYLE_DEFAULT;
	if (style) {
		this.style = style;
	}
	this.imprintURL = imprintURL;
	this.lang = "en";
}

AuthenticationWizard.prototype = Object.create(CardAction.prototype);
AuthenticationWizard.constructor = AuthenticationWizard;

exports.AuthenticationWizard = AuthenticationWizard;



AuthenticationWizard.STYLE_DEFAULT = 0;
AuthenticationWizard.STYLE_PAAS = 1;



/**
 * Generate the default HTML template
 *
 * @returns the HTML page template
 * @type XML
 */
AuthenticationWizard.prototype.generateDefaultTemplate = function() {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var template =
		<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" >
			<head>
				<title>Login Required</title>
				<link rel="stylesheet" type="text/css" href={"css/style.css"}/>
			</head>
			<body>
				<div align="left">
					<a href="http://www.cardcontact.de"><img src={"images/banner.jpg"} width="750" height="80" border="0"/></a>
				</div>

				<div id="main">
					<div id="error"/>
					<div id="content"/>
					<p class="copyright">{String.fromCharCode(0xA9) + " Copyright 2003 - 2017 "}<a href="http://www.cardcontact.de">CardContact</a> Systems GmbH, Minden, Germany</p>
				</div>
			</body>
		</html>;

	return template;
}



/**
 * Generate the PKI-as-a-Service HTML template
 *
 * @returns the HTML page template
 * @type XML
 */
AuthenticationWizard.prototype.generatePaaSTemplate = function() {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var template =
		<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" >
			<head>
				<title>Login Required</title>
				<link rel="stylesheet" type="text/css" href="css/paas_style.css"/>
				<link rel="stylesheet" type="text/css" href="css/pure-min.css"/>
				<link rel="stylesheet" type="text/css" href="css/grids-responsive-min.css"/>
			</head>
			<body>
				<div class="banner" align="left">
					<a href="http://www.cardcontact.de"><img src="images/CardContact_logo_b28.jpg"  border="0"/></a>
				</div>
				<div class="paas-navigator-empty "/>

				<div id="main">
					<div id="error"/>
					<div id="content"/>
					<div class="footer pure-g">
						<div class="pure-u-1 pure-u-md-1-2">
							<p id="imprint" class="imprint"></p>
						</div>
						<div class="pure-u-1 pure-u-md-1-2">
							<p class="copyright">Version { VERSION } {String.fromCharCode(0xA9) + " Copyright 2003 - 2023 "}<a href="http://www.cardcontact.de">CardContact</a> Systems GmbH, Minden, Germany</p>
						</div>
					</div>
				</div>
			</body>
		</html>;

	var p = template.body..p.(@id == "imprint");
	if (typeof(this.imprintURL) != "undefined") {
		p.appendChild(
			<a href={this.imprintURL}>Imprint</a>
		);
	}

	return template;
}



/**
 * Send page after embedding in the HTML template
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {XML} page the page contents
 */
AuthenticationWizard.prototype.sendPage = function(req, res, page) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var template = null;
	switch (this.style) {
		case AuthenticationWizard.STYLE_PAAS:
			template = this.generatePaaSTemplate();
			page.@class = "welcomepage";
			break;
		default:
			template = this.generateDefaultTemplate();
	}

	var c = template..div.(@id == "content");
	c.div = page;

	res.setContentType("application/xhtml+xml");
	res.addHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0");
	res.addHeader("Pragma", "no-cache");
	res.print('<?xml version="1.0" encoding="UTF-8" standalone="no"?>');
	res.print('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n');
	res.print(template.toXMLString());
}



AuthenticationWizard.REDIRECT = "redirect";
AuthenticationWizard.INVALIDCARD = "invalidcard";
AuthenticationWizard.NOTAUTHORIZED = "notauthorized";
AuthenticationWizard.WRONGPIN = "wrongpin";
AuthenticationWizard.BLOCKEDPIN = "blockedpin";
AuthenticationWizard.PINREQUIRED = "pinrequired";

/**
 * Return the page depending from the current state.
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
AuthenticationWizard.prototype.getPage = function(req, res) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getPage() : CardAction state: " + this.state);

	switch(this.state) {
		case CardAction.NEW:
			var acceptLang = req.getHeaderField("Accept-Language");
			GPSystem.log(GPSystem.DEBUG, module.id, "Accept-Language: " + acceptLang);
			var local = req.nativeRequest.getLocale();
			this.lang = local.getLanguage();
			GPSystem.log(GPSystem.DEBUG, module.id, "Local Language: " + this.lang);

			this.state = AuthenticationWizard.REDIRECT;
			var page = this.getLoginPage(req, res);
			break;
		case AuthenticationWizard.REDIRECT:
			var page = this.getRedirectionPage(req, res);
			this.state = CardAction.NOCLIENT;
			break;
		case CardAction.NOCLIENT:
			var page = this.getNoClientPage(req, res);
			this.state = AuthenticationWizard.REDIRECT;
			break;
		case AuthenticationWizard.INVALIDCARD:
			var page = this.getInvalidCardPage(req, res);
			this.state = CardAction.NEW;
			break;
		case AuthenticationWizard.NOTAUTHORIZED:
			var page = this.getNotAuthorizedPage(req, res);
			this.state = CardAction.NEW;
			break;
		case AuthenticationWizard.WRONGPIN:
			var page = this.getWrongPINPage(req, res);
			this.state = AuthenticationWizard.REDIRECT;
			break;
		case AuthenticationWizard.PINREQUIRED:
			var page = this.getPINRequiredPage(req, res);
			this.state = AuthenticationWizard.REDIRECT;
			break;
		case AuthenticationWizard.BLOCKEDPIN:
			var page = this.getBlockedPINPage(req, res);
			this.state = CardAction.NEW;
			break;
		case CardAction.SUCCESS:
			var page = null;
			break;
	}
	return page;
}



/**
 * Serve this page to start the redirection to the local client
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
AuthenticationWizard.prototype.getRedirectionPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	if (this.requestpin) {
		var page =
		<div>
			<h1>User Authentication</h1>
			<p>Please enter your PIN in the PIN dialog.</p>
			<p>The dialog may be covered by your browser window or will prompt on your PIN-Pad reader.</p>

			<p>Please wait for the green tick to appear. {this.getActivationLink(req, res, 1)}</p>
			<p>The page will be reloaded automatically if JavaScript is enabled.</p>
			<p>If JavaScript is disabled, then press <a href="">continue</a> after the green tick is shown.</p>
		</div>
	} else {
		var page =
		<div>
			<h1>Card Authentication</h1>
			<p>Please wait for the green tick to appear. {this.getActivationLink(req, res, -1)}</p>
			<p>The page will be reloaded automatically if JavaScript is enabled.</p>
			<p>If JavaScript is disabled, then press <a href="">continue</a> after the green tick is shown.</p>
		</div>
	}
	return page;
}



/**
 * Serve this page to start the redirection to the local client
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
AuthenticationWizard.prototype.getLoginPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>Login Required</h1>
			<p>Please insert your SmartCard-HSM and press <a href="">continue</a> or reload.</p>
		</div>

	return page;
}



/**
 * Serve this page if the client is not authorized for the service
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
AuthenticationWizard.prototype.getNotAuthorizedPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>Authorization Failed</h1>
			<p>You ({this.userId}) are not authorized to use this service.</p>
			<p>Press <a href="">continue</a></p>
		</div>

	return page;
}



/**
 * Serve this page if the client is required to perform PIN verification, but didn't
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
AuthenticationWizard.prototype.getPINRequiredPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>PIN Verification Required</h1>
			<p>PIN verification is required to access this service.</p>
			<p>Press <a href="">continue</a></p>
		</div>

	return page;
}



/**
 * Serve this page if the card at the client is no SmartCard-HSM
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
AuthenticationWizard.prototype.getInvalidCardPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>Authentication Failed</h1>
			<p>The card in your reader or the attached USB-Token is not a valid SmartCard-HSM.</p>
			<p>Press <a href="">continue</a></p>
		</div>

	return page;
}



AuthenticationWizard.prototype.getWrongPINPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>Wrong PIN</h1>
			<p>The PIN you entered was invalid or the PIN entry was cancelled.</p>
			<p>SmartCard-HSM {  SmartCardHSM.describePINStatus(this.cardState.pinState, "User-PIN") }.</p>
			<p><a href="">continue</a></p>
		</div>

	return page;
}



AuthenticationWizard.prototype.getBlockedPINPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>PIN not usable</h1>
			<p>SmartCard-HSM {  SmartCardHSM.describePINStatus(this.cardState.pinState, "User-PIN") }.</p>
			<p><a href="">continue</a></p>
		</div>

	return page;
}



/**
 * Handle authentication and query the Authorization Manager whether this HSM is authorized
 */
AuthenticationWizard.prototype.handleCardAction = function(card, session, pathInfo) {
	var crypto = new Crypto();
	try	{
		var sc = new SmartCardHSM(card);

		var devAutCert = sc.readBinary(SmartCardHSM.C_DevAut);
		var chain = SmartCardHSM.validateCertificateChain(crypto, devAutCert);
		if (chain == null) {
			this.state = AuthenticationWizard.INVALIDCARD;
			return;
		}

		sc.openSecureChannel(crypto, chain.publicKey);

		var sw = sc.queryUserPINStatus();
		this.cardState = {
			chain: chain,
			pinState: sw
		}
		if (sw == 0x6983) {
			this.cardState.resetRetryCounterEnabled = sc.isResetRetryCounterEnabled();
			this.cardState.PINResetEnabled = sc.isPINResetEnabled();
		}
		this.userId = chain.path;

		GPSystem.log(GPSystem.DEBUG, module.id, "Authenticated " + this.userId);
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, __exception__);
		this.reportError(e);
		this.state = AuthenticationWizard.INVALIDCARD;
		return;
	}

	if (this.authorizationManager) {
		var user = this.authorizationManager.getUser(this.userId);

		if (!user) {
			this.state = AuthenticationWizard.NOTAUTHORIZED;
			return;
		}

		GPSystem.log(GPSystem.DEBUG, module.id, "AuthenticationWizard found user " + user.name);
		user.lang = this.lang.toUpperCase();
		GPSystem.log(GPSystem.DEBUG, module.id, "Setting language to " + user.lang);

		session.user = user;

		// Check if PIN is mandatory for this user
		if (user.pinRequired && (this.cardState.pinState != 0x9000)) {
			GPSystem.log(GPSystem.DEBUG, module.id, "PIN requested, but state is " + this.cardState.pinState.toString(HEX));
			card.nativeCardTerminal.sendNotification(-1, "PIN requested, but state is " + this.cardState.pinState.toString(HEX));

			if ((this.cardState.pinState & 0xFFF0) == 0x63C0) {
				this.state = AuthenticationWizard.WRONGPIN;
			} else {
				this.state = AuthenticationWizard.BLOCKEDPIN;
				GPSystem.log(GPSystem.DEBUG, module.id, "resetRetryCounterEnabled: " + this.cardState.resetRetryCounterEnabled);
				if (this.cardState.resetRetryCounterEnabled && typeof(this.authorizationManager.processBlockedToken) == "function") {
					this.authorizationManager.processBlockedToken(user, this.cardState.PINResetEnabled);
				}
			}
			return;
		}

		if (typeof(user.id) == "number") {
			card.nativeCardTerminal.sendNotification(0, "User login complete");
		} else {
			card.nativeCardTerminal.sendNotification(-1, "Token not associated with a user");
		}
	}
	session.cardState = this.cardState;
	this.state = CardAction.SUCCESS;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Manage client authorization
 */



function AuthorizationManager() {
	this.roleMap = {};
	this.userMap = {};
}

exports.AuthorizationManager = AuthorizationManager;



AuthorizationManager.DEFAULT_USER_ID = "default";



AuthorizationManager.prototype.addRole = function(role) {
	this.roleMap[role.id] = role;
}



/**
 * Add a user to the Authorization Manager
 *
 * @param {User} user the user
 */
AuthorizationManager.prototype.addUser = function(user) {
	var role = this.roleMap[user.role];
	if (typeof(role) == "undefined") {
		throw "User has undefined role";
	}
	this.userMap[user.id] = user;
}



AuthorizationManager.prototype.getUser = function(id) {
	var user = this.userMap[id];
	if (user) {
		return user;
	}
	return this.userMap[AuthorizationManager.DEFAULT_USER_ID];
}



AuthorizationManager.prototype.loginAllowed = function(id) {
	var user = this.userMap[id];
	if (typeof(user) == "undefined") {
		return false;
	}
	return this.roleMap[user.role].loginAllowed;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2016 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A service request stores information about a request pending service
 */

var CVC = require('scsh/eac/CVC').CVC;



/**
 * Create a new service request
 *
 * @class Class storing entries in the internal work queue
 * @constructor
 */
function BaseServiceRequest(service, messageId) {
	this.model = {};
	this.model.lifeCycle = BaseServiceRequest.LIFECYCLE_NEW;
	this.model.messageId = messageId
	this.model.type = "BaseServiceRequest";
	this.service;
}

exports.BaseServiceRequest = BaseServiceRequest;



BaseServiceRequest.LIFECYCLE_CLOSED = 0;
BaseServiceRequest.LIFECYCLE_NEW = 1;
BaseServiceRequest.LIFECYCLE_PROCESSING = 2;
BaseServiceRequest.LIFECYCLE_APPROVED = 3;
BaseServiceRequest.LIFECYCLE_COMPLETE = 4;


/**
 * Gets the unique id of the service request as defined by the database
 * The id is only available after the service request has been added to the
 * inbound / outbound queue.
 *
 * @returns the service request id as assigned by the database
 * @type String
 */
BaseServiceRequest.prototype.getId = function() {
	if (this.bo) {
		return this.bo.id;
	}

	return this.id;
}



/**
 * Gets the service request life-cycle
 *
 * @type Number
 */
BaseServiceRequest.prototype.getLifeCycle = function() {
	return this.model.lifeCycle;
}



/**
 * Sets the service request life-cycle
 *
 * @param {Number} lifeCycle the life-cycle state
 */
BaseServiceRequest.prototype.setLifeCycle = function(lifeCycle) {
	this.model.lifeCycle = lifeCycle;
}



/**
 * Gets creation time
 *
 * @returns the timestamp at which this service request was created or null
 * @type Date
 */
BaseServiceRequest.prototype.getCreationTime = function() {
	if (this.bo) {
		return this.bo.created;
	}
	return null
}



/**
 * Sets the service request type
 *
 * @param {String} type the request type
 */
BaseServiceRequest.prototype.setType = function(type) {
	this.model.type = type;
}



/**
 * Gets the service request type
 *
 * @returns the service request type
 * @type String
 */
BaseServiceRequest.prototype.getType = function() {
	return this.model.type;
}



/**
 * Add a message related to this service request
 *
 * @param {String} message the message
 */
BaseServiceRequest.prototype.addMessage = function(message) {
	if (typeof(this.model.message) == "undefined") {
		this.model.message = message;
	} else {
		this.model.message += "\n" + message;
	}
}



/**
 * Gets the status information for the last processing
 *
 * @returns the last status information which may be undefined
 * @type String
 */
BaseServiceRequest.prototype.getStatusInfo = function() {
	return this.model.statusInfo;
}



/**
 * Sets the status information for this request
 *
 * @param {String} statusInfo the last status information
 */
BaseServiceRequest.prototype.setStatusInfo = function(statusInfo) {
	GPSystem.log(GPSystem.DEBUG, module.id, "setStatusInfo(" + statusInfo + ")");
	this.model.statusInfo = statusInfo;
}



/**
 * Gets the messageId
 *
 * @returns the message id
 * @type String
 */
BaseServiceRequest.prototype.getMessageID = function() {
	return this.model.messageId;
}



/**
 * Get the originator
 *
 * @returns the originator
 * @type Subject
 */
BaseServiceRequest.prototype.getOriginator = function() {
	if (this.bo) {
		return this.bo.originatorId;
	}
	return this.originator;
}



/**
 * Gets the originator id referencing the originating subject
 *
 * @returns the originator id
 * @type String
 */
BaseServiceRequest.prototype.getOriginatorId = function() {
	return this.bo.originatorId;
}



/**
 * Gets the id of the recipient subject
 *
 * @returns the recipient id
 * @type String
 */
BaseServiceRequest.prototype.getRecipientId = function() {
	return this.bo.recipientId;
}



/**
 * Gets the id of the recipient subject
 *
 * @returns the recipient id
 * @type String
 */
BaseServiceRequest.prototype.getRecipient = function() {
	var subjectDAO = this.service.daof.getSubjectDAO();
	return subjectDAO.getSubject(this.bo.recipientId);
}



/**
 * Returns true if this is a locally generated request
 *
 * @returns true if this is a locally generated request, i.e. has no recipientId
 * @type boolean
 */
BaseServiceRequest.prototype.isLocallyCreated = function() {
	return (this.bo.originatorId != null) && (this.bo.recipientId == null);
}



BaseServiceRequest.prototype.isCertificateRequest = function() {
	return false
}



/**
 * Check if the subject is authorized to process the service request.
 * A subject is authorized if service request and subject are assigned to the same role.
 *
 * @returns true if the subject is authorized, false otherwise
 * @type boolean
 */
BaseServiceRequest.prototype.isAuthorizedSubject = function(subjectId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "isAuthorizedSubject(" + subjectId + ")");

	if (!this.bo || !this.bo.assignedToRole) {
		GPSystem.log(GPSystem.DEBUG, module.id, "service request " + this + " is not assigned to a role");
		return false;
	}
	var roleDAO = this.service.daof.getRoleDAO();
	var roles = roleDAO.getAssignedRoles(subjectId);
	for (var i = 0; i < roles.length; i++) {
		if (roles[i].id == this.bo.assignedToRole) {
			GPSystem.log(GPSystem.DEBUG, module.id, "subject is authorized for service request " + this);
			return true;
		}
	}
	GPSystem.log(GPSystem.DEBUG, module.id, subjectId + " is not authorized for service request " + this);
	return false;
}


/**
 * Remove properties that are not serialized.
 *
 * @private
 */
BaseServiceRequest.JSONReplacer = function(key, value) {
	if (key == "bo") {
		return undefined;
	}
	if (key == "relatedBaseServiceRequest") {
		return undefined;
	}
	return value;
}



/**
 * Serialize service request into JSON object
 */
BaseServiceRequest.prototype.serialize = function() {
	return JSON.stringify(this.model, BaseServiceRequest.JSONReplacer, '\t');
}



/**
 * Recreate embedded objects
 *
 * @private
 */
BaseServiceRequest.JSONReviver = function(key, value) {
//	GPSystem.trace(key + ":" + value);

	if (value && value.clazz) {
//		print("Clazz " + value.clazz);
		switch(value.clazz) {
			case "ByteString": value = ByteString.fromJSON(value); break;
			case "CVC":        value = CVC.fromJSON(value); break;
		}
	}
	return value;
}



/**
 * Deserialize service request from JSON encoded string
 *
 * @param {String} str the JSON object as string
 */
BaseServiceRequest.deserialize = function(str) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deserialize " + str);
	var sr = Object.create(BaseServiceRequest.prototype);
	sr.model = [];
	sr.model.lifeCycle = BaseServiceRequest.LIFECYCLE_NEW;

//	print(str);
	var o = JSON.parse(str,BaseServiceRequest.JSONReviver);

	for (var i in o) {
		sr.model[i] = o[i];
	}
	return sr;
}



/**
 * Commit changes to the ServiceRequest object
 */
BaseServiceRequest.prototype.commit = function() {
	var srDAO = this.service.daof.getServiceRequestDAO();

	if (!this.bo) { // Create new business object

		var t = {
			process: this.model.type,
			content: this.serialize(),
		};

		if (this.originator) {
			t.originatorId = this.originator.id;
		}

		if (this.recipient) {
			t.recipientId = this.recipient.id;
		}

		this.bo = srDAO.newServiceRequest(t);
	} else {
		srDAO.updateContent(this.bo, this.serialize());
	}
}



/**
 * Create a describing string
 *
 * @returns the string
 * @type String
 */
BaseServiceRequest.prototype.toString = function() {
	var str;
	if (this.bo) {
		str = this.bo.process;
	} else {
		str = this.getType();
	}

	for (var obj in this.model) {
		str += "\n" + obj + "[ " + this.model[obj] + " ]";
	}

	return str;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Base class for all remote card related mechanisms
 */



/**
  * Create a new CardAction instance
  *
  * @param {CommonUI} ui the service ui used for error reporting (must support setErrorMessage) or null
  */
function CardAction(ui) {
	this.ui = ui;
	this.state = CardAction.NEW;
	this.requestPIN = -1;
	this.allowRestart = true;
}

exports.CardAction = CardAction;

CardAction.NEW = "new";
CardAction.NOCLIENT = "noclient";
CardAction.ERROR = "error";
CardAction.SUCCESS = "success";



/**
 * Return the page depending from the current state.
 * After the handleCard operation getPage returns null
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
CardAction.prototype.getPage = function(req, res, url) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getPage() : CardAction state: " + this.state);

	if (this.pending) {
		return this.getPendingPage(req, res);
	}

	switch(this.state) {
		case CardAction.NEW:
			this.state = CardAction.NOCLIENT;
			var page = this.getProgressPage(req, res);
			break;
		case CardAction.NOCLIENT:
			var page = this.getNoClientPage(req, res);
			this.state = CardAction.NEW;
			break;
		case CardAction.ERROR:
			var page = this.getErrorPage(req, res);
			if (this.allowRestart) {
				this.state = CardAction.NEW;
			} else {
				this.state = CardAction.SUCCESS;
			}
			break;
		case CardAction.SUCCESS:	// reached after handleCard
			return null;
			break;
		default:
			var page = this.getProgressPage(req, res);
	}
	return page;
}



/**
 * Get the activation link for the redirect to the local client
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
CardAction.prototype.getActivationLink = function(req, res, requestPin) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var sessionId = req.getSession().id;
	var rndstr = Math.floor(Math.random() * 10000000).toString();
	var pathInfo = req.pathInfo;
	if (!pathInfo) {
		pathInfo = "";
	}
	var rturl = ApplicationServer.instance.serverURL + "/rt" + pathInfo;
	var url = "http://127.0.0.1:27001/" + rndstr + ".png?url=" + rturl + "&sessionId=" + sessionId;

	if (requestPin >= 0) {
		 url += "&pinrequired=" + requestPin;
	}

	return <img onload="window.location.reload()" onerror="alert('Could not connect to local client. Is the client running ?');window.location.reload()" src={url} width="16" height="16"/>;
}



/**
 * Serve this page to start the redirect to the local client
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
CardAction.prototype.getProgressPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var actlink = this.getActivationLink(req, res, this.requestPIN);
	if (actlink == null) {
		var page = this.getErrorPage(req, res);
		this.state = CardAction.NEW;
	} else {

		var page =
		<div>
			<h2>Smart card access in progress</h2>
			<p>Please wait for the green tick to appear. {actlink}</p>
			<p>Accessing the smart card may take a while, so please be patient. To follow the process
			   you can open the log window in the OCF daemon.</p>
			<p>The page will be reloaded automatically if JavaScript is enabled.</p>
			<p>If JavaScript is disabled, then press <a href="">continue</a> after the green tick is shown.</p>
		</div>
	}

	return page;
}



/**
 * Serve this page to start the redirect to the local client
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
CardAction.prototype.getPendingPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h2>Smart card access still in progress</h2>
			<p>Accessing the smart card may take a while, so please be patient. To follow the process
			   you can open the log window in the OCF daemon.</p>
			<p>Press <a href="">continue</a> after the client finished the operation.</p>
		</div>

	return page;
}



/**
 * Serve the error page if no local client was found
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
CardAction.prototype.getNoClientPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h2>Client connect</h2>
			<p>Could not connect to your local client or smart card.</p>
			<p>Please activate the local client to allow the server to access your card.</p>
			<p>You can start the local client using <a href="https://www.openscdp.org/ocf/ocf.jnlp">Java Web Start</a>
			   or by downloading and double-clicking on <a href="https://www.openscdp.org/ocf/ocf-cc.jar">ocf-cc.jar</a>.</p>
			<p>The local client can be started from the command line using</p>
			<pre>java -jar ocf-cc.jar -v</pre>
			<p>See also the <a href="https://www.openscdp.org/ocf/faq.html">FAQ</a> for more details
			   and troubleshooting hints.</p>
			<p>Press refresh or <a href="">continue</a> to proceed.</p>
		</div>

	return page;
}



/**
 * Serve the error page if some error occured during card communication
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
CardAction.prototype.getErrorPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h2>Error while talking to your smart card</h2>
			<p>Press refresh or <a href="">continue</a> to proceed.</p>
		</div>

	return page;
}



/**
 * Get the return code from a service operation called by handleCard
 *
 * @return the returnCode from the remote system
 */
CardAction.prototype.reportError = function(msg) {
	if (this.ui) {
		this.ui.setErrorMessage("Error", msg);
	}
	this.state = CardAction.ERROR;
}



/**
 * Get the return code from a service operation called by handleCard
 *
 * @return the returnCode from the remote system
 */
CardAction.prototype.getReturnCode = function() {
	return this.state;
}



CardAction.prototype.handleCardAction = function(card, session, pathInfo) {
	return "Not Implemented";
}



/**
 */
CardAction.prototype.handleCard = function(session, pathInfo) {
	GPSystem.log(GPSystem.DEBUG, module.id, "Handling card for session " + session.id);

	this.pending = true;

	try	{
		if (session.cardTerminal) {
			var card = new Card(session.cardTerminal);
		} else {
			var card = new Card(session.id);
		}
		this.handleCardAction(card, session, pathInfo);
	}
	catch(e if e instanceof GPError) {
		GPSystem.log(GPSystem.ERROR, module.id, e);
		GPSystem.log(GPSystem.ERROR, module.id, e.stack);
		this.reportError(e.message);
	}
	finally {
		GPSystem.log(GPSystem.DEBUG, module.id, "CardAction state: " + this.state);
		card.close();
		this.pending = false;
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Common UI elements
 */

var AuthenticationWizard	= require('scsh/srv-cc1/AuthenticationWizard').AuthenticationWizard;
var CardAction			= require('scsh/srv-cc1/CardAction').CardAction;


/**
 * Create a Common UI web GUI
 *
 * @class Class implementing a common UI operations
 * @constructor
 * @param {CVCAService} service the service to which the GUI is attached
 */
function CommonUI(service, session) {
	if (service) {
		this.service = service;
		this.session = session;
		this.bookmarks = [];
		this.resultCode = null;
		this.resultMessage = null;
		this.resultClass = null;
	}
}

exports.CommonUI = CommonUI;



/**
 * Create a date string for a given date object in the format YYYY-MM-DD
 *
 * @param {Date} date the date object
 * @type String
 * @return the date string
 */
CommonUI.dateString = function(date) {
	return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
}



/**
 * Parse operations string into object containing parameter and values
 *
 * <p>An operations string may contain multiple entries separated by an ampersand.</p>
 * <p>Entries may have a value assigned using the parameter=value notation.</p>
 * <p>Valid operations strings are "link", "link=all", "filer=true&start=0"</p>
 *
 * @param {String} op the operations string
 * @returns an object with properties matching entries.
 * @type Object
 */
CommonUI.parseQueryString = function(op) {
	var result = {};

	if (!op) {
		return result;
	}

	var elems = op.split("&");
	for (var i = 0; i < elems.length; i++) {
		var s = elems[i];
		var ofs = s.indexOf("=");
		if (ofs >= 0) {
			var p = s.substring(ofs + 1);
			s = s.substring(0, ofs);
			result[s] = decodeURIComponent(p);
		} else {
			result[s] = true;
		}
	}
	return result;
}



/**
 * Return a string that directs to the URL of the UI
 *
 * @param {String[]} url the array of URL elements
 * @type String
 * @return the URL to direct to the home URL
 */
CommonUI.prototype.homeURL = function(url) {
	var prefix = "";
	for (var i = 1; i < url.length; i++) {
		prefix += "../";
	}
	return prefix + url[0];
}



/**
 * Add SC_SEE_OTHER HTTP Codew with location to direct to newurl
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {String[]} url the array of URL elements
 */
CommonUI.prototype.redirectTo = function(req, res, url, newurl) {
	res.setStatus(HttpResponse.SC_SEE_OTHER);
	res.addHeader("Location", this.homeURL(url) + newurl);
}



/**
 * Generate a HTML template
 *
 * @param {String[]} url the array of URL elements
 * @returns the HTML page template
 * @type XML
 */
CommonUI.prototype.generateTemplate = function(url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var prefix = "";
	for (var i = 1; i < url.length; i++) {
		prefix += "../";
	}

	var pagetemplate =
		<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" >
			<head>
				<title>{this.service.type + " " + this.service.name}</title>
				<link rel="stylesheet" type="text/css" href={prefix + "../css/style.css"}/>
			</head>
			<body>
				<div align="left">
					<a href="http://www.cardcontact.de"><img src={prefix + "../images/banner.jpg"} width="750" height="80" border="0"/></a>
				</div>
				<div id="navigator">
					<p><b> {this.service.type}</b></p>
				</div>
				<div id="main">
					<div id="user"/>
					<div id="error"/>
					<div id="content"/>
					<p class="copyright">(c) Copyright 2003 - 2017 <a href="http://www.cardcontact.de">CardContact</a> Systems GmbH, Minden, Germany</p>
				</div>
			</body>
		</html>

	if (this.session.user) {
		var content =
			<div align="right">
				<p>
					{this.session.user.name} <a href={prefix + url[0] + "/logout"}>Logout</a>
				</p>
			</div>
		var div = pagetemplate.body..div.(@id == "user");
		div.appendChild(content);
	}

	if (this.resultCode != null) {
		var page =
			<div>
				<p id="result" class= { this.resultClass }>{ this.resultMessage } (<b id="resultCode">{ this.resultCode }</b>)</p>
			</div>

		var div = pagetemplate.body..div.(@id == "error");
		div.appendChild(page);
	}

	return pagetemplate;
}



/**
 * Send page after embedding in the HTML template
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {String[]} url the array of URL elements
 * @param {XML} page the page contents
 */
CommonUI.prototype.sendPage = function(req, res, url, page) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	if (typeof(page) == "undefined") {
		url = req.url;
		page = url;
	}

	var t = this.generateTemplate(url);
	var c = t..div.(@id == "content");
	c.div = page;

	var bml = <ul/>;
	var bookmarks = ApplicationServer.instance.getUIList();
	bookmarks = bookmarks.concat(this.bookmarks);

	for (var i = 0; i < bookmarks.length; i++) {
		var bm = bookmarks[i];

		if (bm.id == url[0]) {
			bml.appendChild(<li><a class="bookmarkactive" href={bm.url} title={bm.description}>{bm.name}</a></li>);
		} else {
			bml.appendChild(<li><a href={bm.url} title={bm.description}>{bm.name}</a></li>);
		}
	}
	var c = t..div.(@id == "navigator");
	c.appendChild(bml);
	c.appendChild(<p style="font-size: 7pt">{ VERSION }</p>);

	this.clearResultMessage();

	res.setContentType("application/xhtml+xml");
	res.print('<?xml version="1.0" encoding="UTF-8" standalone="no"?>');
	res.print('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n');
	res.print(t.toXMLString());
}



CommonUI.prototype.serveNotAuthorizedPage = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page = <p>You are not authorized to access this service or function.</p>
	this.sendPage(req, res, url, page);
}



CommonUI.prototype.serveWizardActivePage = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page = <p>A wizard is active for this session. Please switch to service with running wizard.</p>
	this.sendPage(req, res, url, page);
}



/**
 * Add a bookmark shown on the navigation panel
 *
 * @param {String} name the name to display
 * @param {String} url the URL for this bookmark
 */
CommonUI.prototype.addBookmark = function(name, url) {
	var m = { name: name, url: url };
	this.bookmarks.push(m);
}



/**
 * Serves a refresh page that redirects back to the given URL
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {String} refreshUrl the redirect URL
 * @param {String} statusMessage the status message or undefined
 */
CommonUI.prototype.serveRefreshPage = function(req, res, url, statusMessage) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var prefix = "";
	for (var i = 1; i < url.length; i++) {
		prefix += "../";
	}

	var page = this.generateTemplate(url);

	if ((typeof(statusMessage) == "undefined") || (statusMessage == null)) {
		statusMessage = "Operation completed";
	}

	page.head.meta = <meta http-equiv="Refresh" content={"1; url=" + prefix + url[0]}/>;

	var c = page..div.(@id == "content");

	c.p = <p>{statusMessage}</p>

	res.setContentType("text/html");
	res.print('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n');
	res.print(page.toXMLString());
}



/**
 * Add an action entry to the list of possible actions
 *
 * @param {XML} ul the list of action elements
 * @param {String} cmd the command part of the URL
 * @param {Number} index the index into the service request list
 * @param {String} action the action to be performed
 */
CommonUI.addAction = function(ul, cmd, index, action) {
	default xml namespace = "http://www.w3.org/1999/xhtml";
	ul.li += <li><a href={cmd + "?index=" + index + "&action=" + action}>Respond</a>{" with " + action}</li>
}



/**
 * Set the error message
 *
 * @param {String} message the error message
 */
CommonUI.prototype.setErrorMessage = function(code, message) {
	if (!message) {
		message = "Operation failed";
	}
	this.resultCode = code;
	this.resultMessage = message;
	this.resultClass = "error";
}



/**
 * Set the completion message
 *
 * @param {String} message the error message
 */
CommonUI.prototype.setCompletionMessage = function(code, message) {
	if (!message) {
		message = "Operation completed";
	}
	this.resultCode = code;
	this.resultMessage = message;
	this.resultClass = "ok";
}



/**
 * Clear the error log
 */
CommonUI.prototype.clearResultMessage = function() {
	this.resultCode = null;
}



/**
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {String[]} url array of URL path elements
 */
CommonUI.prototype.handleWizard = function(req, res, url) {
	GPSystem.log(GPSystem.DEBUG, module.id, "handleWizard(" + url + ")");

	if (!this.wizard) {
		var page = <div>
				<p>No wizard active or cookies disabled in browser.
				   You see this message, because the application redirected your browser
				   to the wizard URL, but the server was unable to related a running
				   wizard to your browser session. The most likely reason is that
				   you disabled cookies in the browser or entered the wizard URL without
				   first starting a wizard.</p>
			</div>
		this.sendPage(req, res, url, page);
		return;
	}

	if (typeof(this.wizard.handleRequest) == "function") {
		this.wizard.handleRequest(req, res);
	} else {
		page = this.wizard.getPage(req, res, url);

		if (page) {
			this.sendPage(req, res, url, page);
		} else {
			if (req.queryString || req.method == "POST") {			// Form processing redirect
				this.redirectTo(req, res, url, "/wizard");
			} else {
				if (this.resultCode) {
					this.redirectTo(req, res, url, "");
				} else {
					this.serveRefreshPage(req, res, url, this.wizard.getReturnCode());
				}
			}
		}
	}
}



/**
 * Determine if the user is authorized
 */
CommonUI.prototype.isAuthorized = function() {
	var am = this.service.authorizationManager;

	if (typeof(am) == "undefined") {
		return true;
	}

	if (!this.isAuthenticated()) {
		return false;
	}

	return am.loginAllowed(this.session.user);
}



/**
 * Determine if the user is authenticated
 */
CommonUI.prototype.isAuthenticated = function() {
	return typeof(this.session.cardState) != "undefined";
}



/**
 * Logout the current user
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {String[]} url array of URL path elements
 */
CommonUI.prototype.handleLogout = function(req, res, url) {
	delete this.session.wizard;
	delete this.wizard;
	ApplicationServer.instance.logout(req, res);
}



/**
 * Handle card requests with a registered wizard
 */
CommonUI.prototype.handleCard = function(session, pathInfo) {
	if (!this.wizard || !this.wizard.handleCard) {
		GPSystem.log(GPSystem.DEBUG, module.id, "handleCard() called but no processing wizard available");
	} else {
		this.wizard.handleCard(session, pathInfo);
	}
}



/**
 * Translate SmartCard-HSM induced exception into UI information
 */
CommonUI.prototype.handleSmartCardHSMError = function(e, fallthrough) {
	switch(e.error) {
		case GPError.USER_ABORT:
			this.setErrorMessage("abort", e.message);
			break;
		case GPError.DEVICE_ERROR:
			this.setErrorMessage("failure_device", e.message);
			break;
		case GPError.AUTHENTICATION_METHOD_BLOCKED:
			this.setErrorMessage("failure_keystore_authentication_locked", "SmartCard-HSM user authentication is locked due to excessive tries");
			break;
		case GPError.CARD_REMOVED:
			this.setErrorMessage("failure_no_keystore", "Card was removed");
			break;
		case GPError.CARD_CONNECT_FAILED:
			this.setErrorMessage("failure_no_keystore", "SmartCard-HSM not found. Insert token or card");
			break;
		case GPError.CARD_COMM_ERROR:
			this.setErrorMessage("failure_keystore", "Communication with the SmartCard-HSM failed");
			break;
		case GPError.NOT_AUTHENTICATED:
		case GPError.AUTHENTICATION_FAILED:
			this.setErrorMessage("failure_keystore_locked", "User authentication at SmartCard-HSM failed");
			break;
		case GPError.OUT_OF_MEMORY:
			this.setErrorMessage("failure_keystore_out_of_memory", "SmartCard-HSM is out of memory");
			break;
		default:
			if (fallthrough) {
				return false;
			}
			this.setErrorMessage("failure", "SmartCard-HSM failure: " + e.message);
			break;
	}
	return true;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Form processing
 */


var I18N = require('scsh/srv-cc1/I18N').I18N;



/**
 * Create from from a template
 *
 * @class Class supporting HTML form construction and processing using a JSON description of sections and fields
 *
 * @param {Object} template containing sections and fields
 */
function Form(template) {
	this.form = template;

	this.classForm = "pure-form pure-form-aligned";
	this.classGrid = "pure-g";
	this.classLabel = "pure-u-1 pure-u-sm-2-5 pure-u-md-1-5 pure-u-lg-1-6 pure-u-xl-1-8";
	this.classField = "pure-u-1 pure-u-sm-3-5 pure-u-md-4-5 pure-u-lg-5-6 pure-u-xl-7-8";
	this.classSelect = "pure-input-1";
	this.classValidationError = "validationerror";

	this.saveEnabled = false;
}

exports.Form = Form;



/**
 * Set an I18N handler that implements a method i18n() that translates a key string into a string in the language of the
 * current user
 *
 * @param {Object} Object implementing String i18n(String key)
 */
Form.prototype.setI18NHandler = function(handler) {
	assert(typeof(handler.i18n) == "function", "I18N handler must have a function i18n");
	this.i18nHandler = handler;
}



/**
 * Set a CSRF token for this form.
 *
 * The token will be included as hidden field.
 *
 * @param {String} csrfToken the token
 */
Form.prototype.setCSRFToken = function(csrfToken) {
	this.csrfToken = csrfToken;
}



/**
 * Set flag indicating that this form can be saved.
 *
 * Only with the save flag set, the postOnChange flag on select fields has an effect.
 *
 * @param {Boolean} saveEnabled true if this form can be saved.
 */
Form.prototype.setSaveEnabled = function(saveEnabled) {
	this.saveEnabled = saveEnabled;
}



/**
 * @private
 */
Form.prototype.i18n = function(key) {
	if (typeof(this.i18nHandler) != "undefined")
		return this.i18nHandler.i18n(key);
	return key;
}



/**
 * Render input field
 *
 * @private
 */
Form.prototype.renderInput = function(fld) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var value = fld.value;
	if (typeof(value) == "undefined") {
		value = "";
	}

	var input = <input id={ fld.id } name={ fld.id } type={ fld.type } size={ fld.size } value={ value } class="pure-input-1"/>;

	if (fld.required) {
		input.@required = "true";
	}

	if (!fld.editable) {
		input.@readonly = "readonly";
	}

	if (typeof(fld.min) != "undefined") {
		if (fld.type == "text" || fld.type == "textarea") {
			input.@minlength = fld.min;
		} else {
			input.@min = fld.min;
		}
	}

	if (typeof(fld.max) != "undefined") {
		if (fld.type == "text" || fld.type == "textarea") {
			input.@maxlength = fld.max;
		} else {
			input.@max = fld.max;
		}
	}

	if (typeof(fld.size) != "undefined") {
		input.@maxlength = fld.size;
	}

	if (fld.placeholder) {
		input.@placeholder = fld.placeholder;
	}

	var ttid = fld.label + ".tooltip";
	var ttstr = this.i18n(ttid);
	if (ttstr != ttid) {
		input.@title = ttstr;
	}

	return input;
}



/**
 * Render date input field
 *
 * @private
 */
Form.prototype.renderDate = function(fld, type) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var input = <input id={ fld.id } name={ fld.id } type={ type } class="pure-input-1"/>;

	if (fld.required) {
		input.@required = "true";
	}

	if (!fld.editable) {
		input.@readonly = "readonly";
	}

	if (typeof(fld.min) != "undefined") {
		input.@min = fld.min;
	}

	if (typeof(fld.max) != "undefined") {
		input.@max = fld.max;
	}

	if (typeof(fld.value) != "undefined") {
		input.@value = fld.value;
	}

	var ttid = fld.label + ".tooltip";
	var ttstr = this.i18n(ttid);
	if (ttstr != ttid) {
		input.@title = ttstr;
	}

	return input;
}



/**
 * Render file input field
 *
 * @private
 */
Form.prototype.renderFileInput = function(fld) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var input = <input id={ fld.id } name={ fld.id } type={ fld.type } class="pure-input-1"/>;

	if (fld.required) {
		input.@required = "true";
	}

	if (!fld.editable) {
		input.@readonly = "readonly";
	}

	if (typeof(fld.value) != "undefined") {
		input.@value = fld.value;
	}

	if (fld.postOnChange && this.saveEnabled) {
		input.@onchange = "this.form.submit()";
	}

	var ttid = fld.label + ".tooltip";
	var ttstr = this.i18n(ttid);
	if (ttstr != ttid) {
		input.@title = ttstr;
	}

	return input;
}



/**
 * Render text area field
 *
 * @private
 */
Form.prototype.renderTextArea = function(fld) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var input = <textarea id={ fld.id } name={ fld.id } cols={ fld.cols } rows={ fld.rows } class="pure-input-1">{ fld.value }</textarea>;

	if (fld.required) {
		input.@required = "true";
	}

	if (!fld.editable) {
		input.@readonly = "readonly";
	}

	if (typeof(fld.size) != "undefined") {
		input.@maxlength = fld.size;
	}

	var ttid = fld.label + ".tooltip";
	var ttstr = this.i18n(ttid);
	if (ttstr != ttid) {
		input.@title = ttstr;
	}

	return input;
}



/**
 * Render selection list, single or multiselect
 *
 * @private
 */
Form.prototype.renderSelect = function(fld) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var select = <select id={ fld.id } name={ fld.id } class={ this.classSelect }/>;

	if (!fld.editable) {
		select.@disabled = "disabled";
	}

	if (fld.multiselect) {
		select.@multiple = "multiple";
	}

	if (fld.postOnChange && this.saveEnabled) {
		select.@onchange = "this.form.submit()";
	}

	if (fld.required) { // required = "false" doesn't work in Firefox (version 78.6.1esr) but it works in Chromium (version 87.0.4280.141)
		select.@required = fld.required;
	}

	if (typeof(fld.size) != "undefined") {
		select.@size = fld.size;
	}

	var options = fld.options;
	if (options == undefined) {
		options = fld.value;
	}

	for (var i = 0; i < options.length; i++) {
		var o = options[i];

		if (o.optgroup) {
			select.appendChild(this.renderOptionGroup(o));
		} else {
			select.appendChild(this.renderOption(o));
		}
	}

	var ttid = fld.label + ".tooltip";
	var ttstr = this.i18n(ttid);
	if (ttstr != ttid) {
		select.@title = ttstr;
	}

	return select;
}



/**
 * Render an option
 *
 * @private
 */
Form.prototype.renderOption = function(o) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	if (o.msg) {
		var str = this.i18n(o.msg);
	} else {
		var str = o.value;
	}
	var option = <option value={ o.id } >{ str }</option>;

	if (o.labelmsg) {
		option.@label = this.i18n(o.labelmsg);
	}

	if (o.label) {
		option.@label = o.label;
	}

	if (o.selected) {
		option.@selected = "selected";
	}

	if (o.disabled) {
		option.@disabled = "disabled";
	}

	return option;
}



/**
 * Render checkbox input field
 *
 * @private
 */
Form.prototype.renderCheckbox = function(fld) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

        var input = <input type="checkbox" id={ fld.id } name={ fld.id } />

        if (fld.checked) {
		input.@checked = "checked";
	}

	if (fld.required) {
		input.@required = "true";
	}

	if (!fld.editable) {
		input.@readonly = "readonly";
		input.@disabled = "disabled";
	}

	var label = <label for={ fld.id }>
            {input} { fld.value }
        </label>

	return label;
}



/**
 * Render the select option group
 *
 * @private
 */
Form.prototype.renderOptionGroup = function(grp) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var optgroup = <optgroup label={ grp.label }></optgroup>

	for (var i = 0; i < grp.value.length; i++) {
		var o = grp.value[i];
		optgroup.appendChild(this.renderOption(o));
	}

	return optgroup;
}



/**
 * Render status field (feature #200)
 *
 * @private
 */
Form.prototype.renderLink = function(fld) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var value = fld.text;
	if (value == undefined) {
		value = fld.value;
	}
	var text = this.i18n( value )

	var p = <p/>;

	if (text.indexOf("[") >= 0) {
		var parts = text.match(/(.*)\[([\w\s\d]+)\](.*)/);
		if (parts[1].length > 0) {
			p.appendChild(parts[1]);
		}

		var link = <a href={fld.href}>{ parts[2] }</a>
		p.appendChild(link);

		if (parts[3].length > 0) {
			p.appendChild(parts[3]);
		}
	} else {
		var parts = text.split("{0}");

		p.appendChild(parts[0]);

		if (typeof(fld.href) == "string") {
			var link = <a href={fld.href}>Link</a>

			for (var i = 1; i < parts.length; i++) {
				p.appendChild(link);
				p.appendChild(parts[i]);
			}
		}
	}

	return p;
}



/**
 * Render other field types
 *
 * Should be overwritten by derived classes implementing additional field types
 *
 * @param {Object} fld the field description
 */
Form.prototype.renderOther = function(fld) {
	throw new GPError(module.id, GPError.INVALID_DATA, 0, "Unknown field type " + fld.type);
}



/**
 * Render form as HTML form element
 *
 * @type XML
 * @return the XHTML form element
 */
Form.prototype.render = function() {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var html = <form action="" method="post" enctype="multipart/form-data" class={ this.classForm }/>;

	if (typeof(this.csrfToken) != "undefined") {
		var input = <input name="_csrf" type="hidden" value={ this.csrfToken }/>;
		html.appendChild(input);
	}

	for (var fsi = 0; fsi < this.form.length; fsi++) {
		var fs = this.form[fsi];

		var fieldset =  <fieldset id={ fs.id } ><legend>{ this.i18n( fs.legend ) }</legend></fieldset>;

		for (var fli = 0; fli < fs.fields.length; fli++) {
			var fld = fs.fields[fli];


			var grid = <div class={ this.classGrid } />;
			var div = <div class={ this.classLabel } />;
			if (fld.label) {
				var label = <label for={ fld.id } >{ this.i18n(fld.label) }</label>
				div.appendChild(label);
			}
			grid.appendChild(div);

			var div = <div class={ this.classField }/>;

			switch(fld.type) {
				case "number":
				case "text":
				case "email":
					var elem = this.renderInput(fld);
					break;
				case "date":
					var elem = this.renderDate(fld, "date");
					break;
				case "datetime":
					var elem = this.renderDate(fld, "datetime-local");
					break;
				case "file":
					var elem = this.renderFileInput(fld);
					break;
				case "select":
					var elem = this.renderSelect(fld);
					break;
				case "textarea":
					var elem = this.renderTextArea(fld);
					break;
				case "link":
					var elem = this.renderLink(fld);
					break;
				case "checkbox":
					var elem = this.renderCheckbox(fld);
					break;
				default:
					var elem = this.renderOther(fld);
					break;
			}

			div.appendChild(elem);

			if (fld.message) {
				var msg;
				if (fld.message.charAt(0) == '$') {
					msg = this.i18n(fld.message.substr(1));
				} else {
					msg = fld.message;
				}
				div.appendChild( <p class={ this.classValidationError }>{ msg }</p> );
			}
			grid.appendChild(div);
			fieldset.appendChild(grid);
		}
		html.appendChild(fieldset);
	}

	return html;
}



/**
 * Validate entry of val into a single field, if valid call model.updateModel()
 *
 * If the field does not pass validation, then the fld.message element is updated
 * with an error message and false is returned.
 *
 * The model shall return true if the field is valid and update the model accordingly.
 *
 * @type boolean
 * @return true if field passed validation
 */
Form.validateField = function(fld, val, model) {
	var mval = val;

	switch(fld.type) {
		case "textarea":
		case "text":
		case "email":
			fld.value = val;
			if (fld.size && (val.length > fld.size)) {
				fld.message = "$error.input_too_long";
				return false;
			}
			if (fld.min && (val.length < fld.min)) {
				fld.message = "$error.input_too_short";
				return false;
			}
			if (fld.required && (val.match(/^\s*$/) != null)) {
				fld.message = "$error.field_empty";
				return false;
			}
			break;
		case "select":
			if (fld.multiselect) {
				if (val.length > 0) {
					var ids = val.split(",").map(Number);
				} else {
					var ids = [];
				}
			} else {
				var ids = [ parseInt(val) ];
			}

			if (fld.value) {
				for (var i = 0; i < fld.value.length; i++) {
					fld.value[i].selected = false;
				}

				for (var i = 0; i < ids.length; i++) {
					var id = ids[i];
					var found = false;

					for (var j = 0; j < fld.value.length; j++) {
						var entry = fld.value[j];

						if (entry.optgroup) {
							for (var k = 0; k < entry.value.length; k++) {
								var option = entry.value[k];
								if (option.id == id) {
									option.selected = true;
									found = true;
									break;
								}
							}
						} else {
							if (entry.id == id) {
								entry.selected = true;
								found = true;
								break;
							}
						}

						if (found) {
							break;
						}
					}

					if (!found) {
						GPSystem.log(GPSystem.ERROR, module.id, "Received invalid id " + id + " for select field " + fld.id);
						fld.message = "$error.invalid_data";
						return false;
					}
				}
			}

			if (fld.multiselect) {
				mval = ids;
			} else {
				mval = ids[0];
			}
			break;
		case "number":
			fld.value = val;
			var mval = parseInt(val);

			if (isNaN(mval)) {
				fld.message = "$error.not_a_number";
				return false;
			}

			if ((typeof(fld.min) == "number") && (mval < fld.min)) {
				fld.message = "$error.too_small";
				return false;
			}

			if ((typeof(fld.max) == "number") && (mval > fld.max)) {
				fld.message = "$error.too_large";
				return false;
			}

			break;
		case "checkbox":
			if (val == "on") {
				mval = true;
			} else {
				mval = false;
			}
			break;
		// No Default to allow model to implement additional field types
	}

	if (!model.updateModel(fld, mval)) {
		return false;
	}

	return true;
}



/**
 * Set editable fields in the form with key:value pairs in the fields object
 *
 * @type boolean
 * @return true if field passed validation
 */
Form.prototype.setFields = function(fields, model) {

	//	for (var i in fields) {
	//		print("### " + i + " : " + fields[i]);
	//	}

	var valid = true;

	for (var fsi = 0; fsi < this.form.length; fsi++) {
		var fs = this.form[fsi];

		for (var fli = 0; fli < fs.fields.length; fli++) {
			var fld = fs.fields[fli];

			if (fld.editable) {
				var val = fields[fld.id];
				if (typeof(val) != "undefined") {
					if (!Form.validateField(fld, val, model)) {
						valid = false;
					}
				} else {
					if (fld.multiselect) {
						if (!Form.validateField(fld, "", model)) {
							valid = false;
						}
					} else if (fld.type == "checkbox") {
						// The value of an unchecked checkbox won't be submitted
						// by the browser
						if (!Form.validateField(fld, false, model)) {
							valid = false;
						}
					}
				}
			}
		}
	}
	return valid;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2023 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Connector for the PKI-API
 */


function FormParser(form) {
    this.form = form;
}

exports.FormParser = FormParser;



FormParser.prototype.getFieldById = function(id) {
    for each (var section in this.form) {
        for each (var field in section.fields) {
            if (id == field.id) {
                return field;
            }
        }
    }
}



FormParser.prototype.enumerateOptions = function(field) {
    var list = [];
    for each (var option in field.options) {
        list.push(option.value);
    }
    return list;
}



FormParser.prototype.enumerateOptionIds = function(field) {
    var list = [];
    for each (var option in field.options) {
        list.push(option.id);
    }
    return list;
}



FormParser.prototype.selectStringOption = function(field, option) {
}



FormParser.test = function() {
    var form = [
    {
      "id": "token",
      "legend": "msg.sems.dica",
      "fields": [
        {
          "id": "issuer",
          "type": "select",
          "label": "msg.sems.issuer",
          "editable": true,
          "required": false,
          "value": 2,
          "options": [
            {
              "id": 2,
              "value": "UTDICA1",
              "selected": true
            },
            {
              "id": 5,
              "value": "UTDICA2",
              "selected": false
            },
            {
              "id": 12,
              "value": "UTDICA3",
              "selected": false
            },
            {
              "id": 14,
              "value": "UTDICA4",
              "selected": false
            },
            {
              "id": 15,
              "value": "UTDICA5",
              "selected": false
            }
          ],
          "multiSelect": false,
          "onchange": "this.form.submit()"
        },
        {
          "id": "process",
          "type": "select",
          "label": "msg.sems.process",
          "editable": true,
          "required": false,
          "value": "se-jcop",
          "options": [
            {
              "id": 0,
              "value": "se-jcop",
              "selected": true
            }
          ],
          "multiSelect": false
        },
        {
          "id": "hardware",
          "type": "select",
          "label": "msg.sems.hardware",
          "editable": true,
          "required": false,
          "value": "Default",
          "options": [
            {
              "id": 0,
              "value": "Default",
              "selected": true
            }
          ],
          "multiSelect": false
        },
        {
          "id": "kmc",
          "type": "select",
          "label": "msg.sems.kmc",
          "editable": true,
          "required": false,
          "value": "Default",
          "options": [
            {
              "id": 0,
              "value": "Default",
              "selected": true
            }
          ],
          "multiSelect": false
        }
      ]
    }
    ];

    var p = new FormParser(form);
    var fld = p.getFieldById("process");
    print(p.enumerateOptions(fld));

    var fld = p.getFieldById("issuer");
    print(p.enumerateOptionIds(fld));
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A simple HSM maintaince service
 */

var SmartCardHSM		= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;
var SmartCardHSMInitializer	= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSMInitializer;
var ManagePKA			= require('scsh/sc-hsm/ManagePKA').ManagePKA;
var EACCryptoProvider		= require('scsh/sc-hsm/EACCryptoProvider').EACCryptoProvider;
var CryptoProvider		= require('scsh/sc-hsm/CryptoProvider').CryptoProvider;
var HSMUI			= require('scsh/srv-cc1/HSMUI').HSMUI;



/**
 * Class implementing the SmartCard-HSM management service
 *
 * @constructor
 */
function HSMService() {
	this.type = "SC-HSM";
	this.name = "Management";
	this.hsmlist = [];
	this.hsmmap = [];
	this.crypto = new Crypto();
	this.authenticationRequired = false;
	this.roleRequired = 0;
}

exports.HSMService = HSMService;



/**
 * Create a new UI session
 *
 * @param {HttpSession} session the new session context
 */
HSMService.prototype.newUI = function(session) {
	var ui = new HSMUI(this, session);
	return ui;
}



/**
 * Add HSMState to managed list, possibly updating existing state object
 *
 * @param {HSMState} hsm the state object
 */
HSMService.prototype.addOrUpdateHSMState = function(state) {
	var oldstate = this.hsmmap[state.path];
	if (oldstate) {
		oldstate.path = state.path;
		oldstate.sc = state.sc;
		oldstate.deviceId = state.deviceId;
		oldstate.error = state.error;
		return oldstate;
	} else {
		this.hsmmap[state.path] = state;
		this.hsmlist.push(state);
		return state;
	}
}



/**
 * Return a list of registered HSMs
 * @type String[]
 * @return the list of HSM path identifier
 */
HSMService.prototype.getHSMList = function() {
	var list = [];
	for (var i = 0; i < this.hsmlist.length; i++) {
		list.push(this.hsmlist[i].path);
	}
	return list;
}



/**
 * Obtain card service for device
 *
 * @param {HSMState} hsm the state object
 * @param {Card} the card object representing the link to the device
 */
HSMService.prototype.getCardService = function(state, card) {
	try	{
		var sc = new SmartCardHSM(card);
	}
	catch(e if e instanceof GPError) {
		throw new GPError(module.id, GPError.DEVICE_FAILED, 0, "This does not seem to be a SmartCard-HSM");
	}

	// Determine device unique path
	var devAutCert = sc.readBinary(SmartCardHSM.C_DevAut);
	var chain = SmartCardHSM.validateCertificateChain(this.crypto, devAutCert);
	if (chain == null) {
		throw new GPError(module.id, GPError.CRYPTO_FAILED, 0, "Could not validate device certificate. Is this a genuine SmartCard-HSM ?");
	}
	if (state.path) {
		if (chain.path != state.path) {
			throw new GPError(module.id, GPError.DEVICE_ERROR, 0, "Device is " + chain.path + " but should be " + state.path +
			". Please insert correct SmartCard-HSM or connect to a different SmartCard-HSM" );
		}
	} else {
		state.path = chain.path;
	}

	state.deviceId = chain.devicecert.getCHR().getBytes();
	state.defaultKeyDomain = chain.publicKey.getComponent(Key.ECC_QX).toString(HEX);

	if (state.protectedPINEntry) {
		var cs = sc.getNativeCardService();
		cs.useClassThreePinPad(true);
	} else {
		sc.openSecureChannel(this.crypto, chain.publicKey);
	}

	state.error = undefined;
	state.sc = sc;
	state.update();
}



/**
 * Add local SmartCard-HSM to managed list
 *
 * If the path is already known, then the device is added as offline device.
 *
 * @param {String} readerName card reader name, can be empty to any reader
 * @param {Boolean} protectedPINEntry use PIN PAD or PIN Dialog
 * @param {String} path identifier of SmartCard-HSM, if already known
 * @param {ByteString} pin optional PIN value
 */
HSMService.prototype.addLocalHSM = function(readerName, protectedPINEntry, path, pin) {
	var state;

	if (path) {
		state = this.hsmmap[path];
		if (!state) {
			state = new HSMState(path);
			state = this.addOrUpdateHSMState(state);
			state.isLocal = true;
		}
		state.protectedPINEntry = protectedPINEntry;
	} else {
		var card = new Card(readerName);
		state = new HSMState();
		state.protectedPINEntry = protectedPINEntry;
		this.getCardService(state, card);
		state = this.addOrUpdateHSMState(state);
		state.isLocal = true;
	}
	state.readerName = readerName;
	state.pin = pin;
}



/**
 * Handle inbound request from remote terminal
 *
 * @param {HttpSession} session the session object
 * @param {String} pathInfo the pathinfo part of the URL
 */
HSMService.prototype.handleCard = function(session, pathInfo) {
	GPSystem.trace("Handle card for session " + session.id);
	if (session.cardTerminal) {
		var card = new Card(session.cardTerminal);
	} else {
		var card = new Card(session.id);
	}
	var ct = card.nativeCardTerminal;

	try	{
		var state = new HSMState();
		this.getCardService(state, card);
		state = this.addOrUpdateHSMState(state);
		delete state.cp;
		state.isLocal = false;

		state.update();
	}
	catch(e if e instanceof GPError) {
		GPSystem.log(GPSystem.ERROR, module.id, e);
		ct.sendNotification(-1, "Failure talking to card. Is this a SmartCard-HSM ?");
		GPSystem.trace(e);
	}
}



/**
 * Return the full list of maintained states
 *
 * @type HSMState[]
 * @return the list of maintained HSM states
 */
HSMService.prototype.getHSMStates = function() {
	return this.hsmlist;
}



/**
 * Try to bring local HSM online
 *
 * @param {HSMState} state the HSM state object
 */
HSMService.prototype.bringOnline = function(state) {
	assert(state instanceof HSMState, "Argument must be of type HSMState");

	var card = new Card(state.readerName);
	this.getCardService(state, card);
}



/**
 * Return true if SmartCard-HSM with given path is registered
 *
 * @type boolean
 * @return true if this HSM is known
 */
HSMService.prototype.hasHSM = function(path) {
	return (typeof(this.hsmmap[path]) != "undefined");
}



/**
 * Return updated HSM state for given device
 *
 * If it is a local device and it is currently offline, then try to bring the device online
 *
 * @param {String} path the device id
 * @type HSMState
 * @return the state object
 */
HSMService.prototype.getHSMState = function(path) {
	var state = this.hsmmap[path];
	if (state) {
		if (state.isOffline() && state.isLocal) {
			try	{
				this.bringOnline(state);
			}
			catch(e if e instanceof GPError) {
				GPSystem.log(GPSystem.ERROR, module.id, e);
				state.error = e.message;
				return state;
			}
		}
		state.update();
	}
	return state;
}



/**
 * Perform User PIN verification
 *
 * @param {HSMState} hsm the state object
 * @param {String} pin the optional provided PIN
 * @type String
 * @return Result string
 */
HSMService.prototype.verifyUserPIN = function(hsm, pin) {
	if (!hsm.sc) {
		return "HSM is offline";
	}

	try	{
		if (pin) {
			hsm.pinsw = hsm.sc.verifyUserPIN(new ByteString(pin, ASCII));
		} else {
			hsm.pinsw = hsm.sc.verifyUserPIN();
		}
	}
	catch(e if e instanceof GPError) {
		GPSystem.log(GPSystem.ERROR, module.id, "PIN verification failed with " + e.message);
		hsm.pinsw = hsm.sc.queryUserPINStatus();
	}

	return SmartCardHSM.describePINStatus(hsm.pinsw, "User PIN");
}



/**
 * Return a EACCryptoProvider instance for the SmartCard-HSM identified by the parameter id
 *
 * @param {String} id the SmartCard-HSM id
 * @param {Boolean} requireLogin require that the return provider is logged-in and as such operational
 * @type EACCryptoProvider
 * @return a crypto provider bound to the SmartCard-HSM. Authentication has been assured
 */
HSMService.prototype.assertCryptoProvider = function(id, requireLogin) {
	GPSystem.log(GPSystem.DEBUG, module.id, "assertCryptoProvider('" + id + "," + requireLogin + "')");

	assert(typeof(id) == "string", "Argument must be string");
	assert(typeof(requireLogin) == "boolean", "Argument must be boolean");

	var state = this.hsmmap[id];

	if (!state) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "No provider for " + id + " found");
	}

	state.update();

	if (state.isOffline()) {
		delete state.cp;
		if (state.isLocal) {
			this.bringOnline(state);
		} else {
			throw new GPError(module.id, GPError.DEVICE_ERROR, 0, "Device " + state.path + " is offline");
		}
	}

	if (requireLogin && !state.isUserAuthenticated()) {
		if (state.hasProtectedPINEntry()) {
			state.pinsw = state.sc.verifyUserPIN();
			if (state.pinsw != 0x9000) {
				throw new GPError(module.id, GPError.AUTHENTICATION_FAILED, 0, "PIN Verification failed");
			}
		} else if (state.pin) {
			state.sc.verifyUserPIN(state.pin);
		} else {
			throw new GPError(module.id, GPError.DEVICE_ERROR, 0, "Device " + state.path + " is not logged in");
		}
	}
	return state;
}



/**
 * Return a EACCryptoProvider instance for the SmartCard-HSM identified by the parameter id
 *
 * @param {String} id the SmartCard-HSM id
 * @param {Boolean} requireLogin require that the return provider is logged-in and as such operational
 * @type EACCryptoProvider
 * @return a crypto provider bound to the SmartCard-HSM. Authentication has been assured
 */
HSMService.prototype.getEACCryptoProvider = function(id, requireLogin) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getEACCryptoProvider('" + id + "," + requireLogin + "')");
	var state = this.assertCryptoProvider(id, requireLogin);

	if (!state.cp) {
		state.cp = new EACCryptoProvider(state.sc, state.path);
	}

	return state.cp;
}



/**
 * Return a CryptoProvider instance for the SmartCard-HSM identified by the parameter id
 *
 * @param {String} id the SmartCard-HSM id
 * @param {Boolean} requireLogin require that the return provider is logged-in and as such operational
 * @typeCryptoProvider
 * @return a crypto provider bound to the SmartCard-HSM. Authentication has been assured
 */
HSMService.prototype.getCryptoProvider = function(id, requireLogin) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCryptoProvider('" + id + "," + requireLogin + "')");
	var state = this.assertCryptoProvider(id, requireLogin);

	if (!state.cp) {
		state.cp = new CryptoProvider(state.sc, state.path);
	}

	return state.cp;
}



/**
 * Reinitialize and clear all keys on the device
 *
 * This method is only used during testing when the database is reset and shall ensure
 * that all keys are removed as well. This method uses the default SO-PIN and User-PIN.
 */
HSMService.prototype.reinitializeHSM = function(id) {
	assert(typeof(id) == "string", "Argument must be string");

	var state = this.hsmmap[id];

	if (!state) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "No provider for " + id + " found");
	}

	state.update();

	if (state.isOffline()) {
		if (state.isLocal) {
			this.bringOnline(state);
		} else {
			throw new GPError(module.id, GPError.DEVICE_ERROR, 0, "Device " + state.path + " is offline");
		}
	}

	if (state.isOffline()) {
		throw new GPError(module.id, GPError.DEVICE_ERROR, 0, "Device " + state.path + " is offline");
	}

	var sci = new SmartCardHSMInitializer(state.sc.card);
	if (state.pin) {
		sci.setUserPIN(state.pin);
	}
	sci.initialize();

	state.protectedPINEntry = false;
	state.pin = sci.userPIN;

	delete state.cp;
}



HSMService.prototype.toString = function() {
	return "HSMService for SmartCard-HSM";
}



/**
 * Maintain the SmartCard-HSM state information
 *
 * @param {String} path the SmartCard-HSM unique identifier
 * @constructor
 */
function HSMState(path) {
	this.path = path;
	this.isLocal = false;
}



/**
 * Returns true if SmartCard-HSM is no longer connected
 *
 * @type boolean
 * @return true if disconnected
 */
HSMState.prototype.isOffline = function() {
	return !this.sc;
}



/**
 * Returns true if protected PIN verification is supported
 *
 * @type boolean
 * @return true if protected PIN supported
 */
HSMState.prototype.hasProtectedPINEntry = function() {
	return this.protectedPINEntry;
}



/**
 * Returns true if user is authenticated
 *
 * @type boolean
 * @return true if user is authenticated
 */
HSMState.prototype.isUserAuthenticated = function() {
	return this.pinsw == 0x9000;
}



/**
 * Update status
 */
HSMState.prototype.update = function() {
	if (this.isOffline()) {
		return;
	}

	try	{
		this.pinsw = this.sc.queryUserPINStatus();

		this.pka = new ManagePKA(this.sc, this.deviceId);

		if (!this.pka.isActive()) {
			this.pka = null;
		}
	}
	catch(e if e instanceof GPError) {
		GPSystem.log(GPSystem.INFO, module.id, "Device " + this.path + " failed with " + e.message);
		this.error = e.message;
		this.sc = undefined;		// Device is offline, e.g. removed
	}
}



/**
 * Logout from SmartCard-HSM
 */
HSMState.prototype.logout = function() {
	if (!this.sc) {
		return;
	}

	this.sc.logout();
	this.update();
}



/**
 * Disconnect remote connection
 */
HSMState.prototype.disconnect = function() {
	if (!this.sc) {
		return;
	}
	this.sc.card.close();
	this.sc = null;
	this.pka = null;
}



HSMState.prototype.toString = function() {
	return (this.isLocal ? "Local: " : "Remote: ") + this.path;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A simple HSM maintaince web GUI
 */

var CommonUI = require('scsh/srv-cc1/CommonUI').CommonUI;
var PKAWizard = require('scsh/srv-cc1/PKAWizard').PKAWizard;
var SmartCardHSM = require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;



/**
 * Create a HSM maintainance web GUI
 *
 * @class Class implementing a simple HSM maintainance user interface
 * @constructor
 * @param {SmartCardHSM} hsm the SmartCard-HSM to which the GUI is attached
 */
function HSMUI(service, session) {
	CommonUI.call(this, service, session);
	this.service = service;
	this.selectedHSM = service.getHSMStates()[0];
}

HSMUI.prototype = new CommonUI();
HSMUI.constructor = HSMUI;

exports.HSMUI = HSMUI;



/**
 * Prepare table with status information for HSM
 *
 * @param {HSMState} hsmstate the current state
 */
HSMUI.prototype.renderHSMInfo = function(hsmstate) {
	var t = <table class="content"/>;
	t.colgroup += <colgroup><col width="20%"/><col/></colgroup>
	t.tr += <tr><td>Id</td><td>{ hsmstate.path }</td></tr>;

	if (hsmstate.isOffline()) {
		if (hsmstate.error) {
			var str = "Offline (" + hsmstate.error + ")";
		} else {
			var str = "Offline";
		}
	} else {
		var str = "Online";
	}

	t.tr += <tr><td>Status</td><td>{ str }</td></tr>;

	if (hsmstate.readerName) {
		t.tr += <tr><td>Reader</td><td>{ hsmstate.readerName }</td></tr>;
	}

	if (!hsmstate.isOffline()) {
		if (hsmstate.pka) {
			t.tr += <tr><td>Authentication Status</td><td>{ hsmstate.pka.describeStatus() }</td></tr>;
		} else {
			t.tr += <tr><td>Authentication Status</td><td>{ SmartCardHSM.describePINStatus( hsmstate.pinsw, "User") }</td></tr>;
		}
	}

	return t;
}



/**
 * Serve the status page
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 * @param {String[]} url array of URL path elements
 */
HSMUI.prototype.serveStatusPage = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var hsmlist = this.service.getHSMStates();

	if (hsmlist.length == 0) {
		var page = <div>
				<p>No SmartCard-HSM connected yet.</p>
				<p>Please configure service to use a SmartCard-HSM.</p>
				<p>You can also connect a device by running:</p>
				<pre>
					$ java -jar ocf-cc.jar http://localhost:8080/rt/hsm
				</pre>
				<p>Press the refresh button once the SmartCard-HSM is connected.</p>
			</div>

		this.sendPage(req, res, url, page);
		return;
	}

	if (!this.selectedHSM) {
		this.selectedHSM = hsmlist[0];
	}

	var page =
		<div>
			<h1>SmartCard-HSM</h1>
			<form action="" method="get">
				Select HSM
				<input name="op" type="hidden" value="changehsm"/>
				<select name="hsm" size="1" onchange="this.form.submit()">

				</select>
				<button type="submit">Refresh</button>
			</form>
			<br/>
			<div id="hsminfo" />
			<br/>
			<div id="actions" />
		</div>

	var l = page.form.select.(@name=="hsm");
	var hsmlist = this.service.getHSMStates();

	for each (var hsm in hsmlist) {
		if (this.selectedHSM.path == hsm.path) {
			l.option += <option selected="selected" value={ hsm.path }>{hsm.toString()}</option>
		} else {
			l.option += <option value={ hsm.path }>{hsm.toString()}</option>
		}
	}

	var div = page.div.(@id == "hsminfo");
	div.appendChild(this.renderHSMInfo(this.selectedHSM));

	if (!this.selectedHSM.isOffline()) {
		if (!this.selectedHSM.pka) {
			if (this.selectedHSM.hasProtectedPINEntry()) {
				var action = <div>
					<form action="" method="get">
						<input name="op" type="hidden" value="verifypin"/>
						<button type="submit">Verify PIN</button>
					</form>
				</div>
			} else {
				var action = <div>
					<form action="" method="get">
						<input name="op" type="hidden" value="verifypin"/>
						<input name="pin" type="password" size="20"/>
						<button type="submit">Verify PIN</button>
					</form>
				</div>
			}
		} else {
			var action = <div>
				<form action="" method="get">
					<input name="op" type="hidden" value="authenticate"/>
					<button type="submit">Authenticate</button>
				</form>
			</div>;
		}

		action.form += 	<form action="" method="get">
					<input name="op" type="hidden" value="logout"/>
					<button type="submit">Logout</button>
				</form>

		if (!this.selectedHSM.isLocal) {
			action.form += 	<form action="" method="get">
						<input name="op" type="hidden" value="disconnect"/>
						<button type="submit">Disconnect</button>
					</form>
		}

		var div = page.div.(@id == "actions");
		div.appendChild(action);
	}

	this.sendPage(req, res, url, page);
}



/**
 * Create wizard to handle public key authentication
 */
HSMUI.prototype.handlePKAAuthenticate = function(req, res, url) {
	this.wizard = new PKAWizard(this, this.selectedHSM);
	this.redirectTo(req, res, url, "/wizard");
}



/**
 * Handle card interaction by defereing to wizard
 */
HSMUI.prototype.handleCard = function(session, pathInfo) {
	if (this.wizard) {
		this.wizard.handleCard(session, pathInfo);
	}
}



/**
 * Dispatch all GET inquiries
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
HSMUI.prototype.handleRequest = function(req, res) {
	if (this.service.authenticationRequired) {
		if (typeof(this.session.user) == "undefined") {
			this.serveNotAuthorizedPage(req, res, req,url);
			return;
		}

		if (this.service.roleRequired > 0) {
			if ((typeof(this.session.user.roles) == "undefined") || (this.session.user.roles.indexOf(this.service.roleRequired) <= 0)) {
				this.serveNotAuthorizedPage(req, res, req,url);
				return;
			}
		}
	}

	// pathInfo always starts with an "/"
	var url = req.pathInfo.substr(1).split("/");

	// Handle details
	if (url.length > 1) {
		var detailsType = url[1];
//		GPSystem.trace("Handle details for :" + detailsType);
		switch(detailsType) {
		case "wizard":
			this.handleWizard(req, res, url);
			break;
		default:
			res.setStatus(HttpResponse.SC_NOT_FOUND);
		}
	} else {
		// Handle operations
		if (req.queryString) {
			// Handle operations
			var operation = CommonUI.parseQueryString(req.queryString);

			switch(operation.op) {
			case "changehsm":
				var newhsm = this.service.getHSMState(operation.hsm);
				if (newhsm) {
					this.selectedHSM = newhsm;
				}
				this.redirectTo(req, res, url, "");
				break;
			case "verifypin":
				var result = this.service.verifyUserPIN(this.selectedHSM, operation.pin);

				this.serveRefreshPage(req, res, url, result);
				break;
			case "authenticate":
				this.handlePKAAuthenticate(req, res, url);
				break;
			case "logout":
				this.selectedHSM.logout();
				this.redirectTo(req, res, url, "");
				break;
			case "disconnect":
				this.selectedHSM.disconnect();
				this.redirectTo(req, res, url, "");
				break;
			default:
				this.serveStatusPage(req, res, url);
			}
		} else {
			this.serveStatusPage(req, res, url);
		}
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Internationalization Support
 */


var I18N = { FallbackToDefaultLang: true, EnforceDefaultLang: false };

exports.I18N = I18N;

var Map = {};
var DefaultLang;


/**
 * Add a resource table from within the code
 *
 * @param {Object[]} res array of resource objects with a property lang that denotes the language and keys that contains a map of key to messages
 */
I18N.addResources = function(res) {
	assert(typeof(res) == "object", "Argument res must be of type array");
	assert(res.length > 0, "Argument can't be empty");

	var lang = res[0].lang;
	var map = Map[lang];
	if (!map) {
		print("New default map for " + lang);
		map = { lang: lang };
		DefaultLang = lang;
		Map[lang] = map;
	}

	for (var key in res[0].keys) {
		if (typeof(map[key]) != "undefined") {
			GPSystem.log(GPSystem.WARN, module.id, "Key " + key + " defined more than once");
		}
		map[key] = res[0].keys[key];
	}
	for (var i = 1; i < res.length; i++) {
		var map = Map[res[i].lang];
		if (!map) {
			print("New translation map for " + res[i].lang);
			map = { lang: res[i].lang };
			Map[res[i].lang] = map;
		}
		for (var key in res[0].keys) {
			var str = res[i].keys[key];
			if (!str) {
				GPSystem.log(GPSystem.DEBUG, module.id, "No translation found for " + key + " in " + res[i].lang);
				str = res[0].keys[key];
			}
			map[key] = str;
		}
	}
}



/**
 * Translate key into message
 *
 * @param {String/Object} lang either the language string or the map returned by I18N.getMap().
 * @param {String} key the key to translate
 * @type String
 * @return the translated messages
 */
I18N.t = function(lang, key) {
	if (typeof(lang) == "string") {
		lang = I18N.getMap(lang);
	}

	var s = lang[key];
	if (s == undefined) {
		if (lang.lang == DefaultLang) {
			s = key;
		} else {
			if (I18N.FallbackToDefaultLang) {
				s = I18N.t(Map[DefaultLang], key)
			} else {
				s = key;
			}
		}
	}
	return s;
}



/**
 * Return the map for a given language. Use this call to reduce map lookup in I18N.t()
 *
 * @param {String} lang the language code, e.g. "EN" for English
 * @type Object
 * @return the map
 */
I18N.getMap = function(lang) {
	if (I18N.EnforceDefaultLang) {
		lang = DefaultLang;
	}
	var m = Map[lang];
	if (m == undefined) {
		m = Map[DefaultLang];;
	}
	return m;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Wizard for public key authentication
 */

var CVC			= require('scsh/eac/CVC').CVC;
var SmartCardHSM	= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;
var ManagePKA		= require('scsh/sc-hsm/ManagePKA').ManagePKA;
var HSMKeyStore		= require('scsh/sc-hsm/HSMKeyStore').HSMKeyStore;

var CardAction		= require('scsh/srv-cc1/CardAction').CardAction;



/**
 * Wizard to perform a public key authentication with a SmartCard-HSM
 *
 */
function PKAWizard(ui, hsmstate) {
	CardAction.call(this, ui);
	this.hsmstate = hsmstate;
}

PKAWizard.prototype = new CardAction();
PKAWizard.constructor = PKAWizard;

exports.PKAWizard = PKAWizard;



PKAWizard.prototype.getPage = function(req, res, url) {
	GPSystem.trace("PKAWizard state: " + this.state);
	switch(this.state) {
		case "new":
			var page = this.getSignStartPage(req, res, url);
			this.state = "enumeratekeys";
			break;
		case "enumeratekeys":
			var page = this.getNoClientPage(req, res, url);
			this.state = "new";
			break;
		case "enterdata":
			if (req.method == "POST") {
				var page = this.processSignControlForm(req, res, url);
				this.state = "startsign";
			} else {
				var page = this.getSignControlForm(req, res, url);
			}
			break;
		case "startsign":
			var page = this.getSignProgressPage(req, res, url);
			this.state = "sign";
			break;
		case "sign":
			var page = this.getErrorPage(req, res, url);
			this.state = "startsign";
			break;
		default:
			var page = CardAction.prototype.getPage.call(this, req, res, url);
	}
	return page;
}



PKAWizard.prototype.getSignStartPage = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>PKA Service</h1>
			<p>Enumerate keys... { this.getActivationLink(req, res, -1) }</p>
			<p>Please wait for the green tick to appear. The page will be reloaded automatically if JavaScript is enabled.</p>
			<p>If JavaScript is disabled, then press <a href="">continue</a> after the green tick is shown.</p>
		</div>
	this.signedMessage = "";
	return page;
}



PKAWizard.prototype.getSignNoKeyPage = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>PKA Service</h1>
			<p>Error: The SmartCard-HSM has no available signing key.</p>
		</div>
	return page;
}



PKAWizard.prototype.getSignControlForm = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<div id="error"/>
			<h1>PKA Service</h1>

			<form action="" method="post" enctype="multipart/form-data">
				<p>Select the key for authentication:</p>
				<select name="key"/>
				<button type="submit">Authenticate</button>
			</form>
		</div>

	this.signedMessage = "";

	var l = page.form.select;
	for each (var alias in this.keys) {
		l[0].appendChild(<option>{alias}</option>);
	}

	return page;
}



PKAWizard.prototype.processSignControlForm = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	this.key = req.parameters.key;

	return null;
}



PKAWizard.prototype.getSignProgressPage = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>PKA Service</h1>
			<p>Start authentication... { this.getActivationLink(req, res, 1) }</p>
			<p>This operation requires PIN verification. Please watch the PIN dialog in the upper right corner
			   of your screen or on your card readers PIN pad.</p>
			<p>Please wait for the green tick to appear. The page will be reloaded automatically if JavaScript is enabled.</p>
			<p>If JavaScript is disabled, then press <a href="">continue</a> after the green tick is shown.</p>
		</div>

	return page;
}



PKAWizard.prototype.handleCardAction = function(card, reqInfo) {
	var sc = new SmartCardHSM(card);

	var devAutCert = sc.readBinary(SmartCardHSM.C_DevAut);
	var crypto = new Crypto();
	var chain = SmartCardHSM.validateCertificateChain(crypto, devAutCert);
	if (chain == null) {
		this.lastMessage = "Could not authenticate SmartCard-HSM";
		return;
	}

	sc.openSecureChannel(crypto, chain.publicKey);

	switch(this.state) {
		case "enumeratekeys":
			this.keys = sc.enumerateKeys();
			if (this.keys.length > 0) {
				this.state = "enterdata";
			} else {
				this.reportError("No keys found on card");
			}
			break;
		case "sign":
			var ks = new HSMKeyStore(sc);

			var keys = ks.enumerateKeys()

			var key = ks.getKey(this.key);
			var cert = ks.getCertificate(this.key);
			var cvc = new CVC(cert);

			var pka = this.hsmstate.pka;
			if (!pka) {
				this.reportError("Target device no longer online");
				return;
			}

			var status = pka.checkKeyStatus(cvc.getCHR());

			if (status == ManagePKA.KEY_NOT_FOUND) {
				this.reportError("Key not registered as public key for authentication");
				return;
			}

			if (status == ManagePKA.KEY_ALREADY_AUTHENTICATED) {
				this.reportError("Key already authenticated");
				return;
			}

			pka.performAuthentication(sc, key);

			this.result = "Public key authentication successful";
			this.state = "success";
			break;
		default:
			GPSystem.trace("Unexpected handleCardAction in state " + this.state);
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2025 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Wizard for public key authentication using the PKI API
 */

var CVC			= require('scsh/eac/CVC').CVC;
var SmartCardHSM	= require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;
var HSMKeyStore		= require('scsh/sc-hsm/HSMKeyStore').HSMKeyStore;

var CardAction		= require('scsh/srv-cc1/CardAction').CardAction;



/**
 * Wizard to perform a public key authentication with a SmartCard-HSM
 *
 */
function PKAWizardForPKIAPI(ui, subjectId, tokenId, api, redirectURL) {
	CardAction.call(this, ui);
    this.subjectId = subjectId;
    this.tokenId = tokenId;
    this.api = api;
    this.redirectURL = redirectURL;

	this.tokenInfo = this.api.getToken(this.subjectId, this.tokenId, this.ui.session.user.id);
}

PKAWizardForPKIAPI.prototype = new CardAction();
PKAWizardForPKIAPI.constructor = PKAWizardForPKIAPI;

exports.PKAWizardForPKIAPI = PKAWizardForPKIAPI;



PKAWizardForPKIAPI.prototype.getPage = function(req, res, url) {
	GPSystem.trace("PKAWizardForPKIAPI state: " + this.state);
	switch(this.state) {
		case "new":
			var page = this.getClientActivationPage(req, res, url);
			this.state = "enumerateKeys";
			break;
		case "enumerateKeys":
			// no client found
			var page = this.getAuthenticationTokenPage(req, res, url);
			this.state = "new";
			break;
		case "noMatchingKey":
			if (req.method == "POST") {
				this.state = "new";
			} else {
				var page = this.getNoMatchingKeyPage(req, res, url);
			}
			break;
		case "enterData":
			if (req.method == "POST") {
				if (!req.parameters.key) {
					this.state = "new";
				} else if (!this.keys.includes(req.parameters.key)) {
					this.reportError("Input validation failed")
				} else {
					this.key = req.parameters.key;
					this.state = "startPKA";
				}
			} else {
				var page = this.getKeySelectionPage(req, res, url);
			}
			break;
		case "startPKA":
			var page = this.getClientActivationPageWithPIN(req, res, url);
			this.state = "performPKA";
			break;
		case "performPKA":
			var page = this.getErrorPage(req, res, url);
			this.state = "startPKA";
			break;
        case CardAction.SUCCESS:
			this.ui.redirectTo(req, res, req.url, this.redirectURL);
			return;
		default:
			var page = CardAction.prototype.getPage.call(this, req, res, this.redirectURL);
	}
	return page;
}



/**
 * Serve the error page if no local client was found
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
PKAWizardForPKIAPI.prototype.getAuthenticationTokenPage = function(req, res) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>Public Key Authentication Wizard</h1>
			<p>This wizard performs public key authentication on token {this.tokenInfo.path}.</p>
			<p>Please connect the authentication token with your local client and press <a href="">refresh</a> to proceed.</p>
			<p>
			If you have problems connecting your token see the <a href="https://www.openscdp.org/ocf/faq.html">FAQ</a> for more details
			   and troubleshooting hints.</p>
		</div>

	return page;
}



PKAWizardForPKIAPI.prototype.getClientActivationPage = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>Public Key Authentication Wizard</h1>
			<p>Enumerate keys... { this.getActivationLink(req, res, -1) }</p>
			<p>Please wait for the green tick to appear. The page will be reloaded automatically if JavaScript is enabled.</p>
			<p>If JavaScript is disabled, then press <a href="">continue</a> after the green tick is shown.</p>
		</div>

	return page;
}



PKAWizardForPKIAPI.prototype.getNoMatchingKeyPage = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<div id="error"/>
			<h1>Public Key Authentication Wizard</h1>

			<h2>No Matching Key Found on Authentication Token</h2>

			<p>The authentication token {this.path} in this session doesn't contain any of the following public keys of token {this.tokenInfo.path}:</p>
			<td>
				<ul/>
			</td>

			<p>Please connect another authentication token and press
				<form class="pure-form" action="" method="post" enctype="multipart/form-data">
					<input name="action" type="hidden" value="enumerate"/>
					<button class="pure-button" type="submit">Enumerate Keys</button>
				</form>
			</p>
		</div>

	for (var i = 0; i < this.tokenInfo.pkaStatus.publicKeys.length; i++) {
		var keyInfo = this.tokenInfo.pkaStatus.publicKeys[i];
		if (keyInfo.authenticated) {
            continue;
        }
		var chr = keyInfo.chr;
		page.td.ul.li += <li>{chr}</li>;
	}

	return page;
}



PKAWizardForPKIAPI.prototype.getKeySelectionPage = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<div id="error"/>
			<h1>Public Key Authentication Wizard</h1>

			<p>
			<form class="pure-form" action="" method="post" enctype="multipart/form-data">
				<p>Token: {this.tokenInfo.path}</p>
				<label>Authentication Token: {this.path}</label>
				<input name="action" type="hidden" value="enumerate"/>
				<button class="pure-button" type="submit">Enumerate Keys</button>
			</form>
			</p>

			<form class="pure-form" action="" method="post" enctype="multipart/form-data">
				<p>Select the key for authentication:</p>
				<select name="key"/>
				<button class="pure-button" type="submit">Authenticate</button>
			</form>
		</div>

	var l = page.form.select;
	for each (var alias in this.keys) {
		l[0].appendChild(<option>{alias}</option>);
	}

	return page;
}



PKAWizardForPKIAPI.prototype.getClientActivationPageWithPIN = function(req, res, url) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var page =
		<div>
			<h1>Public Key Authentication Wizard</h1>
			<p>Start authentication... { this.getActivationLink(req, res, 1) }</p>
			<p>This operation requires PIN verification. Please watch the PIN dialog on your screen or on your card readers PIN pad.</p>
			<p>Please wait for the green tick to appear. The page will be reloaded automatically if JavaScript is enabled.</p>
			<p>If JavaScript is disabled, then press <a href="">continue</a> after the green tick is shown.</p>
		</div>

	return page;
}



PKAWizardForPKIAPI.prototype.determinePublicKeys = function(sc) {
    this.pkaStatus = this.tokenInfo.pkaStatus;

    if (this.pkaStatus.authenticated) {
        this.result = "Token already authenticated";
        this.state = "success";
        return
    }

    var labels = sc.enumerateKeys();
    GPSystem.log(GPSystem.DEBUG, module.id, "found keys: " + labels);
    if (labels.length == 0) {
        this.reportError("No keys found on card");
    }

    this.keys = [];
    var chrMap = {};

    var ks = new HSMKeyStore(sc);

    for (var i = 0; i < labels.length; i++) {
        var label = labels[i];
        if (ks.hasCertificate(label)) {
            var cert = ks.getCertificate(label);
            try {
                var cvc = new CVC(cert);
                GPSystem.log(GPSystem.DEBUG, module.id, "Add cvc " + cvc + " for label "+ label);

				if (typeof(chrMap[cvc.getCHR().toString()]) == "undefined") {
					chrMap[cvc.getCHR().toString()] = label;
				} else if (typeof(chrMap[cvc.getCHR().toString()]) == "string") {
					var l = chrMap[cvc.getCHR().toString()];
					chrMap[cvc.getCHR().toString()] = [l, label];
				} else {
					chrMap[cvc.getCHR().toString()].push(label);
				}
            } catch (e) {
                GPSystem.log(GPSystem.DEBUG, module.id, "Label " + label + " is not a CVC");
                continue;
            }
        }
    }


    for (var i = 0; i < this.pkaStatus.publicKeys.length; i++) {
        var keyInfo = this.pkaStatus.publicKeys[i];

        if (keyInfo.authenticated) {
            continue;
        }

        var chr = keyInfo.chr;
        if (typeof(chrMap[chr]) == "string") {
            var label = chrMap[chr];
            this.keys.push(label);
		} else if (Array.isArray(chrMap[chr])) {
			this.keys = this.keys.concat(chrMap[chr]);
		} else if (labels.includes(chr)) {
            this.keys.push(chr);
        }
    }

    if (this.keys.length == 0) {
		this.state = "noMatchingKey";
    } else if (this.keys.length == 1) {
        this.key = this.keys[0];
        this.state = "startPKA";
    } else {
        this.state = "enterData";
    }
}



PKAWizardForPKIAPI.prototype.handleCardAction = function(card, reqInfo) {
	var sc = new SmartCardHSM(card);

	var devAutCert = sc.readBinary(SmartCardHSM.C_DevAut);
	var crypto = new Crypto();
	var chain = SmartCardHSM.validateCertificateChain(crypto, devAutCert);
	if (chain == null) {
		this.lastMessage = "Could not authenticate SmartCard-HSM";
		return;
	}

	sc.openSecureChannel(crypto, chain.publicKey);

	switch(this.state) {
		case "enumerateKeys":
			this.path = chain.path;
			this.determinePublicKeys(sc);
			break;
		case "performPKA":
			var ks = new HSMKeyStore(sc);
			var key = ks.getKey(this.key);
			var cert = ks.getCertificate(this.key);
			var cvc = new CVC(cert);

            var challengeRsp = this.api.getPKAChallenge(this.subjectId, this.tokenId, this.ui.session.user.id);

            var challenge = ByteString.fromJSON(challengeRsp.pkaChallenge);
            var input = new ByteString(challengeRsp.deviceId, ASCII).concat(challenge);
            var crypto = sc.getCrypto();
            var signature = crypto.sign(key, Crypto.ECDSA_SHA256, input);
            signature = CVC.unwrapSignature(signature, 32);

            var newStatus = this.api.performPublicKeyAuthentication(this.subjectId, this.tokenId, this.ui.session.user.id, cvc.getCHR(), signature);

			if (newStatus.numberOfAuthenticatedPublicKeys <= this.pkaStatus.numberOfAuthenticatedPublicKeys) {
                this.reportError("Authentication with key " + this.key + " failed");
                return;
            }

			this.result = "Public key authentication successful";
			this.state = "success";
			break;
		default:
			GPSystem.trace("Unexpected handleCardAction in state " + this.state);
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2023 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Connector for the PKI-API
 */


function PKIAPIConnector(cfg) {
	this.cfg = cfg;
}
PKIAPIConnector.constructor = PKIAPIConnector;

exports.PKIAPIConnector = PKIAPIConnector;

PKIAPIConnector.FAILED = "msg.failed";
PKIAPIConnector.COMPLETED = "msg.completed";
PKIAPIConnector.PENDING = "msg.pending";
PKIAPIConnector.RUNNING = "msg.running";


PKIAPIConnector.prototype.getConnection = function(url) {
	var c = new URLConnection(url);

	if (typeof(this.cfg.keyStore) != "undefined") {
		GPSystem.log(GPSystem.DEBUG, module.id, "Set trust store, key store and pw for PKI API connection");
		c.setTLSKeyStores(this.cfg.trustStore, this.cfg.keyStore, this.cfg.keyPassword);
	} else if (typeof(this.cfg.trustStore) != "undefined") {
		GPSystem.log(GPSystem.DEBUG, module.id, "Set only trust store for PKI API connection");
		c.setTLSKeyStores(this.cfg.trustStore);
	} else {
		GPSystem.log(GPSystem.DEBUG, module.id, "Didn't set tls key stores");
	}
	return c;
}



PKIAPIConnector.prototype.handleCookies = function(cookies) {
	var combinedCookie = "";
	for (var i = 0; i < cookies.length; i++) {
		var eol = cookies[i].indexOf(";");
		if (eol < 0) {
			eol = cookies[i].length;
		}
		var elem = cookies[i].substr(0, eol);
		if (i > 0) {
			combinedCookie += "; ";
		}
		combinedCookie += elem;
	}

	this.session = combinedCookie;
}



/**
 * Post an action to the PKI-API
 *
 * @param {Number} srID the Service Request ID
 * @param {Object} action the json action
 * @param {Number} userId the user id
 */
PKIAPIConnector.prototype.postAction = function(srID, action, userId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "postAction()");
	return this.postJSON("/sr/" + srID + "/action", action, userId);
}



/**
 * Post a json object to the PKI-API
 *
 * @param {String} path the URL path of the resource
 * @param {Object} jsonObject the json object
 * @param {Number} userId the user id
 */
PKIAPIConnector.prototype.postJSON = function(path, jsonObject, userId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "postJSON()");

	var url = this.cfg.apiURL + "/api" + path;

	var c = this.getConnection(url);

	c.addHeaderField("Content-Type", "application/json");
	c.addHeaderField("Accept", "application/json");

	if (typeof(userId) != "undefined") {
		c.addHeaderField("UserId", "" + userId);
	}

	var json = JSON.stringify(jsonObject);
	GPSystem.log(GPSystem.DEBUG, module.id, "post jsonObject \n" + json + "\nto " + url);
	var rsp = c.post(json);
	if (rsp)  {
		var rspJSON = JSON.parse(rsp);
		GPSystem.log(GPSystem.DEBUG, module.id, "Response from PKI-API (" + c.responseCode + "): \n" + JSON.stringify(rspJSON, null, 2));
	} else {
		var rspJSON = {};
		GPSystem.log(GPSystem.DEBUG, module.id, "Empty response from PKI-API");
	}

	rspJSON.responseCode = c.responseCode;

	var cookie = c.getHeaderField("Set-Cookie");

	if (cookie) {
		this.handleCookies(cookie);

		var sessionId = this.session.substring("JSESSIONID=".length);
		GPSystem.log(GPSystem.DEBUG, module.id, "PKI-API session id: " + sessionId);
		rspJSON.sessionId = sessionId;
	}

	return rspJSON;
}



/**
 * Get the service request
 *
 * @param {Number} srID the Service Request ID
 * @param {Number} userId the user id
 */
PKIAPIConnector.prototype.getServiceRequest = function(srID, userId, withForm) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getServiceRequest()");

	var path = "/sr/" + srID;

	if (withForm) {
		path += "/form";
	}

	var json = this.getResource(path, userId);

	return json;
}



/**
 * Get a list of service requests
 *
 * @param {Number} userId the user id
 * @param {PKIAPIListFilter[]} filter list of filter - optional
 * @param {PKIAPIListOrder[]} order list of order - optional
 * @param {Number} limit the query limit - optional
 * @param {Number} offset the query offset- optional
 */
PKIAPIConnector.prototype.getServiceRequestList = function(userId, filter, order, limit, offset) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getServiceRequestList()");

	var path = "/sr/";

	var json = this.getFilteredListResource(path, userId, filter, order, limit, offset)

	return json;
}



/**
 * Get the number of service requests
 *
 * @param {Number} userId the user id
 * @param {PKIAPIListFilter[]} filter list of filter - optional
 */
PKIAPIConnector.prototype.getServiceRequestListCount = function(userId, filter) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getServiceRequestListCount()");

	var path = "/sr/count";

	var json = this.getFilteredListResource(path, userId, filter)

	return json;
}



/**
 * Get the number of service requests
 *
 * @param {Number} userId the user id
 * @param {PKIAPIListFilter[]} filter list of filter - optional
 * @param {PKIAPIListOrder[]} order list of order - optional
 * @param {Number} limit the query limit - optional
 * @param {Number} offset the query offset- optional
 */
PKIAPIConnector.prototype.getInvolvedServiceRequestList = function(userId, filter, order, limit, offset) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getInvolvedServiceRequestList()");

	var path = "/sr/involved";

	var json = this.getFilteredListResource(path, userId, filter, order, limit, offset)

	return json;
}



/**
 * Get the number of service requests
 *
 * @param {Number} userId the user id
 * @param {PKIAPIListFilter[]} filter list of filter - optional
 */
PKIAPIConnector.prototype.getInvolvedServiceRequestListCount = function(userId, filter) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getInvolvedServiceRequestListCount()");

	var path = "/sr/involved/count";

	var json = this.getFilteredListResource(path, userId, filter)

	return json;
}



/**
 * Query status of a card action
 *
 * @param {Number} srID the Service Request ID
 */
PKIAPIConnector.prototype.getCardActionStatus = function(srID) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCardActionStatus()");

	var path = "/sr/" + srID + "/action";

	var json = this.getResource(path, null, this.session);

	return json;
}



/**
 * Get all connected token for the given subject
 *
 * @param {Number} subjectId the subject ID
 * @param {Number} userId the user id
 */
PKIAPIConnector.prototype.getTokenList = function(subjectId, userId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getTokenList()");

	var path = "/subject/" + subjectId + "/token";

	var json = this.getResource(path, userId);

	return json;
}



/**
 * Get all connected token for the given subject
 *
 * @param {Number} subjectId the subject ID
 * @param {Number} tokenId the token ID
 * @param {Number} userId the user id
 */
PKIAPIConnector.prototype.getToken = function(subjectId, tokenId, userId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getToken()");

	var path = "/subject/" + subjectId + "/token/" + tokenId;

	var json = this.getResource(path, userId);

	return json;
}



/**
 * Get all connected token for the given subject
 *
 * @param {Number} subjectId the subject ID
 * @param {Number} tokenId the token ID
 * @param {Number} userId the user id
 */
PKIAPIConnector.prototype.getPKAChallenge = function(subjectId, tokenId, userId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getTokenList()");

	var path = "/subject/" + subjectId + "/token/" + tokenId;

	var action = {
		"action":"pkaChallenge"
	}
	var json = this.postJSON(path, action, userId);

	return json;
}



/**
 * Reset the authentication state of the specified token
 *
 * @param {Number} subjectId the subject ID
 * @param {Number} tokenId the token ID
 * @param {Number} userId the user id
 */
PKIAPIConnector.prototype.postLogout = function(subjectId, tokenId, userId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "postLogout()");

	var path = "/subject/" + subjectId + "/token/" + tokenId;

	var action = {
		"action":"logout"
	}
	var json = this.postJSON(path, action, userId);

	return json;
}



/**
 * Perform Public Key Authentication
 *
 * @param {Number} subjectId the subject ID
 * @param {Number} tokenId the token ID
 * @param {Number} userId the user id
 * @param {PublicKeyReference} chr the CHR of the public key used to verify the signature
 * @param {ByteString} signature the signature over the concatenation of the device id and challenge
 */
PKIAPIConnector.prototype.performPublicKeyAuthentication = function(subjectId, tokenId, userId, chr, signature) {
	GPSystem.log(GPSystem.DEBUG, module.id, "performPublicKeyAuthentication()");

	var path = "/subject/" + subjectId + "/token/" + tokenId;

	var action = {
		"action":"externalAuthenticate",
		"args": {
			"chr": chr.toString(),
			"signature": signature.toString(HEX)
		}
	}
	var json = this.postJSON(path, action, userId);

	return json;
}



/**
 * Get a JSON Resource for the given path
 *
 * @param {String} path the URL path of the resource
 */
PKIAPIConnector.prototype.getResource = function(path, userId, session) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getResource()");

	var url = this.cfg.apiURL + "/api" + path;

	var c = this.getConnection(url);

	if (typeof(session) != "undefined") {
		c.addHeaderField("Cookie", session);
	}

	c.addHeaderField("Accept", "application/json");

	if (typeof(userId) != "undefined") {
		c.addHeaderField("UserId", "" + userId);
	}

	var rsp = c.get();
	var json = JSON.parse(rsp);

	GPSystem.log(GPSystem.DEBUG, module.id, "Response from PKI-API: \n" + JSON.stringify(json, null, 2));

	var cookie = c.getHeaderField("Set-Cookie");

	if (cookie) {
		this.handleCookies(cookie);

		var sessionId = this.session.substring("JSESSIONID=".length);
		GPSystem.log(GPSystem.DEBUG, module.id, "PKI-API session id: " + sessionId);
		json.sessionId = sessionId;
	}

	return json;
}



/**
 * Get a JSON Resource for the given path
 *
 * @param {String} path the URL path of the resource
 */
PKIAPIConnector.prototype.getFilteredListResource = function(path, userId, filter, order, limit, offset) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getFilteredListResource()");

	var queryString = "";

	if (filter) {
		for (var i = 0; i < filter.length; i++) {
			queryString += filter[i].getEncoded() + "&";
		}
	}

	if (order) {
		for (var i = 0; i < order.length; i++) {
			queryString += order[i].getEncoded() + "&";
		}
	}

	if (limit != null) {
		queryString += "limit=" + limit + "&";
	}

	if (offset != null) {
		queryString += "offset=" + offset + "&";
	}

	if (queryString.length > 0) {
		queryString.substr(0, queryString.length - 1);
		path += "?" + queryString;
	}

	var url = this.cfg.apiURL + "/api" + path;

	var c = this.getConnection(url);

	c.addHeaderField("Accept", "application/json");

	if (typeof(userId) != "undefined") {
		c.addHeaderField("UserId", "" + userId);
	}

	var rsp = c.get();
	var json = JSON.parse(rsp);

	GPSystem.log(GPSystem.DEBUG, module.id, "Response from PKI-API: \n" + JSON.stringify(json, null, 2));

	var cookie = c.getHeaderField("Set-Cookie");

	if (cookie) {
		this.handleCookies(cookie);

		var sessionId = this.session.substring("JSESSIONID=".length);
		GPSystem.log(GPSystem.DEBUG, module.id, "PKI-API session id: " + sessionId);
		json.sessionId = sessionId;
	}

	return json;
}



function PKIAPIListFilter(key, value, op) {
	this.key = key;
	this.value = value;
	this.op = op
}
PKIAPIListFilter.constructor = PKIAPIListFilter;

exports.PKIAPIListFilter = PKIAPIListFilter;



PKIAPIListFilter.OP_LESS_THAN = "lt";
PKIAPIListFilter.OP_LESS_THAN_EQUAL = "lte";
PKIAPIListFilter.OP_EQUAL = "eq";
PKIAPIListFilter.OP_NOT_EQUAL = "ne";
PKIAPIListFilter.OP_GREATER_THAN = "gt";
PKIAPIListFilter.OP_GREATER_THAN_EQUAL = "gte";
PKIAPIListFilter.OP_LIKE = "like";



PKIAPIListFilter.prototype.getEncoded = function() {
	return this.key + "=" + this.op + ":" + this.value;
}



function PKIAPIListOrder(orderBy, asc) {
	this.orderBy = orderBy;
	this.asc = asc;
}
PKIAPIListOrder.constructor = PKIAPIListOrder;

exports.PKIAPIListOrder = PKIAPIListOrder;



PKIAPIListOrder.KEY_ORDER_BY = "sort_by";
PKIAPIListOrder.ORDER_ASC = "asc";
PKIAPIListOrder.ORDER_DESC = "desc";



PKIAPIListOrder.prototype.getEncoded = function() {
	var res = PKIAPIListOrder.KEY_ORDER_BY + "=" + this.orderBy + ":"
	if (this.asc) {
		res += PKIAPIListOrder.ORDER_ASC;
	} else {
		res += PKIAPIListOrder.ORDER_DESC;
	}
	return res;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A class that routes URLs to handlers
 */


/**
 * Create a router.
 *
 * @constructor
 */
function Router() {
	this.map = {};
}

exports.Router = Router;



/**
 * Add a route for an URL.
 *
 * The URL pattern may contain wildcards, start with ":". A wildcard decoded from the URL passed
 * into the route() function is added with the same name as element in req.router.params.
 *
 * @param {String} the name of the route, passed to the handler in req.router.name
 * @param {String} the URL pattern
 * @param {Object} the handler object with method handleRoutedRequest(req, res)
 */
Router.prototype.add = function(name, pattern, handler) {
	if (pattern.startsWith("/")) {
		pattern = pattern.substring(1);
	}

	if (pattern.endsWith("/")) {
		pattern = pattern.substring(0, pattern.length - 1);
	}

	var parts = pattern.split("/");

	var map = this.map;
	for (var i = 0; i < parts.length; i++) {
		var elem = parts[i];
		if (elem.startsWith(":")) {
			var varid = elem.substring(1);
			if (typeof(map.sub) != "undefined") {
				throw new GPError(module.id, GPError.INVALID_DATA, 0, "Redefinition of fixed resource as variable in " + pattern);
			}

			if ((typeof(map.wildcard) != "undefined") && (map.wildcard != varid)) {
				throw new GPError(module.id, GPError.INVALID_DATA, 0, "Redefinition of variable " + map.wildcard + " in " + pattern);
			}

			map.wildcard = elem.substring(1);
		} else {
			if (typeof(map.wildcard) != "undefined") {
				throw new GPError(module.id, GPError.INVALID_DATA, 0, "Redefinition of wildcard element " + elem + " in " + pattern);
			}

			if (typeof(map.sub) == "undefined") {
				map.sub = {};
			}

			var n = map.sub[elem];
			if (typeof(n) == "undefined") {
				var n = {};
				map.sub[elem] = n;
			}
			map = n;
		}

		if (i == parts.length - 1) {
			if (typeof(map.handler) != "undefined") {
				throw new GPError(module.id, GPError.INVALID_DATA, 0, "Duplicate path " + pattern);
			}
			map.handler = handler;
			map.name = name;
		} else if (typeof(map.nxt) == "undefined") {
			map.nxt = {};
		}
		map = map.nxt;
	}
}



/**
 * Route a URL to an registered handler.
 *
 * @param {HttpRequest} req the request object
 * @param {HttpResponse} req the response object
 */
Router.prototype.route = function(req, res) {
	var pathInfo = req.pathInfo;
	if (pathInfo.startsWith("/")) {
		pathInfo = pathInfo.substring(1);
	}

	if (pathInfo.endsWith("/")) {
		pathInfo = pathInfo.substring(0, pathInfo.length - 1);
	}

	var parts = pathInfo.split("/");

	var params = {};
	var map = this.map;
	for (var i = 0; i < parts.length; i++) {
		var elem = parts[i];
//		print("Routing part " + elem);
		if (map == undefined) {
			res.setStatus(HttpResponse.SC_NOT_FOUND);
			return;
		}
		if (map.wildcard) {
//			print("Add as parameter " + map.wildcard);
			params[map.wildcard] = elem;
		} else {
			map = map.sub[elem];
			if (map == undefined) {
				res.setStatus(HttpResponse.SC_NOT_FOUND);
				return;
			}
//			print("Traversing");
		}
		if (i < parts.length - 1) {
			map = map.nxt;
		}
	}

	if (map.handler == undefined) {
		res.setStatus(HttpResponse.SC_NOT_FOUND);
	} else {
		req.router = {
			name: map.name,
			params: params
		};
		map.handler.handleRoutedRequest(req, res);
	}
}



/**
 * Dump the internal routing map.
 */
Router.prototype.dump = function(obj, indent) {
	if (typeof(obj) == "undefined") {
		obj = this.map;
	}
	if (typeof(indent) == "undefined") {
		indent = "";
	}

	for (var i in obj) {
		var o = obj[i];

		if ((typeof(o) == "object") && (i != "handler")) {
			print(indent + i + ":" );
			this.dump(o, indent + " ");
		} else {
			print(indent + i + "=" + o);
		}
	}
}


/*
var HttpResponse = {
	SC_NOT_FOUND: 404
};


Router.test = function() {

	var handler = {
		handleRequest: function(req, res) {
			print("name: " + req.router.name);
			for (var i in req.router.params) {
				print(i + "=" + req.router.params[i]);
			}
		}
	};

	var res = {
		setStatus: function(sc) {
			print("sc: " + sc);
		}
	};

	var router = new Router();
	router.add("route0", "/keys/id/test/action", handler);
	router.add("route1", "/keys/id2/:id", handler);
	router.add("route2", "/keys/id2/:id/action", handler);
	router.add("route3", "/keys/id2/:id/action/:task", handler);
	router.dump();

	var req = { pathInfo: "/keys/id/test/action" };
	router.route(req, res);

	var req = { pathInfo: "/keys/id2/7" };
	router.route(req, res);

	var req = { pathInfo: "/keys/id2/2/action" };
	router.route(req, res);

	var req = { pathInfo: "/keys/id2/2/action/abc" };
	router.route(req, res);
}
*/
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2016 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Renderer for X509 certificates
 */

var File = require('scsh/file/File').File;

/**
 * A renderer which represents X509 certificates as HTML tables
 */
function X509CertificateRenderer() {

}
exports.X509CertificateRenderer = X509CertificateRenderer;

X509CertificateRenderer.SUBJECT_KEY_IDENTIFIER_OID = new ByteString("2.5.29.14", OID);
X509CertificateRenderer.KEY_USAGE_OID = new ByteString("2.5.29.15", OID);
X509CertificateRenderer.PRIVATE_KEY_USAGE_PERIOD_OID = new ByteString("2.5.29.16", OID);
X509CertificateRenderer.SUBJECT_ALTERNATIVE_NAME_OID = new ByteString("2.5.29.17", OID);
X509CertificateRenderer.ISSUER_ALTERNATIVE_NAME_OID = new ByteString("2.5.29.18", OID);
X509CertificateRenderer.BASIC_CONSTRAINTS_OID = new ByteString("2.5.29.19", OID);
X509CertificateRenderer.NAME_CONSTRAINTS_OID = new ByteString("2.5.29.30", OID);
X509CertificateRenderer.CRL_DISTRIBUTION_POINTS_OID = new ByteString("2.5.29.31", OID);
X509CertificateRenderer.CERTIFICATE_POLICIES = new ByteString("2.5.29.32", OID);
X509CertificateRenderer.POLICY_MAPPINGS_OID = new ByteString("2.5.29.33", OID);
X509CertificateRenderer.AUTHORITY_KEY_IDENTIFIER_OID = new ByteString("2.5.29.35", OID);
X509CertificateRenderer.POLICY_CONTRAINTS_OID = new ByteString("2.5.29.36", OID);
X509CertificateRenderer.EXT_KEY_USAGE_OID = new ByteString("2.5.29.37", OID);
X509CertificateRenderer.CA_INFORMATION_ACCESS_OID = new ByteString("1.3.6.1.5.5.7.1.1", OID);

X509CertificateRenderer.KEY_USAGE = ["digitalSignature", "nonRepudiation", "keyEncipherment", "dataEncipherment", "keyAgreement", "keyCertSign", "cRLSign", "encipherOnly", "decipherOnly"];
X509CertificateRenderer.KEY_USAGE.DIGITAL_SIGNATURE = 0x00;
X509CertificateRenderer.KEY_USAGE.NON_REPUDIATION = 0x01;
X509CertificateRenderer.KEY_USAGE.KEY_ENCIPHERMENT = 0x02;
X509CertificateRenderer.KEY_USAGE.DATA_ENCIPHERMENT= 0x03;
X509CertificateRenderer.KEY_USAGE.KEY_AGREEMENT= 0x04;
X509CertificateRenderer.KEY_USAGE.KEY_CERT_SIGN= 0x05;
X509CertificateRenderer.KEY_USAGE.CRL_SIGN= 0x06;
X509CertificateRenderer.KEY_USAGE.ENCIPHER_ONLY= 0x07;
X509CertificateRenderer.KEY_USAGE.DECIPHER_ONLY= 0x08;

X509CertificateRenderer.EXT_KEY_USAGE_SERVER_AUTHENTICATION_OID = new ByteString("1.3.6.1.5.5.7.3.1", OID);
X509CertificateRenderer.EXT_KEY_USAGE_CLIENT_AUTHENTICATION_OID = new ByteString("1.3.6.1.5.5.7.3.2", OID);
X509CertificateRenderer.EXT_KEY_USAGE_CODE_SIGNING_OID = new ByteString("1.3.6.1.5.5.7.3.3", OID);
X509CertificateRenderer.EXT_KEY_USAGE_EMAIL_OID = new ByteString("1.3.6.1.5.5.7.3.4", OID);
X509CertificateRenderer.EXT_KEY_USAGE_TIMESTAMPING_OID = new ByteString("1.3.6.1.5.5.7.3.8", OID);
X509CertificateRenderer.EXT_KEY_USAGE_OCSP_SIGNING_OID = new ByteString("1.3.6.1.5.5.7.3.9", OID);



/**
 * Render the certificate's extensions
 * and append it to the HTML table contained in
 * the given div element
 *
 * @param{X509} cert
 * @param{XML} div containing the HTML table representation of the certificate
 * @returns  a HTML div element containing the certificate representation
 * @type XML
 */
X509CertificateRenderer.prototype.renderExtensions = function (cert, div) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var native = cert.getNative();
	var critOIDs = native.getCriticalExtensionOIDs();
	var nonCritOIDs = native.getNonCriticalExtensionOIDs();

	div.appendChild(<h2>Critical Extensions</h2>);
	var critTable = <table class="content" style="word-wrap: break-word;"/>
	critTable.appendChild(
			<colgroup>
				<col width="20"/>
				<col width="80"/>
			</colgroup>);
	var critIterator = critOIDs.iterator();
	while (critIterator.hasNext()) {
		var oid = critIterator.next();
		var oidByteString = new ByteString(oid, OID);
		var r = this.createExtensionTableRow(oidByteString, cert);

		critTable.appendChild(r);
	}
	div.appendChild(critTable);


	div.appendChild(<h2>Non-Critical Extensions</h2>);
	var nonCritTable = <table class="content" style="word-wrap: break-word;"/>
	nonCritTable.appendChild(
			<colgroup>
				<col width="20"/>
				<col width="80"/>
			</colgroup>);
	var nonCritIterator = nonCritOIDs.iterator();
	while (nonCritIterator.hasNext()) {
		var oid = nonCritIterator.next();
		var oidByteString = new ByteString(oid, OID);
		var r = this.createExtensionTableRow(oidByteString, cert);

		nonCritTable.appendChild(r);
	}
	div.appendChild(nonCritTable);

	return div;
}



/**
 * Create a HTML table row containing the decoded name and value
 * for a specific certificate extension.
 *
 * @param{ByteString} oid the extension specified by the oid
 * @param{X509} cert
 * @returns  HTML table row
 * @type XML
 */
X509CertificateRenderer.prototype.createExtensionTableRow = function(oid, cert) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	if (oid.equals(X509CertificateRenderer.KEY_USAGE_OID)) {
		var value = this.createKeyUsageTable(cert);
	} else if (oid.equals(X509CertificateRenderer.EXT_KEY_USAGE_OID)) {
		var value = this.createExtendedKeyUsageTable(cert);
	} else if (oid.equals(X509CertificateRenderer.BASIC_CONSTRAINTS_OID)) {
		var value = this.createBasicConstraintsTable(cert);
	} else if (oid.equals(X509CertificateRenderer.CRL_DISTRIBUTION_POINTS_OID)) {
		var value = this.createCRLDistributionPointsTable(cert);
	} else if (oid.equals(X509CertificateRenderer.CA_INFORMATION_ACCESS_OID)) {
		var value = this.createAuthorityInformationAccessTable(cert);
	} else if (oid.equals(X509CertificateRenderer.CERTIFICATE_POLICIES)) {
		var value = this.createCertificatePoliciesTable(cert);
	} else if (oid.equals(X509CertificateRenderer.PRIVATE_KEY_USAGE_PERIOD_OID)) {
		var value = this.createPrivateKeyUsagePeriodTable(cert);
	} else {
		var native = cert.getNative();
		var value = native.getExtensionValue(oid.toString(OID));
	}

	var r =
		<tr>
			<th>{this.getExtensionName(oid)}</th>
			<td>{value}</td>
		</tr>;

	return r
}



/**
 * Get the corresponding extension name for a given OID
 *
 * @param{ByteString} oid the object identifier
 * @returns  the extension name
 * @type String
 */
X509CertificateRenderer.prototype.getExtensionName = function (oid) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	if (oid.equals(X509CertificateRenderer.SUBJECT_KEY_IDENTIFIER_OID)) {
		return "Subject Key Identifier";
	} else if (oid.equals(X509CertificateRenderer.KEY_USAGE_OID)) {
		return "Key Usage";
	} else if (oid.equals(X509CertificateRenderer.PRIVATE_KEY_USAGE_PERIOD_OID)) {
		return "Private Key Usage Period";
	} else if (oid.equals(X509CertificateRenderer.SUBJECT_ALTERNATIVE_NAME_OID)) {
		return "Subject Alternative Name";
	} else if (oid.equals(X509CertificateRenderer.ISSUER_ALTERNATIVE_NAME_OID)) {
		return "Issuer Alternative Name";
	} else if (oid.equals(X509CertificateRenderer.BASIC_CONSTRAINTS_OID)) {
		return "Basic Constraints";
	} else if (oid.equals(X509CertificateRenderer.NAME_CONSTRAINTS_OID)) {
		return "Name Constraints";
	} else if (oid.equals(X509CertificateRenderer.CRL_DISTRIBUTION_POINTS_OID)) {
		return "Certificate Revocation List Distribution Points";
	} else if (oid.equals(X509CertificateRenderer.POLICY_MAPPINGS_OID)) {
		return "Policy Mappings";
	} else if (oid.equals(X509CertificateRenderer.AUTHORITY_KEY_IDENTIFIER_OID)) {
		return "Authority Key Identifier";
	} else if (oid.equals(X509CertificateRenderer.POLICY_CONTRAINTS_OID)) {
		return "Policy Constraints";
	} else if (oid.equals(X509CertificateRenderer.CA_INFORMATION_ACCESS_OID)) {
		return "Certificate Authority Information Access";
	} else if (oid.equals(X509CertificateRenderer.CERTIFICATE_POLICIES)) {
		return "Certificate Policies";
	} else if (oid.equals(X509CertificateRenderer.EXT_KEY_USAGE_OID)) {
		return "Extended Key Usage";
	} else {
		return oid.toString(OID);
	}
}



/**
 * Create a HTML table which describes the key usage for the given certificate
 *
 * @param{X509} cert
 * @returns  HTML table describing the certificate's key usage
 * @type XML
 */
X509CertificateRenderer.prototype.createKeyUsageTable = function(cert) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var native = cert.getNative();

	/*
	 * KeyUsage ::= BIT STRING {
	 * 	digitalSignature        (0),
	 *      nonRepudiation          (1),
	 *      keyEncipherment         (2),
	 *      dataEncipherment        (3),
	 *      keyAgreement            (4),
	 *      keyCertSign             (5),
	 *      cRLSign                 (6),
	 *      encipherOnly            (7),
	 *      decipherOnly            (8) }
	 */
	var bitString = native.getKeyUsage();
	var t = <table/>
	for (var i = 0; i < bitString.length; i++) {
		if(bitString[i]) {
			t.appendChild(<tr><td>{X509CertificateRenderer.KEY_USAGE[i]}</td></tr>);
		}
	}
	return t;
}



/**
 * Create a HTML table which describes the extended key usage for the given certificate
 *
 * @param{X509} cert
 * @returns  HTML table describing the certificate's extended key usage
 * @type XML
 */
X509CertificateRenderer.prototype.createExtendedKeyUsageTable = function(cert) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var native = cert.getNative();

	var keyPurposeIDs = native.getExtendedKeyUsage(); // instance of Collections$UnmodifiableRandomAccessList
	var it = keyPurposeIDs.iterator();

	var t = <table/>
	while (it.hasNext()) {
		var keyPurposeID = it.next();

		var value = keyPurposeID;
		var oid = new ByteString(keyPurposeID, OID);
		if (oid.equals(X509CertificateRenderer.EXT_KEY_USAGE_SERVER_AUTHENTICATION_OID)) {
			value = "Server authentication";
		} else if (oid.equals(X509CertificateRenderer.EXT_KEY_USAGE_CLIENT_AUTHENTICATION_OID)) {
			value = "Client authentication";
		} else if (oid.equals(X509CertificateRenderer.EXT_KEY_USAGE_CODE_SIGNING_OID)) {
			value = "Code signing";
		} else if (oid.equals(X509CertificateRenderer.EXT_KEY_USAGE_EMAIL_OID)) {
			value = "Email";
		} else if (oid.equals(X509CertificateRenderer.EXT_KEY_USAGE_TIMESTAMPING_OID)) {
			value = "Timestamping";
		} else if (oid.equals(X509CertificateRenderer.EXT_KEY_USAGE_OCSP_SIGNING_OID)) {
			value = "OCSP signing";
		}

		t.appendChild(<tr><td>{value}</td></tr>);
	}

	return t;
}



/**
 * Create a HTML table which describes the Basic Constraints for the given certificate
 *
 * @param{X509} cert
 * @returns  HTML table describing the certificate's Basic Contstraints
 * @type XML
 */
X509CertificateRenderer.prototype.createBasicConstraintsTable = function(cert) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var native = cert.getNative();
	var pathLen = native.getBasicConstraints();
	var table = <table/>;
	if (pathLen >= 0) {
		table.appendChild(<tr><td>is CA certificate</td></tr>);
		table.appendChild(<tr><td>Path Length Constraint {pathLen}</td></tr>);
	} else {
		table.appendChild(<tr><td>is not CA certificate</td></tr>);
	}
	return table;
}



/**
 * Create a HTML table which describes the Certificate Authority Information Access for the given certificate
 *
 * @param{X509} cert
 * @returns  HTML table describing the certificate's Certificate Authority Information Access
 * @type XML
 */
X509CertificateRenderer.prototype.createAuthorityInformationAccessTable = function(cert) {
	var native = cert.getNative();

	var table = <table/>

	var value = native.getExtensionValue(X509CertificateRenderer.CA_INFORMATION_ACCESS_OID.toString(OID));
	var octetString = new ASN1(value);
	var list = new ASN1(octetString.value);
	for (var i = 0; i < list.elements; i++) {
		var accessDescription = list.get(i);
		var accessMethod = accessDescription.get(0);
		table.appendChild(<tr><td>OID {accessMethod.value.toString(OID)}</td></tr>);

		var accessLocation = accessDescription.get(1);
		table = this.appendGeneralNames(accessLocation, table);
	}

	return table;
}



/**
 * Decode ASN1 GeneralNames type and append it on the given table
 */
X509CertificateRenderer.prototype.appendGeneralNames = function(asn, table) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	if (asn.tagnumber == 4) {
		var nameSeq = new ASN1(asn.value);
		var commonName = nameSeq.get(0).get(0).get(1);
		var organizationName = nameSeq.get(1).get(0).get(1);
		var countryName = nameSeq.get(2).get(0).get(1);
		table.appendChild(<tr><td>Common Name</td><td>{commonName.value.toString(ASCII)}</td></tr>);
		table.appendChild(<tr><td>Organization Name</td><td>{organizationName.value.toString(ASCII)}</td></tr>);
		table.appendChild(<tr><td>Country Name</td><td>{countryName.value.toString(ASCII)}</td></tr>);
	} else if (asn.tagnumber == 6) {
		var uri = asn.value;
		table.appendChild(<tr><td>Uniform Resouce Identifier</td><td>{uri.toString(ASCII)}</td></tr>);
	}
	return table;
}



/**
 * Create a HTML table which describes the CRL Distribution Points for the given certificate
 *
 * @param{X509} cert
 * @returns  HTML table describing the certificate's CRL Distribution Points
 * @type XML
 */
X509CertificateRenderer.prototype.createCRLDistributionPointsTable = function(cert) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var native = cert.getNative();
	var value = native.getExtensionValue(X509CertificateRenderer.CRL_DISTRIBUTION_POINTS_OID.toString(OID));
	var points = new ASN1(value);
	var list = new ASN1(points.value);

	var distPoint = list.get(0);
	var seq = new ASN1(distPoint.value);
	seq = distPoint;

	var table = <table/>

	for (var i = 0; i < seq.elements; i++) {
		var element = seq.get(i);
		if (element.tag == 0xA0) { // distributionPoint DistributionPointName
			var name = element.get(0);
			if (name.tag == 0xA0) { // fullName GeneralNames
				var obj = new ASN1(name.value);
				table = this.appendGeneralNames(obj, table);
			} else if (name.tag == 0xA1) { // nameRelativeToCRLIssuer RelativeDistinguishedName

			}
		} else if (element.tagnumber == 1) { // reasons ReasonFlags

		} else if (element.tagnumber == 2) { // cRLIssuer GeneralNames
			var issuer = new ASN1(element.value);
			if (issuer.tagnumber == 4) {
				table = this.appendGeneralNames(issuer, table);
			}
		}
	}

	return table;
}



/**
 * Create a HTML table which describes the Certificate Policies for the given certificate
 *
 * @param{X509} cert
 * @returns  HTML table describing the certificate's Certificate Policies
 * @type XML
 */
X509CertificateRenderer.prototype.createCertificatePoliciesTable = function(cert) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var t = <table/>

	var native = cert.getNative();
	var value = native.getExtensionValue(X509CertificateRenderer.CERTIFICATE_POLICIES.toString(OID));
	var octetString = new ASN1(value);
	var certificatePolicies = new ASN1(octetString.value); // sequence of 1 to n PolicyInformation
	for (var i = 0; i < certificatePolicies.elements; i++) {
		var policyInformation = certificatePolicies.get(i);
		var policyIdentifier = policyInformation.get(0); // CertPolicyId

		var piTable = <table/>;
		piTable.appendChild(<tr><td>Policy Identifier</td><td>{policyIdentifier}</td></tr>);
		if (policyInformation.elements > 1) {
			var policyQualifiers = policyInformation.get(1).getBytes();
			piTable.appendChild(<tr><td>Policy Qualifiers</td><td>{policyQualifiers}</td></tr>);
		}
		t.appendChild(piTable);
	}

	return t;
}



/**
 * Create a HTML table which describes the key usage for the given certificate
 *
 * @param{X509} cert
 * @returns  HTML table describing the certificate's key usage
 * @type XML
 */
X509CertificateRenderer.prototype.createPrivateKeyUsagePeriodTable = function(cert) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var native = cert.getNative();
	var value = native.getExtensionValue(X509CertificateRenderer.PRIVATE_KEY_USAGE_PERIOD_OID.toString(OID));

	var octetString = new ASN1(value);
	var period = new ASN1(octetString.value);

	var t = <table/>

	for (var i = 0; i < period.elements; i++) {
		var date = period.get(i);
		if (date.tagnumber == 0x00) {
			t.appendChild(<tr><td>Not Before</td><td>{date.value.toString(ASCII)}</td></tr>);
		} else if (date.tagnumber == 0x01) {
			t.appendChild(<tr><td>Not After</td><td>{date.value.toString(ASCII)}</td></tr>);
		}
	}

	return t;
}



/**
 * Render a X509 certificate as HTML table
 *
 * @param{X509} cert
 * @returns  a html div element containing the certificate representation
 * @type XML
 */
X509CertificateRenderer.prototype.render = function(cert) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	var native = cert.getNative();

	var version = native.getVersion();
	var serial = cert.getSerialNumberString();
	var notBefore = cert.getNotBefore();
	var notAfter = cert.getNotAfter();
	var issuer = cert.getIssuerDNString();
	var subject = cert.getSubjectDNString();

	var sigAlg = native.getSigAlgName();
	var sig = native.getSignature();

	var t =
		<table class="content" style="word-wrap: break-word;">
			<colgroup>
				<col width="20"/>
				<col width="80"/>
			</colgroup>
			<tr>
				<th>Version</th>
				<td>{version}</td>
			</tr>
			<tr>
				<th>Serial</th>
				<td>{serial}</td>
			</tr>
			<tr>
				<th>Not Before</th>
				<td>{notBefore}</td>
			</tr>
			<tr>
				<th>Not After</th>
				<td>{notAfter}</td>
			</tr>
			<tr>
				<th>Issuer Distinguished Name</th>
				<td>{issuer}</td>
			</tr>
			<tr>
				<th>Subject Distinguished Name</th>
				<td>{subject}</td>
			</tr>
			<tr>
				<th>Signature Algorithm</th>
				<td>{sigAlg}</td>
			</tr>
			<tr>
				<th>Signature</th>
				<td>{sig}</td>
			</tr>
			<tr>
				<th>Public Key</th>
				<td>{this.getPublicKeyInfo(cert)}</td>
			</tr>
		</table>;

	var div = <div id="x509"></div>;
	div.appendChild(<h2>Basic Certificate Fields</h2>);
	div.appendChild(t);

	div = this.renderExtensions(cert, div);

	return div;
}



/**
 * Get a short textual representation of the certificate's public key
 *
 * @param{X509} cert
 * @returns
 * @type String
 */
X509CertificateRenderer.prototype.getPublicKeyInfo = function (cert) {
	//return cert.getNative().getPublicKey().toString();	// in case of ECC keys: only public key qx and qy parameters
	return cert.getNative().getPublicKey().getEncoded();	// binary encoded key
}



/**
 * Create a HTML table with a detailed public key representation for the given certificate
 *
 * @param{X509} cert
 * @returns  HTML table containing the public
 * @type XML
 */
X509CertificateRenderer.prototype.createPublicKeyDetailsTable = function (cert) {
	default xml namespace = "http://www.w3.org/1999/xhtml";
	var table = <table/>
	var key = cert.getPublicKey();
	var size = key.getSize();

	var modulus = key.getComponent(Key.MODULUS);
	if (typeof(modulus) != "undefined") {
		var modulus = modulus.toString(HEX);
		var exp = key.getComponent(Key.EXPONENT).toString(HEX);
		var table =
			<table word-break="break-all" word-wrap="break-word" max-width="32px">
				<tr>
					<td>Key Size</td>
					<td>{size}</td>
				</tr>
				<tr>
					<td>RSA Modulus</td>
					<td word-break="break-all" word-wrap="break-word" max-width="32px">{modulus}</td>
				</tr>
				<tr>
					<td>Public Exponent</td>
					<td>{exp}</td>
				</tr>
			</table>;
	} else {
		// curve parameter
		var fp = key.getComponent(Key.ECC_P);
		var ecca = key.getComponent(Key.ECC_A);
		var eccb = key.getComponent(Key.ECC_B);
		var gx = key.getComponent(Key.ECC_GX);
		var gy = key.getComponent(Key.ECC_GY);
		var eccn = key.getComponent(Key.ECC_N);
		var ecch = key.getComponent(Key.ECC_H);

		// public key
		var qx = key.getComponent(Key.ECC_QX).toString(HEX);
		var qy = key.getComponent(Key.ECC_QY).toString(HEX);

		var table =
			<table>
				<tr>
					<td>Key Size</td>
					<td>{size}</td>
				</tr>
				<tr>
					<td>Curve Fp</td>
					<td>{fp}</td>
				</tr>
				<tr>
					<td>Curve A</td>
					<td>{ecca}</td>
				</tr>
				<tr>
					<td>Curve B</td>
					<td>{eccb}</td>
				</tr>
				<tr>
					<td>Curve Parameter Gx</td>
					<td>{gx}</td>
				</tr>
				<tr>
					<td>Curve Parameter Gy</td>
					<td>{gy}</td>
				</tr>
				<tr>
					<td>Curve Parameter N</td>
					<td>{eccn}</td>
				</tr>
				<tr>
					<td>Curve Parameter H</td>
					<td>{ecch}</td>
				</tr>
				<tr>
					<td>Public Key Qx</td>
					<td>{qx}</td>
				</tr>
				<tr>
					<td>Public Key Qy</td>
					<td>{qy}</td>
				</tr>
			</table>;
	}

	return table;
}



X509CertificateRenderer.prototype.test = function() {
	default xml namespace = "http://www.w3.org/1999/xhtml";
	bs = new ByteString("\
	MIIGGzCCBAOgAwIBAgIRAS31fRUU00bNe4A4sqZ44wQwDQYJKoZIhvcNAQEFBQAw \
	VDESMBAGA1UEAwwJUm9vdC1DQSAxMTEwLwYDVQQKDChURVNUIC0gSGF1cHR2ZXJi \
	YW5kIMO2c3RlcnIuIFNvemlhbHZlcnMuMQswCQYDVQQGEwJBVDAeFw0wNTA2MjMx \
	NzI3MDJaFw0zMDA2MjMxNzI3MDJaMFYxFDASBgNVBAMMC1N5c3RlbSBDQSAxMTEw \
	LwYDVQQKDChURVNUIC0gSGF1cHR2ZXJiYW5kIMO2c3RlcnIuIFNvemlhbHZlcnMu \
	MQswCQYDVQQGEwJBVDCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKWL \
	/7+RLD7eqAiqbFtN/3sWgw5nfA3G6vYcVvV4CzXFlzJVk6xtiu/sYlSQK18tbyF4 \
	7DfNuHANV24lutFOoGLuhJkSWbqONcNvplD7a+XIniAdSgSBxcJnXvZ4xJ+Bd5TH \
	U4CXvcqDGpEaEAgnhpiVPoBMHK/r1eMrLsb9+HryCKBrC0dzVPPKX+HAz2wj757x \
	KdlrBva7dFz5pbDDZmifmTko4fj4DQS5quu4MVq2vs1D9km2BZXCgU5Fo6OWoL0a \
	U3B4amLzNA981E2niLovz+18DB340/PlgctE6FaM8XQv9Omoe/nUqImM/J+T8uIp \
	kFCy+1cuhXGRpqRnHvEq88COsvDFI6vKfwd9Duko+IjUzpq3MIa2bXURBU3kDD79 \
	sl1i1uy9Sx6YtwTZBoPIQZP+7WjlZnT4nBpJl2r0qKFKJH3nBJVntlzlSna1gc4u \
	HZBkvrfDnLG/RGGBsiqkzdx0myM8mON/veLbY5Nd+SUBm1bWAw0BSbz+3jBtHQID \
	AQABo4IBZDCCAWAwEwYDVR0jBAwwCoAIRtDR1WyRFs4wEQYDVR0OBAoECEvRRLys \
	X0iFMA4GA1UdDwEB/wQEAwICBDAxBggrBgEFBQcBAQQlMCMwIQYIKwYBBQUHMAGG \
	FWh0dHA6Ly8xNDkuMjM5LjE2LjIwOTCB3gYDVR0fBIHWMIHTMIHQoHOgcYZvbGRh \
	cDovLzE0OS4yMzkuMTYuMjA5L289VEVTVCUyMC0lMjBIYXVwdHZlcmJhbmQlMjAl \
	ZjZzdGVyci4lMjBTb3ppYWx2ZXJzLixjPUFUP2NlcnRpZmljYXRlUmV2b2NhdGlv \
	bkxpc3Q7YmluYXJ5olmkVzBVMRMwEQYDVQQDDApDUkwtU2lnbmVyMTEwLwYDVQQK \
	DChURVNUIC0gSGF1cHR2ZXJiYW5kIMO2c3RlcnIuIFNvemlhbHZlcnMuMQswCQYD \
	VQQGEwJBVDASBgNVHRMBAf8ECDAGAQH/AgEAMA0GCSqGSIb3DQEBBQUAA4ICAQAY \
	P81wkoVpuE6Dtg72snt2KnwURfI1KAD+WgDBKLcSUD+uO2ks7CpRWaqD5WW47lQD \
	KsGwLyRmwEfmNBPh15TMYkTvynUwD3WBaPPr59Hy7QrUcdRU511my0CnS3W+2L4a \
	oLCuyRvlozuIhBHCfSKsYFZwHrT90J+B9NFnlWCGsxg0xsKpatcXsrMOQTlX3dOl \
	5pu9KEoKlryZArD7UDBqMAqKQ9srx1a23AJKREFyJ6a4aW/voZvpoHMsQQPbm8xb \
	vQPZaUUqY7R9g/9ZgVdeDrjEJU8qtptSL1ixVbvmpKM0g+G4tda83VfVY5qeto6E \
	QLmst4yNA/uv5MxCtEu/DthxUScGkY1erV6LMb97u4m4mx87SxKPBhCdZx76BEgU \
	t0bLFAlG63h1bZ3UFcoDR3PSjF1QwUPO6DroCMVpUYRGnli123KQ63lKCOxQqwl+ \
	te7x3uEWKgN8FwUKCLYGnBIiBA2c7igRiyKaOon+43kYt+GAyBvOdH1n/EjHQVHE \
	h3xwWNCsiAn6XFjlL61i0r5dshBl+rWWyUbNpHXqHuPnm8Zn37DXwmvxU9qdc0TA \
	Y8M0uMYAw1rkDoo2zGb2nxAbmmp7L8J2cFE/6TJ6R7gdxY/0uwaIdRHBr844kscO \
	i0dKmGsaCPxCVq5venNSatNMEvOgyEloLGqoq3S+xQ==", BASE64);

	ca = new X509(bs);
	var t = this.render(ca);
	print(t);

	var page =
		<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" >
			<head>
				<title>X509 Certificate Renderer</title>
			</head>
			<body/>
		</html>;

	page.body.appendChild(t);

	var cwd = GPSystem.mapFilename("", GPSystem.CWD);
	var file = new File(cwd + "/" + "test_table.html");
	file.writeAll(page.toXMLString());
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Test runner framework
 */

var TestGroup = require("scsh/testing/TestGroup").TestGroup;
var TestProcedure = require("scsh/testing/TestProcedure").TestProcedure;
var TestReport = require("scsh/testing/TestReport").TestReport;
var TestResult = require("scsh/testing/TestResult").TestResult;



/**
 * Create a test runner
 *
 * @class Class implementing a test runner
 * @constructor
 * @param {String} name the test suite name
 */
function TestRunner(name) {

	this.name = name;
	this.testGroupRunners = new Array();
	this.testProcedures = new Array();
	this.testMapper = new Array();
	this.testGroupPrototype = new TestGroup();
	this.testProcedurePrototype = new TestProcedure();
	this.testReport = new TestReport();
}

exports.TestRunner = TestRunner;



/**
 * Add a test group to the test runner
 *
 * <p>This call will iterate through all test cases and locate used procedures and steps.</p>
 *
 * @param {TestGroup} testGroup the test group object
 */
TestRunner.prototype.addTestGroup = function(testGroup) {
	var tgrs = this.testGroupRunners;

	tgr = new TestGroupRunner(this, testGroup);

	tgrs.push(tgr);
}



/**
 * Create test group from XML file and add to test runner
 *
 * @param {String} file the file name containing the test group
 * @param {Object} parameter the parameter object
 */
TestRunner.prototype.addTestGroupFromXML = function (file, parameter) {
	// Parse XML file.
	var parser = new GPXML();
	parser.defineArrayElement("/testgroup", "testcase,function", "id,Name");
	parser.defineArrayElement("/testgroup/testcase/procedures", "procedure");
	var xml = parser.parse(file);

	// Determine CTOR function
	var ctor = xml.constructor.Script;
	if (!ctor) {
		// Use a default constructor unless defined in XML profile
		ctor = function(name, parameter) { TestGroup.call(this, name, parameter); };
	}

	// Make CTOR available in scope object
	// this[xml.id] = ctor;

	// Set correct prototype object
	ctor.prototype = new TestGroup();
	ctor.prototype.constructor = ctor;
	ctor.prototype.usedProcedures = new Array();

	// Add test cases to prototype object
	var testcases = xml.testcase;
	for (var i in testcases) {
		if (i != "arrayIndex") {
			if (parseInt(i) + "" == i) {
				print("Attribute id must be a string, but is a number (" + i + " in " + file + ")");
				print("Due to automatic string to number conversion in JavaScript, the test case");
				print("can not be properly deserialized as object map. Numeric id are deserialized");
				print("as a array indices. Please change the id to a string, e.g. by prefixing with a 0.");
				throw new Error("TestCase id parsing error");
			}

			var s = testcases[i].Script;
			s.XML = testcases[i];
			ctor.prototype["case" + i] = s;
			if (testcases[i].procedures) {
				var procedures = testcases[i].procedures.procedure;
				ctor.prototype.usedProcedures[i] = new Array();

				for (var p = 0; p < procedures.length; p++) {
					ctor.prototype.usedProcedures[i].push(procedures[p].id);
				}
			}
		}
	}

	// Add setup function to prototype object
	if (xml.setup) {
		ctor.prototype["setUp"] = xml.setup.Script;
	}

	// Add teardown function to prototype object
	if (xml.teardown) {
		ctor.prototype["tearDown"] = xml.teardown.Script;
	}

	// Add functions to prototype object
	var functions = xml["function"];
	for (var i in functions) {
		if (i != "arrayIndex") {
			var s = functions[i].Script;
			ctor.prototype[i] = s;
		}
	}

	ctor.XML = xml;

	var tc = new ctor(xml.id, parameter);

	this.addTestGroup(tc);
}



/**
 * Add a test procedure constructor to the list
 *
 * <p>Use the getName() method to obtain the test procedure name</p>
 *
 * @param {TestProcedure} proc the test procedure object
 */
TestRunner.prototype.addTestProcedure = function(proc) {
	var name = proc.getName();
	if (name) {
		this.testProcedures[name] = proc;
	}
}



/**
 * Create test procedure from XML file and add to test runner
 *
 * @param {String} file the file name containing the test procedure
 * @param {Object} parameter the parameter object
 */
TestRunner.prototype.addTestProcedureFromXML = function (file, parameter) {
	// Parse XML file.
	var parser = new GPXML();
	parser.defineArrayElement("/testprocedure", "teststep,function", "id,Name");
	var xml = parser.parse(file);

	// Determine CTOR function
	var ctor = xml.constructor.Script;
	if (!ctor) {
		// Use a default constructor unless defined in XML profile
		ctor = function(testgroup, name, parameter) { TestProcedure.call(this, testgroup, name, parameter); };
	}

	// Make CTOR available in scope object
	// this[xml.id] = ctor;

	// Set correct prototype object
	ctor.prototype = new TestProcedure();
	ctor.prototype.constructor = ctor;
	var teststeps = xml.teststep;
	for (var i in teststeps) {
		if (i != "arrayIndex") {
			var s = teststeps[i].Script;
			ctor.prototype["step" + i] = s;
		}
	}
	if (xml.setup) {
		ctor.prototype["setUp"] = xml.setup.Script;
	}
	if (xml.teardown) {
		ctor.prototype["tearDown"] = xml.teardown.Script;
	}

	// Add functions to prototype object
	var functions = xml["function"];
	for (var i in functions) {
		if (i != "arrayIndex") {
			var s = functions[i].Script;
			ctor.prototype[i] = s;
		}
	}

	ctor.XML = xml;
	ctor.getName = function() { return xml.id; };

	this.testProcedures[xml.id] = ctor;
}



/**
 * Return constructor of test procedure
 *
 * @param {String} name the name of the test procedure
 * @type TestProcedure
 * @return the test procedure object
 */
TestRunner.prototype.getTestProcedure = function(name) {
	return this.testProcedures[name];
}



//
// Return number of failed tests
//
TestRunner.prototype.getFailedCounter = function() {
	return this.failedCounter;
}



//
// Return log of last test run
//
TestRunner.prototype.getLog = function() {
	return this.log;
}



/**
 * Add test to test mapper, which maps test unique id to listening object
 *
 * @param {String} name the unique test name
 * @param {Object} listener the listener object implementing the clearResults(), enable(), isEnabled(), hasPassed() and hasFailed() methods
 */
TestRunner.prototype.addTest = function(name, listener) {
	this.testMapper[name] = listener;
}



//
// Run all test groups
//
TestRunner.prototype.run = function() {
	this.failedCounter = 0;
	this.log = "";
	for (var i = 0; i < this.testGroupRunners.length; i++) {
		var testGroupRunner = this.testGroupRunners[i];
		testGroupRunner.run();
	}
}



/**
 * Enable or disable test
 *
 * @param {String} name the unique test name
 * @param {Boolean} state the enable / disable state
 */
TestRunner.prototype.enable = function(name, state) {
	var listener = this.testMapper[name];
	if (listener && listener.enable) {
		return listener.enable(state);
	} else {
		throw new GPError("TestRunner", GPError.OBJECT_NOT_FOUND, 0, name);
	}
}



/**
 * isEnabled query from TestGroup runner
 *
 * @param {String} name the unique test name
 * @type boolean
 * @return true if the test is enabled
 */
TestRunner.prototype.isEnabled = function(name) {
	var listener = this.testMapper[name];
	if (listener && listener.isEnabled) {
		return listener.isEnabled();
	}
	return true;
}



/**
 * hasPassed Listener
 *
 * @param {String} name the unique test name
 * @param {String} log the test log
 */
TestRunner.prototype.hasPassed = function(name, log) {
//	print("hasPassed(" + name + ")");
	if (log) {
		this.log += log;
	}
	var listener = this.testMapper[name];
	if (listener && listener.hasPassed) {
		listener.hasPassed(log);

		if (listener.getXML) {
			var result = new TestResult(name, true, log, listener.getXML());
			this.testReport.addResult(result);
		}
	} else {
		print("No receiver for passed notification : " + name);
//		for (var i in this.testMapper) {
//			print("- " + i);
//		}
	}
}



/**
 * hasFailed Listener
 *
 * @param {String} name the unique test name
 * @param {String} log the test log
 */
TestRunner.prototype.hasFailed = function(name, log) {
//	print("hasFailed(" + name + ")");
	if (log) {
		this.log += log;
	}
	var listener = this.testMapper[name];
	if (listener && listener.hasFailed) {
		listener.hasFailed(log);

		if (listener.getXML) {
			var result = new TestResult(name, false, log, listener.getXML());
			this.testReport.addResult(result);
		}
		this.failedCounter++;
	}
}



/**
 * Write test report
 */
TestRunner.prototype.report = function(fn) {
	this.testReport.writeReport(fn);
	print("Report written to " + fn);
}



/**
 * Create a TestGroupRunner containing the TestCases
 *
 * @class Class implementing a harness to run test groups
 * @constructor
 * @param {TestRunner} testRunner the associated test runner
 * @param {TestGroup= testGroup the test group
 */
function TestGroupRunner(testRunner, testGroup) {
	this.testRunner = testRunner;
	this.testGroup = testGroup;

	var testcases = testGroup.getTestCaseNames();

	for (var i = 0; i < testcases.length; i++) {
		var tcr = new TestCaseRunner(this, testcases[i]);
	}
}



//
// run this test group
//
TestGroupRunner.prototype.run = function() {
	var test = this.testGroup;

	test.run(this.testRunner);
}




// ---------------------------------------
// Constructor for a TestCaseRunner object
//
function TestCaseRunner(testGroupRunner, testCase) {
	this.testGroupRunner = testGroupRunner;
	this.testCase = testCase;
	this.selected = true;

	var testRunner = testGroupRunner.testRunner;
	testRunner.addTest(testGroupRunner.testGroup.getName() + "/" + testCase, this);

	this.xml = testGroupRunner.testGroup.getTestCase(testCase).XML;

	var testGroup = testGroupRunner.testGroup;

	var testprocedures = testGroup.getUsedTestProceduresForTestCase(testCase);

	if (testprocedures) {
		for (var i = 0; i < testprocedures.length; i++) {
			var tpr = new TestProcedureRunner(this, testprocedures[i]);
		}
	}
}



//
// Run this test case
//
TestCaseRunner.prototype.run = function() {
	var test = this.testGroupRunner.testGroup;

	test.runTestCase(this.testCase, this.testGroupRunner.testRunner);
}



//
// Tell test runner if case is enabled
//
TestCaseRunner.prototype.isEnabled = function() {
	return this.selected;
}



//
// Add a log entry to the test case node
//
TestCaseRunner.prototype.addLog = function(log) {
}



//
// Get log for the test case node
//
TestCaseRunner.prototype.getLog = function() {
	return this.log;
}



/**
 * Return describing XML element
 *
 * @type Object
 * @return the XML element for this test case
 */
TestCaseRunner.prototype.getXML = function() {
	return this.xml;
}



//
// Listener for passed notifications
//
TestCaseRunner.prototype.hasPassed = function(log) {
	this.failed = false;
	this.addLog(log);
}



//
// Listener for failed notifications
//
TestCaseRunner.prototype.hasFailed = function(log) {
	this.failed = true;
	this.addLog(log);
}



//
// Clear result of test
//
TestCaseRunner.prototype.clearResult = function() {
	this.failed = false;
}




//
// Enable or disable test
//
TestCaseRunner.prototype.enable = function(state) {
	this.selected = state;
}




// --------------------------------------------
// Constructor for a TestProcedureRunner object
//
function TestProcedureRunner(testCaseRunner, testProcedure) {
	this.testCaseRunner = testCaseRunner;
	this.testProcedure = testProcedure;

	var tp = this.testCaseRunner.testGroupRunner.testRunner.testProcedures[testProcedure];

	if (tp) {
		var list = new Array();
		for (var i in tp.prototype) {
			if (i.substr(0, 4) == "step") {
				var step = i.substr(4);
				list.push(step);
			}
		}

		list.sort();

		for (var i = 0; i < list.length; i++) {
			var tpsr = new TestStepRunner(this, list[i]);
		}
	} else {
		print("No test procedure implementation found for " + testProcedure);
	}
}




// ---------------------------------------
// Constructor for a TestStepRunner object
//
function TestStepRunner(testProcedureRunner, testStep) {
	this.testProcedureRunner = testProcedureRunner;
	this.testStep = testStep;

	var testCaseRunner = testProcedureRunner.testCaseRunner;
	var testGroupRunner = testCaseRunner.testGroupRunner;
	var testRunner = testGroupRunner.testRunner;
	var testName = testGroupRunner.testGroup.getName() + "/" +
	               testCaseRunner.testCase + "/" +
	               testProcedureRunner.testProcedure + "/" +
	               testStep;

	testRunner.addTest(testName, this);
}



//
// Receive passed notifications
//
TestStepRunner.prototype.hasPassed = function() {
}



//
// Clear test result display
//
TestStepRunner.prototype.clearResult = function() {
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Core elements of a test group containing individual test cases
 */



/**
 * Create a test group object containing test cases.
 *
 * @class
 * <p>Abstract base class implementing a group of test cases.</p>
 * <p>Actual test group objects are derived from this base class.</p>
 * <p>Each test case is created as a method of this object.</p>
 * @constructor
 * @param {String} name the name of the test group
 * @param {Object} parameter the parameter object for this group of tests
 */
function TestGroup(name, parameter) {

	this.name = name;
	this.parameter = parameter;
//	this.logfile = new String("--- TestGroup " + name + "\n");
	this.marker = null;

//	print("TestGroup constructor called");
}

exports.TestGroup = TestGroup;



/**
 * Log a text message.
 *
 * @param {String} message the message to add to the log
 */
TestGroup.prototype.log = function(message) {
	GPSystem.trace(message);
//	this.logfile += message + "\n";
//	print(message);
}



/**
 * Setup method called before invoking each individual test case.
 */
TestGroup.prototype.setUp = function() {
//	this.log("TestGroup.setUp() called");
}



/**
 * Teardown method called after invocation of a test case.
 */
TestGroup.prototype.tearDown = function() {
//	this.log("TestGroup.tearDown() called");
}



/**
 * Verify that the given assertion evaluates to true. Throw an exception if result is false.
 *
 * @param {Boolean} result true if assertion is valid
 * @param {String} message the message to log in case result is false
 */
TestGroup.prototype.assertTrue = function(result, message) {
	if (!result) {
		if (this.marker) {
			throw new GPError(module.id, GPError.INVALID_USAGE, 0, "Assertion failed for [" + this.marker + "]: " + message);
		} else {
			throw new GPError(module.id, GPError.INVALID_USAGE, 0, "Assertion failed: " + message);
		}
	}
}



/**
 * Verify that the given values are equal. Throw an exception if not.
 *
 * @param {Any} first the first argument
 * @param {Any} second the second argument
 * @param {String} message the message to log in case result is false
 */
TestGroup.prototype.assertEquals = function(first, second, message) {
	if (first != second) {
		if (this.marker) {
			throw new GPError(module.id, GPError.INVALID_USAGE, 0, "Assertion failed for [" + this.marker + "]: " + message);
		} else {
			throw new GPError(module.id, GPError.INVALID_USAGE, 0, "Assertion failed: " + message);
		}
	}
}



/**
 * Sets a marker used to identify a context in which an assertion failed.
 *
 * <p>A context can be a certain iteration
 * or group of assertions. A marker allows to further identify the area of a problem.</p>
 *
 * @param {String} marker the marker to set
 */
TestGroup.prototype.setMarker = function(marker) {
	this.marker = marker;
}



/**
 * Returns the name of test group.
 *
 * @type String
 * @return the name of the test group
 */
TestGroup.prototype.getName = function() {
		return this.name;
}



/**
 * Returns a list of tests as sorted array of test case names.
 *
 * @type String[]
 * @return the sorted array of test case names
 */
TestGroup.prototype.getTestCaseNames = function() {
	var tests = new Array();

	for (f in this) {
		if (f.substr(0, 4) == "case") {
			if (this[f] instanceof Function) {
				tests.push(f.substr(4));
			}
		}
	}

	tests.sort();
	return tests;
}



/**
 * Returns a specific test case function.
 *
 * @param {String} name the test case name
 * @type Function
 * @return the test case method
 */
TestGroup.prototype.getTestCase = function(name) {
	return this["case" + name];
}



/**
 * Returns a list of test procedure names referenced by a test case.
 *
 * @param {String} test case name
 * @type String[]
 * @return a list of test procedure names or undefined
 */
TestGroup.prototype.getUsedTestProceduresForTestCase = function(name) {
	if (this.constructor.prototype.usedProcedures) {
		return this.constructor.prototype.usedProcedures[name];
	} else {
		return undefined;
	}
}



/**
 * Run a named test procedure.
 *
 * <p>This method is called by code in a test case to run a test procedure.</p>
 * <p>This method uses the test runner to create a new instance of the test procedure object.
 * All test steps in the procedure are executed and the test procedure object is returned to
 * the caller for further processing of test results.</p>
 *
 * @param {String} name the test procedure name
 * @param {Object} param the parameter object to pass to the execution of the test procedure
 * @type TestProcedure
 * @return the test procedure object
 */
TestGroup.prototype.runTestProcedure = function(name, param) {
	if (!this.testRunner) {
		throw new GPError("TestGroup", GPError.INVALID_USAGE, 0, "No test runner defined");
	}
	var proc = this.testRunner.getTestProcedure(name);
	var test = new proc(name, this, param);
	test.run();

	return test;
}



/**
 * Report progress of passed steps in a test procedure to the test runner. This method is used internally.
 *
 * @private
 * @param {String} procedure the procedure name
 * @param {String} step the step name
 */
TestGroup.prototype.reportProgress = function(procedure, step) {
	if (this.testRunner) {
		var runner = this.testRunner;
		var uniqueName = this.currentTestCase + "/" + procedure + "/" + step;
		runner.hasPassed(uniqueName, null);
	}
}



/**
 * Initialize a test run. This method is used internally.
 * @private
 */
TestGroup.prototype.initTestRun = function() {
	this.marker = null;
}



/**
 * Run a single test case. This method is called internally. Use {@link #runTestCase} for running a single test case.
 *
 * @private
 * @type boolean
 * @return true if test passed
 */
TestGroup.prototype.runTestCaseInternal = function(casename, runner) {
	var result = false;
	this.currentTestCase = this.name + "/" + casename;
	this.testRunner = runner;

//	this.logfile = "";

	var starttime = new Date();
	GPSystem.markTrace();
	logentry = "+ TestCase " + this.currentTestCase + " started " + starttime;
	print(logentry);
	this.log(logentry);
	try {
		this.setUp();
		var func = this.getTestCase(casename);
		func.call(this);
		this.tearDown();
		var endtime = new Date();
		logentry = "+ TestCase " + this.currentTestCase + " completed on " + endtime + " after " + (endtime.valueOf() - starttime.valueOf()) + " ms";
		print(logentry);
		this.log(logentry);
		if (runner) {
			var logfile = GPSystem.copyTrace();
			runner.hasPassed(this.currentTestCase, logfile);
		}
		result = true;
	}
	catch(e) {
		var endtime = new Date();
		logentry = "+ TestCase " + this.currentTestCase + " failed on " + endtime + " after " + (endtime.valueOf() - starttime.valueOf()) + " ms";
		print(logentry);
		this.log(logentry);

		logentry = "  ### - " + e;
		print(logentry);
		this.log(logentry);
		for (j in e) {
			logentry = "  ### " + j + " = " + e[j];
			print(logentry);
			this.log(logentry);
		}

		if (runner) {
			var logfile = GPSystem.copyTrace();
			runner.hasFailed(this.currentTestCase, logfile);
		}
		try	 {
			this.tearDown();
		}
		catch(e) {
			print("Exception in tearDown() " + e);
		}
	}
	return result;
}



/**
 * Runs all tests in a test group.
 *
 * <p>This method can be used to run a test group without a test runner. In that case leave the runner
 * argument empty or null.</p>
 *
 * @param {TestRunner} runner the test runner to report progress or undefined or null
 */
TestGroup.prototype.run = function(runner) {
	this.initTestRun();

	var tests = this.getTestCaseNames();

	var startgroup = new Date();
	var logentry = "TestGroup " + this.name + " started " + startgroup;
	var failures = 0;
	print(logentry);
	this.log(logentry);

	for (var i = 0; i < tests.length; i++) {
		var uniqueName = this.name + "/" + tests[i];

		if (runner) {
			if (!runner.isEnabled(uniqueName))
				continue;
		}

		if (!this.runTestCaseInternal(tests[i], runner)) {
			failures++;
		}
	}

	var endgroup = new Date();
	logentry = "TestGroup " + this.name + " completed on " + endgroup + " with " + failures + " failed tests";
	print(logentry);
	this.log(logentry);
}



/**
 * Run a single test in a test group, optionally using a test runner.
 *
 * @param {String} casename the name of the test case
 * @param {TestRunner} the test runner object or undefined or null
 */
TestGroup.prototype.runTestCase = function(casename, runner) {
	this.initTestRun();
	this.runTestCaseInternal(casename, runner);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2023 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A test group with a generator for test cases
 */

function TestGroupWithVariants(name, parameter) {
	TestGroup.call(this, name, parameter);
}

TestGroupWithVariants.prototype = Object.create(TestGroup.prototype);
TestGroupWithVariants.constructor = TestGroupWithVariants;

exports.TestGroupWithVariants = TestGroupWithVariants;



/**
 * Create test group from XML file and add to test runner
 *
 * @param {String} file the file name containing the test group
 * @param {Object} parameter the parameter object
 */
TestGroupWithVariants.createTestGroupFromXML = function (file, parameter) {
	default xml namespace = "http://www.w3.org/1999/xhtml";

	// Parse XML file.
	var parser = new GPXML();
 	parser.defineArrayElement("/testgroup", "testcase,function,", "id,Name");
	parser.defineArrayElement("/testgroup/testcase/procedures", "procedure");
	var xml = parser.parse(file);

	// Determine CTOR function
	var ctor = xml.constructor.Script;
	if (!ctor) {
		// Use a default constructor unless defined in XML profile
		ctor = function(name, parameter) { TestGroupWithVariants.call(this, name, parameter); };
	}

	// Make CTOR available in scope object
	// this[xml.id] = ctor;

	// Set correct prototype object
	ctor.prototype = new TestGroupWithVariants();
	ctor.prototype.constructor = ctor;
	ctor.prototype.usedProcedures = new Array();
	ctor.prototype.config = new Array();

	var gen = xml.generator.Script;
	gen.call(this); // Set this.variants

	// Add setup function to prototype object
	if (xml.setup) {
		ctor.prototype["setUp"] = xml.setup.Script;
	}

	// Add teardown function to prototype object
	if (xml.teardown) {
		ctor.prototype["tearDown"] = xml.teardown.Script;
	}

	// Add functions to prototype object
	var functions = xml["function"];
	for (var i in functions) {
		if (i != "arrayIndex") {
			var s = functions[i].Script;
			ctor.prototype[i] = s;
		}
	}

	ctor.XML = xml;

	var tc = new ctor(xml.id, parameter);

	// Add test cases to prototype object
	var testcases = xml.testcase;
	for (var i in testcases) {
		if (i != "arrayIndex") {
			if (parseInt(i) + "" == i) {
				print("Attribute id must be a string, but is a number (" + i + " in " + file + ")");
				print("Due to automatic string to number conversion in JavaScript, the test case");
				print("can not be properly deserialized as object map. Numeric id are deserialized");
				print("as a array indices. Please change the id to a string, e.g. by prefixing with a 0.");
				throw new Error("TestCase id parsing error");
			}

			// Generate a test case for each variant

			for (var j = 0; j < this.variants.length; j++) {
				var variant = this.variants[j];

				var s = testcases[i].Script.bind(tc); // Create a copy of the script function
				s.variant = variant;

				// Set variables

				var name = testcases[i].name.elementValue;
				var description = testcases[i].description.p.elementValue;

				for (var v in variant) {
					var key = "${variant." + v + "}";

					if (name.indexOf(key) > 0) {
						name = name.replace(key, variant[v]);
					}

					if (description.indexOf(key) > 0) {
						description = description.replace(key, variant[v]);
					}
				}

				// Create a copy of the XML element

				s.XML = {
					id : i,
					name: {
						elementValue: name
					},
					description: {
						p: {
							elementValue: description
						}
					},
				};

				var caseName = i + "/" + variant.id;
				ctor.prototype["case" + caseName] = s;

				if (testcases[i].procedures) {
					var procedures = testcases[i].procedures.procedure;
					ctor.prototype.usedProcedures[caseName] = new Array();

					for (var p = 0; p < procedures.length; p++) {
						ctor.prototype.usedProcedures[caseName].push(procedures[p].id);
					}
				}
			}
		}
	}

	return tc;
}



/**
 * Run a single test case. This method is called internally. Use {@link #runTestCase} for running a single test case.
 *
 * @private
 * @type boolean
 * @return true if test passed
 */
TestGroupWithVariants.prototype.runTestCaseInternal = function(casename, runner) {
	var result = false;
	this.currentTestCase = this.name + "/" + casename;
	this.testRunner = runner;

//	this.logfile = "";

	var starttime = new Date();
	GPSystem.markTrace();
	logentry = "+ TestCase " + this.currentTestCase + " started " + starttime;
	print(logentry);
	this.log(logentry);
	try {
		this.setUp();
		var func = this.getTestCase(casename);
		func.call(this, func.variant);
		this.tearDown();
		var endtime = new Date();
		logentry = "+ TestCase " + this.currentTestCase + " completed on " + endtime + " after " + (endtime.valueOf() - starttime.valueOf()) + " ms";
		print(logentry);
		this.log(logentry);
		if (runner) {
			var logfile = GPSystem.copyTrace();
			runner.hasPassed(this.currentTestCase, logfile);
		}
		result = true;
	}
	catch(e) {
		var endtime = new Date();
		logentry = "+ TestCase " + this.currentTestCase + " failed on " + endtime + " after " + (endtime.valueOf() - starttime.valueOf()) + " ms";
		print(logentry);
		this.log(logentry);

		logentry = "  ### - " + e;
		print(logentry);
		this.log(logentry);
		for (j in e) {
			logentry = "  ### " + j + " = " + e[j];
			print(logentry);
			this.log(logentry);
		}

		if (runner) {
			var logfile = GPSystem.copyTrace();
			runner.hasFailed(this.currentTestCase, logfile);
		}
		try	 {
			this.tearDown();
		}
		catch(e) {
			print("Exception in tearDown() " + e);
		}
	}
	return result;
}
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Core elements of a test procedure
 */


//
// Constructor
//
function TestProcedure(name, testgroup, parameter) {

	this.name = name;
	this.testgroup = testgroup;
	this.parameter = parameter;
//	print("TestProcedure constructor called");
}

exports.TestProcedure = TestProcedure;


//
// Log message to console
//
TestProcedure.prototype.log = function(message) {
	this.testgroup.log(message);
//	print(message);
}



//
// Setup object for a test procedure
//
TestProcedure.prototype.setUp = function() {
//	this.log("TestProcedure.setUp() called");
}



//
// Remove residue from test procedure
//
TestProcedure.prototype.tearDown = function() {
//	this.log("TestProcedure.tearDown() called");
}



//
// Verify that assertion is true
//
TestProcedure.prototype.assertTrue = function(result, message) {
	this.testgroup.assertTrue(result, message);
}



//
// Verify that expressions are equal
//
TestProcedure.prototype.assertEquals = function(first, second, message) {
	this.testgroup.assertEquals(first, second, message);
}



//
// Run all tests in a test procedure
//
TestProcedure.prototype.run = function() {
	var steps = new Array();

	for (f in this) {
		if (f.substr(0, 4) == "step") {
			if (this[f] instanceof Function) {
				steps.push(f);
			}
		}
	}

	steps.sort();

	for (var i = 0; i < steps.length; i++) {
		var step = steps[i].substr(4);
//		print("    Step " + step + " of procedure " +  this.name);
		this.setUp();
		this[steps[i]].call(this);
		this.tearDown();

		var testgroup = this.testgroup;
		testgroup.reportProgress(this.name, step);
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Test Report
 */

function TestReport() {
	this.testResults = [];
}

exports.TestReport = TestReport;


TestReport.prototype.addResult = function(result) {
	this.testResults.push(result);
}



TestReport.prototype.writeReport = function(filename) {
	var xml = <testreport/>

	for (var i = 0; i < this.testResults.length; i++) {
		var r = this.testResults[i];
		var x = r.toXML();
		xml.testcaseresult += x;
	}

	var os = new java.io.FileOutputStream(filename);
	var fw = new java.io.OutputStreamWriter(os, "UTF-8");

	fw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
	fw.write("<?xml-stylesheet type=\"text/xsl\" href=\"docreport.xsl\" ?>\n");

	fw.write(xml.toXMLString());
	fw.close();
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Test Result
 */

function TestResult(id, verdict, log, tcxml) {
	this.id = id;
	this.verdict = verdict;
	this.log = log;
	this.tcxml = tcxml;
}

exports.TestResult = TestResult;


TestResult.prototype.toXML = function() {
	var source = this.id.split("/")[0];
	var sourceid = this.id.split("/")[1];

	var xml = <testcaseresult id={this.id} source={source} sourceid={sourceid}/>;

	xml.name = <name>{this.tcxml.name.elementValue}</name>;

	xml.verdict = <verdict>{ this.verdict ? "Passed" : "Failed" }</verdict>;
	xml.log = <log>{ "\n" + this.log + "\n" }</log>;
	return xml;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Test runner framework
 */

var TestGroup = require("scsh/testing/TestGroup").TestGroup;
var TestProcedure = require("scsh/testing/TestProcedure").TestProcedure;
var TestReport = require("scsh/testing/TestReport").TestReport;
var TestResult = require("scsh/testing/TestResult").TestResult;
var BaseTestRunner = require("scsh/testing/BaseTestRunner").TestRunner;


/**
 * Create a test runner using a Smart Card Shell outline for navigation
 *
 * @class Class implementing a graphical test runner
 * @constructor
 * @param {String} name the test suite name
 */
function TestRunner(name) {
	BaseTestRunner.call(this, name);

	// Create root node and set as view
	var view = new OutlineNode(name, true);
	if (typeof(view.expand) == "function") {
		view.setContextMenu(["run", "clear", "report", "expand", "collapse"]);
	} else {
		view.setContextMenu(["run", "clear", "report"]);
	}
	view.setUserObject(this);
	this.view = view;

	view.show();
}

TestRunner.prototype = Object.create(BaseTestRunner.prototype);
TestRunner.constructor = TestRunner;

exports.TestRunner = TestRunner;



/**
 * Set directory to write reports
 *
 * @param {String} dir the directory to store reports
 */
TestRunner.prototype.setReportDirectory = function(dir) {
	this.reportDir = dir;
}



/**
 * Event listener for actions selected from context menu
 *
 * @param {Object} source the outline node for which the action was invoked
 * @param {String} actionName the name of the action selected
 */
TestRunner.prototype.actionListener = function(source, actionName) {
	switch(actionName) {
	case "run" :
		this.run();
		break;
	case "clear" :
		this.clearResults();
		break;
	case "report" :
		this.report();
		break;
	case "expand" :
		this.expandAll();
		break;
	case "collapse" :
		this.collapseAll();
		break;
	}
}



/**
 * Expand all test groups
 */
TestRunner.prototype.expandAll = function() {
	for each (c in this.view.childs) {
		c.expand();
	}
}



/**
 * Collapse all test groups
 */
TestRunner.prototype.collapseAll = function() {
	for each (c in this.view.childs) {
		c.collapse();
	}
}



/**
 * Write test report
 */
TestRunner.prototype.report = function() {
	var fn = GPSystem.dateTimeByteString().toString(HEX) + "_TestReport.xml";
	if (this.reportDir == undefined) {
		var fn = GPSystem.mapFilename(fn, GPSystem.USR);
	} else {
		var fn = this.reportDir + "/" + fn;
	}
	var fn = Dialog.prompt("Select output file for report", fn, null, "*.xml");
	if (fn != null) {
		this.testReport.writeReport(fn);
		print("Report written to " + fn);
	}
}



/**
 * Add a test group to the test runner
 *
 * <p>This call will iterate through all test cases and locate used procedures and steps.</p>
 *
 * @param {TestGroup} testGroup the test group object
 */
TestRunner.prototype.addTestGroup = function(testGroup) {
	var tgrs = this.testGroupRunners;

	tgr = new TestGroupRunner(this, testGroup);

	tgrs.push(tgr);
	this.view.insert(tgr.view);
}



/**
 * Run all test groups
 */
TestRunner.prototype.run = function() {
	for (var i = 0; i < this.testGroupRunners.length; i++) {
		var testGroupRunner = this.testGroupRunners[i];
		testGroupRunner.run();
	}
}



/**
 * Clear result of last test run
 */
TestRunner.prototype.clearResults = function() {
	for (var i in this.testMapper) {
		var listener = this.testMapper[i];
		if (listener) {
			listener.clearResult();
		}
	}
	this.testReport = new TestReport();
}



/**
 * hasPassed Listener
 *
 * @param {String} name the unique test name
 * @param {String} log the test log
 */
TestRunner.prototype.hasPassed = function(name, log) {
	var listener = this.testMapper[name];
	if (listener) {
		listener.hasPassed(log);

		if (listener.getXML) {
			var result = new TestResult(name, true, log, listener.getXML());
			this.testReport.addResult(result);
		}
	} else {
		print("No receiver for passed notification : " + name);
		for (var i in this.testMapper) {
			print("- " + i);
		}
	}
}



/**
 * hasFailed Listener
 *
 * @param {String} name the unique test name
 * @param {String} log the test log
 */
TestRunner.prototype.hasFailed = function(name, log) {
	var listener = this.testMapper[name];
	if (listener) {
		listener.hasFailed(log);
		if (listener.getXML) {
			var result = new TestResult(name, false, log, listener.getXML());
			this.testReport.addResult(result);
		}
	}
}



/**
 * Create a TestGroupRunner containing the TestCases
 *
 * @class Class implementing a harness to run test groups
 * @constructor
 * @param {TestRunner} testRunner the associated test runner
 * @param {TestGroup= testGroup the test group
 */
function TestGroupRunner(testRunner, testGroup) {
	this.testRunner = testRunner;
	this.testGroup = testGroup;

	var view = new OutlineNode(testGroup.getName());
	view.setContextMenu(["run"]);
	view.setUserObject(this);

	this.view = view;

	var testcases = testGroup.getTestCaseNames();

	for (var i = 0; i < testcases.length; i++) {
		var tcr = new TestCaseRunner(this, testcases[i]);
		view.insert(tcr.view);
	}
}



/**
 * Event listener for context menu
 *
 * @param {Object} source the outline node for which the action was invoked
 * @param {String} actionName the name of the action selected
 */
TestGroupRunner.prototype.actionListener = function(source, action) {
	switch(action) {
	case "run" :
		this.run();
		break;
	}
}



/**
 * Run this test group
 */
TestGroupRunner.prototype.run = function() {
	var test = this.testGroup;

	test.run(this.testRunner);
}




/**
 * Construct a TestCaseRunner object
 *
 * @class Class implementing a test case harness
 * @constructor
 * @param {TestGroupRunner} the parent test group runner
 * @param {String} the test case name
 */
function TestCaseRunner(testGroupRunner, testCase) {
	this.testGroupRunner = testGroupRunner;
	this.testCase = testCase;
	this.selected = true;

	var testRunner = testGroupRunner.testRunner;
	testRunner.addTest(testGroupRunner.testGroup.getName() + "/" + testCase, this);

	this.xml = testGroupRunner.testGroup.getTestCase(testCase).XML;

	var view = new OutlineNode(testCase + " " + this.xml.name.elementValue);

	view.setUserObject(this);
	view.setIcon("selected");
	view.setContextMenu(["select", "deselect", "run"]);
	this.view = view;

	var testGroup = testGroupRunner.testGroup;

	var testprocedures = testGroup.getUsedTestProceduresForTestCase(testCase);

	if (testprocedures) {
		for (var i = 0; i < testprocedures.length; i++) {
			var tpr = new TestProcedureRunner(this, testprocedures[i]);
			view.insert(tpr.view);
		}
	}
}



/**
 * Event listener for context menu
 *
 * @param {Object} source the outline node for which the action was invoked
 * @param {String} actionName the name of the action selected
 */
TestCaseRunner.prototype.actionListener = function(source, actionName) {
	print("Action " + actionName);
	switch(actionName) {
	case "select":
		this.selected = true;
		source.setIcon("selected");
		break;
	case "deselect":
		this.selected = false;
		source.setIcon("deselected");
		break;
	case "run":
		this.run();
		break;
	}
}



/**
 * Run this test case
 */
TestCaseRunner.prototype.run = function() {
	var test = this.testGroupRunner.testGroup;

	test.runTestCase(this.testCase, this.testGroupRunner.testRunner);
}



/**
 * Tell test runner if case is enabled
 *
 * @type boolean
 * @return true if enabled
 */
TestCaseRunner.prototype.isEnabled = function() {
	return this.selected;
}



/**
 * Add a log entry to the test case node
 *
 * @param {String} log the test log
 */
TestCaseRunner.prototype.addLog = function(log) {
	var view = this.view;
	var lognode = new TestLogFile(this, log);
	this.log = lognode;
	view.insert(lognode.view);
}



/**
 * Return describing XML element
 *
 * @type Object
 * @return the XML element for this test case
 */
TestCaseRunner.prototype.getXML = function() {
	return this.xml;
}



/**
 * Listener for passed notifications
 *
 * @param {String} log the test log
 */
TestCaseRunner.prototype.hasPassed = function(log) {
	this.failed = false;
	var view = this.view;
	view.setIcon("passed");
	this.addLog(log);
}



/**
 * Listener for failed notifications
 *
 * @param {String} log the test log
 */
TestCaseRunner.prototype.hasFailed = function(log) {
	this.failed = true;
	var view = this.view;
	view.setIcon("failed");
	this.addLog(log);
}



/**
 * Clear result of test
 */
TestCaseRunner.prototype.clearResult = function() {
	this.failed = false;
	var view = this.view;
	if (this.selected) {
		view.setIcon("selected");
	} else {
		view.setIcon("deselected");
	}
}



/**
 * Enable or disable test
 *
 * @param {Boolean} state true for enabled
 */
TestCaseRunner.prototype.enable = function(state) {
	var view = this.view;
	this.selected = state;
	if (this.selected) {
		view.setIcon("selected");
	} else {
		view.setIcon("deselected");
	}
}




/**
 * Constructor for test log entry in outline
 */
function TestLogFile(parent, log) {
	this.log = log;

	var view = new OutlineNode("Log from " + Date());
	this.view = view;
	view.setUserObject(this);
}



//
// Listener for node selection - Display log
//
TestLogFile.prototype.selectedListener = function() {
	print("--------------------------------------------------------------------------------");
	print(this.log);
}



// --------------------------------------------
// Constructor for a TestProcedureRunner object
//
function TestProcedureRunner(testCaseRunner, testProcedure) {
	this.testCaseRunner = testCaseRunner;
	this.testProcedure = testProcedure;

	var view = new OutlineNode(testProcedure);
	this.view = view;

	var tp = this.testCaseRunner.testGroupRunner.testRunner.testProcedures[testProcedure];

	if (tp) {
		var list = new Array();
		for (var i in tp.prototype) {
			if (i.substr(0, 4) == "step") {
				var step = i.substr(4);
				list.push(step);
			}
		}

		list.sort();

		for (var i = 0; i < list.length; i++) {
			var tpsr = new TestStepRunner(this, list[i]);
			view.insert(tpsr.view);
		}
	} else {
		print("No test procedure implementation found for " + testProcedure);
	}
}




// ---------------------------------------
// Constructor for a TestStepRunner object
//
function TestStepRunner(testProcedureRunner, testStep) {
	this.testProcedureRunner = testProcedureRunner;
	this.testStep = testStep;

	var view = new OutlineNode(testStep);
	this.view = view;

	var testCaseRunner = testProcedureRunner.testCaseRunner;
	var testGroupRunner = testCaseRunner.testGroupRunner;
	var testRunner = testGroupRunner.testRunner;
	var testName = testGroupRunner.testGroup.getName() + "/" +
	               testCaseRunner.testCase + "/" +
	               testProcedureRunner.testProcedure + "/" +
	               testStep;

	testRunner.addTest(testName, this);
}



//
// Receive passed notifications
//
TestStepRunner.prototype.hasPassed = function() {
	var view = this.view;
	view.setIcon("passed");
}



//
// Clear test result display
//
TestStepRunner.prototype.clearResult = function() {
	var view = this.view;
	view.setIcon();
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2016 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Connector implementing a web service interface to a TCC for Passive Authentication as defined in TR-03129
 */



/**
 * Creates a web service connector to access services for Passive Authentication as defined in TR-03129
 *
 * @class Class implementing a TCC web service connector for PA
 * @constructor
 * @param {String} url the web service endpoint
 */
function PAConnection(url) {
	this.url = url;
	this.soapcon = new SOAPConnection(SOAPConnection.SOAP11);
	this.verbose = true;
	this.lastReturnCode = null;
	this.version = "1.1";
}

exports.PAConnection = PAConnection;



/**
 * Sets the version of the WSDL to use
 *
 * @param {String} version the version to use
 */
PAConnection.prototype.setVersion = function(version) {
	this.version = version;
}



/**
 * Get the last error return code (Deprecated: Use getLastReturnCode() instead)
 *
 * @returns the last error return code received or null if none defined
 * @type String
 */
PAConnection.prototype.getLastError = function() {
	return this.lastReturnCode;
}



/**
 * Get the last return code
 *
 * @returns the last return code received or null if none defined
 * @type String
 */
PAConnection.prototype.getLastReturnCode = function() {
	return this.lastReturnCode;
}



/**
 * Get the last DSInfo data structure
 *
 * @returns the last DSInfo received or null if none defined
 * @type Object
 */
PAConnection.prototype.getLastDSInfo = function() {
	return this.lastDSInfo;
}



/**
 * Get the last dsTrustStatus. Must be one of
 * certificate_ok
 * certificate_undetermined
 * certificate_invalid
 *
 * @returns the last dsTrustStatus received or null if none defined
 * @type String
 */
PAConnection.prototype.getLastDSTrustStatus = function() {
	var ns1 = new Namespace("uri:eacBT/" + this.version);
	if (!this.getLastDSInfo()) {
		return null;
	}
	return this.getLastDSInfo().ns1::dsTrustStatus.toString();
}



/**
 * Get the CSCA Certificate from the last GetDocumentSignerInformation call
 * or null if no CSCA Certificate was returned.
 *
 * @returns the CSCA Certificate or null if not defined
 * @type ByteString
 */
PAConnection.prototype.getLastCSCACertificate = function() {
	var ns1 = new Namespace("uri:eacBT/" + this.version);

	if (!this.getLastDSInfo()) {
		return null;
	}

	var cert =  this.getLastDSInfo().ns1::cscaCertificate.ns1::certificate;
	if (cert.length() == 0) {
		return null;
	}

	return new ByteString(cert, BASE64);
}



/**
 * Get the last Document Signer validity status
 *
 * @returns the DS validity status or null if not defined
 * @type String
 */
PAConnection.prototype.getLastDSValidityStatus = function() {
	var ns1 = new Namespace("uri:eacBT/" + this.version);

	if (!this.getLastDSInfo()) {
		return null;
	}

	var status = this.getLastDSInfo().ns1::certValidity.ns1::dsValidity.ns1::status;
	return status.toString();
}



/**
 * Get the last CSCA validity status
 *
 * @returns the CSCA validity status or null if not defined
 * @type String
 */
PAConnection.prototype.getLastCSCAValidityStatus = function() {
	var ns1 = new Namespace("uri:eacBT/" + this.version);

	if (!this.getLastDSInfo()) {
		return null;
	}

	var status = this.getLastDSInfo().ns1::certValidity.ns1::cscaValidity.ns1::status;
	return status.toString();
}



/**
 * Get the last Document Signer signature status
 *
 * @returns the DS signature status or null if not defined
 * @type String
 */
PAConnection.prototype.getLastDSSignatureStatus = function() {
	var ns1 = new Namespace("uri:eacBT/" + this.version);

	if (!this.getLastDSInfo()) {
		return null;
	}

	var status = this.getLastDSInfo().ns1::dsSignature.ns1::status;
	return status.toString();
}



/**
 * Gets the last request
 *
 * @returns the last request
 * @type XML
 */
PAConnection.prototype.getLastRequest = function() {
	return this.request;
}



/**
 * Gets the last response
 *
 * @returns the last response
 * @type XML
 */
PAConnection.prototype.getLastResponse = function() {
	return this.response;
}



/**
 * Close the connector and release allocated resources
 */
PAConnection.prototype.close = function() {
	this.soapcon.close();
}



/**
 * Send a Document Signer Certificate to the TCC for validation
 *
 * @param {X509} cert the Document Signer Certificate
 * @param {Boolean} returnCSCACert if true receive the corresponding CSCA Certificate. Default is false.
 * @returns true if Document Signer Certificate is valid, false otherwise
 * @type Boolean
 */
PAConnection.prototype.GetDocumentSignerInformation = function(cert, returnCSCACert) {

	this.lastReturnCode = null;

	var ns = new Namespace("uri:EAC-PKI-IS-Reader-Protocol/" + this.version);
	var ns1 = new Namespace("uri:eacBT/" + this.version);

	if (!returnCSCACert) {
		returnCSCACert = false;
	}

	var request =
		<ns:GetDocumentSignerInformation xmlns:ns={ns} xmlns:ns1={ns1}>
			<dsCertificate>
				<!--Optional:-->
				<ns1:binary>{cert.getBytes().toString(BASE64)}</ns1:binary>
			</dsCertificate>
			<SignerIdentifier>
				<!--Optional:-->
			</SignerIdentifier>
			<returnCSCACertificate>{returnCSCACert}</returnCSCACertificate>
		</ns:GetDocumentSignerInformation>;

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try {
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError("PAConnection", GPError.DEVICE_ERROR, 0, "GetDocumentSignerInformation failed with : " + e.message);
	}

	this.response = response;
	this.lastReturnCode = response.Result.ns1::returnCode.toString();
	this.lastDSInfo = response.Result.ns1::dsInfo;

	return (this.lastReturnCode.equals("ok_syntax") && this.getLastDSTrustStatus().equals("certificate_ok"));
}



/**
 * Get the current Master List
 *
 * @returns the current Master List
 * @type ByteString
 */
PAConnection.prototype.GetMasterList = function() {

	this.lastReturnCode = null;

	var ns = new Namespace("uri:EAC-PKI-IS-Reader-Protocol/" + this.version);
	var ns1 = new Namespace("uri:eacBT/" + this.version);

	var request = <ns:GetMasterList xmlns:ns={ns}/>;

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try {
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError("PAConnection", GPError.DEVICE_ERROR, 0, "GetDocumentSignerInformation failed with : " + e.message);
	}

	this.response = response;
	this.lastReturnCode = response.Result.ns1::returnCode.toString();

	if (this.lastReturnCode == "ok_list_available") {
		var masterList = response.Result.ns1::masterList.ns1::binary;
		return new ByteString(masterList, BASE64);;
	} else {
		return null;
	}
}/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Connector implementing a web service interface to a CVCA/DVCA for the
 * distribution of card verifiable certificates used for terminal authentication as defined in TR-03129
 */



/**
 * Creates a web service connector to access services of a CVCA/DVCA as defined in TR-03129
 *
 * @class Class implementing a CVCA/DVCA web service connector
 * @constructor
 * @param {String} url the web service endpoint
 * @param {Boolean} isCVCA true if connection is made to CVCA instead of DVCA
 */
function TAConnection(url, isCVCA) {
	this.url = url;
	this.soapcon = new SOAPConnection(SOAPConnection.SOAP11);
	this.verbose = true;
	this.lastReturnCode = null;
	this.version = "1.1";
	this.isCVCA = isCVCA;
}

exports.TAConnection = TAConnection;



/**
 * Sets the version of the WSDL to use
 *
 * @param {String} version the version to use
 */
TAConnection.prototype.setVersion = function(version) {
	this.version = version;
}



/**
 * Get the last error return code (Deprecated: Use getLastReturnCode() instead)
 *
 * @returns the last error return code received or null if none defined
 * @type String
 */
TAConnection.prototype.getLastError = function() {
	return this.lastReturnCode;
}



/**
 * Get the last return code
 *
 * @returns the last return code received or null if none defined
 * @type String
 */
TAConnection.prototype.getLastReturnCode = function() {
	return this.lastReturnCode;
}



/**
 * Gets the last request
 *
 * @returns the last request
 * @type XML
 */
TAConnection.prototype.getLastRequest = function() {
	return this.request;
}



/**
 * Gets the last response
 *
 * @returns the last response
 * @type XML
 */
TAConnection.prototype.getLastResponse = function() {
	return this.response;
}



/**
 * Close the connector and release allocated resources
 */
TAConnection.prototype.close = function() {
	this.soapcon.close();
}



/**
 * Obtain a list of certificates from the CVCA or DVCA
 *
 * @param {String} messageID the messageID for asynchronous requests (optional)
 * @param {String} responseURL the URL to which the asynchronous response is send (optional)
 * @returns a lists of card verifiable certificates from the DVCA or null in case of error
 * @type ByteString[]
 */
TAConnection.prototype.getCACertificates = function(messageID, responseURL) {

	this.lastReturnCode = null;

	if (this.isCVCA) {
		var ns = new Namespace("uri:EAC-PKI-CVCA-Protocol/" + this.version);
	} else {
		var ns = new Namespace("uri:EAC-PKI-DV-Protocol/" + this.version);
	}

	var ns1 = new Namespace("uri:eacBT/" + this.version);

	var request =
		<ns:GetCACertificates xmlns:ns={ns} xmlns:ns1={ns1}>
			<callbackIndicator>callback_not_possible</callbackIndicator>
			<messageID>
			</messageID>
			<responseURL>
			</responseURL>
		</ns:GetCACertificates>;

	if (typeof(messageID) != "undefined") {
		request.callbackIndicator = "callback_possible";
		request.messageID.ns1::messageID = messageID;
		request.responseURL.ns1::string = responseURL;
	}

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try	 {
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError("TAConnection", GPError.DEVICE_ERROR, 0, "getCACertificates failed with : " + e.message);
	}

	this.response = response;

	var certlist = [];

	this.lastReturnCode = response.Result.ns1::returnCode.toString();

	if (this.lastReturnCode == "ok_cert_available") {
		GPSystem.log(GPSystem.INFO, module.id, "Received certificates:");
		for each (var c in response.Result.ns1::certificateSeq.ns1::certificate) {
			var cvc = new ByteString(c, BASE64);
			certlist.push(cvc);
			GPSystem.log(GPSystem.INFO, module.id, cvc);
		}
	} else {
		return null;
	}

	return certlist;
}



/**
 * Request a certificate from the parent CA using a web service
 *
 * @param {ByteString} certreq the certificate request
 * @param {String} messageID the messageID for asynchronous requests (optional)
 * @param {String} responseURL the URL to which the asynchronous response is send (optional)
 * @returns the new certificates
 * @type ByteString[]
 */
TAConnection.prototype.requestCertificate = function(certreq, messageID, responseURL) {

	this.lastReturnCode = null;

	var soapConnection = new SOAPConnection();

	if (this.isCVCA) {
		var ns = new Namespace("uri:EAC-PKI-CVCA-Protocol/" + this.version);
	} else {
		var ns = new Namespace("uri:EAC-PKI-DV-Protocol/" + this.version);
	}

	var ns1 = new Namespace("uri:eacBT/" + this.version);

	var request =
		<ns:RequestCertificate xmlns:ns={ns} xmlns:ns1={ns1}>
			<callbackIndicator>callback_not_possible</callbackIndicator>
			<messageID>
			</messageID>
			<responseURL>
			</responseURL>
			<certReq>{certreq.toString(BASE64)}</certReq>
		</ns:RequestCertificate>

	if (typeof(messageID) != "undefined") {
		request.callbackIndicator = "callback_possible";
		request.messageID.ns1::messageID = messageID;
		request.responseURL.ns1::string = responseURL;
	}

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try	{
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError("TAConnection", GPError.DEVICE_ERROR, 0, "RequestCertificate failed with : " + e);
	}

	this.response = response;

	var certlist = [];

	this.lastReturnCode = response.Result.ns1::returnCode.toString();

	if (this.lastReturnCode.substr(0, 3) == "ok_") {
		GPSystem.log(GPSystem.INFO, module.id, "Received certificates:");
		for each (var c in response.Result.ns1::certificateSeq.ns1::certificate) {
			var cvc = new ByteString(c, BASE64);
			certlist.push(cvc);
			GPSystem.log(GPSystem.INFO, module.id, cvc);
		}
	} else {
		return null;
	}

	return certlist;
}



/**
 * Get a certificate previously requested from the parent CA using a web service
 *
 * This is a proprietary extension to the web service. Do not use in interoperable systems.
 *
 * @param {String} messageID the messageID for asynchronous requests (optional)
 * @returns the new certificates
 * @type ByteString[]
 */
TAConnection.prototype.getCertificate = function(messageID, responseURL) {

	this.lastReturnCode = null;

	var soapConnection = new SOAPConnection();

	if (this.isCVCA) {
		var ns = new Namespace("uri:EAC-PKI-CVCA-Protocol/" + this.version);
	} else {
		var ns = new Namespace("uri:EAC-PKI-DV-Protocol/" + this.version);
	}

	var ns1 = new Namespace("uri:eacBT/" + this.version);

	var request =
		<ns:GetCertificate xmlns:ns={ns} xmlns:ns1={ns1}>
			<callbackIndicator>callback_not_possible</callbackIndicator>
			<messageID>
			</messageID>
		</ns:GetCertificate>

	if (typeof(messageID) != "undefined") {
		request.callbackIndicator = "callback_possible";
		request.messageID.ns1::messageID = messageID;
		request.responseURL.ns1::string = responseURL;
	}

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try	{
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError("TAConnection", GPError.DEVICE_ERROR, 0, "GetCertificate failed with : " + e);
	}

	this.response = response;

	var certlist = [];

	this.lastReturnCode = response.Result.ns1::returnCode.toString();

	if (this.lastReturnCode.substr(0, 3) == "ok_") {
		GPSystem.log(GPSystem.INFO, module.id, "Received certificates:");
		for each (var c in response.Result.ns1::certificateSeq.ns1::certificate) {
			var cvc = new ByteString(c, BASE64);
			certlist.push(cvc);
			GPSystem.log(GPSystem.INFO, module.id, cvc);
		}
	} else {
		return null;
	}

	return certlist;
}



/**
 * Request a certificate from the parent CA using a web service
 *
 * @param {ByteString} certreq the certificate request
 * @param {String} foreignCAR the CAR of the foreign CVCA
 * @param {String} messageID the messageID for asynchronous requests (optional)
 * @param {String} responseURL the URL to which the asynchronous response is send (optional)
 * @returns the new certificates
 * @type ByteString[]
 */
TAConnection.prototype.requestForeignCertificate = function(certreq, foreignCAR, messageID, responseURL) {

	this.lastReturnCode = null;

	var soapConnection = new SOAPConnection();

	if (this.isCVCA) {
		var ns = new Namespace("uri:EAC-PKI-CVCA-Protocol/" + this.version);
	} else {
		var ns = new Namespace("uri:EAC-PKI-DV-Protocol/" + this.version);
	}

	var ns1 = new Namespace("uri:eacBT/" + this.version);

	var request =
		<ns:RequestForeignCertificate xmlns:ns={ns} xmlns:ns1={ns1}>
			<callbackIndicator>callback_not_possible</callbackIndicator>
			<messageID/>
			<responseURL/>
			<foreignCAR>{foreignCAR}</foreignCAR>
			<certReq>{certreq.toString(BASE64)}</certReq>
		</ns:RequestForeignCertificate>

	if (typeof(messageID) != "undefined") {
		request.callbackIndicator = "callback_possible";
		request.messageID.ns1::messageID = messageID;
		request.responseURL.ns1::string = responseURL;
	}

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try	{
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError("TAConnection", GPError.DEVICE_ERROR, 0, "RequestForeignCertificate failed with : " + e);
	}

	this.response = response;

	var certlist = [];

	this.lastReturnCode = response.Result.ns1::returnCode.toString();

	if (this.lastReturnCode.substr(0, 3) == "ok_") {
		GPSystem.log(GPSystem.INFO, module.id, "Received certificates:");
		for each (var c in response.Result.ns1::certificateSeq.ns1::certificate) {
			var cvc = new ByteString(c, BASE64);
			certlist.push(cvc);
			GPSystem.log(GPSystem.INFO, module.id, cvc);
		}
	} else {
		return null;
	}

	return certlist;
}



/**
 * Send a certificate to the DVCA
 *
 * @param {ByteString[]} certificates the list of certificates to post or null
 * @param {String} messageID the messageID for asynchronous requests (optional)
 * @param {String} statusInfo the statusInfo field of the message
 * @type String
 * @return the returnCode
 */
TAConnection.prototype.sendCertificates = function(certificates, messageID, statusInfo) {

	var soapConnection = new SOAPConnection();

	if (this.isCVCA) {
		var ns = new Namespace("uri:EAC-PKI-DV-Protocol/" + this.version);
	} else {
		var ns = new Namespace("uri:EAC-PKI-TermContr-Protocol/" + this.version);
	}

	var ns1 = new Namespace("uri:eacBT/" + this.version);

	if (this.version == "1.0") {
		var request =
			<ns:SendCertificates xmlns:ns={ns} xmlns:ns1={ns1}>
				<messageID>{messageID}</messageID>
				<statusInfo>{statusInfo}</statusInfo>
				<certificateSeq>
				</certificateSeq>
			</ns:SendCertificates>;
	} else {
		var request =
			<ns:SendCertificates xmlns:ns={ns} xmlns:ns1={ns1}>
				<messageID>
					<ns1:messageID>{messageID}</ns1:messageID>
				</messageID>
				<statusInfo>{statusInfo}</statusInfo>
				<certificateSeq>
				</certificateSeq>
			</ns:SendCertificates>;
	}

	var list = request.certificateSeq;

	if (certificates) {
		for (var i = 0; i < certificates.length; i++) {
			var cvc = certificates[i];
			list.certificate += <ns1:certificate xmlns:ns1={ns1}>{cvc.toString(BASE64)}</ns1:certificate>
		}
	}

	if (this.verbose) {
		GPSystem.log(GPSystem.INFO, module.id, request.toXMLString());
	}

	this.request = request;

	try	{
		var response = this.soapcon.call(this.url, request);
		if (this.verbose) {
			GPSystem.log(GPSystem.INFO, module.id, response.toXMLString());
		}
	}
	catch(e) {
		GPSystem.log(GPSystem.ERROR, module.id, "SOAP call to " + this.url + " failed : " + e);
		throw new GPError("TAConnection", GPError.DEVICE_ERROR, 0, "SendCertificates failed with : " + e);
	}

	this.response = response;

	this.lastReturnCode = response.Result.ns1::returnCode.toString();
	return this.lastReturnCode;
}



/**
 * Convert a list of certificates in binary format to a list of CVC objects
 *
 * @param {ByteString[]} certlist the list of certificates
 * @type CVC[]
 * @return the list of certificate objects
 */
TAConnection.toCVCList = function(certlist) {
	var certs = [];
	for each (var cvcbin in certlist) {
		certs.push(new CVC(cvcbin));
	}
	return certs;
}



/**
 * Convert a list of certificate objects into a list of certificates in binary format
 *
 * @param {CVC[]} certlist the list of certificate objects
 * @type ByteString[]
 * @return the list of certificates
 */
TAConnection.fromCVCList = function(certlist) {
	var certs = [];
	for each (var cvc in certlist) {
		certs.push(cvc.getBytes());
	}
	return certs;
}



TAConnection.test = function() {
	var c = new TAConnection("http://localhost:8080/se/dvca");
	c.verbose = true;
	var certlist = c.getCACertificates();
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Connector implementing a web service interface to a terminal control center as defined in TR-03129
 */


// Imports
CVC = require('scsh/eac/CVC').CVC;
PublicKeyReference = require('scsh/eac/PublicKeyReference').PublicKeyReference;


/**
 * Creates a web service connector to access services of a terminal control center as defined in TR-03129
 *
 * @class Class implementing a terminal control center web service connector
 * @constructor
 * @param {String} url the web service endpoint
 */
function TCCConnection(url) {
	this.url = url;
	this.soapcon = new SOAPConnection();
	this.verbose = true;
	this.lastError = null;
	this.version = "1.1";
}

exports.TCCConnection = TCCConnection;


/**
 * Get the last error return code
 *
 * @returns the last error return code received or null if none defined
 * @type String
 */
TCCConnection.prototype.getLastError = function() {
	return this.lastError;
}



/**
 * Close the connector and release allocated resources
 */
TCCConnection.prototype.close = function() {
	this.soapcon.close();
}



/**
 * Obtain a list of card verifiable certificates that can be used to provide the MRTD with a chain of certificates
 * up to and including the terminal certificate.
 *
 * @param {PublicKeyReference} keyNameMRTD the certificate holder reference of the trust anchor used by the MRTD
 * @returns a lists of card verifiable certificates from root to terminal or null in case of error
 * @type CVC[]
 */
TCCConnection.prototype.getCertificateChain = function(keyNameMRTD) {
	default xml namespace = "";

	this.lastError = null;

	var ns = new Namespace("uri:EAC-PKI-TermContr-Protocol/" + this.version);
	var ns1 = new Namespace("uri:eacBT/" + this.version);

	if (this.version == "1.0") {
		var request =
			<ns:GetCertificateChain xmlns:ns={ns} xmlns:ns1={ns1}>
				<keyNameMRTD>{keyNameMRTD.getBytes().toString(BASE64)}</keyNameMRTD>
			</ns:GetCertificateChain>
	} else {
		var request =
			<ns:GetCertificateChain xmlns:ns={ns} xmlns:ns1={ns1}>
				<keyCAR>{keyNameMRTD.getBytes().toString(BASE64)}</keyCAR>
			</ns:GetCertificateChain>
	}

	if (this.verbose) {
		GPSystem.trace(request.toXMLString());
	}

	var response = this.soapcon.call(this.url, request);

	if (this.verbose) {
		GPSystem.trace(response.toXMLString());
	}

	var certmap = [];

	if (response.Result.ns1::returnCode.toString() == "ok_cert_available") {
		if (this.verbose) {
			GPSystem.trace("Received certificates from TCC:");
		}
		for each (var c in response.Result.ns1::certificateSeq.ns1::certificate) {
			var cvc = new CVC(new ByteString(c, BASE64));
			certmap[cvc.getCAR().toString()] = cvc;
			if (this.verbose) {
				GPSystem.trace(cvc.getCAR().toString());
				GPSystem.trace(cvc);
			}
		}
	} else {
		this.lastError = response.Result.ns1::returnCode.toString();
		return null;
	}

	var certlist = [];

	var car = keyNameMRTD;
	var cvc = certmap[car.toString()];

	while (typeof(cvc) != "undefined") {
		certlist.push(cvc);
		if (this.verbose) {
			GPSystem.trace("Added: " + cvc);
		}
		car = cvc.getCHR()
		cvc = certmap[car.toString()]
	}

	return certlist;
}



/**
 * Obtain a signature from the TCC for a hash or a block of data
 *
 * @param {PublicKeyReference} keyCHR the key to be used for signing
 * @param {ByteString} digest the message digest or null if second variant is used
 * @returns the signature as a concatenation of coordinates on the curve or null in case of error
 * @type ByteString
 */
TCCConnection.prototype.getTASignature = function(keyCHR, digest) {
	default xml namespace = "";

	this.lastError = null;

	var ns = new Namespace("uri:EAC-PKI-TermContr-Protocol/" + this.version);
	var ns1 = new Namespace("uri:eacBT/" + this.version);

	var request =
		<ns:GetTASignature xmlns:ns={ns} xmlns:ns1={ns1}>
			<hashTBS>
			</hashTBS>
			<idPICC>
			</idPICC>
			<challengePICC>
			</challengePICC>
			<hashPK>
			</hashPK>
			<auxPCD>
			</auxPCD>
			<keyCHR>{keyCHR.getBytes().toString(BASE64)}</keyCHR>
		</ns:GetTASignature>

	request.hashTBS.ns1::binary = <ns1:binary xmlns:ns1={ns1}>{digest.toString(BASE64)}</ns1:binary>;

	if (this.verbose) {
		GPSystem.trace(request.toXMLString());
	}

	var response = this.soapcon.call(this.url, request);

	if (this.verbose) {
		GPSystem.trace(response.toXMLString());
	}

	var signature = null;

	if (response.Result.ns1::returnCode.toString() == "ok_signature_available") {
		var signatureStr = response.Result.ns1::Signature.toString();
		if (this.verbose) {
			GPSystem.trace("Received signature from TCC: " + signatureStr);
		}
		signature = new ByteString(signatureStr, BASE64);
		if (this.verbose) {
			GPSystem.trace("Received signature from TCC: " + signature);
		}
	} else {
		this.lastError = response.Result.ns1::returnCode.toString();
	}

	return signature;
}



/**
 * Obtain a signature from the TCC for a hash or a block of data
 *
 * @param {ByteString} idPICC the identifier of the MRTD
 * @param {ByteString} challengePICC the challenge of the MRTD
 * @param {ByteString} hashPK the hash value over the ephemeral public key of the terminal
 * @param {PublicKeyReference} keyCHR the key to be used for signing
 * @returns the signature as a concatenation of coordinates on the curve or null in case of error
 * @type ByteString
 */
TCCConnection.prototype.getTASignature2 = function(idPICC, challengePICC, hashPK, keyCHR) {
	default xml namespace = "";

	this.lastError = null;

	var ns = new Namespace("uri:EAC-PKI-TermContr-Protocol/" + this.version);
	var ns1 = new Namespace("uri:eacBT/" + this.version);

	var request =
		<ns:GetTASignature xmlns:ns={ns} xmlns:ns1={ns1}>
			<hashTBS>
			</hashTBS>
			<idPICC>
			</idPICC>
			<challengePICC>
			</challengePICC>
			<hashPK>
			</hashPK>
			<auxPCD>
			</auxPCD>
			<keyCHR>{keyCHR.getBytes().toString(BASE64)}</keyCHR>
		</ns:GetTASignature>

	request.idPICC.ns1::binary = <ns1:binary xmlns:ns1={ns1}>{idPICC.toString(BASE64)}</ns1:binary>;
	request.challengePICC.ns1::binary = <ns1:binary xmlns:ns1={ns1}>{challengePICC.toString(BASE64)}</ns1:binary>;
	request.hashPK.ns1::binary = <ns1:binary xmlns:ns1={ns1}>{hashPK.toString(BASE64)}</ns1:binary>;

	if (this.verbose) {
		GPSystem.trace(request.toXMLString());
	}

	var response = this.soapcon.call(this.url, request);

	if (this.verbose) {
		GPSystem.trace(response.toXMLString());
	}

	var signature = null;

	if (response.Result.ns1::returnCode.toString() == "ok_signature_available") {
		var signatureStr = response.Result.ns1::Signature.toString();
		if (this.verbose) {
			GPSystem.trace("Received signature from TCC: " + signatureStr);
		}
		signature = new ByteString(signatureStr, BASE64);
		if (this.verbose) {
			GPSystem.trace("Received signature from TCC: " + signature);
		}
	} else {
		this.lastError = response.Result.ns1::returnCode.toString();
	}

	return signature;
}



/**
 * For exception testing:
 * Send a GetTASignature where the request mixes option 1 and option 2.
 *
 * @param {PublicKeyReference} keyCHR the key to be used for signing
 * @param {ByteString} digest the message digest or null if second variant is used
 * @param {ByteString} idPICC the identifier of the MRTD
 * @param {ByteString} challengePICC the challenge of the MRTD
 * @param {ByteString} hashPK the hash value over the ephemeral public key of the terminal
 * @param {ByteString} auxPCD the auxiliary data of the terminal
 * @returns the signature as a concatenation of coordinates on the curve or null in case of error
 * @type ByteString
 */
TCCConnection.prototype.getTASignatureForExceptionTesting = function(keyCHR, digest, idPICC, challengePICC, hashPK, auxPCD) {
	default xml namespace = "";

	this.lastError = null;

	var ns = new Namespace("uri:EAC-PKI-TermContr-Protocol/" + this.version);
	var ns1 = new Namespace("uri:eacBT/" + this.version);

	var request =
		<ns:GetTASignature xmlns:ns={ns} xmlns:ns1={ns1}>
			<hashTBS>
			</hashTBS>
			<idPICC>
			</idPICC>
			<challengePICC>
			</challengePICC>
			<hashPK>
			</hashPK>
			<auxPCD>
			</auxPCD>
			<keyCHR>{keyCHR.getBytes().toString(BASE64)}</keyCHR>
		</ns:GetTASignature>

	request.hashTBS.ns1::binary = <ns1:binary xmlns:ns1={ns1}>{digest.toString(BASE64)}</ns1:binary>;
	if (idPICC) {
		request.idPICC.ns1::binary = <ns1:binary xmlns:ns1={ns1}>{idPICC.toString(BASE64)}</ns1:binary>;
	}
	if (challengePICC) {
		request.challengePICC.ns1::binary = <ns1:binary xmlns:ns1={ns1}>{challengePICC.toString(BASE64)}</ns1:binary>;
	}
	if (hashPK) {
		request.hashPK.ns1::binary = <ns1:binary xmlns:ns1={ns1}>{hashPK.toString(BASE64)}</ns1:binary>;
	}
	if (auxPCD) {
		request.auxPCD.ns1::binary = <ns1:binary xmlns:ns1={ns1}>{auxPCD.toString(BASE64)}</ns1:binary>;
	}

	if (this.verbose) {
		GPSystem.trace(request.toXMLString());
	}

	var response = this.soapcon.call(this.url, request);

	if (this.verbose) {
		GPSystem.trace(response.toXMLString());
	}

	var signature = null;

	if (response.Result.ns1::returnCode.toString() == "ok_signature_available") {
		var signatureStr = response.Result.ns1::Signature.toString();
		if (this.verbose) {
			GPSystem.trace("Received signature from TCC: " + signatureStr);
		}
		signature = new ByteString(signatureStr, BASE64);
		if (this.verbose) {
			GPSystem.trace("Received signature from TCC: " + signature);
		}
	} else {
		this.lastError = response.Result.ns1::returnCode.toString();
	}

	return signature;
}



/**
 * Perform a simple test
 */
TCCConnection.test = function(url, chr) {
	if (!url) {
		url = "http://localhost:8080/se/tcctr3129";
	}

	if (!chr) {
		chr = "UTCVCA00001";
	}

	var c = new TCCConnection(url);
	var chr = new PublicKeyReference(chr);

	var cl = c.getCertificateChain(chr);

	if (cl == null) {
		print("GetCertificateChain reports error: " + c.getLastError());
	}

	print("Received certificates:");
	for (var i = 0; i < cl.length; i++) {
		print(cl[i]);
	}

	// Extract terminal certificate, which is always the last in the list
	var tcert = cl[cl.length - 1];
	var chr = tcert.getCHR();

	var crypto = new Crypto();
	var message = new ByteString("Hello World", ASCII);

	var digest = crypto.digest(Crypto.SHA_256, message);

	var signature = c.getTASignature(chr, digest);

	if (signature == null) {
		print("GetTASignature reports error: " + c.getLastError());
		return;
	}

	print("Signature: " + signature);
	var signature = CVC.wrapSignature(signature);

	// Important: Test only works for fixed domain parameter !!!
	var dp = new Key();
	dp.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));

	var puk = tcert.getPublicKey(dp);
	var mech = CVC.getSignatureMech(tcert.getPublicKeyOID());

	print("Message: " + message);
	print("Hash: " + digest);

	print("Signature verification: " + crypto.verify(puk, mech, message, signature));
}

/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A Bitmap
 */

/**
 * Create a bit map for the given number of bits.
 *
 * @class Class implementing a bit map
 * @constructor
 * @param {Number} size the number of bits in the bit map.
 */
function Bitmap(size) {
	this.size = size;
	this.bits = [];
	size = (size - 1 >> 3) + 1;
	for (var i = 0; i < size; i++) {
		this.bits.push(0);
	}
}

exports.Bitmap = Bitmap;



/**
 * Get the bit value at the zero-based position.
 *
 * @param {Number} pos the zero-based position in the bit map.
 * @type Number
 * @return 0 or 1
 */
Bitmap.prototype.get = function(pos) {
	if (pos < 0 || pos >= this.size) {
		throw new Error("pos out of range");
	}
	return (this.bits[pos >> 3] >> 7 - (pos & 0xF)) & 1;
}



/**
 * Toggle the bit at the zero-based position.
 *
 * @param {Number} pos the zero-based position in the bit map.
 */
Bitmap.prototype.toggle = function(pos) {
	if (pos < 0 || pos >= this.size) {
		throw new Error("pos out of range");
	}
	this.bits[pos >> 3] ^= 0x80 >> (pos & 0x7);
}



/**
 * Determine the position of the first unset bit.
 *
 * @type Number
 * @return the zero-based position of -1
 */
Bitmap.prototype.determineFirstUnset = function() {
	for (var i = 0; i < this.bits.length; i++) {
		var a = this.bits[i];
		if (a != 0xFF) {
			for (var j = 0; j < 8 && ((i << 3) + j < this.size); j++) {
				if ((a & 0x80) == 0) {
					return (i << 3) + j;
				}
				a <<= 1;
			}
		}
	}
	return -1;
}



Bitmap.test = function() {
	var map = new Bitmap(2);
	assert(map.determineFirstUnset() == 0);
	assert(map.get(0) == 0);
	map.toggle(0);
	assert(map.get(0) == 1);
	assert(map.determineFirstUnset() == 1);
	map.toggle(1);
	assert(map.determineFirstUnset() == -1);

	map.toggle(0);
	assert(map.get(0) == 0);
	assert(map.determineFirstUnset() == 0);

	var map = new Bitmap(256);

	for (var i = 0; i < 257; i++) {
		var id = map.determineFirstUnset();
		if (id == -1) {
			assert(i == 256);
			break;
		}
		map.toggle(id);
		print(map.bits);
	}

	for (var i = 0; i < 256; i++) {
		map.toggle(i);
		print(map.bits);
	}
}



/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview
 * Simple CRL generator class
 */

var PKIXCommon = require("scsh/x509/PKIXCommon").PKIXCommon;



/**
 * Create a Certificate Revocation List (CRL) generator.
 *
 * @class Class implementing a CRL certificate generator
 * @constructor
 *
 * @param {Crypto} crypto the crypto provider to use for signing operations
 */
function CRLGenerator(crypto) {
	this.crypto = crypto;
	this.reset();
}

exports.CRLGenerator = CRLGenerator;


CRLGenerator.unspecified = 0;
CRLGenerator.keyCompromise = 1;
CRLGenerator.cACompromise = 2;
CRLGenerator.affiliationChanged = 3;
CRLGenerator.superseded = 4;
CRLGenerator.cessationOfOperation = 5;
CRLGenerator.certificateHold = 6;
CRLGenerator.removeFromCRL = 8;
CRLGenerator.privilegeWithdrawn = 9;
CRLGenerator.aACompromise = 10;



/**
 * Resets all internal state variables.
 *
 */
CRLGenerator.prototype.reset = function() {
	this.extensions = [];
	this.revokedCertificates = [];
	this.nextUpdate = null;
}



/**
 * Sets the isser name.
 *
 * <p>The issuer name must be a JavaScript object containing the properties:</p>
 * <ul>
 *  <li>C - the country</li>
 *  <li>O - the organization</li>
 *  <li>OU - the organization unit</li>
 *  <li>CN - the common name</li>
 * </ul>
 * <p>Example:</p>
 * <pre>
 *	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 * </pre>
 * @param {Object} issuer the issuer name
 */
CRLGenerator.prototype.setIssuer = function(issuer) {
	this.issuer = issuer;
}



/**
 * Sets the timestamp for this CRL
 *
 * @param {Date} datetime the current date and time
 */
CRLGenerator.prototype.setThisUpdate = function(datetime) {
	this.thisUpdate = datetime;
}



/**
 * Sets the timestamp for the next update
 *
 * @param {Date} datetime the date and time of the next update
 */
CRLGenerator.prototype.setNextUpdate = function(datetime) {
	this.nextUpdate = datetime;
}



/**
 * Sets the signature algorithm.
 *
 * @param {Number} alg the signature algorithm, must be one of Crypto.RSA, Crypto.RSA_SHA256 or Crypto.ECDSA_SHA256
 */
CRLGenerator.prototype.setSignatureAlgorithm = function(alg) {
	this.signatureAlgorithm = alg;
}



/**
 * Adds an extension to the CRL
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *    Extension  ::=  SEQUENCE  {
 *        extnID      OBJECT IDENTIFIER,
 *        critical    BOOLEAN DEFAULT FALSE,
 *        extnValue   OCTET STRING
 *                    -- contains the DER encoding of an ASN.1 value
 *                    -- corresponding to the extension type identified
 *                    -- by extnID
 *        }
 *</pre>
 * @param {String} extnID the extensions object identifier
 * @param {Boolean} critical the extension is critical
 * @param {ByteString} the extension value as ByteString
 */
CRLGenerator.prototype.addExtension = function(extnID, critical, extnValue) {
	var t = new ASN1("extension", ASN1.SEQUENCE,
				new ASN1("extnID", ASN1.OBJECT_IDENTIFIER, new ByteString(extnID, OID))
			);

	if (critical) {
		t.add(new ASN1("critical", ASN1.BOOLEAN, new ByteString("FF", HEX)));
	}

	t.add(new ASN1("extnValue", ASN1.OCTET_STRING, extnValue));
	this.extensions.push(t);

}



/**
 * Adds the authority public key identifier extension based on the issuers key.
 *
 * <p>The key identifier is calculated as SHA-1 hash over the contents of the
 * issuer public key (Without tag, length and number of unused bits.</p>
 */
CRLGenerator.prototype.addAuthorityKeyIdentifierExtension = function(publicKey) {
	if (publicKey.getComponent(Key.MODULUS)) {
		var spi = PKIXCommon.createRSASubjectPublicKeyInfo(publicKey);
	} else {
		var spi = PKIXCommon.createECSubjectPublicKeyInfo(publicKey, this.encodeECDomainParameter);
	}

	var keyvalue = spi.get(1).value.bytes(1);
	var hash = this.crypto.digest(Crypto.SHA_1, keyvalue);

	var t = new ASN1(ASN1.SEQUENCE,
					new ASN1(0x80, hash)
				);
	this.addExtension("id-ce-authorityKeyIdentifier", false, t.getBytes());
}



/**
 * Adds the CRL number extension.
 *
 */
CRLGenerator.prototype.addCRLNumberExtension = function(crlnumber) {
	var t = new ASN1(ASN1.INTEGER,
					PKIXCommon.convertUnsignedInteger(ByteString.valueOf(crlnumber))
				);
	this.addExtension("id-ce-cRLNumber", false, t.getBytes());
}



/**
 * Add a revoked certificate to the list. This adds the complete DER encoded structure.
 *
 * @param {ASN1} revokedCertificate the information related to the revoked certificate
 */
CRLGenerator.prototype.addRevokedCertificate = function(revokedCertificate) {
	this.revokedCertificates.push(revokedCertificate);
}



CRLGenerator.prototype.createInvalidityDateExt = function(invalidityDate) {
	var t = new ASN1("extension", ASN1.SEQUENCE,
			new ASN1("extnID", ASN1.OBJECT_IDENTIFIER,
				 new ByteString("id-ce-invalidityDate", OID)));

	var extnValue = new ASN1("invalidityDate", ASN1.GeneralizedTime,
				 new ByteString(PKIXCommon.dtoUTCFullYear(invalidityDate), ASCII));

	t.add(new ASN1("extnValue", ASN1.OCTET_STRING, extnValue.getBytes()));

	return t;
}


/**
 * Add a revoked certificate to the list. This adds the complete DER encoded structure.
 *
 * @param {ByteString} serial the serial number of the certificate to revoke
 * @param {Date} timestamp the revocation time, optional, default is now
 * @param {Number} reason the revocation reason
 * @param {ASN1} ext the crl entry extensions
 */
CRLGenerator.prototype.revokeCertificate = function(serial, timestamp, reason, ext) {
	if (typeof(timestamp) == "undefined") {
		timestamp = new Date();
	}
	var t = new ASN1("revokedCertificate", ASN1.SEQUENCE,
				new ASN1("userCertificate", ASN1.INTEGER, PKIXCommon.convertUnsignedInteger(serial)),
				new ASN1("revocationTime", ASN1.UTCTime, new ByteString(PKIXCommon.dtoUTC(timestamp), ASCII))
				);

	if (typeof(ext) == "undefined") {
		ext = new ASN1("crlExtensions", ASN1.SEQUENCE);
	}

	if ((typeof(reason) != "undefined") && (reason != -1)) {
		ext.add(new ASN1("reason", ASN1.SEQUENCE,
					new ASN1("extnID", ASN1.OBJECT_IDENTIFIER, new ByteString("id-ce-cRLReasons", OID)),
					new ASN1("extnValue", ASN1.OCTET_STRING,
						(new ASN1("cRLReason", ASN1.ENUMERATED, ByteString.valueOf(reason))).getBytes())
					)
				);
	}

	if (ext.length > 0) {
		t.add(ext);
	}

	this.revokedCertificates.push(t);
}



/**
 * Load list of revoked certificates from an existing CRL
 *
 * @param {ByteString} crlbin the DER encoded CRL
 * @type Number
 * @return the value of the CRLNumber extension, 0 if extension not defined or -1 if file could not be loaded
 */
CRLGenerator.prototype.loadCRLEntries = function(crlbin) {
	var crlnumber = 0;

	try	{
		var crl = new ASN1(crlbin);
		print(crl);
		var tbs = crl.get(0);
		var i = 0;
		if ((i < tbs.elements) && (tbs.get(i).tag == ASN1.INTEGER)) {		// Skip version if present
			i++;
		}
		i += 3;		// Skip signature, issuer, thisUpdate
		if ((i < tbs.elements) && (tbs.get(i).tag == ASN1.UTCTime)) {		// nextUpdate if present
			i++;
		}
		if ((i < tbs.elements) && (tbs.get(i).tag == ASN1.SEQUENCE)) {
			for (var j = 0; j < tbs.get(i).elements; j++) {
				this.revokedCertificates.push(tbs.get(i).get(j));
			}
			i++;
		}
		if ((i < tbs.elements) && (tbs.get(i).tag == 0xA0)) {
			var l = tbs.get(i).get(0);
			var oid = new ByteString("id-ce-cRLNumber", OID);
			for (var j = 0; j < l.elements; j++) {
				var ext = l.get(j);
				if (ext.get(0).value.equals(oid)) {
					var extval = new ASN1(ext.get(1).value);
					crlnumber = extval.value.toUnsigned();
				}
			}

		}
	}
	catch(e) {
		GPSystem.trace(e);
		return -1;
	}
	return crlnumber;
}



/**
 * Gets the issuer name as TLV object
 *
 * @return the issuer RDNSequence
 * @type ASN1
 */
CRLGenerator.prototype.getIssuer = function() {
	if (this.issuer instanceof ASN1) {
		return this.issuer;
	} else {
		return PKIXCommon.encodeName(this.issuer);
	}
}



/**
 * Gets the thisUpdate TLV object
 *
 * @return the thisUpdate UTC encoded time
 * @type ASN1
 */
CRLGenerator.prototype.getThisUpdate = function() {
	var t = new ASN1("thisUpdate", ASN1.UTCTime, new ByteString(PKIXCommon.dtoUTC(this.thisUpdate), ASCII));
	return t;
}



/**
 * Gets the nextUpdate TLV object
 *
 * @return the nextUpdate UTC encoded time
 * @type ASN1
 */
CRLGenerator.prototype.getNextUpdate = function() {
	var t = new ASN1("nextUpdate", ASN1.UTCTime, new ByteString(PKIXCommon.dtoUTC(this.nextUpdate), ASCII));
	return t;
}



/**
 * Gets the signature algorithm TLV object
 *
 * @return the signature algorithm object
 * @type ASN1
 */
CRLGenerator.prototype.getSignatureAlgorithm = function() {
	return PKIXCommon.encodeSignatureAlgorithm(this.signatureAlgorithm);
}



/**
 * Gets revoked certificates
 *
 * @return the list of revoked certificates
 * @type ASN1
 */
CRLGenerator.prototype.getRevokedCertificates = function() {
	var t = new ASN1("revokedCertificates", ASN1.SEQUENCE);
	for (var i = 0; i < this.revokedCertificates.length; i++) {
		t.add(this.revokedCertificates[i]);
	}
	return t;
}



/**
 * Gets the CRL extension as TLV object
 *
 * @return the CRL extensions
 * @type ASN1
 */
CRLGenerator.prototype.getExtensions = function() {
	var t = new ASN1("extensions", 0xA0);
	var s = new ASN1("extensions", ASN1.SEQUENCE);

	t.add(s);

	for (var i = 0; i < this.extensions.length; i++) {
		s.add(this.extensions[i]);
	}
	return t;
}



/**
 * Gets the part of the CRL that will be signed
 *
 * @return the TBSCertificate part
 * @type ASN1
 */
CRLGenerator.prototype.getTbsCertificateList = function() {
	var t = new ASN1("tbsCertList", ASN1.SEQUENCE);
	t.add(new ASN1("version", ASN1.INTEGER, new ByteString("01", HEX)));
	t.add(this.getSignatureAlgorithm());
	t.add(this.getIssuer());
	t.add(this.getThisUpdate());
	if (this.nextUpdate != null) {
		t.add(this.getNextUpdate());
	}
	if (this.revokedCertificates.length > 0) {
		t.add(this.getRevokedCertificates());
	}
	if (this.extensions.length > 0) {
		t.add(this.getExtensions());
	}
	return t;
}



/**
 * Generates the certificate.
 *
 * @return the generated certificate
 * @type X509
 */
CRLGenerator.prototype.generateCRL = function(privateKey) {
	var certlist = new ASN1("certificateList", ASN1.SEQUENCE);

	var tbs = this.getTbsCertificateList();
	certlist.add(tbs);
	certlist.add(this.getSignatureAlgorithm());

	var signature = this.crypto.sign(privateKey, this.signatureAlgorithm, tbs.getBytes());
	signature = (new ByteString("00", HEX)).concat(signature);

	var signatureValue = new ASN1("signatureValue", ASN1.BIT_STRING, signature);
	certlist.add(signatureValue);

	return certlist;
}



CRLGenerator.test = function() {

	var crypto = new Crypto();

	var caPrivateKey = new Key();
	caPrivateKey.setType(Key.PRIVATE);

	var caPublicKey = new Key();
	caPublicKey.setType(Key.PUBLIC);
	caPublicKey.setSize(1024);

	crypto.generateKeyPair(Crypto.RSA, caPublicKey, caPrivateKey);

	var x = new CRLGenerator(crypto);

	x.reset();
	x.setSignatureAlgorithm(Crypto.RSA);
	var issuer = [{ C:"UT" },{ O:"ACME Corporation" },{ CN:"Test-CA" }];
	x.setIssuer(issuer);
	var now = new Date();
	x.setThisUpdate(now);
	var nextMonth = new Date();
	nextMonth.setMonth((now.getMonth() + 1) % 12);
	x.setNextUpdate(nextMonth);
	x.addAuthorityKeyIdentifierExtension(caPublicKey);
	x.addCRLNumberExtension(11);

	x.revokeCertificate(new ByteString("01", HEX));
	x.revokeCertificate(new ByteString("80", HEX), new Date());
	x.revokeCertificate(new ByteString("80", HEX), new Date(), CRLGenerator.keyCompromise);
	x.revokeCertificate(new ByteString("80", HEX), new Date(), CRLGenerator.superseded, new ASN1("crlExtensions", ASN1.SEQUENCE));

	var extensions = new ASN1("crlExtensions", ASN1.SEQUENCE);
	extensions.add(x.createInvalidityDateExt(new Date()));
 	x.revokeCertificate(new ByteString("80", HEX), new Date(), CRLGenerator.superseded, extensions);

	var crl = x.generateCRL(caPrivateKey);

	var fn = GPSystem.mapFilename("crl.crl", GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, crl.getBytes());

	print(crl);

	var x = new CRLGenerator(crypto);
	x.reset();
	x.setSignatureAlgorithm(Crypto.RSA);
	var issuer = [{ C:"UT" },{ O:"ACME Corporation" },{ CN:"Test-CA" }];
	x.setIssuer(issuer);
	var now = new Date();
	x.setThisUpdate(now);
	var nextMonth = new Date();
	nextMonth.setMonth((now.getMonth() + 1) % 12);
	x.setNextUpdate(nextMonth);
	var crlnumber = x.loadCRLEntries(crl.getBytes());
	assert(crlnumber == 11);
	x.addAuthorityKeyIdentifierExtension(caPublicKey);
	x.addCRLNumberExtension(crlnumber + 1);

	x.revokeCertificate(crypto.generateRandom(8), new Date(), CRLGenerator.keyCompromise);
	var crl = x.generateCRL(caPrivateKey);
//	PKIXCommon.writeFileToDisk(fn, crl.getBytes());

	print(crl);
}


          democa  5L  00
+* |,8[7|E0	ӳq(W &s
ae rw{;k5RBMm4+Z/g&R"?qtۼSƢ!o,S,rf62ʬu.o}jihLVzqp'.Z`U)FX.AE5W:V'ѿ.YS"E!?f);""{ɈI`K-oSRusQu[Ѿ+#@xm3s3
?e 0My}F\DK#\LuO݆@
V-kYK1G뻼ç*I
}$G'To0ٰ8XTQ#[DA
5r1
b SƏnkk".Q{OXJFQ$z-"YC%';}ꍀ C59+hd=CݧcU5"j;iվ*@e	!23zUDkEg*j蠡<Ϊ̟fc]%m3>KjcxL7 o;8aغG+ dqQ35ZJ\z%/E~e8I~glWr߻hv[UPNh~!qy#lBk[;̔{
)hr)Xe/7A'h}C7F>_.~#[ѧA`B֗ŬsrAe\NU\벘ЅΞcN<cJ4Y땾 :pL w&M`u_`f4嫝zxu{
A4w&׏\tVU"'ׇ16RښiY7s@N'Z`	 !'u@E;(^'Q:[$MsdpBѲ<)YPQJŠOjbk|8w%rKx=nz]1+r|s
lR=cLvpW=l'-S4Y3ǵmRIK|<~l""N`j9DČ|O'_ v&F&ېp5ي 
BͨD>ׅbɽDkmMp˝M	E4vE0ƈ[W\ fBt K*jpǇt    X.509  r0n0V=0
	*H
 0C10	UDE10U
CardContact10UCardContact Demo CA 10
120224142127Z
220221142127Z0C10	UDE10U
CardContact10UCardContact Demo CA 10"0
	*H
  0
 }hz܊_2"Syt~´0VmC"Pb9L+;ެnirVQ;5-U]&wv.-gF#t8Nk7V	C9+zlZ^x'||aGrx~hЏWGpn
{^bƆ6)44
nv2~> ,a3}rNWt{}fJ<7p{ĴF+F f0d0UˢeDd*zWe{0U#0ˢeDd*zWe{0U0U00
	*H
  El8
_= >]vw_
F)6`íw|&{(_ѝ̒<?Eք[(sh$Pq=n>|ٴh;XF	?Qۭ&vd4鲱JLP 
SkN'q>t
l93}]tT+UXOk>EguqC!ȋ_yJo`t4kjBj5lx~f#zWthqrE^
*$d_eQIlܘnoZB]Ρ`E&-r1{0;0	*H
00
	*H


0
0N*H

00)
*H
055HiϵG> PmWm!OMk}]sЧZP-3ۺWae~Be<8Ц$fc
Zb
"L$D&o[?^CTtH&!dʿx$DFʇ}hXͧ' q,1lgQsK1bôkR@W}{fToWw`v	
)zYNŕĳj 0>]be,\|ȯoeySlS)#2dOQ vuLοWˮd7S
+OT揋;ٛ\#ZA@$Vح~꓄rmvFWdL
5=n>* lypw,!O-5Kʏaob64q]SܘɰMN|=g8&5vvPcƫ^TQl9}e]EEߢ8Lwf{Or`pU];(>5.-eF9
͂ˮ:ԟw+mjp@)W.M>6CR0-#[IWtmhUqb:Ǌԭ;/
ђ[~Ruvba׵^0@%`0dL5{8f[C'_kN~ll',e#GFC(Zٸ9fbDhZim-]3.B6;gM, "׽?
U|䍒zFյw	xb~KivH
h
B+
uå5w@}"]Jiu!c[Y
Ɋ?8,#`]liľw2B
6dQt
HP/vtwȇzK.ܩ
L/e4[By#c[r
6/3ݶlMQ_wʉ!c$4^ޢq 	v?>ag`r_û*<pTZ*_=l6u97.}	v+}c_V	1VvN@Lhՙ%x6g;SNݽ\dJhmK1ᑊ<(wl
^HSnc@V+Aj3jJ^_ 1ImېRH__^1ԡQbn#|se<<@!hURm1@0	*H
	1 d e m o c a0!	*H
	1Time 15998240775250L*H

00)
*H
0BA!0kEO6a/ Prkx{8t"IJ$Y{S򗞮4NiNg╝G	V87a:Tƈ=Ph>,s$-,hE9>c]?J_dߚ_CJv@=fmU{UufH`,Sx>@d\FxJ5JC7,-˙R`zptrm3kpTMhpnQs#INr=98)mjZ
)˽	=Ѣ;G@mHI>]!^}wg%FKna0j2֤5PF4R1(~,jNz-f'X엵Z(:cԍЯ0EGIǕwOaވS{x?gd/_Ga(\dۖs&@aUKUy1;0:,.XN1&ܼ`fmh_s]0*d@:R7 ~-#zVK1g2*dOkźqR2б;O?`<
&0-󡉅#Y &4Cq>5
#-EuঢeWQۛs";-.^9Iݶ7a4&X
b Ηw(2\rAөuc9ylE8}֜4-B@h$x0mrt8CEYGVDL7ݷ-d.~J/ph5Bd7]vj)ѵyǽM-c={cDH(}e
%@f^X6:*TKT
e4BnegGv<ɔ7Vʪԃ :OFQe8jK(?Ly־vNN Ƶu<2FH0o
ȭ~&l:>TMn8\s<SjÝhtrO5 +-׺,f>Tx՛|pS8N^pņ6m _IBߋ@IMfҐzY2v[H$$[:#?f$r~.gTX
bD1®mn/0{\%ML%]q;IE9&Jv+D0
o	76^Qk9p	^5U3_1>0	*H
	1
 s u b c a0!	*H
	1Time 15998240777470	*H

0	 0	*H
0)
*H
0z ͍J#vGC P8HI;aH<G$M#v2Р
V	A'1˽0]~Yz6,ğVq8D*գ<z㠤2Q;j<0F饈йMQ37UiI2:a$cC1qd3WR;`]i_	;1(SmLb<:cQ+{j:"dECɼ[=tLK4mJ3G\0VFNo)KJ36p'rGSG\5L7Vd{?-6)u}hlj(P|gFI߿UwW̵.1ڣ:Nl6lcӿh4[s{*H, 	$}
u Sby$Z5p|<r! f<e_bfhgp6F!X
SE2a_^#s @-įfG	jz&RE/*Se-T
R0JBD4f
	qOtN	ξxTs/)O3gJ{֢Vi"JzcIG{
v:]%\x˞/?ң:}XTb\'('m-P5=E<aˡe_	:MqY;TC;XDռK0nW[oݾG
+4< j;tEapU1Y:4&,8~nϸ(հmh*iB:z 
/{O1!Ee)dЍcybx*{׈.J)PO0TN'ed~vԜ6g=C<gҩ'xGs7b8SAR8ֳA^w3
n>R_	r6.^KxEO:~i<d
d_`
a\7rؗxPCs0xR2No)edIuH'p{:Pc<#j\$
rޯ{9%,gb7I$
APpkŔշ
\\]sYb]/lkƿ#iSg/	^B}
Gɘ-y<c:4,R\\dG?G=ֲ5PcqKfi:lhPz~OT[c&Ts,6+u4LLeҰáO8%ƥ^Њ2|ƛpbEɄQa/sAjb3|9$l<0nf(񿲷M/
؞g*1Vns:WtժA~5|v]5Tħ$ϜuI|Fg0s(W]ӿt"ycx.qӄ·䞫R  r|7!BMdɃ/+Z7PmAd^9gKkI&S+h`bf	Ӿ{<E\K&o-~T d*&l
!Eû,l50d~F
/"/.JeOiX3	|j!7;[a-)3N\<LFGvnÌۯ+؉6Ʀq6o=`HVs#iKPv;2
L6м:-Ni|s,+ ceqZky{~I+rb98m(9Po^ԤgYMYH1tqDS|ɀcR\ 1PmTѕC0ʃG&Iq
@Ej7^X<og:*Eճ(	T	*W\(O㾊/-1~>GXm`%
p&0>0!0	+ `]]+(E5Mר5'$MRW<a)HRN/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2016 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Encoder for Distinguished Names using input data and a mask
 */

var PKIXCommon			= require("scsh/x509/PKIXCommon").PKIXCommon;



/**
 * An instance of this class allow generating a Distinguished Name from components
 * defined in the mask given as constructor. The mask may contain placeholders in the
 * form ${major.minor} that are resolved against other DNs and objects set with setDN() or
 * setMap().
 *
 * @constructor
 * @param {String} mask the mask for generating the DN
 */
function DNEncoder(mask) {
	this.dnmask = PKIXCommon.parseDN(mask);
	this.dnmap = {};
	this.objmap = {};
}

exports.DNEncoder = DNEncoder;



/**
 * Register a DN under the given name. Elements in the DN can be referenced by ${major.minor}
 * with major set to the name given as argument and minor being the component in the given DN.
 *
 * @param {String} name the name for the major key
 * @param {String/Object} dn the Distinguished Name given as String or in the format returned by PKIXCommon.parseDN.
 */
DNEncoder.prototype.setDN = function(name, dn) {
	if (typeof(dn) == "string") {
		dn = PKIXCommon.parseDN(dn);
	}
	this.dnmap[name] = dn;
}



/**
 * Register an object and it properties the given name. Elements in the object can be referenced by ${major.minor}
 * with major set to the name given as argument and minor being the member of the given object.
 *
 * @param {String} name the name for the major key
 * @param {Object} map the map object
 */
DNEncoder.prototype.setMap = function(name, map) {
	this.objmap[name] = map;
}



/**
 * Replace key with value from DN
 * @private
 * @param {Object} o the DN object
 * @param {String} major the major key value
 * @param {String} minor the minor key value
 * @type String
 * @return the replacement value
 */
DNEncoder.prototype.replaceFromDN = function(o, major, minor) {
	var v = PKIXCommon.findRDN(o, minor.toUpperCase());
	if (!v) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Element " + minor + " not found in " + major);
	}
	return v;
}



/**
 * Replace key with value from object
 * @private
 * @param {Object} o the object
 * @param {String} major the major key value
 * @param {String} minor the minor key value
 * @type String
 * @return the replacement value
 */
DNEncoder.prototype.replaceFromObject = function(o, major, minor) {
	if (typeof(o[minor]) == "undefined") {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "Element " + minor + " not found in " + major);
	}
	return o[minor];
}



/**
 * Replace key
 * @private
 * @param {String} key the in the format ${major.minor}
 * @type String
 * @return the replacement value
 */
DNEncoder.prototype.replace = function(key) {
	var r = /\$\{(\w+)\.(\w+)\}/.exec(key);
	if (r == null) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "The expression " + key + " is not valid");
	}

	var major = r[1];
	var minor = r[2];

	var o = this.dnmap[major];
	if (typeof(o) != "undefined") {
		return this.replaceFromDN(o, major, minor);
	} else {
		var o = this.objmap[major];

		if (typeof(o) != "undefined") {
			return this.replaceFromObject(o, major, minor);
		} else {
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "Unknown major key " + major);
		}
	}
}



/**
 * Check key for validity
 * @private
 * @param {String} key the in the format ${major.minor}
 */
DNEncoder.prototype.check = function(key) {
	var r = /\$\{(\w+)\.(\w+)\}/.exec(key);
	if (r == null) {
		throw new GPError(module.id, GPError.INVALID_DATA, 0, "The expression " + key + " is not valid");
	}

	var major = r[1];
	var minor = r[2];

	var o = this.dnmap[major];
	if (typeof(o) != "undefined") {
		if (PKIXCommon.validRDN.indexOf(minor.toUpperCase()) == -1) {
			throw new GPError(module.id, GPError.INVALID_DATA, 0, minor + " is not a supported RDN (Valid RDNs are " + PKIXCommon.validRDN + ")");
		}
	} else {
		var o = this.objmap[major];

		if (typeof(o) != "undefined") {
			if ((typeof(o.any) == "undefined") && (typeof(o[minor]) == "undefined")) {
				throw new GPError(module.id, GPError.INVALID_DATA, 0, "Unknown minor key " + minor);
			}
		} else {
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "Unknown major key " + major);
		}
	}
	return "";
}



/**
 * Iterate replacement strings
 * @private
 *
 * @param {String} func the name of the replacement function
 */
DNEncoder.prototype.iterate = function(func) {
	var dn = [];

	for (var i = 0; i < this.dnmask.length; i++) {
		var rdn = this.dnmask[i];
		var nrdn = {};
		for (var k in rdn) {
			var inp = rdn[k];
//			print(k + "=" + inp);
			var fixed = inp.split(/\$\{.+?\}/);
//			print("Fixed[" + fixed.length + "]: " + fixed);
			var keys = inp.match(/\$\{.+?\}/g);
			if (keys == null) {
				keys = [];
			}
//			print("Keys[" + keys.length + "] : " + keys);

			var res = "";
			for (var c = 0; c < (fixed.length + keys.length); c++) {
				if ((c & 1) == 0) {
					res += fixed[c >> 1];
				} else {
					res += this[func](keys[c >> 1]);
				}
			}
			nrdn[k] = res;
		}
		dn.push(nrdn);
	}
	return dn;
}



/**
 * Encode DN based on mask and previously set objects
 *
 * @type Object
 * @return DN in the format as returned by PKIXCommon.parseDN()
 */
DNEncoder.prototype.encode = function() {
	return this.iterate("replace");
}



/**
 * Validate DN mask against previously set reference objects
 *
 * DN objects can be set with setDN(name, {}). The minor key is validated against the list of
 * valid RDN as defined in PKIXCommon.validRDN.
 *
 * Other objects can be set with setMap(), but only the key names in the map are relevant. If the
 * object contains the property "any", then any minor keys are acceptable.
 *
 * The method will throw an exception if a key is invalid.
 */
DNEncoder.prototype.validate = function() {
	return this.iterate("check");
}



DNEncoder.test = function() {
	var d = new DNEncoder("c=${issuer.c},o=${issuer.o},cn=ABC ${issuer.o}${servicerequest.commonName} DEF");

	d.setDN("issuer", "c=UT,o=ACME,cn=ACME Root CA");

	var sr = {
		commonName: "Hello"
	};

	d.setMap("servicerequest", sr);

	d.validate();
	print(PKIXCommon.dnToString(d.encode()));
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A PKCS#10 generator class based on RFC5280
 */

var PKIXCommon = require('scsh/x509/PKIXCommon').PKIXCommon;



/**
 * Create a PKCS#10 certificate request
 *
 * @class Class implementing a PKCS#10 certificate request
 * @constructor
 *
 * @param {Crypto} crypto the crypto provider to use for signing operations
 */
function PKCS10Generator(crypto) {
	this.crypto = crypto;
	this.reset();
}

exports.PKCS10Generator = PKCS10Generator;



/**
 * Resets all internal state variables.
 *
 */
PKCS10Generator.prototype.reset = function() {
	this.extensions = new Array();
	this.attributes = new Array();
}



/**
 * Sets the subject name.
 *
 * <p>The subject name must be a JavaScript object containing the properties:</p>
 * <ul>
 *  <li>C - the country</li>
 *  <li>O - the organization</li>
 *  <li>OU - the organization unit</li>
 *  <li>CN - the common name</li>
 * </ul>
 * <p>Example:</p>
 * <pre>
 *	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
 * </pre>
 * @see PKIXCommon.encodeName()
 *
 * The subject can also be passed an already encoded ASN.1 structure
 *
 * @param {Object} subject the subject name
 */
PKCS10Generator.prototype.setSubject = function(subject) {
	this.subject = subject;
}



/**
 * Sets the subjects public key
 *
 * <p>The methods accepts ECC and RSA Public Keys.</p>
 *
 * @param {Key} publicKey the subjects public key
 */
PKCS10Generator.prototype.setPublicKey = function(publicKey) {
	this.publicKey = publicKey;
}



/**
 * Sets the signature algorithm. Currently only Crypto.RSA is supported
 *
 * @param {Number} alg the signature algorithm, only Crypto.RSA supported
 */
PKCS10Generator.prototype.setSignatureAlgorithm = function(alg) {
	this.signatureAlgorithm = alg;
}



/**
 * Adds an extension to the certificate
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *    Extension  ::=  SEQUENCE  {
 *        extnID      OBJECT IDENTIFIER,
 *        extnValue   OCTET STRING
 *                    -- contains the DER encoding of an ASN.1 value
 *                    -- corresponding to the extension type identified
 *                    -- by extnID
 *        }
 *</pre>
 * @param {String} extnID the extensions object identifier
 * @param {ByteString} the extension value as ByteString
 */
PKCS10Generator.prototype.addExtension = function(extnID, extnValue) {
	var t = new ASN1("extension", ASN1.SEQUENCE,
				new ASN1("extnID", ASN1.OBJECT_IDENTIFIER, new ByteString(extnID, OID))
			);

	t.add(new ASN1("extnValue", ASN1.OCTET_STRING, extnValue));
	this.extensions.push(t);
}



/**
 * Adds the key usage extension.
 *
 * <p>The following flags are defined:</p>
 * <pre>
 * PKCS10Generator.digitalSignature = 0x0080;
 * PKCS10Generator.nonRepudiation   = 0x0040;
 * PKCS10Generator.keyEncipherment  = 0x0020;
 * PKCS10Generator.dataEncipherment = 0x0010;
 * PKCS10Generator.keyAgreement     = 0x0008;
 * PKCS10Generator.keyCertSign      = 0x0004;
 * PKCS10Generator.cRLSign          = 0x0002;
 * PKCS10Generator.encipherOnly     = 0x0001;
 * PKCS10Generator.decipherOnly     = 0x8000;
 * </pre>
 * @param {Number} the key usage flags as combination of the flags defined above.
 */
PKCS10Generator.prototype.addKeyUsageExtension = function(flags) {
	var t = new ASN1(ASN1.BIT_STRING, PKIXCommon.bitstringForInteger(flags));
	this.addExtension("2.5.29.15", t.getBytes());
}

// Deprecated: Use PKIXCommon. instead
PKCS10Generator.digitalSignature	= 0x0080;
PKCS10Generator.nonRepudiation		= 0x0040;
PKCS10Generator.keyEncipherment		= 0x0020;
PKCS10Generator.dataEncipherment	= 0x0010;
PKCS10Generator.keyAgreement		= 0x0008;
PKCS10Generator.keyCertSign		= 0x0004;
PKCS10Generator.cRLSign			= 0x0002;
PKCS10Generator.encipherOnly		= 0x0001;
PKCS10Generator.decipherOnly		= 0x8000;



/**
 * Adds extended key usages
 *
 * @param {String[]} the list of extended key usage object identifier
 */
PKCS10Generator.prototype.addExtendedKeyUsageExtension = function(keyusages) {
	var t = new ASN1(ASN1.SEQUENCE);
	for (var i = 0; i < keyusages.length; i++) {
		t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString(keyusages[i], OID)));
	}
	this.addExtension("id-ce-extKeyUsage", t.getBytes());
}



/**
 * Adds the BasicConstraints extension.
 *
 * @param {Boolean} cA the certificate belongs to a CA
 * @param {Number} pathLenConstraint the maximum number of subordinate CA certificates
 */
PKCS10Generator.prototype.addBasicConstraintsExtension = function(cA, pathLenConstraint) {
	var t = new ASN1("BasicConstraints",ASN1.SEQUENCE);
	if (cA) {
		t.add(new ASN1("cA", ASN1.BOOLEAN, new ByteString("FF", HEX)));
	}
	if (pathLenConstraint >= 0) {
		var bb = new ByteBuffer();
		bb.append(pathLenConstraint);
		t.add(new ASN1("pathLenConstraint", ASN1.INTEGER, bb.toByteString()));
	}
	this.addExtension("2.5.29.19", t.getBytes());
}



/**
 * Gets the subject name as TLV object
 *
 * @return the issuer RDNSequence
 * @type ASN1
 */
PKCS10Generator.prototype.getSubject = function() {
	if (this.subject instanceof ASN1) {
		return this.subject;
	}
	return PKIXCommon.encodeName(this.subject);
}



/**
 * Gets the subject's public key as TLV object
 *
 * @return the subject's public key info
 * @type ASN1
 */
PKCS10Generator.prototype.getSubjectPublicKeyInfo = function() {
	if (this.publicKey.getComponent(Key.MODULUS)) {
		return PKIXCommon.createRSASubjectPublicKeyInfo(this.publicKey);
	} else {
		return PKIXCommon.createECSubjectPublicKeyInfo(this.publicKey, this.encodeECDomainParameter);
	}
}



/**
 * Gets the extension attribute as TLV object
 *
 * @return the certificate extensions
 * @type ASN1
 */
PKCS10Generator.prototype.getExtensions = function() {
	var t = new ASN1("extensions", ASN1.SEQUENCE);
	t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("1.2.840.113549 1 9 14", OID)));
	var s = new ASN1("extensions", ASN1.SET);
	t.add(s);
	var l = new ASN1("extensions", ASN1.SEQUENCE);
	s.add(l);

	for (var i = 0; i < this.extensions.length; i++) {
		l.add(this.extensions[i]);
	}
	return t;
}



/**
 * Gets the attributes as TLV object
 *
 * @return the request attributes
 * @type ASN1
 */
PKCS10Generator.prototype.getAttributes = function() {
	var t = new ASN1("attributes", 0xA0);

	if (this.extensions.length > 0) {
		t.add(this.getExtensions());
	}

	for (var i = 0; i < this.attributes.length; i++) {
		t.add(this.attributes[i]);
	}

	return t;
}



/**
 * Gets the part of the request that will be signed
 *
 * @return the TBSCertificate part
 * @type ASN1
 */
PKCS10Generator.prototype.getTbsRequest = function() {
	var t = new ASN1("certificationRequestInfo", ASN1.SEQUENCE);
	t.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX)));
	t.add(this.getSubject());
	t.add(this.getSubjectPublicKeyInfo());
	t.add(this.getAttributes());
	return t;
}



/**
 * Generates the certificate.
 *
 * @return the generated certificate
 * @type ASN1
 */
PKCS10Generator.prototype.generateCertificationRequest = function(privateKey) {
	var request = new ASN1("certificationRequest", ASN1.SEQUENCE);

	var tbs = this.getTbsRequest();
	request.add(tbs);
	request.add(PKIXCommon.encodeSignatureAlgorithm(this.signatureAlgorithm));

	var signature = this.crypto.sign(privateKey, this.signatureAlgorithm, tbs.getBytes());
	signature = (new ByteString("00", HEX)).concat(signature);

	var signatureValue = new ASN1("signatureValue", ASN1.BIT_STRING, signature);
	request.add(signatureValue);

	return request;
}



PKCS10Generator.test = function() {

	var crypto = new Crypto();

	var reqPrivateKey = new Key();
	reqPrivateKey.setType(Key.PRIVATE);

	var reqPublicKey = new Key();
	reqPublicKey.setType(Key.PUBLIC);
	reqPublicKey.setSize(1024);

	crypto.generateKeyPair(Crypto.RSA, reqPublicKey, reqPrivateKey);

	var x = new PKCS10Generator(crypto);

	x.reset();
	x.setSignatureAlgorithm(Crypto.RSA_SHA256);

	var subject = [{C:"UT"}, {O:"Utopia CA"}, {OU:"ACME Corporation"}, {CN:"Joe Doe"} ];

	x.setSubject(subject);

	x.setPublicKey(reqPublicKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );

	var req = x.generateCertificationRequest(reqPrivateKey);
	var fn = GPSystem.mapFilename("cert.csr", GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, req.getBytes());

	print(req);

	return req;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Common classes and functions for PKIX
 */



/**
 * Common functions and constants
 */
function PKIXCommon() {
}

exports.PKIXCommon = PKIXCommon;


PKIXCommon.digitalSignature	= 0x0080;
PKIXCommon.nonRepudiation	= 0x0040;
PKIXCommon.keyEncipherment	= 0x0020;
PKIXCommon.dataEncipherment	= 0x0010;
PKIXCommon.keyAgreement		= 0x0008;
PKIXCommon.keyCertSign		= 0x0004;
PKIXCommon.cRLSign		= 0x0002;
PKIXCommon.encipherOnly		= 0x0001;
PKIXCommon.decipherOnly		= 0x8000;



/**
 * Convert integer to fixed length string with leading zeros.
 *
 * @private
 * @param {Number} value the value to convert to a string.
 * @param {Number} digits the number of digits in output string. Must be <= 20.
 * @return the 0-padded string
 * @type String
 */
PKIXCommon.itos = function(value, digits) {
	if (digits > 20) {
		throw new Error("Digits must be <= 20");
	}
	var str = "" + value;
	str = "0000000000000000000".substr(19 - (digits - str.length)).concat(str);
	return str;
}



/**
 * Convert date and time to UTC string with format YYMMDDHHMMSSZ.
 *
 * @param {Date} d the date object.
 * @return the date/time string.
 * @type String
 */
PKIXCommon.dtoUTC = function(d) {
	var s = PKIXCommon.itos(d.getUTCFullYear() % 100, 2) +
			PKIXCommon.itos(d.getUTCMonth() + 1, 2) +
			PKIXCommon.itos(d.getUTCDate(), 2) +
			PKIXCommon.itos(d.getUTCHours(), 2) +
			PKIXCommon.itos(d.getUTCMinutes(), 2) +
			PKIXCommon.itos(d.getUTCSeconds(), 2) + "Z";
	return s;
}



/**
 * Convert date and time to UTC string with format YYYYMMDDHHMMSSZ.
 *
 * @param {Date} d the date object.
 * @return the date/time string.
 * @type String
 */
PKIXCommon.dtoUTCFullYear = function(d) {
	var s = 	d.getUTCFullYear() +
			PKIXCommon.itos(d.getUTCMonth() + 1, 2) +
			PKIXCommon.itos(d.getUTCDate(), 2) +
			PKIXCommon.itos(d.getUTCHours(), 2) +
			PKIXCommon.itos(d.getUTCMinutes(), 2) +
			PKIXCommon.itos(d.getUTCSeconds(), 2) + "Z";
	return s;
}



/**
 * Add the specified number of days to a date object
 *
 * @param {Date} d the date object
 * @param {Number} days the number of days to add, may be negative
 * @type Date
 * @return a new Date object
 */
PKIXCommon.addDays = function(d, days) {
	var hour = d.getUTCHours();
	var minute = d.getUTCMinutes();
	var second = d.getUTCSeconds();
	var cd = new Date(d);
	cd.setHours(12);

	var ts = cd.getTime();
	ts += days * 24 * 60 * 60 * 1000;
	var nd = new Date(ts);

	nd.setUTCHours(hour);
	nd.setUTCMinutes(minute);
	nd.setUTCSeconds(second);
	return nd;
}



/**
 * Converts the integer value into a BIT STRING value.
 * <p>The function interprets the integer value as bitmap, where
 * bit 0 is the most significant bit of the least significant byte.</p>
 * <p>The function adds the minimum number of bytes to the final bit string
 * and encodes the "number of unused bits at the beginning.</p>
 *
 * @param {Number} val the value to convert
 * @return the bit string
 * @type ByteString
 */
PKIXCommon.bitstringForInteger = function(val) {
	var bb = new ByteBuffer();
	var b = 0;

	// Encode starting with the least significant byte
	while (val > 0) {
		b = val & 0xFF;
		bb.append(b);
		val = val >> 8;
	}

	// Determine number of unused bits
	var i = 0;
	while ((i < 8) && !(b & 1)) {
		i++;
		b >>= 1;
	}

	bb.insert(0, i);
	return bb.toByteString();
}



/**
 * Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
 *
 * This prevent interpretation of the integer representation if converted into
 * a signed ASN1 INTEGER.
 *
 * @param {ByteString} value the value to convert
 * @return the converted value
 * @type ByteString
 */
PKIXCommon.convertUnsignedInteger = function(value) {
	assert(value.length > 0);

	var i = 0;
	for (var i = 0; (i < value.length - 1) && (value.byteAt(i) == 0); i++);

	if (value.byteAt(i) >= 0x80) {
		value = (new ByteString("00", HEX)).concat(value.bytes(i));
	} else {
		value = value.bytes(i);
	}

	return value;
}



/**
 * Removes leading zero byte.
 *
 * @param {ByteString} value the value to process
 * @return the processed ByteString without leading zero byte
 * @type ByteString
 */
PKIXCommon.removeLeadingZeroBytes = function(value) {
	if (value.length > 0 && value.byteAt(0) == 0x00) {
		value = value.bytes(1);
	}

	return value;
}



/**
 * Encode PSS algorithm parameter
 */
PKIXCommon.encodePSSAlgorithmParameter = function(hashAlgorithm, saltLength) {
	var param =  new ASN1("parameters", ASN1.SEQUENCE,
			new ASN1("hashAlgorithm", 0xA0,
				new ASN1("sha256Identifier", ASN1.SEQUENCE,
					new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, hashAlgorithm),
					new ASN1("parameter", ASN1.NULL, new ByteString("", HEX)))),
			new ASN1("maskGenAlgorithm", 0xA1,
				new ASN1("mgf1SHA256Identifier", ASN1.SEQUENCE,
					new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("pkcs-1 8", OID)), // id-mgf1
					new ASN1("parameters", ASN1.SEQUENCE,
						new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, hashAlgorithm),
						new ASN1("parameter", ASN1.NULL, new ByteString("", HEX))))),
			new ASN1("hashAlgorithm", 0xA2,
				new ASN1("saltLength", ASN1.INTEGER, ByteString.valueOf(saltLength)))
			);

	return param;
}



/**
 * Gets the signature algorithm TLV object
 *
 * @return the signature algorithm object
 * @type ASN1
 */
PKIXCommon.encodeSignatureAlgorithm = function(signatureAlgorithm) {
	var t = new ASN1("signatureAlgorithm", ASN1.SEQUENCE);

	if ((signatureAlgorithm == Crypto.RSA) || (signatureAlgorithm == Crypto.RSA_SHA1)) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("sha1WithRSAEncryption", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else if (signatureAlgorithm == Crypto.RSA_SHA256) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("sha256WithRSAEncryption", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else if (signatureAlgorithm == Crypto.RSA_SHA384) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("sha384WithRSAEncryption", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else if (signatureAlgorithm == Crypto.RSA_SHA512) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("sha512WithRSAEncryption", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else if (signatureAlgorithm == Crypto.RSA_PSS_SHA1) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("id-RSASSA-PSS", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else if (signatureAlgorithm == Crypto.RSA_PSS_SHA256) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("id-RSASSA-PSS", OID)));
		t.add(PKIXCommon.encodePSSAlgorithmParameter(new ByteString("id-sha256", OID), 32));
	} else if (signatureAlgorithm == Crypto.RSA_PSS_SHA384) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("id-RSASSA-PSS", OID)));
		t.add(PKIXCommon.encodePSSAlgorithmParameter(new ByteString("id-sha384", OID), 48));
	} else if (signatureAlgorithm == Crypto.RSA_PSS_SHA512) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("id-RSASSA-PSS", OID)));
		t.add(PKIXCommon.encodePSSAlgorithmParameter(new ByteString("id-sha512", OID), 64));
	} else if (signatureAlgorithm == Crypto.ECDSA_SHA1) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("ecdsa-with-SHA1", OID)));
	} else if (signatureAlgorithm == Crypto.ECDSA_SHA224) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("ecdsa-with-SHA224", OID)));
	} else if (signatureAlgorithm == Crypto.ECDSA_SHA256) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("ecdsa-with-SHA256", OID)));
	} else if (signatureAlgorithm == Crypto.ECDSA_SHA384) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("ecdsa-with-SHA384", OID)));
	} else if (signatureAlgorithm == Crypto.ECDSA_SHA512) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("ecdsa-with-SHA512", OID)));
	} else {
		throw new GPError(module.id, GPError.INVALID_MECH, signatureAlgorithm, "Invalid algorithm");
	}

	return t;
}



PKIXCommon.algIdMap = {};
PKIXCommon.algIdMap[(new ByteString("sha1WithRSAEncryption", OID)).toString(HEX)] = Crypto.RSA_SHA1;
PKIXCommon.algIdMap[(new ByteString("sha256WithRSAEncryption", OID)).toString(HEX)] = Crypto.RSA_SHA256;
PKIXCommon.algIdMap[(new ByteString("sha384WithRSAEncryption", OID)).toString(HEX)] = Crypto.RSA_SHA384;
PKIXCommon.algIdMap[(new ByteString("sha512WithRSAEncryption", OID)).toString(HEX)] = Crypto.RSA_SHA512;
PKIXCommon.algIdMap[(new ByteString("id-RSASSA-PSS", OID)).toString(HEX)] = Crypto.RSA_PSS_SHA1;
PKIXCommon.algIdMap[(new ByteString("ecdsa-with-SHA1", OID)).toString(HEX)] = Crypto.ECDSA_SHA1;
PKIXCommon.algIdMap[(new ByteString("ecdsa-with-SHA224", OID)).toString(HEX)] = Crypto.ECDSA_SHA224;
PKIXCommon.algIdMap[(new ByteString("ecdsa-with-SHA256", OID)).toString(HEX)] = Crypto.ECDSA_SHA256;
PKIXCommon.algIdMap[(new ByteString("ecdsa-with-SHA384", OID)).toString(HEX)] = Crypto.ECDSA_SHA384;
PKIXCommon.algIdMap[(new ByteString("ecdsa-with-SHA512", OID)).toString(HEX)] = Crypto.ECDSA_SHA512;



/**
 * Return Crypto.x constant for given signatureAlgorithm
 *
 * @param {ByteString} signatureAlgorithm the algorithm
 * @param {ByteString} param the parameter (optional)
 * @type Number
 * @return the Crypto.X constant
 */
PKIXCommon.decodeSignatureAlgorithm = function(signatureAlgorithm, param) {
	if (signatureAlgorithm.equals(new ByteString("id-RSASSA-PSS", OID))) {
		if (typeof(param) == "undefined") {
			return Crypto.RSA_PSS_SHA1;
		}

		var a = new ASN1(param);
		var hashAlgorithm = null;

		for (var i = 0; i < a.elements; i++) {
			var o = a.get(i);
			if (o.tag == 0xA0) { // hashAlgorithm
				var oid = o.get(0).get(0).value;
				hashAlgorithm = this.decodeHashAlgorithm(oid);
			} else if (o.tag == 0xA1) { // MGF
				// Check MGF
				var m = o.get(0).get(0).value;
				if (!m.equals(new ByteString("pkcs-1 8", OID))) {
					throw new GPError(module.id, GPError.INVALID_MECH, 2, "Unsupported MGF");
				}

				// Check hashAlgorithm
				var oid = o.get(0).get(1).get(0).value;
				var h = this.decodeHashAlgorithm(oid);
				if (hashAlgorithm == null) {
					hashAlgorithm = h;
				} else if (hashAlgorithm != h) {
					throw new GPError(module.id, GPError.INVALID_MECH, 2, "Signature hash algorithm and MGF hash algorithm must be the same");
				}
			} else if (o.tag == 0xA2) { // saltLength
				switch(hashAlgorithm) {
					case Crypto.SHA_224:
						var expectedSalt = 28;
						break;
					case Crypto.SHA_256:
						var expectedSalt = 32;
						break;
					case Crypto.SHA_384:
						var expectedSalt = 48;
						break;
					case Crypto.SHA_512:
						var expectedSalt = 64;
						break;
					case Crypto.SHA_1:
					default:
						var expectedSalt = 20;
				}

				var salt = o.get(0).value.toUnsigned();
				if (salt != expectedSalt) {
					throw new GPError(module.id, GPError.INVALID_MECH, 2, "saltLength (" + salt + ") must match hash size (" + expectedSalt + ")");
				}
			} else if (o.tag == 0xA3) { // trailerField
				var trailerField = o.get(0).value.toUnsigned();
				if (trailerField != 1) {
					throw new GPError(module.id, GPError.INVALID_MECH, 2, "trailerField value must be 1");
				}
			}
		}

		switch(hashAlgorithm) {
			case Crypto.SHA_224:
				return Crypto.RSA_PSS_SHA224;
			case Crypto.SHA_256:
				return Crypto.RSA_PSS_SHA256;
			case Crypto.SHA_384:
				return Crypto.RSA_PSS_SHA384;
			case Crypto.SHA_512:
				return Crypto.RSA_PSS_SHA512;
			case Crypto.SHA_1:
			default:
				return Crypto.RSA_PSS_SHA1;
		}
	}

	var alg = PKIXCommon.algIdMap[signatureAlgorithm.toString(HEX)];
	return alg;
}


/**
 * Return Crypto.SHA_x constant for given OID
 *
 * @param {ByteString} oid the hash OID
 * @type Number
 * @return the Crypto.SHA_x constant
 */
PKIXCommon.decodeHashAlgorithm = function(oid) {
	//var oid = algorithmId.get(0).get(0).value.toString(HEX);

	switch (oid.toString(HEX)) {
		case new ByteString("id-sha1", OID).toString(HEX):
			return Crypto.SHA_1;
		case new ByteString("id-sha224", OID).toString(HEX):
			return Crypto.SHA_224;
		case new ByteString("id-sha256", OID).toString(HEX):
			return Crypto.SHA_256;
		case new ByteString("id-sha384", OID).toString(HEX):
			return Crypto.SHA_384;
		case new ByteString("id-sha512", OID).toString(HEX):
			return Crypto.SHA_512;
		default:
			throw new GPError(module.id, GPError.INVALID_MECH, 1, "Invalid algorithm");
	}
}



/**
 * Return Crypto.RSA or Crypto.EC depending on signature algorithm
 *
 * @param {Number} alg signature algorithm (one of Crypto.X)
 * @type Number
 * @return either Crypto.RSA or Crypto.EC
 */
PKIXCommon.keyTypeForAlgorithm = function(alg) {
	if     ((alg == Crypto.RSA) ||
		(alg == Crypto.RSA_SHA256) ||
		(alg == Crypto.RSA_SHA384) ||
		(alg == Crypto.RSA_SHA512) ||
		(alg == Crypto.RSA_PSS_SHA1) ||
		(alg == Crypto.RSA_PSS_SHA224) ||
		(alg == Crypto.RSA_PSS_SHA256) ||
		(alg == Crypto.RSA_PSS_SHA384) ||
		(alg == Crypto.RSA_PSS_SHA512)) {
		return Crypto.RSA;
	} else {
		return Crypto.EC;
	}
}



/**
 * Create tailored AlgorithmIdentifier that restricts usage of the public key.
 *
 * @param{String} restriction The restriction to apply.
 * @type ASN1
 * @return the tailored AlgorithmIdentifier;
 */
PKIXCommon.restrictedPublicKeyAlgorithmIdentifier = function(restriction) {
	switch(restriction) {
		case "PSS-SHA1":
			var puboid = new ByteString("id-RSASSA-PSS", OID);
			var hash = new ByteString("id-sha1", OID);
			break;
		case "PSS-SHA224":
			var puboid = new ByteString("id-RSASSA-PSS", OID);
			var hash = new ByteString("id-sha224", OID);
			break;
		case "PSS-SHA256":
			var puboid = new ByteString("id-RSASSA-PSS", OID);
			var hash = new ByteString("id-sha256", OID);
			break;
		case "PSS-SHA384":
			var puboid = new ByteString("id-RSASSA-PSS", OID);
			var hash = new ByteString("id-sha384", OID);
			break;
		case "PSS-SHA512":
			var puboid = new ByteString("id-RSASSA-PSS", OID);
			var hash = new ByteString("id-sha512", OID);
			break;
		case "OEAP":
		default:
			throw new GPError(module.id, GPError.INVALID_DATA, 0, "Unknown public key restriction " + this.policy.restrictPublicKey);
	}

	var info = PKIXCommon.encodePSSAlgorithmParameter(hash, 0);
	var algorithm = new ASN1("algorithm", ASN1.SEQUENCE,
		new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, puboid),
		info
	);

	return algorithm;
}



/**
 * Encode EC Parameter for inclusion in the AlgorithmIdentifier structure.
 *
 * @param{Key} publicKey the public key.
 * @type ASN1
 * @return the encoded ECParameter.
 */
PKIXCommon.encodeECParameter = function(publicKey) {
	if (!publicKey.getComponent(Key.ECC_P)) {		// Make sure curve components are available if only curve oid is defined
		publicKey.setComponent(Key.ECC_CURVE_OID, publicKey.getComponent(Key.ECC_CURVE_OID));
	}
	var ecParameter =
		new ASN1("ecParameters", ASN1.SEQUENCE,
			new ASN1("version", ASN1.INTEGER, new ByteString("01", HEX)),
			new ASN1("fieldID", ASN1.SEQUENCE,
				new ASN1("fieldType", ASN1.OBJECT_IDENTIFIER, new ByteString("prime-field", OID)),
				new ASN1("prime", ASN1.INTEGER,
					PKIXCommon.convertUnsignedInteger(publicKey.getComponent(Key.ECC_P)))
			),
			new ASN1("curve", ASN1.SEQUENCE,
				new ASN1("a", ASN1.OCTET_STRING, publicKey.getComponent(Key.ECC_A)),
				new ASN1("b", ASN1.OCTET_STRING, publicKey.getComponent(Key.ECC_B))
			),
			new ASN1("base", ASN1.OCTET_STRING,
					(new ByteString("04", HEX)).concat(publicKey.getComponent(Key.ECC_GX)).concat(publicKey.getComponent(Key.ECC_GY))),
			new ASN1("order", ASN1.INTEGER,
				PKIXCommon.convertUnsignedInteger(publicKey.getComponent(Key.ECC_N)))
		);

	var cofactor = publicKey.getComponent(Key.ECC_H);
	var i = 0;
	for (; (i < cofactor.length) && (cofactor.byteAt(i) == 0); i++);
	if (i < cofactor.length) {
		ecParameter.add(new ASN1("cofactor", ASN1.INTEGER, cofactor.bytes(i)));
	}
	return ecParameter;
}



/**
 * Creates the EC Public Key as subjectPublicKeyInfo TLV structure object.
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *	SubjectPublicKeyInfo  ::=  SEQUENCE  {
 *		algorithm            AlgorithmIdentifier,
 *		subjectPublicKey     BIT STRING  }
 *
 *	AlgorithmIdentifier  ::=  SEQUENCE  {
 *		algorithm               OBJECT IDENTIFIER,
 *		parameters              ANY DEFINED BY algorithm OPTIONAL  }
 *
 *	id-ecPublicKey OBJECT IDENTIFIER ::= {
 *		iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 }
 *
 *	ECParameters ::= CHOICE {
 *		namedCurve         OBJECT IDENTIFIER,
 *		implicitCurve      NULL,
 *		specifiedCurve     SpecifiedECDomain }
 * </pre>
 * @return the subjectPublicKey TLV structure
 * @type ASN1
 */
PKIXCommon.createECSubjectPublicKeyInfo = function(publicKey, encodeECDomainParameter) {
	var t = new ASN1("subjectPublicKeyInfo", ASN1.SEQUENCE);

	var algorithm = publicKey.algorithmIdentifier;
	if (typeof(algorithm) == "undefined") {
		algorithm = new ASN1("algorithm", ASN1.SEQUENCE,
				new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("id-ecPublicKey", OID))

			);
		if (encodeECDomainParameter) {
			algorithm.add(PKIXCommon.encodeECParameter(publicKey));
		} else {
			algorithm.add(new ASN1("parameters", ASN1.OBJECT_IDENTIFIER, publicKey.getComponent(Key.ECC_CURVE_OID)));
		}
	}

	t.add(algorithm);

	// Prefix a 00 to form correct bitstring
	// Prefix a 04 to indicate uncompressed format
	var keybin = new ByteString("0004", HEX);
	keybin = keybin.concat(publicKey.getComponent(Key.ECC_QX));
	keybin = keybin.concat(publicKey.getComponent(Key.ECC_QY));
	t.add(new ASN1("subjectPublicKey", ASN1.BIT_STRING, keybin));

	return t;
}



/**
 * Creates the RSA Public Key as subjectPublicKeyInfo TLV structure object.
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *	SubjectPublicKeyInfo  ::=  SEQUENCE  {
 *		algorithm            AlgorithmIdentifier,
 *		subjectPublicKey     BIT STRING  }
 *
 *	AlgorithmIdentifier  ::=  SEQUENCE  {
 *		algorithm               OBJECT IDENTIFIER,
 *		parameters              ANY DEFINED BY algorithm OPTIONAL  }
 *
 *	pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 }
 *
 *	rsaEncryption OBJECT IDENTIFIER ::=  { pkcs-1 1}
 *
 *	RSAPublicKey ::= SEQUENCE {
 *		modulus            INTEGER,    -- n
 *		publicExponent     INTEGER  }  -- e
 * </pre>
 *
 * @return the subjectPublicKey TLV structure
 * @type ASN1
 */
PKIXCommon.createRSASubjectPublicKeyInfo = function(publicKey) {
	var t = new ASN1("subjectPublicKeyInfo", ASN1.SEQUENCE);

	var algorithm = publicKey.algorithmIdentifier;
	if (typeof(algorithm) == "undefined") {
		algorithm = new ASN1("algorithm", ASN1.SEQUENCE,
				new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("rsaEncryption", OID)),
				new ASN1("parameters", ASN1.NULL, new ByteString("", HEX))
			);
	}

	t.add(algorithm);
	// Prefix a 00 to form correct bitstring
	var keybin = new ByteString("00", HEX);

	var modulus = publicKey.getComponent(Key.MODULUS);
	modulus = PKIXCommon.convertUnsignedInteger(modulus);

	var exponent = publicKey.getComponent(Key.EXPONENT);
	exponent = PKIXCommon.convertUnsignedInteger(exponent);

	var rsapub = new ASN1("RSAPublicKey", ASN1.SEQUENCE,
			new ASN1("modulus", ASN1.INTEGER, modulus),
			new ASN1("publicKeyExponent", ASN1.INTEGER, exponent));

	keybin = keybin.concat(rsapub.getBytes());
	t.add(new ASN1("subjectPublicKey", ASN1.BIT_STRING, keybin));

	return t;
}



/**
 * Determine key identifier according to RFC5280 using SHA-1 over the SubjectPublicKeyInfo
 *
 * @param {Key} publicKey the public key
 * @param {Boolean} encodeECDomainParameter true to include domain parameter in SPKI of EC key
 */
PKIXCommon.determineKeyIdentifier = function(publicKey, encodeECDomainParameter) {
	if (typeof(encodeECDomainParameter) == "undefined") {
		encodeECDomainParameter = true;
	}

	var spki;

	if (publicKey.getComponent(Key.MODULUS)) {
		spki = PKIXCommon.createRSASubjectPublicKeyInfo(publicKey);
	} else {
		spki = PKIXCommon.createECSubjectPublicKeyInfo(publicKey, encodeECDomainParameter);
	}

	var keyvalue = spki.get(1).value.bytes(1);
	var crypto = new Crypto();
	return (crypto.digest(Crypto.SHA_1, keyvalue));
}



/**
 * Creates a relative distinguished name component.
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *	RelativeDistinguishedName ::=
 *		SET SIZE (1..MAX) OF AttributeTypeAndValue
 *
 *	AttributeTypeAndValue ::= SEQUENCE {
 *		type     AttributeType,
 *		value    AttributeValue }
 *
 *	AttributeType ::= OBJECT IDENTIFIER
 *
 *	AttributeValue ::= ANY -- DEFINED BY AttributeType
 *
 *	DirectoryString ::= CHOICE {
 *		teletexString           TeletexString (SIZE (1..MAX)),
 *		printableString         PrintableString (SIZE (1..MAX)),
 *		universalString         UniversalString (SIZE (1..MAX)),
 *		utf8String              UTF8String (SIZE (1..MAX)),
 *		bmpString               BMPString (SIZE (1..MAX)) }
 *</pre>
 *
 * @param {String} name the components name
 * @param {String} oid the oid for the RDN
 * @param {ASN1} value the value object
 * @return the
 */
PKIXCommon.makeRDN = function(name, oid, value) {
	return new ASN1(name, ASN1.SET,
				new ASN1(ASN1.SEQUENCE,
					new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString(oid, OID)),
					value
				)
			);
}



/**
 * Adds names from the name object to the RDNSequence.
 *
 * @param {ASN1} t the sequence object
 * @param {Object} name the name object
 */
PKIXCommon.addNames = function(t, name) {
	if (name.C) {
		t.add(PKIXCommon.makeRDN("country", "id-at-countryName", new ASN1(ASN1.PrintableString, new ByteString(name.C, ASCII))));
	}
	if (name.ST) {
		t.add(PKIXCommon.makeRDN("stateOrProvinceName", "id-at-stateOrProvinceName", new ASN1(ASN1.UTF8String, new ByteString(name.ST, UTF8))));
	}
	if (name.O) {
		t.add(PKIXCommon.makeRDN("organization", "id-at-organizationName", new ASN1(ASN1.UTF8String, new ByteString(name.O, UTF8))));
	}
	if (name.OU) {
		t.add(PKIXCommon.makeRDN("organizationalUnit", "id-at-organizationalUnitName", new ASN1(ASN1.UTF8String, new ByteString(name.OU, UTF8))));
	}
	if (name.S) {
		t.add(PKIXCommon.makeRDN("stateOrProvince", "id-at-stateOrProvinceName", new ASN1(ASN1.UTF8String, new ByteString(name.S, UTF8))));
	}
	if (name.L) {
		t.add(PKIXCommon.makeRDN("locality", "id-at-localityName", new ASN1(ASN1.UTF8String, new ByteString(name.L, UTF8))));
	}
	if (name.DC) {
		t.add(PKIXCommon.makeRDN("domainComponent", "id-domainComponent", new ASN1(ASN1.UTF8String, new ByteString(name.DC, UTF8))));
	}
	if (name.T) {
		t.add(PKIXCommon.makeRDN("title", "id-at-title", new ASN1(ASN1.UTF8String, new ByteString(name.T, UTF8))));
	}
	if (name.G) {
		t.add(PKIXCommon.makeRDN("givenName", "id-at-givenName", new ASN1(ASN1.UTF8String, new ByteString(name.G, UTF8))));
	}
	if (name.SN) {
		t.add(PKIXCommon.makeRDN("surname", "id-at-surname", new ASN1(ASN1.UTF8String, new ByteString(name.SN, UTF8))));
	}
	if (name.CN) {
		t.add(PKIXCommon.makeRDN("commonName", "id-at-commonName", new ASN1(ASN1.UTF8String, new ByteString(name.CN, UTF8))));
	}
	if (name.SERIALNUMBER) {
		t.add(PKIXCommon.makeRDN("serialNumber", "id-at-serialNumber", new ASN1(ASN1.UTF8String, new ByteString(name.SERIALNUMBER, UTF8))));
	}
	if (name.DNQ) {
		t.add(PKIXCommon.makeRDN("dnQualifier", "id-at-dnQualifier", new ASN1(ASN1.UTF8String, new ByteString(name.DNQ, UTF8))));
	}
	if (name.E) {
		t.add(PKIXCommon.makeRDN("emailAddress", "id-emailAddress", new ASN1(ASN1.IA5String, new ByteString(name.E, ASCII))));
	}
	if (name.UID) {
		t.add(PKIXCommon.makeRDN("userId", "id-userId", new ASN1(ASN1.UTF8String, new ByteString(name.UID, UTF8))));
	}
}



PKIXCommon.validRDN = [ "C","ST","L","O","OU","S","DC","T","G","SN","PSEUDONYM","CN","SERIALNUMBER","DNQ","E","UID" ];

/**
 * Gets the dn as TLV object
 *
 * <p>This function support two format for names</p>
 * <pre>
 *  var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 * or
 *  var issuer = [ { C:"UT"}, { O:"ACME Corporation" }, { CN:"Test-CA"} ];
 * </pre>
 *
 * <p>It supports the following RDNs:</p>
 * <ul>
 * <li>C - country</li>
 * <li>ST - state</li>
 * <li>O - organization</li>
 * <li>OU - organizational unit</li>
 * <li>S - state or province</li>
 * <li>L - locality</li>
 * <li>DC - domain component</li>
 * <li>T - title</li>
 * <li>G - given name</li>
 * <li>SN - surname</li>
 * <li>CN - common name</li>
 * <li>SERIALNUMBER - serial number</li>
 * <li>DNQ - domain name qualifier</li>
 * <li>E - e-mail address</li>
 * <li>UID - user Id</li>
 * <p>The first format sorts the RDS in the sequence C,ST,L,O,OU,S,DC,T,G,SN,PSEUDONYM,CN,SERIALNUMBER,DNQ,E,UID</p>
 * </ul>
 * @param {Object} name the name object
 * @return the RDNSequence
 * @type ASN1
 */
PKIXCommon.encodeName = function(name) {
	var t = new ASN1("subject", ASN1.SEQUENCE);
	if (typeof(name.C) == "undefined") {
		for (var i = 0; i < name.length; i++) {
			PKIXCommon.addNames(t, name[i]);
		}
	} else {
		PKIXCommon.addNames(t, name);
	}
	return t;
}



/**
 * Return the value of the last RDN
 *
 * @param {Object[]} dn the dn array
 * @type String
 * @return the value of the last RDN
 */
PKIXCommon.makeName = function(rdnlist) {
	if (rdnlist.length == 0) {
		return undefined;
	}
	var l = rdnlist[rdnlist.length - 1];

	for (var i in l) {
		return l[i];
	}

	return undefined;
}



PKIXCommon.parseDN = function(dn) {
	assert(typeof(dn) == "string", "Parameter dn must be string");

	var e = dn.split(",");
	var rdnlist = [];

	for (var i = 0; i < e.length; i++) {
		var p = e[i].split("=");

		if (p.length < 2) {
			throw new GPError(module.id, GPError.INVALID_DATA, i, "Missing '=' in RDN " + e[i]);
		}

		if (p.length > 2) {
			throw new GPError(module.id, GPError.INVALID_DATA, i, "Too many '=' in RDN " + e[i]);
		}

		var key = p[0].trim().toUpperCase();

		if (key.length == 0) {
			throw new GPError(module.id, GPError.INVALID_DATA, i, "Key in RDN " + e[i] + " can't be empty");
		}

		if (PKIXCommon.validRDN.indexOf(key) == -1) {
			throw new GPError(module.id, GPError.INVALID_DATA, i, key + " is not a supported RDN (Valid RDNs are " + PKIXCommon.validRDN + ")");
		}

		var value = p[1].trim();

		if (value.length == 0) {
			throw new GPError(module.id, GPError.INVALID_DATA, i, "Value for " + key + " can't be empty");
		}
		var rdn = { };
		rdn[key] = value;
		rdnlist.push(rdn);
	}
	return rdnlist;
}



/**
 * Convert a DN parsed with parseDN() back into the string format
 *
 * @param {Object[]} dn the dn array
 * @type String
 * @return the DN in string format
 */
PKIXCommon.dnToString = function(dn) {
	var str = "";

	for (var i = 0; i < dn.length; i++) {
		if (str.length > 0) {
			str += ",";
		}

		for (var j in dn[i]) {
			str += j + "=" + dn[i][j];
		}
	}
	return str;
}



PKIXCommon.findRDN = function(rdnlist, c) {
	for (var i = 0; i < rdnlist.length; i++) {
		var v = rdnlist[i][c];
		if (v) {
			return v;
		}
	}
}



PKIXCommon.countryNames = {
AF:"Afghanistan",
AX:"Aeland Islands",
AL:"Albania",
DZ:"Algeria",
AS:"American Samoa",
AD:"Andorra",
AO:"Angola",
AI:"Anguilla",
AQ:"Antarctica",
AG:"Antigua and Barbuda",
AR:"Argentina",
AM:"Armenia",
AW:"Aruba",
AU:"Australia",
AT:"Austria",
AZ:"Azerbaijan",
BS:"Bahamas",
BH:"Bahrain",
BD:"Bangladesh",
BB:"Barbados",
BY:"Belarus",
BE:"Belgium",
BZ:"Belize",
BJ:"Benin",
BM:"Bermuda",
BT:"Bhutan",
BO:"Bolivia, Plurinational State of",
BQ:"Bonaire, Sint Eustatius and Saba",
BA:"Bosnia and Herzegovina",
BW:"Botswana",
BV:"Bouvet Island",
BR:"Brazil",
IO:"British Indian Ocean Territory",
BN:"Brunei Darussalam",
BG:"Bulgaria",
BF:"Burkina Faso",
BI:"Burundi",
KH:"Cambodia",
CM:"Cameroon",
CA:"Canada",
CV:"Cape Verde",
KY:"Cayman Islands",
CF:"Central African Republic",
TD:"Chad",
CL:"Chile",
CN:"China",
CX:"Christmas Island",
CC:"Cocos (Keeling) Islands",
CO:"Colombia",
KM:"Comoros",
CG:"Congo",
CD:"Congo, the Democratic Republic of the",
CK:"Cook Islands",
CR:"Costa Rica",
CI:"Cote d'Ivoire",
HR:"Croatia",
CU:"Cuba",
CW:"Curacao",
CY:"Cyprus",
CZ:"Czech Republic",
DK:"Denmark",
DJ:"Djibouti",
DM:"Dominica",
DO:"Dominican Republic",
EC:"Ecuador",
EG:"Egypt",
SV:"El Salvador",
GQ:"Equatorial Guinea",
ER:"Eritrea",
EE:"Estonia",
ET:"Ethiopia",
FK:"Falkland Islands (Malvinas)",
FO:"Faroe Islands",
FJ:"Fiji",
FI:"Finland",
FR:"France",
GF:"French Guiana",
PF:"French Polynesia",
TF:"French Southern Territories",
GA:"Gabon",
GM:"Gambia",
GE:"Georgia",
DE:"Germany",
GH:"Ghana",
GI:"Gibraltar",
GR:"Greece",
GL:"Greenland",
GD:"Grenada",
GP:"Guadeloupe",
GU:"Guam",
GT:"Guatemala",
GG:"Guernsey",
GN:"Guinea",
GW:"Guinea-Bissau",
GY:"Guyana",
HT:"Haiti",
HM:"Heard Island and McDonald Islands",
VA:"Holy See (Vatican City State)",
HN:"Honduras",
HK:"Hong Kong",
HU:"Hungary",
IS:"Iceland",
IN:"India",
ID:"Indonesia",
IR:"Iran, Islamic Republic of",
IQ:"Iraq",
IE:"Ireland",
IM:"Isle of Man",
IL:"Israel",
IT:"Italy",
JM:"Jamaica",
JP:"Japan",
JE:"Jersey",
JO:"Jordan",
KZ:"Kazakhstan",
KE:"Kenya",
KI:"Kiribati",
KP:"Korea, Democratic People's Republic of",
KR:"Korea, Republic of",
KW:"Kuwait",
KG:"Kyrgyzstan",
LA:"Lao People's Democratic Republic",
LV:"Latvia",
LB:"Lebanon",
LS:"Lesotho",
LR:"Liberia",
LY:"Libya",
LI:"Liechtenstein",
LT:"Lithuania",
LU:"Luxembourg",
MO:"Macao",
MK:"Macedonia, the Former Yugoslav Republic of",
MG:"Madagascar",
MW:"Malawi",
MY:"Malaysia",
MV:"Maldives",
ML:"Mali",
MT:"Malta",
MH:"Marshall Islands",
MQ:"Martinique",
MR:"Mauritania",
MU:"Mauritius",
YT:"Mayotte",
MX:"Mexico",
FM:"Micronesia, Federated States of",
MD:"Moldova, Republic of",
MC:"Monaco",
MN:"Mongolia",
ME:"Montenegro",
MS:"Montserrat",
MA:"Morocco",
MZ:"Mozambique",
MM:"Myanmar",
NA:"Namibia",
NR:"Nauru",
NP:"Nepal",
NL:"Netherlands",
NC:"New Caledonia",
NZ:"New Zealand",
NI:"Nicaragua",
NE:"Niger",
NG:"Nigeria",
NU:"Niue",
NF:"Norfolk Island",
MP:"Northern Mariana Islands",
NO:"Norway",
OM:"Oman",
PK:"Pakistan",
PW:"Palau",
PS:"Palestine, State of",
PA:"Panama",
PG:"Papua New Guinea",
PY:"Paraguay",
PE:"Peru",
PH:"Philippines",
PN:"Pitcairn",
PL:"Poland",
PT:"Portugal",
PR:"Puerto Rico",
QA:"Qatar",
RE:"Reunion",
RO:"Romania",
RU:"Russian Federation",
RW:"Rwanda",
BL:"Saint Bartholemy",
SH:"Saint Helena, Ascension and Tristan da Cunha",
KN:"Saint Kitts and Nevis",
LC:"Saint Lucia",
MF:"Saint Martin (French part)",
PM:"Saint Pierre and Miquelon",
VC:"Saint Vincent and the Grenadines",
WS:"Samoa",
SM:"San Marino",
ST:"Sao Tome and Principe",
SA:"Saudi Arabia",
SN:"Senegal",
RS:"Serbia",
SC:"Seychelles",
SL:"Sierra Leone",
SG:"Singapore",
SX:"Sint Maarten (Dutch part)",
SK:"Slovakia",
SI:"Slovenia",
SB:"Solomon Islands",
SO:"Somalia",
ZA:"South Africa",
GS:"South Georgia and the South Sandwich Islands",
SS:"South Sudan",
ES:"Spain",
LK:"Sri Lanka",
SD:"Sudan",
SR:"Suriname",
SJ:"Svalbard and Jan Mayen",
SZ:"Swaziland",
SE:"Sweden",
CH:"Switzerland",
SY:"Syrian Arab Republic",
TW:"Taiwan, Province of China",
TJ:"Tajikistan",
TZ:"Tanzania, United Republic of",
TH:"Thailand",
TL:"Timor-Leste",
TG:"Togo",
TK:"Tokelau",
TO:"Tonga",
TT:"Trinidad and Tobago",
TN:"Tunisia",
TR:"Turkey",
TM:"Turkmenistan",
TC:"Turks and Caicos Islands",
TV:"Tuvalu",
UG:"Uganda",
UA:"Ukraine",
AE:"United Arab Emirates",
GB:"United Kingdom",
US:"United States",
UM:"United States Minor Outlying Islands",
UY:"Uruguay",
UZ:"Uzbekistan",
VU:"Vanuatu",
VE:"Venezuela, Bolivarian Republic of",
VN:"Viet Nam",
VG:"Virgin Islands, British",
VI:"Virgin Islands, U.S.",
WF:"Wallis and Futuna",
EH:"Western Sahara",
YE:"Yemen",
ZM:"Zambia",
ZW:"Zimbabwe"
};



/**
 * Extract subject from certificate as ASN1 object
 *
 * @param {X509} cert the certificate
 * @type ASN1
 * @return the subject as ASN1
 */
PKIXCommon.getSubjectAsASN1 = function(cert) {
	var a = new ASN1(cert.getBytes());
	return a.get(0).get(5);
}



/**
 * Extract issuer from certificate as ASN1 object
 *
 * @param {X509} cert the certificate
 * @type ASN1
 * @return the issuer as ASN1
 */
PKIXCommon.getIssuerAsASN1 = function(cert) {
	var a = new ASN1(cert.getBytes());
	return a.get(0).get(3);
}



/**
 * Convert binary data to PEM format
 *
 * @param {String} label the label to be used in the MIME header and footer
 * @param {ByteString} bin the binary data
 * @type String
 * @return the MIME/BASE64 encoded string
 */
PKIXCommon.toPEM = function(label, bin) {
	assert(typeof(label) == "string", "Parameter label must be string");
	assert(bin instanceof ByteString, "Parameter bin must be ByteString");

	var str = "-----BEGIN " + label + "-----\n";

	var b64 = bin.toString(BASE64);
	while(b64.length > 0) {
		str += b64.substr(0, 64) + "\n";
		b64 = b64.substr(64);
	}

	str += "-----END " + label + "-----\n";
	return str;
}



/**
 * Parse PEM format and extract binary data
 *
 * @param {String} label the label of the section
 * @param {String} bin the binary data
 * @type String
 * @return the MIME/BASE64 encoded string
 */
PKIXCommon.parsePEM = function(label, pem) {
	assert(typeof(label) == "string", "Parameter label must be string");
	assert(typeof(pem) == "string", "Parameter pem must be string");

	var lines = pem.split("\n");

	var b64str = "";
	var parse = false;
	for (var i = 0; i < lines.length; i++) {
		var str = lines[i];

		if (str.endsWith("\r")) {
			str = str.substring(0, str.length - 1);
		}

		if (str == "-----BEGIN " + label + "-----") {
			parse = true;
		} else if (str == "-----END " + label + "-----") {
			break;
		} else if (parse) {
			b64str += str;
		}
	}

	return new ByteString(b64str, BASE64);
}



/**
 * Writes a byte string object to file
 *
 * <p>The filename is mapped to the workspace location.</p>
 *
 * @param {String} filename the fully qualified name of the file
 * @param {ByteString} content the content to write
 */
PKIXCommon.writeFileToDisk = function(filename, content) {
	var file = new java.io.FileOutputStream(filename);
	file.write(content);
	file.close();
}



/**
 * Loads a binary file from disk
 *
 * @param {String} filename the fully qualified file name
 * @return the binary content
 * @type ByteString
 */
PKIXCommon.readFileFromDisk = function(filename) {
	// Open stream
	var f = new java.io.FileInputStream(filename);

	// Determine file size
	var flen = f.available();

	// Allocate native byte array
	var bs = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, flen);

	// Read into byte array
	var len = f.read(bs);

	f.close();

	// Allocate JavaScript ByteBuffer from native/wrapped byte array
	var bb = new ByteBuffer(bs);

	// Convert to JavaScript ByteString
	var data = bb.toByteString();

	return data;
}



PKIXCommon.test = function() {
	var issuer = { C:"C", O:"O", OU:"OU", SP:"SP", L:"L", DC:"DC", T:"T", G:"G", SN:"SN", CN:"CN", SERIALNUMBER:"serial", DNQ:"DNQ" };
	var dn = PKIXCommon.encodeName(issuer);
	print(dn);

	var r = PKIXCommon.convertUnsignedInteger(new ByteString("00", HEX));
	assert(r.toString(HEX) == "00");
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("80", HEX));
	assert(r.toString(HEX) == "0080");
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("FF", HEX));
	assert(r.toString(HEX) == "00FF");
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("0000", HEX));
	assert(r.toString(HEX) == "00");
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("0080", HEX));
	assert(r.toString(HEX) == "0080");
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("000080", HEX));
	assert(r.toString(HEX) == "0080");
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A simple X.509 CA setup
 */

var PKCS8 = require("scsh/pkcs/PKCS8").PKCS8;
var PKIXCommon = require("scsh/x509/PKIXCommon").PKIXCommon;
var X509CertificateGenerator = require("scsh/x509/X509CertificateGenerator").X509CertificateGenerator;
var CRLGenerator = require("scsh/x509/CRLGenerator").CRLGenerator;



/**
 * Create a signer using a X.509 certificate
 *
 * @class Class implementing a signer having a X.509 certificate
 * @constructor
 * @param {Crypto} crypto the crypto provider
 */
function X509Signer(crypto) {
	this.crypto = crypto;
}

exports.X509Signer = X509Signer;



/**
 * Set the signer key object
 *
 * @param {Key} signerKey the signer key
 */
X509Signer.prototype.setSignerKey = function(signerKey) {
	this.signerKey = signerKey;
}



/**
 * Set the signer certificates
 *
 * @param{X509} signerCert the signer's certificate
 */
X509Signer.prototype.setSignerCertificate = function(signerCert) {
	this.signerCert = signerCert;
	this.signerSubject = new ASN1(signerCert.getNative().getSubjectX500Principal().getEncoded());
}



/**
 * Return the signer's certificate
 *
 * @type X509
 * @return the signer's certificate
 */
X509Signer.prototype.getSignerCertificate = function() {
	return this.signerCert;
}



/**
 * Create a certification authority that issues X.509 certificates and CRLs
 *
 * @class Class implementing a certification authority issuing X.509 certificates and CRLs
 * @constructor
 * @param {Crypto} crypto the crypto provider
 */
function X509CA(crypto) {
	X509Signer.call(this, crypto);
	this.crldp = [];
}

X509CA.prototype = Object.create(X509Signer.prototype);
X509CA.constructor = X509CA;

exports.X509CA = X509CA;


/**
 * Add a CRL distribution point to issued certificates
 *
 * @param {String} crldp the URL of the distribution point
 */
X509CA.prototype.addCRLDistributionPoint = function(crldp) {
	this.crldp.push(crldp);
}



/**
 * Create a new randomly generated certificate serial number
 *
 * @private
 * @type ByteString
 * @return a 8 byte bytestring that resembles an unsigned integer
 */
X509CA.prototype.newSerialNumber = function() {
	var crypto = new Crypto();
	var serial = crypto.generateRandom(8);

	// Strip first bit to make integer unsigned
	if (serial.byteAt(0) > 0x7F) {
		serial = ByteString.valueOf(serial.byteAt(0) & 0x7F).concat(serial.bytes(1));
	}
	return serial;
}



/**
 * Issue a certificate
 *
 * @param {Key} publicKey the public key
 * @param {Object[]} subject an array of RDN objects in the form [ { C:"DE" }, { O:"CardContact" }, { OU:"CardContact Demo CA 1" }, { CN:"TLS client" } ].
 *			See pkixcommon.js for details
 * @param {String} profile an extension profile name for which a addExtFor<profile> method is defined. Predefined profiles are TLSServer, TLSClient and EmailAndTLSClient.
 * @param {Object} extvalues JSON object containing extension values
 * @type X509
 * @return the new X.509 certificate
 */
X509CA.prototype.issueCertificate = function(publicKey, subject, profile, extvalues) {

	var x = new X509CertificateGenerator(this.crypto);

	x.encodeECDomainParameter = false;
	x.reset();
	x.setSerialNumber(this.newSerialNumber());
	x.setSignatureAlgorithm(Crypto.RSA_SHA256);
	x.setIssuer(this.signerSubject);
	var ced = new Date();
	var cxd = PKIXCommon.addDays(ced, 1095); // 3 years
	x.setNotBefore(ced);
	x.setNotAfter(cxd);
	x.setSubject(subject);
	x.setPublicKey(publicKey);
	x.addSubjectKeyIdentifierExtension();
	x.addAuthorityKeyIdentifierExtension(this.signerCert.getPublicKey());

	if (profile != "SubCA") {
		x.addBasicConstraintsExtension(false);
	}

	if (this.crldp.length > 0) {
		x.addCRLDistributionPointURL(this.crldp);
	}

	if (typeof(this["addExtFor" + profile]) == "function") {
		this["addExtFor" + profile](x, extvalues);
	}

	return x.generateX509Certificate(this.signerKey);
}



/**
 * Extension handler method for TLS server certificates
 *
 * @private
 */
X509CA.prototype.addExtForTLSServer = function(certgen, extvalues) {

	certgen.addKeyUsageExtension( X509CertificateGenerator.keyAgreement |
								  X509CertificateGenerator.keyEncipherment);

	certgen.addExtendedKeyUsages(["id-csn-369791-tls-server", "id-kp-serverAuth"]);

	var ext = new ASN1("subjectAltName", ASN1.SEQUENCE,
						new ASN1("dNSName", 0x82, new ByteString(extvalues["dNSName"], ASCII))
					);
	certgen.addExtension("id-ce-subjectAltName", false, ext.getBytes());
}



/**
 * Extension handler method for TLS client certificates
 *
 * @private
 */
X509CA.prototype.addExtForTLSClient = function(certgen, extvalues) {
	certgen.addKeyUsageExtension( X509CertificateGenerator.digitalSignature);

	// certgen.addExtendedKeyUsages(["id-csn-369791-tls-client", "id-kp-clientAuth"]);
	certgen.addExtendedKeyUsages(["id-kp-clientAuth"]);
}



/**
 * Extension handler method for certificates suitable for TLS client authentication and e-Mail signature and encryption
 *
 * @private
 */
X509CA.prototype.addExtForEmailAndTLSClient = function(certgen, extvalues) {

	certgen.addKeyUsageExtension( X509CertificateGenerator.digitalSignature | X509CertificateGenerator.keyEncipherment);

//	print(extvalues.email);
	var ext = new ASN1("subjectAltName", ASN1.SEQUENCE,
						new ASN1("rfc822Name", 0x81, new ByteString(extvalues["email"], ASCII))
					);
	certgen.addExtension("id-ce-subjectAltName", false, ext.getBytes());

	certgen.addExtendedKeyUsages(["id-kp-clientAuth", "id-kp-emailProtection"]);
}



/**
 * Extension handler method for code signing certificates
 *
 * @private
 */
X509CA.prototype.addExtForCodeSigning = function(certgen, extvalues) {

	certgen.addKeyUsageExtension( X509CertificateGenerator.digitalSignature );

	certgen.addExtendedKeyUsages(["id-kp-codeSigning"]);
}



/**
 * Extension handler method for Sub-CA certificates
 *
 * @private
 */
X509CA.prototype.addExtForSubCA = function(certgen, extvalues) {

	certgen.addKeyUsageExtension(PKIXCommon.keyCertSign | PKIXCommon.cRLSign );
	if (typeof(extvalues.pathLenConstraint) != "undefined") {
		certgen.addBasicConstraintsExtension(true, extvalues.pathLenConstraint);
	}
}



/**
 * Issue a CRL
 *
 * @type ByteString
 * @return the encoded CRL
 */
X509CA.prototype.issueCRL = function() {
	var x = new CRLGenerator(this.crypto);

	x.reset();
	x.setSignatureAlgorithm(Crypto.RSA_SHA256);
	x.setIssuer(this.signerSubject);
	var now = new Date();
	x.setThisUpdate(now);
	x.setNextUpdate(PKIXCommon.addDays(now, 10));

	var crl = x.generateCRL(this.signerKey);
	print("CRL:");
	print(crl);
	return crl.getBytes();
}



X509CA.dir = GPSystem.mapFilename("scsh/x509", GPSystem.USR);


/**
 * Setup the CA instance
 */
X509CA.setup = function() {
	var crypto = new Crypto();

	try	{
		var ks = new KeyStore("SUN", "PKCS12", X509CA.dir + "/DEMO-CA.p12", "openscdp");
		var priKey = new Key();
		priKey.setID("DEMOCA");

		ks.getKey(priKey, "openscdp");
		var cert = ks.getCertificate("DEMOCA");
		var pubKey = cert.getPublicKey();
	}
	catch(e) {
		var pubKey = new Key();
		pubKey.setSize(2048);
		pubKey.setType(Key.PUBLIC);

		var priKey = new Key();
		priKey.setType(Key.PRIVATE);

		crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);
	}

	var x = new X509CertificateGenerator(crypto);

	x.reset();
	x.setSerialNumber((new ByteString("02", HEX)).concat(crypto.generateRandom(7)));
	x.setSignatureAlgorithm(Crypto.RSA_SHA256);
	var subject = [ { C:"DE" }, { O:"CardContact" }, { CN:"CardContact Demo CA 1" } ];
	x.setIssuer(subject);
	var ced = new Date("2012-02-24T15:21:27+0100");
	var cxd = PKIXCommon.addDays(ced, 7300); // 20 years
	x.setNotBefore(ced);
	x.setNotAfter(cxd);
	x.setSubject(subject);
	x.setPublicKey(pubKey);
	x.addSubjectKeyIdentifierExtension();
	x.addAuthorityKeyIdentifierExtension(pubKey);
	x.addKeyUsageExtension(	PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );
	x.addBasicConstraintsExtension(true, 1);

	var cert = x.generateX509Certificate(priKey);
	print(cert);

	var ks = new KeyStore("SUN", "PKCS12");

	priKey.setID("DEMOCA");
	ks.setKey(priKey, "openscdp", [cert]);

	this.createSubCA(crypto, ks);

	ks.store(X509CA.dir + "/DEMO-CA.pkcs", "openscdp");
}



X509CA.createSubCA = function(crypto, ks) {
	var ca = new X509CA(crypto);

	var key = new Key();
	key.setID("DEMOCA");

	ks.getKey(key, "openscdp");
	ca.setSignerKey(key);

	var cert = ks.getCertificate("DEMOCA");
	ca.setSignerCertificate(cert);


	var subject = [ { C:"DE" }, { O:"CardContact" }, { CN:"CardContact Demo Sub CA 1" } ];

	var pubKey = new Key();
	pubKey.setSize(2048);
	pubKey.setType(Key.PUBLIC);

	var priKey = new Key();
	priKey.setType(Key.PRIVATE);

	crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);

	var cert = ca.issueCertificate(pubKey, subject, "SubCA", { pathLenConstraint: 0 } );
	print(cert);

	priKey.setID("SUBCA");
	ks.setKey(priKey, "openscdp", [cert]);
}



/**
 * Test the CA setup
 */
X509CA.test = function() {
	var crypto = new Crypto();
	var ca = new X509CA(crypto);

	var ks = new KeyStore("SUN", "PKCS12", X509CA.dir + "/DEMO-CA.p12", "openscdp");
	var key = new Key();
	key.setID("DEMOCA");

	ks.getKey(key, "openscdp");
	ca.setSignerKey(key);

	var cert = ks.getCertificate("DEMOCA");
	ca.setSignerCertificate(cert);


	var subject = [ { C:"DE" }, { O:"CardContact" }, { OU:"CardContact Demo CA 1" }, { CN:"TLS server" } ];

	var pubKey = new Key();
	pubKey.setSize(2048);
	pubKey.setType(Key.PUBLIC);

	var priKey = new Key();
	priKey.setType(Key.PRIVATE);

	crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);

	var extvalues = { dNSName: "www.openehic.org" };
	var cert = ca.issueCertificate(pubKey, subject, "TLSServer", extvalues);
	print(cert);

	var ks = new KeyStore("SUN", "PKCS12");

	priKey.setID("tlsserver");
	ks.setKey(priKey, "openscdp", [cert]);

	ks.store(X509CA.dir + "/www.openehic.org.jks", "openscdp");

	var p8Key = PKCS8.encodeKeyUsingPKCS8Format(priKey, pubKey);
	PKIXCommon.writeFileToDisk(X509CA.dir + "/www.openehic.org.pkcs8", p8Key);
	PKIXCommon.writeFileToDisk(X509CA.dir + "/www.openehic.org.cer", cert.getBytes());


	var subject = [ { C:"DE" }, { O:"CardContact" }, { OU:"CardContact Demo CA 1" }, { CN:"TLS client" } ];

	var pubKey = new Key();
	pubKey.setSize(2048);
	pubKey.setType(Key.PUBLIC);

	var priKey = new Key();
	priKey.setType(Key.PRIVATE);

	crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);

	var cert = ca.issueCertificate(pubKey, subject, "TLSClient", null);
	print(cert);

	var ks = new KeyStore("SUN", "PKCS12");

	priKey.setID("tlsclient");
	ks.setKey(priKey, "openscdp", [cert]);

	ks.store(X509CA.dir + "/tlsclient.jks", "openscdp");

	var crl = ca.issueCRL();
	PKIXCommon.writeFileToDisk(X509CA.dir + "/democa.crl", crl);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A X509 certificate generator class following RFC5280
 */

var PKIXCommon = require("scsh/x509/PKIXCommon").PKIXCommon;



/**
 * Create a X.509 certificate generator.
 *
 * @class Class implementing a X.509 certificate generator
 * @constructor
 *
 * @param {Crypto} crypto the crypto provider to use for signing operations
 */
function X509CertificateGenerator(crypto) {
	this.crypto = crypto;
	this.encodeECDomainParameter = true;
	this.reset();
}

exports.X509CertificateGenerator = X509CertificateGenerator;



/**
 * Resets all internal state variables.
 *
 */
X509CertificateGenerator.prototype.reset = function() {
	this.extensions = new Array();

}



/**
 * Sets the serial number.
 *
 * @param {ByteString} serialNumber the serial number for the certificate
 */
X509CertificateGenerator.prototype.setSerialNumber = function(serialNumber) {
	this.serialNumber = serialNumber;
}



/**
 * Sets the isser name.
 *
 * <p>The issuer name must be a JavaScript object containing the properties:</p>
 * <ul>
 *  <li>C - the country</li>
 *  <li>O - the organization</li>
 *  <li>OU - the organization unit</li>
 *  <li>CN - the common name</li>
 * </ul>
 * <p>Example:</p>
 * <pre>
 *	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 * </pre>
 * @param {Object} issuer the issuer name
 */
X509CertificateGenerator.prototype.setIssuer = function(issuer) {
	this.issuer = issuer;
}



/**
 * Sets the effective date for the certificate.
 *
 * @param {String or Date} date the date in format YYMMDDHHMMSSZ
 */
X509CertificateGenerator.prototype.setNotBefore = function(date) {
	this.notBefore = date;
}



/**
 * Sets the expiration date for the certificate.
 *
 * @param {String or Date} date the date in format YYMMDDHHMMSSZ
 */
X509CertificateGenerator.prototype.setNotAfter = function(date) {
	this.notAfter = date;
}



/**
 * Sets the subject name.
 *
 * <p>The subject name must be a JavaScript object containing the properties:</p>
 * <ul>
 *  <li>C - the country</li>
 *  <li>O - the organization</li>
 *  <li>OU - the organization unit</li>
 *  <li>CN - the common name</li>
 * </ul>
 * <p>Example:</p>
 * <pre>
 *	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
 * </pre>
 * @param {Object} subject the subject name
 */
X509CertificateGenerator.prototype.setSubject = function(subject) {
	this.subject = subject;
}



/**
 * Sets the subjects public key
 *
 * <p>The methods accepts ECC and RSA Public Keys.</p>
 *
 * @param {Key} publicKey the subjects public key
 */
X509CertificateGenerator.prototype.setPublicKey = function(publicKey) {
	this.publicKey = publicKey;
}



/**
 * Sets the signature algorithm.
 *
 * @param {Number} alg the signature algorithm.
 */
X509CertificateGenerator.prototype.setSignatureAlgorithm = function(alg) {
	this.signatureAlgorithm = alg;
}



/**
 * Adds an extension to the certificate
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *    Extension  ::=  SEQUENCE  {
 *        extnID      OBJECT IDENTIFIER,
 *        critical    BOOLEAN DEFAULT FALSE,
 *        extnValue   OCTET STRING
 *                    -- contains the DER encoding of an ASN.1 value
 *                    -- corresponding to the extension type identified
 *                    -- by extnID
 *        }
 *</pre>
 * @param {String} extnID the extensions object identifier
 * @param {Boolean} critical the extension is critical
 * @param {ByteString} the extension value as ByteString
 */
X509CertificateGenerator.prototype.addExtension = function(extnID, critical, extnValue) {
	var t = new ASN1("extension", ASN1.SEQUENCE,
				new ASN1("extnID", ASN1.OBJECT_IDENTIFIER, new ByteString(extnID, OID))
			);

	if (critical) {
		t.add(new ASN1("critical", ASN1.BOOLEAN, new ByteString("FF", HEX)));
	}

	t.add(new ASN1("extnValue", ASN1.OCTET_STRING, extnValue));
	this.extensions.push(t);

}



/**
 * Adds the key usage extension.
 *
 * <p>The following flags are defined:</p>
 * <pre>
 * PKIXCommon.digitalSignature = 0x0080;
 * PKIXCommon.nonRepudiation   = 0x0040;
 * PKIXCommon.keyEncipherment  = 0x0020;
 * PKIXCommon.dataEncipherment = 0x0010;
 * PKIXCommon.keyAgreement     = 0x0008;
 * PKIXCommon.keyCertSign      = 0x0004;
 * PKIXCommon.cRLSign          = 0x0002;
 * PKIXCommon.encipherOnly     = 0x0001;
 * PKIXCommon.decipherOnly     = 0x8000;
 * </pre>
 * @param {Number} the key usage flags as combination of the flags defined above.
 */
X509CertificateGenerator.prototype.addKeyUsageExtension = function(flags) {
	var t = new ASN1(ASN1.BIT_STRING, PKIXCommon.bitstringForInteger(flags));
	this.addExtension("2.5.29.15", true, t.getBytes());
}

// Deprecated: Use PKIXCommon. instead
X509CertificateGenerator.digitalSignature	= 0x0080;
X509CertificateGenerator.nonRepudiation		= 0x0040;
X509CertificateGenerator.keyEncipherment	= 0x0020;
X509CertificateGenerator.dataEncipherment	= 0x0010;
X509CertificateGenerator.keyAgreement		= 0x0008;
X509CertificateGenerator.keyCertSign		= 0x0004;
X509CertificateGenerator.cRLSign			= 0x0002;
X509CertificateGenerator.encipherOnly		= 0x0001;
X509CertificateGenerator.decipherOnly		= 0x8000;



/**
 * Adds the BasicConstraints extension.
 *
 * @param {Boolean} cA the certificate belongs to a CA
 * @param {Number} pathLenConstraint the maximum number of subordinate CA certificates
 */
X509CertificateGenerator.prototype.addBasicConstraintsExtension = function(cA, pathLenConstraint) {
	var t = new ASN1("BasicConstraints",ASN1.SEQUENCE);
	if (cA) {
		t.add(new ASN1("cA", ASN1.BOOLEAN, new ByteString("FF", HEX)));
	}
	if (pathLenConstraint >= 0) {
		var bb = new ByteBuffer();
		bb.append(pathLenConstraint);
		t.add(new ASN1("pathLenConstraint", ASN1.INTEGER, bb.toByteString()));
	}
	this.addExtension("2.5.29.19", true, t.getBytes());
}



/**
 * Adds the subject public key identifier extension based on the certificates subject key.
 *
 * <p>The key identifier is calculated as SHA-1 hash over the contents of the
 * subject public key (Without tag, length and number of unused bits.</p>
 */
X509CertificateGenerator.prototype.addSubjectKeyIdentifierExtension = function() {
	var spi = this.getSubjectPublicKeyInfo();
	var keyvalue = spi.get(1).value.bytes(1);
	var crypto = new Crypto();
	var hash = crypto.digest(Crypto.SHA_1, keyvalue);

	var t = new ASN1(ASN1.OCTET_STRING, hash);
	this.addExtension("2.5.29.14", false, t.getBytes());
}



/**
 * Adds the authority public key identifier extension based on the issuers key.
 *
 * <p>The key identifier is calculated as SHA-1 hash over the contents of the
 * issuer public key (Without tag, length and number of unused bits.</p>
 *
 * @param {Key/ByteString} publicKeyOrId the authority subject key or authority key identifier
 */
X509CertificateGenerator.prototype.addAuthorityKeyIdentifierExtension = function(publicKeyOrId) {
	if (publicKeyOrId instanceof Key) {
		if (publicKeyOrId.getComponent(Key.MODULUS)) {
			var spi = PKIXCommon.createRSASubjectPublicKeyInfo(publicKeyOrId);
		} else {
			var spi = PKIXCommon.createECSubjectPublicKeyInfo(publicKeyOrId, this.encodeECDomainParameter);
		}

		var keyvalue = spi.get(1).value.bytes(1);
		var crypto = new Crypto();
		var hash = crypto.digest(Crypto.SHA_1, keyvalue);
	} else {
		var hash = publicKeyOrId;
	}

	var t = new ASN1(ASN1.SEQUENCE,
					new ASN1(0x80, hash)
	);
	this.addExtension("2.5.29.35", false, t.getBytes());
}



/**
 * Adds the CRL distribution point URLs.
 *
 * @param {String[]} url a list of URLs
 */
X509CertificateGenerator.prototype.addCRLDistributionPointURL = function(url) {
	var t = new ASN1("cRLDistributionPoints", ASN1.SEQUENCE);

	for (var i = 0; i < url.length; i++) {
		t.add(	new ASN1("cRLDistributionPoint", ASN1.SEQUENCE,
					new ASN1("distributionPoint", 0xA0,
						new ASN1("fullName", 0xA0,
							new ASN1("uniformResourceIdentifier", 0x86, new ByteString(url[i], ASCII))
						)
					)
				));
	}
	this.addExtension("id-ce-cRLDistributionPoints", false, t.getBytes());
}



/**
 * Adds the extended key usage extension
 *
 * @param {String[]} oids the list of object identifier names
 * @param {Boolean} critical the extension is critical
 */
X509CertificateGenerator.prototype.addExtendedKeyUsages = function(oids, critical) {
	var t = new ASN1("extKeyUsages", ASN1.SEQUENCE);

	for (var i = 0; i < oids.length; i++) {
		t.add( new ASN1("keyPurposeId", ASN1.OBJECT_IDENTIFIER, new ByteString(oids[i], OID) ));
	}
	this.addExtension("id-ce-extKeyUsage", critical, t.getBytes());
}



/**
 * Gets the issuer name as TLV object
 *
 * @return the issuer RDNSequence
 * @type ASN1
 */
X509CertificateGenerator.prototype.getIssuer = function() {
	if (this.issuer instanceof ASN1) {
		return this.issuer;
	} else {
		return PKIXCommon.encodeName(this.issuer);
	}
}



/**
 * Gets the certificate validity as TLV object
 *
 * @return the certificates validity
 * @type ASN1
 */
X509CertificateGenerator.prototype.getValidity = function() {
	var t = new ASN1("validity", ASN1.SEQUENCE);

	var ts = this.notBefore;
	if (typeof(ts) != "string") {
		ts = PKIXCommon.dtoUTC(this.notBefore);
	}
	if (ts >= "500101000000Z") {
		ts = "20" + ts;
		t.add(new ASN1("notBefore", ASN1.GeneralizedTime, new ByteString(ts, ASCII)));
	} else {
		t.add(new ASN1("notBefore", ASN1.UTCTime, new ByteString(ts, ASCII)));
	}

	var ts = this.notAfter;
	if (typeof(ts) != "string") {
		ts = PKIXCommon.dtoUTC(this.notAfter);
	}
	if (ts >= "500101000000Z") {
		ts = "20" + ts;
		t.add(new ASN1("notAfter", ASN1.GeneralizedTime, new ByteString(ts, ASCII)));
	} else {
		t.add(new ASN1("notAfter", ASN1.UTCTime, new ByteString(ts, ASCII)));
	}
	return t;
}



/**
 * Gets the subject name as TLV object
 *
 * @return the issuer RDNSequence
 * @type ASN1
 */
X509CertificateGenerator.prototype.getSubject = function() {
	if (this.subject instanceof ASN1) {
		return this.subject;
	} else {
		return PKIXCommon.encodeName(this.subject);
	}
}



/**
 * Gets the subject's public key as TLV object
 *
 * @return the subject's public key info
 * @type ASN1
 */
X509CertificateGenerator.prototype.getSubjectPublicKeyInfo = function() {
	if (this.publicKey.getComponent(Key.MODULUS)) {
		return PKIXCommon.createRSASubjectPublicKeyInfo(this.publicKey);
	} else {
		return PKIXCommon.createECSubjectPublicKeyInfo(this.publicKey, this.encodeECDomainParameter);
	}
}



/**
 * Gets the certificate extension as TLV object
 *
 * @return the certificate extensions
 * @type ASN1
 */
X509CertificateGenerator.prototype.getExtensions = function() {
	var t = new ASN1("extensions", 0xA3);
	var s = new ASN1("extensions", ASN1.SEQUENCE);

	t.add(s);

	for (var i = 0; i < this.extensions.length; i++) {
		s.add(this.extensions[i]);
	}
	return t;
}



/**
 * Gets the part of the certificate that will be signed
 *
 * @return the TBSCertificate part
 * @type ASN1
 */
X509CertificateGenerator.prototype.getTbsCertificate = function() {
	var t = new ASN1("tbsCertificate", ASN1.SEQUENCE);
	t.add(new ASN1("version", 0xA0,
			new ASN1("version", ASN1.INTEGER, new ByteString("02", HEX))));
	t.add(new ASN1("serialNumber", ASN1.INTEGER, PKIXCommon.convertUnsignedInteger(this.serialNumber)));
	t.add(this.getSignatureAlgorithm());
	t.add(this.getIssuer());
	t.add(this.getValidity());
	t.add(this.getSubject());
	t.add(this.getSubjectPublicKeyInfo());
	t.add(this.getExtensions());
	return t;
}



/**
 * Gets the signature algorithm TLV object
 *
 * @return the signature algorithm object
 * @type ASN1
 */
X509CertificateGenerator.prototype.getSignatureAlgorithm = function() {
	return PKIXCommon.encodeSignatureAlgorithm(this.signatureAlgorithm);
}



/**
 * Generates the certificate.
 *
 * @return the generated certificate
 * @type X509
 */
X509CertificateGenerator.prototype.generateX509Certificate = function(privateKey) {
	var certificate = new ASN1("certificate", ASN1.SEQUENCE);

	var tbs = this.getTbsCertificate();
	certificate.add(tbs);
	certificate.add(this.getSignatureAlgorithm());

	var signature = this.crypto.sign(privateKey, this.signatureAlgorithm, tbs.getBytes());
	signature = (new ByteString("00", HEX)).concat(signature);

	var signatureValue = new ASN1("signatureValue", ASN1.BIT_STRING, signature);
	certificate.add(signatureValue);

//	print(certificate);
	return new X509(certificate.getBytes());
}



X509CertificateGenerator.RSATest = function() {

	var crypto = new Crypto();

	var caPrivateKey = new Key();
	caPrivateKey.setType(Key.PRIVATE);

	var caPublicKey = new Key();
	caPublicKey.setType(Key.PUBLIC);
	caPublicKey.setSize(1024);

	crypto.generateKeyPair(Crypto.RSA, caPublicKey, caPrivateKey);

//	var caPrivKey = new Key("profiles/kp_rsa_private.xml");

	var x = new X509CertificateGenerator(crypto);

	x.reset();
	x.setSerialNumber(new ByteString("01", HEX));
	x.setSignatureAlgorithm(Crypto.RSA);
	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
	x.setIssuer(issuer);
	x.setNotBefore("060825120000Z");
	x.setNotAfter("160825120000Z");
	var subject = { C:"UT", O:"Utopia CA", OU:"ACME Corporation", CN:"Joe Doe" };
	x.setSubject(subject);

	x.setPublicKey(caPublicKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );

	x.addBasicConstraintsExtension(true, 0);
	x.addSubjectKeyIdentifierExtension();
	x.addAuthorityKeyIdentifierExtension(caPublicKey);

	var cert = x.generateX509Certificate(caPrivateKey);
	var fn = GPSystem.mapFilename("cert_rsa.cer", GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, cert.getBytes());

	cert.verifyWith(cert);

	print(cert);
}



X509CertificateGenerator.ECCTest = function() {

	var crypto = new Crypto();

	var caPrivateKey = new Key();
	caPrivateKey.setType(Key.PRIVATE);

	var caPublicKey = new Key();
	caPublicKey.setType(Key.PUBLIC);
	caPublicKey.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));

	crypto.generateKeyPair(Crypto.EC, caPublicKey, caPrivateKey);

	var x = new X509CertificateGenerator(crypto);

	x.reset();
	x.setSerialNumber(new ByteString("01", HEX));
	x.setSignatureAlgorithm(Crypto.ECDSA_SHA256);
	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
	x.setIssuer(issuer);
	var t = new Date();
	x.setNotBefore(t);
	x.setNotAfter(PKIXCommon.addDays(t, 180));
	var subject = { C:"UT", O:"Utopia CA", OU:"ACME Corporation", CN:"Joe Doe" };
	x.setSubject(subject);

	x.setPublicKey(caPublicKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );

	x.addBasicConstraintsExtension(true, 0);
	x.addSubjectKeyIdentifierExtension();
	x.addAuthorityKeyIdentifierExtension(caPublicKey);

	var cert = x.generateX509Certificate(caPrivateKey);

	var fn = GPSystem.mapFilename("cert_ecc.cer", GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, cert.getBytes());

	cert.verifyWith(cert);

	print(cert);
	print(new ASN1(cert.getBytes()));
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A Issuer for X.509 Certificates
 */

var X509Signer = require('scsh/x509/X509Signer').X509Signer;

var PKIXCommon = require("scsh/x509/PKIXCommon").PKIXCommon;
var X509CertificateGenerator = require("scsh/x509/X509CertificateGenerator").X509CertificateGenerator;
var CRLGenerator = require("scsh/x509/CRLGenerator").CRLGenerator;



/**
 * Create a certification authority that issues X.509 certificates and CRLs
 *
 * @class Class implementing a certification authority issuing X.509 certificates and CRLs
 * @constructor
 * @param {DAOFactory} daof the factory that can create the required data access objects
 * @param {CryptoProviderFactory} cpf factory implementing getCryptoProvider() used to get access to crypto providers
 * @param {Holder} holder the holder object for this signer the database
 */
function X509CertificateIssuer(daof, cpf, holder) {
	X509Signer.call(this, daof, cpf, holder);
	this.crldp = [];
}

X509CertificateIssuer.prototype = Object.create(X509Signer.prototype);
X509CertificateIssuer.constructor = X509CertificateIssuer;

exports.X509CertificateIssuer = X509CertificateIssuer;



/**
 * Create a new certificate issuer
 *
 * @param {DAOFactory} daof the factory that can create the required data access objects
 * @param {String/Number} pathOrHolderId the path of holderIDs (eg. "/UTCVCA/UTDVCA/UTTERM") or the holderId from the database
 * @param {Number} certtype optional argument, default Holder.X509
 * @type Number
 * @return the newly created holder id
 */
X509CertificateIssuer.createCertificateIssuer = function(daof, pathOrHolderId, certtype, template) {
	return X509Signer.createSigner(daof, pathOrHolderId, certtype, template);
}



/**
 * Add a CRL distribution point to issued certificates
 *
 * @param {String} crldp the URL of the distribution point
 */
X509CertificateIssuer.prototype.addCRLDistributionPoint = function(crldp) {
	this.crldp.push(crldp);
}



/**
 * Create a new randomly generated certificate serial number
 *
 * @private
 * @type ByteString
 * @return a 8 byte bytestring that resembles an unsigned integer
 */
X509CertificateIssuer.prototype.newSerialNumber = function() {
	var crypto = new Crypto();
	var serial = crypto.generateRandom(8);

	// Strip first bit to make integer unsigned
	if (serial.byteAt(0) > 0x7F) {
		serial = ByteString.valueOf(serial.byteAt(0) & 0x7F).concat(serial.bytes(1));
	}
	return serial;
}



/**
 * Issue a self-signed certificate for the given keyId.
 *
 * The key must have been previously generated using the newSigner() method
 *
 * @param {ByteString} keyId the subject key identifier
 * @param {Number} srId service request id to be stored with issued certificate
 */
X509CertificateIssuer.prototype.issueSelfSignedCertificate = function(keyId, srId) {

	if (keyId) {
		var signerDAO = this.daof.getSignerDAO();
		var signer = signerDAO.getSignerByKeyId(this.holder, keyId);
	} else {
		var signer = this.signer;
	}

	if (!signer) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "No signer with keyId " + keyId + " found");
	}

	var cp = this.cpf.getCryptoProvider(signer.keyDomain, true);

	if (!cp) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "Signer is offline (Key Domain : " + this.signer.keyDomain + ")");
	}

	try	{
		var prk = cp.getPrivateKeyByKeyId(signer.keyId, signer.keyblob);

		if (prk == null) {
			throw new GPError(module.id, GPError.INVALID_DATA, 1, "No key with keyId " + signer.keyId + " found");
		}

		var req = this.getRequest(signer.keyId);

		if (req == null) {
			throw new GPError(module.id, GPError.INVALID_DATA, 1, "No request with keyId " + signer.keyId + " found");
		}

		var pub = req.getPublicKey();

		if (typeof(this.policy.restrictPublicKey) != "undefined") {
			pub.algorithmIdentifier = PKIXCommon.restrictedPublicKeyAlgorithmIdentifier(this.policy.restrictPublicKey);
		}

		var gen = new X509CertificateGenerator(cp.getCrypto());
		gen.encodeECDomainParameter = false;

		gen.reset();
		gen.setSerialNumber(this.newSerialNumber());
		gen.setSignatureAlgorithm(this.policy.signatureAlgorithm);
		var subject = req.getSubject();
		gen.setIssuer(subject);
		var ced = new Date();
		var cxd = PKIXCommon.addDays(ced, this.policy.validityDaysSelfSigned);
		gen.setNotBefore(ced);
		gen.setNotAfter(cxd);
		gen.setSubject(subject);
		gen.setPublicKey(pub);
		gen.addSubjectKeyIdentifierExtension();
		gen.addKeyUsageExtension(PKIXCommon.keyCertSign | PKIXCommon.cRLSign );
		gen.addBasicConstraintsExtension(true, this.policy.pathLenConstraint);

		var cert = gen.generateX509Certificate(prk);

		var id = this.storeCertificate(cert, true, signer.keyId, srId);
	}
	finally {
		cp.release();
	}

	return { id: id, cert: cert };
}



/**
 * Issue a new certificate for the given subject and public key
 *
 * @param {Number/String/Object} certholder the holder id, path or object
 * @param {Key} pubkey the public key
 * @param {Object} subject in ASN1 format or a format accepted by PKIXCommon.encodeName()
 * @param {Object[]} extensions array of certificate extensions objects with properties oid{String}, critical{boolean} and value{ByteString}
 * @param {Number} srId service request id to be stored with issued certificate
 * @type X509
 * @return the newly generated certificate
 */
X509CertificateIssuer.prototype.issueCertificate = function(certholder, pubkey, subject, extensions, srId) {
	assert(pubkey instanceof Key, "Argument pubkey must be instance of Key");

	if (typeof(certholder) != "object") {
		var holderdao = this.daof.getHolderDAO();

		if (typeof(pathOrHolderId) == "string") {
			certholder = holderdao.getHolder(certholder);
		} else {
			certholder = holderdao.getHolderById(certholder);
		}
	}

	if (!certholder) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "Holder " + certholder + " not found");
	}

	var icert = this.getSignerCertificate();

	if (!icert) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "No active signer found");
	}

	var cp = this.cpf.getCryptoProvider(this.signer.keyDomain, true);

	if (!cp) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "Signer is offline (Key Domain : " + this.signer.keyDomain + ")");
	}

	try	{
		var prk = cp.getPrivateKeyByKeyId(this.signer.keyId, this.signer.keyblob);

		if (prk == null) {
			throw new GPError(module.id, GPError.INVALID_DATA, 1, "No key with keyId " + this.signer.keyId + " found");
		}

		var issuer = PKIXCommon.getSubjectAsASN1(icert);

		var gen = new X509CertificateGenerator(cp.getCrypto());
		gen.encodeECDomainParameter = false;

		gen.reset();
		gen.setSerialNumber(this.newSerialNumber());
		gen.setSignatureAlgorithm(this.policy.signatureAlgorithm);
		gen.setIssuer(issuer);
		var ced = new Date();
		var cxd = PKIXCommon.addDays(ced, this.policy.validityDaysCertificates);
		gen.setNotBefore(ced);
		gen.setNotAfter(cxd);
		gen.setSubject(subject);
		gen.setPublicKey(pubkey);
		gen.addSubjectKeyIdentifierExtension();
		gen.addAuthorityKeyIdentifierExtension(icert.getSubjectKeyIdentifier());

		if ((typeof(this.policy.pathLenConstraint) != "undefined") && (this.policy.pathLenConstraint > 0)) {
			gen.addBasicConstraintsExtension(true, this.policy.pathLenConstraint - 1);
		} else {
			gen.addBasicConstraintsExtension(false, 0);
		}

		if (this.crldp.length > 0) {
			gen.addCRLDistributionPointURL(this.crldp);
		}

		if (typeof(extensions) == "object") {
			for (var i = 0; i < extensions.length; i++) {
				gen.addExtension(extensions[i].oid, extensions[i].critical, extensions[i].value);
			}
		}

		var cert = gen.generateX509Certificate(prk);

		var id = this.storeCertificateForHolder(certholder, cert, false, undefined, srId);
	}
	finally {
		cp.release();
	}
	return { id: id, cert: cert };
}



/**
 * Extension handler method for Sub-CA certificates
 *
 * @private
 */
X509CertificateIssuer.prototype.addExtForSubCA = function(certgen, extvalues) {

	certgen.addKeyUsageExtension(PKIXCommon.keyCertSign | PKIXCommon.cRLSign );
	certgen.addBasicConstraintsExtension(true, this.policy.pathLenConstraint - 1);
}



/**
 * Extension handler method for TLS server certificates
 *
 * @private
 */
X509CertificateIssuer.prototype.addExtForTLSServer = function(certgen, extvalues) {

	certgen.addKeyUsageExtension( PKIXCommon.keyAgreement | PKIXCommon.keyEncipherment);
	certgen.addBasicConstraintsExtension(false, 0);

	certgen.addExtendedKeyUsages(["id-csn-369791-tls-server", "id-kp-serverAuth"]);

	var ext = new ASN1("subjectAltName", ASN1.SEQUENCE,
						new ASN1("dNSName", 0x82, new ByteString(extvalues["dNSName"], ASCII))
					);
	certgen.addExtension("id-ce-subjectAltName", false, ext.getBytes());
}



/**
 * Extension handler method for TLS client certificates
 *
 * @private
 */
X509CertificateIssuer.prototype.addExtForTLSClient = function(certgen, extvalues) {
	certgen.addKeyUsageExtension( PKIXCommon.digitalSignature);
	certgen.addBasicConstraintsExtension(false, 0);

	// certgen.addExtendedKeyUsages(["id-csn-369791-tls-client", "id-kp-clientAuth"]);
	certgen.addExtendedKeyUsages(["id-kp-clientAuth"]);
}



/**
 * Extension handler method for certificates suitable for TLS client authentication and e-Mail signature and encryption
 *
 * @private
 */
X509CertificateIssuer.prototype.addExtForEmailAndTLSClient = function(certgen, extvalues) {

	certgen.addKeyUsageExtension( PKIXCommon.digitalSignature | PKIXCommon.keyEncipherment);
	certgen.addBasicConstraintsExtension(false, 0);

	var ext = new ASN1("subjectAltName", ASN1.SEQUENCE,
						new ASN1("rfc822Name", 0x81, new ByteString(extvalues["email"], ASCII))
					);
	certgen.addExtension("id-ce-subjectAltName", false, ext.getBytes());

	certgen.addExtendedKeyUsages(["id-kp-clientAuth", "id-kp-emailProtection"]);
}



/**
 * Issue a CRL
 *
 * @type CRL
 * @return the newly issued CRL
 */
X509CertificateIssuer.prototype.issueCRL = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "issueCRL()");

	var icert = this.getSignerCertificate();
	if (!icert) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "No active signer found");
	}

	var c = this.signer.getContent();
	if (c && c.crl) {
		var latestCRL = new CRLGenerator();
		var crlNumber = latestCRL.loadCRLEntries(new ByteString(c.crl, HEX));
		crlNumber++;
	}

	var cp = this.cpf.getCryptoProvider(this.signer.keyDomain, true);

	if (!cp) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "Signer is offline (Key Domain : " + this.signer.keyDomain + ")");
	}

	try	{
		var prk = cp.getPrivateKeyByKeyId(this.signer.keyId, this.signer.keyblob);

		if (prk == null) {
			throw new GPError(module.id, GPError.INVALID_DATA, 1, "No key with keyId " + this.signer.keyId + " found");
		}

		var x = new CRLGenerator(cp.getCrypto());

		x.reset();
		x.setSignatureAlgorithm(this.policy.signatureAlgorithm);
		var issuer = PKIXCommon.getSubjectAsASN1(icert);
		x.setIssuer(issuer);
		var now = new Date();
		x.setThisUpdate(now);
		x.setNextUpdate(PKIXCommon.addDays(now, this.policy.validityDaysCRL));

		var certdao = this.daof.getCertificateDAO();
		var revocationList = certdao.getRevokedCertificates(this.holder.id, now);

		for each (var cert in revocationList) {
			var serial = new ByteString(cert.serial, HEX);

			var reason = this.mapStatusToReasonCode(cert.status);

			if (cert.revocationDate) {
				var revocationDate = cert.revocationDate;
			} else {
				var revocationDate = now;
				certdao.updateRevocationDate(cert.id, now);
			}

			if (cert.invalidityDate) {
				var invalidityDate = cert.invalidityDate;
			} else {
				var invalidityDate = now;
			}
			var extensions = new ASN1("crlExtensions", ASN1.SEQUENCE);
			extensions.add(x.createInvalidityDateExt(invalidityDate));

			x.revokeCertificate(serial, revocationDate, reason, extensions);
		}

		if (!crlNumber) {
			var crlNumber = 1;
		}
		x.addCRLNumberExtension(crlNumber);

		var crl = x.generateCRL(prk);

		c.crl = crl.getBytes().toString(HEX);
		this.signer.setContent(c);
		var signerDAO = this.daof.getSignerDAO();
		signerDAO.updateContent(this.signer);
	}
	finally {
		cp.release();
	}
	return crl;
}



X509CertificateIssuer.prototype.mapStatusToReasonCode = function(status) {
	switch(status) {
	  case OCSPQuery.REVOKED:
		return null; // "...the reason code CRL entry extension SHOULD be absent instead of using the unspecified (0) reasonCode value." [RFC 5280, 5.3.1]
	  case OCSPQuery.KEYCOMPROMISE:
		return CRLGenerator.keyCompromise;
	  case OCSPQuery.CACOMPROMISE:
		return CRLGenerator.cACompromise;
	  case OCSPQuery.AFFILIATIONCHANGED:
		return CRLGenerator.affiliationChanged;
	  case OCSPQuery.SUPERSEDED:
		return CRLGenerator.superseded;
	  case OCSPQuery.CESSATIONOFOPERATION:
		return CRLGenerator.cessationOfOperation;
	  case OCSPQuery.CERTIFICATEHOLD:
		return CRLGenerator.certificateHold;
	  case OCSPQuery.REMOVEFROMCRL:
		return CRLGenerator.removeFromCRL;
	  case OCSPQuery.PRIVILEGEWITHDRAWN:
		return CRLGenerator.privilegeWithdrawn;
	  case OCSPQuery.AACOMPROMISE:
		return CRLGenerator.aACompromise;
	}

 	throw new GPError(module.id, GPError.INVALID_DATA, 1, "Unexpected status: " + status);
}



X509CertificateIssuer.prototype.getDNMask = function(holderId) {
	var signer = this.getSigner();
	var c = signer.getContent();
	return c.dnmask;
}



X509CertificateIssuer.prototype.isOperational = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "isOperational()");

	var icert = this.getSignerCertificate();
	if (!icert) {
		// No active signer found
		return false;
	}

	var cp = this.cpf.getCryptoProvider(this.signer.keyDomain, true);

	if (!cp) {
		// Signer offline
		return false;
	}

	try	{
		var prk = cp.getPrivateKeyByKeyId(this.signer.keyId, this.signer.keyblob);

		if (prk == null) {
			// Key not found
			return false;
		}
	} finally {
		cp.release();
	}

	return true;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Generic X509 certificate, request and key store
 */

var PKIXCommon = require('scsh/x509/PKIXCommon').PKIXCommon;
var Certificate = require('scsh/pki-db/Certificate').Certificate;
var Holder = require('scsh/pki-db/Holder').Holder;
var LongDate = require('scsh/pki-db/LongDate').LongDate;
var PKCS8 = require('scsh/pkcs/PKCS8').PKCS8;
var PKCS10 = require('scsh/pkcs/PKCS10').PKCS10;


/**
 * Create an object to access a X509 certificate store.
 *
 * @class Class that abstracts a certificate, request and key store for a X509 PKI.
 *
 * @constructor
 * @param {DAOFactory} DAOFactory the factory that can create data access objects for persistent information
 */
function X509CertificateStore(daof) {
	assert(daof, "Parameter doaf can't be empty");

	this.daof = daof;
	this.certtype = Holder.X509;
}

exports.X509CertificateStore = X509CertificateStore;



/**
 * Strip the last element of the path, effectively defining the parent within the path
 *
 * @param {String} path the path to strip the last element from
 * @returns the parent path or null for the root
 * @type String
 */
X509CertificateStore.parentPathOf = function(path) {
	assert(typeof(path) == "string", "Argument path must be string");
	var ofs = path.lastIndexOf("/");
	if (ofs <= 0) {
		return null;
	}
	return path.substr(0, ofs);
}



/**
 * Return the n-element of the path
 *
 * @param {String} path the path to return the last element from
 * @returns the last path element or null for the root
 * @type String
 */
X509CertificateStore.nthElementOf = function(path, n) {
	assert(typeof(path) == "string", "Argument path must be string");
	var pe = path.substr(1).split("/");
	if (typeof(n) == "undefined") {
		return pe[pe.length - 1];
	}
	return pe[n];
}



/**
 * Return a suitable crypto object. This may be overwritten by derived classes
 *
 * @type Crypto
 * @return the Crypto object
 */
X509CertificateStore.prototype.getCrypto = function() {
	if (this.crypto == undefined) {
		this.crypto = new Crypto();
	}
	return this.crypto;
}



/**
 * Check if holder exists for path or holderId
 *
 * @param {String/Number} pathOrHolderId
 * @type Holder
 * @return true if holder exists
 * @private
 */
X509CertificateStore.prototype.hasHolder = function(pathOrHolderId) {
	var holderdao = this.daof.getHolderDAO();

	if (typeof(pathOrHolderId) == "number") {
		var holder = holderdao.getHolderById(pathOrHolderId, this.certtype);
	} else {
		var holder = holderdao.getHolder(pathOrHolderId, this.certtype);
	}
	return holder != null;
}



/**
 * List certificate holders for a given PKI element
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @returns a list of holder ids, possibly empty
 * @type String[]
 */
X509CertificateStore.prototype.listHolders = function(pathOrHolderId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "listHolders(" + pathOrHolderId + ")");

	var holderdao = this.daof.getHolderDAO();

	var result = holderdao.getHolderList(pathOrHolderId, this.certtype);
	return result;
}



/**
 * Get existing holder object for given path or holderId
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {Boolean} create create if holder doesn't exist
 * @type Holder
 * @return the holder object
 * @private
 */
X509CertificateStore.prototype.getHolder = function(pathOrHolderId, create) {
	var holderdao = this.daof.getHolderDAO();

	if (typeof(pathOrHolderId) == "number") {
		var holder = holderdao.getHolderById(pathOrHolderId, this.certtype);
	} else {
		var holder = holderdao.getHolder(pathOrHolderId, this.certtype);
	}

	if (!holder) {
		if (!create) {
			throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Could not locate holder for " + pathOrHolderId);
		}
		GPSystem.log(GPSystem.DEBUG, module.id, "Holder not found, creating new.");
		if (typeof(pathOrHolderId) == "number") {
			holder = holderdao.newHolderWithParent(0, this.certtype);
		} else {
			holder = holderdao.newHolder(pathOrHolderId, this.certtype);
		}
	}

	return holder;
}



/**
 * Create new signer based on key pair generated externally
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {String} name the unique name of the signer in the holder context
 * @param {Key} puk the public key
 * @param {ByteString} keyblob the wrapped private key
 * @type ByteString
 * @return the subject key identifier
 */
X509CertificateStore.prototype.newSigner = function(pathOrHolderId, name, puk, keyblob) {
	GPSystem.log(GPSystem.DEBUG, module.id, "newSigner(" + pathOrHolderId + "," + name + ")");

	var holder = this.getHolder(pathOrHolderId, false);

	var keyId = PKIXCommon.determineKeyIdentifier(puk);

	var template = {};

	if (keyblob instanceof ByteString)  {
		template.keyblob = keyblob;
	}

	var signerDAO = this.daof.getSignerDAO();
	signerDAO.newSigner(holder, name, keyId, template);
	return keyId;
}



/**
 * Get the signer identified by the keyId
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {ByteString} keyId the key identifier
 * @type Signer
 * @return this Signer object
 */
X509CertificateStore.prototype.getSigner = function(pathOrHolderId, keyId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSigner(" + pathOrHolderId + "," + keyId + ")");

	var holder = this.getHolder(pathOrHolderId, false);

	var signerDAO = this.daof.getSignerDAO();

	var signer = signerDAO.getSignerByKeyId(holder, keyId);

	if (!signer) {
		return null;
	}

	return signer;
}



/**
 * Generate key pair
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {String} name the unique name of the signer in the holder context
 * @param {Number} algo the key generation algorithm (Crypto.EC or Crypto.RSA)
 * @param {Key} prk the private key template
 * @param {Key} puk the public key template
 * @type ByteString
 * @return the subject key identifier
 */
X509CertificateStore.prototype.generateKeyPair = function(pathOrHolderId, name, algo, prk, puk) {
	GPSystem.log(GPSystem.DEBUG, module.id, "generateKeyPair(" + pathOrHolderId + "," + name + ")");

	var holder = this.getHolder(pathOrHolderId, false);

	var crypto = this.getCrypto();

	// Generate key pair
	crypto.generateKeyPair(algo, puk, prk);

	var keyId = PKIXCommon.determineKeyIdentifier(puk);

	var template = {
		keyblob: PKCS8.encodeKeyUsingPKCS8Format(prk)
	};

	var signerDAO = this.daof.getSignerDAO();
	signerDAO.newSigner(holder, name, keyId, template);
	return keyId;
}



/**
 * Get a private key in the certificate store
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {String} name the unique name of the signer in the holder context
 * @returns the private key or null if not found
 * @type Key
 */
X509CertificateStore.prototype.getPrivateKeyByName = function(pathOrHolderId, name) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getPrivateKey(" + pathOrHolderId + "," + name + ")");

	var holder = this.getHolder(pathOrHolderId, false);

	var signerDAO = this.daof.getSignerDAO();
	var signer = signerDAO.getSignerByName(holder, name);

	if (!signer) {
		return signer;
	}

	return PKCS8.decodeKeyFromPKCS8Format(signer.keyblob);
}



/**
 * Get a private key in the certificate store
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {ByteString} keyId the unique key identifier
 * @returns the private key or null if not found
 * @type Key
 */
X509CertificateStore.prototype.getPrivateKeyByKeyId = function(pathOrHolderId, keyId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getPrivateKeyByKeyId(" + pathOrHolderId + "," + keyId + ")");

	var holder = this.getHolder(pathOrHolderId, false);

	var signerDAO = this.daof.getSignerDAO();
	var signer = signerDAO.getSignerByKeyId(holder, keyId);

	if (!signer) {
		return signer;
	}

	return PKCS8.decodeKeyFromPKCS8Format(signer.keyblob);
}



/**
 * Remove private key
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {String} name the unique name of the signer in the holder context
 * @returns true is deleted
 * @type boolean
 */
X509CertificateStore.prototype.deletePrivateKey = function(pathOrHolderId, name) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteRequest(" + pathOrHolderId + "," + name + ")");

	var holder = this.getHolder(pathOrHolderId, true);

	var signerDAO = this.daof.getSignerDAO();
	var signer = signerDAO.getSignerByName(holder, name.toString());

	if (!signer) {
		return false;
	}

	return signerDAO.deleteSigner(signer);
}



/**
 * Remove request
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {ByteString} keyId the unique keyId of the request in the holder context
 * @returns true is deleted
 * @type boolean
 */
X509CertificateStore.prototype.deleteRequest = function(pathOrHolderId, keyId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "deleteRequest(" + pathOrHolderId + "," + keyId + ")");

	var holder = this.getHolder(pathOrHolderId, true);

	var requestDAO = this.daof.getRequestDAO();
	var request = requestDAO.getRequestByKeyId(holder, keyId);

	if (!request) {
		return false;
	}

	return requestDAO.deleteRequest(request);
}



/**
 * Store a certificate request in the certificate store
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {PKCS10} req the request
 * @type ByteString
 * @return the request's keyId
 */
X509CertificateStore.prototype.storeRequest = function(pathOrHolderId, req) {
	GPSystem.log(GPSystem.DEBUG, module.id, "storeRequest(" + pathOrHolderId + "," + req + ")");

	var holder = this.getHolder(pathOrHolderId, true);

	var requestDAO = this.daof.getRequestDAO();

	var puk = req.getPublicKey();
	var keyId = PKIXCommon.determineKeyIdentifier(puk);

	requestDAO.newRequest(holder, keyId, req.getBytes());

	return keyId;
}



/**
 * Return request for given keyId
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {ByteString} keyId the unique keyId of the request in the holder context
 * @type PKCS10
 * @return the request or null
 */
X509CertificateStore.prototype.getRequest = function(pathOrHolderId, keyId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getRequest(" + pathOrHolderId + "," + keyId + ")");

	var holder = this.getHolder(pathOrHolderId, true);

	var requestDAO = this.daof.getRequestDAO();
	var request = requestDAO.getRequestByKeyId(holder, keyId);

	var req = new PKCS10(request.bytes);
	return req;
}



/**
 * Store a certificate in the certificate store
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @param {X509} cert the certificate
 * @param {Boolean} makeCurrent true if this certificate becomes the current certificate
 * @param {Number} srId service request id to be stored with issued certificate (optional)
 * @type Certificate
 * @return the Certificate entry from the database or null
 */
X509CertificateStore.prototype.storeCertificate = function(pathOrHolderId, cert, makeCurrent, srId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "storeCertificate(" + pathOrHolderId + ",'" + cert + "'," + makeCurrent + ")");

	var holderdao = this.daof.getHolderDAO();

	if (typeof(pathOrHolderId) == "number") {
		var holder = holderdao.getHolderById(pathOrHolderId, this.certtype);
		if (holder == null) {
			throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "Could not locate holder for id " + pathOrHolderId);
		}
	} else {
		var holder = holderdao.getHolder(pathOrHolderId, this.certtype);

		if (!holder) {
			GPSystem.log(GPSystem.DEBUG, module.id, "Holder not found, creating new.");
			holder = holderdao.newHolder(pathOrHolderId, Holder.X509);
		}
	}

	var certdao = this.daof.getCertificateDAO();

	var issuer = cert.getIssuerDNString();
	var subject = cert.getSubjectDNString();
	var autid = cert.getAuthorityKeyIdentifier();
	var subid = cert.getSubjectKeyIdentifier();
	var serial = cert.getSerialNumber().toString(HEX);

	if ((autid && autid.equals(subid)) || issuer.equals(subject)) {
		dir = Certificate.SHORT;
	} else {
		dir = Certificate.UP;
	}

	var certificate = certdao.getCertificateBySerial(holder, serial, dir);

	if (certificate) {
		GPSystem.log(GPSystem.INFO, module.id, "storeCertificate() : We already have a different certificate for that serial number");
		GPSystem.log(GPSystem.INFO, module.id, "Existing: " + (new X509(certificate.bytes)));
		GPSystem.log(GPSystem.INFO, module.id, "New     : " + cert);

		return certificate;
	}

	var template = {
		keyId: PKIXCommon.determineKeyIdentifier(cert.getPublicKey()),
		expiry: new LongDate(cert.getNotAfter())
	};

	if (srId) {
		template.serviceRequestId = srId;
	}

	var certificate = certdao.newCertificate(holder, serial, dir, cert.getBytes(), template);

	if (makeCurrent || !holder.certId) {
		holderdao.updateCurrentCertificate(holder, certificate);
	}

	return certificate;
}



/**
 * Import a certificate that can be validated by one of certificates in the database.
 *
 * @param {X509} cert the certificate
 * @param {Boolean} makeCurrent true if this certificate becomes the current certificate
 * @param {Number} srId service request id to be stored with issued certificate (optional)
 * @type Certificate
 * @return the Certificate entry from the database or null
 */
X509CertificateStore.prototype.importCertificate = function(cert, makeCurrent, srId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "importCertificate(" + cert + ")");

	var issuer = cert.getIssuerDNString();
	var subject = cert.getSubjectDNString();
	if (issuer.equals(subject)) {
		throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "importCertificate can not import self-signed certificates");
	}

	var certdao = this.daof.getCertificateDAO();

	var autid = cert.getAuthorityKeyIdentifier();
	var subid = cert.getSubjectKeyIdentifier();

	var certdto = certdao.getCertificateByKeyId(autid);

	if (certdto == null) {
		GPSystem.log(GPSystem.WARN, module.id, "No certificate with AuthorityKeyIdentifier " + autid.toString(HEX) + " found");
		return null;
	}

	var ca = new X509(certdto.bytes);
	cert.verifyWith(ca);

	var parentId = certdto.holderId;
	var name = PKIXCommon.makeName(PKIXCommon.parseDN(subject));

	var holderdao = this.daof.getHolderDAO();
	var holder = holderdao.getHolderByTypeAndName(parentId, name, Holder.X509);

	if (!holder) {
		GPSystem.log(GPSystem.DEBUG, module.id, "Holder not found, creating new.");
		holder = holderdao.newHolderForParent(parentId, Holder.X509, { name: name } );
	}

	var holderId = holder.id;

	return this.storeCertificate(holderId, cert, makeCurrent, srId);
}



/**
 * Get current key id
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @type ByteString
 * @return the current key id or null if none defined
 */
X509CertificateStore.prototype.getCurrentKeyIdAndCertificate = function(pathOrHolderId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCurrentKeyId(" + pathOrHolderId + ")");

	var holder = this.getHolder(pathOrHolderId, false);

	var certdao = this.daof.getCertificateDAO();

	var certificate = certdao.getCurrentCertificate(holder);

	if (!certificate) {
		return null;
	}

	return { keyId: certificate.keyId, certificate: new X509(certificate.bytes) };
}



/**
 * Get current certificate for given path or holderId
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @type X509
 * @return the current certificate or null if none defined
 */
X509CertificateStore.prototype.getCurrentCertificate = function(pathOrHolderId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCurrentCertificate(" + pathOrHolderId + ")");

	var holder = this.getHolder(pathOrHolderId, false);

	var certdao = this.daof.getCertificateDAO();

	var certificate = certdao.getCurrentCertificate(holder);

	if (!certificate) {
		return null;
	}

	return new X509(certificate.bytes);
}



/**
 * Get certificate chain for given path or holderId
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @type X509[]
 * @return the certificate chain, starting with the current certificate of the holder and ending with the self-signed trust anchor
 */
X509CertificateStore.prototype.getCertificateChain = function(pathOrHolderId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCertificateChain(" + pathOrHolderId + ")");

	var chain = [];
	var certdao = this.daof.getCertificateDAO();

	do	{
		var holder = this.getHolder(pathOrHolderId, false);

		var certificate = certdao.getCurrentCertificate(holder);

		if (!certificate) {
			throw new GPError(module.id, GPError.INVALID_ARGUMENTS, 0, "No current certificate found for " + holder);
		}

		chain.push(new X509(certificate.bytes));
		pathOrHolderId = holder.parentId;
	} while (pathOrHolderId != undefined);

	return chain;
}



/**
 * Get current certificate for given path or holderId
 *
 * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
 * @type X509
 * @return the current certificate or null if none defined
 */
X509CertificateStore.prototype.getCurrentCertificateAndSigner = function(pathOrHolderId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "getCurrentCertificateAndSigner(" + pathOrHolderId + ")");

	var holder = this.getHolder(pathOrHolderId, false);

	var certdao = this.daof.getCertificateDAO();

	var certificate = certdao.getCurrentCertificate(holder);

	if (!certificate) {
		return null;
	}

	var cert = new X509(certificate.bytes);

	var signerDAO = this.daof.getSignerDAO();

	var signer = signerDAO.getSignerByKeyId(holder, certificate.keyId);

	if (!signer) {
		return null;
	}

	var prk = PKCS8.decodeKeyFromPKCS8Format(signer.keyblob);

	return { signerPrK: prk, signerCert: cert };
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview X509Name - Class to support X500 Names
 */

// 	Name ::= CHOICE {
// 	     RDNSequence }
//
// 	RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
//
// 	RelativeDistinguishedName ::=
// 		SET OF AttributeTypeAndValue
//
// 	AttributeTypeAndValue ::= SEQUENCE {
// 		type     AttributeType,
// 		value    AttributeValue }
//
// 	AttributeType ::= OBJECT IDENTIFIER
//
// 	AttributeValue ::= ANY DEFINED BY AttributeType



X509Name.name = "550429";
X509Name.surname = "550404";
X509Name.givenname = "55042A";
X509Name.initials = "55042B";
X509Name.generationQualifier = "55042C";
X509Name.commonName = "550403";
X509Name.localityName = "550407";
X509Name.stateOrProvinceName = "550408";
X509Name.organizationName = "55040A";
X509Name.organizationalUnitName = "55040B";
X509Name.title = "55040C";
X509Name.dnQualifier = "55042E";
X509Name.countryName = "550406";
X509Name.serialNumber = "550405";
X509Name.emailAddress = "2A864886F70D010901";



function X509Name(subjectDN) {
	this.rdn = new Array();
	this.parseRDNSequence(subjectDN);
}

exports.X509Name = X509Name;



X509Name.prototype.parseRDNSequence = function(rdnSeq) {
	if (rdnSeq instanceof ASN1) {
		if (!rdnSeq.isconstructed) {
			throw new GPError("X509Name", GPError.INVALID_DATA, 1, "Name must be constructed");
		}

		if (rdnSeq.tag != ASN1.SEQUENCE) {
			throw new GPError("X509Name", GPError.INVALID_DATA, 1, "RDNSequence must be SEQUENCE");
		}

		for (var i = 0; i < rdnSeq.elements; i++) {
			var set = rdnSeq.get(i)
			if (set.tag != ASN1.SET) {
				throw new GPError("X509Name", GPError.INVALID_DATA, 1, "RDNSequence must only contain SETs");
			}
			for (var j = 0; j < set.elements; j++) {
				var attr = set.get(j);
				if (attr.tag != ASN1.SEQUENCE) {
					throw new GPError("X509Name", GPError.INVALID_DATA, 1, "AttributeTypeAndValue must be SEQUENCE");
				}
				if (attr.elements != 2) {
					throw new GPError("X509Name", GPError.INVALID_DATA, 1, "AttributeTypeAndValue must have 2 elements");
				}
				var attrType = attr.get(0);
				if (attrType.tag != ASN1.OBJECT_IDENTIFIER) {
					throw new GPError("X509Name", GPError.INVALID_DATA, 1, "AttributeType must be OBJECT IDENTIFIER");
				}
				var oid = attrType.value.toString(HEX);
				var attrValue = attr.get(1);
				this.rdn[oid] = attrValue;
			}
		}
	} else {
		throw new GPError("X509Name", GPError.INVALID_TYPE, 1, "Argument must be of type ASN1");
	}
}



X509Name.prototype.hasRDN = function(oid) {
	return this.rdn[oid] != undefined;
}



X509Name.prototype.getRDNAsString = function(oid) {
	var r = this.rdn[oid];
	if (r == undefined) {
		throw new GPError("X509Name", GPError.INVALID_INDEX,0,"No matching RDN found");
	}

	if (r.tag == ASN1.UTF8String) {
		return r.value.toString(UTF8);
	} else {
		return r.value.toString(ASCII);
	}
}



X509Name.prototype.toString = function() {
	var result = "";

	if (this.hasRDN(X509Name.countryName)) {
		result += "C=" + this.getRDNAsString(X509Name.countryName);
	}

	if (this.hasRDN(X509Name.stateOrProvinceName)) {
		if (result.length > 0)
			result += ",";
		result += "ST=" + this.getRDNAsString(X509Name.stateOrProvinceName);
	}

	if (this.hasRDN(X509Name.organizationName)) {
		if (result.length > 0)
			result += ",";

		result += "O=" + this.getRDNAsString(X509Name.organizationName);
	}

	if (this.hasRDN(X509Name.organizationalUnitName)) {
		if (result.length > 0)
			result += ",";

		result += "OU=" + this.getRDNAsString(X509Name.organizationalUnitName);
	}

	if (this.hasRDN(X509Name.localityName)) {
		if (result.length > 0)
			result += ",";
		result += "L=" + this.getRDNAsString(X509Name.localityName);
	}

	if (this.hasRDN(X509Name.title)) {
		if (result.length > 0)
			result += ",";
		result += "T=" + this.getRDNAsString(X509Name.title);
	}

	if (this.hasRDN(X509Name.givenname)) {
		if (result.length > 0)
			result += ",";
		result += "G=" + this.getRDNAsString(X509Name.givenname);
	}

	if (this.hasRDN(X509Name.surname)) {
		if (result.length > 0)
			result += ",";
		result += "S=" + this.getRDNAsString(X509Name.surname);
	}

	if (this.hasRDN(X509Name.generationQualifier)) {
		if (result.length > 0)
			result += ",";
		result += "generationQualifier=" + this.getRDNAsString(X509Name.generationQualifier);
	}

	if (this.hasRDN(X509Name.name)) {
		if (result.length > 0)
			result += ",";
		result += "N=" + this.getRDNAsString(X509Name.name);
	}

	if (this.hasRDN(X509Name.initials)) {
		if (result.length > 0)
			result += ",";
		result += "initials=" + this.getRDNAsString(X509Name.initials);
	}

	if (this.hasRDN(X509Name.commonName)) {
		if (result.length > 0)
			result += ",";
		result += "CN=" + this.getRDNAsString(X509Name.commonName);
	}


	if (this.hasRDN(X509Name.serialNumber)) {
		if (result.length > 0)
			result += ",";
		result += "SERIALNUMBER=" + this.getRDNAsString(X509Name.serialNumber);
	}

	if (this.hasRDN(X509Name.dnQualifier)) {
		if (result.length > 0)
			result += ",";
		result += "DNQ=" + this.getRDNAsString(X509Name.dnQualifier);
	}

	if (this.hasRDN(X509Name.emailAddress)) {
		if (result.length > 0)
			result += ",";
		result += "E=" + this.getRDNAsString(X509Name.emailAddress);
	}

	return result;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A Signer backed by a X.509 certificate
 */

var Holder = require('scsh/pki-db/Holder').Holder;
var Certificate = require('scsh/pki-db/Certificate').Certificate;
var PKIXCommon = require('scsh/x509/PKIXCommon').PKIXCommon;
var PKCS10 = require('scsh/pkcs/PKCS10').PKCS10;
var PKCS10Generator = require('scsh/x509/PKCS10Generator').PKCS10Generator;
var LongDate = require('scsh/pki-db/LongDate').LongDate;



/**
 * Create a signer based on a X.509 certificate
 *
 * @class Class implementing a signer backed by a X.509 certificate
 * @constructor
 * @param {DAOFactory} daof the factory that can create the required data access objects
 * @param {CryptoProviderFactory} cpf factory implementing getCryptoProvider() used to get access to crypto providers
 * @param {Holder} holder the holder object for this signer
 */
function X509Signer(daof, cpf, holder) {
	this.daof = daof;
	this.cpf = cpf;
	this.holder = holder;

	if (this.holder == null) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "Certificate holder " + holder + " not found");
	}

	if (this.getSigner()) {
		this.parsePolicyFromSigner();
	}
}

exports.X509Signer = X509Signer;



/**
 * Create a new signer
 *
 * @param {DAOFactory} daof the factory that can create the required data access objects
 * @param {String/Number} pathOrHolderId the path of holderIDs (eg. "/UTCVCA/UTDVCA/UTTERM") or the holderId from the database
 * @param {Number} certtype optional argument, default Holder.X509
 * @param {Object} template template for database entry
 * @type Number
 * @return the newly created holder id
 */
X509Signer.createSigner = function(daof, pathOrHolderId, certtype, template) {
	if (typeof(certtype) == "undefined") {
		certtype = Holder.X509;
	}

	var holderdao = daof.getHolderDAO();
	if (typeof(pathOrHolderId) == "string") {
		var holder = holderdao.newHolder(pathOrHolderId, certtype, template);
	} else {
		if (typeof(pathOrHolderId) == "undefined") {
			pathOrHolderId = 0;
		}

		var holder = holderdao.newHolderForParent(pathOrHolderId, certtype, template);
	}

	return holder.id;
}



/**
 * Set policy for signer object.
 *
 * The policy object shall contain the following properties. Some elements are only used in the
 * derive X509CertificateIssuer class.
 *
 * <ul>
 * <li>distinguishedName - The distinguishedName object as defined in PKIXCommon.encodeName()</li>
 * <li>keySpecification - A Key object initialized with the key parameter.</li>
 * <li>signatureAlgorithm - A ByteString encoding the object identifier for the signature algorithm</li>
 * <li>validityDaysSelfSigned - Number of days the self-signed certificate is valid</li>
 * <li>validityDaysCertificates - Number of days the issued certificate is valid</li>
 * <li>validityDaysCRL - Number of days the issued certificate revocation list is valid</li>
 * <li>pathLenConstraint - Number of subordinate CAs</li>
 * <li>requestFormat - "pkcs10" or "sc-hsm"</li>
 * <li>overwriteKey - Set to true to overwrite a key with the same label</li>
 * <li>restrictPublicKey - Limit the public key of the self-signed root as per PKIXCommon.restrictedPublicKeyAlgorithmIdentifier()</li>
 * </ul>
 *
 * @see PKIXCommon.encodeName()
 * @param {String} crldp the URL of the distribution point
 */
X509Signer.prototype.setPolicy = function(policy) {
	this.policy = policy;
}



/**
 * Determine signer name for newly generated signer
 *
 * @type String
 * @return the unique name
 */
X509Signer.prototype.determineSignerName = function() {
	var name = this.holder.id + ":X509Signer " + this.holder.signerNo + 1 + " [" + Date() + "]";
	var holderdao = this.daof.getHolderDAO();
	holderdao.updateSignerNo(this.holder, this.holder.signerNo + 1);
	return name;
}



/**
 * Determine subject distinguished name for new signer
 *
 * @param {String} name
 * @type String
 * @return the distringuished name for the new signer
 */
X509Signer.prototype.determineDistinguishedName = function(name) {
	return this.policy.distinguishedName;
}



/**
 * Determine the key usage for the request
 *
 * @type Number
 * @return the key usage defined in PKIXCommon
 */
X509Signer.prototype.getRequestKeyUsage = function() {
	return PKIXCommon.digitalSignature;
}



/**
 * Create a new signer key pair
 *
 * @param {String} name the signer name
 * @type ByteString
 * @return the subject key identifier
 */
X509Signer.prototype.newSigner = function(name, template) {
	if (!name) {
		name = this.determineSignerName();
	}

	if (!template || !template.keyDomain) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "Cannot create a signer without a template containing the keyDomain");
	}

	var cp = this.cpf.getCryptoProvider(template.keyDomain, true);
	try	{
		if (this.policy.overwriteKey) {
			cp.deleteIfExists = true;
		}

		var k = cp.generateKeyPair(name, this.policy.keySpecification);
		var prk = k.prk;
		var puk = k.puk;
		var req = k.req;
		var keyblob;

		var keyId = PKIXCommon.determineKeyIdentifier(puk);

		if (typeof(cp.getWrappedKey) == "function") {
			template.keyblob = cp.getWrappedKey(name);
		}

		var signerDAO = this.daof.getSignerDAO();
		this.signer = signerDAO.newSigner(this.holder, name, keyId, template);

		if (this.policy.requestFormat != "sc-hsm") {
			var gen = new PKCS10Generator(cp.getCrypto());
			gen.setSignatureAlgorithm(this.policy.reqSignatureAlgorithm);
			gen.setSubject(this.determineDistinguishedName());
			gen.setPublicKey(puk);
			gen.addKeyUsageExtension(this.getRequestKeyUsage());
			req = gen.generateCertificationRequest(prk);
			req = req.getBytes();
		}

		var requestDAO = this.daof.getRequestDAO();
		requestDAO.newRequest(this.holder, keyId, req);
	}
	finally {
		cp.release();
	}

	return keyId;
}



/**
 * Return the holderId from the holder database for this element
 *
 * @type Number
 * @return the holderId
 */
X509Signer.prototype.getHolderId = function() {
	return this.holder.id;
}



/**
 * Return the holder from the holder database for this element
 *
 * @type Number
 * @return the holderId
 */
X509Signer.prototype.getHolder = function() {
	return this.holder;
}



/**
 * Return the signer from the signer database for this element
 *
 * @type Signer
 * @return the signer value object or null
 */
X509Signer.prototype.getSigner = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSigner()");
	if (this.signer) {
		GPSystem.log(GPSystem.DEBUG, module.id, "return cached signer");
		return this.signer;
	}

	var certDAO = this.daof.getCertificateDAO();
	this.currentCertificate = certDAO.getCurrentCertificate(this.holder);

	if (!this.currentCertificate) { // no active signer
		GPSystem.log(GPSystem.DEBUG, module.id, "no active signer for holder " + this.holder.id);
		return null;
	}

	var signerDAO = this.daof.getSignerDAO();
	this.signer = signerDAO.getSignerByKeyId(this.holder, this.currentCertificate.keyId);

	if (this.signer) {
		this.cpid = this.signer.keyDomain;
	}

	return this.signer;
}



/**
 * Parse the policy from the signer's values object
 *
 * @type Object
 * @return the policy
 */
X509Signer.prototype.parsePolicyFromSigner = function() {
	var signer = this.getSigner();

	if (signer == null) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "No active signer");
	}

	var c = signer.getContent();

	if (!c || !c.keySpecification) {
		return; // no policy
	}

	var dp = new Key();
	if (c.keySpecification.type == "EC") {
		dp.setComponent(Key.ECC_CURVE_OID, new ByteString(c.keySpecification.curve, OID));
	} else {
		dp.setSize(c.keySpecification.keysize);
	}

	var dn = PKIXCommon.parseDN(c.distinguishedName);

	this.policy = {
		distinguishedName: dn,
		signatureAlgorithm: c.signatureAlgorithm,
		reqSignatureAlgorithm: c.keySpecification.sigalg,
		validityDaysCertificates: c.validityDaysCertificates,
		validityDaysCRL: c.validityDaysCRL,
		pathLenConstraint: c.pathLenConstraint,
		keySpecification: dp
	}

	return this.policy;
}



X509Signer.prototype.getSubjectPolicyForRequest = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSubjectPolicyForRequest()");

	var signer = this.getSigner();

	if (signer == null) {
		throw new GPError(module.id, GPError.INVALID_DATA, 1, "No active signer");
	}

	var c = signer.getContent();

	var dp = new Key();
	if (c.keySpecification.type == "EC") {
		dp.setComponent(Key.ECC_CURVE_OID, new ByteString(c.keySpecification.curve, OID));
	} else {
		dp.setSize(c.keySpecification.keysize);
	}

	var policy = {
		reqSignatureAlgorithm: c.keySpecification.sigalg,
		keySpecification: dp
	}

	return policy;
}



/**
 * Get request for the given subject key identifier
 *
 * @param {ByteString} keyId the subject key identifier
 * @type ByteString
 * @return the raw request
 */
X509Signer.prototype.getRequestBinary = function(keyId) {
	var requestDAO = this.daof.getRequestDAO();
	var request = requestDAO.getRequestByKeyId(this.holder, keyId);

	if (request == null) {
		return null;
	}

	return request.bytes;
}



/**
 * Get request for the given subject key identifier
 *
 * @param {ByteString} keyId the subject key identifier
 * @type PKCS10
 * @return the PKCS10 request
 */
X509Signer.prototype.getRequest = function(keyId) {
	var requestDAO = this.daof.getRequestDAO();
	var request = requestDAO.getRequestByKeyId(this.holder, keyId);

	if (request == null) {
		return null;
	}

	var req = new PKCS10(request.bytes);
	return req;
}



/*
X509Signer.prototype.activateSigner = function(name) {
}



X509Signer.prototype.importCertificate = function(name) {
}



X509Signer.prototype.getSignerList = function(usableOnly) {
}
*/



/**
 * Store a certificate issued for a certain holder
 *
 * @param {X509} cert the certificate
 * @param {Boolean} makeCurrent true if this certificate becomes the current certificate
 * @param {ByteString} keyId the key id that links this certificate to the signer (usually the subjectKeyIdentifier)
 * @param {Number} srId service request id
 * @type Number
 * @return the database id of the certificate
 */
X509Signer.prototype.storeCertificateForHolder = function(holder, cert, makeCurrent, keyId, srId) {
	GPSystem.log(GPSystem.DEBUG, module.id, "storeCertificateForHolder(" + holder + "'" + cert + "'," + makeCurrent + "," + keyId + ")");

	var certdao = this.daof.getCertificateDAO();

	var issuer = cert.getIssuerDNString();
	var subject = cert.getSubjectDNString();
	var autid = cert.getAuthorityKeyIdentifier();
	var subid = cert.getSubjectKeyIdentifier();
	var serial = cert.getSerialNumber().toString(HEX);

	if ((autid && autid.equals(subid)) || issuer.equals(subject)) {
		var dir = Certificate.SHORT;
	} else {
		var dir = Certificate.UP;
	}

	var certificate = certdao.getCertificateBySerial(holder, serial, dir);

	if (certificate) {
		GPSystem.log(GPSystem.INFO, module.id, "storeCertificate() : We already have a different certificate for that serial number");
		GPSystem.log(GPSystem.INFO, module.id, "Existing: " + (new X509(certificate.bytes)));
		GPSystem.log(GPSystem.INFO, module.id, "New     : " + cert);

		return;
	}

	if (typeof(keyId) == "undefined") {
		keyId = PKIXCommon.determineKeyIdentifier(cert.getPublicKey());
	}

	var template = {
		keyId: keyId,
		expiry: new LongDate(cert.getNotAfter())
	};

	if (srId) {
		template.serviceRequestId = srId;
	}

	var certificate = certdao.newCertificate(holder, serial, dir, cert.getBytes(), template);

	if (makeCurrent || !holder.certId) {
		var holderdao = this.daof.getHolderDAO();
		holderdao.updateCurrentCertificate(holder, certificate);
	}

	return certificate.id;
}



/**
 * Store a certificate issued for this signer
 *
 * @param {X509} cert the certificate
 * @param {Boolean} makeCurrent true if this certificate becomes the current certificate
 * @param {ByteString} keyId the key id that links this certificate to the signer (usually the subjectKeyIdentifier)
 * @param {Number} srId service request id
 */
X509Signer.prototype.storeCertificate = function(cert, makeCurrent, keyId, srId) {
	return this.storeCertificateForHolder(this.holder, cert, makeCurrent, keyId, srId);
}



/**
 * Return the signer's certificate
 *
 * @type X509
 * @return the signer's certificate
 */
X509Signer.prototype.getSignerCertificate = function() {
	GPSystem.log(GPSystem.DEBUG, module.id, "getSignerCertificate()");
	if (!this.currentCertificate) {
		this.getSigner();
	}

	if (this.signer && !this.currentCertificate) {
		var certDAO = this.daof.getCertificateDAO();
		this.currentCertificate = certDAO.getCurrentCertificate(this.holder);
	} else if (!this.signer) {
		GPSystem.log(GPSystem.DEBUG, module.id, "no active signer for holder " + this.holder.id);
		return null;
	}

	return new X509(this.currentCertificate.bytes);
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		
		<title>JsDoc Reference - File Index</title>
		<meta name="generator" content="JsDoc Toolkit" />
		
		<style type="text/css">
		/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>
	
	<body>
		<div id="header">
</div>
		
		<div id="index">
			<div align="center"><a href="index.html">Class Index</a>
| <a href="files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="symbols/APDU.html">APDU</a></li>
	
	<li><a href="symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="symbols/CVC.html">CVC</a></li>
	
	<li><a href="symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="symbols/DF.html">DF</a></li>
	
	<li><a href="symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="symbols/FCP.html">FCP</a></li>
	
	<li><a href="symbols/File.html">File</a></li>
	
	<li><a href="symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="symbols/PACE.html">PACE</a></li>
	
	<li><a href="symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
		</div>
		
		<div id="content">
			<h1 class="classTitle">File Index</h1>
			
			
			<div>
				<h2><a href="symbols/src/x509_X509Signer.js.html">X509Signer.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
A Signer backed by a X.509 certificate
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_APDU.js.html">APDU.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of ISO 7816-4 APDU processing
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_AccessController.js.html">AccessController.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 --------- 

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
AccessController base class
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_AuthenticationObject.js.html">AuthenticationObject.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
AuthenticationObject - Password, PIN or key container for external authentication
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_CommandInterpreter.js.html">CommandInterpreter.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of an ISO 7816-4 command interpreter
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_DF.js.html">DF.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of a ISO 7816-4 file system simulation
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_DataUnitAPDU.js.html">DataUnitAPDU.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
AuthenticationObject - Password, PIN or key container for external authentication
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_FCP.js.html">FCP.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 --------- 

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of a ISO 7816-4 file system simulation
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_FSNode.js.html">FSNode.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of a ISO 7816-4 file system simulation
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_FileSelector.js.html">FileSelector.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of a ISO 7816-4 file system simulation
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_LinearEF.js.html">LinearEF.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of a ISO 7816-4 file system simulation
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_SecureChannelHandler.js.html">SecureChannelHandler.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of a secure messaging channel as defined in ISO 7814-4 and eSign-K
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_SecureMessagingCommandAPDUDecoder.js.html">SecureMessagingCommandAPDUDecoder.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of a secure messaging channel as defined in ISO 7814-4 and eSign-K
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_SecurityEnvironment.js.html">SecurityEnvironment.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Security environment - a container for security related data elements
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_SignatureKey.js.html">SignatureKey.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
SignatureKey - Object storing information related to PrK.QES
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_TransparentEF.js.html">TransparentEF.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of a ISO 7816-4 file system simulation
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_TrustAnchor.js.html">TrustAnchor.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
TrustAnchor Base class for card verifiable certificate based access controller
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_CVC.js.html">CVC.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Support for card verifiable certificates and certificate requests according to EAC 1.1/2.0
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_CVCCA.js.html">CVCCA.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Simple CVC-CA
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_CVCertificateStore.js.html">CVCertificateStore.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Support for a card verifiable certificates store according to EAC 1.1/2.0 using Data Access Objects
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_ChipAuthentication.js.html">ChipAuthentication.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of the chip authentication protocol for both card and terminal
as defined for EAC 2.0
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_EAC20.js.html">EAC20.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of the Extended Access Control protocol in version 2.0
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_EAC2CVCertificateGenerator.js.html">EAC2CVCertificateGenerator.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
EAC2CVCertificateGenerator - Simple CV certificate generator class
based on "Advanced Security Mechanisms for Machine Readable Travel Documents", Version 2.0
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_EAC2CVRequestGenerator.js.html">EAC2CVRequestGenerator.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of Simple CV request generator based on
TR-03110 "Advanced Security Mechanisms for Machine Readable Travel Documents", Version 2.0
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_P11CVCertificateStore.js.html">P11CVCertificateStore.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
A card verifiable certificate store using a PKCS#11 device as key store
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_PACE.js.html">PACE.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of the PACE/SAC protocol for both card and terminal
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_PublicKeyReference.js.html">PublicKeyReference.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|  
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 --------- 

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Public Key Reference, the value stored in CAR and CHR of CV-Certificates
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/eac_RestrictedIdentification.js.html">RestrictedIdentification.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|  
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 --------- 

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of the ASN.1 structures for restricted identification
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/file_File.js.html">File.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
General File I/O Class
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/file_FileEncryptor.js.html">FileEncryptor.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2026 CardContact Systems GmbH
|'##> <##'|  32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
File encryptor.
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/file_PublicKeyFile.js.html">PublicKeyFile.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2026 CardContact Systems GmbH
|'##> <##'|  32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Public Key File Format
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/gp_GPSCP03.js.html">GPSCP03.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Support for Global Platform SCP03 protocol
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/pkcs_PKCS1.js.html">PKCS1.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2015 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Basic helper functions to encode and decode PKCS#1 padding
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/pkcs_PKCS10.js.html">PKCS10.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2015 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
PKCS#10 Decoder
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/pkcs_PKCS8.js.html">PKCS8.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Basic helper functions to convert PKCS#8 data to GP keys and vice versa
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/ram_RAMClient.js.html">RAMClient.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Remote Application Management over HTTP (RAMoverHTTP) client
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/sc-hsm_CAConnection.js.html">CAConnection.js</a></h2>
				---------
|.##> <##.|  SmartCard-HSM Support Scripts
|#       #|
|#       #|  Copyright (c) 2016 CardContact Systems GmbH
|'##> <##'|  32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Online-CA Connection
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/sc-hsm_CryptoProvider.js.html">CryptoProvider.js</a></h2>
				---------
|.##> <##.|  SmartCard-HSM Support Scripts
|#       #|
|#       #|  Copyright (c) 2011-2016 CardContact Systems GmbH
|'##> <##'|  Schuelerweg 38, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
SmartCard-HSM Crypto Provider
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/sc-hsm_DKEK.js.html">DKEK.js</a></h2>
				---------
|.##> <##.|  SmartCard-HSM Support Scripts
|#       #|
|#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
DKEK key wrapper
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/sc-hsm_EACCryptoProvider.js.html">EACCryptoProvider.js</a></h2>
				---------
|.##> <##.|  SmartCard-HSM Support Scripts
|#       #|
|#       #|  Copyright (c) 2011-2016 CardContact Systems GmbH
|'##> <##'|  Schuelerweg 38, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
SmartCard-HSM Crypto Provider for EAC-PKI
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/sc-hsm_HSMCVCertificateStore.js.html">HSMCVCertificateStore.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
A card verifiable certificate store using a SmartCard-HSM as key store
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/sc-hsm_HSMKeyStore.js.html">HSMKeyStore.js</a></h2>
				---------
|.##> <##.|  SmartCard-HSM Support Scripts
|#       #|
|#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Class implementing a key store for X.509 certificate and private keys stored on a SmartCard-HSM
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/sc-hsm_ManagePKA.js.html">ManagePKA.js</a></h2>
				---------
|.##> <##.|  SmartCard-HSM Support Scripts
|#       #|
|#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
SmartCard-HSM Public Key Authentication Support
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/sc-hsm_PaperKeyEncoding.js.html">PaperKeyEncoding.js</a></h2>
				---------
|.##> <##.|  SmartCard-HSM Support Scripts
|#       #|
|#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
PaperKey Encoder and Decoder
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/sc-hsm_SmartCardHSM.js.html">SmartCardHSM.js</a></h2>
				---------
|.##> <##.|  SmartCard-HSM Support Scripts
|#       #|
|#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
SmartCard-HSM Card Service
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/x509_CRLGenerator.js.html">CRLGenerator.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Simple CRL generator class
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/x509_DNEncoder.js.html">DNEncoder.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2016 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Encoder for Distinguished Names using input data and a mask
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/x509_PKCS10Generator.js.html">PKCS10Generator.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
A PKCS#10 generator class based on RFC5280
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/x509_PKIXCommon.js.html">PKIXCommon.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Common classes and functions for PKIX
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/x509_X509CertificateGenerator.js.html">X509CertificateGenerator.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
A X509 certificate generator class following RFC5280
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/x509_X509CertificateIssuer.js.html">X509CertificateIssuer.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
A Issuer for X.509 Certificates
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/x509_X509CertificateStore.js.html">X509CertificateStore.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Generic X509 certificate, request and key store
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/x509_X509Name.js.html">X509Name.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 ---------

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
X509Name - Class to support X500 Names
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/src/cardsim_FileSystemIdObject.js.html">FileSystemIdObject.js</a></h2>
				---------
|.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
|#       #|
|#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
|'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 --------- 

 This file is part of OpenSCDP.

 OpenSCDP is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.

 OpenSCDP is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with OpenSCDP; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Implementation of ISO 7816-4 APDU processing
				<dl>
					
					
					
					
				</dl>
			</div>
			<hr />
			
			
		</div>
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		
		<title>JsDoc Reference - Index</title>
		<meta name="generator" content="JsDoc Toolkit" />
		
		<style type="text/css">
		/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>
	
	<body>
		<div id="header">
</div>
		
		<div id="index">
			<div align="center"><a href="index.html">Class Index</a>
| <a href="files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="symbols/APDU.html">APDU</a></li>
	
	<li><a href="symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="symbols/CVC.html">CVC</a></li>
	
	<li><a href="symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="symbols/DF.html">DF</a></li>
	
	<li><a href="symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="symbols/FCP.html">FCP</a></li>
	
	<li><a href="symbols/File.html">File</a></li>
	
	<li><a href="symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="symbols/PACE.html">PACE</a></li>
	
	<li><a href="symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
		</div>
		
		<div id="content">
			<h1 class="classTitle">Class Index</h1>
			
			
			<div>
				<h2><a href="symbols/_global_.html">_global_</a></h2>
				
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/AccessController.html">AccessController</a></h2>
				
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/APDU.html">APDU</a></h2>
				Class implementing support for command and response APDUs
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/AuthenticationObject.html">AuthenticationObject</a></h2>
				Class implementing authentication objects like PINs, PACE passwords or keys
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/CAConnection.html">CAConnection</a></h2>
				Class implementing a CA web service connector
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/ChipAuthentication.html">ChipAuthentication</a></h2>
				This class implements the ChipAuthentication protocol
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></h2>
				<p>This class encodes and decodes ChipAuthenticationDomainParameterInfo objects.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></h2>
				<p>This class encodes and decodes ChipAuthenticationInfo objects.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></h2>
				<p>This class encodes and decodes ChipAuthenticationPublicKeyInfo objects.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/CommandInterpreter.html">CommandInterpreter</a></h2>
				Class implementing a command interpreter that handles ISO 7816-4 command APDUs
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/CRLGenerator.html">CRLGenerator</a></h2>
				Class implementing a CRL certificate generator
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/CVC.html">CVC</a></h2>
				Class implementing a decoder for card verifiable certificates or requests according to
       Extended Access Control (EAC) as defined in BSI TR-03110 1.11 and 2.02.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/CVCCA.html">CVCCA</a></h2>
				Class supporting a certification authority that can issue CVC certificates
for the EAC protocol.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/CVCertificateStore.html">CVCertificateStore</a></h2>
				Class that abstracts a certificate and key store for a EAC PKI.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/DataUnitAPDU.html">DataUnitAPDU</a></h2>
				Adapter class to decode APDUs for data unit handling
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/DF.html">DF</a></h2>
				Class implementing dedicated files
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/DKEK.html">DKEK</a></h2>
				
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/DNEncoder.html">DNEncoder</a></h2>
				
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/EAC20.html">EAC20</a></h2>
				Class implementing support for Extended Access Control V2
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></h2>
				Class implementing a generator for CV certificates according to EAC 1.1 and EAC 2.0 specifications.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></h2>
				Class implementing a generator for CVC requests
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/FCP.html">FCP</a></h2>
				Class storing File Control Parameter for a file system node
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/File.html">File</a></h2>
				Class implementing basic support for files
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/FileEncryptor.html">FileEncryptor</a></h2>
				Class implementing file encryption
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/FileSelector.html">FileSelector</a></h2>
				Class implementing a file selector used to store information about the currently selected
       file system object and to process the SELECT APDU
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/FileSystemIdObject.html">FileSystemIdObject</a></h2>
				Abstract class for file system objects identified by an identifier
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/FSNode.html">FSNode</a></h2>
				Abstract class for file system nodes
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/GPSCP03.html">GPSCP03</a></h2>
				
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></h2>
				CV certificate store with SmartCard-HSM as secure key store
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/HSMKeyStore.html">HSMKeyStore</a></h2>
				Class implementing some simple access functions to generate key pairs and store certificates
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/LinearEF.html">LinearEF</a></h2>
				Class implementing linear EFs
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/ManagePKA.html">ManagePKA</a></h2>
				Class providing support for public key authentication
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></h2>
				CV certificate store with PKCS#11 as secure key store
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/PACE.html">PACE</a></h2>
				This class implements the PACE protocol
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></h2>
				<p>This class encodes and decodes PACEDomainParameterInfo objects.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/PACEInfo.html">PACEInfo</a></h2>
				<p>This class encodes and decodes PACEInfo objects.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></h2>
				Encoder / Decoder for PaperKeys
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/PKCS10Generator.html">PKCS10Generator</a></h2>
				Class implementing a PKCS#10 certificate request
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/PublicKeyFile.html">PublicKeyFile</a></h2>
				Read and write encoded SmartCard-HSM public keys.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/PublicKeyReference.html">PublicKeyReference</a></h2>
				<p>A class that implements a public key reference to be used as CAR and CHR in
       card verifiable certificates (CVC).
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/RAMClient.html">RAMClient</a></h2>
				
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></h2>
				<p>This class encodes and decodes RestrictedIdentificationDomainParameterInfo objects.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></h2>
				<p>This class encodes and decodes RestrictedIdentificationInfo objects.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/SecureChannelHandler.html">SecureChannelHandler</a></h2>
				Class implementing a secure messaging channel
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></h2>
				Decoder for a secure messaging APDU
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/SecurityEnvironment.html">SecurityEnvironment</a></h2>
				Class implementing a security environment for cryptographic operations.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/SignatureKey.html">SignatureKey</a></h2>
				Class implementing signature keys
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/SmartCardHSM.html">SmartCardHSM</a></h2>
				Class implementing support for SmartCard-HSM access
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></h2>
				Wrapper to provide Crypto interface to SmartCard-HSM
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></h2>
				Class implementing the device initialization methods
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></h2>
				Class implementing key access
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></h2>
				Class implementing an encoder for the C-Data required in GENERATE ASYMMETRIC KEY PAIR
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></h2>
				Class implementing an encoder for the C-Data required in Generate Symmetric Key
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/TransparentEF.html">TransparentEF</a></h2>
				Class implementing a transparent EF
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/TrustAnchor.html">TrustAnchor</a></h2>
				Class implementing a CVC based access controller
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></h2>
				Class implementing a X.509 certificate generator
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></h2>
				Class implementing a certification authority issuing X.509 certificates and CRLs
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/X509CertificateStore.html">X509CertificateStore</a></h2>
				Class that abstracts a certificate, request and key store for a X509 PKI.
			</div>
			<hr />
			
			<div>
				<h2><a href="symbols/X509Signer.html">X509Signer</a></h2>
				Class implementing a signer backed by a X.509 certificate
			</div>
			<hr />
			
			
		</div>
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blankt">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - APDU</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class APDU
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing support for command and response APDUs
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_APDU.js.html">APDU.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class APDU.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/APDU.html#constructor">APDU</a></b>(command, cla, ins, p1, p2, data, Ne)
							</div>
							<div class="description">Create an APDU

<p>This constructor supports the signatures</p>
<ul>
 <li>APDU(ByteString command)</li>
 <li>APDU(Number cla, Number ins, Number p1, Number p2)</li>
 <li>APDU(Number cla, Number ins, Number p1, Number p2, data)</li>
 <li>APDU(Number cla, Number ins, Number p1, Number p2, data, Ne)</li>
</ul></div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class APDU.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#fromByteString">fromByteString</a></b>(bs)
								</div>
								<div class="description">Create an APDU object from the encoded form (Called internally)</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getCData">getCData</a></b>()
								</div>
								<div class="description">Gets the command data</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getCDataAsTLVList">getCDataAsTLVList</a></b>()
								</div>
								<div class="description">Gets the command data as a list of TLV objects</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getCLA">getCLA</a></b>()
								</div>
								<div class="description">Gets the class byte</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getCommandAPDU">getCommandAPDU</a></b>()
								</div>
								<div class="description">Get encoded command APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getINS">getINS</a></b>()
								</div>
								<div class="description">Gets the instruction byte</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getNe">getNe</a></b>()
								</div>
								<div class="description">Gets the number of expected bytes</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getP1">getP1</a></b>()
								</div>
								<div class="description">Gets the P1 byte</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getP2">getP2</a></b>()
								</div>
								<div class="description">Gets the P2 byte</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getRData">getRData</a></b>()
								</div>
								<div class="description">Get the response data</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getResponseAPDU">getResponseAPDU</a></b>()
								</div>
								<div class="description">Get encoded response APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getSecureChannel">getSecureChannel</a></b>()
								</div>
								<div class="description">Return the secure channel, if any</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#getSW">getSW</a></b>()
								</div>
								<div class="description">Get the status word</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#hasCData">hasCData</a></b>()
								</div>
								<div class="description">Check if APDU has command data</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#hasLe">hasLe</a></b>()
								</div>
								<div class="description">Check if APDU has Le field</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#hasRData">hasRData</a></b>()
								</div>
								<div class="description">Check if APDU has response data</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#hasSecureChannel">hasSecureChannel</a></b>()
								</div>
								<div class="description">Test if a secure channel is defined for this APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#isAuthenticatedHeader">isAuthenticatedHeader</a></b>()
								</div>
								<div class="description">Test if command is send using secure messaging</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#isChained">isChained</a></b>()
								</div>
								<div class="description">Test if command chaining is indicated</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#isExtendedLength">isExtendedLength</a></b>()
								</div>
								<div class="description">Test if command uses extended length</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#isISO">isISO</a></b>()
								</div>
								<div class="description">Test if command is an ISO command</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#isSecureMessaging">isSecureMessaging</a></b>()
								</div>
								<div class="description">Test if command is send using secure messaging</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#setCData">setCData</a></b>(cdata)
								</div>
								<div class="description">Set the command data</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#setCLA">setCLA</a></b>(cla)
								</div>
								<div class="description">Sets the class byte, e.g.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#setRData">setRData</a></b>(data)
								</div>
								<div class="description">Sets the response data field for the response APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#setSecureChannel">setSecureChannel</a></b>(secureChannel)
								</div>
								<div class="description">Set secure channel object to be used in wrap and unwrap methods</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#setSW">setSW</a></b>(sw)
								</div>
								<div class="description">Sets the status word for the response ADPU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">APDU.<b><a href="../symbols/APDU.html#.test">test</a></b>()
								</div>
								<div class="description">Simple unit test</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#toString">toString</a></b>()
								</div>
								<div class="description">Return a human readable form of this object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#unwrap">unwrap</a></b>()
								</div>
								<div class="description">Unwrap APDU using secure channel</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/APDU.html#wrap">wrap</a></b>()
								</div>
								<div class="description">Wrap APDU using secure channel</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>APDU</b>(command, cla, ins, p1, p2, data, Ne)
				</div>
				
				<div class="description">
					Create an APDU

<p>This constructor supports the signatures</p>
<ul>
 <li>APDU(ByteString command)</li>
 <li>APDU(Number cla, Number ins, Number p1, Number p2)</li>
 <li>APDU(Number cla, Number ins, Number p1, Number p2, data)</li>
 <li>APDU(Number cla, Number ins, Number p1, Number p2, data, Ne)</li>
</ul>
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{ByteString}</span>  <b>command</b>
								
							</dt>
								<dd>the command APDU</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>cla</b>
								
							</dt>
								<dd>the class byte</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>ins</b>
								
							</dt>
								<dd>the instruction byte</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>p1</b>
								
							</dt>
								<dd>the first parameter</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>p2</b>
								
							</dt>
								<dd>the second parameter</dd>
						
							<dt>
								<span class="light fixedFont">{ByteString}</span>  <b>data</b>
								
							</dt>
								<dd>the data field (optional)</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>Ne</b>
								
							</dt>
								<dd>the number of expected bytes (optional)</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="fromByteString"> </a>
					<div class="fixedFont">
					
					
					<b>fromByteString</b>(bs)
					
					</div>
					<div class="description">
						Create an APDU object from the encoded form (Called internally)
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>bs</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="getCData"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getCData</b>()
					
					</div>
					<div class="description">
						Gets the command data
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the command data, if any else undefined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCDataAsTLVList"> </a>
					<div class="fixedFont">
					
					<span class="light">{TLVList}</span>
					<b>getCDataAsTLVList</b>()
					
					</div>
					<div class="description">
						Gets the command data as a list of TLV objects
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the command data as TLV list, if any else undefined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCLA"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getCLA</b>()
					
					</div>
					<div class="description">
						Gets the class byte
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the class byte</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCommandAPDU"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getCommandAPDU</b>()
					
					</div>
					<div class="description">
						Get encoded command APDU
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded command APDU</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getINS"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getINS</b>()
					
					</div>
					<div class="description">
						Gets the instruction byte
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the instruction byte</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getNe"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getNe</b>()
					
					</div>
					<div class="description">
						Gets the number of expected bytes
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the number of expected bytes or undefined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getP1"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getP1</b>()
					
					</div>
					<div class="description">
						Gets the P1 byte
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the P1 byte</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getP2"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getP2</b>()
					
					</div>
					<div class="description">
						Gets the P2 byte
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the P2 byte</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRData"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getRData</b>()
					
					</div>
					<div class="description">
						Get the response data
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the response data</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getResponseAPDU"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getResponseAPDU</b>()
					
					</div>
					<div class="description">
						Get encoded response APDU
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded response APDU</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSecureChannel"> </a>
					<div class="fixedFont">
					
					<span class="light">{SecureChannel}</span>
					<b>getSecureChannel</b>()
					
					</div>
					<div class="description">
						Return the secure channel, if any
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the secure channel</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSW"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getSW</b>()
					
					</div>
					<div class="description">
						Get the status word
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the status word</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasCData"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>hasCData</b>()
					
					</div>
					<div class="description">
						Check if APDU has command data
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if command APDU has data field</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasLe"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>hasLe</b>()
					
					</div>
					<div class="description">
						Check if APDU has Le field
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if command APDU has Le field</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasRData"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>hasRData</b>()
					
					</div>
					<div class="description">
						Check if APDU has response data
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if response APDU has data field</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasSecureChannel"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>hasSecureChannel</b>()
					
					</div>
					<div class="description">
						Test if a secure channel is defined for this APDU
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if secure channel is set</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isAuthenticatedHeader"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isAuthenticatedHeader</b>()
					
					</div>
					<div class="description">
						Test if command is send using secure messaging
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if secure messaging is using an authenticated header</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isChained"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isChained</b>()
					
					</div>
					<div class="description">
						Test if command chaining is indicated
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if chaining bit is set</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isExtendedLength"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isExtendedLength</b>()
					
					</div>
					<div class="description">
						Test if command uses extended length
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if APDU uses extended length</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isISO"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isISO</b>()
					
					</div>
					<div class="description">
						Test if command is an ISO command
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if command has ISO class byte</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isSecureMessaging"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isSecureMessaging</b>()
					
					</div>
					<div class="description">
						Test if command is send using secure messaging
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if secure messaging is indicated in CLA byte</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setCData"> </a>
					<div class="fixedFont">
					
					
					<b>setCData</b>(cdata)
					
					</div>
					<div class="description">
						Set the command data
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>cdata</b>
									
								</dt>
								<dd>the command data</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setCLA"> </a>
					<div class="fixedFont">
					
					
					<b>setCLA</b>(cla)
					
					</div>
					<div class="description">
						Sets the class byte, e.g. after a transformation
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>cla</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setRData"> </a>
					<div class="fixedFont">
					
					
					<b>setRData</b>(data)
					
					</div>
					<div class="description">
						Sets the response data field for the response APDU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>the response data field</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSecureChannel"> </a>
					<div class="fixedFont">
					
					
					<b>setSecureChannel</b>(secureChannel)
					
					</div>
					<div class="description">
						Set secure channel object to be used in wrap and unwrap methods
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{SecureChannel}</span> <b>secureChannel</b>
									
								</dt>
								<dd>the channel</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSW"> </a>
					<div class="fixedFont">
					
					
					<b>setSW</b>(sw)
					
					</div>
					<div class="description">
						Sets the status word for the response ADPU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>sw</b>
									
								</dt>
								<dd>the status word</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name=".test"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">APDU.</span><b>test</b>()
					
					</div>
					<div class="description">
						Simple unit test
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					
					<b>toString</b>()
					
					</div>
					<div class="description">
						Return a human readable form of this object
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="unwrap"> </a>
					<div class="fixedFont">
					
					
					<b>unwrap</b>()
					
					</div>
					<div class="description">
						Unwrap APDU using secure channel
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="wrap"> </a>
					<div class="fixedFont">
					
					
					<b>wrap</b>()
					
					</div>
					<div class="description">
						Wrap APDU using secure channel
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - AccessController</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class AccessController
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_AccessController.js.html">AccessController.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class AccessController.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/AccessController.html#constructor">AccessController</a></b>()
							</div>
							<div class="description">Create an default controller granting read but denying write access</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class AccessController.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AccessController.html#checkCommandAccess">checkCommandAccess</a></b>(apdu, apdu)
								</div>
								<div class="description">Check if command is allowed</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AccessController.html#checkFileReadAccess">checkFileReadAccess</a></b>(apdu, node, node)
								</div>
								<div class="description">Check if read access to file system node is allowed</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AccessController.html#checkFileWriteAccess">checkFileWriteAccess</a></b>(apdu, node, node)
								</div>
								<div class="description">Check if write access to file system node is allowed</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>AccessController</b>()
				</div>
				
				<div class="description">
					Create an default controller granting read but denying write access
					
				</div>
				
				
				
				
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="checkCommandAccess"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>checkCommandAccess</b>(apdu, apdu)
					
					</div>
					<div class="description">
						Check if command is allowed
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the APDU to check</dd>
							
								<dt>
									<b>apdu</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if access is allowed</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="checkFileReadAccess"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>checkFileReadAccess</b>(apdu, node, node)
					
					</div>
					<div class="description">
						Check if read access to file system node is allowed
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the APDU used to access the object</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/FSNode.html">FSNode</a>}</span> <b>node</b>
									
								</dt>
								<dd>the file system object</dd>
							
								<dt>
									<b>node</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if access is allowed</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="checkFileWriteAccess"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>checkFileWriteAccess</b>(apdu, node, node)
					
					</div>
					<div class="description">
						Check if write access to file system node is allowed
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the APDU used to access the object</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/FSNode.html">FSNode</a>}</span> <b>node</b>
									
								</dt>
								<dd>the file system object</dd>
							
								<dt>
									<b>node</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if access is allowed</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - AuthenticationObject</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class AuthenticationObject
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing authentication objects like PINs, PACE passwords or keys
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_AuthenticationObject.js.html">AuthenticationObject.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class AuthenticationObject.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/AuthenticationObject.html#constructor">AuthenticationObject</a></b>(name, type, id, value)
							</div>
							<div class="description">Create an authentication object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class AuthenticationObject.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AuthenticationObject.html#activate">activate</a></b>()
								</div>
								<div class="description">Activate authentication object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AuthenticationObject.html#changeReferenceData">changeReferenceData</a></b>(qualifier, value)
								</div>
								<div class="description">Change reference data, optionally verifying the old value before</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AuthenticationObject.html#deactivate">deactivate</a></b>()
								</div>
								<div class="description">Deactivate authentication object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AuthenticationObject.html#decreaseRetryCounter">decreaseRetryCounter</a></b>()
								</div>
								<div class="description">Deactivate authentication object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AuthenticationObject.html#getType">getType</a></b>()
								</div>
								<div class="description">Override from base class</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AuthenticationObject.html#resetRetryCounter">resetRetryCounter</a></b>(newValue)
								</div>
								<div class="description">Reset retry counter and optionally set new reference value</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AuthenticationObject.html#restoreRetryCounter">restoreRetryCounter</a></b>()
								</div>
								<div class="description">Deactivate authentication object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AuthenticationObject.html#terminate">terminate</a></b>()
								</div>
								<div class="description">Terminate authentication object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AuthenticationObject.html#toString">toString</a></b>()
								</div>
								<div class="description">Convert object to a human readable string</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/AuthenticationObject.html#verify">verify</a></b>(value)
								</div>
								<div class="description">Verify PIN value</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>AuthenticationObject</b>(name, type, id, value)
				</div>
				
				<div class="description">
					Create an authentication object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>name</b>
								
							</dt>
								<dd>the human readable name of the object</dd>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>type</b>
								
							</dt>
								<dd>one of AuthenticationObject.TYPE_PACE or AuthenticationObject.TYPE_PIN</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>id</b>
								
							</dt>
								<dd>the password or key id</dd>
						
							<dt>
								<span class="light fixedFont">{ByteString}</span>  <b>value</b>
								
							</dt>
								<dd>the reference value</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="activate"> </a>
					<div class="fixedFont">
					
					
					<b>activate</b>()
					
					</div>
					<div class="description">
						Activate authentication object
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="changeReferenceData"> </a>
					<div class="fixedFont">
					
					
					<b>changeReferenceData</b>(qualifier, value)
					
					</div>
					<div class="description">
						Change reference data, optionally verifying the old value before
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>qualifier</b>
									
								</dt>
								<dd>command qualifier, 00 = oldPIN||newPIN, 01 = newPIN</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>value</b>
									
								</dt>
								<dd>new reference value</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="deactivate"> </a>
					<div class="fixedFont">
					
					
					<b>deactivate</b>()
					
					</div>
					<div class="description">
						Deactivate authentication object
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="decreaseRetryCounter"> </a>
					<div class="fixedFont">
					
					
					<b>decreaseRetryCounter</b>()
					
					</div>
					<div class="description">
						Deactivate authentication object
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="getType"> </a>
					<div class="fixedFont">
					
					
					<b>getType</b>()
					
					</div>
					<div class="description">
						Override from base class
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="resetRetryCounter"> </a>
					<div class="fixedFont">
					
					
					<b>resetRetryCounter</b>(newValue)
					
					</div>
					<div class="description">
						Reset retry counter and optionally set new reference value
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>newValue</b>
									
								</dt>
								<dd>new reference value</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="restoreRetryCounter"> </a>
					<div class="fixedFont">
					
					
					<b>restoreRetryCounter</b>()
					
					</div>
					<div class="description">
						Deactivate authentication object
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="terminate"> </a>
					<div class="fixedFont">
					
					
					<b>terminate</b>()
					
					</div>
					<div class="description">
						Terminate authentication object
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					
					<b>toString</b>()
					
					</div>
					<div class="description">
						Convert object to a human readable string
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="verify"> </a>
					<div class="fixedFont">
					
					
					<b>verify</b>(value)
					
					</div>
					<div class="description">
						Verify PIN value
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>value</b>
									
								</dt>
								<dd>reference value</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - CAConnection</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class CAConnection
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a CA web service connector
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_CAConnection.js.html">CAConnection.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class CAConnection.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/CAConnection.html#constructor">CAConnection</a></b>(url)
							</div>
							<div class="description">Creates a web service connector to access an online CA</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class CAConnection.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CAConnection.html#close">close</a></b>()
								</div>
								<div class="description">Close the connector and release allocated resources</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CAConnection.html#getLastRequest">getLastRequest</a></b>()
								</div>
								<div class="description">Gets the last request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CAConnection.html#getLastResponse">getLastResponse</a></b>()
								</div>
								<div class="description">Gets the last response</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CAConnection.html#getLastReturnCode">getLastReturnCode</a></b>()
								</div>
								<div class="description">Get the last return code</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CAConnection.html#requestCertificate">requestCertificate</a></b>(certreq, messageID, responseURL, eMailAddress, activationCode)
								</div>
								<div class="description">Request a certificate from the CA using a web service</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>CAConnection</b>(url)
				</div>
				
				<div class="description">
					Creates a web service connector to access an online CA
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>url</b>
								
							</dt>
								<dd>the web service endpoint</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="close"> </a>
					<div class="fixedFont">
					
					
					<b>close</b>()
					
					</div>
					<div class="description">
						Close the connector and release allocated resources
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="getLastRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{XML}</span>
					<b>getLastRequest</b>()
					
					</div>
					<div class="description">
						Gets the last request
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the last request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getLastResponse"> </a>
					<div class="fixedFont">
					
					<span class="light">{XML}</span>
					<b>getLastResponse</b>()
					
					</div>
					<div class="description">
						Gets the last response
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the last response</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getLastReturnCode"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getLastReturnCode</b>()
					
					</div>
					<div class="description">
						Get the last return code
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the last return code received or null if none defined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="requestCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString[]}</span>
					<b>requestCertificate</b>(certreq, messageID, responseURL, eMailAddress, activationCode)
					
					</div>
					<div class="description">
						Request a certificate from the CA using a web service
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>certreq</b>
									
								</dt>
								<dd>the certificate request</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>messageID</b>
									
								</dt>
								<dd>the messageID for asynchronous requests (optional)</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>responseURL</b>
									
								</dt>
								<dd>the URL to which the asynchronous response is send (optional)</dd>
							
								<dt>
									<b>eMailAddress</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>activationCode</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the new certificates</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - CRLGenerator</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class CRLGenerator
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a CRL certificate generator
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/x509_CRLGenerator.js.html">CRLGenerator.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class CRLGenerator.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/CRLGenerator.html#constructor">CRLGenerator</a></b>(crypto)
							</div>
							<div class="description">Create a Certificate Revocation List (CRL) generator.</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class CRLGenerator.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#addAuthorityKeyIdentifierExtension">addAuthorityKeyIdentifierExtension</a></b>(publicKey)
								</div>
								<div class="description">Adds the authority public key identifier extension based on the issuers key.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#addCRLNumberExtension">addCRLNumberExtension</a></b>(crlnumber)
								</div>
								<div class="description">Adds the CRL number extension.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#addExtension">addExtension</a></b>(extnID, critical, the)
								</div>
								<div class="description">Adds an extension to the CRL

<p>The structure is defined as:</p>
<pre>
   Extension  ::=  SEQUENCE  {
       extnID      OBJECT IDENTIFIER,
       critical    BOOLEAN DEFAULT FALSE,
       extnValue   OCTET STRING
                   -- contains the DER encoding of an ASN.1 value
                   -- corresponding to the extension type identified
                   -- by extnID
       }
</pre></div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#addRevokedCertificate">addRevokedCertificate</a></b>(revokedCertificate)
								</div>
								<div class="description">Add a revoked certificate to the list.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#generateCRL">generateCRL</a></b>(privateKey)
								</div>
								<div class="description">Generates the certificate.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#getExtensions">getExtensions</a></b>()
								</div>
								<div class="description">Gets the CRL extension as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#getIssuer">getIssuer</a></b>()
								</div>
								<div class="description">Gets the issuer name as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#getNextUpdate">getNextUpdate</a></b>()
								</div>
								<div class="description">Gets the nextUpdate TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#getRevokedCertificates">getRevokedCertificates</a></b>()
								</div>
								<div class="description">Gets revoked certificates</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#getSignatureAlgorithm">getSignatureAlgorithm</a></b>()
								</div>
								<div class="description">Gets the signature algorithm TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#getTbsCertificateList">getTbsCertificateList</a></b>()
								</div>
								<div class="description">Gets the part of the CRL that will be signed</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#getThisUpdate">getThisUpdate</a></b>()
								</div>
								<div class="description">Gets the thisUpdate TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#loadCRLEntries">loadCRLEntries</a></b>(crlbin)
								</div>
								<div class="description">Load list of revoked certificates from an existing CRL</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#reset">reset</a></b>()
								</div>
								<div class="description">Resets all internal state variables.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#revokeCertificate">revokeCertificate</a></b>(serial, timestamp, reason, ext)
								</div>
								<div class="description">Add a revoked certificate to the list.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#setIssuer">setIssuer</a></b>(issuer)
								</div>
								<div class="description">Sets the isser name.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#setNextUpdate">setNextUpdate</a></b>(datetime)
								</div>
								<div class="description">Sets the timestamp for the next update</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#setSignatureAlgorithm">setSignatureAlgorithm</a></b>(alg)
								</div>
								<div class="description">Sets the signature algorithm.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CRLGenerator.html#setThisUpdate">setThisUpdate</a></b>(datetime)
								</div>
								<div class="description">Sets the timestamp for this CRL</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>CRLGenerator</b>(crypto)
				</div>
				
				<div class="description">
					Create a Certificate Revocation List (CRL) generator.
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider to use for signing operations</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="addAuthorityKeyIdentifierExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addAuthorityKeyIdentifierExtension</b>(publicKey)
					
					</div>
					<div class="description">
						Adds the authority public key identifier extension based on the issuers key.

<p>The key identifier is calculated as SHA-1 hash over the contents of the
issuer public key (Without tag, length and number of unused bits.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>publicKey</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addCRLNumberExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addCRLNumberExtension</b>(crlnumber)
					
					</div>
					<div class="description">
						Adds the CRL number extension.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>crlnumber</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addExtension</b>(extnID, critical, the)
					
					</div>
					<div class="description">
						Adds an extension to the CRL

<p>The structure is defined as:</p>
<pre>
   Extension  ::=  SEQUENCE  {
       extnID      OBJECT IDENTIFIER,
       critical    BOOLEAN DEFAULT FALSE,
       extnValue   OCTET STRING
                   -- contains the DER encoding of an ASN.1 value
                   -- corresponding to the extension type identified
                   -- by extnID
       }
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>extnID</b>
									
								</dt>
								<dd>the extensions object identifier</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>critical</b>
									
								</dt>
								<dd>the extension is critical</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>extension value as ByteString</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addRevokedCertificate"> </a>
					<div class="fixedFont">
					
					
					<b>addRevokedCertificate</b>(revokedCertificate)
					
					</div>
					<div class="description">
						Add a revoked certificate to the list. This adds the complete DER encoded structure.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>revokedCertificate</b>
									
								</dt>
								<dd>the information related to the revoked certificate</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="generateCRL"> </a>
					<div class="fixedFont">
					
					<span class="light">{X509}</span>
					<b>generateCRL</b>(privateKey)
					
					</div>
					<div class="description">
						Generates the certificate.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>privateKey</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the generated certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getExtensions"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getExtensions</b>()
					
					</div>
					<div class="description">
						Gets the CRL extension as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the CRL extensions</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getIssuer"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getIssuer</b>()
					
					</div>
					<div class="description">
						Gets the issuer name as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the issuer RDNSequence</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getNextUpdate"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getNextUpdate</b>()
					
					</div>
					<div class="description">
						Gets the nextUpdate TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the nextUpdate UTC encoded time</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRevokedCertificates"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getRevokedCertificates</b>()
					
					</div>
					<div class="description">
						Gets revoked certificates
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of revoked certificates</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSignatureAlgorithm"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getSignatureAlgorithm</b>()
					
					</div>
					<div class="description">
						Gets the signature algorithm TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the signature algorithm object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getTbsCertificateList"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getTbsCertificateList</b>()
					
					</div>
					<div class="description">
						Gets the part of the CRL that will be signed
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TBSCertificate part</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getThisUpdate"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getThisUpdate</b>()
					
					</div>
					<div class="description">
						Gets the thisUpdate TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the thisUpdate UTC encoded time</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="loadCRLEntries"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>loadCRLEntries</b>(crlbin)
					
					</div>
					<div class="description">
						Load list of revoked certificates from an existing CRL
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>crlbin</b>
									
								</dt>
								<dd>the DER encoded CRL</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the value of the CRLNumber extension, 0 if extension not defined or -1 if file could not be loaded</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="reset"> </a>
					<div class="fixedFont">
					
					
					<b>reset</b>()
					
					</div>
					<div class="description">
						Resets all internal state variables.
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="revokeCertificate"> </a>
					<div class="fixedFont">
					
					
					<b>revokeCertificate</b>(serial, timestamp, reason, ext)
					
					</div>
					<div class="description">
						Add a revoked certificate to the list. This adds the complete DER encoded structure.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>serial</b>
									
								</dt>
								<dd>the serial number of the certificate to revoke</dd>
							
								<dt>
									<span class="light fixedFont">{Date}</span> <b>timestamp</b>
									
								</dt>
								<dd>the revocation time, optional, default is now</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>reason</b>
									
								</dt>
								<dd>the revocation reason</dd>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>ext</b>
									
								</dt>
								<dd>the crl entry extensions</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setIssuer"> </a>
					<div class="fixedFont">
					
					
					<b>setIssuer</b>(issuer)
					
					</div>
					<div class="description">
						Sets the isser name.

<p>The issuer name must be a JavaScript object containing the properties:</p>
<ul>
 <li>C - the country</li>
 <li>O - the organization</li>
 <li>OU - the organization unit</li>
 <li>CN - the common name</li>
</ul>
<p>Example:</p>
<pre>
	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>issuer</b>
									
								</dt>
								<dd>the issuer name</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setNextUpdate"> </a>
					<div class="fixedFont">
					
					
					<b>setNextUpdate</b>(datetime)
					
					</div>
					<div class="description">
						Sets the timestamp for the next update
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Date}</span> <b>datetime</b>
									
								</dt>
								<dd>the date and time of the next update</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSignatureAlgorithm"> </a>
					<div class="fixedFont">
					
					
					<b>setSignatureAlgorithm</b>(alg)
					
					</div>
					<div class="description">
						Sets the signature algorithm.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>alg</b>
									
								</dt>
								<dd>the signature algorithm, must be one of Crypto.RSA, Crypto.RSA_SHA256 or Crypto.ECDSA_SHA256</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setThisUpdate"> </a>
					<div class="fixedFont">
					
					
					<b>setThisUpdate</b>(datetime)
					
					</div>
					<div class="description">
						Sets the timestamp for this CRL
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Date}</span> <b>datetime</b>
									
								</dt>
								<dd>the current date and time</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - CVC</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class CVC
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a decoder for card verifiable certificates or requests according to
       Extended Access Control (EAC) as defined in BSI TR-03110 1.11 and 2.02.
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_CVC.js.html">CVC.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class CVC.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/CVC.html#constructor">CVC</a></b>(param)
							</div>
							<div class="description">Create a CVC object from a DER encoded ByteString.</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class CVC.">
					<caption>Field Summary</caption>
					<thead>
						<tr>
							<th scope="col">Field Attributes</th>
							<th scope="col">Field Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.ATRIGHTS">ATRIGHTS</a></b>
								</div>
								<div class="description">Table of rights description for id-AT</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.id_TA_ECDSA">id_TA_ECDSA</a></b>
								</div>
								<div class="description">TA constants</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.ISRIGHTS">ISRIGHTS</a></b>
								</div>
								<div class="description">Table of rights description for id-IS</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.OBJECTNAMES">OBJECTNAMES</a></b>
								</div>
								<div class="description">Table of tag names</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.STRIGHTS">STRIGHTS</a></b>
								</div>
								<div class="description">Table of rights description for id-ST</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_AT">TAG_AT</a></b>
								</div>
								<div class="description">Authentication Template</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_AUT">TAG_AUT</a></b>
								</div>
								<div class="description">Relative Authorization</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_BODY">TAG_BODY</a></b>
								</div>
								<div class="description">Certificate Body</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_CAR">TAG_CAR</a></b>
								</div>
								<div class="description">Certification Authority Reference</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_CED">TAG_CED</a></b>
								</div>
								<div class="description">Certificate Effective Date</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_CHAT">TAG_CHAT</a></b>
								</div>
								<div class="description">Certificate Holder Authorisation Template</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_CHR">TAG_CHR</a></b>
								</div>
								<div class="description">Certificate Holder Reference</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_CPI">TAG_CPI</a></b>
								</div>
								<div class="description">Certificate Profile Identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_CVC">TAG_CVC</a></b>
								</div>
								<div class="description">CV Certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_CXD">TAG_CXD</a></b>
								</div>
								<div class="description">Certificate Expiration Date</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_ECC_A">TAG_ECC_A</a></b>
								</div>
								<div class="description">First coefficient a</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_ECC_B">TAG_ECC_B</a></b>
								</div>
								<div class="description">Second coefficient b</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_ECC_G">TAG_ECC_G</a></b>
								</div>
								<div class="description">Base Point G</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_ECC_H">TAG_ECC_H</a></b>
								</div>
								<div class="description">Cofactor f</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_ECC_N">TAG_ECC_N</a></b>
								</div>
								<div class="description">Order of the base point</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_ECC_P">TAG_ECC_P</a></b>
								</div>
								<div class="description">Prime Modulus</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_ECC_Q">TAG_ECC_Q</a></b>
								</div>
								<div class="description">Public Point y</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_EXTN">TAG_EXTN</a></b>
								</div>
								<div class="description">Certificate Extension</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_PUK">TAG_PUK</a></b>
								</div>
								<div class="description">Public Key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								CVC.<b><a href="../symbols/CVC.html#.TAG_SIG">TAG_SIG</a></b>
								</div>
								<div class="description">Signature</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class CVC.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#containsDomainParameter">containsDomainParameter</a></b>()
								</div>
								<div class="description">Return true of the certificate contains domain parameter</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.decodeECPublicKey">decodeECPublicKey</a></b>(pdo, key)
								</div>
								<div class="description">Decode a public key from the TR-03110 format</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#decorate">decorate</a></b>()
								</div>
								<div class="description">Decorate the ASN.1 object with the correct name</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.decorateTree">decorateTree</a></b>(node)
								</div>
								<div class="description">Function to recursively walk the ASN.1 tree</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#determineKeyIdentifier">determineKeyIdentifier</a></b>()
								</div>
								<div class="description">Determine the SubjectKeyIdentifier as defined in X.509</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.fromJSON">fromJSON</a></b>(obj)
								</div>
								<div class="description">Recreate object from JSON encoding</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getASN1">getASN1</a></b>()
								</div>
								<div class="description">Returns the certificate as ASN1 structure</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getBytes">getBytes</a></b>()
								</div>
								<div class="description">Returns the encoded certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getCAR">getCAR</a></b>()
								</div>
								<div class="description">Returns the certification authority reference (CAR).</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getCED">getCED</a></b>()
								</div>
								<div class="description">Returns the certificate effective date (CED).</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getCHAT">getCHAT</a></b>()
								</div>
								<div class="description">Returns the Certificate Holder Authorization Template.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getCHR">getCHR</a></b>()
								</div>
								<div class="description">Returns the certificate holder reference (CHR).</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getCPI">getCPI</a></b>()
								</div>
								<div class="description">Returns the certificate profile indicator (CPI)</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getCXD">getCXD</a></b>()
								</div>
								<div class="description">Returns the certificate expiration date (CXD).</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getECPublicKey">getECPublicKey</a></b>(domParam)
								</div>
								<div class="description">Returns the EC public key contained in the certificate.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getECPublicKeyIdentifier">getECPublicKeyIdentifier</a></b>()
								</div>
								<div class="description">Return the x-coordinate of the EC Public Key.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getExtension">getExtension</a></b>(extoid)
								</div>
								<div class="description">Returns the extension identified by the object identifier.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.getHashMech">getHashMech</a></b>(oid)
								</div>
								<div class="description">Return hash mechanism for object identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getLevel">getLevel</a></b>()
								</div>
								<div class="description">Return position of certificate in PKI hierachie</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getOuterCAR">getOuterCAR</a></b>()
								</div>
								<div class="description">Returns the outer certification authority reference (CAR).</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getPublicKey">getPublicKey</a></b>(domParam)
								</div>
								<div class="description">Returns the public key contained in the certificate.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getPublicKeyOID">getPublicKeyOID</a></b>()
								</div>
								<div class="description">Returns the public key object identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getRightsAsList">getRightsAsList</a></b>()
								</div>
								<div class="description">Return list of rights granted by the certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getRSAPublicKey">getRSAPublicKey</a></b>()
								</div>
								<div class="description">Returns the RSA public key contained in the certificate.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.getSignatureMech">getSignatureMech</a></b>(oid, keysize)
								</div>
								<div class="description">Return signature mechanism for object identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#getType">getType</a></b>()
								</div>
								<div class="description">Return a string describing the certificate type</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.I2O">I2O</a></b>(value, length)
								</div>
								<div class="description">Integer to octet string conversion</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#isAuthenticatedRequest">isAuthenticatedRequest</a></b>()
								</div>
								<div class="description">Determine if this is an authenticated request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#isCertificateRequest">isCertificateRequest</a></b>()
								</div>
								<div class="description">Determine if this is a certificate request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#isCountersignedRequest">isCountersignedRequest</a></b>()
								</div>
								<div class="description">Determine if this is a countersigned authenticated request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.isCurveOID">isCurveOID</a></b>(oid)
								</div>
								<div class="description">Return true of the object identifier denotes a curve</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.isECDSA">isECDSA</a></b>(oid)
								</div>
								<div class="description">Return true of the object identifier starts with id-TA-ECDSA</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#isExpired">isExpired</a></b>()
								</div>
								<div class="description">Determine if this certificate is expired</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.rewrapSignature">rewrapSignature</a></b>(signature, the)
								</div>
								<div class="description">Rewrap an ECDSA signature that contains redundant leading zeros in integer.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#toJSON">toJSON</a></b>()
								</div>
								<div class="description">Return object suitable for JSON encoding</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#toString">toString</a></b>()
								</div>
								<div class="description">Return a textual description of the certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.unwrapSignature">unwrapSignature</a></b>(signature, keylen)
								</div>
								<div class="description">Unwrap a ECDSA signature from the TLV encoding according to RFC3279 into the concatenation
of the unsigned integer r and s</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#validate">validate</a></b>()
								</div>
								<div class="description">Validate ASN1 semantic for card verifiable certificate or certificate request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#verifyATWith">verifyATWith</a></b>(puk, oid, oid)
								</div>
								<div class="description">Verify outer signature of an authenticated request with public key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#verifyATWithCVC">verifyATWithCVC</a></b>(cvc, cvc)
								</div>
								<div class="description">Verify outer signature of an authenticated request with public key from card verifiable certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#verifyWith">verifyWith</a></b>(crypto, puk, oid)
								</div>
								<div class="description">Verify certificate signature with public key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVC.html#verifyWithCVC">verifyWithCVC</a></b>(cvc, cvc)
								</div>
								<div class="description">Verify certificate signature with public key from card verifiable certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVC.<b><a href="../symbols/CVC.html#.wrapSignature">wrapSignature</a></b>(signature)
								</div>
								<div class="description">Wrap an ECDSA signature in the format r || s into a TLV encoding as defined by RFC 3279</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>CVC</b>(param)
				</div>
				
				<div class="description">
					Create a CVC object from a DER encoded ByteString.
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{ByteString}</span>  <b>param</b>
								
							</dt>
								<dd>the DER encoded certificate</dd>
						
						</dl>
					
					
					
					
					
						<dl class="detailList">
						<dt class="heading">Returns:</dt>
						
								<dd></dd>
						
						</dl>
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			
				<div class="sectionTitle">
					Field Detail
				</div>
				
					<a name=".ATRIGHTS"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>ATRIGHTS</b>
					
					</div>
					<div class="description">
						Table of rights description for id-AT
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".id_TA_ECDSA"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>id_TA_ECDSA</b>
					
					</div>
					<div class="description">
						TA constants
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".ISRIGHTS"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>ISRIGHTS</b>
					
					</div>
					<div class="description">
						Table of rights description for id-IS
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".OBJECTNAMES"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>OBJECTNAMES</b>
					
					</div>
					<div class="description">
						Table of tag names
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".STRIGHTS"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>STRIGHTS</b>
					
					</div>
					<div class="description">
						Table of rights description for id-ST
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_AT"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_AT</b>
					
					</div>
					<div class="description">
						Authentication Template
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_AUT"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_AUT</b>
					
					</div>
					<div class="description">
						Relative Authorization
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_BODY"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_BODY</b>
					
					</div>
					<div class="description">
						Certificate Body
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_CAR"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_CAR</b>
					
					</div>
					<div class="description">
						Certification Authority Reference
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_CED"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_CED</b>
					
					</div>
					<div class="description">
						Certificate Effective Date
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_CHAT"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_CHAT</b>
					
					</div>
					<div class="description">
						Certificate Holder Authorisation Template
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_CHR"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_CHR</b>
					
					</div>
					<div class="description">
						Certificate Holder Reference
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_CPI"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_CPI</b>
					
					</div>
					<div class="description">
						Certificate Profile Identifier
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_CVC"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_CVC</b>
					
					</div>
					<div class="description">
						CV Certificate
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_CXD"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_CXD</b>
					
					</div>
					<div class="description">
						Certificate Expiration Date
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_ECC_A"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_ECC_A</b>
					
					</div>
					<div class="description">
						First coefficient a
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_ECC_B"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_ECC_B</b>
					
					</div>
					<div class="description">
						Second coefficient b
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_ECC_G"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_ECC_G</b>
					
					</div>
					<div class="description">
						Base Point G
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_ECC_H"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_ECC_H</b>
					
					</div>
					<div class="description">
						Cofactor f
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_ECC_N"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_ECC_N</b>
					
					</div>
					<div class="description">
						Order of the base point
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_ECC_P"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_ECC_P</b>
					
					</div>
					<div class="description">
						Prime Modulus
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_ECC_Q"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_ECC_Q</b>
					
					</div>
					<div class="description">
						Public Point y
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_EXTN"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_EXTN</b>
					
					</div>
					<div class="description">
						Certificate Extension
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_PUK"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_PUK</b>
					
					</div>
					<div class="description">
						Public Key
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TAG_SIG"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>TAG_SIG</b>
					
					</div>
					<div class="description">
						Signature
						
						
					</div>
					
					

						
						
						
						

					
				
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="containsDomainParameter"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>containsDomainParameter</b>()
					
					</div>
					<div class="description">
						Return true of the certificate contains domain parameter
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if certificate contains domain parameter</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".decodeECPublicKey"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>decodeECPublicKey</b>(pdo, key)
					
					</div>
					<div class="description">
						Decode a public key from the TR-03110 format
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>pdo</b>
									
								</dt>
								<dd>the public key data object</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the key object to fill</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="decorate"> </a>
					<div class="fixedFont">
					
					
					<b>decorate</b>()
					
					</div>
					<div class="description">
						Decorate the ASN.1 object with the correct name
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name=".decorateTree"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>decorateTree</b>(node)
					
					</div>
					<div class="description">
						Function to recursively walk the ASN.1 tree
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>node</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="determineKeyIdentifier"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>determineKeyIdentifier</b>()
					
					</div>
					<div class="description">
						Determine the SubjectKeyIdentifier as defined in X.509
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".fromJSON"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{Object}</span>
					<span class="light">CVC.</span><b>fromJSON</b>(obj)
					
					</div>
					<div class="description">
						Recreate object from JSON encoding
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>obj</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the CVC object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getASN1"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getASN1</b>()
					
					</div>
					<div class="description">
						Returns the certificate as ASN1 structure
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate as ASN1 structure</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getBytes"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getBytes</b>()
					
					</div>
					<div class="description">
						Returns the encoded certificate
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the DER encoded certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCAR"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span>
					<b>getCAR</b>()
					
					</div>
					<div class="description">
						Returns the certification authority reference (CAR).
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the CAR or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCED"> </a>
					<div class="fixedFont">
					
					<span class="light">{Date}</span>
					<b>getCED</b>()
					
					</div>
					<div class="description">
						Returns the certificate effective date (CED).
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the CED or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCHAT"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getCHAT</b>()
					
					</div>
					<div class="description">
						Returns the Certificate Holder Authorization Template.
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the chat or null if not defined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCHR"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span>
					<b>getCHR</b>()
					
					</div>
					<div class="description">
						Returns the certificate holder reference (CHR).
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the CHR</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCPI"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getCPI</b>()
					
					</div>
					<div class="description">
						Returns the certificate profile indicator (CPI)
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the CPI or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCXD"> </a>
					<div class="fixedFont">
					
					<span class="light">{Date}</span>
					<b>getCXD</b>()
					
					</div>
					<div class="description">
						Returns the certificate expiration date (CXD).
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the CXD or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getECPublicKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getECPublicKey</b>(domParam)
					
					</div>
					<div class="description">
						Returns the EC public key contained in the certificate.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>domParam</b>
									
								</dt>
								<dd>optional domain parameter if they are not contained in certificate</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the public key object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getECPublicKeyIdentifier"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getECPublicKeyIdentifier</b>()
					
					</div>
					<div class="description">
						Return the x-coordinate of the EC Public Key.
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getExtension"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getExtension</b>(extoid)
					
					</div>
					<div class="description">
						Returns the extension identified by the object identifier.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>extoid</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the extension including the OID or null if not defined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".getHashMech"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{Number}</span>
					<span class="light">CVC.</span><b>getHashMech</b>(oid)
					
					</div>
					<div class="description">
						Return hash mechanism for object identifier
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>oid</b>
									
								</dt>
								<dd>the object identifer from the public key object</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the hash mechanism as Crypto. constant or -1 if not defined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getLevel"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getLevel</b>()
					
					</div>
					<div class="description">
						Return position of certificate in PKI hierachie
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>Position in PKI hierachie: 0 unknown, 1-CVCA, 2-DVCA, 3-Terminal</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getOuterCAR"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span>
					<b>getOuterCAR</b>()
					
					</div>
					<div class="description">
						Returns the outer certification authority reference (CAR).
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the outer CAR or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPublicKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getPublicKey</b>(domParam)
					
					</div>
					<div class="description">
						Returns the public key contained in the certificate.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>domParam</b>
									
								</dt>
								<dd>optional domain parameter if they are not contained in certificate</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the public key object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPublicKeyOID"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getPublicKeyOID</b>()
					
					</div>
					<div class="description">
						Returns the public key object identifier
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the object identifier assigned to the public key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRightsAsList"> </a>
					<div class="fixedFont">
					
					<span class="light">{String[]}</span>
					<b>getRightsAsList</b>()
					
					</div>
					<div class="description">
						Return list of rights granted by the certificate
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of rights</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRSAPublicKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getRSAPublicKey</b>()
					
					</div>
					<div class="description">
						Returns the RSA public key contained in the certificate.
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the public key object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".getSignatureMech"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{Number}</span>
					<span class="light">CVC.</span><b>getSignatureMech</b>(oid, keysize)
					
					</div>
					<div class="description">
						Return signature mechanism for object identifier
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>oid</b>
									
								</dt>
								<dd>the object identifer from the public key object</dd>
							
								<dt>
									<b>keysize</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the signature mechanism as Crypto. constant or -1 if not defined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getType"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getType</b>()
					
					</div>
					<div class="description">
						Return a string describing the certificate type
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a describing string</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".I2O"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>I2O</b>(value, length)
					
					</div>
					<div class="description">
						Integer to octet string conversion
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>value</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>length</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="isAuthenticatedRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>isAuthenticatedRequest</b>()
					
					</div>
					<div class="description">
						Determine if this is an authenticated request
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if authenticated request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isCertificateRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>isCertificateRequest</b>()
					
					</div>
					<div class="description">
						Determine if this is a certificate request
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if certificate request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isCountersignedRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>isCountersignedRequest</b>()
					
					</div>
					<div class="description">
						Determine if this is a countersigned authenticated request
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if countersigned authenticated request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".isCurveOID"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{boolean}</span>
					<span class="light">CVC.</span><b>isCurveOID</b>(oid)
					
					</div>
					<div class="description">
						Return true of the object identifier denotes a curve
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>oid</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if ECDSA based OID</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".isECDSA"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{boolean}</span>
					<span class="light">CVC.</span><b>isECDSA</b>(oid)
					
					</div>
					<div class="description">
						Return true of the object identifier starts with id-TA-ECDSA
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>oid</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if ECDSA based OID</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isExpired"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>isExpired</b>()
					
					</div>
					<div class="description">
						Determine if this certificate is expired
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if certificate is expired</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".rewrapSignature"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">CVC.</span><b>rewrapSignature</b>(signature, the)
					
					</div>
					<div class="description">
						Rewrap an ECDSA signature that contains redundant leading zeros in integer.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>signature</b>
									
								</dt>
								<dd>the signature</dd>
							
								<dt>
									<b>the</b>
									
								</dt>
								<dd>fixed signature</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="toJSON"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>toJSON</b>()
					
					</div>
					<div class="description">
						Return object suitable for JSON encoding
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a JSON encodable object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>toString</b>()
					
					</div>
					<div class="description">
						Return a textual description of the certificate
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a string containing information about the certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".unwrapSignature"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>unwrapSignature</b>(signature, keylen)
					
					</div>
					<div class="description">
						Unwrap a ECDSA signature from the TLV encoding according to RFC3279 into the concatenation
of the unsigned integer r and s
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>signature</b>
									
								</dt>
								<dd>TLV encoded signature</dd>
							
								<dt>
									<b>keylen</b>
									
								</dt>
								<dd>optional parameter to specify the key lengths in bytes.</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>concatenation of r and s</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="validate"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>validate</b>()
					
					</div>
					<div class="description">
						Validate ASN1 semantic for card verifiable certificate or certificate request
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>null if no error, or error message</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="verifyATWith"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>verifyATWith</b>(puk, oid, oid)
					
					</div>
					<div class="description">
						Verify outer signature of an authenticated request with public key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>puk</b>
									
								</dt>
								<dd>the public key</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>oid</b>
									
								</dt>
								<dd>the signature algorithm</dd>
							
								<dt>
									<b>oid</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the signature is valid</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="verifyATWithCVC"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>verifyATWithCVC</b>(cvc, cvc)
					
					</div>
					<div class="description">
						Verify outer signature of an authenticated request with public key from card verifiable certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>cvc</b>
									
								</dt>
								<dd>the card verifiable certificate used to obtain the public key</dd>
							
								<dt>
									<b>cvc</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the signature is valid</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="verifyWith"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>verifyWith</b>(crypto, puk, oid)
					
					</div>
					<div class="description">
						Verify certificate signature with public key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>the crypto instance to use for verification</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>puk</b>
									
								</dt>
								<dd>the public key</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>oid</b>
									
								</dt>
								<dd>the signature algorithm</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the signature is valid</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="verifyWithCVC"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>verifyWithCVC</b>(cvc, cvc)
					
					</div>
					<div class="description">
						Verify certificate signature with public key from card verifiable certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>cvc</b>
									
								</dt>
								<dd>the card verifiable certificate used to obtain the public key</dd>
							
								<dt>
									<b>cvc</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the signature is valid</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".wrapSignature"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVC.</span><b>wrapSignature</b>(signature)
					
					</div>
					<div class="description">
						Wrap an ECDSA signature in the format r || s into a TLV encoding as defined by RFC 3279
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>signature</b>
									
								</dt>
								<dd>ByteString containing the concatenation of r and s as unsigned integer values</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>ASN.1 SEQUENCE objects containing two signed integer r and s</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - CVCCA</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class CVCCA
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class supporting a certification authority that can issue CVC certificates
for the EAC protocol.
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_CVCCA.js.html">CVCCA.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class CVCCA.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/CVCCA.html#constructor">CVCCA</a></b>(crypto, certstore, path, parentId, path)
							</div>
							<div class="description">Creates a new CVC-CA instance</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class CVCCA.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#counterSignRequest">counterSignRequest</a></b>(req)
								</div>
								<div class="description">Counter-sign a request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#generateCertificate">generateCertificate</a></b>(req, policy)
								</div>
								<div class="description">Generate certificate for certificate request

<p>Certificate contents is defined through the policy object:</p>
<pre>
 	var policy = { certificateValidityDays: 2,
				   chatRoleOID: new ByteString("id-IS", OID),
				   chatRights: new ByteString("E3", HEX),
				   includeDomainParameter: true,
				   extensions: []
				 };
</pre></div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#generateInitialRequest">generateInitialRequest</a></b>(car)
								</div>
								<div class="description">Generate an initial certificate request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#generateRequest">generateRequest</a></b>(car, forceInitial, signinitial)
								</div>
								<div class="description">Generate a certificate request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#generateRequestHSM">generateRequestHSM</a></b>(car, forceInitial, signinitial)
								</div>
								<div class="description">Generate a certificate request using a SmartCard-HSM based private key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#generateRequestHSMCP">generateRequestHSMCP</a></b>(prov, car, forceInitial, signinitial)
								</div>
								<div class="description">Generate a certificate request using a SmartCard-HSM based private key via EACCryptoProvider</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#generateSignedInitialRequest">generateSignedInitialRequest</a></b>(car)
								</div>
								<div class="description">Generate a signed initial certificate request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#getAuthenticPublicKey">getAuthenticPublicKey</a></b>(chr)
								</div>
								<div class="description">Return authentic public key with domain parameter for a given CHR subordinate to the CA</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#getCertificateList">getCertificateList</a></b>(fromCAR)
								</div>
								<div class="description">Returns a list of relevant certificates.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#getCrypto">getCrypto</a></b>()
								</div>
								<div class="description">Return a suitable crypto instance</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#getIssuedCertificate">getIssuedCertificate</a></b>(chr)
								</div>
								<div class="description">Return certificate issued by this CA</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#getPrivateKey">getPrivateKey</a></b>(path, chr)
								</div>
								<div class="description">Return private key handle, either from EACCryptoProvider or Certificate Store</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#hasCertificate">hasCertificate</a></b>()
								</div>
								<div class="description">Returns true if this CA has a certificate.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#importCertificate">importCertificate</a></b>(cert)
								</div>
								<div class="description">Import a certificate into the certificate store and make it the current certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#importCertificates">importCertificates</a></b>(certs)
								</div>
								<div class="description">Import a list of certificates into the certificate store</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#isOperational">isOperational</a></b>()
								</div>
								<div class="description">Returns true if this CA is operational.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#isRootCA">isRootCA</a></b>()
								</div>
								<div class="description">Returns true if this is a root CA</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#removePreviouslyUsedKey">removePreviouslyUsedKey</a></b>(previous)
								</div>
								<div class="description">Remove previous key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#setCountryCodeForSequence">setCountryCodeForSequence</a></b>(countryseq)
								</div>
								<div class="description">Set country code to be included in sequence number of public key reference</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#setEACCryptoProviderFactory">setEACCryptoProviderFactory</a></b>(eaccp, eaccpid)
								</div>
								<div class="description">Set factory generating EACCryptoProvider for private key operations (create, use, delete)</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#setKeySpec">setKeySpec</a></b>(keyparam, algorithm)
								</div>
								<div class="description">Sets the key specification for generating requests</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#setRemovePreviousKey">setRemovePreviousKey</a></b>(removePreviousKey)
								</div>
								<div class="description">Set flags that controls the removal of the previous key if the certificate for the new key is imported</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCCA.html#storeCertificate">storeCertificate</a></b>(cert)
								</div>
								<div class="description">Store issued certificate</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>CVCCA</b>(crypto, certstore, path, parentId, path)
				</div>
				
				<div class="description">
					Creates a new CVC-CA instance
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider to use</dd>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/CVCertificateStore.html">CVCertificateStore</a>}</span>  <b>certstore</b>
								
							</dt>
								<dd>the certificate store to use</dd>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>path</b>
								
							</dt>
								<dd>the path of holderIDs (eg. "/UTCVCA/UTDVCA/UTTERM")</dd>
						
							<dt>
								 <b>parentId</b>
								
							</dt>
								<dd></dd>
						
							<dt>
								 <b>path</b>
								
							</dt>
								<dd></dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="counterSignRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>counterSignRequest</b>(req)
					
					</div>
					<div class="description">
						Counter-sign a request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>req</b>
									
								</dt>
								<dd>the initial request</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>generateCertificate</b>(req, policy)
					
					</div>
					<div class="description">
						Generate certificate for certificate request

<p>Certificate contents is defined through the policy object:</p>
<pre>
 	var policy = { certificateValidityDays: 2,
				   chatRoleOID: new ByteString("id-IS", OID),
				   chatRights: new ByteString("E3", HEX),
				   includeDomainParameter: true,
				   extensions: []
				 };
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>req</b>
									
								</dt>
								<dd>the certificate request</dd>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>policy</b>
									
								</dt>
								<dd>the object with policy settings</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateInitialRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>generateInitialRequest</b>(car)
					
					</div>
					<div class="description">
						Generate an initial certificate request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>car</b>
									
								</dt>
								<dd>the CA at which this request is addressed</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>generateRequest</b>(car, forceInitial, signinitial)
					
					</div>
					<div class="description">
						Generate a certificate request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>car</b>
									
								</dt>
								<dd>the CA at which this request is addressed</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>forceInitial</b>
									
								</dt>
								<dd>force an initial request, even if a current certificate is available</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>signinitial</b>
									
								</dt>
								<dd>sign with initial key (sequence = 00000)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateRequestHSM"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>generateRequestHSM</b>(car, forceInitial, signinitial)
					
					</div>
					<div class="description">
						Generate a certificate request using a SmartCard-HSM based private key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>car</b>
									
								</dt>
								<dd>the CA at which this request is addressed</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>forceInitial</b>
									
								</dt>
								<dd>force an initial request, even if a current certificate is available</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>signinitial</b>
									
								</dt>
								<dd>sign with initial key (sequence = 00000)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateRequestHSMCP"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>generateRequestHSMCP</b>(prov, car, forceInitial, signinitial)
					
					</div>
					<div class="description">
						Generate a certificate request using a SmartCard-HSM based private key via EACCryptoProvider
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/_global_.html#EACCryptoProvider">EACCryptoProvider</a>}</span> <b>prov</b>
									
								</dt>
								<dd>the EACCryptoProvider</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>car</b>
									
								</dt>
								<dd>the CA at which this request is addressed</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>forceInitial</b>
									
								</dt>
								<dd>force an initial request, even if a current certificate is available</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>signinitial</b>
									
								</dt>
								<dd>sign with initial key (sequence = 00000)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateSignedInitialRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>generateSignedInitialRequest</b>(car)
					
					</div>
					<div class="description">
						Generate a signed initial certificate request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>car</b>
									
								</dt>
								<dd>the CA at which this request is addressed</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getAuthenticPublicKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getAuthenticPublicKey</b>(chr)
					
					</div>
					<div class="description">
						Return authentic public key with domain parameter for a given CHR subordinate to the CA
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the certificate holder reference</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the public key or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCertificateList"> </a>
					<div class="fixedFont">
					
					
					<b>getCertificateList</b>(fromCAR)
					
					</div>
					<div class="description">
						Returns a list of relevant certificates.

<p>If the CA is the root CA, then all self-signed and link certificates are returned.</p>
<p>If the CA is a DVCA, then all certificates of the associated root and the current
   DVCA certificate is returned.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>fromCAR</b>
									
								</dt>
								<dd>the optional starting point for the list if not a root CA</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="getCrypto"> </a>
					<div class="fixedFont">
					
					
					<b>getCrypto</b>()
					
					</div>
					<div class="description">
						Return a suitable crypto instance
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="getIssuedCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>getIssuedCertificate</b>(chr)
					
					</div>
					<div class="description">
						Return certificate issued by this CA
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the certificate holder reference</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPrivateKey"> </a>
					<div class="fixedFont">
					
					
					<b>getPrivateKey</b>(path, chr)
					
					</div>
					<div class="description">
						Return private key handle, either from EACCryptoProvider or Certificate Store
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>path</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>chr</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="hasCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>hasCertificate</b>()
					
					</div>
					<div class="description">
						Returns true if this CA has a certificate.
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if this CA is operational</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="importCertificate"> </a>
					<div class="fixedFont">
					
					
					<b>importCertificate</b>(cert)
					
					</div>
					<div class="description">
						Import a certificate into the certificate store and make it the current certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>cert</b>
									
								</dt>
								<dd>the certificate</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="importCertificates"> </a>
					<div class="fixedFont">
					
					
					<b>importCertificates</b>(certs)
					
					</div>
					<div class="description">
						Import a list of certificates into the certificate store
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>[]}</span> <b>certs</b>
									
								</dt>
								<dd>the list of certificates</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="isOperational"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isOperational</b>()
					
					</div>
					<div class="description">
						Returns true if this CA is operational.
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if this CA is operational</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isRootCA"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isRootCA</b>()
					
					</div>
					<div class="description">
						Returns true if this is a root CA
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if this is a root CA</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="removePreviouslyUsedKey"> </a>
					<div class="fixedFont">
					
					
					<b>removePreviouslyUsedKey</b>(previous)
					
					</div>
					<div class="description">
						Remove previous key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>previous</b>
									
								</dt>
								<dd>the previously used CHR</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setCountryCodeForSequence"> </a>
					<div class="fixedFont">
					
					
					<b>setCountryCodeForSequence</b>(countryseq)
					
					</div>
					<div class="description">
						Set country code to be included in sequence number of public key reference
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>countryseq</b>
									
								</dt>
								<dd>the two character country code</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setEACCryptoProviderFactory"> </a>
					<div class="fixedFont">
					
					
					<b>setEACCryptoProviderFactory</b>(eaccp, eaccpid)
					
					</div>
					<div class="description">
						Set factory generating EACCryptoProvider for private key operations (create, use, delete)
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/_global_.html#EACCryptoProvider">EACCryptoProvider</a>}</span> <b>eaccp</b>
									
								</dt>
								<dd>the EAC Crypto Provider for this instance</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>eaccpid</b>
									
								</dt>
								<dd>the instance id</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setKeySpec"> </a>
					<div class="fixedFont">
					
					
					<b>setKeySpec</b>(keyparam, algorithm)
					
					</div>
					<div class="description">
						Sets the key specification for generating requests
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>keyparam</b>
									
								</dt>
								<dd>a key object containing key parameters (e.g. EC Curve)</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>algorithm</b>
									
								</dt>
								<dd>the terminal authentication algorithm object identifier</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setRemovePreviousKey"> </a>
					<div class="fixedFont">
					
					
					<b>setRemovePreviousKey</b>(removePreviousKey)
					
					</div>
					<div class="description">
						Set flags that controls the removal of the previous key if the certificate for the new key is imported
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>removePreviousKey</b>
									
								</dt>
								<dd>true to remove, false to keep</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="storeCertificate"> </a>
					<div class="fixedFont">
					
					
					<b>storeCertificate</b>(cert)
					
					</div>
					<div class="description">
						Store issued certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>cert</b>
									
								</dt>
								<dd>a newly issued certificate</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - CVCertificateStore</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class CVCertificateStore
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class that abstracts a certificate and key store for a EAC PKI.
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_CVCertificateStore.js.html">CVCertificateStore.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class CVCertificateStore.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/CVCertificateStore.html#constructor">CVCertificateStore</a></b>(DAOFactory)
							</div>
							<div class="description">Create an object to access a certificate store.</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class CVCertificateStore.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVCertificateStore.<b><a href="../symbols/CVCertificateStore.html#.checkPath">checkPath</a></b>(path)
								</div>
								<div class="description">Check path

This method validates the path for semantic errors and should be called for input
validation before using the path in the certificate store API.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#deleteCertificate">deleteCertificate</a></b>(path, chr, selfsigned)
								</div>
								<div class="description">Remove certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#deletePrivateKey">deletePrivateKey</a></b>(path, chr)
								</div>
								<div class="description">Remove private key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#deleteRequest">deleteRequest</a></b>(path, chr)
								</div>
								<div class="description">Remove request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#deleteSigner">deleteSigner</a></b>(path, chr)
								</div>
								<div class="description">Remove Signer</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#generateKeyPair">generateKeyPair</a></b>(path, chr, algo, prk, puk)
								</div>
								<div class="description">Generate key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getCertificate">getCertificate</a></b>(path, chr, selfsigned)
								</div>
								<div class="description">Return certificate for a given CHR

<p>This method returns a self-signed root certificate if the selfsigned
   parameter is set.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getCertificateBinary">getCertificateBinary</a></b>(path, chr, selfsigned)
								</div>
								<div class="description">Return certificate for a given CHR in binary format

<p>This method returns a self-signed root certificate if the selfsigned
   parameter is set.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getCertificateChain">getCertificateChain</a></b>(path, tochr, fromcar)
								</div>
								<div class="description">Return a chain of certificates resembling a path from root to end entity.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getCrypto">getCrypto</a></b>()
								</div>
								<div class="description">Return a suitable crypto object.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getCurrentCHR">getCurrentCHR</a></b>(path)
								</div>
								<div class="description">Return the current CHR for which a valid certificate exists</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getDefaultDomainParameter">getDefaultDomainParameter</a></b>(path)
								</div>
								<div class="description">Returns the default domain parameter for a given PKI</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getDefaultPublicKeyOID">getDefaultPublicKeyOID</a></b>(path)
								</div>
								<div class="description">Returns the default algorithm identifier OID from the most recent link certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getDomainParameter">getDomainParameter</a></b>(path, chr)
								</div>
								<div class="description">Returns the domain parameter for a certificate identified by its CHR

<p>This method traverses the certificate hierachie upwards and follows link certificates
   until domain parameter are found.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getIssuerPathFor">getIssuerPathFor</a></b>(cvc, cvcahint)
								</div>
								<div class="description">Determine path for certificate issuer

For CVCA and DVCA certificates we can determined the path from the CAR.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getNextCHR">getNextCHR</a></b>(path, countryseq)
								</div>
								<div class="description">Return the next CHR</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getPrivateKey">getPrivateKey</a></b>(path, chr)
								</div>
								<div class="description">Get a private key in the certificate store</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getRequest">getRequest</a></b>(path, chr)
								</div>
								<div class="description">Return request for given CHR</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#getSigner">getSigner</a></b>(path, chr)
								</div>
								<div class="description">Get Signer</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#insertCertificate">insertCertificate</a></b>(crypto, cvc, cvcahint, forceUpdate)
								</div>
								<div class="description">Insert a single certificates into the certificate store

<p>Before a certificate is imported, the signature is verified.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#insertCertificates">insertCertificates</a></b>(crypto, certlist, insertSelfSigned, cvcahint, forceUpdate)
								</div>
								<div class="description">Insert certificates into certificate store

<p>The import into the internal data structure is done in three steps:</p>
<ol>
 <li>If allowed, all self-signed certificates are imported</li>
 <li>All possible certificate chains are build</li>
 <li>Certificate chains are processed starting with the topmost certificate in the hierachie</li>
</ol>
<p>Certificates at the terminal level can only be imported, if the issuing
   DVCA certificate is contained in the list or a hint for the relevant CVCA is
   given in the first element of the path contained in parameter cvcahint.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#listCertificates">listCertificates</a></b>(path)
								</div>
								<div class="description">List certificates stored for given PKI element sorted by CHR</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#listHolders">listHolders</a></b>(path)
								</div>
								<div class="description">List certificate holders for a given PKI element</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#locateCertificate">locateCertificate</a></b>(chr)
								</div>
								<div class="description">Try locating a certificate with the given CHR

This method tries to find a specific certificate in the store, irrespectively of the holder.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#newSigner">newSigner</a></b>(path, chr, algo, prk, puk)
								</div>
								<div class="description">Create Signer</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVCertificateStore.<b><a href="../symbols/CVCertificateStore.html#.nthElementOf">nthElementOf</a></b>(path, n)
								</div>
								<div class="description">Return the n-element of the path</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">CVCertificateStore.<b><a href="../symbols/CVCertificateStore.html#.parentPathOf">parentPathOf</a></b>(path)
								</div>
								<div class="description">Strip the last element of the path, effectively defining the parent within the path</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#setContextMarker">setContextMarker</a></b>(contextMarker)
								</div>
								<div class="description">Set a context marker that goes into the certificate type

The context marker allows to have different certificate stores with different
namespaces in the same database.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#setSignerNo">setSignerNo</a></b>(path, signerNo)
								</div>
								<div class="description">Set the new signer number, if it is larger than the current</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#storeCertificate">storeCertificate</a></b>(path, cert, makeCurrent, forceUpdate)
								</div>
								<div class="description">Store a certificate in the certificate store</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#storeRequest">storeRequest</a></b>(path, req)
								</div>
								<div class="description">Store a certificate request in the certificate store</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CVCertificateStore.html#validateCertificate">validateCertificate</a></b>(crypto, cvc, cvcahint)
								</div>
								<div class="description">Validate a certificate against a certificate already stored in the certificate store

<p>If the certificate is a terminal certificate, then the first element of the path given
   in cvcahint is used to determine the correct CVCA.</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>CVCertificateStore</b>(DAOFactory)
				</div>
				
				<div class="description">
					Create an object to access a certificate store.
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{DAOFactory}</span>  <b>DAOFactory</b>
								
							</dt>
								<dd>the factory that can create data access objects for persistent information</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name=".checkPath"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">CVCertificateStore.</span><b>checkPath</b>(path)
					
					</div>
					<div class="description">
						Check path

This method validates the path for semantic errors and should be called for input
validation before using the path in the certificate store API.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the path to validate</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="deleteCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>deleteCertificate</b>(path, chr, selfsigned)
					
					</div>
					<div class="description">
						Remove certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this certificate</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>selfsigned</b>
									
								</dt>
								<dd>delete the self-signed root certificate rather than a link certificate</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true is deleted</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="deletePrivateKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>deletePrivateKey</b>(path, chr)
					
					</div>
					<div class="description">
						Remove private key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true is deleted</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="deleteRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>deleteRequest</b>(path, chr)
					
					</div>
					<div class="description">
						Remove request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this request</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true is deleted</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="deleteSigner"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>deleteSigner</b>(path, chr)
					
					</div>
					<div class="description">
						Remove Signer
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true is deleted</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateKeyPair"> </a>
					<div class="fixedFont">
					
					
					<b>generateKeyPair</b>(path, chr, algo, prk, puk)
					
					</div>
					<div class="description">
						Generate key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this key pair</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>algo</b>
									
								</dt>
								<dd>the key generation algorithm (Crypto.EC or Crypto.RSA)</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>prk</b>
									
								</dt>
								<dd>the private key template</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>puk</b>
									
								</dt>
								<dd>the public key template</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="getCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>getCertificate</b>(path, chr, selfsigned)
					
					</div>
					<div class="description">
						Return certificate for a given CHR

<p>This method returns a self-signed root certificate if the selfsigned
   parameter is set. If not set or set to false, then matching link certificate,
   if any, is returned rather than the self-signed certificate.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for the certificate</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>selfsigned</b>
									
								</dt>
								<dd>return the self-signed root certificate rather than a link certificate</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCertificateBinary"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getCertificateBinary</b>(path, chr, selfsigned)
					
					</div>
					<div class="description">
						Return certificate for a given CHR in binary format

<p>This method returns a self-signed root certificate if the selfsigned
   parameter is set. If not set or set to false, then matching link certificate,
   if any, is returned rather than the self-signed certificate.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for the certificate</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>selfsigned</b>
									
								</dt>
								<dd>return the self-signed root certificate rather than a link certificate</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCertificateChain"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>[]}</span>
					<b>getCertificateChain</b>(path, tochr, fromcar)
					
					</div>
					<div class="description">
						Return a chain of certificates resembling a path from root to end entity.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>tochr</b>
									
								</dt>
								<dd>the public key reference for the certificate at the end of the chain</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>fromcar</b>
									
								</dt>
								<dd>the public key reference for the certificate to start with or root if undefined</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of certificates starting with a self signed root certificate (fromcar undefined) a certificate
         issued by fromcar up to an including the certificate referenced by tochr. Return null if fromcar is not found.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCrypto"> </a>
					<div class="fixedFont">
					
					<span class="light">{Crypto}</span>
					<b>getCrypto</b>()
					
					</div>
					<div class="description">
						Return a suitable crypto object. This may be overwritten by derived classes
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the Crypto object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCurrentCHR"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span>
					<b>getCurrentCHR</b>(path)
					
					</div>
					<div class="description">
						Return the current CHR for which a valid certificate exists
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the current CHR for which a certificate exists or null if none exists</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getDefaultDomainParameter"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getDefaultDomainParameter</b>(path)
					
					</div>
					<div class="description">
						Returns the default domain parameter for a given PKI
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the domain parameter</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getDefaultPublicKeyOID"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getDefaultPublicKeyOID</b>(path)
					
					</div>
					<div class="description">
						Returns the default algorithm identifier OID from the most recent link certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the algorithm identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getDomainParameter"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getDomainParameter</b>(path, chr)
					
					</div>
					<div class="description">
						Returns the domain parameter for a certificate identified by its CHR

<p>This method traverses the certificate hierachie upwards and follows link certificates
   until domain parameter are found.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the CHR of the certificate to start the search with</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the domain parameter</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getIssuerPathFor"> </a>
					<div class="fixedFont">
					
					
					<b>getIssuerPathFor</b>(cvc, cvcahint)
					
					</div>
					<div class="description">
						Determine path for certificate issuer

For CVCA and DVCA certificates we can determined the path from the CAR. For Terminal
certificates we dont know the full path, as we don't know under which CVCA the DVCA operates
that issued the Terminal certificate. So we use a two-step heuristic which first tries to locate
the DVCA certificate based on the CAR and if that is not unique uses the cvcahint to determine the path
of the issuer
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>cvc</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>cvcahint</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="getNextCHR"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span>
					<b>getNextCHR</b>(path, countryseq)
					
					</div>
					<div class="description">
						Return the next CHR
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>countryseq</b>
									
								</dt>
								<dd>the 2 digit country code to include in the sequence number (optional)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the next CHR based on the sequence counter maintained in the configuration file</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPrivateKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getPrivateKey</b>(path, chr)
					
					</div>
					<div class="description">
						Get a private key in the certificate store
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the private key or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>getRequest</b>(path, chr)
					
					</div>
					<div class="description">
						Return request for given CHR
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for the certificate</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the request or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSigner"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getSigner</b>(path, chr)
					
					</div>
					<div class="description">
						Get Signer
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the private key blob</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="insertCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>insertCertificate</b>(crypto, cvc, cvcahint, forceUpdate)
					
					</div>
					<div class="description">
						Insert a single certificates into the certificate store

<p>Before a certificate is imported, the signature is verified.</p>
<p>If the certificate is a terminal certificate, then the first element of the path given
   in cvcahint is used to determine the correct CVCA.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>the crypto provider to be used for certificate verification</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>cvc</b>
									
								</dt>
								<dd>the certificate</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>cvcahint</b>
									
								</dt>
								<dd>the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>forceUpdate</b>
									
								</dt>
								<dd>true if certificate should be updated even if one already exists</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if the certificate was inserted</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="insertCertificates"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>[]}</span>
					<b>insertCertificates</b>(crypto, certlist, insertSelfSigned, cvcahint, forceUpdate)
					
					</div>
					<div class="description">
						Insert certificates into certificate store

<p>The import into the internal data structure is done in three steps:</p>
<ol>
 <li>If allowed, all self-signed certificates are imported</li>
 <li>All possible certificate chains are build</li>
 <li>Certificate chains are processed starting with the topmost certificate in the hierachie</li>
</ol>
<p>Certificates at the terminal level can only be imported, if the issuing
   DVCA certificate is contained in the list or a hint for the relevant CVCA is
   given in the first element of the path contained in parameter cvcahint.</p>
<p>Before a certificate is imported, the signature is verified.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>the crypto provider to be used for certificate verification</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>[]}</span> <b>certlist</b>
									
								</dt>
								<dd>the unordered list of certificates</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>insertSelfSigned</b>
									
								</dt>
								<dd>true, if the import of root certificates is allowed</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>cvcahint</b>
									
								</dt>
								<dd>the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>forceUpdate</b>
									
								</dt>
								<dd>true if certificate should be updated even if one already exists</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the (ideally empty) list of unprocessed certificates. This does not contains certificates
         that fail signature verification.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="listCertificates"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>[]}</span>
					<b>listCertificates</b>(path)
					
					</div>
					<div class="description">
						List certificates stored for given PKI element sorted by CHR
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a list of certificates, possibly empty</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="listHolders"> </a>
					<div class="fixedFont">
					
					<span class="light">{String[]}</span>
					<b>listHolders</b>(path)
					
					</div>
					<div class="description">
						List certificate holders for a given PKI element
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a list of holder ids, possibly empty</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="locateCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>locateCertificate</b>(chr)
					
					</div>
					<div class="description">
						Try locating a certificate with the given CHR

This method tries to find a specific certificate in the store, irrespectively of the holder.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for the certificate</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate or null if none found or more than one found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="newSigner"> </a>
					<div class="fixedFont">
					
					
					<b>newSigner</b>(path, chr, algo, prk, puk)
					
					</div>
					<div class="description">
						Create Signer
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this key pair</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>algo</b>
									
								</dt>
								<dd>the key generation algorithm (Crypto.EC or Crypto.RSA)</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>prk</b>
									
								</dt>
								<dd>the private key template</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>puk</b>
									
								</dt>
								<dd>the public key template</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name=".nthElementOf"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">CVCertificateStore.</span><b>nthElementOf</b>(path, n)
					
					</div>
					<div class="description">
						Return the n-element of the path
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the path to return the last element from</dd>
							
								<dt>
									<b>n</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the last path element or null for the root</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".parentPathOf"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">CVCertificateStore.</span><b>parentPathOf</b>(path)
					
					</div>
					<div class="description">
						Strip the last element of the path, effectively defining the parent within the path
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the path to strip the last element from</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the parent path or null for the root</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setContextMarker"> </a>
					<div class="fixedFont">
					
					
					<b>setContextMarker</b>(contextMarker)
					
					</div>
					<div class="description">
						Set a context marker that goes into the certificate type

The context marker allows to have different certificate stores with different
namespaces in the same database. The default context marker is 0.

The context marker is stored with the Holder table.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>contextMarker</b>
									
								</dt>
								<dd>the marker</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSignerNo"> </a>
					<div class="fixedFont">
					
					
					<b>setSignerNo</b>(path, signerNo)
					
					</div>
					<div class="description">
						Set the new signer number, if it is larger than the current
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>signerNo</b>
									
								</dt>
								<dd>the new signer number</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="storeCertificate"> </a>
					<div class="fixedFont">
					
					
					<b>storeCertificate</b>(path, cert, makeCurrent, forceUpdate)
					
					</div>
					<div class="description">
						Store a certificate in the certificate store
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>cert</b>
									
								</dt>
								<dd>the certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>makeCurrent</b>
									
								</dt>
								<dd>true if this certificate becomes the current certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>forceUpdate</b>
									
								</dt>
								<dd>true if certificate should be updated even if one already exists</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="storeRequest"> </a>
					<div class="fixedFont">
					
					
					<b>storeRequest</b>(path, req)
					
					</div>
					<div class="description">
						Store a certificate request in the certificate store
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>req</b>
									
								</dt>
								<dd>the request</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="validateCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>validateCertificate</b>(crypto, cvc, cvcahint)
					
					</div>
					<div class="description">
						Validate a certificate against a certificate already stored in the certificate store

<p>If the certificate is a terminal certificate, then the first element of the path given
   in cvcahint is used to determine the correct CVCA.</p>

Throws an exception if the certificate can not be validated
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>the crypto provider to be used for certificate verification</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>cvc</b>
									
								</dt>
								<dd>the certificate</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>cvcahint</b>
									
								</dt>
								<dd>the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>object containing the path and domain parameter used for validating the certificate. Returns null if no issuer could be found</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - ChipAuthentication</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class ChipAuthentication
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				This class implements the ChipAuthentication protocol
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_ChipAuthentication.js.html">ChipAuthentication.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class ChipAuthentication.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/ChipAuthentication.html#constructor">ChipAuthentication</a></b>(crypto, algo, domparam)
							</div>
							<div class="description">Create a ChipAuthentication protocol object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class ChipAuthentication.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthentication.html#calculateAuthenticationToken">calculateAuthenticationToken</a></b>(the)
								</div>
								<div class="description">Calculate the authentication token over the public key received from
the other side</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthentication.html#decodeEphemeralPublicKey">decodeEphemeralPublicKey</a></b>(encodedKey)
								</div>
								<div class="description">Decodes the ephemeral public key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthentication.html#deriveKey">deriveKey</a></b>(input, counter, the)
								</div>
								<div class="description">Derive key from input parameter, counter and optional nonce</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">ChipAuthentication.<b><a href="../symbols/ChipAuthentication.html#.encodePublicKey">encodePublicKey</a></b>(oid, key, withDP)
								</div>
								<div class="description">Encode an ECC public key in the format defined by the EAC 2.0 specification</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthentication.html#generateEphemeralCAKeyPair">generateEphemeralCAKeyPair</a></b>()
								</div>
								<div class="description">Generate ephemeral key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthentication.html#getCompressedPublicKey">getCompressedPublicKey</a></b>()
								</div>
								<div class="description">Returns the x coordinate of the public key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthentication.html#getEphemeralPublicKey">getEphemeralPublicKey</a></b>()
								</div>
								<div class="description">Returns the ephemeral public key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthentication.html#performKeyAgreement">performKeyAgreement</a></b>(publicKey, nonce)
								</div>
								<div class="description">Performs the mapping operation with mapping data from the other side</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthentication.html#setKeyPair">setKeyPair</a></b>(prk, puk)
								</div>
								<div class="description">Set chip authentication keys</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">ChipAuthentication.<b><a href="../symbols/ChipAuthentication.html#.stripLeadingZeros">stripLeadingZeros</a></b>(value)
								</div>
								<div class="description">Strips leading zeros of a ByteString</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthentication.html#verifyAuthenticationToken">verifyAuthenticationToken</a></b>(the)
								</div>
								<div class="description">Calculate and verify the authentication token over the public key received from
the other side</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>ChipAuthentication</b>(crypto, algo, domparam)
				</div>
				
				<div class="description">
					Create a ChipAuthentication protocol object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider</dd>
						
							<dt>
								<span class="light fixedFont">{ByteString}</span>  <b>algo</b>
								
							</dt>
								<dd>the algorithm OID</dd>
						
							<dt>
								<span class="light fixedFont">{Key}</span>  <b>domparam</b>
								
							</dt>
								<dd>the key object holding ECC domain parameter</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="calculateAuthenticationToken"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>calculateAuthenticationToken</b>(the)
					
					</div>
					<div class="description">
						Calculate the authentication token over the public key received from
the other side
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>MAC over the authentication data</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the MAC is valid</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="decodeEphemeralPublicKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>decodeEphemeralPublicKey</b>(encodedKey)
					
					</div>
					<div class="description">
						Decodes the ephemeral public key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>encodedKey</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the decoded public key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="deriveKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>deriveKey</b>(input, counter, the)
					
					</div>
					<div class="description">
						Derive key from input parameter, counter and optional nonce
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>input</b>
									
								</dt>
								<dd>the first part of the hash input</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>counter</b>
									
								</dt>
								<dd>the counter value</dd>
							
								<dt>
									<span class="light fixedFont">{nonce}</span> <b>the</b>
									
								</dt>
								<dd>optional nonce inserted between the input and the counter</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".encodePublicKey"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">ChipAuthentication.</span><b>encodePublicKey</b>(oid, key, withDP)
					
					</div>
					<div class="description">
						Encode an ECC public key in the format defined by the EAC 2.0 specification
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>oid</b>
									
								</dt>
								<dd>the object identifier to encode</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the EC public key</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>withDP</b>
									
								</dt>
								<dd>true to encode domain parameter as well</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="generateEphemeralCAKeyPair"> </a>
					<div class="fixedFont">
					
					
					<b>generateEphemeralCAKeyPair</b>()
					
					</div>
					<div class="description">
						Generate ephemeral key pair
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="getCompressedPublicKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getCompressedPublicKey</b>()
					
					</div>
					<div class="description">
						Returns the x coordinate of the public key
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded public key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getEphemeralPublicKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getEphemeralPublicKey</b>()
					
					</div>
					<div class="description">
						Returns the ephemeral public key
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded public key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="performKeyAgreement"> </a>
					<div class="fixedFont">
					
					
					<b>performKeyAgreement</b>(publicKey, nonce)
					
					</div>
					<div class="description">
						Performs the mapping operation with mapping data from the other side
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>publicKey</b>
									
								</dt>
								<dd>the public key in encoded format</dd>
							
								<dt>
									<b>nonce</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setKeyPair"> </a>
					<div class="fixedFont">
					
					
					<b>setKeyPair</b>(prk, puk)
					
					</div>
					<div class="description">
						Set chip authentication keys
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>prk</b>
									
								</dt>
								<dd>the private key</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>puk</b>
									
								</dt>
								<dd>the public key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name=".stripLeadingZeros"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">ChipAuthentication.</span><b>stripLeadingZeros</b>(value)
					
					</div>
					<div class="description">
						Strips leading zeros of a ByteString
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>value</b>
									
								</dt>
								<dd>the ByteString value</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the stripped ByteString object, may be an empty ByteString</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="verifyAuthenticationToken"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>verifyAuthenticationToken</b>(the)
					
					</div>
					<div class="description">
						Calculate and verify the authentication token over the public key received from
the other side
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>MAC over the authentication data</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the MAC is valid</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - ChipAuthenticationDomainParameterInfo</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class ChipAuthenticationDomainParameterInfo
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				<p>This class encodes and decodes ChipAuthenticationDomainParameterInfo objects.</p>
<p>The class implements the following ASN.1 syntax:</p>
<pre>
	ChipAuthenticationDomainParameterInfo ::= SEQUENCE {
		protocol OBJECT IDENTIFIER(id-CA-DH | id-CA-ECDH),
		domainParameter AlgorithmIdentifier,
		keyId INTEGER OPTIONAL
}
</pre>
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_ChipAuthentication.js.html">ChipAuthentication.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class ChipAuthenticationDomainParameterInfo.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/ChipAuthenticationDomainParameterInfo.html#constructor">ChipAuthenticationDomainParameterInfo</a></b>(the)
							</div>
							<div class="description">Create a ChipAuthenticationDomainParameterInfo object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class ChipAuthenticationDomainParameterInfo.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthenticationDomainParameterInfo.html#toTLV">toTLV</a></b>()
								</div>
								<div class="description">Convert object to TLV structure</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>ChipAuthenticationDomainParameterInfo</b>(the)
				</div>
				
				<div class="description">
					Create a ChipAuthenticationDomainParameterInfo object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{ASN1}</span>  <b>the</b>
								
							</dt>
								<dd>optional tlv structure to initialize the object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="toTLV"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>toTLV</b>()
					
					</div>
					<div class="description">
						Convert object to TLV structure
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TLV structure</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - ChipAuthenticationInfo</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class ChipAuthenticationInfo
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				<p>This class encodes and decodes ChipAuthenticationInfo objects.</p>
<p>The class implements the following ASN.1 syntax:</p>
<pre>
	ChipAuthenticationInfo ::= SEQUENCE {
		protocol OBJECT IDENTIFIER(
			id-CA-DH-3DES-CBC-CBC |
			id-CA-DH-AES-CBC-CMAC-128 |
			id-CA-DH-AES-CBC-CMAC-192 |
			id-CA-DH-AES-CBC-CMAC-256 |
			id-CA-ECDH-3DES-CBC-CBC |
			id-CA-ECDH-AES-CBC-CMAC-128 |
			id-CA-ECDH-AES-CBC-CMAC-192 |
			id-CA-ECDH-AES-CBC-CMAC-256),
		version INTEGER, -- MUST be 1 or 2
		keyId INTEGER OPTIONAL
}
</pre>
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_ChipAuthentication.js.html">ChipAuthentication.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class ChipAuthenticationInfo.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/ChipAuthenticationInfo.html#constructor">ChipAuthenticationInfo</a></b>(the)
							</div>
							<div class="description">Create a ChipAuthenticationInfo object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class ChipAuthenticationInfo.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthenticationInfo.html#toTLV">toTLV</a></b>()
								</div>
								<div class="description">Convert object to TLV structure</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>ChipAuthenticationInfo</b>(the)
				</div>
				
				<div class="description">
					Create a ChipAuthenticationInfo object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{ASN1}</span>  <b>the</b>
								
							</dt>
								<dd>optional tlv structure to initialize the object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="toTLV"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>toTLV</b>()
					
					</div>
					<div class="description">
						Convert object to TLV structure
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TLV structure</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - ChipAuthenticationPublicKeyInfo</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class ChipAuthenticationPublicKeyInfo
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				<p>This class encodes and decodes ChipAuthenticationPublicKeyInfo objects.</p>
<p>The class implements the following ASN.1 syntax:</p>
<pre>
	ChipAuthenticationPublicKeyInfo ::= SEQUENCE {
		protocol OBJECT IDENTIFIER(id-PK-DH | id-PK-ECDH),
		chipAuthenticationPublicKey SubjectPublicKeyInfo,
		keyId INTEGER OPTIONAL
	}

	SubjectPublicKeyInfo ::= SEQUENCE {
		algorithm  AlgorithmIdentifier,
		subjectPublicKey BIT STRING
	}

	AlgorithmIdentifier ::= SEQUENCE {
		algorithm  OBJECT IDENTIFIER,
		parameters ANY DEFINED BY algorithm OPTIONAL
	}
</pre>
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_ChipAuthentication.js.html">ChipAuthentication.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class ChipAuthenticationPublicKeyInfo.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/ChipAuthenticationPublicKeyInfo.html#constructor">ChipAuthenticationPublicKeyInfo</a></b>(the)
							</div>
							<div class="description">Create a ChipAuthenticationPublicKeyInfo object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class ChipAuthenticationPublicKeyInfo.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">ChipAuthenticationPublicKeyInfo.<b><a href="../symbols/ChipAuthenticationPublicKeyInfo.html#.convertUnsignedInteger">convertUnsignedInteger</a></b>(value)
								</div>
								<div class="description">Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">ChipAuthenticationPublicKeyInfo.<b><a href="../symbols/ChipAuthenticationPublicKeyInfo.html#.createECSubjectPublicKeyInfo">createECSubjectPublicKeyInfo</a></b>(publicKey, encodeECDomainParameter)
								</div>
								<div class="description">Creates the EC Public Key as subjectPublicKeyInfo TLV structure object.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ChipAuthenticationPublicKeyInfo.html#toTLV">toTLV</a></b>()
								</div>
								<div class="description">Convert object to TLV structure</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>ChipAuthenticationPublicKeyInfo</b>(the)
				</div>
				
				<div class="description">
					Create a ChipAuthenticationPublicKeyInfo object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{ASN1}</span>  <b>the</b>
								
							</dt>
								<dd>optional tlv structure to initialize the object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name=".convertUnsignedInteger"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">ChipAuthenticationPublicKeyInfo.</span><b>convertUnsignedInteger</b>(value)
					
					</div>
					<div class="description">
						Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.

This prevent interpretation of the integer representation if converted into
a signed ASN1 INTEGER.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>value</b>
									
								</dt>
								<dd>the value to convert</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the converted value</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".createECSubjectPublicKeyInfo"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ASN1}</span>
					<span class="light">ChipAuthenticationPublicKeyInfo.</span><b>createECSubjectPublicKeyInfo</b>(publicKey, encodeECDomainParameter)
					
					</div>
					<div class="description">
						Creates the EC Public Key as subjectPublicKeyInfo TLV structure object.

<p>The structure is defined as:</p>
<pre>
	SubjectPublicKeyInfo  ::=  SEQUENCE  {
		algorithm            AlgorithmIdentifier,
		subjectPublicKey     BIT STRING  }

	AlgorithmIdentifier  ::=  SEQUENCE  {
		algorithm               OBJECT IDENTIFIER,
		parameters              ANY DEFINED BY algorithm OPTIONAL  }

	id-ecPublicKey OBJECT IDENTIFIER ::= {
		iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 }

	ECParameters ::= CHOICE {
		namedCurve         OBJECT IDENTIFIER,
		implicitCurve      NULL,
		specifiedCurve     SpecifiedECDomain }
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>publicKey</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>encodeECDomainParameter</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the subjectPublicKey TLV structure</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="toTLV"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>toTLV</b>()
					
					</div>
					<div class="description">
						Convert object to TLV structure
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TLV structure</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - CommandInterpreter</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class CommandInterpreter
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a command interpreter that handles ISO 7816-4 command APDUs
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_CommandInterpreter.js.html">CommandInterpreter.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class CommandInterpreter.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/CommandInterpreter.html#constructor">CommandInterpreter</a></b>(fileSelector)
							</div>
							<div class="description">Create a command interpreter</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class CommandInterpreter.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#changeReferenceData">changeReferenceData</a></b>(the)
								</div>
								<div class="description">Performs a CHANGE REFERENCE DATA command</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#dispatch">dispatch</a></b>(apdu, ins)
								</div>
								<div class="description">Dispatch to command handler based on instruction code</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#handleSecMsgCommandAPDU">handleSecMsgCommandAPDU</a></b>(apdu)
								</div>
								<div class="description">Process a secure messaging command APDU, if secure messaging is active.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#handleSecMsgResponseAPDU">handleSecMsgResponseAPDU</a></b>(apdu)
								</div>
								<div class="description">Process a secure messaging response APDU, if secure messaging is active</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#hasSecureChannel">hasSecureChannel</a></b>()
								</div>
								<div class="description">Return status of secure channel</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#manageSecurityEnvironment">manageSecurityEnvironment</a></b>(apdu)
								</div>
								<div class="description">Process a MANAGE SECURITY ENVIRONMENT APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#processAPDU">processAPDU</a></b>(apdu)
								</div>
								<div class="description">Process a command APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#readBinary">readBinary</a></b>(apdu)
								</div>
								<div class="description">Process a READ BINARY APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#readRecord">readRecord</a></b>(apdu)
								</div>
								<div class="description">Process a READ RECORD APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#resetRetryCounter">resetRetryCounter</a></b>(the)
								</div>
								<div class="description">Performs a RESET RETRY COUNTER command</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#setSecureChannel">setSecureChannel</a></b>(secureChannel)
								</div>
								<div class="description">Set secure channel</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#updateBinary">updateBinary</a></b>(apdu)
								</div>
								<div class="description">Process an UPDATE BINARY APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/CommandInterpreter.html#verify">verify</a></b>(the)
								</div>
								<div class="description">Performs a VERIFY command</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>CommandInterpreter</b>(fileSelector)
				</div>
				
				<div class="description">
					Create a command interpreter
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/FileSelector.html">FileSelector</a>}</span>  <b>fileSelector</b>
								
							</dt>
								<dd>the file selector object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="changeReferenceData"> </a>
					<div class="fixedFont">
					
					
					<b>changeReferenceData</b>(the)
					
					</div>
					<div class="description">
						Performs a CHANGE REFERENCE DATA command
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>the</b>
									
								</dt>
								<dd>apdu</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="dispatch"> </a>
					<div class="fixedFont">
					
					
					<b>dispatch</b>(apdu, ins)
					
					</div>
					<div class="description">
						Dispatch to command handler based on instruction code
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the command and response APDU</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>ins</b>
									
								</dt>
								<dd>instruction code</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="handleSecMsgCommandAPDU"> </a>
					<div class="fixedFont">
					
					
					<b>handleSecMsgCommandAPDU</b>(apdu)
					
					</div>
					<div class="description">
						Process a secure messaging command APDU, if secure messaging is active.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the command APDU</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="handleSecMsgResponseAPDU"> </a>
					<div class="fixedFont">
					
					
					<b>handleSecMsgResponseAPDU</b>(apdu)
					
					</div>
					<div class="description">
						Process a secure messaging response APDU, if secure messaging is active
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the response APDU</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="hasSecureChannel"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>hasSecureChannel</b>()
					
					</div>
					<div class="description">
						Return status of secure channel
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if secure channel is active</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="manageSecurityEnvironment"> </a>
					<div class="fixedFont">
					
					
					<b>manageSecurityEnvironment</b>(apdu)
					
					</div>
					<div class="description">
						Process a MANAGE SECURITY ENVIRONMENT APDU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the command and response APDU</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="processAPDU"> </a>
					<div class="fixedFont">
					
					
					<b>processAPDU</b>(apdu)
					
					</div>
					<div class="description">
						Process a command APDU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the command and response APDU</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="readBinary"> </a>
					<div class="fixedFont">
					
					
					<b>readBinary</b>(apdu)
					
					</div>
					<div class="description">
						Process a READ BINARY APDU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the command and response APDU</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="readRecord"> </a>
					<div class="fixedFont">
					
					
					<b>readRecord</b>(apdu)
					
					</div>
					<div class="description">
						Process a READ RECORD APDU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the command and response APDU</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="resetRetryCounter"> </a>
					<div class="fixedFont">
					
					
					<b>resetRetryCounter</b>(the)
					
					</div>
					<div class="description">
						Performs a RESET RETRY COUNTER command
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>the</b>
									
								</dt>
								<dd>apdu</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSecureChannel"> </a>
					<div class="fixedFont">
					
					
					<b>setSecureChannel</b>(secureChannel)
					
					</div>
					<div class="description">
						Set secure channel
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{SecureChannel}</span> <b>secureChannel</b>
									
								</dt>
								<dd>the secure channel to used for unwrapping and wrapping APDUs</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="updateBinary"> </a>
					<div class="fixedFont">
					
					
					<b>updateBinary</b>(apdu)
					
					</div>
					<div class="description">
						Process an UPDATE BINARY APDU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the command and response APDU</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="verify"> </a>
					<div class="fixedFont">
					
					
					<b>verify</b>(the)
					
					</div>
					<div class="description">
						Performs a VERIFY command
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>the</b>
									
								</dt>
								<dd>apdu</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - DF</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class DF
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing dedicated files
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_DF.js.html">DF.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class DF.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/DF.html#constructor">DF</a></b>(the)
							</div>
							<div class="description">Creates a Dedicated File (DF)

<p>The constructor supports as argument a list of child elements</p></div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class DF.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DF.html#add">add</a></b>(node)
								</div>
								<div class="description">Adds a new child node to the DF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DF.html#addMeta">addMeta</a></b>(name, value)
								</div>
								<div class="description">Add meta information to DF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DF.html#addObject">addObject</a></b>(o)
								</div>
								<div class="description">Add object to DF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DF.html#dump">dump</a></b>(indent)
								</div>
								<div class="description">Dump the file system system recursively starting this this node</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DF.html#isDF">isDF</a></b>()
								</div>
								<div class="description">Returns true as this is a DF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DF.html#selectByAID">selectByAID</a></b>(the)
								</div>
								<div class="description">Select a DF contained in the DF using the application identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DF.html#selectByFID">selectByFID</a></b>(the)
								</div>
								<div class="description">Select a file contained in the DF using the file identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DF.html#selectBySFI">selectBySFI</a></b>(the)
								</div>
								<div class="description">Select a file contained in the DF using the short file identifier</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>DF</b>(the)
				</div>
				
				<div class="description">
					Creates a Dedicated File (DF)

<p>The constructor supports as argument a list of child elements</p>
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/FCP.html">FCP</a>}</span>  <b>the</b>
								
							</dt>
								<dd>file control parameter</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="add"> </a>
					<div class="fixedFont">
					
					
					<b>add</b>(node)
					
					</div>
					<div class="description">
						Adds a new child node to the DF
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/FSNode.html">FSNode</a>}</span> <b>node</b>
									
								</dt>
								<dd>the node to add</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addMeta"> </a>
					<div class="fixedFont">
					
					
					<b>addMeta</b>(name, value)
					
					</div>
					<div class="description">
						Add meta information to DF
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>name</b>
									
								</dt>
								<dd>name of meta information</dd>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>value</b>
									
								</dt>
								<dd>value of meta information</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addObject"> </a>
					<div class="fixedFont">
					
					
					<b>addObject</b>(o)
					
					</div>
					<div class="description">
						Add object to DF
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>o</b>
									
								</dt>
								<dd>object to be added. Must have property type and id.</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="dump"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>dump</b>(indent)
					
					</div>
					<div class="description">
						Dump the file system system recursively starting this this node
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>indent</b>
									
								</dt>
								<dd>the string to prefix the output with</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the dump</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isDF"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isDF</b>()
					
					</div>
					<div class="description">
						Returns true as this is a DF
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true this is a DF</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="selectByAID"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/FSNode.html">FSNode</a>}</span>
					<b>selectByAID</b>(the)
					
					</div>
					<div class="description">
						Select a DF contained in the DF using the application identifier
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>application identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the found node or undefined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="selectByFID"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/FSNode.html">FSNode</a>}</span>
					<b>selectByFID</b>(the)
					
					</div>
					<div class="description">
						Select a file contained in the DF using the file identifier
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>file identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the found node or undefined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="selectBySFI"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/FSNode.html">FSNode</a>}</span>
					<b>selectBySFI</b>(the)
					
					</div>
					<div class="description">
						Select a file contained in the DF using the short file identifier
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>the</b>
									
								</dt>
								<dd>short file identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the found node or undefined</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - DKEK</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class DKEK
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_DKEK.js.html">DKEK.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class DKEK.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/DKEK.html#constructor">DKEK</a></b>(crypto)
							</div>
							<div class="description">Class supporting DKEK functions outside the SmartCard-HSM</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class DKEK.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DKEK.html#clear">clear</a></b>()
								</div>
								<div class="description">Zeroize DKEK</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DKEK.html#convertCRT2PEM">convertCRT2PEM</a></b>(pri, pub)
								</div>
								<div class="description">Wrap RSA or ECC key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">DKEK.<b><a href="../symbols/DKEK.html#.decryptKeyShare">decryptKeyShare</a></b>(keyshare, password)
								</div>
								<div class="description">Decrypt a DKEK share</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">DKEK.<b><a href="../symbols/DKEK.html#.deriveDKEKShareKey">deriveDKEKShareKey</a></b>(password, password)
								</div>
								<div class="description">Derive DKEK share encryption key from password</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DKEK.html#encodeAESKey">encodeAESKey</a></b>(key)
								</div>
								<div class="description">Wrap AES key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DKEK.html#encodeKey">encodeKey</a></b>(pri, pub)
								</div>
								<div class="description">Wrap RSA or ECC key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">DKEK.<b><a href="../symbols/DKEK.html#.encryptKeyShare">encryptKeyShare</a></b>(keyshare, password)
								</div>
								<div class="description">Encrypt a DKEK share</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DKEK.html#getKCV">getKCV</a></b>()
								</div>
								<div class="description">Return the Key Check Value (KCV) of the internal DKEK</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DKEK.html#getKENC">getKENC</a></b>()
								</div>
								<div class="description">Derive the encryption key from the DKEK</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DKEK.html#getKMAC">getKMAC</a></b>()
								</div>
								<div class="description">Derive the message authentication key from the DKEK</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DKEK.html#importDKEKShare">importDKEKShare</a></b>(share)
								</div>
								<div class="description">Import a DKEK share</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>DKEK</b>(crypto)
				</div>
				
				<div class="description">
					Class supporting DKEK functions outside the SmartCard-HSM
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="clear"> </a>
					<div class="fixedFont">
					
					
					<b>clear</b>()
					
					</div>
					<div class="description">
						Zeroize DKEK
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="convertCRT2PEM"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>convertCRT2PEM</b>(pri, pub)
					
					</div>
					<div class="description">
						Wrap RSA or ECC key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>pri</b>
									
								</dt>
								<dd>the private key in CRT format</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>pub</b>
									
								</dt>
								<dd>the public key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the private key in private exponent / modulus format</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".decryptKeyShare"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">DKEK.</span><b>decryptKeyShare</b>(keyshare, password)
					
					</div>
					<div class="description">
						Decrypt a DKEK share
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyshare</b>
									
								</dt>
								<dd>the encrypted key share as read from the .pbe file</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>password</b>
									
								</dt>
								<dd>the password</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>plain DKEK value</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".deriveDKEKShareKey"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">DKEK.</span><b>deriveDKEKShareKey</b>(password, password)
					
					</div>
					<div class="description">
						Derive DKEK share encryption key from password
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>password</b>
									
								</dt>
								<dd>the password</dd>
							
								<dt>
									<b>password</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the derived key (32 Byte) concatenated with the IV (16 Byte)</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="encodeAESKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>encodeAESKey</b>(key)
					
					</div>
					<div class="description">
						Wrap AES key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the secret key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the secret key wrapped with the DKEK</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="encodeKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>encodeKey</b>(pri, pub)
					
					</div>
					<div class="description">
						Wrap RSA or ECC key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>pri</b>
									
								</dt>
								<dd>the private key</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>pub</b>
									
								</dt>
								<dd>the public key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the private key wrapped with the DKEK</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".encryptKeyShare"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">DKEK.</span><b>encryptKeyShare</b>(keyshare, password)
					
					</div>
					<div class="description">
						Encrypt a DKEK share
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyshare</b>
									
								</dt>
								<dd>the key share</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>password</b>
									
								</dt>
								<dd>the password</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>Encrypted DKEK share value</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getKCV"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getKCV</b>()
					
					</div>
					<div class="description">
						Return the Key Check Value (KCV) of the internal DKEK
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the KCV</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getKENC"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getKENC</b>()
					
					</div>
					<div class="description">
						Derive the encryption key from the DKEK
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encryption key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getKMAC"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getKMAC</b>()
					
					</div>
					<div class="description">
						Derive the message authentication key from the DKEK
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the message authentication key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="importDKEKShare"> </a>
					<div class="fixedFont">
					
					
					<b>importDKEKShare</b>(share)
					
					</div>
					<div class="description">
						Import a DKEK share
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>share</b>
									
								</dt>
								<dd>a 32 byte share</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - DNEncoder</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class DNEncoder
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/x509_DNEncoder.js.html">DNEncoder.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class DNEncoder.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/DNEncoder.html#constructor">DNEncoder</a></b>(mask)
							</div>
							<div class="description">An instance of this class allow generating a Distinguished Name from components
defined in the mask given as constructor.</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class DNEncoder.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DNEncoder.html#encode">encode</a></b>()
								</div>
								<div class="description">Encode DN based on mask and previously set objects</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DNEncoder.html#setDN">setDN</a></b>(name, dn)
								</div>
								<div class="description">Register a DN under the given name.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DNEncoder.html#setMap">setMap</a></b>(name, map)
								</div>
								<div class="description">Register an object and it properties the given name.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DNEncoder.html#validate">validate</a></b>()
								</div>
								<div class="description">Validate DN mask against previously set reference objects

DN objects can be set with setDN(name, {}).</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>DNEncoder</b>(mask)
				</div>
				
				<div class="description">
					An instance of this class allow generating a Distinguished Name from components
defined in the mask given as constructor. The mask may contain placeholders in the
form ${major.minor} that are resolved against other DNs and objects set with setDN() or
setMap().
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>mask</b>
								
							</dt>
								<dd>the mask for generating the DN</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="encode"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>encode</b>()
					
					</div>
					<div class="description">
						Encode DN based on mask and previously set objects
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>DN in the format as returned by PKIXCommon.parseDN()</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setDN"> </a>
					<div class="fixedFont">
					
					
					<b>setDN</b>(name, dn)
					
					</div>
					<div class="description">
						Register a DN under the given name. Elements in the DN can be referenced by ${major.minor}
with major set to the name given as argument and minor being the component in the given DN.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>name</b>
									
								</dt>
								<dd>the name for the major key</dd>
							
								<dt>
									<span class="light fixedFont">{String/Object}</span> <b>dn</b>
									
								</dt>
								<dd>the Distinguished Name given as String or in the format returned by PKIXCommon.parseDN.</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setMap"> </a>
					<div class="fixedFont">
					
					
					<b>setMap</b>(name, map)
					
					</div>
					<div class="description">
						Register an object and it properties the given name. Elements in the object can be referenced by ${major.minor}
with major set to the name given as argument and minor being the member of the given object.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>name</b>
									
								</dt>
								<dd>the name for the major key</dd>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>map</b>
									
								</dt>
								<dd>the map object</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="validate"> </a>
					<div class="fixedFont">
					
					
					<b>validate</b>()
					
					</div>
					<div class="description">
						Validate DN mask against previously set reference objects

DN objects can be set with setDN(name, {}). The minor key is validated against the list of
valid RDN as defined in PKIXCommon.validRDN.

Other objects can be set with setMap(), but only the key names in the map are relevant. If the
object contains the property "any", then any minor keys are acceptable.

The method will throw an exception if a key is invalid.
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - DataUnitAPDU</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class DataUnitAPDU
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Adapter class to decode APDUs for data unit handling
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_DataUnitAPDU.js.html">DataUnitAPDU.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class DataUnitAPDU.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/DataUnitAPDU.html#constructor">DataUnitAPDU</a></b>(apdu)
							</div>
							<div class="description">Create an adapter to decode a APDU for data unit handling</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class DataUnitAPDU.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DataUnitAPDU.html#getCData">getCData</a></b>()
								</div>
								<div class="description">Get the command data</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DataUnitAPDU.html#getFID">getFID</a></b>()
								</div>
								<div class="description">Gets the file identifier, if one defined</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DataUnitAPDU.html#getOffset">getOffset</a></b>()
								</div>
								<div class="description">Gets the offset</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DataUnitAPDU.html#getSFI">getSFI</a></b>()
								</div>
								<div class="description">Gets the short file identifier, if one defined</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/DataUnitAPDU.html#hasCData">hasCData</a></b>()
								</div>
								<div class="description">Returns true if command data in contained in the APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">DataUnitAPDU.<b><a href="../symbols/DataUnitAPDU.html#.test">test</a></b>()
								</div>
								<div class="description">Simple Unit Test</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>DataUnitAPDU</b>(apdu)
				</div>
				
				<div class="description">
					Create an adapter to decode a APDU for data unit handling
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span>  <b>apdu</b>
								
							</dt>
								<dd>the APDU to decode</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="getCData"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getCData</b>()
					
					</div>
					<div class="description">
						Get the command data
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the command data</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getFID"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getFID</b>()
					
					</div>
					<div class="description">
						Gets the file identifier, if one defined
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the file identifier or null if not defined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getOffset"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getOffset</b>()
					
					</div>
					<div class="description">
						Gets the offset
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the offset to read from or write to</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSFI"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getSFI</b>()
					
					</div>
					<div class="description">
						Gets the short file identifier, if one defined
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the short file identifier in the range 1 to 30 or -1 if not defined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasCData"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>hasCData</b>()
					
					</div>
					<div class="description">
						Returns true if command data in contained in the APDU
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if command data contained</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".test"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">DataUnitAPDU.</span><b>test</b>()
					
					</div>
					<div class="description">
						Simple Unit Test
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - EAC20</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class EAC20
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing support for Extended Access Control V2
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_EAC20.js.html">EAC20.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class EAC20.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/EAC20.html#constructor">EAC20</a></b>(crypto, card)
							</div>
							<div class="description">Create a protocol object for EAC</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class EAC20.">
					<caption>Field Summary</caption>
					<thead>
						<tr>
							<th scope="col">Field Attributes</th>
							<th scope="col">Field Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								EAC20.<b><a href="../symbols/EAC20.html#.ID_CAN">ID_CAN</a></b>
								</div>
								<div class="description">PACE PWD is the CAN</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								EAC20.<b><a href="../symbols/EAC20.html#.ID_MRZ">ID_MRZ</a></b>
								</div>
								<div class="description">PACE PWD is the hashed MRZ</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								EAC20.<b><a href="../symbols/EAC20.html#.ID_PIN">ID_PIN</a></b>
								</div>
								<div class="description">PACE PWD is the PIN</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								EAC20.<b><a href="../symbols/EAC20.html#.ID_PUK">ID_PUK</a></b>
								</div>
								<div class="description">PACE PWD is the PUK</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class EAC20.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#calculateBACKey">calculateBACKey</a></b>(mrz, keyno)
								</div>
								<div class="description">Calculate the Basic Access Control (BAC) key from the MRZ</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">EAC20.<b><a href="../symbols/EAC20.html#.decodeDocumentNumber">decodeDocumentNumber</a></b>(mrz)
								</div>
								<div class="description">Decode document number from 2 or 3 line MRZ

<p>This method supports a document number in a three line MRZ longer than 10 digits.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#getCADomainParameterInfos">getCADomainParameterInfos</a></b>()
								</div>
								<div class="description">Return the list of ChipAuthenticationDomainParameterInfo objects</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#getCAInfos">getCAInfos</a></b>()
								</div>
								<div class="description">Return the list of ChipAuthenticationInfo objects</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#getCAKeyId">getCAKeyId</a></b>(privileged)
								</div>
								<div class="description">Return the key id of the chip authentication key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#getPACEDomainParameterInfos">getPACEDomainParameterInfos</a></b>()
								</div>
								<div class="description">Return the list of PACEDomainParameterInfo objects</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#getPACEInfos">getPACEInfos</a></b>()
								</div>
								<div class="description">Return the list of PACEInfo objects</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#getRIKeyId">getRIKeyId</a></b>(authOnly)
								</div>
								<div class="description">Return the key id of the restricted identification key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#getTrustAnchorCAR">getTrustAnchorCAR</a></b>(previous,)
								</div>
								<div class="description">Return the trust anchor's CAR as indicated by the card in the PACE protocol</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#hashMRZ">hashMRZ</a></b>(mrz)
								</div>
								<div class="description">Calculate the hash over document number, date of birth and date of expiration from 2 or 3 line MRZ

<pre>
2 line MRZ of Silver Data Set
  P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<
  L898902C<3UTO6908061F9406236ZE184226B<<<<<14
  '-DocNo--'   '-DoB-' '-DoE-'

3 line MRZ of Silver Data Set
  I<UTOL898902C<3<<<<<<<<<<<<<<<
       '-DocNo--'
  6908061F9406236UTO<<<<<<<<<<<1
  '-DoB-' '-DoE-'
  ERIKSON<<ANNA<MARIA<<<<<<<<<<<
</pre></div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#performBAC">performBAC</a></b>(kenc, kmac)
								</div>
								<div class="description">Perform BAC using the provided Kenc and Kmac values.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#performBACWithMRZ">performBACWithMRZ</a></b>(kenc, kmac)
								</div>
								<div class="description">Perform BAC using the provided Kenc and Kmac values.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#performChipAuthentication">performChipAuthentication</a></b>(keyid)
								</div>
								<div class="description">Perform chip authentication and establish a secure channel</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#performChipAuthenticationV1">performChipAuthenticationV1</a></b>(keyid)
								</div>
								<div class="description">Perform chip authentication in version 1 and establish a secure channel</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#performChipAuthenticationV2">performChipAuthenticationV2</a></b>()
								</div>
								<div class="description">Perform chip authentication in version 2 and establish a secure channel</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#performPACE">performPACE</a></b>(parameterId, pwdid, pwd, chat, certExt)
								</div>
								<div class="description">Perform PACE using the indicated parameter set, the identified password, the password value and
an optional cardholder authentication template.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#performRestrictedIdentification">performRestrictedIdentification</a></b>(keyId, sectorPublicKey, sectorPublicKeyIndex)
								</div>
								<div class="description">Perform restricted identification</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#performTerminalAuthentication">performTerminalAuthentication</a></b>(termkey, auxdata, crypto)
								</div>
								<div class="description">Perform terminal authentication using a given terminal key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#performTerminalAuthenticationFinal">performTerminalAuthenticationFinal</a></b>(signature)
								</div>
								<div class="description">Complete terminal authentication by submitting the signature to the card</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#performTerminalAuthenticationSetup">performTerminalAuthenticationSetup</a></b>(auxdata)
								</div>
								<div class="description">Prepare terminal authentication by setting the required security environment</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#prepareChipAuthentication">prepareChipAuthentication</a></b>(keyId)
								</div>
								<div class="description">Prepare chip authentication by generating the ephemeral key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#processSecurityInfos">processSecurityInfos</a></b>(si, fromCardSecurity)
								</div>
								<div class="description">Process a list of security infos from EF.CardInfo, EF.CardSecurity or EF.ChipSecurity</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#readCardAccess">readCardAccess</a></b>()
								</div>
								<div class="description">Read EF.CardAccess and process security infos</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#readCardSecurity">readCardSecurity</a></b>()
								</div>
								<div class="description">Read EF.CardSecurity and process security infos</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#readChipSecurity">readChipSecurity</a></b>()
								</div>
								<div class="description">Read EF.ChipSecurity and process security infos</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#readCVCA">readCVCA</a></b>()
								</div>
								<div class="description">Read EF.CVCA and process contained CARs</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#readDG14">readDG14</a></b>()
								</div>
								<div class="description">Read EF.DG14 and process security infos</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#readEFwithFID">readEFwithFID</a></b>(fid)
								</div>
								<div class="description">Select EF using FID and read elementary file</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#readEFwithSFI">readEFwithSFI</a></b>(short)
								</div>
								<div class="description">Select and read EF using SFI</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#readTLVEFwithSFI">readTLVEFwithSFI</a></b>(short)
								</div>
								<div class="description">Select and read a TLV encoded EF using SFI</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#select_eID">select_eID</a></b>()
								</div>
								<div class="description">Select eID Application</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#select_eSign">select_eSign</a></b>()
								</div>
								<div class="description">Select eSign Application</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#selectADF">selectADF</a></b>(aid)
								</div>
								<div class="description">Select application DF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#selectLDS">selectLDS</a></b>()
								</div>
								<div class="description">Select ePass LDS Application</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#setIDPICC">setIDPICC</a></b>(id, kmac)
								</div>
								<div class="description">Set the ID_PICC used for terminal authentication in EAC 1.11</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#updateEFwithFID">updateEFwithFID</a></b>(fid, data)
								</div>
								<div class="description">Select EF using FID and update content</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#updateEFwithSFI">updateEFwithSFI</a></b>(short, data)
								</div>
								<div class="description">Select EF using SFI and update content</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#verifyAuxiliaryData">verifyAuxiliaryData</a></b>(oid)
								</div>
								<div class="description">Verify authenticated auxiliary data</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC20.html#verifyCertificateChain">verifyCertificateChain</a></b>(cvcchain)
								</div>
								<div class="description">Submit a list of certificates to the card for verification</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>EAC20</b>(crypto, card)
				</div>
				
				<div class="description">
					Create a protocol object for EAC
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider</dd>
						
							<dt>
								<span class="light fixedFont">{Card}</span>  <b>card</b>
								
							</dt>
								<dd>the card object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			
				<div class="sectionTitle">
					Field Detail
				</div>
				
					<a name=".ID_CAN"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">EAC20.</span><b>ID_CAN</b>
					
					</div>
					<div class="description">
						PACE PWD is the CAN
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".ID_MRZ"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">EAC20.</span><b>ID_MRZ</b>
					
					</div>
					<div class="description">
						PACE PWD is the hashed MRZ
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".ID_PIN"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">EAC20.</span><b>ID_PIN</b>
					
					</div>
					<div class="description">
						PACE PWD is the PIN
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".ID_PUK"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">EAC20.</span><b>ID_PUK</b>
					
					</div>
					<div class="description">
						PACE PWD is the PUK
						
						
					</div>
					
					

						
						
						
						

					
				
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="calculateBACKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>calculateBACKey</b>(mrz, keyno)
					
					</div>
					<div class="description">
						Calculate the Basic Access Control (BAC) key from the MRZ
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>mrz</b>
									
								</dt>
								<dd>2 line or 3 line machine readable zone</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyno</b>
									
								</dt>
								<dd>Number of key to calculate (1 for Kenc and 2 for Kmac)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".decodeDocumentNumber"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">EAC20.</span><b>decodeDocumentNumber</b>(mrz)
					
					</div>
					<div class="description">
						Decode document number from 2 or 3 line MRZ

<p>This method supports a document number in a three line MRZ longer than 10 digits.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>mrz</b>
									
								</dt>
								<dd>the concatenation of the MRZ lines</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the document number</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCADomainParameterInfos"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a>[]}</span>
					<b>getCADomainParameterInfos</b>()
					
					</div>
					<div class="description">
						Return the list of ChipAuthenticationDomainParameterInfo objects
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of ChipAuthenticationDomainParameterInfo objects read from the card, indexed by the keyId</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCAInfos"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a>[]}</span>
					<b>getCAInfos</b>()
					
					</div>
					<div class="description">
						Return the list of ChipAuthenticationInfo objects
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of ChipAuthenticationInfo objects read from the card, indexed by the keyId</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCAKeyId"> </a>
					<div class="fixedFont">
					
					
					<b>getCAKeyId</b>(privileged)
					
					</div>
					<div class="description">
						Return the key id of the chip authentication key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>privileged</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key id</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPACEDomainParameterInfos"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a>[]}</span>
					<b>getPACEDomainParameterInfos</b>()
					
					</div>
					<div class="description">
						Return the list of PACEDomainParameterInfo objects
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of PACEDomainParameterInfo objects read from the card, indexed by the parameterId</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPACEInfos"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/PACEInfo.html">PACEInfo</a>[]}</span>
					<b>getPACEInfos</b>()
					
					</div>
					<div class="description">
						Return the list of PACEInfo objects
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of PACEInfo objects read from the card, indexed by the parameterId</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRIKeyId"> </a>
					<div class="fixedFont">
					
					
					<b>getRIKeyId</b>(authOnly)
					
					</div>
					<div class="description">
						Return the key id of the restricted identification key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>authOnly</b>
									
								</dt>
								<dd>return the RI key available after authentication only (to calculate the pseudonym)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key id</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getTrustAnchorCAR"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span>
					<b>getTrustAnchorCAR</b>(previous,)
					
					</div>
					<div class="description">
						Return the trust anchor's CAR as indicated by the card in the PACE protocol
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>previous,</b>
									
								</dt>
								<dd>true to return the previous CAR, if any</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the CertificationAuthorityReference (CAR)</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hashMRZ"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>hashMRZ</b>(mrz)
					
					</div>
					<div class="description">
						Calculate the hash over document number, date of birth and date of expiration from 2 or 3 line MRZ

<pre>
2 line MRZ of Silver Data Set
  P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<
  L898902C<3UTO6908061F9406236ZE184226B<<<<<14
  '-DocNo--'   '-DoB-' '-DoE-'

3 line MRZ of Silver Data Set
  I<UTOL898902C<3<<<<<<<<<<<<<<<
       '-DocNo--'
  6908061F9406236UTO<<<<<<<<<<<1
  '-DoB-' '-DoE-'
  ERIKSON<<ANNA<MARIA<<<<<<<<<<<
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>mrz</b>
									
								</dt>
								<dd>2 line or 3 line machine readable zone</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the SHA-1 hash over the concatenation of document number, date of birth and date of expiration</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="performBAC"> </a>
					<div class="fixedFont">
					
					
					<b>performBAC</b>(kenc, kmac)
					
					</div>
					<div class="description">
						Perform BAC using the provided Kenc and Kmac values.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>kenc</b>
									
								</dt>
								<dd>the key Kenc</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>kmac</b>
									
								</dt>
								<dd>the key Kmac</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="performBACWithMRZ"> </a>
					<div class="fixedFont">
					
					
					<b>performBACWithMRZ</b>(kenc, kmac)
					
					</div>
					<div class="description">
						Perform BAC using the provided Kenc and Kmac values.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>kenc</b>
									
								</dt>
								<dd>the key Kenc</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>kmac</b>
									
								</dt>
								<dd>the key Kmac</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="performChipAuthentication"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>performChipAuthentication</b>(keyid)
					
					</div>
					<div class="description">
						Perform chip authentication and establish a secure channel
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyid</b>
									
								</dt>
								<dd>the key identifier (only required for ChipAuthentication in version 1)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if chip authentication was successfull</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="performChipAuthenticationV1"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>performChipAuthenticationV1</b>(keyid)
					
					</div>
					<div class="description">
						Perform chip authentication in version 1 and establish a secure channel
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>keyid</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if chip authentication was successfull</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="performChipAuthenticationV2"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>performChipAuthenticationV2</b>()
					
					</div>
					<div class="description">
						Perform chip authentication in version 2 and establish a secure channel
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if chip authentication was successfull</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="performPACE"> </a>
					<div class="fixedFont">
					
					
					<b>performPACE</b>(parameterId, pwdid, pwd, chat, certExt)
					
					</div>
					<div class="description">
						Perform PACE using the indicated parameter set, the identified password, the password value and
an optional cardholder authentication template.

<p>This method supports PACE version 1 and 2. For version 2, parameterId with a value between 0 and 31 denotes
a standardized domain parameter as defined in TR-03110 2.04 or later.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>parameterId</b>
									
								</dt>
								<dd>the identifier for the PACEInfo and PACEDomainParameterInfo from EF.CardInfo. Use 0 for
                            the default.</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>pwdid</b>
									
								</dt>
								<dd>one of EAC20.ID_MRZ, EAC20.ID_CAN, EAC20.ID_PIN, EAC20.ID_PUK</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>pwd</b>
									
								</dt>
								<dd>the PACE password or PACE key</dd>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>chat</b>
									
								</dt>
								<dd>the CHAT data object with tag 7F4C or null</dd>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>certExt</b>
									
								</dt>
								<dd>the certificate extensions data object with tag 65 or null</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="performRestrictedIdentification"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>performRestrictedIdentification</b>(keyId, sectorPublicKey, sectorPublicKeyIndex)
					
					</div>
					<div class="description">
						Perform restricted identification
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyId</b>
									
								</dt>
								<dd>restricted identification key identifier</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>sectorPublicKey</b>
									
								</dt>
								<dd>the sector public key data</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>sectorPublicKeyIndex</b>
									
								</dt>
								<dd>optional argument that allows to select a specific sector public key in the terminal certificate</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the sector specific identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="performTerminalAuthentication"> </a>
					<div class="fixedFont">
					
					
					<b>performTerminalAuthentication</b>(termkey, auxdata, crypto)
					
					</div>
					<div class="description">
						Perform terminal authentication using a given terminal key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>termkey</b>
									
								</dt>
								<dd>the terminal private key</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>auxdata</b>
									
								</dt>
								<dd>auxiliary data (tag '67') to be included in terminal authentication</dd>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>optional alternative crypto provider (e.g. for key in SmartCard-HSM)</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="performTerminalAuthenticationFinal"> </a>
					<div class="fixedFont">
					
					
					<b>performTerminalAuthenticationFinal</b>(signature)
					
					</div>
					<div class="description">
						Complete terminal authentication by submitting the signature to the card
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>signature</b>
									
								</dt>
								<dd>the signature as concatenation of r and s</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="performTerminalAuthenticationSetup"> </a>
					<div class="fixedFont">
					
					
					<b>performTerminalAuthenticationSetup</b>(auxdata)
					
					</div>
					<div class="description">
						Prepare terminal authentication by setting the required security environment
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>auxdata</b>
									
								</dt>
								<dd>auxiliary data (tag '67') to be included in terminal authentication</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="prepareChipAuthentication"> </a>
					<div class="fixedFont">
					
					
					<b>prepareChipAuthentication</b>(keyId)
					
					</div>
					<div class="description">
						Prepare chip authentication by generating the ephemeral key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyId</b>
									
								</dt>
								<dd>the key identifier to be used for chip authentication</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="processSecurityInfos"> </a>
					<div class="fixedFont">
					
					
					<b>processSecurityInfos</b>(si, fromCardSecurity)
					
					</div>
					<div class="description">
						Process a list of security infos from EF.CardInfo, EF.CardSecurity or EF.ChipSecurity
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>si</b>
									
								</dt>
								<dd>the security info ASN Sequence</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>fromCardSecurity</b>
									
								</dt>
								<dd>true if security infos are taken from EF.CardSecurity, EF.ChipSecurity or EF.DG14</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="readCardAccess"> </a>
					<div class="fixedFont">
					
					
					<b>readCardAccess</b>()
					
					</div>
					<div class="description">
						Read EF.CardAccess and process security infos
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="readCardSecurity"> </a>
					<div class="fixedFont">
					
					
					<b>readCardSecurity</b>()
					
					</div>
					<div class="description">
						Read EF.CardSecurity and process security infos
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="readChipSecurity"> </a>
					<div class="fixedFont">
					
					
					<b>readChipSecurity</b>()
					
					</div>
					<div class="description">
						Read EF.ChipSecurity and process security infos
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="readCVCA"> </a>
					<div class="fixedFont">
					
					
					<b>readCVCA</b>()
					
					</div>
					<div class="description">
						Read EF.CVCA and process contained CARs
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="readDG14"> </a>
					<div class="fixedFont">
					
					
					<b>readDG14</b>()
					
					</div>
					<div class="description">
						Read EF.DG14 and process security infos
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="readEFwithFID"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>readEFwithFID</b>(fid)
					
					</div>
					<div class="description">
						Select EF using FID and read elementary file
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>2 byte file identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the content of the EF</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="readEFwithSFI"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>readEFwithSFI</b>(short)
					
					</div>
					<div class="description">
						Select and read EF using SFI
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>short</b>
									
								</dt>
								<dd>file identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the content of the EF</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="readTLVEFwithSFI"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>readTLVEFwithSFI</b>(short)
					
					</div>
					<div class="description">
						Select and read a TLV encoded EF using SFI
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>short</b>
									
								</dt>
								<dd>file identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TLV content of the EF</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="select_eID"> </a>
					<div class="fixedFont">
					
					
					<b>select_eID</b>()
					
					</div>
					<div class="description">
						Select eID Application
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="select_eSign"> </a>
					<div class="fixedFont">
					
					
					<b>select_eSign</b>()
					
					</div>
					<div class="description">
						Select eSign Application
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="selectADF"> </a>
					<div class="fixedFont">
					
					
					<b>selectADF</b>(aid)
					
					</div>
					<div class="description">
						Select application DF
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>aid</b>
									
								</dt>
								<dd>the application identifier</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="selectLDS"> </a>
					<div class="fixedFont">
					
					
					<b>selectLDS</b>()
					
					</div>
					<div class="description">
						Select ePass LDS Application
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="setIDPICC"> </a>
					<div class="fixedFont">
					
					
					<b>setIDPICC</b>(id, kmac)
					
					</div>
					<div class="description">
						Set the ID_PICC used for terminal authentication in EAC 1.11
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>id</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>kmac</b>
									
								</dt>
								<dd>the key Kmac</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="updateEFwithFID"> </a>
					<div class="fixedFont">
					
					
					<b>updateEFwithFID</b>(fid, data)
					
					</div>
					<div class="description">
						Select EF using FID and update content
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>2 byte file identifier</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>data to be written</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="updateEFwithSFI"> </a>
					<div class="fixedFont">
					
					
					<b>updateEFwithSFI</b>(short, data)
					
					</div>
					<div class="description">
						Select EF using SFI and update content
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>short</b>
									
								</dt>
								<dd>file identifier</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>data to be written</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="verifyAuxiliaryData"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>verifyAuxiliaryData</b>(oid)
					
					</div>
					<div class="description">
						Verify authenticated auxiliary data
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>oid</b>
									
								</dt>
								<dd>the object identifier for the auxiliary data provided during terminal authentication</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true, if auxiliary data was verified</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="verifyCertificateChain"> </a>
					<div class="fixedFont">
					
					
					<b>verifyCertificateChain</b>(cvcchain)
					
					</div>
					<div class="description">
						Submit a list of certificates to the card for verification
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>[]}</span> <b>cvcchain</b>
									
								</dt>
								<dd>the list of certificates, starting with link certificates, DVCA certificate and terminal certificate.</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - EAC2CVCertificateGenerator</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class EAC2CVCertificateGenerator
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a generator for CV certificates according to EAC 1.1 and EAC 2.0 specifications.
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_EAC2CVCertificateGenerator.js.html">EAC2CVCertificateGenerator.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class EAC2CVCertificateGenerator.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/EAC2CVCertificateGenerator.html#constructor">EAC2CVCertificateGenerator</a></b>(crypto)
							</div>
							<div class="description">Define a generator object for CV certificates</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class EAC2CVCertificateGenerator.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">EAC2CVCertificateGenerator.<b><a href="../symbols/EAC2CVCertificateGenerator.html#.decodeUncompressedECPoint">decodeUncompressedECPoint</a></b>(uncompressedPoint)
								</div>
								<div class="description">Decode x/y coordinates from uncompressed format</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">EAC2CVCertificateGenerator.<b><a href="../symbols/EAC2CVCertificateGenerator.html#.dtos">dtos</a></b>(d)
								</div>
								<div class="description">Convert date to string with format YYMMDD.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">EAC2CVCertificateGenerator.<b><a href="../symbols/EAC2CVCertificateGenerator.html#.encodeUncompressedECPoint">encodeUncompressedECPoint</a></b>(x, y)
								</div>
								<div class="description">Convert x/y coordinates to uncompressed format</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#generateCVCertificate">generateCVCertificate</a></b>(signingKey, taOID)
								</div>
								<div class="description">Generate a certificate based on the parameter set using the setter methods.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setCAR">setCAR</a></b>(CAR, CAR, CAR)
								</div>
								<div class="description">Set the certification authority reference</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setChatAuthorizationLevel">setChatAuthorizationLevel</a></b>(authLevel)
								</div>
								<div class="description">Set the authorization level of the authorization template for the generated certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setChatOID">setChatOID</a></b>(oid)
								</div>
								<div class="description">Set the object identifier of the authorization template for the generated certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setCHR">setCHR</a></b>(CHR, CHR, CHR)
								</div>
								<div class="description">Set the certificate holder reference</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setEffectiveDate">setEffectiveDate</a></b>(effectiveDate, effectiveDate)
								</div>
								<div class="description">Set the effective date</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setExpiryDate">setExpiryDate</a></b>(expiryDate, expiryDate)
								</div>
								<div class="description">Set the expiry date</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setExtensions">setExtensions</a></b>(extensions)
								</div>
								<div class="description">Set some additional extensions</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setIncludeDomainParameters">setIncludeDomainParameters</a></b>(value)
								</div>
								<div class="description">Set whether to include domain parameters in the certificate or not</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setProfileIdentifier">setProfileIdentifier</a></b>(profileID)
								</div>
								<div class="description">Set the profile identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setPublicKey">setPublicKey</a></b>(publicKey)
								</div>
								<div class="description">Set the public key to be included in the certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#setTAAlgorithmIdentifier">setTAAlgorithmIdentifier</a></b>(oid)
								</div>
								<div class="description">Set the algorithm identifier for terminal authentication</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVCertificateGenerator.html#stripLeadingZeros">stripLeadingZeros</a></b>(value)
								</div>
								<div class="description">Strips leading zeros of a ByteString</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>EAC2CVCertificateGenerator</b>(crypto)
				</div>
				
				<div class="description">
					Define a generator object for CV certificates
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider to be used</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name=".decodeUncompressedECPoint"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">EAC2CVCertificateGenerator.</span><b>decodeUncompressedECPoint</b>(uncompressedPoint)
					
					</div>
					<div class="description">
						Decode x/y coordinates from uncompressed format
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>uncompressedPoint</b>
									
								</dt>
								<dd>the uncompressed point</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the x-/y-coordinate of the point</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".dtos"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">EAC2CVCertificateGenerator.</span><b>dtos</b>(d)
					
					</div>
					<div class="description">
						Convert date to string with format YYMMDD.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Date}</span> <b>d</b>
									
								</dt>
								<dd>the date object.</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the date/time string.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".encodeUncompressedECPoint"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">EAC2CVCertificateGenerator.</span><b>encodeUncompressedECPoint</b>(x, y)
					
					</div>
					<div class="description">
						Convert x/y coordinates to uncompressed format
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>x</b>
									
								</dt>
								<dd>the x-coordinate of the point</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>y</b>
									
								</dt>
								<dd>the y-coordinate of the point</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the point in uncompressed format</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateCVCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>generateCVCertificate</b>(signingKey, taOID)
					
					</div>
					<div class="description">
						Generate a certificate based on the parameter set using the setter methods.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>signingKey</b>
									
								</dt>
								<dd>the key to be used for signing the certificate</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>taOID</b>
									
								</dt>
								<dd>the object identifier associated with the signing key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the CVC certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setCAR"> </a>
					<div class="fixedFont">
					
					
					<b>setCAR</b>(CAR, CAR, CAR)
					
					</div>
					<div class="description">
						Set the certification authority reference
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>CAR</b>
									
								</dt>
								<dd>the CAR value</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>CAR</b>
									
								</dt>
								<dd>the CAR value</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>CAR</b>
									
								</dt>
								<dd>the CAR value</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setChatAuthorizationLevel"> </a>
					<div class="fixedFont">
					
					
					<b>setChatAuthorizationLevel</b>(authLevel)
					
					</div>
					<div class="description">
						Set the authorization level of the authorization template for the generated certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>authLevel</b>
									
								</dt>
								<dd>the encoded authorization level</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setChatOID"> </a>
					<div class="fixedFont">
					
					
					<b>setChatOID</b>(oid)
					
					</div>
					<div class="description">
						Set the object identifier of the authorization template for the generated certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>oid</b>
									
								</dt>
								<dd>the object identifier for the chat</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setCHR"> </a>
					<div class="fixedFont">
					
					
					<b>setCHR</b>(CHR, CHR, CHR)
					
					</div>
					<div class="description">
						Set the certificate holder reference
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>CHR</b>
									
								</dt>
								<dd>the CHR value</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>CHR</b>
									
								</dt>
								<dd>the CHR value</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>CHR</b>
									
								</dt>
								<dd>the CHR value</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setEffectiveDate"> </a>
					<div class="fixedFont">
					
					
					<b>setEffectiveDate</b>(effectiveDate, effectiveDate)
					
					</div>
					<div class="description">
						Set the effective date
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>effectiveDate</b>
									
								</dt>
								<dd>the effective date in the format YYMMDD</dd>
							
								<dt>
									<span class="light fixedFont">{Date}</span> <b>effectiveDate</b>
									
								</dt>
								<dd>the effective date as Date object</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setExpiryDate"> </a>
					<div class="fixedFont">
					
					
					<b>setExpiryDate</b>(expiryDate, expiryDate)
					
					</div>
					<div class="description">
						Set the expiry date
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>expiryDate</b>
									
								</dt>
								<dd>the expiry date in the format YYMMDD</dd>
							
								<dt>
									<span class="light fixedFont">{Date}</span> <b>expiryDate</b>
									
								</dt>
								<dd>the expiry date as Date object</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setExtensions"> </a>
					<div class="fixedFont">
					
					
					<b>setExtensions</b>(extensions)
					
					</div>
					<div class="description">
						Set some additional extensions
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Array of ASN.1 objects}</span> <b>extensions</b>
									
								</dt>
								<dd>array containing the ASN.1 encoded extensions for the certificate</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setIncludeDomainParameters"> </a>
					<div class="fixedFont">
					
					
					<b>setIncludeDomainParameters</b>(value)
					
					</div>
					<div class="description">
						Set whether to include domain parameters in the certificate or not
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>value</b>
									
								</dt>
								<dd>the flag indicator</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setProfileIdentifier"> </a>
					<div class="fixedFont">
					
					
					<b>setProfileIdentifier</b>(profileID)
					
					</div>
					<div class="description">
						Set the profile identifier
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>profileID</b>
									
								</dt>
								<dd>the profile identifier</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setPublicKey"> </a>
					<div class="fixedFont">
					
					
					<b>setPublicKey</b>(publicKey)
					
					</div>
					<div class="description">
						Set the public key to be included in the certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>publicKey</b>
									
								</dt>
								<dd>the public key object to be certified</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setTAAlgorithmIdentifier"> </a>
					<div class="fixedFont">
					
					
					<b>setTAAlgorithmIdentifier</b>(oid)
					
					</div>
					<div class="description">
						Set the algorithm identifier for terminal authentication
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>oid</b>
									
								</dt>
								<dd>the object identifier as specified in appendix A.6.4</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="stripLeadingZeros"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>stripLeadingZeros</b>(value)
					
					</div>
					<div class="description">
						Strips leading zeros of a ByteString
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>value</b>
									
								</dt>
								<dd>the ByteString value</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the stripped ByteString object, may be an empty ByteString</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - EAC2CVRequestGenerator</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class EAC2CVRequestGenerator
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a generator for CVC requests
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_EAC2CVRequestGenerator.js.html">EAC2CVRequestGenerator.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class EAC2CVRequestGenerator.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/EAC2CVRequestGenerator.html#constructor">EAC2CVRequestGenerator</a></b>(Crypto)
							</div>
							<div class="description">Constructor for request generator</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class EAC2CVRequestGenerator.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVRequestGenerator.html#generateAuthenticatedCVRequest">generateAuthenticatedCVRequest</a></b>(requestKey, authenticationKey, authCHR, taOID)
								</div>
								<div class="description">Generate authenticated request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVRequestGenerator.html#generateCVRequest">generateCVRequest</a></b>(privateKey)
								</div>
								<div class="description">Generate initial certificate request using the specified private key for signing</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVRequestGenerator.html#reset">reset</a></b>()
								</div>
								<div class="description">Reset the current generator object

TODO: Implement me</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVRequestGenerator.html#setCAR">setCAR</a></b>(car)
								</div>
								<div class="description">Set the certficate authorization reference (CAR) for the request

The usage of this method is optional - if no CAR is set, there will be no
"inner" CAR included within the certficate request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVRequestGenerator.html#setCHR">setCHR</a></b>(chr)
								</div>
								<div class="description">Set the certficate holder reference (CHR) for the request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVRequestGenerator.html#setExtensions">setExtensions</a></b>(extensions)
								</div>
								<div class="description">Set the extension values that should be included within the request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVRequestGenerator.html#setProfileIdentifier">setProfileIdentifier</a></b>(profileID)
								</div>
								<div class="description">Set the certificate profile identifier (CPI) for the request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVRequestGenerator.html#setPublicKey">setPublicKey</a></b>(publicKey)
								</div>
								<div class="description">Set the public key that should be encoded within the request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/EAC2CVRequestGenerator.html#setTAAlgorithmIdentifier">setTAAlgorithmIdentifier</a></b>(oid)
								</div>
								<div class="description">Set the object identifier that should be included in the public key domain parameters</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">EAC2CVRequestGenerator.<b><a href="../symbols/EAC2CVRequestGenerator.html#.signAuthenticatedCVRequest">signAuthenticatedCVRequest</a></b>(crypto, request, authenticationKey, authCHR, taOID)
								</div>
								<div class="description">Countersign request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">EAC2CVRequestGenerator.<b><a href="../symbols/EAC2CVRequestGenerator.html#.stripLeadingZeros">stripLeadingZeros</a></b>(value)
								</div>
								<div class="description">Strips leading zeros of a ByteString</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>EAC2CVRequestGenerator</b>(Crypto)
				</div>
				
				<div class="description">
					Constructor for request generator
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>Crypto</b>
								
							</dt>
								<dd>object to use</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="generateAuthenticatedCVRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>generateAuthenticatedCVRequest</b>(requestKey, authenticationKey, authCHR, taOID)
					
					</div>
					<div class="description">
						Generate authenticated request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>requestKey</b>
									
								</dt>
								<dd>Private key for the request signature</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>authenticationKey</b>
									
								</dt>
								<dd>Private key for used for signing and authenticating the request</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>authCHR</b>
									
								</dt>
								<dd>CHR of the authenticating authority</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>taOID</b>
									
								</dt>
								<dd>the public key object identifier of the authentication key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>The DER-encoded authenticated CV request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateCVRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>generateCVRequest</b>(privateKey)
					
					</div>
					<div class="description">
						Generate initial certificate request using the specified private key for signing
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>privateKey</b>
									
								</dt>
								<dd>Private key for signature creation</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>The DER-encoded CV request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="reset"> </a>
					<div class="fixedFont">
					
					
					<b>reset</b>()
					
					</div>
					<div class="description">
						Reset the current generator object

TODO: Implement me
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="setCAR"> </a>
					<div class="fixedFont">
					
					
					<b>setCAR</b>(car)
					
					</div>
					<div class="description">
						Set the certficate authorization reference (CAR) for the request

The usage of this method is optional - if no CAR is set, there will be no
"inner" CAR included within the certficate request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>car</b>
									
								</dt>
								<dd>CAR for the request</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setCHR"> </a>
					<div class="fixedFont">
					
					
					<b>setCHR</b>(chr)
					
					</div>
					<div class="description">
						Set the certficate holder reference (CHR) for the request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>chr</b>
									
								</dt>
								<dd>CHR for the request</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setExtensions"> </a>
					<div class="fixedFont">
					
					
					<b>setExtensions</b>(extensions)
					
					</div>
					<div class="description">
						Set the extension values that should be included within the request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString[]}</span> <b>extensions</b>
									
								</dt>
								<dd>Array of DER-encoded extensions</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setProfileIdentifier"> </a>
					<div class="fixedFont">
					
					
					<b>setProfileIdentifier</b>(profileID)
					
					</div>
					<div class="description">
						Set the certificate profile identifier (CPI) for the request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>profileID</b>
									
								</dt>
								<dd>CPI for the request</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setPublicKey"> </a>
					<div class="fixedFont">
					
					
					<b>setPublicKey</b>(publicKey)
					
					</div>
					<div class="description">
						Set the public key that should be encoded within the request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>publicKey</b>
									
								</dt>
								<dd>Public Key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setTAAlgorithmIdentifier"> </a>
					<div class="fixedFont">
					
					
					<b>setTAAlgorithmIdentifier</b>(oid)
					
					</div>
					<div class="description">
						Set the object identifier that should be included in the public key domain parameters
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>oid</b>
									
								</dt>
								<dd>Object identifier as specified in appendix A.6.4</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name=".signAuthenticatedCVRequest"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ASN1}</span>
					<span class="light">EAC2CVRequestGenerator.</span><b>signAuthenticatedCVRequest</b>(crypto, request, authenticationKey, authCHR, taOID)
					
					</div>
					<div class="description">
						Countersign request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>the crypto provide to use for signing the request</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>request</b>
									
								</dt>
								<dd>the self-signed request</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>authenticationKey</b>
									
								</dt>
								<dd>Private key for used for signing and authenticating the request</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>authCHR</b>
									
								</dt>
								<dd>CHR of the authenticating authority</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>taOID</b>
									
								</dt>
								<dd>the public key object identifier of the authentication key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>The DER-encoded authenticated CV request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".stripLeadingZeros"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString

TODO: Move to Utils}</span>
					<span class="light">EAC2CVRequestGenerator.</span><b>stripLeadingZeros</b>(value)
					
					</div>
					<div class="description">
						Strips leading zeros of a ByteString
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>value</b>
									
								</dt>
								<dd>the ByteString value</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the stripped ByteString object, may be an empty ByteString</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - FCP</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class FCP
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class storing File Control Parameter for a file system node
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_FCP.js.html">FCP.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class FCP.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/FCP.html#constructor">FCP</a></b>()
							</div>
							<div class="description">Create a File Control Parameter containing information about a file system node</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class FCP.">
					<caption>Field Summary</caption>
					<thead>
						<tr>
							<th scope="col">Field Attributes</th>
							<th scope="col">Field Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								FCP.<b><a href="../symbols/FCP.html#.DEDICATEDFILE">DEDICATEDFILE</a></b>
								</div>
								<div class="description">File type for DF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								FCP.<b><a href="../symbols/FCP.html#.LINEARFIXED">LINEARFIXED</a></b>
								</div>
								<div class="description">File type for record oriented EF with fixed record size</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								FCP.<b><a href="../symbols/FCP.html#.LINEARVARIABLE">LINEARVARIABLE</a></b>
								</div>
								<div class="description">File type for record oriented EF with variable record size</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">
								FCP.<b><a href="../symbols/FCP.html#.TRANSPARENT">TRANSPARENT</a></b>
								</div>
								<div class="description">File type for transparent EF</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class FCP.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FCP.html#getAID">getAID</a></b>()
								</div>
								<div class="description">Returns the Application Identifier (AID)</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FCP.html#getBytes">getBytes</a></b>()
								</div>
								<div class="description">Returns the encoded FCP</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FCP.html#getFCI">getFCI</a></b>()
								</div>
								<div class="description">Returns the FCI</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FCP.html#getFID">getFID</a></b>()
								</div>
								<div class="description">Returns the File Identifier (FID)</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FCP.html#getSFI">getSFI</a></b>()
								</div>
								<div class="description">Returns the Short File Identifier (SFI)</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">FCP.<b><a href="../symbols/FCP.html#.newDF">newDF</a></b>(fid, aid, supl)
								</div>
								<div class="description">Construct a new FCP object for a DF.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">FCP.<b><a href="../symbols/FCP.html#.newFCP">newFCP</a></b>(fid, sfi, type, shareable, internal, supl)
								</div>
								<div class="description">Construct a new FCP object from parameters.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">FCP.<b><a href="../symbols/FCP.html#.newLinearEF">newLinearEF</a></b>(fid, sfi, type, recno, recsize, supl)
								</div>
								<div class="description">Construct a new FCP object for an EF of type linear.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">FCP.<b><a href="../symbols/FCP.html#.newTransparentEF">newTransparentEF</a></b>(fid, sfi, size, supl)
								</div>
								<div class="description">Construct a new FCP object for an EF of type transparent.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">FCP.<b><a href="../symbols/FCP.html#.short2bytestring">short2bytestring</a></b>(val)
								</div>
								<div class="description">Convert an integer value into an two byte ByteString</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FCP.html#toString">toString</a></b>()
								</div>
								<div class="description">Return a human readible string for this object</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>FCP</b>()
				</div>
				
				<div class="description">
					Create a File Control Parameter containing information about a file system node
					
				</div>
				
				
				
				
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			
				<div class="sectionTitle">
					Field Detail
				</div>
				
					<a name=".DEDICATEDFILE"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">FCP.</span><b>DEDICATEDFILE</b>
					
					</div>
					<div class="description">
						File type for DF
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".LINEARFIXED"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">FCP.</span><b>LINEARFIXED</b>
					
					</div>
					<div class="description">
						File type for record oriented EF with fixed record size
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".LINEARVARIABLE"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">FCP.</span><b>LINEARVARIABLE</b>
					
					</div>
					<div class="description">
						File type for record oriented EF with variable record size
						
						
					</div>
					
					

						
						
						
						

					<hr />
				
					<a name=".TRANSPARENT"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">FCP.</span><b>TRANSPARENT</b>
					
					</div>
					<div class="description">
						File type for transparent EF
						
						
					</div>
					
					

						
						
						
						

					
				
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="getAID"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getAID</b>()
					
					</div>
					<div class="description">
						Returns the Application Identifier (AID)
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the AID</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getBytes"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getBytes</b>()
					
					</div>
					<div class="description">
						Returns the encoded FCP
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded FCP</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getFCI"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getFCI</b>()
					
					</div>
					<div class="description">
						Returns the FCI
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the FCI</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getFID"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getFID</b>()
					
					</div>
					<div class="description">
						Returns the File Identifier (FID)
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the FID</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSFI"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getSFI</b>()
					
					</div>
					<div class="description">
						Returns the Short File Identifier (SFI)
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the SFI</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".newDF"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{<a href="../symbols/FCP.html">FCP</a>}</span>
					<span class="light">FCP.</span><b>newDF</b>(fid, aid, supl)
					
					</div>
					<div class="description">
						Construct a new FCP object for a DF.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String|ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the file identifier (2 Bytes)</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>aid</b>
									
								</dt>
								<dd>the DF's application identifier (DFName)</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>supl</b>
									
								</dt>
								<dd>supplemental information</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the newly constructed FCP object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".newFCP"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{<a href="../symbols/FCP.html">FCP</a>}</span>
					<span class="light">FCP.</span><b>newFCP</b>(fid, sfi, type, shareable, internal, supl)
					
					</div>
					<div class="description">
						Construct a new FCP object from parameters.

<p>This function should never be called directly. Use newTransparentDF(), newDF() or newLinearEF() instead.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String|ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the file identifier (2 Bytes)</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>sfi</b>
									
								</dt>
								<dd>the short file identifier or -1 or 0 if not defined</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>type</b>
									
								</dt>
								<dd>the file type, one of FCP.DEDICATEDFILE, FCP.TRANSPARENT or FCP.LINEAR*</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>shareable</b>
									
								</dt>
								<dd>true, if file may be shared between logical channels</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>internal</b>
									
								</dt>
								<dd>true, if file is internal only and not externally selectable</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>supl</b>
									
								</dt>
								<dd>supplemental information</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the newly constructed FCP object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".newLinearEF"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{<a href="../symbols/FCP.html">FCP</a>}</span>
					<span class="light">FCP.</span><b>newLinearEF</b>(fid, sfi, type, recno, recsize, supl)
					
					</div>
					<div class="description">
						Construct a new FCP object for an EF of type linear.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String|ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the file identifier (2 Bytes)</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>sfi</b>
									
								</dt>
								<dd>the short file identifier or -1 or 0 if not defined</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>type</b>
									
								</dt>
								<dd>the file type, one of FCP.LINEARFIXED or FCP.LINEARVARIABLE</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>recno</b>
									
								</dt>
								<dd>the maximum number of records</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>recsize</b>
									
								</dt>
								<dd>the maximum or fixed record size</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>supl</b>
									
								</dt>
								<dd>supplemental information</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the newly constructed FCP object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".newTransparentEF"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{<a href="../symbols/FCP.html">FCP</a>}</span>
					<span class="light">FCP.</span><b>newTransparentEF</b>(fid, sfi, size, supl)
					
					</div>
					<div class="description">
						Construct a new FCP object for an EF of type transparent.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String|ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the file identifier (2 Bytes)</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>sfi</b>
									
								</dt>
								<dd>the short file identifier or -1 or 0 if not defined</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>size</b>
									
								</dt>
								<dd>the file size</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>supl</b>
									
								</dt>
								<dd>supplemental information</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the newly constructed FCP object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".short2bytestring"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">FCP.</span><b>short2bytestring</b>(val)
					
					</div>
					<div class="description">
						Convert an integer value into an two byte ByteString
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>val</b>
									
								</dt>
								<dd>the value</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the 2 byte encoded value MSB||LSB</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>toString</b>()
					
					</div>
					<div class="description">
						Return a human readible string for this object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the string</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - FSNode</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class FSNode
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Abstract class for file system nodes
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_FSNode.js.html">FSNode.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class FSNode.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/FSNode.html#constructor">FSNode</a></b>(fcp)
							</div>
							<div class="description">Construct a file system node</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class FSNode.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FSNode.html#getFCP">getFCP</a></b>()
								</div>
								<div class="description">Gets the file control parameter for this node</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FSNode.html#getParent">getParent</a></b>()
								</div>
								<div class="description">Gets the parent node for this node</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FSNode.html#isDF">isDF</a></b>()
								</div>
								<div class="description">Returns true if this is a DF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FSNode.html#setParent">setParent</a></b>(the)
								</div>
								<div class="description">Sets the parent for this node</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FSNode.html#toString">toString</a></b>()
								</div>
								<div class="description">Returns a human readible string</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>FSNode</b>(fcp)
				</div>
				
				<div class="description">
					Construct a file system node
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								 <b>fcp</b>
								
							</dt>
								<dd></dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="getFCP"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/FCP.html">FCP</a>}</span>
					<b>getFCP</b>()
					
					</div>
					<div class="description">
						Gets the file control parameter for this node
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the FCP</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getParent"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/DF.html">DF</a>}</span>
					<b>getParent</b>()
					
					</div>
					<div class="description">
						Gets the parent node for this node
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the parent node</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isDF"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isDF</b>()
					
					</div>
					<div class="description">
						Returns true if this is a DF
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if this is a DF</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setParent"> </a>
					<div class="fixedFont">
					
					
					<b>setParent</b>(the)
					
					</div>
					<div class="description">
						Sets the parent for this node
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/DF.html">DF</a>}</span> <b>the</b>
									
								</dt>
								<dd>parent node</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>toString</b>()
					
					</div>
					<div class="description">
						Returns a human readible string
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a string</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - File</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class File
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing basic support for files
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/file_File.js.html">File.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class File.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/File.html#constructor">File</a></b>(name, location)
							</div>
							<div class="description">Create a reference to a file system object (file or directory)</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class File.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/File.html#close">close</a></b>()
								</div>
								<div class="description">Close streams associated with file</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/File.html#exists">exists</a></b>()
								</div>
								<div class="description">Return true if file exists</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/File.html#getAbsolutePath">getAbsolutePath</a></b>(mode)
								</div>
								<div class="description">Return absolute path</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/File.html#getParentFile">getParentFile</a></b>()
								</div>
								<div class="description">Return the parent file of this file object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/File.html#list">list</a></b>()
								</div>
								<div class="description">Return list of files contained in the directory referenced by the File object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/File.html#readAllAsBinary">readAllAsBinary</a></b>()
								</div>
								<div class="description">Read complete file into ByteString object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/File.html#readAllAsString">readAllAsString</a></b>(encoding)
								</div>
								<div class="description">Read complete file into String object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/File.html#writeAll">writeAll</a></b>(obj, encoding)
								</div>
								<div class="description">Write the object to file</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>File</b>(name, location)
				</div>
				
				<div class="description">
					Create a reference to a file system object (file or directory)
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>name</b>
								
							</dt>
								<dd>relative or absolute file path</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>location</b>
								
							</dt>
								<dd>one of GPSystem.CWD, GPSystem.USR, GPSystem.SYS, GPSystem.AUTO to resolve relative names. Default GPSystem.CWD</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="close"> </a>
					<div class="fixedFont">
					
					
					<b>close</b>()
					
					</div>
					<div class="description">
						Close streams associated with file
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="exists"> </a>
					<div class="fixedFont">
					
					
					<b>exists</b>()
					
					</div>
					<div class="description">
						Return true if file exists
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="getAbsolutePath"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getAbsolutePath</b>(mode)
					
					</div>
					<div class="description">
						Return absolute path
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>mode</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the absolute path</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getParentFile"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/File.html">File</a>}</span>
					<b>getParentFile</b>()
					
					</div>
					<div class="description">
						Return the parent file of this file object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the parent file object or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="list"> </a>
					<div class="fixedFont">
					
					<span class="light">{String[]}</span>
					<b>list</b>()
					
					</div>
					<div class="description">
						Return list of files contained in the directory referenced by the File object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of file names</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="readAllAsBinary"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>readAllAsBinary</b>()
					
					</div>
					<div class="description">
						Read complete file into ByteString object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the binary content</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="readAllAsString"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>readAllAsString</b>(encoding)
					
					</div>
					<div class="description">
						Read complete file into String object
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>encoding</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the text content</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="writeAll"> </a>
					<div class="fixedFont">
					
					
					<b>writeAll</b>(obj, encoding)
					
					</div>
					<div class="description">
						Write the object to file
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>obj</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>encoding</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - FileEncryptor</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class FileEncryptor
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing file encryption
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/file_FileEncryptor.js.html">FileEncryptor.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class FileEncryptor.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/FileEncryptor.html#constructor">FileEncryptor</a></b>(sc, mode)
							</div>
							<div class="description">Craate a FileEncryptor instance.</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class FileEncryptor.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileEncryptor.html#decrypt">decrypt</a></b>(buffer)
								</div>
								<div class="description">Validate and decrypt the payload.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileEncryptor.html#deriveKey">deriveKey</a></b>(key, key)
								</div>
								<div class="description">Derive K.ENC and K.MAC based on the selected scheme.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileEncryptor.html#encrypt">encrypt</a></b>(plain)
								</div>
								<div class="description">Encrypt the buffer with K.ENC previously derived with deriveKey() and prepend header.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileEncryptor.html#generateEphemeralKeyPair">generateEphemeralKeyPair</a></b>(key)
								</div>
								<div class="description">Generate ephemeral EC key pair at the sending side in hybrid scheme.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileEncryptor.html#keyDerivationFunction1">keyDerivationFunction1</a></b>(key, size, context)
								</div>
								<div class="description">Derive a AES key from a AES master key using a CMAC based Key Derivation Function in
Counter Mode as per NIST SP 800-108.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileEncryptor.html#keyDerivationFunction2">keyDerivationFunction2</a></b>(id, sharedSecret)
								</div>
								<div class="description">Derive an AES key from the shared secret resulting from performing the ECDH using
a one-step-kdf with SHA-256 (Option 1) as defined in NIST SP 800-56C.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileEncryptor.html#parseHeader">parseHeader</a></b>(buffer)
								</div>
								<div class="description">Parse the header of the encrypted file.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">FileEncryptor.<b><a href="../symbols/FileEncryptor.html#.stripPadding">stripPadding</a></b>(buffer)
								</div>
								<div class="description">Validate and strip the ISO padding.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileEncryptor.html#validateHeader">validateHeader</a></b>()
								</div>
								<div class="description">Validate the Message Authentication Code (MAC) over the header.</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>FileEncryptor</b>(sc, mode)
				</div>
				
				<div class="description">
					Craate a FileEncryptor instance.
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/SmartCardHSM.html">SmartCardHSM</a>}</span>  <b>sc</b>
								
							</dt>
								<dd>the SmartCardHSM object used to access the token or undefined at the sender in the hybrid scheme.</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>mode</b>
								
							</dt>
								<dd>the mode to use (One of FileEncryptor.NATIVE, .DERIVED or .HYBRID). Must be specified at the sending side.</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="decrypt"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>decrypt</b>(buffer)
					
					</div>
					<div class="description">
						Validate and decrypt the payload.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>buffer</b>
									
								</dt>
								<dd>the encrypted payload.</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the plain content.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="deriveKey"> </a>
					<div class="fixedFont">
					
					
					<b>deriveKey</b>(key, key)
					
					</div>
					<div class="description">
						Derive K.ENC and K.MAC based on the selected scheme.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the AES key or private EC key.</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>key</b>
									
								</dt>
								<dd>the CVC with the public of the receiver.</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="encrypt"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>encrypt</b>(plain)
					
					</div>
					<div class="description">
						Encrypt the buffer with K.ENC previously derived with deriveKey() and prepend header.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>plain</b>
									
								</dt>
								<dd>the plain input. The caller should clear the buffer after use with plain.clear().</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the header concatenated with the encrypted payload.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateEphemeralKeyPair"> </a>
					<div class="fixedFont">
					
					
					<b>generateEphemeralKeyPair</b>(key)
					
					</div>
					<div class="description">
						Generate ephemeral EC key pair at the sending side in hybrid scheme.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the domain parameter.</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="keyDerivationFunction1"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>keyDerivationFunction1</b>(key, size, context)
					
					</div>
					<div class="description">
						Derive a AES key from a AES master key using a CMAC based Key Derivation Function in
Counter Mode as per NIST SP 800-108.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the AES master key.</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>size</b>
									
								</dt>
								<dd>the requested number of derived bytes.</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>context</b>
									
								</dt>
								<dd>the derivation context used to differ keys derived from the same master.</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the derived key value.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="keyDerivationFunction2"> </a>
					<div class="fixedFont">
					
					
					<b>keyDerivationFunction2</b>(id, sharedSecret)
					
					</div>
					<div class="description">
						Derive an AES key from the shared secret resulting from performing the ECDH using
a one-step-kdf with SHA-256 (Option 1) as defined in NIST SP 800-56C.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>id</b>
									
								</dt>
								<dd>the key identifier (0x01 for K.ENC, 0x02 for K.MAC).</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>sharedSecret</b>
									
								</dt>
								<dd>the shared secret resulting from ECDH.</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key value as 32 bytes.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="parseHeader"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>parseHeader</b>(buffer)
					
					</div>
					<div class="description">
						Parse the header of the encrypted file.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>buffer</b>
									
								</dt>
								<dd>the encrypted file with header.</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the offset at which the payload starts.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".stripPadding"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">FileEncryptor.</span><b>stripPadding</b>(buffer)
					
					</div>
					<div class="description">
						Validate and strip the ISO padding.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>buffer</b>
									
								</dt>
								<dd>the decrypted buffer.</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the buffer without padding.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="validateHeader"> </a>
					<div class="fixedFont">
					
					
					<b>validateHeader</b>()
					
					</div>
					<div class="description">
						Validate the Message Authentication Code (MAC) over the header.
						
						
					</div>
					
					
					
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Throws:</dt>
							
								<dt>
									 <b></b>
								</dt>
								<dd>GPError is MAC verification failed.</dd>
							
							</dl>
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - FileSelector</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class FileSelector
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a file selector used to store information about the currently selected
       file system object and to process the SELECT APDU
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_FileSelector.js.html">FileSelector.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class FileSelector.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/FileSelector.html#constructor">FileSelector</a></b>(mf)
							</div>
							<div class="description">Create a file selector object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class FileSelector.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#addAuthenticationState">addAuthenticationState</a></b>(global, ao)
								</div>
								<div class="description">Add authenticated object to the list of authentication states for the local DF or global MF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#enumerateObjects">enumerateObjects</a></b>(type)
								</div>
								<div class="description">Enumerate objects of a defined type</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#getCurrentEF">getCurrentEF</a></b>()
								</div>
								<div class="description">Returns the current EF, if any</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#getMeta">getMeta</a></b>(name)
								</div>
								<div class="description">Return meta data associated with the current DF or MF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#getObject">getObject</a></b>(type, id)
								</div>
								<div class="description">Return object of given type identified by id

<p>If bit b8 in the id is 1, then the search will start in the current DF.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#getSecurityEnvironment">getSecurityEnvironment</a></b>()
								</div>
								<div class="description">Return the current security environment</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#isAuthenticated">isAuthenticated</a></b>(global, ao)
								</div>
								<div class="description">Add authenticated object to the list of authentication states for the local DF or global MF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#processSelectAPDU">processSelectAPDU</a></b>(apdu)
								</div>
								<div class="description">Processes the SELECT APDU

<p>Supports in P1</p>
<ul>
 <li>'00' with empty data to select the MF</li>
 <li>'00' with "3F00" to select the MF</li>
 <li>'00' with fid to select an entry in the current DF</li>
 <li>'01' with fid to select a DF in the current DF</li>
 <li>'02' with fid to select an EF in the current DF</li>
 <li>'03' with empty data to select the parent</li>
</ul>
<p>Supports in P2</p>
<ul>
 <li>'00' with P1=='00' return no data</li>
 <li>'04' return FCP</li>
 <li>'0C' return no data</li>
</ul></div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#selectFID">selectFID</a></b>(fid, check, df)
								</div>
								<div class="description">Select a DF entry by FID</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#selectMF">selectMF</a></b>()
								</div>
								<div class="description">Select the MF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#selectSFI">selectSFI</a></b>(sfi)
								</div>
								<div class="description">Select a DF entry by SFI</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSelector.html#toString">toString</a></b>()
								</div>
								<div class="description">Return a human readable string for this object</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>FileSelector</b>(mf)
				</div>
				
				<div class="description">
					Create a file selector object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/DF.html">DF</a>}</span>  <b>mf</b>
								
							</dt>
								<dd>the master file</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="addAuthenticationState"> </a>
					<div class="fixedFont">
					
					
					<b>addAuthenticationState</b>(global, ao)
					
					</div>
					<div class="description">
						Add authenticated object to the list of authentication states for the local DF or global MF
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>global</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>ao</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="enumerateObjects"> </a>
					<div class="fixedFont">
					
					
					<b>enumerateObjects</b>(type)
					
					</div>
					<div class="description">
						Enumerate objects of a defined type
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>type</b>
									
								</dt>
								<dd>the type of the object</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of objects found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCurrentEF"> </a>
					<div class="fixedFont">
					
					<span class="light">{EF}</span>
					<b>getCurrentEF</b>()
					
					</div>
					<div class="description">
						Returns the current EF, if any
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the current EF or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getMeta"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>getMeta</b>(name)
					
					</div>
					<div class="description">
						Return meta data associated with the current DF or MF
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>name</b>
									
								</dt>
								<dd>the meta data name</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>The meta data</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getObject"> </a>
					<div class="fixedFont">
					
					
					<b>getObject</b>(type, id)
					
					</div>
					<div class="description">
						Return object of given type identified by id

<p>If bit b8 in the id is 1, then the search will start in the current DF. If the object
   is not found, the search is continued in the MF. If the bit is not set, then the search
   will only look into the MF.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>type</b>
									
								</dt>
								<dd>the type of the object</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>id</b>
									
								</dt>
								<dd>the id, bit b8 indicating local DF or global MF search</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the object of the requested type or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSecurityEnvironment"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>getSecurityEnvironment</b>()
					
					</div>
					<div class="description">
						Return the current security environment
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>Object with properties VEXK, CDIK, SMRES and SMCOM containing SecurityEnvironment objects</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isAuthenticated"> </a>
					<div class="fixedFont">
					
					
					<b>isAuthenticated</b>(global, ao)
					
					</div>
					<div class="description">
						Add authenticated object to the list of authentication states for the local DF or global MF
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>global</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>ao</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="processSelectAPDU"> </a>
					<div class="fixedFont">
					
					
					<b>processSelectAPDU</b>(apdu)
					
					</div>
					<div class="description">
						Processes the SELECT APDU

<p>Supports in P1</p>
<ul>
 <li>'00' with empty data to select the MF</li>
 <li>'00' with "3F00" to select the MF</li>
 <li>'00' with fid to select an entry in the current DF</li>
 <li>'01' with fid to select a DF in the current DF</li>
 <li>'02' with fid to select an EF in the current DF</li>
 <li>'03' with empty data to select the parent</li>
</ul>
<p>Supports in P2</p>
<ul>
 <li>'00' with P1=='00' return no data</li>
 <li>'04' return FCP</li>
 <li>'0C' return no data</li>
</ul>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the select APDU</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="selectFID"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/FSNode.html">FSNode</a>}</span>
					<b>selectFID</b>(fid, check, df)
					
					</div>
					<div class="description">
						Select a DF entry by FID
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the file identifier</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>check</b>
									
								</dt>
								<dd>if file matches expected type EF or DF</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>df</b>
									
								</dt>
								<dd>true if the check must check for a DF type, else a EF type</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the selected file system node</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="selectMF"> </a>
					<div class="fixedFont">
					
					
					<b>selectMF</b>()
					
					</div>
					<div class="description">
						Select the MF
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="selectSFI"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/FSNode.html">FSNode</a>}</span>
					<b>selectSFI</b>(sfi)
					
					</div>
					<div class="description">
						Select a DF entry by SFI
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>sfi</b>
									
								</dt>
								<dd>the short file identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the selected file system node</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					
					<b>toString</b>()
					
					</div>
					<div class="description">
						Return a human readable string for this object
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - FileSystemIdObject</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class FileSystemIdObject
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Abstract class for file system objects identified by an identifier
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_FileSystemIdObject.js.html">FileSystemIdObject.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class FileSystemIdObject.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/FileSystemIdObject.html#constructor">FileSystemIdObject</a></b>(name, id)
							</div>
							<div class="description">Create a file system object identifiable by an id</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class FileSystemIdObject.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSystemIdObject.html#getId">getId</a></b>()
								</div>
								<div class="description">Return id of object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSystemIdObject.html#getType">getType</a></b>()
								</div>
								<div class="description">Return type of object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/FileSystemIdObject.html#toString">toString</a></b>()
								</div>
								<div class="description">Return human readable string</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>FileSystemIdObject</b>(name, id)
				</div>
				
				<div class="description">
					Create a file system object identifiable by an id
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>name</b>
								
							</dt>
								<dd>the human readable name of the object</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>id</b>
								
							</dt>
								<dd>the id</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="getId"> </a>
					<div class="fixedFont">
					
					
					<b>getId</b>()
					
					</div>
					<div class="description">
						Return id of object
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="getType"> </a>
					<div class="fixedFont">
					
					<span class="light">{string}</span>
					<b>getType</b>()
					
					</div>
					<div class="description">
						Return type of object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>type of object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					
					<b>toString</b>()
					
					</div>
					<div class="description">
						Return human readable string
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - GPSCP03</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class GPSCP03
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/gp_GPSCP03.js.html">GPSCP03.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class GPSCP03.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/GPSCP03.html#constructor">GPSCP03</a></b>(crypto, kenc, kmac, kdek, aid)
							</div>
							<div class="description">Class implementing support for Global Platform SCP03 secure messaging protocol</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class GPSCP03.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#calculateHostCryptogram">calculateHostCryptogram</a></b>()
								</div>
								<div class="description">Calculate host cryptogram using the key derive method</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#deriveKey">deriveKey</a></b>(key, ddc, size, context)
								</div>
								<div class="description">Derive a session key or cryptogram</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#deriveSessionKeys">deriveSessionKeys</a></b>()
								</div>
								<div class="description">Derive S-ENC, S-MAC and S-RMAC session keys</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#determineCardChallenge">determineCardChallenge</a></b>()
								</div>
								<div class="description">Determine random or pseudo-random card challenge</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#externalAuthenticate">externalAuthenticate</a></b>(card, level, hostCryptogram)
								</div>
								<div class="description">Issue EXTERNAL AUTHENTICATE command to card.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#handleInitializeUpdate">handleInitializeUpdate</a></b>(hostCryptogram)
								</div>
								<div class="description">Handle processing of INITIALIZE UPDATE command</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#handlePutKey">handlePutKey</a></b>(cdata)
								</div>
								<div class="description">Handle processing of PUT KEY command</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#initializeUpdate">initializeUpdate</a></b>(card, keyVersion, keyId)
								</div>
								<div class="description">Issue INITIALIZE UPDATE command to card and parse response</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">GPSCP03.<b><a href="../symbols/GPSCP03.html#.parseKeyDataField">parseKeyDataField</a></b>(keyDataField)
								</div>
								<div class="description">Extract a key data field from C-Data in a PUT KEY APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#prepareKeyBlock">prepareKeyBlock</a></b>(dek, key)
								</div>
								<div class="description">Encrypt key and prepare key block for PUT KEY command</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#reset">reset</a></b>()
								</div>
								<div class="description">Reset the internal state</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#setKeyInfo">setKeyInfo</a></b>(version, parami)
								</div>
								<div class="description">Set the key version and protocol parameter</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#setSequenceCounter">setSequenceCounter</a></b>(cnt)
								</div>
								<div class="description">Set the sequence number for pseudo-random card challenges</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">GPSCP03.<b><a href="../symbols/GPSCP03.html#.stripPadding">stripPadding</a></b>(the)
								</div>
								<div class="description">Strip the ISO padding from dechipered cryptogram</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#unwrap">unwrap</a></b>(apduToUnwrap, usageQualifier)
								</div>
								<div class="description">Called by the secure messaging wrapper to unwrap the response APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#unwrapCommandAPDU">unwrapCommandAPDU</a></b>(apdu)
								</div>
								<div class="description">Counterpart to wrap and meant to be used in a simulator</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#validateKeyBlock">validateKeyBlock</a></b>(keyblob)
								</div>
								<div class="description">Decrypt and validate key blob containing AES key wrapped with DEK</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#verifyCardCryptogram">verifyCardCryptogram</a></b>()
								</div>
								<div class="description">Verify card cryptogram</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#wrap">wrap</a></b>(apduToWrap, usageQualifier)
								</div>
								<div class="description">Called by the secure messaging wrapper to wrap the command APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/GPSCP03.html#wrapResponseAPDU">wrapResponseAPDU</a></b>(apdu)
								</div>
								<div class="description">Counterpart to unwrap and meant to be used in a simulator</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>GPSCP03</b>(crypto, kenc, kmac, kdek, aid)
				</div>
				
				<div class="description">
					Class implementing support for Global Platform SCP03 secure messaging protocol
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider</dd>
						
							<dt>
								<span class="light fixedFont">{Key}</span>  <b>kenc</b>
								
							</dt>
								<dd>the static secure channel encryption key</dd>
						
							<dt>
								<span class="light fixedFont">{Key}</span>  <b>kmac</b>
								
							</dt>
								<dd>the static secure channel message authentication code key</dd>
						
							<dt>
								<span class="light fixedFont">{Key}</span>  <b>kdek</b>
								
							</dt>
								<dd>the static data encryption key</dd>
						
							<dt>
								<span class="light fixedFont">{ByteString}</span>  <b>aid</b>
								
							</dt>
								<dd>the AID to use for challenge calculation</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="calculateHostCryptogram"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>calculateHostCryptogram</b>()
					
					</div>
					<div class="description">
						Calculate host cryptogram using the key derive method
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the 8 byte cryptogram</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="deriveKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>deriveKey</b>(key, ddc, size, context)
					
					</div>
					<div class="description">
						Derive a session key or cryptogram
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the master key</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>ddc</b>
									
								</dt>
								<dd>the data derivation constant</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>size</b>
									
								</dt>
								<dd>the size of byte of the resulting key or cryptogram</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>context</b>
									
								</dt>
								<dd>the context (usually hostChallenge || cardChallenge)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the derived value</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="deriveSessionKeys"> </a>
					<div class="fixedFont">
					
					
					<b>deriveSessionKeys</b>()
					
					</div>
					<div class="description">
						Derive S-ENC, S-MAC and S-RMAC session keys
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="determineCardChallenge"> </a>
					<div class="fixedFont">
					
					
					<b>determineCardChallenge</b>()
					
					</div>
					<div class="description">
						Determine random or pseudo-random card challenge
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="externalAuthenticate"> </a>
					<div class="fixedFont">
					
					
					<b>externalAuthenticate</b>(card, level, hostCryptogram)
					
					</div>
					<div class="description">
						Issue EXTERNAL AUTHENTICATE command to card.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Card}</span> <b>card</b>
									
								</dt>
								<dd>the card to use</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>level</b>
									
								</dt>
								<dd>the security level (a combination of bits B5 (R-ENC), B4 (R-MAC), B2 (C-ENC) and B1 (C-MAC))</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>hostCryptogram</b>
									
								</dt>
								<dd>optional parameter, calculated internally if missing</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="handleInitializeUpdate"> </a>
					<div class="fixedFont">
					
					
					<b>handleInitializeUpdate</b>(hostCryptogram)
					
					</div>
					<div class="description">
						Handle processing of INITIALIZE UPDATE command
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>hostCryptogram</b>
									
								</dt>
								<dd>the cryptogram calculated at the host</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="handlePutKey"> </a>
					<div class="fixedFont">
					
					
					<b>handlePutKey</b>(cdata)
					
					</div>
					<div class="description">
						Handle processing of PUT KEY command
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>cdata</b>
									
								</dt>
								<dd>the C-Data field of the APDU</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="initializeUpdate"> </a>
					<div class="fixedFont">
					
					
					<b>initializeUpdate</b>(card, keyVersion, keyId)
					
					</div>
					<div class="description">
						Issue INITIALIZE UPDATE command to card and parse response
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Card}</span> <b>card</b>
									
								</dt>
								<dd>the card to use</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyVersion</b>
									
								</dt>
								<dd>the version of the key to use (0 for default)</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyId</b>
									
								</dt>
								<dd>the key id to use (usually 0)</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name=".parseKeyDataField"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">GPSCP03.</span><b>parseKeyDataField</b>(keyDataField)
					
					</div>
					<div class="description">
						Extract a key data field from C-Data in a PUT KEY APDU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyDataField</b>
									
								</dt>
								<dd>the list of key data fields</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the extracted key data</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="prepareKeyBlock"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>prepareKeyBlock</b>(dek, key)
					
					</div>
					<div class="description">
						Encrypt key and prepare key block for PUT KEY command
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>dek</b>
									
								</dt>
								<dd>the data encryption key</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the key to wrap</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key type, length, cryptogram and key check value</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="reset"> </a>
					<div class="fixedFont">
					
					
					<b>reset</b>()
					
					</div>
					<div class="description">
						Reset the internal state
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="setKeyInfo"> </a>
					<div class="fixedFont">
					
					
					<b>setKeyInfo</b>(version, parami)
					
					</div>
					<div class="description">
						Set the key version and protocol parameter
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>version</b>
									
								</dt>
								<dd>the key version indicated in INITIALIZE_UPDATE</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>parami</b>
									
								</dt>
								<dd>the i parameter for the SCP03 protocol (Default '00')</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSequenceCounter"> </a>
					<div class="fixedFont">
					
					
					<b>setSequenceCounter</b>(cnt)
					
					</div>
					<div class="description">
						Set the sequence number for pseudo-random card challenges
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>cnt</b>
									
								</dt>
								<dd>the last used counter value</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name=".stripPadding"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">GPSCP03.</span><b>stripPadding</b>(the)
					
					</div>
					<div class="description">
						Strip the ISO padding from dechipered cryptogram
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>plain text with padding</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the plain text without padding</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="unwrap"> </a>
					<div class="fixedFont">
					
					
					<b>unwrap</b>(apduToUnwrap, usageQualifier)
					
					</div>
					<div class="description">
						Called by the secure messaging wrapper to unwrap the response APDU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>apduToUnwrap</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>usageQualifier</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="unwrapCommandAPDU"> </a>
					<div class="fixedFont">
					
					
					<b>unwrapCommandAPDU</b>(apdu)
					
					</div>
					<div class="description">
						Counterpart to wrap and meant to be used in a simulator
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>apdu</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="validateKeyBlock"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>validateKeyBlock</b>(keyblob)
					
					</div>
					<div class="description">
						Decrypt and validate key blob containing AES key wrapped with DEK
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyblob</b>
									
								</dt>
								<dd>the wrapped key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the unwrapped key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="verifyCardCryptogram"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>verifyCardCryptogram</b>()
					
					</div>
					<div class="description">
						Verify card cryptogram
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if cryptogram is valid</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="wrap"> </a>
					<div class="fixedFont">
					
					
					<b>wrap</b>(apduToWrap, usageQualifier)
					
					</div>
					<div class="description">
						Called by the secure messaging wrapper to wrap the command APDU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>apduToWrap</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>usageQualifier</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="wrapResponseAPDU"> </a>
					<div class="fixedFont">
					
					
					<b>wrapResponseAPDU</b>(apdu)
					
					</div>
					<div class="description">
						Counterpart to unwrap and meant to be used in a simulator
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>apdu</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - HSMCVCertificateStore</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class HSMCVCertificateStore
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				CV certificate store with SmartCard-HSM as secure key store
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_HSMCVCertificateStore.js.html">HSMCVCertificateStore.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class HSMCVCertificateStore.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/HSMCVCertificateStore.html#constructor">HSMCVCertificateStore</a></b>(daof, sc)
							</div>
							<div class="description">Create a CV certificate store using a SmartCard-HSM as secure key store</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class HSMCVCertificateStore.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMCVCertificateStore.html#deletePrivateKey">deletePrivateKey</a></b>(path, chr)
								</div>
								<div class="description">Get a private key in the certificate store.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMCVCertificateStore.html#generateRequest">generateRequest</a></b>(path, car, forceInitial, signinitial, keyspec, algo, countryseq)
								</div>
								<div class="description">Generate a certificate request using a private key in the SmartCard-HSM</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMCVCertificateStore.html#getCrypto">getCrypto</a></b>()
								</div>
								<div class="description">Get crypto object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMCVCertificateStore.html#getPrivateKey">getPrivateKey</a></b>(path, chr)
								</div>
								<div class="description">Get a private key in the certificate store.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">HSMCVCertificateStore.<b><a href="../symbols/HSMCVCertificateStore.html#.path2label">path2label</a></b>(path, chr)
								</div>
								<div class="description">Transform path and certificate holder into a label</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>HSMCVCertificateStore</b>(daof, sc)
				</div>
				
				<div class="description">
					Create a CV certificate store using a SmartCard-HSM as secure key store
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{DAOFactory}</span>  <b>daof</b>
								
							</dt>
								<dd>the factory that can create data access objects for persistent information</dd>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/SmartCardHSM.html">SmartCardHSM</a>}</span>  <b>sc</b>
								
							</dt>
								<dd>the SmartCard-HSM access object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="deletePrivateKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>deletePrivateKey</b>(path, chr)
					
					</div>
					<div class="description">
						Get a private key in the certificate store. Overrides method in CVCertificateStore.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the private key or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>generateRequest</b>(path, car, forceInitial, signinitial, keyspec, algo, countryseq)
					
					</div>
					<div class="description">
						Generate a certificate request using a private key in the SmartCard-HSM
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>car</b>
									
								</dt>
								<dd>the CA at which this request is addressed</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>forceInitial</b>
									
								</dt>
								<dd>force an initial request, even if a current certificate is available</dd>
							
								<dt>
									<span class="light fixedFont">{boolean}</span> <b>signinitial</b>
									
								</dt>
								<dd>sign with initial key (sequence = 00000)</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>keyspec</b>
									
								</dt>
								<dd>a key object containing key parameters (e.g. EC Curve)</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>algo</b>
									
								</dt>
								<dd>the terminal authentication algorithm object identifier</dd>
							
								<dt>
									<b>countryseq</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCrypto"> </a>
					<div class="fixedFont">
					
					<span class="light">{HSMCrypto}</span>
					<b>getCrypto</b>()
					
					</div>
					<div class="description">
						Get crypto object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the HSMCrypto object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPrivateKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getPrivateKey</b>(path, chr)
					
					</div>
					<div class="description">
						Get a private key in the certificate store. Overrides method in CVCertificateStore.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the private key or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".path2label"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">HSMCVCertificateStore.</span><b>path2label</b>(path, chr)
					
					</div>
					<div class="description">
						Transform path and certificate holder into a label
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the path</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the certificate holder reference</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key label</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - HSMKeyStore</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class HSMKeyStore
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing some simple access functions to generate key pairs and store certificates
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_HSMKeyStore.js.html">HSMKeyStore.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class HSMKeyStore.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/HSMKeyStore.html#constructor">HSMKeyStore</a></b>(sc)
							</div>
							<div class="description">Create a simple key store front-end</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class HSMKeyStore.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#deleteCACertificate">deleteCACertificate</a></b>(label)
								</div>
								<div class="description">Delete CA certificate with given label</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#deleteKey">deleteKey</a></b>(labelOrIdOrKey)
								</div>
								<div class="description">Delete key and certificate with given label</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#enumerateKeys">enumerateKeys</a></b>()
								</div>
								<div class="description">Return list of keys</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#exportKey">exportKey</a></b>(labelOrIdOrKey)
								</div>
								<div class="description">Export a key blob, meta data and certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#generateECCKeyPair">generateECCKeyPair</a></b>(label, curve)
								</div>
								<div class="description">Generate an ECDSA key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#generateKey">generateKey</a></b>(label, initialized)
								</div>
								<div class="description">Generate a symmetric key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#generateKeyPair">generateKeyPair</a></b>(label, initialized)
								</div>
								<div class="description">Generate a key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#generateRSAKeyPair">generateRSAKeyPair</a></b>(label, keysize)
								</div>
								<div class="description">Generate a RSA key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#getCertificate">getCertificate</a></b>(labelOrIdOrKey)
								</div>
								<div class="description">Get raw certificate for given label</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#getEndEntityCertificate">getEndEntityCertificate</a></b>(labelOrIdOrKey)
								</div>
								<div class="description">Get certificate for given label</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#getKey">getKey</a></b>(the)
								</div>
								<div class="description">Get key for given label</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#hasCertificate">hasCertificate</a></b>(labelOrIdOrKey)
								</div>
								<div class="description">Check if key has a certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#hasKey">hasKey</a></b>(the)
								</div>
								<div class="description">Check if key with label exists</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#importAESKey">importAESKey</a></b>(label, keyblob, keysize, keyid)
								</div>
								<div class="description">Import an AES key blob</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#importECCKey">importECCKey</a></b>(label, keyblob, keysize, keyid)
								</div>
								<div class="description">Import an ECC key blob</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#importKey">importKey</a></b>(keywrap)
								</div>
								<div class="description">Import a key blob, meta data and certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#importRSAKey">importRSAKey</a></b>(label, keyblob, keysize, keyid)
								</div>
								<div class="description">Import a RSA key blob</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#storeCACertificate">storeCACertificate</a></b>(label, cert)
								</div>
								<div class="description">Store CA certificate under given label</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/HSMKeyStore.html#storeEndEntityCertificate">storeEndEntityCertificate</a></b>(labelOrIdOrKey, cert)
								</div>
								<div class="description">Store certificate under given label</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>HSMKeyStore</b>(sc)
				</div>
				
				<div class="description">
					Create a simple key store front-end
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/SmartCardHSM.html">SmartCardHSM</a>}</span>  <b>sc</b>
								
							</dt>
								<dd>the SmartCard-HSM card service</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="deleteCACertificate"> </a>
					<div class="fixedFont">
					
					
					<b>deleteCACertificate</b>(label)
					
					</div>
					<div class="description">
						Delete CA certificate with given label
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the label of certificate to be removed</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="deleteKey"> </a>
					<div class="fixedFont">
					
					
					<b>deleteKey</b>(labelOrIdOrKey)
					
					</div>
					<div class="description">
						Delete key and certificate with given label
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number/Key}</span> <b>labelOrIdOrKey</b>
									
								</dt>
								<dd>the label, id or object of the key to be removed</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="enumerateKeys"> </a>
					<div class="fixedFont">
					
					<span class="light">{String[]}</span>
					<b>enumerateKeys</b>()
					
					</div>
					<div class="description">
						Return list of keys
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of key names</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="exportKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>exportKey</b>(labelOrIdOrKey)
					
					</div>
					<div class="description">
						Export a key blob, meta data and certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number/Key}</span> <b>labelOrIdOrKey</b>
									
								</dt>
								<dd>the label, id or object of the key to be removed</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the blob with key, meta data and certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateECCKeyPair"> </a>
					<div class="fixedFont">
					
					
					<b>generateECCKeyPair</b>(label, curve)
					
					</div>
					<div class="description">
						Generate an ECDSA key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the label under which the key pair shall be stored</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>curve</b>
									
								</dt>
								<dd>the curve object identifier</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="generateKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>generateKey</b>(label, initialized)
					
					</div>
					<div class="description">
						Generate a symmetric key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the label under which the key shall be stored</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a>}</span> <b>initialized</b>
									
								</dt>
								<dd>key spec generator</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the new key wrapped with the symmetric key defined with SmartCardHSMKeySpecGenerator.setWrappingKey()</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateKeyPair"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>generateKeyPair</b>(label, initialized)
					
					</div>
					<div class="description">
						Generate a key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the label under which the key pair shall be stored</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a>}</span> <b>initialized</b>
									
								</dt>
								<dd>key spec generator</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the authenticated request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateRSAKeyPair"> </a>
					<div class="fixedFont">
					
					
					<b>generateRSAKeyPair</b>(label, keysize)
					
					</div>
					<div class="description">
						Generate a RSA key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the label under which the key pair shall be stored</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keysize</b>
									
								</dt>
								<dd>the key size in bits (1024, 1536 or 2048)</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="getCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getCertificate</b>(labelOrIdOrKey)
					
					</div>
					<div class="description">
						Get raw certificate for given label
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number/Key}</span> <b>labelOrIdOrKey</b>
									
								</dt>
								<dd>the certificate label, id or key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getEndEntityCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{X509}</span>
					<b>getEndEntityCertificate</b>(labelOrIdOrKey)
					
					</div>
					<div class="description">
						Get certificate for given label
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number/Key}</span> <b>labelOrIdOrKey</b>
									
								</dt>
								<dd>the certificate label, id or key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getKey</b>(the)
					
					</div>
					<div class="description">
						Get key for given label
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String / Number}</span> <b>the</b>
									
								</dt>
								<dd>key label or id</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>hasCertificate</b>(labelOrIdOrKey)
					
					</div>
					<div class="description">
						Check if key has a certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number/Key}</span> <b>labelOrIdOrKey</b>
									
								</dt>
								<dd>the certificate label, id or key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true of a certificate is present</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>hasKey</b>(the)
					
					</div>
					<div class="description">
						Check if key with label exists
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String / Number}</span> <b>the</b>
									
								</dt>
								<dd>key label or id</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if key exists</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="importAESKey"> </a>
					<div class="fixedFont">
					
					
					<b>importAESKey</b>(label, keyblob, keysize, keyid)
					
					</div>
					<div class="description">
						Import an AES key blob
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the key label</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyblob</b>
									
								</dt>
								<dd>the binary key in SmartCard-HSM format</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keysize</b>
									
								</dt>
								<dd>in bits</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyid</b>
									
								</dt>
								<dd>the PKCS#15 key id (CKA_ID)</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="importECCKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a>}</span>
					<b>importECCKey</b>(label, keyblob, keysize, keyid)
					
					</div>
					<div class="description">
						Import an ECC key blob
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the key label</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyblob</b>
									
								</dt>
								<dd>the binary key in SmartCard-HSM format</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keysize</b>
									
								</dt>
								<dd>in bits</dd>
							
								<dt>
									<span class="light fixedFont">{Number/ByteString}</span> <b>keyid</b>
									
								</dt>
								<dd>the optional PKCS#15 key identifier.
Default value is the next free key id of the SmartCard-HSM.</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="importKey"> </a>
					<div class="fixedFont">
					
					
					<b>importKey</b>(keywrap)
					
					</div>
					<div class="description">
						Import a key blob, meta data and certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keywrap</b>
									
								</dt>
								<dd>the binary key in SmartCard-HSM format</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="importRSAKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a>}</span>
					<b>importRSAKey</b>(label, keyblob, keysize, keyid)
					
					</div>
					<div class="description">
						Import a RSA key blob
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the key label</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyblob</b>
									
								</dt>
								<dd>the binary key in SmartCard-HSM format</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keysize</b>
									
								</dt>
								<dd>in bits</dd>
							
								<dt>
									<span class="light fixedFont">{Number/ByteString}</span> <b>keyid</b>
									
								</dt>
								<dd>the optional PKCS#15 key identifier.
Default value is the next free key id of the SmartCard-HSM.</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="storeCACertificate"> </a>
					<div class="fixedFont">
					
					
					<b>storeCACertificate</b>(label, cert)
					
					</div>
					<div class="description">
						Store CA certificate under given label
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the label under which the certificate shall be stored</dd>
							
								<dt>
									<span class="light fixedFont">{X509}</span> <b>cert</b>
									
								</dt>
								<dd>the certificate</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="storeEndEntityCertificate"> </a>
					<div class="fixedFont">
					
					
					<b>storeEndEntityCertificate</b>(labelOrIdOrKey, cert)
					
					</div>
					<div class="description">
						Store certificate under given label
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number/Key}</span> <b>labelOrIdOrKey</b>
									
								</dt>
								<dd>the label, id or object of the key for which the certificate should be stored</dd>
							
								<dt>
									<span class="light fixedFont">{X509}</span> <b>cert</b>
									
								</dt>
								<dd>the certificate</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - LinearEF</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class LinearEF
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing linear EFs
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_LinearEF.js.html">LinearEF.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class LinearEF.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/LinearEF.html#constructor">LinearEF</a></b>(the, records)
							</div>
							<div class="description">Creates a LinearEF</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class LinearEF.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/LinearEF.html#readRecord">readRecord</a></b>(apdu, recno, qualifier, length)
								</div>
								<div class="description">Reads a record from a linear EF</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>LinearEF</b>(the, records)
				</div>
				
				<div class="description">
					Creates a LinearEF
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/FCP.html">FCP</a>}</span>  <b>the</b>
								
							</dt>
								<dd>file control parameter</dd>
						
							<dt>
								<span class="light fixedFont">{ByteString[]}</span>  <b>records</b>
								
							</dt>
								<dd>the array of records</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="readRecord"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>readRecord</b>(apdu, recno, qualifier, length)
					
					</div>
					<div class="description">
						Reads a record from a linear EF
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the APDU used for reading</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>recno</b>
									
								</dt>
								<dd>the record number</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>qualifier</b>
									
								</dt>
								<dd>the qualifier as encoded in bit b3 - b1 of P1</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>length</b>
									
								</dt>
								<dd>the length in bytes or 0 for all in short APDU or 65536 for all in extended APDUs</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the data read</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - ManagePKA</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class ManagePKA
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class providing support for public key authentication
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_ManagePKA.js.html">ManagePKA.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class ManagePKA.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/ManagePKA.html#constructor">ManagePKA</a></b>(sc, deviceId)
							</div>
							<div class="description">Manage Public Key Authentication</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class ManagePKA.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#canEnumeratePublicKeys">canEnumeratePublicKeys</a></b>()
								</div>
								<div class="description">Check if registered public keys can be enumerated</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#checkKeyStatus">checkKeyStatus</a></b>(chr)
								</div>
								<div class="description">Check status of public key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#describeStatus">describeStatus</a></b>()
								</div>
								<div class="description">Describe current status in human readable form</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#enumeratePublicKeys">enumeratePublicKeys</a></b>()
								</div>
								<div class="description">Enumerate names (CHR) or registered public keys</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#getAuthenticatedPublicKeys">getAuthenticatedPublicKeys</a></b>()
								</div>
								<div class="description">Get number of keys already authenticated in this session</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#getMissingPublicKeys">getMissingPublicKeys</a></b>()
								</div>
								<div class="description">Get number of public keys missing for complete setup</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#getNumberOfPublicKeys">getNumberOfPublicKeys</a></b>()
								</div>
								<div class="description">Get number of public keys (m)</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#getRequiredPublicKeysForAuthentication">getRequiredPublicKeysForAuthentication</a></b>()
								</div>
								<div class="description">Get number of keys required for successfull authentication (n)</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#isActive">isActive</a></b>()
								</div>
								<div class="description">Check if public key authentication is active for device</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#performAuthentication">performAuthentication</a></b>(srcsc, key)
								</div>
								<div class="description">Perform authentication with source SmartCard-HSM and key on that device</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/ManagePKA.html#registerPublicKey">registerPublicKey</a></b>(pk, devcert, dicacert, replace)
								</div>
								<div class="description">Validate and register public key</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>ManagePKA</b>(sc, deviceId)
				</div>
				
				<div class="description">
					Manage Public Key Authentication
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/SmartCardHSM.html">SmartCardHSM</a>}</span>  <b>sc</b>
								
							</dt>
								<dd>the SmartCard-HSM used as target for PKA</dd>
						
							<dt>
								<span class="light fixedFont">{ByteString}</span>  <b>deviceId</b>
								
							</dt>
								<dd>the device id as returned by getCHR().getBytes() for the device certificate</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="canEnumeratePublicKeys"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>canEnumeratePublicKeys</b>()
					
					</div>
					<div class="description">
						Check if registered public keys can be enumerated
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if enumeration is supported</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="checkKeyStatus"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>checkKeyStatus</b>(chr)
					
					</div>
					<div class="description">
						Check status of public key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference under which the public key is registered</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>ManagePKA.KEY_PRESENT if key is registered in SmartCard-HSM, ManagePKA.KEY_NOT_FOUND if not.
        ManagePKA.KEY_ALREADY_AUTHENTICATED is returned if the public key has already been authenticated</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="describeStatus"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>describeStatus</b>()
					
					</div>
					<div class="description">
						Describe current status in human readable form
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the status</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="enumeratePublicKeys"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>enumeratePublicKeys</b>()
					
					</div>
					<div class="description">
						Enumerate names (CHR) or registered public keys
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>Object with property chr containing the PublicKeyReference and with property
        status containing ManagePKA.KEY_PRESENT if a key is registered at that slot,
        ManagePKA.KEY_NOT_FOUND if not. ManagePKA.KEY_ALREADY_AUTHENTICATED is returned
        if the public key has already been authenticated.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getAuthenticatedPublicKeys"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getAuthenticatedPublicKeys</b>()
					
					</div>
					<div class="description">
						Get number of keys already authenticated in this session
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the number of keys already authenticated in this session</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getMissingPublicKeys"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getMissingPublicKeys</b>()
					
					</div>
					<div class="description">
						Get number of public keys missing for complete setup
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the number of public keys missing for complete setup</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getNumberOfPublicKeys"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getNumberOfPublicKeys</b>()
					
					</div>
					<div class="description">
						Get number of public keys (m)
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the number of public keys (m)</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRequiredPublicKeysForAuthentication"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getRequiredPublicKeysForAuthentication</b>()
					
					</div>
					<div class="description">
						Get number of keys required for successfull authentication (n)
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the number of keys required for successfull authentication (n)</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isActive"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isActive</b>()
					
					</div>
					<div class="description">
						Check if public key authentication is active for device
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if supported and active</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="performAuthentication"> </a>
					<div class="fixedFont">
					
					
					<b>performAuthentication</b>(srcsc, key)
					
					</div>
					<div class="description">
						Perform authentication with source SmartCard-HSM and key on that device
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/SmartCardHSM.html">SmartCardHSM</a>}</span> <b>srcsc</b>
									
								</dt>
								<dd>the SmartCard-HSM containing the private key for authentication</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the private key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="registerPublicKey"> </a>
					<div class="fixedFont">
					
					
					<b>registerPublicKey</b>(pk, devcert, dicacert, replace)
					
					</div>
					<div class="description">
						Validate and register public key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>pk</b>
									
								</dt>
								<dd>public key in CSR format from card</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>devcert</b>
									
								</dt>
								<dd>device certificate</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>dicacert</b>
									
								</dt>
								<dd>device issuer certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>replace</b>
									
								</dt>
								<dd>the id of the key to be replaced (0-based) or undefined</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - P11CVCertificateStore</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class P11CVCertificateStore
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				CV certificate store with PKCS#11 as secure key store
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_P11CVCertificateStore.js.html">P11CVCertificateStore.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class P11CVCertificateStore.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/P11CVCertificateStore.html#constructor">P11CVCertificateStore</a></b>(daof, p11session)
							</div>
							<div class="description">Create a CV certificate store using a PKCS#11 device as secure key store</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class P11CVCertificateStore.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">P11CVCertificateStore.<b><a href="../symbols/P11CVCertificateStore.html#.determineCurve">determineCurve</a></b>(key)
								</div>
								<div class="description">Determine curve from key parameter</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/P11CVCertificateStore.html#generateKeyPair">generateKeyPair</a></b>(path, chr, algo, prk, puk)
								</div>
								<div class="description">Generate key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/P11CVCertificateStore.html#getCrypto">getCrypto</a></b>()
								</div>
								<div class="description">Get crypto object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/P11CVCertificateStore.html#getPrivateKey">getPrivateKey</a></b>(path, chr)
								</div>
								<div class="description">Get a private key in the certificate store.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">P11CVCertificateStore.<b><a href="../symbols/P11CVCertificateStore.html#.path2label">path2label</a></b>(path, chr)
								</div>
								<div class="description">Transform path and certificate holder into a label</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>P11CVCertificateStore</b>(daof, p11session)
				</div>
				
				<div class="description">
					Create a CV certificate store using a PKCS#11 device as secure key store
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{DAOFactory}</span>  <b>daof</b>
								
							</dt>
								<dd>the factory that can create data access objects for persistent information</dd>
						
							<dt>
								<span class="light fixedFont">{PKCS11Session}</span>  <b>p11session</b>
								
							</dt>
								<dd>logged in PKCS#11 session with device</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name=".determineCurve"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">P11CVCertificateStore.</span><b>determineCurve</b>(key)
					
					</div>
					<div class="description">
						Determine curve from key parameter
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the curve OID</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateKeyPair"> </a>
					<div class="fixedFont">
					
					
					<b>generateKeyPair</b>(path, chr, algo, prk, puk)
					
					</div>
					<div class="description">
						Generate key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this key pair</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>algo</b>
									
								</dt>
								<dd>the key generation algorithm (Crypto.EC or Crypto.RSA)</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>prk</b>
									
								</dt>
								<dd>the private key template</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>puk</b>
									
								</dt>
								<dd>the public key template</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="getCrypto"> </a>
					<div class="fixedFont">
					
					<span class="light">{HSMCrypto}</span>
					<b>getCrypto</b>()
					
					</div>
					<div class="description">
						Get crypto object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the HSMCrypto object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPrivateKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getPrivateKey</b>(path, chr)
					
					</div>
					<div class="description">
						Get a private key in the certificate store. Overrides method in CVCertificateStore.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the public key reference for this key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the private key or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".path2label"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">P11CVCertificateStore.</span><b>path2label</b>(path, chr)
					
					</div>
					<div class="description">
						Transform path and certificate holder into a label
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the path</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the certificate holder reference</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key label</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - PACE</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class PACE
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				This class implements the PACE protocol
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_PACE.js.html">PACE.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class PACE.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/PACE.html#constructor">PACE</a></b>(crypto, algo, domainparam, version)
							</div>
							<div class="description">Create a PACE protocol object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class PACE.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#calculateAuthenticationToken">calculateAuthenticationToken</a></b>()
								</div>
								<div class="description">Calculate the authentication token over the public key received from
the other side</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#decryptNonce">decryptNonce</a></b>(nonce)
								</div>
								<div class="description">Decrypt and store nonce using PACE key.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#deriveKey">deriveKey</a></b>(input, counter, the)
								</div>
								<div class="description">Derive key from input parameter, counter and optional nonce</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">PACE.<b><a href="../symbols/PACE.html#.encodePublicKey">encodePublicKey</a></b>(oid, key, withDP)
								</div>
								<div class="description">Encode an ECC public key in the format defined by the EAC 2.0 specification</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#generateEphemeralKeyPair">generateEphemeralKeyPair</a></b>(domainParameter)
								</div>
								<div class="description">Generate ephemeral ECC key pair.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#getEncryptedNonce">getEncryptedNonce</a></b>()
								</div>
								<div class="description">Generate nonce and encrypt using PACE key.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#getEphemeralPublicKey">getEphemeralPublicKey</a></b>()
								</div>
								<div class="description">Returns the ephemeral public key based on the new domain parameter</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#getMappingData">getMappingData</a></b>()
								</div>
								<div class="description">Generates and returns the mapping data for this instance</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#getSymmetricAlgorithm">getSymmetricAlgorithm</a></b>()
								</div>
								<div class="description">Return algorithm type</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#hasMapping">hasMapping</a></b>()
								</div>
								<div class="description">Returns true, if the mapping has been performed.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#hasNonce">hasNonce</a></b>()
								</div>
								<div class="description">Returns true, if the nonce is known.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">PACE.<b><a href="../symbols/PACE.html#.keyToString">keyToString</a></b>(the)
								</div>
								<div class="description">Describe key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#performKeyAgreement">performKeyAgreement</a></b>(publicKey)
								</div>
								<div class="description">Performs the mapping operation with mapping data from the other side</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#performMapping">performMapping</a></b>(mappingData)
								</div>
								<div class="description">Performs the mapping operation with mapping data from the other side</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#setPACEKey">setPACEKey</a></b>(key)
								</div>
								<div class="description">Set the PACE key.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#setPassword">setPassword</a></b>(pwd)
								</div>
								<div class="description">Set the password and derive the PACE key.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">PACE.<b><a href="../symbols/PACE.html#.stripLeadingZeros">stripLeadingZeros</a></b>(value)
								</div>
								<div class="description">Strips leading zeros of a ByteString</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#toString">toString</a></b>()
								</div>
								<div class="description">Returns a human readable presentation of the current pace state.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACE.html#verifyAuthenticationToken">verifyAuthenticationToken</a></b>(the)
								</div>
								<div class="description">Calculate and verify the authentication token over the public key received from
the other side</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>PACE</b>(crypto, algo, domainparam, version)
				</div>
				
				<div class="description">
					Create a PACE protocol object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider</dd>
						
							<dt>
								<span class="light fixedFont">{ByteString}</span>  <b>algo</b>
								
							</dt>
								<dd>the algorithm OID</dd>
						
							<dt>
								<span class="light fixedFont">{Key}</span>  <b>domainparam</b>
								
							</dt>
								<dd>the key object holding ECC domain parameter</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>version</b>
								
							</dt>
								<dd>protocol version (1 or 2)</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="calculateAuthenticationToken"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>calculateAuthenticationToken</b>()
					
					</div>
					<div class="description">
						Calculate the authentication token over the public key received from
the other side
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the MAC over the authentication data</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="decryptNonce"> </a>
					<div class="fixedFont">
					
					
					<b>decryptNonce</b>(nonce)
					
					</div>
					<div class="description">
						Decrypt and store nonce using PACE key.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>nonce</b>
									
								</dt>
								<dd>the encrypted nonce</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="deriveKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>deriveKey</b>(input, counter, the)
					
					</div>
					<div class="description">
						Derive key from input parameter, counter and optional nonce
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>input</b>
									
								</dt>
								<dd>the first part of the hash input</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>counter</b>
									
								</dt>
								<dd>the counter value</dd>
							
								<dt>
									<span class="light fixedFont">{nonce}</span> <b>the</b>
									
								</dt>
								<dd>optional nonce inserted between the input and the counter</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".encodePublicKey"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ASN1}</span>
					<span class="light">PACE.</span><b>encodePublicKey</b>(oid, key, withDP)
					
					</div>
					<div class="description">
						Encode an ECC public key in the format defined by the EAC 2.0 specification
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>oid</b>
									
								</dt>
								<dd>the object identifier to encode</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the EC public key</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>withDP</b>
									
								</dt>
								<dd>true to encode domain parameter as well</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the ASN1 encoded public key object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateEphemeralKeyPair"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>generateEphemeralKeyPair</b>(domainParameter)
					
					</div>
					<div class="description">
						Generate ephemeral ECC key pair.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>domainParameter</b>
									
								</dt>
								<dd>the domain parameter for the key pair</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the ephemeral public key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getEncryptedNonce"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getEncryptedNonce</b>()
					
					</div>
					<div class="description">
						Generate nonce and encrypt using PACE key.
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encrypted nonce</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getEphemeralPublicKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getEphemeralPublicKey</b>()
					
					</div>
					<div class="description">
						Returns the ephemeral public key based on the new domain parameter
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded public key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getMappingData"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getMappingData</b>()
					
					</div>
					<div class="description">
						Generates and returns the mapping data for this instance
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the mapping data</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSymmetricAlgorithm"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getSymmetricAlgorithm</b>()
					
					</div>
					<div class="description">
						Return algorithm type
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>Either Key.DES or Key.AES</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasMapping"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>hasMapping</b>()
					
					</div>
					<div class="description">
						Returns true, if the mapping has been performed.
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the mapping has been performed</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasNonce"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>hasNonce</b>()
					
					</div>
					<div class="description">
						Returns true, if the nonce is known.
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the nonce is known</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".keyToString"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">PACE.</span><b>keyToString</b>(the)
					
					</div>
					<div class="description">
						Describe key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>the</b>
									
								</dt>
								<dd>key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the string describing the key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="performKeyAgreement"> </a>
					<div class="fixedFont">
					
					
					<b>performKeyAgreement</b>(publicKey)
					
					</div>
					<div class="description">
						Performs the mapping operation with mapping data from the other side
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>publicKey</b>
									
								</dt>
								<dd>the public key in encoded format</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="performMapping"> </a>
					<div class="fixedFont">
					
					
					<b>performMapping</b>(mappingData)
					
					</div>
					<div class="description">
						Performs the mapping operation with mapping data from the other side
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>mappingData</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setPACEKey"> </a>
					<div class="fixedFont">
					
					
					<b>setPACEKey</b>(key)
					
					</div>
					<div class="description">
						Set the PACE key.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>key</b>
									
								</dt>
								<dd>the PACE key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the PACE key.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setPassword"> </a>
					<div class="fixedFont">
					
					
					<b>setPassword</b>(pwd)
					
					</div>
					<div class="description">
						Set the password and derive the PACE key.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>pwd</b>
									
								</dt>
								<dd>the PACE password (Hash Value for MRZ and ASCII string for others)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the PACE key.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".stripLeadingZeros"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">PACE.</span><b>stripLeadingZeros</b>(value)
					
					</div>
					<div class="description">
						Strips leading zeros of a ByteString
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>value</b>
									
								</dt>
								<dd>the ByteString value</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the stripped ByteString object, may be an empty ByteString</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					
					<b>toString</b>()
					
					</div>
					<div class="description">
						Returns a human readable presentation of the current pace state.
return {String} the object information
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="verifyAuthenticationToken"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>verifyAuthenticationToken</b>(the)
					
					</div>
					<div class="description">
						Calculate and verify the authentication token over the public key received from
the other side
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>MAC over the authentication data</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the MAC is valid</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - PACEDomainParameterInfo</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class PACEDomainParameterInfo
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				<p>This class encodes and decodes PACEDomainParameterInfo objects.</p>
<p>The class implements the following ASN.1 syntax:</p>
<pre>
  PACEDomainParameterInfo ::= SEQUENCE {
  	protocol OBJECT IDENTIFIER(id-PACE-DH | id-PACE-ECDH),
  	domainParameter AlgorithmIdentifier,
  	parameterId INTEGER OPTIONAL
  }
</pre>
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_PACE.js.html">PACE.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class PACEDomainParameterInfo.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/PACEDomainParameterInfo.html#constructor">PACEDomainParameterInfo</a></b>(the)
							</div>
							<div class="description">Create a PACEDomainParameterInfo object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class PACEDomainParameterInfo.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACEDomainParameterInfo.html#toTLV">toTLV</a></b>()
								</div>
								<div class="description">Convert object to TLV structure</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>PACEDomainParameterInfo</b>(the)
				</div>
				
				<div class="description">
					Create a PACEDomainParameterInfo object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{ASN1}</span>  <b>the</b>
								
							</dt>
								<dd>optional tlv structure to initialize the object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="toTLV"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>toTLV</b>()
					
					</div>
					<div class="description">
						Convert object to TLV structure
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TLV structure</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - PACEInfo</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class PACEInfo
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				<p>This class encodes and decodes PACEInfo objects.</p>
<p>The class implements the following ASN.1 syntax:</p>
<pre>
PACEInfo ::= SEQUENCE {
		protocol	OBJECT IDENTIFIER,
		version INTEGER, -- MUST be 1 or 2
		parameterId INTEGER OPTIONAL
}
</pre>
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_PACE.js.html">PACE.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class PACEInfo.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/PACEInfo.html#constructor">PACEInfo</a></b>(the)
							</div>
							<div class="description">Create a PACEInfo object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class PACEInfo.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PACEInfo.html#toTLV">toTLV</a></b>()
								</div>
								<div class="description">Convert object to TLV structure</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>PACEInfo</b>(the)
				</div>
				
				<div class="description">
					Create a PACEInfo object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{ASN1}</span>  <b>the</b>
								
							</dt>
								<dd>optional tlv structure to initialize the object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="toTLV"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>toTLV</b>()
					
					</div>
					<div class="description">
						Convert object to TLV structure
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TLV structure</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - PKCS10Generator</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class PKCS10Generator
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a PKCS#10 certificate request
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/x509_PKCS10Generator.js.html">PKCS10Generator.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class PKCS10Generator.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/PKCS10Generator.html#constructor">PKCS10Generator</a></b>(crypto)
							</div>
							<div class="description">Create a PKCS#10 certificate request</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class PKCS10Generator.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#addBasicConstraintsExtension">addBasicConstraintsExtension</a></b>(cA, pathLenConstraint)
								</div>
								<div class="description">Adds the BasicConstraints extension.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#addExtendedKeyUsageExtension">addExtendedKeyUsageExtension</a></b>(the)
								</div>
								<div class="description">Adds extended key usages</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#addExtension">addExtension</a></b>(extnID, the)
								</div>
								<div class="description">Adds an extension to the certificate

<p>The structure is defined as:</p>
<pre>
   Extension  ::=  SEQUENCE  {
       extnID      OBJECT IDENTIFIER,
       extnValue   OCTET STRING
                   -- contains the DER encoding of an ASN.1 value
                   -- corresponding to the extension type identified
                   -- by extnID
       }
</pre></div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#addKeyUsageExtension">addKeyUsageExtension</a></b>(the)
								</div>
								<div class="description">Adds the key usage extension.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#generateCertificationRequest">generateCertificationRequest</a></b>(privateKey)
								</div>
								<div class="description">Generates the certificate.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#getAttributes">getAttributes</a></b>()
								</div>
								<div class="description">Gets the attributes as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#getExtensions">getExtensions</a></b>()
								</div>
								<div class="description">Gets the extension attribute as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#getSubject">getSubject</a></b>()
								</div>
								<div class="description">Gets the subject name as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#getSubjectPublicKeyInfo">getSubjectPublicKeyInfo</a></b>()
								</div>
								<div class="description">Gets the subject's public key as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#getTbsRequest">getTbsRequest</a></b>()
								</div>
								<div class="description">Gets the part of the request that will be signed</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#reset">reset</a></b>()
								</div>
								<div class="description">Resets all internal state variables.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#setPublicKey">setPublicKey</a></b>(publicKey)
								</div>
								<div class="description">Sets the subjects public key

<p>The methods accepts ECC and RSA Public Keys.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#setSignatureAlgorithm">setSignatureAlgorithm</a></b>(alg)
								</div>
								<div class="description">Sets the signature algorithm.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PKCS10Generator.html#setSubject">setSubject</a></b>(subject)
								</div>
								<div class="description">Sets the subject name.</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>PKCS10Generator</b>(crypto)
				</div>
				
				<div class="description">
					Create a PKCS#10 certificate request
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider to use for signing operations</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="addBasicConstraintsExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addBasicConstraintsExtension</b>(cA, pathLenConstraint)
					
					</div>
					<div class="description">
						Adds the BasicConstraints extension.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>cA</b>
									
								</dt>
								<dd>the certificate belongs to a CA</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>pathLenConstraint</b>
									
								</dt>
								<dd>the maximum number of subordinate CA certificates</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addExtendedKeyUsageExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addExtendedKeyUsageExtension</b>(the)
					
					</div>
					<div class="description">
						Adds extended key usages
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String[]}</span> <b>the</b>
									
								</dt>
								<dd>list of extended key usage object identifier</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addExtension</b>(extnID, the)
					
					</div>
					<div class="description">
						Adds an extension to the certificate

<p>The structure is defined as:</p>
<pre>
   Extension  ::=  SEQUENCE  {
       extnID      OBJECT IDENTIFIER,
       extnValue   OCTET STRING
                   -- contains the DER encoding of an ASN.1 value
                   -- corresponding to the extension type identified
                   -- by extnID
       }
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>extnID</b>
									
								</dt>
								<dd>the extensions object identifier</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>extension value as ByteString</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addKeyUsageExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addKeyUsageExtension</b>(the)
					
					</div>
					<div class="description">
						Adds the key usage extension.

<p>The following flags are defined:</p>
<pre>
PKCS10Generator.digitalSignature = 0x0080;
PKCS10Generator.nonRepudiation   = 0x0040;
PKCS10Generator.keyEncipherment  = 0x0020;
PKCS10Generator.dataEncipherment = 0x0010;
PKCS10Generator.keyAgreement     = 0x0008;
PKCS10Generator.keyCertSign      = 0x0004;
PKCS10Generator.cRLSign          = 0x0002;
PKCS10Generator.encipherOnly     = 0x0001;
PKCS10Generator.decipherOnly     = 0x8000;
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>the</b>
									
								</dt>
								<dd>key usage flags as combination of the flags defined above.</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="generateCertificationRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>generateCertificationRequest</b>(privateKey)
					
					</div>
					<div class="description">
						Generates the certificate.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>privateKey</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the generated certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getAttributes"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getAttributes</b>()
					
					</div>
					<div class="description">
						Gets the attributes as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the request attributes</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getExtensions"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getExtensions</b>()
					
					</div>
					<div class="description">
						Gets the extension attribute as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate extensions</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSubject"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getSubject</b>()
					
					</div>
					<div class="description">
						Gets the subject name as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the issuer RDNSequence</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSubjectPublicKeyInfo"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getSubjectPublicKeyInfo</b>()
					
					</div>
					<div class="description">
						Gets the subject's public key as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the subject's public key info</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getTbsRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getTbsRequest</b>()
					
					</div>
					<div class="description">
						Gets the part of the request that will be signed
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TBSCertificate part</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="reset"> </a>
					<div class="fixedFont">
					
					
					<b>reset</b>()
					
					</div>
					<div class="description">
						Resets all internal state variables.
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="setPublicKey"> </a>
					<div class="fixedFont">
					
					
					<b>setPublicKey</b>(publicKey)
					
					</div>
					<div class="description">
						Sets the subjects public key

<p>The methods accepts ECC and RSA Public Keys.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>publicKey</b>
									
								</dt>
								<dd>the subjects public key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSignatureAlgorithm"> </a>
					<div class="fixedFont">
					
					
					<b>setSignatureAlgorithm</b>(alg)
					
					</div>
					<div class="description">
						Sets the signature algorithm. Currently only Crypto.RSA is supported
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>alg</b>
									
								</dt>
								<dd>the signature algorithm, only Crypto.RSA supported</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSubject"> </a>
					<div class="fixedFont">
					
					
					<b>setSubject</b>(subject)
					
					</div>
					<div class="description">
						Sets the subject name.

<p>The subject name must be a JavaScript object containing the properties:</p>
<ul>
 <li>C - the country</li>
 <li>O - the organization</li>
 <li>OU - the organization unit</li>
 <li>CN - the common name</li>
</ul>
<p>Example:</p>
<pre>
	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>subject</b>
									
								</dt>
								<dd>the subject name</dd>
							
							</dl>
						
						
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">See:</dt>
							
								<dd><a href="../symbols/PKIXCommon.html#.encodeName">PKIXCommon.encodeName</a>()

The subject can also be passed an already encoded ASN.1 structure</dd>
							
							</dl>
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - PaperKeyEncoding</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class PaperKeyEncoding
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Encoder / Decoder for PaperKeys
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_PaperKeyEncoding.js.html">PaperKeyEncoding.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class PaperKeyEncoding.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/PaperKeyEncoding.html#constructor">PaperKeyEncoding</a></b>()
							</div>
							<div class="description">Create a PaperKey encoder/decoder</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class PaperKeyEncoding.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PaperKeyEncoding.html#decodeSegment">decodeSegment</a></b>(segment, str)
								</div>
								<div class="description">Decode an 8 byte segment from 12 input characters.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">PaperKeyEncoding.<b><a href="../symbols/PaperKeyEncoding.html#.dumpKey">dumpKey</a></b>(data)
								</div>
								<div class="description">Dump a key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PaperKeyEncoding.html#encodeSegment">encodeSegment</a></b>(segment, data)
								</div>
								<div class="description">Encode an 8 byte segment in human readable form.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">PaperKeyEncoding.<b><a href="../symbols/PaperKeyEncoding.html#.formatSegment">formatSegment</a></b>(str)
								</div>
								<div class="description">Format a segment by splitting the input after each 4 characters and inserting " - "</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>PaperKeyEncoding</b>()
				</div>
				
				<div class="description">
					Create a PaperKey encoder/decoder
					
				</div>
				
				
				
				
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="decodeSegment"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>decodeSegment</b>(segment, str)
					
					</div>
					<div class="description">
						Decode an 8 byte segment from 12 input characters.

Characters not in the alphabet are ignored.

Throws GPError with GPError.INVALID_LENGTH if the input does not contain at least 12 usable characters.
Throws GPError with GPError.SIGNATURE_FAILED if the check digit based validation fails.
Throws GPError with GPError.INVALID_DATA if the segment number does not match the expected value.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>segment</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>str</b>
									
								</dt>
								<dd>the user input</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the 8 byte segment</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".dumpKey"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">PaperKeyEncoding.</span><b>dumpKey</b>(data)
					
					</div>
					<div class="description">
						Dump a key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>the key value (length must be a multiple of 8)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the formatted key with 3 groups of 4 digits per line</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="encodeSegment"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>encodeSegment</b>(segment, data)
					
					</div>
					<div class="description">
						Encode an 8 byte segment in human readable form.

Based on BASE64 encoding with visually confusable characters replaced.

I is replaced by !
O is replaced by *
l is replaced by %

A LUHN-64 character is appended.

A segment identifier is encoded in 2 bit at the end of the encoded 64 bit string.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>segment</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded string</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".formatSegment"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">PaperKeyEncoding.</span><b>formatSegment</b>(str)
					
					</div>
					<div class="description">
						Format a segment by splitting the input after each 4 characters and inserting " - "
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>str</b>
									
								</dt>
								<dd>the unformatted string</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the formatted string</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - PublicKeyFile</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class PublicKeyFile
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Read and write encoded SmartCard-HSM public keys.
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/file_PublicKeyFile.js.html">PublicKeyFile.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class PublicKeyFile.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/PublicKeyFile.html#constructor">PublicKeyFile</a></b>(arg, arg)
							</div>
							<div class="description">Create a Public Key File object.</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class PublicKeyFile.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PublicKeyFile.html#encode">encode</a></b>()
								</div>
								<div class="description">Encode the certificate chain in TLV encoding.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PublicKeyFile.html#parse">parse</a></b>(content)
								</div>
								<div class="description">Parse the binary file content as TLV structure and validate the certificate chain.</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>PublicKeyFile</b>(arg, arg)
				</div>
				
				<div class="description">
					Create a Public Key File object.
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>arg</b>
								
							</dt>
								<dd>the file to read from</dd>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>[]}</span>  <b>arg</b>
								
							</dt>
								<dd>the certificate chain with the public key first.</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="encode"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>encode</b>()
					
					</div>
					<div class="description">
						Encode the certificate chain in TLV encoding.
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded content for the file</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="parse"> </a>
					<div class="fixedFont">
					
					
					<b>parse</b>(content)
					
					</div>
					<div class="description">
						Parse the binary file content as TLV structure and validate the certificate chain.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>content</b>
									
								</dt>
								<dd>the file content.</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - PublicKeyReference</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class PublicKeyReference
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				<p>A class that implements a public key reference to be used as CAR and CHR in
       card verifiable certificates (CVC).</p>
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_PublicKeyReference.js.html">PublicKeyReference.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class PublicKeyReference.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/PublicKeyReference.html#constructor">PublicKeyReference</a></b>()
							</div>
							<div class="description"><p>Create a public key reference (CAR/CHR) from binary representation or individual fields.</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class PublicKeyReference.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PublicKeyReference.html#equals">equals</a></b>(other)
								</div>
								<div class="description">Returns true if other public key reference equals this public key reference</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PublicKeyReference.html#getBytes">getBytes</a></b>()
								</div>
								<div class="description">Returns the binary encoded public key reference</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PublicKeyReference.html#getCountryCode">getCountryCode</a></b>()
								</div>
								<div class="description">Returns the 2 character country code</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PublicKeyReference.html#getHolder">getHolder</a></b>()
								</div>
								<div class="description">Returns the certificate holder name, which is the concatenation of the country code and the
holder mnemonic.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PublicKeyReference.html#getMnemonic">getMnemonic</a></b>()
								</div>
								<div class="description">Returns the variable length holder mnemonic</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PublicKeyReference.html#getSequenceNo">getSequenceNo</a></b>()
								</div>
								<div class="description">Returns the 5 character sequence number</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">PublicKeyReference.<b><a href="../symbols/PublicKeyReference.html#.test">test</a></b>()
								</div>
								<div class="description">Test function</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/PublicKeyReference.html#toString">toString</a></b>()
								</div>
								<div class="description">Returns the string representation of the public key reference</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>PublicKeyReference</b>()
				</div>
				
				<div class="description">
					<p>Create a public key reference (CAR/CHR) from binary representation or individual fields.</p>

<p>Use one of the following signatures:</p>

<ul>
 <li>PublicKeyReference(ByteString value) - binary public key reference</li>
 <li>PublicKeyReference(String value) - string encoded public key reference</li>
 <li>PublicKeyReference(String countryCode, String holderMnemonic, String sequenceNumber) - string encoded public key reference</li>
</ul>
<p>@see PublicKeyReference.test() for an example.</P>
					
				</div>
				
				
				
				
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="equals"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>equals</b>(other)
					
					</div>
					<div class="description">
						Returns true if other public key reference equals this public key reference
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>other</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if equals</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getBytes"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getBytes</b>()
					
					</div>
					<div class="description">
						Returns the binary encoded public key reference
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the public key reference</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCountryCode"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getCountryCode</b>()
					
					</div>
					<div class="description">
						Returns the 2 character country code
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the country code</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getHolder"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getHolder</b>()
					
					</div>
					<div class="description">
						Returns the certificate holder name, which is the concatenation of the country code and the
holder mnemonic.
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the holder name</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getMnemonic"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getMnemonic</b>()
					
					</div>
					<div class="description">
						Returns the variable length holder mnemonic
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the holder mnemonic</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSequenceNo"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getSequenceNo</b>()
					
					</div>
					<div class="description">
						Returns the 5 character sequence number
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the sequence number</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".test"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">PublicKeyReference.</span><b>test</b>()
					
					</div>
					<div class="description">
						Test function
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>toString</b>()
					
					</div>
					<div class="description">
						Returns the string representation of the public key reference
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the public key reference</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - RAMClient</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class RAMClient
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/ram_RAMClient.js.html">RAMClient.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class RAMClient.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/RAMClient.html#constructor">RAMClient</a></b>(card, url, session)
							</div>
							<div class="description">Create a client instance for attaching a card to a server via the RAMOverHTTP procotol</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class RAMClient.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">RAMClient.<b><a href="../symbols/RAMClient.html#.asSignedInteger">asSignedInteger</a></b>(val)
								</div>
								<div class="description">Prepend a 0, if the encoded integer is interpreted as negative value otherwise</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/RAMClient.html#close">close</a></b>(id, msg)
								</div>
								<div class="description">Close connection, e.g.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/RAMClient.html#setAPDULimit">setAPDULimit</a></b>(aPDULimit, forceFailSW)
								</div>
								<div class="description">Set a limiting number of APDUs

This is helpful for testing to intercept processing after a certain number
of APDUs (Default 100000).</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/RAMClient.html#setHTTPLimit">setHTTPLimit</a></b>(aPDULimit, forceFailSW)
								</div>
								<div class="description">Set a limiting number of HTTP roundtrips

This is helpful for testing to intercept processing after a certain number
of HTTP roundtrips (Default 100000).</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/RAMClient.html#setMaxAPDUSize">setMaxAPDUSize</a></b>(maxCAPDUSize, maxRAPDUSize)
								</div>
								<div class="description">Set a maximum command and response APDU size</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/RAMClient.html#setNotificationListener">setNotificationListener</a></b>(the)
								</div>
								<div class="description">Set a notification listener.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/RAMClient.html#update">update</a></b>()
								</div>
								<div class="description">Perform update operation</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>RAMClient</b>(card, url, session)
				</div>
				
				<div class="description">
					Create a client instance for attaching a card to a server via the RAMOverHTTP procotol
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Card}</span>  <b>card</b>
								
							</dt>
								<dd>the card instance to attach</dd>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>url</b>
								
							</dt>
								<dd>the URL to connect to</dd>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>session</b>
								
							</dt>
								<dd>the session cookie</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name=".asSignedInteger"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">RAMClient.</span><b>asSignedInteger</b>(val)
					
					</div>
					<div class="description">
						Prepend a 0, if the encoded integer is interpreted as negative value otherwise
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>val</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="close"> </a>
					<div class="fixedFont">
					
					
					<b>close</b>(id, msg)
					
					</div>
					<div class="description">
						Close connection, e.g. after exception on the client side
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>id</b>
									
								</dt>
								<dd>the message id</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>msg</b>
									
								</dt>
								<dd>the closing message</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setAPDULimit"> </a>
					<div class="fixedFont">
					
					
					<b>setAPDULimit</b>(aPDULimit, forceFailSW)
					
					</div>
					<div class="description">
						Set a limiting number of APDUs

This is helpful for testing to intercept processing after a certain number
of APDUs (Default 100000).
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>aPDULimit</b>
									
								</dt>
								<dd>the maximum number of APDU processing in update()</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>forceFailSW</b>
									
								</dt>
								<dd>the final SW1/SW2</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setHTTPLimit"> </a>
					<div class="fixedFont">
					
					
					<b>setHTTPLimit</b>(aPDULimit, forceFailSW)
					
					</div>
					<div class="description">
						Set a limiting number of HTTP roundtrips

This is helpful for testing to intercept processing after a certain number
of HTTP roundtrips (Default 100000).
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>aPDULimit</b>
									
								</dt>
								<dd>the maximum number of APDU processing in update()</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>forceFailSW</b>
									
								</dt>
								<dd>the final SW1/SW2</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setMaxAPDUSize"> </a>
					<div class="fixedFont">
					
					
					<b>setMaxAPDUSize</b>(maxCAPDUSize, maxRAPDUSize)
					
					</div>
					<div class="description">
						Set a maximum command and response APDU size
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>maxCAPDUSize</b>
									
								</dt>
								<dd>The maximum number of bytes in the command APDU</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>maxRAPDUSize</b>
									
								</dt>
								<dd>The maximum number of bytes in the response APDU</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setNotificationListener"> </a>
					<div class="fixedFont">
					
					
					<b>setNotificationListener</b>(the)
					
					</div>
					<div class="description">
						Set a notification listener.

The listener object must implement a notificationReceived() method that
receives the three parameter id, msg and ttc.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>the</b>
									
								</dt>
								<dd>listener object implementing notificationReceived()</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="update"> </a>
					<div class="fixedFont">
					
					
					<b>update</b>()
					
					</div>
					<div class="description">
						Perform update operation
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - RestrictedIdentificationDomainParameterInfo</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class RestrictedIdentificationDomainParameterInfo
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				<p>This class encodes and decodes RestrictedIdentificationDomainParameterInfo objects.</p>
<p>The class implements the following ASN.1 syntax:</p>
<pre>
	RestrictedIdentificationDomainParameterInfo ::= SEQUENCE {
		protocol OBJECT IDENTIFIER(id-CA-DH | id-CA-ECDH),
		domainParameter AlgorithmIdentifier,
}
</pre>
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_RestrictedIdentification.js.html">RestrictedIdentification.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class RestrictedIdentificationDomainParameterInfo.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html#constructor">RestrictedIdentificationDomainParameterInfo</a></b>(the)
							</div>
							<div class="description">Create a RestrictedIdentificationDomainParameterInfo object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class RestrictedIdentificationDomainParameterInfo.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html#toTLV">toTLV</a></b>()
								</div>
								<div class="description">Convert object to TLV structure</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>RestrictedIdentificationDomainParameterInfo</b>(the)
				</div>
				
				<div class="description">
					Create a RestrictedIdentificationDomainParameterInfo object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{ASN1}</span>  <b>the</b>
								
							</dt>
								<dd>optional tlv structure to initialize the object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="toTLV"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>toTLV</b>()
					
					</div>
					<div class="description">
						Convert object to TLV structure
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TLV structure</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - RestrictedIdentificationInfo</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class RestrictedIdentificationInfo
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				<p>This class encodes and decodes RestrictedIdentificationInfo objects.</p>
<p>The class implements the following ASN.1 syntax:</p>
<pre>
RestrictedIdentificationInfo ::= SEQUENCE {
  protocol  OBJECT IDENTIFIER(
            id-RI-DH-SHA-1  |
            id-RI-DH-SHA-224  |
            id-RI-DH-SHA-256  |
            id-RI-DH-SHA-384 |
            id-RI-DH-SHA-512 |
            id-RI-ECDH-SHA-1  |
            id-RI-ECDH-SHA-224  |
            id-RI-ECDH-SHA-256 |
            id-RI-ECDH-SHA-384 |
            id-RI-ECDH-SHA-512),
  params    ProtocolParams,
  maxKeyLen INTEGER OPTIONAL
}
ProtocolParams ::= SEQUENCE {
  version         INTEGER, -- MUST be 1
  keyId           INTEGER,
  authorizedOnly  BOOLEAN
}
</pre>
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/eac_RestrictedIdentification.js.html">RestrictedIdentification.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class RestrictedIdentificationInfo.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/RestrictedIdentificationInfo.html#constructor">RestrictedIdentificationInfo</a></b>(the)
							</div>
							<div class="description">Create a RestrictedIdentificationInfo object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class RestrictedIdentificationInfo.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/RestrictedIdentificationInfo.html#toTLV">toTLV</a></b>()
								</div>
								<div class="description">Convert object to TLV structure</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>RestrictedIdentificationInfo</b>(the)
				</div>
				
				<div class="description">
					Create a RestrictedIdentificationInfo object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{ASN1}</span>  <b>the</b>
								
							</dt>
								<dd>optional tlv structure to initialize the object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="toTLV"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>toTLV</b>()
					
					</div>
					<div class="description">
						Convert object to TLV structure
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TLV structure</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - SecureChannelHandler</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class SecureChannelHandler
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a secure messaging channel
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_SecureChannelHandler.js.html">SecureChannelHandler.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class SecureChannelHandler.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/SecureChannelHandler.html#constructor">SecureChannelHandler</a></b>(crypto)
							</div>
							<div class="description">Create a secure channel</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class SecureChannelHandler.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureChannelHandler.html#getIV">getIV</a></b>()
								</div>
								<div class="description">Return an initialisation vector based on the defined policy</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureChannelHandler.html#setEncKey">setEncKey</a></b>(key)
								</div>
								<div class="description">Sets the key used for encryption</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureChannelHandler.html#setEncSendSequenceCounter">setEncSendSequenceCounter</a></b>(ssc)
								</div>
								<div class="description">Set the send sequence counter for encryption calculation</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureChannelHandler.html#setMacKey">setMacKey</a></b>(key)
								</div>
								<div class="description">Sets the key used for message authentication</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureChannelHandler.html#setMACSendSequenceCounter">setMACSendSequenceCounter</a></b>(ssc)
								</div>
								<div class="description">Set the send sequence counter for MAC calculation</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureChannelHandler.html#setSendSequenceCounterPolicy">setSendSequenceCounterPolicy</a></b>(policy)
								</div>
								<div class="description">Sets the policy for handling send sequence counters

See IsoSecureChannel for details</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureChannelHandler.html#unwrap">unwrap</a></b>(apdu)
								</div>
								<div class="description">Unwrap a secure messaging APDU recovering the content</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureChannelHandler.html#wrap">wrap</a></b>(apdu)
								</div>
								<div class="description">Wrap an APDU for secure messaging</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>SecureChannelHandler</b>(crypto)
				</div>
				
				<div class="description">
					Create a secure channel
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="getIV"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getIV</b>()
					
					</div>
					<div class="description">
						Return an initialisation vector based on the defined policy
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the IV</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setEncKey"> </a>
					<div class="fixedFont">
					
					
					<b>setEncKey</b>(key)
					
					</div>
					<div class="description">
						Sets the key used for encryption
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the encryption key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setEncSendSequenceCounter"> </a>
					<div class="fixedFont">
					
					
					<b>setEncSendSequenceCounter</b>(ssc)
					
					</div>
					<div class="description">
						Set the send sequence counter for encryption calculation
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>ssc</b>
									
								</dt>
								<dd>the send sequence counter</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setMacKey"> </a>
					<div class="fixedFont">
					
					
					<b>setMacKey</b>(key)
					
					</div>
					<div class="description">
						Sets the key used for message authentication
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the message authentication key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setMACSendSequenceCounter"> </a>
					<div class="fixedFont">
					
					
					<b>setMACSendSequenceCounter</b>(ssc)
					
					</div>
					<div class="description">
						Set the send sequence counter for MAC calculation
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>ssc</b>
									
								</dt>
								<dd>the send sequence counter</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSendSequenceCounterPolicy"> </a>
					<div class="fixedFont">
					
					
					<b>setSendSequenceCounterPolicy</b>(policy)
					
					</div>
					<div class="description">
						Sets the policy for handling send sequence counters

See IsoSecureChannel for details
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>policy</b>
									
								</dt>
								<dd>one of IsoSecureChannel.SSC_DEFAULT_POLICY, SSC_SYNC_POLICY or SSC_SYNC_ENC_POLICY</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="unwrap"> </a>
					<div class="fixedFont">
					
					
					<b>unwrap</b>(apdu)
					
					</div>
					<div class="description">
						Unwrap a secure messaging APDU recovering the content
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the APDU to unwrap</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="wrap"> </a>
					<div class="fixedFont">
					
					
					<b>wrap</b>(apdu)
					
					</div>
					<div class="description">
						Wrap an APDU for secure messaging
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the APDU to wrap</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - SecureMessagingCommandAPDUDecoder</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class SecureMessagingCommandAPDUDecoder
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Decoder for a secure messaging APDU
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_SecureMessagingCommandAPDUDecoder.js.html">SecureMessagingCommandAPDUDecoder.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class SecureMessagingCommandAPDUDecoder.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/SecureMessagingCommandAPDUDecoder.html#constructor">SecureMessagingCommandAPDUDecoder</a></b>(channel, apdu)
							</div>
							<div class="description">Creates a decoder for a single secure messaging command APDU</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class SecureMessagingCommandAPDUDecoder.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureMessagingCommandAPDUDecoder.html#buildMACInput">buildMACInput</a></b>()
								</div>
								<div class="description">Build the MAC input block</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureMessagingCommandAPDUDecoder.html#decryptBody">decryptBody</a></b>(key)
								</div>
								<div class="description">Decrypt the body of a secure messaging APDU</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureMessagingCommandAPDUDecoder.html#getLe">getLe</a></b>()
								</div>
								<div class="description">Return value of optional Le element with tag '97'</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SecureMessagingCommandAPDUDecoder.<b><a href="../symbols/SecureMessagingCommandAPDUDecoder.html#.pad">pad</a></b>(buffer, blocksize)
								</div>
								<div class="description">Applies ISO padding to the input buffer</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SecureMessagingCommandAPDUDecoder.<b><a href="../symbols/SecureMessagingCommandAPDUDecoder.html#.removePadding">removePadding</a></b>(buffer)
								</div>
								<div class="description">Removes the ISO padding</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecureMessagingCommandAPDUDecoder.html#verifyMAC">verifyMAC</a></b>()
								</div>
								<div class="description">Verify the message authentication code (MAC)</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>SecureMessagingCommandAPDUDecoder</b>(channel, apdu)
				</div>
				
				<div class="description">
					Creates a decoder for a single secure messaging command APDU
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{SecureChannel}</span>  <b>channel</b>
								
							</dt>
								<dd>the secure channel object</dd>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span>  <b>apdu</b>
								
							</dt>
								<dd>the secure messaging APDU</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="buildMACInput"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>buildMACInput</b>()
					
					</div>
					<div class="description">
						Build the MAC input block
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the MAC calculation input block</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="decryptBody"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>decryptBody</b>(key)
					
					</div>
					<div class="description">
						Decrypt the body of a secure messaging APDU
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the encryption key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the plain body or undefined if no encrypted body</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getLe"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getLe</b>()
					
					</div>
					<div class="description">
						Return value of optional Le element with tag '97'
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the value of the Le element</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".pad"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteBuffer}</span>
					<span class="light">SecureMessagingCommandAPDUDecoder.</span><b>pad</b>(buffer, blocksize)
					
					</div>
					<div class="description">
						Applies ISO padding to the input buffer
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteBuffer}</span> <b>buffer</b>
									
								</dt>
								<dd>the input buffer</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>blocksize</b>
									
								</dt>
								<dd>the block size</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the buffer argument</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".removePadding"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">SecureMessagingCommandAPDUDecoder.</span><b>removePadding</b>(buffer)
					
					</div>
					<div class="description">
						Removes the ISO padding
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>buffer</b>
									
								</dt>
								<dd>the input with with padding</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the buffer without padding</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="verifyMAC"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>verifyMAC</b>()
					
					</div>
					<div class="description">
						Verify the message authentication code (MAC)
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the MAC is valid</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - SecurityEnvironment</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class SecurityEnvironment
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a security environment for cryptographic operations.
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_SecurityEnvironment.js.html">SecurityEnvironment.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class SecurityEnvironment.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/SecurityEnvironment.html#constructor">SecurityEnvironment</a></b>()
							</div>
							<div class="description">Creates a security environment container that collects cryptographic reference templates (CRT)</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class SecurityEnvironment.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecurityEnvironment.html#add">add</a></b>(tlv)
								</div>
								<div class="description">Adds a CRT identified by it's tag</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecurityEnvironment.html#addElements">addElements</a></b>(tname, tlv)
								</div>
								<div class="description">Adds CRT elements to a named template.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SecurityEnvironment.<b><a href="../symbols/SecurityEnvironment.html#.decorateCRT">decorateCRT</a></b>(asn1)
								</div>
								<div class="description">Decorates a tlv object from the CRT</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SecurityEnvironment.html#toString">toString</a></b>()
								</div>
								<div class="description">Return textual representation of security environment container</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>SecurityEnvironment</b>()
				</div>
				
				<div class="description">
					Creates a security environment container that collects cryptographic reference templates (CRT)
					
				</div>
				
				
				
				
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="add"> </a>
					<div class="fixedFont">
					
					
					<b>add</b>(tlv)
					
					</div>
					<div class="description">
						Adds a CRT identified by it's tag
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>tlv</b>
									
								</dt>
								<dd>the tlv object</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addElements"> </a>
					<div class="fixedFont">
					
					
					<b>addElements</b>(tname, tlv)
					
					</div>
					<div class="description">
						Adds CRT elements to a named template.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>tname</b>
									
								</dt>
								<dd>the CRT name one of AT, KAT, HT, CCT, DST or CT</dd>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>tlv</b>
									
								</dt>
								<dd>the tlv object containing the CRT elements</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name=".decorateCRT"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">SecurityEnvironment.</span><b>decorateCRT</b>(asn1)
					
					</div>
					<div class="description">
						Decorates a tlv object from the CRT
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>asn1</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					
					<b>toString</b>()
					
					</div>
					<div class="description">
						Return textual representation of security environment container
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - SignatureKey</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class SignatureKey
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing signature keys
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_SignatureKey.js.html">SignatureKey.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class SignatureKey.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/SignatureKey.html#constructor">SignatureKey</a></b>(name, id)
							</div>
							<div class="description">Create a signature key object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class SignatureKey.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SignatureKey.html#getType">getType</a></b>()
								</div>
								<div class="description">Override from base class</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SignatureKey.html#terminate">terminate</a></b>()
								</div>
								<div class="description">Terminate authentication object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SignatureKey.html#toString">toString</a></b>()
								</div>
								<div class="description">Convert object to a human readable string</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>SignatureKey</b>(name, id)
				</div>
				
				<div class="description">
					Create a signature key object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{String}</span>  <b>name</b>
								
							</dt>
								<dd>the human readable name of the object</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>id</b>
								
							</dt>
								<dd>the key id</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="getType"> </a>
					<div class="fixedFont">
					
					
					<b>getType</b>()
					
					</div>
					<div class="description">
						Override from base class
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="terminate"> </a>
					<div class="fixedFont">
					
					
					<b>terminate</b>()
					
					</div>
					<div class="description">
						Terminate authentication object
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					
					<b>toString</b>()
					
					</div>
					<div class="description">
						Convert object to a human readable string
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - SmartCardHSM</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class SmartCardHSM
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing support for SmartCard-HSM access
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_SmartCardHSM.js.html">SmartCardHSM.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class SmartCardHSM.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/SmartCardHSM.html#constructor">SmartCardHSM</a></b>(card)
							</div>
							<div class="description">Create a SmartCard-HSM access object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class SmartCardHSM.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#addCACertificateToMap">addCACertificateToMap</a></b>(cert, id, label)
								</div>
								<div class="description">Add a new CA certificate to the map</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#addKeyToMap">addKeyToMap</a></b>(key)
								</div>
								<div class="description">Add a new key to the map of keys</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#associateXKEKKeyDomain">associateXKEKKeyDomain</a></b>(keyDomain, keyDomainUID, keyDomainAssociation, keyDomainAssociation)
								</div>
								<div class="description">Associate XKEK Key Domain</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.buildCertDescription">buildCertDescription</a></b>(commonObjectFlags, label, pubKey, certFID)
								</div>
								<div class="description">Create a PKCS#15 certificate description</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.buildDataObjectDescription">buildDataObjectDescription</a></b>(label, commonObjectFlags, fid, applicationName)
								</div>
								<div class="description">Create a PKCS#15 data object description</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.buildGAKPwithECC">buildGAKPwithECC</a></b>(innerCAR, algo, chr, dp, outerCAR, privateKey)
								</div>
								<div class="description">Build input for Generate Asymmetric Key Pair command for generating an ECC key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.buildGAKPwithRSA">buildGAKPwithRSA</a></b>(innerCAR, algo, chr, keysize, outerCAR)
								</div>
								<div class="description">Build input for Generate Asymmetric Key Pair command for generating a RSA key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.buildKeyDomainDescription">buildKeyDomainDescription</a></b>(label)
								</div>
								<div class="description">Create a PKCS#15 like KeyDomain description</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.buildPrkDforECC">buildPrkDforECC</a></b>(keyid, label, keysize)
								</div>
								<div class="description">Create a PKCS#15 PrivateECCKey description</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.buildPrkDforRSA">buildPrkDforRSA</a></b>(keyid, label, modulussize)
								</div>
								<div class="description">Create a PKCS#15 PrivateRSAKey description</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.buildSKDforAES">buildSKDforAES</a></b>(keyid, label, keysize)
								</div>
								<div class="description">Create a PKCS#15 SecretKey description</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#changeInitializationCode">changeInitializationCode</a></b>(initializationCode, newInitializationCode)
								</div>
								<div class="description">Change InitializationCode</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#changeUserPIN">changeUserPIN</a></b>(currentPIN, newPIN)
								</div>
								<div class="description">Change User PIN</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#createXKEKKeyDomain">createXKEKKeyDomain</a></b>(keyDomain, keyDomainMembership, keyDomainMembership)
								</div>
								<div class="description">Create XKEK Key Domain</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#decipher">decipher</a></b>(keyid, algo, data)
								</div>
								<div class="description">Decipher cryptogram or agree shared secret using Diffie-Hellman</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.decodeAlgorithmList">decodeAlgorithmList</a></b>(list)
								</div>
								<div class="description">Decode algorithm list and return string array with names</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#deleteDataObject">deleteDataObject</a></b>(label)
								</div>
								<div class="description">Delete the data object references by the label.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#deleteFile">deleteFile</a></b>(fid)
								</div>
								<div class="description">Delete file system object (EF or key)</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#deleteKEK">deleteKEK</a></b>(keyDomain)
								</div>
								<div class="description">Delete the key encryption key in a key domain</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#deleteKeyDomain">deleteKeyDomain</a></b>(keyDomain)
								</div>
								<div class="description">Delete the empty key domain</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#deriveSymmetricKey">deriveSymmetricKey</a></b>(id, algo, derivationParam)
								</div>
								<div class="description">Derive Symmetric Key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#deriveXKEK">deriveXKEK</a></b>(keyDomain, derivationParam, derivationParam)
								</div>
								<div class="description">Derive XKEK</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#determineFreeCAId">determineFreeCAId</a></b>()
								</div>
								<div class="description">Determine an unused CA certificate identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.determineFreeFid">determineFreeFid</a></b>(the, the)
								</div>
								<div class="description">Determine a free FID in the list of FID for the given prefix.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.determineFreeId">determineFreeId</a></b>(the, the)
								</div>
								<div class="description">Determine a free id in the list of FID for the given prefix.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#determineFreeKeyId">determineFreeKeyId</a></b>()
								</div>
								<div class="description">Determine an unused key identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.disableUTSRCA">disableUTSRCA</a></b>()
								</div>
								<div class="description">Remove Root Certificate of Development SRCA

Always call this on a productive system</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.dumpKeyData">dumpKeyData</a></b>(keydata)
								</div>
								<div class="description">Dump C-Data of Generate Asymmetric Key Pair command</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.encodeAlgorithmList">encodeAlgorithmList</a></b>(list)
								</div>
								<div class="description">Parse and encode the algorithm list containing either algorithm ids or names</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#enumerateCACertificates">enumerateCACertificates</a></b>()
								</div>
								<div class="description">Enumerate CA certificates</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#enumerateDataObjects">enumerateDataObjects</a></b>()
								</div>
								<div class="description">Enumerate Data Objects</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#enumerateKeys">enumerateKeys</a></b>()
								</div>
								<div class="description">Enumerate key objects in the SmartCard-HSM and build the map of keys</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#enumerateObjects">enumerateObjects</a></b>()
								</div>
								<div class="description">Enumerate Objects</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#generateAsymmetricKeyPair">generateAsymmetricKeyPair</a></b>(newkid, signkid, keydata)
								</div>
								<div class="description">Generate an asymmetric key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#generateRandom">generateRandom</a></b>(length)
								</div>
								<div class="description">Generate random data</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#generateSymmetricKey">generateSymmetricKey</a></b>(newkid, algo, keydata)
								</div>
								<div class="description">Generate a symmetric key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getCACertificate">getCACertificate</a></b>(label)
								</div>
								<div class="description">Return CA certificate with label</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getCrypto">getCrypto</a></b>()
								</div>
								<div class="description">Get crypto object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getDataObjectFileIdentifier">getDataObjectFileIdentifier</a></b>(label)
								</div>
								<div class="description">Return the file identifier containing the data object.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getFreeMemory">getFreeMemory</a></b>()
								</div>
								<div class="description">Determine free memory</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getKey">getKey</a></b>(labelOrId)
								</div>
								<div class="description">Get a key reference object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getKeyDomainLabel">getKeyDomainLabel</a></b>(keyDomain)
								</div>
								<div class="description">Return the label associated with the key domain or undefined.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getKeyIds">getKeyIds</a></b>()
								</div>
								<div class="description">Get key ids</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getKeys">getKeys</a></b>()
								</div>
								<div class="description">Return a list of key objects</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getLabel">getLabel</a></b>()
								</div>
								<div class="description">Get Token Label</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getNativeCardService">getNativeCardService</a></b>()
								</div>
								<div class="description">Return the native OCF SmartCardHSMCardService</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getProvisioningURL">getProvisioningURL</a></b>()
								</div>
								<div class="description">Get ProvisioningURL</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getTokenManagementKeyKCV">getTokenManagementKeyKCV</a></b>()
								</div>
								<div class="description">Get Key Check Value of Token Management Key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getTokenManagementKeySalt">getTokenManagementKeySalt</a></b>()
								</div>
								<div class="description">Get salt for SO-PIN derivation using  the Token Management Key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#getVersionInfo">getVersionInfo</a></b>()
								</div>
								<div class="description">Return a string describing the SmartCard-HSM Version</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#hasDataObject">hasDataObject</a></b>(label)
								</div>
								<div class="description">Check if the data object is present</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#hasFile">hasFile</a></b>(fid)
								</div>
								<div class="description">Try selecting the file to see if is present</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#importDataObject">importDataObject</a></b>(label, privObj, data)
								</div>
								<div class="description">Import a data object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#importEncryptedKeyShare">importEncryptedKeyShare</a></b>(keyshare, password, keyDomain)
								</div>
								<div class="description">Decrypt and import a DKEK share</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#importKeyShare">importKeyShare</a></b>(keyDomain, keyshare)
								</div>
								<div class="description">Import DKEK share or query status</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#initDevice">initDevice</a></b>(options, initialPIN, initializationCode, retryCounterInitial, keyshares)
								</div>
								<div class="description">Initialize device and clear all keys and files</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#isInitialized">isInitialized</a></b>()
								</div>
								<div class="description">Return true is SmartCard-HSM is initialized</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#isPINResetEnabled">isPINResetEnabled</a></b>()
								</div>
								<div class="description">Check if the RESET RETRY COUNTER command can reset the PIN</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#isResetRetryCounterEnabled">isResetRetryCounterEnabled</a></b>()
								</div>
								<div class="description">Check if the RESET RETRY COUNTER command is enabled</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#logout">logout</a></b>()
								</div>
								<div class="description">Logout</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#openSecureChannel">openSecureChannel</a></b>(crypto, devAuthPK)
								</div>
								<div class="description">Open a secure channel using device authentication</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.parseCertificateList">parseCertificateList</a></b>(a)
								</div>
								<div class="description">Parse list of CVC in a binary blob</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#parseKeyDomainStatus">parseKeyDomainStatus</a></b>(status)
								</div>
								<div class="description">Parse the key domain status returned from the device</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#queryInitializationCodeStatus">queryInitializationCodeStatus</a></b>()
								</div>
								<div class="description">Request Initialization Code Status</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#queryKeyDomainStatus">queryKeyDomainStatus</a></b>(keyDomain)
								</div>
								<div class="description">Query the status of the key domain</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#queryPINStatus">queryPINStatus</a></b>(p2)
								</div>
								<div class="description">Request PIN Status Information</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#queryUserPINStatus">queryUserPINStatus</a></b>()
								</div>
								<div class="description">Request PIN Status Information</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#readBinary">readBinary</a></b>(fid, offset, length)
								</div>
								<div class="description">Read transparent EF referenced by file identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#selectFile">selectFile</a></b>(fid)
								</div>
								<div class="description">Select the file or key an return the FCP</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.setTrustedSRCACertificates">setTrustedSRCACertificates</a></b>(srcalist)
								</div>
								<div class="description">Set the list of trusted SRCA certificates</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#sign">sign</a></b>(keyid, algo, data)
								</div>
								<div class="description">Sign data using referenced key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.stripLeadingZeros">stripLeadingZeros</a></b>(value)
								</div>
								<div class="description">Strips leading zeros of a ByteString</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#unblockUserPIN">unblockUserPIN</a></b>(initializationCode, newPIN)
								</div>
								<div class="description">Unblock and set User PIN</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#unwrapAndReplaceKey">unwrapAndReplaceKey</a></b>(id, keyblob)
								</div>
								<div class="description">Replace symmetric key value encrypted under current key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#unwrapKey">unwrapKey</a></b>(id, keyblob)
								</div>
								<div class="description">Unwrap key with DKEK</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#updateBinary">updateBinary</a></b>(fid, offset, data)
								</div>
								<div class="description">Update transparent EF referenced by file identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#updateKey">updateKey</a></b>(key)
								</div>
								<div class="description">Update key attributes, in particular the use counter</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#validateCertificateChain">validateCertificateChain</a></b>(crypto)
								</div>
								<div class="description">Validate device certificate chain</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">SmartCardHSM.<b><a href="../symbols/SmartCardHSM.html#.validateCertificateChain">validateCertificateChain</a></b>(crypto, devAutCert)
								</div>
								<div class="description">Validate device certificate chain</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#verifyCertificate">verifyCertificate</a></b>(cvc)
								</div>
								<div class="description">Verify card verifiable certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#verifyUserPIN">verifyUserPIN</a></b>(userPIN)
								</div>
								<div class="description">Verify User PIN</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSM.html#wrapKey">wrapKey</a></b>(id)
								</div>
								<div class="description">Wrap key under DKEK</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>SmartCardHSM</b>(card)
				</div>
				
				<div class="description">
					Create a SmartCard-HSM access object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Card}</span>  <b>card</b>
								
							</dt>
								<dd>the card object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="addCACertificateToMap"> </a>
					<div class="fixedFont">
					
					
					<b>addCACertificateToMap</b>(cert, id, label)
					
					</div>
					<div class="description">
						Add a new CA certificate to the map
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{X509}</span> <b>cert</b>
									
								</dt>
								<dd>the CA certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>id</b>
									
								</dt>
								<dd>the corresponding id</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the corresponding label</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addKeyToMap"> </a>
					<div class="fixedFont">
					
					
					<b>addKeyToMap</b>(key)
					
					</div>
					<div class="description">
						Add a new key to the map of keys
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{HSMKey}</span> <b>key</b>
									
								</dt>
								<dd>the HSM key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="associateXKEKKeyDomain"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>associateXKEKKeyDomain</b>(keyDomain, keyDomainUID, keyDomainAssociation, keyDomainAssociation)
					
					</div>
					<div class="description">
						Associate XKEK Key Domain
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyDomainUID</b>
									
								</dt>
								<dd>a encoded TLV object with tag 51 containing the key domain uid of the associated domain</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyDomainAssociation</b>
									
								</dt>
								<dd>a encoded TLV object with tag 56 or 57</dd>
							
								<dt>
									<b>keyDomainAssociation</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and the key domain UID{ByteString}</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".buildCertDescription"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ASN1}</span>
					<span class="light">SmartCardHSM.</span><b>buildCertDescription</b>(commonObjectFlags, label, pubKey, certFID)
					
					</div>
					<div class="description">
						Create a PKCS#15 certificate description
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>commonObjectFlags</b>
									
								</dt>
								<dd>default value is '0640'</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the key label</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>pubKey</b>
									
								</dt>
								<dd>the public key</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>certFID</b>
									
								</dt>
								<dd>the file identifier of the certificate</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate description</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".buildDataObjectDescription"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ASN1}</span>
					<span class="light">SmartCardHSM.</span><b>buildDataObjectDescription</b>(label, commonObjectFlags, fid, applicationName)
					
					</div>
					<div class="description">
						Create a PKCS#15 data object description
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the key label</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>commonObjectFlags</b>
									
								</dt>
								<dd>default value is '0640'</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the file identifier of the data object</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>applicationName</b>
									
								</dt>
								<dd>the application name (Default "SmartCard-HSM")</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the Data Object Description</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".buildGAKPwithECC"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">SmartCardHSM.</span><b>buildGAKPwithECC</b>(innerCAR, algo, chr, dp, outerCAR, privateKey)
					
					</div>
					<div class="description">
						Build input for Generate Asymmetric Key Pair command for generating an ECC key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>innerCAR</b>
									
								</dt>
								<dd>the CA the request shall be directed to</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>algo</b>
									
								</dt>
								<dd>the public key algorithm</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the certificate holder reference associated with this key</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>dp</b>
									
								</dt>
								<dd>the domain parameter for the key</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>outerCAR</b>
									
								</dt>
								<dd>the certificate holder reference of the public key for verifying the outer signature</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>privateKey</b>
									
								</dt>
								<dd>optional parameter to supply a private key value for import. This only works with the development version
             of the SmartCard-HSM.</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded C-Data for GENERATE ASYMMETRIC KEY PAIR</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".buildGAKPwithRSA"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">SmartCardHSM.</span><b>buildGAKPwithRSA</b>(innerCAR, algo, chr, keysize, outerCAR)
					
					</div>
					<div class="description">
						Build input for Generate Asymmetric Key Pair command for generating a RSA key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>innerCAR</b>
									
								</dt>
								<dd>the CA the request shall be directed to</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>algo</b>
									
								</dt>
								<dd>the public key algorithm</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the certificate holder reference associated with this key</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keysize</b>
									
								</dt>
								<dd>the module size in bits (1024, 1536 or 2048)</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>outerCAR</b>
									
								</dt>
								<dd>the certificate holder reference of the public key for verifying the outer signature</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded C-Data for GENERATE ASYMMETRIC KEY PAIR</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".buildKeyDomainDescription"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ASN1}</span>
					<span class="light">SmartCardHSM.</span><b>buildKeyDomainDescription</b>(label)
					
					</div>
					<div class="description">
						Create a PKCS#15 like KeyDomain description
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the key domain label</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the KeyDomain description</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".buildPrkDforECC"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ASN1}</span>
					<span class="light">SmartCardHSM.</span><b>buildPrkDforECC</b>(keyid, label, keysize)
					
					</div>
					<div class="description">
						Create a PKCS#15 PrivateECCKey description
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number/ByteString}</span> <b>keyid</b>
									
								</dt>
								<dd>the key identifier</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the key label</dd>
							
								<dt>
									<b>keysize</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the PrivateECCKey description</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".buildPrkDforRSA"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ASN1}</span>
					<span class="light">SmartCardHSM.</span><b>buildPrkDforRSA</b>(keyid, label, modulussize)
					
					</div>
					<div class="description">
						Create a PKCS#15 PrivateRSAKey description
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number/ByteString}</span> <b>keyid</b>
									
								</dt>
								<dd>the key identifier</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the key label</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>modulussize</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the PrivateECCKey description</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".buildSKDforAES"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ASN1}</span>
					<span class="light">SmartCardHSM.</span><b>buildSKDforAES</b>(keyid, label, keysize)
					
					</div>
					<div class="description">
						Create a PKCS#15 SecretKey description
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number/ByteString}</span> <b>keyid</b>
									
								</dt>
								<dd>the key identifier</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the key label</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keysize</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the secret key description</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="changeInitializationCode"> </a>
					<div class="fixedFont">
					
					
					<b>changeInitializationCode</b>(initializationCode, newInitializationCode)
					
					</div>
					<div class="description">
						Change InitializationCode
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>initializationCode</b>
									
								</dt>
								<dd>current initialization code</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>newInitializationCode</b>
									
								</dt>
								<dd>new initialization code</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="changeUserPIN"> </a>
					<div class="fixedFont">
					
					
					<b>changeUserPIN</b>(currentPIN, newPIN)
					
					</div>
					<div class="description">
						Change User PIN
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>currentPIN</b>
									
								</dt>
								<dd>current user PIN value</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>newPIN</b>
									
								</dt>
								<dd>new user PIN value</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="createXKEKKeyDomain"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>createXKEKKeyDomain</b>(keyDomain, keyDomainMembership, keyDomainMembership)
					
					</div>
					<div class="description">
						Create XKEK Key Domain
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyDomainMembership</b>
									
								</dt>
								<dd>either a 64 byte signature (old format) or a encoded TLV object with tag 54 or 55</dd>
							
								<dt>
									<b>keyDomainMembership</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and the key domain UID{ByteString}</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="decipher"> </a>
					<div class="fixedFont">
					
					
					<b>decipher</b>(keyid, algo, data)
					
					</div>
					<div class="description">
						Decipher cryptogram or agree shared secret using Diffie-Hellman
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyid</b>
									
								</dt>
								<dd>the key identifier</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>algo</b>
									
								</dt>
								<dd>the algorithm identifier</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>the the cryptogram or concatenation of x || y of ECC public key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the plain output</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".decodeAlgorithmList"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String[]}</span>
					<span class="light">SmartCardHSM.</span><b>decodeAlgorithmList</b>(list)
					
					</div>
					<div class="description">
						Decode algorithm list and return string array with names
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>list</b>
									
								</dt>
								<dd>the algorithm list, e.g. as returned in the key meta data</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of algorithm names</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="deleteDataObject"> </a>
					<div class="fixedFont">
					
					
					<b>deleteDataObject</b>(label)
					
					</div>
					<div class="description">
						Delete the data object references by the label.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the label of the data object</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="deleteFile"> </a>
					<div class="fixedFont">
					
					
					<b>deleteFile</b>(fid)
					
					</div>
					<div class="description">
						Delete file system object (EF or key)
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the two byte file object identifier</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="deleteKEK"> </a>
					<div class="fixedFont">
					
					
					<b>deleteKEK</b>(keyDomain)
					
					</div>
					<div class="description">
						Delete the key encryption key in a key domain
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>the number of the key domain</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="deleteKeyDomain"> </a>
					<div class="fixedFont">
					
					
					<b>deleteKeyDomain</b>(keyDomain)
					
					</div>
					<div class="description">
						Delete the empty key domain
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>the number of the key domain</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="deriveSymmetricKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>deriveSymmetricKey</b>(id, algo, derivationParam)
					
					</div>
					<div class="description">
						Derive Symmetric Key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>id</b>
									
								</dt>
								<dd>key id</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>algo</b>
									
								</dt>
								<dd>algorithm id (one of ALG_CBC_ENC, ALG_CBC_DEC, ALG_CMAC or ALG_DERIVE_SP800_56C)</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>derivationParam</b>
									
								</dt>
								<dd>the derivation parameter</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>derived key value</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="deriveXKEK"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>deriveXKEK</b>(keyDomain, derivationParam, derivationParam)
					
					</div>
					<div class="description">
						Derive XKEK
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>derivationParam</b>
									
								</dt>
								<dd></dd>
							
								<dt>
									<b>derivationParam</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and the key domain UID{ByteString}</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="determineFreeCAId"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>determineFreeCAId</b>()
					
					</div>
					<div class="description">
						Determine an unused CA certificate identifier
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a free CA certificate identifier or -1 if all identifier in use</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".determineFreeFid"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">SmartCardHSM.</span><b>determineFreeFid</b>(the, the)
					
					</div>
					<div class="description">
						Determine a free FID in the list of FID for the given prefix.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>the</b>
									
								</dt>
								<dd>prefix to look at</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>list of FID as returned from the device</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a free two byte file identifier (FID) for the given prefix or null if range is exhausted.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".determineFreeId"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{Number}</span>
					<span class="light">SmartCardHSM.</span><b>determineFreeId</b>(the, the)
					
					</div>
					<div class="description">
						Determine a free id in the list of FID for the given prefix.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>the</b>
									
								</dt>
								<dd>prefix to look at</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>list of FID as returned from the device</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a free id for the given prefix or -1 if range is exhausted.</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="determineFreeKeyId"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>determineFreeKeyId</b>()
					
					</div>
					<div class="description">
						Determine an unused key identifier
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a free key identifier or -1 if all key identifier in use</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".disableUTSRCA"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">SmartCardHSM.</span><b>disableUTSRCA</b>()
					
					</div>
					<div class="description">
						Remove Root Certificate of Development SRCA

Always call this on a productive system
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name=".dumpKeyData"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">SmartCardHSM.</span><b>dumpKeyData</b>(keydata)
					
					</div>
					<div class="description">
						Dump C-Data of Generate Asymmetric Key Pair command
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keydata</b>
									
								</dt>
								<dd>the content of C-Data</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name=".encodeAlgorithmList"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">SmartCardHSM.</span><b>encodeAlgorithmList</b>(list)
					
					</div>
					<div class="description">
						Parse and encode the algorithm list containing either algorithm ids or names
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String | String[]}</span> <b>list</b>
									
								</dt>
								<dd>the list of algorithms</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the algorithm list</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="enumerateCACertificates"> </a>
					<div class="fixedFont">
					
					<span class="light">{String[]}</span>
					<b>enumerateCACertificates</b>()
					
					</div>
					<div class="description">
						Enumerate CA certificates
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of certificate labels</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="enumerateDataObjects"> </a>
					<div class="fixedFont">
					
					<span class="light">{String[]}</span>
					<b>enumerateDataObjects</b>()
					
					</div>
					<div class="description">
						Enumerate Data Objects
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of data object labels</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="enumerateKeys"> </a>
					<div class="fixedFont">
					
					<span class="light">{String[]}</span>
					<b>enumerateKeys</b>()
					
					</div>
					<div class="description">
						Enumerate key objects in the SmartCard-HSM and build the map of keys
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of key labels</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="enumerateObjects"> </a>
					<div class="fixedFont">
					
					
					<b>enumerateObjects</b>()
					
					</div>
					<div class="description">
						Enumerate Objects
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the enumeration</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateAsymmetricKeyPair"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>generateAsymmetricKeyPair</b>(newkid, signkid, keydata)
					
					</div>
					<div class="description">
						Generate an asymmetric key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>newkid</b>
									
								</dt>
								<dd>key identifier for new key</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>signkid</b>
									
								</dt>
								<dd>key identifier for signing the new public key</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keydata</b>
									
								</dt>
								<dd>the key data template</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate signing request containing the new public key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateRandom"> </a>
					<div class="fixedFont">
					
					
					<b>generateRandom</b>(length)
					
					</div>
					<div class="description">
						Generate random data
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>length</b>
									
								</dt>
								<dd>number of bytes</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the random bytes</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateSymmetricKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>generateSymmetricKey</b>(newkid, algo, keydata)
					
					</div>
					<div class="description">
						Generate a symmetric key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>newkid</b>
									
								</dt>
								<dd>key identifier for new key</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>algo</b>
									
								</dt>
								<dd>key generation algorithm</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keydata</b>
									
								</dt>
								<dd>the key data template</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd></dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCACertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getCACertificate</b>(label)
					
					</div>
					<div class="description">
						Return CA certificate with label
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the certificate label</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCrypto"> </a>
					<div class="fixedFont">
					
					<span class="light">{HSMCrypto}</span>
					<b>getCrypto</b>()
					
					</div>
					<div class="description">
						Get crypto object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the HSMCrypto object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getDataObjectFileIdentifier"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getDataObjectFileIdentifier</b>(label)
					
					</div>
					<div class="description">
						Return the file identifier containing the data object.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the label.</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the two byte file identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getFreeMemory"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getFreeMemory</b>()
					
					</div>
					<div class="description">
						Determine free memory
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the number of available bytes (this values is capped to 32767 on JCOP 2.4.1)</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getKey</b>(labelOrId)
					
					</div>
					<div class="description">
						Get a key reference object
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number/ByteString}</span> <b>labelOrId</b>
									
								</dt>
								<dd>label or id of key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getKeyDomainLabel"> </a>
					<div class="fixedFont">
					
					
					<b>getKeyDomainLabel</b>(keyDomain)
					
					</div>
					<div class="description">
						Return the label associated with the key domain or undefined.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>the number of the key domain</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="getKeyIds"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number[]}</span>
					<b>getKeyIds</b>()
					
					</div>
					<div class="description">
						Get key ids
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a list of key identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getKeys"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a>[]}</span>
					<b>getKeys</b>()
					
					</div>
					<div class="description">
						Return a list of key objects
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of keys</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getLabel"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getLabel</b>()
					
					</div>
					<div class="description">
						Get Token Label
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the token label from CIAInfo</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getNativeCardService"> </a>
					<div class="fixedFont">
					
					<span class="light">{de.cardcontact.opencard.service.smartcardhsm.SmartCardHSMCardService}</span>
					<b>getNativeCardService</b>()
					
					</div>
					<div class="description">
						Return the native OCF SmartCardHSMCardService
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the OCF SmartCardHSMCardService</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getProvisioningURL"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getProvisioningURL</b>()
					
					</div>
					<div class="description">
						Get ProvisioningURL
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the configured ProvisioningURL or undefined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getTokenManagementKeyKCV"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getTokenManagementKeyKCV</b>()
					
					</div>
					<div class="description">
						Get Key Check Value of Token Management Key
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the configured KCV of the Token Management Key or undefined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getTokenManagementKeySalt"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getTokenManagementKeySalt</b>()
					
					</div>
					<div class="description">
						Get salt for SO-PIN derivation using  the Token Management Key
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the configured salt</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getVersionInfo"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getVersionInfo</b>()
					
					</div>
					<div class="description">
						Return a string describing the SmartCard-HSM Version
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the version string</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasDataObject"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>hasDataObject</b>(label)
					
					</div>
					<div class="description">
						Check if the data object is present
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the label</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if the data object exists</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="hasFile"> </a>
					<div class="fixedFont">
					
					
					<b>hasFile</b>(fid)
					
					</div>
					<div class="description">
						Try selecting the file to see if is present
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the two byte file object identifier</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="importDataObject"> </a>
					<div class="fixedFont">
					
					
					<b>importDataObject</b>(label, privObj, data)
					
					</div>
					<div class="description">
						Import a data object
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the unique label to reference the new data object</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>privObj</b>
									
								</dt>
								<dd>true to store the data object with read protection</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>the data blob to store</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="importEncryptedKeyShare"> </a>
					<div class="fixedFont">
					
					
					<b>importEncryptedKeyShare</b>(keyshare, password, keyDomain)
					
					</div>
					<div class="description">
						Decrypt and import a DKEK share
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyshare</b>
									
								</dt>
								<dd>the encrypted key share as read from the .pbe file</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>password</b>
									
								</dt>
								<dd>the password</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>the number of the key domain</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>object with properties sw{Number}, shares{Number}, outstanding{Number} and kcv{ByteString}</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="importKeyShare"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>importKeyShare</b>(keyDomain, keyshare)
					
					</div>
					<div class="description">
						Import DKEK share or query status
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>the number of the key domain</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyshare</b>
									
								</dt>
								<dd>32 byte key share</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>object with properties sw{Number}, shares{Number}, outstanding{Number} and kcv{ByteString}</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="initDevice"> </a>
					<div class="fixedFont">
					
					
					<b>initDevice</b>(options, initialPIN, initializationCode, retryCounterInitial, keyshares)
					
					</div>
					<div class="description">
						Initialize device and clear all keys and files
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>options</b>
									
								</dt>
								<dd>two byte option mask</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>initialPIN</b>
									
								</dt>
								<dd>initial user PIN value</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>initializationCode</b>
									
								</dt>
								<dd>secret code for device initialization (set during first use)</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>retryCounterInitial</b>
									
								</dt>
								<dd>retry counter for user PIN</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyshares</b>
									
								</dt>
								<dd>number of device key encryption key shares (optional)</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="isInitialized"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>isInitialized</b>()
					
					</div>
					<div class="description">
						Return true is SmartCard-HSM is initialized
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if initialized</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isPINResetEnabled"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>isPINResetEnabled</b>()
					
					</div>
					<div class="description">
						Check if the RESET RETRY COUNTER command can reset the PIN
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if enable during initialization</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isResetRetryCounterEnabled"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>isResetRetryCounterEnabled</b>()
					
					</div>
					<div class="description">
						Check if the RESET RETRY COUNTER command is enabled
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if enable during initialization</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="logout"> </a>
					<div class="fixedFont">
					
					
					<b>logout</b>()
					
					</div>
					<div class="description">
						Logout
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="openSecureChannel"> </a>
					<div class="fixedFont">
					
					<span class="light">{ISOSecureChannel}</span>
					<b>openSecureChannel</b>(crypto, devAuthPK)
					
					</div>
					<div class="description">
						Open a secure channel using device authentication
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>the crypto provider to use</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>devAuthPK</b>
									
								</dt>
								<dd>the device authentication public key</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>Key.AES</b>
									
								</dt>
								<dd>or Key.DES to request AES or DES secure messaging (Default probe)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the initialized secure channel</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".parseCertificateList"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>[]}</span>
					<span class="light">SmartCardHSM.</span><b>parseCertificateList</b>(a)
					
					</div>
					<div class="description">
						Parse list of CVC in a binary blob
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>a</b>
									
								</dt>
								<dd>binary blob (e.g an EF) containing concatenated CVCs</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the list of CVCs</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="parseKeyDomainStatus"> </a>
					<div class="fixedFont">
					
					<span class="light">{object}</span>
					<b>parseKeyDomainStatus</b>(status)
					
					</div>
					<div class="description">
						Parse the key domain status returned from the device
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>status</b>
									
								</dt>
								<dd>the R-DATA from the MANAGE KEY DOMAIN command</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the decoded status Info</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="queryInitializationCodeStatus"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>queryInitializationCodeStatus</b>()
					
					</div>
					<div class="description">
						Request Initialization Code Status
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the status word SW1/SW2 returned by the device</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="queryKeyDomainStatus"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>queryKeyDomainStatus</b>(keyDomain)
					
					</div>
					<div class="description">
						Query the status of the key domain
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>the number of the key domain which will be queried, default is 0</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and for a XKEK key domain the key domain UID{ByteString}</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="queryPINStatus"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>queryPINStatus</b>(p2)
					
					</div>
					<div class="description">
						Request PIN Status Information
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>p2</b>
									
								</dt>
								<dd>the PIN object id</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the status word SW1/SW2 returned by the device</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="queryUserPINStatus"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>queryUserPINStatus</b>()
					
					</div>
					<div class="description">
						Request PIN Status Information
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the status word SW1/SW2 returned by the device</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="readBinary"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>readBinary</b>(fid, offset, length)
					
					</div>
					<div class="description">
						Read transparent EF referenced by file identifier
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the two byte file identifier (optional - use currently selected EF if absent)</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>offset</b>
									
								</dt>
								<dd>the offset into the EF (optional)</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>length</b>
									
								</dt>
								<dd>the number of byte to read (optional)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the data read from the EF</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="selectFile"> </a>
					<div class="fixedFont">
					
					
					<b>selectFile</b>(fid)
					
					</div>
					<div class="description">
						Select the file or key an return the FCP
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the two byte file object identifier</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name=".setTrustedSRCACertificates"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					
					<span class="light">SmartCardHSM.</span><b>setTrustedSRCACertificates</b>(srcalist)
					
					</div>
					<div class="description">
						Set the list of trusted SRCA certificates
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString[]}</span> <b>srcalist</b>
									
								</dt>
								<dd>the list of binary encoded SRCA certificates</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="sign"> </a>
					<div class="fixedFont">
					
					
					<b>sign</b>(keyid, algo, data)
					
					</div>
					<div class="description">
						Sign data using referenced key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyid</b>
									
								</dt>
								<dd>the key identifier for signing</dd>
							
								<dt>
									<span class="light fixedFont">{algo}</span> <b>algo</b>
									
								</dt>
								<dd>the algorithm identifier</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>the data to be signed</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the signature value</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".stripLeadingZeros"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{ByteString}</span>
					<span class="light">SmartCardHSM.</span><b>stripLeadingZeros</b>(value)
					
					</div>
					<div class="description">
						Strips leading zeros of a ByteString
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>value</b>
									
								</dt>
								<dd>the ByteString value</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the stripped ByteString object, may be an empty ByteString</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="unblockUserPIN"> </a>
					<div class="fixedFont">
					
					
					<b>unblockUserPIN</b>(initializationCode, newPIN)
					
					</div>
					<div class="description">
						Unblock and set User PIN
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>initializationCode</b>
									
								</dt>
								<dd>the initialization code</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>newPIN</b>
									
								</dt>
								<dd>new user PIN value (optional)</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="unwrapAndReplaceKey"> </a>
					<div class="fixedFont">
					
					
					<b>unwrapAndReplaceKey</b>(id, keyblob)
					
					</div>
					<div class="description">
						Replace symmetric key value encrypted under current key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>id</b>
									
								</dt>
								<dd>key id</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyblob</b>
									
								</dt>
								<dd>the wrapped key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="unwrapKey"> </a>
					<div class="fixedFont">
					
					
					<b>unwrapKey</b>(id, keyblob)
					
					</div>
					<div class="description">
						Unwrap key with DKEK
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>id</b>
									
								</dt>
								<dd>key id</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyblob</b>
									
								</dt>
								<dd>the wrapped key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="updateBinary"> </a>
					<div class="fixedFont">
					
					
					<b>updateBinary</b>(fid, offset, data)
					
					</div>
					<div class="description">
						Update transparent EF referenced by file identifier
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>fid</b>
									
								</dt>
								<dd>the two byte file identifier</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>offset</b>
									
								</dt>
								<dd>the offset into the EF</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>the data to write</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="updateKey"> </a>
					<div class="fixedFont">
					
					
					<b>updateKey</b>(key)
					
					</div>
					<div class="description">
						Update key attributes, in particular the use counter
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{HSMKey}</span> <b>key</b>
									
								</dt>
								<dd>the HSM key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="validateCertificateChain"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>validateCertificateChain</b>(crypto)
					
					</div>
					<div class="description">
						Validate device certificate chain
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>the crypto provider to use</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the device authentication public key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".validateCertificateChain"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{Key}</span>
					<span class="light">SmartCardHSM.</span><b>validateCertificateChain</b>(crypto, devAutCert)
					
					</div>
					<div class="description">
						Validate device certificate chain
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>the crypto provider to use</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>devAutCert</b>
									
								</dt>
								<dd>the device certificate chain read from EF.C_DevAut</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the device authentication public key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="verifyCertificate"> </a>
					<div class="fixedFont">
					
					
					<b>verifyCertificate</b>(cvc)
					
					</div>
					<div class="description">
						Verify card verifiable certificate
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>cvc</b>
									
								</dt>
								<dd>the card verifiable certificate</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="verifyUserPIN"> </a>
					<div class="fixedFont">
					
					
					<b>verifyUserPIN</b>(userPIN)
					
					</div>
					<div class="description">
						Verify User PIN
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>userPIN</b>
									
								</dt>
								<dd>user PIN value</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the status word SW1/SW2 returned by the device</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="wrapKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>wrapKey</b>(id)
					
					</div>
					<div class="description">
						Wrap key under DKEK
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>id</b>
									
								</dt>
								<dd>key id</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>key blob with encrypted key value</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - SmartCardHSMCrypto</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class SmartCardHSMCrypto
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Wrapper to provide Crypto interface to SmartCard-HSM
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_SmartCardHSM.js.html">SmartCardHSM.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class SmartCardHSMCrypto.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/SmartCardHSMCrypto.html#constructor">SmartCardHSMCrypto</a></b>(crypto)
							</div>
							<div class="description">Create crypto object implementing access to the SmartCard-HSM</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class SmartCardHSMCrypto.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMCrypto.html#decrypt">decrypt</a></b>(key, mech, data, iv)
								</div>
								<div class="description">Decrypt a message using the defined mechanism and key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMCrypto.html#encrypt">encrypt</a></b>(key, mech, data, iv)
								</div>
								<div class="description">Encrypt a message using the defined mechanism and key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMCrypto.html#sign">sign</a></b>(key, mech, message)
								</div>
								<div class="description">Sign a message using the defined mechanism and key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMCrypto.html#verify">verify</a></b>(key, mech, message, signature)
								</div>
								<div class="description">Verify a message using the defined mechanism and key</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>SmartCardHSMCrypto</b>(crypto)
				</div>
				
				<div class="description">
					Create crypto object implementing access to the SmartCard-HSM
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the backend crypto provider</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="decrypt"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>decrypt</b>(key, mech, data, iv)
					
					</div>
					<div class="description">
						Decrypt a message using the defined mechanism and key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{HSMKey}</span> <b>key</b>
									
								</dt>
								<dd>the key</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>mech</b>
									
								</dt>
								<dd>the mechanism (e.g. Crypto.RSA_PKCS1)</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>the cryptogram</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>iv</b>
									
								</dt>
								<dd>the initialization vector for symmetric ciphers</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the plain text</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="encrypt"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>encrypt</b>(key, mech, data, iv)
					
					</div>
					<div class="description">
						Encrypt a message using the defined mechanism and key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{HSMKey}</span> <b>key</b>
									
								</dt>
								<dd>the key</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>mech</b>
									
								</dt>
								<dd>the mechanism (e.g. Crypto.RSA_PKCS1)</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>the cryptogram</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>iv</b>
									
								</dt>
								<dd>the initialization vector for symmetric ciphers</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the plain text</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="sign"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>sign</b>(key, mech, message)
					
					</div>
					<div class="description">
						Sign a message using the defined mechanism and key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{HSMKey}</span> <b>key</b>
									
								</dt>
								<dd>the private key</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>mech</b>
									
								</dt>
								<dd>the mechanism (e.g. Crypto.ECDSA)</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>message</b>
									
								</dt>
								<dd>the message to be signed</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the signature</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="verify"> </a>
					<div class="fixedFont">
					
					<span class="light">{Boolean}</span>
					<b>verify</b>(key, mech, message, signature)
					
					</div>
					<div class="description">
						Verify a message using the defined mechanism and key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>key</b>
									
								</dt>
								<dd>the public key</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>mech</b>
									
								</dt>
								<dd>the mechanism (e.g. Crypto.ECDSA)</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>message</b>
									
								</dt>
								<dd>the message to be signed</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>signature</b>
									
								</dt>
								<dd>the signature to verify</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if signature is valid</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - SmartCardHSMInitializer</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class SmartCardHSMInitializer
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing the device initialization methods
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_SmartCardHSM.js.html">SmartCardHSM.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class SmartCardHSMInitializer.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/SmartCardHSMInitializer.html#constructor">SmartCardHSMInitializer</a></b>(card)
							</div>
							<div class="description">Initialize SmartCard-HSM</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class SmartCardHSMInitializer.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#initialize">initialize</a></b>()
								</div>
								<div class="description">Perform Initialization</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setBioTemplate">setBioTemplate</a></b>(slot, aid, param)
								</div>
								<div class="description">Select the biometric matching server for a one of the biometric templates</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setCombinedAuthenticationMode">setCombinedAuthenticationMode</a></b>(enable)
								</div>
								<div class="description">Enable the combined authentication mode of user pin and public key authentication.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setDKEKShares">setDKEKShares</a></b>(keyshares)
								</div>
								<div class="description">Set the number of DKEK shares</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setInitializationCode">setInitializationCode</a></b>(initializationCode)
								</div>
								<div class="description">Set the initialization code</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setKeyDomains">setKeyDomains</a></b>(keyDomains)
								</div>
								<div class="description">Set the number of key domains</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setLabel">setLabel</a></b>(label)
								</div>
								<div class="description">Set the label to be written to a minimal CIAInfo in EF 2F03</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setProvisioningURL">setProvisioningURL</a></b>(provisioningURL)
								</div>
								<div class="description">Set the provisioning URL to be written to fixed parameter in CB00.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setPublicKeyAuthenticationParameter">setPublicKeyAuthenticationParameter</a></b>(requiredPublicKeysForAuthentication, numberOfPublicKeys)
								</div>
								<div class="description">Set parameter for public key authentication with n-of-m scheme, namely the values for n and m</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setReplacePKAKeyMode">setReplacePKAKeyMode</a></b>(enable)
								</div>
								<div class="description">Enable or disable replacing of a PKA key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setResetRetryCounterMode">setResetRetryCounterMode</a></b>(enable)
								</div>
								<div class="description">Enable or disable RESET RETRY COUNTER command</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setResetRetryCounterResetOnlyMode">setResetRetryCounterResetOnlyMode</a></b>(resetOnly)
								</div>
								<div class="description">If enabled RESET RETRY COUNTER only resets the error counter.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setRetryCounterInitial">setRetryCounterInitial</a></b>(retryCounterInitial)
								</div>
								<div class="description">Set the retry counter

The SmartCard-HSM enforces a retry counter <= 3 for PIN length 6
The SmartCard-HSM enforces a retry counter <= 5 for PIN length 7
The SmartCard-HSM enforces a retry counter <= 10 for PIN length larger than 7</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setSessionPINMode">setSessionPINMode</a></b>(0)
								</div>
								<div class="description">Enable or disable session PIN mode</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setTokenManagementKey">setTokenManagementKey</a></b>(kcv, salt)
								</div>
								<div class="description">Set the key check value of the token management key and the optional salt
used for SO-PIN derivation</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setTransportPINMode">setTransportPINMode</a></b>(enable)
								</div>
								<div class="description">Enable or disable transport PIN mode</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMInitializer.html#setUserPIN">setUserPIN</a></b>(userPIN)
								</div>
								<div class="description">Set the User PIN</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>SmartCardHSMInitializer</b>(card)
				</div>
				
				<div class="description">
					Initialize SmartCard-HSM
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Card}</span>  <b>card</b>
								
							</dt>
								<dd>the card object</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="initialize"> </a>
					<div class="fixedFont">
					
					
					<b>initialize</b>()
					
					</div>
					<div class="description">
						Perform Initialization
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="setBioTemplate"> </a>
					<div class="fixedFont">
					
					
					<b>setBioTemplate</b>(slot, aid, param)
					
					</div>
					<div class="description">
						Select the biometric matching server for a one of the biometric templates
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>slot</b>
									
								</dt>
								<dd>either 0 or 1 for first or second template</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>aid</b>
									
								</dt>
								<dd>the application identifier of the on-card biometric server</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>param</b>
									
								</dt>
								<dd>one byte parameter passed to the server during initialization</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setCombinedAuthenticationMode"> </a>
					<div class="fixedFont">
					
					
					<b>setCombinedAuthenticationMode</b>(enable)
					
					</div>
					<div class="description">
						Enable the combined authentication mode of user pin and public key authentication.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>enable</b>
									
								</dt>
								<dd>true (non-default) to require public key authentication and user authentication</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setDKEKShares"> </a>
					<div class="fixedFont">
					
					
					<b>setDKEKShares</b>(keyshares)
					
					</div>
					<div class="description">
						Set the number of DKEK shares
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyshares</b>
									
								</dt>
								<dd>number of DKEK shares in the range 0 to 255</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setInitializationCode"> </a>
					<div class="fixedFont">
					
					
					<b>setInitializationCode</b>(initializationCode)
					
					</div>
					<div class="description">
						Set the initialization code
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>initializationCode</b>
									
								</dt>
								<dd>an 8 byte code</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setKeyDomains"> </a>
					<div class="fixedFont">
					
					
					<b>setKeyDomains</b>(keyDomains)
					
					</div>
					<div class="description">
						Set the number of key domains
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomains</b>
									
								</dt>
								<dd>number of key domains</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setLabel"> </a>
					<div class="fixedFont">
					
					
					<b>setLabel</b>(label)
					
					</div>
					<div class="description">
						Set the label to be written to a minimal CIAInfo in EF 2F03
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>label</b>
									
								</dt>
								<dd>the label</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setProvisioningURL"> </a>
					<div class="fixedFont">
					
					
					<b>setProvisioningURL</b>(provisioningURL)
					
					</div>
					<div class="description">
						Set the provisioning URL to be written to fixed parameter in CB00.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>provisioningURL</b>
									
								</dt>
								<dd>the URL at which this SE will be provisioned</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setPublicKeyAuthenticationParameter"> </a>
					<div class="fixedFont">
					
					
					<b>setPublicKeyAuthenticationParameter</b>(requiredPublicKeysForAuthentication, numberOfPublicKeys)
					
					</div>
					<div class="description">
						Set parameter for public key authentication with n-of-m scheme, namely the values for n and m
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>requiredPublicKeysForAuthentication</b>
									
								</dt>
								<dd>number of key that must be authenticated for access</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>numberOfPublicKeys</b>
									
								</dt>
								<dd>to register</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setReplacePKAKeyMode"> </a>
					<div class="fixedFont">
					
					
					<b>setReplacePKAKeyMode</b>(enable)
					
					</div>
					<div class="description">
						Enable or disable replacing of a PKA key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>enable</b>
									
								</dt>
								<dd>true (non-default) to allow replacing of a PKA key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setResetRetryCounterMode"> </a>
					<div class="fixedFont">
					
					
					<b>setResetRetryCounterMode</b>(enable)
					
					</div>
					<div class="description">
						Enable or disable RESET RETRY COUNTER command
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>enable</b>
									
								</dt>
								<dd>true (default) to allow RESET RETRY COUNTER command to reset user PIN using the initialization code</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setResetRetryCounterResetOnlyMode"> </a>
					<div class="fixedFont">
					
					
					<b>setResetRetryCounterResetOnlyMode</b>(resetOnly)
					
					</div>
					<div class="description">
						If enabled RESET RETRY COUNTER only resets the error counter.
Otherwise  RRC allows changing the PIN
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>resetOnly</b>
									
								</dt>
								<dd>true to only reset the error counter, false otherwise (default)</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setRetryCounterInitial"> </a>
					<div class="fixedFont">
					
					
					<b>setRetryCounterInitial</b>(retryCounterInitial)
					
					</div>
					<div class="description">
						Set the retry counter

The SmartCard-HSM enforces a retry counter <= 3 for PIN length 6
The SmartCard-HSM enforces a retry counter <= 5 for PIN length 7
The SmartCard-HSM enforces a retry counter <= 10 for PIN length larger than 7
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>retryCounterInitial</b>
									
								</dt>
								<dd>in the range 1 to 10.</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSessionPINMode"> </a>
					<div class="fixedFont">
					
					
					<b>setSessionPINMode</b>(0)
					
					</div>
					<div class="description">
						Enable or disable session PIN mode
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>0</b>
									
								</dt>
								<dd>- disable, 1 - enable with clear-on-reset 3 - enable with explicit clearing</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setTokenManagementKey"> </a>
					<div class="fixedFont">
					
					
					<b>setTokenManagementKey</b>(kcv, salt)
					
					</div>
					<div class="description">
						Set the key check value of the token management key and the optional salt
used for SO-PIN derivation
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>kcv</b>
									
								</dt>
								<dd>the key check value of the token management key</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>salt</b>
									
								</dt>
								<dd>the salt used to derive the SO-PIN</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setTransportPINMode"> </a>
					<div class="fixedFont">
					
					
					<b>setTransportPINMode</b>(enable)
					
					</div>
					<div class="description">
						Enable or disable transport PIN mode
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>enable</b>
									
								</dt>
								<dd>true (non-default) to set user PIN to transport state</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setUserPIN"> </a>
					<div class="fixedFont">
					
					
					<b>setUserPIN</b>(userPIN)
					
					</div>
					<div class="description">
						Set the User PIN
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>userPIN</b>
									
								</dt>
								<dd>a 6 to 16 byte code</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - SmartCardHSMKey</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class SmartCardHSMKey
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing key access
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_SmartCardHSM.js.html">SmartCardHSM.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class SmartCardHSMKey.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/SmartCardHSMKey.html#constructor">SmartCardHSMKey</a></b>(sc, id)
							</div>
							<div class="description">Create a key access object</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class SmartCardHSMKey.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKey.html#decrypt">decrypt</a></b>(mech, data, iv)
								</div>
								<div class="description">Decrypt data using a key in the SmartCard-HSM</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKey.html#encrypt">encrypt</a></b>(mech, data, iv)
								</div>
								<div class="description">Encrypt data using a key in the SmartCard-HSM</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKey.html#getId">getId</a></b>()
								</div>
								<div class="description">Return the key identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKey.html#getLabel">getLabel</a></b>()
								</div>
								<div class="description">Return the key label as encoded in the PKCS#15 structure</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKey.html#getPKCS15Id">getPKCS15Id</a></b>()
								</div>
								<div class="description">Return the key id as encoded in the PKCS#15 structure</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKey.html#getSize">getSize</a></b>()
								</div>
								<div class="description">Return the key size in bits</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKey.html#getType">getType</a></b>()
								</div>
								<div class="description">Return the key type</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKey.html#setDescription">setDescription</a></b>(desc)
								</div>
								<div class="description">Set the PKCS#15 private key description</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKey.html#sign">sign</a></b>(mech, data)
								</div>
								<div class="description">Sign data using a key in the SmartCard-HSM</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKey.html#toString">toString</a></b>()
								</div>
								<div class="description">Return human readable string</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>SmartCardHSMKey</b>(sc, id)
				</div>
				
				<div class="description">
					Create a key access object
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/SmartCardHSM.html">SmartCardHSM</a>}</span>  <b>sc</b>
								
							</dt>
								<dd>the card access object</dd>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>id</b>
								
							</dt>
								<dd>the key identifier</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="decrypt"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>decrypt</b>(mech, data, iv)
					
					</div>
					<div class="description">
						Decrypt data using a key in the SmartCard-HSM
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>mech</b>
									
								</dt>
								<dd>the decipher mechanism</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>to be deciphered</dd>
							
								<dt>
									<b>iv</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the plain message</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="encrypt"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>encrypt</b>(mech, data, iv)
					
					</div>
					<div class="description">
						Encrypt data using a key in the SmartCard-HSM
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>mech</b>
									
								</dt>
								<dd>the encipherr mechanism</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>to be enciphered</dd>
							
								<dt>
									<b>iv</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the plain message</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getId"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getId</b>()
					
					</div>
					<div class="description">
						Return the key identifier
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getLabel"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getLabel</b>()
					
					</div>
					<div class="description">
						Return the key label as encoded in the PKCS#15 structure
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key label</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPKCS15Id"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getPKCS15Id</b>()
					
					</div>
					<div class="description">
						Return the key id as encoded in the PKCS#15 structure
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSize"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getSize</b>()
					
					</div>
					<div class="description">
						Return the key size in bits
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key size in bits</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getType"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getType</b>()
					
					</div>
					<div class="description">
						Return the key type
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key type</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setDescription"> </a>
					<div class="fixedFont">
					
					
					<b>setDescription</b>(desc)
					
					</div>
					<div class="description">
						Set the PKCS#15 private key description
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>desc</b>
									
								</dt>
								<dd>the description</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="sign"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>sign</b>(mech, data)
					
					</div>
					<div class="description">
						Sign data using a key in the SmartCard-HSM
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>mech</b>
									
								</dt>
								<dd>the signing mechanism</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>to be signed</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the signature</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="toString"> </a>
					<div class="fixedFont">
					
					
					<b>toString</b>()
					
					</div>
					<div class="description">
						Return human readable string
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - SmartCardHSMKeySpecGenerator</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class SmartCardHSMKeySpecGenerator
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing an encoder for the C-Data required in GENERATE ASYMMETRIC KEY PAIR
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_SmartCardHSM.js.html">SmartCardHSM.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class SmartCardHSMKeySpecGenerator.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/SmartCardHSMKeySpecGenerator.html#constructor">SmartCardHSMKeySpecGenerator</a></b>(keytype, keysizeOrDP)
							</div>
							<div class="description">Create a key specification generator instance</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class SmartCardHSMKeySpecGenerator.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKeySpecGenerator.html#encode">encode</a></b>()
								</div>
								<div class="description">Return the encoded key specification</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKeySpecGenerator.html#setAlgorithms">setAlgorithms</a></b>(algorithms)
								</div>
								<div class="description">Set algorithm list</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKeySpecGenerator.html#setCHR">setCHR</a></b>(CHR)
								</div>
								<div class="description">Set certificate holder reference for key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKeySpecGenerator.html#setInnerCAR">setInnerCAR</a></b>(CAR)
								</div>
								<div class="description">Set certificate holder reference of CA this request shall be sent to</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKeySpecGenerator.html#setKeyDomain">setKeyDomain</a></b>(keyDomain)
								</div>
								<div class="description">Set key domain</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKeySpecGenerator.html#setKeyUseCounter">setKeyUseCounter</a></b>(keyUseCounter)
								</div>
								<div class="description">Set key use counter for key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKeySpecGenerator.html#setOuterCAR">setOuterCAR</a></b>(CAR)
								</div>
								<div class="description">Set holder reference of the key signing this request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMKeySpecGenerator.html#setWrappingKey">setWrappingKey</a></b>(wrappingKey)
								</div>
								<div class="description">Set wrapping key</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>SmartCardHSMKeySpecGenerator</b>(keytype, keysizeOrDP)
				</div>
				
				<div class="description">
					Create a key specification generator instance
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Number}</span>  <b>keytype</b>
								
							</dt>
								<dd>must be either Crypto.RSA, Crypto.EC or Crypto.AES</dd>
						
							<dt>
								<span class="light fixedFont">{Number/Key}</span>  <b>keysizeOrDP</b>
								
							</dt>
								<dd>must be 1024, 1536, 2048, 3072 or 4096 for RSA, 128, 192 or 256 for AES and key object with Key.ECC_CURVE_OID set for EC</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="encode"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>encode</b>()
					
					</div>
					<div class="description">
						Return the encoded key specification
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded C-Data for GENERATE ASYMMETRIC KEY PAIR</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setAlgorithms"> </a>
					<div class="fixedFont">
					
					
					<b>setAlgorithms</b>(algorithms)
					
					</div>
					<div class="description">
						Set algorithm list
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>algorithms</b>
									
								</dt>
								<dd>the list of algorithms allowed for this key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setCHR"> </a>
					<div class="fixedFont">
					
					
					<b>setCHR</b>(CHR)
					
					</div>
					<div class="description">
						Set certificate holder reference for key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>CHR</b>
									
								</dt>
								<dd>certificate holder reference</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setInnerCAR"> </a>
					<div class="fixedFont">
					
					
					<b>setInnerCAR</b>(CAR)
					
					</div>
					<div class="description">
						Set certificate holder reference of CA this request shall be sent to
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>CAR</b>
									
								</dt>
								<dd>certificate holder reference</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setKeyDomain"> </a>
					<div class="fixedFont">
					
					
					<b>setKeyDomain</b>(keyDomain)
					
					</div>
					<div class="description">
						Set key domain
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>the key domain to which the key shall be added</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setKeyUseCounter"> </a>
					<div class="fixedFont">
					
					
					<b>setKeyUseCounter</b>(keyUseCounter)
					
					</div>
					<div class="description">
						Set key use counter for key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{keyUseCounter}</span> <b>keyUseCounter</b>
									
								</dt>
								<dd>in the range 1 to 2^64 - 2</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setOuterCAR"> </a>
					<div class="fixedFont">
					
					
					<b>setOuterCAR</b>(CAR)
					
					</div>
					<div class="description">
						Set holder reference of the key signing this request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>CAR</b>
									
								</dt>
								<dd>certificate holder reference</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setWrappingKey"> </a>
					<div class="fixedFont">
					
					
					<b>setWrappingKey</b>(wrappingKey)
					
					</div>
					<div class="description">
						Set wrapping key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>wrappingKey</b>
									
								</dt>
								<dd>the key to used for wrapping a newly generated symmetric key</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - SmartCardHSMSymmetricKeySpecGenerator</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class SmartCardHSMSymmetricKeySpecGenerator
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing an encoder for the C-Data required in Generate Symmetric Key
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/sc-hsm_SmartCardHSM.js.html">SmartCardHSM.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class SmartCardHSMSymmetricKeySpecGenerator.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html#constructor">SmartCardHSMSymmetricKeySpecGenerator</a></b>(allowedAlgorithms)
							</div>
							<div class="description">Create a key specification generator instance for AES keys</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class SmartCardHSMSymmetricKeySpecGenerator.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html#encode">encode</a></b>()
								</div>
								<div class="description">Return the encoded AES key specification</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html#setKeyDomain">setKeyDomain</a></b>(keyDomain)
								</div>
								<div class="description">Set key domain</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>SmartCardHSMSymmetricKeySpecGenerator</b>(allowedAlgorithms)
				</div>
				
				<div class="description">
					Create a key specification generator instance for AES keys
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{ByteString}</span>  <b>allowedAlgorithms</b>
								
							</dt>
								<dd>the list of allowed algorithm identifier</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="encode"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>encode</b>()
					
					</div>
					<div class="description">
						Return the encoded AES key specification
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the encoded C-Data for Generate Symmetric Key</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setKeyDomain"> </a>
					<div class="fixedFont">
					
					
					<b>setKeyDomain</b>(keyDomain)
					
					</div>
					<div class="description">
						Set key domain
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>keyDomain</b>
									
								</dt>
								<dd>the key domain to which the key shall be added</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - TransparentEF</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class TransparentEF
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a transparent EF
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_TransparentEF.js.html">TransparentEF.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class TransparentEF.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/TransparentEF.html#constructor">TransparentEF</a></b>(fcp, contents)
							</div>
							<div class="description">Create a file system node that represents a transparent EF</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class TransparentEF.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TransparentEF.html#readBinary">readBinary</a></b>(apdu, offset, length)
								</div>
								<div class="description">Reads data from a transparent EF</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TransparentEF.html#updateBinary">updateBinary</a></b>(apdu, offset, data)
								</div>
								<div class="description">Update data in transparent EF</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>TransparentEF</b>(fcp, contents)
				</div>
				
				<div class="description">
					Create a file system node that represents a transparent EF
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/FCP.html">FCP</a>}</span>  <b>fcp</b>
								
							</dt>
								<dd>the FCP for this EF</dd>
						
							<dt>
								<span class="light fixedFont">{ByteString}</span>  <b>contents</b>
								
							</dt>
								<dd>the contents for this EF</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="readBinary"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>readBinary</b>(apdu, offset, length)
					
					</div>
					<div class="description">
						Reads data from a transparent EF
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the APDU used for reading</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>offset</b>
									
								</dt>
								<dd>the offset to read from</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>length</b>
									
								</dt>
								<dd>the length in bytes or 0 for all in short APDU or 65536 for all in extended APDUs</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the data read</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="updateBinary"> </a>
					<div class="fixedFont">
					
					
					<b>updateBinary</b>(apdu, offset, data)
					
					</div>
					<div class="description">
						Update data in transparent EF
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/APDU.html">APDU</a>}</span> <b>apdu</b>
									
								</dt>
								<dd>the APDU used for updating</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>offset</b>
									
								</dt>
								<dd>the offset to update</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>data</b>
									
								</dt>
								<dd>the data to write into the EF</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - TrustAnchor</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class TrustAnchor
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a CVC based access controller
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/cardsim_TrustAnchor.js.html">TrustAnchor.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class TrustAnchor.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/TrustAnchor.html#constructor">TrustAnchor</a></b>(root)
							</div>
							<div class="description">Create a TrustAnchor object that handles certificate validation, terminal authentication and access control</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class TrustAnchor.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TrustAnchor.html#addCARforPACE">addCARforPACE</a></b>(response)
								</div>
								<div class="description">Add recent trust anchor to PACE response</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TrustAnchor.html#checkCertificate">checkCertificate</a></b>(issuer, subject, dataProvider, dp)
								</div>
								<div class="description">Check certificate

<p>This method updates the current date for certificates issued by domestic DVCAs.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TrustAnchor.html#getCertificateFor">getCertificateFor</a></b>(chr)
								</div>
								<div class="description">Return certificate for chr</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TrustAnchor.html#getPublicKeyFor">getPublicKeyFor</a></b>(chr)
								</div>
								<div class="description">Get public key from certificate, possibly determine the domain parameter from previous trust anchors</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TrustAnchor.html#getType">getType</a></b>()
								</div>
								<div class="description">Return type of file system object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TrustAnchor.html#isIssuer">isIssuer</a></b>(chr)
								</div>
								<div class="description">Is a recent trust anchor issuer of the certificate chr in question</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TrustAnchor.html#updateEFCVCA">updateEFCVCA</a></b>(dataProvider)
								</div>
								<div class="description">Update EF.CVCA with list of valid trust anchors</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TrustAnchor.html#validateCertificateIssuedByCVCA">validateCertificateIssuedByCVCA</a></b>(crypto, cert, dataProvider)
								</div>
								<div class="description">Validate certificate issued by CVCA</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/TrustAnchor.html#validateCertificateIssuedByDVCA">validateCertificateIssuedByDVCA</a></b>(crypto, cert, dvca, dataProvider)
								</div>
								<div class="description">Validate certificate issued by CVCA</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>TrustAnchor</b>(root)
				</div>
				
				<div class="description">
					Create a TrustAnchor object that handles certificate validation, terminal authentication and access control
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span>  <b>root</b>
								
							</dt>
								<dd>the root certificate</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="addCARforPACE"> </a>
					<div class="fixedFont">
					
					
					<b>addCARforPACE</b>(response)
					
					</div>
					<div class="description">
						Add recent trust anchor to PACE response
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>response</b>
									
								</dt>
								<dd>the response object to receive tag 87 and 88</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="checkCertificate"> </a>
					<div class="fixedFont">
					
					
					<b>checkCertificate</b>(issuer, subject, dataProvider, dp)
					
					</div>
					<div class="description">
						Check certificate

<p>This method updates the current date for certificates issued by domestic DVCAs.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>issuer</b>
									
								</dt>
								<dd>the issuing certificate</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>subject</b>
									
								</dt>
								<dd>the subjects certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>dataProvider</b>
									
								</dt>
								<dd>object implementing getDate(), setDate() and updateEFCVCA()</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>dp</b>
									
								</dt>
								<dd>domain parameter for checking the public key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="getCertificateFor"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/CVC.html">CVC</a>}</span>
					<b>getCertificateFor</b>(chr)
					
					</div>
					<div class="description">
						Return certificate for chr
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the certificate holder</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPublicKeyFor"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getPublicKeyFor</b>(chr)
					
					</div>
					<div class="description">
						Get public key from certificate, possibly determine the domain parameter from previous trust anchors
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the certificate holder</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the public key or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getType"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>getType</b>()
					
					</div>
					<div class="description">
						Return type of file system object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the type string</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="isIssuer"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>isIssuer</b>(chr)
					
					</div>
					<div class="description">
						Is a recent trust anchor issuer of the certificate chr in question
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/PublicKeyReference.html">PublicKeyReference</a>}</span> <b>chr</b>
									
								</dt>
								<dd>the certificate holder</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true if trust anchor issued certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="updateEFCVCA"> </a>
					<div class="fixedFont">
					
					
					<b>updateEFCVCA</b>(dataProvider)
					
					</div>
					<div class="description">
						Update EF.CVCA with list of valid trust anchors
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>dataProvider</b>
									
								</dt>
								<dd>object implementing getDate(), setDate() and updateEFCVCA()</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="validateCertificateIssuedByCVCA"> </a>
					<div class="fixedFont">
					
					
					<b>validateCertificateIssuedByCVCA</b>(crypto, cert, dataProvider)
					
					</div>
					<div class="description">
						Validate certificate issued by CVCA
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>the crypto object to use for verification</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>cert</b>
									
								</dt>
								<dd>the certificate to validate</dd>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>dataProvider</b>
									
								</dt>
								<dd>object implementing getDate(), setDate() and updateEFCVCA()</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="validateCertificateIssuedByDVCA"> </a>
					<div class="fixedFont">
					
					
					<b>validateCertificateIssuedByDVCA</b>(crypto, cert, dvca, dataProvider)
					
					</div>
					<div class="description">
						Validate certificate issued by CVCA
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Crypto}</span> <b>crypto</b>
									
								</dt>
								<dd>the crypto object to use for verification</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>cert</b>
									
								</dt>
								<dd>the certificate to validate</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/CVC.html">CVC</a>}</span> <b>dvca</b>
									
								</dt>
								<dd>the issuing certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>dataProvider</b>
									
								</dt>
								<dd>object implementing getDate(), setDate() and updateEFCVCA()</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - X509CertificateGenerator</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class X509CertificateGenerator
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a X.509 certificate generator
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/x509_X509CertificateGenerator.js.html">X509CertificateGenerator.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class X509CertificateGenerator.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/X509CertificateGenerator.html#constructor">X509CertificateGenerator</a></b>(crypto)
							</div>
							<div class="description">Create a X.509 certificate generator.</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class X509CertificateGenerator.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#addAuthorityKeyIdentifierExtension">addAuthorityKeyIdentifierExtension</a></b>(publicKeyOrId)
								</div>
								<div class="description">Adds the authority public key identifier extension based on the issuers key.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#addBasicConstraintsExtension">addBasicConstraintsExtension</a></b>(cA, pathLenConstraint)
								</div>
								<div class="description">Adds the BasicConstraints extension.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#addCRLDistributionPointURL">addCRLDistributionPointURL</a></b>(url)
								</div>
								<div class="description">Adds the CRL distribution point URLs.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#addExtendedKeyUsages">addExtendedKeyUsages</a></b>(oids, critical)
								</div>
								<div class="description">Adds the extended key usage extension</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#addExtension">addExtension</a></b>(extnID, critical, the)
								</div>
								<div class="description">Adds an extension to the certificate

<p>The structure is defined as:</p>
<pre>
   Extension  ::=  SEQUENCE  {
       extnID      OBJECT IDENTIFIER,
       critical    BOOLEAN DEFAULT FALSE,
       extnValue   OCTET STRING
                   -- contains the DER encoding of an ASN.1 value
                   -- corresponding to the extension type identified
                   -- by extnID
       }
</pre></div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#addKeyUsageExtension">addKeyUsageExtension</a></b>(the)
								</div>
								<div class="description">Adds the key usage extension.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#addSubjectKeyIdentifierExtension">addSubjectKeyIdentifierExtension</a></b>()
								</div>
								<div class="description">Adds the subject public key identifier extension based on the certificates subject key.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#generateX509Certificate">generateX509Certificate</a></b>(privateKey)
								</div>
								<div class="description">Generates the certificate.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#getExtensions">getExtensions</a></b>()
								</div>
								<div class="description">Gets the certificate extension as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#getIssuer">getIssuer</a></b>()
								</div>
								<div class="description">Gets the issuer name as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#getSignatureAlgorithm">getSignatureAlgorithm</a></b>()
								</div>
								<div class="description">Gets the signature algorithm TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#getSubject">getSubject</a></b>()
								</div>
								<div class="description">Gets the subject name as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#getSubjectPublicKeyInfo">getSubjectPublicKeyInfo</a></b>()
								</div>
								<div class="description">Gets the subject's public key as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#getTbsCertificate">getTbsCertificate</a></b>()
								</div>
								<div class="description">Gets the part of the certificate that will be signed</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#getValidity">getValidity</a></b>()
								</div>
								<div class="description">Gets the certificate validity as TLV object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#reset">reset</a></b>()
								</div>
								<div class="description">Resets all internal state variables.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#setIssuer">setIssuer</a></b>(issuer)
								</div>
								<div class="description">Sets the isser name.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#setNotAfter">setNotAfter</a></b>(date)
								</div>
								<div class="description">Sets the expiration date for the certificate.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#setNotBefore">setNotBefore</a></b>(date)
								</div>
								<div class="description">Sets the effective date for the certificate.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#setPublicKey">setPublicKey</a></b>(publicKey)
								</div>
								<div class="description">Sets the subjects public key

<p>The methods accepts ECC and RSA Public Keys.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#setSerialNumber">setSerialNumber</a></b>(serialNumber)
								</div>
								<div class="description">Sets the serial number.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#setSignatureAlgorithm">setSignatureAlgorithm</a></b>(alg)
								</div>
								<div class="description">Sets the signature algorithm.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateGenerator.html#setSubject">setSubject</a></b>(subject)
								</div>
								<div class="description">Sets the subject name.</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>X509CertificateGenerator</b>(crypto)
				</div>
				
				<div class="description">
					Create a X.509 certificate generator.
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{Crypto}</span>  <b>crypto</b>
								
							</dt>
								<dd>the crypto provider to use for signing operations</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="addAuthorityKeyIdentifierExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addAuthorityKeyIdentifierExtension</b>(publicKeyOrId)
					
					</div>
					<div class="description">
						Adds the authority public key identifier extension based on the issuers key.

<p>The key identifier is calculated as SHA-1 hash over the contents of the
issuer public key (Without tag, length and number of unused bits.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key/ByteString}</span> <b>publicKeyOrId</b>
									
								</dt>
								<dd>the authority subject key or authority key identifier</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addBasicConstraintsExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addBasicConstraintsExtension</b>(cA, pathLenConstraint)
					
					</div>
					<div class="description">
						Adds the BasicConstraints extension.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>cA</b>
									
								</dt>
								<dd>the certificate belongs to a CA</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>pathLenConstraint</b>
									
								</dt>
								<dd>the maximum number of subordinate CA certificates</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addCRLDistributionPointURL"> </a>
					<div class="fixedFont">
					
					
					<b>addCRLDistributionPointURL</b>(url)
					
					</div>
					<div class="description">
						Adds the CRL distribution point URLs.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String[]}</span> <b>url</b>
									
								</dt>
								<dd>a list of URLs</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addExtendedKeyUsages"> </a>
					<div class="fixedFont">
					
					
					<b>addExtendedKeyUsages</b>(oids, critical)
					
					</div>
					<div class="description">
						Adds the extended key usage extension
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String[]}</span> <b>oids</b>
									
								</dt>
								<dd>the list of object identifier names</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>critical</b>
									
								</dt>
								<dd>the extension is critical</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addExtension</b>(extnID, critical, the)
					
					</div>
					<div class="description">
						Adds an extension to the certificate

<p>The structure is defined as:</p>
<pre>
   Extension  ::=  SEQUENCE  {
       extnID      OBJECT IDENTIFIER,
       critical    BOOLEAN DEFAULT FALSE,
       extnValue   OCTET STRING
                   -- contains the DER encoding of an ASN.1 value
                   -- corresponding to the extension type identified
                   -- by extnID
       }
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>extnID</b>
									
								</dt>
								<dd>the extensions object identifier</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>critical</b>
									
								</dt>
								<dd>the extension is critical</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>the</b>
									
								</dt>
								<dd>extension value as ByteString</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addKeyUsageExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addKeyUsageExtension</b>(the)
					
					</div>
					<div class="description">
						Adds the key usage extension.

<p>The following flags are defined:</p>
<pre>
PKIXCommon.digitalSignature = 0x0080;
PKIXCommon.nonRepudiation   = 0x0040;
PKIXCommon.keyEncipherment  = 0x0020;
PKIXCommon.dataEncipherment = 0x0010;
PKIXCommon.keyAgreement     = 0x0008;
PKIXCommon.keyCertSign      = 0x0004;
PKIXCommon.cRLSign          = 0x0002;
PKIXCommon.encipherOnly     = 0x0001;
PKIXCommon.decipherOnly     = 0x8000;
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>the</b>
									
								</dt>
								<dd>key usage flags as combination of the flags defined above.</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="addSubjectKeyIdentifierExtension"> </a>
					<div class="fixedFont">
					
					
					<b>addSubjectKeyIdentifierExtension</b>()
					
					</div>
					<div class="description">
						Adds the subject public key identifier extension based on the certificates subject key.

<p>The key identifier is calculated as SHA-1 hash over the contents of the
subject public key (Without tag, length and number of unused bits.</p>
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="generateX509Certificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{X509}</span>
					<b>generateX509Certificate</b>(privateKey)
					
					</div>
					<div class="description">
						Generates the certificate.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>privateKey</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the generated certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getExtensions"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getExtensions</b>()
					
					</div>
					<div class="description">
						Gets the certificate extension as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate extensions</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getIssuer"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getIssuer</b>()
					
					</div>
					<div class="description">
						Gets the issuer name as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the issuer RDNSequence</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSignatureAlgorithm"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getSignatureAlgorithm</b>()
					
					</div>
					<div class="description">
						Gets the signature algorithm TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the signature algorithm object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSubject"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getSubject</b>()
					
					</div>
					<div class="description">
						Gets the subject name as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the issuer RDNSequence</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSubjectPublicKeyInfo"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getSubjectPublicKeyInfo</b>()
					
					</div>
					<div class="description">
						Gets the subject's public key as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the subject's public key info</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getTbsCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getTbsCertificate</b>()
					
					</div>
					<div class="description">
						Gets the part of the certificate that will be signed
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the TBSCertificate part</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getValidity"> </a>
					<div class="fixedFont">
					
					<span class="light">{ASN1}</span>
					<b>getValidity</b>()
					
					</div>
					<div class="description">
						Gets the certificate validity as TLV object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificates validity</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="reset"> </a>
					<div class="fixedFont">
					
					
					<b>reset</b>()
					
					</div>
					<div class="description">
						Resets all internal state variables.
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="setIssuer"> </a>
					<div class="fixedFont">
					
					
					<b>setIssuer</b>(issuer)
					
					</div>
					<div class="description">
						Sets the isser name.

<p>The issuer name must be a JavaScript object containing the properties:</p>
<ul>
 <li>C - the country</li>
 <li>O - the organization</li>
 <li>OU - the organization unit</li>
 <li>CN - the common name</li>
</ul>
<p>Example:</p>
<pre>
	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>issuer</b>
									
								</dt>
								<dd>the issuer name</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setNotAfter"> </a>
					<div class="fixedFont">
					
					
					<b>setNotAfter</b>(date)
					
					</div>
					<div class="description">
						Sets the expiration date for the certificate.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String or Date}</span> <b>date</b>
									
								</dt>
								<dd>the date in format YYMMDDHHMMSSZ</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setNotBefore"> </a>
					<div class="fixedFont">
					
					
					<b>setNotBefore</b>(date)
					
					</div>
					<div class="description">
						Sets the effective date for the certificate.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String or Date}</span> <b>date</b>
									
								</dt>
								<dd>the date in format YYMMDDHHMMSSZ</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setPublicKey"> </a>
					<div class="fixedFont">
					
					
					<b>setPublicKey</b>(publicKey)
					
					</div>
					<div class="description">
						Sets the subjects public key

<p>The methods accepts ECC and RSA Public Keys.</p>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>publicKey</b>
									
								</dt>
								<dd>the subjects public key</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSerialNumber"> </a>
					<div class="fixedFont">
					
					
					<b>setSerialNumber</b>(serialNumber)
					
					</div>
					<div class="description">
						Sets the serial number.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>serialNumber</b>
									
								</dt>
								<dd>the serial number for the certificate</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSignatureAlgorithm"> </a>
					<div class="fixedFont">
					
					
					<b>setSignatureAlgorithm</b>(alg)
					
					</div>
					<div class="description">
						Sets the signature algorithm.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>alg</b>
									
								</dt>
								<dd>the signature algorithm.</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="setSubject"> </a>
					<div class="fixedFont">
					
					
					<b>setSubject</b>(subject)
					
					</div>
					<div class="description">
						Sets the subject name.

<p>The subject name must be a JavaScript object containing the properties:</p>
<ul>
 <li>C - the country</li>
 <li>O - the organization</li>
 <li>OU - the organization unit</li>
 <li>CN - the common name</li>
</ul>
<p>Example:</p>
<pre>
	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
</pre>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>subject</b>
									
								</dt>
								<dd>the subject name</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - X509CertificateIssuer</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class X509CertificateIssuer
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a certification authority issuing X.509 certificates and CRLs
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/x509_X509CertificateIssuer.js.html">X509CertificateIssuer.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class X509CertificateIssuer.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/X509CertificateIssuer.html#constructor">X509CertificateIssuer</a></b>(daof, cpf, holder)
							</div>
							<div class="description">Create a certification authority that issues X.509 certificates and CRLs</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class X509CertificateIssuer.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateIssuer.html#addCRLDistributionPoint">addCRLDistributionPoint</a></b>(crldp)
								</div>
								<div class="description">Add a CRL distribution point to issued certificates</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">X509CertificateIssuer.<b><a href="../symbols/X509CertificateIssuer.html#.createCertificateIssuer">createCertificateIssuer</a></b>(daof, pathOrHolderId, certtype, template)
								</div>
								<div class="description">Create a new certificate issuer</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateIssuer.html#issueCertificate">issueCertificate</a></b>(certholder, pubkey, subject, extensions, srId)
								</div>
								<div class="description">Issue a new certificate for the given subject and public key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateIssuer.html#issueCRL">issueCRL</a></b>()
								</div>
								<div class="description">Issue a CRL</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateIssuer.html#issueSelfSignedCertificate">issueSelfSignedCertificate</a></b>(keyId, srId)
								</div>
								<div class="description">Issue a self-signed certificate for the given keyId.</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>X509CertificateIssuer</b>(daof, cpf, holder)
				</div>
				
				<div class="description">
					Create a certification authority that issues X.509 certificates and CRLs
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{DAOFactory}</span>  <b>daof</b>
								
							</dt>
								<dd>the factory that can create the required data access objects</dd>
						
							<dt>
								<span class="light fixedFont">{CryptoProviderFactory}</span>  <b>cpf</b>
								
							</dt>
								<dd>factory implementing getCryptoProvider() used to get access to crypto providers</dd>
						
							<dt>
								<span class="light fixedFont">{Holder}</span>  <b>holder</b>
								
							</dt>
								<dd>the holder object for this signer the database</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="addCRLDistributionPoint"> </a>
					<div class="fixedFont">
					
					
					<b>addCRLDistributionPoint</b>(crldp)
					
					</div>
					<div class="description">
						Add a CRL distribution point to issued certificates
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>crldp</b>
									
								</dt>
								<dd>the URL of the distribution point</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name=".createCertificateIssuer"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{Number}</span>
					<span class="light">X509CertificateIssuer.</span><b>createCertificateIssuer</b>(daof, pathOrHolderId, certtype, template)
					
					</div>
					<div class="description">
						Create a new certificate issuer
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{DAOFactory}</span> <b>daof</b>
									
								</dt>
								<dd>the factory that can create the required data access objects</dd>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the path of holderIDs (eg. "/UTCVCA/UTDVCA/UTTERM") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>certtype</b>
									
								</dt>
								<dd>optional argument, default Holder.X509</dd>
							
								<dt>
									<b>template</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the newly created holder id</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="issueCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{X509}</span>
					<b>issueCertificate</b>(certholder, pubkey, subject, extensions, srId)
					
					</div>
					<div class="description">
						Issue a new certificate for the given subject and public key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{Number/String/Object}</span> <b>certholder</b>
									
								</dt>
								<dd>the holder id, path or object</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>pubkey</b>
									
								</dt>
								<dd>the public key</dd>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>subject</b>
									
								</dt>
								<dd>in ASN1 format or a format accepted by PKIXCommon.encodeName()</dd>
							
								<dt>
									<span class="light fixedFont">{Object[]}</span> <b>extensions</b>
									
								</dt>
								<dd>array of certificate extensions objects with properties oid{String}, critical{boolean} and value{ByteString}</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>srId</b>
									
								</dt>
								<dd>service request id to be stored with issued certificate</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the newly generated certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="issueCRL"> </a>
					<div class="fixedFont">
					
					<span class="light">{CRL}</span>
					<b>issueCRL</b>()
					
					</div>
					<div class="description">
						Issue a CRL
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the newly issued CRL</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="issueSelfSignedCertificate"> </a>
					<div class="fixedFont">
					
					
					<b>issueSelfSignedCertificate</b>(keyId, srId)
					
					</div>
					<div class="description">
						Issue a self-signed certificate for the given keyId.

The key must have been previously generated using the newSigner() method
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyId</b>
									
								</dt>
								<dd>the subject key identifier</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>srId</b>
									
								</dt>
								<dd>service request id to be stored with issued certificate</dd>
							
							</dl>
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - X509CertificateStore</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class X509CertificateStore
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class that abstracts a certificate, request and key store for a X509 PKI.
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/x509_X509CertificateStore.js.html">X509CertificateStore.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class X509CertificateStore.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/X509CertificateStore.html#constructor">X509CertificateStore</a></b>(DAOFactory)
							</div>
							<div class="description">Create an object to access a X509 certificate store.</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class X509CertificateStore.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#deletePrivateKey">deletePrivateKey</a></b>(pathOrHolderId, name)
								</div>
								<div class="description">Remove private key</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#deleteRequest">deleteRequest</a></b>(pathOrHolderId, keyId)
								</div>
								<div class="description">Remove request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#generateKeyPair">generateKeyPair</a></b>(pathOrHolderId, name, algo, prk, puk)
								</div>
								<div class="description">Generate key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#getCertificateChain">getCertificateChain</a></b>(pathOrHolderId)
								</div>
								<div class="description">Get certificate chain for given path or holderId</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#getCrypto">getCrypto</a></b>()
								</div>
								<div class="description">Return a suitable crypto object.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#getCurrentCertificate">getCurrentCertificate</a></b>(pathOrHolderId)
								</div>
								<div class="description">Get current certificate for given path or holderId</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#getCurrentCertificateAndSigner">getCurrentCertificateAndSigner</a></b>(pathOrHolderId)
								</div>
								<div class="description">Get current certificate for given path or holderId</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#getCurrentKeyIdAndCertificate">getCurrentKeyIdAndCertificate</a></b>(pathOrHolderId)
								</div>
								<div class="description">Get current key id</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#getPrivateKeyByKeyId">getPrivateKeyByKeyId</a></b>(pathOrHolderId, keyId)
								</div>
								<div class="description">Get a private key in the certificate store</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#getPrivateKeyByName">getPrivateKeyByName</a></b>(pathOrHolderId, name)
								</div>
								<div class="description">Get a private key in the certificate store</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#getRequest">getRequest</a></b>(pathOrHolderId, keyId)
								</div>
								<div class="description">Return request for given keyId</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#getSigner">getSigner</a></b>(pathOrHolderId, keyId)
								</div>
								<div class="description">Get the signer identified by the keyId</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#importCertificate">importCertificate</a></b>(cert, makeCurrent, srId)
								</div>
								<div class="description">Import a certificate that can be validated by one of certificates in the database.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#listHolders">listHolders</a></b>(pathOrHolderId)
								</div>
								<div class="description">List certificate holders for a given PKI element</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#newSigner">newSigner</a></b>(pathOrHolderId, name, puk, keyblob)
								</div>
								<div class="description">Create new signer based on key pair generated externally</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">X509CertificateStore.<b><a href="../symbols/X509CertificateStore.html#.nthElementOf">nthElementOf</a></b>(path, n)
								</div>
								<div class="description">Return the n-element of the path</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">X509CertificateStore.<b><a href="../symbols/X509CertificateStore.html#.parentPathOf">parentPathOf</a></b>(path)
								</div>
								<div class="description">Strip the last element of the path, effectively defining the parent within the path</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#storeCertificate">storeCertificate</a></b>(pathOrHolderId, cert, makeCurrent, srId)
								</div>
								<div class="description">Store a certificate in the certificate store</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509CertificateStore.html#storeRequest">storeRequest</a></b>(pathOrHolderId, req)
								</div>
								<div class="description">Store a certificate request in the certificate store</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>X509CertificateStore</b>(DAOFactory)
				</div>
				
				<div class="description">
					Create an object to access a X509 certificate store.
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{DAOFactory}</span>  <b>DAOFactory</b>
								
							</dt>
								<dd>the factory that can create data access objects for persistent information</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="deletePrivateKey"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>deletePrivateKey</b>(pathOrHolderId, name)
					
					</div>
					<div class="description">
						Remove private key
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>name</b>
									
								</dt>
								<dd>the unique name of the signer in the holder context</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true is deleted</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="deleteRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{boolean}</span>
					<b>deleteRequest</b>(pathOrHolderId, keyId)
					
					</div>
					<div class="description">
						Remove request
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyId</b>
									
								</dt>
								<dd>the unique keyId of the request in the holder context</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>true is deleted</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="generateKeyPair"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>generateKeyPair</b>(pathOrHolderId, name, algo, prk, puk)
					
					</div>
					<div class="description">
						Generate key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>name</b>
									
								</dt>
								<dd>the unique name of the signer in the holder context</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>algo</b>
									
								</dt>
								<dd>the key generation algorithm (Crypto.EC or Crypto.RSA)</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>prk</b>
									
								</dt>
								<dd>the private key template</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>puk</b>
									
								</dt>
								<dd>the public key template</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the subject key identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCertificateChain"> </a>
					<div class="fixedFont">
					
					<span class="light">{X509[]}</span>
					<b>getCertificateChain</b>(pathOrHolderId)
					
					</div>
					<div class="description">
						Get certificate chain for given path or holderId
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the certificate chain, starting with the current certificate of the holder and ending with the self-signed trust anchor</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCrypto"> </a>
					<div class="fixedFont">
					
					<span class="light">{Crypto}</span>
					<b>getCrypto</b>()
					
					</div>
					<div class="description">
						Return a suitable crypto object. This may be overwritten by derived classes
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the Crypto object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCurrentCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{X509}</span>
					<b>getCurrentCertificate</b>(pathOrHolderId)
					
					</div>
					<div class="description">
						Get current certificate for given path or holderId
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the current certificate or null if none defined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCurrentCertificateAndSigner"> </a>
					<div class="fixedFont">
					
					<span class="light">{X509}</span>
					<b>getCurrentCertificateAndSigner</b>(pathOrHolderId)
					
					</div>
					<div class="description">
						Get current certificate for given path or holderId
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the current certificate or null if none defined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getCurrentKeyIdAndCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getCurrentKeyIdAndCertificate</b>(pathOrHolderId)
					
					</div>
					<div class="description">
						Get current key id
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the current key id or null if none defined</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPrivateKeyByKeyId"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getPrivateKeyByKeyId</b>(pathOrHolderId, keyId)
					
					</div>
					<div class="description">
						Get a private key in the certificate store
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyId</b>
									
								</dt>
								<dd>the unique key identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the private key or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getPrivateKeyByName"> </a>
					<div class="fixedFont">
					
					<span class="light">{Key}</span>
					<b>getPrivateKeyByName</b>(pathOrHolderId, name)
					
					</div>
					<div class="description">
						Get a private key in the certificate store
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>name</b>
									
								</dt>
								<dd>the unique name of the signer in the holder context</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the private key or null if not found</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/_global_.html#PKCS10">PKCS10</a>}</span>
					<b>getRequest</b>(pathOrHolderId, keyId)
					
					</div>
					<div class="description">
						Return request for given keyId
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyId</b>
									
								</dt>
								<dd>the unique keyId of the request in the holder context</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the request or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSigner"> </a>
					<div class="fixedFont">
					
					<span class="light">{Signer}</span>
					<b>getSigner</b>(pathOrHolderId, keyId)
					
					</div>
					<div class="description">
						Get the signer identified by the keyId
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyId</b>
									
								</dt>
								<dd>the key identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>this Signer object</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="importCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{Certificate}</span>
					<b>importCertificate</b>(cert, makeCurrent, srId)
					
					</div>
					<div class="description">
						Import a certificate that can be validated by one of certificates in the database.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{X509}</span> <b>cert</b>
									
								</dt>
								<dd>the certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>makeCurrent</b>
									
								</dt>
								<dd>true if this certificate becomes the current certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>srId</b>
									
								</dt>
								<dd>service request id to be stored with issued certificate (optional)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the Certificate entry from the database or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="listHolders"> </a>
					<div class="fixedFont">
					
					<span class="light">{String[]}</span>
					<b>listHolders</b>(pathOrHolderId)
					
					</div>
					<div class="description">
						List certificate holders for a given PKI element
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>a list of holder ids, possibly empty</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="newSigner"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>newSigner</b>(pathOrHolderId, name, puk, keyblob)
					
					</div>
					<div class="description">
						Create new signer based on key pair generated externally
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>name</b>
									
								</dt>
								<dd>the unique name of the signer in the holder context</dd>
							
								<dt>
									<span class="light fixedFont">{Key}</span> <b>puk</b>
									
								</dt>
								<dd>the public key</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyblob</b>
									
								</dt>
								<dd>the wrapped private key</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the subject key identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".nthElementOf"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">X509CertificateStore.</span><b>nthElementOf</b>(path, n)
					
					</div>
					<div class="description">
						Return the n-element of the path
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the path to return the last element from</dd>
							
								<dt>
									<b>n</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the last path element or null for the root</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name=".parentPathOf"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{String}</span>
					<span class="light">X509CertificateStore.</span><b>parentPathOf</b>(path)
					
					</div>
					<div class="description">
						Strip the last element of the path, effectively defining the parent within the path
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>path</b>
									
								</dt>
								<dd>the path to strip the last element from</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the parent path or null for the root</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="storeCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{Certificate}</span>
					<b>storeCertificate</b>(pathOrHolderId, cert, makeCurrent, srId)
					
					</div>
					<div class="description">
						Store a certificate in the certificate store
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{X509}</span> <b>cert</b>
									
								</dt>
								<dd>the certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>makeCurrent</b>
									
								</dt>
								<dd>true if this certificate becomes the current certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>srId</b>
									
								</dt>
								<dd>service request id to be stored with issued certificate (optional)</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the Certificate entry from the database or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="storeRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>storeRequest</b>(pathOrHolderId, req)
					
					</div>
					<div class="description">
						Store a certificate request in the certificate store
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/_global_.html#PKCS10">PKCS10</a>}</span> <b>req</b>
									
								</dt>
								<dd>the request</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the request's keyId</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - X509Signer</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Class X509Signer
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				Class implementing a signer backed by a X.509 certificate
				
				
					<br /><i>Defined in: </i> <a href="../symbols/src/x509_X509Signer.js.html">X509Signer.js</a>.
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			
			<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class X509Signer.">
				<caption>Class Summary</caption>
				<thead>
					<tr>
						<th scope="col">Constructor Attributes</th>
						<th scope="col">Constructor Name and Description</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td class="attributes">&nbsp;</td>
						<td class="nameDescription" >
							<div class="fixedFont">
								<b><a href="../symbols/X509Signer.html#constructor">X509Signer</a></b>(daof, cpf, holder)
							</div>
							<div class="description">Create a signer based on a X.509 certificate</div>
						</td>
					</tr>
				</tbody>
			</table>
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class X509Signer.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&lt;static&gt; &nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont">X509Signer.<b><a href="../symbols/X509Signer.html#.createSigner">createSigner</a></b>(daof, pathOrHolderId, certtype, template)
								</div>
								<div class="description">Create a new signer</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#determineDistinguishedName">determineDistinguishedName</a></b>(name)
								</div>
								<div class="description">Determine subject distinguished name for new signer</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#determineSignerName">determineSignerName</a></b>()
								</div>
								<div class="description">Determine signer name for newly generated signer</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#getHolder">getHolder</a></b>()
								</div>
								<div class="description">Return the holder from the holder database for this element</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#getHolderId">getHolderId</a></b>()
								</div>
								<div class="description">Return the holderId from the holder database for this element</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#getRequest">getRequest</a></b>(keyId)
								</div>
								<div class="description">Get request for the given subject key identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#getRequestBinary">getRequestBinary</a></b>(keyId)
								</div>
								<div class="description">Get request for the given subject key identifier</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#getRequestKeyUsage">getRequestKeyUsage</a></b>()
								</div>
								<div class="description">Determine the key usage for the request</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#getSigner">getSigner</a></b>()
								</div>
								<div class="description">Return the signer from the signer database for this element</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#getSignerCertificate">getSignerCertificate</a></b>()
								</div>
								<div class="description">Return the signer's certificate</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#newSigner">newSigner</a></b>(name, template)
								</div>
								<div class="description">Create a new signer key pair</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#parsePolicyFromSigner">parsePolicyFromSigner</a></b>()
								</div>
								<div class="description">Parse the policy from the signer's values object</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#setPolicy">setPolicy</a></b>(crldp)
								</div>
								<div class="description">Set policy for signer object.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#storeCertificate">storeCertificate</a></b>(cert, makeCurrent, keyId, srId)
								</div>
								<div class="description">Store a certificate issued for this signer</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/X509Signer.html#storeCertificateForHolder">storeCertificateForHolder</a></b>(cert, makeCurrent, keyId, srId, srId)
								</div>
								<div class="description">Store a certificate issued for a certain holder</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			
			<div class="details"><a name="constructor"> </a>
				<div class="sectionTitle">
					Class Detail
				</div>
				
				<div class="fixedFont">
						<b>X509Signer</b>(daof, cpf, holder)
				</div>
				
				<div class="description">
					Create a signer based on a X.509 certificate
					
				</div>
				
				
				
				
					
						<dl class="detailList">
						<dt class="heading">Parameters:</dt>
						
							<dt>
								<span class="light fixedFont">{DAOFactory}</span>  <b>daof</b>
								
							</dt>
								<dd>the factory that can create the required data access objects</dd>
						
							<dt>
								<span class="light fixedFont">{CryptoProviderFactory}</span>  <b>cpf</b>
								
							</dt>
								<dd>factory implementing getCryptoProvider() used to get access to crypto providers</dd>
						
							<dt>
								<span class="light fixedFont">{Holder}</span>  <b>holder</b>
								
							</dt>
								<dd>the holder object for this signer</dd>
						
						</dl>
					
					
					
					
					
					
					

			</div>
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name=".createSigner"> </a>
					<div class="fixedFont">&lt;static&gt; 
					
					<span class="light">{Number}</span>
					<span class="light">X509Signer.</span><b>createSigner</b>(daof, pathOrHolderId, certtype, template)
					
					</div>
					<div class="description">
						Create a new signer
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{DAOFactory}</span> <b>daof</b>
									
								</dt>
								<dd>the factory that can create the required data access objects</dd>
							
								<dt>
									<span class="light fixedFont">{String/Number}</span> <b>pathOrHolderId</b>
									
								</dt>
								<dd>the path of holderIDs (eg. "/UTCVCA/UTDVCA/UTTERM") or the holderId from the database</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>certtype</b>
									
								</dt>
								<dd>optional argument, default Holder.X509</dd>
							
								<dt>
									<span class="light fixedFont">{Object}</span> <b>template</b>
									
								</dt>
								<dd>template for database entry</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the newly created holder id</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="determineDistinguishedName"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>determineDistinguishedName</b>(name)
					
					</div>
					<div class="description">
						Determine subject distinguished name for new signer
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>name</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the distringuished name for the new signer</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="determineSignerName"> </a>
					<div class="fixedFont">
					
					<span class="light">{String}</span>
					<b>determineSignerName</b>()
					
					</div>
					<div class="description">
						Determine signer name for newly generated signer
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the unique name</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getHolder"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getHolder</b>()
					
					</div>
					<div class="description">
						Return the holder from the holder database for this element
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the holderId</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getHolderId"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getHolderId</b>()
					
					</div>
					<div class="description">
						Return the holderId from the holder database for this element
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the holderId</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRequest"> </a>
					<div class="fixedFont">
					
					<span class="light">{<a href="../symbols/_global_.html#PKCS10">PKCS10</a>}</span>
					<b>getRequest</b>(keyId)
					
					</div>
					<div class="description">
						Get request for the given subject key identifier
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyId</b>
									
								</dt>
								<dd>the subject key identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the PKCS10 request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRequestBinary"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>getRequestBinary</b>(keyId)
					
					</div>
					<div class="description">
						Get request for the given subject key identifier
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyId</b>
									
								</dt>
								<dd>the subject key identifier</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the raw request</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getRequestKeyUsage"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>getRequestKeyUsage</b>()
					
					</div>
					<div class="description">
						Determine the key usage for the request
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the key usage defined in PKIXCommon</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSigner"> </a>
					<div class="fixedFont">
					
					<span class="light">{Signer}</span>
					<b>getSigner</b>()
					
					</div>
					<div class="description">
						Return the signer from the signer database for this element
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the signer value object or null</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="getSignerCertificate"> </a>
					<div class="fixedFont">
					
					<span class="light">{X509}</span>
					<b>getSignerCertificate</b>()
					
					</div>
					<div class="description">
						Return the signer's certificate
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the signer's certificate</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="newSigner"> </a>
					<div class="fixedFont">
					
					<span class="light">{ByteString}</span>
					<b>newSigner</b>(name, template)
					
					</div>
					<div class="description">
						Create a new signer key pair
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>name</b>
									
								</dt>
								<dd>the signer name</dd>
							
								<dt>
									<b>template</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the subject key identifier</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="parsePolicyFromSigner"> </a>
					<div class="fixedFont">
					
					<span class="light">{Object}</span>
					<b>parsePolicyFromSigner</b>()
					
					</div>
					<div class="description">
						Parse the policy from the signer's values object
						
						
					</div>
					
					
					
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the policy</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="setPolicy"> </a>
					<div class="fixedFont">
					
					
					<b>setPolicy</b>(crldp)
					
					</div>
					<div class="description">
						Set policy for signer object.

The policy object shall contain the following properties. Some elements are only used in the
derive X509CertificateIssuer class.

<ul>
<li>distinguishedName - The distinguishedName object as defined in PKIXCommon.encodeName()</li>
<li>keySpecification - A Key object initialized with the key parameter.</li>
<li>signatureAlgorithm - A ByteString encoding the object identifier for the signature algorithm</li>
<li>validityDaysSelfSigned - Number of days the self-signed certificate is valid</li>
<li>validityDaysCertificates - Number of days the issued certificate is valid</li>
<li>validityDaysCRL - Number of days the issued certificate revocation list is valid</li>
<li>pathLenConstraint - Number of subordinate CAs</li>
<li>requestFormat - "pkcs10" or "sc-hsm"</li>
<li>overwriteKey - Set to true to overwrite a key with the same label</li>
<li>restrictPublicKey - Limit the public key of the self-signed root as per PKIXCommon.restrictedPublicKeyAlgorithmIdentifier()</li>
</ul>
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{String}</span> <b>crldp</b>
									
								</dt>
								<dd>the URL of the distribution point</dd>
							
							</dl>
						
						
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">See:</dt>
							
								<dd><a href="../symbols/PKIXCommon.html#.encodeName">PKIXCommon.encodeName</a>()</dd>
							
							</dl>
						

					<hr />
				
					<a name="storeCertificate"> </a>
					<div class="fixedFont">
					
					
					<b>storeCertificate</b>(cert, makeCurrent, keyId, srId)
					
					</div>
					<div class="description">
						Store a certificate issued for this signer
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{X509}</span> <b>cert</b>
									
								</dt>
								<dd>the certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>makeCurrent</b>
									
								</dt>
								<dd>true if this certificate becomes the current certificate</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyId</b>
									
								</dt>
								<dd>the key id that links this certificate to the signer (usually the subjectKeyIdentifier)</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>srId</b>
									
								</dt>
								<dd>service request id</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="storeCertificateForHolder"> </a>
					<div class="fixedFont">
					
					<span class="light">{Number}</span>
					<b>storeCertificateForHolder</b>(cert, makeCurrent, keyId, srId, srId)
					
					</div>
					<div class="description">
						Store a certificate issued for a certain holder
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{X509}</span> <b>cert</b>
									
								</dt>
								<dd>the certificate</dd>
							
								<dt>
									<span class="light fixedFont">{Boolean}</span> <b>makeCurrent</b>
									
								</dt>
								<dd>true if this certificate becomes the current certificate</dd>
							
								<dt>
									<span class="light fixedFont">{ByteString}</span> <b>keyId</b>
									
								</dt>
								<dd>the key id that links this certificate to the signer (usually the subjectKeyIdentifier)</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>srId</b>
									
								</dt>
								<dd>service request id</dd>
							
								<dt>
									<b>srId</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>the database id of the certificate</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - _global_</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/AccessController.html">AccessController</a></li>
	
	<li><a href="../symbols/APDU.html">APDU</a></li>
	
	<li><a href="../symbols/AuthenticationObject.html">AuthenticationObject</a></li>
	
	<li><a href="../symbols/CAConnection.html">CAConnection</a></li>
	
	<li><a href="../symbols/ChipAuthentication.html">ChipAuthentication</a></li>
	
	<li><a href="../symbols/ChipAuthenticationDomainParameterInfo.html">ChipAuthenticationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationInfo.html">ChipAuthenticationInfo</a></li>
	
	<li><a href="../symbols/ChipAuthenticationPublicKeyInfo.html">ChipAuthenticationPublicKeyInfo</a></li>
	
	<li><a href="../symbols/CommandInterpreter.html">CommandInterpreter</a></li>
	
	<li><a href="../symbols/CRLGenerator.html">CRLGenerator</a></li>
	
	<li><a href="../symbols/CVC.html">CVC</a></li>
	
	<li><a href="../symbols/CVCCA.html">CVCCA</a></li>
	
	<li><a href="../symbols/CVCertificateStore.html">CVCertificateStore</a></li>
	
	<li><a href="../symbols/DataUnitAPDU.html">DataUnitAPDU</a></li>
	
	<li><a href="../symbols/DF.html">DF</a></li>
	
	<li><a href="../symbols/DKEK.html">DKEK</a></li>
	
	<li><a href="../symbols/DNEncoder.html">DNEncoder</a></li>
	
	<li><a href="../symbols/EAC20.html">EAC20</a></li>
	
	<li><a href="../symbols/EAC2CVCertificateGenerator.html">EAC2CVCertificateGenerator</a></li>
	
	<li><a href="../symbols/EAC2CVRequestGenerator.html">EAC2CVRequestGenerator</a></li>
	
	<li><a href="../symbols/FCP.html">FCP</a></li>
	
	<li><a href="../symbols/File.html">File</a></li>
	
	<li><a href="../symbols/FileEncryptor.html">FileEncryptor</a></li>
	
	<li><a href="../symbols/FileSelector.html">FileSelector</a></li>
	
	<li><a href="../symbols/FileSystemIdObject.html">FileSystemIdObject</a></li>
	
	<li><a href="../symbols/FSNode.html">FSNode</a></li>
	
	<li><a href="../symbols/GPSCP03.html">GPSCP03</a></li>
	
	<li><a href="../symbols/HSMCVCertificateStore.html">HSMCVCertificateStore</a></li>
	
	<li><a href="../symbols/HSMKeyStore.html">HSMKeyStore</a></li>
	
	<li><a href="../symbols/LinearEF.html">LinearEF</a></li>
	
	<li><a href="../symbols/ManagePKA.html">ManagePKA</a></li>
	
	<li><a href="../symbols/P11CVCertificateStore.html">P11CVCertificateStore</a></li>
	
	<li><a href="../symbols/PACE.html">PACE</a></li>
	
	<li><a href="../symbols/PACEDomainParameterInfo.html">PACEDomainParameterInfo</a></li>
	
	<li><a href="../symbols/PACEInfo.html">PACEInfo</a></li>
	
	<li><a href="../symbols/PaperKeyEncoding.html">PaperKeyEncoding</a></li>
	
	<li><a href="../symbols/PKCS10Generator.html">PKCS10Generator</a></li>
	
	<li><a href="../symbols/PublicKeyFile.html">PublicKeyFile</a></li>
	
	<li><a href="../symbols/PublicKeyReference.html">PublicKeyReference</a></li>
	
	<li><a href="../symbols/RAMClient.html">RAMClient</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationDomainParameterInfo.html">RestrictedIdentificationDomainParameterInfo</a></li>
	
	<li><a href="../symbols/RestrictedIdentificationInfo.html">RestrictedIdentificationInfo</a></li>
	
	<li><a href="../symbols/SecureChannelHandler.html">SecureChannelHandler</a></li>
	
	<li><a href="../symbols/SecureMessagingCommandAPDUDecoder.html">SecureMessagingCommandAPDUDecoder</a></li>
	
	<li><a href="../symbols/SecurityEnvironment.html">SecurityEnvironment</a></li>
	
	<li><a href="../symbols/SignatureKey.html">SignatureKey</a></li>
	
	<li><a href="../symbols/SmartCardHSM.html">SmartCardHSM</a></li>
	
	<li><a href="../symbols/SmartCardHSMCrypto.html">SmartCardHSMCrypto</a></li>
	
	<li><a href="../symbols/SmartCardHSMInitializer.html">SmartCardHSMInitializer</a></li>
	
	<li><a href="../symbols/SmartCardHSMKey.html">SmartCardHSMKey</a></li>
	
	<li><a href="../symbols/SmartCardHSMKeySpecGenerator.html">SmartCardHSMKeySpecGenerator</a></li>
	
	<li><a href="../symbols/SmartCardHSMSymmetricKeySpecGenerator.html">SmartCardHSMSymmetricKeySpecGenerator</a></li>
	
	<li><a href="../symbols/TransparentEF.html">TransparentEF</a></li>
	
	<li><a href="../symbols/TrustAnchor.html">TrustAnchor</a></li>
	
	<li><a href="../symbols/X509CertificateGenerator.html">X509CertificateGenerator</a></li>
	
	<li><a href="../symbols/X509CertificateIssuer.html">X509CertificateIssuer</a></li>
	
	<li><a href="../symbols/X509CertificateStore.html">X509CertificateStore</a></li>
	
	<li><a href="../symbols/X509Signer.html">X509Signer</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Built-In Namespace _global_
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				
				
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class _global_.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/_global_.html#CryptoProvider">CryptoProvider</a></b>(sc, slot, slot)
								</div>
								<div class="description">Crypto Provider for accessing a SmartCard-HSM</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/_global_.html#EACCryptoProvider">EACCryptoProvider</a></b>(sc, id)
								</div>
								<div class="description">Crypto Provider for EAC-PKI</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/_global_.html#PKCS1">PKCS1</a></b>()
								</div>
								<div class="description">Empty constructor</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/_global_.html#PKCS10">PKCS10</a></b>(req)
								</div>
								<div class="description">Class supporting PKCS#10 certificate signing requests</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/_global_.html#PKCS8">PKCS8</a></b>()
								</div>
								<div class="description">Empty constructor</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/_global_.html#PKIXCommon">PKIXCommon</a></b>()
								</div>
								<div class="description">Common functions and constants</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="CryptoProvider"> </a>
					<div class="fixedFont">
					
					
					<b>CryptoProvider</b>(sc, slot, slot)
					
					</div>
					<div class="description">
						Crypto Provider for accessing a SmartCard-HSM
						
							<br />
							<i>Defined in: </i> <a href="../symbols/src/sc-hsm_CryptoProvider.js.html">CryptoProvider.js</a>.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/SmartCardHSM.html">SmartCardHSM</a>}</span> <b>sc</b>
									
								</dt>
								<dd>the associated SmartCard-HSM</dd>
							
								<dt>
									<span class="light fixedFont">{Number}</span> <b>slot</b>
									
								</dt>
								<dd>the key domain slot. If undefined or -1 no key domain will be set</dd>
							
								<dt>
									<b>slot</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="EACCryptoProvider"> </a>
					<div class="fixedFont">
					
					
					<b>EACCryptoProvider</b>(sc, id)
					
					</div>
					<div class="description">
						Crypto Provider for EAC-PKI
						
							<br />
							<i>Defined in: </i> <a href="../symbols/src/sc-hsm_EACCryptoProvider.js.html">EACCryptoProvider.js</a>.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{<a href="../symbols/SmartCardHSM.html">SmartCardHSM</a>}</span> <b>sc</b>
									
								</dt>
								<dd>the associated SmartCard-HSM</dd>
							
								<dt>
									<b>id</b>
									
								</dt>
								<dd></dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="PKCS1"> </a>
					<div class="fixedFont">
					
					
					<b>PKCS1</b>()
					
					</div>
					<div class="description">
						Empty constructor
						
							<br />
							<i>Defined in: </i> <a href="../symbols/src/pkcs_PKCS1.js.html">PKCS1.js</a>.
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="PKCS10"> </a>
					<div class="fixedFont">
					
					
					<b>PKCS10</b>(req)
					
					</div>
					<div class="description">
						Class supporting PKCS#10 certificate signing requests
						
							<br />
							<i>Defined in: </i> <a href="../symbols/src/pkcs_PKCS10.js.html">PKCS10.js</a>.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<span class="light fixedFont">{ASN1}</span> <b>req</b>
									
								</dt>
								<dd>the certificate request</dd>
							
							</dl>
						
						
						
						
						
						
						

					<hr />
				
					<a name="PKCS8"> </a>
					<div class="fixedFont">
					
					
					<b>PKCS8</b>()
					
					</div>
					<div class="description">
						Empty constructor
						
							<br />
							<i>Defined in: </i> <a href="../symbols/src/pkcs_PKCS8.js.html">PKCS8.js</a>.
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					<hr />
				
					<a name="PKIXCommon"> </a>
					<div class="fixedFont">
					
					
					<b>PKIXCommon</b>()
					
					</div>
					<div class="description">
						Common functions and constants
						
							<br />
							<i>Defined in: </i> <a href="../symbols/src/x509_PKIXCommon.js.html">PKIXCommon.js</a>.
						
						
					</div>
					
					
					
						
						
						
						
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Thu Apr 30 2026 15:08:16 GMT+0200 (CEST)
		</div>
	</body>
</html>
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of ISO 7816-4 APDU processing
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Create an APDU
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * &lt;p>This constructor supports the signatures&lt;/p>
<span class='line'> 33</span>  * &lt;ul>
<span class='line'> 34</span>  *  &lt;li>APDU(ByteString command)&lt;/li>
<span class='line'> 35</span>  *  &lt;li>APDU(Number cla, Number ins, Number p1, Number p2)&lt;/li>
<span class='line'> 36</span>  *  &lt;li>APDU(Number cla, Number ins, Number p1, Number p2, data)&lt;/li>
<span class='line'> 37</span>  *  &lt;li>APDU(Number cla, Number ins, Number p1, Number p2, data, Ne)&lt;/li>
<span class='line'> 38</span>  * &lt;/ul>
<span class='line'> 39</span>  * @class Class implementing support for command and response APDUs
<span class='line'> 40</span>  * @constructor
<span class='line'> 41</span>  * @param {ByteString} command the command APDU
<span class='line'> 42</span>  * @param {Number} cla the class byte
<span class='line'> 43</span>  * @param {Number} ins the instruction byte
<span class='line'> 44</span>  * @param {Number} p1 the first parameter
<span class='line'> 45</span>  * @param {Number} p2 the second parameter
<span class='line'> 46</span>  * @param {ByteString} data the data field (optional)
<span class='line'> 47</span>  * @param {Number} Ne the number of expected bytes (optional)
<span class='line'> 48</span>  */</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arg</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Only one argument of type ByteString expected"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">			</span><span class="NAME">this.fromByteString</span><span class="PUNC">(</span><span class="NAME">arg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"4 to 6 arguments expected"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 61</span> 
<span class='line'> 62</span> </span><span class="WHIT">			</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be of type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">			</span><span class="NAME">this.cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT">			</span><span class="NAME">this.ins</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">			</span><span class="NAME">this.p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">			</span><span class="NAME">this.p2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> 
<span class='line'> 72</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">					</span><span class="NAME">this.cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">					</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 79</span> 
<span class='line'> 80</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be of type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">				</span><span class="NAME">this.ne</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="NAME">this.rapdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="NAME">this.SW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 91</span> 
<span class='line'> 92</span> </span><span class="NAME">exports.APDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> 
<span class='line'> 94</span> 
<span class='line'> 95</span> 
<span class='line'> 96</span> </span><span class="NAME">APDU.INS_DEACTIVATE</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="NAME">APDU.INS_VERIFY</span><span class="WHIT">			</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="NAME">APDU.INS_MANAGE_SE</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="NAME">APDU.INS_CHANGE_REFERENCE_DATA</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x24</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> </span><span class="NAME">APDU.INS_PSO</span><span class="WHIT">			</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x2A</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="NAME">APDU.INS_RESET_RETRY_COUNTER</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x2C</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="NAME">APDU.INS_ACTIVATE</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x44</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="NAME">APDU.INS_GENERATE_KEY_PAIR</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x46</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="NAME">APDU.INS_GENERATE_KEY</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x48</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="NAME">APDU.INS_INITIALIZE_UPDATE</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x50</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span> </span><span class="NAME">APDU.INS_EXTERNAL_AUTHENTICATE</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="NAME">APDU.INS_GET_CHALLENGE</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> </span><span class="NAME">APDU.INS_GENERAL_AUTHENTICATE</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>109</span> </span><span class="NAME">APDU.INS_COMPUTE_DIGITAL_SIGN</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x9E</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="NAME">APDU.INS_SELECT</span><span class="WHIT">			</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>111</span> </span><span class="NAME">APDU.INS_READBINARY</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> </span><span class="NAME">APDU.INS_READ_BINARY</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>113</span> </span><span class="NAME">APDU.INS_READ_RECORD</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xB2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>114</span> </span><span class="NAME">APDU.INS_VERIFY_CERTIFICATE</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xBE</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> </span><span class="NAME">APDU.INS_GET_RESPONSE</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>116</span> </span><span class="NAME">APDU.INS_GET_DATA</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xCA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>117</span> </span><span class="NAME">APDU.INS_UPDATE_BINARY</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xD6</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="NAME">APDU.INS_PUT_KEY</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xD8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="NAME">APDU.INS_PUT_DATA</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xDA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="NAME">APDU.INS_DELETE</span><span class="WHIT">			</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xE4</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="NAME">APDU.INS_TERMINATE</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xE6</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="NAME">APDU.INS_SET_STATUS</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xF0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> 
<span class='line'>124</span> </span><span class="NAME">APDU.SW_OK</span><span class="WHIT">                 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/* Process completed                 */</span><span class="WHIT">
<span class='line'>125</span> 
<span class='line'>126</span> </span><span class="NAME">APDU.SW_TIMEOUT</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6401</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/* Exec error: Command timeout       */</span><span class="WHIT">
<span class='line'>127</span> 
<span class='line'>128</span> </span><span class="NAME">APDU.SW_OKMOREDATA</span><span class="WHIT">         </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6100</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Process completed, more data available*/</span><span class="WHIT">
<span class='line'>129</span> </span><span class="NAME">APDU.SW_WARNING</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6200</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Warning: NV-Ram not changed       */</span><span class="WHIT">
<span class='line'>130</span> </span><span class="NAME">APDU.SW_WARNING1</span><span class="WHIT">           </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6201</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Warning: NV-Ram not changed 1     */</span><span class="WHIT">
<span class='line'>131</span> </span><span class="NAME">APDU.SW_DATAINV</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6281</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Warning: Part of data corrupted   */</span><span class="WHIT">
<span class='line'>132</span> </span><span class="NAME">APDU.SW_EOF</span><span class="WHIT">                </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6282</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Warning: End of file reached      */</span><span class="WHIT">
<span class='line'>133</span> </span><span class="NAME">APDU.SW_INVFILE</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6283</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/* Warning: Invalidated file         */</span><span class="WHIT">
<span class='line'>134</span> </span><span class="NAME">APDU.SW_INVFORMAT</span><span class="WHIT">          </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6284</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/* Warning: Invalid file control     */</span><span class="WHIT">
<span class='line'>135</span> </span><span class="NAME">APDU.SW_WARNINGNVCHG</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6300</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Warning: NV-Ram changed           */</span><span class="WHIT">
<span class='line'>136</span> </span><span class="NAME">APDU.SW_WARNINGCOUNT</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x63C0</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Warning: Warning with counter     */</span><span class="WHIT">
<span class='line'>137</span> </span><span class="NAME">APDU.SW_WARNING0LEFT</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x63C0</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Warning: Verify fail, no try left */</span><span class="WHIT">
<span class='line'>138</span> </span><span class="NAME">APDU.SW_WARNING1LEFT</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x63C1</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Warning: Verify fail, 1 try left  */</span><span class="WHIT">
<span class='line'>139</span> </span><span class="NAME">APDU.SW_WARNING2LEFT</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x63C2</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Warning: Verify fail, 2 tries left*/</span><span class="WHIT">
<span class='line'>140</span> </span><span class="NAME">APDU.SW_WARNING3LEFT</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x63C3</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Warning: Verify fail, 3 tries left*/</span><span class="WHIT">
<span class='line'>141</span> </span><span class="NAME">APDU.SW_EXECERR</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6400</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Exec error: NV-Ram not changed    */</span><span class="WHIT">
<span class='line'>142</span> </span><span class="NAME">APDU.SW_MEMERR</span><span class="WHIT">             </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6501</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Exec error: Memory failure        */</span><span class="WHIT">
<span class='line'>143</span> </span><span class="NAME">APDU.SW_MEMERRWRITE</span><span class="WHIT">        </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6581</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Exec error: Memory failure        */</span><span class="WHIT">
<span class='line'>144</span> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="WHIT">        </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6700</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Wrong length      */</span><span class="WHIT">
<span class='line'>145</span> 
<span class='line'>146</span> </span><span class="NAME">APDU.SW_CLANOTSUPPORTED</span><span class="WHIT">    </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6800</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Function in CLA byte not supported */</span><span class="WHIT">
<span class='line'>147</span> </span><span class="NAME">APDU.SW_LCNOTSUPPORTED</span><span class="WHIT">     </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6881</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Logical channel not supported */</span><span class="WHIT">
<span class='line'>148</span> </span><span class="NAME">APDU.SW_SMNOTSUPPORTED</span><span class="WHIT">     </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6882</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Secure Messaging not supported */</span><span class="WHIT">
<span class='line'>149</span> </span><span class="NAME">APDU.SW_LASTCMDEXPECTED</span><span class="WHIT">    </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6883</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Last command of the chain expected */</span><span class="WHIT">
<span class='line'>150</span> </span><span class="NAME">APDU.SW_CHAINNOTSUPPORTED</span><span class="WHIT">  </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6884</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Command chaining not supported */</span><span class="WHIT">
<span class='line'>151</span> 
<span class='line'>152</span> </span><span class="NAME">APDU.SW_COMNOTALLOWED</span><span class="WHIT">      </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6900</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Command not allowed */</span><span class="WHIT">
<span class='line'>153</span> </span><span class="NAME">APDU.SW_COMINCOMPATIBLE</span><span class="WHIT">    </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6981</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Command incompatible with file structure */</span><span class="WHIT">
<span class='line'>154</span> </span><span class="NAME">APDU.SW_SECSTATNOTSAT</span><span class="WHIT">      </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6982</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Security condition not satisfied */</span><span class="WHIT">
<span class='line'>155</span> </span><span class="NAME">APDU.SW_AUTHMETHLOCKED</span><span class="WHIT">     </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6983</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Authentication method locked */</span><span class="WHIT">
<span class='line'>156</span> </span><span class="NAME">APDU.SW_REFDATANOTUSABLE</span><span class="WHIT">   </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6984</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Reference data not usable */</span><span class="WHIT">
<span class='line'>157</span> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="WHIT">    </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6985</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Condition of use not satisfied */</span><span class="WHIT">
<span class='line'>158</span> </span><span class="NAME">APDU.SW_COMNOTALLOWNOEF</span><span class="WHIT">    </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6986</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Command not allowed (no current EF) */</span><span class="WHIT">
<span class='line'>159</span> </span><span class="NAME">APDU.SW_SMOBJMISSING</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6987</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Expected secure messaging object missing */</span><span class="WHIT">
<span class='line'>160</span> </span><span class="NAME">APDU.SW_INCSMDATAOBJECT</span><span class="WHIT">    </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6988</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Incorrect secure messaging data object */</span><span class="WHIT">
<span class='line'>161</span> 
<span class='line'>162</span> </span><span class="NAME">APDU.SW_INVPARA</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A00</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Wrong parameter P1-P2 */</span><span class="WHIT">
<span class='line'>163</span> </span><span class="NAME">APDU.SW_INVDATA</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A80</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Incorrect parameter in the command data field*/</span><span class="WHIT">
<span class='line'>164</span> </span><span class="NAME">APDU.SW_FUNCNOTSUPPORTED</span><span class="WHIT">   </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A81</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Function not supported */</span><span class="WHIT">
<span class='line'>165</span> </span><span class="NAME">APDU.SW_NOAPPL</span><span class="WHIT">             </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A82</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: File not found    */</span><span class="WHIT">
<span class='line'>166</span> </span><span class="NAME">APDU.SW_FILENOTFOUND</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A82</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: File not found    */</span><span class="WHIT">
<span class='line'>167</span> </span><span class="NAME">APDU.SW_RECORDNOTFOUND</span><span class="WHIT">     </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A83</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Record not found    */</span><span class="WHIT">
<span class='line'>168</span> </span><span class="NAME">APDU.SW_OUTOFMEMORY</span><span class="WHIT">        </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A84</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Not enough memory space in the file   */</span><span class="WHIT">
<span class='line'>169</span> </span><span class="NAME">APDU.SW_INVLCTLV</span><span class="WHIT">           </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A85</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Nc inconsistent with TLV structure */</span><span class="WHIT">
<span class='line'>170</span> </span><span class="NAME">APDU.SW_INVACC</span><span class="WHIT">             </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A85</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Access cond. n/f  */</span><span class="WHIT">
<span class='line'>171</span> </span><span class="NAME">APDU.SW_INCP1P2</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A86</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Incorrect P1-P2   */</span><span class="WHIT">
<span class='line'>172</span> </span><span class="NAME">APDU.SW_INVLC</span><span class="WHIT">              </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A87</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Lc inconsistent with P1-P2 */</span><span class="WHIT">
<span class='line'>173</span> </span><span class="NAME">APDU.SW_RDNOTFOUND</span><span class="WHIT">         </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Reference data not found*/</span><span class="WHIT">
<span class='line'>174</span> </span><span class="NAME">APDU.SW_FILEEXISTS</span><span class="WHIT">         </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A89</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: File already exists */</span><span class="WHIT">
<span class='line'>175</span> </span><span class="NAME">APDU.SW_DFNAMEEXISTS</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6A8A</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: DF name already exists */</span><span class="WHIT">
<span class='line'>176</span> 
<span class='line'>177</span> </span><span class="NAME">APDU.SW_INVP1P2</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6B00</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Wrong parameter P1-P2 */</span><span class="WHIT">
<span class='line'>178</span> </span><span class="NAME">APDU.SW_INVLE</span><span class="WHIT">              </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6C00</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Invalid Le        */</span><span class="WHIT">
<span class='line'>179</span> </span><span class="NAME">APDU.SW_INVINS</span><span class="WHIT">             </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6D00</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Wrong instruction */</span><span class="WHIT">
<span class='line'>180</span> </span><span class="NAME">APDU.SW_INVCLA</span><span class="WHIT">             </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6E00</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: Class not supported */</span><span class="WHIT">
<span class='line'>181</span> </span><span class="NAME">APDU.SW_ACNOTSATISFIED</span><span class="WHIT">     </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x9804</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/* Access conditions not satisfied   */</span><span class="WHIT">
<span class='line'>182</span> </span><span class="NAME">APDU.SW_NOMORESTORAGE</span><span class="WHIT">      </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x9210</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/* No more storage available         */</span><span class="WHIT">
<span class='line'>183</span> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x6F00</span><span class="PUNC">;</span><span class="WHIT">      	</span><span class="COMM">/*-Checking error: No precise diagnosis */</span><span class="WHIT">
<span class='line'>184</span> 
<span class='line'>185</span> 
<span class='line'>186</span> </span><span class="COMM">/**
<span class='line'>187</span>  * Create an APDU object from the encoded form (Called internally)
<span class='line'>188</span>  *
<span class='line'>189</span>  * @param {ByteString} bs
<span class='line'>190</span>  */</span><span class="WHIT">
<span class='line'>191</span> </span><span class="NAME">APDU.prototype.fromByteString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bs.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Command APDU must be at least 4 bytes long"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">	</span><span class="NAME">this.cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bs.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="NAME">this.ins</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bs.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="NAME">this.p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bs.byteAt</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="NAME">this.p2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bs.byteAt</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> 
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bs.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">extended</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> 
<span class='line'>203</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bs.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">		</span><span class="NAME">l</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> 
<span class='line'>208</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">			</span><span class="NAME">extended</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Extended length APDU too short"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">			</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">bs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">			</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">			</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>217</span> 
<span class='line'>218</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">	</span><span class="COMM">// Case 3s / Case 3e / Case 4s / Case 4e</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid Lc in APDU"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">			</span><span class="NAME">this.cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bs.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">			</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">			</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> 
<span class='line'>226</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">	</span><span class="COMM">// Case 4s / Case 4e</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">				</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">				</span><span class="NAME">l</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">extended</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">						</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid Le in extended APDU"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">					</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">bs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">					</span><span class="NAME">l</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">				</span><span class="NAME">this.ne</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">extended</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">			</span><span class="NAME">this.ne</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">extended</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>241</span> 
<span class='line'>242</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Too many bytes in APDU"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>246</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>247</span> 
<span class='line'>248</span> 
<span class='line'>249</span> 
<span class='line'>250</span> </span><span class="COMM">/**
<span class='line'>251</span>  * Get encoded command APDU
<span class='line'>252</span>  *
<span class='line'>253</span>  * @type ByteString
<span class='line'>254</span>  * @return the encoded command APDU
<span class='line'>255</span>  */</span><span class="WHIT">
<span class='line'>256</span> </span><span class="NAME">APDU.prototype.getCommandAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> 
<span class='line'>259</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.cla</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.ins</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.p1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.p2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> 
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hasCData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.cdata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hasNe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.ne</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> 
<span class='line'>267</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">extended</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">hasCData</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.cdata.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">255</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">					</span><span class="PUNC">(</span><span class="NAME">hasNe</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.ne</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>269</span> 
<span class='line'>270</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">extended</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>273</span> 
<span class='line'>274</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hasCData</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.cdata.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">extended</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.cdata.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.cdata.length</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.cdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>281</span> 
<span class='line'>282</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hasNe</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">extended</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.ne</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.ne</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>288</span> 
<span class='line'>289</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>291</span> 
<span class='line'>292</span> 
<span class='line'>293</span> 
<span class='line'>294</span> </span><span class="COMM">/**
<span class='line'>295</span>  * Get encoded response APDU
<span class='line'>296</span>  *
<span class='line'>297</span>  * @type ByteString
<span class='line'>298</span>  * @return the encoded response APDU
<span class='line'>299</span>  */</span><span class="WHIT">
<span class='line'>300</span> </span><span class="NAME">APDU.prototype.getResponseAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>302</span> 
<span class='line'>303</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.rdata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>304</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.rdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>306</span> 
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.SW</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.SW</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> 
<span class='line'>310</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>311</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>312</span> 
<span class='line'>313</span> 
<span class='line'>314</span> 
<span class='line'>315</span> </span><span class="COMM">/**
<span class='line'>316</span>  * Gets the class byte
<span class='line'>317</span>  *
<span class='line'>318</span>  * @type Number
<span class='line'>319</span>  * @return the class byte
<span class='line'>320</span>  */</span><span class="WHIT">
<span class='line'>321</span> </span><span class="NAME">APDU.prototype.getCLA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.cla</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>324</span> 
<span class='line'>325</span> 
<span class='line'>326</span> 
<span class='line'>327</span> </span><span class="COMM">/**
<span class='line'>328</span>  * Sets the class byte, e.g. after a transformation
<span class='line'>329</span>  *
<span class='line'>330</span>  * @parameter {Number} the new CLA byte
<span class='line'>331</span>  */</span><span class="WHIT">
<span class='line'>332</span> </span><span class="NAME">APDU.prototype.setCLA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cla</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">	</span><span class="NAME">this.cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cla</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>335</span> 
<span class='line'>336</span> 
<span class='line'>337</span> 
<span class='line'>338</span> </span><span class="COMM">/**
<span class='line'>339</span>  * Test if command is an ISO command
<span class='line'>340</span>  *
<span class='line'>341</span>  * @type boolean
<span class='line'>342</span>  * @return true if command has ISO class byte
<span class='line'>343</span>  */</span><span class="WHIT">
<span class='line'>344</span> </span><span class="NAME">APDU.prototype.isISO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cla</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>347</span> 
<span class='line'>348</span> 
<span class='line'>349</span> 
<span class='line'>350</span> </span><span class="COMM">/**
<span class='line'>351</span>  * Test if command uses extended length
<span class='line'>352</span>  *
<span class='line'>353</span>  * @type boolean
<span class='line'>354</span>  * @return true if APDU uses extended length
<span class='line'>355</span>  */</span><span class="WHIT">
<span class='line'>356</span> </span><span class="NAME">APDU.prototype.isExtendedLength</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.cdata.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">255</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasLe</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.ne</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>358</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>359</span> 
<span class='line'>360</span> 
<span class='line'>361</span> 
<span class='line'>362</span> </span><span class="COMM">/**
<span class='line'>363</span>  * Test if command chaining is indicated
<span class='line'>364</span>  *
<span class='line'>365</span>  * @type boolean
<span class='line'>366</span>  * @return true if chaining bit is set
<span class='line'>367</span>  */</span><span class="WHIT">
<span class='line'>368</span> </span><span class="NAME">APDU.prototype.isChained</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cla</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x10</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x10</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>370</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>371</span> 
<span class='line'>372</span> 
<span class='line'>373</span> 
<span class='line'>374</span> </span><span class="COMM">/**
<span class='line'>375</span>  * Test if command is send using secure messaging
<span class='line'>376</span>  *
<span class='line'>377</span>  * @type boolean
<span class='line'>378</span>  * @return true if secure messaging is indicated in CLA byte
<span class='line'>379</span>  */</span><span class="WHIT">
<span class='line'>380</span> </span><span class="NAME">APDU.prototype.isSecureMessaging</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cla</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x08</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x08</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>383</span> 
<span class='line'>384</span> 
<span class='line'>385</span> 
<span class='line'>386</span> </span><span class="COMM">/**
<span class='line'>387</span>  * Test if command is send using secure messaging
<span class='line'>388</span>  *
<span class='line'>389</span>  * @type boolean
<span class='line'>390</span>  * @return true if secure messaging is using an authenticated header
<span class='line'>391</span>  */</span><span class="WHIT">
<span class='line'>392</span> </span><span class="NAME">APDU.prototype.isAuthenticatedHeader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>393</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cla</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>394</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>395</span> 
<span class='line'>396</span> 
<span class='line'>397</span> 
<span class='line'>398</span> </span><span class="COMM">/**
<span class='line'>399</span>  * Gets the instruction byte
<span class='line'>400</span>  *
<span class='line'>401</span>  * @type Number
<span class='line'>402</span>  * @return the instruction byte
<span class='line'>403</span>  */</span><span class="WHIT">
<span class='line'>404</span> </span><span class="NAME">APDU.prototype.getINS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.ins</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>406</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>407</span> 
<span class='line'>408</span> 
<span class='line'>409</span> 
<span class='line'>410</span> </span><span class="COMM">/**
<span class='line'>411</span>  * Gets the P1 byte
<span class='line'>412</span>  *
<span class='line'>413</span>  * @type Number
<span class='line'>414</span>  * @return the P1 byte
<span class='line'>415</span>  */</span><span class="WHIT">
<span class='line'>416</span> </span><span class="NAME">APDU.prototype.getP1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.p1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>418</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>419</span> 
<span class='line'>420</span> 
<span class='line'>421</span> 
<span class='line'>422</span> </span><span class="COMM">/**
<span class='line'>423</span>  * Gets the P2 byte
<span class='line'>424</span>  *
<span class='line'>425</span>  * @type Number
<span class='line'>426</span>  * @return the P2 byte
<span class='line'>427</span>  */</span><span class="WHIT">
<span class='line'>428</span> </span><span class="NAME">APDU.prototype.getP2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>429</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.p2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>430</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>431</span> 
<span class='line'>432</span> 
<span class='line'>433</span> 
<span class='line'>434</span> </span><span class="COMM">/**
<span class='line'>435</span>  * Set the command data
<span class='line'>436</span>  *
<span class='line'>437</span>  * @param {ByteString} cdata the command data
<span class='line'>438</span>  */</span><span class="WHIT">
<span class='line'>439</span> </span><span class="NAME">APDU.prototype.setCData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cdata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>440</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cdata</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>441</span> </span><span class="WHIT">		</span><span class="NAME">this.cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>442</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>443</span> </span><span class="WHIT">		</span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">this.cdata</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>444</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>445</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>446</span> 
<span class='line'>447</span> 
<span class='line'>448</span> 
<span class='line'>449</span> </span><span class="COMM">/**
<span class='line'>450</span>  * Gets the command data
<span class='line'>451</span>  *
<span class='line'>452</span>  * @type ByteString
<span class='line'>453</span>  * @return the command data, if any else undefined
<span class='line'>454</span>  */</span><span class="WHIT">
<span class='line'>455</span> </span><span class="NAME">APDU.prototype.getCData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.cdata</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>457</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>458</span> 
<span class='line'>459</span> 
<span class='line'>460</span> 
<span class='line'>461</span> </span><span class="COMM">/**
<span class='line'>462</span>  * Check if APDU has command data
<span class='line'>463</span>  *
<span class='line'>464</span>  * @type boolean
<span class='line'>465</span>  * @return true if command APDU has data field
<span class='line'>466</span>  */</span><span class="WHIT">
<span class='line'>467</span> </span><span class="NAME">APDU.prototype.hasCData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>468</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.cdata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>469</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>470</span> 
<span class='line'>471</span> 
<span class='line'>472</span> 
<span class='line'>473</span> </span><span class="COMM">/**
<span class='line'>474</span>  * Gets the command data as a list of TLV objects
<span class='line'>475</span>  *
<span class='line'>476</span>  * @type TLVList
<span class='line'>477</span>  * @return the command data as TLV list, if any else undefined
<span class='line'>478</span>  */</span><span class="WHIT">
<span class='line'>479</span> </span><span class="NAME">APDU.prototype.getCDataAsTLVList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>480</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No data in command APDU"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>483</span> 
<span class='line'>484</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>485</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TLVList</span><span class="PUNC">(</span><span class="NAME">this.cdata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">TLV.EMV</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>486</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>487</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>488</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid TLV data in command APDU"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>489</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>490</span> 
<span class='line'>491</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>492</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>493</span> 
<span class='line'>494</span> 
<span class='line'>495</span> 
<span class='line'>496</span> </span><span class="COMM">/**
<span class='line'>497</span>  * Gets the number of expected bytes
<span class='line'>498</span>  *
<span class='line'>499</span>  * @type Number
<span class='line'>500</span>  * @return the number of expected bytes or undefined
<span class='line'>501</span>  */</span><span class="WHIT">
<span class='line'>502</span> </span><span class="NAME">APDU.prototype.getNe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.ne</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>504</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>505</span> 
<span class='line'>506</span> 
<span class='line'>507</span> 
<span class='line'>508</span> </span><span class="COMM">/**
<span class='line'>509</span>  * Check if APDU has Le field
<span class='line'>510</span>  *
<span class='line'>511</span>  * @type boolean
<span class='line'>512</span>  * @return true if command APDU has Le field
<span class='line'>513</span>  */</span><span class="WHIT">
<span class='line'>514</span> </span><span class="NAME">APDU.prototype.hasLe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.ne</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>516</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>517</span> 
<span class='line'>518</span> 
<span class='line'>519</span> 
<span class='line'>520</span> </span><span class="COMM">/**
<span class='line'>521</span>  * Set secure channel object to be used in wrap and unwrap methods
<span class='line'>522</span>  *
<span class='line'>523</span>  * @param {SecureChannel} secureChannel the channel
<span class='line'>524</span>  */</span><span class="WHIT">
<span class='line'>525</span> </span><span class="NAME">APDU.prototype.setSecureChannel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">secureChannel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>526</span> </span><span class="WHIT">	</span><span class="NAME">this.secureChannel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">secureChannel</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>527</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>528</span> 
<span class='line'>529</span> 
<span class='line'>530</span> 
<span class='line'>531</span> </span><span class="COMM">/**
<span class='line'>532</span>  * Return the secure channel, if any
<span class='line'>533</span>  *
<span class='line'>534</span>  * @type SecureChannel
<span class='line'>535</span>  * @return the secure channel
<span class='line'>536</span>  */</span><span class="WHIT">
<span class='line'>537</span> </span><span class="NAME">APDU.prototype.getSecureChannel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>538</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.secureChannel</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>539</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>540</span> 
<span class='line'>541</span> 
<span class='line'>542</span> 
<span class='line'>543</span> </span><span class="COMM">/**
<span class='line'>544</span>  * Test if a secure channel is defined for this APDU
<span class='line'>545</span>  *
<span class='line'>546</span>  * @type boolean
<span class='line'>547</span>  * @return true, if secure channel is set
<span class='line'>548</span>  */</span><span class="WHIT">
<span class='line'>549</span> </span><span class="NAME">APDU.prototype.hasSecureChannel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>550</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.secureChannel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.secureChannel</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>551</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>552</span> 
<span class='line'>553</span> 
<span class='line'>554</span> 
<span class='line'>555</span> </span><span class="COMM">/**
<span class='line'>556</span>  * Wrap APDU using secure channel
<span class='line'>557</span>  */</span><span class="WHIT">
<span class='line'>558</span> </span><span class="NAME">APDU.prototype.wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>559</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasSecureChannel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>560</span> </span><span class="WHIT">		</span><span class="NAME">this.secureChannel.wrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>562</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>563</span> 
<span class='line'>564</span> 
<span class='line'>565</span> 
<span class='line'>566</span> </span><span class="COMM">/**
<span class='line'>567</span>  * Unwrap APDU using secure channel
<span class='line'>568</span>  */</span><span class="WHIT">
<span class='line'>569</span> </span><span class="NAME">APDU.prototype.unwrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>570</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasSecureChannel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT">		</span><span class="NAME">this.secureChannel.unwrap</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>572</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>573</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>574</span> 
<span class='line'>575</span> 
<span class='line'>576</span> 
<span class='line'>577</span> </span><span class="COMM">/**
<span class='line'>578</span>  * Sets the response data field for the response APDU
<span class='line'>579</span>  *
<span class='line'>580</span>  * @param {ByteString} data the response data field
<span class='line'>581</span>  */</span><span class="WHIT">
<span class='line'>582</span> </span><span class="NAME">APDU.prototype.setRData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>583</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">data.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>584</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Too many bytes in APDU"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>585</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>586</span> </span><span class="WHIT">	</span><span class="NAME">this.rdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>587</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>588</span> 
<span class='line'>589</span> 
<span class='line'>590</span> 
<span class='line'>591</span> </span><span class="COMM">/**
<span class='line'>592</span>  * Get the response data
<span class='line'>593</span>  *
<span class='line'>594</span>  * @type ByteString
<span class='line'>595</span>  * @return the response data
<span class='line'>596</span>  */</span><span class="WHIT">
<span class='line'>597</span> </span><span class="NAME">APDU.prototype.getRData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>598</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.rdata</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>599</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>600</span> 
<span class='line'>601</span> 
<span class='line'>602</span> 
<span class='line'>603</span> </span><span class="COMM">/**
<span class='line'>604</span>  * Check if APDU has response data
<span class='line'>605</span>  *
<span class='line'>606</span>  * @type boolean
<span class='line'>607</span>  * @return true if response APDU has data field
<span class='line'>608</span>  */</span><span class="WHIT">
<span class='line'>609</span> </span><span class="NAME">APDU.prototype.hasRData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>610</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.rdata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.rdata</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>611</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>612</span> 
<span class='line'>613</span> 
<span class='line'>614</span> 
<span class='line'>615</span> </span><span class="COMM">/**
<span class='line'>616</span>  * Sets the status word for the response ADPU
<span class='line'>617</span>  *
<span class='line'>618</span>  * @param {Number} sw the status word
<span class='line'>619</span>  */</span><span class="WHIT">
<span class='line'>620</span> </span><span class="NAME">APDU.prototype.setSW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sw</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>621</span> </span><span class="WHIT">	</span><span class="NAME">this.SW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>622</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>623</span> 
<span class='line'>624</span> 
<span class='line'>625</span> 
<span class='line'>626</span> </span><span class="COMM">/**
<span class='line'>627</span>  * Get the status word
<span class='line'>628</span>  *
<span class='line'>629</span>  * @type Number
<span class='line'>630</span>  * @return the status word
<span class='line'>631</span>  */</span><span class="WHIT">
<span class='line'>632</span> </span><span class="NAME">APDU.prototype.getSW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>633</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.SW</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>634</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>635</span> 
<span class='line'>636</span> 
<span class='line'>637</span> 
<span class='line'>638</span> </span><span class="COMM">/**
<span class='line'>639</span>  * Return a human readable form of this object
<span class='line'>640</span>  */</span><span class="WHIT">
<span class='line'>641</span> </span><span class="NAME">APDU.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>642</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getCommandAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getResponseAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>643</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>644</span> 
<span class='line'>645</span> 
<span class='line'>646</span> 
<span class='line'>647</span> </span><span class="COMM">/**
<span class='line'>648</span>  * Simple unit test
<span class='line'>649</span>  */</span><span class="WHIT">
<span class='line'>650</span> </span><span class="NAME">APDU.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>651</span> </span><span class="WHIT">	</span><span class="COMM">// Case 1</span><span class="WHIT">
<span class='line'>652</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>653</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>654</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">a.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>655</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.getCommandAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>656</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">b.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00A4000C"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>657</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>658</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">c.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>659</span> 
<span class='line'>660</span> </span><span class="WHIT">	</span><span class="COMM">// Case 2 Short</span><span class="WHIT">
<span class='line'>661</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>662</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>663</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">a.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>664</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.getCommandAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>665</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">b.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00A4000C00"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>666</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>667</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">c.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>668</span> 
<span class='line'>669</span> </span><span class="WHIT">	</span><span class="COMM">// Case 2 Extended</span><span class="WHIT">
<span class='line'>670</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>671</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>672</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>673</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.getCommandAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>674</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">b.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00A4000C000000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>675</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>676</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>677</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">c.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>678</span> 
<span class='line'>679</span> </span><span class="WHIT">	</span><span class="COMM">// Case 3 Short</span><span class="WHIT">
<span class='line'>680</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"3F00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>681</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>682</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">a.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>683</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.getCommandAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>684</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">b.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00A4000C023F00"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>685</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>686</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">c.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>687</span> 
<span class='line'>688</span> </span><span class="WHIT">	</span><span class="COMM">// Case 3 Extended</span><span class="WHIT">
<span class='line'>689</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>690</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>691</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>692</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>693</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.getCommandAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>694</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">b.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00A4000C000100"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>695</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>696</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">c.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>697</span> 
<span class='line'>698</span> </span><span class="WHIT">	</span><span class="COMM">// Case 4 Short</span><span class="WHIT">
<span class='line'>699</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"3F00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>700</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>701</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">a.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>702</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.getCommandAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>703</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">b.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00A4000C023F0000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>704</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>705</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">c.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>706</span> 
<span class='line'>707</span> </span><span class="WHIT">	</span><span class="COMM">// Case 4b Extended</span><span class="WHIT">
<span class='line'>708</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>709</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>710</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>711</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.getCommandAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>712</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">b.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00A4000C000100"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"0000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>713</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>714</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">c.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>715</span> 
<span class='line'>716</span> </span><span class="WHIT">	</span><span class="COMM">// Case 4b Extended</span><span class="WHIT">
<span class='line'>717</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"3F00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>718</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>719</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>720</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.getCommandAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>721</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">b.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00A4000C0000023F000000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>722</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>723</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">c.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>724</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>725</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  --------- 
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview AccessController base class
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="WHIT"> 
<span class='line'> 28</span> </span><span class="COMM">/**
<span class='line'> 29</span>  * Create an default controller granting read but denying write access 
<span class='line'> 30</span>  * @Class Class implementing a default access controller
<span class='line'> 31</span>  * @constructor
<span class='line'> 32</span>  */</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">AccessController</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 34</span> </span><span class="WHIT">	</span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"AccessController"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 35</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 36</span> 
<span class='line'> 37</span> </span><span class="NAME">exports.AccessController</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">AccessController</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 38</span> 
<span class='line'> 39</span> 
<span class='line'> 40</span> 
<span class='line'> 41</span> </span><span class="COMM">/**
<span class='line'> 42</span>  * Check if read access to file system node is allowed
<span class='line'> 43</span>  *
<span class='line'> 44</span>  * @param {APDU} apdu the APDU used to access the object
<span class='line'> 45</span>  * @param {FSNode} node the file system object
<span class='line'> 46</span>  * @type boolean
<span class='line'> 47</span>  * @return true if access is allowed
<span class='line'> 48</span>  */</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="NAME">AccessController.prototype.checkFileReadAccess</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ci</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 52</span> 
<span class='line'> 53</span> 
<span class='line'> 54</span> 
<span class='line'> 55</span> </span><span class="COMM">/**
<span class='line'> 56</span>  * Check if write access to file system node is allowed
<span class='line'> 57</span>  *
<span class='line'> 58</span>  * @param {APDU} apdu the APDU used to access the object
<span class='line'> 59</span>  * @param {FSNode} node the file system object
<span class='line'> 60</span>  * @type boolean
<span class='line'> 61</span>  * @return true if access is allowed
<span class='line'> 62</span>  */</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="NAME">AccessController.prototype.checkFileWriteAccess</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ci</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 66</span> 
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="COMM">/**
<span class='line'> 70</span>  * Check if command is allowed
<span class='line'> 71</span>  *
<span class='line'> 72</span>  * @param {APDU} apdu the APDU to check
<span class='line'> 73</span>  * @type boolean
<span class='line'> 74</span>  * @return true if access is allowed
<span class='line'> 75</span>  */</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="NAME">AccessController.prototype.checkCommandAccess</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ci</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 79</span> 
<span class='line'> 80</span> 
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="NAME">AccessController.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 85</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview AuthenticationObject - Password, PIN or key container for external authentication
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="WHIT">  </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/FileSystemIdObject'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">FileSystemIdObject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT">                </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> </span><span class="COMM">/**
<span class='line'> 33</span>  * Create an authentication object
<span class='line'> 34</span>  *
<span class='line'> 35</span>  * @class Class implementing authentication objects like PINs, PACE passwords or keys
<span class='line'> 36</span>  *
<span class='line'> 37</span>  * @param {String} name the human readable name of the object
<span class='line'> 38</span>  * @param {String} type one of AuthenticationObject.TYPE_PACE or AuthenticationObject.TYPE_PIN
<span class='line'> 39</span>  * @param {Number} id the password or key id
<span class='line'> 40</span>  * @param {ByteString} value the reference value
<span class='line'> 41</span>  */</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">AuthenticationObject</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">FileSystemIdObject.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="NAME">this.value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.retrycounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">this.initialretrycounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="NAME">this.usecounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">	</span><span class="NAME">this.resetcounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="NAME">this.minLength</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="NAME">this.isActive</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">				</span><span class="COMM">// State after using ACTIVATE / DEACTIVATE</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">	</span><span class="NAME">this.isEnabled</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">				</span><span class="COMM">// State after using ENABLE / DISABLE VERIFICATION REQUIREMENT</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">	</span><span class="NAME">this.isTransport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">			</span><span class="COMM">// State before first change PIN</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">	</span><span class="NAME">this.isTerminated</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">			</span><span class="COMM">// State after TERMINATE</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">	</span><span class="NAME">this.allowActivate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">	</span><span class="NAME">this.allowDeactivate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">	</span><span class="NAME">this.allowEnable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">	</span><span class="NAME">this.allowDisable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">	</span><span class="NAME">this.allowResetRetryCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="NAME">this.allowResetValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">	</span><span class="NAME">this.allowTerminate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="NAME">this.unsuspendAuthenticationObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="NAME">this.unblockAuthenticationObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 65</span> 
<span class='line'> 66</span> </span><span class="NAME">AuthenticationObject.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="NAME">AuthenticationObject.prototype.constructor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">AuthenticationObject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="NAME">exports.AuthenticationObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">AuthenticationObject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 70</span> 
<span class='line'> 71</span> 
<span class='line'> 72</span> </span><span class="NAME">AuthenticationObject.TYPE_PACE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"pace"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="NAME">AuthenticationObject.TYPE_PIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"pin"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 74</span> 
<span class='line'> 75</span> 
<span class='line'> 76</span> 
<span class='line'> 77</span> </span><span class="COMM">/**
<span class='line'> 78</span>  * Override from base class
<span class='line'> 79</span>  */</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="NAME">AuthenticationObject.prototype.getType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 83</span> 
<span class='line'> 84</span> 
<span class='line'> 85</span> 
<span class='line'> 86</span> </span><span class="NAME">AuthenticationObject.prototype.isBlocked</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.initialretrycounter</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.retrycounter</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 89</span> 
<span class='line'> 90</span> 
<span class='line'> 91</span> 
<span class='line'> 92</span> </span><span class="NAME">AuthenticationObject.prototype.isSuspended</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.initialretrycounter</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.retrycounter</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 95</span> 
<span class='line'> 96</span> 
<span class='line'> 97</span> 
<span class='line'> 98</span> </span><span class="COMM">/**
<span class='line'> 99</span>  * Activate authentication object
<span class='line'>100</span>  */</span><span class="WHIT">
<span class='line'>101</span> </span><span class="NAME">AuthenticationObject.prototype.activate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.allowActivate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Activate not allowed for authentication object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="NAME">this.isActive</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>107</span> 
<span class='line'>108</span> 
<span class='line'>109</span> 
<span class='line'>110</span> </span><span class="COMM">/**
<span class='line'>111</span>  * Deactivate authentication object
<span class='line'>112</span>  */</span><span class="WHIT">
<span class='line'>113</span> </span><span class="NAME">AuthenticationObject.prototype.deactivate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.allowDeactivate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Deactivate not allowed for authentication object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>116</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="NAME">this.isActive</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>119</span> 
<span class='line'>120</span> 
<span class='line'>121</span> 
<span class='line'>122</span> </span><span class="COMM">/**
<span class='line'>123</span>  * Reset retry counter and optionally set new reference value
<span class='line'>124</span>  *
<span class='line'>125</span>  * @param {ByteString} newValue new reference value
<span class='line'>126</span>  */</span><span class="WHIT">
<span class='line'>127</span> </span><span class="NAME">AuthenticationObject.prototype.resetRetryCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">newValue</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.allowResetRetryCounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Reset retry counter not allowed for authentication object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">newValue</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.allowResetValue</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Reset retry counter not allowed with new value for authentication object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.resetcounter</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.resetcounter</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Reset retry counter is 0"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">		</span><span class="NAME">this.resetcounter</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">newValue</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">newValue.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.minLength</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"New reference data too short"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">	</span><span class="NAME">this.retrycounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.initialretrycounter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">	</span><span class="NAME">this.isActive</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> 
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.initialretrycounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">		</span><span class="NAME">this.retrycounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.initialretrycounter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">newValue</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">		</span><span class="NAME">this.isTransport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">		</span><span class="NAME">this.value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newValue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>153</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>154</span> 
<span class='line'>155</span> 
<span class='line'>156</span> 
<span class='line'>157</span> </span><span class="COMM">/**
<span class='line'>158</span>  * Change reference data, optionally verifying the old value before
<span class='line'>159</span>  *
<span class='line'>160</span>  * @param {Number} qualifier command qualifier, 00 = oldPIN||newPIN, 01 = newPIN
<span class='line'>161</span>  * @param {ByteString} value new reference value
<span class='line'>162</span>  */</span><span class="WHIT">
<span class='line'>163</span> </span><span class="NAME">AuthenticationObject.prototype.changeReferenceData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">qualifier</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.allowChangeReferenceData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Change reference data not allowed for authentication object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">qualifier</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.isTerminated</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Change reference data with P1=01 not allowed non terminated authentication object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.associatedKey</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.associatedKey.isTerminated</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_REFDATANOTUSABLE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Associated key is not terminated"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">qualifier</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">this.value.length</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Command data does not contain a new PIN value for P1=00"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">qualifier</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">		</span><span class="NAME">this.verify</span><span class="PUNC">(</span><span class="NAME">value.left</span><span class="PUNC">(</span><span class="NAME">this.value.length</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NAME">this.value.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>182</span> 
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.minLength</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"New reference data too short"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>186</span> 
<span class='line'>187</span> </span><span class="WHIT">	</span><span class="NAME">this.value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="NAME">this.isTerminated</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>190</span> 
<span class='line'>191</span> 
<span class='line'>192</span> 
<span class='line'>193</span> </span><span class="COMM">/**
<span class='line'>194</span>  * Verify PIN value
<span class='line'>195</span>  *
<span class='line'>196</span>  * @param {ByteString} value reference value
<span class='line'>197</span>  */</span><span class="WHIT">
<span class='line'>198</span> </span><span class="NAME">AuthenticationObject.prototype.verify</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isBlocked</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_AUTHMETHLOCKED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Authentication method blocked"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isTerminated</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_REFDATANOTUSABLE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Authentication method terminated"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="NAME">this.decreaseRetryCounter</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.value.equals</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WARNINGCOUNT</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NAME">this.retrycounter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Authentication failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="NAME">this.restoreRetryCounter</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>212</span> 
<span class='line'>213</span> 
<span class='line'>214</span> 
<span class='line'>215</span> </span><span class="COMM">/**
<span class='line'>216</span>  * Deactivate authentication object
<span class='line'>217</span>  */</span><span class="WHIT">
<span class='line'>218</span> </span><span class="NAME">AuthenticationObject.prototype.decreaseRetryCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.initialretrycounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">		</span><span class="NAME">this.retrycounter</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>222</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>223</span> 
<span class='line'>224</span> 
<span class='line'>225</span> 
<span class='line'>226</span> </span><span class="COMM">/**
<span class='line'>227</span>  * Deactivate authentication object
<span class='line'>228</span>  */</span><span class="WHIT">
<span class='line'>229</span> </span><span class="NAME">AuthenticationObject.prototype.restoreRetryCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.initialretrycounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">		</span><span class="NAME">this.retrycounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.initialretrycounter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>233</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>234</span> 
<span class='line'>235</span> 
<span class='line'>236</span> 
<span class='line'>237</span> </span><span class="COMM">/**
<span class='line'>238</span>  * Terminate authentication object
<span class='line'>239</span>  */</span><span class="WHIT">
<span class='line'>240</span> </span><span class="NAME">AuthenticationObject.prototype.terminate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.allowTerminate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"AuthenticationObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Terminate not allowed for authentication object"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">	</span><span class="NAME">this.isTerminated</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>246</span> 
<span class='line'>247</span> 
<span class='line'>248</span> 
<span class='line'>249</span> </span><span class="COMM">/**
<span class='line'>250</span>  * Convert object to a human readable string
<span class='line'>251</span>  */</span><span class="WHIT">
<span class='line'>252</span> </span><span class="NAME">AuthenticationObject.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isBlocked</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">		</span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"blocked "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isTerminated</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">		</span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"terminated "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isActive</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">			</span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"active "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isActive</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">			</span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"enabled "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">			</span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"disabled "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isTransport</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">			</span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"transport "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.type</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">":"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">") is "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">state</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.initialretrycounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">" RC="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.retrycounter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>277</span> 
<span class='line'>278</span> 
<span class='line'>279</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of an ISO 7816-4 command interpreter
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">TransparentEF</span><span class="WHIT">   </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/TransparentEF'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">TransparentEF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">LinearEF</span><span class="WHIT">        </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/LinearEF'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">LinearEF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="WHIT">    </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/DataUnitAPDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">DataUnitAPDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> 
<span class='line'> 32</span> 
<span class='line'> 33</span> 
<span class='line'> 34</span> </span><span class="COMM">/**
<span class='line'> 35</span>  * Create a command interpreter
<span class='line'> 36</span>  *
<span class='line'> 37</span>  * @class Class implementing a command interpreter that handles ISO 7816-4 command APDUs
<span class='line'> 38</span>  * @constructor
<span class='line'> 39</span>  * @param {FileSelector} fileSelector the file selector object
<span class='line'> 40</span>  */</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">CommandInterpreter</span><span class="PUNC">(</span><span class="NAME">fileSelector</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.fileSelector</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fileSelector</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 44</span> 
<span class='line'> 45</span> </span><span class="NAME">exports.CommandInterpreter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CommandInterpreter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> 
<span class='line'> 47</span> 
<span class='line'> 48</span> 
<span class='line'> 49</span> </span><span class="COMM">/**
<span class='line'> 50</span>  * Set secure channel
<span class='line'> 51</span>  *
<span class='line'> 52</span>  * @param {SecureChannel} secureChannel the secure channel to used for unwrapping and wrapping APDUs
<span class='line'> 53</span>  */</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="NAME">CommandInterpreter.prototype.setSecureChannel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">secureChannel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">	</span><span class="NAME">this.secureChannel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">secureChannel</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 57</span> 
<span class='line'> 58</span> 
<span class='line'> 59</span> 
<span class='line'> 60</span> </span><span class="COMM">/**
<span class='line'> 61</span>  * Return status of secure channel
<span class='line'> 62</span>  *
<span class='line'> 63</span>  * @type boolean
<span class='line'> 64</span>  * @return true if secure channel is active
<span class='line'> 65</span>  */</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="NAME">CommandInterpreter.prototype.hasSecureChannel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.secureChannel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.secureChannel</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 69</span> 
<span class='line'> 70</span> 
<span class='line'> 71</span> 
<span class='line'> 72</span> </span><span class="COMM">/**
<span class='line'> 73</span>  * Process a READ BINARY APDU
<span class='line'> 74</span>  *
<span class='line'> 75</span>  * @param {APDU} apdu the command and response APDU
<span class='line'> 76</span>  */</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="NAME">CommandInterpreter.prototype.readBinary</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">apdu.hasLe</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Wrong length - missing Le field"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isChained</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CHAINNOTSUPPORTED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Chaining not supported in READ BINARY"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 85</span> 
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dua</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> 
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dua.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Command data not expected in  READ BINARY"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 91</span> 
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ef</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dua.getSFI</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dua.getFID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> 
<span class='line'> 96</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">		</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.selectSFI</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">		</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.selectFID</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">		</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getCurrentEF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> 
<span class='line'>103</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_COMNOTALLOWNOEF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No current EF in READ BINARY"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>107</span> 
<span class='line'>108</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">TransparentEF</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_COMINCOMPATIBLE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"EF is not a transparent file in READ BINARY"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>111</span> 
<span class='line'>112</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getMeta</span><span class="PUNC">(</span><span class="STRN">"accessController"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ac</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ac.checkFileReadAccess</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ef</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_SECSTATNOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Read access not allowed as determined by "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>116</span> 
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dua.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getNe</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> 
<span class='line'>120</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ef.readBinary</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> 
<span class='line'>122</span> </span><span class="WHIT">	</span><span class="NAME">apdu.setRData</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>124</span> 
<span class='line'>125</span> 
<span class='line'>126</span> 
<span class='line'>127</span> </span><span class="COMM">/**
<span class='line'>128</span>  * Process an UPDATE BINARY APDU
<span class='line'>129</span>  *
<span class='line'>130</span>  * @param {APDU} apdu the command and response APDU
<span class='line'>131</span>  */</span><span class="WHIT">
<span class='line'>132</span> </span><span class="NAME">CommandInterpreter.prototype.updateBinary</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isChained</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CHAINNOTSUPPORTED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Chaining not supported in READ BINARY"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>136</span> 
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">apdu.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No data found in UPDATE BINARY"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>140</span> 
<span class='line'>141</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dua</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> 
<span class='line'>143</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dua.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No data found in UPDATE BINARY"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>146</span> 
<span class='line'>147</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ef</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dua.getSFI</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dua.getFID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> 
<span class='line'>151</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">		</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.selectSFI</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">		</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.selectFID</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">		</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getCurrentEF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> 
<span class='line'>158</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_COMNOTALLOWNOEF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No current EF in UPDATE BINARY"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>162</span> 
<span class='line'>163</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">TransparentEF</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_COMINCOMPATIBLE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"EF is not a transparent file in UPDATE BINARY"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>166</span> 
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getMeta</span><span class="PUNC">(</span><span class="STRN">"accessController"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ac</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ac.checkFileWriteAccess</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ef</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_SECSTATNOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Write access not allowed as determined by "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>171</span> 
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dua.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dua.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>174</span> 
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="NAME">ef.updateBinary</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>177</span> 
<span class='line'>178</span> 
<span class='line'>179</span> 
<span class='line'>180</span> </span><span class="COMM">/**
<span class='line'>181</span>  * Process a READ RECORD APDU
<span class='line'>182</span>  *
<span class='line'>183</span>  * @param {APDU} apdu the command and response APDU
<span class='line'>184</span>  */</span><span class="WHIT">
<span class='line'>185</span> </span><span class="NAME">CommandInterpreter.prototype.readRecord</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">apdu.hasLe</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Wrong length - missing Le field"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>189</span> 
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isChained</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CHAINNOTSUPPORTED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Chaining not supported in READ RECORD"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>193</span> 
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">recno</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getP1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">qualifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x7</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> 
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">		</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.selectSFI</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">		</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getCurrentEF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> 
<span class='line'>203</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_COMNOTALLOWNOEF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No current EF in READ RECORD"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>207</span> 
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">ef</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">LinearEF</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_COMINCOMPATIBLE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"EF is not a linear file in READ RECORD"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>211</span> 
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getMeta</span><span class="PUNC">(</span><span class="STRN">"accessController"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ac</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ac.checkFileReadAccess</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ef</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_SECSTATNOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Read access not allowed as determined by "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>216</span> 
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ef.readRecord</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">recno</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">qualifier</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu.getNe</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> 
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="NAME">apdu.setRData</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>221</span> 
<span class='line'>222</span> 
<span class='line'>223</span> 
<span class='line'>224</span> </span><span class="COMM">/**
<span class='line'>225</span>  * Performs a VERIFY command
<span class='line'>226</span>  *
<span class='line'>227</span>  * @param {APDU} the apdu
<span class='line'>228</span>  */</span><span class="WHIT">
<span class='line'>229</span> </span><span class="NAME">CommandInterpreter.prototype.verify</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isChained</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CHAINNOTSUPPORTED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Chaining not supported in command"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>233</span> 
<span class='line'>234</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pinao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getObject</span><span class="PUNC">(</span><span class="NAME">AuthenticationObject.TYPE_PIN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">pinao</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_RDNOTFOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"PIN with reference "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>238</span> 
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">		</span><span class="NAME">pinao.verify</span><span class="PUNC">(</span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.fileSelector.isAuthenticated</span><span class="PUNC">(</span><span class="NAME">ao</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">			</span><span class="NAME">pinao.determineStatus</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>246</span> 
<span class='line'>247</span> </span><span class="WHIT">	</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_OK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>249</span> 
<span class='line'>250</span> 
<span class='line'>251</span> 
<span class='line'>252</span> </span><span class="COMM">/**
<span class='line'>253</span>  * Performs a CHANGE REFERENCE DATA command
<span class='line'>254</span>  *
<span class='line'>255</span>  * @param {APDU} the apdu
<span class='line'>256</span>  */</span><span class="WHIT">
<span class='line'>257</span> </span><span class="NAME">CommandInterpreter.prototype.changeReferenceData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isChained</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CHAINNOTSUPPORTED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Chaining not supported in command"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">apdu.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Command must have C-data"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>264</span> 
<span class='line'>265</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pinao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getObject</span><span class="PUNC">(</span><span class="NAME">AuthenticationObject.TYPE_PIN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">pinao</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_RDNOTFOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"PIN with reference "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>269</span> 
<span class='line'>270</span> </span><span class="WHIT">	</span><span class="NAME">pinao.changeReferenceData</span><span class="PUNC">(</span><span class="NAME">apdu.getP1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> 
<span class='line'>272</span> </span><span class="WHIT">	</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_OK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>273</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>274</span> 
<span class='line'>275</span> 
<span class='line'>276</span> 
<span class='line'>277</span> </span><span class="COMM">/**
<span class='line'>278</span>  * Performs a RESET RETRY COUNTER command
<span class='line'>279</span>  *
<span class='line'>280</span>  * @param {APDU} the apdu
<span class='line'>281</span>  */</span><span class="WHIT">
<span class='line'>282</span> </span><span class="NAME">CommandInterpreter.prototype.resetRetryCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isChained</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CHAINNOTSUPPORTED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Chaining not supported in command"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getP1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> 
<span class='line'>288</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">apdu.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Command must have C-data"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x03</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Command must not have C-data"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCP1P2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid P1 or P2"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>299</span> 
<span class='line'>300</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pinao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getObject</span><span class="PUNC">(</span><span class="NAME">AuthenticationObject.TYPE_PIN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">pinao</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_RDNOTFOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"PIN with reference "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>304</span> 
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="NAME">pinao.resetRetryCounter</span><span class="PUNC">(</span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> 
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_OK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>308</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>309</span> 
<span class='line'>310</span> 
<span class='line'>311</span> 
<span class='line'>312</span> </span><span class="COMM">/**
<span class='line'>313</span>  * Process a MANAGE SECURITY ENVIRONMENT APDU
<span class='line'>314</span>  *
<span class='line'>315</span>  * @param {APDU} apdu the command and response APDU
<span class='line'>316</span>  */</span><span class="WHIT">
<span class='line'>317</span> </span><span class="NAME">CommandInterpreter.prototype.manageSecurityEnvironment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getP1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>320</span> 
<span class='line'>321</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">se</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getSecurityEnvironment</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>322</span> 
<span class='line'>323</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x0F</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> 	</span><span class="COMM">// SET</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.APDU.SW_FUNCNOTSUPPORTED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Only MANAGE SE set variant supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>325</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>326</span> 
<span class='line'>327</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">p2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>328</span> 
<span class='line'>329</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">					</span><span class="COMM">// Verification, Encryption, External Authentication and Key Agreement</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">tlv.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Dirty trick to deserialize as TLV tree</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">		</span><span class="NAME">se.VEXK.add</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">					</span><span class="COMM">// Calculation, Decryption, Internal Authentication and Key Agreement</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">tlv.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Dirty trick to deserialize as TLV tree</span><span class="WHIT">
<span class='line'>335</span> </span><span class="WHIT">		</span><span class="NAME">se.CDIK.add</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">					</span><span class="COMM">// Secure Messaging Response</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">tlv.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Dirty trick to deserialize as TLV tree</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">		</span><span class="NAME">se.SMRES.add</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x10</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">					</span><span class="COMM">// Secure Messaging Command</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">tlv.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Dirty trick to deserialize as TLV tree</span><span class="WHIT">
<span class='line'>343</span> </span><span class="WHIT">		</span><span class="NAME">se.SMCOM.add</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>344</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">	</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_OK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>347</span> 
<span class='line'>348</span> 
<span class='line'>349</span> 
<span class='line'>350</span> </span><span class="COMM">/**
<span class='line'>351</span>  * Process a secure messaging command APDU, if secure messaging is active.
<span class='line'>352</span>  *
<span class='line'>353</span>  * @param {APDU} apdu the command APDU
<span class='line'>354</span>  */</span><span class="WHIT">
<span class='line'>355</span> </span><span class="NAME">CommandInterpreter.prototype.handleSecMsgCommandAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isSecureMessaging</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasSecureChannel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">			</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT">				</span><span class="NAME">apdu.setSecureChannel</span><span class="PUNC">(</span><span class="NAME">this.secureChannel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT">				</span><span class="NAME">apdu.unwrap</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">			</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">				</span><span class="NAME">this.setSecureChannel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// Reset secure channel</span><span class="WHIT">
<span class='line'>364</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_SMNOTSUPPORTED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No secure messaging channel"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasSecureChannel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT">			</span><span class="NAME">this.setSecureChannel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// Reset secure channel</span><span class="WHIT">
<span class='line'>372</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>374</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>375</span> 
<span class='line'>376</span> 
<span class='line'>377</span> 
<span class='line'>378</span> </span><span class="COMM">/**
<span class='line'>379</span>  * Process a secure messaging response APDU, if secure messaging is active
<span class='line'>380</span>  *
<span class='line'>381</span>  * @param {APDU} apdu the response APDU
<span class='line'>382</span>  */</span><span class="WHIT">
<span class='line'>383</span> </span><span class="NAME">CommandInterpreter.prototype.handleSecMsgResponseAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isSecureMessaging</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.hasSecureChannel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">		</span><span class="NAME">apdu.wrap</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>386</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>387</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>388</span> 
<span class='line'>389</span> 
<span class='line'>390</span> 
<span class='line'>391</span> </span><span class="COMM">/**
<span class='line'>392</span>  * Dispatch to command handler based on instruction code
<span class='line'>393</span>  *
<span class='line'>394</span>  * @param {APDU} apdu the command and response APDU
<span class='line'>395</span>  * @param {Number} ins instruction code
<span class='line'>396</span>  */</span><span class="WHIT">
<span class='line'>397</span> </span><span class="NAME">CommandInterpreter.prototype.dispatch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ins</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">apdu.isISO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT">		</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_INVCLA</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>402</span> 
<span class='line'>403</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isChained</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>404</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CHAINNOTSUPPORTED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Chaining not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>406</span> 
<span class='line'>407</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">ins</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>408</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">APDU.INS_SELECT</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>409</span> </span><span class="WHIT">			</span><span class="NAME">this.fileSelector.processSelectAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>411</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">APDU.INS_READ_BINARY</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>412</span> </span><span class="WHIT">			</span><span class="NAME">this.readBinary</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">APDU.INS_UPDATE_BINARY</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">			</span><span class="NAME">this.updateBinary</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">APDU.INS_READ_RECORD</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">			</span><span class="NAME">this.readRecord</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">APDU.INS_VERIFY</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>421</span> </span><span class="WHIT">			</span><span class="NAME">this.verify</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>422</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">APDU.INS_RESET_RETRY_COUNTER</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">			</span><span class="NAME">this.resetRetryCounter</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>426</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">APDU.INS_CHANGE_REFERENCE_DATA</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>427</span> </span><span class="WHIT">			</span><span class="NAME">this.changeReferenceData</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>428</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>429</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">APDU.INS_MANAGE_SE</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>430</span> </span><span class="WHIT">			</span><span class="NAME">this.manageSecurityEnvironment</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>431</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT">			</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_INVINS</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>434</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>435</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>436</span> 
<span class='line'>437</span> 
<span class='line'>438</span> 
<span class='line'>439</span> </span><span class="COMM">/**
<span class='line'>440</span>  * Process a command APDU
<span class='line'>441</span>  *
<span class='line'>442</span>  * @param {APDU} apdu the command and response APDU
<span class='line'>443</span>  */</span><span class="WHIT">
<span class='line'>444</span> </span><span class="NAME">CommandInterpreter.prototype.processAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>445</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>446</span> </span><span class="WHIT">		</span><span class="NAME">this.handleSecMsgCommandAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>447</span> 
<span class='line'>448</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getCLA</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ins</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getINS</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ins</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>451</span> </span><span class="WHIT">		</span><span class="NAME">ins</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xFE</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>452</span> 
<span class='line'>453</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fileSelector.getMeta</span><span class="PUNC">(</span><span class="STRN">"accessController"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>454</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ac</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ac.checkCommandAccess</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CommandInterpreter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_SECSTATNOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Command not allowed as determined by "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>457</span> 
<span class='line'>458</span> </span><span class="WHIT">		</span><span class="NAME">this.dispatch</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ins</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>459</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>460</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>461</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">e.fileName</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"#"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e.lineNumber</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">": "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>462</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>463</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e.reason</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x6200</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>464</span> </span><span class="WHIT">			</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">e.reason</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>466</span> </span><span class="WHIT">			</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>467</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>468</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>469</span> </span><span class="WHIT">	</span><span class="NAME">this.handleSecMsgResponseAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>470</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>471</span> 
<span class='line'>472</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of a ISO 7816-4 file system simulation
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT">                </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">FSNode</span><span class="WHIT">              </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/FSNode'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">FSNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="WHIT">  </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/FileSystemIdObject'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">FileSystemIdObject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> 
<span class='line'> 33</span> </span><span class="COMM">/**
<span class='line'> 34</span>  * Creates a Dedicated File (DF)
<span class='line'> 35</span>  *
<span class='line'> 36</span>  * &lt;p>The constructor supports as argument a list of child elements&lt;/p>
<span class='line'> 37</span>  *
<span class='line'> 38</span>  * @class Class implementing dedicated files
<span class='line'> 39</span>  * @constructor
<span class='line'> 40</span>  * @param {FCP} the file control parameter
<span class='line'> 41</span>  */</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">DF</span><span class="PUNC">(</span><span class="NAME">fcp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">this.childs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="NAME">this.fidmap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="NAME">this.sfimap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.aidmap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">this.meta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> 
<span class='line'> 49</span> </span><span class="WHIT">	</span><span class="NAME">FSNode.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> 
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">arguments.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">			</span><span class="NAME">this.add</span><span class="PUNC">(</span><span class="NAME">arg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 58</span> 
<span class='line'> 59</span> </span><span class="NAME">DF.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">FSNode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="NAME">DF.prototype.constructor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> 
<span class='line'> 62</span> </span><span class="NAME">exports.DF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> 
<span class='line'> 64</span> 
<span class='line'> 65</span> </span><span class="COMM">/**
<span class='line'> 66</span>  * Adds a new child node to the DF
<span class='line'> 67</span>  *
<span class='line'> 68</span>  * @param {FSNode} node the node to add
<span class='line'> 69</span>  */</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="NAME">DF.prototype.add</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">	</span><span class="NAME">this.childs.push</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">	</span><span class="NAME">node.setParent</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> 
<span class='line'> 74</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.getFCP</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> 
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.getFID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.fidmap</span><span class="PUNC">[</span><span class="NAME">fid</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"DF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_FILEEXISTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate file identifier "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">		</span><span class="NAME">this.fidmap</span><span class="PUNC">[</span><span class="NAME">fid</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 83</span> 
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">node.isDF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.getAID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">aid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.aidmap</span><span class="PUNC">[</span><span class="NAME">aid</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"DF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_FILEEXISTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate application identifier "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">			</span><span class="NAME">this.aidmap</span><span class="PUNC">[</span><span class="NAME">aid</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.getSFI</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="COMM">//		print("Found SFI " + sfi);</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sfimap</span><span class="PUNC">[</span><span class="NAME">sfi</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"DF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_FILEEXISTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate short file identifier "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">			</span><span class="NAME">this.sfimap</span><span class="PUNC">[</span><span class="NAME">sfi</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>102</span> 
<span class='line'>103</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>104</span> 
<span class='line'>105</span> 
<span class='line'>106</span> 
<span class='line'>107</span> </span><span class="COMM">/**
<span class='line'>108</span>  * Add meta information to DF
<span class='line'>109</span>  *
<span class='line'>110</span>  * @param {String} name name of meta information
<span class='line'>111</span>  * @param {Object} value value of meta information
<span class='line'>112</span>  */</span><span class="WHIT">
<span class='line'>113</span> </span><span class="NAME">DF.prototype.addMeta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">	</span><span class="NAME">this.meta</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>116</span> 
<span class='line'>117</span> 
<span class='line'>118</span> 
<span class='line'>119</span> </span><span class="COMM">/**
<span class='line'>120</span>  * Add object to DF
<span class='line'>121</span>  *
<span class='line'>122</span>  * @param {Object} o object to be added. Must have property type and id.
<span class='line'>123</span>  */</span><span class="WHIT">
<span class='line'>124</span> </span><span class="NAME">DF.prototype.addObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be instance of FileSystemIdObject"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.meta</span><span class="PUNC">[</span><span class="NAME">o.getType</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">		</span><span class="NAME">this.meta</span><span class="PUNC">[</span><span class="NAME">o.getType</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="NAME">this.meta</span><span class="PUNC">[</span><span class="NAME">o.getType</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">o.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>131</span> 
<span class='line'>132</span> 
<span class='line'>133</span> 
<span class='line'>134</span> </span><span class="COMM">/**
<span class='line'>135</span>  * Select a file contained in the DF using the file identifier
<span class='line'>136</span>  *
<span class='line'>137</span>  * @param {ByteString} the file identifier
<span class='line'>138</span>  * @type FSNode
<span class='line'>139</span>  * @return the found node or undefined
<span class='line'>140</span>  */</span><span class="WHIT">
<span class='line'>141</span> </span><span class="NAME">DF.prototype.selectByFID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.fidmap</span><span class="PUNC">[</span><span class="NAME">fid</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>144</span> 
<span class='line'>145</span> 
<span class='line'>146</span> 
<span class='line'>147</span> </span><span class="COMM">/**
<span class='line'>148</span>  * Select a file contained in the DF using the short file identifier
<span class='line'>149</span>  *
<span class='line'>150</span>  * @param {Number} the short file identifier
<span class='line'>151</span>  * @type FSNode
<span class='line'>152</span>  * @return the found node or undefined
<span class='line'>153</span>  */</span><span class="WHIT">
<span class='line'>154</span> </span><span class="NAME">DF.prototype.selectBySFI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sfimap</span><span class="PUNC">[</span><span class="NAME">sfi</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>157</span> 
<span class='line'>158</span> 
<span class='line'>159</span> 
<span class='line'>160</span> </span><span class="COMM">/**
<span class='line'>161</span>  * Select a DF contained in the DF using the application identifier
<span class='line'>162</span>  *
<span class='line'>163</span>  * @param {ByteString} the application identifier
<span class='line'>164</span>  * @type FSNode
<span class='line'>165</span>  * @return the found node or undefined
<span class='line'>166</span>  */</span><span class="WHIT">
<span class='line'>167</span> </span><span class="NAME">DF.prototype.selectByAID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">aid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.aidmap</span><span class="PUNC">[</span><span class="NAME">aid</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>170</span> 
<span class='line'>171</span> 
<span class='line'>172</span> 
<span class='line'>173</span> </span><span class="COMM">/**
<span class='line'>174</span>  * Returns true as this is a DF
<span class='line'>175</span>  *
<span class='line'>176</span>  * @type boolean
<span class='line'>177</span>  * @return true this is a DF
<span class='line'>178</span>  */</span><span class="WHIT">
<span class='line'>179</span> </span><span class="NAME">DF.prototype.isDF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>182</span> 
<span class='line'>183</span> 
<span class='line'>184</span> 
<span class='line'>185</span> </span><span class="COMM">/**
<span class='line'>186</span>  * Dump the file system system recursively starting this this node
<span class='line'>187</span>  *
<span class='line'>188</span>  * @param {String} indent the string to prefix the output with
<span class='line'>189</span>  * @type String
<span class='line'>190</span>  * @return the dump
<span class='line'>191</span>  */</span><span class="WHIT">
<span class='line'>192</span> </span><span class="NAME">DF.prototype.dump</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">indent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">indent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">		</span><span class="NAME">indent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">indent</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> 
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">this</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">DF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.meta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">indent</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"  Meta:"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.meta</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">				</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="NAME">each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.meta</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">						</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">indent</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"    "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>210</span> 
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.childs.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.childs</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> 
<span class='line'>214</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">DF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c.dump</span><span class="PUNC">(</span><span class="STRN">"  "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">indent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"  "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">indent</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">c.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>222</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview AuthenticationObject - Password, PIN or key container for external authentication
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT">                </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> 
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> </span><span class="COMM">/**
<span class='line'> 32</span>  * Create an adapter to decode a APDU for data unit handling
<span class='line'> 33</span>  *
<span class='line'> 34</span>  * @class Adapter class to decode APDUs for data unit handling
<span class='line'> 35</span>  * @constructor
<span class='line'> 36</span>  * @param {APDU} apdu the APDU to decode
<span class='line'> 37</span>  */</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="WHIT">	</span><span class="NAME">this.apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 40</span> 
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getP1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> 
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.apdu.getINS</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// Even instruction</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">				</span><span class="COMM">// SFI in P1</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">			</span><span class="NAME">this.offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">			</span><span class="NAME">this.sfi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x1F</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">			</span><span class="NAME">this.offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">		</span><span class="NAME">this.data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">									</span><span class="COMM">// Odd instruction</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">;</span><span class="WHIT">				</span><span class="COMM">// FID in P1 P2</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">		</span><span class="COMM">// If bits b16 - b6 are all 0 and b5 - b1 are not all equal, then we have an SFI</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFFE0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x1F</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x1F</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">30</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">			</span><span class="NAME">this.sfi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x1F</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">					</span><span class="COMM">// FID = 0000 means current file</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">p1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">p2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">			</span><span class="NAME">this.fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> 
<span class='line'> 64</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.apdu.getCDataAsTLVList</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> 
<span class='line'> 66</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">a.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"DataUnitAPDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid data for odd instruction data handling command, less than one or more than two elements in TLV"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 69</span> 
<span class='line'> 70</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.index</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.getTag</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x54</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"DataUnitAPDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid data for odd instruction data handling command, first tag must be '54' offset"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 74</span> 
<span class='line'> 75</span> </span><span class="WHIT">		</span><span class="NAME">this.offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.getValue</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> 
<span class='line'> 77</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.index</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.getTag</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x53</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x73</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"DataUnitAPDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid data for odd instruction data handling command, second tag must be '53' or '73'"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 83</span> 
<span class='line'> 84</span> </span><span class="WHIT">			</span><span class="NAME">this.data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.getValue</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 88</span> 
<span class='line'> 89</span> </span><span class="NAME">exports.DataUnitAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> 
<span class='line'> 91</span> 
<span class='line'> 92</span> 
<span class='line'> 93</span> </span><span class="COMM">/**
<span class='line'> 94</span>  * Gets the short file identifier, if one defined
<span class='line'> 95</span>  *
<span class='line'> 96</span>  * @type Number
<span class='line'> 97</span>  * @return the short file identifier in the range 1 to 30 or -1 if not defined
<span class='line'> 98</span>  */</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="NAME">DataUnitAPDU.prototype.getSFI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sfi</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>105</span> 
<span class='line'>106</span> 
<span class='line'>107</span> 
<span class='line'>108</span> </span><span class="COMM">/**
<span class='line'>109</span>  * Gets the file identifier, if one defined
<span class='line'>110</span>  *
<span class='line'>111</span>  * @type ByteString
<span class='line'>112</span>  * @return the file identifier or null if not defined
<span class='line'>113</span>  */</span><span class="WHIT">
<span class='line'>114</span> </span><span class="NAME">DataUnitAPDU.prototype.getFID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.fid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>116</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.fid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>120</span> 
<span class='line'>121</span> 
<span class='line'>122</span> 
<span class='line'>123</span> </span><span class="COMM">/**
<span class='line'>124</span>  * Gets the offset
<span class='line'>125</span>  *
<span class='line'>126</span>  * @type Number
<span class='line'>127</span>  * @return the offset to read from or write to
<span class='line'>128</span>  */</span><span class="WHIT">
<span class='line'>129</span> </span><span class="NAME">DataUnitAPDU.prototype.getOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.offset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>132</span> 
<span class='line'>133</span> 
<span class='line'>134</span> 
<span class='line'>135</span> </span><span class="COMM">/**
<span class='line'>136</span>  * Get the command data
<span class='line'>137</span>  *
<span class='line'>138</span>  * @type ByteString
<span class='line'>139</span>  * @return the command data
<span class='line'>140</span>  */</span><span class="WHIT">
<span class='line'>141</span> </span><span class="NAME">DataUnitAPDU.prototype.getCData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"APDU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No data in command APDU"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>147</span> 
<span class='line'>148</span> 
<span class='line'>149</span> 
<span class='line'>150</span> </span><span class="COMM">/**
<span class='line'>151</span>  * Returns true if command data in contained in the APDU
<span class='line'>152</span>  *
<span class='line'>153</span>  * @type boolean
<span class='line'>154</span>  * @returns true if command data contained
<span class='line'>155</span>  */</span><span class="WHIT">
<span class='line'>156</span> </span><span class="NAME">DataUnitAPDU.prototype.hasCData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.data</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>159</span> 
<span class='line'>160</span> 
<span class='line'>161</span> 
<span class='line'>162</span> </span><span class="COMM">/**
<span class='line'>163</span>  * Simple Unit Test
<span class='line'>164</span>  */</span><span class="WHIT">
<span class='line'>165</span> </span><span class="NAME">DataUnitAPDU.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> 
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x7FFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> 
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> 
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"540100"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> 
<span class='line'>191</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"5401FF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"540401000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x01000000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> 
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"1234"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> 
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> 
<span class='line'>209</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x7FFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> 
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> 
<span class='line'>221</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> 
<span class='line'>227</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD7</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"5401005304"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> 
<span class='line'>233</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD7</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"5401FF5304"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> 
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD7</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"5404010000005304"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dh</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DataUnitAPDU</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getOffset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x01000000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dh.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>244</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>245</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  --------- 
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of a ISO 7816-4 file system simulation
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Create a File Control Parameter containing information about a file system node
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * @class Class storing File Control Parameter for a file system node
<span class='line'> 33</span>  * @constructor
<span class='line'> 34</span>  */</span><span class="WHIT">
<span class='line'> 35</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">FCP</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 37</span> 
<span class='line'> 38</span> </span><span class="NAME">exports.FCP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">FCP</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 39</span> 
<span class='line'> 40</span> 
<span class='line'> 41</span> </span><span class="COMM">/** File type for DF */</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="NAME">FCP.DEDICATEDFILE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x38</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> 
<span class='line'> 44</span> </span><span class="COMM">/** File type for transparent EF */</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="NAME">FCP.TRANSPARENT</span><span class="WHIT">   </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> 
<span class='line'> 47</span> </span><span class="COMM">/** File type for record oriented EF with fixed record size */</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="NAME">FCP.LINEARFIXED</span><span class="WHIT">   </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="COMM">/** File type for record oriented EF with variable record size */</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="NAME">FCP.LINEARVARIABLE</span><span class="WHIT">   </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> 
<span class='line'> 53</span> 
<span class='line'> 54</span> </span><span class="COMM">/**
<span class='line'> 55</span>  * Convert an integer value into an two byte ByteString
<span class='line'> 56</span>  *
<span class='line'> 57</span>  * @param {Number} val the value
<span class='line'> 58</span>  * @type ByteString
<span class='line'> 59</span>  * @return the 2 byte encoded value MSB||LSB
<span class='line'> 60</span>  */</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="NAME">FCP.short2bytestring</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">val</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">val</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">val</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="PUNC">(</span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> 
<span class='line'> 70</span> </span><span class="COMM">/**
<span class='line'> 71</span>  * Construct a new FCP object from parameters.
<span class='line'> 72</span>  *
<span class='line'> 73</span>  * &lt;p>This function should never be called directly. Use newTransparentDF(), newDF() or newLinearEF() instead.&lt;/p>
<span class='line'> 74</span>  *
<span class='line'> 75</span>  * @param {String|ByteString} fid the file identifier (2 Bytes)
<span class='line'> 76</span>  * @param {Number} sfi the short file identifier or -1 or 0 if not defined
<span class='line'> 77</span>  * @param {Number} type the file type, one of FCP.DEDICATEDFILE, FCP.TRANSPARENT or FCP.LINEAR*
<span class='line'> 78</span>  * @param {Boolean} shareable true, if file may be shared between logical channels
<span class='line'> 79</span>  * @param {Boolean} internal true, if file is internal only and not externally selectable
<span class='line'> 80</span>  * @param {ByteString} supl supplemental information
<span class='line'> 81</span>  * @type FCP
<span class='line'> 82</span>  * @return the newly constructed FCP object
<span class='line'> 83</span>  */</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="NAME">FCP.newFCP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">shareable</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">internal</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">supl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">FCP</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	
<span class='line'> 87</span> 	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fid.length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"File Identifier must be 2 bytes"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">			</span><span class="NAME">fcp.fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fid</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fid.length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"File Identifier must be 2 bytes"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">			</span><span class="NAME">fcp.fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be of type String or ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">	
<span class='line'>103</span> 	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be of type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">30</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">			</span><span class="NAME">fcp.sfi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"SFI must be in the range 1 to 30 or 0 if not defined"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>113</span> 
<span class='line'>114</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be of type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>116</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="NAME">fcp.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> 
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">shareable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"boolean"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be of type Boolean"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">	</span><span class="NAME">fcp.shareable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">shareable</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> 
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">internal</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"boolean"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be of type Boolean"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">	</span><span class="NAME">fcp.internal</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">internal</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> 
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="NAME">fcp.supl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">supl</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>132</span> 
<span class='line'>133</span> 
<span class='line'>134</span> 
<span class='line'>135</span> </span><span class="COMM">/**
<span class='line'>136</span>  * Construct a new FCP object for an EF of type transparent.
<span class='line'>137</span>  *
<span class='line'>138</span>  * @param {String|ByteString} fid the file identifier (2 Bytes)
<span class='line'>139</span>  * @param {Number} sfi the short file identifier or -1 or 0 if not defined
<span class='line'>140</span>  * @param {Number} size the file size
<span class='line'>141</span>  * @param {ByteString} supl supplemental information
<span class='line'>142</span>  * @type FCP
<span class='line'>143</span>  * @return the newly constructed FCP object
<span class='line'>144</span>  */</span><span class="WHIT">
<span class='line'>145</span> </span><span class="NAME">FCP.newTransparentEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">supl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">size</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument size must be of type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>149</span> 
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">FCP.newFCP</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">FCP.TRANSPARENT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">supl</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span> 
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="NAME">fcp.size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>155</span> 
<span class='line'>156</span> 
<span class='line'>157</span> 
<span class='line'>158</span> </span><span class="COMM">/**
<span class='line'>159</span>  * Construct a new FCP object for a DF.
<span class='line'>160</span>  *
<span class='line'>161</span>  * @param {String|ByteString} fid the file identifier (2 Bytes)
<span class='line'>162</span>  * @param {ByteString} aid the DF's application identifier (DFName)
<span class='line'>163</span>  * @param {ByteString} supl supplemental information
<span class='line'>164</span>  * @type FCP
<span class='line'>165</span>  * @return the newly constructed FCP object
<span class='line'>166</span>  */</span><span class="WHIT">
<span class='line'>167</span> </span><span class="NAME">FCP.newDF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">supl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">FCP.newFCP</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">FCP.DEDICATEDFILE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">supl</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> 
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">aid</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">aid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">aid</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="PUNC">(</span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument size must be of type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">		</span><span class="NAME">fcp.aid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>176</span> 
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>179</span> 
<span class='line'>180</span> 
<span class='line'>181</span> 
<span class='line'>182</span> </span><span class="COMM">/**
<span class='line'>183</span>  * Construct a new FCP object for an EF of type linear.
<span class='line'>184</span>  *
<span class='line'>185</span>  * @param {String|ByteString} fid the file identifier (2 Bytes)
<span class='line'>186</span>  * @param {Number} sfi the short file identifier or -1 or 0 if not defined
<span class='line'>187</span>  * @param {Number} type the file type, one of FCP.LINEARFIXED or FCP.LINEARVARIABLE
<span class='line'>188</span>  * @param {Number} recno the maximum number of records
<span class='line'>189</span>  * @param {Number} recsize the maximum or fixed record size
<span class='line'>190</span>  * @param {ByteString} supl supplemental information
<span class='line'>191</span>  * @type FCP
<span class='line'>192</span>  * @return the newly constructed FCP object
<span class='line'>193</span>  */</span><span class="WHIT">
<span class='line'>194</span> </span><span class="NAME">FCP.newLinearEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">recno</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">recsize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">supl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">recsize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument recsize must be of type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">recno</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FCP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument recno must be of type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>201</span> 
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">FCP.newFCP</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">supl</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>205</span> 
<span class='line'>206</span> 
<span class='line'>207</span> 
<span class='line'>208</span> </span><span class="COMM">/**
<span class='line'>209</span>  * Returns the File Identifier (FID)
<span class='line'>210</span>  *
<span class='line'>211</span>  * @type ByteString
<span class='line'>212</span>  * @return the FID
<span class='line'>213</span>  */</span><span class="WHIT">
<span class='line'>214</span> </span><span class="NAME">FCP.prototype.getFID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.fid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>217</span> 
<span class='line'>218</span> 
<span class='line'>219</span> 
<span class='line'>220</span> </span><span class="COMM">/**
<span class='line'>221</span>  * Returns the Application Identifier (AID)
<span class='line'>222</span>  *
<span class='line'>223</span>  * @type ByteString
<span class='line'>224</span>  * @return the AID
<span class='line'>225</span>  */</span><span class="WHIT">
<span class='line'>226</span> </span><span class="NAME">FCP.prototype.getAID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.aid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>228</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>229</span> 
<span class='line'>230</span> 
<span class='line'>231</span> 
<span class='line'>232</span> </span><span class="COMM">/**
<span class='line'>233</span>  * Returns the Short File Identifier (SFI)
<span class='line'>234</span>  *
<span class='line'>235</span>  * @type Number
<span class='line'>236</span>  * @return the SFI
<span class='line'>237</span>  */</span><span class="WHIT">
<span class='line'>238</span> </span><span class="NAME">FCP.prototype.getSFI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sfi</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>241</span> 
<span class='line'>242</span> 
<span class='line'>243</span> 
<span class='line'>244</span> </span><span class="COMM">/**
<span class='line'>245</span>  * Returns the encoded FCP
<span class='line'>246</span>  *
<span class='line'>247</span>  * @type ByteString
<span class='line'>248</span>  * @return the encoded FCP
<span class='line'>249</span>  */</span><span class="WHIT">
<span class='line'>250</span> </span><span class="NAME">FCP.prototype.getBytes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"fcp"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x62</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> 
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.size</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">		</span><span class="NAME">fcp.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"fileSizeTransparent"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">FCP.short2bytestring</span><span class="PUNC">(</span><span class="NAME">this.size</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>256</span> 
<span class='line'>257</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.type</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">	
<span class='line'>260</span> 	</span><span class="COMM">// ToDo: extra type bytes</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">	
<span class='line'>262</span> 	</span><span class="NAME">fcp.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"fileDescriptor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">	
<span class='line'>264</span> 	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.fid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">		</span><span class="NAME">fcp.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"fileIdentifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.fid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">	
<span class='line'>268</span> 	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.aid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">		</span><span class="NAME">fcp.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"dFName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.aid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	
<span class='line'>272</span> 	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.sfi</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="NAME">fcp.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"shortFileIdentifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x88</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">	
<span class='line'>278</span> 	</span><span class="KEYW">return</span><span class="PUNC">(</span><span class="NAME">fcp.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>280</span> 
<span class='line'>281</span> 
<span class='line'>282</span> 
<span class='line'>283</span> </span><span class="COMM">/**
<span class='line'>284</span>  * Returns the FCI
<span class='line'>285</span>  *
<span class='line'>286</span>  * @type ASN1
<span class='line'>287</span>  * @return the FCI
<span class='line'>288</span>  */</span><span class="WHIT">
<span class='line'>289</span> </span><span class="NAME">FCP.prototype.getFCI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fci</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"fci"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6F</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> 
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.aid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">		</span><span class="NAME">fci.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"dFName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.aid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>295</span> 
<span class='line'>296</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.supl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">		</span><span class="NAME">fci.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">this.supl</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>299</span> 
<span class='line'>300</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="PUNC">(</span><span class="NAME">fci</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>302</span> 
<span class='line'>303</span> 
<span class='line'>304</span> 
<span class='line'>305</span> </span><span class="COMM">/**
<span class='line'>306</span>  * Return a human readible string for this object
<span class='line'>307</span>  *
<span class='line'>308</span>  * @type String
<span class='line'>309</span>  * @return the string
<span class='line'>310</span>  */</span><span class="WHIT">
<span class='line'>311</span> </span><span class="NAME">FCP.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"FCP("</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">	
<span class='line'>314</span> 	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">	</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>320</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>321</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>322</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of a ISO 7816-4 file system simulation
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Construct a file system node
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * @class Abstract class for file system nodes
<span class='line'> 33</span>  * @constructor
<span class='line'> 34</span>  */</span><span class="WHIT">
<span class='line'> 35</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">FSNode</span><span class="PUNC">(</span><span class="NAME">fcp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="WHIT">	</span><span class="NAME">this.parent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="WHIT">	</span><span class="NAME">this.fcp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 39</span> 
<span class='line'> 40</span> </span><span class="NAME">exports.FSNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">FSNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> 
<span class='line'> 42</span> 
<span class='line'> 43</span> 
<span class='line'> 44</span> </span><span class="COMM">/**
<span class='line'> 45</span>  * Sets the parent for this node
<span class='line'> 46</span>  *
<span class='line'> 47</span>  * @param {DF} the parent node
<span class='line'> 48</span>  */</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="NAME">FSNode.prototype.setParent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">parent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">parent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">parent.isDF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FSNode"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument parent must be of type DF"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">	</span><span class="NAME">this.parent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parent</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 55</span> 
<span class='line'> 56</span> 
<span class='line'> 57</span> 
<span class='line'> 58</span> </span><span class="COMM">/**
<span class='line'> 59</span>  * Gets the parent node for this node
<span class='line'> 60</span>  *
<span class='line'> 61</span>  * @type DF
<span class='line'> 62</span>  * @returns the parent node
<span class='line'> 63</span>  */</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="NAME">FSNode.prototype.getParent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.parent</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> 
<span class='line'> 70</span> </span><span class="COMM">/**
<span class='line'> 71</span>  * Gets the file control parameter for this node
<span class='line'> 72</span>  *
<span class='line'> 73</span>  * @type FCP
<span class='line'> 74</span>  * @returns the FCP
<span class='line'> 75</span>  */</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="NAME">FSNode.prototype.getFCP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.fcp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 79</span> 
<span class='line'> 80</span> 
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="COMM">/**
<span class='line'> 83</span>  * Returns true if this is a DF
<span class='line'> 84</span>  *
<span class='line'> 85</span>  * @type boolean
<span class='line'> 86</span>  * @return true if this is a DF
<span class='line'> 87</span>  */</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="NAME">FSNode.prototype.isDF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 91</span> 
<span class='line'> 92</span> 
<span class='line'> 93</span> 
<span class='line'> 94</span> </span><span class="COMM">/**
<span class='line'> 95</span>  * Returns a human readible string
<span class='line'> 96</span>  *
<span class='line'> 97</span>  * @type String
<span class='line'> 98</span>  * @return a string
<span class='line'> 99</span>  */</span><span class="WHIT">
<span class='line'>100</span> </span><span class="NAME">FSNode.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.fcp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.fcp.getFID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"FSNode"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.fcp.getFID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> 
<span class='line'>107</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of a ISO 7816-4 file system simulation
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT">                </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">FCP</span><span class="WHIT">                 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/FCP'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">FCP</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">DF</span><span class="WHIT">                  </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/DF'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">DF</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">TransparentEF</span><span class="WHIT">       </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/TransparentEF'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">TransparentEF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SecurityEnvironment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/SecurityEnvironment'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SecurityEnvironment</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> 
<span class='line'> 33</span> 
<span class='line'> 34</span> 
<span class='line'> 35</span> </span><span class="COMM">/**
<span class='line'> 36</span>  * Create a file selector object
<span class='line'> 37</span>  *
<span class='line'> 38</span>  * @class Class implementing a file selector used to store information about the currently selected
<span class='line'> 39</span>  *        file system object and to process the SELECT APDU
<span class='line'> 40</span>  * @constructor
<span class='line'> 41</span>  * @param {DF} mf the master file
<span class='line'> 42</span>  */</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">FileSelector</span><span class="PUNC">(</span><span class="NAME">mf</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">mf</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">mf</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">DF</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FileSelector"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument 1 must be of type DF"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 47</span> 
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="NAME">this.mf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mf</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">	</span><span class="NAME">this.selectMF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> 
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="NAME">this.se</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">VEXK</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SecurityEnvironment</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CDIK</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SecurityEnvironment</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">SMRES</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SecurityEnvironment</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">SMCOM</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SecurityEnvironment</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">	</span><span class="NAME">this.globalAuthenticationState</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 54</span> 
<span class='line'> 55</span> </span><span class="NAME">exports.FileSelector</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">FileSelector</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> 
<span class='line'> 57</span> 
<span class='line'> 58</span> 
<span class='line'> 59</span> </span><span class="COMM">/**
<span class='line'> 60</span>  * Returns the current EF, if any
<span class='line'> 61</span>  *
<span class='line'> 62</span>  * @type EF
<span class='line'> 63</span>  * @return the current EF or null
<span class='line'> 64</span>  */</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="NAME">FileSelector.prototype.getCurrentEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.currentEF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 68</span> 
<span class='line'> 69</span> 
<span class='line'> 70</span> 
<span class='line'> 71</span> </span><span class="COMM">/**
<span class='line'> 72</span>  * Return the current security environment
<span class='line'> 73</span>  *
<span class='line'> 74</span>  * @type Object
<span class='line'> 75</span>  * @returns Object with properties VEXK, CDIK, SMRES and SMCOM containing SecurityEnvironment objects
<span class='line'> 76</span>  */</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="NAME">FileSelector.prototype.getSecurityEnvironment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.se</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 80</span> 
<span class='line'> 81</span> 
<span class='line'> 82</span> 
<span class='line'> 83</span> </span><span class="COMM">/**
<span class='line'> 84</span>  * Return meta data associated with the current DF or MF
<span class='line'> 85</span>  *
<span class='line'> 86</span>  * @param {String} name the meta data name
<span class='line'> 87</span>  * @type Object
<span class='line'> 88</span>  * @returns The meta data
<span class='line'> 89</span>  */</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="NAME">FileSelector.prototype.getMeta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">meta</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> 
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.currentDF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="COMM">//		print("DF selected: " + this.currentDF);</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">meta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.currentDF.meta</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="COMM">//		print("Found: " + meta);</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 98</span> 
<span class='line'> 99</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">meta</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">		</span><span class="NAME">meta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mf.meta</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">meta</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>104</span> 
<span class='line'>105</span> 
<span class='line'>106</span> 
<span class='line'>107</span> </span><span class="COMM">/**
<span class='line'>108</span>  * Return object of given type identified by id
<span class='line'>109</span>  *
<span class='line'>110</span>  * &lt;p>If bit b8 in the id is 1, then the search will start in the current DF. If the object
<span class='line'>111</span>  *    is not found, the search is continued in the MF. If the bit is not set, then the search
<span class='line'>112</span>  *    will only look into the MF.&lt;/p>
<span class='line'>113</span>  *
<span class='line'>114</span>  * @param {String} type the type of the object
<span class='line'>115</span>  * @param {Number} id the id, bit b8 indicating local DF or global MF search
<span class='line'>116</span>  * @type {Object}
<span class='line'>117</span>  * @returns the object of the requested type or null if not found
<span class='line'>118</span>  */</span><span class="WHIT">
<span class='line'>119</span> </span><span class="NAME">FileSelector.prototype.getObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">olist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> 
<span class='line'>122</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">		</span><span class="NAME">olist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.currentDF.meta</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">olist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">olist</span><span class="PUNC">[</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x7F</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> 
<span class='line'>127</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>132</span> 
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="NAME">olist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mf.meta</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">olist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">olist</span><span class="PUNC">[</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x7F</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>136</span> 
<span class='line'>137</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>143</span> 
<span class='line'>144</span> 
<span class='line'>145</span> 
<span class='line'>146</span> </span><span class="COMM">/**
<span class='line'>147</span>  * Enumerate objects of a defined type
<span class='line'>148</span>  *
<span class='line'>149</span>  * @param {String} type the type of the object
<span class='line'>150</span>  * @type {Number[]}
<span class='line'>151</span>  * @returns the list of objects found
<span class='line'>152</span>  */</span><span class="WHIT">
<span class='line'>153</span> </span><span class="NAME">FileSelector.prototype.enumerateObjects</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">idlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> 
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mf</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.currentDF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="NAME">each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.currentDF.meta</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">			</span><span class="NAME">idlist.push</span><span class="PUNC">(</span><span class="NAME">o.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>161</span> 
<span class='line'>162</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="NAME">each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.mf.meta</span><span class="PUNC">[</span><span class="NAME">type</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">		</span><span class="NAME">idlist.push</span><span class="PUNC">(</span><span class="NAME">o.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>165</span> 
<span class='line'>166</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">idlist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>168</span> 
<span class='line'>169</span> 
<span class='line'>170</span> 
<span class='line'>171</span> </span><span class="COMM">/**
<span class='line'>172</span>  * Add authenticated object to the list of authentication states for the local DF or global MF
<span class='line'>173</span>  *
<span class='line'>174</span>  * @param{boolean} global true if global state else local DF state
<span class='line'>175</span>  * @param{AuthenticationObject} ao the authentication object for which authentication was successfull
<span class='line'>176</span>  */</span><span class="WHIT">
<span class='line'>177</span> </span><span class="NAME">FileSelector.prototype.addAuthenticationState</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">global</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ao</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">global</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">		</span><span class="NAME">this.globalAuthenticationState.push</span><span class="PUNC">(</span><span class="NAME">ao</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">		</span><span class="NAME">this.localAuthenticationState.push</span><span class="PUNC">(</span><span class="NAME">ao</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>183</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>184</span> 
<span class='line'>185</span> 
<span class='line'>186</span> 
<span class='line'>187</span> </span><span class="COMM">/**
<span class='line'>188</span>  * Add authenticated object to the list of authentication states for the local DF or global MF
<span class='line'>189</span>  *
<span class='line'>190</span>  * @param{boolean} global true if global state else local DF state
<span class='line'>191</span>  * @param{AuthenticationObject} ao the authentication object for which authentication was successfull
<span class='line'>192</span>  */</span><span class="WHIT">
<span class='line'>193</span> </span><span class="NAME">FileSelector.prototype.isAuthenticated</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">global</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ao</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">global</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.globalAuthenticationState</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.localAuthenticationState</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="NAME">each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">aao</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">aao</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">ao</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> 
<span class='line'>207</span> 
<span class='line'>208</span> 
<span class='line'>209</span> </span><span class="COMM">/**
<span class='line'>210</span>  * Select the MF
<span class='line'>211</span>  */</span><span class="WHIT">
<span class='line'>212</span> </span><span class="NAME">FileSelector.prototype.selectMF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="NAME">this.currentDF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mf</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="NAME">this.currentEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="NAME">this.localAuthenticationState</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> 
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.mf</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>219</span> 
<span class='line'>220</span> 
<span class='line'>221</span> 
<span class='line'>222</span> </span><span class="COMM">/**
<span class='line'>223</span>  * Select a DF entry by FID
<span class='line'>224</span>  *
<span class='line'>225</span>  * @param {ByteString} fid the file identifier
<span class='line'>226</span>  * @param {boolean} check if file matches expected type EF or DF
<span class='line'>227</span>  * @param {boolean} df true if the check must check for a DF type, else a EF type
<span class='line'>228</span>  * @type FSNode
<span class='line'>229</span>  * @return the selected file system node
<span class='line'>230</span>  */</span><span class="WHIT">
<span class='line'>231</span> </span><span class="NAME">FileSelector.prototype.selectFID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">check</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">df</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.currentDF.selectByFID</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>233</span> 
<span class='line'>234</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FileSelector"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_FILENOTFOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"File "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>237</span> 
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">check</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">df</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">node.isDF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">df</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.isDF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FileSelector"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_FILENOTFOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"File "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found or not of matching type"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>243</span> 
<span class='line'>244</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">node.isDF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">		</span><span class="NAME">this.currentDF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">		</span><span class="NAME">this.localAuthenticationState</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT">		</span><span class="NAME">this.currentEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">		</span><span class="NAME">this.currentEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>253</span> 
<span class='line'>254</span> 
<span class='line'>255</span> 
<span class='line'>256</span> </span><span class="COMM">/**
<span class='line'>257</span>  * Select a DF entry by SFI
<span class='line'>258</span>  *
<span class='line'>259</span>  * @param {Number} sfi the short file identifier
<span class='line'>260</span>  * @type FSNode
<span class='line'>261</span>  * @return the selected file system node
<span class='line'>262</span>  */</span><span class="WHIT">
<span class='line'>263</span> </span><span class="NAME">FileSelector.prototype.selectSFI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.currentDF.selectBySFI</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> 
<span class='line'>266</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FileSelector"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_FILENOTFOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"File with SFI "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>269</span> 
<span class='line'>270</span> </span><span class="WHIT">	</span><span class="NAME">this.currentEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>273</span> 
<span class='line'>274</span> 
<span class='line'>275</span> 
<span class='line'>276</span> </span><span class="COMM">/**
<span class='line'>277</span>  * Processes the SELECT APDU
<span class='line'>278</span>  *
<span class='line'>279</span>  * &lt;p>Supports in P1&lt;/p>
<span class='line'>280</span>  * &lt;ul>
<span class='line'>281</span>  *  &lt;li>'00' with empty data to select the MF&lt;/li>
<span class='line'>282</span>  *  &lt;li>'00' with "3F00" to select the MF&lt;/li>
<span class='line'>283</span>  *  &lt;li>'00' with fid to select an entry in the current DF&lt;/li>
<span class='line'>284</span>  *  &lt;li>'01' with fid to select a DF in the current DF&lt;/li>
<span class='line'>285</span>  *  &lt;li>'02' with fid to select an EF in the current DF&lt;/li>
<span class='line'>286</span>  *  &lt;li>'03' with empty data to select the parent&lt;/li>
<span class='line'>287</span>  * &lt;/ul>
<span class='line'>288</span>  * &lt;p>Supports in P2&lt;/p>
<span class='line'>289</span>  * &lt;ul>
<span class='line'>290</span>  *  &lt;li>'00' with P1=='00' return no data&lt;/li>
<span class='line'>291</span>  *  &lt;li>'04' return FCP&lt;/li>
<span class='line'>292</span>  *  &lt;li>'0C' return no data&lt;/li>
<span class='line'>293</span>  * &lt;/ul>
<span class='line'>294</span>  * @param {APDU} apdu the select APDU
<span class='line'>295</span>  */</span><span class="WHIT">
<span class='line'>296</span> </span><span class="NAME">FileSelector.prototype.processSelectAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> 
<span class='line'>299</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">p2</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p2</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p2</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FileSelector"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCP1P2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Incorrect parameter P2 ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">p2.toString</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>303</span> 
<span class='line'>304</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getP1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">p1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"3F00"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">			</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selectMF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">			</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selectFID</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">		</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selectFID</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">		</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selectFID</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>320</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x03</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>321</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FileSelector"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Empty C-Data expected"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>324</span> 
<span class='line'>325</span> </span><span class="WHIT">		</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.currentDF.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>326</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>327</span> </span><span class="WHIT">			</span><span class="NAME">this.currentDF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">			</span><span class="NAME">this.localAuthenticationState</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">			</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.currentDF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">		</span><span class="NAME">this.currentEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>335</span> </span><span class="WHIT">		</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mf.selectByAID</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FileSelector"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_FILENOTFOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Application "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">		</span><span class="NAME">this.currentDF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">		</span><span class="NAME">this.currentEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">		</span><span class="NAME">this.localAuthenticationState</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>343</span> </span><span class="WHIT">	</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>344</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FileSelector"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCP1P2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Incorrect parameter P1 ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">p1.toString</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>346</span> 
<span class='line'>347</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">p2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">		</span><span class="NAME">apdu.setRData</span><span class="PUNC">(</span><span class="NAME">node.getFCP</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getFCI</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">		</span><span class="NAME">apdu.setRData</span><span class="PUNC">(</span><span class="NAME">node.getFCP</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>355</span> 
<span class='line'>356</span> </span><span class="WHIT">	</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_OK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>357</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>358</span> 
<span class='line'>359</span> 
<span class='line'>360</span> 
<span class='line'>361</span> </span><span class="COMM">/**
<span class='line'>362</span>  * Return a human readable string for this object
<span class='line'>363</span>  */</span><span class="WHIT">
<span class='line'>364</span> </span><span class="NAME">FileSelector.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>365</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"FileSelector: Current DF="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.currentDF</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" / Current EF="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.currentEF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.globalAuthenticationState.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"\nGlobally authenticated objects:"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="NAME">each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">aao</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.globalAuthenticationState</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">aao.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>372</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.localAuthenticationState.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"\nLocally authenticated objects:"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="NAME">each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">aao</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.localAuthenticationState</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">aao.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>380</span> 
<span class='line'>381</span> 
<span class='line'>382</span> 
<span class='line'>383</span> </span><span class="NAME">FileSelector.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>384</span> 
<span class='line'>385</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"A0000000010101"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>386</span> 
<span class='line'>387</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DF</span><span class="PUNC">(</span><span class="NAME">FCP.newDF</span><span class="PUNC">(</span><span class="STRN">"3F00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>388</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TransparentEF</span><span class="PUNC">(</span><span class="NAME">FCP.newTransparentEF</span><span class="PUNC">(</span><span class="STRN">"2F00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>389</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TransparentEF</span><span class="PUNC">(</span><span class="NAME">FCP.newTransparentEF</span><span class="PUNC">(</span><span class="STRN">"2F01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x17</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>390</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DF</span><span class="PUNC">(</span><span class="NAME">FCP.newDF</span><span class="PUNC">(</span><span class="STRN">"DF01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>391</span> </span><span class="WHIT">							</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TransparentEF</span><span class="PUNC">(</span><span class="NAME">FCP.newTransparentEF</span><span class="PUNC">(</span><span class="STRN">"2F01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>392</span> </span><span class="WHIT">						</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>393</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>394</span> 
<span class='line'>395</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">mf.dump</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>396</span> 
<span class='line'>397</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">mf.isDF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span> 
<span class='line'>399</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mf.selectByFID</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"2F00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">ef.isDF</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ef.getFCP</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getFID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"2F00"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>402</span> 
<span class='line'>403</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ef</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mf.selectBySFI</span><span class="PUNC">(</span><span class="NUMB">0x17</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>404</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ef.getFCP</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getFID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"2F01"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> 
<span class='line'>406</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">df</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mf.selectByAID</span><span class="PUNC">(</span><span class="NAME">aid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>407</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">df.getFCP</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getFID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"DF01"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>408</span> 
<span class='line'>409</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">FileSelector</span><span class="PUNC">(</span><span class="NAME">mf</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>410</span> 
<span class='line'>411</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"3F00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>412</span> </span><span class="WHIT">	</span><span class="NAME">fs.processSelectAPDU</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">fs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>415</span> 
<span class='line'>416</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"2F00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">	</span><span class="NAME">fs.processSelectAPDU</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">fs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> 
<span class='line'>421</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"DF01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>422</span> </span><span class="WHIT">	</span><span class="NAME">fs.processSelectAPDU</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">fs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> 
<span class='line'>426</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"2F01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>427</span> </span><span class="WHIT">	</span><span class="NAME">fs.processSelectAPDU</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>428</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">fs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>429</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>430</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>431</span> 
<span class='line'>432</span> 
<span class='line'>433</span> </span><span class="COMM">// test();</span><span class="WHIT">
<span class='line'>434</span> 
<span class='line'>435</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  --------- 
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of ISO 7816-4 APDU processing
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Create a file system object identifiable by an id
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * @class Abstract class for file system objects identified by an identifier
<span class='line'> 33</span>  *
<span class='line'> 34</span>  * @param {String} name the human readable name of the object
<span class='line'> 35</span>  * @param {Number} id the id
<span class='line'> 36</span>  */</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="WHIT">	</span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="WHIT">	</span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 41</span> 
<span class='line'> 42</span> </span><span class="NAME">exports.FileSystemIdObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> 
<span class='line'> 44</span> 
<span class='line'> 45</span> </span><span class="COMM">/**
<span class='line'> 46</span>  * Return id of object
<span class='line'> 47</span>  */</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="NAME">FileSystemIdObject.prototype.getId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 51</span> 
<span class='line'> 52</span> 
<span class='line'> 53</span> 
<span class='line'> 54</span> </span><span class="COMM">/**
<span class='line'> 55</span>  * Return type of object
<span class='line'> 56</span>  * @type string
<span class='line'> 57</span>  * @return type of object
<span class='line'> 58</span>  */</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="NAME">FileSystemIdObject.prototype.getType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"FileSystemIdObject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.NOT_IMPLEMENTED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Derived class must override getType()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 62</span> 
<span class='line'> 63</span> 
<span class='line'> 64</span> 
<span class='line'> 65</span> </span><span class="COMM">/**
<span class='line'> 66</span>  * Return human readable string
<span class='line'> 67</span>  */</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="NAME">FileSystemIdObject.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 71</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of a ISO 7816-4 file system simulation
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT">                </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">FCP</span><span class="WHIT">                 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/FCP'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">FCP</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">FSNode</span><span class="WHIT">              </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/FSNode'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">FSNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> 
<span class='line'> 33</span> </span><span class="COMM">/**
<span class='line'> 34</span>  * Creates a LinearEF
<span class='line'> 35</span>  *
<span class='line'> 36</span>  * @class Class implementing linear EFs
<span class='line'> 37</span>  * @constructor
<span class='line'> 38</span>  * @param {FCP} the file control parameter
<span class='line'> 39</span>  * @param {ByteString[]} records the array of records
<span class='line'> 40</span>  */</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">LinearEF</span><span class="PUNC">(</span><span class="NAME">fcp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">records</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">fcp</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">FCP</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"LinearEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument 1 must be of type FCP"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="COMM">//	print(typeof(records));</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">records</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">records</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">records</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"LinearEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument 2 must be of type ByteString[]"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="NAME">FSNode.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="NAME">this.records</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">records</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> </span><span class="NAME">LinearEF.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">FSNode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="NAME">LinearEF.prototype.constructor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">LinearEF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> 
<span class='line'> 57</span> </span><span class="NAME">exports.LinearEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">LinearEF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> 
<span class='line'> 59</span> 
<span class='line'> 60</span> 
<span class='line'> 61</span> </span><span class="COMM">/**
<span class='line'> 62</span>  * Reads a record from a linear EF
<span class='line'> 63</span>  *
<span class='line'> 64</span>  * @param {APDU} apdu the APDU used for reading
<span class='line'> 65</span>  * @param {Number} recno the record number
<span class='line'> 66</span>  * @param {Number} qualifier the qualifier as encoded in bit b3 - b1 of P1
<span class='line'> 67</span>  * @param {Number} length the length in bytes or 0 for all in short APDU or 65536 for all in extended APDUs
<span class='line'> 68</span>  * @type ByteString
<span class='line'> 69</span>  * @return the data read
<span class='line'> 70</span>  */</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="NAME">LinearEF.prototype.readRecord</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">recno</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">qualifier</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">recno</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"LinearEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Record number must be type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">qualifier</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"LinearEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Qualifier must be type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 78</span> 
<span class='line'> 79</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">recno</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"LinearEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCP1P2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Current record referencing with P1=00 not support"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="NAME">recno</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 83</span> 
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">recno</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.records.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"LinearEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_RECORDNOTFOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Record number exeeds number of defined records"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 87</span> 
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">qualifier</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"LinearEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCP1P2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Only absolute record references supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 91</span> 
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">record</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.records</span><span class="PUNC">[</span><span class="NAME">recno</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> 
<span class='line'> 94</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">		</span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">record.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">			</span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>101</span> 
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">record.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">		</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_EOF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">		</span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">record.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">		</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_OK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">record.left</span><span class="PUNC">(</span><span class="NAME">rlen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>111</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of a secure messaging channel as defined in ISO 7814-4 and eSign-K
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT">                                </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SecureMessagingCommandAPDUDecoder</span><span class="WHIT">   </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/SecureMessagingCommandAPDUDecoder'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SecureMessagingCommandAPDUDecoder</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> </span><span class="COMM">/**
<span class='line'> 33</span>  * Create a secure channel
<span class='line'> 34</span>  *
<span class='line'> 35</span>  * @class Class implementing a secure messaging channel
<span class='line'> 36</span>  * @constructor
<span class='line'> 37</span>  * @param {Crypto} crypto the crypto provider
<span class='line'> 38</span>  */</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">SecureChannelHandler</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel.SSC_DEFAULT_POLICY</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 43</span> 
<span class='line'> 44</span> </span><span class="NAME">exports.SecureChannelHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SecureChannelHandler</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> 
<span class='line'> 47</span> 
<span class='line'> 48</span> </span><span class="COMM">/**
<span class='line'> 49</span>  * Sets the policy for handling send sequence counters
<span class='line'> 50</span>  *
<span class='line'> 51</span>  * See IsoSecureChannel for details
<span class='line'> 52</span>  *
<span class='line'> 53</span>  * @param {Number} policy one of IsoSecureChannel.SSC_DEFAULT_POLICY, SSC_SYNC_POLICY or SSC_SYNC_ENC_POLICY
<span class='line'> 54</span>  */</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="NAME">SecureChannelHandler.prototype.setSendSequenceCounterPolicy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">policy</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">	</span><span class="NAME">this.policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 58</span> 
<span class='line'> 59</span> 
<span class='line'> 60</span> 
<span class='line'> 61</span> </span><span class="COMM">/**
<span class='line'> 62</span>  * Sets the key used for encryption
<span class='line'> 63</span>  *
<span class='line'> 64</span>  * @param {Key} key the encryption key
<span class='line'> 65</span>  */</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="NAME">SecureChannelHandler.prototype.setEncKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">	</span><span class="NAME">this.encKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">		</span><span class="NAME">this.encBlockSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">		</span><span class="NAME">this.encMechanism</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">		</span><span class="NAME">this.iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">		</span><span class="NAME">this.encBlockSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">		</span><span class="NAME">this.encMechanism</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_CBC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">		</span><span class="NAME">this.iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 79</span> 
<span class='line'> 80</span> 
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="COMM">/**
<span class='line'> 83</span>  * Sets the key used for message authentication
<span class='line'> 84</span>  *
<span class='line'> 85</span>  * @param {Key} key the message authentication key
<span class='line'> 86</span>  */</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="NAME">SecureChannelHandler.prototype.setMacKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="NAME">this.macKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> 
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">		</span><span class="NAME">this.macBlockSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">		</span><span class="NAME">this.macMechanism</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">		</span><span class="NAME">this.macBlockSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">		</span><span class="NAME">this.macMechanism</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_MAC_EMV</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 98</span> 
<span class='line'> 99</span> 
<span class='line'>100</span> 
<span class='line'>101</span> </span><span class="COMM">/**
<span class='line'>102</span>  * Set the send sequence counter for MAC calculation
<span class='line'>103</span>  *
<span class='line'>104</span>  * @param {ByteString} ssc the send sequence counter
<span class='line'>105</span>  */</span><span class="WHIT">
<span class='line'>106</span> </span><span class="NAME">SecureChannelHandler.prototype.setMACSendSequenceCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ssc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">	</span><span class="NAME">this.macSendSequenceCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ssc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>109</span> 
<span class='line'>110</span> 
<span class='line'>111</span> 
<span class='line'>112</span> </span><span class="COMM">/**
<span class='line'>113</span>  * Set the send sequence counter for encryption calculation
<span class='line'>114</span>  *
<span class='line'>115</span>  * @param {ByteString} ssc the send sequence counter
<span class='line'>116</span>  */</span><span class="WHIT">
<span class='line'>117</span> </span><span class="NAME">SecureChannelHandler.prototype.setEncSendSequenceCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ssc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="NAME">this.encSendSequenceCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ssc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>120</span> 
<span class='line'>121</span> 
<span class='line'>122</span> 
<span class='line'>123</span> </span><span class="COMM">/**
<span class='line'>124</span>  * Return an initialisation vector based on the defined policy
<span class='line'>125</span>  *
<span class='line'>126</span>  * @type ByteString
<span class='line'>127</span>  * @return the IV
<span class='line'>128</span>  */</span><span class="WHIT">
<span class='line'>129</span> </span><span class="NAME">SecureChannelHandler.prototype.getIV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.iv</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.policy</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel.SSC_SYNC_ENC_POLICY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">		</span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">this.encKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.encMechanism</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.macSendSequenceCounter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.policy</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel.SSC_SYNC_POLICY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">		</span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.macSendSequenceCounter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.encSendSequenceCounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">			</span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.encSendSequenceCounter</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>141</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>142</span> 
<span class='line'>143</span> 
<span class='line'>144</span> 
<span class='line'>145</span> </span><span class="COMM">/**
<span class='line'>146</span>  * Unwrap a secure messaging APDU recovering the content
<span class='line'>147</span>  *
<span class='line'>148</span>  * @param {APDU} apdu the APDU to unwrap
<span class='line'>149</span>  */</span><span class="WHIT">
<span class='line'>150</span> </span><span class="NAME">SecureChannelHandler.prototype.unwrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">decoder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SecureMessagingCommandAPDUDecoder</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">decoder.verifyMAC</span><span class="PUNC">(</span><span class="NAME">this.macKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SecureChannelHandler"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCSMDATAOBJECT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"MAC verification failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>155</span> 
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">le</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">decoder.getLe</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">le</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">		</span><span class="NAME">apdu.ne</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">le</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">		</span><span class="NAME">apdu.ne</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>162</span> 
<span class='line'>163</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">decoder.decryptBody</span><span class="PUNC">(</span><span class="NAME">this.encKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="NAME">apdu.setCData</span><span class="PUNC">(</span><span class="NAME">plain</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>166</span> 
<span class='line'>167</span> 
<span class='line'>168</span> 
<span class='line'>169</span> </span><span class="COMM">/**
<span class='line'>170</span>  * Wrap an APDU for secure messaging
<span class='line'>171</span>  *
<span class='line'>172</span>  * @param {APDU} apdu the APDU to wrap
<span class='line'>173</span>  */</span><span class="WHIT">
<span class='line'>174</span> </span><span class="NAME">SecureChannelHandler.prototype.wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> 
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">macinp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> 
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.macSendSequenceCounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ssc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.macSendSequenceCounter.add</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">		</span><span class="NAME">this.macSendSequenceCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ssc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">		</span><span class="NAME">macinp.append</span><span class="PUNC">(</span><span class="NAME">ssc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>184</span> 
<span class='line'>185</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.hasRData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">padbuff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="NAME">apdu.getRData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">		</span><span class="NAME">SecureMessagingCommandAPDUDecoder.pad</span><span class="PUNC">(</span><span class="NAME">padbuff</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.encBlockSize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getIV</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">this.encKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.encMechanism</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">padbuff.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">padind</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> 
<span class='line'>192</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">do87</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TLV</span><span class="PUNC">(</span><span class="NUMB">0x87</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">padind.concat</span><span class="PUNC">(</span><span class="NAME">cryptogram</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">TLV.EMV</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">		</span><span class="NAME">rdata.append</span><span class="PUNC">(</span><span class="NAME">do87.getTLV</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="NAME">rdata.append</span><span class="PUNC">(</span><span class="NUMB">0x99</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="NAME">rdata.append</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="NAME">rdata.append</span><span class="PUNC">(</span><span class="NAME">apdu.getSW</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="NAME">rdata.append</span><span class="PUNC">(</span><span class="NAME">apdu.getSW</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> 
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="NAME">macinp.append</span><span class="PUNC">(</span><span class="NAME">rdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> 
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="NAME">SecureMessagingCommandAPDUDecoder.pad</span><span class="PUNC">(</span><span class="NAME">macinp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.macBlockSize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.macKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.macMechanism</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">macinp.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> 
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="NAME">rdata.append</span><span class="PUNC">(</span><span class="NUMB">0x8E</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="NAME">rdata.append</span><span class="PUNC">(</span><span class="NUMB">0x08</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="NAME">rdata.append</span><span class="PUNC">(</span><span class="NAME">mac.left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> 
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="NAME">apdu.setRData</span><span class="PUNC">(</span><span class="NAME">rdata.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>212</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of a secure messaging channel as defined in ISO 7814-4 and eSign-K
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT">            </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> 
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> </span><span class="COMM">/**
<span class='line'> 32</span>  * Creates a decoder for a single secure messaging command APDU
<span class='line'> 33</span>  *
<span class='line'> 34</span>  * @class Decoder for a secure messaging APDU
<span class='line'> 35</span>  * @constructor
<span class='line'> 36</span>  * @param {SecureChannel} channel the secure channel object
<span class='line'> 37</span>  * @param {APDU} apdu the secure messaging APDU
<span class='line'> 38</span>  */</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">SecureMessagingCommandAPDUDecoder</span><span class="PUNC">(</span><span class="NAME">channel</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="WHIT">	</span><span class="NAME">this.channel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">channel</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.tlvlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getCDataAsTLVList</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 44</span> 
<span class='line'> 45</span> </span><span class="NAME">exports.SecureMessagingCommandAPDUDecoder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SecureMessagingCommandAPDUDecoder</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> 
<span class='line'> 47</span> 
<span class='line'> 48</span> 
<span class='line'> 49</span> </span><span class="COMM">/**
<span class='line'> 50</span>  * Verify the message authentication code (MAC)
<span class='line'> 51</span>  *
<span class='line'> 52</span>  * @type boolean
<span class='line'> 53</span>  * @return true if the MAC is valid
<span class='line'> 54</span>  */</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="NAME">SecureMessagingCommandAPDUDecoder.prototype.verifyMAC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">macinp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.buildMACInput</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> 
<span class='line'> 58</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tlvlist.find</span><span class="PUNC">(</span><span class="NUMB">0x8E</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> 
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SecureMessagingCommandAPDUDecoder"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_SMOBJMISSING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"MAC data object (8E) not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> 
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.channel.crypto.verify</span><span class="PUNC">(</span><span class="NAME">this.channel.macKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.channel.macMechanism</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">macinp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mac.getValue</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 66</span> 
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="COMM">/**
<span class='line'> 70</span>  * Build the MAC input block
<span class='line'> 71</span>  *
<span class='line'> 72</span>  * @type ByteString
<span class='line'> 73</span>  * @return the MAC calculation input block
<span class='line'> 74</span>  */</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="NAME">SecureMessagingCommandAPDUDecoder.prototype.buildMACInput</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">macinp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> 
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.channel.macSendSequenceCounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ssc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.channel.macSendSequenceCounter.add</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">		</span><span class="NAME">this.channel.macSendSequenceCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ssc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">		</span><span class="NAME">macinp.append</span><span class="PUNC">(</span><span class="NAME">ssc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 83</span> 
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.apdu.isAuthenticatedHeader</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">		</span><span class="NAME">macinp.append</span><span class="PUNC">(</span><span class="NAME">this.apdu.getCLA</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">		</span><span class="NAME">macinp.append</span><span class="PUNC">(</span><span class="NAME">this.apdu.getINS</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">		</span><span class="NAME">macinp.append</span><span class="PUNC">(</span><span class="NAME">this.apdu.getP1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">		</span><span class="NAME">macinp.append</span><span class="PUNC">(</span><span class="NAME">this.apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">		</span><span class="NAME">SecureMessagingCommandAPDUDecoder.pad</span><span class="PUNC">(</span><span class="NAME">macinp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.channel.macBlockSize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 91</span> 
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">someadded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.tlvlist.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tlvlist.index</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> 
<span class='line'> 96</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv.getTag</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">			</span><span class="NAME">macinp.append</span><span class="PUNC">(</span><span class="NAME">tlv.getTLV</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">			</span><span class="NAME">someadded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">someadded</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">		</span><span class="NAME">SecureMessagingCommandAPDUDecoder.pad</span><span class="PUNC">(</span><span class="NAME">macinp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.channel.macBlockSize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">macinp.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> 
<span class='line'>107</span> 
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="COMM">/**
<span class='line'>110</span>  * Decrypt the body of a secure messaging APDU
<span class='line'>111</span>  *
<span class='line'>112</span>  * @param {Key} key the encryption key
<span class='line'>113</span>  * @type ByteString
<span class='line'>114</span>  * @return the plain body or undefined if no encrypted body
<span class='line'>115</span>  */</span><span class="WHIT">
<span class='line'>116</span> </span><span class="NAME">SecureMessagingCommandAPDUDecoder.prototype.decryptBody</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">body</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tlvlist.find</span><span class="PUNC">(</span><span class="NUMB">0x87</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">body</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">body</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tlvlist.find</span><span class="PUNC">(</span><span class="NUMB">0x85</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">body</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">paddingIndicator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">body.getValue</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">paddingIndicator</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SecureMessagingCommandAPDUDecoder"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCSMDATAOBJECT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Padding indicator "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">paddingIndicator</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>131</span> 
<span class='line'>132</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">body.getValue</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> 
<span class='line'>134</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.channel.getIV</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.channel.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.channel.encKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.channel.encMechanism</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cryptogram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>136</span> 
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SecureMessagingCommandAPDUDecoder.removePadding</span><span class="PUNC">(</span><span class="NAME">plain</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> 
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>141</span> 
<span class='line'>142</span> 
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="COMM">/**
<span class='line'>145</span>  * Return value of optional Le element with tag '97'
<span class='line'>146</span>  *
<span class='line'>147</span>  * @type Number
<span class='line'>148</span>  * @return the value of the Le element
<span class='line'>149</span>  */</span><span class="WHIT">
<span class='line'>150</span> </span><span class="NAME">SecureMessagingCommandAPDUDecoder.prototype.getLe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">le</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tlvlist.find</span><span class="PUNC">(</span><span class="NUMB">0x97</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">le</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">le.getValue</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">le.getL</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>161</span> 
<span class='line'>162</span> 
<span class='line'>163</span> 
<span class='line'>164</span> </span><span class="COMM">/**
<span class='line'>165</span>  * Applies ISO padding to the input buffer
<span class='line'>166</span>  *
<span class='line'>167</span>  * @param {ByteBuffer} buffer the input buffer
<span class='line'>168</span>  * @param {Number} blocksize the block size
<span class='line'>169</span>  * @type ByteBuffer
<span class='line'>170</span>  * @return the buffer argument
<span class='line'>171</span>  */</span><span class="WHIT">
<span class='line'>172</span> </span><span class="NAME">SecureMessagingCommandAPDUDecoder.pad</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">buffer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blocksize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	</span><span class="NAME">buffer.append</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">buffer.length</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">blocksize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">		</span><span class="NAME">buffer.append</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">buffer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>179</span> 
<span class='line'>180</span> 
<span class='line'>181</span> 
<span class='line'>182</span> </span><span class="COMM">/**
<span class='line'>183</span>  * Removes the ISO padding
<span class='line'>184</span>  *
<span class='line'>185</span>  * @param {ByteString} buffer the input with with padding
<span class='line'>186</span>  * @type ByteString
<span class='line'>187</span>  * @return the buffer without padding
<span class='line'>188</span>  */</span><span class="WHIT">
<span class='line'>189</span> </span><span class="NAME">SecureMessagingCommandAPDUDecoder.removePadding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">buffer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">buffer.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> 
<span class='line'>192</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">buffer.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">		</span><span class="NAME">i</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">buffer.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SecureMessagingCommandAPDUDecoder"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCSMDATAOBJECT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid ISO padding"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>199</span> 
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">buffer.left</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>202</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Security environment - a container for security related data elements
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Creates a security environment container that collects cryptographic reference templates (CRT)
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * @class Class implementing a security environment for cryptographic operations.
<span class='line'> 33</span>  * @constructor
<span class='line'> 34</span>  */</span><span class="WHIT">
<span class='line'> 35</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">SecurityEnvironment</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="WHIT">	</span><span class="NAME">this.t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">AT</span><span class="PUNC">:</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">KAT</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HT</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CCT</span><span class="PUNC">:</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">DST</span><span class="PUNC">:</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CT</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 38</span> 
<span class='line'> 39</span> </span><span class="NAME">exports.SecurityEnvironment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SecurityEnvironment</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 40</span> 
<span class='line'> 41</span> 
<span class='line'> 42</span> 
<span class='line'> 43</span> </span><span class="COMM">/**
<span class='line'> 44</span>  * Adds CRT elements to a named template.
<span class='line'> 45</span>  *
<span class='line'> 46</span>  * @param {String} tname the CRT name one of AT, KAT, HT, CCT, DST or CT
<span class='line'> 47</span>  * @param {ASN1} tlv the tlv object containing the CRT elements
<span class='line'> 48</span>  **/</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="NAME">SecurityEnvironment.prototype.addElements</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tname</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tlv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.t</span><span class="PUNC">[</span><span class="NAME">tname</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tlv.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">			</span><span class="NAME">SecurityEnvironment.decorateCRT</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">			</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">t.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">o.tag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">					</span><span class="NAME">t.remove</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">					</span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">			</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tlv.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT">			</span><span class="NAME">SecurityEnvironment.decorateCRT</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">		</span><span class="NAME">this.t</span><span class="PUNC">[</span><span class="NAME">tname</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 73</span> 
<span class='line'> 74</span> 
<span class='line'> 75</span> 
<span class='line'> 76</span> </span><span class="COMM">/**
<span class='line'> 77</span>  * Adds a CRT identified by it's tag
<span class='line'> 78</span>  *
<span class='line'> 79</span>  * @param {ASN1} tlv the tlv object
<span class='line'> 80</span>  */</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="NAME">SecurityEnvironment.prototype.add</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">tlv.tag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">		</span><span class="NAME">tlv.setName</span><span class="PUNC">(</span><span class="STRN">"AT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0xA6</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">		</span><span class="NAME">tlv.setName</span><span class="PUNC">(</span><span class="STRN">"KAT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0xAA</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">		</span><span class="NAME">tlv.setName</span><span class="PUNC">(</span><span class="STRN">"HT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0xB4</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">		</span><span class="NAME">tlv.setName</span><span class="PUNC">(</span><span class="STRN">"CCT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0xB6</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">		</span><span class="NAME">tlv.setName</span><span class="PUNC">(</span><span class="STRN">"DST"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0xB8</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">		</span><span class="NAME">tlv.setName</span><span class="PUNC">(</span><span class="STRN">"CT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SecurityEnvironment"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tlv.tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid tag for CRT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="NAME">this.addElements</span><span class="PUNC">(</span><span class="NAME">tlv.name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tlv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> 
<span class='line'>107</span> 
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="COMM">/**
<span class='line'>110</span>  * Return textual representation of security environment container
<span class='line'>111</span>  */</span><span class="WHIT">
<span class='line'>112</span> </span><span class="NAME">SecurityEnvironment.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>114</span> 
<span class='line'>115</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.t.AT</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>116</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Authentication Template (AT)\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.t.AT</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.t.KAT</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Key Agreement Template (KAT)\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.t.KAT</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.t.HT</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Hash Template (HT)\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.t.HT</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.t.CCT</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Cryptographic Checksum Template (CCT)\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.t.CCT</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.t.DST</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Digital Signature Template (DST)\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.t.DST</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.t.CT</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Confidentiality Template (CT)\n"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.t.CT</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>135</span> 
<span class='line'>136</span> 
<span class='line'>137</span> 
<span class='line'>138</span> </span><span class="COMM">/**
<span class='line'>139</span>  * Decorates a tlv object from the CRT
<span class='line'>140</span>  */</span><span class="WHIT">
<span class='line'>141</span> </span><span class="NAME">SecurityEnvironment.decorateCRT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">asn1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">asn1.tag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"cryptographicMechanism 80"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"fileIdentifierOrPath 81"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"dFName 82"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"secretOrPublicKeyReference 83"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"sessionOrPrivateKeyReference 84"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x85</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"nullBlock 85"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"chainingBlock 86"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x87</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"initialBlock 87"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x88</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"previousChallenge 88"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x89</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"proprietaryDataElementIndex 89"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x8A</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"proprietaryDataElementIndex 8A"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x8B</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"proprietaryDataElementIndex 8B"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x8C</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"proprietaryDataElementIndex 8C"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x8D</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"proprietaryDataElementIndex 8D"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x90</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"cardHashCode 90"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x91</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"ephemeralPublicKey 91"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x92</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"cardTimeStamp 92"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x93</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"dsiCounter 93"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x94</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"challengeOrDerivationParameter 94"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x95</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"usageQualifier 95"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x8E</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"cryptographicContentReference 8E"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x67</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"auxiliaryAuthenticatedData 67"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x67</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"auxiliaryAuthenticatedData 67"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x7F4C</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">		</span><span class="NAME">asn1.setName</span><span class="PUNC">(</span><span class="STRN">"certificateHolderAuthorisationTemplate 7F4C"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>216</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>217</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview SignatureKey - Object storing information related to PrK.QES
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="WHIT">  </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/FileSystemIdObject'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">FileSystemIdObject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT">                </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> </span><span class="COMM">/**
<span class='line'> 33</span>  * Create a signature key object
<span class='line'> 34</span>  *
<span class='line'> 35</span>  * @class Class implementing signature keys
<span class='line'> 36</span>  *
<span class='line'> 37</span>  * @param {String} name the human readable name of the object
<span class='line'> 38</span>  * @param {Number} id the key id
<span class='line'> 39</span>  */</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">SignatureKey</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">FileSystemIdObject.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.isTerminated</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">			</span><span class="COMM">// State after TERMINATE</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">this.allowTerminate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="NAME">SignatureKey.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="NAME">SignatureKey.prototype.constructor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SignatureKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> 
<span class='line'> 49</span> </span><span class="NAME">exports.SignatureKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SignatureKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> 
<span class='line'> 51</span> 
<span class='line'> 52</span> </span><span class="NAME">SignatureKey.TYPE_KEY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"signaturekey"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> 
<span class='line'> 55</span> 
<span class='line'> 56</span> </span><span class="COMM">/**
<span class='line'> 57</span>  * Override from base class
<span class='line'> 58</span>  */</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="NAME">SignatureKey.prototype.getType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">SignatureKey.TYPE_KEY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"signaturekey"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 62</span> 
<span class='line'> 63</span> 
<span class='line'> 64</span> 
<span class='line'> 65</span> </span><span class="COMM">/**
<span class='line'> 66</span>  * Terminate authentication object
<span class='line'> 67</span>  */</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="NAME">SignatureKey.prototype.terminate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.allowTerminate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SignatureKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Terminate not allowed for signature key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">	</span><span class="NAME">this.isTerminated</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 74</span> 
<span class='line'> 75</span> 
<span class='line'> 76</span> 
<span class='line'> 77</span> </span><span class="COMM">/**
<span class='line'> 78</span>  * Convert object to a human readable string
<span class='line'> 79</span>  */</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="NAME">SignatureKey.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isTerminated</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">" terminated"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">" active"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 83</span> 
<span class='line'> 84</span> 
<span class='line'> 85</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of a ISO 7816-4 file system simulation
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT">                </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">FCP</span><span class="WHIT">                 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/FCP'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">FCP</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">FSNode</span><span class="WHIT">              </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/FSNode'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">FSNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> 
<span class='line'> 33</span> </span><span class="COMM">/**
<span class='line'> 34</span>  * Create a file system node that represents a transparent EF
<span class='line'> 35</span>  *
<span class='line'> 36</span>  * @class Class implementing a transparent EF
<span class='line'> 37</span>  * @constructor
<span class='line'> 38</span>  * @param {FCP} fcp the FCP for this EF
<span class='line'> 39</span>  * @param {ByteString} contents the contents for this EF
<span class='line'> 40</span>  */</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">TransparentEF</span><span class="PUNC">(</span><span class="NAME">fcp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">contents</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">fcp</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">FCP</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TransparentEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument 1 must be of type FCP"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">contents</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">contents</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">contents</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TransparentEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument 2 must be of type ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="NAME">FSNode.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="NAME">this.content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">contents</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> </span><span class="NAME">TransparentEF.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">FSNode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="NAME">TransparentEF.prototype.constructor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">TransparentEF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> 
<span class='line'> 57</span> </span><span class="NAME">exports.TransparentEF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">TransparentEF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> 
<span class='line'> 59</span> 
<span class='line'> 60</span> 
<span class='line'> 61</span> </span><span class="COMM">/**
<span class='line'> 62</span>  * Reads data from a transparent EF
<span class='line'> 63</span>  *
<span class='line'> 64</span>  * @param {APDU} apdu the APDU used for reading
<span class='line'> 65</span>  * @param {Number} offset the offset to read from
<span class='line'> 66</span>  * @param {Number} length the length in bytes or 0 for all in short APDU or 65536 for all in extended APDUs
<span class='line'> 67</span>  * @type ByteString
<span class='line'> 68</span>  * @return the data read
<span class='line'> 69</span>  */</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="NAME">TransparentEF.prototype.readBinary</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">offset</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TransparentEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Offset must be type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TransparentEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Length must be type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 77</span> 
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.content.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TransparentEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCP1P2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Offset out of range"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">		</span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.content.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">			</span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 89</span> 
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.content.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">		</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_EOF</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">		</span><span class="NAME">rlen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.content.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">		</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_OK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 96</span> 
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.content.bytes</span><span class="PUNC">(</span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rlen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 99</span> 
<span class='line'>100</span> 
<span class='line'>101</span> 
<span class='line'>102</span> </span><span class="COMM">/**
<span class='line'>103</span>  * Update data in transparent EF
<span class='line'>104</span>  *
<span class='line'>105</span>  * @param {APDU} apdu the APDU used for updating
<span class='line'>106</span>  * @param {Number} offset the offset to update
<span class='line'>107</span>  * @param {ByteString} data the data to write into the EF
<span class='line'>108</span>  */</span><span class="WHIT">
<span class='line'>109</span> </span><span class="NAME">TransparentEF.prototype.updateBinary</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">offset</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TransparentEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Offset must be type Number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">data</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TransparentEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_GENERALERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Data must be a ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>116</span> 
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.fcp.size</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TransparentEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_WRONGLENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Writing beyond file limit"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>120</span> 
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.content.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TransparentEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCP1P2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Offset out of range"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newcontent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.content.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.content.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">newcontent.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">			</span><span class="NAME">newcontent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newcontent.concat</span><span class="PUNC">(</span><span class="NAME">this.content.bytes</span><span class="PUNC">(</span><span class="NAME">newcontent.length</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TransparentEF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INCP1P2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Offset out of range"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newcontent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>135</span> 
<span class='line'>136</span> </span><span class="WHIT">	</span><span class="NAME">this.content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newcontent</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="NAME">apdu.setSW</span><span class="PUNC">(</span><span class="NAME">APDU.SW_OK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>139</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview TrustAnchor Base class for card verifiable certificate based access controller
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/FileSystemIdObject'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">FileSystemIdObject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/eac/CVC"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> 
<span class='line'> 33</span> </span><span class="COMM">/**
<span class='line'> 34</span>  * Create a TrustAnchor object that handles certificate validation, terminal authentication and access control
<span class='line'> 35</span>  *
<span class='line'> 36</span>  * @constructor
<span class='line'> 37</span>  * @class Class implementing a CVC based access controller
<span class='line'> 38</span>  * @param {CVC} root the root certificate
<span class='line'> 39</span>  */</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">TrustAnchor</span><span class="PUNC">(</span><span class="NAME">root</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">root</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 44</span> 
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="NAME">this.chain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.chain.push</span><span class="PUNC">(</span><span class="NAME">root</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">this.recentCAROnly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">					</span><span class="COMM">// Maintain only the latest trust anchor</span><span class="WHIT">
<span class='line'> 48</span> 
<span class='line'> 49</span> </span><span class="WHIT">	</span><span class="COMM">// Save in file system under id, which is the last byte in the CHAT OID</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">root.getCHAT</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chat.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.right</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">root.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Use the name of the CVCA</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">	</span><span class="NAME">FileSystemIdObject.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 55</span> 
<span class='line'> 56</span> </span><span class="NAME">TrustAnchor.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">FileSystemIdObject</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="NAME">TrustAnchor.prototype.constructor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">TrustAnchor</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> 
<span class='line'> 59</span> </span><span class="NAME">TrustAnchor.TYPE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"TrustAnchor"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="NAME">TrustAnchor.idIS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-IS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> 
<span class='line'> 62</span> </span><span class="NAME">exports.TrustAnchor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">TrustAnchor</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> 
<span class='line'> 64</span> 
<span class='line'> 65</span> </span><span class="COMM">/**
<span class='line'> 66</span>  * Return type of file system object
<span class='line'> 67</span>  *
<span class='line'> 68</span>  * @type String
<span class='line'> 69</span>  * @return the type string
<span class='line'> 70</span>  */</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="NAME">TrustAnchor.prototype.getType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">TrustAnchor.TYPE</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 74</span> 
<span class='line'> 75</span> 
<span class='line'> 76</span> 
<span class='line'> 77</span> 
<span class='line'> 78</span> </span><span class="COMM">/**
<span class='line'> 79</span>  * Add recent trust anchor to PACE response
<span class='line'> 80</span>  *
<span class='line'> 81</span>  * @param {ASN1} response the response object to receive tag 87 and 88
<span class='line'> 82</span>  */</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="NAME">TrustAnchor.prototype.addCARforPACE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">response</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.chain.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="NAME">response.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x87</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.recentCAROnly</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">		</span><span class="NAME">response.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x88</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 90</span> 
<span class='line'> 91</span> 
<span class='line'> 92</span> 
<span class='line'> 93</span> </span><span class="COMM">/**
<span class='line'> 94</span>  * Is a recent trust anchor issuer of the certificate chr in question
<span class='line'> 95</span>  *
<span class='line'> 96</span>  * @param {PublicKeyReference} chr the certificate holder
<span class='line'> 97</span>  * @type boolean
<span class='line'> 98</span>  * @return true if trust anchor issued certificate
<span class='line'> 99</span>  */</span><span class="WHIT">
<span class='line'>100</span> </span><span class="NAME">TrustAnchor.prototype.isIssuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificateFor</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="COMM">//	print("isIssuer(" + chr + "):");</span><span class="WHIT">
<span class='line'>103</span> </span><span class="COMM">//	print(cvc);</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> 
<span class='line'>107</span> 
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="COMM">/**
<span class='line'>110</span>  * Get public key from certificate, possibly determine the domain parameter from previous trust anchors
<span class='line'>111</span>  *
<span class='line'>112</span>  * @param {PublicKeyReference} chr the certificate holder
<span class='line'>113</span>  * @type Key
<span class='line'>114</span>  * @return the public key or null
<span class='line'>115</span>  */</span><span class="WHIT">
<span class='line'>116</span> </span><span class="NAME">TrustAnchor.prototype.getPublicKeyFor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>117</span> </span><span class="COMM">//	print("Get public key for " + chr);</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.chain.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">cl</span><span class="PUNC">--</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>121</span> 
<span class='line'>122</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>123</span> </span><span class="COMM">//		print("chr not found");</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>126</span> 
<span class='line'>127</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cl</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">containsDomainParameter</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>129</span> </span><span class="COMM">//		print("Looking for DPs down the chain");</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cl</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">containsDomainParameter</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">cl</span><span class="PUNC">--</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>134</span> </span><span class="COMM">//		print("Found domain parameter in " + this.chain[cl]);</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getPublicKey</span><span class="PUNC">(</span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>138</span> </span><span class="COMM">//		print(this.chain[i]);</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>141</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>142</span> 
<span class='line'>143</span> 
<span class='line'>144</span> 
<span class='line'>145</span> </span><span class="COMM">/**
<span class='line'>146</span>  * Return certificate for chr
<span class='line'>147</span>  *
<span class='line'>148</span>  * @param {PublicKeyReference} chr the certificate holder
<span class='line'>149</span>  * @type CVC
<span class='line'>150</span>  * @return the certificate or null
<span class='line'>151</span>  */</span><span class="WHIT">
<span class='line'>152</span> </span><span class="NAME">TrustAnchor.prototype.getCertificateFor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.chain.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.recentCAROnly</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>164</span> 
<span class='line'>165</span> 
<span class='line'>166</span> 
<span class='line'>167</span> </span><span class="COMM">/**
<span class='line'>168</span>  * Update EF.CVCA with list of valid trust anchors
<span class='line'>169</span>  *
<span class='line'>170</span>  * @param {Object} dataProvider object implementing getDate(), setDate() and updateEFCVCA()
<span class='line'>171</span>  */</span><span class="WHIT">
<span class='line'>172</span> </span><span class="NAME">TrustAnchor.prototype.updateEFCVCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">dataProvider</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.chain.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x42</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.recentCAROnly</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x42</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NAME">cl</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">	</span><span class="NAME">dataProvider.updateEFCVCA</span><span class="PUNC">(</span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>182</span> 
<span class='line'>183</span> 
<span class='line'>184</span> 
<span class='line'>185</span> </span><span class="COMM">/**
<span class='line'>186</span>  * Check certificate
<span class='line'>187</span>  *
<span class='line'>188</span>  * &lt;p>This method updates the current date for certificates issued by domestic DVCAs.&lt;/p>
<span class='line'>189</span>  * @param {CVC} issuer the issuing certificate
<span class='line'>190</span>  * @param {CVC} subject the subjects certificate
<span class='line'>191</span>  * @param {Object} dataProvider object implementing getDate(), setDate() and updateEFCVCA()
<span class='line'>192</span>  * @param {Key} dp domain parameter for checking the public key
<span class='line'>193</span>  */</span><span class="WHIT">
<span class='line'>194</span> </span><span class="NAME">TrustAnchor.prototype.checkCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">issuer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dataProvider</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">	</span><span class="COMM">// Some basic sanity checks</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">subject.getCXD</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">valueOf</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">subject.getCED</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">valueOf</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TrustAnchor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate expiration is before effective date"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>199</span> 
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">subject.getPublicKey</span><span class="PUNC">(</span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">puk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">puk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">puk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TrustAnchor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid public key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TrustAnchor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e.message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>209</span> 
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chatissuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">issuer.getCHAT</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chatsubject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">subject.getCHAT</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> 
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rolesubject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chatsubject.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">chatissuer.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.equals</span><span class="PUNC">(</span><span class="NAME">rolesubject</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TrustAnchor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Role mismatch"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>217</span> 
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rightsissuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chatissuer.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rightssubject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chatsubject.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> 
<span class='line'>221</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rightsissuer.length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">rightssubject.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TrustAnchor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Different size in rights mask of chat"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>224</span> 
<span class='line'>225</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">typeissuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rightsissuer.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">typesubject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rightssubject.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> 
<span class='line'>228</span> </span><span class="WHIT">	</span><span class="COMM">// C0 - CVCA, 80 - DV domestic, 40 - DV foreign, 00 - Terminal</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">typeissuer</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// Ignore domestic and foreign</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">		</span><span class="NAME">typeissuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">typesubject</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">		</span><span class="NAME">typesubject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>235</span> </span><span class="COMM">//	print("issuer " + typeissuer);</span><span class="WHIT">
<span class='line'>236</span> </span><span class="COMM">//	print("subject " + typesubject);</span><span class="WHIT">
<span class='line'>237</span> 
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">typesubject</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">typeissuer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">typeissuer</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">typesubject</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">typeissuer</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TrustAnchor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate hierachy invalid"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>242</span> 
<span class='line'>243</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">issuer.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">subject.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TrustAnchor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Public key algorithm mismatch"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>246</span> 
<span class='line'>247</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">date</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dataProvider.getDate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">valueOf</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">typesubject</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">			</span><span class="COMM">// CVCA certificates do not expire</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">subject.getCXD</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">valueOf</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">date</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TrustAnchor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate is expired"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>253</span> </span><span class="COMM">//		print("Add to chain: " + subject);</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">		</span><span class="NAME">this.chain.push</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">							</span><span class="COMM">// Add new CVCA link to the chain</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rolesubject.equals</span><span class="PUNC">(</span><span class="NAME">TrustAnchor.idIS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">			</span><span class="NAME">this.updateEFCVCA</span><span class="PUNC">(</span><span class="NAME">dataProvider</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">					</span><span class="COMM">// Update /DF.ePass/EF.CVCA</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>259</span> 
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">rightsissuer.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">			</span><span class="COMM">// Trust all except foreign DVCAs</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">subject.getCED</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">valueOf</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">date</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">			</span><span class="NAME">dataProvider.setDate</span><span class="PUNC">(</span><span class="NAME">subject.getCED</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>265</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>266</span> 
<span class='line'>267</span> 
<span class='line'>268</span> 
<span class='line'>269</span> </span><span class="COMM">/**
<span class='line'>270</span>  * Validate certificate issued by CVCA
<span class='line'>271</span>  *
<span class='line'>272</span>  * @param {Crypto} crypto the crypto object to use for verification
<span class='line'>273</span>  * @param {CVC} cert the certificate to validate
<span class='line'>274</span>  * @param {Object} dataProvider object implementing getDate(), setDate() and updateEFCVCA()
<span class='line'>275</span>  */</span><span class="WHIT">
<span class='line'>276</span> </span><span class="NAME">TrustAnchor.prototype.validateCertificateIssuedByCVCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dataProvider</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificateFor</span><span class="PUNC">(</span><span class="NAME">cert.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPublicKeyFor</span><span class="PUNC">(</span><span class="NAME">cert.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">puk</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">cert.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cc.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TrustAnchor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not verify certificate signature"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">	</span><span class="NAME">this.checkCertificate</span><span class="PUNC">(</span><span class="NAME">cc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dataProvider</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>284</span> 
<span class='line'>285</span> 
<span class='line'>286</span> 
<span class='line'>287</span> </span><span class="COMM">/**
<span class='line'>288</span>  * Validate certificate issued by CVCA
<span class='line'>289</span>  *
<span class='line'>290</span>  * @param {Crypto} crypto the crypto object to use for verification
<span class='line'>291</span>  * @param {CVC} cert the certificate to validate
<span class='line'>292</span>  * @param {CVC} dvca the issuing certificate
<span class='line'>293</span>  * @param {Object} dataProvider object implementing getDate(), setDate() and updateEFCVCA()
<span class='line'>294</span>  */</span><span class="WHIT">
<span class='line'>295</span> </span><span class="NAME">TrustAnchor.prototype.validateCertificateIssuedByDVCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dvca</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dataProvider</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPublicKeyFor</span><span class="PUNC">(</span><span class="NAME">dvca.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>297</span> </span><span class="COMM">//	print(dp);</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">cert.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dvca.getPublicKey</span><span class="PUNC">(</span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dvca.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"TrustAnchor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not verify certificate signature"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="NAME">this.checkCertificate</span><span class="PUNC">(</span><span class="NAME">dvca</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dataProvider</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dvca.getPublicKey</span><span class="PUNC">(</span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>302</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>303</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Support for card verifiable certificates and certificate requests according to EAC 1.1/2.0
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> </span><span class="COMM">// Imports</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PublicKeyReference'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> 
<span class='line'> 33</span> </span><span class="COMM">/**
<span class='line'> 34</span>  * Create a CVC object from a DER encoded ByteString.
<span class='line'> 35</span>  *
<span class='line'> 36</span>  * @class Class implementing a decoder for card verifiable certificates or requests according to
<span class='line'> 37</span>  *        Extended Access Control (EAC) as defined in BSI TR-03110 1.11 and 2.02.
<span class='line'> 38</span>  * @constructor
<span class='line'> 39</span>  * @param {ByteString} param the DER encoded certificate
<span class='line'> 40</span>  * @return
<span class='line'> 41</span>  */</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arg</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">			</span><span class="NAME">this.asn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">			</span><span class="NAME">this.bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.asn.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arg</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">			</span><span class="NAME">this.bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">			</span><span class="NAME">this.asn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">this.bin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be of type ByteString or ASN1"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.asn.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_AT</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">			</span><span class="NAME">this.body</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.asn.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.asn.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CVC</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">			</span><span class="NAME">this.body</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.asn.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument is neither a CVC or CVC request"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> 
<span class='line'> 64</span> </span><span class="NAME">exports.CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> 
<span class='line'> 66</span> </span><span class="NAME">CVC.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="COMM">/** Authentication Template */</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="NAME">CVC.TAG_AT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x67</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="COMM">/** CV Certificate */</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="NAME">CVC.TAG_CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x7F21</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="COMM">/** Certificate Body */</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="NAME">CVC.TAG_BODY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x7F4E</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="COMM">/** Certificate Profile Identifier */</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="NAME">CVC.TAG_CPI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x5F29</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="COMM">/** Certification Authority Reference */</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="NAME">CVC.TAG_CAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x42</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="COMM">/** Public Key */</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="NAME">CVC.TAG_PUK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x7F49</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="COMM">/** Prime Modulus */</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="NAME">CVC.TAG_ECC_P</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="COMM">/** First coefficient a */</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="NAME">CVC.TAG_ECC_A</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="COMM">/** Second coefficient b */</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="NAME">CVC.TAG_ECC_B</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="COMM">/** Base Point G */</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="NAME">CVC.TAG_ECC_G</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="COMM">/** Order of the base point */</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="NAME">CVC.TAG_ECC_N</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x85</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="COMM">/** Public Point y */</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="NAME">CVC.TAG_ECC_Q</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="COMM">/** Cofactor f */</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="NAME">CVC.TAG_ECC_H</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x87</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="COMM">/** Certificate Holder Reference */</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="NAME">CVC.TAG_CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x5F20</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="COMM">/** Certificate Holder Authorisation Template */</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="NAME">CVC.TAG_CHAT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x7F4C</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="COMM">/** Relative Authorization */</span><span class="WHIT">
<span class='line'>100</span> </span><span class="NAME">CVC.TAG_AUT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x53</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="COMM">/** Certificate Extension */</span><span class="WHIT">
<span class='line'>102</span> </span><span class="NAME">CVC.TAG_EXTN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x65</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="COMM">/** Certificate Effective Date */</span><span class="WHIT">
<span class='line'>104</span> </span><span class="NAME">CVC.TAG_CED</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x5F25</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="COMM">/** Certificate Expiration Date */</span><span class="WHIT">
<span class='line'>106</span> </span><span class="NAME">CVC.TAG_CXD</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x5F24</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="COMM">/** Signature */</span><span class="WHIT">
<span class='line'>108</span> </span><span class="NAME">CVC.TAG_SIG</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x5F37</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>109</span> 
<span class='line'>110</span> 
<span class='line'>111</span> </span><span class="COMM">/** Table of tag names */</span><span class="WHIT">
<span class='line'>112</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>113</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_AT</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Authentication Template"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>114</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_CVC</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CV Certificate"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_BODY</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Certificate Body"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>116</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_CPI</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Certificate Profile Indicator"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>117</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_CAR</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Certification Authority Reference"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_PUK</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Public Key"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_ECC_P</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Prime/Modulus"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_ECC_A</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"First coefficient a/Exponent"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_ECC_B</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Second coefficient b"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_ECC_G</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Base Point G"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_ECC_N</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Order of the base point"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_ECC_Q</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Public Point y"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_ECC_H</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Cofactor f"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_CHR</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Certificate Holder Reference"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_CHAT</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Certificate Holder Authentication Template"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_AUT</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Relative Authorization"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_EXTN</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Extension"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_CED</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Certificate Effective Date"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_CXD</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Certificate Expiration Date"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>132</span> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">CVC.TAG_SIG</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Signature"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> 
<span class='line'>134</span> </span><span class="NAME">CVC.PUK_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x06</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_ECC_P</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">512</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">optional</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_ECC_A</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">512</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">optional</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_ECC_B</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">66</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">optional</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_ECC_G</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">41</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">133</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">optional</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_ECC_N</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">66</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">optional</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_ECC_Q</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">41</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">133</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">optional</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_ECC_H</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">optional</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>143</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>144</span> 
<span class='line'>145</span> </span><span class="NAME">CVC.REQ_BODY_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CPI</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CAR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">optional</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_PUK</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.PUK_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_EXTN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">optional</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>151</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> 
<span class='line'>153</span> </span><span class="NAME">CVC.REQ_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_BODY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.REQ_BODY_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_SIG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">40</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">550</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>156</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> 
<span class='line'>158</span> </span><span class="NAME">CVC.ATREQ_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CVC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.REQ_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CAR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_SIG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">40</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">550</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>162</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> 
<span class='line'>164</span> </span><span class="NAME">CVC.CHAT_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x06</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_AUT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>167</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> 
<span class='line'>169</span> </span><span class="NAME">CVC.CERT_BODY_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CPI</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CAR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_PUK</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.PUK_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CHAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.CHAT_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_CXD</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_EXTN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">optional</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>178</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> 
<span class='line'>180</span> </span><span class="NAME">CVC.CERT_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_BODY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.CERT_BODY_SYNTAX</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_SIG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxlen</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">550</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>183</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> 
<span class='line'>185</span> 
<span class='line'>186</span> 
<span class='line'>187</span> </span><span class="COMM">/** Table of rights description for id-IS */</span><span class="WHIT">
<span class='line'>188</span> </span><span class="NAME">CVC.ISRIGHTS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="STRN">"Read access to ePassport application: DG 3 (Fingerprint)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="STRN">"Read access to ePassport application: DG 4 (Iris)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 3)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 4)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 5)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="STRN">"Read access to eID application"</span><span class="WHIT">
<span class='line'>195</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span> </span><span class="NAME">CVC.idIS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-IS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> 
<span class='line'>198</span> 
<span class='line'>199</span> </span><span class="COMM">/** Table of rights description for id-AT */</span><span class="WHIT">
<span class='line'>200</span> </span><span class="NAME">CVC.ATRIGHTS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="STRN">"Age Verification"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="STRN">"Community ID Verification"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="STRN">"Restricted Identification"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="STRN">"Privileged Terminal"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="STRN">"CAN allowed"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="STRN">"PIN Management"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="STRN">"Install Certificate"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="STRN">"Install Qualified Certificate"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>209</span> 
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 1 (Document Type)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 2 (Issuing State)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 3 (Date of Expiration)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 4 (Given Name)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 5 (Surname)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 6 (Pseudonym)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 7 (Academic Grade)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 8 (Date of Birth)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>218</span> 
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 9 (Place of Birth)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 10"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 11"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 12"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 13"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 14"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 15"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 16"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>227</span> 
<span class='line'>228</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 17 (Place of Residence)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 18 (Community ID)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 19 (Conditions I-eAT)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 20 (Conditions II-eAT)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">	</span><span class="STRN">"Read Access DG 21"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 29)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 30)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 31)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>236</span> 
<span class='line'>237</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 32)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="STRN">"Write Access DG 21"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="STRN">"Write Access DG 20 (Conditions II-eAT)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">	</span><span class="STRN">"Write Access DG 19 (Conditions I-eAT)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="STRN">"Write Access DG 18 (Community ID)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">	</span><span class="STRN">"Write Access DG 17 (Place of Residence)"</span><span class="WHIT">
<span class='line'>243</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>244</span> </span><span class="NAME">CVC.idAT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-AT"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> 
<span class='line'>246</span> 
<span class='line'>247</span> 
<span class='line'>248</span> </span><span class="COMM">/** Table of rights description for id-ST */</span><span class="WHIT">
<span class='line'>249</span> </span><span class="NAME">CVC.STRIGHTS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">	</span><span class="STRN">"Generate electronic signature"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">	</span><span class="STRN">"Generate qualified electronic signature"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 2)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 3)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 4)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">	</span><span class="STRN">"RFU (Bit 5)"</span><span class="WHIT">
<span class='line'>256</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>257</span> </span><span class="NAME">CVC.idST</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-ST"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> 
<span class='line'>259</span> </span><span class="NAME">CVC.idSC_HSM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"2B0601040181C31F030101"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>260</span> </span><span class="NAME">CVC.idBW_SE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"2B0601040181C31F030102"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> 
<span class='line'>262</span> 
<span class='line'>263</span> 
<span class='line'>264</span> </span><span class="COMM">/** TA constants */</span><span class="WHIT">
<span class='line'>265</span> </span><span class="NAME">CVC.id_TA_ECDSA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="NAME">CVC.id_TA_ECDSA_SHA_1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> </span><span class="NAME">CVC.id_TA_ECDSA_SHA_224</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-224"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="NAME">CVC.id_TA_ECDSA_SHA_256</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>269</span> </span><span class="NAME">CVC.id_TA_ECDSA_SHA_384</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-384"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> </span><span class="NAME">CVC.id_TA_ECDSA_SHA_512</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="NAME">CVC.id_TA_RSA_v1_5_SHA_1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-v1-5-SHA-1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> </span><span class="NAME">CVC.id_TA_RSA_v1_5_SHA_256</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-v1-5-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>273</span> </span><span class="NAME">CVC.id_TA_RSA_v1_5_SHA_512</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-v1-5-SHA-512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="NAME">CVC.id_TA_RSA_PSS_SHA_1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-PSS-SHA-1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="NAME">CVC.id_TA_RSA_PSS_SHA_256</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-PSS-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="NAME">CVC.id_TA_RSA_PSS_SHA_512</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-PSS-SHA-512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> 
<span class='line'>278</span> </span><span class="NAME">CVC.id_ECPUBLICKEY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-ecPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="NAME">CVC.id_ANSIX9</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) prime(1)"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="NAME">CVC.id_CERTICOM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"iso(1) identified-organization(3) certicom(132) curve(0)"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> </span><span class="NAME">CVC.id_BRAINPOOL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ellipticCurve"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> 
<span class='line'>283</span> </span><span class="NAME">CVC.id_ECDSA_WITH_SHA2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"iso(1) member-body(2) us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3)"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>284</span> </span><span class="NAME">CVC.id_ECDSA_WITH_SHA256</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>285</span> </span><span class="NAME">CVC.id_ECDSA_WITH_SHA384</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA384"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>286</span> </span><span class="NAME">CVC.id_ECDSA_WITH_SHA512</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> 
<span class='line'>288</span> 
<span class='line'>289</span> 
<span class='line'>290</span> 
<span class='line'>291</span> </span><span class="COMM">/**
<span class='line'>292</span>  * Return signature mechanism for object identifier
<span class='line'>293</span>  *
<span class='line'>294</span>  * @param {ByteString} oid the object identifer from the public key object
<span class='line'>295</span>  * @returns the signature mechanism as Crypto. constant or -1 if not defined
<span class='line'>296</span>  * @type Number
<span class='line'>297</span>  */</span><span class="WHIT">
<span class='line'>298</span> </span><span class="NAME">CVC.getSignatureMech</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA_SHA_1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA_SHA_224</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA224</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA_SHA_256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>304</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA_SHA_384</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA_SHA_512</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_v1_5_SHA_1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_v1_5_SHA_256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_v1_5_SHA_512</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_PSS_SHA_1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_PSS_SHA_256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_PSS_SHA_512</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>320</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>321</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_ECDSA_WITH_SHA256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_ECDSA_WITH_SHA384</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>325</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_ECDSA_WITH_SHA512</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>326</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>327</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isCurveOID</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument keysize must be number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">512</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">384</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">224</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA224</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>339</span> 
<span class='line'>340</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>341</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>342</span> 
<span class='line'>343</span> 
<span class='line'>344</span> 
<span class='line'>345</span> </span><span class="COMM">/**
<span class='line'>346</span>  * Return hash mechanism for object identifier
<span class='line'>347</span>  *
<span class='line'>348</span>  * @param {ByteString} oid the object identifer from the public key object
<span class='line'>349</span>  * @returns the hash mechanism as Crypto. constant or -1 if not defined
<span class='line'>350</span>  * @type Number
<span class='line'>351</span>  */</span><span class="WHIT">
<span class='line'>352</span> </span><span class="NAME">CVC.getHashMech</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA_SHA_1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>355</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA_SHA_224</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_224</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA_SHA_256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA_SHA_384</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA_SHA_512</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_ECDSA_WITH_SHA256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>364</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_ECDSA_WITH_SHA384</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_ECDSA_WITH_SHA512</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_v1_5_SHA_1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_v1_5_SHA_256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>372</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_v1_5_SHA_512</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_PSS_SHA_1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_PSS_SHA_256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_RSA_PSS_SHA_512</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>380</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>383</span> 
<span class='line'>384</span> 
<span class='line'>385</span> 
<span class='line'>386</span> </span><span class="COMM">/**
<span class='line'>387</span>  * Return true of the object identifier denotes a curve
<span class='line'>388</span>  *
<span class='line'>389</span>  * @type boolean
<span class='line'>390</span>  * @return true, if ECDSA based OID
<span class='line'>391</span>  */</span><span class="WHIT">
<span class='line'>392</span> </span><span class="NAME">CVC.isCurveOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>393</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.startsWith</span><span class="PUNC">(</span><span class="NAME">CVC.id_BRAINPOOL</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.id_BRAINPOOL.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>394</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>395</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.startsWith</span><span class="PUNC">(</span><span class="NAME">CVC.id_ANSIX9</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.id_ANSIX9.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.startsWith</span><span class="PUNC">(</span><span class="NAME">CVC.id_CERTICOM</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.id_CERTICOM.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>403</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>404</span> 
<span class='line'>405</span> 
<span class='line'>406</span> 
<span class='line'>407</span> </span><span class="COMM">/**
<span class='line'>408</span>  * Return true of the object identifier starts with id-TA-ECDSA
<span class='line'>409</span>  *
<span class='line'>410</span>  * @type boolean
<span class='line'>411</span>  * @return true, if ECDSA based OID
<span class='line'>412</span>  */</span><span class="WHIT">
<span class='line'>413</span> </span><span class="NAME">CVC.isECDSA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.startsWith</span><span class="PUNC">(</span><span class="NAME">CVC.id_TA_ECDSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.id_TA_ECDSA.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.startsWith</span><span class="PUNC">(</span><span class="NAME">CVC.id_ECDSA_WITH_SHA2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.id_ECDSA_WITH_SHA2.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>420</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.id_ECPUBLICKEY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>421</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>422</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isCurveOID</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>426</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>427</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>428</span> 
<span class='line'>429</span> 
<span class='line'>430</span> 
<span class='line'>431</span> </span><span class="COMM">/**
<span class='line'>432</span>  * Wrap an ECDSA signature in the format r || s into a TLV encoding as defined by RFC 3279
<span class='line'>433</span>  *
<span class='line'>434</span>  * @param signature ByteString containing the concatenation of r and s as unsigned integer values
<span class='line'>435</span>  * @returns ASN.1 SEQUENCE objects containing two signed integer r and s
<span class='line'>436</span>  */</span><span class="WHIT">
<span class='line'>437</span> </span><span class="NAME">CVC.wrapSignature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>438</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signature.length</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>439</span> 
<span class='line'>440</span> </span><span class="WHIT">	</span><span class="COMM">// r and s are unsigned big integer. We might need to pad a zero for ASN.1 INTEGER which is signed</span><span class="WHIT">
<span class='line'>441</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signature.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>442</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">r.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>443</span> </span><span class="WHIT">		</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>444</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>445</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>446</span> </span><span class="WHIT">		</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">r</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>447</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>448</span> 
<span class='line'>449</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signature.bytes</span><span class="PUNC">(</span><span class="NAME">len</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">s.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">s.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>451</span> </span><span class="WHIT">		</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>452</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>453</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">s.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>454</span> </span><span class="WHIT">		</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>456</span> 
<span class='line'>457</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>458</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>459</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>460</span> 
<span class='line'>461</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>462</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>463</span> 
<span class='line'>464</span> 
<span class='line'>465</span> 
<span class='line'>466</span> </span><span class="COMM">/**
<span class='line'>467</span>  * Integer to octet string conversion
<span class='line'>468</span>  */</span><span class="WHIT">
<span class='line'>469</span> </span><span class="NAME">CVC.I2O</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>470</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>471</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value.right</span><span class="PUNC">(</span><span class="NAME">length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>473</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>474</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.PAD.left</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">15</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>475</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>476</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>477</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>478</span> </span><span class="NAME">CVC.PAD</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>479</span> 
<span class='line'>480</span> 
<span class='line'>481</span> 
<span class='line'>482</span> </span><span class="COMM">/**
<span class='line'>483</span>  * Unwrap a ECDSA signature from the TLV encoding according to RFC3279 into the concatenation
<span class='line'>484</span>  * of the unsigned integer r and s
<span class='line'>485</span>  *
<span class='line'>486</span>  * @param signature TLV encoded signature
<span class='line'>487</span>  * @param keylen optional parameter to specify the key lengths in bytes.
<span class='line'>488</span>  * @returns concatenation of r and s
<span class='line'>489</span>  */</span><span class="WHIT">
<span class='line'>490</span> </span><span class="NAME">CVC.unwrapSignature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keylen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>491</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>492</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keylen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>493</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.I2O</span><span class="PUNC">(</span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keylen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>494</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.I2O</span><span class="PUNC">(</span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keylen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>495</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>496</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>497</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">00</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>498</span> </span><span class="WHIT">			</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>499</span> 
<span class='line'>500</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">s.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">00</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT">			</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>504</span> 
<span class='line'>505</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r.concat</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>507</span> 
<span class='line'>508</span> 
<span class='line'>509</span> 
<span class='line'>510</span> </span><span class="COMM">/**
<span class='line'>511</span>  * Rewrap an ECDSA signature that contains redundant leading zeros in integer.
<span class='line'>512</span>  *
<span class='line'>513</span>  * @param signature the signature
<span class='line'>514</span>  * @type ByteString
<span class='line'>515</span>  * @param the fixed signature
<span class='line'>516</span>  */</span><span class="WHIT">
<span class='line'>517</span> </span><span class="NAME">CVC.rewrapSignature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>518</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>519</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>520</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">r.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>521</span> </span><span class="WHIT">		</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>523</span> 
<span class='line'>524</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>525</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">s.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">s.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>526</span> </span><span class="WHIT">		</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>527</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>528</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>529</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>530</span> 
<span class='line'>531</span> 
<span class='line'>532</span> 
<span class='line'>533</span> </span><span class="COMM">/**
<span class='line'>534</span>  * Check a ASN sequence against a structure description
<span class='line'>535</span>  *
<span class='line'>536</span>  * @private
<span class='line'>537</span>  * @param {Object} s the structure description
<span class='line'>538</span>  * @param {ASN1} asn the asn sequence
<span class='line'>539</span>  * @type String
<span class='line'>540</span>  * @return null if valid or the validation error message
<span class='line'>541</span>  */</span><span class="WHIT">
<span class='line'>542</span> </span><span class="NAME">CVC.checkStructure</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">asn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>543</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>544</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">s.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>545</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>546</span> 
<span class='line'>547</span> </span><span class="COMM">//		print("Checking tag " + d.tag.toString(HEX));</span><span class="WHIT">
<span class='line'>548</span> 
<span class='line'>549</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">asn.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>550</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">asn.get</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>551</span> 
<span class='line'>552</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">d.tag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>553</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">d.minlen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.value.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">d.minlen</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>554</span> </span><span class="WHIT">					</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"Length ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">a.value.length</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">") of "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">d.tag</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d.tag.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">") less than "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d.minlen</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>555</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>556</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">d.maxlen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.value.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">d.maxlen</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>557</span> </span><span class="WHIT">					</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"Length ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">a.value.length</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">") of "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">d.tag</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d.tag.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">") more than "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d.maxlen</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>559</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">d.content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>560</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.checkStructure</span><span class="PUNC">(</span><span class="NAME">d.content</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>562</span> </span><span class="WHIT">						</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>563</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>564</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>565</span> </span><span class="WHIT">				</span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>566</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>567</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">d.optional</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>568</span> </span><span class="WHIT">					</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"Expecting "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">d.tag</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d.tag.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">") but found tag "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">a.tag.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>569</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>570</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>572</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">d.optional</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>573</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"Expecting "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">d.tag</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d.tag.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">") but sequence is exhaused"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>574</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>575</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>576</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>577</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>578</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>579</span> 
<span class='line'>580</span> 
<span class='line'>581</span> 
<span class='line'>582</span> </span><span class="COMM">/**
<span class='line'>583</span>  * Validate ASN1 semantic for card verifiable certificate or certificate request
<span class='line'>584</span>  *
<span class='line'>585</span>  * @type String
<span class='line'>586</span>  * @return null if no error, or error message
<span class='line'>587</span>  */</span><span class="WHIT">
<span class='line'>588</span> </span><span class="NAME">CVC.prototype.validate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>589</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>590</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.asn.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_AT</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>591</span> </span><span class="WHIT">		</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.checkStructure</span><span class="PUNC">(</span><span class="NAME">CVC.ATREQ_SYNTAX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.asn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>592</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>593</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_CED</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>594</span> </span><span class="WHIT">			</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.checkStructure</span><span class="PUNC">(</span><span class="NAME">CVC.CERT_SYNTAX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.asn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>595</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>596</span> </span><span class="WHIT">			</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.checkStructure</span><span class="PUNC">(</span><span class="NAME">CVC.REQ_SYNTAX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.asn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>597</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>598</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>599</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>600</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>601</span> 
<span class='line'>602</span> 
<span class='line'>603</span> 
<span class='line'>604</span> </span><span class="COMM">/**
<span class='line'>605</span>  * Return true of the certificate contains domain parameter
<span class='line'>606</span>  *
<span class='line'>607</span>  * @type boolean
<span class='line'>608</span>  * @return true, if certificate contains domain parameter
<span class='line'>609</span>  */</span><span class="WHIT">
<span class='line'>610</span> </span><span class="NAME">CVC.prototype.containsDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>611</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_PUK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>612</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>613</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>614</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>615</span> 
<span class='line'>616</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x84</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Generator</span><span class="WHIT">
<span class='line'>617</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>618</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>619</span> 
<span class='line'>620</span> 
<span class='line'>621</span> 
<span class='line'>622</span> </span><span class="COMM">/**
<span class='line'>623</span>  * Returns the certificate profile indicator (CPI)
<span class='line'>624</span>  *
<span class='line'>625</span>  * @return the CPI or null
<span class='line'>626</span>  * @type Number
<span class='line'>627</span>  */</span><span class="WHIT">
<span class='line'>628</span> </span><span class="NAME">CVC.prototype.getCPI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>629</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cpido</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_CPI</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>630</span> 
<span class='line'>631</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cpido</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>632</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>633</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>634</span> 
<span class='line'>635</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cpido.value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>636</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>637</span> 
<span class='line'>638</span> 
<span class='line'>639</span> 
<span class='line'>640</span> </span><span class="COMM">/**
<span class='line'>641</span>  * Returns the certification authority reference (CAR).
<span class='line'>642</span>  *
<span class='line'>643</span>  * @return the CAR or null
<span class='line'>644</span>  * @type PublicKeyReference
<span class='line'>645</span>  */</span><span class="WHIT">
<span class='line'>646</span> </span><span class="NAME">CVC.prototype.getCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>647</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cardo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_CAR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>648</span> 
<span class='line'>649</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cardo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>650</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>651</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>652</span> 
<span class='line'>653</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">cardo.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>654</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>655</span> 
<span class='line'>656</span> 
<span class='line'>657</span> 
<span class='line'>658</span> </span><span class="COMM">/**
<span class='line'>659</span>  * Returns the certificate holder reference (CHR).
<span class='line'>660</span>  *
<span class='line'>661</span>  * @return the CHR
<span class='line'>662</span>  * @type PublicKeyReference
<span class='line'>663</span>  */</span><span class="WHIT">
<span class='line'>664</span> </span><span class="NAME">CVC.prototype.getCHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>665</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chrdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_CHR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>666</span> 
<span class='line'>667</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">chrdo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>668</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate does not contain a CHR"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>669</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>670</span> 
<span class='line'>671</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">chrdo.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>672</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>673</span> 
<span class='line'>674</span> 
<span class='line'>675</span> 
<span class='line'>676</span> </span><span class="COMM">/**
<span class='line'>677</span>  * Returns the certificate effective date (CED).
<span class='line'>678</span>  *
<span class='line'>679</span>  * @return the CED or null
<span class='line'>680</span>  * @type Date
<span class='line'>681</span>  */</span><span class="WHIT">
<span class='line'>682</span> </span><span class="NAME">CVC.prototype.getCED</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>683</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ceddo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_CED</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>684</span> 
<span class='line'>685</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">ceddo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>686</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT">
<span class='line'>687</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>688</span> 
<span class='line'>689</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ceddo.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>690</span> 
<span class='line'>691</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>692</span> </span><span class="WHIT">	</span><span class="NAME">d.setFullYear</span><span class="PUNC">(</span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2000</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>693</span> </span><span class="WHIT">				  </span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>694</span> </span><span class="WHIT">				  </span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>695</span> </span><span class="WHIT">	</span><span class="NAME">d.setHours</span><span class="PUNC">(</span><span class="NUMB">12</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>696</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>697</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>698</span> 
<span class='line'>699</span> 
<span class='line'>700</span> 
<span class='line'>701</span> </span><span class="COMM">/**
<span class='line'>702</span>  * Returns the certificate expiration date (CXD).
<span class='line'>703</span>  *
<span class='line'>704</span>  * @return the CXD or null
<span class='line'>705</span>  * @type Date
<span class='line'>706</span>  */</span><span class="WHIT">
<span class='line'>707</span> </span><span class="NAME">CVC.prototype.getCXD</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>708</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cxddo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_CXD</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>709</span> 
<span class='line'>710</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cxddo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>711</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT">
<span class='line'>712</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>713</span> 
<span class='line'>714</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cxddo.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>715</span> 
<span class='line'>716</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>717</span> </span><span class="WHIT">	</span><span class="NAME">d.setFullYear</span><span class="PUNC">(</span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2000</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>718</span> </span><span class="WHIT">				  </span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>719</span> </span><span class="WHIT">				  </span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b.byteAt</span><span class="PUNC">(</span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>720</span> </span><span class="WHIT">	</span><span class="NAME">d.setHours</span><span class="PUNC">(</span><span class="NUMB">12</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>721</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>722</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>723</span> 
<span class='line'>724</span> 
<span class='line'>725</span> 
<span class='line'>726</span> </span><span class="COMM">/**
<span class='line'>727</span>  * Returns the outer certification authority reference (CAR).
<span class='line'>728</span>  *
<span class='line'>729</span>  * @return the outer CAR or null
<span class='line'>730</span>  * @type PublicKeyReference
<span class='line'>731</span>  */</span><span class="WHIT">
<span class='line'>732</span> </span><span class="NAME">CVC.prototype.getOuterCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>733</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.isAuthenticatedRequest</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>734</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>735</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>736</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cardo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.asn.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>737</span> 
<span class='line'>738</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cardo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>739</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT">
<span class='line'>740</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>741</span> 
<span class='line'>742</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">cardo.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>743</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>744</span> 
<span class='line'>745</span> 
<span class='line'>746</span> 
<span class='line'>747</span> </span><span class="COMM">/**
<span class='line'>748</span>  * Returns the extension identified by the object identifier.
<span class='line'>749</span>  *
<span class='line'>750</span>  * @return the extension including the OID or null if not defined
<span class='line'>751</span>  * @type ASN1
<span class='line'>752</span>  */</span><span class="WHIT">
<span class='line'>753</span> </span><span class="NAME">CVC.prototype.getExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">extoid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>754</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">extdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_EXTN</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>755</span> 
<span class='line'>756</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">extdo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>757</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>758</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>759</span> 
<span class='line'>760</span> </span><span class="COMM">//	print(extdo);</span><span class="WHIT">
<span class='line'>761</span> 
<span class='line'>762</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">extdo.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>763</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">extdo.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>764</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ext.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>765</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">oid.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>766</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">extoid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>767</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>768</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>769</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>770</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>771</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>772</span> 
<span class='line'>773</span> 
<span class='line'>774</span> 
<span class='line'>775</span> </span><span class="COMM">/**
<span class='line'>776</span>  * Returns the Certificate Holder Authorization Template.
<span class='line'>777</span>  *
<span class='line'>778</span>  * @return the chat or null if not defined
<span class='line'>779</span>  * @type ASN1
<span class='line'>780</span>  */</span><span class="WHIT">
<span class='line'>781</span> </span><span class="NAME">CVC.prototype.getCHAT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>782</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_CHAT</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>783</span> 
<span class='line'>784</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">chat</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>785</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>786</span> 
<span class='line'>787</span> 
<span class='line'>788</span> 
<span class='line'>789</span> </span><span class="COMM">/**
<span class='line'>790</span>  * Returns the public key object identifier
<span class='line'>791</span>  *
<span class='line'>792</span>  * @returns the object identifier assigned to the public key
<span class='line'>793</span>  * @type ByteString
<span class='line'>794</span>  */</span><span class="WHIT">
<span class='line'>795</span> </span><span class="NAME">CVC.prototype.getPublicKeyOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>796</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_PUK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>797</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>798</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate does not contain a public key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>799</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>800</span> 
<span class='line'>801</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>802</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>803</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Public key does not contain an object identifier"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>804</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>805</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>806</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>807</span> 
<span class='line'>808</span> 
<span class='line'>809</span> 
<span class='line'>810</span> </span><span class="COMM">/**
<span class='line'>811</span>  * Decode a public key from the TR-03110 format
<span class='line'>812</span>  *
<span class='line'>813</span>  * @param {ASN1} pdo the public key data object
<span class='line'>814</span>  * @param {Key} key the key object to fill
<span class='line'>815</span>  */</span><span class="WHIT">
<span class='line'>816</span> </span><span class="NAME">CVC.decodeECPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pdo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>817</span> 
<span class='line'>818</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x86</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Public point</span><span class="WHIT">
<span class='line'>819</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>820</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate does not contain a public key value"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>821</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>822</span> 
<span class='line'>823</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d.value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>824</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b.left</span><span class="PUNC">(</span><span class="NAME">b.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>825</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b.right</span><span class="PUNC">(</span><span class="NAME">b.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>826</span> 
<span class='line'>827</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x81</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Prime modulus</span><span class="WHIT">
<span class='line'>828</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>829</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>830</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>831</span> 
<span class='line'>832</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x82</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// First coefficient a</span><span class="WHIT">
<span class='line'>833</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>834</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>835</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>836</span> 
<span class='line'>837</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// First coefficient b</span><span class="WHIT">
<span class='line'>838</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>839</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>840</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>841</span> 
<span class='line'>842</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x84</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Base Point G</span><span class="WHIT">
<span class='line'>843</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>844</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d.value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>845</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b.left</span><span class="PUNC">(</span><span class="NAME">b.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>846</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b.right</span><span class="PUNC">(</span><span class="NAME">b.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>847</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>848</span> 
<span class='line'>849</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x85</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Order of the base point</span><span class="WHIT">
<span class='line'>850</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>851</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>852</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>853</span> 
<span class='line'>854</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x87</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Cofactor f</span><span class="WHIT">
<span class='line'>855</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>856</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>857</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>858</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>859</span> 
<span class='line'>860</span> 
<span class='line'>861</span> 
<span class='line'>862</span> </span><span class="COMM">/**
<span class='line'>863</span>  * Returns the EC public key contained in the certificate.
<span class='line'>864</span>  *
<span class='line'>865</span>  * @param {Key} domParam optional domain parameter if they are not contained in certificate
<span class='line'>866</span>  * @return the public key object
<span class='line'>867</span>  * @type Key
<span class='line'>868</span>  */</span><span class="WHIT">
<span class='line'>869</span> </span><span class="NAME">CVC.prototype.getECPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">domParam</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>870</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>871</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isCurveOID</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>872</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>873</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>874</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">domParam</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>875</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">domParam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>876</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>877</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.domParam</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>878</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.domParam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>879</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>880</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>881</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>882</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>883</span> 
<span class='line'>884</span> </span><span class="WHIT">	</span><span class="NAME">key.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>885</span> 
<span class='line'>886</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_PUK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>887</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>888</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate does not contain a public key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>889</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>890</span> 
<span class='line'>891</span> </span><span class="WHIT">	</span><span class="NAME">CVC.decodeECPublicKey</span><span class="PUNC">(</span><span class="NAME">pdo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>892</span> 
<span class='line'>893</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>894</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>895</span> 
<span class='line'>896</span> 
<span class='line'>897</span> 
<span class='line'>898</span> </span><span class="COMM">/**
<span class='line'>899</span>  * Returns the RSA public key contained in the certificate.
<span class='line'>900</span>  *
<span class='line'>901</span>  * @return the public key object
<span class='line'>902</span>  * @type Key
<span class='line'>903</span>  */</span><span class="WHIT">
<span class='line'>904</span> </span><span class="NAME">CVC.prototype.getRSAPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>905</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>906</span> 
<span class='line'>907</span> </span><span class="WHIT">	</span><span class="NAME">key.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>908</span> 
<span class='line'>909</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_PUK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>910</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>911</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate does not contain a public key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>912</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>913</span> 
<span class='line'>914</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x81</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// modulus</span><span class="WHIT">
<span class='line'>915</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>916</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>917</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>918</span> 
<span class='line'>919</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x82</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// public exponent</span><span class="WHIT">
<span class='line'>920</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>921</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>922</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>923</span> 
<span class='line'>924</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>925</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>926</span> 
<span class='line'>927</span> 
<span class='line'>928</span> 
<span class='line'>929</span> </span><span class="COMM">/**
<span class='line'>930</span>  * Returns the public key contained in the certificate.
<span class='line'>931</span>  *
<span class='line'>932</span>  * @param {Key} domParam optional domain parameter if they are not contained in certificate
<span class='line'>933</span>  * @return the public key object
<span class='line'>934</span>  * @type Key
<span class='line'>935</span>  */</span><span class="WHIT">
<span class='line'>936</span> </span><span class="NAME">CVC.prototype.getPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">domParam</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>937</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pkoid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>938</span> 
<span class='line'>939</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">pkoid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>940</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getECPublicKey</span><span class="PUNC">(</span><span class="NAME">domParam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>941</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>942</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getRSAPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>943</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>944</span> 
<span class='line'>945</span> 
<span class='line'>946</span> 
<span class='line'>947</span> </span><span class="COMM">/**
<span class='line'>948</span>  * Determine the SubjectKeyIdentifier as defined in X.509
<span class='line'>949</span>  *
<span class='line'>950</span>  * @return the key identifier
<span class='line'>951</span>  * @type ByteString
<span class='line'>952</span>  */</span><span class="WHIT">
<span class='line'>953</span> </span><span class="NAME">CVC.prototype.determineKeyIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>954</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_PUK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>955</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>956</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate does not contain a public key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>957</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>958</span> 
<span class='line'>959</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pkoid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>960</span> 
<span class='line'>961</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keybin</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>962</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">pkoid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>963</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x86</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Public point</span><span class="WHIT">
<span class='line'>964</span> </span><span class="WHIT">		</span><span class="NAME">keybin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>965</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>966</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">modulus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x81</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// modulus</span><span class="WHIT">
<span class='line'>967</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">modulus.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>968</span> </span><span class="WHIT">			</span><span class="NAME">modulus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">modulus</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>969</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>970</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">exponent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x82</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// public exponent</span><span class="WHIT">
<span class='line'>971</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsapub</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"RSAPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>972</span> </span><span class="WHIT">				      </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"modulus"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">modulus</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>973</span> </span><span class="WHIT">				      </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"publicKeyExponent"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exponent</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>974</span> 
<span class='line'>975</span> </span><span class="WHIT">		</span><span class="NAME">keybin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsapub.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>976</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>977</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">CVC.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keybin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>978</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>979</span> 
<span class='line'>980</span> 
<span class='line'>981</span> 
<span class='line'>982</span> </span><span class="COMM">/**
<span class='line'>983</span>  * Return the x-coordinate of the EC Public Key.
<span class='line'>984</span>  *
<span class='line'>985</span>  * @return the key identifier
<span class='line'>986</span>  * @type ByteString
<span class='line'>987</span>  */</span><span class="WHIT">
<span class='line'>988</span> </span><span class="NAME">CVC.prototype.getECPublicKeyIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>989</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_PUK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>990</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pdo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>991</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate does not contain a public key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>992</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>993</span> 
<span class='line'>994</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pkoid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>995</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">pkoid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>996</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate does not contain a EC Public Key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>997</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>998</span> 
<span class='line'>999</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdo.find</span><span class="PUNC">(</span><span class="NUMB">0x86</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Public point</span><span class="WHIT">
<span class='line'>1000</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1001</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">d.value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1002</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1003</span> 
<span class='line'>1004</span> 
<span class='line'>1005</span> 
<span class='line'>1006</span> </span><span class="COMM">/**
<span class='line'>1007</span>  * Determine if this is an authenticated request
<span class='line'>1008</span>  *
<span class='line'>1009</span>  * @returns true, if authenticated request
<span class='line'>1010</span>  * @type Boolean
<span class='line'>1011</span>  */</span><span class="WHIT">
<span class='line'>1012</span> </span><span class="NAME">CVC.prototype.isAuthenticatedRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1013</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.asn.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_AT</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1014</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1015</span> 
<span class='line'>1016</span> 
<span class='line'>1017</span> 
<span class='line'>1018</span> </span><span class="COMM">/**
<span class='line'>1019</span>  * Determine if this is a certificate request
<span class='line'>1020</span>  *
<span class='line'>1021</span>  * @returns true, if certificate request
<span class='line'>1022</span>  * @type Boolean
<span class='line'>1023</span>  */</span><span class="WHIT">
<span class='line'>1024</span> </span><span class="NAME">CVC.prototype.isCertificateRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1025</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isAuthenticatedRequest</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1026</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1027</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1028</span> 
<span class='line'>1029</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ced</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCED</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1030</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ced</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1031</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1032</span> 
<span class='line'>1033</span> 
<span class='line'>1034</span> 
<span class='line'>1035</span> </span><span class="COMM">/**
<span class='line'>1036</span>  * Determine if this is a countersigned authenticated request
<span class='line'>1037</span>  *
<span class='line'>1038</span>  * @returns true, if countersigned authenticated request
<span class='line'>1039</span>  * @type Boolean
<span class='line'>1040</span>  */</span><span class="WHIT">
<span class='line'>1041</span> </span><span class="NAME">CVC.prototype.isCountersignedRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1042</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.isAuthenticatedRequest</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1043</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1044</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1045</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.getOuterCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1046</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1047</span> 
<span class='line'>1048</span> 
<span class='line'>1049</span> 
<span class='line'>1050</span> </span><span class="COMM">/**
<span class='line'>1051</span>  * Determine if this certificate is expired
<span class='line'>1052</span>  *
<span class='line'>1053</span>  * @returns true, if certificate is expired
<span class='line'>1054</span>  * @type Boolean
<span class='line'>1055</span>  */</span><span class="WHIT">
<span class='line'>1056</span> </span><span class="NAME">CVC.prototype.isExpired</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1057</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">now</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1058</span> </span><span class="WHIT">	</span><span class="NAME">now.setHours</span><span class="PUNC">(</span><span class="NUMB">12</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1059</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">now.valueOf</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.getCXD</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">valueOf</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1060</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1061</span> 
<span class='line'>1062</span> 
<span class='line'>1063</span> 
<span class='line'>1064</span> </span><span class="COMM">/**
<span class='line'>1065</span>  * Verify certificate signature with public key
<span class='line'>1066</span>  *
<span class='line'>1067</span>  * @param {Crypto} crypto the crypto instance to use for verification
<span class='line'>1068</span>  * @param {Key} puk the public key
<span class='line'>1069</span>  * @param {ByteString} oid the signature algorithm
<span class='line'>1070</span>  * @returns true if the signature is valid
<span class='line'>1071</span>  * @type Boolean
<span class='line'>1072</span>  */</span><span class="WHIT">
<span class='line'>1073</span> </span><span class="NAME">CVC.prototype.verifyWith</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1074</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.asn.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_AT</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1075</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.asn.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1076</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1077</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.asn.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1078</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1079</span> 
<span class='line'>1080</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1081</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1082</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1083</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.getSignatureMech</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1084</span> 
<span class='line'>1085</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1086</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.wrapSignature</span><span class="PUNC">(</span><span class="NAME">signature.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1087</span> </span><span class="WHIT">		</span><span class="NAME">this.domParam</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1088</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1089</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signature.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1090</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1091</span> 
<span class='line'>1092</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">crypto.verify</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.body.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1093</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1094</span> 
<span class='line'>1095</span> 
<span class='line'>1096</span> 
<span class='line'>1097</span> </span><span class="COMM">/**
<span class='line'>1098</span>  * Verify certificate signature with public key from card verifiable certificate
<span class='line'>1099</span>  *
<span class='line'>1100</span>  * @param {CVC} cvc the card verifiable certificate used to obtain the public key
<span class='line'>1101</span>  * @returns true if the signature is valid
<span class='line'>1102</span>  * @type Boolean
<span class='line'>1103</span>  */</span><span class="WHIT">
<span class='line'>1104</span> </span><span class="NAME">CVC.prototype.verifyWithCVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1105</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1106</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1107</span> 
<span class='line'>1108</span> 
<span class='line'>1109</span> 
<span class='line'>1110</span> </span><span class="COMM">/**
<span class='line'>1111</span>  * Verify outer signature of an authenticated request with public key
<span class='line'>1112</span>  *
<span class='line'>1113</span>  * @param {Key} puk the public key
<span class='line'>1114</span>  * @param {ByteString} oid the signature algorithm
<span class='line'>1115</span>  * @returns true if the signature is valid
<span class='line'>1116</span>  * @type Boolean
<span class='line'>1117</span>  */</span><span class="WHIT">
<span class='line'>1118</span> </span><span class="NAME">CVC.prototype.verifyATWith</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1119</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.isAuthenticatedRequest</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1120</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Not an authenticated request"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1121</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1122</span> 
<span class='line'>1123</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.asn.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1124</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureInput</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.asn.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">this.asn.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1125</span> 
<span class='line'>1126</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1127</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1128</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1129</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.getSignatureMech</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1130</span> 
<span class='line'>1131</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1132</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.wrapSignature</span><span class="PUNC">(</span><span class="NAME">signature.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1133</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1134</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signature.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1135</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1136</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">crypto.verify</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signatureInput</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1137</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1138</span> 
<span class='line'>1139</span> 
<span class='line'>1140</span> 
<span class='line'>1141</span> </span><span class="COMM">/**
<span class='line'>1142</span>  * Verify outer signature of an authenticated request with public key from card verifiable certificate
<span class='line'>1143</span>  *
<span class='line'>1144</span>  * @param {CVC} cvc the card verifiable certificate used to obtain the public key
<span class='line'>1145</span>  * @returns true if the signature is valid
<span class='line'>1146</span>  * @type Boolean
<span class='line'>1147</span>  */</span><span class="WHIT">
<span class='line'>1148</span> </span><span class="NAME">CVC.prototype.verifyATWithCVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1149</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.verifyATWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1150</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1151</span> 
<span class='line'>1152</span> 
<span class='line'>1153</span> 
<span class='line'>1154</span> </span><span class="COMM">/**
<span class='line'>1155</span>  * Returns the encoded certificate
<span class='line'>1156</span>  *
<span class='line'>1157</span>  * @return the DER encoded certificate
<span class='line'>1158</span>  * @type ByteString
<span class='line'>1159</span>  */</span><span class="WHIT">
<span class='line'>1160</span> </span><span class="NAME">CVC.prototype.getBytes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1161</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.bin</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1162</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1163</span> 
<span class='line'>1164</span> 
<span class='line'>1165</span> 
<span class='line'>1166</span> </span><span class="COMM">/**
<span class='line'>1167</span>  * Returns the certificate as ASN1 structure
<span class='line'>1168</span>  *
<span class='line'>1169</span>  * @return the certificate as ASN1 structure
<span class='line'>1170</span>  * @type ASN1
<span class='line'>1171</span>  */</span><span class="WHIT">
<span class='line'>1172</span> </span><span class="NAME">CVC.prototype.getASN1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1173</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.asn</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1174</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1175</span> 
<span class='line'>1176</span> 
<span class='line'>1177</span> 
<span class='line'>1178</span> </span><span class="COMM">/**
<span class='line'>1179</span>  * Function to recursively walk the ASN.1 tree
<span class='line'>1180</span>  */</span><span class="WHIT">
<span class='line'>1181</span> </span><span class="NAME">CVC.decorateTree</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1182</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.OBJECTNAMES</span><span class="PUNC">[</span><span class="NAME">node.tag</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1183</span> 
<span class='line'>1184</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1185</span> </span><span class="WHIT">		</span><span class="NAME">node.setName</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1186</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1187</span> 
<span class='line'>1188</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">node.isconstructed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1189</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">node.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1190</span> </span><span class="WHIT">			</span><span class="NAME">CVC.decorateTree</span><span class="PUNC">(</span><span class="NAME">node.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1191</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1192</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1193</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1194</span> 
<span class='line'>1195</span> 
<span class='line'>1196</span> 
<span class='line'>1197</span> </span><span class="COMM">/**
<span class='line'>1198</span>  * Decorate the ASN.1 object with the correct name
<span class='line'>1199</span>  */</span><span class="WHIT">
<span class='line'>1200</span> </span><span class="NAME">CVC.prototype.decorate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1201</span> </span><span class="WHIT">	</span><span class="NAME">CVC.decorateTree</span><span class="PUNC">(</span><span class="NAME">this.asn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1202</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cxddo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.body.find</span><span class="PUNC">(</span><span class="NAME">CVC.TAG_CXD</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1203</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cxddo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1204</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.asn.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_AT</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1205</span> </span><span class="WHIT">			</span><span class="NAME">this.asn.setName</span><span class="PUNC">(</span><span class="STRN">"Authenticated CVC Request"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1206</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1207</span> </span><span class="WHIT">			</span><span class="NAME">this.asn.setName</span><span class="PUNC">(</span><span class="STRN">"CVC Request"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1208</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1209</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1210</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1211</span> 
<span class='line'>1212</span> 
<span class='line'>1213</span> 
<span class='line'>1214</span> </span><span class="COMM">/**
<span class='line'>1215</span>  * Return list of rights granted by the certificate
<span class='line'>1216</span>  *
<span class='line'>1217</span>  * @returns the list of rights
<span class='line'>1218</span>  * @type String[]
<span class='line'>1219</span>  */</span><span class="WHIT">
<span class='line'>1220</span> </span><span class="NAME">CVC.prototype.getRightsAsList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1221</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1222</span> 
<span class='line'>1223</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rtab</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1224</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCHAT</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1225</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chat</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1226</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1227</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1228</span> 
<span class='line'>1229</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chat.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1230</span> 
<span class='line'>1231</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.idIS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1232</span> </span><span class="WHIT">		</span><span class="NAME">rtab</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.ISRIGHTS</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1233</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.idAT</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1234</span> </span><span class="WHIT">		</span><span class="NAME">rtab</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.ATRIGHTS</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1235</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.idST</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1236</span> </span><span class="WHIT">		</span><span class="NAME">rtab</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.STRIGHTS</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1237</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1238</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1239</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1240</span> 
<span class='line'>1241</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mask</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chat.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1242</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1243</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mask.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">--</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1244</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">akku</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mask.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1245</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1246</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">akku</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1247</span> </span><span class="WHIT">				</span><span class="NAME">list.push</span><span class="PUNC">(</span><span class="NAME">rtab</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1248</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1249</span> </span><span class="WHIT">			</span><span class="NAME">c</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1250</span> </span><span class="WHIT">			</span><span class="NAME">akku</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1251</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1252</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1253</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1254</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1255</span> 
<span class='line'>1256</span> 
<span class='line'>1257</span> 
<span class='line'>1258</span> </span><span class="COMM">/**
<span class='line'>1259</span>  * Return position of certificate in PKI hierachie
<span class='line'>1260</span>  *
<span class='line'>1261</span>  * @returns Position in PKI hierachie: 0 unknown, 1-CVCA, 2-DVCA, 3-Terminal
<span class='line'>1262</span>  * @type Number
<span class='line'>1263</span>  */</span><span class="WHIT">
<span class='line'>1264</span> </span><span class="NAME">CVC.prototype.getLevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1265</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCHAT</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1266</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">chat</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1267</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1268</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1269</span> 
<span class='line'>1270</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chat.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1271</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1272</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1273</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1274</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1275</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1276</span> 
<span class='line'>1277</span> 
<span class='line'>1278</span> 
<span class='line'>1279</span> </span><span class="COMM">/**
<span class='line'>1280</span>  * Return a string describing the certificate type
<span class='line'>1281</span>  *
<span class='line'>1282</span>  * @returns a describing string
<span class='line'>1283</span>  * @type String
<span class='line'>1284</span>  */</span><span class="WHIT">
<span class='line'>1285</span> </span><span class="NAME">CVC.prototype.getType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1286</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ced</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCED</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1287</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCHAT</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1288</span> 
<span class='line'>1289</span> </span><span class="WHIT">	</span><span class="COMM">// Decode certificate / request type</span><span class="WHIT">
<span class='line'>1290</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CVC "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1291</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ced</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1292</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.asn.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CVC.TAG_AT</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1293</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"AT-CVREQ "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1294</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1295</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CVREQ "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1296</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1297</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1298</span> 
<span class='line'>1299</span> </span><span class="WHIT">	</span><span class="COMM">// Decode CA type</span><span class="WHIT">
<span class='line'>1300</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chat</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1301</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chat.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1302</span> 
<span class='line'>1303</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.idSC_HSM</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.idBW_SE</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1304</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.idSC_HSM</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1305</span> </span><span class="WHIT">				</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"id-SC-HSM "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1306</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1307</span> </span><span class="WHIT">				</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"id-BW-SE "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1308</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1309</span> </span><span class="WHIT">			</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">chat.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1310</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"SRCA "</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1311</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"DICA "</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1312</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"MICA "</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1313</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Device "</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1314</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1315</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1316</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">trustedDV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1317</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">untrustedDV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1318</span> 
<span class='line'>1319</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.idIS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1320</span> </span><span class="WHIT">				</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"id-IS "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1321</span> </span><span class="WHIT">				</span><span class="NAME">trustedDV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"(official domestic) "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1322</span> </span><span class="WHIT">				</span><span class="NAME">untrustedDV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"(official foreign) "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1323</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.idAT</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1324</span> </span><span class="WHIT">				</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"id-AT "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1325</span> </span><span class="WHIT">				</span><span class="NAME">trustedDV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"(official domestic) "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1326</span> </span><span class="WHIT">				</span><span class="NAME">untrustedDV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"(non-official / foreign) "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1327</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.equals</span><span class="PUNC">(</span><span class="NAME">CVC.idST</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1328</span> </span><span class="WHIT">				</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"id-ST "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1329</span> </span><span class="WHIT">				</span><span class="NAME">trustedDV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"(accreditation body) "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1330</span> </span><span class="WHIT">				</span><span class="NAME">untrustedDV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"(certification service provider) "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1331</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1332</span> </span><span class="WHIT">				</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">oid.toString</span><span class="PUNC">(</span><span class="NAME">OID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1333</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1334</span> 
<span class='line'>1335</span> </span><span class="WHIT">			</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">chat.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1336</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CVCA "</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1337</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"DV "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">trustedDV</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1338</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"DV "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">untrustedDV</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1339</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Terminal "</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1340</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1341</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1342</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1343</span> 
<span class='line'>1344</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1345</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1346</span> 
<span class='line'>1347</span> 
<span class='line'>1348</span> 
<span class='line'>1349</span> </span><span class="COMM">/**
<span class='line'>1350</span>  * Return a textual description of the certificate
<span class='line'>1351</span>  *
<span class='line'>1352</span>  * @returns a string containing information about the certificate
<span class='line'>1353</span>  * @type String
<span class='line'>1354</span>  */</span><span class="WHIT">
<span class='line'>1355</span> </span><span class="NAME">CVC.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1356</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1357</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ced</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCED</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1358</span> 
<span class='line'>1359</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getType</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1360</span> 
<span class='line'>1361</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1362</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CAR="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1363</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1364</span> 
<span class='line'>1365</span> </span><span class="WHIT">	</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CHR="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1366</span> 
<span class='line'>1367</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ced</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1368</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CED="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ced.toLocaleDateString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1369</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1370</span> 
<span class='line'>1371</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cxd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCXD</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1372</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cxd</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1373</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CXD="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cxd.toLocaleDateString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1374</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1375</span> 
<span class='line'>1376</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isAuthenticatedRequest</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1377</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"oCAR="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getOuterCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1378</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1379</span> 
<span class='line'>1380</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1381</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1382</span> 
<span class='line'>1383</span> 
<span class='line'>1384</span> 
<span class='line'>1385</span> </span><span class="COMM">/**
<span class='line'>1386</span>  * Return object suitable for JSON encoding
<span class='line'>1387</span>  *
<span class='line'>1388</span>  * @returns a JSON encodable object
<span class='line'>1389</span>  * @type Object
<span class='line'>1390</span>  */</span><span class="WHIT">
<span class='line'>1391</span> </span><span class="NAME">CVC.prototype.toJSON</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1392</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">clazz</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"CVC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.bin</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1393</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1394</span> 
<span class='line'>1395</span> 
<span class='line'>1396</span> 
<span class='line'>1397</span> </span><span class="COMM">/**
<span class='line'>1398</span>  * Recreate object from JSON encoding
<span class='line'>1399</span>  *
<span class='line'>1400</span>  * @returns the CVC object
<span class='line'>1401</span>  * @type Object
<span class='line'>1402</span>  */</span><span class="WHIT">
<span class='line'>1403</span> </span><span class="NAME">CVC.fromJSON</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1404</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">obj.clazz.equals</span><span class="PUNC">(</span><span class="STRN">"CVC"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"JSON object must contain clazz: CVC"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1405</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">obj.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1406</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1407</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Simple CVC-CA
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> </span><span class="COMM">// Imports</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVC'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVCertificateStore'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVCertificateStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PublicKeyReference'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/EAC2CVRequestGenerator'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">EAC2CVRequestGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">EAC2CVCertificateGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/EAC2CVCertificateGenerator'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">EAC2CVCertificateGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 34</span> 
<span class='line'> 35</span> 
<span class='line'> 36</span> 
<span class='line'> 37</span> </span><span class="COMM">/**
<span class='line'> 38</span>  * Creates a new CVC-CA instance
<span class='line'> 39</span>  *
<span class='line'> 40</span>  * @class Class supporting a certification authority that can issue CVC certificates
<span class='line'> 41</span>  * for the EAC protocol.
<span class='line'> 42</span>  *
<span class='line'> 43</span>  * @constructor
<span class='line'> 44</span>  * @param {Crypto} crypto the crypto provider to use
<span class='line'> 45</span>  * @param {CVCertificateStore} certstore the certificate store to use
<span class='line'> 46</span>  * @param {String} path the path of holderIDs (eg. "/UTCVCA/UTDVCA/UTTERM")
<span class='line'> 47</span>  */</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">CVCCA</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certstore</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">holderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parentId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"new("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">certstore</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">holderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">parentId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> 
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">	</span><span class="NAME">this.certstore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certstore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">	</span><span class="COMM">// ToDo: Remove after migration</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">		</span><span class="NAME">this.holderId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">		</span><span class="NAME">this.parentId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parentId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> 
<span class='line'> 58</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isRootCA</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// CVCA</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">			</span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">holderId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">					</span><span class="COMM">// DVCA</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">			</span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">parentId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">holderId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">		</span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pe.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT">		</span><span class="NAME">this.holderId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">			</span><span class="NAME">this.parentId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">			</span><span class="NAME">this.parentId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.holderId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">	</span><span class="NAME">this.keyspec</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="NAME">this.keyspec.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="NAME">this.taAlgorithmIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="NAME">this.countryseq</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 80</span> 
<span class='line'> 81</span> </span><span class="NAME">exports.CVCCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVCCA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> 
<span class='line'> 83</span> 
<span class='line'> 84</span> 
<span class='line'> 85</span> </span><span class="COMM">/**
<span class='line'> 86</span>  * Set factory generating EACCryptoProvider for private key operations (create, use, delete)
<span class='line'> 87</span>  *
<span class='line'> 88</span>  * @param {EACCryptoProvider} eaccp the EAC Crypto Provider for this instance
<span class='line'> 89</span>  * @param {String} eaccpid the instance id
<span class='line'> 90</span>  */</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="NAME">CVCCA.prototype.setEACCryptoProviderFactory</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">eaccpf</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eaccpid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="NAME">this.eaccpf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">eaccpf</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="NAME">this.eaccpid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">eaccpid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 95</span> 
<span class='line'> 96</span> 
<span class='line'> 97</span> 
<span class='line'> 98</span> </span><span class="COMM">/**
<span class='line'> 99</span>  * Return a suitable crypto instance
<span class='line'>100</span>  *
<span class='line'>101</span>  */</span><span class="WHIT">
<span class='line'>102</span> </span><span class="NAME">CVCCA.prototype.getCrypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCrypto()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> 
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.eaccpf</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">eaccp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.eaccpf.getEACCryptoProvider</span><span class="PUNC">(</span><span class="NAME">this.eaccpid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">eaccp.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>113</span> 
<span class='line'>114</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>115</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>116</span> 
<span class='line'>117</span> 
<span class='line'>118</span> 
<span class='line'>119</span> </span><span class="COMM">/**
<span class='line'>120</span>  * Returns true if this is a root CA
<span class='line'>121</span>  *
<span class='line'>122</span>  * @returns true if this is a root CA
<span class='line'>123</span>  * @type boolean
<span class='line'>124</span>  */</span><span class="WHIT">
<span class='line'>125</span> </span><span class="NAME">CVCCA.prototype.isRootCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"isRootCA()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> 
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.holderId</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">this.parentId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>130</span> 
<span class='line'>131</span> 
<span class='line'>132</span> 
<span class='line'>133</span> </span><span class="COMM">/**
<span class='line'>134</span>  * Returns true if this CA has a certificate.
<span class='line'>135</span>  *
<span class='line'>136</span>  * @returns true if this CA is operational
<span class='line'>137</span>  * @type boolean
<span class='line'>138</span>  */</span><span class="WHIT">
<span class='line'>139</span> </span><span class="NAME">CVCCA.prototype.hasCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"hasCertificate()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>141</span> 
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>144</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>145</span> 
<span class='line'>146</span> 
<span class='line'>147</span> 
<span class='line'>148</span> </span><span class="COMM">/**
<span class='line'>149</span>  * Returns true if this CA is operational.
<span class='line'>150</span>  *
<span class='line'>151</span>  * @returns true if this CA is operational
<span class='line'>152</span>  * @type boolean
<span class='line'>153</span>  */</span><span class="WHIT">
<span class='line'>154</span> </span><span class="NAME">CVCCA.prototype.isOperational</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"isOperational()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> 
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCertificate</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">cvc.isExpired</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>164</span> 
<span class='line'>165</span> 
<span class='line'>166</span> 
<span class='line'>167</span> </span><span class="COMM">/**
<span class='line'>168</span>  * Sets the key specification for generating requests
<span class='line'>169</span>  *
<span class='line'>170</span>  * @param {Key} keyparam a key object containing key parameters (e.g. EC Curve)
<span class='line'>171</span>  * @param {ByteString} algorithm the terminal authentication algorithm object identifier
<span class='line'>172</span>  */</span><span class="WHIT">
<span class='line'>173</span> </span><span class="NAME">CVCCA.prototype.setKeySpec</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyparam</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algorithm</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"setKeySpec("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyparam</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">algorithm</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="NAME">this.keyspec</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyparam</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="NAME">this.taAlgorithmIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">algorithm</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>179</span> 
<span class='line'>180</span> 
<span class='line'>181</span> 
<span class='line'>182</span> </span><span class="COMM">/**
<span class='line'>183</span>  * Set flags that controls the removal of the previous key if the certificate for the new key is imported
<span class='line'>184</span>  *
<span class='line'>185</span>  * @param {boolean} removePreviousKey true to remove, false to keep
<span class='line'>186</span>  */</span><span class="WHIT">
<span class='line'>187</span> </span><span class="NAME">CVCCA.prototype.setRemovePreviousKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">removePreviousKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"setRemovePreviousKey("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">removePreviousKey</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> 
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="NAME">this.removePreviousKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">removePreviousKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>192</span> 
<span class='line'>193</span> 
<span class='line'>194</span> 
<span class='line'>195</span> </span><span class="COMM">/**
<span class='line'>196</span>  * Set country code to be included in sequence number of public key reference
<span class='line'>197</span>  *
<span class='line'>198</span>  * @param {String} countryseq the two character country code
<span class='line'>199</span>  */</span><span class="WHIT">
<span class='line'>200</span> </span><span class="NAME">CVCCA.prototype.setCountryCodeForSequence</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">countryseq</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"setCountryCodeForSequence("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">countryseq</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> 
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="NAME">this.countryseq</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">countryseq</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>205</span> 
<span class='line'>206</span> 
<span class='line'>207</span> 
<span class='line'>208</span> </span><span class="COMM">/**
<span class='line'>209</span>  * Return private key handle, either from EACCryptoProvider or Certificate Store
<span class='line'>210</span>  *
<span class='line'>211</span>  */</span><span class="WHIT">
<span class='line'>212</span> </span><span class="NAME">CVCCA.prototype.getPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getPrivateKey("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> 
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.eaccpf</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">eaccp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.eaccpf.getEACCryptoProvider</span><span class="PUNC">(</span><span class="NAME">this.eaccpid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> 
<span class='line'>218</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">blob</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getSigner</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">eaccp.getPrivateKey</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> 
<span class='line'>221</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prkey</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">blob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// Have a key but no matching signer</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Signer "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found in database, but on crypto device. Creating signer now."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> 
<span class='line'>224</span> </span><span class="WHIT">			</span><span class="COMM">// Calculate current signer number</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">seq</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chr.getSequenceNo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="PUNC">(</span><span class="NAME">seq.substr</span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">			</span><span class="COMM">// Full 5 digit sequence</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">cnt</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="PUNC">(</span><span class="NAME">seq.substr</span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// 3 Digit sequence number</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>230</span> 
<span class='line'>231</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Setting signer number to "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">			</span><span class="NAME">this.certstore.setSignerNo</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">			</span><span class="NAME">this.certstore.newSigner</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prkey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.certstore.getPrivateKey</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>239</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>240</span> 
<span class='line'>241</span> 
<span class='line'>242</span> 
<span class='line'>243</span> </span><span class="COMM">/**
<span class='line'>244</span>  * Generate a certificate request
<span class='line'>245</span>  *
<span class='line'>246</span>  * @param {PublicKeyReference} car the CA at which this request is addressed
<span class='line'>247</span>  * @param {boolean} forceInitial force an initial request, even if a current certificate is available
<span class='line'>248</span>  * @param {boolean} signinitial sign with initial key (sequence = 00000)
<span class='line'>249</span>  * @return the certificate request
<span class='line'>250</span>  * @type CVC
<span class='line'>251</span>  */</span><span class="WHIT">
<span class='line'>252</span> </span><span class="NAME">CVCCA.prototype.generateRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"generateRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>254</span> 
<span class='line'>255</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.certstore.sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.generateRequestHSM</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>258</span> 
<span class='line'>259</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.eaccpf</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">eaccp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.eaccpf.getEACCryptoProvider</span><span class="PUNC">(</span><span class="NAME">this.eaccpid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">eaccp.generateRequest</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.generateRequestHSMCP</span><span class="PUNC">(</span><span class="NAME">eaccp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>265</span> 
<span class='line'>266</span> </span><span class="WHIT">	</span><span class="COMM">// Obtain key parameter</span><span class="WHIT">
<span class='line'>267</span> 
<span class='line'>268</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.keyspec.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.keyspec</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">		</span><span class="NAME">prk.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyalg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.EC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">		</span><span class="NAME">prk.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyalg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.keyspec</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">	</span><span class="NAME">puk.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> 
<span class='line'>280</span> </span><span class="WHIT">	</span><span class="COMM">// Determine CHR</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getNextCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.countryseq</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> 
<span class='line'>284</span> </span><span class="WHIT">	</span><span class="COMM">// Generate key pair</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.eaccpf</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">eaccp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.eaccpf.getEACCryptoProvider</span><span class="PUNC">(</span><span class="NAME">this.eaccpid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">		</span><span class="NAME">eaccp.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyalg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">		</span><span class="NAME">this.certstore.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyalg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>291</span> 
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="COMM">// Generate certificate request</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reqGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator</span><span class="PUNC">(</span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>294</span> 
<span class='line'>295</span> </span><span class="WHIT">	</span><span class="COMM">// Set CPI</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">	</span><span class="NAME">reqGenerator.setProfileIdentifier</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>297</span> 
<span class='line'>298</span> </span><span class="WHIT">	</span><span class="COMM">// Set public key for request</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">	</span><span class="NAME">reqGenerator.setPublicKey</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> 
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="COMM">// Set oid of algorithm</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">	</span><span class="NAME">reqGenerator.setTAAlgorithmIdentifier</span><span class="PUNC">(</span><span class="NAME">this.taAlgorithmIdentifier</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>303</span> 
<span class='line'>304</span> </span><span class="WHIT">	</span><span class="COMM">// Set CHR for the request</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="NAME">reqGenerator.setCHR</span><span class="PUNC">(</span><span class="NAME">nextchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> 
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">		</span><span class="NAME">reqGenerator.setCAR</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>310</span> 
<span class='line'>311</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">forceinitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">previousprk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPrivateKey</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">previouscvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCertificate</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">reqGenerator.generateAuthenticatedCVRequest</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">previousprk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">previouscvc.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">		</span><span class="COMM">// Generate the request</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signinitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">initialchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">nextchr.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"00000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">firstprk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPrivateKey</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">initialchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>320</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">reqGenerator.generateAuthenticatedCVRequest</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">firstprk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">initialchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>321</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">reqGenerator.generateCVRequest</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>325</span> 
<span class='line'>326</span> </span><span class="WHIT">	</span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>327</span> 
<span class='line'>328</span> </span><span class="WHIT">	</span><span class="NAME">this.certstore.storeRequest</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> 
<span class='line'>330</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>332</span> 
<span class='line'>333</span> 
<span class='line'>334</span> 
<span class='line'>335</span> </span><span class="COMM">/**
<span class='line'>336</span>  * Generate a certificate request using a SmartCard-HSM based private key
<span class='line'>337</span>  *
<span class='line'>338</span>  * @param {PublicKeyReference} car the CA at which this request is addressed
<span class='line'>339</span>  * @param {boolean} forceInitial force an initial request, even if a current certificate is available
<span class='line'>340</span>  * @param {boolean} signinitial sign with initial key (sequence = 00000)
<span class='line'>341</span>  * @return the certificate request
<span class='line'>342</span>  * @type CVC
<span class='line'>343</span>  */</span><span class="WHIT">
<span class='line'>344</span> </span><span class="NAME">CVCCA.prototype.generateRequestHSM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"generateRequestHSM("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> 
<span class='line'>347</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.generateRequest</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.keyspec</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.taAlgorithmIdentifier</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.countryseq</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT">	</span><span class="NAME">this.certstore.storeRequest</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>349</span> 
<span class='line'>350</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>352</span> 
<span class='line'>353</span> 
<span class='line'>354</span> 
<span class='line'>355</span> </span><span class="COMM">/**
<span class='line'>356</span>  * Generate a certificate request using a SmartCard-HSM based private key via EACCryptoProvider
<span class='line'>357</span>  *
<span class='line'>358</span>  * @param {EACCryptoProvider} prov the EACCryptoProvider
<span class='line'>359</span>  * @param {PublicKeyReference} car the CA at which this request is addressed
<span class='line'>360</span>  * @param {boolean} forceInitial force an initial request, even if a current certificate is available
<span class='line'>361</span>  * @param {boolean} signinitial sign with initial key (sequence = 00000)
<span class='line'>362</span>  * @return the certificate request
<span class='line'>363</span>  * @type CVC
<span class='line'>364</span>  */</span><span class="WHIT">
<span class='line'>365</span> </span><span class="NAME">CVCCA.prototype.generateRequestHSMCP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">prov</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"generateRequestHSM("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>367</span> 
<span class='line'>368</span> </span><span class="WHIT">	</span><span class="COMM">// Determine CHR</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">	</span><span class="KEYW">do</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getNextCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.countryseq</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>372</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPrivateKey</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">prk</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"CHR "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" already in use, skipping to next CHR"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>378</span> 
<span class='line'>379</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prov.generateRequest</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.keyspec</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.taAlgorithmIdentifier</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>380</span> </span><span class="WHIT">	</span><span class="NAME">this.certstore.storeRequest</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">	</span><span class="NAME">this.certstore.newSigner</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> 
<span class='line'>383</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>384</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>385</span> 
<span class='line'>386</span> 
<span class='line'>387</span> 
<span class='line'>388</span> </span><span class="COMM">/**
<span class='line'>389</span>  * Counter-sign a request
<span class='line'>390</span>  *
<span class='line'>391</span>  * @param {CVC} req the initial request
<span class='line'>392</span>  * @return the certificate request
<span class='line'>393</span>  * @type CVC
<span class='line'>394</span>  */</span><span class="WHIT">
<span class='line'>395</span> </span><span class="NAME">CVCCA.prototype.counterSignRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">request</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"counterSignRequest('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"')"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>397</span> 
<span class='line'>398</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">request.isAuthenticatedRequest</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>399</span> 
<span class='line'>400</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>402</span> 
<span class='line'>403</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cacvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCertificate</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>404</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">cacvc</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> 
<span class='line'>406</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signingTAAlgorithmIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cacvc.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>407</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPrivateKey</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>408</span> 
<span class='line'>409</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.signAuthenticatedCVRequest</span><span class="PUNC">(</span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">request.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signingTAAlgorithmIdentifier</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>411</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>412</span> 
<span class='line'>413</span> 
<span class='line'>414</span> 
<span class='line'>415</span> </span><span class="COMM">/**
<span class='line'>416</span>  * Generate an initial certificate request
<span class='line'>417</span>  *
<span class='line'>418</span>  * @param {PublicKeyReference} car the CA at which this request is addressed
<span class='line'>419</span>  * @return the certificate request
<span class='line'>420</span>  * @type CVC
<span class='line'>421</span>  */</span><span class="WHIT">
<span class='line'>422</span> </span><span class="NAME">CVCCA.prototype.generateInitialRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"generateInitialRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>424</span> 
<span class='line'>425</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.generateRequest</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>426</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>427</span> 
<span class='line'>428</span> 
<span class='line'>429</span> 
<span class='line'>430</span> </span><span class="COMM">/**
<span class='line'>431</span>  * Generate a signed initial certificate request
<span class='line'>432</span>  *
<span class='line'>433</span>  * @param {PublicKeyReference} car the CA at which this request is addressed
<span class='line'>434</span>  * @return the certificate request
<span class='line'>435</span>  * @type CVC
<span class='line'>436</span>  */</span><span class="WHIT">
<span class='line'>437</span> </span><span class="NAME">CVCCA.prototype.generateSignedInitialRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>438</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"generateSignedInitialRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>439</span> 
<span class='line'>440</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.generateRequest</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>441</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>442</span> 
<span class='line'>443</span> 
<span class='line'>444</span> 
<span class='line'>445</span> </span><span class="COMM">/**
<span class='line'>446</span>  * Generate certificate for certificate request
<span class='line'>447</span>  *
<span class='line'>448</span>  * &lt;p>Certificate contents is defined through the policy object:&lt;/p>
<span class='line'>449</span>  * &lt;pre>
<span class='line'>450</span>  *  	var policy = { certificateValidityDays: 2,
<span class='line'>451</span>  * 				   chatRoleOID: new ByteString("id-IS", OID),
<span class='line'>452</span>  * 				   chatRights: new ByteString("E3", HEX),
<span class='line'>453</span>  * 				   includeDomainParameter: true,
<span class='line'>454</span>  * 				   extensions: []
<span class='line'>455</span>  * 				 };
<span class='line'>456</span>  * &lt;/pre>
<span class='line'>457</span>  *
<span class='line'>458</span>  * @param {CVC} req the certificate request
<span class='line'>459</span>  * @param {Object} policy the object with policy settings
<span class='line'>460</span>  * @returns the certificate
<span class='line'>461</span>  * @type CVC
<span class='line'>462</span>  */</span><span class="WHIT">
<span class='line'>463</span> </span><span class="NAME">CVCCA.prototype.generateCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>464</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"generateCertificate('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"'"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span> 
<span class='line'>466</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>467</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">maxExpDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>468</span> 
<span class='line'>469</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">				</span><span class="COMM">// No CA certificate found</span><span class="WHIT">
<span class='line'>470</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isRootCA</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>471</span> </span><span class="WHIT">			</span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Generate a self-signed root certificate</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>473</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVCCA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No current certificate found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>474</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>475</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">policy.publicKeyOID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>476</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signingTAAlgorithmIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">policy.publicKeyOID</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>477</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>478</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signingTAAlgorithmIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>479</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>480</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cacvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCertificate</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signingTAAlgorithmIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cacvc.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>483</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">policy.shellModelForExpirationDate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>484</span> </span><span class="WHIT">			</span><span class="NAME">maxExpDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cacvc.getCXD</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>485</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>486</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>487</span> 
<span class='line'>488</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">generator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">EAC2CVCertificateGenerator</span><span class="PUNC">(</span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>489</span> </span><span class="WHIT">	</span><span class="NAME">generator.setCAR</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>490</span> </span><span class="WHIT">	</span><span class="NAME">generator.setCHR</span><span class="PUNC">(</span><span class="NAME">req.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>491</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">effDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>492</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">policy.ced</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>493</span> </span><span class="WHIT">		</span><span class="NAME">effDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">policy.ced</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>494</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>495</span> </span><span class="WHIT">	</span><span class="NAME">effDate.setHours</span><span class="PUNC">(</span><span class="NUMB">12</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>496</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">expDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">policy.certificateValidityDays</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">1000</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">60</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">60</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">effDate.getTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>497</span> </span><span class="WHIT">	</span><span class="NAME">expDate.setHours</span><span class="PUNC">(</span><span class="NUMB">12</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>498</span> 
<span class='line'>499</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">maxExpDate</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>500</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">effDate.getTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">maxExpDate.getTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVCCA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"CA certificate is expired"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">		</span><span class="COMM">// Expiration date of issued certificate must not exceed expiration date of issuing CA</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">expDate.getTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">maxExpDate.getTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">			</span><span class="NAME">expDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maxExpDate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>507</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>508</span> 
<span class='line'>509</span> </span><span class="WHIT">	</span><span class="NAME">generator.setEffectiveDate</span><span class="PUNC">(</span><span class="NAME">effDate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>510</span> </span><span class="WHIT">	</span><span class="NAME">generator.setExpiryDate</span><span class="PUNC">(</span><span class="NAME">expDate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>511</span> </span><span class="WHIT">	</span><span class="NAME">generator.setChatOID</span><span class="PUNC">(</span><span class="NAME">policy.chatRoleOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>512</span> </span><span class="WHIT">	</span><span class="NAME">generator.setChatAuthorizationLevel</span><span class="PUNC">(</span><span class="NAME">policy.chatRights</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>513</span> </span><span class="WHIT">	</span><span class="NAME">generator.setPublicKey</span><span class="PUNC">(</span><span class="NAME">req.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>514</span> </span><span class="WHIT">	</span><span class="NAME">generator.setProfileIdentifier</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">policy.publicKeyOID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>516</span> </span><span class="WHIT">		</span><span class="NAME">generator.setTAAlgorithmIdentifier</span><span class="PUNC">(</span><span class="NAME">policy.publicKeyOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>517</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>518</span> </span><span class="WHIT">		</span><span class="NAME">generator.setTAAlgorithmIdentifier</span><span class="PUNC">(</span><span class="NAME">req.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>519</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>520</span> 
<span class='line'>521</span> </span><span class="WHIT">	</span><span class="NAME">generator.setIncludeDomainParameters</span><span class="PUNC">(</span><span class="NAME">policy.includeDomainParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span> </span><span class="WHIT">	</span><span class="NAME">generator.setExtensions</span><span class="PUNC">(</span><span class="NAME">policy.extensions</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>523</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPrivateKey</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">generator.generateCVCertificate</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signingTAAlgorithmIdentifier</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>525</span> 
<span class='line'>526</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>527</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>528</span> 
<span class='line'>529</span> 
<span class='line'>530</span> 
<span class='line'>531</span> </span><span class="COMM">/**
<span class='line'>532</span>  * Store issued certificate
<span class='line'>533</span>  *
<span class='line'>534</span>  * @param {CVC} cert a newly issued certificate
<span class='line'>535</span>  */</span><span class="WHIT">
<span class='line'>536</span> </span><span class="NAME">CVCCA.prototype.storeCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>537</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"storeCertificate('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"')"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>538</span> 
<span class='line'>539</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chrHolder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>540</span> </span><span class="WHIT">	</span><span class="NAME">this.certstore.storeCertificate</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chrHolder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>541</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>542</span> 
<span class='line'>543</span> 
<span class='line'>544</span> 
<span class='line'>545</span> </span><span class="COMM">/**
<span class='line'>546</span>  * Remove previous key
<span class='line'>547</span>  *
<span class='line'>548</span>  * @param {PublicKeyReference} previous the previously used CHR
<span class='line'>549</span>  */</span><span class="WHIT">
<span class='line'>550</span> </span><span class="NAME">CVCCA.prototype.removePreviouslyUsedKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">previous</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>551</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"removePreviouslyUsedKey('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">previous</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"')"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>552</span> 
<span class='line'>553</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">previous.equals</span><span class="PUNC">(</span><span class="NAME">this.certstore.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>554</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"CHR "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">previous</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" is still the active key. Not deleting it"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>555</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>556</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>557</span> 
<span class='line'>558</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.eaccpf</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>559</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">eaccp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.eaccpf.getEACCryptoProvider</span><span class="PUNC">(</span><span class="NAME">this.eaccpid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>560</span> </span><span class="WHIT">		</span><span class="NAME">eaccp.deletePrivateKey</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">previous</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>562</span> </span><span class="WHIT">		</span><span class="NAME">this.certstore.deletePrivateKey</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">previous</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>563</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>564</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>565</span> 
<span class='line'>566</span> 
<span class='line'>567</span> 
<span class='line'>568</span> </span><span class="COMM">/**
<span class='line'>569</span>  * Import a certificate into the certificate store and make it the current certificate
<span class='line'>570</span>  *
<span class='line'>571</span>  * @param {CVC} cert the certificate
<span class='line'>572</span>  */</span><span class="WHIT">
<span class='line'>573</span> </span><span class="NAME">CVCCA.prototype.importCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>574</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"importCertificate('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"')"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>575</span> 
<span class='line'>576</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>577</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPrivateKey</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>578</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>579</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVCCA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid certificate, no matching private key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>580</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>581</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCertificate</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>582</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>583</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" already existing"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>584</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>585</span> 
<span class='line'>586</span> </span><span class="WHIT">	</span><span class="COMM">// Save currentchr</span><span class="WHIT">
<span class='line'>587</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>588</span> 
<span class='line'>589</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isRootCA</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.isOperational</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>590</span> </span><span class="WHIT">		</span><span class="NAME">this.certstore.storeCertificate</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>591</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>592</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.certstore.insertCertificate</span><span class="PUNC">(</span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>593</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CVCCA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not validate certificate"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>594</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>595</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>596</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.removePreviousKey</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>597</span> </span><span class="WHIT">		</span><span class="NAME">this.removePreviouslyUsedKey</span><span class="PUNC">(</span><span class="NAME">currentchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>598</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>599</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>600</span> 
<span class='line'>601</span> 
<span class='line'>602</span> 
<span class='line'>603</span> </span><span class="COMM">/**
<span class='line'>604</span>  * Import a list of certificates into the certificate store
<span class='line'>605</span>  *
<span class='line'>606</span>  * @param {CVC[]} certs the list of certificates
<span class='line'>607</span>  */</span><span class="WHIT">
<span class='line'>608</span> </span><span class="NAME">CVCCA.prototype.importCertificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">certs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>609</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"importCertificates('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">certs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"')"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>610</span> 
<span class='line'>611</span> </span><span class="WHIT">	</span><span class="COMM">// Save currentchr</span><span class="WHIT">
<span class='line'>612</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>613</span> 
<span class='line'>614</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.insertCertificates</span><span class="PUNC">(</span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>615</span> 
<span class='line'>616</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.removePreviousKey</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>617</span> </span><span class="WHIT">		</span><span class="NAME">this.removePreviouslyUsedKey</span><span class="PUNC">(</span><span class="NAME">currentchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>618</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>619</span> 
<span class='line'>620</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>621</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>622</span> 
<span class='line'>623</span> 
<span class='line'>624</span> 
<span class='line'>625</span> </span><span class="COMM">/**
<span class='line'>626</span>  * Returns a list of relevant certificates.
<span class='line'>627</span>  *
<span class='line'>628</span>  * &lt;p>If the CA is the root CA, then all self-signed and link certificates are returned.&lt;/p>
<span class='line'>629</span>  * &lt;p>If the CA is a DVCA, then all certificates of the associated root and the current
<span class='line'>630</span>  *    DVCA certificate is returned.&lt;/p>
<span class='line'>631</span>  *
<span class='line'>632</span>  * @param {PublicKeyReference} fromCAR the optional starting point for the list if not a root CA
<span class='line'>633</span>  */</span><span class="WHIT">
<span class='line'>634</span> </span><span class="NAME">CVCCA.prototype.getCertificateList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fromCAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>635</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCertificateList("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">fromCAR</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>636</span> 
<span class='line'>637</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>638</span> 
<span class='line'>639</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isRootCA</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>640</span> </span><span class="WHIT">		</span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.listCertificates</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>641</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>642</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>643</span> 
<span class='line'>644</span> </span><span class="WHIT">		</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>645</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>646</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>647</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.lastIndexOf</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>648</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>649</span> </span><span class="WHIT">					</span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>650</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>651</span> </span><span class="WHIT">					</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>652</span> </span><span class="WHIT">					</span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>653</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>654</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>655</span> </span><span class="WHIT">				</span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCertificateChain</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fromCAR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>656</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>657</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>658</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>659</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>660</span> 
<span class='line'>661</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>662</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>663</span> 
<span class='line'>664</span> 
<span class='line'>665</span> 
<span class='line'>666</span> </span><span class="COMM">/**
<span class='line'>667</span>  * Return certificate issued by this CA
<span class='line'>668</span>  *
<span class='line'>669</span>  * @param {PublicKeyReference} chr the certificate holder reference
<span class='line'>670</span>  * @returns the certificate or null if not found
<span class='line'>671</span>  * @type CVC
<span class='line'>672</span>  */</span><span class="WHIT">
<span class='line'>673</span> </span><span class="NAME">CVCCA.prototype.getIssuedCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>674</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getIssuedCertificate("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>675</span> 
<span class='line'>676</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>677</span> 
<span class='line'>678</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCertificate</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>679</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>680</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"No certificate found for "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>681</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>682</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>683</span> 
<span class='line'>684</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>685</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>686</span> 
<span class='line'>687</span> 
<span class='line'>688</span> 
<span class='line'>689</span> </span><span class="COMM">/**
<span class='line'>690</span>  * Return authentic public key with domain parameter for a given CHR subordinate to the CA
<span class='line'>691</span>  *
<span class='line'>692</span>  * @param {PublicKeyReference} chr the certificate holder reference
<span class='line'>693</span>  * @returns the public key or null
<span class='line'>694</span>  * @type Key
<span class='line'>695</span>  */</span><span class="WHIT">
<span class='line'>696</span> </span><span class="NAME">CVCCA.prototype.getAuthenticPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>697</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getAuthenticPublicKey("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>698</span> 
<span class='line'>699</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getIssuedCertificate</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>700</span> 
<span class='line'>701</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>702</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>703</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>704</span> 
<span class='line'>705</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isRootCA</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>706</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getDomainParameter</span><span class="PUNC">(</span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>707</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>708</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dvcacvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getCertificate</span><span class="PUNC">(</span><span class="NAME">this.path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>709</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dvcacvc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>710</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"No certificate found for "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>711</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>712</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>713</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.certstore.getDomainParameter</span><span class="PUNC">(</span><span class="NAME">dvcacvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>714</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>715</span> 
<span class='line'>716</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="PUNC">(</span><span class="NAME">cvc.getPublicKey</span><span class="PUNC">(</span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>717</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>718</span> 
<span class='line'>719</span> 
<span class='line'>720</span> 
<span class='line'>721</span> </span><span class="NAME">CVCCA.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">daofcvca</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">daofdvca</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">daofterm</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>722</span> 
<span class='line'>723</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>724</span> 
<span class='line'>725</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore</span><span class="PUNC">(</span><span class="NAME">daofcvca</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>726</span> </span><span class="WHIT">	</span><span class="NAME">ss.setContextMarker</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>727</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVCCA</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"/UTCVCA"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>728</span> 
<span class='line'>729</span> </span><span class="WHIT">	</span><span class="COMM">// Create a new request</span><span class="WHIT">
<span class='line'>730</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.generateRequest</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>731</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Request: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>732</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">req.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>733</span> 
<span class='line'>734</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">req.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>735</span> 
<span class='line'>736</span> </span><span class="WHIT">	</span><span class="COMM">// Create self-signed or link certificate based on request</span><span class="WHIT">
<span class='line'>737</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">certificateValidityDays</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>738</span> </span><span class="WHIT">				   </span><span class="NAME">chatRoleOID</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-IS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>739</span> </span><span class="WHIT">				   </span><span class="NAME">chatRights</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"E3"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>740</span> </span><span class="WHIT">				   </span><span class="NAME">includeDomainParameter</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>741</span> </span><span class="WHIT">				   </span><span class="NAME">extensions</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>742</span> </span><span class="WHIT">				 </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>743</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.generateCertificate</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>744</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Certificate: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>745</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">cert.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>746</span> 
<span class='line'>747</span> </span><span class="WHIT">	</span><span class="COMM">// Import certificate into store, making it the most current certificate</span><span class="WHIT">
<span class='line'>748</span> </span><span class="WHIT">	</span><span class="NAME">cvca.importCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>749</span> 
<span class='line'>750</span> </span><span class="WHIT">	</span><span class="COMM">// Generate additional self-signed root certificate</span><span class="WHIT">
<span class='line'>751</span> </span><span class="WHIT">	</span><span class="COMM">// This must be done after the link certificate has been imported</span><span class="WHIT">
<span class='line'>752</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">certificateValidityDays</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>753</span> </span><span class="WHIT">				   </span><span class="NAME">chatRoleOID</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-IS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>754</span> </span><span class="WHIT">				   </span><span class="NAME">chatRights</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"E3"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>755</span> </span><span class="WHIT">				   </span><span class="NAME">includeDomainParameter</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>756</span> </span><span class="WHIT">				   </span><span class="NAME">extensions</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>757</span> </span><span class="WHIT">				 </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>758</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.generateCertificate</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>759</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Certificate: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>760</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">cert.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>761</span> 
<span class='line'>762</span> </span><span class="WHIT">	</span><span class="COMM">// Import certificate into store, making it the most current certificate</span><span class="WHIT">
<span class='line'>763</span> </span><span class="WHIT">	</span><span class="NAME">cvca.importCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>764</span> 
<span class='line'>765</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore</span><span class="PUNC">(</span><span class="NAME">daofdvca</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>766</span> </span><span class="WHIT">	</span><span class="NAME">ss.setContextMarker</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>767</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dvca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVCCA</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"/UTCVCA/UTDVCA"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>768</span> 
<span class='line'>769</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.getCertificateList</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>770</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dvca.importCertificates</span><span class="PUNC">(</span><span class="NAME">certlist</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>771</span> 
<span class='line'>772</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">list.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>773</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Warning: Could not import the following certificates"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>774</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">list.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>775</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>776</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>777</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>778</span> 
<span class='line'>779</span> </span><span class="WHIT">	</span><span class="COMM">// Create a new request</span><span class="WHIT">
<span class='line'>780</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dvca.generateRequest</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>781</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Request: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>782</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">req.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>783</span> 
<span class='line'>784</span> </span><span class="WHIT">	</span><span class="COMM">// Sign this request with root CA</span><span class="WHIT">
<span class='line'>785</span> </span><span class="WHIT">	</span><span class="COMM">// This must be done after the link certificate has been imported</span><span class="WHIT">
<span class='line'>786</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">certificateValidityDays</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>787</span> </span><span class="WHIT">				   </span><span class="NAME">chatRoleOID</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-IS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>788</span> </span><span class="WHIT">				   </span><span class="NAME">chatRights</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"A3"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>789</span> </span><span class="WHIT">				   </span><span class="NAME">includeDomainParameter</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>790</span> </span><span class="WHIT">				   </span><span class="NAME">extensions</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>791</span> </span><span class="WHIT">				 </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>792</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.generateCertificate</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>793</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Certificate: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>794</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">cert.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>795</span> 
<span class='line'>796</span> </span><span class="WHIT">	</span><span class="NAME">cvca.storeCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>797</span> </span><span class="WHIT">	</span><span class="NAME">dvca.importCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>798</span> 
<span class='line'>799</span> 
<span class='line'>800</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore</span><span class="PUNC">(</span><span class="NAME">daofterm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>801</span> </span><span class="WHIT">	</span><span class="NAME">ss.setContextMarker</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>802</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">term</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVCCA</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"/UTCVCA/UTDVCA/UTTERM"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>803</span> 
<span class='line'>804</span> </span><span class="WHIT">	</span><span class="NAME">term.setRemovePreviousKey</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>805</span> 
<span class='line'>806</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dvca.getCertificateList</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>807</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Certificate list: "</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>808</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">certlist</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>809</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">term.importCertificates</span><span class="PUNC">(</span><span class="NAME">certlist</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>810</span> 
<span class='line'>811</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">list.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>812</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Warning: Could not import the following certificates"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>813</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">list.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>814</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>815</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>816</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>817</span> 
<span class='line'>818</span> </span><span class="WHIT">	</span><span class="COMM">// Create a new request</span><span class="WHIT">
<span class='line'>819</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">term.generateRequest</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>820</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Request: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>821</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">req.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>822</span> 
<span class='line'>823</span> </span><span class="WHIT">	</span><span class="COMM">// Sign this request with DVCA</span><span class="WHIT">
<span class='line'>824</span> </span><span class="WHIT">	</span><span class="COMM">// This must be done after the link certificate has been imported</span><span class="WHIT">
<span class='line'>825</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">certificateValidityDays</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>826</span> </span><span class="WHIT">				   </span><span class="NAME">chatRoleOID</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-IS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>827</span> </span><span class="WHIT">				   </span><span class="NAME">chatRights</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"23"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>828</span> </span><span class="WHIT">				   </span><span class="NAME">includeDomainParameter</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>829</span> </span><span class="WHIT">				   </span><span class="NAME">extensions</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>830</span> </span><span class="WHIT">				 </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>831</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dvca.generateCertificate</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>832</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Certificate: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>833</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">cert.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>834</span> 
<span class='line'>835</span> </span><span class="WHIT">	</span><span class="NAME">dvca.storeCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>836</span> </span><span class="WHIT">	</span><span class="NAME">term.importCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>837</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>838</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Support for a card verifiable certificates store according to EAC 1.1/2.0 using Data Access Objects
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="COMM">// Imports</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVC'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PublicKeyReference'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pki-db/Certificate'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">Certificate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pki-db/Holder'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">Holder</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKCS8</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pkcs/PKCS8'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKCS8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 33</span> 
<span class='line'> 34</span> 
<span class='line'> 35</span> 
<span class='line'> 36</span> </span><span class="COMM">/**
<span class='line'> 37</span>  * Create an object to access a certificate store.
<span class='line'> 38</span>  *
<span class='line'> 39</span>  * @class Class that abstracts a certificate and key store for a EAC PKI.
<span class='line'> 40</span>  *
<span class='line'> 41</span>  * @constructor
<span class='line'> 42</span>  * @param {DAOFactory} DAOFactory the factory that can create data access objects for persistent information
<span class='line'> 43</span>  */</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Parameter doaf can't be empty"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> 
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">DAOFactoryFileSystem</span><span class="WHIT">    </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pki-db/DAOFactoryFileSystem'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">DAOFactoryFileSystem</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">		</span><span class="NAME">daof</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DAOFactoryFileSystem</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 51</span> 
<span class='line'> 52</span> </span><span class="WHIT">	</span><span class="NAME">this.daof</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">daof</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">	</span><span class="NAME">this.certtype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Holder.CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 55</span> 
<span class='line'> 56</span> </span><span class="NAME">exports.CVCertificateStore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> 
<span class='line'> 58</span> 
<span class='line'> 59</span> 
<span class='line'> 60</span> </span><span class="COMM">/**
<span class='line'> 61</span>  * Check path
<span class='line'> 62</span>  *
<span class='line'> 63</span>  * This method validates the path for semantic errors and should be called for input
<span class='line'> 64</span>  * validation before using the path in the certificate store API.
<span class='line'> 65</span>  *
<span class='line'> 66</span>  * @param {String} path the path to validate
<span class='line'> 67</span>  */</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="NAME">CVCertificateStore.checkPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">path.indexOf</span><span class="PUNC">(</span><span class="STRN">"/.."</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">path.indexOf</span><span class="PUNC">(</span><span class="STRN">"../"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">path.indexOf</span><span class="PUNC">(</span><span class="STRN">"\\.."</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">path.indexOf</span><span class="PUNC">(</span><span class="STRN">"..\\"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">path.indexOf</span><span class="PUNC">(</span><span class="STRN">"\0"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">path.indexOf</span><span class="PUNC">(</span><span class="STRN">"~"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Path \""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\" contains illegal characters"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 77</span> 
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.split</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">pa.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pa.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Path must not contain less than one or more that three elements"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pa</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Path must start with /"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">pa.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">pa</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pa</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">11</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Path element length must be between 3 and 11"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 91</span> 
<span class='line'> 92</span> 
<span class='line'> 93</span> 
<span class='line'> 94</span> </span><span class="COMM">/**
<span class='line'> 95</span>  * Strip the last element of the path, effectively defining the parent within the path
<span class='line'> 96</span>  *
<span class='line'> 97</span>  * @param {String} path the path to strip the last element from
<span class='line'> 98</span>  * @returns the parent path or null for the root
<span class='line'> 99</span>  * @type String
<span class='line'>100</span>  */</span><span class="WHIT">
<span class='line'>101</span> </span><span class="NAME">CVCertificateStore.parentPathOf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.lastIndexOf</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>108</span> 
<span class='line'>109</span> 
<span class='line'>110</span> 
<span class='line'>111</span> </span><span class="COMM">/**
<span class='line'>112</span>  * Return the n-element of the path
<span class='line'>113</span>  *
<span class='line'>114</span>  * @param {String} path the path to return the last element from
<span class='line'>115</span>  * @returns the last path element or null for the root
<span class='line'>116</span>  * @type String
<span class='line'>117</span>  */</span><span class="WHIT">
<span class='line'>118</span> </span><span class="NAME">CVCertificateStore.nthElementOf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">n</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NAME">pe.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NAME">n</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>125</span> 
<span class='line'>126</span> 
<span class='line'>127</span> 
<span class='line'>128</span> </span><span class="COMM">/**
<span class='line'>129</span>  * Set a context marker that goes into the certificate type
<span class='line'>130</span>  *
<span class='line'>131</span>  * The context marker allows to have different certificate stores with different
<span class='line'>132</span>  * namespaces in the same database. The default context marker is 0.
<span class='line'>133</span>  *
<span class='line'>134</span>  * The context marker is stored with the Holder table.
<span class='line'>135</span>  *
<span class='line'>136</span>  * @param {Number} contextMarker the marker
<span class='line'>137</span>  */</span><span class="WHIT">
<span class='line'>138</span> </span><span class="NAME">CVCertificateStore.prototype.setContextMarker</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">contextMarker</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="NAME">this.certtype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">contextMarker</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">Holder.CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>141</span> 
<span class='line'>142</span> 
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="COMM">/**
<span class='line'>145</span>  * Return a suitable crypto object. This may be overwritten by derived classes
<span class='line'>146</span>  *
<span class='line'>147</span>  * @type Crypto
<span class='line'>148</span>  * @return the Crypto object
<span class='line'>149</span>  */</span><span class="WHIT">
<span class='line'>150</span> </span><span class="NAME">CVCertificateStore.prototype.getCrypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">		</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>156</span> 
<span class='line'>157</span> 
<span class='line'>158</span> 
<span class='line'>159</span> </span><span class="COMM">/**
<span class='line'>160</span>  * Check if holder exists for path
<span class='line'>161</span>  *
<span class='line'>162</span>  * @param {String} path
<span class='line'>163</span>  * @type Holder
<span class='line'>164</span>  * @return true if holder exists
<span class='line'>165</span>  * @private
<span class='line'>166</span>  */</span><span class="WHIT">
<span class='line'>167</span> </span><span class="NAME">CVCertificateStore.prototype.hasHolder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> 
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> 
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="COMM">/**
<span class='line'>177</span>  * List certificate holders for a given PKI element
<span class='line'>178</span>  *
<span class='line'>179</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
<span class='line'>180</span>  * @returns a list of holder ids, possibly empty
<span class='line'>181</span>  * @type String[]
<span class='line'>182</span>  */</span><span class="WHIT">
<span class='line'>183</span> </span><span class="NAME">CVCertificateStore.prototype.listHolders</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"listHolders("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> 
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> 
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolderList</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>191</span> 
<span class='line'>192</span> 
<span class='line'>193</span> 
<span class='line'>194</span> </span><span class="COMM">/**
<span class='line'>195</span>  * Get existing holder object for given path
<span class='line'>196</span>  *
<span class='line'>197</span>  * @param {String} path
<span class='line'>198</span>  * @param {Boolean} create create if holder doesn't exist
<span class='line'>199</span>  * @type Holder
<span class='line'>200</span>  * @return the holder object
<span class='line'>201</span>  * @private
<span class='line'>202</span>  */</span><span class="WHIT">
<span class='line'>203</span> </span><span class="NAME">CVCertificateStore.prototype.getHolder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">create</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> 
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> 
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">create</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not locate holder for "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder not found, creating new."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">		</span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.newHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>215</span> 
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>218</span> 
<span class='line'>219</span> 
<span class='line'>220</span> 
<span class='line'>221</span> </span><span class="COMM">/**
<span class='line'>222</span>  * Return the current CHR for which a valid certificate exists
<span class='line'>223</span>  *
<span class='line'>224</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
<span class='line'>225</span>  * @returns the current CHR for which a certificate exists or null if none exists
<span class='line'>226</span>  * @type PublicKeyReference
<span class='line'>227</span>  */</span><span class="WHIT">
<span class='line'>228</span> </span><span class="NAME">CVCertificateStore.prototype.getCurrentCHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCurrentCHR("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> 
<span class='line'>231</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> 
<span class='line'>233</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> 
<span class='line'>235</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>239</span> 
<span class='line'>240</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> 
<span class='line'>242</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.getCurrentCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCurrentCHR("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">") : No current certificate"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>247</span> 
<span class='line'>248</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">certificate.bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCurrentCHR("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">") : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>253</span> 
<span class='line'>254</span> 
<span class='line'>255</span> 
<span class='line'>256</span> </span><span class="COMM">/**
<span class='line'>257</span>  * Return the next CHR
<span class='line'>258</span>  *
<span class='line'>259</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
<span class='line'>260</span>  * @param {String} countryseq the 2 digit country code to include in the sequence number (optional)
<span class='line'>261</span>  * @returns the next CHR based on the sequence counter maintained in the configuration file
<span class='line'>262</span>  * @type PublicKeyReference
<span class='line'>263</span>  */</span><span class="WHIT">
<span class='line'>264</span> </span><span class="NAME">CVCertificateStore.prototype.getNextCHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">countryseq</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getNextCHR("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">countryseq</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> 
<span class='line'>267</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> 
<span class='line'>269</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> 
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder not found, creating new."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">		</span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.newHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>275</span> 
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="NAME">holderdao.updateSignerNo</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">holder.signerNo</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> 
<span class='line'>278</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getCHRForSequenceNumber</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">holder.signerNo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">countryseq</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>280</span> 
<span class='line'>281</span> 
<span class='line'>282</span> 
<span class='line'>283</span> </span><span class="COMM">/**
<span class='line'>284</span>  * Set the new signer number, if it is larger than the current
<span class='line'>285</span>  *
<span class='line'>286</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
<span class='line'>287</span>  * @param {Number} signerNo the new signer number
<span class='line'>288</span>  */</span><span class="WHIT">
<span class='line'>289</span> </span><span class="NAME">CVCertificateStore.prototype.setSignerNo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signerNo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"setSignerNo("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">signerNo</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> 
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> 
<span class='line'>294</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> 
<span class='line'>296</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder not found, creating new."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">		</span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.newHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>300</span> 
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signerNo</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">holder.signerNo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">		</span><span class="NAME">holderdao.updateSignerNo</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signerNo</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>304</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>305</span> 
<span class='line'>306</span> 
<span class='line'>307</span> 
<span class='line'>308</span> </span><span class="COMM">/**
<span class='line'>309</span>  * Generate key pair
<span class='line'>310</span>  *
<span class='line'>311</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>312</span>  * @param {PublicKeyReference} chr the public key reference for this key pair
<span class='line'>313</span>  * @param {Number} algo the key generation algorithm (Crypto.EC or Crypto.RSA)
<span class='line'>314</span>  * @param {Key} prk the private key template
<span class='line'>315</span>  * @param {Key} puk the public key template
<span class='line'>316</span>  */</span><span class="WHIT">
<span class='line'>317</span> </span><span class="NAME">CVCertificateStore.prototype.generateKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"generateKeyPair("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> 
<span class='line'>320</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>321</span> 
<span class='line'>322</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> 
<span class='line'>324</span> </span><span class="WHIT">	</span><span class="COMM">// Generate key pair</span><span class="WHIT">
<span class='line'>325</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>326</span> 
<span class='line'>327</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.newSigner</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> 
<span class='line'>330</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p8</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.encodeKeyUsingPKCS8Format</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">	</span><span class="NAME">signerDAO.updateSignerKey</span><span class="PUNC">(</span><span class="NAME">signer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>332</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>333</span> 
<span class='line'>334</span> 
<span class='line'>335</span> 
<span class='line'>336</span> </span><span class="COMM">/**
<span class='line'>337</span>  * Get a private key in the certificate store
<span class='line'>338</span>  *
<span class='line'>339</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>340</span>  * @param {PublicKeyReference} chr the public key reference for this key
<span class='line'>341</span>  * @returns the private key or null if not found
<span class='line'>342</span>  * @type Key
<span class='line'>343</span>  */</span><span class="WHIT">
<span class='line'>344</span> </span><span class="NAME">CVCertificateStore.prototype.getPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getPrivateKey("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> 
<span class='line'>347</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>348</span> 
<span class='line'>349</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByKeyId</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> 
<span class='line'>352</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>355</span> 
<span class='line'>356</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKCS8.decodeKeyFromPKCS8Format</span><span class="PUNC">(</span><span class="NAME">signer.keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>357</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>358</span> 
<span class='line'>359</span> 
<span class='line'>360</span> 
<span class='line'>361</span> </span><span class="COMM">/**
<span class='line'>362</span>  * Remove private key
<span class='line'>363</span>  *
<span class='line'>364</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>365</span>  * @param {PublicKeyReference} chr the public key reference for this key
<span class='line'>366</span>  * @returns true is deleted
<span class='line'>367</span>  * @type boolean
<span class='line'>368</span>  */</span><span class="WHIT">
<span class='line'>369</span> </span><span class="NAME">CVCertificateStore.prototype.deletePrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"deleteRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>371</span> 
<span class='line'>372</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> 
<span class='line'>374</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByName</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>376</span> 
<span class='line'>377</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>380</span> 
<span class='line'>381</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">signerDAO.deleteSigner</span><span class="PUNC">(</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>383</span> 
<span class='line'>384</span> 
<span class='line'>385</span> 
<span class='line'>386</span> </span><span class="COMM">/**
<span class='line'>387</span>  * Create Signer
<span class='line'>388</span>  *
<span class='line'>389</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>390</span>  * @param {PublicKeyReference} chr the public key reference for this key pair
<span class='line'>391</span>  * @param {Number} algo the key generation algorithm (Crypto.EC or Crypto.RSA)
<span class='line'>392</span>  * @param {Key} prk the private key template
<span class='line'>393</span>  * @param {Key} puk the public key template
<span class='line'>394</span>  */</span><span class="WHIT">
<span class='line'>395</span> </span><span class="NAME">CVCertificateStore.prototype.newSigner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"newSigner("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>397</span> 
<span class='line'>398</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>399</span> 
<span class='line'>400</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.newSigner</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>402</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>403</span> 
<span class='line'>404</span> 
<span class='line'>405</span> 
<span class='line'>406</span> </span><span class="COMM">/**
<span class='line'>407</span>  * Get Signer
<span class='line'>408</span>  *
<span class='line'>409</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>410</span>  * @param {PublicKeyReference} chr the public key reference for this key
<span class='line'>411</span>  * @returns the private key blob
<span class='line'>412</span>  * @type ByteString
<span class='line'>413</span>  */</span><span class="WHIT">
<span class='line'>414</span> </span><span class="NAME">CVCertificateStore.prototype.getSigner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getSigner("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>416</span> 
<span class='line'>417</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.hasHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>420</span> 
<span class='line'>421</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>422</span> 
<span class='line'>423</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByKeyId</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> 
<span class='line'>426</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>427</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>428</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>429</span> 
<span class='line'>430</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">blob</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signer.keyblob</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>431</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">blob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT">		</span><span class="NAME">blob</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>434</span> 
<span class='line'>435</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">blob</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>436</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>437</span> 
<span class='line'>438</span> 
<span class='line'>439</span> 
<span class='line'>440</span> </span><span class="COMM">/**
<span class='line'>441</span>  * Remove Signer
<span class='line'>442</span>  *
<span class='line'>443</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>444</span>  * @param {PublicKeyReference} chr the public key reference for this key
<span class='line'>445</span>  * @returns true is deleted
<span class='line'>446</span>  * @type boolean
<span class='line'>447</span>  */</span><span class="WHIT">
<span class='line'>448</span> </span><span class="NAME">CVCertificateStore.prototype.deleteSigner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"deleteSigner("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> 
<span class='line'>451</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>452</span> 
<span class='line'>453</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>454</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByName</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>455</span> 
<span class='line'>456</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>458</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>459</span> 
<span class='line'>460</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">signerDAO.deleteSigner</span><span class="PUNC">(</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>462</span> 
<span class='line'>463</span> 
<span class='line'>464</span> 
<span class='line'>465</span> </span><span class="COMM">/**
<span class='line'>466</span>  * Store a certificate request in the certificate store
<span class='line'>467</span>  *
<span class='line'>468</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>469</span>  * @param {CVC} req the request
<span class='line'>470</span>  */</span><span class="WHIT">
<span class='line'>471</span> </span><span class="NAME">CVCertificateStore.prototype.storeRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"storeRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>473</span> 
<span class='line'>474</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>475</span> 
<span class='line'>476</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>477</span> 
<span class='line'>478</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">requestDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getRequestDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>479</span> </span><span class="WHIT">	</span><span class="NAME">requestDAO.newRequest</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>480</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>481</span> 
<span class='line'>482</span> 
<span class='line'>483</span> 
<span class='line'>484</span> </span><span class="COMM">/**
<span class='line'>485</span>  * Return request for given CHR
<span class='line'>486</span>  *
<span class='line'>487</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>488</span>  * @param {PublicKeyReference} chr the public key reference for the certificate
<span class='line'>489</span>  * @type CVC
<span class='line'>490</span>  * @return the request or null
<span class='line'>491</span>  */</span><span class="WHIT">
<span class='line'>492</span> </span><span class="NAME">CVCertificateStore.prototype.getRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>493</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>494</span> 
<span class='line'>495</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>496</span> 
<span class='line'>497</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">requestDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getRequestDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>498</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">requestDAO.getRequestByKeyId</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>499</span> 
<span class='line'>500</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">request</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>503</span> 
<span class='line'>504</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">request.bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>507</span> 
<span class='line'>508</span> 
<span class='line'>509</span> 
<span class='line'>510</span> </span><span class="COMM">/**
<span class='line'>511</span>  * Remove request
<span class='line'>512</span>  *
<span class='line'>513</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>514</span>  * @param {PublicKeyReference} chr the public key reference for this request
<span class='line'>515</span>  * @returns true is deleted
<span class='line'>516</span>  * @type boolean
<span class='line'>517</span>  */</span><span class="WHIT">
<span class='line'>518</span> </span><span class="NAME">CVCertificateStore.prototype.deleteRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>519</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"deleteRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>520</span> 
<span class='line'>521</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span> 
<span class='line'>523</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">requestDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getRequestDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">requestDAO.getRequestByKeyId</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>525</span> 
<span class='line'>526</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">request</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>527</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>528</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>529</span> 
<span class='line'>530</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">requestDAO.deleteRequest</span><span class="PUNC">(</span><span class="NAME">request</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>531</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>532</span> 
<span class='line'>533</span> 
<span class='line'>534</span> 
<span class='line'>535</span> </span><span class="COMM">/**
<span class='line'>536</span>  * Store a certificate in the certificate store
<span class='line'>537</span>  *
<span class='line'>538</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>539</span>  * @param {CVC} cert the certificate
<span class='line'>540</span>  * @param {Boolean} makeCurrent true if this certificate becomes the current certificate
<span class='line'>541</span>  * @param {Boolean} forceUpdate true if certificate should be updated even if one already exists
<span class='line'>542</span>  */</span><span class="WHIT">
<span class='line'>543</span> </span><span class="NAME">CVCertificateStore.prototype.storeCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">makeCurrent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceUpdate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>544</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"storeCertificate("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">",'"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"',"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">makeCurrent</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>545</span> 
<span class='line'>546</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>547</span> 
<span class='line'>548</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>549</span> 
<span class='line'>550</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>551</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder not found, creating new."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>552</span> </span><span class="WHIT">		</span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.newHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>553</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>554</span> 
<span class='line'>555</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>556</span> 
<span class='line'>557</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>559</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Certificate.UP</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>560</span> 
<span class='line'>561</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">car.equals</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>562</span> </span><span class="WHIT">		</span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Certificate.SHORT</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>563</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>564</span> 
<span class='line'>565</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.getCertificateBySerial</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>566</span> 
<span class='line'>567</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>568</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ecvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">certificate.bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>569</span> 
<span class='line'>570</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"storeCertificate() : We already have a certificate for that serial number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Existing: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ecvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>572</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"New     : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>573</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Both are "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">certificate.bytes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"identical"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"different"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>574</span> 
<span class='line'>575</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ecvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">ecvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Certificate.UP</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>576</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"This is an additional link certificate for an existing root certificate"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>577</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>578</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">forceUpdate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>579</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>580</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>581</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>582</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>583</span> 
<span class='line'>584</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>585</span> </span><span class="WHIT">		</span><span class="NAME">keyId</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>586</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>587</span> 
<span class='line'>588</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.newCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>589</span> 
<span class='line'>590</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">makeCurrent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>591</span> </span><span class="WHIT">		</span><span class="NAME">holderdao.updateCurrentCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>592</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>593</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>594</span> 
<span class='line'>595</span> 
<span class='line'>596</span> 
<span class='line'>597</span> </span><span class="COMM">/**
<span class='line'>598</span>  * Return certificate for a given CHR in binary format
<span class='line'>599</span>  *
<span class='line'>600</span>  * &lt;p>This method returns a self-signed root certificate if the selfsigned
<span class='line'>601</span>  *    parameter is set. If not set or set to false, then matching link certificate,
<span class='line'>602</span>  *    if any, is returned rather than the self-signed certificate.&lt;/p>
<span class='line'>603</span>  *
<span class='line'>604</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>605</span>  * @param {PublicKeyReference} chr the public key reference for the certificate
<span class='line'>606</span>  * @param {boolean} selfsigned return the self-signed root certificate rather than a link certificate
<span class='line'>607</span>  * @returns the certificate or null if not found
<span class='line'>608</span>  * @type ByteString
<span class='line'>609</span>  */</span><span class="WHIT">
<span class='line'>610</span> </span><span class="NAME">CVCertificateStore.prototype.getCertificateBinary</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">selfsigned</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>611</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCertificateBinary("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">selfsigned</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>612</span> 
<span class='line'>613</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>614</span> 
<span class='line'>615</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>616</span> 
<span class='line'>617</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>618</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder at "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>619</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>620</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>621</span> 
<span class='line'>622</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificateDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>623</span> 
<span class='line'>624</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certificateDAO.getCertificateBySerial</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">selfsigned</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">Certificate.SHORT</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Certificate.UP</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>625</span> 
<span class='line'>626</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>627</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate for "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>628</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>629</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>630</span> 
<span class='line'>631</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCertificateBinary:"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">certificate.bytes.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>632</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">certificate.bytes</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>633</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>634</span> 
<span class='line'>635</span> 
<span class='line'>636</span> 
<span class='line'>637</span> </span><span class="COMM">/**
<span class='line'>638</span>  * Return certificate for a given CHR
<span class='line'>639</span>  *
<span class='line'>640</span>  * &lt;p>This method returns a self-signed root certificate if the selfsigned
<span class='line'>641</span>  *    parameter is set. If not set or set to false, then matching link certificate,
<span class='line'>642</span>  *    if any, is returned rather than the self-signed certificate.&lt;/p>
<span class='line'>643</span>  *
<span class='line'>644</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>645</span>  * @param {PublicKeyReference} chr the public key reference for the certificate
<span class='line'>646</span>  * @param {boolean} selfsigned return the self-signed root certificate rather than a link certificate
<span class='line'>647</span>  * @returns the certificate or null if not found
<span class='line'>648</span>  * @type CVC
<span class='line'>649</span>  */</span><span class="WHIT">
<span class='line'>650</span> </span><span class="NAME">CVCertificateStore.prototype.getCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">selfsigned</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>651</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificateBinary</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">selfsigned</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>652</span> 
<span class='line'>653</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bin</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>654</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>655</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>656</span> 
<span class='line'>657</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>658</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>659</span> </span><span class="WHIT">		</span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">bin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>660</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>661</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>662</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>663</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>664</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>665</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>666</span> 
<span class='line'>667</span> 
<span class='line'>668</span> 
<span class='line'>669</span> </span><span class="COMM">/**
<span class='line'>670</span>  * Try locating a certificate with the given CHR
<span class='line'>671</span>  *
<span class='line'>672</span>  * This method tries to find a specific certificate in the store, irrespectively of the holder.
<span class='line'>673</span>  *
<span class='line'>674</span>  * @param {PublicKeyReference} chr the public key reference for the certificate
<span class='line'>675</span>  * @returns the certificate or null if none found or more than one found
<span class='line'>676</span>  * @type CVC
<span class='line'>677</span>  */</span><span class="WHIT">
<span class='line'>678</span> </span><span class="NAME">CVCertificateStore.prototype.locateCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>679</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"locateCertificate("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>680</span> 
<span class='line'>681</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificateDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>682</span> 
<span class='line'>683</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">certificateDAO.getCertificateBySerialAndType</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>684</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>685</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>686</span> 
<span class='line'>687</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certificateDAO.getCertificateBySerialAndType</span><span class="PUNC">(</span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>688</span> 
<span class='line'>689</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>690</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate for "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found or not unique"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>691</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>692</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>693</span> 
<span class='line'>694</span> </span><span class="WHIT">	</span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">certificate.bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>695</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>696</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>697</span> 
<span class='line'>698</span> 
<span class='line'>699</span> 
<span class='line'>700</span> </span><span class="COMM">/**
<span class='line'>701</span>  * Remove certificate
<span class='line'>702</span>  *
<span class='line'>703</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>704</span>  * @param {PublicKeyReference} chr the public key reference for this certificate
<span class='line'>705</span>  * @param {boolean} selfsigned delete the self-signed root certificate rather than a link certificate
<span class='line'>706</span>  * @returns true is deleted
<span class='line'>707</span>  * @type boolean
<span class='line'>708</span>  */</span><span class="WHIT">
<span class='line'>709</span> </span><span class="NAME">CVCertificateStore.prototype.deleteCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">selfsigned</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>710</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"deleteCertificate("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">selfsigned</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>711</span> 
<span class='line'>712</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>713</span> 
<span class='line'>714</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>715</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>716</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>717</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>718</span> 
<span class='line'>719</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificateDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>720</span> 
<span class='line'>721</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certificateDAO.getCertificateBySerial</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">selfsigned</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">Certificate.SHORT</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Certificate.UP</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>722</span> 
<span class='line'>723</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>724</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>725</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>726</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">certificateDAO.deleteCertificate</span><span class="PUNC">(</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>727</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>728</span> 
<span class='line'>729</span> 
<span class='line'>730</span> 
<span class='line'>731</span> </span><span class="COMM">/**
<span class='line'>732</span>  * Return a chain of certificates resembling a path from root to end entity.
<span class='line'>733</span>  *
<span class='line'>734</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>735</span>  * @param {PublicKeyReference} tochr the public key reference for the certificate at the end of the chain
<span class='line'>736</span>  * @param {PublicKeyReference} fromcar the public key reference for the certificate to start with or root if undefined
<span class='line'>737</span>  * @returns the list of certificates starting with a self signed root certificate (fromcar undefined) a certificate
<span class='line'>738</span>  *          issued by fromcar up to an including the certificate referenced by tochr. Return null if fromcar is not found.
<span class='line'>739</span>  * @type CVC[]
<span class='line'>740</span>  */</span><span class="WHIT">
<span class='line'>741</span> </span><span class="NAME">CVCertificateStore.prototype.getCertificateChain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tochr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fromcar</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>742</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCertificateChain("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tochr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">fromcar</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>743</span> 
<span class='line'>744</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>745</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tochr</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>746</span> 
<span class='line'>747</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>748</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificate</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>749</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>750</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not locate certificate "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>751</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>752</span> </span><span class="WHIT">		</span><span class="NAME">chain.push</span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>753</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">fromcar</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>754</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>755</span> </span><span class="WHIT">				</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>756</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>757</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>758</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">fromcar</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>759</span> </span><span class="WHIT">				</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>760</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>761</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>762</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// fromcar not found along the chain</span><span class="WHIT">
<span class='line'>763</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>764</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>765</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.lastIndexOf</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>766</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>767</span> </span><span class="WHIT">			</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>768</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>769</span> </span><span class="WHIT">		</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>770</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>771</span> 
<span class='line'>772</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">chain.reverse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>773</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>774</span> 
<span class='line'>775</span> 
<span class='line'>776</span> 
<span class='line'>777</span> </span><span class="COMM">/**
<span class='line'>778</span>  * List certificates stored for given PKI element sorted by CHR
<span class='line'>779</span>  *
<span class='line'>780</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>781</span>  * @returns a list of certificates, possibly empty
<span class='line'>782</span>  * @type CVC[]
<span class='line'>783</span>  */</span><span class="WHIT">
<span class='line'>784</span> </span><span class="NAME">CVCertificateStore.prototype.listCertificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>785</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"listCertificates("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>786</span> 
<span class='line'>787</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>788</span> 
<span class='line'>789</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>790</span> 
<span class='line'>791</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificateDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>792</span> 
<span class='line'>793</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certificateDAO.enumerateCertificates</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>794</span> 
<span class='line'>795</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">certificates</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>796</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No certificates found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>797</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>798</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>799</span> 
<span class='line'>800</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">certificates.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>801</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">certificates</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>802</span> </span><span class="WHIT">		</span><span class="NAME">result.push</span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>803</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>804</span> 
<span class='line'>805</span> </span><span class="WHIT">	</span><span class="NAME">result.sort</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">b.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">b.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>806</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"listCertificates:"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">result.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>807</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>808</span> 
<span class='line'>809</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>810</span> 
<span class='line'>811</span> 
<span class='line'>812</span> 
<span class='line'>813</span> </span><span class="COMM">/**
<span class='line'>814</span>  * Returns the domain parameter for a certificate identified by its CHR
<span class='line'>815</span>  *
<span class='line'>816</span>  * &lt;p>This method traverses the certificate hierachie upwards and follows link certificates
<span class='line'>817</span>  *    until domain parameter are found.&lt;/p>
<span class='line'>818</span>  *
<span class='line'>819</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
<span class='line'>820</span>  * @param {PublicKeyReference} chr the CHR of the certificate to start the search with
<span class='line'>821</span>  * @return the domain parameter
<span class='line'>822</span>  * @type Key
<span class='line'>823</span>  */</span><span class="WHIT">
<span class='line'>824</span> </span><span class="NAME">CVCertificateStore.prototype.getDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>825</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getDomainParameter("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>826</span> 
<span class='line'>827</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">	</span><span class="COMM">// ToDo remove after migration</span><span class="WHIT">
<span class='line'>828</span> </span><span class="WHIT">		</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>829</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>830</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>831</span> 
<span class='line'>832</span> </span><span class="WHIT">	</span><span class="KEYW">do</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>833</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.lastIndexOf</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>834</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>835</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificate</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>836</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>837</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not locate certificate "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>838</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>839</span> </span><span class="WHIT">			</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>840</span> </span><span class="WHIT">			</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>841</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>842</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>843</span> 
<span class='line'>844</span> </span><span class="WHIT">	</span><span class="KEYW">do</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>845</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificate</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>846</span> 
<span class='line'>847</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>848</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not locate certificate "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" in "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>849</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>850</span> 
<span class='line'>851</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>852</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">p.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>853</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>854</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>855</span> </span><span class="WHIT">		</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>856</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">chr.equals</span><span class="PUNC">(</span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>857</span> 
<span class='line'>858</span> </span><span class="WHIT">	</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not locate CVCA certificate with domain parameter"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>859</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>860</span> 
<span class='line'>861</span> 
<span class='line'>862</span> 
<span class='line'>863</span> </span><span class="COMM">/**
<span class='line'>864</span>  * Returns the default domain parameter for a given PKI
<span class='line'>865</span>  *
<span class='line'>866</span>  * @param {String} path the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant
<span class='line'>867</span>  * @return the domain parameter
<span class='line'>868</span>  * @type Key
<span class='line'>869</span>  */</span><span class="WHIT">
<span class='line'>870</span> </span><span class="NAME">CVCertificateStore.prototype.getDefaultDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>871</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getDefaultDomainParameter("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>872</span> 
<span class='line'>873</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>874</span> </span><span class="WHIT">	</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCurrentCHR</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>875</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>876</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not locate current CVCA certificate"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>877</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>878</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getDomainParameter</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>879</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>880</span> 
<span class='line'>881</span> 
<span class='line'>882</span> 
<span class='line'>883</span> </span><span class="COMM">/**
<span class='line'>884</span>  * Returns the default algorithm identifier OID from the most recent link certificate
<span class='line'>885</span>  *
<span class='line'>886</span>  * @param {String} path the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant
<span class='line'>887</span>  * @return the algorithm identifier
<span class='line'>888</span>  * @type ByteString
<span class='line'>889</span>  */</span><span class="WHIT">
<span class='line'>890</span> </span><span class="NAME">CVCertificateStore.prototype.getDefaultPublicKeyOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>891</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getDefaultPublicKeyOID("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>892</span> 
<span class='line'>893</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>894</span> </span><span class="WHIT">	</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCurrentCHR</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>895</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>896</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not locate current CVCA certificate"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>897</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>898</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificate</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>899</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>900</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not locate current CVCA certificate"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>901</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>902</span> 
<span class='line'>903</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>904</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>905</span> 
<span class='line'>906</span> 
<span class='line'>907</span> 
<span class='line'>908</span> </span><span class="COMM">/**
<span class='line'>909</span>  * Encode a three character alpha-numeric sequence number
<span class='line'>910</span>  *
<span class='line'>911</span>  * &lt;p>This function encodes values in the range 0 to 999 as numeric string with leading zeros.&lt;/p>
<span class='line'>912</span>  * &lt;p>Value in the range 1000 to 34695 (999 + 26 * 36 * 36) are encoded as alphanumeric string.&lt;/p>
<span class='line'>913</span>  * &lt;p>Value beyond 34696 are truncated&lt;/p>
<span class='line'>914</span>  *
<span class='line'>915</span>  * @param {Number} value integer sequence value
<span class='line'>916</span>  * @type String
<span class='line'>917</span>  * @return the 3 character string
<span class='line'>918</span>  * @private
<span class='line'>919</span>  */</span><span class="WHIT">
<span class='line'>920</span> </span><span class="NAME">CVCertificateStore.encodeBase36</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>921</span> </span><span class="WHIT">	</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">1000</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">26</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">36</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">36</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>922</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">seq</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>923</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>924</span> </span><span class="WHIT">		</span><span class="NAME">seq</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>925</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>926</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">11960</span><span class="PUNC">;</span><span class="WHIT">			</span><span class="NUMB">10</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">36</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">36</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="WHIT">
<span class='line'>927</span> </span><span class="WHIT">		</span><span class="NAME">seq</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>928</span> </span><span class="WHIT">		</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>929</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">36</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>930</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>931</span> </span><span class="WHIT">				</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">55</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>932</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>933</span> </span><span class="WHIT">				</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">48</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>934</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>935</span> </span><span class="WHIT">			</span><span class="NAME">seq</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">String.fromCharCode</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">seq</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>936</span> </span><span class="WHIT">			</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">36</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>937</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>938</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>939</span> </span><span class="WHIT">	</span><span class="NAME">seq</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"000"</span><span class="PUNC">.</span><span class="NAME">substr</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">seq.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">seq</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>940</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">seq</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>941</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>942</span> 
<span class='line'>943</span> 
<span class='line'>944</span> 
<span class='line'>945</span> </span><span class="COMM">/**
<span class='line'>946</span>  * Create a CHR for the given path and sequence number
<span class='line'>947</span>  *
<span class='line'>948</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
<span class='line'>949</span>  * @param {Number} the sequence number to be translated
<span class='line'>950</span>  * @param {String} countryseq the 2 digit country code to include in the sequence number (optional)
<span class='line'>951</span>  * @return the CHR
<span class='line'>952</span>  * @type PublicKeyReference
<span class='line'>953</span>  * @private
<span class='line'>954</span>  */</span><span class="WHIT">
<span class='line'>955</span> </span><span class="NAME">CVCertificateStore.prototype.getCHRForSequenceNumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sequence</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">countryseq</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>956</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>957</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NAME">pe.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>958</span> 
<span class='line'>959</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>960</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">countryseq</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>961</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">countryseq</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore.encodeBase36</span><span class="PUNC">(</span><span class="NAME">sequence</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>962</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>963</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sequence</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>964</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0000"</span><span class="PUNC">.</span><span class="NAME">substr</span><span class="PUNC">(</span><span class="NUMB">4</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">5</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">str.length</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>965</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>966</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>967</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>968</span> 
<span class='line'>969</span> 
<span class='line'>970</span> 
<span class='line'>971</span> </span><span class="COMM">/**
<span class='line'>972</span>  * Determine path for certificate issuer
<span class='line'>973</span>  *
<span class='line'>974</span>  * For CVCA and DVCA certificates we can determined the path from the CAR. For Terminal
<span class='line'>975</span>  * certificates we dont know the full path, as we don't know under which CVCA the DVCA operates
<span class='line'>976</span>  * that issued the Terminal certificate. So we use a two-step heuristic which first tries to locate
<span class='line'>977</span>  * the DVCA certificate based on the CAR and if that is not unique uses the cvcahint to determine the path
<span class='line'>978</span>  * of the issuer
<span class='line'>979</span>  */</span><span class="WHIT">
<span class='line'>980</span> </span><span class="NAME">CVCertificateStore.prototype.getIssuerPathFor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>981</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getIssuerPathFor('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"',"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>982</span> 
<span class='line'>983</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>984</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">level</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getLevel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>985</span> 
<span class='line'>986</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">level</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>987</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>988</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>989</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cacert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.locateCertificate</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>990</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cacert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>991</span> </span><span class="WHIT">			</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cacert.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>992</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getIssuerPathFor() using path based on located issuer certificate "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>993</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>994</span> </span><span class="WHIT">			</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore.nthElementOf</span><span class="PUNC">(</span><span class="NAME">cvcahint</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>995</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getIssuerPathFor() using path based on hint "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>996</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>997</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>998</span> 
<span class='line'>999</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1000</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1001</span> 
<span class='line'>1002</span> 
<span class='line'>1003</span> 
<span class='line'>1004</span> </span><span class="COMM">/**
<span class='line'>1005</span>  * Validate a certificate against a certificate already stored in the certificate store
<span class='line'>1006</span>  *
<span class='line'>1007</span>  * &lt;p>If the certificate is a terminal certificate, then the first element of the path given
<span class='line'>1008</span>  *    in cvcahint is used to determine the correct CVCA.&lt;/p>
<span class='line'>1009</span>  *
<span class='line'>1010</span>  * Throws an exception if the certificate can not be validated
<span class='line'>1011</span>  *
<span class='line'>1012</span>  * @param {Crypto} crypto the crypto provider to be used for certificate verification
<span class='line'>1013</span>  * @param {CVC} cvc the certificate
<span class='line'>1014</span>  * @param {String} cvcahint the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant
<span class='line'>1015</span>  * @returns object containing the path and domain parameter used for validating the certificate. Returns null if no issuer could be found
<span class='line'>1016</span>  * @type Object
<span class='line'>1017</span>  */</span><span class="WHIT">
<span class='line'>1018</span> </span><span class="NAME">CVCertificateStore.prototype.validateCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1019</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"validateCertificate('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"',"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1020</span> 
<span class='line'>1021</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1022</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">level</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getLevel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1023</span> 
<span class='line'>1024</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">car.equals</span><span class="PUNC">(</span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// Self signed</span><span class="WHIT">
<span class='line'>1025</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">level</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1026</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Self-signed certificates only allowed for CVCA: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1027</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Self-signed certificates only allowed for CVCA: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1028</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1029</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cvc.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1030</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Self-signed certificate failed signature verification. "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1031</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Self-signed certificate failed signature verification. "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1032</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1033</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1034</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1035</span> 
<span class='line'>1036</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getIssuerPathFor</span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1037</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cacert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificate</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1038</span> 
<span class='line'>1039</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cacert</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1040</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Can't find issuer "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1041</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1042</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1043</span> 
<span class='line'>1044</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cacert.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1045</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1046</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getDomainParameter</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1047</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1048</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1049</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1050</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cacert.getPublicKey</span><span class="PUNC">(</span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1051</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">result</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1052</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" failed signature verification with "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cacert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1053</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" failed signature verification with "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cacert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1054</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1055</span> 
<span class='line'>1056</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1057</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1058</span> 
<span class='line'>1059</span> 
<span class='line'>1060</span> 
<span class='line'>1061</span> </span><span class="COMM">/**
<span class='line'>1062</span>  * Insert a single certificates into the certificate store
<span class='line'>1063</span>  *
<span class='line'>1064</span>  * &lt;p>Before a certificate is imported, the signature is verified.&lt;/p>
<span class='line'>1065</span>  * &lt;p>If the certificate is a terminal certificate, then the first element of the path given
<span class='line'>1066</span>  *    in cvcahint is used to determine the correct CVCA.&lt;/p>
<span class='line'>1067</span>  *
<span class='line'>1068</span>  * @param {Crypto} crypto the crypto provider to be used for certificate verification
<span class='line'>1069</span>  * @param {CVC} cvc the certificate
<span class='line'>1070</span>  * @param {String} cvcahint the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant
<span class='line'>1071</span>  * @param {Boolean} forceUpdate true if certificate should be updated even if one already exists
<span class='line'>1072</span>  * @returns true, if the certificate was inserted
<span class='line'>1073</span>  * @type boolean
<span class='line'>1074</span>  */</span><span class="WHIT">
<span class='line'>1075</span> </span><span class="NAME">CVCertificateStore.prototype.insertCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceUpdate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1076</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"insertCertificate('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"',"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1077</span> 
<span class='line'>1078</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1079</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getIssuerPathFor</span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1080</span> 
<span class='line'>1081</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cacert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificate</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1082</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cacert</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1083</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Can't find issuer "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1084</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1085</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1086</span> 
<span class='line'>1087</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">cacert.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1088</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getDomainParameter</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1089</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1090</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1091</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1092</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cacert.getPublicKey</span><span class="PUNC">(</span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cacert.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1093</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">result</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1094</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" failed signature verification with "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cacert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1095</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1096</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1097</span> 
<span class='line'>1098</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1099</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chr.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1100</span> 
<span class='line'>1101</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">car.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">	</span><span class="COMM">// Link certificate</span><span class="WHIT">
<span class='line'>1102</span> </span><span class="WHIT">		</span><span class="NAME">this.storeCertificate</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceUpdate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1103</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">							</span><span class="COMM">// Subordinate certificate</span><span class="WHIT">
<span class='line'>1104</span> </span><span class="WHIT">		</span><span class="NAME">this.storeCertificate</span><span class="PUNC">(</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceUpdate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1105</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1106</span> 
<span class='line'>1107</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1108</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1109</span> 
<span class='line'>1110</span> 
<span class='line'>1111</span> 
<span class='line'>1112</span> </span><span class="COMM">/**
<span class='line'>1113</span>  * Insert certificates into certificate store
<span class='line'>1114</span>  *
<span class='line'>1115</span>  * &lt;p>The import into the internal data structure is done in three steps:&lt;/p>
<span class='line'>1116</span>  * &lt;ol>
<span class='line'>1117</span>  *  &lt;li>If allowed, all self-signed certificates are imported&lt;/li>
<span class='line'>1118</span>  *  &lt;li>All possible certificate chains are build&lt;/li>
<span class='line'>1119</span>  *  &lt;li>Certificate chains are processed starting with the topmost certificate in the hierachie&lt;/li>
<span class='line'>1120</span>  * &lt;/ol>
<span class='line'>1121</span>  * &lt;p>Certificates at the terminal level can only be imported, if the issuing
<span class='line'>1122</span>  *    DVCA certificate is contained in the list or a hint for the relevant CVCA is
<span class='line'>1123</span>  *    given in the first element of the path contained in parameter cvcahint.&lt;/p>
<span class='line'>1124</span>  * &lt;p>Before a certificate is imported, the signature is verified.&lt;/p>
<span class='line'>1125</span>  *
<span class='line'>1126</span>  * @param {Crypto} crypto the crypto provider to be used for certificate verification
<span class='line'>1127</span>  * @param {CVC[]} certlist the unordered list of certificates
<span class='line'>1128</span>  * @param {Boolean} insertSelfSigned true, if the import of root certificates is allowed
<span class='line'>1129</span>  * @param {String} cvcahint the PKI path (e.g. "/UTCVCA1/UTDVCA1/UTTERM"). Only the first path element is relevant
<span class='line'>1130</span>  * @param {Boolean} forceUpdate true if certificate should be updated even if one already exists
<span class='line'>1131</span>  * @returns the (ideally empty) list of unprocessed certificates. This does not contains certificates
<span class='line'>1132</span>  *          that fail signature verification.
<span class='line'>1133</span>  * @type CVC[]
<span class='line'>1134</span>  */</span><span class="WHIT">
<span class='line'>1135</span> </span><span class="NAME">CVCertificateStore.prototype.insertCertificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">insertSelfSigned</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceUpdate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1136</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"insertCertificates('"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"',"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">insertSelfSigned</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1137</span> 
<span class='line'>1138</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chrmap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1139</span> 
<span class='line'>1140</span> </span><span class="WHIT">	</span><span class="COMM">// Iterate certificate list and store self-signed certificates, if allowed</span><span class="WHIT">
<span class='line'>1141</span> </span><span class="WHIT">	</span><span class="COMM">// Generate a map of certificate holder references</span><span class="WHIT">
<span class='line'>1142</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">unprocessed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1143</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">certlist.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1144</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1145</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1146</span> 
<span class='line'>1147</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// Self signed</span><span class="WHIT">
<span class='line'>1148</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1149</span> 
<span class='line'>1150</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1151</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1152</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">insertSelfSigned</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// Store self-signed certificates</span><span class="WHIT">
<span class='line'>1153</span> </span><span class="WHIT">					</span><span class="NAME">this.storeCertificate</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceUpdate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1154</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1155</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1156</span> </span><span class="WHIT">				</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Self-signed certificate failed signature verification. "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1157</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1158</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1159</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">stored</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1160</span> </span><span class="WHIT">			</span><span class="NAME">unprocessed.push</span><span class="PUNC">(</span><span class="NAME">state</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1161</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">chrmap</span><span class="PUNC">[</span><span class="NAME">chr</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1162</span> </span><span class="WHIT">				</span><span class="NAME">chrmap</span><span class="PUNC">[</span><span class="NAME">chr</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">state</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1163</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1164</span> </span><span class="WHIT">				</span><span class="COMM">// Duplicate CHRs for terminals are allowed</span><span class="WHIT">
<span class='line'>1165</span> </span><span class="WHIT">				</span><span class="NAME">chrmap</span><span class="PUNC">[</span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">state</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1166</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1167</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1168</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1169</span> 
<span class='line'>1170</span> </span><span class="WHIT">	</span><span class="COMM">// Mark certificates that are surely CAs, because an issued certificate is contained in the list</span><span class="WHIT">
<span class='line'>1171</span> </span><span class="WHIT">	</span><span class="NAME">certlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">unprocessed</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1172</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">certlist.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1173</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">cvc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1174</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chrmap</span><span class="PUNC">[</span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1175</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">state</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1176</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Mark as CA: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">state.cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1177</span> </span><span class="WHIT">			</span><span class="NAME">state.end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1178</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1179</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1180</span> 
<span class='line'>1181</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">unprocessed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1182</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">certlist.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1183</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1184</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">state.end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// Find all certificates which are at the end of the chain</span><span class="WHIT">
<span class='line'>1185</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1186</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lastpathelement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">state.cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1187</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">lastpathelement</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1188</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">singlecert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1189</span> </span><span class="WHIT">			</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// Build a certificate chain and the path for the last certificate</span><span class="WHIT">
<span class='line'>1190</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pathelement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">state.cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1191</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pathelement</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">lastpathelement</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// CVCA Link Certificates don't add to the path</span><span class="WHIT">
<span class='line'>1192</span> </span><span class="WHIT">					</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathelement</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1193</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1194</span> </span><span class="WHIT">				</span><span class="NAME">lastpathelement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pathelement</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1195</span> 
<span class='line'>1196</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">state.stored</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">			</span><span class="COMM">// If not already stored, add to the list</span><span class="WHIT">
<span class='line'>1197</span> </span><span class="WHIT">					</span><span class="NAME">list.push</span><span class="PUNC">(</span><span class="NAME">state</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1198</span> </span><span class="WHIT">					</span><span class="NAME">state.stored</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1199</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1200</span> </span><span class="WHIT">				</span><span class="NAME">state</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chrmap</span><span class="PUNC">[</span><span class="NAME">state.cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1201</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">state</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1202</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1203</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1204</span> </span><span class="WHIT">				</span><span class="NAME">singlecert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1205</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1206</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">singlecert</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1207</span> </span><span class="WHIT">				</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Single certificate might be a terminal certificate, using cvca hint "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1208</span> </span><span class="WHIT">				</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvcahint</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1209</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1210</span> </span><span class="WHIT">				</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Path is "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1211</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1212</span> </span><span class="WHIT">			</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">list.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">--</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">	</span><span class="COMM">// Process chain in reverse order</span><span class="WHIT">
<span class='line'>1213</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">cvc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1214</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.insertCertificate</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceUpdate</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1215</span> </span><span class="WHIT">					</span><span class="NAME">unprocessed.push</span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1216</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1217</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1218</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1219</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1220</span> 
<span class='line'>1221</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">unprocessed</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1222</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1223</span> </span><span class="COMM">// For backward compatibility</span><span class="WHIT">
<span class='line'>1224</span> </span><span class="NAME">CVCertificateStore.prototype.insertCertificates2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore.prototype.insertCertificates</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1225</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of the chip authentication protocol for both card and terminal
<span class='line'> 25</span>  * as defined for EAC 2.0
<span class='line'> 26</span>  */</span><span class="WHIT">
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> 
<span class='line'> 30</span> </span><span class="COMM">/**
<span class='line'> 31</span>  * Create a ChipAuthenticationInfo object
<span class='line'> 32</span>  *
<span class='line'> 33</span>  * @class &lt;p>This class encodes and decodes ChipAuthenticationInfo objects.&lt;/p>
<span class='line'> 34</span>  * &lt;p>The class implements the following ASN.1 syntax:&lt;/p>
<span class='line'> 35</span>  * &lt;pre>
<span class='line'> 36</span>  *	ChipAuthenticationInfo ::= SEQUENCE {
<span class='line'> 37</span>  *		protocol OBJECT IDENTIFIER(
<span class='line'> 38</span>  *			id-CA-DH-3DES-CBC-CBC |
<span class='line'> 39</span>  *			id-CA-DH-AES-CBC-CMAC-128 |
<span class='line'> 40</span>  *			id-CA-DH-AES-CBC-CMAC-192 |
<span class='line'> 41</span>  *			id-CA-DH-AES-CBC-CMAC-256 |
<span class='line'> 42</span>  *			id-CA-ECDH-3DES-CBC-CBC |
<span class='line'> 43</span>  *			id-CA-ECDH-AES-CBC-CMAC-128 |
<span class='line'> 44</span>  *			id-CA-ECDH-AES-CBC-CMAC-192 |
<span class='line'> 45</span>  *			id-CA-ECDH-AES-CBC-CMAC-256),
<span class='line'> 46</span>  *		version INTEGER, -- MUST be 1 or 2
<span class='line'> 47</span>  *		keyId INTEGER OPTIONAL
<span class='line'> 48</span>  * }
<span class='line'> 49</span>  * &lt;/pre>
<span class='line'> 50</span>  * @constructor
<span class='line'> 51</span>  * @param {ASN1} the optional tlv structure to initialize the object
<span class='line'> 52</span>  */</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationInfo</span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> 
<span class='line'> 58</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">		</span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> 
<span class='line'> 63</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">		</span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> 
<span class='line'> 67</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tlv.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">			</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">			</span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 72</span> 
<span class='line'> 73</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 75</span> 
<span class='line'> 76</span> </span><span class="NAME">exports.ChipAuthenticationInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> 
<span class='line'> 78</span> 
<span class='line'> 79</span> </span><span class="COMM">/**
<span class='line'> 80</span>  * Convert object to TLV structure
<span class='line'> 81</span>  *
<span class='line'> 82</span>  * @return the TLV structure
<span class='line'> 83</span>  * @type ASN1
<span class='line'> 84</span>  */</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="NAME">ChipAuthenticationInfo.prototype.toTLV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> 
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> 
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.version</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> 
<span class='line'> 94</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyId</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 99</span> 
<span class='line'>100</span> 
<span class='line'>101</span> 
<span class='line'>102</span> </span><span class="NAME">ChipAuthenticationInfo.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"ChipAuthenticationInfo(protocol="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", version="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", keyId="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>105</span> 
<span class='line'>106</span> 
<span class='line'>107</span> 
<span class='line'>108</span> </span><span class="COMM">/**
<span class='line'>109</span>  * Create a ChipAuthenticationDomainParameterInfo object
<span class='line'>110</span>  *
<span class='line'>111</span>  * @class &lt;p>This class encodes and decodes ChipAuthenticationDomainParameterInfo objects.&lt;/p>
<span class='line'>112</span>  * &lt;p>The class implements the following ASN.1 syntax:&lt;/p>
<span class='line'>113</span>  * &lt;pre>
<span class='line'>114</span>  *	ChipAuthenticationDomainParameterInfo ::= SEQUENCE {
<span class='line'>115</span>  *		protocol OBJECT IDENTIFIER(id-CA-DH | id-CA-ECDH),
<span class='line'>116</span>  *		domainParameter AlgorithmIdentifier,
<span class='line'>117</span>  *		keyId INTEGER OPTIONAL
<span class='line'>118</span>  * }
<span class='line'>119</span>  * &lt;/pre>
<span class='line'>120</span>  * @constructor
<span class='line'>121</span>  * @param {ASN1} the optional tlv structure to initialize the object
<span class='line'>122</span>  */</span><span class="WHIT">
<span class='line'>123</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationDomainParameterInfo</span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> 
<span class='line'>128</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">		</span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>132</span> 
<span class='line'>133</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> 
<span class='line'>136</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">			</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">oid.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"standardizedDomainParameter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">				</span><span class="NAME">this.standardizedDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curveoid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NAME">this.standardizedDomainParameter</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">curveoid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"ChipAuthenticationPublicKeyInfo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Standardized domain parameter "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.standardizedDomainParameter</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" is unknown"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">				</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">				</span><span class="NAME">this.domainParameter.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">curveoid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">				</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ECCUtils.decodeECParameters</span><span class="PUNC">(</span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>154</span> 
<span class='line'>155</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tlv.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">			</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">			</span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>161</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>162</span> 
<span class='line'>163</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">exports</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="NAME">exports.ChipAuthenticationDomainParameterInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationDomainParameterInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> 
<span class='line'>166</span> 
<span class='line'>167</span> </span><span class="COMM">/**
<span class='line'>168</span>  * Convert object to TLV structure
<span class='line'>169</span>  *
<span class='line'>170</span>  * @return the TLV structure
<span class='line'>171</span>  * @type ASN1
<span class='line'>172</span>  */</span><span class="WHIT">
<span class='line'>173</span> </span><span class="NAME">ChipAuthenticationDomainParameterInfo.prototype.toTLV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> 
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.standardizedDomainParameter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">		</span><span class="NAME">c.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"standardizedDomainParameter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">		</span><span class="NAME">c.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.standardizedDomainParameter</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>183</span> 
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> 
<span class='line'>187</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyId</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>192</span> 
<span class='line'>193</span> 
<span class='line'>194</span> 
<span class='line'>195</span> </span><span class="NAME">ChipAuthenticationDomainParameterInfo.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"ChipAuthenticationDomainParameterInfo(protocol="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", keyId="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>198</span> 
<span class='line'>199</span> 
<span class='line'>200</span> 
<span class='line'>201</span> </span><span class="COMM">/**
<span class='line'>202</span>  * Create a ChipAuthenticationPublicKeyInfo object
<span class='line'>203</span>  *
<span class='line'>204</span>  * @class &lt;p>This class encodes and decodes ChipAuthenticationPublicKeyInfo objects.&lt;/p>
<span class='line'>205</span>  * &lt;p>The class implements the following ASN.1 syntax:&lt;/p>
<span class='line'>206</span>  * &lt;pre>
<span class='line'>207</span>  *	ChipAuthenticationPublicKeyInfo ::= SEQUENCE {
<span class='line'>208</span>  *		protocol OBJECT IDENTIFIER(id-PK-DH | id-PK-ECDH),
<span class='line'>209</span>  *		chipAuthenticationPublicKey SubjectPublicKeyInfo,
<span class='line'>210</span>  *		keyId INTEGER OPTIONAL
<span class='line'>211</span>  *	}
<span class='line'>212</span>  *
<span class='line'>213</span>  *	SubjectPublicKeyInfo ::= SEQUENCE {
<span class='line'>214</span>  *		algorithm  AlgorithmIdentifier,
<span class='line'>215</span>  *		subjectPublicKey BIT STRING
<span class='line'>216</span>  *	}
<span class='line'>217</span>  *
<span class='line'>218</span>  *	AlgorithmIdentifier ::= SEQUENCE {
<span class='line'>219</span>  *		algorithm  OBJECT IDENTIFIER,
<span class='line'>220</span>  *		parameters ANY DEFINED BY algorithm OPTIONAL
<span class='line'>221</span>  *	}
<span class='line'>222</span>  * &lt;/pre>
<span class='line'>223</span>  * @constructor
<span class='line'>224</span>  * @param {ASN1} the optional tlv structure to initialize the object
<span class='line'>225</span>  */</span><span class="WHIT">
<span class='line'>226</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> 
<span class='line'>231</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// protocol</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">		</span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> 
<span class='line'>236</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">					</span><span class="COMM">// Subject public key info</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span> 
<span class='line'>240</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">algo.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">				</span><span class="COMM">// Algorithm Identifier</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">algo.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> 
<span class='line'>244</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">algo.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">							</span><span class="COMM">// algorithm</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">oid.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">		</span><span class="NAME">this.algorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">oid.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>247</span> 
<span class='line'>248</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"standardizedDomainParameter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">			</span><span class="NAME">this.standardizedDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">algo.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curveoid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NAME">this.standardizedDomainParameter</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">curveoid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"ChipAuthenticationPublicKeyInfo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Standardized domain parameter "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.standardizedDomainParameter</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" is unknown"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">curveoid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ECCUtils.decodeECParameters</span><span class="PUNC">(</span><span class="NAME">algo.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>259</span> 
<span class='line'>260</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">puk.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">		</span><span class="NAME">this.publicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">puk.value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> 
<span class='line'>264</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tlv.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">			</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">			</span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>270</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>271</span> 
<span class='line'>272</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">exports</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="NAME">exports.ChipAuthenticationPublicKeyInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationPublicKeyInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> 
<span class='line'>275</span> 
<span class='line'>276</span> 
<span class='line'>277</span> </span><span class="COMM">/**
<span class='line'>278</span>  * Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
<span class='line'>279</span>  *
<span class='line'>280</span>  * This prevent interpretation of the integer representation if converted into
<span class='line'>281</span>  * a signed ASN1 INTEGER.
<span class='line'>282</span>  *
<span class='line'>283</span>  * @param {ByteString} value the value to convert
<span class='line'>284</span>  * @return the converted value
<span class='line'>285</span>  * @type ByteString
<span class='line'>286</span>  */</span><span class="WHIT">
<span class='line'>287</span> </span><span class="NAME">ChipAuthenticationPublicKeyInfo.convertUnsignedInteger</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>289</span> 
<span class='line'>290</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span> 
<span class='line'>293</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>298</span> 
<span class='line'>299</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>301</span> 
<span class='line'>302</span> 
<span class='line'>303</span> 
<span class='line'>304</span> </span><span class="COMM">/**
<span class='line'>305</span>  * Creates the EC Public Key as subjectPublicKeyInfo TLV structure object.
<span class='line'>306</span>  *
<span class='line'>307</span>  * &lt;p>The structure is defined as:&lt;/p>
<span class='line'>308</span>  * &lt;pre>
<span class='line'>309</span>  *	SubjectPublicKeyInfo  ::=  SEQUENCE  {
<span class='line'>310</span>  *		algorithm            AlgorithmIdentifier,
<span class='line'>311</span>  *		subjectPublicKey     BIT STRING  }
<span class='line'>312</span>  *
<span class='line'>313</span>  *	AlgorithmIdentifier  ::=  SEQUENCE  {
<span class='line'>314</span>  *		algorithm               OBJECT IDENTIFIER,
<span class='line'>315</span>  *		parameters              ANY DEFINED BY algorithm OPTIONAL  }
<span class='line'>316</span>  *
<span class='line'>317</span>  *	id-ecPublicKey OBJECT IDENTIFIER ::= {
<span class='line'>318</span>  *		iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 }
<span class='line'>319</span>  *
<span class='line'>320</span>  *	ECParameters ::= CHOICE {
<span class='line'>321</span>  *		namedCurve         OBJECT IDENTIFIER,
<span class='line'>322</span>  *		implicitCurve      NULL,
<span class='line'>323</span>  *		specifiedCurve     SpecifiedECDomain }
<span class='line'>324</span>  * &lt;/pre>
<span class='line'>325</span>  * @return the subjectPublicKey TLV structure
<span class='line'>326</span>  * @type ASN1
<span class='line'>327</span>  */</span><span class="WHIT">
<span class='line'>328</span> </span><span class="NAME">ChipAuthenticationPublicKeyInfo.createECSubjectPublicKeyInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encodeECDomainParameter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"subjectPublicKeyInfo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>330</span> 
<span class='line'>331</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"1.2.840.10045.2.1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">		</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> 
<span class='line'>335</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">encodeECDomainParameter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// Make sure curve components are available if only curve oid is defined</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">			</span><span class="NAME">publicKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">		</span><span class="NAME">groupCAPuk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">groupCAPuk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ecParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"ecParameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"version"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>343</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"fieldID"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>344</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"fieldType"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"prime-field"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"prime"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">						</span><span class="NAME">ChipAuthenticationPublicKeyInfo.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>347</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"curve"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"a"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">						</span><span class="NAME">ChipAuthenticationPublicKeyInfo.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"b"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">						</span><span class="NAME">ChipAuthenticationPublicKeyInfo.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"base"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>355</span> </span><span class="WHIT">						</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"order"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">					</span><span class="NAME">ChipAuthenticationPublicKeyInfo.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>359</span> 
<span class='line'>360</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cofactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">cofactor.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cofactor.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">cofactor.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>364</span> </span><span class="WHIT">			</span><span class="NAME">ecParameter.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"cofactor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cofactor.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">		</span><span class="NAME">algorithm.add</span><span class="PUNC">(</span><span class="NAME">ecParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">		</span><span class="NAME">algorithm.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>370</span> 
<span class='line'>371</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">algorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>372</span> 
<span class='line'>373</span> </span><span class="WHIT">	</span><span class="COMM">// Prefix a 00 to form correct bitstring</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">	</span><span class="COMM">// Prefix a 04 to indicate uncompressed format</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keybin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0004"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">	</span><span class="NAME">keybin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keybin.concat</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">	</span><span class="NAME">keybin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keybin.concat</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"subjectPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keybin</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> 
<span class='line'>380</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>382</span> 
<span class='line'>383</span> 
<span class='line'>384</span> 
<span class='line'>385</span> </span><span class="COMM">/**
<span class='line'>386</span>  * Convert object to TLV structure
<span class='line'>387</span>  *
<span class='line'>388</span>  * @return the TLV structure
<span class='line'>389</span>  * @type ASN1
<span class='line'>390</span>  */</span><span class="WHIT">
<span class='line'>391</span> </span><span class="NAME">ChipAuthenticationPublicKeyInfo.prototype.toTLV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>392</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"chipAuthenticationPublicKeyInfo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>393</span> 
<span class='line'>394</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"protocol"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>395</span> 
<span class='line'>396</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algorithm.equals</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-ecPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spki</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationPublicKeyInfo.createECSubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">this.publicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algoid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.algorithm</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algorithm.equals</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"standardizedDomainParameter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">			</span><span class="NAME">algoid.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"standardizedDomainParameter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.standardizedDomainParameter</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>403</span> 
<span class='line'>404</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spki</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"subjectPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">		</span><span class="NAME">spki.add</span><span class="PUNC">(</span><span class="NAME">algoid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>406</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0004"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>407</span> </span><span class="WHIT">		</span><span class="NAME">spki.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"publicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>408</span> 
<span class='line'>409</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>410</span> 
<span class='line'>411</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">spki</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>412</span> 
<span class='line'>413</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyId</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>417</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>418</span> 
<span class='line'>419</span> 
<span class='line'>420</span> 
<span class='line'>421</span> </span><span class="NAME">ChipAuthenticationPublicKeyInfo.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>422</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"ChipAuthenticationPublicKeyInfo(protocol="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", algorithm="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.algorithm</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", publicKey="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.publicKey</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", keyId="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>423</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>424</span> 
<span class='line'>425</span> 
<span class='line'>426</span> 
<span class='line'>427</span> </span><span class="COMM">/**
<span class='line'>428</span>  * Create a ChipAuthentication protocol object
<span class='line'>429</span>  *
<span class='line'>430</span>  * @class This class implements the ChipAuthentication protocol
<span class='line'>431</span>  *
<span class='line'>432</span>  * @constructor
<span class='line'>433</span>  *
<span class='line'>434</span>  * @param {Crypto} crypto the crypto provider
<span class='line'>435</span>  * @param {ByteString} algo the algorithm OID
<span class='line'>436</span>  * @param {Key} domparam the key object holding ECC domain parameter
<span class='line'>437</span>  */</span><span class="WHIT">
<span class='line'>438</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">domparam</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>439</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>440</span> </span><span class="WHIT">	</span><span class="NAME">this.algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>441</span> </span><span class="WHIT">	</span><span class="NAME">this.domparam</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">domparam</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>442</span> </span><span class="WHIT">	</span><span class="NAME">this.includeDPinAuthToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>443</span> </span><span class="WHIT">	</span><span class="NAME">this.noPadding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>444</span> 
<span class='line'>445</span> </span><span class="COMM">//	print(ECCUtils.ECParametersToString(domparam));</span><span class="WHIT">
<span class='line'>446</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>447</span> 
<span class='line'>448</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">exports</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">	</span><span class="NAME">exports.ChipAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> 
<span class='line'>451</span> 
<span class='line'>452</span> </span><span class="NAME">ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-CA-ECDH-3DES-CBC-CBC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>453</span> </span><span class="NAME">ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_128</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-CA-ECDH-AES-CBC-CMAC-128"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>454</span> </span><span class="NAME">ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_192</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-CA-ECDH-AES-CBC-CMAC-192"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>455</span> </span><span class="NAME">ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_256</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-CA-ECDH-AES-CBC-CMAC-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> 
<span class='line'>457</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>458</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">8</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"secp192r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>459</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">9</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP192r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>460</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">10</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"secp224r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">11</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP224r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>462</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">12</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"secp256r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>463</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">13</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>464</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">14</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP320r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">15</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"secp384r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>466</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">16</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP384r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>467</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">17</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP512r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>468</span> </span><span class="NAME">ChipAuthentication.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">18</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"secp521r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>469</span> 
<span class='line'>470</span> 
<span class='line'>471</span> </span><span class="COMM">/**
<span class='line'>472</span>  * Derive key from input parameter, counter and optional nonce
<span class='line'>473</span>  *
<span class='line'>474</span>  * @param {ByteString} input the first part of the hash input
<span class='line'>475</span>  * @param {Number} counter the counter value
<span class='line'>476</span>  * @param {nonce} the optional nonce inserted between the input and the counter
<span class='line'>477</span>  * @return the key object
<span class='line'>478</span>  * @type Key
<span class='line'>479</span>  */</span><span class="WHIT">
<span class='line'>480</span> </span><span class="NAME">ChipAuthentication.prototype.deriveKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">input</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">counter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">		</span><span class="NAME">input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">input.concat</span><span class="PUNC">(</span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>483</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>484</span> 
<span class='line'>485</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="STRN">"000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>486</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">counter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>487</span> 
<span class='line'>488</span> </span><span class="WHIT">	</span><span class="NAME">input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">input.concat</span><span class="PUNC">(</span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>489</span> 
<span class='line'>490</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>491</span> 
<span class='line'>492</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo.equals</span><span class="PUNC">(</span><span class="NAME">ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>493</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">digest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>494</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.DES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">digest.left</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>495</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo.equals</span><span class="PUNC">(</span><span class="NAME">ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_128</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>496</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">digest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>497</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">digest.left</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>498</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo.equals</span><span class="PUNC">(</span><span class="NAME">ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_192</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>499</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">digest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>500</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">digest.left</span><span class="PUNC">(</span><span class="NUMB">24</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo.equals</span><span class="PUNC">(</span><span class="NAME">ChipAuthentication.id_CA_ECDH_AES_CBC_CMAC_256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">digest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">digest</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"ChipAuthentication"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Algorithm not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>507</span> 
<span class='line'>508</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>509</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>510</span> 
<span class='line'>511</span> 
<span class='line'>512</span> 
<span class='line'>513</span> </span><span class="COMM">/**
<span class='line'>514</span>  * Generate ephemeral key pair
<span class='line'>515</span>  */</span><span class="WHIT">
<span class='line'>516</span> </span><span class="NAME">ChipAuthentication.prototype.generateEphemeralCAKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>517</span> </span><span class="WHIT">	</span><span class="NAME">this.prkCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.domparam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>518</span> </span><span class="WHIT">	</span><span class="NAME">this.prkCA.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>519</span> 
<span class='line'>520</span> </span><span class="WHIT">	</span><span class="NAME">this.pukCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.domparam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>521</span> </span><span class="WHIT">	</span><span class="NAME">this.pukCA.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span> 
<span class='line'>523</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.pukCA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.prkCA</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>525</span> 
<span class='line'>526</span> 
<span class='line'>527</span> 
<span class='line'>528</span> </span><span class="COMM">/**
<span class='line'>529</span>  * Set chip authentication keys
<span class='line'>530</span>  *
<span class='line'>531</span>  * @param {Key} prk the private key
<span class='line'>532</span>  * @param {Key} puk the public key
<span class='line'>533</span>  */</span><span class="WHIT">
<span class='line'>534</span> </span><span class="NAME">ChipAuthentication.prototype.setKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>535</span> </span><span class="WHIT">	</span><span class="NAME">this.prkCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>536</span> </span><span class="WHIT">	</span><span class="NAME">this.pukCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>537</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>538</span> 
<span class='line'>539</span> 
<span class='line'>540</span> 
<span class='line'>541</span> </span><span class="COMM">/**
<span class='line'>542</span>  * Returns the x coordinate of the public key
<span class='line'>543</span>  *
<span class='line'>544</span>  * @return the encoded public key
<span class='line'>545</span>  * @type ByteString
<span class='line'>546</span>  */</span><span class="WHIT">
<span class='line'>547</span> </span><span class="NAME">ChipAuthentication.prototype.getCompressedPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>548</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.pukCA.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>549</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>550</span> 
<span class='line'>551</span> 
<span class='line'>552</span> 
<span class='line'>553</span> </span><span class="COMM">/**
<span class='line'>554</span>  * Returns the ephemeral public key
<span class='line'>555</span>  *
<span class='line'>556</span>  * @return the encoded public key
<span class='line'>557</span>  * @type ByteString
<span class='line'>558</span>  */</span><span class="WHIT">
<span class='line'>559</span> </span><span class="NAME">ChipAuthentication.prototype.getEphemeralPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>560</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ecpk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT">	</span><span class="NAME">ecpk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ecpk.concat</span><span class="PUNC">(</span><span class="NAME">this.pukCA.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>562</span> </span><span class="WHIT">	</span><span class="NAME">ecpk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ecpk.concat</span><span class="PUNC">(</span><span class="NAME">this.pukCA.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>563</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ecpk</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>564</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>565</span> 
<span class='line'>566</span> 
<span class='line'>567</span> 
<span class='line'>568</span> </span><span class="COMM">/**
<span class='line'>569</span>  * Decodes the ephemeral public key
<span class='line'>570</span>  *
<span class='line'>571</span>  * @return the decoded public key
<span class='line'>572</span>  * @type ByteString
<span class='line'>573</span>  */</span><span class="WHIT">
<span class='line'>574</span> </span><span class="NAME">ChipAuthentication.prototype.decodeEphemeralPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">encodedKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>575</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">encodedKey.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>576</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"ChipAuthentication"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Terminal ephemeral public key does not start with '04'"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>577</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>578</span> 
<span class='line'>579</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.domparam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>580</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>581</span> 
<span class='line'>582</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">encodedKey.length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>583</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"ChipAuthentication"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Length of terminal ephemeral public key does not match curve"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>584</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>585</span> 
<span class='line'>586</span> </span><span class="WHIT">	</span><span class="NAME">key.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>587</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encodedKey.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>588</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encodedKey.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>589</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>590</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>591</span> 
<span class='line'>592</span> 
<span class='line'>593</span> 
<span class='line'>594</span> </span><span class="COMM">/**
<span class='line'>595</span>  * Performs the mapping operation with mapping data from the other side
<span class='line'>596</span>  *
<span class='line'>597</span>  * @param {ByteString} publicKey the public key in encoded format
<span class='line'>598</span>  */</span><span class="WHIT">
<span class='line'>599</span> </span><span class="NAME">ChipAuthentication.prototype.performKeyAgreement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>600</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">publicKey.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>601</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"ChipAuthentication"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Public key must start with '04'"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>602</span> 
<span class='line'>603</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">nonce</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">nonce</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>604</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"ChipAuthentication"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"nonce must be of type ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>605</span> 
<span class='line'>606</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">publicKey.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>607</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.prkCA.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>608</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"ChipAuthentication"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Public key size does not match private key size"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>609</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>610</span> 
<span class='line'>611</span> </span><span class="WHIT">	</span><span class="NAME">this.otherPuK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.domparam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>612</span> </span><span class="WHIT">	</span><span class="NAME">this.otherPuK.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.bytes</span><span class="PUNC">(</span><span class="WHIT">    </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>613</span> </span><span class="WHIT">	</span><span class="NAME">this.otherPuK.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.bytes</span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>614</span> 
<span class='line'>615</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.prkCA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>616</span> </span><span class="COMM">//	GPSystem.trace("Shared Secret K:");</span><span class="WHIT">
<span class='line'>617</span> </span><span class="COMM">//	GPSystem.trace(k);</span><span class="WHIT">
<span class='line'>618</span> </span><span class="WHIT">	</span><span class="NAME">this.kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>619</span> </span><span class="WHIT">	</span><span class="NAME">this.kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>620</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>621</span> 
<span class='line'>622</span> 
<span class='line'>623</span> 
<span class='line'>624</span> </span><span class="COMM">/**
<span class='line'>625</span>  * Calculate and verify the authentication token over the public key received from
<span class='line'>626</span>  * the other side
<span class='line'>627</span>  *
<span class='line'>628</span>  * @param {ByteString} the MAC over the authentication data
<span class='line'>629</span>  * @return true if the MAC is valid
<span class='line'>630</span>  * @type Boolean
<span class='line'>631</span>  */</span><span class="WHIT">
<span class='line'>632</span> </span><span class="NAME">ChipAuthentication.prototype.verifyAuthenticationToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">authToken</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>633</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication.encodePublicKey</span><span class="PUNC">(</span><span class="NAME">this.algo.toString</span><span class="PUNC">(</span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.pukCA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.includeDPinAuthToken</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>634</span> </span><span class="COMM">//	GPSystem.trace("Authentication Token for verification:");</span><span class="WHIT">
<span class='line'>635</span> </span><span class="COMM">//	GPSystem.trace(t);</span><span class="WHIT">
<span class='line'>636</span> 
<span class='line'>637</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo.equals</span><span class="PUNC">(</span><span class="NAME">ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>638</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.noPadding</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>639</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>640</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>641</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>642</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>643</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">at</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_MAC_EMV</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>644</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">at.equals</span><span class="PUNC">(</span><span class="NAME">authToken</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>645</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>646</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">at</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>647</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">at.left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">authToken</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>648</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>649</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>650</span> 
<span class='line'>651</span> 
<span class='line'>652</span> 
<span class='line'>653</span> </span><span class="COMM">/**
<span class='line'>654</span>  * Calculate the authentication token over the public key received from
<span class='line'>655</span>  * the other side
<span class='line'>656</span>  *
<span class='line'>657</span>  * @param {ByteString} the MAC over the authentication data
<span class='line'>658</span>  * @return true if the MAC is valid
<span class='line'>659</span>  * @type Boolean
<span class='line'>660</span>  */</span><span class="WHIT">
<span class='line'>661</span> </span><span class="NAME">ChipAuthentication.prototype.calculateAuthenticationToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>662</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication.encodePublicKey</span><span class="PUNC">(</span><span class="NAME">this.algo.toString</span><span class="PUNC">(</span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.otherPuK</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.includeDPinAuthToken</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>663</span> </span><span class="COMM">//	GPSystem.trace("Authentication Token for signing:");</span><span class="WHIT">
<span class='line'>664</span> </span><span class="COMM">//	GPSystem.trace(t);</span><span class="WHIT">
<span class='line'>665</span> 
<span class='line'>666</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo.equals</span><span class="PUNC">(</span><span class="NAME">ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>667</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.noPadding</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>668</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>669</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>670</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>671</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>672</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">at</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_MAC_EMV</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>673</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>674</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">at</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>675</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>676</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">at</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>677</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>678</span> 
<span class='line'>679</span> 
<span class='line'>680</span> 
<span class='line'>681</span> </span><span class="COMM">/**
<span class='line'>682</span>  * Strips leading zeros of a ByteString
<span class='line'>683</span>  *
<span class='line'>684</span>  * @param {ByteString} value the ByteString value
<span class='line'>685</span>  * @return the stripped ByteString object, may be an empty ByteString
<span class='line'>686</span>  * @type ByteString
<span class='line'>687</span>  */</span><span class="WHIT">
<span class='line'>688</span> </span><span class="NAME">ChipAuthentication.stripLeadingZeros</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>689</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>690</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>691</span> 
<span class='line'>692</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value.right</span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>693</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>694</span> 
<span class='line'>695</span> 
<span class='line'>696</span> 
<span class='line'>697</span> </span><span class="COMM">/**
<span class='line'>698</span>  * Encode an ECC public key in the format defined by the EAC 2.0 specification
<span class='line'>699</span>  *
<span class='line'>700</span>  * @param {String} oid the object identifier to encode
<span class='line'>701</span>  * @param {Key} key the EC public key
<span class='line'>702</span>  * @param {Boolean} withDP true to encode domain parameter as well
<span class='line'>703</span>  */</span><span class="WHIT">
<span class='line'>704</span> </span><span class="NAME">ChipAuthentication.encodePublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">withDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>705</span> 
<span class='line'>706</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"ecPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F49</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>707</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"objectIdentifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>708</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">withDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>709</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"primeModulus"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>710</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"firstCoefficient"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>711</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"secondCoefficient"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>712</span> 
<span class='line'>713</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>714</span> </span><span class="WHIT">		</span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.concat</span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>715</span> </span><span class="WHIT">		</span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.concat</span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>716</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"basePoint"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>717</span> 
<span class='line'>718</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"orderOfTheBasePoint"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x85</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>719</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>720</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>721</span> </span><span class="WHIT">	</span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.concat</span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>722</span> </span><span class="WHIT">	</span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.concat</span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>723</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"publicPoint"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>724</span> 
<span class='line'>725</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">withDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>726</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cofactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>727</span> </span><span class="WHIT">		</span><span class="NAME">cofactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">cofactor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>728</span> 
<span class='line'>729</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"cofactor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x87</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cofactor</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>730</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>731</span> 
<span class='line'>732</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>733</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>734</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of the Extended Access Control protocol in version 2.0
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="COMM">// Imports</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVC'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PublicKeyReference'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> 
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PACEDomainParameterInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PACE'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PACEDomainParameterInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PACEInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PACE'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PACEInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PACE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PACE'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PACE</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 34</span> 
<span class='line'> 35</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/ChipAuthentication'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ChipAuthenticationInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationDomainParameterInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/ChipAuthentication'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ChipAuthenticationDomainParameterInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationPublicKeyInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/ChipAuthentication'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ChipAuthenticationPublicKeyInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/ChipAuthentication'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ChipAuthentication</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 39</span> 
<span class='line'> 40</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/RestrictedIdentification'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">RestrictedIdentification</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentificationInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/RestrictedIdentification'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">RestrictedIdentificationInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentificationDomainParameterInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/RestrictedIdentification'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">RestrictedIdentificationDomainParameterInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> 
<span class='line'> 44</span> 
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="COMM">/**
<span class='line'> 47</span>  * Create a protocol object for EAC
<span class='line'> 48</span>  *
<span class='line'> 49</span>  * @class Class implementing support for Extended Access Control V2
<span class='line'> 50</span>  * @constructor
<span class='line'> 51</span>  * @param {Crypto} crypto the crypto provider
<span class='line'> 52</span>  * @param {Card} card the card object
<span class='line'> 53</span>  */</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">EAC20</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">card</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">	</span><span class="NAME">this.card</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">card</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">	</span><span class="NAME">this.sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">	</span><span class="NAME">this.includeDPinAuthToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Standard for PACE version >= 2</span><span class="WHIT">
<span class='line'> 59</span> 
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="NAME">this.PACEInfos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">	</span><span class="NAME">this.PACEDPs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> 
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="NAME">this.CAInfos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="NAME">this.CADPs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">	</span><span class="NAME">this.CAPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> 
<span class='line'> 67</span> </span><span class="WHIT">	</span><span class="NAME">this.RIInfos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT">	</span><span class="NAME">this.maxRData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">	</span><span class="NAME">this.maxCData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">239</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Used for update binary</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">	</span><span class="NAME">this.useFID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Use FIDs rather than SFIs</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">	</span><span class="NAME">this.verbose</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">	</span><span class="NAME">this.selectADFwithoutSM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// Send SELECT ADF without SM (for applets)</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 74</span> 
<span class='line'> 75</span> </span><span class="NAME">exports.EAC20</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EAC20</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> 
<span class='line'> 77</span> 
<span class='line'> 78</span> </span><span class="COMM">/** PACE PWD is the hashed MRZ */</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="NAME">EAC20.ID_MRZ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="COMM">/** PACE PWD is the CAN */</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="NAME">EAC20.ID_CAN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="COMM">/** PACE PWD is the PIN */</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="NAME">EAC20.ID_PIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="COMM">/** PACE PWD is the PUK */</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="NAME">EAC20.ID_PUK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> 
<span class='line'> 87</span> </span><span class="NAME">EAC20.AID_LDS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"A0000002471001"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="NAME">EAC20.AID_eID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"E80704007F00070302"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="NAME">EAC20.AID_eSign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"A000000167455349474E"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> 
<span class='line'> 91</span> </span><span class="NAME">EAC20.SFI_CVCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x1C</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="NAME">EAC20.SFI_ChipSecurity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x1B</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="NAME">EAC20.SFI_CardAccess</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x1C</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="NAME">EAC20.SFI_CardSecurity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x1D</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="NAME">EAC20.SFI_COM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x1E</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 96</span> 
<span class='line'> 97</span> 
<span class='line'> 98</span> </span><span class="NAME">EAC20.prototype.log</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.verbose</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>102</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>103</span> 
<span class='line'>104</span> 
<span class='line'>105</span> 
<span class='line'>106</span> </span><span class="COMM">/**
<span class='line'>107</span>  * Process a list of security infos from EF.CardInfo, EF.CardSecurity or EF.ChipSecurity
<span class='line'>108</span>  *
<span class='line'>109</span>  * @param {ASN1} si the security info ASN Sequence
<span class='line'>110</span>  * @param {boolean} fromCardSecurity true if security infos are taken from EF.CardSecurity, EF.ChipSecurity or EF.DG14
<span class='line'>111</span>  */</span><span class="WHIT">
<span class='line'>112</span> </span><span class="NAME">EAC20.prototype.processSecurityInfos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">si</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fromCardSecurity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"SecurityInfos:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">si</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> 
<span class='line'>116</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_PACE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-PACE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_PACE_DH_GM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-PACE-DH-GM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_PACE_ECDH_GM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-PACE-ECDH-GM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_PACE_DH_IM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-PACE-DH-IM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_PACE_ECDH_IM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-PACE-ECDH-IM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_PK_ECDH</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-PK-ECDH"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_CA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-CA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_CA_DH</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-CA-DH"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_CA_ECDH</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-CA-ECDH"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_TA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id_PT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-PT"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> 
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">si.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">si.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">o.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.elements</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> 
<span class='line'>132</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">oid.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> 
<span class='line'>135</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.startsWith</span><span class="PUNC">(</span><span class="NAME">id_TA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">id_TA.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">			</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"TA : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.startsWith</span><span class="PUNC">(</span><span class="NAME">id_PACE</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">id_PACE.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">id_PACE_DH_GM</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">				</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">id_PACE_ECDH_GM</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">				</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">id_PACE_DH_IM</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">				</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">id_PACE_ECDH_GM</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"PaceDomainParameterInfo : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pdpi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PACEDomainParameterInfo</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">pdpi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> 
<span class='line'>147</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdpi.parameterId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> 
<span class='line'>149</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">					</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>152</span> 
<span class='line'>153</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">fromCardSecurity</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.PACEDPs</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate parameterId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for PACEDomainParameter"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>156</span> 
<span class='line'>157</span> </span><span class="WHIT">				</span><span class="NAME">this.PACEDPs</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pdpi</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"PaceInfo : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> 
<span class='line'>161</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PACEInfo</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">pi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> 
<span class='line'>164</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pi.parameterId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> 
<span class='line'>166</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">					</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>169</span> 
<span class='line'>170</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pi.version</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">fromCardSecurity</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.PACEInfos</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">						</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate parameterId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for PACEInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">					</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">				</span><span class="NAME">this.PACEInfos</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pi</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">id_PK_ECDH</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">			</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"ChipAuthenticationPublicKeyInfo : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> 
<span class='line'>182</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">capki</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">			</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">capki</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> 
<span class='line'>185</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">capki.keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> 
<span class='line'>187</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Using default key id 0"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">				</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>191</span> 
<span class='line'>192</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">fromCardSecurity</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.CAPublicKeys</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for ChipAuthenticationPublicKeyInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="WHIT">			</span><span class="NAME">this.CAPublicKeys</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">capki</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.startsWith</span><span class="PUNC">(</span><span class="NAME">id_CA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">id_CA.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">id_CA_DH</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">				</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">id_CA_ECDH</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"ChipAuthenticationDomainParameterInfo : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> 
<span class='line'>202</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cadpi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationDomainParameterInfo</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">cadpi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> 
<span class='line'>205</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cadpi.keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> 
<span class='line'>207</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">					</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Using default key id 0"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">					</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>211</span> 
<span class='line'>212</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">fromCardSecurity</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.CADPs</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for ChipAuthenticationDomainParameter"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>215</span> 
<span class='line'>216</span> </span><span class="WHIT">				</span><span class="NAME">this.CADPs</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cadpi</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"ChipAuthenticationInfo : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> 
<span class='line'>220</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cai</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ChipAuthenticationInfo</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">cai</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span> 
<span class='line'>223</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cai.keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> 
<span class='line'>225</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">					</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Using default key id 0"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">					</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>229</span> 
<span class='line'>230</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">fromCardSecurity</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.CAInfos</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for ChipAuthenticationInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>233</span> 
<span class='line'>234</span> </span><span class="WHIT">				</span><span class="NAME">this.CAInfos</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cai</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.startsWith</span><span class="PUNC">(</span><span class="NAME">RestrictedIdentification.id_RI</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentification.id_RI.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">RestrictedIdentification.id_RI_DH</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">				</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">RestrictedIdentification.id_RI_ECDH</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"RestrictedIdentificationDomainParameterInfo : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> 
<span class='line'>241</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ridpi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentificationDomainParameterInfo</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">ridpi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> 
<span class='line'>244</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">fromCardSecurity</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.RIDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate RestrictedIdentificationDomainParameter"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">				</span><span class="NAME">this.RIDP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ridpi</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"RestrictedIdentificationInfo : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> 
<span class='line'>251</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rii</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentificationInfo</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">				</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">rii</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>253</span> 
<span class='line'>254</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rii.keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> 
<span class='line'>256</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">					</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Using default key id 0"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">					</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>260</span> 
<span class='line'>261</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">fromCardSecurity</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.RIInfos</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for RestrictedIdentificationInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>264</span> 
<span class='line'>265</span> </span><span class="WHIT">				</span><span class="NAME">this.RIInfos</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rii</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="NAME">id_PT</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">			</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"PrivilegedTerminalInfo : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">			</span><span class="NAME">this.processSecurityInfos</span><span class="PUNC">(</span><span class="NAME">o.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fromCardSecurity</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>272</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>273</span> 
<span class='line'>274</span> 
<span class='line'>275</span> 
<span class='line'>276</span> </span><span class="COMM">/**
<span class='line'>277</span>  * Select EF using FID and read elementary file
<span class='line'>278</span>  *
<span class='line'>279</span>  * @param {ByteString} fid 2 byte file identifier
<span class='line'>280</span>  * @type ByteString
<span class='line'>281</span>  * @return the content of the EF
<span class='line'>282</span>  */</span><span class="WHIT">
<span class='line'>283</span> </span><span class="NAME">EAC20.prototype.readEFwithFID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">fid.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Length of fid must be 2 bytes"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>286</span> 
<span class='line'>287</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">	</span><span class="KEYW">do</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.maxRData</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">		</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rsp.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>294</span> 
<span class='line'>295</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>297</span> 
<span class='line'>298</span> 
<span class='line'>299</span> 
<span class='line'>300</span> </span><span class="COMM">/**
<span class='line'>301</span>  * Select EF using FID and update content
<span class='line'>302</span>  *
<span class='line'>303</span>  * @param {ByteString} fid 2 byte file identifier
<span class='line'>304</span>  * @param {ByteString} data data to be written
<span class='line'>305</span>  */</span><span class="WHIT">
<span class='line'>306</span> </span><span class="NAME">EAC20.prototype.updateEFwithFID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">fid.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Length of fid must be 2 bytes"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> 
<span class='line'>310</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">		</span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxCData</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this.maxCData</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data.bytes</span><span class="PUNC">(</span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">		</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>317</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>318</span> 
<span class='line'>319</span> 
<span class='line'>320</span> 
<span class='line'>321</span> </span><span class="COMM">/**
<span class='line'>322</span>  * Select and read EF using SFI
<span class='line'>323</span>  *
<span class='line'>324</span>  * @param {Number} short file identifier
<span class='line'>325</span>  * @type ByteString
<span class='line'>326</span>  * @return the content of the EF
<span class='line'>327</span>  */</span><span class="WHIT">
<span class='line'>328</span> </span><span class="NAME">EAC20.prototype.readEFwithSFI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Parameter must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>330</span> 
<span class='line'>331</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.useFID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x0100</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.readEFwithFID</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>335</span> 
<span class='line'>336</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.maxRData</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> 
<span class='line'>338</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">	</span><span class="KEYW">do</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.maxRData</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>343</span> </span><span class="WHIT">		</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>344</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rsp.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>345</span> 
<span class='line'>346</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>347</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>348</span> 
<span class='line'>349</span> 
<span class='line'>350</span> 
<span class='line'>351</span> </span><span class="COMM">/**
<span class='line'>352</span>  * Select and read a TLV encoded EF using SFI
<span class='line'>353</span>  *
<span class='line'>354</span>  * @param {Number} short file identifier
<span class='line'>355</span>  * @type ByteString
<span class='line'>356</span>  * @return the TLV content of the EF
<span class='line'>357</span>  */</span><span class="WHIT">
<span class='line'>358</span> </span><span class="NAME">EAC20.prototype.readTLVEFwithSFI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Parameter must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>360</span> 
<span class='line'>361</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.useFID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x0100</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.readEFwithFID</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>364</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>365</span> 
<span class='line'>366</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.maxRData</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>367</span> 
<span class='line'>368</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">	</span><span class="KEYW">do</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.maxRData</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>372</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">		</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rsp.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>375</span> 
<span class='line'>376</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>377</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>378</span> 
<span class='line'>379</span> 
<span class='line'>380</span> 
<span class='line'>381</span> </span><span class="COMM">/**
<span class='line'>382</span>  * Select EF using SFI and update content
<span class='line'>383</span>  *
<span class='line'>384</span>  * @param {Number} short file identifier
<span class='line'>385</span>  * @param {ByteString} data data to be written
<span class='line'>386</span>  */</span><span class="WHIT">
<span class='line'>387</span> </span><span class="NAME">EAC20.prototype.updateEFwithSFI</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>388</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">sfi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Parameter must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>389</span> 
<span class='line'>390</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.useFID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>391</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x0100</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>392</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.updateEFwithFID</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>393</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>394</span> 
<span class='line'>395</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NAME">sfi</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT">		</span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxCData</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this.maxCData</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data.bytes</span><span class="PUNC">(</span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">		</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">		</span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>403</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>404</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>405</span> 
<span class='line'>406</span> 
<span class='line'>407</span> 
<span class='line'>408</span> </span><span class="COMM">/**
<span class='line'>409</span>  * Select application DF
<span class='line'>410</span>  *
<span class='line'>411</span>  * @param {ByteString} aid the application identifier
<span class='line'>412</span>  */</span><span class="WHIT">
<span class='line'>413</span> </span><span class="NAME">EAC20.prototype.selectADF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">aid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.selectADFwithoutSM</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendApdu</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>419</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>420</span> 
<span class='line'>421</span> 
<span class='line'>422</span> 
<span class='line'>423</span> </span><span class="COMM">/**
<span class='line'>424</span>  * Select ePass LDS Application
<span class='line'>425</span>  */</span><span class="WHIT">
<span class='line'>426</span> </span><span class="NAME">EAC20.prototype.selectLDS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>427</span> </span><span class="WHIT">	</span><span class="NAME">this.selectADF</span><span class="PUNC">(</span><span class="NAME">EAC20.AID_LDS</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>428</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>429</span> 
<span class='line'>430</span> 
<span class='line'>431</span> 
<span class='line'>432</span> </span><span class="COMM">/**
<span class='line'>433</span>  * Select eID Application
<span class='line'>434</span>  */</span><span class="WHIT">
<span class='line'>435</span> </span><span class="NAME">EAC20.prototype.select_eID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>436</span> </span><span class="WHIT">	</span><span class="NAME">this.selectADF</span><span class="PUNC">(</span><span class="NAME">EAC20.AID_eID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>437</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>438</span> 
<span class='line'>439</span> 
<span class='line'>440</span> 
<span class='line'>441</span> </span><span class="COMM">/**
<span class='line'>442</span>  * Select eSign Application
<span class='line'>443</span>  */</span><span class="WHIT">
<span class='line'>444</span> </span><span class="NAME">EAC20.prototype.select_eSign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>445</span> </span><span class="WHIT">	</span><span class="NAME">this.selectADF</span><span class="PUNC">(</span><span class="NAME">EAC20.AID_eSign</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>446</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>447</span> 
<span class='line'>448</span> 
<span class='line'>449</span> 
<span class='line'>450</span> </span><span class="COMM">/**
<span class='line'>451</span>  * Read EF.DG14 and process security infos
<span class='line'>452</span>  *
<span class='line'>453</span>  */</span><span class="WHIT">
<span class='line'>454</span> </span><span class="NAME">EAC20.prototype.readDG14</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cibin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readEFwithSFI</span><span class="PUNC">(</span><span class="NUMB">14</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">citlv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">cibin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">citlv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>458</span> 
<span class='line'>459</span> </span><span class="WHIT">	</span><span class="NAME">this.processSecurityInfos</span><span class="PUNC">(</span><span class="NAME">citlv.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>460</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>461</span> 
<span class='line'>462</span> 
<span class='line'>463</span> 
<span class='line'>464</span> </span><span class="COMM">/**
<span class='line'>465</span>  * Read EF.CVCA and process contained CARs
<span class='line'>466</span>  *
<span class='line'>467</span>  */</span><span class="WHIT">
<span class='line'>468</span> </span><span class="NAME">EAC20.prototype.readCVCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>469</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvcabin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readEFwithSFI</span><span class="PUNC">(</span><span class="NAME">EAC20.SFI_CVCA</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>470</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">cvcabin.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x42</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>471</span> 
<span class='line'>472</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">cvcabin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>473</span> </span><span class="WHIT">	</span><span class="NAME">this.lastCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">cvca.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>474</span> 
<span class='line'>475</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvcabin.byteAt</span><span class="PUNC">(</span><span class="NAME">cvca.size</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x42</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>476</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">cvcabin.bytes</span><span class="PUNC">(</span><span class="NAME">cvca.size</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>477</span> </span><span class="WHIT">		</span><span class="NAME">this.previousCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">cvca.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>478</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>479</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>480</span> 
<span class='line'>481</span> 
<span class='line'>482</span> 
<span class='line'>483</span> </span><span class="COMM">/**
<span class='line'>484</span>  * Read EF.CardAccess and process security infos
<span class='line'>485</span>  *
<span class='line'>486</span>  */</span><span class="WHIT">
<span class='line'>487</span> </span><span class="NAME">EAC20.prototype.readCardAccess</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>488</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cibin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readEFwithSFI</span><span class="PUNC">(</span><span class="NAME">EAC20.SFI_CardAccess</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>489</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">citlv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">cibin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>490</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">citlv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>491</span> 
<span class='line'>492</span> </span><span class="WHIT">	</span><span class="NAME">this.processSecurityInfos</span><span class="PUNC">(</span><span class="NAME">citlv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>493</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>494</span> 
<span class='line'>495</span> </span><span class="COMM">// Deprecated</span><span class="WHIT">
<span class='line'>496</span> </span><span class="NAME">EAC20.prototype.readCardInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EAC20.prototype.readCardAccess</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>497</span> 
<span class='line'>498</span> 
<span class='line'>499</span> 
<span class='line'>500</span> </span><span class="COMM">/**
<span class='line'>501</span>  * Read EF.CardSecurity and process security infos
<span class='line'>502</span>  */</span><span class="WHIT">
<span class='line'>503</span> </span><span class="NAME">EAC20.prototype.readCardSecurity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">csbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readEFwithSFI</span><span class="PUNC">(</span><span class="NAME">EAC20.SFI_CardSecurity</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cstlv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">csbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"EF.CardSecurity:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>507</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">cstlv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>508</span> 
<span class='line'>509</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CMSSignedData</span><span class="PUNC">(</span><span class="NAME">csbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>510</span> 
<span class='line'>511</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cms.getSignedDataCertificates</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>512</span> 
<span class='line'>513</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"EF.CardSecurity Certificates:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>514</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">certs.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">certs</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>516</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>517</span> 
<span class='line'>518</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"DocSigner Signature is "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cms.isSignerInfoSignatureValid</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"valid"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"not valid"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>519</span> 
<span class='line'>520</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cms.getSignedContent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>521</span> 
<span class='line'>522</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>523</span> 
<span class='line'>524</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cstlv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>525</span> 
<span class='line'>526</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">cstlv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>527</span> 
<span class='line'>528</span> </span><span class="WHIT">	</span><span class="NAME">this.processSecurityInfos</span><span class="PUNC">(</span><span class="NAME">cstlv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>529</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>530</span> 
<span class='line'>531</span> 
<span class='line'>532</span> 
<span class='line'>533</span> </span><span class="COMM">/**
<span class='line'>534</span>  * Read EF.ChipSecurity and process security infos
<span class='line'>535</span>  */</span><span class="WHIT">
<span class='line'>536</span> </span><span class="NAME">EAC20.prototype.readChipSecurity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>537</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">csbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readEFwithSFI</span><span class="PUNC">(</span><span class="NAME">EAC20.SFI_ChipSecurity</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>538</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cstlv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">csbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>539</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"EF.ChipSecurity:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>540</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">cstlv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>541</span> 
<span class='line'>542</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CMSSignedData</span><span class="PUNC">(</span><span class="NAME">csbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>543</span> 
<span class='line'>544</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cms.getSignedDataCertificates</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>545</span> 
<span class='line'>546</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"EF.ChipSecurity Certificates:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>547</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">certs.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>548</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">certs</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>549</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>550</span> 
<span class='line'>551</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"DocSigner Signature is "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cms.isSignerInfoSignatureValid</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"valid"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"not valid"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>552</span> 
<span class='line'>553</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cms.getSignedContent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>554</span> 
<span class='line'>555</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>556</span> 
<span class='line'>557</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cstlv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>558</span> 
<span class='line'>559</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">cstlv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>560</span> 
<span class='line'>561</span> </span><span class="WHIT">	</span><span class="NAME">this.processSecurityInfos</span><span class="PUNC">(</span><span class="NAME">cstlv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>562</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>563</span> 
<span class='line'>564</span> 
<span class='line'>565</span> 
<span class='line'>566</span> </span><span class="COMM">/**
<span class='line'>567</span>  * Return the list of PACEInfo objects
<span class='line'>568</span>  *
<span class='line'>569</span>  * @return the list of PACEInfo objects read from the card, indexed by the parameterId
<span class='line'>570</span>  * @type PACEInfo[]
<span class='line'>571</span>  */</span><span class="WHIT">
<span class='line'>572</span> </span><span class="NAME">EAC20.prototype.getPACEInfos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>573</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.PACEInfos</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>574</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>575</span> 
<span class='line'>576</span> 
<span class='line'>577</span> 
<span class='line'>578</span> </span><span class="COMM">/**
<span class='line'>579</span>  * Return the list of PACEDomainParameterInfo objects
<span class='line'>580</span>  *
<span class='line'>581</span>  * @return the list of PACEDomainParameterInfo objects read from the card, indexed by the parameterId
<span class='line'>582</span>  * @type PACEDomainParameterInfo[]
<span class='line'>583</span>  */</span><span class="WHIT">
<span class='line'>584</span> </span><span class="NAME">EAC20.prototype.getPACEDomainParameterInfos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>585</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.PACEDPs</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>586</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>587</span> 
<span class='line'>588</span> 
<span class='line'>589</span> 
<span class='line'>590</span> </span><span class="COMM">/**
<span class='line'>591</span>  * Return the list of ChipAuthenticationInfo objects
<span class='line'>592</span>  *
<span class='line'>593</span>  * @return the list of ChipAuthenticationInfo objects read from the card, indexed by the keyId
<span class='line'>594</span>  * @type ChipAuthenticationInfo[]
<span class='line'>595</span>  */</span><span class="WHIT">
<span class='line'>596</span> </span><span class="NAME">EAC20.prototype.getCAInfos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>597</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.CAInfos</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>598</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>599</span> 
<span class='line'>600</span> 
<span class='line'>601</span> 
<span class='line'>602</span> </span><span class="COMM">/**
<span class='line'>603</span>  * Return the list of ChipAuthenticationDomainParameterInfo objects
<span class='line'>604</span>  *
<span class='line'>605</span>  * @return the list of ChipAuthenticationDomainParameterInfo objects read from the card, indexed by the keyId
<span class='line'>606</span>  * @type ChipAuthenticationDomainParameterInfo[]
<span class='line'>607</span>  */</span><span class="WHIT">
<span class='line'>608</span> </span><span class="NAME">EAC20.prototype.getCADomainParameterInfos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>609</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.CADPs</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>610</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>611</span> 
<span class='line'>612</span> 
<span class='line'>613</span> 
<span class='line'>614</span> </span><span class="COMM">/**
<span class='line'>615</span>  * Return the key id of the chip authentication key
<span class='line'>616</span>  *
<span class='line'>617</span>  * @return the key id
<span class='line'>618</span>  * @type
<span class='line'>619</span>  */</span><span class="WHIT">
<span class='line'>620</span> </span><span class="NAME">EAC20.prototype.getCAKeyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privileged</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>621</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.CAInfos</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// Locate first entry in list</span><span class="WHIT">
<span class='line'>622</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.CAInfos</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>623</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">privileged</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>624</span> </span><span class="WHIT">				</span><span class="NAME">privileged</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Select second key if privileged key requested</span><span class="WHIT">
<span class='line'>625</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>626</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.CAInfos</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>627</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>628</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>629</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>630</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>631</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>632</span> 
<span class='line'>633</span> 
<span class='line'>634</span> 
<span class='line'>635</span> </span><span class="COMM">/**
<span class='line'>636</span>  * Return the key id of the restricted identification key
<span class='line'>637</span>  *
<span class='line'>638</span>  * @param {boolean} authOnly return the RI key available after authentication only (to calculate the pseudonym)
<span class='line'>639</span>  * @return the key id
<span class='line'>640</span>  * @type
<span class='line'>641</span>  */</span><span class="WHIT">
<span class='line'>642</span> </span><span class="NAME">EAC20.prototype.getRIKeyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">authOnly</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>643</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="NAME">each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rii</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.RIInfos</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>644</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">authOnly</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">rii.authorizedOnly</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>645</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rii.keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>646</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>647</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>648</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>649</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>650</span> 
<span class='line'>651</span> 
<span class='line'>652</span> 
<span class='line'>653</span> </span><span class="COMM">/**
<span class='line'>654</span>  * Decode document number from 2 or 3 line MRZ
<span class='line'>655</span>  *
<span class='line'>656</span>  * &lt;p>This method supports a document number in a three line MRZ longer than 10 digits.&lt;/p>
<span class='line'>657</span>  *
<span class='line'>658</span>  * @param {String} mrz the concatenation of the MRZ lines
<span class='line'>659</span>  * @type String
<span class='line'>660</span>  * @return the document number
<span class='line'>661</span>  */</span><span class="WHIT">
<span class='line'>662</span> </span><span class="NAME">EAC20.decodeDocumentNumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mrz</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>663</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mrz.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">88</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">			</span><span class="COMM">// Two line MRZ</span><span class="WHIT">
<span class='line'>664</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">docno</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mrz.substr</span><span class="PUNC">(</span><span class="NUMB">44</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>665</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">						</span><span class="COMM">// Three line MRZ</span><span class="WHIT">
<span class='line'>666</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mrz.charAt</span><span class="PUNC">(</span><span class="NUMB">14</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"&lt;"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>667</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sep</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mrz.indexOf</span><span class="PUNC">(</span><span class="STRN">"&lt;"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">15</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>668</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">docno</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mrz.substr</span><span class="PUNC">(</span><span class="NUMB">5</span><span class="PUNC">,</span><span class="NUMB">9</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">mrz.substring</span><span class="PUNC">(</span><span class="NUMB">15</span><span class="PUNC">,</span><span class="NAME">sep</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>669</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>670</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">docno</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mrz.substr</span><span class="PUNC">(</span><span class="NUMB">5</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>671</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>672</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>673</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">docno</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>674</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>675</span> 
<span class='line'>676</span> 
<span class='line'>677</span> </span><span class="COMM">/**
<span class='line'>678</span>  * Calculate the hash over document number, date of birth and date of expiration from 2 or 3 line MRZ
<span class='line'>679</span>  *
<span class='line'>680</span>  * &lt;pre>
<span class='line'>681</span>  * 2 line MRZ of Silver Data Set
<span class='line'>682</span>  *   P&lt;UTOERIKSSON&lt;&lt;ANNA&lt;MARIA&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
<span class='line'>683</span>  *   L898902C&lt;3UTO6908061F9406236ZE184226B&lt;&lt;&lt;&lt;&lt;14
<span class='line'>684</span>  *   '-DocNo--'   '-DoB-' '-DoE-'
<span class='line'>685</span>  *
<span class='line'>686</span>  * 3 line MRZ of Silver Data Set
<span class='line'>687</span>  *   I&lt;UTOL898902C&lt;3&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
<span class='line'>688</span>  *        '-DocNo--'
<span class='line'>689</span>  *   6908061F9406236UTO&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;1
<span class='line'>690</span>  *   '-DoB-' '-DoE-'
<span class='line'>691</span>  *   ERIKSON&lt;&lt;ANNA&lt;MARIA&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
<span class='line'>692</span>  * &lt;/pre>
<span class='line'>693</span>  *
<span class='line'>694</span>  * @param {String} mrz 2 line or 3 line machine readable zone
<span class='line'>695</span>  * @type ByteString
<span class='line'>696</span>  * @return the SHA-1 hash over the concatenation of document number, date of birth and date of expiration
<span class='line'>697</span>  */</span><span class="WHIT">
<span class='line'>698</span> </span><span class="NAME">EAC20.prototype.hashMRZ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mrz</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>699</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash_input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">EAC20.decodeDocumentNumber</span><span class="PUNC">(</span><span class="NAME">mrz</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>700</span> </span><span class="WHIT">	</span><span class="COMM">// Convert to byte string</span><span class="WHIT">
<span class='line'>701</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">strbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">mrz</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>702</span> 
<span class='line'>703</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">strbin.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">88</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">			</span><span class="COMM">// 2 line MRZ</span><span class="WHIT">
<span class='line'>704</span> </span><span class="WHIT">		</span><span class="COMM">// Extract Date of Birth and Date of Expiration</span><span class="WHIT">
<span class='line'>705</span> </span><span class="WHIT">		</span><span class="NAME">hash_input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hash_input.concat</span><span class="PUNC">(</span><span class="NAME">strbin.bytes</span><span class="PUNC">(</span><span class="NUMB">57</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>706</span> </span><span class="WHIT">		</span><span class="NAME">hash_input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hash_input.concat</span><span class="PUNC">(</span><span class="NAME">strbin.bytes</span><span class="PUNC">(</span><span class="NUMB">65</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>707</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">strbin.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">90</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// 3 line MRZ</span><span class="WHIT">
<span class='line'>708</span> </span><span class="WHIT">		</span><span class="COMM">// Extract Date of Birth and Date of Expiration</span><span class="WHIT">
<span class='line'>709</span> </span><span class="WHIT">		</span><span class="NAME">hash_input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hash_input.concat</span><span class="PUNC">(</span><span class="NAME">strbin.bytes</span><span class="PUNC">(</span><span class="NUMB">30</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>710</span> </span><span class="WHIT">		</span><span class="NAME">hash_input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hash_input.concat</span><span class="PUNC">(</span><span class="NAME">strbin.bytes</span><span class="PUNC">(</span><span class="NUMB">38</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>711</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>712</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">strbin.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"MRZ must be either 88 or 90 character long"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>713</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>714</span> 
<span class='line'>715</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Hash Input : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">hash_input.toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>716</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mrz_hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hash_input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>717</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"MRZ Hash : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">mrz_hash</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>718</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">mrz_hash</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>719</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>720</span> 
<span class='line'>721</span> 
<span class='line'>722</span> 
<span class='line'>723</span> </span><span class="COMM">/**
<span class='line'>724</span>  * Calculate the Basic Access Control (BAC) key from the MRZ
<span class='line'>725</span>  *
<span class='line'>726</span>  * @param {String} mrz 2 line or 3 line machine readable zone
<span class='line'>727</span>  * @param {Number} keyno Number of key to calculate (1 for Kenc and 2 for Kmac)
<span class='line'>728</span>  * @type Key
<span class='line'>729</span>  * @returns the key object
<span class='line'>730</span>  */</span><span class="WHIT">
<span class='line'>731</span> </span><span class="NAME">EAC20.prototype.calculateBACKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mrz</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyno</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>732</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mrz_hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.hashMRZ</span><span class="PUNC">(</span><span class="NAME">mrz</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>733</span> 
<span class='line'>734</span> </span><span class="WHIT">	</span><span class="COMM">// Extract first 16 byte and append 00000001 or 00000002</span><span class="WHIT">
<span class='line'>735</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="NAME">mrz_hash.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>736</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>737</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">keyno</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>738</span> 
<span class='line'>739</span> </span><span class="WHIT">	</span><span class="COMM">// Hash again to calculate key value</span><span class="WHIT">
<span class='line'>740</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>741</span> </span><span class="WHIT">	</span><span class="NAME">keyval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyval.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>742</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Value of Key : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyval</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>743</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>744</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.DES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyval</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>745</span> 
<span class='line'>746</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>747</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>748</span> 
<span class='line'>749</span> 
<span class='line'>750</span> 
<span class='line'>751</span> </span><span class="COMM">/**
<span class='line'>752</span>  * Perform BAC using the provided Kenc and Kmac values.
<span class='line'>753</span>  *
<span class='line'>754</span>  * @param {Key} kenc the key Kenc
<span class='line'>755</span>  * @param {Key} kmac the key Kmac
<span class='line'>756</span>  */</span><span class="WHIT">
<span class='line'>757</span> </span><span class="NAME">EAC20.prototype.performBACWithMRZ</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mrz</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>758</span> </span><span class="WHIT">	</span><span class="NAME">this.setIDPICC</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">EAC20.decodeDocumentNumber</span><span class="PUNC">(</span><span class="NAME">mrz</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>759</span> 
<span class='line'>760</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.calculateBACKey</span><span class="PUNC">(</span><span class="NAME">mrz</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>761</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.calculateBACKey</span><span class="PUNC">(</span><span class="NAME">mrz</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>762</span> 
<span class='line'>763</span> </span><span class="WHIT">	</span><span class="NAME">this.performBAC</span><span class="PUNC">(</span><span class="NAME">kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>764</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>765</span> 
<span class='line'>766</span> 
<span class='line'>767</span> 
<span class='line'>768</span> </span><span class="COMM">/**
<span class='line'>769</span>  * Perform BAC using the provided Kenc and Kmac values.
<span class='line'>770</span>  *
<span class='line'>771</span>  * @param {Key} kenc the key Kenc
<span class='line'>772</span>  * @param {Key} kmac the key Kmac
<span class='line'>773</span>  */</span><span class="WHIT">
<span class='line'>774</span> </span><span class="NAME">EAC20.prototype.performBAC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>775</span> 
<span class='line'>776</span> </span><span class="WHIT">	</span><span class="COMM">// GET CHALLENGE</span><span class="WHIT">
<span class='line'>777</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rndicc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendApdu</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x08</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>778</span> 
<span class='line'>779</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rndifd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>780</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kifd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>781</span> 
<span class='line'>782</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rndifd.concat</span><span class="PUNC">(</span><span class="NAME">rndicc</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">kifd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>783</span> 
<span class='line'>784</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>785</span> 
<span class='line'>786</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_MAC_EMV</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cryptogram.pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>787</span> 
<span class='line'>788</span> </span><span class="WHIT">	</span><span class="COMM">// EXTERNAL AUTHENTICATE</span><span class="WHIT">
<span class='line'>789</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">autresp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendApdu</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cryptogram.concat</span><span class="PUNC">(</span><span class="NAME">mac</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>790</span> 
<span class='line'>791</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>792</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Mutual authenticate failed with "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.card.SW.toString</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" \""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.card.SWMSG</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\". MRZ correct ?"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>793</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Card did not accept MAC in BAC establishment"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>794</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>795</span> 
<span class='line'>796</span> </span><span class="WHIT">	</span><span class="NAME">cryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">autresp.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>797</span> </span><span class="WHIT">	</span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">autresp.bytes</span><span class="PUNC">(</span><span class="NUMB">32</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>798</span> 
<span class='line'>799</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.crypto.verify</span><span class="PUNC">(</span><span class="NAME">kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_MAC_EMV</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cryptogram.pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>800</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Card MAC did not verify correctly"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>801</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>802</span> 
<span class='line'>803</span> </span><span class="WHIT">	</span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cryptogram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>804</span> 
<span class='line'>805</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">plain.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">rndicc</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>806</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Card response does not contain matching RND.ICC"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>807</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>808</span> 
<span class='line'>809</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">plain.bytes</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">rndifd</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>810</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Card response does not contain matching RND.IFD"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>811</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>812</span> 
<span class='line'>813</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kicc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plain.bytes</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>814</span> </span><span class="WHIT">	</span><span class="NAME">keyinp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kicc.xor</span><span class="PUNC">(</span><span class="NAME">kifd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>815</span> 
<span class='line'>816</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hashin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyinp.concat</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000001"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>817</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kencval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hashin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>818</span> </span><span class="WHIT">	</span><span class="NAME">kencval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kencval.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>819</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>820</span> </span><span class="WHIT">	</span><span class="NAME">kenc.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.DES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kencval</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>821</span> 
<span class='line'>822</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hashin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyinp.concat</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000002"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>823</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kmacval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hashin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>824</span> </span><span class="WHIT">	</span><span class="NAME">kmacval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kmacval.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>825</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>826</span> </span><span class="WHIT">	</span><span class="NAME">kmac.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.DES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kmacval</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>827</span> 
<span class='line'>828</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ssc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rndicc.bytes</span><span class="PUNC">(</span><span class="NUMB">4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">rndifd.bytes</span><span class="PUNC">(</span><span class="NUMB">4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>829</span> 
<span class='line'>830</span> </span><span class="WHIT">	</span><span class="NAME">this.sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>831</span> </span><span class="WHIT">	</span><span class="NAME">this.sm.setEncKey</span><span class="PUNC">(</span><span class="NAME">kenc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>832</span> </span><span class="WHIT">	</span><span class="NAME">this.sm.setMacKey</span><span class="PUNC">(</span><span class="NAME">kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>833</span> </span><span class="WHIT">	</span><span class="NAME">this.sm.setSendSequenceCounter</span><span class="PUNC">(</span><span class="NAME">ssc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>834</span> 
<span class='line'>835</span> </span><span class="WHIT">	</span><span class="NAME">this.card.setCredential</span><span class="PUNC">(</span><span class="NAME">this.sm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>836</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>837</span> 
<span class='line'>838</span> 
<span class='line'>839</span> 
<span class='line'>840</span> </span><span class="COMM">/**
<span class='line'>841</span>  * Perform PACE using the indicated parameter set, the identified password, the password value and
<span class='line'>842</span>  * an optional cardholder authentication template.
<span class='line'>843</span>  *
<span class='line'>844</span>  * &lt;p>This method supports PACE version 1 and 2. For version 2, parameterId with a value between 0 and 31 denotes
<span class='line'>845</span>  * a standardized domain parameter as defined in TR-03110 2.04 or later.&lt;/p>
<span class='line'>846</span>  *
<span class='line'>847</span>  * @param {Number} parameterId the identifier for the PACEInfo and PACEDomainParameterInfo from EF.CardInfo. Use 0 for
<span class='line'>848</span>  *                             the default.
<span class='line'>849</span>  * @param {Number} pwdid one of EAC20.ID_MRZ, EAC20.ID_CAN, EAC20.ID_PIN, EAC20.ID_PUK
<span class='line'>850</span>  * @param {ByteString} pwd the PACE password or PACE key
<span class='line'>851</span>  * @param {ASN1} chat the CHAT data object with tag 7F4C or null
<span class='line'>852</span>  * @param {ASN1} certExt the certificate extensions data object with tag 65 or null
<span class='line'>853</span>  */</span><span class="WHIT">
<span class='line'>854</span> </span><span class="NAME">EAC20.prototype.performPACE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">parameterId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pwdid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pwd</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chat</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certExt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>855</span> 
<span class='line'>856</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">paceinfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.PACEInfos</span><span class="PUNC">[</span><span class="NAME">parameterId</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>857</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">paceinfo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>858</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown parameterId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">parameterId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for PACEInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>859</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>860</span> 
<span class='line'>861</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">domainParameter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>862</span> 
<span class='line'>863</span> </span><span class="WHIT">	</span><span class="COMM">// Used for Chip Authentication</span><span class="WHIT">
<span class='line'>864</span> </span><span class="WHIT">	</span><span class="NAME">this.includeDPinAuthToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">paceinfo.version</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>865</span> 
<span class='line'>866</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">paceinfo.version</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">paceinfo.version</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parameterId</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">31</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>867</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pacedp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.PACEDPs</span><span class="PUNC">[</span><span class="NAME">parameterId</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>868</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">pacedp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>869</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown parameterId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">parameterId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for PACEDomainParameterInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>870</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>871</span> </span><span class="WHIT">		</span><span class="NAME">domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pacedp.domainParameter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>872</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>873</span> </span><span class="WHIT">		</span><span class="NAME">domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACEDomainParameterInfo.getStandardizedDomainParameter</span><span class="PUNC">(</span><span class="NAME">parameterId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>874</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>875</span> 
<span class='line'>876</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">pwd</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">pwd</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>877</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument pwd must be of type ByteString or Key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>878</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>879</span> 
<span class='line'>880</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">chat</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">chat</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>881</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument chat must be of type ASN1"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>882</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>883</span> 
<span class='line'>884</span> 
<span class='line'>885</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PACE</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">paceinfo.protocol</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">domainParameter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">paceinfo.version</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>886</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pwd</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="PUNC">(</span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>887</span> </span><span class="WHIT">		</span><span class="NAME">pace.setPassword</span><span class="PUNC">(</span><span class="NAME">pwd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>888</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>889</span> </span><span class="WHIT">		</span><span class="NAME">pace.setPACEKey</span><span class="PUNC">(</span><span class="NAME">pwd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>890</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>891</span> 
<span class='line'>892</span> </span><span class="WHIT">	</span><span class="COMM">// Manage SE</span><span class="WHIT">
<span class='line'>893</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>894</span> </span><span class="WHIT">	</span><span class="NAME">crt.append</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">paceinfo.protocol</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>895</span> </span><span class="WHIT">	</span><span class="NAME">crt.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"8301"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>896</span> </span><span class="WHIT">	</span><span class="NAME">crt.append</span><span class="PUNC">(</span><span class="NAME">pwdid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>897</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chat</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>898</span> </span><span class="WHIT">		</span><span class="NAME">crt.append</span><span class="PUNC">(</span><span class="NAME">chat.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>899</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>900</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">certExt</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>901</span> </span><span class="WHIT">		</span><span class="NAME">crt.append</span><span class="PUNC">(</span><span class="NAME">certExt.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>902</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>903</span> 
<span class='line'>904</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xC1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">crt.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x63C2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x63C1</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>905</span> 
<span class='line'>906</span> </span><span class="WHIT">	</span><span class="COMM">// General Authenticate</span><span class="WHIT">
<span class='line'>907</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x7C</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>908</span> 
<span class='line'>909</span> </span><span class="WHIT">	</span><span class="NAME">dadobin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">|</span><span class="NAME">Card.RENC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x10</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dado.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>910</span> 
<span class='line'>911</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">dadobin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>912</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x7C</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>913</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>914</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">encryptedNonceDO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>915</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">encryptedNonceDO.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>916</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">encryptedNonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">encryptedNonceDO.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>917</span> 
<span class='line'>918</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Encrypted nonce: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">encryptedNonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>919</span> 
<span class='line'>920</span> </span><span class="WHIT">	</span><span class="NAME">pace.decryptNonce</span><span class="PUNC">(</span><span class="NAME">encryptedNonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>921</span> 
<span class='line'>922</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mappingData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pace.getMappingData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>923</span> 
<span class='line'>924</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x7C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mappingData</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>925</span> 
<span class='line'>926</span> </span><span class="WHIT">	</span><span class="NAME">dadobin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">|</span><span class="NAME">Card.RENC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x10</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dado.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>927</span> 
<span class='line'>928</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">dadobin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>929</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x7C</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>930</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>931</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mappingDataDO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>932</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">mappingDataDO.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>933</span> 
<span class='line'>934</span> </span><span class="WHIT">	</span><span class="NAME">pace.performMapping</span><span class="PUNC">(</span><span class="NAME">mappingDataDO.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>935</span> 
<span class='line'>936</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ephemeralPublicKeyIfd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pace.getEphemeralPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>937</span> 
<span class='line'>938</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x7C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ephemeralPublicKeyIfd</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>939</span> 
<span class='line'>940</span> </span><span class="WHIT">	</span><span class="NAME">dadobin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">|</span><span class="NAME">Card.RENC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x10</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dado.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>941</span> 
<span class='line'>942</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">dadobin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>943</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x7C</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>944</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>945</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ephemeralPublicKeyICC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>946</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ephemeralPublicKeyICC.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>947</span> 
<span class='line'>948</span> </span><span class="WHIT">	</span><span class="NAME">this.idPICC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ephemeralPublicKeyICC.value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ephemeralPublicKeyICC.value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>949</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"ID_PICC : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.idPICC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>950</span> 
<span class='line'>951</span> </span><span class="WHIT">	</span><span class="NAME">pace.performKeyAgreement</span><span class="PUNC">(</span><span class="NAME">ephemeralPublicKeyICC.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>952</span> 
<span class='line'>953</span> 
<span class='line'>954</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">authToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pace.calculateAuthenticationToken</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>955</span> 
<span class='line'>956</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x7C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x85</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">authToken</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>957</span> 
<span class='line'>958</span> </span><span class="WHIT">	</span><span class="NAME">dadobin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">|</span><span class="NAME">Card.RENC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dado.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x63C2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x63C1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x63C0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6283</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>959</span> 
<span class='line'>960</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFFF0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x63C0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>961</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.DEVICE_ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Authentication failed: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" tries left"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>962</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>963</span> 
<span class='line'>964</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x6300</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>965</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.DEVICE_ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Authentication failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>966</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>967</span> 
<span class='line'>968</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">dadobin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>969</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">dado</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>970</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x7C</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>971</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>972</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.elements</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>973</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">authTokenDO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>974</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">authTokenDO.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>975</span> 
<span class='line'>976</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dado.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>977</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cardo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>978</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">cardo.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x87</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>979</span> </span><span class="WHIT">		</span><span class="NAME">this.lastCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">cardo.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>980</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>981</span> 
<span class='line'>982</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dado.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>983</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cardo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>984</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">cardo.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x88</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>985</span> </span><span class="WHIT">		</span><span class="NAME">this.previousCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">cardo.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>986</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>987</span> 
<span class='line'>988</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>989</span> 
<span class='line'>990</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pace.verifyAuthenticationToken</span><span class="PUNC">(</span><span class="NAME">authTokenDO.value</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>991</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Authentication token valid"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>992</span> 
<span class='line'>993</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">symalgo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pace.getSymmetricAlgorithm</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>994</span> 
<span class='line'>995</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">symalgo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>996</span> </span><span class="WHIT">			</span><span class="NAME">sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel.SSC_SYNC_ENC_POLICY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>997</span> </span><span class="WHIT">			</span><span class="NAME">sm.setEncKey</span><span class="PUNC">(</span><span class="NAME">pace.kenc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>998</span> </span><span class="WHIT">			</span><span class="NAME">sm.setMacKey</span><span class="PUNC">(</span><span class="NAME">pace.kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>999</span> </span><span class="WHIT">			</span><span class="NAME">sm.setMACSendSequenceCounter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1000</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1001</span> </span><span class="WHIT">			</span><span class="NAME">sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1002</span> </span><span class="WHIT">			</span><span class="NAME">sm.setEncKey</span><span class="PUNC">(</span><span class="NAME">pace.kenc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1003</span> </span><span class="WHIT">			</span><span class="NAME">sm.setMacKey</span><span class="PUNC">(</span><span class="NAME">pace.kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1004</span> </span><span class="WHIT">			</span><span class="NAME">sm.setMACSendSequenceCounter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1005</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1006</span> </span><span class="WHIT">		</span><span class="NAME">this.card.setCredential</span><span class="PUNC">(</span><span class="NAME">sm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1007</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1008</span> </span><span class="WHIT">	</span><span class="NAME">this.sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1009</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1010</span> 
<span class='line'>1011</span> 
<span class='line'>1012</span> 
<span class='line'>1013</span> </span><span class="COMM">/**
<span class='line'>1014</span>  * Return the trust anchor's CAR as indicated by the card in the PACE protocol
<span class='line'>1015</span>  *
<span class='line'>1016</span>  * @param {boolean} previous, true to return the previous CAR, if any
<span class='line'>1017</span>  * @return the CertificationAuthorityReference (CAR)
<span class='line'>1018</span>  * @type PublicKeyReference
<span class='line'>1019</span>  */</span><span class="WHIT">
<span class='line'>1020</span> </span><span class="NAME">EAC20.prototype.getTrustAnchorCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">previous</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1021</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">previous</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1022</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.previousCAR</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1023</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1024</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.lastCAR</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1025</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1026</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1027</span> 
<span class='line'>1028</span> 
<span class='line'>1029</span> 
<span class='line'>1030</span> </span><span class="COMM">/**
<span class='line'>1031</span>  * Submit a list of certificates to the card for verification
<span class='line'>1032</span>  *
<span class='line'>1033</span>  * @param {CVC[]} cvcchain the list of certificates, starting with link certificates, DVCA certificate and terminal certificate.
<span class='line'>1034</span>  */</span><span class="WHIT">
<span class='line'>1035</span> </span><span class="NAME">EAC20.prototype.verifyCertificateChain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cvcchain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1036</span> 
<span class='line'>1037</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvcchain.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1038</span> </span><span class="WHIT">	</span><span class="KEYW">do</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1039</span> </span><span class="WHIT">		</span><span class="NAME">i</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1040</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvcchain</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1041</span> 
<span class='line'>1042</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1043</span> 
<span class='line'>1044</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukrefdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1045</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pukrefdo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1046</span> 
<span class='line'>1047</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1048</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1049</span> 
<span class='line'>1050</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">cvcchain.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1051</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvcchain</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1052</span> 
<span class='line'>1053</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1054</span> 
<span class='line'>1055</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukrefdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1056</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pukrefdo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1057</span> 
<span class='line'>1058</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1059</span> 
<span class='line'>1060</span> </span><span class="WHIT">		</span><span class="COMM">// Extract value of 7F21</span><span class="WHIT">
<span class='line'>1061</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TLVList</span><span class="PUNC">(</span><span class="NAME">cvc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">TLV.EMV</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1062</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tl.index</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1063</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.getValue</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1064</span> 
<span class='line'>1065</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Certificate: "</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1066</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1067</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x2A</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xBE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1068</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1069</span> 
<span class='line'>1070</span> </span><span class="WHIT">	</span><span class="NAME">this.terminalCert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvcchain</span><span class="PUNC">[</span><span class="NAME">cvcchain.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1071</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1072</span> 
<span class='line'>1073</span> 
<span class='line'>1074</span> 
<span class='line'>1075</span> </span><span class="COMM">/**
<span class='line'>1076</span>  * Set the ID_PICC used for terminal authentication in EAC 1.11
<span class='line'>1077</span>  *
<span class='line'>1078</span>  * @param {ByteString} id
<span class='line'>1079</span>  * @param {Key} kmac the key Kmac
<span class='line'>1080</span>  */</span><span class="WHIT">
<span class='line'>1081</span> </span><span class="NAME">EAC20.prototype.setIDPICC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">idPICC</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1082</span> </span><span class="WHIT">	</span><span class="NAME">this.idPICC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">idPICC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1083</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1084</span> 
<span class='line'>1085</span> 
<span class='line'>1086</span> 
<span class='line'>1087</span> </span><span class="COMM">/**
<span class='line'>1088</span>  * Perform terminal authentication using a given terminal key
<span class='line'>1089</span>  *
<span class='line'>1090</span>  * @param {Key} termkey the terminal private key
<span class='line'>1091</span>  * @param {ByteString} auxdata auxiliary data (tag '67') to be included in terminal authentication
<span class='line'>1092</span>  * @param {Crypto} crypto optional alternative crypto provider (e.g. for key in SmartCard-HSM)
<span class='line'>1093</span>  */</span><span class="WHIT">
<span class='line'>1094</span> </span><span class="NAME">EAC20.prototype.performTerminalAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">termkey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">auxdata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1095</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureInput</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.performTerminalAuthenticationSetup</span><span class="PUNC">(</span><span class="NAME">auxdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1096</span> 
<span class='line'>1097</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1098</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1099</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1100</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.sign</span><span class="PUNC">(</span><span class="NAME">termkey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CVC.getSignatureMech</span><span class="PUNC">(</span><span class="NAME">this.terminalCert.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signatureInput</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1101</span> 
<span class='line'>1102</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">termkey.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1103</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1104</span> </span><span class="WHIT">		</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">termkey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1105</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1106</span> </span><span class="WHIT">		</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1107</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1108</span> 
<span class='line'>1109</span> </span><span class="WHIT">	</span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.unwrapSignature</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1110</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Signature (Encoded):"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1111</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1112</span> 
<span class='line'>1113</span> </span><span class="WHIT">	</span><span class="NAME">this.performTerminalAuthenticationFinal</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1114</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1115</span> 
<span class='line'>1116</span> 
<span class='line'>1117</span> 
<span class='line'>1118</span> </span><span class="COMM">/**
<span class='line'>1119</span>  * Prepare terminal authentication by setting the required security environment
<span class='line'>1120</span>  *
<span class='line'>1121</span>  * @param {ByteString} auxdata auxiliary data (tag '67') to be included in terminal authentication
<span class='line'>1122</span>  */</span><span class="WHIT">
<span class='line'>1123</span> </span><span class="NAME">EAC20.prototype.performTerminalAuthenticationSetup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">auxdata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1124</span> 
<span class='line'>1125</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">idIFD</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ca.getCompressedPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1126</span> 
<span class='line'>1127</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1128</span> 
<span class='line'>1129</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.cakeyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1130</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.terminalCert.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1131</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1132</span> 
<span class='line'>1133</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.terminalCert.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1134</span> 
<span class='line'>1135</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.cakeyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1136</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">auxdata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1137</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">auxdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1138</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1139</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x91</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">idIFD</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1140</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1141</span> 
<span class='line'>1142</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">msedata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1143</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Manage SE data:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1144</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">msedata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1145</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msedata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1146</span> 
<span class='line'>1147</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">challenge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">|</span><span class="NAME">Card.RENC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1148</span> 
<span class='line'>1149</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1150</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.idPICC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1151</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">challenge</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1152</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">idIFD</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1153</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">auxdata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1154</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">auxdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1155</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1156</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureInput</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1157</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Signature Input:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1158</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">signatureInput</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1159</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">signatureInput</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1160</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1161</span> 
<span class='line'>1162</span> 
<span class='line'>1163</span> 
<span class='line'>1164</span> </span><span class="COMM">/**
<span class='line'>1165</span>  * Complete terminal authentication by submitting the signature to the card
<span class='line'>1166</span>  *
<span class='line'>1167</span>  * @param {ByteString} signature the signature as concatenation of r and s
<span class='line'>1168</span>  */</span><span class="WHIT">
<span class='line'>1169</span> </span><span class="NAME">EAC20.prototype.performTerminalAuthenticationFinal</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1170</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1171</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1172</span> 
<span class='line'>1173</span> 
<span class='line'>1174</span> 
<span class='line'>1175</span> </span><span class="COMM">/**
<span class='line'>1176</span>  * Perform chip authentication in version 1 and establish a secure channel
<span class='line'>1177</span>  *
<span class='line'>1178</span>  * @return true, if chip authentication was successfull
<span class='line'>1179</span>  * @type boolean
<span class='line'>1180</span>  */</span><span class="WHIT">
<span class='line'>1181</span> </span><span class="NAME">EAC20.prototype.performChipAuthenticationV1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1182</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"performChipAuthenticationV1() called"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1183</span> 
<span class='line'>1184</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1185</span> </span><span class="WHIT">		</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1186</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1187</span> 
<span class='line'>1188</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cainfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.CAInfos</span><span class="PUNC">[</span><span class="NAME">keyid</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1189</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">cainfo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1190</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for ChipAuthenticationInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1191</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1192</span> 
<span class='line'>1193</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">capuk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.CAPublicKeys</span><span class="PUNC">[</span><span class="NAME">keyid</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1194</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">capuk</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1195</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for ChipAuthenticationPublicKeyInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1196</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1197</span> 
<span class='line'>1198</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">capuk.domainParameter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1199</span> 
<span class='line'>1200</span> </span><span class="WHIT">	</span><span class="NAME">this.ca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cainfo.protocol</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">domainParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1201</span> 
<span class='line'>1202</span> </span><span class="WHIT">	</span><span class="NAME">this.ca.generateEphemeralCAKeyPair</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1203</span> 
<span class='line'>1204</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cainfo.protocol.equals</span><span class="PUNC">(</span><span class="NAME">ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1205</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1206</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x91</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.ca.getEphemeralPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1207</span> 
<span class='line'>1208</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">cainfo.keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1209</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"8401"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1210</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">cainfo.keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1211</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1212</span> 
<span class='line'>1213</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">msedata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1214</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Manage SE data:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1215</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">msedata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1216</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x41</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msedata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1217</span> 
<span class='line'>1218</span> </span><span class="WHIT">		</span><span class="NAME">this.ca.performKeyAgreement</span><span class="PUNC">(</span><span class="NAME">capuk.publicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1219</span> 
<span class='line'>1220</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Create DES based secure channel"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1221</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1222</span> </span><span class="WHIT">		</span><span class="NAME">sm.setEncKey</span><span class="PUNC">(</span><span class="NAME">this.ca.kenc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1223</span> </span><span class="WHIT">		</span><span class="NAME">sm.setMacKey</span><span class="PUNC">(</span><span class="NAME">this.ca.kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1224</span> </span><span class="WHIT">		</span><span class="NAME">sm.setSendSequenceCounter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1225</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1226</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1227</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cainfo.protocol</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1228</span> 
<span class='line'>1229</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">cainfo.keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1230</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"8401"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1231</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">cainfo.keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1232</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1233</span> 
<span class='line'>1234</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">msedata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1235</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Manage SE data:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1236</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">msedata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1237</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x41</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msedata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1238</span> 
<span class='line'>1239</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ephemeralPublicKeyIfd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ca.getEphemeralPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1240</span> 
<span class='line'>1241</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x7C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ephemeralPublicKeyIfd</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1242</span> 
<span class='line'>1243</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">|</span><span class="NAME">Card.RENC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dado.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1244</span> 
<span class='line'>1245</span> </span><span class="WHIT">		</span><span class="NAME">this.ca.performKeyAgreement</span><span class="PUNC">(</span><span class="NAME">capuk.publicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1246</span> 
<span class='line'>1247</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Create AES based secure channel"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1248</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel.SSC_SYNC_ENC_POLICY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1249</span> </span><span class="WHIT">		</span><span class="NAME">sm.setEncKey</span><span class="PUNC">(</span><span class="NAME">this.ca.kenc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1250</span> </span><span class="WHIT">		</span><span class="NAME">sm.setMacKey</span><span class="PUNC">(</span><span class="NAME">this.ca.kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1251</span> </span><span class="WHIT">		</span><span class="NAME">sm.setMACSendSequenceCounter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1252</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1253</span> 
<span class='line'>1254</span> </span><span class="WHIT">	</span><span class="NAME">this.card.setCredential</span><span class="PUNC">(</span><span class="NAME">sm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1255</span> </span><span class="WHIT">	</span><span class="NAME">this.sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1256</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1257</span> 
<span class='line'>1258</span> 
<span class='line'>1259</span> 
<span class='line'>1260</span> </span><span class="COMM">/**
<span class='line'>1261</span>  * Prepare chip authentication by generating the ephemeral key pair
<span class='line'>1262</span>  *
<span class='line'>1263</span>  * @param {Number} keyId the key identifier to be used for chip authentication
<span class='line'>1264</span>  */</span><span class="WHIT">
<span class='line'>1265</span> </span><span class="NAME">EAC20.prototype.prepareChipAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1266</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"prepareChipAuthentication() called"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1267</span> 
<span class='line'>1268</span> </span><span class="WHIT">	</span><span class="NAME">this.cakeyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1269</span> 
<span class='line'>1270</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cainfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.CAInfos</span><span class="PUNC">[</span><span class="NAME">keyId</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1271</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">cainfo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1272</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for ChipAuthenticationInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1273</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1274</span> 
<span class='line'>1275</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cadp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.CADPs</span><span class="PUNC">[</span><span class="NAME">keyId</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1276</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">cadp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1277</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for ChipAuthenticationDomainParameterInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1278</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1279</span> </span><span class="WHIT">	</span><span class="NAME">this.cadp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cadp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1280</span> 
<span class='line'>1281</span> </span><span class="WHIT">	</span><span class="NAME">this.ca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cainfo.protocol</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cadp.domainParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1282</span> 
<span class='line'>1283</span> </span><span class="WHIT">	</span><span class="NAME">this.ca.includeDPinAuthToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.includeDPinAuthToken</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1284</span> </span><span class="WHIT">	</span><span class="NAME">this.ca.generateEphemeralCAKeyPair</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1285</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1286</span> 
<span class='line'>1287</span> 
<span class='line'>1288</span> 
<span class='line'>1289</span> </span><span class="COMM">/**
<span class='line'>1290</span>  * Perform chip authentication in version 2 and establish a secure channel
<span class='line'>1291</span>  *
<span class='line'>1292</span>  * @return true, if chip authentication was successfull
<span class='line'>1293</span>  * @type boolean
<span class='line'>1294</span>  */</span><span class="WHIT">
<span class='line'>1295</span> </span><span class="NAME">EAC20.prototype.performChipAuthenticationV2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1296</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"performChipAuthenticationV2() called"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1297</span> 
<span class='line'>1298</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cainfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.CAInfos</span><span class="PUNC">[</span><span class="NAME">this.cakeyId</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1299</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">cainfo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1300</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.cakeyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for ChipAuthenticationInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1301</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1302</span> 
<span class='line'>1303</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.ca.algo</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">cainfo.protocol</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1304</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Special handling for ChipAuthenticationInfo in EF.CardSecurity overwriting ChipAuthenticationInfo in EF.CardAccess"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1305</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Protocol in EF.CardAccess: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.ca.algo</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1306</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Protocol is EF.CardSecurity: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cainfo.protocol</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1307</span> </span><span class="WHIT">		</span><span class="NAME">this.ca.algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cainfo.protocol</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1308</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1309</span> 
<span class='line'>1310</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">capuk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.CAPublicKeys</span><span class="PUNC">[</span><span class="NAME">this.cakeyId</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1311</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">capuk</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1312</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"EAC20"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.cakeyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" for ChipAuthenticationPublicKeyInfo"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1313</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1314</span> 
<span class='line'>1315</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1316</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cainfo.protocol</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1317</span> 
<span class='line'>1318</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">cainfo.keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1319</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"8401"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1320</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">cainfo.keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1321</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1322</span> 
<span class='line'>1323</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">msedata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1324</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Manage SE data:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1325</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">msedata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1326</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x41</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msedata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1327</span> 
<span class='line'>1328</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ephemeralPublicKeyIfd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ca.getEphemeralPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1329</span> 
<span class='line'>1330</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x7C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ephemeralPublicKeyIfd</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1331</span> 
<span class='line'>1332</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dadobin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">|</span><span class="NAME">Card.RENC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dado.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1333</span> 
<span class='line'>1334</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">dadobin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1335</span> 
<span class='line'>1336</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">dadobin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1337</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x7C</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1338</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1339</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nonceDO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1340</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">nonceDO.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1341</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nonceDO.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1342</span> 
<span class='line'>1343</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">authTokenDO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1344</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">authTokenDO.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1345</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">authToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">authTokenDO.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1346</span> 
<span class='line'>1347</span> </span><span class="WHIT">	</span><span class="NAME">this.ca.performKeyAgreement</span><span class="PUNC">(</span><span class="NAME">capuk.publicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1348</span> 
<span class='line'>1349</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ca.verifyAuthenticationToken</span><span class="PUNC">(</span><span class="NAME">authToken</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1350</span> 
<span class='line'>1351</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1352</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Authentication token valid"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1353</span> 
<span class='line'>1354</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.ca.algo.equals</span><span class="PUNC">(</span><span class="NAME">ChipAuthentication.id_CA_ECDH_3DES_CBC_CBC</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1355</span> </span><span class="WHIT">			</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Create DES based secure channel"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1356</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1357</span> </span><span class="WHIT">			</span><span class="NAME">sm.setEncKey</span><span class="PUNC">(</span><span class="NAME">this.ca.kenc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1358</span> </span><span class="WHIT">			</span><span class="NAME">sm.setMacKey</span><span class="PUNC">(</span><span class="NAME">this.ca.kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1359</span> </span><span class="WHIT">			</span><span class="NAME">sm.setMACSendSequenceCounter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1360</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1361</span> </span><span class="WHIT">			</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Create AES based secure channel"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1362</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel.SSC_SYNC_ENC_POLICY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1363</span> </span><span class="WHIT">			</span><span class="NAME">sm.setEncKey</span><span class="PUNC">(</span><span class="NAME">this.ca.kenc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1364</span> </span><span class="WHIT">			</span><span class="NAME">sm.setMacKey</span><span class="PUNC">(</span><span class="NAME">this.ca.kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1365</span> </span><span class="WHIT">			</span><span class="NAME">sm.setMACSendSequenceCounter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1366</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1367</span> </span><span class="WHIT">		</span><span class="NAME">this.card.setCredential</span><span class="PUNC">(</span><span class="NAME">sm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1368</span> </span><span class="WHIT">		</span><span class="NAME">this.sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1369</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1370</span> </span><span class="WHIT">		</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Authentication token invalid"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1371</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1372</span> 
<span class='line'>1373</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1374</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1375</span> 
<span class='line'>1376</span> 
<span class='line'>1377</span> 
<span class='line'>1378</span> </span><span class="COMM">/**
<span class='line'>1379</span>  * Verify authenticated auxiliary data
<span class='line'>1380</span>  *
<span class='line'>1381</span>  * @param {ByteString} oid the object identifier for the auxiliary data provided during terminal authentication
<span class='line'>1382</span>  * @return true, if auxiliary data was verified
<span class='line'>1383</span>  * @type boolean
<span class='line'>1384</span>  */</span><span class="WHIT">
<span class='line'>1385</span> </span><span class="NAME">EAC20.prototype.verifyAuxiliaryData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1386</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1387</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">o.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="NUMB">0x6300</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1388</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1389</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1390</span> 
<span class='line'>1391</span> 
<span class='line'>1392</span> 
<span class='line'>1393</span> </span><span class="COMM">/**
<span class='line'>1394</span>  * Perform chip authentication and establish a secure channel
<span class='line'>1395</span>  *
<span class='line'>1396</span>  * @param {Number} keyid the key identifier (only required for ChipAuthentication in version 1)
<span class='line'>1397</span>  * @return true, if chip authentication was successfull
<span class='line'>1398</span>  * @type boolean
<span class='line'>1399</span>  */</span><span class="WHIT">
<span class='line'>1400</span> </span><span class="NAME">EAC20.prototype.performChipAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1401</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.cakeyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1402</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.performChipAuthenticationV2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1403</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1404</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.performChipAuthenticationV1</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1405</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1406</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1407</span> 
<span class='line'>1408</span> 
<span class='line'>1409</span> 
<span class='line'>1410</span> </span><span class="COMM">/**
<span class='line'>1411</span>  * Perform restricted identification
<span class='line'>1412</span>  *
<span class='line'>1413</span>  * @param {Number} keyId restricted identification key identifier
<span class='line'>1414</span>  * @param {ByteString} sectorPublicKey the sector public key data
<span class='line'>1415</span>  * @param {Number} sectorPublicKeyIndex optional argument that allows to select a specific sector public key in the terminal certificate
<span class='line'>1416</span>  * @return the sector specific identifier
<span class='line'>1417</span>  * @type ByteString
<span class='line'>1418</span>  */</span><span class="WHIT">
<span class='line'>1419</span> </span><span class="NAME">EAC20.prototype.performRestrictedIdentification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sectorPublicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sectorPublicKeyIndex</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1420</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1421</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RI-ECDH-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1422</span> 
<span class='line'>1423</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"8401"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1424</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1425</span> 
<span class='line'>1426</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">msedata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1427</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Manage SE data:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1428</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">msedata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1429</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x41</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msedata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1430</span> 
<span class='line'>1431</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1432</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sectorPublicKeyIndex</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1433</span> </span><span class="WHIT">		</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sectorPublicKeyIndex</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1434</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1435</span> 
<span class='line'>1436</span> </span><span class="WHIT">	</span><span class="COMM">// ToDo change to sectorPublicKey.value</span><span class="WHIT">
<span class='line'>1437</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x7C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sectorPublicKey.bytes</span><span class="PUNC">(</span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1438</span> 
<span class='line'>1439</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"GA Input: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dado.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1440</span> 
<span class='line'>1441</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dadobin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">|</span><span class="NAME">Card.RENC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dado.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1442</span> 
<span class='line'>1443</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="NAME">dadobin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1444</span> 
<span class='line'>1445</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">dadobin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1446</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x7C</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1447</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1448</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nonceDO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1449</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">nonceDO.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nonceDO.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1450</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sectorId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nonceDO.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1451</span> 
<span class='line'>1452</span> </span><span class="WHIT">	</span><span class="NAME">this.log</span><span class="PUNC">(</span><span class="STRN">"Sector specific identifier: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sectorId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1453</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">sectorId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1454</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1455</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview EAC2CVCertificateGenerator - Simple CV certificate generator class
<span class='line'> 25</span>  * based on "Advanced Security Mechanisms for Machine Readable Travel Documents", Version 2.0
<span class='line'> 26</span>  */</span><span class="WHIT">
<span class='line'> 27</span> 
<span class='line'> 28</span> </span><span class="COMM">// Imports</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVC'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PublicKeyReference'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> 
<span class='line'> 32</span> 
<span class='line'> 33</span> 
<span class='line'> 34</span> </span><span class="COMM">/**
<span class='line'> 35</span>  * Define a generator object for CV certificates
<span class='line'> 36</span>  *
<span class='line'> 37</span>  * @class Class implementing a generator for CV certificates according to EAC 1.1 and EAC 2.0 specifications.
<span class='line'> 38</span>  *
<span class='line'> 39</span>  * @constructor
<span class='line'> 40</span>  * @param {Crypto} crypto the crypto provider to be used
<span class='line'> 41</span>  */</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">EAC2CVCertificateGenerator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="NAME">exports.EAC2CVCertificateGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EAC2CVCertificateGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> 
<span class='line'> 48</span> 
<span class='line'> 49</span> </span><span class="COMM">/**
<span class='line'> 50</span>  * Convert x/y coordinates to uncompressed format
<span class='line'> 51</span>  *
<span class='line'> 52</span>  * @param {ByteString} x the x-coordinate of the point
<span class='line'> 53</span>  * @param {ByteString} y the y-coordinate of the point
<span class='line'> 54</span>  * @return the point in uncompressed format
<span class='line'> 55</span>  * @type ByteString
<span class='line'> 56</span>  */</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="NAME">EAC2CVCertificateGenerator.encodeUncompressedECPoint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 58</span> 
<span class='line'> 59</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> 
<span class='line'> 61</span> </span><span class="WHIT">	</span><span class="COMM">// uncompressed encoding</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> 
<span class='line'> 66</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 68</span> 
<span class='line'> 69</span> 
<span class='line'> 70</span> 
<span class='line'> 71</span> </span><span class="COMM">/**
<span class='line'> 72</span>  * Decode x/y coordinates from uncompressed format
<span class='line'> 73</span>  *
<span class='line'> 74</span>  * @param {ByteString} uncompressedPoint the uncompressed point
<span class='line'> 75</span>  * @return the x-/y-coordinate of the point
<span class='line'> 76</span>  * @type ByteString
<span class='line'> 77</span>  */</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="NAME">EAC2CVCertificateGenerator.decodeUncompressedECPoint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">uncompressedPoint</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 79</span> 
<span class='line'> 80</span> </span><span class="WHIT">	</span><span class="COMM">// Determine the size of the coordinates ignoring the indicator byte '04'</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">uncompressedPoint.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> 
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sizeOfCoordinate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> 
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">uncompressedPoint.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sizeOfCoordinate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">yValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">uncompressedPoint.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sizeOfCoordinate</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sizeOfCoordinate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> 
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">:</span><span class="NAME">xValue</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NAME">yValue</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 90</span> 
<span class='line'> 91</span> 
<span class='line'> 92</span> 
<span class='line'> 93</span> </span><span class="COMM">/**
<span class='line'> 94</span>  * Convert integer to fixed length string with leading zeros.
<span class='line'> 95</span>  *
<span class='line'> 96</span>  * @private
<span class='line'> 97</span>  * @param {Number} value the value to convert to a string.
<span class='line'> 98</span>  * @param {Number} digits the number of digits in output string. Must be &lt;= 20.
<span class='line'> 99</span>  * @return the 0-padded string
<span class='line'>100</span>  * @type String
<span class='line'>101</span>  */</span><span class="WHIT">
<span class='line'>102</span> </span><span class="NAME">EAC2CVCertificateGenerator.itos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">digits</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">digits</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Digits must be &lt;= 20"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">	</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0000000000000000000"</span><span class="PUNC">.</span><span class="NAME">substr</span><span class="PUNC">(</span><span class="NUMB">19</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">digits</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">str.length</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>109</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>110</span> 
<span class='line'>111</span> 
<span class='line'>112</span> 
<span class='line'>113</span> </span><span class="COMM">/**
<span class='line'>114</span>  * Convert date to string with format YYMMDD.
<span class='line'>115</span>  *
<span class='line'>116</span>  * @param {Date} d the date object.
<span class='line'>117</span>  * @return the date/time string.
<span class='line'>118</span>  * @type String
<span class='line'>119</span>  */</span><span class="WHIT">
<span class='line'>120</span> </span><span class="NAME">EAC2CVCertificateGenerator.dtos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EAC2CVCertificateGenerator.itos</span><span class="PUNC">(</span><span class="NAME">d.getFullYear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">			</span><span class="NAME">EAC2CVCertificateGenerator.itos</span><span class="PUNC">(</span><span class="NAME">d.getMonth</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">			</span><span class="NAME">EAC2CVCertificateGenerator.itos</span><span class="PUNC">(</span><span class="NAME">d.getDate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>126</span> 
<span class='line'>127</span> 
<span class='line'>128</span> 
<span class='line'>129</span> </span><span class="COMM">/**
<span class='line'>130</span>  * Set the profile identifier
<span class='line'>131</span>  *
<span class='line'>132</span>  * @param {Number} profileID the profile identifier
<span class='line'>133</span>  */</span><span class="WHIT">
<span class='line'>134</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setProfileIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">profileID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="NAME">this.profileIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">profileID</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>136</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>137</span> 
<span class='line'>138</span> 
<span class='line'>139</span> 
<span class='line'>140</span> </span><span class="COMM">/**
<span class='line'>141</span>  * Set the certification authority reference
<span class='line'>142</span>  *
<span class='line'>143</span>  * @param {String} CAR the CAR value
<span class='line'>144</span>  * @param {ByteString} CAR the CAR value
<span class='line'>145</span>  * @param {PublicKeyReference} CAR the CAR value
<span class='line'>146</span>  */</span><span class="WHIT">
<span class='line'>147</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">CAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CAR</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">		</span><span class="NAME">this.CAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CAR</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CAR</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">		</span><span class="NAME">this.CAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CAR.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="NAME">this.CAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">CAR.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>155</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>156</span> 
<span class='line'>157</span> 
<span class='line'>158</span> 
<span class='line'>159</span> </span><span class="COMM">/**
<span class='line'>160</span>  * Set the certificate holder reference
<span class='line'>161</span>  *
<span class='line'>162</span>  * @param {String} CHR the CHR value
<span class='line'>163</span>  * @param {ByteString} CHR the CHR value
<span class='line'>164</span>  * @param {PublicKeyReference} CHR the CHR value
<span class='line'>165</span>  */</span><span class="WHIT">
<span class='line'>166</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setCHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">CHR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CHR</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">		</span><span class="NAME">this.CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CHR</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CHR</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">		</span><span class="NAME">this.CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CHR.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">		</span><span class="NAME">this.CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">CHR.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>174</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> 
<span class='line'>177</span> 
<span class='line'>178</span> </span><span class="COMM">/**
<span class='line'>179</span>  * Set the effective date
<span class='line'>180</span>  *
<span class='line'>181</span>  * @param {String} effectiveDate the effective date in the format YYMMDD
<span class='line'>182</span>  * @param {Date} effectiveDate the effective date as Date object
<span class='line'>183</span>  */</span><span class="WHIT">
<span class='line'>184</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setEffectiveDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">effectiveDate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">effectiveDate</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">		</span><span class="NAME">this.effectiveDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EAC2CVCertificateGenerator.dtos</span><span class="PUNC">(</span><span class="NAME">effectiveDate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">		</span><span class="NAME">this.effectiveDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">effectiveDate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>190</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>191</span> 
<span class='line'>192</span> 
<span class='line'>193</span> 
<span class='line'>194</span> </span><span class="COMM">/**
<span class='line'>195</span>  * Set the expiry date
<span class='line'>196</span>  *
<span class='line'>197</span>  * @param {String} expiryDate the expiry date in the format YYMMDD
<span class='line'>198</span>  * @param {Date} expiryDate the expiry date as Date object
<span class='line'>199</span>  */</span><span class="WHIT">
<span class='line'>200</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setExpiryDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">expiryDate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">expiryDate</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">		</span><span class="NAME">this.expiryDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EAC2CVCertificateGenerator.dtos</span><span class="PUNC">(</span><span class="NAME">expiryDate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">		</span><span class="NAME">this.expiryDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">expiryDate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>207</span> 
<span class='line'>208</span> 
<span class='line'>209</span> 
<span class='line'>210</span> </span><span class="COMM">/**
<span class='line'>211</span>  * Set the object identifier of the authorization template for the generated certificate
<span class='line'>212</span>  *
<span class='line'>213</span>  * @param {ByteString} oid the object identifier for the chat
<span class='line'>214</span>  */</span><span class="WHIT">
<span class='line'>215</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setChatOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="NAME">this.chatOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>218</span> 
<span class='line'>219</span> 
<span class='line'>220</span> 
<span class='line'>221</span> </span><span class="COMM">/**
<span class='line'>222</span>  * Set the authorization level of the authorization template for the generated certificate
<span class='line'>223</span>  *
<span class='line'>224</span>  * @param {ByteString} authLevel the encoded authorization level
<span class='line'>225</span>  */</span><span class="WHIT">
<span class='line'>226</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setChatAuthorizationLevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">authLevel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">	</span><span class="NAME">this.chatAuthorizationLevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">authLevel</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>228</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>229</span> 
<span class='line'>230</span> 
<span class='line'>231</span> 
<span class='line'>232</span> </span><span class="COMM">/**
<span class='line'>233</span>  * Set the algorithm identifier for terminal authentication
<span class='line'>234</span>  *
<span class='line'>235</span>  * @param {ByteString} oid the object identifier as specified in appendix A.6.4
<span class='line'>236</span>  */</span><span class="WHIT">
<span class='line'>237</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setTAAlgorithmIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="NAME">this.taOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>240</span> 
<span class='line'>241</span> 
<span class='line'>242</span> 
<span class='line'>243</span> </span><span class="COMM">/**
<span class='line'>244</span>  * Set some additional extensions
<span class='line'>245</span>  *
<span class='line'>246</span>  * @param {Array of ASN.1 objects} extensions array containing the ASN.1 encoded extensions for the certificate
<span class='line'>247</span>  */</span><span class="WHIT">
<span class='line'>248</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setExtensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">extensions</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">	</span><span class="NAME">this.extensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">extensions</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>251</span> 
<span class='line'>252</span> 
<span class='line'>253</span> 
<span class='line'>254</span> </span><span class="COMM">/**
<span class='line'>255</span>  * Set the public key to be included in the certificate
<span class='line'>256</span>  *
<span class='line'>257</span>  * @param {Key} publicKey the public key object to be certified
<span class='line'>258</span>  */</span><span class="WHIT">
<span class='line'>259</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="NAME">this.publicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>262</span> 
<span class='line'>263</span> 
<span class='line'>264</span> 
<span class='line'>265</span> </span><span class="COMM">/**
<span class='line'>266</span>  * Set whether to include domain parameters in the certificate or not
<span class='line'>267</span>  *
<span class='line'>268</span>  * @param {Boolean} value the flag indicator
<span class='line'>269</span>  */</span><span class="WHIT">
<span class='line'>270</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.setIncludeDomainParameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="NAME">this.includeDomainParameters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>273</span> 
<span class='line'>274</span> 
<span class='line'>275</span> 
<span class='line'>276</span> </span><span class="COMM">/**
<span class='line'>277</span>  * Internal functions for the generation of a certificate
<span class='line'>278</span>  * @private
<span class='line'>279</span>  */</span><span class="WHIT">
<span class='line'>280</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.getCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certification Authority Reference"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x42</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.CAR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>284</span> 
<span class='line'>285</span> 
<span class='line'>286</span> 
<span class='line'>287</span> </span><span class="COMM">/**
<span class='line'>288</span>  * Internal functions for the generation of a certificate
<span class='line'>289</span>  * @private
<span class='line'>290</span>  */</span><span class="WHIT">
<span class='line'>291</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.getCHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certification Holder Reference"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.CHR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>294</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>295</span> 
<span class='line'>296</span> 
<span class='line'>297</span> 
<span class='line'>298</span> </span><span class="COMM">/**
<span class='line'>299</span>  * Internal functions for the generation of a certificate
<span class='line'>300</span>  * @private
<span class='line'>301</span>  */</span><span class="WHIT">
<span class='line'>302</span> </span><span class="NAME">EAC2CVCertificateGenerator.convertDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">date</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>303</span> 
<span class='line'>304</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">temp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">date</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">singleByte</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>307</span> 
<span class='line'>308</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">temp.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">temp.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">0x30</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>311</span> 
<span class='line'>312</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>314</span> 
<span class='line'>315</span> 
<span class='line'>316</span> 
<span class='line'>317</span> </span><span class="COMM">/**
<span class='line'>318</span>  * Internal functions for the generation of a certificate
<span class='line'>319</span>  * @private
<span class='line'>320</span>  */</span><span class="WHIT">
<span class='line'>321</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.getEffectiveDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certificate Effective Date"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F25</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">			</span><span class="NAME">EAC2CVCertificateGenerator.convertDate</span><span class="PUNC">(</span><span class="NAME">this.effectiveDate</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>325</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>326</span> 
<span class='line'>327</span> 
<span class='line'>328</span> 
<span class='line'>329</span> </span><span class="COMM">/**
<span class='line'>330</span>  * Internal functions for the generation of a certificate
<span class='line'>331</span>  * @private
<span class='line'>332</span>  */</span><span class="WHIT">
<span class='line'>333</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.getExpiryDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certificate Expiration Date"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F24</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>335</span> </span><span class="WHIT">			</span><span class="NAME">EAC2CVCertificateGenerator.convertDate</span><span class="PUNC">(</span><span class="NAME">this.expiryDate</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>338</span> 
<span class='line'>339</span> 
<span class='line'>340</span> 
<span class='line'>341</span> </span><span class="COMM">/**
<span class='line'>342</span>  * Internal functions for the generation of a certificate
<span class='line'>343</span>  * @private
<span class='line'>344</span>  */</span><span class="WHIT">
<span class='line'>345</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.getCHAT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certificate Holder Authorization Template"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F4C</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>347</span> 
<span class='line'>348</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Object Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chatOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">authLevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Authorization Level"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x53</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chatAuthorizationLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span> 
<span class='line'>351</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">authLevel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>353</span> 
<span class='line'>354</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>355</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>356</span> 
<span class='line'>357</span> 
<span class='line'>358</span> 
<span class='line'>359</span> </span><span class="COMM">/**
<span class='line'>360</span>  * Strips leading zeros of a ByteString
<span class='line'>361</span>  *
<span class='line'>362</span>  * @param {ByteString} value the ByteString value
<span class='line'>363</span>  * @return the stripped ByteString object, may be an empty ByteString
<span class='line'>364</span>  * @type ByteString
<span class='line'>365</span>  */</span><span class="WHIT">
<span class='line'>366</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.stripLeadingZeros</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>369</span> 
<span class='line'>370</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value.right</span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>371</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>372</span> 
<span class='line'>373</span> 
<span class='line'>374</span> 
<span class='line'>375</span> </span><span class="COMM">/**
<span class='line'>376</span>  * Get the encoded public key including domain parameters
<span class='line'>377</span>  *
<span class='line'>378</span>  * @private
<span class='line'>379</span>  */</span><span class="WHIT">
<span class='line'>380</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.getPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>381</span> 
<span class='line'>382</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Key"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F49</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>383</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Object Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x06</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.taOID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>384</span> 
<span class='line'>385</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>386</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.includeDomainParameters</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>387</span> 
<span class='line'>388</span> </span><span class="WHIT">			</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Prime Modulus"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>389</span> </span><span class="WHIT">			</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"First coefficient a"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>390</span> </span><span class="WHIT">			</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Second coefficient b"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>391</span> 
<span class='line'>392</span> </span><span class="WHIT">			</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Base Point G"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVCertificateGenerator.encodeUncompressedECPoint</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>393</span> 
<span class='line'>394</span> </span><span class="WHIT">			</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Order of the base point"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x85</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>395</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>396</span> 
<span class='line'>397</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Point y"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVCertificateGenerator.encodeUncompressedECPoint</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span> 
<span class='line'>399</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.includeDomainParameters</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">			</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Cofactor f"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x87</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>403</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Composite Modulus"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>404</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Exponent"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>406</span> 
<span class='line'>407</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>408</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>409</span> 
<span class='line'>410</span> 
<span class='line'>411</span> 
<span class='line'>412</span> </span><span class="COMM">/**
<span class='line'>413</span>  * Internal functions for the generation of a certificate
<span class='line'>414</span>  * @private
<span class='line'>415</span>  */</span><span class="WHIT">
<span class='line'>416</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.getProfileIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>417</span> 
<span class='line'>418</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.profileIdentifier</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> 
<span class='line'>421</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certificate Profile Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F29</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>422</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>423</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>424</span> 
<span class='line'>425</span> 
<span class='line'>426</span> 
<span class='line'>427</span> </span><span class="COMM">/**
<span class='line'>428</span>  * Internal functions for the generation of a certificate
<span class='line'>429</span>  * @private
<span class='line'>430</span>  */</span><span class="WHIT">
<span class='line'>431</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.getExtensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certificate Extensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x65</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.extensions.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>434</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.extensions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>436</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>437</span> 
<span class='line'>438</span> 
<span class='line'>439</span> 
<span class='line'>440</span> </span><span class="COMM">/**
<span class='line'>441</span>  * Internal functions for the generation of a certificate
<span class='line'>442</span>  * @private
<span class='line'>443</span>  */</span><span class="WHIT">
<span class='line'>444</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.getCertificateBody</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>445</span> 
<span class='line'>446</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certificate Body"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F4E</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>447</span> 
<span class='line'>448</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getProfileIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>449</span> 
<span class='line'>450</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>451</span> 
<span class='line'>452</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>453</span> 
<span class='line'>454</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>455</span> 
<span class='line'>456</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getCHAT</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>457</span> 
<span class='line'>458</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getEffectiveDate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>459</span> 
<span class='line'>460</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getExpiryDate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> 
<span class='line'>462</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.extensions</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>463</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getExtensions</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>464</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>465</span> 
<span class='line'>466</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>467</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>468</span> 
<span class='line'>469</span> 
<span class='line'>470</span> 
<span class='line'>471</span> </span><span class="COMM">/**
<span class='line'>472</span>  * Generate a certificate based on the parameter set using the setter methods.
<span class='line'>473</span>  *
<span class='line'>474</span>  * @param {Key} signingKey the key to be used for signing the certificate
<span class='line'>475</span>  * @param {ByteString} taOID the object identifier associated with the signing key
<span class='line'>476</span>  * @return the CVC certificate
<span class='line'>477</span>  * @type CVC
<span class='line'>478</span>  */</span><span class="WHIT">
<span class='line'>479</span> </span><span class="NAME">EAC2CVCertificateGenerator.prototype.generateCVCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">signingKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">outertaOID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>480</span> 
<span class='line'>481</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CV Certificate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F21</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>482</span> 
<span class='line'>483</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">body</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificateBody</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>484</span> 
<span class='line'>485</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">outertaOID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>486</span> </span><span class="WHIT">		</span><span class="NAME">outertaOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.taOID</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>487</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>488</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.getSignatureMech</span><span class="PUNC">(</span><span class="NAME">outertaOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>489</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">signingKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">body.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>490</span> 
<span class='line'>491</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">outertaOID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>492</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keylen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signingKey.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>493</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Signature"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F37</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CVC.unwrapSignature</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keylen</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>494</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>495</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Signature"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F37</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>496</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>497</span> 
<span class='line'>498</span> </span><span class="WHIT">	</span><span class="NAME">certificate.add</span><span class="PUNC">(</span><span class="NAME">body</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>499</span> 
<span class='line'>500</span> </span><span class="WHIT">	</span><span class="NAME">certificate.add</span><span class="PUNC">(</span><span class="NAME">signatureValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>501</span> 
<span class='line'>502</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>503</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>504</span> 
<span class='line'>505</span> 
<span class='line'>506</span> 
<span class='line'>507</span> </span><span class="NAME">EAC2CVCertificateGenerator.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>508</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">taOID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>509</span> </span><span class="WHIT">		</span><span class="NAME">generator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">EAC2CVCertificateGenerator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>510</span> 
<span class='line'>511</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"decvca00000"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>512</span> </span><span class="WHIT">		</span><span class="NAME">generator.setCAR</span><span class="PUNC">(</span><span class="NAME">CAR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>513</span> 
<span class='line'>514</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"decvca00000"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT">		</span><span class="NAME">generator.setCHR</span><span class="PUNC">(</span><span class="NAME">CHR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>516</span> 
<span class='line'>517</span> </span><span class="WHIT">		</span><span class="NAME">generator.setEffectiveDate</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>518</span> 
<span class='line'>519</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">notAfter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"110225"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>520</span> </span><span class="WHIT">		</span><span class="NAME">generator.setExpiryDate</span><span class="PUNC">(</span><span class="NAME">notAfter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>521</span> 
<span class='line'>522</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chatOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.4.0.127.0.7.3.1.2.1"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// inspection system</span><span class="WHIT">
<span class='line'>523</span> </span><span class="WHIT">		</span><span class="NAME">generator.setChatOID</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">chatOID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> 
<span class='line'>525</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chatAuth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"E3"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// CVCA, read access to eID, DG3, DG4</span><span class="WHIT">
<span class='line'>526</span> 
<span class='line'>527</span> </span><span class="WHIT">		</span><span class="NAME">generator.setChatAuthorizationLevel</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">chatAuth</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>528</span> 
<span class='line'>529</span> </span><span class="WHIT">		</span><span class="NAME">generator.setPublicKey</span><span class="PUNC">(</span><span class="NAME">pubKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>530</span> 
<span class='line'>531</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">profileIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>532</span> 
<span class='line'>533</span> </span><span class="WHIT">		</span><span class="NAME">generator.setProfileIdentifier</span><span class="PUNC">(</span><span class="NAME">profileIdentifier</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>534</span> 
<span class='line'>535</span> </span><span class="WHIT">		</span><span class="NAME">generator.setTAAlgorithmIdentifier</span><span class="PUNC">(</span><span class="NAME">taOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>536</span> 
<span class='line'>537</span> </span><span class="WHIT">		</span><span class="COMM">//var extensions = new Array();</span><span class="WHIT">
<span class='line'>538</span> </span><span class="WHIT">		</span><span class="COMM">//extensions[0] = new ASN1("ext1", ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX));</span><span class="WHIT">
<span class='line'>539</span> </span><span class="WHIT">		</span><span class="COMM">//extensions[1] = new ASN1("ext2", ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX));</span><span class="WHIT">
<span class='line'>540</span> 
<span class='line'>541</span> </span><span class="WHIT">		</span><span class="COMM">//generator.setExtensions(extensions);</span><span class="WHIT">
<span class='line'>542</span> 
<span class='line'>543</span> </span><span class="WHIT">		</span><span class="NAME">generator.setIncludeDomainParameters</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>544</span> 
<span class='line'>545</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">generator.generateCVCertificate</span><span class="PUNC">(</span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">taOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>546</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>547</span> 
<span class='line'>548</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">cvc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>549</span> </span><span class="WHIT">		</span><span class="NAME">cvc.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>550</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>551</span> 
<span class='line'>552</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>553</span> 
<span class='line'>554</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>555</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>556</span> </span><span class="WHIT">	</span><span class="NAME">priKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>557</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">	</span><span class="NAME">priKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256t1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>559</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256t1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>560</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>561</span> 
<span class='line'>562</span> </span><span class="WHIT">	</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>563</span> 
<span class='line'>564</span> 
<span class='line'>565</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>566</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>567</span> </span><span class="WHIT">	</span><span class="NAME">priKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>568</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>569</span> </span><span class="WHIT">	</span><span class="NAME">priKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"secp521r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>570</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"secp521r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>572</span> 
<span class='line'>573</span> </span><span class="WHIT">	</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>574</span> 
<span class='line'>575</span> 
<span class='line'>576</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>577</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>578</span> </span><span class="WHIT">	</span><span class="NAME">priKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>579</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>580</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setSize</span><span class="PUNC">(</span><span class="NUMB">1024</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>581</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>582</span> 
<span class='line'>583</span> </span><span class="WHIT">	</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-v1-5-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>584</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>585</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2010 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of Simple CV request generator based on
<span class='line'> 25</span>  * TR-03110 "Advanced Security Mechanisms for Machine Readable Travel Documents", Version 2.0
<span class='line'> 26</span>  *
<span class='line'> 27</span>  */</span><span class="WHIT">
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">// Imports</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVC'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PublicKeyReference'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> 
<span class='line'> 33</span> 
<span class='line'> 34</span> 
<span class='line'> 35</span> </span><span class="COMM">/**
<span class='line'> 36</span>  * Constructor for request generator
<span class='line'> 37</span>  *
<span class='line'> 38</span>  * @class Class implementing a generator for CVC requests
<span class='line'> 39</span>  *
<span class='line'> 40</span>  * @constructor
<span class='line'> 41</span>  * @param {Crypto} Crypto object to use
<span class='line'> 42</span>  */</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 46</span> 
<span class='line'> 47</span> </span><span class="NAME">exports.EAC2CVRequestGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> 
<span class='line'> 49</span> 
<span class='line'> 50</span> 
<span class='line'> 51</span> </span><span class="COMM">/*
<span class='line'> 52</span>  * Convert x/y coordinates to uncompressed format
<span class='line'> 53</span>  *
<span class='line'> 54</span>  * x/y - coordinates of EC point
<span class='line'> 55</span>  *
<span class='line'> 56</span>  * return ByteString containing compressed format
<span class='line'> 57</span>  *
<span class='line'> 58</span>  * TODO: Move to ECUtils
<span class='line'> 59</span>  */</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="NAME">EAC2CVRequestGenerator.encodeUncompressedECPoint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 61</span> 
<span class='line'> 62</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> 
<span class='line'> 64</span> </span><span class="WHIT">    </span><span class="COMM">// uncompressed encoding</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">    </span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">    </span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">    </span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="WHIT">    </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 71</span> 
<span class='line'> 72</span> 
<span class='line'> 73</span> 
<span class='line'> 74</span> </span><span class="COMM">/**
<span class='line'> 75</span>  * Strips leading zeros of a ByteString
<span class='line'> 76</span>  *
<span class='line'> 77</span>  * @param {ByteString} value the ByteString value
<span class='line'> 78</span>  * @return the stripped ByteString object, may be an empty ByteString
<span class='line'> 79</span>  * @type ByteString
<span class='line'> 80</span>  *
<span class='line'> 81</span>  * TODO: Move to Utils
<span class='line'> 82</span>  */</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="NAME">EAC2CVRequestGenerator.stripLeadingZeros</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> 
<span class='line'> 87</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value.right</span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 89</span> 
<span class='line'> 90</span> 
<span class='line'> 91</span> 
<span class='line'> 92</span> </span><span class="COMM">/**
<span class='line'> 93</span>  * Set the public key that should be encoded within the request
<span class='line'> 94</span>  *
<span class='line'> 95</span>  * @param {Key} publicKey Public Key
<span class='line'> 96</span>  */</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.setPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">	</span><span class="NAME">this.publicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>100</span> 
<span class='line'>101</span> 
<span class='line'>102</span> 
<span class='line'>103</span> </span><span class="COMM">/**
<span class='line'>104</span>  * Set the certficate holder reference (CHR) for the request
<span class='line'>105</span>  *
<span class='line'>106</span>  * @param {String} chr CHR for the request
<span class='line'>107</span>  */</span><span class="WHIT">
<span class='line'>108</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.setCHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">		</span><span class="NAME">this.CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chr</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">		</span><span class="NAME">this.CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">		</span><span class="NAME">this.CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>116</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>117</span> 
<span class='line'>118</span> 
<span class='line'>119</span> 
<span class='line'>120</span> </span><span class="COMM">/**
<span class='line'>121</span>  * Reset the current generator object
<span class='line'>122</span>  *
<span class='line'>123</span>  * TODO: Implement me
<span class='line'>124</span>  */</span><span class="WHIT">
<span class='line'>125</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.reset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>127</span> 
<span class='line'>128</span> 
<span class='line'>129</span> 
<span class='line'>130</span> </span><span class="COMM">/**
<span class='line'>131</span>  * Set the certificate profile identifier (CPI) for the request
<span class='line'>132</span>  *
<span class='line'>133</span>  * @param {Number} profileID CPI for the request
<span class='line'>134</span>  */</span><span class="WHIT">
<span class='line'>135</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.setProfileIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">profileID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">	</span><span class="NAME">this.profileIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">profileID</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>138</span> 
<span class='line'>139</span> 
<span class='line'>140</span> 
<span class='line'>141</span> </span><span class="COMM">/**
<span class='line'>142</span>  * Set the certficate authorization reference (CAR) for the request
<span class='line'>143</span>  *
<span class='line'>144</span>  * The usage of this method is optional - if no CAR is set, there will be no
<span class='line'>145</span>  * "inner" CAR included within the certficate request
<span class='line'>146</span>  *
<span class='line'>147</span>  * @param {String} car CAR for the request
<span class='line'>148</span>  */</span><span class="WHIT">
<span class='line'>149</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.setCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">car</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">		</span><span class="NAME">this.CAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">car</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="NAME">this.CAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">car.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">		</span><span class="NAME">this.CAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">car.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>157</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>158</span> 
<span class='line'>159</span> 
<span class='line'>160</span> 
<span class='line'>161</span> </span><span class="COMM">/**
<span class='line'>162</span>  * Set the extension values that should be included within the request
<span class='line'>163</span>  *
<span class='line'>164</span>  * @param {ByteString[]} extensions Array of DER-encoded extensions
<span class='line'>165</span>  */</span><span class="WHIT">
<span class='line'>166</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.setExtensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">extensions</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="NAME">this.extensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">extensions</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>169</span> 
<span class='line'>170</span> 
<span class='line'>171</span> 
<span class='line'>172</span> </span><span class="COMM">/**
<span class='line'>173</span>  * Set the object identifier that should be included in the public key domain parameters
<span class='line'>174</span>  *
<span class='line'>175</span>  * @param {ByteString} oid Object identifier as specified in appendix A.6.4
<span class='line'>176</span>  */</span><span class="WHIT">
<span class='line'>177</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.setTAAlgorithmIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="NAME">this.taOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>180</span> 
<span class='line'>181</span> 
<span class='line'>182</span> 
<span class='line'>183</span> </span><span class="COMM">/**
<span class='line'>184</span>  * Get the CAR as ByteString object
<span class='line'>185</span>  *
<span class='line'>186</span>  * @private
<span class='line'>187</span>  */</span><span class="WHIT">
<span class='line'>188</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.getCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certification Authority Reference"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x42</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.CAR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>192</span> 
<span class='line'>193</span> 
<span class='line'>194</span> 
<span class='line'>195</span> </span><span class="COMM">/**
<span class='line'>196</span>  * Get the CHR as ByteString object
<span class='line'>197</span>  *
<span class='line'>198</span>  * @private
<span class='line'>199</span>  */</span><span class="WHIT">
<span class='line'>200</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.getCHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certification Holder Reference"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.CHR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>204</span> 
<span class='line'>205</span> 
<span class='line'>206</span> 
<span class='line'>207</span> </span><span class="COMM">/**
<span class='line'>208</span>  * Get the encoded public key including domain parameters
<span class='line'>209</span>  *
<span class='line'>210</span>  * @private
<span class='line'>211</span>  */</span><span class="WHIT">
<span class='line'>212</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.getPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>213</span> 
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Key"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F49</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Object Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x06</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.taOID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> 
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Prime Modulus"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"First coefficient a"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Second coefficient b"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Base Point G"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.encodeUncompressedECPoint</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Order of the base point"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x85</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> 
<span class='line'>224</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Point y"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.encodeUncompressedECPoint</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> 
<span class='line'>226</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Cofactor f"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x87</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Composite Modulus"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Exponent"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>231</span> 
<span class='line'>232</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>233</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>234</span> 
<span class='line'>235</span> 
<span class='line'>236</span> 
<span class='line'>237</span> </span><span class="COMM">/**
<span class='line'>238</span>  * Get the encoded CPI as ByteString
<span class='line'>239</span>  *
<span class='line'>240</span>  * @private
<span class='line'>241</span>  */</span><span class="WHIT">
<span class='line'>242</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.getProfileIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.profileIdentifier</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> 
<span class='line'>246</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certificate Profile Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F29</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>249</span> 
<span class='line'>250</span> 
<span class='line'>251</span> 
<span class='line'>252</span> </span><span class="COMM">/**
<span class='line'>253</span>  * Get the DER-encoded extension vector
<span class='line'>254</span>  *
<span class='line'>255</span>  * @private
<span class='line'>256</span>  */</span><span class="WHIT">
<span class='line'>257</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.getExtensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certificate Extensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x65</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.extensions.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.extensions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>263</span> 
<span class='line'>264</span> 
<span class='line'>265</span> 
<span class='line'>266</span> </span><span class="COMM">/**
<span class='line'>267</span>  * Get the encoded certificate request body
<span class='line'>268</span>  *
<span class='line'>269</span>  * @private
<span class='line'>270</span>  */</span><span class="WHIT">
<span class='line'>271</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.getCertificateBody</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>272</span> 
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certificate Body"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F4E</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getProfileIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> 
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.CAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>279</span> 
<span class='line'>280</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> 
<span class='line'>283</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.extensions</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getExtensions</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>288</span> 
<span class='line'>289</span> 
<span class='line'>290</span> 
<span class='line'>291</span> </span><span class="COMM">/**
<span class='line'>292</span>  * Generate initial certificate request using the specified private key for signing
<span class='line'>293</span>  *
<span class='line'>294</span>  * @param {Key} privateKey Private key for signature creation
<span class='line'>295</span>  * @return The DER-encoded CV request
<span class='line'>296</span>  * @type ASN1
<span class='line'>297</span>  */</span><span class="WHIT">
<span class='line'>298</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.generateCVRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CV Certificate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F21</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> 
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">body</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificateBody</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>302</span> 
<span class='line'>303</span> </span><span class="WHIT">	</span><span class="NAME">request.add</span><span class="PUNC">(</span><span class="NAME">body</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>304</span> 
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.getSignatureMech</span><span class="PUNC">(</span><span class="NAME">this.taOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">body.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">this.taOID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keylen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">privateKey.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Signature"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F37</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CVC.unwrapSignature</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keylen</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Signature"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F37</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>313</span> 
<span class='line'>314</span> </span><span class="WHIT">	</span><span class="NAME">request.add</span><span class="PUNC">(</span><span class="NAME">signatureValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> 
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">request</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>318</span> 
<span class='line'>319</span> 
<span class='line'>320</span> 
<span class='line'>321</span> </span><span class="COMM">/**
<span class='line'>322</span>  * Countersign request
<span class='line'>323</span>  *
<span class='line'>324</span>  * @param {Crypto} crypto the crypto provide to use for signing the request
<span class='line'>325</span>  * @param {CVC} request the self-signed request
<span class='line'>326</span>  * @param {Key} authenticationKey Private key for used for signing and authenticating the request
<span class='line'>327</span>  * @param {PublicKeyReference} authCHR CHR of the authenticating authority
<span class='line'>328</span>  * @param {ByteString} taOID the public key object identifier of the authentication key
<span class='line'>329</span>  *
<span class='line'>330</span>  * @return The DER-encoded authenticated CV request
<span class='line'>331</span>  * @type ASN1
<span class='line'>332</span>  */</span><span class="WHIT">
<span class='line'>333</span> </span><span class="NAME">EAC2CVRequestGenerator.signAuthenticatedCVRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">request</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">authenticationKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">authCHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">outertaOID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">authRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Authentication"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x67</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> 
<span class='line'>336</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Certification Authority Reference"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x42</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">authCHR.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> 
<span class='line'>338</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureInput</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">request.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>339</span> 
<span class='line'>340</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.getSignatureMech</span><span class="PUNC">(</span><span class="NAME">outertaOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.sign</span><span class="PUNC">(</span><span class="NAME">authenticationKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signatureInput</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>342</span> 
<span class='line'>343</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">CVC.isECDSA</span><span class="PUNC">(</span><span class="NAME">outertaOID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>344</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keylen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">authenticationKey.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Signature"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F37</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CVC.unwrapSignature</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keylen</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>347</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Signature"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F37</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>349</span> 
<span class='line'>350</span> </span><span class="WHIT">	</span><span class="NAME">authRequest.add</span><span class="PUNC">(</span><span class="NAME">request</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT">	</span><span class="NAME">authRequest.add</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">	</span><span class="NAME">authRequest.add</span><span class="PUNC">(</span><span class="NAME">signatureValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>353</span> 
<span class='line'>354</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">authRequest</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>355</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>356</span> 
<span class='line'>357</span> 
<span class='line'>358</span> 
<span class='line'>359</span> </span><span class="COMM">/**
<span class='line'>360</span>  * Generate authenticated request
<span class='line'>361</span>  *
<span class='line'>362</span>  * @param {Key} requestKey Private key for the request signature
<span class='line'>363</span>  * @param {Key} authenticationKey Private key for used for signing and authenticating the request
<span class='line'>364</span>  * @param {PublicKeyReference} authCHR CHR of the authenticating authority
<span class='line'>365</span>  * @param {ByteString} taOID the public key object identifier of the authentication key
<span class='line'>366</span>  *
<span class='line'>367</span>  * @return The DER-encoded authenticated CV request
<span class='line'>368</span>  * @type ASN1
<span class='line'>369</span>  */</span><span class="WHIT">
<span class='line'>370</span> </span><span class="NAME">EAC2CVRequestGenerator.prototype.generateAuthenticatedCVRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">requestKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">authenticationKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">authCHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">outertaOID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>371</span> 
<span class='line'>372</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.generateCVRequest</span><span class="PUNC">(</span><span class="NAME">requestKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> 
<span class='line'>374</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">outertaOID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">		</span><span class="NAME">outertaOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.taOID</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator.signAuthenticatedCVRequest</span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">request</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">authenticationKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">authCHR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">outertaOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>378</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>379</span> 
<span class='line'>380</span> 
<span class='line'>381</span> 
<span class='line'>382</span> </span><span class="NAME">EAC2CVRequestGenerator.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>383</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">taOID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reqGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">EAC2CVRequestGenerator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>385</span> 
<span class='line'>386</span> </span><span class="WHIT">		</span><span class="COMM">// Set CPI</span><span class="WHIT">
<span class='line'>387</span> </span><span class="WHIT">		</span><span class="NAME">reqGenerator.setProfileIdentifier</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>388</span> 
<span class='line'>389</span> </span><span class="WHIT">		</span><span class="COMM">// Set "inner" CAR</span><span class="WHIT">
<span class='line'>390</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"decvca00000"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>391</span> </span><span class="WHIT">		</span><span class="NAME">reqGenerator.setCAR</span><span class="PUNC">(</span><span class="NAME">CAR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>392</span> 
<span class='line'>393</span> </span><span class="WHIT">		</span><span class="COMM">// Set public key for request</span><span class="WHIT">
<span class='line'>394</span> </span><span class="WHIT">		</span><span class="NAME">reqGenerator.setPublicKey</span><span class="PUNC">(</span><span class="NAME">pubKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>395</span> 
<span class='line'>396</span> </span><span class="WHIT">		</span><span class="COMM">// Set oid of algorithm</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">		</span><span class="NAME">reqGenerator.setTAAlgorithmIdentifier</span><span class="PUNC">(</span><span class="NAME">taOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span> 
<span class='line'>399</span> </span><span class="WHIT">		</span><span class="COMM">// Set some dummy extensions</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ext1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"ext1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"06022A11"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ext2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"ext2"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"06022A12"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">		</span><span class="NAME">reqGenerator.setExtensions</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">ext1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ext2</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>403</span> 
<span class='line'>404</span> </span><span class="WHIT">		</span><span class="COMM">// Set CHR for the request</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"dedvca00001"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>406</span> </span><span class="WHIT">		</span><span class="NAME">reqGenerator.setCHR</span><span class="PUNC">(</span><span class="NAME">CHR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>407</span> 
<span class='line'>408</span> </span><span class="WHIT">		</span><span class="COMM">// Generate the request</span><span class="WHIT">
<span class='line'>409</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">reqGenerator.generateAuthenticatedCVRequest</span><span class="PUNC">(</span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="STRN">"dedvca00000"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">taOID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>411</span> 
<span class='line'>412</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvreq</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">cvreq</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>414</span> 
<span class='line'>415</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">cvreq.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">taOID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">cvreq.verifyATWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">taOID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>418</span> 
<span class='line'>419</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> 
<span class='line'>421</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>422</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">	</span><span class="NAME">priKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> </span><span class="WHIT">	</span><span class="NAME">priKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256t1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>426</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256t1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>427</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>428</span> 
<span class='line'>429</span> </span><span class="WHIT">	</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>430</span> 
<span class='line'>431</span> 
<span class='line'>432</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>434</span> </span><span class="WHIT">	</span><span class="NAME">priKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>436</span> </span><span class="WHIT">	</span><span class="NAME">priKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"secp521r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>437</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"secp521r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>438</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>439</span> 
<span class='line'>440</span> </span><span class="WHIT">	</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>441</span> 
<span class='line'>442</span> 
<span class='line'>443</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>444</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>445</span> </span><span class="WHIT">	</span><span class="NAME">priKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>446</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>447</span> </span><span class="WHIT">	</span><span class="NAME">pubKey.setSize</span><span class="PUNC">(</span><span class="NUMB">1024</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>448</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>449</span> 
<span class='line'>450</span> </span><span class="WHIT">	</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-v1-5-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>451</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>452</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview A card verifiable certificate store using a PKCS#11 device as key store
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="COMM">// Imports</span><span class="WHIT">
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT">	 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PublicKeyReference'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT">			 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVC'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore</span><span class="WHIT">	 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVCertificateStore'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVCertificateStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVCCA</span><span class="WHIT">		 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVCCA'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVCCA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 33</span> 
<span class='line'> 34</span> 
<span class='line'> 35</span> 
<span class='line'> 36</span> </span><span class="COMM">/**
<span class='line'> 37</span>  * Create a CV certificate store using a PKCS#11 device as secure key store
<span class='line'> 38</span>  *
<span class='line'> 39</span>  * @class CV certificate store with PKCS#11 as secure key store
<span class='line'> 40</span>  * @constructor
<span class='line'> 41</span>  * @param {DAOFactory} daof the factory that can create data access objects for persistent information
<span class='line'> 42</span>  * @param {PKCS11Session} p11session logged in PKCS#11 session with device
<span class='line'> 43</span>  */</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">P11CVCertificateStore</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p11session</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="NAME">CVCertificateStore.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">daof</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.p11session</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p11session</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">P11Crypto</span><span class="PUNC">(</span><span class="NAME">p11session</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="NAME">P11CVCertificateStore.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Object.create</span><span class="PUNC">(</span><span class="NAME">CVCertificateStore.prototype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="NAME">P11CVCertificateStore.constructor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">P11CVCertificateStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> 
<span class='line'> 53</span> </span><span class="NAME">exports.P11CVCertificateStore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">P11CVCertificateStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> 
<span class='line'> 55</span> 
<span class='line'> 56</span> 
<span class='line'> 57</span> </span><span class="COMM">/**
<span class='line'> 58</span>  * Get crypto object
<span class='line'> 59</span>  *
<span class='line'> 60</span>  * @type HSMCrypto
<span class='line'> 61</span>  * @return the HSMCrypto object
<span class='line'> 62</span>  */</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="NAME">P11CVCertificateStore.prototype.getCrypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 66</span> 
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="COMM">/**
<span class='line'> 70</span>  * Transform path and certificate holder into a label
<span class='line'> 71</span>  *
<span class='line'> 72</span>  * @param {String} path the path
<span class='line'> 73</span>  * @param {PublicKeyReference} chr the certificate holder reference
<span class='line'> 74</span>  * @type String
<span class='line'> 75</span>  * @return the key label
<span class='line'> 76</span>  */</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="NAME">P11CVCertificateStore.path2label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr.getSequenceNo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 80</span> 
<span class='line'> 81</span> 
<span class='line'> 82</span> 
<span class='line'> 83</span> </span><span class="COMM">/**
<span class='line'> 84</span>  * Get a private key in the certificate store. Overrides method in CVCertificateStore.
<span class='line'> 85</span>  *
<span class='line'> 86</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'> 87</span>  * @param {PublicKeyReference} chr the public key reference for this key
<span class='line'> 88</span>  * @returns the private key or null if not found
<span class='line'> 89</span>  * @type Key
<span class='line'> 90</span>  */</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="NAME">P11CVCertificateStore.prototype.getPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">P11CVCertificateStore.path2label</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> 
<span class='line'> 94</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">attr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">	</span><span class="NAME">attr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_CLASS</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Object.CKO_PRIVATE_KEY</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">	</span><span class="NAME">attr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_LABEL</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.p11session.enumerateObjects</span><span class="PUNC">(</span><span class="NAME">attr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> 
<span class='line'> 99</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">o.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">o.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getAttribute</span><span class="PUNC">(</span><span class="NAME">PKCS11Object.CKA_LABEL</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> 
<span class='line'>107</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"P11CVCertificateStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">o.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Duplicate key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>110</span> 
<span class='line'>111</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p11key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> 
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">	</span><span class="NAME">key.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> 
<span class='line'>116</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curve</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p11key.getAttribute</span><span class="PUNC">(</span><span class="NAME">PKCS11Object.CKA_EC_PARAMS</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">curve</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">curve</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> 
<span class='line'>120</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">	</span><span class="NAME">key.p11</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p11key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>125</span> 
<span class='line'>126</span> 
<span class='line'>127</span> 
<span class='line'>128</span> </span><span class="COMM">/**
<span class='line'>129</span>  * Determine curve from key parameter
<span class='line'>130</span>  *
<span class='line'>131</span>  * @param {Key} key the key
<span class='line'>132</span>  * @type ByteString
<span class='line'>133</span>  * @return the curve OID
<span class='line'>134</span>  */</span><span class="WHIT">
<span class='line'>135</span> </span><span class="NAME">P11CVCertificateStore.determineCurve</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curves</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">		</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP192r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">		</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP224r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">		</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">		</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP384r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">		</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP512r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>147</span> 
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">curves.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spec</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">		</span><span class="NAME">spec.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">curves</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">spec.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">curves</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"P11CVCertificateStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown curve"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>157</span> 
<span class='line'>158</span> 
<span class='line'>159</span> 
<span class='line'>160</span> </span><span class="COMM">/**
<span class='line'>161</span>  * Generate key pair
<span class='line'>162</span>  *
<span class='line'>163</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>164</span>  * @param {PublicKeyReference} chr the public key reference for this key pair
<span class='line'>165</span>  * @param {Number} algo the key generation algorithm (Crypto.EC or Crypto.RSA)
<span class='line'>166</span>  * @param {Key} prk the private key template
<span class='line'>167</span>  * @param {Key} puk the public key template
<span class='line'>168</span>  */</span><span class="WHIT">
<span class='line'>169</span> </span><span class="NAME">P11CVCertificateStore.prototype.generateKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">P11CVCertificateStore.path2label</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> 
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">priAttr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="NAME">priAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_TOKEN</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="NAME">priAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_SIGN</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="NAME">priAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_SENSITIVE</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="NAME">priAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_PRIVATE</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="NAME">priAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_LABEL</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> 
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pubAttr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="NAME">pubAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_TOKEN</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="NAME">pubAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_VERIFY</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="NAME">pubAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_LABEL</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> 
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">		</span><span class="NAME">pubAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_MODULUS_BITS</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">puk.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">		</span><span class="NAME">pubAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_PUBLIC_EXPONENT</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"010001"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.p11session.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">PKCS11Session.CKM_RSA_PKCS_KEY_PAIR_GEN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubAttr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priAttr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> 
<span class='line'>191</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keys</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getAttribute</span><span class="PUNC">(</span><span class="NAME">PKCS11Object.CKA_VALUE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">pk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">		</span><span class="NAME">puk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pk.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.right</span><span class="PUNC">(</span><span class="NAME">puk.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">		</span><span class="NAME">puk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pk.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curve</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">P11CVCertificateStore.determineCurve</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curveasn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">curve</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> 
<span class='line'>200</span> </span><span class="WHIT">		</span><span class="NAME">pubAttr</span><span class="PUNC">[</span><span class="NAME">PKCS11Object.CKA_EC_PARAMS</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">curveasn.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.p11session.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">PKCS11Session.CKM_EC_KEY_PAIR_GEN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubAttr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priAttr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> 
<span class='line'>203</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keys</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getAttribute</span><span class="PUNC">(</span><span class="NAME">PKCS11Object.CKA_VALUE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pk.value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> 
<span class='line'>207</span> </span><span class="WHIT">		</span><span class="NAME">prk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">curve</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">		</span><span class="NAME">puk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point.left</span><span class="PUNC">(</span><span class="NAME">point.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">		</span><span class="NAME">puk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point.right</span><span class="PUNC">(</span><span class="NAME">point.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>211</span> 
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="NAME">puk.p11</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keys</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="NAME">prk.p11</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keys</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>215</span> 
<span class='line'>216</span> 
<span class='line'>217</span> 
<span class='line'>218</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">P11Crypto</span><span class="PUNC">(</span><span class="NAME">p11session</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="NAME">this.p11session</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p11session</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>222</span> 
<span class='line'>223</span> 
<span class='line'>224</span> 
<span class='line'>225</span> </span><span class="NAME">P11Crypto.prototype.sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mech_hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> 
<span class='line'>230</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA1</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_ECDSA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">			</span><span class="NAME">mech_hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">			</span><span class="NAME">wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA224</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_ECDSA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">			</span><span class="NAME">mech_hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_224</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">			</span><span class="NAME">wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_ECDSA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">			</span><span class="NAME">mech_hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">			</span><span class="NAME">wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA384</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_ECDSA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">			</span><span class="NAME">mech_hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">			</span><span class="NAME">wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA512</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_ECDSA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">			</span><span class="NAME">mech_hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">			</span><span class="NAME">wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_ECDSA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">			</span><span class="NAME">wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA1</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_SHA1_RSA_PKCS</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA256</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_SHA256_RSA_PKCS</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA512</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_SHA512_RSA_PKCS</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA1</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_SHA1_RSA_PKCS_PSS</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA256</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_SHA256_RSA_PKCS_PSS</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA512</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">			</span><span class="NAME">ckm_sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS11Session.CKM_SHA512_RSA_PKCS_PSS</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"P11Crypto"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unsupported mechanism"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>281</span> 
<span class='line'>282</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mech_hash</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">		</span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">mech_hash</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>285</span> 
<span class='line'>286</span> </span><span class="WHIT">	</span><span class="COMM">// Test with single step C_Sign</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">	</span><span class="NAME">this.p11session.signInit</span><span class="PUNC">(</span><span class="NAME">ckm_sign</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.p11</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>288</span> 
<span class='line'>289</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.p11session.sign</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> 
<span class='line'>291</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">wrap</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">		</span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.wrapSignature</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>294</span> 
<span class='line'>295</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>297</span> 
<span class='line'>298</span> 
<span class='line'>299</span> 
<span class='line'>300</span> </span><span class="NAME">P11Crypto.prototype.verify</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto.verify</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>302</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>303</span> 
<span class='line'>304</span> 
<span class='line'>305</span> 
<span class='line'>306</span> </span><span class="NAME">P11CVCertificateStore.testPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSystem.mapFilename</span><span class="PUNC">(</span><span class="STRN">"testca"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPSystem.CWD</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>307</span> 
<span class='line'>308</span> </span><span class="NAME">P11CVCertificateStore.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PKCS11Provider</span><span class="PUNC">(</span><span class="STRN">"/usr/local/lib/opensc-pkcs11.so"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>310</span> 
<span class='line'>311</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">slots</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p.getSlots</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">slots</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">slot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">slots</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> 
<span class='line'>316</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Using slot: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">slot.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> 
<span class='line'>318</span> </span><span class="WHIT">		</span><span class="COMM">// Open R/W session</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PKCS11Session</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">slot.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>320</span> 
<span class='line'>321</span> </span><span class="WHIT">		</span><span class="COMM">// Login with USER PIN</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">		</span><span class="NAME">s.login</span><span class="PUNC">(</span><span class="STRN">"648219"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> 
<span class='line'>324</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">P11CVCertificateStore</span><span class="PUNC">(</span><span class="NAME">P11CVCertificateStore.testPath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/cvca"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>325</span> 
<span class='line'>326</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cs.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>327</span> 
<span class='line'>328</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">		</span><span class="NAME">prk.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">		</span><span class="NAME">prk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">		</span><span class="NAME">puk.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">		</span><span class="NAME">puk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> 
<span class='line'>335</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="STRN">"DE00001"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">		</span><span class="NAME">cs.generateKeyPair</span><span class="PUNC">(</span><span class="STRN">"/test"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"Hello World"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>338</span> 
<span class='line'>339</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.sign</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">crypto.verify</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>341</span> 
<span class='line'>342</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.sign</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA224</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>343</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">crypto.verify</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA224</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>344</span> 
<span class='line'>345</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.sign</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">crypto.verify</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>347</span> 
<span class='line'>348</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.sign</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA384</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">crypto.verify</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA384</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span> 
<span class='line'>351</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.sign</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA512</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">crypto.verify</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA512</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sig</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>353</span> 
<span class='line'>354</span> 
<span class='line'>355</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVCCA</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"/UTCVCA"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>356</span> 
<span class='line'>357</span> </span><span class="WHIT">		</span><span class="COMM">// Create a new request</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="STRN">"UTCVCA00000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>359</span> 
<span class='line'>360</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.generateRequest</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Request: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">req.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span> 
<span class='line'>364</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">req.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> 
<span class='line'>366</span> </span><span class="WHIT">		</span><span class="COMM">// Create self-signed or link certificate based on request</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">certificateValidityDays</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">				   </span><span class="NAME">chatRoleOID</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-IS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">				   </span><span class="NAME">chatRights</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"E3"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">				   </span><span class="NAME">includeDomainParameter</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT">				   </span><span class="NAME">extensions</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>372</span> </span><span class="WHIT">				 </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.generateCertificate</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Certificate: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">cert.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>376</span> 
<span class='line'>377</span> </span><span class="WHIT">		</span><span class="COMM">// Import certificate into store, making it the most current certificate</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">		</span><span class="NAME">cvca.storeCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> 
<span class='line'>380</span> </span><span class="WHIT">		</span><span class="COMM">// Generate additional self-signed root certificate</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">		</span><span class="COMM">// This must be done after the link certificate has been imported</span><span class="WHIT">
<span class='line'>382</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">certificateValidityDays</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>383</span> </span><span class="WHIT">				   </span><span class="NAME">chatRoleOID</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-IS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT">				   </span><span class="NAME">chatRights</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"E3"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">				   </span><span class="NAME">includeDomainParameter</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>386</span> </span><span class="WHIT">				   </span><span class="NAME">extensions</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>387</span> </span><span class="WHIT">				 </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>388</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.generateCertificate</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>389</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Certificate: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>390</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">cert.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>391</span> 
<span class='line'>392</span> </span><span class="WHIT">		</span><span class="COMM">// Import certificate into store, making it the most current certificate</span><span class="WHIT">
<span class='line'>393</span> </span><span class="WHIT">		</span><span class="NAME">cvca.storeCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>394</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>395</span> </span><span class="WHIT">	</span><span class="KEYW">finally</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">		</span><span class="NAME">p.cleanup</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>398</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>399</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of the PACE/SAC protocol for both card and terminal
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Create a PACEInfo object
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * @class &lt;p>This class encodes and decodes PACEInfo objects.&lt;/p>
<span class='line'> 33</span>  * &lt;p>The class implements the following ASN.1 syntax:&lt;/p>
<span class='line'> 34</span>  * &lt;pre>
<span class='line'> 35</span>  * PACEInfo ::= SEQUENCE {
<span class='line'> 36</span>  * 		protocol	OBJECT IDENTIFIER,
<span class='line'> 37</span>  * 		version INTEGER, -- MUST be 1 or 2
<span class='line'> 38</span>  * 		parameterId INTEGER OPTIONAL
<span class='line'> 39</span>  * }
<span class='line'> 40</span>  * &lt;/pre>
<span class='line'> 41</span>  * @constructor
<span class='line'> 42</span>  * @param {ASN1} the optional tlv structure to initialize the object
<span class='line'> 43</span>  */</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PACEInfo</span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> 
<span class='line'> 49</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">		</span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">		</span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> 
<span class='line'> 58</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tlv.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">			</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">			</span><span class="NAME">this.parameterId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 65</span> 
<span class='line'> 66</span> </span><span class="NAME">exports.PACEInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACEInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> 
<span class='line'> 70</span> </span><span class="COMM">/**
<span class='line'> 71</span>  * Convert object to TLV structure
<span class='line'> 72</span>  *
<span class='line'> 73</span>  * @return the TLV structure
<span class='line'> 74</span>  * @type ASN1
<span class='line'> 75</span>  */</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="NAME">PACEInfo.prototype.toTLV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> 
<span class='line'> 79</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> 
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.version</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> 
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.parameterId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.parameterId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 92</span> 
<span class='line'> 93</span> 
<span class='line'> 94</span> 
<span class='line'> 95</span> </span><span class="NAME">PACEInfo.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"PACEInfo(protocol="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", version="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", parameterId="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameterId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 98</span> 
<span class='line'> 99</span> 
<span class='line'>100</span> 
<span class='line'>101</span> </span><span class="COMM">/**
<span class='line'>102</span>  * Create a PACEDomainParameterInfo object
<span class='line'>103</span>  *
<span class='line'>104</span>  * @class &lt;p>This class encodes and decodes PACEDomainParameterInfo objects.&lt;/p>
<span class='line'>105</span>  * &lt;p>The class implements the following ASN.1 syntax:&lt;/p>
<span class='line'>106</span>  * &lt;pre>
<span class='line'>107</span>  *   PACEDomainParameterInfo ::= SEQUENCE {
<span class='line'>108</span>  *   	protocol OBJECT IDENTIFIER(id-PACE-DH | id-PACE-ECDH),
<span class='line'>109</span>  *   	domainParameter AlgorithmIdentifier,
<span class='line'>110</span>  *   	parameterId INTEGER OPTIONAL
<span class='line'>111</span>  *   }
<span class='line'>112</span>  * &lt;/pre>
<span class='line'>113</span>  * @constructor
<span class='line'>114</span>  * @param {ASN1} the optional tlv structure to initialize the object
<span class='line'>115</span>  */</span><span class="WHIT">
<span class='line'>116</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PACEDomainParameterInfo</span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> 
<span class='line'>121</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">		</span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> 
<span class='line'>126</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> 
<span class='line'>129</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ECCUtils.decodeECParameters</span><span class="PUNC">(</span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>135</span> 
<span class='line'>136</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tlv.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">			</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">			</span><span class="NAME">this.parameterId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>141</span> 
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>143</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>144</span> 
<span class='line'>145</span> </span><span class="NAME">exports.PACEDomainParameterInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACEDomainParameterInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> 
<span class='line'>147</span> 
<span class='line'>148</span> 
<span class='line'>149</span> </span><span class="COMM">/**
<span class='line'>150</span>  * Convert object to TLV structure
<span class='line'>151</span>  *
<span class='line'>152</span>  * @return the TLV structure
<span class='line'>153</span>  * @type ASN1
<span class='line'>154</span>  */</span><span class="WHIT">
<span class='line'>155</span> </span><span class="NAME">PACEDomainParameterInfo.prototype.toTLV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> 
<span class='line'>158</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> 
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.standardizedDomainParameter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">		</span><span class="NAME">c.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"standardizedDomainParameter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">		</span><span class="NAME">c.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.standardizedDomainParameter</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>165</span> 
<span class='line'>166</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> 
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.parameterId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.parameterId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>176</span> 
<span class='line'>177</span> 
<span class='line'>178</span> 
<span class='line'>179</span> </span><span class="NAME">PACEDomainParameterInfo.getStandardizedDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>184</span> 
<span class='line'>185</span> 
<span class='line'>186</span> 
<span class='line'>187</span> </span><span class="NAME">PACEDomainParameterInfo.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"PACEDomainParameterInfo(protocol="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", parameterId="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.parameterId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>190</span> 
<span class='line'>191</span> 
<span class='line'>192</span> 
<span class='line'>193</span> </span><span class="COMM">/**
<span class='line'>194</span>  * Create a PACE protocol object
<span class='line'>195</span>  *
<span class='line'>196</span>  * @class This class implements the PACE protocol
<span class='line'>197</span>  *
<span class='line'>198</span>  * @constructor
<span class='line'>199</span>  *
<span class='line'>200</span>  * @param {Crypto} crypto the crypto provider
<span class='line'>201</span>  * @param {ByteString} algo the algorithm OID
<span class='line'>202</span>  * @param {Key} domainparam the key object holding ECC domain parameter
<span class='line'>203</span>  * @param {Number} version protocol version (1 or 2)
<span class='line'>204</span>  */</span><span class="WHIT">
<span class='line'>205</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PACE</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">domparam</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">version</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="NAME">this.algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">algo.toString</span><span class="PUNC">(</span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="NAME">this.domparam</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">domparam</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> 
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">version</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">		</span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">version</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">		</span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>215</span> 
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">PACE.id_PACE_ECDH_GM_3DES_CBC_CBC</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">		</span><span class="NAME">this.symalgo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Key.DES</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">		</span><span class="NAME">this.symalgo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Key.AES</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>221</span> 
<span class='line'>222</span> </span><span class="WHIT">	</span><span class="NAME">this.sym</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.AES</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>224</span> 
<span class='line'>225</span> </span><span class="NAME">exports.PACE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> 
<span class='line'>227</span> 
<span class='line'>228</span> 
<span class='line'>229</span> </span><span class="COMM">/**
<span class='line'>230</span>  * Return algorithm type
<span class='line'>231</span>  *
<span class='line'>232</span>  * @type Number
<span class='line'>233</span>  * @returns Either Key.DES or Key.AES
<span class='line'>234</span>  */</span><span class="WHIT">
<span class='line'>235</span> </span><span class="NAME">PACE.prototype.getSymmetricAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.symalgo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>238</span> 
<span class='line'>239</span> 
<span class='line'>240</span> 
<span class='line'>241</span> </span><span class="COMM">/**
<span class='line'>242</span>  * Derive key from input parameter, counter and optional nonce
<span class='line'>243</span>  *
<span class='line'>244</span>  * @param {ByteString} input the first part of the hash input
<span class='line'>245</span>  * @param {Number} counter the counter value
<span class='line'>246</span>  * @param {nonce} the optional nonce inserted between the input and the counter
<span class='line'>247</span>  * @return the key object
<span class='line'>248</span>  * @type Key
<span class='line'>249</span>  */</span><span class="WHIT">
<span class='line'>250</span> </span><span class="NAME">PACE.prototype.deriveKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">input</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">counter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">		</span><span class="NAME">input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">input.concat</span><span class="PUNC">(</span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>254</span> 
<span class='line'>255</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="STRN">"000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">counter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>257</span> 
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="NAME">input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">input.concat</span><span class="PUNC">(</span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> 
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> 
<span class='line'>262</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">PACE.id_PACE_ECDH_GM_3DES_CBC_CBC</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">digest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.DES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">digest.left</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_128</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">digest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">digest.left</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_192</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">digest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">digest.left</span><span class="PUNC">(</span><span class="NUMB">24</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.algo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_256</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">digest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">digest</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"pace"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Algorithm not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>279</span> 
<span class='line'>280</span> 
<span class='line'>281</span> 
<span class='line'>282</span> </span><span class="COMM">/**
<span class='line'>283</span>  * Set the password and derive the PACE key.
<span class='line'>284</span>  * @param {ByteString} pwd the PACE password (Hash Value for MRZ and ASCII string for others)
<span class='line'>285</span>  * @return the PACE key.
<span class='line'>286</span>  */</span><span class="WHIT">
<span class='line'>287</span> </span><span class="NAME">PACE.prototype.setPassword</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pwd</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">	</span><span class="NAME">this.pacekey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">pwd</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>289</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>290</span> 
<span class='line'>291</span> 
<span class='line'>292</span> 
<span class='line'>293</span> </span><span class="COMM">/**
<span class='line'>294</span>  * Set the PACE key.
<span class='line'>295</span>  * @param {ByteString} key the PACE key
<span class='line'>296</span>  * @return the PACE key.
<span class='line'>297</span>  */</span><span class="WHIT">
<span class='line'>298</span> </span><span class="NAME">PACE.prototype.setPACEKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">	</span><span class="NAME">this.pacekey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>301</span> 
<span class='line'>302</span> 
<span class='line'>303</span> 
<span class='line'>304</span> </span><span class="COMM">/**
<span class='line'>305</span>  * Generate nonce and encrypt using PACE key.
<span class='line'>306</span>  * @return the encrypted nonce
<span class='line'>307</span>  * @type ByteString
<span class='line'>308</span>  */</span><span class="WHIT">
<span class='line'>309</span> </span><span class="NAME">PACE.prototype.getEncryptedNonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">	</span><span class="NAME">this.nonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.symalgo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Key.DES</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">encnonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">this.pacekey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.nonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">encnonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">this.pacekey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_ECB</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.nonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">encnonce</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>318</span> 
<span class='line'>319</span> 
<span class='line'>320</span> 
<span class='line'>321</span> </span><span class="COMM">/**
<span class='line'>322</span>  * Decrypt and store nonce using PACE key.
<span class='line'>323</span>  *
<span class='line'>324</span>  * @param {ByteString} nonce the encrypted nonce
<span class='line'>325</span>  */</span><span class="WHIT">
<span class='line'>326</span> </span><span class="NAME">PACE.prototype.decryptNonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">encnonce</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>327</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.symalgo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Key.DES</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">		</span><span class="NAME">this.nonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.pacekey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encnonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">		</span><span class="NAME">this.nonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.pacekey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_ECB</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encnonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>332</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>333</span> 
<span class='line'>334</span> 
<span class='line'>335</span> 
<span class='line'>336</span> </span><span class="COMM">/**
<span class='line'>337</span>  * Returns true, if the nonce is known.
<span class='line'>338</span>  * @return true if the nonce is known
<span class='line'>339</span>  * @type Boolean
<span class='line'>340</span>  */</span><span class="WHIT">
<span class='line'>341</span> </span><span class="NAME">PACE.prototype.hasNonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.nonce</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>343</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>344</span> 
<span class='line'>345</span> 
<span class='line'>346</span> 
<span class='line'>347</span> </span><span class="COMM">/**
<span class='line'>348</span>  * Generate ephemeral ECC key pair.
<span class='line'>349</span>  *
<span class='line'>350</span>  * @param domainParameter the domain parameter for the key pair
<span class='line'>351</span>  * @return the ephemeral public key
<span class='line'>352</span>  * @type Key
<span class='line'>353</span>  */</span><span class="WHIT">
<span class='line'>354</span> </span><span class="NAME">PACE.prototype.generateEphemeralKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">domainParameter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>355</span> </span><span class="WHIT">	</span><span class="NAME">this.prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">domainParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT">	</span><span class="NAME">this.prk.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>357</span> 
<span class='line'>358</span> </span><span class="WHIT">	</span><span class="NAME">this.puk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">domainParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT">	</span><span class="NAME">this.puk.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>360</span> 
<span class='line'>361</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.prk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>362</span> 
<span class='line'>363</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.puk</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>364</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>365</span> 
<span class='line'>366</span> 
<span class='line'>367</span> 
<span class='line'>368</span> </span><span class="COMM">/**
<span class='line'>369</span>  * Generates and returns the mapping data for this instance
<span class='line'>370</span>  * @return the mapping data
<span class='line'>371</span>  * @type ByteString
<span class='line'>372</span>  */</span><span class="WHIT">
<span class='line'>373</span> </span><span class="NAME">PACE.prototype.getMappingData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.prk</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">		</span><span class="NAME">this.generateEphemeralKeyPair</span><span class="PUNC">(</span><span class="NAME">this.domparam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>377</span> 
<span class='line'>378</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ecpk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> </span><span class="WHIT">	</span><span class="NAME">ecpk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ecpk.concat</span><span class="PUNC">(</span><span class="NAME">this.puk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>380</span> </span><span class="WHIT">	</span><span class="NAME">ecpk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ecpk.concat</span><span class="PUNC">(</span><span class="NAME">this.puk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ecpk</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>383</span> 
<span class='line'>384</span> 
<span class='line'>385</span> 
<span class='line'>386</span> </span><span class="COMM">/**
<span class='line'>387</span>  * Performs the mapping operation with mapping data from the other side
<span class='line'>388</span>  *
<span class='line'>389</span>  */</span><span class="WHIT">
<span class='line'>390</span> </span><span class="NAME">PACE.prototype.performMapping</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mappingData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>391</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mappingData.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>392</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"PACE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Public key must start with '04'"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>393</span> 
<span class='line'>394</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.nonce</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>395</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"PACE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6985</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Nonce is not yet defined"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>396</span> 
<span class='line'>397</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mappingData.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.prk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"PACE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Public key size does not match private key size"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>401</span> 
<span class='line'>402</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDHP</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mappingData.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>403</span> 
<span class='line'>404</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">H</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.domparam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>406</span> </span><span class="WHIT">	</span><span class="NAME">H.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>407</span> </span><span class="WHIT">	</span><span class="NAME">H.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">h.bytes</span><span class="PUNC">(</span><span class="NAME">l</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>408</span> 
<span class='line'>409</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">G</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.domparam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">	</span><span class="COMM">// Copy generator point into public key point</span><span class="WHIT">
<span class='line'>411</span> </span><span class="WHIT">	</span><span class="NAME">G.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">G.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>412</span> </span><span class="WHIT">	</span><span class="NAME">G.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">G.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>413</span> 
<span class='line'>414</span> </span><span class="WHIT">	</span><span class="COMM">// Calculate G' = s * G + P, where P is initially stored in H and</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">	</span><span class="COMM">// G' is finally stored in H.</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto.deriveKey</span><span class="PUNC">(</span><span class="NAME">G</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.EC_MULTIPLY_ADD</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.nonce</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">H</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>417</span> 
<span class='line'>418</span> </span><span class="WHIT">	</span><span class="COMM">// Create new domain parameter with G'</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">	</span><span class="NAME">this.ephDomParam</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.domparam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> </span><span class="WHIT">	</span><span class="NAME">this.ephDomParam.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">H.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>421</span> </span><span class="WHIT">	</span><span class="NAME">this.ephDomParam.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">H.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>422</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>423</span> 
<span class='line'>424</span> 
<span class='line'>425</span> 
<span class='line'>426</span> </span><span class="COMM">/**
<span class='line'>427</span>  * Returns the ephemeral public key based on the new domain parameter
<span class='line'>428</span>  *
<span class='line'>429</span>  * @return the encoded public key
<span class='line'>430</span>  * @type ByteString
<span class='line'>431</span>  */</span><span class="WHIT">
<span class='line'>432</span> </span><span class="NAME">PACE.prototype.getEphemeralPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT">	</span><span class="NAME">this.generateEphemeralKeyPair</span><span class="PUNC">(</span><span class="NAME">this.ephDomParam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>434</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ecpk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT">	</span><span class="NAME">ecpk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ecpk.concat</span><span class="PUNC">(</span><span class="NAME">this.puk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>436</span> </span><span class="WHIT">	</span><span class="NAME">ecpk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ecpk.concat</span><span class="PUNC">(</span><span class="NAME">this.puk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>437</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ecpk</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>438</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>439</span> 
<span class='line'>440</span> 
<span class='line'>441</span> 
<span class='line'>442</span> </span><span class="COMM">/**
<span class='line'>443</span>  * Performs the mapping operation with mapping data from the other side
<span class='line'>444</span>  *
<span class='line'>445</span>  * @param {ByteString} publicKey the public key in encoded format
<span class='line'>446</span>  */</span><span class="WHIT">
<span class='line'>447</span> </span><span class="NAME">PACE.prototype.performKeyAgreement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>448</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">publicKey.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"PACE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Public key must start with '04'"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> 
<span class='line'>451</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.nonce</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>452</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"PACE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6985</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Nonce is not yet defined"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>453</span> 
<span class='line'>454</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">publicKey.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.prk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"PACE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Public key size does not match private key size"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>458</span> 
<span class='line'>459</span> </span><span class="WHIT">	</span><span class="NAME">this.otherPuK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">this.ephDomParam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>460</span> </span><span class="WHIT">	</span><span class="NAME">this.otherPuK.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.bytes</span><span class="PUNC">(</span><span class="WHIT">    </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> </span><span class="WHIT">	</span><span class="NAME">this.otherPuK.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.bytes</span><span class="PUNC">(</span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>462</span> 
<span class='line'>463</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>464</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Shared Secret K:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>466</span> </span><span class="WHIT">	</span><span class="NAME">this.kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>467</span> </span><span class="WHIT">	</span><span class="NAME">this.kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>468</span> 
<span class='line'>469</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>470</span> 
<span class='line'>471</span> 
<span class='line'>472</span> 
<span class='line'>473</span> </span><span class="COMM">/**
<span class='line'>474</span>  * Strips leading zeros of a ByteString
<span class='line'>475</span>  *
<span class='line'>476</span>  * @param {ByteString} value the ByteString value
<span class='line'>477</span>  * @return the stripped ByteString object, may be an empty ByteString
<span class='line'>478</span>  * @type ByteString
<span class='line'>479</span>  */</span><span class="WHIT">
<span class='line'>480</span> </span><span class="NAME">PACE.stripLeadingZeros</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>483</span> 
<span class='line'>484</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value.right</span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>485</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>486</span> 
<span class='line'>487</span> 
<span class='line'>488</span> 
<span class='line'>489</span> </span><span class="COMM">/**
<span class='line'>490</span>  * Encode an ECC public key in the format defined by the EAC 2.0 specification
<span class='line'>491</span>  *
<span class='line'>492</span>  * @param {String} oid the object identifier to encode
<span class='line'>493</span>  * @param {Key} key the EC public key
<span class='line'>494</span>  * @param {Boolean} withDP true to encode domain parameter as well
<span class='line'>495</span>  * @type ASN1
<span class='line'>496</span>  * @returns the ASN1 encoded public key object
<span class='line'>497</span>  */</span><span class="WHIT">
<span class='line'>498</span> </span><span class="NAME">PACE.encodePublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">withDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>499</span> 
<span class='line'>500</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"ecPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F49</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"objectIdentifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">withDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"primeModulus"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"firstCoefficient"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"secondCoefficient"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> 
<span class='line'>507</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>508</span> </span><span class="WHIT">		</span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.concat</span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>509</span> </span><span class="WHIT">		</span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.concat</span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>510</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"basePoint"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>511</span> 
<span class='line'>512</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"orderOfTheBasePoint"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x85</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>513</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>514</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT">	</span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.concat</span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>516</span> </span><span class="WHIT">	</span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.concat</span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>517</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"publicPoint"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>518</span> 
<span class='line'>519</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">withDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>520</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cofactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>521</span> </span><span class="WHIT">		</span><span class="NAME">cofactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">cofactor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span> 
<span class='line'>523</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"cofactor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x87</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cofactor</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>525</span> 
<span class='line'>526</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>527</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>528</span> 
<span class='line'>529</span> 
<span class='line'>530</span> 
<span class='line'>531</span> </span><span class="COMM">/**
<span class='line'>532</span>  * Calculate the authentication token over the public key received from
<span class='line'>533</span>  * the other side
<span class='line'>534</span>  *
<span class='line'>535</span>  * @return the MAC over the authentication data
<span class='line'>536</span>  * @type ByteString
<span class='line'>537</span>  */</span><span class="WHIT">
<span class='line'>538</span> </span><span class="NAME">PACE.prototype.calculateAuthenticationToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>539</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.encodePublicKey</span><span class="PUNC">(</span><span class="NAME">this.algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.otherPuK</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>540</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Authentication Token:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>541</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>542</span> 
<span class='line'>543</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.symalgo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Key.DES</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>544</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>545</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">at</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_MAC_EMV</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>546</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>547</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">at</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>548</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>549</span> 
<span class='line'>550</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">at</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>551</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>552</span> 
<span class='line'>553</span> 
<span class='line'>554</span> 
<span class='line'>555</span> </span><span class="COMM">/**
<span class='line'>556</span>  * Calculate and verify the authentication token over the public key received from
<span class='line'>557</span>  * the other side
<span class='line'>558</span>  *
<span class='line'>559</span>  * @param {ByteString} the MAC over the authentication data
<span class='line'>560</span>  * @return true if the MAC is valid
<span class='line'>561</span>  * @type Boolean
<span class='line'>562</span>  */</span><span class="WHIT">
<span class='line'>563</span> </span><span class="NAME">PACE.prototype.verifyAuthenticationToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">authToken</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>564</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.encodePublicKey</span><span class="PUNC">(</span><span class="NAME">this.algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>565</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Authentication Token:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>566</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>567</span> 
<span class='line'>568</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.symalgo</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Key.DES</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>569</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>570</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">at</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.DES_MAC_EMV</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>572</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">at</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>573</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>574</span> 
<span class='line'>575</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">at.equals</span><span class="PUNC">(</span><span class="NAME">authToken</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>576</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>577</span> 
<span class='line'>578</span> 
<span class='line'>579</span> 
<span class='line'>580</span> </span><span class="COMM">/**
<span class='line'>581</span>  * Returns true, if the mapping has been performed.
<span class='line'>582</span>  * @return true if the mapping has been performed
<span class='line'>583</span>  * @type Boolean
<span class='line'>584</span>  */</span><span class="WHIT">
<span class='line'>585</span> </span><span class="NAME">PACE.prototype.hasMapping</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>586</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.ephDomParam</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>587</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>588</span> 
<span class='line'>589</span> 
<span class='line'>590</span> 
<span class='line'>591</span> </span><span class="COMM">/**
<span class='line'>592</span>  * Describe key
<span class='line'>593</span>  * @param {Key} the key
<span class='line'>594</span>  * @return the string describing the key
<span class='line'>595</span>  * @type String
<span class='line'>596</span>  */</span><span class="WHIT">
<span class='line'>597</span> </span><span class="NAME">PACE.keyToString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>598</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>599</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>600</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">kval</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>601</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"(AES) "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kval</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>602</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>603</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.DES</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>604</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">kval</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>605</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"(DES) "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kval</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>606</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>607</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>608</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>609</span> 
<span class='line'>610</span> 
<span class='line'>611</span> 
<span class='line'>612</span> </span><span class="COMM">/**
<span class='line'>613</span>  * Returns a human readable presentation of the current pace state.
<span class='line'>614</span>  * return {String} the object information
<span class='line'>615</span>  */</span><span class="WHIT">
<span class='line'>616</span> </span><span class="NAME">PACE.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>617</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Algorithm "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.algo</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>618</span> 
<span class='line'>619</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.pacekey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>620</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"PACE Key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">PACE.keyToString</span><span class="PUNC">(</span><span class="NAME">this.pacekey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>621</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>622</span> 
<span class='line'>623</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.nonce</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>624</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Nonce "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.nonce</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>625</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>626</span> 
<span class='line'>627</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.ephDomParam</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>628</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Point G' "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.ephDomParam.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.ephDomParam.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>629</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>630</span> 
<span class='line'>631</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.kenc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>632</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Kenc "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">PACE.keyToString</span><span class="PUNC">(</span><span class="NAME">this.kenc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>633</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>634</span> 
<span class='line'>635</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>636</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Kmac"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">PACE.keyToString</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>637</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>638</span> 
<span class='line'>639</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>640</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>641</span> 
<span class='line'>642</span> 
<span class='line'>643</span> </span><span class="NAME">PACE.bsi_de</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0.4.0.127.0.7"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>644</span> </span><span class="NAME">PACE.id_PACE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.bsi_de</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".2.2.4"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>645</span> </span><span class="NAME">PACE.id_PACE_ECDH_GM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.id_PACE</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".2"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>646</span> </span><span class="NAME">PACE.id_PACE_ECDH_GM_3DES_CBC_CBC</span><span class="WHIT">     </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.id_PACE_ECDH_GM</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>647</span> </span><span class="NAME">PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_128</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.id_PACE_ECDH_GM</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".2"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>648</span> </span><span class="NAME">PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_192</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.id_PACE_ECDH_GM</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".3"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>649</span> </span><span class="NAME">PACE.id_PACE_ECDH_GM_AES_CBC_CMAC_256</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.id_PACE_ECDH_GM</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".4"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>650</span> 
<span class='line'>651</span> </span><span class="NAME">PACE.id_roles</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.bsi_de</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".3.1.2"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>652</span> </span><span class="NAME">PACE.id_IS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PACE.id_roles</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">".1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>653</span> 
<span class='line'>654</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|  
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  --------- 
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  * 
<span class='line'> 24</span>  * @fileoverview Public Key Reference, the value stored in CAR and CHR of CV-Certificates
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> </span><span class="WHIT"> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> 
<span class='line'> 30</span> </span><span class="COMM">/**
<span class='line'> 31</span>  * &lt;p>Create a public key reference (CAR/CHR) from binary representation or individual fields.&lt;/p>
<span class='line'> 32</span>  *
<span class='line'> 33</span>  * &lt;p>Use one of the following signatures:&lt;/p>
<span class='line'> 34</span>  *
<span class='line'> 35</span>  * &lt;ul>
<span class='line'> 36</span>  *  &lt;li>PublicKeyReference(ByteString value) - binary public key reference&lt;/li>
<span class='line'> 37</span>  *  &lt;li>PublicKeyReference(String value) - string encoded public key reference&lt;/li>
<span class='line'> 38</span>  *  &lt;li>PublicKeyReference(String countryCode, String holderMnemonic, String sequenceNumber) - string encoded public key reference&lt;/li>
<span class='line'> 39</span>  * &lt;/ul>
<span class='line'> 40</span>  * &lt;p>@see PublicKeyReference.test() for an example.&lt;/P>
<span class='line'> 41</span>  *
<span class='line'> 42</span>  * @class &lt;p>A class that implements a public key reference to be used as CAR and CHR in
<span class='line'> 43</span>  *        card verifiable certificates (CVC).&lt;/p>
<span class='line'> 44</span>  * @constructor
<span class='line'> 45</span>  */</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">arguments.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">				</span><span class="NAME">this.bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">				</span><span class="NAME">this.bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sq</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arguments</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">			</span><span class="NAME">this.bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">cc</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">mn</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sq</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 62</span> 
<span class='line'> 63</span> </span><span class="NAME">exports.PublicKeyReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> 
<span class='line'> 65</span> 
<span class='line'> 66</span> 
<span class='line'> 67</span> </span><span class="COMM">/**
<span class='line'> 68</span>  * Returns the 2 character country code
<span class='line'> 69</span>  *
<span class='line'> 70</span>  * @return the country code
<span class='line'> 71</span>  * @type String
<span class='line'> 72</span>  */</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="NAME">PublicKeyReference.prototype.getCountryCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.bin.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 76</span> 
<span class='line'> 77</span> 
<span class='line'> 78</span> 
<span class='line'> 79</span> </span><span class="COMM">/**
<span class='line'> 80</span>  * Returns the variable length holder mnemonic
<span class='line'> 81</span>  *
<span class='line'> 82</span>  * @return the holder mnemonic
<span class='line'> 83</span>  * @type String
<span class='line'> 84</span>  */</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="NAME">PublicKeyReference.prototype.getMnemonic</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.bin.bytes</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.bin.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 88</span> 
<span class='line'> 89</span> 
<span class='line'> 90</span> 
<span class='line'> 91</span> </span><span class="COMM">/**
<span class='line'> 92</span>  * Returns the 5 character sequence number
<span class='line'> 93</span>  *
<span class='line'> 94</span>  * @return the sequence number
<span class='line'> 95</span>  * @type String
<span class='line'> 96</span>  */</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="NAME">PublicKeyReference.prototype.getSequenceNo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.bin.bytes</span><span class="PUNC">(</span><span class="NAME">this.bin.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>100</span> 
<span class='line'>101</span> 
<span class='line'>102</span> 
<span class='line'>103</span> </span><span class="COMM">/**
<span class='line'>104</span>  * Returns the certificate holder name, which is the concatenation of the country code and the
<span class='line'>105</span>  * holder mnemonic.
<span class='line'>106</span>  *
<span class='line'>107</span>  * @return the holder name
<span class='line'>108</span>  * @type String
<span class='line'>109</span>  */</span><span class="WHIT">
<span class='line'>110</span> </span><span class="NAME">PublicKeyReference.prototype.getHolder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getCountryCode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getMnemonic</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>113</span> 
<span class='line'>114</span> 
<span class='line'>115</span> 
<span class='line'>116</span> </span><span class="COMM">/**
<span class='line'>117</span>  * Returns the binary encoded public key reference
<span class='line'>118</span>  *
<span class='line'>119</span>  * @return the public key reference
<span class='line'>120</span>  * @type ByteString
<span class='line'>121</span>  */</span><span class="WHIT">
<span class='line'>122</span> </span><span class="NAME">PublicKeyReference.prototype.getBytes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.bin</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>125</span> 
<span class='line'>126</span> 
<span class='line'>127</span> 
<span class='line'>128</span> </span><span class="COMM">/**
<span class='line'>129</span>  * Returns the string representation of the public key reference
<span class='line'>130</span>  *
<span class='line'>131</span>  * @return the public key reference
<span class='line'>132</span>  * @type String
<span class='line'>133</span>  */</span><span class="WHIT">
<span class='line'>134</span> </span><span class="NAME">PublicKeyReference.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.bin.toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>136</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>137</span> 
<span class='line'>138</span> 
<span class='line'>139</span> 
<span class='line'>140</span> </span><span class="COMM">/**
<span class='line'>141</span>  * Returns true if other public key reference equals this public key reference
<span class='line'>142</span>  *
<span class='line'>143</span>  * @return true if equals
<span class='line'>144</span>  * @type boolean
<span class='line'>145</span>  */</span><span class="WHIT">
<span class='line'>146</span> </span><span class="NAME">PublicKeyReference.prototype.equals</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">other</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.bin.equals</span><span class="PUNC">(</span><span class="NAME">other.bin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>149</span> 
<span class='line'>150</span> 
<span class='line'>151</span> 
<span class='line'>152</span> </span><span class="COMM">/**
<span class='line'>153</span>  * Test function
<span class='line'>154</span>  */</span><span class="WHIT">
<span class='line'>155</span> </span><span class="NAME">PublicKeyReference.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"UTABCDF0000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getCountryCode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getMnemonic</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"ABCD"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getSequenceNo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"F0000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UTABCD"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">	
<span class='line'>162</span> 	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="STRN">"UT"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"ABCD"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"F0000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getCountryCode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getMnemonic</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"ABCD"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getSequenceNo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"F0000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UTABCD"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	
<span class='line'>168</span> 	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="STRN">"UTABCDF0000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getCountryCode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getMnemonic</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"ABCD"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getSequenceNo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"F0000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UTABCD"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	
<span class='line'>174</span> 	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UTABCDF0000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>176</span> 
<span class='line'>177</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|  
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  --------- 
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Implementation of the ASN.1 structures for restricted identification
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Create a RestrictedIdentificationInfo object
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * @class &lt;p>This class encodes and decodes RestrictedIdentificationInfo objects.&lt;/p>
<span class='line'> 33</span>  * &lt;p>The class implements the following ASN.1 syntax:&lt;/p>
<span class='line'> 34</span>  * &lt;pre>
<span class='line'> 35</span>  * RestrictedIdentificationInfo ::= SEQUENCE {
<span class='line'> 36</span>  *   protocol  OBJECT IDENTIFIER(
<span class='line'> 37</span>  *             id-RI-DH-SHA-1  |
<span class='line'> 38</span>  *             id-RI-DH-SHA-224  |
<span class='line'> 39</span>  *             id-RI-DH-SHA-256  |
<span class='line'> 40</span>  *             id-RI-DH-SHA-384 |
<span class='line'> 41</span>  *             id-RI-DH-SHA-512 |
<span class='line'> 42</span>  *             id-RI-ECDH-SHA-1  |
<span class='line'> 43</span>  *             id-RI-ECDH-SHA-224  |
<span class='line'> 44</span>  *             id-RI-ECDH-SHA-256 |
<span class='line'> 45</span>  *             id-RI-ECDH-SHA-384 |
<span class='line'> 46</span>  *             id-RI-ECDH-SHA-512),
<span class='line'> 47</span>  *   params    ProtocolParams,
<span class='line'> 48</span>  *   maxKeyLen INTEGER OPTIONAL
<span class='line'> 49</span>  * }
<span class='line'> 50</span>  * ProtocolParams ::= SEQUENCE {
<span class='line'> 51</span>  *   version         INTEGER, -- MUST be 1
<span class='line'> 52</span>  *   keyId           INTEGER,
<span class='line'> 53</span>  *   authorizedOnly  BOOLEAN
<span class='line'> 54</span>  * }
<span class='line'> 55</span>  * &lt;/pre>
<span class='line'> 56</span>  * @constructor
<span class='line'> 57</span>  * @param {ASN1} the optional tlv structure to initialize the object
<span class='line'> 58</span>  */</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentificationInfo</span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> 
<span class='line'> 64</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">		</span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">params</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">params.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">params.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 72</span> 
<span class='line'> 73</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">params.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">		</span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">params.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> 
<span class='line'> 76</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">params.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">		</span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">params.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> 
<span class='line'> 79</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">params.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.BOOLEAN</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">		</span><span class="NAME">this.authorizedOnly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">params.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tlv.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">			</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">			</span><span class="NAME">this.maxKeyLen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 89</span> 
<span class='line'> 90</span> </span><span class="NAME">exports.RestrictedIdentificationInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentificationInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> 
<span class='line'> 92</span> 
<span class='line'> 93</span> 
<span class='line'> 94</span> </span><span class="COMM">/**
<span class='line'> 95</span>  * Convert object to TLV structure
<span class='line'> 96</span>  *
<span class='line'> 97</span>  * @return the TLV structure
<span class='line'> 98</span>  * @type ASN1
<span class='line'> 99</span>  */</span><span class="WHIT">
<span class='line'>100</span> </span><span class="NAME">RestrictedIdentificationInfo.prototype.toTLV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.version</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyId</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.BOOLEAN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.authorizedOnly</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">	</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>109</span> 
<span class='line'>110</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.maxKeyLen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.maxKeyLen</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>114</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>115</span> 
<span class='line'>116</span> 
<span class='line'>117</span> 
<span class='line'>118</span> </span><span class="NAME">RestrictedIdentificationInfo.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"RestrictedIdentificationInfo(protocol="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", version="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.version</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", keyId="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">",authOnly="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.authorizedOnly</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">",maxKeyLen="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.maxKeyLen</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>121</span> 
<span class='line'>122</span> 
<span class='line'>123</span> 
<span class='line'>124</span> </span><span class="COMM">/**
<span class='line'>125</span>  * Create a RestrictedIdentificationDomainParameterInfo object
<span class='line'>126</span>  *
<span class='line'>127</span>  * @class &lt;p>This class encodes and decodes RestrictedIdentificationDomainParameterInfo objects.&lt;/p>
<span class='line'>128</span>  * &lt;p>The class implements the following ASN.1 syntax:&lt;/p>
<span class='line'>129</span>  * &lt;pre>
<span class='line'>130</span>  *	RestrictedIdentificationDomainParameterInfo ::= SEQUENCE {
<span class='line'>131</span>  *		protocol OBJECT IDENTIFIER(id-CA-DH | id-CA-ECDH),
<span class='line'>132</span>  *		domainParameter AlgorithmIdentifier,
<span class='line'>133</span>  * }
<span class='line'>134</span>  * &lt;/pre>
<span class='line'>135</span>  * @constructor
<span class='line'>136</span>  * @param {ASN1} the optional tlv structure to initialize the object
<span class='line'>137</span>  */</span><span class="WHIT">
<span class='line'>138</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentificationDomainParameterInfo</span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlv</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">tlv.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">		
<span class='line'>143</span> 		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">		</span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">		
<span class='line'>148</span> 		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tlv.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">t.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> 
<span class='line'>151</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">			</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">oid.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.value.equals</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"standardizedDomainParameter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">				</span><span class="NAME">this.standardizedDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curveoid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NAME">this.standardizedDomainParameter</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">curveoid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"RestrictedIdentificationPublicKeyInfo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Standardized domain parameter "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.standardizedDomainParameter</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" is unknown"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">				</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">				</span><span class="NAME">this.domainParameter.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">curveoid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">				</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ECCUtils.decodeECParameters</span><span class="PUNC">(</span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>170</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>171</span> 
<span class='line'>172</span> </span><span class="NAME">exports.RestrictedIdentificationDomainParameterInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentificationDomainParameterInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> 
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="COMM">/**
<span class='line'>177</span>  * Convert object to TLV structure
<span class='line'>178</span>  *
<span class='line'>179</span>  * @return the TLV structure
<span class='line'>180</span>  * @type ASN1
<span class='line'>181</span>  */</span><span class="WHIT">
<span class='line'>182</span> </span><span class="NAME">RestrictedIdentificationDomainParameterInfo.prototype.toTLV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> 
<span class='line'>185</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> 
<span class='line'>187</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.standardizedDomainParameter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">		</span><span class="NAME">c.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"standardizedDomainParameter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">		</span><span class="NAME">c.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.standardizedDomainParameter</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>192</span> 
<span class='line'>193</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>198</span> 
<span class='line'>199</span> 
<span class='line'>200</span> 
<span class='line'>201</span> </span><span class="NAME">RestrictedIdentificationDomainParameterInfo.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"RestrictedIdentificationDomainParameterInfo(protocol="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.protocol</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", keyId="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>204</span> 
<span class='line'>205</span> 
<span class='line'>206</span> </span><span class="NAME">RestrictedIdentification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="NAME">id_RI</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RI"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="NAME">id_RI_DH</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RI-DH"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">	</span><span class="NAME">id_RI_ECDH</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RI-ECDH"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>210</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> 
<span class='line'>212</span> </span><span class="NAME">exports.RestrictedIdentification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">RestrictedIdentification</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> 
<span class='line'>214</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">8</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"secp192r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">9</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP192r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">10</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"secp224r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">11</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP224r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">12</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"secp256r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">13</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">14</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP320r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">15</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"secp384r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">16</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP384r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">17</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"brainpoolP512r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> </span><span class="NAME">RestrictedIdentification.standardizedDomainParameter</span><span class="PUNC">[</span><span class="NUMB">18</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"secp521r1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview General File I/O Class
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Create a reference to a file system object (file or directory)
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * @class Class implementing basic support for files
<span class='line'> 33</span>  * @constructor
<span class='line'> 34</span>  * @param {String} name relative or absolute file path
<span class='line'> 35</span>  * @param {Number} location one of GPSystem.CWD, GPSystem.USR, GPSystem.SYS, GPSystem.AUTO to resolve relative names. Default GPSystem.CWD
<span class='line'> 36</span>  */</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">File</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">location</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="WHIT">	</span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="WHIT">	</span><span class="NAME">this.location</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">location</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 41</span> 
<span class='line'> 42</span> </span><span class="NAME">exports.File</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">File</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> 
<span class='line'> 44</span> 
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="COMM">/**
<span class='line'> 47</span>  * Return absolute path
<span class='line'> 48</span>  *
<span class='line'> 49</span>  * @param{Number} mode one of GPSystem.AUTO, GPSystem.CWD, GPSystem.USR or GPSystem.SYS. See GPSystem.mapFilename() for details
<span class='line'> 50</span>  * @type String
<span class='line'> 51</span>  * @return the absolute path
<span class='line'> 52</span>  */</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="NAME">File.prototype.getAbsolutePath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">mode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.location</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">			</span><span class="NAME">mode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSystem.AUTO</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">			</span><span class="NAME">mode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.location</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 61</span> 
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSystem.mapFilename</span><span class="PUNC">(</span><span class="NAME">this.name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 68</span> 
<span class='line'> 69</span> 
<span class='line'> 70</span> 
<span class='line'> 71</span> </span><span class="COMM">/**
<span class='line'> 72</span>  * @private
<span class='line'> 73</span>  * Return a java.io.File object
<span class='line'> 74</span>  */</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="NAME">File.prototype.getFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.file</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getAbsolutePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">			</span><span class="NAME">this.file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">java.io.File</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.file</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 84</span> 
<span class='line'> 85</span> 
<span class='line'> 86</span> 
<span class='line'> 87</span> </span><span class="COMM">/**
<span class='line'> 88</span>  * Return true if file exists
<span class='line'> 89</span>  */</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="NAME">File.prototype.exists</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getFile</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> 
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">f</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">f.exists</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 98</span> 
<span class='line'> 99</span> 
<span class='line'>100</span> 
<span class='line'>101</span> </span><span class="COMM">/**
<span class='line'>102</span>  * Close streams associated with file
<span class='line'>103</span>  */</span><span class="WHIT">
<span class='line'>104</span> </span><span class="NAME">File.prototype.close</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.os</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">		</span><span class="NAME">this.os.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">		</span><span class="KEYW">delete</span><span class="PUNC">(</span><span class="NAME">this.os</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>109</span> 
<span class='line'>110</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.is</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">		</span><span class="NAME">this.is.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">		</span><span class="KEYW">delete</span><span class="PUNC">(</span><span class="NAME">this.is</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>114</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>115</span> 
<span class='line'>116</span> 
<span class='line'>117</span> 
<span class='line'>118</span> </span><span class="COMM">/**
<span class='line'>119</span>  * @private
<span class='line'>120</span>  * Return a java.io.FileInputStream
<span class='line'>121</span>  */</span><span class="WHIT">
<span class='line'>122</span> </span><span class="NAME">File.prototype.getInputStream</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.is</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getAbsolutePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"File "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">		</span><span class="NAME">this.is</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">java.io.FileInputStream</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.is</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>132</span> 
<span class='line'>133</span> 
<span class='line'>134</span> 
<span class='line'>135</span> </span><span class="COMM">/**
<span class='line'>136</span>  * @private
<span class='line'>137</span>  * Return a java.io.FileOutputStream
<span class='line'>138</span>  */</span><span class="WHIT">
<span class='line'>139</span> </span><span class="NAME">File.prototype.getOutputStream</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.os</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getAbsolutePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OBJECT_NOT_FOUND</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"File "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">		</span><span class="NAME">this.os</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">java.io.FileOutputStream</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.os</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>149</span> 
<span class='line'>150</span> 
<span class='line'>151</span> 
<span class='line'>152</span> </span><span class="COMM">/**
<span class='line'>153</span>  * Read complete file into ByteString object
<span class='line'>154</span>  *
<span class='line'>155</span>  * @type ByteString
<span class='line'>156</span>  * @return the binary content
<span class='line'>157</span>  */</span><span class="WHIT">
<span class='line'>158</span> </span><span class="NAME">File.prototype.readAllAsBinary</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">is</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getInputStream</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> 
<span class='line'>161</span> </span><span class="WHIT">	</span><span class="COMM">// Determine file size</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">flen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">is.available</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> 
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="COMM">// Allocate native byte array</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">java.lang.reflect.Array.newInstance</span><span class="PUNC">(</span><span class="NAME">java.lang.Byte.TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">flen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> 
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="COMM">// Read into byte array</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">is.read</span><span class="PUNC">(</span><span class="NAME">bs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> 
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="NAME">this.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> 
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="COMM">// Allocate JavaScript ByteBuffer from native/wrapped byte array</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="NAME">bs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>174</span> 
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="COMM">// Convert to JavaScript ByteString</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> 
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>180</span> 
<span class='line'>181</span> 
<span class='line'>182</span> 
<span class='line'>183</span> </span><span class="COMM">/**
<span class='line'>184</span>  * Read complete file into String object
<span class='line'>185</span>  *
<span class='line'>186</span>  * @type String
<span class='line'>187</span>  * @return the text content
<span class='line'>188</span>  */</span><span class="WHIT">
<span class='line'>189</span> </span><span class="NAME">File.prototype.readAllAsString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">encoding</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>190</span> 
<span class='line'>191</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">encoding</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">		</span><span class="NAME">encoding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>194</span> 
<span class='line'>195</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.readAllAsBinary</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">encoding</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>197</span> 
<span class='line'>198</span> 
<span class='line'>199</span> 
<span class='line'>200</span> </span><span class="COMM">/**
<span class='line'>201</span>  * Write the object to file
<span class='line'>202</span>  *
<span class='line'>203</span>  * @param{Object} obj to write to file (Using toString() for any other than String and ByteString)
<span class='line'>204</span>  * @param{Number} one of UTF8 or ASCII (Default is UTF8)
<span class='line'>205</span>  */</span><span class="WHIT">
<span class='line'>206</span> </span><span class="NAME">File.prototype.writeAll</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encoding</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">		</span><span class="NAME">obj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">obj.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">encoding</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">			</span><span class="NAME">encoding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">		</span><span class="NAME">obj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encoding</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>216</span> 
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">os</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getOutputStream</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="NAME">os.write</span><span class="PUNC">(</span><span class="NAME">obj</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="NAME">this.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>221</span> 
<span class='line'>222</span> 
<span class='line'>223</span> 
<span class='line'>224</span> </span><span class="COMM">/**
<span class='line'>225</span>  * Return list of files contained in the directory referenced by the File object
<span class='line'>226</span>  *
<span class='line'>227</span>  * @type String[]
<span class='line'>228</span>  * @return the list of file names
<span class='line'>229</span>  */</span><span class="WHIT">
<span class='line'>230</span> </span><span class="NAME">File.prototype.list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getFile</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">list</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">jslist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>233</span> 
<span class='line'>234</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">list.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">			</span><span class="NAME">jslist.push</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">String</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>239</span> 
<span class='line'>240</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">jslist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>242</span> 
<span class='line'>243</span> 
<span class='line'>244</span> 
<span class='line'>245</span> </span><span class="COMM">/**
<span class='line'>246</span>  * Return the parent file of this file object
<span class='line'>247</span>  *
<span class='line'>248</span>  * @type File
<span class='line'>249</span>  * @return the parent file object or null
<span class='line'>250</span>  */</span><span class="WHIT">
<span class='line'>251</span> </span><span class="NAME">File.prototype.getParentFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getFile</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parent</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">File</span><span class="PUNC">(</span><span class="NAME">parent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>259</span> 
<span class='line'>260</span> 
<span class='line'>261</span> 
<span class='line'>262</span> </span><span class="NAME">File.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">File</span><span class="PUNC">(</span><span class="STRN">"test.bin"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"Hello World"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">	</span><span class="NAME">file.writeAll</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> 
<span class='line'>267</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">File</span><span class="PUNC">(</span><span class="STRN">"test.bin"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file.readAllAsBinary</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">c.toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> 
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">File</span><span class="PUNC">(</span><span class="STRN">"test.txt"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Hello World"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="NAME">file.writeAll</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> 
<span class='line'>275</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">File</span><span class="PUNC">(</span><span class="STRN">"test.txt"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file.readAllAsString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> 
<span class='line'>279</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">file.getParentFile</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">dir.getAbsolutePath</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">dir.list</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> 
<span class='line'>283</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>284</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2026 CardContact Systems GmbH
<span class='line'>  6</span>  * |'##> &lt;##'|  32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview File encryptor.
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/eac/CVC"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/x509/PKIXCommon"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKIXCommon</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> </span><span class="COMM">/**
<span class='line'> 33</span>  * Craate a FileEncryptor instance.
<span class='line'> 34</span>  *
<span class='line'> 35</span>  * @class Class implementing file encryption
<span class='line'> 36</span>  * @constructor
<span class='line'> 37</span>  * @param {SmartCardHSM} sc the SmartCardHSM object used to access the token or undefined at the sender in the hybrid scheme.
<span class='line'> 38</span>  * @param {Number} mode the mode to use (One of FileEncryptor.NATIVE, .DERIVED or .HYBRID). Must be specified at the sending side.
<span class='line'> 39</span>  */</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">FileEncryptor</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.mode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> 
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"UNKNOWN"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 47</span> 
<span class='line'> 48</span> </span><span class="NAME">exports.FileEncryptor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">FileEncryptor</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="NAME">FileEncryptor.NATIVE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="NAME">FileEncryptor.DERIVED</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="NAME">FileEncryptor.HYBRID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> 
<span class='line'> 55</span> 
<span class='line'> 56</span> </span><span class="COMM">/**
<span class='line'> 57</span>  * Get the crypto object.
<span class='line'> 58</span>  *
<span class='line'> 59</span>  * @private
<span class='line'> 60</span>  * @type Crypto
<span class='line'> 61</span>  * @return the crypto object.
<span class='line'> 62</span>  */</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="NAME">FileEncryptor.prototype.getCrypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 69</span> 
<span class='line'> 70</span> 
<span class='line'> 71</span> 
<span class='line'> 72</span> </span><span class="COMM">/**
<span class='line'> 73</span>  * Generate the IV
<span class='line'> 74</span>  *
<span class='line'> 75</span>  * @private
<span class='line'> 76</span>  */</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="NAME">FileEncryptor.prototype.generateIV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="NAME">this.iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 80</span> 
<span class='line'> 81</span> 
<span class='line'> 82</span> 
<span class='line'> 83</span> </span><span class="COMM">/**
<span class='line'> 84</span>  * Calculate the hash of the encrypted payload.
<span class='line'> 85</span>  *
<span class='line'> 86</span>  * @private
<span class='line'> 87</span>  * @param {ByteString} content the encrypted payload
<span class='line'> 88</span>  * @type ByteString
<span class='line'> 89</span>  * @return the hash value.
<span class='line'> 90</span>  */</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="NAME">FileEncryptor.prototype.calculateHash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 94</span> 
<span class='line'> 95</span> 
<span class='line'> 96</span> 
<span class='line'> 97</span> </span><span class="COMM">/**
<span class='line'> 98</span>  * Create the TLV encoded header of the encrypted file.
<span class='line'> 99</span>  *
<span class='line'>100</span>  * @private
<span class='line'>101</span>  * @type ASN1
<span class='line'>102</span>  * @return the header.
<span class='line'>103</span>  */</span><span class="WHIT">
<span class='line'>104</span> </span><span class="NAME">FileEncryptor.prototype.createHeader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tbs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"tbs"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"oid"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"CardContact 4 6 "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.mode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"keyId"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.keyId</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"hash"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.hash</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"iv"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.iv</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> 
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">FileEncryptor.HYBRID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">		</span><span class="NAME">tbs.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"senderPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createECSubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">this.pukey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>116</span> 
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">sign</span><span class="PUNC">(</span><span class="NAME">this.mackey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tbs.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> 
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">header</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">		</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"EncryptionHeader"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">			</span><span class="NAME">tbs</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"mac"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">		</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> 
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">header</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>127</span> 
<span class='line'>128</span> 
<span class='line'>129</span> 
<span class='line'>130</span> </span><span class="COMM">/**
<span class='line'>131</span>  * Parse the header of the encrypted file.
<span class='line'>132</span>  *
<span class='line'>133</span>  * @param {ByteString} buffer the encrypted file with header.
<span class='line'>134</span>  * @type Number
<span class='line'>135</span>  * @return the offset at which the payload starts.
<span class='line'>136</span>  */</span><span class="WHIT">
<span class='line'>137</span> </span><span class="NAME">FileEncryptor.prototype.parseHeader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">buffer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">buffer.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x30</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Header corrupted"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>141</span> 
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">buffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.elements</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Header corrupted"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>147</span> 
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="NAME">this.mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">	</span><span class="NAME">this.tbs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.tbs.elements</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.tbs.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Header corrupted"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>153</span> 
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tbs.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">oid.startsWith</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"CardContact 4 6"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"File format not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>158</span> 
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="NAME">this.mode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">oid.byteAt</span><span class="PUNC">(</span><span class="NAME">oid.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tbs.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">	</span><span class="NAME">this.hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tbs.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">	</span><span class="NAME">this.iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tbs.get</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> 
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.tbs.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">		</span><span class="COMM">// Parse sender public key</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spki</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tbs.get</span><span class="PUNC">(</span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spki.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spki.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">		</span><span class="NAME">this.pukey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">		</span><span class="NAME">this.pukey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">		</span><span class="NAME">this.pukey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">		</span><span class="NAME">this.pukey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pk.left</span><span class="PUNC">(</span><span class="NAME">pk.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">		</span><span class="NAME">this.pukey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pk.right</span><span class="PUNC">(</span><span class="NAME">pk.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.size</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>178</span> 
<span class='line'>179</span> 
<span class='line'>180</span> 
<span class='line'>181</span> </span><span class="COMM">/**
<span class='line'>182</span>  * Validate the Message Authentication Code (MAC) over the header.
<span class='line'>183</span>  *
<span class='line'>184</span>  * @throws GPError is MAC verification failed.
<span class='line'>185</span>  */</span><span class="WHIT">
<span class='line'>186</span> </span><span class="NAME">FileEncryptor.prototype.validateHeader</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">sign</span><span class="PUNC">(</span><span class="NAME">this.mackey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.tbs.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">mac.equals</span><span class="PUNC">(</span><span class="NAME">this.mac</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Integrity check failed (Invalid MAC)."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>191</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>192</span> 
<span class='line'>193</span> 
<span class='line'>194</span> 
<span class='line'>195</span> </span><span class="COMM">/**
<span class='line'>196</span>  * Generate ephemeral EC key pair at the sending side in hybrid scheme.
<span class='line'>197</span>  *
<span class='line'>198</span>  * @param {Key} key the domain parameter.
<span class='line'>199</span>  */</span><span class="WHIT">
<span class='line'>200</span> </span><span class="NAME">FileEncryptor.prototype.generateEphemeralKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">dp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="NAME">this.prkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="NAME">this.prkey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> 
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="NAME">this.pukey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="NAME">this.pukey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> 
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.pukey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.prkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>209</span> 
<span class='line'>210</span> 
<span class='line'>211</span> 
<span class='line'>212</span> </span><span class="COMM">/**
<span class='line'>213</span>  * Derive a AES key from a AES master key using a CMAC based Key Derivation Function in
<span class='line'>214</span>  * Counter Mode as per NIST SP 800-108.
<span class='line'>215</span>  *
<span class='line'>216</span>  * @param {Key} key the AES master key.
<span class='line'>217</span>  * @param {Number} size the requested number of derived bytes.
<span class='line'>218</span>  * @param {ByteString} context the derivation context used to differ keys derived from the same master.
<span class='line'>219</span>  * @type ByteString
<span class='line'>220</span>  * @return the derived key value.
<span class='line'>221</span>  */</span><span class="WHIT">
<span class='line'>222</span> </span><span class="NAME">FileEncryptor.prototype.keyDerivationFunction1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">os</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">os</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">		</span><span class="NAME">dp.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">iter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">		</span><span class="NAME">dp.append</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">		</span><span class="NAME">dp.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>231</span> 
<span class='line'>232</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">sign</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>233</span> 
<span class='line'>234</span> </span><span class="WHIT">		</span><span class="NAME">dd.append</span><span class="PUNC">(</span><span class="NAME">mac.left</span><span class="PUNC">(</span><span class="NAME">os</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">mac.length</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">mac.length</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">os</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">		</span><span class="NAME">os</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mac.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">		</span><span class="NAME">mac.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">		</span><span class="NAME">iter</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dd.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">	</span><span class="NAME">dd.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>242</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>243</span> 
<span class='line'>244</span> 
<span class='line'>245</span> 
<span class='line'>246</span> </span><span class="COMM">/**
<span class='line'>247</span>  * Derive an AES key from the shared secret resulting from performing the ECDH using
<span class='line'>248</span>  * a one-step-kdf with SHA-256 (Option 1) as defined in NIST SP 800-56C.
<span class='line'>249</span>  *
<span class='line'>250</span>  * @param {Number} id the key identifier (0x01 for K.ENC, 0x02 for K.MAC).
<span class='line'>251</span>  * @param {ByteString} sharedSecret the shared secret resulting from ECDH.
<span class='line'>252</span>  * @return the key value as 32 bytes.
<span class='line'>253</span>  */</span><span class="WHIT">
<span class='line'>254</span> </span><span class="NAME">FileEncryptor.prototype.keyDerivationFunction2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sharedSecret</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">sharedSecret</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">	</span><span class="NAME">inp.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>260</span> 
<span class='line'>261</span> 
<span class='line'>262</span> 
<span class='line'>263</span> </span><span class="COMM">/**
<span class='line'>264</span>  * Derive K.ENC and K.MAC based on the selected scheme.
<span class='line'>265</span>  *
<span class='line'>266</span>  * @param {Key} key the AES key or private EC key.
<span class='line'>267</span>  * @param {CVC} key the CVC with the public of the receiver.
<span class='line'>268</span>  */</span><span class="WHIT">
<span class='line'>269</span> </span><span class="NAME">FileEncryptor.prototype.deriveKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.iv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">		</span><span class="NAME">this.generateIV</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>273</span> 
<span class='line'>274</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">this.mode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">FileEncryptor.NATIVE</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">			</span><span class="NAME">this.mackey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">			</span><span class="NAME">this.enckey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">key.getPKCS15Id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">				</span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getPKCS15Id</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">FileEncryptor.DERIVED</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">			</span><span class="NAME">this.mackey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">			</span><span class="NAME">this.enckey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.keyDerivationFunction1</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">			</span><span class="NAME">this.enckey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">			</span><span class="NAME">kv.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>288</span> 
<span class='line'>289</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">key.getPKCS15Id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">				</span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getPKCS15Id</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">FileEncryptor.HYBRID</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">				</span><span class="NAME">this.generateEphemeralKeyPair</span><span class="PUNC">(</span><span class="NAME">pk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">pk.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">				</span><span class="NAME">ss</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.prkey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDHP</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">				</span><span class="NAME">this.keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.determineKeyIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">point</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.pukey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">this.pukey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">				</span><span class="NAME">ss</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">decrypt</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDHP</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>304</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>305</span> 
<span class='line'>306</span> </span><span class="WHIT">			</span><span class="NAME">this.enckey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.keyDerivationFunction2</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">			</span><span class="NAME">this.enckey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">			</span><span class="NAME">kv.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>310</span> 
<span class='line'>311</span> </span><span class="WHIT">			</span><span class="NAME">this.mackey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.keyDerivationFunction2</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">			</span><span class="NAME">this.mackey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">			</span><span class="NAME">kv.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">			</span><span class="NAME">ss.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Mode not defined or invalid"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>320</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>321</span> 
<span class='line'>322</span> 
<span class='line'>323</span> 
<span class='line'>324</span> </span><span class="COMM">/**
<span class='line'>325</span>  * Encrypt the buffer with K.ENC previously derived with deriveKey() and prepend header.
<span class='line'>326</span>  *
<span class='line'>327</span>  * @param {ByteString} plain the plain input. The caller should clear the buffer after use with plain.clear().
<span class='line'>328</span>  * @type ByteString
<span class='line'>329</span>  * @return the header concatenated with the encrypted payload.
<span class='line'>330</span>  */</span><span class="WHIT">
<span class='line'>331</span> </span><span class="NAME">FileEncryptor.prototype.encrypt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">plain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>332</span> 
<span class='line'>333</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plain.pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2_16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> 
<span class='line'>335</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">encrypt</span><span class="PUNC">(</span><span class="NAME">this.enckey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">	</span><span class="NAME">p.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> 
<span class='line'>338</span> </span><span class="WHIT">	</span><span class="NAME">this.hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.calculateHash</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>339</span> 
<span class='line'>340</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">header</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createHeader</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>341</span> 
<span class='line'>342</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">header.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>343</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>344</span> 
<span class='line'>345</span> 
<span class='line'>346</span> 
<span class='line'>347</span> </span><span class="COMM">/**
<span class='line'>348</span>  * Validate and strip the ISO padding.
<span class='line'>349</span>  *
<span class='line'>350</span>  * @param {ByteString} buffer the decrypted buffer.
<span class='line'>351</span>  * @throw GPError is padding is invalid, indicating the wrong key or corrupted cipher.
<span class='line'>352</span>  * @type ByteString
<span class='line'>353</span>  * @return the buffer without padding.
<span class='line'>354</span>  */</span><span class="WHIT">
<span class='line'>355</span> </span><span class="NAME">FileEncryptor.stripPadding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">buffer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>356</span> 
<span class='line'>357</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">buffer.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">buffer.byteAt</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>361</span> 
<span class='line'>362</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">buffer.byteAt</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Plain block has invalid padding. Key probably wrong."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>364</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>365</span> 
<span class='line'>366</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">buffer.left</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>367</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>368</span> 
<span class='line'>369</span> 
<span class='line'>370</span> 
<span class='line'>371</span> </span><span class="COMM">/**
<span class='line'>372</span>  * Validate and decrypt the payload.
<span class='line'>373</span>  *
<span class='line'>374</span>  * @param {ByteString} buffer the encrypted payload.
<span class='line'>375</span>  * @type ByteString
<span class='line'>376</span>  * @return the plain content.
<span class='line'>377</span>  */</span><span class="WHIT">
<span class='line'>378</span> </span><span class="NAME">FileEncryptor.prototype.decrypt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">buffer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>379</span> 
<span class='line'>380</span> </span><span class="WHIT">	</span><span class="NAME">this.validateHeader</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> 
<span class='line'>382</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.calculateHash</span><span class="PUNC">(</span><span class="NAME">buffer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>383</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">hash.equals</span><span class="PUNC">(</span><span class="NAME">this.hash</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Integrity check failed (Invalid hash)."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>386</span> 
<span class='line'>387</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">decrypt</span><span class="PUNC">(</span><span class="NAME">this.enckey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">buffer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>388</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">FileEncryptor.stripPadding</span><span class="PUNC">(</span><span class="NAME">pp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>389</span> </span><span class="WHIT">	</span><span class="NAME">pp.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>390</span> 
<span class='line'>391</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>392</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>393</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2026 CardContact Systems GmbH
<span class='line'>  6</span>  * |'##> &lt;##'|  32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Public Key File Format
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">File</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/file/File"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">File</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/sc-hsm/SmartCardHSM"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSM</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/eac/CVC"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> 
<span class='line'> 33</span> </span><span class="COMM">/**
<span class='line'> 34</span>  * Create a Public Key File object.
<span class='line'> 35</span>  *
<span class='line'> 36</span>  * @class Read and write encoded SmartCard-HSM public keys.
<span class='line'> 37</span>  * @constructor
<span class='line'> 38</span>  * @param {String} arg the file to read from
<span class='line'> 39</span>  * @param {CVC[]} arg the certificate chain with the public key first.
<span class='line'> 40</span>  */</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PublicKeyFile</span><span class="PUNC">(</span><span class="NAME">arg</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">arg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">File</span><span class="PUNC">(</span><span class="NAME">arg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.readAllAsBinary</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">		</span><span class="NAME">this.parse</span><span class="PUNC">(</span><span class="NAME">bin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">		</span><span class="NAME">this.chain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">arg</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 50</span> 
<span class='line'> 51</span> </span><span class="NAME">exports.PublicKeyFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PublicKeyFile</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> 
<span class='line'> 53</span> 
<span class='line'> 54</span> 
<span class='line'> 55</span> </span><span class="NAME">PublicKeyFile.prototype.getChain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 58</span> 
<span class='line'> 59</span> 
<span class='line'> 60</span> 
<span class='line'> 61</span> </span><span class="COMM">/**
<span class='line'> 62</span>  * Parse the binary file content as TLV structure and validate the certificate chain.
<span class='line'> 63</span>  *
<span class='line'> 64</span>  * @param {ByteString} content the file content.
<span class='line'> 65</span>  */</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="NAME">PublicKeyFile.prototype.parse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">content.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x30</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"File does not contain a public key with certificates"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 70</span> 
<span class='line'> 71</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 72</span> 
<span class='line'> 73</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"CardContact 4 3 1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.equals</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid file format"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">a.find</span><span class="PUNC">(</span><span class="NUMB">0x63</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">devcert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">a.find</span><span class="PUNC">(</span><span class="NUMB">0x62</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dicacert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">a.find</span><span class="PUNC">(</span><span class="NUMB">0x61</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">devcert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dicacert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 84</span> 
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dicacert.verifyWithCVC</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.rootCerts</span><span class="PUNC">[</span><span class="NAME">dicacert.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">devcert.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dicacert.getPublicKey</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.rootCerts.UTSRCACC100001.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dicacert.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> 
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="NAME">this.chain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">pk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">devcert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dicacert</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 91</span> 
<span class='line'> 92</span> 
<span class='line'> 93</span> 
<span class='line'> 94</span> </span><span class="COMM">/**
<span class='line'> 95</span>  * Encode the certificate chain in TLV encoding.
<span class='line'> 96</span>  *
<span class='line'> 97</span>  * @type ByteString
<span class='line'> 98</span>  * @return the encoded content for the file
<span class='line'> 99</span>  */</span><span class="WHIT">
<span class='line'>100</span> </span><span class="NAME">PublicKeyFile.prototype.encode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> 
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">asn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"CardContact 4 3 1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x61</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x62</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x63</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chain</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">	</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="COMM">//	print(asn);</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">asn.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>111</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>112</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Support for Global Platform SCP03 protocol
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/cardsim/APDU'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">APDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> 
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> </span><span class="COMM">/**
<span class='line'> 32</span>  * Class implementing support for Global Platform SCP03 secure messaging protocol
<span class='line'> 33</span>  *
<span class='line'> 34</span>  * @constructor
<span class='line'> 35</span>  * @param {Crypto} crypto the crypto provider
<span class='line'> 36</span>  * @param {Key} kenc the static secure channel encryption key
<span class='line'> 37</span>  * @param {Key} kmac the static secure channel message authentication code key
<span class='line'> 38</span>  * @param {Key} kdek the static data encryption key
<span class='line'> 39</span>  * @param {ByteString} aid the AID to use for challenge calculation
<span class='line'> 40</span>  */</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">GPSCP03</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kdek</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">this.kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="NAME">this.kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="NAME">this.kdek</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kdek</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.chaining</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">this.enccnt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">	</span><span class="NAME">this.keyVersion</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="NAME">this.parami</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> 
<span class='line'> 52</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">aid</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">aid</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument aid must be ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">		</span><span class="NAME">this.aid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">		</span><span class="NAME">this.aid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"A000000151000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 59</span> 
<span class='line'> 60</span> </span><span class="NAME">exports.GPSCP03</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSCP03</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> 
<span class='line'> 62</span> 
<span class='line'> 63</span> 
<span class='line'> 64</span> </span><span class="COMM">/**
<span class='line'> 65</span>  * Strip the ISO padding from dechipered cryptogram
<span class='line'> 66</span>  *
<span class='line'> 67</span>  * @param {ByteString} the plain text with padding
<span class='line'> 68</span>  * @type ByteString
<span class='line'> 69</span>  * @return the plain text without padding
<span class='line'> 70</span>  */</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="NAME">GPSCP03.stripPadding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">plain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plain.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">plain.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">		</span><span class="NAME">i</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">plain.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Padding check failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">plain.left</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 81</span> 
<span class='line'> 82</span> 
<span class='line'> 83</span> 
<span class='line'> 84</span> </span><span class="COMM">/**
<span class='line'> 85</span>  * Reset the internal state
<span class='line'> 86</span>  **/</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="NAME">GPSCP03.prototype.reset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="NAME">this.chaining</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="NAME">this.enccnt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 92</span> 
<span class='line'> 93</span> 
<span class='line'> 94</span> 
<span class='line'> 95</span> </span><span class="COMM">/**
<span class='line'> 96</span>  * Called by the secure messaging wrapper to wrap the command APDU
<span class='line'> 97</span>  */</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="NAME">GPSCP03.prototype.wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apduToWrap</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">usageQualifier</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 99</span> 
<span class='line'>100</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">apdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">APDU</span><span class="PUNC">(</span><span class="NAME">apduToWrap</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> 
<span class='line'>103</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ivinp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.enccnt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">this.skenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_ECB</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ivinp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">encinp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2_16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="WHIT">				</span><span class="NAME">apdu.setCData</span><span class="PUNC">(</span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">this.skenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encinp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">			</span><span class="NAME">apdu.setCData</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>114</span> 
<span class='line'>115</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>116</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.chaining</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>117</span> 
<span class='line'>118</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getCLA</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">			</span><span class="COMM">// GP Format</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">			</span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">			</span><span class="NAME">apdu.cla</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">			</span><span class="COMM">// ISO Format</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">			</span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x90</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">			</span><span class="NAME">apdu.cla</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">cla</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apdu.getINS</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apdu.getP1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>132</span> 
<span class='line'>133</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">lc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">lc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>140</span> 
<span class='line'>141</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.skmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="WHIT">		</span><span class="NAME">this.chaining</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> 
<span class='line'>146</span> </span><span class="WHIT">		</span><span class="NAME">apdu.setCData</span><span class="PUNC">(</span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">mac.left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>147</span> 
<span class='line'>148</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.clatransformation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">			</span><span class="NAME">apdu.setCLA</span><span class="PUNC">(</span><span class="NAME">this.clatransformation</span><span class="PUNC">(</span><span class="NAME">apdu.getCLA</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>151</span> 
<span class='line'>152</span> </span><span class="WHIT">		</span><span class="NAME">apduToWrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getCommandAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">apduToWrap</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>156</span> 
<span class='line'>157</span> 
<span class='line'>158</span> 
<span class='line'>159</span> </span><span class="COMM">/**
<span class='line'>160</span>  * Called by the secure messaging wrapper to unwrap the response APDU
<span class='line'>161</span>  */</span><span class="WHIT">
<span class='line'>162</span> </span><span class="NAME">GPSCP03.prototype.unwrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apduToUnwrap</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">usageQualifier</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x10</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.chaining</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.left</span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.right</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> 
<span class='line'>169</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.skrmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> 
<span class='line'>171</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">mac.equals</span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.bytes</span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"MAC on R-Data failed verification"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>174</span> 
<span class='line'>175</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ivinp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.enccnt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">15</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">this.skenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_ECB</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ivinp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> 
<span class='line'>179</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.skenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apduToUnwrap.left</span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">			</span><span class="NAME">apduToUnwrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSCP03.stripPadding</span><span class="PUNC">(</span><span class="NAME">plain</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.right</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">			</span><span class="NAME">apduToUnwrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apduToUnwrap.left</span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">apduToUnwrap.right</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>185</span> 
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="NAME">this.enccnt</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> 
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">apduToUnwrap</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>190</span> 
<span class='line'>191</span> 
<span class='line'>192</span> 
<span class='line'>193</span> 
<span class='line'>194</span> </span><span class="COMM">/**
<span class='line'>195</span>  * Counterpart to wrap and meant to be used in a simulator
<span class='line'>196</span>  */</span><span class="WHIT">
<span class='line'>197</span> </span><span class="NAME">GPSCP03.prototype.unwrapCommandAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_CONDOFUSENOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No secure messaging active"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>201</span> 
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">apdu.hasCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_SMOBJMISSING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"MAC on C-Data missing"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.chaining</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> 
<span class='line'>209</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getCLA</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">			</span><span class="COMM">// GP Format</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">			</span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">			</span><span class="COMM">// ISO Format</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">			</span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x90</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>217</span> 
<span class='line'>218</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">cla</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apdu.getINS</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apdu.getP1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apdu.getP2</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span> 
<span class='line'>223</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">apdu.isExtendedLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">lc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">lc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>230</span> 
<span class='line'>231</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NAME">lc</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> 
<span class='line'>233</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.skmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> 
<span class='line'>235</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">mac.left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">right</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_SECSTATNOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"MAC on C-Data failed verification"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>238</span> 
<span class='line'>239</span> </span><span class="WHIT">		</span><span class="NAME">this.chaining</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> 
<span class='line'>241</span> </span><span class="WHIT">		</span><span class="NAME">apdu.setCData</span><span class="PUNC">(</span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NAME">lc</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>242</span> 
<span class='line'>243</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lc</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ivinp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.enccnt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">this.skenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_ECB</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ivinp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> 
<span class='line'>247</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.skenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">apdu.getCData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">			</span><span class="NAME">apdu.setCData</span><span class="PUNC">(</span><span class="NAME">GPSCP03.stripPadding</span><span class="PUNC">(</span><span class="NAME">plain</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>250</span> 
<span class='line'>251</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>252</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>253</span> 
<span class='line'>254</span> 
<span class='line'>255</span> 
<span class='line'>256</span> </span><span class="COMM">/**
<span class='line'>257</span>  * Counterpart to unwrap and meant to be used in a simulator
<span class='line'>258</span>  */</span><span class="WHIT">
<span class='line'>259</span> </span><span class="NAME">GPSCP03.prototype.wrapResponseAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">apdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x10</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">apdu.hasRData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ivinp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.enccnt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">15</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">this.skenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_ECB</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ivinp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">apdu.getRData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2_16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> 
<span class='line'>266</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">this.skenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">			</span><span class="NAME">apdu.setRData</span><span class="PUNC">(</span><span class="NAME">cryptogram</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>269</span> 
<span class='line'>270</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.chaining</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> 
<span class='line'>273</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">apdu.getResponseAPDU</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> 
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">this.skrmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> 
<span class='line'>277</span> </span><span class="WHIT">		</span><span class="NAME">apdu.setRData</span><span class="PUNC">(</span><span class="NAME">apdu.hasRData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">apdu.getRData</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">mac</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>279</span> 
<span class='line'>280</span> </span><span class="WHIT">	</span><span class="NAME">this.enccnt</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>282</span> 
<span class='line'>283</span> 
<span class='line'>284</span> 
<span class='line'>285</span> </span><span class="NAME">GPSCP03.prototype.setCLATransformation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">clatransformation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">clatransformation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument clatransformation must be a function"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">	</span><span class="NAME">this.clatransformation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">clatransformation</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>288</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>289</span> 
<span class='line'>290</span> 
<span class='line'>291</span> 
<span class='line'>292</span> </span><span class="COMM">/**
<span class='line'>293</span>  * Issue INITIALIZE UPDATE command to card and parse response
<span class='line'>294</span>  *
<span class='line'>295</span>  * @param {Card} card the card to use
<span class='line'>296</span>  * @param {Number} keyVersion the version of the key to use (0 for default)
<span class='line'>297</span>  * @param {Number} keyId the key id to use (usually 0)
<span class='line'>298</span>  */</span><span class="WHIT">
<span class='line'>299</span> </span><span class="NAME">GPSCP03.prototype.initializeUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">card</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyVersion</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">	</span><span class="NAME">this.hostChallenge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> 
<span class='line'>302</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.clatransformation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>304</span> </span><span class="WHIT">		</span><span class="NAME">cla</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.clatransformation</span><span class="PUNC">(</span><span class="NAME">cla</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>306</span> 
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">card.sendApdu</span><span class="PUNC">(</span><span class="NAME">cla</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x50</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyVersion</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.hostChallenge</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>308</span> 
<span class='line'>309</span> </span><span class="WHIT">	</span><span class="NAME">this.diversificationData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">	</span><span class="NAME">this.keyInformation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.bytes</span><span class="PUNC">(</span><span class="NUMB">10</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">	</span><span class="NAME">this.keyVersion</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.keyInformation.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">	</span><span class="NAME">this.parami</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.keyInformation.byteAt</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">	</span><span class="NAME">this.cardChallenge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.bytes</span><span class="PUNC">(</span><span class="NUMB">13</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">	</span><span class="NAME">this.cardCryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.bytes</span><span class="PUNC">(</span><span class="NUMB">21</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rsp.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">29</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">		</span><span class="NAME">this.sequenceCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.bytes</span><span class="PUNC">(</span><span class="NUMB">29</span><span class="PUNC">,</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">context</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sequenceCounter.concat</span><span class="PUNC">(</span><span class="NAME">this.aid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">this.kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ref.equals</span><span class="PUNC">(</span><span class="NAME">this.cardChallenge</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Pseudo-random card challenge does not match Kenc"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>320</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>321</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>322</span> 
<span class='line'>323</span> 
<span class='line'>324</span> 
<span class='line'>325</span> </span><span class="COMM">/**
<span class='line'>326</span>  * Set the sequence number for pseudo-random card challenges
<span class='line'>327</span>  *
<span class='line'>328</span>  * @param {ByteString} cnt the last used counter value
<span class='line'>329</span>  */</span><span class="WHIT">
<span class='line'>330</span> </span><span class="NAME">GPSCP03.prototype.setSequenceCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cnt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">cnt</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument cnt must be ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">cnt.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument cnt must be 3 bytes long"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">	</span><span class="NAME">this.sequenceCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>335</span> 
<span class='line'>336</span> 
<span class='line'>337</span> 
<span class='line'>338</span> </span><span class="COMM">/**
<span class='line'>339</span>  * Set the key version and protocol parameter
<span class='line'>340</span>  *
<span class='line'>341</span>  * @param {Number} version the key version indicated in INITIALIZE_UPDATE
<span class='line'>342</span>  * @param {Number} parami the i parameter for the SCP03 protocol (Default '00')
<span class='line'>343</span>  */</span><span class="WHIT">
<span class='line'>344</span> </span><span class="NAME">GPSCP03.prototype.setKeyInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">version</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parami</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">version</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument version must be of type number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">parami</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>347</span> </span><span class="WHIT">		</span><span class="NAME">this.parami</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parami</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">	</span><span class="NAME">this.keyVersion</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">version</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">	</span><span class="NAME">this.keyInformation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyVersion</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x03</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.parami</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>352</span> 
<span class='line'>353</span> 
<span class='line'>354</span> 
<span class='line'>355</span> </span><span class="COMM">/**
<span class='line'>356</span>  * Determine random or pseudo-random card challenge
<span class='line'>357</span>  *
<span class='line'>358</span>  */</span><span class="WHIT">
<span class='line'>359</span> </span><span class="NAME">GPSCP03.prototype.determineCardChallenge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.sequenceCounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">		</span><span class="NAME">this.cardChallenge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sequenceCounter.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>364</span> </span><span class="WHIT">		</span><span class="NAME">this.sequenceCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">cnt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">context</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sequenceCounter.concat</span><span class="PUNC">(</span><span class="NAME">this.aid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">		</span><span class="NAME">this.cardChallenge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">this.kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>368</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>369</span> 
<span class='line'>370</span> 
<span class='line'>371</span> 
<span class='line'>372</span> </span><span class="COMM">/**
<span class='line'>373</span>  * Handle processing of INITIALIZE UPDATE command
<span class='line'>374</span>  *
<span class='line'>375</span>  * @param {ByteString} hostCryptogram the cryptogram calculated at the host
<span class='line'>376</span>  */</span><span class="WHIT">
<span class='line'>377</span> </span><span class="NAME">GPSCP03.prototype.handleInitializeUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">hostChallenge</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">	</span><span class="NAME">this.hostChallenge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hostChallenge</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> </span><span class="WHIT">	</span><span class="NAME">this.determineCardChallenge</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>380</span> 
<span class='line'>381</span> </span><span class="WHIT">	</span><span class="NAME">this.diversificationData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0102030405060708090A"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> 
<span class='line'>383</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.keyInformation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT">		</span><span class="NAME">this.keyInformation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"010300"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>386</span> 
<span class='line'>387</span> </span><span class="WHIT">	</span><span class="NAME">this.deriveSessionKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>388</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">context</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.hostChallenge.concat</span><span class="PUNC">(</span><span class="NAME">this.cardChallenge</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>389</span> </span><span class="WHIT">	</span><span class="NAME">this.cardCryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">this.skmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>390</span> 
<span class='line'>391</span> </span><span class="WHIT">	</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>392</span> </span><span class="WHIT">	</span><span class="NAME">this.chaining</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>393</span> 
<span class='line'>394</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>395</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.diversificationData</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.keyVersion</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NUMB">0x03</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.parami</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.cardChallenge</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.cardCryptogram</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sequenceCounter</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.sequenceCounter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>403</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>404</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>406</span> 
<span class='line'>407</span> 
<span class='line'>408</span> 
<span class='line'>409</span> </span><span class="COMM">/**
<span class='line'>410</span>  * Issue EXTERNAL AUTHENTICATE command to card.
<span class='line'>411</span>  *
<span class='line'>412</span>  * @param {Card} card the card to use
<span class='line'>413</span>  * @param {Number} level the security level (a combination of bits B5 (R-ENC), B4 (R-MAC), B2 (C-ENC) and B1 (C-MAC))
<span class='line'>414</span>  * @param {ByteString} hostCryptogram optional parameter, calculated internally if missing
<span class='line'>415</span>  */</span><span class="WHIT">
<span class='line'>416</span> </span><span class="NAME">GPSCP03.prototype.externalAuthenticate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">card</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">level</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hostCryptogram</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">card</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Card</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument card must be instance of Card"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">level</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument level must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">level</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="PUNC">~</span><span class="NUMB">0x33</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument level must use only bits B5,B4,B2 or B1"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">hostCryptogram</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hostCryptogram</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"hostCryptogram must be missing or ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>421</span> 
<span class='line'>422</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hostCryptogram</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">		</span><span class="NAME">this.calculateHostCryptogram</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>425</span> </span><span class="WHIT">		</span><span class="NAME">this.hostCryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hostCryptogram</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>426</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>427</span> </span><span class="WHIT">	</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>428</span> 
<span class='line'>429</span> </span><span class="WHIT">	</span><span class="NAME">card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">level</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.hostCryptogram</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>430</span> </span><span class="WHIT">	</span><span class="NAME">this.seclevel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">level</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>431</span> </span><span class="WHIT">	</span><span class="NAME">this.enccnt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>432</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>433</span> 
<span class='line'>434</span> 
<span class='line'>435</span> 
<span class='line'>436</span> </span><span class="COMM">/**
<span class='line'>437</span>  * Handle processing of PUT KEY command
<span class='line'>438</span>  *
<span class='line'>439</span>  * @param {ByteString} cdata the C-Data field of the APDU
<span class='line'>440</span>  */</span><span class="WHIT">
<span class='line'>441</span> </span><span class="NAME">GPSCP03.prototype.handlePutKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cdata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>442</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cdata.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>443</span> </span><span class="WHIT">	</span><span class="NAME">cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cdata.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>444</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSCP03.parseKeyDataField</span><span class="PUNC">(</span><span class="NAME">cdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>445</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.validateKeyBlock</span><span class="PUNC">(</span><span class="NAME">kd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>446</span> </span><span class="WHIT">	</span><span class="NAME">cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cdata.bytes</span><span class="PUNC">(</span><span class="NAME">kd.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>447</span> 
<span class='line'>448</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSCP03.parseKeyDataField</span><span class="PUNC">(</span><span class="NAME">cdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.validateKeyBlock</span><span class="PUNC">(</span><span class="NAME">kd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">	</span><span class="NAME">cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cdata.bytes</span><span class="PUNC">(</span><span class="NAME">kd.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>451</span> 
<span class='line'>452</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSCP03.parseKeyDataField</span><span class="PUNC">(</span><span class="NAME">cdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>453</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kdek</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.validateKeyBlock</span><span class="PUNC">(</span><span class="NAME">kd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>454</span> 
<span class='line'>455</span> </span><span class="WHIT">	</span><span class="NAME">this.keyVersion</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">version</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">	</span><span class="NAME">this.kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT">	</span><span class="NAME">this.kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>458</span> </span><span class="WHIT">	</span><span class="NAME">this.kdek</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kdek</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>459</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>460</span> 
<span class='line'>461</span> 
<span class='line'>462</span> 
<span class='line'>463</span> </span><span class="COMM">/**
<span class='line'>464</span>  * Derive S-ENC, S-MAC and S-RMAC session keys
<span class='line'>465</span>  */</span><span class="WHIT">
<span class='line'>466</span> </span><span class="NAME">GPSCP03.prototype.deriveSessionKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>467</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">context</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.hostChallenge.concat</span><span class="PUNC">(</span><span class="NAME">this.cardChallenge</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>468</span> 
<span class='line'>469</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.kmac.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>470</span> 
<span class='line'>471</span> </span><span class="WHIT">	</span><span class="COMM">// Derive S-MAC</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>473</span> </span><span class="WHIT">	</span><span class="NAME">this.skmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>474</span> </span><span class="WHIT">	</span><span class="NAME">this.skmac.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>475</span> 
<span class='line'>476</span> </span><span class="WHIT">	</span><span class="COMM">// Derive S-RMAC</span><span class="WHIT">
<span class='line'>477</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">this.kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>478</span> </span><span class="WHIT">	</span><span class="NAME">this.skrmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>479</span> </span><span class="WHIT">	</span><span class="NAME">this.skrmac.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>480</span> 
<span class='line'>481</span> </span><span class="WHIT">	</span><span class="COMM">// Derive S-ENC</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">this.kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>483</span> </span><span class="WHIT">	</span><span class="NAME">this.skenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>484</span> </span><span class="WHIT">	</span><span class="NAME">this.skenc.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>485</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>486</span> 
<span class='line'>487</span> 
<span class='line'>488</span> 
<span class='line'>489</span> </span><span class="COMM">/**
<span class='line'>490</span>  * Verify card cryptogram
<span class='line'>491</span>  *
<span class='line'>492</span>  * @type boolean
<span class='line'>493</span>  * @return true if cryptogram is valid
<span class='line'>494</span>  */</span><span class="WHIT">
<span class='line'>495</span> </span><span class="NAME">GPSCP03.prototype.verifyCardCryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>496</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">context</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.hostChallenge.concat</span><span class="PUNC">(</span><span class="NAME">this.cardChallenge</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>497</span> 
<span class='line'>498</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ss</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">this.skmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>499</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ss.equals</span><span class="PUNC">(</span><span class="NAME">this.cardCryptogram</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>500</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>501</span> 
<span class='line'>502</span> 
<span class='line'>503</span> 
<span class='line'>504</span> </span><span class="COMM">/**
<span class='line'>505</span>  * Calculate host cryptogram using the key derive method
<span class='line'>506</span>  *
<span class='line'>507</span>  * @type ByteString
<span class='line'>508</span>  * @return the 8 byte cryptogram
<span class='line'>509</span>  */</span><span class="WHIT">
<span class='line'>510</span> </span><span class="NAME">GPSCP03.prototype.calculateHostCryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>511</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">context</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.hostChallenge.concat</span><span class="PUNC">(</span><span class="NAME">this.cardChallenge</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>512</span> 
<span class='line'>513</span> </span><span class="WHIT">	</span><span class="NAME">this.hostCryptogram</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deriveKey</span><span class="PUNC">(</span><span class="NAME">this.skmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>514</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.hostCryptogram</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>515</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>516</span> 
<span class='line'>517</span> 
<span class='line'>518</span> 
<span class='line'>519</span> </span><span class="COMM">/**
<span class='line'>520</span>  * Encrypt key and prepare key block for PUT KEY command
<span class='line'>521</span>  *
<span class='line'>522</span>  * @param {Key} dek the data encryption key
<span class='line'>523</span>  * @param {Key} key the key to wrap
<span class='line'>524</span>  * @type ByteString
<span class='line'>525</span>  * @return the key type, length, cryptogram and key check value
<span class='line'>526</span>  */</span><span class="WHIT">
<span class='line'>527</span> </span><span class="NAME">GPSCP03.prototype.prepareKeyBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">dek</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>528</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dek</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument dek must be instance of Key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>529</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument key must be instance of Key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>530</span> 
<span class='line'>531</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>532</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ones</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"01010101010101010101010101010101"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>533</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kcv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_ECB</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ones</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>534</span> 
<span class='line'>535</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>536</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ck</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">dek</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>537</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ckbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="STRN">"88"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>538</span> </span><span class="WHIT">	</span><span class="NAME">ckbin.append</span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>539</span> </span><span class="WHIT">	</span><span class="NAME">ckbin.append</span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>540</span> </span><span class="WHIT">	</span><span class="NAME">ckbin.append</span><span class="PUNC">(</span><span class="NAME">ck</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>541</span> </span><span class="WHIT">	</span><span class="NAME">ckbin.append</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>542</span> </span><span class="WHIT">	</span><span class="NAME">ckbin.append</span><span class="PUNC">(</span><span class="NAME">kcv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>543</span> 
<span class='line'>544</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ckbin.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>545</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>546</span> 
<span class='line'>547</span> 
<span class='line'>548</span> 
<span class='line'>549</span> </span><span class="COMM">/**
<span class='line'>550</span>  * Extract a key data field from C-Data in a PUT KEY APDU
<span class='line'>551</span>  *
<span class='line'>552</span>  * @param {ByteString} keyDataField the list of key data fields
<span class='line'>553</span>  * @type ByteString
<span class='line'>554</span>  * @return the extracted key data
<span class='line'>555</span>  */</span><span class="WHIT">
<span class='line'>556</span> </span><span class="NAME">GPSCP03.parseKeyDataField</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDataField</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>557</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyDataField.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">keyDataField.byteAt</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>559</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Field length does not match"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>560</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT">	</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>562</span> </span><span class="WHIT">	</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyDataField.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>563</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">keyDataField.left</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>564</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>565</span> 
<span class='line'>566</span> 
<span class='line'>567</span> 
<span class='line'>568</span> </span><span class="COMM">/**
<span class='line'>569</span>  * Decrypt and validate key blob containing AES key wrapped with DEK
<span class='line'>570</span>  *
<span class='line'>571</span>  * @param {ByteString} keyblob the wrapped key
<span class='line'>572</span>  * @type Key
<span class='line'>573</span>  * @return the unwrapped key
<span class='line'>574</span>  */</span><span class="WHIT">
<span class='line'>575</span> </span><span class="NAME">GPSCP03.prototype.validateKeyBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyblob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>576</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">keyblob</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument keyblob must be instance of ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>577</span> 
<span class='line'>578</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyblob.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x88</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>579</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"AES key blob must start with '88'"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>580</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>581</span> 
<span class='line'>582</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>583</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyblob.length</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>584</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_INVDATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Length exceeds key blob"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>585</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>586</span> 
<span class='line'>587</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kcvlen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob.byteAt</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>588</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ck</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>589</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>590</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.kdek</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ck</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>591</span> 
<span class='line'>592</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>593</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>594</span> 
<span class='line'>595</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ones</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"01010101010101010101010101010101"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>596</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kcv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_ECB</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ones</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NAME">kcvlen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>597</span> 
<span class='line'>598</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">keyblob.right</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">kcv</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>599</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">APDU.SW_SECSTATNOTSAT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"KCV does not match"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>600</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>601</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>602</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>603</span> 
<span class='line'>604</span> 
<span class='line'>605</span> 
<span class='line'>606</span> </span><span class="COMM">/**
<span class='line'>607</span>  * Derive a session key or cryptogram
<span class='line'>608</span>  *
<span class='line'>609</span>  * @param {Key} key the master key
<span class='line'>610</span>  * @param {Number} ddc the data derivation constant
<span class='line'>611</span>  * @param {Number} size the size of byte of the resulting key or cryptogram
<span class='line'>612</span>  * @param {ByteString} context the context (usually hostChallenge || cardChallenge)
<span class='line'>613</span>  * @return the derived value
<span class='line'>614</span>  * @type ByteString
<span class='line'>615</span>  */</span><span class="WHIT">
<span class='line'>616</span> </span><span class="NAME">GPSCP03.prototype.deriveKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ddc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">context</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>617</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument key must be instance of Key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>618</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">ddc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument ddc must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>619</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">size</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument size must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>620</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">context</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument context must be instance of ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>621</span> 
<span class='line'>622</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>623</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">os</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>624</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>625</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">os</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>626</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>627</span> </span><span class="WHIT">		</span><span class="NAME">dp.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">ddc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">12</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>628</span> </span><span class="WHIT">		</span><span class="NAME">dp.append</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>629</span> </span><span class="WHIT">		</span><span class="NAME">dp.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>630</span> </span><span class="WHIT">		</span><span class="NAME">dp.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">iter</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>631</span> </span><span class="WHIT">		</span><span class="NAME">dp.append</span><span class="PUNC">(</span><span class="NAME">context</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>632</span> 
<span class='line'>633</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>634</span> 
<span class='line'>635</span> </span><span class="WHIT">		</span><span class="NAME">dd.append</span><span class="PUNC">(</span><span class="NAME">mac.left</span><span class="PUNC">(</span><span class="NAME">os</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">mac.length</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">mac.length</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">os</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>636</span> </span><span class="WHIT">		</span><span class="NAME">os</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mac.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>637</span> </span><span class="WHIT">		</span><span class="NAME">iter</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>638</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>639</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dd.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>640</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>641</span> 
<span class='line'>642</span> 
<span class='line'>643</span> 
<span class='line'>644</span> </span><span class="NAME">GPSCP03.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>645</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>646</span> 
<span class='line'>647</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>648</span> </span><span class="WHIT">	</span><span class="NAME">kmac.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"404142434445464748494a4b4c4d4e4f"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>649</span> 
<span class='line'>650</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>651</span> </span><span class="WHIT">	</span><span class="NAME">kenc.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"404142434445464748494a4b4c4d4e4f"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>652</span> 
<span class='line'>653</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kdek</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>654</span> </span><span class="WHIT">	</span><span class="NAME">kdek.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"404142434445464748494a4b4c4d4e4f"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>655</span> 
<span class='line'>656</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">card</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Card</span><span class="PUNC">(</span><span class="NAME">_scsh3.reader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>657</span> 
<span class='line'>658</span> </span><span class="WHIT">	</span><span class="NAME">card.sendApdu</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"A000000151000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>659</span> 
<span class='line'>660</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPSCP03</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kdek</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>661</span> 
<span class='line'>662</span> </span><span class="WHIT">	</span><span class="NAME">scp.initializeUpdate</span><span class="PUNC">(</span><span class="NAME">card</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>663</span> </span><span class="WHIT">	</span><span class="NAME">scp.deriveSessionKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>664</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">scp.verifyCardCryptogram</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>665</span> </span><span class="WHIT">	</span><span class="NAME">card.setCredential</span><span class="PUNC">(</span><span class="NAME">scp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>666</span> </span><span class="WHIT">	</span><span class="NAME">scp.externalAuthenticate</span><span class="PUNC">(</span><span class="NAME">card</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>667</span> 
<span class='line'>668</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"E82B0601040181C31F0202"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>669</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x4F</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>670</span> 
<span class='line'>671</span> </span><span class="WHIT">	</span><span class="NAME">card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xE4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>672</span> </span><span class="WHIT">	</span><span class="NAME">card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xE4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>673</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>674</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2015 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Basic helper functions to encode and decode PKCS#1 padding
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Empty constructor
<span class='line'> 31</span>  */</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PKCS1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 34</span> 
<span class='line'> 35</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">exports</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="WHIT">	</span><span class="NAME">exports.PKCS1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 37</span> 
<span class='line'> 38</span> 
<span class='line'> 39</span> </span><span class="COMM">/**
<span class='line'> 40</span>  * Mask Generation Function 1
<span class='line'> 41</span>  *
<span class='line'> 42</span>  * @param {Crypto} crypto instance providing hash
<span class='line'> 43</span>  * @param {Number} hashalg Hash algorithm (one of Crypto.SHA_xxx)
<span class='line'> 44</span>  * @param {ByteString} mgfSeed Seed byte string
<span class='line'> 45</span>  * @param {Number} maskLen length of requested masked
<span class='line'> 46</span>  * @type ByteString
<span class='line'> 47</span>  * @return the generated mask
<span class='line'> 48</span>  */</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="NAME">PKCS1.MGF1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hashalg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mgfSeed</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maskLen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">maskLen</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">maskLen</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"maskLen out of range"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> 
<span class='line'> 55</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">maskLen</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">		</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.concat</span><span class="PUNC">(</span><span class="NAME">crypto.digest</span><span class="PUNC">(</span><span class="NAME">hashalg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mgfSeed.concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">		</span><span class="NAME">c</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t.left</span><span class="PUNC">(</span><span class="NAME">maskLen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 62</span> 
<span class='line'> 63</span> 
<span class='line'> 64</span> 
<span class='line'> 65</span> </span><span class="COMM">/**
<span class='line'> 66</span>  * EME-OAEP decoder as defined in PKCS#1 V2.1 chapter 7.1.2
<span class='line'> 67</span>  *
<span class='line'> 68</span>  * @param {Crypto} crypto instance providing hash function
<span class='line'> 69</span>  * @param {ByteString} label additional label for encryption
<span class='line'> 70</span>  * @param {Number} hashalg Hash algorithm (one of Crypto.SHA_xxx)
<span class='line'> 71</span>  * @param {ByteString} em encoded messages after RSA decrypt
<span class='line'> 72</span>  * @type ByteString
<span class='line'> 73</span>  * @return null if padding error or recovered message
<span class='line'> 74</span>  */</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="NAME">PKCS1.decode_EME_OAEP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hashalg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">em</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">		</span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 79</span> 
<span class='line'> 80</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lHash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.digest</span><span class="PUNC">(</span><span class="NAME">hashalg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hLen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lHash.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">em.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">maskedSeed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">em.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hLen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">maskedDB</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">em.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">hLen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> 
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">seedMask</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS1.MGF1</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hashalg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maskedDB</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hLen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">seed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maskedSeed.xor</span><span class="PUNC">(</span><span class="NAME">seedMask</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dbMask</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS1.MGF1</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hashalg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">seed</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">em.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">hLen</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">DB</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maskedDB.xor</span><span class="PUNC">(</span><span class="NAME">dbMask</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> 
<span class='line'> 91</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DB.left</span><span class="PUNC">(</span><span class="NAME">hLen</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">lHash</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hLen</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">DB.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">DB.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">		</span><span class="NAME">cnt</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">DB.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 98</span> 
<span class='line'> 99</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">DB.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c4</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">hLen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> 
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">c1</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">c2</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">c3</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">c4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">DB.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>107</span> 
<span class='line'>108</span> 
<span class='line'>109</span> 
<span class='line'>110</span> </span><span class="COMM">/**
<span class='line'>111</span>  * EME-PKCS1-v1_5 decoder as defined in PKCS#1 V2.1 chapter 7.2.2
<span class='line'>112</span>  *
<span class='line'>113</span>  * @param {ByteString} em encoded messages after RSA decrypt
<span class='line'>114</span>  * @type ByteString
<span class='line'>115</span>  * @return null if padding error or recovered message
<span class='line'>116</span>  */</span><span class="WHIT">
<span class='line'>117</span> </span><span class="NAME">PKCS1.decode_EME_V15</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">em</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">em.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">em.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> 
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">em.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">em.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> 
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">em.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> 
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">c1</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">c2</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">c3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">em.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>130</span> 
<span class='line'>131</span> 
<span class='line'>132</span> 
<span class='line'>133</span> </span><span class="NAME">PKCS1.ALLFF</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> 
<span class='line'>135</span> </span><span class="COMM">/**
<span class='line'>136</span>  * EMSA-PKCS-v1_5 encoder as defined in PKCS#1 V2.1 chapter 9.2
<span class='line'>137</span>  *
<span class='line'>138</span>  * This method uses the length of the hash to determine the hash algorithm, i.e. MD5(16), SHA-1(20), SHA-224(28), SHA-256(32), SHA-384(48) or SHA-512(64)
<span class='line'>139</span>  *
<span class='line'>140</span>  * @param {Number} keysize the key size in bits
<span class='line'>141</span>  * @param {ByteString} hash the hash value
<span class='line'>142</span>  * @type ByteString
<span class='line'>143</span>  * @return the encoded message
<span class='line'>144</span>  */</span><span class="WHIT">
<span class='line'>145</span> </span><span class="NAME">PKCS1.encode_EMSA_V15</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">hash.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-md5"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">28</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha224"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">48</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha384"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">64</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid hash length"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">di</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.NULL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">			    </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">		     </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">di.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">em</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="STRN">"0001"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pslen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">t.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pslen</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pslen</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">256</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">256</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">pslen</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">		</span><span class="NAME">em.append</span><span class="PUNC">(</span><span class="NAME">PKCS1.ALLFF.left</span><span class="PUNC">(</span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">		</span><span class="NAME">pslen</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="NAME">em.append</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">	</span><span class="NAME">em.append</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">em.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>188</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2015 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview PKCS#10 Decoder
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/x509/PKIXCommon'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKIXCommon</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">X509Name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/x509/X509Name'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">X509Name</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> </span><span class="COMM">/**
<span class='line'> 32</span>  * Class supporting PKCS#10 certificate signing requests
<span class='line'> 33</span>  *
<span class='line'> 34</span>  * @param {ASN1} req the certificate request
<span class='line'> 35</span>  */</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PKCS10</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 37</span> 
<span class='line'> 38</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">req</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="WHIT">		</span><span class="NAME">this.req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">req</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">asn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">		</span><span class="NAME">this.req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">asn</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be either type of ByteString or ASN1"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 46</span> 
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">this.reqInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.req.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="NAME">this.sigAlg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.req.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">	</span><span class="NAME">this.sig</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.req.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 51</span> 
<span class='line'> 52</span> </span><span class="NAME">exports.PKCS10</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS10</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> </span><span class="NAME">PKCS10.RSA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"rsaEncryption"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="NAME">PKCS10.RSA_PSS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="NAME">PKCS10.EC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-ecPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> 
<span class='line'> 58</span> 
<span class='line'> 59</span> 
<span class='line'> 60</span> </span><span class="COMM">/**
<span class='line'> 61</span>  * Get the encoded request
<span class='line'> 62</span>  *
<span class='line'> 63</span>  * @return the encoded request
<span class='line'> 64</span>  * @type ByteString
<span class='line'> 65</span>  */</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="NAME">PKCS10.prototype.getBytes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.req.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 69</span> 
<span class='line'> 70</span> 
<span class='line'> 71</span> 
<span class='line'> 72</span> </span><span class="COMM">/**
<span class='line'> 73</span>  * Gets the subject name as TLV object
<span class='line'> 74</span>  *
<span class='line'> 75</span>  * @return the issuer RDNSequence
<span class='line'> 76</span>  * @type ASN1
<span class='line'> 77</span>  */</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="NAME">PKCS10.prototype.getSubject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.reqInfo.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 81</span> 
<span class='line'> 82</span> 
<span class='line'> 83</span> 
<span class='line'> 84</span> </span><span class="COMM">/**
<span class='line'> 85</span>  * Get the public key
<span class='line'> 86</span>  *
<span class='line'> 87</span>  * @type key
<span class='line'> 88</span>  * @return the public key
<span class='line'> 89</span>  */</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="NAME">PKCS10.prototype.getPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.reqInfo.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> 
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bitString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.reqInfo.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// subjectPublicKey</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">	</span><span class="NAME">bitString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.removeLeadingZeroBytes</span><span class="PUNC">(</span><span class="NAME">bitString</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> 
<span class='line'> 96</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="NAME">key.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> 
<span class='line'> 99</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">algorithm.equals</span><span class="PUNC">(</span><span class="NAME">PKCS10.RSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">algorithm.equals</span><span class="PUNC">(</span><span class="NAME">PKCS10.RSA_PSS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">bitString</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.removeLeadingZeroBytes</span><span class="PUNC">(</span><span class="NAME">p.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.removeLeadingZeroBytes</span><span class="PUNC">(</span><span class="NAME">p.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.reqInfo.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bitString.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Only uncompressed keys supported (04)"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bitString.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bitString.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bitString.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>112</span> 
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>114</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>115</span> 
<span class='line'>116</span> 
<span class='line'>117</span> 
<span class='line'>118</span> </span><span class="COMM">/**
<span class='line'>119</span>  * Get the signature algorithm as Crypto.X constant
<span class='line'>120</span>  *
<span class='line'>121</span>  * @type Number
<span class='line'>122</span>  * @return the signature algorithm
<span class='line'>123</span>  */</span><span class="WHIT">
<span class='line'>124</span> </span><span class="NAME">PKCS10.prototype.getSignatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algOID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sigAlg.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sigAlg.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">param</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sigAlg.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.decodeSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">algOID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">param</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> 
<span class='line'>131</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">alg</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid algorithm"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>136</span> 
<span class='line'>137</span> 
<span class='line'>138</span> 
<span class='line'>139</span> </span><span class="COMM">/**
<span class='line'>140</span>  * Get the signature value
<span class='line'>141</span>  *
<span class='line'>142</span>  * @type ByteString
<span class='line'>143</span>  * @return the signature
<span class='line'>144</span>  */</span><span class="WHIT">
<span class='line'>145</span> </span><span class="NAME">PKCS10.prototype.getSignature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sig.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>147</span> 
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signature.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">		</span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signature.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>153</span> 
<span class='line'>154</span> 
<span class='line'>155</span> 
<span class='line'>156</span> </span><span class="COMM">/**
<span class='line'>157</span>  * Verify signature
<span class='line'>158</span>  *
<span class='line'>159</span>  * @param {Key} pubKey optional public key to use for verification
<span class='line'>160</span>  * @type boolean
<span class='line'>161</span>  * @return true if signature is valid
<span class='line'>162</span>  */</span><span class="WHIT">
<span class='line'>163</span> </span><span class="NAME">PKCS10.prototype.verify</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pubKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">pubKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="NAME">pubKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSignatureAlgorithm</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSignature</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> 
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">crypto.verify</span><span class="PUNC">(</span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.reqInfo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> 
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="NAME">PKCS10.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"PKCS#10 Request:"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> 
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">		</span><span class="NAME">s</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Type=RSA,"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">		</span><span class="NAME">s</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Type=EC,"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curve</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ASN1.nameForObjectIdentifier</span><span class="PUNC">(</span><span class="NAME">k.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">curve</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">			</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Curve="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">curve</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="NAME">s</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Size="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">k.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> 
<span class='line'>191</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSubject</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509Name</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">		</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">xName.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>196</span> 
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>199</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Basic helper functions to convert PKCS#8 data to GP keys and vice versa
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Empty constructor
<span class='line'> 31</span>  */</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PKCS8</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 34</span> 
<span class='line'> 35</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">exports</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="WHIT">	</span><span class="NAME">exports.PKCS8</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 37</span> 
<span class='line'> 38</span> 
<span class='line'> 39</span> </span><span class="NAME">PKCS8.idEcPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-ecPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="NAME">PKCS8.rsaEncryption</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"1.2.840.113549.1.1.1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> 
<span class='line'> 42</span> </span><span class="COMM">/**
<span class='line'> 43</span>  * Convert x/y coordinates to uncompressed format
<span class='line'> 44</span>  *
<span class='line'> 45</span>  * @param {ByteString} x the x coordinate
<span class='line'> 46</span>  * @param {ByteString} y the y coordinate
<span class='line'> 47</span>  * @type ByteString
<span class='line'> 48</span>  * @return ByteString containing compressed format
<span class='line'> 49</span>  *
<span class='line'> 50</span>  */</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="NAME">PKCS8.encodeUncompressedECPoint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="NAME">y</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 52</span> 
<span class='line'> 53</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> 
<span class='line'> 55</span> </span><span class="WHIT">	</span><span class="COMM">// uncompressed encoding</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> 
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 62</span> 
<span class='line'> 63</span> 
<span class='line'> 64</span> 
<span class='line'> 65</span> </span><span class="COMM">/**
<span class='line'> 66</span>  * Convert uncompressed format to x and y coordinates
<span class='line'> 67</span>  *
<span class='line'> 68</span>  * @param {ByteString} compressed point
<span class='line'> 69</span>  * @type Object
<span class='line'> 70</span>  * @return Object with ByteString properties x and y
<span class='line'> 71</span>  *
<span class='line'> 72</span>  */</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="NAME">PKCS8.decodeUncompressedECPoint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">uncompressedPoint</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> 
<span class='line'> 75</span> </span><span class="WHIT">	</span><span class="COMM">// Determine the size of the coordinates ignoring the indicator byte '04'</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">uncompressedPoint.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> 
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sizeOfCoordinate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> 
<span class='line'> 80</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">uncompressedPoint.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sizeOfCoordinate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">yValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">uncompressedPoint.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">sizeOfCoordinate</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sizeOfCoordinate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> 
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">:</span><span class="NAME">xValue</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NAME">yValue</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 85</span> 
<span class='line'> 86</span> 
<span class='line'> 87</span> 
<span class='line'> 88</span> </span><span class="COMM">/**
<span class='line'> 89</span>  * Integer to octet string conversion
<span class='line'> 90</span>  *
<span class='line'> 91</span>  * @param {ByteString} value the encoded integer value
<span class='line'> 92</span>  * @param {Number} the number of digits
<span class='line'> 93</span>  * @type ByteString
<span class='line'> 94</span>  * @return the truncated or padded result
<span class='line'> 95</span>  */</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="NAME">PKCS8.I2O</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value.right</span><span class="PUNC">(</span><span class="NAME">length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.PAD.left</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">15</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>105</span> </span><span class="NAME">PKCS8.PAD</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span> 
<span class='line'>107</span> 
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="COMM">/**
<span class='line'>110</span>  * Strips leading zeros of a ByteString
<span class='line'>111</span>  *
<span class='line'>112</span>  * @param {ByteString} value the ByteString value
<span class='line'>113</span>  * @return the stripped ByteString object, may be an empty ByteString
<span class='line'>114</span>  * @type ByteString
<span class='line'>115</span>  */</span><span class="WHIT">
<span class='line'>116</span> </span><span class="NAME">PKCS8.stripLeadingZeros</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">size</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">limit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">		</span><span class="NAME">limit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>122</span> 
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">limit</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> 
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>128</span> 
<span class='line'>129</span> 
<span class='line'>130</span> 
<span class='line'>131</span> </span><span class="COMM">/**
<span class='line'>132</span>  * Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
<span class='line'>133</span>  *
<span class='line'>134</span>  * This prevent interpretation of the integer representation if converted into
<span class='line'>135</span>  * a signed ASN1 INTEGER.
<span class='line'>136</span>  *
<span class='line'>137</span>  * @param {ByteString} value the value to convert
<span class='line'>138</span>  * @return the converted value
<span class='line'>139</span>  * @type ByteString
<span class='line'>140</span>  */</span><span class="WHIT">
<span class='line'>141</span> </span><span class="NAME">PKCS8.convertUnsignedInteger</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> 
<span class='line'>147</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>152</span> 
<span class='line'>153</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>155</span> 
<span class='line'>156</span> 
<span class='line'>157</span> 
<span class='line'>158</span> </span><span class="COMM">/**
<span class='line'>159</span>  * Encode a given GP ECC private key as specified by the PKCS#8 format
<span class='line'>160</span>  *
<span class='line'>161</span>  * @param {Key} the private key object that should be encoded
<span class='line'>162</span>  * @return the encoded PKCS#8 private key
<span class='line'>163</span>  * @type ByteString
<span class='line'>164</span>  */</span><span class="WHIT">
<span class='line'>165</span> </span><span class="NAME">PKCS8.encodeECCKeyUsingPKCS8Format</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">privateKeyInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> 
<span class='line'>168</span> </span><span class="WHIT">	</span><span class="COMM">// Set the version number - must be zero</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="NAME">privateKeyInfo.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> 
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">privateKeyAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="NAME">privateKeyAlgorithm.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.idEcPublicKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">domainInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="COMM">// Cofactor - must be 1</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="NAME">domainInfo.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> 
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> 
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="COMM">// we are using a prime field</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="NAME">field.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"prime-field"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// prime field</span><span class="WHIT">
<span class='line'>183</span> 
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">primeOrder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">primeOrder.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// signed int? -> add 0x00</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">		</span><span class="NAME">field.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">		</span><span class="NAME">field.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>190</span> 
<span class='line'>191</span> </span><span class="WHIT">	</span><span class="NAME">domainInfo.add</span><span class="PUNC">(</span><span class="NAME">field</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>192</span> 
<span class='line'>193</span> </span><span class="WHIT">	</span><span class="COMM">// Coefficients a and b</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">coeff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="COMM">// first coefficient</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="NAME">coeff.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> 
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="COMM">// second coefficient</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="NAME">coeff.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> 
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="NAME">domainInfo.add</span><span class="PUNC">(</span><span class="NAME">coeff</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> 
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="COMM">// Base point (uncompressed)</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> 
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="NAME">domainInfo.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.encodeUncompressedECPoint</span><span class="PUNC">(</span><span class="NAME">gx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">gy</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> 
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="COMM">// group order generated by the base point</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">groupOrder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">groupOrder.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// signed int? -> add 0x00</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">		</span><span class="NAME">domainInfo.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">		</span><span class="NAME">domainInfo.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>217</span> 
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="NAME">privateKeyAlgorithm.add</span><span class="PUNC">(</span><span class="NAME">domainInfo</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> 
<span class='line'>220</span> </span><span class="WHIT">	</span><span class="COMM">// encode the key information</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">	</span><span class="NAME">privateKeyInfo.add</span><span class="PUNC">(</span><span class="NAME">privateKeyAlgorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span> 
<span class='line'>223</span> </span><span class="WHIT">	</span><span class="COMM">// encode the private key</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">encodedPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> 
<span class='line'>226</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_D</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">	</span><span class="NAME">key.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">	</span><span class="NAME">key.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pk</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> 
<span class='line'>231</span> </span><span class="WHIT">	</span><span class="NAME">encodedPrivateKey.add</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> 
<span class='line'>233</span> </span><span class="WHIT">	</span><span class="NAME">privateKeyInfo.add</span><span class="PUNC">(</span><span class="NAME">encodedPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> 
<span class='line'>235</span> </span><span class="COMM">//	print(privateKeyInfo);</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">privateKeyInfo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>238</span> 
<span class='line'>239</span> 
<span class='line'>240</span> 
<span class='line'>241</span> </span><span class="COMM">/**
<span class='line'>242</span>  * Encode RSA private key as defined in PKCS#1
<span class='line'>243</span>  *
<span class='line'>244</span>  * RSAPrivateKey ::= SEQUENCE {
<span class='line'>245</span>  *     version           Version,
<span class='line'>246</span>  *     modulus           INTEGER,  -- n
<span class='line'>247</span>  *     publicExponent    INTEGER,  -- e
<span class='line'>248</span>  *     privateExponent   INTEGER,  -- d
<span class='line'>249</span>  *     prime1            INTEGER,  -- p
<span class='line'>250</span>  *     prime2            INTEGER,  -- q
<span class='line'>251</span>  *     exponent1         INTEGER,  -- d mod (p-1)
<span class='line'>252</span>  *     exponent2         INTEGER,  -- d mod (q-1)
<span class='line'>253</span>  *     coefficient       INTEGER,  -- (inverse of q) mod p
<span class='line'>254</span>  *     otherPrimeInfos   OtherPrimeInfos OPTIONAL
<span class='line'>255</span>  * }
<span class='line'>256</span>  * @param {Key} privateKey the private RSA key in CRT format
<span class='line'>257</span>  * @type ByteString
<span class='line'>258</span>  * @return the encoded RSA key
<span class='line'>259</span>  */</span><span class="WHIT">
<span class='line'>260</span> </span><span class="NAME">PKCS8.encodeRSAKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsaPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">		</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> 
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">		</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">		</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">		</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">		</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">	</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Private Exponent not at interface for CRT format</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">	</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_Q</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">	</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_DP1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_DQ1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">	</span><span class="NAME">rsaPrivateKey.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_PQ</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> 
<span class='line'>279</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rsaPrivateKey.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>281</span> 
<span class='line'>282</span> 
<span class='line'>283</span> 
<span class='line'>284</span> </span><span class="COMM">/**
<span class='line'>285</span>  * Encode a given GP RSA private key as specified by the PKCS#8 format
<span class='line'>286</span>  *
<span class='line'>287</span>  * @param {Key} the private key object that should be encoded
<span class='line'>288</span>  * @return the encoded PKCS#8 private key
<span class='line'>289</span>  * @type ByteString
<span class='line'>290</span>  */</span><span class="WHIT">
<span class='line'>291</span> </span><span class="NAME">PKCS8.encodeRSAKeyUsingPKCS8Format</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">privateKeyInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> 
<span class='line'>294</span> </span><span class="WHIT">	</span><span class="COMM">// Set the version number - must be zero</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">	</span><span class="NAME">privateKeyInfo.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> 
<span class='line'>297</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">privateKeyAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">	</span><span class="NAME">privateKeyAlgorithm.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.rsaEncryption</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">	</span><span class="NAME">privateKeyAlgorithm.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.NULL</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> 
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="COMM">// encode the key information</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">	</span><span class="NAME">privateKeyInfo.add</span><span class="PUNC">(</span><span class="NAME">privateKeyAlgorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>303</span> 
<span class='line'>304</span> </span><span class="WHIT">	</span><span class="COMM">// encode the private key</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">encodedPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.encodeRSAKey</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> 
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="NAME">privateKeyInfo.add</span><span class="PUNC">(</span><span class="NAME">encodedPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>308</span> 
<span class='line'>309</span> </span><span class="COMM">//	print(privateKeyInfo);</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">privateKeyInfo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>311</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>312</span> 
<span class='line'>313</span> 
<span class='line'>314</span> 
<span class='line'>315</span> </span><span class="COMM">/**
<span class='line'>316</span>  * Encode a given GP private key as specified by the PKCS#8 format
<span class='line'>317</span>  *
<span class='line'>318</span>  * For now we only support the encoding of ECC private keys in a prime field
<span class='line'>319</span>  *
<span class='line'>320</span>  * @param {Key} the private key object that should be encoded
<span class='line'>321</span>  * @return the encoded PKCS#8 private key
<span class='line'>322</span>  * @type ByteString
<span class='line'>323</span>  */</span><span class="WHIT">
<span class='line'>324</span> </span><span class="NAME">PKCS8.encodeKeyUsingPKCS8Format</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>325</span> 
<span class='line'>326</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">privateKey.getType</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>327</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">privateKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKCS8.encodeECCKeyUsingPKCS8Format</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKCS8.encodeRSAKeyUsingPKCS8Format</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>332</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>333</span> 
<span class='line'>334</span> 
<span class='line'>335</span> 
<span class='line'>336</span> </span><span class="COMM">/**
<span class='line'>337</span>  * Decode a given PKCS#8 ECC private key from the given TLV objects and create a GP key object
<span class='line'>338</span>  *
<span class='line'>339</span>  * For now we only support the decoding of ECC private keys in a prime field
<span class='line'>340</span>  *
<span class='line'>341</span>  * @param {ASN1} algparam the algorithm parameter from AlgorithmInfo
<span class='line'>342</span>  * @param {ASN1} privateKey the privateKey element from the PKCS#8 structure
<span class='line'>343</span>  * @return the GP key object
<span class='line'>344</span>  * @type Key
<span class='line'>345</span>  */</span><span class="WHIT">
<span class='line'>346</span> </span><span class="NAME">PKCS8.decodeECCKeyFromPKCS8Format</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">domainParameter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encodedKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>347</span> 
<span class='line'>348</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>349</span> 
<span class='line'>350</span> </span><span class="WHIT">	</span><span class="NAME">key.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> 
<span class='line'>352</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">domainParameter.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">domainParameter.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>355</span> </span><span class="WHIT">		</span><span class="COMM">// Decode the domain parameters</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cofactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">domainParameter.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cofactor.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>358</span> 
<span class='line'>359</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">order</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">domainParameter.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">order.value</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>361</span> 
<span class='line'>362</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">coeff_A</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">domainParameter.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">coeff_A.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>364</span> 
<span class='line'>365</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">coeff_B</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">domainParameter.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">coeff_B.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>367</span> 
<span class='line'>368</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">generatorPoint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">domainParameter.get</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>369</span> 
<span class='line'>370</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">coordinates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.decodeUncompressedECPoint</span><span class="PUNC">(</span><span class="NAME">generatorPoint</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>371</span> 
<span class='line'>372</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">coordinates.x</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">coordinates.y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>374</span> 
<span class='line'>375</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">groupOrder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">domainParameter.get</span><span class="PUNC">(</span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>376</span> 
<span class='line'>377</span> </span><span class="WHIT">		</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">groupOrder.value</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>379</span> 
<span class='line'>380</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_D</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encodedKey.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> 
<span class='line'>382</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>383</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>384</span> 
<span class='line'>385</span> 
<span class='line'>386</span> 
<span class='line'>387</span> </span><span class="COMM">/**
<span class='line'>388</span>  * Decode a PKCS#1 encoded RSA private key from the given TLV objects and create a GP key object with the private key
<span class='line'>389</span>  *
<span class='line'>390</span>  * @param {ASN1} algparam the algorithm parameter from AlgorithmInfo
<span class='line'>391</span>  * @param {ASN1} privateKey the privateKey element from the PKCS#8 structure
<span class='line'>392</span>  * @return the GP key object
<span class='line'>393</span>  * @type Key
<span class='line'>394</span>  */</span><span class="WHIT">
<span class='line'>395</span> </span><span class="NAME">PKCS8.decodeRSAPrivateKeyFromPKCS1Format</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>396</span> 
<span class='line'>397</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span> 
<span class='line'>399</span> </span><span class="WHIT">	</span><span class="NAME">key.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>400</span> 
<span class='line'>401</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">privateKey.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">privateKey.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>403</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">privateKey.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">9</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>404</span> 
<span class='line'>405</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">9</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>406</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>407</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">e.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>408</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">e.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>409</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>410</span> 
<span class='line'>411</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>412</span> 
<span class='line'>413</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_P</span><span class="PUNC">,</span><span class="WHIT">   </span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_Q</span><span class="PUNC">,</span><span class="WHIT">   </span><span class="NAME">PKCS8.I2O</span><span class="PUNC">(</span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_DP1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.I2O</span><span class="PUNC">(</span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NUMB">6</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_DQ1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.I2O</span><span class="PUNC">(</span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NUMB">7</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_PQ</span><span class="PUNC">,</span><span class="WHIT">  </span><span class="NAME">PKCS8.I2O</span><span class="PUNC">(</span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> 
<span class='line'>421</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>422</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>423</span> 
<span class='line'>424</span> 
<span class='line'>425</span> 
<span class='line'>426</span> </span><span class="COMM">/**
<span class='line'>427</span>  * Decode a PKCS#1 encoded RSA private key from the given TLV objects and create a GP key object with the public key
<span class='line'>428</span>  *
<span class='line'>429</span>  * @param {ASN1} algparam the algorithm parameter from AlgorithmInfo
<span class='line'>430</span>  * @param {ASN1} privateKey the privateKey element from the PKCS#8 structure
<span class='line'>431</span>  * @return the GP key object
<span class='line'>432</span>  * @type Key
<span class='line'>433</span>  */</span><span class="WHIT">
<span class='line'>434</span> </span><span class="NAME">PKCS8.decodeRSAPublicKeyFromPKCS1Format</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>435</span> 
<span class='line'>436</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>437</span> 
<span class='line'>438</span> </span><span class="WHIT">	</span><span class="NAME">key.setType</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>439</span> 
<span class='line'>440</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">privateKey.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>441</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">privateKey.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>442</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">privateKey.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">9</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>443</span> 
<span class='line'>444</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">9</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>445</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>446</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">e.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>447</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">e.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>448</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>449</span> 
<span class='line'>450</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>451</span> 
<span class='line'>452</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">,</span><span class="WHIT">  </span><span class="NAME">PKCS8.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>453</span> </span><span class="WHIT">	</span><span class="NAME">key.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKCS8.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>454</span> 
<span class='line'>455</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>457</span> 
<span class='line'>458</span> 
<span class='line'>459</span> 
<span class='line'>460</span> </span><span class="COMM">/**
<span class='line'>461</span>  * Decode a given PKCS#8 RSA private key from the given TLV objects and create a GP key object
<span class='line'>462</span>  *
<span class='line'>463</span>  * @param {ASN1} algparam the algorithm parameter from AlgorithmInfo
<span class='line'>464</span>  * @param {ASN1} privateKey the privateKey element from the PKCS#8 structure
<span class='line'>465</span>  * @return the GP key object
<span class='line'>466</span>  * @type Key
<span class='line'>467</span>  */</span><span class="WHIT">
<span class='line'>468</span> </span><span class="NAME">PKCS8.decodeRSAKeyFromPKCS8Format</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">algparam</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>469</span> 
<span class='line'>470</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>471</span> 
<span class='line'>472</span> </span><span class="WHIT">	</span><span class="NAME">key.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>473</span> 
<span class='line'>474</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">algparam.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.NULL</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>475</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">algparam.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>476</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">algparam.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>477</span> 
<span class='line'>478</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKCS8.decodeRSAPrivateKeyFromPKCS1Format</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>479</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>480</span> 
<span class='line'>481</span> 
<span class='line'>482</span> 
<span class='line'>483</span> </span><span class="COMM">/**
<span class='line'>484</span>  * Decode a given PKCS#8 private key from the given ByteString and create a GP key object
<span class='line'>485</span>  *
<span class='line'>486</span>  * For now we only support the decoding of ECC private keys in a prime field
<span class='line'>487</span>  *
<span class='line'>488</span>  * @param {ByteString} the private key object in PKCS#8 format
<span class='line'>489</span>  * @return the GP key object
<span class='line'>490</span>  * @type Key
<span class='line'>491</span>  */</span><span class="WHIT">
<span class='line'>492</span> </span><span class="NAME">PKCS8.decodeKeyFromPKCS8Format</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">encodedKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>493</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p8</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">encodedKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>494</span> 
<span class='line'>495</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p8.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>496</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p8.elements</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>497</span> 
<span class='line'>498</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">version</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p8.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>499</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">version.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>500</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">version.value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>501</span> 
<span class='line'>502</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pkai</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p8.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">pkai.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">pkai.isconstructed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">pkai.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pkai.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>507</span> 
<span class='line'>508</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">keytype.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>509</span> 
<span class='line'>510</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algparam</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pkai.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>511</span> 
<span class='line'>512</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">privateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p8.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>513</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">privateKey.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>514</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">privateKey.isconstructed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT">		</span><span class="NAME">privateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">privateKey.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>516</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>517</span> </span><span class="WHIT">		</span><span class="NAME">privateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">privateKey.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>518</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>519</span> 
<span class='line'>520</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keytype.value.equals</span><span class="PUNC">(</span><span class="NAME">PKCS8.rsaEncryption</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>521</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKCS8.decodeRSAKeyFromPKCS8Format</span><span class="PUNC">(</span><span class="NAME">algparam</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keytype.value.equals</span><span class="PUNC">(</span><span class="NAME">PKCS8.idEcPublicKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>523</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKCS8.decodeECCKeyFromPKCS8Format</span><span class="PUNC">(</span><span class="NAME">algparam</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>525</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Unknown key type "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keytype.value.toString</span><span class="PUNC">(</span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>526</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>527</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>528</span> 
<span class='line'>529</span> 
<span class='line'>530</span> 
<span class='line'>531</span> </span><span class="COMM">/**
<span class='line'>532</span>  * Simple self-test
<span class='line'>533</span>  */</span><span class="WHIT">
<span class='line'>534</span> </span><span class="NAME">PKCS8.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>535</span> 
<span class='line'>536</span> </span><span class="WHIT">	</span><span class="COMM">// Set OID for EC curve</span><span class="WHIT">
<span class='line'>537</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ecCurve</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"1.3.36.3.3.2.8.1.1.7"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>538</span> 
<span class='line'>539</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="STRN">"BC"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>540</span> 
<span class='line'>541</span> </span><span class="WHIT">    </span><span class="COMM">// Create empty public key object</span><span class="WHIT">
<span class='line'>542</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>543</span> </span><span class="WHIT">    </span><span class="NAME">pubKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>544</span> </span><span class="WHIT">    </span><span class="NAME">pubKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">ecCurve</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>545</span> 
<span class='line'>546</span> </span><span class="WHIT">    </span><span class="COMM">// Create empty private key object</span><span class="WHIT">
<span class='line'>547</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>548</span> </span><span class="WHIT">    </span><span class="NAME">priKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>549</span> </span><span class="WHIT">    </span><span class="NAME">priKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">ecCurve</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>550</span> 
<span class='line'>551</span> </span><span class="WHIT">    </span><span class="COMM">// Generate key pair</span><span class="WHIT">
<span class='line'>552</span> </span><span class="WHIT">    </span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>553</span> 
<span class='line'>554</span> </span><span class="WHIT">    </span><span class="COMM">// Encode</span><span class="WHIT">
<span class='line'>555</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p8Key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.encodeKeyUsingPKCS8Format</span><span class="PUNC">(</span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>556</span> 
<span class='line'>557</span> </span><span class="WHIT">    </span><span class="COMM">// Decode</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">decodedKeyObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.decodeKeyFromPKCS8Format</span><span class="PUNC">(</span><span class="NAME">p8Key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>559</span> 
<span class='line'>560</span> </span><span class="WHIT">    </span><span class="COMM">// Compare</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_D</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">priKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_D</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>562</span> 
<span class='line'>563</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">priKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>564</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">priKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>565</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">pubKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>566</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">pubKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>567</span> 
<span class='line'>568</span> </span><span class="WHIT">    </span><span class="COMM">// Encode</span><span class="WHIT">
<span class='line'>569</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">refp8Key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.encodeKeyUsingPKCS8Format</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>570</span> 
<span class='line'>571</span> </span><span class="WHIT">    </span><span class="COMM">// Compare</span><span class="WHIT">
<span class='line'>572</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p8Key.equals</span><span class="PUNC">(</span><span class="NAME">refp8Key</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>573</span> 
<span class='line'>574</span> 
<span class='line'>575</span> </span><span class="WHIT">    </span><span class="COMM">// Create empty public key object</span><span class="WHIT">
<span class='line'>576</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>577</span> </span><span class="WHIT">    </span><span class="NAME">pubKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>578</span> </span><span class="WHIT">    </span><span class="NAME">pubKey.setSize</span><span class="PUNC">(</span><span class="NUMB">1024</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>579</span> 
<span class='line'>580</span> </span><span class="WHIT">    </span><span class="COMM">// Create empty private key object</span><span class="WHIT">
<span class='line'>581</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>582</span> </span><span class="WHIT">    </span><span class="NAME">priKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>583</span> 
<span class='line'>584</span> </span><span class="WHIT">    </span><span class="COMM">// Generate key pair</span><span class="WHIT">
<span class='line'>585</span> </span><span class="WHIT">    </span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>586</span> 
<span class='line'>587</span> </span><span class="WHIT">    </span><span class="COMM">// Encode</span><span class="WHIT">
<span class='line'>588</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p8Key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.encodeKeyUsingPKCS8Format</span><span class="PUNC">(</span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>589</span> 
<span class='line'>590</span> </span><span class="WHIT">    </span><span class="COMM">// Decode</span><span class="WHIT">
<span class='line'>591</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">decodedKeyObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.decodeKeyFromPKCS8Format</span><span class="PUNC">(</span><span class="NAME">p8Key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>592</span> 
<span class='line'>593</span> </span><span class="WHIT">    </span><span class="COMM">// Compare</span><span class="WHIT">
<span class='line'>594</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_P</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">priKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>595</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_Q</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">priKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_Q</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>596</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_DP1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">priKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_DP1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>597</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_DQ1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">priKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_DQ1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>598</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_PQ</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">priKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_PQ</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>599</span> 
<span class='line'>600</span> </span><span class="WHIT">    </span><span class="COMM">// Encode</span><span class="WHIT">
<span class='line'>601</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">refp8Key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.encodeKeyUsingPKCS8Format</span><span class="PUNC">(</span><span class="NAME">decodedKeyObject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>602</span> 
<span class='line'>603</span> </span><span class="WHIT">    </span><span class="COMM">// Compare</span><span class="WHIT">
<span class='line'>604</span> </span><span class="WHIT">    </span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">p8Key.equals</span><span class="PUNC">(</span><span class="NAME">refp8Key</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>605</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>606</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Remote Application Management over HTTP (RAMoverHTTP) client
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="COMM">/**
<span class='line'> 28</span>  * Create a client instance for attaching a card to a server via the RAMOverHTTP procotol
<span class='line'> 29</span>  *
<span class='line'> 30</span>  * @Class Class implementing a RAMOverHTTP client
<span class='line'> 31</span>  * @constructor
<span class='line'> 32</span>  * @param {Card} card the card instance to attach
<span class='line'> 33</span>  * @param {String} url the URL to connect to
<span class='line'> 34</span>  * @param {String} session the session cookie
<span class='line'> 35</span>  */</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">RAMClient</span><span class="PUNC">(</span><span class="NAME">card</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">session</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="WHIT">	</span><span class="NAME">this.card</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">card</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="WHIT">	</span><span class="NAME">this.url</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="WHIT">	</span><span class="NAME">this.session</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">session</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="WHIT">	</span><span class="NAME">this.httpCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.apduCount</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.aPDULimit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">100000</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">this.httpcount</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="NAME">this.httplimit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">100000</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="NAME">this.forceFailSW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.returnAllSW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 48</span> 
<span class='line'> 49</span> 
<span class='line'> 50</span> 
<span class='line'> 51</span> </span><span class="NAME">exports.RAMClient</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">RAMClient</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> 
<span class='line'> 53</span> 
<span class='line'> 54</span> 
<span class='line'> 55</span> </span><span class="COMM">/**
<span class='line'> 56</span>  * Prepend a 0, if the encoded integer is interpreted as negative value otherwise
<span class='line'> 57</span>  */</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="NAME">RAMClient.asSignedInteger</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">val</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">val</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">enc.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">		</span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 65</span> 
<span class='line'> 66</span> 
<span class='line'> 67</span> 
<span class='line'> 68</span> </span><span class="COMM">/**
<span class='line'> 69</span>  * @private
<span class='line'> 70</span>  */</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="NAME">RAMClient.prototype.encodeInitiation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">atr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xE8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xC0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">atr</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.maxCAPDUSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">		</span><span class="NAME">pit.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xC1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">RAMClient.asSignedInteger</span><span class="PUNC">(</span><span class="NAME">this.maxCAPDUSize</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.maxRAPDUSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">		</span><span class="NAME">pit.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xC2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">RAMClient.asSignedInteger</span><span class="PUNC">(</span><span class="NAME">this.maxRAPDUSize</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">pit.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 81</span> 
<span class='line'> 82</span> 
<span class='line'> 83</span> 
<span class='line'> 84</span> </span><span class="COMM">/**
<span class='line'> 85</span>  * Set a notification listener.
<span class='line'> 86</span>  *
<span class='line'> 87</span>  * The listener object must implement a notificationReceived() method that
<span class='line'> 88</span>  * receives the three parameter id, msg and ttc.
<span class='line'> 89</span>  *
<span class='line'> 90</span>  * @param {Object} the listener object implementing notificationReceived()
<span class='line'> 91</span>  */</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="NAME">RAMClient.prototype.setNotificationListener</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">notificationListener</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="NAME">this.notificationListener</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">notificationListener</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 95</span> 
<span class='line'> 96</span> 
<span class='line'> 97</span> 
<span class='line'> 98</span> </span><span class="COMM">/**
<span class='line'> 99</span>  * Set a limiting number of APDUs
<span class='line'>100</span>  *
<span class='line'>101</span>  * This is helpful for testing to intercept processing after a certain number
<span class='line'>102</span>  * of APDUs (Default 100000).
<span class='line'>103</span>  *
<span class='line'>104</span>  * @param {Number} aPDULimit the maximum number of APDU processing in update()
<span class='line'>105</span>  * @param {Number} forceFailSW the final SW1/SW2
<span class='line'>106</span>  */</span><span class="WHIT">
<span class='line'>107</span> </span><span class="NAME">RAMClient.prototype.setAPDULimit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">aPDULimit</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceFailSW</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">	</span><span class="NAME">this.aPDULimit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">aPDULimit</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">	</span><span class="NAME">this.forceFailSW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">forceFailSW</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>111</span> 
<span class='line'>112</span> 
<span class='line'>113</span> 
<span class='line'>114</span> </span><span class="COMM">/**
<span class='line'>115</span>  * Set a limiting number of HTTP roundtrips
<span class='line'>116</span>  *
<span class='line'>117</span>  * This is helpful for testing to intercept processing after a certain number
<span class='line'>118</span>  * of HTTP roundtrips (Default 100000).
<span class='line'>119</span>  *
<span class='line'>120</span>  * @param {Number} aPDULimit the maximum number of APDU processing in update()
<span class='line'>121</span>  * @param {Number} forceFailSW the final SW1/SW2
<span class='line'>122</span>  */</span><span class="WHIT">
<span class='line'>123</span> </span><span class="NAME">RAMClient.prototype.setHTTPLimit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">httplimit</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="NAME">this.httplimit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">httplimit</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>126</span> 
<span class='line'>127</span> 
<span class='line'>128</span> 
<span class='line'>129</span> </span><span class="COMM">/**
<span class='line'>130</span>  * Set a maximum command and response APDU size
<span class='line'>131</span>  *
<span class='line'>132</span>  * @param {Number} maxCAPDUSize The maximum number of bytes in the command APDU
<span class='line'>133</span>  * @param {Number} maxRAPDUSize The maximum number of bytes in the response APDU
<span class='line'>134</span>  */</span><span class="WHIT">
<span class='line'>135</span> </span><span class="NAME">RAMClient.prototype.setMaxAPDUSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">maxCAPDUSize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxRAPDUSize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">	</span><span class="NAME">this.maxCAPDUSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maxCAPDUSize</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="NAME">this.maxRAPDUSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maxRAPDUSize</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>139</span> 
<span class='line'>140</span> 
<span class='line'>141</span> 
<span class='line'>142</span> </span><span class="COMM">/**
<span class='line'>143</span>  * @private
<span class='line'>144</span>  */</span><span class="WHIT">
<span class='line'>145</span> </span><span class="NAME">RAMClient.prototype.getURLConnection</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.connectionFactory</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">		</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.connectionFactory.getConnection</span><span class="PUNC">(</span><span class="NAME">this.url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.session</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">URLConnection</span><span class="PUNC">(</span><span class="NAME">this.url</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.session</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>151</span> </span><span class="COMM">//			print(typeof(this.session));</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">			</span><span class="NAME">c.addHeaderField</span><span class="PUNC">(</span><span class="STRN">"Cookie"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.session</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="NAME">c.addHeaderField</span><span class="PUNC">(</span><span class="STRN">"Content-Type"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"application/org.openscdp-content-mgt-response;version=1.0"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>158</span> 
<span class='line'>159</span> 
<span class='line'>160</span> 
<span class='line'>161</span> </span><span class="COMM">/**
<span class='line'>162</span>  * @private
<span class='line'>163</span>  */</span><span class="WHIT">
<span class='line'>164</span> </span><span class="NAME">RAMClient.prototype.initialConnect</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getURLConnection</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">atr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.getATR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.encodeInitiation</span><span class="PUNC">(</span><span class="NAME">atr.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c.postBinary</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> 
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cookie</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c.getHeaderField</span><span class="PUNC">(</span><span class="STRN">"Set-Cookie"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cookie</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>172</span> </span><span class="COMM">//		print(cookie);</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">		</span><span class="NAME">this.session</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cookie</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="NAME">this.httpCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c.responseCode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cst</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>179</span> 
<span class='line'>180</span> 
<span class='line'>181</span> 
<span class='line'>182</span> </span><span class="COMM">/**
<span class='line'>183</span>  * @private
<span class='line'>184</span>  */</span><span class="WHIT">
<span class='line'>185</span> </span><span class="NAME">RAMClient.prototype.next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">rst</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getURLConnection</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c.postBinary</span><span class="PUNC">(</span><span class="NAME">rst</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> 
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="NAME">this.httpCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c.responseCode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cst</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>192</span> 
<span class='line'>193</span> 
<span class='line'>194</span> 
<span class='line'>195</span> </span><span class="COMM">/**
<span class='line'>196</span>  * @private
<span class='line'>197</span>  */</span><span class="WHIT">
<span class='line'>198</span> </span><span class="NAME">RAMClient.prototype.processAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">capdu</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rapdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.plainApdu</span><span class="PUNC">(</span><span class="NAME">capdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="NAME">rapdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rapdu.concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="NAME">this.apduCount</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> 
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.apduCount</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.aPDULimit</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.forceFailSW</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">		</span><span class="NAME">rapdu</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.forceFailSW</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x23</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rapdu</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>208</span> 
<span class='line'>209</span> 
<span class='line'>210</span> 
<span class='line'>211</span> </span><span class="COMM">/**
<span class='line'>212</span>  * @private
<span class='line'>213</span>  */</span><span class="WHIT">
<span class='line'>214</span> </span><span class="NAME">RAMClient.prototype.processReset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">atr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.reset</span><span class="PUNC">(</span><span class="NAME">Card.RESET_COLD</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">atr</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Atr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">		</span><span class="NAME">atr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">atr.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xC0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">atr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>221</span> 
<span class='line'>222</span> 
<span class='line'>223</span> 
<span class='line'>224</span> </span><span class="COMM">/**
<span class='line'>225</span>  * @private
<span class='line'>226</span>  */</span><span class="WHIT">
<span class='line'>227</span> </span><span class="NAME">RAMClient.prototype.processNotify</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.notificationListener</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toSigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toString</span><span class="PUNC">(</span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ttc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">			</span><span class="NAME">ttc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">		</span><span class="NAME">this.notificationListener.notificationReceived</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ttc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Notify:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>240</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>241</span> 
<span class='line'>242</span> 
<span class='line'>243</span> 
<span class='line'>244</span> </span><span class="NAME">RAMClient.SW9000</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"9000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> 
<span class='line'>246</span> </span><span class="COMM">/**
<span class='line'>247</span>  * @private
<span class='line'>248</span>  */</span><span class="WHIT">
<span class='line'>249</span> </span><span class="NAME">RAMClient.prototype.process</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cst</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>250</span> </span><span class="COMM">//	print(cst);</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">cst</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> </span><span class="COMM">//	print(a);</span><span class="WHIT">
<span class='line'>253</span> 
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xAB</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> 
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> 
<span class='line'>259</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">a.elements</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">		</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">e.tag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">				</span><span class="COMM">// Abort processing of APDU sequence if SW != 9000</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">rsp.value.right</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">RAMClient.SW9000</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">					</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Abort sequence"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">					</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">					</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.elements</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">				</span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.processAPDU</span><span class="PUNC">(</span><span class="NAME">e.value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.returnAllSW</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">					</span><span class="NAME">rst.add</span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">				</span><span class="NAME">cnt</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">				</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0xC0</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">				</span><span class="NAME">rst.add</span><span class="PUNC">(</span><span class="NAME">this.processReset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">				</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0xE0</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">				</span><span class="NAME">this.processNotify</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">				</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>284</span> 
<span class='line'>285</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.returnAllSW</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">		</span><span class="NAME">rst.add</span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">	</span><span class="NAME">rst.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">RAMClient.asSignedInteger</span><span class="PUNC">(</span><span class="NAME">cnt</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>289</span> </span><span class="COMM">//	print(rst);</span><span class="WHIT">
<span class='line'>290</span> </span><span class="COMM">//	print(rst.getBytes());</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rst.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>293</span> 
<span class='line'>294</span> 
<span class='line'>295</span> 
<span class='line'>296</span> </span><span class="COMM">/**
<span class='line'>297</span>  * Close connection, e.g. after exception on the client side
<span class='line'>298</span>  *
<span class='line'>299</span>  * @param {Number} id the message id
<span class='line'>300</span>  * @param {String} msg the closing message
<span class='line'>301</span>  */</span><span class="WHIT">
<span class='line'>302</span> </span><span class="NAME">RAMClient.prototype.close</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">msg</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getURLConnection</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>304</span> 
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xAB</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xE1</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">				 </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">RAMClient.asSignedInteger</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">				 </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">msg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">			    </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">		      </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>311</span> 
<span class='line'>312</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.next</span><span class="PUNC">(</span><span class="NAME">rst</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.httpCode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.process</span><span class="PUNC">(</span><span class="NAME">cst</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">		</span><span class="NAME">cst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.next</span><span class="PUNC">(</span><span class="NAME">rst</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>317</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>318</span> 
<span class='line'>319</span> 
<span class='line'>320</span> 
<span class='line'>321</span> </span><span class="COMM">/**
<span class='line'>322</span>  * Perform update operation
<span class='line'>323</span>  */</span><span class="WHIT">
<span class='line'>324</span> </span><span class="NAME">RAMClient.prototype.update</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>325</span> </span><span class="WHIT">	</span><span class="NAME">this.httpCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>326</span> </span><span class="WHIT">	</span><span class="NAME">this.apduCount</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>327</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.initialConnect</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.httpCode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.httpcount</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.httplimit</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">		</span><span class="NAME">this.httpcount</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.process</span><span class="PUNC">(</span><span class="NAME">cst</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">		</span><span class="NAME">cst</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.next</span><span class="PUNC">(</span><span class="NAME">rst</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>333</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>334</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  SmartCard-HSM Support Scripts
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 2016 CardContact Systems GmbH
<span class='line'>  6</span>  * |'##> &lt;##'|  32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Online-CA Connection
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Creates a web service connector to access an online CA
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * @class Class implementing a CA web service connector
<span class='line'> 33</span>  * @constructor
<span class='line'> 34</span>  * @param {String} url the web service endpoint
<span class='line'> 35</span>  */</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">CAConnection</span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="WHIT">	</span><span class="NAME">this.url</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="WHIT">	</span><span class="NAME">this.soapcon</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SOAPConnection</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="WHIT">	</span><span class="NAME">this.verbose</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="WHIT">	</span><span class="NAME">this.lastReturnCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 42</span> 
<span class='line'> 43</span> </span><span class="NAME">exports.CAConnection</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CAConnection</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> 
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="COMM">/**
<span class='line'> 47</span>  * Get the last return code
<span class='line'> 48</span>  *
<span class='line'> 49</span>  * @returns the last return code received or null if none defined
<span class='line'> 50</span>  * @type String
<span class='line'> 51</span>  */</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="NAME">CAConnection.prototype.getLastReturnCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.lastReturnCode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 55</span> 
<span class='line'> 56</span> 
<span class='line'> 57</span> 
<span class='line'> 58</span> </span><span class="COMM">/**
<span class='line'> 59</span>  * Gets the last request
<span class='line'> 60</span>  *
<span class='line'> 61</span>  * @returns the last request
<span class='line'> 62</span>  * @type XML
<span class='line'> 63</span>  */</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="NAME">CAConnection.prototype.getLastRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.request</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> 
<span class='line'> 70</span> </span><span class="COMM">/**
<span class='line'> 71</span>  * Gets the last response
<span class='line'> 72</span>  *
<span class='line'> 73</span>  * @returns the last response
<span class='line'> 74</span>  * @type XML
<span class='line'> 75</span>  */</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="NAME">CAConnection.prototype.getLastResponse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.response</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 79</span> 
<span class='line'> 80</span> 
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="COMM">/**
<span class='line'> 83</span>  * Close the connector and release allocated resources
<span class='line'> 84</span>  */</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="NAME">CAConnection.prototype.close</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="NAME">this.soapcon.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 88</span> 
<span class='line'> 89</span> 
<span class='line'> 90</span> 
<span class='line'> 91</span> </span><span class="COMM">/**
<span class='line'> 92</span>  * Request a certificate from the CA using a web service
<span class='line'> 93</span>  *
<span class='line'> 94</span>  * @param {ByteString} certreq the certificate request
<span class='line'> 95</span>  * @param {String} messageID the messageID for asynchronous requests (optional)
<span class='line'> 96</span>  * @param {String} responseURL the URL to which the asynchronous response is send (optional)
<span class='line'> 97</span>  * @returns the new certificates
<span class='line'> 98</span>  * @type ByteString[]
<span class='line'> 99</span>  */</span><span class="WHIT">
<span class='line'>100</span> </span><span class="NAME">CAConnection.prototype.requestCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">certreq</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">devicecert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">commonName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eMailAddress</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">activationCode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> 
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="NAME">this.lastReturnCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> 
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">soapConnection</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SOAPConnection</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> 
<span class='line'>106</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ns</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Namespace</span><span class="PUNC">(</span><span class="STRN">"http://www.openscdp.org/CAService"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> 
<span class='line'>108</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">		</span><span class="PUNC">&lt;</span><span class="NAME">ns</span><span class="PUNC">:</span><span class="NAME">RequestCertificate</span><span class="WHIT"> </span><span class="NAME">xmlns</span><span class="PUNC">:</span><span class="NAME">ns</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="NAME">ns</span><span class="PUNC">}</span><span class="PUNC">></span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">			</span><span class="PUNC">&lt;</span><span class="NAME">CertificateSigningRequest</span><span class="PUNC">></span><span class="PUNC">{</span><span class="NAME">certreq.toString</span><span class="PUNC">(</span><span class="NAME">BASE64</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">&lt;</span><span class="REGX">/CertificateSigningRequest>
<span class='line'>111</span> 			&lt;DeviceCertificate>{devicecert.toString(BASE64)}&lt;/</span><span class="NAME">DeviceCertificate</span><span class="PUNC">></span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">			</span><span class="PUNC">&lt;</span><span class="NAME">CommonName</span><span class="PUNC">></span><span class="PUNC">{</span><span class="NAME">commonName</span><span class="PUNC">}</span><span class="PUNC">&lt;</span><span class="REGX">/CommonName>
<span class='line'>113</span> 			&lt;eMailAddress>{eMailAddress}&lt;/</span><span class="NAME">eMailAddress</span><span class="PUNC">></span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">		</span><span class="PUNC">&lt;</span><span class="REGX">/ns:RequestCertificate>
<span class='line'>115</span> 
<span class='line'>116</span> 	if (activationCode) {
<span class='line'>117</span> 		request.eMailAddress += &lt;ActivationCode>{activationCode}&lt;/</span><span class="NAME">ActivationCode</span><span class="PUNC">></span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>119</span> 
<span class='line'>120</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.verbose</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">request.toXMLString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>123</span> 
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="NAME">this.request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">request</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> 
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">response</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.soapcon.call</span><span class="PUNC">(</span><span class="NAME">this.url</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">request</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.verbose</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">response.toXMLString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"SOAP call to "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.url</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" failed : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"CAConnection"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.DEVICE_ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"RequestCertificate failed with : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>136</span> 
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="NAME">this.response</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">response</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> 
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> 
<span class='line'>141</span> </span><span class="WHIT">	</span><span class="NAME">this.lastReturnCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">response.ReturnCode.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> 
<span class='line'>143</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.lastReturnCode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"ok"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>146</span> 
<span class='line'>147</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="STRN">"Received certificates:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="NAME">each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">response.Certificates.Certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">BASE64</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">		</span><span class="NAME">certlist.push</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>153</span> 
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>156</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  SmartCard-HSM Support Scripts
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 2011-2016 CardContact Systems GmbH
<span class='line'>  6</span>  * |'##> &lt;##'|  Schuelerweg 38, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview SmartCard-HSM Crypto Provider
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM</span><span class="WHIT">				</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/SmartCardHSM'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSM</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/SmartCardHSM'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMSymmetricKeySpecGenerator</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/SmartCardHSM'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSMSymmetricKeySpecGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">HSMKeyStore</span><span class="WHIT">					</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/HSMKeyStore'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">HSMKeyStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> 
<span class='line'> 32</span> 
<span class='line'> 33</span> 
<span class='line'> 34</span> </span><span class="COMM">/**
<span class='line'> 35</span>  * Crypto Provider for accessing a SmartCard-HSM
<span class='line'> 36</span>  *
<span class='line'> 37</span>  * @param {SmartCardHSM} sc the associated SmartCard-HSM
<span class='line'> 38</span>  * @param {Number} slot the key domain slot. If undefined or -1 no key domain will be set
<span class='line'> 39</span>  */</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">CryptoProvider</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">slot</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.slot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">slot</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// the key domain slot</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">this.setSmartCardHSM</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="NAME">this.deleteIfExists</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 46</span> 
<span class='line'> 47</span> </span><span class="NAME">exports.CryptoProvider</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CryptoProvider</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> 
<span class='line'> 49</span> 
<span class='line'> 50</span> 
<span class='line'> 51</span> </span><span class="COMM">/**
<span class='line'> 52</span>  * Replace SmartCard-HSM
<span class='line'> 53</span>  *
<span class='line'> 54</span>  * @param {SmartCardHSM} sc the new SmartCard-HSM
<span class='line'> 55</span>  */</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="NAME">CryptoProvider.prototype.setSmartCardHSM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">	</span><span class="NAME">this.sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">	</span><span class="NAME">this.ks</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">HSMKeyStore</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 60</span> 
<span class='line'> 61</span> 
<span class='line'> 62</span> 
<span class='line'> 63</span> </span><span class="COMM">/**
<span class='line'> 64</span>  * Release this crypto provider
<span class='line'> 65</span>  *
<span class='line'> 66</span>  * The release() method shall be called if the provider is not used anymore
<span class='line'> 67</span>  * Place the release in the finally statement of a try/catch block
<span class='line'> 68</span>  */</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="NAME">CryptoProvider.prototype.release</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 71</span> 
<span class='line'> 72</span> 
<span class='line'> 73</span> 
<span class='line'> 74</span> </span><span class="COMM">/**
<span class='line'> 75</span>  * Get crypto object
<span class='line'> 76</span>  *
<span class='line'> 77</span>  * This method is part of the API.
<span class='line'> 78</span>  *
<span class='line'> 79</span>  * @type HSMCrypto
<span class='line'> 80</span>  * @return the HSMCrypto object
<span class='line'> 81</span>  */</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="NAME">CryptoProvider.prototype.getCrypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 88</span> 
<span class='line'> 89</span> 
<span class='line'> 90</span> 
<span class='line'> 91</span> </span><span class="COMM">/**
<span class='line'> 92</span>  * Get a handle for a private key stored on the SmartCard-HSM
<span class='line'> 93</span>  *
<span class='line'> 94</span>  * @param {String} label the label of the private key
<span class='line'> 95</span>  * @param {ByteString} blob the optional key blob
<span class='line'> 96</span>  * @returns the private key
<span class='line'> 97</span>  * @type Key
<span class='line'> 98</span>  */</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="NAME">CryptoProvider.prototype.getPrivateKeyByLabel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getPrivateKeyByLabel("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ks.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>105</span> 
<span class='line'>106</span> 
<span class='line'>107</span> 
<span class='line'>108</span> </span><span class="COMM">/**
<span class='line'>109</span>  * Get a handle for a private key stored on the SmartCard-HSM
<span class='line'>110</span>  *
<span class='line'>111</span>  * @param {String} label the label of the private key
<span class='line'>112</span>  * @param {ByteString} blob the optional key blob
<span class='line'>113</span>  * @returns the private key
<span class='line'>114</span>  * @type Key
<span class='line'>115</span>  */</span><span class="WHIT">
<span class='line'>116</span> </span><span class="NAME">CryptoProvider.prototype.getPrivateKeyByKeyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getPrivateKeyByKeyId("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ks.getKey</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>122</span> 
<span class='line'>123</span> 
<span class='line'>124</span> 
<span class='line'>125</span> </span><span class="COMM">/**
<span class='line'>126</span>  * Generate a key pair under the given label with the key characteristics defined in keyspec
<span class='line'>127</span>  *
<span class='line'>128</span>  * @param {String} label the label for this key
<span class='line'>129</span>  * @param {Key} the key specification
<span class='line'>130</span>  * @return an object containing the private key as property prk and the public key as property puk
<span class='line'>131</span>  * @type Object
<span class='line'>132</span>  */</span><span class="WHIT">
<span class='line'>133</span> </span><span class="NAME">CryptoProvider.prototype.generateKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"generateKeyPair("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> 
<span class='line'>136</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.ks.hasKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.deleteIfExists</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">			</span><span class="NAME">this.ks.deleteKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"A key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" does already exist"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyspec.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>149</span> 
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.slot</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"set key domain to "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.slot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">		</span><span class="NAME">kg.setKeyDomain</span><span class="PUNC">(</span><span class="NAME">this.slot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>154</span> 
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ks.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="NAME">this.ks.storeEndEntityCertificate</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> 
<span class='line'>158</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ks.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">req.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>162</span> 
<span class='line'>163</span> 
<span class='line'>164</span> 
<span class='line'>165</span> </span><span class="COMM">/**
<span class='line'>166</span>  * Delete private key
<span class='line'>167</span>  *
<span class='line'>168</span>  * @param {String} label the key label
<span class='line'>169</span>  */</span><span class="WHIT">
<span class='line'>170</span> </span><span class="NAME">CryptoProvider.prototype.deletePrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="NAME">this.ks.deleteKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> 
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="COMM">/**
<span class='line'>177</span>  * Generate a symmetric key under the given label
<span class='line'>178</span>  *
<span class='line'>179</span>  * @param {String} label the label for this key
<span class='line'>180</span>  * @param {Number} keySize either 128, 192 or 256
<span class='line'>181</span>  * @param {ByteString} allowedAlgorithms the optional list of allowed algorithms (0x10 for encryption, 0x11 for decryption, 0x18 for CMAC). By default all algorithms are allowed.
<span class='line'>182</span>  * @param {String} wrappingKeyLabel the label of the optional wrapping key
<span class='line'>183</span>  * @return the new key wrapped with the wrapping key
<span class='line'>184</span>  * @type ByteString
<span class='line'>185</span>  */</span><span class="WHIT">
<span class='line'>186</span> </span><span class="NAME">CryptoProvider.prototype.generateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keySize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedAlgorithms</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">wrappingKeyLabel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"generateKey("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keySize</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> 
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.ks.hasKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.deleteIfExists</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT">			</span><span class="NAME">this.ks.deleteKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"A key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" does already exist"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>196</span> 
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">allowedAlgorithms</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">allowedAlgorithms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"101118"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>200</span> 
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">(</span><span class="NAME">Crypto.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keySize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="NAME">kg.setAlgorithms</span><span class="PUNC">(</span><span class="NAME">allowedAlgorithms</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> 
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">wrappingKeyLabel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.ks.hasKey</span><span class="PUNC">(</span><span class="NAME">wrappingKeyLabel</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"A key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">wrappingKeyLabel</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" does already exist"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrappingKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ks.getKey</span><span class="PUNC">(</span><span class="NAME">wrappingKeyLabel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">		</span><span class="NAME">kg.wrappingKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">wrappingKey.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>211</span> 
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.slot</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"set key domain to "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.slot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">		</span><span class="NAME">kg.setKeyDomain</span><span class="PUNC">(</span><span class="NAME">this.slot</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>216</span> 
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.ks.generateKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kg</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">wrapbin</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>220</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  SmartCard-HSM Support Scripts
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview DKEK key wrapper
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Class supporting DKEK functions outside the SmartCard-HSM
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * @constructor
<span class='line'> 33</span>  * @param {Crypto} crypto the crypto provider
<span class='line'> 34</span>  */</span><span class="WHIT">
<span class='line'> 35</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">DKEK</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="WHIT">	</span><span class="NAME">this.dkek</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000000000000000000000000000000000000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 39</span> 
<span class='line'> 40</span> </span><span class="NAME">exports.DKEK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DKEK</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> 
<span class='line'> 42</span> 
<span class='line'> 43</span> 
<span class='line'> 44</span> </span><span class="COMM">/**
<span class='line'> 45</span>  * Import a DKEK share
<span class='line'> 46</span>  *
<span class='line'> 47</span>  * @param {ByteString} share a 32 byte share
<span class='line'> 48</span>  */</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="NAME">DKEK.prototype.importDKEKShare</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">share</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">share</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Share must be of type ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">share.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Share must be 32 byte long"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ndkek</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.dkek.xor</span><span class="PUNC">(</span><span class="NAME">share</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">	</span><span class="NAME">this.dkek.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">	</span><span class="NAME">this.dkek</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ndkek</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 56</span> 
<span class='line'> 57</span> 
<span class='line'> 58</span> 
<span class='line'> 59</span> </span><span class="COMM">/**
<span class='line'> 60</span>  * Zeroize DKEK
<span class='line'> 61</span>  *
<span class='line'> 62</span>  */</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="NAME">DKEK.prototype.clear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="NAME">this.dkek.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 66</span> 
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="COMM">/**
<span class='line'> 70</span>  * Return the Key Check Value (KCV) of the internal DKEK
<span class='line'> 71</span>  *
<span class='line'> 72</span>  * @type ByteString
<span class='line'> 73</span>  * @return the KCV
<span class='line'> 74</span>  */</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="NAME">DKEK.prototype.getKCV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.dkek</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 78</span> 
<span class='line'> 79</span> 
<span class='line'> 80</span> 
<span class='line'> 81</span> </span><span class="COMM">/**
<span class='line'> 82</span>  * Derive the encryption key from the DKEK
<span class='line'> 83</span>  *
<span class='line'> 84</span>  * @type ByteString
<span class='line'> 85</span>  * @return the encryption key
<span class='line'> 86</span>  */</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="NAME">DKEK.prototype.getKENC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kencval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.dkek.concat</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000001"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="NAME">kenc.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kencval</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 93</span> 
<span class='line'> 94</span> 
<span class='line'> 95</span> 
<span class='line'> 96</span> </span><span class="COMM">/**
<span class='line'> 97</span>  * Derive the message authentication key from the DKEK
<span class='line'> 98</span>  *
<span class='line'> 99</span>  * @type ByteString
<span class='line'>100</span>  * @return the message authentication key
<span class='line'>101</span>  */</span><span class="WHIT">
<span class='line'>102</span> </span><span class="NAME">DKEK.prototype.getKMAC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kmacval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.dkek.concat</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000002"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">	</span><span class="NAME">kmac.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kmacval</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>108</span> 
<span class='line'>109</span> 
<span class='line'>110</span> 
<span class='line'>111</span> </span><span class="COMM">/**
<span class='line'>112</span>  * Derive DKEK share encryption key from password
<span class='line'>113</span>  *
<span class='line'>114</span>  * @param {ByteString} password the password
<span class='line'>115</span>  * @type ByteString
<span class='line'>116</span>  * @return the derived key (32 Byte) concatenated with the IV (16 Byte)
<span class='line'>117</span>  */</span><span class="WHIT">
<span class='line'>118</span> </span><span class="NAME">DKEK.deriveDKEKShareKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">salt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">password</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> 
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyivbuff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="NUMB">48</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> 
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Derive DKEK share encryption key (Step "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" of 3)..."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d.concat</span><span class="PUNC">(</span><span class="NAME">password</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">		</span><span class="NAME">d.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">		</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nd</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> 
<span class='line'>130</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d.concat</span><span class="PUNC">(</span><span class="NAME">salt</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">		</span><span class="NAME">d.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">		</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nd</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> 
<span class='line'>134</span> </span><span class="WHIT">		</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">			</span><span class="COMM">// Try the fast hash available in scdp4j 3.8</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.MD5</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">10000000</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">			</span><span class="NAME">d.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">			</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">		</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">			</span><span class="COMM">// Fallback to slow variant</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">			</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">10000000</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">--</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">				</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.MD5</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">		</span><span class="NAME">keyivbuff.append</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>148</span> 
<span class='line'>149</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyivbuff.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="NAME">keyivbuff.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">keyiv</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>153</span> 
<span class='line'>154</span> 
<span class='line'>155</span> 
<span class='line'>156</span> </span><span class="COMM">/**
<span class='line'>157</span>  * Encrypt a DKEK share
<span class='line'>158</span>  *
<span class='line'>159</span>  * @param {ByteString} keyshare the key share
<span class='line'>160</span>  * @param {ByteString} password the password
<span class='line'>161</span>  * @type ByteString
<span class='line'>162</span>  * @return Encrypted DKEK share value
<span class='line'>163</span>  */</span><span class="WHIT">
<span class='line'>164</span> </span><span class="NAME">DKEK.encryptKeyShare</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyshare</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">password</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">keyshare</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument keyshare must be ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">keyshare.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument keyshare must be 32 bytes"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">password</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument password must be ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> 
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">salt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> 
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DKEK.deriveDKEKShareKey</span><span class="PUNC">(</span><span class="NAME">salt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">password</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="NAME">k.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyiv.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyiv.bytes</span><span class="PUNC">(</span><span class="NUMB">32</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="NAME">keyiv.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> 
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyshare.concat</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"10101010101010101010101010101010"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cipher</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="NAME">plain.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="NAME">k.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> 
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">blob</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"Salted__"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">salt</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">cipher</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">blob</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>187</span> 
<span class='line'>188</span> 
<span class='line'>189</span> 
<span class='line'>190</span> </span><span class="COMM">/**
<span class='line'>191</span>  * Decrypt a DKEK share
<span class='line'>192</span>  *
<span class='line'>193</span>  * @param {ByteString} keyshare the encrypted key share as read from the .pbe file
<span class='line'>194</span>  * @param {ByteString} password the password
<span class='line'>195</span>  * @type ByteString
<span class='line'>196</span>  * @return plain DKEK value
<span class='line'>197</span>  */</span><span class="WHIT">
<span class='line'>198</span> </span><span class="NAME">DKEK.decryptKeyShare</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyshare</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">password</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">password</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument password must be ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">keyshare.length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">64</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">keyshare.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="STRN">"Salted__"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Does not seem to be an encrypted key share"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>203</span> 
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">salt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyshare.bytes</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> 
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyiv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DKEK.deriveDKEKShareKey</span><span class="PUNC">(</span><span class="NAME">salt</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">password</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> 
<span class='line'>209</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="NAME">k.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyiv.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyiv.bytes</span><span class="PUNC">(</span><span class="NUMB">32</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="NAME">keyiv.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> 
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyshare.bytes</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="NAME">k.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> 
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"10101010101010101010101010101010"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">plain.right</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Decryption of DKEK failed. Wrong password ?"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>220</span> 
<span class='line'>221</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">val</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plain.left</span><span class="PUNC">(</span><span class="NUMB">32</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">	</span><span class="NAME">plain.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> 
<span class='line'>224</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">val</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>226</span> 
<span class='line'>227</span> 
<span class='line'>228</span> 
<span class='line'>229</span> </span><span class="COMM">/**
<span class='line'>230</span>  * Test DKEK share encryption / decryption
<span class='line'>231</span>  *
<span class='line'>232</span>  * @private
<span class='line'>233</span>  */</span><span class="WHIT">
<span class='line'>234</span> </span><span class="NAME">DKEK.testDKEK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dkek</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">32</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">password</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"Password"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DKEK.encryptKeyShare</span><span class="PUNC">(</span><span class="NAME">dkek</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">password</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DKEK.decryptKeyShare</span><span class="PUNC">(</span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">password</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dkek.equals</span><span class="PUNC">(</span><span class="NAME">plain</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Reference does not match"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>242</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>243</span> 
<span class='line'>244</span> 
<span class='line'>245</span> 
<span class='line'>246</span> </span><span class="COMM">/**
<span class='line'>247</span>  * Wrap AES key
<span class='line'>248</span>  *
<span class='line'>249</span>  * @param {Key} key the secret key
<span class='line'>250</span>  * @type ByteString
<span class='line'>251</span>  * @return the secret key wrapped with the DKEK
<span class='line'>252</span>  */</span><span class="WHIT">
<span class='line'>253</span> </span><span class="NAME">DKEK.prototype.encodeAESKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.getKCV</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> 
<span class='line'>257</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">key.getType</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Key.SECRET</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>258</span> 
<span class='line'>259</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NUMB">15</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>260</span> 
<span class='line'>261</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">daid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"2.16.840.1.101.3.4.1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">daid.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">daid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> 
<span class='line'>265</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">aaid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"10 11 18 99"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">aaid.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">aaid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> 
<span class='line'>269</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> 
<span class='line'>272</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="NUMB">256</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">this.crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> 
<span class='line'>275</span> </span><span class="WHIT">	</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">key.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">key.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> 
<span class='line'>278</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">unpadded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">unpadded.pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">	</span><span class="NAME">unpadded.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> 
<span class='line'>282</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">plain.length</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// pad() padds to 8 byte blocks, but we 16 byte blocks</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nplain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plain.concat</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">		</span><span class="NAME">plain.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">		</span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nplain</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>287</span> 
<span class='line'>288</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getKENC</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cipher</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">	</span><span class="NAME">kenc.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="NAME">plain.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> 
<span class='line'>294</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">cipher</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> 
<span class='line'>296</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getKMAC</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">	</span><span class="NAME">kmac.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>299</span> 
<span class='line'>300</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>302</span> 
<span class='line'>303</span> 
<span class='line'>304</span> 
<span class='line'>305</span> </span><span class="COMM">/**
<span class='line'>306</span>  * Wrap RSA or ECC key
<span class='line'>307</span>  *
<span class='line'>308</span>  * @param {Key} pri the private key in CRT format
<span class='line'>309</span>  * @param {Key} pub the public key
<span class='line'>310</span>  * @type Key
<span class='line'>311</span>  * @return the private key in private exponent / modulus format
<span class='line'>312</span>  */</span><span class="WHIT">
<span class='line'>313</span> </span><span class="NAME">DKEK.prototype.convertCRT2PEM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pri</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pub</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pub.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">n</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r.sub</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">	</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r.sub</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_Q</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">	</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r.biAdd</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pub.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>320</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e.modInverse</span><span class="PUNC">(</span><span class="NAME">r</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>321</span> 
<span class='line'>322</span> </span><span class="WHIT">	</span><span class="COMM">// Strip leading zero in private exponent</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">		</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>325</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>326</span> 
<span class='line'>327</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">	</span><span class="NAME">nk.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">	</span><span class="NAME">nk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">	</span><span class="NAME">nk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">nk</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>332</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>333</span> 
<span class='line'>334</span> 
<span class='line'>335</span> 
<span class='line'>336</span> </span><span class="COMM">/**
<span class='line'>337</span>  * Wrap RSA or ECC key
<span class='line'>338</span>  *
<span class='line'>339</span>  * @param {Key} pri the private key
<span class='line'>340</span>  * @param {Key} pub the public key
<span class='line'>341</span>  * @type ByteString
<span class='line'>342</span>  * @return the private key wrapped with the DKEK
<span class='line'>343</span>  */</span><span class="WHIT">
<span class='line'>344</span> </span><span class="NAME">DKEK.prototype.encodeKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pri</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pub</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.getKCV</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>347</span> 
<span class='line'>348</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mod</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pub.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mod</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">		</span><span class="COMM">// Convert RSA keys larger than 2048 bit and in CRT format</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">mod.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">			</span><span class="NAME">pri</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.convertCRT2PEM</span><span class="PUNC">(</span><span class="NAME">pri</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pub</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>355</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NUMB">6</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-v1-5-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NUMB">12</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>364</span> 
<span class='line'>365</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">algo.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">algo</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>367</span> 
<span class='line'>368</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>371</span> 
<span class='line'>372</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="NUMB">4096</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">	</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">this.crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>374</span> 
<span class='line'>375</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pub.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">pub.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>377</span> 
<span class='line'>378</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>379</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_DP1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>380</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> 
<span class='line'>383</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_DQ1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>386</span> 
<span class='line'>387</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_P</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>388</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>389</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>390</span> 
<span class='line'>391</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_PQ</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>392</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>393</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>394</span> 
<span class='line'>395</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.CRT_Q</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">			</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>403</span> 
<span class='line'>404</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pub.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>406</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>407</span> 
<span class='line'>408</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pub.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>409</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>411</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>412</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">pub.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>413</span> 
<span class='line'>414</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>417</span> 
<span class='line'>418</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>421</span> 
<span class='line'>422</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> 
<span class='line'>426</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>427</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>428</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>429</span> 
<span class='line'>430</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>431</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>433</span> 
<span class='line'>434</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pri.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_D</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>436</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>437</span> 
<span class='line'>438</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">pub.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">pub.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>439</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">c.length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>440</span> </span><span class="WHIT">		</span><span class="NAME">kb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>441</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>442</span> 
<span class='line'>443</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">unpadded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>444</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">unpadded.pad</span><span class="PUNC">(</span><span class="NAME">Crypto.ISO9797_METHOD_2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>445</span> </span><span class="WHIT">	</span><span class="NAME">unpadded.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>446</span> 
<span class='line'>447</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">plain.length</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// pad() padds to 8 byte blocks, but we 16 byte blocks</span><span class="WHIT">
<span class='line'>448</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nplain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plain.concat</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">		</span><span class="NAME">plain.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">		</span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nplain</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>451</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>452</span> </span><span class="WHIT">	</span><span class="COMM">// print(plain);</span><span class="WHIT">
<span class='line'>453</span> 
<span class='line'>454</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kenc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getKENC</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cipher</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">kenc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT">	</span><span class="NAME">kenc.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>458</span> </span><span class="WHIT">	</span><span class="NAME">plain.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>459</span> 
<span class='line'>460</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">cipher</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> 
<span class='line'>462</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kmac</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getKMAC</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>463</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">kmac</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>464</span> </span><span class="WHIT">	</span><span class="NAME">kmac.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.AES</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span> 
<span class='line'>466</span> </span><span class="COMM">//	this.dumpKeyBLOB(bb.toByteString());</span><span class="WHIT">
<span class='line'>467</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>468</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>469</span> 
<span class='line'>470</span> </span><span class="NAME">DKEK.prototype.encodeRSAKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DKEK.prototype.encodeKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>471</span> 
<span class='line'>472</span> 
<span class='line'>473</span> 
<span class='line'>474</span> </span><span class="NAME">DKEK.prototype.dumpKeyBLOB</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyblob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>475</span> </span><span class="WHIT">	</span><span class="COMM">// Verify MAC on last 16 byte of blob</span><span class="WHIT">
<span class='line'>476</span> 
<span class='line'>477</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">macok</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.verify</span><span class="PUNC">(</span><span class="NAME">this.getKMAC</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob.right</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>478</span> 
<span class='line'>479</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob.byteAt</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>480</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Values from key blob:"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"---------------------"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Checking the MAC      : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">macok</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"Passed"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"Failed"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>483</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"KCV                   : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"    [Must match the KCV of the DKEK for import]"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>484</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Key type              : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"    [5=RSA, 6=RSA-CRT, 12=ECC, 15=AES]"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>485</span> 
<span class='line'>486</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">9</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>487</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>488</span> 
<span class='line'>489</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">15</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyblob.byteAt</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x60</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>490</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Default Algorithm ID  : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")     [Wrong encoding in V3.0 to V3.2]"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>491</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>492</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Default Algorithm ID  : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">OID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")     [Default algorithm]"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>493</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>494</span> 
<span class='line'>495</span> </span><span class="WHIT">	</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>496</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>497</span> 
<span class='line'>498</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Allowed Algorithm IDs : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>499</span> 
<span class='line'>500</span> </span><span class="WHIT">	</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>502</span> 
<span class='line'>503</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Access Conditions     : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")    [Not used]"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>504</span> 
<span class='line'>505</span> </span><span class="WHIT">	</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>507</span> 
<span class='line'>508</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Key OID               : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")    [Not used]"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>509</span> 
<span class='line'>510</span> </span><span class="WHIT">	</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>511</span> 
<span class='line'>512</span> 
<span class='line'>513</span> </span><span class="WHIT">	</span><span class="COMM">// Decrypt key data</span><span class="WHIT">
<span class='line'>514</span> 
<span class='line'>515</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>516</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plainkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">this.getKENC</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>517</span> </span><span class="WHIT">	</span><span class="COMM">// print(plainkey);</span><span class="WHIT">
<span class='line'>518</span> 
<span class='line'>519</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Randomize             : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"    [Random data prepended at export]"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>520</span> 
<span class='line'>521</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Key size              : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"    [Key size in bits (ECC/RSA) or bytes (AES)]"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>523</span> 
<span class='line'>524</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>525</span> 
<span class='line'>526</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>527</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>528</span> 
<span class='line'>529</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Private Exponent      : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>530</span> 
<span class='line'>531</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>532</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>533</span> 
<span class='line'>534</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Modulus               : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>535</span> 
<span class='line'>536</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>537</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>538</span> 
<span class='line'>539</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Public Exponent       : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>540</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>541</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>542</span> 
<span class='line'>543</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"DP1 = d mod (p - 1)   : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>544</span> 
<span class='line'>545</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>546</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>547</span> 
<span class='line'>548</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"DQ1 = d mod (q - 1)   : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>549</span> 
<span class='line'>550</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>551</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>552</span> 
<span class='line'>553</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Prime factor p        : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>554</span> 
<span class='line'>555</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>556</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>557</span> 
<span class='line'>558</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"PQ = q - 1 mod p      : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>559</span> 
<span class='line'>560</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>562</span> 
<span class='line'>563</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Prime factor q        : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>564</span> 
<span class='line'>565</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>566</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>567</span> 
<span class='line'>568</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Modulus               : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>569</span> 
<span class='line'>570</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>572</span> 
<span class='line'>573</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Public Exponent       : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>574</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">12</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>575</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>576</span> 
<span class='line'>577</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"A                     : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>578</span> 
<span class='line'>579</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>580</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>581</span> 
<span class='line'>582</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"B                     : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>583</span> 
<span class='line'>584</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>585</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>586</span> 
<span class='line'>587</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Prime factor P        : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>588</span> 
<span class='line'>589</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>590</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>591</span> 
<span class='line'>592</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Order                 : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>593</span> 
<span class='line'>594</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>595</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>596</span> 
<span class='line'>597</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Generator G           : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>598</span> 
<span class='line'>599</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>600</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>601</span> 
<span class='line'>602</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Secret D              : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>603</span> 
<span class='line'>604</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>605</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>606</span> 
<span class='line'>607</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Public Point Q        : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>608</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">15</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>609</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Key Value             : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">plainkey.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>610</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>611</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown key type "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keytype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>612</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>613</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>614</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  SmartCard-HSM Support Scripts
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 2011-2016 CardContact Systems GmbH
<span class='line'>  6</span>  * |'##> &lt;##'|  Schuelerweg 38, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview SmartCard-HSM Crypto Provider for EAC-PKI
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT">					</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVC'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT">			</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PublicKeyReference'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM</span><span class="WHIT">			</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/SmartCardHSM'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSM</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="WHIT">			</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/SmartCardHSM'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/SmartCardHSM'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> 
<span class='line'> 33</span> 
<span class='line'> 34</span> 
<span class='line'> 35</span> </span><span class="COMM">/**
<span class='line'> 36</span>  * Crypto Provider for EAC-PKI
<span class='line'> 37</span>  *
<span class='line'> 38</span>  * @param {SmartCardHSM} sc the associated SmartCard-HSM
<span class='line'> 39</span>  */</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">EACCryptoProvider</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">sc.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="NAME">exports.EACCryptoProvider</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EACCryptoProvider</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> 
<span class='line'> 48</span> </span><span class="NAME">EACCryptoProvider.CVCCACERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xD0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="NAME">EACCryptoProvider.PATH_EF_FID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xD100</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> 
<span class='line'> 51</span> 
<span class='line'> 52</span> 
<span class='line'> 53</span> </span><span class="COMM">/**
<span class='line'> 54</span>  * Replace SmartCard-HSM
<span class='line'> 55</span>  *
<span class='line'> 56</span>  * @param {SmartCardHSM} sc the new SmartCard-HSM
<span class='line'> 57</span>  */</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="NAME">EACCryptoProvider.prototype.setSmartCardHSM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">	</span><span class="NAME">this.sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="NAME">sc.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 62</span> 
<span class='line'> 63</span> 
<span class='line'> 64</span> 
<span class='line'> 65</span> </span><span class="COMM">/**
<span class='line'> 66</span>  * Get crypto object
<span class='line'> 67</span>  *
<span class='line'> 68</span>  * This method is part of the API.
<span class='line'> 69</span>  *
<span class='line'> 70</span>  * @type HSMCrypto
<span class='line'> 71</span>  * @return the HSMCrypto object
<span class='line'> 72</span>  */</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="NAME">EACCryptoProvider.prototype.getCrypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 79</span> 
<span class='line'> 80</span> 
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="COMM">/**
<span class='line'> 83</span>  * Transform path and certificate holder into a label
<span class='line'> 84</span>  *
<span class='line'> 85</span>  * @param {String} path the path
<span class='line'> 86</span>  * @param {PublicKeyReference} chr the certificate holder reference
<span class='line'> 87</span>  * @type String
<span class='line'> 88</span>  * @return the key label
<span class='line'> 89</span>  */</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="NAME">EACCryptoProvider.path2label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr.getSequenceNo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 93</span> 
<span class='line'> 94</span> 
<span class='line'> 95</span> 
<span class='line'> 96</span> </span><span class="COMM">/**
<span class='line'> 97</span>  * Get a handle for a private key stored on the SmartCard-HSM
<span class='line'> 98</span>  *
<span class='line'> 99</span>  * This method is part of the API.
<span class='line'>100</span>  *
<span class='line'>101</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>102</span>  * @param {PublicKeyReference} chr the public key reference for this key
<span class='line'>103</span>  * @param {ByteString} blob the optional key blob
<span class='line'>104</span>  * @returns the private key or null if not found
<span class='line'>105</span>  * @type Key
<span class='line'>106</span>  */</span><span class="WHIT">
<span class='line'>107</span> </span><span class="NAME">EACCryptoProvider.prototype.getPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EACCryptoProvider.path2label</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Get private key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> 
<span class='line'>111</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>113</span> 
<span class='line'>114</span> 
<span class='line'>115</span> 
<span class='line'>116</span> </span><span class="COMM">/**
<span class='line'>117</span>  * Delete private key from SmartCard-HSM
<span class='line'>118</span>  *
<span class='line'>119</span>  * This method is part of the API.
<span class='line'>120</span>  *
<span class='line'>121</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>122</span>  * @param {PublicKeyReference} chr the public key reference for this key
<span class='line'>123</span>  */</span><span class="WHIT">
<span class='line'>124</span> </span><span class="NAME">EACCryptoProvider.prototype.deletePrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EACCryptoProvider.path2label</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Delete private key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>131</span> 
<span class='line'>132</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.KEYPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> 
<span class='line'>136</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">		</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> 
<span class='line'>140</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">		</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">		</span><span class="COMM">// Ignore</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>147</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>148</span> 
<span class='line'>149</span> 
<span class='line'>150</span> 
<span class='line'>151</span> </span><span class="COMM">/**
<span class='line'>152</span>  * Generate a certificate request using a private key in the SmartCard-HSM
<span class='line'>153</span>  *
<span class='line'>154</span>  * This method is part of the API.
<span class='line'>155</span>  *
<span class='line'>156</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
<span class='line'>157</span>  * @param {PublicKeyReference} currentchr the current CHR for the key in use
<span class='line'>158</span>  * @param {PublicKeyReference} nextchr the next available CHR
<span class='line'>159</span>  * @param {PublicKeyReference} car the CA at which this request is addressed
<span class='line'>160</span>  * @param {boolean} forceInitial force an initial request, even if a current certificate is available
<span class='line'>161</span>  * @param {boolean} signinitial sign with initial key (sequence = 00000)
<span class='line'>162</span>  * @param {Key} keyspec a key object containing key parameters (e.g. EC Curve)
<span class='line'>163</span>  * @param {ByteString} algo the terminal authentication algorithm object identifier
<span class='line'>164</span>  * @return the certificate request
<span class='line'>165</span>  * @type CVC
<span class='line'>166</span>  */</span><span class="WHIT">
<span class='line'>167</span> </span><span class="NAME">EACCryptoProvider.prototype.generateRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>168</span> 
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">EACCryptoProvider.path2label</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Generate private key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> 
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">			</span><span class="COMM">// CAR is not optional in SmartCard-HSM generated requests</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">		</span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">;</span><span class="WHIT">			</span><span class="COMM">// Use the CHR if no CAR defined.</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeKeyId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>182</span> 
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyspec.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyspec.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyspec.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">528</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">			</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">521</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildPrkDforECC</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildPrkDforRSA</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>198</span> 
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="NAME">kg.defaultAlgo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="NAME">kg.setInnerCAR</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="NAME">kg.setCHR</span><span class="PUNC">(</span><span class="NAME">nextchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"key domain slot "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"set key domain slot to "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">		</span><span class="NAME">kg.setKeyDomain</span><span class="PUNC">(</span><span class="NAME">this.id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kg.encode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"gakp cdata"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> 
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reqbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.generateAsymmetricKeyPair</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> 
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydesc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> 
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">signinitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">reqbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">		</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">a.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">reqbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>223</span> 
<span class='line'>224</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT">	</span><span class="NAME">hkey.setDescription</span><span class="PUNC">(</span><span class="NAME">keydesc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addKeyToMap</span><span class="PUNC">(</span><span class="NAME">hkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> 
<span class='line'>228</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>230</span> 
<span class='line'>231</span> 
<span class='line'>232</span> </span><span class="COMM">// ---- Functions below are used to synchronize Certificates between the certstore and SmartCard-HSM</span><span class="WHIT">
<span class='line'>233</span> 
<span class='line'>234</span> </span><span class="COMM">/**
<span class='line'>235</span>  * Read the systems path from the SmartCard-HSM
<span class='line'>236</span>  *
<span class='line'>237</span>  * The path is used to configure the namespace for the node to which the SmartCard-HSM is connected
<span class='line'>238</span>  */</span><span class="WHIT">
<span class='line'>239</span> </span><span class="NAME">EACCryptoProvider.prototype.getPathFromDevice</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">EACCryptoProvider.PATH_EF_FID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.sc.hasFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.readBinary</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">s.toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>247</span> 
<span class='line'>248</span> 
<span class='line'>249</span> 
<span class='line'>250</span> </span><span class="COMM">/**
<span class='line'>251</span>  * Enumerate keys on the SmartCard-HSM
<span class='line'>252</span>  *
<span class='line'>253</span>  * The method returns an array of objects with the following properties
<span class='line'>254</span>  *
<span class='line'>255</span>  * label       String - The key name on the device
<span class='line'>256</span>  * path        String - The label transformed into a PKI path
<span class='line'>257</span>  * chr         PublicKeyReference - the CHR for the key
<span class='line'>258</span>  * kid         Number - The key identifier on the device
<span class='line'>259</span>  * cvc         CVC - the card verifiable certificate or undefined if none on the device
<span class='line'>260</span>  *
<span class='line'>261</span>  * @type Object[]
<span class='line'>262</span>  * @return the list of keys on the device
<span class='line'>263</span>  */</span><span class="WHIT">
<span class='line'>264</span> </span><span class="NAME">EACCryptoProvider.prototype.enumerateKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> 
<span class='line'>267</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keylist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> 
<span class='line'>269</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="NAME">each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">label</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">label.indexOf</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">			</span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>273</span> 
<span class='line'>274</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">label.split</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NAME">pe.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> 
<span class='line'>277</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">pe.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">			</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">		</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr.getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> 
<span class='line'>283</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>285</span> 
<span class='line'>286</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc.hasFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.readBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">			</span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">certbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">		</span><span class="NAME">keylist.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>294</span> 
<span class='line'>295</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">keylist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>297</span> 
<span class='line'>298</span> 
<span class='line'>299</span> 
<span class='line'>300</span> </span><span class="COMM">/**
<span class='line'>301</span>  * Enumerate CVC certificates for CAs
<span class='line'>302</span>  *
<span class='line'>303</span>  * @type CVC[]
<span class='line'>304</span>  * @return the list of CA certificates on the device
<span class='line'>305</span>  */</span><span class="WHIT">
<span class='line'>306</span> </span><span class="NAME">EACCryptoProvider.prototype.enumerateCertificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fids</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.enumerateObjects</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>308</span> 
<span class='line'>309</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>310</span> 
<span class='line'>311</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">fids.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fids.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">EACCryptoProvider.CVCCACERTIFICATEPREFIX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fids.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">			</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.readBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">				</span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">certbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">				</span><span class="NAME">certlist.push</span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">			</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>320</span> </span><span class="WHIT">				</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Trying to read certificate : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>321</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>324</span> 
<span class='line'>325</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>326</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>327</span> 
<span class='line'>328</span> 
<span class='line'>329</span> 
<span class='line'>330</span> </span><span class="COMM">/**
<span class='line'>331</span>  * Delete CA certificates on device
<span class='line'>332</span>  */</span><span class="WHIT">
<span class='line'>333</span> </span><span class="NAME">EACCryptoProvider.prototype.deleteCertificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fids</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.enumerateObjects</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> 
<span class='line'>336</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">fids.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fids.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">EACCryptoProvider.CVCCACERTIFICATEPREFIX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fids.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">			</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>342</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>343</span> 
<span class='line'>344</span> 
<span class='line'>345</span> 
<span class='line'>346</span> </span><span class="COMM">/**
<span class='line'>347</span>  * Delete certificate on device for a given key
<span class='line'>348</span>  *
<span class='line'>349</span>  * @param {Object} k the key as returned by enumerateKeys()
<span class='line'>350</span>  */</span><span class="WHIT">
<span class='line'>351</span> </span><span class="NAME">EACCryptoProvider.prototype.deleteCertificateForKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">k.kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>354</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>355</span> 
<span class='line'>356</span> 
<span class='line'>357</span> 
<span class='line'>358</span> </span><span class="COMM">/**
<span class='line'>359</span>  * Export CA and EE certificates
<span class='line'>360</span>  *
<span class='line'>361</span>  * This method erases all existing CA certificates on the device first
<span class='line'>362</span>  *
<span class='line'>363</span>  * @param {String} path the PKI path to be exported
<span class='line'>364</span>  * @param {CVC[]} eecertlist the list of end-entity certificates
<span class='line'>365</span>  * @param {CVC[]} cacertlist the list of CA certificates
<span class='line'>366</span>  */</span><span class="WHIT">
<span class='line'>367</span> </span><span class="NAME">EACCryptoProvider.prototype.exportCertificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">eecertlist</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cacertlist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">	</span><span class="NAME">this.deleteCertificates</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>369</span> 
<span class='line'>370</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keylist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>371</span> 
<span class='line'>372</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">keylist.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keylist</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Find matching certificate for "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">k.label</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>376</span> 
<span class='line'>377</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">eecertlist.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">eecertlist</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> 
<span class='line'>380</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">k.chr</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">				</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Found matching certificate "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">k.kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>383</span> 
<span class='line'>384</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k.cvc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">k.cvc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="NAME">cvc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>386</span> </span><span class="WHIT">						</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>387</span> </span><span class="WHIT">						</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>388</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>389</span> </span><span class="WHIT">						</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate already on device - not saved"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>390</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>391</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>392</span> </span><span class="WHIT">					</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>393</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>394</span> 
<span class='line'>395</span> </span><span class="WHIT">				</span><span class="NAME">cnt</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>399</span> 
<span class='line'>400</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">cacertlist.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cacertlist</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">EACCryptoProvider.CVCCACERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>403</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Writing to "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" the certificate "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>404</span> </span><span class="WHIT">		</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cvc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">		</span><span class="NAME">cnt</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>406</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>407</span> 
<span class='line'>408</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Writing path "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>409</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">EACCryptoProvider.PATH_EF_FID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT"> 	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>411</span> </span><span class="WHIT">		</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>412</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">		</span><span class="COMM">// Ignore</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>416</span> 
<span class='line'>417</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>418</span> 
<span class='line'>419</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cnt</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>421</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview A card verifiable certificate store using a SmartCard-HSM as key store
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="COMM">// Imports</span><span class="WHIT">
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT">	 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PublicKeyReference'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT">					 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVC'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVCertificateStore</span><span class="WHIT">	 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVCertificateStore'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVCertificateStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM</span><span class="WHIT">		 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/SmartCardHSM'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSM</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="WHIT">		 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/SmartCardHSM'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 34</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVCCA</span><span class="WHIT">				 </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/CVCCA'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVCCA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 35</span> 
<span class='line'> 36</span> 
<span class='line'> 37</span> 
<span class='line'> 38</span> </span><span class="COMM">/**
<span class='line'> 39</span>  * Create a CV certificate store using a SmartCard-HSM as secure key store
<span class='line'> 40</span>  *
<span class='line'> 41</span>  * @class CV certificate store with SmartCard-HSM as secure key store
<span class='line'> 42</span>  * @constructor
<span class='line'> 43</span>  * @param {DAOFactory} daof the factory that can create data access objects for persistent information
<span class='line'> 44</span>  * @param {SmartCardHSM} sc the SmartCard-HSM access object
<span class='line'> 45</span>  */</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">HSMCVCertificateStore</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">CVCertificateStore.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">daof</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">		</span><span class="NAME">this.sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">		</span><span class="NAME">sc.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> </span><span class="NAME">HSMCVCertificateStore.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Object.create</span><span class="PUNC">(</span><span class="NAME">CVCertificateStore.prototype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="NAME">HSMCVCertificateStore.constructor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">HSMCVCertificateStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> 
<span class='line'> 57</span> </span><span class="NAME">exports.HSMCVCertificateStore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">HSMCVCertificateStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> 
<span class='line'> 59</span> 
<span class='line'> 60</span> 
<span class='line'> 61</span> </span><span class="NAME">HSMCVCertificateStore.prototype.setSmartCardHSM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="NAME">this.sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="NAME">sc.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 65</span> 
<span class='line'> 66</span> 
<span class='line'> 67</span> 
<span class='line'> 68</span> </span><span class="COMM">/**
<span class='line'> 69</span>  * Get crypto object
<span class='line'> 70</span>  *
<span class='line'> 71</span>  * @type HSMCrypto
<span class='line'> 72</span>  * @return the HSMCrypto object
<span class='line'> 73</span>  */</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="NAME">HSMCVCertificateStore.prototype.getCrypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 80</span> 
<span class='line'> 81</span> 
<span class='line'> 82</span> 
<span class='line'> 83</span> </span><span class="COMM">/**
<span class='line'> 84</span>  * Transform path and certificate holder into a label
<span class='line'> 85</span>  *
<span class='line'> 86</span>  * @param {String} path the path
<span class='line'> 87</span>  * @param {PublicKeyReference} chr the certificate holder reference
<span class='line'> 88</span>  * @type String
<span class='line'> 89</span>  * @return the key label
<span class='line'> 90</span>  */</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="NAME">HSMCVCertificateStore.path2label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">chr.getSequenceNo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 94</span> 
<span class='line'> 95</span> 
<span class='line'> 96</span> 
<span class='line'> 97</span> </span><span class="COMM">/**
<span class='line'> 98</span>  * Get a private key in the certificate store. Overrides method in CVCertificateStore.
<span class='line'> 99</span>  *
<span class='line'>100</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>101</span>  * @param {PublicKeyReference} chr the public key reference for this key
<span class='line'>102</span>  * @returns the private key or null if not found
<span class='line'>103</span>  * @type Key
<span class='line'>104</span>  */</span><span class="WHIT">
<span class='line'>105</span> </span><span class="NAME">HSMCVCertificateStore.prototype.getPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">HSMCVCertificateStore.path2label</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Get private key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>111</span> 
<span class='line'>112</span> 
<span class='line'>113</span> 
<span class='line'>114</span> </span><span class="COMM">/**
<span class='line'>115</span>  * Generate a certificate request using a private key in the SmartCard-HSM
<span class='line'>116</span>  *
<span class='line'>117</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1")
<span class='line'>118</span>  * @param {PublicKeyReference} car the CA at which this request is addressed
<span class='line'>119</span>  * @param {boolean} forceInitial force an initial request, even if a current certificate is available
<span class='line'>120</span>  * @param {boolean} signinitial sign with initial key (sequence = 00000)
<span class='line'>121</span>  * @param {Key} keyspec a key object containing key parameters (e.g. EC Curve)
<span class='line'>122</span>  * @param {ByteString} algo the terminal authentication algorithm object identifier
<span class='line'>123</span>  * @return the certificate request
<span class='line'>124</span>  * @type CVC
<span class='line'>125</span>  */</span><span class="WHIT">
<span class='line'>126</span> </span><span class="NAME">HSMCVCertificateStore.prototype.generateRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signinitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">countryseq</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>127</span> 
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="COMM">// Determine CHR</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCurrentCHR</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getNextCHR</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">countryseq</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">HSMCVCertificateStore.path2label</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>132</span> 
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">			</span><span class="COMM">// CAR is not optional in SmartCard-HSM generated requests</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">		</span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">;</span><span class="WHIT">			</span><span class="COMM">// Use the CHR if no CAR defined.</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>136</span> 
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">forceinitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curlabel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">HSMCVCertificateStore.path2label</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">curlabel</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMCVCertificateStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.DEVICE_ERROR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">curlabel</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">outerCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">currentchr</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>147</span> 
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeKeyId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>154</span> 
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyspec.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyspec.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"1:Keysize "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyspec.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">			</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"2:Keysize "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildGAKPwithECC</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">outerCAR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildPrkDforECC</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildGAKPwithRSA</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextchr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">outerCAR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildPrkDforRSA</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyspec.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>168</span> 
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reqbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.generateAsymmetricKeyPair</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> 
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydesc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">currentchr</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">forceinitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">signinitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">reqbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">		</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">a.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">reqbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>181</span> 
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="NAME">hkey.setDescription</span><span class="PUNC">(</span><span class="NAME">keydesc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addKeyToMap</span><span class="PUNC">(</span><span class="NAME">hkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> 
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>188</span> 
<span class='line'>189</span> 
<span class='line'>190</span> 
<span class='line'>191</span> </span><span class="COMM">/**
<span class='line'>192</span>  * Get a private key in the certificate store. Overrides method in CVCertificateStore.
<span class='line'>193</span>  *
<span class='line'>194</span>  * @param {String} path the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1/UTTERM")
<span class='line'>195</span>  * @param {PublicKeyReference} chr the public key reference for this key
<span class='line'>196</span>  * @returns the private key or null if not found
<span class='line'>197</span>  * @type Key
<span class='line'>198</span>  */</span><span class="WHIT">
<span class='line'>199</span> </span><span class="NAME">HSMCVCertificateStore.prototype.deletePrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">HSMCVCertificateStore.path2label</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Get private key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> 
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>205</span> 
<span class='line'>206</span> 
<span class='line'>207</span> 
<span class='line'>208</span> </span><span class="NAME">HSMCVCertificateStore.testPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSystem.mapFilename</span><span class="PUNC">(</span><span class="STRN">"testca"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPSystem.CWD</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> 
<span class='line'>210</span> </span><span class="NAME">HSMCVCertificateStore.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">card</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Card</span><span class="PUNC">(</span><span class="NAME">_scsh3.reader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> 
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM</span><span class="PUNC">(</span><span class="NAME">card</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="NAME">sc.verifyUserPIN</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"648219"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">HSMCVCertificateStore</span><span class="PUNC">(</span><span class="NAME">HSMCVCertificateStore.testPath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/cvca"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> 
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> 
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVCCA</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"/UTCVCA"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> 
<span class='line'>221</span> </span><span class="WHIT">	</span><span class="COMM">// Create a new request</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="STRN">"UTCVCA00000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> 
<span class='line'>224</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.generateRequest</span><span class="PUNC">(</span><span class="NAME">car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Request: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">req.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> 
<span class='line'>228</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">req.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> 
<span class='line'>230</span> </span><span class="WHIT">	</span><span class="COMM">// Create self-signed or link certificate based on request</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">certificateValidityDays</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">				   </span><span class="NAME">chatRoleOID</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-IS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">				   </span><span class="NAME">chatRights</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"E3"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">				   </span><span class="NAME">includeDomainParameter</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">				   </span><span class="NAME">extensions</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">				 </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.generateCertificate</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Certificate: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">cert.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> 
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="COMM">// Import certificate into store, making it the most current certificate</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">	</span><span class="NAME">cvca.storeCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> 
<span class='line'>244</span> </span><span class="WHIT">	</span><span class="COMM">// Generate additional self-signed root certificate</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="COMM">// This must be done after the link certificate has been imported</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">certificateValidityDays</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT">				   </span><span class="NAME">chatRoleOID</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-IS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">				   </span><span class="NAME">chatRights</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"E3"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">				   </span><span class="NAME">includeDomainParameter</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">				   </span><span class="NAME">extensions</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">				 </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvca.generateCertificate</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Certificate: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">cert.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> 
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="COMM">// Import certificate into store, making it the most current certificate</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">	</span><span class="NAME">cvca.storeCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>259</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  SmartCard-HSM Support Scripts
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Class implementing a key store for X.509 certificate and private keys stored on a SmartCard-HSM
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/eac/PublicKeyReference'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/SmartCardHSM'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSM</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/sc-hsm/SmartCardHSM'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/eac/CVC"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> 
<span class='line'> 32</span> 
<span class='line'> 33</span> 
<span class='line'> 34</span> </span><span class="COMM">/**
<span class='line'> 35</span>  * Create a simple key store front-end
<span class='line'> 36</span>  *
<span class='line'> 37</span>  * @class Class implementing some simple access functions to generate key pairs and store certificates
<span class='line'> 38</span>  * @param {SmartCardHSM} sc the SmartCard-HSM card service
<span class='line'> 39</span>  */</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">HSMKeyStore</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="STRN">"UTNULL00000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">this.car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="STRN">"UTNULL00000"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="NAME">exports.HSMKeyStore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">HSMKeyStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> 
<span class='line'> 48</span> 
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="COMM">/**
<span class='line'> 51</span>  * Generate a key pair
<span class='line'> 52</span>  *
<span class='line'> 53</span>  * @param {String} label the label under which the key pair shall be stored
<span class='line'> 54</span>  * @param {SmartCardHSMKeySpecGenerator} initialized key spec generator
<span class='line'> 55</span>  * @type CVC
<span class='line'> 56</span>  * @return the authenticated request
<span class='line'> 57</span>  */</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="NAME">HSMKeyStore.prototype.generateKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spec</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 59</span> 
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">spec.keytype</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">spec.keytype</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">Crypto.EC</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unsupported key type"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> 
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" does already exist"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeKeyId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reqbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.generateAsymmetricKeyPair</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spec.encode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">reqbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.determineKeyIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> 
<span class='line'> 74</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">spec.keytype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildPrkDforRSA</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spec.keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.EC</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildPrkDforECC</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spec.domainParameter.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unsupported key type"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 84</span> 
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydesc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> 
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="NAME">hkey.setDescription</span><span class="PUNC">(</span><span class="NAME">keydesc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addKeyToMap</span><span class="PUNC">(</span><span class="NAME">hkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 93</span> 
<span class='line'> 94</span> 
<span class='line'> 95</span> 
<span class='line'> 96</span> </span><span class="COMM">/**
<span class='line'> 97</span>  * Generate a symmetric key
<span class='line'> 98</span>  *
<span class='line'> 99</span>  * @param {String} label the label under which the key shall be stored
<span class='line'>100</span>  * @param {SmartCardHSMKeySpecGenerator} initialized key spec generator
<span class='line'>101</span>  * @type ByteString
<span class='line'>102</span>  * @return the new key wrapped with the symmetric key defined with SmartCardHSMKeySpecGenerator.setWrappingKey()
<span class='line'>103</span>  */</span><span class="WHIT">
<span class='line'>104</span> </span><span class="NAME">HSMKeyStore.prototype.generateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spec</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>105</span> 
<span class='line'>106</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">spec.keytype</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">Crypto.AES</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unsupported key type"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>109</span> 
<span class='line'>110</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" does already exist"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>114</span> 
<span class='line'>115</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeKeyId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>116</span> 
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">genalg</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">spec.keysize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">128</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">genalg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">192</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">genalg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xB1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">genalg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xB2</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unsupported key size"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>124</span> 
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.generateSymmetricKey</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">genalg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spec.encode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> 
<span class='line'>127</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">deralg</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">spec.algorithms.find</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.ALG_CMAC</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">		</span><span class="NAME">deralg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.ALG_CMAC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">spec.algorithms.find</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.ALG_DERIVE_SP800_56C</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">		</span><span class="NAME">deralg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.ALG_DERIVE_SP800_56C</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>133</span> 
<span class='line'>134</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">deralg</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">		</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.deriveSymmetricKey</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">deralg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"KeyCheckValue"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">		</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>140</span> 
<span class='line'>141</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildSKDforAES</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spec.keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> 
<span class='line'>143</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydesc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> 
<span class='line'>146</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">	</span><span class="NAME">hkey.setDescription</span><span class="PUNC">(</span><span class="NAME">keydesc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addKeyToMap</span><span class="PUNC">(</span><span class="NAME">hkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">wrapbin</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>151</span> 
<span class='line'>152</span> 
<span class='line'>153</span> 
<span class='line'>154</span> </span><span class="COMM">/**
<span class='line'>155</span>  * Generate a RSA key pair
<span class='line'>156</span>  *
<span class='line'>157</span>  * @param {String} label the label under which the key pair shall be stored
<span class='line'>158</span>  * @param {Number} keysize the key size in bits (1024, 1536 or 2048)
<span class='line'>159</span>  */</span><span class="WHIT">
<span class='line'>160</span> </span><span class="NAME">HSMKeyStore.prototype.generateRSAKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>161</span> 
<span class='line'>162</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeKeyId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>168</span> 
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-v1-5-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> 
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildGAKPwithRSA</span><span class="PUNC">(</span><span class="NAME">this.car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildPrkDforRSA</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reqbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.generateAsymmetricKeyPair</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydesc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">reqbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> 
<span class='line'>180</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="NAME">hkey.setDescription</span><span class="PUNC">(</span><span class="NAME">keydesc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addKeyToMap</span><span class="PUNC">(</span><span class="NAME">hkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>185</span> 
<span class='line'>186</span> 
<span class='line'>187</span> 
<span class='line'>188</span> </span><span class="COMM">/**
<span class='line'>189</span>  * Generate an ECDSA key pair
<span class='line'>190</span>  *
<span class='line'>191</span>  * @param {String} label the label under which the key pair shall be stored
<span class='line'>192</span>  * @param {String} curve the curve object identifier
<span class='line'>193</span>  */</span><span class="WHIT">
<span class='line'>194</span> </span><span class="NAME">HSMKeyStore.prototype.generateECCKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">curve</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeKeyId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>202</span> 
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> 
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="NAME">dp.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">curve</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> 
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildGAKPwithECC</span><span class="PUNC">(</span><span class="NAME">this.car</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> </span><span class="COMM">//	print("Keysize: " + dp.getSize());</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildPrkDforECC</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> 
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reqbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.generateAsymmetricKeyPair</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> 
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydesc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">reqbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> 
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="NAME">hkey.setDescription</span><span class="PUNC">(</span><span class="NAME">keydesc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addKeyToMap</span><span class="PUNC">(</span><span class="NAME">hkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> 
<span class='line'>222</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>224</span> 
<span class='line'>225</span> 
<span class='line'>226</span> 
<span class='line'>227</span> </span><span class="COMM">/**
<span class='line'>228</span>  * Import a key blob, meta data and certificate
<span class='line'>229</span>  *
<span class='line'>230</span>  * @param {ByteString} keywrap the binary key in SmartCard-HSM format
<span class='line'>231</span>  */</span><span class="WHIT">
<span class='line'>232</span> </span><span class="NAME">HSMKeyStore.prototype.importKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keywrap</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>233</span> 
<span class='line'>234</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">keywrap</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> 
<span class='line'>236</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeKeyId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> 
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Key identifier exhausted"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>242</span> 
<span class='line'>243</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.unwrapKey</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">wrap</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>244</span> 
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> 
<span class='line'>247</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">meta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">		</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">meta.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">		</span><span class="NAME">hkey.setDescription</span><span class="PUNC">(</span><span class="NAME">meta</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>252</span> 
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">a.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">		</span><span class="NAME">bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bin.concat</span><span class="PUNC">(</span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> 
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addKeyToMap</span><span class="PUNC">(</span><span class="NAME">hkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> 
<span class='line'>262</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>264</span> 
<span class='line'>265</span> 
<span class='line'>266</span> 
<span class='line'>267</span> </span><span class="COMM">/**
<span class='line'>268</span>  * Export a key blob, meta data and certificate
<span class='line'>269</span>  *
<span class='line'>270</span>  * @param {String/Number/Key} labelOrIdOrKey the label, id or object of the key to be removed
<span class='line'>271</span>  * @type ByteString
<span class='line'>272</span>  * @return the blob with key, meta data and certificate
<span class='line'>273</span>  */</span><span class="WHIT">
<span class='line'>274</span> </span><span class="NAME">HSMKeyStore.prototype.exportKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>275</span> 
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">		</span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getKey</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>280</span> 
<span class='line'>281</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not find a key with label or id "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>286</span> 
<span class='line'>287</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.wrapKey</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x04</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">wrap</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>289</span> 
<span class='line'>290</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">meta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.readBinary</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">		</span><span class="NAME">a.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">meta</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> 
<span class='line'>294</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc.hasFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.readBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>297</span> 
<span class='line'>298</span> </span><span class="WHIT">			</span><span class="COMM">// Copy list of CVCs</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">cert.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x67</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cert.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x7F</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.parseCertificateList</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">				</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">list.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">					</span><span class="NAME">a.add</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>304</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">cert.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x67</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">list.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">					</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Adding device and DICA certificate to export"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">devAutCert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.readBinary</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.C_DevAut</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.parseCertificateList</span><span class="PUNC">(</span><span class="NAME">devAutCert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">					</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">list.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">						</span><span class="NAME">a.add</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">				</span><span class="NAME">a.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Ignoring meta data or certificate: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>320</span> 
<span class='line'>321</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>322</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>323</span> 
<span class='line'>324</span> 
<span class='line'>325</span> 
<span class='line'>326</span> </span><span class="COMM">/**
<span class='line'>327</span>  * Import a RSA key blob
<span class='line'>328</span>  *
<span class='line'>329</span>  * @param {String} label the key label
<span class='line'>330</span>  * @param {ByteString} keyblob the binary key in SmartCard-HSM format
<span class='line'>331</span>  * @param {Number} keysize in bits
<span class='line'>332</span>  * @param {Number/ByteString} keyid the optional PKCS#15 key identifier.
<span class='line'>333</span>  * Default value is the next free key id of the SmartCard-HSM.
<span class='line'>334</span>  * @type SmartCardHSMKey
<span class='line'>335</span>  */</span><span class="WHIT">
<span class='line'>336</span> </span><span class="NAME">HSMKeyStore.prototype.importRSAKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob.byteAt</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyblob does not contain a RSA key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>341</span> 
<span class='line'>342</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>343</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>344</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"A key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" does already exist"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeKeyId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>347</span> 
<span class='line'>348</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.unwrapKey</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>349</span> 
<span class='line'>350</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT">		</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>353</span> 
<span class='line'>354</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildPrkDforRSA</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>355</span> 
<span class='line'>356</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydesc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>358</span> 
<span class='line'>359</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT">	</span><span class="NAME">hkey.setDescription</span><span class="PUNC">(</span><span class="NAME">keydesc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addKeyToMap</span><span class="PUNC">(</span><span class="NAME">hkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>362</span> 
<span class='line'>363</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>364</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>365</span> 
<span class='line'>366</span> 
<span class='line'>367</span> 
<span class='line'>368</span> </span><span class="COMM">/**
<span class='line'>369</span>  * Import an ECC key blob
<span class='line'>370</span>  *
<span class='line'>371</span>  * @param {String} label the key label
<span class='line'>372</span>  * @param {ByteString} keyblob the binary key in SmartCard-HSM format
<span class='line'>373</span>  * @param {Number} keysize in bits
<span class='line'>374</span>  * @param {Number/ByteString} keyid the optional PKCS#15 key identifier.
<span class='line'>375</span>  * Default value is the next free key id of the SmartCard-HSM.
<span class='line'>376</span>  * @type SmartCardHSMKey
<span class='line'>377</span>  */</span><span class="WHIT">
<span class='line'>378</span> </span><span class="NAME">HSMKeyStore.prototype.importECCKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>379</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob.byteAt</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>380</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keytype</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">12</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyblob does not contain an ECC key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>383</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"A key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" does already exist"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>386</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>387</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeKeyId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>388</span> 
<span class='line'>389</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.unwrapKey</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>390</span> 
<span class='line'>391</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>392</span> </span><span class="WHIT">		</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>393</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>394</span> 
<span class='line'>395</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildPrkDforECC</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>396</span> 
<span class='line'>397</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydesc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>399</span> 
<span class='line'>400</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">	</span><span class="NAME">hkey.setDescription</span><span class="PUNC">(</span><span class="NAME">keydesc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addKeyToMap</span><span class="PUNC">(</span><span class="NAME">hkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>403</span> 
<span class='line'>404</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>406</span> 
<span class='line'>407</span> 
<span class='line'>408</span> 
<span class='line'>409</span> </span><span class="COMM">/**
<span class='line'>410</span>  * Import an AES key blob
<span class='line'>411</span>  *
<span class='line'>412</span>  * @param {String} label the key label
<span class='line'>413</span>  * @param {ByteString} keyblob the binary key in SmartCard-HSM format
<span class='line'>414</span>  * @param {Number} keysize in bits
<span class='line'>415</span>  * @param {ByteString} keyid the PKCS#15 key id (CKA_ID)
<span class='line'>416</span>  * @type
<span class='line'>417</span>  */</span><span class="WHIT">
<span class='line'>418</span> </span><span class="NAME">HSMKeyStore.prototype.importAESKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>419</span> 
<span class='line'>420</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>421</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>422</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"A key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" does already exist"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeKeyId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> 
<span class='line'>426</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.unwrapKey</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>427</span> 
<span class='line'>428</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>429</span> </span><span class="WHIT">		</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>430</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>431</span> 
<span class='line'>432</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keydesc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildSKDforAES</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>433</span> 
<span class='line'>434</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydesc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>436</span> 
<span class='line'>437</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">this.sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>438</span> </span><span class="WHIT">	</span><span class="NAME">hkey.setDescription</span><span class="PUNC">(</span><span class="NAME">keydesc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>439</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addKeyToMap</span><span class="PUNC">(</span><span class="NAME">hkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>440</span> 
<span class='line'>441</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">hkey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>442</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>443</span> 
<span class='line'>444</span> 
<span class='line'>445</span> 
<span class='line'>446</span> </span><span class="COMM">/**
<span class='line'>447</span>  * Store certificate under given label
<span class='line'>448</span>  *
<span class='line'>449</span>  * @param {String/Number/Key} labelOrIdOrKey the label, id or object of the key for which the certificate should be stored
<span class='line'>450</span>  * @param {X509} cert the certificate
<span class='line'>451</span>  */</span><span class="WHIT">
<span class='line'>452</span> </span><span class="NAME">HSMKeyStore.prototype.storeEndEntityCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>453</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>454</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">		</span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getKey</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>457</span> 
<span class='line'>458</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>459</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>460</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>461</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not find a key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>462</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>463</span> 
<span class='line'>464</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>466</span> </span><span class="WHIT">		</span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>467</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>468</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>469</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>470</span> 
<span class='line'>471</span> 
<span class='line'>472</span> 
<span class='line'>473</span> </span><span class="COMM">/**
<span class='line'>474</span>  * Store CA certificate under given label
<span class='line'>475</span>  *
<span class='line'>476</span>  * @param {String} label the label under which the certificate shall be stored
<span class='line'>477</span>  * @param {X509} cert the certificate
<span class='line'>478</span>  */</span><span class="WHIT">
<span class='line'>479</span> </span><span class="NAME">HSMKeyStore.prototype.storeCACertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>480</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.enumerateCACertificates</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.caidmap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>483</span> </span><span class="WHIT">		</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.determineFreeCAId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>484</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>485</span> 
<span class='line'>486</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.CACERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>487</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>488</span> 
<span class='line'>489</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">descr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildCertDescription</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>490</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.CERTDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>491</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">descr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>492</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.addCACertificateToMap</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>493</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>494</span> 
<span class='line'>495</span> 
<span class='line'>496</span> 
<span class='line'>497</span> </span><span class="COMM">/**
<span class='line'>498</span>  * Delete CA certificate with given label
<span class='line'>499</span>  *
<span class='line'>500</span>  * @param {String} label the label of certificate to be removed
<span class='line'>501</span>  */</span><span class="WHIT">
<span class='line'>502</span> </span><span class="NAME">HSMKeyStore.prototype.deleteCACertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getCACertificate</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>504</span> 
<span class='line'>505</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not find a certificate with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>507</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>508</span> 
<span class='line'>509</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.CERTDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert.id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>510</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>511</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.CACERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert.id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>512</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>513</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.enumerateCACertificates</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>514</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>515</span> 
<span class='line'>516</span> 
<span class='line'>517</span> 
<span class='line'>518</span> </span><span class="COMM">/**
<span class='line'>519</span>  * Delete key and certificate with given label
<span class='line'>520</span>  *
<span class='line'>521</span>  * @param {String/Number/Key} labelOrIdOrKey the label, id or object of the key to be removed
<span class='line'>522</span>  */</span><span class="WHIT">
<span class='line'>523</span> </span><span class="NAME">HSMKeyStore.prototype.deleteKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>525</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>526</span> </span><span class="WHIT">		</span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getKey</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>527</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>528</span> 
<span class='line'>529</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>530</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>531</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>532</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not find a key with label "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>533</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>534</span> 
<span class='line'>535</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.KEYPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>536</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>537</span> 
<span class='line'>538</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>539</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>540</span> </span><span class="WHIT">		</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>541</span> 
<span class='line'>542</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>543</span> </span><span class="WHIT">		</span><span class="NAME">this.sc.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>544</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>545</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>546</span> </span><span class="WHIT">		</span><span class="COMM">// Ignore</span><span class="WHIT">
<span class='line'>547</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>548</span> 
<span class='line'>549</span> </span><span class="WHIT">	</span><span class="NAME">this.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>550</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>551</span> 
<span class='line'>552</span> 
<span class='line'>553</span> 
<span class='line'>554</span> </span><span class="COMM">/**
<span class='line'>555</span>  * Return list of keys
<span class='line'>556</span>  *
<span class='line'>557</span>  * @type String[]
<span class='line'>558</span>  * @return the list of key names
<span class='line'>559</span>  */</span><span class="WHIT">
<span class='line'>560</span> </span><span class="NAME">HSMKeyStore.prototype.enumerateKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>562</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>563</span> 
<span class='line'>564</span> 
<span class='line'>565</span> 
<span class='line'>566</span> </span><span class="COMM">/**
<span class='line'>567</span>  * Check if key with label exists
<span class='line'>568</span>  *
<span class='line'>569</span>  * @param {String / Number} the key label or id
<span class='line'>570</span>  * @type Boolean
<span class='line'>571</span>  * @return true if key exists
<span class='line'>572</span>  */</span><span class="WHIT">
<span class='line'>573</span> </span><span class="NAME">HSMKeyStore.prototype.hasKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">labelOrId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>574</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">labelOrId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>575</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>576</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>577</span> 
<span class='line'>578</span> 
<span class='line'>579</span> 
<span class='line'>580</span> </span><span class="COMM">/**
<span class='line'>581</span>  * Get key for given label
<span class='line'>582</span>  *
<span class='line'>583</span>  * @param {String / Number} the key label or id
<span class='line'>584</span>  * @type Key
<span class='line'>585</span>  * @return the key
<span class='line'>586</span>  */</span><span class="WHIT">
<span class='line'>587</span> </span><span class="NAME">HSMKeyStore.prototype.getKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">labelOrId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>588</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getKey</span><span class="PUNC">(</span><span class="NAME">labelOrId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>589</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>590</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"HSMKeyStore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not find a key with label/id "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">labelOrId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>591</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>592</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>593</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>594</span> 
<span class='line'>595</span> 
<span class='line'>596</span> 
<span class='line'>597</span> </span><span class="COMM">/**
<span class='line'>598</span>  * Check if key has a certificate
<span class='line'>599</span>  *
<span class='line'>600</span>  * @param {String/Number/Key} labelOrIdOrKey the certificate label, id or key
<span class='line'>601</span>  * @type Boolean
<span class='line'>602</span>  * @return true of a certificate is present
<span class='line'>603</span>  */</span><span class="WHIT">
<span class='line'>604</span> </span><span class="NAME">HSMKeyStore.prototype.hasCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>605</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>606</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>607</span> </span><span class="WHIT">		</span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getKey</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>608</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>609</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>610</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>611</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.hasFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>612</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>613</span> 
<span class='line'>614</span> 
<span class='line'>615</span> 
<span class='line'>616</span> </span><span class="COMM">/**
<span class='line'>617</span>  * Get raw certificate for given label
<span class='line'>618</span>  *
<span class='line'>619</span>  * @param {String/Number/Key} labelOrIdOrKey the certificate label, id or key
<span class='line'>620</span>  * @type ByteString
<span class='line'>621</span>  * @return the certificate
<span class='line'>622</span>  */</span><span class="WHIT">
<span class='line'>623</span> </span><span class="NAME">HSMKeyStore.prototype.getCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>624</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>625</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>626</span> </span><span class="WHIT">		</span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getKey</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>627</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>628</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>629</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>630</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.readBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>631</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">certbin</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>632</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>633</span> 
<span class='line'>634</span> 
<span class='line'>635</span> 
<span class='line'>636</span> </span><span class="COMM">/**
<span class='line'>637</span>  * Get certificate for given label
<span class='line'>638</span>  *
<span class='line'>639</span>  * @param {String/Number/Key} labelOrIdOrKey the certificate label, id or key
<span class='line'>640</span>  * @type X509
<span class='line'>641</span>  * @return the certificate
<span class='line'>642</span>  */</span><span class="WHIT">
<span class='line'>643</span> </span><span class="NAME">HSMKeyStore.prototype.getEndEntityCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>644</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCertificate</span><span class="PUNC">(</span><span class="NAME">labelOrIdOrKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>645</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509</span><span class="PUNC">(</span><span class="NAME">certbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>646</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>647</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  SmartCard-HSM Support Scripts
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview SmartCard-HSM Public Key Authentication Support
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/eac/CVC"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/eac/PublicKeyReference"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> </span><span class="COMM">/**
<span class='line'> 33</span>  * Manage Public Key Authentication
<span class='line'> 34</span>  *
<span class='line'> 35</span>  * @class Class providing support for public key authentication
<span class='line'> 36</span>  * @constructor
<span class='line'> 37</span>  * @param {SmartCardHSM} sc the SmartCard-HSM used as target for PKA
<span class='line'> 38</span>  * @param {ByteString} deviceId the device id as returned by getCHR().getBytes() for the device certificate
<span class='line'> 39</span>  */</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">ManagePKA</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">deviceId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 41</span> 
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">this.deviceId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">deviceId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="NAME">this.card</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc.card</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.numberOfPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> 		</span><span class="COMM">// Dummy</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">this.missingPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="NAME">this.requiredPublicKeysForAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">	</span><span class="NAME">this.authenticatedPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 51</span> 
<span class='line'> 52</span> </span><span class="NAME">exports.ManagePKA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ManagePKA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> 
<span class='line'> 55</span> 
<span class='line'> 56</span> </span><span class="COMM">/**
<span class='line'> 57</span>  * Update internal status
<span class='line'> 58</span>  * @private
<span class='line'> 59</span>  */</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="NAME">ManagePKA.prototype.updateStatus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">status</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">	</span><span class="NAME">this.numberOfPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">status.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="NAME">this.missingPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">status.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="NAME">this.requiredPublicKeysForAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">status.byteAt</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="NAME">this.authenticatedPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">status.byteAt</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 66</span> 
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> </span><span class="COMM">/**
<span class='line'> 70</span>  * Check if public key authentication is active for device
<span class='line'> 71</span>  *
<span class='line'> 72</span>  * @type boolean
<span class='line'> 73</span>  * @return true if supported and active
<span class='line'> 74</span>  */</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="NAME">ManagePKA.prototype.isActive</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x54</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">	</span><span class="NAME">this.updateStatus</span><span class="PUNC">(</span><span class="NAME">status</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 83</span> 
<span class='line'> 84</span> 
<span class='line'> 85</span> 
<span class='line'> 86</span> </span><span class="COMM">/**
<span class='line'> 87</span>  * Check if registered public keys can be enumerated
<span class='line'> 88</span>  *
<span class='line'> 89</span>  * @type boolean
<span class='line'> 90</span>  * @return true if enumeration is supported
<span class='line'> 91</span>  */</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="NAME">ManagePKA.prototype.canEnumeratePublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x54</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x9001</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A86</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x6A86</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 96</span> 
<span class='line'> 97</span> 
<span class='line'> 98</span> 
<span class='line'> 99</span> </span><span class="NAME">ManagePKA.KEY_PRESENT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> </span><span class="NAME">ManagePKA.KEY_NOT_FOUND</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="NAME">ManagePKA.KEY_ALREADY_AUTHENTICATED</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> 
<span class='line'>103</span> </span><span class="COMM">/**
<span class='line'>104</span>  * Check status of public key
<span class='line'>105</span>  *
<span class='line'>106</span>  * @param {PublicKeyReference} chr the public key reference under which the public key is registered
<span class='line'>107</span>  * @type Number
<span class='line'>108</span>  * @return ManagePKA.KEY_PRESENT if key is registered in SmartCard-HSM, ManagePKA.KEY_NOT_FOUND if not.
<span class='line'>109</span>  *         ManagePKA.KEY_ALREADY_AUTHENTICATED is returned if the public key has already been authenticated
<span class='line'>110</span>  */</span><span class="WHIT">
<span class='line'>111</span> </span><span class="NAME">ManagePKA.prototype.checkKeyStatus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">chr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukrefdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pukrefdo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>114</span> 
<span class='line'>115</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6985</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>116</span> 
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ManagePKA.KEY_PRESENT</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ManagePKA.KEY_NOT_FOUND</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x6985</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ManagePKA.KEY_ALREADY_AUTHENTICATED</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>122</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>123</span> 
<span class='line'>124</span> 
<span class='line'>125</span> 
<span class='line'>126</span> </span><span class="COMM">/**
<span class='line'>127</span>  * Perform authentication with source SmartCard-HSM and key on that device
<span class='line'>128</span>  *
<span class='line'>129</span>  * @param {SmartCardHSM} srcsc the SmartCard-HSM containing the private key for authentication
<span class='line'>130</span>  * @param {Key} key the private key
<span class='line'>131</span>  */</span><span class="WHIT">
<span class='line'>132</span> </span><span class="NAME">ManagePKA.prototype.performAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">srcsc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">challenge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> 
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.deviceId.concat</span><span class="PUNC">(</span><span class="NAME">challenge</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>136</span> 
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">srcsc.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> 
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.sign</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> 
<span class='line'>141</span> </span><span class="WHIT">	</span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CVC.unwrapSignature</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x54</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">	</span><span class="NAME">this.updateStatus</span><span class="PUNC">(</span><span class="NAME">status</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>147</span> 
<span class='line'>148</span> 
<span class='line'>149</span> 
<span class='line'>150</span> </span><span class="COMM">/**
<span class='line'>151</span>  * Get number of public keys (m)
<span class='line'>152</span>  *
<span class='line'>153</span>  * @type Number
<span class='line'>154</span>  * @return the number of public keys (m)
<span class='line'>155</span>  */</span><span class="WHIT">
<span class='line'>156</span> </span><span class="NAME">ManagePKA.prototype.getNumberOfPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.numberOfPublicKeys</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>159</span> 
<span class='line'>160</span> 
<span class='line'>161</span> 
<span class='line'>162</span> </span><span class="COMM">/**
<span class='line'>163</span>  * Get number of public keys missing for complete setup
<span class='line'>164</span>  *
<span class='line'>165</span>  * @type Number
<span class='line'>166</span>  * @return the number of public keys missing for complete setup
<span class='line'>167</span>  */</span><span class="WHIT">
<span class='line'>168</span> </span><span class="NAME">ManagePKA.prototype.getMissingPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.missingPublicKeys</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>171</span> 
<span class='line'>172</span> 
<span class='line'>173</span> 
<span class='line'>174</span> </span><span class="COMM">/**
<span class='line'>175</span>  * Get number of keys required for successfull authentication (n)
<span class='line'>176</span>  *
<span class='line'>177</span>  * @type Number
<span class='line'>178</span>  * @return the number of keys required for successfull authentication (n)
<span class='line'>179</span>  */</span><span class="WHIT">
<span class='line'>180</span> </span><span class="NAME">ManagePKA.prototype.getRequiredPublicKeysForAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.requiredPublicKeysForAuthentication</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>183</span> 
<span class='line'>184</span> 
<span class='line'>185</span> </span><span class="COMM">/**
<span class='line'>186</span>  * Get number of keys already authenticated in this session
<span class='line'>187</span>  *
<span class='line'>188</span>  * @type Number
<span class='line'>189</span>  * @return the number of keys already authenticated in this session
<span class='line'>190</span>  */</span><span class="WHIT">
<span class='line'>191</span> </span><span class="NAME">ManagePKA.prototype.getAuthenticatedPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.authenticatedPublicKeys</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>194</span> 
<span class='line'>195</span> 
<span class='line'>196</span> 
<span class='line'>197</span> </span><span class="COMM">/**
<span class='line'>198</span>  * Describe current status in human readable form
<span class='line'>199</span>  *
<span class='line'>200</span>  * @type String
<span class='line'>201</span>  * @return the status
<span class='line'>202</span>  */</span><span class="WHIT">
<span class='line'>203</span> </span><span class="NAME">ManagePKA.prototype.describeStatus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.missingPublicKeys</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.missingPublicKeys</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" missing key(s) in "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.requiredPublicKeysForAuthentication</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" of "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.numberOfPublicKeys</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" public key authentication"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.authenticatedPublicKeys</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" authenticated public key(s) in "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.requiredPublicKeysForAuthentication</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" of "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.numberOfPublicKeys</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" scheme"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>209</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>210</span> 
<span class='line'>211</span> 
<span class='line'>212</span> 
<span class='line'>213</span> </span><span class="COMM">/**
<span class='line'>214</span>  * Enumerate names (CHR) or registered public keys
<span class='line'>215</span>  *
<span class='line'>216</span>  * @type Object
<span class='line'>217</span>  * @return Object with property chr containing the PublicKeyReference and with property
<span class='line'>218</span>  *         status containing ManagePKA.KEY_PRESENT if a key is registered at that slot,
<span class='line'>219</span>  *         ManagePKA.KEY_NOT_FOUND if not. ManagePKA.KEY_ALREADY_AUTHENTICATED is returned
<span class='line'>220</span>  *         if the public key has already been authenticated.
<span class='line'>221</span>  */</span><span class="WHIT">
<span class='line'>222</span> </span><span class="NAME">ManagePKA.prototype.enumeratePublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> 
<span class='line'>225</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.numberOfPublicKeys</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x54</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x9001</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> 
<span class='line'>228</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">			</span><span class="NAME">list.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">status</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">ManagePKA.KEY_NOT_FOUND</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="NAME">bin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">				</span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ManagePKA.KEY_PRESENT</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">				</span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ManagePKA.KEY_ALREADY_AUTHENTICATED</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">			</span><span class="NAME">list.push</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">status</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">status</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>242</span> 
<span class='line'>243</span> 
<span class='line'>244</span> 
<span class='line'>245</span> </span><span class="COMM">/**
<span class='line'>246</span>  * Validate and register public key
<span class='line'>247</span>  *
<span class='line'>248</span>  * @param {CVC} pk public key in CSR format from card
<span class='line'>249</span>  * @param {CVC} devcert device certificate
<span class='line'>250</span>  * @param {CVC} dicacert device issuer certificate
<span class='line'>251</span>  * @param {Number} replace the id of the key to be replaced (0-based) or undefined
<span class='line'>252</span>  */</span><span class="WHIT">
<span class='line'>253</span> </span><span class="NAME">ManagePKA.prototype.registerPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">devcert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dicacert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">replace</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pk.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Authentication key must be a 256 bit EC key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>257</span> 
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.verifyCertificate</span><span class="PUNC">(</span><span class="NAME">dicacert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">	</span><span class="NAME">this.sc.verifyCertificate</span><span class="PUNC">(</span><span class="NAME">devcert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>260</span> 
<span class='line'>261</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pk.getOuterCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span> 
<span class='line'>263</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukrefdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pukrefdo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> 
<span class='line'>266</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> 
<span class='line'>268</span> </span><span class="WHIT">	</span><span class="COMM">// Extract value of 67</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TLVList</span><span class="PUNC">(</span><span class="NAME">pk.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">TLV.EMV</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tl.index</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.getValue</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> 
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">replace</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">replace</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>280</span> 
<span class='line'>281</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x54</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">	</span><span class="NAME">this.updateStatus</span><span class="PUNC">(</span><span class="NAME">status</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>284</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  SmartCard-HSM Support Scripts
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview PaperKey Encoder and Decoder
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Create a PaperKey encoder/decoder
<span class='line'> 31</span>  *
<span class='line'> 32</span>  * @class Encoder / Decoder for PaperKeys
<span class='line'> 33</span>  * @constructor
<span class='line'> 34</span>  */</span><span class="WHIT">
<span class='line'> 35</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="WHIT">	</span><span class="NAME">this.base</span><span class="WHIT">  </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="WHIT">	</span><span class="NAME">this.alpha</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ABCDEFGH!JKLMN*PQRSTUVWXYZabcdefghijk%mnopqrstuvwxyz0123456789+/"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 39</span> 
<span class='line'> 40</span> </span><span class="NAME">exports.PaperKeyEncoding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> 
<span class='line'> 42</span> </span><span class="NAME">PaperKeyEncoding.E_INV_LENGTH</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Input does not contain 12 characters"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="NAME">PaperKeyEncoding.E_WRONG_SEGMENT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Wrong segment number"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="NAME">PaperKeyEncoding.E_CHECK_FAILED</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Check value failed"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> 
<span class='line'> 47</span> 
<span class='line'> 48</span> </span><span class="COMM">/**
<span class='line'> 49</span>  * Encode an 8 byte segment in human readable form.
<span class='line'> 50</span>  *
<span class='line'> 51</span>  * Based on BASE64 encoding with visually confusable characters replaced.
<span class='line'> 52</span>  *
<span class='line'> 53</span>  * I is replaced by !
<span class='line'> 54</span>  * O is replaced by *
<span class='line'> 55</span>  * l is replaced by %
<span class='line'> 56</span>  *
<span class='line'> 57</span>  * A LUHN-64 character is appended.
<span class='line'> 58</span>  *
<span class='line'> 59</span>  * A segment identifier is encoded in 2 bit at the end of the encoded 64 bit string.
<span class='line'> 60</span>  *
<span class='line'> 61</span>  * @param {Number} segment
<span class='line'> 62</span>  * @param {ByteString} data
<span class='line'> 63</span>  * @type String
<span class='line'> 64</span>  * @return the encoded string
<span class='line'> 65</span>  */</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="NAME">PaperKeyEncoding.prototype.encodeSegment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">segment</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">segment</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">segment</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"segment must be a positive number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 70</span> 
<span class='line'> 71</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">data</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"data must be ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 74</span> 
<span class='line'> 75</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"data must be 8 byte"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 78</span> 
<span class='line'> 79</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> 
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="COMM">// Append segment number's less 2 bit</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">segment</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 83</span> 
<span class='line'> 84</span> </span><span class="COMM">//	print(data.toString(BASE64));</span><span class="WHIT">
<span class='line'> 85</span> 
<span class='line'> 86</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> 
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">18</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x3F</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> 
<span class='line'> 93</span> </span><span class="WHIT">		</span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="COMM">//		print("s = " + s + " cf = " + cf + " cs = " + cs);</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">		</span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 96</span> 
<span class='line'> 97</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.alpha.charAt</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> 
<span class='line'> 99</span> </span><span class="WHIT">		</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">12</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x3F</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> 
<span class='line'>101</span> </span><span class="WHIT">		</span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="COMM">//		print("s = " + s + " cf = " + cf + " cs = " + cs);</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">		</span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> 
<span class='line'>105</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.alpha.charAt</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span> 
<span class='line'>107</span> </span><span class="WHIT">		</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x3F</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="WHIT">		</span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="COMM">//		print("s = " + s + " cf = " + cf + " cs = " + cs);</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">		</span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> 
<span class='line'>113</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.alpha.charAt</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>114</span> 
<span class='line'>115</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>116</span> </span><span class="WHIT">			</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x3F</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>117</span> 
<span class='line'>118</span> </span><span class="WHIT">			</span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="COMM">//			print("s = " + s + " cf = " + cf + " cs = " + cs);</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">			</span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> 
<span class='line'>122</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.alpha.charAt</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>125</span> 
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.alpha.charAt</span><span class="PUNC">(</span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x3F</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> 
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>130</span> 
<span class='line'>131</span> 
<span class='line'>132</span> 
<span class='line'>133</span> </span><span class="COMM">/**
<span class='line'>134</span>  * Decode an 8 byte segment from 12 input characters.
<span class='line'>135</span>  *
<span class='line'>136</span>  * Characters not in the alphabet are ignored.
<span class='line'>137</span>  *
<span class='line'>138</span>  * Throws GPError with GPError.INVALID_LENGTH if the input does not contain at least 12 usable characters.
<span class='line'>139</span>  * Throws GPError with GPError.SIGNATURE_FAILED if the check digit based validation fails.
<span class='line'>140</span>  * Throws GPError with GPError.INVALID_DATA if the segment number does not match the expected value.
<span class='line'>141</span>  *
<span class='line'>142</span>  * @param {Number} segment
<span class='line'>143</span>  * @param {String} str the user input
<span class='line'>144</span>  * @type ByteString
<span class='line'>145</span>  * @return the 8 byte segment
<span class='line'>146</span>  */</span><span class="WHIT">
<span class='line'>147</span> </span><span class="NAME">PaperKeyEncoding.prototype.decodeSegment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">segment</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">segment</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">segment</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"segment must be a positive number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>151</span> 
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"str must be String"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>155</span> 
<span class='line'>156</span> </span><span class="COMM">//	print(str);</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> 
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> 
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">12</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">		</span><span class="KEYW">do</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ch</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">str.charAt</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ch</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_LENGTH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding.E_INV_LENGTH</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.alpha.indexOf</span><span class="PUNC">(</span><span class="NAME">ch</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.base.indexOf</span><span class="PUNC">(</span><span class="NAME">ch</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> 
<span class='line'>176</span> </span><span class="WHIT">		</span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="COMM">//		print("v = " + v + " cf = " + cf + " cs = " + cs);</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">		</span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> 
<span class='line'>180</span> </span><span class="WHIT">		</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> 
<span class='line'>182</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">			</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">			</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>187</span> 
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> 
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">cf</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x3F</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.SIGNATURE_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding.E_CHECK_FAILED</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>194</span> 
<span class='line'>195</span> </span><span class="COMM">//	print(bb);</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">bb.byteAt</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">segment</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding.E_WRONG_SEGMENT</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>199</span> 
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">left</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="NAME">bb.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>204</span> 
<span class='line'>205</span> 
<span class='line'>206</span> 
<span class='line'>207</span> </span><span class="COMM">/**
<span class='line'>208</span>  * Format a segment by splitting the input after each 4 characters and inserting " - "
<span class='line'>209</span>  *
<span class='line'>210</span>  * @param {String} str the unformatted string
<span class='line'>211</span>  * @type String
<span class='line'>212</span>  * @return the formatted string
<span class='line'>213</span>  */</span><span class="WHIT">
<span class='line'>214</span> </span><span class="NAME">PaperKeyEncoding.formatSegment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">str.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">			</span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">" - "</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">		</span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">str.substr</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">		</span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>226</span> 
<span class='line'>227</span> 
<span class='line'>228</span> 
<span class='line'>229</span> </span><span class="COMM">/**
<span class='line'>230</span>  * Dump a key
<span class='line'>231</span>  *
<span class='line'>232</span>  * @param {ByteString} data the key value (length must be a multiple of 8)
<span class='line'>233</span>  * @type String
<span class='line'>234</span>  * @return the formatted key with 3 groups of 4 digits per line
<span class='line'>235</span>  */</span><span class="WHIT">
<span class='line'>236</span> </span><span class="NAME">PaperKeyEncoding.dumpKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">data</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"data must be ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>240</span> 
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.length</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"data must be a multiple of 8 byte"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>244</span> 
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> 
<span class='line'>247</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">segments</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> 
<span class='line'>249</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">segments</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding.formatSegment</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>256</span> 
<span class='line'>257</span> 
<span class='line'>258</span> 
<span class='line'>259</span> </span><span class="NAME">PaperKeyEncoding.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> 
<span class='line'>262</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="STRN">"AAAAAAAAAAAA"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"All zero seg 0 encoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ref.equals</span><span class="PUNC">(</span><span class="NAME">res</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Decoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> 
<span class='line'>268</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="STRN">"AAAAAAAAAADG"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"All zero seg 3 encoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ref.equals</span><span class="PUNC">(</span><span class="NAME">res</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Decoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> 
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NUMB">7</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="STRN">"AAAAAAAAAADG"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"All zero seg 7 encoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> 
<span class='line'>276</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Did not detect wrong segment"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">e.error</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Must be GPError.INVALID_DATA"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">e.message</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding.E_WRONG_SEGMENT</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Must be PaperKeyEncoding.E_WRONG_SEGMENT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>284</span> 
<span class='line'>285</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">7</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"AAAAAAAAAADA"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Did not detect wrong check digit"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">e.error</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">GPError.SIGNATURE_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Must be GPError.SIGNATURE_FAILED"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">e.message</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding.E_CHECK_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Must be PaperKeyEncoding.E_CHECK_FAILED"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>293</span> 
<span class='line'>294</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ref.not</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="STRN">"//////////8p"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"All one seg 0 encoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ref.equals</span><span class="PUNC">(</span><span class="NAME">res</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Decoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="STRN">"///////////v"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"All one seg 3 encoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ref.equals</span><span class="PUNC">(</span><span class="NAME">res</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Decoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>303</span> 
<span class='line'>304</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x04</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="STRN">"BAAAAAAAAAAC"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"First one encoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ref.equals</span><span class="PUNC">(</span><span class="NAME">res</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Decoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> 
<span class='line'>310</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x10</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="STRN">"ABAAAAAAAAAB"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Second one encoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ref.equals</span><span class="PUNC">(</span><span class="NAME">res</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Decoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> 
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0xFC</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="STRN">"/AAAAAAAAAA+"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"First max encoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>320</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ref.equals</span><span class="PUNC">(</span><span class="NAME">res</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Decoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>321</span> 
<span class='line'>322</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x03F0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ref</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="STRN">"A/AAAAAAAAA/"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Second max encoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>325</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>326</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">ref.equals</span><span class="PUNC">(</span><span class="NAME">res</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Decoding failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>327</span> 
<span class='line'>328</span> 
<span class='line'>329</span> 
<span class='line'>330</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> 
<span class='line'>332</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">32</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">PaperKeyEncoding.dumpKey</span><span class="PUNC">(</span><span class="NAME">kv</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> 
<span class='line'>335</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PaperKeyEncoding.formatSegment</span><span class="PUNC">(</span><span class="NAME">pc.encodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kv</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Dialog.prompt</span><span class="PUNC">(</span><span class="STRN">"Enter segment "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">inp</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"User abort"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>343</span> </span><span class="WHIT">		</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>344</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">val</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pc.decodeSegment</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">kv.equals</span><span class="PUNC">(</span><span class="NAME">val</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Entered value does not match key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>347</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">		</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">			</span><span class="NAME">Dialog.prompt</span><span class="PUNC">(</span><span class="NAME">e.message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>353</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>354</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  SmartCard-HSM Support Scripts
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview SmartCard-HSM Card Service
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="COMM">// Imports</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/eac/CVC"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CVC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/eac/PublicKeyReference"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PublicKeyReference</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/eac/ChipAuthentication"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">ChipAuthentication</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKCS1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/pkcs/PKCS1"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKCS1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">DKEK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/sc-hsm/DKEK"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">DKEK</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Bitmap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/utils/Bitmap"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">Bitmap</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 34</span> 
<span class='line'> 35</span> 
<span class='line'> 36</span> 
<span class='line'> 37</span> </span><span class="COMM">/**
<span class='line'> 38</span>  * Create a SmartCard-HSM access object
<span class='line'> 39</span>  * @class Class implementing support for SmartCard-HSM access
<span class='line'> 40</span>  * @constructor
<span class='line'> 41</span>  * @param {Card} card the card object
<span class='line'> 42</span>  */</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM</span><span class="PUNC">(</span><span class="NAME">card</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="NAME">this.card</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">card</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.maxCAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1232</span><span class="PUNC">;</span><span class="WHIT">			</span><span class="COMM">// APDU buffer limit in JCOP 3</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">this.maxRAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1232</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="NAME">this.limitedAPDUTransport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// The APDU transport does not support the full response side</span><span class="WHIT">
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">card.readerName.indexOf</span><span class="PUNC">(</span><span class="STRN">"Secure Flash Card"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">		</span><span class="NAME">this.maxCAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">478</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">		</span><span class="NAME">this.maxRAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">506</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">		</span><span class="NAME">this.limitedAPDUTransport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">card.readerName.indexOf</span><span class="PUNC">(</span><span class="STRN">"REINER SCT cyberJack"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">		</span><span class="NAME">this.maxCAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1014</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">		</span><span class="NAME">this.maxRAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1014</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">		</span><span class="NAME">this.limitedAPDUTransport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">card.readerName.indexOf</span><span class="PUNC">(</span><span class="STRN">"ACS APG8201"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">		</span><span class="NAME">this.maxCAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1141</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">		</span><span class="NAME">this.maxRAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1141</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">		</span><span class="NAME">this.limitedAPDUTransport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">card.readerName.indexOf</span><span class="PUNC">(</span><span class="STRN">"Gemalto IDBridge"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">		</span><span class="NAME">this.maxCAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">262</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">		</span><span class="NAME">this.maxRAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">499</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">		</span><span class="NAME">this.limitedAPDUTransport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 67</span> 
<span class='line'> 68</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.card.maxReaderCAPDU</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.maxReaderCAPDU</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.maxCAPDU</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT">			</span><span class="NAME">this.maxCAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.maxReaderCAPDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT">			</span><span class="NAME">this.limitedAPDUTransport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 74</span> 
<span class='line'> 75</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.card.maxReaderRAPDU</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.maxReaderRAPDU</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.maxRAPDU</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">			</span><span class="NAME">this.maxRAPDU</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.maxReaderRAPDU</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">			</span><span class="NAME">this.limitedAPDUTransport</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="COMM">// 9 Byte CLA|INS|P1|P2|LcEx||LeEx</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">	</span><span class="COMM">// 19 Byte SM overhead (Tag 85, 3 byte length, 1 byte padding indicator, tag 97 02 &lt;Le> and tag 8E 08 &lt;mac></span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="COMM">// 1 byte required for padding</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="NAME">this.maxCData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.maxCAPDU</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">9</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">19</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="COMM">//	print("maxCData=" + this.maxCData);</span><span class="WHIT">
<span class='line'> 87</span> 
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="COMM">// 19 Byte SM overhead (Tag 85, 3 byte length, 1 byte padding indicator, tag 99 02 SW1SW2 and tag 8E 08 &lt;mac></span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="COMM">// 2 byte SW1/SW2</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="COMM">// 1 byte required for padding</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">	</span><span class="NAME">this.maxRData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.maxRAPDU</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">18</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="COMM">//	print("maxRData=" + this.maxRData);</span><span class="WHIT">
<span class='line'> 93</span> 
<span class='line'> 94</span> </span><span class="WHIT">	</span><span class="NAME">this.useExternalHashInECDSA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// Disable hashing in card if affected by bug #93</span><span class="WHIT">
<span class='line'> 95</span> 
<span class='line'> 96</span> </span><span class="WHIT">	</span><span class="COMM">// Check if SmartCard-HSM is already selected and authenticated</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> 
<span class='line'> 99</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">		</span><span class="NAME">this.logout</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Select application</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>102</span> 
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="NAME">this.namemap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="NAME">this.idmap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> 
<span class='line'>107</span> </span><span class="NAME">exports.SmartCardHSM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> 
<span class='line'>109</span> 
<span class='line'>110</span> </span><span class="NAME">SmartCardHSM.C_DevAut</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"2F02"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>111</span> </span><span class="NAME">SmartCardHSM.EF_TokenInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"2F03"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> </span><span class="NAME">SmartCardHSM.EF_StaticTokenInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"CB00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>113</span> 
<span class='line'>114</span> </span><span class="NAME">SmartCardHSM.PrK_DevAut</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> </span><span class="NAME">SmartCardHSM.PIN_User</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>116</span> 
<span class='line'>117</span> </span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xC4</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="NAME">SmartCardHSM.KDDPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xC7</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="NAME">SmartCardHSM.CERTDPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xC8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="NAME">SmartCardHSM.DODPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xC9</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="NAME">SmartCardHSM.CACERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xCA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="NAME">SmartCardHSM.KEYMETAPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xCB</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// Changed in V2.3</span><span class="WHIT">
<span class='line'>123</span> </span><span class="NAME">SmartCardHSM.READONLYDATAPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xCB</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// Starting with V2.3</span><span class="WHIT">
<span class='line'>124</span> </span><span class="NAME">SmartCardHSM.KEYPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xCC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="NAME">SmartCardHSM.CONFIDENTIALDATAPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xCD</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> </span><span class="NAME">SmartCardHSM.EECERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xCE</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="NAME">SmartCardHSM.PUBLICDATAPREFIX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xCF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> 
<span class='line'>129</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> 
<span class='line'>131</span> </span><span class="COMM">// Symmetric</span><span class="WHIT">
<span class='line'>132</span> </span><span class="NAME">SmartCardHSM.ALG_CBC_ENC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x10</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="NAME">SmartCardHSM.ALG_CBC_DEC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x11</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> </span><span class="NAME">SmartCardHSM.ALG_CMAC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x18</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> 
<span class='line'>136</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_CBC_ENC</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CBC_ENC"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_CBC_DEC</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CBC_DEC"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_CMAC</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CMAC"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> 
<span class='line'>140</span> 
<span class='line'>141</span> </span><span class="COMM">// RSA Block</span><span class="WHIT">
<span class='line'>142</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_RAW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_DECRYPT_RAW</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x21</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>144</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_DECRYPT_V15</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_DECRYPT_OAEP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x23</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> 
<span class='line'>147</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_RAW</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_RAW"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_DECRYPT_RAW</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_DECRYPT_RAW"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_DECRYPT_V15</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_DECRYPT_V15"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_DECRYPT_OAEP</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_DECRYPT_OAEP"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span> 
<span class='line'>152</span> 
<span class='line'>153</span> </span><span class="COMM">// RSA Sign with hash and PKCS#1 V1.5</span><span class="WHIT">
<span class='line'>154</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_V15_SHA1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x31</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_V15_SHA256</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x33</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_V15_SHA512</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x35</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> 
<span class='line'>158</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_V15_SHA1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_V15_SHA1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_V15_SHA256</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_V15_SHA256"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_V15_SHA512</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_V15_SHA512"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> 
<span class='line'>162</span> 
<span class='line'>163</span> </span><span class="COMM">// RSA Sign with hash and PSS</span><span class="WHIT">
<span class='line'>164</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_PSS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_PSS_SHA1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x41</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_PSS_SHA256</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x43</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_PSS_SHA512</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x45</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> 
<span class='line'>169</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_PSS</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_PSS"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_PSS_SHA1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_PSS_SHA1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_PSS_SHA256</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_PSS_SHA256"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_RSA_SIGN_PSS_SHA512</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"RSA_PSS_SHA512"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> 
<span class='line'>175</span> </span><span class="COMM">// ECDSA</span><span class="WHIT">
<span class='line'>176</span> </span><span class="NAME">SmartCardHSM.ALG_ECDSA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x70</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="NAME">SmartCardHSM.ALG_ECDSA_SHA1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x71</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="NAME">SmartCardHSM.ALG_ECDSA_SHA224</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x72</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="NAME">SmartCardHSM.ALG_ECDSA_SHA256</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x73</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> </span><span class="NAME">SmartCardHSM.ALG_ECDSA_SHA384</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x74</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="NAME">SmartCardHSM.ALG_ECDSA_SHA512</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x75</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> 
<span class='line'>183</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_ECDSA</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ECDSA"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_ECDSA_SHA1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ECDSA_SHA1"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_ECDSA_SHA224</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ECDSA_SHA224"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_ECDSA_SHA256</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ECDSA_SHA256"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_ECDSA_SHA384</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ECDSA_SHA384"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_ECDSA_SHA512</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ECDSA_SHA512"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> 
<span class='line'>190</span> 
<span class='line'>191</span> </span><span class="COMM">// ECDH</span><span class="WHIT">
<span class='line'>192</span> </span><span class="NAME">SmartCardHSM.ALG_ECDH</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="NAME">SmartCardHSM.ALG_ECDHAutPuk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="NAME">SmartCardHSM.ALG_ECDHXKEK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_ECDH</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ECDH"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_ECDHAutPuk</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ECDH_AUTPUK"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_ECDHXKEK</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ECDH_XKEK"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> 
<span class='line'>200</span> 
<span class='line'>201</span> </span><span class="COMM">// Wrap</span><span class="WHIT">
<span class='line'>202</span> </span><span class="NAME">SmartCardHSM.ALG_WRAP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x92</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="NAME">SmartCardHSM.ALG_UNWRAP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x93</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="NAME">SmartCardHSM.ALG_REPLACE</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x94</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> 
<span class='line'>206</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_WRAP</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"WRAP"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_UNWRAP</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"UNWRAP"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_REPLACE</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"REPLACE"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> 
<span class='line'>210</span> 
<span class='line'>211</span> </span><span class="COMM">// Derive</span><span class="WHIT">
<span class='line'>212</span> </span><span class="NAME">SmartCardHSM.ALG_DERIVE_EC_KEY</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x98</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> </span><span class="NAME">SmartCardHSM.ALG_DERIVE_SP800_56C</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x99</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> 
<span class='line'>215</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_DERIVE_EC_KEY</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"DERIVE_EC"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_DERIVE_SP800_56C</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"DERIVE_SP800_56C"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> 
<span class='line'>218</span> 
<span class='line'>219</span> </span><span class="NAME">SmartCardHSM.ALG_SIGN_DEFAULT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_SIGN_DEFAULT</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"SIGN_DEFAULT"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> 
<span class='line'>222</span> 
<span class='line'>223</span> </span><span class="COMM">// Key Generation</span><span class="WHIT">
<span class='line'>224</span> </span><span class="NAME">SmartCardHSM.ALG_GENERATE_AES128</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xB0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> </span><span class="NAME">SmartCardHSM.ALG_GENERATE_AES192</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xB1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span><span class="NAME">SmartCardHSM.ALG_GENERATE_AES256</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0xB2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> 
<span class='line'>228</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_GENERATE_AES128</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"GENERATE_AES128"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_GENERATE_AES192</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"GENERATE_AES192"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">SmartCardHSM.ALG_GENERATE_AES256</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"GENERATE_AES256"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>231</span> 
<span class='line'>232</span> 
<span class='line'>233</span> </span><span class="NAME">SmartCardHSM.ALGOMAP</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.ALGORITHMS.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">		</span><span class="NAME">SmartCardHSM.ALGOMAP</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>239</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>240</span> 
<span class='line'>241</span> 
<span class='line'>242</span> </span><span class="NAME">SmartCardHSM.rootCerts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">	</span><span class="NAME">DESRCACC100001</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"7F218201B47F4E82016C5F290100420E44455352434143433130303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641046D025A8026CDBA245F10DF1B72E9880FFF746DAB40A43A3D5C6BEBF27707C30F6DEA72430EE3287B0665C1EAA6EAA4FA26C46303001983F82BD1AA31E03DA0628701015F200E44455352434143433130303030317F4C10060B2B0601040181C31F0301015301C05F25060102010100095F24060302010100085F37409DBB382B1711D2BAACB0C623D40C6267D0B52BA455C01F56333DC9554810B9B2878DAF9EC3ADA19C7B065D780D6C9C3C2ECEDFD78DEB18AF40778ADF89E861CA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">	</span><span class="NAME">UTSRCACC100001</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"7F218201B47F4E82016C5F290100420E55545352434143433130303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104A041FEB2FD116B2AD19CA6B7EACD71C9892F941BB88D67DCEEC92501F070011957E22122BA6C2CF5FF02936F482E35A6129CCBBA8E9383836D3106879C408EF08701015F200E55545352434143433130303030317F4C10060B2B0601040181C31F0301015301C05F25060102010100095F24060302010100085F3740914DD0FA00615C44048D1467435400423A4AD1BD37FD98D6DE84FD8037489582325C72956D4FDFABC6EDBA48184A754F37F1BE5142DD1C27D66569308CE19AAF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>245</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>246</span> 
<span class='line'>247</span> </span><span class="NAME">SmartCardHSM.devAutPuk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="NAME">SmartCardHSM.devAutPuk.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>249</span> </span><span class="NAME">SmartCardHSM.devAutPuk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="NAME">SmartCardHSM.devAutPuk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"4C01EA36C5065FF47E8F0676A77CDCED6C8F745E6784F7807F5520124F81ED05"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>251</span> </span><span class="NAME">SmartCardHSM.devAutPuk.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"4112DCE471CA003442830A10C75B31F9BFADD60628F47131628C7254AD8B956A"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> 
<span class='line'>253</span> 
<span class='line'>254</span> 
<span class='line'>255</span> </span><span class="COMM">/**
<span class='line'>256</span>  * Remove Root Certificate of Development SRCA
<span class='line'>257</span>  *
<span class='line'>258</span>  * Always call this on a productive system
<span class='line'>259</span>  */</span><span class="WHIT">
<span class='line'>260</span> </span><span class="NAME">SmartCardHSM.disableUTSRCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">	</span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.rootCerts.UTSRCACC100001</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>263</span> 
<span class='line'>264</span> 
<span class='line'>265</span> 
<span class='line'>266</span> </span><span class="COMM">/**
<span class='line'>267</span>  * Set the list of trusted SRCA certificates
<span class='line'>268</span>  *
<span class='line'>269</span>  * @param {ByteString[]} srcalist the list of binary encoded SRCA certificates
<span class='line'>270</span>  */</span><span class="WHIT">
<span class='line'>271</span> </span><span class="NAME">SmartCardHSM.setTrustedSRCACertificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">srcalist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">	</span><span class="NAME">SmartCardHSM.rootCerts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">srcalist.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">srcalist</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Adding as trusted SRCA certificate : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">		</span><span class="NAME">SmartCardHSM.rootCerts</span><span class="PUNC">[</span><span class="NAME">cert.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>278</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>279</span> 
<span class='line'>280</span> 
<span class='line'>281</span> 
<span class='line'>282</span> </span><span class="COMM">/**
<span class='line'>283</span>  * Parse list of CVC in a binary blob
<span class='line'>284</span>  *
<span class='line'>285</span>  * @param {ByteString} a binary blob (e.g an EF) containing concatenated CVCs
<span class='line'>286</span>  * @type CVC[]
<span class='line'>287</span>  * @return the list of CVCs
<span class='line'>288</span>  */</span><span class="WHIT">
<span class='line'>289</span> </span><span class="NAME">SmartCardHSM.parseCertificateList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bin</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bin</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">a.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">		</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">			</span><span class="NAME">list.push</span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">		</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">			</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Index "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" is not a CVC"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">			</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>303</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>304</span> 
<span class='line'>305</span> 
<span class='line'>306</span> 
<span class='line'>307</span> </span><span class="COMM">/**
<span class='line'>308</span>  * Validate device certificate chain
<span class='line'>309</span>  *
<span class='line'>310</span>  * @param {Crypto} crypto the crypto provider to use
<span class='line'>311</span>  * @param {ByteString} devAutCert the device certificate chain read from EF.C_DevAut
<span class='line'>312</span>  * @type Key
<span class='line'>313</span>  * @return the device authentication public key
<span class='line'>314</span>  */</span><span class="WHIT">
<span class='line'>315</span> </span><span class="NAME">SmartCardHSM.validateCertificateChain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">devAutCert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="COMM">// Device device certificate</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">devAutCert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Device Certificate    : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> 
<span class='line'>320</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"DECA00001"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// CA used for development version up to 0.17</span><span class="WHIT">
<span class='line'>321</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.rootCerts.UTSRCACC100001</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Device certificate DECA00001 disabled"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>325</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cvc.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.devAutPuk</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>326</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Device certificate verification failed for CAR=DECA00001"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>327</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">devicecert</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">:</span><span class="NAME">cvc.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">:</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>332</span> 
<span class='line'>333</span> </span><span class="WHIT">	</span><span class="COMM">// Decode device issuer certificate</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">size</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">devAutCert.left</span><span class="PUNC">(</span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dica</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">(</span><span class="NAME">devAutCert.bytes</span><span class="PUNC">(</span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Device Issuer CA      : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dica</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>338</span> 
<span class='line'>339</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.rootCerts</span><span class="PUNC">[</span><span class="NAME">dica.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown or disabled root CA "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dica.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>343</span> 
<span class='line'>344</span> </span><span class="WHIT">	</span><span class="COMM">// Determine root certificateSmartCardHSM.rootCerts[dica.getCAR()]</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">srca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.rootCerts</span><span class="PUNC">[</span><span class="NAME">dica.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"SmartCard-HSM Root CA : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">srca</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>347</span> 
<span class='line'>348</span> </span><span class="WHIT">	</span><span class="COMM">// Validate chain</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">srcapuk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">srca.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">srca.getPublicKeyOID</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dica.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srcapuk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"DICA certificate not verified"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>355</span> 
<span class='line'>356</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dicapuk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dica.getPublicKey</span><span class="PUNC">(</span><span class="NAME">srcapuk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cvc.verifyWith</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dicapuk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Device certificate verification failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>361</span> 
<span class='line'>362</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">srca.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dica.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"/"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">srca</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">srca</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dica</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dica</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">devicecert</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">cvc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">:</span><span class="NAME">cvc.getPublicKey</span><span class="PUNC">(</span><span class="NAME">srcapuk</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">:</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>364</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>365</span> 
<span class='line'>366</span> 
<span class='line'>367</span> 
<span class='line'>368</span> </span><span class="COMM">/**
<span class='line'>369</span>  * Decode algorithm list and return string array with names
<span class='line'>370</span>  *
<span class='line'>371</span>  * @param {ByteString} list the algorithm list, e.g. as returned in the key meta data
<span class='line'>372</span>  * @type String[]
<span class='line'>373</span>  * @return the list of algorithm names
<span class='line'>374</span>  */</span><span class="WHIT">
<span class='line'>375</span> </span><span class="NAME">SmartCardHSM.decodeAlgorithmList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">list.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">		</span><span class="NAME">a.push</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.ALGORITHMS</span><span class="PUNC">[</span><span class="NAME">list.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>380</span> 
<span class='line'>381</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>383</span> 
<span class='line'>384</span> 
<span class='line'>385</span> 
<span class='line'>386</span> </span><span class="COMM">/**
<span class='line'>387</span>  * Parse and encode the algorithm list containing either algorithm ids or names
<span class='line'>388</span>  *
<span class='line'>389</span>  * @param {String | String[]} list the list of algorithms
<span class='line'>390</span>  * @type ByteString
<span class='line'>391</span>  * @return the algorithm list
<span class='line'>392</span>  */</span><span class="WHIT">
<span class='line'>393</span> </span><span class="NAME">SmartCardHSM.encodeAlgorithmList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>394</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>395</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">list.indexOf</span><span class="PUNC">(</span><span class="STRN">"."</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">			</span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">list.split</span><span class="PUNC">(</span><span class="STRN">"."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">			</span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">list.split</span><span class="PUNC">(</span><span class="STRN">","</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>401</span> 
<span class='line'>402</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>403</span> 
<span class='line'>404</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">list.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">trim</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>406</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">NaN</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>407</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>408</span> </span><span class="WHIT">			</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>409</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>411</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.ALGOMAP</span><span class="PUNC">[</span><span class="NAME">e.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>412</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">				</span><span class="NAME">print</span><span class="PUNC">(</span><span class="STRN">"Unknown keyword or number "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>419</span> 
<span class='line'>420</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>421</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>422</span> 
<span class='line'>423</span> 
<span class='line'>424</span> 
<span class='line'>425</span> </span><span class="COMM">/**
<span class='line'>426</span>  * Return a string describing the SmartCard-HSM Version
<span class='line'>427</span>  *
<span class='line'>428</span>  * @type String
<span class='line'>429</span>  * @return the version string
<span class='line'>430</span>  */</span><span class="WHIT">
<span class='line'>431</span> </span><span class="NAME">SmartCardHSM.prototype.getVersionInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.major</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"Version unknown"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>434</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>435</span> 
<span class='line'>436</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"Version "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.major</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"."</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.minor</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>437</span> 
<span class='line'>438</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.platform</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>439</span> </span><span class="WHIT">		</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">this.platform</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>440</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">" on JCOP"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>441</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">" Demo on JCOP"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>442</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">" on JCOP 2.4.1r3"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>443</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">" on JCOP 2.4.2r3"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>444</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">" on JCOP 2.4.2r1"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>445</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">" on JCOP 3"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>446</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">" on JCOP 4"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>447</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">" on JCOP 4.5"</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>448</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>451</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>452</span> 
<span class='line'>453</span> 
<span class='line'>454</span> 
<span class='line'>455</span> </span><span class="COMM">/**
<span class='line'>456</span>  * Return the native OCF SmartCardHSMCardService
<span class='line'>457</span>  *
<span class='line'>458</span>  * @type de.cardcontact.opencard.service.smartcardhsm.SmartCardHSMCardService
<span class='line'>459</span>  * @return the OCF SmartCardHSMCardService
<span class='line'>460</span>  */</span><span class="WHIT">
<span class='line'>461</span> </span><span class="NAME">SmartCardHSM.prototype.getNativeCardService</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>462</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.nativeCardService</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>463</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.nativeCardService</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>464</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>465</span> </span><span class="WHIT">	</span><span class="NAME">this.nativeCardService</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.getCardService</span><span class="PUNC">(</span><span class="STRN">"de.cardcontact.opencard.service.smartcardhsm.SmartCardHSMCardService"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>466</span> 
<span class='line'>467</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.nativeCardService</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>468</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>469</span> 
<span class='line'>470</span> 
<span class='line'>471</span> 
<span class='line'>472</span> </span><span class="COMM">/**
<span class='line'>473</span>  * Validate device certificate chain
<span class='line'>474</span>  *
<span class='line'>475</span>  * @param {Crypto} crypto the crypto provider to use
<span class='line'>476</span>  * @type Key
<span class='line'>477</span>  * @return the device authentication public key
<span class='line'>478</span>  */</span><span class="WHIT">
<span class='line'>479</span> </span><span class="NAME">SmartCardHSM.prototype.validateCertificateChain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>480</span> </span><span class="WHIT">	</span><span class="COMM">// Read concatenation of both certificates</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">devAutCert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readBinary</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.C_DevAut</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.validateCertificateChain</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">devAutCert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>483</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">chain</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>484</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>485</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>486</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">chain.publicKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>487</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>488</span> 
<span class='line'>489</span> 
<span class='line'>490</span> 
<span class='line'>491</span> </span><span class="COMM">/**
<span class='line'>492</span>  * Open a secure channel using device authentication
<span class='line'>493</span>  *
<span class='line'>494</span>  * @param {Crypto} crypto the crypto provider to use
<span class='line'>495</span>  * @param {Key} devAuthPK the device authentication public key
<span class='line'>496</span>  * @param {Number} Key.AES or Key.DES to request AES or DES secure messaging (Default probe)
<span class='line'>497</span>  * @type ISOSecureChannel
<span class='line'>498</span>  * @return the initialized secure channel
<span class='line'>499</span>  */</span><span class="WHIT">
<span class='line'>500</span> </span><span class="NAME">SmartCardHSM.prototype.openSecureChannel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">devAuthPK</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">smtype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>501</span> 
<span class='line'>502</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>503</span> 
<span class='line'>504</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">smtype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">		</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">smtype</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>507</span> </span><span class="WHIT">		</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Key.AES</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>508</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>509</span> 
<span class='line'>510</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Key.DES</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>511</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-CA-ECDH-3DES-CBC-CBC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>512</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>513</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-CA-ECDH-AES-CBC-CMAC-128"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>514</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>515</span> 
<span class='line'>516</span> </span><span class="WHIT">	</span><span class="COMM">// Try AES first and fallback to DES is not supported by card</span><span class="WHIT">
<span class='line'>517</span> 
<span class='line'>518</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>519</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">protocol</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>520</span> 
<span class='line'>521</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x41</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A80</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span> 
<span class='line'>523</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x6A80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">smtype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>525</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Requested secure messaging not supported"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>526</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>527</span> 
<span class='line'>528</span> </span><span class="WHIT">		</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Key.DES</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>529</span> 
<span class='line'>530</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-CA-ECDH-3DES-CBC-CBC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>531</span> 
<span class='line'>532</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>533</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">protocol</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>534</span> 
<span class='line'>535</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x41</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>536</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>537</span> 
<span class='line'>538</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ChipAuthentication</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">protocol</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">devAuthPK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// For domain parameter</span><span class="WHIT">
<span class='line'>539</span> </span><span class="WHIT">	</span><span class="NAME">ca.noPadding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>540</span> </span><span class="WHIT">	</span><span class="NAME">ca.generateEphemeralCAKeyPair</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>541</span> 
<span class='line'>542</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ephemeralPublicKeyIfd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ca.getEphemeralPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>543</span> 
<span class='line'>544</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x7C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ephemeralPublicKeyIfd</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>545</span> 
<span class='line'>546</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dadobin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.CPRO</span><span class="PUNC">|</span><span class="NAME">Card.CENC</span><span class="PUNC">|</span><span class="NAME">Card.RPRO</span><span class="PUNC">|</span><span class="NAME">Card.RENC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dado.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>547</span> 
<span class='line'>548</span> </span><span class="COMM">//	GPSystem.log(GPSystem.DEBUG, module.id, dadobin);</span><span class="WHIT">
<span class='line'>549</span> 
<span class='line'>550</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dado</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">dadobin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>551</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x7C</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>552</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">dado.elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>553</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nonceDO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>554</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">nonceDO.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>555</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nonce</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nonceDO.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>556</span> 
<span class='line'>557</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">authTokenDO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dado.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">authTokenDO.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>559</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">authToken</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">authTokenDO.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>560</span> 
<span class='line'>561</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>562</span> </span><span class="WHIT">	</span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enc.concat</span><span class="PUNC">(</span><span class="NAME">devAuthPK.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>563</span> </span><span class="WHIT">	</span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enc.concat</span><span class="PUNC">(</span><span class="NAME">devAuthPK.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>564</span> 
<span class='line'>565</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Encoded CA public key: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>566</span> </span><span class="WHIT">	</span><span class="NAME">ca.performKeyAgreement</span><span class="PUNC">(</span><span class="NAME">enc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nonce</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>567</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ca.verifyAuthenticationToken</span><span class="PUNC">(</span><span class="NAME">authToken</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>568</span> 
<span class='line'>569</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">result</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>570</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Authentication token invalid"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Authentication token invalid"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>572</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>573</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Authentication token valid"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>574</span> 
<span class='line'>575</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Key.DES</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>576</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>577</span> </span><span class="WHIT">		</span><span class="NAME">sm.setEncKey</span><span class="PUNC">(</span><span class="NAME">ca.kenc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>578</span> </span><span class="WHIT">		</span><span class="NAME">sm.setMacKey</span><span class="PUNC">(</span><span class="NAME">ca.kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>579</span> </span><span class="WHIT">		</span><span class="NAME">sm.setMACSendSequenceCounter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>580</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>581</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">IsoSecureChannel.SSC_SYNC_ENC_POLICY</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>582</span> </span><span class="WHIT">		</span><span class="NAME">sm.setEncKey</span><span class="PUNC">(</span><span class="NAME">ca.kenc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>583</span> </span><span class="WHIT">		</span><span class="NAME">sm.setMacKey</span><span class="PUNC">(</span><span class="NAME">ca.kmac</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>584</span> </span><span class="WHIT">		</span><span class="NAME">sm.setMACSendSequenceCounter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00000000000000000000000000000000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>585</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>586</span> 
<span class='line'>587</span> </span><span class="WHIT">	</span><span class="NAME">this.card.setCredential</span><span class="PUNC">(</span><span class="NAME">sm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>588</span> </span><span class="WHIT">	</span><span class="NAME">this.smactive</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>589</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">sm</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>590</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>591</span> 
<span class='line'>592</span> 
<span class='line'>593</span> 
<span class='line'>594</span> </span><span class="COMM">/**
<span class='line'>595</span>  * Update transparent EF referenced by file identifier
<span class='line'>596</span>  *
<span class='line'>597</span>  * @param {ByteString} fid the two byte file identifier
<span class='line'>598</span>  * @param {Number} offset the offset into the EF
<span class='line'>599</span>  * @param {ByteString} data the data to write
<span class='line'>600</span>  */</span><span class="WHIT">
<span class='line'>601</span> </span><span class="NAME">SmartCardHSM.prototype.updateBinary</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>602</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">offset</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>603</span> </span><span class="WHIT">		</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>604</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>605</span> 
<span class='line'>606</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bytesLeft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>607</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>608</span> 
<span class='line'>609</span> </span><span class="WHIT">	</span><span class="COMM">// 8 bytes are required for T54(4) and T53(4)</span><span class="WHIT">
<span class='line'>610</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">blksize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxCData</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>611</span> 
<span class='line'>612</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bytesLeft</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>613</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">toSend</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bytesLeft</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">blksize</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">blksize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">bytesLeft</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>614</span> 
<span class='line'>615</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t54</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x54</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>616</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t53</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x53</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data.bytes</span><span class="PUNC">(</span><span class="NAME">sent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">toSend</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>617</span> 
<span class='line'>618</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t54.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">t53.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>619</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD7</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>620</span> 
<span class='line'>621</span> </span><span class="WHIT">		</span><span class="NAME">bytesLeft</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">toSend</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>622</span> </span><span class="WHIT">		</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">toSend</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>623</span> </span><span class="WHIT">		</span><span class="NAME">sent</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">toSend</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>624</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>625</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>626</span> 
<span class='line'>627</span> 
<span class='line'>628</span> 
<span class='line'>629</span> </span><span class="COMM">/**
<span class='line'>630</span>  * Read transparent EF referenced by file identifier
<span class='line'>631</span>  *
<span class='line'>632</span>  * @param {ByteString} fid the two byte file identifier (optional - use currently selected EF if absent)
<span class='line'>633</span>  * @param {Number} offset the offset into the EF (optional)
<span class='line'>634</span>  * @param {Number} length the number of byte to read (optional)
<span class='line'>635</span>  * @type ByteString
<span class='line'>636</span>  * @return the data read from the EF
<span class='line'>637</span>  */</span><span class="WHIT">
<span class='line'>638</span> </span><span class="NAME">SmartCardHSM.prototype.readBinary</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>639</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">offset</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>640</span> </span><span class="WHIT">		</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>641</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>642</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>643</span> </span><span class="WHIT">		</span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>644</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>645</span> 
<span class='line'>646</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>647</span> </span><span class="WHIT">	</span><span class="KEYW">do</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>648</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t54</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x54</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">offset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>649</span> 
<span class='line'>650</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.limitedAPDUTransport</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.smactive</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">				</span><span class="COMM">// Is a length defined ?</span><span class="WHIT">
<span class='line'>651</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">le</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">this.maxRData</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this.maxRData</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Truncate if larger than maximum APDU size ?</span><span class="WHIT">
<span class='line'>652</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>653</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">le</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.maxRAPDU</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">256</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="PUNC">;</span><span class="WHIT">					</span><span class="COMM">// Get all with Le=0 in either short or extended APDU mode</span><span class="WHIT">
<span class='line'>654</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>655</span> 
<span class='line'>656</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t54.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">le</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6282</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>657</span> 
<span class='line'>658</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>659</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>660</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>661</span> 
<span class='line'>662</span> </span><span class="WHIT">		</span><span class="NAME">rsp.append</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>663</span> </span><span class="WHIT">		</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>664</span> 
<span class='line'>665</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">					</span><span class="COMM">// Length was defined, see if we already got everything</span><span class="WHIT">
<span class='line'>666</span> </span><span class="WHIT">			</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>667</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>668</span> </span><span class="WHIT">				</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>669</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>670</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>671</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x6282</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>672</span> 
<span class='line'>673</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rsp.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>674</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>675</span> 
<span class='line'>676</span> 
<span class='line'>677</span> 
<span class='line'>678</span> </span><span class="COMM">/**
<span class='line'>679</span>  * Select the file or key an return the FCP
<span class='line'>680</span>  *
<span class='line'>681</span>  * @param {ByteString} fid the two byte file object identifier
<span class='line'>682</span>  */</span><span class="WHIT">
<span class='line'>683</span> </span><span class="NAME">SmartCardHSM.prototype.selectFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>684</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>685</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>686</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>687</span> 
<span class='line'>688</span> 
<span class='line'>689</span> 
<span class='line'>690</span> </span><span class="COMM">/**
<span class='line'>691</span>  * Try selecting the file to see if is present
<span class='line'>692</span>  *
<span class='line'>693</span>  * @param {ByteString} fid the two byte file object identifier
<span class='line'>694</span>  */</span><span class="WHIT">
<span class='line'>695</span> </span><span class="NAME">SmartCardHSM.prototype.hasFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>696</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>697</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>698</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>699</span> 
<span class='line'>700</span> 
<span class='line'>701</span> 
<span class='line'>702</span> </span><span class="COMM">/**
<span class='line'>703</span>  * Delete file system object (EF or key)
<span class='line'>704</span>  *
<span class='line'>705</span>  * @param {ByteString} fid the two byte file object identifier
<span class='line'>706</span>  */</span><span class="WHIT">
<span class='line'>707</span> </span><span class="NAME">SmartCardHSM.prototype.deleteFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>708</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xE4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>709</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>710</span> 
<span class='line'>711</span> 
<span class='line'>712</span> 
<span class='line'>713</span> </span><span class="COMM">/**
<span class='line'>714</span>  * Strips leading zeros of a ByteString
<span class='line'>715</span>  *
<span class='line'>716</span>  * @param {ByteString} value the ByteString value
<span class='line'>717</span>  * @return the stripped ByteString object, may be an empty ByteString
<span class='line'>718</span>  * @type ByteString
<span class='line'>719</span>  */</span><span class="WHIT">
<span class='line'>720</span> </span><span class="NAME">SmartCardHSM.stripLeadingZeros</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>721</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>722</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>723</span> 
<span class='line'>724</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value.right</span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>725</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>726</span> 
<span class='line'>727</span> 
<span class='line'>728</span> 
<span class='line'>729</span> </span><span class="COMM">/**
<span class='line'>730</span>  * Build input for Generate Asymmetric Key Pair command for generating an ECC key pair
<span class='line'>731</span>  *
<span class='line'>732</span>  * @param {PublicKeyReference} innerCAR the CA the request shall be directed to
<span class='line'>733</span>  * @param {ByteString} algo the public key algorithm
<span class='line'>734</span>  * @param {PublicKeyReference} chr the certificate holder reference associated with this key
<span class='line'>735</span>  * @param {Key} dp the domain parameter for the key
<span class='line'>736</span>  * @param {PublicKeyReference} outerCAR the certificate holder reference of the public key for verifying the outer signature
<span class='line'>737</span>  * @param {Key} privateKey optional parameter to supply a private key value for import. This only works with the development version
<span class='line'>738</span>  *              of the SmartCard-HSM.
<span class='line'>739</span>  * @type ByteString
<span class='line'>740</span>  * @return the encoded C-Data for GENERATE ASYMMETRIC KEY PAIR
<span class='line'>741</span>  */</span><span class="WHIT">
<span class='line'>742</span> </span><span class="NAME">SmartCardHSM.buildGAKPwithECC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">innerCAR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">outerCAR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>743</span> 
<span class='line'>744</span> </span><span class="WHIT">	</span><span class="COMM">// Encode G</span><span class="WHIT">
<span class='line'>745</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>746</span> </span><span class="WHIT">	</span><span class="COMM">// uncompressed encoding</span><span class="WHIT">
<span class='line'>747</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>748</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">dp.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>749</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">dp.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>750</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">G</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>751</span> 
<span class='line'>752</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>753</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CPI"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F29</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>754</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CAR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x42</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">innerCAR.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>755</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Key"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F49</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>756</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Object Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x06</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>757</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Prime Modulus"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>758</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"First coefficient a"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>759</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Second coefficient b"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>760</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Base Point G"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">G</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>761</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Order of the base point"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x85</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>762</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Cofactor f"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x87</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">dp.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>763</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>764</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CHR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>765</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>766</span> 
<span class='line'>767</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">outerCAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>768</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"OuterCAR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x45</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">outerCAR.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>769</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>770</span> 
<span class='line'>771</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">priKey</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>772</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Private Key"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x8A</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">priKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_D</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>773</span> </span><span class="WHIT">		</span><span class="NAME">t.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">add</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>774</span> </span><span class="COMM">//		GPSystem.log(GPSystem.DEBUG, module.id, t);</span><span class="WHIT">
<span class='line'>775</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>776</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>777</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>778</span> 
<span class='line'>779</span> 
<span class='line'>780</span> 
<span class='line'>781</span> </span><span class="COMM">/**
<span class='line'>782</span>  * Build input for Generate Asymmetric Key Pair command for generating a RSA key pair
<span class='line'>783</span>  *
<span class='line'>784</span>  * @param {PublicKeyReference} innerCAR the CA the request shall be directed to
<span class='line'>785</span>  * @param {ByteString} algo the public key algorithm
<span class='line'>786</span>  * @param {PublicKeyReference} chr the certificate holder reference associated with this key
<span class='line'>787</span>  * @param {Number} keysize the module size in bits (1024, 1536 or 2048)
<span class='line'>788</span>  * @param {PublicKeyReference} outerCAR the certificate holder reference of the public key for verifying the outer signature
<span class='line'>789</span>  * @type ByteString
<span class='line'>790</span>  * @return the encoded C-Data for GENERATE ASYMMETRIC KEY PAIR
<span class='line'>791</span>  */</span><span class="WHIT">
<span class='line'>792</span> </span><span class="NAME">SmartCardHSM.buildGAKPwithRSA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">innerCAR</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">outerCAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>793</span> 
<span class='line'>794</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>795</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CPI"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F29</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>796</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CAR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x42</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">innerCAR.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>797</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Key"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F49</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>798</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Object Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x06</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>799</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Key Exponent"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">65537</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>800</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Key Size"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>801</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>802</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CHR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>803</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>804</span> 
<span class='line'>805</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">outerCAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>806</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"OuterCAR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x45</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">outerCAR.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>807</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>808</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>809</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>810</span> 
<span class='line'>811</span> 
<span class='line'>812</span> 
<span class='line'>813</span> </span><span class="COMM">/**
<span class='line'>814</span>  * Create a PKCS#15 PrivateECCKey description
<span class='line'>815</span>  *
<span class='line'>816</span>  * @param {Number/ByteString} keyid the key identifier
<span class='line'>817</span>  * @param {String} label the key label
<span class='line'>818</span>  * @type ASN1
<span class='line'>819</span>  * @return the PrivateECCKey description
<span class='line'>820</span>  */</span><span class="WHIT">
<span class='line'>821</span> </span><span class="NAME">SmartCardHSM.buildPrkDforECC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>822</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>823</span> </span><span class="WHIT">		</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>824</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>825</span> 
<span class='line'>826</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prkd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> 	</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xA0</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>827</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>828</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>829</span> </span><span class="COMM">//						new ASN1(ASN1.BIT_STRING, new ByteString("0780", HEX)),</span><span class="WHIT">
<span class='line'>830</span> </span><span class="COMM">//						new ASN1(ASN1.OCTET_STRING, new ByteString("01", HEX))</span><span class="WHIT">
<span class='line'>831</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>832</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>833</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>834</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"072080"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>835</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>836</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xA1</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>837</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>838</span> </span><span class="WHIT">							</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>839</span> </span><span class="WHIT">								</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>840</span> </span><span class="WHIT">							</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>841</span> </span><span class="WHIT">						</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>842</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>843</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>844</span> 
<span class='line'>845</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>846</span> </span><span class="WHIT">		</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Key size must be > 0"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>847</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tlvint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>848</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tlvint.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>849</span> </span><span class="WHIT">			</span><span class="NAME">tlvint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">tlvint</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>850</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>851</span> </span><span class="WHIT">		</span><span class="NAME">prkd.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tlvint</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>852</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>853</span> 
<span class='line'>854</span> </span><span class="COMM">//	GPSystem.log(GPSystem.DEBUG, module.id, prkd);</span><span class="WHIT">
<span class='line'>855</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prkd</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>856</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>857</span> 
<span class='line'>858</span> 
<span class='line'>859</span> 
<span class='line'>860</span> </span><span class="COMM">/**
<span class='line'>861</span>  * Create a PKCS#15 PrivateRSAKey description
<span class='line'>862</span>  *
<span class='line'>863</span>  * @param {Number/ByteString} keyid the key identifier
<span class='line'>864</span>  * @param {String} label the key label
<span class='line'>865</span>  * @param {Number} modulussize
<span class='line'>866</span>  * @type ASN1
<span class='line'>867</span>  * @return the PrivateECCKey description
<span class='line'>868</span>  */</span><span class="WHIT">
<span class='line'>869</span> </span><span class="NAME">SmartCardHSM.buildPrkDforRSA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">modulussize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>870</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>871</span> </span><span class="WHIT">		</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>872</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>873</span> 
<span class='line'>874</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prkd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> 	</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>875</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>876</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>877</span> </span><span class="COMM">//						new ASN1(ASN1.BIT_STRING, new ByteString("0780", HEX)),</span><span class="WHIT">
<span class='line'>878</span> </span><span class="COMM">//						new ASN1(ASN1.OCTET_STRING, new ByteString("01", HEX))</span><span class="WHIT">
<span class='line'>879</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>880</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>881</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>882</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0274"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>883</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>884</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xA1</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>885</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>886</span> </span><span class="WHIT">							</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>887</span> </span><span class="WHIT">								</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>888</span> </span><span class="WHIT">							</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>889</span> </span><span class="WHIT">							</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">modulussize</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>890</span> </span><span class="WHIT">						</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>891</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>892</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>893</span> </span><span class="COMM">//	GPSystem.log(GPSystem.DEBUG, module.id, prkd);</span><span class="WHIT">
<span class='line'>894</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prkd</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>895</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>896</span> 
<span class='line'>897</span> 
<span class='line'>898</span> 
<span class='line'>899</span> </span><span class="COMM">/**
<span class='line'>900</span>  * Create a PKCS#15 SecretKey description
<span class='line'>901</span>  *
<span class='line'>902</span>  * @param {Number/ByteString} keyid the key identifier
<span class='line'>903</span>  * @param {String} label the key label
<span class='line'>904</span>  * @param {Number} keysize
<span class='line'>905</span>  * @type ASN1
<span class='line'>906</span>  * @return the secret key description
<span class='line'>907</span>  */</span><span class="WHIT">
<span class='line'>908</span> </span><span class="NAME">SmartCardHSM.buildSKDforAES</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>909</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>910</span> </span><span class="WHIT">		</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>911</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>912</span> 
<span class='line'>913</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">skd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='line'>914</span> </span><span class="WHIT">		</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xA8</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>915</span> </span><span class="WHIT">			</span><span class="COMM">// CommonObjectAttributes</span><span class="WHIT">
<span class='line'>916</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>917</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>918</span> </span><span class="WHIT">				</span><span class="COMM">//						new ASN1(ASN1.BIT_STRING, new ByteString("0780", HEX)),</span><span class="WHIT">
<span class='line'>919</span> </span><span class="WHIT">				</span><span class="COMM">//						new ASN1(ASN1.OCTET_STRING, new ByteString("01", HEX))</span><span class="WHIT">
<span class='line'>920</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>921</span> </span><span class="WHIT">			</span><span class="COMM">// ClassAttributes: CommonKeyAttributes</span><span class="WHIT">
<span class='line'>922</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>923</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>924</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"07C010"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>925</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>926</span> </span><span class="WHIT">			</span><span class="COMM">// SubClassAttribute: CommonSecretKeyAttributes</span><span class="WHIT">
<span class='line'>927</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xA0</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>928</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>929</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>930</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>931</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>932</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xA1</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>933</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>934</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>935</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>936</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>937</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>938</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>939</span> 
<span class='line'>940</span> </span><span class="WHIT">		</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>941</span> </span><span class="COMM">//	GPSystem.log(GPSystem.DEBUG, module.id, skd);</span><span class="WHIT">
<span class='line'>942</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">skd</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>943</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>944</span> 
<span class='line'>945</span> 
<span class='line'>946</span> 
<span class='line'>947</span> </span><span class="COMM">/**
<span class='line'>948</span>  * Create a PKCS#15 certificate description
<span class='line'>949</span>  *
<span class='line'>950</span>  * @param {ByteString} commonObjectFlags default value is '0640'
<span class='line'>951</span>  * @param {String} label the key label
<span class='line'>952</span>  * @param {Key} pubKey the public key
<span class='line'>953</span>  * @param {ByteString} certFID the file identifier of the certificate
<span class='line'>954</span>  * @type ASN1
<span class='line'>955</span>  * @return the certificate description
<span class='line'>956</span>  */</span><span class="WHIT">
<span class='line'>957</span> </span><span class="NAME">SmartCardHSM.buildCertDescription</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">commonObjectFlags</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certFID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>958</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">commonObjectFlags</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>959</span> </span><span class="WHIT">		</span><span class="NAME">commonObjectFlags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0x0640"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>960</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>961</span> 
<span class='line'>962</span> </span><span class="WHIT">	</span><span class="COMM">// generate subject key id</span><span class="WHIT">
<span class='line'>963</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">qx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pubKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>964</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">qx</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>965</span> </span><span class="WHIT">	  </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">qx</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>966</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>967</span> </span><span class="WHIT">	  </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pubKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>968</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>969</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>970</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subjectKeyID</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">enc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>971</span> 
<span class='line'>972</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">desc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> 	</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>973</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">			</span><span class="COMM">// common object attributes</span><span class="WHIT">
<span class='line'>974</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>975</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">commonObjectFlags</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>976</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>977</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">			</span><span class="COMM">// common certificate attributes</span><span class="WHIT">
<span class='line'>978</span> </span><span class="WHIT">					  </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">subjectKeyID</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>979</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>980</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xA1</span><span class="PUNC">,</span><span class="WHIT">					</span><span class="COMM">// type attributes</span><span class="WHIT">
<span class='line'>981</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">			</span><span class="COMM">// x.509 certificate attributes</span><span class="WHIT">
<span class='line'>982</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">			</span><span class="COMM">// path</span><span class="WHIT">
<span class='line'>983</span> </span><span class="WHIT">							</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certFID</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>984</span> </span><span class="WHIT">						</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>985</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>986</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>987</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>988</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">desc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>989</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>990</span> 
<span class='line'>991</span> 
<span class='line'>992</span> 
<span class='line'>993</span> </span><span class="COMM">/**
<span class='line'>994</span>  * Create a PKCS#15 data object description
<span class='line'>995</span>  *
<span class='line'>996</span>  * @param {String} label the key label
<span class='line'>997</span>  * @param {ByteString} commonObjectFlags default value is '0640'
<span class='line'>998</span>  * @param {ByteString} fid the file identifier of the data object
<span class='line'>999</span>  * @param {String} applicationName the application name (Default "SmartCard-HSM")
<span class='line'>1000</span>  * @type ASN1
<span class='line'>1001</span>  * @return the Data Object Description
<span class='line'>1002</span>  */</span><span class="WHIT">
<span class='line'>1003</span> </span><span class="NAME">SmartCardHSM.buildDataObjectDescription</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">commonObjectFlags</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">applicationName</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1004</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">privateDO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fid.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.CONFIDENTIALDATAPREFIX</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1005</span> 
<span class='line'>1006</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">applicationName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1007</span> </span><span class="WHIT">		</span><span class="NAME">applicationName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"SmartCard-HSM"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1008</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1009</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">commonObjectFlags</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1010</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">privateDO</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1011</span> </span><span class="WHIT">			</span><span class="NAME">commonObjectFlags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0x06C0"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1012</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1013</span> </span><span class="WHIT">			</span><span class="NAME">commonObjectFlags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0x0640"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1014</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1015</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1016</span> 
<span class='line'>1017</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">desc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> 	</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1018</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">			</span><span class="COMM">// common object attributes</span><span class="WHIT">
<span class='line'>1019</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1020</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">commonObjectFlags</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1021</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1022</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">			</span><span class="COMM">// common data object attributes</span><span class="WHIT">
<span class='line'>1023</span> </span><span class="WHIT">					  </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">applicationName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1024</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1025</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0xA1</span><span class="PUNC">,</span><span class="WHIT">					</span><span class="COMM">// type attributes</span><span class="WHIT">
<span class='line'>1026</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">			</span><span class="COMM">// path</span><span class="WHIT">
<span class='line'>1027</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1028</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1029</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1030</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1031</span> 
<span class='line'>1032</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">privateDO</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1033</span> </span><span class="WHIT">		</span><span class="NAME">desc.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1034</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1035</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">desc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1036</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1037</span> 
<span class='line'>1038</span> 
<span class='line'>1039</span> 
<span class='line'>1040</span> </span><span class="COMM">/**
<span class='line'>1041</span>  * Create a PKCS#15 like KeyDomain description
<span class='line'>1042</span>  *
<span class='line'>1043</span>  * @param {String} label the key domain label
<span class='line'>1044</span>  * @type ASN1
<span class='line'>1045</span>  * @return the KeyDomain description
<span class='line'>1046</span>  */</span><span class="WHIT">
<span class='line'>1047</span> </span><span class="NAME">SmartCardHSM.buildKeyDomainDescription</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1048</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kdd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> 	</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1049</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1050</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1051</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1052</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1053</span> 
<span class='line'>1054</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">kdd</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1055</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1056</span> 
<span class='line'>1057</span> 
<span class='line'>1058</span> 
<span class='line'>1059</span> </span><span class="COMM">/**
<span class='line'>1060</span>  * Dump C-Data of Generate Asymmetric Key Pair command
<span class='line'>1061</span>  *
<span class='line'>1062</span>  * @param {ByteString} keydata the content of C-Data
<span class='line'>1063</span>  */</span><span class="WHIT">
<span class='line'>1064</span> </span><span class="NAME">SmartCardHSM.dumpKeyData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keydata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1065</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1066</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1067</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">a.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1068</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">a.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1069</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1070</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1071</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1072</span> 
<span class='line'>1073</span> 
<span class='line'>1074</span> 
<span class='line'>1075</span> </span><span class="COMM">/**
<span class='line'>1076</span>  * Generate an asymmetric key pair
<span class='line'>1077</span>  *
<span class='line'>1078</span>  * @param {Number} newkid key identifier for new key
<span class='line'>1079</span>  * @param {Number} signkid key identifier for signing the new public key
<span class='line'>1080</span>  * @param {ByteString} keydata the key data template
<span class='line'>1081</span>  * @type ByteString
<span class='line'>1082</span>  * @return the certificate signing request containing the new public key
<span class='line'>1083</span>  */</span><span class="WHIT">
<span class='line'>1084</span> </span><span class="NAME">SmartCardHSM.prototype.generateAsymmetricKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1085</span> 
<span class='line'>1086</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.limitedAPDUTransport</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// Use extended length</span><span class="WHIT">
<span class='line'>1087</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x46</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1088</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1089</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x46</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1090</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readBinary</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0xCE00</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1091</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1092</span> 
<span class='line'>1093</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1094</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1095</span> 
<span class='line'>1096</span> 
<span class='line'>1097</span> 
<span class='line'>1098</span> </span><span class="COMM">/**
<span class='line'>1099</span>  * Generate a symmetric key
<span class='line'>1100</span>  *
<span class='line'>1101</span>  * @param {Number} newkid key identifier for new key
<span class='line'>1102</span>  * @param {Number} algo key generation algorithm
<span class='line'>1103</span>  * @param {ByteString} keydata the key data template
<span class='line'>1104</span>  * @type ByteString
<span class='line'>1105</span>  * @return
<span class='line'>1106</span>  */</span><span class="WHIT">
<span class='line'>1107</span> </span><span class="NAME">SmartCardHSM.prototype.generateSymmetricKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1108</span> 
<span class='line'>1109</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x48</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newkid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keydata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1110</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1111</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1112</span> 
<span class='line'>1113</span> 
<span class='line'>1114</span> 
<span class='line'>1115</span> </span><span class="COMM">/**
<span class='line'>1116</span>  * Return true is SmartCard-HSM is initialized
<span class='line'>1117</span>  *
<span class='line'>1118</span>  * @type Boolean
<span class='line'>1119</span>  * @return true if initialized
<span class='line'>1120</span>  */</span><span class="WHIT">
<span class='line'>1121</span> </span><span class="NAME">SmartCardHSM.prototype.isInitialized</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1122</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.queryUserPINStatus</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1123</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x6984</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// V1.2: Not initialized / V2.0: Transport PIN</span><span class="WHIT">
<span class='line'>1124</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.queryInitializationCodeStatus</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1125</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1126</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1127</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1128</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1129</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1130</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1131</span> 
<span class='line'>1132</span> 
<span class='line'>1133</span> 
<span class='line'>1134</span> </span><span class="COMM">/**
<span class='line'>1135</span>  * Initialize device and clear all keys and files
<span class='line'>1136</span>  *
<span class='line'>1137</span>  * @param {ByteString} options two byte option mask
<span class='line'>1138</span>  * @param {ByteString} initialPIN initial user PIN value
<span class='line'>1139</span>  * @param {ByteString} initializationCode secret code for device initialization (set during first use)
<span class='line'>1140</span>  * @param {Number} retryCounterInitial retry counter for user PIN
<span class='line'>1141</span>  * @param {Number} keyshares number of device key encryption key shares (optional)
<span class='line'>1142</span>  */</span><span class="WHIT">
<span class='line'>1143</span> </span><span class="NAME">SmartCardHSM.prototype.initDevice</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">initialPIN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">initializationCode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">retryCounterInitial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyshares</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1144</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1145</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1146</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">initialPIN</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1147</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">initializationCode</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1148</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x91</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">retryCounterInitial</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1149</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1150</span> 
<span class='line'>1151</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyshares</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1152</span> </span><span class="WHIT">		</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x92</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">keyshares</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1153</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1154</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x50</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s.value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1155</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1156</span> 
<span class='line'>1157</span> 
<span class='line'>1158</span> 
<span class='line'>1159</span> </span><span class="COMM">/**
<span class='line'>1160</span>  * Determine free memory
<span class='line'>1161</span>  *
<span class='line'>1162</span>  * @type Number
<span class='line'>1163</span>  * @return the number of available bytes (this values is capped to 32767 on JCOP 2.4.1)
<span class='line'>1164</span>  */</span><span class="WHIT">
<span class='line'>1165</span> </span><span class="NAME">SmartCardHSM.prototype.getFreeMemory</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1166</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x50</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6700</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1167</span> 
<span class='line'>1168</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1169</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1170</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1171</span> 
<span class='line'>1172</span> </span><span class="WHIT">	</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1173</span> </span><span class="WHIT">	</span><span class="NAME">this.major</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.byteAt</span><span class="PUNC">(</span><span class="NAME">rsp.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1174</span> </span><span class="WHIT">	</span><span class="NAME">this.minor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.byteAt</span><span class="PUNC">(</span><span class="NAME">rsp.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1175</span> </span><span class="WHIT">	</span><span class="NAME">this.platform</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rsp.byteAt</span><span class="PUNC">(</span><span class="NAME">rsp.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1176</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rsp.bytes</span><span class="PUNC">(</span><span class="NAME">rsp.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1177</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1178</span> 
<span class='line'>1179</span> 
<span class='line'>1180</span> 
<span class='line'>1181</span> </span><span class="COMM">/**
<span class='line'>1182</span>  * Check if the RESET RETRY COUNTER command is enabled
<span class='line'>1183</span>  *
<span class='line'>1184</span>  * @type Boolean
<span class='line'>1185</span>  * @return true if enable during initialization
<span class='line'>1186</span>  */</span><span class="WHIT">
<span class='line'>1187</span> </span><span class="NAME">SmartCardHSM.prototype.isResetRetryCounterEnabled</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1188</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1189</span> </span><span class="WHIT">		</span><span class="NAME">this.getFreeMemory</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1190</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1191</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1192</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1193</span> 
<span class='line'>1194</span> 
<span class='line'>1195</span> 
<span class='line'>1196</span> </span><span class="COMM">/**
<span class='line'>1197</span>  * Check if the RESET RETRY COUNTER command can reset the PIN
<span class='line'>1198</span>  *
<span class='line'>1199</span>  * @type Boolean
<span class='line'>1200</span>  * @return true if enable during initialization
<span class='line'>1201</span>  */</span><span class="WHIT">
<span class='line'>1202</span> </span><span class="NAME">SmartCardHSM.prototype.isPINResetEnabled</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1203</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1204</span> </span><span class="WHIT">		</span><span class="NAME">this.getFreeMemory</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1205</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1206</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1207</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1208</span> 
<span class='line'>1209</span> 
<span class='line'>1210</span> 
<span class='line'>1211</span> </span><span class="COMM">/**
<span class='line'>1212</span>  * Parse the key domain status returned from the device
<span class='line'>1213</span>  *
<span class='line'>1214</span>  * @param {ByteString} status the R-DATA from the MANAGE KEY DOMAIN command
<span class='line'>1215</span>  * @type object
<span class='line'>1216</span>  * @return the decoded status Info
<span class='line'>1217</span>  */</span><span class="WHIT">
<span class='line'>1218</span> </span><span class="NAME">SmartCardHSM.prototype.parseKeyDomainStatus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">status</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1219</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">status.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1220</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1221</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1222</span> 
<span class='line'>1223</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">statusObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1224</span> </span><span class="WHIT">		</span><span class="NAME">sw</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1225</span> </span><span class="WHIT">		</span><span class="NAME">shares</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">status.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1226</span> </span><span class="WHIT">		</span><span class="NAME">outstanding</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">status.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1227</span> </span><span class="WHIT">		</span><span class="NAME">kcv</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">status.bytes</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1228</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1229</span> 
<span class='line'>1230</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">status.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1231</span> </span><span class="WHIT">		</span><span class="NAME">statusObject.keyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">status.bytes</span><span class="PUNC">(</span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1232</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1233</span> 
<span class='line'>1234</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">statusObject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1235</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1236</span> 
<span class='line'>1237</span> 
<span class='line'>1238</span> 
<span class='line'>1239</span> </span><span class="COMM">/*
<span class='line'>1240</span>  * Create DKEK Key Domain
<span class='line'>1241</span>  *
<span class='line'>1242</span>  * @param {Number} keyDomain number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command
<span class='line'>1243</span>  * @param {Number} shares the number of DKEK shares to import
<span class='line'>1244</span>  * @type Object
<span class='line'>1245</span>  * @return object with properties sw{Number}, shares{Number}, outstanding{Number} and kcv{ByteString}
<span class='line'>1246</span>  */</span><span class="WHIT">
<span class='line'>1247</span> </span><span class="NAME">SmartCardHSM.prototype.createDKEKKeyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">shares</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1248</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1249</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyDomain must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1250</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1251</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">shares</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1252</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"shares must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1253</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1254</span> 
<span class='line'>1255</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1256</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"label must be a string"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1257</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1258</span> 
<span class='line'>1259</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x52</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">shares</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1260</span> 
<span class='line'>1261</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parseKeyDomainStatus</span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1262</span> 
<span class='line'>1263</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1264</span> </span><span class="WHIT">		</span><span class="NAME">status.label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1265</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.KDDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1266</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1267</span> </span><span class="WHIT">			</span><span class="NAME">this.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1268</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1269</span> 
<span class='line'>1270</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kdd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildKeyDomainDescription</span><span class="PUNC">(</span><span class="NAME">status.label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1271</span> </span><span class="WHIT">		</span><span class="NAME">this.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kdd.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1272</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1273</span> 
<span class='line'>1274</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">status</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1275</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1276</span> 
<span class='line'>1277</span> 
<span class='line'>1278</span> 
<span class='line'>1279</span> </span><span class="COMM">/**
<span class='line'>1280</span>  * Create XKEK Key Domain
<span class='line'>1281</span>  *
<span class='line'>1282</span>  * @param {Number} keyDomain number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command
<span class='line'>1283</span>  * @param {ByteString} keyDomainMembership either a 64 byte signature (old format) or a encoded TLV object with tag 54 or 55
<span class='line'>1284</span>  * @return object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and the key domain UID{ByteString}
<span class='line'>1285</span>  * @type Object
<span class='line'>1286</span>  */</span><span class="WHIT">
<span class='line'>1287</span> </span><span class="NAME">SmartCardHSM.prototype.createXKEKKeyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">groupSignerPublicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomainMembership</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1288</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1289</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyDomain must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1290</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1291</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1292</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyDomain must be between 0 and 255"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1293</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1294</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">groupSignerPublicKey</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1295</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"groupSignerPublicKey must be a CVC instance"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1296</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1297</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">keyDomainMembership</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1298</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyDomainMembership must be a ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1299</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1300</span> 
<span class='line'>1301</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">groupSignerPublicKey.getOuterCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1302</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">groupSignerPublicKey.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1303</span> 
<span class='line'>1304</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukrefdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1305</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pukrefdo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1306</span> 
<span class='line'>1307</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1308</span> 
<span class='line'>1309</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyDomainMembership.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">64</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1310</span> </span><span class="WHIT">		</span><span class="NAME">keyDomainMembership</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x53</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomainMembership</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1311</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1312</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">groupSignerPublicKey.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.concat</span><span class="PUNC">(</span><span class="NAME">keyDomainMembership</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1313</span> 
<span class='line'>1314</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cdata.length</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">this.maxCData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1315</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x52</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1316</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1317</span> </span><span class="WHIT">		</span><span class="NAME">this.updateBinary</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x2F10</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1318</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x52</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1319</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1320</span> 
<span class='line'>1321</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.parseKeyDomainStatus</span><span class="PUNC">(</span><span class="NAME">rsp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1322</span> 
<span class='line'>1323</span> </span><span class="WHIT">	</span><span class="NAME">status.label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">chr.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1324</span> 
<span class='line'>1325</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.KDDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1326</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1327</span> </span><span class="WHIT">		</span><span class="NAME">this.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1328</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1329</span> 
<span class='line'>1330</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kdd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildKeyDomainDescription</span><span class="PUNC">(</span><span class="NAME">status.label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1331</span> </span><span class="WHIT">	</span><span class="NAME">this.updateBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kdd.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1332</span> 
<span class='line'>1333</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">status</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1334</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1335</span> 
<span class='line'>1336</span> 
<span class='line'>1337</span> 
<span class='line'>1338</span> </span><span class="COMM">/**
<span class='line'>1339</span>  * Associate XKEK Key Domain
<span class='line'>1340</span>  *
<span class='line'>1341</span>  * @param {Number} keyDomain number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command
<span class='line'>1342</span>  * @param {ByteString} keyDomainUID a encoded TLV object with tag 51 containing the key domain uid of the associated domain
<span class='line'>1343</span>  * @param {ByteString} keyDomainAssociation a encoded TLV object with tag 56 or 57
<span class='line'>1344</span>  * @return object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and the key domain UID{ByteString}
<span class='line'>1345</span>  * @type Object
<span class='line'>1346</span>  */</span><span class="WHIT">
<span class='line'>1347</span> </span><span class="NAME">SmartCardHSM.prototype.associateXKEKKeyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">groupSignerPublicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomainUID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomainAssociation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1348</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1349</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyDomain must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1350</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1351</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1352</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyDomain must be between 0 and 255"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1353</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1354</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">groupSignerPublicKey</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1355</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"groupSignerPublicKey must be a ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1356</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1357</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">keyDomainUID</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1358</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyDomainUID must be a ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1359</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1360</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">keyDomainAssociation</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1361</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyDomainAssociation must be a ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1362</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1363</span> 
<span class='line'>1364</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">groupSignerPublicKey.getOuterCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1365</span> 
<span class='line'>1366</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukrefdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1367</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pukrefdo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1368</span> 
<span class='line'>1369</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1370</span> 
<span class='line'>1371</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">groupSignerPublicKey.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.concat</span><span class="PUNC">(</span><span class="NAME">keyDomainUID</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">keyDomainAssociation</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1372</span> 
<span class='line'>1373</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cdata.length</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">this.maxCData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1374</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x52</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x05</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1375</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1376</span> </span><span class="WHIT">		</span><span class="NAME">this.updateBinary</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x2F10</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1377</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x52</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x05</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1378</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1379</span> 
<span class='line'>1380</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.parseKeyDomainStatus</span><span class="PUNC">(</span><span class="NAME">status</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1381</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1382</span> 
<span class='line'>1383</span> 
<span class='line'>1384</span> 
<span class='line'>1385</span> </span><span class="COMM">/**
<span class='line'>1386</span>  * Derive XKEK
<span class='line'>1387</span>  *
<span class='line'>1388</span>  * @param {Number} keyDomain number of key domain in the range 0 to the maximum defined in the INITIALIZE DEVICE command
<span class='line'>1389</span>  * @param {ByteString} derivationParam
<span class='line'>1390</span>  * @return object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and the key domain UID{ByteString}
<span class='line'>1391</span>  * @type Object
<span class='line'>1392</span>  */</span><span class="WHIT">
<span class='line'>1393</span> </span><span class="NAME">SmartCardHSM.prototype.deriveXKEK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">peerPublicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">derivationParam</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1394</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1395</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyid must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1396</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1397</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1398</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyid must be between 1 and 255"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1399</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1400</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">peerPublicKey</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">CVC</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1401</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"peerPublicKey must be a CVC"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1402</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1403</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">derivationParam</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1404</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"derivationParam must be a ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1405</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1406</span> 
<span class='line'>1407</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">peerPublicKey.getOuterCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1408</span> 
<span class='line'>1409</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukrefdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1410</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pukrefdo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1411</span> 
<span class='line'>1412</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1413</span> 
<span class='line'>1414</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kdp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x50</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">derivationParam</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1415</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">peerPublicKey.getASN1</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.concat</span><span class="PUNC">(</span><span class="NAME">kdp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1416</span> 
<span class='line'>1417</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cdata.length</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">this.maxCData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1418</span> </span><span class="WHIT">		</span><span class="COMM">// Le is usually not required, but versions 3.1 to 3.3 fail without Le (#178)</span><span class="WHIT">
<span class='line'>1419</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x62</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1420</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1421</span> </span><span class="WHIT">		</span><span class="NAME">this.updateBinary</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x2F10</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cdata</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1422</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x62</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1423</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1424</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1425</span> 
<span class='line'>1426</span> 
<span class='line'>1427</span> 
<span class='line'>1428</span> </span><span class="COMM">/**
<span class='line'>1429</span>  * Query the status of the key domain
<span class='line'>1430</span>  *
<span class='line'>1431</span>  * @param {Number} keyDomain the number of the key domain which will be queried, default is 0
<span class='line'>1432</span>  * @type Object
<span class='line'>1433</span>  * @return object with properties sw{Number}, shares{Number}, outstanding{Number}, kcv{ByteString} and for a XKEK key domain the key domain UID{ByteString}
<span class='line'>1434</span>  */</span><span class="WHIT">
<span class='line'>1435</span> </span><span class="NAME">SmartCardHSM.prototype.queryKeyDomainStatus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1436</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1437</span> </span><span class="WHIT">		</span><span class="NAME">keyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1438</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1439</span> 
<span class='line'>1440</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x52</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1441</span> 
<span class='line'>1442</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.parseKeyDomainStatus</span><span class="PUNC">(</span><span class="NAME">status</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1443</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1444</span> 
<span class='line'>1445</span> 
<span class='line'>1446</span> 
<span class='line'>1447</span> </span><span class="COMM">/**
<span class='line'>1448</span>  * Delete the key encryption key in a key domain
<span class='line'>1449</span>  *
<span class='line'>1450</span>  * @param {Number} keyDomain the number of the key domain
<span class='line'>1451</span>  */</span><span class="WHIT">
<span class='line'>1452</span> </span><span class="NAME">SmartCardHSM.prototype.deleteKEK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1453</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x52</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1454</span> 
<span class='line'>1455</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.parseKeyDomainStatus</span><span class="PUNC">(</span><span class="NAME">status</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1456</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1457</span> 
<span class='line'>1458</span> 
<span class='line'>1459</span> 
<span class='line'>1460</span> </span><span class="COMM">/**
<span class='line'>1461</span>  * Delete the empty key domain
<span class='line'>1462</span>  *
<span class='line'>1463</span>  * @param {Number} keyDomain the number of the key domain
<span class='line'>1464</span>  */</span><span class="WHIT">
<span class='line'>1465</span> </span><span class="NAME">SmartCardHSM.prototype.deleteKeyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1466</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x52</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x03</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1467</span> 
<span class='line'>1468</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.KDDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1469</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1470</span> </span><span class="WHIT">		</span><span class="NAME">this.deleteFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1471</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1472</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1473</span> 
<span class='line'>1474</span> 
<span class='line'>1475</span> 
<span class='line'>1476</span> </span><span class="COMM">/**
<span class='line'>1477</span>  * Return the label associated with the key domain or undefined.
<span class='line'>1478</span>  *
<span class='line'>1479</span>  * @param {Number} keyDomain the number of the key domain
<span class='line'>1480</span>  */</span><span class="WHIT">
<span class='line'>1481</span> </span><span class="NAME">SmartCardHSM.prototype.getKeyDomainLabel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1482</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.KDDPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1483</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1484</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1485</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">bin.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x30</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1486</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1487</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1488</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">bin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1489</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toString</span><span class="PUNC">(</span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1490</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1491</span> </span><span class="WHIT">		</span><span class="COMM">// Return undefined if no description is set</span><span class="WHIT">
<span class='line'>1492</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1493</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1494</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1495</span> 
<span class='line'>1496</span> 
<span class='line'>1497</span> 
<span class='line'>1498</span> </span><span class="COMM">/**
<span class='line'>1499</span>  * Import DKEK share or query status
<span class='line'>1500</span>  *
<span class='line'>1501</span>  * @param {Number} keyDomain the number of the key domain
<span class='line'>1502</span>  * @param {ByteString} keyshare 32 byte key share
<span class='line'>1503</span>  * @type Object
<span class='line'>1504</span>  * @return object with properties sw{Number}, shares{Number}, outstanding{Number} and kcv{ByteString}
<span class='line'>1505</span>  */</span><span class="WHIT">
<span class='line'>1506</span> </span><span class="NAME">SmartCardHSM.prototype.importKeyShare</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyshare</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1507</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1508</span> </span><span class="WHIT">		</span><span class="NAME">keyshare</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1509</span> </span><span class="WHIT">		</span><span class="NAME">keyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1510</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1511</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyshare</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1512</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x52</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyshare</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1513</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1514</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">status</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x52</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1515</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1516</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">status.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1517</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">sw</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1518</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1519</span> 
<span class='line'>1520</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">statusObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1521</span> </span><span class="WHIT">		</span><span class="NAME">sw</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1522</span> </span><span class="WHIT">		</span><span class="NAME">shares</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">status.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1523</span> </span><span class="WHIT">		</span><span class="NAME">outstanding</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">status.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1524</span> </span><span class="WHIT">		</span><span class="NAME">kcv</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">status.bytes</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1525</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1526</span> 
<span class='line'>1527</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">status.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1528</span> </span><span class="WHIT">		</span><span class="NAME">statusObject.keyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">status.bytes</span><span class="PUNC">(</span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1529</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1530</span> 
<span class='line'>1531</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">statusObject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1532</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1533</span> 
<span class='line'>1534</span> 
<span class='line'>1535</span> 
<span class='line'>1536</span> </span><span class="COMM">/**
<span class='line'>1537</span>  * Decrypt and import a DKEK share
<span class='line'>1538</span>  *
<span class='line'>1539</span>  * @param {ByteString} keyshare the encrypted key share as read from the .pbe file
<span class='line'>1540</span>  * @param {ByteString} password the password
<span class='line'>1541</span>  * @param {Number} keyDomain the number of the key domain
<span class='line'>1542</span>  * @return object with properties sw{Number}, shares{Number}, outstanding{Number} and kcv{ByteString}
<span class='line'>1543</span>  */</span><span class="WHIT">
<span class='line'>1544</span> </span><span class="NAME">SmartCardHSM.prototype.importEncryptedKeyShare</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyshare</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">password</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1545</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1546</span> </span><span class="WHIT">		</span><span class="NAME">keyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1547</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1548</span> 
<span class='line'>1549</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dkek</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DKEK.decryptKeyShare</span><span class="PUNC">(</span><span class="NAME">keyshare</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">password</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1550</span> </span><span class="COMM">//	print("Importing into SmartCard-HSM");</span><span class="WHIT">
<span class='line'>1551</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.importKeyShare</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dkek</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1552</span> </span><span class="WHIT">	</span><span class="NAME">dkek.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1553</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1554</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1555</span> 
<span class='line'>1556</span> 
<span class='line'>1557</span> 
<span class='line'>1558</span> </span><span class="COMM">/**
<span class='line'>1559</span>  * Wrap key under DKEK
<span class='line'>1560</span>  *
<span class='line'>1561</span>  * @param {Number} id key id
<span class='line'>1562</span>  * @type ByteString
<span class='line'>1563</span>  * @return key blob with encrypted key value
<span class='line'>1564</span>  */</span><span class="WHIT">
<span class='line'>1565</span> </span><span class="NAME">SmartCardHSM.prototype.wrapKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1566</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x72</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x92</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1567</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1568</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1569</span> 
<span class='line'>1570</span> 
<span class='line'>1571</span> 
<span class='line'>1572</span> </span><span class="COMM">/**
<span class='line'>1573</span>  * Unwrap key with DKEK
<span class='line'>1574</span>  *
<span class='line'>1575</span>  * @param {Number} id key id
<span class='line'>1576</span>  * @param {ByteString} keyblob the wrapped key
<span class='line'>1577</span>  */</span><span class="WHIT">
<span class='line'>1578</span> </span><span class="NAME">SmartCardHSM.prototype.unwrapKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1579</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyblob.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.maxCData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1580</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x74</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x93</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1581</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1582</span> </span><span class="WHIT">		</span><span class="NAME">this.updateBinary</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x2F10</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1583</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x74</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x93</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1584</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1585</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1586</span> 
<span class='line'>1587</span> 
<span class='line'>1588</span> 
<span class='line'>1589</span> </span><span class="COMM">/**
<span class='line'>1590</span>  * Replace symmetric key value encrypted under current key
<span class='line'>1591</span>  *
<span class='line'>1592</span>  * @param {Number} id key id
<span class='line'>1593</span>  * @param {ByteString} keyblob the wrapped key
<span class='line'>1594</span>  */</span><span class="WHIT">
<span class='line'>1595</span> </span><span class="NAME">SmartCardHSM.prototype.unwrapAndReplaceKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1596</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x74</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x94</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1597</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1598</span> 
<span class='line'>1599</span> 
<span class='line'>1600</span> 
<span class='line'>1601</span> </span><span class="COMM">/**
<span class='line'>1602</span>  * Derive Symmetric Key
<span class='line'>1603</span>  *
<span class='line'>1604</span>  * @param {Number} id key id
<span class='line'>1605</span>  * @param {Number} algo algorithm id (one of ALG_CBC_ENC, ALG_CBC_DEC, ALG_CMAC or ALG_DERIVE_SP800_56C)
<span class='line'>1606</span>  * @param {ByteString} derivationParam the derivation parameter
<span class='line'>1607</span>  * @type ByteString
<span class='line'>1608</span>  * @return derived key value
<span class='line'>1609</span>  */</span><span class="WHIT">
<span class='line'>1610</span> </span><span class="NAME">SmartCardHSM.prototype.deriveSymmetricKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">derivationParam</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1611</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">derivedKeyValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x78</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">derivationParam</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1612</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">derivedKeyValue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1613</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1614</span> 
<span class='line'>1615</span> 
<span class='line'>1616</span> 
<span class='line'>1617</span> </span><span class="COMM">/**
<span class='line'>1618</span>  * Verify User PIN
<span class='line'>1619</span>  *
<span class='line'>1620</span>  * @param {ByteString} userPIN user PIN value
<span class='line'>1621</span>  * @return the status word SW1/SW2 returned by the device
<span class='line'>1622</span>  */</span><span class="WHIT">
<span class='line'>1623</span> </span><span class="NAME">SmartCardHSM.prototype.verifyUserPIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">userPIN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1624</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">userPIN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1625</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">userPIN</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1626</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1627</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1628</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getNativeCardService</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1629</span> </span><span class="WHIT">		</span><span class="NAME">cs.verifyPassword</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1630</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.queryUserPINStatus</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1631</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1632</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1633</span> 
<span class='line'>1634</span> 
<span class='line'>1635</span> 
<span class='line'>1636</span> </span><span class="COMM">/**
<span class='line'>1637</span>  * Logout
<span class='line'>1638</span>  *
<span class='line'>1639</span>  */</span><span class="WHIT">
<span class='line'>1640</span> </span><span class="NAME">SmartCardHSM.prototype.logout</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1641</span> </span><span class="WHIT">	</span><span class="NAME">this.card.clearCredential</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1642</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendApdu</span><span class="PUNC">(</span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA4</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x04</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"E82B0601040181C31F0201"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1643</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">fcp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1644</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.find</span><span class="PUNC">(</span><span class="NUMB">0x85</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1645</span> </span><span class="WHIT">	</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v.bytes</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1646</span> </span><span class="WHIT">	</span><span class="NAME">this.major</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v.byteAt</span><span class="PUNC">(</span><span class="NAME">v.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1647</span> </span><span class="WHIT">	</span><span class="NAME">this.minor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v.byteAt</span><span class="PUNC">(</span><span class="NAME">v.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1648</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v.length</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1649</span> </span><span class="WHIT">		</span><span class="NAME">this.platform</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">v.byteAt</span><span class="PUNC">(</span><span class="NAME">v.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1650</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1651</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1652</span> 
<span class='line'>1653</span> 
<span class='line'>1654</span> 
<span class='line'>1655</span> </span><span class="COMM">/**
<span class='line'>1656</span>  * Change User PIN
<span class='line'>1657</span>  *
<span class='line'>1658</span>  * @param {ByteString} currentPIN current user PIN value
<span class='line'>1659</span>  * @param {ByteString} newPIN new user PIN value
<span class='line'>1660</span>  */</span><span class="WHIT">
<span class='line'>1661</span> </span><span class="NAME">SmartCardHSM.prototype.changeUserPIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">currentPIN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPIN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1662</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x24</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">currentPIN.concat</span><span class="PUNC">(</span><span class="NAME">newPIN</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1663</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1664</span> 
<span class='line'>1665</span> 
<span class='line'>1666</span> 
<span class='line'>1667</span> </span><span class="COMM">/**
<span class='line'>1668</span>  * Unblock and set User PIN
<span class='line'>1669</span>  *
<span class='line'>1670</span>  * @param {ByteString} initializationCode the initialization code
<span class='line'>1671</span>  * @param {ByteString} newPIN new user PIN value (optional)
<span class='line'>1672</span>  */</span><span class="WHIT">
<span class='line'>1673</span> </span><span class="NAME">SmartCardHSM.prototype.unblockUserPIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">initializationCode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newPIN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1674</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">newPIN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1675</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x2C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">initializationCode.concat</span><span class="PUNC">(</span><span class="NAME">newPIN</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1676</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1677</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x2C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x01</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">initializationCode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1678</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1679</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1680</span> 
<span class='line'>1681</span> 
<span class='line'>1682</span> 
<span class='line'>1683</span> </span><span class="COMM">/**
<span class='line'>1684</span>  * Change InitializationCode
<span class='line'>1685</span>  *
<span class='line'>1686</span>  * @param {ByteString} initializationCode current initialization code
<span class='line'>1687</span>  * @param {ByteString} newInitializationCode new initialization code
<span class='line'>1688</span>  */</span><span class="WHIT">
<span class='line'>1689</span> </span><span class="NAME">SmartCardHSM.prototype.changeInitializationCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">initializationCode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newInitializationCode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1690</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x24</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x88</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">initializationCode.concat</span><span class="PUNC">(</span><span class="NAME">newInitializationCode</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1691</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1692</span> 
<span class='line'>1693</span> 
<span class='line'>1694</span> 
<span class='line'>1695</span> </span><span class="NAME">SmartCardHSM.describePINStatus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">sw</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1696</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1697</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">sw</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1698</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1699</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" authenticated"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1700</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1701</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x6984</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1702</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" in transport mode or device not initialized"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1703</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1704</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1705</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not initialized"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1706</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1707</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x6983</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1708</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" blocked"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1709</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1710</span> </span><span class="WHIT">	</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x6300</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1711</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not authenticated"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1712</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1713</span> </span><span class="WHIT">	</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1714</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not verified, "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sw</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" tries remaining"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1715</span> </span><span class="WHIT">		</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1716</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1717</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">sw</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1718</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1719</span> 
<span class='line'>1720</span> 
<span class='line'>1721</span> 
<span class='line'>1722</span> </span><span class="COMM">/**
<span class='line'>1723</span>  * Request PIN Status Information
<span class='line'>1724</span>  *
<span class='line'>1725</span>  * @param {Number} p2 the PIN object id
<span class='line'>1726</span>  * @type Number
<span class='line'>1727</span>  * @return the status word SW1/SW2 returned by the device
<span class='line'>1728</span>  */</span><span class="WHIT">
<span class='line'>1729</span> </span><span class="NAME">SmartCardHSM.prototype.queryPINStatus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">p2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1730</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1731</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.card.SW</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1732</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1733</span> 
<span class='line'>1734</span> 
<span class='line'>1735</span> 
<span class='line'>1736</span> </span><span class="COMM">/**
<span class='line'>1737</span>  * Request PIN Status Information
<span class='line'>1738</span>  *
<span class='line'>1739</span>  * @type Number
<span class='line'>1740</span>  * @return the status word SW1/SW2 returned by the device
<span class='line'>1741</span>  */</span><span class="WHIT">
<span class='line'>1742</span> </span><span class="NAME">SmartCardHSM.prototype.queryUserPINStatus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1743</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.queryPINStatus</span><span class="PUNC">(</span><span class="NUMB">0x81</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1744</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1745</span> 
<span class='line'>1746</span> 
<span class='line'>1747</span> 
<span class='line'>1748</span> </span><span class="COMM">/**
<span class='line'>1749</span>  * Request Initialization Code Status
<span class='line'>1750</span>  *
<span class='line'>1751</span>  * @type Number
<span class='line'>1752</span>  * @return the status word SW1/SW2 returned by the device
<span class='line'>1753</span>  */</span><span class="WHIT">
<span class='line'>1754</span> </span><span class="NAME">SmartCardHSM.prototype.queryInitializationCodeStatus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1755</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.queryPINStatus</span><span class="PUNC">(</span><span class="NUMB">0x88</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1756</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1757</span> 
<span class='line'>1758</span> 
<span class='line'>1759</span> 
<span class='line'>1760</span> </span><span class="COMM">/**
<span class='line'>1761</span>  * Enumerate Objects
<span class='line'>1762</span>  *
<span class='line'>1763</span>  * @return the enumeration
<span class='line'>1764</span>  */</span><span class="WHIT">
<span class='line'>1765</span> </span><span class="NAME">SmartCardHSM.prototype.enumerateObjects</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1766</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x58</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">65536</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1767</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1768</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1769</span> 
<span class='line'>1770</span> 
<span class='line'>1771</span> 
<span class='line'>1772</span> </span><span class="COMM">/**
<span class='line'>1773</span>  * Generate random data
<span class='line'>1774</span>  *
<span class='line'>1775</span>  * @param {Number} length number of bytes
<span class='line'>1776</span>  * @return the random bytes
<span class='line'>1777</span>  */</span><span class="WHIT">
<span class='line'>1778</span> </span><span class="NAME">SmartCardHSM.prototype.generateRandom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1779</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1780</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1781</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1782</span> 
<span class='line'>1783</span> 
<span class='line'>1784</span> 
<span class='line'>1785</span> </span><span class="COMM">/**
<span class='line'>1786</span>  * Sign data using referenced key
<span class='line'>1787</span>  *
<span class='line'>1788</span>  * @param {Number} keyid the key identifier for signing
<span class='line'>1789</span>  * @param {algo} algo the algorithm identifier
<span class='line'>1790</span>  * @param {ByteString} data the data to be signed
<span class='line'>1791</span>  * @return the signature value
<span class='line'>1792</span>  */</span><span class="WHIT">
<span class='line'>1793</span> </span><span class="NAME">SmartCardHSM.prototype.sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1794</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.length</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">this.maxCData</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1795</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x68</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x10000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1796</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1797</span> </span><span class="WHIT">		</span><span class="NAME">this.updateBinary</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">0x2F10</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1798</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x68</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x10000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1799</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1800</span> 
<span class='line'>1801</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1802</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1803</span> 
<span class='line'>1804</span> 
<span class='line'>1805</span> 
<span class='line'>1806</span> </span><span class="COMM">/**
<span class='line'>1807</span>  * Decipher cryptogram or agree shared secret using Diffie-Hellman
<span class='line'>1808</span>  *
<span class='line'>1809</span>  * @param {Number} keyid the key identifier
<span class='line'>1810</span>  * @param {Number} algo the algorithm identifier
<span class='line'>1811</span>  * @param {ByteString} data the the cryptogram or concatenation of x || y of ECC public key
<span class='line'>1812</span>  * @return the plain output
<span class='line'>1813</span>  */</span><span class="WHIT">
<span class='line'>1814</span> </span><span class="NAME">SmartCardHSM.prototype.decipher</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1815</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x62</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1816</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rsp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1817</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1818</span> 
<span class='line'>1819</span> 
<span class='line'>1820</span> 
<span class='line'>1821</span> </span><span class="COMM">/**
<span class='line'>1822</span>  * Verify card verifiable certificate
<span class='line'>1823</span>  *
<span class='line'>1824</span>  * @param {CVC} cvc the card verifiable certificate
<span class='line'>1825</span>  **/</span><span class="WHIT">
<span class='line'>1826</span> </span><span class="NAME">SmartCardHSM.prototype.verifyCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cvc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1827</span> 
<span class='line'>1828</span> </span><span class="WHIT">	</span><span class="COMM">// Check if public key is already known</span><span class="WHIT">
<span class='line'>1829</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCHR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1830</span> 
<span class='line'>1831</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukrefdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">chr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1832</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pukrefdo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1833</span> 
<span class='line'>1834</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A88</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1835</span> 
<span class='line'>1836</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x9000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1837</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1838</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1839</span> 
<span class='line'>1840</span> </span><span class="WHIT">	</span><span class="COMM">// Select public key for verification</span><span class="WHIT">
<span class='line'>1841</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">car</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cvc.getCAR</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1842</span> 
<span class='line'>1843</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukrefdo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">car</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1844</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pukrefdo.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1845</span> 
<span class='line'>1846</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x22</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xB6</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pukref</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1847</span> 
<span class='line'>1848</span> </span><span class="WHIT">	</span><span class="COMM">// Extract value of 7F21</span><span class="WHIT">
<span class='line'>1849</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">TLVList</span><span class="PUNC">(</span><span class="NAME">cvc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">TLV.EMV</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1850</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tl.index</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1851</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t.getValue</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1852</span> 
<span class='line'>1853</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x2A</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xBE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1854</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1855</span> 
<span class='line'>1856</span> 
<span class='line'>1857</span> 
<span class='line'>1858</span> </span><span class="COMM">/**
<span class='line'>1859</span>  * Enumerate CA certificates
<span class='line'>1860</span>  *
<span class='line'>1861</span>  * @type String[]
<span class='line'>1862</span>  * @return the list of certificate labels
<span class='line'>1863</span>  */</span><span class="WHIT">
<span class='line'>1864</span> </span><span class="NAME">SmartCardHSM.prototype.enumerateCACertificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1865</span> </span><span class="WHIT">	</span><span class="NAME">this.canamemap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1866</span> </span><span class="WHIT">	</span><span class="NAME">this.caidmap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>1867</span> </span><span class="WHIT">	</span><span class="NAME">this.caids</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1868</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1869</span> 
<span class='line'>1870</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.enumerateObjects</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1871</span> 
<span class='line'>1872</span> </span><span class="WHIT">	</span><span class="COMM">// Process PKCS#15 certificate descriptions</span><span class="WHIT">
<span class='line'>1873</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">fobs.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1874</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fobs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.CERTDPREFIX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1875</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fobs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1876</span> </span><span class="WHIT">			</span><span class="NAME">this.caids.push</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1877</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.CACERTIFICATEPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1878</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">descbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readBinary</span><span class="PUNC">(</span><span class="NAME">fobs.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1879</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">asn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">descbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1880</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">coa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">asn.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1881</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">coa.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1882</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">coa.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1883</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1884</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"No label ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1885</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1886</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readBinary</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1887</span> </span><span class="WHIT">			</span><span class="NAME">certlist.push</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1888</span> </span><span class="WHIT">			</span><span class="NAME">this.canamemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1889</span> </span><span class="WHIT">			</span><span class="NAME">cert.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1890</span> </span><span class="WHIT">			</span><span class="NAME">this.caidmap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1891</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1892</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1893</span> 
<span class='line'>1894</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1895</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1896</span> 
<span class='line'>1897</span> 
<span class='line'>1898</span> 
<span class='line'>1899</span> </span><span class="COMM">/**
<span class='line'>1900</span>  * Return CA certificate with label
<span class='line'>1901</span>  *
<span class='line'>1902</span>  * @param {String} label the certificate label
<span class='line'>1903</span>  * @type ByteString
<span class='line'>1904</span>  * @return the encoded certificate
<span class='line'>1905</span>  */</span><span class="WHIT">
<span class='line'>1906</span> </span><span class="NAME">SmartCardHSM.prototype.getCACertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1907</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.caids</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1908</span> </span><span class="WHIT">		</span><span class="NAME">this.enumerateCACertificates</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1909</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1910</span> 
<span class='line'>1911</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.canamemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1912</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1913</span> 
<span class='line'>1914</span> 
<span class='line'>1915</span> 
<span class='line'>1916</span> </span><span class="COMM">/**
<span class='line'>1917</span>  * Determine an unused CA certificate identifier
<span class='line'>1918</span>  *
<span class='line'>1919</span>  * @type Number
<span class='line'>1920</span>  * @return a free CA certificate identifier or -1 if all identifier in use
<span class='line'>1921</span>  */</span><span class="WHIT">
<span class='line'>1922</span> </span><span class="NAME">SmartCardHSM.prototype.determineFreeCAId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1923</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.enumerateObjects</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1924</span> 
<span class='line'>1925</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.determineFreeId</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.CACERTIFICATEPREFIX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1926</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1927</span> 
<span class='line'>1928</span> 
<span class='line'>1929</span> 
<span class='line'>1930</span> </span><span class="COMM">/**
<span class='line'>1931</span>  * Add a new CA certificate to the map
<span class='line'>1932</span>  *
<span class='line'>1933</span>  * @param {X509} cert the CA certificate
<span class='line'>1934</span>  * @param {Number} id the corresponding id
<span class='line'>1935</span>  * @param {String} label the corresponding label
<span class='line'>1936</span>  */</span><span class="WHIT">
<span class='line'>1937</span> </span><span class="NAME">SmartCardHSM.prototype.addCACertificateToMap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1938</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.caidmap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1939</span> </span><span class="WHIT">		</span><span class="COMM">// new id</span><span class="WHIT">
<span class='line'>1940</span> </span><span class="WHIT">		</span><span class="NAME">this.caids.push</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1941</span> </span><span class="WHIT">		</span><span class="NAME">this.caidmap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1942</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1943</span> </span><span class="WHIT">	</span><span class="NAME">this.canamemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1944</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1945</span> 
<span class='line'>1946</span> 
<span class='line'>1947</span> 
<span class='line'>1948</span> </span><span class="COMM">/**
<span class='line'>1949</span>  * Enumerate key objects in the SmartCard-HSM and build the map of keys
<span class='line'>1950</span>  *
<span class='line'>1951</span>  * @type String[]
<span class='line'>1952</span>  * @return the list of key labels
<span class='line'>1953</span>  */</span><span class="WHIT">
<span class='line'>1954</span> </span><span class="NAME">SmartCardHSM.prototype.enumerateKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1955</span> </span><span class="WHIT">	</span><span class="NAME">this.namemap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1956</span> </span><span class="WHIT">	</span><span class="NAME">this.idmap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1957</span> </span><span class="WHIT">	</span><span class="NAME">this.idlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1958</span> </span><span class="WHIT">	</span><span class="NAME">this.p15idmap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1959</span> 
<span class='line'>1960</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.enumerateObjects</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1961</span> 
<span class='line'>1962</span> </span><span class="WHIT">	</span><span class="COMM">// Process keys</span><span class="WHIT">
<span class='line'>1963</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">fobs.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1964</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">fobs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.KEYPREFIX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fobs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1965</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fobs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1966</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">kid</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1967</span> </span><span class="COMM">//				GPSystem.log(GPSystem.DEBUG, module.id, "Found key: " + kid);</span><span class="WHIT">
<span class='line'>1968</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1969</span> </span><span class="WHIT">				</span><span class="NAME">this.idmap</span><span class="PUNC">[</span><span class="NAME">kid</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1970</span> </span><span class="WHIT">				</span><span class="NAME">this.idlist.push</span><span class="PUNC">(</span><span class="NAME">kid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1971</span> </span><span class="WHIT">				</span><span class="NAME">this.updateKey</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1972</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1973</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1974</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1975</span> 
<span class='line'>1976</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keylist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1977</span> </span><span class="WHIT">	</span><span class="COMM">// Process PKCS#15 private key descriptions</span><span class="WHIT">
<span class='line'>1978</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">fobs.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1979</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fobs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.PRKDPREFIX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1980</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fobs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1981</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">descbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readBinary</span><span class="PUNC">(</span><span class="NAME">fobs.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1982</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">descbin.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1983</span> </span><span class="WHIT">				</span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1984</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">desc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">descbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1985</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">desc.elements</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1986</span> </span><span class="WHIT">						</span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1987</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1988</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1989</span> </span><span class="WHIT">				</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1990</span> </span><span class="WHIT">					</span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1991</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1992</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.idmap</span><span class="PUNC">[</span><span class="NAME">kid</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1993</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1994</span> </span><span class="WHIT">					</span><span class="NAME">key.setDescription</span><span class="PUNC">(</span><span class="NAME">desc</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1995</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getLabel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1996</span> </span><span class="COMM">//					GPSystem.log(GPSystem.DEBUG, module.id, key.getId() + " - " + label);</span><span class="WHIT">
<span class='line'>1997</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1998</span> </span><span class="WHIT">						</span><span class="NAME">keylist.push</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1999</span> </span><span class="WHIT">						</span><span class="NAME">this.namemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2000</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2001</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p15id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getPKCS15Id</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2002</span> </span><span class="WHIT">					</span><span class="NAME">this.p15idmap</span><span class="PUNC">[</span><span class="NAME">p15id.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2003</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2004</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2005</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2006</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2007</span> 
<span class='line'>2008</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">keylist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2009</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2010</span> 
<span class='line'>2011</span> 
<span class='line'>2012</span> 
<span class='line'>2013</span> </span><span class="COMM">/**
<span class='line'>2014</span>  * Get key ids
<span class='line'>2015</span>  *
<span class='line'>2016</span>  * @type Number[]
<span class='line'>2017</span>  * @return a list of key identifier
<span class='line'>2018</span>  */</span><span class="WHIT">
<span class='line'>2019</span> </span><span class="NAME">SmartCardHSM.prototype.getKeyIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2020</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.idlist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2021</span> </span><span class="WHIT">		</span><span class="NAME">this.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2022</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2023</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.idlist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2024</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2025</span> 
<span class='line'>2026</span> 
<span class='line'>2027</span> 
<span class='line'>2028</span> </span><span class="COMM">/**
<span class='line'>2029</span>  * Determine an unused key identifier
<span class='line'>2030</span>  *
<span class='line'>2031</span>  * @type Number
<span class='line'>2032</span>  * @return a free key identifier or -1 if all key identifier in use
<span class='line'>2033</span>  */</span><span class="WHIT">
<span class='line'>2034</span> </span><span class="NAME">SmartCardHSM.prototype.determineFreeKeyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2035</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.idlist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2036</span> </span><span class="WHIT">		</span><span class="NAME">this.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2037</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2038</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">256</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2039</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.idmap</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2040</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2041</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2042</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2043</span> </span><span class="WHIT">	</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.OUT_OF_MEMORY</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Key idx exhausted"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2044</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2045</span> 
<span class='line'>2046</span> 
<span class='line'>2047</span> 
<span class='line'>2048</span> </span><span class="COMM">/**
<span class='line'>2049</span>  * Update key attributes, in particular the use counter
<span class='line'>2050</span>  *
<span class='line'>2051</span>  * @param {HSMKey} key the HSM key
<span class='line'>2052</span>  */</span><span class="WHIT">
<span class='line'>2053</span> </span><span class="NAME">SmartCardHSM.prototype.updateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2054</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.KEYPREFIX</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2055</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2056</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fcp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.selectFile</span><span class="PUNC">(</span><span class="NAME">fid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2057</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2058</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2059</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2060</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2061</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">fcp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2062</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.find</span><span class="PUNC">(</span><span class="NUMB">0xA5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2063</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">pi</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2064</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2065</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2066</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pi.find</span><span class="PUNC">(</span><span class="NUMB">0x90</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2067</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">kc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2068</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kc.value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2069</span> 
<span class='line'>2070</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0xFFFFFFFF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2071</span> </span><span class="WHIT">			</span><span class="NAME">key.useCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2072</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2073</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2074</span> 
<span class='line'>2075</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pi.find</span><span class="PUNC">(</span><span class="NUMB">0x91</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2076</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">kd</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2077</span> </span><span class="WHIT">		</span><span class="NAME">key.algorithms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kd.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2078</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2079</span> 
<span class='line'>2080</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pi.find</span><span class="PUNC">(</span><span class="NUMB">0x92</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2081</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">kd</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2082</span> </span><span class="WHIT">		</span><span class="NAME">key.keyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kd.value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2083</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2084</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2085</span> 
<span class='line'>2086</span> 
<span class='line'>2087</span> 
<span class='line'>2088</span> </span><span class="COMM">/**
<span class='line'>2089</span>  * Add a new key to the map of keys
<span class='line'>2090</span>  *
<span class='line'>2091</span>  * @param {HSMKey} key the HSM key
<span class='line'>2092</span>  */</span><span class="WHIT">
<span class='line'>2093</span> </span><span class="NAME">SmartCardHSM.prototype.addKeyToMap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2094</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getId</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2095</span> </span><span class="WHIT">	</span><span class="NAME">this.idmap</span><span class="PUNC">[</span><span class="NAME">id</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2096</span> 
<span class='line'>2097</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getLabel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2098</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2099</span> </span><span class="WHIT">		</span><span class="NAME">this.namemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2100</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2101</span> 
<span class='line'>2102</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p15id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key.getPKCS15Id</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2103</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p15id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2104</span> </span><span class="WHIT">		</span><span class="NAME">this.p15idmap</span><span class="PUNC">[</span><span class="NAME">p15id.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2105</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2106</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2107</span> 
<span class='line'>2108</span> 
<span class='line'>2109</span> 
<span class='line'>2110</span> </span><span class="COMM">/**
<span class='line'>2111</span>  * Get a key reference object
<span class='line'>2112</span>  *
<span class='line'>2113</span>  * @param {String/Number/ByteString} labelOrId label or id of key
<span class='line'>2114</span>  * @returns the key or null if not found
<span class='line'>2115</span>  * @type Key
<span class='line'>2116</span>  */</span><span class="WHIT">
<span class='line'>2117</span> </span><span class="NAME">SmartCardHSM.prototype.getKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">labelOrId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2118</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.idlist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2119</span> </span><span class="WHIT">		</span><span class="NAME">this.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2120</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2121</span> 
<span class='line'>2122</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">labelOrId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2123</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.idmap</span><span class="PUNC">[</span><span class="NAME">labelOrId</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2124</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">labelOrId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2125</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.namemap</span><span class="PUNC">[</span><span class="NAME">labelOrId</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2126</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2127</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.p15idmap</span><span class="PUNC">[</span><span class="NAME">labelOrId.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2128</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2129</span> 
<span class='line'>2130</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2131</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2132</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2133</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2134</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2135</span> 
<span class='line'>2136</span> 
<span class='line'>2137</span> 
<span class='line'>2138</span> </span><span class="COMM">/**
<span class='line'>2139</span>  * Return a list of key objects
<span class='line'>2140</span>  *
<span class='line'>2141</span>  * @type SmartCardHSMKey[]
<span class='line'>2142</span>  * @return the list of keys
<span class='line'>2143</span>  */</span><span class="WHIT">
<span class='line'>2144</span> </span><span class="NAME">SmartCardHSM.prototype.getKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2145</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.idlist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2146</span> </span><span class="WHIT">		</span><span class="NAME">this.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2147</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2148</span> 
<span class='line'>2149</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keylist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2150</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">this.idmap</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2151</span> </span><span class="WHIT">		</span><span class="NAME">keylist.push</span><span class="PUNC">(</span><span class="NAME">this.idmap</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2152</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2153</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">keylist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2154</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2155</span> 
<span class='line'>2156</span> 
<span class='line'>2157</span> 
<span class='line'>2158</span> </span><span class="COMM">/**
<span class='line'>2159</span>  * Determine a free id in the list of FID for the given prefix.
<span class='line'>2160</span>  *
<span class='line'>2161</span>  * @param {Number} the prefix to look at
<span class='line'>2162</span>  * @param {ByteString} the list of FID as returned from the device
<span class='line'>2163</span>  * @type Number
<span class='line'>2164</span>  * @return a free id for the given prefix or -1 if range is exhausted.
<span class='line'>2165</span>  */</span><span class="WHIT">
<span class='line'>2166</span> </span><span class="NAME">SmartCardHSM.determineFreeId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2167</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">map</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Bitmap</span><span class="PUNC">(</span><span class="NUMB">256</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2168</span> 
<span class='line'>2169</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">fobs.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2170</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fobs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2171</span> </span><span class="WHIT">			</span><span class="NAME">map.toggle</span><span class="PUNC">(</span><span class="NAME">fobs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2172</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2173</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2174</span> 
<span class='line'>2175</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">map.determineFirstUnset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2176</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2177</span> 
<span class='line'>2178</span> 
<span class='line'>2179</span> 
<span class='line'>2180</span> </span><span class="COMM">/**
<span class='line'>2181</span>  * Determine a free FID in the list of FID for the given prefix.
<span class='line'>2182</span>  *
<span class='line'>2183</span>  * @param {Number} the prefix to look at
<span class='line'>2184</span>  * @param {ByteString} the list of FID as returned from the device
<span class='line'>2185</span>  * @type ByteString
<span class='line'>2186</span>  * @return a free two byte file identifier (FID) for the given prefix or null if range is exhausted.
<span class='line'>2187</span>  */</span><span class="WHIT">
<span class='line'>2188</span> </span><span class="NAME">SmartCardHSM.determineFreeFid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2189</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.determineFreeId</span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2190</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2191</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2192</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2193</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2194</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2195</span> 
<span class='line'>2196</span> 
<span class='line'>2197</span> 
<span class='line'>2198</span> </span><span class="COMM">/**
<span class='line'>2199</span>  * Enumerate Data Objects
<span class='line'>2200</span>  *
<span class='line'>2201</span>  * @type String[]
<span class='line'>2202</span>  * @return the list of data object labels
<span class='line'>2203</span>  */</span><span class="WHIT">
<span class='line'>2204</span> </span><span class="NAME">SmartCardHSM.prototype.enumerateDataObjects</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2205</span> </span><span class="WHIT">	</span><span class="NAME">this.donamemap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2206</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dolist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2207</span> 
<span class='line'>2208</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.enumerateObjects</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2209</span> 
<span class='line'>2210</span> </span><span class="WHIT">	</span><span class="COMM">// Process PKCS#15 data object descriptions</span><span class="WHIT">
<span class='line'>2211</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">fobs.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2212</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fobs.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.DODPREFIX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2213</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">descfid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fobs.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2214</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">descbin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readBinary</span><span class="PUNC">(</span><span class="NAME">descfid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2215</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">asn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">descbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2216</span> </span><span class="COMM">//			print(asn);</span><span class="WHIT">
<span class='line'>2217</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">coa</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">asn.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2218</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">coa.elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2219</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">coa.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2220</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2221</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"No label ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2222</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2223</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">taga1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">asn.find</span><span class="PUNC">(</span><span class="NUMB">0xA1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2224</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">taga1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2225</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">datafid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">taga1.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2226</span> </span><span class="WHIT">				</span><span class="NAME">this.donamemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">datafid</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">datafid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">descfid</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">descfid</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2227</span> </span><span class="WHIT">				</span><span class="NAME">dolist.push</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2228</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2229</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2230</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2231</span> 
<span class='line'>2232</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dolist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2233</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2234</span> 
<span class='line'>2235</span> 
<span class='line'>2236</span> 
<span class='line'>2237</span> </span><span class="COMM">/**
<span class='line'>2238</span>  * Check if the data object is present
<span class='line'>2239</span>  *
<span class='line'>2240</span>  * @param {String} label the label
<span class='line'>2241</span>  * @type boolean
<span class='line'>2242</span>  * @return true if the data object exists
<span class='line'>2243</span>  */</span><span class="WHIT">
<span class='line'>2244</span> </span><span class="NAME">SmartCardHSM.prototype.hasDataObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2245</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.donamemap</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2246</span> </span><span class="WHIT">		</span><span class="NAME">this.enumerateDataObjects</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2247</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2248</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.donamemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2249</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2250</span> 
<span class='line'>2251</span> 
<span class='line'>2252</span> 
<span class='line'>2253</span> </span><span class="COMM">/**
<span class='line'>2254</span>  * Return the file identifier containing the data object.
<span class='line'>2255</span>  *
<span class='line'>2256</span>  * @param {String} label the label.
<span class='line'>2257</span>  * @type ByteString
<span class='line'>2258</span>  * @return the two byte file identifier
<span class='line'>2259</span>  */</span><span class="WHIT">
<span class='line'>2260</span> </span><span class="NAME">SmartCardHSM.prototype.getDataObjectFileIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2261</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.donamemap</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2262</span> </span><span class="WHIT">		</span><span class="NAME">this.enumerateDataObjects</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2263</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2264</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.donamemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2265</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2266</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Data object "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2267</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2268</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e.datafid</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2269</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2270</span> 
<span class='line'>2271</span> 
<span class='line'>2272</span> 
<span class='line'>2273</span> </span><span class="COMM">/**
<span class='line'>2274</span>  * Import a data object
<span class='line'>2275</span>  *
<span class='line'>2276</span>  * @param {String} label the unique label to reference the new data object
<span class='line'>2277</span>  * @param {Boolean} privObj true to store the data object with read protection
<span class='line'>2278</span>  * @param {ByteString} data the data blob to store
<span class='line'>2279</span>  */</span><span class="WHIT">
<span class='line'>2280</span> </span><span class="NAME">SmartCardHSM.prototype.importDataObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">privObj</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2281</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.enumerateObjects</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2282</span> 
<span class='line'>2283</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.donamemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2284</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2285</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Data object "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" does already exist"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2286</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2287</span> 
<span class='line'>2288</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">privObj</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2289</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">datafid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.determineFreeFid</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.CONFIDENTIALDATAPREFIX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2290</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2291</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">datafid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.determineFreeFid</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.PUBLICDATAPREFIX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2292</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2293</span> 
<span class='line'>2294</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">datafid</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2295</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Out of space for data objects"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2296</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2297</span> 
<span class='line'>2298</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">desc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.buildDataObjectDescription</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">datafid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"KeyManager"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2299</span> 
<span class='line'>2300</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">descfid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.determineFreeFid</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.DODPREFIX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fobs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2301</span> 
<span class='line'>2302</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">descfid</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2303</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Out of space for data objects descriptor"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2304</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2305</span> 
<span class='line'>2306</span> </span><span class="WHIT">	</span><span class="NAME">this.updateBinary</span><span class="PUNC">(</span><span class="NAME">datafid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2307</span> </span><span class="WHIT">	</span><span class="NAME">this.updateBinary</span><span class="PUNC">(</span><span class="NAME">descfid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">desc.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2308</span> </span><span class="WHIT">	</span><span class="NAME">this.donamemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">datafid</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">datafid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">descfid</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">descfid</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2309</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2310</span> 
<span class='line'>2311</span> 
<span class='line'>2312</span> 
<span class='line'>2313</span> </span><span class="COMM">/**
<span class='line'>2314</span>  * Delete the data object references by the label.
<span class='line'>2315</span>  *
<span class='line'>2316</span>  * @param {String} label the label of the data object
<span class='line'>2317</span>  */</span><span class="WHIT">
<span class='line'>2318</span> </span><span class="NAME">SmartCardHSM.prototype.deleteDataObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2319</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.donamemap</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2320</span> </span><span class="WHIT">		</span><span class="NAME">this.enumerateDataObjects</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2321</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2322</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.donamemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2323</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2324</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Data object "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2325</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2326</span> </span><span class="WHIT">	</span><span class="NAME">this.deleteFile</span><span class="PUNC">(</span><span class="NAME">e.descfid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2327</span> </span><span class="WHIT">	</span><span class="NAME">this.deleteFile</span><span class="PUNC">(</span><span class="NAME">e.datafid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2328</span> </span><span class="WHIT">	</span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">this.donamemap</span><span class="PUNC">[</span><span class="NAME">label</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2329</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2330</span> 
<span class='line'>2331</span> 
<span class='line'>2332</span> 
<span class='line'>2333</span> </span><span class="COMM">/**
<span class='line'>2334</span>  * Get crypto object
<span class='line'>2335</span>  *
<span class='line'>2336</span>  * @type HSMCrypto
<span class='line'>2337</span>  * @return the HSMCrypto object
<span class='line'>2338</span>  */</span><span class="WHIT">
<span class='line'>2339</span> </span><span class="NAME">SmartCardHSM.prototype.getCrypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2340</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2341</span> </span><span class="WHIT">		</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMCrypto</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2342</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2343</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2344</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2345</span> 
<span class='line'>2346</span> 
<span class='line'>2347</span> 
<span class='line'>2348</span> </span><span class="COMM">/**
<span class='line'>2349</span>  * @private
<span class='line'>2350</span>  */</span><span class="WHIT">
<span class='line'>2351</span> </span><span class="NAME">SmartCardHSM.prototype.getTokenInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2352</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.tokenInfo</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2353</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.tokenInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2354</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2355</span> 
<span class='line'>2356</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.hasFile</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EF_TokenInfo</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2357</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2358</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2359</span> 
<span class='line'>2360</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readBinary</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EF_TokenInfo</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2361</span> </span><span class="WHIT">	</span><span class="NAME">this.tokenInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">bin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2362</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.tokenInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2363</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2364</span> 
<span class='line'>2365</span> 
<span class='line'>2366</span> 
<span class='line'>2367</span> </span><span class="COMM">/**
<span class='line'>2368</span>  * Get Token Label
<span class='line'>2369</span>  *
<span class='line'>2370</span>  * @type String
<span class='line'>2371</span>  * @return the token label from CIAInfo
<span class='line'>2372</span>  */</span><span class="WHIT">
<span class='line'>2373</span> </span><span class="NAME">SmartCardHSM.prototype.getLabel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2374</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ti</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getTokenInfo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2375</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">ti</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2376</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2377</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2378</span> 
<span class='line'>2379</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ti.find</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2380</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2381</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2382</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2383</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.value.toString</span><span class="PUNC">(</span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2384</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2385</span> 
<span class='line'>2386</span> 
<span class='line'>2387</span> 
<span class='line'>2388</span> </span><span class="COMM">/**
<span class='line'>2389</span>  * @private
<span class='line'>2390</span>  */</span><span class="WHIT">
<span class='line'>2391</span> </span><span class="NAME">SmartCardHSM.prototype.getStaticTokenInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2392</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.staticTokenInfo</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2393</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.staticTokenInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2394</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2395</span> 
<span class='line'>2396</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.hasFile</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EF_StaticTokenInfo</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2397</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2398</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2399</span> 
<span class='line'>2400</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.readBinary</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.EF_StaticTokenInfo</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2401</span> </span><span class="WHIT">	</span><span class="NAME">this.staticTokenInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">bin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2402</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.staticTokenInfo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2403</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2404</span> 
<span class='line'>2405</span> 
<span class='line'>2406</span> 
<span class='line'>2407</span> </span><span class="COMM">/**
<span class='line'>2408</span>  * Get ProvisioningURL
<span class='line'>2409</span>  *
<span class='line'>2410</span>  * @type String
<span class='line'>2411</span>  * @return the configured ProvisioningURL or undefined
<span class='line'>2412</span>  */</span><span class="WHIT">
<span class='line'>2413</span> </span><span class="NAME">SmartCardHSM.prototype.getProvisioningURL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2414</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ti</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getStaticTokenInfo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2415</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">ti</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2416</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2417</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2418</span> 
<span class='line'>2419</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ti.find</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2420</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2421</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2422</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2423</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.value.toString</span><span class="PUNC">(</span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2424</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2425</span> 
<span class='line'>2426</span> 
<span class='line'>2427</span> 
<span class='line'>2428</span> </span><span class="COMM">/**
<span class='line'>2429</span>  * Get Key Check Value of Token Management Key
<span class='line'>2430</span>  *
<span class='line'>2431</span>  * @type ByteString
<span class='line'>2432</span>  * @return the configured KCV of the Token Management Key or undefined
<span class='line'>2433</span>  */</span><span class="WHIT">
<span class='line'>2434</span> </span><span class="NAME">SmartCardHSM.prototype.getTokenManagementKeyKCV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2435</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ti</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getStaticTokenInfo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2436</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">ti</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2437</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2438</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2439</span> 
<span class='line'>2440</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ti.find</span><span class="PUNC">(</span><span class="NUMB">0x81</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2441</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2442</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2443</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2444</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2445</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2446</span> 
<span class='line'>2447</span> 
<span class='line'>2448</span> 
<span class='line'>2449</span> </span><span class="COMM">/**
<span class='line'>2450</span>  * Get salt for SO-PIN derivation using  the Token Management Key
<span class='line'>2451</span>  *
<span class='line'>2452</span>  * @type ByteString
<span class='line'>2453</span>  * @return the configured salt
<span class='line'>2454</span>  */</span><span class="WHIT">
<span class='line'>2455</span> </span><span class="NAME">SmartCardHSM.prototype.getTokenManagementKeySalt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2456</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ti</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getStaticTokenInfo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2457</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">ti</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2458</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2459</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2460</span> 
<span class='line'>2461</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ti.find</span><span class="PUNC">(</span><span class="NUMB">0x82</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2462</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2463</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2464</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2465</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2466</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2467</span> 
<span class='line'>2468</span> 
<span class='line'>2469</span> 
<span class='line'>2470</span> </span><span class="COMM">/**
<span class='line'>2471</span>  * Create crypto object implementing access to the SmartCard-HSM
<span class='line'>2472</span>  *
<span class='line'>2473</span>  * @class Wrapper to provide Crypto interface to SmartCard-HSM
<span class='line'>2474</span>  * @constructor
<span class='line'>2475</span>  * @param {Crypto} crypto the backend crypto provider
<span class='line'>2476</span>  */</span><span class="WHIT">
<span class='line'>2477</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMCrypto</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2478</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2479</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2480</span> 
<span class='line'>2481</span> 
<span class='line'>2482</span> 
<span class='line'>2483</span> </span><span class="COMM">/**
<span class='line'>2484</span>  * Sign a message using the defined mechanism and key
<span class='line'>2485</span>  *
<span class='line'>2486</span>  * @param {HSMKey} key the private key
<span class='line'>2487</span>  * @param {Number} mech the mechanism (e.g. Crypto.ECDSA)
<span class='line'>2488</span>  * @param {ByteString} message the message to be signed
<span class='line'>2489</span>  * @type ByteString
<span class='line'>2490</span>  * @return the signature
<span class='line'>2491</span>  */</span><span class="WHIT">
<span class='line'>2492</span> </span><span class="NAME">SmartCardHSMCrypto.prototype.sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">message</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2493</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2494</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key.sign</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2495</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2496</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2497</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2498</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2499</span> 
<span class='line'>2500</span> 
<span class='line'>2501</span> 
<span class='line'>2502</span> </span><span class="COMM">/**
<span class='line'>2503</span>  * Encrypt a message using the defined mechanism and key
<span class='line'>2504</span>  *
<span class='line'>2505</span>  * @param {HSMKey} key the key
<span class='line'>2506</span>  * @param {Number} mech the mechanism (e.g. Crypto.RSA_PKCS1)
<span class='line'>2507</span>  * @param {ByteString} data the cryptogram
<span class='line'>2508</span>  * @param {ByteString} iv the initialization vector for symmetric ciphers
<span class='line'>2509</span>  * @type ByteString
<span class='line'>2510</span>  * @return the plain text
<span class='line'>2511</span>  */</span><span class="WHIT">
<span class='line'>2512</span> </span><span class="NAME">SmartCardHSMCrypto.prototype.encrypt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2513</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2514</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key.encrypt</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2515</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2516</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto.encrypt</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2517</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2518</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2519</span> 
<span class='line'>2520</span> 
<span class='line'>2521</span> 
<span class='line'>2522</span> </span><span class="COMM">/**
<span class='line'>2523</span>  * Decrypt a message using the defined mechanism and key
<span class='line'>2524</span>  *
<span class='line'>2525</span>  * @param {HSMKey} key the key
<span class='line'>2526</span>  * @param {Number} mech the mechanism (e.g. Crypto.RSA_PKCS1)
<span class='line'>2527</span>  * @param {ByteString} data the cryptogram
<span class='line'>2528</span>  * @param {ByteString} iv the initialization vector for symmetric ciphers
<span class='line'>2529</span>  * @type ByteString
<span class='line'>2530</span>  * @return the plain text
<span class='line'>2531</span>  */</span><span class="WHIT">
<span class='line'>2532</span> </span><span class="NAME">SmartCardHSMCrypto.prototype.decrypt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2533</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2534</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">key.decrypt</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2535</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2536</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto.decrypt</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2537</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2538</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2539</span> 
<span class='line'>2540</span> 
<span class='line'>2541</span> 
<span class='line'>2542</span> </span><span class="COMM">/**
<span class='line'>2543</span>  * Verify a message using the defined mechanism and key
<span class='line'>2544</span>  *
<span class='line'>2545</span>  * @param {Key} key the public key
<span class='line'>2546</span>  * @param {Number} mech the mechanism (e.g. Crypto.ECDSA)
<span class='line'>2547</span>  * @param {ByteString} message the message to be signed
<span class='line'>2548</span>  * @param {ByteString} signature the signature to verify
<span class='line'>2549</span>  * @type Boolean
<span class='line'>2550</span>  * @return true if signature is valid
<span class='line'>2551</span>  */</span><span class="WHIT">
<span class='line'>2552</span> </span><span class="NAME">SmartCardHSMCrypto.prototype.verify</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">message</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2553</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto.verify</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">message</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2554</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2555</span> 
<span class='line'>2556</span> 
<span class='line'>2557</span> 
<span class='line'>2558</span> </span><span class="COMM">/**
<span class='line'>2559</span>  * Create a key access object
<span class='line'>2560</span>  *
<span class='line'>2561</span>  * @class Class implementing key access
<span class='line'>2562</span>  * @param {SmartCardHSM} sc the card access object
<span class='line'>2563</span>  * @param {Number} id the key identifier
<span class='line'>2564</span>  */</span><span class="WHIT">
<span class='line'>2565</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">(</span><span class="NAME">sc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2566</span> </span><span class="WHIT">	</span><span class="NAME">this.sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2567</span> </span><span class="WHIT">	</span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2568</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc.useExternalHashInECDSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2569</span> </span><span class="WHIT">		</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2570</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2571</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2572</span> 
<span class='line'>2573</span> </span><span class="NAME">exports.SmartCardHSMKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2574</span> 
<span class='line'>2575</span> 
<span class='line'>2576</span> </span><span class="COMM">/**
<span class='line'>2577</span>  * Set the PKCS#15 private key description
<span class='line'>2578</span>  *
<span class='line'>2579</span>  * @param {ASN1} desc the description
<span class='line'>2580</span>  */</span><span class="WHIT">
<span class='line'>2581</span> </span><span class="NAME">SmartCardHSMKey.prototype.setDescription</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">desc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2582</span> </span><span class="WHIT">	</span><span class="NAME">this.desc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">desc</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2583</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2584</span> 
<span class='line'>2585</span> 
<span class='line'>2586</span> 
<span class='line'>2587</span> </span><span class="COMM">/**
<span class='line'>2588</span>  * Return the key identifier
<span class='line'>2589</span>  *
<span class='line'>2590</span>  * @type Number
<span class='line'>2591</span>  * @return the key identifier
<span class='line'>2592</span>  */</span><span class="WHIT">
<span class='line'>2593</span> </span><span class="NAME">SmartCardHSMKey.prototype.getId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2594</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2595</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2596</span> 
<span class='line'>2597</span> 
<span class='line'>2598</span> 
<span class='line'>2599</span> </span><span class="COMM">/**
<span class='line'>2600</span>  * Return the key label as encoded in the PKCS#15 structure
<span class='line'>2601</span>  *
<span class='line'>2602</span>  * @type String
<span class='line'>2603</span>  * @return the key label
<span class='line'>2604</span>  */</span><span class="WHIT">
<span class='line'>2605</span> </span><span class="NAME">SmartCardHSMKey.prototype.getLabel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2606</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.desc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2607</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2608</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2609</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">this.desc.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">elements</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.desc.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0x0C</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2610</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2611</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2612</span> 
<span class='line'>2613</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.desc.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toString</span><span class="PUNC">(</span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2614</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2615</span> 
<span class='line'>2616</span> 
<span class='line'>2617</span> 
<span class='line'>2618</span> </span><span class="COMM">/**
<span class='line'>2619</span>  * Return the key id as encoded in the PKCS#15 structure
<span class='line'>2620</span>  *
<span class='line'>2621</span>  * @type ByteString
<span class='line'>2622</span>  * @return the key identifier
<span class='line'>2623</span>  */</span><span class="WHIT">
<span class='line'>2624</span> </span><span class="NAME">SmartCardHSMKey.prototype.getPKCS15Id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2625</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.desc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2626</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2627</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2628</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.desc.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2629</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2630</span> 
<span class='line'>2631</span> 
<span class='line'>2632</span> 
<span class='line'>2633</span> </span><span class="COMM">/**
<span class='line'>2634</span>  * Return the key size in bits
<span class='line'>2635</span>  *
<span class='line'>2636</span>  * @type Number
<span class='line'>2637</span>  * @return the key size in bits
<span class='line'>2638</span>  */</span><span class="WHIT">
<span class='line'>2639</span> </span><span class="NAME">SmartCardHSMKey.prototype.getSize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2640</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.desc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2641</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2642</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2643</span> </span><span class="COMM">//	GPSystem.log(GPSystem.DEBUG, module.id, this.desc);</span><span class="WHIT">
<span class='line'>2644</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.desc.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">elements</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">	</span><span class="COMM">// Fix a bug from early versions</span><span class="WHIT">
<span class='line'>2645</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.desc.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2646</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2647</span> 
<span class='line'>2648</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.desc.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xA8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2649</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.desc.get</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2650</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2651</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.desc.find</span><span class="PUNC">(</span><span class="NUMB">0xA1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2652</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a1.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2653</span> 
<span class='line'>2654</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">528</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2655</span> </span><span class="WHIT">			</span><span class="NAME">size</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">521</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Fix bug in OpenSCDP returning the wrong key size for secp521 keys</span><span class="WHIT">
<span class='line'>2656</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2657</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2658</span> 
<span class='line'>2659</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">size</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2660</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2661</span> 
<span class='line'>2662</span> 
<span class='line'>2663</span> 
<span class='line'>2664</span> </span><span class="COMM">/**
<span class='line'>2665</span>  * Return the key type
<span class='line'>2666</span>  *
<span class='line'>2667</span>  * @type String
<span class='line'>2668</span>  * @return the key type
<span class='line'>2669</span>  */</span><span class="WHIT">
<span class='line'>2670</span> </span><span class="NAME">SmartCardHSMKey.prototype.getType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2671</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.desc</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2672</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2673</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2674</span> 
<span class='line'>2675</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.desc.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2676</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"EC"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2677</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.desc.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x30</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2678</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"RSA"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2679</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.desc.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xA8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2680</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"AES"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2681</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2682</span> 
<span class='line'>2683</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2684</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2685</span> 
<span class='line'>2686</span> 
<span class='line'>2687</span> 
<span class='line'>2688</span> </span><span class="COMM">/**
<span class='line'>2689</span>  * Sign data using a key in the SmartCard-HSM
<span class='line'>2690</span>  *
<span class='line'>2691</span>  * @param {Number} mech the signing mechanism
<span class='line'>2692</span>  * @param {ByteString} data to be signed
<span class='line'>2693</span>  * @type ByteString
<span class='line'>2694</span>  * @return the signature
<span class='line'>2695</span>  */</span><span class="WHIT">
<span class='line'>2696</span> </span><span class="NAME">SmartCardHSMKey.prototype.sign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2697</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2698</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2699</span> </span><span class="WHIT">		</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2700</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2701</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2702</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2703</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA1</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2704</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x31</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2705</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2706</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA224</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2707</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x32</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2708</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2709</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA256</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2710</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x33</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2711</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2712</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA384</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2713</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x34</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2714</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2715</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA512</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2716</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x35</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2717</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2718</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PKCS1</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2719</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc.major</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.sc.major</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2720</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x30</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2721</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2722</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x20</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2723</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2724</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">keysize</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2725</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Can't determine key size"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2726</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2727</span> </span><span class="WHIT">				</span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS1.encode_EMSA_V15</span><span class="PUNC">(</span><span class="NAME">keysize</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2728</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2729</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2730</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2731</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2732</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x40</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2733</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2734</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA1</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2735</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x41</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2736</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2737</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA224</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2738</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x42</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2739</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2740</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA256</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2741</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x43</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2742</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2743</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA384</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2744</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x44</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2745</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2746</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA512</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2747</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x45</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2748</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2749</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2750</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x70</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2751</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2752</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA1</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2753</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc.useExternalHashInECDSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2754</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x70</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2755</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2756</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2757</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x71</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2758</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2759</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2760</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA224</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2761</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc.useExternalHashInECDSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2762</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x70</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2763</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_224</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2764</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2765</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x72</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2766</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2767</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2768</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2769</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc.useExternalHashInECDSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2770</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x70</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2771</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2772</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2773</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x73</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2774</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2775</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2776</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA384</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2777</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc.useExternalHashInECDSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2778</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x70</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2779</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_384</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2780</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2781</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x74</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2782</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2783</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2784</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA512</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2785</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.sc.useExternalHashInECDSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2786</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x70</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2787</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_512</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2788</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2789</span> </span><span class="WHIT">				</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x75</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2790</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2791</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2792</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CMAC</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2793</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.deriveSymmetricKey</span><span class="PUNC">(</span><span class="NAME">this.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.ALG_CMAC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2794</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2795</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unsupported crypto mechanism"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2796</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2797</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2798</span> 
<span class='line'>2799</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.sign</span><span class="PUNC">(</span><span class="NAME">this.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2800</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2801</span> 
<span class='line'>2802</span> 
<span class='line'>2803</span> 
<span class='line'>2804</span> </span><span class="COMM">/**
<span class='line'>2805</span>  * @private
<span class='line'>2806</span>  */</span><span class="WHIT">
<span class='line'>2807</span> </span><span class="NAME">SmartCardHSMKey.prototype.symmetricblock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2808</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">max</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.maxCData</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="PUNC">~</span><span class="NUMB">0xF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2809</span> 
<span class='line'>2810</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2811</span> 
<span class='line'>2812</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2813</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2814</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2815</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">max</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2816</span> </span><span class="WHIT">			</span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">max</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2817</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2818</span> 
<span class='line'>2819</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fragment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.bytes</span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2820</span> </span><span class="COMM">//		print("1 [" + max + "]: " + fragment);</span><span class="WHIT">
<span class='line'>2821</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mech</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.ALG_CBC_ENC</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2822</span> </span><span class="WHIT">			</span><span class="NAME">fragment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fragment.left</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">xor</span><span class="PUNC">(</span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">fragment.bytes</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2823</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2824</span> </span><span class="COMM">//		print("1: " + fragment);</span><span class="WHIT">
<span class='line'>2825</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.deriveSymmetricKey</span><span class="PUNC">(</span><span class="NAME">this.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fragment</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2826</span> 
<span class='line'>2827</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mech</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.ALG_CBC_DEC</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2828</span> </span><span class="WHIT">			</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c.left</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">xor</span><span class="PUNC">(</span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">c.bytes</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2829</span> </span><span class="WHIT">			</span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fragment.right</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2830</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2831</span> </span><span class="WHIT">			</span><span class="NAME">iv</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">c.right</span><span class="PUNC">(</span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2832</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2833</span> 
<span class='line'>2834</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2835</span> </span><span class="WHIT">		</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2836</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2837</span> 
<span class='line'>2838</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2839</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2840</span> 
<span class='line'>2841</span> 
<span class='line'>2842</span> 
<span class='line'>2843</span> </span><span class="COMM">/**
<span class='line'>2844</span>  * Encrypt data using a key in the SmartCard-HSM
<span class='line'>2845</span>  *
<span class='line'>2846</span>  * @param {Number} mech the encipherr mechanism
<span class='line'>2847</span>  * @param {ByteString} data to be enciphered
<span class='line'>2848</span>  * @type ByteString
<span class='line'>2849</span>  * @return the plain message
<span class='line'>2850</span>  */</span><span class="WHIT">
<span class='line'>2851</span> </span><span class="NAME">SmartCardHSMKey.prototype.encrypt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2852</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2853</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2854</span> </span><span class="WHIT">		</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2855</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2856</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.symmetricblock</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.ALG_CBC_ENC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2857</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2858</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unsupported crypto mechanism"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2859</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2860</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2861</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2862</span> 
<span class='line'>2863</span> 
<span class='line'>2864</span> 
<span class='line'>2865</span> </span><span class="COMM">/**
<span class='line'>2866</span>  * Decrypt data using a key in the SmartCard-HSM
<span class='line'>2867</span>  *
<span class='line'>2868</span>  * @param {Number} mech the decipher mechanism
<span class='line'>2869</span>  * @param {ByteString} data to be deciphered
<span class='line'>2870</span>  * @type ByteString
<span class='line'>2871</span>  * @return the plain message
<span class='line'>2872</span>  */</span><span class="WHIT">
<span class='line'>2873</span> </span><span class="NAME">SmartCardHSMKey.prototype.decrypt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2874</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2875</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2876</span> </span><span class="WHIT">		</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">mech</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2877</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2878</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2879</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PKCS1</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2880</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2881</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_OAEP_SHA224</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2882</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_224</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2883</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2884</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_OAEP_SHA256</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2885</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2886</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2887</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_OAEP_SHA384</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2888</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2889</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2890</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_OAEP_SHA512</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2891</span> </span><span class="WHIT">			</span><span class="NAME">algo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2892</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2893</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDHP</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2894</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.sc.decipher</span><span class="PUNC">(</span><span class="NAME">this.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2895</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.AES_CBC</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2896</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.symmetricblock</span><span class="PUNC">(</span><span class="NAME">SmartCardHSM.ALG_CBC_DEC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iv</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2897</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>2898</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unsupported crypto mechanism"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2899</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2900</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2901</span> 
<span class='line'>2902</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">em</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.decipher</span><span class="PUNC">(</span><span class="NAME">this.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x21</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2903</span> 
<span class='line'>2904</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">em</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2905</span> 
<span class='line'>2906</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mech</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2907</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mech</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PKCS1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2908</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS1.decode_EME_V15</span><span class="PUNC">(</span><span class="NAME">em</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2909</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2910</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sc.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2911</span> 
<span class='line'>2912</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS1.decode_EME_OAEP</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">em</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2913</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2914</span> 
<span class='line'>2915</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">plain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2916</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.CRYPTO_FAILED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mech</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Decryption failed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2917</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2918</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2919</span> 
<span class='line'>2920</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">plain</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2921</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2922</span> 
<span class='line'>2923</span> 
<span class='line'>2924</span> 
<span class='line'>2925</span> </span><span class="COMM">/**
<span class='line'>2926</span>  * Return human readable string
<span class='line'>2927</span>  */</span><span class="WHIT">
<span class='line'>2928</span> </span><span class="NAME">SmartCardHSMKey.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2929</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"SmartCardHSMKey(id="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.id</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2930</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2931</span> 
<span class='line'>2932</span> 
<span class='line'>2933</span> 
<span class='line'>2934</span> </span><span class="COMM">/**
<span class='line'>2935</span>  * Initialize SmartCard-HSM
<span class='line'>2936</span>  *
<span class='line'>2937</span>  * @class Class implementing the device initialization methods
<span class='line'>2938</span>  * @param {Card} card the card object
<span class='line'>2939</span>  */</span><span class="WHIT">
<span class='line'>2940</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMInitializer</span><span class="PUNC">(</span><span class="NAME">card</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2941</span> </span><span class="WHIT">	</span><span class="NAME">this.card</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">card</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2942</span> </span><span class="WHIT">	</span><span class="NAME">this.initializationCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"57621880"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2943</span> </span><span class="WHIT">	</span><span class="NAME">this.userPIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"648219"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2944</span> </span><span class="WHIT">	</span><span class="NAME">this.userPINSet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2945</span> </span><span class="WHIT">	</span><span class="NAME">this.useDefaultUserPIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2946</span> </span><span class="WHIT">	</span><span class="NAME">this.retryCounterInitial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2947</span> </span><span class="WHIT">	</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0001</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2948</span> </span><span class="WHIT">	</span><span class="NAME">this.keyshares</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2949</span> </span><span class="WHIT">	</span><span class="NAME">this.keyDomains</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2950</span> </span><span class="WHIT">	</span><span class="NAME">this.numberOfPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2951</span> </span><span class="WHIT">	</span><span class="NAME">this.requiredPublicKeysForAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2952</span> </span><span class="WHIT">	</span><span class="NAME">this.bioslot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2953</span> </span><span class="WHIT">	</span><span class="NAME">this.label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2954</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2955</span> 
<span class='line'>2956</span> </span><span class="NAME">exports.SmartCardHSMInitializer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMInitializer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2957</span> 
<span class='line'>2958</span> 
<span class='line'>2959</span> 
<span class='line'>2960</span> </span><span class="COMM">/**
<span class='line'>2961</span>  * Set the initialization code
<span class='line'>2962</span>  *
<span class='line'>2963</span>  * @param {ByteString} initializationCode an 8 byte code
<span class='line'>2964</span>  */</span><span class="WHIT">
<span class='line'>2965</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setInitializationCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">initializationCode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2966</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">initializationCode</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2967</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"initializationCode must be a ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2968</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2969</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">initializationCode.length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2970</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"initializationCode must have 8 bytes"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2971</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2972</span> 
<span class='line'>2973</span> </span><span class="WHIT">	</span><span class="NAME">this.initializationCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">initializationCode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2974</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2975</span> 
<span class='line'>2976</span> 
<span class='line'>2977</span> 
<span class='line'>2978</span> </span><span class="COMM">/**
<span class='line'>2979</span>  * Set the User PIN
<span class='line'>2980</span>  *
<span class='line'>2981</span>  * @param {ByteString} userPIN a 6 to 16 byte code
<span class='line'>2982</span>  */</span><span class="WHIT">
<span class='line'>2983</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setUserPIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">userPIN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2984</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">userPIN</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2985</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"userPIN must be a ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2986</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2987</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">userPIN.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">userPIN.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>2988</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"userPIN must be between 6 and 16 bytes"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2989</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2990</span> 
<span class='line'>2991</span> </span><span class="WHIT">	</span><span class="NAME">this.userPIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">userPIN</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2992</span> </span><span class="WHIT">	</span><span class="NAME">this.userPINSet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2993</span> </span><span class="WHIT">	</span><span class="NAME">this.useDefaultUserPIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>2994</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>2995</span> 
<span class='line'>2996</span> 
<span class='line'>2997</span> 
<span class='line'>2998</span> </span><span class="COMM">/**
<span class='line'>2999</span>  * Set the retry counter
<span class='line'>3000</span>  *
<span class='line'>3001</span>  * The SmartCard-HSM enforces a retry counter &lt;= 3 for PIN length 6
<span class='line'>3002</span>  * The SmartCard-HSM enforces a retry counter &lt;= 5 for PIN length 7
<span class='line'>3003</span>  * The SmartCard-HSM enforces a retry counter &lt;= 10 for PIN length larger than 7
<span class='line'>3004</span>  *
<span class='line'>3005</span>  * @param {Number} retryCounterInitial in the range 1 to 10.
<span class='line'>3006</span>  */</span><span class="WHIT">
<span class='line'>3007</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setRetryCounterInitial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">retryCounterInitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3008</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">retryCounterInitial</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3009</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"retryCounterInitial must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3010</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3011</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">retryCounterInitial</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">retryCounterInitial</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3012</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"retryCounterInitial must be between 1 and 10"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3013</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3014</span> </span><span class="WHIT">	</span><span class="NAME">this.retryCounterInitial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">retryCounterInitial</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3015</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3016</span> 
<span class='line'>3017</span> 
<span class='line'>3018</span> 
<span class='line'>3019</span> </span><span class="COMM">/**
<span class='line'>3020</span>  * Set the number of DKEK shares
<span class='line'>3021</span>  *
<span class='line'>3022</span>  * @param {Number} keyshares number of DKEK shares in the range 0 to 255
<span class='line'>3023</span>  */</span><span class="WHIT">
<span class='line'>3024</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setDKEKShares</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyshares</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3025</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyshares</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3026</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyshares must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3027</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3028</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">keyshares</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyshares</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">255</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3029</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyshares must be between 0 and 255"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3030</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3031</span> </span><span class="WHIT">	</span><span class="NAME">this.keyshares</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyshares</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3032</span> </span><span class="WHIT">	</span><span class="NAME">this.keyDomains</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3033</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3034</span> 
<span class='line'>3035</span> 
<span class='line'>3036</span> 
<span class='line'>3037</span> </span><span class="COMM">/**
<span class='line'>3038</span>  * Set the number of key domains
<span class='line'>3039</span>  *
<span class='line'>3040</span>  * @param {Number} keyDomains number of key domains
<span class='line'>3041</span>  */</span><span class="WHIT">
<span class='line'>3042</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setKeyDomains</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomains</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3043</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyDomains</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3044</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyDomains must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3045</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3046</span> 
<span class='line'>3047</span> </span><span class="WHIT">	</span><span class="NAME">this.keyDomains</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyDomains</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3048</span> </span><span class="WHIT">	</span><span class="NAME">this.keyshares</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3049</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3050</span> 
<span class='line'>3051</span> 
<span class='line'>3052</span> 
<span class='line'>3053</span> </span><span class="COMM">/**
<span class='line'>3054</span>  * Enable or disable RESET RETRY COUNTER command
<span class='line'>3055</span>  *
<span class='line'>3056</span>  * @param {Boolean} enable true (default) to allow RESET RETRY COUNTER command to reset user PIN using the initialization code
<span class='line'>3057</span>  */</span><span class="WHIT">
<span class='line'>3058</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setResetRetryCounterMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">enable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3059</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">enable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3060</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3061</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3062</span> 
<span class='line'>3063</span> </span><span class="WHIT">	</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFFFE</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">enable</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3064</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3065</span> 
<span class='line'>3066</span> 
<span class='line'>3067</span> 
<span class='line'>3068</span> </span><span class="COMM">/**
<span class='line'>3069</span>  * Enable or disable transport PIN mode
<span class='line'>3070</span>  *
<span class='line'>3071</span>  * @param {Boolean} enable true (non-default) to set user PIN to transport state
<span class='line'>3072</span>  */</span><span class="WHIT">
<span class='line'>3073</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setTransportPINMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">enable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3074</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">enable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3075</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3076</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3077</span> 
<span class='line'>3078</span> </span><span class="WHIT">	</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFFFD</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">enable</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3079</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3080</span> 
<span class='line'>3081</span> 
<span class='line'>3082</span> 
<span class='line'>3083</span> </span><span class="COMM">/**
<span class='line'>3084</span>  * Enable or disable session PIN mode
<span class='line'>3085</span>  *
<span class='line'>3086</span>  * @param {Number} 0 - disable, 1 - enable with clear-on-reset 3 - enable with explicit clearing
<span class='line'>3087</span>  */</span><span class="WHIT">
<span class='line'>3088</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setSessionPINMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">mode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3089</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">mode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument mode must be number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3090</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">mode</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">mode</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">mode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument mode must be 0, 1 or 3"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3091</span> 
<span class='line'>3092</span> </span><span class="WHIT">	</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFFF3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">mode</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3093</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3094</span> 
<span class='line'>3095</span> 
<span class='line'>3096</span> 
<span class='line'>3097</span> </span><span class="COMM">/**
<span class='line'>3098</span>  * Enable or disable replacing of a PKA key
<span class='line'>3099</span>  *
<span class='line'>3100</span>  * @param {Boolean} enable true (non-default) to allow replacing of a PKA key
<span class='line'>3101</span>  */</span><span class="WHIT">
<span class='line'>3102</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setReplacePKAKeyMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">enable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3103</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">enable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3104</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3105</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3106</span> 
<span class='line'>3107</span> </span><span class="WHIT">	</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFFF7</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">enable</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3108</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3109</span> 
<span class='line'>3110</span> 
<span class='line'>3111</span> 
<span class='line'>3112</span> </span><span class="COMM">/**
<span class='line'>3113</span>  * Enable the combined authentication mode of user pin and public key authentication.
<span class='line'>3114</span>  *
<span class='line'>3115</span>  * @param {Boolean} enable true (non-default) to require public key authentication and user authentication
<span class='line'>3116</span>  */</span><span class="WHIT">
<span class='line'>3117</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setCombinedAuthenticationMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">enable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3118</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">enable</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3119</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3120</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3121</span> 
<span class='line'>3122</span> </span><span class="WHIT">	</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFFEF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">enable</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3123</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3124</span> 
<span class='line'>3125</span> 
<span class='line'>3126</span> 
<span class='line'>3127</span> </span><span class="COMM">/**
<span class='line'>3128</span>  * If enabled RESET RETRY COUNTER only resets the error counter.
<span class='line'>3129</span>  * Otherwise  RRC allows changing the PIN
<span class='line'>3130</span>  *
<span class='line'>3131</span>  * @param {Boolean} resetOnly true to only reset the error counter, false otherwise (default)
<span class='line'>3132</span>  */</span><span class="WHIT">
<span class='line'>3133</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setResetRetryCounterResetOnlyMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">resetOnly</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3134</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">resetOnly</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3135</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">resetOnly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3136</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3137</span> 
<span class='line'>3138</span> </span><span class="WHIT">	</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFFDF</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">resetOnly</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3139</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3140</span> 
<span class='line'>3141</span> 
<span class='line'>3142</span> 
<span class='line'>3143</span> </span><span class="COMM">/**
<span class='line'>3144</span>  * Set parameter for public key authentication with n-of-m scheme, namely the values for n and m
<span class='line'>3145</span>  *
<span class='line'>3146</span>  * @param {Number} requiredPublicKeysForAuthentication number of key that must be authenticated for access
<span class='line'>3147</span>  * @param {Number} numberOfPublicKeys to register
<span class='line'>3148</span>  */</span><span class="WHIT">
<span class='line'>3149</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setPublicKeyAuthenticationParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">requiredPublicKeysForAuthentication</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">numberOfPublicKeys</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3150</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">numberOfPublicKeys</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">numberOfPublicKeys</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">90</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3151</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"numberOfPublicKeys must be between 1 and 90"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3152</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3153</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">requiredPublicKeysForAuthentication</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">requiredPublicKeysForAuthentication</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">numberOfPublicKeys</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3154</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMInitializer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"requiredPublicKeysForAuthentication must be between 1 and "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">numberOfPublicKeys</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3155</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3156</span> </span><span class="WHIT">	</span><span class="NAME">this.numberOfPublicKeys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">numberOfPublicKeys</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3157</span> </span><span class="WHIT">	</span><span class="NAME">this.requiredPublicKeysForAuthentication</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">requiredPublicKeysForAuthentication</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3158</span> </span><span class="WHIT">	</span><span class="NAME">this.useDefaultUserPIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3159</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3160</span> 
<span class='line'>3161</span> 
<span class='line'>3162</span> 
<span class='line'>3163</span> </span><span class="COMM">/**
<span class='line'>3164</span>  * Select the biometric matching server for a one of the biometric templates
<span class='line'>3165</span>  *
<span class='line'>3166</span>  * @param {Number} slot either 0 or 1 for first or second template
<span class='line'>3167</span>  * @param {ByteString} aid the application identifier of the on-card biometric server
<span class='line'>3168</span>  * @param {Number} param one byte parameter passed to the server during initialization
<span class='line'>3169</span>  */</span><span class="WHIT">
<span class='line'>3170</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setBioTemplate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">slot</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">param</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3171</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">slot</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"slot must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3172</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">slot</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">slot</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"slot must be either 0 or 1"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3173</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">aid</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"aid must be a ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3174</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">param</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"param must be a number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3175</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">param</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">param</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">255</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"param must be between 0 and 255"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3176</span> 
<span class='line'>3177</span> </span><span class="WHIT">	</span><span class="NAME">this.bioslot</span><span class="PUNC">[</span><span class="NAME">slot</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">aid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">param</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">param</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3178</span> </span><span class="WHIT">	</span><span class="NAME">this.useDefaultUserPIN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3179</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3180</span> 
<span class='line'>3181</span> 
<span class='line'>3182</span> 
<span class='line'>3183</span> </span><span class="COMM">/**
<span class='line'>3184</span>  * Set the label to be written to a minimal CIAInfo in EF 2F03
<span class='line'>3185</span>  *
<span class='line'>3186</span>  * @param {String} label the label
<span class='line'>3187</span>  */</span><span class="WHIT">
<span class='line'>3188</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setLabel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3189</span> </span><span class="WHIT">	</span><span class="NAME">this.label</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">label</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3190</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3191</span> 
<span class='line'>3192</span> 
<span class='line'>3193</span> 
<span class='line'>3194</span> </span><span class="COMM">/**
<span class='line'>3195</span>  * Set the provisioning URL to be written to fixed parameter in CB00.
<span class='line'>3196</span>  *
<span class='line'>3197</span>  * @param {String} provisioningURL the URL at which this SE will be provisioned
<span class='line'>3198</span>  */</span><span class="WHIT">
<span class='line'>3199</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setProvisioningURL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">provisioningURL</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3200</span> </span><span class="WHIT">	</span><span class="NAME">this.provisioningURL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">provisioningURL</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3201</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3202</span> 
<span class='line'>3203</span> 
<span class='line'>3204</span> 
<span class='line'>3205</span> </span><span class="COMM">/**
<span class='line'>3206</span>  * Set the key check value of the token management key and the optional salt
<span class='line'>3207</span>  * used for SO-PIN derivation
<span class='line'>3208</span>  *
<span class='line'>3209</span>  * @param {ByteString} kcv the key check value of the token management key
<span class='line'>3210</span>  * @param {ByteString} salt the salt used to derive the SO-PIN
<span class='line'>3211</span>  */</span><span class="WHIT">
<span class='line'>3212</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.setTokenManagementKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">kcv</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">salt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3213</span> </span><span class="WHIT">	</span><span class="NAME">this.tokenManagementKeyKCV</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">kcv</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3214</span> </span><span class="WHIT">	</span><span class="NAME">this.tokenManagementKeySalt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">salt</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3215</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3216</span> 
<span class='line'>3217</span> 
<span class='line'>3218</span> 
<span class='line'>3219</span> </span><span class="COMM">/**
<span class='line'>3220</span>  * Perform Initialization
<span class='line'>3221</span>  */</span><span class="WHIT">
<span class='line'>3222</span> </span><span class="NAME">SmartCardHSMInitializer.prototype.initialize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3223</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT">	</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3224</span> 
<span class='line'>3225</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.userPINSet</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.useDefaultUserPIN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3226</span> </span><span class="WHIT">		</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.userPIN</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3227</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3228</span> 
<span class='line'>3229</span> </span><span class="WHIT">	</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.initializationCode</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3230</span> 
<span class='line'>3231</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.userPINSet</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.useDefaultUserPIN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3232</span> </span><span class="WHIT">		</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x91</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.retryCounterInitial</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3233</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3234</span> 
<span class='line'>3235</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.keyshares</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3236</span> </span><span class="WHIT">		</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x92</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyshares</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3237</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3238</span> 
<span class='line'>3239</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.keyDomains</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3240</span> </span><span class="WHIT">		</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x97</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyDomains</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3241</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3242</span> 
<span class='line'>3243</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.numberOfPublicKeys</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3244</span> </span><span class="WHIT">		</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x93</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.numberOfPublicKeys</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.requiredPublicKeysForAuthentication</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3245</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3246</span> 
<span class='line'>3247</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.bioslot</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3248</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.bioslot</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3249</span> </span><span class="WHIT">		</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x95</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">o.param</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">o.aid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3250</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3251</span> 
<span class='line'>3252</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.bioslot</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3253</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.bioslot</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3254</span> </span><span class="WHIT">		</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x96</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">o.param</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">o.aid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3255</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3256</span> 
<span class='line'>3257</span> </span><span class="WHIT">	</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x50</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s.value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x6A84</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3258</span> 
<span class='line'>3259</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.card.SW</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x6A84</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3260</span> </span><span class="WHIT">		</span><span class="COMM">// Due to the nature of the JCRE, a first call to initialize may run out of memory,</span><span class="WHIT">
<span class='line'>3261</span> </span><span class="WHIT">		</span><span class="COMM">// as the garbage collector for the removed objects is only run during the next</span><span class="WHIT">
<span class='line'>3262</span> </span><span class="WHIT">		</span><span class="COMM">// APDU invocation.</span><span class="WHIT">
<span class='line'>3263</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x50</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s.value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3264</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3265</span> 
<span class='line'>3266</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3267</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3268</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x54</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3269</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x53</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3270</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3271</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3272</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">this.label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3273</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x03</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0500"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>3274</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>3275</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3276</span> 
<span class='line'>3277</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.EF_TokenInfo.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3278</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.EF_TokenInfo.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3279</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD7</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a.value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3280</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3281</span> 
<span class='line'>3282</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.provisioningURL</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.tokenManagementKeyKCV</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.tokenManagementKeySalt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3283</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3284</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.provisioningURL</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3285</span> </span><span class="WHIT">			</span><span class="NAME">l.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">this.provisioningURL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3286</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3287</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.tokenManagementKeyKCV</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3288</span> </span><span class="WHIT">			</span><span class="NAME">l.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.tokenManagementKeyKCV</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3289</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3290</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.tokenManagementKeySalt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3291</span> </span><span class="WHIT">			</span><span class="NAME">l.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.tokenManagementKeySalt</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3292</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3293</span> 
<span class='line'>3294</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3295</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x54</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3296</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x53</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>3297</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3298</span> 
<span class='line'>3299</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.EF_StaticTokenInfo.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3300</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.EF_StaticTokenInfo.byteAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3301</span> </span><span class="WHIT">		</span><span class="NAME">this.card.sendSecMsgApdu</span><span class="PUNC">(</span><span class="NAME">Card.ALL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xD7</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">a.value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0x9000</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3302</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3303</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3304</span> 
<span class='line'>3305</span> 
<span class='line'>3306</span> 
<span class='line'>3307</span> </span><span class="COMM">/**
<span class='line'>3308</span>  * Create a key specification generator instance
<span class='line'>3309</span>  *
<span class='line'>3310</span>  * @class Class implementing an encoder for the C-Data required in GENERATE ASYMMETRIC KEY PAIR
<span class='line'>3311</span>  * @param {Number} keytype must be either Crypto.RSA, Crypto.EC or Crypto.AES
<span class='line'>3312</span>  * @param {Number/Key} keysizeOrDP must be 1024, 1536, 2048, 3072 or 4096 for RSA, 128, 192 or 256 for AES and key object with Key.ECC_CURVE_OID set for EC
<span class='line'>3313</span>  */</span><span class="WHIT">
<span class='line'>3314</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">(</span><span class="NAME">keytype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keysizeOrDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3315</span> </span><span class="WHIT">	</span><span class="NAME">this.keytype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keytype</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3316</span> 
<span class='line'>3317</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">keytype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3318</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>3319</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keysizeOrDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3320</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMKeySpecGenerator"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keysizeIdDP must be of a number for RSA keys"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3321</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3322</span> </span><span class="WHIT">			</span><span class="NAME">this.keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keysizeOrDP</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3323</span> </span><span class="WHIT">			</span><span class="NAME">this.defaultAlgo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-RSA-v1-5-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3324</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3325</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.EC</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>3326</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keysizeOrDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">keysizeOrDP</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3327</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMKeySpecGenerator"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keysizeIdDP must be a Key instance"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3328</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3329</span> </span><span class="WHIT">			</span><span class="NAME">this.domainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keysizeOrDP</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3330</span> </span><span class="WHIT">			</span><span class="NAME">this.defaultAlgo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-TA-ECDSA-SHA-256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3331</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3332</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.AES</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>3333</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keysizeOrDP</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3334</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMKeySpecGenerator"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keysizeIdDP must be of a number for AES keys"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3335</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3336</span> </span><span class="WHIT">			</span><span class="NAME">this.keysize</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keysizeOrDP</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3337</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3338</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>3339</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMKeySpecGenerator"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keytype must be Crypto.RSA or Crypto.EC"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3340</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3341</span> </span><span class="WHIT">	</span><span class="NAME">this.CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="STRN">"UTDUMMY00001"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3342</span> </span><span class="WHIT">	</span><span class="NAME">this.innerCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PublicKeyReference</span><span class="PUNC">(</span><span class="STRN">"UTDUMMY00001"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3343</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3344</span> 
<span class='line'>3345</span> </span><span class="NAME">exports.SmartCardHSMKeySpecGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3346</span> 
<span class='line'>3347</span> 
<span class='line'>3348</span> 
<span class='line'>3349</span> </span><span class="COMM">/**
<span class='line'>3350</span>  * Set key use counter for key
<span class='line'>3351</span>  *
<span class='line'>3352</span>  * @param {keyUseCounter} keyUseCounter in the range 1 to 2^64 - 2
<span class='line'>3353</span>  */</span><span class="WHIT">
<span class='line'>3354</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.setKeyUseCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyUseCounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3355</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">keyUseCounter</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyUseCounter</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0xFFFFFFFF</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3356</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"SmartCardHSMKeySpecGenerator"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"keyUseCounter must be between 0 and 0xFFFFFFFF"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3357</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3358</span> </span><span class="WHIT">	</span><span class="NAME">this.keyUseCounter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyUseCounter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3359</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3360</span> 
<span class='line'>3361</span> 
<span class='line'>3362</span> 
<span class='line'>3363</span> </span><span class="COMM">/**
<span class='line'>3364</span>  * Set key domain
<span class='line'>3365</span>  *
<span class='line'>3366</span>  * @param {Number} keyDomain the key domain to which the key shall be added
<span class='line'>3367</span>  */</span><span class="WHIT">
<span class='line'>3368</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.setKeyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3369</span> </span><span class="WHIT">	</span><span class="NAME">this.keyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3370</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3371</span> 
<span class='line'>3372</span> 
<span class='line'>3373</span> 
<span class='line'>3374</span> </span><span class="COMM">/**
<span class='line'>3375</span>  * Set wrapping key
<span class='line'>3376</span>  *
<span class='line'>3377</span>  * @param {Number} wrappingKey the key to used for wrapping a newly generated symmetric key
<span class='line'>3378</span>  */</span><span class="WHIT">
<span class='line'>3379</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.setWrappingKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">wrappingKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3380</span> </span><span class="WHIT">	</span><span class="NAME">this.wrappingKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">wrappingKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3381</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3382</span> 
<span class='line'>3383</span> 
<span class='line'>3384</span> 
<span class='line'>3385</span> </span><span class="COMM">/**
<span class='line'>3386</span>  * Set algorithm list
<span class='line'>3387</span>  *
<span class='line'>3388</span>  * @param {ByteString} algorithms the list of algorithms allowed for this key
<span class='line'>3389</span>  */</span><span class="WHIT">
<span class='line'>3390</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.setAlgorithms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">algorithms</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3391</span> </span><span class="WHIT">	</span><span class="NAME">this.algorithms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">algorithms</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3392</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3393</span> 
<span class='line'>3394</span> 
<span class='line'>3395</span> 
<span class='line'>3396</span> </span><span class="COMM">/**
<span class='line'>3397</span>  * Set certificate holder reference for key
<span class='line'>3398</span>  *
<span class='line'>3399</span>  * @param {PublicKeyReference} CHR certificate holder reference
<span class='line'>3400</span>  */</span><span class="WHIT">
<span class='line'>3401</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.setCHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">CHR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3402</span> </span><span class="WHIT">	</span><span class="NAME">this.CHR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CHR</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3403</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3404</span> 
<span class='line'>3405</span> 
<span class='line'>3406</span> 
<span class='line'>3407</span> </span><span class="COMM">/**
<span class='line'>3408</span>  * Set certificate holder reference of CA this request shall be sent to
<span class='line'>3409</span>  *
<span class='line'>3410</span>  * @param {PublicKeyReference} CAR certificate holder reference
<span class='line'>3411</span>  */</span><span class="WHIT">
<span class='line'>3412</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.setInnerCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">CAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3413</span> </span><span class="WHIT">	</span><span class="NAME">this.innerCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CAR</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3414</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3415</span> 
<span class='line'>3416</span> 
<span class='line'>3417</span> 
<span class='line'>3418</span> </span><span class="COMM">/**
<span class='line'>3419</span>  * Set holder reference of the key signing this request
<span class='line'>3420</span>  *
<span class='line'>3421</span>  * @param {PublicKeyReference} CAR certificate holder reference
<span class='line'>3422</span>  */</span><span class="WHIT">
<span class='line'>3423</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.setOuterCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">CAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3424</span> </span><span class="WHIT">	</span><span class="NAME">this.outerCAR</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CAR</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3425</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3426</span> 
<span class='line'>3427</span> 
<span class='line'>3428</span> 
<span class='line'>3429</span> </span><span class="COMM">/**
<span class='line'>3430</span>  * @private
<span class='line'>3431</span>  */</span><span class="WHIT">
<span class='line'>3432</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.encodeRSAKeySpec</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3433</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Key"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F49</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3434</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Object Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x06</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.defaultAlgo</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3435</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Key Exponent"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NUMB">65537</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3436</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Key Size"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x02</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keysize</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>3437</span> </span><span class="WHIT">		</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3438</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3439</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3440</span> 
<span class='line'>3441</span> 
<span class='line'>3442</span> 
<span class='line'>3443</span> </span><span class="COMM">/**
<span class='line'>3444</span>  * @private
<span class='line'>3445</span>  */</span><span class="WHIT">
<span class='line'>3446</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.encodeECKeySpec</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3447</span> </span><span class="WHIT">	</span><span class="COMM">// Encode G</span><span class="WHIT">
<span class='line'>3448</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3449</span> </span><span class="WHIT">	</span><span class="COMM">// uncompressed encoding</span><span class="WHIT">
<span class='line'>3450</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3451</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.domainParameter.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3452</span> </span><span class="WHIT">	</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">this.domainParameter.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3453</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">G</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3454</span> 
<span class='line'>3455</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Public Key"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x7F49</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3456</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Object Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x06</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.defaultAlgo</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3457</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Prime Modulus"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.domainParameter.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3458</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"First coefficient a"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.domainParameter.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3459</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Second coefficient b"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x83</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.domainParameter.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3460</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Base Point G"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x84</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">G</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3461</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Order of the base point"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x85</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.domainParameter.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>3462</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Cofactor f"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x87</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM.stripLeadingZeros</span><span class="PUNC">(</span><span class="NAME">this.domainParameter.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>3463</span> </span><span class="WHIT">		</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3464</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3465</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3466</span> 
<span class='line'>3467</span> 
<span class='line'>3468</span> 
<span class='line'>3469</span> </span><span class="COMM">/**
<span class='line'>3470</span>  * @private
<span class='line'>3471</span>  */</span><span class="WHIT">
<span class='line'>3472</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.encodeKeySpec</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3473</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.keytype</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3474</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.encodeRSAKeySpec</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3475</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3476</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.encodeECKeySpec</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3477</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3478</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3479</span> 
<span class='line'>3480</span> 
<span class='line'>3481</span> 
<span class='line'>3482</span> </span><span class="COMM">/**
<span class='line'>3483</span>  * Return the encoded key specification
<span class='line'>3484</span>  *
<span class='line'>3485</span>  * @type ByteString
<span class='line'>3486</span>  * @return the encoded C-Data for GENERATE ASYMMETRIC KEY PAIR
<span class='line'>3487</span>  */</span><span class="WHIT">
<span class='line'>3488</span> </span><span class="NAME">SmartCardHSMKeySpecGenerator.prototype.encode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3489</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3490</span> 
<span class='line'>3491</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.keytype</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">Crypto.AES</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3492</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CPI"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F29</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3493</span> 
<span class='line'>3494</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.innerCAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.innerCAR</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3495</span> </span><span class="WHIT">			</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CAR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x42</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.innerCAR.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3496</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3497</span> 
<span class='line'>3498</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.encodeKeySpec</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3499</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"CHR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x5F20</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.CHR.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3500</span> 
<span class='line'>3501</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.outerCAR</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3502</span> </span><span class="WHIT">			</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"OuterCAR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x45</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.outerCAR.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3503</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3504</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3505</span> 
<span class='line'>3506</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.keyUseCounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3507</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Key use counter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x90</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyUseCounter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3508</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3509</span> 
<span class='line'>3510</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.algorithms</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3511</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Algorithms"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x91</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.algorithms</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3512</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3513</span> 
<span class='line'>3514</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3515</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"KeyDomain"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x92</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyDomain</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3516</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3517</span> 
<span class='line'>3518</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.wrappingKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3519</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Wrapping Key"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x93</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.wrappingKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3520</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3521</span> 
<span class='line'>3522</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3523</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3524</span> 
<span class='line'>3525</span> 
<span class='line'>3526</span> 
<span class='line'>3527</span> </span><span class="COMM">/**
<span class='line'>3528</span>  * Create a key specification generator instance for AES keys
<span class='line'>3529</span>  *
<span class='line'>3530</span>  * @class Class implementing an encoder for the C-Data required in Generate Symmetric Key
<span class='line'>3531</span>  * @param {ByteString} allowedAlgorithms the list of allowed algorithm identifier
<span class='line'>3532</span>  */</span><span class="WHIT">
<span class='line'>3533</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMSymmetricKeySpecGenerator</span><span class="PUNC">(</span><span class="NAME">allowedAlgorithms</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3534</span> </span><span class="WHIT">	</span><span class="NAME">this.algorithms</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">allowedAlgorithms</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3535</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3536</span> 
<span class='line'>3537</span> </span><span class="NAME">exports.SmartCardHSMSymmetricKeySpecGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMSymmetricKeySpecGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3538</span> 
<span class='line'>3539</span> 
<span class='line'>3540</span> 
<span class='line'>3541</span> </span><span class="COMM">/**
<span class='line'>3542</span>  * Set key domain
<span class='line'>3543</span>  *
<span class='line'>3544</span>  * @param {Number} keyDomain the key domain to which the key shall be added
<span class='line'>3545</span>  */</span><span class="WHIT">
<span class='line'>3546</span> </span><span class="NAME">SmartCardHSMSymmetricKeySpecGenerator.prototype.setKeyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3547</span> </span><span class="WHIT">	</span><span class="NAME">this.keyDomain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyDomain</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3548</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3549</span> 
<span class='line'>3550</span> 
<span class='line'>3551</span> 
<span class='line'>3552</span> </span><span class="COMM">/**
<span class='line'>3553</span>  * Return the encoded AES key specification
<span class='line'>3554</span>  *
<span class='line'>3555</span>  * @type ByteString
<span class='line'>3556</span>  * @return the encoded C-Data for Generate Symmetric Key
<span class='line'>3557</span>  */</span><span class="WHIT">
<span class='line'>3558</span> </span><span class="NAME">SmartCardHSMSymmetricKeySpecGenerator.prototype.encode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3559</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x30</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3560</span> 
<span class='line'>3561</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Algorithms"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x91</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.algorithms</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3562</span> 
<span class='line'>3563</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.keyUseCounter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3564</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Key use counter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x90</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyUseCounter</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3565</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3566</span> 
<span class='line'>3567</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3568</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Key Domain"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x92</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">this.keyDomain</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3569</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3570</span> 
<span class='line'>3571</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.wrappingKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3572</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"Wrapping Key"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x93</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.wrappingKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3573</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3574</span> 
<span class='line'>3575</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t.value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3576</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3577</span> 
<span class='line'>3578</span> 
<span class='line'>3579</span> 
<span class='line'>3580</span> </span><span class="NAME">SmartCardHSM.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>3581</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3582</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">card</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Card</span><span class="PUNC">(</span><span class="NAME">_scsh3.reader</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3583</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSM</span><span class="PUNC">(</span><span class="NAME">card</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3584</span> 
<span class='line'>3585</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sci</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMInitializer</span><span class="PUNC">(</span><span class="NAME">card</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3586</span> </span><span class="WHIT">	</span><span class="NAME">sci.initialize</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3587</span> 
<span class='line'>3588</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc.validateCertificateChain</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3589</span> </span><span class="WHIT">	</span><span class="NAME">sc.openSecureChannel</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3590</span> 
<span class='line'>3591</span> </span><span class="WHIT">	</span><span class="NAME">sc.verifyUserPIN</span><span class="PUNC">(</span><span class="NAME">sci.userPIN</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3592</span> 
<span class='line'>3593</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1024</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3594</span> </span><span class="WHIT">	</span><span class="NAME">sc.generateAsymmetricKeyPair</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kg.encode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3595</span> 
<span class='line'>3596</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3597</span> </span><span class="WHIT">	</span><span class="NAME">dp.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3598</span> 
<span class='line'>3599</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">SmartCardHSMKeySpecGenerator</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3600</span> </span><span class="WHIT">	</span><span class="NAME">sc.generateAsymmetricKeyPair</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">kg.encode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3601</span> 
<span class='line'>3602</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc.enumerateKeys</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3603</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Keys on device: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3604</span> 
<span class='line'>3605</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3606</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">message</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"Hello World"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3607</span> 
<span class='line'>3608</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc.getKey</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3609</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.sign</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA256</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3610</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Signature: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3611</span> 
<span class='line'>3612</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sc.getKey</span><span class="PUNC">(</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3613</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.sign</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">message</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3614</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Signature: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>3615</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>3616</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview
<span class='line'> 25</span>  * Simple CRL generator class
<span class='line'> 26</span>  */</span><span class="WHIT">
<span class='line'> 27</span> 
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/x509/PKIXCommon"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKIXCommon</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> 
<span class='line'> 32</span> </span><span class="COMM">/**
<span class='line'> 33</span>  * Create a Certificate Revocation List (CRL) generator.
<span class='line'> 34</span>  *
<span class='line'> 35</span>  * @class Class implementing a CRL certificate generator
<span class='line'> 36</span>  * @constructor
<span class='line'> 37</span>  *
<span class='line'> 38</span>  * @param {Crypto} crypto the crypto provider to use for signing operations
<span class='line'> 39</span>  */</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">CRLGenerator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 44</span> 
<span class='line'> 45</span> </span><span class="NAME">exports.CRLGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CRLGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> 
<span class='line'> 47</span> 
<span class='line'> 48</span> </span><span class="NAME">CRLGenerator.unspecified</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="NAME">CRLGenerator.keyCompromise</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="NAME">CRLGenerator.cACompromise</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="NAME">CRLGenerator.affiliationChanged</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="NAME">CRLGenerator.superseded</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="NAME">CRLGenerator.cessationOfOperation</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="NAME">CRLGenerator.certificateHold</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">6</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="NAME">CRLGenerator.removeFromCRL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="NAME">CRLGenerator.privilegeWithdrawn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">9</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="NAME">CRLGenerator.aACompromise</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">10</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> 
<span class='line'> 59</span> 
<span class='line'> 60</span> 
<span class='line'> 61</span> </span><span class="COMM">/**
<span class='line'> 62</span>  * Resets all internal state variables.
<span class='line'> 63</span>  *
<span class='line'> 64</span>  */</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="NAME">CRLGenerator.prototype.reset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">	</span><span class="NAME">this.extensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">	</span><span class="NAME">this.revokedCertificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT">	</span><span class="NAME">this.nextUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 70</span> 
<span class='line'> 71</span> 
<span class='line'> 72</span> 
<span class='line'> 73</span> </span><span class="COMM">/**
<span class='line'> 74</span>  * Sets the isser name.
<span class='line'> 75</span>  *
<span class='line'> 76</span>  * &lt;p>The issuer name must be a JavaScript object containing the properties:&lt;/p>
<span class='line'> 77</span>  * &lt;ul>
<span class='line'> 78</span>  *  &lt;li>C - the country&lt;/li>
<span class='line'> 79</span>  *  &lt;li>O - the organization&lt;/li>
<span class='line'> 80</span>  *  &lt;li>OU - the organization unit&lt;/li>
<span class='line'> 81</span>  *  &lt;li>CN - the common name&lt;/li>
<span class='line'> 82</span>  * &lt;/ul>
<span class='line'> 83</span>  * &lt;p>Example:&lt;/p>
<span class='line'> 84</span>  * &lt;pre>
<span class='line'> 85</span>  *	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
<span class='line'> 86</span>  * &lt;/pre>
<span class='line'> 87</span>  * @param {Object} issuer the issuer name
<span class='line'> 88</span>  */</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="NAME">CRLGenerator.prototype.setIssuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">issuer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="NAME">this.issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 92</span> 
<span class='line'> 93</span> 
<span class='line'> 94</span> 
<span class='line'> 95</span> </span><span class="COMM">/**
<span class='line'> 96</span>  * Sets the timestamp for this CRL
<span class='line'> 97</span>  *
<span class='line'> 98</span>  * @param {Date} datetime the current date and time
<span class='line'> 99</span>  */</span><span class="WHIT">
<span class='line'>100</span> </span><span class="NAME">CRLGenerator.prototype.setThisUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">datetime</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">	</span><span class="NAME">this.thisUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">datetime</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>103</span> 
<span class='line'>104</span> 
<span class='line'>105</span> 
<span class='line'>106</span> </span><span class="COMM">/**
<span class='line'>107</span>  * Sets the timestamp for the next update
<span class='line'>108</span>  *
<span class='line'>109</span>  * @param {Date} datetime the date and time of the next update
<span class='line'>110</span>  */</span><span class="WHIT">
<span class='line'>111</span> </span><span class="NAME">CRLGenerator.prototype.setNextUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">datetime</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">	</span><span class="NAME">this.nextUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">datetime</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>113</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>114</span> 
<span class='line'>115</span> 
<span class='line'>116</span> 
<span class='line'>117</span> </span><span class="COMM">/**
<span class='line'>118</span>  * Sets the signature algorithm.
<span class='line'>119</span>  *
<span class='line'>120</span>  * @param {Number} alg the signature algorithm, must be one of Crypto.RSA, Crypto.RSA_SHA256 or Crypto.ECDSA_SHA256
<span class='line'>121</span>  */</span><span class="WHIT">
<span class='line'>122</span> </span><span class="NAME">CRLGenerator.prototype.setSignatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="NAME">this.signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>125</span> 
<span class='line'>126</span> 
<span class='line'>127</span> 
<span class='line'>128</span> </span><span class="COMM">/**
<span class='line'>129</span>  * Adds an extension to the CRL
<span class='line'>130</span>  *
<span class='line'>131</span>  * &lt;p>The structure is defined as:&lt;/p>
<span class='line'>132</span>  * &lt;pre>
<span class='line'>133</span>  *    Extension  ::=  SEQUENCE  {
<span class='line'>134</span>  *        extnID      OBJECT IDENTIFIER,
<span class='line'>135</span>  *        critical    BOOLEAN DEFAULT FALSE,
<span class='line'>136</span>  *        extnValue   OCTET STRING
<span class='line'>137</span>  *                    -- contains the DER encoding of an ASN.1 value
<span class='line'>138</span>  *                    -- corresponding to the extension type identified
<span class='line'>139</span>  *                    -- by extnID
<span class='line'>140</span>  *        }
<span class='line'>141</span>  *&lt;/pre>
<span class='line'>142</span>  * @param {String} extnID the extensions object identifier
<span class='line'>143</span>  * @param {Boolean} critical the extension is critical
<span class='line'>144</span>  * @param {ByteString} the extension value as ByteString
<span class='line'>145</span>  */</span><span class="WHIT">
<span class='line'>146</span> </span><span class="NAME">CRLGenerator.prototype.addExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">extnID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">critical</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extnValue</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extension"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extnID"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">extnID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> 
<span class='line'>151</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">critical</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"critical"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BOOLEAN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"FF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>154</span> 
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extnValue"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extnValue</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="NAME">this.extensions.push</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> 
<span class='line'>158</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>159</span> 
<span class='line'>160</span> 
<span class='line'>161</span> 
<span class='line'>162</span> </span><span class="COMM">/**
<span class='line'>163</span>  * Adds the authority public key identifier extension based on the issuers key.
<span class='line'>164</span>  *
<span class='line'>165</span>  * &lt;p>The key identifier is calculated as SHA-1 hash over the contents of the
<span class='line'>166</span>  * issuer public key (Without tag, length and number of unused bits.&lt;/p>
<span class='line'>167</span>  */</span><span class="WHIT">
<span class='line'>168</span> </span><span class="NAME">CRLGenerator.prototype.addAuthorityKeyIdentifierExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createRSASubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createECSubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.encodeECDomainParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>174</span> 
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyvalue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spi.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyvalue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> 
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"id-ce-authorityKeyIdentifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>183</span> 
<span class='line'>184</span> 
<span class='line'>185</span> 
<span class='line'>186</span> </span><span class="COMM">/**
<span class='line'>187</span>  * Adds the CRL number extension.
<span class='line'>188</span>  *
<span class='line'>189</span>  */</span><span class="WHIT">
<span class='line'>190</span> </span><span class="NAME">CRLGenerator.prototype.addCRLNumberExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crlnumber</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">					</span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">crlnumber</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"id-ce-cRLNumber"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>196</span> 
<span class='line'>197</span> 
<span class='line'>198</span> 
<span class='line'>199</span> </span><span class="COMM">/**
<span class='line'>200</span>  * Add a revoked certificate to the list. This adds the complete DER encoded structure.
<span class='line'>201</span>  *
<span class='line'>202</span>  * @param {ASN1} revokedCertificate the information related to the revoked certificate
<span class='line'>203</span>  */</span><span class="WHIT">
<span class='line'>204</span> </span><span class="NAME">CRLGenerator.prototype.addRevokedCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">revokedCertificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="NAME">this.revokedCertificates.push</span><span class="PUNC">(</span><span class="NAME">revokedCertificate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>207</span> 
<span class='line'>208</span> 
<span class='line'>209</span> 
<span class='line'>210</span> </span><span class="NAME">CRLGenerator.prototype.createInvalidityDateExt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">invalidityDate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extension"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extnID"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">				 </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-ce-invalidityDate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> 
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">extnValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"invalidityDate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.GeneralizedTime</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">				 </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.dtoUTCFullYear</span><span class="PUNC">(</span><span class="NAME">invalidityDate</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> 
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extnValue"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extnValue.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> 
<span class='line'>220</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>222</span> 
<span class='line'>223</span> 
<span class='line'>224</span> </span><span class="COMM">/**
<span class='line'>225</span>  * Add a revoked certificate to the list. This adds the complete DER encoded structure.
<span class='line'>226</span>  *
<span class='line'>227</span>  * @param {ByteString} serial the serial number of the certificate to revoke
<span class='line'>228</span>  * @param {Date} timestamp the revocation time, optional, default is now
<span class='line'>229</span>  * @param {Number} reason the revocation reason
<span class='line'>230</span>  * @param {ASN1} ext the crl entry extensions
<span class='line'>231</span>  */</span><span class="WHIT">
<span class='line'>232</span> </span><span class="NAME">CRLGenerator.prototype.revokeCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">serial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">timestamp</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">reason</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">timestamp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">		</span><span class="NAME">timestamp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"revokedCertificate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"userCertificate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">serial</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"revocationTime"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.UTCTime</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.dtoUTC</span><span class="PUNC">(</span><span class="NAME">timestamp</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> 
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">ext</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">		</span><span class="NAME">ext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"crlExtensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>244</span> 
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">reason</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">reason</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">		</span><span class="NAME">ext.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"reason"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extnID"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-ce-cRLReasons"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extnValue"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">						</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"cRLReason"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.ENUMERATED</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">reason</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>253</span> 
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ext.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">ext</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>257</span> 
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="NAME">this.revokedCertificates.push</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>260</span> 
<span class='line'>261</span> 
<span class='line'>262</span> 
<span class='line'>263</span> </span><span class="COMM">/**
<span class='line'>264</span>  * Load list of revoked certificates from an existing CRL
<span class='line'>265</span>  *
<span class='line'>266</span>  * @param {ByteString} crlbin the DER encoded CRL
<span class='line'>267</span>  * @type Number
<span class='line'>268</span>  * @return the value of the CRLNumber extension, 0 if extension not defined or -1 if file could not be loaded
<span class='line'>269</span>  */</span><span class="WHIT">
<span class='line'>270</span> </span><span class="NAME">CRLGenerator.prototype.loadCRLEntries</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crlbin</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crlnumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>272</span> 
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">crlbin</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">		</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">crl</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tbs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crl.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tbs.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tbs.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// Skip version if present</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">			</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">		</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">		</span><span class="COMM">// Skip signature, issuer, thisUpdate</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tbs.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tbs.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.UTCTime</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// nextUpdate if present</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">			</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tbs.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tbs.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">			</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tbs.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">				</span><span class="NAME">this.revokedCertificates.push</span><span class="PUNC">(</span><span class="NAME">tbs.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">			</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">tbs.elements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">tbs.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tbs.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-ce-cRLNumber"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">			</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">l.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">l.get</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ext.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.equals</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">extval</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ext.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">					</span><span class="NAME">crlnumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">extval.value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>301</span> 
<span class='line'>302</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>304</span> </span><span class="WHIT">	</span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.trace</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">crlnumber</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>310</span> 
<span class='line'>311</span> 
<span class='line'>312</span> 
<span class='line'>313</span> </span><span class="COMM">/**
<span class='line'>314</span>  * Gets the issuer name as TLV object
<span class='line'>315</span>  *
<span class='line'>316</span>  * @return the issuer RDNSequence
<span class='line'>317</span>  * @type ASN1
<span class='line'>318</span>  */</span><span class="WHIT">
<span class='line'>319</span> </span><span class="NAME">CRLGenerator.prototype.getIssuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>320</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.issuer</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>321</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.issuer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.encodeName</span><span class="PUNC">(</span><span class="NAME">this.issuer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>325</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>326</span> 
<span class='line'>327</span> 
<span class='line'>328</span> 
<span class='line'>329</span> </span><span class="COMM">/**
<span class='line'>330</span>  * Gets the thisUpdate TLV object
<span class='line'>331</span>  *
<span class='line'>332</span>  * @return the thisUpdate UTC encoded time
<span class='line'>333</span>  * @type ASN1
<span class='line'>334</span>  */</span><span class="WHIT">
<span class='line'>335</span> </span><span class="NAME">CRLGenerator.prototype.getThisUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"thisUpdate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.UTCTime</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.dtoUTC</span><span class="PUNC">(</span><span class="NAME">this.thisUpdate</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>338</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>339</span> 
<span class='line'>340</span> 
<span class='line'>341</span> 
<span class='line'>342</span> </span><span class="COMM">/**
<span class='line'>343</span>  * Gets the nextUpdate TLV object
<span class='line'>344</span>  *
<span class='line'>345</span>  * @return the nextUpdate UTC encoded time
<span class='line'>346</span>  * @type ASN1
<span class='line'>347</span>  */</span><span class="WHIT">
<span class='line'>348</span> </span><span class="NAME">CRLGenerator.prototype.getNextUpdate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"nextUpdate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.UTCTime</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.dtoUTC</span><span class="PUNC">(</span><span class="NAME">this.nextUpdate</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>352</span> 
<span class='line'>353</span> 
<span class='line'>354</span> 
<span class='line'>355</span> </span><span class="COMM">/**
<span class='line'>356</span>  * Gets the signature algorithm TLV object
<span class='line'>357</span>  *
<span class='line'>358</span>  * @return the signature algorithm object
<span class='line'>359</span>  * @type ASN1
<span class='line'>360</span>  */</span><span class="WHIT">
<span class='line'>361</span> </span><span class="NAME">CRLGenerator.prototype.getSignatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.encodeSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">this.signatureAlgorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>364</span> 
<span class='line'>365</span> 
<span class='line'>366</span> 
<span class='line'>367</span> </span><span class="COMM">/**
<span class='line'>368</span>  * Gets revoked certificates
<span class='line'>369</span>  *
<span class='line'>370</span>  * @return the list of revoked certificates
<span class='line'>371</span>  * @type ASN1
<span class='line'>372</span>  */</span><span class="WHIT">
<span class='line'>373</span> </span><span class="NAME">CRLGenerator.prototype.getRevokedCertificates</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"revokedCertificates"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.revokedCertificates.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.revokedCertificates</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>380</span> 
<span class='line'>381</span> 
<span class='line'>382</span> 
<span class='line'>383</span> </span><span class="COMM">/**
<span class='line'>384</span>  * Gets the CRL extension as TLV object
<span class='line'>385</span>  *
<span class='line'>386</span>  * @return the CRL extensions
<span class='line'>387</span>  * @type ASN1
<span class='line'>388</span>  */</span><span class="WHIT">
<span class='line'>389</span> </span><span class="NAME">CRLGenerator.prototype.getExtensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>390</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>391</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>392</span> 
<span class='line'>393</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>394</span> 
<span class='line'>395</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.extensions.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">		</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="NAME">this.extensions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>399</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>400</span> 
<span class='line'>401</span> 
<span class='line'>402</span> 
<span class='line'>403</span> </span><span class="COMM">/**
<span class='line'>404</span>  * Gets the part of the CRL that will be signed
<span class='line'>405</span>  *
<span class='line'>406</span>  * @return the TBSCertificate part
<span class='line'>407</span>  * @type ASN1
<span class='line'>408</span>  */</span><span class="WHIT">
<span class='line'>409</span> </span><span class="NAME">CRLGenerator.prototype.getTbsCertificateList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"tbsCertList"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>411</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"version"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>412</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getSignatureAlgorithm</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getIssuer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getThisUpdate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.nextUpdate</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getNextUpdate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.revokedCertificates.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getRevokedCertificates</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>421</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.extensions.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>422</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getExtensions</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>426</span> 
<span class='line'>427</span> 
<span class='line'>428</span> 
<span class='line'>429</span> </span><span class="COMM">/**
<span class='line'>430</span>  * Generates the certificate.
<span class='line'>431</span>  *
<span class='line'>432</span>  * @return the generated certificate
<span class='line'>433</span>  * @type X509
<span class='line'>434</span>  */</span><span class="WHIT">
<span class='line'>435</span> </span><span class="NAME">CRLGenerator.prototype.generateCRL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>436</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"certificateList"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>437</span> 
<span class='line'>438</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tbs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getTbsCertificateList</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>439</span> </span><span class="WHIT">	</span><span class="NAME">certlist.add</span><span class="PUNC">(</span><span class="NAME">tbs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>440</span> </span><span class="WHIT">	</span><span class="NAME">certlist.add</span><span class="PUNC">(</span><span class="NAME">this.getSignatureAlgorithm</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>441</span> 
<span class='line'>442</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.signatureAlgorithm</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tbs.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>443</span> </span><span class="WHIT">	</span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>444</span> 
<span class='line'>445</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"signatureValue"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>446</span> </span><span class="WHIT">	</span><span class="NAME">certlist.add</span><span class="PUNC">(</span><span class="NAME">signatureValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>447</span> 
<span class='line'>448</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">certlist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>449</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>450</span> 
<span class='line'>451</span> 
<span class='line'>452</span> 
<span class='line'>453</span> </span><span class="NAME">CRLGenerator.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>454</span> 
<span class='line'>455</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> 
<span class='line'>457</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">caPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>458</span> </span><span class="WHIT">	</span><span class="NAME">caPrivateKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>459</span> 
<span class='line'>460</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">caPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> </span><span class="WHIT">	</span><span class="NAME">caPublicKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>462</span> </span><span class="WHIT">	</span><span class="NAME">caPublicKey.setSize</span><span class="PUNC">(</span><span class="NUMB">1024</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>463</span> 
<span class='line'>464</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">caPublicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">caPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span> 
<span class='line'>466</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CRLGenerator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>467</span> 
<span class='line'>468</span> </span><span class="WHIT">	</span><span class="NAME">x.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>469</span> </span><span class="WHIT">	</span><span class="NAME">x.setSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>470</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">C</span><span class="PUNC">:</span><span class="STRN">"UT"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">O</span><span class="PUNC">:</span><span class="STRN">"ACME Corporation"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">CN</span><span class="PUNC">:</span><span class="STRN">"Test-CA"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>471</span> </span><span class="WHIT">	</span><span class="NAME">x.setIssuer</span><span class="PUNC">(</span><span class="NAME">issuer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">now</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>473</span> </span><span class="WHIT">	</span><span class="NAME">x.setThisUpdate</span><span class="PUNC">(</span><span class="NAME">now</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>474</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextMonth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>475</span> </span><span class="WHIT">	</span><span class="NAME">nextMonth.setMonth</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">now.getMonth</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">12</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>476</span> </span><span class="WHIT">	</span><span class="NAME">x.setNextUpdate</span><span class="PUNC">(</span><span class="NAME">nextMonth</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>477</span> </span><span class="WHIT">	</span><span class="NAME">x.addAuthorityKeyIdentifierExtension</span><span class="PUNC">(</span><span class="NAME">caPublicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>478</span> </span><span class="WHIT">	</span><span class="NAME">x.addCRLNumberExtension</span><span class="PUNC">(</span><span class="NUMB">11</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>479</span> 
<span class='line'>480</span> </span><span class="WHIT">	</span><span class="NAME">x.revokeCertificate</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">	</span><span class="NAME">x.revokeCertificate</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"80"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">	</span><span class="NAME">x.revokeCertificate</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"80"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.keyCompromise</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>483</span> </span><span class="WHIT">	</span><span class="NAME">x.revokeCertificate</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"80"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.superseded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"crlExtensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>484</span> 
<span class='line'>485</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">extensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"crlExtensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>486</span> </span><span class="WHIT">	</span><span class="NAME">extensions.add</span><span class="PUNC">(</span><span class="NAME">x.createInvalidityDateExt</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>487</span> </span><span class="WHIT"> 	</span><span class="NAME">x.revokeCertificate</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"80"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.superseded</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extensions</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>488</span> 
<span class='line'>489</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x.generateCRL</span><span class="PUNC">(</span><span class="NAME">caPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>490</span> 
<span class='line'>491</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSystem.mapFilename</span><span class="PUNC">(</span><span class="STRN">"crl.crl"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPSystem.USR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>492</span> </span><span class="WHIT">	</span><span class="NAME">PKIXCommon.writeFileToDisk</span><span class="PUNC">(</span><span class="NAME">fn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">crl.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>493</span> 
<span class='line'>494</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">crl</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>495</span> 
<span class='line'>496</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CRLGenerator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>497</span> </span><span class="WHIT">	</span><span class="NAME">x.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>498</span> </span><span class="WHIT">	</span><span class="NAME">x.setSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>499</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">C</span><span class="PUNC">:</span><span class="STRN">"UT"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">O</span><span class="PUNC">:</span><span class="STRN">"ACME Corporation"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">CN</span><span class="PUNC">:</span><span class="STRN">"Test-CA"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>500</span> </span><span class="WHIT">	</span><span class="NAME">x.setIssuer</span><span class="PUNC">(</span><span class="NAME">issuer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">now</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT">	</span><span class="NAME">x.setThisUpdate</span><span class="PUNC">(</span><span class="NAME">now</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextMonth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT">	</span><span class="NAME">nextMonth.setMonth</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">now.getMonth</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">12</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">	</span><span class="NAME">x.setNextUpdate</span><span class="PUNC">(</span><span class="NAME">nextMonth</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crlnumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x.loadCRLEntries</span><span class="PUNC">(</span><span class="NAME">crl.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>507</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">crlnumber</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">11</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>508</span> </span><span class="WHIT">	</span><span class="NAME">x.addAuthorityKeyIdentifierExtension</span><span class="PUNC">(</span><span class="NAME">caPublicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>509</span> </span><span class="WHIT">	</span><span class="NAME">x.addCRLNumberExtension</span><span class="PUNC">(</span><span class="NAME">crlnumber</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>510</span> 
<span class='line'>511</span> </span><span class="WHIT">	</span><span class="NAME">x.revokeCertificate</span><span class="PUNC">(</span><span class="NAME">crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.keyCompromise</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>512</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x.generateCRL</span><span class="PUNC">(</span><span class="NAME">caPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>513</span> </span><span class="COMM">//	PKIXCommon.writeFileToDisk(fn, crl.getBytes());</span><span class="WHIT">
<span class='line'>514</span> 
<span class='line'>515</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">crl</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>516</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>517</span> 
<span class='line'>518</span> 
<span class='line'>519</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2016 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Encoder for Distinguished Names using input data and a mask
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="WHIT">			</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/x509/PKIXCommon"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKIXCommon</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> 
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> </span><span class="COMM">/**
<span class='line'> 32</span>  * An instance of this class allow generating a Distinguished Name from components
<span class='line'> 33</span>  * defined in the mask given as constructor. The mask may contain placeholders in the
<span class='line'> 34</span>  * form ${major.minor} that are resolved against other DNs and objects set with setDN() or
<span class='line'> 35</span>  * setMap().
<span class='line'> 36</span>  *
<span class='line'> 37</span>  * @constructor
<span class='line'> 38</span>  * @param {String} mask the mask for generating the DN
<span class='line'> 39</span>  */</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">DNEncoder</span><span class="PUNC">(</span><span class="NAME">mask</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.dnmask</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.parseDN</span><span class="PUNC">(</span><span class="NAME">mask</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.dnmap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="WHIT">	</span><span class="NAME">this.objmap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="NAME">exports.DNEncoder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">DNEncoder</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> 
<span class='line'> 48</span> 
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="COMM">/**
<span class='line'> 51</span>  * Register a DN under the given name. Elements in the DN can be referenced by ${major.minor}
<span class='line'> 52</span>  * with major set to the name given as argument and minor being the component in the given DN.
<span class='line'> 53</span>  *
<span class='line'> 54</span>  * @param {String} name the name for the major key
<span class='line'> 55</span>  * @param {String/Object} dn the Distinguished Name given as String or in the format returned by PKIXCommon.parseDN.
<span class='line'> 56</span>  */</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="NAME">DNEncoder.prototype.setDN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">dn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">		</span><span class="NAME">dn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.parseDN</span><span class="PUNC">(</span><span class="NAME">dn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">	</span><span class="NAME">this.dnmap</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dn</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> 
<span class='line'> 64</span> 
<span class='line'> 65</span> 
<span class='line'> 66</span> </span><span class="COMM">/**
<span class='line'> 67</span>  * Register an object and it properties the given name. Elements in the object can be referenced by ${major.minor}
<span class='line'> 68</span>  * with major set to the name given as argument and minor being the member of the given object.
<span class='line'> 69</span>  *
<span class='line'> 70</span>  * @param {String} name the name for the major key
<span class='line'> 71</span>  * @param {Object} map the map object
<span class='line'> 72</span>  */</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="NAME">DNEncoder.prototype.setMap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">map</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">	</span><span class="NAME">this.objmap</span><span class="PUNC">[</span><span class="NAME">name</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">map</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 76</span> 
<span class='line'> 77</span> 
<span class='line'> 78</span> 
<span class='line'> 79</span> </span><span class="COMM">/**
<span class='line'> 80</span>  * Replace key with value from DN
<span class='line'> 81</span>  * @private
<span class='line'> 82</span>  * @param {Object} o the DN object
<span class='line'> 83</span>  * @param {String} major the major key value
<span class='line'> 84</span>  * @param {String} minor the minor key value
<span class='line'> 85</span>  * @type String
<span class='line'> 86</span>  * @return the replacement value
<span class='line'> 87</span>  */</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="NAME">DNEncoder.prototype.replaceFromDN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">major</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minor</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.findRDN</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minor.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Element "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">minor</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found in "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">major</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 95</span> 
<span class='line'> 96</span> 
<span class='line'> 97</span> 
<span class='line'> 98</span> </span><span class="COMM">/**
<span class='line'> 99</span>  * Replace key with value from object
<span class='line'>100</span>  * @private
<span class='line'>101</span>  * @param {Object} o the object
<span class='line'>102</span>  * @param {String} major the major key value
<span class='line'>103</span>  * @param {String} minor the minor key value
<span class='line'>104</span>  * @type String
<span class='line'>105</span>  * @return the replacement value
<span class='line'>106</span>  */</span><span class="WHIT">
<span class='line'>107</span> </span><span class="NAME">DNEncoder.prototype.replaceFromObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">major</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minor</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">[</span><span class="NAME">minor</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Element "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">minor</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found in "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">major</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">o</span><span class="PUNC">[</span><span class="NAME">minor</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>112</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>113</span> 
<span class='line'>114</span> 
<span class='line'>115</span> 
<span class='line'>116</span> </span><span class="COMM">/**
<span class='line'>117</span>  * Replace key
<span class='line'>118</span>  * @private
<span class='line'>119</span>  * @param {String} key the in the format ${major.minor}
<span class='line'>120</span>  * @type String
<span class='line'>121</span>  * @return the replacement value
<span class='line'>122</span>  */</span><span class="WHIT">
<span class='line'>123</span> </span><span class="NAME">DNEncoder.prototype.replace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="REGX">/\$\{(\w+)\.(\w+)\}/</span><span class="PUNC">.</span><span class="NAME">exec</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"The expression "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" is not valid"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>128</span> 
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">major</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">minor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> 
<span class='line'>132</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.dnmap</span><span class="PUNC">[</span><span class="NAME">major</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.replaceFromDN</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">major</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.objmap</span><span class="PUNC">[</span><span class="NAME">major</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> 
<span class='line'>138</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.replaceFromObject</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">major</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown major key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">major</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>144</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>145</span> 
<span class='line'>146</span> 
<span class='line'>147</span> 
<span class='line'>148</span> </span><span class="COMM">/**
<span class='line'>149</span>  * Check key for validity
<span class='line'>150</span>  * @private
<span class='line'>151</span>  * @param {String} key the in the format ${major.minor}
<span class='line'>152</span>  */</span><span class="WHIT">
<span class='line'>153</span> </span><span class="NAME">DNEncoder.prototype.check</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="REGX">/\$\{(\w+)\.(\w+)\}/</span><span class="PUNC">.</span><span class="NAME">exec</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"The expression "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" is not valid"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>158</span> 
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">major</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">minor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">r</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> 
<span class='line'>162</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.dnmap</span><span class="PUNC">[</span><span class="NAME">major</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">PKIXCommon.validRDN.indexOf</span><span class="PUNC">(</span><span class="NAME">minor.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minor</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" is not a supported RDN (Valid RDNs are "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.validRDN</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.objmap</span><span class="PUNC">[</span><span class="NAME">major</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> 
<span class='line'>170</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">o.any</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">o</span><span class="PUNC">[</span><span class="NAME">minor</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown minor key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">minor</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown major key "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">major</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>180</span> 
<span class='line'>181</span> 
<span class='line'>182</span> 
<span class='line'>183</span> </span><span class="COMM">/**
<span class='line'>184</span>  * Iterate replacement strings
<span class='line'>185</span>  * @private
<span class='line'>186</span>  *
<span class='line'>187</span>  * @param {String} func the name of the replacement function
<span class='line'>188</span>  */</span><span class="WHIT">
<span class='line'>189</span> </span><span class="NAME">DNEncoder.prototype.iterate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">func</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> 
<span class='line'>192</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.dnmask.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.dnmask</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nrdn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">rdn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdn</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="COMM">//			print(k + "=" + inp);</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fixed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">inp.split</span><span class="PUNC">(</span><span class="REGX">/\$\{.+?\}/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> </span><span class="COMM">//			print("Fixed[" + fixed.length + "]: " + fixed);</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">inp.match</span><span class="PUNC">(</span><span class="REGX">/\$\{.+?\}/g</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keys</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">				</span><span class="NAME">keys</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>204</span> </span><span class="COMM">//			print("Keys[" + keys.length + "] : " + keys);</span><span class="WHIT">
<span class='line'>205</span> 
<span class='line'>206</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">			</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fixed.length</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keys.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">					</span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fixed</span><span class="PUNC">[</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">					</span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="NAME">func</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">keys</span><span class="PUNC">[</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">			</span><span class="NAME">nrdn</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">		</span><span class="NAME">dn.push</span><span class="PUNC">(</span><span class="NAME">nrdn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dn</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>220</span> 
<span class='line'>221</span> 
<span class='line'>222</span> 
<span class='line'>223</span> </span><span class="COMM">/**
<span class='line'>224</span>  * Encode DN based on mask and previously set objects
<span class='line'>225</span>  *
<span class='line'>226</span>  * @type Object
<span class='line'>227</span>  * @return DN in the format as returned by PKIXCommon.parseDN()
<span class='line'>228</span>  */</span><span class="WHIT">
<span class='line'>229</span> </span><span class="NAME">DNEncoder.prototype.encode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.iterate</span><span class="PUNC">(</span><span class="STRN">"replace"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>231</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>232</span> 
<span class='line'>233</span> 
<span class='line'>234</span> 
<span class='line'>235</span> </span><span class="COMM">/**
<span class='line'>236</span>  * Validate DN mask against previously set reference objects
<span class='line'>237</span>  *
<span class='line'>238</span>  * DN objects can be set with setDN(name, {}). The minor key is validated against the list of
<span class='line'>239</span>  * valid RDN as defined in PKIXCommon.validRDN.
<span class='line'>240</span>  *
<span class='line'>241</span>  * Other objects can be set with setMap(), but only the key names in the map are relevant. If the
<span class='line'>242</span>  * object contains the property "any", then any minor keys are acceptable.
<span class='line'>243</span>  *
<span class='line'>244</span>  * The method will throw an exception if a key is invalid.
<span class='line'>245</span>  */</span><span class="WHIT">
<span class='line'>246</span> </span><span class="NAME">DNEncoder.prototype.validate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.iterate</span><span class="PUNC">(</span><span class="STRN">"check"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>249</span> 
<span class='line'>250</span> 
<span class='line'>251</span> 
<span class='line'>252</span> </span><span class="NAME">DNEncoder.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">DNEncoder</span><span class="PUNC">(</span><span class="STRN">"c=${issuer.c},o=${issuer.o},cn=ABC ${issuer.o}${servicerequest.commonName} DEF"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>254</span> 
<span class='line'>255</span> </span><span class="WHIT">	</span><span class="NAME">d.setDN</span><span class="PUNC">(</span><span class="STRN">"issuer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"c=UT,o=ACME,cn=ACME Root CA"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> 
<span class='line'>257</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">		</span><span class="NAME">commonName</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"Hello"</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>260</span> 
<span class='line'>261</span> </span><span class="WHIT">	</span><span class="NAME">d.setMap</span><span class="PUNC">(</span><span class="STRN">"servicerequest"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span> 
<span class='line'>263</span> </span><span class="WHIT">	</span><span class="NAME">d.validate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.dnToString</span><span class="PUNC">(</span><span class="NAME">d.encode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>266</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview A PKCS#10 generator class based on RFC5280
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/x509/PKIXCommon'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKIXCommon</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> 
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> </span><span class="COMM">/**
<span class='line'> 32</span>  * Create a PKCS#10 certificate request
<span class='line'> 33</span>  *
<span class='line'> 34</span>  * @class Class implementing a PKCS#10 certificate request
<span class='line'> 35</span>  * @constructor
<span class='line'> 36</span>  *
<span class='line'> 37</span>  * @param {Crypto} crypto the crypto provider to use for signing operations
<span class='line'> 38</span>  */</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PKCS10Generator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 43</span> 
<span class='line'> 44</span> </span><span class="NAME">exports.PKCS10Generator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS10Generator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> 
<span class='line'> 47</span> 
<span class='line'> 48</span> </span><span class="COMM">/**
<span class='line'> 49</span>  * Resets all internal state variables.
<span class='line'> 50</span>  *
<span class='line'> 51</span>  */</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="NAME">PKCS10Generator.prototype.reset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">	</span><span class="NAME">this.extensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">	</span><span class="NAME">this.attributes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 56</span> 
<span class='line'> 57</span> 
<span class='line'> 58</span> 
<span class='line'> 59</span> </span><span class="COMM">/**
<span class='line'> 60</span>  * Sets the subject name.
<span class='line'> 61</span>  *
<span class='line'> 62</span>  * &lt;p>The subject name must be a JavaScript object containing the properties:&lt;/p>
<span class='line'> 63</span>  * &lt;ul>
<span class='line'> 64</span>  *  &lt;li>C - the country&lt;/li>
<span class='line'> 65</span>  *  &lt;li>O - the organization&lt;/li>
<span class='line'> 66</span>  *  &lt;li>OU - the organization unit&lt;/li>
<span class='line'> 67</span>  *  &lt;li>CN - the common name&lt;/li>
<span class='line'> 68</span>  * &lt;/ul>
<span class='line'> 69</span>  * &lt;p>Example:&lt;/p>
<span class='line'> 70</span>  * &lt;pre>
<span class='line'> 71</span>  *	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
<span class='line'> 72</span>  * &lt;/pre>
<span class='line'> 73</span>  * @see PKIXCommon.encodeName()
<span class='line'> 74</span>  *
<span class='line'> 75</span>  * The subject can also be passed an already encoded ASN.1 structure
<span class='line'> 76</span>  *
<span class='line'> 77</span>  * @param {Object} subject the subject name
<span class='line'> 78</span>  */</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="NAME">PKCS10Generator.prototype.setSubject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">	</span><span class="NAME">this.subject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 82</span> 
<span class='line'> 83</span> 
<span class='line'> 84</span> 
<span class='line'> 85</span> </span><span class="COMM">/**
<span class='line'> 86</span>  * Sets the subjects public key
<span class='line'> 87</span>  *
<span class='line'> 88</span>  * &lt;p>The methods accepts ECC and RSA Public Keys.&lt;/p>
<span class='line'> 89</span>  *
<span class='line'> 90</span>  * @param {Key} publicKey the subjects public key
<span class='line'> 91</span>  */</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="NAME">PKCS10Generator.prototype.setPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="NAME">this.publicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 95</span> 
<span class='line'> 96</span> 
<span class='line'> 97</span> 
<span class='line'> 98</span> </span><span class="COMM">/**
<span class='line'> 99</span>  * Sets the signature algorithm. Currently only Crypto.RSA is supported
<span class='line'>100</span>  *
<span class='line'>101</span>  * @param {Number} alg the signature algorithm, only Crypto.RSA supported
<span class='line'>102</span>  */</span><span class="WHIT">
<span class='line'>103</span> </span><span class="NAME">PKCS10Generator.prototype.setSignatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="NAME">this.signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>105</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>106</span> 
<span class='line'>107</span> 
<span class='line'>108</span> 
<span class='line'>109</span> </span><span class="COMM">/**
<span class='line'>110</span>  * Adds an extension to the certificate
<span class='line'>111</span>  *
<span class='line'>112</span>  * &lt;p>The structure is defined as:&lt;/p>
<span class='line'>113</span>  * &lt;pre>
<span class='line'>114</span>  *    Extension  ::=  SEQUENCE  {
<span class='line'>115</span>  *        extnID      OBJECT IDENTIFIER,
<span class='line'>116</span>  *        extnValue   OCTET STRING
<span class='line'>117</span>  *                    -- contains the DER encoding of an ASN.1 value
<span class='line'>118</span>  *                    -- corresponding to the extension type identified
<span class='line'>119</span>  *                    -- by extnID
<span class='line'>120</span>  *        }
<span class='line'>121</span>  *&lt;/pre>
<span class='line'>122</span>  * @param {String} extnID the extensions object identifier
<span class='line'>123</span>  * @param {ByteString} the extension value as ByteString
<span class='line'>124</span>  */</span><span class="WHIT">
<span class='line'>125</span> </span><span class="NAME">PKCS10Generator.prototype.addExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">extnID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extnValue</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extension"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extnID"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">extnID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> 
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extnValue"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extnValue</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">	</span><span class="NAME">this.extensions.push</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>132</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>133</span> 
<span class='line'>134</span> 
<span class='line'>135</span> 
<span class='line'>136</span> </span><span class="COMM">/**
<span class='line'>137</span>  * Adds the key usage extension.
<span class='line'>138</span>  *
<span class='line'>139</span>  * &lt;p>The following flags are defined:&lt;/p>
<span class='line'>140</span>  * &lt;pre>
<span class='line'>141</span>  * PKCS10Generator.digitalSignature = 0x0080;
<span class='line'>142</span>  * PKCS10Generator.nonRepudiation   = 0x0040;
<span class='line'>143</span>  * PKCS10Generator.keyEncipherment  = 0x0020;
<span class='line'>144</span>  * PKCS10Generator.dataEncipherment = 0x0010;
<span class='line'>145</span>  * PKCS10Generator.keyAgreement     = 0x0008;
<span class='line'>146</span>  * PKCS10Generator.keyCertSign      = 0x0004;
<span class='line'>147</span>  * PKCS10Generator.cRLSign          = 0x0002;
<span class='line'>148</span>  * PKCS10Generator.encipherOnly     = 0x0001;
<span class='line'>149</span>  * PKCS10Generator.decipherOnly     = 0x8000;
<span class='line'>150</span>  * &lt;/pre>
<span class='line'>151</span>  * @param {Number} the key usage flags as combination of the flags defined above.
<span class='line'>152</span>  */</span><span class="WHIT">
<span class='line'>153</span> </span><span class="NAME">PKCS10Generator.prototype.addKeyUsageExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">flags</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.bitstringForInteger</span><span class="PUNC">(</span><span class="NAME">flags</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"2.5.29.15"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>157</span> 
<span class='line'>158</span> </span><span class="COMM">// Deprecated: Use PKIXCommon. instead</span><span class="WHIT">
<span class='line'>159</span> </span><span class="NAME">PKCS10Generator.digitalSignature</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0080</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="NAME">PKCS10Generator.nonRepudiation</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0040</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="NAME">PKCS10Generator.keyEncipherment</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0020</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="NAME">PKCS10Generator.dataEncipherment</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0010</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="NAME">PKCS10Generator.keyAgreement</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0008</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>164</span> </span><span class="NAME">PKCS10Generator.keyCertSign</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0004</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="NAME">PKCS10Generator.cRLSign</span><span class="WHIT">			</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0002</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="NAME">PKCS10Generator.encipherOnly</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0001</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="NAME">PKCS10Generator.decipherOnly</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x8000</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> 
<span class='line'>169</span> 
<span class='line'>170</span> 
<span class='line'>171</span> </span><span class="COMM">/**
<span class='line'>172</span>  * Adds extended key usages
<span class='line'>173</span>  *
<span class='line'>174</span>  * @param {String[]} the list of extended key usage object identifier
<span class='line'>175</span>  */</span><span class="WHIT">
<span class='line'>176</span> </span><span class="NAME">PKCS10Generator.prototype.addExtendedKeyUsageExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyusages</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">keyusages.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">keyusages</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"id-ce-extKeyUsage"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>183</span> 
<span class='line'>184</span> 
<span class='line'>185</span> 
<span class='line'>186</span> </span><span class="COMM">/**
<span class='line'>187</span>  * Adds the BasicConstraints extension.
<span class='line'>188</span>  *
<span class='line'>189</span>  * @param {Boolean} cA the certificate belongs to a CA
<span class='line'>190</span>  * @param {Number} pathLenConstraint the maximum number of subordinate CA certificates
<span class='line'>191</span>  */</span><span class="WHIT">
<span class='line'>192</span> </span><span class="NAME">PKCS10Generator.prototype.addBasicConstraintsExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pathLenConstraint</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"BasicConstraints"</span><span class="PUNC">,</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"cA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BOOLEAN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"FF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pathLenConstraint</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">pathLenConstraint</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"pathLenConstraint"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"2.5.29.19"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>204</span> 
<span class='line'>205</span> 
<span class='line'>206</span> 
<span class='line'>207</span> </span><span class="COMM">/**
<span class='line'>208</span>  * Gets the subject name as TLV object
<span class='line'>209</span>  *
<span class='line'>210</span>  * @return the issuer RDNSequence
<span class='line'>211</span>  * @type ASN1
<span class='line'>212</span>  */</span><span class="WHIT">
<span class='line'>213</span> </span><span class="NAME">PKCS10Generator.prototype.getSubject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.subject</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.subject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.encodeName</span><span class="PUNC">(</span><span class="NAME">this.subject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>219</span> 
<span class='line'>220</span> 
<span class='line'>221</span> 
<span class='line'>222</span> </span><span class="COMM">/**
<span class='line'>223</span>  * Gets the subject's public key as TLV object
<span class='line'>224</span>  *
<span class='line'>225</span>  * @return the subject's public key info
<span class='line'>226</span>  * @type ASN1
<span class='line'>227</span>  */</span><span class="WHIT">
<span class='line'>228</span> </span><span class="NAME">PKCS10Generator.prototype.getSubjectPublicKeyInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createRSASubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">this.publicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createECSubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">this.publicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.encodeECDomainParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>234</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>235</span> 
<span class='line'>236</span> 
<span class='line'>237</span> 
<span class='line'>238</span> </span><span class="COMM">/**
<span class='line'>239</span>  * Gets the extension attribute as TLV object
<span class='line'>240</span>  *
<span class='line'>241</span>  * @return the certificate extensions
<span class='line'>242</span>  * @type ASN1
<span class='line'>243</span>  */</span><span class="WHIT">
<span class='line'>244</span> </span><span class="NAME">PKCS10Generator.prototype.getExtensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"1.2.840.113549 1 9 14"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SET</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">	</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>251</span> 
<span class='line'>252</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.extensions.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">		</span><span class="NAME">l.add</span><span class="PUNC">(</span><span class="NAME">this.extensions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>257</span> 
<span class='line'>258</span> 
<span class='line'>259</span> 
<span class='line'>260</span> </span><span class="COMM">/**
<span class='line'>261</span>  * Gets the attributes as TLV object
<span class='line'>262</span>  *
<span class='line'>263</span>  * @return the request attributes
<span class='line'>264</span>  * @type ASN1
<span class='line'>265</span>  */</span><span class="WHIT">
<span class='line'>266</span> </span><span class="NAME">PKCS10Generator.prototype.getAttributes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"attributes"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> 
<span class='line'>269</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.extensions.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getExtensions</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>272</span> 
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.attributes.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.attributes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>276</span> 
<span class='line'>277</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>279</span> 
<span class='line'>280</span> 
<span class='line'>281</span> 
<span class='line'>282</span> </span><span class="COMM">/**
<span class='line'>283</span>  * Gets the part of the request that will be signed
<span class='line'>284</span>  *
<span class='line'>285</span>  * @return the TBSCertificate part
<span class='line'>286</span>  * @type ASN1
<span class='line'>287</span>  */</span><span class="WHIT">
<span class='line'>288</span> </span><span class="NAME">PKCS10Generator.prototype.getTbsRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"certificationRequestInfo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getSubject</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getSubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getAttributes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>296</span> 
<span class='line'>297</span> 
<span class='line'>298</span> 
<span class='line'>299</span> </span><span class="COMM">/**
<span class='line'>300</span>  * Generates the certificate.
<span class='line'>301</span>  *
<span class='line'>302</span>  * @return the generated certificate
<span class='line'>303</span>  * @type ASN1
<span class='line'>304</span>  */</span><span class="WHIT">
<span class='line'>305</span> </span><span class="NAME">PKCS10Generator.prototype.generateCertificationRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"certificationRequest"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>307</span> 
<span class='line'>308</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tbs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getTbsRequest</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">	</span><span class="NAME">request.add</span><span class="PUNC">(</span><span class="NAME">tbs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">	</span><span class="NAME">request.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.encodeSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">this.signatureAlgorithm</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>311</span> 
<span class='line'>312</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.signatureAlgorithm</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tbs.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">	</span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>314</span> 
<span class='line'>315</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"signatureValue"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="NAME">request.add</span><span class="PUNC">(</span><span class="NAME">signatureValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> 
<span class='line'>318</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">request</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>320</span> 
<span class='line'>321</span> 
<span class='line'>322</span> 
<span class='line'>323</span> </span><span class="NAME">PKCS10Generator.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>324</span> 
<span class='line'>325</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>326</span> 
<span class='line'>327</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reqPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">	</span><span class="NAME">reqPrivateKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> 
<span class='line'>330</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reqPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">	</span><span class="NAME">reqPublicKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">	</span><span class="NAME">reqPublicKey.setSize</span><span class="PUNC">(</span><span class="NUMB">1024</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> 
<span class='line'>334</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">reqPublicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">reqPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> 
<span class='line'>336</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PKCS10Generator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> 
<span class='line'>338</span> </span><span class="WHIT">	</span><span class="NAME">x.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">	</span><span class="NAME">x.setSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA_SHA256</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> 
<span class='line'>341</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">{</span><span class="NAME">C</span><span class="PUNC">:</span><span class="STRN">"UT"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">O</span><span class="PUNC">:</span><span class="STRN">"Utopia CA"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">OU</span><span class="PUNC">:</span><span class="STRN">"ACME Corporation"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">CN</span><span class="PUNC">:</span><span class="STRN">"Joe Doe"</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>342</span> 
<span class='line'>343</span> </span><span class="WHIT">	</span><span class="NAME">x.setSubject</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>344</span> 
<span class='line'>345</span> </span><span class="WHIT">	</span><span class="NAME">x.setPublicKey</span><span class="PUNC">(</span><span class="NAME">reqPublicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> 
<span class='line'>347</span> </span><span class="WHIT">	</span><span class="NAME">x.addKeyUsageExtension</span><span class="PUNC">(</span><span class="WHIT">	</span><span class="NAME">PKIXCommon.digitalSignature</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT">							</span><span class="NAME">PKIXCommon.keyCertSign</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">							</span><span class="NAME">PKIXCommon.cRLSign</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span> 
<span class='line'>351</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x.generateCertificationRequest</span><span class="PUNC">(</span><span class="NAME">reqPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSystem.mapFilename</span><span class="PUNC">(</span><span class="STRN">"cert.csr"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPSystem.USR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">	</span><span class="NAME">PKIXCommon.writeFileToDisk</span><span class="PUNC">(</span><span class="NAME">fn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>354</span> 
<span class='line'>355</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>356</span> 
<span class='line'>357</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>358</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>359</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Common classes and functions for PKIX
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> 
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="COMM">/**
<span class='line'> 30</span>  * Common functions and constants
<span class='line'> 31</span>  */</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 34</span> 
<span class='line'> 35</span> </span><span class="NAME">exports.PKIXCommon</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 36</span> 
<span class='line'> 37</span> 
<span class='line'> 38</span> </span><span class="NAME">PKIXCommon.digitalSignature</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0080</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="NAME">PKIXCommon.nonRepudiation</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0040</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="NAME">PKIXCommon.keyEncipherment</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0020</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="NAME">PKIXCommon.dataEncipherment</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0010</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="NAME">PKIXCommon.keyAgreement</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0008</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="NAME">PKIXCommon.keyCertSign</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0004</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="NAME">PKIXCommon.cRLSign</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0002</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="NAME">PKIXCommon.encipherOnly</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0001</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="NAME">PKIXCommon.decipherOnly</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x8000</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> 
<span class='line'> 48</span> 
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="COMM">/**
<span class='line'> 51</span>  * Convert integer to fixed length string with leading zeros.
<span class='line'> 52</span>  *
<span class='line'> 53</span>  * @private
<span class='line'> 54</span>  * @param {Number} value the value to convert to a string.
<span class='line'> 55</span>  * @param {Number} digits the number of digits in output string. Must be &lt;= 20.
<span class='line'> 56</span>  * @return the 0-padded string
<span class='line'> 57</span>  * @type String
<span class='line'> 58</span>  */</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="NAME">PKIXCommon.itos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">digits</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">digits</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="STRN">"Digits must be &lt;= 20"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"0000000000000000000"</span><span class="PUNC">.</span><span class="NAME">substr</span><span class="PUNC">(</span><span class="NUMB">19</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">digits</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">str.length</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 67</span> 
<span class='line'> 68</span> 
<span class='line'> 69</span> 
<span class='line'> 70</span> </span><span class="COMM">/**
<span class='line'> 71</span>  * Convert date and time to UTC string with format YYMMDDHHMMSSZ.
<span class='line'> 72</span>  *
<span class='line'> 73</span>  * @param {Date} d the date object.
<span class='line'> 74</span>  * @return the date/time string.
<span class='line'> 75</span>  * @type String
<span class='line'> 76</span>  */</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="NAME">PKIXCommon.dtoUTC</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCFullYear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCMonth</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCDate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCHours</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCMinutes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCSeconds</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"Z"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 86</span> 
<span class='line'> 87</span> 
<span class='line'> 88</span> 
<span class='line'> 89</span> </span><span class="COMM">/**
<span class='line'> 90</span>  * Convert date and time to UTC string with format YYYYMMDDHHMMSSZ.
<span class='line'> 91</span>  *
<span class='line'> 92</span>  * @param {Date} d the date object.
<span class='line'> 93</span>  * @return the date/time string.
<span class='line'> 94</span>  * @type String
<span class='line'> 95</span>  */</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="NAME">PKIXCommon.dtoUTCFullYear</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> 	</span><span class="NAME">d.getUTCFullYear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCMonth</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCDate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCHours</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCMinutes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.itos</span><span class="PUNC">(</span><span class="NAME">d.getUTCSeconds</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"Z"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>104</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>105</span> 
<span class='line'>106</span> 
<span class='line'>107</span> 
<span class='line'>108</span> </span><span class="COMM">/**
<span class='line'>109</span>  * Add the specified number of days to a date object
<span class='line'>110</span>  *
<span class='line'>111</span>  * @param {Date} d the date object
<span class='line'>112</span>  * @param {Number} days the number of days to add, may be negative
<span class='line'>113</span>  * @type Date
<span class='line'>114</span>  * @return a new Date object
<span class='line'>115</span>  */</span><span class="WHIT">
<span class='line'>116</span> </span><span class="NAME">PKIXCommon.addDays</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">days</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hour</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d.getUTCHours</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">minute</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d.getUTCMinutes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">second</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d.getUTCSeconds</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="NAME">cd.setHours</span><span class="PUNC">(</span><span class="NUMB">12</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> 
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cd.getTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">	</span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">days</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">24</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">60</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">60</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">1000</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="NAME">ts</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>126</span> 
<span class='line'>127</span> </span><span class="WHIT">	</span><span class="NAME">nd.setUTCHours</span><span class="PUNC">(</span><span class="NAME">hour</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">	</span><span class="NAME">nd.setUTCMinutes</span><span class="PUNC">(</span><span class="NAME">minute</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="NAME">nd.setUTCSeconds</span><span class="PUNC">(</span><span class="NAME">second</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">nd</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>132</span> 
<span class='line'>133</span> 
<span class='line'>134</span> 
<span class='line'>135</span> </span><span class="COMM">/**
<span class='line'>136</span>  * Converts the integer value into a BIT STRING value.
<span class='line'>137</span>  * &lt;p>The function interprets the integer value as bitmap, where
<span class='line'>138</span>  * bit 0 is the most significant bit of the least significant byte.&lt;/p>
<span class='line'>139</span>  * &lt;p>The function adds the minimum number of bytes to the final bit string
<span class='line'>140</span>  * and encodes the "number of unused bits at the beginning.&lt;/p>
<span class='line'>141</span>  *
<span class='line'>142</span>  * @param {Number} val the value to convert
<span class='line'>143</span>  * @return the bit string
<span class='line'>144</span>  * @type ByteString
<span class='line'>145</span>  */</span><span class="WHIT">
<span class='line'>146</span> </span><span class="NAME">PKIXCommon.bitstringForInteger</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">val</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> 
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="COMM">// Encode starting with the least significant byte</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">val</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">		</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">val</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">		</span><span class="NAME">val</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">val</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>156</span> 
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="COMM">// Determine number of unused bits</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">		</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">		</span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>163</span> 
<span class='line'>164</span> </span><span class="WHIT">	</span><span class="NAME">bb.insert</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>166</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>167</span> 
<span class='line'>168</span> 
<span class='line'>169</span> 
<span class='line'>170</span> </span><span class="COMM">/**
<span class='line'>171</span>  * Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
<span class='line'>172</span>  *
<span class='line'>173</span>  * This prevent interpretation of the integer representation if converted into
<span class='line'>174</span>  * a signed ASN1 INTEGER.
<span class='line'>175</span>  *
<span class='line'>176</span>  * @param {ByteString} value the value to convert
<span class='line'>177</span>  * @return the converted value
<span class='line'>178</span>  * @type ByteString
<span class='line'>179</span>  */</span><span class="WHIT">
<span class='line'>180</span> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> 
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> 
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x80</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>191</span> 
<span class='line'>192</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>194</span> 
<span class='line'>195</span> 
<span class='line'>196</span> 
<span class='line'>197</span> </span><span class="COMM">/**
<span class='line'>198</span>  * Removes leading zero byte.
<span class='line'>199</span>  *
<span class='line'>200</span>  * @param {ByteString} value the value to process
<span class='line'>201</span>  * @return the processed ByteString without leading zero byte
<span class='line'>202</span>  * @type ByteString
<span class='line'>203</span>  */</span><span class="WHIT">
<span class='line'>204</span> </span><span class="NAME">PKIXCommon.removeLeadingZeroBytes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">value.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">		</span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>208</span> 
<span class='line'>209</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>211</span> 
<span class='line'>212</span> 
<span class='line'>213</span> 
<span class='line'>214</span> </span><span class="COMM">/**
<span class='line'>215</span>  * Encode PSS algorithm parameter
<span class='line'>216</span>  */</span><span class="WHIT">
<span class='line'>217</span> </span><span class="NAME">PKIXCommon.encodePSSAlgorithmParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">hashAlgorithm</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">saltLength</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">param</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">  </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"hashAlgorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"sha256Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hashAlgorithm</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.NULL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"maskGenAlgorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA1</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"mgf1SHA256Identifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"pkcs-1 8"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// id-mgf1</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hashAlgorithm</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.NULL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"hashAlgorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA2</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"saltLength"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">saltLength</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> 
<span class='line'>233</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">param</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>235</span> 
<span class='line'>236</span> 
<span class='line'>237</span> 
<span class='line'>238</span> </span><span class="COMM">/**
<span class='line'>239</span>  * Gets the signature algorithm TLV object
<span class='line'>240</span>  *
<span class='line'>241</span>  * @return the signature algorithm object
<span class='line'>242</span>  * @type ASN1
<span class='line'>243</span>  */</span><span class="WHIT">
<span class='line'>244</span> </span><span class="NAME">PKIXCommon.encodeSignatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"signatureAlgorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> 
<span class='line'>247</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"sha1WithRSAEncryption"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.NULL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA256</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"sha256WithRSAEncryption"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.NULL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA384</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"sha384WithRSAEncryption"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.NULL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA512</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"sha512WithRSAEncryption"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.NULL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.NULL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA256</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.encodePSSAlgorithmParameter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA384</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.encodePSSAlgorithmParameter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha384"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">48</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA512</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.encodePSSAlgorithmParameter</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">64</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA224</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA224"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA384</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA384"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA512</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signatureAlgorithm</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid algorithm"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>284</span> 
<span class='line'>285</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>286</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>287</span> 
<span class='line'>288</span> 
<span class='line'>289</span> 
<span class='line'>290</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>291</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"sha1WithRSAEncryption"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"sha256WithRSAEncryption"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"sha384WithRSAEncryption"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>294</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"sha512WithRSAEncryption"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>297</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA224"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA224</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>299</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA384"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"ecdsa-with-SHA512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Crypto.ECDSA_SHA512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> 
<span class='line'>302</span> 
<span class='line'>303</span> 
<span class='line'>304</span> </span><span class="COMM">/**
<span class='line'>305</span>  * Return Crypto.x constant for given signatureAlgorithm
<span class='line'>306</span>  *
<span class='line'>307</span>  * @param {ByteString} signatureAlgorithm the algorithm
<span class='line'>308</span>  * @param {ByteString} param the parameter (optional)
<span class='line'>309</span>  * @type Number
<span class='line'>310</span>  * @return the Crypto.X constant
<span class='line'>311</span>  */</span><span class="WHIT">
<span class='line'>312</span> </span><span class="NAME">PKIXCommon.decodeSignatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">param</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signatureAlgorithm.equals</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">param</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>317</span> 
<span class='line'>318</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">param</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hashAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>320</span> 
<span class='line'>321</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">a.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">o</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// hashAlgorithm</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>325</span> </span><span class="WHIT">				</span><span class="NAME">hashAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.decodeHashAlgorithm</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>326</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xA1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// MGF</span><span class="WHIT">
<span class='line'>327</span> </span><span class="WHIT">				</span><span class="COMM">// Check MGF</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">m.equals</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"pkcs-1 8"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unsupported MGF"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>332</span> 
<span class='line'>333</span> </span><span class="WHIT">				</span><span class="COMM">// Check hashAlgorithm</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">h</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.decodeHashAlgorithm</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hashAlgorithm</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">					</span><span class="NAME">hashAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hashAlgorithm</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">h</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Signature hash algorithm and MGF hash algorithm must be the same"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xA2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// saltLength</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">				</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">hashAlgorithm</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>343</span> </span><span class="WHIT">					</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_224</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>344</span> </span><span class="WHIT">						</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">expectedSalt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">28</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">						</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">					</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>347</span> </span><span class="WHIT">						</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">expectedSalt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT">						</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">					</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_384</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">						</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">expectedSalt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">48</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT">						</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">					</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_512</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">						</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">expectedSalt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">64</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT">						</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>355</span> </span><span class="WHIT">					</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT">					</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">						</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">expectedSalt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>359</span> 
<span class='line'>360</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">salt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">salt</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">expectedSalt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"saltLength ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">salt</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">") must match hash size ("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">expectedSalt</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>364</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">o.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0xA3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// trailerField</span><span class="WHIT">
<span class='line'>365</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">trailerField</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">o.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.toUnsigned</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">trailerField</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"trailerField value must be 1"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>371</span> 
<span class='line'>372</span> </span><span class="WHIT">		</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">hashAlgorithm</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_224</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA224</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_384</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_512</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>380</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">			</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>382</span> </span><span class="WHIT">			</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>383</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>386</span> 
<span class='line'>387</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.algIdMap</span><span class="PUNC">[</span><span class="NAME">signatureAlgorithm.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>388</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>389</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>390</span> 
<span class='line'>391</span> 
<span class='line'>392</span> </span><span class="COMM">/**
<span class='line'>393</span>  * Return Crypto.SHA_x constant for given OID
<span class='line'>394</span>  *
<span class='line'>395</span>  * @param {ByteString} oid the hash OID
<span class='line'>396</span>  * @type Number
<span class='line'>397</span>  * @return the Crypto.SHA_x constant
<span class='line'>398</span>  */</span><span class="WHIT">
<span class='line'>399</span> </span><span class="NAME">PKIXCommon.decodeHashAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">	</span><span class="COMM">//var oid = algorithmId.get(0).get(0).value.toString(HEX);</span><span class="WHIT">
<span class='line'>401</span> 
<span class='line'>402</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">oid.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>403</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>404</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha224"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>406</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_224</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>407</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>408</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_256</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>409</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha384"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_384</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>411</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>412</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.SHA_512</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_MECH</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Invalid algorithm"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>416</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>417</span> 
<span class='line'>418</span> 
<span class='line'>419</span> 
<span class='line'>420</span> </span><span class="COMM">/**
<span class='line'>421</span>  * Return Crypto.RSA or Crypto.EC depending on signature algorithm
<span class='line'>422</span>  *
<span class='line'>423</span>  * @param {Number} alg signature algorithm (one of Crypto.X)
<span class='line'>424</span>  * @type Number
<span class='line'>425</span>  * @return either Crypto.RSA or Crypto.EC
<span class='line'>426</span>  */</span><span class="WHIT">
<span class='line'>427</span> </span><span class="NAME">PKIXCommon.keyTypeForAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>428</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT">     </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>429</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA256</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>430</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA384</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>431</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_SHA512</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA224</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>434</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA256</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA384</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='line'>436</span> </span><span class="WHIT">		</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA_PSS_SHA512</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>437</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.RSA</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>438</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>439</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Crypto.EC</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>440</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>441</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>442</span> 
<span class='line'>443</span> 
<span class='line'>444</span> 
<span class='line'>445</span> </span><span class="COMM">/**
<span class='line'>446</span>  * Create tailored AlgorithmIdentifier that restricts usage of the public key.
<span class='line'>447</span>  *
<span class='line'>448</span>  * @param{String} restriction The restriction to apply.
<span class='line'>449</span>  * @type ASN1
<span class='line'>450</span>  * @return the tailored AlgorithmIdentifier;
<span class='line'>451</span>  */</span><span class="WHIT">
<span class='line'>452</span> </span><span class="NAME">PKIXCommon.restrictedPublicKeyAlgorithmIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">restriction</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>453</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">restriction</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>454</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"PSS-SHA1"</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puboid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>458</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"PSS-SHA224"</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>459</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puboid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>460</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha224"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>462</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"PSS-SHA256"</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>463</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puboid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>464</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha256"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>466</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"PSS-SHA384"</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>467</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puboid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>468</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha384"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>469</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>470</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"PSS-SHA512"</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>471</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puboid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-RSASSA-PSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-sha512"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>473</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>474</span> </span><span class="WHIT">		</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"OEAP"</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>475</span> </span><span class="WHIT">		</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>476</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unknown public key restriction "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.policy.restrictPublicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>477</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>478</span> 
<span class='line'>479</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">info</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.encodePSSAlgorithmParameter</span><span class="PUNC">(</span><span class="NAME">hash</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>480</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">		</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puboid</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">		</span><span class="NAME">info</span><span class="WHIT">
<span class='line'>483</span> </span><span class="WHIT">	</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>484</span> 
<span class='line'>485</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">algorithm</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>486</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>487</span> 
<span class='line'>488</span> 
<span class='line'>489</span> 
<span class='line'>490</span> </span><span class="COMM">/**
<span class='line'>491</span>  * Encode EC Parameter for inclusion in the AlgorithmIdentifier structure.
<span class='line'>492</span>  *
<span class='line'>493</span>  * @param{Key} publicKey the public key.
<span class='line'>494</span>  * @type ASN1
<span class='line'>495</span>  * @return the encoded ECParameter.
<span class='line'>496</span>  */</span><span class="WHIT">
<span class='line'>497</span> </span><span class="NAME">PKIXCommon.encodeECParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>498</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">		</span><span class="COMM">// Make sure curve components are available if only curve oid is defined</span><span class="WHIT">
<span class='line'>499</span> </span><span class="WHIT">		</span><span class="NAME">publicKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>500</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ecParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT">		</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"ecParameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"version"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"fieldID"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"fieldType"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"prime-field"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"prime"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>507</span> </span><span class="WHIT">					</span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_P</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>508</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>509</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"curve"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>510</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"a"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_A</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>511</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"b"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_B</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>512</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>513</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"base"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>514</span> </span><span class="WHIT">					</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"04"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_GY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"order"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>516</span> </span><span class="WHIT">				</span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_N</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>517</span> </span><span class="WHIT">		</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>518</span> 
<span class='line'>519</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cofactor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_H</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>520</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>521</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">cofactor.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cofactor.byteAt</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">cofactor.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>523</span> </span><span class="WHIT">		</span><span class="NAME">ecParameter.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"cofactor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cofactor.bytes</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>525</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">ecParameter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>526</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>527</span> 
<span class='line'>528</span> 
<span class='line'>529</span> 
<span class='line'>530</span> </span><span class="COMM">/**
<span class='line'>531</span>  * Creates the EC Public Key as subjectPublicKeyInfo TLV structure object.
<span class='line'>532</span>  *
<span class='line'>533</span>  * &lt;p>The structure is defined as:&lt;/p>
<span class='line'>534</span>  * &lt;pre>
<span class='line'>535</span>  *	SubjectPublicKeyInfo  ::=  SEQUENCE  {
<span class='line'>536</span>  *		algorithm            AlgorithmIdentifier,
<span class='line'>537</span>  *		subjectPublicKey     BIT STRING  }
<span class='line'>538</span>  *
<span class='line'>539</span>  *	AlgorithmIdentifier  ::=  SEQUENCE  {
<span class='line'>540</span>  *		algorithm               OBJECT IDENTIFIER,
<span class='line'>541</span>  *		parameters              ANY DEFINED BY algorithm OPTIONAL  }
<span class='line'>542</span>  *
<span class='line'>543</span>  *	id-ecPublicKey OBJECT IDENTIFIER ::= {
<span class='line'>544</span>  *		iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 }
<span class='line'>545</span>  *
<span class='line'>546</span>  *	ECParameters ::= CHOICE {
<span class='line'>547</span>  *		namedCurve         OBJECT IDENTIFIER,
<span class='line'>548</span>  *		implicitCurve      NULL,
<span class='line'>549</span>  *		specifiedCurve     SpecifiedECDomain }
<span class='line'>550</span>  * &lt;/pre>
<span class='line'>551</span>  * @return the subjectPublicKey TLV structure
<span class='line'>552</span>  * @type ASN1
<span class='line'>553</span>  */</span><span class="WHIT">
<span class='line'>554</span> </span><span class="NAME">PKIXCommon.createECSubjectPublicKeyInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encodeECDomainParameter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>555</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"subjectPublicKeyInfo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>556</span> 
<span class='line'>557</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKey.algorithmIdentifier</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">algorithm</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>559</span> </span><span class="WHIT">		</span><span class="NAME">algorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>560</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"id-ecPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>561</span> 
<span class='line'>562</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>563</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">encodeECDomainParameter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>564</span> </span><span class="WHIT">			</span><span class="NAME">algorithm.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.encodeECParameter</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>565</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>566</span> </span><span class="WHIT">			</span><span class="NAME">algorithm.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>567</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>568</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>569</span> 
<span class='line'>570</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">algorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>571</span> 
<span class='line'>572</span> </span><span class="WHIT">	</span><span class="COMM">// Prefix a 00 to form correct bitstring</span><span class="WHIT">
<span class='line'>573</span> </span><span class="WHIT">	</span><span class="COMM">// Prefix a 04 to indicate uncompressed format</span><span class="WHIT">
<span class='line'>574</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keybin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0004"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>575</span> </span><span class="WHIT">	</span><span class="NAME">keybin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keybin.concat</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>576</span> </span><span class="WHIT">	</span><span class="NAME">keybin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keybin.concat</span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_QY</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>577</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"subjectPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keybin</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>578</span> 
<span class='line'>579</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>580</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>581</span> 
<span class='line'>582</span> 
<span class='line'>583</span> 
<span class='line'>584</span> </span><span class="COMM">/**
<span class='line'>585</span>  * Creates the RSA Public Key as subjectPublicKeyInfo TLV structure object.
<span class='line'>586</span>  *
<span class='line'>587</span>  * &lt;p>The structure is defined as:&lt;/p>
<span class='line'>588</span>  * &lt;pre>
<span class='line'>589</span>  *	SubjectPublicKeyInfo  ::=  SEQUENCE  {
<span class='line'>590</span>  *		algorithm            AlgorithmIdentifier,
<span class='line'>591</span>  *		subjectPublicKey     BIT STRING  }
<span class='line'>592</span>  *
<span class='line'>593</span>  *	AlgorithmIdentifier  ::=  SEQUENCE  {
<span class='line'>594</span>  *		algorithm               OBJECT IDENTIFIER,
<span class='line'>595</span>  *		parameters              ANY DEFINED BY algorithm OPTIONAL  }
<span class='line'>596</span>  *
<span class='line'>597</span>  *	pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 }
<span class='line'>598</span>  *
<span class='line'>599</span>  *	rsaEncryption OBJECT IDENTIFIER ::=  { pkcs-1 1}
<span class='line'>600</span>  *
<span class='line'>601</span>  *	RSAPublicKey ::= SEQUENCE {
<span class='line'>602</span>  *		modulus            INTEGER,    -- n
<span class='line'>603</span>  *		publicExponent     INTEGER  }  -- e
<span class='line'>604</span>  * &lt;/pre>
<span class='line'>605</span>  *
<span class='line'>606</span>  * @return the subjectPublicKey TLV structure
<span class='line'>607</span>  * @type ASN1
<span class='line'>608</span>  */</span><span class="WHIT">
<span class='line'>609</span> </span><span class="NAME">PKIXCommon.createRSASubjectPublicKeyInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>610</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"subjectPublicKeyInfo"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>611</span> 
<span class='line'>612</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">algorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKey.algorithmIdentifier</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>613</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">algorithm</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>614</span> </span><span class="WHIT">		</span><span class="NAME">algorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>615</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"algorithm"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"rsaEncryption"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>616</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"parameters"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.NULL</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>617</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>618</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>619</span> 
<span class='line'>620</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">algorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>621</span> </span><span class="WHIT">	</span><span class="COMM">// Prefix a 00 to form correct bitstring</span><span class="WHIT">
<span class='line'>622</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keybin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>623</span> 
<span class='line'>624</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">modulus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>625</span> </span><span class="WHIT">	</span><span class="NAME">modulus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">modulus</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>626</span> 
<span class='line'>627</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">exponent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.EXPONENT</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>628</span> </span><span class="WHIT">	</span><span class="NAME">exponent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">exponent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>629</span> 
<span class='line'>630</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rsapub</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"RSAPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>631</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"modulus"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">modulus</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>632</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"publicKeyExponent"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exponent</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>633</span> 
<span class='line'>634</span> </span><span class="WHIT">	</span><span class="NAME">keybin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keybin.concat</span><span class="PUNC">(</span><span class="NAME">rsapub.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>635</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"subjectPublicKey"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keybin</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>636</span> 
<span class='line'>637</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>638</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>639</span> 
<span class='line'>640</span> 
<span class='line'>641</span> 
<span class='line'>642</span> </span><span class="COMM">/**
<span class='line'>643</span>  * Determine key identifier according to RFC5280 using SHA-1 over the SubjectPublicKeyInfo
<span class='line'>644</span>  *
<span class='line'>645</span>  * @param {Key} publicKey the public key
<span class='line'>646</span>  * @param {Boolean} encodeECDomainParameter true to include domain parameter in SPKI of EC key
<span class='line'>647</span>  */</span><span class="WHIT">
<span class='line'>648</span> </span><span class="NAME">PKIXCommon.determineKeyIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encodeECDomainParameter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>649</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">encodeECDomainParameter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>650</span> </span><span class="WHIT">		</span><span class="NAME">encodeECDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>651</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>652</span> 
<span class='line'>653</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spki</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>654</span> 
<span class='line'>655</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>656</span> </span><span class="WHIT">		</span><span class="NAME">spki</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createRSASubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>657</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>658</span> </span><span class="WHIT">		</span><span class="NAME">spki</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createECSubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">encodeECDomainParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>659</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>660</span> 
<span class='line'>661</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyvalue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spki.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>662</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>663</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyvalue</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>664</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>665</span> 
<span class='line'>666</span> 
<span class='line'>667</span> 
<span class='line'>668</span> </span><span class="COMM">/**
<span class='line'>669</span>  * Creates a relative distinguished name component.
<span class='line'>670</span>  *
<span class='line'>671</span>  * &lt;p>The structure is defined as:&lt;/p>
<span class='line'>672</span>  * &lt;pre>
<span class='line'>673</span>  *	RelativeDistinguishedName ::=
<span class='line'>674</span>  *		SET SIZE (1..MAX) OF AttributeTypeAndValue
<span class='line'>675</span>  *
<span class='line'>676</span>  *	AttributeTypeAndValue ::= SEQUENCE {
<span class='line'>677</span>  *		type     AttributeType,
<span class='line'>678</span>  *		value    AttributeValue }
<span class='line'>679</span>  *
<span class='line'>680</span>  *	AttributeType ::= OBJECT IDENTIFIER
<span class='line'>681</span>  *
<span class='line'>682</span>  *	AttributeValue ::= ANY -- DEFINED BY AttributeType
<span class='line'>683</span>  *
<span class='line'>684</span>  *	DirectoryString ::= CHOICE {
<span class='line'>685</span>  *		teletexString           TeletexString (SIZE (1..MAX)),
<span class='line'>686</span>  *		printableString         PrintableString (SIZE (1..MAX)),
<span class='line'>687</span>  *		universalString         UniversalString (SIZE (1..MAX)),
<span class='line'>688</span>  *		utf8String              UTF8String (SIZE (1..MAX)),
<span class='line'>689</span>  *		bmpString               BMPString (SIZE (1..MAX)) }
<span class='line'>690</span>  *&lt;/pre>
<span class='line'>691</span>  *
<span class='line'>692</span>  * @param {String} name the components name
<span class='line'>693</span>  * @param {String} oid the oid for the RDN
<span class='line'>694</span>  * @param {ASN1} value the value object
<span class='line'>695</span>  * @return the
<span class='line'>696</span>  */</span><span class="WHIT">
<span class='line'>697</span> </span><span class="NAME">PKIXCommon.makeRDN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>698</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SET</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>699</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>700</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>701</span> </span><span class="WHIT">					</span><span class="NAME">value</span><span class="WHIT">
<span class='line'>702</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>703</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>704</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>705</span> 
<span class='line'>706</span> 
<span class='line'>707</span> 
<span class='line'>708</span> </span><span class="COMM">/**
<span class='line'>709</span>  * Adds names from the name object to the RDNSequence.
<span class='line'>710</span>  *
<span class='line'>711</span>  * @param {ASN1} t the sequence object
<span class='line'>712</span>  * @param {Object} name the name object
<span class='line'>713</span>  */</span><span class="WHIT">
<span class='line'>714</span> </span><span class="NAME">PKIXCommon.addNames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>715</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.C</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>716</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"country"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-countryName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.PrintableString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.C</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>717</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>718</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.ST</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>719</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"stateOrProvinceName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-stateOrProvinceName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.ST</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>720</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>721</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.O</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>722</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"organization"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-organizationName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.O</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>723</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>724</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.OU</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>725</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"organizationalUnit"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-organizationalUnitName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.OU</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>726</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>727</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.S</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>728</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"stateOrProvince"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-stateOrProvinceName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.S</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>729</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>730</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.L</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>731</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"locality"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-localityName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.L</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>732</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>733</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.DC</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>734</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"domainComponent"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-domainComponent"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.DC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>735</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>736</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.T</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>737</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"title"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-title"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.T</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>738</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>739</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.G</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>740</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"givenName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-givenName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.G</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>741</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>742</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.SN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>743</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"surname"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-surname"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.SN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>744</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>745</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.CN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>746</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"commonName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-commonName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.CN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>747</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>748</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.SERIALNUMBER</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>749</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"serialNumber"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-serialNumber"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.SERIALNUMBER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>750</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>751</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.DNQ</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>752</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"dnQualifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-at-dnQualifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.DNQ</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>753</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>754</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.E</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>755</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"emailAddress"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-emailAddress"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.IA5String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.E</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>756</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>757</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">name.UID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>758</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.makeRDN</span><span class="PUNC">(</span><span class="STRN">"userId"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-userId"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">name.UID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>759</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>760</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>761</span> 
<span class='line'>762</span> 
<span class='line'>763</span> 
<span class='line'>764</span> </span><span class="NAME">PKIXCommon.validRDN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"C"</span><span class="PUNC">,</span><span class="STRN">"ST"</span><span class="PUNC">,</span><span class="STRN">"L"</span><span class="PUNC">,</span><span class="STRN">"O"</span><span class="PUNC">,</span><span class="STRN">"OU"</span><span class="PUNC">,</span><span class="STRN">"S"</span><span class="PUNC">,</span><span class="STRN">"DC"</span><span class="PUNC">,</span><span class="STRN">"T"</span><span class="PUNC">,</span><span class="STRN">"G"</span><span class="PUNC">,</span><span class="STRN">"SN"</span><span class="PUNC">,</span><span class="STRN">"PSEUDONYM"</span><span class="PUNC">,</span><span class="STRN">"CN"</span><span class="PUNC">,</span><span class="STRN">"SERIALNUMBER"</span><span class="PUNC">,</span><span class="STRN">"DNQ"</span><span class="PUNC">,</span><span class="STRN">"E"</span><span class="PUNC">,</span><span class="STRN">"UID"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>765</span> 
<span class='line'>766</span> </span><span class="COMM">/**
<span class='line'>767</span>  * Gets the dn as TLV object
<span class='line'>768</span>  *
<span class='line'>769</span>  * &lt;p>This function support two format for names&lt;/p>
<span class='line'>770</span>  * &lt;pre>
<span class='line'>771</span>  *  var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
<span class='line'>772</span>  * or
<span class='line'>773</span>  *  var issuer = [ { C:"UT"}, { O:"ACME Corporation" }, { CN:"Test-CA"} ];
<span class='line'>774</span>  * &lt;/pre>
<span class='line'>775</span>  *
<span class='line'>776</span>  * &lt;p>It supports the following RDNs:&lt;/p>
<span class='line'>777</span>  * &lt;ul>
<span class='line'>778</span>  * &lt;li>C - country&lt;/li>
<span class='line'>779</span>  * &lt;li>ST - state&lt;/li>
<span class='line'>780</span>  * &lt;li>O - organization&lt;/li>
<span class='line'>781</span>  * &lt;li>OU - organizational unit&lt;/li>
<span class='line'>782</span>  * &lt;li>S - state or province&lt;/li>
<span class='line'>783</span>  * &lt;li>L - locality&lt;/li>
<span class='line'>784</span>  * &lt;li>DC - domain component&lt;/li>
<span class='line'>785</span>  * &lt;li>T - title&lt;/li>
<span class='line'>786</span>  * &lt;li>G - given name&lt;/li>
<span class='line'>787</span>  * &lt;li>SN - surname&lt;/li>
<span class='line'>788</span>  * &lt;li>CN - common name&lt;/li>
<span class='line'>789</span>  * &lt;li>SERIALNUMBER - serial number&lt;/li>
<span class='line'>790</span>  * &lt;li>DNQ - domain name qualifier&lt;/li>
<span class='line'>791</span>  * &lt;li>E - e-mail address&lt;/li>
<span class='line'>792</span>  * &lt;li>UID - user Id&lt;/li>
<span class='line'>793</span>  * &lt;p>The first format sorts the RDS in the sequence C,ST,L,O,OU,S,DC,T,G,SN,PSEUDONYM,CN,SERIALNUMBER,DNQ,E,UID&lt;/p>
<span class='line'>794</span>  * &lt;/ul>
<span class='line'>795</span>  * @param {Object} name the name object
<span class='line'>796</span>  * @return the RDNSequence
<span class='line'>797</span>  * @type ASN1
<span class='line'>798</span>  */</span><span class="WHIT">
<span class='line'>799</span> </span><span class="NAME">PKIXCommon.encodeName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>800</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"subject"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>801</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">name.C</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>802</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">name.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>803</span> </span><span class="WHIT">			</span><span class="NAME">PKIXCommon.addNames</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>804</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>805</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>806</span> </span><span class="WHIT">		</span><span class="NAME">PKIXCommon.addNames</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>807</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>808</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>809</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>810</span> 
<span class='line'>811</span> 
<span class='line'>812</span> 
<span class='line'>813</span> </span><span class="COMM">/**
<span class='line'>814</span>  * Return the value of the last RDN
<span class='line'>815</span>  *
<span class='line'>816</span>  * @param {Object[]} dn the dn array
<span class='line'>817</span>  * @type String
<span class='line'>818</span>  * @return the value of the last RDN
<span class='line'>819</span>  */</span><span class="WHIT">
<span class='line'>820</span> </span><span class="NAME">PKIXCommon.makeName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">rdnlist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>821</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rdnlist.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>822</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>823</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>824</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdnlist</span><span class="PUNC">[</span><span class="NAME">rdnlist.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>825</span> 
<span class='line'>826</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>827</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>828</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>829</span> 
<span class='line'>830</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>831</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>832</span> 
<span class='line'>833</span> 
<span class='line'>834</span> 
<span class='line'>835</span> </span><span class="NAME">PKIXCommon.parseDN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">dn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>836</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">dn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Parameter dn must be string"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>837</span> 
<span class='line'>838</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dn.split</span><span class="PUNC">(</span><span class="STRN">","</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>839</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdnlist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>840</span> 
<span class='line'>841</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">e.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>842</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">"="</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>843</span> 
<span class='line'>844</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p.length</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>845</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Missing '=' in RDN "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>846</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>847</span> 
<span class='line'>848</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>849</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Too many '=' in RDN "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>850</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>851</span> 
<span class='line'>852</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">trim</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>853</span> 
<span class='line'>854</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">key.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>855</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Key in RDN "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" can't be empty"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>856</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>857</span> 
<span class='line'>858</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">PKIXCommon.validRDN.indexOf</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>859</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" is not a supported RDN (Valid RDNs are "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.validRDN</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>860</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>861</span> 
<span class='line'>862</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">trim</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>863</span> 
<span class='line'>864</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">value.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>865</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Value for "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">key</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" can't be empty"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>866</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>867</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>868</span> </span><span class="WHIT">		</span><span class="NAME">rdn</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>869</span> </span><span class="WHIT">		</span><span class="NAME">rdnlist.push</span><span class="PUNC">(</span><span class="NAME">rdn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>870</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>871</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rdnlist</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>872</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>873</span> 
<span class='line'>874</span> 
<span class='line'>875</span> 
<span class='line'>876</span> </span><span class="COMM">/**
<span class='line'>877</span>  * Convert a DN parsed with parseDN() back into the string format
<span class='line'>878</span>  *
<span class='line'>879</span>  * @param {Object[]} dn the dn array
<span class='line'>880</span>  * @type String
<span class='line'>881</span>  * @return the DN in string format
<span class='line'>882</span>  */</span><span class="WHIT">
<span class='line'>883</span> </span><span class="NAME">PKIXCommon.dnToString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">dn</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>884</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>885</span> 
<span class='line'>886</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">dn.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>887</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>888</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>889</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>890</span> 
<span class='line'>891</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">dn</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>892</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dn</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>893</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>894</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>895</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>896</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>897</span> 
<span class='line'>898</span> 
<span class='line'>899</span> 
<span class='line'>900</span> </span><span class="NAME">PKIXCommon.findRDN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">rdnlist</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>901</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">rdnlist.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>902</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdnlist</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>903</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>904</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>905</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>906</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>907</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>908</span> 
<span class='line'>909</span> 
<span class='line'>910</span> 
<span class='line'>911</span> </span><span class="NAME">PKIXCommon.countryNames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>912</span> </span><span class="NAME">AF</span><span class="PUNC">:</span><span class="STRN">"Afghanistan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>913</span> </span><span class="NAME">AX</span><span class="PUNC">:</span><span class="STRN">"Aeland Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>914</span> </span><span class="NAME">AL</span><span class="PUNC">:</span><span class="STRN">"Albania"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>915</span> </span><span class="NAME">DZ</span><span class="PUNC">:</span><span class="STRN">"Algeria"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>916</span> </span><span class="NAME">AS</span><span class="PUNC">:</span><span class="STRN">"American Samoa"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>917</span> </span><span class="NAME">AD</span><span class="PUNC">:</span><span class="STRN">"Andorra"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>918</span> </span><span class="NAME">AO</span><span class="PUNC">:</span><span class="STRN">"Angola"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>919</span> </span><span class="NAME">AI</span><span class="PUNC">:</span><span class="STRN">"Anguilla"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>920</span> </span><span class="NAME">AQ</span><span class="PUNC">:</span><span class="STRN">"Antarctica"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>921</span> </span><span class="NAME">AG</span><span class="PUNC">:</span><span class="STRN">"Antigua and Barbuda"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>922</span> </span><span class="NAME">AR</span><span class="PUNC">:</span><span class="STRN">"Argentina"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>923</span> </span><span class="NAME">AM</span><span class="PUNC">:</span><span class="STRN">"Armenia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>924</span> </span><span class="NAME">AW</span><span class="PUNC">:</span><span class="STRN">"Aruba"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>925</span> </span><span class="NAME">AU</span><span class="PUNC">:</span><span class="STRN">"Australia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>926</span> </span><span class="NAME">AT</span><span class="PUNC">:</span><span class="STRN">"Austria"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>927</span> </span><span class="NAME">AZ</span><span class="PUNC">:</span><span class="STRN">"Azerbaijan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>928</span> </span><span class="NAME">BS</span><span class="PUNC">:</span><span class="STRN">"Bahamas"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>929</span> </span><span class="NAME">BH</span><span class="PUNC">:</span><span class="STRN">"Bahrain"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>930</span> </span><span class="NAME">BD</span><span class="PUNC">:</span><span class="STRN">"Bangladesh"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>931</span> </span><span class="NAME">BB</span><span class="PUNC">:</span><span class="STRN">"Barbados"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>932</span> </span><span class="NAME">BY</span><span class="PUNC">:</span><span class="STRN">"Belarus"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>933</span> </span><span class="NAME">BE</span><span class="PUNC">:</span><span class="STRN">"Belgium"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>934</span> </span><span class="NAME">BZ</span><span class="PUNC">:</span><span class="STRN">"Belize"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>935</span> </span><span class="NAME">BJ</span><span class="PUNC">:</span><span class="STRN">"Benin"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>936</span> </span><span class="NAME">BM</span><span class="PUNC">:</span><span class="STRN">"Bermuda"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>937</span> </span><span class="NAME">BT</span><span class="PUNC">:</span><span class="STRN">"Bhutan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>938</span> </span><span class="NAME">BO</span><span class="PUNC">:</span><span class="STRN">"Bolivia, Plurinational State of"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>939</span> </span><span class="NAME">BQ</span><span class="PUNC">:</span><span class="STRN">"Bonaire, Sint Eustatius and Saba"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>940</span> </span><span class="NAME">BA</span><span class="PUNC">:</span><span class="STRN">"Bosnia and Herzegovina"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>941</span> </span><span class="NAME">BW</span><span class="PUNC">:</span><span class="STRN">"Botswana"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>942</span> </span><span class="NAME">BV</span><span class="PUNC">:</span><span class="STRN">"Bouvet Island"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>943</span> </span><span class="NAME">BR</span><span class="PUNC">:</span><span class="STRN">"Brazil"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>944</span> </span><span class="NAME">IO</span><span class="PUNC">:</span><span class="STRN">"British Indian Ocean Territory"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>945</span> </span><span class="NAME">BN</span><span class="PUNC">:</span><span class="STRN">"Brunei Darussalam"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>946</span> </span><span class="NAME">BG</span><span class="PUNC">:</span><span class="STRN">"Bulgaria"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>947</span> </span><span class="NAME">BF</span><span class="PUNC">:</span><span class="STRN">"Burkina Faso"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>948</span> </span><span class="NAME">BI</span><span class="PUNC">:</span><span class="STRN">"Burundi"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>949</span> </span><span class="NAME">KH</span><span class="PUNC">:</span><span class="STRN">"Cambodia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>950</span> </span><span class="NAME">CM</span><span class="PUNC">:</span><span class="STRN">"Cameroon"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>951</span> </span><span class="NAME">CA</span><span class="PUNC">:</span><span class="STRN">"Canada"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>952</span> </span><span class="NAME">CV</span><span class="PUNC">:</span><span class="STRN">"Cape Verde"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>953</span> </span><span class="NAME">KY</span><span class="PUNC">:</span><span class="STRN">"Cayman Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>954</span> </span><span class="NAME">CF</span><span class="PUNC">:</span><span class="STRN">"Central African Republic"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>955</span> </span><span class="NAME">TD</span><span class="PUNC">:</span><span class="STRN">"Chad"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>956</span> </span><span class="NAME">CL</span><span class="PUNC">:</span><span class="STRN">"Chile"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>957</span> </span><span class="NAME">CN</span><span class="PUNC">:</span><span class="STRN">"China"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>958</span> </span><span class="NAME">CX</span><span class="PUNC">:</span><span class="STRN">"Christmas Island"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>959</span> </span><span class="NAME">CC</span><span class="PUNC">:</span><span class="STRN">"Cocos (Keeling) Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>960</span> </span><span class="NAME">CO</span><span class="PUNC">:</span><span class="STRN">"Colombia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>961</span> </span><span class="NAME">KM</span><span class="PUNC">:</span><span class="STRN">"Comoros"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>962</span> </span><span class="NAME">CG</span><span class="PUNC">:</span><span class="STRN">"Congo"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>963</span> </span><span class="NAME">CD</span><span class="PUNC">:</span><span class="STRN">"Congo, the Democratic Republic of the"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>964</span> </span><span class="NAME">CK</span><span class="PUNC">:</span><span class="STRN">"Cook Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>965</span> </span><span class="NAME">CR</span><span class="PUNC">:</span><span class="STRN">"Costa Rica"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>966</span> </span><span class="NAME">CI</span><span class="PUNC">:</span><span class="STRN">"Cote d'Ivoire"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>967</span> </span><span class="NAME">HR</span><span class="PUNC">:</span><span class="STRN">"Croatia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>968</span> </span><span class="NAME">CU</span><span class="PUNC">:</span><span class="STRN">"Cuba"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>969</span> </span><span class="NAME">CW</span><span class="PUNC">:</span><span class="STRN">"Curacao"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>970</span> </span><span class="NAME">CY</span><span class="PUNC">:</span><span class="STRN">"Cyprus"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>971</span> </span><span class="NAME">CZ</span><span class="PUNC">:</span><span class="STRN">"Czech Republic"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>972</span> </span><span class="NAME">DK</span><span class="PUNC">:</span><span class="STRN">"Denmark"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>973</span> </span><span class="NAME">DJ</span><span class="PUNC">:</span><span class="STRN">"Djibouti"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>974</span> </span><span class="NAME">DM</span><span class="PUNC">:</span><span class="STRN">"Dominica"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>975</span> </span><span class="NAME">DO</span><span class="PUNC">:</span><span class="STRN">"Dominican Republic"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>976</span> </span><span class="NAME">EC</span><span class="PUNC">:</span><span class="STRN">"Ecuador"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>977</span> </span><span class="NAME">EG</span><span class="PUNC">:</span><span class="STRN">"Egypt"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>978</span> </span><span class="NAME">SV</span><span class="PUNC">:</span><span class="STRN">"El Salvador"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>979</span> </span><span class="NAME">GQ</span><span class="PUNC">:</span><span class="STRN">"Equatorial Guinea"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>980</span> </span><span class="NAME">ER</span><span class="PUNC">:</span><span class="STRN">"Eritrea"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>981</span> </span><span class="NAME">EE</span><span class="PUNC">:</span><span class="STRN">"Estonia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>982</span> </span><span class="NAME">ET</span><span class="PUNC">:</span><span class="STRN">"Ethiopia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>983</span> </span><span class="NAME">FK</span><span class="PUNC">:</span><span class="STRN">"Falkland Islands (Malvinas)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>984</span> </span><span class="NAME">FO</span><span class="PUNC">:</span><span class="STRN">"Faroe Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>985</span> </span><span class="NAME">FJ</span><span class="PUNC">:</span><span class="STRN">"Fiji"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>986</span> </span><span class="NAME">FI</span><span class="PUNC">:</span><span class="STRN">"Finland"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>987</span> </span><span class="NAME">FR</span><span class="PUNC">:</span><span class="STRN">"France"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>988</span> </span><span class="NAME">GF</span><span class="PUNC">:</span><span class="STRN">"French Guiana"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>989</span> </span><span class="NAME">PF</span><span class="PUNC">:</span><span class="STRN">"French Polynesia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>990</span> </span><span class="NAME">TF</span><span class="PUNC">:</span><span class="STRN">"French Southern Territories"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>991</span> </span><span class="NAME">GA</span><span class="PUNC">:</span><span class="STRN">"Gabon"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>992</span> </span><span class="NAME">GM</span><span class="PUNC">:</span><span class="STRN">"Gambia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>993</span> </span><span class="NAME">GE</span><span class="PUNC">:</span><span class="STRN">"Georgia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>994</span> </span><span class="NAME">DE</span><span class="PUNC">:</span><span class="STRN">"Germany"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>995</span> </span><span class="NAME">GH</span><span class="PUNC">:</span><span class="STRN">"Ghana"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>996</span> </span><span class="NAME">GI</span><span class="PUNC">:</span><span class="STRN">"Gibraltar"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>997</span> </span><span class="NAME">GR</span><span class="PUNC">:</span><span class="STRN">"Greece"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>998</span> </span><span class="NAME">GL</span><span class="PUNC">:</span><span class="STRN">"Greenland"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>999</span> </span><span class="NAME">GD</span><span class="PUNC">:</span><span class="STRN">"Grenada"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1000</span> </span><span class="NAME">GP</span><span class="PUNC">:</span><span class="STRN">"Guadeloupe"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1001</span> </span><span class="NAME">GU</span><span class="PUNC">:</span><span class="STRN">"Guam"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1002</span> </span><span class="NAME">GT</span><span class="PUNC">:</span><span class="STRN">"Guatemala"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1003</span> </span><span class="NAME">GG</span><span class="PUNC">:</span><span class="STRN">"Guernsey"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1004</span> </span><span class="NAME">GN</span><span class="PUNC">:</span><span class="STRN">"Guinea"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1005</span> </span><span class="NAME">GW</span><span class="PUNC">:</span><span class="STRN">"Guinea-Bissau"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1006</span> </span><span class="NAME">GY</span><span class="PUNC">:</span><span class="STRN">"Guyana"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1007</span> </span><span class="NAME">HT</span><span class="PUNC">:</span><span class="STRN">"Haiti"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1008</span> </span><span class="NAME">HM</span><span class="PUNC">:</span><span class="STRN">"Heard Island and McDonald Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1009</span> </span><span class="NAME">VA</span><span class="PUNC">:</span><span class="STRN">"Holy See (Vatican City State)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1010</span> </span><span class="NAME">HN</span><span class="PUNC">:</span><span class="STRN">"Honduras"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1011</span> </span><span class="NAME">HK</span><span class="PUNC">:</span><span class="STRN">"Hong Kong"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1012</span> </span><span class="NAME">HU</span><span class="PUNC">:</span><span class="STRN">"Hungary"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1013</span> </span><span class="NAME">IS</span><span class="PUNC">:</span><span class="STRN">"Iceland"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1014</span> </span><span class="NAME">IN</span><span class="PUNC">:</span><span class="STRN">"India"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1015</span> </span><span class="NAME">ID</span><span class="PUNC">:</span><span class="STRN">"Indonesia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1016</span> </span><span class="NAME">IR</span><span class="PUNC">:</span><span class="STRN">"Iran, Islamic Republic of"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1017</span> </span><span class="NAME">IQ</span><span class="PUNC">:</span><span class="STRN">"Iraq"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1018</span> </span><span class="NAME">IE</span><span class="PUNC">:</span><span class="STRN">"Ireland"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1019</span> </span><span class="NAME">IM</span><span class="PUNC">:</span><span class="STRN">"Isle of Man"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1020</span> </span><span class="NAME">IL</span><span class="PUNC">:</span><span class="STRN">"Israel"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1021</span> </span><span class="NAME">IT</span><span class="PUNC">:</span><span class="STRN">"Italy"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1022</span> </span><span class="NAME">JM</span><span class="PUNC">:</span><span class="STRN">"Jamaica"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1023</span> </span><span class="NAME">JP</span><span class="PUNC">:</span><span class="STRN">"Japan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1024</span> </span><span class="NAME">JE</span><span class="PUNC">:</span><span class="STRN">"Jersey"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1025</span> </span><span class="NAME">JO</span><span class="PUNC">:</span><span class="STRN">"Jordan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1026</span> </span><span class="NAME">KZ</span><span class="PUNC">:</span><span class="STRN">"Kazakhstan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1027</span> </span><span class="NAME">KE</span><span class="PUNC">:</span><span class="STRN">"Kenya"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1028</span> </span><span class="NAME">KI</span><span class="PUNC">:</span><span class="STRN">"Kiribati"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1029</span> </span><span class="NAME">KP</span><span class="PUNC">:</span><span class="STRN">"Korea, Democratic People's Republic of"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1030</span> </span><span class="NAME">KR</span><span class="PUNC">:</span><span class="STRN">"Korea, Republic of"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1031</span> </span><span class="NAME">KW</span><span class="PUNC">:</span><span class="STRN">"Kuwait"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1032</span> </span><span class="NAME">KG</span><span class="PUNC">:</span><span class="STRN">"Kyrgyzstan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1033</span> </span><span class="NAME">LA</span><span class="PUNC">:</span><span class="STRN">"Lao People's Democratic Republic"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1034</span> </span><span class="NAME">LV</span><span class="PUNC">:</span><span class="STRN">"Latvia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1035</span> </span><span class="NAME">LB</span><span class="PUNC">:</span><span class="STRN">"Lebanon"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1036</span> </span><span class="NAME">LS</span><span class="PUNC">:</span><span class="STRN">"Lesotho"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1037</span> </span><span class="NAME">LR</span><span class="PUNC">:</span><span class="STRN">"Liberia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1038</span> </span><span class="NAME">LY</span><span class="PUNC">:</span><span class="STRN">"Libya"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1039</span> </span><span class="NAME">LI</span><span class="PUNC">:</span><span class="STRN">"Liechtenstein"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1040</span> </span><span class="NAME">LT</span><span class="PUNC">:</span><span class="STRN">"Lithuania"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1041</span> </span><span class="NAME">LU</span><span class="PUNC">:</span><span class="STRN">"Luxembourg"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1042</span> </span><span class="NAME">MO</span><span class="PUNC">:</span><span class="STRN">"Macao"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1043</span> </span><span class="NAME">MK</span><span class="PUNC">:</span><span class="STRN">"Macedonia, the Former Yugoslav Republic of"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1044</span> </span><span class="NAME">MG</span><span class="PUNC">:</span><span class="STRN">"Madagascar"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1045</span> </span><span class="NAME">MW</span><span class="PUNC">:</span><span class="STRN">"Malawi"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1046</span> </span><span class="NAME">MY</span><span class="PUNC">:</span><span class="STRN">"Malaysia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1047</span> </span><span class="NAME">MV</span><span class="PUNC">:</span><span class="STRN">"Maldives"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1048</span> </span><span class="NAME">ML</span><span class="PUNC">:</span><span class="STRN">"Mali"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1049</span> </span><span class="NAME">MT</span><span class="PUNC">:</span><span class="STRN">"Malta"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1050</span> </span><span class="NAME">MH</span><span class="PUNC">:</span><span class="STRN">"Marshall Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1051</span> </span><span class="NAME">MQ</span><span class="PUNC">:</span><span class="STRN">"Martinique"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1052</span> </span><span class="NAME">MR</span><span class="PUNC">:</span><span class="STRN">"Mauritania"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1053</span> </span><span class="NAME">MU</span><span class="PUNC">:</span><span class="STRN">"Mauritius"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1054</span> </span><span class="NAME">YT</span><span class="PUNC">:</span><span class="STRN">"Mayotte"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1055</span> </span><span class="NAME">MX</span><span class="PUNC">:</span><span class="STRN">"Mexico"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1056</span> </span><span class="NAME">FM</span><span class="PUNC">:</span><span class="STRN">"Micronesia, Federated States of"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1057</span> </span><span class="NAME">MD</span><span class="PUNC">:</span><span class="STRN">"Moldova, Republic of"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1058</span> </span><span class="NAME">MC</span><span class="PUNC">:</span><span class="STRN">"Monaco"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1059</span> </span><span class="NAME">MN</span><span class="PUNC">:</span><span class="STRN">"Mongolia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1060</span> </span><span class="NAME">ME</span><span class="PUNC">:</span><span class="STRN">"Montenegro"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1061</span> </span><span class="NAME">MS</span><span class="PUNC">:</span><span class="STRN">"Montserrat"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1062</span> </span><span class="NAME">MA</span><span class="PUNC">:</span><span class="STRN">"Morocco"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1063</span> </span><span class="NAME">MZ</span><span class="PUNC">:</span><span class="STRN">"Mozambique"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1064</span> </span><span class="NAME">MM</span><span class="PUNC">:</span><span class="STRN">"Myanmar"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1065</span> </span><span class="NAME">NA</span><span class="PUNC">:</span><span class="STRN">"Namibia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1066</span> </span><span class="NAME">NR</span><span class="PUNC">:</span><span class="STRN">"Nauru"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1067</span> </span><span class="NAME">NP</span><span class="PUNC">:</span><span class="STRN">"Nepal"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1068</span> </span><span class="NAME">NL</span><span class="PUNC">:</span><span class="STRN">"Netherlands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1069</span> </span><span class="NAME">NC</span><span class="PUNC">:</span><span class="STRN">"New Caledonia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1070</span> </span><span class="NAME">NZ</span><span class="PUNC">:</span><span class="STRN">"New Zealand"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1071</span> </span><span class="NAME">NI</span><span class="PUNC">:</span><span class="STRN">"Nicaragua"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1072</span> </span><span class="NAME">NE</span><span class="PUNC">:</span><span class="STRN">"Niger"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1073</span> </span><span class="NAME">NG</span><span class="PUNC">:</span><span class="STRN">"Nigeria"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1074</span> </span><span class="NAME">NU</span><span class="PUNC">:</span><span class="STRN">"Niue"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1075</span> </span><span class="NAME">NF</span><span class="PUNC">:</span><span class="STRN">"Norfolk Island"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1076</span> </span><span class="NAME">MP</span><span class="PUNC">:</span><span class="STRN">"Northern Mariana Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1077</span> </span><span class="NAME">NO</span><span class="PUNC">:</span><span class="STRN">"Norway"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1078</span> </span><span class="NAME">OM</span><span class="PUNC">:</span><span class="STRN">"Oman"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1079</span> </span><span class="NAME">PK</span><span class="PUNC">:</span><span class="STRN">"Pakistan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1080</span> </span><span class="NAME">PW</span><span class="PUNC">:</span><span class="STRN">"Palau"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1081</span> </span><span class="NAME">PS</span><span class="PUNC">:</span><span class="STRN">"Palestine, State of"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1082</span> </span><span class="NAME">PA</span><span class="PUNC">:</span><span class="STRN">"Panama"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1083</span> </span><span class="NAME">PG</span><span class="PUNC">:</span><span class="STRN">"Papua New Guinea"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1084</span> </span><span class="NAME">PY</span><span class="PUNC">:</span><span class="STRN">"Paraguay"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1085</span> </span><span class="NAME">PE</span><span class="PUNC">:</span><span class="STRN">"Peru"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1086</span> </span><span class="NAME">PH</span><span class="PUNC">:</span><span class="STRN">"Philippines"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1087</span> </span><span class="NAME">PN</span><span class="PUNC">:</span><span class="STRN">"Pitcairn"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1088</span> </span><span class="NAME">PL</span><span class="PUNC">:</span><span class="STRN">"Poland"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1089</span> </span><span class="NAME">PT</span><span class="PUNC">:</span><span class="STRN">"Portugal"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1090</span> </span><span class="NAME">PR</span><span class="PUNC">:</span><span class="STRN">"Puerto Rico"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1091</span> </span><span class="NAME">QA</span><span class="PUNC">:</span><span class="STRN">"Qatar"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1092</span> </span><span class="NAME">RE</span><span class="PUNC">:</span><span class="STRN">"Reunion"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1093</span> </span><span class="NAME">RO</span><span class="PUNC">:</span><span class="STRN">"Romania"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1094</span> </span><span class="NAME">RU</span><span class="PUNC">:</span><span class="STRN">"Russian Federation"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1095</span> </span><span class="NAME">RW</span><span class="PUNC">:</span><span class="STRN">"Rwanda"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1096</span> </span><span class="NAME">BL</span><span class="PUNC">:</span><span class="STRN">"Saint Bartholemy"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1097</span> </span><span class="NAME">SH</span><span class="PUNC">:</span><span class="STRN">"Saint Helena, Ascension and Tristan da Cunha"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1098</span> </span><span class="NAME">KN</span><span class="PUNC">:</span><span class="STRN">"Saint Kitts and Nevis"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1099</span> </span><span class="NAME">LC</span><span class="PUNC">:</span><span class="STRN">"Saint Lucia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1100</span> </span><span class="NAME">MF</span><span class="PUNC">:</span><span class="STRN">"Saint Martin (French part)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1101</span> </span><span class="NAME">PM</span><span class="PUNC">:</span><span class="STRN">"Saint Pierre and Miquelon"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1102</span> </span><span class="NAME">VC</span><span class="PUNC">:</span><span class="STRN">"Saint Vincent and the Grenadines"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1103</span> </span><span class="NAME">WS</span><span class="PUNC">:</span><span class="STRN">"Samoa"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1104</span> </span><span class="NAME">SM</span><span class="PUNC">:</span><span class="STRN">"San Marino"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1105</span> </span><span class="NAME">ST</span><span class="PUNC">:</span><span class="STRN">"Sao Tome and Principe"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1106</span> </span><span class="NAME">SA</span><span class="PUNC">:</span><span class="STRN">"Saudi Arabia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1107</span> </span><span class="NAME">SN</span><span class="PUNC">:</span><span class="STRN">"Senegal"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1108</span> </span><span class="NAME">RS</span><span class="PUNC">:</span><span class="STRN">"Serbia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1109</span> </span><span class="NAME">SC</span><span class="PUNC">:</span><span class="STRN">"Seychelles"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1110</span> </span><span class="NAME">SL</span><span class="PUNC">:</span><span class="STRN">"Sierra Leone"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1111</span> </span><span class="NAME">SG</span><span class="PUNC">:</span><span class="STRN">"Singapore"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1112</span> </span><span class="NAME">SX</span><span class="PUNC">:</span><span class="STRN">"Sint Maarten (Dutch part)"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1113</span> </span><span class="NAME">SK</span><span class="PUNC">:</span><span class="STRN">"Slovakia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1114</span> </span><span class="NAME">SI</span><span class="PUNC">:</span><span class="STRN">"Slovenia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1115</span> </span><span class="NAME">SB</span><span class="PUNC">:</span><span class="STRN">"Solomon Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1116</span> </span><span class="NAME">SO</span><span class="PUNC">:</span><span class="STRN">"Somalia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1117</span> </span><span class="NAME">ZA</span><span class="PUNC">:</span><span class="STRN">"South Africa"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1118</span> </span><span class="NAME">GS</span><span class="PUNC">:</span><span class="STRN">"South Georgia and the South Sandwich Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1119</span> </span><span class="NAME">SS</span><span class="PUNC">:</span><span class="STRN">"South Sudan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1120</span> </span><span class="NAME">ES</span><span class="PUNC">:</span><span class="STRN">"Spain"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1121</span> </span><span class="NAME">LK</span><span class="PUNC">:</span><span class="STRN">"Sri Lanka"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1122</span> </span><span class="NAME">SD</span><span class="PUNC">:</span><span class="STRN">"Sudan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1123</span> </span><span class="NAME">SR</span><span class="PUNC">:</span><span class="STRN">"Suriname"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1124</span> </span><span class="NAME">SJ</span><span class="PUNC">:</span><span class="STRN">"Svalbard and Jan Mayen"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1125</span> </span><span class="NAME">SZ</span><span class="PUNC">:</span><span class="STRN">"Swaziland"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1126</span> </span><span class="NAME">SE</span><span class="PUNC">:</span><span class="STRN">"Sweden"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1127</span> </span><span class="NAME">CH</span><span class="PUNC">:</span><span class="STRN">"Switzerland"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1128</span> </span><span class="NAME">SY</span><span class="PUNC">:</span><span class="STRN">"Syrian Arab Republic"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1129</span> </span><span class="NAME">TW</span><span class="PUNC">:</span><span class="STRN">"Taiwan, Province of China"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1130</span> </span><span class="NAME">TJ</span><span class="PUNC">:</span><span class="STRN">"Tajikistan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1131</span> </span><span class="NAME">TZ</span><span class="PUNC">:</span><span class="STRN">"Tanzania, United Republic of"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1132</span> </span><span class="NAME">TH</span><span class="PUNC">:</span><span class="STRN">"Thailand"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1133</span> </span><span class="NAME">TL</span><span class="PUNC">:</span><span class="STRN">"Timor-Leste"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1134</span> </span><span class="NAME">TG</span><span class="PUNC">:</span><span class="STRN">"Togo"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1135</span> </span><span class="NAME">TK</span><span class="PUNC">:</span><span class="STRN">"Tokelau"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1136</span> </span><span class="NAME">TO</span><span class="PUNC">:</span><span class="STRN">"Tonga"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1137</span> </span><span class="NAME">TT</span><span class="PUNC">:</span><span class="STRN">"Trinidad and Tobago"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1138</span> </span><span class="NAME">TN</span><span class="PUNC">:</span><span class="STRN">"Tunisia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1139</span> </span><span class="NAME">TR</span><span class="PUNC">:</span><span class="STRN">"Turkey"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1140</span> </span><span class="NAME">TM</span><span class="PUNC">:</span><span class="STRN">"Turkmenistan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1141</span> </span><span class="NAME">TC</span><span class="PUNC">:</span><span class="STRN">"Turks and Caicos Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1142</span> </span><span class="NAME">TV</span><span class="PUNC">:</span><span class="STRN">"Tuvalu"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1143</span> </span><span class="NAME">UG</span><span class="PUNC">:</span><span class="STRN">"Uganda"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1144</span> </span><span class="NAME">UA</span><span class="PUNC">:</span><span class="STRN">"Ukraine"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1145</span> </span><span class="NAME">AE</span><span class="PUNC">:</span><span class="STRN">"United Arab Emirates"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1146</span> </span><span class="NAME">GB</span><span class="PUNC">:</span><span class="STRN">"United Kingdom"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1147</span> </span><span class="NAME">US</span><span class="PUNC">:</span><span class="STRN">"United States"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1148</span> </span><span class="NAME">UM</span><span class="PUNC">:</span><span class="STRN">"United States Minor Outlying Islands"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1149</span> </span><span class="NAME">UY</span><span class="PUNC">:</span><span class="STRN">"Uruguay"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1150</span> </span><span class="NAME">UZ</span><span class="PUNC">:</span><span class="STRN">"Uzbekistan"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1151</span> </span><span class="NAME">VU</span><span class="PUNC">:</span><span class="STRN">"Vanuatu"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1152</span> </span><span class="NAME">VE</span><span class="PUNC">:</span><span class="STRN">"Venezuela, Bolivarian Republic of"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1153</span> </span><span class="NAME">VN</span><span class="PUNC">:</span><span class="STRN">"Viet Nam"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1154</span> </span><span class="NAME">VG</span><span class="PUNC">:</span><span class="STRN">"Virgin Islands, British"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1155</span> </span><span class="NAME">VI</span><span class="PUNC">:</span><span class="STRN">"Virgin Islands, U.S."</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1156</span> </span><span class="NAME">WF</span><span class="PUNC">:</span><span class="STRN">"Wallis and Futuna"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1157</span> </span><span class="NAME">EH</span><span class="PUNC">:</span><span class="STRN">"Western Sahara"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1158</span> </span><span class="NAME">YE</span><span class="PUNC">:</span><span class="STRN">"Yemen"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1159</span> </span><span class="NAME">ZM</span><span class="PUNC">:</span><span class="STRN">"Zambia"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1160</span> </span><span class="NAME">ZW</span><span class="PUNC">:</span><span class="STRN">"Zimbabwe"</span><span class="WHIT">
<span class='line'>1161</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1162</span> 
<span class='line'>1163</span> 
<span class='line'>1164</span> 
<span class='line'>1165</span> </span><span class="COMM">/**
<span class='line'>1166</span>  * Extract subject from certificate as ASN1 object
<span class='line'>1167</span>  *
<span class='line'>1168</span>  * @param {X509} cert the certificate
<span class='line'>1169</span>  * @type ASN1
<span class='line'>1170</span>  * @return the subject as ASN1
<span class='line'>1171</span>  */</span><span class="WHIT">
<span class='line'>1172</span> </span><span class="NAME">PKIXCommon.getSubjectAsASN1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1173</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1174</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1175</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1176</span> 
<span class='line'>1177</span> 
<span class='line'>1178</span> 
<span class='line'>1179</span> </span><span class="COMM">/**
<span class='line'>1180</span>  * Extract issuer from certificate as ASN1 object
<span class='line'>1181</span>  *
<span class='line'>1182</span>  * @param {X509} cert the certificate
<span class='line'>1183</span>  * @type ASN1
<span class='line'>1184</span>  * @return the issuer as ASN1
<span class='line'>1185</span>  */</span><span class="WHIT">
<span class='line'>1186</span> </span><span class="NAME">PKIXCommon.getIssuerAsASN1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1187</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1188</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">a.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">get</span><span class="PUNC">(</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1189</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1190</span> 
<span class='line'>1191</span> 
<span class='line'>1192</span> 
<span class='line'>1193</span> </span><span class="COMM">/**
<span class='line'>1194</span>  * Convert binary data to PEM format
<span class='line'>1195</span>  *
<span class='line'>1196</span>  * @param {String} label the label to be used in the MIME header and footer
<span class='line'>1197</span>  * @param {ByteString} bin the binary data
<span class='line'>1198</span>  * @type String
<span class='line'>1199</span>  * @return the MIME/BASE64 encoded string
<span class='line'>1200</span>  */</span><span class="WHIT">
<span class='line'>1201</span> </span><span class="NAME">PKIXCommon.toPEM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bin</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1202</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Parameter label must be string"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1203</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">bin</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Parameter bin must be ByteString"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1204</span> 
<span class='line'>1205</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"-----BEGIN "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-----\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1206</span> 
<span class='line'>1207</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b64</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bin.toString</span><span class="PUNC">(</span><span class="NAME">BASE64</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1208</span> </span><span class="WHIT">	</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">b64.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1209</span> </span><span class="WHIT">		</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b64.substr</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">64</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1210</span> </span><span class="WHIT">		</span><span class="NAME">b64</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b64.substr</span><span class="PUNC">(</span><span class="NUMB">64</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1211</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1212</span> 
<span class='line'>1213</span> </span><span class="WHIT">	</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"-----END "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-----\n"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1214</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1215</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1216</span> 
<span class='line'>1217</span> 
<span class='line'>1218</span> 
<span class='line'>1219</span> </span><span class="COMM">/**
<span class='line'>1220</span>  * Parse PEM format and extract binary data
<span class='line'>1221</span>  *
<span class='line'>1222</span>  * @param {String} label the label of the section
<span class='line'>1223</span>  * @param {String} bin the binary data
<span class='line'>1224</span>  * @type String
<span class='line'>1225</span>  * @return the MIME/BASE64 encoded string
<span class='line'>1226</span>  */</span><span class="WHIT">
<span class='line'>1227</span> </span><span class="NAME">PKIXCommon.parsePEM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pem</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1228</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">label</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Parameter label must be string"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1229</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">pem</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Parameter pem must be string"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1230</span> 
<span class='line'>1231</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lines</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pem.split</span><span class="PUNC">(</span><span class="STRN">"\n"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1232</span> 
<span class='line'>1233</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">b64str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1234</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1235</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">lines.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1236</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lines</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1237</span> 
<span class='line'>1238</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str.endsWith</span><span class="PUNC">(</span><span class="STRN">"\r"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1239</span> </span><span class="WHIT">			</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">str.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">str.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1240</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1241</span> 
<span class='line'>1242</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"-----BEGIN "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-----"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1243</span> </span><span class="WHIT">			</span><span class="NAME">parse</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1244</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"-----END "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">label</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"-----"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1245</span> </span><span class="WHIT">			</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1246</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parse</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1247</span> </span><span class="WHIT">			</span><span class="NAME">b64str</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1248</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1249</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1250</span> 
<span class='line'>1251</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">b64str</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">BASE64</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1252</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1253</span> 
<span class='line'>1254</span> 
<span class='line'>1255</span> 
<span class='line'>1256</span> </span><span class="COMM">/**
<span class='line'>1257</span>  * Writes a byte string object to file
<span class='line'>1258</span>  *
<span class='line'>1259</span>  * &lt;p>The filename is mapped to the workspace location.&lt;/p>
<span class='line'>1260</span>  *
<span class='line'>1261</span>  * @param {String} filename the fully qualified name of the file
<span class='line'>1262</span>  * @param {ByteString} content the content to write
<span class='line'>1263</span>  */</span><span class="WHIT">
<span class='line'>1264</span> </span><span class="NAME">PKIXCommon.writeFileToDisk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">filename</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1265</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">java.io.FileOutputStream</span><span class="PUNC">(</span><span class="NAME">filename</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1266</span> </span><span class="WHIT">	</span><span class="NAME">file.write</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1267</span> </span><span class="WHIT">	</span><span class="NAME">file.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1268</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1269</span> 
<span class='line'>1270</span> 
<span class='line'>1271</span> 
<span class='line'>1272</span> </span><span class="COMM">/**
<span class='line'>1273</span>  * Loads a binary file from disk
<span class='line'>1274</span>  *
<span class='line'>1275</span>  * @param {String} filename the fully qualified file name
<span class='line'>1276</span>  * @return the binary content
<span class='line'>1277</span>  * @type ByteString
<span class='line'>1278</span>  */</span><span class="WHIT">
<span class='line'>1279</span> </span><span class="NAME">PKIXCommon.readFileFromDisk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">filename</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1280</span> </span><span class="WHIT">	</span><span class="COMM">// Open stream</span><span class="WHIT">
<span class='line'>1281</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">f</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">java.io.FileInputStream</span><span class="PUNC">(</span><span class="NAME">filename</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1282</span> 
<span class='line'>1283</span> </span><span class="WHIT">	</span><span class="COMM">// Determine file size</span><span class="WHIT">
<span class='line'>1284</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">flen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.available</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1285</span> 
<span class='line'>1286</span> </span><span class="WHIT">	</span><span class="COMM">// Allocate native byte array</span><span class="WHIT">
<span class='line'>1287</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">java.lang.reflect.Array.newInstance</span><span class="PUNC">(</span><span class="NAME">java.lang.Byte.TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">flen</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1288</span> 
<span class='line'>1289</span> </span><span class="WHIT">	</span><span class="COMM">// Read into byte array</span><span class="WHIT">
<span class='line'>1290</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f.read</span><span class="PUNC">(</span><span class="NAME">bs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1291</span> 
<span class='line'>1292</span> </span><span class="WHIT">	</span><span class="NAME">f.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1293</span> 
<span class='line'>1294</span> </span><span class="WHIT">	</span><span class="COMM">// Allocate JavaScript ByteBuffer from native/wrapped byte array</span><span class="WHIT">
<span class='line'>1295</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="NAME">bs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1296</span> 
<span class='line'>1297</span> </span><span class="WHIT">	</span><span class="COMM">// Convert to JavaScript ByteString</span><span class="WHIT">
<span class='line'>1298</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1299</span> 
<span class='line'>1300</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1301</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1302</span> 
<span class='line'>1303</span> 
<span class='line'>1304</span> 
<span class='line'>1305</span> </span><span class="NAME">PKIXCommon.test</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1306</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">C</span><span class="PUNC">:</span><span class="STRN">"C"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">O</span><span class="PUNC">:</span><span class="STRN">"O"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OU</span><span class="PUNC">:</span><span class="STRN">"OU"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">SP</span><span class="PUNC">:</span><span class="STRN">"SP"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">L</span><span class="PUNC">:</span><span class="STRN">"L"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">DC</span><span class="PUNC">:</span><span class="STRN">"DC"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">T</span><span class="PUNC">:</span><span class="STRN">"T"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">G</span><span class="PUNC">:</span><span class="STRN">"G"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">SN</span><span class="PUNC">:</span><span class="STRN">"SN"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CN</span><span class="PUNC">:</span><span class="STRN">"CN"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">SERIALNUMBER</span><span class="PUNC">:</span><span class="STRN">"serial"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">DNQ</span><span class="PUNC">:</span><span class="STRN">"DNQ"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1307</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.encodeName</span><span class="PUNC">(</span><span class="NAME">issuer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1308</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">dn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1309</span> 
<span class='line'>1310</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1311</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">r.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1312</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"80"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1313</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">r.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"0080"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1314</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"FF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1315</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">r.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00FF"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1316</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0000"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1317</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">r.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"00"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1318</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"0080"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1319</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">r.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"0080"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1320</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"000080"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1321</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">r.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"0080"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1322</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1323</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview A X509 certificate generator class following RFC5280
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/x509/PKIXCommon"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKIXCommon</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> 
<span class='line'> 29</span> 
<span class='line'> 30</span> 
<span class='line'> 31</span> </span><span class="COMM">/**
<span class='line'> 32</span>  * Create a X.509 certificate generator.
<span class='line'> 33</span>  *
<span class='line'> 34</span>  * @class Class implementing a X.509 certificate generator
<span class='line'> 35</span>  * @constructor
<span class='line'> 36</span>  *
<span class='line'> 37</span>  * @param {Crypto} crypto the crypto provider to use for signing operations
<span class='line'> 38</span>  */</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">X509CertificateGenerator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="WHIT">	</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">	</span><span class="NAME">this.encodeECDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT">	</span><span class="NAME">this.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 44</span> 
<span class='line'> 45</span> </span><span class="NAME">exports.X509CertificateGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">X509CertificateGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> 
<span class='line'> 47</span> 
<span class='line'> 48</span> 
<span class='line'> 49</span> </span><span class="COMM">/**
<span class='line'> 50</span>  * Resets all internal state variables.
<span class='line'> 51</span>  *
<span class='line'> 52</span>  */</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="NAME">X509CertificateGenerator.prototype.reset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">	</span><span class="NAME">this.extensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> 
<span class='line'> 56</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 57</span> 
<span class='line'> 58</span> 
<span class='line'> 59</span> 
<span class='line'> 60</span> </span><span class="COMM">/**
<span class='line'> 61</span>  * Sets the serial number.
<span class='line'> 62</span>  *
<span class='line'> 63</span>  * @param {ByteString} serialNumber the serial number for the certificate
<span class='line'> 64</span>  */</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="NAME">X509CertificateGenerator.prototype.setSerialNumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">serialNumber</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">	</span><span class="NAME">this.serialNumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">serialNumber</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 68</span> 
<span class='line'> 69</span> 
<span class='line'> 70</span> 
<span class='line'> 71</span> </span><span class="COMM">/**
<span class='line'> 72</span>  * Sets the isser name.
<span class='line'> 73</span>  *
<span class='line'> 74</span>  * &lt;p>The issuer name must be a JavaScript object containing the properties:&lt;/p>
<span class='line'> 75</span>  * &lt;ul>
<span class='line'> 76</span>  *  &lt;li>C - the country&lt;/li>
<span class='line'> 77</span>  *  &lt;li>O - the organization&lt;/li>
<span class='line'> 78</span>  *  &lt;li>OU - the organization unit&lt;/li>
<span class='line'> 79</span>  *  &lt;li>CN - the common name&lt;/li>
<span class='line'> 80</span>  * &lt;/ul>
<span class='line'> 81</span>  * &lt;p>Example:&lt;/p>
<span class='line'> 82</span>  * &lt;pre>
<span class='line'> 83</span>  *	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
<span class='line'> 84</span>  * &lt;/pre>
<span class='line'> 85</span>  * @param {Object} issuer the issuer name
<span class='line'> 86</span>  */</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="NAME">X509CertificateGenerator.prototype.setIssuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">issuer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">	</span><span class="NAME">this.issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 90</span> 
<span class='line'> 91</span> 
<span class='line'> 92</span> 
<span class='line'> 93</span> </span><span class="COMM">/**
<span class='line'> 94</span>  * Sets the effective date for the certificate.
<span class='line'> 95</span>  *
<span class='line'> 96</span>  * @param {String or Date} date the date in format YYMMDDHHMMSSZ
<span class='line'> 97</span>  */</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="NAME">X509CertificateGenerator.prototype.setNotBefore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">date</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">	</span><span class="NAME">this.notBefore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">date</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>101</span> 
<span class='line'>102</span> 
<span class='line'>103</span> 
<span class='line'>104</span> </span><span class="COMM">/**
<span class='line'>105</span>  * Sets the expiration date for the certificate.
<span class='line'>106</span>  *
<span class='line'>107</span>  * @param {String or Date} date the date in format YYMMDDHHMMSSZ
<span class='line'>108</span>  */</span><span class="WHIT">
<span class='line'>109</span> </span><span class="NAME">X509CertificateGenerator.prototype.setNotAfter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">date</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">	</span><span class="NAME">this.notAfter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">date</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>111</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>112</span> 
<span class='line'>113</span> 
<span class='line'>114</span> 
<span class='line'>115</span> </span><span class="COMM">/**
<span class='line'>116</span>  * Sets the subject name.
<span class='line'>117</span>  *
<span class='line'>118</span>  * &lt;p>The subject name must be a JavaScript object containing the properties:&lt;/p>
<span class='line'>119</span>  * &lt;ul>
<span class='line'>120</span>  *  &lt;li>C - the country&lt;/li>
<span class='line'>121</span>  *  &lt;li>O - the organization&lt;/li>
<span class='line'>122</span>  *  &lt;li>OU - the organization unit&lt;/li>
<span class='line'>123</span>  *  &lt;li>CN - the common name&lt;/li>
<span class='line'>124</span>  * &lt;/ul>
<span class='line'>125</span>  * &lt;p>Example:&lt;/p>
<span class='line'>126</span>  * &lt;pre>
<span class='line'>127</span>  *	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
<span class='line'>128</span>  * &lt;/pre>
<span class='line'>129</span>  * @param {Object} subject the subject name
<span class='line'>130</span>  */</span><span class="WHIT">
<span class='line'>131</span> </span><span class="NAME">X509CertificateGenerator.prototype.setSubject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">	</span><span class="NAME">this.subject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>134</span> 
<span class='line'>135</span> 
<span class='line'>136</span> 
<span class='line'>137</span> </span><span class="COMM">/**
<span class='line'>138</span>  * Sets the subjects public key
<span class='line'>139</span>  *
<span class='line'>140</span>  * &lt;p>The methods accepts ECC and RSA Public Keys.&lt;/p>
<span class='line'>141</span>  *
<span class='line'>142</span>  * @param {Key} publicKey the subjects public key
<span class='line'>143</span>  */</span><span class="WHIT">
<span class='line'>144</span> </span><span class="NAME">X509CertificateGenerator.prototype.setPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">	</span><span class="NAME">this.publicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>147</span> 
<span class='line'>148</span> 
<span class='line'>149</span> 
<span class='line'>150</span> </span><span class="COMM">/**
<span class='line'>151</span>  * Sets the signature algorithm.
<span class='line'>152</span>  *
<span class='line'>153</span>  * @param {Number} alg the signature algorithm.
<span class='line'>154</span>  */</span><span class="WHIT">
<span class='line'>155</span> </span><span class="NAME">X509CertificateGenerator.prototype.setSignatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">alg</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="NAME">this.signatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">alg</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>158</span> 
<span class='line'>159</span> 
<span class='line'>160</span> 
<span class='line'>161</span> </span><span class="COMM">/**
<span class='line'>162</span>  * Adds an extension to the certificate
<span class='line'>163</span>  *
<span class='line'>164</span>  * &lt;p>The structure is defined as:&lt;/p>
<span class='line'>165</span>  * &lt;pre>
<span class='line'>166</span>  *    Extension  ::=  SEQUENCE  {
<span class='line'>167</span>  *        extnID      OBJECT IDENTIFIER,
<span class='line'>168</span>  *        critical    BOOLEAN DEFAULT FALSE,
<span class='line'>169</span>  *        extnValue   OCTET STRING
<span class='line'>170</span>  *                    -- contains the DER encoding of an ASN.1 value
<span class='line'>171</span>  *                    -- corresponding to the extension type identified
<span class='line'>172</span>  *                    -- by extnID
<span class='line'>173</span>  *        }
<span class='line'>174</span>  *&lt;/pre>
<span class='line'>175</span>  * @param {String} extnID the extensions object identifier
<span class='line'>176</span>  * @param {Boolean} critical the extension is critical
<span class='line'>177</span>  * @param {ByteString} the extension value as ByteString
<span class='line'>178</span>  */</span><span class="WHIT">
<span class='line'>179</span> </span><span class="NAME">X509CertificateGenerator.prototype.addExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">extnID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">critical</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extnValue</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extension"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">				</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extnID"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">extnID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">			</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> 
<span class='line'>184</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">critical</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"critical"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BOOLEAN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"FF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>187</span> 
<span class='line'>188</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extnValue"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extnValue</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="NAME">this.extensions.push</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span> 
<span class='line'>191</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>192</span> 
<span class='line'>193</span> 
<span class='line'>194</span> 
<span class='line'>195</span> </span><span class="COMM">/**
<span class='line'>196</span>  * Adds the key usage extension.
<span class='line'>197</span>  *
<span class='line'>198</span>  * &lt;p>The following flags are defined:&lt;/p>
<span class='line'>199</span>  * &lt;pre>
<span class='line'>200</span>  * PKIXCommon.digitalSignature = 0x0080;
<span class='line'>201</span>  * PKIXCommon.nonRepudiation   = 0x0040;
<span class='line'>202</span>  * PKIXCommon.keyEncipherment  = 0x0020;
<span class='line'>203</span>  * PKIXCommon.dataEncipherment = 0x0010;
<span class='line'>204</span>  * PKIXCommon.keyAgreement     = 0x0008;
<span class='line'>205</span>  * PKIXCommon.keyCertSign      = 0x0004;
<span class='line'>206</span>  * PKIXCommon.cRLSign          = 0x0002;
<span class='line'>207</span>  * PKIXCommon.encipherOnly     = 0x0001;
<span class='line'>208</span>  * PKIXCommon.decipherOnly     = 0x8000;
<span class='line'>209</span>  * &lt;/pre>
<span class='line'>210</span>  * @param {Number} the key usage flags as combination of the flags defined above.
<span class='line'>211</span>  */</span><span class="WHIT">
<span class='line'>212</span> </span><span class="NAME">X509CertificateGenerator.prototype.addKeyUsageExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">flags</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.bitstringForInteger</span><span class="PUNC">(</span><span class="NAME">flags</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"2.5.29.15"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>215</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>216</span> 
<span class='line'>217</span> </span><span class="COMM">// Deprecated: Use PKIXCommon. instead</span><span class="WHIT">
<span class='line'>218</span> </span><span class="NAME">X509CertificateGenerator.digitalSignature</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0080</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> </span><span class="NAME">X509CertificateGenerator.nonRepudiation</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0040</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="NAME">X509CertificateGenerator.keyEncipherment</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0020</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="NAME">X509CertificateGenerator.dataEncipherment</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0010</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span> </span><span class="NAME">X509CertificateGenerator.keyAgreement</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0008</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> </span><span class="NAME">X509CertificateGenerator.keyCertSign</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0004</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> </span><span class="NAME">X509CertificateGenerator.cRLSign</span><span class="WHIT">			</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0002</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> </span><span class="NAME">X509CertificateGenerator.encipherOnly</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x0001</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span><span class="NAME">X509CertificateGenerator.decipherOnly</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x8000</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> 
<span class='line'>228</span> 
<span class='line'>229</span> 
<span class='line'>230</span> </span><span class="COMM">/**
<span class='line'>231</span>  * Adds the BasicConstraints extension.
<span class='line'>232</span>  *
<span class='line'>233</span>  * @param {Boolean} cA the certificate belongs to a CA
<span class='line'>234</span>  * @param {Number} pathLenConstraint the maximum number of subordinate CA certificates
<span class='line'>235</span>  */</span><span class="WHIT">
<span class='line'>236</span> </span><span class="NAME">X509CertificateGenerator.prototype.addBasicConstraintsExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pathLenConstraint</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"BasicConstraints"</span><span class="PUNC">,</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cA</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"cA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BOOLEAN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"FF"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pathLenConstraint</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteBuffer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">		</span><span class="NAME">bb.append</span><span class="PUNC">(</span><span class="NAME">pathLenConstraint</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"pathLenConstraint"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bb.toByteString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"2.5.29.19"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>247</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>248</span> 
<span class='line'>249</span> 
<span class='line'>250</span> 
<span class='line'>251</span> </span><span class="COMM">/**
<span class='line'>252</span>  * Adds the subject public key identifier extension based on the certificates subject key.
<span class='line'>253</span>  *
<span class='line'>254</span>  * &lt;p>The key identifier is calculated as SHA-1 hash over the contents of the
<span class='line'>255</span>  * subject public key (Without tag, length and number of unused bits.&lt;/p>
<span class='line'>256</span>  */</span><span class="WHIT">
<span class='line'>257</span> </span><span class="NAME">X509CertificateGenerator.prototype.addSubjectKeyIdentifierExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyvalue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spi.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyvalue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>262</span> 
<span class='line'>263</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.OCTET_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"2.5.29.14"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>266</span> 
<span class='line'>267</span> 
<span class='line'>268</span> 
<span class='line'>269</span> </span><span class="COMM">/**
<span class='line'>270</span>  * Adds the authority public key identifier extension based on the issuers key.
<span class='line'>271</span>  *
<span class='line'>272</span>  * &lt;p>The key identifier is calculated as SHA-1 hash over the contents of the
<span class='line'>273</span>  * issuer public key (Without tag, length and number of unused bits.&lt;/p>
<span class='line'>274</span>  *
<span class='line'>275</span>  * @param {Key/ByteString} publicKeyOrId the authority subject key or authority key identifier
<span class='line'>276</span>  */</span><span class="WHIT">
<span class='line'>277</span> </span><span class="NAME">X509CertificateGenerator.prototype.addAuthorityKeyIdentifierExtension</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">publicKeyOrId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">publicKeyOrId</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">publicKeyOrId.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createRSASubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">publicKeyOrId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createECSubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">publicKeyOrId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.encodeECDomainParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>284</span> 
<span class='line'>285</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyvalue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spi.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.digest</span><span class="PUNC">(</span><span class="NAME">Crypto.SHA_1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyvalue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">publicKeyOrId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>291</span> 
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NUMB">0x80</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">hash</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">	</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"2.5.29.35"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>297</span> 
<span class='line'>298</span> 
<span class='line'>299</span> 
<span class='line'>300</span> </span><span class="COMM">/**
<span class='line'>301</span>  * Adds the CRL distribution point URLs.
<span class='line'>302</span>  *
<span class='line'>303</span>  * @param {String[]} url a list of URLs
<span class='line'>304</span>  */</span><span class="WHIT">
<span class='line'>305</span> </span><span class="NAME">X509CertificateGenerator.prototype.addCRLDistributionPointURL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"cRLDistributionPoints"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>307</span> 
<span class='line'>308</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">url.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="WHIT">	</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"cRLDistributionPoint"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">					</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"distributionPoint"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"fullName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">							</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"uniformResourceIdentifier"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x86</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">url</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">						</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">				</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"id-ce-cRLDistributionPoints"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>318</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>319</span> 
<span class='line'>320</span> 
<span class='line'>321</span> 
<span class='line'>322</span> </span><span class="COMM">/**
<span class='line'>323</span>  * Adds the extended key usage extension
<span class='line'>324</span>  *
<span class='line'>325</span>  * @param {String[]} oids the list of object identifier names
<span class='line'>326</span>  * @param {Boolean} critical the extension is critical
<span class='line'>327</span>  */</span><span class="WHIT">
<span class='line'>328</span> </span><span class="NAME">X509CertificateGenerator.prototype.addExtendedKeyUsages</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oids</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">critical</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extKeyUsages"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>330</span> 
<span class='line'>331</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">oids.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"keyPurposeId"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">oids</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">	</span><span class="NAME">this.addExtension</span><span class="PUNC">(</span><span class="STRN">"id-ce-extKeyUsage"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">critical</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>336</span> 
<span class='line'>337</span> 
<span class='line'>338</span> 
<span class='line'>339</span> </span><span class="COMM">/**
<span class='line'>340</span>  * Gets the issuer name as TLV object
<span class='line'>341</span>  *
<span class='line'>342</span>  * @return the issuer RDNSequence
<span class='line'>343</span>  * @type ASN1
<span class='line'>344</span>  */</span><span class="WHIT">
<span class='line'>345</span> </span><span class="NAME">X509CertificateGenerator.prototype.getIssuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.issuer</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>347</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.issuer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.encodeName</span><span class="PUNC">(</span><span class="NAME">this.issuer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>351</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>352</span> 
<span class='line'>353</span> 
<span class='line'>354</span> 
<span class='line'>355</span> </span><span class="COMM">/**
<span class='line'>356</span>  * Gets the certificate validity as TLV object
<span class='line'>357</span>  *
<span class='line'>358</span>  * @return the certificates validity
<span class='line'>359</span>  * @type ASN1
<span class='line'>360</span>  */</span><span class="WHIT">
<span class='line'>361</span> </span><span class="NAME">X509CertificateGenerator.prototype.getValidity</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"validity"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span> 
<span class='line'>364</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.notBefore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">ts</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">		</span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.dtoUTC</span><span class="PUNC">(</span><span class="NAME">this.notBefore</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="STRN">"500101000000Z"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">		</span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"20"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ts</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"notBefore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.GeneralizedTime</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">ts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>372</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"notBefore"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.UTCTime</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">ts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>374</span> 
<span class='line'>375</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.notAfter</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">ts</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">		</span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.dtoUTC</span><span class="PUNC">(</span><span class="NAME">this.notAfter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>379</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="STRN">"500101000000Z"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>380</span> </span><span class="WHIT">		</span><span class="NAME">ts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"20"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">ts</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"notAfter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.GeneralizedTime</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">ts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>383</span> </span><span class="WHIT">		</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"notAfter"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.UTCTime</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">ts</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>386</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>387</span> 
<span class='line'>388</span> 
<span class='line'>389</span> 
<span class='line'>390</span> </span><span class="COMM">/**
<span class='line'>391</span>  * Gets the subject name as TLV object
<span class='line'>392</span>  *
<span class='line'>393</span>  * @return the issuer RDNSequence
<span class='line'>394</span>  * @type ASN1
<span class='line'>395</span>  */</span><span class="WHIT">
<span class='line'>396</span> </span><span class="NAME">X509CertificateGenerator.prototype.getSubject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.subject</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.subject</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.encodeName</span><span class="PUNC">(</span><span class="NAME">this.subject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>402</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>403</span> 
<span class='line'>404</span> 
<span class='line'>405</span> 
<span class='line'>406</span> </span><span class="COMM">/**
<span class='line'>407</span>  * Gets the subject's public key as TLV object
<span class='line'>408</span>  *
<span class='line'>409</span>  * @return the subject's public key info
<span class='line'>410</span>  * @type ASN1
<span class='line'>411</span>  */</span><span class="WHIT">
<span class='line'>412</span> </span><span class="NAME">X509CertificateGenerator.prototype.getSubjectPublicKeyInfo</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.publicKey.getComponent</span><span class="PUNC">(</span><span class="NAME">Key.MODULUS</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createRSASubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">this.publicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.createECSubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="NAME">this.publicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.encodeECDomainParameter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>418</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>419</span> 
<span class='line'>420</span> 
<span class='line'>421</span> 
<span class='line'>422</span> </span><span class="COMM">/**
<span class='line'>423</span>  * Gets the certificate extension as TLV object
<span class='line'>424</span>  *
<span class='line'>425</span>  * @return the certificate extensions
<span class='line'>426</span>  * @type ASN1
<span class='line'>427</span>  */</span><span class="WHIT">
<span class='line'>428</span> </span><span class="NAME">X509CertificateGenerator.prototype.getExtensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>429</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>430</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"extensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>431</span> 
<span class='line'>432</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>433</span> 
<span class='line'>434</span> </span><span class="WHIT">	</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.extensions.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT">		</span><span class="NAME">s.add</span><span class="PUNC">(</span><span class="NAME">this.extensions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>436</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>437</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>438</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>439</span> 
<span class='line'>440</span> 
<span class='line'>441</span> 
<span class='line'>442</span> </span><span class="COMM">/**
<span class='line'>443</span>  * Gets the part of the certificate that will be signed
<span class='line'>444</span>  *
<span class='line'>445</span>  * @return the TBSCertificate part
<span class='line'>446</span>  * @type ASN1
<span class='line'>447</span>  */</span><span class="WHIT">
<span class='line'>448</span> </span><span class="NAME">X509CertificateGenerator.prototype.getTbsCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"tbsCertificate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"version"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0xA0</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>451</span> </span><span class="WHIT">			</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"version"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"02"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>452</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"serialNumber"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.INTEGER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.convertUnsignedInteger</span><span class="PUNC">(</span><span class="NAME">this.serialNumber</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>453</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getSignatureAlgorithm</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>454</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getIssuer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getValidity</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getSubject</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getSubjectPublicKeyInfo</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>458</span> </span><span class="WHIT">	</span><span class="NAME">t.add</span><span class="PUNC">(</span><span class="NAME">this.getExtensions</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>459</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>460</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>461</span> 
<span class='line'>462</span> 
<span class='line'>463</span> 
<span class='line'>464</span> </span><span class="COMM">/**
<span class='line'>465</span>  * Gets the signature algorithm TLV object
<span class='line'>466</span>  *
<span class='line'>467</span>  * @return the signature algorithm object
<span class='line'>468</span>  * @type ASN1
<span class='line'>469</span>  */</span><span class="WHIT">
<span class='line'>470</span> </span><span class="NAME">X509CertificateGenerator.prototype.getSignatureAlgorithm</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>471</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.encodeSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">this.signatureAlgorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>472</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>473</span> 
<span class='line'>474</span> 
<span class='line'>475</span> 
<span class='line'>476</span> </span><span class="COMM">/**
<span class='line'>477</span>  * Generates the certificate.
<span class='line'>478</span>  *
<span class='line'>479</span>  * @return the generated certificate
<span class='line'>480</span>  * @type X509
<span class='line'>481</span>  */</span><span class="WHIT">
<span class='line'>482</span> </span><span class="NAME">X509CertificateGenerator.prototype.generateX509Certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>483</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"certificate"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>484</span> 
<span class='line'>485</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tbs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getTbsCertificate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>486</span> </span><span class="WHIT">	</span><span class="NAME">certificate.add</span><span class="PUNC">(</span><span class="NAME">tbs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>487</span> </span><span class="WHIT">	</span><span class="NAME">certificate.add</span><span class="PUNC">(</span><span class="NAME">this.getSignatureAlgorithm</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>488</span> 
<span class='line'>489</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.crypto.sign</span><span class="PUNC">(</span><span class="NAME">privateKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.signatureAlgorithm</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tbs.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>490</span> </span><span class="WHIT">	</span><span class="NAME">signature</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"00"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>491</span> 
<span class='line'>492</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signatureValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"signatureValue"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.BIT_STRING</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>493</span> </span><span class="WHIT">	</span><span class="NAME">certificate.add</span><span class="PUNC">(</span><span class="NAME">signatureValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>494</span> 
<span class='line'>495</span> </span><span class="COMM">//	print(certificate);</span><span class="WHIT">
<span class='line'>496</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509</span><span class="PUNC">(</span><span class="NAME">certificate.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>497</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>498</span> 
<span class='line'>499</span> 
<span class='line'>500</span> 
<span class='line'>501</span> </span><span class="NAME">X509CertificateGenerator.RSATest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>502</span> 
<span class='line'>503</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>504</span> 
<span class='line'>505</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">caPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">	</span><span class="NAME">caPrivateKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>507</span> 
<span class='line'>508</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">caPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>509</span> </span><span class="WHIT">	</span><span class="NAME">caPublicKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>510</span> </span><span class="WHIT">	</span><span class="NAME">caPublicKey.setSize</span><span class="PUNC">(</span><span class="NUMB">1024</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>511</span> 
<span class='line'>512</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">caPublicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">caPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>513</span> 
<span class='line'>514</span> </span><span class="COMM">//	var caPrivKey = new Key("profiles/kp_rsa_private.xml");</span><span class="WHIT">
<span class='line'>515</span> 
<span class='line'>516</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509CertificateGenerator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>517</span> 
<span class='line'>518</span> </span><span class="WHIT">	</span><span class="NAME">x.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>519</span> </span><span class="WHIT">	</span><span class="NAME">x.setSerialNumber</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>520</span> </span><span class="WHIT">	</span><span class="NAME">x.setSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">Crypto.RSA</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>521</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">C</span><span class="PUNC">:</span><span class="STRN">"UT"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">O</span><span class="PUNC">:</span><span class="STRN">"ACME Corporation"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CN</span><span class="PUNC">:</span><span class="STRN">"Test-CA"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>522</span> </span><span class="WHIT">	</span><span class="NAME">x.setIssuer</span><span class="PUNC">(</span><span class="NAME">issuer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>523</span> </span><span class="WHIT">	</span><span class="NAME">x.setNotBefore</span><span class="PUNC">(</span><span class="STRN">"060825120000Z"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT">	</span><span class="NAME">x.setNotAfter</span><span class="PUNC">(</span><span class="STRN">"160825120000Z"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>525</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">C</span><span class="PUNC">:</span><span class="STRN">"UT"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">O</span><span class="PUNC">:</span><span class="STRN">"Utopia CA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OU</span><span class="PUNC">:</span><span class="STRN">"ACME Corporation"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CN</span><span class="PUNC">:</span><span class="STRN">"Joe Doe"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>526</span> </span><span class="WHIT">	</span><span class="NAME">x.setSubject</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>527</span> 
<span class='line'>528</span> </span><span class="WHIT">	</span><span class="NAME">x.setPublicKey</span><span class="PUNC">(</span><span class="NAME">caPublicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>529</span> 
<span class='line'>530</span> </span><span class="WHIT">	</span><span class="NAME">x.addKeyUsageExtension</span><span class="PUNC">(</span><span class="WHIT">	</span><span class="NAME">PKIXCommon.digitalSignature</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT">
<span class='line'>531</span> </span><span class="WHIT">							</span><span class="NAME">PKIXCommon.keyCertSign</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT">
<span class='line'>532</span> </span><span class="WHIT">							</span><span class="NAME">PKIXCommon.cRLSign</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>533</span> 
<span class='line'>534</span> </span><span class="WHIT">	</span><span class="NAME">x.addBasicConstraintsExtension</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>535</span> </span><span class="WHIT">	</span><span class="NAME">x.addSubjectKeyIdentifierExtension</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>536</span> </span><span class="WHIT">	</span><span class="NAME">x.addAuthorityKeyIdentifierExtension</span><span class="PUNC">(</span><span class="NAME">caPublicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>537</span> 
<span class='line'>538</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x.generateX509Certificate</span><span class="PUNC">(</span><span class="NAME">caPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>539</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSystem.mapFilename</span><span class="PUNC">(</span><span class="STRN">"cert_rsa.cer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPSystem.USR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>540</span> </span><span class="WHIT">	</span><span class="NAME">PKIXCommon.writeFileToDisk</span><span class="PUNC">(</span><span class="NAME">fn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>541</span> 
<span class='line'>542</span> </span><span class="WHIT">	</span><span class="NAME">cert.verifyWith</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>543</span> 
<span class='line'>544</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>545</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>546</span> 
<span class='line'>547</span> 
<span class='line'>548</span> 
<span class='line'>549</span> </span><span class="NAME">X509CertificateGenerator.ECCTest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>550</span> 
<span class='line'>551</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>552</span> 
<span class='line'>553</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">caPrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>554</span> </span><span class="WHIT">	</span><span class="NAME">caPrivateKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PRIVATE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>555</span> 
<span class='line'>556</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">caPublicKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>557</span> </span><span class="WHIT">	</span><span class="NAME">caPublicKey.setType</span><span class="PUNC">(</span><span class="NAME">Key.PUBLIC</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">	</span><span class="NAME">caPublicKey.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"brainpoolP256r1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>559</span> 
<span class='line'>560</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">Crypto.EC</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">caPublicKey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">caPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>561</span> 
<span class='line'>562</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509CertificateGenerator</span><span class="PUNC">(</span><span class="NAME">crypto</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>563</span> 
<span class='line'>564</span> </span><span class="WHIT">	</span><span class="NAME">x.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>565</span> </span><span class="WHIT">	</span><span class="NAME">x.setSerialNumber</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="STRN">"01"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>566</span> </span><span class="WHIT">	</span><span class="NAME">x.setSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">Crypto.ECDSA_SHA256</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>567</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">C</span><span class="PUNC">:</span><span class="STRN">"UT"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">O</span><span class="PUNC">:</span><span class="STRN">"ACME Corporation"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CN</span><span class="PUNC">:</span><span class="STRN">"Test-CA"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>568</span> </span><span class="WHIT">	</span><span class="NAME">x.setIssuer</span><span class="PUNC">(</span><span class="NAME">issuer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>569</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>570</span> </span><span class="WHIT">	</span><span class="NAME">x.setNotBefore</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT">	</span><span class="NAME">x.setNotAfter</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.addDays</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">180</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>572</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">C</span><span class="PUNC">:</span><span class="STRN">"UT"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">O</span><span class="PUNC">:</span><span class="STRN">"Utopia CA"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OU</span><span class="PUNC">:</span><span class="STRN">"ACME Corporation"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CN</span><span class="PUNC">:</span><span class="STRN">"Joe Doe"</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>573</span> </span><span class="WHIT">	</span><span class="NAME">x.setSubject</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>574</span> 
<span class='line'>575</span> </span><span class="WHIT">	</span><span class="NAME">x.setPublicKey</span><span class="PUNC">(</span><span class="NAME">caPublicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>576</span> 
<span class='line'>577</span> </span><span class="WHIT">	</span><span class="NAME">x.addKeyUsageExtension</span><span class="PUNC">(</span><span class="WHIT">	</span><span class="NAME">PKIXCommon.digitalSignature</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT">
<span class='line'>578</span> </span><span class="WHIT">							</span><span class="NAME">PKIXCommon.keyCertSign</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT">
<span class='line'>579</span> </span><span class="WHIT">							</span><span class="NAME">PKIXCommon.cRLSign</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>580</span> 
<span class='line'>581</span> </span><span class="WHIT">	</span><span class="NAME">x.addBasicConstraintsExtension</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>582</span> </span><span class="WHIT">	</span><span class="NAME">x.addSubjectKeyIdentifierExtension</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>583</span> </span><span class="WHIT">	</span><span class="NAME">x.addAuthorityKeyIdentifierExtension</span><span class="PUNC">(</span><span class="NAME">caPublicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>584</span> 
<span class='line'>585</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x.generateX509Certificate</span><span class="PUNC">(</span><span class="NAME">caPrivateKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>586</span> 
<span class='line'>587</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">GPSystem.mapFilename</span><span class="PUNC">(</span><span class="STRN">"cert_ecc.cer"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPSystem.USR</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>588</span> </span><span class="WHIT">	</span><span class="NAME">PKIXCommon.writeFileToDisk</span><span class="PUNC">(</span><span class="NAME">fn</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>589</span> 
<span class='line'>590</span> </span><span class="WHIT">	</span><span class="NAME">cert.verifyWith</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>591</span> 
<span class='line'>592</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>593</span> </span><span class="WHIT">	</span><span class="NAME">print</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>594</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>595</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview A Issuer for X.509 Certificates
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">X509Signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/x509/X509Signer'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">X509Signer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> 
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/x509/PKIXCommon"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKIXCommon</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">X509CertificateGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/x509/X509CertificateGenerator"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">X509CertificateGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">CRLGenerator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">"scsh/x509/CRLGenerator"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">CRLGenerator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> 
<span class='line'> 33</span> 
<span class='line'> 34</span> 
<span class='line'> 35</span> </span><span class="COMM">/**
<span class='line'> 36</span>  * Create a certification authority that issues X.509 certificates and CRLs
<span class='line'> 37</span>  *
<span class='line'> 38</span>  * @class Class implementing a certification authority issuing X.509 certificates and CRLs
<span class='line'> 39</span>  * @constructor
<span class='line'> 40</span>  * @param {DAOFactory} daof the factory that can create the required data access objects
<span class='line'> 41</span>  * @param {CryptoProviderFactory} cpf factory implementing getCryptoProvider() used to get access to crypto providers
<span class='line'> 42</span>  * @param {Holder} holder the holder object for this signer the database
<span class='line'> 43</span>  */</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">X509CertificateIssuer</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cpf</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">	</span><span class="NAME">X509Signer.call</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">daof</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cpf</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.crldp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 48</span> 
<span class='line'> 49</span> </span><span class="NAME">X509CertificateIssuer.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Object.create</span><span class="PUNC">(</span><span class="NAME">X509Signer.prototype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="NAME">X509CertificateIssuer.constructor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">X509CertificateIssuer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> 
<span class='line'> 52</span> </span><span class="NAME">exports.X509CertificateIssuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">X509CertificateIssuer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> 
<span class='line'> 55</span> 
<span class='line'> 56</span> </span><span class="COMM">/**
<span class='line'> 57</span>  * Create a new certificate issuer
<span class='line'> 58</span>  *
<span class='line'> 59</span>  * @param {DAOFactory} daof the factory that can create the required data access objects
<span class='line'> 60</span>  * @param {String/Number} pathOrHolderId the path of holderIDs (eg. "/UTCVCA/UTDVCA/UTTERM") or the holderId from the database
<span class='line'> 61</span>  * @param {Number} certtype optional argument, default Holder.X509
<span class='line'> 62</span>  * @type Number
<span class='line'> 63</span>  * @return the newly created holder id
<span class='line'> 64</span>  */</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="NAME">X509CertificateIssuer.createCertificateIssuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certtype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">X509Signer.createSigner</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certtype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 68</span> 
<span class='line'> 69</span> 
<span class='line'> 70</span> 
<span class='line'> 71</span> </span><span class="COMM">/**
<span class='line'> 72</span>  * Add a CRL distribution point to issued certificates
<span class='line'> 73</span>  *
<span class='line'> 74</span>  * @param {String} crldp the URL of the distribution point
<span class='line'> 75</span>  */</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="NAME">X509CertificateIssuer.prototype.addCRLDistributionPoint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">crldp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">	</span><span class="NAME">this.crldp.push</span><span class="PUNC">(</span><span class="NAME">crldp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 79</span> 
<span class='line'> 80</span> 
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="COMM">/**
<span class='line'> 83</span>  * Create a new randomly generated certificate serial number
<span class='line'> 84</span>  *
<span class='line'> 85</span>  * @private
<span class='line'> 86</span>  * @type ByteString
<span class='line'> 87</span>  * @return a 8 byte bytestring that resembles an unsigned integer
<span class='line'> 88</span>  */</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="NAME">X509CertificateIssuer.prototype.newSerialNumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">serial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crypto.generateRandom</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 92</span> 
<span class='line'> 93</span> </span><span class="WHIT">	</span><span class="COMM">// Strip first bit to make integer unsigned</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">serial.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0x7F</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">		</span><span class="NAME">serial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ByteString.valueOf</span><span class="PUNC">(</span><span class="NAME">serial.byteAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x7F</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">concat</span><span class="PUNC">(</span><span class="NAME">serial.bytes</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">serial</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 99</span> 
<span class='line'>100</span> 
<span class='line'>101</span> 
<span class='line'>102</span> </span><span class="COMM">/**
<span class='line'>103</span>  * Issue a self-signed certificate for the given keyId.
<span class='line'>104</span>  *
<span class='line'>105</span>  * The key must have been previously generated using the newSigner() method
<span class='line'>106</span>  *
<span class='line'>107</span>  * @param {ByteString} keyId the subject key identifier
<span class='line'>108</span>  * @param {Number} srId service request id to be stored with issued certificate
<span class='line'>109</span>  */</span><span class="WHIT">
<span class='line'>110</span> </span><span class="NAME">X509CertificateIssuer.prototype.issueSelfSignedCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>111</span> 
<span class='line'>112</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByKeyId</span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>116</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.signer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>118</span> 
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No signer with keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>122</span> 
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.cpf.getCryptoProvider</span><span class="PUNC">(</span><span class="NAME">signer.keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>124</span> 
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Signer is offline (Key Domain : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.signer.keyDomain</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>128</span> 
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cp.getPrivateKeyByKeyId</span><span class="PUNC">(</span><span class="NAME">signer.keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signer.keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> 
<span class='line'>132</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No key with keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">signer.keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>135</span> 
<span class='line'>136</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getRequest</span><span class="PUNC">(</span><span class="NAME">signer.keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> 
<span class='line'>138</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No request with keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">signer.keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>141</span> 
<span class='line'>142</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pub</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.policy.restrictPublicKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">			</span><span class="NAME">pub.algorithmIdentifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.restrictedPublicKeyAlgorithmIdentifier</span><span class="PUNC">(</span><span class="NAME">this.policy.restrictPublicKey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>147</span> 
<span class='line'>148</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509CertificateGenerator</span><span class="PUNC">(</span><span class="NAME">cp.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">		</span><span class="NAME">gen.encodeECDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> 
<span class='line'>151</span> </span><span class="WHIT">		</span><span class="NAME">gen.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">		</span><span class="NAME">gen.setSerialNumber</span><span class="PUNC">(</span><span class="NAME">this.newSerialNumber</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="NAME">gen.setSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">this.policy.signatureAlgorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.getSubject</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">		</span><span class="NAME">gen.setIssuer</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ced</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cxd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.addDays</span><span class="PUNC">(</span><span class="NAME">ced</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.policy.validityDaysSelfSigned</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">		</span><span class="NAME">gen.setNotBefore</span><span class="PUNC">(</span><span class="NAME">ced</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">		</span><span class="NAME">gen.setNotAfter</span><span class="PUNC">(</span><span class="NAME">cxd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">		</span><span class="NAME">gen.setSubject</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">		</span><span class="NAME">gen.setPublicKey</span><span class="PUNC">(</span><span class="NAME">pub</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">		</span><span class="NAME">gen.addSubjectKeyIdentifierExtension</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">		</span><span class="NAME">gen.addKeyUsageExtension</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.keyCertSign</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.cRLSign</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">		</span><span class="NAME">gen.addBasicConstraintsExtension</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.policy.pathLenConstraint</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> 
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gen.generateX509Certificate</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> 
<span class='line'>168</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.storeCertificate</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signer.keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="KEYW">finally</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">		</span><span class="NAME">cp.release</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>176</span> 
<span class='line'>177</span> 
<span class='line'>178</span> 
<span class='line'>179</span> </span><span class="COMM">/**
<span class='line'>180</span>  * Issue a new certificate for the given subject and public key
<span class='line'>181</span>  *
<span class='line'>182</span>  * @param {Number/String/Object} certholder the holder id, path or object
<span class='line'>183</span>  * @param {Key} pubkey the public key
<span class='line'>184</span>  * @param {Object} subject in ASN1 format or a format accepted by PKIXCommon.encodeName()
<span class='line'>185</span>  * @param {Object[]} extensions array of certificate extensions objects with properties oid{String}, critical{boolean} and value{ByteString}
<span class='line'>186</span>  * @param {Number} srId service request id to be stored with issued certificate
<span class='line'>187</span>  * @type X509
<span class='line'>188</span>  * @return the newly generated certificate
<span class='line'>189</span>  */</span><span class="WHIT">
<span class='line'>190</span> </span><span class="NAME">X509CertificateIssuer.prototype.issueCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">certholder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pubkey</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extensions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">pubkey</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument pubkey must be instance of Key"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>192</span> 
<span class='line'>193</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">certholder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">			</span><span class="NAME">certholder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">certholder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">			</span><span class="NAME">certholder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolderById</span><span class="PUNC">(</span><span class="NAME">certholder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>202</span> 
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">certholder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">certholder</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> 
<span class='line'>207</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">icert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSignerCertificate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>208</span> 
<span class='line'>209</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">icert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No active signer found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>212</span> 
<span class='line'>213</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.cpf.getCryptoProvider</span><span class="PUNC">(</span><span class="NAME">this.signer.keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> 
<span class='line'>215</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Signer is offline (Key Domain : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.signer.keyDomain</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>218</span> 
<span class='line'>219</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cp.getPrivateKeyByKeyId</span><span class="PUNC">(</span><span class="NAME">this.signer.keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.signer.keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> 
<span class='line'>222</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No key with keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.signer.keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>225</span> 
<span class='line'>226</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.getSubjectAsASN1</span><span class="PUNC">(</span><span class="NAME">icert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> 
<span class='line'>228</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509CertificateGenerator</span><span class="PUNC">(</span><span class="NAME">cp.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">		</span><span class="NAME">gen.encodeECDomainParameter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> 
<span class='line'>231</span> </span><span class="WHIT">		</span><span class="NAME">gen.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">		</span><span class="NAME">gen.setSerialNumber</span><span class="PUNC">(</span><span class="NAME">this.newSerialNumber</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">		</span><span class="NAME">gen.setSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">this.policy.signatureAlgorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">		</span><span class="NAME">gen.setIssuer</span><span class="PUNC">(</span><span class="NAME">issuer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ced</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cxd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.addDays</span><span class="PUNC">(</span><span class="NAME">ced</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.policy.validityDaysCertificates</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">		</span><span class="NAME">gen.setNotBefore</span><span class="PUNC">(</span><span class="NAME">ced</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">		</span><span class="NAME">gen.setNotAfter</span><span class="PUNC">(</span><span class="NAME">cxd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT">		</span><span class="NAME">gen.setSubject</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">		</span><span class="NAME">gen.setPublicKey</span><span class="PUNC">(</span><span class="NAME">pubkey</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">		</span><span class="NAME">gen.addSubjectKeyIdentifierExtension</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">		</span><span class="NAME">gen.addAuthorityKeyIdentifierExtension</span><span class="PUNC">(</span><span class="NAME">icert.getSubjectKeyIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>243</span> 
<span class='line'>244</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">this.policy.pathLenConstraint</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.policy.pathLenConstraint</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT">			</span><span class="NAME">gen.addBasicConstraintsExtension</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.policy.pathLenConstraint</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT">			</span><span class="NAME">gen.addBasicConstraintsExtension</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>249</span> 
<span class='line'>250</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.crldp.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT">			</span><span class="NAME">gen.addCRLDistributionPointURL</span><span class="PUNC">(</span><span class="NAME">this.crldp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>253</span> 
<span class='line'>254</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">extensions</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"object"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">			</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">extensions.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">				</span><span class="NAME">gen.addExtension</span><span class="PUNC">(</span><span class="NAME">extensions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">oid</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extensions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">critical</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extensions</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>259</span> 
<span class='line'>260</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gen.generateX509Certificate</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> 
<span class='line'>262</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.storeCertificateForHolder</span><span class="PUNC">(</span><span class="NAME">certholder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="KEYW">finally</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">		</span><span class="NAME">cp.release</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>269</span> 
<span class='line'>270</span> 
<span class='line'>271</span> 
<span class='line'>272</span> </span><span class="COMM">/**
<span class='line'>273</span>  * Extension handler method for Sub-CA certificates
<span class='line'>274</span>  *
<span class='line'>275</span>  * @private
<span class='line'>276</span>  */</span><span class="WHIT">
<span class='line'>277</span> </span><span class="NAME">X509CertificateIssuer.prototype.addExtForSubCA</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">certgen</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extvalues</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>278</span> 
<span class='line'>279</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addKeyUsageExtension</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.keyCertSign</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.cRLSign</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addBasicConstraintsExtension</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.policy.pathLenConstraint</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>282</span> 
<span class='line'>283</span> 
<span class='line'>284</span> 
<span class='line'>285</span> </span><span class="COMM">/**
<span class='line'>286</span>  * Extension handler method for TLS server certificates
<span class='line'>287</span>  *
<span class='line'>288</span>  * @private
<span class='line'>289</span>  */</span><span class="WHIT">
<span class='line'>290</span> </span><span class="NAME">X509CertificateIssuer.prototype.addExtForTLSServer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">certgen</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extvalues</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>291</span> 
<span class='line'>292</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addKeyUsageExtension</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.keyAgreement</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.keyEncipherment</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addBasicConstraintsExtension</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>294</span> 
<span class='line'>295</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addExtendedKeyUsages</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"id-csn-369791-tls-server"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-kp-serverAuth"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> 
<span class='line'>297</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"subjectAltName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"dNSName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x82</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">extvalues</span><span class="PUNC">[</span><span class="STRN">"dNSName"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addExtension</span><span class="PUNC">(</span><span class="STRN">"id-ce-subjectAltName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ext.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>302</span> 
<span class='line'>303</span> 
<span class='line'>304</span> 
<span class='line'>305</span> </span><span class="COMM">/**
<span class='line'>306</span>  * Extension handler method for TLS client certificates
<span class='line'>307</span>  *
<span class='line'>308</span>  * @private
<span class='line'>309</span>  */</span><span class="WHIT">
<span class='line'>310</span> </span><span class="NAME">X509CertificateIssuer.prototype.addExtForTLSClient</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">certgen</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extvalues</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addKeyUsageExtension</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.digitalSignature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addBasicConstraintsExtension</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>313</span> 
<span class='line'>314</span> </span><span class="WHIT">	</span><span class="COMM">// certgen.addExtendedKeyUsages(["id-csn-369791-tls-client", "id-kp-clientAuth"]);</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addExtendedKeyUsages</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"id-kp-clientAuth"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>317</span> 
<span class='line'>318</span> 
<span class='line'>319</span> 
<span class='line'>320</span> </span><span class="COMM">/**
<span class='line'>321</span>  * Extension handler method for certificates suitable for TLS client authentication and e-Mail signature and encryption
<span class='line'>322</span>  *
<span class='line'>323</span>  * @private
<span class='line'>324</span>  */</span><span class="WHIT">
<span class='line'>325</span> </span><span class="NAME">X509CertificateIssuer.prototype.addExtForEmailAndTLSClient</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">certgen</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extvalues</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>326</span> 
<span class='line'>327</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addKeyUsageExtension</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.digitalSignature</span><span class="WHIT"> </span><span class="PUNC">|</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.keyEncipherment</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addBasicConstraintsExtension</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> 
<span class='line'>330</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ext</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"subjectAltName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">						</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"rfc822Name"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0x81</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">extvalues</span><span class="PUNC">[</span><span class="STRN">"email"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">					</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addExtension</span><span class="PUNC">(</span><span class="STRN">"id-ce-subjectAltName"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ext.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> 
<span class='line'>335</span> </span><span class="WHIT">	</span><span class="NAME">certgen.addExtendedKeyUsages</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"id-kp-clientAuth"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"id-kp-emailProtection"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>336</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>337</span> 
<span class='line'>338</span> 
<span class='line'>339</span> 
<span class='line'>340</span> </span><span class="COMM">/**
<span class='line'>341</span>  * Issue a CRL
<span class='line'>342</span>  *
<span class='line'>343</span>  * @type CRL
<span class='line'>344</span>  * @return the newly issued CRL
<span class='line'>345</span>  */</span><span class="WHIT">
<span class='line'>346</span> </span><span class="NAME">X509CertificateIssuer.prototype.issueCRL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>347</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"issueCRL()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>348</span> 
<span class='line'>349</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">icert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSignerCertificate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">icert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No active signer found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>353</span> 
<span class='line'>354</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.signer.getContent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>355</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">c.crl</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">latestCRL</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CRLGenerator</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crlNumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">latestCRL.loadCRLEntries</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">c.crl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">		</span><span class="NAME">crlNumber</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>360</span> 
<span class='line'>361</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.cpf.getCryptoProvider</span><span class="PUNC">(</span><span class="NAME">this.signer.keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>362</span> 
<span class='line'>363</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>364</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Signer is offline (Key Domain : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.signer.keyDomain</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>366</span> 
<span class='line'>367</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cp.getPrivateKeyByKeyId</span><span class="PUNC">(</span><span class="NAME">this.signer.keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.signer.keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>369</span> 
<span class='line'>370</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No key with keyId "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.signer.keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>372</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>373</span> 
<span class='line'>374</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CRLGenerator</span><span class="PUNC">(</span><span class="NAME">cp.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>375</span> 
<span class='line'>376</span> </span><span class="WHIT">		</span><span class="NAME">x.reset</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">		</span><span class="NAME">x.setSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">this.policy.signatureAlgorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.getSubjectAsASN1</span><span class="PUNC">(</span><span class="NAME">icert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> </span><span class="WHIT">		</span><span class="NAME">x.setIssuer</span><span class="PUNC">(</span><span class="NAME">issuer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>380</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">now</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">		</span><span class="NAME">x.setThisUpdate</span><span class="PUNC">(</span><span class="NAME">now</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> </span><span class="WHIT">		</span><span class="NAME">x.setNextUpdate</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.addDays</span><span class="PUNC">(</span><span class="NAME">now</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.policy.validityDaysCRL</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>383</span> 
<span class='line'>384</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">revocationList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.getRevokedCertificates</span><span class="PUNC">(</span><span class="NAME">this.holder.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">now</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>386</span> 
<span class='line'>387</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="NAME">each</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">revocationList</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>388</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">serial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">cert.serial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>389</span> 
<span class='line'>390</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reason</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mapStatusToReasonCode</span><span class="PUNC">(</span><span class="NAME">cert.status</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>391</span> 
<span class='line'>392</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cert.revocationDate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>393</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">revocationDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.revocationDate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>394</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>395</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">revocationDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">now</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">				</span><span class="NAME">certdao.updateRevocationDate</span><span class="PUNC">(</span><span class="NAME">cert.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">now</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>398</span> 
<span class='line'>399</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cert.invalidityDate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">invalidityDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.invalidityDate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">invalidityDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">now</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>403</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>404</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">extensions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">(</span><span class="STRN">"crlExtensions"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">			</span><span class="NAME">extensions.add</span><span class="PUNC">(</span><span class="NAME">x.createInvalidityDateExt</span><span class="PUNC">(</span><span class="NAME">invalidityDate</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>406</span> 
<span class='line'>407</span> </span><span class="WHIT">			</span><span class="NAME">x.revokeCertificate</span><span class="PUNC">(</span><span class="NAME">serial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">revocationDate</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">reason</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">extensions</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>408</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>409</span> 
<span class='line'>410</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">crlNumber</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>411</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crlNumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>412</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">		</span><span class="NAME">x.addCRLNumberExtension</span><span class="PUNC">(</span><span class="NAME">crlNumber</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>414</span> 
<span class='line'>415</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x.generateCRL</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>416</span> 
<span class='line'>417</span> </span><span class="WHIT">		</span><span class="NAME">c.crl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">crl.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">		</span><span class="NAME">this.signer.setContent</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>420</span> </span><span class="WHIT">		</span><span class="NAME">signerDAO.updateContent</span><span class="PUNC">(</span><span class="NAME">this.signer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>421</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>422</span> </span><span class="WHIT">	</span><span class="KEYW">finally</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">		</span><span class="NAME">cp.release</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>425</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">crl</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>426</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>427</span> 
<span class='line'>428</span> 
<span class='line'>429</span> 
<span class='line'>430</span> </span><span class="NAME">X509CertificateIssuer.prototype.mapStatusToReasonCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">status</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>431</span> </span><span class="WHIT">	</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">status</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT">	  </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">OCSPQuery.REVOKED</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// "...the reason code CRL entry extension SHOULD be absent instead of using the unspecified (0) reasonCode value." [RFC 5280, 5.3.1]</span><span class="WHIT">
<span class='line'>434</span> </span><span class="WHIT">	  </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">OCSPQuery.KEYCOMPROMISE</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.keyCompromise</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>436</span> </span><span class="WHIT">	  </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">OCSPQuery.CACOMPROMISE</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>437</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.cACompromise</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>438</span> </span><span class="WHIT">	  </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">OCSPQuery.AFFILIATIONCHANGED</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>439</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.affiliationChanged</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>440</span> </span><span class="WHIT">	  </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">OCSPQuery.SUPERSEDED</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>441</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.superseded</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>442</span> </span><span class="WHIT">	  </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">OCSPQuery.CESSATIONOFOPERATION</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>443</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.cessationOfOperation</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>444</span> </span><span class="WHIT">	  </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">OCSPQuery.CERTIFICATEHOLD</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>445</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.certificateHold</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>446</span> </span><span class="WHIT">	  </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">OCSPQuery.REMOVEFROMCRL</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>447</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.removeFromCRL</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>448</span> </span><span class="WHIT">	  </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">OCSPQuery.PRIVILEGEWITHDRAWN</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.privilegeWithdrawn</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">	  </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">OCSPQuery.AACOMPROMISE</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>451</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">CRLGenerator.aACompromise</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>452</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>453</span> 
<span class='line'>454</span> </span><span class="WHIT"> 	</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Unexpected status: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">status</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>455</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>456</span> 
<span class='line'>457</span> 
<span class='line'>458</span> 
<span class='line'>459</span> </span><span class="NAME">X509CertificateIssuer.prototype.getDNMask</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">holderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>460</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSigner</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signer.getContent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>462</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">c.dnmask</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>463</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>464</span> 
<span class='line'>465</span> 
<span class='line'>466</span> 
<span class='line'>467</span> </span><span class="NAME">X509CertificateIssuer.prototype.isOperational</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>468</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"isOperational()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>469</span> 
<span class='line'>470</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">icert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSignerCertificate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>471</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">icert</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT">		</span><span class="COMM">// No active signer found</span><span class="WHIT">
<span class='line'>473</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>474</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>475</span> 
<span class='line'>476</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.cpf.getCryptoProvider</span><span class="PUNC">(</span><span class="NAME">this.signer.keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>477</span> 
<span class='line'>478</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>479</span> </span><span class="WHIT">		</span><span class="COMM">// Signer offline</span><span class="WHIT">
<span class='line'>480</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>482</span> 
<span class='line'>483</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>484</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cp.getPrivateKeyByKeyId</span><span class="PUNC">(</span><span class="NAME">this.signer.keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.signer.keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>485</span> 
<span class='line'>486</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>487</span> </span><span class="WHIT">			</span><span class="COMM">// Key not found</span><span class="WHIT">
<span class='line'>488</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>489</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>490</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">finally</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>491</span> </span><span class="WHIT">		</span><span class="NAME">cp.release</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>492</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>493</span> 
<span class='line'>494</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>495</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>496</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview Generic X509 certificate, request and key store
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/x509/PKIXCommon'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKIXCommon</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pki-db/Certificate'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">Certificate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pki-db/Holder'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">Holder</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">LongDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pki-db/LongDate'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">LongDate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKCS8</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pkcs/PKCS8'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKCS8</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKCS10</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pkcs/PKCS10'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKCS10</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 33</span> 
<span class='line'> 34</span> 
<span class='line'> 35</span> </span><span class="COMM">/**
<span class='line'> 36</span>  * Create an object to access a X509 certificate store.
<span class='line'> 37</span>  *
<span class='line'> 38</span>  * @class Class that abstracts a certificate, request and key store for a X509 PKI.
<span class='line'> 39</span>  *
<span class='line'> 40</span>  * @constructor
<span class='line'> 41</span>  * @param {DAOFactory} DAOFactory the factory that can create data access objects for persistent information
<span class='line'> 42</span>  */</span><span class="WHIT">
<span class='line'> 43</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">X509CertificateStore</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Parameter doaf can't be empty"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.daof</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">daof</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">this.certtype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Holder.X509</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="NAME">exports.X509CertificateStore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">X509CertificateStore</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> 
<span class='line'> 52</span> 
<span class='line'> 53</span> 
<span class='line'> 54</span> </span><span class="COMM">/**
<span class='line'> 55</span>  * Strip the last element of the path, effectively defining the parent within the path
<span class='line'> 56</span>  *
<span class='line'> 57</span>  * @param {String} path the path to strip the last element from
<span class='line'> 58</span>  * @returns the parent path or null for the root
<span class='line'> 59</span>  * @type String
<span class='line'> 60</span>  */</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="NAME">X509CertificateStore.parentPathOf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument path must be string"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.lastIndexOf</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">ofs</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ofs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 69</span> 
<span class='line'> 70</span> 
<span class='line'> 71</span> 
<span class='line'> 72</span> </span><span class="COMM">/**
<span class='line'> 73</span>  * Return the n-element of the path
<span class='line'> 74</span>  *
<span class='line'> 75</span>  * @param {String} path the path to return the last element from
<span class='line'> 76</span>  * @returns the last path element or null for the root
<span class='line'> 77</span>  * @type String
<span class='line'> 78</span>  */</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="NAME">X509CertificateStore.nthElementOf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">	</span><span class="NAME">assert</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument path must be string"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.substr</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">"/"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">n</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NAME">pe.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">pe</span><span class="PUNC">[</span><span class="NAME">n</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 87</span> 
<span class='line'> 88</span> 
<span class='line'> 89</span> 
<span class='line'> 90</span> </span><span class="COMM">/**
<span class='line'> 91</span>  * Return a suitable crypto object. This may be overwritten by derived classes
<span class='line'> 92</span>  *
<span class='line'> 93</span>  * @type Crypto
<span class='line'> 94</span>  * @return the Crypto object
<span class='line'> 95</span>  */</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="NAME">X509CertificateStore.prototype.getCrypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">		</span><span class="NAME">this.crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Crypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.crypto</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>102</span> 
<span class='line'>103</span> 
<span class='line'>104</span> 
<span class='line'>105</span> </span><span class="COMM">/**
<span class='line'>106</span>  * Check if holder exists for path or holderId
<span class='line'>107</span>  *
<span class='line'>108</span>  * @param {String/Number} pathOrHolderId
<span class='line'>109</span>  * @type Holder
<span class='line'>110</span>  * @return true if holder exists
<span class='line'>111</span>  * @private
<span class='line'>112</span>  */</span><span class="WHIT">
<span class='line'>113</span> </span><span class="NAME">X509CertificateStore.prototype.hasHolder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>115</span> 
<span class='line'>116</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolderById</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>123</span> 
<span class='line'>124</span> 
<span class='line'>125</span> 
<span class='line'>126</span> </span><span class="COMM">/**
<span class='line'>127</span>  * List certificate holders for a given PKI element
<span class='line'>128</span>  *
<span class='line'>129</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>130</span>  * @returns a list of holder ids, possibly empty
<span class='line'>131</span>  * @type String[]
<span class='line'>132</span>  */</span><span class="WHIT">
<span class='line'>133</span> </span><span class="NAME">X509CertificateStore.prototype.listHolders</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"listHolders("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> 
<span class='line'>136</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> 
<span class='line'>138</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolderList</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>141</span> 
<span class='line'>142</span> 
<span class='line'>143</span> 
<span class='line'>144</span> </span><span class="COMM">/**
<span class='line'>145</span>  * Get existing holder object for given path or holderId
<span class='line'>146</span>  *
<span class='line'>147</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>148</span>  * @param {Boolean} create create if holder doesn't exist
<span class='line'>149</span>  * @type Holder
<span class='line'>150</span>  * @return the holder object
<span class='line'>151</span>  * @private
<span class='line'>152</span>  */</span><span class="WHIT">
<span class='line'>153</span> </span><span class="NAME">X509CertificateStore.prototype.getHolder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">create</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> 
<span class='line'>156</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolderById</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>161</span> 
<span class='line'>162</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">create</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not locate holder for "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder not found, creating new."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">			</span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.newHolderWithParent</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">			</span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.newHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>176</span> 
<span class='line'>177</span> 
<span class='line'>178</span> 
<span class='line'>179</span> </span><span class="COMM">/**
<span class='line'>180</span>  * Create new signer based on key pair generated externally
<span class='line'>181</span>  *
<span class='line'>182</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>183</span>  * @param {String} name the unique name of the signer in the holder context
<span class='line'>184</span>  * @param {Key} puk the public key
<span class='line'>185</span>  * @param {ByteString} keyblob the wrapped private key
<span class='line'>186</span>  * @type ByteString
<span class='line'>187</span>  * @return the subject key identifier
<span class='line'>188</span>  */</span><span class="WHIT">
<span class='line'>189</span> </span><span class="NAME">X509CertificateStore.prototype.newSigner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"newSigner("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> 
<span class='line'>192</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> 
<span class='line'>194</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.determineKeyIdentifier</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> 
<span class='line'>198</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">keyblob</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">)</span><span class="WHIT">  </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">		</span><span class="NAME">template.keyblob</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>201</span> 
<span class='line'>202</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">	</span><span class="NAME">signerDAO.newSigner</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> 
<span class='line'>207</span> 
<span class='line'>208</span> 
<span class='line'>209</span> </span><span class="COMM">/**
<span class='line'>210</span>  * Get the signer identified by the keyId
<span class='line'>211</span>  *
<span class='line'>212</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>213</span>  * @param {ByteString} keyId the key identifier
<span class='line'>214</span>  * @type Signer
<span class='line'>215</span>  * @return this Signer object
<span class='line'>216</span>  */</span><span class="WHIT">
<span class='line'>217</span> </span><span class="NAME">X509CertificateStore.prototype.getSigner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getSigner("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>219</span> 
<span class='line'>220</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> 
<span class='line'>222</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> 
<span class='line'>224</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByKeyId</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> 
<span class='line'>226</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>229</span> 
<span class='line'>230</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>231</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>232</span> 
<span class='line'>233</span> 
<span class='line'>234</span> 
<span class='line'>235</span> </span><span class="COMM">/**
<span class='line'>236</span>  * Generate key pair
<span class='line'>237</span>  *
<span class='line'>238</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>239</span>  * @param {String} name the unique name of the signer in the holder context
<span class='line'>240</span>  * @param {Number} algo the key generation algorithm (Crypto.EC or Crypto.RSA)
<span class='line'>241</span>  * @param {Key} prk the private key template
<span class='line'>242</span>  * @param {Key} puk the public key template
<span class='line'>243</span>  * @type ByteString
<span class='line'>244</span>  * @return the subject key identifier
<span class='line'>245</span>  */</span><span class="WHIT">
<span class='line'>246</span> </span><span class="NAME">X509CertificateStore.prototype.generateKeyPair</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"generateKeyPair("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>248</span> 
<span class='line'>249</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> 
<span class='line'>251</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">crypto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> 
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="COMM">// Generate key pair</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">	</span><span class="NAME">crypto.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">algo</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> 
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.determineKeyIdentifier</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>257</span> 
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">		</span><span class="NAME">keyblob</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">PKCS8.encodeKeyUsingPKCS8Format</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> 
<span class='line'>262</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">	</span><span class="NAME">signerDAO.newSigner</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>265</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>266</span> 
<span class='line'>267</span> 
<span class='line'>268</span> 
<span class='line'>269</span> </span><span class="COMM">/**
<span class='line'>270</span>  * Get a private key in the certificate store
<span class='line'>271</span>  *
<span class='line'>272</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>273</span>  * @param {String} name the unique name of the signer in the holder context
<span class='line'>274</span>  * @returns the private key or null if not found
<span class='line'>275</span>  * @type Key
<span class='line'>276</span>  */</span><span class="WHIT">
<span class='line'>277</span> </span><span class="NAME">X509CertificateStore.prototype.getPrivateKeyByName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getPrivateKey("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> 
<span class='line'>280</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> 
<span class='line'>282</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByName</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>284</span> 
<span class='line'>285</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>288</span> 
<span class='line'>289</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKCS8.decodeKeyFromPKCS8Format</span><span class="PUNC">(</span><span class="NAME">signer.keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>291</span> 
<span class='line'>292</span> 
<span class='line'>293</span> 
<span class='line'>294</span> </span><span class="COMM">/**
<span class='line'>295</span>  * Get a private key in the certificate store
<span class='line'>296</span>  *
<span class='line'>297</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>298</span>  * @param {ByteString} keyId the unique key identifier
<span class='line'>299</span>  * @returns the private key or null if not found
<span class='line'>300</span>  * @type Key
<span class='line'>301</span>  */</span><span class="WHIT">
<span class='line'>302</span> </span><span class="NAME">X509CertificateStore.prototype.getPrivateKeyByKeyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getPrivateKeyByKeyId("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>304</span> 
<span class='line'>305</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> 
<span class='line'>307</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByKeyId</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> 
<span class='line'>310</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>313</span> 
<span class='line'>314</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKCS8.decodeKeyFromPKCS8Format</span><span class="PUNC">(</span><span class="NAME">signer.keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>315</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>316</span> 
<span class='line'>317</span> 
<span class='line'>318</span> 
<span class='line'>319</span> </span><span class="COMM">/**
<span class='line'>320</span>  * Remove private key
<span class='line'>321</span>  *
<span class='line'>322</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>323</span>  * @param {String} name the unique name of the signer in the holder context
<span class='line'>324</span>  * @returns true is deleted
<span class='line'>325</span>  * @type boolean
<span class='line'>326</span>  */</span><span class="WHIT">
<span class='line'>327</span> </span><span class="NAME">X509CertificateStore.prototype.deletePrivateKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"deleteRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span> 
<span class='line'>330</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> 
<span class='line'>332</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByName</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name.toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> 
<span class='line'>335</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>338</span> 
<span class='line'>339</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">signerDAO.deleteSigner</span><span class="PUNC">(</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>341</span> 
<span class='line'>342</span> 
<span class='line'>343</span> 
<span class='line'>344</span> </span><span class="COMM">/**
<span class='line'>345</span>  * Remove request
<span class='line'>346</span>  *
<span class='line'>347</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>348</span>  * @param {ByteString} keyId the unique keyId of the request in the holder context
<span class='line'>349</span>  * @returns true is deleted
<span class='line'>350</span>  * @type boolean
<span class='line'>351</span>  */</span><span class="WHIT">
<span class='line'>352</span> </span><span class="NAME">X509CertificateStore.prototype.deleteRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"deleteRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>354</span> 
<span class='line'>355</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>356</span> 
<span class='line'>357</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">requestDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getRequestDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">requestDAO.getRequestByKeyId</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>359</span> 
<span class='line'>360</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">request</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>363</span> 
<span class='line'>364</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">requestDAO.deleteRequest</span><span class="PUNC">(</span><span class="NAME">request</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>366</span> 
<span class='line'>367</span> 
<span class='line'>368</span> 
<span class='line'>369</span> </span><span class="COMM">/**
<span class='line'>370</span>  * Store a certificate request in the certificate store
<span class='line'>371</span>  *
<span class='line'>372</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>373</span>  * @param {PKCS10} req the request
<span class='line'>374</span>  * @type ByteString
<span class='line'>375</span>  * @return the request's keyId
<span class='line'>376</span>  */</span><span class="WHIT">
<span class='line'>377</span> </span><span class="NAME">X509CertificateStore.prototype.storeRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"storeRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> 
<span class='line'>380</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> 
<span class='line'>382</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">requestDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getRequestDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>383</span> 
<span class='line'>384</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.determineKeyIdentifier</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>386</span> 
<span class='line'>387</span> </span><span class="WHIT">	</span><span class="NAME">requestDAO.newRequest</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>388</span> 
<span class='line'>389</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>390</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>391</span> 
<span class='line'>392</span> 
<span class='line'>393</span> 
<span class='line'>394</span> </span><span class="COMM">/**
<span class='line'>395</span>  * Return request for given keyId
<span class='line'>396</span>  *
<span class='line'>397</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>398</span>  * @param {ByteString} keyId the unique keyId of the request in the holder context
<span class='line'>399</span>  * @type PKCS10
<span class='line'>400</span>  * @return the request or null
<span class='line'>401</span>  */</span><span class="WHIT">
<span class='line'>402</span> </span><span class="NAME">X509CertificateStore.prototype.getRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>403</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getRequest("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>404</span> 
<span class='line'>405</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>406</span> 
<span class='line'>407</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">requestDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getRequestDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>408</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">requestDAO.getRequestByKeyId</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>409</span> 
<span class='line'>410</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PKCS10</span><span class="PUNC">(</span><span class="NAME">request.bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>411</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>412</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>413</span> 
<span class='line'>414</span> 
<span class='line'>415</span> 
<span class='line'>416</span> </span><span class="COMM">/**
<span class='line'>417</span>  * Store a certificate in the certificate store
<span class='line'>418</span>  *
<span class='line'>419</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>420</span>  * @param {X509} cert the certificate
<span class='line'>421</span>  * @param {Boolean} makeCurrent true if this certificate becomes the current certificate
<span class='line'>422</span>  * @param {Number} srId service request id to be stored with issued certificate (optional)
<span class='line'>423</span>  * @type Certificate
<span class='line'>424</span>  * @return the Certificate entry from the database or null
<span class='line'>425</span>  */</span><span class="WHIT">
<span class='line'>426</span> </span><span class="NAME">X509CertificateStore.prototype.storeCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">makeCurrent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>427</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"storeCertificate("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">",'"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"',"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">makeCurrent</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>428</span> 
<span class='line'>429</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>430</span> 
<span class='line'>431</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"number"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolderById</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>434</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Could not locate holder for id "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>436</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>437</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.certtype</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>438</span> 
<span class='line'>439</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>440</span> </span><span class="WHIT">			</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder not found, creating new."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>441</span> </span><span class="WHIT">			</span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.newHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Holder.X509</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>442</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>443</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>444</span> 
<span class='line'>445</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>446</span> 
<span class='line'>447</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getIssuerDNString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>448</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getSubjectDNString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">autid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getAuthorityKeyIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getSubjectKeyIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>451</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">serial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getSerialNumber</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>452</span> 
<span class='line'>453</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">autid</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">autid.equals</span><span class="PUNC">(</span><span class="NAME">subid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">issuer.equals</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>454</span> </span><span class="WHIT">		</span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Certificate.SHORT</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">		</span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Certificate.UP</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>458</span> 
<span class='line'>459</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.getCertificateBySerial</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">serial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>460</span> 
<span class='line'>461</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>462</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"storeCertificate() : We already have a different certificate for that serial number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>463</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Existing: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509</span><span class="PUNC">(</span><span class="NAME">certificate.bytes</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>464</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"New     : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span> 
<span class='line'>466</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>467</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>468</span> 
<span class='line'>469</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>470</span> </span><span class="WHIT">		</span><span class="NAME">keyId</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.determineKeyIdentifier</span><span class="PUNC">(</span><span class="NAME">cert.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>471</span> </span><span class="WHIT">		</span><span class="NAME">expiry</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">LongDate</span><span class="PUNC">(</span><span class="NAME">cert.getNotAfter</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>473</span> 
<span class='line'>474</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">srId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>475</span> </span><span class="WHIT">		</span><span class="NAME">template.serviceRequestId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>476</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>477</span> 
<span class='line'>478</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.newCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">serial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>479</span> 
<span class='line'>480</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">makeCurrent</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">holder.certId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">		</span><span class="NAME">holderdao.updateCurrentCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>483</span> 
<span class='line'>484</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>485</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>486</span> 
<span class='line'>487</span> 
<span class='line'>488</span> 
<span class='line'>489</span> </span><span class="COMM">/**
<span class='line'>490</span>  * Import a certificate that can be validated by one of certificates in the database.
<span class='line'>491</span>  *
<span class='line'>492</span>  * @param {X509} cert the certificate
<span class='line'>493</span>  * @param {Boolean} makeCurrent true if this certificate becomes the current certificate
<span class='line'>494</span>  * @param {Number} srId service request id to be stored with issued certificate (optional)
<span class='line'>495</span>  * @type Certificate
<span class='line'>496</span>  * @return the Certificate entry from the database or null
<span class='line'>497</span>  */</span><span class="WHIT">
<span class='line'>498</span> </span><span class="NAME">X509CertificateStore.prototype.importCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">makeCurrent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>499</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"importCertificate("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>500</span> 
<span class='line'>501</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getIssuerDNString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getSubjectDNString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">issuer.equals</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"importCertificate can not import self-signed certificates"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>506</span> 
<span class='line'>507</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>508</span> 
<span class='line'>509</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">autid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getAuthorityKeyIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>510</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getSubjectKeyIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>511</span> 
<span class='line'>512</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdto</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.getCertificateByKeyId</span><span class="PUNC">(</span><span class="NAME">autid</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>513</span> 
<span class='line'>514</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">certdto</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.WARN</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No certificate with AuthorityKeyIdentifier "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">autid.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>516</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>517</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>518</span> 
<span class='line'>519</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509</span><span class="PUNC">(</span><span class="NAME">certdto.bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>520</span> </span><span class="WHIT">	</span><span class="NAME">cert.verifyWith</span><span class="PUNC">(</span><span class="NAME">ca</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>521</span> 
<span class='line'>522</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parentId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdto.holderId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>523</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.makeName</span><span class="PUNC">(</span><span class="NAME">PKIXCommon.parseDN</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> 
<span class='line'>525</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>526</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.getHolderByTypeAndName</span><span class="PUNC">(</span><span class="NAME">parentId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Holder.X509</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>527</span> 
<span class='line'>528</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>529</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Holder not found, creating new."</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>530</span> </span><span class="WHIT">		</span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.newHolderForParent</span><span class="PUNC">(</span><span class="NAME">parentId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">Holder.X509</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>531</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>532</span> 
<span class='line'>533</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holder.id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>534</span> 
<span class='line'>535</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.storeCertificate</span><span class="PUNC">(</span><span class="NAME">holderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">makeCurrent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>536</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>537</span> 
<span class='line'>538</span> 
<span class='line'>539</span> 
<span class='line'>540</span> </span><span class="COMM">/**
<span class='line'>541</span>  * Get current key id
<span class='line'>542</span>  *
<span class='line'>543</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>544</span>  * @type ByteString
<span class='line'>545</span>  * @return the current key id or null if none defined
<span class='line'>546</span>  */</span><span class="WHIT">
<span class='line'>547</span> </span><span class="NAME">X509CertificateStore.prototype.getCurrentKeyIdAndCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>548</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCurrentKeyId("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>549</span> 
<span class='line'>550</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>551</span> 
<span class='line'>552</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>553</span> 
<span class='line'>554</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.getCurrentCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>555</span> 
<span class='line'>556</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>557</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>559</span> 
<span class='line'>560</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">certificate.keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509</span><span class="PUNC">(</span><span class="NAME">certificate.bytes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>561</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>562</span> 
<span class='line'>563</span> 
<span class='line'>564</span> 
<span class='line'>565</span> </span><span class="COMM">/**
<span class='line'>566</span>  * Get current certificate for given path or holderId
<span class='line'>567</span>  *
<span class='line'>568</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>569</span>  * @type X509
<span class='line'>570</span>  * @return the current certificate or null if none defined
<span class='line'>571</span>  */</span><span class="WHIT">
<span class='line'>572</span> </span><span class="NAME">X509CertificateStore.prototype.getCurrentCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>573</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCurrentCertificate("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>574</span> 
<span class='line'>575</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>576</span> 
<span class='line'>577</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>578</span> 
<span class='line'>579</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.getCurrentCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>580</span> 
<span class='line'>581</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>582</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>583</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>584</span> 
<span class='line'>585</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509</span><span class="PUNC">(</span><span class="NAME">certificate.bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>586</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>587</span> 
<span class='line'>588</span> 
<span class='line'>589</span> 
<span class='line'>590</span> </span><span class="COMM">/**
<span class='line'>591</span>  * Get certificate chain for given path or holderId
<span class='line'>592</span>  *
<span class='line'>593</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>594</span>  * @type X509[]
<span class='line'>595</span>  * @return the certificate chain, starting with the current certificate of the holder and ending with the self-signed trust anchor
<span class='line'>596</span>  */</span><span class="WHIT">
<span class='line'>597</span> </span><span class="NAME">X509CertificateStore.prototype.getCertificateChain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>598</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCertificateChain("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>599</span> 
<span class='line'>600</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">chain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>601</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>602</span> 
<span class='line'>603</span> </span><span class="WHIT">	</span><span class="KEYW">do</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>604</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>605</span> 
<span class='line'>606</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.getCurrentCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>607</span> 
<span class='line'>608</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>609</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_ARGUMENTS</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No current certificate found for "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>610</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>611</span> 
<span class='line'>612</span> </span><span class="WHIT">		</span><span class="NAME">chain.push</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509</span><span class="PUNC">(</span><span class="NAME">certificate.bytes</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>613</span> </span><span class="WHIT">		</span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holder.parentId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>614</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>615</span> 
<span class='line'>616</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">chain</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>617</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>618</span> 
<span class='line'>619</span> 
<span class='line'>620</span> 
<span class='line'>621</span> </span><span class="COMM">/**
<span class='line'>622</span>  * Get current certificate for given path or holderId
<span class='line'>623</span>  *
<span class='line'>624</span>  * @param {String/Number} pathOrHolderId the relative path of the PKI element (e.g. "/UTCVCA1/UTDVCA1") or the holderId from the database
<span class='line'>625</span>  * @type X509
<span class='line'>626</span>  * @return the current certificate or null if none defined
<span class='line'>627</span>  */</span><span class="WHIT">
<span class='line'>628</span> </span><span class="NAME">X509CertificateStore.prototype.getCurrentCertificateAndSigner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>629</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getCurrentCertificateAndSigner("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>630</span> 
<span class='line'>631</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>632</span> 
<span class='line'>633</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>634</span> 
<span class='line'>635</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.getCurrentCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>636</span> 
<span class='line'>637</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>638</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>639</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>640</span> 
<span class='line'>641</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509</span><span class="PUNC">(</span><span class="NAME">certificate.bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>642</span> 
<span class='line'>643</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>644</span> 
<span class='line'>645</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByKeyId</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certificate.keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>646</span> 
<span class='line'>647</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>648</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>649</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>650</span> 
<span class='line'>651</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKCS8.decodeKeyFromPKCS8Format</span><span class="PUNC">(</span><span class="NAME">signer.keyblob</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>652</span> 
<span class='line'>653</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">signerPrK</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">signerCert</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>654</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>655</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2018 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview X509Name - Class to support X500 Names
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="COMM">// 	Name ::= CHOICE {</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="COMM">// 	     RDNSequence }</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="COMM">//</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="COMM">// 	RDNSequence ::= SEQUENCE OF RelativeDistinguishedName</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="COMM">//</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="COMM">// 	RelativeDistinguishedName ::=</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="COMM">// 		SET OF AttributeTypeAndValue</span><span class="WHIT">
<span class='line'> 34</span> </span><span class="COMM">//</span><span class="WHIT">
<span class='line'> 35</span> </span><span class="COMM">// 	AttributeTypeAndValue ::= SEQUENCE {</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="COMM">// 		type     AttributeType,</span><span class="WHIT">
<span class='line'> 37</span> </span><span class="COMM">// 		value    AttributeValue }</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="COMM">//</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="COMM">// 	AttributeType ::= OBJECT IDENTIFIER</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="COMM">//</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="COMM">// 	AttributeValue ::= ANY DEFINED BY AttributeType</span><span class="WHIT">
<span class='line'> 42</span> 
<span class='line'> 43</span> 
<span class='line'> 44</span> 
<span class='line'> 45</span> </span><span class="NAME">X509Name.name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"550429"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="NAME">X509Name.surname</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"550404"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="NAME">X509Name.givenname</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"55042A"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="NAME">X509Name.initials</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"55042B"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="NAME">X509Name.generationQualifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"55042C"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="NAME">X509Name.commonName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"550403"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="NAME">X509Name.localityName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"550407"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="NAME">X509Name.stateOrProvinceName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"550408"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="NAME">X509Name.organizationName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"55040A"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="NAME">X509Name.organizationalUnitName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"55040B"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="NAME">X509Name.title</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"55040C"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="NAME">X509Name.dnQualifier</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"55042E"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="NAME">X509Name.countryName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"550406"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="NAME">X509Name.serialNumber</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"550405"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="NAME">X509Name.emailAddress</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"2A864886F70D010901"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> 
<span class='line'> 61</span> 
<span class='line'> 62</span> 
<span class='line'> 63</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">X509Name</span><span class="PUNC">(</span><span class="NAME">subjectDN</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 64</span> </span><span class="WHIT">	</span><span class="NAME">this.rdn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="WHIT">	</span><span class="NAME">this.parseRDNSequence</span><span class="PUNC">(</span><span class="NAME">subjectDN</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 67</span> 
<span class='line'> 68</span> </span><span class="NAME">exports.X509Name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">X509Name</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 69</span> 
<span class='line'> 70</span> 
<span class='line'> 71</span> 
<span class='line'> 72</span> </span><span class="NAME">X509Name.prototype.parseRDNSequence</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">rdnSeq</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rdnSeq</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">ASN1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">rdnSeq.isconstructed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"X509Name"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Name must be constructed"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 77</span> 
<span class='line'> 78</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">rdnSeq.tag</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">			</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"X509Name"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"RDNSequence must be SEQUENCE"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 81</span> 
<span class='line'> 82</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">rdnSeq.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">set</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdnSeq.get</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">set.tag</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">ASN1.SET</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">				</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"X509Name"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"RDNSequence must only contain SETs"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">			</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">set.elements</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">attr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">set.get</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">attr.tag</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">ASN1.SEQUENCE</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"X509Name"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"AttributeTypeAndValue must be SEQUENCE"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">attr.elements</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"X509Name"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"AttributeTypeAndValue must have 2 elements"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">attrType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">attr.get</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">attrType.tag</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">ASN1.OBJECT_IDENTIFIER</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">					</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"X509Name"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"AttributeType must be OBJECT IDENTIFIER"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 99</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">oid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">attrType.value.toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>100</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">attrValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">attr.get</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">				</span><span class="NAME">this.rdn</span><span class="PUNC">[</span><span class="NAME">oid</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">attrValue</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"X509Name"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_TYPE</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Argument must be of type ASN1"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>107</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>108</span> 
<span class='line'>109</span> 
<span class='line'>110</span> 
<span class='line'>111</span> </span><span class="NAME">X509Name.prototype.hasRDN</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.rdn</span><span class="PUNC">[</span><span class="NAME">oid</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>113</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>114</span> 
<span class='line'>115</span> 
<span class='line'>116</span> 
<span class='line'>117</span> </span><span class="NAME">X509Name.prototype.getRDNAsString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">oid</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rdn</span><span class="PUNC">[</span><span class="NAME">oid</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="STRN">"X509Name"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_INDEX</span><span class="PUNC">,</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="STRN">"No matching RDN found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>122</span> 
<span class='line'>123</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">r.tag</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">ASN1.UTF8String</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r.value.toString</span><span class="PUNC">(</span><span class="NAME">UTF8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">r.value.toString</span><span class="PUNC">(</span><span class="NAME">ASCII</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>128</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>129</span> 
<span class='line'>130</span> 
<span class='line'>131</span> 
<span class='line'>132</span> </span><span class="NAME">X509Name.prototype.toString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>133</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>134</span> 
<span class='line'>135</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.countryName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"C="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.countryName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>138</span> 
<span class='line'>139</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.stateOrProvinceName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"ST="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.stateOrProvinceName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>144</span> 
<span class='line'>145</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.organizationName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> 
<span class='line'>149</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"O="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.organizationName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>151</span> 
<span class='line'>152</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.organizationalUnitName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> 
<span class='line'>156</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"OU="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.organizationalUnitName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>158</span> 
<span class='line'>159</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.localityName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"L="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.localityName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>164</span> 
<span class='line'>165</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.title</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"T="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.title</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>170</span> 
<span class='line'>171</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.givenname</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"G="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.givenname</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>176</span> 
<span class='line'>177</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.surname</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"S="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.surname</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>182</span> 
<span class='line'>183</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.generationQualifier</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"generationQualifier="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.generationQualifier</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>188</span> 
<span class='line'>189</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.name</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"N="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>194</span> 
<span class='line'>195</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.initials</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"initials="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.initials</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>200</span> 
<span class='line'>201</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.commonName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"CN="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.commonName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> 
<span class='line'>207</span> 
<span class='line'>208</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.serialNumber</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"SERIALNUMBER="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.serialNumber</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>213</span> 
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.dnQualifier</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"DNQ="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.dnQualifier</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>219</span> 
<span class='line'>220</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.hasRDN</span><span class="PUNC">(</span><span class="NAME">X509Name.emailAddress</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">result.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">			</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">","</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">		</span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"E="</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.getRDNAsString</span><span class="PUNC">(</span><span class="NAME">X509Name.emailAddress</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>225</span> 
<span class='line'>226</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>228</span> </span></pre></body></html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="COMM">/**
<span class='line'>  2</span>  *  ---------
<span class='line'>  3</span>  * |.##> &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
<span class='line'>  4</span>  * |#       #|
<span class='line'>  5</span>  * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
<span class='line'>  6</span>  * |'##> &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
<span class='line'>  7</span>  *  ---------
<span class='line'>  8</span>  *
<span class='line'>  9</span>  *  This file is part of OpenSCDP.
<span class='line'> 10</span>  *
<span class='line'> 11</span>  *  OpenSCDP is free software; you can redistribute it and/or modify
<span class='line'> 12</span>  *  it under the terms of the GNU General Public License version 2 as
<span class='line'> 13</span>  *  published by the Free Software Foundation.
<span class='line'> 14</span>  *
<span class='line'> 15</span>  *  OpenSCDP is distributed in the hope that it will be useful,
<span class='line'> 16</span>  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
<span class='line'> 17</span>  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
<span class='line'> 18</span>  *  GNU General Public License for more details.
<span class='line'> 19</span>  *
<span class='line'> 20</span>  *  You should have received a copy of the GNU General Public License
<span class='line'> 21</span>  *  along with OpenSCDP; if not, write to the Free Software
<span class='line'> 22</span>  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
<span class='line'> 23</span>  *
<span class='line'> 24</span>  * @fileoverview A Signer backed by a X.509 certificate
<span class='line'> 25</span>  */</span><span class="WHIT">
<span class='line'> 26</span> 
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pki-db/Holder'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">Holder</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">Certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pki-db/Certificate'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">Certificate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKIXCommon</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/x509/PKIXCommon'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKIXCommon</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKCS10</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pkcs/PKCS10'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKCS10</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">PKCS10Generator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/x509/PKCS10Generator'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">PKCS10Generator</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">LongDate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">require</span><span class="PUNC">(</span><span class="STRN">'scsh/pki-db/LongDate'</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">LongDate</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 33</span> 
<span class='line'> 34</span> 
<span class='line'> 35</span> 
<span class='line'> 36</span> </span><span class="COMM">/**
<span class='line'> 37</span>  * Create a signer based on a X.509 certificate
<span class='line'> 38</span>  *
<span class='line'> 39</span>  * @class Class implementing a signer backed by a X.509 certificate
<span class='line'> 40</span>  * @constructor
<span class='line'> 41</span>  * @param {DAOFactory} daof the factory that can create the required data access objects
<span class='line'> 42</span>  * @param {CryptoProviderFactory} cpf factory implementing getCryptoProvider() used to get access to crypto providers
<span class='line'> 43</span>  * @param {Holder} holder the holder object for this signer
<span class='line'> 44</span>  */</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">X509Signer</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cpf</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">	</span><span class="NAME">this.daof</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">daof</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">	</span><span class="NAME">this.cpf</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cpf</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">	</span><span class="NAME">this.holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 49</span> 
<span class='line'> 50</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Certificate holder "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" not found"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 53</span> 
<span class='line'> 54</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.getSigner</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">		</span><span class="NAME">this.parsePolicyFromSigner</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 58</span> 
<span class='line'> 59</span> </span><span class="NAME">exports.X509Signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">X509Signer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 60</span> 
<span class='line'> 61</span> 
<span class='line'> 62</span> 
<span class='line'> 63</span> </span><span class="COMM">/**
<span class='line'> 64</span>  * Create a new signer
<span class='line'> 65</span>  *
<span class='line'> 66</span>  * @param {DAOFactory} daof the factory that can create the required data access objects
<span class='line'> 67</span>  * @param {String/Number} pathOrHolderId the path of holderIDs (eg. "/UTCVCA/UTDVCA/UTTERM") or the holderId from the database
<span class='line'> 68</span>  * @param {Number} certtype optional argument, default Holder.X509
<span class='line'> 69</span>  * @param {Object} template template for database entry
<span class='line'> 70</span>  * @type Number
<span class='line'> 71</span>  * @return the newly created holder id
<span class='line'> 72</span>  */</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="NAME">X509Signer.createSigner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">daof</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certtype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">certtype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">		</span><span class="NAME">certtype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Holder.X509</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 77</span> 
<span class='line'> 78</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.newHolder</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certtype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">			</span><span class="NAME">pathOrHolderId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 85</span> 
<span class='line'> 86</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">holderdao.newHolderForParent</span><span class="PUNC">(</span><span class="NAME">pathOrHolderId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certtype</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 88</span> 
<span class='line'> 89</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">holder.id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 91</span> 
<span class='line'> 92</span> 
<span class='line'> 93</span> 
<span class='line'> 94</span> </span><span class="COMM">/**
<span class='line'> 95</span>  * Set policy for signer object.
<span class='line'> 96</span>  *
<span class='line'> 97</span>  * The policy object shall contain the following properties. Some elements are only used in the
<span class='line'> 98</span>  * derive X509CertificateIssuer class.
<span class='line'> 99</span>  *
<span class='line'>100</span>  * &lt;ul>
<span class='line'>101</span>  * &lt;li>distinguishedName - The distinguishedName object as defined in PKIXCommon.encodeName()&lt;/li>
<span class='line'>102</span>  * &lt;li>keySpecification - A Key object initialized with the key parameter.&lt;/li>
<span class='line'>103</span>  * &lt;li>signatureAlgorithm - A ByteString encoding the object identifier for the signature algorithm&lt;/li>
<span class='line'>104</span>  * &lt;li>validityDaysSelfSigned - Number of days the self-signed certificate is valid&lt;/li>
<span class='line'>105</span>  * &lt;li>validityDaysCertificates - Number of days the issued certificate is valid&lt;/li>
<span class='line'>106</span>  * &lt;li>validityDaysCRL - Number of days the issued certificate revocation list is valid&lt;/li>
<span class='line'>107</span>  * &lt;li>pathLenConstraint - Number of subordinate CAs&lt;/li>
<span class='line'>108</span>  * &lt;li>requestFormat - "pkcs10" or "sc-hsm"&lt;/li>
<span class='line'>109</span>  * &lt;li>overwriteKey - Set to true to overwrite a key with the same label&lt;/li>
<span class='line'>110</span>  * &lt;li>restrictPublicKey - Limit the public key of the self-signed root as per PKIXCommon.restrictedPublicKeyAlgorithmIdentifier()&lt;/li>
<span class='line'>111</span>  * &lt;/ul>
<span class='line'>112</span>  *
<span class='line'>113</span>  * @see PKIXCommon.encodeName()
<span class='line'>114</span>  * @param {String} crldp the URL of the distribution point
<span class='line'>115</span>  */</span><span class="WHIT">
<span class='line'>116</span> </span><span class="NAME">X509Signer.prototype.setPolicy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">policy</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">	</span><span class="NAME">this.policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>119</span> 
<span class='line'>120</span> 
<span class='line'>121</span> 
<span class='line'>122</span> </span><span class="COMM">/**
<span class='line'>123</span>  * Determine signer name for newly generated signer
<span class='line'>124</span>  *
<span class='line'>125</span>  * @type String
<span class='line'>126</span>  * @return the unique name
<span class='line'>127</span>  */</span><span class="WHIT">
<span class='line'>128</span> </span><span class="NAME">X509Signer.prototype.determineSignerName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.holder.id</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">":X509Signer "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.holder.signerNo</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" ["</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"]"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span> </span><span class="WHIT">	</span><span class="NAME">holderdao.updateSignerNo</span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.holder.signerNo</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>132</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>134</span> 
<span class='line'>135</span> 
<span class='line'>136</span> 
<span class='line'>137</span> </span><span class="COMM">/**
<span class='line'>138</span>  * Determine subject distinguished name for new signer
<span class='line'>139</span>  *
<span class='line'>140</span>  * @param {String} name
<span class='line'>141</span>  * @type String
<span class='line'>142</span>  * @return the distringuished name for the new signer
<span class='line'>143</span>  */</span><span class="WHIT">
<span class='line'>144</span> </span><span class="NAME">X509Signer.prototype.determineDistinguishedName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.policy.distinguishedName</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>146</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>147</span> 
<span class='line'>148</span> 
<span class='line'>149</span> 
<span class='line'>150</span> </span><span class="COMM">/**
<span class='line'>151</span>  * Determine the key usage for the request
<span class='line'>152</span>  *
<span class='line'>153</span>  * @type Number
<span class='line'>154</span>  * @return the key usage defined in PKIXCommon
<span class='line'>155</span>  */</span><span class="WHIT">
<span class='line'>156</span> </span><span class="NAME">X509Signer.prototype.getRequestKeyUsage</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.digitalSignature</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>159</span> 
<span class='line'>160</span> 
<span class='line'>161</span> 
<span class='line'>162</span> </span><span class="COMM">/**
<span class='line'>163</span>  * Create a new signer key pair
<span class='line'>164</span>  *
<span class='line'>165</span>  * @param {String} name the signer name
<span class='line'>166</span>  * @type ByteString
<span class='line'>167</span>  * @return the subject key identifier
<span class='line'>168</span>  */</span><span class="WHIT">
<span class='line'>169</span> </span><span class="NAME">X509Signer.prototype.newSigner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">		</span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.determineSignerName</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>173</span> 
<span class='line'>174</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">template</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">template.keyDomain</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Cannot create a signer without a template containing the keyDomain"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>177</span> 
<span class='line'>178</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.cpf.getCryptoProvider</span><span class="PUNC">(</span><span class="NAME">template.keyDomain</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">	</span><span class="KEYW">try</span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.policy.overwriteKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">			</span><span class="NAME">cp.deleteIfExists</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>183</span> 
<span class='line'>184</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cp.generateKeyPair</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.policy.keySpecification</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k.prk</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">puk</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k.puk</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k.req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>188</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyblob</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>189</span> 
<span class='line'>190</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.determineKeyIdentifier</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>191</span> 
<span class='line'>192</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">cp.getWrappedKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">			</span><span class="NAME">template.keyblob</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cp.getWrappedKey</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>195</span> 
<span class='line'>196</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">		</span><span class="NAME">this.signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.newSigner</span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span> 
<span class='line'>199</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.policy.requestFormat</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"sc-hsm"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">gen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PKCS10Generator</span><span class="PUNC">(</span><span class="NAME">cp.getCrypto</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">			</span><span class="NAME">gen.setSignatureAlgorithm</span><span class="PUNC">(</span><span class="NAME">this.policy.reqSignatureAlgorithm</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">			</span><span class="NAME">gen.setSubject</span><span class="PUNC">(</span><span class="NAME">this.determineDistinguishedName</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">			</span><span class="NAME">gen.setPublicKey</span><span class="PUNC">(</span><span class="NAME">puk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">			</span><span class="NAME">gen.addKeyUsageExtension</span><span class="PUNC">(</span><span class="NAME">this.getRequestKeyUsage</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">			</span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">gen.generateCertificationRequest</span><span class="PUNC">(</span><span class="NAME">prk</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">			</span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">req.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>208</span> 
<span class='line'>209</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">requestDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getRequestDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">		</span><span class="NAME">requestDAO.newRequest</span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">	</span><span class="KEYW">finally</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">		</span><span class="NAME">cp.release</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>215</span> 
<span class='line'>216</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>218</span> 
<span class='line'>219</span> 
<span class='line'>220</span> 
<span class='line'>221</span> </span><span class="COMM">/**
<span class='line'>222</span>  * Return the holderId from the holder database for this element
<span class='line'>223</span>  *
<span class='line'>224</span>  * @type Number
<span class='line'>225</span>  * @return the holderId
<span class='line'>226</span>  */</span><span class="WHIT">
<span class='line'>227</span> </span><span class="NAME">X509Signer.prototype.getHolderId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.holder.id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>229</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>230</span> 
<span class='line'>231</span> 
<span class='line'>232</span> 
<span class='line'>233</span> </span><span class="COMM">/**
<span class='line'>234</span>  * Return the holder from the holder database for this element
<span class='line'>235</span>  *
<span class='line'>236</span>  * @type Number
<span class='line'>237</span>  * @return the holderId
<span class='line'>238</span>  */</span><span class="WHIT">
<span class='line'>239</span> </span><span class="NAME">X509Signer.prototype.getHolder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.holder</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>241</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>242</span> 
<span class='line'>243</span> 
<span class='line'>244</span> 
<span class='line'>245</span> </span><span class="COMM">/**
<span class='line'>246</span>  * Return the signer from the signer database for this element
<span class='line'>247</span>  *
<span class='line'>248</span>  * @type Signer
<span class='line'>249</span>  * @return the signer value object or null
<span class='line'>250</span>  */</span><span class="WHIT">
<span class='line'>251</span> </span><span class="NAME">X509Signer.prototype.getSigner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getSigner()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"return cached signer"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.signer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>257</span> 
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">	</span><span class="NAME">this.currentCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certDAO.getCurrentCertificate</span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>260</span> 
<span class='line'>261</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.currentCertificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// no active signer</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"no active signer for holder "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.holder.id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>265</span> 
<span class='line'>266</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signerDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getSignerDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">	</span><span class="NAME">this.signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signerDAO.getSignerByKeyId</span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.currentCertificate.keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>268</span> 
<span class='line'>269</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">		</span><span class="NAME">this.cpid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.signer.keyDomain</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>272</span> 
<span class='line'>273</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.signer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>275</span> 
<span class='line'>276</span> 
<span class='line'>277</span> 
<span class='line'>278</span> </span><span class="COMM">/**
<span class='line'>279</span>  * Parse the policy from the signer's values object
<span class='line'>280</span>  *
<span class='line'>281</span>  * @type Object
<span class='line'>282</span>  * @return the policy
<span class='line'>283</span>  */</span><span class="WHIT">
<span class='line'>284</span> </span><span class="NAME">X509Signer.prototype.parsePolicyFromSigner</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSigner</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>286</span> 
<span class='line'>287</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No active signer"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>290</span> 
<span class='line'>291</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signer.getContent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span> 
<span class='line'>293</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">c.keySpecification</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// no policy</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>296</span> 
<span class='line'>297</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c.keySpecification.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"EC"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">		</span><span class="NAME">dp.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">c.keySpecification.curve</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">		</span><span class="NAME">dp.setSize</span><span class="PUNC">(</span><span class="NAME">c.keySpecification.keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>303</span> 
<span class='line'>304</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.parseDN</span><span class="PUNC">(</span><span class="NAME">c.distinguishedName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>305</span> 
<span class='line'>306</span> </span><span class="WHIT">	</span><span class="NAME">this.policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">		</span><span class="NAME">distinguishedName</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dn</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">		</span><span class="NAME">signatureAlgorithm</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">c.signatureAlgorithm</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">		</span><span class="NAME">reqSignatureAlgorithm</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">c.keySpecification.sigalg</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">		</span><span class="NAME">validityDaysCertificates</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">c.validityDaysCertificates</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">		</span><span class="NAME">validityDaysCRL</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">c.validityDaysCRL</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">		</span><span class="NAME">pathLenConstraint</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">c.pathLenConstraint</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">		</span><span class="NAME">keySpecification</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>315</span> 
<span class='line'>316</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.policy</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>317</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>318</span> 
<span class='line'>319</span> 
<span class='line'>320</span> 
<span class='line'>321</span> </span><span class="NAME">X509Signer.prototype.getSubjectPolicyForRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getSubjectPolicyForRequest()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> 
<span class='line'>324</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getSigner</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>325</span> 
<span class='line'>326</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signer</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>327</span> </span><span class="WHIT">		</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">GPError</span><span class="PUNC">(</span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">GPError.INVALID_DATA</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"No active signer"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>329</span> 
<span class='line'>330</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">signer.getContent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> 
<span class='line'>332</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Key</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c.keySpecification.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"EC"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">		</span><span class="NAME">dp.setComponent</span><span class="PUNC">(</span><span class="NAME">Key.ECC_CURVE_OID</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">ByteString</span><span class="PUNC">(</span><span class="NAME">c.keySpecification.curve</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">OID</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">		</span><span class="NAME">dp.setSize</span><span class="PUNC">(</span><span class="NAME">c.keySpecification.keysize</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>338</span> 
<span class='line'>339</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">		</span><span class="NAME">reqSignatureAlgorithm</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">c.keySpecification.sigalg</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">		</span><span class="NAME">keySpecification</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dp</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>343</span> 
<span class='line'>344</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">policy</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>345</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>346</span> 
<span class='line'>347</span> 
<span class='line'>348</span> 
<span class='line'>349</span> </span><span class="COMM">/**
<span class='line'>350</span>  * Get request for the given subject key identifier
<span class='line'>351</span>  *
<span class='line'>352</span>  * @param {ByteString} keyId the subject key identifier
<span class='line'>353</span>  * @type ByteString
<span class='line'>354</span>  * @return the raw request
<span class='line'>355</span>  */</span><span class="WHIT">
<span class='line'>356</span> </span><span class="NAME">X509Signer.prototype.getRequestBinary</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">requestDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getRequestDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">requestDAO.getRequestByKeyId</span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>359</span> 
<span class='line'>360</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>363</span> 
<span class='line'>364</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">request.bytes</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>366</span> 
<span class='line'>367</span> 
<span class='line'>368</span> 
<span class='line'>369</span> </span><span class="COMM">/**
<span class='line'>370</span>  * Get request for the given subject key identifier
<span class='line'>371</span>  *
<span class='line'>372</span>  * @param {ByteString} keyId the subject key identifier
<span class='line'>373</span>  * @type PKCS10
<span class='line'>374</span>  * @return the PKCS10 request
<span class='line'>375</span>  */</span><span class="WHIT">
<span class='line'>376</span> </span><span class="NAME">X509Signer.prototype.getRequest</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">requestDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getRequestDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">requestDAO.getRequestByKeyId</span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>379</span> 
<span class='line'>380</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">request</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>382</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>383</span> 
<span class='line'>384</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">req</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">PKCS10</span><span class="PUNC">(</span><span class="NAME">request.bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">req</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>386</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>387</span> 
<span class='line'>388</span> 
<span class='line'>389</span> 
<span class='line'>390</span> </span><span class="COMM">/*
<span class='line'>391</span> X509Signer.prototype.activateSigner = function(name) {
<span class='line'>392</span> }
<span class='line'>393</span> 
<span class='line'>394</span> 
<span class='line'>395</span> 
<span class='line'>396</span> X509Signer.prototype.importCertificate = function(name) {
<span class='line'>397</span> }
<span class='line'>398</span> 
<span class='line'>399</span> 
<span class='line'>400</span> 
<span class='line'>401</span> X509Signer.prototype.getSignerList = function(usableOnly) {
<span class='line'>402</span> }
<span class='line'>403</span> */</span><span class="WHIT">
<span class='line'>404</span> 
<span class='line'>405</span> 
<span class='line'>406</span> 
<span class='line'>407</span> </span><span class="COMM">/**
<span class='line'>408</span>  * Store a certificate issued for a certain holder
<span class='line'>409</span>  *
<span class='line'>410</span>  * @param {X509} cert the certificate
<span class='line'>411</span>  * @param {Boolean} makeCurrent true if this certificate becomes the current certificate
<span class='line'>412</span>  * @param {ByteString} keyId the key id that links this certificate to the signer (usually the subjectKeyIdentifier)
<span class='line'>413</span>  * @param {Number} srId service request id
<span class='line'>414</span>  * @type Number
<span class='line'>415</span>  * @return the database id of the certificate
<span class='line'>416</span>  */</span><span class="WHIT">
<span class='line'>417</span> </span><span class="NAME">X509Signer.prototype.storeCertificateForHolder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">makeCurrent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"storeCertificateForHolder("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"'"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"',"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">makeCurrent</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">","</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> 
<span class='line'>420</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>421</span> 
<span class='line'>422</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">issuer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getIssuerDNString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>423</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getSubjectDNString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">autid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getAuthorityKeyIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subid</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getSubjectKeyIdentifier</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>426</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">serial</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cert.getSerialNumber</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="NAME">HEX</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>427</span> 
<span class='line'>428</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">autid</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">autid.equals</span><span class="PUNC">(</span><span class="NAME">subid</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">issuer.equals</span><span class="PUNC">(</span><span class="NAME">subject</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>429</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Certificate.SHORT</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>430</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>431</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Certificate.UP</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>433</span> 
<span class='line'>434</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.getCertificateBySerial</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">serial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>435</span> 
<span class='line'>436</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>437</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"storeCertificate() : We already have a different certificate for that serial number"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>438</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"Existing: "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509</span><span class="PUNC">(</span><span class="NAME">certificate.bytes</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>439</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.INFO</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"New     : "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>440</span> 
<span class='line'>441</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>442</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>443</span> 
<span class='line'>444</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="PUNC">(</span><span class="NAME">keyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>445</span> </span><span class="WHIT">		</span><span class="NAME">keyId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">PKIXCommon.determineKeyIdentifier</span><span class="PUNC">(</span><span class="NAME">cert.getPublicKey</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>446</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>447</span> 
<span class='line'>448</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">template</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">		</span><span class="NAME">keyId</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">		</span><span class="NAME">expiry</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">LongDate</span><span class="PUNC">(</span><span class="NAME">cert.getNotAfter</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>451</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>452</span> 
<span class='line'>453</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">srId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>454</span> </span><span class="WHIT">		</span><span class="NAME">template.serviceRequestId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>456</span> 
<span class='line'>457</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certdao.newCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">serial</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert.getBytes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">template</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>458</span> 
<span class='line'>459</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">makeCurrent</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">holder.certId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>460</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holderdao</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getHolderDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> </span><span class="WHIT">		</span><span class="NAME">holderdao.updateCurrentCertificate</span><span class="PUNC">(</span><span class="NAME">holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">certificate</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>462</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>463</span> 
<span class='line'>464</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">certificate.id</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>466</span> 
<span class='line'>467</span> 
<span class='line'>468</span> 
<span class='line'>469</span> </span><span class="COMM">/**
<span class='line'>470</span>  * Store a certificate issued for this signer
<span class='line'>471</span>  *
<span class='line'>472</span>  * @param {X509} cert the certificate
<span class='line'>473</span>  * @param {Boolean} makeCurrent true if this certificate becomes the current certificate
<span class='line'>474</span>  * @param {ByteString} keyId the key id that links this certificate to the signer (usually the subjectKeyIdentifier)
<span class='line'>475</span>  * @param {Number} srId service request id
<span class='line'>476</span>  */</span><span class="WHIT">
<span class='line'>477</span> </span><span class="NAME">X509Signer.prototype.storeCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">makeCurrent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>478</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.storeCertificateForHolder</span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cert</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">makeCurrent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">keyId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">srId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>479</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>480</span> 
<span class='line'>481</span> 
<span class='line'>482</span> 
<span class='line'>483</span> </span><span class="COMM">/**
<span class='line'>484</span>  * Return the signer's certificate
<span class='line'>485</span>  *
<span class='line'>486</span>  * @type X509
<span class='line'>487</span>  * @return the signer's certificate
<span class='line'>488</span>  */</span><span class="WHIT">
<span class='line'>489</span> </span><span class="NAME">X509Signer.prototype.getSignerCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>490</span> </span><span class="WHIT">	</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"getSignerCertificate()"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>491</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.currentCertificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>492</span> </span><span class="WHIT">		</span><span class="NAME">this.getSigner</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>493</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>494</span> 
<span class='line'>495</span> </span><span class="WHIT">	</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.signer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.currentCertificate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>496</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">certDAO</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.daof.getCertificateDAO</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>497</span> </span><span class="WHIT">		</span><span class="NAME">this.currentCertificate</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">certDAO.getCurrentCertificate</span><span class="PUNC">(</span><span class="NAME">this.holder</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>498</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.signer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>499</span> </span><span class="WHIT">		</span><span class="NAME">GPSystem.log</span><span class="PUNC">(</span><span class="NAME">GPSystem.DEBUG</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">module.id</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"no active signer for holder "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.holder.id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>500</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>502</span> 
<span class='line'>503</span> </span><span class="WHIT">	</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">X509</span><span class="PUNC">(</span><span class="NAME">this.currentCertificate.bytes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>504</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>505</span> </span></pre></body></html>PK     A            	   META-INF/ PK     A -\=   R      META-INF/MANIFEST.MFMLK-.
K-*ϳR03
.HMLLN,!-x<srRsSJdyx PK     A               de/ PK     A               de/cardcontact/ PK     A               de/cardcontact/scdp/ PK     A               de/cardcontact/scdp/scsh3/ PK     A V     1   de/cardcontact/scdp/scsh3/AbstractTreeModel.classPN0צ	@K66(EHS`iq,jvbBb(K@0 d|_^b~  !akUUzp*D,WUySו̔Ɵkÿg1b=Fx~\M]Bf+RXJkZ%~e(SB<igr{8':F|8+
f`z⢇1-l2&fî}Թ? PK     A 6Í  ]  .   de/cardcontact/scdp/scsh3/AccessTerminal.classWktg~nfv3!\څRB`H@	
݄؄VNC63ۙIUKb[*bI(ox9?/>&If{y}w}W!a
lsԨ3irz>{kTosl@(Y
hɌ2t7c8~32y>Tag4Շ,#m
gi5^^odBCV
y6m=%p{ZHy'-{8uϜ;,3iVXл5;%
ݮz033պW=4f1m
nאz;Wӷ@kow]Xr:.A6p6*S&TԖ
oT;ܖ5b=HK@W2}5/Bb;;% U.p趙Fnnieju܌SΘPzlz_PT*u>l4
iS
[vn9+[CZꙌ@<mhޑDi^zj=[o}14!bLWa
~+acRVA,UCrVrlIvV
9lEnPiA{PdJ-*+yc/+G<a GV.FG8zn<4$롳n)zq|<8&l	/myiK̃jQjOBm*v`5nSA^f'
F40J˧ެcR-u۠tYƂ!ǘC&ИchL.lV%9I4.r|\I9i˕S&	'C>l}ACZ,q@*|HÇec
1|U1
v֗y3tRXQFu;79
'Q}d[4tg9Q=.K
xCg7];#fK.F>铓(3_S dWfFMOvW){ѯŰx0e4Ʊ-{^E	/ L._Rm}9wh-|A"gK>N2'oaFhu	Ф<2gozβ͓yFI6"yc,|ר_1b3=P2uLƠ 2#]z>H)&@7;9RMBPeXleL[kF`JVzLwqGeePl.vǍdFGi*Ri@]$W/iju]u2_
	QU_Vd{xz-{1W+L68#c
d9žS[-5b:m6nMO5-Uy(9Wf^ )/E?6[F9?od-s!%(Q@|@5SurTEķxho0g<Xwj+RA/A
UC0u`gPAH"2-nBR;3k
JP{{yD$~J>NVncϠ} ~ z{ZPN)&TiE)/X	3Xxxo4MHBMD8_Hx`gpٝLSw$QA/"WMN/іYxwya{al!Q(gǠ8qx|C28[%')](_pxB/V`Lø،"		O<) a$&ɇkXK_!U|7 _ǫ@0^o[<IaԊz|!t"yr"Ay\=MR<PT(Xࢂ&kS:74W3{$WI)׋EN
Nc:W(S[lYxlL,mX幂5=SRs#&OO჋QTu+9+W0S:%|>]E(
?}ks(?Ɔ+Pc]5&BT*RCbԓh	C~MqeJ]i"?ɍ~gyA	og=?!PK     A &)u%
    &   de/cardcontact/scdp/scsh3/Dialog.classXyx~?v7b`աV6xmd
Q[.BH	[NK6;,	PERV'ҪE"ba?hofHvI>Ov& 0&"3L/1`nzbNV$ܛޓ75Ҏ@BιHoVeDZ2ii'a3E^99=o&*#ɘNqY]+R]Y#
҆ghnNS3Fo`tZfѰvb녾Dc
}Gx8*>h\%JN.o'[}mY#oX|ZFQth3gM{bb>TcdlН:ce*pr%;-˴8]xX0
Nld;#K0NA\E#ꜬeηlC}8N.+܀>6N,00[4{/6
}N֭E
ΤmG˓g8璊S0qlDy
Sq>D6kQQ1GXqyiRhE|T`^Y>$?v]"-eWъ6fyZF̃	XsOƥX`,8!K3a}PSwâ%msyVx,H>N-BLrLAt&i\'VH̺+hs25Smrr'v.8XWCt~֝9''~^RwF^H^T!c-LK4-'WFAC	{+^ΚmXlrͼc-$cU2EW&e{8=!L2%9Sv*g`Ǐ2*l-Ald65IlVq
6qPv˱e$P_:F!g"[Kk./qtG
TG,VQݔT*&3	lXv,K9QeKDʾ_/c3nQ96*ͽucHL&Ҵ״6V<	OrK[q/xS2r]&D݄I"@@,bD/k;^J
df
Wo33ܛ'@a-Hj3ME:w9cyK*f{<l6Ω`za"#],`y8et4혲&h-1IPtOk	yK;<rƳV:-rr5+tCE:/V˹fw9<^Gi RE&B3 U8Vv~!'sAg֪DJ'зF.3Q4F	h~x4<LJs*F+;ݲ$Y*(MeFTpK巈A
9kVNnF5^l;FC8(&Hӓ%ݿD/-Gk
~7TKD_,YiBp"͒4ֹ^\b8Y3c&#ii͎E1?
"4e> WXge3B]GG2xf_*>j+Mr*MT'IZ1I~:"]p/;!K!z?WM!rI]<zx.(3)3Cb]p6|̺~YQî+]/w<RlǣepEGIʢFҚ]<'\i5t'I*=!L ^UWFp||8wǀH~!ݳg@'/^L!I]]ѐT4e<D77
z0]/Y#H
A7W-qa2@XmӔxT.KF(ًU˴n,Ov`c4L;ho+|3Y^$#ZDJPMك+ M-9WS5#=Wa2+'u%>i'C434SÖu\
إ`0O݃+~\ka|z_0I6\0[=0oڭ˵>n^yJϒܴK=rSTf7p&%F}
00Wy؄6\ǏэfRވOney3N]|,÷H8('q
f<*ZCbvxR\E?1,`؊cxϋ\	/WwXhFaA-5B|؋}->O"wwUWޥsܥESiRɝ\Ӣ&DKgo[r6Pݺ+]>
>}a؇W)ݏJS 3N|7E>)^Gxm#Zc
w0])H?96tw ΀/I\a*"
*+!^\hۨ!J
*xC(ho[ }ܞ&ĿPK     A T_W  B  3   de/cardcontact/scdp/scsh3/FileNameRegexFilter.classS[OA-K
[otU4>/	kHmtݩO?`?e<3ELl3g;s''xAc.RgXy?C/z޾HPj0
ŝ4.! b.jKz-4EO&lYmޕ<bMd(1pboD~.38}%.D:^`V-8q1Se':n@
]?by?(d)Gdp7t%$Nk6lyД'd8RA#:D4+උ;<	QPq!̩ᷨAwO\eq0ۊX5F}0Q+2};&k~,+K<;>?Z=2T?A
h;F]h*}+*ǘj$[%!Y2`=CìgWtc|ӟJas'֨`J˸O93S<Y$e	RfKS!mG&J崮q[Hw*FY PK     A   j  *   de/cardcontact/scdp/scsh3/GUIShell$1.classRMo@}8q:i(%N*a**HY+N%$ā_ xG֒gf͛?Y̠QD0YȄ:n(P2C	;ᡌY9g|bBq$	J1?4"fwQq&.Pñʞ=9}qfmĈϥ!t[4WʑN'|O*31O(K#x&󯤓a՛#ai3>4V&vR$R0,r+m1xtE̛nVΡmh6*HD$N=m;BTlR"$\kqvLj|(w_h|koᾶdK`d
6*(.U$lm9o{J@+\|VX2UqpI!
Z6SE62U'PK     A Ӊ_,    +   de/cardcontact/scdp/scsh3/GUIShell$10.classSKo1MIK,)M-!K)Ҷ ٘fۍ#p/!5 qcPCRKǞό1DB=<LHK|{0=eMAR#Mh*"J!k'Beg70$=RzfY(CA<9cX@&f	6XX@V$nȉUT)4A7:%M,I11c1b?!	jl7PTɤP0U26910Ȕa8]Taǁ:_\T=6տII=i?1T\l'YLxFIR+b_E/zE/0Jc(t~[&qں%&%_J
"IfJ)⽐'HBf.Vm
N}wWfh.,t@Ugsl`:#91U[ߧu0?#|P)*`R^H.[Y URU6)S眨1
.J
=/a#f/rx-7Pק6op7PK     A TY9    +   de/cardcontact/scdp/scsh3/GUIShell$11.classSn@=mҖ;$q	2RhxثfٛJA x(Ĭ@
ZKޙٙs|fw Y@
iY6}x<Pii'1-
)&CNPu/Fȣ`hc6CrGr5pOY}{,dlc+!#	57!B(
H	5Wqakl"H@
Zsb±P&v|.Fr}EecȴC(Q_Dx_Ίz\xx1@`kѡzG<#AFa9[:R)N-P(%2,ƁN!t*vIGΞ>+OF
l(I>Qe FPUkwQ[81it`V.NӻEbcXp!{;WUKHlG~>)}Z
kϐg`gXy	/*6M"C
YKe?ͱ=MivƖA#	g%Iv4
PK     A 2  ,  *   de/cardcontact/scdp/scsh3/GUIShell$2.classTmWG~$lV*j	VQ65@jBj[;Ne7gw_96}~/꧞$JŜw<޹ǟ J
Q13-aܷLϕܔF`ZMZze
;H_"$HhH0ɷw!+
ĂśRr!°2;2HQݳk;[7v 	Qp\	p $KJdׅ,{G3sPG0mpa䕫ܪWp-K2/T	gq!Y0.L![K"w4\qUԺ.mǖ ֣vp߮7dHVKJe8◙IS&=5}Ӆkt0CqU*B9\q1l5R9bE~&*u7nh禸홭d@{bWꥼxahSka8bTs>԰h0@x0lm Kᮎ{(t@[,
.{((8+:nYV}p1&1[Z,*pvjkkCUfH]Ըo2;Å7
*so	zo2}b`Dn5Ty(PLI'=aBxK'YZ)c|F,Cu:GT{S.d{S\޳' U{zupG	q,Rs>D*I+Mrr_ڬF$X#B)WHُ)bVD9)TG8ƙp	ƺ6ϐ+M4tz	rz~Վ\=wfhcYgxBm27Xab}*O!ѫD,Q#Uc|B1Wh~ttyC蛻Aga?nj`caPK     A 䵺    *   de/cardcontact/scdp/scsh3/GUIShell$3.classRn@=8u8

--%N
)<UBUAiZ}c/+gKHG!EB3;{ΜW pwdmXrcyמ״Q{(5(TM. yE8#~̽ˡw08|C[PFF~CI&:K6.;Xĕ{ocKkzÊı{0R$ynZS8N(Ew2DY><	Ϡvakm˾У88	-VP$d,URHz B/$xeNrH%(VqPGC[}!'m%ndN<5%]^!6F\)FCUj5LE\#{i ,:GLdX!q
˙5s{[MӚ#{(e?cw2>ybK-(ۆMq]lHwL!3%~ PK     A _  &  *   de/cardcontact/scdp/scsh3/GUIShell$4.classTKSAf	䵐<A#Yb(܇1	nv	pjXXzdY, CvzzGXBCC!hbHY0g#)
ߴ6WƍׅREv*$+U?5F"гoW1KMYub:U#]T8*I(Z#mgghU#W#,iOpَ0:ut:)Ő(Y0==|^bq
f`
5彩q"uzM8twDrQq|cH鸃!"D[NYV#cD&*\Qf$&Wy^!4ZTDzm]x|&O[5ƽ9C/{1u.7]uIȊkpׄ&xh+{z5a15ߖآ
8dTL%3.ͣJn3|Umu**2瘶C:f0KJ7SK©[i#Y|[/8fl uF%j*W>X&/}|qaas?dG]2 bOR
 ז?>v+d
k#4z:)'k>[{Jĉ	1Eiy#`$<LӂyZcLPK     A K^$    *   de/cardcontact/scdp/scsh3/GUIShell$5.classSNA=SJ-K[P@b[%1ĘA)Iݱ]%S7DLP ?xgZF"l3g{ϙ?}	2H`B$REO8.ʉ]y (0Tߏo^P")K:Z7Vk*?C_=g+55	8JZdCBf֮Vgp NUaz&'71ganKYI7:z0Q*wsm
#~(Pd<pq0Ϝazŝ*mZh3G^K>JH-!Fr <qrı3jҮfl-ĐmGC-CD1yQ{BD8l(1`X,)E^Eba(d=q,bN-g܄Na%B
}u
gCMc
,^pw&GV=`3X}"h:Frv鯸qK&>"P$MChNOPƦPK     A ƼJ    *   de/cardcontact/scdp/scsh3/GUIShell$6.classTKSAf	@ A,|Ā*Rm،bKNw*҃7b,{6@@;t_,%V10[6[rSYޢW5<˕V1ɪg?{C:ADtD3nmkx;]12ticƔcSE˶}D^'TIN'@g1]f?:CH-Ypʂ=W	.ECǦXm
WppA긄!v*!Zr1uaKDtpq8e1cD2)m^YehI$sJB\UL6^.I"HH"qM bYu%fJuj$0~k;-V
ykܵ3N9҄neF6C d)B
vrK$##
M
5GmYپ Fbh/|HE4-~LxZ ˶Ys<!2ĖXT.NS㈬dhUxdm7['<ҍ
ediD1MAVNhIM!л
OAh|'nӎ9ÔUt.TVuR{`{h1eѮ֦ 1̰+sk'IE'5Thѭ}AB
CyOYaHX,
>t Kk?PK     A v  T  *   de/cardcontact/scdp/scsh3/GUIShell$7.classRn@=M­PhiiC	#񐇢
TJKEh7r&_B"-HY֒wƳ9͗>hc
>(1#\Ea*
M=<9F"Imź~ݳ	[\x>3Ԏ	H26Fvv^crւ@L4ĩ)f<}N	j7b2\!O\W`°qz{F'(ca"ng^zVή3y1!.҉
?qrTr8scuP'cĘa̺	gW<M5Y;漓p*XfV/G.SB6E[Zwރ>ya,JkX_H75%:Cށ}Qs%v.`%mng
62Yz~PK     A 6R  b  *   de/cardcontact/scdp/scsh3/GUIShell$8.classS]OQ=m˲A5AjDﷻcd{ܽ-_2#2nE|0&;3w3g'?~~61FC%ZH~ u$ieO_ǵ-Di׷lp0m0Oz,ҏc
=TdvzbUsYz^TOe弍<1>Iq`DԐ"-YFW$PiGGWsR;	dܕ:οl6`mm8:dIx(!؊̵~!+??g/syK+pI	-ʸa
$T:j}2/nԨeh(Xo	W٧<KRO|7iJ)Vy lxW9aeͯ?5lKe*,`ȣb~"}fg 	gnJO8#v;XMFcVq}t
,6rI~~PK     A R(    *   de/cardcontact/scdp/scsh3/GUIShell$9.classSn@=['u.5iʵ5%q/*AB+Wű/G~	>Bn
xH̜3;; ch:
e|x<8ʸ9%<r^=DZ Hw%G@a싐a=g~
x0s4;vfCIe<2K
L\Q70)Iū2Ji3Up7u2pw'P᾿gnt,2/
o(P0U5*n1ȕa
"q"O_c2_!7kM= _E&-wgyBpZGTN'xHmy5Jl?8t
lbA7^XT(4;Sz10D4)VL0܅f?کNy܃%H/ް7F`5B{YDლK"4pʾFrMLNK4@	QK/Q-z^<6NZpT4SPK     A (V:  }{  (   de/cardcontact/scdp/scsh3/GUIShell.class=xTU7o<ZB:H(BLh	%(d2I&3qfBs
.6uWQDbʿvwu׾m͛c{s=ޗ}}T&p:H4p1^\5,6fB,"/e7pC7<d`D¡+['4d&0X_Pl7LBR=`= ݢFd}%` E9r`HI
g@wbhY%B,;[D0{WKNKCJ=xRr
Na%BMG0F%j"^eATLjcs"~Bdy 3:٤ƌ5t[j0:ªWKgJ(O0`2lli:9a( 0]ubTK3*fKrd&fgE܉@5yhHwo]C-
X@-}|A7
&:T:dRVP[8TjFc)S-7ZMi
9Wbq-UސqXm@-A_ Tw'Шz?hlxh:%oG!?w9U-8	
7
-Nr`*ա$XtX`zQcU@ 4NQy)0쎥i1d@b(N|DTͅWGDn2`3lA`7"ʮ):ŀpT@di$UpLN;݀3T?$Bgp6k1
9׀|i_s}uX5\`oBh5:\Lڅ@~_,\e\W W4\Qvezgԕ\@Rʀ)p-@>--1{ɀCj93z"Ip'zD bzMnFʒxH~yw22yx1rnۉK`0&CpvN#{zWBM%ar[wSĿ5zIj9BJ"
ŢO"E1˂5KZ(2y&>p?A-Jjy.(8r#>AXKjQJGhl#W W/]RM3qx9E	nxʜV1ʰϢWt_	\uŚr7<g}ice^-&§x y3[Bjk:RN0Y
o Qrː=i&T5X+ÿ@uYREUQR+T%χ8c#MT7
>E5{+T3:t8J٣X:|i+zEHſ6EDc9yI\ǆ$}~e-uz6ԲRIl/+
kkz2v9Ru}'-(2^R7C%Fc聃ndNў$4B`iVis1ħe~hU!֍yte0uGŚX-%$&h3+*桉Fo#F>qwˬ:bR4R;/kmF^蝰Ѷ/OոjD3I)volщ֑T˼5f 
fCPy5B//iu2Efa(vH07F*
G[ЭhtdR9'0`cXiʔ]rh}BVbq
$a0L^9eǡLmAg
Ҭ)H*iN2G}.d(pLBxnVkYQ3hMc3	qlWI5v,=+B֖p$/V\b.( ̍-7| y5j-I,R6UE:;`
eOpJ1֤b
`KEA!
h`
VMi=oAQ
dp 
@U6
$)L5<{X-;{D#Y-	k­-P=I%Z5XsKKБ+p$`
]bp#$lbNpҒG-=Fوp,nDc
!4I:1QdЭxXLql&uFvjwov*;daZ%	yiJ4`g,M雱MgY1΁iE+tvAzp"e
jdtK	]fep%aE
J]ŮFAC9a0.v9bp-
LK]Z{v#I[n;TeoCnvȍsq}Lu`{(k-t`kV}+.}L :¹\iʅh
GpDwv֣C5@ڬ4f@;M!#iYt$dmk72U\#OJb)J'i!]o%eG?i3\$>t	П
4ꍀtt3r6Vo2fϰ
RB9d$4ffWk\Ȉ"Kɬ8Һ'A쭨t[ԑRK{`bQք88TQ7e#Y0@U
W/@}80<B2/Iޟ&þ69}J8-
t5wiVԔN~`?R^	
׷1n
էl	7Ng?jt_)irn$;tΑ3e><@5nZvҹo&[x76aAfR^a	 V{{HL-Ug<'}vs*$aH=| Y05eA4lNC>:Qܑw\B(R?zW	n3%3Ԕg2Gқڈ:n^Ъ8OtLţ@'?u>,DtdC5@SK̵֨YIA:cUsyO38(o**֤݊zq_h
ȴs|>\h(BJK'G"%<u\k\|dԚKQXps=/GsDyՌ	*\
e)0'+u^{dNv<|5_l7?	y@1&n9ѨC>7QUGt7G]˵̓꤁Lڴ<tdpyx3n~#<miQ<!xLVoh-\7|}Q)
xL.84N\_Trię?KEyă*Rs~.u%V(?ۨ6˪Dq"/$RHb_/,ol2ņn~9$s"#]eU&:?c7,|bo۝ {SX`r[(#fZ+c7/x"~GRf4
u࿧ή9OUwO
Agae6 }(
~z>olU dNFgJ0g<{q)hXSꁖn>3;wKNd^s=A6#|e'@	?~.*	'k
hO)bap h63#!U!	km=?hhUTdX_D)
2[8S3p_I-Q2eHU^l/iH}b:
K[4a2jf
H)i)OtG3_(
~a(IYfQЈ[Hj>1t2#U}n/(eV-Hl2\]jjt#V$'=?GJ%N=7)+|%ͤD.`4f:4#u[:'%nXE0MɌVtCy:Q݂{2>1!ܢvܗ%-м7n2TAteiN$tB襋ކ&d8	ԡ'/ƚ
EC,q~YYCf16ZAZR C&fs#'J?n1=
-ͦ+I>zp1BGbE7`RϑLYMV5.vE!
h;0/0s?B	
-4DNZLapvr#/vAAӺ9=b)*Yql4fJ:]I5i#TYɭ LCRB\[ױGtVk2GVetv.z2v*7|JzT
-)V/4D2h[ǀ͢n^h:)+Í-LK
,aWͪKuQ2Шf+:WB8A:m%ЎZCLz|-@=)IHc	
!d=Lt(ZTRv8Qq-a}
A:b6NO8"f2[(e #E.X/67+*,D˪rȨd[!Z8]%Ӧe;bSu]畒d͂7IN?&T*X&)G>)(tS>eq!N#,K]@΍Ķdř!E3؍q8W|4pae 7@_RF
`ņDyX>e+v]\iiPyzXM$h2I:8ugn*]qcFCܔQl[ĭٗ\De	t03cxwߛ)фu"Cm?)DPa_k"d^&q!M$3Fq!{LغOpEbc<bh' ]]+=7<!CxX<)7"bFV 1_UVA4!NJGy1)ykG'$
iPVOzq@,3t!+1HųDTB,CHQ뜯<\^E5ī @ (%2²_YZw4E
C$9b,*w4x(J	@l/4mNVzCuFc:\o[GHۿNYѤzCX|O
<2HĻ%J(#ꎧ[|RUTEΗ%?#;C|/kkňsKIa\&l4K|
Fh%Y'.ѨF8HA	1Pt8Op)ǹJ@TeeHbmX$͐FH,Fu!Y'qp?Q#= TH H}uϐ dCB
(O҅Q3]H:G1~aȁ֬bȡrԪчi.r!GPJMP@$fK#
9(ϊ>.c'R27Ll<r1%ytq|!d1Z"{~%yV3S2_L/io
l&AK7Bd'r@S`v^MXRuS!\mZ?u!gRҎ:P{:T9ې*/Ilu973s@ܺ{nq:rr\@оJq*3c+8YɀB	v}].1R<QHq	HuYmA]Rւm+
J6nY|H	M$^ky<rѽyr!OLT!t⫓uPȿiޖ9)=5#Gw_&%VK&
$"$H[)쒝\,Qp!%qWwԡɗ.Æl'Ct5٥ }$9Րf7{`l-ryv);J7<&e[	gnCy!Ϧڦ@}j5k 7	[0n]dȋFk=lE^j$7ʂO8
T	WP*2OՠHoW*C^M -a' 4csY^nUue]4uz3ʘaｯqfɺ%wGțv]VjV,\[Pi 1 ]wN 9Tvy!O	(uX'
{Mn'U	>?{i|ؑHLu!Tcn?wrOF!57	*I[>2kFQG.6#2n>J'54|,qE	q3	S< 1q1#	V(WaCE>kPNjRȼyzސ/QgH
/eOT9'
:ɝ+W
C ƣwh䛆|KpkIxǐ8ŌhhI_tOhsښ1m>姝ֺJ*ty=M_Zuu]U_9U]~݅O~ɸ˗[QVC7tʄ[hyc|g:J:ͦŭuHy=X)	лU)cM:F3(P~Ǚ3ISmZ-WLHMuXmQ(W]swM6sؠ.LsOi"amwY:S`3y7Skb}[C&tGc5C9noAF~Ĉg;SĄ]q-hБ(NB(mՖZg%A	>ť^1ݺ]8NPEB(iHt_&{#
H3-!4>]偺8Aܿl6"ᖺԯ7-4PбSЏkmhE1qt  #U[ы0bRMG$ԵHO_F3)Iu#159fEo_bVW?wΊ!ϙNR!M*wu5,b]j8ahT<T-d]T:ԑ1GaӚN&UGd\tu	7ч.<zTE^i6sC,)	Ue=#ZǼcQ;hyNv)+m3Wu+-Q
6k@
NV](ٯf0cEC$!:l jqI%h;>3Y\n}J3J)όHU"c,k[:g*=yKIlm ,ZZ܃BH$q1ͻ.y1YG>r%ѰƚQv/+H!w7뭹56F`#KoYV
12O/?w¸q&0>qtk5us\0wr7%7oӦM=&嚉S[RG R2mU$msi"";I11)^qS9.Ag% FKp)1̤;F(~
Xw;sY.}ӥ]ѮҮֵk[6]b5,R}^еNju47k7TGGRrs2tH9E7FcFe"?kY7`}uWTfgn\"?_T8J~;opw?O9ޟ8ޟQ;Pm=*s* UއZpH<We!rU?**n3XyV*YeU.j\i<'X
<"Y~a
3l<ΧnZp=*U<]tzAèI>CTerE{U_W,QA_#r0L  X>s
X:tӗ~`F?#g4O1I3~Jg̥rYH?bYF?5~ڂ8
k;  Xŷֽ:o){a\.|5,w+Bw(z$ln	z6F0Ncp4#p&2YP[΁%p.Ɲ@no3np.Y/Y.Qbp/[J\㶶>vx	WwP>Oe?sj#+n#?bm:Zۦ˂2
\qcAAvao;<0]e?Ggެp&?ﳆ
}%r׳v/"Kq[AvtW@Y4|Z?`mLS;sh#nP3} C#ܚ >b&(_,WF[X
I_p[~J&Sm叹J&j[X7<β"1 \DVX/K)wޣ1Vk4I4 5 ktOupuc%*ܠwBĚ=	nCb
:X֫eBlq֏ʂ8;
aFTQma`D66~qsM-9lzbw66
l%Ycy蟰2j
"qQlk#Co\C Ȏl!0
,PF@+ǍBMlژIH&u<HФeinbXuz& ͺ,	AD
.Mzl fuMjCn>ͳ3 TuxjHNTOTVĳH=$I3^٤PX622R%le>,cjI	V8k[X'Xڋ+iPVƚ؏Pc(bq\
l9c+`[mn6~	`wl6 LAjkE;lV!+;)鹃56JDs䠼b^`:;tl٩MGn;u0c
t÷qͶsPϱ|jLGp"DB6C.A1Lv6sSA/[AUX0Vq6DdL&]g
q}|M9+ו0]|5Lb*WIC
0:kшd
dӱ2g7"AJlm~حmЗsw:{uyFkTPe	||M:SYO*ڶ	8~ ݸ"?
k:=;7x
QxQx
7 2@{lEHv[YL@L2"k,Nh<g&tx1z	1ze
kXMMjb.aZW{|ȄH"M~&va/c10j{Myzm}
F`M\[
ކ;0{'++q-mVJ,W 2zgU>-adOQ}AwQJTo{z`?!ƹ/^WboL?
6lS륔
{E+W{]i)At;8m|{)sUs㹇w9Ͷ!qu cp	Ss!`0e+,qI`FRMTu~z灎tr>__A 8rW߱_w[,v iTÇMC<[xHsA9hu⚇#Xĵ*yeV"96-E L[J59ķq)p)MV|:R@\f".:*<>QK[Yg1J[	-bMSЎiƞq@%"P,|qEsQ& c?7c"0ײs!!dBG~ɛS!DGې/>g-?{mC&.&^iωfq*0*Og(bCZ(d16~9@Fۘ]֘/< E /i*cx
Gr}qxca#:@
k7vx~+PHA7-(
<%^~FS&ִۅ݅F z-V%ֵq[ޓ+ޫk)5zln!B[v nHc-u&-vX_oݲ@dr߲t #>'}A}UR8(#5)(R@Y&5(bŚL(MkQQQ<q
IB@E
@2Q\&Rg[(-KRQYdv8K6Ȟt5KM;\oc.=˞kpU,uBp,"Xx #b/#8 a&ZDhSov(㱝0I0w<`U)^Xeo̶cr$-XX<,a˳u4ǝlZe*[rUnV*Z)VyN*oҦUѶ9Xyچ]p݁ZΦ]pfJyfeP_9V8[lWNSw]0_.w|n)4l-sƉY[̆X-XϦlXJV."UlfǋlXD-5Ebb-$ع.
!vD[D=Bv='+bg;	f̭;zi}ިz::=8z"7sG%%z\M;oAK`Xw0v0@P9=~kzG}tWx0ډO/xBq) a^^a@Lax `xj#pxQAx¶u qC7Z4Zm(g9=N;'OjXZQ*vJPf8&>Ra;>:@},%%J]Ԋ@-^e#^c`xrYZBO\JZk)9SozrεZΣ[@Z|'[IVZ{da->@?r<%ABf
Blk,	wMoWH![|ķ@S;cgVp<w(ZPjzw?^Y0vϹqAA$_˃C2%L5e`m8$Q0άS+Џ߹ь)@!q1=8}ŴJQfC7e ؖn-XUT7Be9UE(_v)
m;My*TrNM[?$߅E}qQO>y[~T"e.d0HDd<^{̓c1-
Yl\J6٫[TӡLO\Q;aIJ<KqEz`vWq1h'ƍQU^%qSUPQoHIqAN<0\΂b9-+YyDη{ki	23,a<{=-WAQ їzeAFs5lw\Ӎ~
<X= z(juUF>r
	0DEQ9\Mh0(}t1Z+Zv}wDJc1;(d\תbvmls
}n͂]pէ\\qXI߫xTX6[|/GTGUU%by@5#V	`qo
eR}vZ5SAQv[JqF$'[\fyt	@hy2(P+F7`A\y6lg,Pr
bK^e!/'vx^^ki:'F0Kh"&td"4.VpV*.F%8dݨm黶|2;blp
8x?GCGF_t#ͪrvEaC.gˁ)X8w)Z_At)ڍ0|b}'M)ڮoӨ:ځ6qiUao璣-hPދ>ȕ0'0Q4 }P);lYDX
4`6tejӴcJq$p78QPJT~Dt7b8j7!s`(#,ֈb6SgziٖT pG"񚽥v6GNs|te|x~q-;
q񻤎T!|
upjjI!XfY G`'n0R~=ʆ=3y6ɠr4s_9b\L+5Sx)J큫MF
9-#W+s, _5:ۚkSg"f4*w$rƸ6
if8rc[muY6.Ҏ`!D'n<k]X|Ui'@kGUjUI%UV(՛JQco7.J3668Ȇ[[
VL[n9ƖZ;}v!~a5Mo{JtFe8rtP;{]Vcc3W´8Jma>Z8.v@U[[P8M}iD;mz:=Z-͂xwYVQÀo,~?>4i9yIŏ|#{?88./-gLFlFf6Fj[avF%Yy!
Gqdyҋt<kw#BvtI;<9"O9oWg+,B7bI
Vfl;XQ~v%]
+PBs5k`fkע+i>)\o*6k~+P)P
}@h(Cg|%.^3ޝ&
zjgPND*z79}w
:6^zl(G|7G{׫vԻg韵_+>W>=k#U)Z#1>&̠Fzv|zp*.MOY;6a=TeQKx;d/.s
:69h\GaT{:PВr3˱]]|Z\v9SWNr~|WK_i
XWBۃC*r[rU0!%v#vTfv	yH-6:ڃP=KGF{NҞ v kg4Y8O{.՞p"^k{!
xL'<	ނ7c=^{1S&KlcG
>gyDM*o*[V}ǚfv#;OI_%@h
p2i5\_4hX|
⤫ۉۆKTTdl5z"uf-d6
Ya
 uߞ?Bw.BMҡYKeʾx9]%~7[|1L{9.헾ʱOc㲁*xgQS;.
z\r(y.仲`m9zQZXk9QD'4!nD?[@eA\f?RGFr'|~h<S5<OP]ؐ/>N46e/L:*@k (05fAk8THGRj\nq0s*qLspRJji͈rXȱ9AIE|gvțj͋QB+mS6y^y	wv?scJTVKj M,&(s|]E*$IP*r\LX>lhrhvͅy pkPGRDMQM"Z+Fq6qBya([3-hOU ] 7QE'.zEq\͋
{tS,nU4q.?ܭ'
<#,	W\`k5Zp<sIupf|0U#752WpZWNp5#qCPjMY7)Jmo9NHST˹t.4AF bWf)Ri
QȐV$,hOW.ڙX,y/fռOa-YJvDl{=_^~/TK}QbxBp.?>*rUl6K*,ڍ0PK     A 6E  S  (   de/cardcontact/scdp/scsh3/JSFilter.classRn0=nӦMӮ+Vƀ`H 
!M\TnCڝxM"Qx]Mx(4]+>_ xG
(ڰ\PfXy^AFޑ`ǩPKB1HNwAU\x260d#t>eoC>zOcN¾V堅K6\,t_ Eqb`W\\5_'P<\'7.nCEDaFbd6~dۦN(0#AP6Vk;DsCɡPEk|ϕ4|#2OEA Msy7Qe%ob$$1NPI.Or;
fq
6gV
`"y?ߡ&EFVw2pzK;Sdڌ 2gSJSOqumLжhx*=fENoH:ֱA*Mzhbk˹r6s2PK     A Q֝  $  *   de/cardcontact/scdp/scsh3/Launcher$1.classR]OA=Sn[| ~J\`0YtvBdfʳ?	 ~δLa޹{9g ED3!j3ęLי(&Fd$c%Ru;M
=DqƋ8r03\%VB C1D _RXR~~`l2M![헙dh{@>(3V
^rXuGfظ^#WHZaˉ<bg)~9B~̝_WIFw(JC	u'	?4F:C?IϚ4_pc!
P"w Ez?B_s)*ݗ`ݭKh,"%೚&yxDO(jX7<k8LYXU<5<ź+^ PK     A Eju     (   de/cardcontact/scdp/scsh3/Launcher.classY{`T<a 4$V!MB$x$C&sǙ	]mU_hlIWv[Uju}؇E߹N2u_yy?"PbPI[mp4Wʨs.ƣe'#̋=V2VO>I'V}5鷓$v<-zt՗t۱XPn0d(fҝvIG:;5#V>ft̺HUS1M`RQ7ј=J͉̓|a'e'Cb%p\(
f
!Dɪא*ڌ^cOQuL֠ݰqz;4T$vBGx[I{^ a1
(eZt3W9x_cj--?wR ҘV2na'9JX=vxT}M$ӫ'p .q4aXQVYPNJMN 9+	Xm-*Ɂڬb(vA	~"VMLu3@Z5(¥뱁gE"jZ)
:/{χ SAtSIg8e/^X/
xw7+y]tcҶB2؂A
K:Cu^0W1Gwl^0VVE	84BHicB?Ue1[sMH\hJBYk#
4Bc#ѴHÂWB1Ja6uH4]'#$~T;ѾTO2H/6qy[iO-T8b 0ڲ=:XuO7RhL	;	Fmr8+!
7&WBDiP:-jbwDrO܆ot85R縈.;Aa;vLsQVFx0Uwpp`8LK1+N;xcnUM$NF
c
6ߎٽOI/P_mf9vbpugyBA1B=xP
[
oJA,.#Y){^/l#;VS=eU_1*%f	O!q"V':h	mE=CI-ِ8޶Y!ekkrXW4Hv )X99LekolSUNw{mD{EU/)XTk(
ZʑRN<c4V6
Z4z\i]	%m{W1[肚;pⶦB!
	,8z?o,c,\z?
knxi{ӚuW7++?4~RoƐR7*ƿbLsa!UռrsgӺ.wgXN-t-mx^9W575wwY.t4r8S^2fׅ.W	N+IGo~Y<i:lF:JJɽg{Sk+SnKQd>Tg^9>Ak^eG@"FȾ3
$F&)խzgA#U@N0r0u)Fhj&DqZ*TTX1^adb< Khd9rj55{C4G\϶SN4r|݌ۨߒyFNQLAȩ$h*KQѪ,-
L+Dw[RgdڨD@HaL{vySctf/*l#ȹCV,u|#KDokL \hd9h*hrFYɸjO_NYyŝd&i_%tꃰ{ՏiO,|IWҨO%ndtxllH}Xn4͔uF:K*ZբE 廙Ҥg,{F.P-)'6;tz&#WfJe
2ER]1bl+mf0 |Z~WgO2
_KQ(J< \W}'"6(唑frJQƦ~nd`1|a6})|e
n]WU,Ѷ؟`F%>BG?0Mv]vJ㓬'e>-t

Ԅ4`U^7eI$?*'G4Q/i	lrHH1f#$͢~?h=j@2gJ}RKNG-?tN:AIGV:iڣ,P'	/SrN%DBN8bEZTR5Bs\,-ߎ144g-,Z^rSYŊJjS6[}`KI+fH*(
IL$φ9y> /h~?h|̫,?>|@>bvj~%
$!vH//P&hbN*2-qXSJT@^bX
ߘ'q2"ɐC?Rp\Nwto㍸b;ǹ8d~b(;OYMT=0&^VJr
K%84+xcfbNZIїk:[~WԞ0yu{f"rz9bj2rjclWMga3a\=N|.uv*=ytW(*UJIT-ɠ Veohd(A\]:Ͽ͍ܨ6qA"] ^(TSuU2N
;	}\OD$>.;*ُ*BWx_Y.9>㊗痖$Z~_Op=ٗs/1_"/wW}e CL+N2K/wo%n#WoPkC;:f	Gq.h%}5Z
|dcvNe':s/[t8Ca%2W3,8C Ђa\kk	yRqo6܏;0x½
39WHV`D\Gǣr3]x\^'xJK_y" X93=4ݲ_>)0*b<,I~Bbr(O~p'%o~?vgڪ3I?%'mnw]=L\pg;>P8͘ʘ'gP\|2gkXoTo
XP>%wRH>CSK>{&DcF o}	Ld9UA	ui+^6cIf5f"#^Y@-Ų;Er.yFN=CIqFNHEK@?)̏pCESQ@*w]eMUˀ%8W|A(Z:ټØGh >7PM(Ѽbj_yQoRnY&#jiSe(W|7>ٜ,8}7f[9(M4[sFVqUܼ[#Қ6!K.<aNEF.Hw{m>WU5ec~KG=Q?HqKtr))V)v	{`3ڧY@FϤ
dMu!3G-:AZb<Dcΐݴrjw){a^-ZaT4t%yvQA뮩KpQ5zCH!ez]s$]82gtَB}kik(Ss,݋܎b*t]Am3YDHB^2ӥsSHjdUNP;*A-umN'T&0R[%+nOq=-_tH!_+PK     A S  2  (   de/cardcontact/scdp/scsh3/Observer.classVkWW7W|5Z1*bWHRZAL:3AV@]*~3ãj>ܹss_!BЀF%3onpl_7g*sUlS2X(&@=c3Eӥ_wgL_ U|Ygz4~EC+*y{nJ %X>S61t;c;~f\6KLWm÷;8
ipܙlz^ykU #0HrkV/C،e&xGTth8@g-UiKݥ':-nd,ӧfVKB	%:qR[[dNOi"'GV	Q+p.\xZC	iשP#M5Kb8yCQ<f*G.vCbk<$־e}_hU
#ݿoyn<]
R=pkn{h})$MD-ڦ(k(!('r`ZULw\j)a;]K>G?kQb\4y[5|N.ʒ20FkƨJʫK[Tab)p/1J4?W"
%ì}
-#71lU)wĮbld-hE6؅J8T]$浌XpgRʈ:%/l.
E&T<KWEk#ؽXTX>܈زy3*(Ry60ۥugZql8fbKa6ปS~O슪gw61د8<FC;G~@Q;~pͧ
DxU?plKRЋ&S>ilj>wTu҅M[&5HFG^ ڻop첒VZ\+t,TwZ}ie  SBM( 8asgPd·@|FD0{@<{]|&<DW}I15޾ِ48g&ݡ"D@$LvF$ 0K/P?Kܔ۶(RZI+{IB9hkWrwJk\[j|7V?l 󌼌}X@&Bvga,X*u짟@yz }ĹSГ`Omy;|PK     A 1,+  F  ,   de/cardcontact/scdp/scsh3/OptionDialog.classX	|&Y,	7n U+TbH %44dwlvDjKZm(╍5*TjGa솀Xf=`@5tPᨈY6]GzHvWǎZ:
Oƣ"3jc]]0;f;[D49LEk ~iƣJHVamPEkceLƸpD.#bkfPb1;^S!x+Mɍ^ZDqV#ٛ0Ch\NuLTZ8¶5L
3uY
ŹFuvvE!hܦGh
!,+M TstYL)
*Z5ǽ2f<@q,(	t|'pKJhbdtvDϦPֈOlf#n4|dXXh46[v ' $v¤,.I7:̈́^ӰTG=>P+m%6+aK{Nsy5HeXPDӜSC`ơI
tbfs#w4|a8XF-jb)h#WX	Kv6ejBEv=VdG%YO/Kzmۊq:EI?8-&:8gm8 ]?L!8C(!&ԨۈGd1R.6FMey
ΥT抑&nꭲ,OeX^"FlҰYPVֹɅE-4"<s	
ˏ,t1k:
agʏ~Og04\8|wn-6p.DaBhHP=>gkD:o%di$j1 !Z5VaZ73#
=,z3zqLg	iqB#31[`VV$>C(tIژ4͛'¾Fvg֏U^j$m?nam`npG9g`$i	;&jw$jC|XK&7"G|7Du܃~ilg)}eWWxx
}#/BD}:p
2K:5Ia#{𨎟i4YM^䱼VVWh6t0䉣OАUeR P.>Y/5ѡq+y/W<=nV4Y'X$~ÐpW%/Aژn~>p "^[jLPԧq~CǛx][ܞblH0KØ-P<Kh<?OgT>b5\*cWV2bɃ$Z=	(ƏZ/|Vtlj>_cҸ-'6&)j=s)"4PL}UB\<#sB]i"o[.*Rr3Daa4{<j}N(iɽLv+aPXʷ7鳻;xx]7;,#(A8811iXv
Y:&[dxꙺ4G
E!#PYI'GP> ֛H3VEH ٶLtXnQ8 ;O>
߻}DV76]sJ7Ox0IRpk
oayraq<ܜ7/Λo<&7h)*@>le5 uP*r&Gs4ݥSJQ*,Fy"ܼG*U?ʹ(ĸ Ǥ{0*i`vId;(y4cJ՜ >A,lĉm% 
s}e>bI
'[/A4TA)	Xz6w/P\?~Iv%6(kI!~5~a-\--iש  |&y*=0]OF&Mѧq&nGM6{ыECelUssz!5<qz#'jG}
5^M?+TG}|q4
ykjhS05!e8wC
{O&Df䕩r//ڪpQ?..el|7X&#CܖrƱHqKe8;Npwd|5IMV>T񔺂
y]eU?;A;;Mn%dJԩbv܆IGb;V{Cu5b`̈́Ly'	0n݆R	tg?C_6Y4A͗ˋ?L ~`ކl,hƺg{bVYD?bÍmW5cMjŜ0f$<d<gV%~> cR)87wBsSx5םr%ȫc=#J2jȶeG~gmGXl6ǀ^Q'
Ob
b?͔i,shzLVSb?Wij:*fpGH
Uj*sPQaPa1N`WClМH1&;7?6cZsBO
vfn_%Qp=I~zab޿v9s)*KSJTAvC`/rN	Ke
fUT5԰n
d]}5mJx7+-vdb:ZRI3gqBUzYR-Y#H;2IXL~T9PK     A )-Z    -   de/cardcontact/scdp/scsh3/OutlineNode$1.classT]OA=KʇZ]>VDC/I,v2Kvg	LD(i	D!Mf9?Ͽx9߆` !?	X*?P^4Uo+S|3yiaȏJI+{RUu!9](AKD;pttXGDGecVˣ[6n;$Ca?ȗMokohBa/Wvs3\OfJ8o2bXw.<ࡍY]0*dԤ>-)^#S^d@Uvm{I9/_ybL:dcX?a6	Z%RJoJ+U:mє'doY
3us˺8Va|?dD,?u\w(=OD*ocUmzWՏ߿UuC<U|85)yiSU*	BA_t0Et?- ጻs۰ݥ6ƈ{/F3O U P1T.$ͬ32)ԀM#Oc+_KHx~%T7%\gަ&2F͌_PK     A wXa    -   de/cardcontact/scdp/scsh3/OutlineNode$2.classT]O@=KE]d|T5MHݒ2C)!+V|5w%ds;=xCzmX0r/0B <)mzۙ#dK+~\JTDwŪ\r34=hFq0sco7W,7Y"8(`-!?a`<qƄI
žhx< o"5re/)L۸>f:Tp1+{]!fm<rO#Dũxk[wZeU>dB1OõW1H	n
;Rp'R2=?mT3J*e(TvU7C~GfI7"pYA,H46j
VFҍL*sd\I;QA)oU~ǀ>USڑu)K7S^é	OSbd%XqZP{OMDxJ8O}B]lvZt'ob8e)ES$ےuwO=;] xp6o$"QBۡ-,On
XҰPK     A >cMN    -   de/cardcontact/scdp/scsh3/OutlineNode$3.classS]OA=c+eBoď"*>Ԑ"B"/>e;iLglcW&EoƻSu{Ι3wf<29d=\bQhZV6lG
qg-No/1BY6Z["ՇbҵF=Q`ȧ#da,^k	0KYz Y$9LyF@l|<JuLcWr3,e|ZѠdX>wѵnVsnc0axWM*m}%V8h$6ܓ7.I^'Jun͜ר6Ǔt8(g~Pڎ-P^툶
mb1b(D|SSմ#幊j7薇USf"+z;8J]vՇB0Hqdā
6gkq)UM콽ulnt{/fCqcܡ2	F9S,LotNУG>)g)KG`rxe#	|Eύg +SZT2S`}hcpD|#+Oɖ~f;l+x*x	PK     A )  >  -   de/cardcontact/scdp/scsh3/OutlineNode$4.classSn@=ۄ8\4qC-HxTymUݭuWH-H<|bvKUTvƳ̙;X/`	YcX?8PR@I0>#nB)vX4:RHX]wQ0B%CWE:be>q?rE@
kL5,+.BMn{gn7p-q[JmJ)"E]|i
c>"_9C^2d{v0	#*ѐǡi0ht4A8\13q*ƁMu4FJB9z.<$tD-f8jU<QE7	 ߣ'ݝw?ƴпmsYgwDߪݒRĽ'HP%/.* c> yzd	>}EQgxHk|6,L{t(b111*d/~hY)xbhڿ*ZhHO-PK     A *P  ?  -   de/cardcontact/scdp/scsh3/OutlineNode$5.classS[oA e-zZ}01/F#(
/>aL;KLI ԦJd;{-g~Sl簂K0lh+Ox{)j,j;9kRDݥTm+"g\^QಋUJ3>^̈́O2zcCk.*Rr:GfgvqMpڔ)"ż:{n:P9}"%T$1dHw`]LF"?MV*C3AX.AmM#u<%!?PID,6MS-8S5v,M%?BwU;PGArD(8^jt{{qJE_}#:!cJ[^ JU9t{d=3o:kN4"tf(['56x5)oÞ&XN%˛UG4Y&ZScf~~PK     A ΋    -   de/cardcontact/scdp/scsh3/OutlineNode$6.classRn@=:I
qSR Ix "U^x@{raw]R| uZ.j3g̞?}PtPrq3+C0a4&G$i$ʻ<i%|wןb9lQcy.*NcnF@motةy\1x'pm籌bկy]\ez`ɘh3/<v*CLJ>Ha?;%jU,uHVҐ'}bKfkVpF;^<dҋ*t^PŖ;`[^^0I5VQ9XfX>SE+hZZ&Cá{ UC'݋U<6~(tN:
y'fn W.yj
BuXspϳ
a/_5iοWിbs\ ;C4`)nRX$+x[ʭ{FqĶ掸8YSn;Vigy~PK     A P~    -   de/cardcontact/scdp/scsh3/OutlineNode$7.classSMo@}8I
ISm&)B*Q
-"U.Y%u]7?5Z>ZՒgv߾y3;5AA9	+"276zLL(
dmPaR:c#v=>PC-[pQDiJ3"AឥV	.;ࢌ
b^(KOl+9]\e?5\?
C1ѩ>a~JFUB(D)YA?_x!F۳d/bN䋰'`ΌMht
J$l(B%/X9ƿoKZ)?4JQ4pLX>SF+Mz|Dao	{Nh/`ȳɴYTIvKH\ؐ<4B)CX	tALb`Ƀ᷌k,\= 5i~862k+iobbʩ0Z+qfJ69}}:Nr2oN.)RC3x~~PK     A N+  27  +   de/cardcontact/scdp/scsh3/OutlineNode.classZ	xT~Ldr !`KH$Q	D jI203gT֥V(n*"IJmjk[ٽVknwы~ΜL&d<Of~?gXB<
n]==H$X-#ýf}
nkn3B&!p4lGȫP /
4tB'Tt`#YuGI3kb
ƍ(ߒӎF3^G	>cWo0!2h*1h`݌]dS0P`
Fc>Q4DE;i#p<a1CLbCHGPڒey
b&AeUy(-_F"FGy0Qޙp,CiU#2v1Ѕq77XPjPa:fCFI&]MFh|!Zǔʖ1q8-i,?kD /Du3r]im!?VYHXc	fYXFW7Wm6h9	̦)Pq9j$vFt| Sn'6Rحфoi/ޒNYȍ([6/V1dbt͛06;3UfLZDJU4se.}k	XC_mv'vW[.4fYz/~0q+a05!%%8%'Q	ڡdE}ֵ6:4ۍD4i^2|P4[cɄ1H4;qw6!ia0-z`4%'hFC>fVVQhwc#nt	xS7U>S6T+eCr6h7>lӆ^\N(bl2"¼̞Qd1<_h!a+[VбɊ3#B"xqCȷʮ<kqa')tMA@Gu\xȋ,Du܄Yaf.3%F
cq65⼩dxܴEsp;p7awvF;w*8Ofd|^ʆͰJa8#h	SһuhTI@cmU*
O><OQ?	rGR!NQٖw֟ߦz+/x(AUޓL.Yn5(>1|3\4"\Kh]I2z%sx]S0:,0=,MՍwpvub:7zb;
Ol3|8>1R?!i$Ӝ_G@nM0T1v1Ѥ2ץIc%8Vf闳䦪
^|͟P[˃_UY,b{:O/aG9}' "9Y|x	/h6G~wY%gayL!q?ďVܩn暑
Yw[VgcV^:7}x02[8:gz!,("zcDW~3%>7je=ǿIlHSl-㿥)q'{yyl<G?.\]k;G(A"\^t&Ⱥ[,=J+>#mE^B[a\3؛1qN,*r@@3"hhmStn0㦗&pބn$*UXCN3z
tPvi@6
c׸3@uA3-.[5*g7md4K#"%OI<v*hh]c9%Tg_HTS
2df,u12Xh!-tΐ)\)`$Y:-K=kt6ih	5Hvst:Yw/Ϙ*g%Ye0#Ufg繏hF:<9vڮ28NN'ӽZq<hѩ5`ȻV6HHw'5e6Rr6vF:hŴA:]"[bd=`z=<P Y-Svc547nL8XT]Jyш3Pܞ앃D4NUsRq	8m4<?3G\  	ٳFKa!IILɞF|u\!+ଇn;/L$lj<2uϘ8K;0ҖUo\8UL"ǒu	ƻXYdZ)wuc
 kl+@ǵglo
Y$ѿNS
-qa^`hBtWڋ%R\fEN9Ǆj%=;oNNVLFr:elN橓
mԹ%g(ѝYc95(JN:< Ug;|'1ӺZθK
W#+&}*?x"ԡo/vƆZY
YwoPZQ硌S
op!1֘E`OalⱞѷevqgV7ˉpeа<L<C5S,b;9K\nʉy`6/X.Ur sNH^0
Úm԰
GOd\5ѺgŮKnn9H!%;hר|
5w$K0U}Cgi􄹵Mx.r<k0u(u2RQ]B^!l勬͈w=Am:0x#{ǒ*,8-5F3\Wpf0Hx'iʩ(~棟/4t}b_njW&ܛBy#6mO>?ٸ~woUI46%j*rU߰sO3(H!v.c1	D ~[Ο!P'{7SLj޹"j:
:((>~"9 0˙[i~[4)$"Qowy%O8գִyylwÌڒg ,e\Y
`+`ݹpw?(GnfFQPiq8%|
dRRI@;h'.W<;vn#<@t_Yw%]e_o~
Z&ixv6/U4L`zL2W)r>b96fF]sC}8qpcpӏVvchPڏu
|u݇MՇ˟B=}>?dW=}rЩcnb{܂Rʘ'n{ؽE+c# >$ )/kmhbK]}<zz7sF7@&эd &G'p
$p -x/}\i~yn~)}_<y&&(RQ:8M~Ex(Ê⼒s;Ncx<C'k~
qяN<8cN0ϱIN!ۼx'|	3
H-~v@0Gus6LK0[6	yjFkt/i&urLf^k$xJ(XY3@:%<{p(rz~&~w?9-`q5g1oo{&]o؎
 )6B5LYpTAw^ݽ6k2 ΰnmpSmγ`)E{w
]<{"	n'0|%<7y}R)OuJUJdݜ19

Ӳ"GEj93RMQ )b^{oW~N0]#Bf"2),oJ,m>4uͣ5K/<	pR|=C<ocV,~5_סb1-J:;-6;4;4;4;,vTJ:AOVB	:(ߣp-_V-1JrNXb9]
G+-W8ZhYITZry-?eGH]y9`#1f}Ŏ4F𸔝<15-<MMMMft
-ys=b[e2C#/Wm?n^$FI?~5nx6FZiӹf}#RGնcÍl=@ZM7m~ELJfu+p5q
+Y[m>_͞ގ`oovn}+I<
˞t-c:kaK{^8K>jQo?E+R\}3OzJ%$>b=5'MӊR/CUeqnX@O**>ApMGmzgl|)9$ߣϩI.YDß5#$eW-(9,ܷy9\C[qM%Lz2+z4v+z)\9S~)1"[2(_Et{6Z>a?y_kw3w9| jhCp="rbSntx70ʲ{eOۿ
h&yi.;@tv'M\,=kQvr&GNs)ZjW'Cf0p\uJ]Ҙu) L6w%Lj'y\$w1T=<O-5<
Qs8ׅjIVjsUL"a&ϲXekѸLYKP$FUS$eb+
ٲ'whϳm1xdĐ+kx)῔'mLn䞥YMF.}Y;A_g$.y֪
: c4kS?[)wĖ͛ K=iNPTEp"(Ngc~Z*7mvRlC}w]Gk2eוlk؏>k1ӵ],
8u#VnB
u݉ݮpn\nq݋]POWm؂Zع*#.H'y~>v7[8>@/Kor=Jlh`F0
5E0[ѷ1mxB1۶+mlu,}}#ʼ8GzabYuļ-5lRy2'wW24ةYE^6}g';lϴ	pǧBZV9Yơ^&dn~%KIpԪҏ$'#xs%WO9k{>b__ߴ\߄PK     A I1  W
  3   de/cardcontact/scdp/scsh3/OutlineNodeRenderer.classU]WWݗ$LFA1VmU!BH(Zhl (Cr!cifG_iW]˾?Ї~;	(>̙{w}=
!
a$j[1Ŵ_2}M.u˟u[eY5Q61PFCT`Zix	ÍCC(؋NLZؾQ^USu2m9}b&=sF"vlc5q =]eѯ1)8+3<bH^*:!x/p:CY;4sS<p48{7*5m7))DS:Nmq7,(ܶl7+_G
KFUd_K:4j)Q81%cQ*-F;
sKAfq̌[gX[d5s>M'Zo::t\%#b9KcK_InyK}nn.?פ`-
(]שc5TyW)J:'gR*k:c^V'ӳFQ#(ĕPcMHG{io!m1#1D΂4/kƼőS2f`د+NF(u6$nU5ݥF.79zwN^$*Q@Tç$UοY`͒ȪAaհ7
,V!Oو9A2WZX\Y\swJuJ/:ZI*
Zp9c8wBEAQ#k/v8j4㞋mNU6hB	|b47ݒ^_quEGm+[uiB*RT6{g
z-8jW^
gjc|x˚I@W1DWh#s
S|ǃ#i
|UhbIv9ԏn3DȄ
x$33+Gd":<.axA^dэQ2b 9s:gnG"k0TVAԗpVQb?>=1GS^
4E4tj@}
#,qARb<hq~vwdd/g8J6p9Oğ!J7K)є7dK)p,9#=K$F6j1r;P%a>w;H4//DLҩH Ey/LP`-
"H`U`9/rwɻVةTӐnaO˫A9YX7-\>6XF?PK     A Kج      :   de/cardcontact/scdp/scsh3/OutlineNodeRendererSupport.classuN10s
4Љ2DJ*Ҕ1 H&&nɾGƑ04	%Vxֆ.Vӕ&G:1f7!E+M%[C3)$1,V/Mu`Aim[] c&#IB)<LPK     A J	    0   de/cardcontact/scdp/scsh3/OutlineTreeModel.classXkT\W0pa@ !8<ff $M&@i(vx")!6dDGGk-)IS4?_]>6{2a&f{}>{e 77.8#a9bd0lN'q8slo0cFD-
'<E(Dbőz'pHrc@]`Q22,pZR,3Qe:Q!P2j$;d4:*ÉQ/F+eA'+'iY
iǥ]V+J5X+PD`ܐ4W7da#`s$m=|%]~Mh0&(MoAe(?[;ޜ8$_҉4iX0O3z#S^.fl@	t5,	,Juȟѯzq@H8nbJ	#464r#R1v`hdJd8hLGlO2˔/5Woziq3v1#syoщwE9/p{v8J:#5]q{ؔ1,

W/,\Eβ	> {,-Lܽ:޿W1$>ܮaP~	ϼ]'D8U+/Y[rqr|@8H	ʮ36>*U1i
l%N$/!tbHH$8Y,H!(z25cX*tD*ttQq94/Jݞ9G=	|NIZ,̯vgqBGLИ:j2cI;60挏Ḇ,E2/	75#:>*Vd<dh[<q
ɷˁ:>t.ܧ~< PaX<erMçjmD'$]Q25CHix?oFUk
0NU
=㇍^Y(<2U3ɱpB1c|h57*3QŢbEl=]3jy
tZ:dL8?dZ,W{iJjliȒ&:"GМ碈t1L*IUGj5<?au1]B!!kbxjO34pJ/ƔܽZ^$#4I>0/-^(vc-g2<U{ru&&A]P+LqYv:#QEH%i悞2&4(6)|7;=T[Sn
ϗeALǥQU͌u7B>;,brYP˛pȫuUGz9w,W 99~VPy4p
_ /	i3}s6dR09a-vpfQ22CK#ⲉ8W˙/ʁ|K1%Vڈ7`5|7-؀[*aiȥ6r\'K"?oY7Ogݙ&l0z/mG췜/uijKXv!=O(iqzN8nJz!Np;S$xb,㉤CX9#<+cLS&y;eJ;J`'#*Gr8)4TWҌ"+_P"~9_r
8n0ߒmƆעA[s;g.ƶ9WAD|˹*xN'C9`Ci|sk1tm*k8se9e!JW@*ԈagY^ČQ]諛y5&ƺitEns4V9ET)UU!s]EDW(e
*C9~<^b7:^8?%l;W!~O?՟ĭ)ؔk,q9ߤߒ`{!=j(I΢u;?Iτ7565.+ %J<ڙ8Q)Α3ͥ>tNiZn'U;DDI?\7WlNUeH	VoY$dy4+<qH, /
.bT	%ɻqad$HF*td5I֐d<3	&fk)
dL7b#lJk?S]Y/]bKDzJAbg-3GD^#VX96e.(:6~9cgkbʮv^Өp;gq%ߝ|tzl5S@xDB8 [AK+tCkHf`++UFJ̢|7oAXK%̯_PK     A     +   de/cardcontact/scdp/scsh3/Preferences.classWW~fa`]QKE$j>l0VbfY TLC+:3Ҵ&m5M6mƦ_I?mնscrN&O=νwf,nATEFlR?o,}%<7r(8
6)Qx44h`ϴ+t,;F^C}'-1#,Q.[Aba9E9ؒsIND~
bhA4F:hW
D$owC+}r(
:Sr:0bHSFUSfϠKAC4l`\$vԬP2mb|
Ͳ)\(h?g.[EJG=kR0d;bAA3XRgXljT	ձ_bv."c3Qtxg;F١I)`݄Vq8m(2kQrXiZ#jGt</Z
yqQJT?,H	(:5hftNz1SZ|e2c' 1-RԲFdu|	/_aY)@8IUvbXG#
*ނQXSDM^uk8 R11"b=?jJ*8\'=g0BÅCzg!_WUc
jٲ#f*eGVVF|NGl8#i8-u6eSȢ:j(}GIł2̵}嚲ŅQr25gtBlYeczjvָQݮ*
gOM
0kHFNMM䲃1
L>pzld*3f8*C˘Ӥo"_]8'1\u,q*ʱ?0k:-s_*8W0-n!=B'{ƎbƢܣ:mY*%3pԭ.zt^,̢QнZkٸ(JL$e;n%aIt=I	0.H?cf*Iz)b;ca̙ӶB/\~C`m~qCdQ9/|_	ڴ(ao}Co(O;gJIql"ꘟӤ!2F4ZtdrYXaVq/,rU_ߦ-xE݄`r8m_x)4ǯ_'|ⵕ|-78(P?Wr.x{
gzbpP-c?@C6œ|NEqi>qqS݄\=Db,O#ghWsRۊokF}W\GSnSTFN\H3}g/+p>wy-+3Ao]v/!G??Q(qNRe<;K
Jy%t/@s*AC
NR%N>w	Z4qLӲoT|sT*w|Orctj3F[SpnIFDڎ;~
n_E~B={+-G!~Ȼ-cxwQWG6?ƏK=//c[/KO?4700/~-(mpW[
(-Ň^5J5j{gkIH6WU}6`Md+VsH,yBXXPj'C:I
@>)_L}-+ƃ ⴺ~Pe]b
}er=QB\]WzMUol$c~l^lס%n1QY
0L!(Dvv0|^yеJ70zs2y~A`?'^okzmPK     A  7x    1   de/cardcontact/scdp/scsh3/PreferencesDialog.classVs[Vv,q"G J(E
j
)$v;86-ZXזUՖWj˻-}R^m):ZL;us^ftwϞǷ9gw?p'>#(:%
fD]4^Ө3W6-#Б9GkK譨Lp*e򌲗q˕:3uL9*+)ΎhlR[RŖpc^e9BP@w1L>@(UQWy%nMj` X$[$(<eLH3mQ\'$.F@3;w;$	CFᙶ$&^uhԼBvp]9Z1{$""OYaâS=e[$nEF`=hٲ&^0LK9De$+^nv
˨15BAKCq;%͕Y7skI,v-abjBwq(2TS4N
/J{%O`-3[@vȰ(>:H	jK!E1,q鲊AIlP/˖(*B<XaL ]ڋEۙs)*骚*s-%+t=ƩKǧjBbPj޶kʰ0~ey}khXr(mBY,14UՌc7JrQM'5**cJѩT8?4ʑ&GZ<@2$mAI{t*
)0OscSᡡviK:5#ʭètKmf{	Xb'$N5EvN
l,;T|;,	lcZhetK<hZސë|l+	Dld^xOЂMn*˲Oi
єӅY4]:Ў&Ӫg~)Кrx_1svEOR_3K/k1G}@Fwxx5%~_R9V xè	L7ϯ$~t㪊W&%'{nMK$gk,(>ߑxъb_c.dWrF0wW<^դ-ryWpgOUw9DSp4T(wvŨ	Ij:Q2Q+D)2NMay&~Wԣ.,cdRJʠjcE\NɊ@=ߗڊp?/kߺ!}zh[DZuLѡ5:abxE>/{04Bڬ/ӽ[pe;HW2}|_b	2FQ݈}lHw@Wo>@k||-їN|m4K0;6`1.!Eu=d= 2]!Xb"!vL_]K9JfyP^콀K yDb/q%|Q/@4ۗ5EV/q|3́<>NC.(<J|ax>K/&CS5H_@!U)g&RNuqSp4xnXt+SDi\7͜>Y|LL!
jd"7|Ͱ2X;@b.`
%6I-`DO|I~uܓFwL&XgA-N 5\y|e9CgPK     A P  9
  <   de/cardcontact/scdp/scsh3/SCSHReaderConfigurationModel.classV[WWNKT{$ j&AIU!9&#L:3{EW]bku_t.w&Cəs>y N"hю3*nؾQSN];Kw
+5#tӎ}׬6\7;T%qδM@`ԅNti]\\sjB01ha
n|lP5:v(+5îJ/]kحc
+JGW-$D4W>	&LAZJ1Lb3S5:[YWVv4
i
߆w~pP{ծ@b
,;	v3:㈆H[MfxyyyK1Q;X^M`z	kH	\+FKUfIpZw@o~37li?2ؚu
sdK 8'81/d&RyCc=WؚǒB#dE&5\1KXMS#{QW\tUb1	^5㯽mjqcƌ5+UjGH^]:>R$O㖎%R	n+mވeѬHĊvԍ3mo,IhYRqʆU2\S}QfRco@&>' m-g`
Xk]|Ψ1
uꪣkQ__mz[ߌو*
E=59ל	2WDс}
UAM{љa]aP<qCæ)îX;uF}K⃺\vkKB
*flYϓol)T
	)hO_sk#\m\k+=e="9Zr	ݏ389&Ѕ$194O
:
ojؙ%lO.?OqH'r#gK83bp
Ea/s%\ G](C<)c83@SLF_E6k~]H
DqUH&w#^n
4h8/9k}=2%dsa\]Bl/'d_t	J*R[7c+NG|dʧ+,Uƞ11\h:ɐA7A"X!p:Ms`pPA-GPK     A @    1   de/cardcontact/scdp/scsh3/ScriptEventRunner.classVmWG~6U|)h
	1U؊@DChk;1YHv
o?ScO{گ-}yf;w<
!6MC`\ɒ颫@E˶L'"45
@|A%];/~/TgkUee7\Z򜪛WC-$}TIu%9_RUOi;Lta@z2$skم c7U+D"J^oO?){pɡ(aM;Zpej8a[WǦiE/9ͺrKA4#&~I.p|`A8BL ᖪω8vhJ^U|˱;qI'MZʭz*erSLτ+YNEqxdYhe,[%ǂAId[רjF~A<8tiFqM\祫RӑiWީ&>вZ+&FqU`oY.)f6/Y/r=c
pRUOE&L|+aJ`[ASSQ
o
ԫ	֏&4i:(
-7Ji#i`	ŜU~azڒ~#7$|-YovҬ	FsW%?Y-+wZ[}a3ҵ{}1-T"?:3yܪ- hO͋cx8ޖ_8m ]64/J&G)Sxԡvusvҙ߳)'8U+R/N	rb`Uwʆ/^vTeyǗFXBIy̮TW+oPu<9E`)7CDwj_
D
im!Ao`
x1cOLtc)D,Fl	Oٵ=)mÜƠ'щ[ч3EIf	Y?` 4sZq!/885pz'?iGL&֐Zc*ucǃP@tv&/q6B釔Oyǘ	xݟ0LK?tweD=0mJ䠂B<#a >a|X~_=Sh~g,gF:>LCJp_xxه8+n̅4*7Н}ZPC?Gp 
6}#32]܀}pI3qX"WPLYf)k &c|5ym9RhD[ [&֗maU
.yoQ[| PK     A K1    &   de/cardcontact/scdp/scsh3/Task$1.class]OAߡҲJ[U"l^`"JlD^xa۱%;HW&ޘh21	e3s>sf__x?1drzqCtX_=tC~Ga\0;F&ڴi(Ie-˸0a->Y@Qa(~)@aTҬ3djZ=MQRXYUST)މci].Cv|V:d!vy"D5}/ WךԉmSܤ	eT14	Ŧu\UŚvwsSG3Xsmy Nz0>Q}G3āigvl;΋[;ԉ-͋XSR"وBcc)S Hu)1qIfIV`c+ǘl|G=O81o<7Iu>UhOq>!xOy}
,2S?NYsV5445h
PK     A <3    &   de/cardcontact/scdp/scsh3/Task$2.classRn@}K	&)@7Ԑ8DrKȻ.=KH	H 	~1	*)ݙyη__x". grGa-Ob}I?xG<|[k1a(k(;=gQb(v"b='ԓ{",RP]70%\8#e]錎()aWl;"N/GWT0#\_"l\wiB
"بwҶl2Tܯ8H05kzO:2vXHnh>O~Gsk65uW$xS~,H	W1WYJT4J$K},Ew~Hؘ]<Ќ0w_f.=R=O$=ӉcD\J!F2U.!TK3dl^[MrIdvWF.Z#̺Qh0H[A,ۀM+l$dfҏMXq$:$!f?3ŒQ2~UgZhLO-fOoPK     A u5  (  $   de/cardcontact/scdp/scsh3/Task.classYxuYƲlEe=YllcI6l#FҎ؝l	!&I!yhĤaS.`4!M>h^MӦ3MB!3J^=K}ޙs=?;/e0!#37R=q+iq;ұt>$(2L[5ڐZX(hnR}!0x*1l:qplǔ}ks鑎/)ERFLF~!PCRDf_Hlgm>24,j&IS~3-TDRT4󰙴#sҤYcI0m);U@kC
=f4JkVPcr)kLGm
ؠuکD)kdRUXZG
j3soKg98(%-7YМX@PȚ9<ARp	ehHF=hvpho&V2T&|r-[P2#Hp){%]C.ˊ#Q#՗"a\:6AݟFފdG߼<ZZr(5'C#qsXC>_#hNQ!\+X)ʤ-/q0vz
-:Z"6c'1ߌRQ=Ti0oAѮCŌ֓H[iSEn7`#\3iA-U*kWAW>A(ݟ{:g)s:l*"7Л<Ī-7\ΙVMoraM0¤9syGLS&
^͞*LvlqVD,Aϥ2$]8cPƝZPy3Ry#gwH~
3/-1df@wO"i!TpTǝKyLGӶ9hT.qݗb1L3!zީ]:Ż)\ˆJ鴡b6uASNm!Fy4y?l}^52%5Ag)Zs
xH)b
watwSju<g/7mu<O2rд2GbR*ږp(8~Cçt|a7ݣ1Y*&8IS"ݵf)agu|'D<wZ E
a<Tۂkf2wY
w{N8I:^&0	fQ"y:d
%SLTUxFǳe n~XT?{4
0m/bEa>1G|> 
Oo7R*1+KxYEڶ&:'d_b7
8l6RluLf4|U~N]uCc&ި}t،]5QTuL&;f(W:_sk;V
_`nk83,UM-qGN&Q(ظwT!;㹷73JGauNsH<vh'aMVֶ-G:?ff'80*3Tz2;}bSg8q*]?i\25bjf
4V&mP4n

[Iqlu7XF-j:ޚ"IWֈ*6T-iHlKJj8E4]Bsw<<+'%<?S0gMb9Ȑ]:94LkV7Mq"x5)$2<H5Y!#P*tY&Ց9N`Yޙ4.+Il=;9
(f
")$Qe
	JI.kYT%tߩJf1,5J#ZqTVNkŔb\wBt؉tNS
\njVbKNe.MN4ay<veMefLM^ Av&xud.%Z1H%Գ7ѹ:y@aImueSp|f6Gmsh@TQ(ˡcMY'TK$;	|I<^ȊD%ȋQ1MW8r
z3I&`;NӾmcFޜuɆt6_̞}2lr~2GU7Ɯ}AT6.WɭMS>tCMz)O6xXz4ffpJ04CBґ9!Uڙdsҩ'_	Y>f[w^+5|zlҖM-bxKOWH]UUUgd^1&D_]PՕd
AGӲ&;qgk7vZTܼ.BPiEw0%}P}JJ"<6 K? "RDӥ|^cj\_
hA w;Im

|^7ՏA=pge-kQ,EOc](&孂]TىC=SOuL6oƅrlz:xݶQ"ql{1p#^4uϡQpwY4a)]zыH`-CLVv8:nd6^ZTI{)D_XZNqxA^"㺺(nTF6Xđ&jr0h],C%ϹM]@n ރ/z
|J<]|=9IޕOۻ\o1ޏ"ڶ۶P}\&D5t~`B!oȳ__<	N Tֶ:`k#šQO^GX0> <ѳ')]
]+<=u`
:~qwm>G}}k#ǜcJ{G/1<N"fŧE`<2f|W,hjr#uX-ҹC39pBO_>;z92]|66O'IhYĉyQacn,(;'~k3闸Yzem_q7zofn9IkQ*7͌[<sw:7!'uSNryq>	T_#,_g|Vw7_J_J_J?[yz/o+/Fn/p/%i#|}I'$kg0][Rs +Ǿr|(|=Ṯ?3\%zPፎVli
<_꾻ش9T7AѕF~
L\erBq, /=sS2Y\R:[i"zA@&nԿA30zU^9Ҋ@|P6%%?ǟFTABaP%a\"zVy;|
7tA{UUY!~6eU{╎QyÏ"p^e/W-Ï<oE/=ڒ`[ʤ	*
";?";g1QP9_HzmXPNu"<_ssT0O4{Hʈ",EX%K^1H*YkevE8 k#k1(U,Yq?=(uxLLKP'+`&4x/e@A2}\$I/1$.9+U$WDWeXױu:a>?tFmƥ6Ix\s8L*/Hiw~mg7NgdiYYVVdLV8QUnVqdB~_Ɯu9IP/WvٖkhF-)e4]AHDEǀrS5$E*^)HI/1V͖duEPϴ(ܫ|i
Y
WRJ+U~,.շS.V?4&[?FONȺ]%Co@VMa9,#^XF<ThZ:}Dz VUxk<1X[WQ0*FYR],w3従>9ݸkIUfZ}Z}Z}Z=Jq\Ǽryn^윭ԬYzD[ҰQC&wk@8Y.
j|wl)eyrioLoLoLgL^B\fIϩbyc PK     A    /  0   de/cardcontact/scdp/scsh3/TaskCellRenderer.classW[{]'<<!U(dى&Dr
.ȱX3B3J{mI^CA/}/]{FvCY{?~o qB(z.wr
ƒi+NXO*$G5X[vUjz]naBlKF\r(iTϫKJδGMl̚BEQ
l0aP~)
$lfU݂{٬vX9]HЙeW'MjvY򳣝SԹINvܡ=:]
wC
UYN&*^pX=4"ґmxkq:0У:RSY5V̜+-Cގ#:"vr~X6d0HD:>cLNNv->2L[n:?{fdV}u4ܯp͓28##9X1.δA%Kˡ;=Q4aVa()9:/&|X1!NuӦ&xHYC9s߂h?]M,^M^ulH˪WYU?]c6G'Hgĳ9ų3=gU8u,B(OGIQѴ	6J+5Y6qO\ۭ>I<HRvdb%ݢgʭF,07!,`YGE6KP&+ulYqrPyEӳ:j`ԴI.u\0q$l;2PpEsx>LPn &&O>
Vg릆O)B[)/Zˎkq:KD8Ys˄SsdcZ[pK=o,7'#~Ţ7)p &ҳb^	#Vp^:0(#;T7HcV}`ov%^;9w:jhKa/.s;߁U\	6EBaXlE.)(GHV-*%:ɼrKuo5WX6ɚ-/M˨5mC6ݼxѭJ%n
gQ[_3Ӧ_q^&hYӋ;^Z#74Y%wlpxO1n+vS0?k8e\w^rmQBE/&DΰdE;\
÷d?J(0bIOy4{'0_d0ހJou_	?y8x==yy-4I^k`t53GBȆD^{I/DD-\C4MD6v@'8N< ES6>!܇TcB|1.!|/я^#i8dBס47-iN1o}8q/_ǉLoMeb	-ZL,5@JVs
L%zIp#\ǾL_*@q(r)9>@Ls┴vUiRc
H('i@os؍?-Ib<B$<Gx4$<<<x%W&&9t?CIm_:~^DW	O[aYwrL븊idTz?ďh~^?J>S$d}[NA::_n&ϸ?_WlcOA+lUPK     A O\8,  !  *   de/cardcontact/scdp/scsh3/TaskTracer.classVksF=G!	І`;S(P0  MʻyIؒk!K>43t`??YY8/a2ޕv={ϮϿop/S!n a!rIҝߞ]Pv qq@<IDm|򶬕l
}TϟOKq&mUHTdm-t[,yv\ua@-;eW#B
;6n@
ʝC/'`9jTPxq5ja3wf끚RA!;c`MVWd2p<ڲ!~p@תJxv.)@pq=|ea&3TTʄ.dZ'&RQ, /iח?N%EoTq؝n.NhH3i
pZ`OE.1e`Od]6o-9jOV-	dֲ\pKNl,r]~&0)v)^5k~Wb&YUev3h1;PSYA`ղzG-]ֱjfv:uj̹=#K1.=-Yr5Wm6vb-dPW6-
>})9&E,_Q2w?J:.oA-{N_'H]Ѡ$$lB 5{Խ*N+ݲzK^7b)DKȀujg}t(U-:K旵oJTV>-֫m_TU>Ę,zָXY
2}>rڔm/okceL&xo΂sg
Dc%4ɱqY$0f518q+G@ܟht8'#瘾#_$yvn`=
sXVhj"~!t?yE/M$n;"iF?fc?A0ѼY#6$8Fhp/~%0BOۋ
`kDLQ&Z`$G78t.їhKqHI&6cI38&^,K'c(C,QE3	C#DLSDƝ8YAl'I,%zR^3{\x
+"_
k	|~>ȟd{]|t6UQDU)ՌxZa><1& "|6#\C}PK     A U      6   de/cardcontact/scdp/scsh3/TextPaneAppendListener.classmA1q^E%$!!jponzĳ<mpr|`@AXZy[2hRR9f[Ȗ@0]Fًܝk֑0	lDڛ׼&LU9=yA.PK     A w    4   de/cardcontact/scdp/scsh3/TextPaneOutputStream.classV[wUNw'Tr161qD;Ѐ0JpH`' 	hdT+Ia!0:8/yf-IDҵ`-I.g2߮dQ콿9wD
L4YuТ}Z<]媞оm+4u\GWoA-&Za*+قV
2g%}r`1]J
l8X.n1T~N<?dalS뚎Bw^_Vw6{J*g]Fd'rwڞu.[!bUv4@;x
oы%{s+r5a*|{nQHj78
ւ{%9oqmvɢ.38RVÓRBUG=</VM<-
Dc"w|G3FhGWdXTmcl2d2povA\O;3M
m@q7*e;hQ0dbXc8As#{ߛ8Qi/Sawj7oxQs+r]<"5N\*ex?
-DጉvEoΙ8lgY[\ְ5N]k^5p_;k
 v
o$:Vh!˼91*(1bé͉κO`Ĝ6mm}ƫ8w: OMN<kaHkWm2Di{tma \#MTr#Ʃ ɌܯS4	]ty33DKf(oY ^We]I[sX+E{u-5	C~_ъYk6AwdEz~fV[u'U^/#ܪOp#PxQxE	V^\
ʛ0ϧ˯ ?@z*nHgn-
O:_+<
Yu3Irǰ-xoɡGPF:t?
4D'@
Xxfafvh3?j73r԰ f}mj v'ywdZ&I8E.h=$L)ņ|2O0ß5@dMQUǻ?V{YA?
LvlGg6=CKLY&g!IkDI*]eۄBh'H(z)z.ܗЕGb)]TgEl]ߙ\Yq0#2wkJtݱ^Rgz6gEL]:	H5&:%WN<Sc#LZ)8-yL&c߅jgǸÔ6^QmD1[bK-!zz8ئm!:uh8|rМZβ`!lvRbdܻ%,h_'311NOiO
6gAO2;C(%	3<.½ah!"5A$i
c_?j*!*gSQ/*	u	^ӀFD#.GΜggPK     A |  t  ,   de/cardcontact/scdp/scsh3/TrafficLight.classR]oG=&8&$%!|;-#Iu?@+uXg]į^x)#7^ ?	!l1`;w=s^ 8&bHXH"%+ˢ|KNs
	s4 m*үٞJ;,v4}Y;vi4IB*(XCV`tȖTZE Stg`B`$Pᒴ5|>GV51%`4T<GhQnxVﴤ岉Ø1pQ}Xd՗c{!:+	''/65묅<
,;}٢Q[8E$Wo,/o~᫶tD2٪*_\+4乴
QvDɫ}U;ߖwZd+MI6~鰽\v8f[QE=c`'C
lO1[ܢ{uF_$R:V
zJs=089>|O1y~2/C``GeH0O"9d0X#b}T9=PW^OWz;z)ğ)<.,D9EN㒻q X7$a2^0B)l`Rq~-oZ${fWZO~Hf*34p<5{^[سܵGG#uRm̾K+C_a&M2U2aJ~6~%oCEPK     A Wf    0   de/cardcontact/scdp/scsh3/TreeModelSupport.class]SW'nH"`(BKЙ3X]fwC^_kg|ۙNStZg	C<sw$ATCL)|lFôo>5_m˶;\~CCM@CIu0 PKfcf7Z}okJYqQm8
t%%>cg⁚e{r7k)@%CZ a+
-m
~V9mgWjgR'8OWZ\-]ӷE\0c3%0ezmxA[⬎	$mwGچk(L=e~c˖K[I1c<5%VSYQlꈬٞt}YW:!esθ96۬MWvbg_ʖ-כۛҽgn6f66LRb߲سѧDkNGoF*s"SdO*NnW<? 6;>d<9\x{#KT[YW  +FƘwK(#`;_%ϹM>A}1Ho壄ہghiL;^|$0+a84fof:i^)JwUs|AAH3cU
RCC?
RA~˘
29wVDe
.4ȯߠ7>cC&pSoQ@Y+l'B8+V5X"#$96o&3%Kˌr'[;6ާ=4%Qg=6x4FDY$
-W~PK     A &ͨ      5   de/cardcontact/scdp/scsh3/TreePopupMenuListener.classm@Dh)
@a~@f]#N̼ޏ'5=Y(irUk'VM{[a>ԍo2>-c&ƀ0)e+E%U/%+GHܯMoAޝY-ongX{xWTLY@#!`;0 PK     A            	          A    META-INF/PK     A -\=   R              )   META-INF/MANIFEST.MFPK     A                      A   de/PK     A                      A   de/cardcontact/PK     A                      A   de/cardcontact/scdp/PK     A                      A  de/cardcontact/scdp/scsh3/PK     A V     1           X  de/cardcontact/scdp/scsh3/AbstractTreeModel.classPK     A 6Í  ]  .             de/cardcontact/scdp/scsh3/AccessTerminal.classPK     A &)u%
    &           v  de/cardcontact/scdp/scsh3/Dialog.classPK     A T_W  B  3             de/cardcontact/scdp/scsh3/FileNameRegexFilter.classPK     A   j  *             de/cardcontact/scdp/scsh3/GUIShell$1.classPK     A Ӊ_,    +             de/cardcontact/scdp/scsh3/GUIShell$10.classPK     A TY9    +           =  de/cardcontact/scdp/scsh3/GUIShell$11.classPK     A 2  ,  *             de/cardcontact/scdp/scsh3/GUIShell$2.classPK     A 䵺    *           #  de/cardcontact/scdp/scsh3/GUIShell$3.classPK     A _  &  *           2&  de/cardcontact/scdp/scsh3/GUIShell$4.classPK     A K^$    *           S)  de/cardcontact/scdp/scsh3/GUIShell$5.classPK     A ƼJ    *           +  de/cardcontact/scdp/scsh3/GUIShell$6.classPK     A v  T  *           .  de/cardcontact/scdp/scsh3/GUIShell$7.classPK     A 6R  b  *           1  de/cardcontact/scdp/scsh3/GUIShell$8.classPK     A R(    *           R3  de/cardcontact/scdp/scsh3/GUIShell$9.classPK     A (V:  }{  (           5  de/cardcontact/scdp/scsh3/GUIShell.classPK     A 6E  S  (           p  de/cardcontact/scdp/scsh3/JSFilter.classPK     A Q֝  $  *           r  de/cardcontact/scdp/scsh3/Launcher$1.classPK     A Eju     (           t  de/cardcontact/scdp/scsh3/Launcher.classPK     A S  2  (             de/cardcontact/scdp/scsh3/Observer.classPK     A 1,+  F  ,           E  de/cardcontact/scdp/scsh3/OptionDialog.classPK     A )-Z    -             de/cardcontact/scdp/scsh3/OutlineNode$1.classPK     A wXa    -           _  de/cardcontact/scdp/scsh3/OutlineNode$2.classPK     A >cMN    -             de/cardcontact/scdp/scsh3/OutlineNode$3.classPK     A )  >  -             de/cardcontact/scdp/scsh3/OutlineNode$4.classPK     A *P  ?  -             de/cardcontact/scdp/scsh3/OutlineNode$5.classPK     A ΋    -           s  de/cardcontact/scdp/scsh3/OutlineNode$6.classPK     A P~    -           ͥ  de/cardcontact/scdp/scsh3/OutlineNode$7.classPK     A N+  27  +           +  de/cardcontact/scdp/scsh3/OutlineNode.classPK     A I1  W
  3             de/cardcontact/scdp/scsh3/OutlineNodeRenderer.classPK     A Kج      :             de/cardcontact/scdp/scsh3/OutlineNodeRendererSupport.classPK     A J	    0             de/cardcontact/scdp/scsh3/OutlineTreeModel.classPK     A     +             de/cardcontact/scdp/scsh3/Preferences.classPK     A  7x    1             de/cardcontact/scdp/scsh3/PreferencesDialog.classPK     A P  9
  <           %  de/cardcontact/scdp/scsh3/SCSHReaderConfigurationModel.classPK     A @    1           w  de/cardcontact/scdp/scsh3/ScriptEventRunner.classPK     A K1    &             de/cardcontact/scdp/scsh3/Task$1.classPK     A <3    &           {  de/cardcontact/scdp/scsh3/Task$2.classPK     A u5  (  $             de/cardcontact/scdp/scsh3/Task.classPK     A    /  0           B  de/cardcontact/scdp/scsh3/TaskCellRenderer.classPK     A O\8,  !  *           _ de/cardcontact/scdp/scsh3/TaskTracer.classPK     A U      6            de/cardcontact/scdp/scsh3/TextPaneAppendListener.classPK     A w    4            de/cardcontact/scdp/scsh3/TextPaneOutputStream.classPK     A |  t  ,            de/cardcontact/scdp/scsh3/TrafficLight.classPK     A Wf    0            de/cardcontact/scdp/scsh3/TreeModelSupport.classPK     A &ͨ      5            de/cardcontact/scdp/scsh3/TreePopupMenuListener.classPK    4 4      PK     A            	   META-INF/ PK     A $j=   S      META-INF/MANIFEST.MFMLK-.
K-*ϳR03
.HMLLN,!-x<srRsSJd

:y PK     A               de/ PK     A               de/cardcontact/ PK     A               de/cardcontact/scdp/ PK     A               de/cardcontact/scdp/cardsim/ PK     A m3    9   de/cardcontact/scdp/cardsim/CardSimulationException.classJ@ԶѴ
FpZ0nj%f?u$D|_A\	.| Jqs~w澾= 8¦먠о܋{;!V%z#N6Lm|,3<
E-3"\Q7<Uq42U<
dj:;a`D˵
x`wr$
_iy3^YDJOq8ѨZCo284o3$K<U?0 vН-\:U,<5RF	4(#gM.USt? PK     A Bv  i  G   de/cardcontact/scdp/cardsim/ICardSimulationAdapter$LifeCycleState.classTmOP~vP7P&o1Q,tJtI2!
Qs/5#&Fs{o cUD@@fdtͭiiN4zլ7-3;W<);^<#
!aDBERo9&+Ɉ2Yq+WJ+!Cf\T)Jy_bl.VkkM	ƅuܒóru;H7+nUK~qȃn9ARve,͔
ݣA<1$c#4ݬCjՊ5ssM{wb&Ge<BJ@$kڦ7/7^YHoJhUF%D%$$$0nRJq?
˩uR-SWѴRmm"f
k(:fmj:BV7ؽo
oϩi.$Qܵ5Ri0ޤ'8[o-kp?Ovbtucd`MhxN06\lhaA:^ą$; ¨]>&|ac!U)Ӥ3K!Z3H3Fa,gKc.忠|xE8k $aN/J"l

8׼d>co?"B|x+jZ
誆[HjUl!V%W6Z"<1<@0b<xA&Dyx}=jkZ@"KX+*w	+ɟPK     A ۫  
  8   de/cardcontact/scdp/cardsim/ICardSimulationAdapter.classQ=O0}&
XK,]"*"QGe;H5~ ?
DC%<;=?? ,@pPR*TVnڄ
1IΥͪrʍe#U\+\.ej4AD}+=<|cvbݨ<ct]+7sb
.}ŏ¤,g]WgB}b8! `^\pGpS@|7|=4-[c*8r{C;cNoϿPK     A 0VA-y  :  :   de/cardcontact/scdp/cardsim/ICardSimulator$ResetType.classSOP=oZ ?vC 	`cq	ӣ{BIג?I ?xs*8c̶gsϹ>~0G:R(<ap7)nm_b^Z[?Wo<	"}a!m!B7k3vRւ.,Xdǫ+/WWɛFNG2.T/<)ml	7!n.0+]	+ANp!6^3L粗}Nyy),\0Cǂx"CݚVf1iCYG,bLD3م6GB?Ea]ިohoy
+*<)tH.^CHvs'4	x҈(UU:;_hEtF',"uR񺈓0NtL3ߊZs#߂{iu]NmiP^.А7v2njP~#ubMg wR2yV<E.mzZ?X(H8!})NRBSbS^>?tܕ](%#E@ɜ)OwҪg->vE	ʹf'_NpZH~0[d:SG2f}˘]PK     A 3     0   de/cardcontact/scdp/cardsim/ICardSimulator.classPNQ=+*Jeon4
jB+,W5
?2΢!4s̜y8AGpqt9]huT,/`DZDexj-K>\l=
zUs<>ꄣ߬VDT5[{~D:ޗ0WqE˃Dyp:f#d~eK/[2*<}ׅ	XedYbD9PK     A \G
  v  9   de/cardcontact/scdp/cardsim/JsCardSimulationAdapter.classY	|T&{M ! Blă[! ! Kdo}Vj퉊@z޵-޵U̾l6dCVߏ7;o?	O;p["x4xueݑ>kg,7"[ˍTԎ%Hz[-[ͨ#?'9	x5@4#QZ	ǈ:T3:RȊbc}ĬN#阶@y*7HMkx%:P.0kHk,	iyHfjhs &-Oq&
h ֓qlkPM8]`7!pvǎ%&kZ%HHtG2%B:a@u5N,,^i$*[khX]+orRN13Mg [e	bՃҖfh@axLƺyYڈ!lfṊQ+2O>@dt2EL''.,z..8-44	L7;`R۶
ֆst>\l%>rC1f惛O`XDNmm[rY] eI'Xt{LD`r2!Ky0DQt\ kmӢc+);Zu;(*p5hgڰ̈́΀`ǌpezcQFx\s\ɓ5û$Pɢ t	m1CƀT4i[Q3ZzIܚ6xKljf;;ZN-f=tFq۪hcTJYi:=VghVY儺t3d!+Ͷ!gGҔc:.Ey -dǭm͆W(UQ6B/"m:i;\GStlePty5ix;CvV6JNK:ލa5ݱi1eNbN2-7[f{hŬjqM]jxs,UN5^^H-C* >$06<2ku|1PW2
w?"֡.#r~z.F6_D-.1!SV\3Kp>VvnH'/T3?GEMǇАI§YME)يBܻiQ~I8uƸS.>=+Iqڙ1Rk<~^#r/,30DR/Kvx 
BF<mnɭ:b@mhƎu"VbB`c\ѷ/TY;w}В,:זbk3[qEMr:=1y'=Qpb:SzqH2oM
xr}֔bcQ$O99WQGhawSy0$?b6sIh})#HqҰPy,cکnJ#_#:ΩOFf@Qh2&$wjx6Vǿ 9'YNiݸ(eQFKN}-"M;
B<ߧJ<Ȥ<),Y+n5i
\V2F.;ŭYY/Yfۭ5$G
<ye9t#9''nzD(MXe~?^׸*K\nnuɖ2xX56,HtTuey#MT7W#5[iUY8`kHI221pm?
x{KmiڥՓuues~~?_}vDx(9[sp5)x8]s!;OŸY~յ$g';٩Ԓ=N"Bk_W3D4+|8C6<UM^ aV?'AoEx/joC(?9}+{~+.LIޠ A_VT$Z/fLUo* (`b>ݼ؊+3@5<xRtSj=o&]x-m/ķ((OC:/PNۮwrφqU;@]>SXQ*
<VEkP1Ņ$^p%]}ҘT]|OQiPT9pT۫` ^C&gnwVKl32qQAKm̜%SeSeSeSeS?(ŅQh>B,\UyԳn?cn;=SSSS5=
WvHJt=31U(c*U\ҏ{[AiboEW&x=dC'8<;|~ʳCBq+K|,wa<&g᳘B}G=sCc)s~M:<f]x%%rPVCYe5?j^]q~y+nO6f4Q:4
-}syD^WjUH|9J>a{qyw|x	yeA\}鱠wJt5lbqL%:Qyb/D1+L	skl刊
%T}jkX|zB
~_Xr7ْ
z]pAuc;JHKh~v.{c^qRV)M?TaۏWR6choSw/>֏wAcwBY0wp6g=xTtL՘.fa#l>l6O$~Qܬs{GeZR8*/*!T{gsTRۋ] IV$3l##,P-,qj9W,ȒC1Kˊ,ֺdUo{_jZĒ-PK     A            !   de/cardcontact/scdp/cardsim/jcop/ PK     A i8  N  >   de/cardcontact/scdp/cardsim/jcop/JCOPSimulationAdapter$1.classSn@=ۤq6Z
5DA!"7C$j]/׎lg@B~  fJ!
Xg̜o rCțFK[Qrډ{=u(騽~S5R[M\:D ;)O%Ca}047,x"J&Nd;]'NϪKMRbg,_Z?XZ:TЦ[51
C.,TM8ž
yw
L0}n<ܶ;
%Q2126jni+9-ϫ;fϛzjPhvHEB>FX'N
ےqoT:Ƈy/qc!J_.kQA
Dk2݉|7VndÓI8Jȑ醡'LbX>F2K7u+VwUg\eQ4>|.N#p2zN<G[Q8&qS*kXm+abW_!*@KU(nTvCsY<C̘,RR6K=wPK     A rm
  1  <   de/cardcontact/scdp/cardsim/jcop/JCOPSimulationAdapter.classW	x\UdykB֩L&ش4@aj!R2YL]μ6f޴T\l+lEFU6""
&UޙLws|;{BRe(dl6FbccMf(_b%,g@nTh]ธ5RpӘƒj!m7nn?7N4ǌc*tW&juJTQӛ2@MKDS1M@Ofێrztt6a:pNW`&>GbDQNɩ@Hn'E3!)N(M)\b8
>9,8gy3571;_GT$M1hgDpN^~#ᤥ8&GmN18
XFA2ffSar:H;),>VJBX7=LITFR\9EG\T*tʠr;c9NM[.]CNmd	L]d.Jj4nMVG:>&k'D1G&xLҰF`h*mX9Q3)#e7:Y8S3e;vԎ3
Mݎe"ٚ:6NN%\}kZ&&
}:<dʎ[s)+ľ5-d(:8[LHTZZ!c34,o6֤T6qy@ڻUq.'/Z'	]κ-tz،$jv+}	{K.I8At~*p!.%_W](vohoLoqds	yXK/5\`۩0
|!ʌdZ:mpoG2$AߒO;9	T}[Ǖj+z]WjBψbZ'ApN0 0%0~YrT27&ƘD"❀̀H(07!	ߢc4"~$0{]9嫇$1,IZ:]F-,nco",9p"Pw
w	,:h<{F
JQ&T}*ݑN=v.oz#xZkd]$ڱǈg^2KgCU[	=ӿLElkvԈ)KsN{z9gD`cW##UfonY77JTvOfGXBFe~J/$;v{F(o<[I*NĲ|mx%4w=wu u4v&5Yo3'|Iny_KTQvNHN@dPWPcQҎ):.ʮNT^?4$ɗf$_.vjbf8HfL20pF-e_:,F<m)p!p`HMzi"akxC`A١_ךg:?\</ϗf;F>wٚ'5QMex%wAK&˟jSo
30?~0+pS)ulyBòk<Zk~R^<ӢIV̾G唫U=%;>aiΎrUo(Ҧ<Mޢ$I^[hLC?pFvf'ߍcWiRNRKԙjPG C7v,iE'j$k\e4	jځҝϠa0Nk_{0MoW^
aDvu~;<N
Wj6gRb
8^<H'.M"Rچ5AkJr
pm}E6WB;LoѰ:QoAJ֏EEr]$~yv0μ);Szq. 8rxv$j\Dv[=As|bRʆ95e ,cAu|a/ۻt}a9`ZGԫk9cR4cf k!kqKjlkk'O7.2[O"=^C4$m;޺
0:F?r
D?pm0^b}*%!x`13p}[Bͷ,!:~n[]~D7+h ֵqzF]W yE^ύ;4Fu6BГԅj8{Ut3UYwW:oe2
r|r|wu[X+b3aUcg0`~!gyJyylsWyrS7O
?Koc7CGD%2<*аDyO+
/-Q&fRY-P̥
G'hb6qR`v]7Үף\G\CM[	a]SAY#<KY.Nd(wMEdDS<,{{ϲ2ț?^=yҬQqPfVQ'=8PK     A 2R    =   de/cardcontact/scdp/cardsim/jcop/JCOPSimulationProtocol.classVsUNͦ1\
Tmh$DET4``X,ɶ]
7gQ/Ã(:6:>3لKt;=]sN T>U"PX{T;%k,9W\]iX|!Gp"WdEtt*Ն'pzhj$e
KFY\2ۖkU@0Kkua%sfcrZXeBcUuq|]FVUhנ_@mfabk#utqunߣٶvH+5"g¸*nFlЭQpM|$\ZYcFUl w+Re]s8["؁[6ֵ%=c=hW3]X:wh0&;U>4w0+MsTqB`eJsrJ
@X
KT@IJ|xbRjOV*mE9[MsɂTځsP!~0H~">G
TzM&"ִtXE%	lucwgpyԧ#]֎(Y*ZmF
ɷw`ϓÉGB`Nug4S<eˀ{ NKѩ͡:
5\pyr9M-1٥)U
	²%(,/EuyGg9c<
uZ-ź;\vE4l.x-u\[kLUuB w5nӫCdh޲M3$-\NH!&fxr%hǬ%gN	M:a+Yp޲+'G	.W^f+CdZ{LS35qt	S*N
lwSe-}<kmg[E:;ȧ;>K~C~|r>lz45o+$yG=-h	TY^ĈTl/7_Xqw&uXV,bVC=P~y
*2[휒\NI3=l9+:t~vq
g:ߏCοsF腝/p|N%Q%0=K2x<V
m? ^U:IELv辰g
/r//c3^Aq^ŭx{x;Ji<FR| gÜy2B#d
:/rU9F.fVP|g~/	 eG/.\:>S!",m&3hEe3*zc>dy>b.c%;5{
,|ďaad13r OOpG"Q#Nr58H

t[/-ׇsX	՟;UZ5u.63I<PK     A XQD    F   de/cardcontact/scdp/cardsim/jcop/JCOPSimulationProtocolException.classQJA=IVhbb"`E$Q4M?ݙ;+!?_',Ż`aas3;}~|U3u+"Cuop=NnXe4C@ie[o#G큃9C_zG0raXLU荅xE$ij/2Sex0QL영uFǖk;A"/owSȵ/J]yetɇ))*f8M'qG٨_M	yҹ5 lM kK	t7THi
;SSf9(
*VZS PK     A               de/cardcontact/scdp/cms/ PK     A s.I
    0   de/cardcontact/scdp/cms/JsCMSEnvelopedData.classXcv7ac#"@$
$H1$ufxU{ѻ&Jmckkkkhw|?|2;>W\P
+Vw/=h&ZG;ٺefXu%]=7)(V)L1]z:hD&ٱvCKkcꠑLgf	̞
>w5ZѵT$v"]oI#lJwt*`P!<4+[F&m9FP,ceBsS1,I;n8`
nw2ZSn	Kkj);p=,b#vN7 .XJ}Fʉem7g cD7a!K	sJdh~kQ65]ٔc)TRi+MtvˮsB%VJ m82[a%k| ["eF\zV`θ_xF\̔M
GjI31Rz:AsSw$m$b2p1k
j^cV	)i#:\b#"fqAS Ԣe,
GvVW(($=֣!m[ZefƤŦDZ5hI1:M,C
=k@L똴7A!n6ɖf"ZE-eVBebi&ۉj$Tu#p7ڟ&2>%hiV'm۱W>:i@7vDku\ʺ9Z2RiG1M7/<.TtA2
BZ)ЃlÂwҟCݒ]Xk\
ͩAj$U!S6V'ϖMjy7)T xU%2#6EeS^JTq<FSơh))ZJbn($c]Z<-mٴI*nkFUq<+#wx190~Mr܅ܣ+P1YD@9=Cjܧ~|aj/AyP~]6OY5:]VyΧfkݑ7%(fbX2N+-8g"P!c*GvrZ)xw .g
۰L-fX6G,
 $M6-5|^v^A=
nȟ7lپ.-MI46_F"PSbgZPe$5l8(btϬņlOuU%YϹEk32w̖fu3[sI(ā`Jnj01>4OLYK(zz[LP!,93xĮؔ8ҖT!EPk2SezRMҒU劇2K;JX%S$I>b0pFyatr@4@]':3U`4=Q.g_œXd^Y-/B9p<RQsϑR:;P-!^]7ql4g̱ ۚZŔ͟|<J-,n Q|Oe88Yxļq?SBx4~wq%>ë:*s<W^WTOy'qRTanpM_(ØQSz14}Cǽ"}'07#NbgT,F==e¾aXuR"xǨ):;kt2u'NFpb1?Vkq54)vCnf`OKxpE
X]Xt<i"fш/îU(,oUfu/YCFb>aQoTWk|>FfݣQ-q0ַ,{6ȿz|dxPy346s221WrLRJ)1Na?rW-^˽[ʝ^Í#Ha<V9`x:FKOd!f1-!р;>%Jw#.܌q߽88Ϣx 
OFby<؆\KDFz̣z.g\|ܻo_};Kw=btxHiȗ?ď1B.uT*X:)XᲢ]DJSb$IJx<	c;8nbŻ%PNJ+HD-$6/#h¡WYٸi?@HSzt˕0[
vZ+6mVVO1&&֋J9'&όҸKY9e
RӪ|naAP߱~
7zխ0,.#~Z#D<1*_)%q7P0SC?`PHQ	x
?PK     A   6  ,   de/cardcontact/scdp/cms/JsCMSGenerator.classZ	xT~d;܄H6 @C&	&300s'@hVkڪZui-ݔJFEݬnvZsg
$y#s=snc,?:l
69C{jg=V͝;oDGVK5jlg7zHvU[xVA#쉄hC>t
:
1Np#<a7x*뱦XkrPesNbj
FU&5͈EQI&ꘄGT!9@T~p~aASr+:
m834Åg|-0P
GaҨlO5)SpgkeY0VDvipvWqnCX0&+K)*Jv%PJ!H}0/QxӴju=
\P\c!36n`}&ק٠uۨ5zEĥ:΅[`P:۱rumi_Tj˪V<
JԄRۨzmɥzT+_
}6h	zh }OmS"B]S{]CsKL;
UZ
:Z
MjTC5uMm5m	LJТ"}\+"FT,MFVr9n}hz
:6bYcs)eeV*lԱ	G'ڴRMCyӋ;׎nz0<Wwi9*k]	As،N^
Pl1b7UUj~؆.
uuCl`F
{J<	r`':B!u(gC^׿5Qlbi@S6賃:`Ok7׎]`
]Hi}.ÌBDr{ws*tuizM5Z2Q.ӚUjѺfŻٲfF4#ǧLe<gX=4Q`JprP*ӘQqJau*LVzvx^p+|JHg9p)>|$
:Sx|a#v-a..5|T*RƠz.?4=ሪnvWZimJ8nd@w}*Lfj:>Or:t1eӯVf)+>]Д`O'UK|F][өuõĨKY[z6WY]	x{)fe [ܧ㔡c%ʼ_pn:9ITP"L惂ť4 >|QԗKJOeKW	FceII:U<<a,MV҈7҄Qb2Wlʓ[ãCZc)u A
YX6lxԠуj3n"xn#bMwX%O
_u6ί5Z.mFzqr6~Fú-5u-<
͚iy|kML*o'2{o4!|+kf}C!JoKRя'@I
"6
5F[Z=
yU:SF{#{w /"[xRX=ᘆx?ax"c6Y'Ҳjt`&A/9樎!~㷊{FnM$k-́7{
oxKeo%#:93{
'/Iخ}
4C̄%)z&׎
RZ\ėgfWkT%ur*6r?
/#X0j+WL{<a8QҴ>.x?eЀqy:\`L4zC>liKpQvI֕:yf4MNUšWfjUu!B]IQ)bogﵲةsx#ɗblrM+OE81ĜG&Z3yNFarE9]L1:}7FӖk2m4ʠiRr4*Oΐ35qrr&g?pZ,ݲ!SeڐY
rB|TYjMQG҅WyzSa!R4gSޮj檚*-:zg$T5ZzM`1e.dub4xĠ>
ъk'*isK;7I7@jȱܭrp[+W.JSnm(0[j+|]jd`'%O@caJAZ'X	GF'yOhV+h0j!kBMti&AQ
̈A("zC=iv}*6
iQ!"&'OҪKLowQj
\&-Od.Ʈ;fro<'fPU7nU<W eSFzHFyCGwy~$8e6UN$4~O'ԯV(TE%G,;BJ)=0\|eAWИ޽M7OsR>	d`S8]fQ!2zjm\hͺja
]܈n4z;p⁒M]{cv?]DiZGm
v^Hwt}#
 -aF6:$pJY҄o1~M==T^6Z_"=)h%z;==1x	2-1n5A?>=]!0T΀nҫRڙane=P$Ìm1m%eNhJ,/I)KH7hff8Ɂ
lY_F6bAˁ3Ӯ0DgM~N7ӆHy,]GzViv
ܧ~+Lv
|ˍ2cd~y{(Y{rI(KZfzS[of|hv=s$1oi4)BAQAMY6S陡3?a`;L'*jP󒌮tvJ>d(8?<&y@ŕn3 ̈́zTP9ȟ䥬B_,Nn>4CGDT@tF>vj6|3LUM
h(pb8r;@+f*dppRyB&ϸwׂdfAsÆT4!QhYp4>B)}:MWQ6+jӌ ް׸ҿ	Cj|d1W1EvNVBSe"PMd:.J8>3\U/1{o.Ny|(=dd8|Z!"bBx6Z0-r<R>jZ{L,Qa
`*dg|mv7&N܍ʢIyXaa;Ǚ3vK9Y*%G)
,Hnt|e),XO[⭈ W֖5ȫ#r:LG6RA8~z$7u-^ūsDB-QlǊIX~;0v *KWt|Rf"Z,XE>%)IEJvUȖ4mGuzI!&s$=xB}
4K%i.+VIe$;3g
.&Ż;.]cƄx;PPQT]EрUG9)#$<
#؝[Qdv[scg,pE2Tcq^E~jBGmL(ۘP1lcLY(l9fFvkr&4ٯaRBB
iMB!#~cϿ y0I]NUv+Hr8$ށBBRTTl&0mws+mQfXD^]ܹo7s*sTvnjJ[Vby pj!i~\}׺OQ6ԏptҏb;Tӭ:Ϻs~:.tE38NݙǗ$(W
8NK%	Zq}ә:,b8b؏YȪy,ZSD<ٸ^ΗZG=czva0F& 4;%%. R
)BR522.	LAHcgV{xHf㠔∔92/<*𺜃d (K)J,\VVH'X^Ϛ
R#>dٺK.H}eO/nŃ%2
^-_HW)rS#(P'R3lJX[e^;n$,Ō5<F#)f\rZqb/-3Gp5ޖ'oZƔg1n(peAmmq`m59Lpk59Z..i
hw8F^a3H
+gSxvA&4VSl?4YVN(^((~(֝Sូu~9gQ0;r{Iwiǿ$_Fp!եM*6XNAq@jQZYLqHʕC+s(͙Kyr_$suovعdf}X+[,[!*^td>,q	r#S;4~&ޣL^&1-?$r-jkL4lw%ϲ.a<'ϓdB|D9H^oZX,So(goʋ$4K$ޝX!/wG116ȕ+,㘭6ÚPË~5ɱ`;w>+9`mмM\'
&kcPj&er8e[(uWՈJ[6aNr]5,a]~|u!a+J$PF[1RT~J<d]RK';['?_DT^cVeZ*TLr4=[vs['yEm<+e79T;#m`I=G^Уviw~lKQ^6mDDzkVEgba=Z1>QW*F\q7"Hr yutKdI"pk>pyn>T~,Q-0(KCz<ex7|6ycy<A:HWѣeyyi"ѤLD+1W^رk2 Uf-]myY
:Kf~7,=fXRfO%ҡctXӏLoۘr='oп.Jh5M;N0Cq7U'F%lH-x֢MĎs(7xC@rˎ[V??PK     A  X;  3?  -   de/cardcontact/scdp/cms/JsCMSSignedData.class[xTյ$g2sB Ƞ(	R`xKB09I&3qfUj}QUbZK/[w{^sNN&$ޯ'ə3{77y4G`Z"Vݑ;T$LW7Zc;HZPpq4M/W4rnY	'["x:IW"-ՑT5ѶRN	23*F`<n7-p*h
&|)ן4;tC2H
WAձp1*}2)6ԕRՋmKN|L#RX7x-lB!HW9[p^6,mKMۆsIÖ6$d0`GWb7L4}|88%dbcav
ea=Նx:a6쎘u:.ڞD©t̴_0Bm3j#)bRA~%ͅd@5f	Tz%e`LXsu}-7E[f<hab0ef0aڋ@c~kqcÆk6^q͒
>\:j
b>!v
AtZC:#T/4oѸ>4=Ug,![xƍKV6,mZհ9T߰),԰zA⦦
[446.^PZ2ؚU͝UUS3gU5Uzhh-_Z)S^m`
r#vqC)`ڏDhb8"UƖW&GG3M\j`3.(]x*G+sxZPh;p
LZtl,(XT:I-M"*;}؊J@i	V&
թ;ThRT!ed#v:q%'7ʳ/V[O!@Zo\aBZձݤ*RY`ӌD[LD*jsWUx鴕N*XJh
܀T1_	,mRXV&&&Knt0cm	Yh1r"ٻDLUv[T܏65uGpnHޡ:KZenCNi3N=<sk߇x Ufd{8jxX':/ZE"b&}8>ã*,q+}>,8k)a't|%>K2j~XQK~	V%xkQ=lJvwITOҷ
yqf(br`:"3ѕVMQRtj/8OYb')ˇɂ|3҉dxj9+YH$>o"v4Zrݥ2<©x ct΋/6?LrZ#>kox	V9ΰzKgMK2۫D]/ˀAJ+~zEe o!~d`J\u(_OtϔM}buj3[{4>јAOW
9boVԣ/~ϓ\?2hJ/%t{G6plCԿ	I#&ɋ@'e['<.L ,NsA~PdaM	-hjՌa#dmJ2jU$dqx$_6Sr]MИrQB7Đ"HhiGjr5i.3JJtmHa;3h78;4}ݶ2Y7-n'ͬv;@nllaWrƵ+5aU9ϐ=V[ܫ'e!pL[2͐rחۂYJr;Pa޽ND1-kT*'Ն̒
_	u1eF䞬)8G9pG{e>땋s2SW7kBjͤO<a߅$sMp#$&.LuY2kp,S_O&ڗtE]E</Yؐ%ibGlvU88N}l&k3ү=$,7d;l)"
^V( fQ-T4+kuYl}f:%A٤ud[tX3lhHFl'a) Y.#ɋx712+p<R٘S]gsب:JY[V/]sue(D~h<f3Y]*x2I(qӾp
k%.a.KV:[s©^ю{Q{TZ=5es_wYEM,|ߍ
nAp$t$l#'cdgvOFMDk]
;I
TOd,9
Rv	w:N"L_k4MQ69pKT<vLw&irvTw[_><brsq[XjT"+n=1mM%{M;rNmդ|(xtɁ-9!/k˒t/9֛4=*GVe*D\LْSn#"h^B,mO-<\I]<̘1]!ġ<f9ߴiyZe\E=';4ye8>swCŔv|ld!]=OkNC}YqVta32KbhQǼyAtX]Y^ާl<uvμ$fFUajn,M23Fdw
76m
̿
~nJ{r60LKfG0ܣ	WJR.ئ~&q:^=|Y%xJH
J0HB#O>Pwph;%ҹ]i[qVֲj|v(HkLt%#沨J\U]$HE	w1퉖W~A_芵X.>:(AU ɯ5]~NUuT4ޝi:ª9g?(]ԔՉήHJr_lbV4r:~)]#I0qt=A	E.;%sDz?Wd|ad|.j'w9$?(It+M(P[6iavف;f:JWьyB)1T	wsE3J+=csz62oILx |xjaN<ঀl`QLf50t=A,:l@
(Qğ]a7كR\q
&:L9fιnEn6amia7s܀$ሤ$m.F]$5d!{})@AoQS$WvjHr.S3҅yayiH=9t&(cvQV6Q!
&*Fc;&k)3ʘz*1cyl<M}Ql	R$F)kݹyChԬ[Hcɭ~&;P9$|Vdddd0wNTH'u(|-O籵VyΣ7}[(At
211FgjE= YR*KhaϦ@~&T[Щ#Vf*Va4~~ALƏPW ?E=~USWE
g	g<ov̑;e?rygmjW\t>r}>k[{d ru}|҉pO^&S!nƝ\g%<" CG..:	aև?18Mjك@;5(mgVϛUӳqLVO9Peޛz%+7y,7&Dd)D0[I1e.l0eN ]]]]7;ӏc
A9H@>$&YcL9$!:b|ܝgڣsrTh75I|[OIQ/>.pSD*:Gk*=x0Y(h<2:N\<-\U\U\U\Mr*#,{R>~؟rEc?GF shd^H,m3.I.I.I.h<-bʄ!<bS܋)9H<̣>(kuSzR:~2re=ҹЃ[]!XYŶh
r+e#6&kۗmGmGmGmeez0! EXI*qMx,&I_?N<Ϙ+=x<2dEINAqu%JtY%X4duɪwɚ5:d\Ƌo~}Zux͑ѫϘIwJǾ8^<C.ZȍDx\J.oM.dn\!"j+rz.Wnw9tiqybzyE1g(>KVѮwOu.JW|a9椭 =ѱ3vAB~.a=-bâX[(+DrSR4gY2G>F>I=Mo|dN~{qx{\?^qǄǐE~frhYeF3Eg?syeԶk	aAz&s9#aҋ-(W5vz}hA7}n6]"~nzn!clkYFzmlAsE|#B/ZG?HEnߏ<*R:꽤ꙤEJ*R뵾ĈƼ=#
?GkO 9P|\
zdQ9vT`ڒ@	[с}n@ BbS%dny&6MCR* k:n|M3pV(<Sp츮q]㺮ucxhNSʉ-'̌m<7[N,D̆$$O_~5Gu\ÎHoRˉ-Z-SN `:+,pʷ ((G袪sf|MN"FO?GY13F&6QMXm*&0h1G"
Yب\j321333sLlp2qL֡3ߏɗ]&'Ҽ̺TTNViLpZR'
r&kzr61m-ZmoA
]9z{]4ZD6X
/͟ Zgx쫷kםZ[p6+.V,QRxִ}l5vbr_Tlg
UKc.F _@3:J1f!^Sl.yVY`0Sc6Ycda}	߬vQY2Y#a\қozF6v0YCX|v1?ٝ>2h4QĹZSh	NKNkW-whitiڽYkvuFnI|Q/iUFunj_{sR{HhY_iZ<Ơ}t"
+E/ӭŏy4R=!c?`K%G,ۆ,zQU7:@|r]:~Y=P>nWߏ:9wٺ/~,WUd#~E0x'}@C|@gwX2ISX<ƞAvb-Qyt3BsgPK     A            !   de/cardcontact/scdp/cryptoscript/ PK     A m;   /  6   de/cardcontact/scdp/cryptoscript/CryptoInterface.class]MN0KӖVeٱ&"ˮxc9 
aG톑f>͌pDҰ".jj OQ"M,1XnVvzz2E`[' U4@i 0ɨo}U~οؖVۋgIJ=^ɲX_Ƌ8@"E>D]9|b#<L4'XPK     A |w  '  5   de/cardcontact/scdp/cryptoscript/JsCryptoScript.classY
|TՕz3ɋ$	"/d!bH`B%$3| Ekm]ju[Zkw%PQZnwںZnek~f		$_7w9s{.g ,KۀǄ>DWUO/JxE=BVS+D#UҲ 2
Sê
X4
xU8Oy'O[@V8a%S	+#0c\U5D)S-jAv	ȥV
iW54_a
&&b7{\mu
MYxw"V(tTئ*UVbl"K2"dlA#1C3ed/-+	%Xⰻ(	%K:p*fa.10̥[Æz"0l	+K%@\w(UXE]eY(C
'phVSd՚DWn+JHBfJ6n#ueLٴml,k5P%Pt!XHϻBbJ!tMʧΒTo*,,RL3v'b$\9Gqit4[qZ&jPdk"s/g_<:u5	L ͱd-rZ밞⊦E;:;{J[Z\Ɨ;/7q9;7XѮ,l&M&ǃ%ӪTIIXae[\iW	<8ٞ1
Sw[]|7$Vf6FTKc_ga~\-0e$$%	+KttFɔ\n"z'bd<wDv$ODR|AG`ΫnJ;dٲt֬EKJ	RO/C'GDz)ֵmPD
ir%3|	2/-otAt3q->JgYBqii	LBBc&nJ&CJF$dfBEVO<իrt|	urt9	yj5e O]O'wpCήf.و㱸}ߞgՂ}oC"g/Ԓ1uVR#eIfEol~|Y`fDg.VjeEK-^zy	+L-+CH֑`ja<B&-mi6\f͆>'oउS4N3Wz0U1T,?=FF4F@VK(O88wR*Tl/k4
?,'ȷX@2nJ6IaH>hs:PwHRՕkLy6-APw>x_.@;׷)ý#İudHڔi[$D::v&=-TPi2G1}ZJ&mp9{ʆD:VyӟVηen
Ô%菉`!a%CvL`O$ڿ@Ƌtj%64pdڕ<. jDk82foGgX0#fHz*vj;,/)T,.ǲZVOkyۀ/L@9>Nb*7?-V
xgؤi"a 
n3i5x2It!D6G֒2uۓT-%O;y#'O'FF6 5ݡsǵl"]Qֱ`{Z7%t*0ya#-9NyKd=3YWײlك]JW$#јSJ/Nw_z}r{=	eZAe<o\SOCEY-t"lH.d7a*^9[sA!տSb5I9
bRkd('`<~`_?:^I)Ւ+N 		䕟Fp[ycs:f*7fnd	sФTbr$
jA2nt`SsO?UUqqJ?.̟^Bi{3/r*ssNaUs
˫=Oc~s++Rtii/эilİ (<Klx[5q5	?!69)^4\V#+_7T9nSuG3Վ7Y  nȟ^vKS衰~Q]z?	zQ_'
<{
5ƈ+jB#諐yA/>
E{!G?I|&o'1E3w`1f5ky%k=ӽX7y,z?c^[sϭ*.5/M3u_KQQw3C(Qd/DYL4N
u_:as(W4ӧcIRDt<BE}F_i9 ~_;8W%X>Jčo!"7ϝK^#T-$(d~l>g()zc,*
,7U.wƻ\]9x+7,i^Y?Y4Ta3v
?uG+I{9,i*CE<<pG-aQ~}T2Geiы/1}_&WȵWQKҦr[R+?xOٴ%jUi;Cgw8fȚ+7˧	w?CRoϔ{Vw
`@MRUVYRoq
tzǐ_㫠
}^QRF㥋Udt۳(x9!˨zrXI+\McG	vg5@>abIaE8v'42zAybwaH)
w;E50^"k04JNj>GY |ڰ
Y
k#0vlSEg0dLjE _E(Qeb>QbE.E&
	AY[ެ-o֖7k83U@
a@hB}KS&bCOK衃)-.UWc#D4?Bzq&?4h?4h?4h?4h.o;.H؋4a95^;? ֣QgE+l%?;ȟ?;1OR,'+Dk8<"viۥyԬy\5^G.pTz۪\9Oys\yϏs3ёcڣCǐQ>ۘ۵Wzk	)Eb?zEk'qn76q.n!qOvnz]>:g1=0#esq7M|➌9Y{d:~]1sQ |D_&?@xw'k8!P!,싈U"]?d1/58_z?i/_?L?_Z3S7AOBCNً;lߝI_/F]=ww!Y]U]foifob<{uۘ!*we=ŋh/MKBL7x~S<"5
uBs
i<>k>?}~\W#bMMD]d|#L0Gm~5
mIwHw?m
4`H.\]AFPhF0y| 'ID$@)AE3;uughpS~v=%xը#ah
l#5ңF3U.GTYl:oL{KZ*TrTfkZracvQcL4i1ARBz}xjI|·(\۬K|dSR]QAKԵ\kZͮzlqNWB{_&\RAڵg۞iמiמiמiמiw<.QFNuط}Y8pR<vvnFƮ)^<c$OU
N5[^Z0]W} ]/k_PK     A l    .   de/cardcontact/scdp/cryptoscript/OpCodes.classMYO@YP@DBMT1QJԥ1ҒRMj>4ޏlawݙ @BjքՄ𵦨54=5|)
fzGK[έfg5ՂY2<wo9U"P%#) SKđEdgAd4~L|;I2e2٭i'S*jY3\?>sJ1jD$Ͳ{{+=YFf2bKG*6Ϥ~<]ݖP`[>k`z@/DvQ!qt8$Ni(zx!DMg9i,zx@^"^F׈ě\oPK     A &n
  !  8   de/cardcontact/scdp/cryptoscript/ScriptInterpreter.classWklwƻ^aC%jIā8bYl,$NGy<\<MR"h+5jEUU?*(QRE3	ڹsG'sAR
p۬dA5I|5e̏`)MY
D.3DАO
D`瓹t#Mg`9O3ϵ#
%Z܂R! ;zK뼪@T
%VK2p!jVg#MGOOmO#BA3/Xc
e\.1
i<Tgm
ϼ`v&Kvf'Fөj;kT+p*pB.n
+
zw7jjq$zt}FȎyp!4b-[.+3\2F\L$Y;c!lq}_^BZ鮱Ĉ:٬	ݳ<Ʋ 6),aWس>Wۙj	ס"|ʷ޵!\w6
z[sXu"7<>fe
8CՔ;lХu0~ފ4GrxƖ7+VrٓJ[yzC?Uo7i,=!鱑?!"R25=.dB<?B)z[hFz(a|qZ#MWaC͗O'm9[U-JgcVnwbp3U]v21ڛȥ؝4
yuWwVhtI'FCU!DڞȊl?|.ImSWu#.}cA֕Fudo}~2
^`eT^_mI1Ng^ypvPŠΨfl)	jQe#R2R6X_%jic9bMi{\ښ֮_rG₋I,,--%d9loA՛}o"^&0a\
	Q3e(㳆b]834j5֢;`#HO
.4هf#Gy%XX]#lc[^]6XvBh˂"mhowzQN%q,~wsg=xUE2p0#="yhvz+1C_c<\cԪQc`-V8tl@9;zFމ
\9:)jwPcK;~V
*=U?8)$0^v\&oEELϜKHW`ۇ0bbne'"0~v{`qc	_y2ͮe+=.
x4f4Έ%JOqU\,^	[[mA^:V@O^wUZ$FCLEl*&}Dc[">L<"*\=:@X1SMiloE=KÞ_hi|K_=/Rm2,ŕԤK7g}HŲs:wFB~~c
k	agI&
풅@#ɫ6Wgű'XwW	EsSrdV.Wtc^t^u.w~t}H"̨esRacs+W	9W%9z珌x*_T9gId@GDAb}Stfj:U[m(RR?5lYaeαG^Q;Dmq+G,YEd?:&M񠠉1%JgQ>*'P1n=$QNFfaSjsDCShi4ֹp%f<@ux6xֺ~Bs1}U
C^B =:5K#!n>`$:&'=Dsā
PKP2T˱ZEѨbhVج.6{ԥEa*Y!u `;RSl~J, óqT~1z"ylFyi5yž]c60
)}3o^a3ltϱa3xi=%Iu+X:R(v*s"PύZ\S-_T֫VlTmOVtkW];OmQT7R7`J«Fz3ui5aѥ'#.'_ã.'$bx|S"<&{y!|RR3*Q0ڸbNHn
gn:Ջ"k1C^Չ696l(SXdn޳ء"vyl¤\6x싱Q8huVyO<I$|?2R&͎WE<~333/;xis{'{w7 :)3o.gsy
WBN9-Mܯ/(h_$Tr5򾩙wQaGQPP68rxX*	OxNMEuQww:}guGz(9̻1[~$FpO'(QvƯJ?aгPK     A               de/cardcontact/scdp/engine/ PK     A >hg	    5   de/cardcontact/scdp/engine/BaseCommandProcessor.classW{|=7l22<T	a+HZD;IlfYj[jڇaUVQ`V[[K飶Rzd6	 yw|{G #THdS5=aZT芘s	(q$ bTPTE4+1
G8!;Mt=fZ̮.͈n̈nۦ%C.	Z13N\#bDWX6VEp~H$OP1FcmzݞH\a?JLb>%,+M^tc=S,\JSliԺ>i_V1s
l]+pV#IǴ}SQJBCf
9_	
T|	\bZ.X<J nnPgaU>~5
	LymMh9[
G;˱D2lq1jJ#2U|+ውeL#ldAj!9ۼ RaU*V˰CK:*!krZa*m moP(
˴
6dׯ
2T4E`R41")td;K*
UlUm9kz+y^؎d	(OH٤Hjq;n^lC#wnN,5R`خ1&^z 3oۮG@'
T.:mhʹ ;H|;͗q$v
G\}ꢢγ*m9j;LMo vZ%	<Z> P &6VDL-KSuN|JŧzX0rN=Ȗ:bI >|^MY`P˸?Sυik\^>+s'=֤_c_&(͈M[.rkLܐ]`,Ոm47Q'Ώ;&J;'k>*nц=Y`]>(05y7U܋
ٗWs	@>M[*gؽSYwBBG$ұ"-4?&2U֭J^*1}톥[V\nPijml7Aѧ*l
Ȳ][V4vՙQt<;]tEzSNWԸ.^
?`<]GuRce՜uTr7%=s*2y>ށ<tɅ.%`_ɉQ/Yw@= '+ӇK)o$z7B1{B!۠%+uyW7wyȘ`+xWQay׳	Gfɸgs]r(ӥEi1ɽ.{42MEsD))#9UkuKK4NEϔ-+S7]?I@Y1c٩{ꑾ^&WLkyk=q.7d">Ė=	=-CkQ1G԰Qm{t(S|C`̤P#!'I>_>o <.	O/&K]Lʴb{YdV0s||@ޘ|qbӵ]qB"?SR10W'Ɣ%)8w7>|I(1p	O^P"|KE\9ථaabz KOq%J
~=5(Oq?hHMo㮩'294pbI<l VX X2vGq>X]2	/ÃVȭObT۸;+"Q\hcX.L#|EWP+KSXR+QTP_ARs,@*e(
݇QU)v?T7e??Bwff[UpP6V)uSRgQ@e=kGYeU!R}r1쒻+/	ʞj_,
y6Izql~)[3L.^Zt<	ü^b1X,$nJ72o܌x]8v"InŜǷL{H{I0v+<~wry/v=f\z%⨘tpRT㢚:ױ@
KF5Q;d)HS8'rtSsjp/wAh/KrqH>(9
,
l=.TO!/R?fR2ong1]]4^RI녽V0M#
LNQv72LLW0ROS_bN	v&+fy-~:q6a:˯gT=iĸpiÇ\O0oyw3K"<#

<#W>~?[px;w&P?PK     A L;.	  Y  1   de/cardcontact/scdp/engine/CommandProcessor.classWgNlERrِsR@B ݙ,!ҋb9-ZZG`
WնǊwvvg}}k \OA*%zXSfaGgº0L=Euv+VxmiXi$74U2
@<k5U8I=,:XLDj܂RN?kFZ߮2:P;D8m5R)5<V62n8-`J44P; ʨQppb+B"YvtjDeJX]̜uT(Hlw4jqLl;װ Nf0-;4`.	M-:c9@TBKiTS@@l%mj&)qz,ʚ03V(h@93]4EF8Ϻ^a#W]=ݗGSGe~'uֈj	<Jѵ3\M~%V:w+hCD':0ݩhˀ$"bEɸGG$,eLH:;F"Zw)#
^?0ԔCJSH2ڨ:nJَ2)t\[=%u|elJBPx	3-ݣL7Np/2WBwB
 W#Uw4)%c'#VHT10,
[>Za/N{DDvO\GsC=Ir$+kkzTײ;bAʮ*H[.=ۼ%AA)H I3Kl0[#-!B#!)iuQ+1Ȧo0]%"CLaGz e]=L8lúVSBuԊ+Zё\Iô@Gl@MNǢ/Lm]MG<%ub=laj^#Q>5ߘgϦXKhF9buqE-g=J(3£vգ)O)	O46ˆ2_O+xsus
>ϲSKo-fx^-+>Ьy\9A8_il5մ4v	kKݍ_w%qN
_=J.tryIDrYSGwE*ƙ1j)]}%K݊pQ*ɦu{@XUڥچx#}n`]fI7DѻBٖNXt_ė'2&Т7suϕ2^NRI}?|$ҪϚn$Ψՠq/lXzQa&qlP4CL%&`ψJ6r+9ǯ#=IBq:7(edx@3IGLR`_9$M ] Pȧc2WIuN +{e1,nmcX$c/ecΦq@UL`1랂sQa&ך\=39mZyZ_ |kAw[@Wc6+C9Gxz'qrE/5Բz6sQ{DYqr؈D[{wRC7bǼܯ1>;;hQ'&A$2p7B1ҏ~S!ҟ#<0gnK{#B[ýB(9;ϧMLW	
R&/5H2uʸ%-GW~|KʪS,mܰ,Bln$:\Bv%|4KMTtQ=ch=͗p7A*j+D赾	AsSM[em8_ENxd'(w2G$|{M/8>)֧l,Q7bJ_MvW.]݇^:q.Ncl
uj9B]drAwYr!#8)r &Y&xrSi$~A;xq$R(S"B~Nrjě%YW5W9;\~760uޡIj
~nr/ghӻ;Yğ<L8K*}24}WX2y2'*\fH=qPK     A 9  C  1   de/cardcontact/scdp/engine/Engine$MyFactory.classSRPN4Q[/EE6;Vqܜ&GI'I|Ψrs\۟?t	$eHRcXq}|3\k-ŉ︧s-7ZOP1np4&=Gs(Lc,r>l?	Tx?66e\cX:ZPn&zȽڽ袆[MXg,<j(CkʟOX1H-$.l{<%hg|M?<+xI	ㄡ<+._6!X!K[|;Pwk,#A|fZ$m5'(Vzej5;Izigf	X'	ߠ~[
/ a -%,(=s9KyRY)cQ`,(d xE&zPېQ*d+X%3klB6hX9FsmԿB;ِO20CBR5Kjca%K|_PK     A ȑ8  7  '   de/cardcontact/scdp/engine/Engine.class[	`TLdxaְ="CI@`K8	3_ۺ*Z[VۺjE[[Zw{$@w]s3<ÏXja τǂ]h8YvKݖER+y%-8X9vU[8md[{Oz}LMRn>=ǺXjm	eRp
&JV^Aw#&N0SΪH4R'TU;K4WO} 	I;@K;;cOqEaa&f	&+4±v,)X<J5jHWe"s0W0.5ۛʖ7|PPZyQ}PS=hp}Ԇ.FRe(<5d-N-h/[V0Y5C[J6U&Y8EI\4,6;(XT6Op|v.JɨlqR.2gXF` ?7کv>,. cUCvwϲp6j9sIEڜނxӜJDb5cuIul4nN[SՂIC*LS^4ґDY"SP\C!^rV-<PȇfsjO?͇ɇMlmhtRsEu
k}@PȧPShC!M
L6]WߤE.VwDR~lAv6:'
gPNAG6VN[1eD(@
m(Q0%K6+g,C|%w6A>[0VRd+G ?!+X??:j.TDsY&ރ[:	-rkr^1m͐>lHX5c$g
5j-\kf{֛)aGǧTKWp=L57{tp9t}mFDDv2ޛhmT]4V
AoƇM|-UPy|I"urhr ^nMԪxo~GݣW×Im])F؃. VҢp{q&a4gq4@s3>i>O\NlvUB^>	;M{=(x	>hP̏g4Ynga?0*	\f̥Q9V		hq#N->^?(Q-QmrЀmx',<5nloMk|}VO$vO<RQܦWQJg&hV5L|,3L׶xww<FQPI~<+!xc\Q_LҶGGۣެ<erDQY4ll	߳^Tq	G#lGRBeQIK M̬>x	?T3YBbvj%OU8DY%2s&]Ibᗊ4q+j
C5
ݣ7C0-o=Fn{Sq*A'j3m?V5k5l1a៊I;O0xx9T̾>ά5mF=8Û&c-9 %4xjgY%<^`uK, X]`wv&:UCT_|1VdisssԷo-4e%I=:DXck׫ѓ,	Pr%St9C
+0D7rʓd`ޠS*v1!KP̴dvq7>̱dcYأ[ǥ҉,9dtv"_R9iI)LG1uLNR"JUd\*\rv0J9ENv&KL9ݒ*
CRqzT3,VMnU-gr,0mYr)#u׏Fb$Cz_)(>xU^_e)-YHx}sv_3?'+˹C;֞T0	f4:;ju'a^USP ٠2[Z,a}m]z2ZYYnRo7lUUoiɅ.2WT#[VAToBm;^gKVJǲ{(T^ޫVE\"(߸s;҅<$nJ%dW-w$VG[>%H0+	C.Di	@%gѓ!CeOj0Z-j8}Oܓr FC"QNqԩڅWio҉N+(\o9hr(o
렝O%9]ܱCSC<}p3 
OsnҔ[	ChGkd2͔ٽSHXu;wP̄b	{liTƀ;J9PǠz'Bk3zI߇̌L?
RnHCv3qʍsEɾwI7H)Yv=]k!HVyB3'do4ӤGbz|_z*t]k=5mtO7fiPSץH؁SX;H2)]za3TwFPTQJ>w63OUda&7>
QeN6vSD$ݯ_*mK8W<OKޖP|d]ʔ糰Ŷc'<9wezxmӬ	BϝdiN %><yg2ewV)#[&W}&iuU0uܙ͉%9!*4@n$%o!gp3MW,EE#X/vdn:݋r@Eiry䥘[Kj
'$w%S~C<;/Īx"WVm:7LIu	o8uJ%d!xN<"=/}/2c")SE*Ф=-yJ婕WRyv*E>y2."	sy2!ayagxasMNٛp#p=j'7Cp\CG͑+	ٴlA.3RĘ6q]NǵVJ&f g^=@z#n9˫NpU}י"QZXzRyf<C̰&}8L<}f~`^iNW8}X܇Kg>9V։bD&jZ֫&3ije5G۲nmcߩ
]ٶs33Ac֢ 1IBbލ*5xpp%Zq5q
ދka| xk?
vKnK9sc|!;es:M2Ls@~)aH׭wЕwY:Y
;]uaW̘y/fX\)>tކgߕ+=ZA)Ә0^4:>Z\y?Vk͖+xԺA])WQy?yo+rl渢^J䖕Bw=V^m|[1ǹQВp&I[eBwpqTWP (B2zŇvieӖuzb:}w\e
encCd٪|-^-Gn;([]ZOZXv-^O*pզ+tNղcKf HۮT|Q`aZi
H=ڿD껊>yӵ:n{wzᅥ$C5h3^(
@^^{lGpàM#^"4'>!tRϼzI7er:ӈb(jp>|<IG0n'>|+RmǠG@k0?xWVaG1/ޏY>,x"hSqEWV,XRI2v>edFRTK9V)Pc.~/%x,x&BOgi^3܆y4NywsOɧ	2l34a%6ganl[¹_16!S)^uc |t|_6AQXhŊG<T
{?&e|"kqEXqKd59%D7M&alD`5א(PliզV+y їfD+_kbi*FG]|>8RL㳱EgY*V*<g~{yDL=kzga	X
__BߠY 8?mW<H|?fUr
\K^ܻ]w-'QF2{s$SF.Ol|:Zv`<%_FZ:Zn7ncl8cۃ
C	 |PWi8+־G`BvRhNE1!MxQL\{p^tq*$NRZSEY(F c͉t̥zud^J/@jpL,U;ׂR''`A,O<e
6m{+t
>1y4?Vw/2/Ad.͢(?OH4$
ͣƒ>~ӏAj swGVp_ѯ`&LIOs`(}a39
V8By%3vy2sE]+%sx6޴ic<:{)yZ^"<μm&uX!m|#
p5<JqS4fHɘ4eeC*/sx`>~?_MæލMrUɋ4_xy9D |=G =8+oor*)f(+ÿTWyTh_EPt,DyaIa%
ɪ<XrDtG-W|c=Vv@r
|[fSurj9< 2j8"ֲ2Of,s]L6bq@mCuL|G/5|O6/HhSiRTzDu?h0ɘP P@^d>1R4.U9Ӷ[p;x
UuXA<Cu ~q_~K ap̪Hi2˜G`rwЃ?nt{JpFR<UTqOImQT:u,:̤
}rjY,O4K
R^1oLU9*OV*ũAiUBc|3Yy{fkU9ais_:^!M6a`L16;cъEff\%ƅ6.r#sv6l5:6c+v\ntzlpO's1Y~*?,&?_Д>FN}EW3H/t3p#/W{U~-̓M,1uxϛ7r'78p4WR8(;	]}n {à:{}c.te*1+wA<i\Ik_	մ5ͬ膉zQC$vA4!YZϑ`'c`J@gAq;}Ɲeܝ!<W+G),aC!#1LTɏO!=@Ls<Dԃl<"]%zHkZ8)XBE0c"CUodj'(u?^?k
yL3EE7,PK     A Ud    /   de/cardcontact/scdp/engine/ExecuteRequest.classVsUNnۆ-WPZ$I[PhPBhZvMӦI`e'}vtf/3^xտFa$ڲM u2990R!5DtD8o6Y.fm/ވ@8nG5u.ۆe:yRL3\+dBlc˶UKRNԵ*Klܜ]*
K-ulFw-DيS0+wiH;#&ŴY@jt4^-[^RVl[um7Wt_wseLVuN\-ײ^ұ{B*	n SY\*l(9{ut<ǴlG5g/N)HZ޲fK[:ṽ
ǑF>8@®&OT3|Iʎ:ڵ=xũ*pfMUu,-=jt\-
h5I=udZ$!5Kƕ/
%ۭ8FpR)8-UI3059ri pcgYTEP8sk0|ly3<kzCۙ^؜0ӦSߵ͈lM{M1̚I3_ΘւF?	lÛ2d*nd%fz9I6}׵ZA~~kŠ,I	t-8UV@˞PيL耓 )_]{Z']cx0a.*(Su+Z9 W|ġv!zR3DjG|/5af>,8)'_O܏r>"-@C6ɡS	9CWWIؗNDxr_tp<va=<.`/)Ox8'%׀o&0	*JB

E(0oF̳$t*0t"A '[@:œQB:ͯ!jLMj4`eTBj%cV+ZIQR^BpԒ>&-Ƹ=*un:c*)Yeo {
Q1Ub|351Ӹi5@+f
d~;V3_	d;W3_dwwf|,q-RA땋0$GxO}k}d/78PDlC&D47KDRD;d;$<'X$ưxZuݧRc.,2+%f-e=QŻ;?2>(\<^x5ZPIVEo"e+Yw|Vҧm1EnGOlӐ~SCH ߱y PK     A =   P  4   de/cardcontact/scdp/engine/FileResourceContext.classON0}צ	
Xj6KNH;ΩJbBbQҳݳOo
tDkUJ=k6Zg{qLpDS9W)^uGnmmx.s~/yU0a~ɹ~y)iV].um['F657)pgƋΑHHS'C.q'8PK     A nC7  -  6   de/cardcontact/scdp/engine/FileResourceContextFS.classPJAkuK̓dŋK$Ń'C"x(wKhk|{p-9|Q"t#HF2&6PX*뉺PdJ㹺7҉9%䛭<	˙7ҩ&IZ܉@'V|L53!K"Elz>R&DP:`p.ʜ6[y!>l;|ߟe.}k\ˌ~;/pµ<]܃}T5jPlul,<b]ɒk¦U5 PK     A J7  ,  4   de/cardcontact/scdp/engine/FileResourceLocator.classRMO1},	Z |JCEB,BBE(nήI6jשYpBG!B+|7c6+(X7!#qRPUZ=BVo1LhDF[X?
ؗU$OdjI [&$0⊣~#3щ-6Z!D2ZZoS(icWRu`>rh5L,' :ϵ:[q@Ʈ_Z<a<2uZgJ"u!Y6k^Paj:Vm4\0?=n*oean
c;Ϟ~MQc쿰'|xNg_t_o͙n7,_@S(xi02˘~oXRV	PK     A 0(0  
  6   de/cardcontact/scdp/engine/FileResourceLocatorFS.classUse}I&@(	mrr/VC-nf7m|pMg``Z'ia>|9w~w8Bk؀ޜ1
/gN`A7sَ	wie]\Oav`X =Ո(5t4Axi}F&~`^3526	ed[7I&Iid=rK`;s\հY@t^ϡMCMY\4̤B!4g[lՖcM1`CTZKVn/Erj-~+N^]r!f'g|wXҜIjRыFVg6wթC~zxϜ(:'(t!ҕ7
c-ujWGdG״\1$):Fq<A$uIjP/IͫlpZ`ki)Ⳍ|0$qNFKRr@G!vsܸ1ZƊ˻`Hפ)ów	m@v5eJ>3O2y2i
M 4pf+}.K%YUu,<b&k#Q%:HL*i:(<<ETO)JZeqskiYB[d%*l[`-:T0Km^8!Doy8gzjy׌9J߇wqykK{~8F!*;K<ddP3cH|*C\N+άɝ|ͦDRUT[驐N018$38
R2vkcxՌпtijxϽ2$}UHLt*^aBǤ!9\&>!Rhc=sw@d/G^B5Qk^fwK}[X([5֋eVc=JGq` jM7
5]H"w*MQ\!W)9y, xa	_:Im|+`
pA*.b7.0sVGTc[=FRCctGroEzۯ]'zQRjof9ƅ%|j2kf'Vb_#Bf&Q))HFRzEU|*߰8ugg,sV741&:S<Jv}9EhqHB[8f˄6A:
vYPK     A 95    5   de/cardcontact/scdp/engine/GPTracerSLFAdapter$1.classSn@=
-`ڤКR
 Dh$U}ڬW+	3 !P?BZ Qb;{vf쌿z16H !#Cɖ-|/"2Ca\%GeȌ;!j|hiY4u\`(VqDa6;'G
~lP 4P8ԋ:&Q`HoW_0_˘bv<Nqr]Uq^l89ҵA*Y8UoZq-&*"nXUV[17u܊Z[4qVo EĐ}&\s籘}ےaҢ;ld=QPo2Oq!k`M)UO~x|[I_$MF'-5l0,37E4Ь0J툹%˄N[K{^p`zf:Am	fc~0+!Kd dmUC6bLk?D)܍*Z~̬alv	J,MO!PK     A Ers&  0  3   de/cardcontact/scdp/engine/GPTracerSLFAdapter.classVoSe=}TP*e[AٰPcww]G魷wW_bb&Fc0D
0n&hbb?`wC<+ss~oo.nxcj8f#f	x62)k3^)("ИÚj&4#cilX$S=}OjޒPn
Z1'T&ubtT7F. "jVRE5b:,2d8]7ɤnv/II/	3%	KT H'M,ml't'1pө2/+Xbs"`a&R5-s-O{Z3PJ=@e*MHveԑ!aLE*͌>4*hwT33gYA.4L{ˋw"?fSgIxm,׏kzJֳ^</Nk"3l&,`SlS%,UAq(<ڮ5Iq b
v#^+e^/sfJ-M̲X<` Ӻ,
Dc# q>[1BD#^TpIJyܳkGX&$y|}B)p)eCg	:V
MMU3s{erTG*v"VIRP8u	SNDF2ebؕ[3¢#G辱CSA:1Om+sYi9{ҭɗj(QNqOsk(s.DTQnFj.ӴdnK_ljtz9NA),]ixCiTDg=!f2-E*邬E+rOq@C/5dm&ɸY5{Ģ<&UBZmx滆|9ENSJmF+.Fϴ+=(9i&C78IyVo>$w'tH y4<Y0$
^^ye9/tM1'4+Q;Km%cΩ!j}u7z9q}f.2 x?dg012v2r@+xBm<}fyx99}<uV5`?\0"/J>+(oP|9()06.Ы
K'ŉGģğ!
$Rb5bLR1.P"?K9%}~+17ğ?)
SӢggEΉ
8/-o}xGhxWi'_dM&Yˣ:#I$W*_m1E?:AlI%Ts~[\g"qJI|nJdw\ʊRZ<%k5C,g.-z9Wס}sLJu'
kd^"9FsU괬3Jbz4OU	]c8PK     A ;?    3   de/cardcontact/scdp/engine/LogbackInitializer.classU]SU~NX.
M[[
Ԓ&!dEM,BM]R̲ҥntN2:/9`f{ 7]
	tiу^MeW3kҎzo9WSCRCJ)fa,;dT9r6˛ߖ5b?1Ckk԰]+e|"i(#g<T+7Z#h?4rV9H2j͙G4Zev?.踨(	$uA`HԺK
ϙI\ǫтKN^úD=mz^
pYǻ
pn#r\FHGXnxDa\ -#{Pi{p$KöuQ3'Fh׍x"gKGAÄ"&Nҫ94W.o4}[e4mYuuY[j*LixO5	^fDcΏnUYGk~Z]QUpS mޓN4a"'nwpW=>;8aLܜ<(EbD,(Ǌl鎵!*יI[k2X\dTU+p{;zFԗt@
L옞fd =6s*UCӰrh5-\ϝjڎIM匜PzݖhX{CDKTcS%~]js}7SxÇ>Uo
!>T]RE}JgD;ҏ_|qb*vstOadZ9䆩di
(:9]5xRS}cI4Lǁd*w
#X紽ķHKфe\(1/ZnB@.r_H^92|OB_q{3;1o
epn$q˄|l1%{b&[,5	K<ChO"7E| PK     A   O
  2   de/cardcontact/scdp/engine/PrintStreamTracer.classV[oG=cY`L r`S6\1IMCz׬שTVj_x TJ}l7Poww_n3@ak|ln-	g^˿dqב0p PMLLfQΊ¬g9	^_)</'%XyYYX}ARGCH1dXkfۨJYlALbȕ{(
fooʽ!h2i3Ҋ	{Awp[j&A '
CT'lõ.d8+G'nOŐa8^]@y	_iK.u8+	o-nK9ˁ<p.:1h4k.{_6).1|wB:6ϥ/h9,Ⲏ+.)<6v^6j5Q20	L䍆p(CF }JBOS&3

ټeLp*/ӵU)5AP.[Eː*&ܳ:x;ߵxt)6M
uOhNW'8<B	߱HpܴG^'􈺢	[Х.7ؤOILu5ju3$U&-oOxu}:7֚1Pil`d .ƒQ'`Ñ2`94{yԹ1qwöil$zѥtpaCt1%d{!Jܶ-_PČ^ͦm^싵ÉRq]A7>tgP	1Jܢ,}ƾK{=_pnssrН

ѳE| 菾+o7tW{Cth'>Hne:жqU")	#F$j:p
		EDGw9vDq/p
0|MۨRnxHIm9N`&q`p`Do-Bׯmb&8*]&&0)e$Q$<GIR;Nz+1j:j:j5r-#I&>] {KJ!pHrTN61CGȮ*"FP@䎲eqz+giwix/^OK] 3SYȫWU:%`|l?PK     A @1q    2   de/cardcontact/scdp/engine/SCDPErrorReporter.classUksF=ؖ#J]	@`@Ni@I&OyqZjBIFۡe3;?Õd;$x{9}op?`@By
Mچp5Cx.die0-0UÕvBvD,f)%іJEPZq7]cjGN6DeU%$Q}Y[gȮ{PυJHOu	3hMQI
5tpsxKZyAګY($N8m21\?<pXݹ~6):Z"N"8X|}Cos':]嵵3R=wE[{2g(.F{(1EqO[lP:Ub&2_ISK+\yѾuz2rP$DfL"ʎr"oEl>1GR|<z,9$LN=NT"2!fGe#,Cz(cvߙ=V;n{[rStMk;5L(ዐ*Znv}rm>Q㾿iAoj-P5> Mip&ԗ4蛉F0M,9i<3k_'2h1K͵8@,ET,.Q<3opx,V2Mj$}KR&j0.KI#]/2d)s>FJYJYJY_uFf]Wcqu))]܌qo(ՌncvE%!{PK     A Muϗ      9   de/cardcontact/scdp/engine/ScriptCompletionListener.classu1
@DGMFK{mR
X׿!,<N{O ;L2$:.je(qu
mjֻܶQC¼wjJuT0k1*g´r<M	P!?PK     A 0?    /   de/cardcontact/scdp/engine/ScriptExecutor.classV[sE=LL. ;f	Yb  M$&$Nfd23&PTii)e$TO>п`YMH$V;}O?hJATj8c$=rl)eb:@Ȥiӱ}%=h2mV7&ͼ︄CcJϳAqLUT`mkxA V6Ip3i=Yy1T!`jt,bݕYDYRxQb&X$I%xPݾKT}R*XF&غSԺ:^RG̬4/uF,ۗП*H	
h2'+hґTvaǲ5"X2o̔9r6c:^E3W;`r9oeFRYleLORק^Ұ]`ӒbK{}!=6:^Nmڲ؍=7F2}Bw
{NBeW!}bh~mxC`٠iR<_Jfz<iojH@ҥdڲ΀v
ɤN!EL#KY.6S\WGl~TzӧlǥWñlgZj	oPIh5L_;Yc3
?2gN+3(3EgN*	%;1Yv^õT8,Oa,Qtc)hN1K
L
;"Ro(g@y+.b8.XY9:=wtf2Luyӹg}'PSl穀\wk.
gܸW.o}srɻoNliRXËD-|ք^	Wmsiw=D.D.PuEub		2|.-xӄф2Te_퐜x8ACAq%~@uV=B3{,.,aG "^2iOAEid"Sd쩍,IM+FXn7u5zqwc#ES!qz:jc	
zX5ND)B+5r}n[[qczX	VNCӐipjAEZt~muKK6\@NoTA]5=Җÿ}\l

?3*y`Ecm4imtǋ-ZV2}C	[.^>,@\
P^".Q̘+*?13> 7ޅO!q_m7%WC5}y_`{
|O] sl&u5P7?87k^2rɓmI,hWE&<{܅
xTCV
=.hجq}cxyϿfJY	}\
PK     A uu 
    -   de/cardcontact/scdp/engine/ScriptRunner.classXy`gu}]z55>dǱ8u"b!N6R",BXCqǻci23+Y&
iZJ,$MiIz'E^r~}s ^vPj.;aLO<vL{
Z!rx
X!Ԍ뙓d0Xvbرr^sLcg
{536LyFKL>aƭH+r9ӑte8"!
بahTX_e+-/l4,RxOr
t\%!>ɡ	Ǟ6eMu@>y1Ҝ\d"ovjR.1v;o䄉	t46i8^
c_
-%.xV6qSB8pfl#C{Oͼgٹ(^[6e_S>`L)I-=Y62q*qk"'FhC;
Zo6ԑh

x%Wh[zTt&M&sr=gFn*Ds%h8n)y]Lѧe#%ҽاZ`pdf
HVZnw! "s񚫐lU
{ng$V .d8H%dӦ~n
ARAⷎ9vPyx`nO
.RvBF&#\\n"]m;4c
e;=l.PNa{m{[>fdwv&KD])GIZfΫ&"pbEȢWA"<P[E	
Y|B.H\V!~0הr43xk챝1ҧg҆e	IuʘN%'cԽWF_	L#l6"Ĩd˄~
z鳲f-FFo=A,
WW.a
J}
rwNI7o-ߢ{Z41];m5}[Eʝ)=KGrm<𰎷Ǐ2gEbYn]X^Tر[BRzG{>D2Ҟsp~9F"$~%BXT_hvmgqR}7g'`|(-/V~O%<ͷNe4TO+Uxd"h=3ej#/(.?pDڤ}	!q}!	+gU_'eAuq&&Y7h^Ǳh~Z\$5OKu'
^ƞfR9*T\uJYf:A1& Y`.V.(+]Z0,5Sf6+Mfa3oV:
e,ٯ4SJ|]' _,xB׋:~/Ʋʑ=hg
R/ϊE8	ȿ?:p2Ii"N#$v6/{"
kK/ZV*,~EWsaoH4i4#sʨM2Rԇ:%S~Gwpm`7[&+PRxRA2S;kH*L3C+.1{p,'ބŢeoiʽNQqIŷ%%jJe&!7yR+Ԙ.ղd?Z]BqP4Ms1VI޹-f9p*Dk/HV_ZׯY
Bq}A
wXTR/*S}F?"HC^,SLCIb}c1qW渟
?T|

cS1bfMoθQu%\+WZW5jfS-w+*Y)Y,Hj'"aF.5]}Sc<40\("id) b
v7RUSV&%FbaˊGo~A_z#GgZ?,ֲ,֟8>i:x =`ſ_*s(vT=dm+ڥ3->(sc(Pz7i?}][ҽ
E<f@kn2y\@90y{BX8~c;,n
Hl~Csx`4#]Liz~6bUHYldw<ֱ{Rg|mC*{᷏a+6z	s &;YZc6@\J{f(w
NfpwS&>̛q}x(ނx fqOb0M@}M?lC#~fXn#'8 2S0Qp^UBwE{~:֧؃
|vI^>k4YoJqz=q9y sdSC
-sx;ǃxu&ã	 .౱8q~et[#Nǯ鎴?(m=>D>?L+ި76Nzn<<|9OR§)YJ;K)>>GI>a!j
w1SuD۱FsQ'Za
7=8:}/%1:5Li#qy0G{1
^9}$g⟉c~4ITK,! ~F跁[!D[/b^$K<ˤ|4/3e}ɷFo]

"F4lY16M	ssPG/$srw8 O',^H38[]˶?NiiR.$Tڣ+Gpu<緱t;X܅RL$9ǹ~Z ?<ƹq(qFvt e4Y\n\^qՠ⾵oz*|r>w	Im.+%|}g`߷[:
""Ob[ǆȞ9cb5{;3e뒻rz#L_\>a?UmJL4Ǖӫ0=ʵT[T:fۈylE&
_HmFդQ&]T
jS*PK     A   
  &   de/cardcontact/scdp/engine/Shell.classVIsGږ46c6; / Xf3%Ld<1F̌qd!ˁrC.\!E+T(1U#I-R0==o_)JC4
7c:0gfIV2=lrQjC:69n6w\HgvO拎[YgZ9`{jmuбXKL`LB6VRNhSl'yڵ~w-#@RUs<q
(VxQF'Q*^[zZ
P:54b~^ױk3rF|)v	$}ݧ^Ym4ڠD)&-
MUDjB&b]	ihױ+ad'֯a*$[LvdH؊7H!+D`w۱CN[`,c~n4y+ۡJ/
4%mtiH؃w,@Am[cLj|ܦ>eyktrѣ᠎C8 AR@IWΊVS
lYNaL)g%XJkpdeA a*.$2	5)vr+دl#8$N	,r!0ͭ*a6M=˵\zlsXӸȕ77[3Oy@\:+D
e<vq2?YqOM$,amjI./W̳q1OELq+;8R@*xNUB
7;; YF/6pE`̟]8i]?4Vd$oQEH~!F2ovglǒ3m>T4I&CR+Yi:z(m~<3w.:U`k;HQygJ~4}Z5'(ԜqXDb;y>r"|PWQ'<
*jN5vC)7DxuEp
WӜ,яߵ8|_fB>P|GR
˿q	9
yTQhipX#F@m}Sz Tߜk	~8m	aPu;]lA媩l.pʥe	c
C/ǔ^y);ʲ0NJZX*=8[\ٟHP&JInw>aq<ߘ輇=Cg&eۺ"IQ*U	}qb/Efsx,
Jeb'c8qb?GA"7Y|Z;Dz-:`
(jԬD$7U\jAgƵ/uOLVek$t@{G<$DcvZοzqEhZ]Flki4icAKMXq|(n ^JKH{rܢWj1ԢbwZ[R}:Câ	@<f95}&|O9$Qhp_(_PK     A :0  /	  ,   de/cardcontact/scdp/engine/VersionInfo.classUWG
	$YmkEI &XV,bmuaaw(I7rG$J(af߽w?yx*Ð4w̜c&B۵YH*@'2\eUsC
sUm[][~`{{*LNe}q"8TKctvFYc8_7xs-3|bt
B
u=]:[VH߀Au3~0|!l
;;ZT|}cAim5pt\U=OChp^yQ1*s5dcȩ6`nMi]LuD`RM܊aJט>r
yH&o
j<5Ve]	(VMgQ`8=Ȏg'??955((⼾XPQc	`dO0BT.RPҗ
)ii2bEp/ıPJYi-?6vZ~,?I
&ь @-dH_7=-ml)EJ%WZܮq\sgΪۂn1Me*}\{RTGsʼXλIkP@;0
>	JAFfu}߷l5y!(pëqX¨~(cq4FHY׊-%\LkL	O=HkAcX[|,Npq_nzx
mE6b[0txO}{?w^wx0T^w?+wvy;[*
v(GE'1|Ucr4`\iE- !fbȽ_p[pWt;戾Gwtm<mN6!ѥ6Lb%DLÖGh7	#Z& +x,M%<b
78
*߶C5Z}/tIHkϏu
ٓlDiԳXRGod.>9Pty-Ȏ&ˣ_ɍF_`F%iz形4PLTܘ ͆AzMhMai,cVg2·IS|G?q$Mө?0I8e'	j,./PK     A               de/cardcontact/scdp/gp/ PK     A `Υ  i=  (   de/cardcontact/scdp/gp/Application.class[|T;;;I02 
$WyM$LfJj[cZDiu>
jvmW[Zmmn.ޙL Ժw=99_g>xxpW05JoN$cbٶL;Wת&K^o	&R״~PK0=^˴SX[.]]7;h [Q&Auѧ:OQZ(C&5}>􄐅
mMݹ`PS=_FY1@{,k񌠪i:XAI&S٢iUmTe*\g3WƲ=6=8ƇJ0Y0qSFOI&ޝf2iJ֤%cκ\&<jE Sp[i)'Hff:篋WZTkW.DJ .PZ0%!rl١,rJ3Pǳ6|89>1
-}0&NCtSʮ>tGenSwV!8ɘ#(ϭˤ/u/(8w8'8u-I]*>"?`X5~IO<W98C.\aX(?kne<;H$Max?͸XByrq{-n[j$ZC?sr_9qb#D*"p
}XPXV
;b]{\i;\[aBA0ȇ;1k&(s=yr`F=J*715~Tq^&Xjj#RQ#nKr iG)Xo!.*EN'J᫫V:CvFxg< 2ؠKݧ0,le3tn&!GA^N1,!0qs0ӵ6Ys1o&>-\%}	z3mgl/r 5N6j#LC8^L=4V
c%[_ ])ǊyUdɶBȗ,b+A.mwOH1˕cZHǳ:Uϣ'mkU8cd*OT7ia$곉,܎o}]nqGj;,lǝ\;iHK
5;/ܘH%v(2,Ldr'q}dhB:yڐZ.1IdɰXycLO-%cQ	f_,|z܍YA j!Amcj3vmxNeaH	xDc7S6H$*$1Zx߷j7âA`2D
Q*٬5&QsL*T<ei<?P2磩Zt<k9<octIHFET}ɸM?eRrʟ[xQnx2/S"xEPGU9	UAѲt۲xVĒ=q%m&~C:eYxmU&QjKǏEwo+t6Vh5gisLaǃKdi=O'/EJLZXҔvxy|=D:^d^#b!.N5	Zk j>0JZBg)~9]q$2[Wt:,gHAGXRF}60e7RF	>	X5iE"/$bXG9)eW76/CpDKJAD:P1tgLXB15:qOWdL
gSWiRILc*AǖR
Ǣ,eڒIi>´2#37RG02_Pr`VW^d79dΖ'2(=!mU2G01Ben]";]q.vt{R|#L9JiT8ÒO\uK&ui?#9+-K"3gcF,a%Z hQ[XT.W'ϱd:Ъ-:rKUe_͌YջҒT[$xo[YDf\ ׼ɤ>bxD"KbJllC|j@SBђ>\㬍!0v>S<%W3Y~<^$_NwoX- m;?oeMl;,WFPYn&WĸߝNrasmKIZLQl]=Z#rYM"1{X~JWi7	HZ.MiVp=
ȁB3ܺd߶}ӫQ1$_]׿d9fڐ!KP6Y汪>ۏt?,U6@.Ll_'k]ᚳTkpnPILhɸO6C-6TEw3.nGO"|n擟|¤RWwtPH.TucƝJd
\tbӝԩIE4N^汱.%z{n)
l&u֬$rK·?^uyM;lݕSO?۟\*KS*sdS:b*U⡅dۘkG]!s3uk9H!mC3pHVЈvMfG
BL[|HyOWyƸtQwi*c9ڞ\,3PFeDW,`KMS~,hWc0,H
kӹu꧝),;53#MwWeέW}b?qYD
~!,Hn2SS(@!'!3uIПRTO2i/wR%d<S.$MyUpޮ%
4ҐO(</;VoMy۷L~*'䁂mW~_ɯ}*|CwDjIlZ7@Kxx4^wa&*I|~+K%IT<Ӥ8[%O&5}PuãcLV5cSֱO͐1FҕGXPPV`9c,?Z9G3}SzPz48
b&%EH8
Evꮆ.gQj׸rꄛaP]݅c!T5#huMNZ~,7 S%,Jٌh,[ζ
r6T(Se\
=Upq^|
>/Wzָ2ip=5O`z/Gڋl]3nF+ٵ3ܞz4b|m(R]8[hpՈQz"{	whZ":)ٳ
u5a=cENދE
hhY44o0Þh
=uEh{ϞeO[U4mMѴU
HԴӦӌi,fzE.Ty><⋈Ɠ`;ЀN:w+p1Va=$6\>,Ճ۰ƥ .nlp9~+*>p3p_Aq4rn [Fm!xwzV٪IXW-A-AC]x)Βi^i
aƇ:~䔰1ā A9sjp:8ǶMpѮ:mjX9pF0Aޅch[+6kׯgjlup%0?x~t28P<X7\pqrwfOػk^"Ջ!^q?UGY=_:ƽ`ڳ'ٳ܌j}L=
?hD3U+\FFGJ8#7X4E \`ӋpR/F}iropitak7c"&Ox'a14ó#GT^?ux7%܊Wx@<>+-g~6~?Gx}rCD薃Cq8o˗InJ;(75"rg(vAn$&M~٭a+5K(߉:2Yr|U esR
(|08 *}0â0Ƈ"eXocܑO<
8r_>WVMnW7}zSđXe@jQ_׋rڅ/~>G`-q0j
X{Kam~0!|
[3O
jHbi,*,E'
"p b6 l)QH)4YZF^*0G8UFYFc*e<HqDlIɤ)x<(UxT/xN")
I?I6  c[y8 7nT`s| 1q*;8Bmb	ݥ~cxbRX?4Ԙ	b0&E#A4Q v.
)wڌ'}4]m,^o^L[Tbr+t>H7؅os?}M5:;䒪Qyh}<q/c^Es/vcwČƣ.	>qqi?'K"}x"fģ585#`dDVG}QU1k#n؍>q ~-C5d| ,),(9r6Ibd9
bs%Ε5X#C.%i5ۉۙ'뱛v)/0}Ir

x8<Č.@<%&NLo%6ܘG)o#N]xvvȷ6&/w/@/I% gCJBxS{@5
?vv['.;';0QGM<{5N0;,?|/#f13ح3l(zX:@?D.
:ZaZ0~2/pՇ9e֢>c<f#k\|8bqt
:5;;D_Fkz	G?{io-~ ؅g%^֎PZp2Vr}#:[!>>UaԏTCeԏ܁
ai|X_ٞV!cbrUHi*wTHU9
ʤrւ,O<ևnpo`tb?BF9uœ2[@or[@[@@8	MJa|7/;^VFohpO4PVDJv{u=jI\hx
ܑQ:ZB
H9QO׵nwD~tY,gf ƴ|^GƗ70KQV$۰Rc܉|=, >N&<3'~J<Lyq~%{<RyJ2Yyy#?/P)Ϙ\+rJ~Mn0oޔG#y3?[GyWȟ?nOB3&_}#*k,yr805XkN4c7e]F%ی=H͊h&Z;r7M=dѸ8kϚ7^(UB_Ȁ-d+H')Kih_*Ecr<Vq

yUN]lXrnHx<Ϸl|f6F2}C=ٸF|;"hm2|+5鵻q+fH>GıB]
U	gcOwF>Kg&t)xk5/3AȰR?T8C8䓴ɾӋ#"Z;/̸ܥ3
d	gpBBfF|NxBfe܈aY&x䤭& _O@Ԙ Ә2ƱLfTaF-Xc:cl|8	WsuƜBu[_ÄQ6iy0:`ck$<x&@GwuBUvikg:,HkS`f>YW
k*mI$hKחB"TE~[h>ihS1(HŤ2 ¨BNU܁5j21#pIW6L#nN`jF31bq6`ъ3Xl2c.0VӸ `j#[l7cDոO9<gec#^76fŸLĸ\Rb\)#Oh3rq0jYb|^+<|B.,32BrE`V<5C;Mv	bSlLRv>]UHhW	V9)5L4qդb	%QjATT򁂽 OV=U#pTVee(a3I9Wa蝔Oᑝ>[T3xUNf1Ag^duQ*̈jFzWPة~Xr/1_tO!a|x~DvmXb܁3Ȱ/ԖآCyn-u>nq	ؖ
?O袵;L3,E1n11p-آdxSMW{Z=L}=DEu-
ZiSk1A\~<ȹŹl{}!V"fx)%?W$5555WYZ_*Ֆ7W%@KOnIzaɯV UW),ٌqTe"k<X&_ot4/kGb:&o5ћZnKT0t[ػ9g8Ҁpa1缌Z!)h8rQexQ^U([?K
iwbƌh>ۀ"滔GVa{u~a$Ͽb>7`q YuAŎf&iDS= B](xF~ğ'EoPgy~?e|E?_uE~'w?PK     A a    /   de/cardcontact/scdp/gp/ApplicationFactory.classXkt\UNq<:kZZJL([BJӦXv&v2wsiZAABGE+J(R(>P(>PydGZsgo{s[GXQgVOc?J鍻z6n%3vcJw6ⶀd:ip-T
L9;j\g{
\>)Pj	1[ݘ'2=L&vLi
ٝLYڶQ4IS4Z}XEqѺULX6znq8i28LDXφsc&B
fi3W3edL^cY%0.BJO4l+iZ\ a, ti5{h5umiٗM*Pq⴮ئE\!cuTDs}Ffw"?BDj^o'm2lԖ\NkōclkVq]|<ϼ;^	k  `p@UawωCzVI8.Onp)w.>hr.A0>:p)?`u֣Uq@dt+K v]Fu[:yUh]-kװ	0kd0
&
LnխqCE{[Zjf;Nsid"LYFÙ|E4tb;b@֍.
;p9|&G.m1엪vjWRX416٦t
ѧ1XZY'^#O#dE3dMЋ${mkY2K5|X!Яƀէ!
 _/2mKɰS*
̕N24j*hVXSNQT=oy%wN~֪qu
*xqpN5d#5m(6pNq=prLkLA*>)C5m.T|#y5[dD>c8	X٭#-1[U|AiQ,vliVG;:T$PLZgh*n':bF<g%fq3>|-.;-׋;yNְzӰԹu@ˋSO+n8O0ߤh(Ku;gQ`kEc@=+b&-66vV&0yn70MaGhDl6_X(*m)&CӎɔOd=׭yEz/y02dٗbkлPaXKoȤ/PZYV
Dbc%2'DA悒)(<yEA39PBY5Rtpiɯc6ɄWHj}qd Gw"LTd)s
IaJ	ɵ|dB'2#ejm>Y:d	J6_%3|?N&I7b}̜7:1-Ӵ鴞i7^3+#.e7p7CxM%F_2ywtڋ
y:Y0>1,m,.-])#42n'mm}Q*ZT*%WtڰnIo|Z<>
+x{b>;y[_W{po黖|B;[j=+p3pq̮I(]Ú_r 7S_Z~;+el/^¿r}L**l+*UT:9
bF$XbNkXpWA,7זaI$tܨ'䡆cX<!X.!C-(66Z]J,lC[˰]hhhލБDkev|
9Ha<=sM-0H$<x}0[G8ᦂ'iS8W,ʕLC6vfHWF݇0]. .zBpur7Mb! f
5>Wp1ސ:V>
H	Z&$s98q5>X{:fYM*.*}PY˓)5pBP!LSQq|ۨ-=
.9)D)$\ئAtw/90];H,ni7c.n,=k/P\$EYrU!0"ii'D¬x{CGIl 22{C^soY̳Ð,Wh{Ɗ=>f,D`})6dbÅh{(9і)bmmm]
ÉDZZpw/G{CX 0e!QLTn&Dʫ 9 kD֕'8,ɺ"jC2N*0ϙ/GC~ojgQ.̍x+޼BqA55qmԟ?OU#(av9l:tmuCX'uyCJˉXĢ/~J+Ejv
*=waj}Cӡ ~7Ga>'n)ۆ'BU`j8CnaǼ&g'83?/Yv8+"zY2++|k:la3{M,$EE@xt!'
8_hb[EP\!jv~9 |KZ9Q8QbKb~pr8<ON!?#'7d޻z]}0UDD@F*c=~EfD;̞Efy
oo2*廒T`&g䴐3.lp'$JG:s~_ş!E7	wPK     A 
$  S  '   de/cardcontact/scdp/gp/ByteString.class\xTյ9gLFF$4@	 I&L-Z>@Em|>J}؇}]omk93~|9g^Z_ksO0`a_xbmqC|k>R>)MĚR'>phmJ?=K0G/́ r8.Z\ISTqxmSqyK*ZJ
ZQ@oD_I#kKD#uT4hnJEtm޳-ѦT,@?
iptAm1*Xa}} ,XXq61C9E7hTP6ىD<!*j_;KĆ)Gn
`8F81%pZgm4UQI~3T1kbѳh"BvN#T^`,)RtP,h)8Ƥ Ndgs*V,.KXZyDVӖu^늪xL NĔ TZSTJOb:NR񴝎*}tA83mQ
!Ko*>3%=hH"͸0+YQnc-VGs≆HJ[3hݸg)`*yTM&#RM&0?X(0!!JRxLESȤ2spvPMcOK7%U")/jnLi,3nj p K]u@
I+iC,^1$<Xc_=

bɂX#],VW-]IP9D*ԩO=$b&f@kX+_нsGђS8Q]:	n"s7Ia|Ŝ-TA>%
 `<&.,u:EkcTtRбdxF5r߈|	l`(QO9&JM+3YVQcmтeH*T\cɯ}>aa\ėːߜHPLp!˸R 191cL2\#j>[bkZ%Ie+ʻК9
tACsRjZdI6HoE.vA܀i6T@eW13d؅tH}CڐVr
Ṱ^.M*\ɋ*(LzVmvu^ٳT> ;dC#T_`1'K3#K`s]P|%Z~+I˅ft-}ϺȦhA]l͚th:{WRc
[	.	r5kd5Dj5)&f%{BNb+٩#qo}xx"ؗZh)$"]6DӅVv9xNN_. 
|Z`d0dCA)Z+پ Q[8vˁ]OK'_b"zM*9җ^;'љ;u藈ox%WqIY*CZNuN۳UG6~OSk$*sbd)+34#G\`]^H]L<ix::%cV'Jg{+:_.D/׺+=\xO.o]Cvvil1*d,+)bT]R6<FUrYDoFDKS*^\Y~֔VjSNL
Ժx?gK"v]g^ E"uB7[	D?i[*	˻Y%S{Cskg8)ܐ*!f6/N-Tl}zAaT,fu\۬H*eSI'0"%}fO>
k]S77utB+z<&{Ry_P!
א04F&A"Lhy19qng"<$K"rF'ټ:%yqdPRh -<NEA1V|V|noQԪSy䠘$/bbu4brP)Wg=bZPLU$/`>.NwkerOW;UEnwc1Ga3Re>׃ڏtf-VΒvJ#XQ)ǫ
b`dɊ98+(Tw.-9G0VZd#ΡUWTV:b9{U.9`Eory9pĪtHb+oE5uAtt&Yiu+.KD$Dyh"_JH$һ/Kn[WtA	yː_O~	Y娚aAY"TعOU1n;-*{ksZc5bO*A͵)o$%'t\	w~zĎ'f9iˠFkS[af
`z(d	)ϤPBVk\<{K hҽ
WO-XukUXr]ecC4c9ЦC,c{t5z9*HMJ[90{Jg@I?p6>yF4u~:l*`_OdbR5xHU_ܨ%Mل!77nNH2"F4l'Q&.e֞[GdX2zeWHł[(d茫*U+uʈ嫕Y<7eKÊS/eRwl[T.Ϯ,ْh242Yel]I-謆xMW$a2aߐmfO#&+!ɘי{9[ŏ?ٓEF
[Yt:Q>C
Rƺ@J&՟λ#sH2=Fjkrb YJg%πSoDo3+cdj!B4PT6t`F4e˘ɾNk*QdZN
H?_"pM쨶>zz:ޜΉH'YČ7)f{Y[T..}_"2GK`\w7x1[u_
w+_	,bm`kh9||C9M^GW3?
MGu▦?4DE:!XMMچ_`djN
]u%qע7cP]
2iq/8o9y<<Iq9e"%7uos|ђ>x~"!%lʳR>#ym)P).Q).7G\"'G1rDeMKz݌ܧѯfBN6z/+Vak/N0$"bxq)pl"
e6C{)XqZ~S6̐sRa{/|
U@Z֊ݲWX]~j??^#n
wZպ@s[O_OZ1Uzf%Rf~<
[Sm^,'aBXɟ0r~/!,q/G>PUJQ
laZDC6pFΓLq 	5-Bκ"ƥ"˹/>.
1;D!jSkt|Mbn+YTc]	TƷw ť2؜%ȣ/qZ~QW\NA+~iJãi<Zvk`@Ԉki*G^o3j95Ʋ*-"O}U/:YɾFG^|sE\(4Zj}F}qG{}𸒻/n7-<qY9bkrAo$YXbxYT=
.7&ؽ98z۟G/&ެ's8-`ϠrZq76*Fik,)JW+5z
?FZ)Hz
cH`|R@ߎyjƱooʯ.*LȄ['x<{}~}=.'dVGN܆:$~G3]xǽ_5[IUmY0%܅^EyyVmnXI;,$7Q^B^[?~/nJpehvj3KEnXIvqFp}j*CDo(0QE|E0bLWQo:JY<6ĉX*Zja"ʟ25Ficx`\.I;@-Fe@ӪWד'vq#{zz׍x+[ON^jy?ۿ}z8ۮ?ޫ\?Q~3,CvؿN'-~mnv[stq{v,ݩ!,E+NC80PD9&O1[*1D`>D#BFqX{XGR<+5ix
rl|U=6)M- 8L UfU12=Mi4riJ6g
)~)PS4V:z^Y}x}]9Fѭ.F9F;s*uj/JM>dFnȢ߁Ey<̿ߵ5/\凴6r)e?F\J|z3JgVc^2Cp}iĉ[tKZ)/K,F
9W)\|JBMB&zMm3Dz(lgyx ׹on 7bRv[r
c^B"w
M%D46+CRcԫOO짼VpuDK@"&{VvÂmRZf;z,J^2~CcMMC87AiQ4g}ɌRRRc$x`L<cN b}ZJ)p1Hdmuٺ.?$`	9NW|K#ًKjz]R8vxz"m%/
z C\CˏAJidXS0Z<#U%4d	
YBCЮuwKq=:S}G<: |نL$ṨW8#>@_e{ZG*o8k SIOi"`LM0=hȖy%l"dn,cޕf]d&J2ӥsW^/CØF)fy-|DG<O",:_rW\]H_ٜ*ч+?J#d]:]^A|ATjEF5QF'a1A15Fd^^^^iD|=E}$},铟p5^ex׆7KtW#mPg(x33y^PڡzCj6Y
ċ:[EGՖ~˓[_6_;|]_S)C)2Z9
#c(G1ZC{=3C||||ZU0aim_j%I<зgInjU|J~gZ_wXֹ*IU'~7
$㲐xl)H_vI"bX-2dC]A]J<ZUXgD⫙O4555xT&
AS+,wȵ(PALM`_&gR󲁥%M ND'@"旹 E1&~"I(7OlDHЖRh4cg
 yyyyrByqc])!mc'<r`{0?{ϴ=ir<ejafLFm]=]L3#u'
K۶(dZ.`ˈvz9=
WXhDq
"Ƶ_CuZ
Ҹ	pi$G4֏hX߭=zGqxE\CU3xUW2Up<Bez1қ}?S--=\HO.Gg۽> A2#dGlO,-ٖi|i|i|i|h|J5
~kO<wʔ~ntD`⟤|vl3[}/ETn|<O^ xW0xdZ˵˵˵u>Ygc}9 )t=n]Ocm/Xv+|N8͜b2VdIJ&}~ŻmO_clvvvd>5PFq6.ɱ;du[5r
A0~M&l J7$u>x/iQBD)>9DoދOel9ū%0HoEρʁ:P=u%(vcz8'rR
MvP68ұ"7rsE;U_"d|oT'?0g\j`H.4}ci.AgxE~r1+u*QRVAփZةjcPn \X52U.d7Zt?ScFNTsq34ivs:xwJC~d;7yF<f2cfb&2!6G2ny{A^l=qG<d(5,	2d S8<͑XeB<	B\k"\eW{9>#ܪrVʭZ)j|S	P;Q/ߙs<u$UƝO:C\8.#Jn$З̀&4Jn6!yr@69W'o'R
J9v/&Y޸31qrC
gqfI0כɼ<
0g,éf9p9UTg bFEMu\oE<4^mb|\ri\Ats1[gi{zyU2z9:GYK:+΁}|
GTSoj#x^?LLq,q8g3i 5H0Osߍlf2(Hv|KL9Rc
8py.<( v+5(JQz*t8ݷ	̍3[MLBm·ImZ8S6;"Zɯk%V3Zɏi%?W**yERVeqSRRӂ37TUi7v1Uֱd50Wү	wkȄby}:w>m%TO1Sioz7(d0ĔICxGz<a'᧕܎'suBRDnKuYޖqCV$%s)^unsT}%/wM5d=%
1{W![!ﮰ"Յl
Q>s3oЬHk~&}7J{0ϼp Qd>fI\l>㯛sx|2c̓JMRfyoUj~_gޖܛFi/}ᇑ{c,QflW`}Qj}żMTY `߿WT0gءtHzf	%V"^![$$$WB`rS_RYoַw0|PfAw8/,7O}L!D.36K_d=4U KpeCcVZ8="TDxOF*ů:Cpou3w8ZWL\t+[UF2jpIՠ>&+}b%ԬOiHƌy:9|b,L|(l̳"pFtFtFt.'(9
)8ܙf>'m'!
Zڳ+WнV>r~? J)[,oJZ~wZ=iKZ+C>Gģ{-)X[0
k3]]]][ŝŭJ=(NQS
d:8Hhw%bbe`KcWe7V^1.~\'DeQ&*KKL
ʬXlJCZ	rF"E<0]|ZbsȐ!~7D>b	POt&:F:~98i'EK(6J{)Ni/WP+)/N?GYUݐ&Nb?[ew-lUMr1F˓1\VCvKn +Ϲ`JwB[q"K^b$'8`rsr,2
u[7xVxEK[pu+cZcuj;Fb݃K{>\k=fKBd=t

tFr3f*-,Z}(*V
і(0P#GEkEKko/o/gܗsd>>
IQ:ü6qO*yi,P`L^OTHko\~~jvFKMZ1؝qvx/eR&*\؍{p V[308zRϣzMl^֫!~kzzX?C<mpzX{>~_Tm}$uྞ(䋵@haͶ,ecEokʡ2_丸eKk9w*1ZWG|^Y ,GmUWXĒ_?OTĊ81q~@-5/|LJID[31S_w-=SfOgϰPK     A 8+&  X  !   de/cardcontact/scdp/gp/Card.class[y|TfL^ $0@ HHaQ`$Y\$&3qfZmUk׺aڢuUkkV s{yl$rY缗?~j/?P0Lx,x#LN[͑Mt4o͔cwb<ϜD0
X1
h$M&2h<mh-oj-{Zl%dPy4cMh%ȸCGfiKz,9=N~]*HFR^~̷PLw?XK26ysZkC$^tE8:ܜܬlEh3F&0c	Ȋ1XPܓ ͼL9]p<w\?1cd+?xgiO)FEdh}ͱH-ē &`-L1qHma!bT*J2i%29h*ͤ≦SVQ)&J,y
9r`TZ+y%f%{ͺeܚ)LL#L^X%4ks:&&u$bU%w(LY%X\"9lO426w>DVsMh3`ۏ.\q%/[Oe擑:e8`昐8B%i-C3Z)j0~ CDX]{5ۏW+cҙ`5A,2儊Ai9͑tZsk1NlX.KD<ڼN#ktnPk3&SAԡ^h;F\jk10_se3,XtT:c?G%/6"Xo"j弄`XS<Imeɛuʋ{M6 N(fNEZ9}A9qXH I9'Ǝ?3DIC|܈s-nH%7K;Tm!4}2?R3[ٖȰzVmZ%iUh	ٷU-萻6|k5kYPoHP:9jXy٧Eɓ{>g۾/l3,lTiN1"vq˒E2((J"
TQ2UҖL\B8$YW!d="_˳lUW,\kYɟknvoFݦ􉵲W5_p=n 
4`nbpp7fe&c5N.q#n/{av_s jl=/N詡Bby(c^|fk& "q4ax{<8M7-<G	X$ӖVxT&KA=R)'oc߉'M[؅+}Mc\'ҋc[{ȿFVzqL[x{M<ka#ZؼI ?^`dWjuma?^d)[H}I-4l
3uǉJ_NYk6VvϏfls]}o-oK2HSLmoK ];,Q+yOha.;㗌םRҏ_ssEMe<?~4;&{eUmUY˗,n~ʥ~Iһ+3aZ:ږgJ#V!HĚ̮ZV߹!qޒ%po%/a-jd$f~l0%iK,Kk7Od}M$EIcʬFwue}M;-
Pq$bu䈋ڻCاd	HGL?DPE(+t2Q&
R.
gfP<иJ6ҢQ·HCCGhXh/n/͏V%ZDrh7ȢŞ}C$EQka^eDI#-AO@XI@S,*RyT𫏼{PrA1Mh|'?ZG
G[aL~X,#A#qͦmխnAC&͵D+}?<k&Y`lقEbqQ2)<S%&ޭr04HUӤZt-om	bZbR	di8GTCI+8GYk/N1ZTGAO)MF𲶖1-!}3M26M1m~=nkk(XI55$ci]	'E8sOK1Dcy
mT|GTQ4b%6NMHX	Vԝ4OEmz"g4lGDvs84h7Q`i!,o\ryc\V0]Z(mQF ːxS\gʡ&dfͦzdO4,KfүB
B6>'ytRγr2{|Ƥ-b_KeO&cħjk]dKP|iӕroU
ڢic\1#MB_t=ǜc#L)'h\bİ-.8ô8u.2X)(kH5[♢⢓fwܬ

Iſko<k흜/lXt/qd-cHz.Hb:otE>[9#Y<8g8U;(vq]#Mf/߅O--ڈ Vq1=aNzTqh;p+cd"ӣd]Spi0nal*XMx8U'ˊIpx`B0`"5i?=gx#5$FYmoҋ$F˺̗-z^ɛueO~zM~\[?OoL?úT[va~H#~L?靵rH-]LG̏a}NkUuE?۵%hɳ_Z+5P/^VD&UʽXEq,u࿳rjq<I/WV%\&&
Z
<EK`	úZ:';|u/>:+ vUMYcGYVjT
+iZA: äC.Jn5fnӺvAER,C#	7˞V18?+5I}Dy~aSSAeC:p*PQt1[od6P6YӧzʷTNr?Y#kw?<7$[8	0ŭ-Fd;nt
i
x* ]%ZzUƩ֘
v#,Abu&n
1iSj+x˯&37"EXklu)J:bUjȖr VWj	fF阩2}3LO) P

*)?GJs\2\.!HFȶm#ǥvpx"f'/IF#ͫ"̆8#\'*~ݘGMlWdgK}<Mv>&?LF:?UQZ`M|̊*o~ɹTywԀ	#~O6uR4Nǋ+S$TЇpOA8LYeU[C<S*
cf]n`;+/lD;\sFZ%*֭Dd<]89->vTFa]Ihg17$]/:Y Ui6Ƀ\]5K%3IBxcYi-j0f
jLEYuMqrZ|m	P7icZ2x4^|x
F
kHMnxP>NI~Ҡ޷K)Ӭ57C=kte~cTgK?@[?p̜k"-<<Ep[@mD$;2Z>~<1ctRCLn0(4[qZu\x㉆x`G$F=Izj/KMEL0-լh<uY_WfvuO|f,IxaYT ʇ.eFUFKcDFz/zǭcWtMyk0C"d|EeV%?-Gl>ӏd/}Դ츜(0޹{}=_խc	ag~_Pۘl´G
OupW\V_kvޫZc'tBCMv~gy_x˳1.R]=a*>y-p
"Ĺg7KϤOߠf1Ae׌.IJM}	W,n~6;v^otkkER=LJ1"?km)qq!`HO&38EZ2
i9{EFޕtS_)d΂m)8B^+ȯ~5efc70F?bҖpr|׬瞖miX4ƱaO!dPf7epĦ91s]WG81:yivwsZQZ.}BZCXm<#:lհ7!TK؃qPP\0»jHlRgOMV.??I}B{8's9iߡӿGZkkHێW<{xMYn\.P	=	S.rVb<iZu4V3YyUe**c4欩FTԨjgj3[fɛ&{P£xqCoP*7?GL.{Jav܃هcfTxv`J8+MnzN0þQu`N?l6lG>=;p,^]XCv{䰹u]X$N;qz;U؁+`8Ў1ISh:Z/+qdc"7ێ@0TqKL6_PYj^ž1u>\ZPց+*?MLPz]UCOKN;nǎv<,D?֎'c݁g0t[F;^C^;dWS3_ߴ}%~.+^V0p!l!M\κyUWPkY{j|5z4	"Oo;wr.<`7嵿!#<B); Ox<C3,}4S5^UE"exǫt^:LokxGq;jH-|=I-a?`
VK2y\}E:_T+ԩt޿:y4Wf{PtqZֈpk 3ozMb{ltpˇմYg3UCjT
%C(_5xh#BLx3Mx#Om-81Y?-]NH>~~mC$d/p@N=/t>Տ	CJt=W]*C\/tjW&OOpY;GF~R3z/rn?M_=)~ f#u8i7NA,!(}\I
7ɋ=<*ZXá[	|{Z=|;W?c04w
#Cq}Wx^>>zL7^h8B4S)9^]m[Vi PVa zHZޫ>tSmeg7Ŀ{wY#d8Ts&qȡ
]즡yvQ=Tǰ 1`X	4
%TtTL}c~<B{օYg]hU5v
hhX?>dM9+l_ػ
	1LZh?|1){+3Z=%Q|yB,|*>x5|!"OKp-<ZŴ:
MTQNstttt`"{X֨Pg8A]3lg81DĤq4 LI//;|g˻Ae4۬`'o0xv^/eNѱtBE]͐"XRZ@'t>Z5>tSTRF)
>3pjhڀ(܂RJb"IB%Ԧ]Bu5%.e^aS:M]p+])\JrG
]qfȐ=aoTW+)àrXLW:ܬ>{7z8K+c\3b;q19LTJ>G>#oȇ1UW$El-t)F(+PLWb]̾Z3eVˬ*YUbf#	CkPB-#ma(ZN-ڎ=|.:YagfJ]gJӫ>it4g"P7Აs4g;Qn9f競#OZtճ<*r-]`]E?ގyy!Agk!Ya+	yC6hY/9d$;v.9^<is-`a=<;ةFzp}ҫ-:>z[s-mn2|Ǖ;qd8OkWYp[^ka-u=8
m#'W7 cFŲsiLwa`7?怃zx m9MAm$ ^oyl e*~ UZW/Z/X/r^lTau[`
^"7kkErDK)ƙN u\ !f4f8Ċ1N%6&aŗ .UAlW9KYW
C* {pW|tmW)vm<n^;zxQzݦ<\ϊrV +UZ=hBV\%Z=,N:Fhuԃ=hrziG/`JEvٰM/ۉvY@M:\Qӓ#;y:GGIxqcp3	')%+{8vSaaasΠ;X<S?E;]=$I8c̀IlVk9^3Q׿ְg W8+9Lfc:gQÑ_PsYNC1f=0q~*{ۿOUB7Ҿy[x|&p5WiX<?Rq-Rݡtqc@e;5ϱuASu#Љ=.<%Xz\Zrb'JQRռNzr[a)Pul{qƹs<^[T_Gw7](^tG2ZWnHu.u'3
]m4_`+,o~+J
p*׎yܿn\t~W<1
1E]rEQ_ִ;92n:tg'}!Jo]zywW~ǴuM?~)}mdE7ڛ=+qnέa8|7rBa;QIa/ۮu;<Cs`nn!_~JC/}!v{_DA>w8ڋgtmeIyNwuMԠ8}#dv&VL݆vwduTqhSb0G1<ha''p/zog}Po9|:pzP=sMhUnI!ݒ`tK[_HE&b
:A&;2v0kUԤkTM|s,(]<O"1cCC"P0[gUvtH'Yy;-r-8g{%aԭ5S@=$ĉChny].<6h`51j?#1ash[]JLĿ#cc| ,20<)+m\osmrYĶ)^! V8~T!Q~zaF/{:^]R&+)vz·Kۥ[Qab{k;Pug}g
=a}eQ>A巒斎u]	\#<c,`43e]i*c2Vr4c
l06KR+ҭ'UaZզUVC㭚JӌjETb2gl>},IXT>95,L]y/ߙ"Liz9V"{
`{ܛ/	q$wc=c2/b!kز_;71{_jgBv~1	o?r
{~
'k|9g18|6h
ը1Lc,BXKq+pQ:<3NG/g0AaoGNԕv*Ox+:=[^a{Y}SxL׮w8}<Ir:#~G|zVsqJuٖ̩?Zx
bC
[)|Fb*%][4I64F0،0؊6v%.d;LLD2u[vJV]8SHRvT0N:1'_vdX/ok iMY/C`q)#ǪESN#\yOCV/-}nǘ}tPǫ?`Ky=;T`e.PCv
OY3]
ۣBwR6*kWJ$GiWcLy}i q3+-b߆,pq7o`ulv	gz	>ZPAPX8~^We6,wg oeʛ-G]@i<pASL;@ߥ|D|IJ=u!fsaYMSOz2W;1.c4q[?`&΄Zbl2?tUH(2ciwߦL݋7^B
JW@o륮^UQg[ȔRu(+K9
4LY;;;;8VP?r7yRW]퀷+"&9ڍ6~$:[v
XYYKKJKJKJZƊKuRLa^Fޘ2^e~S"^{3}J_ߪ)PK     A C2    5   de/cardcontact/scdp/gp/CardEventListenerAdapter.classWkSU~Nl[KCK6[ BZТ! An!,ݸٴM;~cѩ#9@&g=sy}=?		|F u: м`\29&g	4<fٖwJ{!4jh.Ȅiӱ=3Od!
_
{&c=
4
iKfβ	`VKƘ;B+]r=jL-حaVZ|MYMzWFjRs-;;Н'q݆}q?֬@cj|S"w[pP`;#E,@ѯC@v]
@Ls#ÝQsND7E/zW2vtB75ͻ3%cuttk'g-%SUVztBWs@}L
qR.:d&~jzc偭BW>чz{HqYN95gF)/Ǜp x'	ܨJ#Z~wd5<&pyv֩5qgD%eDz^Pe|c&8k%xylFm9	ʡlj s0<.0[ᬽ_Em8$-t0 T`oWR:1!/6=&#KUn^0PMtHk4l-?zn"jn'm3xVs:JHyi+ʄTۑ2LIwѲA	$Qy+_{M%<MjX#]X$_,*RNչT*i
Y|%zNL*%
 g޴+ZϮN]MLR֩tJgT$p6\K.wy pblq`a i~eȗ5ravPs<}難wYcp*]	{
I*@u%kR7P0d[Mx=*d}	9pT8]SX*Y%O!S sh`[#u[~Wnmaq͂Քd>s8 Gƾ܂xyT7+{Ɓ/'mnFXőXmX<[ubbģ1q⑇̎_<M¨"g)D#N:'x*(G@3H"& 2x۱MRhp7EiZ*ӯSU54 tS7[nb%9{bߒo{=T}ѲOַձ
m
+eg~c7}$帏0Z >,dўb,*o{qX#\|WȌ^,xyuS@;6q͙*hm*Y
^LDٺ4C3X[pM_f*Ve\"W{~GP:vìBySHP=Rului(5~]m׊8-r}*Qb87tʇv}db?J?A|AutQ	Q1%t{;q?PK     A nY  X  *   de/cardcontact/scdp/gp/GPApplication.classTrH=c+Knع eK7	T@*@MƃQP$4^R~'xxT|ED@7/2=ju>}f~E*"
Ar'<n0P\(7mFn-|OpCx:CR]g8!m޺<6
J,xPBU^}(cc>q]۞sw{rD(XFa8WfuΫՅ"aPnZ7ϥx!	(>!I;LዾuKR۷5!YqpǨVצZ;J
St!d[J~yHn[
vD\M~){E717;hQ74jQP>o2m+BoH&j-
a̞Y/sE?uvHfǞNz%gyTiJUy1Wni)1PamN{j҂MҢ.%FsJDͳT$]Iwx_Z29?ÐeuuF	/·Xi܁
yF'c&I=!T1Bv2( G%|{oBigghu(49[*۔zn]j6M-/( {{|wJQkona?+ր52:wF$,cM[5X]%Ccqň2	\%5fgܠENS1m,y3㛻}bJfZ::dfIdnHd	V`#_P49*T:?Hv1PK     A 3,$  o7  "   de/cardcontact/scdp/gp/GPAtr.class:	xTyoޛ$L2@Xl$HB$h&3/dfyI.TT6*JmEQQjmURHs{3,Gܳs=:Ի f EX". )\z#^?V׼N__`ə
d; c}ZyCA^_5\xy!
k5
ш`
8&Q'g`HW5ODՖXЫCA; S,a1QkeJD"H$D"90	6u޴v2v0y8c?-,Vi{Y8iKsjhyCeIvWSc(tƃڪ坺fP \'0^7oQ;L2)0aseQ1gidՖP2"d]C.m"v,Z3PK9}0niV3MĘ,J0 8vFuD<Pazpf
EHӚ"-
8&=AWtdהXꡈ6@9{u-U#h?ڵ|-kCT;HhcY$[ԁEpM0{7	TvmQWL1E	Kavzףmcգ,%Lg2;݌^k@m<(AR<T[4.@Xt9apK3A2J6.]f64
ZG|6<P>BOZЇ7\2319?t@P\ǬaRU,WJvvg:taQiFt0	Y.v3B\3y>21q·(Qyc~ո@f
klQHvḜab^+RT
lekp-`:6&:6o6V8Y7SWT.b;VS\t=
A
:aQ'IN0 ~hwӨ*e/]h)#X3ZNs~VW9nن9!f+)je4<xet1.3{eXP:^ʧP,SWC.k\p<梫x֝VÔڕKUTWHKgg/x^$'wbKG)?sU	L!dWjTl{5ε+:2Y,3zX&̀Ưz]J
z5!GÞ$FG#)_TVGpQUT?N4ޤp"МQ=^TQURSQW_Io#L;EjeYcskկ&(?2
n`6*7]0&2LbdOzf93Ʊ>|9ݘC/0!Ѿ>G
?n0E0k̬0 Ld
mT=h,
nY5o78&a鐟d0Zf?cm @	CjҢnuZ;2H(k'ҙ,ͭbcIdZ?lY%9XJP&VUMU5O0JcU%hK)/
1҂ސڿ	HH*B ^a=SЉ8<,QLG0	Ryf$d[dPnFzA<j5!zMF3f0ZvSt`P}FAbBi<IaOJUƲYu
Ժ`*:9T-.15CErmPt5?C	S$(x,(HueqmT7
eIz+B:"ԙU)Jf)8
f͚S*8
fsM¢bc9s
m)QXLhVi<s+2X`vy4`43K
f̚Iif1
gjh=L楼C*3!
X)uf*jae!A\K?j=֢
T$ej(]GgX+v>`3e
8
T(x:ST2NDJ+HՊ*xii\pgNP-
xQDp
v@jAmFVI1J	u:;\_j mCrhE<arp#2x<(*Drr[3y
sx2nԴQcTqGR=[.y-Ft~Qw?L۸#.tQT嬾#!&#ӻ~']%C-2^C(ZNCɏ-8<I?PLr3O:*[[bAYK86";![e32zB%B"Wjި3nX}"Ljt(,tRKiM -d	e7`BW|`QPn*tRnq-}OHׯbY+ Bac9y"ˤSꚤ:%Nl,+2-Dĺo ]FX`$LgVE%Kkcl5Sj,f.ϓ?Jč6ac9%UO{;l(
4vIE<$?nV5OM PYCc*{K$BA?8Ic4ORqXa*,N1"xm:vdO3J4A`m
zg?KHc~R{3ȇRQPYڿIH*rf3Ԣ9JPX6si4z*⣿}/IMUCE-1b:^Ͳ
8QT;u*2kH0K| Y3_`W,$Ql)3ט*+1'Y ũ`p@OFÚn9 +'<t*l'09RjPAMZOZ-HdybQNu위VǷ.St&>Efj`y<>T]]lWP29a\Rӌ@?TU4i+(D3ȿ@S]bU#T-BYI36h
WbAc |G5hBuм=C -Ym>,*|&>@#yf
T'{DKfUT [QNFIeX
9i	ReBH~I
6C\RdO
v!MH'iBpChfxt"\\͙XM\
@H; 7m(
O @=א
#.Ee!أRUIn72LS  ;U}F`nĎRa{٦(xͿ3J{-16@'gI9N߃|7uaMN300Ld!lrsWH-&
7Y.!q@q<Wj(c0nx?(	slqLk͖k29zp|ɖ髳@!9ӻKeTKmnPmu+rV7, BS
;rS&i5)w55*;vmVЭHlm^I-e<R-F
Neb"(n8f[}b!H;V+#ZȌfVCH'{;mעxU;9S8)z6:`t8<&FlS)ZXB;lR-2\!lo2
Wp5Άk4؆aρREA
IWx.9nH'<[
+΂zԻ/aMKPǭxp
'G1VO!/$<D#,KƫdS(!"}ݹ<B=7aP
y;
Dx"mr	Zh;`).D3ln^86w)7ӵ^8E=H`2H7L EC822vkW;-S*YJE8?-M{ef7K|֭JX8_Qju[Ϧ!m̀[AvZVFDh_\H%F_
C1MX oA

~R#Xkut%Pn<-dh@2x+n;H2mԓz2E8Hd9@FXr闓<r>\x2t<zHuFPp/-4QӻT6Bg-R:t:{`"w\*%ؔZiwA[*sw&$sSjxzēDXZٔD]h%П'Kg _@J%2>-UmI\jPRLƪ I.K~"ʮ6yˌuC
5&S/\?dºH`ܒ $%Lct.m; unSg20N3ܔl"`r߻[\mȰ<GTWQc[ʹr/6d1T{Oqݾ$ׯzF%Uo'sԉS\w2텻WNIp@x>7&NNվP/5H1U]Y8zeҼNg][r*>	>΅:]$25
,&vHG/1ffV\by4\:g65n[ٹt=#OIK- yn|Z3:Nm\s+2
Ul-pKw~Q:= W_?Π߳w!軜[6})xcac,M{3hY6 8xv}kZ̞{?(4L'Ӻ']HA?[GKPiᎬ\[F;vI\F/2`mk W >f=&1gg/3WI@M?P9~-q,@x[v'un_&nz<#J~%'P(ʬ+ r[E[`.<j?Hm6A]ClʠYIQÊ.knLGs@ArT8x (Læwt,P>(PJۋك8k/8?t_e*5Kw0:yN>llBsף۩yx\<:LE	plt\JBG:
8tGxxQkSQ#\Xb:!"",.YµX*<q'|C8bT,r	XaYU:\lYՖr.<q3 ֋
T\!U	xXk:<ET$^^
۰E܍_/^',FHQ*0&5)xt)]ҭIډgI^<WzN|e@z
/-;x^j]Yr*ҺkY/mVԬ7ֻ&>7[[m>]W
x4[{y1^TOr;p	7U|>*߁;>8>)Oɯ3)YW|AI7U/+9*2_W*
e	o+qrl+6@?RnO]?W/WPr lNmm 
m *m`	)6]p6
N!viEa!ZeKȶ="=#DWclyAvLlUwXC_QY*OC9`Βfxnx)ƿ'ڈ7'=jُes-+̇+Tn2a{ug[Oc '=*6f{8kP/}=	j1=,;}/0f5c !
&i8 }008,%KO9M?M4K($c<Xi97  
Pdҵ#Fʳ٬nۈ#& rM(A( Ot#2yl6_U֚88
z&$=d$p28G]GZ!8q}ř]Zt׭xn7lv:-xLj1ՆR&NlXm[N4`Nh3>vb|'edg┆ݰj
sy4`B>3sUJ*\9*s
U7TY`PPPPe|ؕX%.ke\r.ސhH6$4$dH6$V
ՆjCb5I$OOOhrb7yom\u\PP(LW͟Y͊`ֿJQIxni t
۽ۇy>?	>gxo}/}o~޾yo?'K~oy{y{V[+ou(d
na$d/PK     A b  0'  )   de/cardcontact/scdp/gp/GPByteBuffer.classXxuϾf^~e6`I,eCh5^*# BˣIۤ.S@p4iIHH4MiG
3U7qssst<jG@(mMRzv}KdfCw]ۍ)\L'KQ!󺍆NdҦ0rށ˯jc-==FV,l+&;h&S 
jGkb	=KgXf*et\g00te(	c:f*9V+?jidL\fYM	5toCM{j:8K!pN0[04g{[uPB6pgCmBNekmx3D+ЖsϨKJ\A8R'C0` kj&'UlmQT+tj>ߥWa,AHN=5hXW[,S[,W{j㺑e V~#ms3dzb#6|,U8+øfv5VfǋKІ7VN9w^% }fm9vY/-?SLt=BXքq9
fLlXko:u@挂1ak+sxM&ۯ1C-uhg~FuE#GWq56wfB77'>r6scN]jg(M,^B'6kF9Q^ij|FMFt"M<A\'v\0Œz*>KYjdsA|Ar.ڶ,[٦ekCBBCw9v69c6mV3އlQ:&I
{3HXFw;FZSWćlwS>ٓ4dS[.5v^À[{Tgpk,ncy4LxNYcWe$$lc&֯tG	ͼ
R{øQů@H}jhz-#-h\bmCGR1vj0>%]VؾCmDz;q`zkT6;{DlfeOO$fI(t{%3$2t:yxH&xɑfASeCAWL1Dг	dM86a՞`6aRn}FxODfO#Ad8ϣXoOR9Gs	+gxϩ!޳%
V0^gۑ
cX!padM5 /+)"*1|_rLb2VQUE/ݮx_L3v'{X{TUIޝSU}9"ū׉x!'L*Y_	#
{kxC7&</Iح*qcf}|mq_m|G097RzlQH__oΪpD
kW_#4_=X*CLVjhUK-[;V8_|tvs?A5yE*I{~9]?nj!:-6hr%MS&U}IzK
`mqnOM)@ohmbI]'SQp~ąłO0F0t&Ӌ@'CM#%n7v=+Ma* X;\s٦|՝ɖ֔ٮޞ0uw0?v.ߞk-_w&w	O#$}M)X7=iK\4Ҁ.pJLp w9x(((+ϒ/Y#7@sI)):	U0NY57KZG75ۃ@v]0[dBQ畎VK3y$U)/L,K4Mޒɘ:t炲x/1:~=M1&r~H.\˼߭-M0pktNAA[z;ee2;\[׾.jNߢUO:
x:mdk0BsdT*g%ilaAx +Vo]V(8
g߱}Aǂ?CG0S9GfbK T{R+%/*VGƏW%7{y{CFJ1>qn99c
r,>|nJŨ!yλzs8F=_¼Xd	j,{BQ,6S2oa\-F+Q?5]WOhuw5@B/a=`)/#Cؔ*/j=]_ v+ȧP-MaՈRWC\
y#9[V,R
R"ae@Hl.d򼼈}HXR\C_v=.6\8# Dc;<~RrN$RsKFY[Mr	>,q|DڰOҍ }[=r/>)^y<$a~9񨼁&p>Rriww`4 Cp[CV뿠ހ~<#x~_ZySklw>%>Q>3JNabhIÖ2ա^ߙ_`jXD@Wq@z^58K;K/14e7kE֗HH>qrHcW!" *Up&JT0=	3tU~nnz'ӵ}C8k0bZ7"2E!/>\orm,dD_HHg=CS\!x}y`l~aL^ yXoy&NRy/pJ
0f{[eRn|{k,BR˻e:W),PYY>F@C&349K9J]c/Isk'4n#zq
wE%ğX`iʦDh|s0F-yzͅP^B"9GLɖH[1(HeL@@@J|m17*P}AL%\]
QPX 

wfQ[c1Նf
(F&Kȧդ4p0ǀbVIAp)ci\3,@T3Z5vʺhe].ZIPhmrj@ز*=\j*Q<89qG-,	3hl4}6gM
͎+CЭYR>jVY^MT=aM6jX{F%gK,`!٩X
崂ՌtP	;$gZ{
	=, Ģ	a&\J'FiF"|q!CH2
LvW2ɵ1çI*xRaـ!ٌW|Cre̽4Ε?Y|TTZ4g <
']t5IrW9,Ty{hPCh91sDB&KB>'wY,}C(++E+9Y|ygqE<Ϸ
_ԊyEXWP`K6 Y#eL̖X$TInert3-Fn+M[[["Rf)V(oKa̠&5nPy͉sc7><|OnPyOn<Bn !7%7#7Oȍ'ɍȍrrYrmO=ˉϹr9h'΃ksJݘb1C3e|Z0>?W\j:IU敯17Wd^v9L@t4] w9eS+){*NaSH,vB/fKT]vY>9O\gWn82:8#^|5!l(ޖtRg*'Ɵ[+ujd֏q+sbvxFl\癃m37{V|Y;=p<=xֳ{2/y.xӳ'=MAϧQncaXAEܝ]~f|1Xƛ)*U5Sne={=+K4RkT<>"d4̴PK     A q"  &  %   de/cardcontact/scdp/gp/GPCrypto.classX	x\ufyoF#K~/*ɒ-cٖ$Kd,#XGOi4̌@XLCp	:fi钦,KiRI4!$6I-)!,kԔ$'wy{{>,ղ7xxC/(JWD+FEӱT<Gtu^;zӄ)XҐ:ǢPx[M
'bP" r
BIVlJd\(7e'RTj(%(*mQ*H&Oזu(+cTo_Fct7Yٟؖ5̄E f%!\&t8HW֥رl.V;-SU;Q,eAc
AN}nNs1O3OCoߒ8^QCXP25/kD5~2
Ĳ)D	J
傂t=p2Ii6+^t*UPP!T`Mۙh:(ի*UxFŗiήSk`
}:&).Wã֪
aс,6fn~;z)iml
f}ݖJکA_-P&'[6qO:B\-ixNd:=g&bD3m̞q<E\'2A@N\TvZ{t05pyg7%:C؎y\`	
=	#S	b
̟TZEfYw}.nDb,֞vB
K'3T[msw}w=2;j^{Tx{4'*v0쓰7'1nM1~N4PIkk.BZxB)C؇}v*DQ:iĎ 8!j7;!yLd~I/>@	mmTH7+T4;4X[\q<]<_YLvNE3v-1evwparf]4x2-NǊox <-=Zh#st[4κIgP? 
2]ڬߧ#&>@-=

&>H'NOK? K#}v?mluƲ3V#glk}tz[I՟2(L9wsdkW6v4mг_r_
L<F{SLldVAOHS$㮑&aÛ&dM|WN?GBzZt4tm`
015wUU&>;YUmNg[j{bF'zK5z~0Wi57FՌ<}|_3ֺF
QS:Vcza(e
1'8rFctjPم:pqˑNGsNGE1otCTkǰ*KhP*kcúgQ_qƆƖuu-䏚_y%3Dfdk4htNy|lk VWy#}VO}Yop@Сl9m#`6uvCDCuF93қg?yq]7O
2vhң˹MTLɵνvG4Dn=i&)J7i,Jx*M4՟S;n0)[Mvj)9RI*B#th!'ViC%ppk$YgNp\{y]$UL^fftlHE7j%ӴPi7=2-22S
a>(i߸"cmMc7
_RWes/^dA;[o7*<t|<9':/69Jœ{1wSzm"C
Mjќ:/T%/˺Phf8eA#e	{ӣ unq3[90e҆FNxckPdoW_>7nȖٕB[wF7R	{bntҍ3&u`dh87r]|#%^2GmLV|#/c=Q-=	yBOkR2 Wl>2Gr?R30L8@5;3:p7:S4U+l(*$}#aX3XYײ>΅=̠ކ /^]-==ǽh}؆؉ЇC&:цB't|Y BYŲD#?,%tvH!rkd)1I9x
x\D,,w_f>>GGAq_!UΧG8b9OG19UgkƓs

wxs/?Be鏞B1E8ZJ}JqZY%ŲZh3ZrGסD&Ǻtvhuُe˭~FSa9l|y^k)n,6xo)\WSMCj[_F]5
&CuR,?*|a38j!T[=)}Ba;]]@_$/a6L Bu؊oB7^q ~(}]p!Wz*N-f-}9UpKɪdvJ\KQ/2hE4e4%e&
AِVC(v?ipa{!jI*SQs|y%f5FE|J:Db@F,Uf4MV*Ie6ǟt<vR6>Ky.oziz1,b;[RrYN.+;zd%jU8DnncN(q9<rxpa:hwᰇv^9\(a4Iudt:tNiyLbO:$if
fMw6k:4@87<!Eq^y8OQ\8nU{ͤn![Iomw;mHv,;p½
xPn4GshS(4si>|̥9wi64iMlG&<~Є`9ϥ%r=kzM}ä bò2Atlh}ok򦿡_z3(bqKү4FNfyTT?sr;yzмMItDgH0d~ˇ)$ws?Ɯ|;%whwҽɦr%Ka.\|ho
MY%){K4fc)eT`LVP&LG->fiݪpi4nAO/$ft>Y A #CX-r}cn-O\6mr7ղyB!dZx><ors(4@2q
Q!4;9*D׍52qjHcr]սJbf؞}^Fy	$nǝcӓ48=9<0K˧YO3G|7'GR^E)/xKv|.G]쏺uEUR61+f˯Y7iK,`H}̍-N~)<Ϟ^K6"7
x<&/" 4:b!Nj۴e"]̓W9_2yC4ke;"?aXFѾ1&3$bbbb`9[Xm}w:O;exqظ`]~"MpSZ9$?dJȥ][ւϠc=Z"]>Hz$eXtG"]~QJi1eʠg)C'()gXOR[)3SIBSg)XMyˬ)(/@yw(X/RεH92e(X_\h3"[P.KYb}>eRur_)+S.J)+\n7
U+7)ޢ\U(ࣺPrX](^>bQS(A>j%ǺBՅRy
5^-n+ۣ/PK     A m
    $   de/cardcontact/scdp/gp/GPError.classX
|[Wu_K{8q4),Jdɕd"+"+bY:uhltle4pdm1c5(cJz_b9w9ܧϼz1 7: hؔ/NNfdd)UʽQ'y,;Nfr~[wϨ]@;8/E
Nrro6X6
tщf,Ηػ=N,a+">O@<a&etΕknua܌&bB0}*`|f3g^'1r9k\X6G.}8Φ+Z.fr{낢аN3ϸC|IL>D;]sn`9
'БbPH[<taI`CD1Q968\:4=u,]TM2gb6@yt1%+H9KCopiZftϝ3ڌ]حυ=.lTv؇%ӽdq<Er&SRj;Q5ZYL#P Pg=Ud:WLkЯ܆M6O@炕NZt! ;%I T{DPTJNu8*eM԰ M/L!?[&U+&И1eI+tMUySh9f,T>
|<Uᑅ)ةdv:>.%.821x84(UqU|5+Ze&Ei[4+&S_Gwѫ2W}Ϧh5D	,.:~
նdɉy
ūYqs#yN[tcۙW\UI+owZiT,TN%2@].&~E,oU%y{t<+$Icv=2z9_ ۅTji>b5>Eٲ0l>\C793ׇ:=V,}.|W-fdrD5ˏ&Pxec#ٷr8OG~(q7&oȐ?&h tPK|HJ#pD'@h'Gt\M_$>'yp8uxр_(=W
"8V҈'XW~~@?S,3Ua\SCc:>m?QY˴?g3[DrA_Np,1	qObCՌ|Q`uAo(&D¡h/	t9?2Љ[<lTX_@	XByp ":gECޘ<	ޑ 3kݑ-Ekfcā`wX.C	
Gc2ĵ33E#G#Q$=t%+BKܫPtdxoǴƛCD@2Ҭ룲X
RؤK(E)R4KbX"R)IaH\RHRV)VIbkX+ERCRtJ%oΠ7v8_~`lSUF0JfGŌĦ^>aG^rE<jNaK$kzYsRgd?ۋV&ر=dooB/4s',RdAKN.S.{2:xɒbtq:Uzwz`PʙQHs6!2L]-@K*:Gt"%<yLRrO\&Fun$hsb/MT}^x#-'h:{<k/Me͟F/Iyf2y| /3P|"?^]%K8u	]{ckGID"&F41ʋ8"a6LT~2mFY$exU(s`%dn<.mӅ_,%h,+˥[9]nXPZr+Vލp/^[vy_-eOX_W_W׈ł-OX 7ʂmOYHYn"kğ` ~ڂ_f/Y^D/&/!~ނ݂`,x9B=^I}n%"_?5pWc%'/5G&"!/!vyP$v~ ![}44`3kӛNT9!ZLo8t=
Gܶ9_Fs|x|lSMn{"5<܍3Xݧ]F{ܭ/+/>1t-l޾fwXMnqz
}wÃ{ >[p/pn8
gQEN;T29'z[;FnQIt3/zhEߛGlN[8iYlE^c`vi8+xtjW2hX^A*3wnJ<BwXvEvQkTFָXLQsl҇n8L]cA?TٓʔVq!i&no0,g41䡵ǈzQpSeG<nz{-q4~J4zz$zՠsE$	/"=ɾs4NEw7=vZ3(J=nqzso=4^nhq^9`q.aq(r/Ϡϲ+<^|X5nH.M(x;k]6"wk?4~[`@x]%vr8aq3u̪yZT#|$ ޡHH2b)6'@3Ij.H.MՐWP2_
'$i}
F6.٘ff)?R^Z$w,n@Zo2)%,j] u
*h^Xh|[3
GzdvPwNw￈I{ߵ_|i|n$uz	B%jp]bBpt%)`-cabSjf#jeMf/KcƑEL	7	r\mk>
$
p۩i^(&Yd04:].Y&}0˟xWik;f/̍WGպ??rMtRs<G9AUt1X/ysK7<qjƃgCd_F1h|iqR3R7tM4[J$"(\b=R(HiDܸBg˔+g)[P2F6r
57)ߦl3Cn+:(;P7.?UVgvDwq#Jc*BQq+PK     A g    -   de/cardcontact/scdp/gp/GPErrorException.classQMK@}ۦ~&R"*o%FjR6QQ,?Jj^ffޛ}x}"2Ț0,gwmw+h'A20He^ 
&a1l4q0^^m"e$XUI[Q<BYy#a3E"c.Wq`FMbԂP4䍖։<ުsw4 fk܀|T[)EO&/ًѭQwR)2;Ytb2T:}(kDq^-
%̙t:r6;}Ҭ)S ֨sl`eҲ1Mc/ӕrJyg	|٥r3̇otW&דfXH%SɋXJ!>wS˺kPK     A 	=J0  k  "   de/cardcontact/scdp/gp/GPKey.class|	|T97I^``;وaS¢,"%bH0IV[Ҧ!RZVmW7[ysYA":C?NMC>3o6446֖\X.im/2ڍe/׵3gF#i4 iX}6Z_^[^VWZZpvL.l
9Kdp]G4Ҿ3T?S^5ҞPN*#,m
AL>U3e0kJڣ2Nh4zIi h4@aB~^]ms^sK{0ڶMu푖tIl48kgƌh%^Dr'}tOlw
ݎHc[ɜhü-aJJ@NǮ>P<&:TB3ZZ/41Drl40xhUps]8JiCSih0
,rt&M̡4DBvGkm
Xwj,#O:Φ!ֈB2h
75uykٔ}k3HY4ߡrZlmxN7|SéQZQ푦ppH<d5ڲ)8ǡH9'C̓J]
ΠYܡ+mmc:V_'ZE!+NԱXh-%VL:ӹLg*k<g}}C.rinnfZѱͭF(Uw(L`IhTC8<dO?EE63ąmF,,HV8yfZi֞
۵ܕ`q*gno{2(Jm6;A[zaQ,W{NY9v D[-;S6]et9IRxZ4t*[4o{8*+ok/[;a\7(ơOgA6BouhN'it-]/
5>Ѝto4rJЋWsnEoV;tɔ7{+Av"߲w9tlE:6|kt/Ӥp]dSO]l["m&.Zk5R0)]-(t4oin٦!̦%s#
qq{(։MP/;0}E⚎x*qVɢڶhlz\\1iNaXGvlM`Ev=C]
W4".2n,}2\[|b+N;xT42!fMЋbd_vk
SZ
{!:l7&} ,ƶuuۡ;GZڙյgܯ%!ra:jzTb:#1h8`OCCoO@}G2DM?s]3s Xnnh_0
lɃևZ۷a=dOmX6>kam
S~o\oc=ou{]m[{cdL/I*GĔ癮'\5
1(,>Ŧ:7;S&@ 
-q2=afzBbпgωFkF%\d
4#nIxۦHm6oŦm4E\l[6|^OXӱ:jCY
043CF^ԲWZѣG5`?yao˛bi8pc[lԋ(
qaTثMu6sHt63Eb362g99nؖ"'|Q_-:<!**+N* p<a2DbZsK	sG8|1ǚs6M\;%Zxpc}ycX
X6qx,Θ0ٍ>v-f{z\4- Nh ([vOLmLE}hd+G	d}m?U $`SL\K[;; ]gYNi_b̰Y2X<|SmCxU]Eg<0qBl
//Li]!_8j"3w]3gK{5s9<֋組AiWI°k+Url$aĜƆ)kQW';,9^YD|s| +7Ǔ'LrnZ鉴EnYG{kxpmS:_@w8,qb KKLy͍71Ƃc䭶dNUek+'БĂƳ{>PBM."fs8net8jObbP2k'YͶކC<bx$#:#־=@G;1%Yޗ×Bi+b^)
W9+ְa	#)z!glqrbu9ˎ=aA+}"I,a3xF7|ß??fg
6
"h=Rg31'E$-|w/-]|7H/7 ̻dORiI{-K_tS6Gñ-Ïcn6A
tw)y\.l~iB֥鼏qK,-.nܓg)(Xu6P"-kvϴ7=EmW+F?۰t_b*Y
}\2giQRM'5't~.JyS b!Eے5<آ0P	ï!crY̱ZwB&TTĎI,} Yq.ClmEym6'6:0|qJb?oef
Y<cOvcR1˓HsAkhl6&9cӭ^m,Yj`4g*{2$	OoHEt?IdgǄA`[{7=rY/fpTfO=}D8'S%dJ!YJTv(M9P#Oa#vUbI\S(Vx\3ØdLP1
,'8H(scz	3T c'I)PcmbVl0[e|(*K
\sO7BI5xޛkT=2
;6_^Gp.04-zH5Vjħ3=.dOq/ǪF`o^s9`O5<5mDSeRH<QjR81MKl
5Ez* 8/g:Sn{2YeLfȘIcR=%빌9QsdbCjgV瘑rL_*P,h_{9#/9?ќOݧәjJ v_qW/=|Wˡ/+9S+U%m0V1FUZxEGT>Ư:XoQuji{'U݃>p:	
ݡ.`Z'p}6:N{_5g0զʎȊUXmvTDr aUT#rU+f,PU>oe9:Zѱ|e9տ|%j`
w48!:mx׀;X1vRX^qE@]	nXPb\e/Xs3^qn@݀R\6>+My(nvo
L3VĻ2<oF=,`}W\P{I烱+O/++wFP_F*Gg'm-MW_QQG=gp3i`sKӬO{̂I=)〢zʡp<WЀꊑ8i괭`N7HskKKiGAsB)nG;KQF:z!IQ,ՔIHKSIR'O:]x~8qjY挱n-
->Igr2A >[ {^[^uh~x;kW5C&L{>/.Y^sM5jr`OY%
vjQ5\::;ͳ(uN#>H)(EZ}ÖG@iHG<ydʣ<#(,yd#G+$@ЖVihmy{p~0ZK"az'KZjWF#Rh߷7ֶy;|ahiL;jb^_q)N3fSEK^ܛaԵ[ep6f<ȓR-4W/.
n:EdV-Ro;g[X6}S9Ҷ9ڧ$x)fΦͽ"f<+UhK{\QGQ2¶ؠ
mI4"<}r
ej{'l*UiEQn7u4n-NO!(Mp}@XO٩^N%mۧctXm[/:AfnG?Ph<ku=~ɢON "rѶ<GH]bщdŨ-[:P"n\[/:	N1VLa>}$!bOEY<5qĻʫ>Qs0a%':5>G jr7MjhIH	+MqdEDȶ$,V?,c<&Q+SDu76`DY6Fr}aGDj9f~D4e%@;d've wbU(esD[-ypX G|{㞱pO*
'?=0w7bL8ݻ昱{{1UqVE
?|[DmS7""kK`a': 2]]vS푟%BnM1!9w %_}@h#*w4tDd3ԥW&(xB*ayL,/y|z+=@S܂VIRuHՏh?LQHAX][IӤۨT+V#Q~/SBIߠ^eRpw􀻳K{<?_T-껒CQ6?T#7$F>oMۓCΤQ+IB}ORL&B>mŒ_UwK~iT<%ۖN1Z.y{D~~eg(K1I3?2l<U@iGG>
˻5V4[=Ҧ=7MNiZk0U X+EݔW=P[4 jSQUx>/ԓ^n
Y(H.*l.4t>KtFFY%mB0heykBVuQEȗ4{iMѭWiL+d=Mט7,}TMn6yTNlTꦺg5:)Z~rLƅ`N5CCMѳ7Ec.+Bl6u"!1JL)YtPyKkx ]hbJWOx$QMCXg	Ņ<o1D%^D6~A;hm&k[qWN"(eh*Lݏ4pCP,-?ӎPM#tMr2>Gg}Ht!R:ǓoaUz}tix!'kk[n.͝GX^L/oZ^˓q&icƋi/u0 (; 

bFť4P2^F2$Y;CO|OCxMz6DuLlÊ|>4i-mP&hV_MseI#PDc?ǅ;1ѐ~$ouNd`Z=tߚ_mPNz71ɗ4ɗ:)
p'ۦٝPbiO%Kb+N*C5ƶ\PG_
l="=YJ;),uS~LAmu?M5Pk
wOC1Դd?"b_bsB1`H_N4#4=J{"zm;ϗ[|/?/
x
7p.G`n|wBW񽼁C2 7|	?{1|??.~C ?_g"/MPKhSAz탚@iE@AؔĶ(S	ۢA{zo*vGCMF&RQ60;a <?:3U4VsՍ5aTnc/R~еB}R}}7UiLrƼ-Hy[4
76ƌ,cJ;P؁ci@0!d
6Rh̏7\j;$ׂȵqmj2v@4ߧRi69]2NYq:ϊyVB3(`6g<)dBgE-d	;g>7⩈RBAn;1\n8rr%Q~SN$A]p
-}cR2HT6
Qhʥ"5&I,zJ)qY=4⏩H&}jރj4/q$=NO*|!~zeB\uϓ5@u
X;F3PQ)b3$N>=8OGoQih J$&	cXăٮ@أFd@E-xE94şhIBi.sBM"l$Kersyj5RkA5iu8o.nt	I;Cp\OE3ia?D}>*]Q2
7e+t
Kɍx''т.ҡCwEte]0sʡEYzTk(X'xej>4 ;,1V4f
͵gsqq-S4P5Aw)O@[if(vZ:hJUbQ|u	ժO&u˓1gdJbLR}^g)VFG#59%W>
Gmd6"
f*8r,vw{ &!!93;i8~dQ}(,aҡVw#.}\=$1c>yE	&M"YQ7R	w3RqH4	Fy;3ӐȍFKE&~'$ڣ$sy=9w22--lʜ&=&	0࠽xOC,8hv7
l+6YH|.j86Kگ0]3TaoѡR=8
~#<`A:c3
^J>ZPE#^t~ыQfg!>Ji .Fûx$ғn_Y*((FlŅWҗZP&ao
`ҬB̚ެ3dVIM%>џ=$kGeF ٻ@;ۃ6@yb byJ_0uEvJTiIi]a(W.^|RN/R>NP@EK4HL`_:Qh:LoPD}Էhzvo-5_}KmzCNT??z3՛<B'\~R:3nW|߫~ɝ=~T_of)a;
i^B8 kvE轅{mc|]o#ap>=h;,AWm(
GbJ/Ki	Ȧ
>ƩҏKEo2/8\&֌'S5[%Y*_x(&YK5ycequŅͳ7wn,o,*S?H`ver?_mJK%G#nĤq  @:F!{Qs:sZ:=0m)ށGrݬWgxQ	*+saj㪟Bbw`+< q./&agE6JŮ5(҂
-|o1nc`n)w@rOR rR``!adz|It})+#ޕQH0ce1`xl&4-PQQ)#lMA.FdA%q49]Wfs^o&vb&lI~!`Dm/"l⯀+8i,NL~O&'_}p}]ؿn:<[ BXs`,ːg=ej ^D0"0#a$3u%BtQW625t^Gt>~]K
؊:+k!kL#X,۱Z0Oa\)ðm^&P	?GѓU	<hY~yD.(^p- Xx1@M 閷
Tx"E)!a9:LCaZQ !_
B]qJB7a],gZRJA-[P!Pȋq ŉ9Pd3@A(õr./a7Wr'w7eĲ$8zZc4fi`N4;f:ܕ_ʹdqÈ.I7
4S?݂z|r(ı
O[<
V`;5ԡ/z']?EKrzH_E_ѻK_Ku7_g#}#;fo1VoR};wrͫ\=ܬ6 _m|4Et-Bv7W3WS9$H\}>J6Od~ S?	
?P4eFES9Q6$nNxaIL*uqt(C/0
| BǛh-ϛ|{p\tr:6"A[^R_?KP2DA>$OcO݅`?g!yZ_4O*|Kt~׌pICzЛ`|ۡ0ގu
υ3?m9zJ6à6ʡ0]h2{{0N{`"xfxИJ~Y/b4-Ċ-𛍱;m{6li)
mY:x4dD;ޏӺ7܏Mo&;駦)4qYZ1wӀ"v#sؾw˜^M	<qvz ^Ͽ.,vC]>Nd]-Nne8d?,-=ͅ(~@
^|#d?MZ߂	moS~]ڡNW_g{t57GXa1Bs'Or!/2}\ R|e-F~Y&"V~U%R~JOE[Pj{^Xv臽wJZ4rџѰ;m,Dl#M\ hTK;

y80[9BC`>+%'.[;/K9Y&GN*")A0 [X(L#a4N[#i5Xch5Ig̛Qsa<ҹs ,	)H?.wRxqf@DuAaF<QZ(BVJLG@e}TF!W49*)D2d[Ak
2ʷfR5fZg9I߉	]jw_jȠgA-*G3Ae)D2>'F$j]_`AB9qpgM잆XȖ.wp0.xw͏	4kʁa)'% mZN4Ԫ*b!Hrk-UY5ZG@;Z1~=;j̸p=83{9Vp32ra1TZkQB_Q&(Uy,ߗP:8|LһD=/X[zDj}wYn9jp+|g{Yp _NR2|\n[C``
9V+*O4Hw~\s08xc{"v;8yR@S	l-
)@QłVߥJ/8+0%WWMӊ:"|3itwRkzI}Vgsr޵YP[Qu%Mt^MgZPi:ۺ[ehu$f:ߺ[iumn+;]tu7{˺^׬-k/X_fzmqg=!Ii=g8v,Y\y^hsy7zy`s5~K_kH>A(#3HB|t>}Y߀4.Dn;FgQ00cʁs$zH[@'(R
aԇdn!=E3nr&;M35䬞ګZL7xgT9>&Z!?I'9kXX>~/=Rqw#HA$Az<QIϪI:SI:\ouOaa=u;CCTҢ}j.jF{9	,q7Eo  @D|Choxܹ\Ӕ*_b8h(}`g0'^GAnNl!w \ļ[-'P[OfW{ݭ.GW'3ٹ6̓"d=ųMQn*"mQ2sCirе.
AVOLesG0PW)J0F&aPoMAg<_UfZ,CWҵyt=n-ZҷM[͠D{ 7Dۍ9(BuNOE<~'Ggҹ~/32d,Jo2rQY&
wBEΒ^=X?CYڥz"ɒ^R4UK5LF_U {P(23d:\1|Ѯo%6j*lj[C4WC3|ho=-󝋍8Χ:j]@s/q|v&̯3mro+eˇ;㛳Sߥ|\[SC̀'vGxIV]QMU5RUWzQST?Ɔp_\ZycGXf%2V}ʌ
Psx*x5^i9xQ╙nī_996rxex䨻+7Gݏ ^rCx
Q_ qWGkΧKK9K."ܥ`Au\T]~Ϊ	AmUw}kgN	@N@߭M@H3
@?lIIX<0	OF S̐OHZ+$#)L FVH 
CxZ_Ƨ'/G%/Gb8ረN-C`vt7:z_T}W﫻u.H7tn&MZȦW"}䆸k}J[~ePK     A ^f   0  $   de/cardcontact/scdp/gp/GPScp02.classZ
|TՕI%LdA&	M@0 aLf	ZDPE,vU#DPZ\۪mj[ݺnvvRs{3$3I﷿0w{qCG MaYEEr	Z#ϟъhŢ&j;}"s	fOY
VUA%?:{ .=u._0L(kojh`UB~LQD5שXzD#aSbNbٵÂfgK89'%*gӍy~_$k4C!-kad`8:*"[bo/ZGۜ Ŵh$"1BAMX0QUbtb`Gf((W1fZ`w"WT:j;5z	Zd5ROCd[Ҫ
> |:͟zZ1Y_XO4cPp857"/"ڝhEZ,{wWrB2d!;7b>cE:_OP>
#LjѵFE-fZ9eoZW^X`
/':YZXX Exڥ6Xe쯝x4CS{@
MhfSe Ljy^3醡>#YECH"+5hQъ	xg۱

.Rq1IXu&8D B-hPi)kHQGbZEBuþP
-ZucJQG0esxOd*XK8sG8"p"nvBAp4#åRХ"	XX۬}9GXoPwsrܠ"ݓ|5K)8{fCQvt[F2XdSu~3Ewx+É`VٯEE*;أbņNaXkDe*.9i]pȦktPsW)Z53@xBcOb1_?ed}
|E׍*¸77קDM*nElw*[T*	:b.ff`4KJyv
Tq/0(e/ԭ-_;*I'A9FRBtb	Fe4$<(xpz
󲃁Z]TLS0@iSjK؇G|W	_ӓВjk!EU "ވDtdb?QlFiǓxJ<!kkC\c㌁f+nYBq`Y]srf0"%;Rˎ0Tm7qDJG$<U]yuM[s}:Ek."<%")Fcx&(3|)mexo?nIX{/U`c?k";8O
2Q6b?M֠s_Jb݉NM/Sϗ|񦊷DVFS'NC=X,
gȚZ;{
U>'Kk%<={Iqm| N|NaP55#
>"
PbG|!;>sSN36R'|!T['~)h4%*e![9;v|R௄3FZ557%8.<89D7*١J"=HWGKꯟMu̢d#8}
`$Zr<<TgZXdc0rkh?
%F*TAEH)>Pe?Uv*JU#?XNilp GdD.O@'N"EաvvX:d6
Bv<PhXT}	M.'+Mc;iEn_ND57mnT//]<eV?pO(P\/5%dfb<#ӮL|O-ieȦ lYΡů!֖uwb͢.j1;~7Dgm=̍aRX?!nod-FL٦,4.VXOlR WAv~ZlDX2mS(/VJ]_괧,¤Hu$CT_Ay,lEӅدM^tPK<kfY*rn)LVyhpQru5f_FU)FM
]!~}VD<i	f.!G+3l7+\g3FI [Ia+(o@^
I_G)d8l~%
iwa؃'-+HrgsuP{ׯ^J2 Lpy-fK	C"+%#y'pd	gK0p35?z>
Te1CuM:}dϚ⋴^oXQ|7avfP,зәJBCx\J<.CA{S;EWhÜj"GR-	ĭtaw[]U^XW\o7Z|EuiM<'֝L!nmnqz;C|`o~Ųw˚٤q{72@ND]ZW$Bb@l\]q_K>ګ*b ߈`xcdf~S'J7;u/!->!YYf.G)l(Z^`S0!tq5p(3
}*Dɰh&Yf
~?$1
ʶRrhF{юIge ~ONq42ţHX@
~&?OϹ|E0rlnmt}gw0n=<iK<am;YYQnӇ]<,c̷1p*%3uTIU|)Υr#<tUePQK=2?D }\63'܇o9"`;+Pu*sˏZPեr{Q>z4^,oXYj)^xk/V;;Ŕ|úC}H
Jv1a/JA#m_q؟>K]6z<҇+\Jes:u݀mܥ
6ٵMr䊾W ;d*vr_};E>4WX\ݺ0wóRB><ƈ'Jpp޹#yPGL!tĥ)!-l	si]ٮCQ>r~vAQu!Dsac!z`+{e\Qƾk{o6rF#v$7=Lb'--ᕸZ1܅(JEnڏ{K>zKG]v;dib-BKV[PDB<N -]F@CLZNfF)9X0^&r0^ljfCJv<,0'tf('X
6PU
)X8&)t	ܘ}ZܳD>TV랜+ci-=Y@J0s<z^+GږvHI(ZY␎wҳx9{Pܬf?KNfGNRlۘ0Q*I:y<սx+eSjY9dRytgX͕O]MRws]hr!,'\<?doJ``<_>\jmr9_ⷒȥZ>,8ۘpAGeOޚJU/`=?VCa|rž^ RYtY/*.U؋vr*].g/&e^kWrC_UBVdt?,(ND㘚4.9hɠ9:\;\94 [{i#h9r#h7pDV+iDM4IptWcgϩ +O9<(<'q;+/v|{|W~7c?x
u|)3T_or{87tޥx
|@Cz##?ѻ>|N_L7D0MbSMd1p5j)p)vo )NvR2RMM;OP 9L/12~G'HKS1e.!
X!?
YN
K>A[E	'K\FA,S%7?.
|!EnDZbSYwRqr#[MF\ڍn5ōo5]%SBFIhK14	22CF&`hMȨiF&(3=/"+(8fe\~6)sdSosCzE8NV4ӌL1z<l<&oR)'o%vUbrQOii.v=;1I<V.IB1L!3eD
{v*4Exw"hXt",G.v ҦLu&,>T*I#`0#`H7"M]zfڗYx`e5,q-K%^5J|*`,qKbۿF/fzUG4O]qkyZ ,JP(%B!l:
#F襲Rsep>1lF[3N3&2	r)*s0Fr\yfZH<
Lk[fZ2	ZgU4LkgZ7эCֿyvgPrKrqtk3;.onr?V9ċߞS,PC%t)m[>=\/CqPK     A 6m  G5  $   de/cardcontact/scdp/gp/GPScp03.class[	|TչN&0I8 0bb	.I2
H]K203 bZZJk`ZVUk׾.}kW{g$~9wsA 'pmc2ft*xwCGwiڭXOj錦RVRP(JNזÇr~0Jus2%r]DJP6FuTɴY[OҬVM-Vo[ketJԚIJNzhc
tE5ujM7hqk|8BpsߺP,
ҹF`2iClhSO*#k~f8
ud*hJH$цѭl,5Gk{NPә\k&jRC2hhe>!~|Gh1Y.ݓK$
MN+"aLAg%X^Vv=D7&l0rf+kD)1X;,4pܨg(ܪLeL*"D&;\${Q>ĩh=xD="hL/i-jb	NͨvuӛJz,3p6,9]VDsm,x"4
gЇ;c]FkCXm`XGScΛ
kv+5#ץ:R!k#5t$d4)j(IM
O66?~s
g|DK/
h2Zjs뚛74׷!gehL+۝NeUא,!9=iv"	]&MH6͈ES#.H!m`;|0*6,Dﴶ'6n̠9=*bX4.,pƌZ,>cj!יIok:Lnt|=\jU*GQ.
婣SVC1u׌rϋM|\Dŉ*nJꤰ{.5pI^g ٜEO/f2XSW$<+M\ήّ2h}Z5:j(Zz^#RK2qZ.5P1p`^	VNy)Ϗ[&n탯5VnbS\k8H-
6hHxd19HN[l@mS߇U~܇//+%oYyWm*ƍHPoTʍ*?`AUXhϧqfE+u*P?E<	P%qƙoqAM|p	ꝉI9ʞ"VˏpM|O1ncTe&)DV0xFm
8%Xo,%|vү
/^*5a*J/-tK?ŋx"3?}R6,|J)4DbaުA?^Qbx ͡d:%I(~~(h,2+fO˯~N TTIןog&~UV{޳$jC&bPW[)"JZU>9ŏ7;7SH8e->t7h
g1WeU0~mMq+z27qu?kGDtIjwLP茮7E3V=Ѥ}yR8ۇC,ST	
Y!D+8XhS4~%).q.ё{l3yPt )+9G|_0Ma"iuZ1]wͩ{eWJLSƩ®Y;!V!O(]U9gܲu~/즽R#{u
N8mXq%(y χPt;QLf9M˩M*ӨH"'4SF;iYhHh`YYK0er]_ˑ*4<eQr\,f`2ǔ2O09;Å$
`qny?Bk=c~X/ǚ@TG!uh4f^'PN$Lzk"nc1>]>hJXZݥh藓dCN1TpY^PppN"lJv_p6pWb@]:˒y)
(|̔ӥ4|5+ZAsXI:BLGOv[!
u>Y52hL# d~bs)kTs|=C-9PNF,cwqkU]utMdtǎ̳4qmacKƂcEOF+ZU
krmݙ:@W<9yrߎاR[8#ϮCmW\G~5ExިQ
k[n^^B-ƶ,v;2kHwէVmy
qۨKd?&G*
J_5!Pۻnk^]9b"CcM=)_ve?|T2h
T`q1C:-{{*xxLW;,O8ٜ6bC3(bWG3SLz<ckÈ&Vl%qX=_Z8qJX	_i[p	C}v)ެ],0iKHЍюA^1Bݣk#9h:kmR/[pb+0H+[O̭-Ca	Rژ*}zTQaO
zvͪ,mÃ>2XoWV9X--xV6mG[OZ<?}j-fFyYqWU١?1!}CxOo2Ufv9_2LZPuԁG+DoNs,˭\g:ɳYՑ٭57nu>`BB''ĜڦKj{қB|RVa7Yau΋ֳV-Դf#-z"ǌX\:eu3h2v
Eue|uC~`GOXtDUJy.h*-=#<hj+c͸~8^=Sی0adMY,|oFcՐ
m#c|pɲVA,d=7ȇ
kqǝ*gqq"&q3NuƐ ꟮sp2G1(ƩGz\>̀0SQ&T/a8'q}GӦ/Kcl)o"^6u7|3a>= 86	zu/؇マgO&Y<{=q.|>x4I:>:%5R'e7N#]>\R<P^ [TH{Vzɥ}_У`
es/lH4e}X=.<A}8sYZWCac;$eí_k?>l[&>.L1t'&"=r~܇KFZ"X+Rvqmݥv
\kjZw+w2h
{09bNU7h*7(*{:\Nn>ܼw"Ϋ	S簢A󔳒>|aCGl1{qWaq=qma=0U{;_ SIܣKpc}g4Z< =8Xc%>Kc*>oå2>W\9q5Zd:9,ҊͲd"We#nEna.;	_;R)r>|N{u6~t5*<FΠ+,Cd%|V(WQs]']Dzm#C><A.$Gnʟ0c3B^̓8({|O._1zQ<fr!	|b?p!dN~z;O7p{'Gc*H8pD*o,=
z9l{
>uoa<~nۇ烞ڲnؘ/;+^.?7GaNׇrѽt(rƳZ<O9$ǿf98%KXq6^f|*.kk]vWuⰂ.VEC.
]Aȭ+UiFDjOY(׈$gXx>8C߃)~)p"eJ9r$4/*l]˭8t *6Jczu|҆vi`xaտoYޠ*XއW+wԁX<PU+	K!T.CGn{.U׌+ɖ<2px|b O<

|n}b
e53z'Ҏ;^m//MѐzWUdzQW&55yFC2%<a&5O>Wf91{^k}R@s!<181X'}r}=@xRp=h}vH.MPWKws^ͩ8Yy<C
Z_zw<H[L]ULjgPcӃӭոIZxColw#nKzï7;	g`9عdI$6.?f~OU70r$xS4exJI̐Z+IDHNN	\Nf-2KVO<yA泳h_ȱY/d#'*eJ>ઑfk4N&$\-rkrk$:u!ዤٵSZ\7YvK+,Sጪ1],73U19nQrdt,Ca@)w1@i-ag|,X^9%{	dHTu=L\<q4Lgx勜;Nj4suҤ$Qk%yʗuj˄vj+vk~Un
X
/X]w:Nq*2{1uX]t:5t*xATRcXv<?=wϐL0!5Т6#8y^x'?}!-ʿ2<nz┖c`\SA͍^YDFʙ:αh$D$D/
VBv^'nTdkd
)*=OMG%O"l&moy!>9AȶJ}ny|`&Lڏ[W_@Yrʂ丗x9n9>cSrڒ^ɢh"}&=Q*iC9To%Ƿ;3#ǏW!=UlL{:CX?e
,TX*P rQ
QX9}25IZ:("*	y|2yR\`<8frsD~Fkʣ7֋RqZ:+Z_/Nj(WIzJ&uʳ"r75ַI$m|N?_K=fOGPK     A   {  (   de/cardcontact/scdp/gp/GPScpKeySet.classV]s~%YX*I$ˉBB$;vb"`ӄҰ^]JlЯ~M/;p0$3!C>Ʊ3=z? //it D@]V\tWF,.WMfPŜktl;vpJ Ϧ(PrE|29m!YϾrv4x,	xB`o%Z{̓M&<r%TlNX	<۩gʢezU},֚554v/'
<]hv/jҪK:n.Hr%r;RT~6nĔW
<=ɚƖX~~b }qUz>S# ƒxVP$3mm9tR8(R~-5ZkQ:}yC({M,	-ΩM*c
iXdSB(
ұU8J,"<o"$^Dy!KUQ,\6>AUl
9$jyv\T6`=KE[nn"-O:
76
hu1Xis?]1F%:#38k_ĩ,}T3Gy%Yff]r\Xfs4$&j++"e6cxY"S|ܭr.َn-I*K%r͚1tg}u$ekּҶY6ÔĬ.g;6FEē-dVlgZ^!2T\l6#hӫ'>G>~bEmiGîvYze41W^P> Wca-K`|*yQbY$U}>䷀fn@>#ܷ<saa~,9iY[?$n2e̻U?ٸefîdEw'~o$~fue4"3iG714vt
\jnrX8*v7VKe [&'ޏ̆k3OcCOOūףz<Z_k2.
\-4یVèm7vaob|1Rmt
gzmݗn$WX6{'}O-%~{zzB|zd돓w1z-C#{Mj1L$&"P!T9$ ~KD2gxG#u?x&=؍MZV(k]@b@zz$4'hWٻ29ŗx.N?ܟb$G-u$5^D<to2XKL~Ű' g".0Hab ;FT 6gG.FX.Nޕ$q$?3(HU3t%s-dzU(E7qZiP( /J^/|ڗ^kѳeniFS᦮miFS؇`jiKS6N~)eLEE&}<6]3lbQEİ~(+>%Ag?PK     A -    ,   de/cardcontact/scdp/gp/GPSecureChannel.classTmsD~.#[Qঁ48/@]RR1E:J#!
|(3v`??aIbOnW>7"0	FArgS?	ziobmkGa~r!SMuǑtRs=gqKD<D	ll*Sڳ6a䗞c!]mRˡp~RyTbYtC)2#3`bƻx8bB=*t*8$2rBuL[spH%EpeT%}tm?o+ʍSQ;ΓCAjWi[pF>qWr]![C~p*$RclOF6Z
p7-7
0ITbpkhwDPcjV'JCn)Cy !]帓,/Uǒ8(ƹgQ!^}P:-']\AU	I8-1b56h1ڳG7ժR)ۨ_hwU!7h.=L` !O̔+j+
<sah*'h<&qpp&0GO\%!&ɷɷiѽthD.6z;$=$=}:m@^BeˢXd|1>Q#ޯx7
+ǗXg"ggH8P}cIG;@>}/t"Y4?Ei-Q6hlWt0|ÂD.~PV~s:C]
'DssרZ:O,%u^#?@P)ʰP{~,'#aTPK     A b  G  -   de/cardcontact/scdp/gp/GPSecurityDomain.class|	TյOWխ=`@"M*
حL4
6@)(ڪj$h!ɯ4(@hbbqx^͋y3Ơ{zZ{}>} PgPdch]$j$p$Swut-\:33dB;;ef	'b؂vtb[1IG҂si&s]:D:xg<ِLmOk9(ɏr}VOUdj}x<^NWmJD,p#lTbdnKX<NGRL]nSd*3?JՋux8QזI
VqBF8'L,hl`DgOQAKA$i3xk^d@~U˱إkՠc,p:ɘ :1Փ"!]!0F
&?B]n۶SnwVd*VR)EéNq:qrC.(uȇPS<N7lF`LAUKɮDh^3Am8Po8U\xWuP6``Ԗ(DVYld)	'2>e <̧p䶹iW+
1#u~W"](rr
* 
\a1MݘLƣjk&D0;Via^iTpX'$MW6VcnJw" N*
Ro	=֨'ɎIK^<Md*kb="mDANR
G^;mipǶj+FA̰qG&4cm)KhGNFba=aN*h\pBIێf[ :D'Q#OZfzm]6bՄ:	'cwAbKqCt4nV`A#ͬ?7f-D8^w~4In]:o~vZC+m!M5t5#6GB$NC^kc,9HG$R`s˳Aub)N\gz7F -zŕ0a]/.296)(Hىmnϓ+Ml/~[iAkY}t
 Ba`.3ALdjq2LПF2WWHl->kc7>G7gSCldVt*G[xƃ")h̥ExNtp{)XXr
D'3Tb<Gl</+n	w.ţc Q@+\ed_t\ja``ɉF	UF6Jv;4x K2m4A Io)oNP3OɯКc wl|s"h:։݈egm?qcKtPx1>=lLH' \P6	dɟ3ڥlKZ[кb<AEj6~_~:</I
	`~c㷺0|^80k/xEx ; N L~Qs	9cՆTC/679'vR|{W=KȺbn	M׿X~	est쭱hʏ:Y¥mmQ2zzRT%S!
ӰMx4H<	M#4,
P)fNP艥Tm)S.u޳#FN]C)Liy42Ft<F'#?p_q98[B2~4Ȭf4)'rdG5-dL
V>9/c_qԎL/',SO)Lj!Mo)(##8$eLcLl[q鼎uNlgWFSim08͖3L3s=2ᧁZic8ɴr-e4Vv,L;99Ef5-(V_N՗i~3і/["^Lc^z-	=l$88_mYlO>(")e6p<(Ke%&ӎA/_M)UCPZd
KKwл>ŨնPsۼus	`ɅL9Q[
Pċ\lKXF衧 g$z(g3o&xᎠDeLOP3}js(mzfB&_!ZK4ku?)ւЎڲMRci:
Ԓl\`VS/wB	.7^6}MZ>hˇN}n|dKfue9vGlZKGh	Gv5\};/ٝmtv h1Q;mAn9^Gp/ZW-,ޒff5bN9ZS*&;w6{5wr|sm)jC@-`ёqXΥzg'FPkw_vbB×^Ĥx)oe*9;5lu$ag'1548{	dSȚzX6b\Hfj(	8p>,Į	)W$X6{''OoîL6*rsKt0J-=5wǊC#Wkُ<:u0ΎT
4L>r'a]_"x@#7♶UΉd]N.d'[+xf]Lv'v X|9xeA(O}7:C'-ޓU276)ri5.
7~XN-3S^MX
Wdm#]zmۣ~u%n\Ir>tb[)o>^1fXRڑQh;YWWK޸6G7{o7Mް%mlx}Y  i6Ѩ68xށol`{	Qc}ŶcvK::{y6͎&{}1u:sԟ+7shgN4]cvi`		zO((7 4 +e蜿IgGLŖM>oy9zqgds^ѩÈ<P}h\;6/7fטLf;[_'859NݴrtՆdJϷJjtk*b(	!
۶Xft^n_*:1gT}\%Qx|8iv'Fu^(ʏZzozWqy;LVzz==U~UM0nVDU.KVeD ֧RK3+SOM
:uN1GOX,ƍ:-뀑9mFnEx4&sswtد&.z[,mnS&|-u&UYҿ*;rUrScᇂȝ(h-c |]rw%/in{f/F~~o@<+d;5>w=)󭨢\sy՜״m勬JaO<v+aXmEdOoF^X	yj&v㤐aӍ~4 VQup\pN:3N|	0#DyTl6Q㔋خX)G!ǂӻMb;ѿ]Kjt3̘܍SZjj+j=ݘz TԴԔ*݇O`2"a
ccQh}$rрͰ0t6La<Ҭ[ьC<.O&,4'Xe,qL<ZY[prawy
8JPy7'W2}h)L>U'VN?]5*}jxDXm/[5CV7Vzzz(\^^髸PK4&> J*C8T|d2]-cPttc^\RY%CJ=8ަmVJB\k]*q<pB	u
1
7`2>ɕqcANdW5;qk˯ Kxp/s+	;<nVx^%>~\Ƹߔ.ߔ7
iL~|PWi|K{;lai=+*t "?$&i:;z".βGӿ6&6[h}凉/BM7X٩֒4.atykq)w?`>|/=}r~hƩӀ?N~W$wG/{N쥔i笅z.zLѫ^S-]Lfk3ڧwaLbʳ74Cpo5	-!(yYC/d'+O~jJ)1Vsk5jPе3
mT;b:a.CQQHH͋J׋Krt0"?滟H$#JIY+h:[C5<[CV5Ubo?cK	YQΧ,YvĒ2g&@;MעM17bkk@a@q9XgLcJmD&^^>̙ܦic(F}ZŘG;lG1Oc-t8N^r5SA[{:v0,c~|$_](}<[nQbCvv($dPh0`(!pɡw֗hv(uء;ؚJ4vM|R ӳr&t̐h"
dYf!%q!34VY;<#aYH+xR/
^.0LqW)4gcrLV)rb$~)nb,~*0LQ/
SW)0E?XLi;
g3"p*%~$H
aBTxx"3{xgd/ۉeW%ޯ%?N3'O_osxz^(؅,03={PWp7`BLE|ϠT<q̐[J+CrpBF@?	|A_HAA&G/Up5y|ff+[N\
y A/b<)4"l.X5ʜ5"2#UOȷg`Qt7Qs ˳Ds/2}w(kr7e,܊d~zrz^Y5La76yc̡,;pp.0(S#!^&5_k!xroh|2mz0NDp*.bJl2Nd'c?Y2xr/BpʣxΦŔxS!OjEXo0)U[

}sMMkꑗ8WP&\~W$tfkej?`)ջXdZ7ݭ%]2%gnR"s/\J.Xz9r%%0
rޔ9[T*\,ʚ!l8
y|}>*:~_﵅,	[3eH[C+dh<(^:'pLw@t;!= qRBlB&KU U16)]hLrںRm])oL\"--om&A/Ggka=%.GAS4hj4vN#t+'GޚFw3IJ;)z
a h>*CR-#HaX,Q{P^;S$Sqt܊5IXsСPfL.k2LAn̻:渾n92Ӄ=8S7:m4+hhӨ1[kϴkTz>~iY]a!{e'swL>o6tV>ﶗ_>z\İnD&Z_*
tˆKe@[:HZ+O-ۻ/šbU}pKN%zK8*nr4\j,Tjp0oAgwu\eq]*;~~ӾMWp0AD=:l@LNjє1Bx!Q{"jFcj"IjHM
5XNubtlVppj.u6Ua5l|MT#UMxUo|Q-":OjتTNV\Q+dZ%TP6$.UX>"r wOŤ[moHmWUR^S_UZ2*TڪFmj,g^.U3eA]UWՕj
5׏5&	M6Ȫp>5\MCuc#˻01^}\GsC;|q,q*!pRA9;{[-a	G:,UAL5sYңY$ʀ܁W8b׍+bץD5l$(#ABHpȯ,7
,qK,uVYzm%/%D
#16G%s10L~歕Q*FZYÔ?`쬩G	wZbʛ7Ɣx eGv̸v2`}ђ)'ͪ">;Az{yל7x]:ntޡغi{
A9:Щa%`?rGA0wz)\<.N3Dĝ>j7&a<]X&!Ki .W*0QT3'JSx`.=gs6p9g{pFl+w6sll`'6hP{6C	ttw3 ڄT<GE2אo'skuN4I:O
DPK     A ˃  W&  %   de/cardcontact/scdp/gp/GPSystem.classYxu1XkfW%K0~H!ɲlْ,#;wGګev֖Wu4Ф@\(-BC*vhФ!		IWH[sٕB
Ϟ3wϹ/u 6./
PTႛ:4%NDcPӑбP*GFSǴGApEQFntߪKJ|GqCt*!њ!=NčPhJ#ɦ#{q#:yQb

pWa18
G=tcg^=Y(Z̭rƿσ|?Aձo{!Ee** ι==#YV//\E
VC1rЃU){[ Rba֠b52⮾>a\Qٸ}G7hF@F²|F"ehcl&x2O^UA_Q-|T	ްc5®w湃y\'}w3VNl%h
!5{TlMvts0NwyA/v`jbIF;nZP=*P4JnƴxHvy8`Cs}u^b[T 4;v`TBiZR!x[qet"2_(Bt1tMĽ8$/L.]O8M08
e0*(oS4]}a>8OY~SG SW5oDs{v9ŨƑdc&󋐂 !9dGS+.vN)O@,\CYSǄsz1 >ȺL7)1u;0~Q*/*gLfĎ5ukpFckKjvT| é<621W<+?.́o>{.,{Ƀ_K>Դ̀Wt-Xb
i-fy6YqZoNtWy?)-u=4G޴;ܑH#);[<mBW7c8q;D|AY6DmȺV᠇U<%,JYIg3<6wC;dDi;`ыGgu_Yml+}99x/R"cXZ	QqXDn:}Uk>n7VG$,8+!c廔Q2hojLBuK
>'rܴh6gDG9,F;ÉJ0Gt,'d"q-jP#ҿ#_W$ 5UHߗUd{\;
X2!s+U5X2me.%X'Ϯ]HwX*WuPˢo)WOdSg;HH7ҒLM*&k9jE!o`U`zU3:73X{܊sO\{!i]k089G1G+ZzWN0{lh,s|+0
r3LDVGÚ> Pl0GųetQX=WetW/
򙓐\sٖEY.	m'kCYx!Fu1I=a$3JLTIpCɃs,dwym>RP60"Iu^i
#-M{8íհM'Ƒ& 0dO,"?mƠd`<9ò`u̂iN>NܙR;̑
:_׍s
L$YX^/f=%\ĄFy%oarKU|Gq}FY6k eK˜df+)RY|0*YM엢W^'R<3tU8Rܜ{{!S3}; ew#üў8Wn˖ʝ!!@p5۟HaM(N> %#08C]1<t!*qS:S|H.òEG5Иm!Qa'@sP<R$oK&nfM,('j0tYE#4Y(K+Z~7`F5glyg>m})\pOZstVwVŤpw9k!cN@N:HO!y,rLW&]k9TNڶ4msmu>׶ִ5֛벶>0-UZ
^쇆[0!܍xqȻG&
-(]kQm:c/閦p+h~zT658]S"nR6lq~gzhq$OOHc5cM@6!M}sKzIaXN%'ϲ
 WHU
i
~-,&3N2SsA16PHTkÙ!!xq;ONa_>}'Qr
ePQh*7p4.y58w^Cy
]~v r}I.Ǔ~s?~o=81(E+N<)Klxi3X'P6r݄r<0[q\Dp;>q<#fE2*:h	ǃS6lOQZJW3uWƍ&?8G9U[\|)HQp+w6c;))w~IceS&rWsq(!C VxAwEO26lv<8/^dҿʤ
5x	<[<+;LXnx#x&=Ȥ_KUMuڦ:mSA-ɺmچ-T"u*%
Xs*_f(
N*\
+σEorFVsRe`r°5SfiwͰ;[b>73b1Ǽ۟k_#:9meµ|%|E ƇmƇmƇmƇmyk1^VFl*b2> _up\aPoGxI8\o˳c힮:[\]wgXs2q7#<n2_/4^y%D"%DqH{4w>ݢiT!S^w
Og$"ķ~1i3U<e;B.s.7Į=!,RDPLXJ>.Xj-ŧyJӵ=v0By5jjq'.ZOQ=<Fk5iZ/zDx6Uڈh^9b1qNK*pJ^Ժ{ٶ=NՊXۨm*k@-;َv]:'uu..geL$?,Wmx@FUxɘ BkA+XW,V"'G3u|<Iq8MWb-Bb&9@r~p.xKDU\TvD>ќ͍ɪHrDE!\K ?`3̀<Đ01[yC9lU6*r
jrLK@n6۶;fzC:K;|2?OnN6Vt'⨦ss\cKg1'BZϩeIw4\9q,bњy{n1M
:LA%|eWRMvw'7-nqqw9塦-ʚzk~er93y??Ru٘6
>h7ȂbXAeqn!qLe|\ k?EP	e3O Kmt_= HۤX
Rf?uPK     A 0"	  k  "   de/cardcontact/scdp/gp/GPTLV.classX}tSgM-mu+,0>v1͖QhK:Jx\@zonKs:s:DńB[`oԿs<=ޛ4
ip8}yҥ.	N.V&Xh$y$Hhژ_PB}F(6{?hFHZ!DBt`I)PUTb6'
KyJVi&M`d
%4#̸kiWP-PC͌FxRXt$
Rj偟zrB*x7*eZD:Ɍm#uEj]β6j`)cpVjנVذXŵTRDaKϜxI,q-
sJu辶~/c*hXR\b(`K$Cz=lm ZV53
-J	(wFxEAwA7c\އufIIV;3<hfr1-t#pJ17jkLڔΞj $biǨaG񈞒iOR}Z7~dۇ[Ѫb30]z:[l-WA@S)-U;bx-& tV0.P3#tӇn!Cg3hpT܉~Q}{dJ7_},Cȃ\w)ثbRiΐ oC*"/>b?hy~(l-͈rҜ|*H.)_R*F`d5bvo	)ofY*,Iү%FcH(84;YáL뭣Kᰊ#R[vtFަC?i1CLQ*ޕ;9n^jVB#h}?Ӄ
glF:&8nXicbl >VGMܹڭEBW >,eL+2J$QmAYexXsҥ#f겼i#	ȑnm9}5UM&I&|Tȇi9ѪNё!쓚I$G~͌}贆RiUy m5G#4ƴKԑֲ{.^bݤ%XXɿ$oM~Gb
!1ZoA
(RqX({q=ntS4ג%zvPdJDe/yvi)
N)~9N>xz8̱[ 5/#L!5]5yD3+SfJf愖Ng@CM.; Oi
@zrl(K4.8/e^e-%
pɮ:Td)h	7Ѧc@wJ39F9,ϭtrԔAUK,mgzFi賿:a	}Wx5C~WQwG{{͙*~O^>?]oq-Vj	,>G.'KګǯL{pTLnS.b
]r鲩Ēf!8#[*)tY:eh<U'ARPnަVSbZvD#)U:6eh34M됴:*u[ӼS"'hm!
l4A"l/08-BýIokQq?E܅
RiDN_Oïryhp|ոz<^=/1*iuqR3Lw%75|gRlW{>
&PU@mmڪ^m
ٝygiw=Dc
Mrm֝D!b*Ƞ*^/&/bKVUpvkN=yl(r7c~ ;w벧}<jg!<!|""m
;<0]cE1f1f1=[ 0Pb/UIx(KbE0~Q+g|2N86:;E>vy;}&0Ɠ{ws=iv5չ&p7OMp$9;lsQ$KZ3K:i*aeԨXoy19ϯ2q#W܂6'+ÿXMKD+E8ls\O4ʓI_?
s®2~̕<Fd.옏eKX&+++}=
Uny%=ē<&US،{N@+΍t}iuVS/eK5?2
G~PK     A \  Z&  &   de/cardcontact/scdp/gp/GPTLVList.classXxSy~ݎ$p"n/	$eB%p,²Hܚ%%]Bۥ)+k˚&K%ܜ[׵i^.[w_z5Mn떄ut$x_翜{{o_|\.I'z^}fiU}	cc^#j
xǓqQYUUW`\_ku2`K<kC0Q3h*iQ.:u7mi*7	hFč@EKT9UVʓ0!bdh.DL`2x+?d(ۛ#Q=IHa"a"z6ћTҏk0-!pZN|GYH2L&U<IκVzl,\ P-04,!\eD
fDWHZw(z㴡9gPm 1G`La64sojB^P=5ں z$mN0 L.d5p/s
}z"#Տ(z4pʤ/ZVin.iE6&x@H˸&eRza&m3Y44+HҊ!zGKJjwՎ&qKZtFNi 6Hurn`S \2u +3F֠Ƕ އ6bߜ̚z2ʌ
hhb|h
#EXlXV]-#W4W]Uxܜ6;RX&1:DIN 'lvß㫪Ǝ{&FH׌:"|D =H
8ɲCr<iF kA
=FFC94/eH6Rӥ8,cK\;&$գ8ȋ)=~`ڐps1Mz$t.*JI=++8Fڷtlڈ;,`CXӼXȪ֩7~8ǽ9q52I= PU5<eWI#6p >&dtS~|\|'0z0k=KF4>(PS"KW9tL:OI3<ϼO[NY|n(/-[f]gc|鴑I%7D_&!w]ލ6/&OxTn.H	Bnn]I57h}/Q#M)Xj{^.;ٛxޠq\S1,o'l	e%ŎpCӇ=Wu<`ovaΗ=LڵTHvDwެr*5exTZf)ŹҖ||6l&B';`x,jad(!3l\	K4:`_y MvQ2wu_	upۥ#Tz2ʉzoܬo>{FUA
z
<0"߀+׬Qtrqh2Y3FIޣrfH~,pTټT#x>K{tx3E\`C-rb{SnY8da
ԜlRlH, 	%TgP^4h:⊁a5eĢY3U|8.萣s誻Tb7.
"kߚDUq)Wc:4W䆦Td
+zQ)#~&Vp:{Ta$WWR}}[sѓْJuKT+mx#DkܔhNT# nTjb,KKkŘ[p!p(w?G
?&ds5]Os,W 7y<&?r{巐7?9s`ţhYVKsk<s<kv{_k
֋	
:as	~_* n#,>><	opy\=;XQvL9pwɡqsCnwܮ>L=}d?.<G\\ǒ,n>ZX;5'0_~ȏ'9r:;­ް~݁mg.#	@0yT'ڀq"JƫЁzr{		$BiH3x?GG\䐂g'O:1*W҇7U[6xzTa37߼!%hX*.a2
K&^┋5
mUAҌյ.S}enQ	Uu8sBV[{U\8	&u.naxn~~vߋɸ+>5pXcN(l6Ӕ̟Y?)lV+jDSezs}j"QD̗iC
?
u? qL.B"&)Hdt*\=9KXz5R멕v1#U>;'0^'@N	*Ԫa`9M}Z5Z~пk6>Od8zB#DylU|0'1)BH=7x<G|QsDAa#0:^ob^n:.­(+(2&KOED45j\߸W*4ތ2<|pdGVprSQBPxTԸULv	M0&WxMo(|<EE2O[͹33'ǌf.$#^2|\'{*=>~a{Sa>ss?
nf:?R	QNVJޫul/B1oۛ8pfB_ibpp*
PQN%I>b"I*OvIޟ'!f/X$U"CB{nUI|9ўYTIYp]b1ȑ,dIp^bhinނ^z,?&",նYq|bz<#z*GUb
kXTQ\bt3-faGEՊC,㍖K$I:nt&NmJ%I]Im6I{l4C*bxKdkynU2ʬ(*ΑB;)>	qNu,y@Rp#]D@0Y܌rԈe-DPg[y6`6`6`6`u`)/.ݯ3}a;ﳚÃ΅T-P͎Ro[:ޜhCTg:'TFm!dencnGD }\fAбv
@Fq趻\;ly؆
a[KD"hkVO@Q2¤(&ͲP9l]$Į<ĞE}\6
;BA8MCDNf6bKm"jj&N6v;.jIbE\EM2,դ	Xͷ z!*|!3ǧIw}ӄﳄs;MX>Zmeeem
:!-tor҆;ųwV4G%E$)&3Y/^|s&븅b⛈oUxwз1c6l٩~N}vw*ϳw׻Q.߹},?c~eu;rK.]6~lvm[g.)oWls
Rٖx~zIл[NN|Z	߃łTL|.LrxPC3jB07/	lFxxxx(%6p)
>opo5.~/IsԚxj
sы5刃~dic"0)8*Q򬆯0ngNZ5[y&m_`
&-+iq KpkDsk9w,^~!9*cD9¿PK     A &nJ  {  &   de/cardcontact/scdp/gp/GPTLV_DGI.classoTǿv~'k]`L+u]PMj*4Uj0N'xa$^0$D%w&i[s>s| z"RHes7c׋[c?j
FͻNe{U?㏸w֪= 'p]w?(a 7pbw^r7x4FC.FN}Kx),J|
pڎ#?ܬ\"N
?@
_}{G#	j;3uzn&qAc}ONUER&:B((.b,IY3#rX21A-֭a_
tPn+S=7蹑ӊrtSW#}6SLb)EzDHIoLRs1gY ȓ>5庢. {0۬#3~h!#rv9?_fg~C}XzDi\dKXF

q\śj#D2#6+2̀s@Cf9c)WѧVk܋9=A*州"e#Pu
XՀgd@TXaFh6ț?xO\Upyvkz
iݦef=6S6پ٦ilJu	9ȶnj7;lY>UliZRnB&MX b5xz-j05u+4jޙDZlyS7[j֟.表q̽n^ū.mfJLQLuoPK     A   ,  &   de/cardcontact/scdp/gp/GPTLV_EMV.classS]oE=ݵNcS7v¦%iRIC]@eZ6ލdF$}FB?	Q	_B5gƔJ[Ͻ3ssc q1 (fmPv^_hUF(l_*?pjNӭݚr^˖#c(HÈ
YxNﭻgo
k8M-aD 2,r-yZW6=ϩZislq}mfhԛ~ˬ׼0h)2g"!!xI )~b}n<V-lMV-j2S=5
"EZ$ɒU}00շbmGDѭ9?q%kc&QW,l5]NO-.߲lHtk8"TRUSofkt׏k{[뻻--sƺ&zYq]od@`^ 3, 14h4~\c##bw'#ӷ\pc:WxU`0^25cgd;9cy]S	0O2Bt9	' #!z3Qb`@'@M<˽KR8i,c#_1.)*z+*?Fba&>_;
²pE[M?	kKFZz82yuRڰG{S_!_JM+i?6?_&۬UvX$6HI$"wd=EcO#0R\oP16:3ݓtedyF:"OΓOE
0?ml,?%َW/M#ıwo)93}B!'d"ZmQc<E\BSqt|)cT0:z9ަv5٥EpCSLH\PZPK     A     *   de/cardcontact/scdp/gp/GPTLV_Generic.classT]OP~κ16:@DS>C)`e	r=%[b2k?M@1(=]fby~>A",#.}ㅑ+N)M"JcF,ϙk3L/W3jT=yVЋO]ۤN(10MtC?C2<!而A11+׹S(\bT%\>b^Cp]nVu%簠ui " 5bQY[/>ԵGycrũy!~яTIi[K"Lm}Ã]2Eik?=0pT_-}$JP_nH\QQ`7Ypoe+o䫼\.è@R|53<8<AiItYcpOP.	:)!><FT#oA 53t"9bo& Ǉ_(D߷0Ȋ\D[û?	2Zu
0U4jC9B{M2a2A)5t>tg
ilA
 #t:P*2mpfGB> I]YS	uU6dȜʞQ({JlQ:-G	Vi2)ZQ-	qקOUhS\xE_o_nSvWC(_ͻvw躄?v֟2PK     A Ӽ    &   de/cardcontact/scdp/gp/GPTLV_L16.classSOP}wv|LA`NL0jXRɖ%SڛR|}A#x4*sO㜻o߿ +I#"#C]u|M+-hVfey6-s{[˿M|ucqHS' 5f/t-I\նيJYEM[;U6w|.>jeH %03bkYF}#-,1(tDtC&U֒mC\v{| C$_jkybz͠쀟
 %erƢ8 KJzUnrmtV]]gsÄzZSR5J=Y՚Am\Iv-ۍ#|ac^)qVj@OSG5w%ẗ9#KAtR4AkX
L:H{z+N0|
¸Hv1\"I[De68e'i1qiG3"SO#|D_cqpLT
ezPXd.`##-NH&'-dpFHK
>tY
ZoBEhw~qpE1N;	'1tht?X\cmO4},Ѻ^d5 ltH#F"єѤ6i6~ PK     A LR~W  *  "   de/cardcontact/scdp/gp/GPXML.classYxufX$x+$ے@a1V#ia]+֍N⸍i'Mc;N
M$N4m&ͣmہޙ	B;s?;Jm#F;gH&t'ýpƭ-~xj<.OzX2H*̄37eF2khfC.0B[n4Ri3@>.[MXT2fy#ޤ%G`AQ$P=)(x"S03ˌtY@<&c30Std"YJ%MQyp{&R fTeKsi<Toc--Dh%xd9Y*$pjX$kf%KU0G/)Q
!`
u7DN䉅ba\ATiD"fKjWE`X&0ղ0-	]RZ\jנ#독p{VkHDj?y76#1eY^xUZp63mFNaO:R@.9ކWa5:V`2gڠDxr@4g4E\1bF;dY'P9qh{`_LB;aċ6FDw Q
dL
9xdެFtM挈q$=I7 	[utK ӗJmHZ'{qDn'B7
3~^R|&lJ$H4:"Ṱޕ&kA<hPYFJ#P6޴|.\\qCqy5礁f[,))>΂DҌtb %úblr
,
˂pʠ$UU&PTs11"*pǥ\ƗvHYCVX5gE܆;e^fm+eylF(5jx΢~s7g5ِLƢLtT$Q2?>kߏ0ˤ.1}d-jj eW^'ـ%?d+a!&e;9cKx O3cU更AVJ<*)97!v/u>O2lWtN~hph湍cʪd	q|A%)#9;i4qOȨz>U.<L,*P2
͉f<zL41q'0$0H&RV'.Yg^j8IJM>H)\4H8y2k۰yǚ
7bzTWt|ou٣Rź![Q@?P /xiYZ[Xz%.?ǴaL?~X$ҏ⵫#썛\O8ُRʆյ$gO*ѐV~XY5<$&~!2O1~
SƁTy9G&bV[ެ/	cbKT;=l򐐏-?NLj	
,4lsd¥$S^&aS.|BSm9,5&*x.LXj cF:m4&yfiyHEo'%K/X 7a%00S]idj@Ό,arxt%ʣᄔqG2ӀX^b15.l%<;btb4f]/I$dR;j$mN
S:|GN 3W j)
 _@\
<I#G0ul;GiuX8r;\IP%%=&9AFn%WRd1pI-]V;
+~/Ԥˬ&2ш
#oĚP+1
זzYӣrw%xBkѽ&(Wxΐ	".cHed*%}ef˘}[wq/Wa]SXTn/hwU#Q+ۓws>jd;=a<qU$$
m zU%Pw[
23k1wxm0f֟lftw]}YP5zH ^#jfiLy:'aue/Q\[&ԇ~0n?_ ɷ)xGd	M$u(naRV6C":[Ol|쉖wDb@xpD4X{4#)LiMowRU{dTMk2沧pa:!ꗛqc:UCv;>,'Iԣ2^u뵘,
xKc>,p'	!;Bd[@+ȹS!wVäQ0,2*pb+
ЦNh_TQuR`bZ(r1k3t<%ʴIJuR&2K(ԆsD#J1S̢'fS1(!</S뫂G-1#5WuN+ўBA[;aJGw11T!+uH*S6Y{y)׋
;9FhrSFH,$<4W,KyEr|:YѪrǪ'8GjDYagյ^eħ,)ŕvPG;P[X;ʆ
K86,ql(ul**"/eMRH&ci͘kQV9꣸N$TuP*y*p lmqyTfu/-nUBćc g~3 g~
ex<{1p24Q)f&D5Ge(E#H5q-JZxP#e\'98ʣy
PyE
[-彎Ah
iK*
/NZVx#By%&VV	{SŸH,F>__bt+Γd{ss1,69,g/5'>wQ
*q5yP5Ń(W0y8pB
Sg/)Xt\5e^*9kRH2T5iJ^/s78~E_f-t.Rʬ+]jAMCM&;ڪ<!҂9(YZp4::!ym~2Ep<0O׸|7'#z?UjU~5*JԛDW׊4TGJEn#+igv0ƴfHL?ha
Q|4߾?`?1o)-b;|z8&8>e} Vlņl,ϦYJ%]<bN G >{c>cFyTe*,1AzP'WH/wr'-wr;MERBqWܥ!k#f0B1W+I<dInY':QƤ
e"0b1M}XԨ2δJ:"$c2[Fcfk*L2Ò5+üR]XŕkGBGBGB[<9\"uG:O6X3x!áx^-9u/z|qoQ^v{#[7߂b++w'7;vb8|Ze
MN/T⪵Lh.LB{33U
GNy4f1!zWr<.hd~%x]OH4B"u^wUIL((j~8t"	8-4"CEPcp88!~;;9wAhd۩RBenluPhQVU_|\F<l`)y-bGB+iD,W4ǻ'?;=[|BykEއ1iȻDA0y:fwE~ a$a:Hli*z,5]v@o0V5b*S!v_eJ**sXkeڳ8	k{7N_+fQiuS	>R=Q0\+KƋ`YQ}?oc2??$*KS(ǘٝ!l2<$k[|}>ѡ`ݣr"*7fΓVT(*`D´l
+*,fz_j"y\^fV>]J?3lyF)]Fk:
muY!ߖ	&N9̲)ja~캟32ǮP7sJ5%5	(s+s+~yJbGBgB?
Ki)xQOZG,Xt.7J]u4h8ޠ4hXD
op*5,rCժ"QnuQ>u%R
z!bPK     A CC    :   de/cardcontact/scdp/gp/GPXMLApplicationProfileParser.classSNAv-X/E¢rEL`U$Nǲ]f|}@2̙|_ B	̢)|]:؉D=t|s{U$Cjxad>ǝ]GBaT5OƷt++0dxœM*zqTcҥ<:~s"crZ(,CqU:O]N'^=$^Đ;+h+E\o*CF(-%wKB?<`HS<pԼϤn:op;;YEas!TדeiWG/Uݫ{g.rլIF"Y	ręw\j\#3|{DwǧE!Z_%iFX{' 1Uq'EeV(Yzvg}Lՠ\uNitC O4[
G`u(r0qÒB5uH횳0QL!];CEπ\-|A_oV6Vkh3h\C*X$-O0IgPh9zm	EaMJj3hCI$& zϙPK     A B    9   de/cardcontact/scdp/gp/GPXMLParser$ArrayElementSpec.classRn@=ci4o)1#!CRUqH/RP^;ZoHDH<|Ta֤PJ<s? <2,E8.P <d
iE,&p}*b$2ѽ	gGfl~ET\,%xF";}j,Nb`}pE
Ǵ	?nO8vbŠ+9z3Gy7g#$֍}0HVFXJC1t;<-҈b,Tܪ6zY4Zyp6J/=P|_1ᇆL(mLN3]alü$jc$L5`wRf9# ̭}YDqñߛo(Xu]7:D~aV,%r72 yf4<36r^sp
mqzS\inJ^>I.Bq3Gb&Ƙ	7PK     A 	  +  (   de/cardcontact/scdp/gp/GPXMLParser.classY	|Ud2dutJKZM4PJw)i*u:L;LPXA( ek҅lȮاϧOQR[~ɤ<Ks <6L'jwDkR5N4$S5Pg44k:IH,+(,T-m&&Jt(I[5mKV]^2L)O2Oά:WFPͦP*$5#1QmHT:LGbNCgFe$u~Pja1+6(79a>I'ꝭN1O8Cho#)J)s(Rt#њFgPi'8eD(fQ0$zw38Jigvi(վ<,{%NHQ7ܫlT+pW^b?jpsm0B:N㎢qv&UܔM1oc킲v`mԪc6׻>\H***.mŷ8Vsm\y_k$BtzB4kX<ϚcƄc>i&-\Z^?89~\l,åtd?1
9[];9ufSƏ^GP̏zPeV2a˛7Whj6ꆒ5uCI4a:Aw'K~#ug"}\ac>B4ؙv?c]|6hӾF	7'*2$:nZ>ן:pfDHwn8
:Fgjmtbátcsޝfh0	m)k._E݆+5*|7)6N$q1h)CõZQu]lESumxYJ9lᓽE5Ki3̞FqϪ	H*p`\u1Sc3>\b::GwT_/	s>b㫽[i~m:kqh`oJ5t;G/ȗ/_݅oYF-6_:cHt N
.Z;^VJpk>|#XE|yUG U,_>4@na/P8'la쳱d|Tf}1m(VˣP{a'cs4j`Bnr4۳d>n %T<YLN91))t:I?t6x4JR)&l/
J@`:^@Ϋ6^%i溺b7Ұb%+.oXԿ4yNi#[Sr8W?Yޚ25O7[K_)=	b{6io
~SkK-ӵj{YxKlYSplr뭏7D0r͆n lo)
~Ү먆?;f㟊#(Enߧk'ڰ޵L[
]])_ԑϖb񻐫m0P7<ۖaAwd^l/~HJeɘ~9=ld8S"eN	W <j't[&$U$VQR'i-gYJ$XjHa1Kd-2.;,K:carpxuԴ'YR-8{#x2Kr?3it&fvvηe#Zt(MP$lAm*9$ͱdNU/\K.ew㝭MڪiU{~ 煂3(R|ke9vÍ9nRF
F?:IEdoZ/ٲJO{{2Fն\s'9زVȌH$a']ke
ˬZE>li5ЉK}iZ$TRVu#mP3I8u`OxnmWypy>mX)W]qVZʳ0lv/MdDg&=YCyw̾6c
GR0ۘ'}YwC>Дfg5[f9j`ٓ30˩<`D7nb -6Ý'/{U
$2u+C0mS$ǄVؙdIzDT"<I7	}΍HKHhl,%_W"ye37iƢj=5nvO%Ba%tіg>04&	v_C4_9}`5m@48)=n%}:)Yuwӻ쀲^+N:-
ܱ^QHN;QwG
Yq[EomM yXe^֟=|$c7 5/XtCTzɓGRt*%;xK'l<9o3TeRZ㝱<C:>w,+3(T<ˤl͘-aU>7wU(˴2G#aL)v\<8.l'P$//K+̝>Eb[㛝L|NLrng][I1;6ޑr{t
h1Pb1'0J4FRq5$-yC0I.1&Ç^lO0y pT |~o:{Y,~`>/<ىsF9Fĝq^IU
=
p/UTèWq{1o8ó80c/Ϋx1(#dϙF)
J2TaUhF.Z4
)1e6%2%Ry+*7!ac/oטJymdFXTeZA_WQU݃kNvʻݕ=VRFpT`_Q!OJKg&JW<կ;
O(Jq9ݓ=mtѲUZdx2g|t5.*ehتG~\AugQ7>wX
	8YLnM9dEQju\)W{OT;+nGGũ-sb7"_wqMEcՏ݁4Ec3EA˨Ak7yt钪+]'R%s"mLoгwP;Qq>06Ev]VQ%iThQUղFib@3c?r
2#O$ރ%eҒ/'0>K[wI,_38AVQyTԾC9E](ura#摾*jϷ ZOӍ~]ӃOznܰbܺ7ֆ.ܥdE=2=mucR nj}O׊'1)2٠w~{w?Sڒ`ɳ<V9Su >ɲ/Aȭ5TOCMdB
3\h/`"^D9^9xaG7ЁМGi7_0~I^q-&?07'z:,4VB'SN>9.\1%xTnKȍYN)^ݤ+"t7;s`~[>o2,_NP%/638Et3-EO`G|r	o1L$_vi78
Kѓ,EO3ZRLjRkedFxsU/aVW~_w}GA8C8FaT01߇it{0&hן'Qw]z%?[ۏvS0QFWSۚU妆M|-g0I绺>wg)zK0~"^b/FdN2NzͮF&eڒ
td%dޅ@vaϿ^ͮb">DfCD
0^0A$>K1f0,hh1XlqLn[< g'/K~*U%3qLc<[R+*,R'e,,YªY'e|A.e@.etK<Gڗ&	3>ϙg[Y+֛܊m_a^|iG3'_ImuR]k#Gn7LoLrSF	NԖ]d*ߒy&pf0OͲs0+MZ8b-1L;%GQr,u-.Q(f7;v\tsBxM}/3/-,@͆'d>$Xr浇Ϯ 瀜FMgJnt[Jÿa"2̤[iV1d>yn>@]ZqnfAQp6Aق2lgVf6ORV7CY#zb _oj)}rl"v6كp(Aq./K1T]r/<9#c%U9f}cXr{ujujauE6fRYT-K9srSlέ43.k)4R2"aNa-aQe̓6ݘ<S^y.4Ko%@X1ϘG01"gntŕwUlOt`;9A@p}(XE[NhvlI:
dEcY	i4ݰaZoE4eS :$Zׅs3Ni+-n-_	,&s>1@N'#5^d˹!ͮ^1#"G
?CISSf/}˳𔼀xC^ě
~/:v}ԊKxYx<FLd{
S~L eѨ}7¼ۋe0#8͐w0[}IK&5>8ɍA<}bltG=:9pIȯF`m6pK	کГBOiP1n3!6w;ӝ3kʆ?.A40T.|:
[tcy<4ϧy<W.? /PK     A Q#    1   de/cardcontact/scdp/gp/TLVDataSizeException.classJ@hVUkSҍdhGڤ$osҠRfL
)rB@:KAZ]鵭'G#{s.81@bQوe"/P@ivQuUXA`d`Qtu|/Nd۷}i.e$Y>}J`kOzw*hLhdylq&`TvlGBzXZ?u38,W+
"Nh4gC*Dc.w	2UVhfL"ljaĆZZ|x&)jֆȍL
b2։fmaRsV?Zdg6?PK     A {z    -   de/cardcontact/scdp/gp/TagSizeException.classN@VAo & kĄʤEoąC)693oNϯ W8 DI64ұK
:k./9xZ _n6!
TS;>N_EUuRW
LM{hԯjčUvhQ^E
ג4DӾi1P/E0?u2MwYNY9p52|% 7ѸAK⍊6ī1'آ*;Gf#AHfSƬDd94&Tdjdhg=tFz6FfVVY(;`?2#q]Yʬ$bA7PK     A               de/cardcontact/scdp/gp/crypto/ PK     A r~T    2   de/cardcontact/scdp/gp/crypto/AbstractCrypto.classW
l־= IIH8$i|`$e}>/>nwnKBmӟ44i!4$1 ETRH"UZR%JQΜmrҼy}ofv^>\*BqQ>z!=xx
"[͂=6?ww2{Ec2U\"6)[ʔ}[jrƦ2eS0{&7 eʇ[|U  U}U^V(ʜl׎hPP_Q=)AFV#ӈi`DERN6c<=LNԎvǱLQcX*6đ=
bqmJmt=6esXcfpQQ'vNSsBE#<mV!{{4^\w%YYkE>:KU&kPE3so(X^[mlÐ4FegyA.檶sFe-MC
VF2˽UBЊ6ю
Z]Ƹ:lkkfOkdp<E
U{sLǰTtхn&ҮtpȰ`)k=q<=
hC
nKv(+'&!@)Y('ZǱ\+\;ЪQK+?<Gppimz5iK7Xw qd^g7b00"ǰ&KW#Fz4Mj	"&;j=jt,AN+u@M
g#p%@9ڵJnKDftb$\oI,sΖ_1n;>0׈5_*<f ?1a&MZp3AU)+a:swT<J$f&*np!Fl1_u<t1Cuis~]pØ<+;<'G7%s4873>]*Sh{ѳFOK~4
9\d͜Შj20(k[aI%7	exV֍tMm0݆bas18`_%
5Inr/s^s(ɼsN+X_y<"x9WI?`1cֈ;b9ߘЯKcN)U><M*3oEtjk*.2ymJơUwb񊴀O^)?^Opy(gR2"R}x(!E\o1m>ku|˶m#oT{fF<Il;?5O+lhj	(
"VFʭ-R{)jVm˴2AZw2}_mLR;aӁX.4q=\#^.ox}.VǟxgxYC\X?G/V
l½r]aY<~	h5bϏQ7c*Ws>OJ0fTY[|Gm$(J}5@|z=>OzG|(9o2{Vk>?Uя/́o
]ybPJs$ze k4.DKP/O<(Nbۯ9PEtID';Y?Dd{'6T?\'z
h]tynY0rD#H w|jg;ƌ<ǝ<k|+A:Z~	igȿa/_@dN.).3jE|	QZ%e2sR*F3TD)|O Ak(t_7\Id*bT|O<WR8E&PƖNgR`U\|2O(sT.a<8&9;R5?Bw9ZIݧ Q
]i?4o?cvѪ7^1$1?K:5U_);I䱦?>ߢu9"q)_E)OIgYB/xPK     A 0~'  P  ,   de/cardcontact/scdp/gp/crypto/CryptoBC.class|	|T9ɛL!I!"$e"VDDA*LIXU
q:(ZUl.uiݻ{{3$?˻{Ͻs~rM?  $e0mChc(BmMmHU(#S	pLZq7DeU&y( Ӥ~4$mRULFkuj	,NIedE#Vtab+.Y6!Xlm*o[*<G
0i 
b*cuL zrUj.MY f:Xa`SV(jetsnL&AϚ7
fW{h4xFh;obh{l)1}:D7pՠRG2(]bE`{hMQZl
ZTog(ZgmP1KM4&6%˫*Fꂍl
nBvMIrtI`z7Tv,Gh-eM'5,Nw6+^Sf˹HjJ2hI4MMmk(STl
A+Ҝs ]4ۛX^.[QgͥT3W,5i!-bҥ3Uפ]zR}-RaS=ER]=S	&n4F[͐J7-әFQpEϛ5aVkc9Yt|'N9􌾆NsJ_OU}2abϡкUWf:;­``Ȋcgl#{۝i-5VQhUs$hu$ZRg/1m3'tڋƢsMUMjhk[+"em)֔Wj&+.UC
FZYѤMF;;bL
I;&MH&}qi
t_\s)tVCDH?FθФb&wc
kLt]uWXMC#XtIWtMVc܆HvkV4c
XD<ʤ5$	 mtAךt]=fl[-PPEڰT7hZ+^QdA?p\*32&D7】p+ߦMYY0VaNnɧهtNT,:"ѦUP0l
YR]6@uK~/48w[WYWW٣l?L9e-.Z`AE)Sj-*TtEKnzФCL$^IG({=K~R=BzԤqc	]U
-#ӭ4LMTnc&=I{6hLLu}hn_ft"G;qǪpH
nOяyF)Hc *7h/sls<"QIC8OGB.3^BV+*yN48]@v8ыjOH/uWW͞_ *Ҡ^#0kVSԲZ,)Y){"
^L
Aݚ`Vn鐹I0䜍ͥeΤea =!}d&}BY=w 3	5BqT?ҟ[#і`3\QMk_L+·f^nND G&1'l57V7'A2ߒ%qdj)CIu2}A_ID7o(oX 1J 
IlG5YP&AF
54#"юp;V@.3@@[r|N4#eg[ntQ	8Ѓ=Lsed&<_7xΕ^<Ϫ噜­f:}	O4/[
<i2I@jjq\<~o}@K `*`*\<'Gѝ靥;n
Ed62p3yu5#.M3FM5QF[MaVU^}MM`s%w0<Ͷ>YJO.mwgp
O`Oڐ[]%4*P\/
l8SpEoS1I`:`W\ų-)F){xsy,q
Cc+W94c>fIfWןY;%n^gxf-;	+yx!/2N)Nj'ӿI
7Znj6U]T8<lޔDeg`KpU
?2{Vlm!&[>tV)X;&䠭6ɢ]Of78d%4bKzղV1r~2y3T,7#'+)]v-"254=ud2abJ'T.+,{]gյ鲗P]g]l!0ySCm7ɥo.t|skuCrn.܍nTݼj%kgO}mPP9T0H+kz["-mV6"QmA(Qd˃
{CE1VQz)n1V$O1O#Xc6&-κ*n+ti]Ý|Jq̢pSk#
7J*B  }mMN~X.U*Ypv~8v2`L*vvа&(#PO/!rE0!!>%j#ɩ_ֳ&S-~ޜF5R6XϛqflpfnLl%UR
-0Mò_2d
iXn9h#xXzTWM,Ƶ 0I-~7MVkcWdD
77ybh^c@4$&ſk5@=}(1]z=16Y&N桙? ??B(Y>b2ۓi)A"VǟLeKtjA#ף^-Վ<D%:4_)ԫ?0eZiI/~dZh+>h!fQK8IсJ)XǬN6=.mwI,ajҞT ܦgRR_"^~I;b(Z{Hr KqzMrnᇢC Q1Kubg,-8rdc
(-#(@)?,[jҽe4:ҫ Vk:iwAu	|v:5Skuժ:շ㣙
8ac7 V+$
nY_ձ 6B!*W28z}m!mK@J%;WSZcق#J4nk[NDxc힌4?GP	be
)Q7vbh9o\N:dGxEGAm#ûR<~[}|␢%3j7a飜
Bv#`XWb61 
iK[RB>9]9-nB&=@_u,WWEF!j5!u*PVf*ڲvAi遷wjɯAfCm~B@#,$f)옊z&QR~M6
*Fi@ W9V^L  cqD=ޤb(N)S0ЖxݺbrO BR:X+0"3xEX,:emsM0|ӥ%)KT;k2QQǌćiÖ
{/I6G'}Gv+]SМqlkO0(qbh9"[8!TS鈆9a%89)2iqkDcn((w[<:{x^]znYg9ܮt%? @9AVlHd]G[TDi/O*&QlnKk2kZ!`,fjg@C`FgDp7hbQr<11ACq:Okx1A%3̙y{L]2UKL$T:Ĕ~r̀2Jĩ|o<KD0܅r;r=\R\q=ksw;noQH9{xYNvwn#tOӤn{45z'GU !3!SVݷw%{hV ï蓼4w_M5L7qZIY!Nu8\|w)vY~)Kp]u
q݆\uN
xI.L.o3m7(o!y9wв}z㤜[rθLɪTn[ψSk(/xOU gq:+N[nA~<%{(M.IJ5㬩k_vy
.͟/;qYrNaE7"7.;v]@rćf9t
صJ6h[)|c4!
6ZL;tMOwt7zQ~q+MCJot5}A8t{zΧpHLsi'LbOt7=C'=G1B =COl+riO zFO!|^LISQK/XI/&hWD;&ΣNo+ %߈m<#^w;}~(>_cq~3xd12T1ܠ;VL3r!heVdq<Ό8Չ[2X'Yd`RT!ݘdkn9"Tk.(k5-\b>e@Et*e1(
QK4h@րl\k6$A.PiAWtcAb!(S1\\W=>]p?SH$\_Ӹu856lzl#QѣyxcXER+0f3fƤ,B1|˟J8b]Xg;aҾr	ؗK\J&W~'9ԬQNXs*p7GV[>>nT֦r>cr2.dsӟߔa{oŅΒ;K,nSn3?+u8U݉`mj{`ջFپ|Ey|%cBBE{Yje4$y fώÁ899;n/=̟Mgm=ύONr{ts+'y~;l![F +޾9Nl\ʎt>sdW1̇|O<l}.iq7z7Ɵ}1ᦳ@?{ǞRm
ϵF:z9Ay/e{9kY5n	{eGN9ξ@^A0C}j&]~&_H9w@?XŌeDwȌsK(M A9WR" N.C )uP>$Vre6q6~V9!<{ σqs\@~C->>awH:s<.\q<tU<kTǓ4+b<W\%VpXsD&kyhb=/HlSټX
B>Mlez$xrq'[<ggL2osP|!naK՚MZZ۴^1mwhAZo֖w|Ѣ|v]hBX/˴|$_=qWk櫴wy_kv7&ߨM ܇pE/}gNo}	߭N#|/CfޥcC?ƏOp\y
'IK}|uUsZTZ?u/Zuh+(
B~͵ߔ\倢,hq<Y Nx G#SPd8(KLOn))@eb1@W{^4OwBqXB*WGe:N,9VЗb`Z@jV?mD	 (v'!_Xǚhmj J5ӷ"V^kA9_ptjFA+thFih|ƭXUK^A_!z0tE?aZzFDDˁh9"@De
6".N(@DH50S +:pJJD/I$4XnBo9|G֫1hA9}AiWP[%ݟSJG\Uɨ
UfSui7/].,	qpv9h5 /JC%QGiJ#4HgC̳N-RLRh7E;LC4Lt
^%F(WFhpB>OV`ެFqSq^ZU%uLkd|mBûXlhHJ*TZxb/t:Ad,dvD&4äGE:GBdyW)ۚVe Z⣵V|l08|~}4YlobgH#BzE9r2pO8^*璱5 ^f12E1,u|W6]R-IV-IZ@@g3DGq$)JkʦddLebq^>5vDs9EF'廀ggϯc$"^ OP#~}F[qwIp<pBQI%b6	p*q2OWS0goAȠrsq0)M+++aJ.5( aeԡ7;_;h8D%p|rG!HqIӘP{yղRaBOBD?X
XYp%4!A@Rs'NHjGs3p꽠s!/eྭFwT=^#%N8gs⢗?uҿ۴kGhH;
*%>a<}܄tbqumqnm>zV8rw㍸x3ns|ܾspsqqqq_|_[v}4,5L@0Wb
JcqA\L7\Fߥ@'[kq]bŵl븿> n&:L#N.qˁg'y>g$ \pĻS{"UC)6j̥+
Vh#^J	,NWdj Sy+ y~"c2î鱜:ߔ| dBX1r
Лܝ3v.enu<w2Z0߭2#xQ\Yߊc=~~:{WLe]ZhYV
["0gxz Չ_«	:57hxw'ߣtnci%W&ON\tH`M3أp?Ly@"r-OlirAw8-7mbq	ou)4[.{*f&D1jn6	?]r ZNGˉ|{Q!W:|e:/ 
6Eh~I9CVakS<Nj~=G[U70GST%8^.2 RGMvi_wOgri\ßtU~7}k:PkHɍrN*Rۣk D4 zAo%,_єx*ITMDZM6ZiԆmmN-LR;ihVIwish6j'6^ЛکZ}%g,sj2]4jyrNecܖFR-ZI4ji(eUkRKu}	,P
:LUPAMUP?$s,Svz{/qIN(e2`R.ޢ738qȭ[o)Ϻ`ES|.bhK$cpyZhm-MF@kV%<02\\x!h⭄/
Ȑ:m.|%~)B8ցQb>A(ۗAE ?nvت.㟦"bdQ'ee'#dX~7(g<ɿ
0:~9ഔLйקC*â+~?_:}<ig0 \]D+K`Rv}-tv%]}nѶUtjߧk`v
0v
-SE?I"O6[J O9'9҇
_h6.Ad9SHsT9*;(g&P(܁LҖ^-)HiJpO~OL~ߗYJN.~2Nҵ|*34neFoOLCM;)Ϗ*οdvRnJ[vTwj?A={AD?<{VW=KM	UR*PEGiũJC
TK+I{">:G{.Ҟ˴tݦ~Fh/BK/+*:joH]o	>GJnzn2],2~}ڭQ<Hx.
PQU]J$KjѪ2HdE0'#'TdQӵ	F+k~VnՔ]x3~$1gʴK%	oA0+(PQn΀	F'0DM_rR/:?icJmNh#M?Oz(]jxDb:G90'4Vht lbSu:3NkJ:hJ:hJieRŶBbZ7ao/{nomScB>+Q5ѽP>(053ME7e m9)wmLq#\Z2r;icl10RKޥ^ָ T4piD\cȆJ'&VClQHCci^F%8I')d:MB+֧QT}mt~bj nI`@{Mt6$s/Ufպ"-.S\%)P(+*aA:aD`Q7$2VH:,+>'[H쐰yWMJ;e:U>1HIM^IK|⸮y>1)#]OC}btד5!fQRcV<l;rUeIu$ZZ/z=YzїRL?6|}]IW+i[Fک7уZڥ7zZoKZ1VϧAJ+9䁤 (xEx|y6",a|41{5,qpe2pqȇ<=J2@q`ч?,;lG1bx
}?ϒ PK     A )    6   de/cardcontact/scdp/gp/crypto/CryptoSmartCardHSM.classY|?K8BQb@ÐðQ8پD@tR[hR
b
mmZߝ$[v$߽};7P
PT3cdҢV(B}PNYPcO2l?
/3uzC	(QSQ
UE9"4j&ʮ5tn+Fz e&nvd7|
T̂_l6Z/eFO@11}^wU:"樘y%AM6m)Xl4
k8ԕ]V&Fj<oya2'J
 )\ҏ*dڪboZ^5aUKkNoMf-Ѣ[VjX\UT]b1xH;PC]=P0)	Tbw˶dz,Qqduѧ-q]vKq:1tkL_fCzGg{aulz|X\'p\t"9`'H[Z"JMxx4 7hrB<o-=Tmj[!pzB7xx)X)P9	 Z;ZL3i!^%p>Md^Zcߊ"B8V)hj0F.:淥9ji^X׵nQ*q@ŤY3h\Ksf:!izpTK[q=9)=CgB\bRis
xy"96MeQEmdC/0M4$a M1hh2Աt=Ӑn[Yuxq u
%3q`g(pߗ
pAB
2HAJ 2ɔ5)Lo>'SiiNIy^7׵mo9E!	K|PsZu^x_O<dlXuwv5jB*N3rx*D7xq
/+:V7w-ZR)R/"_G`nLA}?ޣ⽲sʾõxd ҡQa:MJ2I+鎗 c!&yXEbr D';E&q7	=%t'anק էyY,Z $),|2.MG>@!dku7}3Xp=nYB;jf$؃ϵUmȕsml-I;l={@$pO.O9R=إ^},2xKdč&tW*{@gkukUs}k.6`=SY,Z#l%xǰi̻_^sJ/E9X)]lTYÓ
ˆlg`̽~y7A <<Jك$߇U|_K0ob9mjEhS6>8У봞8wmI4ӐMop<u»x4W)BT8]qVD茩k1|FKe(%4so$NMNTוqo&y;zez+DanjSVL5kmzi3ٗRV_Ѧ&LyT3xi*Уi{=I÷p:SPOw}A%Z
\@p|ztYN)i#xnaw)ϟ͓`@X,I1'T+x]:Rtv[ҊȦ&H$5ƣOqZq4OQ_Vs
5`مQ"0k>t%ͨeU/yp""mmW
|OkF jģPjBsh(ځ
n݋5@yu_3u#8ۻ0~۲D{q=K><j[4Mc9D
Va	Vc)ڸێFter86+*`WAo7?Vs[<A
u+*!{~iQTv׎zY,Πfu%=Y'C17r*
r|%M.l41 CT˔Ck#cYdQlolsU${ATß^Xǿy7#Teß{gڋ5]v
3X='vٍYÄ::`q
gWt;
pROS;1UgL2ߏHйq~W^$8N7 ~!rw,{/qSL+?;+ˢh'f@Iy'Nwa%m_^bzK;d2ea.V^6c'bo#=wwapU6V&wnRs(j>r+lY.%((aofp:'O-dpwC\y<3KPLM-8ф۱w;p	v";Cv܅p79v^<9a܇Q)M
1U{$l>	o&<^qQV#ySuٻO3=+t;;_RhOQ,ɿ,<5\rOo\_dy%ZUC'A)
r=l%6uvę9ST xha%<IV#Þ
0Cg?FQKOHy|!U(.	
0 v<<d4<$c{A~
!<gg<^"XG_LL'D1SQ&+'"%\^sU.W\bcd&<JޠdK
YEPK     A =   
  +   de/cardcontact/scdp/gp/crypto/ICrypto.class[Gw⁷&2ePDcPPVmn7XtA{}1@>0$<;;D?t@x
TUNjKP*zf-6 u
YwІS-rbSPGҴAVm4jst;PA
6$jiڙL:t=@ݣ[
G6j״쪌zt֑r5Sy\?EfQy9˂CX0.V֭ÂT5ވAĦlu<$HVCJuXC-눠aӰ+t>sώ'2>*751,\֊Df$ӜS'4a5ϓW5!)A;5LW8M/ϣbaXnGq2m6?nUb]fZW8dXjW*,kX:bΔ/m&7Փ7s	t|ňh7k䌦~'3ժ=uҞt/M;sC'^Ш֛"iL,ƳnJz}OVV$h"y!_rkZB>֏nYQLϫy;wZ:2-׫<?Q>V[B-ĳ=U<
ezN-8R`Z-t݀;Nt'~xϮ] L7ԪmzEne bF1n( Oy{~xyf2GGǘc'̧g̗qsd_e_gC70sf̳pyg	/0߂o3y;p9Id/24s2Kb^WWᗙ_1߇ט__c~߀p2py~y~\kumfn07M-6{01	ԃ>ϑ|!I/|/f_-}K|ɏ/~%o<w5?PK     A |
,P  Q  ;   de/cardcontact/scdp/gp/crypto/PasswordCallbackHandler.classR]OA=XZZ>-VRH1i$T vCfv`/>(&>}7KQ.F	a̙{sן b)

1H2炷˷{wQbFR:#ðҴ%d\%,][+o xfE
a?nmK!a)鸻k:Fl#墣Zuhsc1$.e'ð*-!H)qSI#."OV}Q	cRf?Sǀ1X'״Fkov5lD4vߣnu!Ve(;s9TjϾpؘCC꤈![#ss~x`پr<710MV?cΙOݠTv_k:Լu'd,c!ӣp>bL@hFkf>@\8[6R0pq5avaW"qݠ\qZؽB
J/ȾF6,b{[8I"Ʊ<1KߤyHMREM&fgpjK(SG>PK     A               de/cardcontact/scdp/js/ PK     A bI  (  &   de/cardcontact/scdp/js/GPRuntime.classuRn@=& %@PJm iQVqT@{9ǖ=FbG!TX=ι_;e\b"c{گTA((0Lnϸ؎Tb"먠Pd^0LUp:u
{pٽl%sh<b0o;ah#*.Ո2aPCMpO\mTH%!A0avUɮc]䨖(R"#BDI)bI^XTst^Lg	D°iZ.'<US!kyE9#Dx\	BbSDt¬w*{lBôFķ#^Rp,ψ^]ʎL3'_DKB5sxnDx6s<zsM< f&ނ>	jJ_Q>PK     A ǻ  4  ,   de/cardcontact/scdp/js/GPRuntimeHelper.classT9sP֗|($&0&4Tfh8	[Y~#ddI#)Z!CPQ8ᘤTjW߷Ǭ}BZCFG9By,N
6ciEst1( tHGE5
8x|EDl8wO?I[".aYCYe6&uVыOie[F}?Y~ 1]n.Lol7.TUWȔ'ҍI	b4\#.t2/'f
bp"t}D)n&owE.+Ihv:vn#,uW04		Ş?-QF܄$l*zR u8,2XlC:\
< Ud]@
ΒߪKd]k~vnJțPjbUt(@ŨwPa*,MdR_
[f]e/;.ב RX`OC^{$P4PK     A _(  p  .   de/cardcontact/scdp/js/GPTracer$LogLevel.classTmSQ=v54M ^T|!pXaҺlK,~'%ΤSS~TsodєywO_<Cfi̖;mnl:i9B^f *Cp4OWTx^\)q
Ur"'.rT16s\Uq
r+lu#AP1dk6[Eda7a׵eMc*q%۝=`hv[ę쥦n4zln 'Uq!i
wa ћ(iI!'Ʒ!iH^`T4QZjhBöm4,EJ
-hV
=W6,~Ǜ!rwZ
!k9;wAup;
vcÙ7@UzJwThݵVەc1nۖ#_rZ);Cwm`v?M aCÈ1a~)#@(	B	wO0"[\~YBΆc,u0
sx,T\J'~a6C'SS#G8|
8g"e>)
I4|UYtw.ETUyg|bwG{d$" AdDq=$o\Y,1fPK     A a  <  %   de/cardcontact/scdp/js/GPTracer.classQMK@צMMZ
xH/Q6GiLk(qP=(t;af{>c)T&ib-EA	ʇGb)B6YBi$JUfta~Tӄ\GOPqv|$LMrJ~޵B=QjJFA`R(v	WGнamy>vzWeZ&tV/mmZh^
9ѷ&6 [=밍7vO PK     A ^,ܸ  W4  #   de/cardcontact/scdp/js/JsASN1.class[x\U׼L2iҴi3}GڤP0$)ihii2m2f&% (P(GZۊWPATPz^E>3gtB#W?>^k>W|"84
`n2Uۛnlx_Ml1njF3ϹD<\ଚ΀W0=fF#X4Dt4W5]:]|E:BmM	ƫj{"p"cv)eI#Dfz׶GPr
[c&-ْJUM'jiS^L*bټy׷4k*06.nb:3kWv
m^
k6{0߬
z1[Pnlko
7b=_Gs;65wWPpxeXX_^jkl
rZ:7P3(5TOQylcMJ,ZZ"eM>;:Wc9ƋwpGku
g#H˘m!z<ko=}Gb#}92D2\V\E'u7{M/_e&T'ӌYbi
u$T:ִX.mT%l*nM~\
de:Daz
T+(+EY%>3xަӏ5Dv_E
|En6S]Xq!nL&ҙT4cJm~xDW[&HUmZZso'ҚCmc{Ύu~`~Rj͖S¼2L#(Z=ZpwOU'j0?Zv?ޭPL;B=fȤx`«yh$L$3&{zX0nOD3d}x`(،9@,N}T&J%} FJU-׋ۓ`$կ/!?nLw*ye}:t=49d?a-fr
P#,HͼdqnkLҒhJ0d0>@sjcl^_dm݊p/urCL#]rǕtKO<7XE\u%ylPi}-̎>3slO4	&FLh$>a^JB##,2z1j
8@cHo8Fr~T򁬟,&ϰ?)Uaŧr~|AU΋/
[gjFѼ9APo_fGpS0oHy"k:x:(CSteׯϥ/sեJ"DBXҟk)یnS(Z5o*6
ǷmQr'
Ŀ]5>zRforZhZיP0C.ЏJ1W.6*dZXvn3?~_w޿'A*M^a\e}7kX0s#JZFs4ՋdmG"ߧڤ+or2y
7
ُK}lqB@`9ዃOj+V\~qrKoccϐ"oNcV+Δa4\:>z_Jwvݤ(#S8?uEzrWQu/rO$9c;%T
ζqK2LW&S#
vH?S2UYA1F2/3%a;39xU>GN,5b}D㗹ReճP41Ud_uQ|o5/l̏Ku(?|Enj|Mt5ഫPI"Lw,8xߺӖ*Eq<N韾1U([Vflh izt4G=N~ZfuT2WΌj-+:65"Kmk"}ڟ4*D
{!5NVлZC"ӼDB;"[}"z35X5mU9jDרBpz2.8֦4k|B;"aE
|w2ӭbPN`,0)sg4d
8+tR2#f@URiaHq2֐
?d9S:<i[H<$1-G1iz'3~q1՚?ǒ/kiR,-$xd̷>ET&	=\TאN'UxxmdAAWese.5ruiԽTI.
jb䲑pפs4ki4X&7XCyrIX-|qLB悿jT(\l^A/l$zܠۘWU*IiL9ʇHK'WԖOE͕qBc6$?ҷt'ci<H
'XX-!ܚJzud#vHҺ0Q<yH
yB݀n_636ܗ;^-/$b=fzVS2%0}cZpHOO[\׼?H)=iC8&U
yF0㭷2E8YJ|> ?ht^"RP~=?Uףϒ36YEF:˼ ,zVg';,VUIi/WB~wJEoS=ӬSYE6YHM׺wh:tM/ԴϦiȦtM/ѴߦtMizM3lzm|MOMOd+5=٦/tMTn4n,Oߵ(Ef",dգT:	.\wc#&%x	⻸?r)FDbT#*Ka&lmw[nD\Vyz%Z%u~:W\r9f6nZ>Meӫ}ʼ˦UO_<ǯfuNsgV`Q+QT`<̧RL^ilEiFjVoz	PjJ7)Ld;[j+{RlaHڥ{-lb6qŶ0⣊2R]EXDl~h#*d(v i/?9+G~[Z <W	yvczzqSVenxUd	
w`0D8k\$֑/|w[~\WA֔ϖt 7?c~|\:Ou{m7&T;=>
<׹zӱz~Fi^F<Pg\cwn5e
w;{ҹİDAYbA++p?TG?[%~c7{6Ty`JO#|< dLK=Ԡ­*luQx>g9s$xmbViQCؿ!nmpʪgҨz^@IEA<p#a{^Jn[I[*Tf6~~8BX577㷄af'tMJ>]kp8@p8pp98,EkR@GR?D
$)J߹2EzLe2prld̖^C+юrTmR#"yR~YsNZr-IKM!?BOY	>z7toߞ϶5r	P eUN\ͪ=>Kn]K1_nՖdc2`!]q*7$nV.l
|M:-'G|']z$\pl
ɭ\&==kUHm|5Y5bVI:!
1eSޣ7s\	<K
UΫJXa܍f {qQ.TxjXXZ,A~w]Z_Z!{,
OKY=ǿ<zQIFJε0氏,&G,mELmaJRLb\ˉr	R ?&?-&&sL'B%$$*J|Ӄ'&b8哒1siA@F%NiA.>E(?;jlw8N)j褗j\zprzmKp[1jpgp`t岂A|ugHR>LHg N^ervz:mu.̺h".Npq	igJgYS_xsz\p/#3tC/QǦ +u&d#.e6ոD T{PP_u**|ѾY}m+6<C%+\ŏ78d

<kdC{!!(Ct;!^Vh,s~8q<kQVcIȓ xE[_:7c[D
^!b,B爝G$8b';	#;I>MPɤ2>ZO{(]We9d9NY^GPf(8EVzI0:^VQ梜+UEˌK4k7X ѷx%l2˲n,J(C9}ZL/EN7#ٚWښWښWf5ur}6^ktD
p>H>ujU]<ls*AUVT(DԾ\:lq
eoH~;?#2Γ?EC7o
i
i
i
J@,D#^:1ΗnN?*lV(
*"_!@7*s@^r@uC!~>D68scÏ)rӦ.ζ
m8zRZ,7M9GY*a=B=~tpwJLí!2 Tg,,`g#:GcM)0QISbc&:cc.piTf&fŰmd62l<+kLΐ 4.nS8G?/&'-f`GƩn'wa\uYkLVWgRa E	(GLla.UFcp:8bX<dhoooZ_:^mv22I1NKki31ʽ]Nqv[GZ)WySƩ5t*hgZc¬R{.V;;?w@S˲w55l{jcq=Ըjȝÿ2B.$`tq&Ot؜s*٢6ʵSe	yYԓj_ªd*zP!J(4TS>(zJq0(%Y)'@ PK     A ,  a  "   de/cardcontact/scdp/js/JsCRL.classWS.zEQ8r q4Q"]YV ʻ+hӴi>>C㙎SgOڙtݕH0{sw=?+(:!a)e*Y.Y2g4<ez	RNDЩ!.*ʌ;Eö<2Qf779SИҟqQsLo9cH\8yd#rE-I*4t+i^rVrZ.bRws5Lۊ"5a/	lH&%ڿˑUv֔u)xi(@BÃ1C}ܪyf͜rJyi,Jj6IMR`<5-٭g_ڴTG<+"D@1B!\Xc-aΙo;Ġ$zeMbGTZm򬆴VeOi |r}9oUk%^"1CF B+L/
Eя'uOԥ!P/$>gI6419aP`>y)ȫ5I0x\ħo&kgViY*_sQ`t'Im=rc(>M=<JmeYzk5$;dq:<^1ҕ[*F`ƌ35	n5gp.bRۛw܆@e`>ߖR%CVUu)(`Js7Ӹ.	lTIEpY(K"-/Y~rU&72)i;"HkZ71`"ƥbIMa(YGӦ7ϙ {Z`پ@O;zυNLoU"е~^Q(vUfs^Vy_L鎩AoޤeWe)+[kuj	eWiUmieًp"K@JkݾVB5SWMޘswgsL^JJIIUPwJt*y.ԙہMք> y,~U Hz猆oKDfO|WhCRͺNjߛ_M,]!&tϼFܖ_;`G`{q=Sd4C>ʽ;k͚/-5ǐ#>~Sm{L/:.yFcIӺbRgQKU~lAًzj6<om.P
9uXnߘm/֪-vϳ
ﬁKoUc[0=M,oY+$~mgwX( y]|y35·}y ڿ
/އ_Rk'ē9%QUշ@4ik.<JqڝF${
=G]Bdf5<:R7pH
Dg87x^/
=,E\Xé_0<{0>ӷPIhx~0R;=bfR_;Z$B7(C"=?}^)pF(=Ömg(&0"[5xW:K*'L*C{	Ը#Lc8e@}XI>/%="^K2^WhWO;x
_'|ZW:?Ĩq\ðo!
/ŷ)|AL,?C.&t|A=# Y2pi+ox?ßc_[1Bm+߁aPK     A %U@$  Z  '   de/cardcontact/scdp/js/JsCardFile.class|	xT{;֑5+AB $u'Hfҙ	.umm]T[Z.jJ i]Zvju֯ťޛ;3Y)ϓ98U
	Br	cu=]``"&%xawxͅ[á$!H4<WTn0!㝡X4%޺&]{%xRw/ܴD!D6F7׵DḉbAzQKC}Hrg]K"wH=(@TF0*Z*7b3R<QnhM=D7\i<z0;mif&sy5Ovy ̝Ʀ-ԓluckJQy.pӖ`4ցG`B-՝cj#X]WN
JpH(\lb80e51@<ҹ>R1UYpr,©X(4$MCD2ܓNLXhiЖ2V|M+6O^1݊J(GcIanvw;/JFbQabXBȏ{cds<+I&YXéR_2ҝkonmZސJaª9àX	]!X 
Y[Gs5ڰ$c	N&5`L<g1FM1׃2,p$%l̾1EH+Dy-l9xlGcY"lK0NZ'|Q(+ik<ONsN>:-\s&%)u	e}QQbY2+6,^l[0u|NMW`"Ѱicct0cXap[F[O/zCZǶM߃h.2s.s2pf/.EmOp&2=6a`o?f㸖PllUH~JbzIz(1?щ-M|xl{3ڀzc;`$0a||tFfFka؃[,|ebw>png8x Ж`1iXM½;wǨl`in11γa'ɾDG,ޙF]½ŨuеEo%q _&=nn~j@$tuu,,MЃٸ)%qE<4&Sp'
v+;7it~U 1&b}IYAj8rlQ+--%
a3(o"~Kv&ɏwD`TLl{Βʑ[>aI|4HpA-=ei<"Z¬s0guGo;lY(!¼9<o{>r+y8KA0{8!F'~%T 'w#	?cȾ3	v(/¸eN{~jF伓d#f
CNGL¬(BaT6KY8J-Fgo*Kzׇ=F}&Oяl'YBJV5,o-X
,Nd[?eBzd}^3f#b=(Gr=MD*u#"rl$-TcA2-*\rn-*Np̂vDIETV(0Y7)T<8K߲&凨HIer-e*C2΢"+0a'&X4QW7K7MhFۃݑNgߢd|ag8};Mn1֒~`K˄Yͦ
Vt]Xٹ^jUe*hgs,v$4giĚMtEiA$>&$\,^x"HH:ZH "E`i[=iRaљ*|Q$Ld	M&-!4fk12s6ǺMb>4RpbCs4c	xhExO0_m
7EH+-2A%z݉hEkw\f֜^:tQI-:KBXZɘ}:Z8FFܓ?eAy堛k;\X:\ɤyw	e8Db83::eWVa8=1ZZXH-Bp<ҵٞ&lj]]"mnGflk][&ĖSN6:>Bsp'X&DRèyn꘶JBVAX4*kzLZ"Pv1siE%ɘʇE32>J3y.V^'n^0ȱGFYۤT
2+c}eK1h$aP#?lO~\G8eh=J^)
q/]OeķnÑLt3aBS!tf}Gxj>>C1$	W2RV>q|x<,XJYt;}ޮ #@#%KL37Vh}Q^A|gZں=wz苄%%p*.d"E_yg66}xE3"ҐURe҃@qE*
iC-=C38EjW@/Nrub}͢Law\Xe&FM!Ä
!tĢ7EBEhB290j]8x"yqz¤'-ӳ	AEOK@%vxYF]'PEߡrۗTQ6(-;<^d<cr{Ǫ^z~bB?<e40*ecCr\*r&ҽs*_)1ũ5a6kHΚ(
9ֆE-\
[N()L:Q$M5K*Ƚ.2m ܵku':;Cr!ǃ&VBzk$p{C0{Hn$U
+$D#ެ(x{qMN"Ĉw7IyC<;3X2Ƒpþ\w2uHac1mkB	.g~:}^|f7ؠsaԗLh(Yav ^abS[
G&JIX0`IwA$:^m3lM0^Im[Umj^ݥ*aj>>hBn+!jnU${nl
n:bIb)r16Ub<P2sAz;wu^`ȫʉtwUAFN$tYF=Q)Z4S2@M~%g
_q2Q3SϽYy،2Tlg**%]VǶNU`ԣڲ4*
+MkN$iN!UR˨U41`<kN4L>'BQjwݱF؟lU-9򷄃"v_eʹi%3ckD"ꑿR2_*\>I1Uέd9hj2kPG𯾏dktĲ:'LK&DO_Da䚘}S]ra2}0Y*fINXG5m._ɞ=ZQzĹ63D=|fV%	5K7S[=LmC.J}9;GbIΩ-΄GMA*;𓟝dY]>}Ԯ]7c$=-ll˂w5=w`!t,ضc1QJUB+.ncU&hzAVG5	S=M='@#	;
y j1G]OBumiz1.Q6U׫pMҟ9UAei3U_Ygr3Y/{hҦ<3/|K`q%!./95Ir[q裡bޯ4uؽ!%%U}U!)18aB8	~e؎Cɡ?w?_6iL;C|T=C̿KaX0W]`p\;y>Q(7&C84:'x-gTWW󞄹%>O'a^^CCU\n8;d]ÁV>G人r}/G<jumwugAF_}>FZ #Oр)Cy\3eFM_;	y7}q>rf!>\qk;1=uCqw=<?grOMM}ھYHvn`â@nM/__3Y>N/}>q`"x~kTD؃nz]/㫬날~VfcVb&6fc6\܉3xr܍p̵n|U+TR=jb?#x*5|T'<A-h.6<K=6w.݌.|O/}Ez/ы~/O
+jsMt։V3J1?E.aqOc41הq@+Kέ"DVZe0.Jٶhe<yxsMmkbKw{FV5],^b&fE8^ iyt~VW)`、C8ZaTJ	64lU%lJzKOCL&Pz2CDM.$)or?yٮŮ<lnь`ı*P1xLb(
kd&q`6Y]1w2$fEaܞ̸BiS5c ?$P]]WYS
44iT)+7s	-sQ.LPR{I$ ܚƾTKt110a&Eo~E0ka|`*%Y
ҿZX늱xH~1e(*\ f`<Md2fs8V4ӥا#ׯV
6)
W~+,5MI,'ў5,'mxaGN
"Ar1ػ<FLzXn/WAP86%y4v
&p!(5ɰa+W
g;2c"J.=k<mKzGCx)xh|M8$;١VeX.`lRZ9V|ZŴ1ja׎IQsjiPNqmJI.r9#
9.rZ
9V*}3I}{Y_X)JAꮰҏWS.mfD)ԉOWp2ŕW.S\dxՉN˧)u$2]<Fտ:q	JǡFi8N2z'՘@|.E%k,˱ۧѕ,B׸ʦ֕iYf#MP;XobYaYZ}+߭y;!yL=V`y	h;	aZ[UBM
005)d T*AyYyAkJz 깽2ka=x0jFcbF[fb*
cVܽ9)l6t
O
T4#Yr87=4z+9L2d؆:6h|g@G%c{o_ZO=n_sXlTbg?7h[mJ
f=
t?*;?5Τ`wXKǹܾ zU3]3543u*3M3%ȝ]d7ƀ!0C0}
;LE10$W+@]1ei?	}(DkvdIj`NHR,rmGcGٜMtj\ջb_4]jF10r}Z`;u=<l[f  sH* ϠAɜk܁<җȕŬ\K䁲	S~>l>s6<OTcVBc~ee|NE3zU#KZ59d km.:yJЪxihQU\<Q,srv)"q(!BTTȼVM裱
}UQPB_:VA_uQW
}Ō5s^׆2ms9ۆڇ0Kke1W3`cf9#F:a>_f%X㒁IOV2sK\镸+qW2OxI?C'fnc2s837pTNyڕ|ΫNnJԪXKZE=TUIC+\
n6{bj޷:+FKc-bE#XbSkӞ&@T"<Nvqll5>c+Ejeie8qxwgj/pv3tvgNmw1nc=3>ݖd)w!|vkre7Cw;u~S_Mۮݮݮݮni6l:O	lJf!W8bU?6pMkiv{
)*SLdo*~gk<
M'^#/:ƽJ	jQs*U<_Uڀy6l,O)hAp |;H$0u>#Ygz.V
)ob)flLcgLVcs)$?sgᓸ=\u}zr}mWسؖ3eD^u(0Ybj XC/EDr\'9ADɸG~D_?	3t<K~E+^^ZshQjL[2jc݁X!"U[=P=*,[ͭ~Zír.~ZmzSr};*9a.h8@#jWgig/3Yk&K <K3,Y:b>좴5JB}]ߧ&J	.uh/I\Nr7RyD5މq59@E!78m<3;PH]z?2r'4gD?Ř/	fX[
U/wXR
ᘁIV0BqnHK҂)gݵOO>AWrU'9H7N=H7\3&r^HJ$2mg17`ށ٨7b~:71I;?q(Fk,uy6uvN*%/2\Ei!P{ZrgY䗛;{[J>I{ٰ2݈(t~TXb`aQncrpoZ*슳g+f7W9YtV"NE	ίźNv&sO<'7Q9(n(f"_5MC=WS1\$-pj赟OP鎽(!z/@~tto {jErO7̀峄/KsQ){PZ[Aߋm~;zc~vwRQ>Kú]msHsE#r<m<_Զr+6nIG斉Eح<8
׫*FZ!s o,-%
)ode$ξAT-ed@|3I5^qz=yd+SGra<y|A
|@+}y
?/sA_
r[/@yc|QF/Q1+KXg/#Nج嫸R%k`[ýk_?1Mm>HxE.^tEG&	_R$|^aD#>0Rܤ0AaB|\V	aDD`C01$iB
P@WHIzdeUt>A&N,%C?=B6` s/s5ù
$*pC)57î^3TcvǨgc|W,<=<WYgg|EόQ+Ug>b`P3K@1EUג2:fNW}G*/އ*Pͣ{@
-zqр5Ru'Gr#ERrPnhb5rE53,7
F"F1s{Q2\r`>nn1SS4<oOx͘wTlTd4ӨSZ:Ө\j7y)B6eJ{XĀڟb',hَp!Й9,
%XJh&6jIcn4x2R-2MDtVvYfU--SSvy
>m;kc-vpBj.v662mv1kv	?-`m{湅x"((?v@J/9ּȓxGnSodqGN?qBywA>-|Z]]6JiA#6K+QYG\]?WjcN:m7|PK     A /=     /   de/cardcontact/scdp/js/JsIsoSecureChannel.classYy|\U=7ҦiS
tKi!SB"e:N:mVP((hEQZ$

n("M&dV㟼7ww{'ya (CSn	ߕb!ghGѤZ昶vs6HQYVxUU*!=NPHiWMF"SǵG#$Z\~rz\Z/7b<J<I=#tf?ww{P&P:Ҁ8;lZָuZ67L0d)nj^Spp#vxjIĢxK@Io+pҹ)*NE&H4Y4yQӥSMUmR*f`%ZtnU6	㣞yP%0^l_H+YQQ+)tq8lY*fəw
k[[ypY#IYYk,E*BFŖT<lFq/`y*\)y1~%٨	Vyhz,PP",+Sf4fV-M7,ZiIX}to:iW pj.7:-;i&?$4DS]ZܬJ-fwR
y+TDU2ꉝ
Fz}.ԔꬡT܌viZR
[/U8OE3V2uh&sm敉Ë%hQq>Zܧ%]vք(ʪ0gq{DsenWю
Ķ#KiʪoC"'①=E3Z A5ݞ-w%*B,0#~HUm\E-*:U<lqmgS0C4&7.jeNۤ>z!q9KE\ΪxX&3dS
	]s}S]]xe/SEJ҂v!DtU%@Kqyީv<y!\!P7|;aH~o3άL{q9zU[fW2FC8L!eyhՌd"nh6SZL*nC]j`6MеbYhA>[Ӻ=3gxש7UFDkCD+?Fɕ9&.s3,T{% nSAcCaE>Ӹ}Xʛ|9%Г7M4])]>2{|y]s5drEBbV]/HuBN/YMWU#nZɡT/OxMv0Y7ñPOݜJȘfl!@"f פ6k:ɖ<@'xtjQ9=4Fvjr˜Gzz8Ba{Y3jlmA YPsC1̲T&3]YE
OaSfb&13rT)C:
K8=e3vFMo*Gؔa;$/w0\&t1v6JGdH"xt[ɓ8J:fI%ӡ.z4Vh&KRb4}9Ӷ|5mvg^fH}]K6Z|<,$n^ˬ͆LBScKTt\xR)E˘T)xBy[TgSd Ku`t$
dx[l9:m)sG6QVnNc2-kᐩE=Fyw(>m8v8~s
4

&RzX[~Vud7n5,y*v}i<p: J!OE ՋN[e7S>WCT?%;&s|1j/AShM;Ol	5$k#ҫjaMC(o~J{:{{?46w=`֢-Xkt_#(j9_㘤F)~(#mB z,.U8f8lB5Gd/sQl /a`\''=%uCcM܇lGI?.jU}sXζO$3HL
'af^ż֬Jy3ĵ·-L<',&ZfI<}摼is%ɉYWT|
~`	~IAZ܇MzOj&~F4rI^6a?lȋ9US6%RG(u-uZJsYNTU<uu{;lU}J9USaRGZyp4䣟WJ-z?]y&,F<{##<Ha)q.s/wa@(~@p
_SY̳0\enZFo;ipLyzQ{/)Pvyy)x9CiOޣt F$3GQ15A?YNސm1brTFND</K2ƕ&׸UWu-f1c}4hЛѠ7AoF

f4hhPϽ_IkP	a4miTpx"HMVa{t"isJGI>ևKz6>"dflH7H1D	jYTIhe8_gUUZ3f8kMs6
gZ8j>gs:!7{S{%/{yxA^fJRC^jɋM^fwɋeTԞ1ۇz',XnyYmIwkF&]_3#'I1+D,~ Dm/$qh'Z\&QRl&"z4%VF
潚iŒcJ~=#ƻwek$ ޝC{^I{1cYx:⽞xo w/L{~'=# {>#~  "އg^;=W83򹈠=ޡ"2Y:"$0I<3l]89=NN?Dޔ.~*PK     A V7  -  '   de/cardcontact/scdp/js/JsKeyStore.classYx\e~LNt^@Rt6mJo+&fL" tAwҖJIu-uU(eem&'3ɄD}v9}}0@ %pp+8=VוO$uL,5K%aibYx2]$pUURV],nh,[vudVd.v5gSiKtn'T2V'Tcb,9-.䶺l:ܦgM3̎TU
V]dWC[AUSUu8Mlm"ap[O2Lt3L1S0}g6P>,M[ݩt1NUC^)mTtbdLv+iq@L]ĝUU+GkP[75)|
1s@-mjk}8SL1	+Mo鲒p<=*Oz2pۊv$G[Ni\Yl{:cq&'q`_g|SS`
]ԓƻƝ1[)\~0_fe5ﭑsa2 >+0l'.o^"g&c	}:XѕrzfC<>l7p>
,5ˇ@9w֦S
땞+L\#lviԫ&`-iˡ\$8gG@{;'.Mzp!)\
&6b7j8Kb\j)I'cLEE\2
5p`|lEDb'%2b".
ZX&@'NvZ0fB YiÇqT=Oi(.N=*mhW i".r1Ss2*[ЎwSeb4lTeksIJt,MV-!<Nxi؁&ćhR^ċ`d{

$^o	gn4qnbTC{4cA!Vv$RV=oi^d{a%3q>D&ь
fgz5&YN=&>{#'i4FT^BQ5cۣULƄSF:M|?IcR<Q
}(XXUMU~Xd`ZթTO5 C4M<'qg2u"2^SVȝbT=O
>k!IE|g,ot,TZê5xNpV}Pթ0ٰvMXժ|UY{԰xLxBiLRjC 
ķ.cEC#,Ej_'%=GUq:^Yl-N2uEO<v-w+vf;Y8xnto1m7wKx	7mJ+Mu̾^fsYhRa@[G&^YGKEO'g>SӤ ^MP<]U(mZ7^E&P0Q%j(MrQF6&iaۆ<liRLx`vh\lOBg(TTuV4VVT
61]$1S\z	$="̊'"(>)Ҥe[<H3m쫏Vb?sGfiXyYܑ~(/rnUT',y0ސ2)cM)WMQc2LM/h} גp(e2I2yH ;e)d:+E s:o\-6ePj%,g%`d
BS_MX'ӯnDtպt70&l}VƓꞮ+nJ+y4OuU
>ڐf2$#^fɼe|'UJFNG;2ؿp+'0,qN&yJ
HusY#-5\ga&ݻ&ʢ:!dKUeթe$rhz7_lSTx>wDowjkGNelNn]L;WE5Y hoC³dow+gRg:*yщ1R<SFڶ>qC>g	O
@e|MeEрsrW_MZ2{KRNÆ!m7֩3+%Aܺ:2;j]HC2*=\N}w*WpqG#f㋵ң<nHʐOJG~)67l]Gaڐfi:5P^ɳvѴf;!]A4z1k.cJ$$ʲ\FWYTk'73JΗomQn	kզa|r;Jk{䭺`crW@>.wr6]3ͿʑUqiTZy_~ch<lMXb**[4D渎ٔLZiXC:*U
~v*Şe|*SQI_
Sߏ帺]'`"&D+q54g?d<
CqI-X7·zmMFjy93Fs'=lCk󖺜gJ]ni]ngS0/ޜؓ[엹>b׽WZT6`!6GU]sNqu{1]3nC>T!E-u]Խ糘\{0k<\^ۧTZEO^i\`Is 
#iQi|SCJ}y/VEpᦐ?#}0~\|jjJOLs^\ZeD)TE!o؏(jO\=].D!󘨼2ѭ_<-jӵ!\)؏D*syG#d|Ei5k
ﰷ _*א{VBBED]QA|	qjǵㇱ\Y7⣸V<nOc]>q7OP^}4<'5xTy  \'OIz[~V>쥶}(~Ju~&8S|{eΓ2t)T\=Ϗ5N>l岈w^ji9zm,%ܙ9 
r>e-Rx$+[Vrzր6ʎ3ݏg;688*Y^D<֐к4so75Jv[ZDJ	Nu5}E4;#95^!A|Rݧ>^Dy+
& ΍
wXȫXíqtbD)ߥO~@lw?DHXW?*w	gGP.ҝ#6ʦ)/HplQD\^ʫKUekYŔ(9I>7<lP
<xmtPyK{xP?WiS9kScՈ'7ޓK}:h)9]ڋ/<gF(!`ǐq(}h1z<VMMj,7扔ddZBaڏ{0^wie)?x/3/r/N?a:!sq.X\JJ\$^)DZJ)nEN	^hM%wL'g$g g$gL"g߽w̱ru޿_Vfk$fuGz-]Zqd~ ľ -o9Iә!c5K$&d[سiNH=ғ؄.h3pMI{O2HF'DUl=d
,~9I=/<M=%	;qdN
/V5<t nUA;v#ϫ\>55RGPZsؗ{^|]ew>okx
~77ԇT.{7=ck~ie
zpN_Y~0ս啥!2MT֋ך/%/~Ykr?F(Ћ_CepI'7vPyS٬9u5HKR H!tvYk"L溛?ـe#	_̃KpL.kC.	EZ$((]c҉2<JUlZ"	V=?IJw9.<+:QaƿsˊFv i6S5|6rڐl]Txɐv	
׏A:ԧ[cP7f!r/uV
oG
RfE$
+]`R2 !;h%[6E\]E\C\G|z;x;q5.&wPaSI|N
]
̕!M{}9^V'sa߄mr0}^R> WG878V4i|>mAkfծtjU+ 
'=B(剌r@sC`1d5Ry@&<,u/Qè>WYv=_9<5Vo[&[ʷQ
C)8q@\+ܘu<8gk xupPm)M*pGՒ7*oy<nu尫gtBR:lG%k2e 9hn>~+v"y>mr[/#lt<9W%=<#ͲA=2%QE/qȗw`_#1`t	r%^L.aV%&旔i٢86.pl\xivԵe'y63*>J-"7[mW'e܏ PK     A ع O    #   de/cardcontact/scdp/js/JsLDAP.classXy|1	G8dT 
HB Q<
R H	G	 v'f'Bz`jZ*h[Ko{զv6$$!7{~^^g Lb(@@CPGaTboMfzs&TWY~uikVOOeR@ir
I2a:Ʉ̄W&nYu.0^JJf$c{%,6i+Yb%LKٙa!:X`LUsB1:VxsvFJʴiTly1BHg`-謗Jf+XBГ%_zνKWŪݙ#O~n6zkc$,
gsٽZyEZhcJlxnIKUpڍ%ޖV$7{gD98W`؛gmMooI55@ܥkI6Zm	UZUuLy
^ZQf0MR9tU41ʯ9X~m̘-)	_NT%T>T4;R!e2OvKT$SZQG6/g-gB\DfKK{سgWQcoJ%-"5\*Pm%ɔc *kr!I9bL*%~똁w1[,q}qyYgw[~:ya&ȗ4ƚ,ofU̚2O/pFǄHylI}
[^F ,n
D3|?
XC`9} 3c<벞\tZ\_a:/Xax/Z.KU9A*f̨=I|Ui2/BtP3G$t$njkn
!AUKeL@f戕I>jptQBZ6]&72Қ9c6y7,eO.<n(X5;j
A\CRxV>BF3AD^f
nx)ul
3rsM[aF7I%ˈnc*c%,p3npj~)Lz{Nr$ܞ:Rq{u|;OVE"]>ivgN*y-}EDM~	}8L'!+i7]'t<Y'V+(xD}Rnil)'y\ǧEUZza=Fy*S=뷆}N*qkS.7߽xBnkx;i[b4gԞ"n2A;KZXr!e֨Eo/f6S*m>ݳ:9l(-%qu/PY@~WLVIeuYmYg9Ksq~S^KgE\e57JzWd%L[͎^Vאy]a   И^y%%U_tɰ^ro$/YdmJDc੒C-_&I ד
VEW4 Oɣ_]
?gZD.ä7\eA)'%TtÓW#m3J8M9Z<DRlu!B|5
4n@2]u.	MlInwֿLLZ%0Q$C#_\48WGv^N`ff,QU?Xy,UTt+SiO]dA*U
9'ٶʘ-NL1.J\d9kH2R;[h08,bb!Ol7X~ݘۧU7E7$Ӗ;ֶ7d[{tK ORe=]Tt}J^CDU-WAjb۔qKV<"[Ol/_[%CB<L_"z _ė+OO:Ѐ?4/+P#6>Dhrq<<a偩3dHx!]c0c@<xʃE)a#\<`b#Z<m>`nqMz֎G0~Fـfޢf2T ju-y=1Kpq9aw5v-GAĵ6ʵ/Zxz*^&'\)
نo[m6/ #n!4iy.aW5HhؠR9s~L g	9yAĤv,|%F0vEZ)xYXad{hGos;_݁b#0C/\Fvlm\C)~[(ގkق`r#Ҏn~	L}CP\ba|8Oٯ'Yld Q0W)،цJ\w5Mp7`;n$v7~ -8[mrz9^6"ۆq~N[/Q95,Nd6oh1]-a,wT@\җGz	J'_='gs_m:J{K
f
K;-iXH[(fRvE@h`:n*q]yqtr.{C=,?-S.uWIa{<RkJS2,Sr4aZgJN" A&C8b7rAߋxBir2:?}(TJֿO*%~"ƅ
|"tpZ-|"'bcU0qq	Q(t
V?)d.VsP;4"ŏQ#4BF0"=+..[*Tlg:%EFQHTicČvYytF<Ə&)%{:iH>sGQegi<. Ӹ u^
"qSgInc1ҸL<r(Β7Vm^#:ǎ_b/`jc"'ʙ
!
}Zw*xw*xRX<*ld҂P&*Ђ/
T0:e+' BrKa!5;-n<:gL&F3`PK     A ҬD  z#  (   de/cardcontact/scdp/js/JsOCSPQuery.classY{|[W}q%E%N4i_K[V)~(Gvl!u^K׶YRʓ2tP^؀AWB)t$4kQFul=F7H}ص|{s~{\ϞI4Po>6̱l.Nu+mfvGrFȄE8D A
0!,:cu3.m=mZLujav
.`!m=3 p;N64z>/رVlOB>iXF=2]T8LF`	,
=R5Zl3ko
&D5,f,3Q97
J˧~dj*{=lpYo[C$2Vl֧
`5esiVld)T1HшsBXaz:{,개c7fW29S4FQz=hM0h6w}2%3kiMsU_!326B42ZnP4pw[oo;^9IFfwM^r
IɾF4=cfFY(#JZI$ILMpޝ :L߻+9K Q9tlݚIv&{S];Rm=}D'w%T^ v
v%[]=Żz[ySWO ?9IlKMn:Nt`L1|VS
7%}3iPd'<7okCx;']e2-nhހHidN
&H޼7kɲuhm3%hcg"i.	VG&/f&¶!&? (GXFSYg( kȚY	vUPAYOva:ኜ|݁J&q(cqUwhx'P
'SU8z5<(t׸nJF>mn2:#l>67K}cYK)#:q<{%AvaJx9IE%LÝu?C(,Z<!;g`pgytD0>CI4bG5l	ŻG] xUu'	`Unaf?/qo,$&A&"-F\/C>ͬ5}%Ndɣ׬.N#j^>7u)HN<χIwIBx
O*k;dzOR;
40:NvG}8H0J"O"Wx^SkVI
sѣ)]z-r.,SxHϕ(*dUÜ*M格^&rCcgkg;
>+[VY,m+O	ٶlu{,T(L{i56I7Ң'6i
ݙͧCE%XE~BY"e=V2GҋUbnx[-
ߦWvW(ŚƓ|(VsX7?+k+fJYsemR_4vA&kjl>>'GI7@X) (x+M
ԤIdM"wM+^=%,SM
_=7L9;Cd,(o!{jM^=wϤ6gPKlM
=#.&Nƶ\N?.1i)G0ͤT/f@dp]p,nµ$۠kTm}]ý-V)
%3ml"]WQoqՎQwx!cD@SE!\fg1>#11KI^yly*6Z2Ԋʅ-+
V(%d_~\+C"&Vib5[Azl`a*UYHeڮ39bŴ|u.=*<˲yKU&ڢ,UU<.57h>!0|79ߡMKОV%I씳/+rWS[= )ŭ"Ee;Q"g%2;6o9chl~\R]'y8
q߃^qte:%YuD9"4ZT;}Q_vR(UD?Tv']GnnE?1a{ЁƽHaX"1"RwaD}wLz@9?*25Gonr	<0j&j4|k	^/We<Õ#o8;yN㍞39Ypepǝj<ꎻxoUqw]xO5ιO>5;l#[6nE	[p8D?&GN8O<9HP;k7[w!tp:k#[^š:o6G mQg'v
{O`i\FgQI^ЄM:e51r?4	G)alGh#ʐTl3%/$U?:ڍ!B=Iը&<<Byy+~+XKC@0z,xŁ%%aHXԃ8#UpPI,=yjp
9`w0ILNZ;ygO-)=M/nd~
LR.&)Id1>ӥW.)cWѢC+S (6b>tޯH4Ee"3u>?eJe䐒Q$)y-Px`}>8ڢZ}P.D<
]G냑V:_{Wܣx )HOx@&\Tk3yL/3's<J
[۸0M0`;Lnf>oѹ/3VgN3._#_b4~.~g5Krt̖Aۃ$3%LK..TRe
[YqN%{wH p	kHȫ&<JB\Z
O^z,\a
θ&i'S'|©bS6J5mm~kMZzxF{\?ߪx=}"
S2<_f=P]~j/SŐtS6g~KWDZ8e.T&2T;UrTgg>),%tzg3?ԑq"Db,KZ܄&x +jb&Hayvc.\(sQ碼E9E.8(/wetq%!'neL>	y~rV̼}xjKz'ZSsRK'wR6⹉xƉg;||3 ]g71݆qj?c%GM=Et3]\%Fo1ml֩u*k\,*
C*NqߵU+h|j(1{V}a[IVu3wሻp8jA
TϕB%o(f~̞=9=I4D-mC>a˾'ny\>KubhD PK     A l     -   de/cardcontact/scdp/js/JsSOAPConnection.classX	S$<!0b0(,hZ3
td("jo73$/UԺmqvu[ֶj}Vk{̖0Grg=oGAL	

^>T̵HڕH&VcDƍt/'ij\3鄻DشI_`22ֵ[i5ҮG@`\
 ζ\+f%kc:POq33xJF̍8x&Չ䕥i;ajM_Ni;4}nN
Ly̏)t\qܐCE$aODVƴݝ;ŧm+Vru4mczĉ:f$٥PȺYfm-ɧTk
t6.(0-):`@MXRMchBp*)M|W0fjEil)2114\s8fM2zӱHfh91y(13#w4!0'2׭m`1th2ǐX k7aԔM3	Xs+LѮcV1߶v,s^{mli72 эqb@SD?$#uuv&z:Hr
+ƊӴIEca,R)Gk]Xa:RHƅe,{HX&X4&lp-8_`ZyQ։l.,tҊf[-.[4\b)#GPi^aŲ)3Ƒ v1
q&zIRB4sfn.Es9H`+423oO$*cK&9I}%ycFll<VjJ2[#?pm6])!KG+c/g<إm:.eNPjv
;gOnE.g/_js4\Yz(6 U:5~:$plWt ׁтA,pSvBٸs
)+MiӍp/=xw=7y!N-7	@-e,CM#u'M^769.Ymߋ;
,iPi&?~^4jz?@ut^Nq*!
|t3Hf͵v+
K8YJM8upzΌV㓲?%piYKmT|:C/Sax80wc
q.In?}3Yұk#
.ZvM6c$mm2^?Y<F189{	oIUٴMM.prSTo~з9
eO&9=7^'&K!<
ü*r3>2erXq7F5^cX9! s&twۺ"'5<ǡzeUY
cG8c@.
/Ǖ|(jxn	@xu٦![176R+6*iCwk)g*Ƥz6畉#֛dMǕ].Q*lخF)tv|꿖#d7+q ++<sKOP6[U%սٴz*,/xy
W;me혹*!4$Nrr1L[q/I]G
G/<Sb~c,΂|qPI84ZjEآwvJUZM|aHo#]|}\̅ٝ-9ߋF!a{vYwA`MGT&ѭ(,RU NWӱH=ס!wa_!σ\9kQ| 9X0jPP&΢8'='#,^Nͩ{ǫRװ<nz''<1%xBF>y2QtQ(ef2ȵ*J	_Λ7ݩw f NzC^9ٌ 7ic=E}KXj\9佟ga>b1}~ΡM O~r7IS*ĤЁb1~_aBa
'D5|]ԉoIS'7U>:-<M{AD\Wi§ag5|Ght
x#w"-LSbU+d̝P B 6F!!\ 	ՄC0<BPy
!\Bi-0݃KCUGfyky\}p(Ẇ9.gՌZzr`pۋ
ЃxNjYw[y6\;onExzC<ǜ/S~HІjP!:MϘ	3?/%/i/~
kFs?~1j{M|*@Oܽvk#?ezxẗQ
3mi}_Kp<Q<ςǰQ`f>pGK˃(~qq<{rwNn{-G|ͬ2/M'd~uzܕ6+^wD[6d:4g6~6KB.c_jg0'߈
f̰*kB=ROby*;^S5D|/faKl,@Bk
݅2{i`{
0\`Lfx{/`:y7<)c2bdZ#Izt3{rm#5h+~pPU3R-&B:1ILFPK     A k     %   de/cardcontact/scdp/js/JsScript.classWwW.)l^
	.&(0$ά;$P*^ԶVmJkDrR?'ޝ@6/r83s<y~y- #f'ߟ:LFOu[9/٥zo<;h@xe[^@]}i3i؞nxIH璃n[Ԏ &z!r
K@Rʸ}21Cv)Q׾Mr:F[vәSh껥CUq,
hGlSX-'je6;Wz6jJTוTX3SZn1̜g95kKޟK<ڒ;*8jd!ٱ
;iyn{R.̞3F<!P
}Nˈ@!ܶ 
ge鰛d7QzҗnGL6

sQYÜ(jİxISzN`E]lv,J}|d~V Q1SONə]/$ٿ)
MqȎ9B`=sN6Grg8U*a({6c!*~bY@ICLL3 hIHuuIw
m<S苤nс{MuS2pi8G+UofE=oj|h1%Q߾UGw'qJ6\etN*<^Yiƴ\gIni{قN_w)gpN >[<Vi`DkW`BK,WRVUQя21gv~wN}MiRb|Dbvͼgͼz:v@@<ʧn=S0C{m22˝zn`淊vY2)\Hr|'ހmg]Xf5h8NB7gt-.^>*sد./x?Jk6sz1%dlbє
؃Mru{֧|u
oٔ1<nȵaL~fby	41dNse$GK;G@l2[_9Ȑ<6mQEVu9E
W4/k$%.y1%x~V+{Qnq|+3TM֎JʆE)
5ńMذ"tA[?Jru8-+P`[ 7ȭvRKM)ROH3pnyg
V_ҩZQ174|(-^}2}J򭺬K܇}'t;1ݍ3Tȕ8̥x;M4Ll̫6n>xbQjv~Q(u<d'Xooe {O8es|K)qy/
ǧ@}mr*zս3Tj1\T-G%*O`"ppp+&6O'Th%+WXL`QRfDPV5ocK*amlK`H-3F
=x'өh"%M51g>QNŦVMp&M-\J}/P:A(6hr
ocgjޏXnq:u=qtg`@<0૴-ͬτ/p崷#8G/H|_븢x6hvķ
|os #E/^"?j09f4.Gj^s>}nG.Ëhح~$4a;$]+%Ae'ė
UѭKSBP"8ZEAߣ^Akq^QWY|UpX)S׉a)~pao#_WEd_!I :*8SY:#YU2J)t6TX4I$W<LBO"2^~
"DcROyCů[,w<{H}<p>"#'<ߤ^Dz?Ef4M9}_߄i0j$K!'΢R!Uz>)ziWWT/hUYo\ẺGA>y/PK     A N>    (   de/cardcontact/scdp/js/JsTLSSocket.classXtWyvvGZ"keYZ9ױ-eo'HNe##ÁdI+vԝYVZZ
-)N[!$൪7@R(Omٗphg?}e" Jӡ# ND'x"aF)Ӊn_c	1+
ƓqF_c`JQ#h`
hL
kܨ9C@ONvP#E٨vy*V ҎvH+Nݓ['2P%w['65k89i:q;5$Iɑh'GK(\FlغFi7pR#(lLngE4
rhi0He|RlV:bj!U)lYmv\MBRK[a`'9i@tU@Z-ݸFǵЭQ+8|qNZ:Mkxk&c4ƥ^lR.rG-A

OF%Fl~NtYnNx<md2z
]
b/@'ZcJo[׸B.pPf(Vto&[$C`T7!^`;sRuŬݽݔN	+ؼdɥR&3=a%H#I+#o4p1ޑ4!0q:n6p4L.N[f:-/MzQVላDy7L[#0
CFHG656])YRaRΧ"IQ[\U GBǄ$lJ{e5SR)kS5	q8HXp
1%p(ȭp(dsB2!כ!\˄cȞB=N~ ¾9ܓBŋ>I6G)+fOY)[r.	xW5~U"It
A=K}~f[KYkڇŒVwӂVB=5݇T9%UKUJE5ˡqqA<xC@edZf˜`)C+<a<QcL	$FƣiG
8vFu<SPAQ`@%2&JIb+',1Aœ>O٢rCy@Fj9VrH[|,z9SgN)^S[-'܊ .^Sfqh|	1/J{|)?7(3
Xv,9)g
ʋy
<oj[s/͍Ix
9IYъEcP:V*n&G]:$Pf"mkWc	szϜ4Z=WEO<i'Y)4y2;.*]A;w&؉{%Q*-\`zI r"R[13ִ
x	f,լsDV"T貍bOYǻNL+q9{לTcfe#?cX!1'qv?WKk5^سiP$Fu{
-p`8T/[v|{-i}wbXn\E#ݼbCƙ6,R%I].阖bg>hBX99$ez7K6Q]懋y뢌JNj9d&7퐵SC2',pP𰼡TLXՋY23Lz-5Tyw>?+UT	OdVeMiE"v:ڢSnTm3RdCNheJ#'&L:2lCmQ*vҫSf">1s)M\̀SH<a(F&n<p#TA;&{&%2OT{Q{Ԫ?O|axzhT{q.^KxmW֎'q+z|/7Ka:Ƕӓܷ8ouiZxDHM;R[.x;޶*Quѕ,Mc3 ewW+5J7{׆v5yމzXUzE~v˯~ yQ.I\m$x<z?wȷ?qco՞PS[֟.@kAS("mZXs>1|3h<ְzL3x,^wsX;G;q=KRnv&Dx
	4bCx#F7R(!PÏFxl9KߜC?S|쭦PPJ{[BZ(v}=3kj>'AO&-zQ{-Z1?K)B</l<6=@~YQ 	TP	9MFݍ&܃V&v6ݎ ~vN[$o*S^*(KB#FN(f]m+hѣC/aaڒܯ@R:ל#z9S~	53};gNTy	g04Tߺ2$[ZEOf@ZN{nx]ߘ%靅{g	hv0[VM7K6mfy0?K
Abt}-(ghu|3߂M|Ⱦ@5$1?0y	Gq
>Bn~rϻ@Ng<O8$\4w] y<Ә%ϒSx_?T0vTX'4"aA2ZxU"ȝ!S+8z
/*M@wZ4^v]tQyN\l긋{k-:NU_eSԜeV!#4H2Y|3ȓy%sə,	3@oP/r9~?F%dR
Cd_XdU#Q#jyTHGɀ3U(\b*yVE%	)J2s6s|
TSLߠV|);Jk<ޝޝ
ﭬXyyfJmx @i.:<ӷ!]|p'd=rȴ
~?LʇB<ߗϵid2d|ճePe{,],	,v5}gf8BnŏyO?$ˀW#,C> 6pnWrS{EBNYtǦH͔O)svӃ.b!^B#sM.I:#[֬ܧZG#>#j +My%&T_7>$Y`Q+ܡ!
ywhȺ:^PyDVHu9We;o`˛My,DSDSCx帒)y"EϊX&Wʊ^Utl8h&.B!ZszFU[=Ub׽_@PK     A <#
  l  #   de/cardcontact/scdp/js/JsTask.classXitƒ<2m%88A1-;

vc&Drde]R(ЍBZeiHcH&tl](iF=x,;8=<=w?G%kTI56w&S)=6o8^76
qGAtiQ૫"@[20Ga.)X0bqJʹǝOdbCvlݧ[hvt'k+w	:V2=ЬBA}!Fz 6\\ۍx1kX*vخh#QXN:TFY2N+b$N-.kds(kXci21 U	bXZi8'(X:PP6`8fMdsL1Yj$4R)^C
ƶU;p273xz٫/e
"3%Gьi8o)y1bџ 
+ͼYi8]+Z4f9;fr;C8M*5,d;ayR3ĺ-VmհRuذm}l~qdXx1t$m:Mvds6wfZ =Gù8OȘaYPU&Ba]+ѥ4#mSvXUPZ67P YHUS=ٴ6:Ǎ L9*>G#Y[FT/
:]Yj6`4
3,*#A#`Bq1!W*ȂxQKpKESI;cچۤ!.cfD-44lA{0$mi(qq$5%|KA*.f3Յ0++=&Ud;s\Gf.2tDΠhM+aZ_W/)g/tZ.2zScCN\*og/2VCJ^"7b] m9IEWva54yw]1c&A/I)PtJVux/OHx6)&E|	J`2mzy.Íx4܌[XD
K\fl-PA>,[j>`QF|1zw^P:F'oh.F4oSڬ'y{qݶ.
}l	9O%ڧ4|w|Jg˝peP)7UQsIi
ex xH籛o`=gZwgWWgoGkVK{4|BgTJugTU?1@PwO0A)
idtH5['c	ڧ`A]SPKs}N9)F&|e8n)>43fvʹXdX}"mdCկ[Iٝ;I[$iw=EQۯWD+NP)M7.C;9V`o,硋;l"!`uyw31[SLA4(m3n^!\ù{7_v6ń+(3:P\]|,߇ܗ&%/%N˨z; UM/;IHMvdU3]Kۘgꌨc7tr@6ȚYR:kIm[^3kōsb+"Jy<p|)XۑOT5Kp,?ヘqv<Ι]`Nt/hXArWw|
~v!tktw2(\=a*r#b!g9sjY]>qu8F(N6-#h@% d5t$4b-g{^(9$.J1:OHq
G%ܵd)s9,Sv{K<>p3
t]Ѱ'm}aoAۅ
NVTpWChC#:u{~/.ʿ	Z5i_ 1gĳ$J|!1zߥ9WVY8\l*yf>m>p &o_X¼[$(ͫSsC~~J)JK=(S|
\K^GFȼPdn֛fuổvf\ nI`ݯƐn<sF+*|`S4[70Ų=swńzJ4m壱C"伸!Py$~CPz;DC&"^@Y_
[uaL
]q7Mst0u`(~,t=
qXH
c@4zuU>Ax<\ꕃ+XQ(\(SG12dj<ǧ <Y{&YZHz>W&\4'iiFFY%g#Xz!(o W`iZ|+X|~&f
j?[1.haRR^j<:5NGgK\B	r;/! QUكGpS}(oR*{Ł.MsyW'
He\+Wx/{4za/ǗFVPG% 
,sZ8$</kELUqu*^Qa**B(CtO.`夳3G'r mʻ*=JnWEHGQ
HGaĪPK     A mlt   H  ,   de/cardcontact/scdp/js/JsURLConnection.class{	|Tսwf&w\ $ BB``M0036WDK]ܗVI}]ą"jk]}ֶ>{.(;wf	o>};~N#DtT)5GYL#ю`(F]f}lY6nZLY|&OٔlSA9&4ͪn
DZ#x5^km^lECm$HɌZH8fF,&4$:X,Ёa:wT7ǣp\oR
CẘnV4lViZ{Pj;[]BnluH旾"FT+$=T,r;,i/12y0?Z*M 9`4 
I&Mf3h{j)&Tuh$hB+M.cH+#%֎f2N3\bxI3h
b"Q,Z"qcRtF@nLyzx0T݂!h%ФhdHwm	Zц`א'-sTmJ-6i	3M`2AzAvպŊB745ѹw)Mϭ"]bR52ewXq)[?ՔM9.r8[jh.
Lef[2Zhpw4S70נLcܦ@=W4Ux֛tmA)w7+ O>`)`Fjedc
7)Գ3tZCIS7E#>3u}֫?Vt'F6ŤuB,Z+[d(vYj@1(؇)ͲU&E)fOUaӳ iALN;~1 ږ j˦]CW5]kut=py Y#n%6SnVފ)q.pƙ036&%[?mڔ=&}n<h Z^{V}Kt+|rhC$ܑCOj&6[:O"XT 3&Nw`T
Q	Wt#
Ǥ{>1+^j
w&}VFъdɥ!>o	a0Mm`xC]ͥ/5+S&cS ֤	252&}M7fT6ELzāUV,<
Ed*ZsXzI<ޕLlhΡ^:h!7lnnp}.hr{M&
5A+%)iы@jtB ǦN1ςkV]z6it@xI`)uJ d	4bE2
K3&/l/1<MN+IҏҀ݅xvS   m,QOZs~A&dh?=$犗Z
ӪV}kZ[S~g5Puqםƕep4pn>G_egC6PӤin亱s
ZOLoJ7ӚOle+S*
o
4诎o
B :䗅VkMқa~h)A]Q+c0]T\JOQxLd$\	"VXmA0 )l
,jd?gO-Bk)Bd ]lDwmz9'CMΗvE'L.RIGr⁠qRm93Hr1&HҐRIXx..Z6I҂UcK7h$?SJĘ!}F\0:ŅYpWwbLvpXK̔2$|<"m$^QnhtmYdL讵,Yj!eV4gFV
%Qe<y_x99@$=ӿ:q
H/6y	h
t!oB:\yV`K0WfDfhV{Z&Oq+dz%k[ierc8=@W|9+p2>Ns"s5y]RԗW49 +d05Yrm
6񟤇8^4:ŋ{PG 	@[Z,:CuӀa#C1ts|2b!Q}(;#6y+od>u*aN-۠t,hG?o\3z3o,ot'Ϡ2f?"271GME:h(bs+qW2ȖIIj\?}V4weK}+<z5P<mG<z3{
Os?jLC5?;pQ]C:ƇLBgV|S(%f,BV*T]yi$QE!h钕+˧lz#0,le>خ 6WMh|&?Da=P-<0`!HBqQ	M1Ib=m|^Ƀ]Xχ%ݒҔv",5eKMuEtOc:>
SiP2ۂ*Ymhg}H]
J,=~NNb0<bROs`*!KCa| Y_4%~Fy/akr7_5Gc(ii3ß$kDSt!_񯡂-P٠	d4БC˸Ioh0jAEw~̷gڮ5/
*`l-ӡӂľJ}n
vl
tbus])ƕVHLxwMAĴ[WeJv
br6ǴNݭb5gsdCdv!<N s,)v&k2t;J$ohK0i\HUz3}RE0Ϝ6'T+t1fLէO;eϧ.IR{6U!`9=7E~C
ݘ*GGyp%s}RҙO@EhǞ$p?Y,}cAR|9R,;mI#QM@(o@@LR`Z?7CM6,X#f]ߊZΥWF!`:VIVsxZڎUb!Y^ ̅,ٙ.;lILeVCP9Z+e<6WqEqsv@rT[~XSڻaT:v@TqÙ8-RiIE)vEr*0

͉ilowFEnSޝ&Yk!o;mr.߹H^'zezN7lO97HnbEx6 aYAQİ>yTq}a$׌z<W$!a8DCJ
)q92$rr`[tn1ii e6!SiW4YF:,)\Ɜ?$޸vL-;iXUHgge<-bJ԰xRl@H-ݨH
	_]-IޅfkHO۝ XٯH9G}D1GMڨnI|.ol/~'umX؄HdKwWy})jP3T[bT[R&<+V
u["H4hxS:Z[h<ˏ}{>y;菱Gd^WT}?׹pw橱Q?h'*?c/-2b1!ZDkd~$r)4<{?8L2TȥZ.Ӆx\fм41ț^LCq]B^ZNt)
PR3Pe4eVz5͢54BuTGi)]AJbl[3mpDBysMRz33p_X"yp/-&?$jӲEt~ZFd,/[-uJ^j[Uۇ
#HD N^]
n02_o`
,;.~z"I@e=ȧ`a4yp1U*>%ŤNa,0
 VYQI2G(Зн2\ݧW8OڂCKF/m'GpC/u5z/p/Cݫ=E0_Eqey
E&=|eyE}dpSN9	߅={/v?\Oy}}Qs<\M*[@T0y2!GxvF m4_
ɔ6@yr?|
{4C
Aco
,G2* F5ݣ˸+8eze}}`:c }<0OSU&c[| gf>.wJcn(W[CRjyjȌNÉg{9p<xxu_G8,ḁ9w~up8*u?dtWf \){
TRn<НNq>Xy/LGMUU^ǣ{Oz^:ߥܪDc^:5^+^zUU%
=6~K/8bGrX~VBq~C5#t^4Ŏ{._S;D$G$?D'}0wH~Do]q> o w ]#99T$˘i{1#gQQszΥ=lҧ+wsT>|z8yӋ<^"=_ps$OE	xcyr47(G7{(OQ%i*UcunZƫ	y;j<%*PUz)*T%FJMEoj5M")W:	\5.,[a'i$Ɛ_~JK#j<C x
YFAo{XA_ps˟{>>hxFvPQbO^,6K̡\d\R1H>	$
iL^1V"zr$ 7LsY]]Hy|^|=YOXrL]-g[0ϑI{dH҉p;q%'Œ}^'$щ7F0Q)/2Aǳ99.s26j=jAi:L2ζJ5U^|-1W$~/%w%F4hSo&sEQPj6TH"i.מcM22x6x{ ɑ9 :̳V
y<wuw/jW7xUE^N/]>AA;kh,_K::wYZqFuH5_$-PR`,-w"2S@ 
T˛gsF*w9aAϚJR/*mFv6 "M8ױN)].ҊQ[`8⏃˟Fq;
;iM>8T@cYl_E;{1/f~v#n0Յ@./TXJBՠ.BEiniR D}l&߇4ꖴɫIdDh҉3|}
l6ސ^Qm#5WfL7zfyq]4*U4){O{?õ:z`V[hZKaʄnׂ k-OcA=t+fnǩ:7{#T=Kϡ#f&z(R.!vz&ǰˏ,]ߧji92\GèF-ʯ!~Fw>}#h;g~GR`s\@*g^:T--"e~*r׹^Vub\/jRZ,l=DtPKNsߡIKPwU
+ȔN%fq b3],9b
7yOy)}q|)aۥNZ#	9D6b*o	4'3z0ç=.c(V\A#[U;
p$N1> zJGFihPrǠ*0RPReeD` zw
<1ujr#fըmT
:LTF9G<6WZZ%p͆%'41FG$Y ɫv}A>i*[%u7U-*m0\\YEoKsS;5i<][{b2G`j`7GO߉@H(
.RC i
٩j
T|$TժjZΥfLڈ,)>> u~^W7K	cRKOktQ.2Ǆḳ>XS,vhFsqNi%U#]^#?)7U𤷻ZEXE92)ZxZL=JbӷݣN9
nwr|;+1`oA޴±oE¾%Ҟ4ol>O\'$0mx]Nju
:*WZ])}ݎJU-VWnUv
FkU+-Mzץ$Cw
`!1ZGf;f{Wi
>𗡈VKBi DϝA%2$IHEU@.xzL|BQNxNίR:u=5 ]BMɯ7h@󢠭tG8Fk롛m@j"p{\ӓ=.l)ĻFb,W:qZXEG_$;tɤл2̰O+B}ԫt[3fc]/RGo'D^ڙdBp#``4\=tbbbb#trV,-G(_^Q}N|єwW+eA:3C
>u^$/CWhzȏR.q(q(q(qssDU9+z
0g0S㛳]3t}<lѬV	G>GI9vg{{<Tɢv9r<xD 8qXW捝f3=X<Ef4
0ϘdC5	xf4Ʋ>!䚬#/Qe7җjJLLFgvqVV)k?MU|
qAB3hg&{fQg6Cxjs]G<FB
yj*"SG7zksUUnWEMFhY@v]l#h#
4)c?G*ߙu(1И>{F̭zif_3@aTYb1c\Ƹ2q<5?Nf$N88S\r=k{NI{NW#m>/(ZdUxׁhgvnIN,|.,OsXELDި ["[xcib`)@P;'J|(:?AZaj&I=	Fzh49y(EtK]閺-uH|h`C;%t@{J5NNRAB
TQu~M_L>ȿ`qL
< Ϛ
2d+WBGVݏ6ӝ.~'{Nw""T*:q_D&.}k\_v}ݩuzި>P	[''PK     A 
XT    *   de/cardcontact/scdp/js/JsWrapFactory.classSKO@61RJɫ4JCPB
JRP*læm^*UU{폪:B![-yfǞvfcp	$M600M?v-gωP
`q0IO'Lf
FLX6Fa3,6w|"$7H%`dek&%i\51a&CntDUk2z["x`TȩΩEq\\41E58jd)n2yNľ*^c%.v&v:"S%ܶqwݸ;3{ۺߠW'^v"u&*kN(uh1,'>E"'@Wį4sX4JZ3>9T|x}V
]!8kE#af4$E'{8	X.yk3KvIa`#xD<3=1}τ:D>_!OaH˅G	nQz2.5o}
ʯc/F\r/Wc	bYyd摣2
$i,ĒVPK     A >)  6  #   de/cardcontact/scdp/js/JsX509.classZxT~̜I80`! $!b%\D:LN@23L{V[/նV+JڋTv]nmkwv{n/ϙdso~w;7_?	`<WxMJ"=Ƀhdwto4KSHEwv[vbYx"]&(01
`jEd"e#XG*;YboJs	Mǳ"mDhC3f pz@רX4N$p4MĲdA30D5&jJ(BdTJ%Ut2-&"t<4{k&!d`0rS7DVZvY=M]7,MCޑFU	P&8,]He4<-3
2Qق"o2}PuYD&Ml[bvy9)zn<_NG&RYneE{*P&!"P5'Cz\:4(/;BbEX0JXiw`#?;eX)k>uVY)Z%lffgbK" L&5vPf-X)c<r[<OʈY7߇@VXU]GU]ܭg?|So" ЯLв+nH
zm&6`#+ltvN)/5Rf$^7M*m2юdk6ik7oǡm` <!W؎+=x*-f1kkQ
\Mr6UFQ'#ELM&5A3N\+
ftNvRVx @Te"Ndz6yr#hw(t@B<'y*fL\|茉:ZQWgeZ>,?0^Pt<۳SkRNhvW9ʬeIf78bA6FB%auPo
;.cUdV<VĒ)"k-Uj7<:akGE i{x\0oѼK5,T pmUV"CE)?S%$h&mEDCd?rıցWỪ76MJ{L|X*g#jp }
4.ZdKHrDVfw%"8lo.|?|rHFQ}ħh!V|GeϘx-m:i%c}"+FڠxD0frGMXnH`:$\[xB~ת$TiO"ND6W*#He_Q0aZљU}nwѼ5-潡aa8k-Dw==e*~J0xE{[aO<߫,m1gg
\[zV%b3|gnvuYxo{hUE3n1l92Y|U6ĲV6FO'?2O+ʕjA/A9OLTqj}&+J&:MĿ@X~4L!<}	˂lКyT1CK_>wgw<F7.8s1[-^&N.W[r~RuWpCgev'[&8#\=&A
%{cVtw'oO-xuHb/ؘNy/S]
yS
5Fd%N++))eX5|!V)9iM;)M1{!Uخ"@8/InjVGL3ajyL$yFgReA+Âi vg:3M3[RmBSf¿R
:SH=#n*2Q2P;8)f.FrY^2ߔY`-4Qq?L-9)KǺ<8;z9 q]<a5f1d,ڽ5b;/]qlJu'&;tG3[1w搠P
ӛGN>3Z#Ut'KEk%/:MW$<16FAMWr'$ĥ_uD6nPI_IvS1e^$ MR/FaQ'6kߪJaߝٯn:{GSl2dy9̎.'fH;&yX*%y
l+&+}CFٛӧ:L4^C1"g{<;oFnHJ%Ui]7Gsn_־O/򠖯LOF+zn]?V|Kܐ3fT|;U
L^G도B0^$MG{ԷzHU߀ST?eR1,[
Ŕ$s^}{nP
&8b8}EЖ4{5']ëO#IW٪㰅2JiDߤpe~H,se[<vߌŶʒnTԍCGks2{JiA'08ēʪfq1Rla^2d
=?̰6ebIvځͯ;*ړ阵ZW9d3Zo1ud9Olr%,7N玀|䖄3M
Ш>Dpˠ>й1V;N+%Fp4eH?̍n	nNRvqN:\M(H4UCan_.PҪ*b3ښT闯V5C1"_W(c9+]$U.&:3prOoȷRU?Chvw5sDJ6D5*/u*jOx$b>/h^Gu*D,_K|+AqT^F>LiKxy;+>.W--s.Kg1o[s/#Y-\3ũ <sx0;lPs7Zp
5`888f4Cސ궇|}?}#5SUyY߇7AǪmGWoz7m|q97s8Xhg0Im2kc	\=dÛwnagja7h!Q"P6Kiϕk
 !C/f`/g"7s
hǍMq濷vw,Cދ|GMc~"d"/e
$I+w6Q['kru='zi#i F٤fMelEZ^o`
h hv^h`FU\%*yu.;Շ'G0gwl˳M&WSK/cGח^sN!ЇF=@c|BoVg/kʵ xNPƷJɛ.*VAރoQyG
J\i;rx7
-ސ{Pv<ht2q5{>C:MSF1gӢ,qN"P<պպպ:ٲ+l BCTe|~b*9dnyOt
2dG\J
}mݜg+9;'}
;\Sy }e/Q_dccbp}c
̔=%Γn顄	+1,ʆ*Z6G ߫n0ȴWh<(cIv]®!u҅t~Zv)и~t cx`(~HE*m
T@0FP%)$L	*1MB!IKN%7˓ydi<]RQfcza=rvtr!ѝEtk)sr'*_8M>>m/;C>|7ODԀ "TH{soWڅ]i:V w稏0Itp畔t5%o"vmI9j_-_;gs-wԟ^|>)|{/h=~x?fټ̜U~
J4FWH`}jg5b)5YCٕȃIFy3uBTnrxr9y^zg|r-r2UFpzڜ<K1l|qP n.Ks,w=]w&W~UEo]Tڏ#`Hrݔ	a}-h 9Meq.yv%K\r/q6	{\9^>]il[:x":#Pٵ_騫zU
AR,Z!jWND 0އ_~	q+w@sh(P
vbDm)WƟfuP$&>H wb|+66>_)*|Nǐ.>,yAy<!LkoUǧ)Ƨ[Yk~KvUTS[>َ3FͫLS;+a?0}s<,rxp-< J*<;J<R<h(fn`l DݟdLy@=F<N;'H'I$IS$i$WH$$H$Io(y·HgI<;8)y۝;iNw9K3.}θK#rg!#ޢfH
%wYPrCC:\zjWR~lRݍ19
Aw//cn'UM5Jc/Ʉ'Zƶ6]vv_-KX%?f$/C~տB\~n[J~!Cn
`H1{5ۿ{]܃	tM1ب~CU/wuT/!B^ZU 4OȴUBcr'3
EqWQPRd:|bx,'ۈkAMU+Rj52x1|oczhlTag{*	">$L
30	?;'vpصa];\;]\f]WP>.[yz6qU9{?hWi	^ 3ʘe@gkhv>y;n/*.7XFzɹW\9G8GM:ֹn_\"msx
;F՛1ڳc=*Gx 'u
:cYz)ȝO>#E>GQ}}\_zB_/
oʳPK     A [F  	  ;   de/cardcontact/scdp/js/SecureChannelCredentialWrapper.classUmSW~nb@Ixي/ -ZR!ѐNg.۰njTaԱ_K:鹛ݻsk :
b8˿Ͳz{Wh.Cn-,Ez#8õP5n4t檎VZnH٢$LW#Wf9,Ը#83>Gcg,Vth^uլۆCL`!𔜇>TQ0pKva[cXu*ںYNƷ8a#|ДQ5+nrCMY
7Kwr=e!xq%Q)`Z\UI=.7ӴWݠ/3='|0pH4m,0&Kx>)L+`*Å6SI|O Ωm,k㱶oI^`W75X%R~k
Zod,ذuy`
jYeR&DI<N2!5!O_WpaXƎl0;i
I;fb鮛.ڧ	tF7z-Mya0cQy{c1$xi$8RJӵE;Gb'!c&nNa^-ը]4yvg[H[&FXٴd.v/KPj8kmP?r!Rǔ0٥Y8klM%+bVc>	AP;bN%/$_gZx9
q_hweùü*ҍ0*=^0Cnl8;
c_1w,}MAd9E
78pϰ!S/='+g+LFq)8@~>J}s.^|!z|JB{)@lb9 Oڢ*AʠkX'xCX}462<$OA	"yT^}+_dpbGX'߲^:Z'<	0IL-bY%hdأ׆W?PK     A     7   de/cardcontact/scdp/js/URLConnectionStreamHandler.classRMO@}1!4P~I$,"HPr߬W(-۩Z-~ ?
ulA
̼yofVsws`omP6a0
aR|V{~ꝥWG*&TTaj®a5\)b_:2uGeCLP?#IpdgE/jhI<**ZN+YhC={΀`C_@㫡3M/b4qFz$O:~-FJp-X̟&؇?DA~9 \ucl	36,J|YĖsXb#3^?05l(}QpPWXr/SZey7?'F^Aɚ(YXk77͜PK     A               de/cardcontact/scdp/ocsp/ PK     A o5í  2  (   de/cardcontact/scdp/ocsp/OCSPQuery.classZ|S?M }ЖgжR8%$m Mb{N|s$8emnνtלS|{~7I6/^;9#It1(L[UAoufg/L<rPNN`:oVQ/{}
b5&g Ûόڬ&CG*Zxމx	t|޸Tvk8
2KLx X6{#N* ,`PM1¦3,i*S}8S)
xЬ
G̨7Vmy7̪S}ޕ3}AZ
o
h] /'M!j]4͠cf<5iPh Գa,LpGdTbP)@LAENs5R5@8԰gFITiPdomz}CVo0wce,r~,d9%;h16%rXa5+uЉ E@,p]4;ݾ^hb$1"fѵ]Lf,fMw-n(Yz=ݽᠿ
L6/twc{w}[S	?ih`k hmx?*9c0R;:i55lPIqLFLS0\z.K.F f4ЍJF_کZ#@dʇ1lVpZ4gYC;$v
2{VQagLƳka`Fڻ7_U{8Bool=6WMj`:I|])۠oavl$GR}7[U0<YEE[YN8#fӜ7/3(Da)1	VZ:tdNg	ӨSA-"oVچH[4t$;)J"syL1\9@yv:K6˅}>obO`_:]db`֐Q=֓KRlet9j n7bn\tY !=T.Im_3j(`?i]#ŉ9hbS^'z䈕Xr#}]H=jI\䔔nzAm \f"Pmt+xڶ&'NeMP}8`}LSRMx<2dvӷ
D6o[3r9%
z@:1ueJ|O5!7^_G'S0	ސ\L =lC<n~q,HFHMf''G:=).y .*cK's=>~S +PX!Ue'Qk'=CY~MDnQ#~g9īXXrOvƞ?SecGw#cq&Q@{2@Ȋ2V9"
aϲAa)ۙ޾We k:n
@AIH_!rK6ԉJo>LmޡZ<n`Ba/OnPr_712XPIև߲hG_ǀ[h
CT9An47C0{f6Xcu:l)Mʐoƀ0ld N
C!~ћB?KȓZ@,nX7OYytyB\>+Aɑ{PBj4џl=C| {j+{8xL	K)ϲrC݆,|<#FXɳx72QTd_*cF4EAot27یFQWΚAqTS4=~9ft)ۼ1w<vo

Ŷaӱ-b(	 ZW3u;ŜCa	(|Z:y:o,Kv0-a^c7f5|'3J0 H=!~TgiuGS'S /	*f0
-M<HiTMMٙ=Tdp3uJE.w&  R?hѪL¤ۋ"/Vݚ2̨VMY /Nx$kt7|"cHճiɡ)+B	eFoU?;[,i5.x`SRRgO:i^	%6EbX)nl<ϯ\XY]9r1-|Ԏ1lZݰʌA7d!Yqqyx;BR"L5Mz-der)2|RIF)k[毉V>}N==]d\|Hj%Q*E\(qt*n
VG1a'_ȟ7EʙY٬)M%U13
mу//|Xc%?n|G6d
g^nIVut d*>[g
VT`}.d ?|8I^Yӝ|hץ-D*{D7Kt.T.5t\[[26Z(^
|ߙ)>ذkHRH(*G*G$w-[Z׵Hlkl]ݰR 1[״6{Skm\Vy<֖ږS,('k47z %US2@*^Y婯hhlmRK6m
ͭ
g}[t#itzNiXh\Vkq|ѨvB@꣺;Aժ5qY	:	vzi';Ň	e^㽁qۤr,HrguݡnMVI_P\#:E*3-ţp
v'!ꡌ#3S7\߀V Sy.,6"۹[C~*!aZ\`ұCU@LqIP RSGE"{;&7s()Sy"u5`M[%qŨJl?NFY'5!ٻOz}V~^ɲsR-6ݓ_v:ia9.YqkhcX,*K(+jK{I?Nƣ#H8BDEvsԢPfUTp4'(l`x#vJ
G}檀 شT<a$Qoĺ.9LۭH-Mjn;uuɂyJQǭ^vhS4H{[ )U\oFkd4jtW#ә&He2*)tWg׎sj3YvAiarDIgVi[r%Fo4c0HY&I{ҳjF6]+Qui}4!pQ1Ż)ݍD{wF[hߓ6f}~ ]hA;ދC~$G3Cx!_껈&w)[6<
䈹Sd|ה%.=4lt%*,Ù'=ictlf9RAo:ͧETUFN<ׁzP8m3i1E'砝OHr~(X	I;"6::PX|ruk-EW[A+E%-gd\ />;$RpRY|4D}6BZд\\Ƴu\5x9˵鮓ZZT~HY\V6PyMѿD1t5Ӎ]`C)ODOp@ (s":=;aPL䧔LAtj죎ټ=0{)Ђ
4vQE&(?~488:\Ft9ƿWR*BW+>$h&?Ϳ G_3g)0_).ϊ(.u)b0fE\a\	a<SMNq%h]u	INާpզYEitNL`TM0>@Q?T&`xbo8dͿ߃ lK sOgJ)gHu:WK9zd0!%"B-yǮ:sZk?q<"c{r}tXН"ݵvtOq.:S爵z>\z4AUx&xiv[^m(/ыQvҬbVHok"G=_,-+vcDy?vy!lR~؞K[;HV#.\+'@}>HG7&	/9+Gu9
Yv9u졝<[q3"<]N0-jt9Վ]+<V+rjбEy:je8VʊAx
ձrB,gED(6r<>bÂ}k+}Yږ_
,4~Gn=ͦh.=O?rЋ^82 ׫`Fsi7'.=*?ѿAz>c:Dgd:/a<ndm<c֙<B"y
_՗a|,{g*O8# 3'?	jd>`u 0xT/Q_	,ʯwE:
g
S)[On~oNyoo	7m~[cZ:>OCrB^1M!isi!ĝa]	(۽IX>A GY\$9a(D֜4L;RgǛWԷ&ub!LTIPvYKvS2ڋTs>wk]`ظZ1Z5:ubyŖKs΁?-S
Zu]{y%%n x-HpcWߘܚ|Z]eZZ8m4Fb4Z_#0XWM`E
-[!>dJ*Wؑv(MC ZWI@*Z˧Fn-졭|*}[R^C_F^K:z>i7+쥷Aވ}pn8_o3Lh*Eґ` v7*Ii#(I[hmGS!2_|bg8X8jTi5i!Űy`,SgZI%Ff$0Fa8YeMeYYyY}		&8 5}JƂC>Y%E4uhNϣ"&H?KS4wP1<'AәPe*A|$7ㇱbOfC/Z/^!%8܌S@K-窗r|QM>zF!_/E&[4߲J C": `67<:-t2jfj[iߦoiO]!!M4IcM_hfr`Zɦ*n*%}:Rd4;у*I(?hrIEpȎ[g&G5w~'
$WI$-,fu5zn Co*o\Efrs(@[-OP*d	s#^@.{NԤ
COG 
ߣ3PczQ/wt.*W _r~gn@͡폡JmNWYl5P!3hfhc`q8ݝ6޻4NvE;*vvԥsAP"JDVkߡKruRӥFiMN ;QmYJ(=iʏIMoSF~Phz.70"<iET1#&TEViEm|Rc)gA5p۴	 hEDspIYS<VYNhe\*?PK     A 1:g!    1   de/cardcontact/scdp/ocsp/OCSPQueryException.classN0۴%Ph)$V$.Lew+$rTv	D'<;.h0,&<gD4\$1AB"4푯kmGRtX'aT,sr'cA$,Kw{Wpk1ONsE̯t0T
כF 2c3JFex-WLB2~%ުDkz TTw2Q5^*VbSUV-A6)Rd	Ñ"aj]m_oPK     A               de/cardcontact/scdp/pkcs11/ PK     A iy  '  /   de/cardcontact/scdp/pkcs11/JsPKCS11Object.classX{|Օy'߄ A @D/	I&qfdd g&>VvmwXk}VZk[[ڇVuڇ֪co$~G&{|Ϲ{Gn+	f;,NXa#T2}퉁hl,HjChπ޳IDTSU(vbVfT2jx69]hSr\zeIBpT@	f$SEd*x80Ѭw(%RbPj4'00x$m+9)S/IeeV!T;MՆrD3Qn,'c5KdkL_mXWqLI#yZǍE{o U]v&,@XBZ6ˠf(ƒK׮Нw8v`hPK܃CYT;-G+wx, 3-jVm%}>g1
%sAͷ5E9O9۫g&V;QE>1iji,'Ɩ	91PQMd66lٖL4-36g*PD9T]d
Rȧ)طLLńZ+v[.ITˁIQAs2Cqd'NW.g!qܲTXibhrf#uE4d!kc-l$	T5G8rZh'bXIa769ʥTj@Ic͹ғ m X=
BY|zC=3$BGT0 fB9CZ2MBNϥNy؄G< zH#;19b<c0Y%r<`8j5nsAI$|%%99G݉d<ӲΦ^(2ۢFnޖHVEZmub
{62D}qaJ\M$gt&
8
`aFZ|\*;.3/!7yWHޚuf«H@C
m/rjd1QPr!!^_>4ā|kutCՈ*󢛥LKn7U#k}p "
h1:}An3&/W[#ζFܢ}]@fA]{/p3wfYd$$Tٵji7u;pҁ8Hg=AQCk"͑Pg޽aW;5J~	w2؃\:%$,3rpqb |?b7KFO2E3!jvT$w	Пk7+\ kbEPX
yeǾ@$
nkolxX!F?!	Է=?)6|
3?/t/R/G18px<{c8xfN(ejxSzƑIlS)7;D׌#e4?yE[ް7|p۽*zP#h9uUE"/W#4Oe|ަC!A,pg2 'QI
vG$_PnͭjjgYLs0"#r&S?-`Hu*я rM\Yh@X͔+FGN[a'~x.yI&J4[l8_D4
Z2Ct<c[]ޅp7d'x(JZj	eƛkbbvEmF4¨IOeRv"Nrg6#yT'zZiFiHNr
ƺT4n
Bd'"8ڀVx۷,:qd$[D@o+w!y-:Oh&!hɴpU	
 xlެLP9޳P5ySV?3ˉ#FH~+㎴Y~hP5K׋~0!h2.$Έ	>cKp
`0oq}I$4N/f"A~q(B,-QldS3S4om7Hia1	sVDòysLk,(&caDn۔1+gPvga1l?OoPtTbt'rZ092cSvx.2F:)Hubqj>HqHEӏw(,xʹݸfqӅܿbvCGxkuqAj">pšP&5'D,};.ieslk4ݦSY<OсDݛY7MэEN8i<`"K6k6ix<F[SCh0-=p@(_N2evA㚹pLӗEjUs^s	r:V4q1I']>!Oд,!/yI>*>OԌ~eH3&k,#i\Z+Z>WXl[RXy+n5 j fT<	fOeNI5 {\iكXigr E6A}5r>,.rˣtX/oeu[[=4d'.l1؈J:D8=PC;4E	` c7"1ZO(  کGSPl7(p7u2TfKuw<S7ZT	*pQlmdt[#+6YxSϼ_
m5?U2Kፚ2OA]f.jF$Z`N ZV1ˬ}hۏC{q	K!2]e4!s9~2|!{!3Ym0R^H++K-Ep`&ǧ>S;P1UKd;9Wl\>\mųW5
\q=
x*n؍wX{Yw{ᢳ(A.PG(Χ{?@/۴wRsMn{93DyhPv3ׅ20EbRvJ'y>4#^UDP&̩֝bv
`WbwX%6cxt+K
J
"4_W|CAv/(xOYEq
.K
\f_WpAU 
+
[
2{2\o(xH!2
a
=P*BT *Di;
s
M2*4)T
pBnBs
e3*4 ^QhAB
W
-04o3*ToB'[
-5?(tAQAYxWAUAM! >T KA|P!?A)@
U1Q+&S*RL%j0l++%dZ(+)+3Jz+hz.,tM7-F 
xvs{K\22_aG؏Gx6TghÍȳst6]ڎh'G7E*OwĚYD/G~L1~b*OM3<bMi~eU9xt~mڅM7
	iz3ߛ[w6W?',\]|fބ[r|d	o')i~LDd~Lb/%GYʉ;GC3qQ>2EZ\jEBI Yf%-oYѼ"Un^-3O{y
T*eT*,:4Ub1sJ:m1lmz{	yI}^fˮ6'.ү!;]
#2\%BDהNعґ!@rHfZE@rN"j`NfNeT,]DMeiL-uB g 3Yf Sm a`vJ`fqcaƶ]AWJ8 ӧpXLG>Fʔ:,]ht3(K/K9]4?"MJ4i2h2h2h28@cF%51҄4]yVtAn1[uS1|=)1.ًp,DTXUjx\gx\gx\gx<7ݱ»YLWe3nK!LЭ(oPK     A xy    1   de/cardcontact/scdp/pkcs11/JsPKCS11Provider.classX	xT=7KHA@ AQHY	R `#2{֭VE"Z馠B*VŪ]jvovoJϽe2!wsٷ>
`B<:|6մ&IfѰbDƮiT?ƺy
fJlOE j(.P7kbF6Kl#fXx&LYd-]\8elzc"nf;\bܚjiTLC1L R/Mg̔ھJTU5%MyJ Cz
`svda2i#YKD:B'j$8jgL:kfԿCq:Nx	ىU3'TlZ$-N~@g={u)uuBuMHwT\z$U:1I@sF8%,5
pdh8C)0
.8F}4Lq!L23
[8Gʌ:1RL(ܠԕ|!P	阏#ˌ	{KM;j_:
u$E}Nk.9ffdhX0)MKU`
:HCԼ,,eZX&0h1U1^9l#e[B ,:.ravs6i*4o@ӻs\{Y.e'Z<>uX%M#HXٚhJX+gX!#2>nmi:3k5mw8bZ-&S{\֣$-
:QZG=U dvzN6klɵ@	a#J27WUBLM:6u)=u(>FdR֗9sBÕ:Yo.!͆D,URjZoJML$yt
|B'qOWJd|Z}䥮`݈4ܬc;na ^ckKnY$-f١bum<Rxb;qu|y-āS%Ʒ$ٍr_WZT뻅ý2<ؠU_}ڈYs[F.x::˴uKHUf v3nh秳NV\RէSM!ò6핋9۴؏myDwh*l;qPG'N$ugջjt3m3J8DG1
OIjĘP[߳\O
Ē֭N-KˍdDSʰsүv,
րYxLB[sˡ$׺^(Ut=r#nN0ş^t3jemu\L%6pOd^\5*/n'f|GҎ&JSbZ7VhiS]w	#|4kmɤl-0nFCֺ`wm@3+(6˚KR،[~ޞir2	M4(uF:.
X(a%%gZ;'Jؘ46{ǵ@
; V\gzlq 0+J;3i3	#{:=0QnJgmQ}:k&TFsU`V,%&Ԙec9|T870Ci7V@U:""t.f<(O]"]Vr0%D֧sx@H/sRMRv_R1BelEc&RznIt.}
޽p:v-4RiH2|2٢H&~`֥RfVL	|T=e&_,8ؠM^V4ߊPg1C1LPZY,oY~*|s||E1-,Ƿ+q=򛧴lO~:
WQTuuف@0r95u"r?*?aCbx;N?G<0F2
,~l"~*vDWpWg8ahF%p֎ @#иF܅{&Jӗ
`>\@czT,޸Sb,G[
b5n%Ra-X \FHCb?p'~(O3j3w+9a
 ~ȕ߆F/P^Q%?y<5.ѾzSF/O+|3g}T]Z6!Շz^
Eq
9:c^y"OoA\FpJUixEe~(]&)|C1
/w~'<A";~"S*vҨ
ᨿ;"AUuw ,MJ(I<Cjrxv~+;bNFʊ`cA;7oܼ=s3յg-˅3*g$cQthx]_IV
˩qIHd:l!)>5+4
5D,"쎘Á*
Cp(G{[v .o;z$|eΆރچW<Ot>!dSq.')_<9kLBA"p{)2:@2XJ<xۨux{$Oqg(<wHE
%w
Rz1czs!sy>]FPhUHWѕOoSQԷiS8^7 p;'obM&+@QN
ofV]ET+C&XQMzI@yv| Tvb}=ټ$P,K့_:g%d?jǾ&]NS.wl3#xd'5FUեɏK`\	e4LiKL_D2S1N'o"1yJ$5f.|a+98G[dw=`wv=`wΎ=L'
ԨJ!D؅!Q*7vJ-4Z#o4aщ婇QՁ_h*s{06RO]=(SAq8IPK     A rz'  h  0   de/cardcontact/scdp/pkcs11/JsPKCS11Session.class[	|T?7LA$$% !@b5 #!36wqq_p"[
jֺ/նnjU& ._?[{}l{9oƧ0 L*@3@#bK
	ǛbDA^YtL)m&Ar d@ ads)knjkMeMH<mkE0с3Hk)|e,^D)3  GH}{!MnZ[jB&BM荐]Q=Ck˪fЗtܫ3#MKír?l`?`qW[T&"K"1{E#RonUތ.+Jyh`AYmHt,:w>CUڴ>.qS@V5 n(&N*6@rW2h$r4rёZ䢎"/pjBy/v
ͬ,w76W<'S)՚0aRrRP6M8!3E1I/f(	$w2B.f,:9RhK	ҳ|ńJ2+L"Kr+CuUsC&LX%u'Ǧ#d͐.Ri*4<|-IqEŮ`9Mp1f;B7F"Kӽ\0[#zU8
!#IUpPQ^a"afޒ	Օ0aK =J4a"Np#cNDZPUJDW BKV(VI5uC=>JNڜuNvS>&!/)B(ΐԊʙSg}U>MsS$ő}[}%+.5Mlw.IqR=Xd"z`QCI61Ҹʇ7МUh28dK;[ݖUXH݊կStgIvBdx8U7Ep"dݗ8R>(>&SHBc)$!w2+)w
璓"[QMR	}_NNN/.ˊR-Lo))dbRt*M~Ef|"}?T	p	PR%QU*s~"%Bgno7EH`-E<bYUEc}.:	"UQ6;4m,/5ͪL؉0h+*fS}%#&NO#Dh캲
[)u53x)~ں]?;T,@P,p1e{RPab@ʘ=>=eqiTOABǅepm+mbdʩ2KujU5 ׅ7ЩU
0->0IJ8LͱeB̕YL#])w=8J,R..uY8ƚ8N[122d8!
{.Δ:T	cmfL/,%Td	rBoW5{=w$"Nyue3̪70kE ,N^VQ@2$9'83i5S]iYi&&πNL8[FkC=7 $ue8_:ԩYʹe)g	)5uC5ή]6%+/]3qd@"sES)V̙Eĥ)isLA#<l;EjbtN]!cr_{3bBKiG+d4ljEJt?$٫CH5ϙE5+	/#d$xb'z['wHNdd>;C^S(L+l}YsdQ&'<EA܋"e'% y8sזՕDȾ\::ٔwb_ٹħ.btʫܼpkNk["gQ--p<gqGkS~\x] G#ûDda##io%BXOn7Ayso2W܈XKҮ#mŖT,4-㯭M|TG;EfP
i^CU5n;6GbRcL֛Hcy5#.\ܶ8'=o_.]NbimeY\óǙ[U.R]Gk"<Zi.M DyDUU\Ė nE$%nY,[4@w-m	n0>`ˈ nj_ xzs~:5úُ|
bdt*{
|z_2	G޹y]c	/EVpb^4FD5+:%R#6K7j_R케r_bi8VWSr*xHҶ$Z_miq|'rOy&x	MGm,N0!5xImL4oy(~?5 ~Ԕu#%y$Y#}e"/xJ_% }X-W
7H򘽘m?9mJAo	}Cyºm
OK3p'2 fpLe5XX
m-iQS.NGzdUq,QkLz`vעgbq<T
QG2,QރL^3&=
8vk/g-'ȏҨ)6O+y#Csj}4Or^dCFvL

al8U.jQ?Ik0d#tSH/TNf6P^lp:_q
lOSV%.&,ӻuʻT2(DJ(ʼ?ڼ٤ +a$
?^|`{lH?
X]L	F:G:bZXj
P`!jB=UmgB{4.pΊpKY}haaβjU!ֱip6ͤ1QE
ZH	TI	/}jpV'%T

O4g	l]|fJh^0xUSLmQ5 ,^uͤ^Xkbcpa&x5Kl)W `U.ΙE)(0Ev,W!#[ݞuDup	~*VsFHJΰ	dK6 ;ElDBdfBOqV-DJFRd/}^/DJ:56%tOphrH,-L	G["N7.g(M-5kfS36_t*ښOȬ"<ۚ-sñ(KXrTGE$3@g%zQ(w_ׁ1yi)&ǝS\eЍ䪦3:f'(BEbkh|Ôڗ҅)xf9i{l$#9UoJBٗuD8PN:0K4zoFΊj'Y&;"Yl%
H척vqT`#އJj8YINhWY"dC/<]*f;m1,Nt-t/=l4`?תH+ݶVwT tldM1.PK ojަ*DNN4Pa	pE"CQ=4̅o呦<c<.&8-"XC9e|ӱ?TKz<gnJ[!5;@=M%\IqWżZ0J?=,($Tw^E=r1Urhm/,3=[)]7{uDJ,ON뒥iNtYww0ƩS3[FߥsH4EdvMI,NždhR]IQrੲ$#UDJ*]v޴M-mj_ncZkL|׻S;oER|}f$9nj(С"_?ɞry[sGK$gWͿoُc+8n -^poQO"
_2K>Cһ
!]	fϿN2݌$Oȅ%7P9^L7HAD!2Nd/6ɯh69/j#snuE۲oy1KYJF46mYGy%w]GEajTsFET54Rb&0  ].dWЌE ^?WҬwp$q7]E=iKba]MȮvO˴6-TzTS^ǮG=#3]{>v~8ҏ=ACt5Q^5aaAg蠳 )x|ЯE5`5.
TッA5>4hqY0S+9j
Qj\,T855`xNB+xA0
i!ILM:h	FB'K,t\2×[XfjrC$n05pqjg,t<vdjrgϴq:=Bǹ[xBK,29b߮k,Z9Nboě,xgl[-XzKﴘc]p9&4![-A Ks,}K4G--KMjQ,qxYyKs\{9{9H|=yXiiN޶4'
Z--G`cKs9X~ai,4_[Z|ciGwHMvYZ춴$"Lvg汴cai1g泴3˰3aiάpftfYv3ci8~v3˶ul?Kؙ
`Kљ

l̆[گوYmtf)іv3+Mάnqf-VgVdi9v3diYmwf[:8C-Yt*̙M33g6r.,67-9sf<˹Fp\Y`9gi9f6Zεa˹8r,X	l,rfQ+X̖Y5Sfmsf᱖sfa
:+x3[ij+x3;
	Vp3;
69S4xt3묜m]g\+x3;
ufZӜ:+x3q2+ǅ+$zTɾyIQ=FA&"(&Ͱ"%p",s 
1rxZ%h7WCq		 x qU8V\X8lx8φr8	oq34W4|NdpgpC<6g.dqp1UMp).c9W*%\1F뵁pipV7hpv$lЎ+4ب`v;BU{n^۵7_p
Z]zlsn}4F/S}6ܫa
[>,_.xPw]خ1yBxs<婆{Oy*xγ	/x=/K7eGw'x_Uo[yyLx{	
xw{}Gk,0
/>6'όm\_wKc|e_/[|gf>2'TmA0c'fy
z[knE|Meo3]e`_6^"*F-޾㰏l6bo1(NѰ
&޽Wl#ht3u@-tZGѲu_^u^3*xq⦫!H`P;u;n*2].'hxo0lKpۂl|6>ޫ7	j7Avw7lsa>dS+PtvP[C:^NXy8
qL0FG.cY`H8g1)fۨ]C4";ٯE6qFoiPG{j'tv?qoFMwC%\o
	 m쿻yү쿸44.
tjhINiA$͸]3QTR%yIs`7[߂l7A5y{de&CdT1r@o\FGC	J\B#PaFE<H*)`pmc2
V#&Fxh*rz0LbO=XZ}}&C!=+'?"<%tW*<wt'#wvA0F*ǑNAx2hũ0
גNFO#ѣ^2T].UFFa``a$x>~oC'>O+TdHTTss=P!*$=#&uI?3
^F~p%jµ0oUA. T+_T+_T+_T+_Ld ŞP ^)WR,o-,1 w@ E2S@"ov~\B̧=_P5}ew
sCxa}LI c<D\/г}]%l92?پ-Wv?326d=x
QMs8y_ޟ7BO^,0TLPAYTzzr>U-%l-Xw=F/R\|TMd/Q*ڬYofIRW6ɊeeGC+?|{g^ ư;c~bx
)b=B1EU?<rfm7ym<*U$Q<CכI1a}JL1#,ѳ)[~W+\OZ_|_}ߎ"c VS]<avߥO':a	_PPNP%,B*uU;<Va b|
8Jդ*b<p*7xެo ~d7ȿe1h_M!edow=@{N*`}L{a8aԉ~?c+
LO1uSt%rl;(aK2$mXQ23{@I@SZǃE%#$`#$BHI}IJ\̌ə32g[aS,_Da0pۏ0
&6l(ap,u,X.D6
Na;Ylea+ydcvdJ Nb;%<jIHFw4J{/$C&}D#}@I>8z9/eQ@_$# ox1zN>QOυ쳛.L`7ޖtTeOuFJOJwuuF9"3lDfHDgcc9p.UI@͂,2i u8 5 5  Bh`G@ͬu4&S{.;ߥF:֢.$D2kTjڨRF6*S9CBgsHoȠRBx"qM#;5s~X'A%|U2_5I^16n)ZQFDf$)` gl
Aj؄vܾ*'$٩tRXY}
'VN&JXYKX9fg4v6΁p00r1%K$*N]֓wٵc7
\Izyn'
A*B
A$&cC46qNXXZ,'/^@Zjrpt
d,BRR	2Hg$ރNﻯk9hbfk/MJI2ldH䬤H^3!!KJȹ LaQNcT'`9{lyYp={n^j.cxDM;;jv(P١PsBm
5籯j	ϋ)B;K)yg%姷JJHae'"ed|%_uRK=N0:tA,l9M
Fp2[!Y9g OЧg)<TĦ	p9y[>nQ#I"ɮ<Mпg_}vɨUΆ+j:r=(>~Sa?/

Ӹ}CI)eljмpzwi D;zK\Yn<	j6 U-y>N0}ᅵ0}G7Ț6 DsX/4X	YJrKMNةJ^΃Y+ [X
ob&ִ{mގA~W^9!O~gC?m?
m0Նxmi4m/y_|Y|Y|Y#}b[]8-P'߹7|OIV//*~~
ObʧҨ"L"L|0B^9*2fh3TQQQ1ZyƎИNoRСވ0l#HH$dR'1݇źLm` hav{:Iw=)/%%ݭVV[M`[av2Ti'Bv̧qv*,Nv΢x.%)O	JiH]GC痟3,L-jFWz^݄
ӎւE1 aP1K@	koh
iwѿB Cҷ<[7(6(6(6P)SpjQ4VK<T#KǣB~Jm)qqL{nN#=NIrSnA&7
8ysNݫ͹Sl !nQP|N>x|w`hA>TjucNU~0UaX!`aߘ9#nL/%muI]dn#5u{`n=tT~O,Ճ-Xgz_B Wa
wӦ/YȺ1n\эQ>_ BxOz0M׍ՍZOt4YL' "Ԓs9s99s98'joQǚ45' TZ{U?A/}9dm0P`X`PJ[b+++s*1
OxdZbz=~).n%K|,"/!4^J2JWPU,dy
%k)Y@FJ7Qm,ody+%ɲOk3<D)<E	OR> 93ssJ9))r9s>HId
;J(Y
{xLx`(YZ!3#?_V輲2?AndSI!.] >@~03> Fz	#!1{]-D@ed22_/̄l]6y xRf`.Ek[C 9P|/>ss<P|ϑs#>Ǌqs,!i~iPK     A ̚P  -
  4   de/cardcontact/scdp/pkcs11/PKCS11GenericObject.classU]SU~	YHC`ԶwJ[Z-X]RB$@!ָlV%d6oљz.o/>g7%2uy89ǫv
Txj5#^6j^/ǦF!ȴe[=KsffU쩅(:Щ 	KfНQ]p5Tm
kX]iןd>	p4Mu]ڬPaAIWzZ8Uc]ٟb~:8>1q\#K%7QІ.@pL5fxf;1\@鲐{̨0#9pWN[;)I>Y(f*-
Dj8UJT욫^!6%'eɹdBk,XGi^^I'Ŕ.m
r6JbjsZ"p:VJnNx1-ebqYͪ-esr2"#dFK̫\F%J9&)GZbV#1=y^!}|S]XDĂu-\?4YtbUݱ$n#m=z'gnk~pXnW ՞fLMT9Rd̅lN<o[Xlf:+Um&rLÞܘ̴p_wQ+GvFz
r֖u>q_VLҁhRwsΒ;{ฌy
n97 Fx8׉' E<]-{1'px65D89Z54<2>Q~y|n+yrB+^"-D9ߩ/P2/ѵ>p_xt{\{Ѿp|Eo־s')9O`5`}Zgzݢ^g2I/<x2q
hq,p>9-h{^+_l?W/!W*"3<^#^u}^PFPʼ~E~DmsP/آͱK>LZV,y+ PK     A               de/cardcontact/scdp/sss/ PK     A {?
  \  2   de/cardcontact/scdp/sss/JsShamirSharedSecret.classWkwc=FƉDdl ؔ0&$dfFI,/(mhЂ`Bhiޑd;j/k;Ws_>"+xTx5WpnʥF|^Ov2GTmC{,x_E@b>Ur|˲^vPiD&
PꬑV6S,8zIٙhʶfoX1->-#gd,CldW[A,R|a :O2z!V(:!|t;T8fDKUtDCH/dEhYE.ȼ^ȥ,:=gSs˷K ThGmV4b;ehY
ΰUe-6PΩX穐0gL]]*8戱@t)!d='(X"p̥IVΰhE\Cm
96Ov
EGDțQ,Sg:!_;.԰q?!36
IȔ,Kq^Gi9+tWQ .QpNWEHɖ5Gh*xЭGe8oߘ#
uؙ蘂tt?q͸RZ	6Ng51I2i>-bդ"-JSTN&BNs;OkT\^sK,S"yT	mh|sv"GS^S{Vz
p͞T$BFEVI
í`,m*eJMqd^̫0u$Ͳ!*WC<Iahz((
4(jō.2<61D[)5u?1p@8إ!Nb/\4,.cfŜa:Y9-ˉ
kcnWe1bqcdvЎaY'ϕlGoYbe"7p'RN

:W
i&"q{5|YD`lyk:ΉӉSX5<iu<_됯agɅc$CxTؙ5G_daz߰lkҗ)P6fe]ɧw2yhwͧ).^`}K	zR@Wޞb^Q;D6뚺kซF{mA-'jմ
q:X4/_u=M]@bgCU<h
ֿ/ēqx#y{q
"xPS,l5o<0J1(-hY!n0M1\ǮxŢ/CqD2dN%#oD~^3+l.ʔpF5ғ	BX^#3fzd<h2yjv~|*+"'Fҙdw|00dVCxYKgJ$-*ʳ<'{*^P񾂖9So}Œ16XV]#Lq/D
+8O {̒c~si999p);'/GkGw_ly/~4Vrclڈ}Ti:s|I,Ia_xIv
!;ÛXNaN*Zq/aͳTh?}kp1;:U')
>᰷y'=*Q້w#܄3J\p{Q4gy;
s_(I`~1VF'C)~&>1]lly1!5./TQ^]-k\pmǽWm$'y|LǴkA\Ϙvt .u`!e;%@Jyi.DK'ë}IlO$zyЫLb{/*B"Sر3kRUmµILrh^|Wn9L8~!9LK6Ux{饍"W?wx*<`ڈ8<" xx$L0 mW
P7.PU*dB,/˽M5ϯ~S8w!^I \
PNn[$****pP#~[
=ފRmHFU}B~"*~'HjwŻ勉^Z{IcxӍai	?;fp9ˀQ*ƱocާFoMD#ՙ[ܙȌ6aKRGc)#YG6FBc-Q%ΐGoOᡝ9*{ |+y鸟=@x]\GYcx	YJ IK|}Bsdx->Cp'
w*{eZ(dl?r'cRB۔5@4[ߟd3V&W
PTMU*
ʂE"nP2;?PK     A J1e  v  )   de/cardcontact/scdp/sss/SecretShare.classQ]KA=צi}j
=DAԃ!8úkQ 	z;D>ws̝ϯ !TidJC H
2g~CZd\3%wEw'ۿQtCJPqX?@IOMGQ'^GkŤOEtܓ);W:"~\ITw[Z]\{2
]yk/#1=3AOТhr&_J
E
̮`ٍ
/PXFM,X!ٛӰ
TچJ%`sa)보
G<c#8'4Xr/K6];PK     A 7|M}W    1   de/cardcontact/scdp/sss/ShamirSecretSharing.classWsJb	O
4qƶI\PD!@f-eҮZ;}ФI;db^_鴓v:i2ô^6s=;9{뗯Xס (05E'vYYO U^y>!JtrBً@L.Lo0Oٞ0֜Țn.؞ln$Q.ATp3Vֵ<݂E'OӎO
%Jֹq,2Q%sq/x=tlOX#f^,g3h{go`O^P'2r`1S`d<(1/Ȑ"Xi`Vfb5o:Nl`-Zڛk640mhX5JNqvJO pCw傎j[$!Y@C
N'uXO\nF\{P$:19,8U
tTJW)KfVlAlE=7T5Y$XΔ[XR`iy>PşYԯ/-~iѿo{bOྦྷɐ*rsD)<dCR!){rL3g%[KVKr[FulnSu
tHF9` ?
1lw\ Lɦ{f̳f5&ylV_o{XVV[PT]Fbp"V57-G!1>_дcak-IJdd\*V7R)c[F۲=y- L;]1n8<fn;eOf>SۦGg'w`~kLBM@VV~J֫t7])J$9}Gѯ!I2ְ])Y:ar̹]k_ͳJelU2i5;zX](q*n-H-S#8Sf촼A'W{lӟܦw-)$B8%fti6Ur"eW׆m41/?qFnU{jzMojUVyeq+#ul,}1L3RmZe?#YUg*9ZU#xd: Sbs(\8ǁi4lGFU	0A,s({
NjF$8c^d/a%s+s_2ȥu.
ESx0P2'h(
7WB[4BM+_Dk2Ӯ q<2ig铦bUa{0{q?c%?qB]x:9^.xQx!Άp(쥕
vXMQw9Ɣls$o*sA>FPsSOpI<O>'@/4>ÄI_rj(Y
]
]q+OUO\C;>"=䍹F iQI$[&BM`F	taT L`S_\jDWq	_ctE܃癀)?^x_V wӍt%`?tM55Cc
d dIh鏈-eڨ<>Ġ:=-Q>	ɠ|~IQ-zx%Rǂ2`LWcLW['p0S[P<BW">La.-ζik9B۴SS>]&6)ElKq~NeyǓxsqDy\ʌ\_o?Ż#ѮQ"}Fy*6|QL%<e|#WXgTix_S;V]eY(Ip$9HߥGȞª3ɧBױRUqqĶHT'ܷ7v
PZ}k?̮pE	2'AgVw1?}ROe)1?PK     A               de/cardcontact/scdp/utils/ PK     A Q'n  )  *   de/cardcontact/scdp/utils/ArgChecker.classmOU- UjmuRԧavݝYgg-%Qc/Bјj6}x0](%Mv3;{ N]u#C,d=+]XXRwF5,C`xΏ CwF(nɊ%LAq4 Y蹢^l)VQF4Qk4e`0RXr9YE
y!*xiX"2͔tK˫eE-X~G#O)D!֜+ ::RIxq!g$-гZy0C{cbQ6{%UWT}c@DkE]XFYT>"0$bZj]3MW3f?hr#J*bSe]qA\(*2q1u#f8䆮<
<CVJ+JfvbQU&gP`2./,:*ȹ9cXZMi@'wW7H,GvN++SrnSʎoV(,{24e~uR.8tiR8FIE*K؎~2xad8I9&yeX8F@7vw?exnݷ͇)=7:mxsS|@9?y2;%4^>ЋM0.I2jCNg] ŋ6%;oEֻAа7p.E<n)Myݞ4BAӛf8Ii;؉C0aes8oЏW _R߃VKa-FF~A*-w65w$<k Dw>LW\rCr CP
)4^my
sPT	0KKLcv
vm!~D]^%[0jـsG&|2QNJw.i7}gDJӗ8/q_UG]Ku.q8xcM
Mxv{M 'i`hzo:_;p~٠embzN'o06F\ѾUѳ)(зPK     A ĉ  :
  &   de/cardcontact/scdp/utils/Base64.classV[lgf/3{s<1^;Ifwf7ِ5618-_gݱq"CB%nM	Sj(\ ^/BHHx	덉(vs3|pŲ9{6uYO[n4^	pd\GB[FB&3--mŊL>db,yғKz
`9
9GYݜm>(PE%Ñq#HV8kW|hMpPB#ъzS?eV.Ȱ&bebR>+XzfL2op%-#gЊ} g5k°)-ʹt:p]>4	Uؽ)	asYּg|^h5rE{)@Q¢󺙑	'##CJ~,q\gNRQ@N*Khx8m6cPt
Jʕq	)	¡zx8.n>'r	}S?<Ø	#?cZ*KMH.eǵ!+J5o0#ΌecHjFip^W|>a/~c`*yc|maauOJE{H$<x2M_VZLӡ儸2L"<o
STyPHu:'
eDo&+#
i}9Eyݚep"m7ăFvB>, `QvL[+[vr+asŶ\na)ߵ;8v%a>=@v1eiꅁV,Ec8z)l.ğIL~^]m
UG5P6 >»Ofz&ԩ[Sto`"j7QRWoaDuHӶ:Q;:RcQn	BL=Bvt|9`G]!v1F48azcc
'p	'1I6x1lU*}*MTtUb(O=:*a-߇>uLH90BjcCj)7dPK9/L>Q5[%vsTfF_Gf~<8cf#bs,/}
J\UbV6GE'CxCE܃2݄םaq%Z-;_Э5QZ	6qaCzY8|5bI[AyjBـ|!]mà֭cPU]ݏ7qtٽ'γCǀj*6Jh]%+d	OA4ə!9fϳ5Mfϒ99 aB+K(%>e|ub>7xWk|eV!_o<%gb
'x߇$W_0Uc3hq˦(jJT(:#&noly\rDz!6ݺg<-7mp}k	%eE%lBO,,ZbuU]{E^KUCAZU^i`X	&>4A@JE<bϿRm>(M7y67	ط+Uέ{Z'o%:>
½Ax&-c6I)^l.~iS;C	0O$I8`Bد-|ŘM/$<yNSMr/%
4azQo_Ewvx2<G,Q]t~]"-{kݿcJgHl0͖rQ.PK     A }{    *   de/cardcontact/scdp/utils/ByteBuffer.classWksSE~9m.MCZh=)rkɭP(H)JKP-EirҤBe_m
3ttw?fsfڱؙl>ozLyPؖ2cI#J沖bdj&6k3eNLyl: a\p;azyXbаa
W@5ERNZS"hA+u3O8`| 4}<oe^$MZ5cf/`D
,sZm|273Vg/L[˯ٔ9lpx.iX\փmpsA/B>3[͛#U
D9kU֍{;KA@VHg2 *3./vW˦(z~ǜqXOS߇N{q O
dYcܐOg'LsyV('CNE>?K4g05ONSxzsI#3l[ujT\]bj84Lqꥉǔᆂ5%M>ǳ0vja*qgּ4~Uzj$0D8N3*ouIUX[CP&MKUS(d4WkBD~gb	r$-?/9UtY[Rب(fa$r \`Z3$95em<.xkC!6>nݓ_i3߃RN9H9uaZ0d:qFؖ=w
;\.#`4tNՇf-E-+$a3xڪx"܊,RFꀣ\/
8^f%"8(O8|~.ݲd6NW`yl,WX,X
Xe]+aX+`k)WN7Omv_@XpNGccKCrnF{*57o"˴%i-zEbs0q'~DgCX:'hKMYq`=t~#S>vYJo"QG#@P6`ޥS? [|hAx^J/Vl}2
5^'d=2V 	um5"\KMő6ITq).2*6ۆw·!h[_C`o.h)Ҙ fS=ưhmCׯ^z
znI?Od+HUJ^T_-Ačh҉7eک7)&	9­MWJo
RT>Hwӝ,BBZ1Q|ztZ".kNRh}[P-cJ'kJW4ώv_Gѫ5kOiozZ5h⳿7P~~~_S^]Yb3\b+]c;ىn;DDHj%N%e\RdIK{eBJ#6RK0	GOE,%O8@˅<,rb+!l1"Zu5(wHik[V8E8[Q-	?lIE`St]4!MW켍v}54H:,ge #.#.Ul#n{IT {%JS19qgLQ PK     A ѡ7  q  ,   de/cardcontact/scdp/utils/GPAPDUTracer.classW[WW	(P!E!M
B$3̀ЋZkvU>/]L$H"X{>T%-YiA
%m&|~jV-qUS>Wc/jlehO*aY2YlM9
[j|q̐d UӺH?Q3j6:kEl
=>o
_.bhrt$JYrf"^40GS"vU*
˺-ȨGLFҒSb
,YI:>4# ED+v3z̺^UsA0ԤEuz+7i!89X{.` :$~Ul<[%4V]EC!ALBYPh|8v!Qj"-؏8
*m.ef31]9"(1lUM[&M$ɧ21Q8GZf]qN─~hZ)IxkZQ3|eH#eF"iqqݛaܰ!9	7%TxX"jg1+./%Fx	/	,beŉ].T㘾ZGeT^(|Cx6FҒ1+ȦK" S
ꚩXYsF)Ϛ@  ȑkQ	~D
i[%"Vh%i) d2??ꍲF-J$jJpce)=.*wVJ,z0TsO]~J>TZf@L'l/Uy[8#qSzbNŜ`H<U"4rQٔaԯ	>*ӕMVyԁFBLU>-%{@-)VJO^|F-1@`5|×JלJڂ>8UBإ4s٘pPM+&BFJARbda^ETJGUKqJMKO/1&.!)cx[	ftN'7"f߫w}īt5MMׅ~
uGM>?b&]I4tjKj#h5Sy, 7'n;t>znp3U>{鷵vzl.pt-?n뇻Lm`-m8+_B
L"O+[l^hxNT$/\z##ъ>aUzZF=:@C21i6{i#F<]+6saPx\v< 2Do$͖+U-q
' !F`@=D^71&nksss99mcz#o+[xhgb'w@"IY4'<Ha2w'j!Z|;>5Q+P"
H+tAܤ:E}n;Hȣ0D$=D>|xrU	NȦ^9omWЎsQ??PK     A 2`W   >  /   de/cardcontact/scdp/utils/MutableTreeNode.class}
@E]Y--(fȚf(q"(Z3̝z0ACI`ʆ:N:E&̩%Z%!yN*WҨ(ׇi&0XL.ߘ@-SN`,ўŖIT%x~Jn,̏NM2i^P+|@?)AuF}4^OڜK<PK     A               de/cardcontact/scdp/xmldsig/ PK     A /S2  E?  0   de/cardcontact/scdp/xmldsig/JsXMLSignature.class[	S?Myc`:{f 
 #32=73L gkՊKmmkmkj[u_l֮.RCB~Hr߹{lo}I"Z\"Td'ӬH;8
ƐǂфG~C;Lɱ8&2ntFN\:T0~#G	ßw@(yώo	`dr^3ffS,LCe3OjTgOӨֹccJn1uX&"^^~#H#.3	h4۟HD}^]vi{_;Ż-sÍbyN<q:	L76"Q3ôZ테p'G,նvnh".Ա~mkڻht*}ڦ`-20`q@{훓5g(464BܑMgS"\f
7wY۾Bs}{#]ۼ(ifxJx>
@e=jTSv#n
f&֯h6@--5kKK|bY9yFj.;<?lco00c _dӹ^#S}eD֪!gVpu8n22Fw0.⢥tJg괌3M)6<fF#D{,kGyF J΢ULq}_[i/ց"Emy\ÊYg봚:4bDbp`pŚ.sTZSaKfp<a 2O{'!*ޤf{S俧BRhy:O0gqYk
s
9=tV)bvުT].$NFte0d
!Ǭ<ȳm)b'nߠN;h'週ӄ7%ȇ3a{i@0E*Ȯe:ޟ;9~3*}l'	Лrq5 @G[w?Qڣt	m"a]"	/F@?tJ郂}IKD,f?t%*ηFjNF [؉J0LJE{:]+dpac]f<nnb^yX]WЍ:}>!D;T$eEό'Rӧi2ohE\AzOΞ 
~eQboL:C(onO4tm*)nԒCї@߬6b}N쉊se{,4}~Y@-ݧ|=qFUAq~#c^4(*lF}NTՉT)%cK`\)- 01m(';LNqFnU'[j!kYm0j7QUzug&}ChY![[D*}ԂVͳ(*}iF~LǦw~_xg,n4Z=>"135INzڜ(tӤ?W9(}}LiR*ΤLqazQD-_,2n.z~k+0/7>7`b 厯)Q;T#n):^Ew!f
?G^WFA!_tz,7dƂ|SA11&Mܽ4fN
wEo;*Cwh25bq3K.`L6wes[ŢtELǣ\g CztQ9^,٪wGE`.fU5v2^'0y1ip
T
/5
Dҳ[Qzq:B=H"9.\):ySEn3f$D9.Uqpq*y{IPnٵ"n3&|*Or8 M%U>
H@|:Z Y]B`"Oy:@TLPRlBY:p- [V>I1g&I)L
h)$+_W$9,G&9!#JbyM8Ƀrn*y.(EO}k\Jhuq/@?!GM\3;0&tnaхj\|gTɘf֓'RJĽI)EݪqlԴCMPZVS
|4tj]|哧EZTσ>ZvAj;l?Nf:I)\A_W9VQ2%NRJn$)UyӨTf#avXU'g"ܤfނx:7b7wsy:| U_`lDkYNq$cv:,2*jB<Bq"d&"a+NsԯkDP$컨TSPNC<`DBɲhrb"Q/Bu̱G$21ILCS7l)H/!Rn؀l2/ėYo􉪲iqM#S4V9_e:RDvrZq\bV\l,}!47	B:q^jދU߀88^`
^ |] :0a0<h	L4BqrODJrHWʥUOZdѾf0U$3*߂ƅ?43=}ږ(v"Vu;0Zq>HTuMw*NydQK1Kx-Ŭ3メ/vw#Egl
*^Ou
?t1^uL]ZwvZ޳d?ΏGcɇ
XmD輡cSdd?K0<_-O,|qѪvi+ܬ
Gfl8-Dh%VN[Ȉ-i]xG8mDK:.@22J97*elg(hcqiؠ;M<'VmZ[.d>s*zϺ"xf""xtf2nLvU>kL=Z7ęJwb//@mTvˈJ0ʿF<(xM++.X;@o	z?6~㭴D& %l+/(~L.uˋ2PI sA@S!y3DSqpʩM"sbmBEՇ8eXa>"[b&ZsDcAy(;tQRD)Y:pdʕ,n @uyi[*LMӭDoo0&;ô#(ٱ;XHFL`޳lsSRO ő
@(Q9^TYT,33/O2g-ʄdE#=edmy"Z\䃋4q`-FE
HXjcܟaʄBT"5aL neVHEY3[XX`'zBq>XXT7U9ǝUf!rNNאdeoYdꋯY%!vwGbJ$.tt؛k_.bT$<(:/U*P.m/Lny$@jD-5eFŔjQVSКLJ#@G3j֔N&CjI}̓RIۍ%,Z1b9TkJIuH	]x 0àPֻ
FU٤e3KPdO֯A/Ihid8ʨ艟/LPi?ϩ=E
E?eUe[EEUPŜeELF
9h"?ļ>@q2Fn5u{:"wrA7$
b[s|#1O\Ǐ{Bɕ%
nQS|OӮ$Fby=tgM-KNuɩ}>ջGǔz=ɺ>ͺ8=ͺ᮵.ݍօb]qϳ.F'⦫h}^}
ͧQZE9tڒoHor1`o;vobw[Hs%
Qe0u<K8DږgV$7
hqx앎|G}ƂrcPh!n)6L	yô{.}.uG|.	0}q=x/JZGcyV(v(@wB&}PWh;7@%4>	p<D7WA}X*3
D;]a]߃೓?:|!TZ?˗ÕS(?!%>_0X-]/^6%F9-#M*JY҅x':F^r忩Rc{xP`TÿŦS`w2M\ڀʏͷQeW.ë<xk^>|}4}E|wN|ToeE} /Ԇ'>i-*
>ly@о>G<ZS|򸞦n*&q07]}Ǿ^4р7@ܡ}9b2G)oAY{t*I~>ܽ@i*Hk间^2z>DܿЍ0Eo{oӳޥ`U7V:J"~AGeWBO4H2?B_?GiĩSlWӳSk_d?gv6~v-~cH}#dN3$:5~+=I?Jk=ˁ?MSGV?}w,H&T`S@
|785T6S&aQXNԊJ<)80M}*=x'okL>xīmk-sW|s?
ֽ)GYm~+8=.`|~y^RyZGPSohvcLAh&OD\M|:i gQ;e/=-t Σgy}O^%'>-z+<y+1`5i@֤YLV Bd]LMm0a@Ҩtzaޤ\3HSlC(ρ53&ë#ҋcɩX]$%Š`=	R]aAC-|)<y&a-DTiA==0FC-6`\`|hB$-Z9KOk9H=^RHycҾΤ}E<e_\%틫}q/mKڷJکJ:>[Tۤ!1j҂drN9);p
T Aul#ҚPb*8(f58UfҫtAy{-|=4y<FUX|f|p1ZZҒrbay"Ѝ]4RAǈ
jZnvn29vՀ0Lk<ļ~?
1veq@۱/Rd)QgJV1F')Et)NY|+J%=AOb\8C#\(FK&}Tok<L.Q34]\Md)	Pz|yHC
<3}vQCuBJ3er|i &Y0ԍd3Z~"mEL9L,^Ǖ]Xq+c`I4mvC۽%JQ)hJ_T'U ExGD}`aCܴc{]i?8p0/j8Q;r
^I([5g4|i}NPu>Fr}t\a.ϨaTx9PDe!G44~ V~ ǿ@Hybe2]Ϳ
SZ{ej+Â"NU{D,a*S ޱPNSids0`+u)SivjS+3 
4GHϣzFEKS:8Ai>.#ҤxȪ.4+5kNp@}c8>2/aB1znz_ _\l|\l
s!2񵲹)4_R#JF!@Etdo
~Q I$I1
je9&TߤW@hPYF2ȿR!
P	MWҬB?NOa.b5DTtw0Nl߶Ehn?ߵa?{&
Dq*B`r*\zgYJX1LS(K14Y9C9rJҖ>V,uB\B:[_!}]Y)CC!VΒ}|k9Y٪OPK     A            	          A    META-INF/PK     A $j=   S              )   META-INF/MANIFEST.MFPK     A                      A   de/PK     A                      A   de/cardcontact/PK     A                      A   de/cardcontact/scdp/PK     A                      A  de/cardcontact/scdp/cardsim/PK     A m3    9           Z  de/cardcontact/scdp/cardsim/CardSimulationException.classPK     A Bv  i  G             de/cardcontact/scdp/cardsim/ICardSimulationAdapter$LifeCycleState.classPK     A ۫  
  8           A  de/cardcontact/scdp/cardsim/ICardSimulationAdapter.classPK     A 0VA-y  :  :             de/cardcontact/scdp/cardsim/ICardSimulator$ResetType.classPK     A 3     0           y
  de/cardcontact/scdp/cardsim/ICardSimulator.classPK     A \G
  v  9             de/cardcontact/scdp/cardsim/JsCardSimulationAdapter.classPK     A            !          A(  de/cardcontact/scdp/cardsim/jcop/PK     A i8  N  >           i  de/cardcontact/scdp/cardsim/jcop/JCOPSimulationAdapter$1.classPK     A rm
  1  <             de/cardcontact/scdp/cardsim/jcop/JCOPSimulationAdapter.classPK     A 2R    =           %  de/cardcontact/scdp/cardsim/jcop/JCOPSimulationProtocol.classPK     A XQD    F           q,  de/cardcontact/scdp/cardsim/jcop/JCOPSimulationProtocolException.classPK     A                      A.  de/cardcontact/scdp/cms/PK     A s.I
    0           Q.  de/cardcontact/scdp/cms/JsCMSEnvelopedData.classPK     A   6  ,           8  de/cardcontact/scdp/cms/JsCMSGenerator.classPK     A  X;  3?  -           CO  de/cardcontact/scdp/cms/JsCMSSignedData.classPK     A            !          Ag  de/cardcontact/scdp/cryptoscript/PK     A m;   /  6           
h  de/cardcontact/scdp/cryptoscript/CryptoInterface.classPK     A |w  '  5           :i  de/cardcontact/scdp/cryptoscript/JsCryptoScript.classPK     A l    .           \z  de/cardcontact/scdp/cryptoscript/OpCodes.classPK     A &n
  !  8           -|  de/cardcontact/scdp/cryptoscript/ScriptInterpreter.classPK     A                      A  de/cardcontact/scdp/engine/PK     A >hg	    5           ,  de/cardcontact/scdp/engine/BaseCommandProcessor.classPK     A L;.	  Y  1           U  de/cardcontact/scdp/engine/CommandProcessor.classPK     A 9  C  1             de/cardcontact/scdp/engine/Engine$MyFactory.classPK     A ȑ8  7  '           3  de/cardcontact/scdp/engine/Engine.classPK     A Ud    /             de/cardcontact/scdp/engine/ExecuteRequest.classPK     A =   P  4           Ⱥ  de/cardcontact/scdp/engine/FileResourceContext.classPK     A nC7  -  6             de/cardcontact/scdp/engine/FileResourceContextFS.classPK     A J7  ,  4             de/cardcontact/scdp/engine/FileResourceLocator.classPK     A 0(0  
  6           t  de/cardcontact/scdp/engine/FileResourceLocatorFS.classPK     A 95    5             de/cardcontact/scdp/engine/GPTracerSLFAdapter$1.classPK     A Ers&  0  3             de/cardcontact/scdp/engine/GPTracerSLFAdapter.classPK     A ;?    3             de/cardcontact/scdp/engine/LogbackInitializer.classPK     A   O
  2           #  de/cardcontact/scdp/engine/PrintStreamTracer.classPK     A @1q    2           I  de/cardcontact/scdp/engine/SCDPErrorReporter.classPK     A Muϗ      9           
  de/cardcontact/scdp/engine/ScriptCompletionListener.classPK     A 0?    /             de/cardcontact/scdp/engine/ScriptExecutor.classPK     A uu 
    -              de/cardcontact/scdp/engine/ScriptRunner.classPK     A   
  &           k  de/cardcontact/scdp/engine/Shell.classPK     A :0  /	  ,             de/cardcontact/scdp/engine/VersionInfo.classPK     A                      A  de/cardcontact/scdp/gp/PK     A `Υ  i=  (             de/cardcontact/scdp/gp/Application.classPK     A a    /             de/cardcontact/scdp/gp/ApplicationFactory.classPK     A 
$  S  '           $ de/cardcontact/scdp/gp/ByteString.classPK     A 8+&  X  !           CI de/cardcontact/scdp/gp/Card.classPK     A C2    5           o de/cardcontact/scdp/gp/CardEventListenerAdapter.classPK     A nY  X  *           2v de/cardcontact/scdp/gp/GPApplication.classPK     A 3,$  o7  "           y de/cardcontact/scdp/gp/GPAtr.classPK     A b  0'  )           7 de/cardcontact/scdp/gp/GPByteBuffer.classPK     A q"  &  %            de/cardcontact/scdp/gp/GPCrypto.classPK     A m
    $            de/cardcontact/scdp/gp/GPError.classPK     A g    -            de/cardcontact/scdp/gp/GPErrorException.classPK     A 	=J0  k  "            de/cardcontact/scdp/gp/GPKey.classPK     A ^f   0  $           / de/cardcontact/scdp/gp/GPScp02.classPK     A 6m  G5  $           m de/cardcontact/scdp/gp/GPScp03.classPK     A   {  (           # de/cardcontact/scdp/gp/GPScpKeySet.classPK     A -    ,           ) de/cardcontact/scdp/gp/GPSecureChannel.classPK     A b  G  -           - de/cardcontact/scdp/gp/GPSecurityDomain.classPK     A ˃  W&  %           J de/cardcontact/scdp/gp/GPSystem.classPK     A 0"	  k  "           [ de/cardcontact/scdp/gp/GPTLV.classPK     A \  Z&  &           d de/cardcontact/scdp/gp/GPTLVList.classPK     A &nJ  {  &           #u de/cardcontact/scdp/gp/GPTLV_DGI.classPK     A   ,  &           x de/cardcontact/scdp/gp/GPTLV_EMV.classPK     A     *           | de/cardcontact/scdp/gp/GPTLV_Generic.classPK     A Ӽ    &             de/cardcontact/scdp/gp/GPTLV_L16.classPK     A LR~W  *  "            de/cardcontact/scdp/gp/GPXML.classPK     A CC    :            de/cardcontact/scdp/gp/GPXMLApplicationProfileParser.classPK     A B    9            de/cardcontact/scdp/gp/GPXMLParser$ArrayElementSpec.classPK     A 	  +  (            de/cardcontact/scdp/gp/GPXMLParser.classPK     A Q#    1           گ de/cardcontact/scdp/gp/TLVDataSizeException.classPK     A {z    -            de/cardcontact/scdp/gp/TagSizeException.classPK     A                      An de/cardcontact/scdp/gp/crypto/PK     A r~T    2            de/cardcontact/scdp/gp/crypto/AbstractCrypto.classPK     A 0~'  P  ,           P de/cardcontact/scdp/gp/crypto/CryptoBC.classPK     A )    6           E de/cardcontact/scdp/gp/crypto/CryptoSmartCardHSM.classPK     A =   
  +           < de/cardcontact/scdp/gp/crypto/ICrypto.classPK     A |
,P  Q  ;            de/cardcontact/scdp/gp/crypto/PasswordCallbackHandler.classPK     A                      A. de/cardcontact/scdp/js/PK     A bI  (  &           e de/cardcontact/scdp/js/GPRuntime.classPK     A ǻ  4  ,            de/cardcontact/scdp/js/GPRuntimeHelper.classPK     A _(  p  .            de/cardcontact/scdp/js/GPTracer$LogLevel.classPK     A a  <  %            de/cardcontact/scdp/js/GPTracer.classPK     A ^,ܸ  W4  #           T  de/cardcontact/scdp/js/JsASN1.classPK     A ,  a  "           M de/cardcontact/scdp/js/JsCRL.classPK     A %U@$  Z  '            de/cardcontact/scdp/js/JsCardFile.classPK     A /=     /           -C de/cardcontact/scdp/js/JsIsoSecureChannel.classPK     A V7  -  '           O de/cardcontact/scdp/js/JsKeyStore.classPK     A ع O    #           3d de/cardcontact/scdp/js/JsLDAP.classPK     A ҬD  z#  (           p de/cardcontact/scdp/js/JsOCSPQuery.classPK     A l     -            de/cardcontact/scdp/js/JsSOAPConnection.classPK     A k     %            de/cardcontact/scdp/js/JsScript.classPK     A N>    (           ? de/cardcontact/scdp/js/JsTLSSocket.classPK     A <#
  l  #           â de/cardcontact/scdp/js/JsTask.classPK     A mlt   H  ,            de/cardcontact/scdp/js/JsURLConnection.classPK     A 
XT    *            de/cardcontact/scdp/js/JsWrapFactory.classPK     A >)  6  #           M de/cardcontact/scdp/js/JsX509.classPK     A [F  	  ;           P de/cardcontact/scdp/js/SecureChannelCredentialWrapper.classPK     A     7            de/cardcontact/scdp/js/URLConnectionStreamHandler.classPK     A                      A de/cardcontact/scdp/ocsp/PK     A o5í  2  (            de/cardcontact/scdp/ocsp/OCSPQuery.classPK     A 1:g!    1            de/cardcontact/scdp/ocsp/OCSPQueryException.classPK     A                      AJ de/cardcontact/scdp/pkcs11/PK     A iy  '  /            de/cardcontact/scdp/pkcs11/JsPKCS11Object.classPK     A xy    1            de/cardcontact/scdp/pkcs11/JsPKCS11Provider.classPK     A rz'  h  0           ' de/cardcontact/scdp/pkcs11/JsPKCS11Session.classPK     A ̚P  -
  4           O de/cardcontact/scdp/pkcs11/PKCS11GenericObject.classPK     A                      AET de/cardcontact/scdp/sss/PK     A {?
  \  2           }T de/cardcontact/scdp/sss/JsShamirSharedSecret.classPK     A J1e  v  )           _ de/cardcontact/scdp/sss/SecretShare.classPK     A 7|M}W    1           ` de/cardcontact/scdp/sss/ShamirSecretSharing.classPK     A                      A^i de/cardcontact/scdp/utils/PK     A Q'n  )  *           i de/cardcontact/scdp/utils/ArgChecker.classPK     A ĉ  :
  &           n de/cardcontact/scdp/utils/Base64.classPK     A }{    *           ^v de/cardcontact/scdp/utils/ByteBuffer.classPK     A ѡ7  q  ,           p} de/cardcontact/scdp/utils/GPAPDUTracer.classPK     A 2`W   >  /            de/cardcontact/scdp/utils/MutableTreeNode.classPK     A                      A de/cardcontact/scdp/xmldsig/PK     A /S2  E?  0           ? de/cardcontact/scdp/xmldsig/JsXMLSignature.classPK    | | *     PK     A            	   META-INF/ PK     A #;   R      META-INF/MANIFEST.MFMLK-.
K-*ϳR03
.HMLLN,!@r9y%h\\ PK     A               de/ PK     A               de/cardcontact/ PK     A               de/cardcontact/opencard/ PK     A               de/cardcontact/opencard/ui/ PK     A            (   de/cardcontact/opencard/ui/smartcardhsm/ PK     A ؑ  7  I   de/cardcontact/opencard/ui/smartcardhsm/ChangeReferenceDataDialog$1.classSn@=]Ӥ(-%@JXUER=M27,RG!8< `ss}9|!v|)idp=}OI=S!mƁ66F#>r B4ፀjPeȘa\gfrgQp a?.W	i@j|S#4(gTy,Ef&PbMIkwKǒyF@ܧ=EcV BxJR-^"2-Q[NzJz8bhU-VCHэGB!e;aƿ)+"Cs˻{g㚏IEKǜI?nZ?邉?DzbV`ؘhJ/T2beT wK=QapR
]IFa(GJ%;Fѻd'k3'd?&57h̀봮Np@⥓MTDnjadN>_Bh| wۄB9MC5,LN'PK     A 	;ϵ  /  I   de/cardcontact/opencard/ui/smartcardhsm/ChangeReferenceDataDialog$2.classS[OAz
%q
/>`HH/ZSFMIxvvvw%?xfT7s3|gΜ?.x<0EA/\qPwҍF<4F#>j ^RhpzPeȘʏ33^9(8(aXϸc3{(OfaR籀,Jp03W"ģcsXǣ(֡ߒ"
e:n0MOeX	۱LK{㨭&$Zp>C}ؑJtǣcE;Am Cs˻{!	jA/IO96+6i
&~]$+==ђZQ_&T#+XFVԞg:2N[)jEÓ9b/&5IHI-0_Nru +o%rpm99|?dh|
`w	!rNѨ<@5,LN'PK     A '   D  I   de/cardcontact/opencard/ui/smartcardhsm/ChangeReferenceDataDialog$3.classSn@=]Ӧ!(- I%JUP*ړd3SI͒_B* `@|ã*|3gΝǧ `',frFieg\},ݩt	Mmgb(BMnxS@*3Q>uύW@,
0l'qŉP=ϏRIϰX
XJE(1CI5pԊ8u-7nK5ry:R>/Rk.
Rr(^OEdڛF5-%Cn6`H5/VRtr$(RW{<Pbʊ:=SaOIFЫq#N|ujBltSPx'9=BR^#eFApetVpҟ!#08DHKa&*GŊE;S-л)'oW
`ȾKj̀
k*\&Dd4-Rd-l\<\Hog?n!PI;S4?wQKVQOpfPK     A [dy    G   de/cardcontact/opencard/ui/smartcardhsm/ChangeReferenceDataDialog.classY
|TՕL0<&E$  2I 0$1	
L^0B_(~]+VfZu~۵~v]~V{}o&3Ʉ_{s=9t_ Eh0kqŌx_{	뭸eo$x4
ӡ6&CA3.CCV(5`$mПYjI0ۨX0mЊGxOF٠DL"%	"ʤ!ۊZTb(5k=1ƏRBYЀ73n-;f0s4q>. \0޼ϴgC#;Ě$p1SJ'07ePje,1jɑpb(nIQHbQ1gZBIFHTR2qX"zJUۥeWAv҈I[C:V	,5#0??f2HN&}-V\\Kbc#1P*9J
shB"FC2XAzMQܨ*lbϢCIFͻHΎLވWwîu:E4!)5~la3{+Өcqd΢a[8ˋaۡIۙ`0ll1RD2c=4Uo#x;ut`!0,Gdj-
:Tc>!N6[sȈY=!N@=L[[DrD3iY?0h8KF3[5/K~PL;# x
S#g bHH<	c%'ň :69
:	^JF{^jۡ-I'b$ zAZI͸#\]=qSdnq;l9`"FfJU>QܹS]tԕ+B>.
Y{t+z #>}>g=ɳo+ިb^jxp~Z$>!3*Bkd(e&YQ3dsxkG6˲żd"%O'a|Fcٲހ.=1|qǧ\/uJ1
B+\:N3[[;;[#ͻ$ϞVns:~-%O+Zm9Nóy݁_kyHHČMm-ͭ;c?#4sil[5m2)gu9^+Td
Ո5%|QԪLR1U䰪Ws
ʩJk57J%EkZrY u	S&Q՜kr8xObA<X)یK^!6TM} Xx]?mkx}SR,cذ1j'D{:U8anBu NsaĆѬ?'7r+'_:~fV<;F1tXW6ُw&	:~_p3Gl
+NB-]<"]hۤ ?~7E'O4J$私Hv s
*",*"%F:iToN&9z!#{+ 7Gso7ÊqwL:ШD/*`{ZxH>]:*թfsnH$;$7ֲDnAFt>+dSo"|fE&EiN|f2us]LZW^#}P:-|tNMu@|>|,]~ZU'@AШR*ZVB1Y;+>xgVG
pi%S;V\UtFuZCk3=a2;AқH6<+~-t])G=cye9j$.5@Tz6\yÉ$gHliJD
1S}1k%GtB[9HsoT5
vr)7/9ⷃ׊Ŝ
3HyEVVڊ?m?Rc9@;C]:μp# :9e.14t0]<3Mdt	_Oau23%dEHZ%z~KG-4,Tޕ|>N0Gl|МlNY0p~1z`1lרG~hÙ/=|x+:½`vI_to`KRATyT9fzus&nԬx.sޢyr	+`3ծZz}6s
ќ9L9y;`ʳZabјYM! .P+E<̔ 1=S8ơ6S{?:,滻w:t8.5.vǥX厫rw
Xܱƻnw;K{wW#j3@E&9w"xrV(ӘQz^e(W|_K|Wr5_早ʳX)gP=
Y)%5dH["砝գh;cWg{WiU /ps9s˷-ռv@n<}x˰Z֠;"U_Si>Oن;~,bgVRx2iDYdSy>Ý\ƍYq.wޮY#L:2ADhaWDE2muEdޕ/rI⸄QGJG\)yDGb:})HB{4>}Okxnv$DqʷLgOW+۝ϟrwW&D<6g:=۪p#I"+Y}jET383Ÿ<Gre<
eD	)x;F7*\q7cF<y܂1ʏYv;N(4w*ո^ǹӹZQڃ~|l|ntx§q<DpħKG;xc>PAjeRz5^b:ZH<g%%/}6ŧ~|l΍fr9$ofq^>W;u;UH?<ͳL
t
钷Va]ooZ]D1pu͜gH>t	4o	H+]~@>\,.IRTvg&]jyxbo#F_J&׻|M-÷|[؋~P~]DXN-h(zUꏳ7O;g/t(H"K9%sNg#z#q."=9<eD\1@hrr8en/_`'w?/_"_a
~0E~wT7R1$ϙ8/'h:|y:'.dUA:EʪQ<8T˞|gPfI-D]]?cx+t9_M+N4WB*2hN?|WUʽ1*.*/NEW<ix*RLeḀJ,*,XE+."uZ1"kj=1\9,`-h
_:ǝY
|u]RpfKeo/K8UL6Υ5:հc뱐^:I7Mnp[[nwvq|fI]-Ǹ 5[؂lA#*hVKf-	ɗ
%q(}U5Fvъ1
-OM+!kǨFm˽\,h'czy\Ll\F]G"B2Dl,,;[et'녟KOm1ExV>(FQeGnH27cǔ^*7Mg=PK     A 1  P  ?   de/cardcontact/opencard/ui/smartcardhsm/DefaultCHVManager.classXkpW^+)kGVhZ%U Dnĉ4%%ǒJ.i׫VvL
mPGS@SJ 2;_;?B9w%6	{=|眻; x"p1%)\pjnQMװPO7<"vAd8YP²dd]3%EpM
W˒aAZǔyV2IIS*S6%X+>K0Md)J4OOG!gkuC	QV5悙 !C/o>4pne]#`	%hMC"gz3xe{-WHn㚬ÍV
/ ùvnr E2Ds@ڔZRh7bFfJ8|eI"[F֘aj;xă>pTDSw ;N%1x;ߑIRәT,.H-Wie^1HBISNT	'1p"xm[ps"N*SWu;WfBwCu7Έ(媼9J91qug2I$D"dq$.):2TeC=y	_QRR岤Fb3\,)")2в*C,1[5)}0p݈mI:7"is"C +4tm:Թn<.C8O2]!*%*$"$^at"}4 3D~MJhKRI-D
h&_T:ɠZ
ΕtRb"we-ͦ*!q+cZR
QX	DA632ȥ^xJJ{wa<;c%X-I`=jz79('~z<o$ .XFݸD听nK~DGp"JoY>9H*˴=s=/Sr
a!qRx2jJVS4WRV2T>nN:̢JnteҺL:ByTʕd1,E]iUHvnQ(܊VԬNUMʒw-"2UmDzFevP/LJ"roIm%oUzo
^iAH@UmV\\jDnǼiʘw[C0	MS+\
wsݠyҢq
9A96~7'}IrN|~?G蹻w~B'wC'4
_ė 덛%he|rW~Rk͞!7F6rt,WFit@`~r>^]{r
rn?h[_9xߐ#ฎWt\o\Ewr8~$7 HoYp]GzݝCӞrr倳1./\!}4U#W؏:&_ER[[C΀-Wѱ7֠VQ~HhCsx5Bnj~b19^6Kx	j8sxE<KџG/U,WQƛvDS3+LKx+̇M.QľQL#:'Ɉ&͹xܚѵѮ)E ot>!9]=;S	O 	^{֑uo4k"[}-vq>Nzֱbsx5n<I㓴yS$Ao|&l	ctt<<^"_P6m┧ljԍ$EN1	x6y!o_@НiYkLtMYieL6Ē)YK?/PK     A   +  E   de/cardcontact/opencard/ui/smartcardhsm/SmartCardHSMCHVDialog$1.classS]OA=m-+ԊZ-ƕ'P*%ԔķawҮ)5`bxg<u_ss )L;ȸ",WRs_{j(Q%k1NAcH*9#jOYDE3pV^ST{TH2PvZTI(C0]uŜy,0<3L"6,zIʞē$Uq`O",Scf$T(iq3+	e4T ڡ_"m35
W66JBUpc>4Om/8q	l5퀉?~ACF/|.aWJhcz.oRڸVi^S*UҔTܖ"nD4I`'O;J%:dM;kdm6b}X6:oX!<
dg)]5"i`wH.}E{h6B]#ub⌫PK     A @o    C   de/cardcontact/opencard/ui/smartcardhsm/SmartCardHSMCHVDialog.classW	|ݝ2\A$((C]$,!8d`3bQajV$E<!(ԻVQ[zU=ll%Hm~}}| ' dh'0fJ/ֲF5->Y +!~dhM('Z"1#vQ,nX]2mzd[Q=i5Tz4L ;nZ!Zf
 a4(fI!N6EuF2JD)%j#0:ҺEev`<&0	47̰iGo KXI&cW'3̏C+F7\m?T4qݣH&eƬh,ha5\\CG@nފArdjl2R"
0>lu;.u;CtN8v ^R)rEcu(,H0J쥹z':d
kKSS0c
IU.uNdqfHsA[aWkrxU, r.JSқh 'CLH `]9JY^,,7q%Ά.7{~,b$(ce$aQIl	L_AơrgG4,iiC򿀩A%ᤌ,Гvگ2hK KaxE`	vI$0%4R}Ϳ@1\I
6RTVti
&1Lí*tPqE\MnJqp.s,
Lua4|R	[覅1˰tD{oQaVҌY\ﳶ?bFc~KT\2J>b+c\fG'V1#M\uN
RFb12
X~$ۯ83$S^dڭD,:#INI
L8߁CD5Mb?~N-InE70JTF6n*np+kpCe]*XYiک\rT
°VqK9]p]cype]vݥa3視02n{$n~
uifp]YMںpumE%jwF`8X
.fE`;}5k39${6
&h_除`q4)EC4 v
/%M^lv!&GSYdZ-X$I۰8*}d)Oixp5hޑ±8ů4<h0f3Ohk?`
z4ŭ,`x4}IxXң}zdڝEw=:M?+ST:mGvM
#:P񦆷	cёgpHQۺxJdH,a#,{1|tvdE8GYLY4( i=?> ӏ!%od
c4G4;Cuz>e,]0ҋ P	".zrȘ!j5f#֛o&HjӼsY%MaHNipGS};b!b2HqMC{M+ΣL^Sh6B4q,q
HC6oӁqFpGCڹS&Côskq!{ <1V&jv22UTh*}s#QUQ_erN2f\FyAZT48B+UРת^ 4cɕ´.i4W+יzvwtw\ܕ&N!؉71.[02gl7u!OKxKxp,	+%\,9.I>E%\)S%|CQXS{pf_#YF7ic)va}ƈneLl*Lx{b8}Q_V׋H_l2YH<\2t4bKPEuXBgc9tz4BDp9DC&Ǖ4%(9YrD!<X-ƠCdtq/} ./م+5=4;ٸ@Ju]If_d2OveXU{)eddd(ΣGER{ɀW<}c]cZri}$ep=%NLKY#aWmP~㻱}ȱA nl=ctMp5g\bOX0xҗc0޽U.~C0k=Jדyy63N6닄9>AϢm9+? 4J4g;4=3+|yzDSi3۱bn<tIlڍ_deƋpq
k)q8֧9
^I`/	n'!K7>>j3eI{Karʂ+eIR&:kS
XO)n&[Vl@'Z46Ҍ~ 'F;(C9K-Q{*K-G^qaF/qvax^Xoa腴 v+xB'b<y%Z4%e)^VVe^U.kZFldxG"* >RvcY#VWLH4J}n\\v78:+ƈP=V:(xju
k{WyTL]C"zYDqT"OL"bl:Ё1{ɍ>J%riUq9s>Eh/UwTT!h}X8I;Xb]*VTMwc̐A_{^|zFry<IL24YhvAPq$GGd_PK     A            	   opencard/ PK     A               opencard/core/ PK     A               opencard/core/ui/ PK     A N    0   opencard/core/ui/CardHolderVerificationGUI.classVYsEFҲNArP%!$qbc	׫jW쮜3mp<䅢( DIGQ@?AQ@"+8"*S_CATC'b)=gv%7<q>CliVbq$΃Ɛqj6t3f.O;"wͲi;F	crjO:]VPa<A^떟Y4u˩Bz\[>t)๦vyHb4\Êsi+\gH1⻦]Wɓ.,}Zl,װ+R%Za
.c:ȧ'r`\##ܭn@?
y]?|+z.m2oIݶ<sn:ժnK2;6 {WslKK*2X +habX rU#i]nki!F&\ˠ\ZG=R'Tumie$)2Ky͇
^f"Xi-T_4-m
oō
nҰ
:>ꛖGme1mnOn7@lP"͋jrpq_TPp]}nSTCܮB{Hn졢k[: j
{z,rMKaTAQ~92J*ӆSϴF2h,wj/Hkn
^j+:0stcB-UL'5apjxе8&COJr<2?*>.L]s;Z5ܧE[yVyӁܐSpwn;Y.1mMB"	kw̔C8LQB՞ră<њai>ۧOX\JU]S|QҤj-$vɨ{SmϺF|8[|]3;r #ZO#`F$)!V|qBrJ*'R{+IyfێKZ9C['5Auܕ&ᆱRXPsfgNX[+|#N5vSjy[2o8+B/\"Jf#=h#*`]$hLff2P256'T{H	MHнt! h2C4F{-Db/&AT.ra!D]$#aYpDXHbD`e7˲?bQ6%paѬ{KMX$Kife 47HE6G>[Lj`	-Ӓ]wK2KXnh`ga4	tƺe	9fEc$/ej)F
hkĤck W8*S_xFY /KK4
ҴK#$LN~[Wu:Bi\?o6:O↾X*uBbxcXM*6+렕xR9,

}5d"Cx*L\]O$؇TygrYO0\·|b1bt/q\CX?=81t3~KY=^25]D)R	qfgQiFy0$
uU)YLҾ4D[dCbt
e7Dد\nBWIODO$.S7G=IPK     A ۠]s4    2   opencard/core/ui/DefaultCHVDialog$IDDialog$1.classSKo@6/'wi!@CQ/IRܷ\;k# 8rTpFn!|}rH i e"C3cA(ص)=v]j;S9v#4\#g%<8!G
d>LC짊+8"C:0jC%?4=_0'R8GH7s&.2C28[R_Q*X6q]uTׅŋXDr+ed!	w}p=Bސg`J=
CYuz!ǁ@#>>%qh-WI[jTo{A)j@hΧݥl4pa({/ǣHP}yXmΪ])>U6VH	ƱA2F5nLP-{yp4*q&IEh%,~G?ʱ HL~C;B{Ag6wyF@gP,RbX*hmUHO?PK     A م    0   opencard/core/ui/DefaultCHVDialog$IDDialog.classVYW[UEjZ
i5CƩ D*Q^mȍ7'P<<WZ.|'rs(R p9lAI BtьZѲr^fޙ:M2glH-
!v؜2洌ּ]ely=]9iżq,LDҵtH gYvl90g!R@cOH<Jt
,Y	[ʛ4Ɣh)kY
bB-|6kӖ=GD_gܺ QT=nwDe|GJ%ƧBg1j&lO0bˀ@6;fXʹi;+sK
\m,U:d)XK,O
Wb;`fؒnz*ڇuT|	:E`	<'+:)
@;CݑSH%i,W༺)]hw^	
 ;39'3	ĕuW)4~6Sn@sĳa@E݌QYXy
idgڂ8!&.:x݃Nr&5SZSÉ;T,skBg{G{A̑  KrSr-tnKa+#uNo7
Xe{iU.)LSwvS ݎ%{,ot^@qU>&9}A5s 4"/Ok$MW9JRg-,D!G3r+N_ʗyd4dIl[.XC1Mꎄ1#kquҧn"()Rhq$ORyn*,HR+pgR(!D.6hɜg26Sc;¹Rm5A]Έ5)y͢+KRtΙ>y0램4蝸]bs1)4dD}2pڬd
x,,2_Q_2GSu1>UtKR1>'
u17
=fƓаol@D6_C`sh*
Mm<FĜWpSc}a_?򝚟%՛OZhExlPpVG,v6WzzB/CpcI%	ݯ4A}5Y4H@(@oq,2<
k||H0B'~Dp3`ېF`m8C8Ȳ2 2LE/2y8E1KG3&/_
E'\gA0ʢSi~Qg{*B܁HF{=C+5b^'xoMmPnm,nVL;jҊȏRh#8mԄSAII'j}!q.oc-8؊wR~@g 6R5([ bu-0<
Nri3qhd$"<WQI?nWyЪF!>F؏nO3R'9-q]~PK     A o  u	  '   opencard/core/ui/DefaultCHVDialog.classVmwE~M۰4R`i-(4H"AJ}&fd7NZ^T|9/bEowvS Ivf޹s'{<6k#°cZRe^HM-d[SvrɂeQ1>or\~LXeg"[#5XQDMajRS:\'uDSB?i;hB>cj`6tbV֪SJcCYx1^,Gʒ$dfl1l;%83l֊LVxA!V5fX-xKDj3eX0"L"ԍF\GAxQ˼Ĝ=	&
"%$$w&5(^xUrC*˹=%]fD۞p촊5'1Ġ@9d)

3Tn'Q%QF*KR֡z %:qQ䬬%dX+
+k
9QL₆
\ԆcV2,:
0=U
lTkC%"k)Rw-Ř
\
aHC[(*BMZuEa|2s{oxZ5A#Pm"s^3etsb#`ѾJjtJZUmd+:G0.Ԣg٤AaMpOʂJ(~qIת,9EO1늠2V4\UC|=i^vx#wA
qI>P^<8K;ņת˕KkCl)!qFƶ;Z<SZ*4|pxK5ddU@}k!O7骥维JH
U4fi
YfHz$:EGn0UG`}4܃	r*<`U:pG86nӍo8aFLҴ.Y3RǘR|SM/l7:&Co[?nz~O@+v6%'g]J}pE~Ǘ_O? FjP""9wPY̒y[9H<NA|Ĩc,uhf&oaNe
l6>NX$\\W EAc|`PK     A O    5   opencard/core/ui/DefaultCHVDialogResourceBundle.classR]kA=d4v[۪UW䡃O}"Z\	>M6tv&"KE_9s>%<oF'Lܪ*df4or=I$Cʾbw{CQXJg<ҳ]mC+>>۶&mH'I&2
2USİ\9[ZT}|H@jKwU:d1
uqdf.uL<6{r*{J$fv^l(Jیa/eh̄ ?R?4H"UžX׋?'iֺ?y?>%Z;*eoUoBH54]Lը?A4<`Qݹ@kTQÿQX&E߰t~H]u)Gu~#Y@lUٜ+f	kb3<-Y~PK     A RW?  Y     MessagesBundle.propertiesn0z
9T?]aX5
nÎM;BeѣӏcIC/E1M^1R%ң٘p,Tg#|}cYrWu=}1
zP
u磱{JY *x[B
R+WS@xnV_kzTtq?z'H؆<'/.&|Nܟ!Qcָ{lj
䀗.WNfMfQxC=ڈp>B`!BYNi	qNm
zy
ҴsY]CK(i
SP7#7,`76W<2g'Pxo{RnoL|9Y|\mM}~ao>YuZ1P8	[ƣ}.IPK     A `Iy       MessagesBundle_de_DE.propertiesAn0E:qVhq)i,ph!>_cte;Y4?fLFˊ@<`i!%E/JٰUMTO~%sTclXax|@7ױE-MQ } @#ɑ>t/H/͹uw@oV4#=ϻ~8CòJsOfs:i{]w#`J'ᕌhKSl02ü7k<N%2:AAF@UA{pRN\kvoE4)Xde(Gjg%]NGo9QpԅЮbx<͎Tpc|dSnrtҖV=|_ebFߊ4dj3DqE
s^\3ˇ*}i6ﴱ"ޚ̟它l!o$PK     A            	          A    META-INF/PK     A #;   R              )   META-INF/MANIFEST.MFPK     A                      A   de/PK     A                      A   de/cardcontact/PK     A                      A   de/cardcontact/opencard/PK     A                      A   de/cardcontact/opencard/ui/PK     A            (          A[  de/cardcontact/opencard/ui/smartcardhsm/PK     A ؑ  7  I             de/cardcontact/opencard/ui/smartcardhsm/ChangeReferenceDataDialog$1.classPK     A 	;ϵ  /  I           "  de/cardcontact/opencard/ui/smartcardhsm/ChangeReferenceDataDialog$2.classPK     A '   D  I             de/cardcontact/opencard/ui/smartcardhsm/ChangeReferenceDataDialog$3.classPK     A [dy    G           #	  de/cardcontact/opencard/ui/smartcardhsm/ChangeReferenceDataDialog.classPK     A 1  P  ?             de/cardcontact/opencard/ui/smartcardhsm/DefaultCHVManager.classPK     A   +  E           !  de/cardcontact/opencard/ui/smartcardhsm/SmartCardHSMCHVDialog$1.classPK     A @o    C           #  de/cardcontact/opencard/ui/smartcardhsm/SmartCardHSMCHVDialog.classPK     A            	          A/  opencard/PK     A                      A0  opencard/core/PK     A                      A:0  opencard/core/ui/PK     A N    0           k0  opencard/core/ui/CardHolderVerificationGUI.classPK     A ۠]s4    2           ^7  opencard/core/ui/DefaultCHVDialog$IDDialog$1.classPK     A م    0           9  opencard/core/ui/DefaultCHVDialog$IDDialog.classPK     A o  u	  '           @  opencard/core/ui/DefaultCHVDialog.classPK     A O    5           E  opencard/core/ui/DefaultCHVDialogResourceBundle.classPK     A RW?  Y             G  MessagesBundle.propertiesPK     A `Iy               I  MessagesBundle_de_DE.propertiesPK        K    PK     A            	   META-INF/ PK     A #;   R      META-INF/MANIFEST.MFMLK-.
K-*ϳR03
.HMLLN,!@r9y%h\\ PK     A               de/ PK     A               de/cardcontact/ PK     A               de/cardcontact/opencard/ PK     A               de/cardcontact/opencard/daemon/ PK     A oRy  
  9   de/cardcontact/opencard/daemon/APDUTracerLogAdapter.classVZFld%`BАI6	94m
4,Ȓ+49zGЇj;+9ƀ9˅Vg}7؉
B*b;\3U֖61t=6,{Й/v#nQ2-	MNI-fׄ%ZmiurkpȢir~Vo %(UCÍn;B#aqS[5m/S%LB-Xb<f y*s0(nWC?9`*b;`T[%'<'CHJ_$2zuS8Q-*ncTz掶 ^5ƫG$rmE0⤊)LSȚΉۆc){S"k;U\*J>Sh&NЁx; 0
xG/ʸ)ׁDME\Rc|Ju[-WD+-3)HH#0r
rTBJo%sASwe86h T|!<X"z~qsaiV1hl;wl"(ޓ7,7Mzҗuncsaȫ.Y͛$'P+2=b!Ec!Z~xqKڹuf.W&X)b~$cȿW	K1 4)e?Qmmz)hd/>}4]z!Loծ;IC(2#3J4I۶sUA=N6g=]؎DU%ƦT°vm(HIYbP:<)\]%W$nM~5
n'(7jdLy\PP1.JE
j::xN"щ?&&:D%tz4fэX@ ;i(4lJza''pq0D/c'#1
%0!7SC	½NFO E4
fs}هjJb
E"wc/
l[?\NoBtEA&2zɕt<(5ǚc/I3L:)f:Kk=<, GFT)xt8t8%?	kBzEW5ÏpQPK     A E  >  :   de/cardcontact/opencard/daemon/CardConnectorDaemon$1.classTmOP~u&|C)oPAqn%4l6XZv&xn7&h>9o?xHH	CCͲ%,"Ì$B;8tL[rB?ƥflCo9QDSkF䊌rHnۦvfAGN@?Ke'ɳ1'.pGNdƁhI+QJm%Ku0<LS+k\P?p#xp9$g9ޮZslגƂ1_"*sbCwS-
|EUtXQ^wES5T)m\h[7#`zQmԴ^2=:=*M+g;Ѝ
UmpJoi8ہi98!L=CۭQ˷x,sXGP0ZCZ/(v1	*"?Adn</{F]}GF@3㯹?w.wHmp`_L5|N$i;#
4,b
(QC70Z8@H6yſD}}jS)zFB<i+1DG`F	<cT1zPK     A J+!  &!  8   de/cardcontact/opencard/daemon/CardConnectorDaemon.classY	|Wy?iYIcK|mّג;R.[6YFeb'ݱ4jFIqhCKHq8
8@A	HRiz =Mo5Mj%,D?yw?sOتUB&*PPw5b-eߑ줯Py:
zFj506얤I%=׷~7doIY綴s]2;;l)sMԢNv{3d&b2Pھ);CXBTae @-Y;3$A+,mi%XJ}3iHbBn?}zr+d熱awF]YD,(sR]k
4Zi($faC)˷3	/`3M
fƶRv;)MK{JtmX>%Rvbu&6bB+6Jsacb+3lW؊m
_34lT8=k!e7QhShdt}oP:~?	/ݰfG=N?GWm6q
3-9&-gb]AH<yt舝q:v*-q=ht\u#i/9 c7 ʄ9^{%+)KoPX?F36Eްc0z]Ұ쐗0=Ɓ
W~&{dxRL;ѤH2BЫb}_dYENxȶZ7M,m1F7-1mV0nVXEa=RN'mIS0Z"D[M,EրMIZ~Yjmcx4MRU*ȯv,Nַ];è@OTW6+%T1pB!~)OI?6%0l꘬ \ѿν-mєh惽3-u"L9
IkI{יIyĒh-7_3o0*7D$9(} D"*}=xO|{"~hQ7˝&ތ_W%4Á(m|9pKQ.wƎľw43q
|Hvpvwo* yY
V{qo3qC58ReP]%>&IS0FMѡ"BQRo~O x
 0LL\'ny)oxv5Jt:ѢQJŒ)|½vJ ?hC0QcThmޱP5nǻ#(ǭ5p`!C`IfL7젲`OY͸=0q3v$^џbƙ(H-ݤ&caRH^J=yg l?b(3²Kf&4B20zBa⵻dDn$L</QKa+ͤMN:L<-J-
k(y)Xx.%GrpQwEږ&a9|+jgV"CcI
KM|Gm,L$֠Hg'4X[S
S49Ԭl
&.B>?3?`WЭH`7a? ^NAװJ%f_ڶVakT%)>_޽+܌UwkiτڝÃGLFL^+H?7F(1֦Pu3+(IaMPW4{eC39k"uޫȊ1ɰ.2kb3Bm4_PN[Dw4
0c2
&Z(F9^vi6ՆD$dPId˒T0.4n-|'@N'spk*bdI|m9fElҸKsB@\CHÔ7]
5+>rܼfVR)1*K}{k2'I}v0]C-Tg 4LH!AQN[!ivx3P{lX"J{QV
YxG9>`QIoPNZF*:Jr
/52n*TMժYm0T>:J4a<9CݖN[-kmHxP4{
%.Q\LJ_ƌB_vV>Mj3lVJҋXɒC
@	Z2"\%X!ބCzQ,yn}*V~<̓ycY,=Ug&tb͜~{|nR%kPk1Q)v,B;口7p؊;b#IKMh^Drn@NٚǱfIY4cBj\̟oB(h?̾%cj#z573iz[@FlEvEEc"c+ײ}7b3Od+Ϥii[h7a7n,-w c;Xk\q9̢sмkUKT??LOE$-wZBq)ʒ?
-c?iJi9
l*I4VhZerSh=DUqAd_hox e<"qi4B̭cY,}gG\00
HQ\w2/2Q2xe[Ոj3xc	d/_ud}	vZC++C_I<_zըlZvh5NcNkJeEz1?P~aKߪIxk><jzVO+SqRMZMx9WE=K<ZVw'CBHPLas&qʭTsfk%'PK4nbNxE8rϳ_m*OS
7~О]HISyW~Оʝ#DG=D7T\d!"~1r~	z'S) ϐ0#1%c|>EBYǗ$Wuj|/YzsDo*]JmUyDDҟ|2/2_p,CϬ"ܺ^V+G UC{(O|+S|>0U%mWIoU UhoG4Tؐ]UE/amD]7qvr$'L&EHVsUm.hR1TTR`=Z4f5)i4âQchlRdy4J3ώc<׏cigO2tez3pgXd
0_ٯ41sjejֲesNkZX]@-̩{3'%fX)ǾXןJYQPi\-i\.T}ްd}O&؛s -]y'Yw(Æ`_-l[LӏR؀=i=

ߥieoUe@BFUa'd`/cpx=߫j
ƕsݗ3jq!g,"2" Z}SI-W+fմ+z~~5y~S__]!86]_^%PK     A 2[U  {  F   de/cardcontact/opencard/daemon/CardUpdaterDaemon$SmartCardCloser.classSKo@6qĸBxi R."VR"qګԍcG@ ď\)QmPd̷f< A)uh&ax
AG"r1M=WH;Q""b$^\i2<e %+G|q7>xt֓L%YQбb204e{ιF¦&#U\q
w?R,K]xLLaX<$~ӱ7;GO2Wo!;ȿsR{<>59uqZԸP!MGc*~K1;|4Kjtq䈗Tޒd8y	"j<E_ȍ2
[MM`Y(nY!|TҦޘտAoNx^F9%q
(IgJ	S-ePI%F'~bc&(%pBHMaK+f%ǄN%ݽ:>RO5f,Hst-u.æ )7?PK     A n  /  6   de/cardcontact/opencard/daemon/CardUpdaterDaemon.classZ	xT?e&o2y&	0Y  Q!lI$Vf^df%ܺRUk[ں4UT&HpiPV[VҺԥkd&}޹{ιg}^"LB*Y4R&\^q` D!= ^T.h0؀1e0m+mU!;#cpuWcv_G,ƠW6$q=^]>^Geڲ*٘swcQש]f(-[E9RFT4{o
]a[
B{E<EǠ Du`$AtFɔE`*M`*6(E=&dhTB1%
SV]ԙKM@GuK4tԖ5[Wkt(uӄXgh4Ja5;
i*רBN="4fiTEՐ?þv<jn94W4:0`&u~h#Xأ/@~T6R|AHEMTl0NRiF.48L^&EevZ@tFB#Q᰻u;΃֧՗Q`*.h)-ɤnƤEzN/B&E6jvo4MlfjQUUz@Ʃ
4"MQϸAݦԪt&ZkoúwMQi-ty;їX,MOl9u.n$Q+]_ںzN՜gb]y5ҩa !)uxF>:.ޠÏ=_t="Qw eG7whcv:pa&"O]m4V{$f5<%ݾ(6+c(̝7{*4.BT;jI(QB_==]Đu0M ^KR}hEMh+}5U;Fz@Dݖ̬ҷaAiڜ)=ǖ5'֟E{%mCl61}~@;la|aQiZSFI5~24hЊ~~D)[+n3D3_oZzmlIkI`RvDx8{EwhtFT

ߣQz"ur7Yէ~DB~qfx} FY Y
&Xo$0ahAJi;zqb`} wBpDCob3ϫLEݡ	zR?hDÜ ^o8\c$N3bMQ=,A,o/P '*F/euI&?igz	.2ՙ,zEЫLZ8c_B;7^7>
1tArCߢFлLkFa-H;I(bZ9;3?4D,#Z˔5)鰗 LzeM3TDUiH",#HFuߧG^b"}D,?L.䂣ҚxMx2FQD=*Et05È2kpyѥ>ThpեZD3bƙBۖæ
,=jƑ&m,x:GLSssD.
>F)8_\4V+X9*u/ݠw%[LNbW.^v{ZP\hB<=v}YxOdYnjXÓ5%z +c8SH:x`
GR1OE3Od53ͤ%LJ#UZˎRSM'Ȉ!Vh\ɳpXhhi0KZ<,FWi Mh|h	Os<XѬGfeed{\;|م׽1>Z#jO/[ZkOiD}!5^$?/ݡt{6 	KaKyNѸD4)ZQ^ 6MK tnh.O+4^)d`4	ެqU#Qe*v'xh&'itۃNRW,o|jf4oӇ:",5G-ٖ%PH8Ȱ	HYN[dCܮqVOJ9<Ѝ H7fǚЮNi(T)	%$,pog5#qrq>lJg{05j4O1B>K=OTxZU %n!cޢy3__$[?c6}@P%E\_G K$~M˥HV(#!e[4LZL$kMJ6AܪJ?LHqdWim!b
_5Еڵ
h5!tE"_fa^ͱ@ίjY} JfLPw
FL%!Ra"*|Dor )HY+RȩF 'JwtϏR,@3.t^dx22n(Gtje4w#>޺ց}[S#5ׯ'<VrO\>e-{Ki܇z}[4^|ͭvMj?gi>p֋u0B6yeF:,CKX:I$C;;]Ci4K줁BԵnq A6.N{^g=tGMb]	#A;dHJH\pD)K\AqLPPzq顷·o0l.1!=inW Hd<R#TzR[C( XtCKV,wݝ L>zo^4'.q^ehA WN)N7G].xWZ"7)G;x"?R"07h!'A5Viة蕒!
eN$mJqŃ~n>*ưq'ņ}lfI&8'(fRRGW)vQ`&ko1'-َ9"T,0&y.v/
hj4,+bS
`.vtV舮wpݦ"%T&)5#"v ca쪮LiW+Te"weA}]^j~XÀK]Z$M	*2!kFXJWR#IԹ$z( l:7_UAyU9~D(u>ʢq|fW>ߟ+ͤRyjƸ21VQ1S1Q1#'l5h<P&Y0/^>Rz)ki弇{h
|&=4<NePn;l=T:Fci-MsNuty7(77|Qy!2x`nį0}
p+|n@/Ei)QeB[^ȩ5eXf[cUl)Ʃ&s'%@35֞W-m.uVS(쥓 a03gHtԱ-6:ߦjr55m6YH2GJ!?,x?'+L~O ORRJ74O>LS8E$X-,x-S4\mT~6!f.4H%/
	/2q;=bhjpYhM[9-tV/:w<N{Q`qtZf));rEc&pznESsj]P/O1YJg
aZ9XRPZ*EIT]'[z4Yu
-Mq+Wq4hŖ]vl5}t%TsUPK 
.rXj3ʭ͂)(osO!%8d:-۹8s'xIvרNؼb5NwlNcoegW6&יs[QSP\P#mvu9ǽY1q?N2e)r
R#t&SS}X9^zڥ]Z=[4	}YjRu_ikvS4E{Teڋo^ؕψag:rez-MM<͹nBg~	Y'wjŹq0N>>N,3-qv?r@Bҗ\w!rqgYC3ř $iy\'q^hjeVSx9`%&	X(Uu΢,ff5l0.p6⾎h.x5_1T6*VU٥<WXNk<6cܩ,__y (t_FǨܩ5G'o	$	qp&s9M*ΕH}^C!CAĐ:@k{6pWn`o|z>8]OGzn'0i>g}oӻҋl?!3OAC*kF9:{
@orKr躊/ bz/wx+05v NBs>@!
 SD54 os-ϙş)39Gv(
\"Q6r	Nة\x'*W$e;OVvTf.UnreW)qr;;yrOWbn?= `uX*?K_Wp.D4U~+q!H*ïXa	*YV
0;=OxʦǑ巐G94*A%/q`yԠ{Yi`6)O<YzEIV"x$U3)CY3I MfIǣ	 ^
~̕(y&Ogc`c R<|JTi~?x*͊%S+
T~BK\ۏjJ=Q?4U7[~X77K "_!QzIBԬ<HVik>x>>+܄3q+{fcʊ8PxMj#!R|b!Nj>p]xHE(s]e+e2*?RR3`B)A AI%_!KnE%X*ABQ+SJDɗPfէl	)>Fcve7F#V9b^bF|>w͓y	,O=R'y+әX<@epf:8GvHMeVw/#@@R< |5Η߈N؆!3kۜBwe9opfygMNۍm M
9ޔok-n7%[Gr:E|&,_B2g*F:#9ϣv )]V5A'~ț$>L"}<"]s1/RpUz
BncEwa}E1#0;h[|}Y| i(V%&Co(bG60>*oV	O؃p1|v͵tS&g6IpJvWx%{8wl̞.;زNv-Np됮}JRBi"GM+yxq'uEe2rQ`q2UFPK     A h      3   de/cardcontact/opencard/daemon/CardUpdaterLog.classUN
0j(ߠуGA
t	H̓GI̼?5F):eBIW)kT^+J
ZI.:E0>VF-噕't	>iGj70vsMx/hNn0[En	}$RCFPK     A e  )  5   de/cardcontact/opencard/daemon/ClientProperties.classWmp\U~Nn6IIBҔ|.@I6tMҤd/6ݴͨU08ʈ:GGAgosνd8Lgsιy<{Wp^

^>7hHDO7md:i	xǃZCPG
t*<o'SѬe>ii3'L+dS[{:
TO%ʹ-YcBt&a
[mԶcV	&a%3iۘ,8&s>:'nIM-yq3y'92}S{Ht4c3e)`k`KfF´* ժ
Ě1ua/:ut!N!L:c:MqEQ(p-,B
fag~Ɛ[mخb@<D@5r#I[uѫc'-J99ݫmPI k*OhR9?ۇ,G\ {Y,y'mm#:　/M%QJUC\Ǩo>7R9	~PǸ\D
58,fY9J$VJVS:YQZ0q7ph|`8/?F*o;@|| ~TU

I8ov],6GS5fLLyNfHVRE=d_YY܏5>ȹa#[8"g,g\d!>ric\Eƭl^uF%2dW0D
3%sl=[tW긘-hZ<>T=J|[Q!ϊd-tNRXÓ.kNe*M aݪ5-+Wqmm7.3)1~R5nK扃VRFXULޚ6Nvo^ٖ6LvLxYJ:?+8᜼)в!^̙.k2;wsD̵2|kZeUpC(_,>NV̜lT5|O,ͼx;*pxjVΧJ{8.Op(wSɕ~x8u\9К%]Dk*Q2|y1Ùl¬JIwSi
?E-y
/ᖟ!UCL!b0Y)rwb\aQٵ夂C<aP&$G98l	kF"n m^kEA<ʨ;%ܶ֯/QNwrE08ұPӺ^g"G=@_+[G¾+,
F_}GG.EPaxeU9ug+,Zp,)t8'1T}̭!8=̲@&>GU#1zy颒2T1dC|Z
Q
}(g,\4QvC1 ᮷ڷᑈ>v*6z&9;=*m9ϣ/x_A/P>/oPJe BҦ㳪
zz"(ԡvtJLMCCAO}q>mӎ8DXYm8$0qgC<ޮWpZT`?D~ĜSO5zyUYWm!˓o.ZT}S%%>}\ttK2QDuB]dKJp])RT&]*E*8JxvT)j*i+7rwg}Z/{NgpT/)֯fFaMv[؅?c]#.ggclcʚ{*γm(ۖh G>°þsD
7];M.
`E>[4e=D9탯E@w}PK     A 9    >   de/cardcontact/opencard/daemon/ReaderConfigurationView$1.classR[kAt۵zKm(i׾)J(Ķ}{LIfdvҼ/ xf#=9;o߿|p7A
fNf.5H{=%Nv>TNS4ml,*;H;Fq$#y,ӑԃtDVnG`ՋjZ|Ybh^qZ`*.c.}yϮ*imIU&>ٗ?b˩'OcG*pΌ6Ocrd*˞;\`kۻ^.\NN3=V?j!]L`V^k~_/od
,&O53EA6Z# j5|,0u#D3%^ӵPJ"v{ScL=C> j}A!`U4J*8 PK     A vZS'  2  >   de/cardcontact/opencard/daemon/ReaderConfigurationView$2.classTOAJVAEl
hh,Ўɋb&&XƓ$o5mҝ73o}ｙ￶ @
h42ф0dIXE+yQZޚp*qQ\%g<si{nayG#[H:
DMd?rj^y bLٮ-B3Z37qmEeh	C40ɪ`Ӧx\;:6qb
x4/E=V6pt	(n'Qtḉ^fh;LI.Gp*&Nc߫4畄Ð޷4ReοҤSHHźTsߥt5a0!BJ
$Q1D	`#Bd7%6+kY;>#Qo&'CjY/qM-SྭŐ?	y+>/3ŸtG<,J4=lM<\mEtOC$o'D'I_iu(njҽ³
ͺEKUUyQr4]*bA ;yx\e5п4N5MZ?>}&3\.!
hIODnO4LpLn{HpCoc|@bupgjfj`DQiT.ω^Wk.[\;^SMQvz*V5!qV[}"~n!ڟ-Ҋt2PK     A *  s  >   de/cardcontact/opencard/daemon/ReaderConfigurationView$3.classSn1=n钄JЭT[P%^(9ƋvR$ >
1TDCV؞9sw VR9dxBmg-i;w}IP/IuBHꞢ@U\_ct "(Pt0G/H=pwDie6Rf9TGUtUwBRE#eplj.bs.Y5F(*!7"

c2=~@ƛf/EŤwиt@ڸO=U!MkL{H0/rWi	j7dГŴX_o]"3]q,Mш|FTٛO npyLYgpZLaS{A+=spu^R6yN b,˃!*)?k<.])V@"9YfL=DnIg8]'p9 px⥎1U|Nwi4VxLs]&+%	dPK     A     >   de/cardcontact/opencard/daemon/ReaderConfigurationView$4.classTKSA6(h$ yQPJ*fLfy
c˳'jYW,˞MR*3==}۟|`	[@?07[rSNEJ6\x.x^I~aj.cg-qY`EI>9I@=~ܞ0%XlK3tFc Я!c 9?84RR7ՉA+Dh,}mB0ÈRC.$pTQcg#/;K,c%F&uL"b{){MɋC\>p˖Kz!LHfaGL#ᚎ2
ݦ%=O0YW*sp&H1Vx&ZT;mUKEX$Rڲv.ϕH3vL^rRrSS}ϰfBZ=#d?./",BO,q/oh{|330ntK!4wk-K	`WވM,9Urـ#7(_뉆U)ǎ:)
,jUT1MC) ,RfU{ptZ]iw`z6wh,:ڰ],/Of/C$,cVj0	CG|1?;ƅ:.q
SĔTǜʡ!P|CAh~RaNZ*DpX'-
ߘ0{ !>
G&M/PK     A ,|     <   de/cardcontact/opencard/daemon/ReaderConfigurationView.classX	xTo2K&̀ (H0JHp@$@+/3/d&y!@ZEڢV	kmUmfնjwhqk7a&|}3==w|C 5~d![OGr;ՉHz
2rDbV!ECYa:dXP<f!:m:l]X:V}<;D<J6^4A[ĞiC
cuHPԢ>j$
L{UU<Fl[T]vu
nOCa6P0A,.QWEN1<Ju5e vYai'HI-$?IG)f*L16
5ѼkVW$fDGd%>,4T19(¤4]]o*\
,͐(t\G(-/)4CѵƈQ
(9]>~TL	Y
StI]k9A[5,Q%:]t]v1!6wuۻW
3qv׈":y
6sFlJ)FOԦuNXlr+pPk=x<{JbIja%̨PӈIyaC@"XcZp2)9jqbVC+У9dţQ]'n!|#eГ(iV:3hFOHGFŴHȈ[kM<	XFti^"%kee.3p*K!tYutbdj63w,9Mq؁^p#V(1²m#ﰡa|mZ>6qE4ޛr|{;ܺێqq).JI|#%#x#fX>#Õ
:2YWYWkfݩ
N,=Ϗ=N"kv٨E8R|YWp=kóI`$a1ɗYi;hBu&Sen8qCiډ8Ïq7tTЖzȐ}$n
sbuOm0;+\;t|!&:UTjKwo;hD8=:e2~ߑDMN2_&W~eXWu~Āu|)}6}Fc^+LHRΊu ?ҞCT7t<CQH<jHKmP>|u<!(qL-GiWg72*'xؑhui`	4HHUgܚS?y5+;{ՄmI<~k,qjt(˾H4*Nvhi4fMI5+DX+xUu	(X"aЉ<w 4MNi7Ɏ7^1g9!^5

o:v?8
_{<3HBn&F&arTW4*HÍN,+%U#VH:X},V;=a+<pU#]qfo7J崽Yt5N\]Yލ,$hJ䩉rv	d])FqA5MW(E* I*fL}؏63kbVܦ-^Hjkx;n_91W2Y%Y/3 } 6Zo8ŹXn2Êȳ;#=9+Djm%?v(*͒c/voE3:S~Q6mzR=mRyxWQ<6,Nyvnh7ݞ7Bm~dpk1ּ>[YiSHazаŜ]ݩr8^U2LUDuAFEt	+""i(+&3a7A	CCoL`&O,,nWg挼ZA)F3{';[y.u*ߜƧ=ȆcUE?TVDA ƵVc|SŜ$&&13*U8^cg!a
tE	1ނSY*y*'E+CUJUڊR5Gͥ%FvMҊ$*P:y8y$ΩR.a+[+~C#gk9j#6asE\0d,D3D "EKIXJ❜&Kb%\Z~|;Os8Ǚ~Vw_.9ޘ+ceW|5r6/	 W &yW[Ed"[6b&(Xv⡓1BlEΧ(.F.AWx5,\
ra)d_/"*)_G.oWث&[IՉJ7V^KTGd*{BWg0ʗr:Q
;Y|룔j!CY"$g0-ǳ L-W3DNww_w܍ q]nY{,9s~'Itϑɴ$9lG2[yPA~elEhcZjH	&%x|P
VHxYp`gg	><7|ecUQI~UӇf׺/%b_w Q5쟊nC`y5ӏVr,RrB4TWd>Gr2wKBRLc呴c9TsԄ}Qy:
8:PȯeOm{%^ex	W/671Sk-8]ժs9[u#;RUGGUѯո\-˳

.J	lh4=c`4y3R>I}$UaeJj	5h0*)0jW+0<`f݅\uZpx6e]n{ތ`B9PvjZ</fkj(1Yjg\{IY~z;PK     A )$n  :  5   de/cardcontact/opencard/daemon/ServerURLManager.classTnA=R?G*PZG[it-?v't*]Ȱ.L, >β!m3s{Ι{g? <E91DCan|U?-KWz|1$`:´rq3[mjt8nNS
{ȯ<):
MzJq"Üy/'^]jOX;
]22t!
C嗳ɦw-/Mn*̔q5kDÌTW^p1nq;b!=18"B7}E
UT l*Z/OGXn]bJHU+^vB&yҕ͛5g;xo(!;mERj
TjjM|G?ԨP@ujP̄*[JWQD"Do2D?`X{Nx*͹W7N, 	rUӔlиIvY`hfx /\n+`Q?i zǴ,T.ZY-R}*>,)x 7$~rL3#O˴נPK     A ""ԍn  ~  0   de/cardcontact/opencard/daemon/URLVerifier.classVs:62"\lǶ NCI@,pj$H{ciWdĵpm><uxaLO_ЇNwvWf9};8DQ7JxY'-O	DU$U3[1jű}gisjuΖLe,
X1$TD{ME]^4]ej=4$p4Rn	nb÷aI`PBT0T.bo4⚆o"04=5Pt	{5<jƺ
wFv+♙SO%c5<; V/lVBqHa	w*d|efʜSo8i
G0*3uPCq
Y)ĢYjA*j8g+6jMFȢ^ךFc;xY&1Eo7hNˬ#~7*^DzLoT7<	^pص6@ؘg5Kdns|j,;7lo
mJ SQ$<I1ln䩨"~IFf/އJ+!W$EĎX%i^	q꾳flrX:4D%3((Igba=BQ^DXsN՟lЬ_3ݲkYEõs5sskޱb&<6`Ig@&GxCi$R["yAӒ8AڣM#f%zYjDYɒt+9Kz"n\*jq|wƼ:Uv;WM*RO
m[EoӶ
ezƓ3nyR՜uݧf3	Vn{e)h<N^㦊d(p-EϱT-n:!
Z3yYk6v ~~pwߝM̑
r3=5y?P

{(k8~δTʏחe<uծo)wW7r܆m
ok\wA	:8bC{b	+?``i41qI%@z2}ebb31e:x&"jZ+3zl}[
;X)~LcN frQagxs,arw++X.,ܠ~؍PMN4,52¥ w0b@"N=4aCi&_$''r+w\NR,5[?=G!2QF7p~"}jA){Y`ЇEVe1r"䥅Xg9Hrxရ(m=b&@?hO^'U4$yUiEw!tX$Ra .&dUJ15cn2@o׃D´cڽho؅Ӝ$Hx+|Jo(&6_ _PK     A U)N     4   de/cardcontact/opencard/daemon/cardcontact_24bit.gifKҕKL|!]tU32F~Yi)hj`ke<ּVKdQvc9[5CzhI0њAx|eD@2 %B˱u,A=L
F+ijjFt8CI;鵔\<zƌoL0=#8ÇFF
ìvE7YETx_ӡ$,cL%.g%/qN&
ڋkUV7bNs=mfTczpRDRQP
821jԐ./EfmSvߘ<`	`zX?V YRF%Il.{CzslSwŧWRpʆ:,mUo3(7GɭGpu7.enMEv-)`r.dVMeGfeaXQcOI"OݗX~{MHiGPC	l{3_.YcʠG(7WM89DE?G|0):g7+P*	5iyPՀV5s+_M%p~iXYT0|ǼmZە;Y?ISwhV˗JrYɳG1Δߟ8 u1cdR8ȇuwiѼ33ײiZW
Lp0nۚ0=Fa(.3O
VspD'WZ{U_:F'C/@0F-{獝YTc `_PK     A Hx
a    )   de/cardcontact/opencard/daemon/failed.pngm?haƟ?hc\:ˁ!ԡY.4Yf<B:H*NPn
]d(^┥P|d{兏~42`iK9>C{caaA$LXItLd 8N p$Y]]][[P%	!*JZ=::j4'''WWWш_}  ?xFEǑb㰓pSr`YbUe]e	hi%&ؖUX:Mö<~@#*)Ht2
:J65MmJ]}!2*:EVfIT¢gfI,
-0Lb[eWoqpY`STo6.Eրΐ&V)Ztz Q1hqI)9xEv19
 ۀ[ׄ?me4
ۅO$4ul\j>tQ4έOϽo"3$(f28x	.;k?XkMX\//w>b-?ݼ={f
`%oNclg?PK     A R_    )   de/cardcontact/opencard/daemon/passed.pngm?hSQƿK:o"K,M
RJ*BfϐրãADRqz幄@i_At|ȁ{s.?s_oomܞ0g|kܝ~MMa&Ls((kZio	G`piiiyyyuu5Je2|>/(JJj0<:zM
HEQZG
AÈKCƚ`bQ0pu+سwTÀmuyҧQHE:Q	YeUu&6.EVNHEXG@FECNHBFѠաI`
h9Ù	`
+5
LSZ9c$0IMѥգ'&)EjbjzFvn^r.F&ga`V!
Unap=xr.&#a k*Q8D`?Z7>><dcP7dKGn^?K,D廩J`r˹g]Yh&?oG,|yfjkPK     A            	          A    META-INF/PK     A #;   R              )   META-INF/MANIFEST.MFPK     A                      A   de/PK     A                      A   de/cardcontact/PK     A                      A   de/cardcontact/opencard/PK     A                      A   de/cardcontact/opencard/daemon/PK     A oRy  
  9           _  de/cardcontact/opencard/daemon/APDUTracerLogAdapter.classPK     A E  >  :           /  de/cardcontact/opencard/daemon/CardConnectorDaemon$1.classPK     A J+!  &!  8           &	  de/cardcontact/opencard/daemon/CardConnectorDaemon.classPK     A 2[U  {  F             de/cardcontact/opencard/daemon/CardUpdaterDaemon$SmartCardCloser.classPK     A n  /  6             de/cardcontact/opencard/daemon/CardUpdaterDaemon.classPK     A h      3           2  de/cardcontact/opencard/daemon/CardUpdaterLog.classPK     A e  )  5           3  de/cardcontact/opencard/daemon/ClientProperties.classPK     A 9    >           ;  de/cardcontact/opencard/daemon/ReaderConfigurationView$1.classPK     A vZS'  2  >           ,>  de/cardcontact/opencard/daemon/ReaderConfigurationView$2.classPK     A *  s  >           A  de/cardcontact/opencard/daemon/ReaderConfigurationView$3.classPK     A     >           5D  de/cardcontact/opencard/daemon/ReaderConfigurationView$4.classPK     A ,|     <           yG  de/cardcontact/opencard/daemon/ReaderConfigurationView.classPK     A )$n  :  5           S  de/cardcontact/opencard/daemon/ServerURLManager.classPK     A ""ԍn  ~  0           V  de/cardcontact/opencard/daemon/URLVerifier.classPK     A U)N     4           p]  de/cardcontact/opencard/daemon/cardcontact_24bit.gifPK     A Hx
a    )           `  de/cardcontact/opencard/daemon/failed.pngPK     A R_    )           yc  de/cardcontact/opencard/daemon/passed.pngPK      6  f    PK     A            	   META-INF/ PK     A !W:   Q      META-INF/MANIFEST.MFMLK-.
K-*ϳR03
.HMLLN,!@r9y%hƼ\\ PK     A               de/ PK     A               de/cardcontact/ PK     A            $   de/cardcontact/smartcardhsmprovider/ PK     A ?b	    6   de/cardcontact/smartcardhsmprovider/KeyGenerator.classW{W~Oٙ,\Dͥ]JKH )MNvdfwB^VZPkxZjREz?3YvI"xdg];߼{3 >}(BxG5rF#aX")SL=ڞR(U0V,L8z	úH =f̰
$
t9V#][f1[AJT	QA'#5@{j)#!!;@WhI2ni\;ʭnhX,sstB?5RL/p0Fȭ6=K,QH$=J%-ǈ0$D
T;]q=18hQX`ypzVL 12oXLP%kf2҇
 *}Nw$F[Hr=8;
m&vGl'o̄艨H
L܇,!Z	!\n3Y)Ljrb]+g;NMwWL+E"x;\c̼~
JV@UL*&7XA;bn
KuMZ`V/x
\3rqN@4i-\yP\˲EY>CX`n3*P7EQ~?n}z
QӴ,HTtA#:ԣG6SA{ݓWcǦc2[5܇mn-sԈ
3ua7
!$Ed\<Ko^>)0M!'ة`SϘ컥ecdjngD)H=
hL6ÎZkebکq/&{1`P}3-BKK6`Ȍiz0eHw';qkIh!!O1{[lیaɼ#غmsLP{XE4Q+,Eo5"8yq6Yܟrۘ
u0}8d
NT<qv;e+%Li<62Fa^}T%3fMfz
6K,Lv
򜆯J_*2oɑ[dp_t&i74or=i')oixIF{[zxI#jFBGL{XL>٥$oj[&ɸ!{*d^w7aۙ2:K8&ѴRhzR$cX	WZ޸VG\rof@)jIr	M+J!!Pca"qn>
;Va!xWf1號wr_~^DŖ"Xyi'鞢uE;ys=oՈ`Ds%Ņ׵dl]lYߊFOb1R2wn+/HrĊL|!sC:$uۖU'nE,<^b[oE}rH>.gU8D])(uiW%o#J9Wb%~HJ s?Mjk8d5Nc^o>uOvI
"_J'eLYRwKIy8.	5UKHQ?A]$B'@Ij6 L%(zl
ӛi|W-9Z07][\3S7s_=dָơ=kq/OU~\/ʃ38Zg}XQBtbNw#U]'Pq5=XwԶ&OqcIqy	~{WűQi,9^q?EԤ2+44Rn+wTʭPV~ߙ7{}~o>ujR40)ʒTWШ_N@:HS?l#xI~OGHz4ʗxLOGyÙPWx zTWxůP15Xz?"}Oȝ/H~	^ExrrV[~%U0AD7;0IHbS(58F8WG9ǃ,C>J<poNf(Oy8*iQgD-WYմ,͟Se$YLCYn)-"MMUY;Y*,Q_7_]+2ڔֈ-iF"~߳&v}4/=<?O#Lɲn_f(
Bp	bQrWs[D?o7_NVv
.EwsՇPK     A М  }  =   de/cardcontact/smartcardhsmprovider/KeyPairGenerator$EC.classX	|Sڤ/
(J+K
􂶤тFxMm ͋/isr:'mnRNp6wnnpmcKӦXOĩXMn WCyú/Kj/ѫIYIM?Mf}171Ԓyk#Hra7jtb/6w=Zjn_GҌĺe;3#D\vznvnB>Cŗ6@Φf{ꕫe
fõDz3zX隐OFX!oYMӫXHK^I(bɄ\R6R7
Q穘R{S-BhК1[Lung=Y퐁M^K	eX|!Hy!@ayB8zc4䳐X	QP0n_"{_fqU6,\1-F<!U
T*XJ̡`4"3ij!]EIHѺCXApuɀ֥G	XJj\DmƇ~e3JHGkYqf$gQEu_mYijh7#ZRO6C=|D69x0J
(VP5ϐB%O$ID,c';x$36,y3yjPц--Y/lW:1TN(yjiㅻr%*.EoLd/!w؅	SBmo$se \)q*nسY3wu`A^6{E{Ucm<H	ӻ.a	ei%*⸚0-\oFBVe1_'sO"	÷;#Q]KaO;(rاy>'s΄"Wp-aDZ:C7##t3CNw'7ox/s"^2~9f7c}]{iG1G7|++ߦxp%˺%Ļܤf{6}A:+/Gr$|d,x}+I:]˹H nU~fUE"mnFVhvplZfm3zGVAºא!a[J
 e#
[׍;1ǹb#O.xm-	4 KψhL
DIټ[#
Fu{|AJn80#3@B_Bĉ^-bOJ =<Al9Cv*?xHJkC"	bd_mgmZUQIqx[{'D.%,
ē9pXh DۮmwYV[bpѕM|#q]|{3؝}[y&fy7*~ N5S*Y#d6=кu?Rc)읺ihGt<38		 \xzF`|O+9ms.Z3wB	Fs8ekX }H׬%zX?nKuqagƎuK	*1@/-HlJ%.=z^Zʅd--rY?@d	K!k"59)O!E%snmd70LAYw4D礱;aB-閾.C6iU*EG')yͫ*1N9
-o	K?^2`\V&۬Ae?aB
O4JOG$J3;-`8KxE3\O$z52ђ1gZDRrxژbD,zJ,$qIs?z~ڂJG˯T7f<&;;0NpM_2axTh;̳4,^Z3cB%S\-l,ڱImg:QP4%a!]t̍v*A[DH$ZKXq6A+zH&oӓ=F8X/7LB=lM5G:6i&ڊ3B>6pkXyFjRh#7ݴhHثy?f#i&8'co_|mY!AF;"-1
(ZA
}=
q<l`,>yAաy ͩͳP+*@
 M|(9ǉM4
FөQH>044FK.8`ܻ-IυuA(Lr4{2cQ.N/La/8d 4m\*G4K2p9ӴfJ硍JZ|53K|!byf*͢sz]TXrb
W`Y"LE/36gއEc(A#m)_²X)5'Q{p攓 6X1&b zOa(Q9?-W[F`7-Z"Ze5t!֓r\J袥V,93ER+,Ĥy4ߒiĒgԙt>O=Q2&d7S%RzW Ǡ	l߱C`f+[dgQ9dC`K,A.k%M5A8nꭷ܇𞚼nn+K,;CCQ|><J>}YGS8f~2ȬęcrLR̀C]·&ca.w7z"=jy+,f,o]탼QF,dmZvZ̦uXHQIPGuP#vP&Q+n͸pmjô
QxvEK]C]=NWlFE5zCv -ή\)M6%ZLv`:=5'íTƛǎ[U0?֨G
hv7"[rN!EP)\ 3X&HS=]'mlT5c[e
b
[lngYp}g0J<y(rIe'{Й>Kd*郯L>X©s$[A!	 t
7Yg"VZ:'U6崂U*Fͬb
h5^JvA~a$8u}
	bkz#i<gus5X89q3AjPB=PK     A D,  	  >   de/cardcontact/smartcardhsmprovider/KeyPairGenerator$Key.classVmWG~6Eh*Z4(jI_lR!H	bVlFXYvO?oϱ{NSO;4{8ܽg{l G"6Z0T(t^jQ+o
_HY(m)z1[p$R%'wT*RiVS[2U|pfSoPruCvd4 8z
R'e;Ho
d`h
rb{NA/C;6J'r&%7S%]35qg:Vo2r{_8Cٕqŕ4Y$u!0wt]hcPlxQxqaQ1̾
-N6$I֌7i}6]JRJBɈ:nƇ۔#*djVO)/1;1}k0t˕*2:Rae͙nVLPHNQ5^:^׌QF׏ĢYbuq4!e{
7#Rnհ0K.ExMBa@^-,R@
7x;^*NLOZ
_Õ㤍d	*KBm0K>d"a6,"LrO
^K'n@|wKۢj?@N9V	d_D8JIen^Y4qwR|$ukyW	={'u2CA!,gt$0WDWtӴ
s,{fK܌Wq͌=fU:>uZ}O^zα.O_pNٜg/ 	r>P$YU8|)̾
g@i bfYL{M;B{Ft>.G^c'MK_"hvur	vncC
X#fs'bNOYCKVST<ZfBs6,؂e1*(nѯ{V*ot8PK     A Q[]    >   de/cardcontact/smartcardhsmprovider/KeyPairGenerator$RSA.classX	|fg!6psB$ Hو]hlgfZ{ڻzTV%h[۪UVG[־7dw$2w BE%d-2	KZ_1,5>T#QݩhjB5K7І{ЬS6CGC%̛m>љlT@\I%zkzAI-5bZB
k[KSQFqG<=3c@H!IU2YJڦ'ufʴe
?	31Kl#PO\$vz,*s1 ((._zRMwT-$G
;@L'5.3FBNihDًX(ah?LLqlfL,zl\UB/KAOZ; jbzQF{+dŴ,b #KxPU5WTâ%y4cX) Vg;EgT)bkw {hM2J`.S;v0&SVxMdU3jhIKtXVR\VrE;JX'tpR`
	ڡRSD,lсMu\9vN3xr8\Pksr2p@ZtE>q3e>vnHtD0f߉$~gl,2u$89@,	1۠r)m1*HY5x {ehIW1{t
fZnc~2/I	apbj;<[Lߒbeb+Zv8=h"O3lf2>󉪙C8Z@GMggTS	jc2>O8*9O3b,[c<|%;$ϱ_\L"\$2Wj@H1|#D)]{nT#׋Kp8⦓BzTSfu]!븒rj:inngNWBgp5W2(5u'Y(^K%HY.F7~K`yzGJlHnV%aղH|L}TjzWf3SɤnP"cao簫~W{N|pr6u4`+a^[;mfd.rZbJT0$2&_1~nKO\05YM<8HmDI܂GU7~k~>< T}2'ܝF}i+/$펒Əd<
O2,?ƣ3Ggu5loe?.'WѹYlߋ'SE9%΍mō5ׯi\Px do-^қwe=xp%zg3ve&wӦm"N*qOX4c*@+
)2?Q?#R;9wz"Ms]aRVŰ̦ըwl:)zAn-1q!s! ϖ(,8͜PyyᇬP[1nq!"f4O_zjGp:lirdJP&(\m/LN84Toi]N:R)*J(Lv:r -ʫYg8
3*HX?370h,Gm!,TUx7)oXOQy~М~jZuӒ<~X[u2L&;TWQMJ%	ɷ4eۛ|b[BI,1]$`D0-1ߟ)i(\W!]K%um<DۏS3$ڔx<)$y^)JGŻ$NwdPT^ ÿ٫j[_:g
n]} 6_/$WZ0
?O"+*M%-b< ֊P]R˝\@=Ԍ"ݍ*zOMCD트Qb
Wqc'aIqKJ*JX绛ChT	nC;&BJc}Gֺ!l
✽:_=c2_}i$?y9MUNB?-@\ƗnAC_kcWEH8پ>o{7D nC-)ԗF:y1_Jf3p9
QZ\InHC͸V܍p Ӹ/S:ɴ	}bnOPND"7C<x[p(nEt&N.EX&jN'fH	(%t/}--b#1@_P+ahfzQ/iڙ4
d=AW6<ɬ[!Aܾ900=<FHFB,ؑP)2bkӠ"{OմUdGZHH{M6i$FgLLضE`GCؗ{)DDdϭx8F$GGR>G2>ExK"(۳ܵZҷJ_)EGi=HP"!zDdOu4	@/]qB*OIW=J]]i<sfCE, 8QDOEtg=QD)D2W֧CxmOּ5iBUk=~oxSMĢwĢW@ل8Gbmٝd_xz@i~&	}t>\b~P?ZMb.:?Q*DhDTPK     A a]>  n  :   de/cardcontact/smartcardhsmprovider/KeyPairGenerator.classQN1=RL\gccb&hF2@0cBg2qQ;+&{_ ث <SCE\h>Lҷ){ɐ?<sNB~Y[,13T {'_72ZX38^H@Er\L~ E8Z%tLAzQԾVIա4^&w1Mn&yVl2ji/H\ߣnQ]B>8u9&LM5P8~{EbjP%籞F .@mlꤊcJwPK     A [    5   de/cardcontact/smartcardhsmprovider/OCFCallback.classRn@=6R-;`âJE*GǎƓ P	$>BIhUeks}'gx裆FMzb&x.!?HvIwd,WcaKĔ3)A$<LdJ+%Fۏ\L툜,ZTd]kvh.>zaKh)OYFE>VVqEa*v9Q(`fZ*L^hC	L1tc]WqYKR&h&v+';ߥ_HR~F"h老3H5Юpc'詹K[rkw<ܠ:
n\q˹R3Mo_}CΌ[D9awqonxPK     A mت  f  I   de/cardcontact/smartcardhsmprovider/PublicKeyAuthenticationCallback.classQ]KA=ĬIVcmb?(DűO}PڗdHnvevV_P)??f!˽3s=?(c	e+q#x(!\)iʧ:ҶPl,;P\
3qd<c]aM|ijAݝv":"!R{hxnԄ09-OLw\0pC#1\ TQL0bɎtC0Tʞ5ZL!<ݧ#Ջ85RF(^R,eNN?NO)rVF?
|޷BɝM[Wj8Lacܫ2l.42kpFVfs#gPK     A ?̌  {	  6   de/cardcontact/smartcardhsmprovider/SecureRandom.classUmS[E=K	iZ
THPH孀	
D+h{Yíɽ{/_ZZu;?g7!
`g=<?#Bh"6C#Is۵TN
.8\hl˟vB$c
\,Ȕiӱ}S^p}eyh{ Q o9req!U3#8NFщ./$W~r}hR`!oѩH[}S1t`JSQgU`@Gp}'Җ-קCxC Y4W|-(jc)+؊(MVP)
teJM<HebQQ@7qLd})YyFb&teC<DH
leu
-,t<¨C_.uV:@cc/Dĝ@1;(5rj{%3nc:&^+ôG0B}\mkl	7Ԉ?S2</?>I^QK#Y$p|Ʊ=߰Qږn:+?38IGƲvyS*
XLyfl,O`hQ4\`i,
P04J(nNPNணsrz;$3H޹e}ȑYaRU\ڢ`l}ZipmnVǫ~9ޓ/2++4ɌIT{"9g5弥lmT+ ̗hE8
LC`WEyQr.y7-]'%wq	5ju7NNb/rK #У\݊eΔ&~@]fw[#? ~ݑHR3O4U1:MC<eKfi_2:o6..!OP* gf4Ug459UXc4}X!^!pw+9vxOMɽgLYLwN0M:_#M7~B{020MadviX	B j sXд!o`A-e])x^2mlcOu)_$;W]gH9{zPK     A 눅j  ,(  <   de/cardcontact/smartcardhsmprovider/SmartCardHSMCipher.classY|Օdfa2@;/0@h`h0%3`G>Zt} *$V-ˮnukwֺۭ[Wa~_Lf{Ϲ?{/ӇpG0a{+|u(NeTnJD,[-(,-k/FQ`qEh$Ȇ#P#ΪLG*EtIudڦFK?*j8[%e>h~A`gU$ffGELҲ6&SfB2֤AkNi8?cp`O~0Q0"oKcv/iPq
ÉPS6KiMc

D3m6$b	-iZ(cF:;狀#f*K&!isgg,mF0
fƗ_ه(5PG9*CLd{166Մ%fh%+nGtX(M3C]m.+"8ne %^\ ?nfimͼ5h
fVUV
( -
˸fG[GB?qK:X2T۝5kp,c3נJ?VN0唳lJ˶k
q1.c ԕ~>ld$6CY3K!5{ZsE'lSL26M:
hc.%m4$#x3hf26db_2l%e t:gyԞN
o:rrW-=$WQ`?1'|M
%?*O]nχV0
a`	GǱD:ӛ3X
Ul8h3	f`LgV֑v;3I])j2J+xVS!щ.?c&W*[1J~\#j,aJV !@-
X:/ړlmgk `&Zܦǃ1n*f1ˇp[
LP/LuqyUdJqY3>eʜ߮ꁯyJ/Dh}"$T7é`8
^إ͠R;D&JxOI	vtf/3N*C =m5(T{ȏ=*`~+`izJІp:cZa<1ƟU{ZLdNM
WPR׃ocRjXd<s
1a%g~<RyQ7;D6g_0KGxs6-yVs*eqͭ4Xk,B׮ljgIyG44iJ)&Q@/{^0/3ia(u-<EE1WdWl[IWL
֭Ff&HfZ;
 =*I2?Wjh-Uf[8ޔeLqRNN:CVǏc΍fN}?OIJL3:Vt<LeCL2Ԛn]v^ǣ囪D"<r9SWZpiU['U]La6Uyϼu/|uĲ.SW_rzQE$F0j[g,U^7d%O:9:h{j1/#%<T(w~|PQ5\6MB=eN|JYi,yJk-JCERnyx%n*VzFh~*c^{HiHx5
O,JF2V2FJq2^pn5L/f+L;3l1-b]g63IQjY6ӚRNW=4\rVX0F";)[cs_rbIVo9Φ@"
g^2֌:CT]ZCP93~lʮ'#;TL6:hnm8j_YTF~dY~Je
ӿ!}7;̱Λ}?sTApmAVEXSze`=볤1Z~J!]Mandס76rwS\q&fRf$&}z骅<AYhR o-;\0g|9ݎfQtLUCH[lꌴ;9;?3ߒb}oBiG(KuK:r|ڒ<]M@KG`|C
QȘ;:PKJwI%u;1w ])q?GuLuYqTzGy
&s f%M>::rŰ\cmo.uiZ;JLQl˨bQbN;ۚ;G
nő[ۿ^鈩<ʐ?櫅0U` @lk]zV"2,bY1, rE!}C0+z1ƖW9lOz#cZK><ʹÅ8Ơv$1)	p$h镉2	O^_tKYX .^6AβOᛋ}Ƃ^ykEg(Ϋm2|N,{0z&Wƺ6|vWOyegF/oO\~,?KYދzq{bMp;< ׸43f5F)t#kغ}=ĹwRf<[R6}kMsӺibL~ݚct̎,Y-1*CqTrseHdU0b&/
\	&2Fhh[Y~6*^^W;x)(*Wy!d,]rp;\D<YxXob jop-1}ݚV!玓umP0k(px2PyRrm5U畀#Oa5q#vv1A[{9~rz۱zcժ5_Y[!sމG/ev[<Tq{K<B/kvdaVh^d-\a?9_r>˳B.ŶJ>0Drl(pl,c*=8݃s&yzP2QѼ}H$R
T?@{ZJG+_E!api_x>B\/F[8mzlJe,nb7
Jt|]vׅp4'SV%rИJ
wZ3[S<gf)\<)&;d
u֟qgb~!3Z>ʆI(QD	2ce
0ʌ99QFE/:ՁͅO;;UWŪb>g1a'N>Ѷ
V
fU0蓧(.6&Bp
<ݎɍ+]`|}k:[*uR߬r\<.v]_ؼO7e߉w*=EzqZ/T{{W{uHP70Q	%Gi_D/E1mg
L\ʜYD^!kϝYi@'{Ý,.#MdSt˃&LAEH$N],\y໤[X8x@|Ib!_b7.zT	l_XN3ȏܗhaK_/TYr)tTy^U/0^oqRX|tSKwoϪ=(,߭|zTai@pp0TMm64 $ab]Re&*o̧W?]PTP}~o !JJ5kf7
H3w3JlL
sd*ف'l%)(;qt>~ɲ~م#r5_7d7ޖ܀+|F{Hn!DneqFV[rr[KբO
Mx_IK
e
Jl#RETJy? xjYkXZ*Ĉ
b?
V[X+tLlCTwt̷IEe}vթ23?U)(V֚{[5j2}/><8ƻub9*֥gŉI4x ݖ͊ЮbxMV,d_Hj2@KeK%k #\:''zo\M&z~$H,w
Iv/C-{D:!8[LxL;xW<7ioe?>g<1 ~H*_N0iŽ-//kXԹNe٩1J;TQ$WQl]:s݊
)!ON.
YݰEgܢ+	UM*`>Q@mSkԥIPK     A đ-  3  B   de/cardcontact/smartcardhsmprovider/SmartCardHSMKeyAgreement.classX	`y~>K/ɂ `[lJ38z ˿eYRti+,]ڒ%a%iN!i#ͮv]kg$dٖȚyo=/ v+``F]dڣOy]3\Jqg**0
M	GD<?fD0Xa<NF|נsrI5IX"_z~"v#9*7͹kJ},5ٰ;Z4L7
~=I0WЂUMzPd*>Z
R7(SɮEHb*1c5#^JVFT:E"$T&~X²6
XsDST]\2DKɆ"
>PN\	gsA,TJl?b+4Ёm_ǣpd7$<"tT&yz$]6tMg|uzuen S'zORl~
z'l>]Zgc
53'|5^%-nm"4Zs.
E=?
CA+nˊ0"6p#iP^x>Lds?|\OLK~VV!'Ta1TXW(ubdM+Gڨbk*,;WV1(p]}>. *n0nD.SOUʓwZZa3^+
[zA1iS/MLH'Q/,>y͈
:F&g)c#+OTi~`)1L'b.
Ѿ՟T9t.
YhǨ1}dnG䦼
pHy
2nL\
tZOӃE_㙭EF窣LqbL8c#Uc#/xAg/Ur33K.9	5/꤬8PittNyC2ɕaLNlQ'xdSUY
04Y0.-q(NtGvQK/+NՌ^B_$FPz@G|Noyuv;y'\WjRzz$MI^"Foa_<3јqu{|X,ꋅO鍄=ao8p!;ru<"VCx1_'1=X>"'S::R~Bø_Q=D&"sq$>F3
!_CaJwbaO`S+tnpEm	R}ј	";	b~'GO$;}>D#Mh#wuόOî/t<$=oЧwMيD[#Z"~M62e]VO	tujJVßh/h<*1QνЋ'Bmmcx'9#SS9dD2a
,y"8(*mCfT'RٮdQʲfPǭA>.eq1e
oI)}dC*M~UW}2KkWda6G{dW`[_˖]dIfs5c<E*&	=_duTY&0qЊjş5|׆/T̯{ERxKm3qXP,/opvDMc_i|eXSr\4_~rs~K$+,^ 0sJ 
8W۸KϰQ#Z)y΁+xd4'<``xXY/bhQn7&uȂFȽF$&	֘;X6]ndk2G]YV~R w.$VjkYF6bVda-_ӟIqgJ~0Ɏ+43#19OU#,7zfQM)!4˧r׈ۼ
DTDf[e/ҁn
-uDEO_G~ôZev72)=p8s8Ayg"]:-z,%"y626 hS
䯆|YWoo+(/_rV?ccX׊dX{	0|6(Iؐ:?䌣Loy;=o:-.{sFĹľ%OM}g5>vvyx
ڍy\qĔ[O{Mٸh7Zc`fpӐ4ȏiDy:4[{-GuVnB,H.8L-\XZOSTYwl?ǉIV`:ջ7><ib.6N]P
s$Op-u&	pވ#x=;܋O>NǻXd7/nW6?/J5ώ᪑ɯCXǏa!UOVw^EMW-%i_JMiS/)!9gzs/?(K
HŬ-!1JkitpÚK2 ?ܕkSQ񍲥5J0|4|b9qUY'jɊ?R{ruK"a\SNMM+@%<H*既iVN'M3ɗh:
\
Bmoj~4ަf
Z"=eۅTe\CVR(t'ig-Ɔ@ -*Lcm~yK(,ZfWMK۞]c3,֟<j~4}Qzl{-{CۧqOQ~Pqf5|<ȸ`7KokU+]^i2zm3xqq6lE.~Ϣ_B'J~5e3F*ᛸߢ}6<w~ʒW{)&a#BmS,֜,pˈ
HҨR8"țb%#g/rά"/eݛEJVUk"+jvYG͖RbPvЙPxPu>Z{tlMYO=}Cl;l	JGYvFC@cP7lYnqG܌-;}fMNc?<ط}
O<'
hnF{6Fq9|q
_T^M|n{ή|M|{rZ11	)6
rbo^Ry,fD{ekIǆcUS)eH^Iw2GPN=QwĲyVt{7q7#W_wbOڃvhR1o]xr2h<s}k;/x/bl$,ii750?b,zMqmqdggi{qLA+H4$TyC&v
-E¢1",6*wYd	uP\0*I)|bJSHsL
m0]",{n*g!VA66,$zڥOmT
Xß~;!2#_PK     A A`Î  v7  >   de/cardcontact/smartcardhsmprovider/SmartCardHSMKeyStore.classZ	`Tչdda	Ip،, !&	 	as&d`2g&,Z[D܊ZwֵhK ]j[>k[_BbAwνs$)0s=߿ᵏ? `
 ^	kBBI+ܞ6V\dmOV}[DERQy#@D/)MVE8h
cP8Ul
%R%ږ4YzYyuiz\PY{d9UF}MCgf+9Vb]$Lf畎c͊wJMOWEo!3D>+	%ju"ъF+LyW(8%
*M!l"R`C0ʎƛDsE2z⚊xsx%&0A[:+5[DCT"kilTз+]AH]}uFOCK">*jUj40ݴFS0
e
3J{T!83HU+:cQb`Wt_*qN,o"+ƣ$0dSp>EUI	+jZ9V+R4LL4A8KֆVYQAQٍZd%eŒ	BĴIFGw$+#	i%=mTl31_蕰Z9TbH\0g`v'ւxjn=֔!ltks3ZCk8L-ZJBZggc{W uc`Dk$jn;8WN5f^f$;oE@V(2
WG.hzO_4UeLXX-~zyW%wFBsf%d*f֒Jw~ ֠DqA1L[	N2
GBQsln6jOTlഊNsWH򄚚Ukhh7NzuY
\ejeEY͜&J);>A-g9\ڐr:\צ}L$؄LlQhhR1zq)ٌ^`kɑ`bFԳ?ob vX'ip+3pį;pd>lC?!^aqk4	JKWf^>e
;L|_kZBʋ/M/$iHI&ǐ3oiy=
kh%@Nz_1UHrA顦ń;M<< csJ%O=Y:t0fk&nA*^1e9Zg,	S7.
%	ZjYimȮi̎+U\``աHQdi"k.Y4U\wKV1zs?^`$t\p`p/x7N>+M׻:3WWP
1
^eU
3O'e%
xMaO$9gN'|M:ؑxE:![&;Ý >bkvTL?aYl㢘Z
r,2🂒\kQ(h¯HY#-bG݅ߘ-y-[C ',NLW!Xh2g.J)!^jL.=XQ=[1J*6\v~M4YsU3k~dU냒h5*YO*13nHޅ#&c.j_u@ĐS<Ԝ2m%ÉHVǟmg
YYCTsKB%k%dI,*I~S??-imOJ|$*Z!vc?> ^,K/jJ.᮴jx,Z!DJ/6e.lOxV+YLa{G@jԱrч
)J-^PΪG5ɤ\)AVE_QCM9SU iYڵ,Ee2\PuJD*-FtR'd!cL)S6llSe枚hTP2Np=jTҘ`ʹJ9sjI<S&d*-h`Vihr)RXrs>!iL@NaYk2e̖95uܐ1p`ed9jL{w,_ecU
cE_޺J4G_ CPBxN7I~k ϐ6ӿZZ&ݘbJ_tc g՞BNTt{Al=+2M,iZ#jwyM'z2xvGcT-:ZBƹҕ/:Qrkj~wFol\psjO:em^
sGOepiD3{ɉfD][8=GݨrՃv)o
"̐t!
&|h'cN	ݓ<DLIN|^[d$|ڂ[&	~]6Yj9**Q7I#zIr}#'3mY	嬬*ը6d+Fe!VqVrG5k-!5r6+16tyL`wC<@mU*ܬZqΈK7>LrT	I6ِtBxkGvv2*$RMUU~zyjLɦZ:g2U;)
kX9)mٴfܬ&hSԮvSfrE.ؿ:NrY}Ў(p8P#\`TnE[S|Jě~yv.<\X5sX[nMa۝JՑXS`ɖ̣D䕀*5{&.蒎+7[_k9:Nrm(p&ڼŚVrDm<-KBeB;P4ZҜY	|ןyIqm=NS',3PZ[`YFs2zs0Rs"~#b[=[dԟ*o(j~P!R@~ۉyƠY=؏Q`A{\stu`nG>"`~Nxx)&
XKZ͙.L.+P˹U\4YvŲ'bX[Kؚ[Z*+)XBI뵲ŤaS[=Ɩr#k9R`?b%Z/Roat[WFWAdH7EѢ)F.cmco}`GpUHVc(Sؔ>s4;`s;}o{0`	.؉&3-<{PCcv,}I`\3ѠKW=cXi.5|G,G6qV#pWn,\ko$n"n&#\yGos5(1Kx[t+V\op~#X!:K(\Zύd͆fBP)#)KJXB9	{{Qv&$t+zji&-q/Q*r"I\vO;FhzY#ki<<b?AdAKXӁhmwR*}A>lGH>#x	*Alށue`zXJ߁WY/QXږJgRc_,~V
/J_yׁ{}ꄶsj R\;	0 谿AwE$.)Bi:ggsHW6c/"Ayy	e-PaD'aĨ[x┮mZ9S6J6kɕ U=@luĽte|kn$]{Uπ(h6pQ	
BG*TGwIٛzJo뙠Ց?zjwAWzwpen0_ޡ|J^JN4
e̭zAgAW=w4Ǖ477i?Lޢ;x]`
~F9}HW[R5CoЌߡ5%2s|򻔲U~Pp55
i%l"sԆ;ϐMr-5Lc
ٜw
<nzr5Ewq*+hKZ_3wxQ:n WIsg1A߲!cLaGvKYg
rE/9(sx]gc 7j8w$7q&r0UnsBїmsж@WH&`Q[.v` #Hs'c{`g/Ji_b>2wa5֕?n7!
2P=7ZFW^қCGۗgK!I*e(fʙ#gAL
F_-2[enSJSFs"|L:XIު6W\M@m(rFnVTP>FEjg
:b;ZMwtb>³KŬt;`xwi&ơGL&RV1F'Z0g>ʳ96Tk2	V.Nfmyw{>t:^/HCxfCݫ7<?TRC7ns>?ӟ*⡫ӌ% 
,^/P&R	Su5|Ε)8WJ6ٮQu6y9	
H@?~M"h,Ch3~$Bpl/[F-U@a)C^tP}K~Qױ~{(_wwe^=UO-իz՞\{z"ʜou2J>Mɧ(A#MÙQc8_/{ְ[۰:oz3{vjz:Sp"%,
ԳQFj6n`9~z>pYC̬ED19Lİ@KJ1f%lnaq'j<*qM8l;mM7C>)d5^n*CɝR+wI-i]I*b.TC3F+AyȮ`<B{;ĳg0RyA}2MLJ"ml9-'[5#_;n,u'&Atc?0R/WlYТq`U,y;
ؕfڲ~v&yvr;{5M.lrAb.#+<ErfEegKŇj'!Dy[iy=r*̥ƻ62W 5eGQ.;Y?8.\
$,O2ލ<,-{})>ɋxEmy{~+YCA8S)1~9zn=Lma	zP^fhD"1mފ6b5^w2ác(chrG'x.;7$cy0OzS,U榱02P%Qc:dW935T敽,%1p[xZJJN=^w}z-%Qւ2e'zL:axh<{hz&s#(AoQ~a	}hj6V%#3~##4.e#._|9˛a-yjyO^,?cK"WxA~W7xw;GK$EOR|> '|֮5Rgk<b]Zk"<Vl;U.Ůg+v=[1K!-=eW9>+ synCGOyB!ZNwc2ǁ[1!Oi e0N{θx+j}ډT̰NeR``cfY1?,t7?ɑ1:9fKHʁeUn~uWq1ɽEg*S;~o_}KKCs]5?ݥYzW+5`SzBpv=,W~Y6N#?3(oG?PK     A qQ  v  C   de/cardcontact/smartcardhsmprovider/SmartCardHSMParameterSpec.classTmoA~Wm}W@}4JhkmZՏ˱;HCؘ2!j23733s/ #F3$dXnk;=5ɰ0/4REB:S0<j	^ȝ\	=dK(ܪqŻ"CM2?q롒^3bz+1D'<mہP#@W%9W2ܷ`?q>Yqv(4~K0d/ݦPxzWRCg<Ȁ8
44U3t !<]=!zJ8<-2"X|av5C5/YSr@4o?0KW{H"&7u)&]t2VpdL_azkb $gH.F??O`;w0$,!NɇHya<W49tyfN0f`Γ0a$e`Q/`.K&2V٤ulsG`IXbp:fx6ʩ
QԈbk>5N>
ܜD'K9O ͊ɹPK     A ~]  ~  P   de/cardcontact/smartcardhsmprovider/SmartCardHSMProvider$KeyPairGenService.classWisG}ۀA$8@l	(8!xKk]IBT$ToʏV!A\ؽ=ӯ_>W mpA!.hZz6m-ya
{Cx0
wHKYHf]0BSuR2m8V훉"QP.ERnIٮTrŇJef.f̪ :DߋrS
zTlVU2DH9Ö
SFы
vc'
iKrR_|V{ԆۤV&:s$cWq o0(]7=hl )8tCGOATcgǵkS+rՖ!GXd8huX%*Br-pN[wiȂFpBp3E
S,Gp%8hp
Sm>*zѢ{
Wqg65)&[3e{Yy֥|@}>w_װp^\d%@-tJɴU(x
%%-DFҵ
L*b
Ro܀!$l[9UEZr%Al)2kZ𣸊k3;/ƺ#YP8Tv3k>LYyaj9'i#lC~ʠ[4ӯo 4-1Zd}u(V
zInk
;.gUkC]{82&}ee1rӐs/Y7Ȧs7ӕ!Хk
,p+͚)25/ӯȫ!oȘ^0<!	f\@q/Z:aruۏ j#a?zћCu$_IC(XP<'`Hq~Y<{n;ͥ!煊A'{R'	Sɪo/P$Ar "ATHZALtIpݶImbR&&+1vJ
Mհm#xl"/bc$j	=űYRy	NFC_5ˇAO%|ys5L4S\|<9B?I_CϠ_G/&m;H9Lp9>yh/SI/Eh;h
HCY\Tsd%B;qdx~?'с.uk'ԯu@;{bXH<VrS3so_HO_Cbѿ PK     A A+    K   de/cardcontact/smartcardhsmprovider/SmartCardHSMProvider$SCHSMService.classV[WUN&Ʉ0
m( mQ+A"0IPdHN2qf9ںVeyys-k3]Ȟ}>?7pTbjQ|4jgT@STV%r4yoR>Mf)".A	ݐVrj\͜blYVQ6m(XŲ%eReR'\A;%YD0zQA_DX 1W!@@uٲ(
2΋ !aS=u!;\"Ԗ<#.aA"\1\ez}g'.bB$7숈K't)	Әg6+m)*q
vϬ9PX2܌4C5=o2r UD<^Dss+-xM @up^ye[3J]aQ[t#OHf>n{;	~HͱȺvReyxOĊUܡj<} O5M~C4[8J
*brib
ad=tK2OϜζ$~jl([I+ŬjnqlN)۲oWUKI	Dye:j#F=%KdEr=P+E:ߥ9Ѷ{w%ٮd8xGcðB~ݝT|zRK͠9bd[kQ
V#!!v$+Ah3FTUF:2Zau(JR-TGs2Wh{C:NHҟwIILl6GO#~H>jHMs#|
a$>!HOn?%Yr3|N_8dZᠲw@:&O~ta|mo$50I
L͕ctHk*JV[7==.A(U\K#ZEl~Fߎ0ዯdM=F"V۱𮀟{_dIzxs".bH0a5lH	H(+\u VJ+Xt^Khqx@9LKAGщMJ`|SzF|""Dt3ZԴ`"	/N;y!S}#gIL'l7
$Ƀ<p_PK     A #!  1R  >   de/cardcontact/smartcardhsmprovider/SmartCardHSMProvider.class<	`Tյ眗ed	밇,, $K22	hEUHRw/U[Һ/y$o˼=ܳsϹ|! 	
)B
znP]@@KnXEe&weUEm⪓ʊJOqr=.oSnu6l;Z[\U]RQ\Ӡ |AB?k!R@`st^wpBFFAkp47]L\M-|EE?nt׻z@4`8`|ECZ/w-N
F=Ct5
h]RPxVWL
#*^z_gmz=vL
oq{]rW.r4L>0.V9WЩ1?$<
z<`4L}Bfu:$պ.j$ޔ(7,/x|M9|܀SrK}MMdCCCA31aҤI`UaPvڠ
1I<abA1,@(|&Cl^HhM M%(uzka1iPޤK}̱T(ᨌiӠ
o1I@jUQa)yZ
,sxPJ@\aPk^c	.s\ ef׬<Qpk=	B.XB
+U®
,
͘4x&hV).qbb-*x5A+V<vք?jQCްpMs_BTѭO}^ZL 1q~ip:;I0Ҹ@a
1Z5XCLp6#A)3l0!AȘRU8;y\x
"dw#vY||
.h6Bb滍*oRhlZV9v+ 
]Up5Tr!0ZA-lkzvE);E҅2X+
En&k<kY!de -TX
T
.i-B>PBV(p
`܅TzAǄrv1H{vQ8aJvv
_aJƯ4~
vC;,ZT;Xc3:I"8f=ӣ1=£}4o,}<r{K&22>͜Y>UxUݥjuP5QxL5xB#gAV= Vdi
OJk
CY<)Tx^EG`Jd.{TxA^,LAfJUH~XbWU^usd	*sH̰E-gp̒"_M+$BkCzf}f,+6xaQ+`x9YuyKJAxsŘ)k]6hTTq_įk+l
GS^X8g.OgHsKeZύ./S6Q'UqcqY0cS
$`
6JB/fr*/ET+

_3"">8&~ষ	K湵Pň
|wS^kw~疡ۓ[
?68ȔEDb]

(.Xu
SVf*]n?s65rM/
6F3V.)i˙S 'φvm-M+EOMPlaV˕N2aL6LcZ%:
$ia6MRzq
q]\[\4 L~E'L9چǱ	3{|Xr)sA8T\GqT\䬎d!zf"wyLiy}3^c¸uJ5/QWoӦ7f|cA7x|Jn	ZY`\?=v\{lcOv\{7ql
spuq51ĐD
'sv[˦e&/?~G[
#uk)Dhm4^'P1X$J8̋
lQ#llDAl.QQ6
67#l,4؈b(9\6l,ek6,CHe%5XP>leb+&>Q$9nz/m[08;~uG؛$בI&I`<6<&:>~(6tNٰa{Ig9/
rsML`ǈ!4	\cĒ`avcĒ;]^Q^lyX#[^ \7jpKRlUskybY:E[.ffE)˪
*m;ܭ\RbB:Tr
/Gk
ӼL
yzY6㚶#Mr}UQP\)b|,6 A>(htx(8$ lT|M~]]6>Ȇ"a3j=U{'{NNqHall$z8hW.
{x`A5~WآU(+(Q;5w!8B]4I]nְ]Z8Ėz)hߣ^Af8+w.ش
<nW@!+cVl.=1Z >>LmbXF*!9>Aɺ勑	|ah_g%F`_X@n'$WTc8f(s)qK3\ieKr2mxz|WqFTakug x^ۗg^qJwzC߉R%
_W8ClP5^%wF[:}%s/+mWI@֎o_5TC9V-p<lN]PdI&	*k^5`_i1~ٍç*y_oDrܫ*~0-HHqbKll
DL]YT]_
ec.omcW/we[t[UIg65´4hH[Y:GyeF4R(jcbCoRsz)Odȭ4j(ɰ
aޡ^ry*=`ߒMT'QP/Ao7urh!ԇ}FTb\KgS8	Q
7=Hm4cq<BFC~Ɓi_ۉHy#`hsPd
(hFci"։$Э8v@*M(%]T,rĢB0{!(_Q{t&vʦ\
h2¬nN8K+4Et$[NZ:YAb&:1ItZs
ȫhRAcF,^kfPb솂89ͥyCoNd{BɛL"g}rHرhKGaP̭!-f)<
RiaX杮3̺[t;sQQUܨ16$ak%rUșgL;Ոɱ4!PQ3'<NˠY97놳h9v;xhF'Љ^%]tɥ*yx
'5UƕB;5RJaq.ׅ"mױߵ^=(LʓZTjVN\-`Pd~z_%eM85?L)*÷,Pc
J(aǥN*\gv>bLcbަ`NPcv:Ub35:je-4:GGv:S|.$`2;K%A@21J(1
.`](.Xe
|	'c6y`l}u
MtJ[4J\qO+'&I׋cKc豵8p
>jJ[fX\)!vyjuCR1pX[.OHO-xx;e$}K^<ԲJFJW:k]LM`E$3%y֥db3.sxej2JwiD]5Imkkz)U5
p/21yTB-u	ս|qiWE:Wq5׊f'awfwyuST[drvx%ҤJ#rGo
{ىqeSE.(Ẅ(wHY|:d9b d&.û̾[L:aPLPf'g ͜_UM^huWey^ݓTdeldvV]IBvxח\bcQbV_|*axEuu%2
޽1ݨUرf7q,$dZs<(o`-Y>Ώt&Ӝ͒%WSqiTَ<M^;y<[G%Ǳ5eS]
.طv*-K!+-VERiޮ
̢,ӿB9%{({/	==Y!7`9;b.2aB/ȳZ}
2W6',}{(슦V>*}YQ6jsH2y54``{VZQ_IW$*IP_F+a{PpBÚjl뫈"`pcOUpHʰ`D6!M
`nB6 m!Ϲ.pP>{?-I}|1a|2ǚ	!YfI+SLt
ϭp|NLb; sCdxA蓙?30T?3q7?OMoSi{Xv(YRfCi^T`eu@;28j`1(t'^=5Qϼ,g7KCKɰ%7\-]8\Ȕ΃p>E6Z
i㱄t7jPeY<P$S'X')A$82a[`rnaDTVJ8VQ-YQ0U4U4U4f届YEXEp%T8`%\n7@Ș7pTU&`Jo;Pf!ş
<c*,4TR[Y)pN9.3;"VbȀ9`OQ8쁓df=t2gm09kY))Ȇj[`Pz#@RSa	
n%`ߝ,}]0gY3v,야9YLM3o9vS;JYA{L_ /RTCUw m
p/$f˼6Texi3fo[vH)lp;d(ġ`|&S@GqVʓ<e33"c?C92
-4MA!'苋UTH6n =am[8iڅp_bx0Z6S~.T њm5yf}\0k;ܾW:{a֎-"U!R#dY0)a93]cm\ڋLG,bZsG'QO-Sm 
8gne}v)~G<1X+n86Btކ9e&4?gr<1	U?h%_H_\Gصg?1?;L c? 2'
HP4sPca%Dt`Nd#O6 =#!zߞ	w_>i0'-#ppTKOsV[N8CS="h\(^џ]dc#s(ȅ G[&TH!o?9񴲙VN'$525ZZ069
VQ'JZ$(ܠ/(og;t;
S]c7\#{F|e+O:v҄|ߴ>Ts;L:Pu`Ϭ%{E}ځbɀEfPOf$CȍJ8.
tNlǬer%BcsTNcf2:3ig'"͉EDH(i1#4܁UnM,nO]n஌=с''2pbqlZ8c=	:5w`0u	Sܘ <ˁgq<?HZD؁8D0pŽ&)VXaM|E'胥0k`a)qlDfWWq
~x=a\c782<sdKùx^BE
/;R܉_u?ŭ
^?uDx=
ƛȉ7FQ)njԊ;hEgtC}wsCo>RRQ
Prie>>Jዊ_Q	_W7[ʝR;[^4l*oaB9\>_OsiYWftذ#o3ol"َ-2~~̙cҎ\Rql?#iEaE9?xfPY AO9/`8~ko`2~3;02jYy,cedX)S#">WQ7П9S3B,'6)GHpY|L1֜=Gcۡqx@А(T9fk@C.}hg##!0Fxy4>b4v)qV@/<'KQe.6Ez ҳ a߭>\=ׁ/<˂v|Qsot	jp;4uϦ
h.cGˤ"ȥbJ`-*IT%zYʱ^Გ6Jگ%e	F _)3lC,'zc4U$UXL,$
˄vj\B+!NHH˘( كomR{,\t]Yϔ=g>?/S8.iUuyvV^ZagÃu\|pISR[|n߽-}_;ʔ/#jFHg}f=-0l50l ̠̥PIx:N
HAmtF:.*-\Ogm	Act><MH]a-^~炗ޠ+;	<7w#,;\;-иa\nBL࿘x|ER\YeB#Nbǖpl#<{LrEWU0Igp4mit-undAot3,mG&VXVD{7L_ |*%qݒCA?&e⣝FdkN+33xeJ;;mcM*CyBhI$?M)
%ܜFʔe*2M**ۤ2
"F-#ʹQuhRs8N)o⹇AisfV_iy1q05:5:vL͎n$ǎGXkSqUU$ʹ輪9/ӛޡ?|Iv]GI'?`	hO~{ۿ҇tޯ"!+>1>''T)۫¦Z
{P!Q/>
;ha9V`~Hd+{qM>Ovh7(X'?Ϧ?)g0DقHRFa3ܜɧs?v-qP];(avOCxnde$qC	M	A?
)`޲X2&rʍ/+#ike˘D^.ȌɌ0ZdadL1F迒FeFrԶ@9kmz
nlN	6)
E K2qsSܯ_{wKYCrWȬgPֲ|ʅ`W.b/%0B2`r9SUPl]k\!s~`IqTFnBD?ݠE6"j諍/2'N5*&FELl4kl,JHO=t.!u A7^;e!LZF9.HQDwR%XPfaP!mJ?iTxT8~l 4)8cKPe8PK     A oNnS    M   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$NONEwithECDSA.classVmWW~n*Z
h$ZUJ !5H%Iݸ/kk+9m?Gb@hޝ33/{ ZOhOϤ'u49>
_UAPET4+3
G91YJ2b)gt&ы,AxnJuhrQ[be(2ŗZ9I";iZŘ].[%bV=vBrOśOfSٱI]mE(xKAu"T݌W1fYLͩ&h8ఊ(-C
I0A	e	0DKp:uikѨ41[XKzN{C%Ċ$.gN
1arcmǺq]dQ9>"tC;m4*:b$mcɜ*._,	򌊏q昍 W0b"! qMkvp:l1\"Wc+D^M.gx
	i&sΫ$a i"K	֊m7_y*fpXX٤M$%\ʂ{We#]Sx^'6AYY-WB[Z0>^GXn&s8*a`=ġߦ8Oy34<ǥ4nΤnt Y;(9stxe[Q.Ъ=o&UEJ5y-Y#<}3UqD
ʄ	io	{&yBQṖCRjԭ&&wS[btM1GRp()oL~3kVN%7M~T唧LÙJ˚m< |Iavw;x߆k?]g=nuxڻ}OՂM>yCpe&n@rlW8Ś~xfymȯ]ŀtkrqoL:(T.:QD]u`7~t}k];w7z+_e]oOᭋU܀`tt;܂UGP$3{#Cb1g@L&7[ ApyI@I=¿U^XGL*O.?A揺
⡟Xu\S#{jowG }<=qR5
-1f_2[=n.V\^
u^Z)բO SM|OS|}w
A~'[_PK     A _t֌  =  K   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$NONEwithRSA.classVmWG~
VAMBL@H"!	TE%d7݀/V<s~ob?$3{w}_;C/CKj&5;&ah6K-
щf>-Px$Yi8Z։%r`ʖIatZS8Þ;?fU#emE5#I;n_Kk8ZUah:ťHx:_bط Cc/VH*'Ttb2Όg&ftGQ0kO务c8bHt㖥Tr!`\+Џ
N8wz4ŸjO愮_(|4A&0t'(V\iᰂSm1enͭ=˷-)&h1Z%뒙3*"W;>dhsv1;4":b
Ƌy8/DUTW䨊KNuZDQ)bW.
MW\ɚLʳB$_ڡ^q	\*h6y̬h(b8T1-?ǳ/q<`!XÐ5-^,/;iu7&{Ťut۶P*_+V>e}^',sU[,rj~:Vv0=xnhEpPg.+H+zH;{fQ5qۖ
IK	,]<W^obI8BqCoٍ*7l91*լ 
(o?ը|5m^t԰׎&iı=Mu-Т]-Oy W"tM#w釓oRp<(}:8iV,B0K)Oqۉ6)	V6G9ĮҮ-г֮@t4>{;<ހM8S-(Hj" w:ɮ=SZ۞cő#.<u.ut\I.RcxI`I_ez.}{voPHzJ5o͑l طCU,Kq_dz=E8S下r6"Np5hxO)\㕹YeI=b9A:.cf1|nGħ	nhBϑn
=?⅝ŋ?Oe%%IbG0]G)`#tE7D1(MaE(I68Y6I8XEv6-)&9Y[/%aU(_\uoRuTA>2ww.|#wrm&/PK     A   `  M   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA1withECDSA.classRJ#A=eɪݽ>xDq\%ILfGDUNW>ۻ k`P;jp)ݫ;Be8.ޖ~$t;J#"g=YD-Z`=<U'%ahK%lGi<cq*X$?4Z%B%|!yۨ&wI#
ȠkIWbFF)#X4]>G穞ysawR=WB9L:{S܊ƒz{$RbeW_/TA<+u (pt=
J`2G9*tDbSdwӘfsGrPK     A H  u  S   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA1withRSAPKCS1PSS.classRJ@=km' XkqK&IO#٨ (b;3s&|w`z Pٵ2SvT5pПCE.VCЍ 6h%+wUCj[D`sՌhз"eoijoNRtsUR0pg6VpFu'AHV;EHWօV~kapާn&u1Ce|)qݎLL9N{ERB$~KkFoCtSUE/25y{0Bg"HO([|(R. &Mb3Ng0Fs)K?PK     A s  u  S   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA1withRSAPKCS1V15.classRJ@=kmW|
>xATllӥ]Il|P?gؙ9̜3' [XǐEinnyOK^^`Y9M\5(nJwTt-BK'[!]%d(>CZܭ\k<lV2l
)3fYʧ
%0BI)jҪZ7BJΕ4;mUkbEG<hE;Y/*_Jcg[f$DQ08dX\0zs9BU
HQ検dn(YálcOlL`L6iNa&\-'<,WPK     A }  i  O   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA224withECDSA.classR]KA=|jꪭMЇFJM)Hj4+y7C2e+_Ї 6Z;09l8#T"a!ʌeBBU8v HA&FDBNj Z`'a"DKBJyO^wKs<[/b*X$C?4Z%B
	GVDW>NSLƧRӘF"l?f2§{=A=¼fU-ɏZi)oǎ@ff%XddڏxPwJ(pu7<
^{++j
/~2Vr.xLk|tyCpPK     A  Z}І  i  O   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA256withECDSA.classR]KA=D&GЇZAJt-}fWf',}|J?@;0was{fJa}gqyeA0{tjᎃBBe8,ޒ~$t+J#"g]:YL%Z`=v"LOKJ&doyn6NŹch_7K&[WΊzp_M79Z☪
Ƞ=XČx4qShe{h:*#Yŋ6	ο	EN5w'n	0H+keYyKv%2343 I"$[>ҏ9j?UAWP}>^
D~~.F1s3GL>SΫ9PK     A |&    U   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA256withRSAPKCS1PSS.classRJ@=6h5ޯ(
*^ kUtiWD6[. ?HIQ	f9=uLYH1dyiweuB5Vyw-d:E|V<9mtfبKq&QRW.cH`rikIwn@h[UWEp*hpg?xCJ1da*U +ֹԧ')kB~3"_o-}a"-	jo>if=bAc_.JR{?."$0
̠o1P
:h/,:I;PBy#?lHlbl#ԝh2=$ZHxXr$PK     A 0    U   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA256withRSAPKCS1V15.classRJ@=c5>Pp
U"HA*t+c:#i"i.Wě.ĂZL`{sg ;X0^ڥsh$l^7iO!mb &nE.W75wֹPw*hʊPyΩ#>
%}K}Jss[h%ꯐr
Cg]oţ2Uj!*dpQԨuo<Bbr̕652\y9E[^5PD_4|̐vrőe:.J%Bj{<0Q0H7szh[JXH=P݃Q:EbcLL`l
ԝL<l
<,PK     A Un  i  O   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA384withECDSA.classRNA=t.VQb B`4,1!Sb]H}CdvZ'~R} M̝{29'x`P;;8(2"h*Tʨ%	=ĈXhcQ6T
C섟C5LhIX<P2	٫miN`{.E2CU2/+_rV՟'jcwU"ɸ/ǌx4qOhe9X4#>Z?=	»#TD<L5n	0H~TJvK
df:ifqHݎEI^X~ī:(+xo(~+Wfwxo\C<ʹ\13<
<˫9ýPK     A Ê    U   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA384withRSAPKCS1PSS.classR]kA=$[njTp
!P"kndfWf'wIUb&t={\]
9X!EuxA:vE	xu*.p	C82~2Ʀ8|3LE
숏B"iF':!.Jӿ9~(/NHcP§ˣ6UJc@ȷ!ՑM'|!#^7d8F
c>/<5	Ο>E_(6L?I5PT2mz*8})e(6v
bowk|sC9W%+C8>&2.5l3Sz{G\N],:xPSPK     A yz܅    U   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA384withRSAPKCS1V15.classRJ@=kMkwE`/A
RKMv%MdIEH 
^09}| ]=Nious@H<s0OEue=2&za2lՅrUw_sWa+ͰukYv"H`9rd纭ݹ#}woiNB_s~v~GHB?񟷟QC*%_eH:-K_TڭPb{UdTIݔ!鯷FYxcHzKk[O2NVؗ/\hu)5yB=}s}^dn$(KVRTwaEaQ6c.9Sb'0GS1
PK     A ^  i  O   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA512withECDSA.classR]KA=D&GЇZEAJt-}fWf'|*GTt==sao}RXY\]^qP$Gޅ2n`PPK(%	݊ĈYWhcN=jI1XӒ0e	ٷ[i~ރSq.X$m?4Z%W!	V"WMλ8jC%2uO>'1#^#DZ,oVMo~{AS][B9L{:ZzVޒcIL==Hk2֫cCڏxUP} (pu/x_(]r߇Qx(r.`&{I]|z
yu9/pPK     A :    U   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA512withRSAPKCS1PSS.classR]kA=7dcӭimkłVMJ@RؑfHF6ev.(>jBg`ýg9??xgr?pP +m'gAP韴y_*Tʨ%)?fđ46&ėz/R`G
=oHۏewQ5~e45:7(ӿQÌ*eo@(ՑͦCeaȈ׍i~
D'/OqGHK2ǆ駩[	UL>T֝CIxJl'N,="eڡL4T]xװgst_{(<U>A
hXE̔6̺EO3߁PK     A ծ    U   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA512withRSAPKCS1V15.classRJ@=km%Z^PAD+B)HZ/ʚ.Jf7诈>ZL`g0sva lc@ÀS.n7
$NS400xzTrVSHdة殶W:aF.D`sȆu[	sOR3+ҜvBr~v~Wj-!_QC*eƐ,u2k"}QmW!V%pWJFuL
n"-q(oEhfH;A[@Ff]r#" Ux
2 
,!K79BUHP4-f%(i¢lӋ1\&r (u'0O`6b?PK     A 0͂    ?   de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature.classX_=0ZD#kw	(M*BE"òlf|iHnMؗm44616Mii=0.I|3q^~nǏ2k`	;9#>fͱT2c˦ڛʤʃJPR$n%fvsnTl0Zx*aX1XԅXH%/4udT:Hds̶Rd,YU=T˞@VOt
rLJ\J6;O6GdҰ}X#ddۍL21zhٶuװ6uG`E1\Ъ5
c={Ow	6	tQhf|f:T(ഀ>+5!%Gm,zBdt*3q#ǩM#F)lC*א1lh0JCv){-Z؁ޢF.'J1KݓzFRm vNfl,>
%={MF8:g$H`hnRi`:)òLj+\bm<
M~9{Z'H
	΋3STߑ5<>$qvVjl04X6kZef{%ه*?6AL`鑪(MfXv?+`  ԭF#.1~9--|fs4gt$_VVrȉ >"kʄQ#cώ0DɸQMpYG
:j'k4jV^Fަ&HC0$p2SHsFЀS@v|xTCr5X..(bOڦzٻ/:z.r2~|G(uN3!O;6:dXr۪Sef@RiGR]G΅fF<pKfl4>G
-Wotx9B|se֒ZSx#=$Ղ3Sȭ01v*g(.k56Ngb7V۟ JY$-%@+#pȻ).P6e`enF.h@<<Y$/흡{	N857vs1s̊R2Cu+!|5rR?m)ֽ4Eչ?O/
_.mZ]8 K=[Hk|iXPg/BAjX
@_.<-2-m~Ȍ*,2
(!Y{2Ro=_|[ii*آ|.en~Iz}\sw)^m~	t;߇2 ?Va5۟B~Ӗ?ʖɿa(Q5Q>fUip$p$µX1}j AF%ax; 8'I;J;N}
fbGQe.pByXu=	b<)^gGz껂w_Gm*b[x^Il6KЮymP)7^C币c9AOa=ė1n?2FЀ8#M aZ8wW9|^]U/Ǘx_ʨ=Ex2,A>ViDnQwCu'u_P'Q;'E`N7Mf[\TH{Is)I_+Mi?~#|4M!Ii.jnL~젪teP>_PBO)nH %~ Aҝ 93*߭mg><ޕ\֠ءYРhH̦~i'C2aRI+XK%sSHMT+JXAgk'njYC)l:Ϩ=	yi۶vF}?GE?Ryw=}_P@.9"qx
!Dx*%u@~5槴?,
	`և?V>6и۪}`_	%Yd?Q.щ y143Wp:89oҾHG	?^}vϴӴNW}7iA{
#PK     A            	          A    META-INF/PK     A !W:   Q              )   META-INF/MANIFEST.MFPK     A                      A   de/PK     A                      A   de/cardcontact/PK     A            $          A   de/cardcontact/smartcardhsmprovider/PK     A ?b	    6           +  de/cardcontact/smartcardhsmprovider/KeyGenerator.classPK     A М  }  =           
  de/cardcontact/smartcardhsmprovider/KeyPairGenerator$EC.classPK     A D,  	  >             de/cardcontact/smartcardhsmprovider/KeyPairGenerator$Key.classPK     A Q[]    >           m  de/cardcontact/smartcardhsmprovider/KeyPairGenerator$RSA.classPK     A a]>  n  :           r(  de/cardcontact/smartcardhsmprovider/KeyPairGenerator.classPK     A [    5           *  de/cardcontact/smartcardhsmprovider/OCFCallback.classPK     A mت  f  I           ,  de/cardcontact/smartcardhsmprovider/PublicKeyAuthenticationCallback.classPK     A ?̌  {	  6           +.  de/cardcontact/smartcardhsmprovider/SecureRandom.classPK     A 눅j  ,(  <           3  de/cardcontact/smartcardhsmprovider/SmartCardHSMCipher.classPK     A đ-  3  B           E  de/cardcontact/smartcardhsmprovider/SmartCardHSMKeyAgreement.classPK     A A`Î  v7  >           \U  de/cardcontact/smartcardhsmprovider/SmartCardHSMKeyStore.classPK     A qQ  v  C           Fn  de/cardcontact/smartcardhsmprovider/SmartCardHSMParameterSpec.classPK     A ~]  ~  P           p  de/cardcontact/smartcardhsmprovider/SmartCardHSMProvider$KeyPairGenService.classPK     A A+    K           v  de/cardcontact/smartcardhsmprovider/SmartCardHSMProvider$SCHSMService.classPK     A #!  1R  >           %|  de/cardcontact/smartcardhsmprovider/SmartCardHSMProvider.classPK     A oNnS    M           U  de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$NONEwithECDSA.classPK     A _t֌  =  K             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$NONEwithRSA.classPK     A   `  M             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA1withECDSA.classPK     A H  u  S             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA1withRSAPKCS1PSS.classPK     A s  u  S             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA1withRSAPKCS1V15.classPK     A }  i  O           կ  de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA224withECDSA.classPK     A  Z}І  i  O           ˱  de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA256withECDSA.classPK     A |&    U             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA256withRSAPKCS1PSS.classPK     A 0    U             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA256withRSAPKCS1V15.classPK     A Un  i  O             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA384withECDSA.classPK     A Ê    U             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA384withRSAPKCS1PSS.classPK     A yz܅    U             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA384withRSAPKCS1V15.classPK     A ^  i  O             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA512withECDSA.classPK     A :    U             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA512withRSAPKCS1PSS.classPK     A ծ    U             de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature$SHA512withRSAPKCS1V15.classPK     A 0͂    ?           {  de/cardcontact/smartcardhsmprovider/SmartCardHSMSignature.classPK    $ $       PK     A            	   META-INF/ PK     A #;   R      META-INF/MANIFEST.MFMLK-.
K-*ϳR03
.HMLLN,!@r9y%h\\ PK     A               de/ PK     A               de/cardcontact/ PK     A               de/cardcontact/ctapi/ PK     A GD
        de/cardcontact/ctapi/CTAPI.classW	x\Ulo2y-i CYB0IPL6&!%-^g^LLg^BÎ bE5i6QA@TEEVTP{I'Kk?{{9s{ދ B%~&mkZn0@β-g?VQ04DtC8(e$\*#$#kOML3Mii99Sr'{䭕%TkdoT9Vfn2T8JN杚lG*+LI'MoY.Eum\j8F:VJ\:qjz6ZksFn55p99^_[1ι:yQ~ tH
'ۻtPluE$VC5vs9c@DPc+8Óesbk$*
H7lJYإԉ:N"{3r9;S:ceGK/q
>.PdH˓@eS\p& Tn{Zְt|D-ıL	 ] T8.65q
:LTԄ {WpIxEhm>۱z1߇q@9S<e]y\gf*VttjXc
`ǣF la͌*kq4 qZ:6&GrGJuD*&^[
d\	` ;5\/^7}f:i8py҅9yz3{3t4SYւ~`QSlgQ8ON
Yg@/.q.}0LYbϤӔP3
qj]3q%(_yxYoUJ2H0j`.V,;
ymTLqϛ7rn7,2йL9Q#$7)
ZV2ZO:;]ڕhoL,})Iv9{D[$?Ihjhji픔MmMR1eH$E}qJ	
]+A:~iCkWs}SUYYVr]V7fRfFWZ(&E='\hl,d	:ZB:`~5<,pn3NluI=
L@<H2zךvcmLHw9K=bV1i\ZkY:zd
N$YUZ
Ӥڵ a\˙FɆ8E' A&w37snJ>;=i&}WF=YEђ6=^K&Gsb3)}1^c玈!gBDUA4i7ǅuɴw
ȊEm\\fhFԎR8O$qN6Nw&M~ATiʶH ۫uJ㯲J+7V/";៲ٝݟ1poVx,7v$5hafL/[;9Qw
5{otN6Ao	 |da՝Ojxg\=vq8>RD%neYοZ0o9Fη	.{
)}䗕+z!] RMjC
zSw;0AEyWW9Q)&*(Y1r6:#SQ(ӱ`Υy~\5U]ٷ9zߣ4BsyߡJ b	)JrxrFsy<l%aTua~ӌ<nZ`+Tt@YcAgY`?em.?#7q8[M.^,+.\ɵE֑HR˴hدpr0;+BÈwFChA\6Pu:<
ȯ+U(k.63Ҿף773q#zp62% <o|JA?tSIcH#~'zi,6w<KOF(Gx~-OKO7@;6g9)K
aJ/y%1? s]vb|kI)#pw2wѲ;_H%o(˿gӈ0Z:=ih,mBc$L{TΦ-
W8S`NEA!mFIECO!ۊh]U[G+$bp~K`;.evhp;.^6ӦOX:|'jQ@e.aLQrH<1ٛqkhhTRhd:|bLx/U]`0k/6k6mR`Ts>C#Li@`		aBQY9ySj=vE?M"𪘅h5q^
&YboG+~G	('D)E~&Kj45]{S;Bx {|J7D--/CM;9K\;J+D3>lmҢa;$}h kw1=a$G*Y9E@(KteJ'daD;V	*zIp;My:6X1"LxMq?+~7/oxя PK     A Lz,    )   de/cardcontact/ctapi/CTAPIException.classJQcdi"Jhj
!
z+F/CZ Lљ)h.2Xp- <2wyRM
!MButmͨwH*Oh(CcbVTUEWQ}Fa
c"\}~V8TM*AN%sXY{c]gXRڟon8	{ c lb	.ˬ2(pGAd/sc)ruSG(qWLa
e *XOYtPK     A SX    (   de/cardcontact/ctapi/CTAPITerminal.classQj@=cK*:M˃$@.%04,
M	Gή݆33{ .#˅a\\??E(|T	zWB%eO6t$%.|H""%:niEKX&XIઋ0QHX<txR[wy)&\8<ô+HD*{
ZL^*Ce0z19õ'f`^p{>6V1mQ%P>M <G]45to1rz&Z9ڰPWĸű}y;c8^moo[zwW=,j>3Mxɴ/L;LBmsUwUFz"cO	A^:C~I~YO#e7M/PK     A 9     &   de/cardcontact/ctapi/ICTAPIEvent.classm
0Eo|R\,EADA((*c$RS~?""យv0@C4"V2$$qIbrT[PbO"<W"uVno%dB+z{$ߍqמw$?>Gi&o$zaB,")ʨ82Bq]PK     A               de/cardcontact/opencard/ PK     A               de/cardcontact/opencard/eac/ PK     A D   /.  ;   de/cardcontact/opencard/eac/CardVerifiableCertificate.classZ	|Td7<@a3H6A6	IL yIq@p}_]Kԭ@AkŵvVhV~&d[{9x̖OdW7W@\	v1=/ᨻ_cDMA<_] Y\g@1Z+J53c` jx`wix4a4.aa8B0:nuG-3ֹ낭fxIV3jO	&rQ7"t̊<@IVAAfQ:F(sqWƢmf jm0ύEhGuy_@p\]OFB]S̨n{p"q`TQYtb\U%l&,r阄dP1řV2^
:P.e*k­0g#i|:(Y"3-K%
n98Ipu@OuiK(u+t|e{4,2(`2gj,PFfJ]\RxZc1pt^+:ʅ8UCz,R"#570pCt0U|`rf(j6yP8 (\hEMoF_(MXY8LG 49'e-ܨV|T>]XOM-p
ΎZsawMS嚚ꅍkT>sX&]U1crT"8v 6>p{?o)tb`=VB٠#Pz1zj=$D&q1IΜ6]oё$W8&q0#	ѦZ#Msr%ĩ)NXr^x8LUzzz.FM:n-p2TdNF*p-jL'R.=5lL
u7+tp~rF養=1w11H-{nN|W,-F-
%Ux@ǃQkcTGtliZF46mjm 8J"WezTcJ7 C<z:#E3Q'G^T՜q}*t8 pRڪpt20}<MVQUq
Q1U3lZH%|Ohx/I)_C!aĄ\{ xM c?^S jo61rsB/u_	_#R\uưJyUvR6\-~̪qc!Qו!~&f_Qe7Zß_vSRV0vG[{t}HjxW}R:wG*2)S+b!>3=̝xu|OC#tJkpQ0l9)cۋF̞C:>=9PIɉFxrdj)Ʀ.]r$7MT
8%O%jr=}e!Ub8e{oqũ{L"j~W[ch8
b:n7i⒢`QB0WE-pQdr\X##u6OVLKOw(keLN,))2Ke"]&
c{nUB|B$F=id&2Ys,!;ofU\	,f?HzSJ27KQNe((dDmla4B~_iY,t_r.sPҦ;ó
Om͗)R3Qm'ߕg]0=+v
C,\Hkm2z&z31ZͅVK)Т@POe'u<c[r"r&1-tNf!Mc,UTePɨ;0oE%
r:IUL~ &gv/RPc]Z&m:L|k9Mzt꜌ҋ|SZi0uI(jd&~e
{LնlEz=߅@%ɹU^<OUxY	ӥ]6xet(.wݦF;F7)./E*gy^.B.8A Gvǹ@Ks|)@M
]Te/nR\53Yi$
Fm׫
V|U{][}IMfU5Wjo؆fI7Yլ7Fغ.OLfӉbekDrnP}S63~\$I`HFb]S7v]&<svHCیH[jc^u}n|빺,%Ը]0'lmyI*l`R&])
@pNDQE0Ό!ӛrltCO/7x辟ڃZ3bn M_¾:chd/.6fwX6>ngޒr\Qs6Nf@1g D;v 
Awxffὐ잻BёClw:%6ОxX#ޗvL[iEU(CՇ4SE_LEfPKWexʠ'PwoZK껍AWXL_Xc.<ذ>D0L(Y5B&y#N#gή["b.lkW:F;BB5~\y%j䃮{K@{pЇ}z{s' m>ߌW23L6F
zm	Ċ3G]ipjq7>A9ٰ8 #Էb?yo8>ǳ46@S_RZ ]Z׉]^*0R=
:1<cwbrSb|>*ߍHcǬ]
ø@WT.(sjʲ	V=PXϗAc6a8U6rdiل\,0S8pʰ
58a
qΆA|6-h2rNRCΫ
&$?FʷNQrmi:6֐w4RA#˞hX>R%Ep.ܜe%v,rIŘn[wm4'#EƲJi;0d'Zh+rm	r:5t49kz3z/[^..E[Sg:ЏwsF*c-сlS_RD1~\p5u-]YkR.Uzt)]Nܕ*
t5]K@7@ ^Ut%B2y7Ik[i,lȤAy1oGOA#sS؂[nq|-ww.h+Y(Cs857e/vN(tѩ N(tp07x3s|_^ǝܜm8^.BGaNoKS[
=PZ$ރ	Vv$-`w3aEF}a  #XN:棴.܄81bW^<gY4K〈-fP(&u{k){,<'{9&p	1^ȵa$rǍ>>3yKUN%l敖cG<'ZـInY<feJ]s'lz"8t/w&v!DEdUq4de+)=4Pϑ$R'H]$JEK>|~&	JդvM,RdrSJQ}mvNuJn*Oa
#v[5BĚٝZuVwS*Oa,{%6M-9лp!>OT>$23A%?IeL:/RH'UwMDډ(
_r2y2'cIgdarl:}*%qNetF*>9!LC/#/L%	h,H쇒~nq9?E$ʘPK339gÄ1/]	C笄|2P%NKReϲ)L#SjT-.m|4(NY,{SeEj"KR8[e'1PeHTH2dy+m(/1O#G\sCgcK	d;Y_pWVPrR8UNueʔ^<uS)ѝaav7Xa8FLHkl%[x`8BBGO-aK0\~fS)9qB_uk 7CQ|j^[ΪlвrN\֞
'qآ\i߲)q	%A)STzIAW_~{" e8.[e\{*Z{y&:冽n7Y$&rk*VJeJUNoH_ل9Aob9+JdZRl"[Br5d:~\OdKC'ɫ+yUk6"T0Noi<N^*#CQIPunC)V^czzi=d=b=߶A!"ʿPK     A G2	  :"  4   de/cardcontact/opencard/eac/ChipAuthentication.classY{`[y}+K780$~%΋@"+N08'm%$$Ĕm]K#km:hyEvHƠ/h{eΑ,$ޣs\?xP	VUAex4sQUˀ["bׇT$gp>wm=d/c3Ѱ&x5`قD>Z5mF"5 (3-U#cV:X:|&梔r򨥓Ýgd*I12iI&֟׻%cNaAmNKE3j>NWOoz팝
q"r9Վ|\`ąH~:;2V<[D!E1\	ΫeP&w7zPʪ&WPw)*AltF9AXa+珥q=nES /%a*v2[ѨX6kQ+F2Jb%B}JToRʱ-~2L_rRxe<LÕtyԕ@ez^\
\ab#61eRʔ5oΞTfk_֪6	{킠YEK`ADݷ-9yyw)sj
S{mbBIro_,\<wB`5cOq
ifpԋmZt+#slDy
\43
RޥSpŢQXC}&" NL9[v,J}E7zDMǁpT`S
c[iQ5Gǻa؞MHHȠo*NhܾVhnovПGxp30q##Qu`^&qM<ۑH,vUҢk6}3UqTi^'"v^'`j&>;KΠb`룧U2KyƣzvS_WFbݒ7XFEC&f$2mnQEp
 7>FCWV	\dG7>̧cmNn{sNSUgSƠPKpTVq?U畝]
/p'hvM-Dym1j8<A)΃axBڣɁqE>ƖIZT?.@D.|67*ԹqJ?DoFQ-u#GЃ'񔁯)=dN5SeJFL#I0{&͕Sf;	]?7[Bߣt~f-T3 9-68wE.7}h^vgW4ٶԬn57_Mߙlc(mڪl?sIОP^4掔5@?1SB	T#?/
N)Cj3fG$cIz2=L/T,Ưs*KiF(5̠MU-4IDw&~XY7rVX?*`9ٓ"4.Kox[%pG bH)q-!ь>+w;=n=`qK!x
oj 1YӖ
7n]MOh$2WUAՋTO+TR2ScƖh܊1Gdϟ+C*Xާ#+Йl{x܎yd!|\$mgjBS.ޥܥe)fy4t\l
?a^eJ*~x$DS(;S-Z3d)+^X
q`\4|`gmsgs[pGGNA`|-F*SV<uD`8?kn*%LY2lPfeiU/Up\6=܆

S6N邷)5Ⱥ@GVz٩?j.+ULOyrZ?Ȑu\5xp6'{'$
L(=U+,<fE/EYɼ{R7hfG
UROƖYMe)i}ebax^.
th^	5WvduƉ*o(M2+bG4c3qDvtq2a1);[Rvdx2¹fLѾ}󦝤ۡ
i~znrh$]H[oaXLi្F
aOD~]cSog′P^"K'C4{e2iGLOy"+wLi?ؘUp	._i
PݗcʞP/DUOV+qz-DM/vZ%螀9[¯z/W~{~b!$î~sM͡No/D}_]9j!5JcNMq̫;GxV$A>',&kQ
i--MHy!RRskjO.ŃX2e#<7PQ-0'y'WKkij[kkGy9Nсt
"dMm[GH\6{CK%|F7yv=8QJ*Ҟ2V׫ra\-R9fQ:gxԆ;jC[;@ʢ)l={X._3n,Em<rǢ!/`υ
Xjw&(/+dӾH-;(y-L䚂?sQ[G+Ռo'dv1*$ j`pSyY_4L%5Y̤!YbPn̽Y|dk[+\cp~|l(>h~#B
mb+:,Cpطo8%o_KZ<'xdbՌY{Gy#idt[aY9a*cXsW+)+(+!x)}~lpssza+b<3EWL>{ >v7f{ʏG->58J
"H,]uYFxA  p_ )8̛W%w^$0_ 	qxpJ|TTIYZ<AVV,dZzu.Ks=kF\'KKh	9<*kW<EzeqϡWؾRa`P>Dxjr֕ <oa80[
\Rܣrj!QqUrNp
TU3cH,7,źCxw*xenD?o;E
N]|wDS\*t3f̵4qr?^_KXC
Y~yZ}!M¼HX66;|>bnK;XK^U(wj
[OJԕ$]FR;A5rvTj7/SzIih.!3җ7gLZ~v:UFcƟ?x,$fא
cS/^lsyVd՝|cqwmSEAF	I6aoa ??Oȯ0_'~D95o{R-kLCx`5/7za̒V=2@8w-~*[I+gy[XЛ?bU-_A}ڍ@,Ezbx-+ksTxTdem^LwCiϧJMVV֪ΓExϷ8,͙j ET(.Fn6P7ҐoZG	uG:|Sc{w;bz(Q+s}L3Ws&P#p(f-03Fz8"cH,;6PK     A =Z  .  0   de/cardcontact/opencard/eac/EACCardService.classZ	|$ @I !!	A"I$C3O20s XoA<bۭv׶umkݵj=VK?$3{ݓO 89Ld̀y<Y6C{}4Yׄ5/r6VPآA(e	"'Rb$v'ѠPGY߾|wY]md`h?!ÌX
v{2(pEa`Ίlh1y?Κ1HB8DS$t(i:\}jBF[,_L"8>ﻌ=s^A)4Q?1mSCqx$Vw+N3y/pb6J<A޲-vHWx}H+4EoD`4!ˌ0ca8iXľ%#
n[(FUDCp)w+]?kX	91l6cAr*rK5,q&VdRYM p¬d1­JJ-ffd'V`q5!JSAƟM%Q,ʳP5|]fsZOpbdaΎ*kQ#6f
)U&8֦kO:GBQO
:؟cpPhY0:̦`W#q6'6A"QPc+z،5D`/PаMGX
c 0R
G(q2ΏVЦ\8bN6${HeIdIm5hSQ9q.`a(x6/UNi'Ԏ)L
S)9^&:%^>B.T0MXt:^cv[6n}@^"jB9&sC?qDG{:t{<V +	Ս؃}\q9 M)QlT2fH*`Hճ};VJ:u<5o1Qmҙ5\zܠr]#gqUQÁ/QFpw+Rs=rU(_,oq lPp+!w@%d$f6=ܭ>B阸yImJUA/1EX1
xWQbM!(H`c8	%cahi'D?Upu<g`S5CI>{lϊ='=d$Yބ5%lS!?u~H/Gj1IipWg'׉W:^8*`Y~FW]`iJT!MP2?
C{-qkD'j+7R%r²t-ԙF(d'㟤:aV~kO	i&7-&Uզ.3iwF}S_,yuxRǯD)U^ůuvK7##7FkOk3<uLHw~5%M2#PC.wseAu`P[	'=i/5Ug	̻KvV='ϧ3
&e6>wXiv񕿺$'u	٤H=NdcqU0L:e+I2Ӈp)ƸTkپwrόR"mpM+m4GX9ڒX&A.TPd<¬~Oozŷg4Yv6MiTIP0U̧4CXP&v$;j?TZ
xΦ:E+i5OЛ]U[@2R:
ͥj>R"P mTDTJǪPoG\D8OxI
Q{NKҠVק3uZN+8(fg.EeG8`؃gg鴪lHU9ǔ3**שpJMAM(H%pG"eHB\g@y*BF"sjjVֹ+5oihlqo-UuShIx&VL5~6pͻ>fJKV0=áHb498j&</TsX_
Ѯ]f:
ɫcX[*Hw%#
.3TaÉ+/(\Ny5]n	Ȱΰr<+lT3e[Q*ԃV>%ԝjMT뗁xeD!jS-/b㇩?-L0dqgzfN4qxϞz[Z#ide/8yI
bpVħ9dQ#/
w<GsaFWfo;H1h/o:mn+F:"diz9B.2NndD-ݸA?cT6|W09힉We40eZpC1Zia(DRH;pX[nqA+u\4Uzc7(1K=^(rTa|nVϵvz` ;? p6!'qyKp	Ux:6Hgvc\eiq iZ*taґ^iѫewr<' w[r73==晐E:Fg<7~i}{qB]T~3u$']1@
cn3
y[# Q&z-G=~E7UTj>2)!"h \Eg2X]K?sA@t527PQvG1bRUQL}fVi8?k1nIfv9Dz3	dffr*W;%Ȣːڮ:|jU`*=lÅlbV~J;6*R@^ 0[Kz0(y1{P2uBx.Vڏ'vi'y^Fz;KtnR{:?絻,?eE/c+(@}ɉװ>^rQL+lŊ֒e=8逝y沩u @\X+|Ne	d5"C~l"PXrO@I%H C&7č=XPڋXך{=9{u"Xi.{~E14g2]/reŰ304m$윥#vw5VuM"	QC*`zP#h/]~S
r2G-VC4夡\f
.S;
{3|qwc^lzG}	[[l(-b*bO;@_dMfq&V6X;6*9KپYI_Ƽne]7t5Miܞ_v\ʊpYWb8pd{?~{ F3x+-d}8j־w&l G,"ͦF x '#GQ81actx*)	@TBd(G2iOQ^/2ryCyG_`0Ywep$|}*2rÕ')}9.sB6@;1N%eRչ\vI$JlW!r)rW/^nu 6<Wz"1{s\9\{#~7+?ΕS÷	'rbx&?<w_W']>\gzmw2=LËX8/|p[qF/k'
sx{6~>e-dM.ZQ
~L
	
3@c4zRϮPWV65rb4mdlNk1]W'
"V%c6Sd}9GZO«\pCG5Tix5ɷЭmV'Gz14H>.}Abϡq~9?0XZTSI	We
E򼔧){]R9'pyf1C9rPK:56cƗk
tCs/$Ѥ#˝rrr%ýg	g߁Vjvb*~t1/f+}+ol~u;t؇?pS#wOpG~|WgpR!Iz\`cYtGs0
:T(؇*1K+MVVNrVu*#ކ2xaOڨї)e{gximUW<>ҔR9cի՘c%i</Cc8ȎŦkXMNlP4>_ōvI%EgpόLIW@}2h*G$d˯ImLFf5$?5%M1їH҃+KfМ^M׏E-y1*,vWbLzeVϳv 
$='Qeq"?cT}6XY$Ke	x|˹SLj+ F*#AJx$ͣ%4+*VBlEB/.~ZRKpFZ~vL^SBw+<n{83P
%ol^apA_9|bA|hhnp_s_USR
{
ٹ=|YJB@^6zHQ=L!"aCq|^T"zR\PK     A k    '   de/cardcontact/opencard/eac/PKCS8.class}SN@=KhB))&".E
Bxr6KjH6GXgv̙~u
Ptđ`=mi
CD!N31B1a.LnuC3l!zLrf޺?"P:Z)lnNyP4}ŮhǞ$F%SF/lI6xĠ5DHՖFފ
?m7o˃gتhbRŔ3LMMÊaud6;eY扎24+|jcяj7lG(vajAxu*4b9;\]k'mynھ#~rnG.8'+ijKm'%)u0rQD.E9f}{DTr'm@;Lg>nO(\l;Rg-pEbO7 Qi}FI;=p	=:59V: /`><(J&E"+O$?.^b{+L|R<v>%r)FoɷFQkP,b)*<CDVD
ķ@(c7WPvo)NH RTPK     A {  V  =   de/cardcontact/opencard/eac/StandardizedDomainParameter.classTKsT_"\rBڄINGc҄4S	5QE#gðb/`ŮÂMԙ:t?O0{aH=c};{9(1,Te6VLlWmZ3*zo:0mnh`pDcm kdJ\*&{w;kRWpv\nηە͑xpug
pvfs3/1V]j1ڝwc˗ݼ1V精"H1(
S4IL)Hq\eU6Jff=(6Yfi6>Yk[2S5p`x
] ~c:
Cdf1]X"uUDdͫTp**TV1bLńOLB*&3d(dd^׾߱̝Y6K2$Juˬ͆#"wi{նu;캦lPj8.9,5ZRPr7+2й6̓fx oҍZjZ©eWH8nԛ
˾M?_ y&p0 GpB bg=)^b
PMboHn3&})>-dl/D|?~>g}dQ놰ő&F`kܒ%-D@~o˔2s|T"M2ՇH$u~
#r;,uT@w"ԷJ/U<(k$H\wW;4_KW?<[HQhu*{FE'S?ن8B@'8G@6n0_L%>䃈$$+QI\I#ɪ".ɚ*YI>~u?pHk9"نIvNz\c|tǸq6C=ӴSw䟦`3'͟_f
I4PK     A CZ&     >   de/cardcontact/opencard/eac/TerminalAuthenticationSigner.class}1OA7`bH,-!*j\c1G6s8 ?[//|0]a9|\{Ϳn+eg{Q-ZZ%&bװ Ze砄헖֯U"']N.
qVɎ˶^6Iu/`H  _/`<mJc|PK     A lm'  e  ,   de/cardcontact/opencard/eac/TrustStore.class]OAaK.R-EYEXAJjxlvKOx~Ax?xvڔP	y=?߾:H2|*g雺f*
?lڦ; Ec&TtMK/
2 BPe48Fy
Wopۛk\7yXpnwcK̄kRь.mPZ4u:pBRm ]ED 
wKT(!Үc+
.㊌*:CoMC-f-Ә[s|;\p7[E
}RRAnzߢKXz[E1Bd`4u6dt35NA;沩g->BCw8IgV4rܩ`4iW2{&2yԧɣ"y4xGr!6Wl-zxSG{ Q
NA|Ni,w4TЭmEjBtӕOS[*Ll%H*iIǷr`3s}g9jsj]rbڠ3W6㨤Ex}xDGYG3#	:\ăS\/G2
" C^E+"{FE᣽	R>=bX#"h/4#D|;G'IR0N	<iΊ,&PM4~Vw}>T~;+@~H-1<)R$'>:wй{ķވ2J{ezQ{$D+#U;;G=<ո^ŏTLq\NgمzF&z(V%siPK     A                de/cardcontact/opencard/eac/cvc/ PK     A 8  n  :   de/cardcontact/opencard/eac/cvc/AuthenticatedRequest.classVmWG~""),bmJHV0۰ʲw' _zj=rNQmld!z!ɽw{gfU|Mhұ-"ip7o8L:EaIb$%(li\]$<<e֬JrRab3eۓn ԙleдMy;j<׊vd:vEtr/ñCi隶Zb8#Dׂesxժ}d׮u+$ۍw48N0	$
BScem{pR{:zqj,B{-F}
N2bNylbY88~H
Jbj/(]ftqL8G iiCgMmՀUF.}P\%E++JҴikYӓ|!c0<	X|7W_tɨ/iG/E%iH37[\F\/*'&F(qcz-B
cw(Scc{^1i2hXV]DRQv\S¥Hu6B66%Wй
cRރjibctC	QmSG᧺{mdqTj{ִdiy^3|cp+]SCrѤc:0OP3&B`H.ttː10{3;=Mi2,MbEVg""tY^!p}6⤂ٛ'CuNvJp5pkDk4#ak[R+訜SvI1^T]kxR']J^XǪo1nV^qDҖ[-b&^	,g%ެ,ۿw@deMc-܌=OP~pJ
C5ыhRo]4![ƨ#	Y-D/`mhOYYW|ԋp. PWI 3|N|I(j1f.P%838Z8Fu#noN~G%g7\^-?M;W͛'Ye	mbwk&&}׾#R}	i$iQ7H!zOHc(*=+_#eJ[b<<4_Zܤn"o}
Xl a(m:C?omGJ60ʼk1b,
(4Y  ˰+1RNE63"C
|+?6N?E<1$}\<_a}]PK     A x    2   de/cardcontact/opencard/eac/cvc/CVCGenerator.classWW[cz 7%؁WvbQmlҀM
ر-<􄍛MZidq^N}N_s'H@,?{3mͧ>cjLjs^	;9~vyNjQz~
2x,NeR}cȹtKpSF"#zѸLzΌ#zn{,UܝqG#Oˤtm/
`b6P ''Rwk][xM7	n*$f{zs).rԘ[h#ĤMc:˪/OY#mSD\%jm~?F=Z-<6`'$߾BHy2(B:)PvSux	~?6qD`mQg6i{YW
4JoT6Mi+%ysl5*b>&еƒOX,h%G(,2T*Jq̦\m/=es02hk28Izҝc2ÓId#<}))рa<mFsk/شUIK}I(ii8c,8CH]VaI$.rQyfyL0wTC7`b1)\}ԨsC9j9j,#E'&Ù\f!U~)f"QtWj/-|\ɴ<u'm'!A/+/8I/	A+i̪aNq4g]0:6NlkfL(bp 5/	)U<%j"+ަf:d*i<Q:P'G68ks苬[Jxy_ѝ~ ޾&0PoMYuXf|yxsW{xSQ_sr^~H*mY~60-݋t3TNۮ7簰uo`P<M׽vQ݀@;{:/alxM2xj[Uه(d)#5f9lFS6 |,	wlCGg.OǪJ KlFrּkscrw`19T@$&n( "˼b1uA= pzeMeݘ<(-?]݊8걃[|0T7Cuz_=#h= "DV By;Cqr.y (܋om|;vpRZP+	Rh}M;zX͕Xb
WR&籾W:)5VvV8Jg3o/6@ۻt{x=UTz竨T 7
TbR,q!_Bj	aWMQj4CA+h|JL-E ?$ÏNtfR).[&Q'өƻ3n.z&
6]959vC7qMt@pc$n!7sy
fc>km݅WT{h vyahFAH6t!ȢlcKEW"neWCf1~B/]o@q9~hIKe
(׌D5j}Ԛ辏'M&p?v8;FNP*ȟRcKN:{1>^躇&|e|OCLVo3MѶm
6l߰:H/(KmI}4WǂZ|=nSߧ+Kƺ"]OZ PK     A )Ӛ{  
  3   de/cardcontact/opencard/eac/cvc/CVCertificate.classVVULCr6($\B/j("7	Po!LfҙI _+ZoQ[]+9>{ۗ}'8lFT@HF4ng4tƬ0sLp-X"owC<CWkck<foAe諣Lǵ+2k4Cӄn$Co27n&ҡs`IdPN"RԽ6:(0<-Gm\D%D~{wU]DBV)CO2}xO*q[DxQSE֮xdS `} feM]2 `H0Fڪ%(mzj:9'ZJx$suV ex'Ā@DՍشmätC| bO0{YȢ
XH"'iصMufhJ@	cR%-Fj`
]RyA">!eG*f"Rd[JϚ-؂!%Of
ַ2Lh)ah9cZVM\GHQ=@	+CZ)V
-a-CHƍ4u\#v=bm<oCsaLS^6w=	yaഇ) U QQhQ`d#
&t/cHFgƲ\<,+a0ܭ}"}2!gC	4,3f?X,Z{R14G- (=/p3c?iY{|.;vuԟ_ݼ	n)ݫAu408{U>ÝU
]>CʓTX$ّtv%l)5:TBztX^_zth#t^'il_bVxN>+|MnKDYI.{C	y
)W0g7<,?En'Oǘ%#̕0.%c,y[e%cjb@3]$Ksa>;ʘOc<7mh6('vc	@=;)M޲M-U1d (Tm#UǆVl\cmM+Kיiǳc׳z
EPK     A BT  
  <   de/cardcontact/opencard/eac/cvc/CVCertificateGenerator.classkS1 PWPm"Z,rSEemMivft?d- ,!&<M篯|MhE1\7
'oږ4Len
S7ΦCC`TXB&#lZDHqhÇ@qG0
w@
Ya-%V'5Ckٱ"~d^UC_frC_$TN
]8b
09PԶDTEmG7%V./}VC7z,[p~L
ܔ'4qGTw]Y8REA'Ӌ\I|c)zOe\a+TifިBB5疲5
q"26:gi0\+,r0NQ!\@Lg?BPB2&V n1>VxoinM:2|8Ŕxܡ5i{Y$Xƅ0jF{k|;3|ElAaEtҤ<aZ;KFD-4JY5ȢXg9螇e!sDVT]p0'\e9\onU'E?@sC~3;Wj3E~jLOF"\w`0®8&*{O\
 Z(ےt%]T;TvFe(	k'COAbц!$zӸGT*R#-()'qRn\0y@PF<x҃b:!5I2vXwҊ],Ț >,5^3Ě݇XdmVo#kXa)Sa
r7\X}%JW&MD30
RtR&>6KRe~_%	ٽKc|U@e\oPK     A Tk  Y  C   de/cardcontact/opencard/eac/cvc/CVCertificateRequestGenerator.classVmWG~,J@KKIxYJ@J(%4monl~{%s~w6bPBNfgw< xGFZ%xx0媮Y2MwTMrMW}]O?&5ǲڦ
p3) +0s(n;ƶk/J`lkrw}M-rd΁^]J0Hz)7~wͼ~PsPk];Yn
3Iۣ*˴!Poڱ&֛p{[y(.pa-t!C>$dP41+{ W IsVaX\ٱe|$]>QpCs0KV~
'wg!_pִu
j39Dn4,5v9JN$k{2h11	0T=Q#Px+&0L`'oh+NHѧȣ)cז~yAJffVj=ȶJpQ3<tN8<X4rl4L"JFc*̜Jf.ZesǶ^j _0shc/Sz.*x%Kb:v}DTY}DVLSF$
D%8eOB7ye$2.f_0tZ͓fr=Kh ;oe).
'J{no0㖮SmGcP6Wyeq6cDrkp3.6CRs-̸*ｇBE(΁&1okWoi.&1:=B#^gɡ-cQm$;ig/[1$Y|U+i/PlP`RA>lV!hPA7mHW I
$|4S*B)z
 $)de
)%8A(။t"]E݃byk\__S+ķi,ȫ:U@UϰEh7F==I5 2!Fq?
xf?kѴ&V쟑рC,psX]-cѥa Cէ$0u
 ~F1#NK 
KYpsMv`S.J
m%Jؓ`Ix(	J<ċjDgPK     A $)
    5   de/cardcontact/opencard/eac/cvc/CertificateBody.classY[vau""%M  @vgedYggWQmc6&Qӛb[i6M^<?O=g9{?79|$]Eׯx})LR4UdyTO6:?`0%mz}5N8/g׵iD|jfۨj3jE1&qs:NЅY(b*+ŞrTem4T#Hð(vCVM5.pH{Z>W|1ږ]
9uNnBS$̿jPq7k~>+[2<Lpr Mm]gؔYcKwME~WNyD5V0,Haܧd-|OFXG%<T||
,GfpZ(+>O4h>Oo8SBkNl&	]؂CA`XId*ZsJ!\K!QAdY3i`i8yʉhq(or;A5j[kH6iQvJhu
30a*wЉ.z@q6WL6u<=.F/{S3OIxG	o&a_GǭfFl<‏aʹhH(bEyuxmEk#nHPTTŽ߅!+a3i.Lp}m`H`"°n#A2"ǥ)3M^H8Ȱ!.ߤ($fha.e8ONp3<`C @nM@2PH5qEʻa42`؉|ї%2#7|aGr~NV5knݚn5p[Nی;$*CMVʄ~w&xS/R{*(m;i+,
&z?	y64)ߚ upk3&~V8)ʔ4A-FK*<lOvˆ߭I9R_R~;CǖB	mroPw:QY) n4"ڀt$gb$S\/eC;吕62j늰oKs's#gԣ{M)|ð9+j"N{(tRUzv˩<
<J*;"+ =%kɽ~/hݐi٩GҨֆNL:]7'v*Y؁_Qɧ_>h>)s3~MD?:~'c~+=òy@բbbF2]7{:d	6ɚ?P$T3|1®AcQ/Y>(JX'̰pzQ:@ńM:0AF^[+4AXL_DQ&ex"x~_.T^TYT0{W0oRh(WRi{*JJc#?.RcDphʱKQxPiD	t=M:bqg!=x"i{9'~II,~l9o$ͥqs]8AZum	IJv$A6w]X]t!o&{bL6mmhZJao;+!GB@	Q	u%$[s^$/oUcWͣX{%X'chsEe5lyHLmx}TH	UHbHG꾎{/\hˬ.?ÒBg\L#Л}P{x\'V&}<eŇkXrO'FRBMz,ԯ_[><T`"yQ-P:Ab9|D?fEڏ0q
uAI5|Jҽ8(sl.ݑ[G6dtu,S(_"+c24	.R:ճ.oSJ&JęZ8@7
`M'70zY>ë]e&	g}1h,r%,pVRKJSW;mu8Zh~KȲ|z^A3r)cyB$ܒ$9iM$r}-tj$3<R+ER(VLQIO3N}yJ,<y$݅ȅobiK0$1(mVk&
tNQpIP8NQLfK-
QBE2Rp 8%7$i2F&~nqxNÝ[g/ލeV387eΉ"}@[/>$Gư-Je(Ψe;Xc?B.g	r99'kp޷Ǻ­1|JVnbMGuĨ{.(aj̤v~l˃ߐ6@sN}?/(/PK     A F  l  5   de/cardcontact/opencard/eac/cvc/CertificateDate.classTNA-Kr) *E-B1Ԕ6M]ʚRFDc/0-4ml3g|s3?~`+
\d^!1L
UEV4RrSo2F.gVͪi3C.VJn
<蓡x/Y1lMi2a6
g^r PӼV>7ΐ;ib(2ƼV7|M]4ybޡn
^I^ Cl>Hzqtv0d2l)qVYjWFN;.gF嵆-hg'	Vb
J=L%U$vXJY!"E)7{ѡ22([ounꙌ%-ɬh/]nxWWn<7yiG;J6ψt\?4*Ʈ>,
_"`ɚq`vpp$yعV_F(e'}>CI1.EREn/s5t~㗸}I).%#O5G>&)J:ƧHv<6qH+kuuDBBn#(ia()NN, <׿N3^fgU3|agsPRVIAȣG>bDHSnmSJ,_;<z`*Slh{c4w*dizfV"lȻlKPK     A 3    >   de/cardcontact/opencard/eac/cvc/CertificateEffectiveDate.classUmSU=l
h+@l}
F`*lvc&//Zg)37?.[@u&};<y~-TADCoe]śUs%5Ʀi-3/޲-.EakKXn{4`-2N Hmڬ#`C۵n󙲆?mn:ܭE55kpeGK41$&GШ|iT1eTvixnMGR*ҥ$iL9KWd`C
A\uP2!,yw·K`k'F:o$kBtO8nhH'D,?jlhxFg!dQtLp3wCdg;-0މtR$!|G=*AKJ؋<ґEJ<fddI5MiDQGݻ<T`Hc{!b8VMg^%˭zE4x
EE7m5'{MQ̜+76)
س9OVo.IBPTQI|儽ON굚XUݔO*n*yϓlƒ^ՏCD`<jRź
ljZ7/fmoGy;,
k2|x*sy;vpm!:l<C<wU;HA躢w_c$UCaTᇛqY]yCoCًgf~Bfщ'`}h?g% }}|"uqi_9@46ifP<,`Hl{=ЁM}>⁖Re.\~HVzpsHG$q"Y"7Bk
.7AXod&a &;O>[i|?F1S&ɟ2i[9,w,Gk+7@ѬJH"_F{iדc\dw~SJX$J:5|I1e|x8,\PK     A :O    ?   de/cardcontact/opencard/eac/cvc/CertificateExpirationDate.classUmSU=7d$-V0&vm 
4@Sn6af7Au2~?J}3f99 n@Q
}IAa!{
u$7ᶅƆanFIxzh\qi=1DWf efAG	
zgd0>~lr,1Hl57l4m&gf%Y~bGTaQVǗLf4]i9!˲,YpXJbXAh%7e[=ۧVKUB#FuxD%`_W4\M-1vH>7$:K\d㺆l9LR1C1ꏄ)5
7wRvLA$LMn%eH7vG,=dFw2]ij C-)J.|`
z%weON#LJ
	2*ܠ*ʴTcZ[Y(3O1QSq1ɪ3%AÁN.^BQuQ㞥dܰ(\zoFЃYL7x; P(N|r뺠ze2OӦ?YIL1gG{JȩXf]W!7܆uc*c>#y3bXձu
_a0gn0uU4G6OG'ܸ/>wǪiN@+meUBm/[A^/|
3\{%[7
]yqjz7Coø"fgf~DfB?O~AWxDҾ(simStA9X0y x
}B)DM}>je&Ԓ\|HVzpGH$	"Y 7Jk
8AXow&C~UM=`_{=<8N1$
m鈲⁲"-
<?fUB"4"K0KL)a.(V%i+mw0q_PK     A o  8
  L   de/cardcontact/opencard/eac/cvc/CertificateHolderAuthorizationTemplate.classVSW]!.A|`,$PVP%mBDhV]lPþ_[V;БN_O	a&swg8jPj<*V^5
[Q9
rEj4-[TæVў1-bks:1x2o04%6hF		 33mU31_fh[i
!Ȑ2f3@eA=T2G'n)JTWhڶ4C{e~NW	W:XP&#.[ڜfkDz8(r㣐Fha[bb@ #$8n4Z&ᘌ82#6f8^A7aD$t[*|vQU'|MBDe j)'wU>/8)ᔌ8ܘ<킢yjx%s]/n:C2)yTN=Q1eBL
=""e\E:yWhkz߲ńVIb2.a=[+?4W,!'::0&"oxxs$$Z+$=I)qMi+qQNb\š5`8+mT6Mm\UAn[,1/\*~X*@~GtFHjN25J
bTb0IqeLs4;ҟ~s1ԖnLT2C}ބ]R3$S>RVFԹ0e>Xؗ^{Fh`o}=ulUBz/I10*4g|	i`dD)6^U/=*t(PYT>	Kd9`6we>ɉ+_Cs/;[Bw,Әt1]RB:);\ç|%|!zܗmk%,/U(
;y9[\[	fy钊iͩ19n܊JT	0eQ~zhLj4fiB-:fnziY<^݅[4""O!EkPXBxd'h\!ɱӸ^H8O.IQC>0g5OvM/[?t,kDh+
/xe=3zW~L,a&;DQp|-:+~z?;`"8}f$;6Ie QU`(kqx(&ߓ"@Fx#U{!Zt*7U]R򚷉Wsn8edޏ{xw,p6yq)mym
`@IeR*[M/x?h% yiWPM-#;ve'v"seoҙ4h#_(ʠ	PE0'	-t+(#O{fuT9$}|@nZ}B#|E zPK     A u+{    @   de/cardcontact/opencard/eac/cvc/CertificateHolderReference.classUmSW~nِ."*51BJRJ +fsIV6
?L:?vJ:2SCTL Iv={^<? E!5DtADAMLבܔi"Nn3,K1=[£ ^~Лk!*/NEw3['ռmbH)˱KVm63΢SC\ǻH0ğSLHrTNQt25=àyEnO{jY8r)*r(P`90/04lɾgpe*WagخSzf\qE!3Rdj33;ܮAL3\<
e긦jK,:I%pdrska0&'`KZQi@miQKhT7q.L9p@f-*B$= myI둠P<d)mug,KH[%bG h6qY^aHaxh.x$֙T-煷Pٮ5YjpFd"S͊9'aJ^F0Qj0D )n2 m:V=SZo*Rh3+}ʢ%Ga|A:/<<C:۰65|TarqEг!eč:9w[9ݮV&K*qu"N<`6JdmXR;6}k!z(z0+$JBrՋ0;0bc|GjІD:F'tzC
C=Laѵ/h6Fow-ܧY<=鮷X +Z$;J
iwh (CAqdh^Aíгu^a
f`H Co 6A:Pp09?BiidPaW0 jJ *>{
_*FW0qPK     A ڱp  !  E   de/cardcontact/opencard/eac/cvc/CertificationAuthorityReference.classURG=#	V(Qp1BX"b,)`Krf쎰ARyKU~ I\~C>*NJGI}ٿ~
BXCDGZJ"mrdLUqZp3mna\ZM׳C!<=BS"ioy9Cmb:ށ0~ZZѶc;'YϥVb8
q"̷yN9$=)S"[8eIY
1ڶ(s;k駦EGŰ/"FK(.
[po)a?*16a3l)p=sB3L}9uѲ)|H2S*~@?C6kRh=ŇB:.ښ/<SRI1?Jj5긂4CD5!&az5|Khո7P|,LIi0t<itK灚[:n#Ck[`t\⣢$>qS%.^Ȓd;oJZΣ&У()ln-EEss_Zɻ%zu,G*E--l
,5n8#r"fEo0%5ǫaӀC@	4FkSGcKn3Ōr
⊢<җ	
)Q<}BO<jFC:Z5|D *`9hQ}z;?x#>Uf*z坪8&|"m{ɒJ&}q_÷T
EҖN(5G=BV>4f daG{!C
A#hG_о=t&_NbW}zƩ5:􏻊[Z1K_e) U`͑GM
i:S4CAqtxdCT^A՟нUx1	f`]0E,a;!PBT+
!"8Ak)|c-=dSYPޠa,
,szG+F1s PK     A Ͷ  -  4   de/cardcontact/opencard/eac/cvc/ECPublicKeyTLV.classY	`TNfybdd$"&! D0`a$3q2	}imU\k[i]Q4AcֶVjW[[Z.Ew{3$3|s}gw=gO<`"
N.ǟ
vh(VVFBlʚBaqy5p[ RXjǌf#Z:
` c`0nU]έ*cg}zAv,rz#6wƌh4S097MyF&7/Fclc1N3-ͅu;;bF 3#to0n=JS?
cS
ȋq<&
KBPM('+	4IVzW'
rsk,i^uBRa:NL[5Mѡ68\.`m hAP
ԱCY:
0[0UvX/X(hJG!jc>`y
da!4,ұ۔ZE'ܼj
%I镪5,LIkP[(2L,étB0&iq՗\L@3:T8.+TTaZ-yʽXU
}5f$10DiX԰#KX4n6ul s#-Xz5KR1*"X33Z:656LA:ΊK[Bю"b0C+UG0Y4
MqrZcozm	*ft0@,=Z4\Q0@Hasv҃N@7_qmױ#1uj\t"hmшzp`G:$l4sԲlR҂kWt\PRq,"LN\H=7!f0}Up#o%g-Og,Zh,5MnqB`kU03JDl厠$	{p;93Fm
#Qbj^ŝjZjwn|@j	t,Q><͌Q
;:>V*vV*^UÔ-7eX<!pU&9֎!k;&Do?'ݷ<ƃ,!1(J҃k㌅xR2&Ҡ{f聂qic.NmFfTYoTE-.={^Ɲj
NWg.tW0rmjs2j^
Wu45O~YY_ ւS(oun0{2
uXvt伡~EM[:Ydgomq8[:>Tl&G"ԌQ
y-?t3:>NoH
>gL|蒑Zߴ/N]\-'~\˾WTm]FַtZg26-,eBj~t QE/ISP&)ɂUiV|n)LYFe	u?O!MzHjcJW䤴%|T%WfHL★P,e`TY1	5T'F+9Q͜p@ՖP2Ϫjƒ+xo&#Ē^Y,hRK,Yuv#+ԨNqvQIWJ&TrŹUa;f9OM+Q<	0պ|IV1C7[ūaD(%l^8J4Y/an+&0jb_ҹȃONSh\7&?xY[^eU'݃OK~n'͎WiC{elT8wSYʗu9K63B6WV,+\l3`Ɛ>	(+]*+QF]E߬KKJ>?[m)<M9=kQlz.ڶ;t2WR+R1^SR݈%0GtYQo7
F
o歚PXٶՈ+h)`u} R}.fxu
4`.J$nЀTb#=G^8XKW%>5Lۘ6JKlTC[DS?n0t|\M'cTU
_u\m;bhDZ밯l4kI(cOy(I܁Wwvx>8;u5"PXPiҟ\m*#MLHTeZif
s
ɪHvcԳ$j孜⭋tFFUHmxvQp"ksQٜMjشŦl968Фl6^nQfvVnR3%??cwR</H_QM5nu4K6Mc6}ݦomŦC~dcQI]64˦#m:ڦcm:^dooEᄃtD'=Z}~79 4FE;.v	1dS].[eO.K&W8d˃WoҊ]K&r|;t˧f=8i6g
9W&
o	a7pFBp!{1
ŋp9R˵\b.%PX.7:
'l97A\l(y\cM$LgR?S
TA3ٍbWs-ǹ}"0ɷKAi֍_*xƬO7N`4(3l(P2dʄZL{\&6PKg缁29
]'Y948+nK^'07an._WcX\K\]<܀[uF7P=n9lq+vrm78aw{H܇wq/#>Ã yzXqFd5k:%ޠ*ɍj}]A9rLr2Qn%X MnFXG2M6h&4^5FCB'O"
i?\w"{s'FboØzp!G|-x(q\oF.֍
(&R7$	?j	oN+H
Z±]IOXޝ$%lB\u.KyQ C烘߃܄'^LO2i(L%?B5~:bL<O.&=x\ᗈϟ&kt4y/[{4yx
u
ܷe2ޑ|YNƻD{Re9>𡜅I>0HuK;OXV3e:[nwD2xrTZUjD^o҈ܽ|洭#`|͹N%wS-ik\Jr7~j^:RAjs77a~tHy7?Q]WZu݉Yx,-}gǖٳ-EqÎ|(NgQ̜^G:3t1QgjO<;i4i.j'c{I_&=7ݸtnYiKI}8ZE:G!t<+R%]E)E=r
uR7I?`g|^s>2W|>yϿ|8d3ϸ?Whj5aʕ)7J&ɔ╕%5Kz)g(9S|EFKa-2wq9ǳnPw9N˙IdQNe
3?Q-S2M&NdG-FpLȷR~c
M=I|+dgHG.m ?ƪBe>wEqY21BD	W@⭻bz%	iOt^d<c]yzdj>dz&9윥Jkr?^ꑙ.)vKVdK~92/|ٲ,	46Ve)ˊA,vrJVk0A=wxjhGo\gVPjl.,
ȓ9<uA#*Yz"	񘜂CRH)~!RN˕X$CV[V5D>7HeRi0u3sE\[Ʈ:P"c%f54Me٩}ėu5~yЬVLb="fk?o5/53@)<,8Kȣ6cüeGQ,*(MNդpx&5#M?n'RzP7YRW{y0g!y*:W&ÔlłG8K&&՗Ff֌L}.&.Fb?Et"yRoy5/p?+|YOz
Nmm`mƆ7>?Lu푆r6lܖ6Ye dД'
XIg.
{ܖ	Su"Cg
NGt@s{⽐y.%Dw݄e>z:XYOzNhxv.JlNJ0diF]\WCP!Kb	RRXCz|5sLǜJ1O$t)dN'ueg4FRoPkaA
GCm'rShprE
p46bL2X}X.21jXo3,
nSg=,4BxY{2mJy
U>V:8|)c&VeF*6dq6:jɱg:n,ǋx[Y8b3.4:_bZfWZ\7#zgmBz9ڧ2PK     A S|  a
  1   de/cardcontact/opencard/eac/cvc/ECSignature.classVmsU~ni^LiII$P$MXl"b-"͒.u:6E`/e,"8|'[!`s9>9g'] `_ J~4]Qg\E5˹'#|0
瘀/#P B?UG.ĥ@:9T/60Scl⺦Ug*W0E˺FdzK8QTYjNΩFwjaDeU;DygXN$v@lyYtv`'IPK%ɡ̧9,5K2F *$S07}<\eIRtH	o45dyMq[`Ϻ<JE/~\Mg-.,5ʦl=aT$Aii$
6vcJsuiZ'aNl^-j`ʨX@ZIufzEW%Poy%,6f`yjr+Fp
d.fX$sY-w6Y1+rc3Y/闓	94b
;]+-jt_"k3H@a#IΎ:Y%:dijeL
g`;gY}y0g3.m}=Q`uc44WtL	"-$7,qt2`k(6n#W5. 3)6̶~(>2mWƻ<ͱD7v5:<~uXn|},]>jlM?nȠ
\<a7
s[O?q&ε5fqkd% qFq;	}_6hW2KhI,2K/#6]El?֩.kz72<68gpAY2c+<`!1N[O?gp;(]x۸R(#ѾKƞ៱id(9{>{d3o/Gl*+cG?	*n=$9T$yFk\Z;4A$Y8ri	vJ%)pYi:"'u%|ߠRx~5)>IG.Ka789E4gbh>@!t=DG X\Y,@2>DƇgga<x*
e\CDnکxSz׿{qJn0N?*l:Ks|GާH(SE_R=
oZ`'XL	&'X;ny*ejb%ϙʔ@L+1gRqs_PK     A 3w  u  /   de/cardcontact/opencard/eac/cvc/Extension.classVkWWݗD&A1( 6$XS-h5551JF&3qfbZ?X]Vk?K0;{<}
-(؂V.wtͶ<yI",\KjsZr',װ-@~<COg%|z8UlXʶ\ϩjCaif^1;aP\M`s<irk:ÒWٝ*vs]g8<P0o"`b{S
To1t5?HG$zcMd^TǁM|I^n
d8Ș:)6v_8A6CG7f6&#BT0t i5]3_dnyn4n41we"	R@1L]*PQ398|!k]z+V1SM0]S τCbE}+ʽ)8F)ʂK*"E)2Fq1k~F'gC8!P
6  /:OEkkdyfT|(#eW-/,Y"MG(*5+"G	[m?rQ,2I5;4+JWԺnԌ0iC7T2*(9U[HuUfB!#ˊ:e281:Nl,`Jd#1Ě
|)Ra{ְD<%<2dk,pǐucЛ1'o>	]fȑavW«"_ұן/|T^c\3F4C-Mڅsv9Cݶ
^ތ!|B7~;5tmoŧa||!ۗגmXs6TY`q-mV+ghrsEff,K8~W7zUw{^~vdȟ"·#H뭸Cdɓ>w&-AID=1k7f=BcPp<~d]D<iOFT11nrK}eLJ=a`	G
qrh"-2q/]8F#a>Mϣ]"iZ{4װWQEmZ@?ܢWۍ
t2=85r,LmW3DBpEi$B㍄|3=Ge\L,c2Mt2ZxU!m;.SEtp\I\'5&1[iq.8RH]5BRzDݖB[KAhs)HG)BsQ2_2';:;pW04mO !?W{PK     A 8K}  h
  0   de/cardcontact/opencard/eac/cvc/Extensions.classV[WWL 0VE ICcf^|hؗb\V>\LB	bٗoߙϳ_\&4YӸ,ZL[bS\a:e:{ɪXy.D M
*CemvAsE6042p!$H-8V,_m_1XʵuSJLoH@muk$3_:t		pN;)Vz)7*sKBs{
bȔYYp&.Y)WF
bj1orҁP1!,H<MשJM{)^Ĥ bmQ7RDՍظmt	(]\a87H~_8q#F{J26u)W1Ik)vmgR1
z|NQn)")Zä"6;	O+MHYsCi\r'R>Hpb^CkGHF9O1ieiӜM1[XYv/B4nd}wuj`yt2JPEҡި"ub3<_.JTTóK4yH^BD\(f
c5i6e#t|"Rzn&[#R{)i(O`*ؚ%QpH.ZY' F_hKhͶ\knD
zpfnZˢ|JiZuowc.;fΙe-ڳ[/PߟrIn)D0Ma{<
Gg_NJ/g=4c4)i|g=?=<?"G?mA){W(Hpvj)12[ylRv?")k'Gsޕ8Q`~+];狸B۞,x"n~|`zM^hGs}Bs}1~O	"+OsWAK(@IzҐ-7Iv0_*wP:CM_l'w{$[m-I$p%.#:h;t0	^DZ={8Z4dqne̿{)*!6z)[ CC{E6%F׿PK     A 3X6    ;   de/cardcontact/opencard/eac/cvc/KeyDomainUIDExtension.classTmWG~&o֍P(bш(*X^HH `l.#&l8O_NKOM=mLRʡ)$3;w<Ͻ3/ 5apӶ]s=wmڻ%'l݆=x6Õ10k7_p;s:Ҡ8!L
WxԩBKQeA'!z`[|S֮eV,w\"
1\	\U]Z(Ie
\yAZ[C/|^d:d.2-/&~s5՛#+pIFf82JCW0Bۢ4H>MOT̙z+G)5d\u^PC|CS鼆W#\W6RQd-blxI $*cd	cwp"oqO8>RvLhgg&I 0|nv5<00P%Dݴ*c]!^gy[ɣ}) _CHJ볒c)Hgd/2\>ŭQ@Q]f.,;1}:3Zv˗M^_6+\lRB;Ɛ-H㒟"AD֩AJ뤋IKb+d|hth7Iy)+}֬|^3dnHp.W )>
њ>'_hCw4>3hy-Н9@o-\<}J4&<5%1aOF(k
C=Gb9!d\nj5b-'}|4Zp80]eN(oTѰ{x8ݐAd1yܦ^caA1Lc2|IF3
`}EMƀ?0,:£x_ڽ-?T+U|ډ&̶P8t96;P?`XEp-4XXii
L]UY$PK     A oON    8   de/cardcontact/opencard/eac/cvc/PublicKeyReference.class}kPƟ۷Yn9|[_QM1YY-ւ4+i2o PmjsϹsͯ? `OEQ4H0l\3t4
Ov抁ĈġWe*4Bm_֊MJha3\TKOH,k-v?ed
9qЌ
{0N[#tk*TܔBVU:IeؑcRJCؼ9{EV[1`x>ug(:zpvÕǶt!ޑ3=r\XD7680kCÐ"ıL2$=gEmkB{"v#&=7ȫ#J/EK17FpFu"JgM{S6ql.A~RKlVD<H'6Ucdf_R	};_zbz8!J8u%.bjs| 
`U6a%ddX9VoVԇbڧkk"#0JUPK     A ~9ؕ  
  2   de/cardcontact/opencard/eac/cvc/PublicKeyTLV.classV[sEZ=<NlfbʐI6%b"";Y6uG3bar/[[[k"[݇}G[cّI5=s/?]ށb:0\YʦY写5m'dq!:9C_JKI2@::3]^ۏX%gOmcCJ|IP:zˠ\LUΰ+U<k,Yp*ْ,GJݝ:va7o3Fa{b޶xqw).(JPF^qt-$D;n~K*NΟIjpG9[;o\'42tROa8FԂY>=UcSjMCL[bA%pV͢~Y^8(eeuaQ3/<aD<ư#D![P;ESBO07^ZERrH $y`TGyRқ]!hfV(WH%uxO ȅHޭ;BC!{LitO4d8x3c
'З3(iqSwѲ/xÐ72C&
!<^bFì9<ǰS)U
Y#x{-KMrrEDiǷ*/oPHr
楮019.NC{MSq*sʬu<DQ
#
6b{rD:ϽIc5
{,cbpi|AuH8nAC?פg8~fQy\~23TV[4M몦{N!-wjMM!17<ܬ{X5nfGKoSGw^k㰩!T@rG<zS'(I#4%|̒٘ꃒwuݖFm)%rR3:0*I'ojaq%wq[QN]2va
ls_u뵑o+Q@
.Y{y}k-[;nJn(i:JO~Ѫ,R.$t$$$Y;3߃Bv`{fh;/+~{xd]x;0*Iv7lԪ	O!ړGTifV
*H~A`8#XmDT}\m0ÓK?ߣy|}oFQIc~}m>>y.h݃d_?w$ѶX¹ D7~'f2trqRӹm	UzZQCQ^udt)zj`
|̵ñLڮXy+v<=_@$
ǲ
|ЊիxMe^#mTiS!e'3idotRɇ+x~m
LO3
U7sg0K8GԤiyVTɆAKG4BN@pXS9Zxr]y
]'`*k<"~=(1|=QR%bp}4`:!
/Xa0|F+~qqoPK     A Ve  ?  5   de/cardcontact/opencard/eac/cvc/RSAPublicKeyTLV.classWiC=	
bE(N%65I XjGޒa41F#lܴumKtT86Xz}{==ߏ?pQZ:FLnMwbּ1}Q~XHL	z̼DV:ECwF1gLN)8a;f91
n\ *a@~N0w⅑㓉q=^&Lwv*.֋ڢ+z6w{FӍºl#ф.9~33eDQB./#"u%m;#ѳA(+O`'T((A<
Q(ZIn$!;RFظc#$TDiQoĀ/8vQwlW!#ʸ>?6LNHT$2Ã<F&㒅'+W<tglA]v٘Km,88 =z0
E
هOV
^֍yǴuxF`ه0$+̇Y#G~J8Ub蚐-a<GiD<D#
*F1I"-BQ6A:p2J'0!Xզ2LLoϫHIѷ)-[4rJddXfgS88Zu#LQ)'AQQ1_.O"M60]Lg<!fu˃Y./u{i^y#oؚc8IxpW]v+`jT<gT^#w~)1ۚfڇuϗ?g,2N$޴M%Ǘvn%*T+[;ZFVx05e	[",*YJ+\@hU*ɏ7Ty3ߖL:R}#wnƻb-_+0;;[[Xi#ad17Me$>KײSm~e̚>oDq띮,Rϱold(&X0I܈6_q*X ]؛\>՛jz8֢6UVMĄ1*5Uag+Z6/.zN)t|(мɬgf,fscM7#*`^c½ed|c%=z
[E[7L]Km&-{ە=~߅خ~? ۵?ȑCm+PR#(a2Jv6/!Ycm#~D?{yR8	rC=ֳ1-ʧ'xp[?ψM~_p:.~		h`_%ϵ}'K8xVp4ػcrx_	ᑎNеNS14p_m؎m'i+}>]Gj/1`{pS|&)yyh9I[]Ư's5m
oxo9g<FAPa?xߢsgT¥4?ٿN/HuvprSx!Zo!`-\׆jC.\GS\	)
RŐKCK5+gPv;9C2.",IZ_.B"/r	^r;z{\_1P[t%frD<]|-<௤;&ާB$~F(MyI<E겾M|+%t*/FUTV7	I&ȤwcXd
^IQ,ncSw`Yz,[ddj3y\وC.5\q cZ\?Bg
)Ϋeev&$\rvz#pPK     A y7  F  <   de/cardcontact/opencard/eac/cvc/SecurityClassification.classUmWE~&	ٰn4ŶZHB֢ڒ@h Ԁn6pZ?;ҿ`[OrQlr#'Ν>N_F!D4!0g
Mh87<q 7th5-yk=Y
a2޶qbZg꥝}axS8E1+P5!T֞yq}%˱;\e1c
F%M. ɠu0.C^rv	GE+>5YRJ4aZYy]31]ac
p	'2v{	!lT %ege2507Mb&h#p\2<a32gSsat$_i\'=6`WЖgJɟ-#
njxPخ-$0y1&I211=Uo^GԭE*U1ycRRP"5@E!FYtmQP0%˸a9R0(3=@հ55<SP%DT|{N{21|İpyM5|YaE
 eUPKRG}nySi)t!)3ghJ<~2UJCK;].t60i:_ѪfB0]MK{ƈgX'e?GS0EwZ{S300*xOAz\j>[2HMAҩFiDF@ތѿAèa[
!NkyD9=j'k+l2j08HWژx҇$A 7P#š#,C] lk>.M{OD0LjvȴqG%?oicw,_o.h#}H?|+MQ(H`*z	C-5<}$T1U ~BdDo)	9?i7K](#>lp,Z?Чuш~mP<j-.'1xJ-R--4Di(ZDABDhk0)9~pfPK     A :n8^    2   de/cardcontact/opencard/eac/cvc/SignatureTLV.classTRI=@&YY?q
*$dj&ad3/3lVU߇RoOR!*{9Ͻ3`!1\~\-iz52eeB!ZZz0Zh%Yլ84N`Pطwmi7x۵=t7\ Cߡΐ0pI-r
topn,JvLYIQb8יPF0ጁ80ܹW$Ygә6ႆq)\삥 by;AgS
?1\,dٵ
p%j\0ᲁ42v+ȩwboNtKY]#͆˖۴
$wev`	IUFWsO3dk2CF: CoZ{
+[/-G(N[mܹ8Ԃn@H5^k1M"f>VЋ^ݷĊJO%S^P+s'ښ^%!ae5$jJj
G(hXS[gn6r9Va!w+&SeҫPy qd;<DwKK"ÅKiŸH_8}HQ\
0n<eQ`3Ц{|ߦ* A	d@~hwg
uxvP0|x1;m4& ^Nib(}∦~#XN	rȷ=I'?0%btWQz)JlP1@	gPK     A            "   de/cardcontact/opencard/eac/pkcs8/ PK     A u &    -   de/cardcontact/opencard/eac/pkcs8/Curve.classT[S@=K)VBB
jB0>ZVӴ&[F}o_fRl`q|H6{wW 1g1$hE8
*++GyNQl
=/]B9c
$Fv,pxNLni@2^c0BIU\U *iw"S|Ez-fSIϙuA*c
$1;p|Cb7por>WA
%~kV*Kou	_&p"ȉ)RU(-炫3':8XJV
80<-WTjXb+KO3oRvN$w4gJVU80й&0	ʧzM*b<m?2aRe:tM\ksS):9ˤ09cH)ٺ*rWh+H_,4k"(˞v׹@F6W+:3	ƨ:w?QnanuSتp5;.n?T~q+xKqbz3bZjQ_t <],7hI.âۅ[|ALzְwp=z70:"0?p]?;)hz#QJkKVȊۘ4&YB@k=b0boe018)<DOcх
KM1u\Bu\?A*r@}Y*
ڥ
:r..q^GPK     A   H
  4   de/cardcontact/opencard/eac/pkcs8/ECParameters.classV[WWI8"XAJ aVB	&0:LdB~AO}ˮUZ۾/> >{o W}H*Dꆫֲϫ68C˨i
r|gSs9	amۥ2EgZ~fTĴKN%Al!AQp
w3dg8M=՗us.R{XA	hZ
=ic̊JPЉcG||%%D5	&mT /f$Ù,"KՊ3ȥ]bׅBCPD衄E
Z&مpc0./rqsz2䌌^Dc<](	<CF$3]	[m\d! ".Qڊ v~eg
|$2qY5>`z߄1+<R.<MfgdGN;;-c3IPOm0pZ)sۏ	x
af}K-ˤ3WmVq)%dd14EeS|pP!BNQ,A7e8TgIwՍ1%<M9zq3m.oDlׯ}
t'&wd<CC(:G
t,0S񔖘J~Cs{U-3N2uhdW\^pJК2m.-$,..5;xnIv {g T>6=n?%,Iکangj=o;MfO]ƫPgwwQjܚ4m\|6<,BU ѝt>1({КnkZ?}Zh*@5tOO~۰l5_ln0޻',5\Bͭͭ/df4i+#1HqkppYUL`H6a
w4~^F"EUzK,&Jd=O$E?8-o;Q E甋	ofCn64<XC"T4agLeI>F͟
WqW[Ë G7byqXJTn^2E)|}yZ!A)>kOz7-@0P[v6w=9̮x,J<h->~?PK     A @,    7   de/cardcontact/opencard/eac/pkcs8/ECPrivateKeyTLV.classT]S@=K)Km"PZVJAӒhdˈ?80#(&L&s{&?~~`*S-WB3]0*diOˊW5aeLDH1ǣys˕*@sMpC4yMOnbMSd *C,BA0vt0(^&W"|k%nMHĽeȥk
Q5ieiӑqݸ'^1t50
"єQ)!ҬX\c9E\sd؋3tXDYXQя!pqB9gy!W00Hʒ(lya;XyGSo)050ǥ 0祚8
HD6ʬ*pӳfr_s4(de.wYTpq=UhbwT
F$<bn#(q߅0,Z<,]?Y^BwC{b9[~
iZyjwJ_ԍ3?$0s#oY^j]M=ETaHD.TF$i瑋Emӵ}.Iw{A e8h\YZf_%B>b> ]~C~uA:~{	u9J,Σ
C$>IH`IlB#b2ޒxLuz/
lR(POt	=ݜ܇0}mo0u{{ 
q0|`)ZatyoPK     A 6T&  ,  /   de/cardcontact/opencard/eac/pkcs8/FieldID.classTksF=ry
IE
BD`FG ˪f~_kii?G+-ڣw9]Ͽ *  !4l4',[}i]ٜ!xآ\yH~+0O;>e-_-pid2(BM(rQ{1W~nZFM"0,Rh?+bC\T0a
0$CkKK++,zvI_N2B\B8~M.osO*f0/5\t
]jq!3oX=xm
pe
+1;Oŧ%XaX֚~RI\gHU)xO0~4[nxJ]> ~@LJ#+07	jogz\7+{=1\CnwGmXv|븥c|0JjuZ1t.mC_~frc9ahb2]T3_T-2d{pgDrt⒅N^ʎ+c\ؖ[GccR:Ԕ]~
#&AviS/v-?FQ9ބ!a\Me6m7HM"%ZؼȴZLAw@虖gf(`:DY~vO8Է=L#;{_1k,^cM7J:{4.4%8IOA%\,ze,NSdL< ggإ3
*dN{*(+(	n4^c.RCKGQg{q	Wj#6j#5_m'VnW
21%Y;{bZ7PK     A qQc  \	  E   de/cardcontact/opencard/eac/pkcs8/PrivateKeyAlgorithmIdentifier.classVkWUݗ)TBiC-[ZHK%!!EC8sÒ	B].*.?Jݓ
}{>g{g AB:$p#/cMQbގ%RXjL|f1>YEͲ[c0cł?yֶܙ]R[tfIUH!(v4:.U@1@f6brʳuj!
V%eٱ	3v2\U
::qMr@h]WzMi䦲~`!*0J%a*kz-gtr:,_OZ7uBsA]
ۯI[57nS%ْLYTD0A
C:1"p6f۰KrvMv='jgMc- .(;{2;PTu6BBt<H͸::9]]XIvB4w.OHx@	IL
D( 7U4K<.;1\<06%^	Dh.*^GF\ <3MIM.I7Ϧ-c9r*ycՖn4Eóqu26,VDmnB"!!p4p<8]*aX(3C@\g&N6I
+	2Vs[S+~YϾɨrn3xԍy|ŬTnou,8~Xt=%omSQ5l"ڰm %R9S'g
8|e8y[}-vyR_9WM$
YJ2gzq
ߗWj`1
\^,UiGl^P{..../qe#p={G {)p,L!d!kC\C'o^<}}Y<WP}dI|
l;?ƟMØ'L"ȶf1<OghvbinGiɖNpk$TރCzXƛre
Dwb_mWl9糊M"]PK     A ¨m  q  6   de/cardcontact/opencard/eac/pkcs8/PrivateKeyInfo.classTnE=;YgiZ
PuNMC)i8!Hh::f=乿@E#Gg6NQՇ{ܹ3 >CCHHZƈTCڞ50Plڵkۮ<)0Z[S/R6^g~^%x`
eջ&XpVHUuwHbyv
vME~Ќ<V%P)#%\.Pu߲Q9~GLL,&$Ri:	B[ϤJ\%HaBW@N4	/*038t-}ɶ e"ΛaF
LwI-m5\g0V0PԼ9rFީ4dLغ>и)Ă.nYlETw[]@2_xX(aIjm	dOV;ݡ{P-o	Ojt'[
;~ ݝ-6Ւ::Vݍ|o&նϾZx0s%~1=FHm(Qc
gUfoY':t⿂H\kDݸeq5Q~B?KFUΒT݇(G{8s_q>?0s=dFc=N^ͥ=c?ZgY v<
qd>Bl>2<w>_H-2Xo-"2
,g_Sw
~*Gx(ρx,A{_/p3w00ej$crJaĹS^:%#D8TYUi͘$[\f6sGPK     A            #   de/cardcontact/opencard/eac/softTA/ PK     A ٴ  ^  5   de/cardcontact/opencard/eac/softTA/SoftTASigner.classYxTg~& 	.@4)P%)%Aݞ̜L:PvWji]2)PKzwWUWuZ׽v+L2	99_z) [^pppã?f
[8w̎d<vgݚC
4P6vRɎX:ga01sBQ;RH2"PrNwȶ"t?ӽ3ԥuŎ&씂;2`
%X4JUG"!+3P1!rW&Kp&/IǋLDOwd,F2d@≋D&6hｸA!p ۃAʐo0;sĢ8{ <aLwbXaV	մI	Bk	hM{iTohbB
v8IgeX	\U#Qh`b#n&8*'vcml5&lnQ,p+@i7ĭئ"x;kM\0qvV$LUPhbEg'%a=&Zư'XJTXPHGvثi吝a;+@c!ɟ&AԊFk[ǵHU%	]&GalB̎ڑd>
S6Z*<v$eN&u1
N2t^?}g b"
{JUɛO,KޫJ^8㒵CK)V7%ZXRFR21dPXZyj!c"aδ%ԾMkpk+eWx
^9jg٭"[o:儛kg63*t@aFD
8e&ބ7+SRCV<klb}LP;E55کIVZ]ONBThݩgL|O֊i+Q&+Q6Gl"x?#uMO|o)8kA<ĖAScK%xBcٺ	GL|RH綺f1/#&FHS2IsO$>5Jle82e-mygn^ӑ&蒑FGӴhpDN
';յ0qA%Z%O3BP530OB5lS14*|O@>МV<ՙW%A+DwpA/(8$%_|sKBEW9MJ(M{
Jūb5
1u|AOEWtT_W[%2vߊPKxExgM\sm 술
MZ]fL|`;&\^%_0p\POgP!x=<1;=?
O%iÿg7sBj\KxR&NI'Uڋ<@bqmF<n;5ȩ+.-̝oA$V[g-3cۛa;%`00+~Ji¡[A(eb
Sb!jE!ﳆ
lB)0el4\ϣ2q3u&3OV+W~mrFRfDo:QT;m(u84{ھٌa%7Т.Cپ1JUX MDR6-HrTfZǙLM3ta.Hkox'y%/
!qSr`VBG_Hfj`'wuh=Xvd6%8Mud2gs,& U0d#I$3Ajz*P$볃yrBjÌ6*Aڎ ZwC#^D/)UrLN^V<ɲ
/'(L0b%abv4(3FT3P)juOTt+	Gvy7s#)' Vʎdxvh9i
b!ta׮H-!c7͜3H'!b<0qspO.X?@~~~\7>Ii̍˯\g]QK0zFQvׯ=9,KZ8ǉ@-XBHj1b7a	J۰{KBJx/xYܨUQMqWZ-8
b1@+j5"%iōPw"uE(no^u	z֎bK;rh+a@-\F5 qKэP=hF/_I#hītFT*čv8Lʰ_)堦+qr*yAH+Y^R+
J̧87{OoX{CX^%f߶1bEG>gI*oIl8J7zǭd $ʓ}Q=SpJ+7ѬwzThݤUZRFWPB}Ac\PJE_MBbq:'}yAgBRd(kPjo)][(weAy,A"1dWϼHΫUAUTis'_k>n`(NI6:9{9ܟG&7ݿ- GgF.׋J{&4ydH=um..>䭺l.	xOЧ7ꅧ9G'=Ngwvwx<=v=~~
?^_NI@XJcXZBZ$@YhU

R{	Y/½9<4hSy6b.PSj,*.JO_s',0z~x#3M
oFފ-xYd<=NBx.x~><XdyzQ5TZf#oT>~GÉ:c8X;	Gtlŧc~ɢӘ
2ɀB>9-jΧJ5W)t9ұRwT%xIuUծiʭjRXFXz(:gʯ 3Vjc4P:|.CRV}%pӘ@,PIIUAZӅ\pE<쪹&:3Sj*6gͮ@&3|˹]}
*_kwb)jwu<{.q+kqrXKI؊Ylc|6~|4J*_f}q#:&RլA@/y8ש ĭfVtpJG|r{"ƸޗYW+JjcW2NR#^d,(uZU`gLjMiUz_KŔeOjO-ը^@h>g/9?^(l6Yܷhfk*<zE#cH#DFλc7&[b%.=B}`R~	l?	4~N*?cx`R&iNح:u<1ՙ+Ψ5to.jtz(GNOv|W 
8Y\X
TZ*YD^?7&ܢg~nSTJV_PK     A                de/cardcontact/opencard/factory/ PK     A ej  e  A   de/cardcontact/opencard/factory/AppletCHVCardServiceFactory.classTMSV=ϖ-[DuCGjKIK
'И`a%(Gft՟Ul:M3>Lսw}׿~< 0O!!̐չcn5m\npw2y:ORk0!˛b&("PTt@eTyZ5#F+:=Sϕ_Ϭɠ=4vtӳt/1t[E=pew-ǰ}ܛm`ɵ\}xMF\ptGuбXZ]^^Z9P<?#*1r\!S<
ɠ
׳{-9[%xiB&2v^)	$Z-|;åD6C3,+a!|pCEZ
;5aUȶٲ1$'EU|q*'o&ㇾ~)Nsg՜C,_sxen kUBrbs{nX"
mmYe?ڏ֩]Ag|`Y:vxfev撹ūMyDLp휤!*@=oo?G\w"0B١e/+>3y]tLC}:2헣
;<;*y#YnOATkE8
vC`b@Fp
uI-˷ަLu,dcTS`.C@\adWҜi| d`Oų;?6?/߿1d	Syz0JMb<"rp&0C\\?z$"%E9>.,A/w7.=C:?G_Gj"a$%'dJ҉;4>"1:2}$Z0"M
]e7T"(]&am[^-?'#&cK>;F%ZjeBݟ[cխA'"qȧ'uCįuꕐ^	k^^h%EQ) 4b~уgJZPK     A     F   de/cardcontact/opencard/factory/GlobalPlatformCardServiceFactory.classUkwE~6])D)`I$ شB`-$v;ğr?MM_fgg}yoC#!$4$uaay0oۖ0JtRw%=axvmy!W50H1BJACbc5ԅ,ϕeqjypa[, uQȺ!Y;&3*YZv7t)^/9%\p6Q;m+M"/J9o!CqrfSIoӸiY1mS
`U6mtJaLE1Myq	0k-QH|l
2 -,.kxWGyoP Cv@xTW.՝6ET]#\9_U RXd4+i7aUt|#"}vZ\2(b^-lP`Fɓ~%U%9%N+vZ5#JS徭äܰ61 3r?s ߲]I(/bmz!Yc.+:bOXv	Ӡp@=%*d~j3!s90ٓ22o9LUOUgOJ5My2>o?rë#xpa/Oʃr)kY65믴^z
OTw1̼lDZÏ-_Zny[v`e^QS
^v]Ǌ5(U
TS_i]4M!CTcvigKiCo+H
/aw
!>!!@"s4O@'zC%%WcrY
k=\
-(ld=,L(}?cD/
)8wa㣘SIǃ)'"eZ_5 Ǟ_1B
RkzݷÂ@%PK     A 
l  T  ;   de/cardcontact/opencard/factory/IsoCardServiceFactory.classW_P\}%А@BƠ]	6$,.-ira^Xj&S)/v&4Q탏tC_:>/o/I4S?9;_poF_A@E!=gXYgwₙ5I֧k	:MtQeڴ]5X*t8ږK
+f--n9szѰUFYQ-*sނ1Kձ4ZЭ||hbv4FP*_S
5R'
ta3@a'QPb'v	Si
v>ov1w
uaCS3挳ћE'ιQv#kDu+GQ{U܋}f|5iވ[4<}uprh9nDՠb?$Pb==
*hhۖ(͘*ZVmL
L:&UdC#dp_*fQk8S8Tt1כ	ր-MLM8*͝Rqz
5Ԕ~IqbvRCZ S+W%MvC{nݝ\&!n䇹SȨnδ3*Ѩ({8UE7¸oY}ƠPm1ݩ$qѤ6
*y3"\NJܶXƆTQQjmT,+o^k~(i[ƌYX
_i0^.VW{;NGƖ%Edkڴ	'
l`Qh#)|=̕sXUGHv,
fsdݟ5)?(Y*p@-35! LKU	uAJ@w>C5Kvf@)Q"Oe9V^"osYs)­ʔ]EcNՙ-xOfdĞ/R\B;7Y'=:nQ0);ozxV^Q5#	~u7oi-3׶_開;,Yӭ\pӶ=3?ױo(>ɫQER/FLs,(z'VpKtm^0[|iot9~ośۼo.o	EM͂BGhHg0nI!y yx
"Wmhk'.4jowc{UGCKtyK16c71MK81:=F+oEǥdy0Qz){r(˔}L9D>kbJQ,(5Ubh6Te
_&haj)
}eъ@TyI&z.P.J=J5J
OxǷ<;/xN(*؅>(q^eщWi&Y(}b
WUS8GESM"G3TNaGEtEE	^1MJ
k*'e
W9=TbTQ#<P^qy̷H
gђe	GyH4w[sā/MķPwW2to_QvB9~Mʏ2VWhEYd"|Fl[GsQ+C٘ߟ_Pʌdm!3VF$-ăh,.!|w'p݂W3X[$'*F_&t~m
ٶ	lyP"!ϐJ$8-KPA
K?[i,ךiTQ+YZg;Z?Lr0X0+meRT"2,u/>eRKLQޗtIe=^>+>%摠dl)KΪ I[oq\	b7zH?~q$R^}nP}.PrKPK     A ]  ?	  D   de/cardcontact/opencard/factory/RemoteClientCardServiceFactory.classVkSU~NHYVnԀ T]/hmcm@"V]60ϰ:8~G9&ae<9ϿI0!2^W
pضQJ8oZ0mLv[ءylMa;6VIh20J2幂4>{[]a<TZK-ýcIZ]ux,d*c5cs$qބ4OKW@$C<SnˍWt$:-{	LU
5BDix&ʞ_3g(?uQ*NiJ}]xj<D2#[HKs2Vo0aA"ĝiMD;j9:!vLV]xa%X:Wn}S؞K: G:UKPa3rn-Uѫ|e=+-6}[͸8	+0&Pϔ_<u5uK+rZx2e*õ>IIѠa``+y lR~C|AW|g
Gf{74l$ڊmrem1Y.Z<݌<Ȱ&+^ӧcKs2]{'ᛍu.j0Gӻg%?mi6:$®ey0{G<aWiߺߴ0̺fUe;j6r}Ҧ|w8[3\c
Q[WP5bSjҡ1fǨ2LO83K<n=IsPmQ#UYI0@sh;Hl,M$O?x|'/j*
Гʥ!W>iTa(Ɋ*k((S +ӻ=?c3ƙ1p3!nm}!Q֛)"m3
}!k	w
ö޳
8g(AEa_8D_6UfPK     A f    D   de/cardcontact/opencard/factory/SmartCardHSMCardServiceFactory.classV[WWNnGE&\L[/A6i$b#j;Ld`2LPM_哫/E]u XW3gg' axG!jVUCb\1-5n֢$3C`H34gMDH@XDDVpH>޴:W׎*p\ECUgԠ5(Axh7hCNbxyjU4C m%Ii6ikhlf,& "b:7'!TUZOΟ;wv*?A6{2['89^1'G)rX*ѢzVv2Q7tş9;eDDc℮VTa͸Q'i}G_XM9mIӰp0Q:8o8=ꤍ93((ޡrRI3UxKpc"RYKS'DCGE^P	";4܄Kքs,(%Zp#FE!I-Jih#qQvFc䴧EjsYuz¨UTKv4 ,&qRh뱭rZI]Dl#Y$e4CUfU+/K=isc5:gs^MaVV%'8l
9k:{ɤ"R"ޗ8%zN㽛4oe$)Rm(M"v?k䣲A{h}ڇ6ի0Zsdb!+W]obk<T ق|㡩B<+dX
IҬ7Kk4q8荛)3kUyۿu}Nc;\ͪN,A:gV!_X{a5,	;gVh<߭=
הlu>1ͅZ5lQ|}9BLj5"%5U
?^_>^wv?м_
4	St3ýz?Bki>$XyLp5$
vB]R
|ZSad2W^n={Uh?7=G?-VAFw KL,&h8hS${ ˸Bx!OqN^t!I1+
RER_*`nJ.:2XhY䟐4w?
'd?aze5ynsm.&n$B1{
Bjx|Tﳾgޮ}aw6oC݁{׭W?t(e*_ZeB+Δ&ͪ[)?vF8_f}^'^`+||/R>_Tr4
lC\A
KhlFh*	j>F!wybOkSa6AXr_+D_PK     A               de/cardcontact/opencard/pkcs15/ PK     A 9{Z    H   de/cardcontact/opencard/pkcs15/CommonDataContainerObjectAttributes.classQoAdK[Ū*,n15HC>
ueh_ibhe4Ɨwf= 6Q1sH0da<tܖ+|[0$+	Wǀjd֕bRM2f]y#x&E[wvg}êVp+p}h	[FWNSg uHi#>oQs?u@ߤf'109rg!4"rU#K.1,	ಲ>#+
\5148#E^J%dk
giRe6rID}0vqwS4Ў侬sKWBJ3"'ׁͽ:]K}CS/1+mR0Ɠ8doHn{.zioyP?-\e.WHjy|N)*.QX9g}F:R(0ܣ<N~_uV-@+. 
TfWJ	ҺIeXJf%a0)%dzi(_?:dTNQ[PK     A 9@  
  ;   de/cardcontact/opencard/pkcs15/CommonObjectAttributes.classV[SSW];9pVښbjV
QЪ$&'8v>ӆe:})]{'`s.[ޓO q:4lOXḙK3iǌ;a'5t9fmahXt'8Q/ju8&0%l&=6}ˊ;i+Il0(7Sf2O4n2$f$hE`KuT3؊V=o9,2pL'M'ml3;>c$YpT?3FԱ[-\%FY+|Z`ɹ>t]{ b̤@ɞZХ=ػh_;uԱ@F>"o`> ΂ʯFpJ*qA=#JB@$v}<v!2:,]=I_cCN9r2O(	UhCeJ2d6	vVI>gmǞ8#ϲP!"W$U,bLdw8bd'}K ~OˌO+|	4̤󎙮f|5F5Zr1s:eLLM9[~3cs\wSWOC8Gloh>neu쩎0g-VOMIũIsc1O,an֕tuq0bȔ$ZJjPm
:_Fg
uʖU++: Z1)\rUIkËW{oB]!/^>"6~F[{sw~Bct?s	ˈ" ë|Tו/͍>{ |?qc؆^u 18E>qp9bh"kDu d 'S1HEVxuZpSm@R	l)U
<	-xU}^bGts;&E;&Ǩ݄?Bsw<'W7ח҇'){g	ѦΕ)&:٦-bTK]IҨr-l͜66 5;BR$U϶r%f=u0TE.'Sn#	frUֻrQ*/f<J;2%RYeXb*Vvг&ǳpRΈF^.Ձ^\(qyEY՜R(UTXX<d)NYH}q1ڥ<)tMJ&5{u`˵)TZ(up^a7㝇+ltF\SrUxKw˦u\v-s*WpY+W,5K?zwx_PK     A R]q    8   de/cardcontact/opencard/pkcs15/DataContainerObject.classU]oG=c;1Y6M m!,$h	nCdh&d51w^;ZrV*?
ڸ`;s=ܻgvy n{	$Hǵl:v+i+K՟[ۮ-*1+R	>w VݼdK%״pkk021i&@骪'ӹ\ZuZ*]c&>${^i2R^Z	C5U)SKxᱢXeܦ38Ɣs8O1]Wi!$֞8?B$uOM\%55\8N,gC3=ha
, jH
d};^HR&kaD._M͛(
q^⛞~Wu51J<EױDpz[O-?T@rC`9zKqÇr=nԞG^D$uvzyec6Gi
ՋyAiwl FrHU`fӈR_xj˃U֮f{$,9lAA+MO{*&>BOqcpW\%0ƃ-mC{;J 
cmL.?!28.6>y*!ޙϏzG׈% G"yy,l*XEuCp;M1
WZuk?q/gp\3MiGژchXz8dHf$IC*t{$~u
$"|KҺA2ud4/o5`v؊HE3b1b,w1&4Hmczf _PK     A 2  R  9   de/cardcontact/opencard/pkcs15/OpaqueDOIndirectPath.classTkS@=VRJx-*6-h|"PZ~[
IM~WտkQ?ԻiEHg=ܻg/_bkH86[l$)ݗUePJmSiF)b9g5$+SfU2a.W[.zKpDhL
tbЪB.m0`tW6WexeWk{t,dU-j8ʐ^,&+KT{I2\ޮUe:whҤЏ!ѮvqBIY[kt\s&Sy
c>1ᬎs8FeRѪ9?Y|F҉`t)#:r#8Ъދ:.̵Hr^9jě[u$Hn{nP/W(%'f}{r5rYbַ]r<Tt-Q߭rh'uyT8:\n/J/kVb52DF@<fd!sSۺ.gjկwQ#Q1);Q4)t8ڎtiQ|Fކp+7 ё;;hطg`x#8
d0|8Agс1:t*Le`1
$fn_8A0JWJC.}x:*b.RI22$a8~-
ZD-02$Uwpc#&OW?0BPK     A |0  U	  )   de/cardcontact/opencard/pkcs15/Path.class}T[sVNDPH@Vl1PH-	QpMhn,#[<i'ڙ>@Ǚ!3GݕKX::o=W 'LE$V	I,筒뙖%╫gsyӎxg&pm:..'Yc'Mo%U@
lP*1Wm],n!ʎ[ Zq
Adsr|v*ޘةGÇn
Ǳ;fږ7`@OL59%!u*	?5)!DvwlEV+^dَN\$32)~_>hA
QHيT1C!&<׳v脐 7o?j629=υh81
8Ôhi71.	
$q͍nL*wQw+#U04l!>mWbeS[ޢOC%rꨊ8$VmB$.\nQB"*As(WK\brCGqrtiwv9@2y&cUjt}SvV^5,@*3o6cKlS-ܦt-1Nj/kWI`s;!jL,h.~,:t'KyzuTW%,Λe뛲P-lVٵA$Ro;H@87o,ޛ1QĖ	҄T7PRiOJ`zAӧ:m!	IjT-[1˄=-tJޠU/σ.`[#*]@̐L'?C5lAW-їIBx: jH#up
2p:g|,Ư%:پG9LI6J0@H<Y#qܤCRxKPED*\_O5w25О{ Md>AhU:ny$21_!@fp$L
}6sT,1ȑ>˞KXк|#1re1}El]'f7pmRLuJz$e 0iH~װsJ|z8'݌tw7?mS|OWgnOS~ ;_|Fg:1T_4A;_APK     A            !   de/cardcontact/opencard/security/ PK     A 	b    7   de/cardcontact/opencard/security/AESKeyDerivation.classKSAE0$`Q2`TYfă_GZ%
~(gfwMwϏ_,`9 4@'|Yw˖c{L*l6kªkK+g,\=Y^Җcxԅ 4t3^ZdvDa0}rU1rG0GC0_lފm9eQfh'6-#~gkA
K0Ẏ|[a^k-rf[fsI{eTlC((5!򯡆[}+hd:=xQ=+ZAU.+lxA0,Y!!L 
bH^~fg}u^͊$J*+i0)ܔw8':`.ZvV+#,U y3b+
OpEO(njГx^SYtH]MF# Rea.$"xHo]¿CuJO`#K=Xt%V2VtAzP=.=Ft,:L}A7ϸvw)|#$$(uqrOcX]Higb,A/E<cxL>~i@CPw4I	oFFhhR!f>I^E[%3Z`b		N0PK     A UWS    ;   de/cardcontact/opencard/security/AESKeyDerivationBase.classUmoU~nw^vƂlE"R)/u+/etw3;PLLLd1&>b"'?ϽSEŦsν<{_8BR&4:}uQk5c׋ߔz{(
.F(w0 >&
LfFƄeclC
W>Q}v|s_)4zM;gc-	ݨt-[fPYmlfʠ
دtgfH ascFڜ_Hf[GKM_?Xm;0hlʽt[ s.n6clF^K1^7dag#e"=skq8$`eoQ7vIW2LoRclnh
.VY8a9G%ӕt`BǤ{drmU%pj(N8(r:SA&TV&5A?םEr9QR_A1,燞7渟['thbgs=;)j54e-i۪E
<Y]eEgݶ*05ؗ;ǆ)~QF	RgOQAyW$BݟUB>ѪdۜWm%#*AmCהIj#," f~Xr>ŵ)a7,p8a&5u3_>FofLBژX%HJ:4^y,3cٽm)Zӥ-1")4BP7t)msSy,eӬ=.^ɤ"
SY=kՋzЮU4)0-3ijJ0Ǽ\Sګ|ށlFT(Ɋ8&h}..CL:.#G\yr.~@M1xl<LzocAVp{uI&yڣ)zs8x<֋o%vwig2+0&65qe;*SNF7bk`Yāsy/eY8ry{k$eG{^їxdḣUWqyv `7ُY2?G>"Vaz1*&O'-3 	C
=AUD=JF0AcF]~OPK     A R2  
  7   de/cardcontact/opencard/security/DESKeyDerivation.classV[SSWvn'c	(hֈm
.J[{H6p$	b;}c_^uS;c;V @ðg۷7 N \pk'p4#iI,H\^Z/t`񋃗|,m,Y2hHQ
]+ẺSr^`O-c֘y;OtAڴL.Ibww&A#1 Pc'v	|	Oɂ@{mXi)uĳ5O$pLt,oiao%2t\ZUyn(,ۜz?fVf"v.ª
[FlĬ$@5-JxT!wDH 񖆷uCkYf.e41
l.͠A܌MF	Ԭ#WdcnUGdr{:Ḁg"kvG7=$Nq9c֤ÿ^;]Qv8AqGqX-SQNu.::22dKEl,,#q1@踈KU*ڃ*e`h0@[A/QɏL|!EaUXr$1l	E?Ę:>A'v6B/**J-ųhݙː5}%J30/PGJgGzu|rn	"S&÷F)Ny'Sa묙DhLO(5Fݙ+֩9_{*}wT/a:zu=kL"6+EMn L8a:4}ֹ3FEiG8Z\=LQ /\G\?;ܛbÏv1QuZGBA7q=B85ǩ;ImpOamA'&HL U45LAhU#ނJKp
Ǟp[-Vyj}FϽFϝ/=p.;5v={9&9w.ۉCaΰ*CYG,%3$TB⮪\	7jPUqpa+hhmiye%DG[,e5/kj^,!֐g	Gc?E[BB{EԶu|j!
CއL
g`ϱLv	q584k$2E,XD؅n(:=ʮN7GZݙO>~toa6.yꯠW1%CȎY
:DyH
[~'Uc%ļjk|}'rel^G\Hս묾]gu5kz~~š^|R91_w*b5Կ物Tq]PK     A )qy     6   de/cardcontact/opencard/security/GPKeyDerivation.classPN0<i!PZ\0P1 uar'pl:YLH| xLLNwuo KB;AX`{J>ț|N#c?hkÂVUJ{-9UfqV :s	t'uSuiUTe1#hG:Ȋpư?4%	Օa((G½ׂ1̂s
ҌSƸ1}/0of{PK     A (     4   de/cardcontact/opencard/security/GPKeyProvider.class
@EB[m\,"jjYEĉ`0sp 8feͽ6^%%V5v^]VΏj{HxB,a>EaMXmBߔ\D/	q (Ĺp Tٔn^A
PK     A km  O  ;   de/cardcontact/opencard/security/GPKeyProviderDefault.classUSUnf!nZBݤPmm%6l(h0x\6MW3Z:Lz&<dܛssϿ p;)70qIGskGQw"CT0FNMzF
x&0p*rwTN6׹P8UF [nUKb7=.	\'O>Q
36οb]hq)Lǃ0	0ɐ9ϲ nP~RT&.o$v?&o4	]:|NwKC͘	]'@!-ӑZ\vmcG4U&\3qP]."Ֆ
Uze~Xiq1{גatbfݚU3^,}ă/EY%닇̓]l]v%pW;	Rn01SxYAZ%g]8L)">NFM%EKAܡ&~*r[\f+)hq֩eh:
KuXe ilXvuD6G 
UkBj8sE/ E֞F tg1N-6F
_+e-MU-YO25H4+c
KR֛|yÆ߁(r+JЈUAa([3'j`]Img\b$"A_n"A65E;G>##sG#o(
Ѕm'ѿ`K]x<9)F~"%l2<@d-E6&'{)zY[ѵt#µvښp>rƢ?PUgmG	|b"aoON=#8o	]K<ʛH}R15CYtmn~ߎ*EVK3J=2ČA{iB>_D>@ur
PK     A :A  Q  /   de/cardcontact/opencard/security/GPKeySet.classTIoP^$q[JC4ew1;tCՔ7y*473g.DT#~1*C/y37f
&Ѓ@1GUK֍bnDrRב0!/K˱S[jHu\]G$[
3Џ픟 #0\dV~Z'}p*zh640&c6QaeL	2eQr/KL	0_Jb8` 	uH{UYV##r<^tf=*߷BeۭG}53B,nU^o./JX!ˎbͱ+%s5+~K/mlCA NK᲍Bvyn/v\T%u*zv==PkzwI&Ilڏ~@#Pr0C(ޓ=FaFZ,[5'Z03Z)3m!Ҍw?k`Q³Mc3؍YZsArLRE
q=JB#JR5qQUꞰTrEI&hSPB*Omd8&NNStGCs)q326>]dW)23lP`HW"QQ31eR5G':Out]Np+LWp
>I/=0/+F66|Kmҁ/ɗVЊk:IZ1	=T3*9wKxEo>nj67/6f:%紺PK     A AE=  /  2   de/cardcontact/opencard/security/GPKeySetTLV.class}RmkP=otݪәYum7A"XBGA4Ͱƿ (Qꓬ($9s''?}H  !zwmϕ-
-.2+#UnT*XPjXư3CE1v96taeCRSİotm+^͇RxneG\`$pu9T[Epb<-ñܞђ>	4GQ*hp/.5T<eR8c߷ƦɆ`]%\fX,4YW=smPpa5~Fpe,i-',R'zuʛ/AV!`z-_Lɾ)7N0ΐkNԿRk8fg"[>L=vؤlXRu^m&P2B$ӳ@'A4nП5Ti;:OH%/^#mZ~1 P(δ7Qg}`!~`c#A;m#?:heRse22benE PK     A +ba
     ;   de/cardcontact/opencard/security/GPSCP02Authenticator.classXwZieo$Q@lˎ(	1)ŖG/"Šim-b
R<RZh)m!B'?s=]Y~szܹsw{g_E ":*Hؒ3bYegU2+يm:ST|䍢cfuǲ%vEӹ]iy(+)]X5rfq4+PUc+'􃱬=UrX,
Z[>j8bыYCBsSЊh,شܻĎeаRA+p[n^e9<U.*zu':۶akŶIMӳ6}.njZJ?ܹqmwlP̽^F1W=(T[`(9UT$a
Q7jAH#qH6tǈd]"f5D!܈VA6	-ls$I@hR~-(Y6{̒3v͙F;*n	1#nqs8e)|!l-mBcH	nUqKX5fL%	.#\<;v
nW=QtT1IݶUZ ӑ\DRen;PCxBȸ{˰.I1V/B(bd^נ;gKn%#KN6h7ž0.a!3FJIƇB/4*Rq7a.!vS)!@Lb]iAX(T^	(/լ
"w'Q
1*	JiSM.$\{).5 rt^RLbLHZ҂iJ-a$awr\2Q.UaD{9		Wϖa3K"U{,:bʥc*;GH;ٳ++NL$=zE!}Lq	M dp1Dci|_3*~ggҹ★Xbdn R`$oqD ŢQV..{?q~Q]KeD]2N@WpA(]_K<;~q+G z͢_?`iQd!6E*ssq#,9y/ɋKfOQO/)Mזl+K&Y#L`2r\@o|v	9RV?{NMKJ᩹	[dLXP5KX$\LŁЍr%>Mc
1.f9>("`g}|U|&
kZ\%.z`d/Aט$\wd{"#4UNS&X7m2/,);^3+qAd2MLt##^E&m8G]%C#MRsC )3q\YΚ	k̨wX[6ϬUEϭ]z1W0{-kRګм驒WKMYaSc0jkzQW	7,Up׫qKoc~wyo`F$>/1{7D!4*gZ:է166GC9ܘilnF]+\8UZ؀ wP
$E\1^~B7b9~\opp[<hu@WZ@S$7,xBM4LY4~ҢO=k9vq:ZBBt
q8TJBpZ@{
zǓΨv%Ew
B!Ə`
kmV^Y>˸><]Vy~QidC
")!4"C_O|rnlK- 2d9zȈNiܷ]>=0d^)]^Qi9t&4q*V%,ϐk> Gڌyռm-"n.0 )" V0 )!B>Nˏ4g8b~/qiVmCM gĻl)ص(}&t82Gx}n'!N+蛡u='Fq-'5烽DpiAA:{CZ8Ķ6YƣBΰcP?&m=ACO7jo掀gֳDQ-6~Dݣ~<~yEs+?ru]*^~#	A)X<;T`
\lZ}5hZ.2.|ZЅFԺ|£ȤrXiOòȝ_GǇi6_XV
ZvXoE6e/	T	e/a?Uי1G2UXؿi^
[Xd21\:"hIfEYw1J򎓑erryz!GIc'H8>f
ŗ/|*-D`_wC\#7kIsJ?<Y@q&:Sta?p1J/=+_rKd4i7l~b믊sY/$,yEqKg1 h}C }S=IJ8?zPK     A l    ;   de/cardcontact/opencard/security/GPSCP02SecureChannel.classY|T;{3! s $$7 Le2.3ddfkJkwV]wv,Av]ۮڗm>un&)lcw>熗;sZ
M^>a${vdFsx2@UUwAC
b1>jdbT2gDsg⹁Ma_a7}F2i&J|/;):J&I{rʏQByPwK}43Υ[h@c:fdOl	Q}t3u̒عL<-tC>ɁW|, hLjo<ff()I*`ϲaUl1$Z$ Ku
-fp5U,ӱ+F#<̶͙TzPSk@uU)pۺ67d幰kU\cF*PclHFM5Uo$
	ez_>j7b1FuaSqx6ȣ5S]uNҗNTlX)<%jsTRE0AG>xys)ojwΈ'qK.lF7gN].:$,h*cL<i$}~#kjoʞɞ\ހ.BY37e0$\X{D<nd~)p;aE7k1r?ydD}Ū,imyS1y+vwrXN rAcD8Θ恜.Cno#M--Цb`أG\+l'BLE0odfS1vwXS._p$L<*҄)kNgtdG[$cySL_h`n1[Ylp	U	2|)ѓ]oTo!'F#ŋ;EO~Tj
nSqK,wbÎ[=(GpTQn5cf6kpZU=^\>V7L_=9;<l<H'&du#8wpP'-*
$f猜9@WQbhN}a~ĭ-0QF?$8(1W		goțySdvӿ$p˚f|rpGB-_*H-řw&Qt>ǖ0~&u<ct~ʥKxQ}lSgt<+r@q.5팎Hsҋb)U𗆲=3hR
J}QPP_";L]N/2pٗE:civ<z%jn?ķ)#Mad[h2yQE}zmHk[K`cED@oo|Nqn'rN;#m82]/0EnJCm	!*60j[[}5MK[Gss{=aP+0kh&d?Bm!.?l N<a}b04Cf]2u[@21G#S9
A
w:XK8QEZ|\?FR}K]kUp̦٣L0+BccV+6%/*
yN{?$[&eqD_>bed.{Ep
+4
ÚL;rYl)l
˔Ʃ
^YaFNo:g<b-3&Jưcα±cUpmҌW]}/"񧤈%v!oxƌ\׌YֶIXv&/#D0R qϙ17ohM

T&'c{Hp2&kW8D͍q!g0Z~ٜJ9VUMŲcؖI%{̅wO*7h>a
^h>a]^cȽ!BO}Yf.Ϛ!ռYpy-MXN4ZFdȣ\&yskw	K.a墺շyLȓ^y,nKEhJkaԗ5ܛ3[a7r2Oe؁>3{f̞0|zO.v	w;Ax>#s%v0KYN*5O\*G) c>we
txMy-.
sx1?121g#?|>",s5Zs1t9=1W`cgY\9r-g'?x1c5@5nvj$Jj$P)fx'1fI,=%5u'QSS`tVE6,jWzbP(
:SSb-gAYzȣBZ+7Ʒa#B%X5Q!24b_^YQ`)X[D߽Vv|o݁$.mnG+g_s?ϊѰJJ@+a\	37l\	9Bȏ*4F*<l,ao?f`nIRUe(Kot77幂[ԜnHEJc鱥h+;O,vo;vcHYcqԝWykQ\\c?u'0e~W鈩=XnMtrkg%?5Nt:5Vg[8Qu<9br9ŤV:ڮC%ͣeek&#([r\mwgo:DCW=Eg>O!7}&tlpLDF =|~4hBam9{K?9?|f,3,ڻy
6hrx<E6QlIaZj镎21d˿$ܚP(#SxJp&<u|k_h(.S<@9 8q
bA4G
4O:OG@K
J<g)b0V0Vsca{/`֣J8JnI3d+,Viycpt5ssM8$xPΟCrr#xPO[p_(9X?)(Ü<0'Pb9ZuhS؁/p>g8	d,>ӸgY}gc	/q
סry	e*i.A+M?f	M-K]ڎﱄPeۏW ~IF'S:9_з+z:)M{o82URwU͸=e;.*6;F6^r*"U*{H\#T<J4(i*/[yʔW\
MSޢm#cSifB|Zd[BmWSH"xƚhw(b]b-s  V*!W\]bWco'".F1bJW蹔G.uץhR^0\6Rm9ϰB_`+"ƳaM';lETL̬sSNLEfօξ' fU
QdLeumUVqA=TS9ʫS/d}k'II4QmQ{hA%ʨj>f1ۢnZ9$g9}E,8OqI5xiD^ks謵ݝz:nZwV뮰FH6_}E1t{hf)mh
V5XG밁JEף6`Ǐ#ֶR*,)́h(D.=Tɾ'xMO&nȯYX>:fXAPx=]8f)(R)-,IPrG-;?4S6rZ0@(6[g9O[lܼ{7Yu\OpSQ	ܶl#5b͕Wx˱J5rr\vԉQ#]PK     A z
    ;   de/cardcontact/opencard/security/GPSCP03Authenticator.classWw̾fMpV4"Ih0lM !dw, U|*jєVE[Iw>⫵֞sJ?wf$8v~wF|n^$\ꓪJKMZFVˈu}NKMr]m]k2T-ÔLVoMoue- Je(
0OBp:nOY˨TJ4+Yj&I8Cԧ@}2@smKDJqKO/9rYrJ	'!cǬY-e-8Kc<5kE%DVzZKE,#45"I=;k gl*	usx==h[վ\#c1&
S戞HI81L9
/K8sX6 g+'!T=ф Dx#1="5
jQ'a6ڮhfNJpXd,SPePP5a	%iI#;z\8m֒Vs|R1bрx0R
U&6Zf@(Y0ajVp`-yƙ!c53qVĦK#QK5g|V1v+J;$ETvJA:%xz9Zp5cnj*{73@;jj゗PmŶۣ`ZLr!5ƺJeM
zq-*e3j u3t2-aDnPQ>~$l9 1 cPjOhtB7%tre&%8Ihl\KW4ed`h-&!3RZu Hi&HxL.%	&c3E
 Soի"N7)YI8NAUmݱG"&w*kzK6T
q7%jb'sEw^a'C܊vvY2TMcPzMNYdʌ!]b03--o؉v
;Da|W{"s4L͙~'SlLK%\|:a]3N3ښpfv;Jܥtjb] J:M&kPgOˊq*(KP~Sڇ#gM#Rt5ogSĜ.-Gkf(";Zr%բ
gqPŇaMn NVHUXyl'>9c|˧ɩp %1%|!{_˾9ש	ynH:wl<
.{sm?e&SW/
ף⤙ڈ(y	zl*O3h7*]Zx2Y&B϶L5۩YF*ǟ%\_v7_ڽ2WDFf "k0bGBEXNjF- 2>/${̈1y|bV{C 蘵ZͤZgO<{4!{DmR1֣gmi5X2U'O-rqA*[9qOs9VE' UQr c(ę+K'赗=PBj H+iA%VO\%JW9O:ʭ.A C*w	* N !:S0s_o"Zԋ )	E69`I}zc4"Q]܂4ަh"MBIȽL;ഠLtb9֠kq_	\$0ٍ|
ގWødpw1l{bd<υ('SZr>p7y|9{?mC8v*߶{޼H
85氿qtm`HʣX/FACES]RׅKEMS!3(8oPP8JS
aW<vtUkuS/
_ӣáaaE|-VQߙhM-mcq'%"R>N<~<C\ux1|'?nf~'\(
Pʳ_Kx6maLn	uFrO
嘴b?;1`\Uʹ!Pǘf/w)wȤbr~ndHQ܊vim&3݆Fe?M	gNqIR	;>Rw/G4Ҡ^0ګ0N,䪥D~cSuM^9vuH-_X	} t5p {/t2
Ϣmg,avlV#N/fuSuv+/u^pօ-g2w)ʈ밣h!zu\Cɢw[DC~5,/KfU,1GmgDQ\n+@l'o6e9u"[kUlQOP]w[|/psVW^P2^jjK|s	{9cothm3.=O 
lELɬ`erIbx6}u|H-&ٖڹ
?Z /%`wb9b{Δ:[΄e۽B-Oۜ<.wxNCT(%(O4̳D#_PK     A   Z  ;   de/cardcontact/opencard/security/GPSCP03SecureChannel.classY|Ty&QABB( <%%Hf3ֶm}BV/m]ֶknkmwvukݙ@τ{89;wϜ BBkgÏ +6vryAd*_)V-T J,l,O8uX6Ox.qRگ9l2nͺuKvki鏥R΀%S϶fXncgXVؘT)j$m:<t⃱]USuxRʹ18Ad<]K2d
\I;:tp ɦ	'[㚨;M6.j).ըu6]2*l?-X#ބ;KVSkwKGSK˰B઱9T.KeUgz³D`2ֵ4u	pR_-N`GAZpBM--Zh)Hsy;|2*yzbP*tFX#\K8|2#ϨtV&
a4T=NM^ԛ!tBuX?.{Π$әgpwӫmBF66a`!뚓}mӧƶcCNNAצg5*-6b#nޛwT%`mls@]0mU@0ҬDzu2c5F܅㼚8ull;nCHOϐו-QN

N.N圦u6Ҫv'՗7Ԧ]|P0/CF^%2XQ6nT(桝;UMc>[faa9';;u-vm)&hLЌ[m!H'vS{6nGn%M|?[	vf!܌'
N$6Z|r΄EY`&4<mAIQN63Iʝ&BĴO4>CcM30`hiԐ[zy°<cpiK?8Ե%u3'v[[N!`̓|eE.bL%9t#Hwpn#E`,ИW6>/	cMac/	fE;FꞼJP
<F	JP9셀z\0ccCCUUϝIOi⇒2,ԟpMEߖKր||CYdn3(Tߪekksc}*S|hyljoڭktDn.
#+gyښ/-|wRTJ%u?(66@OA3	l|meJ|n(緽?++7Ic`;sfg%YgqU/-٧OLQ(}@,9Rq|8{]wU]74uҴat_keEܤ c-!#Zuuvn'molZ쥇G';?$Yf3g7+	У:Gt6d0k)F;v6rP|zCۚ'BrxLjOΡN͒vX6 8IBU7)ݲww2F%AV}ĝmI쎖LL
NX.qg:9cdV1l(tn*gIgxk
tZ.n4:ϣ<id\s$#LF7b2Ƃɶ|HKCI$s?CTT*\]c;u;	"kxN#ݷ-Us܋M&;&TJQp1<}bnN`Dv^D<W3œurCpJ.ré{(Ig
QAg@NeZ :Q,Vt:ӪN?
tjh`l}UP)2$WՖ4\n|IӻBj&p:˝3,BeN^MLp;gmgt͢ggw2vMmr3 ;T׾MJ?ĸoZ6gjoBsH`?d9ϠkL{Lߧ0K|wI[j?L5a0|/0 e;yvp꣐pX#(j9SU/:#rquԯ+#]ZuKumlTWscrC8VmX
ړSv^3Ayq
mB]؂i\J܀pP4B
HjVޫR\.C9?,͟,E͋W|:[ŴR{MKM3-5߬3Dsb5_XXh.#sVݮ0Lfxn͉kýW~6Y֜8ښ[{j3~TL3r#7bf{.MʲCD,ͻߪs\4:g@KOamǰa5>om퉨Dd׼\vGbˢة޼y?j|=Izjgm2I4)FLί2rb`g,^٪c64Z2,Bne0mdjF~E.4dɡ!C)	ad<
yK7[GI0X\@cĽ(S?S"Rpx%<88ǯG܁۠sFQ	_>	܏Q$ JN>o}@޷⁣xd$}6Hwh$@OUiyi(µ]`PU.Ǳ&9[I^JcTVe,})n`J^p?2xa8i|/K#=WeW_e=xya,}vbH#ռ^mt/&{'2gף I+h1@ޕ2Db:?TZJXj2GQ&W wf¹b)E"|(K~[_.J7}hA
<YUytV!J^ꭚߒ<RdD\3q}H8
_/\cyH ,?`!J4Ă	[J[P{T^4Eq2]^%;٪T%V|0+W*Swc u?R[rWվ9Uw
	yRC,
iY`f#֭wd\/`zkna[s79~Ξ2U
RQ0-J=XѨld,x	}-񎂸Ş4;wђ9Gq!
ѹGp2b6hr4Kr)f3{
#y/y6`^]},SGX,KU?Sny΃ć7$
tz,N2"em{oo1I)	0_U/!FZ))R!}2EvTI}LC/LyBf7dw[)ʅ\$,xd'xBOT{IQj=m%uK=dA{XOXj	-S+ P&vEغH.Vak{{ze[^Tx|;ur	P?xY}ug-k= >(XUsȠzL)=UğC De(6-N-omgD1G$B!,x*`xڳSMJ'udg1ekUc]y4x1·໛ƳvX~߀ۭ#6FyzDF=i_jjѣ6&D\4NBZ,^Vc
}҆\a%cqCiYd=
&6jѳ́0zQuv&,4=8Z2ȥFdLƍ3w3VUdyUߣefR[j;+fVW+a-x}=[||||,>A>a턵6}U/[_e*$_ϓK|||,>A2ԗ¦[JeL_%7
ԭLq%|%.$WiNdPK     A F    9   de/cardcontact/opencard/security/GPSCPAuthenticator.classT[SPӦTJh-B7nPb
&'73:G99dJ(}(/=}n D㠨jk!386h:SK
}UfPj86לy]7כe}sufsӠq	ujY̮1ݼMɏn8cA>ϫSrEaArY!m3lØyAwU1Fce޲G`2L-3>O Q,T
ŽF@7ݱ=Nm^Ϣ8heVt!R=P( %[C=>6gBaSHf;5w
EwLT4mVM-Z
\Wor>2*ly
$

c0L@OGTQOi:}1	MO?#Ǭʍ!0B{{F|fW̵8U^DQVt$iI4  gI:s
ƉK(S.o]b9-JP\u|B<F"Anȿ_.m* )-=~4~3!+$;e,~ fX^XIFNLI΄(LSØ1Ff!N}QqEP}xGs_[{dx[TOR^v+;5-om!p^D)΃/:Uh;^YPK     A ל  e  C   de/cardcontact/opencard/security/GPSCPSecureChannelCredential.classR]KQ=XcZߒ ]I#UC@	?|&7lwe[C(qDE3w9sw?oXK@D<),G]ݗv@H*WXJa)&!uec{n 򮤫sk W/Y;mLzuSeG!DWQߕ	Tr&x~D=iSB}\byI5+m韋Õ|ózj@8x?XueP.} au.^L'^'^Pj
"7z81W*-
a63"
'|~a@t6_(;91$,ayUJ=PK     A A!ʭ      6   de/cardcontact/opencard/security/GPSecureChannel.class;o>snv&FTĢ<_85(R= LuHKag`adJ,KIKOJM.ag`cd#hI\@ʂJF
`|ڢTfPmp~iQr[fN*#@:.`d`bVdg 8$ PK     A 
wDۤ  
  9   de/cardcontact/opencard/security/IsoCredentialStore.classVsUf-!~`,P M?6
I*ѴT
Y

2Ψ37eFtxx)#8"
Ss4)t{ν8~4#C
.RG5\ҝkDIk+FֱJnOk܏F`-ZC(BVҶqK%j(T%Mub:4EQuPVdX,DA1MXp\ݶhaGAlgV2 FlbhtS)pWMj,H%ưaF;t@(c3	/LA㑷;֨kStCaf{xIa:n	 C.^d&֢!Q畭IkFM˦2DU9eC`҉T<>9R\HF^#i	2tU$Z5>ȥ+Cdv&C0H'lH<w"}B'<}F7̤V)3JIzeQr
:5`%>hEOxG
Tڍ:ZiF7C+FS`̰֜ehϠ?e-`v.QVUI5OU*0*ach%($ATm~"j=">H3mIQѹdYΘϯ6W)ݬU.σF﬏,棔픔
u>\c
:ėh-9ݼbMkaJ*]cv V]c743cYbl]1w1?[z\P#;|ԮRPl[eݵTeX[_lJ5vhA{o_"}F=F-ҏo>TI?dx&h%JoFoo}aO,@ x_B8tŹ޼E³ݭxr]'f0RH~ȑ9)	
׬
&cE0cxYg+Ix
94G{{Qک0E&(bȋBGg+}hF'f߻`hqJdr̈́+oh9-6b3@
J!1|Q-$B<
yfq`zCnc 82bU([r<_Wۄae:i y?B9?!]'R ԆO1[(\ŗ_kߊ}@?Li^B)$#N?[ml8g)>ji!Ihx2M'h ׹
~"/I͍w{3	WoH1NhW%s;~ .ޡ}?bɽ+
=@{yJ3ZJ_J)\rY4.홧@ ѿJMvLjuPK     A 
PI    E   de/cardcontact/opencard/security/IsoSecureChannel$SSCPolicyEnum.classTOP=om Q6P*nQdbaR't	d$B4>G53&fnIO}{}O_<AAAEk5L
wf˳m❗v\2Nk/YE1eTܨ3+]͋q	WՒp\R
GJ86r./ETՊM2H㪂>3DMu8C_6W5
6mmuk>q3`Pve˞.F?}rg+Z2Qq7b˱ȕ\-hf2G"UUqb<&b6Hʯ|rmlz+ë-[6y61*+i5óD{\us;ncsOw,nm;OlF`;QZsݖg%K0%J*onWa2+^p&0M'#CyaPa0*05$n1b9F	/FG\9EYk$"Pxi6qS0ߧ"D]rT:dӄ219|ÿdRPtdJDtDL*)Dؒ9h)Vڐ܆ףmڬx0x)L[1nA
Q90
	ƎsؑSb.8g\_PK     A ʵ}  8  7   de/cardcontact/opencard/security/IsoSecureChannel.classZ	|T?wNfnf& #[D A"#%5$ʐH2g&,VmURkj]FPmjҧ.UۧV۾W_3C}`~/̧1|I.6Ya:*ncd6ڞNuǓ2{҉LEh2drH&BNnVwF[Dr)+%EPܷeɚY&cEE%6Rqg<&/Mu&77${
/Xʴ_6L
4B0+dڻ̎)L1yө
X<Tz d8&s=.g*sv081Yopg[W]&i"	.Vl2UiSLNi:U;;:I&nl)Ӟ5Xɣm%Gtւ~PF+KkLfi/EhȱP'7tM_ԇSɸl9NgrM2SgS=-Ďh,4='Cϝ2 8ަh/ۜ/HSVyKtEM65es&*Ee{{G*먣sjMZjIN$x2A!@6--?mⅧ5,_ֶբțӛLwqh:-{igJ~{6:ŦЩV̌nr03dJߴs]
.&Fm
eV,u|"Zm	-"䯵im@>D	NkLxM]gl4g;c4
ÇMMg,%PW0'
<՝&:[VXa:/&ZV
2U:ia-hKN1
D*iVT:17$iq
D y/Mt>mcx&]nOr tWtk^ .Ę<0&>=e6].-JʢE׀t9d;pe=*$ԧbw?\Ab-2<@m̋	^iM6&/QHK>M,]yO8Q@jm-$,5œ:5zLsZPH$+⛲d,hEl)lh
2/@"PZ׳vm<F-O7 hd1^Go.ۼ$k\w[RVAWo_ÆxeuM}ZifP3'Ϫ:%GĆuB&΢`dLV꜕'lzߑȜGt5VmzL<;hٜ9#;KO,M
#"eLw*;.;qX_@*`ŭHwH!j*;ҹ*b0p^_Z6B¿쏥v/ :k7K8"{ͦ_ѯFvES =flip)ځS-=ݝb^8I3brS*֦zC!솊PL~@>7jC\(Δ؝6IlUe6Z6?OdRztsA~w%2~m:u(cz#ؘNa_ˢ ~SmF;!C5ڜGXMtO.ِw&IZt󨊥' n/5}4-o7D2&탫S}
=ȁ~ݝQl+
*ykV<~$=>p^}oK p<Ī׾a?saC X\js8~FO33ZʥSVzxeɜc鄚hG.hh0N=UJ^c*=[ qgdy[!20@S"_ӵ&nu|gisE4qnv$2b:i.t"ʹnܝ@0kz@V܂[7G5Z2b݀yDgf v6SD頷`
IxRܸۖLsG8$čq<>dw@y^hi:ƶ%M+ 3#.zv쿒H@2jhx0,	1A3}T*=\3c&n]ozARh*ӐHjZn7L'JIE;Ӛ:Y{'0D_󚓢bT>9geJ7vb)b[Oҡt
N:A~ۀD+Ҏ6 ؗCG~NZ
U7%V5Z,3FPGY赀/8GaT2Ng;0n#k ^ޅt\p>D&][LZ{3Ϣ
oPZ!f^dP'
6bA0Xp)v^?!Ӝ/6s"ePc;s/-t{hzh(OO	r.fPx#xߘS:vD8Sg5uSgϚ:;"Hj*$wvz2(WW/N圍@Ztwr?";^+$;7W8Z`!VD;;S7_TOsɮ<Rip<a"xx({`[0W
5$$F1]dubTG~.-iܡBt8C/ɏ^Cbݞk8k'ґkr\;u;3׎2^y0cY`);X9c3/1Zwqt>\Cnj	6>'"O씽*wQQIU;id%/	T)hwT!5n@rQu3h<M,l 27jG8X0DO3\i3&=@swѼ檩}gqU5ԚaZm,2"iʌkZ?c7+l\B05N7Z<p|p.It)vE 9tͧZJ)th]i$ܠ/g	-(Zy
W5rz
wX5pl{FHe9xK4 PrY\mQD~0SxFh9Ȯ|&=LK Zt+m9u884	C8wpD`4Q AvӊˋLLG>:w6|2<4O'JB0QEi=6>=I'ҘVyERs,.b5i
({/tpǳ4m<NX{\kN?v*(^Տ3"WȵS2nvWbF>LkʰGZ(jRl
[a7T
{ 55>s2mmvae좍a.:Zk7&.x|
F;x_Kp44*}>l@>ͥ;n:;'0p`j/S)*t4E:w~{F&mh.?滀6K@^o,7V?bE]DQ-2ڴ<XPly{A\sqb"j[X<[0<̱to>zL Oc*(3 +-2+66\XC
3x < tJZX۞տ7 \[u
^eyON_DNӃSz No/+z؅ׂP)h"Tt4i.".\N8Dx$u(Е|]ͣfD}BC=˓	
ł,؜^=HC/)h趂P
BAC_(h4}%p0O搻]wyo8ܷuv9i\ 8ˈx
(Y_f/ƨ1PP/Ȣ]{®ݹqȳB`EBȈxIcBz,뭎xevGWcN{E|!*M|9U"h.)\^/y.
+wnE
	yCm(;>_vFw|}=l_W[|8
^ފ`$3I:1a[3ONB_ V|kVhtZ>^D_i	7L+y)'܊$t9'ӹeXg}O;+ J49k@6S^^a>z$m\fs77Y^=|
ovވ-|V|۸3x_ďż/ўn*_R9(&p!7 m&#axЅXŏ<-zqX=z_BOމׄ{̀ҽwDE/G#%^8LR#>J1ЏlZ8/NL~mk#uQo1eƸ
".G7=[XU7\Tt[T-4S+|ψ(nbPzɊBm~H`[@(p͒fnbQE۰U_	s5qƯ*'zBš@~?бnB1(:◽9$%iz˹ٷZo%+@ g]:m/q-nFCTRv̱}tOsk\`u#-,,$$CgI6xm,V5p	jgP\Պ
Le*CVڠ)q+PIؿ|!4zp=:B%;!tc[*Y-
w8Mxu<G?@BRY/br]:䓡t<ptiA.
p~KB1A[\$w,#|!E	6|+`Bq;a:wPN<NốC1R=Jt?@BW@Yx?q~	D'U>?7)i`E><OQ
W>+u4>?L~oV~7@~Py@Y[lUxU:\TSUU!@PHDR+a45FXPTJWg
55A]&ԭRݡ=jz@UGLկjS5[~ȿW}w>^RCDj!Jy
ֽ/cU^6Eճ=ƨgxƫuJGbf/P["Sk_쥓7/"nUWWгu	P5<|*ggh?'TTjQh+·#"э?:b$+Vr850]ʜCdJ&}1n۶VA(E!1Spo/*Z>gE</"Xn@]Q>i_йרKg=v[ ^k/ʵvg} 7as/.z^zU09K53G5&7'sg_͢q&~#U~,қsKo8ϗ`qXVI⢛pw4R:[G>}}[JyB["r3N_>{'Θ{kQaS^w؅VV\^6[v+i3q@i_4i$~-">!u5!\hߵ&\M﷕u>DԔЧ["1Aϖ\жQX0VUԩHbGS[,ɶ[h#1'>
pq1!#Ȃ9`Tm.KF`sTjef,R*A%Py
Tzܚ7T[2*eA
j!kki86dһVbЌ]V.WMN/G_{W,Gfnt|U:[5*Ig"D)/P-d(`zUUTN#Wh:T4KoTT-S	jS]pTI*E?RY^W_7YGU\HGmlX]%b.G.I2ju%Q׹AY]'8vT7S76!ZmA;N]_}^WA~ǿU/aHV X? G}
u~ԳjTϫnsuzQ]^RW_W.S9;2}<?RoJRo#5F?_)o4wP}h>6'FL}jtdl60kӸpecx Cmx7^2+FQjc7B&#Lq9mN4ƘU8s1ޜcT
8
NiYcp~Us*¯h>~gRK:?n8%r~
$#|OŘ_t	WqӯF
[ymTbĐ8kRc3ʌ(%rX~q
EDq+\"c6R)`r6[=sx)z	='E0R#:}1i9s9W/n6gz,eVHJ]Tu*5SSrytt)I2:xfP>!لI$Qn?}H8ڏi$ROXFUj	c x'4SQe
v@7!ҲTwya&C_
H%H%}Gczp~MLxks_8-_JFGU5WN}mԱPy0"ra<9^xs9i30uDmruS˸۩C;^JXJ`9ɸ·F#n4Xd	01F-6ӗi+V !fWI=-S6;/m-]:{v.v3<R6`M
Lo= 4u( k2kwLj 47Xٙ:Weg
OЯMPaw π\@+	ڤ
2is  7a('c[=| .?p0|(S^S^=S·l5Ca8ZGOD>s0[kdb}Q
rHJD?/ZP7|0_77)PK     A :M  _  A   de/cardcontact/opencard/security/IsoSecureChannelCredential.classRJQ][G'ʹ~7h"!K84s	
>$*e_֙f~}{~,H0rH!Mr۵	mp,[ c" rjGZ;-JiG
oz5u-kuSeG!+"3%}յ~>	&5_5Q$lG:FޯeE0j^G

ʃ-cv)6<[8-+@#<Wa_ՕWz9vmzo=^{U}7X%z
D1C_
$)rTB	T}YYy=C	s,2rF;c,}0) <ŕ6ӘX[򀡻OtǂTO0_rW|;PK     A c
    M   de/cardcontact/opencard/security/MessageAuthenticationCode$CBCBasedCMAC.classWkpT~nvlK@EȕDH$ d]Id	*hmkVmLk-hQN;jSVgL[ BMJcu`ss^}9ra Ypl!&hCX4i5>;*뚄LɁ6;UdMV26BBp4lTpw7>LOax^sSsCmz67>LY=u)Z^CˬP(b21Շi(P귶}XMsێ+L貓-DҊF}YHDhWM{2N-g?)oGU8U$P:U,>(co|nfBH&7(8bSڣ=PKEBX4]z[^|
χ;I/I_aq$`MKeV굓vkEQ
Rh*kI[u@UWݽLȇ:)v;3K|8KܡؚpԊf67onR.rQ(jw&ۻÝ
QIrѹSr-E>*/@Cڇ5Xp8Hڽ
9V<n
c}gaV;oQKy-
O%oE!4&)?H"MX=#ۦPzl
>;
cjo#8U{	;)WcZPiЊS)ǞZ
OXwP¬+fA'ރ{?RW*0+tYW)@Za%UEaZ8՚Y⅍N7|FxRpfd"۾6eEx㦓+=!Lv;ҙN+C7{(xҗ</b"3='T;Vo1CV<,Ce3Q=5%by+g~!4f/yzי/de P5)vԎ[zl\,8vgrL-ep})gJ/-NbE䚛7nj2yV!RgDbI2X8|ʂR"ePgE0ٯT<h	KnKmZJ p=u^(iX7x&rCڐr5K:\PҌW@c T/y;sͭ	tE:0 |\B~sq6@*꾞Vo]pnm*M_oG;~\G
0 ԡ
I*<Mn̚@IttbF*ѥ*tg({Ur4j*<ڱ!.+ֻcBiBcrnfMM6CeUiRĴtIziښϐM6
p{7;$rb/a6~ #QC[@)ZVi#lLjnes&΍jILD6(7&r_0I`rXOF
E{uCKjG0(ޏ"CB$:ja.J2[2m*t	R]N.t).t=(֒?L_[Oc{''Ɠ)A,z߽/_DX,d0zٰ:NMNJw.	z|ٔ7q'}*ɠ̷ׂcFe:8fVR{eǛ2[h,~+f_#Uŋoա %Ax
h?e1{S	g\/aqi%S#KI-?uagx+;ڳ7퇛sRx&]<y[\,~MCo(x78~;:{5#Ve|^M;2I~䔺Uh%^	M|9lt ٔu-
8t?;di[?/nѣ'O^D!'
IzA\:O sA|y\`db1bC10eNcQcFc>ߘģ.c~)tBh/rMGmDpt~ELwB1Ҙ~ȘטИn0wytۘ.0+#EWOϊQfԯ2/6?530_7/5ˌY2֦*t51_A/'N%ĩلi}?q~X3t8Ӽ-ҫG}'qH,յU]D\<U]9BcmDVDDD[k=b3Z&)&LhGDt~X+$`]UzZ\/ԛ5#bPOHfJ,5}~x#ܴFdAGf\h7
X!0e?no1'
R
OiމBx|[GPv}??Gg_z#X
18c1>u4s\3q5pµT
W;w̉
ODv:\$+x:]}1<9(E67h̹fw?poS?}?Ufvn\ed2G+0A'+0Q`jH6jB, }e$e4lxp;W-A<dY<8_0PK     A Z    J   de/cardcontact/opencard/security/MessageAuthenticationCode$NativeMAC.classT[OAf[mYXAnz)b %ƤjvҮfww(|YjcFcLsf;ߙ3_~>E "!
vMXR]ak9Ẽ,^EXipϴ
$B+ezxEQ
_?
Yl=
޲,AK4ѫ*1rN"kLP1a<
[۠$d]]0wA(].jAIC-DQΓ-f&F1	
c5JB&0kj4-^wGs5u kZ"_?߫
Imj;[AbAjрlc7̒psPغi?{0D̹*nR:ۅQYV*n3u}6e`DL#}drzLV^Ev1Ħ)	-o2v[۲,lT
jJM,hX|FZ$`vgI{Cz`HҧPߣ)FH<h+Ak8^avaqH'"IA(ȍ~ D7phnh<XIwK vp.}c?nrY*+Amda>CmCG"PUIaj!xH%Bp-)1c3vX3X
t"۲wPK     A xR:O    @   de/cardcontact/opencard/security/MessageAuthenticationCode.classSNA]tiZEQڂ썉%&B	[/jHW,.+I| ,M1A{1gsfw /e!	#dmXx!K_fHW&fvxBp(XxW+DcTǕJ'싵c6&,:ǰ^i_vUAG.~PCX`ػAYNiXyX&`\/Egt;Slxk{4ԑ3lOYg/cťG֛QOnP}avc/"|?|8kx,Iִ'xН`Pt?x#Ni~%h+a(D+lwK-wD\,/'q,N'~9V*
l3ѹDM}%%[tfgt.PmY]ɟ Y>qs'֢%ɵ't\"$A]:4;J^?Ĕҋ{O61VxH$QRc5wI
5<%^MXE-R H݄^
PK     A I    4   de/cardcontact/opencard/security/SecureChannel.classMN@6$P(O 6%VU "*쇉((P@}yo p
		%DmT]E̜QjMY B.Ȥ~9)xc^htew2ͻ/nByiz="KY \G?(ST橖MKgZulLUsWlݙKEiF.*583.
07˼M^܇geePK     A |%   :  >   de/cardcontact/opencard/security/SecureChannelCredential.classjBAEhSڸ`@JAAϕeGbb`=;j\fA;qV{ѕ7iɆ;mBg,BCpݽXHx ƃsa	Yy֬xB}0ڋZ
OQGSZlԮvToIPK     A                de/cardcontact/opencard/service/ PK     A )Z0    N   de/cardcontact/opencard/service/CardServiceUnexpectedStatusWordException.classTRA=A#$YxрJ͘
~ZŃ>OZd5^JtOlzu,&C@:!<ˑo
C#ʕC-sͭ:|׫̭w&R0+ȎwuM'mGjeW;C?C*Ԋ^ܯH㘁A10cM֭e3jb}gפt6i*ᰉd87EA*FR6iSvGq3}/ߨSR!ВrCmsY!ֆ#tI:}W#eMVP~ǐe2
vZ=lFYi0ljϬ"E)U|X&+A.3sNx:c/Yvy.s;úp8$`Jc;;ۖ""P{(2/sRDIfqm!ژ?;zF^ۮY<<D`>j؟Mi8K#F͙^$INa^O΢??-b8Gg<zK`	}Xi2&qhISt98Dׇ-b
"@wQ2"9G J'gLieX 46p%_=*
7@!bfHIGVE\k0:$]7PK     A   f  :   de/cardcontact/opencard/service/InstructionCodeTable.class
t{N_fQTBP+dw6ٝ]fwd!(4EJ5EKR *bEjѦԦRjST6x=={3cOs_7&"Շ8W6Ic4xUqneqՒtI-#mVyUy|&3 e϶cs[,;SFzS6ޑ
6ُQJv
IS盶@
M
48&ɳlAPF}Sqav6
cN#DLQE4C1\MƜNF}a.y  0II94P eK
vy	ؼ$S;`$f&F<V
LȅbvO9^[-lEn]GvZawntDHΈy
51`vL351YސɡF^Ia'ύ!˃mswNLl3cGሖ|>X潁j}nXi8=#X+*:ps0z5.izatמggjWITelD2yX% |F'y3
qY(wEhBW#1'j`Rl+ikpE2FapI<'*-PjKK
AL>/3+eSIסpp"s2R
i9($HDFd)ЩV>#W>j۴SQx!wͷvЊNkp23wu<ack1[6pȠN0wZyP,jX(	u{zL70}0n=kJEfұH)%Vhts6ԭ1{1H5l1ղ5mq^Jc44n:2DpN$:L_7w㩄tﻟH{	3BY,
v(SdcM(a;tF";9'e9;ÌƚWځOf
DN;QdZT1$!h:Iwvtf4csu;TKǔuN<KI's⹗ѨN%=wiD~xznMd~,-H@=QW_wNMea(+nRy32|Ytzek^`<f'֑ηlmLW*]
G1WD]?)]vכ
lQ)EX-o%~(Ǒ]ܗxAȢsKkJKjKjs}tͪtUfeImyuU4,^\F򪴽rt!"%ŕ5>3vi
F#b3+j5
ťi١MtvK֔W-CRo_0[!&[bYa_0YëW֔8ÿhC4_+a\g=߆Tdl;`o:IމјT{OdEr|S:\
t[N0v)gϮ;XF'[ 4 ";HcD_a?a XM4jKojWyK0aF"v |<>>_ c!{dc-q0 ~^ʻ
Lp>x42pX	b1o7H@<V+m `eN
VąIb811
{D}E=(.= .'.#&n`\-JMb*q5zq
lv	[#7	v&lR-aDvNs`lH)U)RYu[v#&+v6v$!nc`3'V]
<?Aǵ9ݘ~\puxn4Ÿθy#SNJg6ǀ rD_Zo_߭˔nS[RT߷www4lux.=.t󟗂
` *ap
=un |779ɷ`xɽ^NQxGƑqn砌y/yĤ&tݍ`?p3
 q6Blp0ۭkL"P 1dPg+d0Nu.FV&~Hv1lRV@6Ov9tYE x J. 8~YS$
:D#M+EƍlţZRbjOjϨjDUgUxNUUxAU)RaAJAW{+>Z}RJUjR(AJRjsr#,:$
Hf2JGZHTGQmçq|>D;y_gh!ޣFy6rAe|-cJCU|
-өϢZGx6Γϧ:2Z+i=;ju{7&h3N[N|m~~}!_==Ho+5o7=KO3&zLZy_+k}鐯^򝢗}tw^#5#Lmt@owqn:KoSN]u >F'Em}M4ƴ̧Zei[s<W[klVimP[ÆkH6f6N.%vM˵lrfv¦jj]gjl^4w=
$?PQ@(E矲9CЗt;z6]	vPK     A Ph    +   de/cardcontact/opencard/service/KeyId.classS]OA=mm](ZTP-JbM@ҎeK蛿gS0H| d2ޙ.>qsΜ; xC C;־e֭F|KCxnElFATELh3en,\rULg7]sʗB(bD\Őa6=n.cTSTs ,/ .j@MN5*%RV)L
2L*?X\QaWky\3LJ>SgC'wQ Ok	|/w!Q/
nv"#d7-{?6]!]/3F
A=S1-f0GО;^luYq:9 vH<4jԘT>'0MЏސ\Qgi.4ޠ+T#{#~53AQ,nR$ѩD: Wb"/` rPa\0Z'ǁYjhN_)OD>D,hS"BExF=5I7ՁN0EBLp[QPø*힫l<oUL	'1.vJ[duq>cu+:{L&*`quFT3Z#]d_PK     A F1#  P  5   de/cardcontact/opencard/service/StatusWordTable.classW}lUg^J
c Bk@v[
o{O{9s-mccNS@23g2YuYDb1111Ybbbb4Y41Q{9z<36Mx0	*0kvHTn,0u{ֶ:
&pgN]'̹;nJHÞ^QQq$tz0C`^Ru^/_z-s#lzV)XE`UQ݁0%K.P)XؑW**[0KAq>y;{
]svo{eq*g 49ޭ쾑XEv
V'yɪi񓣟v!MbCz8(86-bnhkY>mϷ;2LrQT
Bv&Zk	<j*Ԛ,XSkUnLt1ig@Y^Ɖb
EBmW:$U'KHQ51	,F:BpB+=u>Xe7RSX)6/~3ܛ'tjvt?&Ƣ|;-mU
a,!'vLr0%2v-\TmRcv\ #ζ6$0yvT6	l>@jR+>RKF.9C
UhZP{
[O:ϔ`u&)&[`]];Z?(%`OSՑ-YAy mD%uPM^i
{55G^35}$3	>9SU:IΫ
DVܕм=gcD)Lؒ=͜{_D(8QTwY8VǶy΀p=
m§_娗{Dw)1FŃ
x	Ǵ׭IJ9Ɋ-\UH6ϔ%a}'ɄsSd&.[7䦜Lr\FsUwاd|	=^8%{<eOȊN\TOHfܡ.d|r٠Jזk9qR,2;7`!ĶH9%vrA*W
=B&v߰SrvFuՄSq#'3Jw1*8]og]{Sx#NL*y
qJTe)$b*VXiZPLK	6ᑑJP0S{-HV]tzƄUԀ<:n*\,xUވ+X̙`A31Ƿ4_&`AkOl(` yizTFm:Ll2fjC#lmj3G_5a=~t?(h(jy?pI9sYe6lJ&շO_9ZI6w(P6Psa P>NR-z)R+z{)޽Z>'({)Q|t2(˔#?j^I}%9xf7_˟[21&o%![Ʌ+ri_$>//eċxV Uēr
1kNwˍģr3BۈnM&n{ke'qO\*!.⭲(&y8Uά|T)PA>ec>6b3zմމ:q%uwKȐ.<qH$3+^AW <*^C$xb}$_'~AKįP-Jw9yaG3_ ciOrd]9yik&`3<k|ɺ
_l|ZeՆYu+oXxڀoYmk+cekX{߳.д-eEZ}]'LǭC뇘 c3-/]-oHf1幷>
nW鎿wG?`޾$d=K26Iḡ
Q.:E?kQ,p	<x
PK     A            $   de/cardcontact/opencard/service/chv/ PK     A Өv
  ;  >   de/cardcontact/opencard/service/chv/AppletCHVCardService.classXktT<rMBAf$ hF2Ih_dp23޹+ࣨTmKijըhDD-ڧ/j[kW?VZwd`⪋9}>콿};`%n^	ODD35פucG,ԓf.%bjwe#z$1Tgb^0'[&R
1-B"lvh5q-]Si+i4k<zaexfDw0#
(Enl#qУD423i,:Np*CfPPi#{ZmfT1[!Pwҙa+̱!)#0,\SPb>$׌
KMVzX0ҳ.&UXM[4[$G
LqWDOdBHŅT&,ūT,%CL=TTjҤ͚ΤhDҬئW$2xEˊ٣'XD"MZB֍XWŵmq݇%HB$\`d
ycB,
DxnĺMPEA@p2tZg9fIK^bRdXqT)*##fմ9dKCbTD)i$rRQQ-=޶MBX
g'm(0>>GH'Tl@8 `mZOe`Z禩guѺ
|hFW!FmY[tE%[Qw,蹰6{t
,BU
W'Z"Qi@\:yyLWn
Q:rӗ6^C$S}m2E|k8Me=Z"%zqb|4ZcF1Iܠ@¬42*zɉk΄^Fy2CZ:MإOr
7npwZ">O)J1̈́˨Bz+s5Ӈ}|o'V!z9v|'W4,ݸGgU^Ə.C
}ّAJSҾ^I+im$eSs{ckeR+lni6NW5KpKvXŃVZܶQr!)Ps=TmilP6]8pLsrj2^#cژf֠l1pc}{e]!PgX*xoVd=OI8Л3t]><4Lxf!z̞vl8[w}r"m)>!Z,%}Y</lUvgꍶ{719I;V\|&նMZQd>e1.-_pտ`
	F*۰3t&nHՂl6bީ\Y+
{No"$U`Z 0EW6Lg c3hGDۉOYLZO\łZŸ*
X4m֙	yiU%3FD_OT$e\b>d̛w'1p7<jG[54'.ܗ\IUMx(|;5\{ +gܒ
b,9KOc1)_p,
_o%$
W-y4->B)O<syUQw
?!߀hZYxǭ/rtq	ۻ^"eRu\
*T,.i%guU@RSЫB{ZtK:˪~ϋXv~I,;$C.IV-3Q\:zj~)x~ hvCS!z;<=MwZ58ak:nmU'j4tg?Jk+	 vy~\d)<̫UiVݒ]v:nCDg{?i4޴FGfJ&f'Jq
tGL8-9ɉz){m@0ߋx AobK;ni
O6Q-,%.=VBuAUVxhIO}^~(SRT
3`<{Q]?Oehˡr_q9a{+-ά|M
~,*-_/{ʹY\u+0[]Uf&-}m9-~ϘVaѨyyN)[M]{p{眃bws	N]x"F^('eE)OBVR[Hن,MNWIPn(eS!aO[̯*BDq ysI<2Gky79|f%xVB³jmӂK]H̠frt0v,`'QYP'#|=Fôe?¿jbdezKg<bz1$)V׈Ӝ8xC>^EFJ38xްR*bOӦ;Q&_-(?<L*1/yY|sEnAKݭ )
n'XJKgM?bn`Q.JϷg^PK     A            &   de/cardcontact/opencard/service/eac20/ PK     A U  4  1   de/cardcontact/opencard/service/eac20/EAC20.classZ	`TΛ!!2D%`HgP53HP R!y$83QQVںV[[Zk[$`(Pk7mkmYj7e	?!w߽s9;<# x\hp GPew]h2ԙ,Q\0;Ýfꬪ(4*uxL>}Xd]U'^)8u{hg;2'5p
N=pwK4ivq'\sꃾZo2hOES}E}s]u]=U͵Uꚺʠ'P[00'	rVق)"hwy{2v7,ݠ#_pJVa3sa&
wnpb966U{k*uE7z5ަ`0
*jkUf4jjz'To}fTzkAofe]0X<:܂l2E"di0JS2O(C)Z2]$uUGeU[\Une:QD*5@_	6{u5ʦJ^**9\jkkު`Eޫt&G.,JSr5VMMվZ	z+*zoM].>ӸPRi`SSz
.,G
9annv&b55:j
x̋Żm5[cݤdwrdKx#Dqię*8h@#ĺ8Gv
'.ᦉ0b}p"V-Qs01QN)__]`xq\V9Y
UZpcVj5І5{O7!NxRpByzP4W[{jEyw|H?ٳn`}2PPҿ5\mntb`fS+wM{M'6f㩞QڪСiߝH<7ό'i Krrb[55Q޼?IL؜6..
:ztc˴aMdcsQtQ3J*]
զᒔ
'cyA1Ndd'VV?2h}ۅ$v)[z)n]<6TS'Uz^f_jW*E-v'Mc/^{pk
\UzCP8:+X5q45/exK]P?1
\i2Ƣ.܀x?>@}Z>}sb+(0iϝ4,ʢ+,HՂ
n-JMpV6nD;c]4q|݊;܉
f[q3	_fv8+a/>>O&G
i1KX=خֈ٨4ޥ|J2OADs>}T0,jk}#v!7p+KO|mr:7>y4;Ą᝴0!
#㚕?*M݄ĩl`ԎcWU|c:i[67;s2v"[r69BNTFw
<'#3%UδB&Q SD`qq!.u:R8'yw8cd߼ʅg?U?A3/SK4uMbB~򄕗PZj_%z!b++g[zWl]O(AXmYTkGR?fL?_Lrbf_!S$ES9 ;#ciPZeUnNm8ήdJ&(PT#uY$oTAaLX̆e[Xǅ7ʩ2D̲WF͈GQNE8	GE7ĩ&7a&sTu7aI*yp&sW4We.̖0Og3wL9;/nZ|q`uLgN\Ls
'P,F3OpjhY h<a:٥'хei	d̶G-	5zezY2
ĪtCΐ3Q8qӨPΨndqR"tV@F6JbFe,rfMgPY<HՇ'qJ`8Jҥq_jM
HaVRRgPkT{^etkb=M{z Vp0*;)ȄTf[,>HRx!
=f3$]-ѝ$5y8},
Y)XH ^ZHq
-Qj]Z
i5RTVjEcuSO'̪pI9zCޥN}̛]X$
$mGM4XdImfC-&Qk2nTS ]$%sVC:U-=)GEhF$!ۤBjiAK.hf	0]UVG\"*S3OȈ-f2ʬ,UIU$
闝V8LUs>]Xj1tm?I4C.مr^rCP06uGfg{plWk
Nnyɱ]s
TJ&zۍ>]ޯbLJn38"FƔFE|HEUׇ
)˭́vΑ
Jn-?Ss85^
).|\O(1?VTsV>8Q-i8*,.ͪjS>Gcm
n٧ylʑ5KJ3MuaY|YW
_iΔP;1 g2蒇e@A!Aô6$O[}1	5rLKzoue5\_)95屬h(rDɣ#GpGRpAku9oK$bv\UzU;7`),,Ahk(
aϦ5atMVbucw"BzNw:^fM}."c+rxRNǧ	nBQ!|
a&=mhhe+?C;;_:N˦]w܇V
#X4>0ܩRFwNyӲu$<iߤOҦ:VPm-<rPWlbW-^k^K6~;G煸a|bDΌ13nGqAg,')\oKtw[LkHJL,d;4U^N>Zb1cNa^V4]L4ELJvɥ0/b%H399YrFe4Ӧi}ftB494cAyWcN|q#sLg~u1s)ڶC7DV7pHssL-0}2aU\BEY>9WtFj;M=TYFX}q4EаLli˰uoVwUXwV
V;Sк#1~iKz߂{5ߥ<z"d5\Aȷq0!̎!j:O:۬\f;J˖
aA?opXS9XvspFnYz{rQᶻusNJɏMՃ~<ބ|0QPgc@wb'>Wm ;{}>W~ OB8?$?dF*زVH~;) ryR:]~"?5ȳsr; meJx_E.+)j u%2%87,)꒲-h/x~lą{1s?L5QXYzQȫL|KJ|+q+5ԿUR&Y"̆vl:4qo9@nh_,Ď|AgM_ap_#
==NusxsFc[ն!,y!l._)8J:cӦ):V5Q:C[6ۗ]6S4.
#)
vBmWN[{ _bp2!|!W\|[[pD5Qw ڇG{A<ĝX%*Q
>
~?k0܆b`tn{nY"k(YC-)QR]<1?_8/^(q⥽ ^H7aю!JV䤛/JxOcz<J3zʷTA9(sJ1[NU=Crڀ,bbrր,&ɕl.2u܀wb܀'4~[V6ExRiz	+x=Ü5!6g|("xw8o]<S<Kj~h8S\R_I-~#+d3Ln [Gc|=\Ar7^b2k«olxS36okD244صšm]!N_\{%OE9Ɋd Ze,iG|s[C鷆
H]yNǢZ'^7Rd-83sL+/#f
XR%%y!P
LyVMG&q뼣׼>qmHGa]^'Pt<Y&͛Q1L>,֞}Ar(MMy+U`֔S秃TC.ÂԲQbV]٠4m8(g<qĠJj=,:x4/A"s̕Sp,P$\eqsbd	Y营GXʐe},zl)S6!!G!4(弉T:|kGԟЈfۭ;(f	.JurطtHCDRjK헮2(k0_1$=*w"bpPaQP%FVZpowB
ěen FSz1#l&cKTIcAV1Qi%rvK+uFpm-",p_vzI^uG}TRZ۳qf<r	ޣ9,_߀wj9l,Up
i#[^S8bǴ7 |\:)XɄ#sU5H
d[qa`uJ/s+t˔vs,U1(A:zukrA-6芐"DXip;9-BZ&>(778!tmislT6Ґ7,t]Cr[&ʝVW4]>Ր̰P<cl5eNW g=C\wB\eރj[0[ګ$zv̔gEP(((j4JJIMv
/Fbr%)_NLWU^Mr
nki1܈8,"cr|%=/$F<]ԉ,,w1eT'-d.TV9iM]=1/VZuf`/vi.Z_
mvi鷴<X<L-߲R!7ISD2@M;]i'+t#n½\9	.HwuD(kby.z)<283_X:[ 3uuE
CbtCuGP;BH!кt#m%E p@Ƥ{X܅	>Ѐn{*{DX;\58ltDA܎ԤXF;tYұ	Gm5X利>g3D(y p$GY%Zs>wtش3*`]0m?vK	#+aɏ˵B.tN#oaq*6ɝR+W^ Oq)KBYWNZKX%P8R 0OsU%Pe?d	GЭ<fy.h9IuHX^"*0F'XD3'm<h:h+̹0_r/t>[Vt),;<99v3-U߅1&cOz6pkEǲ9BZϲ	 </[q={U#9|U6떰gxNT4vmpVcsZNgaH],8GM,T(.N팑Z!eq#4:kK|:PK     A            /   de/cardcontact/opencard/service/globalplatform/ PK     A IK
  
  G   de/cardcontact/opencard/service/globalplatform/CardLifeCycleState.classUMsT=/-Uj!_&N$-5
Mq8:qâ(J"KEX0ÚaâuСt/jY{ƺWs}O{
&2F^mݱ=MΞa<onw-gK,qVD*QRyF BZd(U7sSD89uMP2S\/6ky1-kw+nG7ʵUu-`CD1(V6uz:RArl2}@[n7t)˸ KK@nځfl꒥Nkڻ
@O*eмiPJ5#yCAY2-tR
[ +lo&ŐW6>^+ddÐ|iֶ=eЍ=t0fFTix:'Ns(fp.faza00ba$8~IAOBwR&ϱik֖nh[Uۃ1$*Y
5/'ZN2W
]Β)NoRoY:m+jڞ;<[}'W|,hibrӠ\vmrޏ(#~TcGēeWYl"D;xgy@C!qoiOSh0JRA*|átd*Ebnzct>Dݣ-z2+<.h췛ȍsϯ8ϟp"b_9[؏HNfW@hTzm'i&$ dY/"Hc6ԻxF0o dwf@)uoЙj:tr
c>WP{B<!! [R\,҅`<&ҨHſiHx!0X7)f.)s8I
LѬǩ5pGOPK     A cc  gE  N   de/cardcontact/opencard/service/globalplatform/SecurityDomainCardService.class{	`TYI {BDE@K3̌3kbZ[kR[DԄŊZ?\j;V׺R{d%}w=w³_|,܄QP<iH(5u=}j$INpO\^
>Y	FPuh|S0䖒:#Ԕw̏o	FbѪo(OQmOKDHj~\B_`$!03,\V7ojƼẌʡ<+jl52c0{$K\_}ByՅ6ᦨ,mݖ`2-;39T0g9G

F[O6.Vue$_߶`4j0
51{ƦB^~h0PRNFb
eWk@~i#%FKŷl	a<&JUcaL7WD<2̞},1ןӆ~iN`3^OAV2:fzSFڈ57k80D(*NcLǩ8U4ba}uT`aXOh%xx;;FJB[)]_[*
u,Au6i_Je٥ʤ6ju,MQ#jXcX
VJ[c5ְE̝}VU}zVnr!֓)vGg8"DdyaE]׻A؈M:B`leMH4K,DYYʗU._UY; ֳ6^GXYR`l__eAl,MF$[8IGLG	 x*Y'&u$V*덤Mتa#7H-6Lw	~]<n:˪RZ.ķu'!Ru@N\ÆPiCy28ajuof2isW.Op5e1vj
q
ދ%2I<T-%mMʲk["򦗮!s72Y	7kEǭa
-L_UuVrQ?#&3'vv~˥*~N^D9
K3:Hu~^GA֒իc<V;La+ݯc/`#CH4\&8w)iz>!2VMhтSD:»kJ$ɴauٟEUnj\%%lddsHzYUNƇxLq><f
=Q <˼\SMUu1gxe,s#{k><_
~Sn?]H
w1G.\u	KOᦒ*pJ%edORqB^ Ic
"x} K45Mt`23IrIJ&KΖvSޔlґP彈?ixw_bXo|>M2>74&FػꌴiYHbq{I(#4(i񎆿xW``8˸m,x>:>>}Wg4
ג7>$7VsW&;-3yݧ:>1^g0CUeV7x!YnfZ
D|Ku~ZRoonr^>K0
	^ymȉ3*^EUatSjM<ZYU^]2j򕕁 ða#ޤbN}8*4qUi$vQ_ʑ@'P;K9p∏`:
z
OHC6;VI4FHXȊ#WFɐ7Ϗl-n>,Cc5xyA	q\D
-',u$HJ]4$[8G¹ihDXEtW}(J%ӿ
xhN3F[659sNْg{G'4jTS1"i8fČm&1x*uZ &59"h1RN5T#4s]("		3nuu:!MB&(Ô]ӚF괎ֳ㨏F,ӷԱ@Ґ|YQ\(D&YffMdHX-JQ$U+K*ZRCtʖ%#[_l5iSy%թ)7EYň~et"`P5aB

6&C,\[YrUs9b=.'dzD:P3:exҤJA;uPgiKG%]eX	qNWt%]u,S̠̚N\ru.]#H,݊̕Ԧ]TՑzcގPԐZѴ>/їr8&7T.p3gfMp OdF+> *QG6ΨY9&!0Kt^GszH#|tOuqzWo<Ma":J{4N3ݯSPLpۏCXWU׼h0<lf654NW还vNm	Έ,n(ˢFd|0Dڛ1>L负pybAQ:GXJ>!՟)37l1Ny0#1i&#<9U`2"Jgzs⓵n?{o_E'}Ivߒdsv'e3FrD.'wʈr""=Yϟzy^+O+؍Z٘^s<)ǥc{sȍ˸^{PcM0ы5z҃Xi=ؒ$dE{u3xX=xYUCVn [$_n}\o4xľܫN\>bmmص[mV~iecc۔Ҙ_(b^սAgTU}J/pޡ`@l2D۾D\x}}JB}y
+sb~EHEC=@<ؘN[g#O@Xs][Ul2.Zȴ)`0Wap͒;䊳:Y14so*V4OXѵN'J`!NAtڼB
&}6s>Ǩ%'3cg@6$qD#mIxYeaͶWR~P!"x	0dO<OؤڄHH
DpTش=:$=Bytd=Ғ2o^1NNRl 2/BޮSӕ2܄6RW􄄘Z;:n`}LapV9ߜ:5~WoJ3N cwWD<ch6@mE") ֗7(OMxܸsV	{xIMǯ@i<۪Xc,-Ɣ0P<-ڬ>HGV`(ˑ&S@@$jz sJX jb_
cی4ʄJvrsfa54[Hq76%z̪u\#at|}b:1=i]D^PJDHiMWKD-lfcDCor<RߺS%TeH>!>O8\
A{}
#مk_8Nx
'DOЯt߿rM2hxÐ8b4lC^ֈIo5K.xizzVI85Ɯ^Q=f!_=C(\CťfL)~3Ե̾Kkԫ#U،K~nnB,y#XT7~ߵW"WZҡ-d^wP\ xF4|X7a9n:܂ nE=~nCc+EG{`WPoYVJma?X*MϱvXp=Od¹'3\n9a
so4
_D/vVu_yg̔aP;R}Z]{½;Bn'#սSiȸ2ESz*Փi=JgWK>` ߻[+%:6c'܌fU#P;PPRP:I(
K8?҄EZ	ɯv
Oa4A>E	~
[,
ϱ g{g/
k*5oo;.C~~5Pp;W0x5~hCz!HUsΩ^;{CVeXj<YQK/
>˟̒87;E	tȖ%]8>`M,ĝ5.dw݌{m"iMmEq?[lEqżMX6|Xi6mהiii.uud\-ҤY fVdمjX^Yvg;AiV)k{2ߺZߺڽ4ff[V6ͫ{1m8#Uv=ƲF@Lc0b4G>M@	c&MĩT
*"eT4h*644CD;T>T\MsŭTh~Np?-~Z'h1z-^exV=\OhBD=k4UF"
瘍c66-lw-l,l6>Lͦ25e252u}FҮAW3;HM3,<ʒ
ptÆf.VLcmhMG9=ӓ;wA^	t˷bbwc9PѢ8k4WD9<~ҳQ VT,8=7;ýٗx)Ol9ir~aScyA&.c2ED(
)K`:%q
pQIMXL۰v`0}gyHwp1݅.bp	]GJ<N$]ѵxc]
l	ViC5:w(H`awAdؽfIp(89P<88<BпN>;Qd>6ڠ$3%2t@
ї(?Φ2ܭ/U	t۵ى-{E&o353-U8Z)'{qG]MjԪ0Q
=ںN?
&yOA(Detc~!D"B#N-ytpy)W#vo$v]⒪D+l8&T8]xnGb"W]Rc=vҧV/Ik

YwϨ
4mfMRs
EG`/3]U+A^wq;:d"rج́ZՕ؏]Vf⽶g/^Ca Κӛ(a.s6dQOc`kgt5 +s\LTZ?9Jv,Ni7ίYvi}p*Wp~4Ֆ&MEzFM)8)8UjV	 Ά-y0}'K!>g|s2@_O發,5|'w"Gmx4I/}
Ob
+U_
Y2x~=jڜGkuEoe?+u[zk[*{?~&o1Tn	}6ө|s~ayxVTy<A9oŘO͊oTG%%{ GOʎy{YG]VG,OUfdQl>AB0D&\*`ib	?CQCD 1Z8-&"xRb^񒘌W|gbEt $VY!@A`GaFP#X
rKv
)?-{c"i`)4N(CfQw[ʲvhXÈ+'dZkugXA+.M{.c]a0ṵC[Gy
ƨ2Eb1v	k-
2B\<f^m3BԜ§tϧze]fnv6Ss9`qѣٷq_,\g~/ZԂ{6bu =CFnDf
:TiJb<4LID9QCE%ЈI")\Tq,I%yC9H8ydǋm,VGeHagY%ZNx^38h'<ITxX3>Ý;q.+ۼlGC.:\vڀEM}E?^D Y
ɀ1\s+qr9V!|6ԩW,K,[@CX۟̊ǅY=ӝfs;[(Tۃ<[媺nTg:=3ｻrv4T^FN;fʗUEXrj
0r*<m=@,}6N6Ņ,W\R6ˑ/`kZ\3u8[\
B܈͸SV?SvA'x_܍NNYC}ҷu LH~j#1]xQ%)DRv|lƻ
B<x2{8l
ܵAB}%_@zp"j^~77ki~3-\ؘD;-aQȡV-vUf:C^d乊YOaH4V!ڴvh.Z(,՝3<v~EXKq5j\JSq{-HC!Ʃ1X!b8
ԋYO !ĥOq<빼A<ų_FLUyh<%}^[{9ޫ%=b8GdFbT˕
]E)sy3sz]9ֹN1R<(7CԸ6_\Gm?PR`vI&-Vdɾ$[ю}mtQ>i9kJO7-y1sxsPʍ3,U0ۄx_dF
kUᲒEurb6;@WKoj\ζ$
98?c.PƩr8W8/5*Y<52(
2Bްo/lQ(yOP)->W|ns_`\N1KyFRX^()&!>pm{oQhb+t+tg3Y+3>ަy'<e}7t:rq+I׭'3up'2uf|0mX➹ЃrsX[vr;<H˥Q³\gebYյT]OUuV0Q# PK     A            4   de/cardcontact/opencard/service/globalplatform/apdu/ PK     A V`M  T  Y   de/cardcontact/opencard/service/globalplatform/apdu/ExternalAuthenticateCommandAPDU.classQ=KA}ˇQxhITbҤܭnm?d%XQ\
N1cͰ9VcL/<oźUl429daOQUP92dO6(VЙ8;m"w`Q<OH(+}nqUQ1:ŶTj
僐r
{Ȅi;1CK0dB1!k?ql!O_\d{>"'	2-Q&P-앞KO[ξ
煄
]@ZwLhEffLV	Zu3^o|PK     A Y	L  =  N   de/cardcontact/opencard/service/globalplatform/apdu/GetStatusCommandAPDU.classPJ@=>ZFt4(E05RDv45dB2_觸\~ D7 w;{/ CcqudL0f"KdDe(@%
t1#x]_3SFâ[v`8֗G>W72Ly*TWq&z
[C-]PxH'ޡEu%eAmrŉ-@W#NO7c,ȉ?ABO8ӫCmy2(<HINh}өvULNf!hs(:,| PK     A LQ  V  U   de/cardcontact/opencard/service/globalplatform/apdu/InitializeUpdateCommandAPDU.classNAƿ=ANW` ch1		r
rK|%+2΁)fK
6rH1xF[XόNh"Lu#6uc˵d0C6Ҟ28E֨98߈}ez\&z|$WQtF!WW}L݄ؔZ\=II&#adpgCxEKg>X00RBAKCڌ@\Spla.1FZԧv'K L
6`lESX(*VJkPK     A fTH  2  K   de/cardcontact/opencard/service/globalplatform/apdu/PutKeyCommandAPDU.classJ@Ϥ?jt㮊5(E`څ]MQ#I&$;_Jp>x݈;f ;XС1l9´y2PVEz3ȵ2V,;2Tl b:&}8KjlS
+}oOz\]7y$f/Q_oZV
ew#]7g?zԻ4瑛0nݘ/s2hRP8A8Idc7q,D+O0IerW(fyeP{[/[O=RaA'F
ۨ*FX!ejsQ8PK     A $I  ;  N   de/cardcontact/opencard/service/globalplatform/apdu/SetStatusCommandAPDU.classJ@/6ֶt#
BlE]j:dB2W裸\ >O D7 sa滗`rۮ
4wBފE4d2oǪX@&
((U``aO{x~tPڗfu{od8
xB	\'FӶS.C\P@%@D|Qt^G2_aAɘ_1Mfb\s2m2{>XFv"ǩV]V8Z?!HITMҫj}F
V$J\1<gPK     A            (   de/cardcontact/opencard/service/isocard/ PK     A IyR3  *  V   de/cardcontact/opencard/service/isocard/CHVCardServiceWithControl$PasswordStatus.classT[S@=K/IBkExxW)H$LST}	i8%q'iQGGgۨ(Lsﾛ_}p
>Liyn`ZA{b۶Xvi{EB's"^k|lzd
̠N!CAڂVg]hJTR9Ҟrpp+sz8RRFVmm/GFhVе=ȹXY-JUrOp[Z(+jm2_0JE}d0v$pD(QcY-ϵlNln+km+ WpNӤ?Jng:2[Jv[tE%	F;
"̟:Pvg%ir**ABqɖX=[hk¥tǵ˝5ۯk-Rfh%SHn(V-l;z`H/\1}	l_Ll8	Yw)OlNcj;eߦw.ix߲1Cϋfv@c(sG\s]ۗ߁[]숸 D<TC>(7eQuFn;N(~.F^' pqiD0>PxO=/mQ"2$aP83ٗɤ`VL!3%hḀ #iʑ&FшvXh(]>&i9"´´{J9ys|TE|L$K2H*>I.{~CoqF^~o$IӉEHDiQ;qWz2z4;PK     A o'KW    G   de/cardcontact/opencard/service/isocard/CHVCardServiceWithControl.classRN1=Edgܸb!8KlTHB2F]RdNA𣌗Dͽz_^`A!]MCra]ݑ 4=%B=ĥYoD(P"Ѿ8C{ytA!?;"Q-C'x>j`T~VzcD
gBZi*0èq!y$d*RQ/eMf%"j
\SI;2<B&/ <5B)=S?Gԥlץy1$t9)DK=myZmB!4q,G9Rd
8ݮbc8 PK     A e     A   de/cardcontact/opencard/service/isocard/CHVDialogWithStatus.classJ1ƿkMO^<=bYb=P$i}| JmaELfϯ+:aښPZ_'co\7e]EMe>WH&ͣ6?3e6)N[[X!"݇r#<?BN.XM6Ë	!+<Xpr٘ tC0o=
Gџ&WfNؒ#%ً:_$fEoPK     A k    F   de/cardcontact/opencard/service/isocard/CHVManagementCardService.classuQMO1|]*~A<{câDcd9=Kv[k([%94Lf& ASB$|HJjgܔlUN~f4)/_=ܠ1edCL-.1X>MH	5*MC۳5	8>ȳPR.	s,.]ޏL;Oc3c1-_s33/^4Mq6-d,vuShz))y슲0?!qtiRn~jrTQ
hQ
"s{ROPK     A ^     @   de/cardcontact/opencard/service/isocard/FileSystemSendAPDU.classuMN0u !D+TDE UbGj,8 B-
 T޼yo N#NKZv6(k&۩,w3W.ؖg;UBJV>	@Q0tu:ݿ|]|r9َUx(kYnkcU%
.n7zM0$A8۶--P]&h2t
]GWVs?RN  =!,"Ȱ^H PK     A `*  	(  =   de/cardcontact/opencard/service/isocard/IsoCardSelector.classX{|Tյ9	@AK@I'DI3 EW>^PD{/֫Uۋ^k[mjkUkyd&$;^[kg޻\jwBnf"
R'VxZ%d|ѳzA2ppȂIbz=o0x҈ZHPEUhYf0Lh'0>E5R*>%4v3[,#Lb$Lf]5Xn 0D6D@4"ZǘQ[RJRVN2q2Ƴ+}y	V)&B0By&YZduIhafYDo0lFp/V=r[A]2(21
|he&WP]6LɭjU|\7+WW;1cb. vڼP0~ccWP?2W(KuȀ&81M	h3jUÞNqBJq9
BFJqX	;Q&`a"xOfEhrԂ,]t.3Pobf]rMa⌚p_KR.l0K
Irbe	Xfb9.$?$Rbp^Pv:MeYX.2q{YIv6+
[->>{i󂈧ZkYa%6RY	؍'<^L097=909uT*ĮZ#p@DK'hRTv9];,PAށ҇̉h0a7iQ4uPOi(cN\i8S%M\! "hB{㴳}t[!#GA1M$s҈uz5WnM#+Չ/v-OK;`d|M܊8!bDlVwhhS؂M|0`J^̎NcHXDVlxMw<-Ddzph+!ajվ5:ٳVl㮁K:>!m`kp4#bGCjm"pQpx4$ {Hv։LH47Ѿ
/nM׈#&?n%k1;GBW>'=D<i٧٨CYv薊okD=N{MㄓԷ֦XXsf6Z?-q~O aLgWB(JvRḏS&T@#*Nf5p/lN<x?㓍Uv'ῥNF`Q JM$kOd{8	GW&~	X[<pZ/p5xo$<`l;ŭ&O&95vf{BUp_ۯrԽqڢZw))%[Ҏ0aV/0>-F2ڪ;%W4L;'aZ
>z쇄jΜ:j>2ȰGFM;[LQ]+ׅKYMF'Ń^/	hw/&9c)I]]pб_*&ra	}fclъ
\Wk$O|50U.q>6H',R\9RE1vD-)j28kk&ܱ[UF;9M"SdDè?65hI/c72o>fJΫHK*TT79/	_&?>kRr9*®^XZ$!z7ǿ{|]cw'
lk:C6er2׌GGxшܭ-~HMuh
N8Buщ!~OeӪF"1_]{΄qu©YR[Y)m)ܻYxzMX\Qacaʐz!>poZ9iYNzOvLHu_xD{fsUNDF;EP<I̋03'2!I>%/IX	3cPg8ؾTeA>Ւo+Y1]L(@\Ydǿ;aatCi%?©Zdqw
&{S^L7}VI㭕|0M!V틸=v$ۧNGl\>KLI,[ɽ\gKf
,3w8al9nVC;#T~l3d!_yV6.7GYV1Ty F	|Ըea|88l.Mc@4}\I̕S_b=Xԯ;>IfswXv9ϋPѴ]0]DSd"}v!_v*"T86EY7X*s	&XML5:N!zM`=4)nIoFc~8&SM3FC4aϼ1-3
I<q,:]}s2.Ȥ>qA!.Mc|/!E4-!

w CĐoȎLOTCܐHkR.
&fp M1-'iZ*=6¼,]ot>LneлQ2r<.#/۱.#ST?.y7GPڍԔ&'taö5H(AAuaP+08{;&4s%ݨ,}meglWRjAtNFb]81.r>s9\,`u2oN0ex=X̘&<k2y2S&<.e$eADvd%xycgf+.KSBz%zY%tuOc?_`lz#_ 8e^xq5x
:.o"*Vx>9X>	g/,9G_rL~E|QƁ<ljjd|smefF7IB[g? A3fi<z4N5UFd'+tqp&G4_҅Gg䩌UP%b6UQ5Q`si`9<ݐjc(8<"h:1A1O*<ةu X~y6]؇ۛ[mzS),|Ƶcy;1\{̠c4rn/swLֿ]n|N8ls2cQD(RU"r%wWSF,ߎbu7d`^Vmn)FV܍x8ѭ)݆6U%9ʄ]HۍxOETZOٸz🂍.ä:Sm0y]eϪk/~ίrσs9+k'tied|
p #)VI"؍W7	[;̳O29f'{☍9mې/~zF~+ǆ8'gʰB:.&d}W{qHCR^!$m dEBA
ZE9 ؼ
;1^>Rl4Gbwl"v[``@z2*4|D#8%#?n|ٿP6rb?H*I񀔭JR+}8Ҝ{n
zw3>dSk=#Q0W04ciweEg*,dt]躂Z &:Wyq]iq?By4yqZ:Yx!
:OT@AN!aF(F?Q]Nt%ŮڳkϵLyufwз.1y~@^m>Cҽ~-kcm=M9#ڡЏvjkծǴo.v־O=}OIk3_{zJ{H?վgLC?Y}"=\>^+%}7!^W]~Koon_O~l˥mym,}f˧moB6æR#[.l6a[e.:}?guZDQH*FFj+
R:GkbpݯͧpSZ#'YX<GKYoPƱ2Ӈ0ʯ1K"їqΌ/H;Rvri"%v=E@RJ|/䜙%'>ufaXcF7q;a'mtU󝰩87>>EӊK
Tu^E1dH
g#u6Ǩs.f/>c>kq6e(͵列GqNu%,d!K\lZNB6enP+b\9-ypPK     A pF@'#  R  <   de/cardcontact/opencard/service/isocard/IsoCardService.class{	|Tfeg de 2KeL ę	]kj[mZZ֥K[?j[Ŷn}o^&?d={oxȾ f)@C3ႛ0>)h,<%mnpNpm% E2` CD&LBEKxFPb#.)-h?֦`"dBlrCpK8hF;mGp3!NiK-Ë
sM`
xE
\ІpKW{86gK:0g#MQ91B~C4~JԍSd	Y-(cM>j	ZO5lnNiFOYE)^a&8IX%'B
H$.O4q
&ׇ)!v7b(5QlLK	aѧuáS0<6Kfb:ft)MNN]Șb/J^UYU?c؋11V7Oř&桊Ɋi(~8ZCӯ m&6ڃu[CD[40chbmni1Ibig a0חp0V(n8
CL -|p,%b\G$?^ժPnEXB &plJˊ8D1y,S.3+Y}:bbCԤvZ:5#41mG۟2}XG[$.05x<Ѓ&EX+$ĮXi?P1B&ZBhl:SؠFlu!lAjQX0$Su%ڧuY:>5щ󇞥&!Y x q$tt،-1GTBTI<gH˧Ȑ4ݸ@ǅ&.	}V#Q0xQ1'_%:.5q.'L>mK,y-J]~`HhUGZi~=Tp3e//_p`	z-yp@3twL܈$S#$ŜWM,<+4\^쭵-,Iȭ
7,*Y(^ҏH=UP8O:v*ɡͼM-`G5qE><iN|pBGpXޖx"I	#d׃P/n"\׋ -Vu @lM@l~F<uO8xprM{;yHjCp>Lksl^}&S[8[lU-Z3cu:o
pCՏ
tt֑!Rݽ> >axʂ]"iEūYxF/L<bx"CX;&B4I{0XMqN8ktŗGc-xMuUUVz^N4\x-9faSh}b7>}Pq ~͔dڪ:g.xSEXıjpw>zɶɇ[۫-kLi/|	F&%"Vca n7Dc	Aħ:JKGg&"ɣ+`Ԟ|>_ƎEd![#h[%TlJG(c>ebZuj>oD&)"|>GUlsrq0!>V[A2C0㟿=>ʲN I2MʢlVGXnY8&b/ݡni^@{ؠ<ިeuMT@#t4N ,n9ل'/Q`5j	MG	MϤByjIss\SIcD[NS,\\԰px6$xٸ9h`IRNus&"ڲo1jթPv`%Vܠ>O6}Ʃ3+f6۠2<4&s\)On<QPѮ?y4C;|09Xº
fi+ڻ6!,ug\%&4ie_J#WW·$iVK<#oVÉ۬,
uBj5kHyJcWJ
z&-\f"ZݝW<SCyǟCΨwuIΰߴh_A	3Ͷve)̠%|m]Cqms-gi,rd$̲d~E/o
gSzpZ
Τ?~]w}=h[uZ	BX.lCUqi#+O%a+>=E'Z
dC[$ձ.kD(ؾ,kF-iN5a
3 _5t8$_p82bx#
u IDC;t'>5oEXqHw\/0= YvXoX-OOOsu+ՄWtpz(y_u0|j
MB;m!ޫ>|xbCV~S8l0%~¾-w\qeSZ.my.>ThQʻuN68˝D Ic~Y4SamFXF˂]pDXzY@xYի}m봋;m!&
͓ό!VH'%>̥r[":ƙ ǓMÒ*#OU,9.FY.07V̌ݣrE73s7aauؿ8exjq7/No=~
`B`܌N?gd5M2/xaeUCmxۢw?ioo~(jjà6:9ˈcherد8JáO
kuzmkAʟ($]73q'\M6Xh
ۿ,!zu^П	Nt:M9u.'6D[K(o5~*[Y

.?ڕˆp/pFoap
uaC{B.L'k?&Bm?5IX~..<`:fB7hH>7C?u;"8,C#)l_cX/Xm*eqM]ܮ5t_=-@5%ct`.<Am>a3,u:B{Vg.|zjM\-~hpyFq_A#!~rc@s o5,+*ÛA/u?7*lWs)LkurB傒Ҳ1{ 8QAI=(z+58|1y%7N݃S+5ԧ`WYe沶B:YRrË8NNfsBq\6"SyDQfuZf3V/u.Ǿ
\:w	]jobJJ{pp/P@H ۶qu6L|Yjg	w].v˦+ؚ$5ѡtT+R7wiVW7m~yI)ou8{^v}&dL}	mK=p\rcjזZ9lgUhz*kBC/-z:[Bd&Z{ M9 v˶jx32wn*:q\,|b!ӧ-g'x?g|iLĳF!mnN*j_K'
t7utpeY
:g*>wZ+u~'s}n1e{ϓicbZxE\v
,\J
pŗU6hշJ;޻q-#l?zȟ&}oȭiQ+tobVWftF-t+o@=6]Zٸn%5]}P;fRY+cx/{[g0tt'й 0nu9k"t&M
#WcosC:r(pssKPrY\[!)GvZʹcy~tJUz
@Aazs#|}e}؃]KJ`!ng4;^;YެU]ȓbỖ1Nx9}##<:^շ>ڃ|}<\ͺFn؍,0׸F٩PR7؍Û.^ax
fNJJX~ދ-⫨4_y;{NI1;q2*2|.]*k
Q.r#;1I3Tɾ)޼M.%ډLn%<\wN\!v77jExp"yُn<kQ7r~`wˑO;0mdϹ^Nw=x`2;{P(bRH
eJhv_(d҉b4:{N"P1rhiB39EWr:
WJg09	<EUTYxƋԀ_EqoZ#~F
j*5t&GSB]ȵ+imo/uctӜdKU-W;GC_TFӵXN9WJh2I7(tnV-
.?enSZve{/2e:ڝ\3-Ů*ӷ-1Q374hE;\fFxA%ʫa뉬Dqkv]2wEU,)JH"ld͒YS#`^"R}b2e=LJq1L㲓dN>`c2}<5m{QjҌ̪;R^IʽOp2Je	!wx{VW8g7D7Dy"퐮SyOYS}@2z3D\ּZ+ro]vKʙ"h"DQ,_F_"rϰ"YhnYS}njД1c<}nYI<}/ʭa4|==!fè}OH0^08Nz'i~qHO`'=o/p=x^2~A9._5NSH`nۦl'p7^5X<x*#Ms|(7QA{yj
tg	3>H\og9<V_l:S{ΉE'8KV~4D)Ym3Z<r	.bKE\(lڇN]@j%39SPnzMK׵y}
^Pե[-ܗ?tSLO!rcb"ZX#G4oiL4Ә<t/
fTv6$%KK<'A3v[(&})NS8Cq	R|@bb\MHܮ(|G{O*~<+OeA)F(e4Z)1TLbe:0KJ.qY̒BMx[U&ֱ	o]'Iq~ȎC4˚Hh.aD[RL:M:{1Y:斮摮v b{OHVYI{R	hntgz8P2=GӤM@Q˹U@3KJ=x#-<J4LqLǩ3l'9rȓ.ǽ#}[#H?~rH'~I)uKki%Ӛ]2%vqi.{tꩡuwr|ӄ6aByE^aJ3F*0^Y)jRE=3F4J+;FĔvlU:pJ')p]ܧlŏnR.r1\e쬗C*|\N{Pq:'8CZm3p=78n豳lTd.qCrbeq㬑XݗDzJ*'}%|l_ʀl0Ab5)кRYC { }z*2֯65#ٖp-Se*Q&Aq)AY.ny``naHbRӗ!1YWE:俷eia
1y+cvUre';Q|g*8y܅X܃r/6*Gt)2\<|w_ُ#xR9gG^U~=.rEץz߉P;}@LnI2lU%ЏFP/ſ
~U6t 1 D_LպۻtYCTJ-@	f	8Y rDr)-}nN~6DD@	B6ʯ1N
Ja>rPsUCmRd %	e5@="oVDYuhhJ1
htL+C;`~G+nrpk͊ C*){KwT^+TOU0VUS8g3AzTn8>UP^
?K3Wլ!yrA)HEjK&qݟ(ea})}F8_ֺB;ioőE"4]ܝ@Ozpv
kco^)+]?_r[iBTyI=)o9NdhLQ$PyGQ"P}뺗;T{VHcEDQPVO(u,
U?&%(RK1Y-LsXNE:
khWg`:M=
7:ϫZ߫u8֣W=\jjT.']$$v|,VeQ=HS7s艶?Mm=r--z-<`@>~*.{YCvPrFHM	GC
J');xMHuz%MI(lϩG(q7ηnVCɖQrcr",-ظu,β].[sD
rrc
"/huH`#^/d'ru%<*P0 :!LS[PQ݀jS7b	Hj_Q].|ܣУ#Ϩ[ڍ|7%or.48K-N.ϩ=<ѪEFtۛN`{ӆlnkY#<x#C%l׍sT`@HB0/ϛ˫KЩ Nc;!;ś)i\#wlP*O$=ife2_՘~y7"ldL!y.@!卜'e'\i=g+;S*L	JL7iGZiɚ6Mܜ$)9l2JJUf\՝0oGt=o3d6$0DΒ_^C}tsSˉKe
x=ۑ-$b-[w[(cgJtJw2U+\8"iɆ)C$}
25<|}T8~LaNSb~4q9O1R9>O[3,'xA}	/shxsxG}E}(HA5n+^X]ǢһׄߕVMM_nfBkWH+oE:)bP!Zdwg!cQ$4NG8a6$M2PW1a[J=F#Q6sszhha(}`!E@_$Ѽ+θ0vCs%fT'sx'o{dTX>U̵̗f+{?l_8E71[ԏ>rZSTlt\e̓/iYQƭZkSÃZj^NOQxZDX|ǧ6\fh'9ޱ	lĎc\ɼLXW2
ѯd֕wҋ,Ŀ>zf$}F<2k\cy})N6p47D GUUABَ>whtAN+	e6`e)?нfyw)0->(MbLcƨT.
w4>CbtfVf*KnʑMWqک8I"ӴJTisQ<,ӪX bV6klmn.ks9Db΍*,Qg}vؘnK/|	J|iK$,g\aW:#mI6a<w|EskiUGأ|%||
jk1AbSV6Nk"K"l(ۼmc']llnVy7S9h|"cqi67M'%%tyC{Mtރ/^Yhf9oɴ6ZJ0|_~A~I~E~>B>磏SPK     A )    :   de/cardcontact/opencard/service/isocard/IsoCardState.classTkOA=SڮmGV
b*ƪ J4qieɲKvؐhG藹;3{>ϯc9UDe7
2lw}iC[:%U$2̖^4Rѱ}!^{lnz='Gv7|ΐxƮKlGpwDCx
aP'v}A=]>YVуx-oe'؞oؾ' C̓AيaT+qHD+2UK
a΂iGe.zkpM=c+OJ*4δVO 7@+J$2i8d߫O=a}'M%aJC/?ER0R,v9|Ȱ̲]bJWZ
=1ꭿf$5rczt"J<[i1<Gh񡯐iS6!q01^K:gd0-\*ŒԔ*>K8!;aO"&F
0dԂd]DOu¨<\>FjU
(^خ}\!}2G%Qo\#_Sn6ѓl󨩞i	
$ЦDHW	X eO$U*p+JɯH`rzQ[cfq^"o6ttALuIQQyEy*E!}B^5@D(
aAHV2fQk*ZPK     A /%  n  <   de/cardcontact/opencard/service/isocard/IsoCommandAPDU.classTOAmK+?@QX@%eum
17x2&x58rݓLK1q3߼y޼7}p!PCciYӱ=Nb(rw2y*:r?^tF|ްS7˶APk|rm6 :BBf:.Ox[K£R`UF!t;tw|IqXF-vsܾc`!p@G}]4Dΰ&fV3
5VLoMpY?2bRG,gNY6\g629Ԧ6YõľlT{V/gP̜AKlM)Zd7G~I
<Kqs?adN(khYrM>f~%1s b( zvƦ|`ohC=4)0H03Ejt"	B;Y˓FkKB`ɹ"F*`,()TJҾT۠ik	=Ҙ$\oUzuJA/\5TŴWΩ;էiW?M7y!m_:^1H5h$:v/(VLJ{#-˿L.HG+ЉK8F04aO0g׸
\{	|u|b;YRvMoB~*P߄J4eQ6_(6znq"Bp@hh/Kc;tE!C9tviE;)3PK     A P  "  :   de/cardcontact/opencard/service/isocard/IsoConstants.classm	xUҕ6!-в(&-:w4Lgea
PҤD
-& &" ,,H{;3{|<Yuq4kY10L<:r`@bwtjMVP='6C}cYj`&58r'mڴfŎ[9x1JU/&
k&aAFE7NٮG6
kJԊnAXG[(Uh
0I6EBWCY*{o4mŰgN~yfWׯF/WclaEؐnKSUN
jiSL	LpLd%Kg-vdh02,a9K5[8A88hF24AnRvDR=$kM"N҃un-'{U;I}̮3&C$=xvnHq+&&Z'dYa<÷qBuБBx(2+*ɘF(%<@
ץ\ZȰ~B2l@hԬ$m4K:mrD5̍f|c1MƧ,K'6ڐnF%G&N&.ޣ>ݩcQ{ø^c'MЍ%ٌ^9jP37/cH9g~);R}ͮl+:@z|%&a	uX2o|LJӄ.LRs}loql=GfrscB-_4w/P*ם`#$p^0Ո{ǨQi1]vṊ~vZ]h>,V+x	L6MksdHW%.a˄w$ެ顅nukbDzIC7ZAֵ^-ᖙd
8$giY:f,G:aه1DݕC7f)qF&qZ\ןlۚ*\,ۛ5ުCA]%iXLz%u%ZUK
{<x4=T::Jkk1C^-UCcҕͬ?nAz̚f"yԚrU~9zXTÜl6XUdy|.z!։זNfLIL6e-(=I
kvn6Lfvl`ĪΜvj;@7lPN_ؤӵnz+ɼ	1L!rBuQ͎TUp.e0jAYedSP_WoV[|5.D)=ZÑP3%	Q0Q%}-Z=3T"*&Ra a(Z{F%}Bގ͏6*('c)4<Y<z-l2#øc*~K.p>f@݊g}2K55iwڡE^K;^Qsףw-E;Jl(:FQYpJR>&ggedǯo3,jHF^ȏfEރp':d<-
SA=)ͰUTմuJThHњSP~);yZm*yø> JAvxK~KjH6Cw*}0Y
=Z)="PD㩓$7}P~NH	HUQEu,^/G;'?Y
ʥHE*4.Ȳ1
D|s[?dy5^C(=(	zh[DuL4jz>u\3>CepH:'q9AK@Cg@A\H˒]nȡsZEzyu)NSt-Ho(
}TnTt)PJD	FɈ;ӵj)Z6NRMCrh;fzYFћheG%;o$	8Rx6Х ̊[hK~ hՀZťؒq"JDEdم[pBǏh-@D24	Դ4dDȒesTOȑC<E4je@qp Oq_
(eS@SOZr>yx&-71[2n2
un=xg[ہg?	17N9Όwk[ns{xoƟx_~43^ na(Ō@APaHQmp+c\`,E%pcq;̸ Kq2 w2w3>|c14/323 D2ƃ!'3><x)GcWW3>|Z33|&ρb8l0^x#|ns__87%/_|+W1|
/e|z7od|ˌo+[5Ʒo2|G..݌2>?~(0GXΟ3 (3~0	s3Eu72~*߁_3~oMr\~xaW;w1~c˿d/\Q}۔eaeK|fwY6_Iu~SS+AvV_	WWJ4f#x}F4ssV)o
ކ<2;=c3Q^N#]f'ޛ1!Oe1!Xx1xd|`C2a>Q`q+a\ KEpqeθ0> 11F#QNƨD7cc1F#j丗181,ǃ'1^>0x
)WGWe8?
|:c#ƨGęQr&^=zVzI^^]_'qny~/`E$.dLbƗ/e|rxQ>0{.e|E
PK     A dt  
  G   de/cardcontact/opencard/service/isocard/IsoFileControlInformation.classUoSUnn(m li]uCnQz25<E_0>@b2HH$_MLO&7csefGLL||~ ^E.eH
<2kj磓Zbe:MIF(-f`-`EVvիUcT/i	:gdy0nv3.9w6tI+[Xou(؄(ɝ-
nkqgnAcj,V{<햊iTL]TsI++hh.oFv2xBa٣e bNgFT~0X+,Q7eP~J5ZbҊ3C;Mәt&9e/yL!&h,*Kf0<o2`Cˈe4
m>5?搘85ŪWg5Sd-$0`Zmh25NpI-@K3Mu)Hq\esDn*K	|9鰌V5rUXy\9@(	ev)i>:W&b'Ж˚}:["OG&WMێS.TD 5+AkIyt¢Y5޲HB^W+"'MӼf+
diNCftH}K^NwyRp;#4KSj"{+}WG~ƢYx:= o#vQ]`gKn	:뤳+HbGAvBd-xc{9z?i|voo/	chIkqz] b7bvb7fpV׎:LX}=ӑo!?q6?}}}}CpvY'\~ri\{j?F؀z<~ʄL.ʡ3%yQqkUꬠBG;oO˵1s2<}*VY7p$ g^P$B'aLЉIjCpC>pZtZs%Wq	?Aů3B"jИ9D2Y`pU45MjD3H96}y{KB*GRcY=B۵3X#*}LFRBEGQ0-ފ0iՉϳ">
p	32$7'qב|PGwHTAj9s+|	gZ9tg[*p~p!w#ҏH;֒Q!7}-gn}>o؆/`Xz^Cp!xz`i~4}n12pc1uqn}Ep$0Ev?PK     A     F   de/cardcontact/opencard/service/isocard/IsoFileSystemCardService.classQMK0TmtZ{"a/EAT*ӧviE?JLVȼ{o	QIBI[*T^tVDLO9j*^f*ca8S)j݄H̴>{'0ʒ͓Er^H8<f?+j}eXeXWѨp3=٦ҲWߠWK)xdMMڏn]
dW>AhY
9Z	(EBmOPK     A A    D   de/cardcontact/opencard/service/isocard/TransparentCardService.classWsU<iP
4˫iZHL)h%-
(6ٶnݴ<'~3~dggdکΨpƿw6	6Lvg{;.
*hmu3ٸwG4IBӺ=cdtiѮFШ 	,2j7)R
Σf:yMysֳZ_R*=S
z<Y֧`*L
O8qG4w*Sa4UڽV`]4uE9͜]0'SV-5SCtՊՠcI	lQvI}hY!qW
Sy諰=cVǺ/vt؁)ڳ]ONiՕZS5dPv#x1\]XBߣ*c0ʟbѮ|hу
WcEtr {^
<:
^SqXN6{Aw(ro(HRff%@#tsҝn`-U@e%
v妊Y鑚9\f+ۄTpJxGȫ}>D_6?.N+H°#Z~9U?X3*d8s-nfFk!ӝe:%UqchPMUmB6U|kD*_XXט,8XV[SY׬$XjҒ2L}0=ۣx\nL
y._&U}d#Yj]23}ꐖ/>y-]U`	jݒK˅STV<#C
\^levՓd[*VS]5z_L	쒡UֲP2v<%~x2&lG1aHOA
NxAmN
15+O7=ˌOCEʅVr߷k4}rzP&W?t±yx塇{q7:Oj*0ؒ,$6/ccG(5Sbد@dChD:'f{UI]]>0E2/c<A\Dk6D0|Hж9laDp\Нh4aB|]D4t/M?. EBݛ0G*$֙D J=7Dsx/x$u$K~G">xjQn"DЌN ?{kmthFBtB7ȺHc7贛~/p3ݏrn'ܡxzaAWg/Ibg^?{|s~bݤ *%yJ<>2GSh#>E
[PS3!EɶGmj(Rp%W	F	 X+a
T SyYwŷPK     A            -   de/cardcontact/opencard/service/isocard/apdu/ PK     A f}M  V  P   de/cardcontact/opencard/service/isocard/apdu/ChipAuthenticationCommandData.classP]kA=7vmĪZkT>EHR+dw0#ٰ
_(n샖 Ν;9|. F,C"	X7Kaw"
&qRDD6*FvH$nKhŻ%,pJXA3։$i`d|CyLجms{)lT|eg.biuwYJ:WMnઍk%l:?oXF,Gl]aP|8|2Aĝu-EHTOE3TwV?>^*]tP~ E&|2ݿS}	"+z}``#њ½.}Wxmkއ}.j8XewQMܚ+ݞPK     A ݒ  \
  Q   de/cardcontact/opencard/service/isocard/apdu/ChipAuthenticationResponseData.classV]sU~NvZ
|ID
@B
RO7n=)+oƿ ̨&G}&l;2L&}ޏn .`%D4Duta,&ʦHnʴWy0(%˖cɫ8a2R15$ta_8*By@2+8v[Cps̭GӾV,S-
^n'#<ng*i\[q5vA+f'e@jاc?E%73MSI.>̤k8p"<-2)rᰆ#:>г7'=n70s'2u_8P=KVsG[Z'CqU4'>R#a
#:Nf-_ꯥrGuR)Ƹjje醴tj%K#
gt,ÞCԷdj*V^LcaCY4j
_v1W.Yc*fBT82:.
ɏkrUǧJeNS;i)
ˡ2ʆCF^+ٛ31L0dߊoIwY8JuS#%U~dj!
:1CuDuUCɅ\ un*C)MN%Dn#fEM+=K[QYyP*Iv-309Z\ī7c4BUD:	p;,R:r$iz6U;816<SLXJѝNRs]I^,;,u*uwa95
C.=ڣG5M+lʸNPu̛hպ/J[ynsf}ʡL/|
ñ%UБt)`m݁~Bhԯ9vW70"YYvaϏj9 >ÿ!ӝ?a=^?>0\"JOF7asaq}F"(s:=ϐ9"gf3I=Tp
>9|GޥF7pFasFXtKR%At`p4\~_|
?Vz@ބ40|Nݖf6&BL*ջf%R
D{W
5X!
ʆ1(KG{֯fYYنSDd@DUcWPK     A 5"  !  Q   de/cardcontact/opencard/service/isocard/apdu/GeneralAuthenticateCommandAPDU.classR]KA=ٸFDMmkhJA)&(T@Cwٕـ#B T%0ssso^ ;#%ErT0pQ8CX(LA뇮"%Dt*,v'DyNfo췾1d(gvvg`:T-[0%TaT:;"1:W?j:m2=lf7#_0Lud((LCe'uu"_Ϗs$̃(=-3keHs21g6 :״H+W5XXkw07@-`Xrw6vfL|/.Qȩdځ+PK     A S    J   de/cardcontact/opencard/service/isocard/apdu/GetChallengeCommandAPDU.class=O0_7h),lCdDEЅMN(|t`1!1QK
{~.Z8NOd&F2)}3#]k|Ua&0өux'>SZnq?F¿,K*2oK`RJU5S~+wz1SUMB`NW'Ɗyc<r(pxuǼe.޾},
ºUnw!<b

C݆xz_PK     A 7^  y  E   de/cardcontact/opencard/service/isocard/apdu/GetDataCommandAPDU.classJQQ&ˏ[AZAuRz\]zVB%6Egq>so/ Pa"FIl+Őq]!ƾl?QM>gE%mr~ٺ!HܗvL~KuB<ЂEi_*
e݆Z ^Asv1XpM{}
\;?$ycC[ĸ"[WbϬؿc-GŠe3P
`V9j*oE6ANeYX0&V úJ5T,U촜M=T<٘`;""l_uVPz=.~ PK     A  n  	  I   de/cardcontact/opencard/service/isocard/apdu/GetResponseCommandAPDU.classMK@Mb1Z?.=	
Ճ=(MUAď^<mWݒy<g8^
afݙgg}8\D/L+3P(g24։ѱVreM s>!|3Q\'[ƑT3>]?$F^	37%X炡J%.H7|4vJ񐗲_4ELę\gXVFE!pm.<}$`|PmQ6)Eb횸Z} PK     A mY  T  F   de/cardcontact/opencard/service/isocard/apdu/ManageSECommandAPDU.classN@m+DATD1ZԤI5& ,k%=x/x|(z`{Η̾8F9
	
%$
,ۖ
`0f!ABT]=$R*,"p4S獄ym,c	{7^k^1$N	NRNWvT,3Gv]sEzbyUIiz65W܄Þۼ7L$}'I%xp,ߍ53"q [~PUt}K\9Q9G>-%:d)#\M햦i$P>GuIվck1/u
RR؄L٭SPK     A T/-@    K   de/cardcontact/opencard/service/isocard/apdu/PerformSecurityOperation.classQJ1=Nm[[UA]1(EABLHg2df
~+Gwn&朓ܓKS;+.!9OO "vu(4S%"Ny]UѢ1juvC/q<jH_BixtPl\$CK4|<!%ɐhO*bK!gVxZ)8bǜ(Uz /tbQi[<)6
ԄtP.aCLUu
,i%.\ʨJV)Z"dee2:l:_׾PK     A R    E   de/cardcontact/opencard/service/isocard/apdu/PutDataCommandAPDU.classQN@=6q c`
EP"hxP
X{eRPPSTH) >!rgX42ŝsΜsfG  ,Eq<
TPY;NUq~qE,<Xq`KX'VK^KD~"V뼎볇<sЧ	VZNۑB<QC	,	$w:8'<jw<M
z?|$_	tD0Ps	qпg_D[;v{{Y'Dcᛸ@ZH=]Jt`^ꦬ{&`^0!mP0FX^Qiv󓌇al,tR7654{z+zjjCH_PK     A %^W  z  D   de/cardcontact/opencard/service/isocard/apdu/SelectApplication.classQMK@}֦U''Ss=TMR"T{i,fC-^<Q&/BQy3;7o N!Cp1˥@RWZ"dAES2"ŽXtDKXG4D(->V;
.AIA g6%	`<׾OyehʆvcJ-!
g>seTrμڤ#<FPqx.'Wx9yg5c<*	D.;牄{:EEGbD)t<2*VGj<#*ePgױ2SҍtfPK     A 5p  .  O   de/cardcontact/opencard/service/isocard/apdu/VerifyCertificateCommandAPDU.classRMO@}+H@UpJ"DjLPbL^8-k%`2N8@df͛ (aG"
I"pdm-_w	b]pK71'%o4!<\!$|IIlV!eq$I!P
'
&ovɍ@c8G^OZB7p[-SH!ЪW
%_	y^8Oɗ&uk65IGt[
	haɨ,;cN-`(	zܤb/Ǒ"nf)B>4Ft{}>w̿Qv+d>X%/CF
yB7PK     A M)    D   de/cardcontact/opencard/service/isocard/apdu/VerifyCommandAPDU.classJ@ijcjkzRAA)ڊ D^z&+]iwK
X>%N8fy{yp5~$PQhTSJ_%&Xm⡈9*\ĘLNc.Ǡw:i42VF(L$	@iy5e|+c4&"VjH%N8J	ef$ 3Cyc{{"@ߛUv(Zq-g}8{\M[XdE
U2Vxo7? PK     A            -   de/cardcontact/opencard/service/remoteclient/ PK     A 0  T  R   de/cardcontact/opencard/service/remoteclient/DefaultHttpURLConnectionFactory.classSMOA}.;8"E}䰄B4!J{K_Eĳ?X=u7	zu xb&N^D@mk&X=JQǽiY	:9aur28Kk惐f1oCLJr6HDԏjf^Ua
({E&T$$lI&)Bu˵5a<7VN[V)YIob|c%4y6kPmFg^0["t'Kmxׯ0;&v-z%qIC^y/Nq$ї?@#2`mv	f	"9>}O<xFיU.W*kO_g<]l3|K?PK     A      K   de/cardcontact/opencard/service/remoteclient/HttpURLConnectionFactory.classuJAԺwb=XZ*
`LC,X< >Ab $$_ fe	e#9YjZQ>gSi&YT,4wO.o5]8nBi:p{<I}dvN٫h983߯~Z":_ﷻ['STεS.PK     A 1FAI  
  A   de/cardcontact/opencard/service/remoteclient/RemoteCardSpec.classURA=B&	epDS"[L``2i(?7,ۓ!l}=.}{ 84Du4"ж7asgx&LKN14KMICBG3tlI&JHnJíG
_x)O])L4CŊ0e."+JVA::Iy(ÅB-z+[\M583`-JrVR^hէ,1ȹ$'_XrvFRGj}H/1DsnI0,G<(/o/ۄt\Kܳ9rբD&q'ٰVrvAT^6kiEVP/+ei5,Tlj<;dJZ㕠f
7L5&gYK`cʝXӮ+)	80ݑdqEHk	LbJ}5[Φ.$32Kw-#t~-oTGqa"긿)~Q%T;r6}k1S1?ޕzzH
k]D}AWш%ʿ+,نdftm_  (p-0H*[Enl40T%{ '[b5RJJʒ	Zeg1mkR |UPQWꐵOȏ꒓su
\SiCWAe-j^@aH%wpd@
(Ҵ,K^Qה}ݻS
oFh"pV>N] ;ޥkafqPK     A xP  1  A   de/cardcontact/opencard/service/remoteclient/RemoteClient$1.classSn@=Ipi
MVH"
5Ki"ԧxԸv+<B>q'J-{=3g2# `@@D#mG(?"ա5C]!@H
ϕ~do`3PZ|̘{#2lTQ]!30VO [u{Fb懖#)!돐5dm樠gM̢Z|Ͱ~ZfLǐT.0,1=aÕS&tTzE4tkW
"C	EFa<ڡjʑ-ח@}>)\'L~Ce|O!鶬IOזP9OlJ#h]MߗAa(Cgs|SXy+1WDwHGѷ';T=R1'>31@s<ΣX&{lI8}Ed^4w@
7	˴\
c;dK%p+(~z
_PK     A a͝.  *  ?   de/cardcontact/opencard/service/remoteclient/RemoteClient.classZ	|Tչ$w@HAd% $I 0sC&3q`V[w[ת5Q֭|.}>Ϲ$~]}?>$\d ӀDsV!k=VHDրϪXaVȮY_ {n n)kL#Vrq=GZޭޚ7ՎBҍ|"mvϪPفph)ׄ#;sF\<AAI,,+o!&aZ(y
e``RRp]+jV	]فnkvգsc*Ow,j{=A]g \bȲj9;kb|SN$jDs!nLȼ\LA&a 6S Kծi.QUWWn-
ګv7dôtKgj'sV7-BBl3q`o03䙹6q>.󖐕f`&nlnv pM1LYöF"-1;I9<7pX((JKp(XPޠ֛X%mm%E&gɤcD
,_0e46m늄y7MXa{XOOhQ1\c<m&VU*vJvOX\_ʺ[e``)$HEM\xV1|&]&0i; Qވ&nBؒ3$7,:C0uB`CBЭ?kp
Lށ"M/,.dq9Bvl1lqܯ?Rg6MP?B~^+mצc.8'FJݸ.j𖀥TT	aӊ,
XA_dSyZ_(MOL;
S42~=eǋƶ'dS۸WUVoZܠ(n7qdNhbn"QqYrPݪ|MmJH.nhl}X쵽彸_9%ev/vr6xT~wG0@ރy{cy{> xC>AZ!ʜ`!؇RqC{0}ײU@=Qxqh/)=>RPhY:{1Zc&XTL%6N?:pxB0JfSQQ.񔁧M<1NaxYv89<#7~LCIffkgU+^2rW9x?1S?u܄\Rں-`=~4QiTFC!+]
ʧ_7I}SL	1t7/~m_UbXzfpį.o)'
ztNM 
pnʪmAP'?ʣ}e3rPgQVRm_ko*ݫHj&Kq6«HʶyxcMg[~
5@g˴
y+d1`Hj%ly
6o
dˡ[dcn[Z;/;s1)
8vT#lN%p+Q
pMݹI)yTEt%-_̶
ZTaW-$c4$#RءJFI4d)%g&櫳OUJgDҺ3XS	O>jݮ}L4eӳN]+ZZSJ jQƊe4z]ݶrK`=5ȦjQڗ dWGȯz̛9l%JbQF"]e:q"_lSfj1u˹Z}@g-&9ϔr>鉄}wi~ʜɔː:S<Û6.l$5`5z-kyNoBgB!zS#`"^q| R"SyX@	QS\YpҚ)oH
iaKLY,omm*D5=BPnȧRD,%Tki8OIב%9kzS?3qЅ[iTe#)D|F+9B !,ijִ5/Q)}"lbnwSkTM;cWǕA+"-0lJ\6Lus}.=u7UpQ ic	v>P81cH2c7{bew6qj]?~Ԡ|uJN[V'Deouv*&%Oi?Um"Th&LL YF}
m̈tS?YN7鏵̭Īcf1nBoJOT[fIl'8
{	ǥajR[Oj-š
hKnO>erTgQ#1pA,架+ b NJ9ǄJb:OM_&UiW݀mIrJ:V1S~{e8< Һrr[ñR;Hu3ͺTUɢp؎oYFr.rqֆT6=*y"
lHhgY[
B#.xbPraֳcIg[J]Q} ASY-	jh㏩R
U&ó\yA~lȋx٦-V9JV;SdjSRЊ2kz_,TA<#msaP`if7͈*#f;g7C~B/;)
`I!dd
Xe)CL`Op}c%»HTtx>`:31b[=ZC[yU_6&mm|pe~R3e|T"툐,gqn}~f(Px?F܇}P}=qu*I܋(Rz#*j~؇^*^R;S]+R*֊a,کj25˰~C,G6'>mKvy<RT^Sԏs
Hh$8m:9N]w׺J\%'㘻fvVnȬ8}:%ٵFUq\\biszE^qT,&,GiJ TAQVc;bQمq9|\ΕQ2z]>Y
`2ʕy9jJ(KbNh cg`!_#:I"@Q5rZBS^	S滲"}X}v}c!lXS(JL#qDhmq\F?
tՅWqM9
Zs7&Mk[mq.qIlb\O{@_H߄j܂p+}6"};.Իa{)xe\*ʗh/uDzQE\jNᇨ lBV|m\{{n
770ؓp{0Aatr
Bg\J!Cx;TTCz
mR{
U@u<E>Ϥd1Ic&([V_L	_#Iߙ eJm2AS*o]S~+/[P}YE%WRTgJB6"ܐ1֐;*ritTʸS^­~愃Y:'Fq 
F
9{J;ՌrJoCIdߍ^VuQ}UZԋILDoz92.dh%FBo/>(1B|J^(/f擜zqN.
VL5/Q7
)-zt2i\?Zwq'8@C9JIY|7DdֲI6h'
Qr2 Aݤ/=L4Sɽ}[`Τou{"~%	u2^o7[P};޳w.VH?@*7Hq9}E>9"5?p$<	jv!)Pa?a6P< E*]q)I'{xr4Hǥ/Vh=VR#d႘0%=0%`BVe22F<Q+]NcݐR ]y|yրHqnY{QдWjd~Y	XL4 DePxtNtst{{VBo7.BQkZ\@ʃPa*Ⲵ)QaOGeS4ԺP,pPHVd$y7F&jN:,+鐬#UqpP>QxXqrHԗ-a~'ZwZ}nI?Ȅ%RþlL9l%ʳP)V*eY<|rr_ݲ,c41A Wd>.1va$~ȧ[=i~zX(W@2vl\*1GŵS^}!kWk43ow=:].xLHjqEÕDʣxūlxC1}=>\1UI+p3nWȫS9J	PK     A !
m  
  J   de/cardcontact/opencard/service/remoteclient/RemoteClientCardService.classVmSU~n%.%RP-Bm[ 3:vsd7T
ꌥ3:~Iބ%" 0Þ{>{o |2H i ei	-=
euUY\ύ@~!-e^d;;ȖIJ/7
M߱ʮy"
*LNޅ3A9CxdcPzj^ÅMHZg7X(.öRTN/xEn0Mi).p%15k4D/~ڹ\/GQ{sV9Y hBǣ9ʵoǶմsrMo*0qS8ފT0Q4``

G&'ۚFғAY
fLTKsT{`vdEnRX؟۶ToPdk'Zda?jR3XD6U2KRIwSg9g~Lͳ̰@|jux;uc7뼸K
g,Yޑmu桁@$Tmt7EWh.Nm_~e$NҀ0U0FziFCt=<8rѰf^%W
	~K%/*~ڦP_f>΢J[|
񋆽gZ+o> =JtD)g}}7fg*?RY9̏Ih\E~'Q8V4yR r ^RS;(8Zups:~bGኁ
~L4+B'R8S*ѧI&gzQpsXA_:6xS.vLqY3uYLs).(JOX¯{nNEVuř'=L)]
wPq*iT|mPK     A 	9      M   de/cardcontact/opencard/service/remoteclient/RemoteNotificationListener.classu
@g6^ia\B,| JLlR900`Aasbet8DQƮfUp(aMnى`ŞbKl!8Dƙ.ʵ1c#Qh&d'M)`eaL?ZF-~	Q-PK     A :b.  w  I   de/cardcontact/opencard/service/remoteclient/RemoteProtocolScript$1.classSNQ]-R+r Q҆^	sș)/>1~qSL/0kegS,AB
_k_("qՁvc!]-U"E(qSU
7 q"	TĐ?a_sۭQ}VDE%`3 	$"k{$b_:?ΉsZOf{&y,b2F, !Cvviaajr7юQ^_6u6UMؘ4U
׽aڸf|l5
iPn2ޞ	C9JHoQ5KVN'TZJprأ1ZF``j z$BN[&ʷzs:2NVTL݌"k!c[x^`yy~@V0l<bn6Yd_>:2\u?"qC8E0?	Z)8`r%{KxL	X&ʗOQ@Q
o,h!4ja<}<VIꍞrPK     A  >j  +  G   de/cardcontact/opencard/service/remoteclient/RemoteProtocolScript.classZxSUIsp@Z(RT(PB}@-
!=H$E@^:_uQ@M2:/uwWѹ;s4E}$9{^{{Sē K< CCmmIP0>]( nj]Pj@8R]Q#7A#/o2p<71VθZZcu8CZ=ؿXC`idg<^^cq0Lm@,Zc
tRmA]ja:\*ט]FF(PRy@h8AQQW7UneXWN,@蘄RAn3Bm^5Vc
1x."FȈ͑8J:QjYkK>u+ʫmPh3J:N7;
uʓT{p,ƫttCSz9ݨfM9Q1Sp(ϣ.Sr
7F$4L&X6R_J؃
;c?P_/(6
bH8Jѭa6p:&ҒLWe޾'UGr5P,p<1LBТ7x8*^2)-v@,q"X:d2+b15=r
Bk60RjV|n0XQi

m
=k%^ųuDɡ%}ԃ":Q7QKD]m!#kV
cSQNv)6W5Μa`tl5FA=Z%zM܈yp.~"Tbf\b}ʬʕjW?ԱNYW*2}y%smf0bW(dBQq5ΫވmF&Sx*D*S*v08nXtsS>4gq܍EǭR?$BufJ_0Iuv#:hbUĢ``!gpAPyr]wa7+QbbK(~]xNim%-*N2:VFZ<;6؈MV׃8_p,`UU*y5uk5tUMF,2<H`'7slVē9~/31bЗgt<J[Mɍ_̀{	=aw
<	JEsqM܂߫/.k_jNKA0;%yf߂,i
x2l$T1IAx]:[#rrLGJ&ڈXou*=`;𞎿}Xig ة5}W%|B66FÇ>1>%6HYiJnčZY{	N/5WIҍ0cZă_Ōs:yІܗ:ꠁ1@y5I;u+mR5i7ҰT~;/W%8C\ÿ+"L1Yut͈GV[eEez5A4	<5f.mi6
j|AI3A:*9C+8S㼆,jo[k5]T[3W;sY
\SjkԼ
ٵM9YkͩF=>MX<mgv.XPL3U=qs-d`Q|W2ɯHΎeF_Ξp߾
錯;5\C$_)c2B]}{guNNAAbd̾4<t~?nuq?_U$H׶s~{?Q f-Pw ڞ?UU+HrܮnbT7kK˚&S:QZȰAlO݁p@hZ
ǃy;Bޭ6CA]bT+H+ĲV2-2cRf-\JroɱS$Ik4D{iy׉1d5 &]3^I/Xŏ$*Ýр1+0yNUs"41!pGpk-aRɲ(cxq*+5YɗkYЪJö!f\Qåڍ$3R7[1/򦷯{{s0ntoVT鲪5M. fMڿ(Z:s )@g3Okaie{DZi><}ۣڣ.JkHc9>.]D8]iI/MkO)dr<{g>lvCJCS_J{1|99X)!MfHTF+rLjcis:y634
cq#j,1z(ev&$'_ؓ'9yx#3S{t940Na15l
J@S4fوiHg֍jF-4<z4c<)c<rhS!i
\A'QFlהeVt4T`lKY7+\iZVJ`8U%0]N|ib~<^j4-JvZ7*ޅ=nuFuENeHMsӤk]SnxԃGhWZԚb{/0d ^F_+1נס7,܈n*B髩jj.j݌3^}`,ө h̐*e6i&7jĳOy϶M<!sA''WyLʩky➽\֭$z
5Ua*4CANZJ*MPÉHT" 4n̯oA}޽Ea`6!0%`S4w	z<]} p?nCgsrm2ЙnٛmTM
iCENaȡK.݌Kܖ2FlpFYyxV{Ϝ\c-4Z]Е]d
.xY60AW-redlFL`51ۑ l؂u!%Ɠ_!'yws^x7wϋc`"Hhpixif\\s8(Ce>Z\DRj3xbC54kX'ih5l7$.ANĀR ׍g/&w*s''eGOT(֍;R"SL('	8Lι('GɦƤ(>ƏBvutI
BW7Vۅd&׍[SUg&<dNMPuNTK
꓌zh[xl~w,\C'y[M$5D@|7XOeW>}A_R;61q:_tu1L^-KN%_(-uPPb(S91FD܍q2.]Әawb!ɸ{$sČ"[`p~,ΰ&$q`6>I0ؖzx*5 91J/.]nq\:_JUn^Oq\,:ā	Dj72W *f[F&xvf]F(8`	V;s7$#a6|ov{/;3G%,~z*M<Y}}2x4[nz,;/A"￵bv0lKyBKB/to]7x@FS>b̾~)>87Xa䲊8UD!yx+rVj)y	=}Ǵf	/	xY*RꝉO˟1ʿd*f"R#Rkb%B,XܰJ0?CKlI{)xfR,}|!tOb2l|Wҋ/^g8c.ltG6؜3֧@$v:&
"$1(>)cR@$-h=f옦s.2rW)O3ɔ[.^+)h`A@i$]z0^!Vq]zA?XJhA"񪴑:VMYi`90NSz
~Ya)Q^(oRJ%Hsbjl&	HJ
4B9K4lѰM+xfMfIL
ceQ/
\jB5bg)g#4#&70;}g'|ڋn-~lrY:/POH~Ei<Az50IfvHuKJ$#tdVd֐dr˅%U~H4R^@?ur	r
l+YB\mr-뉊H`N	Bnr+vOGna"nIMq3)oBf64GM<&Mt[8EF_&{HKF<&ɨRdyD"HHS*<rNPzVpSlcZj.]М]p:Ǿ\IɇF4+P@֗U]{[ߵ{Z;7Y>A,dQp>!%ص	!e3'/#_!F6`lB<14E@5)Zgq>R3·ӳkسz'/ot(Sl1c$x):B?ʃC-7PK     A 7    L   de/cardcontact/opencard/service/remoteclient/RemoteProtocolUnit$Action.classT]OA=ӯmbkEDmAYQV(+%,4lGX5-$)gΰFM9s;3/  İix
u|5-wZ;Lyܴ-ږ$뻦k8?b$QEpez7"w\EBnҶ\PHl]^E))ZT\RA?2U[t^JbC
U25m\844p7}Ҏ⊂1JF	JNI
ͫofF?}r+2똤,r0Y&5q$PH	S1(<YϴUA]JU,o6vm\d*i5óDf1\uUfH4<} [{=jt:/ؚBDLf	YQl|O Zv(0v8Gf>%∸ a"@5BIw0C$dfch2æO1LC[=Sa	x'tAÄ	#B,dJh99e17'X"rIgz^thvO^e>ǋA
=HD27':FXIInE%IJr;&I)Hun'K,`ISrqPK     A E0V  `  E   de/cardcontact/opencard/service/remoteclient/RemoteProtocolUnit.classVsU$Mm(TJ*mCk&-"M.d7n3~ⓟPGP
3ߜ_q<6-mb03=;s~| |
g;ΨO?}i	 B
VAa8㱬j沆nY;f.13ZL^0lk\cCr3h5ÄJ褦:CoZ;%R\ZA-<Z%QX40
ܲ	N-8MM4
]mgC_/Bp&,L.'N6cc ly<d±-
I@Qj8`C!<]V!0lJY1MW1!<o
v<q	.EqGS?IgB@(*nC9 fN+s?A
A!
z]6"mc]!t!Qah^⨝N60NYi,úXW	S*HCcA	Oh$,[m`{dfjקm)MU1$H3D$e2l6BAN9ڔ873x^VU#{'5KZg8َEd
'%Y *
qHpMH,+ka
/|葪!D68T1If!#teA8sMF+A1/,"LN2ԤzO-9,ٲ4iUdf%%Чs+Սײ .Pژ6G-TVsUDSe6>nO9o7U-
BgfH,&[Xdm~{x?ˢI|@`S5i\=tI^
:ynQS򢩤-2cm9DBӚ)JR׹ȫ%B P<|ưE	zCzWH]973}ș4Sc0#s!pKʞq54K[Hc'Lb6H&<9KZ.p4Oc8G7q/`=z%^#WC\	}Қ1ךaZhFۛwyTK#X"Ȃ%K&(N/A
Qe*,hLhųDYqڍ
?JI#S_G\nR5_:~miT
"Țd
g]
dY'IX`q\%I>&hYC]8V0"(*e@K/U@̗*2]|rb1NL	t5ǻE8u.!1=;J_j%X%++A J[E~6%P`uȼs~&I};OG
knGR0(oY"L\=*)qgR7KU*oR 卑}Oۘ\CZ^'֐ fpLYlxV#C/CYG1%XPK     A xOM    F   de/cardcontact/opencard/service/remoteclient/RemoteUpdateService.classQ1N1\'H|%E(B'r
["G}m"Qu&֌ǣ; \04PwlE
k={&,9ֳ
ץa*z
K62n YmT
,-8X`γ}hzۆQ?(߼ ՑnR8PpѺZ} 8JA7^g
񔹞wNfD"6[ߜ
H[Im;%
$Օ 
ɹ/L!~` {N PK     A 'e?  Z  [   de/cardcontact/opencard/service/remoteclient/RemoteUpdateServiceNotAvailableException.classN1(`j0$iAϥ`ҒRăCxL'ӷW ghTCm3QKa֒:p'4~baVK䛭myJٚјY#լךM0|e/O+#
K,M"bVdCmLl%HBp5
sPsO ts/g*#2\H_O1ʁs{U]9q{*  Ů˪5wJ-O6($;EB8JUg'ɛPK     A            -   de/cardcontact/opencard/service/smartcardhsm/ PK     A 2_E    =   de/cardcontact/opencard/service/smartcardhsm/CHVManager.classuMNB1Oy?,)c, 4NDfrGKڂ5.ES&|?@05%2I5Bak
븢
+ݻߒ95%mIa&e+5\oR
M^N1y`݀
3V8r<? LWOz3*E^24.~OVQi}!#< >S"b7Ye.ّ|O]1!t_hਈ/u"PK     A Q    I   de/cardcontact/opencard/service/smartcardhsm/CertificateDescription.classV[SG=pEƥbf+&hh͐\frҽ}?[m_G>ٯ	ׯ,w~9sΙI~g (0,hkۉ]$ޕ'>\@05EM&a	e±iXlKKYwF|bD=wulO^<X:[usi5fx n!3tgHZvluNunfhІvmD3-8ŴLqF谰
:m'_eqC&vl09)Wɒ"]vuRK4oXN봰W*i;W#8&Y;%+;#/Y:/T<(ܕ|E!X^Rz1>r 	GpZ'xS`K}ч`#E+WO(pLk8)Aw=w^2*ڙ(ଉs+	9^d%Vp?q*Z%*gi3tk(
C5n
&/U=9YǏ^(;spV=&kKㆅILd^>&hCA.VԊmΩL׏i[|P.2?MQmk5ȟ#hI9Q=H{عiڠe]]Oq7Yٳ2+bb"@od7ͬ]ɺiJ)@F%kld{)5hłc:GRfaOafof 葓%#ԎFR$n?I_}Q7P-P?Y9*l*o'>1|o	m{	vx^i 6&~~2J%@m[>d]c D 1# }#7YwI
o\3HvMO9b^c;gʈ}F3#'y*` \_a:C 'тS؎ݍsİ<ȕ[H]cv46Q ZBP;DY*`b25iO|#K8zʨwC2N̴Z݋8xW~[S3Fñ1UmF͚Hk9}X$֤[3ѭp5vI%OkK4:p]飘CHw^7P)#_aqcOp
s$YZffm^ht/ei2<T)K̳bx^X=^{~פEk3Un>yK*WK&|zg!Pth;;W߉$
9ǯ"nx퐩7O8\cږ
Jq9R-6-L%33zh	LuA@7{?<HH =ϴ.MTG:>@\?PK     A f~  
  <   de/cardcontact/opencard/service/smartcardhsm/DataStore.classX	xT=7HqA'	8
 $ I!:yI&o^Ak}KjŪmA%hnkvEXEM&@b~|wr{y}.~@HO$$;k6Q[4\f
An;WFC_JCue($
ubFXLڑ6SFRiGp+br3ؑF۴Zg
@QhURQ:J=Tw["]Kb>MG\SV'bjCC!9#N.1.4S,scJaJ4u	VտC6I
'!p@Cʉ:NAq
[C@0+LxÒiU<a;Br'Z-C~@Y.>ɳ"5j):N|eDbPxjZX4,q:L;no95^ўїhTȽxҰc	J!0#t8e͒n`@iaט]]fґ¶x[mƘ8ڊܬU~ԠVJpi	eI쨒qΦoI+#"pfр588~<lYִ;Ј&
ьuQwT7hq~4HU])͕ɨ+Vn);n&e8&$̎ÒcZt}pZ9+-˴`԰x{<J	EAe)G<46FV:-sS-a0:tt"N;7D`$JJ:被-:
wtQX:lt
ˊnk6	:TҮ^[p;alslKqCZsb.\\l'u\OeQd'j4%e|vfJU%].nwr#I;=YcrTFٵ:,[:nIc]0"|vA=etz2᝶Crtڇ[.	uD[qۈ9[ATOrp'tqU!҂ꉱѶqeL:"#`l1+){/I] p/+09`NdQz-ǐ׈Gt<73/4~M)3i$ew$zWWG'MyN2x2xOj)h]5xȗ2sdM"NrHFnKGcz0BNY+ƌ.[fXM$#V\3n3NYg/V$v;ݢH5e!'\k:H)kh;oǍxAN9@8︂:q<	o\aGurl/)g#AXë_	 r&MReRS8-,GCeYwFҙ^N_\?xrI0	q5)hov&$y)E3SO9.Ihr_
ͷ4ȼ=fU5/0)h'K[mvڶ"4c#&6ϠJL#$7hlmc~!ilcdB<Mء[!œ=F#Cigq^:$c	#}BinNU77e u++&H4}0g$JᛑքF8ȤCsx͋5GyS3ߒ̗Oqvs}+W-/(·~?wC1+1+lzK?ލ1{<a ΠE(48s	riJo j$71{4L#wůw㕊
_؎*f/\Q賦%}3P1_~WI0CSك,i)R+Օ>9Z݇|)4_r=y+Rwc߸纰nTzzB]/oQd)Re/9/q(u׌b*:L:e5]Xճ4
kkͧuhsq3o۱SIƷ=\:kE63/s_0^wsxэ9 OiF ?#׹릴#rxWcD@6S=<q{5hBBAI۔ҺKjJ2dT 5 X>^x*:pf-~V(ek {rV>p2R v4҆#vuϗ9a.%$>`Xm%gLh@(_:qS5\ʝNL]R^чOd-<E{1+pHyIVyIF"sarq?bcF^#)t:xȣ0e WTg@0UV-˂Yxys
$WMCVԊ
U^|熦JԴT̜%u я׏)!(nPpWÀB ˾U߇tFETFH|= hj+6̝fl\2\SX(y#t7oaIoe݊v܎܉;p7=ϷˋEy?x>=b
̝2X̣?2@	8rYnZzF2#emxkoGz6C~RJS͘.
t	ʄ" $% 䯆%
B2冧ڿx&;hLcm0pͩ}xPܙj֩D_AܚR`RwdJ_P+`7X}}( 5UO5ՁXOa<?X3[[pe.pD qЕÿI8V_T]
o彥?xI;]BxOQ_PK     A A {S    F   de/cardcontact/opencard/service/smartcardhsm/DecipherCardService.classN1Ƨ,"(*Ջcx"쮁@XBb8ZFY]2ы7 1}>ziblsDARP蒭A!306#U޺ozY+UH@F0b^a2>ܒs~*KFl!dqT(5Gźŗn+gAd˄l8}4Bsl`ޢAV60z;xkQSXHp$Pjg`	yPBB&)Ikiˣg`C*RIH-Vm/$LPK     A n   1  F   de/cardcontact/opencard/service/smartcardhsm/EMSAPSSEncoder$MGF1.classTKLe}YBmuمnJ[BEAُݥ#3$ƃf4+eUDɋg7</\p&7~wM B<&p&/aj1L'YɊ:'mi]*2i
Q]NgsӹxŬ՛=7qB@s%HfƆIG0f%#dT
ɩEi:ttT)9YGk&#_*H2-ͺUrYiFAuІvwA@
Y)8EkZy=BiQvԲ#G-X;s,iaYbY˽!ܧR[Җ 2z-o8R@ͥ1mK)1@ VH*QNRjv	Wr,Ck)Ud</c~L4f
D ~brgqcN6,,ind5싩ʚc,vE˅yG`J=={(tZ8d`(oX,zKY]57m#>~ٔ5T:h1P*W[(b7cJn&YU1%0B
ҕƖ֧ۖ*# o/9'f<U:D|z-ZG秮£㾂&Vob+qYփ'<_ax˧_&@s
x3>.?杉_CKG<ZT_\#:<.&"ZDx#Z+'+'(EwhOl^A2&6_xp5_hS1:FH:o'nT_e;,,{,{>^8"xM|i\c
䱁E|
d[ng߹_~-m6yxAcد&"M4ΰ>FI2-?pk&)c=ߡZ@G9EFS0y
h>MsOANb y
?
ϿPK     A US0O  A	  A   de/cardcontact/opencard/service/smartcardhsm/EMSAPSSEncoder.classVMpSU^򒗆%`Ֆ?HZhJ6}4yy/u\2]9W2c#օ\e7)#æy{wιKa7 !rZ%)&fn!xvlc@H~uz9)q)Ta`LMN
[BxVKVkj-ytV͓Ȝ[Ngssa'_)֜e٥dRnѠhا9a&UÁ]
׵b.
,
!fћS1+MaQhm˼B
o∆@Ro*%c&ޒZ%@s[H0	|[Íxf_UǤฉ$N0rqV)x5z6k?E/	|ƧR
O7L1/rg"~2p}sK'VꒆD<bOJwL"0 +^-XU9,c;R2Lq>k;ʂr<f 2RJR7 {պxt	~9,	fZD%pĤtaWy&ҙqFJzMZollih2TO+#c;b^	k$d_VViҪruofNom3i'e{j)ƣ]gD̩.z
|C7]-u)䟩P+N|֪ٹżz64@%{6uǞTRň-bp
jgj̴`r]Yl
}|[81م|eԚ/!gM>/jO}G8Ǉ1?)׉NY$AK<qZVNWD*^S
P^=!EysD"G ~-t
;Vއʅ{fpKgc8˰Ӄ9
8OxpaĴA(b4%YY8<g; [N1wOwj:D+&QsMD"*F(%fkzA/,PӣO4E&+Xǈ78#X0jt߻?5Ɵ!ϴeL;c:5'B1}P#kb{W%;bbR<\EsS$U^ HK|9<92~?P_	\<PZp[ʪHV1qZtR*rmui,|AkGX6U|[
(i} %	L_BhC)S@ũjϰCN >k4
Pq mX_PK     A Fa;z  	  G   de/cardcontact/opencard/service/smartcardhsm/GroupSignerOperation.classURG=.b1؊8	 qB6
`riZDK>#Tካ|S*3bLaggOw?pBXglFtJƖ<]@,^@;:4DttB)J2ݢUu<jM:J6mږ4fb<pZ.9]ICX,	=֦Y.K$gVKxOVvQWui5\5w:.ұ+ξy%(sˮ4=I:C&R%gδ!MPhOms,15w^=WPÐqM S0"iC\`\n(c])2;̎ll}6^huܜܱtj.?
ks|!pYR<^åN8ut,JX픒ge8=4O,/Y+rIuKE[?t$g^x~G]#uoAF٘1GV9HHO
uWX)9#k
A	DH'>#XĒeH`MNHDwqډ?\Ê+`^؞ݔ+YGAuoG,
C?L;aʳ`ZTAgmG.6*]QzU,LW;\zvi{;OuIUtZ1m'']x;oD0))JAO
}cZGg^4֣s
i/+jx
:E<wsf0
O)*{O
גm=-	וؾ8YM==|?)ck~0Yك{Jbbt}=D8 cJT4Ae $?S	kgʽ W\3ڹx}FCkё>i!A/t.c\|cQMZmvt_07<yУ=	?E}M_ У}NiQW!N]ɒ^fw
nc]<AU x0Q
:9ji+8$-rO^&b Iq!6M)H2?OK?PK     A R+֘  

  J   de/cardcontact/opencard/service/smartcardhsm/InitializeConfiguration.classUoSUmK`e0
9D2du2wY{Y{］`QM|bLHbbl$b@ /hb4D1
>sy_0CF#ڔhF*?z'mvަ * a1OjX4l-iIns<ǭ)=㹬fBe=k!iz*oin9)69HX"DfްeeU246'ӚsB$j!^f䳣ߕܰdǏK0
mu"M0i33"0Xΰ$mhiq!
+g֓eY>ҭ V0lNRf9[MkS\7RvZ5mqPFUdKS,ՠmF[X# ֕=DefV6ՍHF%'伢GghH2dUX%ֆ 60"u{TnVŹ8oW7t'
to
F2ek ne0JѝʰU@Ni<y*@~4'E];6mm<ycwܪ6լ
ncX.D7]ۓykD0kT|ҳ)
a;eGԺuщ.yC N1eG-
z`ÚkkA@U*ܾ0:E6\ԫ|EB͐Lj!Nê𒒽|P&I|vXPѸiU@s4D(W]CpMܺ,-P,kH(BWC4r}K_!FKvH3TIӲ݂.{*Ê1_jNI&4k+KJN@Jh^
yݺ/zOƜ~|
}F;yr]kV;RAraus`^obKLCQL"b񩉵`{n+Nt]M$#siø4$8A@rL9Ԫi	FyWbeWV)OԸ$5HHKVA!-BD^wH"G^NzQ$P EÚA.*Rg=b!^Cex/_("PXrQm:ެ\'$)h3؂g)oѐz|8I!}ķ[ZV7e
Ut<亷'~A^1[&!)=Ev1"}dQhPѻ-;@](*=*%YPMr-rm44}
؄ZKky~"㓞D)O~6U#u
O$fm)D"qI.ot*` ?1ƮpʳOE4:|A|yL2$
K6|-}
av͠Pc9IzރzO*'J5*<]*sT2Ga1<Zj^_ڂ*] .qֽNwP? _b?K?P~$~1L^ůoBOf!E%rpA
E'B֕ede{ PK     A YH    J   de/cardcontact/opencard/service/smartcardhsm/KeyDescription$KeyTypes.classTmOP~ڭ[-2 ((E]`,.Jw%mG7DFg_ܖ99y <BACaME.m<snu;g;2ݍ\%s})0H0(Er'tB8i %c%a^0`<EK
t#͠V˯wI#
iwjzg526wW4U*75Tݞ]k3K5;gVVl! 
\uDh/YU4$RI;3elCSzNE%J._m7yno/:>SVW$keT=Z[^m՗v@h%HYgGBlBZ~Ǟ:<U[~#p+J9ϜYUF0!@=mZA] Lqg1FY#7	NH8=r	1
a;9]zXIBS%A EM*B*bN▴Z2ʖ_6&kCmB6MگxVJ+xfn(GyE#44i܊KC?!4Vi3>hM̅PK     A 87  \  A   de/cardcontact/opencard/service/smartcardhsm/KeyDescription.classW	xTof7^ FD@PD	܈$H2D*$/0d2޼  nZ+(nX7I4T*mj{ݵuoOlQ˼wysg?1 '(G<&ґ,"T	EΩ]f9
'ag'/:>dS*us
cVT㖽"\gƛB#Y֪V7;XUՠ
VGYQ-#ٲ$xMA
2(o5hlbXudCDI0NN
iE|q8H֊(TtVk4D䍇ϵDP`bYl)p>&^G!2pcpCPDgxሿ)h͈󫦉D'83).-i{NVZ%L5q jpOz^N3Q,SJ+£%hܱ[>XQG	f7NS7
sBULBaTY3Nt,sj4|TP=Y3%*S}"9<
<Ӝέ-23oQzᦰ^a@&,g<*8|i~,7Eck.5rQZbUDޛ73_n0)XN*G_TGM&bh 3T1{H9@8)Dg20qV*r#D($hu+W$ZVks
CQqXDaY+2tTu(b	W6dƤLP88/5:g*ByJgJz_k\KE,	-/d
C=:Dp`{f9r_V[Dnk-HXBU1Δ}]r4IeĽƅxɊ:q&}nfR+O?ҕu><Ա B6;iM!Ǐ͘maFZ_44Xx$Yo7}M=9T?
zU$WcVU};x:N?c
C1DD÷ЏxM<'{5/aQ4dOs$痈=&dFަGRY.'D.8tOM?c*J2ke瞆,VVIf!a:w_En7RO*8HrW[W6f}|$V+M=I>sǮG-MPmĒ)VT<'^giU)dUqUceY56ۍ+2H,(0)G)qk9k
R>7V>]ܧ-]Iv(h)ᦘslin&U;FWEnuZ?c9OXXnƇX]gOhlnw*-!=aG]	:/6Il]J>}H,fTd	Xh
t Ɠۆ!яal_@A+F&bl`T+r%CMtol#_ 	&o؃::^LG&+pc<f)wsy|*,|58+qbZ&Gkx]obV鑀GG`/8}Tngv+	f
MC4Eܯ)m1 
 G=jsG}?q}3#&Ʉ,;PR؁6v
3;0K$cP]"݆)83cG2<`Mz`s^VRyv\uZcY]
$tr<I
4b0q쟃h&y:`=l܆帓&$Hw?/$M>xlް"XtAri{!l5EŨdh˖\ZsCe;;*݀lH 'w2)	$WF~udr@Tѡ?
גJאJדJ7J˛:bw#VTp;;;z 7@Nb3y)h܍ORѪvL>y6}*v|'ף,1n"RBJc]eRnz#zTy{v}$MԚ4qHwtiΣ=vVp>krhC%p7+}Yugr ExS0cc+6̝;.ZAμu'7%zox	V'YRCGj"QS*ew=ϩElIf⻿jfUewrc7us |@2QtXf!jt%K -|Q[7	IJ>iR,w+)wYݪF}Yɯ߼xGhJ=mͨyt1с-ݭ*;fBN
Lc=	ve {)yʄ5pΟ#Tۃ!roǏEQA}Aa&vd/{4p&hor,yٝ9 _J?;871.6h]o%|w٥clG83S縅nW)lb۫xAU7oL#OBV$}i|vKIҮKC91푁8rFgffd}4.Ǧ{ss/!:8ORʔǤXzgӍB앑O PK     A /'    <   de/cardcontact/opencard/service/smartcardhsm/KeyDomain.classU]OU~]sX>

Z;jk]JJZbʅvXv3(5^ibԘD{%%m!zS?Ec|޳B2$=}~p7SB$n4ٛU+ҚS
4ĮU7H GJGˎUrV
R`NUΖxnɱ
Y79gkaU
Iן;p;ы>
]@ytàT4ϭL۰Wm:@Z#Zt<1^U:=;Sx::Rg)؞goj-
F^ln!8Lxvù۰+ĳ|h6[
Xr#ʂrhR5i_qٲ|^CwBC٣`6wGQ1$[2DE+CSd"ziQ/s(1
Mh-=>PGN:3Nk
p>ӺsZ|5@+g.Te,='C˱SiP+sx'.|Ќ..zvTs\jq=$0 x)$6~Dv2Fo:4|ěSa@PJSzHH%$!_+?h2QH;۳1xc	ڃ|cH{;_een૭BGHyOQDZ`B"aHxMj^G>dIÖMҚ{q9u.Fe1r6#v1dQ/kJ&"C<i~!,f_JǸx^`˝!1 '8-*~	|zh̖[cL1tM=Ho8qj&w6G>#oHjtd,~BChnG[Y393|!|Sj{ⷬwJ馄iጽNKO#q$ PK     A UDL    G   de/cardcontact/opencard/service/smartcardhsm/KeyDomainDescription.classTmOY=("
˴UF]ݢ,E6$Oeg m?xLi͒sߞ{y}_LaUG2!p捳XU߶VH7|/~$1]D@7ي\';nlWc+J+qXͼvg`>q<^Fn^W-Y賛kq%Ŗ3Ћ3mu.8$NɅtUyh`"Wu{h8f9o+i$0bq.8scYa!Ҷi̥U
c:C[w{W
tn\N22ڒ&a"x-6X_z/t\ͭ%Et,887RQ
ImP~C5pStة
N+{`g(b	dfkI|%ug*USpBOǽs_Ӟ2PL*Ghi}7W&k9'OtKcF?K(N}Yceg셮\`Uy||I
vUNsD zPIC~s;,,tq4Fc IOsk
s;)pGD`߻ĽM\;2ϲ:_:OuJߵ9B'L
0\ޏGƉRiA?yƨZqXunҙ짂'X
t$JrT}ht$	ԡT*I?(їh̗
k.kd$\CdlhXfLiҞ7lg9;A*DPK     A &6    S   de/cardcontact/opencard/service/smartcardhsm/KeyGenerationCardServiceWithSpec.classQJC1Vmtjm!bzMiK^\~xZ"f̙L?^ _%04:LwI$}E.c)֐KRffq)rCNֻK&Uzi*2\hWӜL*#$-N@?Z
ʆ'L
'?Ud[5[7f9@slʛcx6foUݍP)2<ʯkY._mqv1jafa֢	PK     A vʶ  i  P   de/cardcontact/opencard/service/smartcardhsm/PublicKeyAuthenticationStatus.classN@I	ZmYA@X"!H @ٰd3{ĦRJ]x(c'X?//X
%[>umwo09d(nnuJS2x<D

Nr7P	Fҏy8ߏbӗ(
&hhuc`dm)-AWWSewx|\L_C~ʰ֓*0}D|cX'n;6t)
w3yPz/fޝ2,PPȦJ_{&pA#,靓!RdSlcʚTOo/8?(+`i]E.e0GHy, i2>bqGFNóa)-FՑdl)&\|)'\|9/MgJZPK     A p8;    B   de/cardcontact/opencard/service/smartcardhsm/PublicKeyStatus.classQ[KA=5MY=AC!DAR!8:;+z(HM.ov9.҈ D,8	>NJľv3D+V
SH%`Rx:FH؜i??A{剺maec(4DNwdC!+SRa`ou;t;!Ў:
m]@YWAKxb4Qog=ZQWb1jG߇]xRiL%B6SE裕|n6K@ٕ#\	=F:F!̑- FLv)lb[(Rey02,P,Nd8y/^{D<!8>!dX0Z}PK     A p    J   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMAppletState.classTOPml؆R5$F@DtD|tVڥ#/M$&>ܮtro? ŭ4bd@ᖮ9MUtL.oMpab!^*71YdeXmrUu.ԀΞsmkV2Rqw\öغa$ꘚرLb]w^miͪÛf2,!!>h좼Lcg2ޱh:lֹKbPvtkşwymٺf64ǐTDp֎n-2].SJvC9:CR/|)rR|r'=~Բ:ˏTDQ)mIBoWMAnw{iJ={;͔Ҟg)zJyF{
?@J.
;@዇:G(*1;<&(a1)کd\y	)$+yȔH0;3ȧJ\T/HTI/ $$#W0U*j>!/#\uWf10$T&&u
umHY>PaCz,ȗ"|I}yg<ٱC`6ʾb};`
Y5hWi`)OuOKbHsI/PK     A 	#  A  L   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMCardService$1.classn0n-)`0 E !.Sj!i\u5#$-*\Bx(qnz1(c' ^. 9d]iB1F2lG2xBѐ+e$Bo{*G2bN?֝Vvо<r(y!QGC`hd=cY/YiZT:i\|ꠕ]jb%[g]*ECpBTk-7V>rb6P:eRQxjV1pt6?"fȽx$>C\02}<硧y,:S.8j
4(ˆNB4;2(@tF ZVWFhf+dXyS(IFG]3VC{乃5w>"M=N~7,dzMppW	~y,b	Q}}xA6{$[@A#:d N5U}xxLL`2OO)PK     A `װ~   J   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMCardService.class=|UߛySv3@
B]!P&4U\KIq7,w*콝WuSQ&#3+_/xl VAYn*@:򽝝mRoDܗpCk:k9s2
t>>}6uۭoC`Z\Ph
nH0`f0<lyr~U-]fəU'{7xۼemPxjU. ـHAP)ֶPK
i04Ϭ0`$buxNiU,Oe>րqT]oa}*o*TZ}V$&S,&48Are~f
98&o&[S<π|`0+d|b .
37ڽ!鎶JA*D4WhluyW6MjvDE\F򗵵;p`ofp,;pZ:W6$)5Me%uKJz1߀
+
X$v}]5A:DYol	C-63`	y_w
4$9HBGCWYt+oWw_Q2`5|~|b&DPcHt`I$AT$%U6A
A74}mn	Qj27kZQi޶ 
^xmg!u7bzEaj㱪!@'~XlhP#Z[(H:p˻O04@%T"V&[Tڡˀn؀`d/6Tv6L8̀g8nǜ8gBPvxGY.Y[9js΅L7u~oW7ra	{$tXPٴ
/4؀Kx! \GK8u1Xtj"7*ma]%*Tvt>6xۺ}i}"րzPkG2j@Jn4QQbKro
o3v[Q!v$M
BŹw=k}vc`u7]u:B~0(ZC\
omCQv/w70<Zև #`R7쀝dBEdx̀Ts`L<[	!FkTum.XLHDҁvoPnx
 s<O-*GsW/2y N
Q{7ex=ĆGlx@
ac<jx.NN2mK)Q3} TR%]u27u[6#)MP~EY]ڶ&M1(~oi%eӧCa÷uJx`C%h2(+:ZZ;q-h^F:b0gx`V/
t,QBnH$3\V7	i8h(2!P#C!1gʴſ2?_=>aT"M8PDl~ӆ|am*޿J~1D	$u!NHLyZt9tRװ($g05^\Ib>	iph
>FT\YIIL7PDWۆƪe(Pׅ-$bf+w"݄(zs'f.PLc6
[;|^e}=%	iJB6,vjehATOъMMN,e"cEGS]ؕu$4|@ADx]kswP0ljl<l<:Ev#␓}F,md
6䥻١d4x
e);`NxB?PiY_K7IK>n%~&RF_	{%t9	d8v|ez3a1t/g&bS/Il+4l#[
7
VDrdsBc46`28Cv`!bO$%OI-dq E&+ގZDQ*};/?)@1X-CsÜVuiE}x^1S,`DlG`I!Vە[EnLW-f(޽$;h:&YL~>`8y5`M4~f|Hܚ7~*Y:C7h?Ayo[R^ljoAZXN6z<$&Gz$cq|30H
v,z	뱩$9b2ӌq"1`1=>7b`1}ÿRc=*j}8T(@8mfgdn!RɊ	i-,A?r~?~ua!b̶$n%L{:B]h/fTXKȦ@hA2NQ0=%%d: [yZ$xcFEIԛB08]-o9)b]_Ju?uh,_YyO?~Wlѭ;!Z]P
@*|s)&4UWQK7&v3esYNL>`Mhu#,;!N%x[ttyZ']z<Hmd#o=L5%Ԋ&8b!=6#'l',
}K=`atN?9&I,8,h=e{ObO#-N}`OQ@X}`c"B;8re6c%a9nmhy B4 		|VrZ`~}ֈj$EpwjP` E
2mW`;rKjPc}IMC]m}cumyy`Л55%U*G^iU%
+ʆW`IYҚƊK¦ҋ?3碝Ҫڲ+j~û
n2#[~Η9K s}"یJW>*PWc`Y
&U}5fC2ȍ5%
iV4s#N}r73$G$Fڠǚ1?}$wRpq%p$a`*
Ivz
٢Xd_>hnH.@jGq2Tih =4_7gSIqppq%HԤQȷAY݅v
2py$ ÐFJveԴtg=4S_QR))__}\_JA	SÛOk-mMwZx"%ti"c"5G$uuE>
tw;zhx$`Ħ"`&e:Щ"lc2%增PueVྔf
]4#l"*k#rEqi]yIc|M= (Ѱpy4 b|	WuKx_ !z	2dyt,zF6,uTҎZ(8wR#DyH"Oti!dyEUe~eU.-b0$o<:O8U-<?j`O{wHk(=uixAqKuM'VA<Vy1}ԐIl5&"JCZ%f {}xq>ёbEtV#-ydH>؇\i/9CXfIYj+~_Gٚ_+An`6ր^,ni=Mۂi]^PQSQO[Ұ͑2⊕zӐN!9$Yk4n)$uiR!m <`eʴAVc3zP4/X	x#nn{$21]P.gUYMfYzd3K}]B߽&^V^1diU#
\<"Q.HksܶJP5?%]Hr"!K)Ab*	fK
.z0ÑOӤ_18_3o|FulEYyC "r<+n
+iҥkP71t!]/݀gY9Q)bj*Mæ9D.݂F.݆.ik Z=x7{|<8榖<20픤RRqaʚӻQǐ3;&_&}DJtKK҃>0<
jzi 	&10&:
#-y!_:b#>{	P޶$QSBJI[z rWWOF_vLUh=ӯ[\PfY,ECzf-#ҥ[d[|*!}!Çυ
F)ݭA/O^Ǌq4+-;қ8y3n524A7=0oiyyӨLQK1g=UKgL!QDND+IPA/jN
,[X|TTow	:6CVjIv\0_ҥXkhХ/.HѫK_#xեo{.}gu{4~`<d{2i[@^mh[/I(nNS#
k2d5j
M-6EOܐ
"&>Itb$:$*Jbt˚FQ/'ڃy0IU(d<u9A1ҺiՌÊR%N0c$o>r|?xL ovdȪx5a5U1aV)r!;"fj$eojDq3袯%w4jզT[A;SfA.{PĖWU-	;$J-GDPȓy<EdTA.%1zX4rJT^\R]FnP]EjOE<9_r<b3J%G~],n;I[)BC-a{H_3H1D
JʹX7QD(bir1Cfp!ϓ5SWmC$LX_@Jh r;].GhuOYE}c2o<MWy:5d=3	^+zcѦ;U\-׈dOZh [Z*fy\(Qm78bH	qhKes牓:ى01xNE'V*݄(;&|L 颾ǒ#ɡd^y-",5b;4.͇e<%5%D:
EnE~䡄DxYcRH_{AݱGHU4c48<At-mZLTR/+(&d*<+eth2IشiԹ3`.`YC6itM3f|Il`^E]O?Tn/<d
_B\5u%
3]Dc3KWh),m\XQ(d._`n}+|c(*|!_EQ?5Tٵ6C"FVс4:C^F_EOrR6&`ʵ)M4dd:^=H$[
6vtC1*e|'l|7
.^}JF"%Q;jR
 [_~ȀS,
n&c;IOe0ny~6{7,WN/029=E<MkcY9+]ߗx[;h
hWzS9TR>ˆ
񂻕H~͐_03^L 2wU' ʬ{>35 =
#
K)P	}0	ϴYKM)O%]
L,1Chy4sV`> &͐.cNzY%qNk96#d
sm$DҤa&P=t?l _%ϐ#P8fg7RA
IdҸK7?@"w\8Ӹdp#;zRI
[h$I6'YmNr9)ظ6I+$\5u3Ϛ0Xxtb7w$D=eA%h|HfTo(!H1x*
rގPYlBOk±:5>4K͇SC͊7!rOq4>><޶`s71cd	OB!KQ.Ċ'?NU,óMP.\K| mh^@CG:-ȾoRg"YgqxYPqh"+fM;c4>ϐr'mp&,1x)/Ks!3QmNN]}W"4-0B^Z[ee\+4GbUn^k4^k:$)*ҎҢx9Δ[+[:N-T0|) *xssJ{Ϗt_!ϮG2j~)>hzfZ=wՉ_Cjn5^u̩>F鄋qX-lU7zn^O6zf-ձwb#ǆCv$;
~
Zـ_w[st;Ma>wo0w_=&o槚@p(_o z:I@OgL":Ws'Š'p-o?GoූL	a5~5Қ(h <m
Ihcÿ0Ť/".ɖ!b_Rsʮ
j>D6Ӧ*̓"fvMDLQ34	"LsIȧD4Fa>
VDb=MzT0S
~Ji@ȯ{\dr2Es*9贮 |2d֑eAtCYϚ9lr%z:{hJ<MkF_h5kdG
M;ȅA}ءzGf]^'ȯ݅{Oq]{Cr15;?KͶ6Wż`鈃$:}ȈF_y|'͖VkcDlk_#9o-M,iCݣߧ]̯h( A$UF0Sa=ŀnia'@IX.s/;?h$
WZC-~
ouQ9uYBJ*.ַ~οF3`L$iXΕz Q%f'r?(8-{Ѯ: _hM
Ra"@<
G[QhUPtґMH;I
%zSE_2,S87;<
rq0		nֆJb&8:b^Em;J0K;Bݝ !nqe$dC}0 Ά@Pa(HBM
aN%b/O?84ymOh4U&Dx2MTLFV"6OS2
eBr:J)yOUMdݺ
Ri9>1橮̤U	8OW
QΈJalĮ85Dr"/OS=6k DmCAwCTĭ3-IGD82o֭6FRC?WiJ)Otj$
H)Q
!W:@i}cr]Y-/{)baV*Q})U.Ad"՟l8&]
j1AUqfYSVX4eIhHo9֑
cM֮;RCYFU(MWV=bi
͜V0lF:
4e
ٹ	r"%5+AGtMyEY}e]cem[zM9+.*MS\SYYJGMP4vާ"RVicV;US}b]vPr'S%܈))915nyZTQG=	r5esaD`Ig# 8T~aK0m1$^ÙkO$34#އM$wT)T9|#)tsK*U t֞P~:A<5]1x=
h15< Α9K@z'ALu$kfZm{p
e%u%e+	h>b~
"ߣeTW<RU)w<uE#,|UVՋhҋ򊆰8|+u˰+_3eT=uKK*~db\0yϼ,C6Rcqom7(eSXγuoy<KgշNM!Dq(VJXEPda=!-дyF͝ax.7݇,0S
%HSȑ
D5G*SԔ=QG'm!ئKڴ<f'sSD|9g2wXrW))$g g`uMhє
_b[R5uw!mhMv8fK+І<Q$qbW;4FAnwXl'i j๡Tf==27DbGhaWGA؍HzY9l] )jȦ>()`ew㨳?ND\L;s`؇\N1Zz>jR_"%|eԋ{O=^+Ԛu0чL"`#U
Ah#s8Di'sQŘkt'Vw	%wn%V#x&\RۺA;bp t̻xkFSR@&rHYOHov.Π_R3ȨF6n/C)#0mF!oB54<D1x>OE"⃶3,>{k~f!$\@0N I}V57gSMb!qBVa=Dp䄍ᑶ<_N߁ZqN lډ	w3GA|Y.Rӻ-e?pVm$[ r;dD̈́贁I"m4j,
Ei>`0Dwc .>"ԫ6}V?19A "Rtc5ADN*r^W0/I)n4!ota)
n?]A:#W[Z5p"U-I9.:Ol  )]@%=I>B&jgP[;vƜ}L8d=|ʟl4s]`QhՑXS5`}ٔNtt#vrT+dI#ly=]3TrF3Nr1+T\M7?4Fyf>'g/PDȑPD^;ͻ;`QQn"KwrTԱ	.!!"	DRi>g_AۦL>r!v6^ F9#OlSppc>%@YՃ(ZS}9kʹ9:=vĕ`pª!BW(O|jM&)9vۻmS{;|Q2MmޑE׾+$7b;9=
lhڀ`a&{ı"7 q<	2
|J)<,N4[sܼAsQ[cC* "Ӕ.wv#֮%sLdƛDv;H?>+B};C)Sq g=QwJkϏhhf;:[bJSMhގܝO09Nyud i3r܆lDEq,QqV
)4e/G8#HPU?HJw˓&
2e+z[5m0#eRm7j곱C;Էh~Fj'vŷtt,k
Ve>E$CiU,L4HsĐvTJW>ε~,juhPfZ˩;c{m9@DYHs64Y}@v#T)
2,0Џ)4~Zv=<ֵ(4/e}NV
nұwp&/~R|~3fJZKT)Y_\.ƏJ"\CTkb_77z;|VsQrRɣL#JbnTG&͌ah<Lp'5S0đև[S4IUVSR4w 
!u zd;;GhXGEOXtoo\T(^ox;Vݰ~JZ/:T3-ugNuehd_VF+MWnqo /T

~0#<-ot,K%%e"VﺃmbkC;|1@;Q~3ɯicp f0
I)Q^nߟ;_\e08R_)-j<Kf|Z7:AQ}HǄC]|C)2vVQXBl<n<]F)JW1o<xXN@D׵iz/- K4PxZ'ɊfSD_d0>*<u

m4Z8<;׹LiEtmJatzgFF5/(mk./ʦpp΄J
8s#Yzͤq(#ca}MoS94 j#8vXTπTi)<w:WTGlD5s][-ѿ!V֪M5$E-J.`sNfU4ir!T;!e^ڻ2o[[CpJH 6o)д]MCӖHXjV.CTJAlRNUNHHtkr,/p	M'E⽛;lZsy|.p#_/yb|Άo>L{3_b:ycWϿ+WՎm|Z||=>xor<ߌϷ8oާ|%1Mk6b+qZuuźn]bqXŵNק

hȁ#%g˲vJvV;!!vG`Mra">LJ,ҟ3MJ=%"K~ҟ*SK5#|@s;]x;
z>)$  WP8,eo*&ao
;dF>p4.hNl0'ܥ܍W'u8oY9cvY=po*B{<텍4чas0
!!K{*SwgEjz~\
w_5Z+nYA`W!rIrEE._r/9-9"9է8
oܱ"n2'@
='	I\@ M MIHQR&dIYP e\)*|h	RIӡ[I3a4.6hE*;bO*>'xRGPs
w)rr"fV_
qUv =#,4y&Rƙ#Hclc'(.,9
R
CDa54QM̀iou	A'ݎ٫<i|e4=p^z7Xx&Q|3Mf3*D 8ǩm0EլO7@Gd,]ZCVLi#rxX.(8
S8mg!HBȈy(<8
Il(rP	pkCS^$2Hk15
7¸n*AZĐ!B2[ضV(A[E[\yI°ZZAܿq?/${y{FJH{3@ہBRA:i&FHgL(mL,ȓA|\2d _heBLS^Elރ@J4x
A}R~ghb,YȷVWfejpO_AgxFQHW 
C+x0UFcl
Xk8!0JyCyG@L#Li|(nW؋PHq?$g]N;%ts?!Aaԋ"|/wRtEŚS!$-Bovw?Vebl/Ӫsv3*-;YaFMsY~ُ8\(bìȃųyEH@2v8BB)Q$P$=oaG`&"2)0AyWy'RB0DPHtv@: yȴ4&$!;v6$˰@qPWlQ@u/NEpH,6f$P{sŭME'Tz2\rs"V3w(CxK/pedW^Ex0]zHzKO5G3cia_B1-΁&Ly?F
/2I	vٴ0&
aM#YȉntU C#Q\Cf_ Dt4
5>$	-!<d`H^6&Q6Ut\j> $A,p(aX81-$
a0~@jVmBp0Ҙx[QV.Tv[T6E	nA(gG	׬:'"aj `tȒty0W6`l]-h!2OʟqةPEu.!KJXE4u{l-IHo2e5ńA60pKP{ퟎEV9.8y:"h&ȳhyX>vlOؚ\:⭘S5WVxekdX610101h&ᗓP NASj
80F^ZQr*{N YS	W<{vyߔiNNlBn8U1.\ZVʩZCkSVYx6We#*=NtZ;̄(Xy%H{
ae0S^0G^mk]d+P)TdM%/8°jBT K m6E:VRq	MJ#RI(F١%b	1qR4*_[-"/#rPCԄm"KUPºrGџ=	Rg;//'YX4h毑NiSO#S3![@Y\X"`e̖A#9D%ԃ]1,wlZYd2Yh&PkJoؕ=bˏc1$-2XPG=r,&rMw>f,1KIO4liZ*^jo 1jvy;x7}e۾Dm38rͣnfpQvD	J{F.䶕^ؤf(DKK &,q+S;[\tQUZZnG=->z#ex!"vxNcHi{#΀SZ2OY;oHJ-`?l7ɏ0V'!O~
gD~)9zEX!W`*tʯ
8]~Α߂RZ~n߃`!??[}/7S^%e4@-b`)q 	9 !f=|qX={'C5vFX>P@'3)7bH,)?X6K)\DB	BPAT Dh򰽄[5WaOiJ)3'\B	#V=)M{3 g-B#
шM#FhaQÉJ 	CW
աMN肍ݘ4$@`Fp	r&q\J>`nIW<Z0#|$l<>~=p	{$xOxuzǇ~TaPkKwm]nFrPwͣ<!EԒ%M(`
Io؋&_K-9`F`ؒpj&US,5o7^޻ҩ|,Oݑ2.Tf=&qcOY,":@-,n8~F5Rn)MO)Q,9]X&Jz`4%DX)Z%[EX2,9|"Y\*F` B:#0!)ñ|.cb^Kx9HBWB7_?J^
7:/y=7 5«|)×g|9oJ8W1_͒l?M'9|
;{Y-oz5A3A^e
ݓݛwl}7ξkC[0.1ՂdKbsHgsA4?T&MUsbmǼBn#S)))_=
ױܪhϐPiI!bhC`I&'d29PI2PIb35I5,`2|; b_Z5
*?e/ǃf:H#2Ref_XrA2pL![IMldOaߑe0~a?VP6K4
Zciˢ
X(3sSL/
F(R0IY\h_
<&H;\wI𘄠)OP9׌1yQm 0S0߅n*D~?!0G`	[7cpJ?	=o:T FrQKoh8I",8:1b#Q[!ȴ%+5j8<]21$p	iVkd)HiX)vqŃ0:އD9S4˞ϳy*[[my8H1LAWd`nacRc=$Qsk!ژk@KR1ԕ;#04	%?@o$}42y~D7jfFqQw%%\Jɦ{ȕzq5%gH#FcL=|<UBARd~3 O
r#nHƤIym?8(Cyt?.nL07?!P̿r_Q?8[dߡ&,%GAEڃ
TVYE
M"7YIUÏJKWq+X2(#Y2+cLFC*
`
P5	IhEb몒ƻa_;&q0
@1SDFZL5
8#$}KZu8;ȕ\1>JWHZGOcbCqXu\N'tn{TzN-58V9te@'Ew~nXwHR),шM#pFIpi4kz
rMɺP
s&a܊.efݼ{[[[`{\/rn9MvF
U,N:D]fLnpr2\I=R~4m;(En!I°
wŅ$VVCSvVd2{K1)m0xT/씊Hs|sbOóly["TCƧ\Y&(>~͐Br2t@JjS`n+`Mp.VN+M9=-r<lEr6<+8>W./_7Ō+ Ke(He+BQr%+Wb6L1.Au$$87C+`u(;l
$`f-`fD2s0a5Z&e	B!/DGQXI?PP?h;K)>>
ܦږgOAgk'\\c2rZl1rqFXPCd&ܯfYKtCd1SfLVs,%tdHǲiVG#S`׭La`9Vj4g@4:<pä"ʲ\`jc=:-oe(RF+deޘk!%{Sh_EŲ6
w@SA#`1LT x-PtktTLObN#(8Rljd]L٣h7\Ecq}h\s;Қ\He1ʿ!Eگ _c|lNS[4tD!X&Sbw&pXxM̉*S!%Ю*@~[sL0WUK͸//DFޓ\Qg CJ|3۰*!>}JUF?gkN4)
9:^Eֱ6݈Vrނ:y;aJH#P
MF:En-T1KQ/D[j
u2	y"5Qsi~MbnM(M/fܬΒ	߅X0FAuL']0BJA!b*,?5
K|U_h7p"%Vu8NgGh7XxNntP̙4l6NujL
J!]=^xWEjdP̴@z2TC%j;\,Up	Mj֫]ЭviP&4;l y-oï["~bS 6Y0C-< x-:$z5LJN{ćwIE\W`MB6AN#NCv4*)toj 
z9"
D֕0IkQ_՛`>ڵmS@$mNNبgpp <>@^a{mF^a{-M,	%Bh/TWY%2pEM4}D#a Y*jiJ?@*7C0pz!dub+|L[<mH?ZhH+ʉ)8;72N77茗:B/}{$(Il7D{U/ID:Ja

sנR}Тmdw߅s?ՏPk|7AaCq"JΧR
|H-Z#	ڮQThi(-,a	:-tlr͗k6:=z,:Xt	a_n+vjI5d	/ٷ'fx^h)!E4}hڇhi?lV b7h2ܩ)c/jnd%U/٨zFKD^wXHi[Fg244DrY{x<flg)eP'ȶЦV.`i0E+<m:fBVel׎vd[4؀jPSKҲ Î疩IE Po@y1 RZiYq1Yr{$T#^mLf$6̹ j!IAZ
l:{FA0HP]$2ƞu82F;IU5"mVL iƆ&7^,X4aJ>%i8P21<ΛXN&zOjOW(ޙM5ܚd3b50NUPT肾Sl/'trF#d$5)3.,]=ND{")a<Z+Rdk0M@R
@DZ74iEiХ΀K9ȟ[av.<]0q(g5 9	lkhӁDnIvSUXU,|vbZOɉυa|&(T{0]-< ?D *nEK~PMWLZXZkPb
*J7(5.(ajW!AD]unr6X݁ȹiw#odmtjFa8K{.vڣ\k#Zuk))ZHhq
Bhzah "U0
;FEQeopCs$I:{O6VO%c5,@h)?x2
F`Zr
g/@"^k0U{e[0C{	=8V ', 
'?96եB$<]";ey0[ Db6er [ it $< %n/;۞goj/q_C
׾C-=LQڏu	eǬY7+$ZdvԬ6ZbNT7ךքsl|',T\ܜĬf-GW!`>GX}LT3POc0_?
L8Irҵ6Z@UK-Mx@-r 6ʨ9zwD(zXC;/,&- 8k),f	T_?%Ua"%U&ߛtfeIg^1]5$tޗ&$9Q@24x>nhIrwJ~Aѳtry˽RISBKP2tm50$	
[Uc~2z,LhEZGyRW,ÐH)]ꐫMޘ"a}-&`i:f$XW_6gzw)+
!A
L!ڢNĂV-Pԓ6AS[i":KĖFYjrC]3
!d]s:
-ΑEJ|ʸh){L63 FG1f`+yga|	aO]Bz#]
OJ7nXp(HkH"n%D<(ݎy6xؼk/刂[#R-nVnzIQ_ܵWGҕBF"^W"!g㢢wdKs,l2Eߊ<χY(􋑂./Up+BWmp~
<_~3owW~5@H̴-J
Tan;(K|j1s&hg?$
$b־l%th{nAYxXڻ˞2w`!/*4AJipPwgQ<BEPsea`!viVL"x~!N
e2&Waepoޢ-Lo[/Ż[/jŇ[/fdep>\&}Nt(K-ҐfaeIҲ
et&}Q8眔&}UYiOKK%Ybd==Omb*n}ԫsV>7Sv&h0W4b_4ۭ;2]E*ˏ*-c˲2C)4&~xlPtxK|ꑇ<&' # Cs196O4Bj7}cqqF刽fv'Gf-1o(F	sH74?PC
AoXKؤgn;xXOߣL\9|a3dnT4HMrY+65-t
fծlkFN8vnvMdw{\}	W&{ݕr岏]]yϮ|k$fI\GK]ExW+J\RkܵH0-`5(ևa;
ބBj0^V?>HŲnt,6FuyfL
{T4H+bCZxg
'ޝb@!4#FLqCRQhfi,YLqOT,j3|:cBS%M4k
%;vǘa^޴,fM$I{
E3+ I7\"sI,-,E֟]KZ0ڵ]u:]k`	f;En(SC®I9xG+3udugA2kG'mƠot-a!CAey#VBE)4tDS3x*5eUE_(7ft'eP\0u2d0	]@3\
P*&w
k\B&:-bWתgó1s?]=Ghn7cinMݴ};-8깖;r\Ȕz/d.rxFN</ S\ n"g(%H$30ZDgP
>qH0|2eǔ_~1<b	lag'r??:'*"	[۽)ߣy]00x\d׻z],G01T>qܰ;ˊ8sEH5ѲHӱw(gq䌺,AHG/0
H`[r]P G~RX)yZBGG-7iy<ŒVB3jeO^+.M7c[ZWGzaș8",s!u'N4𨊥9$9C!	!dc$,"e5
(,*"L(*WzuCq"[U}f2	~>'9KwuuuUVUYiª-t(2	,(!d	\i5VsgVNZc"rYd-u-2orP}7{Lլ-wf5{2uuq##Z33Vq'(KQ(!G<s(U5^v۴f>ǋ&i-x[c{"J.5R!e
%kB{ktFBwk4@?k&`M$fM)0ۺ,N͉fN7s%)d tk+Uo+5Fkc<Vu܈F*9u+ۛww71E	#vL7'n^EȊ^:2`#D%#kYI,dtkd-ښ	Y՚
X 6ĺ1\ܺY|̰";{au$e1vKe<A];l2vA:zM`ѥ{f<
Y\[
~
d s{PmsV!)h"ThѬZȹ9)z
rOWuD(~k Z
uz$N(qT]tJ}_\
k+xͻ1Xͨ\Qv%7MDXI
{dZͧMpn'񃗔}7c-#}KwΖ}J[
3A]PdnЪֳ0ڋzrĬ6pKكh`0(8,+;1:7֚<n<_nxZ
QCv\ƨ5d:9xXe/ZU	 ~ON>f0l^~m;W>j֮֠[t{؄_@u[_~y1hc}&;laC3Ƙ1+8[ɟ1ÆII+ʤykMdDW_~1EGbe Xc4]\yǊAۄvdۉ̶ @ۅNvڡ8|?u6UVo^`/3%<V ѮhW*}-Cn,4+i)fv=M/[7WL
)&A  IAQh|ϦlS	JPWBANQhN`L퍠*S4'#ۚDȡ3oMKur_$|Ά!$ۍ)tAW9[@<n	7m`^=,;vGx.b؝`]M<x=}/Gǚn_h|h֏KY3Q4
<EncqH,,9JHqbMQRӐ+7dmY	0m@!D`11HLмxJZL%-)FmRbVr$zRʄĻX:VG*GIHJH0#
bu!#%)QRƀB=;ȞK=./K+zŞ
skQZ\7{:7{o}=f
G9=۷[9&)?O ߱|@,>ˇMo
apw4`PZ|\"jG2h>cG5!8zȟ XݪbmjsPQI>}LwFGPm[RHC ԷC^JhkƶzzkWK2d?G{C0ezl}7N	qtDdnXs\iY5[xo&%Q R[PJyTR!R
mr('{jyDWx}ol`y+q;qT l,{4+!~ZA{{t:|/(aj̡I̧Q(o1]fn
w-XiQ} MRxqRC5$x>HryHԄÍARPh8Cۤx8cpOJi
(q_v7γ>>gGĘ383iYgy;OU߮Qgbj?e(mɟLЁ!H@"Xi  ZPy:PH}3Dw;SR'ЎFgvnSoM7;r źA@>
m%ZC@[h#qnXx1Ge7l0ύ1Zy܉O{QqEV?'PV8@Y+Ucئ
􆺁>Xq
1ۣ.fĬ@:u>HgMD	oV^זW"ѽxvFoJIܓTuG~ɴ s-"I{Rzf4ɞ<Yr_#00Bv`
Hl(`
LIpy`r\^k+<yc8YrSnPb>gŚ4s_l&T^_HrOm+g~=*_uBn!	Y#&o:ب7ʎњ49]*Hbti6Ȭ*9jަ 6FD[#nqNH
G![ ,e}9E KKձ-w
~B;:YԬu*X
aV`VbVa@ڸ*ƪPhq
cU(U0VU*G-WI1W`@^)ݣ^ۇJ(B&}߯)3iwD{;qwWDDwEJV@:Ρڳ~%hD3}LAvPU?B`%!)*$xƤ`)6CԽ[Qn8&aJ	<wú^pex?
|x-
eHEN$@5>Bfycu>
y"اm)>$+^^ͨkSN]Mcb_]{)}6h8U*WRX;)W&ztZ*DU
>;zuA꟨QST?a_9~RcĤ*~֪~7̿y]IϢ^&<#VjG!1/>$rHOHo
6WçP՟F:cZ/7Q2FqKO|xL~1/>'vd]ЯR4Ѹ(_b3~VPk~a=t:8}_|!~|Uq4HttHrHs$BcAĽ'&֍1OrX$n*|Da<A;z3ؤs3(>mc5ÍCsibm6RUu,|{>u2@䩣'zvG+ڏ%V=HF aH+MOߣ<Nɡig#TƁ:pA#vhVni:>'?iY^RV*zqW
>p+$Q=b*,6zr#+쇭M")*Vu،$
Q*'jmrlg@}lU*ҰBXlb;I/ڥw*v؊݊Z8apqb9̡W6Iz]zz_8ë	a;*Q]^6юhDatAv"z~aKr#rhTrc#k{X}]	ᄈ~~j$C߯ak>U@DH]		4,A:rX7=5<LI*e22AY	u+S͡t}>	o9œ{Eשi@[yC8xoo}T:	CuLrC'
FɆNC4N3㴀;\xɃUNlvZV5tN;S;##|to"9On"."߹@tw.C>b3@LqJu@1ݹHv.Ab3X,w5P&9.g/:{3NuƋK	gљ9WΕFU6T_sssbHFg2&g.gososo3׷ps#  hQm!SP,9:K Xb:dGwe0A,7ȹJGog.W4WEDmf0lL,)Xk2f7ƈ懴I^[UoW7?iF=Yd&"l0m~DaT1?"(2[t/
8ɩMRRN.3
ܪ	u~/jk3?Aι
5գ-)O[^qqNDc[	39E)}/	ח`t%WSg;J C[u-I0 zo7ŘThk!QV"`T&AU
_]Cvh7Gݭum2XkRZ
(Q+e܌I8ĨTIt+|z9"$BI4BHѨ#Ŭov1ߡώhh|x4V%RTZ?]Oҷ`;p8DU̎p"#ޓ#mCNUX$]ԜHz1I/.9}p~JҜ
}N}}nDǁa!#v+P].e,m,< !gjUFϧ;Bwqh	<	9z)giقx+<N*
xo:sg|<8{v(t^EΫsHqvp%&;oY?P##;GP#'v>e%:AcqD|~ǜ/WsLqiηD/;?v5D2ۇ"Qx@a}ѐg~EzQhX&)D	j?DۑY=xЪ[;.D-^_B
60'pzĈq
̣X/ͯЛq ҹDq1,Q40YgOY_6eb3@iv
S װ"miv;!Aj̻J>U5=7t(xpNeCtF_NkxO?/	g~E #cmJ_R//:C;P&@{7:vlU!<.El肣Qob۪:zty=DiD8TWE%pqӐ0RuLhև.pcJa(AwO#]j0[;ȱX996+;nd-8cDjfߣ3~?;lzonhVeQCk)ڗzLD䛨Zb{6W[#A --L#0R?R^Wg)^rxh(aDw9MU2#'#45Kkwrx>nI8nY֢Z'
վ[PP-	]!nOh^ -^(*B[7ttBW?\A0S0
a1-2wl6wpB;^t'Dxϝ;%,?RЖ(We4
Dz;zo
*}琷"4a{zmG<Q
v!Tg׏aU3/vqj}'goڿ'{պƄ{5rkdSVH]U7Sn/xsV=jQSԿ:WJi5\')zAHto{3Q͂lh\(ta	qs[=b7 MΤxFL>QqOV*R"@v!y#7njGExby'iwV~.3U;r~Ҧ;;y#y\=;wB?QP]5ͬ#jy7{/}ZBSw9sN}z+j஁k܇aqa-GP>
`8sMw#vMOwHvV)à)^kS4L47rE	åǡ	w wnoz~a[o:y&7ϪDkϼa:8>#oB,Қ3w@Ê	q%_S@cDv^?I<%G^awWķb@9WV I1lƆPIO?2y8)Nrϡ`}O紂ZrjDq?wRėI_  rss'ݲ!ژ.b%ڬ5/P|
Ϡ9tq^=ܯ&U	 7?)X+ߡ<胍YRPCA#74vCس&bk~ZF'x_j9#ɻEЍ㞚]l9Of@.+m\QbEQlpHg)4_y~@H9
ͷj7EzYŚ'-s6}QwY_ðm`a"l(ĭ_}?эu
Rie`~f%t$)f p]1Lu%1J9GH@
2ʛCZC"CZ0
 '
M]6f'"A6(%UR}HpC>?}OS}94'bsFh 1Ri	+RHy]1hT#Ffou5jme#9N8N;FlΗYXD{ƴ;42iF3j:ZUА{uaRRGkӢV^E<bhO5VǷSF8>27o`@Xh`\¸y`K(mn2iŠv=aTL^ӂaf%>8 
@$8^^jkoep_-X*)GѢ 8FǊNq[p(	N
@d	:qk8Ʃ `8S
T'f#̆⩸Lљ7hAo'ykVCi:^f?ٯϤ ^f5ot.߽7R:m}սPϩ4z.FߝP"9+!U}BFwI j}F3?Ʊ/75WA(x
4
N*x(8:Co-u۟j|BߘO	ʾztd_=8f_&z-YSRgIqO0~vdAC5hoC5\H
k$,0ߠ=
]jiej(b(%6S9Wf?KeRCCJM}H?44\~0@`C*tERidl=&lך(!gRMX)ہ@v f;
_ȏe1rXanLLmDR64#I@:UD#Dy%"eh\aP0$/@XGF$!L#Lt*4aXBXa:|>% l$eS
e&FPXZ OeS"Ҝ-$]!#Olo% l-DF;YE+b9a'a0®v{v!.ACvBxaOdS2%es}8W&!'{#ubR¹
d&_$g 3,g#"G *^"2GpMGrF1U1|w,78y>QIʡ'p%. \BxKΕ+Wɾ^Ò2UZ.j܉:O3nL<o<gp7q7sp39YlV63s(̕w	.gC#t||y.HCJ
"y?%+$t-҇`1Qe%>K= `z@ 7nB+[Vɧ		zXJh-Y֩eԚ!xx$)!xT$;qYA\n!IoBe3BOm,#4i	mń!n`I`'wUv*DdBr]rݪ{/*e{Bϒs}B{i5BC zQ&zI'tG^zE*u"ר;uO
-j*ŷi.#Pl}숼л䝄IBIQ_QBjIߤPB||BJ%V	gVB9|A%GsKR-!JN#tLIײ7aC|w|t\>N脒T?KZ<?&	Ϫb'D"U:%M	iy5
gI	A8$|
BCH	dVB_~D(AJ$]2Hȡ%\y -|PHv#TGn +eB)ܼ.w\*&& fYtJT%ԗe)lhȽF4"LBMDDSy)f'CʥQry|ŲHZ#F	eq{fD<LH#Ґ(*V|$u)cMKwhCU|'&qw~ы|H\ћeBQ*OПrHPD
]wH	
VR1D1q	
S.^ԖrHVwbjd/Cb?<p~(*}lBh*a
?qɵW0*!qz%S՛2o^\~sL tzs@&%7sg3eGBTgTB`9S͕͓[	.S| @]r
wQy/OhٖR%TXXsU>FTX&Ik	=nLhKQ&zDф6ț=&B'dgBOB2ĮجxZ-lVE39)Ͱ]."CS.$!>$*X]АCM#BGͪDG]M9!d(Tvѯ|Utnsefk(3rTzH"TGY$K$sDO6璪\48zZB|-C܆gB(l'
	e+2C&<hʮV3Ps9P( {z\|YPIK颕*5+ٜYf^
Ay#OS2+VC'KgUTO%nT^,5oߪԸq e6Sb;kGYT-1_5.r"2dsU::L}/+/Z¶lfd#ރJbN6it0ͤVc5ꑇ	Sm??
Yma*1?PNN9ٜ˓^Bń6+<-?$Efl65Flםq&N6>t͎I [㏗d[DS,ysU?^W| Ŕ
X^aLӪ~\&qUz%dǓ_^~|yǗ_^~|y|%^Ή%͍%ȋ%8#\	 `;=0YG%[<z"&q4NeRq,u:\|C|z@|8zDHTz\7)'Rũ,[Z8V$Τ
g jHK[Ӗ}f>v_Btkߐ6
aa#LWᘿ1|iYS=o}Sǔ[e(9 ?a>Ö[3l˰=vb؅y3</d1ж[],5yy	ǁv?[??	PK     A +  !  D   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMECKey.classSMo@}&vRZUh*|*BuU!:Zo"W~ G~1XEU9;f潙_a'^+##'BOd$dȵQ2C<>EVPb	Ssvp#ݕJ&C~'pC7y-%gKX
C}Y#0aؚ%"ki~2
:6,!
e?K8WH\AWDţ}a)Ub2]>\.C.{a-8~qD
t94--i{ĪhVqEB,d(d]dT.ڮ.c]ᮥu+.a8G
DuGb}}gi)uL\ZJ<ֺFNjTc2:m>s)NyKhKvV$Բ;pΞQaPew榳ZjZSPK     A   I  O   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMECPrivateKeySpec.classWS&M,(hq:
XibK)-M,6M/Mnn8nn>sݔ΁{omsj|͹[- I˨awTD31tKX#ݓTʹQ=qŴhr/>z	ZZԽ`B08vjfu0UҊ'1O25=>{iPA$HԬ$tSW-䢫	kp-=#&%Ƹu;QPsK%,+6dZKbדGTe\XPL;WJFV3ع!,hXu5i9Ct`L5|	KGԄ|Ł?WcJӌU*й26CFDk^5TbeپwhB3qeLBH+ubp^leay9A7}P.##7okr[dST)yg Uj$|)3M&5+)A%hNHaa6:p]2:e_![SQus sk&Np2v@#;A}#c/rJRnsdAz' A3&ET!;ՖUI8@U_ҏx#LE,5
YaEs 8CA~]4uzw<Ю0l,s7|TX'uK#gQYWnp7b\(E=B8*cqhVH`*gA/=sG2LPyKbXOqx_ԘjsR28ư6'F!{R;MS9!|XVL@@7Ÿfiip0)3 Yu2͛7)8	)#FFxǃ\C"'e<OQ(	(
noYŴ.GX6U]50)~C-<HxBg91.nȈ9qOQ^<Z)<-\GQLyVHrcN7(d{X}1L	_"'Ԛ)B_J,*tU|Ǘe|_?FƩ"g2?Wd|YbMO+ψfu0KS)qکՠbj=JL6.⊧fFle.Q:[	[>Pq"?#06pM*		W,!MJ0)%sH<ojŒsmr/[1Ю
h	հTE]@PDrN.u2y(SR¯1
'bg$]A#eFnRi+E1E>P5jDN_O(ώgɅ?/ʇHTMOcj.]s]j=GUڣѸlX*1?1t"!gg9>%R;!?~ڮU?)U¿OOJ%Iׁ.:>Ҫ-_/M_f&\D 
͓`[ބ4mra[me\fo`esV66lI*NK`n[3*|o]'{P-h߆M`dGNA a~_AQ#^%\eKe-&YH.bfUXob7ߛa	
߭^y]͵kL"xA?QQCZ,`p	}TKQyL91Cs%'0} \ဓ,4k5쓸k-S;ܜ$F2JhL 26;25'm$3#%s,!tN$hā,3xf@)'2gf(DDugؖ%P@XQ9@y	<DχшG(dR>?FO NSx
O4^3g)xyVX5^dnv9ǵ'\\]!~DMToVNT
>v~L}Ng6~J?=+?JEDYK񹖢y	~yzf_/ھBtg'@U0kcg>	/D2߉_߲OT3ZABa-D9to(젅TC;P*G"^eSv?J??PK     A sV  	  D   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMEntry.classVMoU=Ϟx;N$n6v@IcQDd<q&v53	d+ !H%JHJQLĭfsg<{ .a.:4֬mܰ:m52n
jre)gՑ3p@嘶n'p:roڎoZ^ OVM!7uno\]1ŧƹHQP/&/R|`ǔfV0:5Ff"A v;+QRI@m	yc'i%1!0;b4s?c,αT	> V,	\.Cw[Zt;·[ˎŮmm,Y+ѡl*LMjDΗ 䰚W9
~պ՛s}6*̄gO,?UFW-#ԷU~pvhc9[ڡrg;ﹲ7#zAaMFʟF)']H1<w-˼؃.|uZFӷq|[*)YFu
'(̛TI-B1NG_1:tCc{#t+	6嬲8簦!pL?ie$RlCZII72t	O$l
80ZJPC-XiScʌ:RAq|gr_Mhi	N| G (Ա9'8oὊz(۞Ž[Y5h9usO0w>؄	=l#'o1&)V+-㽄7#?Bh.M2`o_iD3xRߢ!C+j/y2H_܍7o%_H<lN9]{eR<SHMPK     A \Lh
  O  B   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMKey.classWkt\U<r'ӛfjIPH'ȣ<Ie@^7K2d2fnJSh@RlJQPA.9d25kM9wWy #
fK)ˈ[-Q3%-Y3%7[#FƒHKL.ڸu_h^[@
+Z1b$`K$R A*BSG.ƌ[TnuʩJG5jcY-=̌X/t̑[zƔ06fͬ8AG=9~y5G%y8Q4ͤ@Lb'dܱ61I?EǩH3	khDRBys@ӧt5h`Bv|2xzmzH:&\T`q&%cycY)98HҖNeX2z8W<!mTV+Mk]1SVVSᚻÝŐ
o

k5ю
q?FgSR1(0/.˰۩c=.1uB) AE:>ϗ  ׎Iޱ.Uح=b:zQ @Fr~&*rI5Ӣ2˝ɇA@W*
4i@R>f%-k2c+$(x,
ٳ/40c]*`B7GD:UH#0N%
&CEG8<3%ƙjZ#)ōz pks}Xrܚz<:nʊnsĲťcqlc1:d)aD/_4*7|ΠwF77j2owlzԢscqPU$CtwH,s-C0<qUn][ u nqK_[zq^ٕHFLџ4eMǩΠRJ9:	a>yj.vbuIIssўΌ=;n%gm]v	d6p mpI/YQ<^/9CCFhj6SD6FHEkx<WX
z2NeԀϨr_(Dqz^kx>8M؊Jc-%yJ5O	t`cZJ:efq3+}ڙ:-^KoSb0Uϱr;_'cL;F=W,r>>ܸVCWS_y,12o3`sKhxuk6XO:`,=	yڢudh:mQ1mZCl X*ѼXzȒJ,OX<;WҦm6q4H[[}UG=e;uDjKztnc7vZ+a7UX6#54tc.
}."ڌd2df蝩iKY~h@OU_NGQFSUP|x_>_{`}+׷B~>I9'_~j\F~jOuJjP#?8.N
\O@02yaw{;%#Їr\rO.-ߪIdB$6IT^#ɵ|6D<RE'P?	̏,HoKL	U,>C0P~cxoS:˖ՐՐ3i/-yY,y*L>(:6:Gsf
8=yΝy9]9o:I*4M3s0>7Mz/\~E@v^~v "}YvQ#\0"E<J YXyi(r+qb @d^K;.@1W ŃnYTI<UL!KEeMPd	YΥvnغ\/UY\Y*RgyjU=vU*	,
ͷ> +*Gf2%Ȧ\jͦOt7l~|d!5jVLsפ@_]>~GdCymD$+囨9h6܃ҿWP@o[6N; @s (C(.GsG(hNئ( *lh%,ϲD7ц6^ 	ş	@l.X	'8=`w	eWB[}Tz{/v	ešP~Ϻ9?@d#'u3^+}x,v ojއs6xMbCxyYoW>Itư\],R_=
G.!__S7SD!,y##a8Z/UZ+#J-+,uvN}Im`&qŋӻ7Ğ27US _Q.P(^q("Kb6n[TAQ'D
ZAE=s񞘧lA;+cl,b?+
?O	<^Pq8xKK`cr^kX.>M<Gc+:I2|zeO
^v&9ϗFFR"!M^vU̸n?@bS$Uo5dZr	¢-b)&eܼk~Uϴ
kZJ{-_N6pto
BLteUnyZV}{UONZկ^/dy1.{M,9PK     A _    F   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMKeySpec.classVsUݼ6M6Pi
"(I-}PI	ntKewS(kώ3Ua%gsn4]̇8ww=?w ~	A3ꜪR^975k6CQ2XoVB?+jrV5[)%>W,ݜ34]iid$Eب>յ"h hSf^
(r>Z6,1쎥k
e%zӍ&HhC;E^p]7?)c30/Xz\)܏ݭ2
vE(1I?k"gel:N-˦aOӆEJ$#Ks\L(){AõJǰ!D0FѰ9}"M|hBG`?Hpro68ȗ1t~+InyG%qmfӉ1Lg)rɲ͊f9nU;)Ԛju囧e$MEz_1dGv'_|cH0FhGk%p,!-pV930Ah8'"Ep32&pH96jbZ.<s.ʸ[:q\qhJq$Ɍm|e0ӧ*yMNd<_a"U]o֖U(EPH)
N%l8TA_SY4]	|z]Sg]%býYIva7J1~ 1ZNUZd75o떓ԀpdS
{<x;|` u'+ś,[Ȏ>E84W/hZFkO/cS-kIlyPn@oƛ>H|-36!4$\h~&J(Go)=^D,阹h|4`&,L9<PNP麠Uv%?|Hzf͂wN!}n$v\&눅Bs,UbJ^k=u=X7u51x%˱Aج ֮AaOdoםϪ3-zxv XaX`"Jc{N}^nuӉ=gB4*Ag޻
yș-Ф>Nއ2FWUXtEl9_3XDf'yfR5I!.]ьHч6!|Bψx_WE!oFhąZ

U]}4}ZnǑU<dIVzO>@%SJ[j@S3.W=na'w PK     A UD    I   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMPrivateKey.classTSU.ٰZii *ZEH$+nfw//>/8MnhMu'swιً?kCLD[W\'0@w[	/#ے4 n7[FiWڎf#SoNM7vj9*{*$ ڞ]-3ɚmE2GƜ7^N iI_gwPVڍ/p]ۦrqE$FpM`u rL&d*FfzfQ8Tד2XstC.}0ILx'hohzj;U1DY}>bh(2dndT,LwL׺'ɪCf@z:_n;	F[}_~٢[aKEk7,7I]~LzTu(DsӬE^ 0˲>7˂C a6j.כlUi6=yfȧ37_#F|sW`F$,rC&H+0Ù7
$]
Lf:H.VF%hdn۳|:/@"=m]j͏- DBW
[ ~ D2\IvְbJBǸӉ&2f-@--Y+JZNcҔ~	ӘJ<?d)vRKOЅ'yAnO7!XDcdHb)go/2XcX@ef32IfR|	:1Me"6k]+IveSlEewXvisL(N=T
',PK     A ޞAȌ  $  M   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMPrivateKeySpec.classVsUdM
6Ui4MQ~H[j-~\6Inn:_Ǳo:3:/̀nqxؽ=w.X"
ECaOS0
yEUXOW˺#X-r1Ii]CxĪXb!_hA-*Ac8s8e{UKABk؁62<C,9}I_%b±*pTݥᙆԼ4ϒFa(GY!br1*xAI]fhKXXf?հ~~
}rk;今~JRs*:|rE
dvĒ>%i}'aQ!ef5J"'B?p߇IRN udb^v])LM_cFe¦(0bBäy+뢘LEpS·	[nqU'z6)VqeW"8p(k]割EF1ApGyLXuyO?Eq*f4Z
^;{hzg!3>LCʁ:IO[>[+繓%.6҂Xr	Q(d<m9S;
A)T<ȝ:4fhǖ*gܲV٦$"5%
t^Jr!@.tdh͒lwR
/l.6*-/UMPn5ȭ*я:`QlUUe߉fc4k4J7O.=Զ]yc7RSQs~Vyy؞ K)њ\Λyzw'`-8혢vA=ݏLܙ$@snC4ooh_s7g]u<L&[-oZu9QjXƂkù-iϖٲِG	5y~i6ѷ0DIߩfensjDX-<x	8!XQ`כ}`+Wh]}m6Zlon`PYsH9:/t7Bu%)&yJuN`	Oo#HHH22Aם2]1]`9>Dl5bNN]=*/

uY壯ȸg6Q.DfwCJp(SFwL	|/zwԟ1ECJ<Fc1%;8pZ-=:QG5	G3SGM׭ѺDZ3ESN%	(.W1%@<1iecPqdPK     A &H<    E   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMRSAKey.classRn1=eISZ7JTC&PQHBݍI]	'+HY'Sygg93߾xC'/tϏB#|ãw2LsK=Rq I+8^)y>G^\%PdhV#a$q38M*P:oH3Z7[u(aŹ>h&
^2LbD/f[̰ٗmb'Z1W__gvU:x2,06"4]1Ld}tɰ:wZ!׎zaB<	~)T)w"P>-@n+whCX2y=3ؗdk-.^K/zQ}VgFydH%TAgjѹNYy.7m_din1IQ}el6mIuܰ7qkNQg,~<wlcK6Lw	;_#,Ce:5qSPK     A Y-  \  P   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMRSAPrivateKeySpec.classTkOG=Ǯl7B
)&401Ǝ#JֲM@5C}|鿩&-X*U@~T{ǮiUv-ܹ̽g<^ w7@PGDjEZUf÷j]GZmխ<i}ۗ=hngmFۨ_$C`HaLq>sp!S&w83WίeʷK\\pȮUa)_5,.qLYiڭ"!n/cQHJl6QqI`ھl|R@l `W
L
J{.}(uv+0
qvIVH3Wz̪3)''L&.@ЮT&+ cN`| .eUz10;L}fPMY%}Z4E)p>6fCSysMǮmqwݖ@$q8$kGC
*WEius=~(^saLkLsW&Y$JDZ907۞#&˂I:rz _PTѵF&ddj| g&/0\MKmLW(*]EdHn|{2Xl-P	*>Y!EdG>ٌ2ootk*TTb]l2^Ɵj#F:Z.uRn#̖"CӌGAF?]RAװ8DBdx
WQ%ӣ<B_#aXCD=?ԇBrz*
l\$4%hO
o*j}5Ct[\)QH)J`PУ䉄ƍM$DP19j?V|	PK     A aj    H   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMSecretKey.classR=oA}p> d5p!>M^8Y{ WhhA!QPQQ{gELwg߼y;7?n\";A/^"
6%}ϷI/-9",bPףZ	V<
yEA}=)O(jWDxoU*7X$lMýVfM?/	A)u=&,(1"2Ms@8ەũgKVzܑѰߖh4[n̚JUrJZ{=y+I'mZO3c#髷|BAݘGc-׏:W ^x2Xsy>W9&gǔz\
"1k,	7piReWn~}V)zk5Qv c[[ٸi{(~;fN\lr\M.ckmƲNxPK     A >~/  J  L   de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMSecretKeySpec.classU[OA֢E+-zz(PqI	4lǺE_|W|!Q|Gg
S}dgΙ3Ιo|*2a!!A;:aq`4܊pmTf[¨'ilʘ!c\fEX7lǖx>N4#8?ÛMr+)ni
ƞ5nS4(ҴW#ｲDEڮӉnvU˵WL]ГS)+atW5a ۃ5GӍD0sXV1R'n Ȼ=^R{&Kk)^(T=
'NY-5QAKSIlQ<Fp1PgP<BBAB3$Gr. KstTW(`,0CMnlG<WWK͹/g+ʧ6uz?Sht|WW\
2,o"]cO݊Пڭ:WU0fZc˒tk%fmh'Uni)ߟ@c)^$~d`[Т=x(
;0lk]+GnvpoABFښBiR
\:Pb(tqO
ndzִO%w0D6
Tư0MeefQi	ل{F*1^h6:Ƃ;Wj#,J{	O>f)f XpIĠQNi;}H#G~/PK     A            !   de/cardcontact/opencard/terminal/ PK     A ؖ6    ?   de/cardcontact/opencard/terminal/ReaderConfigurationModel.classU[wUN.6zP(-MpWH@
Rlh^!H&ufRkKd-
k|s-}Ǡ~gf{ }9̞}>珿;:":zhlaRʜ+3cZ;+NL,}b:\Tΰ97UސN.QLݑF^ڙ,Tl5b9/"@W`B=|ֵM1A	l͚#;1U\a8Y̝:FK@3VٖyM(hثc7+EBK4gE'VppP!qD Y#"u62m#OW+ŌyZ>m#Ԩ(]*%!ݏq$4LDLv"k놳H׊$-aUO8[صN	}b83:+llF?]
t\DZ`GSqz4-IcVYgZ踪=,7esẎqC+#_-57XjE?c묘zKV'ně94s2x,2@_amvϳ$$92-T)IVjp9lئw$}I0̶]#N'iGB	nME0aCHKD`9'۩wlE7co*^s*J y#2,hPc#M}&ʺ
q4с^U?:zVE^as@~V.Ӌ'^E(-2cSKhLn o:*NĒX\scFz2rUԛW9->9;	8sR.G'C<Tr:yepڌ}z=Z=t̓~èxP=`_CUXHpW
S:|M8sP9J>'ܾwOqrF?Vũ8.I~ɥ*N_(Tc87%"U̬|ϟʈ8&Y)F:8',S8Ӹė2O
YF5['Bd˗Lz
@۹Tn@%5j5kanc[k=ӡ־GQ
nZu_mKG*Kꕱx*:k.+x/7kZmtx%z_<~KUddI)-5S#ٚV*jtGuc5q8vbw_kㄓcGB`at^bLI
7{#ܿR;{>PK     A }{  $  7   de/cardcontact/opencard/terminal/TerminalSelector.classV[se~&HKZZm@
-Bj6Yۅ4)[ p
8gp+׎lz.Ev=oE1
j~jowdA/N%&o9G p,N"(]iBZC8mؾlֱ─ߞ-̬LǮl\B-4ԇрF2[\9'Y5rtk,7-Y!1mmćdFvR[(N9Ӯa+Íܴn
A
jxIEsBnOg
'f(FE"Ŗ]/k1
Y*5|17m{F>zp-Wұus;FI~7ʯF
l[#QRa+c_4eh"rzpTñ0^E@rjr%X (kp丒/YsUA ~p2'Yt:;:7D6i?;i
	Ŷ
뎙3<%gm	`)O5hLָ>YJ}eʹ:&s~8<-k~#7K[#l'qƴla
B(M6\m*>RWWį*7[
Z4<?[ݱF	I֜*ΜS͈lqB{#S~eڕ-<N33μ{\^u{ 
T^̛yV[cx(-9ZX'j9̖欜j'; |E؏|s ]'DoP5}4ɁZ@S㳑HiSǐ@/^w\\d0Q@,ЧV.)g<(aSw&ا7yTUEUe/*:bC| +vytTǣ(m!
Y!Z$8ޤ#~@'L7ҵدb]5]B1k{/UI󷄤4wcR~	]}'0RK9-TjVHzoq滼rɋN(KLߍo+h.sׇ+=aЋq-oЖ\mwE}Rs|(+u«5~Vn0Xem|VV1Jayj¤0tLz%5ȷu4!Tr]e.[*
?|!P$hb# #To pc
Tb
PrWU~w=ݳB e%z?=6[a(XfDgkf~
3'ATb'1*GR^K(7b7R(;so82R	ƻ0B܄1FSԱ+$	L	ӌq"[BU\ȿ(IPK     A            +   de/cardcontact/opencard/terminal/ctapi4ocf/ PK     A      B   de/cardcontact/opencard/terminal/ctapi4ocf/CTAPICardTerminal.classY	xTưyOH		<HBEF1B`$C0yf'Ե,nCǎmZ
2&im&9mKIlwF#$·ss.ۗC̈́^%A+	5dʪ@,4sx71QCx8[nb[؝y:|&a
lZ5H2a#vMV;<[4wl(T2b<{Ζ^3;wPBE&fc@	V"Pb\)>9-&9TmEu	̿N#%FvJP~4)tX%鏫X-@}@PG*T/%lJѴQ+Z+uufU p|!)k㈝Yu:n?mhJmIkЎ%:W0P/P>3p<
&SvfPJhb5at4hf=vzep[ { q:C`!wrvmVyNo`'BMdo]&Aћ;b
xCP~=x܁p՜$ȶ|v8aWG><n!+&ލT@ǓʸsNW!Xp[Z>1ȗBюpwZo"1#a"A[]Vo,m.8>vuuD>$gd^Z>AckH30X/H7p1	Bh5<lEf:92ޙ{/=daf/5Ǔi+c֐3cL!"E@O8x> ~dPZ	jZ>d8{%*v!@!vCe)OwߜFrZJ0m@R|h&ZvB]M;e	i<٫5I{iUsc:Nx"OƐle(ou4CG,)%O$ЍۙxFɨzQ{UV`ݭ֖H=!mlg9ϙ<01K $JET0zvt"v}h)2$SsD@
tig= KqĈݜgNʰ1J:^"cKn".KHˈj"0c<QMY+&^ta*Bue9:M]Eh7ڵc"0/eSl{,ݔW8u?ş1][ReseI)yğ|vwX܄3u%.JkC1ݶyӮFMXV%Cmr$8rjoֶcsw˭0+SdfUj%L`[$Nؙt'z&6hzG/ yNBb}lReX=|Ao:"RC4x#	VΠR5>Jüu$:~6"3tg;R##y"<cBFlҬ2 2VMiJ:#PgzdE^Hrv#V7ez	Fx0:$qEfJWwirHȍCѰmU`A" )Iz+16DמJE-1q%v'1iJXSݗ
lJVl"
L˻&:Q+)J%]4bgy8+oSdAe>\E9QAs;o,q8o9Ayd\rf`JVfM
ޘ&l 'LkrMQ1p<-zJ$JVZU$[U+ROf11/]|YG=&_s799ۜq9_32Ͳ?[6Rb,Q-ݨZ7p`eUA#8tmgevy,<y1s;^Ćkh8GEVQ&Բt/ZI1q/E9.ƕ=|}яF?_2ͲoX;dsVdOÛA%ry.N/'
@*LS4+GpWUіe[r촞Kx9Y(d=^^  5|5
@Ƭҿ_Z(s+6j3QMG8xE^qf=ʲ;e;W8߆ܻ::[Z(J/>@mҤ#l,`a]@/*>
EsQMZ(83(`sb+I:cq7@+"ϠgA,a|NḖv\A(8
zYSS4H	G ·SoM1l>@;Pr(ĉD~	vf
eWVӧa($F[Kq TO*xg`a&S([/a.a^掫C+2_a8
Lc5r@|S}g??B̛ɨHPq	` Q[NT}!FoSרw0[Ff㥒tZϼkBp;2wd+G(٬ 3UP@~sr.vCN3|<DuŨӌ+F ѩvtzJvtzNQ͕쑬dݯ]=Y3R󲾣ybݯࣵ
W[8YȽO^brŞK3FbB|)uDm~]3X:C	7YjqM$efGD'tßRQ4f]4~A?!Sb3q^E|k)z9+4)=Q^w"{ėDxU.:H;{op΋f|S>/|"d M{XL$ R*&̉	ad	
+Jr=D1Cd?Ux#J+T:o<Zo駑|K"Xsbǯ<>l׊t } y1v.S6KҬ}oª͘5D9tQPv,kBeXԊw^QݢD#&<(qItP%|e<	F֤&=%fY*
O)㺙Nq5,ER|2	6ߣIbHWGFQQs4nQt4%c͝҆|s-Ξ@ΦTBznΩPZ}ZKp>\)fqBP`)0J4/ïSi
ǅG25m#1$hKF؋YbaݸCDQ`6я6ч"]\.1}~Z6,TrW1[υd;yg<-Ƴ45
6O bQ WL
IwVD˲d feVK	_,w9ֻblvWU2&W`76j}P|}e`xM䷏|wA	Vʾ6ޭVW-mù[Cih^	*fQ+9苳&b:h
_Zyd<YV){X{[?wc{MOcfV;v
{\{X#x*=b&aMdRh9q }^,rYrs.e{s!}<=E'^¼^%>^X*]X%.BZԍi̎q䊊10B36"`
;2zSqNE
lam6a7CT.
rc/J!_X0*So@.AA*D&	PK     A ϝ  v  I   de/cardcontact/opencard/terminal/ctapi4ocf/CTAPICardTerminalFactory.classWkW~HkL8\qUC\ۀk\\i2bWѮ0$޴ۦ[BsAOO}fwBH6v?jvwywf.TiZd39*@vNTZ.BZmVVI#';26L<Ic\Υm'"P;'ͯxe>tA@]N.ZKrdٌhUa2S4kIgC\B ,ñr3Qã:1vmްG6fqQv]DsS2 $-1N<t<1yvl`
MJ
ݙǬov1!@GSIo
{ޢ'\ڜЦDkR(S5w`ۿY'ma<'ttIL)M?2{u	ӊC2fjЍ
:N}a)m]#B,<k8*G+
2п$MGMS ~@uѱѡ01aXǈb?D){*̫Ht|㜞|֫ȖQ}R<:TLmcNFWMe}ƂLXزtl(NП,#D[:.*ViJpsUƾgu$AR1MW*WF	a3*.jJǢY#Ҡ+3}jrT%wQ2&o9Od7:783'ua\N!=֍~\%[m*A2kѨx0XVE,Q1jvV;r7MZIE7֏:+Y5-'`ZN
8t
h@^BcV36H~qV&=Eh8ifTҝGDh-c\nÕ}6Xi\t!b'@)R<huq_䉾+x
viz=a#;HϙIH} q",%# .
9bt!Y)S^@2'
Gzx|Z:PI%=gY)6ҙRv?f	+I hbtR=Q?
c?s
4m.Yҏ%z_0TFMC޽ʷLT(c~yUeLHGH"cض5d(T
8xwSg̛P<^G!텧dm^8]u[l'v;O|>OW3Nns}♢Y>~u\	*?Bk]MWǀՔqy|wpxH'pl	Ƒ@y^C*=;Eg	>7GF?1<kqLr[
j}_ 1ȯW?4#[CИJw.AW_h1޳cS>{[x?ߊx_94Ǟ37|m*"͂n
'pT6D.MlxqUh3]H']kM\#B#iSohV-` UDKiO~^!R[^.zPwas4Z\CH/ayk%uV~bKm|/X~<U)̅p3&wZQ<Whrׄ;!ঌ5ohL߿U2\̅Zw-u
9[Gm5dnBomk_)g}Ha~].7GU=
FGJ^ruuT\z[)|5z~D;@l̖I3^ l@؊OGCfU>?/]

?PK     A Zz  o
  N   de/cardcontact/opencard/terminal/ctapi4ocf/CTAPIWithKeyboardCardTerminal.classVsW]kc;qQȎATN?,Ŏ(qU7Cjem,S>
BKB
Myb``lfOKxw$'Ag=;޿ WQt BDHDL[4
/L[~'=ӭZ^I^8F)ɏfl{Lt"wI_ѓ^Lxe/~8Ь'㚷8ժnΝ|*
QGJFngzr'-wzѧb]oo|xn&cZ4=8\-@ 1'ְGp?gڋ^9|D>ڹ>9a]{jz~qP`St
Q*1$xƙ$eRo-TixCpܪ+$cpHffSRdr>OI/J2qJbh>84Yzpj
-nJ<B73ԼgUFҙ!vClq<!Yc'r[Χ}2ΰY!;%LbjxRB"Tsj͓i8Ԕjxf]jNi8O	u)m"A^SfۭO[^(8s;2y`SWgiyblxFųWg,'ubLpz>eV*vnqqyìycqpJ `wW%MdTmE;02lm65af	4uJE}k,96%`9۔-l(yP!/zeVw-TŘ<֫J<Q^hX[b|f:' [~i;RGɴj/9<GɴQZѡ[rndX`
Gkm[Cb!45Y:^pOSf@rŤ]3DT\mRū;oqe׹-:,9aɏmtXxukgLa\8v!?7>=15}&>;>f٩Σ#GŎ~rԲW%s~OM!{4$V:+,-׶zܦg/l!>
y^XJjYTxGu?x\Uۋ0qJw@"_u\ C1e
wMW7rGP'uėeI2JyRMA*Ф>CJgI+*9|?Ϻql\/!RbJO|=\GY8)Mv`dN"ַocG,rjMi|)	-\@,q|n>%O1%"qM±_h/^i)tė)Tpqg3}htx.y2RΘ7љz
0ci.YCL{[2>2h+|^7G 0k8ryIT	 k7"OE%bX{y5"$@^fIe῀/"BKe	R_W$hH}/HАN5q>@~H }h[ҷb0=·_Y?(ڻq+<pq^*T|gQVq\Ł.3*zb`C%! Ҷe4;[pk5L{?ivOsPK     A            )   de/cardcontact/opencard/terminal/jcopsim/ PK     A zBCN  /)  B   de/cardcontact/opencard/terminal/jcopsim/JCOPSimCardTerminal.classY|TՙwwGLBB5<4/ 4L"aLf̄Wբ-mnn+/mݾ>[m9d>r=}qΝ<
j. <
d4FSi6kHSaxē:{""H+'{W_LIa	 EĬZ%6Jf#lm^{LvScx2^++(e%lmZM	`*exjiQ_KxY~M<U0{b-ɁY<!M`W`vl+	^-MzEhZ'՗yW_|ө\",%S1>K[74@?*DZp8^m]4Z\)g3ALm[UXmʋqFw߮\cDbD*Ku`
L4\EV	/@6JP/X5tBVֶvEeu(7J!%-ceq,Y/:~4cڶV6A0b"[7-ve@F9Az1pt!LMxotPEe G*%oUFo`E"BIfLOȏУdT
DE&kaV, ^T6}՞V=ڇ>Aqs:J(uE؃&#c	<"xS#x=Ɏtf42AOaG؏NDk#v"ಜu,e?&?עlGl$mxpJw0X3V2جhhn-]L9koL	K[p?ZɤH:9=ػcZgu8S-5V֏p
^)s!xeO5û}SgJh*ZDm0(`:IdAvch!_)`Ir~.nQ* Cc
0A<<u(
ى9TjL2[h <r*e?Çn=CH (0NTB1TFn,'T`cb1괘vD9x!77m)qa >'ԗCpӜ`yH*=2Σ*W=/i|ħ>;
Gib&$,k@դM#ϰ̏,jQ҃yx.*u8$!9^4 /ѱ$IƔf4EKfe7'nƼkop/7'j7Zx`
R۟g-5 ѷ;1S^~ ?Զi3m)?V4iB.'
V>2Һvg}`Aw.3l/a2>MY ~Tj_$P	_7$o޿UYb|-KPQFcj0sTB	+ٛ)aɫL3̲0e/,*e8rSyܟu9ٕ^M+&|*͔>IW-.,mc"¢Fy}pOWG=ᖶ-lq&Hbrӎ
=͍[{_ղw[=;:{;\*E}PTW<_Mv[Ԍo殮
nlkioii_ߡ>-픘0X5ƍUklP53t52=hm8\߲aKg}usLMys
*~kn&jDs0ZӳYN{hsgGEQ*h_^ǉ~V{F^lxxjev hk$W3ř׵_D;2.J`~`n[T}{ 殛|)`L*g\*gj.ao[d9xF-LV2kߞ2?b:aMc/%cUr	Ӛjwg"F(sW
uueꪗc0p~R?W2ť3V+SQj&RZea~mAN.+Wz*Z&TmD X(2T
PBtJ(=1rEcڤSr oQfNe)T6EҮj \ݴ+[M8R騵>9c Z@S6xϦ#mV/mRvyyeRɺD4ڋtdUҤ8ED(YU~8^O)iKs!&=HOѾڐ*',vc$:'Hv)
rY'l=L~Sba8`$
ēR{-'ڷ|oaw^H'Q;8p?jcv.dw'e0ZizXS0$UMg`){1Jb2m$Z1SFh,	`qdS
詤ҥ4җAҗt,ҳ9(I/*Jҷ$]U@+~K.ӆEh[J=
7m߳0[""Wa%S&z8&%5' UrfUɴ#1YK#eU㘣걠*:eOcyUЫ>A-u
<AIP?L]wQw-OzF@;>.u捶LKnXVU<УUjzt
mѣk9Jjgs-Z8VHqFuՓ
0:{8m+>ŉutf{:R<OA{,n.]EţԸNwxKxR_oH+K+.V%7yď4׀ZB|mpuq_RJ1Ѽ6(=j7y-a+ulS0n8-
^p3nQskCXK>Cl!yk*,IQW6ך*%t0\3i_]ݧp߶vr9wh{ҿ{bRovU26rL`?+\r27
|%*WqU)番en+ж*R'!Tk;mCC(kU{mcD[
#{?2Ge a6c ~ɕe!{
x
[Cc;lE3~qးuR Q1
1?y)y2c_2ս*3)\L'd̖:#6t|Rh*
*҇%rD,c4H#qף&De=G?:"ȑXGnKs9xM*H'f[1UZrgF;*+Q{MDM)9)7UT6xQX>Z(Zdj!#S\
?sT /btfb<8IŻ'H5۫)ר[)UؘP{r^CqNѨh8wwa*6ܑn@4M͘MWΧjz@܀[$F&7ن;e;nBBHc
w;T͐MN<v'ǥKG
xfyfOoՄOIP>z?0dW;'n6:U#Vb5}%.tT@h8MK?H!*勒}v?V!F\'iSf
QFFQ3ͪ*RGfM'-"om ѹ
8r1IzL|nujJck5dҶ2RBe&Q MM@̭ 67'^ry?J+By/BGM0nfy=ACȣ[n$,Մ
f*/l*h}*gHTG5HEm㲃ukKτ<1/%YX ;Co9ٚt
SszNIANe,><`y̠xơwrX!3\0}:؃V#cb	K	lz"O'/'Ul(O~o_QsL'<Ӫa'1MNӗf 峨a<C?fyI?_@||7ǯ0q|>kY2۬q3](?{|ߐjwq|5GŌJg~>XУNArNAod"\zy:Ea}Px;cSk4Ub2*Oc>JmBer+ŃQAkŬG0;#~n/(ۋ}ʼ^=c]=X-b9k*o)c:;I#锷"sF/0E~Śk"-A~
/{Xᰜ4
VÍcș}uFK0/tLz9|qKIu^k SG'es^ː㹜\
5<QaN/Cs*_0ےfg=1~2̡}/PmFMм&3"EF;>l7.E'vg]+#aL\z0i0Ӂ1A%0b1,2ʰ֘
0.c.F8h,ac!F56jc)^4j
cL3Vtc6VjYn\#kղX+7:KQ/&X/䨱Q>`GVyh3fљ/tj.X8r#'X;`o傅i	,8(s&f6+\h[P'/`t0bNj>_ܼLâ{7@0rw)}l:}^^L*=%=#wJߣ[M[3_?67{QgPK     A xR  	  I   de/cardcontact/opencard/terminal/jcopsim/JCOPSimCardTerminalFactory.classV][E~|l|Қ@ *&?:Lf'N@.F/zuo}Glq̙=gϟ|-iG@sbb1%6mSfEc!Z-ipkSJCa w
7TBJ8%Vbːe,%SK9ŕCŐ8wd&_LipF9r.=\үe Tw"6tzv1E3cũت35qBVΆя5D
^}A>)pS!2\Y&#*QЏj,t[*}ۖ61]pW:C1TV(
i:V\ƐmbfjQ4F08\EU/vU5sLQ'aB!\*+\Co4vv7#x%-R5Smқ(iך	yzJM9bd8wdL[,TJyE3rI4l=EJ\$ԅRsЩfݾL_j7qL
ymSZY:tYB)QWٽ$3KZNVC̙ɘRCRQjSQB
Y
Վ:)j&JQYGka|u
c0r,imQWv23Q7%ܑەㅍ+욘o4阧!Rܲr^Em[8)l}pBT5<`|)1m?="wit'҂[ݹML[fiGOx,ݣܣnmkșw|?A3w?ݻ~OV<Ccŵo<va:=Czܗ$x 9`do[An Sꮾj4gi1BHwуHQ+f汁O< !?aU;.a~IH6TUG<җoig4m7#Mz%h1K=r dk`MnP?`u>'V瓩;K9Gx$(UL^0|/1'PK     A            0   de/cardcontact/opencard/terminal/remoteterminal/ PK     A :t&  <  F   de/cardcontact/opencard/terminal/remoteterminal/RemoteTerminal$1.class[OA۶uRP.^ ]F!

 -vvB;dv[_g51>xf9;;ssy$42F
;2HPǅ@F"{'m%#ɥx#OEȰU*7.GEYM\ɰ/H8XOc0:ｈΑ
뜚GiOzvI;N˰yYKV41C*W,3,:#nΐkݪRRLaUNU{n=׻n3$ڽC#KXWڣ
Ɇp|;<cDR~G<|G5OuYիr5)t
.Vrʣ%hSY*"4+DF%:膱>GE,]&$~;~'b*V3\ 0Y\b}<3I!጖gTbo
h6H^<`k*Q lz	<<OO!PK     A 	X_`  *  D   de/cardcontact/opencard/terminal/remoteterminal/RemoteTerminal.classY	x[Օ-Y؉ΪlŉI!81qp6
8!YzȒ@١-P]64e:lY:nӖ.ЙδLL[Lh?=ɲ|
<w߽ss \$Q"a$Rd>B(C r;f㍱tnt-/HΥKwGFT_cMOg~[9,L
`)*4n7X:DcNcYc|q^VoS);d*0MTߖt2?ӷgY85d4[Z֕Ӄ*`Nea6P@t-kmbpEs,,@-Q
O g tDRlN9;&Y[A;S?|um.,4`1
,At%6F	Ќ;,\oT.ٽy(L6?[i'K';cD1,\	R2gg	{:טK^݌5W1j[h
Y=6:W&pΉq
\Xea5&>AxhZ`4L\c} m6

-Zw J9	-.7*6&
X;,t
ZAk`>cwЅ+52mvj>sugw#<p-vwD.Ѭ7#h8
Y?fgD:rS!Dѫ[!rƞ 7M_j9cs]Mk;5'ڬp4ҽTˊisnR󆷐@Pq)ȃT{Wp*턯,++t%a-<Y&$.qĻ]M8Fco6=Ύsp#+C\X`_Jp͚2mL 
hCv0\!܂-܁;>hr>q%WSfz``0 7Ql6-hB)n
.A͖d4Py0%RtuyZWct >$hok(Tx,i◄
s`lO2e-|Xз/Mi?h09L#c՞9Տc|xפQ:鬆P6o'x§N6{Nq`<3$,|N*OZ=ēi-TNgܞ!c'%Rah*e'dXw9gx\5a#xxA'_ufw hx&gy/sNw7/+`QDbܶc֋!|eV=MBJѦojᯋޚKKƴ|·zZ#cNdIA|#3q)]|/wJ-Sǒ po49ho
 e e(>akhy8<Nz<];cnwb3 E0i	n~¿?g'ƮKK1Shi_S?I?gScʊtNǺu]gZx5[q+3nXRݾ7KۡjC[td܀
Zގfuo ONHK[k;%Xh6nIK-vwhSi8GՆ3a_D>ݦ,kI2%z ՚i|oqYK*,T4[ߎ
.Y9}?ْ)'r㼗J
4Kk8筕2
>wx5PTٺ9]u292˒i9M32e̳$,cȶ,`'V>J-.J{_5-րODـzəxSwnķF6MΓnsnbKJrr>3cƁDNku|#l\GxbP	[FUXati]r%k}	|S %zKe%+H6mjkLwJpZm)YcIOͱؔv^v)I\N{pn7gE%XN:v9!ʒIڦTkI鬣c2X;;'Iw&RQg0K9mK_K:NS48cg4͇X4-M7sKS*?=:Wr,I԰P 7>=g=@(9>ɋKBLϦSKm=T*^*8Gm-4vH{J֙&نu2MʬخA}0^m"Եו6׏?֥vƩL1Zpc;\ptg
Iz
i:eo@hWvRn$IF?
ڬ&G3q=9}6!ǝgtgќۧ+6.sL@ELEC%=q~u155m4y,dM<ln5鴓ch;x.(-Y>&QGg}Ϯ~;4N%X
<,	ʃOOzt	n&Gr:1
꧔GC1x@iDjoz~.˞7q=$3#vL1Mv&!d1kB@c ojM\w2PTR=	3C?fvS7ySf>o)zފotLLc~gs5
Xf}'|.~p/`{dQTCE*#1fDJa^FG^aws3Kҧlx+K
)6
`>-ZG=6`js]D7m\5õRW-۹qGQ8ՌDh|dOG}Gؔ7lt[}O>ťڃ
hl`^G6Y28ZB.E<5{9;EKD{ۈ,BSyPuQS¬d\CF.SYI(21EDbð_*B!=SD<%n3266|G/Ct#IU.mt^jx^i~] 616zq"шg|qk'>HR}8{q؀w!Bw%a.K =$=\S3Оʺh
M*	p-$[;ršqL}ГO%<UF勸K|0a|B`mmL/% G!%|	Orݳ̼c\si~c^
0b7aSp1·8@zđTޡxw!0<I:xyW<<>y|BpW2n"`OFV
]F}5>NVF$?e$~j_D_B5L1:yD7ݷHFa\~=U
nx'Ε>˥	xQn
<֣obs G	P!</	/d~KI%~mOd)x7dg#^KJ+E"92RAןb:~h9_VEJ5qM+FI2'ixnaP̒Qzf^۹?7ɂ?g0=m{ zȒ%Ku|99q<=')_Awb E'O(X5%輏K;+4NdyJBRQT*T,poA6OY*yF¿)NRIP)1Cf)9kt1YdG󈂶G0v?Cud!˚^6MYmՄ^r=ʵLȉdqwy.L0d>'8(2+#x4X	[ sWc螂;]+!S~(3̌,(-׻a	(h,CjmoH&rÐL=/JuҩvuJ?'ͬ?9uv߿s>?yJih*T'5*i
6OڦNtyNIVu0$GC0f2BаԿjh
Z.yYXgWq4jm.=>c:X{k)V^^W,M[w!` 9Mgkco@򗱕_~={&{9 ͤd^a|Gx?e!i8Y7TSEr9K9T'eCUJ\6-7^#<FmJ>y#n
G0aY{xMr3y+ui)/e&h~BnX[yWƻ	R}swloiHhc%Crc~J?y[Z
P}l"B+M:aܩG0eydI[<Ocy?jn=CX*2k~l)y1H/\SKx0
@q]8?o6Fi;_CLP4j3,2ǲ$tsEAOQS{TMh^]8#JdX]ǈɐvt"
AxfP^e='2U!EJF+uרG8!s\0	SJʣjXojP>)"?PK     A            -   de/cardcontact/opencard/terminal/smartcardio/ PK     A phr    @   de/cardcontact/opencard/terminal/smartcardio/PCSCIOControl.classWx\uז,Yײl!aad,?%,n0WWZ%uB P> !JL$mHCJ>%y6I	iMsz~_-=333gf^3 loppk~XoCFTMDm
\ukKC
9E氞	SɔfHǣ	=֜iSގ}M'c
T37z8.qi(>G"5K6Lus&aJi&cyB
.#1ltZmjiО}ѰVG9Z
-58Mi4Er_E#M&HTdFscA#md2VCx%ϡT5jh*VYKopG<3JD	lѰA*KfVK5n4l9%1kX-m.7XH;4KCy41r=CCYߩ!Xȼ]v#-〬u U\`y6ɴq>:vdHM.mGzU\a/
c;,H1=QPYו^~W>\ ;r`T(h,6AJp"l$e4ާ`a\5"aݼ:j1)Ν=F>o3]d{PCr0;
KΖ {B]hmHŐ1~.5&70CUOGMxˡHHjHVO񸞈Ij}&#'@H`ӞQ
*ffRbB!mn#zC9MDC?qPNf
Kc&D8C>[T3'2񨙥Z37r],hwa~܎CÝ+e134W	bͮdb3g&BksU|Lyw/u	0Y	0ѷo`pos s>檙dN3\^oN;*9i&ر/xwGGPjTk91;$K	c&5]ɰQYwns$?u63s01FAgO34lX!)8hrF''Z9ks^ű֙sx)o ȶ.Tvg)=zGd"٬IL2#E</N{%v^Bs<ȩ̮n	;`+Q\aJjB&<Eψ7ѡ#dig4m]Mڦn:pi	#<fLrRޡ=3M.*fn_Mط@^bdx'z*2.H$4lWwꦮ@Hd`23ӵhfWjaN;ٕΤTȵ_o`y
	G!tc&&#2sL{
GpF=Fc.9}q(i^BE2qS˹8`,Z艄q),'xxF
bD\cQ12DMpT{0=X:ltF2+p['f6m#HƇy6jh64k3cT2mu>i<N'ӵaɔS=KPkyO+ghprp}1d>KОnBǌʮdrt,UcߑQס!:Xl!(3#zOSU
sSݘn&M~1>g9XTNiFd#YEvRG.wJGqd#y#78Ցő;ݑAK.=x߇ IZXI(eOAsnBY}ٮ)TԫS/M! KSXV
YZU_V1:P:]/Fi]~:%kZ:,e~NݨB?zbCha\،c[.:
cGq Se{|I8ѫa|Ja{=m߁ji(ƞ&j(ﳌ6ekj(ݒg,hx'qr.kmF
^j|>W/t8a?~,]YI&wMu\|e7uh{[_2PkDaXE.U`=Z,AQDrXX|(s`U:X^*+@E9X
ckyjKc!V]c]J"X'cA"X+
c!Vo5Ta|~b]].Ր>b]W:Yk]>VXFc%V/
c]&VVLaX ֍E69Xjn+z0|uO/ڞu?>Y:U#3:^+`=8XAQ(yy'vYvQ:4@.!ZR}''
k k	wK}+OSi:[VoUԾ7ܾEY߀o@Qʤv	TU%u~9(5ʍs)(Qn~IQ6i45L#v4Mi`I,l> {yoMmr{yǹy<ɻS;yM+gpr(vK!S~O+?Oyx\T~)&^Rkʯ,Z<ųxܓl-98MHom[^Y~kԿBT
9N׫§"Ue/Oق/;__.q|
Ǘ_9lp|)}\JW'xo=sxPTbRTO8)U/|K,+b#VYoX&}xf|Β>ϟ9j{yWY2N-?Ϧb{jGpz*=cWcgCCjWjWWqVz|Jl6nY6SӕG=sOه
q+H%pV&THlbq9jhh;"h]g#*!
bE"$q*y%e!u
_N_/[
E
	Y[N9.C-_sa$R@(BEyk߆p3|د[ nҍqGI;vO㶍*O=,.BR]ͦBA0R1։C(FMİ[qHYL&Wq'{uR>,e
\'P=dksP+ U7
cv:z:>	x<!q|%1/*P.Y86IelMYƀOɀ=fawLŪգtӸiMmj@uWz-;c}7[}VfT鴒@4|z@EaT[Q-nrQw0e.#c_|'pqqqx wOn,b__KxmOM|l~ѺXzT~ly	GۃO嗭Q+~JʋF#Abeŀߊچ99w-o`?)o+e
_os+~PK     A ՎF    E   de/cardcontact/opencard/terminal/smartcardio/SmartCardIOFactory.classX	xTdfd P	hQh!	N@RK̄71`[V[*Z%jkmjmnWKEf2I&$_w=s{.=8r8UC|-k޶CehX!SZ֚rxUAX}A-
Ƣ4|.=*}G/ѩ
9r\qCZw̍&;#`&DS2$TLGf.]?l}̤Vy1')sFi&n6UEsvD1^Yc/"ǋy(V0_,eId<lBXw8ǉazaSm1X$T55o#QQ*ѐiu@@yQ
T%=#B;hhe?:IjpZi*R]۵d)tgxjrYUZfO:(P̛`3dٺ}I#9WըSp5X+0ug"L4Z\!`SC=Sq>ch{H&XOˢ̸̔(h8) pZ)-^\Vp!me,N}Q" /xd6?Ɏ?3ge^\Kh*!(P+eJYD$+!*PZꟄR@g'wXTRVM#YX×7jeiTA'1"I]`qظfA|Sх]'uj;m6$;p$HR6TGL!CARE7.%[6d2/% |-!\2$4ꉄ֡@ڃe\*aW#O
L;JMSq|fX$m0%;tFO|ZU띱n}U$A*M*6Jkp->ޣt 7^
@Q.甎UI^^%ViěU|0GQY4lF`_vwS2^aUHDN+K^={HpJ>V|wUT|_
}W0[r P𠊇0rt\b*E"Z"C`1'TPHtu^i#xTc*#l;y	`ѥer9(xR|(icB|Ql7XȦA-Ҫݞt*٥`$JoxF0k>*N۲'='
	8d^<сȐ)J
Y.~	Lʪr)1oT'
[x;nKFٸl"VP۔ cQ2(xqhCڸ"tՃgLXop)0=uɼfwRCKIDeV{Ll7@#86`'xtr[Cx#E%A}mXV-`Ѻuc{,ufM[Hx&/Qud$TűmUTS,xˋx[;MOGc;u;7){3I^hYTEC=Qv&߲ɞey;=[Exuq
2&eD/f-|̑,M<|Rn~ogs]> s2`X'8R6S;0Tv3-|w=Kx

ϖLyQ%|)3Q؇`8en2Ke,/(Cj26U
A8JU:p5
BvA6
bk懠8/!6Ǟ^5"iݳ9>T>ť5;MXZ0m"²3a/=йr;	;bps)5؏$;nM.3!nagԟўkùv'#vP9Գ~ΰ%<%_)ȝ1kQb
]=%E5q\1A:)1p9gxp>
ƄY$jUf*EmWS29>p
}̾"'\gߕzq8Qra-ۊB^ŷk0
d\u{F&Ɍ͔r)y+f܁
F[q:ԺWdAQ	7f01X܄z&5XwXtRb+wTЭo#8YV܏IQ~DgeM2|L;uK LXjbXy=}>nz>V0f `.Ta6KsaE)C{i	d9wM?Pj*h&n61r(/r
r$Sʶ<\\i{UaQmSP)d" 8lRW?Ǟ+tafҿ⣐G7&I V ,Ia*c]h'
V3-,̔dKy㽋jEzȘ2Cd#R!`2@4`I3{99%t9<V=ϑsGXLwxͤoouGk(a6J׸KݒouH6Jmp}XTiscak1\2jdB^xؽA\$-E6:FHKTjl梞VjyD7% 1McޛƼ|H+pbiN>03>!4`2t~Y9+)VϚo+W/7X1!P_PK     A ~?  ~/  F   de/cardcontact/opencard/terminal/smartcardio/SmartCardIOTerminal.classZ	`T>'7^ L`Ȱ@I؂	 `(K223H\[-VPؖuHݬvjֶZ֦߹d-{|}\Atir}@?5JF5Jдzar,
%Lk|Һx4nJKQ}9)K#NHg(`ʰH8KSf,qi
FJYL^kM>2Qu
qN#()covIf55.ʣ|F40iMxS /,#iEB!4; .fc]ureN^}jpi\_θ0,uBS2q& 3MTHEԅ"qb+6_tp9'23Qû"䋵xe~NsAX+8iZnƺՆʘ2_Pr*hS="xЀemׂt'vWRtf"h`V*1kUm;>v'-fϚ=I+-.]rYJ>͞ՀJG*@3@9NZ#\ETGJX<ډx[iaQ͇^!C봉.&{pB\()c:5
fP$f>[t`duQ#f&"}:m>Jg@'@0
궹^#CF¢JIFkdZu
SixT}i)\S>G(lDe!DͥPӼ+KkTTЈl7jo0F;CNk:c[{ Y^&yN#)engqX25NF
0G`L¢>H=$P
	*;J(E.>-UV~POՍ2<M_XL 57~FUd'd$i&	A>Kw#S"4	X?|={!<`Hb>s= |)4uiN_/&˒JKQ_D)q%˂&?dt2bA?jnăLiN	:6zx᥅m@C7bm4:ӄGLe	71UNߐ%h7HNoҷ4NߡZd	C,dmղt^Pu!%nzZZ#5#f~4,Z[	75Ch2>C?}?c
i%t_E/
a9g4=ࢗWZoҗZ"mvSUF{C_X>A?҆jY<@ZVnz]?ȓI"[ģJdBINn~7IAXm"c^?lH"79D]Lcbp(_/TA Mhj,nY'\*GBnrAm(f01W١&,X<{|qM
F:x8SbꪪZtq6 <2l"¹qΣd&CzK1vFH u?<ýryYx01kh+5
O`uēFaR0BzX=Ui|>Z_Ǻ5\%	I@)`c<C,V#Rgмl\i<U/йLT؁5~\p0)mŐBE%_LPmjcH,BȑVPl+#ǥ:WJpbLS',t2lY#R]ވF >lVa5WަH{80STy%h5V1""ϖr1ӼMN/2q	CڳVЈ:y-nils56xP)L2͂ݍ:K-;Lʔ/չ7#%HFBXNa?f|orୠ(hҍbmt 75phUb+HW#6<EA_@gMR!N#A s[%L%.rL?^{#w$SlGȲg{; D-Z"Zh|-48<dp& So?8`0-a}Ѡ[xKЬT6԰5:^ksH>@.c~I&߿)w`26b\"o-=rBlZv2=p	nٲtPI["1eTCmMsVaf+A{%C1->S?AИ
rx9e(btFccp.">h!uđ+7WEbAOP6쭁/O6HFacg)
Hw"v"u16c}2,OGM 9&kdnt.ǆI?
%Rʤ[Paa;*gJf,AD10´å>TBNzaqE@4~jC4Qk%&}NâLcQNN]uX  !TF"(B[obN)HL	y/O|9}҂%7eE3v9}/XWLEgh@ lC37vx-r\uǀz
o<!J5):jy۞rHbj?)-xJGcy4:zEM8Y6L,BXw-^EcJ%vJޤag࿹~WtқpEB+X&^V!#vv~ӧЈ~^hBuW×QE
JlȧTXh Q,YS&bA;Q3pvHݧTu}ٖޅ7Frdccg>F#{4[A'<h)kKдАue546dffeg7GչxPO7)S}cx2zh5rjeb42q|afo&V.xe_b:@cJs$hbE~%W*)Pe
T*++MJZ	IZp$2l$a@fP%i
]	nD"JMu9_w'x&+sm[[ z W7-NFAACqqf.{x
[B܉5KxN
̡ՀP=<̷]Y:Yd54fZT5UzX͖L1}O7v{`^8*O,f2WiГǬO&Xf925KH١j[Si#vd=N7Ô}4A7OBfz7{ R{qqNt&q?VG1ԅ0a^sȔa0k:|+iV`3յhp&/8
`b6,50]&Ow) >q9^;]|
.|+ϕێӡ_n2h;<=Ak]T[D$<N%3H<:M^|<=8qzlc<O7x0ϏKG0B
Q==iv5/i|F?	(?45z=4^@K	/.zE9	ZfCA,PSFnZ6{Sܛr^Un߫▉7!3]mjVhj {$jtkF4zTrrwW֙E>?ɞ-R
0Ն{1B7)A\E ^3T^yxAr?H}r7+B7w0R
YiUDYl-	@SnFcAgt0EX%%'~3>ٱx|IܑԳ7bWKNpJ
]yr];ރur{;?[P u(ic?c*PW<9XG`'q)tΦ<*M+y4<|GQZ@Z|䐉|/NRU%I
pG+M/+U`ɮ<8lЃ?5_.0LpeAճEx:^--cG[{ɎoE !L]4=Jcf%g%!i8XO$xp2)4ROs17jy&RRR.GT=YC(?kձBrڤ#'[%
ݨ4eXzH%W$َIߩKr߫U+IP=]FtHmuѴ޵Ag( ,ܦ<cf9R|FfS	c7-]54DGt4Z+
US+(W"hYr
Zc-
/z^O\G2~{RdTJG`U<&TJGyZϦېr,64	f
JfTi}RDVHfP6TÌ߭H5`qIH'8K%KTZV\B1(bWOI=hV*<,-%*%q<
P]:&0b,osdތ}ޛA􋢁(n"
nE"X	"ENU܁I,Dpq

5R'<{жmT%ܭWqǞu=jr`Cb+O[_qvYm*OV#~e~[̐ԩ a;#L"4Ƣ/3Nh&}e-ߑ)-fsɾ2
Zg`8</,9Hr	.W/(7Z3U#E  ԲDr6N!6dA\m")i1f`aYFcvp4,nE|=佴Q 
.ЏnA	!2W0	~4E}`ʇaQSp|ReS)sO7loE}fg;]Դet-?'L&[xSզhq6(CHx:L/R]o\h&-i	TnCnň}1v?%5S D_Ǟsk<vķܲ+cw8ާ;zSR9IKGSYYi{Y993,: ԅf TfW
O+К՚Nb$$Di|!ˏL'r⟁Ffx}n_ /2}E_W-S=ǿ:Noro=<
;BaIK)q|FFk tO2':,k0hdB":a[%'x'n^S¤iCAnꡐi+?LF#Oz= T2Y=ȪڀjvFoڭZ1ڶW[8#PMIÇ*sO~4q#[?dh-,z@:TD
,pEtH_!L]_P%u}Y]A]_W7MuCM><PK     A               de/cardcontact/opencard/utils/ PK     A hG(  @  +   de/cardcontact/opencard/utils/CapFile.classVs=ϒvײ%L m
JHpEH%YEd,aX5˻"MҦ&i6-Iڦb et~N@@'	=o%RL4ﾽ= >whG7 	)ֱHvYp=%OCC
 [4#Z,ؖc]1-GN\$Hl
cL2	L^%TKֱmq?Sؖi95.>9WV#KȑR%eUƬkN[`}_ciOHp wn1ɘTO/ﾋUl
֭l&ʈ,Vփ[U}2L
:`bVF'OcS;6|]}?abccd^kxܑHr9jg Pi@]J"efg
),g3a3ɎptJ{X){Ȁd
f)VQP!u[AsVliaBy (T
6mV@67Z߾ >޾ɸdUp M\1g
i^+th=BR*<RA|&V~e Ktf/?"ٝäzҗ^-:o>I5d9
#&cq
g85LrZiIXXGl&eclZÌBa
DVTb$LsIN'G'
$<[g҆xjkxA&1i<MDl,<p0I$eI	WbQ2R)ڤH'"*&E~):4{th9%I]t23)R̘*v(OՒԛ^x?ZOfh;etߔXӭMҵb$DL}K`~QӶ\u"q3J|li(6no2'<1e,rk[+ɕ4{zfE[a`;!=rz`64A!7b۶Sc7vMbDl|8"vK.ݔu(K7P-Yl$6׹u6BNf
.6U,)Y'IFK!ly8MVlֶm{^.ssyQ.Jc eYFfT,#mU5M16X~AaK,+_^hџnR?֢zEL5-vuOߠ^kџ^oѿI,u~)qJ|vqB~zQ~Z>B{`b-ׯaF.jM:8G-CtӚeZ瑞~3m,bm]Xyka<zqϐ/?vw<|~N<|
F<a=;r2vM^AhQ=컂G}nRy$vr5V_t;	$E$fgR`	UG"d8~y&gLկI7I:IW&oL?h!%~h?O4]~XW;~N
q"ه~>DT ؠb"z|K_5yenxgKз{+@;^uyjC>ϠҴlҴTOץt`|T7qPW}82y|RFHfp!ģ\OR *D(<JFs94!ZuTEs`	|-3M=۫y߲`|\{UOftSe>^tNtY\bvB]23
Suɴ1<T/s+\0p
[tOhNr/TJh:9]A%TTCPC:5=fu_VWJ)59ljK8u2a~&nwZh'WٕG
@PK     A %r  5
  7   de/cardcontact/opencard/utils/StreamingAPDUTracer.classV][E~6

BeUk >4Ua3%ݸr?J=BRӋ9993o0(:Щ ".+k&}{]
1t&
݈[AT{PsۖuO+Z3LWˆ\~w.C9ߙakayRSpEE?n6L#4O8dڶi{,a2	/C2.ÝTfAÐaW1p:
[e#7(Vy
+b-)
"%2vQIʐ*>=d[ƶ^-
'[P060\+ݞyW'f%xy>P"[S,.!N]⃬霈8+6<
*#gLIWl=O2>2~'h2t*Dy,6UDUiD	 XRp+Vjo3<VRFa삪.y*JL%矫XTا1'vm<P7gU|)	Z",*ȝҠ;Gmr@肊3wMZ:71w}1~K35Ósh:
.URK3L\"CXbf|#l,K+s.~?BbȽSEI1 4)e?6m
:V-~hza:ǶCH
	*I۶G		d8bu 
e<%°Q#h*OۡĨVfST	AtGF|'}rMdinԨYʷ1
jhjKAU@\_,JtE跀zțXq6h}?54
Rm <qH
&j
[?Q|$t
=50J/ϏƎqs14HԐcPFC5<8Eq
]4>K~tn`|ϑwAুfOQ3|MVb7?|'{<c}N22^.!mAK 0i4^{^{^w:ic nfjxt7XZ<Fb-4b$Qm
_%}zJ~*FPK     A /  
  (   de/cardcontact/opencard/utils/Util.classQMo@}"i@!8m juE@JU/l#gHH78!qO حj3fg潝X"x
d(\wvwO!ȑzlfX:MjJKہj/Cx2,\KH[5AQan	_9D)B<luڱ|G!Ua
Tgf6,az/4R{u'ئK5nr2=to(d@9HE!IM
-G+RLns	I0Έ::CYO-O[70Hކ	Ck4+hǓb^o$hIfJrb{Od;^b	A&d]
;HXmtTc{t}l2
ql8e\%OPt1_y8/vJ}\8)Q:(WQmP`|=SF]21 
q%"U,Rd
qOp?R@"dGעXHN1Z@X'J`7PK     A               de/cardcontact/tlv/ PK     A {u    #   de/cardcontact/tlv/ByteBuffer.classV[sSU];96M;$Z̭Dh)`i[P1XEh.m$GttЁh'@˻~{g$ͤ;Ӝ}Z9E	~\r
X|i-Jө\VOp5-ZtivV3Xe}ANɃ<WDv.2t?0 fh2MG|mh-;3WBi:-hyE)nn=;
 lmV;#^,G"OS"C?^_X)
}TX6-O,R6]8L.N8xR~|7ZTF/G!o(4BҎfiJOq<6j/lta
Njq=1k˙"?HBMa˥5d3KWZ\"@3mTba2{9Ö
ac`IkbqQImohȢQǍp?=E}L2ز5vШBM4l-Cs ^?XEfgGAcP4]l^ndJȒZyh&ಙR>K7VSQh/v\āi""i9st3<Ֆ|-mt蟎?:fU
FW[y9@N: +qF2<arxV]4?'i\E`
pdzWA!ɓ<=u<!>
hX!ufPc7J|0U`><
:VQs5XNˉ8"
B+Tuqzu҈?{	W^\;lQw`QG3|o|jۅ
TgjMJ\F/Tk؃7 115ѵ)73g74	'iL/'"{L0~bS|sɧdmԏ%vN=ĮDI|3+xKIiR6gxSb%7=#^28mtZ=*$#
b7$bb7$FܾfF3|DoeKerpUe>eSV[wky6xp:qx#å;xi)(T[4z7rQ] XFޭx8NK	yl
4	|\nBǚ>R
ժTxs`BHfh#D꽁f+x^
zhxӛ^g_~#AvĐ8bv/vb֊=KH	cX.+.qyUQm I;FP!ԇ>iHzҩKTfM8+~On{Lߙ($憝y購>铯Y'.nsP
w!Nx&CBĨM*sC"r['p49,s6\>BcY`MULJj6suڬ6'<njg}rև,zEaccdGkz[R|_&iI~3>Q5Xm5h5,*=YЙiv$q/+ZcO݁.ԜnxM/PK     A k^Gn    '   de/cardcontact/tlv/CompactInteger.classSMoW=ofqq
$h=nq!PRдMj!D㉙ԙP4 vvÆHEڪ,T%q}ϋpР02H )[{vcRsuBYYXjH	KZh݅avݶz=<?tn7
nH`XZ߮FH8r+m9vzA
$zvg5Y<[2yӻk:
@
HjU.0
oY5%IYU:W+5b-B=ߍ#;
{4Me]HF|hi^7cD%vuxtC̙8_QrS
֔95QWj\aKDxz`l3*44
'C{iyځCü2:d_/'$T䀌
,c8$2\+d=<A>3؇!J|3U|uŗ8'&_ŌyG u:Jo<D@ȃdcY*eYenμ-c86/4!*.(1_{hF^y]1@)Y,PH^Xu,)VsW*1w)W#"O@aEU+XUw0X=1|+/
mƽ#@B.TRQ0(!8X\#Ve?RusjsW?`r:gًѤ+ʏv94)Z`:/Q8$KM'c4$ȎAh/pP:!&64PK     A cc  
  '   de/cardcontact/tlv/ConstructedTLV.classXy|Td23^i$$ cE@y̼$aMdQ*m+[-V.uK[kkm{-6=7o&a}sr??asÆ<'
(
h~5Gº`*_ca0[jj
BnȲ=뱄_~0LmPƄ5.-`\of
&`"i>l}NLF29j%Nxkx'*mTi.VM:eg(83	5kk>-ܧ/T]@qT31@]*+ZSeZu'gIBVDE@~!\9
Q0`W'ՖRp6ъTk-},r+bHʍ~>/A3SP`fV+X\kKjfv<i S_5
rcezaxܲ<Up! "g}
2J_
>
V"Y/QNS.p<JlYY,1^nfӦQ
v3	^ǹ)tT^/P;]NPF̖R}h4h/|S`$ܱٯEyBv5	Gt?	k^fODbVtLRҊ:*#^
B :P`Kkj3:לoNlR,Bѡ-6,+H`;L%)Ti4.ڬ`
#i4Y<ڮR(U\5T58k1ΛN	${""Vu4"y:R*Q
vqDxF7fb)h0Mzp۰*5ә0O~v֡mJ[ccnԅ0w)=j4'%YLtQp/8 QQ|rR1
ْ.<pP}*Rkc)u)F_ջzljX(@+x([|Љ#}6zc, g:}t$b4nvr.U9eHK|fUd8WC]j,]3ǑA
kSE.5  p[rIjDٍ#͒mQzڀ3#ֿ<.lk-KFS8MevƥjTzĳd"Uآi=;6vTIA&dTsFcK4YOr 'g79GMGGHdI8{id?Ye؟Ź:jlWXF,GSɪvG,}k4zgV$S0Hܓ<?kdkB=YtVtF18y0it2gmNjtGqF=55ᩝ?'Ļ-0+^0<٨$nqt[f5
%Kp g"hɭ0FN,kU'CP'xa-RqߗNJ$L;(!t.@o }lx4Qz~f!Oʕ
CԉᬫuGQz~,}؈,x4xDI< 9z!ƺ4R3Һdu0JOSL!UΰT)6Z/'CBc'췔Ҕa-uQDeOK==G0TV̷WNߍ֮$s.9&Ge#YC#|x c'"OnK\Y h"uzIf
؆Nobn[a4E$o+)5B% 	xЈ܏cx8sĪ4<H*@#;Yu^08INA-:p9]!./WΆf@|4ݑ
1&N}'2Уr*+XBoكyuG̠m6쇱2ν_fOk/Ccz*i֗a=o'l
f[.Jhh͔Ї>~ {6NBv+n%fyZOq~HM_y"qَ2&mN.NP@w3+ì8.VXrጊ**4`4zju̮#ڋ£.ֆh]cp,jrlOT#}2}gi3f[fƏ2! 15-`m~q*~yH	6d<?SKK,%flK=6ga[F8Ք$6,Zi@18W/ky`7$"xGQgYfT[YmUdHK4ޘyL?$E	jefٵ%uyKU]bzcPʣN4cG9LQ9DtlCPPP>Օafbtnf̼L3Ǎ}ov	+ixkOE>A;zDA3.Q$1
#
.4F7i#d#ri3l7SsIyUwݡ)P dd8qf)0+&R20/Xѐ5'. o2_f
F6L[:Ouig궐&xx
GV!.@S,4B; ]*CD%~eL:\yC(e "pwkNCW	{30|i=ޒ=o`ѡW!̧	V8X"(H؊z
&b;.;CA8r -|/hx-̐,%㲹9
NP9ri}y$eQX=10;VU܍
=I-yI|\l0nG_SF Cc[`y+{xeF^#"l"!܅"Sws-'n"^tX'nG]VQ_HۉqS<׉uDi̤g	߃.JO;˚|oБgo0<f~?v[:Od&%zi-:ld:yXPަ<:XHWpx#BPK     A R(	  Y  +   de/cardcontact/tlv/DirectoryAttribute.classW	w-<de jl# И5`Q@lLm'%cil!ަ[Jۤmo%-[BҴ 紿дɲ5s$ͼ{߽ݾ{7*
<
֠5Ej60
KMX+55#1
:PY#PгZ2>Ȇ+hc舻7',-9/
'j2p0䶍v==	ԓGр&P,:5!-|i:UWqnRfR+h:lVߜf3ZV(e
Bbs%!
nNwFLtaGAP`rAô9KZu:86xh0"<B3I\dvvNk<	{1H	8R1W;p{)GgP$A=IͨZV0k捤Ns,^˿p+xO2Ȕ&}^XE6enA\ɈⰂah߄k<g]Q Oba}h:h/Fa=SpOٶ-&ɭBz	uڵ;eW''|yJ46M8,_CkNIxaаVdLOgRڀjiCf6Z^0_ds7)"KS0r]3+81-=vkV\NYJ2cj63s:g3*`d-bQ7#'\>14eX
jywff6f$b
."Og5jj
rtsɌsH0ѹK_C+o*x
u\V%W	ħh3Jj*T-B}Zfk&LRe⺡9Τh%7jjBYXu7I7uܭ3~j0W#[;F³#jF
VA%W4UQM4%H+TriIh
jrޚ--H u+VF{㪥;+JjkZ-B
D'k$aɊw2y^3* E"iPg̫)	7V%sbv:h$:,p&!^νQ*iEC͌hi3A Ȃg#B3 2nᶄ;X :61o՜	kHRhVdJm|f%-8~1OpM~5EAOF_
6_zVfb*buj
~zz^Og8;Hx,ހ^@'0鯯,b",|N[Yހac+b؎#IlxErA@Z!|{6ظ~
j,bVlGzr}B8ޅ{Vmԓ+KeH!; Stɞ;؋DizґFNд1l/8/^"=UѮ
=U2۱dJWW==ҷ_'mӇKNdR5(),$ J.xI bJsFn'ru׋kHt.[m,Zm^Vf5Fí8⹋Dq	-ۈ.`xdz1MbKde

_E'wFSIWȖd<GN	<Ӆ̞+`~ƙvꛨ.blj79Z
J^؎oQB w3:7QVr+g*M^w_n{?
]
Wn\A"~AY
̇fmer	"6w9a
=k.AuAcj\$	]©ɀHKrt"^pmY',MB)bX)~F dt\#+~/%~ |ǡ4"6s=K83IS<=-G{BMMbd,[%l
G#;vB7{l>؄x]D3D#c.؉_ZG'f`!* ߬qCΩV뾃KWKr vC=;66>p ֓ދ/N`3!XptN_xڪf)1+VG)'y5~+G%\YD2-PK     A #    "   de/cardcontact/tlv/GPTLV_EMV.class}SMoU=3c;Ʀn>	-?JLĆ![Fg0vqE@]tZ	/@BT*+!Ts޳1*{ι# Wp% (̆][FV/{ru۳;N] x_&ED(&Hg5٦mplQqlmwLv#)3(,ߒ_n}1-puu
]/dv{vw͖̋ooH ]s)sLSUp-YkdkftG A HKIZͧ
Q<<}) 6XV8Vv<fmS]fVrkVǑ(NW`
*LmZm^H5놐8,eC@9b[;;]Tcƺ#Jש7kj~Yj%jTdh\.u!D{"ӷ<t|eLfq'1p
/sr"rqlti_0O*Bt9	U}5q>B#'}~?XVd HEo 5kʉa yEE'F,:Y4Bx[AXRQ5]l1?'CCGZoܹ[MniK$GGCoS/SMR)$<> 
P#Iu|hF4$hL$`"
jr	ypI9ǜG`0(%8$k3HGyQL#!q AP<"B\-$Ygs6ic8=SY,?"B-.*BrǈKu{<%A*jKAU2
ѷ]ܢE:l幯@FuGNMFI.)]PK     A ~0>    &   de/cardcontact/tlv/GPTLV_Generic.classT[OARZDxk-
nIkUxe;)KʶYlg>hjGgKZc>3dVpף@	#"
s̔Ly-4O#D$.cL`ϴW?yp׶3L=*z,X_ TX7S))acD	<4^Mf*WjZ8:ƥ'8 ΉAU}1dΖg:^,U>H\_Mi{Tk_nq7go-7][ؾ3[ƿ6EE!1aa7Y9(*}SdGl-r$-I05l^*d*eh%͖lдbqgB5
g
`ATwOb! x{/`Zla-O,~*nFwЃ#Xq.	+N(@a2E,}Ʊҩˆߐ!,W%Ek讯~\H*)%Y!QR~0YOhgH`I2D2A9sH"aG8rH79'XqBsYL*}V4r"LL}+<*
jGΣ500)	FqCR
PU\RUțim%W5m
'[6~ͫ!]ƃ麄W|{@ؔ{UvPK     A pב    (   de/cardcontact/tlv/GeneralizedTime.classSGǿK W1QZ.oXB4i9<'Uն3G9>{ILL/<}vy n	Ϛg+٢q(aPE۱%jym/]ðYL0BǼ.zx\YK9F$*å}pϨ/UasaNfY&s!\or2")aL8R/{í&)tST1llBM✄)q!+`r_{y˚p`FE2:c	/.Zmx5JsR-Kni0HjY!\W*pFB~Idu&K|p]Ө mH,v
:wL%u"ĩ1o?ʘ\1osӲ66ZLvS=)W݃ t;_ҟw	ic+Eի+IԮseБ]ɾ)[.s$<bO5t-惚@SAKՕh)5<Ihad(=/.nZ'Ր׀fFTqTr{&_I${*!F4XԒ= 3`Hk@,7ӯH2U*Gc7F&
)4Gs"B,4pÓ%RbE?xDҩ=Hf@~K}HJu=c˔-OSo1ӑx5N[Oư&
3F?	@J
$Op}$`v-rzmwEIdFEܳ4u-Zk1f`8xߡ
Be9PK     A 9	    "   de/cardcontact/tlv/HexString.classW{ptҝg0 [*68SA[8KgScumڤBiqҙt̴S2=igӴqqe3o=~kn_W?zFך2Zv=e1wY` ! BVP!֛RZ>2x>}!qXH
kyD
mX*QmDOٔf7a

Dw
]}k,2P]g-!qQ{3=<)W8
yKD}pMࠞFhA 
ށ5N-ӳi@;_V;c,s>b&`3T/32b'=n1apO&iبNeYmlaXE=Jh!EQnhFsudcO"Fd8<*bNt3zv#
U&Cъ(
V.>RЋʉi9N8"Wp}K'H֩Bnx(2쵉"Vf~T[ȂCt4kOG(%[K)cTD (y'qw
ރ2
cbjcq)g%kC+): #8!}VǺ{6\Pp#>[|cx+$4}u՝H24Rk1-oA6hJ-KU;1c\0.8pāb~ٴ1F
;,A`A'UOaabPG6r"&H.[WC)יZq8AjfidFQMܫS(+9ש*e'y| y=W`	9Q03)Pr9OO}Uɜ|#:L"|-w@tAƪ,%\E~i\eX`7GΝMy:]_,wӲ^Xk#c9gGteC|ߙ[HhL1dz>
 #"BDG4eK_$ULfWz_|$x0J\, 9/.`ϭ:Z}q+xk-[!_+I`
,y2 Xv__2(=SEy>lQ`dX	NUլ Pӹ¥w
r!oNF!DN`em})t
j<xϏSCB=I>w'$Ln׶3¢MЙ{.88h} {bO*Yczl$/ E+_9*"f	hn~L(@fmoY
&0࣐{7`?mutJFJ%#%4LsarzuJ"(@N)^wG]* OPjX
gzS5r	J%HA
*naCrMwWwo?
SXQ;~J!_=s|5ͼo#)"WErJSqrj-'E5{lWJ9
[AT7B`!ApPJ>WGދh6dߧ`
~b^8n}*'Da?u ~//W~oR=෸u7i_+7&
v)K?H]~o$7!$M|!
IH-9LGrGIPD*5^8kQ508Koef!h`޷*Σ8N# gm7Ҽy$#hIyE}KL&xUuge(\*Rl#T>WqOE6Oţ-' x͞it_B`ދ\E"8xI\7[896'ailօUSMC? nzҲ8:z?GmJքUl=*靸l=ZZڰXأnNѭ?gLtg9a܎dOy;S4avƖU5?[PKzMIAܟ[~?)[?jEu;ڀJvR[vQ	j+=V{VI23y|>.M	Fu9/PK     A O  4  #   de/cardcontact/tlv/IntegerTLV.classVSWn~mV 4 IhAW!
QnVnlNS3>ڇL:c;qk>@mzf&Mݽ|;9f  CKFMKz&6zboR!	눢*F?MBTx7<|!Pᬮ,(('D]ӱd}MnzCDLU!ʺ	\6s)yц-؆vUiQ]ޘ2k93Zlɐu]ZxC.#2XafF֣e1s[Ǚ0vb"Bא㚕
RaK(\K5n/l90JlXꪜ6)o6_O9CT/b>5uqC'CzlaW&^j"i^Դd\T9
I5`g0/zZvsL )WZk+Ð&@ܤ:W3m^4O(NQx8MIZ炚/rnșK<7kIr#AR
JnZj3A<e/>#¡a**ǐX*RDDJeISBKK	IWa)`S500"qMd=?",6+Sl)z:R wMmZ6YdPV}a؛@6"p2Mhs0׉k=-P8
=.iFХ܈liI\(`Jy#/U`Z/E]e)vt:>6aySrvW-RNb>qŐI+1>yΰQ6CM,:mG?8K9.*ؤn/Ί;h\;~̱G]w6on9JH'h}y"?,t;iVJGqèqЇ ۱Nt1c8Aӹt{ 2S8yF34&ȆZ<.N:M*c#㎿aw0n*qR"I:ZD!Z)BNfү
?Jc&V75C?]+]D:|:IS\kX.\$AuG5J"6zL1r""G҅"?]#?`HGe$:6Hߢ
d`21ff۶
ZEk]/؃p]Mtlcom({?V*&yq4aQ$\^#I+lZE|L#O3{ߧPv_#^ct߷Pzn٩~|&`?L~No_қ}j)Gqߘd]JS2͝$%)͊um'%y3,!G?QpmPK     A nnk|   0  (   de/cardcontact/tlv/MutableTreeNode.class}
PmjܜtQ]zR[| JL."I9_u $2N6:mҐ<Tz+,i&0A0ZXdG,G9SI7ndwP'ufPP>͌EbVx\*eg(6OڜtPK     A   '	  &   de/cardcontact/tlv/NativeTLVList.classV]WWݗ-
(0Z@ACPX$0&t2A/¢tu]ĵZ$E/73>{'o $M"$p\tr{*	lh@aߩ5.zaԣ&qPTV3f
'3^˯SҳWլAr<VEf^j`A&Yqtd6+SxWd7[Tݻ
cD4wNhIsIղdNί}^Ox%YY6$ጉNm0i:6m)'-iCtA,%Q
t4q$z5s$IjZ:Z&yETJvB9ʵ3Cu9HHGĚO7J.9K8hbٞrWpZ"їz쳿#l`DBǃ]HjbpCHJaᚉ$WZd.$4AĤ.YUrjaFxv	#&y8k(
3kNvsJo{ÃEuAW
Yf9hَJ;+i
OK͠d|uTs ׸]$N]WeČ5	2NCL`Vz!+̷~+&_ 
8]U@o<˻VNWsNKkQg{pFzu|^	lUMb#3Q?{}NkP|}]7ͷ^SsY@;ۄmØD~B{8ϵ	A#\	y0J !>/p	tc10#%F\&NlS\O0_j{Zk
\[k&zB_kLp}1s5U8v3:<aL-F×D]S JƉp!]nih3%جwf[6oP!^ybHJ6겎o!^lW4/n%D%R-]Qn.̲WK`+ѻV7{%4 0ٳ_x>\hwd`+uc}
<#\'zbҟJ q}Dcھ	
;{O-FH򩓳g*_n׈"|ŻG70ï|З^RzΪxPK     A 7cY    )   de/cardcontact/tlv/ObjectIdentifier.classXktTNNd2IĄa&DF'	|$7aȼAmm>kE[Zk `|RkuukVϮѥ&!(ew=;{{p.Q P1h6d2F+vC@B󣉨pU[pH[.XaK:Zfod@$*-;Z%\	rLeXA3aEfZ3N	kc:mpv-^&[tl2-ٕ+<8n	ca_ m4ƌpcvPM_j5,b){3(2;]
1d~
T*U9uL̓:wi]U	^A!75b9qڮ^`eAӾgLYdFckdlrFl83r2_r=ǃ&+pF1ےv)c	+3Ӝ:FI+eE|փxݭ^_*P|h(&à)-oaLܺoѱI`LPX6bãqN΂贽?9jC4mM7ڰ!=SD*1;Zut
TuFh&79b&̴ݜop#K$dies(^.x 9,3
˷{Ї%;Lg2mz]+qՖ0d9s}
`Pto	}ĕ?>dEhLw$qc6;qN;Pь? AY1<A0ӻʹպ23&awpQT1כlr#Zvqd<0J{#2O%n|e뤞Ƞsk$u+ZM2=.+}'zGH4ac$8,;_|U֖wungDYg_ލ;qI-:
]jG@m4A\^op_a_b`T7W+9=X@S<-Ґssa9֖$i%5cj=Y;Ҋ5\2:(ATT;ڕsw3P] H~ɥM#FʎGA
&dt<WR2c켲=%Xmsz9VḨf9tHd^RGGS	LW&!fn{#*;AZIFӴv&3.珏f,.6kYb~!~{}gba$vH٭&2ݜu7YI&GFS9v|{Sf;>Sņh3be-O80m1#13:Lٝ:SdԲk gWwGRQ }Bc1	=Q^^&k\q$`he3xn53gaNc	<IYN~:l{]:k.]`do!7+}%ɸ*/mz.~hnc::GS<,$]EnǙBH,nUNT@*'r6W̥μ1O~NSεQo**	,%P~u}h8IR<WeEI_p4r(*4pq;j_.#=˙ʅl?b O+g
jcۭ5KJ\grO[Q}IlF1y)Xr4<J^O4G1ޕO('qKZ\_:E&&|Ns>zc}1| !w{{
eA6ԸO{K1}>7b{{ǴxWXqE:4gaG%?h~&q9^@GYǐ؃)L+5܇D{
:^y3t6N6~"evn-g~ڏ3[#A_oGJ ڢOQy->D	֍SG`J?<!O/%3~PY$tMt4i| *yrQ<x_) uR>iڄa9oBfЭb) }ߣ?ь3?MR>fuqX$R7S/E4uv#,	|:".P4B0QvZ	+0sED]HXlBLu;ǝ,ݪ`Z֢P,s7kU#X
ĺ4M=mPVÿ
^}!XO*BYtUzd򋄆bQ?c^UQ!"hň(k,Q=;; hztUXT5ʺS\e >]XLI^lOc9xw$P06m}"a
VmJf{a&hOZ*`
,V^T ~+ȳbٖ>@ql׋\G:By<_TO9!*<U@?zq,ɻ/OmøN?6[q׬9d+T%K$W\9{ImD+)ۄRN:P+Q'"8Gtaƅt\.z1{\lc}70-!:IMu:){#tm$G%c;Ώᒂe`۔\y/uu}C]?e[PK     A ~-8    C   de/cardcontact/tlv/ObjectIdentifierRegistry$ByteStringWrapper.classRnA}ݎ3/	$%;Q."	a8Ǎ=a2czڑ+|C.HD \?aqpky>z5$0e#iYq8+۩ooIG;3WZjZ6rc%}u
W USH i!elܖOQ
_w}Wd[tF9IlRQla@^Rb=ւd7kuq'	_,r	jq(05,mlz$Yf#PySf\&)4>*.u/<JlK-U
0Wl;̪iҘ!$ED1ʑw\XD#ސB<AWvZDJ?3&ѷ'hm9=˙%K6yNiRyViiWQɌqH/8CyQ
RD7S<ݓ<eMH:D5o1wP`ƌQS6E/^_aD!yp/$q%"TbKX"s_
PK     A m3t.  p  1   de/cardcontact/tlv/ObjectIdentifierRegistry.class\	|Tտ.G\P	8@&( 
8yI$3$,KݫV/URֵUZjժVZ|fD;Ϲ'~tO}1L1Y &M^Ҳ&yGDY"f怺@11
d%ElP	̆ 'P0IWg}Ȏ$ía;dx/HFM>gJD!<gN
/a#p$D60ߢbT"lT]vfc
4Qd"v_oR+nrDY}|*b䜮$6;^Ʊ=J؞9<m2`㲰v[&݅[cp4b	Rt_Jhkieb6eg,˲9Gf/O.aSXvm4$'۱dL ۳lSEȌhA-6
/Tlj4D*dT^3F%lÁhw$鴗(flid_18ղ:`h&3+M[ l@^Oz
/+S3r{&E5B<c_-KbqwWws)!:xxpŬ-+bHv<Av;4VlbÑ~I+9TReÉr]%0e r}I}vˀM6Uv	ke(=:'2wB#S,p	[:pwk:;\eY(NqсEXͳ#hF-ʝW5i<nƬ)d	6v:^Ylƶ[7OpΌHU#s{6b&mdGYr40!:Jd3\m-SCӐ/^o-'e Em'3e奡h
S;i	;'{˦vv'Q\6xv	A\Y`ʘ`[LkMiΦIU/#fj*-v!,vqVU..Vn	B:j]бv8Hkb׹E7 jm9HfnLи]P(!dIp<n[z7ݾmQ@037+]X]yw݋8:޻6ĥ!hZ&;aıy(fߐk&}ڤ12#d?GG 	4)32O$86@?w
tpY4b4ٱh"{-Rxt׫F"}8|`8,#s^wmNLd7dT4-1&x;
0ﺽJ=vdy/L}b0;}A`>2Jw&R<8?hWWm3I/\%} I4hžN70^oG{~Lق1b s_d :U_aA&OX= S` f{Txʂ!iKojhXi$8HY#O!*Bq;`d(5:=汄Fz,T]P+FbF
05_9_ZQ2rt/n4{ [H
$ey2#_^,K)(t&;i/&@bt^\zzu9N&N`|kncKR#Ap'6?X0NYz}K=a˰[TX
So<t`cr17iı_*-E#%\[g>yЩ&ցjjU+km(kzMN͘~'!HEE崩fPРQxd#G2T@M@f\SA@Guim_;5B7kA .Y5̥GsV5䡗fb{HФ2w J=RWd8VQAxЎ6qd7F;~8$c+ɬ^ׂ@8"5k	3zq85n
gnAEą+
fX)siphZ9("-D840ŀrDüf!f:?wٝρn@q8iQGfD	~tt<"-q[0̓3 Չ+y&y	e`'%mFZ:b&8wFnꈙpF#G	rf93ܳ4"&{s_:\4~!E"pq}i%͍/Ocp0ƣh+LATVVa+yN
ZqusCMӲښՋdMk(O)bV#,^~qm}c͢ՋkYpc_i#p&3nM4anŠdm"L̪*ɞkA'ݝN#cyL%<@AZJG`:63}k#	3"dw&؛H(*"EF7فN`g<1ڣz3"G-x>vHLlg>~W.2(
g"X`Ng&aoޢKm3]@
{n:#=⅐IuPxYsu0㉣B}}PxI	%+}Q܁?1ݞͲ3򘁗UT]&1QSҗ405_C/2/<NvjvuoKFvv[\Wq=U/ۥo;(6]=:#Gl>t}#Kw|vgwq:w҇-طvw;_aoi7mzoͰ>c_v髶x% vnqVC%vl`_n(-^}ڮ=x΢]!AՅm%t< Qr@WhZk~8赤3!MNוULu.&mL P~tb85[啲9mQ,Ѹi+6RRl-a4b[3MOCKWMd馧UWMWZCL#`sܚنEl}TZ%%r*J6;l[mv|ܠQ䲩Jә~4( luq`A`5/En.T^K4̍ަl\8C:ܴY-k3@	2e0;%5-ޝz
?mhfo
C-t7f L+on567[hlۘ]kvΤ-`YXlD,+=)~:8-
`O"ݫDnT<3pKM&Ι-lmZ',%jf1ws45!&H?5Bܙi^P]mA#'(Hvm5TriOs2_ϼfT{vm@79,)7@#nsYn-F%Uk@-
v\:k>U{
.g銆;ч(t7h:|M.w7?Z֐ڽ=ln^:hG5Th
oٕ`K Ӂ00ǃ~ď	;
5
ز1{5΍xVc
i]4,V41l^҄ ;T}i[^͎؝XJۭCt6)olfovXRvƑ{׽	t9~|ݛ.T=]pBD^oj\'>%t#bmb/7&_nvԯqy7ɝvc Xݜ-XmBºI**$T;rҔI8J[h ̯)@$qPf
K` j	ߨDFeO,16fl1nT( rwp\g(,KR_mFV281I;KWocABٯJKFG`F-1تr3.s.TVNg}IM1؅F-+vˡCvV,ݾmN*h4hw(ą̇̄+(n4v1%b	HWcdv3DY5&y<9yIӨ4N: SΜh-G	XKC;Ð9Y. ۵6cK1jq(-u_K#Қ&S{CDzYamFf!z=O$颡)ߒRK!J]пW$bERHUHڦy
uUS,qH؅`GgY">Ba
`&#&BGTU*l(/4s"Nف}* #bemDagLuE- #q8|X@
M>u:݌k7F3ǳGgy4E|f/cܞ4=1˦,y8 wJX}ZaA
:#tfaA)>-qV&"P{秼j7ݿ0Zhdjapxy~DLo. >

8|HddRh)>l>ޙYlss90wg=fT_+#9SZjM$_ZK^w;֤i'݉dYeU͑ʬJJ1kmσ0n՟q={L, Y3U`'bhg#$'q'[4aI<R.G\xx5Cz>h{#V2oÌra8ȅ90L)?ʇm*>˅U[|ц{AŹu.ι--8'!緤a@}R*-Y3Zr m|kjY+L;&hsG('*t?NkFW_%ўȜBZIMfN<έ5-9.-dЎVPMJ\`2qE#NA+rLA./hܵ z`j]lq<=lB9㇉Y	_aluV7*
?*&xdZa\VԣG<g岢>人Ɯ1/䋚>ڭ?#f!Yϊ>^X^CsnUxcEaǪ	;90w5=^[cl/Ho֠g-iS1Nhk-NUSet}Օ
ǾG׬͆~3u5Mw
ucyH~t} ;۵sEcOt\#t\)4ԍ-ݶ:<ƺq3ڍM?&at%iu
E.ܲ2WTM39k.;[TcW|㓫sئnlnN.tޘEG\性Y9Xlis8~/Tm+QO6>z CyXBXG
`^K>S+uzT}ޒnPDܦzM/;*夗9qod0{^FAǼBM1ݴ
gG=k]9&}D@>Eaٶ|Ὰؽ>{8%X<L9tNmnhk
l}[h&pRP췔 ŵѮyRRE`h',5`֣@j$d'0=ˢj+e]5}%#lliOvu#;B)Ⱦ8qH1u^(KڰԮ2-,"2Riƣ6|F'_VsD.8RIмYDpe_Ǝ'h4fd
p:$7" YnvoZ>}8Ts(	&=vDMu_o47bx2y}zG3HV<MɁKEK5cK[u)S1{޹@Xyi@uWa+*Y
:IHoZdYfhdl	b8bhYǈuu&{7	6}ҵuWY*JRn6ӉUήBCQU3VfWUwLv~L@%G8$U+q,d.NgQIeuB8B
vy1tIIaDSDWYU=v7SSgbvAC-1瘈2:[bB	_3h3ݷҵgW#-uNf
Gk#¼y^5Zmzi$fGk-Y,)6yp
ylsdBbaK]WY nuך80Xp1LX%vToqnc&潖S֍Vܙ]h4h-hn%~}XȼޗA=$+"Zak9wz~sLA_{ROӳ\#NaZ0[lAӎg3 } Ka:$mZy}Wu?J6>X
]I=dMo9:>B8BSW[[q`xF#x;[~7]X꽜zlYXAN=2룬>Ω%sV/J_[<Ȩg`+u&t@ce_ZQK7o;Bƅ`+Q[f'ښ%<PfB,v9uSXuߏ-P)Gk!
R?
I+fQ8b+-xƻ|dy 6ݓ2^lM.+AU2 Q'WC
+q5uz%Usqȵ7s<~wK/VrӞ.PN1q0ǩV4jE[<ѕb8]f	<؅MY}vE-	kP|͟1O4CaplEK39IfAxت;X[<&7hw<hϐIb\&Gb
v=JXrlKCvu!E[Kc04(
DJ#'>ohy#FہP/COmKo)x))[¦xpǱ{/و 8 v^x@Lp}Q4+H43 |'UQl'mmI}$bkZg8<Yc/,lW6qƘ`泛XK<={~+6(3<%'lf0^Vb3p'+_/w;Uaؾϔ
 ǀb@W>q
ؠ{@TL[z3c\=?yJP|JAX`ʄNg/g'Xd6/dU9Օl	20"WƯofޣIjtJec0B-`*. _[3H%ўag.d5Ԓ/g'\vv>c6=a쨣\v-`\g1ꂑʸY:nw%k`؁l`IzYZ	YXw`.l:f14[^eqWxuYg߱^lhbcG8Xgg0Up=C<C= ۈxXhًlglg3"E4Gd+5	߰MdbEۂwOsb[ذ\;?vyԊ>p8
3?61C{ͬ^VbMlf6{1kgaLy/bg*H൬ug6nbM#H9l;Hr,lb,rr&)7f,zy5#=8l9Ee.v[UU螅l;˙qإp&ư3Y9;Ma?G]P"HK2"5.cGˑWUH׵&v=s+@ia^(hخs
,LTu+n:tt(g'{vDtf<cH0ye;1ނ1QfXbX\-m/3[P`k9mWɄƵ&:t?Q=v ۏ"6ә=曗Ǝp+d͋}Q>P艾{p9]0k	ZGT(8԰$#91Wt@h$2&S5	WEg;'x{cOaٳ=1y
/#؋NgSƣ)wpԖaI&O9h{&x&[ c/ʷ8hFT*ܱ7=?eV؛925<{y|uvDDafi:;6h5[8jSޓ6S&xO9s<{s{s{s{sKxW&-6q.x~aoǝ;ǧpy_9s|Woߝ:rx?9~9~ARɣR*
0J^
é4JTJ4N=5Q	EIPɯa*4̠L
{Si}4WCkX@5,b
TjҰJ5DҡRZ5SiN*E4ĨאRTڠ'T:BQT:FqT:AOtStQ,
?ҹΣ.%.5~I5J7iJiJ4E{4JkxJk-8{*=TzNß?Se
kJ75Jh;O*}_TDÿP+
P;͉kN͉Xs9{5'4'QX͉|??|?לǫ4'l͉|?>_s_s_97iN5'x?ު9ќ#x\sќ7hNGhNhN'hN'kNkNgiNjNhNhNWhNhNkN7iNiN4'{4'5'5'G5''5'5'4'4'5'4'75'w4'5'5'O4'5'4'0K11oL?ǽ/Y
3qײY#&a|f[9Q0` ;Je0C0vxك0S?쯰;dc65;#a,v0j`X  a"a/H`F'8*BP	7To
Ba	,{F|a_^5|y0/|ǃwA=_a?9_
:hC3 ,,
6K8D8TbG8L
1Z4h&]akZC8CT\	1q#!.$-^BE96p(Y
GZ8V6q@8Q৲Np<N'l8M^ky+LgG,\ȷ\'j \FEjXePj?J-*FpuW
4ܨ.
pnQ	MnW]ج>2qLʀ9x6NЂkASx))kASx)vЂL1V
b0ŞZPLׂ҂L1[
b0|-(`)kAS4iAS,ׂXLq0E0E0-(`0E\
G
b0ZPhASLq0ZPgiASLq0%ZPWhAS\Lq0MZPiASl҂G
~-(`)ՂxR
i-(`素)^ЂxY
5-(`7)тx_
C-(`O)>ׂJ
;-i\KhIZ`-ҫ%O%OҒ'jI$=$IG$I?Y%OԒ'gkIs$ZZb-IK\%OԒ'Ւ'[$V-r?ђ'Zd?AK<BK<FK<AK<YK<]K<KK<WK⟼@K⟼DK⟼BK⟼FK⟼^K⟼IK⟼MKܤ%Oޣ%Oޯ%O>%O>%O>%O>%O>%O%O%O%O%O%O%O~%O~%O~%O~%O~OqʣOkES")V?V?5J+OӊԊOMҊZTV?5S+⟚վZ|jjVDդ1Q-׊VjELTjELT-ZUVDF+bhELTqG+bڠ1Q1Q1Q1Q1Q1Qab&Y]}g6delox͇1Iz߱E)Lf3TxarGv=ϳL^d_%a_ 5NWLMLmނ}o?
8ޅvx>S3 .*n]1<Sx>CX|_r^=[>3a/✷p;=\񣸇̋@~	/m|05CC> 8Ib>JbYLclXKEUǉV2q:({+$+>YlSăB<OJgj	[|gK#}(^#ws$^+g:9ϗ~r9_ r
_&By_,Y|7kx oi~3_%s~b<yP
!5۪*?oS{v5QC]*c*j=OcxRʻչG]שyoP|zTտ1+~G<	Iqd^O?ͳ/?ݳ?g?s(=?d)T2enNr|>W+
(KЪЊBF+
z(ЪnӊBڤVuVZZQhUkEU=VVZZQhUiEUVVZkZQhUojEUVVZՇZQhUhEU}2[FaRV/gl,񫘟_ײ_VXEMl=oaعvv]dw~~{͞{;>/~??uLJҪu26h&v&˻$YQVR8Uhy&qj0ۙi-suIGyonٍJ,;[F6SulPK     A jA=    $   de/cardcontact/tlv/OctetString.class]SFߵA2B	MIBcip6vƮEf-/ $WZ{"dLGer$RH}ϳ=_|6T$Z`re,H[
#:F0(,ǒ540BE=kߒVWԍÕJqÝ
Xf"E-bOg.GF{gU11
);BKٹ8A:.긄ˤ?t3OylͧŹ*0܊^l1ݖ,h\G5dT\>f'HȠvmQI::n}'ʮcra];##`1:7B*>`ݪ)4t|gʓjTR?0\O}2QU=QǱ"wha4$m刵~Sxu޴idpMn7g#rעfށ'CbDv3&hァE4/;Qd8UѽU;\)oZV@JAC%וx{U]
Yg;4EM(04bME5(uٓz'eիez~,Cli[qgm!z
#ܶk8+p㝬nۥq@
o.(>
ԦsG`j2ydo4yLԛ鱈bK Z@=Ms>JKf% K9f)%!LubLʕE}OHsL¯8{\}Y?r!R??8B~3w((Q'x3@fB{ez$Ǉl-mݦQ}p]%zOӧ@B3|KO߅9mPK     A @?1    $   de/cardcontact/tlv/ParseBuffer.classVKoWMȃ`p Bx%)!<h&88vdOR"B})J[Q,Z	DJ.Z꾋VmA0\X~sL}# 0N\M.ь%
{@ggW/|؀ a[J&|*j҈y5_Іi-χg͉81Zq</8N1fvͫk"@dysd`Bt^źUO#d.gF'Ceh%PR%HdEO+<jQK"B>7f=fѲs%k[&(S&<'Jxa"]yɦ\<E;!V\'<Ѝe\.<r2L	M{	[J)O*8#l?kqE*eC+m #e\FYb[8)Ko32vf@%}bոk\3^k*~vN~ӌ3&'93Io5Sf0Q}9Äb?_3U3NK}..k
Ȥ¥+Q!LBn92/dn1Fu!Ζxhl+WG~!n|n6MY7^uN>(='-P	<@ ᱟO؈A20>^1q_ỉpQ9%~qEݏiZ\822ESqg &6pJiKH" lK%ȫ2Sdm)0A Ȥ,\fC[,K5!!ϲςjKO{E+l)۾:%&YY[\ַm~X~v"˓'d	'̋fЇ%f(le<Xʐ1hmKl"nFMG*ԋ|Oq݃˹f-ygfXzuø)P^TC*crOm'p/4-a-!;X&f13X꩒~IB`
Cߣ?`~>v{,{p÷x{.+l2m.cz[t]sMJ@@hB/,WIMQnس-'{"ɹ븃ښAIOW*9;Bo:lt 0<{f|'gQ 1F^ȇ3?)(5+ER\jv`eц=fhK:^ǎ2C^)BLCVgH=nBuCۨq=%
z^ȶQ]pPɶEn8N{0B{ٶS/ԇ$d#GGPxhficf-pKX>_/
r T׶RvևqKؠUOolf!il8,ut}4!)9FE˘>w|0-p
mD
cO5/PK     A `z
    %   de/cardcontact/tlv/PrimitiveTLV.classXk`&Y&!Y lT,$I  ʐ$uw,RҪU|Xb}T}'V[}WQz͒ls|{'~|Y h8Td!Pҫ;xӈZYmFT[	KѰWffش&
-ܝEǺ:7OD.S&Lf2u(H )ULL]=5]E1JJn6ҁFbhSG5Snj&:<,U&LXqԗZ?k:*\;l#!atqD@<UOߤmѪ#Z?a꽄M4blXqi4f1U8}	L]z]_W>
NVHi'o 3-SU,;Kɴ"i[;6n0j1Ht[5L_H$bˈbInX58]Sf3λmU, szLv{
*J^m^oD;5-l(ajQ3s`**?LO7a`'ޢV		.1fgqF쮍&b1#nL%M--~̈́@Qg=zgʨ(*pai*Ip.JJKh_yXɍ
SzFv'gNz*D-sn<MMʕnlb'nDysBQT+LG{A'D2;OۢBleh(!82:ข媩o5ý[\<؆\B
-;8\EĮ$mRUVdյ8K2syp
&;T\[26q$C(-H-'F:ǴfrQǍxc4o[EnȀ&sw)إb7&94/"	P%huVzGhQe˻X!j~,as 0rHWگ}*nZJV4
k0ٟ!(^>a{O*xJ~J2t֤Wll~t=xX@fm<7T<+3/ݨx/27<\Pu)+.5nqP!qr[oX:*a9n,6E{>ab5՟
LuF]^A(N#q`b0-['atjQhO̞03tV%UÄK+[iau1VkOF6Ps6|;ӸZyas;Yd{/s䤮MGl.ź:&	G?0.
I">gds,qS8[O׈0mw
ϱF
Iu0elc8#a$
/jQƴjAha sX}'	}jv8Ե.YVRa	h?%뫘ͬ̓T&\?m(M>KJw5e.
lV05v<4F_SoF|&Ia-֤=F(BEB_T9^z(ᓜI777?Cᦩ |i
+9#71<_sc
?UL̦bPBQrL2cns6Ftق3+h('f
cs_f|ƖA|'wQ[E4eѨNH	s>Tkk'2O-a7y|-ʣI<#~(>owrCGn<=g
yXzYSgbs_a/:|aaxfm-4)ޔfm䱋gj$i6}<vcJPJ*B 6İiZZRjl,}[乊s#v3F?f7c!zQX}!~%b$GoW7c8dqrC!KSXʔb:V[Fg8 NO-كaԴ{kps%<Ww?9>TX,B'#W26)1\~^kn't6nB_x^g.]+k2XOH@~_w죵N(+v(p+#pQnѨpqJ@Gw״{BsflZMEɴ7-'P`swU	V.R=23ebZ
%@y%^d
 ^fJ%_
/Fw
R ۥ ,bL	it( xmmik?5;\.*PC
rC
r
* >	NgrY.4䦂.ɖI۪Л?j[gP/Uɲş,a޿IAg0ַ%󇠭D(=x0UxW\(Dogu  ,5ѷnqe	M{
؛Ŧalk/r
Y%-%N9}״s'nqvQVUQ >B0vכps'TpTvH\nxiIE"@yX@8&44Qi:"TT[i&,,4gP9^!?ޠlxISq8d/<2\+o,4`
}S42
̆c))X?R*v
'x'Fke=5>+YGD4!bRZjCimdZL1JksL}n'=69ߋyAv;I y5r,	ORBqʥ
Oq:/:jB4Ak0|:h-P+ڨ
Q:'U*gYҢ%}NCy{rs[T{2[qpXH!hH|l
M3	Kbo8@/p	0ƈ?Z$8^nJ9{-}MJVJ&~G??(LPrq UM3	$+h5g}͎\{fv`:1"^4<]CaJm2]wRIS6m'/]WW4t-JAt=ۻΦn=LRn$Ϗ8jQ+lyB6/9G0!-)Yyp>r@	@rь;]PGQȸ3dudy08RE-(<u8F~}H rR|ˣW,nDY('YtEPK     A [{Q    (   de/cardcontact/tlv/PrintableString.classUksD=k(n)u	&INqqY$jHk ~E`ʏb+GKs=wϿ/ pzt4u.TavԪÐS1!h]+>ՒH`8(OVcX;.Dmx-!17cFW5rVQ
ÔJ1̆"756w
=|Z·3k,q^\`THùlnNie\!<dlY\8f[tI.0lKU5\gw47)LRs
gxɶtM<2.\Y
'CȒ;Յ@b/xa&شhMBEz{O0U$ b83k|;#T5/3V{WhAR
>d8!"yIG>tKv
?l7SDe[̚ro]*0wQW85IM`H_,
l&ˈ
k-_:Y	a,q*rHen;:_1dTaAPѶֹصnd(4vE3l<ZnKdpձ+v~>f5MΕm{*.A>EI3͊!8YwJ܍	I\f(z`\+?QR}Zi1?OLE]D!说AfSRYw`La(SL2/(Q|A;;ֈS8Nru gk?|?"pRG?d.37ԟj=!z7Jf,zqD<D.dmnhLÍuxnms̷HD)GHnKA6MUdFY1|o<whPK     A .ޱ  i  !   de/cardcontact/tlv/Sequence.classUmSU~nɲ5R!h#ZJ%1 ISjl.eٍqƿO@ǁN?J=w$`>޽?D]A.rwcs51
]3o"S/OT$TJs7pc{4|QkW2q[p=H[{D*\OB
RDA9P?4m.v.ik5/47WK2%i
zL`j;rhNݴ׊O
MN Mi-n4%^utxAqPT1e	FgOY^U|P"I,&d5Lݕ
٪,iŹ!ȟ*-Xz+OOO,
>dЏ3`PyS,2C89E"H& M=h}~Nn$TÌTV:>0<C7K,v,uG=3q:P?Vp[6m\X*;j5wM:xt>kH2lF `aCꁒ=9TVP&gYgQ+N5Ĝ)ɮ$ƼםCڧ7^iǒe<Rз0-gChjpg?S؊suKxeh6Oj곆h)!
ܲ*/l[{|0RU@:ݕa䯋ƥz~N_3
г{`K"7ڋHOޠ{70G+;Kou<$֏]h?л+zZKѳ[~%#D)yfZcdZIJ"~ďK2:44Co9g5y.?"!jR^$!O!өN&_`%C$oA_bzt?c&G
R@xci}u޲9趚H!!RQyj.(cpPK     A ̽
       de/cardcontact/tlv/TLV.classW[t\U̙K'$4ͥ$&-DI$f2fNJ[J/hU* P)RT/.EA\.d5~{$9ڕ9}^﹗ \WC@xhH遆>K9NZMhMg(
 ct	&2ix'y-c@`Y1IX6Mv+L\e:.r#eٴaq3=`
f{BZb,(0-RMQ*H惖-5ҴhOs͵B%!@!S]c<Ț9$WyyiI3Ǯ7S#fVm#X@2QҔj0F]~m/=gXL:um#RɈwf"Y>қr]Lћ:Ig!LtpCX+ej42a`M2V(~mIl̪ˢnIRprmR/kLK"kq萊y|uap
.Fi/ކ-lvjK[怙sBK]+[,zӴNzSGiE*ީL:geG,3w$5
-~]̴5RDGr&̷2nfJ2u!".u.V9W\ᤕo*NSZIX&d̃HF{<ɲ6~xx&)dD
MgOsMg 9VܤqBbTrgF>YqL312bhKͼpq'0EN`ItM@[-,$RҘ51:<"ULme|Eacd+i
 inGkS _u/i$XOM:;d3RF6)Φf
&sUFaw5Ebn`43NCȕ|/-]:Z P"qќm$B~m4|$3Ɋ8]q;Em7F3Ԙ0Iaf:Ni`F_dCf3,ԈyP "tgW aG!iv5!ݳ.煃W%KqrP@n*9NLBL6%d:=lٚ^^ZМXl]v$rAVDb?^'i ?sU3̐HKuK=XX<~Nܪx&34:RQ88b^fդbRIˤ4g e.gI ~`Vf.eGns^hȞzBrRsk\PxS'+yE
5y7u:X>&d-92r.C3jѢ/e8%u)iI4y
Y±	c	,=^Bp
&)v$x"WO#G#I!'xfR_.Wy |1FaF5ڼ >F򞯜h>u;ig+~ iZ!!^YU2++MY\vfI&y2pgQsW9>jm<<KIJ8ύږ(ѓyDE4Q{e$ơq$|-URWIlD1O?Pz6v`5+&5JÈP,?rH=8yEEAǊvWTW}5j2*qxGKq,Q%6}cZW;><t~ڼdz~@.ȯ-\)6~~Nȫ"llu۸)I=lKwHD88`7**u^Ru]usjT\XF./p{Y^2AO1=R
My֨U@}rzE8pQ+P<5ek`c[c(5j\{ʵG:<(SG6iSSoW8]O5+ZԉX+b~5-&*M+m'U!IJaV{GZS^6^ӧi`*?f`.w^R,ɫ&,[&|)~"Ղ8GwϜusvmROǱsqI 24QkMIt˭n-^ILZ-6ⵯOW%j6QthGtv1vTt\0{qL܌-'8)zqJ$0qZE1bKC51Emq Ch⮙|f J

ܤ\c.md	Bp,` EW(48'?S5R2
ݱʪ3<9EWPM%\+Z0?rd4k7h%2.m	3h,sz$Ups柘O_`  Z|ژOn3{+G.]c^1>:.Ld
D3{2>Wax-TWj#5tVuƉ Ri_x\z39rxmvg~=},
#)+E9"dzUH7X?PK     A P^_{    -   de/cardcontact/tlv/TLVDataSizeException.class]KP'+,M7AABF7@0Q?΃-[u%tCE3GMhssγ@
;i!a"@AՓn׺~qS=W u]\$-N3 P(ۿFk[Ld*1Ne2ǲĪ~GY;	7vJ_DKv౭&r^Kf2}}
^TpO#nxQ7߈;Aa_IU4huB٨ ިCtW	FUf",XD2`N<	
1ZG)<EnRv؏̌d\m`hfZ\Y"ŭ0
PK     A     -   de/cardcontact/tlv/TLVEncodingException.classMO0Ɵ(GO&{Y3[Sky"CmF=+ZрO}`kFs&3:%	k!9vIG_BfA`,I)g:J
5.x&JݻQIJЎLVT/2N8c뫡g3 'b-LgZi
>0r.½ۭ+Cۍm&67[b{R<}[m 
0J[?	V9.ǥ"n9PK     A kV
  J     de/cardcontact/tlv/Tag.classX	xT>73Ƀ%2
*IŅ$BfAF8DPi-U*"]-ZVm/VMsߛ7Zs=ǈQSLRȭ
yMƮkጠKxIkIm_TPF%	1cT24fFONΉCFZXϓ4E^AE&]4G
MK"6>E3+*5˛`Lzb8c|ZPF>0ݱ<aohd	b
֏-hpZ:'ߡ}pj$2le⩤JgZ1f?q2&
,3UL??ndˋi-ajU,	8d>^ H!Qsi9ɤq m͞&"?RUtd|HQcX=p*u*]tqFkN9hI%c+vA,sV1<QN	.(@p6Gz%N+jӨ
qZcYƖ*A-5(T!hj;j	E`gKP.Au:fG뼡MAj^of֕h}0
p,*RSCH'Ϊ7j4*/ZA2++`Kt0쌆B1#4%5eb*,VMѶAYY$fLl(ac]rJ0aSI7)UiN{"J׃@7{0
uu8PZ@*m	ꍈ`gkCW[# `1-iIJoH[r+ⶳ7+v&
9Uz[N􄺣]]|Pg$ ðM;lO&;{;=8@JwÄ`Gs5ڧ;q|fܶ](zzU!T7C- ,uF-}tE 3iߍ}8bIP`ahJ`'h|6:lxP$C<ΜmˎbE쫎n8^w`%&.8\p q<k~,ᆸ5;̈jF7fxXYW6@277;YƊ"P`t6B9BXrSM#,+=c	^M'F^B,+M98)Xd)g#/	R9A%27K~bv#iQL#Y<isS0~rbKsH^Yx0(*HcX:3q!IzYXEwsEKݳ*28!A5w767u,
fx&9  ^Ԇ
(z	
~Yϸ 
&bSTv=/amzXEi|s"<ze45冬Jͤ%y^4EpζVd8aՑőDzh3*#S슍uȸ*P(
*~bVS,*D"iŹ
Qw6־fxurf
4ZK$TjXgMn3ӗhAygУ	Ƹ"g.SkktQ#
狎knE-%;A.8_sGI	~
z~xx)}8ow ? 
V4gs|	x+U9s_wo ;]9?'S9ρo^'U[=P
ruTZ;Nuǩ4hP!=?nB tb};h̅r[A{Dޟ.i!	b[lyk|gw>?@rI4[yJ5
U4Yla=w}; vf|cTޙ텕6|:aGi92"Rdd Y؆[y#,C&݌ɒ`=~?o鹅^2o!m%eP*+(@GbYr[*K
V;"IH@fWhߊ,է\}2=B9-Buu=SmV<Zt_.~ɢkTD.ARD	؄ Zhk`$5Ha$$$-H"}%ڊ?L;.]zIF.' t@;;`E"灜rB<OV3ebq8-Tf[XbVXV"5ha~{׫Pb2P<5U㭖y43_];|})Zԯ8Ǉpojz\pucjPן%ܴTx<pRjQLQDр҈(C	QAQs61+
?x|1R#]+	3^6Ǭ;k%etx mt2^ !fp5rtSy|ROIy*ۊ6?Kxp3v0K -FQ]]e?Oq:P2HG"MBp|3[\E'\yr!
˲Q'`Kۑ]Bq@3Xx!S'_wL.?u&YlH9}@zU+hf*X;DA9ƄuQgī6Uz~jxp'_J!2_KcT+U"MIjSJb6mH4%Ӎf3vQh]xۭn#ӯ茊R
ݰugydOa\]Ѳ+Dq܈Ww"r\`^kw').o#Y5a0KAxe~硫VsUs&~N<:<eȋ2.zII1BHeʋ 
Np졋-3b{N~Rp>IE>A-G)+y
yn9_<Ih~]%&qQ6:[S$hU3d5|UC|\,Lmɸ%w˒D)R=.<OSBgXjެ.D[hD52.l%$-R>J~HG/ԧ
ykL
fW~UsoAoE귡-oG[߉Dm~2ΒWm?v 
 J=hC;O|hV鏠GV5GÎ^tztjUt5f\~fԎP߃:%`(ŃyV
?e[GV' PK     A cQ<w    )   de/cardcontact/tlv/TagSizeException.class]KAɏM,M/("0
2@QA't7բՕE?.%.̜}g~~ 0 *~ci5o_,i^k[{5PŉUc|7\mwSb@a1γlUXR _8(ӒnrlOZfSvUtq:J Y׶z
mD Uw,oIW:{==8]0j8]"
afkȵԝ3pM"|!ИUfAs0xbi>\"6U)4 jD2-'0
D}CvJvvv#D7`e)#3W#E-[.i]⾟9PK     A x   M  !   de/cardcontact/tlv/TreeNode.class
@EH|?j-cV"QA+uwHH Y~8)˙;s_]!UftXMn3ejGIsV7%cj&mjGS)?A8\04,&<R@ytpt uWMz4ͣ/7r<iRZE-:6bRͽPK     A .  w  #   de/cardcontact/tlv/UTF8String.classUmWGחyI [ibHmcBMečKwNԿW؞iQ=}f,|`fg>yf_6 |
OiULCHZ+UPa0)8 Cnb&vFA@axTM5tr9&xb'ƃ0L{ܲ./9o]靌0Ӓ+0R-gJwQb͜+:s8qi5R]#-A:
bBxcSg⹮Y\v׽Y!OWxC!Ϳ3[j7wy'$10UWihx=B5G cIW{{TJw:0RW(7
מuv8
`a*$qGk<˳]aVp1r\gɾsiI
bVhw<a^VA-he2gjjZ|vĞNOoKrc3	ib']qQD?2"V.F󴺿6\KoωG?ٴ4eM4٠663+v(/Vo"V160JK#[n$h
,i5_z[v<PJs9o6*tpUbE䋲nZ 1\_R .JoW t>=Gc$yVP6/lcwZ!CaĲBhĪAk(#'i@r~%B
s ͇hqXXf	6kʵuX\\֟w8K_
#̔_b@|ԯ%_#uxT)!;(W1}``OvEGnő>Y42C?p%np֫콶m[[R#J?q~z7*O2cwq?PK     A               jnasmartcardio/ PK     A #v    :   jnasmartcardio/Smartcardio$EstablishContextException.classS[kA&ftۮҋw芈A֊-ynffVvfCĿ/|Qņ`݇=9e? <Ɲ&*ypPgX9ysɔ#qwF&T*i1,{q;4wcX4<ӂaga@q=⩉x'n):khb.|Kq	0QF>[3Zjr|h81o3`j'F"ݱ3bh9@v鬙N:jȉ= $K#R"{vmͫD7m
m*%0ZjşdcXEYc-%y
ΣJE/	l\v5Y6E.R:.
3{J
4Gpb+b
$}e~P;oL8eTq5FZy$[͒~IPK     A 	  %  (   jnasmartcardio/Smartcardio$JnaCard.classXyXT;3a|
3
:A5B԰ 3oIntItI[6mڦi4${4}KGs0a}'w;sy`K[#)t]"ND
[pv2BUPO#==_ajIJh7,,>L隩IgQY8ajQ`gnK($_@JmP94/U7Ϛc3,͡KR.Se޸m9V"YVX 0;g7fu;a7zQP"mhև
̄q,T*X&n@Pq[4.@5)QQ	>ݡPے1lԫ؈M,O994yTza4-lf@`CE40CU[Tl=? 3ps/v1IF"bqM*va-t=;6xz/n$nm
(h?i[k$7C^$d._c{U*a?I߬%HJ CmhsoT%dv[ٴ#l<H9j
mSq;iW3P1-*y[fB>ƋQeX@w.>*"[5GTuYú	q^gSABփ$vA;eHб&f3s46Aک`堂70B}"Ta!ΰxtarJP{f}KQl6
85CG2k)@,;mϑӇ;jQE}qZDilw2ܖFl<Qv B䨞p.-a۶`blGͧIz^+xWUT&]wGozhԊh=\7aID	rRy+F.Hu3p.5*^Q܍i t9|/XV!ۊ
7xB[QX YŽxÿ'u09<;oIjvśŸTq^@5$*#5~*+.Ex2qgF2q>A|0iGKTK$(ftr4?+V(a_F,j1rhg7|TL#h)ipwG҉}F&ݿ/ܕ>ip=S}sGSvӘÒnќm=0:- Ri^YN{d;)imuj755/Eig!:0N6_{ae9ME)ӭx	=TtZCtc|ĭd_h{x
BJT\O i
W?X!'&2En&f4^@Ay2Us_H_bLLژj%P;UTaՂԑf	hPZYѸX'tg6uZ"BU`]80ScMnkԎ軍imD޽6+Aׯd,:ERo;iș\Uy 92cU4#,yGvD[@)Y;XE.ZU(_|ʑAHߒr/ExFʇORZ*ciB^2B;^`@յW:ྂQ1N+lp2r,+D^	ۙ&J;̈́LΊtR:3[΄$	\J4Կ2XMk$~m	J҆Ҕ
7<NH"V7gȞ	|
\:jPgXCgٔ;Hjy(vVvN5%->!I&yRJ|"z}	_N]~n/v@l-yRZQ"<b"
+eJ%%Kiw6Xͷc-oP6R|WsڦIW&Бma_ɋ`",/PP\7@8zԌN/bb<p6ݽS9_xɃ(_v?U⹊WqrcOHK<$I"7J4yTqk|<|?(]	="pߎ~tmG=|OBCmuBg)7MB*E]V(PUЦ0Sm6,|bٌBT _$Mw	]s4x
"1.bZ;75pxւڒq1oRP@_@TQ
(|Jyx1na'%N]I[әdbC¤#|.!<'~Jxq(3py:g²=)?u泃9˓&7Q:<9+)rTįX_sd~34VBxuFƿxFiOPK     A S'U    /   jnasmartcardio/Smartcardio$JnaCardChannel.classY{|S}{$_Y\YƀmNdɏ`(N!ȅ6:lP4m6kC6VgY-dmBЎmYY>mҮn^֥)wνe#c)y~}sŗmBWFC}T?ԒS'Nj:u4Ef"s6.*@ch8`;L}g^L`Sa)|j,Kuyr,c$ҝI+mMW7t3iwyQΕD3Evj
PCLd<cI`þPqPP.DSlohXJf4t&k7=bz`XZh
B3,ɤt3=l|44,2&iE0S\$Nհm]DTFZ=JJAxqm933	Vh5L+	kk6{ъ6a˃]\IhfR	sa
BمdГ0KmD,K;Mɱ߰ƽhGD0d浅xmJ
f&;lX9Lza;4Zr]CfGa;-
;S2GTf4A8IE|)gjV.f(NC:99 .1n
}!4%ztB({UܣAz SVƊYI1GzPԓB3 	K-27⛆#n	h.iyV<P=	{G@o/m,q]]߉d=#CFJ,ޫ!
XL0#@_O
}Oi#6Jdƛ$kάyOt@va8-˧xxP\r	>	;?v0b zDjpd@<(Nˤ'^:ɧ~0<5WƳ㷅Kcyr%}Ӟݺv54AȁOcV\~_d;D<Oixfv:@&ks		'4@+pRPZKt@fP1H,2 7Y^pv{9)'D	~^i@y12[$t[)WY0pU#dSmBЗ4eR\F18IW 
yS{[y_9||+^X4z3"
SȂLşkBtMN4bfPTn=9B6o0탢l+
ecyjқi?iU5U*RnؒJY_Q;"ʑNa>}^n̖T͜jO/ioF&% $&~??oWf	*+}T,X0#I?k	~PWטc@T̎')_5~Faҩ1Dz?_1n)sz%HZ擽.Bo*)vZqRi؉WXMvrJ3&K*;ɾMXb}
z6+Ҕ=vp>B8PUP&H4$æ`mK@HB"{i
SyP}]ggSBI>锈Dꬼ&WFd zEdo-+qNe^%q+nRٲE_';;9XRؖ$DQZ@/{/Ob'd$B\ʈy
RIX4fUXγ1t^ި5[<4j&reeFfЊ=,H93s,Sj-`&2Ʀumzw1y}Ӛ[KX5fPnd	s:h8aĮ$걌EGF[^;'-p[T`Q`"A!I/h"#uѽS2h^Cgg=*Ab"}Yt^2JUT<9#|S_T)Jyތk)+p/>DQ/>QCo4.M?QEX(|jhYGqQ~(V@rK dOe'+Q+zDMu::2L`*oGVLjtQ=nDp4H͚#oJgWe
ΟDOay!;o@)~ <Q<ehT>5ʇpa+`(ީP%<>c);HF}۬A=ަ-(ïBqG./])%i
Ff_0!7S}>"1,mL.953qGHV7W6Na0iz{Mi7*]WEġ"ʕQd&@-b17BTpa*#IEq9:Rv$-[DJژ}nP]]pO..
ȫto¯UʷP|
wТ|ب!/v-Abg#9\؈"楞[^$FrO${$\|Vh۰ߓ-*gKX(ͭuP]":d?&Ŵz!Y|B(q`
aBpo-@?ơIJJI>grT9[U%+ԧQs+<EbGjIӈ	
|_
yotCI<nvh,TMTS|9jJx%Z*5x7{x=0o(0!ވ&x9g:Lx߄/VoNtoF}EE?+!T8Ryp'c>ExoHRFSN2&=8m7mR~c1ED/I(d,
/VMD"jՑ	N:HMEΐWJ|Tm?"V":[UZU+?ej*ߍGj:đ2#oD
~|;xVwFCf~v"\=&7rQ!3J^\ݻsstM
[IsА](--/TWdK
{_t83Sxb6JDPh <լ22V%ͫpr+AEgfpo
iDOr3gl"GxYsg|SX
;XcO+]I|^}
SX2HoӉo;>}OkY36SR!3!c0GGq?(;i3=$fGv
iv-ltR8Y
wƮŏ3S~E_}hK('S4~ƿKYa՟$5&`"^==2EcˬmԖLDA654O=VFlԮڛ=Z-NP{+R3ԶQ{ڍEŬQL::TPK     A {S'  A  1   jnasmartcardio/Smartcardio$JnaCardException.classNAƿnHՀJU@
ҋoĒˤΒ>^/| xf`S1ѽo;W؎PB9D*řv,K9Qy[oja2NP}ronL|LQң8a!"_aݻ.[E$;̮4K1ncPV%4yoɵuB&C՛N~"	=d|,%)\eN%cmB8֊QAB%/Wn ![hzڑ}n]gFZKɄi,6MvwVn_Ph+|rv eGW/>Uv	XoL=xTʳPM<138ۿB4"^~.w͍c<abcg)8F9 PK     A D!{x    ;   jnasmartcardio/Smartcardio$JnaCardNotPresentException.classQJA}mw;x$/Q1!!{;ibˤG;DQb((h.vCWU׫WW X/",rq'kv 驨VgӎܹVjwr["M*aڊjZ[(x(('ho6%D=I&lQ"Jc9u8&#mЮ+¡aKҲ=\Is!BjEng]+KoKHkE?PDCS7+`ݍ|[ZwYaP7
k%K
^MBcAO	Lˊ'7樁42lK;Ϡ'xI49!0b.YD)ěgXje-2&
PK     A 	hه     0   jnasmartcardio/Smartcardio$JnaCardTerminal.classY|TWǝܼ$eh)C@^%>hC$CI'fB42$S&3ReպU]_Jk]-*$@Zvwunj}ZZ߹d̐?2||{u.O=uZYBU4=hCDcxz^W<Uh\I	IK¥){GQ}VSAQbw%YV'!u8_*^BQ$Opl*Q2iP*QJ=oHSÍa]Ƈy>	Kd\KlB66j%$kjqR@h[8fXx9>B{^%+ؘ15>,P٘AQ#uw23iTQ)E]$ш&IƛkmjDg.1άv*չp
i
2ʸNhQj	*,:\/a
I6&SFJhG4١DenBlZ`,+m85#MĽFhT٭Y,z7bpy'*{OmUC1u_Kx ;i<
8F7n##^ۏ#iQ)>>KY n!_@pֺzΖ0N­5..cGdM{m_!1ua걈iqvck5q=g'ovyecj0尌D93>%R@k޹[FaUV'%/N`L63v>]mMb%8*L2roLj\!RXWTRd܁;sՖ9Z2H{
-N5pU7mC;	3ӎ.'j+7MлeG#b/ܚ:p }x?{.{*W3ؚۛ$|S^ǃ>_Nfެx@5I>dA99z
M$\=?΄ޭB!B^A	5jC15]qGfvzRq=:f7>IbDF#,al穠}zTeHD`:II|K=Ѣi
55eLEQö́8.CW|#*RI8E8js<?,yxre70sTg<8v˭Dsas?!e|AR<4HiZZ%|IƗEYn%uYYDe7bѤxd<s=DjlLT)GM-}pqufĭN6ţ'wJx~;;9|C7-bJR c?	/xDGGbj'.ǽh|-\,y8ҳiGxkKOێ3 Nߒm\BMb`֎;66
mʱ:C!9R:o48:{3=mZb
uqyo\lli
u?E-ՍT_qHqq35Sz19-TOѢH=BjBvN+E]qC'<(
¥VS$k0+j*g|Bcn}d%eQtwf-g.W>˸Y`+;3O;$2ph<<hjqαaBӅ>
8Ɔ["zt:oø]xDvw(cx2e6)ѥsk)Db84Ċk.xQ⫈j|ȜEH"bK3}c&Qüo@8e2Q6'4!TNx2yoVKOyQ7GKجgN5oM$Tik"'uMPPEO=N՟.
7gclu?GӟjguofU-Ne;aEx2JutD*Bt&&vVB0lV"zB?2,DScUDbwj,K:}cjyJE"p79iM3p֒5<Ns>Q;6wvIP|DZH_u:/ kiH^<[34kq<@>p~T·&2s^ig^+Pɣˌц(1?ɂf|+_YedWY~=
ÿ͂`wYox%kv&ᨫ?º(8}8q+#D1=Etgy<sd~T)7HLX	[ڸ#\bqnQ`9a+X
Ҳ`&* caV/ul"Y]:ePb`L/ʐ8 }ayW[+-Pj׶\peS8P
'č)x,D/<.JaPd
K[1}+	صYSB_~!Dy<m}ٕNO<Ia7ˡ3Im.dy|>Wtou&b\Q<}J&po>0+ćK}6[sJ+&qT:M'R<N_''D?nX(G!ѧ4t I	\I'q-BMa3=.:3bv/HQ"D_3H_5BOu:gh=KM穅^
ߤ-C/ҝmxֳ+`(ՙY 3	E<Drr༈H"˸<p0<<+0|(o5vŌ]L-h*E	b)mh	ONK,ĺ_fIP@PllUEr3%^]']9#b]IXqs|aEٻgCBPB&>ZHR[̰Óxl?#)aGmkǧy᝘YbRZIp״5;[!Hðێdh=8(q1 h7L`,1r60I
V$HYZUY2>kF>= Q(.G}vۚfaOw]|/R1.X?9Dcg4EL9<wǋ+Uz*%4\ύاbO~r9+^E5_W_cwoA-7O<]:YJ&ׇ3DvZoxCT^-]K>Βn<9cy=e⥘VeyXGp`:!3J]>)(̂phľrڗ
u&P[fW,dPQLLgDYc.$=&ٔ)]lX}8M	oxnPxp	|gV1.qN2kJFWX+1㫍ߵtiF7`|ݜhM<n1f8ݴvy;|ǃ<vxoz{x6PK     A &k  (  1   jnasmartcardio/Smartcardio$JnaCardTerminals.classZ	|Uՙo\$H%{4(bXMܼ\ȃ[ZE}):ZVt$$Rj:vlӱN[:]ms{/	~Ï{wη\xPl#Ѧ`{<ᒰQr3`@_0~Rѓqό`8%pA\H%VVtG@k#>bcj8!5I#t`$V#ḹ%.4!
t8FVE"UTGB!3FTgƷc<9t
e4hC܈~J gF&I2Xؗ5שE_VYqD+n
G*(h(dw<'5,1bRe!"-A3eة&CFxCE}"Z	e[f	,-X<GeaҖ/o0F(Odi~@ȡ(?G	sjk(37ģ*B
t\*3dpZzβyW._xŜZA훮1SjQS0.f
w,n1/0A֮xIxk#`P!:af}~,"
5:.U_&yUJ^6[ܸ3hbUES[u"5e_"&r_et,eRS
#0-ةQWb7ߜb4#XUx\!T8hKx:_e`
:C{'55c2+ffAl$SAyT(0
hQ藩zŌ3":Zq902j1qN掟ԯ6[@"-_PY6i%R+'F[`f
mp-pe& }@!Y]YYFtw7)_o=/QN;4q5nguҫ! ᤁJ9'nqf`~Ll,[=*Hl\l~K.ܯ)+0bvOd;}k{u<xZ"i"!>Sm?Us.3כķ мx,M
%+5oc?hxBǓzyܭqsnbz^Hͳܛsn3b`Џoi
t<g%Mh613^Qm?#V+{s:e t͸щ癘	
[fnc82dmAgW?g09H"Ƌl CtWl.TPxCljruﳆb+[xrc,YGt;86P%ȧ?Rþx&ݍ&4U/cDUb]F<U\gO5=U`N%a`6zOL}jT3U??sQ5Kbft7X{dwiGLuBw?#Ի-p)i%3UcuEUvoj>!"b9
0ig$o-&N|X7{@U/)꯯+(.usBKܚxtє{FVȈ2Z6NlQ>]62mri
[W&Ʈyw91v&Yl/e.92N~ٽ"$WѺY-!8]K>A)l0.'M.@=xu9G݂Xu(32*$8
3v dV-$̝=Du)I

aC5^} b໎YiTYp&oPrA:Dy3|f}ь.W\`X!C+Uۓxs>/B8 3NXAFDąhfĖDN
vmPx%NͶΫ	&oDf5G9MK?ܐ>NGĎJlFf
[%Kn
`,G5Gv֔*Oӟ"pBze4r`Sj0I?
1M+M%XƠh
ӭsJgBUZRztQ)0_D*6A>3~A\RPN26R6ǈNEypi/R{ھ{L>q^32ߙjfh:U2f"Qk6W#ep/l1#xJјuGjkO]%,c,oFWQơ!A5?N֛Bas#8[JΌ7Gb^M=I<O//DxW-G09LnY6|lvIB"#2cj#M~QaJ?g#yjZkaMN.7
 r}&;UQȺ밾aH@N=_2HכibX_క՚ܗyFhWH61
1;|?PR(UsR!r뽂?8V}r.Wv:#p#02K#\c8(&:(~:A0O	9"WlD)MLp5 P-)]e\mMJcQ:*O<9)KsV^s8>|yUٹ0s o;km;˿hp9}f=ia۲V]7UK^xs<{qVg9Z19k]w__{ڣDekB:^d*Ŀ'cJb**Yltk;q+;@޵ڶAq'pub/ տJӟCTW	+h8DQ\Z 'J-ȣ7vl^iKrܕ94cv7~?kb#(.5Λ҉mIGד]7ՓxLs'Onw(ʒsy岤V(K[*Dڧ\Wҁ=.+^}؁LVm8c|܉EWnq^}xg؍.MR4<"\Ǥdnr#xReʃ<)<#/Y?s;1GᘍNB<X8؀N8n9~/FSd\ܾǥOt<`̐])8RF>4Cfsfy2LfiK:'bLy˺^D\y8rQXnj0Ғ@sLkC͟DA-y(|؈$QE"<QhlnLRZLRIQr5$sgiX''!/k6#d|:DFj0D2"4j')'z9-bg>' sH%[_YZ3j :?M\Y7$eXP
ԏLGj.vsU\w֣YOuvY#sNu'vY[YҎ"-w{Pzp|ʪPI}gKcz)TAA^?7)['9u.᫬4cY>Xױ?dz1xm8xO=bT:|$G^
Yjg~	єUVjFHfYVqC3)+R*HukZ~?3II5W>L{֑mCy;]Ƥ:t}lvq1,U5[KGN{FBEYjRKW9_) SL[]TyG|/2r%0jъXa~~?G8_篝[2j:@צnmY+ӯq~Cl-#Lc%@#	glǸM|G$7$3x9ı&fAĭHxfDyziRnņyYs&려ߖ9)adDU	
T;i|J꿔ӅBjS!)
T<ގ
͊9NżYZL,EUXZE6ǽ[%JcgfPbtpL|j=JcbH^<sK\[T]^.` قQvl\!&d1񲉑#Б#Q)pbE,˹Z 	LƭRhl#VH,'rRˎ`tujĹ~Bm|wxUv
vob.f:Qc@2FwY CX*<y']?$Bv=GUg>;FV(C{/]x]yˎO>LbsT@7c%qm'f$F6^>.
ejP*WUGvڦZngeu޹{*qWZwvc봇&Af&*Tg/#^I8m;較tوNل$W$wUwe4e%-Of9fKCi.1 {!Ȱ\	2O+%'qv;z*Ο(ؾ- k*c%}LrD2aʶ;y$,l0Ugo;N
w~K(%/u%/Ȗ	=)*)NQAP^,F+I
Ce+۶mDkzu-eL8Ob&k4}ʍ= {
\9q=w'>%=mK]M|km8mp&]n!Vy?{ٹX;@.ws{+r?rPK     A 
    1   jnasmartcardio/Smartcardio$JnaPCSCException.classn1l>6"-it#T\*ERݭnx
|TC!n(QHx ^y)spJ Kh+"NQWowx7HH{
W|흋=j'q8 NF;("BEn.۳I}63Y?܍[
'N%q(Fk&&~t"T2#BuA|+B%'^0[pNrjB!Rk1[UK&d1|0P[4!s؏&q CSve&?:y$m~d쏄֒7-O9
TPVX;=^N{&]Y@#]`
vy?6HTY;To-%m"=GZ.m)}]\!տ4bMހ;evXoZX9~PK     A U8  K
  6   jnasmartcardio/Smartcardio$JnaTerminalFactorySpi.classV[WUNd
\mi.i4L 3ijd8@2Ú~?W]6U7Q>@qhCg? GMF A	!=e15ٮzaX2H7F!}&$370"d}PnYO,ZujKZg0>2LÝgum5^q	w&v﵃TB|YZS!CKeHIXܧEmn\g$Uk}\pUF`ȣXWm>$1\^7zd\ä
Pl9^C		I0j=nSξ)Z
yȧc4-c)	q
fѷpK4s+ank%ܥ:A2j&{=װL	9VM{@-lz5GxnYs9S=TbO!ܠy,OjffVײlI"h6=gj-eB^1hZQKق8	PWjuMˡA&_ٯW]N4oZن[!wp%a-lΩE0[$EF;=Fn^d}eP<ݥ2[ZO@j:_2`"T+qYTrLMsN7:c6i͡
r6c-] /Ng{Q 1dH՟%?mk'ׇ?O:
'^5 I_AOZ4尊5	sIЦ-ɉ_}D= AM|S0
*Jt&t^f#G/}p2
|X7z7B|W
y3cR*`]%A+$9'(	rm 3A9lp_9/+ڿ( !,LL_{Yc4ƋʷX4#E3*Q(Fo '~7"M;DE?PK     A :?        jnasmartcardio/Smartcardio.classV_>VbXl 61J
\I!' Q-UW6mJWq$M|''V?h̛7o;>scxWD%]1acAx4x|*$x*]sFA+7wSFn,BЂ=Ke%`Y+M-3Y#}}NF24=}zVK>YMW2g3VB9$p~=RuPkn]D8wPF1M1ZQ%R}Z $a!_N_RSZV$`i@0	ʹ肗c Kp3V!SJb㮾H77*·^}INT@H	f! ☄8Þ䞲@	'ވd2jZt!Vx9--(ÙB"Ao`Zyի+Uz![+ޢ'pGx/eut93}vÈ'$< ÁzS)\Rh}x$!ɧT2ˣ;Tۻ/0𴈈qc*neؕAhtBT~ƹ;E5uzt}&|qi0x馥^G8œӱd"G'hp[Ť .`a_Ya薚A̝]E;qħD$%<
6vtjPSxm[AP<25EE#0|"%sP<z-.{zaoTёE_xGf$dӌ*;dhm(y@䄩IID8AZ~(4|&'.$2%"cx)P0>L(e6E1UL,Ɉ&	^FaSTHD+4Sʬȓ4gT^Fy՘V3*w3a-jT҇''K%Qvg˥S`&[hdQ*[oSuL-#dE%ұ&YK,OH͠/{;x5.\19GNn.[-Jisjc.N}/_fl-:!
FJ=qZ?]GUӚTyA"~j	@4gM)+E05|F3-u|_JejF㽫?1wqkS&E!<m׾ww)JzilEQEzy'.}T	"kI@5V[An"IE\
8+XWЉ[@?O"_*'[_ ɸ
N&gg*XEQޏf JT<EnDd	dd3]C0"<hwｂaU4^27b
;67_6pxv6pb{;ln%m	#zun# ´Nk;>BЁ/I+ثoKq#i|V|Q뇤
CV?
O$Q^Ǚu؂-]hGqd)H5m:&s{mcEE\J~NG7+M/]f#0յm|A߰+
ݞxڬg|[uv:NKk	h>(n។a@I;/2lM/l)vTeZ9,`bYd~m
~Cb-^k:}E;q2NEOmU_O0}mCuD goK{h/PK     A nb  k  #   jnasmartcardio/Winscard$Dword.class}SR@^*UiE
hT눿4`0M$-WpF:PgE^c|;|i<ЅC;.jMWmxaG<];cfV:Th(7XQnÐ6]Zۖ	#]cU;
eH3nWSH&qCݿcKȠ4C?-45㒂qDr">52dJR'|O/
c`\GY^<ux(2Pav@}z{,lCDM&BbvMSH(0CnXj{˷SE
CAP6.d
MU=%۵M
tHWLBI2p['֍֘wT/!YiTr*mg^7e[<G9ŭYABTiZ~A`dZ+E+DK nJ-DIwIsxN=ۗ>tr9{$-/[@>ĩNI$hd@6,$0~EH3RM-7q/䖏qZ };(0	~8J9GhH dILPPK     A wO    .   jnasmartcardio/Winscard$DwordByReference.classTYsV=7^dkBC6J!dچbֲ8bIIBy0[b$%O[^Yffs6ь}-ǿ =VдfˎW㸁L=4	$clF
:%eMnV5.&Y3IҴ(Uk^~x+ѧ;Z[mu;9nh}\e+ftPT!8 qDFAAaΰlYY"&^Y8_Uxʹj9?|IS8MzϖrJstob"wAd`L2ްߤ@'`r&$&K	fid\
1gΪw2oYq\{nyoYx5Q|Gx!e~Jْ"9CyCxzFVY;UeQGf_u\f#kբݜ3^Xd,O6 y]{L>#%8gr"b2	bquo@c_HvPVVm[d?G8%Z*L:䏶г	4$(j޶Cf#P]6IjFW~?ph
#-YLu!H2!\B8p8"8:zu܈_Zηq\ӵpkX{uf\En`|`
яkVp=|ob^G2i)-F*v >
\y	XCfFJ"&cGU,i]][0PK     A z~9    $   jnasmartcardio/Winscard$Handle.class}SR@4%XP妠-*"*$h
p6`0ɶ8>O_dO"Ȟ=;|۟ pOeRFwn;̝ag뙃sܪ:CHSWfC6(]eqV 2%,۠Ȅab!RsR'l}?vu[Lqu]/H*@'C]#1F3
΢!q!NQ0Q1@4VP8i[7Ls1c@1pb?8OR-yb{ׄ|	%1|fjbbvj\0.e(7,*IQuj$L.Ԙ0+7"&nI7FPjaq+o2Ʌr8LoNtufIw\öiKf-WpKi+ђ+47,Pd.'PڷCAq]9ΨXN͖*/-fם>kx=EtWٮ0O? O,S7y .JЍ1ø 1c$;Hgm=BN yx+-!=KW"7Ы2I1'`dM9JhMߑXNi!O?9/||b[
б+!o'D1lF%:
(S4uO5I<O}y,@
PK     A U8    /   jnasmartcardio/Winscard$HandleByReference.classRmOP~֭lT&(1.gfbb]H&a&~w&=/ys_ X,HP4f<q?q<Q8NW0(-cfAVEN4iA5}чbKµ	Nes8q
(2<AsqC3LFl\X͡*&5LCPKdaRð"
Ө0TizԈJU
5\$PRzCH4aPEfHUּ5^h:6oF,6=ww<>T'`XhLVPd^VވRݤyM}[<qZ~Ļ9CfC*n|f׺<mĩ0KA$hW.B-#M7jo`N^ZW?P  cq|aԍXsE$̫1skN܋(=UHnf,CƥD 3І GrEB6TthI0CeƑD9CrK%2HW..PK     A M    /   jnasmartcardio/Winscard$MacFunctionMapper.classSn@=<$Nӄ7y,XTQ	"8C:{\O/`S$| ߄N")}̙}L c k!<CyƏs5u^gRI!j(UXP}LC>k{7ҡT^֨I?P:|eTX;d1BLćCɳ~[:C,O43ţ9G58owsXyZjEhʡ1|!&t+_O
<P&2o͠G$Ir!^=iȵ<<s/{9K6/?.RE'G{ZK1QؕIP<`'d(E_6e_̞R"<)[K@Fm
h)ڠ!:_AhM"r8,1]	y6~t&VCӂQa]&]KbSxӢlg5)nD;J6vȚ4['߁PK     A %w[  K  *   jnasmartcardio/Winscard$SCardContext.classPMKBA=wO20@B[T*Ʋ<x3JТЏ<@{8gϯ WdBGIBuE8Rųjh+_-!ywx]gvBe)h"	y#C%&}=ڄ++L&<Dj>FL(-@b
`j59I2rCHݣl/CH|,悐Jc)	5a!-zed(_l󜹄HegQ6D6v"DTukf{x*D=ڍ؏|	>D/oPK     A ]    5   jnasmartcardio/Winscard$SCardContextByReference.classRMO1}&KL@KHn@z)F(8 ڪG1t֛^R ?
u	F
>߼y|{w:\hiNe2mFI{MR7cbOTP17#e
p1{u)̅B`#~zˏUHq>xǘu?x;~`/x)&^ 㖲Sf,{4Iqi:=T<2HB2[tax
!`</e|&?
CI~JC5g}8$U&NLƱ0CA|ZXg㹤Ű1*ٯIjpzX̋g(:!<͟gGF/h?o񮫱ERu6;D,2XG8VV	]UPK     A G1[  H  )   jnasmartcardio/Winscard$SCardHandle.classPJBA]x=Ŵ2z*z1BE|yԁFsI裢=cBڗ|{pj18I=H0FCdp(6 jĵT2a~)#fb/-BC떁r@鈫p84H%@|`䊝`Hj4)Nƣ';x;332`ŝ4e8C+ttDBk)%ϵC- S} ,yrti(s8I^mϚmEޢذ%ޟ#b[aiqbKضEB"MPK     A 2    4   jnasmartcardio/Winscard$SCardHandleByReference.classRNA=iAȫ{0J>NbLXi)IStkt3$~V@@2[=Tuxb5@buB|`=Teo2c]L7/>tM	ɪZ'ŋw!BL
H)\"TNaحBmŉ+\9ЦĜ	{,.+Nw2{{U{9Wf;ED[A>s0
jIS'|0XG2/3wƩcĶfa+U]se;9MKhYX{ܓxW8:}d78}397qpw͏=mrJChŽ365Zk}q^9 
\_â/a
"y/y2PK     A /    .   jnasmartcardio/Winscard$SCardReaderState.class}TYSA&f]$⁊z
D!Xaجq1Z('_=
-Q=Cg33pHCCD'RـGs\HAN[y\z
+Б` 
Q3Vޑʦ԰raGwȍ'
ܴ{䁌T`όJYM0تƐ^M+&z&r[P{(&TY[22&E9WbSeA CGUwz,U<A]Q!ZǐƓ;'Ƹ:uձ	piYNoJ?8H2̬B'Cy
øa(A?n<=/5CwJsnLSӇ.oLss2)ԯGY)MГ]cnqkԦDAҎ_xKW#P>6.ǓI{ 	}uZnɉ03#(6xyFfėhizҴcJe=ؒ@c׶mK/lvSZ/!1C6{
mlsok{^QhhL|D_0(E7`]j2d
{	샋8-g}j$
ɧncPLrSMZjuĩSլNU9pBhj3A~s< shHv[[\	=\eLƶ1]xiҿ PK     A 4E  4  ,   jnasmartcardio/Winscard$ScardIoRequest.class}Tn@=iJzRzMqp6!PZ**YmQQēt+.C BHEH(I\/;9g S!D$DczmXK˫нc0Ċ^!,g|L$&dks3BvO ЁV˛UɸU# Vv۳uی#0WvuVqiF0zF_sKR4Wǐ_);C
Yg˸ϓNgܥ鶤ダ"&pYL2knj.mgAHC;C*ƶVt4TH $$!3,PWݺxT-Ϋe?74SJȍ#۩9	)"D,Iejk۩k_{oo{CdݮR9)[v^1Z$OZu[Έϩr_?;5{
T
R=PyҚP쭩Dg7O4ptcgB}mg	x0ާ*i˲',S:!XU!lvi)ONGܤUjn4[Ur'џX3wwpGp-SpZRˑC_8?)J81+[\KB*Xpqs1da;×a"A55HPK     A 	}    3   jnasmartcardio/Winscard$WindowsFunctionMapper.classUrD=G&ih6дءxp'-Uhpk-oMd#C/(| Õ`Ǳ;iw{{W7  $Rg!7l7RHdƄI}'vm[B&'T|Ǚʓ^iOaJ1,5kH4i_c):[%ݕQ|(HWI0*M,f4<f'VҖ(Nafa٥%h^y<pDu,vjWQjr5\dS~hhX8D,m[nOc6-*9e*~EEy=\!)Kca2DaYل$<`WFdj ӫsղk%BX
*uẎ7NݦܕaC]0om:1\=sHGygJe)u
mrU{ƄjInTWUS)jcc<ꠒWPTeQ:F c8t^Ϗ@"`nT,u@z	IXvɘn׳DEqF'	_m>5ucGEzu<މPl3T
TY;TC=ݻ}~9tDfn)7HwF7ӴXu݃ntZ︍G1>]mR	ʦImE73z4|A
$hⓡTtS6=mM
ݍ18AU42Kw
=z kA#C6KDp^	ZGd?Gs@C HYT})>@%8uldgGdMY
hVWFfo\ťz<YO.dYO^0Z`># ?Vn-܎bzL(2_cPK     A F!    -   jnasmartcardio/Winscard$WinscardLibInfo.classSjQ];d:q4mm^%Q|%"BLz'Lgpf">??	>i 02:{}={Cx%䐷a(H7AJ(>RJF%HNED|
M7IGe	NXowu*f	n}r>:GOMӶuLRcdZbQBw~z5KBB?:e| =sh >9J2_]B|t|\0}<aiJVz;e
DH_(cc3q_uV*X%O`YM3\4H
qTa{({wƨyXaYAW
'kX̈́k;!t/9t7yt?M\źQFŕ6p PK     A Ӥw    -   jnasmartcardio/Winscard$WinscardLibrary.classWr1m%l	YX2;,eSp<VI5 @~9T1QYf<~I-~  e@
Ne
eQ]ͥ9휠bӀ6j:sR܂)DSf;lG/IEs-.W"u:r+js/\ǉ Cuc|3V`b35\\s9̹U]~pzK6_{Y}6k˔V-\$)Kl"!BA8Js}լmY!kk{.\\RK.'?jx,66*JBFN㛊ŋakgCj7H1U*||
n%h	svZSumR׭>44%]Px0|;,);ˡ-amݚ>s
"$ ׬f"{q-dqږ24#	Ǥ`)+^6*߽B)ߡLyގǮWԱ#ŒFob֣FneWb>~H?<W0!	JP]9Ucl	j4pDsW
K`l
'0ua1vVx6JC2`d;U⳰_yڋAN
={O18P.a8
5OpFY8<k'~<Df3pQ%mx
o"BCxqCǈ	E$PK     A         jnasmartcardio/Winscard.classVWW]I!JZ	H"BP%
%Y`aw7"Zkm_/9}j_sz= Iy޹3;sgwg z] {P%>yd}6viz^3گTuDZB 3F.fؼ.F4ٞ1̜@jMzX\
M;#YՈQr~ɥYMshp<xU+)g/,[ņiS6bS
s$҉~d>:XMeD{$YlU
\RpHasJEO~4zwNS2I($] ZP:D%8>1vcr!۝$;U۝8%D@h36)V)5!ol%m>9&[VQv,x/	;~fVt˖?2\֜h/GQjAl?N읝2gR;1Q@2 MfLڸlĳYSkPu[1y/^u1;vT(lT^t ua6mw\KH<#$FX_xwWT}eK"A34
o@mpkʟ'R{FU]Irӊ9칳yREǞSYrүd 	tuDv}N<}5o;]9v[C/+N'S#1bZv4>!p֥y)T<d^qrKrfZr%wຩ@ m̌2:j72:?S )mLvbҭMw<e=)FTxI&pt68:v7vc$
wa/\Y]͞-YCYRC#x-Ad_oi["kglwGͦ|-a;,X~+J|A"A-z@EcFLp#sWWM>W؂Iu\[ո׍=I
CuP}δ4]Ʈ5Pкg&ᠫS;CUtHs=5NvN-ogO{sEֻY_س|ZP>g\Crx}+	_@	s0ZE3_b-|J;wQL6\XS+"/:q?n<Q,b.h&Z Sxׅm2=.dHA#̋89|P[<g	%hh Oڌ| N*	
Xnn>IVp4B۝$*]R闤_.#IzפI!C-PK     A $ɖ  ,  &   jnasmartcardio/WinscardConstants.class	|}OYm2k0oz5vݕde;ޝYff%e 	`Bڔ&
MiZJmҔ6Ii4ߛyo߮eBk>H;}W sȋ6hh%й˘0K=֝e|,7,]6ZvmUۘ4\:`V9)V;Ɣ=^S^hpDm0@WC7LilGvنW6\`Elsl7lߣp4kَk΄
xu"N3NĕƱ,R8/{LN&0m0aX%cdR8@YSLۧ 5|lq
+0JUϚYv?	4>u>S+Τ68ڬoߨZ8
`x/!n<&RLX4,q)l 0'fz|v ӳٙ.hMfՆǡf*Zilv
V(5]qS4=muڸWuwl\sFmګ^wq
w0[sk֮6ʞȾN 5ɜIFy=Ie(f](ᐶ[oڅ)0nvkfq5뫉B-cdLO$
IgM(ck`ȔfZ6Ƽ7jyY|iEr:Np0ɞN!.zJ%aٸV0f
6vf:6mjh2jqpv;RQ_1TL4	]Biff9
M2Zӝ0\Z>FJ-ì.¥|ޟS!pveNul\+44wpJ	'ReﶍIhCxNRD*Gr*.=
M@)"plفx,'s'{@`
m::4]`boh}0JoQ#|ɭP2ѣ=lNS1(\48;`[plp)|z>SV0j2{8U_)0̤0xc/'D4O%)\A`+",bB3
Xf%XJm,сxM?1@|9p?8aO3,ЕC>Gib*T]6%Es*|YU{{=wBYl
7)b{t*9ySe%ZWq<ehba`<ئˇCvŏҙTc-v(I\g1N)0X664'I#gƶQ>R3F'{=]^3O(NbnSE{>GxchHy plNW/×ۻRcB/`G_-b0y"RV.Wm`,GLF1̧_	\v|krn;}X,Av؀Cߚ3˃$:<_BW04~=^P89\&Fc9/XCj4et7fm.bc2 h
_!Ht`4Tt0OD7C%,kR;XǘCCU!ҘNr=~&mo8.X3t'pXw|{YHkJcq~:b:H$(Jl0l2gd]-tVө77D.[1MɺViXXRm=D<<#L32FqNiOZÒ)
cSxGpp~x	t0)[m'PxO<.ͥi6"u>ќH<D8
#jc1#?贖j
?P
'Ś^=.k:k8FMK`4
+X}CWK"pVǭn0a}D̒S5XÉu*erz*=_Mq_tz(id
?W"'Y75D3;uw	nUY1,M38
_(7F>¯21N¯1Wdފ1
]F#HŮ)!afK.W]JZ	('T~_JŚCXMS2@ϑøY6{>Fmj%Q7Gf[)q!ptx8v++? )<
RrZxنՂ.+
JQvAEa牢VjK?_J{wZIJ"aIs ֗\H`Y}0L5>;]Eb'ʄ_\'וvd	I'U6toJ4j2S4;xgݔT}=\/%	⛦?Bx:%g('Uơh<[b9nk|ncpMgP,ѹa2ꯝzSeΤd\P/o|CJOkT.4~w,VyX>FjX1&ld6>FG:p=~;՗xw(ѥ;^ө!=#״4{{XiG	
vl2nxWI/	Sr,XpsG7>aOaaXo64RY=
֟kc~$'! a$&<1XEƱEOiSnJ)4H*%ȹؔ^͛tt
q2V,ȥv~1\-kv<5l<nQjj0ΠLIL1=KfQv3jھlJƕ@e]֋wWl!YR_hYZz,|2xA+>=Z!k
u\F6uTƫ?9p9U,aAf][{^0Lv=d
 cF3qv~sJC=z6K q(=HYk7ޠ0	oo\/+xft?d*AIhräú5"G,@ӹa&t6tf,c&N a/͘IVab֙ax}5¬)˺@ȱ&hMftQdo<g#G?M'o#N<ރ=|+(yci;}1cX1<c>ǼҠr/
YK`q}?gL?%}G0˞E;hßYP?)
ngaǖ>#|n(oF,XO[jh0 	a
{/㫑t"_p
yP
#_NdS.ǑȾ.{Z#ߤ
ȷ+|+=
߅)C~@"?ȏ*S
?|Pg!W~k
_GD~[o#wS]+=4



+¿x߭[ېg+܁ܥ\c^|"/VXC^+^|k>y!oRx#pBS
# +<S
qG
Fygv(5Nx!!_0QᛐoV[
Y/r
c|"ߧJ<O#FaG9@<!^0teK@|9K#x<BgGc~̓{EAg67#2<~	E{4PdQK'nXIŲ3h8E6hAiaSаT4̅}ArB hY)[ղ9l9=hYq+`6|rx۞4\@	U!x^d.m y7I܂B-Oc3~
GcϙӉ_
9{	m_5h#/ֿGpb,3
v!B/8ec4 4NCBf]hvm'8B+0*
ӨYB[heF8U2Ʃ*IF{r]*qZh]#4N	F7
BmBtbt8}O>'4Nڃ/
F_Ǆ'i=9qz^h(4N_ˌ^ׄ:7wuF/4N o2CqzKhfB'B
ӟ	]F!4N)1kq:
GAhQh?fqgѿ
ӿ	F!4N)_2oqчBcE HH(nzg*ۥy#I=R_hPr>N uIRd4T9ztFgq>[#8zR8*+>qUR8-mRxwpDnpzErzws.I=0/T嬴BN؆0vC|/%U}X_J r#o8	XMi1nPn pJ[pYF ~dT#0qa2r<	SoEpUZۜ=| 7k߁k?Z3ᆖ,M-CpK;pkp[kz&њ;[= zi}~ u}mN'ڶĊm.yOiUzV_PK     A            	   opencard/ PK     A               opencard/core/ PK     A F    %   opencard/core/OpenCardConstants.classun@@g$n!M/hRx@񴲷U'n>Y].9J5 >
1\xx?~gP;@Q,m@2t(Tpex0o"Vu
r@ϓyhza2,X,O	M籘=\(9Őft|ոO`]쐞~PCMæץA~%gdel7q",<98x2Xّ,E{+E~GE![cgcu=<UU	Ju-3mO_xסIXp{8
O7f
qi>6VVvHEg$;hNx13N4xE`wV.DJ籼*E٥o	lCLb[+A`Fy$I*^^<6&6wTGZ 
yI
W^E^SxyS-㊟ (O~Bȯ~N}qPK     A g\  r  %   opencard/core/OpenCardException.classN@- ܴ{1!i$})X]R@}-O$| 8[Cvf|3/ 78@҂CrW*Ѭb<*`H@NxpE
C4A 5ap6K7Axw(.éaU(&U51j'la[rCҘ䄡0X#1~dZۙlB?g[jQŵW(aGI0tf(샒#OYf!<E-Hǂ*M99UP\PAg(DȮ]
Z.IrʗsثgjjE'bΊ8$(>PK     A     ,   opencard/core/OpenCardRuntimeException.classOK0Ɵlfu:&]޳.H?J|`y~yϯ WQC݆堁&3^U=*y
2bh^K%	CƸe\-f*gRZxMۄ[t!:T.OB?yL;]?
yp-M_mZٓ\1c9YE1(C{:ҐOb07fC݈2ފ؃R"tG Z`BJmװF,G"js
PK     A               opencard/core/event/ PK     A [#1   E  $   opencard/core/event/CTListener.classmJC1jwםk1.
4$6)gsPIi.p6[چȚkI?/J9*	Í.Я
ۤpE}rfyW	w^p:oPL?-Rh:M:Λ_\Ʉ_|D \H]w$µQmyqMG{PK     A ^:t  l  +   opencard/core/event/CardTerminalEvent.classUmSU~nBذ.BKA-y֗i%	6&1U&²wopO~uL;kɇ{9yOp? a@n;Mkeǳ;"N<0|r,qa*Y5̬m:.o\)UA#t`rqorL[|XI'S00ExMp:
!pB!Fi>UcSgR 2[
3T״³dqg
ypëyڜi\${ú^2pY5b+UϻWlXb$_%TO42NMOڣ
3%@:_9	U_480[)<,UZ *iwxfF`T)׋0la(hʖ:
̆MDmv,yV!cQlRPbE1#J2&$@G^mӬZ0җdD7Rfsol
~.[0Sa|u/<ŎX09g9>	ss,of[tzlU5|.w`a5a9pŲT!i_(^]~Gm~/ț]%^6}.ݔ<4<}F"6QC%t|~'9F>gt9DtX:7yz}ND`aq$Ї!p- X)g-5/I.TV!FcHÁBgȣ@V6ŕw00Oq]P
eXWPVI?A4 bПr~NL~=2	#+edX J*2kK&wF7M.QU]dC:XB]CID
y)
JtDâQB*cާHZ#f^PK     A C    (   opencard/core/event/EventGenerator.classW|SNE0B(DE@[QP	qKK&]rS1&t&NcM9u/ԹMvn>惩wνMK:s`p"
n5H:F3fp=H鈙Jf:=}Q@d<Mf:i8BxLex26q~Yit3fz@iakF)گ1#gHiY-]7Id|D$AHilFf<\mD-`JGh	7"ؒC	W[H7pO婀cqhxM[Aq$=TQa&z]"kQikua46s0[`aDz(5)[dH.c.	gi#C5N*ĺ|	>G]@Q?
լ.tg`e3%b(InF1SQ&ƦTy.OcL%O4aDҒt؛J$"	##g[tb9$
$DH.c%V	hl2Ovr`su59*m]i#B<aH,_|IaGǌzXH+R;
Q)VffX1jJJ
A=Nw8fO9Z4tHg̴R3
98<D26R4<7nvq1#*[F'"SCVG.~
cFGsTsKݬ 9
 ^R'`/>%iC,R[u\*,57ɹt\+8gӑMȚAU:>'Tڹ2)/FCKRi/޵6Af] 2F,0?DAǗetuF˛4HWdY&diRҹP䩯1/`GhERNx4&Ҧn_Ew&a;9ʖ^qv.aQ*߆D$!UI%
N\' }xGXt(00\@R1'lOn ǭ2#HoM3
O:[U3H:.Ql(g{XðFPdSiK)[qW:*ꁾ9lrh$0M6#eD"1O'AW_Xֹ"tS!MYzSע4pL;֡svD".B[W.MN -P0ەlhBK[՘9ֵ״SFn\nma,&/S	2[ʦFs\\62fKHE)LGz[+x
[^>J"`Xso޾v],ƅe$@Ezbe3]
e/7/N'R݆]x씽K2i$#cl[A͡MDbU4H=dT5xk\8,U5!ʸZyvCc
p'?tɆy'TO^վԾq vS ߖqwN0i\kvC1RN
Hާ`(7#ԁ	0PArw!HQ^7O-d9dm~=!=]¹\Tk Ǵڃip5[.)r lĺ}]ٍSTzDCPKjxpν\0/E*O6]q +RcQ+,p&hY9<A0IY/Dx\xKnnȿ'.%ϡ>G/$<x% GFeoWhFaAP;qWA6>^]/$c?Dj{'w;HjnOnGr-6Ċm#¥hv	?bnqtZࣂw
pk/R^臯SwP+wЦ ?Offr`"MRbf(}Iw?J
/sўB~0/Y:%D{_/c^P:Z403nQ2I%C
Qhƃ(;;QHfVWJAm㿨r/.gxop[/mTx+ӊy˽HV{Ol((y\ᖕ]+hy+]*>4
ثXe)kv;FQ>chd|W*Gr
:f
z-6O6da1	:Q{ywLp1.`LY![e/o"cL;4"F#K\jtGl|a
!nbR%lt!BInR
=b',;ۻTG잵_eZ#۰άS>n8!A\}8gMݸ\/'Ž+x sEVE H<੗)L+3Ap	{,UZozZd萝XL&TTRgQDb&?$,jp#ȊIpb.I1S]4);m*sηR`٦;DدR\џjІhuv'fG}3jY.qEݍo0Sx(W~
Ib)x֡8ǈP^j{G]{b#śvk
*,VB÷ؿo
}US~$!?PK     A s	    '   opencard/core/event/OpenCardEvent.classSmoP~.vCj+ܪR:|KP&DLf7JټK%+MM4حs=y{8Gx@(2y'=N~~^(cd
ZnZ2C;;E(CQq*C#:BߋŁ${r;Kq$>``KIgッ ڪ*.Cc(%Qvİ2ن2%Vf4F+enq*ְN7I i<L*S:nBˠ`j3#GP­\5#n;-gnpϡs.Ca'ڊ`wo0ް\y#oۡb/thҨϰ:ONOYMhx%ZTBED&EһjZS0S
٬VZd5><AOI=C[@7$T$xhrT-t[sK&XY'{<	6zOH!X:^]:TrA*6p"EHxPK     A               opencard/core/service/ PK     A )ы      %   opencard/core/service/CHVDialog.class;o>sNv&FԼĢTԢT}g0ĜtvFĲDļt}F"FQ
OM|pIQf^5#Wp~iQr[fN*#<=R6FFf`b1I& PK     A .  $  $   opencard/core/service/CHVUtils.classU]LU.;v-Cu.ʏhwgu)PCfٙu.1E&1&	Bc5Wwcc.Ԗ@{=;|眻>~,PBP Ch$lÙOL`Z%Up C[ixلz<!NfR#<&ȂQ,~zat3e8IT	s/0CCF&
<TeEʂ_2"C$y6ǁص 3ԏ^)=i悊#"t0d\G٢URnw#'fLC\DvEa8:$ЌVdi2#8ED)y.˂&e4t#Pk[%z#Dł8
/H2fKiPJ˰_pFl̋*Hd9!HRA0PORQc/&gyKUtXE-Z&tIXuuSrR~{ƜMƌkY\*"gB/+[C2C!g#Gg\*)`iژ9ڤbPMR
u09L	\7
~*FB[MQܒgKRIDct]QQ"fAggQ.\w\K	YC WBk*f\gx,cyxFS2@E|p6/vd\wT؁)gwx6C۞'*p/e]}l[vң#N!:%het~_؃7諕pIZkE7a:ƆuM?*>@p~R-'Al/
7ZWu|ch
w֟JQHZ(U+
[j)#ӫEp*ޚHMhusctQ'CÛR+.>tz
mie9}5wE:G:ƿD}rp}C?D9C9I`84&.&`ja
a+g0oq?t	~4aU>{
.~Jrw,FƯC'F~?NŁXc|p?d-p9$IS.Q:hw7) PK     A ^>	    '   opencard/core/service/CardChannel.classXw=[Ҍ1
6W.b	
6Jғ=FҨ3#ݖ$wtt_iڴֆ{S9?$}oƣ?gF}w`+މ

B04L9<1͓Cd3]c5PQ j3sIJ$M:o$y Q\g4;c:g?׍,q5rz'AlPPDC=>+DiAiX*5DֳYf
˰Stvt3FJ=V`%91''%LkΤ{{F$?UhS
q^cI2)i
)QjX˳9>`R(3E_drαK<2`x
:4t+u!gp8G@"]Hc9=Mxt&nl?WTn8,y`maC$0ǽUG;*S_hۡa'UR=p.[EǸq%\~RnTc2T]Z<CcTefJYkT͋47fJ~
2A'sDNI`ľ9Se%k1baŔn'q
AΚӵ؇C5]󥊁
Q[*G4X:ΰ)OܖeyӢ7O,?2|(ɚ(bsZOQ8ǅ3~ⴆq1%EyPq%I`K!빙,,m=cq=5#TBC2cL:.I)IU~a HV|4Sָ	a((SAEcXV:in*!1pS{461X?
ɥhQsܯ!Y*O'^x.fww#*Oj>M[:IǴfh6?W-c
)G?TNp>ۢ3ce1L4bi'#jŶ>,躄'ύy38!/!gL
w97jװ㫓>ºx)b,"J2}U<')|@)[@`m/nF	]K?rPSRw,7td
~_)tF`NR=yә
9?fUn1t֖2_Ǉ-}&F*	VP-/4Cġb,8(F9YD:ܨ̸rjZ4fAmHf+@4a$i
IHii:6m1QL)%q!~&:TA/=yko2Y]_G(?*8G:h;o/ǆ9DM6uypO$x|&˰?*ALpDqhBK|n+ǢLUw
Y[]fa݇%N%K7]݀qN_/]onB鬾:h?:n65lu	9zv"Jg j0%8BhNw$IȒ6LĹU/Ј/c3L:^UE$і0T	=(ZL_A=tmFWK%.Bs bCeD!Z?xyjsx)s5Шɽ<hAlpjqJAw 5H#^<]^6#"kMKSnBCש6D迁o	}S7o	=÷BChwƍ?ɧpqWķ/2֑|UdnGH;-kP;7Rs#{]_w%/cCŏc½$ΟgRsn'_%ڬpoUX_{­ᷰoKD/cikM)i\#Oe`4UQGOp>)h
I
c5wQjbuhfhahc˱b#[^;Ylv56agxuʈ=MUK!Ä
~I_Y?~g(`RBh#_הTi
EdgQ
~:[USmnukO>O$hpMζ"ʶmJև5l'6]~,!TlXi}aȼo#R4{~ P@G#$nKI@MȤRͤEɀ"?`	;,muq0Y2ST$v4<w
ڃ0}6-GbF]={bIq+֪4DKa?9u3G92HdeBQB
]=ޣVty2-?64Qcm<ZKߋc̼-cvwei2ܓ}EƓx@PK     A W      (   opencard/core/service/CardIDFilter.class;o>sNv&FԼĢTԢT}g[fNIj;#@VbY~Nb^RVjr	#wfsb^JfJbI* 
T:s3sfYkF12p%DDd>##30de`؁$ PK     A )֥    '   opencard/core/service/CardRequest.classWkpWdK-*vb%mYvmҸNJC
vRlWn
嵼J+*R- -<#@ q'3o]=,f`2Y={9^;?p7^
m
躢njdhiKwZ7t대76@ ~"piFZͯ$f^KIk+}y=kiygvM[tKoY$Kba:?=܊(
6`NfBA 4[L}
1  fjHB*P0 k*.ndZ)>v#$U"EL7V}4@<Eƺan-Uښ Et¥ KbR5G1aLpe3*SF͓lSv435ܳ &YRb[J;%wg}yaPR9OfL/<k3Bv+Y)#(o2\VՍh4
V~E,V]}E[.fM\ănZҤtk-T*pF]@ ,`Yzo RXaȮ-S-`>ZҰ$w(x'TXX+<
C .WNF*`M|&뚺'VʃtI)y{hV)C.wL`o))Nx8^zʹ4R\BH+@nhZ~Q]jj6u^;6kM'Z7ɉ3xtL;BYslV3Ctj!ߔ[w<;J
ٻX#un)~TP3])zaꬠmH2}B'JI+JryN5jnj92_4xBNMiNUACJCb-5翷$PYQwJʻ
NgS>`i@PtUQBiӴh<9Z3W
|D,"WE>|9?ckt1PnOrþP͈Fjd]0bn>w4헛SDRftK㎚1-/N%~|K@Ԑfҁ}|[9tр}.T-O5N*K(K%K ;(n;ܤ+$o;CMޛˏ/{x??yy>ܐ6yqAG-n̓y!o8EWn@GFo#8/It
bd^l|||}=B&H}2ɡ{
Pө>ǈJA)F~ʪlՇQhxܱk=}_+IҌbop| tQU1PU$>좼;5;O*UrVgt'~%Ccx6<:@^%!iR?>276'/qRx:c#0"O½84:-/I+
	=?Bßş)ڿPioÃB>Rlwa܏vϾ{0HޢmLǑ>*=1LLϪq~B̳NnYia=ɖ``xk_6GWc['=}ҙhUډЎvp; NRxxB? (g[<j]<˳A?<{/^}U{ߘuO Ok4X?@6`F?W#ve}	ab}X
X7g=Sf}[s:ch)>f=RkYh`o֯J:qjG֧Xl0t9GA"7p{!WIYsx|EKE|LUoۈPK     A XA  R  '   opencard/core/service/CardService.classWiWW~n\-*(	ԨnPm(*tadЙIvv9tdO?wI{ܼ̓`E@PBHFS
JPrs0T9
 	ZI-*V&5Z"I7i'TĐ̑4kd1-74kuij!Q,rbDSr9`X;K$ؗh
sav(JCnLZfAhd6⿭fQT\߷xkSXa$+S}Dk)Ht>jLV6agK]w1%tc3Bv, #>˰#UݱT9Gw#%OBFlbhPƵIP3F'Qr]& c'dl6Wn CUFe6aa{3{d<ɋYێKiG7^My0=JtԻ$aܠ2z5UZ_Bg/<TVf[S*
(L	6f.CWBQ=d ƱM3T3:5í×a<+#aǜĥb aK34ŞtO8!ٔ" sJimux	evG0
UBF*STǴ.0d5g:K#4((g-u!ՋRzN;լʨWcPt]1ݞyEm͙uiGQ*By/>[&c!HCnimsFo{1J.)gg[Oz`/>HԗHErh+PCܜGF<k~%_9B|J_9ϰ!
R7DfR>mxNUi:6Ƀ3ff0eX3OG3Y%o8QVG<eaOi=\thbE0OxX;z`k^p ஖G"WrCR98(?$5(-QAuI2\P+gzi"|d;VbH4䈝vJhEφf
3wo-H|K_Ń̗m;踇
]l=FkZ/QP%'06ZP lЉRvр<PI.wr!n đpuAvk4[!r		CM])v<Ӝ|Ӫ%|6yÎσ>j)2H/T -g 
8O,3U9x8%kv
u'K{xON"-E#0,cXh2fuhc+7/Q2qDP2i8z n:B7Y|_㮻C覎/-SH0p8
,N)7I2Ow,&/kCC-[Of:źmf?;	xCr3.'j4Wa7f֓1ZƬsᶐS8^Lv׻oOe%l-17Ϊ5zW<_&>a >L#Fhac'6aOa/;#G!ngB {&uUaIҦxc	@McvSg1GHe!
.6w>9U4PK     A ̅d    0   opencard/core/service/CardServiceException.classN@
(
@MFKhD𡌳mc9ogϯ Oc	F&Hx.W]jPuXCRzr\gHۺ{U%O=^nzXDi;Am6=L T5|n.wC֑x;B!.7q_UGn`|K1DV	8э8:}5$5K)EF,(Y&>slQ MQRNf֢PؠЮ]w4\UTgH/!F؏̊e:+`h
PK     A z_^  
  .   opencard/core/service/CardServiceFactory.classV[SEeB$d	I Wv!Y$lHq(ue`vgfhwXVJVa<(e<;,[|s9O 'ee(°uFfe'f1(
R-JQQQŞ9	vDμD7>Ml*1LF8ITLbP%P7dXYyVlUȼb"a2l{s9;Tc'CUFxݦ}6ތ\X	/A.42"`5sOb2gR֠Mg5cIO؋&RpeayrYt>8 @R1Lk	5EVX+mgnQC/8<i)!I6"EYp̜8?pTh4jjU<ڬ)4EÛL\w\,݊'UBg]kd,m}-ɛX-}N 8rE
8˰kYC'{v8z	LSd4Kׅ^ŜGߓT˅k[Π_ Qbnhqz}C*ge(JJqp(v(P=IVe'3C%cfț6(EveZM5m%	v4'%>%eֆ 215 2T=ME
9r|C
֯H#+=l¹dس~L9]$
B\S
*5,͔*zX"YA
m#O1u3x!DvΡ6|xK{eR-kba\BQA7!MQp`lkޞABWy5kA۞%K;Z˼||&ѭfU,K8)M94
PFC5i@]th+xm}Ԕ.mU~o9Oͳ`(5	47[C*ak<W,"\ʮ%^@SFL4@ץF1P#񦴭Ԉ9F4P0AaGhtZIWAsgL=|>n!ADCpdZE%Z"B:)B9um-Nc$t6`47ng]SrP叠p;VFם"s[Z֡.CPnF*:PuT	y),:F?D
<<.l÷t=!;D#OJ[kgg k k k
:j`&5Ǥs	[Y,8=Nh覯mY=»phe
E,*kowe+ȏļ,˸"f*e%FH/PK     A VB'    >   opencard/core/service/CardServiceImplementationException.classMK0Ɵlfu:wOnA|PTzϲP#mZn<
<Pb z-O~~ 6,-	4Q5Xs{S=	$h_)	As8

hP:BԋPBFQhcrC<Რ凝5M眠Ɍ':琉!U*ENppL`'<iTZA7H{aO:Y9
uݝLtn+zKJ|֕SÎЩ4ڶ{p%RS_oPK     A f.    9   opencard/core/service/CardServiceInabilityException.classAK0ٺt:z&Ø
xvFڴЏiQP0^^3;hiтIpfLT.0ə\9s6b0QЂ)d..x1#hnhf?p:1h:-l41/8t.nL V4z_7^S+ayN/]ʐpmu+D_!lj衫hXerky)Tħ0gmʮDbGe
h׀Rj9:^NTʫpPjv+;PK     A ^q*  (  A   opencard/core/service/CardServiceInvalidCredentialException.classN04%P(
"@v7QTNZLx 
a' ;~x}p t-6z0	|DLeƹdndcj6CASvesA`^pAw24mCID+fTnXJ.RoY$~uxK0Qr}q4<aÀvZ̙LMFA,#/.xzjEj+|%cvõ'WV݉D垳yTlg0pmUٍC쨬0SJ55_)jAj	Ũ6߫PK     A v,  )  @   opencard/core/service/CardServiceInvalidParameterException.classOO0Ɵ`(`jLhb)2`H7'~ ?Ac>=i:J(p*ҡ4S/
y	L$(D9Eb-P(ҡ@3mQ5v"g^gŦů.7:I#甒b)	4}v9NZ~h,~=tG[9%|o6q)z/MH׊a3Ua͕
%޲m(DhbfրU;ZNZeN8(TkWh{OPK     A J?&    ?   opencard/core/service/CardServiceOperationFailedException.classN@BQŻ7=hL
95z})d)D3mF3;gf?^ \F
uV
4lHeFKe:R*A>Gj,h^T#`2h)-k&2 7:ahc[W2
&R'jg3%uV2rPgLBi4?ꥀѣ˘?hDjl)Cp(

gR\^agR)Eb"Z`DJ6
kRRU8G0?(~PK     A K7  )  /   opencard/core/service/CardServiceRegistry.classZ	xTuyc0
-+ؒLl`$D0$
f7lx&zSZބ1؁4M⦛:N&m.q8M{3Vs9{~ ʃ>!@Bx{5`fmVx#L_ՀWHH&RkVĻwmLDlD"1}0_b&Iw[P0&sªIZHȪYfg ob=㉈jbuJWvpka#u2Lh>'Ŭq:0Ä3yhJJ㉎dm5z΋YQ"ّucN701p.0lmMuPC7	2-jL7BC"0zє] {UunZB/WD`zWp#v'gZdfiu.c1jel#8/`iۤ68;?D-#ö]X0ZLH;PNEE/*E1qƋ/.F45IPKT -,,o4KĥX`:hڰUp\F3A`Z
:]ֈ&kL:y(	ALv:7)&C
b\6AP>1WHe`fxuHW0k(S	bbziTw3mE]$E*`u\-A>*&"D!DڽeWJ1g#F&UD;Y]#BC4[JƣG="&acA'n:%H.A(gkq\3duۑx'QtV՟IlC[U$]ZzÚ
֭]rJA`<Ne:\:)L&eVfL/m!%[JQLܬBA$/ae+/*JPlЂL܎;.Z\7;uNJ#fnh`s}b$,+k0p/s5q{U<g}xCxɡgf9BdexLy?aYr{8Q$2Ws`vGIفV樚O%Bgg#M^UaN
><o&y\L0WC̶:TeË&4/0۬}xYb[5O=(w.]RE7&1ھ:G-/d^ެ@bf%	FZ._Tc@̲;P'
dU@͉2&0qHu78J:=;eT*wqGMwFkJfJPҿkO=HRѬMYIO=bV8\܄2FV7`?U('L1&I`Xy$;H>_s4"Q[sAhjXб?6w&~雇cayS#aYJ[NQ ?7G,Ÿ5dXKmpsvio&~Ɓb0Zuԁ
>qZAyd#GHKs5:hMkJ
jqN;'L|r'au{LU
b~!έSN^'yx+*+N̡{WRdO)#c1Xugtԩ&&0xsu2Y >",2M:{vU'7Ch^V*jtĂv*P?Ny:
ɘi,Ǚ-+
F[.؝@\@ZyskObݮt#evJTS	%CӟlCZ:LsGC2 CC˔!cE\QiiAsJl)b״s e%wV||J[P2,ù|D
Uݔ#\
FsUSFvǩ
}iLi#ڙb	V{ݑa"I'7
Q1m$Lf75HYmr^r`HŌGEݯ>G4ӌaXB6,3Nze9MHri/I,Su@O$[Թ鵶㉀[%9ċdڮ$6,v^1 @w"N,-12"},E+>K{"ޥHIG"kI"=C8XڃJVq1)8ba~Z]qpo3r.+ZtPo,};b[@2}U؝˂Tr/&4[nOQ.E`H	gA}p
ǭd@Cl|CVGi4@݂5ۦ!HnvN	Eܠ<rOD|j yDb=햛C?dzǳkK$'&S|`8|
戭
61Jr/p\r`1f˞ 38L.4'pVߜ_W#058ik(}KN;yxIo54n\Ik)dnJfst69Z
r+,IJ
nY:x sūU@u87|-Q}#:xDȹ]KJS̥y;T
R.|G*ǒèo:ueZo܏*B)s _rU+R[/|On/ԇ{(a my腧w{TfzܤQ2$>EqH37q9؎Ѝi{H}/n}44()ԧNi!g5yUZGˏqzy/y+
Y<4 W|?iɶ܀ŮvYùª~i/ӏ^^k(&C3f6=H=/(C?/T;r%!s{#/w7Ax
h'ȢGZ;
,7:e\WH:_'^6~M[#|.e7qT{i=M3B*uH!R-3>|?oEΒuYqǓT0Pl~Cm4b/b zS՘"NYօʉ}fye3&y_||.>GoP
/W^EH3Nh ^FleG	r0*b`=*{ܵrx£hVmx8U;~$,'hp>#q	tH>'IHs}={@|xZL엉xS&ᐔL{2TXL'2C"O]ȅR+u]598Cy/8\q"38=Tl|P( 뢰h
bEbrw}c&E,n	Q7/qK%JE5 F|kBp_XFlA 4Ge5RmqZV;
KR٣$zAy/WVaQTlkRkc,yk}K
܊*I׏?*ssY^}(++x^ES?LcקBTYҰ؋Ӂ^*/a_Rل@@걀Ne\-*_DXVZiw:<"W1Y@i>ـef#W
?S	gҎ򊓆 Ia'dw=[-
:rj*~)Qf'DɅ#]<X@kL
F/.ffExOCp	V!4P.յ8%?5,yT	%lJUJu ?RgG1_=lGNIT	)GQYU~4/2}ob_L[YwȝPEr7BA܏+tCCYe+2|Y͂Y3eiee=_?*_̠l!>ݦ?;><ҿ3g\e7tgP,ϢTgzAkphzJ<yL289TPЉ:,y)ќ8i4Cx<TU엂RؘsMUnW.rk*K/~1Keg{O~X/S2ս) M,2VX
W=nn<y'0}ʗ2},u)ymxɯ>M kRmN(Iu5zܪǰةmz1n=&hG;xozYq+PK     A Ѥ6%    7   opencard/core/service/CardServiceRuntimeException.classOK0Ɵl]fu:g6"<L{z*
VzϺP#m:v<
<PbyC
Zh[0lt`fK&"*NI<nR<e[<5ڣq![%NBE"C?9+1Guc̲#\23D牚,IH%}34gV{	 +e6:u_ѧ?WE[uDd
V]X]ĮZ>TրnRkoRzV5]cPT;PK     A 3  !  0   opencard/core/service/CardServiceScheduler.classY	|u?],á8WV Na@ aΨfI]uwNҤ&isBqmRWIHMNsNکk7
d~07{7_ kePe5GǣhuבN,'ِH%rM{!q64T,5d'bNk;wuWω&&ӹ;c}TI
v?s2T4EvMM1	Ne"}1S̛<Xb{{L
f2Nʧނmk7,nb?E2NOV_ͱ1Dh2qܡE*8N^Xhcl.ݟۉ[X"b"3K$[G}葤bTf#N8Y2GlV/DF6VbÝLjBLok6ٳhkkb
n:<,YrDGή\jk,=b؀7	fG9i:=/*rf2jah~ΑA9ýA܆؎'(3JiLb;prQ;
7 vZUXJ
݃;,쵱Gg%ަmNDsi-_{\<rTA6t&9}+P$~M:R̶D9D:al|Ѥ&pu[{ qWD*<uԩ=6zd:lU7`L¥'8f#'&F1ɒO9liչL4(fldDՉh"gaP0)/38sB<dxeEtFcxk0
` !t(LYWYEN<|/tª!ܓ΄}*6~SERLJ=*IsaXcA=VmnҝHTk>bw{Ľ2֕A	Yl| e缸4)qqS6N8YMi~U~ǖ65>l<ԕe%pKx ?TXTX|bJ}Ò-`kU0fYu8-)L/̓==NFr429	QAEKXh1<xF3˫eL Jf]$D6aD W+lzh _#p |C'<^E?Z/5.jSJ9K;l6"
{*W>K
DA<+`rtPjA
)&~y:J-P݃\eJ&nWEB:`!@|Rp?ɳ-a'uP)86D"Փ6XgoKY=cWՊѐmYu3$g?X
=pJO<g6?40^vIxT|Z:^pg{Q+ޭo(`l\[7y;֬ň_*.toJ_Ư,WJ'.PEH'@Fth`dW{M)X9'x۞'u&R;űhro4go*ח 7c[d
\QDVرO`P[cLR;m/L:Gkr6*(Lq$GO&bQ?y }̒ioֱ47j]1d>wgRd`uOZ2/f,ӗIpe롎QN:$ym}O1h)Xԍkwxol+"߂FHP|FS<Q UŌ
c1=,sՉYUfv =*ϥ
[OXn -atY<
O+=rL؜N؎;\_:
R>lX[_%(&tY2>4r{ڜIuCWۨN~o@:sʌBäH9Ȥ˒9[ZL9^I?}-#t='t@w&#]X3]fAdLva[Kh}&L53Y\3">WukW7{99oz拐fyVs㘠ZLzǰ4_8y<r	`=p+QF!lQ6YyV)y r%t5;t 6LD7w标&)Z+؁wјw ݏ^=⽸_65Oڸ[>O{ZƄ>"Op#oQjվh?>c%:|{ф3X}.hZ5Q;Yf%~d8Es}PkT3zԯn_]:זxRs3,37ۮ0W񼺁[+6ZiZWQ1DT{)nLRκPe5/.➴0UBfQ2Xi}
ܯɜb2szm<gѰK
q%='T.3D;/],n4mֻ)0\uhC[	P1g>az)DIcVOX?>5k8Kq~x86`LS<%2:%SFLpǡ6a!7'L?6>dƸeʻFETg齚b
.:뷋	ĩea,XF
WQu2eJl櫦Jbv4?̗*odÝUiVuv)>Z_f#2a`}뭒-	n)	}?qknuYʧd&J`5&4f,I7]n͛p;~c\q0PldA"!uP+xԫji}2*Uy~!^j;&Œ3_\_Έ+5"ꛂe-FS
:̗v'IT-t0*.|3#ܚ^8lq0]zDzOzKAz+=KMˡg7:sEIg$ta_p :%n`$aeJ,W@iԟ^((>P, 2r]%w`c,ŞKPuL*L1V8wfy?ga7Nv}alkHSކgg\}wDy-pQWBY"'ؼZ/MeU<}v(r+&ןD_Ri7},LyaB<D6I
DtDFiaI_J!O[f2i˓|s:iAԪIw_3Y.L.b\fs+KXY{Ѷ+|AcajOM!Ӿb`/_32.iAxY)LjR$k=ַzjCΓn-n
_'χCn{u[}fwBOe`ȗSFXm3G5
?p#	1SG"]>e?_^ٜ$wwE7*~ʳtsTTy+ $/_c_:\!p*{gl5*C
xj0l%E, oqKn6![/mT<I
\o5\vs}6$%w>?PK     A :@%  
  5   opencard/core/service/CardServiceUsageException.classN@BQţ7=x =5D{_ʦ[-D3-1=:J(p*Oʄμ0K]PycLni2P-2Pʝn-I7&&&tޟ>8d6vO9uZ~y d:JO
Սf_Ag|9σW	'LAʂrxɏw(s8$إQe6)Y[흮~'Iy
Ն>ZA~PK     A 6  T  $   opencard/core/service/CardType.class}N@M8P|j$HE/BE#E 1[j1H}^
BࡪάM@	fgv?>&RH,@?s.^L^*.Yd5`ZΥ:[2\iS\
h
̍OET:-JtrAusC`e^Nh`_ůN)yZ:ͺz|OZkQ(uTF16=L
uf%gCb+n3٤y\!L0GOߤP]HۣCg9BŞĵi*аYcʒ
-Rd-^`mQN#:q,&0xmv*VtҼ [;T+
cÃgi 7@2ovA
 r_\+ot.(OPK     A z  
  &   opencard/core/service/CardWaiter.classVS\~,{"	(%l MlK5$
.Ć4aKVjդ~Q(8NL3cfL:s]va!	~?s؇?QZu
l8m>:qZځ@;;GC	wVmvۮ'}[vsgr	I#K<)eM `*cLA]G¥śMl­
9מ~gs4fvJoFz3N~ږ)jPfW	h[L܁;\ΝT4]oϝ{;Rq܍6	غsFS;:V3]-jfF;neK1'|W)+Ii ib:_u uY9Q-k)m8?4#hII,[_e>XI2ւfŨ>?VͻsjOIу^?gCƙn!m7t0qP)h"Q5WяC8F!^厎j,K)K&'@j=ISluI;~B!J[V*GM㗐!1&֙vhPI9kA&@,11\Sj?jgwW4\0l9ޮMd<9 Na	ٌsĲ@=O,B
9:xcp1J@ݬd.LH/cM>l+7jyZ6#w
̅A籽+3epұ?.\!Tf؁w,Ygu8'dfsφؔU0TQm۪[}+%C<]ɌnKCΕ[lyQv*V@\7Ϛc
d\IHRғ1!:TKǗr"Qv7Nk&KƦ(~[xyu!]]PiY*;.ocsX*NfS	ff7SK*\nH2@SeU8Rb2#C
iǶg/#EzF|p#fszqܛ")Co|]2_$w)z'间V? n!Zǰw,=O?#ǯS{uL~8^v)6.b
|_%W:pծ+kH@Ұ&ut]m\D#{4Ջx;C:Dwc<Xa
BgŧL@)]a<CHp^,rx5*24'13_p~c1T
<-"}]C3"K}KoKRQI\TcsH,[HYoTAڇ
Xߩ# >"p8CPV"ۿ2!ٶ'景G]O]R*SÕkL9r΍D{ik
A=$'mwm-z?"#Lɿ#:F-I||ɽWO
os"SzE~8tߡ-mwFjǓ[le=ïtTu"ghTd^}qߑk]HscPK     A @vc-    7   opencard/core/service/InvalidCardChannelException.classMK0Ɵl]t:gm,cI=x{օ-&#}ivQ{H?^ \B
uV
#b"jFR17eszTC.2爭2.}<zޖ5	z}ԍXAXL_}DAc>7v%_|3ϓStIחC7C+[`iB$,MdxA+-7F2N`~ŜgۺLtn /.v%B{:@shw%RmG4?(w?PK     A <      5   opencard/core/service/PrimaryCardServiceFactory.classu
@Dg&j!~xeJP؟	pk~%^peexb "[Q]EͮK4[%lRY;}\~_{ven>KcXg4\3a10@/
EF
IPK     A ł  8  %   opencard/core/service/SmartCard.class[	xT~N& T%:Ln@2f&lu.ZQkۢUVbtomkR=ޙL!'w=;ιKu>`q	CpJ`$jWPЮ\k؋Ldȶ`#1%Poi	b;4`Z"ׄeaC{mv0
Hx&ry<
oXčbֶSz0LPfӪk./(gko
śKh5mq;E+Ûa+G[Թ5ɮzUX<&gV*hc,8KoqAP8?[QTܐ:Ђ9`bGeu齪ܹ^h]L0	)4jv5tPL[69-n#-BAVJcC-s
MT&_5*dftLZZ"tX\A+p86mlؠE*c-M7VgH8,qv78.[-&T;Kd5QcaSnρY
*҄NqZcdơ؜[z*Tex՞-huJ-Ip["1QT7Ak=+ܛDT	~}%BU#xR#2ZazA=3 lM\"շ6Eg)6
0B*7 m`a!P$Mp{ՐTfLlI7?m+qs wEn0D2EOu'mb`BEbhx7ck`'V:8kgwX7[-\+zQ.=N6|MWYZAC^,&Pu^0(jFIK5^܈O_-c,t	뮼љ]'4=FM<pŔa?c᳸6La~X+Ry!<ZdC;4%ѳ&wb;UCgTjӪʋ[_ ,5EV~@ժ,|ٍAWEvA@vͯY؅	FvfhCH|A=
^<Q۱RQcW<E8D=jQBe'-t`*FըdـqIODp$oRz8MitF;ۃgNPY`}|{CeNKrP	yN0TqmWm$p/(>͚jM|g 2ޝ8beeiO<q:46G	.'o|mQT}?0Jz uzeT=:ˑd'L֕Sb^Ui'6NHvV%<"Xuꏥvq2r&t7YX7~}
~o&4xG|\܈?Y3%Lmpv$B~ޏSUKJ}8B_7UI:Ŝ"Y
ƾ9A51~1³98Uڴe	b%db&vUۓW7=L%٪@Tԉ>.ZKM`1+{BF^'}vݎū9(^rq#CrKetV
O%#orPQeI&Rr/@Ui:IGe%ZQ(^8+cd%Sd*Q-B=1>CO-)RȒ8=d3@dG6oJ?qO^iɩ2T\u2ktKj~k[|zv%3UUb5D	N,RK!.(%'j, fm9r.S)WYHN*s-yΖKFs۪ΕД,YCwM
՚$nkP'Md2wڐz.ZT,YlV1J5J2BKVAa)'*PHuuV#]d:t,=fj_bɥ/~iEf#T1ԩ͟#QI~oS:HS2"PHO`P]*lV(9RmX<NM)MҺ-!JʕM$Z$hpXsjL*)e7 ye&[C^l@b2,ٮ-8i١Z}TQ' =r`tb@q?ٚN$S7)ŚՖ\#B\B⿡)
)E87i?Ӡ|ZMqv:pfViQ;j@
*zbJ)\)oS#N=ni=+t]89)=sR~)_Ken}>b,GborҴ$aK;Gu
j#pgܚϬ4}ׅv}{z;BAG
ZѐwJq4I:nZhs[`~Jgň7I
\j+¦Ib'#{;QϫvU<ɮ)O%wF+Qcp3Wpp|kkB2~R?4Ms]- laV16?jUcrI0],]@Kd7uPiҬT'"!I{'R}o0K`foR/;v%D
zԙ}.FA0s3@yvzE!wYܤb>
,3 !S?OotGq|iթ'LSa=wzI*ʂ@4JKzXdGm"ʓX2\f|/B],]fFRjcN	NKǼ}
z٦/8AB[ٴF罹8a
&6UvժT"l
D[i[н:=zxV]ii!yI+T0XF"qdmo4<)8:*cFJ2+_m7T\w{-W/NCk_R$#>w3V&]tER1
z⻠
oScڛfHհ\LX.SlݕZE	3֦,_A:17
^c14,0i.	^\q~SSmDIuȦ4g'b{ھ\5@U˅'v4XHUӨ9]Shy@Wyg0ZA]߀$L"sUOOt-jvxy6x>@Ƣ/ {L=Pw<Ɔu1l)/`$a,Sm0ZSd<7$q7UcG]jJaT<PSԡ *VéOb(ݏ׉spRէ}Rpm0ba"n)?ٸ	sq +mfW8Wyb߁`ԭ҃Wu2Yo4j8曻PZ=#{u߉Rڄdkb.:RG/
gim	u`UzYف5ʮO`JW.݇`Z˞+Ý.\5@t׉7KoUfswۡΌh~!:g0d7co:a/	Ib?6sљtJx	FC[WJ"6:*ahw0L ![:.=/7&J#Nt9QVtavm\ct>kV=e!<YP|3}3=y}dbp3an|,13V}u?nXu?n+=)ť{'C/ߏ2K
/.Wer:Ý48(·OϷUPlʹ͞vMM6Vff'6uc/w]_v}LLb\s |#
6%s׌7ed˷PQ?f(0F-xkJ+L:>$ [/f{ƃxy8C<}>.%k
iyWA^CWߒgy57sj[-324.;3FNw3w&(~D'D|,!"Cf{2pLڏW~B 2\~3	ɐ)cJt׉wo~&Fe2!'!#1NFaTƠBLkygKzޙ!Ge=Jga|W^jC}=ӣ#sO$ ::Z{bܯS1NeF7j)&JI!m=ll#ώa *5L(X)JP&.-X(DNår:Grl:$5NA懘N"NeEn܅:ExᤨCNF({l98z
dN<*4:E1BJʡ/?pd30&/|,IԦ^K"݀}]͆K%Nu[	}JvSrDnǉCTnqEw0SX@?abc4X6J6a|	bٜi[4T~}:k-eg->Rb	~
|(ڏJ:$SyuC0`}Etl;}:_)r9(S2~ mk
\&+\	*]Q5Ddt)33>K\C~ᴖ_庵ڝYRN)Zկ
bC%rEgLJJ:dP}a#NcGc!̗=VGKZ8Zo{즧Wǭ3U>"R|Y2LUYY2q{~vfӨ8Ô*_)h.7u !+73_kʮ?,-tC2*()Qg|[!Hr`j	`Du[^VLʀB,#I*Ȣ4'i[0^;L#ry)t]+hWq&Fy(vȏq5c:
SAHzq[LQ4j}&ʃ4aW˛V+5z_Ɉ=)H%yKSGȇ{EX6ekVssLUOU$cLsGD1
d#f5dX#d֨äLl+<߃*{3A֟xG<Q̺R冗:4'2̖L9O|A}SHɋ
dt]'~_VvZ}8cuXB>@#fg @!wF6HP5+<\hc.3Jc3fc$n5
UU	XV
+o$CRm:a̂£+1HUGRwc$,'Mz|ƿ7ka$H
Jc9;I.0Ju:mb	!-M݅]]*~0q3QvXr~ٺ_vdҜ\w'|rzt[{fWrl'01RdejLh47@13*21ۘy98ߘBa.V5yh2c QqQk%Y[iė6Vi?MgL΢oS^
[:%MR))_*
}xcXc~Qd]C g -"3i-	F+L56҈2bcWorF֩0LvU&3nI!l_ȵuV`; ׯ.!ߨfj#Rt91
&2PY:J0j# r!b)wg5~AgK1r듺,K))?,Y>
X4u^n!;Tma:̪uy5O%A6^H C,I
?z%=]Zc7. ߋ
}$*OO~	o
E^B#PPdB0ؘDѣ^}1OO}q>G>%
bF%
PK     A               opencard/core/terminal/ PK     A 
  	  !   opencard/core/terminal/APDU.class}U[wUNnLҤBS@.H@BEۦU$i5`K_G_YkY^ʓO'xy9sLKC}_J*\p+v_KW\zpO/Z3Fհ1| ~!bztfiK7VI_}i!Kͻf?.t^V5*Q;^m2԰fRV_bHs[d	eyHxy{LB
b:jI_mZLY-5./eԪ*V/)a?^n)kZ5<eR36+!~z]3ɇC2
}2-Өe[~ari^gvrx[5;ΰ;x1I"ZWb8![ԈoQT#8l6\[Z<Ba;AqJX+rFU\(VP$J^3
]=ּAPK2ygҠFPd鄧ϛ@Mߜne$'Ct҆!<fioju)/9*{-'5ѽJg8}ҤF+W]f# ;uJ5͢~QOꢟ<J']`}nZ'lJҽpr艟)w(uD
?zB1= 8	#CEz;lC.bw0Jb\B5)<esd**s8/p6_rD+Rϊm),&
 |\tD<X0$$.A8I"6>7nJf7v	g>|N$_@rCTcnJ.*8ǴsƷ"m3Dq"wiQ ߷A}"P JޥOK{c܈ou-s؉L/Vvݡ&=!N1xmc҆~Nğ*:&S6O4C?/~ɤˤ()0-.ӘgF"(<RDD|7ҋn
|@#lMxcNai2&Rh&ȇ:lŃ⺄.a:n]vϨSbǳ.I22z8@wPs|M=}$V%2?<4~DnZ,4ˮ
ڵܡZ,qcj.EVd*XDUZMX?T6l)s|LQr8_PK     A ;tH    '   opencard/core/terminal/CHVControl.classRKo@6q&u$
%)-q(%
Rpv'qؖW ƕ#8QٍIQegvfί?~x%H2RH3N3]ugvz'0[0$n+f
aLj?V[ϻ-	|&cs>+(rye:޹";%OL޸~c}暌*26;$55\gZ^{]*G6eԹJ{0j\ȿT7RŶScg-]Co}T5a]3}1F"!5/Ȑ;rO}|f;/ECYNJ3IYϓ(ҠH!b]WhhATOSV)Bd!ʃ%*(Ta-dh hT:SN. 2LL;Dƽ[nXG}rh9;-wۑC"Go|H'ԩH3q'y.\U.+Wc+c5܍+7ĩPK     A nw
    '   opencard/core/terminal/CHVEncoder.classeN@gC#@R
*Ā48"']t\x8
BSKtkVQ"Rė*)J~6$VQ&tCsP:u4'C.ǝ+v6B+4	f"ۨ˭<B3$4B.Ur4
rЎ]	
 3r1pTEoc/D_%lTQ)oUn{|2ΰ
Ss̭>-pD8PK     A ed    #   opencard/core/terminal/CardID.classV[lU]riª(֪UQ
R@V[PZR/LvafUҘh|AQwMFM4&Ew؇==WwFK!
'Vc]{G'e1lv+!:)`
y%-+!۵~vP6pp/ 
JD#hӣWXUf*Nȱ}2vފ9Bv{RhjWX+b#jJU1j&pB:%8hQBsS
Wz\+кPv:h?eB4gG.
``"C֔-'
B

¥U
l&T& |h9A
7&&n-14@L+1|rS4QtQ9&lbȵE?D>JQ,(m&@|TrK"ҲC9S ]%;LFAڻ BUpK: p[$@#lW>4*akԑ<¶mkɬ1n_F<H=!XwP;hr#dȡDRuPhRd*Uz*zt!Ѐ]*%_@)[-H"oxmfs#4p{F*fdqDǦPS[a]|h!o/]߲rƯW,oe8I+8c#p"#2376eD(-kX
>ߴ9l7%#~[.İ__tnsd~KULIV>R%g%sh\Wc$W
<.WP2zz JFgz棦gOSrv6J
-	|?QwO%Zռ5cz~ppI;*Z&Ӎ|eA4:[m'Wv/Ǔ'LDMu0m+ofӵDlNrcBq茫Ycch ݉:B_<
xo^Ƹp1lr19> 8oRkZKx`27սEyH@?X+D'!OEhKssnUܮ⼕x0c:Χ(yxA?]̔+4&Cr,6?T	SzNeUbEʜ ^"^riMGWt  Gж9k?_NebDBYVzC[5VU
VmSLe5՝e՝>-Fۤ#alcz3O)FhWhr"_SQsp*\$eϘ`_H<F:RmzOd3O ?0o?b%̊W6;nz+Ph	,"q_L}8ȪcnV0Sx,GMXBq	E4B%*=]%Vv)uGPߠKϣEy̣pu'1`}Ase)#aXPK     A Cib  %  4   opencard/core/terminal/CardNotPresentException.classRJ1=׎хAks1ō(Ehtt[~%&
T^Nι&o/ αR6<&>&nK*.{"b{KqrqDHWD$;sCuܺ"x\^iZp~p_Iz+i#G(O!V{e%_D6쵸lV+~ɤ0hΦGHC:!$pYl}8'PP:B%m0'\6 ̚ϼIzJ=ب`QGKXNx`Uh
	6J2]w+p'- ;	PK     A -  p'  )   opencard/core/terminal/CardTerminal.classY	|uJBXY`t" `IKXD(YvGbahZl8!NRrM$ 18HzıӸ9z$MkS;oFxgF_g l/4ґBɑD94:bmh8W[7gh<40I,yPݍ:PL` jFs҈Hs;/@4jD_W&aY'X2!+ua	aƣ:ݨHߟ#,%]D҈"˱LT^N(R7 VX
a5XFF#͉#]jVUGG%?<wd d!KG:DLDlȐqh|Dhֱ	h`HW&ToѱQQ%OpͲBq#oѱ-O#bJ:G;F<Ǣ-nAXz7αO
f
y^CG+8ʑá$YammW-uٗ=Iãc&Bo㱸?Oǧ?	$Xҿ&:=?6wᏩX` ޭc:*#FGsqmwB7'83kJ%6:]fYާ^Yr(|o1a"7z%:B-t9טdn'#;wHHCG 8nU=8GC\R:!xxw884Ĵ0Νd,#A,aGpQY֚e#7F	Ug.cb;MKje	IKLү&tqpBlmHar1Bp n>9 TU)K	ǫ։@881uCba&hKmgAG)Mޭ4l:7{3%B^!}T̙Mgǉaήd!
n|alQp!9$P,D✼'q5B^&akқCj^NY|L}R֒PosVs0?9)IOnF1Sq+~lƖx:e\u$s2S/}<Ή7FcJx|BǗE|t<Gb	#"Oui:wtLJ=Xh%v!#.2x
W&XL59TBZȅgUG7ֽ;%ts 6:0Zfx`1ۙ6><,?'-\t</
ȓ͟:gh)LG=h<K,Yy_d	u9fe62}~ng>/	/KX#<O
9ZRO͵s7s{~Y+LlSeW./;Fȃ#cGjY6n)naxDI;e #{}exx8l` Bx7pW
MS9":$f xl&^7(Ϝws%΄haTe+8wcqC350hpGKR{Zd?:÷B<wY @ xXEWp)xD2SE7z鿢v9Vt担@hw`̂㵧JgF',{.s.%h	s<\
CRjG݊)'E);3X"pN&ud>Wσ%
y:SFӓߪ\>ܸ3=$$ʩۂse4oof BlnOnʱ_Zʭc9dJq帟[aMaꨪ;Z
B)C="gp	ݚ8Qfmbm)]aRg[+jQX<%<ʫCC\92ñ_jC|I59G8g\ƇA,t9Ϥ^6n/uQzCP
G'bG
+opvZf}KpĎ6w,پ)dpR\wmj
0Wq	q3$vUARw|KB#{(OQa	_'Duh]7&NZ<Ż
?UT?e,o궤>s2.aET746]jqNC}%o
MH'XBdCX#hql}h؅p7$WX8~Rm4u'1~/Z RT'Q2
i]7iLY,XJ[vb	)lc;loĝGkkWzOkuOb$^oF
'0gџe{EvЌ'8~\T*,1AY!/dE*7CHe|).O;o2u|_f@VaS:!&1oR^, 'uHTHYLm1YP-VWQ+)}e\5V𳈤QGM?q֦FlZ*sOVe6d*Z6e%Va5{9KIDitIXLjnc|K
*ArP
Xi"j@7F_*JU8EEJEYׄ;F,WRE$3YrjV8fA]-o-ݖ"	:WLYlYEȇ aeL
̩.֍W+(I.be&kG!x-m)UKGabɖ_))UWG9ָ72}ëh
g}q3е)佗QE4OTC|V_cMW;W~R3;qGQ=>vr~:zlSލt}^Ga3xstSuNuUsӸ3-T2%P4XYΛr`s=N*+̷[> O:䵁xqnsVV<|*(Ex7==\L.0riץ}z<(XIOb]r@]mC]M}4Bs䩲rv`c+ΨhHkftFu>8}Dw{6#giH-F'I\N	Ϫot[l/TpKlS^f8!@Q}vjDeoIJT#+LXY%[V	5,-?͚*ϔ#_+pԝ/o|
G;xRî,4?X|±Msic̥MiRCGchb.Beئ.:1*YV;U}R2_vFnjҿZZ#J&TukuuTNmfzݴ@{STqiJrUtx/5)Jۆ"m;ervl.3twhB5dC3kq&Y0"`A6rtiƣ=iT'9;wV'"?+fVLᒿe
O[;3EzY4\p`w-nGŚ,&N?dZ P'Yÿ!f|ʵo;qT8:/<71"?	6GfOScX7AVWqU}
JWn(mԻ5Qny<涞cQ[x0bþڋpkA]Th/F^{c`8#ㆋմ6)S*9fRD[W߀SZqtew2'QZ,~SV>Yg
vs-6[uԮۥt;m9H!ZӤ<mjŁk
+3u\eݡ@m;U]LCߝwC{x{EPK     A vkx    2   opencard/core/terminal/CardTerminalException.classTOP~p)
Vƚ	3H,jܜFMY+D^{|D$??xmYȒ{=;s~CrH )!%#Ê;zzntk|4oCcdbY	9 3TV7csNxAM`XoMQZts2gHP,G>0=+(I!&/jl-6iYXO1)\t
0c4
ES#cxA=΄VKh/
tY`If2goW䔙q<+5F2CϴmBej\-	&觓y{$+
gd)N i~tsmd sE*n!3A
k~9fj#<f)1UBk!ϡkUQx`/j Cݡ.YNxLU'j[߱x7F&7DVkXDFjHν{X'EvQ&Q'(Ɣd%|)Q"%JD((P~A7H_"G:zDzxO"kPK     A 69  @  0   opencard/core/terminal/CardTerminalFactory.classQN@}k*(1ȁ !!ȺnHIݒb<~qjj	y3f@u{B*#b-#sxt
֠ǅF</܉9ws)C%paLG;uG7a`}R'VʌyEVL4P\FjEhɍ:K:#xr&FZ ѡEUȅ	ɯSjnRlTQUh6T`5yŉ$~B@ܦ\;PGBv!>">E,ᘘb
ĕqF9.\21/PK     A W=  '  2   opencard/core/terminal/CardTerminalIOBlender.classQMO1}?ovѰAc `IiIy0&(,n^y3L_?? \C
*J(34y8.D0oC&.vVU*åY	s;ccEGqîz&,+MЉ+`L0#c
;SEfdb&I'y7_E^f:U[~9Js{#Xe6ϦL朓&MQS5{7+*/
Y#.pOA臍}4MueZ ݇o|PK     A פ8e  N  2   opencard/core/terminal/CardTerminalIOControl.classSKo@6/'ӄ6Omx$ni84ɐ)Vdպr8;wܹ~ ?
1Z)1=xf|3/ [XJ#8WlU'3$[?aʍHiHΰv^r=QױnW:s:k:ݾ_=^޸,VG}_$CҒuA<&jg9G2󪎂}ףt1Y۴JB|wi~jw:u9z>w"_][ؼ`#r4G9z
Xmlr^'rJ,iΘl.L?X7_+]n`lTRVTw^K< LW$tez	9LaGMt!tϤ5qM?NzfDOI1)rR䥘2d`^L"T+8D&Rxq5Lcq,hamC
lڢ[:IL u#DISo{#D"pAK׊^aP^Qm~Fweq;H(;Uf0Q<(C0

߇0C(xy1
gBeePK     A B}F	  U  1   opencard/core/terminal/CardTerminalRegistry.classX{W~&Yr007X7Jl1Ha3$K6;lZzWkoVmj*^ЊK	jAj[m>C{Lf;gw~wyx!h(A@9fdS5Hpk436NyPv1smX%$9O5ʢkMb>'2zv"#P.M;
QRB9'IlaGߛ1☍2\
rt-P,5IM?
Vծk4bY*62h2YU.Zc#
ȊP(_4_a	냃cd!:q,Ų(kHYhDSZB`(ύ
`Yt03@@$4|Ze7bS}p@ƼYE85nt룆@uCPtcCmź(k؀d+@mG{W.@S!Cf
[d;}!'jhG@I*cf=6
9Ők'eUgs;i3MjB7s߸3*DaOJrk>|tYƨ9n籌~4|?c
Ij+53n؟H9
x\䌞}ˋ92J;4|Q}h3%w[Sf!(
@*
]e4WB~
#ٗ SI@FY`p'hj[2AӴLYrQkw\{:c$Vٳtx\ΤVi
$
GbgE~
A7%;
qEZ(>re
e0anqRa
_S>4ՇG5<&uTTmœ2y
eeW-Iyo<*!ABojKeߣY:m K<ݹѽ'ۛ׭|&#p!LZ11o$Iafy&=9~_6ELǔQ<?*<-.7x)cL);C-3/!erc!c9G80lt["uͬRU9UfnJe
P#S)st,
.8=wuq&:LbGja*OQ|׫SEl0nR̄Ƙe^Q?mi}s6k:Jh_Cb_^8ǥRPi欔ё>b.6~GN^/ORZ/b=ɟWunbNήx3?OQ%wIP>tv1|q7A=MOunҤiZ&tE\~Tδ#IiI
_Kfj
]^
cr']D9.501$O?y:6p>ı$1%
^jv:sMK}?t
 ;MbS(?
VvI[G lG+˳؈oY"£UfGx}ߡ~)Ǻ0w94O`qÈu\\qOTsiWc8߽|{q?|h>@Gh(Fɐ!#؋h7ImtPr94G^FC<No OOS!>yfIa"=K}!|S&4S5	>Ȭ}Uٮ({8"
_[bmɹP6tPunSq#Dp5xˈA3_C<fzE'Q~#~o=~\=|R8TQ!4blU0T৒j25b2	l:⧟2
xΣz-J@_ˋ}ػ>ªKnq	Nx3w׃(_]V<7mJy߉zMыHXЋ_' 	\G= pxͧ1p^p?9Mz%^7 M/ʳ@/`c9wQl
5
rZKv&&XaUGG.J<B7YSXĄg'ŧpa/b4S,Xnd
pQu4\A!?x+
n6i'p`4 .z:U+VD?sB4W4UDCR4)+fx^$^	|U-&St<RvJhb8	i<~g6Xx[{t7ʅ&7([u}M]~$wأjPK     A 	ݸ  e  (   opencard/core/terminal/CommandAPDU.classKo@a4%IJR	wT"EgipIk*~$P$ ~m Z̽=3_ rț((R
`@:r'Σ
=E[N+J&,ekUQ;H
v=-RUPX^zJ>Iծ?t'=7tnwoXTu'GCyy
MX~pɣ8Xy%Ǉ1]ءZMJHz!8ʧp㷢?̌g>/77f7_p\[,߄6.2s$\%LC+<Wӝvsce'Rwia{	u5S팪ksqdRO2)oRV5xVqeYhWXXN՛_a~D` KPK     A C    8   opencard/core/terminal/CommunicationErrorException.classn@i8	@rJzHzSR)RMBmUYAWx(Čm"dHUjKf?}XAɅ@N4ӡ#X۩	Upjz_|=M*Lh}BiXPU[O{ؚ).Ax9`y1sE8-»rAs./E<4iu&4&o#mG(Lk*+k'9!<]Zr.N 5Q3̓PV;C!_\aͭ4qJ{R)6q?<e	$N
x]8u7pwr>+E[l'p|2UNn.>Jng{'A07ItmVcG܆{ܷ|kr;n.՜+]88StMp>t*R_PK     A >\     :   opencard/core/terminal/ExtendedVerifiedAPDUInterface.class;o>snv&FԼĢTԢ̼}׊ԼԔԢ̴ P<tZbr*;#@VbY~Nb^RVjr	;# X&휟V_ZꖙT]z '
Ĭ@o2b1pI&. PK     A Ef    8   opencard/core/terminal/InvalidSlotChannelException.classKK@Ӧŀ
>%*(-t+(~-O~ ?8F_4巿ݼ= ê62
(Q_@7b&2)-BvV>HJAW6jxJ+
u[IthHL8G?ئ~(n뼖u$aWZe!Q ++SgVrO#;J.LpZ}3eZiuLS/2)v8Bu z$i^އpVBG#(e-Vk
'aqHec!m^Hj>]v.SٙdXb^yPK     A :r      %   opencard/core/terminal/Observer.classu=
@F
pK 
Eu$aʚx8]4eǼ?z8WҞ2ER6B0C
-+ogYҙwl%^'#aS+q3Z˓8&ޔV*LWs_
	\q!|y#~PK     A 솺      %   opencard/core/terminal/Pollable.classuA
@EjhUnYz ѭ~:i;e\x %<_9
a+.	m}`]s8qz3c0,hgʣ^gۚW@h'{BYܗg.aBFYľ`y;&YMA$VbT7PK     A ?    )   opencard/core/terminal/ResponseAPDU.classS]SW~N6ɆJRi(B
Xh3MkBIKM/o{۟vFi*Fԙ쾟9: )L#MG@IB+&wj㊪/ܶVw7~`H^ۿ(-Wc0&ӻ$nD80fm򮓷8_=howmglFEnubK8Fx~AA"bc^'N|W[Y./40QckwCHRY;yxh_7{[[L	i>m|0jn76E_#Dib6	Jw<}KE
8LUDYyc	ovCwxE\ҏq\̐YyoxWrq~Hx_rZ^$zLim}1;7m+O|Vn4j.5kGVl=C.40+`r17Kr?HYI i0žsJpP,ƉnAC*H鸠t=lEZfa(-7'b"?]	f4Ɣ YWM6&1KJET>كO3Z,|Z| a>T
cX]S<oH(h-J]d}zS=Yd\NEsMR2-BSE3L
ʻdY>::ˣY#Ь|t|eHa=c&UW_PK     A o    2   opencard/core/terminal/ScriptFailedException.classT[O@fwR,"W*)^d|R(nዉDÃ?e<6mҙs|;g9 <r(BappAv%"bUrM5UmSmRRغM0wE].W&)V<P1\ŹځW üE-ەvL뙲rPy2`(.{T;DACƵɛnj{h#/J4&4G.>d8Nuu
/Dη|<gƂ2IchLRWE&C)#Wz|.
s)U"j[n1>{'~ҷuHOXjc`^.Y@$rWd45|O7.2Pt;gz#\۬euMO	>cXdT
g;2&
IK^@g,8Ymb+)zk'M`SB2IkZCX(:Y SY"9-J(
hӮϺj1y11>J2<r<n'iU蝥[ %lPK     A x  {  !   opencard/core/terminal/Slot.classT[S@\TJڂA-^Lg*([k
IR}7|}t݆%ge 1E5
jUԡqEknnmjR钂0CmCw5q6GY7W|ӱÈU֭%eE@l1Ta軦]ΦKa40D=Dr$&\Qqw"0wm)BB`dzkhT,E;:tu@1LO<wmSʧR2D.ReC)Zyܝ
qWqGNYeHL{PnRV?ǐN]tr9CCleu%[%5oL4|Q+.Ҁ͙D0(bT
5)k.7t/3C\2=&muI8P؝:T2pv^a-Ii'+xѢSq
>cD۰[.ӮVҰӪ3Fy:(\ձXFccM	?B[ Y!H`I,D%%n wB;!*QړA&t#.ܥktVfH_쐔R/tIV1;	Ņ%?A3%Z'^}> nVtǘ~i
:v Q''	a<"[ x7̦D.OIPK     A ;%    (   opencard/core/terminal/SlotChannel.classVY[W~OLJ(
[ъ"HQP!Cgu^kڽi/zVetoɐ }ڛə{2߷WBb0,UN*ᄒCɎx2mhR	~ 3ZRUXX
-ҌxRI{z}DI&_9qPT`XuIp[Ơ(1M))
pX
P)@?JbTӹ8zWav2a9MꉽJ2p[Q+c-5-Nh+Q'aըgX52DԒ1~vϨ)Tkc!ד&a-$4fƤP&Ra8٬a
I!b1SQ&lf`6tT[rd`+C9:y;CfԶ!h[<}z|nqfµ^NfAìxj><k+эᰙ2VcX|TMv<ȗxr8ZK'#n*M7'
*ۛ2 99jr*`ze곔:"p!2H8P妶;=42p7zŰqY8><D,MA J:+D&МOi[ M ?_YbߏQ1$%ʝNEMK;÷'<CkAs&ye(jc|~$Ak몒*F7R#qa\2 a15)9cS)Ug8/˼G_F__D2nsZSq22qi;in#;ߡJO'LǴh܌dRt̊? $
K\~Fʩa1oR1VWci_n
ʙyLāx1V']ABBԤ*w^vx7lk.{:};j¾{jq.GD?JX?BXZB)V}.zb]&օ }8{h]bB	&PZ>PnK
G跎H Gq;JF9	vE
0"dAD
O"OG<qZ^MM*L+*]G͕L9,ef8Ӷ.%5Y~kPeYeȕx8C8E"u3'*M^XEf[l6D͜W^JSQ< BdlƣxhADI*$)# ,=s{m,=f@~;:'ґ?/,.
7QxE~xyّ'َy'_>ʛR
7/:un![v
1&
pQoKl^jI;˵"̲Ilʧʮ5~Hew'Gfx4x5/U|`aK95ׂm6
(	y'q?;$0'x3eWEbMv:ob?!;M?y(e{3O;2lDicxKp@sh0H6<sAf㨪F;LmCF<ܡz$$2C.
O5<YYy8=ÇԩS+cUyR-w^)P|_#v_*~?PK     A Eu:  q  2   opencard/core/terminal/TerminalInitException.classJAm7,
T܂"F
qlbq^+ns;||AdXlfhS|GjFBOۡT?
^|1d[dfzOWciƭorf[alv뒑_άN8EO*0a@<p-M&Q-mbNfcw31uC|/k_Kcpic75#fEmMޮ`6ء]5QRL21+ZvIEW1(fv{؏-VPK     A R_  ^  5   opencard/core/terminal/TerminalTimeoutException.classJ@iZm)
"HK2M8NJʍ.| J<hnf9w~y{ypu	$HH#ðrxз?V(TܳT#CT*1[>Ǖku@*Q!a w@_KE	XGVfH5`(AO]RjlHTx#G:j0$#WS`}{-"?SdF?q!Ym44mQ89:)ҫPyo<!tGO$?#,P5c% L0W-[8O"9@HPK     A    M  2   opencard/core/terminal/VerifiedAPDUInterface.classJ1kG@AEW2U,cVS2ɐs۸Pbfoaٝ/ps^^ ##컚y}4b^4G뱍x&A
#8
m(\UI	ϻg&ƅNZfNgwf8K.mD?*(j>W$G\{V2pIx
{'0a.ړjG<^+_6PK     A               opencard/core/util/ PK     A bn    &   opencard/core/util/APDUFormatter.classW[pS]z\q{	 M!`$@M 'ة-pygRumaIW2viHںMJڐLCLg:CgZBLWf?43O\)>=}{9x?Q 標̛šށ2
9Sײ>+ѡAWz$oI?c!Ѱ@,fMJfmG&]rE3LمY8$`HYrJb
VתGwR:rfXZ2
m_TUafe1hdRun~4KU,cqWv99.;_}{FjXg:8e2.]usv1e[9=fA8va4-0	tq笘sbyO-m'
6!IJ$zͩqΚ6 Bfm5Њ'{$Wv͢[XגOxhC@̫J!yx<r͍XHo
)v@QK7R@`kCE9Vb6PxtŸv*b
3v!ͩtUCSjY
KWj+Z怵I
{,ʒI7p }:19DXZ@0?qX`r]|1u@ȵ:U:?/2,aRYI/kĂ9rX]Rà!0דK>t+#c2yc;}GsI}8|!/ t
EؽW\>lHzE=+=tjF2v6&p^ybxqv+S-ǹB@:AMS(@~~Yq{p,@A9XFՁY*kc
 +,A̎%6
g4|;g.&̀ ͼQ
8UW
bgWyA'zm.YmCxسvCxWSF֦a8,0U-&B8G#cC,
₎w/2 3劣9V-=-t	V(eG*zƃ%9xfKk*Rf>ߗs%4ŢtRy\e
yC[5*U(ک՛O6GI~y5!Wԡ6Ml ] fbʅ qwЎ}_G:N66":I41AdQ7F'|@E`?|{W9xq5?Sg¡15
TG'Z߄?H&"a@s85q
NCm["l:P+W<q[ %
6_A5_SZ,j%$Ys	kp	b=^DgL"xãA]	:
ZӒecjU]Mn{vh=,WHלב[>	)RdMQ5Ay;_%@:6BIx+v:]|h6,(:p+xߠ/Sb)R~A_"k|1#O{)3_Zh⍾	GVmp\b7o^'LQ@Vkgyپ8{"l(~Ge	N?aLsLO_o|ːAz>(N{A5g8oR)^C\VPk*|ߦv](|(KhPӰP&Wsyx
f֩7Κo
޸s?b
JJ-,gA,$}NՈ{+zu*?i
\ACbKԟgW(IܡWlr
xHޏMY[hǻ9r}>>s"F0ɽ?e?"ItƽE0Q^L}ܹԋ՘*;N**B#~(c_4yמڷ]R$ao^APK     A dg     #   opencard/core/util/APDUTracer.classn1ӓ))ޘ9䳑ލ"RPŮO;?o oh$(1i)Kc.U|1Z-d<0Kp%6{ί\&˄ކsIwʑR-_(㆟BkR[7WV5C;0pHviL}_(Ʃ"%^PF*B	|B+ϾP?PK     A T>J~    "   opencard/core/util/HexString.classV[P[]G{.#(6616&
NEY4-}7mҦu-3:)?MNgՙϙ~o&	]3Gg{Ǐ8i?\p+O@bLi#s+fMeRqw*(G@ 73	#lMdsfkJ[ObV.,IԆeENTi@jȈ
ķhD0l!QZj@0	Ҷ.1NIᵊkmcC?$]}Jjwo`ME`'
ndK@~s Vvu*#{؋VꒂQ#4VUgІ[cfw)R(gyXXaS&` 8$P^LFl4cԄMXXttJdG.=?c
ƉH/mf.[vGzO dpepV#<@/T/;f,cNƙQO2Tد"FѦST1HѮC*PaPVxLIѥn)*(NJ&V՛ʘ}fNsE&E#΢M.{7jN`:7,bt
va]|ّIrd[kROje$6R/)(-'DԵ>"A8vbJ,1+Vԕ?|2&gijMYV<ILQDڹKl!0{R% eW6k֌35MU|$V_
@e)ce*33~1V6ǋҀ1L2mwfcmaqs˨hNENRINLu|+)*JXI**!.^Y9|8fJ)(w8q!g/`c GYFyǸ
n{O#s^eQbB:{5oۨWEO}h(2SOo\ƭ:OЫ70ygQ; WV|!)OӦwLDR]RTךf8'*Z[(^FYPy}^mTC!S>13?ض{f]ܟYx3mSq9~xMx;ч}8.1Oc<5'6I]KԸƙa9Jb	{"g.by7QmLe&?C6|LTΦSn5n!ᮘ:MyRx(NΗ>>FO&-Ŭ#
6ɰ9!M@cSnf~ˊ$1\65f"uHZ:ERΒsx&9B5|%n!T'2BۄJ4xQigd[OћLAC*L*7䧌>Ւ&jM(:"0ᕶb<˛&=LAEDwL'@cu!Wa!YLI%!rqBmz͎bt$a<oM پ,QY^!9Fc$d_Kțޣip)kf-5gwYÿc.?,FQ}_E9U"׸&c܅^]>BylޫKX8X;X=Ch/*hqK`oԿhA%vW0Er
~E.7E<дѸ[=Xܫ}z,cqU*|GUc>ѯs,ד
}c~c
Or=%o5-fk~~̫-PK     A a
i   
  6   opencard/core/util/OpenCardConfigurationProvider.class}N
@V^\ z6[y(1h $3d&z? Dh>ggtHUULZ	l*zjZE_ʴKtaS׉J9	f8
=Ͽ'ҟR\
76coYC $n̮t,{PK     A QqP7    9   opencard/core/util/OpenCardPropertyLoadingException.classJ@mVc
nąHJ7UA	*TCI'e2}׾+{"DŅf3~9Kp(HXR 2;aaȱU&wVMJxCkZ	OJbU:5h|#Wci{ĬtDD:B۞Yh޾9ʼN4<NF}iD?dGsXP1aZ(_W&(1<P6+6SQ\Q<ΰf/7@Y£MNU#YԀ|ƪg=wPK     A d  
  (   opencard/core/util/SLF4JAPDUTracer.classV[SF6ŀ%b.Ӕ4	&4`Bq0$ńyJ2^gt$}Cg:ge6f i:gw]AрFmeW銑=83Khb0P+SMǊҩYʭ 8'Aq!.l}kr;2Yn-(cZYJv|4u3	2&l;vtHхqfbl<f4#W%\V^3W7DN13P	Y2D	y}jxKqW Q%)LdiҌ,9	Q;Biɀ)عnI򄌫<-r[)71\7cjs"{l0}&`kMoɸ;!*$h}☖pW>bi<_P|^12<7hoGOdb^֬9$2B@":21Qeq`6?Ή(V!dp$D*C :1'}(>!Vh,31W'b5ZW^	'Cb2lG1[z
2' ג^ښ@UE_W,M{'o;q#FU2,X.I
\MNI-X.[Vk!׍K"RBxy5j45βRf\-;|TzsUB8t&*iְ&}F龷Ӗ64Qcj&x#̙c2wrfn*E[" v\>`o5wG{Gۏ{gXHd&͝b!^F}dH(NeTk=b9w왠JxptSd~:}`xLW8iИ4ަ@h7t_3)	 W#OAO_d@/hy?a?3}hY{1sצ݁>CLCx{>~0N;(z'eEstj7ы{>$.W=AϠP-FP\RȀ-7OYpJ-LxWcPîAQͷQAX=0~܁Z)s
E18!V^c8&zuR
HJ9@9 0*fR(Pp,|J[|PK     A s|   
  %   opencard/core/util/SystemAccess.classV[SF=2&@J.
	S@BHc
E`Yr5^_ f:}LSo%acB,vrvO 5Pg1g|'ll$ן	S2F-ǒc}:hР8d>!d/U2IKr6+:Ь@+ڎw|)rs.@iىJRA]0Ўs%[ըON)
*.oҀ.\eJ18&2	Ds}>Ӷ
f<	Wh,)g%_xja7k!	b<Wb8K0o` PQep,hJ%}05Gͻ:#dw4枙m#%~`CՁ.9%KfiKH_uc{l<=휢E
cD	S
-71ib$Qccj1GFI;F0iL1ԩ(pFem/f<BNjVЩ
!mm8\<L5=ƙKR>n0S#
u-iK&ghNf-RtQ':DKHpw
Y񐷿CiYX5Z9ůФP~~(T,V'wf?6E^Z$X
].9WN'SѰq0T"=}gc|Դ[O*nٰ:/=2f8Tfv5!5.ݢJ5-wSD7$7ŎC)dl\wrƞ渰UW߼O"	niK
j18j{BÕ7ҕE+觫cF 0>o.^z~I3	z3z샽L3L MO#4B 59[@y<p
"g5
'pCw+PfB+@woW:?9##?:@g%Js-("5ZQ
5#UVk/q p/t=K(ڀjD1FJ@J8ؿhרL]KRzk{Tx8Gn69AܲlZٴ  FoEbҼ>>C]>>>VnQ)2"a71kDjJex<U){^*%L+<ql~'EI̾eKW"V	DlD9\ @?B#~ƥPK     A            
   opencard/opt/ PK     A               opencard/opt/applet/ PK     A ˀV]    "   opencard/opt/applet/AppletID.class}NAdGw s1.DE=hԌlfƱ1Q|/L<xCѸ_"f!C$DW&N
Uw]K(c]T=b]uMaPm+nXn5IY.cH1L[fE32iíoFK\<!0v)̎'յQDisi3D֝SW
"cr= Qgin\+A58.4476!SS<nBt<SlHd\Е%~V,-yΗH3GW(sY$_
cڢ?XYĀugABcӷ[
%#dq	1	NvGϒ;~PK     A g    $   opencard/opt/applet/AppletInfo.classTYOQ=۴ ZPPR*
T-`h,m&>>>hL4QH41>o2(Lr38[2\pK(й>TS%<>9X<	6(*U\PkTjj1M*ޒ:BqΨ4ڦDEb˶@Hv Qʢ7cZaR9kKNbUC,5-ˮttinNې>plP_ޯ zrM+ǇP[LiI+H ɰUFD3mLq%H1HYG	i̔|K>aSjbJQcemjiqVVgK}jM{cVE@qO3kF(yײn=dD7!/X5)f7jꍵϓӢSw,@!2?/M57muK,T9C-<TV\eVuhe3E/>z!Ċ:\Ըb&YOhwPHb,AC;|!,@@!CԗtgȢD8!8g$E3y_y'uyVpq_Ep^p  `<1<LyB|$ųEY>&e޲*Ci?q')q=kųù`+hzN\/p]2\%ٹ^׫&\Y9TDv`oW*"Pt}|~Zpd]Рi6ZrĴq̴$q-TQ Iw{*OXe*ILb	HNnPK     A D;5    %   opencard/opt/applet/AppletProxy.classV]WE~&6$i@ֶJBB AB*Xf3$ݜMN7x_Ak/(LR==9}yy?f? F =
Q!iWkNQU&y599Чwffz|?BW"(å5l;Gŕ#+ia; 	ԴK%0emk0𦂷Y]fԜVAkf0\g?vvvq\E^fY˰Q$+ FU0%&w[mfD^D(.c!,dhvev65yfds͑Y@TW8À˭bƮT48pnxfYLw|;LAw".I$SQ\Jcgarrsl3r||4>h%MlGw{:њSs]^{23vt kXVRΆV0t]3cw1
.FC#aDwJ%KCHk2ND#t$i{'Mju^ZρNMtiEE]\oe|dJ /NῴKmW+jbu7oxF
k
npή9:_2DT5Ahi޶=sMn	q@=(g7i ê{?0yoګ|2irޫUG7U1[ݯf9DZt"ɩH'NtkUC88F'V<EfĽFLz3ɧ`I'RXn /IdEJ3|N#C3F7'M}rqEWҽI	h83o虢g8瀿q1djj8c#!`Q :(JALf}v9̣G2X K1%e߽zR]j;IцX4B_ KR#b͇%̀@GGp!DK R}۴*HXv}bv96pקL /vfZIM(3Od
IG4h;z6)bcQPK     A NUJ   y  (   opencard/opt/applet/AppletSelector.class}N1Et?`%YԄ<qHmN%~?2Li&a<[J:pUa]8#lVIZ.4'Fݼݥ]`YsV4MoZ6x챸?m_]A>}jr$gwkFὲ4h)tAsep{xWIN t;j:GX$ʑDD PK     A Nd   E  %   opencard/opt/applet/AppletState.classO1N@M.6@@适+)@H(Jg{>˹/*$
{[hgGO W800cͫ4OzQ
66g{SrS־
ڴzZfєNWƭLg+l7iOSyN㚐-ƨ2vQSR1 K
˦Ixtzϙ`ҋAP#BI PK     A 	  X  0   opencard/opt/applet/BasicAppletCardService.classX	w-i{8ClZV;&j!6![,)#B)PB@7PZf!bJBCt?%{3˶,rz|<˛{߽>v܋ ߋPB
^f,lX}p2CIPG:gH, PXjHDTckz0f8pkL\Tl4;a9I^4'NX_(Pr,Ȼ#3~꧌<Xվ1BQ#ڻF5,(SéH4j$RFoԔQsv4lܸY`ioۚg9XeN:7䲭^c%V	EhN.o{}`w̾iO#1dX*HU]5:"I~(m[dt5Cj˭A:!$0o|Y)+F谹u@d:ށw
,2ͦ8M튤LTRTͩ#9Z\z7F<yM>w/1GUWױ^X霙E<}wdO{HHT(ߤIKPSQVmK{7"ul,Frb:vl\'%b$qh6RNHP$fDC;d65w؅[tD|d X3K]+n=A/`nY~jxWfhruBOޜ'M@DVdfJ ucQ
C:b`3vٶ³)?yA&w2@X;Ol1cJ2W72ͬZ+E!4%,v)W<stKOY}ϻd)y@@IҌ5ŇX4Mp32K~rʙ*Z˙>(0:a)(]>?䌐j?0c$]1ʴvqgKYt{#m]|DGu|>:yk1dBd#F,2ު5I	-ߏ'<lTǓxnLf'X(e'ƪ.~h1_K#1sPiuvK5a#eXzRZɐ}e|1j[T8OuI$G>5h&e&,gN HI3l@/[AsnTxpPpj8uUt;6ETѐsUftrYQXkP原3;X/`9'
A~Iܲ
pvQ]9 ay
O=EecQe6k[qLM\1S!3.a
Z![ d
,Isn.[a%"3iqN)Hl6So#-	E-@eOv'`1_'}MRWd$%J|M~i@@Hl$>h:=}s'G^[+5Lp"l:΃	3xOCcJFkfEgVj+3EXΦB^碄OȬX̻ξJ
U4Bqs){Oy|_݃/Kys
,eӔr5i̻XlhP*C|=~IoVuMӸVלAu-UY\S4ScO]𾂲1y*i4VxmI=!-ig7='*|Ӄ%<
pWB
*&Я{)q? ְ9:<3h#؎G&S;8fieG:b5³
AJ]<,|),|
_WhY2xBJ>yStDfad\@x~<<؂spgYGpB>7)fŸV8Gx"q}>RM?wnY+oi9~sg"O}GQ.ZS{Q穖,HNJ2"%92Ġ
2rcDxAg+Mw*|i}܍͐?%*1;ǰ/07_d3Ќ	+؆VU}xo*vY:L7iGK-_It_(9o;t4jv2GIĥ]jǳ?Ok->%Нqs
gQڐ<_VFvk1x2<畭,u%o%0Rǥ3g
rt'eE˻T}.ұG
84OC,i;b䖎e\(sa*sa*#=^V$*`Hqzzkw^.+|>RD^
,*->Obn]4>y:EҺ_%R{'	`?UH<5?Uן/G
PK     A wq    #   opencard/opt/applet/CardState.classJ@*QKA+PZL$VE3iRɜ9|{B+E!\5Unn!\,A\A"$R-w4ղ]۶!\F~`Ay[$w!CfiuS\¹m"F;`ĽA+-tkaXO?IX-MW%5p:Tiv䖰I
6
Ek,y2:W2{D^iا]qyQ5y<
>ISg( ǿ@<y_|-0Y!-c{8Ht,i-x(,%Z_PK     A zc6}  F     opencard/opt/applet/ID.classmTNQ]vuD
ⵝ" ( AFMD3NJ	4&ĘF}?HsK3Zkﳧ?|0|dUdh]3z(w̜LYE˝`l
B2*AeKf1g8+]ruT*$q#ThѪ
J5B":g*Z|tS:
2:Ut&&g;Z}̸U\eh.N٬3t3\'ˠT5SяsHQ0Nᴌ3*4%o7S6ˉH@Mq\j ,heY4d95=[TL\.:uBF	O7Bwm̢'M7aqM=7JB̧-79cJO ݉CCIk$i2OdB襤},%;hzO>\11R4aC'" v	aobxToQzsD8nl~!e?+wH"{27(/1
ekHt
F)6
iߒG!L]jP4,/:S;
HC!Jg.|&|n1ڷ!2R, գ3:ZUxP^򰗬hۈmc`P~._{$wp0"jPK     A Fk1  
  +   opencard/opt/applet/ISOAppletSelector.classWw-yeg!&!Ș;	ie;Q#KFqK/lyFՌ-P֦ei.I9詝&@iOO{8o]޽}w?%4:kAiʘ3B̅S24̛y@}{ǰFVQ
eٲ4Pty;E'oiMEłt	+TiBk t~r i7s-؁&
hN5V	P,,O/X9nr!pP؍=nױ-+]*Y<'p72*Ꮅq6}:Ngi3w&tUƪ7\ڊЪnKrb6WÑiBQkf0 !
::pX`z4}1@u*FcX1B:W-t9{\xӨ4JM%9\ηѥ!$hyIUD`M;	m&J)ij0э@&ݾЋ>
uALLG	Xg|vjH`_=_i2YQ"ELr[=謓JB:0z1V5a	W\L9_U͜4wǓlgbV7hm}ak<to7:8Gi-ڧê0^,_ZZ̨*cJaguGƓgiOiazH$%Nc#M)ş8NÑxGy(#J%SA%zV`
Qzh` u>`"9ؗJgMR
WWQ%}GW0=k%ƶZYɞMAc a1
F)
L9l[kF{R2:$|nHfS-SEmp1jz	dB%pf&jM658KҞ--~XVӶ7,T+Da9)T>)ik}yevϚDߧ:mY플bt&݈w2)x_clK$C;]3kGR%$; >e
WGLʛsִ۾6b93^AL5=[}	\G}l㯓Q(Tc}*?h6,UYXee򣭎s?2r/9ptCO{)ӫ&i#/.=CzCϑ>I_? C#?O	~ZÔzR)^UU}q0gJxي3jЀB+'Gm76oY֯װ:8Phmj8_>#ܧcMժť]7|HN]Cu|b4}UNbTo7v@|t.-~o`dvҵ7
,ZX)0TH3g&NCD8I:MQB4F2x_b-Ĝwq	◸_#	+.اʀVVyReQޫϏ51
K	C5Kt/ުAkҼퟻ_]u%xV=%q-\PK     A               opencard/opt/iso/ PK     A               opencard/opt/iso/fs/ PK     A +߶&
  $  "   opencard/opt/iso/fs/CardFile.classXmtg~Mv|Qڔ@	IvC-P(	B4b$솝
ZmA,TEKՊ`KĒVQmX}gvNsrffg}}{{{"5x
<>xUP.1ǣZ?IE30#-FLL_:~#ԝDJ`Ym]"rj"*
\w5FHm訝UƺnT͆@%j@u.uF9kT̫mݣ"1->L% IU,B=BK!/E*uD6B-5uŨ(ni6 =\,(͉D\S[M-WQڴ-I2yBLnXv``>vN|`%>Í*LѷG$2nRq3֤0̔>|5;D&ruhLH̖RHFRz
RILK}*u . M*`")E
12pâ=ڴ_3bZ_Lr D܇*e\$FvwUJX;VZ>`+ʙ*:fЪx"nDXvܩ]#"
9dtc;gR1zˇ^ݳ8+>EhmU"i$1HɯxŻүBgBdmT1įٕ⦵{0Ǣ1#/Ue0#*q`Z`jߚ*R6F&(ƽR~%IW'FQt Ip:_8H&Wj>iŎ yGv/ȿR%ŵ>#fE?Dk몒QY8bl#*cKXJoS]%~=a-}^-*h4r_K7Q)
Pڏ Z+*k.vSєݓ._oݬFV7qo6# {"A=٢.Oi0LKVU=|Ȉ٪er
iVfV#ˮESI75dPpɜqr7O%KZi
1/p鈗ԧ<l&e(ؙҢ{۴{ͫf\m~!"c$0EL]j"Nۘٴ_Zc2jOi])ғF\I.a2Ԯ
sQh-t;p0Ssύi;Y/f$^E	v5F(\?YSKQD&}gHT!S;8h2[`UJJjwXm
!fvy)RiA/!bޟ_'@
CPNwFj=K׀:?,tl	F!}ۊCG6zY}Nh	uw%~%ϱyZc酙,YYgκX
ۖؖG˪5XI6q8YT3G:PFj,tAjs2v8=	4!|Nj~ww(@]bz*!ܨ`[TTfQQoSP``/3W:+㕘ď{qR&	ǗJK5_ֆBqC/a#SoRhkO}[{Heڦΐ#mbG	%d?"%=rR]HT\tat'V:Fq7
mb7=%r!Bh^^LOVb?E	b+^OPgRD0!i'bLzZmU>G\K8ڳr37ly]'2 t!VX{f"<p\]tF}O=	S
,W3@69ɋRLR/ۙˮV~Uyh&.r+{gB0r	!x]莐E느	!N6BPP N[P̐ER	çԣHiȀ,D*a+6%x
tQ^7ӝ{͘)v~mc[JrjvJxJ{B먄fjcӤ_NM]"\a2eBJat<*'~cڕ΅?}|=_[=9xN&<>`Iц/X<E*h"[J-5,OSrreaT(b*akGP<2p vJ	"^)#Wq-EvهC\V;ȯ͎q(ްۿaώU6ឲ'`~>A\LTHȑ*g}Ux'v:Ca9<AnX.<L9q2]x]
P>d8PAI]FnP
坌q&<r3tƍ6~}!j9epbI)?=uU:7g0
pxlKmx'Hi{
QyPK     A iZX  f	  '   opencard/opt/iso/fs/CardFileAppID.classV[Sg~#($"TQZc@A-PM,uwat^zozㅝilo{/8-a&a~;}*1~
&nLN&n^pcm˔'0
o@-9/nfcپKeLC84m'NMONKbZC@mBdpKQ԰+jTJ z㹗
/ӪȞ̪P[{BC@D>/z~.-R37a+K)ĬX:;zړFJ"HSRf,4npO[r[&A<~k:)JO
lsfHCÊ_4%۶OfΘi+à
F-3!1eS0zv/0Ӻ ,к[a(SK)ddM["en;LOfCalqeBuV$aaYJAoҫ6_'K·["iBI=I+/鎡֥̀3H%c'c#]JZ+!Ltޔcl-=y/aiXA(]NwsE5yTUpȲ<#Y6ns$U2re;Y؜ĚEslc%p-YR7ra.[dhYEޥ"sKwҲ͝ɛ"|f7	ÓT90Muו9UP:_F˧>l ~D'hъTECG@V;	w	ꦢ
fq}xc;y` -8n|ZS|>90㷐Op^@h(flǏC,ں'Rxx#Oբ5_Kh?Pwԃ`.0۶'~;~]>
BWT#e)z14cO3RzBDqQ#*~5Vd$"5T	
	&JZ*A!tA!VWSc@}tUzy
z<.(Il4:K6qޏ
vͨ-pRlX:I"-jg]jg%hm7T5$$[
'UI-zl/؊;[F^E' UXMtq?3&3e>=1>C0gYPK     A   	  (   opencard/opt/iso/fs/CardFileFileID.classUwUL-	PG<4X$INg
.8lԍݹah$wg4̝o={' &"#8Cirjy)k^HL_1D,6ۂ!~ҴMqa0=uӸm-î5xfzT$tlΰE4I-k"2WP!2>؉خb@ 6aHxpw05dYnXnH.UySa'>I5ULU:[H8;'0ErӱId3$`xaxXE
IVԇz2usHq o0xJJ]3Ȫ87;Tۂ׹ˠ5
%9.JKn0*ޢBV@Q18.[^u\o	_KO'rBqFcqᴎ3 y
2j&ǩaRt93#u\@A?2%y;eRkibQ$9T
kpMaMSy&[¨.\4agF\bB!3CgaR@!7SX|ue)(3GoBI*DIqj5*"q~eXކ3trWgaraxDiU_gUt|#h͋\4yOf7\ձa)qIUHG=L7[ SYmgfgQK|ߩ*LH\0y{4g
K\6(Uzɶ[
a+QUAd׋SiA2nЇpJ59zF6
eA%{W [`x6c#V0~=F
lwmVE+~nz6ȡ50|H,t=Ncc88_%q̡.R2h݇GTh*}Bj;jfY;}#UI}YZEAҊv% mO}'i!;?& 	XgȎH}Ҩ߻:RtSAM 	uZEhM_<ewc_*GC`q?AapM &(uφshi:70^OZBIؗɖ h~K_@uc=@Ly]_#hMtLq
8Fӽn83҈ؽ]Q`Y<8k5͓rpp;PK     A Z¿   @  &   opencard/opt/iso/fs/CardFileInfo.classMN1"Gأw!FxSkɦݴ	>2_f: 7r
Y|)]JԴ/0ݪO%ke+ޒnqf)p4c{
dYh	/lվG劕y"|Y4qO$/Пn١p^SB.@Нw8 .a(qxIi/PK     A      .   opencard/opt/iso/fs/CardFilePartialAppID.classJ1O8c಻ZtQ) "TOF$dR˕ě;ELr/~|@'G&62t~έ\U?T|LZi9r!TF!Axςka|24C/ΝA	%c;ByZΤ3MNSUk3	b}`@.]-C>+_ʘb8
pS"MҮn
B]9ռvOi;~Oݚbծ3_PK     A ,    (   opencard/opt/iso/fs/CardFilePath$1.classOOAƟ.R?Ģm!xPCL$vٝ~/^<h1C.p&}S0LILV@*_D]O{-_W L^W3Nc,.
p	cYxPGޛc=T`6	Z}ߖs,mP|eyĄcl]țY ,$EMzm5H@+jmy0	eV)u/}6NMBu,ܖ"}id;g{"֑l?:2afӶF%OL*"k`~~O#_ZOeGVnm:Ѩ*u1szG敎RJFPı̯=
ua(Q[ĳ<&F3?952y⸒"o,p|)r{[ksSpS̝E'=)ǺX8
Êbb9j䤕Sf\a.a)jzITB
$SZrlJ?PK     A 
    &   opencard/opt/iso/fs/CardFilePath.classW
ty~~m#cX1Q[1156!dId
OmnnˏBzK		Ij3hеIwkYi&9;gtg9c0$c9H߽߽4
x
?4pj!4DӉtC+ј=.CAm*n7
<(DBX8>ГIEC
p8՜QpԄj[᱆",D,B%ǺkD۵9f(kj
P+E#D܈g
u{:hkv{HYA%(xZ{RF2eDqb>,V1#>Z+tC#FR`6FC$U*
X.o"5XʬUF3XCmHaJ"Au
F2
sI\1PH\hf)CchM_zBm1c&s6]A6+f}<T{ ~h<n4+ۥVӣ箯	]reΓw`w"PI጑3xU>('
%
v^fKV^Mbp"A]..!.k(,Spִ蓻qR,_S][NQ5w_ƫmlN&CmnܣPsuyL4ӻŐa!> TTX11/q H~zfvEUt&sɊ"q.a
GGBH0ec+D">R2D|{2ͼ;b<3hШa^*0K<7']E`hG<(>@ˤ2i1<hA|AIdk@y͜S1s~^^|ƃ,2Nӡ"0{odx@F'tR8Ip,(")I$<_bME3zA[b$eu)ﺧ}{g駓uO|}g{Ghwe鼉zoZի_j^foZױz5Xƍm}1CJ^"SQ[/Zt鈄<dvVAF۞V	GwOs93kӆ2QÇTHIN[8rwlMd1ny8H9%as_4ch][!M)7N)Tfohg$)	0~>&ڲgȼ.	AkJOtPV.2iKP\$cbOHdWd7nna׼
ʖJGg$FS]X%g6*eҖD"!22Ét~g2қ3	5IʋX4)UdDx0ci)~1
UQ3[֯nąg%dl4~ ߰0%#,1pH<em4A@坉YJ{%9zDc	F6_vKU7QXzd7,p3,YmX_?7?72KC[2IOp,:@~{>	e`uOzc}3P^,r>E>'tss?H;{KTa~qjЊ#|߅4-Teq_Zlޟ_ W2;Gőo_i5t::wrY9%)q|U&:
$7~S1<gpO%xx"mD\*28q
e7NoƊ)tٷd(zpOlZ?u֝F}o

X;ט]ŗ&8cK[_F$nG,LP[p3N{뒕Vu5զ{D%SpM`:Ib#":+Π$:zƜjE]:}GQ͓&͕v"Ǉ/b9Y8DJ<5x:)Dp8E<Oo;O0
=Ywxo`~Ŀ,~_M?q-sUok&jЌS<ˑSwzsK|nAF'tPŇɜ'qO &9rj"PnwnPBy[Tޮ.gnsYVOv?s%+
VYl\@p'bmBG>Tl4uS@۝6\&.q*M
K毡iV?iƇ89m w/Ce|5*GC(nibmoIn8{,_Lq6|BTdzmAN\DhH("eʉ5|nP.ը($7Pl$5S/3A.r].Ӭ%Ku#4vSr%,/IZ-@AM}8J=rH{$&A-.kK@oRg+5_iŲR7+w9U-DCZj
uVqV_u+WM}4ɞCd[Gs8ly`7ɟ,܋K]׍Y(!vŚg,k*˚ڐE݆4ZgPߝA}ܻ-[vT;pډQC{ڝޜ}$gLc"έL3V)sXeenOhG)B4JD<	#IG7cHI2
::f3,P(VBcSq|J悪6T9YA偳XW4g0.ϋ75._YOhS:SK^'9GQ>F<J §>M!lE}.ĮsIQtC\	*YlB֬Y#+X'(svbcԄ`֯}QBO}	hT_ƭ߮A9 VtU}{E;2omSPR@U,B'y[2epbth[}u.bt?j&
yz͎ؑpѝz8Գ(WϣZ""1ܪr)J-رU=qZ))ݹzޛ+vǱXI >~%u yIW}{Dl롾,RubzIu
}\./U!m2q&)%JCUi7D;j8f2fj Y?Vo19EKm4yz^.9JU#
K]lT_f\CS
V-޳omqL!5Nu|iWgsZ6g	W+^xAW'GBPfX/lᶕV%EsK`-5vmhs5aS8GON61_]T?PK     A <8  K  /   opencard/opt/iso/fs/CardFilePathComponent.classUoUiw]貴l--|WHY(,.op:{۝vvfE1Qb|7 H^xF511g_φN"K)s;{>σG v(BG PZvYK5Pǰo/C+5\uDcG!ekN>mQ7aWŒmqp$d913(/g`(XAcMX2C4sO^Y30t-17UMC?yH >oXFq^AZ
ɭ11z/ҕMe"*AyC4İ	i636IHX˰gUQH&6$("EYov#݂u/î*ܖ60zdNC~Z"ޙ
A ٨j_T?fJ!q7.v$=},!\KlʝEeHy0hXdq;'6uC\rQ4t2rOJXp:4W%*7Rul.45i&jݧ F>ϞoƮ*U@9{dHVIbm{h+yWq6JJkb[攢ۖBn5S]w\d3hKޔ2۩vt{T1PRt=e+^+F>WEvv<_9_1PXC-JQ\+:Ip=bo;S/Ls`Xaʛ]7h*]'J*E,DF3͜qJe,kYP0\FpaF@Z)ucXZKonMF#$-Z]FsTOo	i4.GL=h+[ޡY HCtJxj O%||,R&*H@SM7F]2{ɸˣ3hHocY2>p.=~kW14OFM>8C~_(_
lhÊ=DiY5񊯙vHM:5_Cm=6LcC>fҭޖY_q+[ۤ-.;K$|=>sjb/	Ƚľ9쿉&5qiA }#B]M%װƏtE7sT.Љ؆wO!t8c,q>.ϸp`
c\g!|!kL
4>3,KE
!ctt!_H_#hH<F=k5Me/r!QQ1#
|
-?AFM-"?BiGgn"i
Z-DU#S)VGUfQ5legAxa
9ImG'I.SЯaPK     A -  i  -   opencard/opt/iso/fs/CardFileShortFileID.classwUƟ4N?lD;~Ђ- $6$9Loә8s;ݹsp9~l\LKi̝wy}w~pӈ!!IkI<s50<g;Ͳ\Je۵UwfMۘ/kH1BMOC2cH2c*~!pًw:ذDKڞKc8ʬ0FquT1v6Tx%Ft(u&mS*:Z+s0TNrg1gqĞ-mǜ$b^TTg0ҋ<
:[_֕E-*	͐"
 .pA$2J>C@TSWD{II)EhL)d({+ڮXlׅPŝe9
&dӦ^䫯oJtۊK|Np`oK$>X7yk^۷*pƄNB$y[B6 v:\7ɾn2Ħ@q5
Kjz?e{i553sܒO}Fy8"zZ5s/pi%ba2w\++Ã@>c8JO'_J$4
eC#HtLO"B1X1ۻ7df<m? "Tg$+t=NRD?	*uMuuZ">ikt1"Z'#<	N<+A,$<`	 }Us{Us(S
:at?RmL>;w[{0e1;(rslUp*lbO#OHķ<߃GGɧ#f)yG%HCUKayڇGqT¬qH-z_
XXVwpPK     A ܋    .   opencard/opt/iso/fs/CardFileSymbolicName.classMO1_').	-_KiY8!T@U	E !ޜ$]{_HΏCRƞy\\\XÜJ ÂNxvԄ2QߒSIPaT|boo<jMI^_wPf^2EUC00g&"Mů<8modnBo~DjVe2,?e( W$=*nľwPCj
n7i3o:>ϤȜj:ؚ-S0TG';<ݦfoeK,Ʃ!_-Av<b//.-y0Kxo1mP"BɫJ_E>b'~5?t`ܡNfoPK     A _}    )   opencard/opt/iso/fs/CardIOException.class}N@ƿP* 81j F1Rq
-`H< >qm|{p
0Pz4g]fho5MksfqrB)	4-g`٦v4gks{Oy=AHs޳Y*te,Ce5}jŐ;"eun[W~ro`u4z-	{3N(2H}n@ӝao$MgV8¯{Mkކɒ'y5:eLe^ȋaT!CSl,Pi邪D3T	kT|%"X ]w?ўC<4FXMEtaAk/PK     A   P  /   opencard/opt/iso/fs/FileAccessCardService.classN@
CZRG!d* YBjTY4j&(D	WcP;Xzcϙsq	`=X(]DFmGUR;
FRy'̜StD||9<QzV%mL&	+C岗D<huGJZeG֬+
	ӻ:6VĶ):=5v;V%8髰?wyukkBLpJD ^6Ţ-ȁaք,M>Z|8x/Vs;iֳp}3[,H]63$W[BCJXJ-7&<101ߋ<}9Pq3zy;y{Y0?-˰7#[C<}L>aƫ~PK     A !  <  /   opencard/opt/iso/fs/FileSystemCardService.classQMK1Եj<x9xIEA*^<ӦlwK<Q۶,+-!yo)v$*tHѮaP֧٫kS{
.M.$;δu:}2AKscRq_n\zC(]&^bYЙԑ֪4H6X0v)?$ӱ$6Nw莍m6&x=Q;}uAs9,YTD*`nk3\_,-lPK     A               opencard/opt/security/ PK     A U)5    *   opencard/opt/security/CHVCardService.classN1 >MH4pS-,[P^̓CGč84gߙ7 P8)%]?2R,j_lvM k(f<H ?~R@cHVfٳu8:,O]\.Xjs@EQ5Y-sTYG^ρ ;z6F&sn!rB6%̯Tb3:OD+2\Cv)	ϮY2xe>2(MVP6{5h=V{Jh~PK     A m   {   &   opencard/opt/security/Credential.class;o>svv&FԼĢҢ̒J}ԔԼvFĲDļt}FҢT̜TF~z=R6FFf`d`Ll PK     A Km=  <  )   opencard/opt/security/CredentialBag.classUOU=ݝ*)ZhYYZLHxW5TD4Qj4>&;@*̽;9wx)$	od,Z']$AU.fRrÐ4N *S*[iLe*YumZfҵ
F"b>oSmC,9a;=;u,yUtK l
%rG1͓Qt+U'#xZ	^6yb=xB73JNt?`hT*lWN3cHDD+rz85+Y$| 'r<2k\hvv	"?iH;kc4kT z4g;\umr獥z]2j_?zT{$<%RcK.iVj}ՒYeX<UN@IͿ,?Q8yDAY46tbW_Y1RU}O"1+EKU״l
܏AE88xd*5]D+5u"#M4}7<k9>O0b̟SEj9U|5fz_Й^Gs}
܇21_A>ng-V#?Kt
b^KgҷfŜ*Gm!=:C;xbZ:qŵ͐_K!2U&r90GgQO3j:#_sϤfnO.~O yN	SZʻh	1p0m4[jdF]w]xOF4]ư/\weMxK<<.&F5=tpvTH]mt5]2A7%knM .G'ouN⏨cb?<>">Cxw2$trRcjƞ{n=Y~c,|&RY"'#$
e_A\PK     A 6/    +   opencard/opt/security/CredentialStore.classT[OA-ݶ,(
P-zPɰ,ݭۭ
?w^1Q0|Gg^vgs!L@PAHE

+
,n/iWc2("*[<h%ִk,grks\!Yy,-9TLK{ȋ˞0g3$xbC0F4)HhFVf-^,2(;ߝUkKTPBF Rqmv.z)9?
RwfW4Ӎg:PwNy\.JԴ*SE.ԒAP=Uf8nWE)ЪFMk-Uv|.
2urm̔돯)ܚ)1-؛;ѩ HT(8GI]JN^3ܼisK˒ir,zI3Tf:r__gh<r*XORQJ.uݬi^Pp
*SdtEPqLjnIcu4fE
O_ޯjI;Tͥbyf8͇? hBbׄVa3D4ВKoP?QbqZ~!G }m$1}z,j91 4\}Wq'xOaw4LouB}RW)H2`W ^KS!jMJ	ziov	QZ@-%^PW(}sQpYGt?7;
.a>\!g;ٰ,	Zq{OЌ,R>Ȉ-F70&PK     A /xu      "   opencard/opt/security/KeyRef.class;o>sNv&FԼĢҢ̒J}ʠ4vFĲDļt}v6FA(zFҢT̜TFnz u@@ @ PK     A ߡb      )   opencard/opt/security/PrivateKeyRef.class;o>snv&FԼĢҢ̒J̲ĒTʠ4vFĲDļt}v6Fa8$_Zꖙ bH|Ff&Vv`dL\ PK     A N      (   opencard/opt/security/PublicKeyRef.class;o>snv&FԼĢҢ̒JҤdʠ4vFĲDļt}v6Fa80ed
/-JNuIedDPh:#3+;02pI&. PK     A q      (   opencard/opt/security/SecretKeyRef.class;o>snv&FԼĢҢ̒Jʠ4vFĲDļt}v6Fa8@**J22p%e22"ۧ48$ PK     A =`H   6  )   opencard/opt/security/SecureService.class}O1n@%H@+) PED9CΝu>k)x BQV;; <'hdgtȔ/l*m jk8AѵVvZ}mD gEE|#)k7.Z3OGkBocֻ*A0>,̓G5˿3AȩK[Jh$#:'e>I?PK     A !]l      *   opencard/opt/security/SecurityDomain.class;o>svv&FԼĢҢ̒J`(%?713A +,Q?'1/]?)+5+8(9-3'AUH9##302I&6 PK     A               opencard/opt/service/ PK     A ]~0  (  A   opencard/opt/service/CardServiceInsufficientMemoryException.classMK0Ɵlt:wo{{a: T/޳,-)i;cyxĤ-"A0[8A.*T%z1s{c3	(JTOɈa)5v+-{AMᧁ2Ng3
_*)'hBt9Nfjab$"&89$p<<sq-zRQ,fW	ľ
LL x ۶Ml02Jk	FyrUA.Z^vfPK     A v"     /   opencard/opt/service/CardServiceInterface.classu
@gF[k-+-R* Xҟb.1gPEQjr0CAs%^'6UXmu^9HZa*+)2bKY*Z$21am>JnNl[!=O#<JQL2&~MkD}
FM: PK     A }4  *  =   opencard/opt/service/CardServiceInvalidCommandException.classMK0Ɵlfu:wOnAtd
CA(^&gm6)iWZ ~(1i
96j۰4$8	UHܔ̝ɬo$b1͸OKLAмgzaz}ԍXLq|O;dF<8"fMe:nϙHOhSM_
쁧?vҔ.
!hRG}2b~@GGw:sc)>Sl)E`KghUVmsxpWaTUSm[gv? PK     A 	4  8  C   opencard/opt/service/CardServiceMissingAuthorizationException.classMO0Ɵ AE
0M@!L/3@.]!oăel7=OO~|D8uP&	!U37)S+2wd&~^Ib&4\s[\p=$(;Xf芺s׊yTKpm'=OS]Te#hx\e<eN#3iz2Q@fO	n
tn=~\˥
ل[2/,	fWuL&&kl{\܇MUEhdn Crl6alp6[eg PK     A h0  -  A   opencard/opt/service/CardServiceMissingCredentialsException.classN1Oa`QŽ;.p	J]nPehfhI;_2!ƨo=NھYEE^
%*fڈ
B73qE*b(I%!CmPf+z+$\͂Qj
cOH3:}hTT~qB=H*qOMy2FRz郴?<\X9Cu&ג,ǠGU OpS˥9q1ࡏ]Wrs 
`蔤-wk	NyrՆ@>AvPK     A {,  (  A   opencard/opt/service/CardServiceObjectNotAvailableException.classN1υDQIA(j&/aJ:ZH\ >!ƨ=Nz_^^Fy^	-1gzpE\};f#UL(^X!hhQJz#"O2v#ۄZf͊Ɉ^_MXNAhĴtfG.xv	\$	.?E(Rsq'eo1ɁmfZ3qΰkJ&B{6;@iY[5+N	GjCp>jAPK     A c*  "  ?   opencard/opt/service/CardServiceResourceNotFoundException.classOO0Ɵ`(;x0faekf
K'~ ?cԃ_}{ypa
4mX=&peDDUER1/cj#MdQճ]ҜKAs	As,
P:QD[Sx\q!ݧL,\,DϚʘC.ؼجzB*nzh<#;eMJO".̀C/kC%w 1?cOw7:[乼>ұ0Ʊz}l 0JmW{	3JE	:Š4?+w? PK     A 37  6  A   opencard/opt/service/CardServiceUnexpectedResponseException.classN1Oa`QŽ;.p	
c2q!ʾ?X3Nfk"qPv.L;i
*
(pj(p#RsO蘼d7aPH*j-(C/LV{j;Yah'^T^{bi7EDJ;J"TtgY`&
_Ly,m:L?<{nHIˏk1T'zKkrp
hvoX3ݹRgmp0jul-`hV[t7pFyNrՖ`C42PK     A ZK  <  2   opencard/opt/service/OCF11CardServiceFactory.classTR@
-b"h[.Ep
fGHIMR@_ /3}&d{QA`=}|7 w1A A*T3<tɪpΎs5ELq?2TOM1c0Bˈ(0T^e157:_(MNNuM5-l_\{434ϰr5h%Qpܕ*
9XzSTSrjs9_P
ZpnnY[/W;ۆBd6uZZN]f][X6%}Zѫ5+˳3=鳩>̀kN42Mc,~GF}QaU\B*T-xZmPlTqCƨr\nS
O>mX|Ɲem䢣t\?aP*#鋴)PdeSʕ3LJ!~^FR-CH0"ڌ[ϴ|Iw&}":!45|S4^ +6ЮUbC[8; mZ	$<}w]hWޑDN<DD1w=m`SA^eA%`%"Ĥ }L_ x~&k'Ze(G=
wث$X-
"$2-xR{?>a#}!ǴPK     A               opencard/opt/signature/ PK     A Wp	/  e  5   opencard/opt/signature/KeyGenerationCardService.classuN0E#Pk˂/%.J""W\'jG!&m	)"KΙ;~ ALFdrx96U>u$hzK&W|ˌ ;C)+.pV
v%@++q/e?=g^UtC'뉦Q8i	Ͻɒ"!@ShF-Jvlb3%YK|ɽiMGjPx|rt]WyNӍ{x+xmpT=x/7PK     A bN3_    1   opencard/opt/signature/SignatureCardService.classRN1= PTĝq#jHq\ɪ%c2_sQ΀#h]97 gs"8\2nnO%}]ta<ByllF3`8i3cڊ\hd&8Ag}%)QK)a.S"=o<lbLzaE {V	7n-u8y"CꋦyuAp2ikZ~èHv5xd7d>*JG_S7|f?;[?q"0wk(43KG0}N\B`QenVlnZМrmEw,hz)>PK     A               opencard/opt/terminal/ PK     A C      +   opencard/opt/terminal/TerminalCommand.class]NA
0A/
b[AobMJŷy>JLA+taٙegg^c07RT	7VUEEΏ_:a	Lυ9SI,N]ҦFCª5Rح~_Z̵j0ج4CS80 PK     A               opencard/opt/util/ PK     A fC   `  %   opencard/opt/util/APDUInterface.classuMJA_:_F{1s3CO'x6C5QH+{E'*da[ɕfvWcYa0ѥoe6u*@M,"kI7'<$zᕊп}\''#]٦l=AgQ#;Kgye^M"Z	k8o	-EJ(GBB~ PK     A K (\    2   opencard/opt/util/OpenCardPropertyFileLoader.classVisE~:{fX1QDQD
áLv;ɐٙef6QJS~
KW*O&C+~޷㟳 ܉I!!#ƤeXAwoG:@hwn)]%ߴ(d5ן3-qtX-Ğ$Q"X9s\
Ny,l	4I|M-k3W֣,фeLI֖ܙ}
EҜns4h'aiptDZJ+V7
j>n]*HMYq:nZdjc% |{k`_Y_UbߣI1s:utVcB:my[si^=X!9`cőtF%ؾa9EJj0׺ݭ0ϩlqKL4
W(tlVGBQ[ybXë:Ħӥʩz8'*,l㢲l2Ul^&0@ܚ	+NA&0( UnFd<.8{Ϋʎzc:a?)d`;l-7 ʃe#tI7`#ŖWvnM+cJtlĦvAWq4h6L؛gs']KͣvQzIX8	
,[/<5JacI3N5fL[
#e2NΰT0ꏛә/NkoBu3)]T"qV]SwYNTBu_YSi0Q)fyy 7wza؇Q}u7m,{qx5ِQ+9ܜd她TXldF1+q'~ X!!,sDA!DcǓi829L{ҙˡȱL󓴢fyKz33Q*^J۸k(k|w@5hҷ۶t{-U
	pyU>Bebֱ3S(ަ`pV؁($Gz'pQBg	ʼѐmo+cIkXe,v;U'Mn
mt,:2֩eqڏ{O!>=wuel==4iDg'CtQ:=F Vsfw!tYSˤg1\a\xaW0Y)<M?D~sEimI9PF/pw#>C6
5\|n=mPj [4j<(K]!'އA;RL?ˈkm8ґڙz]Q~1`p8ڑ2ⶳXGj*kdhdC)t)v[GbbzЇa
PLz*.	Mz{
xO9Ƨq<',|7Wb'-`9^J(o+Hq*QM%5dטa[hAR$`fDhGǛX||SA|O9PK     A Es    +   opencard/opt/util/PassThruCardService.classTkOA=Cb>UјX51Uc!"M4H4&(vSt;s{ν;?}nA#i}9)-e{o;*䩵}w*G?O=Vu
JK[6CS0RhUͪ0|uSljݪ˅Uir1Ѫ;^3ZZ"V6!Cu=[R{+B)T&Fpt@kaec8q\o;ӁTJ1<a.5%\ |TNTMO2B.{+E '+^:J.k_k.y2Uꏻ*|Gcg2pjWm.3}2LuSC˧wU!@-֢hF"9J'sq1Lva}{HEFf%J5s9z=O8in,#[s4xIlaVfILefB'|9l.Ff#%mg?QAGa(W5RxCѷ;P=!wP [HPi,Hq%:<+wo闔(r̂q*Fc!PK     A S_    2   opencard/opt/util/PassThruCardServiceFactory.classR]o0=n&
Wj+/ԉ!"m/M-Ɠx 	6	$~ ?
qm/slߟ ]PayAQW{/zNya*2r50}0(6ʳ8y07_8T
AH(32]UDl,]p	.B1Q°yC]b~cC:b-J'BD`XF:	G0U!싢H"\ϳ̻Hqg'2oڞ?^WY8L&cޟ'|ȩnTqi.8J+ 
'0BYrNWi7@}!fm[?@3pb
} שV!Fd}<bd7Yb~Ztl	t^m)8V8:)sL4oPK     A "|        opencard/opt/util/TLV.classY
tՙ~߄@		L H hP G$	 *hvc[]buԟ;=cv˗1L\s};S .?B; 
y[;-WoutB~'휝IK[[rC=
+Zs0c|@eJY
L@>&b[]
A'0	
D_LAo=Xwz֍y
/oOĻܴ ˜+蔙!39h*Dfs9[@B
{ޝ
7oh+ZKTX)*PT>>և `xjI;H:ֻ  ڹFaL*|kA XȉTa XTzt,%P%mھh"E7ڊBzhg)5k"G-Gp?j;Svj7ّCY6djt$®P
W̈́NZYKz	ǈco[@PzJsUA
ٶ!20o4~)Km9KbL<JGچ8m׌1,ޱeA<VlonGG462vi;%mI6A"	~QΝɦ\Î 
h%岧Lw7\7*|)s![qmb]L01OvÞ ]
N\w${c6]߼SlM'A N?_$XSXo`c#h۞tⴼQ)Q@FJ5ݱLݜvl[1\}(~#n6ᘱ)HGLR;v24U#-ğXmX"͜mwwHAZUQoG_o*)0|Lt-1*m-:7s[%l<єTa2*LGe9w{6<Iy[őnj=[&5ʝ%Hg.$KRK$ӳ&Yr}q9O%>ZLY=+bdgʏ)*NmPj~̞\?~.x]&
Iij~-3cx7{>/)oʆĻw$lTV]H'tefxy3K5&z6e!Yf$H43@Cw7ۘT,)D|1)"TBb㓭GZ8ffl̻~O3{;R>F3愎BNrE\/ R/@E"({ư̛fKeaE]εq9ؙKu3 lAXq̥+W|:Cr(>[)Z{n(O~5ajV,FԒOFߠRi\\}E楶lkΑ5FYv갛:LR=a/ubΐƑƖSFCr~ӒSk[3ttEx><G0{?
*]"bvDN r Fl!eM2ש=tջn"K߃:bWPUx
E=@<N<8X[+3`wR3z1<<h|>|ۇ9l=-7w=2S[AO	<Ek|fDrw֕<2.F=ZX5?ې!edMfKO>qij0.3qGGюc'Mxmlhvٽ}>5%\FPOE±cFۑy6;`#?<4"2:PĸE#Xq-2&QoR3t_[1 wj|
uF4;xs=mAøI<j{KĎ:Wێw)"<NcӮ VYGlaOpM滅Mx=tXXB1>he=cȴk']OAg&N`UAN8^mv:_rdVxR+xD̀
w'K񹹑Wr6Ѹ9)*<+OcR%UBu\LZGMTPP0N _MDUx3dbT).<0:柋'Qfyg{|Q
-jvͪ^q4b$zL06ߖ7Zk\sU}Ұk,wJP7`OwoO`!`n3ɋ6`G$$Ś%aZ/@{e^[x~)ҏ1Ǽ1%"LG(p1,	+#(MDYQ"(ScbR,SI-=;^=	Uدģj5qXjeoZߨXmğ&rv:xթT[\ef#M>FR|^:inSlaFRpYCFu\$M7QxƱƱ`gY҇F3'IV8iyIDe]uWsaWI!ciwN 
փ,cR<^k"rc;Ջ\i>LR;0U]zDNR7ftwUvd	D/܁QF+mne*+hP"[Âs'r]Sw#R{PEԾ9ؖ#$Λ|GrZ13yl@9xeGUEǰ⤿2**ҏ+ﶖ-7J8Kk	{~4.yβ6]xXPȓO %!ԏw=:f3Xe<`Md֖KF}q:ElXY5
§1ij^Dŝu.Z)FUGzLb\,1Ĭwzy[:J
?aUU?gx:/P$PFzwѢ&>wqbʝԨ)w.eOzs5,	aO2`<dzX00)^Q7b73톽0.=7*Gr}t%L;32)-כi}J`E,OSb#L-LQ0[9,3VL
_?9_Zvfo6$?F3N<y,,B!3fe5;ͪU"};C~fz\z<z: 3DTIӅhХX"gRjweLFrsipe2m"iZڸk-C0|jL5/l  Z@P}4l!}8ԟ<[̠R4E,#VIt`Nces'MVr-7oNgghOt=
곑\	z%u
LFnFnAnNUS7z|Goz#Wz^mxSG3*g{qqƶ<eEzv9&irޚ|Nmvw0?A=`QĚ.+2n?	IǐmGTqC)9ĉmJŞ6":h-F]j&J1IyyuU{̮{ 壸8n7\lE6c%aM&&;RWlnw҇nh}#
M({3-ФoUz7_݁$}znw}7{O{4/އWxM~ ~Py~T~XҏcNTS(_&F^SI߹jD6Pv8OST'sX0$OaNqd͂ntֺyi/ծқNeyJTFZ.nۭhKikr''է0NR2fq|~%UےhfPA8;*Cu,ϖu^Gǋ8ew%ky<_5o
<com*DPK     A E\  .     opencard/opt/util/Tag.classVoeMgmn[ʽl/ 7*RR,vڥ۝;K1#_xmLLM,Jx5/t)Řf9s~;k7/_OP 5 -
Q1e;	[[2+Pc5݅0PaD[#f:ad1g'SqcV^
<Klf!FP2ᄕڙ\6)laX t(c
7'F昂@@֚nUZ2,WeM`8Pa@Qƺ2{JAŰ1dXޗ[UEyMlL2=D-V?/hK͎p})D۬62Iw5{0)̵͛[KO89Y(8̝uPִŮUE]j7F\O|6y]{3K^@R!$K42d1ǖ|JtFK,%I4N摜Xrj%2wH\AYl^&B]V.0w&exYPb6[MvA<!
F_?C@g EQjx2}2]2v	> 2)3Ͳr#Mw:{c#<՝&ZT+iLE563-_@.W*ItqSʑOY"zu\\V{	J	b(CyB vCIXӈs1pk]o_Ku# s.Ky 4vaH!DR$\慲T`-@A9P0CJZ羇R&S脷++FU"/rpr;_D,`lK*G
(uX/9>/Ra^׫j\'s%">(J=R.vKb]-+߁Owk\Gs
NɲT3ǉ
qWY5Nޠggp3V
aa
JpuT?7Nz^ի&\O"(WV#+'^=ؠv8kGh
G{7XP;cR/(J>V`g4?d@A\#w)9E6:	G˘G˘Wc.-"Ma
6bˑDˡNE,]Ċsŗ+Iǵ<
_cYT~72( 1ֹtGU=#O{xY:a-h87QUΉ2Lly<.WR(1_f\{k܄1	5=0xlQvk<	pbt<~QͲ	~pc	c3ЄIO؋o~0~Uş/N<ysI`oJ3I"ແ *R^yk]nڶR7aAn,sGZ.~\ʹ&ls/pP)yK[>5F|"S){>#sde^!ot[UH k:Bȳ0oJa*&P.l9	Ihl{s,J/?+rR$>T=.6IqXD}8ޔx518?"8؇PK     A            	          A    META-INF/PK     A #;   R              )   META-INF/MANIFEST.MFPK     A                      A   de/PK     A                      A   de/cardcontact/PK     A                      A   de/cardcontact/ctapi/PK     A GD
                  de/cardcontact/ctapi/CTAPI.classPK     A Lz,    )           ;  de/cardcontact/ctapi/CTAPIException.classPK     A SX    (           
  de/cardcontact/ctapi/CTAPITerminal.classPK     A 9     &             de/cardcontact/ctapi/ICTAPIEvent.classPK     A                      A  de/cardcontact/opencard/PK     A                      A  de/cardcontact/opencard/eac/PK     A D   /.  ;           "  de/cardcontact/opencard/eac/CardVerifiableCertificate.classPK     A G2	  :"  4           2$  de/cardcontact/opencard/eac/ChipAuthentication.classPK     A =Z  .  0           4  de/cardcontact/opencard/eac/EACCardService.classPK     A k    '           5H  de/cardcontact/opencard/eac/PKCS8.classPK     A {  V  =           J  de/cardcontact/opencard/eac/StandardizedDomainParameter.classPK     A CZ&     >           0O  de/cardcontact/opencard/eac/TerminalAuthenticationSigner.classPK     A lm'  e  ,           NP  de/cardcontact/opencard/eac/TrustStore.classPK     A                       AS  de/cardcontact/opencard/eac/cvc/PK     A 8  n  :           S  de/cardcontact/opencard/eac/cvc/AuthenticatedRequest.classPK     A x    2           rY  de/cardcontact/opencard/eac/cvc/CVCGenerator.classPK     A )Ӛ{  
  3           :a  de/cardcontact/opencard/eac/cvc/CVCertificate.classPK     A BT  
  <           =f  de/cardcontact/opencard/eac/cvc/CVCertificateGenerator.classPK     A Tk  Y  C           j  de/cardcontact/opencard/eac/cvc/CVCertificateRequestGenerator.classPK     A $)
    5           Co  de/cardcontact/opencard/eac/cvc/CertificateBody.classPK     A F  l  5           y  de/cardcontact/opencard/eac/cvc/CertificateDate.classPK     A 3    >           }  de/cardcontact/opencard/eac/cvc/CertificateEffectiveDate.classPK     A :O    ?           ~  de/cardcontact/opencard/eac/cvc/CertificateExpirationDate.classPK     A o  8
  L             de/cardcontact/opencard/eac/cvc/CertificateHolderAuthorizationTemplate.classPK     A u+{    @           Y  de/cardcontact/opencard/eac/cvc/CertificateHolderReference.classPK     A ڱp  !  E           ͐  de/cardcontact/opencard/eac/cvc/CertificationAuthorityReference.classPK     A Ͷ  -  4           H  de/cardcontact/opencard/eac/cvc/ECPublicKeyTLV.classPK     A S|  a
  1           d  de/cardcontact/opencard/eac/cvc/ECSignature.classPK     A 3w  u  /           /  de/cardcontact/opencard/eac/cvc/Extension.classPK     A 8K}  h
  0             de/cardcontact/opencard/eac/cvc/Extensions.classPK     A 3X6    ;             de/cardcontact/opencard/eac/cvc/KeyDomainUIDExtension.classPK     A oON    8             de/cardcontact/opencard/eac/cvc/PublicKeyReference.classPK     A ~9ؕ  
  2           +  de/cardcontact/opencard/eac/cvc/PublicKeyTLV.classPK     A Ve  ?  5             de/cardcontact/opencard/eac/cvc/RSAPublicKeyTLV.classPK     A y7  F  <           #  de/cardcontact/opencard/eac/cvc/SecurityClassification.classPK     A :n8^    2             de/cardcontact/opencard/eac/cvc/SignatureTLV.classPK     A            "          Ab  de/cardcontact/opencard/eac/pkcs8/PK     A u &    -             de/cardcontact/opencard/eac/pkcs8/Curve.classPK     A   H
  4             de/cardcontact/opencard/eac/pkcs8/ECParameters.classPK     A @,    7             de/cardcontact/opencard/eac/pkcs8/ECPrivateKeyTLV.classPK     A 6T&  ,  /             de/cardcontact/opencard/eac/pkcs8/FieldID.classPK     A qQc  \	  E             de/cardcontact/opencard/eac/pkcs8/PrivateKeyAlgorithmIdentifier.classPK     A ¨m  q  6             de/cardcontact/opencard/eac/pkcs8/PrivateKeyInfo.classPK     A            #          Ag  de/cardcontact/opencard/eac/softTA/PK     A ٴ  ^  5             de/cardcontact/opencard/eac/softTA/SoftTASigner.classPK     A                       A  de/cardcontact/opencard/factory/PK     A ej  e  A            de/cardcontact/opencard/factory/AppletCHVCardServiceFactory.classPK     A     F            de/cardcontact/opencard/factory/GlobalPlatformCardServiceFactory.classPK     A 
l  T  ;           ?
 de/cardcontact/opencard/factory/IsoCardServiceFactory.classPK     A ]  ?	  D            de/cardcontact/opencard/factory/RemoteClientCardServiceFactory.classPK     A f    D            de/cardcontact/opencard/factory/SmartCardHSMCardServiceFactory.classPK     A                      Ah de/cardcontact/opencard/pkcs15/PK     A 9{Z    H            de/cardcontact/opencard/pkcs15/CommonDataContainerObjectAttributes.classPK     A 9@  
  ;           g  de/cardcontact/opencard/pkcs15/CommonObjectAttributes.classPK     A R]q    8           M& de/cardcontact/opencard/pkcs15/DataContainerObject.classPK     A 2  R  9           * de/cardcontact/opencard/pkcs15/OpaqueDOIndirectPath.classPK     A |0  U	  )           - de/cardcontact/opencard/pkcs15/Path.classPK     A            !          A2 de/cardcontact/opencard/security/PK     A 	b    7           ?3 de/cardcontact/opencard/security/AESKeyDerivation.classPK     A UWS    ;           c6 de/cardcontact/opencard/security/AESKeyDerivationBase.classPK     A R2  
  7           ; de/cardcontact/opencard/security/DESKeyDerivation.classPK     A )qy     6           A de/cardcontact/opencard/security/GPKeyDerivation.classPK     A (     4           B de/cardcontact/opencard/security/GPKeyProvider.classPK     A km  O  ;           C de/cardcontact/opencard/security/GPKeyProviderDefault.classPK     A :A  Q  /           MH de/cardcontact/opencard/security/GPKeySet.classPK     A AE=  /  2           K de/cardcontact/opencard/security/GPKeySetTLV.classPK     A +ba
     ;           hN de/cardcontact/opencard/security/GPSCP02Authenticator.classPK     A l    ;           "Y de/cardcontact/opencard/security/GPSCP02SecureChannel.classPK     A z
    ;           i de/cardcontact/opencard/security/GPSCP03Authenticator.classPK     A   Z  ;           t de/cardcontact/opencard/security/GPSCP03SecureChannel.classPK     A F    9           6 de/cardcontact/opencard/security/GPSCPAuthenticator.classPK     A ל  e  C            de/cardcontact/opencard/security/GPSCPSecureChannelCredential.classPK     A A!ʭ      6            de/cardcontact/opencard/security/GPSecureChannel.classPK     A 
wDۤ  
  9            de/cardcontact/opencard/security/IsoCredentialStore.classPK     A 
PI    E            de/cardcontact/opencard/security/IsoSecureChannel$SSCPolicyEnum.classPK     A ʵ}  8  7            de/cardcontact/opencard/security/IsoSecureChannel.classPK     A :M  _  A           n de/cardcontact/opencard/security/IsoSecureChannelCredential.classPK     A c
    M           ] de/cardcontact/opencard/security/MessageAuthenticationCode$CBCBasedCMAC.classPK     A Z    J            de/cardcontact/opencard/security/MessageAuthenticationCode$NativeMAC.classPK     A xR:O    @            de/cardcontact/opencard/security/MessageAuthenticationCode.classPK     A I    4            de/cardcontact/opencard/security/SecureChannel.classPK     A |%   :  >            de/cardcontact/opencard/security/SecureChannelCredential.classPK     A                       A
 de/cardcontact/opencard/service/PK     A )Z0    N           M de/cardcontact/opencard/service/CardServiceUnexpectedStatusWordException.classPK     A   f  :            de/cardcontact/opencard/service/InstructionCodeTable.classPK     A Ph    +            de/cardcontact/opencard/service/KeyId.classPK     A F1#  P  5            de/cardcontact/opencard/service/StatusWordTable.classPK     A            $          A de/cardcontact/opencard/service/chv/PK     A Өv
  ;  >           ` de/cardcontact/opencard/service/chv/AppletCHVCardService.classPK     A            &          Ah de/cardcontact/opencard/service/eac20/PK     A U  4  1            de/cardcontact/opencard/service/eac20/EAC20.classPK     A            /          A	 de/cardcontact/opencard/service/globalplatform/PK     A IK
  
  G           !
 de/cardcontact/opencard/service/globalplatform/CardLifeCycleState.classPK     A cc  gE  N            de/cardcontact/opencard/service/globalplatform/SecurityDomainCardService.classPK     A            4          A- de/cardcontact/opencard/service/globalplatform/apdu/PK     A V`M  T  Y           . de/cardcontact/opencard/service/globalplatform/apdu/ExternalAuthenticateCommandAPDU.classPK     A Y	L  =  N           / de/cardcontact/opencard/service/globalplatform/apdu/GetStatusCommandAPDU.classPK     A LQ  V  U           1 de/cardcontact/opencard/service/globalplatform/apdu/InitializeUpdateCommandAPDU.classPK     A fTH  2  K           Y3 de/cardcontact/opencard/service/globalplatform/apdu/PutKeyCommandAPDU.classPK     A $I  ;  N           
5 de/cardcontact/opencard/service/globalplatform/apdu/SetStatusCommandAPDU.classPK     A            (          A6 de/cardcontact/opencard/service/isocard/PK     A IyR3  *  V           7 de/cardcontact/opencard/service/isocard/CHVCardServiceWithControl$PasswordStatus.classPK     A o'KW    G           : de/cardcontact/opencard/service/isocard/CHVCardServiceWithControl.classPK     A e     A           j< de/cardcontact/opencard/service/isocard/CHVDialogWithStatus.classPK     A k    F           = de/cardcontact/opencard/service/isocard/CHVManagementCardService.classPK     A ^     @           <? de/cardcontact/opencard/service/isocard/FileSystemSendAPDU.classPK     A `*  	(  =           @ de/cardcontact/opencard/service/isocard/IsoCardSelector.classPK     A pF@'#  R  <           S de/cardcontact/opencard/service/isocard/IsoCardService.classPK     A )    :           v de/cardcontact/opencard/service/isocard/IsoCardState.classPK     A /%  n  <           y de/cardcontact/opencard/service/isocard/IsoCommandAPDU.classPK     A P  "  :           f} de/cardcontact/opencard/service/isocard/IsoConstants.classPK     A dt  
  G            de/cardcontact/opencard/service/isocard/IsoFileControlInformation.classPK     A     F            de/cardcontact/opencard/service/isocard/IsoFileSystemCardService.classPK     A A    D            de/cardcontact/opencard/service/isocard/TransparentCardService.classPK     A            -          AN de/cardcontact/opencard/service/isocard/apdu/PK     A f}M  V  P            de/cardcontact/opencard/service/isocard/apdu/ChipAuthenticationCommandData.classPK     A ݒ  \
  Q           ʚ de/cardcontact/opencard/service/isocard/apdu/ChipAuthenticationResponseData.classPK     A 5"  !  Q            de/cardcontact/opencard/service/isocard/apdu/GeneralAuthenticateCommandAPDU.classPK     A S    J           G de/cardcontact/opencard/service/isocard/apdu/GetChallengeCommandAPDU.classPK     A 7^  y  E           ã de/cardcontact/opencard/service/isocard/apdu/GetDataCommandAPDU.classPK     A  n  	  I            de/cardcontact/opencard/service/isocard/apdu/GetResponseCommandAPDU.classPK     A mY  T  F           
 de/cardcontact/opencard/service/isocard/apdu/ManageSECommandAPDU.classPK     A T/-@    K           Ǩ de/cardcontact/opencard/service/isocard/apdu/PerformSecurityOperation.classPK     A R    E           p de/cardcontact/opencard/service/isocard/apdu/PutDataCommandAPDU.classPK     A %^W  z  D           x de/cardcontact/opencard/service/isocard/apdu/SelectApplication.classPK     A 5p  .  O           1 de/cardcontact/opencard/service/isocard/apdu/VerifyCertificateCommandAPDU.classPK     A M)    D            de/cardcontact/opencard/service/isocard/apdu/VerifyCommandAPDU.classPK     A            -          A de/cardcontact/opencard/service/remoteclient/PK     A 0  T  R            de/cardcontact/opencard/service/remoteclient/DefaultHttpURLConnectionFactory.classPK     A      K            de/cardcontact/opencard/service/remoteclient/HttpURLConnectionFactory.classPK     A 1FAI  
  A           * de/cardcontact/opencard/service/remoteclient/RemoteCardSpec.classPK     A xP  1  A           Ҹ de/cardcontact/opencard/service/remoteclient/RemoteClient$1.classPK     A a͝.  *  ?           L de/cardcontact/opencard/service/remoteclient/RemoteClient.classPK     A !
m  
  J            de/cardcontact/opencard/service/remoteclient/RemoteClientCardService.classPK     A 	9      M           $ de/cardcontact/opencard/service/remoteclient/RemoteNotificationListener.classPK     A :b.  w  I           5 de/cardcontact/opencard/service/remoteclient/RemoteProtocolScript$1.classPK     A  >j  +  G            de/cardcontact/opencard/service/remoteclient/RemoteProtocolScript.classPK     A 7    L            de/cardcontact/opencard/service/remoteclient/RemoteProtocolUnit$Action.classPK     A E0V  `  E           
 de/cardcontact/opencard/service/remoteclient/RemoteProtocolUnit.classPK     A xOM    F            de/cardcontact/opencard/service/remoteclient/RemoteUpdateService.classPK     A 'e?  Z  [           5 de/cardcontact/opencard/service/remoteclient/RemoteUpdateServiceNotAvailableException.classPK     A            -          A de/cardcontact/opencard/service/smartcardhsm/PK     A 2_E    =           : de/cardcontact/opencard/service/smartcardhsm/CHVManager.classPK     A Q    I            de/cardcontact/opencard/service/smartcardhsm/CertificateDescription.classPK     A f~  
  <             de/cardcontact/opencard/service/smartcardhsm/DataStore.classPK     A A {S    F           L de/cardcontact/opencard/service/smartcardhsm/DecipherCardService.classPK     A n   1  F            de/cardcontact/opencard/service/smartcardhsm/EMSAPSSEncoder$MGF1.classPK     A US0O  A	  A            de/cardcontact/opencard/service/smartcardhsm/EMSAPSSEncoder.classPK     A Fa;z  	  G           5 de/cardcontact/opencard/service/smartcardhsm/GroupSignerOperation.classPK     A R+֘  

  J            de/cardcontact/opencard/service/smartcardhsm/InitializeConfiguration.classPK     A YH    J           $ de/cardcontact/opencard/service/smartcardhsm/KeyDescription$KeyTypes.classPK     A 87  \  A           ' de/cardcontact/opencard/service/smartcardhsm/KeyDescription.classPK     A /'    <           2 de/cardcontact/opencard/service/smartcardhsm/KeyDomain.classPK     A UDL    G           	7 de/cardcontact/opencard/service/smartcardhsm/KeyDomainDescription.classPK     A &6    S           : de/cardcontact/opencard/service/smartcardhsm/KeyGenerationCardServiceWithSpec.classPK     A vʶ  i  P           1< de/cardcontact/opencard/service/smartcardhsm/PublicKeyAuthenticationStatus.classPK     A p8;    B           B> de/cardcontact/opencard/service/smartcardhsm/PublicKeyStatus.classPK     A p    J           '@ de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMAppletState.classPK     A 	#  A  L           _C de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMCardService$1.classPK     A `װ~   J           E de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMCardService.classPK     A +  !  D           l de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMECKey.classPK     A   I  O            de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMECPrivateKeySpec.classPK     A sV  	  D            de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMEntry.classPK     A \Lh
  O  B           ? de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMKey.classPK     A _    F           H de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMKeySpec.classPK     A UD    I            de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMPrivateKey.classPK     A ޞAȌ  $  M           
 de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMPrivateKeySpec.classPK     A &H<    E            de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMRSAKey.classPK     A Y-  \  P           r de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMRSAPrivateKeySpec.classPK     A aj    H            de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMSecretKey.classPK     A >~/  J  L            de/cardcontact/opencard/service/smartcardhsm/SmartCardHSMSecretKeySpec.classPK     A            !          A de/cardcontact/opencard/terminal/PK     A ؖ6    ?            de/cardcontact/opencard/terminal/ReaderConfigurationModel.classPK     A }{  $  7            de/cardcontact/opencard/terminal/TerminalSelector.classPK     A            +          A} de/cardcontact/opencard/terminal/ctapi4ocf/PK     A      B            de/cardcontact/opencard/terminal/ctapi4ocf/CTAPICardTerminal.classPK     A ϝ  v  I           # de/cardcontact/opencard/terminal/ctapi4ocf/CTAPICardTerminalFactory.classPK     A Zz  o
  N           '  de/cardcontact/opencard/terminal/ctapi4ocf/CTAPIWithKeyboardCardTerminal.classPK     A            )          Ay' de/cardcontact/opencard/terminal/jcopsim/PK     A zBCN  /)  B           ' de/cardcontact/opencard/terminal/jcopsim/JCOPSimCardTerminal.classPK     A xR  	  I           < de/cardcontact/opencard/terminal/jcopsim/JCOPSimCardTerminalFactory.classPK     A            0          AA de/cardcontact/opencard/terminal/remoteterminal/PK     A :t&  <  F           A de/cardcontact/opencard/terminal/remoteterminal/RemoteTerminal$1.classPK     A 	X_`  *  D           D de/cardcontact/opencard/terminal/remoteterminal/RemoteTerminal.classPK     A            -          ACX de/cardcontact/opencard/terminal/smartcardio/PK     A phr    @           X de/cardcontact/opencard/terminal/smartcardio/PCSCIOControl.classPK     A ՎF    E           g de/cardcontact/opencard/terminal/smartcardio/SmartCardIOFactory.classPK     A ~?  ~/  F           1s de/cardcontact/opencard/terminal/smartcardio/SmartCardIOTerminal.classPK     A                      AԊ de/cardcontact/opencard/utils/PK     A hG(  @  +            de/cardcontact/opencard/utils/CapFile.classPK     A %r  5
  7            de/cardcontact/opencard/utils/StreamingAPDUTracer.classPK     A /  
  (           J de/cardcontact/opencard/utils/Util.classPK     A                      A de/cardcontact/tlv/PK     A {u    #            de/cardcontact/tlv/ByteBuffer.classPK     A k^Gn    '            de/cardcontact/tlv/CompactInteger.classPK     A cc  
  '           [ de/cardcontact/tlv/ConstructedTLV.classPK     A R(	  Y  +            de/cardcontact/tlv/DirectoryAttribute.classPK     A #    "           t de/cardcontact/tlv/GPTLV_EMV.classPK     A ~0>    &            de/cardcontact/tlv/GPTLV_Generic.classPK     A pב    (            de/cardcontact/tlv/GeneralizedTime.classPK     A 9	    "            de/cardcontact/tlv/HexString.classPK     A O  4  #            de/cardcontact/tlv/IntegerTLV.classPK     A nnk|   0  (            de/cardcontact/tlv/MutableTreeNode.classPK     A   '	  &            de/cardcontact/tlv/NativeTLVList.classPK     A 7cY    )            de/cardcontact/tlv/ObjectIdentifier.classPK     A ~-8    C           O de/cardcontact/tlv/ObjectIdentifierRegistry$ByteStringWrapper.classPK     A m3t.  p  1            de/cardcontact/tlv/ObjectIdentifierRegistry.classPK     A jA=    $            de/cardcontact/tlv/OctetString.classPK     A @?1    $            de/cardcontact/tlv/ParseBuffer.classPK     A `z
    %           V# de/cardcontact/tlv/PrimitiveTLV.classPK     A [{Q    (           @1 de/cardcontact/tlv/PrintableString.classPK     A .ޱ  i  !           a5 de/cardcontact/tlv/Sequence.classPK     A ̽
               9 de/cardcontact/tlv/TLV.classPK     A P^_{    -           D de/cardcontact/tlv/TLVDataSizeException.classPK     A     -           XF de/cardcontact/tlv/TLVEncodingException.classPK     A kV
  J             G de/cardcontact/tlv/Tag.classPK     A cQ<w    )           U de/cardcontact/tlv/TagSizeException.classPK     A x   M  !           VW de/cardcontact/tlv/TreeNode.classPK     A .  w  #           _X de/cardcontact/tlv/UTF8String.classPK     A                      A~\ jnasmartcardio/PK     A #v    :           \ jnasmartcardio/Smartcardio$EstablishContextException.classPK     A 	  %  (           ^ jnasmartcardio/Smartcardio$JnaCard.classPK     A S'U    /           i jnasmartcardio/Smartcardio$JnaCardChannel.classPK     A {S'  A  1           w jnasmartcardio/Smartcardio$JnaCardException.classPK     A D!{x    ;           y jnasmartcardio/Smartcardio$JnaCardNotPresentException.classPK     A 	hه     0           { jnasmartcardio/Smartcardio$JnaCardTerminal.classPK     A &k  (  1           j jnasmartcardio/Smartcardio$JnaCardTerminals.classPK     A 
    1           p jnasmartcardio/Smartcardio$JnaPCSCException.classPK     A U8  K
  6            jnasmartcardio/Smartcardio$JnaTerminalFactorySpi.classPK     A :?                > jnasmartcardio/Smartcardio.classPK     A nb  k  #            jnasmartcardio/Winscard$Dword.classPK     A wO    .            jnasmartcardio/Winscard$DwordByReference.classPK     A z~9    $            jnasmartcardio/Winscard$Handle.classPK     A U8    /            jnasmartcardio/Winscard$HandleByReference.classPK     A M    /           . jnasmartcardio/Winscard$MacFunctionMapper.classPK     A %w[  K  *            jnasmartcardio/Winscard$SCardContext.classPK     A ]    5           7 jnasmartcardio/Winscard$SCardContextByReference.classPK     A G1[  H  )           I jnasmartcardio/Winscard$SCardHandle.classPK     A 2    4            jnasmartcardio/Winscard$SCardHandleByReference.classPK     A /    .            jnasmartcardio/Winscard$SCardReaderState.classPK     A 4E  4  ,           z jnasmartcardio/Winscard$ScardIoRequest.classPK     A 	}    3            jnasmartcardio/Winscard$WindowsFunctionMapper.classPK     A F!    -            jnasmartcardio/Winscard$WinscardLibInfo.classPK     A Ӥw    -            jnasmartcardio/Winscard$WinscardLibrary.classPK     A                 < jnasmartcardio/Winscard.classPK     A $ɖ  ,  &            jnasmartcardio/WinscardConstants.classPK     A            	          A opencard/PK     A                      A" opencard/core/PK     A F    %           P opencard/core/OpenCardConstants.classPK     A g\  r  %            opencard/core/OpenCardException.classPK     A     ,           6 opencard/core/OpenCardRuntimeException.classPK     A                      A opencard/core/event/PK     A [#1   E  $            opencard/core/event/CTListener.classPK     A ^:t  l  +            opencard/core/event/CardTerminalEvent.classPK     A C    (           ( opencard/core/event/EventGenerator.classPK     A s	    '            opencard/core/event/OpenCardEvent.classPK     A                      A< opencard/core/service/PK     A )ы      %           r opencard/core/service/CHVDialog.classPK     A .  $  $           @ opencard/core/service/CHVUtils.classPK     A ^>	    '            opencard/core/service/CardChannel.classPK     A W      (            opencard/core/service/CardIDFilter.classPK     A )֥    '           l opencard/core/service/CardRequest.classPK     A XA  R  '            opencard/core/service/CardService.classPK     A ̅d    0           % opencard/core/service/CardServiceException.classPK     A z_^  
  .           k' opencard/core/service/CardServiceFactory.classPK     A VB'    >           - opencard/core/service/CardServiceImplementationException.classPK     A f.    9           3/ opencard/core/service/CardServiceInabilityException.classPK     A ^q*  (  A           0 opencard/core/service/CardServiceInvalidCredentialException.classPK     A v,  )  @           A2 opencard/core/service/CardServiceInvalidParameterException.classPK     A J?&    ?           3 opencard/core/service/CardServiceOperationFailedException.classPK     A K7  )  /           N5 opencard/core/service/CardServiceRegistry.classPK     A Ѥ6%    7           3G opencard/core/service/CardServiceRuntimeException.classPK     A 3  !  0           H opencard/core/service/CardServiceScheduler.classPK     A :@%  
  5           .X opencard/core/service/CardServiceUsageException.classPK     A 6  T  $           Y opencard/core/service/CardType.classPK     A z  
  &           [ opencard/core/service/CardWaiter.classPK     A @vc-    7           b opencard/core/service/InvalidCardChannelException.classPK     A <      5           Od opencard/core/service/PrimaryCardServiceFactory.classPK     A ł  8  %           He opencard/core/service/SmartCard.classPK     A                      A~ opencard/core/terminal/PK     A 
  	  !           ~ opencard/core/terminal/APDU.classPK     A ;tH    '           # opencard/core/terminal/CHVControl.classPK     A nw
    '            opencard/core/terminal/CHVEncoder.classPK     A ed    #            opencard/core/terminal/CardID.classPK     A Cib  %  4            opencard/core/terminal/CardNotPresentException.classPK     A -  p'  )           [ opencard/core/terminal/CardTerminal.classPK     A vkx    2            opencard/core/terminal/CardTerminalException.classPK     A 69  @  0           q opencard/core/terminal/CardTerminalFactory.classPK     A W=  '  2            opencard/core/terminal/CardTerminalIOBlender.classPK     A פ8e  N  2            opencard/core/terminal/CardTerminalIOControl.classPK     A B}F	  U  1           : opencard/core/terminal/CardTerminalRegistry.classPK     A 	ݸ  e  (           ϲ opencard/core/terminal/CommandAPDU.classPK     A C    8             opencard/core/terminal/CommunicationErrorException.classPK     A >\     :           , opencard/core/terminal/ExtendedVerifiedAPDUInterface.classPK     A Ef    8           / opencard/core/terminal/InvalidSlotChannelException.classPK     A :r      %            opencard/core/terminal/Observer.classPK     A 솺      %           ں opencard/core/terminal/Pollable.classPK     A ?    )            opencard/core/terminal/ResponseAPDU.classPK     A o    2           B opencard/core/terminal/ScriptFailedException.classPK     A x  {  !            opencard/core/terminal/Slot.classPK     A ;%    (           X opencard/core/terminal/SlotChannel.classPK     A Eu:  q  2            opencard/core/terminal/TerminalInitException.classPK     A R_  ^  5            opencard/core/terminal/TerminalTimeoutException.classPK     A    M  2            opencard/core/terminal/VerifiedAPDUInterface.classPK     A                      A opencard/core/util/PK     A bn    &           9 opencard/core/util/APDUFormatter.classPK     A dg     #            opencard/core/util/APDUTracer.classPK     A T>J~    "            opencard/core/util/HexString.classPK     A a
i   
  6           Y opencard/core/util/OpenCardConfigurationProvider.classPK     A QqP7    9           b opencard/core/util/OpenCardPropertyLoadingException.classPK     A d  
  (            opencard/core/util/SLF4JAPDUTracer.classPK     A s|   
  %            opencard/core/util/SystemAccess.classPK     A            
          A@ opencard/opt/PK     A                      Am opencard/opt/applet/PK     A ˀV]    "            opencard/opt/applet/AppletID.classPK     A g    $           r opencard/opt/applet/AppletInfo.classPK     A D;5    %            opencard/opt/applet/AppletProxy.classPK     A NUJ   y  (            opencard/opt/applet/AppletSelector.classPK     A Nd   E  %           / opencard/opt/applet/AppletState.classPK     A 	  X  0           U opencard/opt/applet/BasicAppletCardService.classPK     A wq    #            opencard/opt/applet/CardState.classPK     A zc6}  F             1 opencard/opt/applet/ID.classPK     A Fk1  
  +           [ opencard/opt/applet/ISOAppletSelector.classPK     A                      AW opencard/opt/iso/PK     A                      A opencard/opt/iso/fs/PK     A +߶&
  $  "            opencard/opt/iso/fs/CardFile.classPK     A iZX  f	  '           " opencard/opt/iso/fs/CardFileAppID.classPK     A   	  (           " opencard/opt/iso/fs/CardFileFileID.classPK     A Z¿   @  &           ( opencard/opt/iso/fs/CardFileInfo.classPK     A      .           2) opencard/opt/iso/fs/CardFilePartialAppID.classPK     A ,    (           w* opencard/opt/iso/fs/CardFilePath$1.classPK     A 
    &           , opencard/opt/iso/fs/CardFilePath.classPK     A <8  K  /           ; opencard/opt/iso/fs/CardFilePathComponent.classPK     A -  i  -           A opencard/opt/iso/fs/CardFileShortFileID.classPK     A ܋    .           XE opencard/opt/iso/fs/CardFileSymbolicName.classPK     A _}    )           AG opencard/opt/iso/fs/CardIOException.classPK     A   P  /           I opencard/opt/iso/fs/FileAccessCardService.classPK     A !  <  /           K opencard/opt/iso/fs/FileSystemCardService.classPK     A                      AuL opencard/opt/security/PK     A U)5    *           L opencard/opt/security/CHVCardService.classPK     A m   {   &           N opencard/opt/security/Credential.classPK     A Km=  <  )           N opencard/opt/security/CredentialBag.classPK     A 6/    +           CS opencard/opt/security/CredentialStore.classPK     A /xu      "           V opencard/opt/security/KeyRef.classPK     A ߡb      )           pW opencard/opt/security/PrivateKeyRef.classPK     A N      (           ?X opencard/opt/security/PublicKeyRef.classPK     A q      (           Y opencard/opt/security/SecretKeyRef.classPK     A =`H   6  )           Y opencard/opt/security/SecureService.classPK     A !]l      *           Z opencard/opt/security/SecurityDomain.classPK     A                      A[ opencard/opt/service/PK     A ]~0  (  A           [ opencard/opt/service/CardServiceInsufficientMemoryException.classPK     A v"     /           k] opencard/opt/service/CardServiceInterface.classPK     A }4  *  =           i^ opencard/opt/service/CardServiceInvalidCommandException.classPK     A 	4  8  C           _ opencard/opt/service/CardServiceMissingAuthorizationException.classPK     A h0  -  A           a opencard/opt/service/CardServiceMissingCredentialsException.classPK     A {,  (  A           c opencard/opt/service/CardServiceObjectNotAvailableException.classPK     A c*  "  ?           d opencard/opt/service/CardServiceResourceNotFoundException.classPK     A 37  6  A           .f opencard/opt/service/CardServiceUnexpectedResponseException.classPK     A ZK  <  2           g opencard/opt/service/OCF11CardServiceFactory.classPK     A                      Ak opencard/opt/signature/PK     A Wp	/  e  5           Pk opencard/opt/signature/KeyGenerationCardService.classPK     A bN3_    1           l opencard/opt/signature/SignatureCardService.classPK     A                      An opencard/opt/terminal/PK     A C      +           n opencard/opt/terminal/TerminalCommand.classPK     A                      Ao opencard/opt/util/PK     A fC   `  %           o opencard/opt/util/APDUInterface.classPK     A K (\    2           p opencard/opt/util/OpenCardPropertyFileLoader.classPK     A Es    +           w opencard/opt/util/PassThruCardService.classPK     A S_    2           dz opencard/opt/util/PassThruCardServiceFactory.classPK     A "|                | opencard/opt/util/TLV.classPK     A E\  .             ƍ opencard/opt/util/Tag.classPK    xxn  [   PK
    ]W            	  META-INF/  PK  ]W               META-INF/MANIFEST.MFYo67 6ci68s%^ȴÄUr#%[D{Mxߤh̷,ӿJ9
7Q6ׄFltG,]gF'x<zC:b3y-GpGTׂ-GrwOэiʣѝdՉK\4Tџ$z,ArjeAd~د
HDVaEM\>UϷу۷oLh<bq*$,<Ijw.؎sa>#z/&e]<2Kis	8;`](.tbh GT-Hn#ǎ
{NOAw^ث[-*s.W#9XA҄O`Dg^66bf
j$Z3Xr̺tHҔL=9Tl/Olӥ =؀<ƽ=w树We8msOlXhT#aU˚[Z=@}Uh˅P
ϧ39ƫ	hTͷ>]8 O8T>!bS\M752Q*oWwǥsM(4n

H1`Զz4O{ARz*Rz1rzΚ#3ũuW>ʈ1|}ɫ/2ӡFZ./H.Or )(I4xx1t0gAr* unvh@j9fמ:D#=kݦl
c:39at6T>}6o0ma'K=>`iOuf4MmJ>C#,Pǹ< H*+Y.@B &X{ZP@1f))k{EamSk=Օ6XzíԂ<sBCM52}!ض:Z=\_y]}8k4կ>
yjW/7c*uZ$`J	9P͠]qN\ἕ9H/&#/ڥWa	l6 Wic
֩ZvԥHO)Jߕ4&US_΋^{j蹶W&o<ݵ֪M+v^l@l[wm(pYO9+PZrZ_7"|'FOYxVvւu]B1|@U3N[BU+re"nq
D|V"63N'2d@	SxwFhKO.:b?+%\͕/,$( ͞-9yM9~L &#c8Za<mo8*Η;^ά(cvO	f}!t_08.ٲdt׶fQY|sSeuY\O"J
̜TŹ 	+Mt88
2O'%|æ74\@0-Ჶ]G0tySZ+meVnd)zΰj|Ŷ[@\Q9q
=5Y֖/?߸$BHԸ%rvЏW֮ŦqB,
"@=-TCUkƕ#.°ճHxΪ{QS+={՜Y9;7X{UfqjI)
'Xiw
%p3NhȌ7xj gBDƘdlj&x3$`,frr8PK  m#  PK
    ]W               META-INF/services/PK
    ]W               ch/PK
    ]W               ch/qos/PK
    ]W               ch/qos/logback/PK
    ]W               ch/qos/logback/classic/PK
    ]W               ch/qos/logback/classic/boolex/PK
    ]W               ch/qos/logback/classic/db/PK
    ]W            !   ch/qos/logback/classic/db/script/PK
    ]W               ch/qos/logback/classic/encoder/PK
    ]W               ch/qos/logback/classic/filter/PK
    ]W               ch/qos/logback/classic/helpers/PK
    ]W               ch/qos/logback/classic/html/PK
    ]W               ch/qos/logback/classic/joran/PK
    ]W            $   ch/qos/logback/classic/joran/action/PK
    ]W            $   ch/qos/logback/classic/joran/sanity/PK
    ]W            -   ch/qos/logback/classic/joran/serializedModel/PK
    ]W               ch/qos/logback/classic/jul/PK
    ]W               ch/qos/logback/classic/layout/PK
    ]W               ch/qos/logback/classic/log4j/PK
    ]W               ch/qos/logback/classic/model/PK
    ]W            '   ch/qos/logback/classic/model/processor/PK
    ]W            "   ch/qos/logback/classic/model/util/PK
    ]W               ch/qos/logback/classic/net/PK
    ]W            "   ch/qos/logback/classic/net/server/PK
    ]W               ch/qos/logback/classic/pattern/PK
    ]W            %   ch/qos/logback/classic/pattern/color/PK
    ]W                ch/qos/logback/classic/selector/PK
    ]W            (   ch/qos/logback/classic/selector/servlet/PK
    ]W               ch/qos/logback/classic/servlet/PK
    ]W               ch/qos/logback/classic/sift/PK
    ]W               ch/qos/logback/classic/spi/PK
    ]W               ch/qos/logback/classic/turbo/PK
    ]W               ch/qos/logback/classic/util/PK
    ]W               META-INF/maven/PK
    ]W               META-INF/maven/ch.qos.logback/PK
    ]W            .   META-INF/maven/ch.qos.logback/logback-classic/PK  ]W            =   META-INF/services/jakarta.servlet.ServletContainerInitializerK+/OOJLKI,.L+N-*I-Cy%yEy%9UE\ PK<   C   PK  ]W            4   META-INF/services/org.slf4j.spi.SLF4JServiceProviderK+/OOJLKI,.L+.e&e PK=4/   1   PK  ]W            *   ch/qos/logback/classic/AsyncAppender.classT[OAEnT
-QAD䒐$v,n]H)>/$㳿nHC;3络sf?b!ĒkhDa5޻a7+}pjU8e!_pO0$-bzBRI54Cc9asϳ̳4cem[esӌhMMC;::\^2
nb9CMġl0ȧAWzp`F]S
w[C*V_U*bՕ⭐R7k
:دa -d6Masbl$-)VlOɐ&ki2LP|hF5ye3,-i!	Zq_r;$(&\Z;Zq,"lbdٔ{Pu^5j/K{$N[xٔu%q}'[dkzۺw&|_BzuBI eUHu!Kok@ɧiU+h)e	tJ5`LIs@:}ѮK羁b_<dZGL#1	E,zhhto}B2mj(u2
(BXDf"Rz$`>EO?JgSwŉdШH/H~D>^vD ]xOHFZ*FrtZD8SSƈGVZ\%%\ĩD3ֶLIҞh\/8935fR՜2Fm 1<5r>(i c>PK]  |  PK  ]W            .   ch/qos/logback/classic/BasicConfigurator.classVmsU~nl DcKD[CmӘb(67
]eRǡ3f\#p/{<_'u."	\niM-Wts?sG-0eXeŗkdX5F݌onTvkj!L)PU\o&o]# mAz:Ƌ?#jh!嚂GEOvZ)rͦ	a +Ju|9"j	7߇Egdr8*>2SBA(#m
Z+Wv}fx˜l]V%nsrX\܊$RA
C0̏&&#
,|BuCh7myw§P"-ؙA
b1GPPU+E?j_8qy=1z7hKU\[9GrȰ1.d|tA4<Ob)(S&IfwřЈg2Â|89ZglspI7MORVDgN'pB9->]W~^YE(H'ёL=}<Pn;gH
^[C)-85eٜenM]zAGlj_$B ]t˝^ZHKZ:#)3`WHsdĬA3O^ }kǘ'B)I?<"=GfRJdd̮uoB~|tvKyH \K$i'_6(M=3lw9e{䯯XMF#*5h$}Lأ|'=Iv}7?)Sd}yлet0G};/PKp  	  PK  ]W            -   ch/qos/logback/classic/ClassicConstants.classUmWD}l!,B)X^JԲZd7%/d°fI,̾1g3N??EyVI>
7rLVqP(ô,PS0Y)̝oC9	Ӷ$0qM`b}]&aQđq-A
uVL'xǮM܂yw-ɳ3
7,èw۬Oxn^+8m0K_N4,`>@KqwK`j!Zˣn`ijCzn&]&*J[2+E	T遏kTWq+7U]K?$F#
K]P5Ú(KOv78K8aV,Gf·E%mT\årU*#Oy_DYgooȺy~~ڊ.	O~4`d)bL`\ըL?࿩iR
ۡ)htorsե{-wity4	 p3gu52WiP[(
{x6KQrAkHˊwCaa7$r)
wՔ`{ĉ¢~$PT4+/,%̏ٱ3Pt~|
=ՖAitZ\ŭFQ
!|&034$n|+:2%/1b֌Sfw;G,#ZQy`R
~V>bUXy|a
",XȮ
?A'O!7?'#XT!~-
C^? H#>V|^0o ?h㌌H?&~I'{c/=pEoT`z~D0PK[VE    PK  ]W            "   ch/qos/logback/classic/Level.classWipS7%@6`$,ȑlIȳl?
IJ閴MtIq866ȴN;N;ȿ2߽J#Lf*չ{=|^~fԇ<as̬@M$ZV2Pd@ƆV('6=`%(6XsI@f*D1ے$A!ܤ@8zH.s@MtR	7uj	PH`q:1Ӎ;fҊ:tU{,2::\`F}4z(ݴS4zKe3;哕V'M;~Ri`|bDښ۳1Pl~@ޙnu6	,ɲ׶a7]鑘5"fzk0C7lY
Nw9KfM	TT
"s2hmNUHhHp
Du49Oc1+#.ne>H*Uȕ6r@&\N (\k`J8><`A<tSz"aٕ9#"zudԴS̔uc~tǏ}2rC2r|inI0K7+u#ܙdc̽Q.W|LÖk%㖛}q׵	cLIfrYc8d3Q_`U^a4QiǧsRcׯ_P<sov7Dwd5JW5ڜ|8CPՃSe%?n-RlL1{"l-lH?8et(tvt]ɧ{6L7BEǅR}IѰh<aZn԰vI{w0NNҘn}+ڼEh΋N)P2ZͼhG~90cTLcC6>OJZd'yܡ @<bC|+)<Q՞hM_r1kjyb{\7IlrF19.P[ܤ9jN_ʏKu\TYݣs4Ώ7ʄWt4ާޒ"\	-;2ap1s,Nfk6c<&LvFϞf϶R+34:R㞹`+7k7DJ6Z)XLlowC	| §9P>2|2	OBE_"te_J,4yp^&_pt4]My*GNM5ݦiTӈ!(_HIKh;.-z~rr^@qU D1Cx+WL妜Ƀ8:{ԐgUod"H-ZJm
|#!\<>E!\oZx'ik.n$nPOF(wDiķV}6^~	8&yE9|'yHw˂4*oyvۏt-edᮉsXʱc-+ظ_FLu W毢q(9#NR)Iu}:Zh;<v
EAxh/OeE-Ʉr&!+0|WkߠRWC$vL͆{*gi9<ئ/PS_Iv|No߯owij.Q3fb
\D
Qzh_%?"dѫ-W2p(ӘKWu
LXV]'2V#ӟfZ2iL<[B,_1%6aK; nD-D_1+;N~31
jظjL/&/A&EN1&$OMnJtYN1	"=Fa-99{2UYedIV1$KM#I
.#!Y
"/M}Nh!覙{E),1G}̬93k̺33:.ɴYm*kŘ:o!_IƘk3/9x¥*iM6Jڢ+ikx00=\<ڪ&q2>P cXF!dHh)g!SxͲY<~9ϓx1|b)E׆F׫IU\M*BA5Y*=&Kç
'Kx<zw*<.QWx@m++U:Ŗ	)Ei:>]F*[\tAt
˰jy->l%
laO+ϫZxHzQN*{lFePK=lx	    PK  ]W            #   ch/qos/logback/classic/Logger.class\	xT>gf@$AIBX\*@J $,0	83AQmm]ͭR-mA%	j[U[Vn*ro2f}||;OyȫOe*h"]
kn7	܅H([]1(_
IgpQ4vm
w4Áx<lhvu1@GG(i0[x*fE8Y:=EȨR&D	ČllQ4Ixqau1I`Z㔈tLSJN`ݭN#"&pKUPFU:M)LZ"jMnqA(u:f0YO֩Lzp[(Oⰴtjo"n3
5Sf*Jň.5й:ͣS2>=*@i:NRkS9&sAh>-hNhqJEp\tej"贔j(.MLޢQӉZa+^F4_4zh$3]ͨRvV%#qUfT~m5F*H+$=ZlWJ:pFsJ0UUF{ya+D:i=qVӈ3]p6&i3maMPXIzLIt	BL3DcFC'԰ǈtD -5lt0R@:ftCN,t'=KᡁqlI"kuem|liAz!(mxҴLyCTp\HTYLa(QB^Im"ȃȚko}:]BH$rP^-yt\FO<K:]In0Nu }Plk4ڳ&bcw
?YAhjމ,XP"a!>L0i2:CcS Qrh1m.ub.$"#n)4N7'.M~U
7'bD&nŗt	RTOiH;@M6Hn4f8JA@ZC,0ytg8+]ޚy8D:}Iʌi*eTeyن
|ܥB.` k/57ܔff
ݶ@
f:CJ?(5 &:Q::6"]m^t&4)"Ņb:#+8VNзN0УF"MF0\0ykbL[x
.(e$Ӭs2ݚtfXb) .$abXgwG5NߣǘNbyuK[ᗬ@_Ssfc		[{Ѳ%ʕI`LW:^>Vvg:@?RaK/~/Qez۱WL3G(X@OӳBf?HCO:^`KJfouz~ =<Ba]~Vc?'UP͢/:*9=Sy~5]5ykýqWFS }QdzCҿmC޶ѭNo[6o2v5GbK0:Cb)MG'[g#ܟyz}LD a{Ty7;^C
4ӳOV NYyu֬xqxK3jyNƖ<AZږe:O>Xt֥X,.yn_"ק<"xJMK׵u>M5lW~Q>LṲ*zÉ^&׈1Vu*l!-n\/7*:cVzK/ܜBny.c!2,P[h$Su>OG~C޺ӫLًb:ϗ{:rbĖE{#.PEr WWxːg꼄b++)p"˔F9)JNxH"8T^Wp^R4eowbQWʫ}ӊ?vF>A[03&^Z>9ډ~^8f hy ԫ]%B~7꼉xEsu:DD!os4>W|8;=~4U2bFt쏆74	c&CRhxeXjrTx]P݈Хfs#lhib╠qΪ}'=W"Dlj椹|(L.W݈5F;`Phj֛8Ko/-ؙqCRܱ:c.vreu'pm5F,d-,\x>ڋ۴pO,"
ibkZ	*87|*nzʽ)4o.3ƕ#<\==&0mug)fJmģt8#:rqCcZ4+7Zqіna%Z肐ܮAhL7>_t
t[̦28F`46uXYAII}f0U:@wM		ޓ.T@BnźFi[Q>Hc~jI;KɠXxG֟Q(3TgC
V#[5ƹg%Q֔TtnMQ6
X Y>ȇ b><&fUoQk=R,qWORF[wi^Hkv-e1%[yQԺ^-H5@]6*#mUgr(B5ZPG?=MD8c%:
5'5A#m{[;aL88ݎ?tkO:,HOf:sHZ#gvoF:5۲XX,4%cˢDgLX%TU=PitTUh9ꪺ|(v`ܬ
<-Ӻs˜9kfU̢ǿ^}CdG$zq*N%3
#~2nBbsÍsOr:YL/kWƯi;~x^(3ð|gonNV`
4ݹBS&Je	!$- 
VVTPT؝}x_4U<w$EZ"#Y<y(Z's0͡<Pom
4!"G\`˱zˋF{2MQh!?]<:Bq1y
AˡbDGw;@ *ۯg
ʧTD;`BBy'MA|2GpVGbG^mՖ	sKF֘(9fH:_B
7mr"ir5y<yI/q,oO9L>ryʚ̚<K%ͷ|^1ߛ$$!L!K-p	N|%IHjB>98HLNjԃ4Cߢr_:?<θr}>=>l3LIaѯB^@1w=F:>BqnݤL]jh_S} r
ĭ8ph'
g*~k1?Gժ|k>:w76{>	W[D⨏VB}fy榻iZ$,_GNZN%86@*t}fw"MʹqHw!IFEE> W< ÔP<NܶNv mE?B{JM'vZoB7^"{'Wd<a3`²>DSg:=BLiZ*4N1-1-qT@RT"
J+ysS|A<яaOp4F ".K&"֔@$w`;~<DO2gJMRO54(ىS2|.O9 )mUq$mCah*gԪbz,[Bn&^WiL|K
x9Է[x^.:H;z0FF
5iAO]bKэx%RT8ja-e"3Kj
E4uJ=4]uHrA8*iKSn	i</L>ź]v}Tbmk?<ޛ$,𽍅(M
q ?LkzǓŰ%f{ITr7 %S5?a# #YH }dD*G }HUU?%+oFVzff!\+%nkC'	)9,PM~G,c
TsN#?8B̋Ϥ0/	L	jr(ğVTqC}*J;B4umV(UKfK=0ڍ
{8*'I	&,J3r]ASyeR*V$<ǋl}_?Z|(ڃ_1Mn~![kWt"u}tߞw_Iϐ6d4Gki"4ivOZM$+u&Sq6~߅4BF-}ip԰98Tý2DS@]FmBpl H깃v86
˾
psKpUTF/I"hX/CrΝ̖vӸr{k챏/͉" з\ºj%Lfko[R-R:wY,L^@!0c`a(_)lJCӬP'foyN#k :`o ؏ G&jMw6`lM6&"ߡ6`纁'.H*lGO+s7gf_yn|36·L,G5l
h%V5M11111/YWAjWJ t>o}v@ݕi-gdA%ы[[dWw}5i*m6JAFPihj|'0JB|<lHm+,Ba),҅*U$wY(G%\D0$*y/G_Ñ=;ȡQ|b*? /l$aEۊLXρx_zU>&*EZ%Ê}Nv	[UD-W7"=t?:
t&AOg*V$ w޴o̶\?vLjr;Mo[}&j}tdu	޾4tNx0{7
p 
R*?WXgl<.5sQg^H
Fr9pG9G\)/$hn3ͽ'~s4GS4Js]hU~m4Jsiu {4Jsi_F4Jsi-?5ng{0iϕvМqhϕv;ҜG1\+v9O!GOs\PT<J::gN:R];89~L)Yz[RS	UYz[sc{NYz[CS{fB|R-Es")RB=TwKuY%TE!Ջ;.Jh<;u4
w4mUch<(߳K<iL,ٞ4x,̀+͕8
8epgkY܀+͕ZYcW+q !kpg;7gMs4WLsByY܀+͕8܅
\u WcW+qm@
\3ͅ{47ə&\#Mr޸!&\s4 bv.]4w\3ұ_刽ܙӰO!`0_u~=x,ا:c&GSW{ci` ~;'teZ0둶zeD>j2>M;ҳfxB՞s7Me<]z0)0Z0X5?5ܟT5[Het- R]Xs;YAn¹Ⱥt&*\M<<nbеp& &]}s?ut-Q{q[p?n} 'n¹?tOi?>-1u||5y16UZqIkzx~yi ,5%՚)0|޵$Z]$kkCR)*XA複aI>4	^-IIt2?m%Fuj˵I^'RWqIle62>lHݔgQ^Jud>˥G2i Fm=ȳV҆0;uR"yOQ	2&y^嘐[{J) D}6uL}/p8i=4{+ʽӨ;'"jVJo
ws_VV~},K{>@=H/g Ԍe/~1G&֨~'N(`(.odm=?MNMJ:
 
<~~yeE_K/Wa=n Q|Q}>_y#*̙w=LPKxO  S  PK  ]W            *   ch/qos/logback/classic/LoggerContext.classZ|\e?'M&i> }L4-&)&iJRNni'3af6hEy(A
HERy	ZQVw];7o;|sy|K>ʯiǴ$8Xq4^4{јY߄h$0"<TW'
O$FdEBәkzG:͠eF<
ַE̘-,m6#fl"LܪQ)Ӭ^~$
7bh[(L*f40US3b䛩mB4ht?p{$3)NX"|4ZmNiD ڶkQtZLL1Fh;f?tAKu:17/1#Acdh;Kt3Ӫuewd.)PiyMַCQSd͘ m6ЩV}13n&#F+&F#Ioǳ`1:˶tZMk4̔h?yKUfD
2TڤI
@a4fuCф2M8 pL&O>@uS_eJ;]6YX7ǋ]DtFFLr6a斍[!|QN2AݬzS!Hd^{ԴbnCۘfqhx*M5杻`!&'AT"\^#<"Nbu@.1aNI4*3}؞-ʻx!ƶݛ;w7n~^6q :
RZXnd֥GB4-KN)n	>4,7fky(SKîu@eu/>4J'Ik%t>{`ijSPX1-֊6`c#CK-mh>G Ұ*F$MT4+##ᰏ.M!itNLPhB86ցZ6]M'Fk 0TE$u!+]5AS)[9uÆJ7bUYO-،θV׽@t]	i7Y`z}9
jH^&mL*Fb$nDŇW	Q
O
"d:qRXSd}v_9Juz0d쑲)h$N̈9XWRbz:=BcLU1kb:=JGPI|3*4E!Aq
vSӣLi$!q>z\bF=p`%T2Ϩ$%YE.4%֦pf^ojNߢo2Bd57(v{C1}uz^E=4E'3~G&Ӄ3g2+]bz~O_QAI>Y%N*M#&NJf/ݼCz\]9WI9:ӿaJCNRn"@~ӿ tu^`mR+s!0'#v O}&E<DtXd\>ޒ7E1:3dvad_ekwgcN=em.kRP6
HLۢxxIQLYVUvl>i=ӋKvSMc--QZ]92ۡ"dΥ\,3Vc8<I4lF(3ʑ)Sqx9hшri|
쎩:/6	<\qt'LZwbfkW\T1i/-HZ뤹L
mS Ud*WqRPb>I瓥$f"8C{产Vf>^s`,'u=ryΧH>SFi_$;-=&exD'7| 1*RgEiPNL#:1D`c1T</)MvIz`EcBh:+FpجL̸]8eշ"ɜ(ny+2ZD#T.qLϽLup=oGA1aVa6AQ/q%;lEM[ۺwlil:֎v47v7SeW/(ϰ#E]!9#I470mLXO"dY,)2W}-DJnpoѓU;#{1GETB(E:bTg+UdW5{~t8b Hr<?aX:pB<|s?Kj㉛fs6߹\:Uժ|A'\sFS:*'Sj2gMV8Y5]nV&;S-RªsCq.qTXfZ-v*Pʔ!̧Bde)͗y݌aJ+S]NfUÊEs_rn6Sq?quk6ڣCnUa.Ed	[ׂ]ؐ3x7$y٥2cפĴp2D_MCiXG#=;TLO?0ņUhU'O%aG.Ar Ņh:)<iwҥ*4X?y5)gA{ܽS*i2)k3Oj\Nq0ɋ-
L"yM+ID[Y{xgZ )9K{_X{F[z=1)sJ`TMxU,0bŤh"l-^Q:]+IT"Akrvq*CB~\@uL/j='
ĺ-[RuZ6"a3-32<y@I(e./jE׻B	IzkۯN9SشjCEEvTB|!Ub"*ws,]./1Pv}5q~֫qirh:!ᨪk<WE)ro bM7)ߟ?FE40Q91~%1Z.CIq
g0~6Qj~<,?C~|1>)
S6Rmy΂gCVANtms<^g~:W҅< )$!e> !_JQ
9N&P`@"3ER-)O^ْlI3Rm)(SͰ׳Iμ@a
+E&Ĕ-
JT5Ѯw%xsvoonT@#^%}5ڑ!%pDf[f?0N#CDZz"GTGy.v!-1qZy+B=iQ'
X7ȗZ]GOцu

,x>yw7sTXWp@8ݴ`sцu3utzYwVhu(|ӡ2ݪ*xԷe]T@@t5-koSFZGvz.nH<
=`IG G7ї#;AsnV i
=EtEoP\n>x?<XÒ£E%3ޥZF>
rfy"zVjmH{]ϜEOvE014fG`?72 n$Y,qPR\@(W8)ZFՉNE}TmtQ_a{EС<z\L'z;<-w-}#e:g:ODhK׶O^aJ@mfcGq'j'\M2-E%_*eŇ2h=H.yʁd_>˕?
lW\6LSaWɧGRaXX˫2ڹ^u09?v'dqrjL~0:ʋ#<vدq?cݞ-Ӊ_*B*j.kI z[o#OnmwblZ %B^kѾQw~= ~GtTx4[7x{(O*ìV@k:fL4zX%ىo]6"peƧWd8eMd?Hk7;:Etwvr{l:x
kgP
޽CK]-ǜ `EA7B0\`eRsiۇu$'8MJ<T^ٖG|߮XŒ<$'_=}ͣ;Fs|ʎ9%x7YWʁ8{{+
\%)PU*jʁZԪlAZ@I
oWw޹N8opoh
}x'AM go#oYky"d O.L9%H%J̓xgbWm"9=,#i*FQ<J
ŊiiW)8@\Pbh!mC(GTK$,ɻT[vXYz!<>]W'rR)vUDrqF5)2l)a<}؈e%v+ΫKZVj@.G DpROEv4ujY?APOUp8+,F鎽FXsbq$Z+9LhP\N;3%j
:3fZ0 ƲF+&h^a\a9q.`7,9Z$.q^qNY;E	smAer"Umx}S9| vKzuQ0+h7kx
Nz+CTλQ	ô7"TQô/NAAU[p1le툫jcg&6|ح]z`sr$Q'0S<G hI&1w@5Tq~2K2j'|N\'?ؓ/We9H'H3w-܉sx4){6M(@h6WXac,iCy36~ޠoRRku):v~D"]u}C}~_Q[*DPKa  G4  PK  ]W            *   ch/qos/logback/classic/PatternLayout.classXi`FWv`qZpb[$
$&M$`W4jP(C@)%á@K}wӻoV?l77o޼}o޾/XT^T0waȮ`ĴD0۶o>n
zJ0Tq{=a@BCOp"Dx,"vLlQ#UA0ߏ8Tf#ɸ!-3"R)b8{)2Y5m-ើpώn:vz0mǍ`l9~,[*^[lurc3#DBf"e	;ñDq{-:L3ٕ QAVay}fuCOĂ];Enn-e]qUoK{?kKx77w1GE+|Qsg9C1540&=5LB}&Nc<9:Z{{wu8?]TZDŐ6oW%N
kh*
GnE%Nws_XyX34Yhfɴj \|8E5pJM̎Њ
B~!LsiHNcbޢkǥ؄Iyg	#Xvȇ<Q·NHJCÚ2G,3%"f":+. 8z5~ezQyd[)Fȇ^C
CEE[ez dT~l
Ue-oQfJ!&YM
<V.1AFȜ&h,}Jrz,Y3Ṫ4HFbigh*]PH7펮WYw/6Eخ}:4LxB!
mjpSyv*En!ۈj;6cK?J8I1!4[M[})[cydQeՇ&ʽKitJǭ]rRH5[}=i1^.cHDEr`[qr},a&ߞ`8r[͉!%mze;|3+>EIhx|j#[97ra^$'9H;J9VGG|tkD$$ҮѤOnEϧe٤Eq
V*q|^ӌ|{Uh6A34|#iVpT>3+eTư<Oc]=r1o0h.Y婶;ŸGijPIiQGFPHغ04̨cYUdUt|g4zN>:f-Ytɢ[AӈxӜ!^/`%L\f8{n|%cF%l|H.NY:M@rnp-sc,k)1V$,s̝RƒƼsD1-{6NHirgS*<bǆ
56!T&7fH7Mϡ{~1^jF6}txu+vE""G>%jTJrP }4Yb(>c$YD*7Kvڢ;w|fvM-io
Qn߼ZsHiw%ecCΖЭA=}ZA-FmvKt7o+;C}DM*LvoǒtZ)R:|	V3~jzkُJN稖r"B\UXypMGŎ' &b'Fn-aKIkX
0FN
pk|P9'<JQxLȟr[I["yF
g񼹞ܬ
4+6.ǦXx?*}8NlzD92s6ɧF S,*Zr%%VftVNYΰUuK;\12N܏	VTf)գ+^uQOo|3O3XEƩt葷qhwc)8 ~^N(
8w=OPpA| '/T/.(8 -'*Qģ9Vw`C9y'} 
89(S/SpAJE*įߥ_9FEfoo+w=
~w?
GX`,
~Vgsc\"?'\K__/+rK9g{>_Qk
2οo(u}X??W/?*o
ߤW@
s0:RQ|HU
#jXuc3tx
[Z2tZ<'l*X c-p:Tt!Ђ4$Υ׊)p m8HZЎļjqCkB'cG&&bMa+;m .dp;]^\W.u5aFՏK`ȕF5k;]{5u #0]tn)w-lwFMcݏӸ=+ݓʽWp &qw
/n&On4OzqGvOwx&pgwyn:I+:<o~o5k{RPKW0
    PK  ]W            6   ch/qos/logback/classic/ViewStatusMessagesServlet.classTRA=
! "F(">
h	UΤtu~n|\Gn,$c `.ss9~|U1тV	mH2\sT/<wJ#Ca+uEKxP]	+Ԃ7|r%^)v3`Z]['Vt]玖++X_f8o6}26сRb8H2w<t6Ѓq5*(V}zpT/	pEZ{Pfwo1\hRm
z=/Py2x2{=``і|?g3CbZΜZ^<S+'Fq003ex^涪e{XW= U
I:Xg޳
7$!bhfj8L="&:^悬EM7n,JcuWJtsBeAcdq|^en2Н)ʤM3+&A\
[`CDlv'5T)gwW,qUY-0*ƘbmfJY(7d-8n8~OWh54M3m#*j(hj b=gg4'"'_1?f@?xFjؘ'Ze0\s6H<FbcUkJR9#N"&KRKB"in'e]B0)ƱPK/    PK  ]W            .   ch/qos/logback/classic/boolex/IEvaluator.classu=0~Z`c\JlC!R		x`c 3ؓcSHu!VQ
1FRvRF`voGϟZr6V&tl0>p[+.?غDC=F'| PK5Kҝ      PK  ]W            8   ch/qos/logback/classic/boolex/JaninoEventEvaluator.classXy`U\Ni=04-6Mh(gɦlMB6M-ffv'*@A@
T(x(@&لGv}yC e~\AJT	OXِiP(izϲL},U+2gȨfheoֲ@U1Muk{Z_<gNhj٬KDƆmVF`InmTZ&J8I5pUۺ3bgXE
*cq4#X^W$eP=ԛ^`X88>
-V&9
gT2%iN	X&\E-NPhfXZJBVA&
a@(AZA7ro#E$~=8SL+9`)8U`y1Pض1#q
ʫiuXK[#mmpW8GzcD7+[)X!.3G:l5uE[[,ԓ˰Kg8Sj֜nRY*9Y
XTN|lX'o7e7)h8yL=U~4a$`kҺV-A,Am";w&[z]]Ι£*b*t,7
uu;Kh(1`XJv.$yD޲@YP3<x5v(TNFv:3=5yۖh{wdK1(R8zJתh{[G].h*܅~\ʯC

ef.;l1+bܞ#g3ZJBLi)a1,PtuKŰ\J
m+)*
ǜF69l$卪cl\RR\&?tՎD	ZTFqn#'-=V?5
x3͗+ fɎ~w0Xu[eWu*ފ{2ƭ-5޸F
&̀STvtZsޗat*?|96Lc?ޥxO.UהM.4>M^;5XptGus\Ēe-n)Av@Y%>|,>e|.%1&AևOهO+.|4lЇ;)̔.<0|8@l>CD8S"Aɛ8Sp	bFg^Nť]^0Մ*u}L3
4
?ZvxgGWwo,13{:Oh >|7#=lN093:gCW\He4ei'lLenln7-,}$ݧݞS687YYawu-c!<c5׋	3ӹ|dGͺM) 2B/KVQ&o`4XBl{Rf{yLDJO%d7)gNf:po@UDcz<ͧ֔Զ0;Vdh9i\yA|';256Jifr
{6w

DM
XP`VOI˴2 {"7S_1*<_˧B̨5Fڴ$bbo*NS"kSc5424f(!]t4f2W=%UdYY3V.㓭52­rTrg_wG8(?4gBj vY*wD|ǀo;VqwFn҈ǡǱpKX=5axB} 8Np:N%PqbIh*\]|u{ ^*
|?8wT b
`˰|cmA>dIN2FS{úqlW&8N";:-
^ۨ^8Wbw)6\<O%4GH<Osf\SQ"(hT/ݻW˂ߍEKh4:stQ}Iҝ~p]	N:qҁișJ8<'E/OeJbTAlPQSqrq'ԮII*	Z^2Ń=ŃA- p?*Bf~PYS(Vj*5cX8xgfy2-?jiUmyUy4&U1gOT*%8<?LgrXam·8po93^^U8kx݇G9k	_q~b)ٿz%_%s˾~IX_PEEI9rO3ioDGJOAJS,^@q\J|>R]pq:gdB?xҕё+{zsJ

yGTLl\@ޛ'i_Hȅ/G>0,Gp3r%6?$fYÖPǮXO`6_ci$|C<8sw=Yw\y<gfL0lĳ؄@q!+YC8т6ю-b?߿Ҡ%7-Y?qTPK`S8[
    PK  ]W            4   ch/qos/logback/classic/boolex/OnErrorEvaluator.classSn@=4!4UJIHĂE}HA]j⎜)'NԏaÊM7HĚBqZՖ|q9]hB@,rMoS)ǝaı	?j7
P06/MY۟CPb0ry<ciulwcN+"[ǰj)8U%,(pY"oQŒ%\u)]*MbRتfȼP[/vG==N*ra&ː4)blk1w#JD>v 
cX9#nyw)G"$x3@J`}J;ة`HPJ0ޜkln\܇MrU/zu]0hROL;A;"Dn7.	L!eip&]l|+`d>">N\KKncbTeNI~=$-$+?œ`j
,kX-ш?PK{S'  a  PK  ]W            5   ch/qos/logback/classic/boolex/OnMarkerEvaluator.classTmSU~n޶	KRZamK}Җ* Bű8ބmtٍ~_ډN??RZ$CvO}sy׿}|Aq
	I
[-#zQv]5wL'XܑvCw[@jr`^ pFܑF#lc^4聮WY0:3A$G'=PxGyf{Џ
ubHc(77rQ-R2+\kuJ떱TtU˩bV͠tK,qz=P':3V`zQcK-?ym
)nk_6w@¡C`h({=؛wuYmui9~Q<p\6r]
i%@zݪ:2hxv;,۽n}h9rclze٦gV!=Ko9AbN*md4* 1ңwA?`i쐝O/@f`~ C]e(m{-z+,[1:eK.7l{յfaU`7L(/.bjI:.!^yM͝^7efmxZv~J5Q.xWҊa	ڼKgӗ
OCgqq-D*	&bgW<Qm!P_%(xV#[V4'&eBcyƸSfLr8:ԘI
M\)=\<
>`1eoq߱
|H]U7tJ"f&jowX=|4H|ʙİ3|Fj/p\Pq9bT$(w	+},dCT@:?~pj#G&nu_N
5]:YzPK:D    PK  ]W            (   ch/qos/logback/classic/db/script/db2.sqlo0ǟ7iI}Q`C[!@JІlUIbqRsH
<ٟgS=_I
Φ0GG
1mf9s.0S,?zn~|,_(>Ozuh_^^~ڭ<(i#26Ǝ!1&:?K9͗LSԹJĤf*T<}Vh)έ'd
Ϥv#L:R<7)du+W4L@2mJC$<jf9U)3@4v3.y;w;34ꪽG'z~lXǱi)̐L}+VR&#lZ)[XPLi F)|cǶ
 )J4!tLl*Q!#m^:[oU 5`xJ9Vx#F}I!k&k6G[']Z^C54e
|إIhMBP!d&Xt|>uVL[d!}
9vڌ,;CI/k%ITZpYyp9<^k<vn w4}pGi;	j	Bx[hm]魪ڬ1?;g\+nVguUwO}U*k*f`h9Xu7p=w?$KV{<ٹ>9l7!PKnIw  m  PK  ]W            '   ch/qos/logback/classic/db/script/h2.sqlSMo@#FK|4Dr2`UۭZ챽b
	&Ѓ/޼y|n.I!pd,!9ڐ!1$_iJNr|)l6`TVNLBkd@o0|w{6<}3L |nԽ>"dRV71J:FX433HJ^$URڍ։"PʺdT肈8$DD3JP6ܝ!hdKs<
γ#AiBj\{CL(L7B\c!C|^/r'ygf@+:Sgl֠Z,'Rb* );MYZyXXRY($WLU|*VXD&[iCU{gկՈ0K(SSpcsQfe|g@m h؞N?q
u$uҹԙWwY֚([~؋nV@xdtY۳g#?b|烟u>6ǉU}<(PKJ
>    PK  ]W            +   ch/qos/logback/classic/db/script/hsqldb.sqlS]O@|G?K"&x2UV)klJ}.@*wnLPp6؃%*` 98@4ee	b5iԝæ)^V:.>܌/< дFz*c}17Pj*S(T:sZ\ߪ<Y#snx#51אD3[BfP?
s0Kt$n^Ӛg^>NEZ
7Vsn1ڳ1j9j}ߜγx|
o;GfO49yުEef^O5[8
/Q
1FQ6zH!.~ҏWDRt9EDe/f*fN
T(3\QD]>AjƄ w.
.X5ɷu8_< ߞ³`md"5>ݺ ]g$J"\:~Ů8Eqph$^!R>_&Q1tQPKQ    PK  ]W            *   ch/qos/logback/classic/db/script/mssql.sqlOo@ϭ0GNBbhb뵳$wS(+o޼uA.Y!(-v EGH6dWN@ie
b9j|°(7ְ
xΜ(s,F=iO!3ě#t'xR\@R(k%Ϭ2dBBj3a/
D
A]7
c0jUq	5xnD8>4Sm%Mª6ɚ&)UITx2SxAm[nbmƺ{{ߤx+VDe6p*TU#Z%4Omd: X)g`3߼ux[BF
>rO9FUS?KӮ!	*.ZhV5Ts@%Y(bBPj	Xww*}>Α2\6z|+{[tc¸ԧCBG?]
޾)V2kC͡YßX.w4;8Sg;x7
IVdv;׀?':F1b[kr2oPK-l    PK  ]W            *   ch/qos/logback/classic/db/script/mysql.sqlOO0ϋwK+uE+F"7&l~!Z6R{y=lS09BD`2xҁ)La*"˸`uA(gV
ݓ݃\N;
F=hώ!7<rBө}LUdeIR[5NRȔ^HMBs
 txi QzևG0c+ídھD0y%U7@4v5
Uʨ Ө*#JBرu~Vi-jylw<]Anq4n	KU|;_,;[G-ꇞy٥4@>yg%4OϧG	+F͘!_b5 nW0U,)ou?n冭ԈXec69e"v
)B`<*:A@ S,=k::%Lrm}CMWZME--l<U5<}CnF?<Z
oVh/vsf߮Bv߾J>B{{OL<ؘכ3ޝ9m/}~G͙k>{=R涬\>N-+=PK!    PK  ]W            +   ch/qos/logback/classic/db/script/oracle.sqlUKs8>V#TyprPK8%VE~D$mq֮FS?>w0ˢ^@g+0EɃ9Ȣ%K-/_v0Q5i`4uAB@PGbXXDίz=Q2^3Ev=LZN3YeyN묠SB KCy*rnnZc`8Hk$2:KAo
V; &G R<usm9!ʚT96aAp.Y@F~T$o0 d)T4(5hX5$Bdo昂ēIFPpx,5,A.q˳;)m֫ӕC{ӻ;ۗs[LKKMC]8O;qN8
Rr@w``nv7ϱ}<1x?ٓXԿge~ 4OTI}zvְw٬SB	T%(!ۛް?60AQ.Syo
v&nb0T͋hS]$Qbr-Xt`fSׯ LF}tBW@ï
5X\*t1Vq~mƱ[@8WEj~/nk2Y;$l$-fV)  eYDpY*kFYXS@+hd؊6f޸صlH]K4dIB:Ձja|-cJ2ǃFP	y NiV`j%2vnSwФh}p=xgnꖯ̙'X')4!sz\γUܺygұPM{d:P?`r';o|֣h֞Jk3y޹5
sxFO7Iԙԟ95RppUH49gx:;MJyPK^)|  	  PK  ]W            /   ch/qos/logback/classic/db/script/postgresql.sqlKs0Lf.HVqRdG׶&#_؄Wjҧs킝\L82J;c@"Tf1D7/YXr'Z6aw:8s 1dJ@sw˝n)KrdBd4LȔA()
5OJ;6T
yRIL(rK pZH8*rAj-%(E40q{cf!%N3C.dQ%K:5.Ï ]\3Wܚ_cՌd<}2}p=񠿽{eck
4E!q3O=on۝)1.H g 3JtFL5G+7e~]A#GĴmUQ`kPQPhp
(T"ʰ]x*:E4Y~Uֺ3~wZB{цg<1gm=kusdׯp#ⷦsRC6
UlTsw3O5k
ug9A5~"'ud9В[)ΨޛD=845p[?PKT    PK  ]W            ,   ch/qos/logback/classic/db/script/sqllite.sqlMo0[ai]ڞuцt՞IĪqR$$
-hF?qK	&
QaX*7A{ 8*3|Msx$n͵nNΚVn#'Lp0Ƞ~h!Bbmv~t$E9O#)BT$LS]ʳbjZ2A"n{`B-2Fnє}?=\dTp$:ĹY*B*Y }lUR2a
'Yn89pGT@-*Ah;?ӅtUSA9vuʗ:\\Nwtʎ3f|?Br	}/X/37`eZ@- X1gTQt !z#gܒMc
 `XX@r\k
ccu>;iРDi)jT!QG%u|kk
A'@}N(RkS!+J]+$P	.TD}Kn|={
d
\>GvyVf*W;#η'ϥ+ժ܍y^
}]Η`|v|67g_-,g9>l\>NW&nIo{PK`  6  PK  ]W            6   ch/qos/logback/classic/db/script/sybaseSqlAnywhere.sqlKo0TKBx̂RHgh0RWInIm_
:<f"?{5.xe"T QbhA-HT@x)wYFy bmt0.Y=`4uA߂E`ǹ
c` HLIs:@\cRs=Fc\R:1v~m%O%Zܬ9<y cA+@P6_^T%ams3"%deOB0`"kuorh(,:vSsﹻfFAJ
X/@PWghՔ"9tHÒd-?91\Aq=d?w]aUo-9k31J1<4Dd}8R:2||L}J)&
k&Z@ɿ]O7D+9y4G:Y\mOgNЁVuyH@=+6|
Zz׸=u?솰צGoS-+OYi۽Jrf|SN'MۛPK3ub  V  PK  ]W            0   ch/qos/logback/classic/encoder/JsonEncoder.classZ`Tՙd$DS<	"FM I&&2 N0$#LD[D֪h}}`UAZ/hmcvnmwm}עwssg&9;M+\"_u"GP_wm,Q7Ycum&h2Cp2m?,BKC
L6 xn%h$J[QS 
Ӝ%L+D"kZEMc"o[g`syslm.B)f:1K'Yi,1k">H8'umxQJߩ,7PZwMS/n
Uuk:ϱw7:655NuMh$T7q:<1܋p󱘨
Oo
.T'pp\V5^=L
uXJRIbѾ0[W1Y+{\X&(HFärf3

;E"(Xt{Bi^\5't[J
pE_x$< X0uXu
	Nx4+?2-oGP@2VZysy:g_vCP쏇CCaF
]f̪ȦJr[C65j%zCC^Z$]́/O9UÕ)|i=Wk=aIOt-{MC/
f֝3Hm=
;42jw$ߚw7IZJ2FN5E9EGjVs£E	NDO8!/$mF1af)7<yШ׫=oJ
7&2P̕[ΈgU$w[\ɘa ].Ak=뚺ހlch$V':M܉[{q$5#Q4&㼊
Unmv}r*/=m2ٵT({5|Py#q^=!ۧ1Tv0]#-Oo%>ᣩl۬:TuI2f(
ǓpB)~L	#v=m!mF*'#,&BCFܯi|jJs'7feON|FsxqOgH?ME8N%|6m>Id	xvVe'5WU~(Ѯ?[Ԉi8#*zszvM7
sW-GE
_R	:bXiIڜa$lM?)ۊzqN0#=o9m
GDlLMQ"	h@ׅzd|Xw
?UE|x7,O*A}ESe79CX9EnB3
Ϡ?4'85ߍ#%9k&
I-j&Mժ6UE
'4`W=khᡡ8v5שL.$aYpX",['4w1~T1D0?Ph䝅aA{
5p?L%y䧊6%.#2NjR􊨷lw4UEfy5)Q4ԋ̓R)2SS Jѭg+S+9	/!%F>/`֔ryWvzz7^$Jd!#CY
:WԒ
aհXw>nI%B
bԅU!Tg@*FZU*Nr!;bllji\.6V(oHA.D^ne4(՞ZKV˨
enqiŅaP)MZԱNVj&ʘ`TF@V6V3%lne

WiD{,K?/K+2OXY\5Sl8*3(]6sWt;7{l#wz\sؘ3gx:+h%
71՗afskW`]KS <5hZۼ@S[rhKv߻ۻۚ]b볷hkJt~gK|kצO0֦
ԵNd6J=Mno+cթ
ֳ==VOpbOS?e>y[s=mm5]AOGw{Zfy|M~ 6o`]G603״ґ,m_kdA(S糉5;>h^OyngըnfJ֕te+b5]S	X;B8tmY!t5:Tswwf3J"w[1PGj@O(QHGkښ5cN.?7o9
}慍aUz	
xBCH4'"\B@fLvWRY1c
P27vW1+kKq8+Nm*8}i;2WEC8i9ce0Q:A3J~z G
'f#I	)_{FeS>EUO?8Y5(3RD\xŲ_8@8J{Ue4BNUI5&,hZqj7BIJ)hbwJ7.1pmE;bfOvUIĨ;C
.εWK
Y(O+p7*|`˵KSk4ʜl(3W`%jRPdKN.%.p/-6y6qW'(_e/|MP~M^G94!K#mvʽ~MQaWml[;m(_P_͗C1<d5_k%a'))(ho|M66ʷEy͟(iӿnV(dl0!^~덕r?5CA}~ss ^;`6a7!88k?✕bCX^[rTU[z*c-1.dEmlTpD#x1;b%ޏ5
j+sa**u*+ؼE5O*hCXSͲ${3>ڒUOmI51VQk1SJ\c)Fp	GF7b3n{p+۰܁ǰO.<Ye8
܏A 
<7AqQ)>)cz A2ԙR(2\DCW+cj	6qkrNbIЮ*v%{p_TsEեkj3ե{cx8V8V>·3-O1|@2rLw3Oď1~a?.hó؄j<p3 bE<BΫi齍scky˭wԎFC^Y8^C~Y8B=&۱b288e#1
*AFEF8(+XW_C>.&J|_"ñNT^ >]0QB?b\)4sp|H>t\GMk	ZORK;wǜ8ġXѿr>ƙn$u^<@܋ʚcؓ2_"T+ڿkmqY
߯*iQXc'jOAHu7~P;0sB*'M0Pwxv*꒭ewH
wBw>SU-e6dU\e5qo2c6=ǥL ďH3)7ϙd~K7~k.781
4{Z{HOL_d&*ex	`#KN.w|\>hO^*VZ"$K_#)IN,;|O܉Ob5
ИؠgD	aCILSEr3o1K*FIYWp0!u;HUy<c۝7kyMo
Ne1̠LQjwYjN؝G,GS)/gk"Tbog\'ntl`P"SaǇe!s"CTm"|0`<'3K^y'O>Gs9g#rzX9^q.@rɑYo90̃i'%3.զ6MJ:0Oug-7ֺge)r71qȜ؝115̒:tnk:5֧ۚcѐ.W0sc2+k9ݲ3N^ҧߤ:U[3.g	kAsTvt0|),t+HP0wSXkq9?GXICK#N嗭W~F6;\'o2\(
7 Wͫx]^Y	n~i#+q|V`qv^zU1B9D.cuip#fm̝X\>zEJb%{QL}sd0A\cUE@;@8I9EP#r{'ңc?1K!ZE-d\^!b5gLLL
r*YTK3i<."Y0>6-i+a0]\	QE9[0]L#L#L#L1yM'R$Ip)^-6xqq䗮yzLV,'.*U+l6XaIUNv?Ƣۘݜ 5Cki;N	vѯ6=퍦m-e{ׯi~f^kwZ<U^*Eu2c~"Vſpu¥,5p[q܆jw]ܓw[v{'vnn]\=\؃$R*u[Es$"=XD׸XU֞5C	#$L*u!UIr
'S*3n>/qirPֳCB<lcSGnZ(="hK&(7nD ǠsUQIG[3֛͢z}ﬃ8"}"#db̞ws{՗19WPK	ʷ  Q.  PK  ]W            9   ch/qos/logback/classic/encoder/PatternLayoutEncoder.classSn@=RҒЦMKZrhKRU$"ѷY`{SG!f(u ?hgg93W #42֑gʰ<_C.]iM^>Cfqϐ{?<,F9\aFE2lM)_\)JB'n+K:q!9-ZWI悎E\J[ȉBnp6w\;)鸊gB|rfPֱUʠӊ{C١]ӱkE}*6tl}8j:hоcVoc:4cYq"gA:O)y;cmqi8g0ulˑO]M
lup,\'|xਮKq-iP_Ledo ȧ'`d3aY=J[=e+hO3ȏ1lQcTcTON,_,Ȓ--aiK`U酬Pj`1b(Ȓ۸C
? PK0  R  PK  ]W            /   ch/qos/logback/classic/filter/LevelFilter.classT[SPM/*.".*bet	<izl$?EEqG|G9ICahl6~6`OB0"FI;]ͲyniiyVp[QsY6˦НJELA\E*C<]4NuQ	Nt<xC}
*.a3Ƞl\&r	`P+ʐjWb,ת1D3MłD?"#Ua4rqJ#U0b5ګ0@DV2osR(n)vQ8Lw_dTd]99ƻ*fQ0̂`xjGI\ g=%tnFe?/mӯvcJ&5mǣyDX=CQ12'aXj5%Id^sSñ-X^!&[\]߲+!(%h9#[uҺ ~tɦ-߅39y:z pdK|2s3/e2M+qdM蘪Q`>D`SI0Ťu"!t%~J@ ~):gP#
Ԉ<PE*B{qQM
~,K$WIGTP.cocvı )'&GR.	Uy?PK}?    PK  ]W            3   ch/qos/logback/classic/filter/ThresholdFilter.classT[S@ZҴ*7Eh[.Q.
qRdFtm$eƟ˃(ǳi(!|;ߞ  OhB Zg9irwr[}M-Fpc0B%D0L751͝eOdɺVF%D\AH-:ήsY{i5zc=a4z\5%E؋U(Bz\PMXB2?Hʤu74+ACǀACf5ekT֚+kdOPQnYzyGAqҵ|XfKTS+Ԭk+:iLh#UƤwi\7ե/]#cBZ=cjy'
-g#c隹نh8e<j*	J$[^v!BݵD/:嶸޸>Kv8٩z9kJ[ZMnB%/Rp*:X:䤨:<D
05=B4ޣ?fL|;EhlØQ8`5G|$q##}C''懊#A"Hc6N&0@ޞz2:H'Oˉ?{X˔6>^bٗBA"EUm4HD B(>"U@	)ǟ:AO=z!*\%<_PKS  T  PK  ]W            >   ch/qos/logback/classic/helpers/MDCInsertingServletFilter.classUIWVH1CR(2`8` te[XFISzfCC6]tE{zd6.t}w~ǟ | 3 |p+rYn-hz
Gvq[@@B$lQ>M쁜-+eZ)ɊV)dT㸬ZZR
vf$+NRTI9PKMGRklG5մ6tS	]2ܿN s_7n7:wRpI̖UŠ2B9dR*)P&
P5ݴp»㤲\;I],cTx 1$`X#(f9?]R{57*6R"Hj\E˪kMJaQ	<?'˜I	2]$TU#.bꪓT Ә0+P9Kw">dp#Us<}bIT4\oU.Ls.A,Tv._J=/*
9ڡk̾s$!8ZSlI?V]Ux95G4sis!l;V5C]UkP#ΔVQk엉LY׉>:0(y.=;y3Mh]7fgh(hj2)T*
2ܽhv_9
ΪUK#R.'7\""8WWlXaHC-=l}6fD`ͬWA䵂bA]/I3zȪDZ$A?n6d:N`.a%dUw4*F/)2WW^2ƣbщ3{1~Cq	IюnF}zm/!wdysqlI;>vD!|6Ǿ7dS!\g[*
i An싞a-Dx`ɄcA
>}:o>uХV=D0u~9qy
eA,O0b"Ap)PsVGҭ@/6DDH eI)U)ԫ+_0*`O}=R}NF}osc8XiG^nl&1ŤrJ}Rfl[MFlVqn::y}t;5 PKp#  	  PK  ]W            ;   ch/qos/logback/classic/helpers/WithLayoutListAppender.classUmsU~ndeBiA@j
iڲ*R?n$nݠ?
8~sx6Ĥej2< &4
d(Z;/0+\vR](aU`0)p|)^h;Wu;uh
S8)2
 -v@ڡ@Tiк2
Lbtf#m]ĬY8Dز8Ylj8{A`?vb xEq`"'7IsC)_SDm}@j[Y6`̈́o/%	BG]3{SeX1p֖wuuAvеuݦH^*g>-
kL ߊ =},{@ֹ,
jQ`oRdvەaϧ{3?RkU+T^OmWm^*u׵gI)}f:؁Q~ez%	V>_=B"0S:$yG$TRakH_P@.mZOir`-uf7/()z' ~V)Ԩ+M}2QVH(_CkEڟSGsH43by_Vg8G	}\n0XiK`؋ae q^X9,cLkCzׇ_RK#_.FB[8Fx&ү$'o|GB+ȑ0|1VLyV6E:EI42 8mArRQ}FSR%Xj@)\6GtX7\yOT7BfnL.	6h_PK?    PK  ]W            3   ch/qos/logback/classic/html/DefaultCssBuilder.classToEMc7$?Φ!)#Z-JLR;[;fw:T#78rB Yl
aK;y{Λ?(MN0)L2}sSrmk>v0Yr=7f8O#pRFx.bv,nOa
oMa8l/]}JGzs
K$+7Yqo08ǰ`w̯T`JnrKV0+(/g߭=ث}R-72̌LcNțShEc]tQw۝Q|4"Frlߤqh쮊£Z]W})ٝe'rZY#e/Ѩ)G}_P\O[OPxSI2l%XXFFo264
Žo`OnW䵘*t^ш6[FŻ<(
?otELܯE\J:¢6*t|c҈teHxUy"]I2-1|JvXDJ[7kͣĺiEҁ;YfQUc^ն)JgHh4SX:>k+ͪh+AOW
kWT?$2LT#'M7R6w5aǥI4Ko	ǡ [bSo1\|-aj,Ŏ͎[;݆FҍHLZ %{QާgfH6ieIk=$	2?[:NOIx)	K$\Hl^MIKw<a`CWqlF>\G	9T;ckp)C\WߒSa~iO?qSckvWStY/ PKxfA    PK  ]W            :   ch/qos/logback/classic/html/DefaultThrowableRenderer.classVWW^L#hQi~ ؒEʯBILX見]څ.}GIAONޝw{ߛ_e<
#h8rxd*UN-ˢ'Ж1-
cC]CX!z*v`ubʭ9\6rѲQ%~D`$o!tf<'JQ_sr (ki[Ѣ]qk590>
j8[V<Q]tϨդUmWJw,5a@8)0uZI]kF~;wG;ozzTЯᴎT71EFݕ!gR^)*guSH;jΛ1כ3-
1NeoW5U%34:8M(sYemާ` n時Me[K4금1yv#7c;k.qY:>.lGe&7-wvdZE&F
`RCV\8iӶzq玹مݕT~qY s	DU]W
!|*pݧ2]SRMC~'QU:T:tU;*4aI PXֱTk*/T
̼gy8m4H/_]Z&ӫF.ZEjz WEj87[u)+}ϑ4B}MwO2U8IjCr	}&6ד{0g
ŷvg{C/%wm
Y)#祷n^f8+f2CvZo<=Y^NQΘ*dD3 n߃/q+~0_/ w ~U/vzC.P4AP&AXHFo_8HokNqz<}q؏"z q='7={0h(X5j Wx
}8mSk嬚Hm`R&Z]-K?aut-V&{6ɯH+}xԊLQo`:2Ç	i7 4̋jLBk71E^Y:.¯6
'Se0q T_3S=<^ns*Tu =B%h66ϴSgdg2rp"H>'8\`=[O2Z^CߐVS_ͼƐĐibBZ&_[bjk|" e
pCU+8ϗPKNjC  5  PK  ]W            ,   ch/qos/logback/classic/html/HTMLLayout.classWiw~%YP`"Lز@@I#D[8aIX[I#F#i8M
tBn&9=zNK@!m;3,qܹs>n?!|G\^x(x29#Y}vZM$uC\6lb$S/%_-j|ƌ
:&	<V7dv:RuiCSSYmNvp߬ftRɎ\q	^(
"-y@:Fj~62alO6f"m6S~lKy@llV.I[fX/e)FCN<(O	tV"ǇLn`SGP.Tj0tjڹӮI*A)a6qtzѥ nGk9f5;KL
'CS#}cm%3G`[%2Ea$'vZڅ4wx&eqMMk-Z&kR2}@A|qKyS,mxʋ
z+Yüb!1R)thND߬fd;h##^<DzŔl6|-M~bȋ
$m\ c`6aǼxNAL&ծj5=OzfQ%6KK?lTZtDk2:OJG}S4>zQ	pY&X&S=?P9%,UB/Hj:u T/$A3:֥L0EXWˇ&lo42
28FQ0f/	ـ,r^(tQ`J_0:}VK̅qć3嘑-)&FRJV ؞z:IX4G۾+x**@e|Ջ|
oyZ4Ij89TZB-VZTԋ#eU_Ar4cт>Ų$V|u)/Zk'Z;mã񩱾E\yM4ͫfD=w(SlR/5j4'jd36z&e{da&w:"[²ʝSP\ZH;=B맇!1]bi\jNX=Y$mKe&֗u[WO;`Z]WdFu8Uߎ:)R
굵Ji麶So%SdXg(Tm̴S
v(Jd8^{[u:?v4#k㊨o ^VtCo5 k!gN+t"hZĆgx66/"a+ovyt,S~Ab5\SȻn	p7t@	Z#Wy^-U,7<C}#q+-8GU#~7rq;0~D%:M<Pњ;
isαAV}0;
/!⎆N"/7{WXK8ĳKy!xzkh&q뛳<p湃p{	<K:TƫHr|;_$c@><9&HG ')<8)L,:GumIYuF"/j'G/I_qU5^o}qQꦌ#-zv=!g's",bwřv]q
ty;`XlH(pz,ᕏ=wz8Uy،"ϫs8@㥙![Q̃qIC4U6!1{tGHU+sO`sƂ#dIP7v$5^^5eNuX*g+׋h.䎖khGH=wٳB6u6o
IZ-lUf;eJFM73o%q-rWZނϱ͋yFȿ4/nc`0"'JVQ(^sbRoc PKIZ/  q  PK  ]W            /   ch/qos/logback/classic/html/UrlCssBuilder.classR]oA=.,Pmmץ|Dhmh4!}]bď?xgY(03wf=O P`	*,H2.),w`]p;dH:6Kn
)a^=˾=4 0macרN#,.CHs^	Ap4vD4ֺn;8H!ǰy(R?m!yR72p_Z`TY$ш}EQ̣
Ԙw^uZͺqdQC7*2oF|>7N9a\lKt-ߑP	NPmP _-|WNO[)Ao?A7m~D&YxI_Y#͛{+`Mg.afI>*;b;2d01iw?91#(QR N1RؘbYDx{yUjpmU6Z^.@>r(!KaR ~R?PK&    PK  ]W            4   ch/qos/logback/classic/joran/JoranConfigurator.classX	x'>(b+$%	GBvqr\d'Cv-WbrpҦ'G!qKB}7++eǼy>3 ؎UT+A-C81̆u35&	#}7jZ*giuYPK34jSV`)^aǹ$e$f]٬T12ll6s:<40l)/1['
 ^̹aզuB
몑
mK3Rd'DYlpF5=<3T\&k܊,SpN k:sbPɰH,R֡:ǰ3sh:{@MVa=y-+pYnٽ7B]pFI	-u#ZaOp=DkB!/2M;Z2py1l5f2HrkGCm>ȥ4 	=@úY̚:?R#{<	!+E
u)FaYV⚌8FHIů8]fD>p M1͈s)y`:d zP`+cZV&d5jZiwCeS,^5qb 8 #dc󺇏9v5Ӡ(¤u1 2&]`|%\^\!H0yKL9B5:bA[J+62_Qu$8.3O!q9Q,<:SNqur}UEvU#H04fYs1옷|͉T+E|)^;*fpLÑ H3/F
Cm/WmNƳ-:jO;R U`	:R'ɍ.]䄲CGM'Upx[yDx.C[Vjm}ι IqpFU,CWiy|%n
|4/|~ة7ɗ$ohgɝ,/~9CKE=	WR-U"*	frQ"vNm.|Cȿ)vPE-!J%:)ȥG5Y(f&T}X4Aj9*"X$_~^-ͼ;"-wCa|rihR䬆ֱ~.[rUV]M$ՍH6ymYEȴP-PfEv,\dE:.m"t"mi]Ҹ2T;'.הN߫J>ћwtRFfJ[=KVqb
ڄqXz|R9BӊG]c
NzCO
ƧLI3SS>//(8)/	
W5Hฤ'+_R?
ԏJgWpg3qE
O6>2ԕ+pXR_6)p»N{rq=Vo#;Os QWkƄ91ϔskz&-6Ƙi2cŽtLm6JGܸfY3""
U4 p~y(C%+G:}Qaz2z4M~k%o_x=,	T,<@4-3cu޹wwm.EwI<fmU.%.y;=$o[.wyvbPڰ6t.B;q"tX݅D;8	tSU蕑_D׍oW:J.lHiBo)<Y$_bh@Q7Fo;tu獵@4FQ]P2tpFUĺi7US8ܿ	L&'>`*\8,
wTû2Pߋ`qS8TuA=3fP0&^R4&);.X8=}=_&}~	RB/.Ewx݄>ᇾзw?~Y):B+ֽ'з~}Я*EwvBS~;Rt;O"Kml<i >Dc|'
OFFF_,R}0Vaя
_WwY?PKoK    PK  ]W            A   ch/qos/logback/classic/joran/ModelClassToModelHandlerLinker.classWsFmbQBr!9p4-m
(Q"KFSҋwKA}3-̘~LSoe8L?Xj;՟gІ%T2*KPp@7n&Gu2NbD׻tŶL*FBV\3&թ؜fhN;x).p'zXJ'
eRBW4m*mӊv1%;'LY2CPXlUS=y<%3hn_B-Bq91!N
oQ:5ϝq3	0tN'2}-q$=C_c|BRb$yEmM`5B ?\#c~UJ!<@	䈛$<f;ư&%v1kAasс>OBmf:\G:͍RH424/qyBUBa[L-b;'R-Dv0"|DkX{PI0R|p&b\jeMeU`&5z+yxa9dӶ]%r2)22$"!Ei3Gne.t3lQ<{u(E 0tsT2PElOQcgXXd%>Y~+$NT$h'-
_dxc(QfqSUa؛r5J@~.0:_I{[W}A-2,QSc)R+ф ZeADf-g=:V@``:ƠTN"N*cc))v=̓7eGVxR8Uc\&eb큅s}U팚*'S(H3=w-J[:%\olJ%BUS4ϔRS
pχʋT
\ArNO%	/߽BI^yD(oM=dXɫG'Ppgh}1s}$;X>kbo3?f,}.|W27gS$jFuHUWpG_8<\ʩ9I7AҌdl.4_˜`H.E5GwϠJVhn=GuK/(tg=oHzQ;﫛oBVZن!B+s084qpU3+^t57qwsxU.\znbYD<ؔ6n"Y3K+F	<@>h5<H&iv')Vփ8"ItLWHkf|kss;M,?n
tSKctA
I-<Z3eG7tFp̛##d(jBmBXۘc#>>jo7By,>˹ ,%Y %XFU*r8%PG}ѴK>zC{>GW=)u~OXPKEv    PK  ]W            :   ch/qos/logback/classic/joran/ReconfigureOnChangeTask.classX	|U^vzdP
-l.B
iҦ$%IdwLYffF(CD<@@Tē*}}あ&dF~ٙ}剗?lqBe(P!`2׏݁>33t=+gx֞`nӳV%Zi;vp@ym]OaTi]`sO@k!d,'趇6;}ur}`y:X1Qv2L'i%]zV4HV곽`0eTL(G똏ܡr,%^N\nqZ2gD)/=X'M1خӼرvlXcV2pά@Ę;vj5XaSpiXo{V)L
ӱ:CSPc$%2%P3`6VRiGNR}mc^<	$H0zNj1Sͦ[WP8SY:9%|&$pGmDk&,4QJtN65}eJía\ pRݒO	L74Đ&T0wi:Z一R2WhxطR*|$
:%M'i[&){eڷ:~ i::Q B3|/xű8Wo'-4rSL/ӭczh+ٶC.Gx7bEE*p̐S&l|Z,?K,&܁k*%pS*U 9a$	t5]\!XNʗjO[%B;u~L]ohK[X''g)ѩ	ec\wp	VO' zr1%PNHlC#f6{ɪKn'TrF%VZ\
Õk&h[.*j
,1?^{Q.70}U.s8B}zSJ>1?Gp# '7o"4.ߚ wMYx|66oŭ!]v^8lt]JϢw
J@uĠֽKǻM|وe9q7R	oi;u~集
=I+#	レTA)sFYE9%eqJ)V=w̿|[cN5]n>gA5hwgݬ?!di0l\k}pR1a? C\,e deVG>:e"C8,pBAT}gpe|.7tV	i9IiG)Fxn}vZ
.pTH	ZoSQe\Q/I5JC97qivR#	h1%/
_g}\}
kck427LkoFP5oˆu_)'{8-K5MVmmmmhoi]sUwkG{oKk'sef浭]͝k{7v6vlZ\WUZiCowGI.{1s-quT%t+`"k<ͨIڊ&)[PvPu|MpL-tr/6 9EwFΜS#k8:rQϢbLP}n\^S$9M$wL6MGfG0IwPӦb(ѹwwۉ7Ln7Ûk"PRA7+2%YVh=IM)%$|~b<jg6"1Ϝ4)!f%8~|X.9Rj
33mV0EmvyՋIWpx#Ka1f'l:e8n`lC\,\& S(TzNGEb&c
]t/^)|ë'<aΪu4)$;i'2Jo~ɳhXD:M2?,_q81Nb*?ďcގp!O}?jț4_3s>yU~
+_\ibl D 1;&Q/C`1*PYWsk-0äݱp.< ?^,}XtǠ¹
n?Urc͝؟g6`^H<.<m
d~qo;hIq/UGVŢx
eV8
q:}w='L8\6oUщ5ނ.Z؇
%p'p6*g9$Sp@eğ=tjt9o\9`hX54pmդHj󫌿l!a;1/FG^uWKťʕtn&|rL"P`tɿg_G>ދe{7^$_&
xsC;[[V?wT,F;ǖTքF{}j3捸'oy]vSRRaxnOANevTq|%yF7	Vlǿ,/b<࿄A<B/S|X¦۫F
/0p %yr_ޫ
5yrnի7?a-DzZ	n<TSA.}|}9uѯr^nbooI_]Ɠy0icdS[˙TWԕU4jkϵ>dpyHI}WoRht3xޣF7>2J*\΍gBB0*Q([Ha0/ar
{4<YEv&e
UAw>ه+!s˸R)BQ.*H%9l`(Adǒ-VoRKШi!Q*ӣS.B(z*U*D#ꩫ'U"PK_W    PK  ]W            B   ch/qos/logback/classic/joran/ReconfigureOnChangeTaskListener.classP=O0RJHl|HxdRTs$n-ńG!.$*u}ޝ-؄:Bw.ȤI86j'l!T*m.2DR-dk%I#&IhlF)=rƄ	!"7QH/Jf3tyag%oFƓxRڪ*"ϋ{5JygZ9Z3缔'`c]a3K
hW`vط
8V
K[E%]O<XAd'PK/  [  PK  ]W            >   ch/qos/logback/classic/joran/SerializedModelConfigurator.classY	|W}Y&>s^W7c6urtI#'T펤vg6J1@&״`rHdǦB)ﻥ'&ｙ]]ͼ~_%z5TlJs=6b$&	1ikXn. 4uh	ԕ:˦xrSnI19S 'e}u;F&,w>˥cX~IԣfNiMõYLw>]3tfi8quvt7NqtG%e:V`E'g3svI;4ֱkv׽(Sf"l5|N ;;03{_pO|n:6KYVtAFQlg+'r~IYc+|[
k,6Ejg.؆nQ%1J掦\Z~UBZ;Ih@Mi󄩼&p|/0XFn#-.=u'j~geİEn;%u܁;4#<j8Vɻq]:n-|M9>3/Q{oֱG8O=`w2d,-bH!sWyYNQApa\h	/)ϬYiюuB	_Dʫ܋C2t
<\h?.h^4xEN
A65a:aFG ҽq7O yb(B hqܼkFΤ	NLޑfs1JjDb彴JYIUcX0d	Y!+X+
Sa<C~<Ętu*{I1!R"3:,ج3V;-ṟTu&!u7@<GCNe;0Z2<iSqq!-xêxV=ljifK6Ra:1~R[ܲ2IVDqHs 1St*:ò=mxB l"1e< ﴲy[hvEsAnn?d8I2YH+xD;YJrƻt[FosIiZ!{u4=af輨*vaTB2D?(pk@<\2e5ʒhK(&DΙ~AQwH,>gs,۟2ls939c'Tzg%
KQ?<>Þ$G9f52=6yJbV)}_%SPolҌ>X-3Mz~fR<MY_Cp",lݔ9Mq^#EFE0^qWL_ܴugtKl<}^L$XLBeǥ~EïxQVmeҫ|yLgwS9Vi$!u/t`N5ֽVAubKY\4dW3"$~KU{pfgU
Sh#I^^S^<&HTpOuaGؑ-çPK7۹NXׂc]Ͳ{{42jac
ejgTx.wTw2;[W
宷%qTjEWwqwM_>|_yi92ypkx!eB
ʢû@{p
V%l͞|ftd턑4XMOqY]u{xK>%vBtM/wk#=|c,KⒹAAz6M2wu/K=rIܑ'㽋{cˑt9[\&3yMQE@d+
朵k 7U1&*S&J|8Ff&geiveҷ&Pk$4ZĊ3ڵxnd+ERlrjY"F/rg)\Zȱxrfoۯ{|N@/olSŲlGao4VkBEƕvy0ݦ;n's!ef2Z0BAjZ9ڣj6xhO'#fT5!!?)=+DeMYQͨɄ$0H(uDEHXϪ*2E%$};^0$Zh19<K5,D&:XVAg0Nܽ{zxK}fv7zfB<˶'%ɬYb>V#Oze1J˞v鼴ܐ.ce2[{l#ϯZ
_>}s54C9
U^oPM.{p%ӨnxzaKŊgR"ML{ ?,>~E>˧*!\h"
QY*Vhl}+pO V!-
Fc|4pv4nx	wt{b
kM+8&.*R"5	P$i8F
L/'zCgj?&JZtbW6[Ѝ:b77mxTGӬ15w]DCtN,KOyZyeg=z
5l54i\oB^
5BkDKeq YFM,9bWl{ϣUJqKzO'fPA.0-0nA<$=E}bbf֗_}|ڇ%L[_OESҫxkx)娹K_ӫx?#hzGR$.8P/ )B8yNLCaZg>,%lv䜡Fgջ=-$~#qqZdۑȐs9x_Y$RށCUߕb*I'*V5{GZ!uf>TO,ZIA]YAЮQg4&xK3K>~VM^`9~
 <}̥PKnci|US醛qu&l$p
5dy)-Xǈ2=AVvyl׋
b"*6QZPڣRYAGkX~	ߟ>&J25=^K̍'Ejz	&_
oJ
66UUSWm{gN2 =8Ux<%M?]%5J[9eۄԸr'r*ox'.<bi8G=M*e{?mFI&@>BgL#b?A.fɯm~nk%Zm$':qh;:DGŎbnkCR&qWװk}Cgm+:)+Ku鿢jx>MV3|R.pQU"*|SOZ%.Q
TZ꽌o|$6P@OKXx&UEeҠ]0Fq7Œ,]ܬh+j&|
ڼSMQâNwQ6q;GfnqwUpNܣ~UMwݧ~Cʾ,|#?uD~PK`[~     PK  ]W            @   ch/qos/logback/classic/joran/action/ClassicEvaluatorAction.classQMO@}Z'o5&D!x0
mYbٍ%,h2nKN2y3of_)vmP`8($8NhW1I%ioeܛ0a.2)sb5Bp<)dTBlX8XG2asFC&MV>rz~q$dжP%8c7CU#=
5B\p"9hcqMPqְPgTR[~g򱏊>`
 	ՑX:xy589('5	K	PK/XL  Y  PK  ]W            =   ch/qos/logback/classic/joran/action/ConfigurationAction.classT]SP=A
E,(E@B[vhOmz-4$e!>닌:G9M۾d{޳'|-E@_1(o-G1ZkoͲrjTꖩpG<P=0X7u	C_rBA;GהtSRZ5l.ݽHQA\
RCUTAc$gҬÛ꺶^iaׄ[FC0,%s+7kJ(fmw$e0IAGiƻ(1t4nJk1\Q,haܐ@AغUnIڈOkxy3
Q4w/ư$q=al9ʫtZ*1uTV毢D)5;xB("5L=jIa8"ߨW]CȔƍ2u}c=ѩ۹:4tjض0]o%;bLW9'~t}f׋I	\tw;>C4#BnIK#u*atP1l*|EVS]60ѥ)k|4m$L(6N!|
䯉dQhe\}(ktJ
O=ߣW^] 
>J pU%M	|0;4ef tc{XlZn<}xHv[xD"nc3zPK@    PK  ]W            =   ch/qos/logback/classic/joran/action/ConsolePluginAction.classVYsGƖ[AZ1>>dceLZW;bw@BSAT	BRyKUE~HRYmc$
*17
{["Ս!nu3OCi9	aZrAaV9oU]aD%xPAK*6M8lъl<y-{e7[e՝gxX@JRDUlfpzz8æ%)yDІ
u2#
$1a^W,wSԽY$Q
.[4'ݻaz	۞!g:T^BGE[1>dVs&f{̗]ImYH#؏n=*z0zB%3gfI=_+i@-lvwi1>:WI5VqU8m3^Tv;QGT12]bֽU=RJra3Il*nYܹ{:eo-tnI3*(m 1^iy/#I3TBJIA1DFBTR}j+*.2
R"8ekFFF#8*F0JFRX5Ry0"*fJy:9@hF0!s3_&uW&M$
'uYoP |h"GeM1DWU-Aicڴy>ťr_#IjpȀ`Ӗa>p/Xi+}Ko>KJӊ$p?YF(zK:̣ ˛-:k\\<&/daj2+{Bu%^ï@lyws@WkẄ́jd23U#Qv>l<V'7rz^½ȹa|pB%i].j4
OcCrP^DW}/\WZJ>3<Vl_-iψi^zYS	>KK%-v.*K%T+#czrIM6eL1Ny5þ2UfY8Eрv]jo&[ˏFvq'`s>kƐOQ2 N3$E쁯x|0D0?5SlPo,;
h's}tЯJL*8S)-X
.Ĕ
c\Ica>u920v4L`"D݀ҿvzt؉nts}8Eh$qr
GpwpG'0C\4%ffvL`A$WSa{ொɪA-@<f6I|	He8CPFV@Fl߄XMC	IXM֪?ejxw!M<@寧3Z|E;H#>/?~/47PK    PK  ]W            ;   ch/qos/logback/classic/joran/action/ContextNameAction.classRMo@}8I]E $$KP%kwnqe5p?]Mrf<g/ `94ڈb4"<NSRJ+!3M!^R1'*?1T='4wۘ'^eYL}©;WpxF_RBUTٷ29Lj;% '.a9t~ҫU@={r}9zyϞ[Gw3y!E.;A71v F\r$'ʩ3lW4³ȓ+x~j	y>K=a)~z>&vmg䯛m̑`O/Al[!yu>2V)W7}W]bI}¨	7_׎qm	1Vc\G{=f#?PKҡ    PK  ]W            >   ch/qos/logback/classic/joran/action/InsertFromJNDIAction.classUKSK#
W'0(VLY3q2=K/\x7Pj(ӓQGi"}:|wN .v:i°Ѕn	lׯ׸v|%e_qN(}Ϟ恸/	ݗ'ëٱ\HCs^ T8Vp8t-;	/Tro~.-aWu{_ad.*wa$[Z-nܫrKZ!c赊LI :xcXGvQl!0qaeHsZh~BE3q*ޒ/x>è,l)	$Xb5,<JTڷW-ڕ9
Q+J\3*%Pp'̺C)q~-8eQ #{b<oa\S\,cHmgg{}e*1CO]S(75yw[Jj;^4G:tj[:?{.HZSK3Mh"yk%oH	I$W~K#ϋcrև%	wZK-
Sg't	UrĬNSZ@?_qe}v=NBsbh_/r9Oh =I qFS0;e\zX^m~m#i&P1^<KW&^g1]ƕH$RV^ih`7b)yc'N1e5ݧq=!zSR @"D/	,')'b,')'dfqnEs PKxV    PK  ]W            5   ch/qos/logback/classic/joran/action/LevelAction.classV]SU~$lHiЦJR
I lP,"@Q0'3aaw7)x/߳*T;cfx~ It[ALE=;[N«{zqy7[Xvak6YL p\#:aE[}MBARcekzѱ}=(DJ]I5%lT܆+|.=
]횾滦]+-O/B,xC6dAЛ#0ɞ謻ba\3	dbYQ4soIv)EqY.*7Lfm#-eO%W0>`gV_ZIKᆱ]
F̖ΰj	KIKhU\gݴrZڌ8&,Q'*<ͤ	nL0P1`<",!,66UcȜ'ۡ4IxKfLAWpKmܡtNJ>HA(n1{*>HxX@3:X*9Unku#6yvN,d/@v.cEo1$cb?+Abj׶p4-t]$~`!fUg8i9M*L%֔K[TӞƲwJjt&ZLO3&)mEpWfhYj_Kk31b-gOĴ[q3t
C6EnFKlD1|>+k(rZ3}AK-ܢdWx
6nT7@[שwA䋂ih~I=7j[ c
	 8P6sCNұɉp\ͥ4ʓ;Nq!d	cV{máS9{ HQp<0O郆">%h1<B;q%6S#߅x:n:KLAmw]\^,̶tppX"KHbN$9J4&H)4+kl!7PKhU9  	  PK  ]W            6   ch/qos/logback/classic/joran/action/LoggerAction.classURP]ҦTc@Ң
#ghVFIjAeFGp.;:{'~ч~g뛶۬si0W];&:
nCpϐ1:Rwy	uRm-<p4tA7Z\s{R|V[8<{"*b\[mni'fzMs}6}nV2[˅EE.c`2#!_]/R>Kd1̠K?|*c!3}_Z暺6/%u$2he28㨁c8ΰ?^TSDEjX5)VcNe@F2
:6{j~
y-Q&T)c
E4o(2xLgS7:ǔGt^ΰ&V^ɒ'վcԂI禎	0,CHZ`OZW*ҥ'vW[6P%\h8qVQau_Qw uD#pnp^p[%nKUC;pJ8G?_hghNoEiLƣшp~;˸9_&JZNۀTvP\`T< U	0X1*Ѩ:Pō/䓢M/iliNg"C
ȠATN{ץ9M` E9E4CMP%(lzs.J y-">Iܦ	<;JZwiǽoPK}V    PK  ]W            E   ch/qos/logback/classic/joran/action/LoggerContextListenerAction.classUNA=C
e(W4TbeR]"/C >ζ-6sΜ{g/ "@bq&0iX=rrۯ,Sw-nsUg޶praiQ2Xf34%V+B=7AAp:AKwM)O181\nK)rGnS	C/]K"+R
~v )MQJ\3]~-ek#P-g*[{C+`?)jq]&*YWa%.[{V0ы6?"Ko2ҞNstz
HOm+Uٌwp7{&cmCsY$B/8eMd0`"\{P$+aoHF`h/HWWJB%FN+A#ؑ\=Dl	x7An14Ha7L"5C)zRHܟRE:R$4,mHnEݜ}*O.ځK
qBt7ЅtCF1FmL,ԎSo"=#`#OgMpv
m_j$&^͑ѱc/)ɗy
z t
dj~ƣ,20OsHDo`Kb'6qK'?cGN	F3)Zr]-
=!OPKL    PK  ]W            8   ch/qos/logback/classic/joran/action/ReceiverAction.classU]OA=S--W~Ж"""$Tb`m.nkO& ζ%@h3;{9ٟ kID#ügs<r*%n5Lƾr/x=)k=X3V-=v <iUfu I}M^3D>b(a)09nhT-
c]Yc[50):7,nW-
+l疒5ctOnW	a4N3,]XKW]jAd8_c)xpl_4Ш&⍧ua)=pcY@1uTwCMLPM"hqJ&{j/([:nC\zvbXbSmGmjIyɢT1]֭MߓdŎ
.*0j*o\XCK'y-$pT0FjTZ$?qƻgU|Ƈ\
LxLı:K{BzjՖSsML*/ל҅IܥKZz5M4z Cc,؜@Ffh֐l+#(!ٔRZ|8@ 
	Lэ8 /6[i.Уq/ЛSnC5,7- 0qo8錀<IX*+DPPWPKt    PK  ]W            :   ch/qos/logback/classic/joran/action/RootLoggerAction.classUr7=JYqqHJ(/64,ΦUʙ@oh/
S`Iv$vo:g>:|{oqh#x& &~
"DmAC)%2/oS*Xiy"FȗP@}<ұL<'Ykqaf\*00Kxǈ+RPBƩ={G!&\L3LJv *nvmy~wxRJڞ9(8S%pd*ĳOvJ
~,,Cainceiq+6g=ӴZypK^SxОQJͳP+%|[e}Ŭ2\P-S`[\3\.f9HShUrN 0hZpbj7Cdج{AGoT`mÓL[	ڦ }SWg6vDR-Զh;8C1 O_dGʷU$DEFV5x{nmvU(El~df6B'~$MNe
꘾m[۱1bb+1pޯ{
̇n5uI㗴F+`w++pk7tpn.s4l?1>\yj*?XjK\~ἰ:$r4^ i<|U-߬5|g5üU:nVv/P,RICX3_^cd^r~3L}2p N,#l'=a=au"qՕаPKY0)l  !  PK  ]W            L   ch/qos/logback/classic/joran/sanity/IfNestedWithinSecondPhaseElementSC.classVSW]I!.>hUA <R
$5%KrI,qwڧAig_LG;[g'u:w@{9;{/ 㱂]'r=ˉVaJexe:.7]' 
B*j	8eLW<tGp[\`%tSwgD}m7F%+/\f^r^S_Ec[8z.h܌;lX2qE~Vw9_/XM2(f~0Ʌ2y2ڕ,7Y'+ҋˍt
IZj[[eM[壟VWrOYIvHuWLnkPQ2]uT2AJ؍PqlfPtgt.{9r;Ʉ0jX-MryY/7bWKÚek	pYS!]Tхn:6Z6:um,Pa
qñPnPqqjҜ0&Sя8CXw]f8صO'tpFYoHtYdJՕ=Rݾ0p`UȹC
:j%zuPqTݖ6:%\VpӺ)2ya{MɳT\gHJ;F$慭>RÚP$/㮬60X#qd _ܬ7%"WdFӣWRcs#STͩf}CUfQap!HbBj1m]}b<&ǷuKɏ`N޵t$eG:P+m/yz;Wþmawb)L7cHǱu=0LFbg}RI?6.NYصZ;'tIײַgejkpV	>EMKaA1\7(r߯u!<`*HG媛ڍx6d_mC>cծqn
ᴧ-T)m/	~g{ޮ"
#KwALS-M#S|pլī8A7n Sk4n<C-|f@Q43hxܦ1jwc*̾'jhx)vOĢjo
Ģ?]L3c$bEc4n@[^כ/pa0	C/pi0Z9EF%!ƘoQr9 'ҫU4Y~M8n ;<N48:Qn<BуoЋo[s%W#DD+iu(ل*U%E@E
AU%rk\행Pp@q5?}~
n-k o$f0WǴ'_PK]    PK  ]W            K   ch/qos/logback/classic/joran/serializedModel/HardenedModelInputStream.classVVF$P4mC fBs!)
N@!I<2	}s?H_V#[c+}ײG\+hhc8^q;?ʲCGp;Olkd0
v~a;B/9akQ5e8Wu`r+/\f]EOdO^o3c8'zQ <c+ʵ}ac
}XYɉj.0Lqqxou1KbhxYIWmضy#!N%q}%dk|$p6Ğd/dV`Jh.w+eou0xPqsSkŶ|hưcN''Clځd"tŞ~bxR!V+],{ۤٔr~IHB}a&_r37֑-n[a[2A70&4d.:wxg	Qlɢ(XwC˶%:|ɴY"_j"jLvO+LE+C!(N$&ᳳGp$7|kc m[z9꬯p'G}X[eRť^"C&NA¬8>SQlC
an%c	P$OiT6

FU΂{;kw5cpw7GȦ[t;$}igZ.4O[4uKWg?h!J^+5m
6c%K+_S}i;3أh־GGkN=U
~So+_
!(xL	+xR|M7<
N)=y/(8eg|?Z] ]щK 1A+X11Fb_"7H[9$~?qaӈ5E"n8Mawh0eq=iC0A:#|RSZ}V)Z`rh{$9wUVbҺ[5W#bF#A=tWVPK)pPK  _  PK  ]W            *   ch/qos/logback/classic/jul/JULHelper.classVsU.iI&5A
HRm E 	,&Ht^mowCvS'?A}8>:?%mSI=g^"6"8.2.kzZf-],bs!HGBXADACnx1DZXA4ԸSW9C"mÖeB2 ^ Qva -\P0pb{"/bQkrɮWy1,3!CM^|qT5.FM!G0RwkM·1
q#ե#˖+zu%]mմ&AB.x$X>SpJiP[4aC@F%U$J0/dswK#rE8=PL
u黠ϖu$]b.'%
Ҳ5]4y!齶`\q꬏TLb+|2spvtӱwzKH'^!KlK\qCA^ŬL>arSgok7N6=yXcek*n.~+
D0S%u-<c-ޘ+<qͪb^owv9KM{JA.ZS荂e,Eb$ѹ&ױ;2*^+RFhzM})ѩbϝ SvO
k//(ӹ0_/ѱAVQ9CmфD/4if;
~;K֢bcAX+x$.>M0׬^^uwznfY+zfpm@3eᤎ7Mޘq[A+jCi` O]&KS/~ku6]U/ CvᮿxPtC<G{(]?+.^,0."6!,ݬ`lN oݑc'!mؽm x/|࿤cw^`/8W2[9L/Y0J 4ϒ-?LJA"'6!Acs4ާqqSJWȔ-&/p$VwNRθEڮ%ӬmLӼ3A87G$9}1I=R^5ږ 
RB_tvli/qsIwfgڅ"}n[;qߔ!*ly}k+,E-Q]/*n6kXPK
  	  PK  ]W            6   ch/qos/logback/classic/jul/LevelChangePropagator.classWW]X0B^EHZceY>$.,YFc˰f,;q;q+8q':8^Wy/vvvꪯꫪϻw@b:Q#Mg^p'L&̌7ge\7.5cb1
/F[vM~buAG#6[i6<e.L֜7iɛg7| s.f:6dqOب	Yިo|sR@˙M:ZLmLhC;B3th*[Z`D96lװCH
4)6Ɍh]4L	IeL\2s~_gv劾f!y֘1CY4<p|OꕫGʨأc/RfLN:S2witiу^5hdOI
oA qg	T=
u<
rYH+/u\BXg?* IVpZI4 X[*f1BsR1
u1ʖ8d8ڐ֒dBB>qJ1Xacd-[})Κ÷\Q?'4dua-+Œ6!9kdWx#L#hIu&JB|JcaFzcDlq7b拶Qv׍tn/KEgt<|AV6CyYƊ\};tLG
Vae+^?M`
KYˣe1=Gc/0EO3/ٖup<:e4̓aWt\t}Mx|,H5+WvO;ԧu$GIV0)I
_]qYeL,hJi֚2lr^7j/ܵ|O믜wҔ	1!U6gݜaKqbE;/-3r#a)5lULXj"]uzb&KE{ޟR,!
si)	;,cwCd(:xW!m[7;꺒UAʞl<p
<	-&BW%$k !c.\-\]JLP"VVÍ[ωQXș'-lJ#
ܐO^-ndWR$I#pdn'
$[MA Jdlx6ɕNѶ7vw𦆿W6`Zμ;c1
Nn'_xtاg6*-LI3T1`({<	ɌxW`ݵEY0v
W3b[xyqU8/^ķ\!xoO߄H	M@"&yiy]u'h-؍pD4_7B.&uMGHB71V{-SFKPTE(Õqb"2.x2U<ﮯuT*IVw-ս+y
)e@,Ri>~XiԾLj{ݷ;dHF
8СxO[|.xzH[qkCh_7)4Mo[C8昐G;:#ٮ꾍AA=]lYx[]V	=ܗ7mqA߻'4CG|DxY&Sgȓ8ȕmS`w1v\܋S1įzȯ9*Pᨆ%#/E;dc?qSi37arQwtE>rqs,EbzFle#=:zTϽߪ\l~ߕx>wѢaJìo9.ȭDZ1q>H1U!?6^3^cTګj#+B+5,i*JTD
9j5Tgnc,{#nq
u][ʸwmPK](  3  PK  ]W            .   ch/qos/logback/classic/layout/TTLLLayout.classWWW$L#F
Tm%u!
&bJ0$g&Q}k}oX9=??9ݾ7I((0ww?
`3

<*.9>fᴙВi6c^jtT[BK#j)#ڡ9zie4-@g&ix4\1;pZ˦qǢte+PRE=.4lHRH'X@Cr	a(hTlݓ
',6G-Lt~4Zzp&\K\R`"."QVFk;BuAְrAtt@Mr9USMֱ}X/`V-BoHOJg6zЮ sFx0fR+YCMNDɹvߪ6:2.`gDP	U,-1J#>lj>(]6ԔkZ\¶)xY
ETG^͔@Я.Kmf,apTJVuKaD:߭bu@r-
L"_-c>쥁a%\Cmk)7 8$PI_Lwq+y.QQݪPSBIE
8phJ gƴt^˦klqG̰6ƺϰ29gF˩8v$m݊ӎ<
AYэLՓ	&ivƣa]O?)>nF+E-UO3~<G<1CA9">\JOxOmEIR3*qM>rX#@Js54Ծ"fd|fB2Q=34ːߥI3e02eѩfr:aiI*VQ\cEMO>)گ$N\r
>$W@RE5!
8,,&TZ
\}132,躴njΔ99Y<ڸjNޢؒ換y+C恻/ s?|^<^
/#ϗ83Gs쯯=egQǏpY}:z
-x_jQ^k|y%()[?a,Vuuxv`tsXE]b6}:FMg.`G@o;ԭ-ظ~Z@q<sQ,O*oֶY'c_9sX
ҽYh5M5YghHG턿~zlal:Icwk!>QlO#
;H  >.n5Cur$y|$Dwƻ}\*?8`Gz_e5tGz~Sm|ݡFyU
;ko4bf	\zܹ
sK-sq)fzĲ'y$u? ;H
ãr&䡹T
P#RL
R@H+H"i
u|HZ|Qڗ\4/4(<6WpOl0OQKnTuZ3OyuP[ȭ_[PKQw  C
  PK  ]W            ,   ch/qos/logback/classic/log4j/XMLLayout.classX	xTd2ofBB5"8!! `%!5TR%H
jZZwB0ZK[nvwV{3a͗w߹so^x QSpD[G)<
3BMT0`6C0R#e*x±լPR;g^4uAW](1RpH<Q/k[޲um
]MQ!Z֬Zv&+t1d#F?e%ñHS
v΁:aOcF=D4J8xȰX{/N8drdҟHf
)L5Ҕe$-0Kᘭ
	#mߴT9Η23o
xQ0bsȌYhq$H^},h3Qeֱ jǉG*wpY	~"41cu,Fre[`w҈(=hO1GˠF/Ѝ5~/>pp 
GMz?XR#XVF&tsK .m.W8RM D'8xF
:eJY車ȝ,3dM9/VQ5k i.FMMx^,9Uar &:%e"NGNr,at`T_q&jumlL#ǷN|~bL}WQV!.062Bf[Č2Id â9=).L/YYef.knѰQafn5cŬ:*IbW?ؤ!#%13ӋAlOop':N\fX=yH>0=ܲJp-bд	9[UĽ
@~OfҾӦ;җ5pt.qIp]isE±4:l8RWF78:ߧ%~XkM&pmU/fx6gt.kMw,H3%u
G$q܎;4ܩ.b,7y*|)<i2Be$,؍u-<̤aœ
imOӉa<QU(hFj8
PKҥP,Oyj"+KZmeau|Iza
_V,\5xV:AQclZ)ak }E:*ʤ5"fF3l%./ӬrfnLIJl[mi|ps4"yHg@͵V\A2sl% |>|[c-Ձ5aN@)<.WLޑ]nZ__8_/e2Ï 5\NSN7
0Ѩ6,3>N8ҮP9)Key(ꢲ`%rFEAΉnӇ]â}'p"0li7E4SmGM2Q0_~aѢm7&I,L-8{JO2A,p_W?fXISLVմ`2dJ#<RxJYI#JyU	buWRE`H|WxW^qϪ2Yc&cCfR.7Brݓft<ވFԬx|`Ha8i"=3CMUe k9̘ɪb)E\Y/~W˩=~f}+7G@}.:"	n'Qy)PSJvZ!T̦ZC`.
gtG5~@zFMv٣R.SmGsf?K+h&zW(bk8Jk,sܜ̂yeUyl⊢@~QB )s (@zaw"	
OĻq@~LfKFpF0Տ(Ǳ(CjʎsS2".N*~r5)9L3}TF$W<܀5,vWw/*-YZz'Uz/ք7ZA<Ւх}PzzbBڰ6P2XF=8gk.Ef\;ܙ+rgz<V"چQ|VRVHOݣxQu2ک4F{l'yF<M,O+@sc3_x1KFf4o`<}
4Qk0Dqb܉qlE=Ij
E
c30U9ޣ^xm.݊=͹q4lU3qej>.W
7Jj=QV%q+^սQ=S]=;ԋKJ{ԛvjxk=vFt5@	o[BoxyR/:	+)~Iݍ 9Ϭeu:ޒ7CKiiixU-,;],p5<gm=X:
SRʎ+8+[Xs!SƝ竫FBs&G
	7^y0NyNZFrOMR
PKr&'R
  Y  PK  ]W            5   ch/qos/logback/classic/model/ConfigurationModel.classUSU=ؐ.J6	):DTԴQ7aM,nt|U_Ggttt|vWg_s7;e:qw??
UGB:"
Wj[ղ<U۵zn]=ftBLICL 珩K6+^؊Ȭ1#
!U=Lk6VS`:L}:mV06#?lTs4j^yT]
ڕmHǰ(ۦ4myMbeIV#R.hMڵq9(h`Q24L븄cֽ@XJg
bZGYd<m:CR ǬFpUYQ
HgyƼu]e,8y7qKoW>16O

ۑ
)g(<IMªǎY%vJ2"w\[3Fkl4rPm*#{vj&	*
]m8GW;B<A'E:ǝN4ɔLUl+&%oצOA^%[4
UCVy0y:Z{S
8Vh㎩BOsMU$ś)9|mxϠ{먻җWyr\ʓ=Mg5ưȧv^Vo!uyy;oֳ3ggDz՚<@R:r#ɀ:[#<<(.pnǐJO{կe2ޤM_). ./xު!i\r3:nTề@~ @ oI2@= @ )?@Iḓ3{@	2r;Z0?,d¿3/קVO/pd.,&j/
)
aqeU,>űN$ b"Qs<\= !2
QKɕs?ٙo	%"3_M{MMsM)j]JV]0
xG	r.6)x@èO;EZ{ѺA[Uj᩾?
߃'GW_PK(e  	  PK  ]W            3   ch/qos/logback/classic/model/ContextNameModel.classQNP=
|/4 mtBblTr#>b[St#Q??#$NKML%&=ܙ=(H )C!4ÆQO5׻B0D$mr)#ð'=Vw~ *(L6wECm.vm,}'\Mzck!O@or'Rڧy:`DaFj	LLkN:(1<u#2j]RN##}o8h	1&Q _,)HӱPE%ȧ6`!dlzXDl.0O^
.w	e^!_1g3C~F¯OPC?*PKK(in    PK  ]W            -   ch/qos/logback/classic/model/LevelModel.classT]sD=J|ڦNSԖC-PIHb)d+VS`~Z&g
^yW{w?&>41^yNw\ㅑtzW2pv*~rK S
c7}/4ք3QFs6ji,1/;tXh}g/~C%XeB׍kM/
!>H/1q
\ },U<qtTW-\Kn@ruBg&JXXۗɶJ`Z;JUZ&-Ա!0s{f?NܾG[ՠO|7h(v	@_AoMz4yA#ON{zq}zM>?q
z	0=Sxqei@a{=M2G2	;/ä+93{	Ӛ+?'vs5	ko\wrZ29|
>s1ď:׼>4:Wk7&Y5=):ջ¯0c1	|aN_o?`0퍟03fIY !ܗ4!4Un-],晒g$sV
hejޮfӋĔ5Ci5זڤ\]F+&=_*tt?=K_n
=\7ʉi.PQO/NiǮ\Ȯ̑}6>PS|oh69tsVlUk'd9#(B{uWvc*=AmAQ/PK's;e    PK  ]W            =   ch/qos/logback/classic/model/LoggerContextListenerModel.classJ@ۦVk "H1HKED/j6.u5ݵI> $Nbzٙ3}x~Pb
D0҈!P/̦LGkܾ2m
υcuZ+ dH%]ha@;-]/|KzP
k@40iao+q$n+Cf
YĐ+S':1Ƀ~;-k{(HcXRV&^s(Mu8U4I?{6O?ߪԱnؗKo^e<0N>KQ0L$eL|lJdd_`i"u-Y#=|{5o#isC*'PKG  /  PK  ]W            .   ch/qos/logback/classic/model/LoggerModel.classV[WULC	)6$(lKojXL:3/<ԵlKW]|vӋY+s.;g?~p$zQUCa(<݂iWzj;дk,̋'Ca,C$;YQ`vcLuj +:w$8	-*WpaȖ_8Y%x򚾡Lݪ41zQXW1(b&R1,vzfxƆ=Lb eHm{Z\]U!QޜHavrG(YLbx]3^3-/H|ԇ#*Qᦾl{
A3-\E	q/="<]rZy$>1#m{Fa(R.OQ8q'pZu l]0=p4"ଊ"QqEe%Y*e0E|S.wݬp5lVN-zQny-Q~ˆU,髦]%?:yu?^|*^
)ג⾘eB1Y[ۙ
M^Z	}i9Jn${umEt4[AqC:7Ǥf*bHjGP#7ۖG|*ke{GxcWNAva8fpFD[sE\[k57*C/;,nv?W+hnЍ]@ڰy:_㛝
tfrwlVe21;{]馩^-YwU]#oDUpզT[ct	`ЪIo`0˱l]Fϋ*h~9z0.S
pWd p4Y@YB.|W%o+PsS[H~ƾ'cŘy6$",Ҙd2aeN̮J'(_)n7c!3|r %kQx.O)&4aKCUR\F%&r*B8t7)`@d1Hl(D2D.f%D"uu
'8$:@7;H
tH+=pAa&RHٙFW,GDrT\[ОbN4I`V:
EH7QQ\ OԵ\ĢC,){Sb\pA28"rDD4)93(xZ w2.Uv9]ّF
<Q#/ҫiyDYޣ'-C]iB,}kFUI0	#PK&PG    PK  ]W            0   ch/qos/logback/classic/model/ReceiverModel.classKKQWGiAQڴ(P\Z^KhPm}hPfQmι{yz{ FB!k4:mpz[S/y!CxSZbfsa#/!"zf<86oX-C0n0aKnօHeUl!QR~M͎=/V":W%jvC؇aR&]UTARsa(Mn$_Qm?Sr`_L I>EQ L&;E<#n|4ٰLcl/,k޲="=]|ϧg4El܇	ToPK߷t    PK  ]W            2   ch/qos/logback/classic/model/RootLoggerModel.classT[oE=_c6sK[4MU҂B4⤨XoGtw]~OS@xTBYrq,J<39p B\CIY?q}v;m|'m
5
$W,
n	ĊV
iAmeF4NGz!A)T74h#߶y'Pl"y%|BC	[>U[SC
7r:U`ZN	߭JpZ {ޒfMᜆ<{eG@\_6R]eps|3lBN~Ap:2)#fUɺX
OEmܔ?0\aשWfҳ%=rkX
Yad˽-=ѰnKSmKU($A6xеxUE̽iXXۍ~s;jFǊZlڦpQ''M1uz0
=o؉.>?'gn3庥 36,tgZo㸁Vu?rx)}O۲<L#p=%zG\
ͻkc3Y%
G9ǧUt΂sszc2<eZ? j|,i _8O
E[yR}dʋ`WJ"dpK!>4U_7p38垒'IA!Xjhej\9&-.~ԁdhJ̇12Z	/dgWjv6ߍØ|7^\1ˡyr^Ui_|ENʏHw˕}G"[Å
?EvCj%A7%Ec&niLVmY:P<UYMF{4Xܐ`=?GUK'1PK  o  PK  ]W            F   ch/qos/logback/classic/model/processor/ConfigurationModelHandler.classVSU.IX>}L_(jxH Zf,[6-VV[oU'0vo77Q(U'3s
|/!ůnܴUY;a-S,
jjNm/ت溶SDT91Twu3DcJnzMSBۘj#6kyGZ5 !)T9@
3ԕ3Z:P;h=Ì8̠f4^׼Ԃi1Ǧol,yUM)1,||*{d<C-'x`ư3V|/I/ 2to9kC'h`OX!qHs8L\H4GlSLG(y14w&mjE1$S
ɲErx-2Z9=5]
q	dXkytt#$ߢxdI]a"ÉJTK^ލrF]
9%ޓj=N^`]XTxIy=e8)yY~Lf߲ɐj*rbB):yA$dcRXRVJUO3xn]q=EGd89΋좌RI)	SH3\2F0e 陦.H1q[J2qB+y.7I&ȯɘ?:(Y]h.Cx- Nueq[bwxS)	F٤@ڡ!5\R41M(|tB,fD1jf
0SBV2:!GR]6K4Uc;y_s2?>4LN0
eǰ=iXH>֜	kIVsJq^{s9\[g9k5ÿʜ>2@aOl2{gKyWILy0e,(zMslQ9PՉ	'ZԲ?1!.Bm<\^U&q#,Y6CFV]ms*CE!u~Xɕ
Jr=n]YwRvQ[ذp.ˌ[
hTMcӣnTяf[{@*qpih	]'#U:
>Dpy?q5PA 1iݏw.q6z;|ay="K6Suj
k}y$-aG?u-m.Y}4E?Hވ?|B8;%k#\!-!y:U]CLLsELuH)(.=St`*^ԡa$Dp~(}ǠעO-L.ǋZĽ}|>$]z>D4Q	>5>'6o_KRWѪE[F;Sp<&Xm`s8S~R;.""Jѕأ"*ڱ_S>Oh
S'*Dۗpg}*
E|PK4N

  +  PK  ]W            J   ch/qos/logback/classic/model/processor/ConfigurationModelHandlerFull.classWw-{d1l",[(PJMƶ,KP:=Ƀ3bfdM$M龦KMdl4-m9B'ɶ1{뽹w <4QAHE¸nL&K<HL99n%cpsDcB}ӱ	Yeh>bڦAkK/\\e}TAJL,+`
ȐXrvng}2ぶ}ZOX]HЖi#،-*VA-U\2On徔W+{~m@!10AKi%B	nG֛^@tA΄()-G*v	9RX"T&[*QU#`Ю {^Ns&xd\en|rw48$(.JW}H(xR~`8$ve]16=6jYJ3t#+Oyw|G2)J-ŧEky{5ҿ1AZrrͣi&s-|țC*Ձkz.7
App 54{>ú7aƶQYDxܯ"^2ӺU%18~~PjD%U|HS$'<_}OXRqfm;1 bAnf)6T_1w)*MYD0C*fؖ7]U"8V`)*DTk:9VigpaK'sTPj|_g$Mz&s*[ NŇqO|&  %z(QypyPAyϻ<7-D<'[`₂IasP[dPRt*;2.[5zr*\*r3z'<7-xdŻO.*ɒO-һb^js1jEG%+%WE8S-%ՔeneST'v-#q)|.FY
>#+TOByagxu.IEω<N8^"( Ӧ3q[J1tkTwM'L2ѪQOSzkwõOE+x-AU4SAUg\թR?}|Wwr'PL0<䭘ۉxMє"
W3ZIU{oq,)sԫfk7dWgҕb-Vď
lzQU@30H}Wb[	%kq*\uJ0aתO!|W/pyadM1b&5x"@caEo:8VRO3m,;Q!2}_[Sm^Պ1[TN:$7qmV{46BQa}Ʃ'0&*VfmmlƟ"3Q1Gк iO;ƕ2!>^_\㫄+ {iǙ,WmuE]}-+k"OԔmsWܡo5NJ_b줆 	:Jb91vV
"=#rI܏/j[
_W$fI<ZU|ꬂ6\g'j W_7<o[V]R7Bgw:)cS]G:xތݳ[j5E$@qOϠ9,85B2NM,o3BbxLx+5\/]bͱpqjݖ2|ɽepCb.@VzvG#[,: z4HG~<G})hu}"Cu !^}(fh^	V:}
&i7]\#\O^E?YK4"}{1~Bj~Jw3UrtٌpX_&)Q
&zd>yysλ彙Re&9O:tVW$ERW`H|!\)q@B(ێEh?7׋a2 ɸMnmYU&#DPKd˃    PK  ]W            D   ch/qos/logback/classic/model/processor/ContextNameModelHandler.classVmWG,	(*y1VS
6km'1YYv݉s=7?lV4vgg>_ >H"6Q1Z8\vƒȒp2UOZY߷[r}_][eRSfUⱚ4ΐm8mPp:c&ah-'D.t3tZ'`8?5r<-'q=Ι8MDiMzUO(l*b~{rp&{@}&ѱv "PWUv⢉2Tʹ$Åf66q	)ZoD
WF1f`Ą1K6.å}9eUf6ֵ0=`3e$٦-ɘx3%+'=tk'EGQe*#Cwvzm(
=Гw6g3*p󐓧[.s.EĿLMO ɼIfĶ{TBZ -c8v:	(eG:XhYWJͭ>E:-(HAvű`q7!?)
!.wIJ5^
<mcX'u\ɽ|}_1\?bܛO\Y,jRh
$eIJ+WׄȒ*hA(ER,Tf%S[~;e[R2`
!;m
#}[JzoXWYK]69	*t)>z,
)ls]MPȉI5@y5a:#п(􏄞Wzu<=)"ɠ]J:
%;H_k!
ğ0#uxX1M5KzF[O7 1á&K}fH/xo$gfwa\4}I$E/0uL1hŕD{)L2vz9C0h|#t@d)"KR[rn
IQ"tȑ "8f0pLNX/iׁ	lлZy?%e	EPKa  
  PK  ]W            >   ch/qos/logback/classic/model/processor/LevelModelHandler.classVkSW~$WHZՂBz-
Xes˞؛moi~itL~o}fE$!t,>圿yAA
C1)ܔ%rӺ12SsBXAD(ÑJr"˭Tw]Fng-.g3hmJȜǗ:İIb30Xmke&3|[+2(=8VzR[TU\M۰]пw{byǦAm9}QOYK
p/#r9D*ah>Kzߩ`e5[xڌig5]|	M4okkbFK(H4ʮ1-q٭{z6 m{c9JMMثb^#psXЪbdnME;a0+Y*'EP=?4:C7R
xV,薛ٔA+u=#+Lh5>66þJwfhRFC$x,h3	CeRrJФ)|/ɝnpSN_{˛YYHk
*qaW5vsH鰊s8OD |븷&\PqRvu1bȽEY`c3
*
Y8b;yNjUӛ]}4}*źz}5+*m*.Y5棅iLQa֔rCެI>º#lsA 
2c9]pBIl!7kL5H6Q9(ae8^7al+8rIz~cbVF%""_>P Qd&Ѝ)dQ5=k?+V~"^c5= a<!=7_	J.+E03dUɗ-ey5!
MƲ.Bx͊,]&WIpY>|WZhڋb&ذnx¡Z9ƒ#nKFB@[KpVW`Q}*u˚0=jڶw'ahݐ
K:+uW{!߮ %5b&ΡMɎGM5nA-}w 8iu5qomC."9U;bגP˲ʈIb:_i:@Τ.Kxj%;t}0[R:^GѮ?tERĮ]OJzOHDh)@H(Eta3ď&JMOH$BhHʯ8CO&Ro1F2Pĕ2z-~
 
;e؄N
Hqxp8LXEχ`rJq9a܁Lg6aJ<yܤsHc,]G4N"7,KDlSDE4GU|Tևdc?	6uv~+h5HPK  
  PK  ]W            V   ch/qos/logback/classic/model/processor/LogbackClassicDefaultNestedComponentRules.classV[SF2MB{H$5.E-4.qL.bCJzky1YrW2SoͤSf?|tiw={Y00`$Se\]1&L[
B=,Ɓf8RhrY!+B9W p]4<!m=4(,TD/+M['
)Tvla{hP`X| I.ƻD8'f{yiUؓm~'
Q_`Pm8(xaOuӍo0zY5-҇ܪpϑ+:DTpaݼX[!MIR¸
މ]\ar準}ҾQpr?>udT?IB]c8♖Wu
Oi&#.Igw'`NR3xa|YZ#3Ka2:Ͳ0cс,Lo,Mrq~[5Z8>$8E"!C2PP%fyISk+{cd8|Íh4;tɩQ{ MunP]T< w<Yq>nQm^MكN#
>e5ZP,CFE
nF[:[[T)؎	>g JtXZY:p]Gjzm?UlV0íqMmмɿe_aa<A6G;EʚE{ޱp1IQԤiJ)/d-BT1ťgR]6OZ5>IK'(a`-wU儹%:iY\&n_Ưi5h42OŎ"G0#58ꇫ2:WbLQϫֱuMmS.B	|	u?9Z~ft/"74uwyGxo5m5V3:s_q}p_'|KMKpB.+^[ɺo6'
n8HH %L6%֐-{G3Voo&/`6ӪFB&5sl=O6cޥPKϨp  
  PK  ]W            N   ch/qos/logback/classic/model/processor/LoggerContextListenerModelHandler.classWWU<YeQѨՔ%X5M#Qe-A(j}#ƙY߿g<'/t~NdY̛;~޽{}o LP!ub𳶘7̩)<-'L)5|Pr!Ֆ'_ӣ^CBGtm-sɔ919ɽ&gwr=OЈJ,=U'X6FӑD>Ƀ>i7Jtqچ3<˙N4l ZUbXvX+^mmKn0ܶ:}*2J%H9IjBx7x2čB!"hEc:bC=W QC=5XrGJ3.ixa2]rd)udN7T e:tt"˰rpxTzDivWr3бO2ئͰs	JQVYD/o.ѱW.Oэ$v~1ڈ\N&IxFƒ1	41+(Hb;WF6L
 _4$¤YTչ)z1nP89/8c#EJN*@.&ԍb0R((AES*^Hqó-u\chfؼ\nr6mJ	11Z].h/0<2,Ae74jY$p
gt9K;ero׻>GaMrx\ވC2'L5<K>GXP|yp],AU&MqTw7Ze$7WY&Á;=5-eWW^Pj[E&#({DM~X+
I؇G|p)\BԔ$ǵʊV⊐7R
g&dޑ\h]fp::ڻըkB.o(` J:w1â%m[W\z3!E#eۙ.Ofg/m9l֪-	}lT{6=N[
XL:|B×r0-缘~v0(R	愘*U7E#Tۥ}m[l CaU˩>\+Ui)A :YZK;7}"դ#t2257Pf6I}-䁋ӆr
AEXd'E-aR:Z߁W P1(;	AҢ&x7&##H\`ɯ<qY튵~$Ù}
-YbX5#~ٴvz;v͠Inc|3Zv)>,\ƮZ@K, _G/
l!~ЄVqJ^;tw$`7v"g/<eҐP|%E:+rTybpɃLUbOolШ5&AY_ߛs|O螧ȵnb0!yz&94ױ3CN:&&'${q*Eeʢd<v
{ym .c4ay@&h>|(86qIUm,5PrA5xO@*|Jc|MPKw  |  PK  ]W            ?   ch/qos/logback/classic/model/processor/LoggerModelHandler.classWkwI`@ 2('d9f,13r~#Mh6mS>&ve]_/7Ym ;ZK}s?KxK2О\݌iLiLv%Ѭo[Y@2
d$ӛ):v^w]A*sFsu	ex'%0+^_x	l(h655LfYiXlXcILn|$U+ph
P3ɶ%mA˘5ÚKH)x;$4ICt):ym,HhtKS.
1/8ۥ`7p*ȮL+a=&aq@B<T&%
]\]Dm
0=(@t*8$DtqXGqD0_KafFA,
[M+30_Jh	sb2cu(78p~hlzjpH\LwhƢ~|}"Y3u=Ϗ8-a_/nϼqcpnlVWMA:m;7VxUeٞ:ըխb(8ȱV('$ɐEks:3%y7n$U0, eYv'0<K#nH	{ׄ*=ByN8&$'Ns<P)~A$.hA3K82uI{a1		1XMf/*D71O
g,Uy=mfIbjc20#V3+-T$	\R0ŭHD+,6Œ;[bMT	.<!sUU4OE޼J5o&40T)/*JD	[JS3MIffk!ރ7k[
"}<1_B'7Bru3l73bv<K$<* ƌy%ܜZ/q>+;IB8:{lfl_"*2>؆e%7Os|ڰ42V9$o^sefݪZ]'1Zz֊>q{_u2~r(krخ7dv=2~1WKDb.9y!t[onBMR8{v
&O8ؠzA(œ!ֻ{jo񔻁xfJ-*	â۾Om޳Z@/+Ej*)(XgIp:Z *lǥV@XOwֶJŐNw/űE=DB@k9jx)CŌ3wSKq;(KQE{!>
qCF~~"i=E	!%y
[/j~6:A.k|^g9t8,R"B6]Rع*"pN@u]h4$ׂ>RU_k:Q8;t͹ή2elλP{өT}pP̦l4x1y4-hJOq(yRII'ϔMO"K8G܃RxX9%|&)"}B<Mɑ;Q%|KS<1-$Ʃq`'vvdpoQɳKFƙчx3xbzz&Yo37bZO<{\6
+.U^9W
_v22Ze\,G+l):]I4{I_Gd˹.Aٛ-Ϙw1"x%7ՉeJ9.*KGs;#`>G.cN4HNS#FNO@N3ք	4>@7"Ŀ?D?R7xהpPKq  :  PK  ]W            A   ch/qos/logback/classic/model/processor/ReceiverModelHandler.classWkWG~6(jxU(*BbAP.!Y	~rNVidvgy/3? aTZA@E5{L&VzRӧČلX:w]I^Leөa^CBezlUbH>l\ЗltܘNa(:xEEk^SX%Lr}uSsmVKd53L'xTFrrMٞa<ksps=c{s
MK'BX˰y gtLz3ɗؔĜm1A4giTX2dQ&42(Yeal[Ulvo̱i`!~$^ߌm94QΓSJ*kgiN`^F+U
q3,v.c{*s/xb2 Q31|Os%1RdɌLV\*^
B,Ö\oERAQaKDCai;fJ;V=x}Y2# ELEPUVa$X,8^úe<TbH|zb.
%ΑYr"y1O<M>3-~! 1 OŸd
H!Ȱ$Sx2bLxRk[e[NR*/b^M>t1MKs4
^Uΰ0YL]HSkN/
b
i #y!EAcXo|073ɝHkQ1sa2ery8>I[t>Y:^|Ɣ}=.Y^GfA8^D0E)i)[ݰ65/4GZ,"ɓWRu~.◩AiCL5(СH@:RFOҦGâ_hq0|،H-rނZ\hR
>ZVy!FHXDk;-s=GRnӑrtQ[b%܃n$Zcgdhrٔ섺ÅVָmE
|;q_cyÜyAtrNt}}>~˚Ɋ'΢#Ueμ]Z6;lx>䎬*NrU*R]s>U Gto t=uH&rl^r.hoid9[abfU=(ۨ'Kj% ȂM	],VTGI]Ǖ60C=XCsܕ`
G.
-@@<KdG3
#vу"yA	!Wv`x4x}΋
8J
=t{Q}XEE)<(@Ha&c}Vw,&zq' D6bhϖ
^#9$x#7IsޯD?hTVG7]
yoAJܥ߀ؓo|K@GNq&x)H	w\_Լ!Nb$BF=]wptV<'u&(Kq"Î"Îzʥ_[
>T¨4S4?_{OPKo!,ʄ    PK  ]W            C   ch/qos/logback/classic/model/processor/RootLoggerModelHandler.classWYSGVl>	GƆ#vdiͲ;}'9k\cSsQR.CPbgу jP!QR2(L^<3/
8snfLvyӦmdh%AaK~Kf;!!ct֖yf~]BQQ,rwepʹ\W h*,Nh"|(Uyhpp(vhaU!rybb2fъEfpc`d,.fr5bs]@~IK?%qb*<_CsG	AN)6]7#$\u^yƣT+FgáJҴ2
3-G	Yoze˚pyaWhTHp\	ϣu#y4)§[&C<NOCVi3XOUk48eϼ1I!MY'OR9c(Q(سb5؍:.a[+}3x/x	앂Y"⛏Kʜ%7ጢ1Dcpm3cZ,D6/pwҘhqT
kpMFd(F7ן_<R?Veqm:3pG8[TVͦ?HY
YvIZ&;@ђωPY-뜢f뢭`WN5г5=Y+7%%շiQ3Pe]w $1	NbV=Pf8Ų42:hx{U\Z(y~T*{r#ՓqY/hbr\JH٤ڡI),MxRAFp;DJ^P3bm>g>Wm:Y<cbz¥뇕}44(B̕q+_eLUm*#UT
kڢ7oi	U7
mw:P?tkmtv,ͶTX.;6d	Uz^AxH`q\!h?)]ICː*.wTޤo
ޕGmcZVD>}q̆W>hOID.⩻hKw/EkЮG}|`ȵ%zZ?J i]$!bumN:4Ѕqd0E#*aJ{PDhQNPO70Gdyք!HrpbGРYGc@3aEh?"r'nW4}/+C>2dqE=NRe"YJTT!zyS@m_jw9|j1y_?ė5Wߡ?PK
U  
  PK  ]W            >   ch/qos/logback/classic/model/util/DefaultClassNameHelper.classUmSU~nޖ,}J+[ kLRjT|Ml/N;Cs:8ܛyka&{sysΞ?`5!D4DcHle4j\eW=ظ0	`j):1W[vbTUp]UnMǮr׵~?~})޴-w:ˋJaT&<	LK/$4" <DFV;qoZ\8U
gqlZg"wn̊5AjIE/+Hjx.sAqWPL}н5Cqlʷg@O.c@*8l n?d,)
id"
>{OF}dt;5EᮊpMu+/&F+Ez2~\3*)h/Ȓ瘍Z^W_|p޴̪I*rA*	
7ĬNכC7hfcvF;y!(WʢĔۘnXQ1􁆻/
XW/,~ =&E
s2Ju'uP"N}sO-YkM@GYēS?NQN/
wF
jXKc}x&;S"]lFY%b*yd;k4<qƍL(P'&{ۖ!x:vHdN1GS0"~Ct0`g&ZH#?KOhU4TXmo%oz:3L=OCq)`y7I'#d0h/*,CClБ4k2l @$
 җcRVHD9
.C8$6J6G8l㡟3"_B-\4ma4K~Gg2B~'	唤4&$d#[>!M"!hSQR%ǐ m/{R nЧ<{	ʷ4--t/-5
iP *)]6wREhJRDҗB4MPt+蕿q
<JePK7k    PK  ]W            H   ch/qos/logback/classic/net/LoggingEventPreSerializationTransformer.classUYSK% .uT%B*.UA,˧ΤZ&qC]_*'Qg&Q@H*>s'|M@~$5n{w{iK=Л-H2rVg*=Vj;Ca]%wׄM0`Y.\n+
UfK7rL^P000	{ۨkd^!-+t1̰'+m\L0C5w{YtI!Cpc5*w~(
i&;Hc<vrY6q'
EaM|d~ "ܓ(K'*!]40'
DёI_QU)F"!SR99ҾuاW$f;uhd	`,k2-J|Do+z^ZK,]F@XvmԺt)#d.w6bJ)Cz30i?l*Т:K'0c:nF_S/7'eؼ6'JJ6폧QqJn(r+KZ}SCNtE-Φ48Fi4wzIҿigd$'߂&ghMć8K4 s$Y4CZ/7W̿C*Hs#ҏﱛ
?>TFaz}4LuN2T6s߼!&fE2MRD "KP`D.
L5PIM,6F~PKI    PK  ]W            -   ch/qos/logback/classic/net/ReceiverBase.classUmWG~&	lbA Bh]EXZIi	Ū}9f$ktw_P/b{NTOL
wv>m^:O!t2d݊_ns2NTVPH0tO2ĳk)$e!e6~G:PΊp%J(脍^16je8,F0@Jw|l8/6OJo<$6C0IR#RǠl5DI^oD7dcXUd/8FlC1(m֕K"\
?KQud0ri56Ɛ i|<2`Y㘰1CM<1XT0ɵ."pV)%u'uʠd=(|]5m'[ܯt	W'k:;o&>6yUP	\zB+hXtH\C2nYq3Y
GU{(
;ONdDoĝW5uNQ_רLGa#F-aJCVxQbbLZD$+<mߎQQT
ymI,GIɍ4j
_rWV_^%FKݹs{Λ
'yPE)JYǖfNM>kB<3k/:"Q-4J
(bsQ[ޟЗC={Fi6@oOqd?_9z3=Ox9NM<4}1cJ(0JjnyGF;6.3M.^dY+Z?hdFA"7
`j@S
CQL+tvN"2F5Aч(bɐʴJ'W!7׿a\u" Fi$&gw20J|{}|0?PKxT    PK  ]W            -   ch/qos/logback/classic/net/SMTPAppender.classX[~,F7`DVp$a]f֙Y#IsͭMMzozjh[l{ɓ6}̰..y{f|z\{
0PB@AMɉiӎԨ<M54'd4cLU[
(ojB%B+XE`|jz I`n$1GM5kbD­PPpbgtVuL.ċ5ʹv6#B@[	6F̲L+((jkV Ҝp}^zƅv5Wb@HM
p3N竛'3j4h±t#ŅRv-2Ze؎ R$틛\	,\?dI-&CڡM2ؐji_,K̤FeF*vNwaWtͲ=SɴΎD)W9I-h
L˴f	7-=
:4J+@֩`)3K
Ewn_AK
Tۊ/i
@\`|YUZE
ր"ݯZ4+$X;랬r⇐aHa~fvvl2LUp#4\w4˫5spybBxH	][(B	`HYUeDƴRQ;=dԳ
H0@ҝY},ñ
tFb'DCV|O"`LUݰ,mDDBJ
['Cq[JT:&Ӳ!F9adsG(͐Ӧ;3Ӛ_zґ7-ȭ\qOI*TOi[RuD-*js8/PSFr2
3k':Ync^,[DAXG4KR2M`OQF@KHq/kZ4\ϕqU'ǎc8Psi<ޮzNv


Ȅ.
[l$R]P
m ;9YChZs!UKdЙ%;R%ezՌx0a>d@{NrJ)CRzd	|FVhY|vy}ᢒa:ZRmu\Og7Rv+Aο>V=XWJ{(/_XcpݯYNzӬ'n_n2+eNd]ܾ֜w;Aif{&gq\-Ɲٝ[
4uܖLF7Uz'4T
4.,EYrg|7kQj5gT-^I73oe;8׏j6.KX8af֫2Mݦ؎f<{J fF;[=O[;*It_̷4PfolV;J-Xc5|	04=kvغ(!)p¢/0A2'I|}3
WpA~o{9/8[B_A+WճM9QktH˫X~ױUGZQ7u
Ӹ=2Ɩ,RU=6YMRkq66t_C/D">ϻHbk($>m[Zkipoܗe>|F
s:+DQW{NӇz:"­3#VH4AetA 'P!*(Y4x(9U|վ/r
>~X&||b7)ȱAY~w`u`h{n`Vb]e}GąwuzwQR!cq^vG;}-%U0[m|uq[Έm.GfhEʕӖgNeFo1<OL{ b~P0E*/3
|x+{WT\?/2RedF$#a'oH^~{p5;
?4535j\s	ͼi*Tx[g`Ӭ,ի,̶ier}Ҽ2	N,meeM1@eⶎj6i\y2B~~LH
r" Y]M''XxO))Ìn\ð'QfG,9;y>=Uu_7`ms\؝}kɫ`RmxH>.#|"~V^ჴ1|Ҝ2K5 sNnDZYx`<2	_w̪Z".G:sóW;+)~?4/PKˣr	  /  PK  ]W            2   ch/qos/logback/classic/net/SSLSocketAppender.class[OACۭ]
-W/71<p3!)d`qY)~$"Qxv
^vΜs_ LEi$HAaX0w^;Unz]!z }nJè/J%܆%۵2CB+lqa4A`YZU_·cܚ7"DȦ1 rs`{hEWIA/P/CYcavMkq%g`;x79B53XBv»?]K7$S.pD"*%3$2[^@}L1o^;Sy6Cư-˶/uty2CrkTbUY~W<;ۜTh;rJilRIN7O"jo⣁gw;턍ShFaQ+\T1׋bǴ'緄U§>΅7ɨM<~V
34>z]ýhv?򌐝"=Q*d1X'o9zEMwV $R=1ިW1"w2	q.J7	qO4EA25beZ.WGST[@~zqHt,=SO([	J]bLsu*y><gcMv21BYCZڡx PKWN  U  PK  ]W            2   ch/qos/logback/classic/net/SSLSocketReceiver.classU]SH==ƀ2**$ďaFqU7TԄvd6j)Ti[?j=YfPInnsW>~p22q I'j[vK{N(y"_$C`U{у^9a2Sqۡ6p/'%_kM?soH*2`Rv(zb~m5GM`{m&^,x"Ț^#NsEjkAMI󘯈DĒtM8{p#-gwl9M\cO\<iU
0B (
&F0p|d3VzQTs09(~,ɫ&:Aǉ?
`8@5gzuϸibZ
)yM0MCkWk3&n6C_\.tm/+rcwITcX!W¾VQ(BJATH1rP<Z]YÐw#U=5v%K$lpj[7l/jjl݇<-s<-ÐkU},AwXon籪ƞg0EkFu K2ӯizsΔ{fh3Vx@.އ;6mq3
MYt/kUS8kg#`+M1Ju}EfAd
:`_HS`֒Ve^:-~K,zrkRI# Lk9T~C?'gʢկÜAoymedC%şԵ#n{ iޜlxPI[f^yPKtĒg  L  PK  ]W            6   ch/qos/logback/classic/net/SimpleSSLSocketServer.classUmSX=KAmY[]PA-L#~!kԛ3Yfv?:?j)2~HK{y}kxp0^Κe2l
6"4LRiL~%BSM!uRitн/[np>WڴϪ:Ƽ(h1CVb4~@0B" f
	#Ҫ{<KBJБ4Vp+I;{*kP'߶'Be
?
[{ޖ-jW{0L`Y0++źAT"G	'rIk'\\/EkO,iUSԥxu!'9Τqx[2_Ű阮ٯךu9tuѲC_QO) gB.^"v&1r@۠^ԋiKS- IU6K<Y}_%*V5!*	o[^ْN,lx[4Cn@Ԯ^!لÝf4,HM t7Ɗo;p"P݈sIZ[fZ䲆Gɑ0qd+@7Ţ6p$
\h՛{)23<ᖸ2TF;v*unYtc@Po]umh
}#l30nG:.GqG8ӥ3Gǧ?oFjnSSq{/JNg$gSrzϘ<WH&Q,q&8+Qa10xx!SHC~z\
P3[Uؤhûv	Q'PKǦn    PK  ]W            3   ch/qos/logback/classic/net/SimpleSocketServer.classYxu1 $Ba0/i%X`$J`#1jG(M&Mvhڴyк1cmҴI4qᾒPwFQs9s=?. n>%C\?uک#TL*sDw t#NxG
2n	V4&GD%ہښ*
؞tk	f7NQS0o^\R2A٠o9Hui`٘#w]s8to
\	:Ƭ-hlJFm30Wt?n.pJy&c:z3}l5&"m2.4e}&	6Shb	҇~`{Q/
J4?(liѸf*P`x(^HV]WH`5FulMXCT@U0S3dMgHf|PLL rӎNC6!(ɦ˧;ŷĝ\7P^bb+,<i/,X/)q~g,it:Mt)ҙ}#IQlJNwl0PTnaGj}g<nʙ	>@J䌱C3^WV^Z!nShqdZƓкa8h":R3VR4;p1vӧk?~
,ggz
\NsJe3<[
AY*Gfݔw`O%s|
.<`1C<bBU08_3;\6-R;Qy;c稝tv2syN*h P胓*~qH_/	(*j嘩Hr*<(z 3)M\9zjߴ
_ï1jcjшyģ0u$򸀡EMAeo	w5$b9n4~[˸
ϿZ
~'8䦭^c0lI}([s~;X{rK^;e-Ja~U<Ek=j[$!Y|Q,d㣂:z>&&DVI2s̆Ū
3ğ*󝰮0NRO⬁Ot3ƊF95Z׉x3{7&)%a.F\R1DVI%gBAy7
q?.xFa}7;`6P+,O3k)첢:f'vw0lv咊_KZӝv%&JApejVMktHgDǎ
S+q^S[EGVK:^ZGTd~GΊMo6^f
OB=d]m~&dѽA
-]l
sR`[W*5?^jg4}_Ljblw*z*i]Qi`ߘ|	ec
H=%өOqx
.R'a
lr8wR|MθF?R49
lN{GJp
?rS}kReJTSؐiL^EfN|`UQSfwgv;R4d&Ija׳sTTIVT^R\S|D*bzNP
,TN#{1z*UC1}|Pm`W9tQ
S
 eg^FG1^ X'F'Uqw8'yxۚ	w@`x?gcAcG~b`Djo9+NӑiDR{]b';x73ԏZq=
b#W8{B))a~tӢ6v!wjo)(Uq"}r6UZC-@p{Xaw9]iOɟFm
&dyJA`dMBmL,!?	3ٺA/V?>W)
wn=Щ{EBv889Unؗv@MR\jڭȲ׷G,j)і|<lko5DF9{VՔ[אxՑWw&w=D9^7Ǌ33"
fY_t#t1*4g4v;fp0;ߐ)jT\x}R"EH0/|֩_Mwp,Q?s=
"\,|*eȵ%|I|g5R>؈rle!,4rc?eT{kJno~#\z0OzQ[c
hi-8ZʆX)
ĩjlAm]$MAwʻ­I„)U	X=UBNK=^QBU(DH%K^C
GE`e;(cc<dM2^z7/ᖞƛa}|9l,y>n^iXK3[qvF
զYlyUgi"k4ԥ'Rooc%CHvr2Sx[8?PKCnޥ2!BK-B0/F$(w%<W?_nq956.WJiTsl(h-~Qf{mJQw4j\"O[jDY{S#҇y	sMy|OVc>?T2 LX<*Pt`N5avDE?@zÃix
oru<Ozw݅^EnU-nd-c	Lu2jIi嬄KyF~,c5.7 ᛁAѳUpOPa0ϫr57bƅ![XezJ=7x|`kE0R2~nTe@mpLK]H{9!q>j]N#8bxzGԉӤg_5<pg2]SևP
F6(+<;q?N|i)푬DdkRng4*Ĉl0tf1_Bfа2=)#@D"iXI_ni-VwIeoGdmOR|Uг8<E^i&zTƚ4.ki?Β|"3}>1<]S;Gir
cA+2QJ{
:ͼ|-]#n+YͣEgLJ߼:3omљ"{c6WKCujqΈ-tSEW˕cA1/a$o}~_/KD__)|5iCTkSCb:5l/BEwEłO'D78ɐ^ذbNUXNϿTʯduifǇLyH/J-xdJ΄	5G-> bC75<oܥ2u>2ҫC$u=eVg|Hf1j,(Xn}
-jCGg5CIJ'%DtфZªMwܧ=bk9(iEPKE    PK  ]W            /   ch/qos/logback/classic/net/SocketAcceptor.classON0GC bgT#BVcjlp	v*w%sl!c)ϜinlV;ZǄpa05{
vYqbBQԊ7BGo!IȻn+
ܩ8ת!pZCȧuBNT")P6.aST_A/q0{߆	7x#Hs_PK     PK  ]W            /   ch/qos/logback/classic/net/SocketAppender.classYOQ+-Uiڐ hBRIїLg-~51>g2,%̹s?Xr!㈤E-G5VkfB5T&/z#̦b%CX@"d
H1dO8NsFtS3M
C؛\r34Ȥ0QVjt@a%d5dߔW
nԪ5
H<3DN]S$qR>/-ֹRL;n$na!ӱY-M8עr/bm1WIL#̐-ˮ-u+]"CdjnvC50H2Z4n9Y/]aqlDT򚻼gTooyrlElJJR1*kvWL=5De-լp6%y~=׳=EUkk&z$຋YF!L}:F7ЮDrFs2wCӟ10}$sK1O2jMTٵ<G$?0Ņ<XuM8w22biZ*HUOO( 4vyy>c1)VF|J/Mxg,$r?HǍS (
EIݔz|	Gc.hss1KPK.  {  PK  ]W            +   ch/qos/logback/classic/net/SocketNode.classW_,a6!ILTvl(&$&@
ju=ef3;Xm^f=R{
jЇ>K~ϙ],˖g9wsC l@@5k%23?'S@Cc'BMc0IM%λDƝRӉTT~bMMKMKHeܜL1EaF&`4̈f'H"gd3rKj2
! %5UX+&vb@cŽI/?N{2VӼ4{yՐ洞5q0Ry
qZ'IupT}hhY&j	jM8[wjM@
)?tќbґif;=l=in-&N'&'e ʽL[gٕ%fLStTkUhT3хTmYklV|3Yv)Mt[rp2y94p*r]d%FW@O%C&ew9r\"fb|H!Qz5^zə)ϝ3Ϛ"4VTVk@Rv1Q	|fd%eu[0IU-T;AçM|C9+3ֵ6eb)VP;({)jS-
)+9J'-=}MUƢ/4L)szz4in+?9G@vDU; (COC	6c+Pg;\|3g+jko*r7:*7/e*CM
cݫxN #<,uDG<`/⋴rMH\ϺN0^2uKV	R_fvtq}mYK&^SY]7gyjkz@I["x4𦉷Tf5Vܳf_emQPa
ubdἣsFm#Ǫb}];6JuQ1i;r0?3.3MI8jyz/S6s:};ڜ;TUˀYMfHVKxLesJ^a'+6[rgq^JqENxuYO\NW"e]F}7*#[UE*Y Dc=Epb&qmg֝Řh][DtFZ;V\*OnE,#g{:eۺD5ڠ`afe88Cq++r+MCX೎}>7	a %Kh-ak%쎷/a_)\%	?n<@	Om88(!N~Dx?O)Q)%6R#ӟ>N;MUl-5<p
Gpt{<8y=T@Nir;8hCcD;(@O?Wc=bӹ28x~i׌fAČӗ[U}iqhyJ%z}!mV<&N<J>?:9ӇQ?ƈ;Ar"a|r	8#&+|iS'.+~<	Ft,Pܽ1=D4nH_jO8$˗K?PO*]FbɁGąv^W鯯6MG$O$Cm1HCyB;ǐט-gBĜcVvAKh]|LWu17lWoكYlg@^7u=QJz
cE!FCӧ!ƞ zA?ғ\PK    PK  ]W            /   ch/qos/logback/classic/net/SocketReceiver.classY	xW}=]#i9>bieI61-YZv,Y1V3Y9*P9
RBRnp NbG.RB)J6\(%ޛҮ"KO*vPR
e:Q!!6qH8ǍxG,aRV6f̴&Mw2*vX(mnP)27*h騆.Ĉ̤ض,&L'	~	w	Wt\uSNXOp̱GѴk#v>M8lnLp2aR𤕲%;;2Svsf}̛HP;f;$iшF<뺎+9z4:=1蹖=2,_F,{]Q1BmcS|rpTꗫ@R*i:nf}LSM<׈yǻIӎnkV:q@SjvM
P}H!FuIqu "bM5lX:dI[znԲѮƸaS3lo..`R=^&*_ G*r;?.؎N_Jٗɩ雼+x:^Tڳ=	'eⓀϷ-KL?sߥ)=E[xh!& M'Hu:x59XKi{|]̀8@+OڮNzf\;&ubH&FLͅ#9+etI:5tɞ
T.c*K{,*Vq 
qR_qOR:4	ewqR 4zCJ%
/6;iha!w1"*<esc/5<fH8ΜOX}?\aKy2O5K#@+b|2saa&W_`dҤ1LQ	[<zf:ހ755uEsQ̖j-:ފ<9])Wľ
f,M*;iX77b(G;t
LزޥOXkgsa=F"aO/.(q<AexaYU.
M3Q.ץ%i2MYYIΕ$ACoT/S@<X5ݎ=7m3.SrN=v Әl>w!&6bK̨f9y9G~T -7C>S:H{.̀fYHt]çJZTa|V#U?[\Ћ/8GAG`uI8i9iˆ4qAE\VזAju񊫨wOxfgmEV/f8:w_T*=_sł8,e$]fCe^_G:_n]?i$YXj'r<+'?V4|~-H
8i;g
<[? ے9gۚ2a/2hyQg5|wY{9bެÿ޽
5F;ى<?Uj'Z@vu=0tg@oPc{G{Xh`Fm/+;/;X3{xbIZ98nrp20=
גb7f1QZ܃.YTƜt">.tICߔH!S,{SYD>#Q؃tKt]a`iXnY(K1f9Yl˳:,
S>*zI/hT.[tO,<.|FL!%I4;rcq@K)Ѣ
K9a9'8}3<\u/Uy$j*4kG2rQ4pdR5Y_)qǥРvcf%5i>kۥ oxcFr9TXŤK)>tEsFâSt+S(lrOX)bdmsFR7c9כier%@Dˈ1Gmnzx9VۙBTM!YL7-<oٓθ>+H)<B@P~QO:x:YCJ 0hyTUQo2kgMlX 5:4lZ%j6*,?C \>nR܂p_W~%?wI_󿡖0^J'z<DiT= W}YkCBOeompKwDaio"R_;z7]	ޗ+N#KoƊ姱&"A.`46A>z	m FF&)_f`[AY#`g]hR꽐vRWҎQn*}XWa
^MF	y; z0H}x}
h7ut{he7п(ouYtF6|o{yƫ[Ly.ik_b8G]7ݍݒ٬*ʉ<%	g%@<AeF/U3w7HcJ_vdM\AilH3/>AD#3UТfNj#-X-a-Ta$vހ=x#M}LwmYe\SJ/*NG,P4$~mF92Hr
S Xl呋pJ1%sƕ'f;Ѐw2UR	'B=LZH'RFңw%J	k.M/Jpv8D-ewq4{&#D1nȊՠ!H8*
@)K/xo4"g
h1~,Pg4QzNDf%yʐ	MA_ȯJ,ҠE'CU3x8%cr~<>vJ,#x%|Lxx">#βe|yL̜BfGT*5<|KB0c|k!;XẒm~?'7I|M_[^Ȗ#tGY$?u8+'D>ń<Üy%3Y܉GH1x{);D!|#ǉuӸȽ'<z}\11&"̈ZWs	rh!Q𸓒^2`_%N)'.|CᯖZ`[6kVܥwin5hAx0hl7~)?UiO1C}o|'jT[6*ZUeB<Ew=d}jlQ6U*Ł,ڵMbm$	<e_nW->hKMNdTMNuL~oص-j65LMywgPV*"h=i|]~dQ|j!_ue6X47I[Eh(	0i}+BkU@kiaZsIEhU+Zb*
޷JtJuI]WZu]ԵE][յM\uNIqkE*.,)PK?-    PK  ]W            /   ch/qos/logback/classic/net/SyslogAppender.classWy|f7L 	,`.X D!Y'!Y,3@(*ږ*Zmm,-j}~73l]sywΞ0;6١߫#1"-ZiIB2jr1$5+5dr)Ғ}Ѭ%dZ*z9cicUeiFCVEdLT0	WI8^I<65Ԙ0r71YT$t)(T	Wsi%vlSwtYF<(X
cYCߥ&ݱDOș
f	/(>KP`)35+cx9PܯYmj,[CTU7VA%Lݮ(T;n
x/s&uý2m4uuP,M{)7HJ7,;'CBY7J(aVHEDL#z?[wjI	
2,×HSKDu.~g嘞;-W/kmn/F=nQM 2:}7g.%n4}(UBONWbx6,Ѯvܑ#
0KKքJ&PIP_URfnBA'VJ6&-nVG<I0YG\d]8uCzDf]iNDV! XGLSm2(D"6\ٻMU6Fw
ZflqD$e,g\C&c~?rE@g66W<ڐ56dh0oJzR$ %_nQӦѸ~jT؋"D:%)[HB3M_{q#vbDj
5ŪD9E<GLʸ_<r6S~<(!oMqNvA"(z)Qŋsdsm氂wTbnvRG+{4oSE%Я~QaQ^a$6X
	M1v9}YB1	ƍked0訂cfv1W IHbzT>+b6PYЭmMk;[ֶ߲)m]Iowuj"
FZiji!}(3W3d@u3Cj!3L#%GK]zHL)!@M&ؠfy20[]L껒{{$,|F٦vmgibݙ}fr*#h<[JcE5g-y2-e
1첎ȵ"!mH$son8`s:n쨗tQqSF-'iӸgaTXz*K]qX>ʓ8Ru6Kr-l[J
ft嬃ȢGd۔Q'&SSw+BKO1M-nC̨Vhրgk6ʬG[S={-3N&!'C+Hɝܹckp	#9Cө'ct( xhQ.}-=kͿI,Se	{iR&Ck_	o@ a|SمˇLַ
5RZ3jN6F)(50~c<L䝭QxSUW|#bT#&P3,AE +h+(D!ל\'^Y%!I|TBB5IPR9cܜ%g+焽I|qS"TW=zB|v[bC-xYRqu$KrTjôG?)4t;aNqIAsC__+?65ua8PVAG`8x>T*+z`Y膆sXŀiPJ8AW8AO2e_|8
($/<Isq Ķ{1c'Sl%úX<22C̠
̠rމ&luuq,MQ~VJah81L339g63#>8wv|_zr}	/s1xn/ly Y6ںB|<R2n{
E\b%2&Y2?e$}>qeuS|a`0ePWw8PwWwZITYX%7Y?O;m-u{ni!o>M~.Sb,b̛Q]	>oձ̭_HU85vwVE<|l~6|uS9βASzo}<po+@7BMçpn1s@"ӵ'<g]m pF\z A!r%A҈#=L(5͊kaK9aj`NEű l0þWCׄ&cq$91?vZ콰fƨn QPB?`<ې)cO3i!cHnx~_vw\=%J+"PK[bn
    PK  ]W            G   ch/qos/logback/classic/net/server/HardenedLoggingEventInputStream.classUmWE~&.	)b/R5/J(5
CT=C2&K7qO ?~)z'O;,N<3s{g
|0wZ5][?Hk5 9sًP8`!\(?5U7KۼB-V
jiTҌRrWv~?8aGJFIMH$U^cpn[ (ۡ()$^,2\k;`L0DN	UX	Ӱ>Ū"CTkbOGreۺXTpŴJjMqnG-*n{pŮLI/'D0\rlr/.*t0
3\J1)g 0>	DOt_TlJ7*uw$[c?gh.Y6cw
PCcp6ք+,Ewjݦ(kН&	uVqb~̃]-~KLK8GR:&j6fIp^&@
}p4 X.ΙL`4JYƳlr9|=SwlNOb)V޶Y7g$b^VNb&E^;'Ca8sP=~v3Ek%u\ntUuI~_#ƻ
?_U[J*<^H=7th\ii?sq/tMUݬ[9U=%Ikt+GwI,5<x/|
v޽<q$Ox	._r+._sO]3܅.uiV]x_R6^<?A1&aKA*&ʘ[+7︋T_dTA'Xڱ;q*5jF}X<4"?p_rdx~gc8
C#8[l OD(dq(=bdẆ/Lҡl臚=<+ZiK7r"APK=C  F	  PK  ]W            <   ch/qos/logback/classic/net/server/RemoteAppenderClient.classu=
1F6@pia% (8dM,<#6*Z0|<+*CG2F=J8IsG$˗t0&EAzKv2>BRp%tdHo{µ#?7iF{:(|,5C2'+i)br< C5T=<͂tsB+
PKT1R8     PK  ]W            D   ch/qos/logback/classic/net/server/RemoteAppenderServerListener.classSn1=NB,M[P
FVEi)J<XfNg@(	!ҕgΙ~=T|PpEq7|0QXiBM5U/L$3#RuJ`XyLnz8POxx)#"mт)RÃo<P%<d$Nm8a.@gAL1a￢fe
۪-"A%+JH'\K{)+33%DTl`F"9)],F4paљH>}>aWݩLjJUjN@SԿ~7aT6oo-m*
s˃JfI9,;YVpC+#	NZ(Aw	3խCޏ,paX>.bLr4W	[;[Oo4@X#D9֝5\wwPKӧnD    PK  ]W            B   ch/qos/logback/classic/net/server/RemoteAppenderServerRunner.classTnP=7I&MI(Pmȣ`$CJU	& hPr!uU_aæk>
1v\@(m$3sϜ;_H i 펹㵷,i{L%e6<"WF຤kҕz]u9)}M|`ZfCrفT,29!'/c3lP#w԰l4iO˕jc@)1	^M*Ρr8p$-PIT(qs8yn{RLPUH5mbڦte"r8lٴ8OqN<&sŇ)"	S&8\Ƨa)rkm:ȴd۵4_)' OѣNh`
/HwWI4L<>tɶ@LP?w@KBT.$jmp˸V,E4Qd**#˸
	@*\|Ä92k}|/(y܍/qe&-U܋I3
8wD-ET}u
!/Z^PKTFU    PK  ]W            B   ch/qos/logback/classic/net/server/RemoteAppenderStreamClient.classWs[G֖s:NӺjV!i)qMviki#XW><-PHZohMv 383~L丌ǻ{ݳ9cx74h:Mi+t|tLێhv]  S`r2~3nzJNœ+qG?"/rIIo!t'>)tD6}MNI*o.)1=&`"ƇZhLRD'tZzYWM ~\t=In bt,h0]Yie.A(Mc4pWhDm]Q_1t6у{ve	Z]ڹztx5eJ@71
a/3pI2> б\dG90jH~

ft
az
7	Xni+S'Iś-ҾFT̘&O`G֚\Ie`8OaOmFI `;']Ekx	.,I9q_t誰tdj9QxGvhR]\Ml:!7;0ͺc8j1ΪtP'Lb&$_"5v^Їqg$ek"#S.Gtuc21椕ɔkSzŮxTB+lR|uTUL
lV		NRUI'H
8Tj8ZO<PVkbn2ȍ[pR\5
Ӵ&yg{KHxFo2GsCxϪ9h͋AE|L/vl$zG˰E{9Z%FcUwSLKvH!;!qudQ˳wi2O<(KW Vwy+/'h鬟RK]e<SaʕşiڳM+j]Nfu;_+8MD}Rh?jsVOzLqb}|܂Rj|(TJy߳rҟtS ~}8\L&Qu.#PįX8*8S;DD)k0FD:6qeUt~WIu3Nꠕ]l+)}rRߕpݩBFg8~&'k_Pg}5x2o`N5-WW{KYgHXu/=__
7,ۯkBo]uuϡ9& eڍDو=Dߋ8)e|#Gj%
7_w
T_ԟڱ
^-vVk[+6mGU5=?Ȉ=}m/V|X
.-y;he_ܨUHq^\7>F[eb(DA㱫5F	d(5`lmQAYHg@{O]߇`t]IU?W9;\\aukͮ}v|	 }H~Yݟ̲
MݟE/=/؛d{Gs'xOIb=ELO2CIޓp8ʞE^w|9eoS{JN:We쟔SvP̐[tQ$:LZ3)^÷I;LFa+y^躞{CZh!|#>v@*ggfV.|h
*
N(	m^@jxT7yYs1%sL%EҤ؂p("Zʽݸ/*NK.
@#cDד&纽_-xPK	  !  PK  ]W            ?   ch/qos/logback/classic/net/server/SSLServerSocketAppender.classT[OQ--mR
( ^EXh	\LH6iS#>nvny|/51>
Ths|73?`%.JFZQޚ"WմbGu ,%STVFIXUМ5,DуHQ	1Hܶ5lA6T^\ׅG_		`ې5MΘf0ӌ6%'_gWtnCybKUHG(!	!M˙VrL4k︣Ӫ
ù&:i]rn&CfN2Ua۾9o4BSQL"ie;u>7J_K37Qe4C<WNr1T4!ݎFݢQTJ5_I+3+	zKxN
ʻð4/{Bu{rG8
GXTUUǿRwg%GsfR3-Dy7LXuѣׅ1wp˻Џa+Hm)3ڻS`ZCqwi;~pv/u{Dg`ⴃ?Nnù$R4E819'~<.٤.5ub?΀̵HQ?x]W(Y(f)IV!,IZY"_azG|EW/tf<$ 1S	ri!_PKl    PK  ]W            ?   ch/qos/logback/classic/net/server/SSLServerSocketReceiver.classUmOA~-ŢPTopE嵈B5)PӄǹrWODJ_IQJ1?e%daVU>R2;h%նuM1:䖒wqgk\/%Нe`,^D:%e\̰Ђ|o
6T1O#z6Zx
0AwA/q*r'oұx<UvIgM^<TG7
A2n!ucY\u8I~0|x:+Ug
=sPT-{
jͰxytuqv`H00mHu>pW=)	n _xAa*$2H1D_EM8Dg)p-\RkXծmQSWzvee)5rnW;z#əZ*.=aթd3<2cgQXvv4
4Dmw`S-{׏4^5>A)FQЌ5}i}"oXPM	\Qq0Ck@ϴHNӟ9Rhg%Nj󴶻a,*Wki	$
>D]\ω
6v#N%+81$. Y{G	8I1%^Z`Dψ{V\_,U/,=%i )Nd:n79b2OݱY	ױ_vLYK$e=aW,Z+&F\sPKk    PK  ]W            <   ch/qos/logback/classic/net/server/ServerSocketAppender.classT[OQ--P].r/VXI		
&$ENǲݭ<O>Q*g:Μ(:#G'BYmG}k9aU\S5){_Zّ6d;,mOȵz]a3VtS%U0qgX:lpѵVijF"r:ܫC=a$ErN9Zƾ0%CwUV)%:jp$I0D23 t!\V %:7w\I@Ʋkpn1Q^,m<`H-GmK3U=Of6U
cow0D
za~+'e>*T'yVv
,%NU;rGwW?F:EӤYe}!|Ȱ5#2G6TS%Ae!^w䖐;V%m^R_oGV3H;9Wi:`fGHaGtR2#/=CswoAw["YXOf`dAa:%jp[
ixY,Ac
s>'<..5źY1%~S jUvc_1|Ҡ睧UcU!,Nz苙"/$1vQ#>#9/;f<$ 0	
ic]PKb    PK  ]W            <   ch/qos/logback/classic/net/server/ServerSocketReceiver.classWiw~hdy
Cd9X%m!$XDxt'ψCtemYZe1@8_97h,+c|̽|܉/h@53Ч2nƴ''4Mu
=cq/3unpgHs9C߰o1= [k;\2N^K,UNhVXuwKamc`9!pV!M2HTSю
ܫq ,Tw6"H*6a3&1IdyNlUq8IТm*nD':Αb˰)'՜p.VVЦ;\x\.ZzZi\JE7"qKx8ow~/YUԵSmݕ-#7E}	nWKO3+ВcHs\ CMU^,82u*:U,'SzeWD_}H*OEn[f.wC*x)lnM:]Q5IFAܣ`XE2_$)xaMRhf>pk~xt׽j6pQK˫aZ]7)zr=:ag081V,pOGprڄt*aAueKWpBŃ8pSoeeMDHIMa˲Jxa=^Ks9SxX
&?i~.%(dQu55.|RŔk1׳
TSѰ30wZ%&L#ZDU<
x{*2i<T̨8sDՇĜ=M|Zf:|zLxjC
keGO
fGaX[qQTT)-YHZW'sTj99x6cޔA
w_ٝ+fi<AeS&`h|D{
K-W
1V*^YӠd kX4q7hMcҼC]&xP;4.\k:<)٩ċndI%Wψ4n[a-D_\o6Uְz!
U[:Rq7F%Q}Ap슣HQu+hٶ'ME7iNtE	Vʝ\L,нz8U><m$>
>uka%GnxE}֌3YE]y.U}+N%#\jY0<]5'2"+S>g媠*ȰmeR!86II5iw|n
Vr\Go3>-}	,y4GEfĐF3z>~_ï@w&
B=Ytz'm|~>=Onk@l.8(.9t/%%Z/v{v:ۂ}IzA܋!ze%4ctoȥ2q/JT/o@9'GF4}S{.q)rX*$I$}'"OL~xKЅ#RfOLJ|HҪfg/DWeh4kD4Մ}MWDz9K0E~mϒϋR(HP7k
&pN)t!JCvPRkMWFD&!:a0*$.0}rRVJT[aeQ+Bg(gkDրlk
uAMTWi3!`0
TŋwbM|!_	ȫ@ފR=y G \$@z1[dx"z']).@ >>|PK!l    PK  ]W            0   ch/qos/logback/classic/pattern/Abbreviator.class;o>sNv&FbldĒԢ<}ǤԲĒ"vFĲDļt}FDTF5
̼tkML!ҢT.$k@@h++$8 PK      PK  ]W            8   ch/qos/logback/classic/pattern/CallerDataConverter.classXy|d7I& k"l.DE
Kh0	&C, UjZQQh-XWZ[kE͒l"O>7{Ą WGyf:fvujᘖHDqͶu˨uǵѫ[ț5BܲY!_ABsޏVfk"zn5
(%?2"rrb({XfVc4-ciZuU˙yDatSա-k.onkTʵݲL1NOV1SFuv}JKv4ƗriFWumEyrt~P.%eC)g].iOSq:ࡉx,j'gf#_(S0KE c[V5+s8
RJUn=,A[3a|Kؚa'2QQq.R -	I#P,4lԭzڠ١aݱ~1fK$,2fں-syܶP"\HЩ?]|: B,F:!'.x+u
"
cr*6dci:=lSH|Wլb)M;f2NGiIk
ڃ˃m~SpY!ѡ2+pNȗrxǧGXIb%>$mz䖬\4Yd4͘:ԫv(Ҏa+D[jA,!I"KEIԾN_(c
Qf\u*#Fpi,-j04&gVۭYN0Ultk@vs27/
x7.OH'Oeq@CQľIf	e

Y³ؤ*q-K"^++a:"6)]>',"R[%5QM/u9#!dSdtۤs:YlwZ٘1D~Zb;	Y>)0<Tt]]mфݺ2ȯu=6.V3.ITui̔lvelo~_3͈RJJ}O=rϽҍ97ܣ1CrK>=. إ1br2Gͮ.Ęwlvz(oxBz{\zscЗYfOb+AVTyJsdYsSʲJЇ=|f={%$_~`Milhn
-2n!|8YI>gLk
66ZVۂ>|!@NU4Q/\m¡SBm"8/k	7\FTjU;{b%ؼ$.[]h*:b??tXm/MRNdn3Z]rx8gFh|6DF$y&ec-Ϛo"N=R3	rtr* 2'rSGl\GF3݀:/KќM8Ѽ[)_z$ÓD@zZ"ӇuITQRk	5]P(#*-f,ڐ͍T2 ؄z0
g@)O6rQӤfdf-h5{^LU.6M;a[Zz#;w7
~7l+,~WU>!X9G$wr.n0h?pN]+bл^/}'
S
s^'Z.KgsgMWI!YB!P`t)
3*O,u<QX TQQ{hF܀ߢF^OϽkar"=IB3iF$'No4=y#6['lI*ʑd!+L
[W=bUI0Ę_ޱ_(sՌ/꼏v~!pk1F~fIӿgCW9/GWpm$CrA	( aL@هrn7<;B>rZI·m|M3W|
(Ǵ{q=w'ȝs gJA*<[wT~݇@ևMr5$]Tqdo=s=%pQE _KҼrF)UJJJ}G(sGw`*@3;hi^Lsm{6<#25<a>WpfjD=s|^: Uq^57סWf܉؎eAI86<K±zXDO|O-}?#i/~]SI^r=t%9}du4E/K{9'{o'\ߒMR(PpqT)1(W.(X,;{g/vIT.HFA~9ѧ s v()|s̑RR9`Ad+J+JJ6;B)ځ9SS382r&Pu`Tt12iQR7W7EHH%42Fq`Δ598t`=f=Nn~ZZi^TTK
GZ8j~)Qa~e1VqC(]+Px܅[{:xKv[ϳVD&!OTvaR@Giy>,ø}EzcQ,WdJ?wB٘zͳw
4WŚ#_C.}V+5PzK%]8zOvTWOwTvF%9xۼ<U&vVsnN:&Bi^MDR]`0]b	Såt
ܱ7ry }n~܅q7=3
/܇_xC1IؙN&w	%?qOe@榋x_	q39o*QPoʥx{SsOx<$B}l8*aָ~8ǐw)OP䬇OnVWB71XF&C0xC	2N٩(N`J_dxsb8$<!I3yz*|b[X1NPKTܝ  Y  PK  ]W            =   ch/qos/logback/classic/pattern/ClassNameOnlyAbbreviator.classQOAC=[błWpĠ&%>ޱ^4~|~ ?1^+QĘKfvfv|]̡dr12v"΅5{ቌ4,V~A(y7?Ks?IQIæ\sl.q7j_g@wc<:7MaѴ(vq˄J>cV*{F{U#	eũ0y,tX!l/Y{'=j7Vr|Իi$&%-=s#8gȼ-\3%hJ( ,5K{-F3N?g|`o
w˛Ekf<o'Ǣd[.
u	댛>ҮLPyޜji'NtѾj a]
l)aF7M<d%<cֳ5,IPK7  4  PK  ]W            ;   ch/qos/logback/classic/pattern/ClassOfCallerConverter.classSKOQ}L-Z,R"SNbbXBb2`ez;SgM3ht҅ϝv8s漾_>	,mP$7Q(	k$w"Me{b (˘eB
UE9YpB,lsV2T3/
c@]TNJE)Z8SeT,X@и`tTO9_ccFX(n	w"L艅%£*KhO3w>QT(FDOEЇ"VF*Jeo_VGJ'cr΃cA3F(6~W..Dl
hrG4nA*|fz%91/l|LS{<ܜ0_	a;۹0wR]<ak.Cr$#YSg<ޜ L_%[XY[}C:[dUPK	    PK  ]W            5   ch/qos/logback/classic/pattern/ClassicConverter.classPMK1}ivV<zS'-
҃l6gy<QVD*
&&Mf2o/ N1B;C>Ñ̦\ZBr=12R.i5j<#Zo^doC?F]Dkdb+E6NSN2t':5(xGGU_6MI+e
[:.tj'w|m=ao89|{C!߈X'-/Ph
PKG    PK  ]W            9   ch/qos/logback/classic/pattern/ContextNameConverter.classKO@qKRm)V=(RQR
rߘ`/Q?V{Cs?b6!H;濳o {x碀2*e(	2&Hfą4Fhq+*rcmՙ\Zvŧv:*6zͨF}7c՞wsjNh<~+G\K8'&eDߘr	r?Pj%ucutuUWٍ8So':26&K3IMfeQ	
&Y^rEܖP$JQ[ڱ `">`^9lmqN/yxū5Vؒ&[uoae@Xȫ*Ykϲvڪjcf|5*:D[aY]
oPKAS    PK  ]W            2   ch/qos/logback/classic/pattern/DateConverter.classVSWLX	b*(*@&%4U,aewOPhkڋiL_3/o&L]w~{ G*JGDiu33&)]m-)1ӘR-aw3ji[CYe=	%62Ѳ͕l
{52ϰW܊)	L)a]12aՌLT؈M)Iϴ[68.Ry
Q"[fTާY6q4GKky34.%FLy^jlOl6bۡd2)>ܹgMxNBP#DWtacKI<c9hEp	b
b.Z%tcepck3S'c?;Y[c$qb
s8îr8J.σZPR:X{=?mc2zp*")\mVtJ {BF/(%*G}G\(bj];nZ	+uDɬE"pL0CjnpJi#K*Gw먄y帮E2jޫ)7?1/Ţ}\ֹ332aW1ǛЩE
R-^
cR2 [*;	3!˽SL].h*mRF4ډI:~e?2RZ.vdLSc5")4Xx/LzF-ޱ%3Eҩ֝p&ps]@vdgQb."Dg
//-ꅽ/oMMӟ!h^䧫n_CUNM*Z^,*>IT>XJVRj椰 )7MnsKɹ+rNn.8nXj|V"3t`a2FI-yf\!. UKnGK3I K}J4YtW	Ӝ+K_&b'5.:Cj9GՖ=g
UM+RWh`Pqyƹ!FQ7h4-A*a6ܥ
4IBVTcj9]m\Ew&ϵf驒g9'*6,o94{
@(m<
<FSSyC>Q`1|+ｍwN[}"#AG#ζy$e3"`#yg1-
Rp/I/b3UtǢEpA40LG8 
	N!Gj7ЅЍ_i&
5K[=y\oqTTa
IV
JERoL=*@T7KI|OIHn#qV4ui{zbC`w^Hs8WST<wɚDGXQCIKOw_l{e
W:ɪ
F0a|}(|^K_3~N( PK{D:    PK  ]W            <   ch/qos/logback/classic/pattern/EnsureExceptionHandling.classVRW]"(D.sHFQD1AL{`iUb^LU> |B*hV\J9Z{}O .^ 
h!)hB@}ȫf6q{Si#e-:jg77tӝkXf=jW-Mw>}>ra Cl81zچ-ЁNGt@R%Dʮw	-:%
궙5M[?<?Rζ~P@x$Ҳ*ތe>m N (㤂S4kZ5̒5/X^%eeMgWrg@pf몫Κ^<2~zWeL-W73zzX@}0Fd)$T\O~ck%[ZU	m,p;0C\*oa| GH*8.+P;%0z҂1OW3#X
H>K%])KS˪mx嗒3KP'||˵1Y6X<\V}kl,J*^OVr@)dUrpwL*q]~̜cgğm.jʑE#k.3#ѯ)	,xJpR)?F+Ю0:1L7*uG{88;2X6mMax>Bܣ~
Hbϛۏ`/7!h4f)\a	zqhE#=h{y6ZGhg8>/&KL4u7q:^oe&P^`떊z֏mO# Y<(<ˑ%}DQUx-|+gk@6?et#MW^Ajao[ $o wd0GhЈ?Bg8"FKO?~GjpU\Wɪ BW̹PU_W%87ϫKcXEU+@E1:]V'{/H+DcI1_p$))J)kw
#vXw
㵊_ qk.ӻK ϋX". On*7;DvܕΒNHB.eS97*W/YdkPK}[  G  PK  ]W            D   ch/qos/logback/classic/pattern/ExtendedThrowableProxyConverter.classSMo@}/Sc(|HAA&	āB P
fvg޼y7 OpG
u MI^aH8E0JÉD}t6S)KwG>`Ń,%E"<*%lPl"QYBXAxS%N<t,MLЈXRy$3[vn<'0pone6㥃7XV*oG4C#u,ґ0lفOٶKXskDU:K%ޅ9EXύ̅}879`ДU@OM,_*'ymw:Ƚlg'^pmn"۠`

ůܯw}/[]vpB-6K.3Ƭm\]>*yqJ*p
)JPKO    PK  ]W            :   ch/qos/logback/classic/pattern/FileOfCallerConverter.classSoQh XJGD05kbI^<=u-^jxdC5yoo潟xRVJ1,/pz`ٞ"׶F"e[ٹcrx4kGYѠ ТkX1a͑q[x_Xf]X	߱b?-w=9䊖+i_B_CI(CP$lK8fÂXq
q*Ex򟱩gNg1a\vVRrח{'ÞEL;d*颦Kys_2[XSdWD5ls5ci/A+A+B2dApR /TP!a ŞدԿ>si;l281/b_n|F6 <|tIdP!b[DX2E*{c;ls6
\grV^ߑ>EiD@fޢp"ԧ?PKiPl!  /  PK  ]W            R   ch/qos/logback/classic/pattern/KeyValuePairConverter$ValueQuoteSpecification.classT]sF=˖*54!@i#ARib06g2}ZY"igӧfHL[:0$ؚޯsp
#
w%~p\{Ǳǽ""Rp=\{af"fYch"&r!ԛ5ĄT7Z>5qy}}0~.ב7q3]?	xķk:o:N)"ơ7i=dX`e@đt+2&,y/3Y#륶A9gb	7ֽ)T71+YZl
q:RQf8R}X~uŖ욁D/*vit,LXS=1ܷJC5UrԎ5@4;>i:Gt4lFr#O&Z7gF~)( HQh\ѳb4ɹӵ4ܪ	p~䊛82~N ^MыW^01LzH}MrP[DHrRb \"M)V!@Wh7MR]>g/Pء÷SNbDϓZ{&G*X"=4)#]&"/La2XULJhB.{ג~O(.aOU,$ZgN~z3;Y~.K"1Fq9y;fRemyC	B-f[K"iН.Ý΢JNSla.)RjsIS]m.O1uN#)vjInMRrP'gwV_PKeZ,5d  d  PK  ]W            :   ch/qos/logback/classic/pattern/KeyValuePairConverter.classV[WWQ bFhH T{C@Ȅ{W_|/}]kVOvvwf"M ./'/9_?

|*jRSڜek+=fTFm3t1Y-+;oY9)PjC-TC¨)ú_vU]*X)sLie\X@:z4(hTAf}Y/sӍ*6!ȭyIJ6belZK:y3'UlA@ZrgĒCO=_$^PMvS vb*ZGqeTs=cGY+oDtVJZ-h|0/}Pk&'⮮]EztMAQ3hJ:LPVm4=-fNo=pDQ8o(?s\V_Sp\`X[YbuZ
@	՟-	#@e*,͛%*Tc2(FKi6RN۬|Z3G5C^i傊n=3<\1-N *fu7UN\VrɞZbEraT4&Yk +Wd5vdJ5
)5k2+¬Y)o1NՕPt L0X:CNnZL"Ldh\J	lh"~=9rY`z)nƩ̦AS&h3F0;nG[3zޔrQsLM3.ˋE0٤sCzzf>'#4|ݜF+Y@jeokyx޸fɀ5y"pBOrolP 2)kbY#
1`X[+@3d>fr׸,WO4!0C
)gJ佔gKW>\kg,BX{pc9iby

$Qn/p6n]d(vnpvSl1JҪW(si;c[.BBxQX~q=4ya#"/AZыv^N$ULJr_J4xx	Wd!0jSz'ݾDG *<`OMw]KuЏ+c'.|r-%^/nos	E00sG3%@.be@%O^>WsA:OO=-`}KS$<$nE/m|w.I8lϭ"'ntU>{>FHci<Ghu䱤.,}rq|~HFIJ|PK^`\    PK  ]W            3   ch/qos/logback/classic/pattern/LevelConverter.classMo@I8q
M?hTe8EBHHC*}㮜-.z)̏B9R>̎gy?~|4
06Ac"5HDʢб8֪<>4D!Lͣ?<BXC+δx$Yb2K$FjRV>nbC/"Kf56N&ȉQE[V6a_ŕOu+B3trrd)2Ld}lٱ.xcuMmZ	;ܷL{<U܍<K..C`Ѐ{ yo-]:2|U6p-
NlpKj5%8>6Aws嫨Y1)j	@zP<PK;@ǲ  w  PK  ]W            :   ch/qos/logback/classic/pattern/LineOfCallerConverter.classS]oA=S(t[[".v}		X4,u݁o䃿 I)ywd=޹S O":c0M׷zoZ.C2\JxfmrP0Ğ9#"Fh	q$4$u,Ag0fdYoxPx!eY+\rQ|8Cn͖ܳÀ[b=&q:Va͹;p<zk+Ѥ*4\ӱ
uO
[]K%ɰfԋQpUCa*@52ԥPrOq``ϓ㦆-bx^+&M9p͚e\@<CwYky%$-Q)]'dx2tnb[PIJLduh^w6y,TCa8s>֌Bv T`KrLy=jE!{N&yF~mpll.Y}r۸Gԇ$Y
YL#R	R_puɍƜ*iQа4#ܘ0I2%P;EG	e"$aP%yUWT	6GsjHL)LUiU΃q?PK,(h?  g  PK  ]W            ;   ch/qos/logback/classic/pattern/LineSeparatorConverter.classR[OANoK
^)%qC45!YP«.Sf.A(㙶M>ۜ;ٙ}5PP
QF ⁸6HMҗS:C露LFrPy3	YK9f6ϝ\NXzI脰]ȑsVg^eBs|Ad;#X
bR3SCi3vf Ąft{':\VÛ*ez&Xr?fwqeZMj(?_x2
1ϽR<z7륧&M+c{3ؗ[_A8(2.pҀxĞNo{g簍119b}zYgywU[;?pVfeTTO$.ԽgcPKs  ]  PK  ]W            A   ch/qos/logback/classic/pattern/LocalSequenceNumberConverter.classSn@=״iB5P(5EQR+REqV_Zۉ_m♏B:D ;;;so?}TWPPDtq^mxv<Gٙ;a0yJE )X`<Ƕ9Jg:ai'O@tUbQ*ig}'gXr8BAE^a({^5Wa
Zau1<v [	jI^4\r]nDܧpWQWpM:S_je*BvHHs$YSH-7e0wu)8-WM
ɠ8q;5/@/۝pI%=v#O5iώgB2WdVy$`O>e;3$Uy29$j7E.ƿmK@49N=@d6d˳q
f|S,D=siVS:
@diJ*3)c	SJ6RIX!;Vi6IX	6O)gP&"9*ؽ4PKaj-  S  PK  ]W            4   ch/qos/logback/classic/pattern/LoggerConverter.classQMO@}*Qy+YojILᾔAғу?em9{ٙyo3C^f"3AD3:"9ctf|eLP<y5*c:J05X\K;p]*CE@P7[-[01ߥ8-/f(_&zD"VmA2=فüI-EА=\%7O2)]sַ=X?&(lGA:/ʴł#T߫Q/mUFTz"}>oK[L5Hkd2ڕ^Ce%Տ_<7fVlW&RPKLZ    PK  ]W            1   ch/qos/logback/classic/pattern/MDCConverter.classVkSW~I$QX%b
jM	b$vfC7_LtR?cݕyޞ<=Q! "vLa>e*VyN+*Zf2Uqtdu2ua4@6 "Cb
$ߒsrvC>zř*u]+O[2,gf0CQ؆.e33Uuo;t؅77dz^Vz􇎭^GjE+o.gMr[}}IG^Ivh#-U`ͱ!UQUL.o,36lib҄V5!.@\U$n՝j]YJe\_	śBZpځ4)Ȩ8[=4M
N
ĚK(8%znT *@K3j#d0.(Q>lh
X؜ogK*bcTfe^MR2Q-##n=mh`ШƤ@[jD:c\aӪU,
[oݏ㺊vn̸ nʬƳ{[f{.e*>G0X^*4̑wFwp+U >Y_\
VAj!׾1TpME[
Qx4sfV8Ť,wћP!;|wɹP,4ΦG%6[xuxs-#CQ)+jzCJ`P,Kd(S'_Zmg16;VqZf3V.c$yF	x5LS+Pȅ-'8&Ǽ}+V9y9#"ѥ<E'׹ȧA@깢2B~/p}$VS$/M,+Ai:;8g[Ky,w]5*&},ф`iV/
%8 '3|ND%Y%V_N*Rmxˮ#n#^Hqp QAgi=rI0&Ii/ ,߽git"
hu'!ߒo'#wF``Op#+b?DS]+	bF8e
fk'rHqs5䴞".ܞ4{]X]!zŋ\#%-XWإ`P(
Ⱦr5nR!iw6&(޶$ѷϛtoH}+߹KA=PK9Epf    PK  ]W            4   ch/qos/logback/classic/pattern/MarkerConverter.classUMsV=/-ǖIlIIȎ&I8`CJ YQr%93	vL7l:c0ðꢫOrqB]{9\=+ p+>D0(ڞi+\RVQmД8US:kt"f8>9F"BhvP\6j܁^s"e)C*6da_=PcT˄1"NbaauK~?b8%4Gw{DģQQkee˱K䌄| O{b$c$!.,뚓15bWvG1i	_b!Q19M@p3|[!"ݜ#rt60Ru0"gq=˄g}ͳr7<c8/Q}Kh^QV6'3A,3Te*Qo4%ݺ*:ʶj|
Ξa3,:GdXՅ03qkZT]nRcaWa=k [fJ-z;mFnOԝugT-;.Vi-ai1cupP1gy!9L984fh/y9MBc
;%oVQoy,D<ׂPL)B1g:EoTx>dg_b^t9˂?qcBttH@M|u?{ϟ	CWL 0A):M7XBȧ9C>1b
,27(%dI6kK+ȑxq5T,bXl OlN
F
b"|o0FD,KT"~,/?5&9Onp(|혻/#׼@4n?PKbLq    PK  ]W            5   ch/qos/logback/classic/pattern/MessageConverter.classJ@-FFbq"HQtHMbK7.ĵ%i(ŢY[ϗ|} 8F9-lQb^?o
{c{$2
y#:Ɉ*C!lߎcejg}'=&LNu5{Z2/m#z"u@ILYژș 1Ñ	C[9P^<v2̀*3Dp+"eXH*ft2-*?̰0_6;suJD+i!AVcSe燉v6$r0O\ q|
LAsdK"i(tpv`1<
ҖlDKX
3BMWLK
3UCEZ PKI8   .  PK  ]W            <   ch/qos/logback/classic/pattern/MethodOfCallerConverter.classSMo@}q$@hShq>% )"!%-R^8mqqvs
R~B9D03;yofo #%d,{h}B>?Xе1"!};?2Fi~t09hصtq}go"aQ{xjf]Oq߱#?{QE[54
\G'a0#P6K"Pfr !CÈQ-BmjX3P:ÓKt?xh0?Nb]{yC!	$u}:yeJ1:ϒh59K)IۍśuT5l3j'3b-iIT⵫Paa`IC'<#6fddӵKȯ5Bc~:~ti4nKȐ@#"ERTk	]Ewq5}lS~A%ՙUWwP.+1(*-PK	.   7  PK  ]W            9   ch/qos/logback/classic/pattern/MicrosecondConverter.classT[OA-l[
b\-Eb\64)ȰNO|Lŀ"}s;Ιuz"'ATC,63ƮA%;
iMplKn	"˦mUhnjq$4$S@!w4rE]bm
C5ק+'хn
2a-nD+Wa˕*g C}Ї
/H;S*n+6y)CoY0 ٺi8a[ƦϰtLIbdM0tWL[l4vw,T->ԮI
_U:TM畿hJe`e:ĆiYvïAwYUĵΛΞ0Az]]Y{Uyb􈲗3QK)H8
1Buc.y,hX3ݒ"ܮ5n(2|<@XH\UMq	
)Jܲ4Tٶ?hjčjXaJG1B%CZied_>=Z`iM %˼&'toV3ͅX_,];B/ǴIߜpkI^9@!q1+<oL_	D({ȋGr'!b1IF)OD3_3DXwڛ
Ҟ~#̐"HP_gbIaf PK(\)    PK  ]W            G   ch/qos/logback/classic/pattern/NamedConverter$CacheMissCalculator.classRKOQnLPVEEhba;Ёaܲvݻ5cbK1{;Mt;}k wFaOt6MafK)lѱ|Pt d)i1)yvW40k].!%N`6FEir3!7]횏{Tzy!XV
L` }ݰ"'X]lTe0c`Vdu
9e'/'p{qѪ	PcV--v2mnQȘP,2X5)dl)
bH2
9BN!CX":ܦ͐-:R]?CZQ<Xj>Ut(N8Z^ǔŢz'K2i$c$˵Sk/OQPǨ"Y{?
ݦyk3,d"))i:3	'V(9X1OYc!
܌Ѽ*~9JYH9eG$J#XPC$J|zA+hD$#P#{
f!`Ip2g]!%c PK;& v    PK  ]W            =   ch/qos/logback/classic/pattern/NamedConverter$NameCache.classUoTEMvUk]"\un]X5w^뽳M!	$h(cM?agfZbܙ3g @^d燦/-rlZ.C2\Jx;{"}%7@;.m[%%'`ZD'H0Ѕnm27kq͂㕅=,#qX>]L p59Z5K?D~c-BO؊mfd6ØO	S40=[
DX];i)<0DԚkOEWK_P?k`$oIuge*~lF@{(H^#K
%dȰu,Ot]-2p%
2%}0ܶ%aftQz$PMPfWDA/8Ô
~k>>AS(턜<d(EON2t=ݚuTk0l5)(7	TηIYUEpVa`+i焁
bT-zeI
+ǫr2tVȒo;))#]9ɀض7b+lDӳL:ͺR}`Zم#þ2Nb%5u;KM?he^4Ц1ʀ#c#k%N8
fÁڧn;3~()6/Cj=Ha;dԥJSރȦ[)Xeǯ)kce=q݉wn\"ȿxo/zu`M7RrG]TiЄҩfyG6'* :6:MeKt$7p(:n<gǪL8JhQS_]Lm\wVz=dR$h )=d#s=ۈA*2C`{*oiSZdOi|N]L6%'V?҆z`4h'Z=)ә5mJpa vUh~JdEW(wj$ÿB/na_*opߒ{qc;
'X>Y̑SOڠorVk-m^A"(52gvw_T_)qZ+芎b2Gt'$3|+7n6@c7\b;"!PՁq^2\|oѸK;.J{+v	%\w
|PK)  
  PK  ]W            3   ch/qos/logback/classic/pattern/NamedConverter.classWiW~.2fK 1peں!Z	I# 3h [%M4Kvtoimps|j~瞤ϽB`b>]}{Mﭿ8w8\3^,@Aw]ñ
֢p꼨E@`Pi\̴L@mF4ih&e̜gh8vW0$qmd]EJp/:3wNfHݧ~hgfc]3[ FŢQ"rc|rɵ]=b	<X6̚Eiߋ_`fZc\3\Ӷƍ|A^g{pKEטtlθKE=׭\ ::tp=byC?sL2|,>e+,XFO^=X@VܦOixDcStKKjc49i
?Bkċ; Iq+TM8!1(0
BJwxaܹHX 8B2^F< /P'ggvu7\P`s߼~Ѡoetꖫ3$HoaԜc?+Sݎq
2q%fBC)VB>Ă7gM#+&p#X0QgxѰܭS`JiyHI3tVr޿ePV^%g4qi7L|悑H<Ō@f.,
{d)PsLe.+K7laFXl2+Y'/=t3t;9(zjX@F!iBҨ	w|V+z3%{G#H4Ctr:
ғd8݌bfJ/LGd"k 3Z
hz,JLQs,T:OGӉp,>Ex"GG)_M]%X$LSt*9u*QhE&`l2ZQ`DT0
k=!;KQ2JY"%W)1<qL]dY"ɚ%TotD'K)6$vIDbz̴ΐ(y!KVuLKjM/lhڄ BS^p2Ƙ)޳V&3Y(]G/F`߬Nϵ}XRnYqcX/hM;2W\[?i-yJbL0+\6BycneF/j
CwSKcgl2<Pt
]Xb)/[/nmaXV:fiW#MC7>/pE4[/+W9~jE^߬Z߮Z#3w;XGd>'
G_Es`״h.
tGϲB~n&' O;L >5e]#*M7`pM:;  5Wpt1|&=\E;^0NϛhӝUG=#p
Yye*C	RUC;	#I)Ita
{7p3l4yg)1f9ʩÞ$=U
oChĿg
qsCBW/»(ÊU(+x"濎Q7pWh<)]\ڪg=<Zt@p|%2]CJ?&E54^42PXsBx=豁Ot˕nbSH9sz`i&FE"`D7U),7+li_rMUAJUxKF*+E;.z/w
-*5*oWsU	
PYCeRu̯;hWKoTa52DoVG7	_+	9?.)|y,]p
m%~Dj8k~{K=eeZH'g]Mob PK".    PK  ]W            E   ch/qos/logback/classic/pattern/NopThrowableInformationConverter.classRkS1~ݵV7'qt̃C&l8NacmͼMjnV-}Qa%;iBYpI~ vJuQ!MEfӮL$y1+gyo2mҎ5#Pybk"
ak:%:{i||IlӔՎFb-B{hn|j]
IMo˺ۉ/HLTy=Bc{kN]΃.Df鰟6Ks"eG`
 lffؽTɂ'@ +cyyׁ[rU>g(~pQq9')<9s1tcr<j@C&yg
p~?qgjEuJ$8F#z:<PK  Z  PK  ]W            =   ch/qos/logback/classic/pattern/PrefixCompositeConverter.classVSUd&RԴR3|i-%(
VH*.%,ua g}ghgǙ>'P=7hܽ{9s{ny ƱnFF>3VK
ml5f{E2IM)w/ÕmyOd=Nۖg\F$.a]N5ゥnjgmͪvl+d_Vhe<1;#v	pR&s%WlyEla?xڶLTԋk있u2L"Nх"ޒ6<6Ufr8C4JBʢ}"%[DOʻ1,aa.8F_+ťzl~:^_J̉`kpB6Dܒp24X£Hz+v<pY$b~L ""*az*"@qޓ>/径k8C+e=_0MfRݲz|_QM>ck7y#%~(a>ےa2,:@ Tt;JrZSS~32*MW
Z7r$i79"[/{KB^!nFzP;KTVu2PRJmVQ9wR(l2k,JU78)Ƥus&%e/.Mg{ƹlnjo٢.GP)ZVE$Q]M?m,Ex*k7錹<`qd\zM\Ʀ2iDOϩcskK'#BPxo_|p@i
6@P4>*,kv:o9QDO+BAouwP

ESn43TS
X(%B	.a/h5zut]X]%&r|@$zL'&wBc_a_ӵ
i?&0V"$	{xhMlP<r$˓Oi!#Y >H2|9։|/~i6H
;HXfYКZZ_" B1A^cE\
=1C:gUA)G-Gg+0CY䘷ICx@;9e/nG [EO^ʾ`|xVsq;gPK>  
  PK  ]W            6   ch/qos/logback/classic/pattern/PropertyConverter.classTmOY~nvhh_ujC'27etK#
]\`icЖM3{=9yΙۇ Y
1t0,đ
/nWnnũ=׮9Jɠj6~!ZS^S]j
HHY%p_#!T^PW5U3¦pS-+*Ry,#ͼ[rW KXu	T7
d]{:|UC~y15~˄kȪb^%ߨeqr>͟D/⒉~6:(hѩ	赣MSWqĈ!rJ p=wHMRd"/n:"FMYz[Wr[ͶdQ貞[n㎀6gD`:w-9
T_K*veYH=CTVh
.p23%bZjC#x֨
_`gƅ-֍o3
Y,NwkOfT2]:}#(Ն8ےQԊrʎktx	>s[g;\0w"4|[Mރ@߃%5`aB3Bj@CuPY7F;rmGq'GI!CDRHk;|$_~QWzk2:3{
,Ҙ6p4H{/
:&&70q)1+)b\gD2 a
8˚񐪌G|M%W3Dg?.aM\(5GX]םBf02khHkOPKd;I    PK  ]W            :   ch/qos/logback/classic/pattern/RelativeTimeConverter.classS[S@ֶĖP*
X`TZ:2Eaqv@t)_8#xyPGO^&A$39ɞw? !#Ӫ/Y
6MƛM2\Jf)\<%|0tבln-đ@]G>5.Xu vIkJ^o0Eq=*R[ܬq6Wv}p^0dl8gT%\ɠ"vXZEQ/
])^ʵel|BCFpICFǨ"g4weUqL
jc2=f8+Pb_jNq
gϞ4_z euڗ'[Wygn;4kzYn1qzִM'v\⍀i<˕
aI
wzUeˇ$$d[}^ĚMx[%:
(}l
Έ^SP]0uyNЪ)f3"n]t	oMR
4JM2uڀ8P^\kxH {\f~ۙ}:'<fo$2 4ea
e67w;$| ʙ󑆙0K!5}nqcEG0w
>sȑRroPK7.  8  PK  ]W            J   ch/qos/logback/classic/pattern/RootCauseFirstThrowableProxyConverter.classU[sT֖-QM[qKKmˉh%4ujp.&@DHFC/WCZ`yo'xM 8=s~}{V QN IAQrmO[5j_鵆yVMoozvݬW\[0\ໂc. DZ/©c}ײw﷬Fte$KO2 AJa|0iķ	bLƸ <xE$ێgY?隵YJT6#<Jzz/ɨx:|zGrIeARn\Fȼ#59YqX\H6SMI
o&tI;Q״4UU}Xv Gɲͳ=<GԈc2toa欱z.7l#_WVW*ۄ4EپmC$SM2_Tma/M<SGŐ'(!:Wаaut+@$ԌƎZby({3k_הzU9-R}-!7	~`]V[	jO270!w|lHHxg/iXܲχ֍f@M.a(rk̬$ZL/ p͆ ~axw:s$!c4xx<*xxiXg1<z&Kv.|7 ~'p۶\*#`XcKI|ھ|P~$-!kIc5vSM#`!Q#H.F_,DlBSjt"g\RR31OD>q#㸯cnRи<>6hPsr[8섉C~~"c,#I">ByYs&G^2|\ƨYɸ"cXC~HPK4  ~  PK  ]W            <   ch/qos/logback/classic/pattern/SequenceNumberConverter.classS]OA=SZ|tA~(@R5$5<Bف)?x	T؇s	`+ГD@kjI}n pm+%|Zk;>EzW]UUBq;Id`X.³AC@3PtTb@VP 0rr/;	+I]CRTIaak]-)ӓjps~)v\O4M3k!iKouڔJoA9f>0$yhǏcՕzNECD0$L0\nkys,<g=!%1g`.dԤ0h2uCE%!;ijݴUn eɦ`ޏѢpMڼ}W`\J7[
6ao0?4ݥP}~ H ie۷[WOv0CǠ8i}B'vF{
^bxJko'8Z0RlEeo)爟Hb`5lO6Gyq$=Ia4ITyGm,5DQJL1rk,̊,e_K#tS(\@:zݠ@V)XPK)  D  PK  ]W            9   ch/qos/logback/classic/pattern/SyslogStartConverter.classW[=mX!N:D)`(iefn钮_MkFYM#?vH,|ν^y
[5UP
T6FsvfVO-DS9uT{Xѡzȶ
;
}ezV~DU.8.]&=6A7e
1&aUEHɓ^z4[(7L+ۈܪ`p@P\4n!Psnr&Aoq@*Njl(Qlul^̢gVHvs2@ RM7HvqD`7͍M<Ӷx"ұ= "]u7l\*){a=<̜]Vb
>DaǱϭA܍8֪ڎR΁BqΠ2CyQFMNL&>:vIoPH33gzv=KT>I]58%
!ϸD|!g=cvD"C0$pkU<->r¶lZΆYC{\WBRPe(IqC.r9#L1oXW4Gb.l/l$L
o/yVV}3uTLˉQʮUp^තfbA<|@&B9Ƣ+Sǯ*H|nv&CËNI7R* t>vn۪+!2"˺Fb;+0OM!Ra,rNddyqb9*\P/eEXW)
5Ve.HC7xvYGQS$>}@:[xn_O[{%'U|JCtI?-pp9k/ZRڟkiD޴,ry6S3'Sj,;"e_c-5_3[.I/ϱ@a7|x:|UO<g-ϫ6CUCvjۏ>~@"0cҿXc?QSn
gd
,깢11G¼
B+pzPViG[vaC1!;La$oYi1庲YeMRޝAcwT
$%e6mx7rkk7
>QY(8&MYza{QOᦤ!PU9ӧuʌRI褌SV+&y 
ۙA7C*r>' !-WgP˿
eX%ܲe]K>dTA4N4ӄe[{Og}Z	w%BP-ֵe(=5<=L+Xztm=vk<%ā+4tFH'p.w0Kd|cqbafd$ NSyAit|پe"3Jx5!J<G,V[UAݿR TίU<
	*Nt]%t,an+de,y_6K(r*z6K^`>
޷	G0hclȎz|_/D
a:~8+,r-ز;KR\}	}n'B xR}wyJrW^<{Nu
GhxZkL!_}--9f[gjyg5E_ɶ|ֺ*Mryn2K%|w?Ls5VWRO}w搡M}^G0эyV`qX둷"o_k
Ȯ~*j
Q-z ?oYF
J
*їͲExPK19    PK  ]W            J   ch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator.classUoTn~9q4kk3QdM6<FAHA
qĝcwSuO /< aTBEeHJTG$$4&iH{9w{|_?<%ZYN9q\c7<n{
%H3Yܮk1M.1S+ȈJP 0$
Sϭs3\;ݪ
fyèE"3kls\{$$N<R,ʭڬwyS7=ӱcn&mBMxɲ%GEi**>,yiW&VdbH1yNouiQD8AMӪFE$C U耟P<N2DW+j]q/"EYwg'/
28EnD*?T	S+ FW	a0]%O/+p!9"MEc;hb^6e^hZ)b
хS27	|dNW6x |HhдuRI=pEf8՚495&:dTXZ㣃BIG:߼0B@׬3H^7dӦ<%]9NC~swKNՍySg5+*)
]qqp	9(4J<>]#?!C;f4 "tjG".@%x
w0}*=CoCﵾ#5DGDCZb-fƴhA+ZH
AȯTI
U_4ٯEը\FJ<{jD
2U
*xw/VB[e;&-ts-§$0B"$Q=BI?aS$P$x3(:.yumsIۘ'gsKڊMl·=[$,!Iߏ({6h	O| (,H1C6$bQY~Hc7>L#1D 7Oq|'6P$Xeʑ?wۭUPK4  +  PK  ]W            K   ch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator2.classV]s~JbeB21d[TR#
vMȋWB2M2aһ3_3t:tB3sV1`Z.w{x%BX!@jlé̊/}r,Z <:Gq	
	,箻^vke؆Y\}fKSg
Ϭ9nΔMs2|oE?
foZNmeU@2>e8b#m5ÞiZuOެ
rtAiAZqtL;-Nғ-&p U4cpuDMp1gT{	b;E諸F7O~ѩ7MpRq(F4Ũ@WLi1N>
YĽVfoOkI'525
ө
LSK&^^&l{Gwp"/pIܦ+
xK0%ZB1q\Ŵw[|:-\xyi,
*Nh8)9g:jș=-YE
kV7Vdÿd[!K~,j8'{Q
ڎiMQp@orszl.e+%b؋FӒ/[tG׷hw[,3zXdխ6BhHވQRgggFGHɮXa!u[Yjehy&!6.4-FQ	WPg4"=I21ﶚ%˗}LJlYF/U/O(V*${o	y嬺+f7O1CɘsWc=éڦw+ƱS{ZA|&
m[I.hE1 '/=W*>8EYю0A`Iy3p~DD,|FP<g:X`$yXĥM!J7蹜#{=;zA6D_%IL)>>#8u| Gx)WuU:gP'jcmL\@zҺT'7_RJw*6mWbt !O余!؇1a^Z/b#Qx'+8׉f#&c\s_DТ*1Bj:? B~%8c|y^Vh#"L\(BnejA*zU#RxLݢ~I
#Lrr7CƾT2yljpvH~pP3Dt~忈L9duTɐyPB0I114Q'rCARtJYb5xP|I=VUq%݀IףUZTQEPOKZJ;ϛD{י]ub
WzT88<A;R#d2G1SNcߜatvw&/nlF FP0#	lF%?-Y	Hhg{ ?IEIRB+L[4	f:6]p,Lx*MKd6 JKɵ6Jw`O'ŧ؃H1kE? LS>NN}0	}WS,LtG=FpJ]g+$&D1~ PKn  N  PK  ]W            4   ch/qos/logback/classic/pattern/ThreadConverter.classJ@-mZk_:!^@q?MtjL4I\Qt!}(LE)r!H!m c"w1mqQ X>o%y+2
CH*n2Q0P41=(~f|d a֕M7s!%Cڳ{b '|_!6ü&zcM/[L+漭|yѿoF=ޭGLUSiOV&S?/î5|IgWe
:W"CX#OL յvROL7d)l왂*ds
ȚI)ty-j`0<MǗѸVV:&uzBf'I
#
MEl PKC  %  PK  ]W            ?   ch/qos/logback/classic/pattern/ThrowableHandlingConverter.classPJ@jśGx^,=xlf5&?œ4HDpo7x		tb=t(أXi9wL`,]蹴N!DgJ?X!1*yy)/JOL$)-f#IdFr̭úPa{␰YxQVM*7̬Kg9S1]]u9$WK56\-7?;KΠu]PK\    PK  ]W            <   ch/qos/logback/classic/pattern/ThrowableProxyConverter.classZ
|TՕLa @$3!A&@
2y$03Anڮ[`HvW2u]Z-vw]c+{̄|HV{{ssZ.
n\ݛLƓ=]Flwm,nVdT7芛DwJ4&	Vfj^4u@TB'xItFyϨXZ9R*c2I$Sfw{::RFlfZN#i~3J	
Q?_阁{:+lXɄ*[[HԶgRwp41{̔.HE:*"=n&z2,?!aˤҋ
dT6X(uWXJoe6u2cUۼxҽTƏYֱ5>#6ak˿ؿLK1S,Ku,r{&#32Vw錑)9$}^j <IFdx[z+\`l\'φuhZtkz5ma*Fu4a)Y"VtDAG7=G3~NGӚu&)G2s~b#MkмcSۭ-
%hMtC`8Z|+
;G1I+fGzcER6UaJ&ڦ}f"4ҏ;t܂[2C/j*GubN:$fRRTeu[)Ne40ͦnH~Ka2\)ёL^
)iӕctUmN
84IGrP+'J
uN]45uȬɥ~H#3 ҳy@x.2 5a3Z>@Rr>"j|=Ž=V:tezݘC*AA!+ٟ06Ex5f;X$'2jHL2DvƓnFOKB-z7>!yIWVu|J.9ipGGrhY3R8uw;̜xxm62'X+8\f4AO}fC_>ҫ#F'dI{3$_pJ]VB p#Z$эM76*gVǗwk1i%mCVJ<xOwP,Vѱ3Ao S1엾އRf:mʪfrKy[FO!	y_+7]ʏ?x_DΥ3:^WIkǟ2Bs
n^mVLϾc{cqssC[i]S[&o8+KcY@={:IN-\_$߾/P^86W\V7Ѝ
ñw苕l6iϞdb]fv~&p<nkx	Ar{I̥1췹_:^9`iËfլ	ɰVw2lѱXC1NPr#SG)͋J(:-n/ SF`Lwxq
m
AEn{-҅[xdg3Qg|eЄW>]eNFNak79W$1Nx	.*DcmX	^ky21&21bT`ma8^
vs[Z'
[1]`vlH[#ϪKoGNjX8B#4w##f+!#1#HYtnL`X` ;)g~Qo6ƨ2AbKsNKa(N(2)/2X3m:O0};c?
XFXD,r\ŀ8&p*sF&ĸwM 8fSG?^.* 3q$	n:.79rk}
_MH5.KWnE#FqDM+wRi{!t*M<&#ǸǸJw?6V>f"8NJ&[
EjT\g(HYrH&3hr^b>ĻCd&>򅶋!DȲ?Jzv.G:6H1 n+vT])VMұL]7JK6_1J`͙h*Q|c-pǏ#шيHnD	3p3	RK^OeVؓ1ztibD|@l5>S
PJxP7|Rç $43):j\U^+Bb>B~;]C>	g19rz80$`}$́\~8?$Pej`^8"vzK84W)Y=k\q}].sWCsu{Ex=8Xh&9^jA :Ӷzo{`,n/dqA$=;AM[dЕKi2*DBZkb׬kъc;,G6 a7h(6؄G"6<y/pit*Jeb|B<B$a\\ ebF9E>ilRMmw. 'x S ahD-CeK[v%YUXh;y3JoP[65vizVV
5l.P-&G_ʕ=@sOB;gs)Jr$2n#ݢ<6Ö*O&\ePָFΛe\pS g08HWpxM8pKQ"y
|bNV1,pWARnyls$]3QZ_P	qSZ0y&^R/=K-gPL4Wd"'pzOÕ05 8IocRfeOi	P/Ēgp`)#s[	),>jYJDgu?FV0=o jKf(#
grF%G#>5w2)e~	{:q7I{+>1%q?>q/ȵ_'JQ&ՂJXƧtĵbγ<+k_I :+*2{<&kȾ!c1So;Σob9xQ[~(vrKmS8#-jf~~{x:B-ѬY
[LdT<DF<Z@]~β3pG+,>y_pD=:'YɛӨ
zd9Nsy˼e$Jy̻pA/#*GB.{A?Oϥt <D0}9XnWyneQe:}=tq=͒3R
u2-ZK9Bn
bX2/]DUC,,YMl&xf'8)k0R~
/pEmWIO8CM|pOc*$O*#BrЃ"@sЃ6
5_WDk{˂	]	B@|tJwdϝ(1b鶧EsDsDX
`Q,>Amƽ9x? ܼHê2'~84 ܮqd@m7s2QL2w+|e>uAwoi?g,Ep+~CTLc(>>ru{9?*VJH71gF|rfr2^dx;%֯}:onIj{m֯la.+1?"~L?rT,N6"7pK&\|sVHHeqhfdJو𭇘O{D1V-Mb
+c"bb*
$iUku?}yfdqì\Qv}rb ~JKB^Sm9f挛 ;P]u|A$M x7oWW:7rJ">IdorePɽzP<͛![tr#Gr>MBjXĹ6d#-ˁ[&rMyLՄV~E
l#ڝo
ї{ݛ,(hj|p{gܬlN-M,+0E?PKv@j  $  PK  ]W            )   ch/qos/logback/classic/pattern/Util.classuRNA=5Cϋ ""@ZAI5)'7l$4S1[u9޾_~: pW2H@3DM{ye[oQxB.1ht꺶ڶ'oBlve1lY|YlE/rb~RGڐZy=A!2Omk!eccÊ;5;BK4&aS3V|懦;MnmPXfKi3$-nlzkp<.n{x	jaG+>eCЛ\	+R}7j7!o}<eKP[fO:\'\Z-1m|r\go&8)`9YoHrHꖐZe~Xmӱ煸8O0AL/R,)hO3M9ʘdelWA$ ? Lcb0}t/߇O!zpC[*LxZ	ARyi;BS*dIg 19]!*0BL롄2v$Syt%Xw"rgTS>F7pwUzEh5U#.PKܪ    PK  ]W            I   ch/qos/logback/classic/pattern/color/HighlightingCompositeConverter.classS]oA=|,PjjZb54Dm$a;Ynwpw?_jo2;C[ܽs;'2a0Xvz/C˓N,[pDƓYI?TWa
QL0`@v<UD@9;<mwU!R(N!)4q/еZtwv{W	G	!_(62*)dpD6k0?)!d]3zэFs%0Y
9,ȧ{1+i{WfIRMMqNύRl<;VSa닃IKoyˣH!mQ0nȰ;2<&gW	*ǒ|ME}_)ֱ$/T[?'s
OWIQ)-\ci\״#|9V/VZhg2X"2ApiMQ}G#OW"ɰ_>'ڗ48RMw~|NgowS	[@,I쏩^kyFSŁ
b[%eN!e02/CznNq?irĲ]S SA:iPK]q  8  PK  ]W            9   ch/qos/logback/classic/selector/ContextJNDISelector.classXy`f7l ˹xDU& %4%`aw,I$VZkBUت-x#Z}}߇L6a7&μ^} 35'Da$Ɍͦfٶai(ס!,0k1l$2՛رLMi+(^ѥ!"0[
Lbk3#P'RL0[`UPVJffGdc[+yխ\i\1{`y:cY%|˚RP嚻܍k[:5z}
~fm1p@e12O/pFk	vot8iX#%'h`Ls6)w=//i8]`t4K8*>4Rv,yb1PiLtnu"HL
j%dcz˄lKZXVi#B_e)~<a#P%`´+zҎsum
v%	4UGZ}IC)gݮ9(Z%TNE:Vc5]R3h뒬kuzxpq8HMLJ"- -Y=錹eS@k L}&(M)kцvJѐcQjϭBk.XYډ$u
]k.cȵiDX5JdӉ-W\moXVeY 놅~Mt5-QXLHK#x
;t$"l>O,;W
>uPXFY8p
bid_YqWM^[~[IN}en11;uјElm3,W[GhxXԄ%B!UY{IN$@&cRpe
)[@k_aȘ
.
#:ě6HT_E5Sbu=\k9[L?VsVouģ!'fdp[axRKVUz
q-<|(QVMD_XJo.X[æ%Kj>򶫃vܡN{VHTӁXjxh}:ދxГ|<ORbx;~|]5#zyqi>X=UٜI}w|ޯCCQӕ/.ou|3){\c0Q9sj1F$FB> cMJ!(8='58Ü'v$Wg22oy/Zj:cO	<`"u|;++6vIOɩ2,8V 1yxbљ^2T-oS1C҅g̦K6)Sila:%0s.Io1yȜSJT7*ӒVZo/ \)j=+eFo2M3EOrYH"/,]($)Мg,hq3IOŤh9|5Vs҄MeYNs(5 ejwZ:uFێ;'(3KQjI,hHQ82ĝ?28K'i`XgaR.C+o첶yWw-\7%3
"*xt[VJsmY1LNqzɫPzr@ 4dmN|,,̸͛c|<_rKUS[7ü/=4pfFDHkBP oD`ְo&`D`_~g+1K[ՈXd((Z|?_Dt]I[,^ԉmf5QYoZj$vԤ<<b,dv>2Df~ׂ {N"Pw^<W.!gkf3BaO"ZS$T\&&_@]W{/Q/+B5O`ၜrZ=_W5y
J2Gk Ad)SJ7Ǎe{{Eh{KGQMy?p+gkZ#=2Wޤ7cCõJ~ՎBEAskbQ!`,41tl,Uǂ.cta.sk0:t`hb|p#FڙRoaԻȳ\Xm7&`S0q1%\Ʃ})=C5z\[N*ķm&ì
7Y*A܁\
CR,C%oi6

""6]5t\7WfP=J19#yIrI|;?/~wC&yw(킉0
X5zyM,t# <\9 kNMLǂx'PIz'$tFn▆=hPب
~a;{ua/j˙:ޡV37bnvd+m*1<Q+|PȅkJPo2_෴/Lߑ#'02M;K+NfrX,>7L?7S2u;cjzLʽ,}88b1߭<D<X6@
WxaTqM♶_R1ö={_=3iGxP	^*
>͛|<Hqʙf$'^c|f[?sQZݢ1<B+?Z+a>&p];Ja*} h^s,UY_o>z+PX
kbXOk|yg8"hiyɡsEEa"5s)֏1		ȊPrgisyi07'tE	TaǱy§E(΋|oR+DDPKo  @  PK  ]W            5   ch/qos/logback/classic/selector/ContextSelector.classPN0hH
|DK,E G!6%D*$;~~ ,@@|A:oJ?ITV@t\*[,ΰ-0[W%_y+CPy~V9̋2ֶ2O
==PTzNz pIMN6ҚJŦ&
fkMJԚncqwd$ !F@׳$<Nx]1{}i
PK3     PK  ]W            <   ch/qos/logback/classic/selector/DefaultContextSelector.classmOPwOeST
]}Aj⋙%⫻RKvF?BD?xzͱ,k9y
`
D!{sⶡlϐ2mf+fHKȸaU;ROŵU癚:mql_7B5awsvbJ4s)Je<kF3(J1K$JgT"fRPp]
,}R.QW7="-+o#0#`d"gmn<Ġ^6Ȩ*x]4;!>]7m}}We&_w4n5krLG&e~SIz}R߇FQ8}
i)ѩyNr֠;|GtʼCa6.q(y;٠N^wa73
j-@:,t?\dh2=$>FL;Xu/$pSs	:i4۵FU@Vwِ
HV;ǥrA`Aa848>j@~I@|G`#x afu ||,l;\Y+	&譢@	OO"U
\PKў_2    PK  ]W            A   ch/qos/logback/classic/selector/servlet/ContextDetachingSCL.classV[wFq;D@@(:FbY2$/x)GzNQ$+Bk|3;? 
1#
+Il}4&JO n
=:4
lZ
i8-3sz&lV2wHOc#>nūYF]َq#e6l.YjthUYܙ
WVlv$?7Jհk0U-*;WWF$Lgܫ5Eo.i.{~>.VUٞ;ҰKǇؽ*`%_Yɫۚg$"%+$S4c/;*l;SoDpf]&4qt0(U/ǥGP5qCck&Ljʂ^˶[jL\ c)ֲL>0p\ I6YѵH uRgnqҦt]O|:"HPUgpZw묀vI JV	^y.:NHV2|h[33	\G.긄*cv9\q- cA
ⶥUv_?ё*OW^54̐>
oJt0)Ђ,˚-Bss6/7>-ZzeΪ9+ɜgJ玬wW6ow-e,*#(	66,W
Y+rZbx᫚2բεU߉(q~'"&+;>ғ>coq^c{6iY
Ө8i(.QIzʹ%vvHHC˞rYԼW{Q{i-":[1-z
AJ76O'ﵫJ?}߫ő4xE
KAyBVtf&,	_nѱvhk).UroU=.SS./l|
?rUO,No%؇<D7٩8Y΂sb(p	0Qo
6p"ӡ<ۛbs|ڻ!Q{
1<as),c8?'t.'Op30O_`0Ofq~;MI|T|79b>16a[9j~
rwb3)3H	$(Cp	A"by_+Za7j|K.a&hb@1Y
Qc(uK45kXt%F5\}uTr:p|>NǏ PK̱7  r  PK  ]W            A   ch/qos/logback/classic/selector/servlet/LoggerContextFilter.classU]sF=
RS"|(	 (д	6ԙ+ʢ(R>>I#1IьVw{Ϟ{Wϻ 0"2J4Q^6,ó|ǘ[\Qv,Pn<--WAh'1"8
O#gv͝.W;WM/. 2YU(rnZU\0F$JK>.<iV]I9]T&}b,34N
vD=mgE8
Tl	T٬,<%.hKc+֪sh^Le˥|KA]۝r]E=ZHI鸬-Kzld~:4%&F?%\-XRTbQ֢ǙRJb
Ne7:1	㰭ZN(%cun\SNSٗ@Ƴ.I"ꝧ}"(xYk-#9H/*>zeإ~-/70fz+OX>؍uC]=B=I,@^Obe'Wx8N*-+k~dpB:yuz#KO6=Eg8,/,-78ռ_ƈfAmbp.7NM|JU?_3zy1C:x!|x@L>u"jx)tO ]$_p;Ywʤ_Uj<X&3\S
G1ޡ"1$q_BxꩀRx34HYpc(8ޭvl6EPK~UT  a  PK  ]W            G   ch/qos/logback/classic/servlet/LogbackServletContainerInitializer.classVk[E~BX
TܛrQ p yl0dwg)Kbi}3mJ(efι3g_`
%u׭䏮B[Ťz"!:ch@&:v.O)$r;RMґj~`p3Z
&pavmlEKGxPr[$<nKl'-Y<0dvx{W]%TjwB+Apb㼁L\Śd'@m1ЈjSH.e/[\ݗj#"cpf$5P&Slfq.o[痝-یRhlE/0яk'C+z`Q®pɧ bDpBh$#&Fun;
BuP,e`ma; ʺĖ]ڤP*+ԅNv>abRG}PZ\G&>ֻMƐ´OLh4}ι-8Y/"g'Ӑv=C;A)'
?xƵ=cږTx)סrTPf}BNkXj!q"c0d]~s6SW6}&:LjQ
/Gv=KPQ.|iLqϒuUTù@	e]o7]zQK rY7,(5Aĕ<^^j| MEvKڣXaOm'V6(	5c`Zmx6"r\n|yQ{r1XyS}E%ϫ"R\N~ouA9ubۭ1uxߟEvV*Ae.;t a*GIe}&a?I]Eס$>fq$͌ơF:~4fEXam+i7<14Z"o?@KtC,W9>\}:`
akL"I]dчzCz1N+
b(WKXM  d
A[ZkZaPrFW,3V/0\ѿ?_9ͧh`0A4hyC+=uq!RDm(0=<c&6Y%6ad;Mܧ!^.q
WG!sdm8~}j;PK[8  
  PK  ]W            B   ch/qos/logback/classic/servlet/LogbackServletContextListener.classUSE~Dk5R!BJ5HԃAjasن%m۠_h۩3~or߽$%$~wߟϾ{ K&SFw>w|Ԝ]ieH0ٶ0ĐvTV^T(!
A~C#amግaX6yIωDl[]ib0ݓSH,qo2\Ta͉&lM*<`8W%q;O.2L-Qmec@d20v\BZ煙msWoٸ(qp\[,B6&10uN8{@z{C~:AepFxƨQmYpqH44E;gțp,X{K}@mj	h[򲻾,^$#[
H%]^ל#fs"-^I2*y[ޑʑ[?(%JDS}GMe}o_duQ6S'tL3MxYuce{
ވpa:Q'֥zXoN֔Tol6]Y,};2i|/,|ixP&wI.ZmPO7bK1vU_DRfSn4D'="ԂKaYƘ:Qfv*EeKi1|@ioH?#)|H	"~D_v1H|݊mH1ĆehZV.~!^btc/d~FnOd6"=\},_a&Kgqe&4i͒Sez4"I̒<XRFd
EZɥ0Git[KqY"&=.b#<ƥ PK     PK  ]W            ;   ch/qos/logback/classic/sift/ContextBasedDiscriminator.classTkOA=B]`<EDI^&HLCY(uwJ_a5Qv<s;3~`uDАD#bS*ps0W)ق']nʗg֮esi˶C4;oB	
zMH2d`eyixxJ]dHT92JdK@t\CTבf]=A+|W0QmǍ2KƚtTmhБ
t2L\
P_pOCb%bW2UJ>(n&ipoJQ\K˱MQQ8HE!crvd 2u3־(fvI=Ȩ3g2T$CTW9d/kթnO#0
fRϓ/QÜSeɲJu ܷPsL^sRAnYT.h㘻z1yM2,4<`HBQgh[Ee-DL-p:+Kb$֬Wu	ݙ.WakN5łzwΣ8TE
r>dFY3hf47>4|c/r4&k0L x(C_1yyOh=>F)YZ	JgjZ` uz纉k؁>h!aR鮃:c$M-tJ"z6ҽG#Gy駝8q"93}|DgyUG$vL$wfDn'⇸&SD D#CJ>aʟPK	?&    PK  ]W            ?   ch/qos/logback/classic/sift/JNDIBasedContextDiscriminator.classUksD='kڤPDڤ@[y$3_F¿31ot+%ysϽo 20lbiygmo5o;~ P*{;jUN Ǖ0'"CT!Qw`.C%]{8Tu
+,K)l	U^ĪjNc&(0	6apg0x%T(-L\8Apk<$!vQ|r^ˮ4
6p5`!YZ"J~Œ从X&$b0cP<ѩ20ti['vn(v舶dPB[<_Y
aB[BvhZzASa\:ͨc`dm[:F]{*<M|l_R$bi`a%gDwjc15T{Y"+~Ds7F;xqXɐ@*YDdDhĐ	{xoÐ0LJI$oa))T"4Aj_yWn\>LLv	1:;?-<S" u":|{_ӅHsu8N6<"*>8f7wڏhfSϨ<12thjͮIQ@0S8ƅٿGb6r>ww0_'@̢@,&[VS=OɝAX gX$iCQ0p9چL4SGEEDĺG53;o=CB0޵a9aGDj-IfLWE.ҕq$QhFg{DQYa]=u'Vf1d󞍡hbPЦ_Fz?PKy`!  k  PK  ]W            7   ch/qos/logback/classic/sift/MDCBasedDiscriminator.classT]oG=c;^YN P?,!-5MNe#A'J>TUowKj643sιޙ@a2,GڏYv5vOVwbt
lm]ClMQa! b*C>fk1lSM.jѫg]
('H)H4YR/.o
TZPa`/\T1#yoT\$Bnϸ!V!3	"9\g1^Gv{[d)1ݮe9[1G)<C\[ku]ERWG!7[#xCar<4sQ4#x=*nc!CTXTvАپTȆ TlnΝnye
:S~82]3Il+F._2]V(ht*-6d:>U`4R! etǙ
Cr;Yv胪B
p1?ۨ믧d.U
Fzk\ٍǺRL|l]p~qߧ!I]L履^q7Dh~Px9&_R/fFDw_mwhzY|E@o743y%ÿͅ[(+";\]^< /"MJE2@>wZ](y~KYQw!NVpWi}4W7pYٟd8ܔzBE
]҈Ƃ)eQDƻsW"U3e̑<)
i(g3
Q<1O0æe}6i>8Py@FWk\	/Z3YS^H
I=^H2(Ġ33Ȟe5l$֊/!b6C=([yw? PKeq  k  PK  ]W            1   ch/qos/logback/classic/sift/SiftingAppender.classU]SU~X>)U[6	U%44	H0sd70S^w?8=%!0Þo<u߿!
Q1[uv=arWYezHl
*'tZd$!c!N:}i[~SZ[ZP8	%xi]L\È/ԊmO6Õ1L'
=qʹu1ab*r@xh"Yj)Y-3q2	pR	b|h'x&>va0_߫ m}bćb:yΝ/l1j_ߝ߷ڡ iHr{]v_qGVB~;+ťͧM\$aք)(.¸vMnS7 Qz9pCX~Ω.Lw{uT(Xv{]	h
VzA:joE$+ܓ=4F՞8'CLG!uymճSq顠=Kbd//tʲFZQ<+q$+-GQ+җ͒㸊+FMKz	V.oU0% "sojgzYFLQt1Sl
ӕhy3M[ץ&P{nu{!T@z+vs_̃ebUjcxZdAWzheR/~M0i/hg[0~8]z%V  m@k g0?)VOLH+2%G@W!zP+rњ%o1"9J&Ci2;_q3}dE~u(ȉ;I_<P
<'A_xDO '(Ҵ#paj:SDԝֶe,7=FV]5s 5ᓣ
;o"aX;|1Ko/PK"  	  PK  ]W            +   ch/qos/logback/classic/spi/CallerData.classV[S~>VqdDMٱ16J@Leb!\DHE,bͲwW>Mۻ^ֹi7If4ӻ?WL[	4;>Ul7k؎'o[YGa
{j׵YU	DF
ҳqѦ@Uю=6g`U+{7hS}MG㦾[ްGc555*Yw5ԝ1H`NIt	EJ yGg_zǰqt/0܂5P|Z=ifhpz.F=*A'/\Ln>7=$ppwfHᐂ*Ǒ-exk5t8#(zm:ѝe}:<j;V5_UݑV3*q\ <q<M[fyzNR8"Z)|0O6K
Nx{
D
Ow4vhi=Bc
!aH[Ee-7=?䉳*Foo͔Q2dѼSH p^k(b4>_LMu"&Nڊ,ɸl@Njݒ9o9+K9fי3秦f5ƊS.NPP|(C""E;j3So]Y1亱
?VI=`&	CVMh'[mң34]YfM-

dt.E*תJػsl	/5kaJ
Xvme:Gi%,ALjk1EX٨ZWsDhGW+5A녟Ӆw<ǨRoHO<_xn۵Ktb6.xٮ9}qζ=6{{Ϗ>C|c	>ah7
2zs`׆`khmvo^[ArkL~e;~uWm?	Oy{.J8Ćb
c?~{4Wܴ>]nys_&WYB|B@.W`9+M)q7ν?dxyP(0	*I;]wɇxxԤ2I$gp{_|x.YTz](=N*doHd,p2Fdu;`B% Wx%[ a{:L6ȟKf?)DWxk&uYLy\GC4*XD>=%.X5/0gQ\ݠ_X1#%  %T
AT±	)"!#fۦ:?rr?sL?$=D3ew`!+2!YK5PC>/&/{}/!kL35Pl?.x(0y*wJcMpdl"d.E3}"C'hlvf
@և-`g}ݎPD8]fZѨt|ĥDNB^&h[
U~}o kK|`Ϸ4?@7|7qT>׾o[PK  q
  PK  ]W            3   ch/qos/logback/classic/spi/ClassPackagingData.classUKoU=?&q&umi6*ӆ1cwOpgRϸB66MT"EbX{Krm821ww?
2ndC<MGIܶ2[eޮoۍ@ 9NpE ^
 2:Ah=ly[uhY4L1|֖n-X%7vkXͰ$8#+S@A	$/,Jlf0FuGP7j_1	ڲPPqKFYq;Vj;^ȇ/\ێr-pYX^Ƽ5ձqϡFHlνݾ
JZ5h\M-h:eVW*ţݙ	S5BڃfÇ?d0P9Ė;b`vl(~/pI?wP8Z1X][^Yh;-3Zb(G^}Tmf46iֽNa/92~e.읶M]k7p5wsu ";ȩ|/Ayec䓗U#F+-sc30ħ ƋPL0%EP_
TC4!w7
9NC-OG
[Ύ)|(=򙊯ŵևoYF#yM.WzL}~B}dYkLd7^I+%%Cz[|9o#QԾ-I}^
fUXo#X'.zXW%[#V+jsxS	RG67.$XjDKXPdq
Kos(=/bZPxJQj'!R&-GB-?A"[z2oHDzi1NC᧾	3ysߪς
xF@ [mXwﲤ5qnX{}c}eYWYs׸E:FdlIF{YTx	PK
x$  n  PK  ]W            =   ch/qos/logback/classic/spi/Configurator$ExecutionStatus.classTOP=omMRA[G\aaJj?'Hh4|2WN `w޾~,r"|rdj6ћ-[q-;-W̊-'AB AX.2/)z!	a+|Y/֗K5>}EħORf.d]Ћ(JV[
K k"q!13=@
lƞ
q		$	yOwf]+KkںvW[.2g2p$sT}x[<C.|cOaڦuS+4Y[?*ƊUֹ~`*;W!s&ܬ+z$YRL^N5:=];ܥ=/Hj٪s}	^*4}f9y?b
{$ ta)ί)@17O#EE#}aAo.Iӄ|4cc'8|~2K84$P:_D<>x+r2Y[`3X߆R+@6BxNF'yq~/@{/ y_1/=d(AR/tlNc'q^s.ſPKk
&    PK  ]W            -   ch/qos/logback/classic/spi/Configurator.classP1N1MG.BI	hp"
|blm<G!6(H4^ʳ3z 0@pdKHQZJN]lu@0ZWjlrm¸-"g^77k9xw帞l_.4?:7iJ(硉\-ɧo
?US]f+gK'	.R;(1'C	*Ȝ~PK-@M     PK  ]W            1   ch/qos/logback/classic/spi/ConfiguratorRank.class_OPƟwSd /['tXΚ,S~ ?ηBxstTeq:ceQhdQOhJHtLOŕ0b*C	asI*4104YF 0:q.h􇠷<nc?Fmʶ4NP`Xv9^۷=wݖ绦s/k6;z@^0}U얠3,א'"Ia(Q̶X牊aEXc23qT2)},4k6~خEX$ÁTܞ[<Bi*8j[5B;aSAi1ϕ93/<%^dxyį@Cp;݊o56X^1Hb; PK  
  PK  ]W            -   ch/qos/logback/classic/spi/EventArgUtil.classSn@=cu⦯/
$qҺBH,ZUH),R*+Rl4k~
*Q`ÂoB;iB	<{9zp66THĒ0ġqlCn[cwln_Aaw/+%uîF'&ođd9sǷLNF3h]/l;mxV;xF[Ec8L7s*&R04f`_io0$B$m~Ҁ9ː1箯njGi>WX6ClǭqF{{T%gu,('&)'gBӿzCqrv[8AF>Q^[0J4vf$bzhNhmv T2wXAHhSo@&M-e0(4=faZq[["hu+DB\C`d8G+f&vSw"aps4&Xe籄(r־!hYv
/P:C1r@i`){E.4V}#W*T	Cz%qif1ǩS~d?A䂼dnX(L#qy.d]؈)6CEJVR"AsBSI\0tP)MP|y7TI{mVJh^
#ZPKm    PK  ]W            .   ch/qos/logback/classic/spi/ILoggingEvent.classUsDqQ$u-@%P%88a"_diʿE	O<71Nhowݽ=rq%<'C>u܀':I;Fy~ND.zB5|*dOH_,4	wzm+a
6`3\`I>Tid2IKz3W-,2GshIIB6`-Ż	SxUoÂDq]4 K;Yaepo^$\U	)E\A\)x{wI/m)I2D	qΌ=J=8Oʖz]ٖdW.WJ4E=x!SJP{)BZxArJ@*WH(ľ䮨Bׯ]:<v㧊\Mu_nu$3c^ua/e&͏o,L7ǰM<
UKr1򽐫>'zvjl#d"ܽqٞ:Cۥ^vy%vbV.kMS-'B7[
E=w_Y#r]k6er
bيz۾9,#C_-0CWq1p$M#oem1+\Ś#!lR'97Vk^;.ӵ3\,(
z.w({,G|B4>U|)$SK62(Za0?Cҿ@
=d{xWQ3mz6H+S㥋6_~6HfC|vH4 PK}o  +  PK  ]W            0   ch/qos/logback/classic/spi/IThrowableProxy.classPN1+rM大Rbj| ucbF67o/ NЍPc8s`=76	yϥkRt죘uSakS~5[(Y04RU\(E䓒N)C8 })2b3)oTFe*/*3DpN~02Yy^d>ߚ4[!jtck?,ѲsC%vi:20p"}u]a;6Ѫp
;أI}k8xPK*&    PK  ]W            7   ch/qos/logback/classic/spi/LogbackServiceProvider.classViWV~.bP:nqpFA*P"XJ/L $cֶG9&a{s>y}YAC^H=ݔimGJۖqsU4IA%S&򩉅%{exWŻfǪu
=ykO<Tء`6pfChHcΪI^5rahωE^2
'2o?]JBBڭaҚ+q"v3Cg=ǰ]*!߯$e$DwNx
=ObR ̢p'hcY=y#爆8кYp Sv3ZaگC/yN`=8lץ!SJNeȬ_[C)MDE7d'CM܎nPN{pNg/CW.؃UG%&ѢWp^Y,|7l.a[C#0E.1+J3 HpEU
0Ȱ6%fT\(sNnZ.8C`
di\W0a3wF#9[n1\OX2fZVFyG(n*@CcT|'	~E9Îc;s;)_&vy؈[R0eL*zǻjRCQ}eu6Fo
KjL
ߚN_ʎN3Dk"8I)G*+'Yd2To,7K":oy˩uJD8	7YṾV4CcaʂpeIY;\l
rnܺS&аDdoUQIRQk?h	Z!,*{pEe=󕭯RQ )$rEc gfxǪYbĐg8X̤dٶz/	`>c_nTFD.__)Z&7tS4U{Y
lP1rpel{Tc0~\uf?*-t榙5<Aju0䅫{joUoVIф}X=@ޟ/?ut!]/WFFcS=n([``F
͗
&^e?Z4ɏ5$qcI4=q)'协s$#vt8L8t_#eP!_@58=sr8OfOĀ\{_OD[0
Ty{A]'_*{Iv牢p_&kyݸ~&q.JtX!|dg؋閂KmC
w ߪ4R7@.:ƝuKXc6k3q24nwmomm#x_B3s 19=[Ri%OPK?  {  PK  ]W            1   ch/qos/logback/classic/spi/LoggerComparator.classSMo@}k>P
Mڄ+HHDHCocc_BKI{3_ ^k8F{m[!C1C_* +CQ*C7|˭ȵw;`;<}Pͻ0pNCcȩxnߌ7b(Vyj
KV#R=S
<;\\7-%l3Ԗ1q)QF8=I|zSFz1gIWf|Aw=ɛŽK7aϥ>-\TKA>0\S\ȠC:<rwLLI=ÞuA};"m΀c<s=9Z*mX'W0,W/b/? KOyYF6U^NG&.
ޒe/=M!InJL:I-N":o2uz-l^	Uu#VCa7v
$DNr'Q<@UkL|@ZQ#J FHDE=GPK"0  V  PK  ]W            3   ch/qos/logback/classic/spi/LoggerContextAware.class;o>snv&FbldL}"ԊĢTvFĲDļt}v6FtR j.N-A1AS#PZk12p%e tm@0201+У@3pX@ PK     PK  ]W            7   ch/qos/logback/classic/spi/LoggerContextAwareBase.classSMo@}q$4SBk'"pPTT !^RE1kp`; W"	;K4egw{3?~~.)dCA̗~ha}HE;y P0d9m3uCePCI8gQUPdŸ<l-	Vpa9M{uݝ
/zpd~^eqٚbhYhϴ/4嶤vk@E	xFKzN8M}䱄eXe[(:4U%o;D{.y*mnN|Ltwg[ez Ac̺b#NDǼ/.SnM:V|FW*}Y9^Ik&5Zs5Z# B#ˈl]&o:!l5RN5aX$C[DrNP7@i~G!}'T懸%H'jTKY@|jcZI.(y:-5>`+
Ό<5x	JPK5K\0    PK  ]W            6   ch/qos/logback/classic/spi/LoggerContextListener.classPn1C#5_58]
HHT'E
VA| >Dek	+9Z/z+?}WR[2,}UQ=.w,M 0کVJov#L@o*ǭX-.&?Jb\5tYw%ηKoK[ZX;MV3A
9
>^w'y_̹PKzJ   s  PK  ]W            0   ch/qos/logback/classic/spi/LoggerContextVO.classV[wUNnӦ4\ۦBElJKJ@@P4a&LXVAkZʃKk_곷̤iRds}o<	I܎"0";}-]Bzqw"iC(ZЪ 
|1}r%W8F>
ݞLWJAw/jwuFkfa1t(؁NN٨-
LeTI[EzfKUmwmA+XgSqR&k*vb@[yڎ~'~ڰCP_~h]ޘQaGT`Nq8庯*m#Ƃ7LFJ qW[)P^sn#L85˖&4{Dfna#
%!T-E!_92-s1tV
d|-(x9v˼:wyT+Ss+6K6O
fC9GG0˺}'ݙ䬑9Ɛ[4(]j+&-N>R=N,sw%zku`Jzabudv]Z\k}~WSXӞu9Elݩ8!YbYCt7="AsӖ:th8-xOvTO39 RImI#Q|(w-
󾵪W7w-{Mͥ.̕XjDe,ꃦ
1JY):gTB6(Xfm}^zy~xAB0O`^qM>oYNKCgP]"!߻[btR;
#pΛ6fo379S~8+%F	n2(ъLv]<$e$EH&F2 9VksSŸ@[7#9=@8ڿ񌧼>HT %htl3XwdAu٦.蟡 rGҗ,~AC@#M`=50`U?H?B8d"|23b6狯I{JEc3}ǈ< E[G@mI[zR+(iʆ)bXDI3r^A\%Q
/~p!]b:=L[ Щ Y5޺մQ8~NRFs1BxIGM9>'x>_ؽOרظK,/iLWvQ,
>vL@DɑcT@4G
|uF icPKS  
  PK  ]W            1   ch/qos/logback/classic/spi/LoggerRemoteView.classTNAEJ9ZA9 <1DR!DIYXvqwwHފ
$%'QVkٙf~E@PAHEm5Y]іKkrm7T+ʐ1VǎYNagijyR}h![|໦]
'Tt!3F>뛎͛^xDG^}g;F;>F7-h&AW\*dl[:n@N8!n	//3Q0,1t5=?B
W=Yc:ZnE:̞4<%x=_nUyxaۗ3dkvT$MQdSES&ҮiFj2y :i!~WM
aL5JeXĿH)S=}S*){S+BK{$!3DN5Sת{F1JM 4BH`OxBLcbhCBvބY/:KgvESGG<ia MOo?9$G;QH%4NH`rw`?	FYlЛ+&MU`HQ	6yD5:ҵCJ+X;uy+Gv1%;tn8Po	:PKYɳ  $  PK  ]W            -   ch/qos/logback/classic/spi/LoggingEvent.classZ	|uf[$˖1h
V+5cbc[Ad$xw$Yٖ!`! 6$hlp!v&Mz&=BK+mJBfvvwvvmʏf{w;~u Kē~TRAjvkḖ
ةG25bXf@e}x|ő.ǍZd<kT,gƒkvIR?+90kzw	4
fҴۏYSPb6-b#
ZBh
sceTaMqIûY\Bj[)#AbUVS?G+03^䢳cG+
8
|	#=]zšPEX.^RjWB@u\߭+i~/I.QRij:-Rq).#jщhe:M
4nslx+%!7db	=7"3I3'6
,Nr$*%͌ƀSZ>,Wq5V~9.H댖H(9A>̎^-
&dD0ءѓzZ=guiDݵXk\N$ᾎ}ѧf
b[cp=aXHfh,mvuܖW^$.̏][@{ :[7~bfyAOVڪbӁ2^(LF*n󘹑kVkmME	Z]#Z<22z~V* D	Q)]BZ2"czHF""d6I&
N/Jr`mMI@[wy{3X ܏}Um*>^/W d'o(ԻPwR6'"
k[Hv6qNA>У=Fj<+К[Q-NkFT(	]OxZעSqdQ\,=a|ڸ>9' 4" b& (?,1`op-GU<Z4R)kmT<#+#ƪ_
KrA30$tܚ}.j79o|*eũy/p[H^kZ&G￮E~?ʇU6ACoWLk)ZAڎ}X441ҁX霆YV.c*Uc\֕*&'T|X>Ne"iF]7ToS,ӜYy\RQk:ged1Wi~JtU9l?mo#`5m&Mfcǭ,sW`dt?S}\X&Q:PncOhq=mEq}kD 3cC *~W?R_+8H;czPkDuvZX瑅<n1k'QMȖ~Uˁd0H')=%s_Tj0ʨ[W
{K7KJ8򹵘3OZT+%B\sFl?W
~#;bAe'RRO%Yb^sݮ^5G鈂:#jTqZ*'l̞Yɦf
?SԒMJGIJ)Pqc91zl=,+A4_ư^*bu9MIs"20)_ɢNaVU<Ac
EJ.sEDkARuz`2Dw |A܄6."Zfs,3Fw2.f%mB5AE\DM<[8d&D͕EPi˻bMWnQy$1:~,iCCA%kXK^bS	4{zpôүxZ\	fyҏ==FvEog87Y
)y*NQm)BHP]P:
zn*~Ǚ(RGrS&[Y87{^=6G`yH)HQvƽ1XT?Yws!'SY\_&<cd-ಢ,bbi&P;DUfl?mN&6^{5aTk&&1*26GtbN͢%~ē"»w~݌?օ`WV|s(;[}͆^5WL2ly凍^0)L=KGy3|[@7PO^,!+ڹZ8r(=̼&aoh(~	nghidtϢg]gɶ!eK+/9l(O_Z?uU;ZJvT)c=B-?f)|`"%,=	ڷ6Eܗ[iC}HAc"8x?*ȘTRzf̈>qH`D
$L3퓭fW`'.o(vuw(صHHy]u5a8Gi|ZbƸn#R%5Ҕ9Fjh\7c|"U}) jm[rڛLڿ"TU*XHse
?D}c_\y.]B>wy2
M|[^i'L[!LcN{%^l]Hk|A/lDZ\NOաc/KLT!#.;$D@,hZ{::1s
|mP̟ySh]2`j
)i|rjQqo<K}-Sj5SXR}D8-է	nm>MSb7Y7L>V<0C*%'1Ђ[цЎX;qywc``E`"0A6(xL8zqPAw|J\!K>%QP)U'T˻+	5Mқ$^ʏH
BsRRy")%71
۹vKc#+Cw|
h0TMĚ)`$<BȎtsF
I۝3K=)ݡU\E8c鮊JI1y%]ΗO5H_ ϒu&|Y
XԎfi)Flq5YBZ!0$uXi˾hsSylm8	(*Ay4)"wϵKv豥"i/9/zEX-cl@+::1<:C*f _A#(p,OVGVV\SnKHy{
P
^##cZ0d
ZV(eRm[Ja
s06
d@ln-O^GF*&nt$mFjt6,EGz^RӘ:O74/aDȻ'@ OC;!8HV,3t7em^M)r-nO=Yl-YUz[I韑?'e?([D6UM6ӟ6j+G#	l7x!d!N]U"nN؋(eJxfq"mnEjF-UnUX1VS͉|vf}J֧.RVRD%f@* "2U#nU7g3H6k'P	YP
YE*Evͥ"OEBxEԓX#ya[zBLQd6k)jsZ=Z",F=}>OݖJiVH4וTIbX,V
!&f֖⾬ Xqd>U'I;yPU~k1.=*VyʺqN\oNp37BGX:9Hf[*3)(UϡeDyܪQQMgWr8v.rCy.a^<K7Q)2B힧4^fNy񑍪DGo*>y\ FL9q}
li۟;/8Yv];$w^y<1rh4~
<G//ҭ:}@QDFEp\$ _NӰǰubv
|0{ȰC{n?"k?:'8#EGɠ4gHcx1z{1<MUT~6%f̴w+9Rܴz	Q y҇9)^s<4B܉[i`a}YXޙ`lgt[Ӣzs'i1Qb=R"oD+u| :$oPx3v ;]Unۢm:!Eq15 
	m']^6<>E!B<& tPKaLk  +  PK  ]W            /   ch/qos/logback/classic/spi/LoggingEventVO.classX	xTof&L^A(KCh2qH0	Ab->&/d&̼a.Tmj[wU)Hm.(`]pkծjkj罗dM޹{ι<{ ^
>*Q=U۴j6rFbsjZy
ݵkhk^Sd$\Ԇ]]XW:#f5 (0E
UP3
SvDc(PLuN>eh(H@4t(Ra4qx46P](e[j
Elf?	+Q\Dqڝ0DTj82Lo$
1E!Ol1Q[`aX:JC)6IDT[ɤe)vZQc	5ĉL&%R=f]"oT(vN(;,fi8	B}0H|Y
1=H"ILiHV,jӨ~Onq600_ghXGIaPC)^q"By*J,M{q˽AjqL
!,Q^,4,Y
dGh1^Z6
Xo,i!\l6xcI4(hU(epHZ)#6S=P#Љ._4r#^`9Dڏ5Qt0BߪT$ڡpN'9~BX5b-]af{'b%Kj0bnwz4j$nū]k؀vgW]Lք6꣆\)K/h 2iJM<26u/'zt4:Z%ԏ4|	_V8.MF;OZ]mDZqC`"PhZ]PORz
cWiZҼK}Gf\ oM
J'gi;z7ޔI\atꩨ<1
!?np\	d|pcHݬ|]P:*8Mz5&e;ό>;4lw6x-7.V5lI}c++C
`;]'vlw0avcv3[},;4-/2zܣ^=3X|,-KCp`l8b7^3ry@CT8G_c0a\1	j̤x"2hp?vɜps4B{|;h؋~iӳXTh0iIx0vt4۳q{ &͋x܏X7"?aԋxHDl=߯V)T%<OarV-ooօuƕ`vf*A܌Zas汳͐ɳ6[$C?tG
i瑘[mO⬿m:ŵ5#S͑Ɓ"2jC8NGϝD8cn5ɱk$SpQVP:dR;Lܩj;kf'nmc)QG,Wa;LLMzBBH$60M&
]x5bp'ʖC*]',b3%Z9&ACo.k1Ud*֑7aE1'J&$[ؽj5fx*6E<'4zw$0QiMi]IVF0RU/>U2:k'7>HG2hK_:Frr(_uIn5\]G!,d
la/g4`,)En$LaQWâ2L62_~1װ
?eM\׿z[eւK/^"Tk]k_"ӧ[m}9Z_>Vz[d`oZ#;jUB=ZUj67;-XMx](<bF	4F	Ut@Sxft@h@@E5(P@mytz Ff:9?^j,[m@d@B@ME#fXj櫲(mr\v܀sp;*m['~ޱV n3wDŽY]ܭ?t\d#\%gG\'clW鮒&^J4E"E'{}S-~_(6	Z騏8 hh3/`/P`;2mo&Nt1lC.u5].ıl]v!>?JWb>q߻^ώkl&d0)䆜Ӆ~6Pj2sE"˽\夙4ߝFW
w"J|d=[Mt%wdvtWx8!:1{X&]S`A6WXah`9,9bzm55Rv>l:9fw<ʭTɷ|>>ڇ۷#t+<j׶#&toɼ
.{5i7#la˒l&{$Oac>kYPMI8fjCHZFc@11Ic}GJ#/)fNj\+ϹlڊݸE	<܆nv[2oGGgJGwʼc}-y7<1S862Uip*gEB8,"ޘGC,piq:{EؙF'>!Zϓ,_RO<TA }+kr|&]"殏߳+V:2olG@>;ob"㤲K8O|6P8'{|p
	4֟T1c
y*/'2)1p8z97(/-RhG*G
zO:Nr:_]s'|5OAe&_b@>t .ϋϋeq^aWWL\f{=wײ؅rϯhh.`dj)XN,'̥1]x*x2/罩Ňɏˏ9BdzŅʏUTJ:޴[T!nU#p*=DQxT^5
/2F[aݞwANr}aaߧ(HC,p*_@c @h`PK$2    PK  ]W            8   ch/qos/logback/classic/spi/PackagingDataCalculator.classY	xTofyKB!a4dDq!$ 	i*huiKժ*Ҋj
}v֥bR7I2DC;{sA 9.[b.2"h<Y)`oP*Pe3X˺pzGg8[5@ȎtK,}[8rqK$Nt2ڲ5L=dcL"%#;8ܨT
:#@~gG*qix[ؐJnd3\֓
G1`3][*&X|2}c&DRaM'"W:Zc6jʥd2eF@9ss1O4mo
'1&#ȿ.BO,	榥?sSF2Å8EҪ+C#3)F~>h"0WYgVD-8OtO&I`f4וf'\6O")D[*0﬎mPƭ=֯u-eX34t,rS'y7@o%Vi8SGVLV@4rg\4]X
ku%V,P;4
]l
sT1%;XzkraԴ^˔YJ(
^LуM bcp$ӳ+IV׏ݻl,QKF2jYx6eܨ%,*3ō83S"dVN^olBqǡq@nlq!\Jɞ+>0d6@bD?OC`TEՃIp&41H1#.UJ&KB?Z8H,^?5ud%"@)hiG6#O2s+s
HƁ!LzN7ݖR\!P˄Jǻna3dPɚxeV皕R޵:އ諔Jd&12sF$fv]C-7n|Mƻ;Mm8#o)&|X:>[H-pSlB,9q#Ӳicn
Cbd?IhL^>1%IAܥS4c3x1_^lJ]ѱDL"D"#coXTOtv[:5<^,傸_ ϕߞ١Yy8(!651㨮Qv/cfl/sQj\J%R.܉'t<)$4H/Iwe|E!ૣS6iFO;Lۜ]&|]7Q\gUͷt|[¥8\7=<K.hkƍmttnYr"wGÙlX^LZI%vI6fW#{Z2bTT~&Q`Ds[On%V&2]pwOڛI=*F\ᗜOF$g1 1#eeSո!\Lܬ$U:u<G`r a 
m;AIգf*Qgq\n4_!tjhǵ<m徕,\jxPHE̩Ȏ5EFH<.EDcCHœm:Kxv}@u.`LQ+1D`dcį뜭}2"jF22(7(cue*kb&>-$,h"n/$x_I?<Qg"RIHe6*I78űY*<$% l)*P	sTh9瀓?෕!{({ծӥN?H7	?RCaL`@g![V߅Y~cq:skw;cpG@hﱇW.I3|48f2x^@]y&o:l+3}\BP~Yrt9zo^与E*
⟠FaqLSH0*9Q<u~4.[{_Q="@""N[q]8{q0VʽCXcX+yK>91Pս݋˄ߴalOvɛ|{tH 
ȋ0Ay68bt; q
6&p< 1lN^Y؆mu܌씻Ij@E\N^ x2DAj5~Cfuc~ߑ
|6?3(Hlvzs#Ƒ>]sg}	Rzy?M&IV8b5pD!IjA5GDR
0B^譜
-+tsr˨i^_#S	I¸N0iMx#L[	oM5uPCW 	5`QbS0 |L(0sUP\;\Hv$8#`X(7{^~$Zz(ǓUr
];aS,ĕ8W1ߥ\]i*;)gKh`L)eqyJ}7Q` 5RXKapDQʭ26YN^!8!t풀uH h
ض ,r.A<
fy{/\Ma^K_Gۯgxn`~?ۍ}9tG\~F%|TdTH$b\qRlG\%GBG-qy9!JYHtI?&-v+{-z;f3xmpP>PMyVuxXRyqM;ivùPH9/|{ta\/ӋIF/`Toeܼ)-hux;y{R"2Nr4ne=淽szzxo~V~ 9e
.d
ifQ.*<FmF#ȴ ՙg
7iME8*EXы<n%'Asdg+}=87ϭl_8{j?wn,TAO`./tԐwY ԨRL=Nԋ*V,rT8BvB{i_Ԕ܉'6۽y{J3J\sC^Gj4U́3_8ħ4˔pFzpK? ls3$gB|oÕ%}Ǖϒ8PMe3:GrFZL)jN1]PxxLF{R	C#c*f|=MZ'z*0&`p3%
57_Cb" tYM/@+ūa;)3E<_SR+X s%r+LdxT@SsqUUb*LWU|w]
GP΄9[3vb^eﺛ"=;p<BM'VQdPKb~2  w  PK  ]W            -   ch/qos/logback/classic/spi/PlatformInfo.classRrP=bBֶRZ\:L4Eg@tRCR.}q.t\ >zq\{? 
[i2OǮK
({~5.7alp צ83>gLhlG!G2~|r
ڑcW@X\XK)72CwIsc
UKX(ϫkLh;{M"/_	-
W(
ɁOձz}:|z;DI_WO@m[L7MvH/#/gF5y,aZِ9&ɈR7!Ɓ<!N"}Ef:sXUi+}*5RP.
)]ό5\mL
"a6gv?C˝V-}C
OJ:S3Gj`JƲA*-zo_g5֩mP{j~VֳZXii+B++v PK    PK  ]W            (   ch/qos/logback/classic/spi/STEUtil.classNQL[(G~,X#Ec
$P.LNg`%
7&F/&>A]3\s}^99_O? A& 0(	t/UTmekU}2R*AZÈDц@WzU^l8/zYܝ~M5+}s駭@g]Q\AmGٷ+io)hZR3΋9+ZTux0z7U:󆥯EP&3y[SM1Ol˥[Ujhn-m-9jYԳZxG7h;CwUT~&5B=')\J1v%Ⱥ]s4}p9=\Ǹ>
 gYpf>@"C^`s!oD ̉\z0/MCGHďMf~CYRM{|q@2zٹ {2aC`ĸFg{X抗,
Pa#=Id@R]iFqӧ^L$p};4Ά)eݢ	G!mFSo@g@?΀g@c%Y.1PKhB,    PK  ]W            7   ch/qos/logback/classic/spi/StackTraceElementProxy.classVYsVnG(q$$1ai .amҐ%p-"d$>)t:',nxFYs߯~pfiG@#D-iW7Kt]0mӿ$5$F7f-KU5V+g曎@R *cHvLIee%A|umZ]ӮHWC4Nc[N$aI3W3ÝEWjR[ү77I7:vaH`''nEnѰW>ػa﬛˶KZjʱ
3*g/m8ڎ֭ C:" Yٴ@~nZ
iI0Ֆfm(fT,+;#-W򳌧$B;8NJ1̲
i6wu*	[എ38˒TJQ$㴆UIYq!q,,ά^ЗkJR,ˢr=rswvZ@\^fQZuSz&UUL*S}sEMϤȀcFkKp:ض-
t6HN͙Q_))w6=+	hӯtxjbiۈ;<@@]iͨM/{"5;Xio$MZtJlQ	\vj<m؉@Usq|wem^U%	!Hu$>C
2h%ÛNMW;.;7[#l&s\Z;).>6\VSҲL_"}ֶ<

aEtb.'p;p󯂮Ƕɓp>çW9&8!q1JùKnz~YE- }FFg
|pF`?\vhHils6P^/#^?Ǳg
ï/0l?߀t
]
|(+y7#'yP<0<$l6"ܛV[)?o?Gc/'Mfna}8MNlfh!af:>Nh3m)ODʉM'6҉>8΍x*![ͭ!?`1+RcS߆:X\x޹A%XqLidiv,Y{bZe
/2yv,d 7(2p{!_`ݥXMkx6$q(\%9+T_PKc   y
  PK  ]W            /   ch/qos/logback/classic/spi/ThrowableProxy.classWS&IiAj@
lZWBji)&`6lt"Y7lt/=I&
|y}5xWF^uKzҢnoT{61'$HBQF	jwp*EByFф?F$TUf(SMz'J1S,	}F6zཾ`XM$/}{~'uč%ܒV}9
e˸Q¬}{^]Ls<־;cKs м^B͎k6^`L$cHh!PA%nbȂj84O[iZf|HB9&y,VHpi_X%=$^503mjnbq=gySp+0ɤNJXP&k&Dˑ^NMݻVNɝθԚZpΤ$4j[/rTpYIXh,s3-K
ZIB5h+!%LͲZzY=Rt"4萱YiVP Xewoڪ T	gn2ljA#jz4!J#.
>Ja0{)TP[2ң{F$bD7ĉhV"S%Pj1WA4-F7q8(eqUF\K=&ZF-,'=f3F0u<2ckIת'L'Lá5p>.4C.(ŏO* eB?YãElZAbFyȳ'cg|#bVd
ԟ\9U:sQ%,~F']`
/K^VjV4JQ<&: ૞JZKN
d|z8ѓc8.	_
|uÝm)2)aQ>h`Q3!>[xWŴ(_Q<҆gI6Sh*<YH5hV%O8=gN+x^֖݁掦-M[] {
^@ֹ$φ`3	@7|4s(+
ǝx	2cdn	Yl1h/K\;Dcۖ],x"4gQ-d;ScvAvq]|7=!f833'+mS@a'cТf̜S!il\<'lgccݞcKuF
^mbC^BӖbz_T5qx-IyT&ڔ3fWut:t5)3SB]֤\:umv9Nmd95'b!ћ'#`Qª1x:bZ=U{,DxP۠eT"2^F`8FW Sfck	ZyzPZ뛗k[|qY:z
qk# fym0J,WtZWo%UtN?7a]R㗍*0f{΢|.m <!|xՃX*^b
i)z	yyPZ3UC5cV2¬qVᇖY"P`}WX`} U]\׏`0tM5Q`;j/v8<Q]kƎA:S5*=/aW-EqmA z)aoeA8=e0}u.{]jٶQ(O`ܱUV!:E?:OPNWqatI7
G	q/ŃaDnbyǄ\41w?s^ܻ;	"DbDD'a
Gpk7xx
;6v]x]-I7N5G̭ToCcfYC	~ʬ2c[
^e~=m92E)L˸Dx
R+d	T^a '|~|ezKC7,PAHU h!R8ꋬM\I==\H^e^˼//<̍2_ěy0?-Ofe>ü+G2<̮\#yyH3wn_%syUBf ;B͒ZjǹOL^E+ePF\AiaV%Z瑁q%|ϧ(	vgX	'Y_Nhi%n$K}1
`k?&Yq}UdSͅFj{}	ZSn_V8늼ؗt
6ps밝}鍳8xv2s4><>GXxXK8YDE**^9ة+ąV]QQk傓
Cs(ҞYp PK5	    PK  ]W            3   ch/qos/logback/classic/spi/ThrowableProxyUtil.classXixT~Of&w&!ad"	h4E1FM AFC&KLfƙ	BmmmӽպR RcWl7k_>>*}Ϲ73<ys9~﷝{ymg
B@پHx$>=όf
Lnnx4(.pUn{Tȸ)P2ff2HsmPgngn)4nNL[TC
E6ݗH7'F):IcѦt2SӓJ8(]@֑JEE*#pÄ>
:*\}CG&'FT`bb"ߔLid\	ں^c
EXR5e錩Oe̤Re@]*z|NjnyPZu22[=怎z40ɜ@e"	7iYjBefMF!\V޵p@\	X|ldl|LI+npֆef.C6(MT:H&Ѕ6o-ýMjnFuX/$,!j拖(7Jeɑ}X|S,t!lp\{1Dl
LM[

z:z;{l::GlB6,GvܓOV/",F5Vd22i&6]]ݍ9	~7I#[.0]MujI^"鐈tȈ@Um0?:LXPUT!J:bܱ=:5X"vExstXd`\bIs1DX3N>
)id7jt@Dnn
CRu< TbNhD2$>AVĵAeDA!Ǚ6i2^/T:'u|
;D>sYtaVF/ȐC΍/ߣLuL)YCr5I/cx,`78
m
!k!OIzp77ֆo,و]SJmz]ᮍ~l=O;O@OOo/q#eC`;OAd,eYKu brntf聦|9jpH>]U>l=E%#%׷ HFR`cb$~%t-DmI*5e.F)O2ە;k={#hʜF%ì,֢=sE-Hzyp~;e@g3ivK'6)F'FE9maQMOo.건ixT8F&{e|*N#je+4oIXyV4swߧz	C7ӗLE9[1?3%
ŴEāJA·8+99(_|~o+2NAP[gz[,׃9av&0
Y%
(9ZyFiTĵ'Z)|%4><:*帑(k9SJ-x5:wR/$eQiv(E1ec}6ɪ[o7ft
Ay,jUOƾq/\O
TDo'̈́{ܢ w)?C(j˄Y
^	wix嗫
?<&Մq̘q
hqVQ}7d+P%i4>)*8?8>,V~"q;Q5TN~zb@6l|k3A]oV~^z\W8*@1,W#e2cӈdS[]aʟg} i8KN4`x=%ʏ[(^ܣ0[GsS:t_Pw@P^b`v/`4jYWY<Jg5Rh|VT|VV]&)/ûgw
U.W0@dn+gvC~'yNb7QִZKZ㖈5PFgJlǯ5pOn
~-4i-xyc/lXqeFg4o/e^-c/lD>S(Qn	κxX0e{	]2^J>j܌SL
aT锒(o6c6멾Zv+KYII(
rPJ8RKX2LI`
{)`<X?/6y:`d,1yS\$#
]4>V<]c|)Uï}\)I]9EGӲ4E_LNA"eUS]@f|#Xsn-4V0lNoq<_x%m9tޯqZ$ifawmbv-rb2T]+k.[ɲ|o糳>x^Y~$ϖSv-(6Vqc֓2jypcT?
#ٱg3`yBeoeTP[Ͼ2}nYf;/lea*{T	ǩ'}ښ}]ͬ:*^{үЋbȶ$[UPKlW
  v  PK  ]W            1   ch/qos/logback/classic/spi/ThrowableProxyVO.classVse}tt{MBr%\,T[TiYfKmw8:MGƧ2/K6Twsw\_X 0ZFdTg
Yh9bWQ`<1ۆVih.2e˖a^ɚ%l3-ٙ|lJYdeV<XzrW]pXz%ݶ)?FْM:z+te2R9
ROflFͣtn&.~IVlU>udJUp]cE`h~#y_S~x% X2zr]x1W̒m2^
{uđXW:E+9,U	Y42|`UĚ(a;c?^r(Q/kn	4.Qڥv>\;FpH <clVInk?ԏPޞR<KYvݸ/z_1IcloQlVOa36W}zI<f82]b7_Æ5JhVǻxOCf
QXMUJ-6J=SzS9?q2+ǜ
R5J5+{BkV.XLQO1Ǡ7
aZșJ /f\+qeuOK
A~#6FNh謮-Yhj䝚kZt>;Y GpV}|/ >{W퍓W\~U':x7H.S'B|>[>L\)=g[Mƃƣƻ}9>7@hi_c.f"X1W`s#}%38%o ";}q4&%wa;+nW>-I@v#*
F-3
UL]KC8t3$S|+/hǫy$*}_+փ|=xѺ}t[d` J#,9pYCcYL4L#öʲFq)dC.>^2~F>CZEIaQﶰD&bԺ$bOhpoRI&7%-SԄIL	LWўJùۈRt^`:*dۈC}̃o%EXIP;EHx{S&<`j!&B:L?LoWLeZ!SZ&L.wG*K("wl(e!vɨ}T nFrO#lPYPKu	\  U  PK  ]W            0   ch/qos/logback/classic/spi/TurboFilterList.classU]SE=_&,qA4a3!Fbv	Y..444ːaf33>ZVOV<`U&R%ŗPt{?_-<"D@)2ۡ
m}_YZ[soVBԸ@|ECu׬[fñnA6~ݻg;w`panZEms
Kg {dхr!UհWn{M3pnn3P5<X=VNi˅зfۃX}UwTp UT]l1w󯺫\;[`iCBs38
\B/]N . g5ѝzBЋtU8$iM誁~&195@jC\L_8(߶eLb:) :+.[N[%'TtOlWͶ7_8Sı[c"\zx2K=ʺef((Ȑx	۫+]ׅasTYHQzuS'Ѱ@r=^\M+H-˷6YC:N=T|5OG!cXO_Rtl^sKH+BODbR>@fnJKb.xmhaDxMG(߶=_8sПn>brCC<|"c/i^ #: Iۓ1qe(Η*|2Av1m^^ec\6	ct.{Ct;}?CT>+~}JcLC<=0$C=@'m|1opڤ-@9JbpǬ 4"[QFVmDl=>ex*.QI$u
_dYGiF/2f7L)-DMbVļ[)q.KtI'XPKE    PK  ]W            9   ch/qos/logback/classic/turbo/DuplicateMessageFilter.classTmsU~n,Ґ1Zkf[@,eM]]ѿ;q<w!	E{Ϲ<9/ׯqÂ0"}xtZx<rn/\]6-Lv_A\ҠoŎ<CUa[T/|7c`ir^Ţ4芆PpunD7U^q$"\ee*}	|Aūx!:æP󲂯X{>w}
ưw͛*.IM4m\a	3nv]
W32!5Ủg." ".Ov\y}Sj}ǠT{zAgr&y}2BT>6ۅ=yP,"u綿ϭXj3Xt\:wJR6I0Njz-6y"Ͳ)2wM[;4{4ma2QFw܎Ynj;}L/ԝNg޵x"|3O5T6^@3(4u4LM%3lψ09n2]ޣfȔۙ	7!ǜfSu7E0cЂЭ7V%V o8א# <ΜMIBkРIp&tuEg&wRB(ih&IH̽ E%HxܢyG#M:Qa}Mvn5s H45bv+suyi#cCJ Iܙ ]#3J]=[BB(3\=	O[DS*d!1F fV 4y(Dm2-BKJ'-\|1baIq@=nxDv,H2:p@[# jP$"XI$1M1l"i"竗Y>PKc    PK  ]W            9   ch/qos/logback/classic/turbo/DynamicThresholdFilter.classWsU^i+
BJp	PX(m(nCtv7.>O> "8"㛎:9IKI7s}wݳn\&@(!KFNXNİZl$34c7m[AS7\n32kcZ$FKs=Z* eUAP\cF`N2hcQ>
P	F-eBϰ(TPϰ8Z\`@Bce҆;ì`E*be,GXS۹-0C@2X**,KO$gwHk Lr񬤣8BEP,3js[5c%jLD\[7-kaMtbSp	=P\Ќ
6(a^2]M7=,}ymi:TM-haX0vˌiMq5uV{	STъm];m۲ssT@{l
Ђ#T˰2[n
R T<89A'c1E
Q\J zѧ`}a喝8Ʊ
E!|0btg@C!PKSPRqGTtg5w&S
;FIFivkyoZv+EMޛ6lpQVL34[f)6[=\*d'5ӑ3hڽ{5뻵04zdW!qC<4KZ$)pf-j<Bs^	S5jZQS>F(sũVD6\EgfPJ$
=V9EZ4rQISm.uzjHKnc#Ӻ#j<R1</zҧn8+RuX1
?.t\&J+m8+xW!F;,u\[Kp7i?2Ա`0fP3'>xE9f,Kds-J^=̸QI<Opp",Ghc@wݦvR(x.wDUt)|(s]U݂䜮r;YAQZE1̀%P^B$የD
XB}hTyHp%8Ei}.WgeH!!uYYis.(7f	sl
ia/rTr=9'5eNe5 >v"uD>$@ҋH].I<DD`Dē/"Kr\$!G=4ʓM!7$m"Y"RY]OQBSD$r
.c}Σ&,W֏19_FG1b	\M	\E%Gװ?"<C'`Ch}tZ\-*]Mҝ#}=rLw_f9:6]3Y=@%<P]`[wd5YY\P6ez_t2P{ ~%~O? b*M}SNb*(ɰqN70.crU=IQ+mx*ٌH/]PUp:(
2[4	E2{5PK
w    PK  ]W            2   ch/qos/logback/classic/turbo/LRUMessageCache.classTSU.dI	-P%&GMR
656@m,d鲋 _/gtGgڎ},J:y{wwϹ3 2/k+Cv[&C`ڦ?EtiAfUEaH-ݮJkUtk
ns|7ny3)CmOUi!7u;5Cgב+kڵ|f5*5YQrSÜag9V\<en!J^
}8qќKunIđm׸C?pn5=6/5aݴU'˸BނשHȢEQ
cg]s㮩[VJH;Y|= F(EǔYgxwRFz"KN_7=<&u@:Krzoid2taë	'I򼩭[ǬMyں\woDs9wrڨKҞ<HPcx{@BuPaF+f&(tK~%ʘ)99=Xi7EqghqqA+6wgEqO%':6~Ac ]HѨ(m49\Äܽ.ZxU|HIZmӾCفldЀ z?ٱzL>8i/bcpYn:O6	&ySh8
nّ=@+t~G"|%6ّ=\7rssܥ1V$dPiDaݤQ/4H'2U}MLɚ51"^ Mn?SѯG*T,]S1OyCMU|t\WId"}*;PB(*@V8sS%!g$NXʁau0,VXˢ3P
x8 rłܔ1APj	+0T{PK}!    PK  ]W            ,   ch/qos/logback/classic/turbo/MDCFilter.classT]SF=%%|ipLbGLhSC(ZV@$὿oͯv:Ӽv)ٕCۡxƫݻw=ܻ?)a )i: Qή2<ǎa-Wdl{ϏP 3絼x^ U!Xӧ#-T^K
Tw侴}jq0enhe噼囲Uqjq>erdq[0ezc)-&($3T0%fMb˘zцu,>W-|)ZkG{hwS3(0k8
;QG%~rGXBsuIVq26qmt')'m^Tft%#^]m7kn)k=ǸQw\\RZ6":xazB6TFmw˽~+	vH*g):75M-V7uVc˧gD'Aqk1')*MFn<YNJmq!7װ@xL^aߐBg\
e->9ǌ6.G+q@s
ׇ
p=5W|/XősGQGbf1)ǛD,w0 $=04żq11#W&R
\~TGx_?T~]C10pg2{j1;%P
5y,a
˚zaf_[5"dJRǴ-f˨23S1t&YGE`$wg_P9m]#"eie4jn
bmk<PK/,h  +  PK  ]W            4   ch/qos/logback/classic/turbo/MDCValueLevelPair.classRIK@vњںU+m̓EPrġMߥ($(tQoff2r(!o"Cqc^9җ	DeOaS%
L`wc^q`"q:yqvjs/ːW
9&9R3SMk<bȟw$W/.#[x pgPs]1S|&;"pxBD?0e{"ղI	nn4+M8jޥQU04s9ɤn
YusT,JX"4@$`5#ln｢k]qvRnM2ccD`ݑA2E BlPK>rcN  s  PK  ]W            /   ch/qos/logback/classic/turbo/MarkerFilter.classUmwEӗln_ Y*/imM6(ϙldNܝVp?34i針>^p
?у^}6`p@Vܫ^\[ʫauW7zgRH"e!mc 6[6gIcyU8xre}2y$c#|6p
\~oq7a-H븍S8pbQW|U*f.&RY"IƻE٘Y5qQ1=L}p4.0?h7}Ҫhۤte~ivB9]6fu~ 6><AI'C06:'񑍏5E6˸b᪍Op>=%#}B%Xlcx9_<>UaӡH)B^mDExNŃÐZ=j[l שy}ҽCZ$֤ț7'C[O+&OOdDBM(Fq]Qg{j) Xjޢ܌<A6Tx TMV$cXL&ӌdSDj;،U,2*C:2p4JoaMᖬʿo;<"KYlva8^uB, (J{i
C-҉C4E#jR[K0z꧱wB[g&=ƄY4ڭ
~Dd)WHfcN5cD9ѵ:}mbϐ^[LO)Eo''2;k$)̎jVxʄfitȃyKD2QjHiImbncx`_-aq]|M0f$G)RRJdy7.=gΐE:tiyL^0
;I[|+M8?PK  Q  PK  ]W            1   ch/qos/logback/classic/turbo/MatchingFilter.class]oA߁mRoE>JGoƤA$ѻa.]LxGϰ4;s3_ $:4sg(Z~=a#@Z<=wR:3?3ċn	$u,`O|Cɣ3{|d[ם&~$ѱd`YTne=5nWܱd
SRB	,pk:Xҹ #>o>eˑpbwn[a6-s\7^uTCvlH Ǡh(-o f4kF=C,t/~"j@muM\;<ʞb*,Pzr9gHC2:	I:J9YodI	U>-G
gASF+Mu8u4>]n0`п!M8|E
(:
hgDax"(<IR	_P07o5w#)EIWcFe
}<&CFؤG,`y<
c5`URY3Cle3gY6sHl%b+[xJll.?PKSD1    PK  ]W            P   ch/qos/logback/classic/turbo/ReconfigureOnChangeFilter$ReconfiguringThread.classXW11^Rؖ 86NcR	KwhFa5MM:2$nt9ޜ=m7 }w}wߧp^G5E@"}񢖓3фex9w̉Ʉc+a>2bک+@6nmkSF:4NSFԢ@tplB&|aڦKm˱BChzmVVg+؇bc}[Q{CX-wONF|'1NqXrJZDȸiɎ7ifJ̕ea|*H&ؼÇ|moۈ^
Q l$#DyZan[qe ߫a@cN*%ݢ:ZDңmnMhp[p
1FS02Qhm[iۦ?ji<߰}OJ-~F'4DutNA.ȯS+;p:3g[#D􎅙o=:zJwq3G2	-2Ɇ8S!ZxgY2IϓES(5	^n}!Rq:]Kiq
;گn8n{Pquw!מYx)F4
\IsV?}R1Tjve{ ê)Ftc4,1.qҊճW:x;:^C`{%5r<o'1++qVu@+@U^X*$a#!D9=_fV&r+mȸiY~#Ӑtf͔]ZnUUdu<Ui#5\U*bQcMk!-|9L1qЂ@ʤbQ)eJl~7(UWjTe]9e:9ϚfO1e"zdZyXzZZHwxbgڪS= <cx ><.EC2-mCYڃ2g]Gy1cCs8,Y,ud$C+ËKIeO2<kcQ
)w>?h£,my*fA+?:'4OPn3Lq gT@{;ͰRxP?Oyz-0C),$4|Qi^Pζ*kF}S̴@.3&ڦÊ:b_֨P v+]q駝$:*+AHLƍl]T]	^we..[+Z]tq[øaְxdceQmpԓK;{uѯaF`:*$ծX}:܄\dTFv8ۀݎ{kdB=K(a'K蠒(Fl2 9._QcDOUxh=LbZ}Fx4	cUKz-1Ǚe{/e.O%/	~жXE&I.A*4İ\^eA^!|Q}-_ĕ/sU
o~3U+|q'W\[u 9C|:Joj3g!bXFMXsFf|bjXnxB--y(74֗V@yܣN^f|t5 ϰ}x6]?ķʷOW;4R((vz9wٟGy-=Cy)8:ҙȻ:\[\\w{Bs34؟,k?O7_&H.g؆(2tNH3>!<A'w8+s5 `xo~|gh΢T؉<mDhPPE40ᜆNoudXDJ3SE${j`MˎyYVXzk14%sOƞ#
O.sԡp܄~phwDX?ğgl__; I_!bS ]tciW3USvUHaWMO:])Ԉ W(t>ϧfB*ǟ߳$*XyIPK  =  PK  ]W            <   ch/qos/logback/classic/turbo/ReconfigureOnChangeFilter.classWwLI6" rHp&!Mdd:3WkQՖVDj}AG6&3{}o\(x3:lñyV,a'1FӮ[L{TtX	_:4M"Gc{i^4TQA'+_5'TP054.`|fTm;56[mRZN"WYנ푻.K-{حNڸY&X"]b-XYX:R
5	3 @IIr]W~]V"ayJ1%q˔>4"1#+Шc6hJ״iJHkX-

/qAR<bYo5	aGtJlѱ6\a0 &]eG#tX-0WWjK6fLJ4̶N0i1*QS#VBliIr!t}ZɔC&	)@e33ox|tm
#a滔׼~.xdsB^3WE5ۥFi`nJU0i3Bz9ZՒqnh8iˊ|mpE{&Ѹ@4F=ȵ>ثaI:7}Uym#	Vd)LׯJmO`(	Zv0[j)aPv|zfİ*"D\e*!tŘBVkvEE*1I-ˊ&,Aed11y;)O$
p1UۄOI=%J
`L_ozY3T
3ofsš1W\
Ξͅ\%SbY!Kx7X(awAacbdFPl:٬_c\7C3@p>(ه44-Ƙ^:5pg9cp"([m[yL:GfUeL#2u|56أwX;Z#}Ch{ۣ=ml|2WV
]-uh2VX8|5>Է[r艴v:q[lѝNOZɈ'%2Lvk%t]aeU{%uRgj0iE#3y',bmw)EX</(ݙڬ㸆WΡJɕ"%<qѰv0e4}>"B۲56ϕv`n[Q{HݓJM٪s7԰ơU[D#.%2efQpQK[V`v9ٞ0SZvLD7~U}u/:[Y
1m޼YJouɖɶU&5unL*\5j$1
]{k?ĽJDæ^̓^qkm0HߺA-exS?#ͼ1:JBVl͊JXR_kFoe?]0E62W3λ§
y`ưݦOo]qө"6I疛h5^˗ktڶp[e	EZ?sN}Q&X0%cT9+>	&EXwɯ<LW<i+;; r	C)GЋ
aSX:SX{Bz[ReB#nE
S,W+<6#F+N4.F6!6O7n?'27D^ZdKhit r{WPQTo/绡Z3pzoW˔1>4X밎5!\
hV؁V~xC;
}Fhwv	7)ÃDq+9|ip/dɜ"GOse7ZM3|=+?QQS'|SO;B8!w8uПGxh
LXq|y(G`30WORC&^C=wCIERBA`z*%P5 Q%W 6"A$`jJX'aePRAr4Ekj"N+P}_{xYE ^FN
ZW_g@'/~de51X+vV3aȣX)qake (t9e<qǑǰH-yVQp/*0DsmQ* QRʖ% 햸l
̗3xg.]_]g/%NJìB0-
y]y:$Yy`U@qPlռ:Ϧ:kR249K~y5L!?Vz,b"Lz&۴y)˳RVZ=_nlݫdd!
0k4#r<7 
VKg4'[UڄVSo"Z^U!4C7$B}!o^w.B&f~_~fđ_rczW!^3g
PK=ZL
    PK  ]W            .   ch/qos/logback/classic/turbo/TurboFilter.classR]oA=+Hmm0q^6i&ӰL]Z| 
)[>ܙ{ܹwS<,"?
o{H
o0_#a䶈$C
UɐT;\BE("j޶
birQ,Lv-Ǖ4q(x BbBb|QM'^@NCXlPҴE7HH'0UPkou@OzjT<
60}_iy(?̈́>tҋgAG!t4?apLTԲd4(CחN2JuDSje>_0[zd<IZwʴu~ߐu)N?"k=Kp@=VlN`an1k87p|FS	[0='3L1oisw_ILqN|Cf;U./*&śɴS,K51j`ovCVԬPK  <  PK  ]W            0   ch/qos/logback/classic/util/ClassicEnvUtil.classTRA=mB*$a	ʢ0qdHɧ/Z~$Xy˹'~  \p+мsCw|<ϝ$;PgwV!nZMMMPz|f|tX_я Ckζ-AA&43^lW"j 7M`Jgʐvl*fUAHE:dOvFҶc҆a៰PHDSW`%tϼsx	nKMbsǰ5Ǣj=Q*Sя`m֌)+2]*/͡
vEL24!mQ?",!/X[BS獵MΔt	,]374sqya$uI0²*ۄLK{AMܔ
1G'9tbQPP]Q?f9$|尐|&X1B&F|*vg2},辊L%=|	!퐢^C]o>;moF5u}[7z~D
K'~n0wNqZ!ڸ0N_Gk&0PN-CJhϪ)zS%u*6|x}Wܘ=fNM
{q?F?SGB/y\#
n"5DƩ%$Eiz潢,ࡤ;$Pfh5Rd7!Qy)Sy=xtL(	DtcE9}!wPK    PK  ]W            6   ch/qos/logback/classic/util/ContextInitializer$1.classT[OAllRP
Z`{)X!6$Z]㓿FoQ|0o|Wi6)Mw̙sf_ \t!P4a0Gneas߷X^r|+m=1 C$X ag.ELE\CCjosNEn~%[NZU4GCOh%=*UAI20RYTPhw68*Niipq܀0dO3PEnipܮ8qQ%
\f?Zֆ=S\sΖq=1u#F=XbӆCCWpÈNSnA)Dur̹-4m3eYb]W*21RfH55wun鑟A!t0DGfQ_2"YBh=ӯtwy[l{+WlѪ8</6xyO[sN.qA}r-R6]9>姕m2}tѹ!J襝>&h>?A}Gix5+`RX&)ZQAa4/vAWzwqfoyCh9b}80TxRSE:tjJ&!	@+^^7(-^^qGz	I-a!0F/~Gq$3`"I`$7	YiOHi'UEWoW^u1t
Ƥ%nJM7% dPKS%<    PK  ]W            4   ch/qos/logback/classic/util/ContextInitializer.classY	xy~iY$/!H0,qX,H+Grd'Qݑh#
H8qMz9MI6$Ůb稛4IiܻM;q3V2gv?^| v!
%[cmY5~܈MŒF&u9]V*c);euhT0fo?~{_qXC`ѠA;HMrVwVwVH鄑LٌYq3ٴa[i?V
,2;k'1#ȕϬh(2鍮@4Q5E;qm#;-%vvG{"vuFV=؛Onl-:iw6a:6bJB7eMM
59gp
n5nݵ(&Bo8*[x62ӉyI;Oi325`J%v,URN_7aMhc9k=
5q'v
T-H8zdM]Cco(#@ұ{Fֶ58@;(^@THCek339VIX4LEw)*=pPG	ݝ9_
LJ	^=>mzʏ@ GpTC>DCI,e6lHfR jXۢє>eGRc3%(<cSƤ f'	Oa)	;'GL)'PވǕh9EQq?q1tpf&Ô2	I~LNW&$"dd33ir!@nkbLø	$FEc􀞴5l4NҾ:
ŨQG%&0#,e-@p+5tARhLԴ}Z
ZX6c[SXNʄNi3Odb!#2BGJ)
u?]I
BnOKB:ކ>hrUC>D~FԐgm'gN
?$(C(ꄑRr9t<	uJz:ރ2h'R3rK%;Mci(2rK)3F1x~v:ҡhh$:{4zvFGi0}X/#%`0l3w!Z>&-v8>I|d,@f7ֿF8uZf_i|M21E;\2!w9$r&qU
Y[-P2OF1SM>Ǡ<,1?Іݧb|	~Cy D4oY
t^UĲ鴙Sf_"LdT:R鸌+\s^
<y|.:c$fX^+k J1 7ߒ)%Q&u|_ck5ͻtx`AޡXÑ&M ]K^$SmA!deC:
(KcߒUTR?qwu)'1+=e0]+_^M|O=|H['IH25&d>$5:d!yLjyk\*qyx`h<:I?	n*K<BYd(ϖE#7mtʌ݃(dOq<r6Nk7VWy+0?x9 7hţIsHvbf&ù2+Oǜ	 C	e-:~(gҝN˳xEL,:
;ўHo7-E=_`	X2i,NWu>z;633suΘ	ܻ$(=m01"Wdp,X3
6^o#wYqn[՛Hq3=$JBgᇍtB~>{Bfm7z/AL=d4IPSFJ'o
Mp\ϩ]*cDm8W])^yu䍽1c`Mj5MbR%Xq\E)FapϸehMoxbk"w#|Bҵ̯KOh6l59g<+B7)Ū!7i[.8҃&lkC$!RN|ݠML',.uV).Ye3]Z͂Ә3	+2G)Wҧe$f9XpG`lc5 ^PmTZ/=@1DI(.BS 59 iϣDU8 \G4qIRZ0(\Cvv:X6RkYeEDXzN$%/HmLڲ*OkM;^J9:\ŏyZx_%&:Q*Jֲrrjy~Ь7bYT [*/4\*FJ#`]pذe-w\@j]u(s/5څx
[8 VgX)\JRw5<{8F[f6]ԠK;#D5}g=W.~	}gE
G/ulcsx}z7[8+m9(A>LHEcОL	ϡ0E}.Q9h|y/,\W6w=_|
^E}һkk>u\N_:ij)YT=Z.^DɧP:|FQjދ#YއBÈ~#0|ocx(> `Kw08?L>bXͽ^@zsn!?5gQKTܲVubJzזNʖm\Eyw3WB1Z٭Gȋ>L?m)}f)fs>*	?O[k\\PK E[l&"
+*Ix^boCAE7E3vWr;3GhLi.I/G&I9|{{l]7G#M_ECA|,ʂ4_ğQA?~I<DmQc;A~!Ia"vT;AVUyq%.t-^@C?ik?q"k7+nPKmܵu֭a)[߳׾Z7'=JzO=EDލW!QZG=͏*NJ\*ynn/.pC[]l[se%Χ(
I;
F@#sRJ'bXQWhV,ChaoW$Z&MlsG]v5Wg-Q)lVR<W[ݎ-Wtqߨ"G(1	b$9In%UZC%wyrbggT˸KC87|es7<s%V5.yA_-v]
jqߜ}Ie:V#vη;P.4O=gzvgSL-E[+<N׉APK&
     PK  ]W            =   ch/qos/logback/classic/util/ContextSelectorStaticBinder.classVRG=6B؜xAlĢ8& YlEHIaԈafF|E)c*T7W#%TnBjz}ۧo_;adnCUb\u*4CsJ{z*@*ztǴZUͨ+ѴIpK'ucZ	Gq4f$PikFJi0O71FF-&c3I1Ogu}BUmOTF V(vap;*FXqκfn&G[CSOֺ	"r%	1t!7Dvñ[
:nHhFCWO^\2-\Nbvcˤ"t,]:nS|MINvtd)sf*-jV^Dj\`Q|j6AD%|">GDwҊnm/ާ>c$ i$$b2>Õ䞡liO3ܼdھM1IB82ӜxU+YR
rH@y&:/C3{15$cXi/TC=
F`5A45(⑄/eaU1M!YDgG)IuLRsUn-*:9$,)&~gHE8᧩4ST&S)2pB<Cc	9v.تܴ+૛ʶ`&~D3cdL*i*n&޳ׇ5EfY1jjإE{@#꟮eƐ)
^ q\mȥ1Xd($Wմ9{YwQj[fqn*.٢!0$0Ӗg43|Fi+O)ѝox
+jEdTGR'YgE]%ƒ?;O%˚Ko-J
ߣ*կ$?ˡC4}o
w~97p;T?piDt#I!ңhnEeQL`O0gxಌx|.7p%46Y߹Q)W$׃PˉSFH#{GF~ý;LU\?ϐ`9-@Kp	@b?o uZjؠ4L=ޘۢ1!3XtyPE NFTcHyouPK.    PK  ]W            :   ch/qos/logback/classic/util/CopyOnInheritThreadLocal.classS]kA=5۴I[$
"	}
)>0ٌ٩8;MGwv6QKas/ <}9-*(8p
}@Jy<`(ue(C[°4M<w؆P.04XĒj5,3<|C;A4p<vlG03sƈ2y0YE5c(lGC꨺2'"iBJ&NeĽIR[s%B\~Vh|"|y==V2u#[D:2rOB'r=g.H<gO/lAsOBh+~(Pt o]ov/(OfvM7|y0ph\CQ,n}$UK	xWi:ły Te!Ȧ_aQ&ef
u5r#-ɮ?REm	w_k}7~D7a}FeLm,)MY5&nPK
  a  PK  ]W            :   ch/qos/logback/classic/util/DefaultJoranConfigurator.classY	xTd7I&˨`D"Y,hPėK20yoyD۪h]JVm-=X
[+m{nWfQL2I&E޽{{+GDL*:
Q$P\g"qˈnDI%br̝F\eLe1+,(\Q 5(.xJŢGV=F:\f'
b{bIsfNp9m5fi$}啛6o5t"7K
&(Q\5LdԔ<;43yTN\3j&%(4gH_%1iwȴ!iDb4T83ͬ4i)tJbuֶۖ
[Z;֭ҺJ7nY)pqk[/՛l[p0G\`l&5tD[O[V3Ty~Voĝ_8bjR`~OvMfv@1/OĆ3<FCBCw~)ǰT S<L9;RZ'PJT7RvP?MҼ.fn^#2ٛ7-' .I![
E
˲PqKe*_,p8
D2
X#8K)0rX V2ߕ_Z~MIQ՝"d&<qoL(Z3&:Z*Eݺ$0kLbHze^2^
X/P"p3l	bvmL
WF-J۩col3)#j87Y	,IcJЁ\*Ptt,04t=M6Z3	]N|dۀR=:zHNOZfe S_E6-[Nqy\QvC4g<;q=eI-$u@8;c)jv;B,aq=n(t)941Fo5ܨ&ܜcM[R܂[5Emx+|\[KŰ^j
Vdj<țe	BKVYR'@w^ܧ~`wb}[e6A0{d~C`ĪMW<c/_x,s0*hկw087R*U<=U( mD)!
}:Y}5ɤl﷡/i0
~<:>	L]]oh
nQ
:ǩD1nzH[yBii8LXJ3Rļ=(>AM,g AGñGVnZVt ]B01MyQVl.^8۞
c1I1\DܧvTiE8qɹQqPNqN$2_҉n13ݰDa#hMQn4'30O!GS3MplVzϑ,aamDd7`މ"C$)J)giogpKg[F?_WZէ/C7|'<NzJBR6>@"ksIlyR|iW+4O[N숥bR6φMn7i)lI9I#b:}v7`*dv2䦕!G͆kC}v:-;yy%_l!P&0!МF;=j>d8Y 
9vgPބQ^}H)v4NBIhR!!嘄pJ8]5ʊ(>Q	?hQ*0fzvōFxh]kXq35ٶ%!j'y1ze^I'lTD1[R^7/)%>bMtS̱E|~_ca i>YxO%gYgCZcZz#Z3Ob8k%(C6ltY	TTb&j0O	|2]f{Jȷ|rPE*%@)
*e_ReQ
ZÇ0%\=s[kf05 G*7Σ1pETi	ͩ*.u*?_7=E*^{A
Sɤ+d8)ƪt:ĒcUCkªyk;֚SX7.Ǵ蔔Gp%pW;.嘌tJ{Ѐjmkwq)ߚV$|VhרlE녣Ob)(ʺ:>0
t"WԗOF9/ >,GQYsu
]Y{Q b͊C&׎c:	r܉!\a9bwJæ
ٙ	.C8&ї1D(w+O/S:qnUnQH'}W36SE4fJ4.,~Vpm-qߍ᳏31ejFVifsG:^R**kFfC_M-NG$<1ۇB(~J%\S$(TIp'e"^,>LE,VˡU4DOQ\y/? arb(V %CXU?\i54A9i˝ut&&R@2D~ IL(>R"0vN9+;mø|oFU.Ӕ!<8\dT&*s3s3V4di/<sZT|}ͭj%į<s;{琈WeQIBeh~W~41@zKkcNa`ܠO	#Ku᪊Be'S/>zPxg=(ɽLX G`fQXNm'x)͋tJW)]YtyNZSwۻ0lP~G&l
OD}'g	8@'TKyR=_E
>VgBcPK/3	x    PK  ]W            7   ch/qos/logback/classic/util/LevelToSyslogSeverity.classTNQ]K*"Ђ2\T"&%)NC92̩3 /&$7㞙RBսg=k_z
)@[H0d:\U%IКͭw"4:f:Xc9.XAUZE[U*ҫܯ$+Bۢ.\3|N@&3f:.2!×*+(/Ӂ>?%]WTWj$KGTT^
0``0I%SF5xa<ka>gf仩i\пwrސzC#Ћpz0ۤ5-ݸk*P_=]ģnYk쒧Vw׹/Clےd7o7婇Ƞ1^6KbsEviDr>~N4jTI|G<p(ҁyj3H\D1)S&-4#=SikFĮS[,1jG4*wi~^F`,6]JԪqm*v7R떤t_-xXJV~ZKq,BF>y .z<Ag"r Kg:@Z`0Sq-(g_.ׁ<.lb$3>ϸ `=nàsa,2Fq**U싥*	
<fHlTB,8X]
5$,:n_˔~PKv    PK  ]W            3   ch/qos/logback/classic/util/LogbackMDCAdapter.classVsU=7mIn<L[+-H[PAݦ46I7J|~_3~r+P #231n
Zlv{{׏ ;APGhѱY#nL!	?jZ
X>Ku3?G4
glL'&\4nl2I3s#GmX%E+iE#zobȄk5dVK~N[h֜51̌aeƦm씱^l$]63b@{i$tsJ捔}Zt[BsF>S4©Im7Y٢0.bܶ@τT]Cc'VMWa%OB脞a8.TIԈ>5+QK=u؆q0̕ A.-t\žʤ{d{:+ѪT;I
hȩ
Y!)a^L=#~k8cBNqK:1OO%i(W`=_p'3VƲji
1:}3.{T:i1
gpV egOy
^fk8tƝYɊ+CrE
/@3kNg2r=Hՠ*W4\1nUU
$;K`<Hv2F+%FC	TKaun)j{&IsDcisd9Uh%ZM<gYO$Rp+,.6pq.3."PňmgTnyVO{=j+
SqVx~F釬4U2
JB0^PCasnjtΊǓR.'B<=yh^s9$O&70cWOW8Sw	>`ᶉͼm[
ky5,;xDA92ӯ$D>6]
m^֟{@bhc4GspGa{.2}J߉ t`a'Ɔ~bp[u)ɻi$Hb<#`)EA^C䂫uApGE/r}x}7M GnPW}dG6쒭CҤ(:Ie(x&]^ڨyRr_[yzW3Y
X:&ڌa"m6d*$2IX$K<]{^r,o^^R/ e9@
;z {`<?]zudHݥ
nf[x1&F8Rr;W׹J>k>;c~}B
>,E&ʄsd$]",8Moer]Rmg2nFG03eu긬FܔEXPO?_2Wq3eW
443sܙÈ'r<B<%r 

mQ~EM%qX`A
-27PWn*E)8{f[E:сkܼ*=?1"Js5w?(ZyA9eA^&|>waҚnzkԤ_<Ѐ*ח۫rr&xPgo9o
PKR    PK  ]W            9   ch/qos/logback/classic/util/LogbackMDCAdapterSimple.classV]se~6Mv(`@4))JhEݦKdM
PJ;GǛvFZGQ/0ALs=<yλ`Avt(`\4ҶQʧON]0sVr+hKMT0>tP1錓3l
*ں
]E^)x*WH:մ䧌\1jʥke3qȴQvJ֚)ۦuntiƙ[Ɣme3-P1 T}~ׅtfZ<u+vARmz9[3
(IVcwX";04!&[Bd۶7J6csfٵR'R49Tr/l[DGٞDEYb2ulddcW&2&!=
5j)cӵmkF|n$ֱ;\cֽI[ZT&xJ.AhKc4]הjx{TձO=5ۜ 5Kt@AbU`z&gtb8ۭmDŨ!=Qlym^T˞Tq?wNr?hEqdQHVM_

ʵj܋朂'Z覵qZ&t}k+-7gt
VӨSIY
riT*R&jJQg|pk6myrۃBaDGiX%s63eVN	qqle	"nwgdǞjkOts{)w?4
?x@C([ayIr%Ҧzx
'K1錈y
JSU!mCe)eW"Sk
ru7FdSujyn*̣+o_|pm#)+kaWsCW-gu\nbł0^>wQ};ێm_3%%l#ZN2*oT
BPX\\Asܡם_sYo-;H'-"?60\]ēAu 눲^_ˬqfM2d$A;iwd;Q*]k$6,WQeU+"}>^Td!
3"*GA][pAn
)eYRZEƽA[R
]pyb+[-Q^nt!$ulX޳w8!X]ek;Xwy)ާ>'$AC>d _ςg% xb
Ni>\i^E:=GCk)/I_{±xb^	>~RS pMz.i˪aǋ> ^t}^O52ms8釪NK.iĕQd+v뺉)K
YM/xu\j ,"@)LQnx}pn֥w
=K18.k'TeɅ4?r4j:n<%L#_2*Z׊f!DNd҂3G9-0KF^ĩf	VW~WGP6_Cy\p4|_Qu?PK|6  d  PK  ]W            0   ch/qos/logback/classic/util/LoggerNameUtil.classT[OA-K
 [).^IUL}rڮuqݭc|D}[7̴؇sfӝ/??~p
*"*G!ΟsnX[Ր!1ovXdk*RЍ^}b<^}jTvhc^nu\MKnza0gpCvs|IAaxϷZV<7*8/~h߄bP}x$I*}ov@T
p
#]APrQം3)(C ZM䚇:(SV	!,^vۍNLʝ5o'v0eTcr0|\J":Hz{Ql-9[ޱrHn͖tlv!Uow(vQuFTLCh`{6{=;TAQTY.>\Q^ïZ7mA>(}p_L|ghޒ	y8󴦚!O{tL)Z%{(;GN`
dv<ٯ%1.wAOg^"/fhGvHO2hۈeYTM(*I$ӈnPSN/J1z%FXف$dEab
¾$1H$hX+#%$5	]5jBQ(Ե]}m$7sM?{9	JZAf
E,cOBIpU֓$(TMAs5,Y4{PdPK(Jc+    PK  ]W            =   ch/qos/logback/classic/util/StatusViaSLF4JLoggerFactory.classTRP]BK)7@)Ko/(bfp:S3<!@h0IE?G?Ȍ~OJ\^{w_XjmFЎC,rUTUaXҫd:iUdHTLKmGvjY7K2aN0.KW쪘-эzǰȐm[WĚbKYKk4ڐǴ>2佽a:#pU{rݲL믶~0$΁eCuUGBp#e&ؤOSͦLV4~[00"
Yuq]@+ʶF
>LF0i:!pB!f=^UkaLE6ʲwtt
;6EA
J|lkύ10W;Nv{0rз)Mb7Obɾ۸ZjVՏ;lwwI}DQr%!
NP2knp[2sqv0јH3㧹:Z!Kc{8 yha]:.i\9"$arb.P9
w *G~.=Q2Q4G:}8d;rQc!vzh9}g$.ڭcb+҅fˀ2I70AiR>IBf0rt;<Sr0
-E<9HD]'/LX+WPKIK    PK  ]W            5   META-INF/maven/ch.qos.logback/logback-classic/pom.xmlko8`6ɭ]E&,춨bAK̈́z,)97(Y(Yq^p8%!`hIQ8"4zn׽_ϟ1n @ŠHq$c-9g(QkN-T+^G `"G6z*(p8 jx~
H(s'LC5:0cNdy[Ff|;
ΰ DX)Mid}$þ}bO\gY0 N{Aeܻs8-P>T!p@
4Q
'4'QkG1~ȥ̐-EyS{v!AGK_Ih0'ՠ҈I9ZܶP,[/,w_`2ʒYm=i
UxpJÄ nY:n2c0vR\.OvӳVbdDJdOvl
nHf?oSf%wyaƩHД <KGUUB'	J"
Af<
jсMP 𢀠"9<k~hEz9a}զOvWuGC`xwL-a6;8ʘ^ff#1&<btn2*H  6 PО@$cݓN}CFtڷm	
$U#o3VHs'wV] RTْSdlwG-ZgLgX@pw'vn7i8SYU)pRV (^Ql@Dr%_
i'Nv)f"N yX{;k4
\G[ K(yqRַ-l e.uq&T`|>}2/Qc4mܺ~w]_]NnU"N\@T7eXëQ8MCߦ~+^`Qu."e
<¬9
.5J__:&K5p
K,@Oew󴵨pE-*ՙUMuphu ͺMCjn<ԤV{p:Db bi".Z`YJMڲJlK&tM/H4n]9ɔ/Ucl\OQ$I,J6z?u&(S'<2hRɺ&jF^ZɁE@M'IRB=iZbx39mJ6{PHMAhJD4adedGi:KK 6"ͤCͶzuG߶-ҔJoC,tsxM7UXTAlñMs|^+D-N/sFđ	f"8@vŏ&u7i^9曬tv	N@̙A1v)||2)K %ѽ?ʙݪQ2?[@FqW\jB'
d0, B>%
nh8Krx^7l}nE^mw6|r#lڨG !_Di_?.
iPf:n*ȧ RwF|+(Ӕɠf_zTCH^
G< 'ØV.<$p\
x&W#q)w#cgʣ{AɧW/2^/To[<Ui5#{u'nf8Gԯ5sã#G2sި^I[-$3gQ1SkhfcĿ"bFfڛޫn6Fp̾ yHMmuo:,fTܴ_̶Y4l{Z;B_6wA;v7ho1Dw6i7pbfw6@Xmety&[ByDk^R&Oj`AFlCV6ݑT*Td.FN($RcVu3HHaQ<  d:hI1~5HC,
G=\+& !f+AL4C^!Y(D½Z2УA/sry0g/?<Fpgׯ4aw+Nڂ8.DT&~ ,J
5ģj=.e#m5K,t!I5B
Bܔ2oo?״ɞ
AB6jlBwCAÃk+9<u<dN Yڿ>Y	Kpޙaqj<}
ٞĬRuP1KƢ85#P;:*JoOe:5᥄wFf3"hӁzEZϥeuz%u8]/ћi#0ޣDSQөk2y}]93fzѐtY6CL*wѰ1uigHPK62
  3  PK  ]W            <   META-INF/maven/ch.qos.logback/logback-classic/pom.propertiesK,*LKL.LOOJLMI,.LJ//- 'gAR3l
LM PKs<   A   PK  ]W               META-INF/INDEX.LISTN0}
_VN<h&'㽔Ae 	q !wO_l8.J}{mGƈ(uJ6cq8=~J:Q/Y *=eU[MLphSDpL [$h8
$X`5zL
_ʎ&$F몗u8ߔb?)ȃ.6Sm3^qL.
n02QBi
5Kp5G<[3PPKnD  b  PK  ]W               module-info.classV@ArFPgD!XDPD@i4S%^\^ ^@.wwb9Y>Lv׷ )֒٫jF#В3W:Py$vؔFJw?
L1/CdkD7fi4W׹yӚ6-PUIITCYa1N66P"[C%ҍUt(Z簬f,I4ιw6njg݅4zg+6rǭxNi+ꋃ!DS{df_e&zm8)gHn	SxO!@MXT@J`^
g4{derTw}w2@/	x	E{ 0hQ*P~R=<GN{}5O?<U\6컝TqԞ :Mf.V"Iͥ-0B//"s٭5}#MoG
/2unlg	׾E䣯I,0d	b?eڢ?N/TvjF`,{*>5mu|8.4"MKt4TX!^fv00kqWt3Q8s9ż͜azs\dg.31WkuiW|N^~ʆqd
9*f({2SEʴLV):6PKe    PK
 
    ]W            	                META-INF/  PK   ]W  m#               +   META-INF/MANIFEST.MFPK
 
    ]W                           META-INF/services/PK
 
    ]W                           ch/PK
 
    ]W                           ch/qos/PK
 
    ]W                           ch/qos/logback/PK
 
    ]W                         '  ch/qos/logback/classic/PK
 
    ]W                         \  ch/qos/logback/classic/boolex/PK
 
    ]W                           ch/qos/logback/classic/db/PK
 
    ]W            !               ch/qos/logback/classic/db/script/PK
 
    ]W                         	  ch/qos/logback/classic/encoder/PK
 
    ]W                         L	  ch/qos/logback/classic/filter/PK
 
    ]W                         	  ch/qos/logback/classic/helpers/PK
 
    ]W                         	  ch/qos/logback/classic/html/PK
 
    ]W                         	  ch/qos/logback/classic/joran/PK
 
    ]W            $             :
  ch/qos/logback/classic/joran/action/PK
 
    ]W            $             |
  ch/qos/logback/classic/joran/sanity/PK
 
    ]W            -             
  ch/qos/logback/classic/joran/serializedModel/PK
 
    ]W                         	  ch/qos/logback/classic/jul/PK
 
    ]W                         B  ch/qos/logback/classic/layout/PK
 
    ]W                         ~  ch/qos/logback/classic/log4j/PK
 
    ]W                           ch/qos/logback/classic/model/PK
 
    ]W            '               ch/qos/logback/classic/model/processor/PK
 
    ]W            "             9  ch/qos/logback/classic/model/util/PK
 
    ]W                         y  ch/qos/logback/classic/net/PK
 
    ]W            "               ch/qos/logback/classic/net/server/PK
 
    ]W                           ch/qos/logback/classic/pattern/PK
 
    ]W            %             /
  ch/qos/logback/classic/pattern/color/PK
 
    ]W                          r
  ch/qos/logback/classic/selector/PK
 
    ]W            (             
  ch/qos/logback/classic/selector/servlet/PK
 
    ]W                         
  ch/qos/logback/classic/servlet/PK
 
    ]W                         3  ch/qos/logback/classic/sift/PK
 
    ]W                         m  ch/qos/logback/classic/spi/PK
 
    ]W                           ch/qos/logback/classic/turbo/PK
 
    ]W                           ch/qos/logback/classic/util/PK
 
    ]W                           META-INF/maven/PK
 
    ]W                         H  META-INF/maven/ch.qos.logback/PK
 
    ]W            .               META-INF/maven/ch.qos.logback/logback-classic/PK   ]W<   C   =               META-INF/services/jakarta.servlet.ServletContainerInitializerPK   ]W=4/   1   4             w  META-INF/services/org.slf4j.spi.SLF4JServiceProviderPK   ]W]  |  *               ch/qos/logback/classic/AsyncAppender.classPK   ]Wp  	  .             n  ch/qos/logback/classic/BasicConfigurator.classPK   ]W[VE    -               ch/qos/logback/classic/ClassicConstants.classPK   ]W=lx	    "               ch/qos/logback/classic/Level.classPK   ]WxO  S  #             &  ch/qos/logback/classic/Logger.classPK   ]Wa  G4  *             B  ch/qos/logback/classic/LoggerContext.classPK   ]WW0
    *             .X  ch/qos/logback/classic/PatternLayout.classPK   ]W/    6             c  ch/qos/logback/classic/ViewStatusMessagesServlet.classPK   ]W5Kҝ      .             f  ch/qos/logback/classic/boolex/IEvaluator.classPK   ]W`S8[
    8             g  ch/qos/logback/classic/boolex/JaninoEventEvaluator.classPK   ]W{S'  a  4             Pr  ch/qos/logback/classic/boolex/OnErrorEvaluator.classPK   ]W:D    5             t  ch/qos/logback/classic/boolex/OnMarkerEvaluator.classPK   ]WnIw  m  (             
y  ch/qos/logback/classic/db/script/db2.sqlPK   ]WJ
>    '             '|  ch/qos/logback/classic/db/script/h2.sqlPK   ]WQ    +             ~  ch/qos/logback/classic/db/script/hsqldb.sqlPK   ]W-l    *             d  ch/qos/logback/classic/db/script/mssql.sqlPK   ]W!    *             (  ch/qos/logback/classic/db/script/mysql.sqlPK   ]W^)|  	  +             	  ch/qos/logback/classic/db/script/oracle.sqlPK   ]WT    /             #  ch/qos/logback/classic/db/script/postgresql.sqlPK   ]W`  6  ,               ch/qos/logback/classic/db/script/sqllite.sqlPK   ]W3ub  V  6               ch/qos/logback/classic/db/script/sybaseSqlAnywhere.sqlPK   ]W	ʷ  Q.  0               ch/qos/logback/classic/encoder/JsonEncoder.classPK   ]W0  R  9             ب  ch/qos/logback/classic/encoder/PatternLayoutEncoder.classPK   ]W}?    /             o  ch/qos/logback/classic/filter/LevelFilter.classPK   ]WS  T  3               ch/qos/logback/classic/filter/ThresholdFilter.classPK   ]Wp#  	  >               ch/qos/logback/classic/helpers/MDCInsertingServletFilter.classPK   ]W?    ;               ch/qos/logback/classic/helpers/WithLayoutListAppender.classPK   ]WxfA    3               ch/qos/logback/classic/html/DefaultCssBuilder.classPK   ]WNjC  5  :             ؾ  ch/qos/logback/classic/html/DefaultThrowableRenderer.classPK   ]WIZ/  q  ,               ch/qos/logback/classic/html/HTMLLayout.classPK   ]W&    /               ch/qos/logback/classic/html/UrlCssBuilder.classPK   ]WoK    4             z  ch/qos/logback/classic/joran/JoranConfigurator.classPK   ]WEv    A               ch/qos/logback/classic/joran/ModelClassToModelHandlerLinker.classPK   ]W_W    :             A  ch/qos/logback/classic/joran/ReconfigureOnChangeTask.classPK   ]W/  [  B                ch/qos/logback/classic/joran/ReconfigureOnChangeTaskListener.classPK   ]W`[~     >               ch/qos/logback/classic/joran/SerializedModelConfigurator.classPK   ]W/XL  Y  @               ch/qos/logback/classic/joran/action/ClassicEvaluatorAction.classPK   ]W@    =             C  ch/qos/logback/classic/joran/action/ConfigurationAction.classPK   ]W    =             x ch/qos/logback/classic/joran/action/ConsolePluginAction.classPK   ]Wҡ    ;              ch/qos/logback/classic/joran/action/ContextNameAction.classPK   ]WxV    >             	 ch/qos/logback/classic/joran/action/InsertFromJNDIAction.classPK   ]WhU9  	  5             
 ch/qos/logback/classic/joran/action/LevelAction.classPK   ]W}V    6             O ch/qos/logback/classic/joran/action/LoggerAction.classPK   ]WL    E             	 ch/qos/logback/classic/joran/action/LoggerContextListenerAction.classPK   ]Wt    8             w ch/qos/logback/classic/joran/action/ReceiverAction.classPK   ]WY0)l  !  :              ch/qos/logback/classic/joran/action/RootLoggerAction.classPK   ]W]    L             u  ch/qos/logback/classic/joran/sanity/IfNestedWithinSecondPhaseElementSC.classPK   ]W)pPK  _  K             & ch/qos/logback/classic/joran/serializedModel/HardenedModelInputStream.classPK   ]W
  	  *             l+ ch/qos/logback/classic/jul/JULHelper.classPK   ]W](  3  6             0 ch/qos/logback/classic/jul/LevelChangePropagator.classPK   ]WQw  C
  .             8 ch/qos/logback/classic/layout/TTLLLayout.classPK   ]Wr&'R
  Y  ,             ? ch/qos/logback/classic/log4j/XMLLayout.classPK   ]W(e  	  5             J ch/qos/logback/classic/model/ConfigurationModel.classPK   ]WK(in    3             iO ch/qos/logback/classic/model/ContextNameModel.classPK   ]W's;e    -             8Q ch/qos/logback/classic/model/LevelModel.classPK   ]WG  /  =             T ch/qos/logback/classic/model/LoggerContextListenerModel.classPK   ]W&PG    .             V ch/qos/logback/classic/model/LoggerModel.classPK   ]W߷t    0             \ ch/qos/logback/classic/model/ReceiverModel.classPK   ]W  o  2             W^ ch/qos/logback/classic/model/RootLoggerModel.classPK   ]W4N

  +  F             pb ch/qos/logback/classic/model/processor/ConfigurationModelHandler.classPK   ]Wd˃    J             h ch/qos/logback/classic/model/processor/ConfigurationModelHandlerFull.classPK   ]Wa  
  D             q ch/qos/logback/classic/model/processor/ContextNameModelHandler.classPK   ]W  
  >             v ch/qos/logback/classic/model/processor/LevelModelHandler.classPK   ]WϨp  
  V             } ch/qos/logback/classic/model/processor/LogbackClassicDefaultNestedComponentRules.classPK   ]Ww  |  N              ch/qos/logback/classic/model/processor/LoggerContextListenerModelHandler.classPK   ]Wq  :  ?              ch/qos/logback/classic/model/processor/LoggerModelHandler.classPK   ]Wo!,ʄ    A             ) ch/qos/logback/classic/model/processor/ReceiverModelHandler.classPK   ]W
U  
  C              ch/qos/logback/classic/model/processor/RootLoggerModelHandler.classPK   ]W7k    >             E ch/qos/logback/classic/model/util/DefaultClassNameHelper.classPK   ]WI    H              ch/qos/logback/classic/net/LoggingEventPreSerializationTransformer.classPK   ]WxT    -             ۦ ch/qos/logback/classic/net/ReceiverBase.classPK   ]Wˣr	  /  -             0 ch/qos/logback/classic/net/SMTPAppender.classPK   ]WWN  U  2              ch/qos/logback/classic/net/SSLSocketAppender.classPK   ]WtĒg  L  2              ch/qos/logback/classic/net/SSLSocketReceiver.classPK   ]WǦn    6              ch/qos/logback/classic/net/SimpleSSLSocketServer.classPK   ]WE    3             Ŀ ch/qos/logback/classic/net/SimpleSocketServer.classPK   ]W     /              ch/qos/logback/classic/net/SocketAcceptor.classPK   ]W.  {  /             S ch/qos/logback/classic/net/SocketAppender.classPK   ]W    +             { ch/qos/logback/classic/net/SocketNode.classPK   ]W?-    /             h ch/qos/logback/classic/net/SocketReceiver.classPK   ]W[bn
    /              ch/qos/logback/classic/net/SyslogAppender.classPK   ]W=C  F	  G              ch/qos/logback/classic/net/server/HardenedLoggingEventInputStream.classPK   ]WT1R8     <             + ch/qos/logback/classic/net/server/RemoteAppenderClient.classPK   ]WӧnD    D             I ch/qos/logback/classic/net/server/RemoteAppenderServerListener.classPK   ]WTFU    B              ch/qos/logback/classic/net/server/RemoteAppenderServerRunner.classPK   ]W	  !  B              ch/qos/logback/classic/net/server/RemoteAppenderStreamClient.classPK   ]Wl    ?              ch/qos/logback/classic/net/server/SSLServerSocketAppender.classPK   ]Wk    ?             
 ch/qos/logback/classic/net/server/SSLServerSocketReceiver.classPK   ]Wb    <             v ch/qos/logback/classic/net/server/ServerSocketAppender.classPK   ]W!l    <              ch/qos/logback/classic/net/server/ServerSocketReceiver.classPK   ]W      0              ch/qos/logback/classic/pattern/Abbreviator.classPK   ]WTܝ  Y  8              ch/qos/logback/classic/pattern/CallerDataConverter.classPK   ]W7  4  =             ' ch/qos/logback/classic/pattern/ClassNameOnlyAbbreviator.classPK   ]W	    ;             ) ch/qos/logback/classic/pattern/ClassOfCallerConverter.classPK   ]WG    5             (, ch/qos/logback/classic/pattern/ClassicConverter.classPK   ]WAS    9             - ch/qos/logback/classic/pattern/ContextNameConverter.classPK   ]W{D:    2             / ch/qos/logback/classic/pattern/DateConverter.classPK   ]W}[  G  <             Y6 ch/qos/logback/classic/pattern/EnsureExceptionHandling.classPK   ]WO    D             ; ch/qos/logback/classic/pattern/ExtendedThrowableProxyConverter.classPK   ]WiPl!  /  :             = ch/qos/logback/classic/pattern/FileOfCallerConverter.classPK   ]WeZ,5d  d  R             L@ ch/qos/logback/classic/pattern/KeyValuePairConverter$ValueQuoteSpecification.classPK   ]W^`\    :             0D ch/qos/logback/classic/pattern/KeyValuePairConverter.classPK   ]W;@ǲ  w  3             1J ch/qos/logback/classic/pattern/LevelConverter.classPK   ]W,(h?  g  :             DL ch/qos/logback/classic/pattern/LineOfCallerConverter.classPK   ]Ws  ]  ;             N ch/qos/logback/classic/pattern/LineSeparatorConverter.classPK   ]Waj-  S  A             Q ch/qos/logback/classic/pattern/LocalSequenceNumberConverter.classPK   ]WLZ    4             S ch/qos/logback/classic/pattern/LoggerConverter.classPK   ]W9Epf    1             \U ch/qos/logback/classic/pattern/MDCConverter.classPK   ]WbLq    4             ![ ch/qos/logback/classic/pattern/MarkerConverter.classPK   ]WI8   .  5             
_ ch/qos/logback/classic/pattern/MessageConverter.classPK   ]W	.   7  <             ` ch/qos/logback/classic/pattern/MethodOfCallerConverter.classPK   ]W(\)    9             c ch/qos/logback/classic/pattern/MicrosecondConverter.classPK   ]W;& v    G             f ch/qos/logback/classic/pattern/NamedConverter$CacheMissCalculator.classPK   ]W)  
  =             i ch/qos/logback/classic/pattern/NamedConverter$NameCache.classPK   ]W".    3              o ch/qos/logback/classic/pattern/NamedConverter.classPK   ]W  Z  E             w ch/qos/logback/classic/pattern/NopThrowableInformationConverter.classPK   ]W>  
  =             y ch/qos/logback/classic/pattern/PrefixCompositeConverter.classPK   ]Wd;I    6             ~ ch/qos/logback/classic/pattern/PropertyConverter.classPK   ]W7.  8  :              ch/qos/logback/classic/pattern/RelativeTimeConverter.classPK   ]W4  ~  J             Å ch/qos/logback/classic/pattern/RootCauseFirstThrowableProxyConverter.classPK   ]W)  D  <               ch/qos/logback/classic/pattern/SequenceNumberConverter.classPK   ]W19    9              ch/qos/logback/classic/pattern/SyslogStartConverter.classPK   ]W4  +  J             # ch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator.classPK   ]Wn  N  K             ϙ ch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator2.classPK   ]WC  %  4              ch/qos/logback/classic/pattern/ThreadConverter.classPK   ]W\    ?              ch/qos/logback/classic/pattern/ThrowableHandlingConverter.classPK   ]Wv@j  $  <             | ch/qos/logback/classic/pattern/ThrowableProxyConverter.classPK   ]Wܪ    )              ch/qos/logback/classic/pattern/Util.classPK   ]W]q  8  I             ܸ ch/qos/logback/classic/pattern/color/HighlightingCompositeConverter.classPK   ]Wo  @  9             Ļ ch/qos/logback/classic/selector/ContextJNDISelector.classPK   ]W3     5              ch/qos/logback/classic/selector/ContextSelector.classPK   ]Wў_2    <              ch/qos/logback/classic/selector/DefaultContextSelector.classPK   ]W̱7  r  A              ch/qos/logback/classic/selector/servlet/ContextDetachingSCL.classPK   ]W~UT  a  A              ch/qos/logback/classic/selector/servlet/LoggerContextFilter.classPK   ]W[8  
  G              ch/qos/logback/classic/servlet/LogbackServletContainerInitializer.classPK   ]W     B              ch/qos/logback/classic/servlet/LogbackServletContextListener.classPK   ]W	?&    ;              ch/qos/logback/classic/sift/ContextBasedDiscriminator.classPK   ]Wy`!  k  ?              ch/qos/logback/classic/sift/JNDIBasedContextDiscriminator.classPK   ]Weq  k  7              ch/qos/logback/classic/sift/MDCBasedDiscriminator.classPK   ]W"  	  1              ch/qos/logback/classic/sift/SiftingAppender.classPK   ]W  q
  +             S ch/qos/logback/classic/spi/CallerData.classPK   ]W
x$  n  3             a ch/qos/logback/classic/spi/ClassPackagingData.classPK   ]Wk
&    =              ch/qos/logback/classic/spi/Configurator$ExecutionStatus.classPK   ]W-@M     -              ch/qos/logback/classic/spi/Configurator.classPK   ]W  
  1             X ch/qos/logback/classic/spi/ConfiguratorRank.classPK   ]Wm    -             { ch/qos/logback/classic/spi/EventArgUtil.classPK   ]W}o  +  .              ch/qos/logback/classic/spi/ILoggingEvent.classPK   ]W*&    0              ch/qos/logback/classic/spi/IThrowableProxy.classPK   ]W?  {  7             
 ch/qos/logback/classic/spi/LogbackServiceProvider.classPK   ]W"0  V  1             < ch/qos/logback/classic/spi/LoggerComparator.classPK   ]W     3              ch/qos/logback/classic/spi/LoggerContextAware.classPK   ]W5K\0    7              ch/qos/logback/classic/spi/LoggerContextAwareBase.classPK   ]WzJ   s  6             g ch/qos/logback/classic/spi/LoggerContextListener.classPK   ]WS  
  0              ch/qos/logback/classic/spi/LoggerContextVO.classPK   ]WYɳ  $  1              ch/qos/logback/classic/spi/LoggerRemoteView.classPK   ]WaLk  +  -             +  ch/qos/logback/classic/spi/LoggingEvent.classPK   ]W$2    /             82 ch/qos/logback/classic/spi/LoggingEventVO.classPK   ]Wb~2  w  8             l? ch/qos/logback/classic/spi/PackagingDataCalculator.classPK   ]W    -             N ch/qos/logback/classic/spi/PlatformInfo.classPK   ]WhB,    (             WP ch/qos/logback/classic/spi/STEUtil.classPK   ]Wc   y
  7             0S ch/qos/logback/classic/spi/StackTraceElementProxy.classPK   ]W5	    /             X ch/qos/logback/classic/spi/ThrowableProxy.classPK   ]WlW
  v  3             b ch/qos/logback/classic/spi/ThrowableProxyUtil.classPK   ]Wu	\  U  1             m ch/qos/logback/classic/spi/ThrowableProxyVO.classPK   ]WE    0             s ch/qos/logback/classic/spi/TurboFilterList.classPK   ]Wc    9             w ch/qos/logback/classic/turbo/DuplicateMessageFilter.classPK   ]W
w    9             ?| ch/qos/logback/classic/turbo/DynamicThresholdFilter.classPK   ]W}!    2              ch/qos/logback/classic/turbo/LRUMessageCache.classPK   ]W/,h  +  ,              ch/qos/logback/classic/turbo/MDCFilter.classPK   ]W>rcN  s  4              ch/qos/logback/classic/turbo/MDCValueLevelPair.classPK   ]W  Q  /             } ch/qos/logback/classic/turbo/MarkerFilter.classPK   ]WSD1    1             ґ ch/qos/logback/classic/turbo/MatchingFilter.classPK   ]W  =  P             b ch/qos/logback/classic/turbo/ReconfigureOnChangeFilter$ReconfiguringThread.classPK   ]W=ZL
    <             l ch/qos/logback/classic/turbo/ReconfigureOnChangeFilter.classPK   ]W  <  .             " ch/qos/logback/classic/turbo/TurboFilter.classPK   ]W    0              ch/qos/logback/classic/util/ClassicEnvUtil.classPK   ]WS%<    6              ch/qos/logback/classic/util/ContextInitializer$1.classPK   ]W&
     4              ch/qos/logback/classic/util/ContextInitializer.classPK   ]W.    =              ch/qos/logback/classic/util/ContextSelectorStaticBinder.classPK   ]W
  a  :              ch/qos/logback/classic/util/CopyOnInheritThreadLocal.classPK   ]W/3	x    :             k ch/qos/logback/classic/util/DefaultJoranConfigurator.classPK   ]Wv    7              ch/qos/logback/classic/util/LevelToSyslogSeverity.classPK   ]WR    3             ^ ch/qos/logback/classic/util/LogbackMDCAdapter.classPK   ]W|6  d  9             B ch/qos/logback/classic/util/LogbackMDCAdapterSimple.classPK   ]W(Jc+    0             ? ch/qos/logback/classic/util/LoggerNameUtil.classPK   ]WIK    =              ch/qos/logback/classic/util/StatusViaSLF4JLoggerFactory.classPK   ]W62
  3  5               META-INF/maven/ch.qos.logback/logback-classic/pom.xmlPK   ]Ws<   A   <              META-INF/maven/ch.qos.logback/logback-classic/pom.propertiesPK   ]WnD  b               [ META-INF/INDEX.LISTPK   ]We                  module-info.classPK      V     PK  F|bP               META-INF/MANIFEST.MFXIϛXGȢݲFl3ٰiaxfafP_Jqj8wP*耦Ma]}]a><~{I}޿ct ??#pz͇kM6Ax޿{N
JAՆH-!m
BtdL;"
`@u
l?Eжߙ"_o>iXo
8,6G$3i~dRUKkϘKo{ 3	oj0¹jN8jjUALni)ZO;~wiw5p.xn	c
iz1F3>0j9n_ds4{g?.K\3?Id=cL`+_mv@XR.)a_ic#f=WpD_w
۴4pH#	!
uAB~}]T6xjׄž!vr&?:3'e
{)ǻ8s=i
x6ogr珘6/\eWJ{W[O M6Ou~.*s2#Pmaortx(PZi2ڵ!${KrhS|u\5u9{ߺ鎧3V	սjc<wFٯ/9w#,ctOcMSrcŖIήzCövGڇ%qRpE3 7
X-w]7KM`\+o *by #$fŜIEՍW,V+=Ɲ#Ͳ2^vf5`8n(lrU
a}n9
S&RƧds)POYHal%dߜ0҇P7:N]~3-~F?M?uqK1Zlfr[LR:fr딼59j
IʤuE qyBr!gigʂrݶ&ՙUŋJg0S17s7Wy>9z*&OT
CmcELotyYG
fr%gyUK׶=FY TY4PC`TK ><~쁰ƕ&u,`f6HIX"SBbq.WZB[B@NEck'z֏fs'Y2bt5
]^BFIoֻJj+PQzRǱU+iUVḩ"T%^<ے\]+ڬې_FeAG$U(=$
*:"]dkFϝ;	ucgSѰ&;h5Zlr)ȚbOes^&hyR9spQlw6(o#吐Xm4~}%,άH!%aqq Qd٨v_+Y"|_1Ŀ<ln6jd{K޷$YOg[㉰/V)#wm|/ol>XZzVM8ˈY&a}kL
{4W0Bn<].!uG[!N-W&׫l}#ug(uB`|U̦ղK`䒯xh*M3:	uakb]'OeR@Uږ94w&a0+i_s/+oǙ	f߷ԭxZ~8@-`Ht5}uFCwcg'qHtMX:QU*y
tŚ(M3,ZAGGXk
W"H>}
IPaQªmw	nC]r82n(:"``	"ǫ}9bg\/ʆEi>^@RqYab?JeSْv=!Ơ,Ofw++i@m
qJ85%U#':gl[WS>/kK~|4DIJVTn%l*0B-	%WG?PK]E?    PK  F|bP               META-INF/CC_JCE_S.SFGh-YU;a4〳q9ꪾ]Lq7H.|	>/oЯ_g:~,U}{VaRoZ$g	J0OvNB뻓|(06vHYJ$|T{xiIP]a|=W0[\ߨkրO(n~y}	},RGH}1\Nauv;z/o!=
嵩.'ڂz
~bA>ϝ|3w?lvI3ͭcڏn]}tV(CR Y]^!հ+.AL >m^(\eXq&epS7$m,̮YH-{x!'BؿDB3$5MrM^jK?qJGc47;L<n)
_>a7~t@85BƑ C?5̞4j0ޮ[L9QhY*)RO<RL\qExWMuTu=u8V',>bk=P>7,g:>BYqU^Mm?͂
"h4tC]|<;@ȃ6;wJ(rɈ<2OCy-,
H2Uѓlf817)ocMsh40j67c#GM6fOKڞ^pumrc[U{NvB5A9Wn*h-ZYV^Vwɦ"qɕa8X1-vʮ'_o"@1%3\Fc:6hGlI.?(M"Nty:xg':ry˕$O67Toa;x(lVdSѧLt9紗&4n_J"آ<w!k/ԙ)V5K̓}?.?&b##t{
H+v]sMF
 \R*m[GtdeTd!
Rts
>Rzh_xӶ,Nfյ
w$r|qLK\R0h/W
)ATn(E[Fw䕘S5c?ܘ.*W	_"k	qpBښZQ@Z3ϜS
wE:H8StB/zQ:.{\KAԦPM>f̮p浉~5	.+{!nH_E,it^#7аk͖vQ-SmyVݟ<%2%̈W@>sX#C[uK_Buym HG%𴽗yJQ津c{'gK?ׯ
F# A'l#,Fﰧ]K34POrtZP";]Rg{߯O*-N;xxܔuc<v)=KGBFƆyj<_Wzn>`fB.9p5S 0g|PlG~_MaTs.c`>G &um7hD#^_;4#_p
Du:$*$_p5+xGh64QrJϺ1,5y7o<~tK<2˾uP1<yB{y)×S+~Vi_n1'fgE9A!0h6/;F4~1zܢ\?B<ppcH	Kk"D|j)W˩IF?WژpG!
.lS7j1ƆIUa&99U8IS\#e}@>В38
ݫ_}Q@X[Rgxҵiն0RW<Mٹ~*y[DۺDÉ6 Lq##vz)X[;"q^G ~}9n*ZLoGTH!LݜsV*D-H2Vr4u*B`t8ES
ɜk?S-^쎵vAm;n)#*
ߖPKYxr  n  PK  F|bP               META-INF/CC_JCE_S.DSA3hƩiA&5Ll	m,Lg41 LLL@@,X'rp1	38LΎB 0g@bNcNI4HKX$4O73($5X3/P@$-,XVRXn(c R,,"h 'k`h`bdj`n QFH&@XF GzsSr>)lLKg}!DV?
k	G>o~V{ff"NM3k/
LZneNpHpɛ]ߗ+&RelEx2"sDZT]ڹ2iuhKAN[};Yw'eL^Yj}uojL˲e
W-"%WM
Q`\QҘauN?6vvC%zՙ׋̳fMYK)U6NdKWYw[t9gĬ1̺w
Z&~^_z좩i?ޫlzr
]WY_L˴WR.t^EG;ۋG"Mʹ*]C	EE)g$;uOQ@+߹BrP'FFf&v~`l
32ga5`R e	G_N^0/bQQ.3)cc.tDbu-7y]}l$z4O͚^~75/ q$3(Llhj`jdddhbjd˩C}x4RJKj&5 ̪eK4{{7A6]7lTtuP
ikѯsѺA$SZK̟Z@m?&:DY~7|T0ipDoi'^zIYrE:=!_ȚI;n!^m{1f;wVNYի>ܶM遑}D?+dhl)VGCLxyNڈUuj<XNN{҉y)&}TŨb}f}+'th0|Iiq
ա)>{jAlk-k_pXc?ѢymW$Vu~ܗog~,|SztwhY8hU}.T|:_^QU"԰N^$qHKtJMYg؍YY@YY|HYQş؅/n8VNfwYY
@E@Q:(1/[$#$!ʒ!L/%[y(P|i͏KR/]k柇ԊfsY4aƗ*ܠq Ri5,z )+w{wFoWiL"OD:^q{}]l PK,?*    PK
    G|bP            	  META-INF/  PK
    G|bP               org/PK
    G|bP               org/opensc/PK
    G|bP               org/opensc/pkcs11/PK
    G|bP               org/opensc/pkcs11/spec/PK
    G|bP               org/opensc/pkcs11/spi/PK
    G|bP               org/opensc/pkcs11/wrap/PK
    G|bP               org/opensc/util/PK  G|bP            +   org/opensc/pkcs11/PKCS11EventCallback.classkYƟ~䴶ڞ~XVcjv&5MƱ
Ii,,,,,^/^A_ghO-js~cr|=sȷc 6EVbĐİa	c%.I\HJ8-qFĸe	I8GN@fg+ЙVj_	FI!fܼkϻw켛flwޙL!еlfBmcGBdMn&rYn+6*ZT6b~/l().0U8K
ڋfmvXC@v[L;to6eCN;lw4i02{aQvKh	PuT)	wlMz/	\
BєVpTY+I?VٯZX/okytׁi
VWZPZ*e-H{i\^a%ٕ֨AӎFV-(n'fV)׻ޒ}cA||Q1 4)Yϑɗ|+q'F4&OE_9Kg<][^ef+E5b/Co`hinAO_S%LSUO/o)AN=SϨIfZj*ԪMvviաUVڣUVZ)zժO~|#vPKi/  /  PK  G|bP            0   org/opensc/pkcs11/PKCS11LoadStoreParameter.classUkSP=@K$Է VJtFGL-ԄIΈ?7&A|=瞻I~HqXf',sS8-Dы
ȋx)bSDap2LYG-Q<`[fۺ0W5V9V7cZt xa̪ꆳ:_λځA-kVSsċ'#欛Vn:lAi0$)kFU-F#"mST3j2CXμåΐNy9ݥv&UkKRLQ}Z\~rw\#t;R..om!,A}lO$1ݫ}/Uscv#`PnD}AO툼ͣ)	WpU $ƈQIe	ŐVDM~̌)LS&;P%qNVU5u.{e;UR6[0{FSC$%w6cu&@!ǔ
T!w"ㄻ Փ5ZRNv7an"JQ>L0:|s**⹩~;E!ex}
xQD\=fOvr@X/2b¾%XL؇^(PY-b31l \ |]G?{xp>N?Kd')9)bPo{9菽4&i|%PK'9     PK  G|bP            :   org/opensc/pkcs11/PKCS11Provider$PKCS11CipherService.classRN1=΃餄*6Hx݁Ь*Z5Vbg&fbfF	San(
)U	sc] XÜA[(Z Fma¤i
K倷Ep9u*i˦P=q*O'CKaDinpŏaށzm~ߋ!DnXnzz=Q<u۞_Bk^KFM)dLy f!KʨXeF/=ӓiK(_hzq,qfXyeBlEaB#ƪ3}6E>4*tW	@6`/,.-O.cĬ˚Y9
Wȕd;t*"\"E5ޡu'=PK[7    PK  G|bP            D   org/opensc/pkcs11/PKCS11Provider$PKCS11KeyPairGeneratorService.classR]oA=E\`k?DZuCĚ&&iҮa:3xE>4e[,6dfܛ+ ;x㳔,Q6PUw^}q3:2{=!fײ^H#CCQ(ZuCd(v{O9[sgp£Y<d
kcEG5cuvynE{!lr0gI0P5Eb#X]j_%!-sG6Am+%Û{ƛs+twC*!rq`2>P]P#AKVK4	~z55vEY"-qbVm_ۚ"YJ}҄
`@rr}D{
b5K`O7
6
PKL?    PK  G|bP            4   org/opensc/pkcs11/PKCS11Provider$PKCS11Service.classUYSP.m4ŲHE(KRŊ
,2)P%$9GxZ>dr|sn~`a@@+9cv*9
(&$ǭ:Є;w9bSlʻüj1^$}YzVd˚bt͞aX
왚}(ƾSQ)?Y"k޸2nٲ6 /o=9obhHٲiy=Rg8f¢nuJDCq<bfV2n)R~GQie1FecOT<D,"A	D$ю"|,p35Cg
D(.eZ64=TѨSM̙bT5ߪ+)לCh8󺮚nH3tWW%0dB2H-{eW4%gUJ8'4<-u%e@yXE`^w%%ԳM,UV
	2hsO
"4>ҕ1MTT:Ԑ]\CUjLYeګBtѵHl!Iz:t-᣷84<22vp#:qzENP5Y-[/
z:Juɑw |A33Tqb7OhGp+%t[4E8<襬='V')Z8}/Q-#@OC-˻xQC
`Oc	PKXB  H  PK  G|bP            =   org/opensc/pkcs11/PKCS11Provider$PKCS11SignatureService.classR]OA=ölnTiA4>1!Acu&
qXf73~
^|^QĻ&Z2{枙3 cك)5puqqY\<d|!/5^ZàӁ	q'\AhTGB;	)ϲT[+4L7]ٍgJhygv"|܀LuP&
ȴZYjV(jȤ0-H}%},C>`_ΐD~a~-^⶯E(@FԆWJ	N10<	#~e,ca783L7Wac%zYJ,OL-4?B(x+Of'`߆U7q벦Cz(:8GP+~d#p*p*%(Ne>?yx PKBA    PK  G|bP            5   org/opensc/pkcs11/PKCS11Provider$ShutdownThread.classRMK@}Ԧ۪V!
/=P}I-m?JK܅f7|{p
JX1Q*ذPNdG2c8N[?Iҡއ:U)Ci<uCY9E3._0I$l
"\2*6v8j؃]'(yP7Lao_*%Hh-5w'	uGRSS:ԖtxÑjNsiXTG:E5:[nh~A}<_!mO^Q4􌅹p!./DPK4  +  PK  G|bP            &   org/opensc/pkcs11/PKCS11Provider.classX{GzNM@JRqYiȎBCJ"Qp	f56JQ(rS@}U mc-@oZfw%˖b}vv~7Hɧ?
xxQ.zG<ޢ@[%+&on	%Sƻn{}b> A!a	,HHOO)،2>-32>+s2>/2E_/+e	_U_u1oHf箈c*<*1#x@b&Ɗx,(xOxJO''RDbM}v48z@P*;w)D>6-ټ,Tkҹfgs63y+l\/F
kf*8qZɚl|ʎ0:6*(;I
RDwJϗxw<=tT)H</|A+^4D┕)qe&&<"/8FnMVp{`Wdw\ۚϓ`+O4\3]NDyKϜ]}%u}zYuIڵ)4#%]rң
)gG<my7!t
zTx]ݸxJ/VɠslYq)K5MMCAxagf\$-&	"mjÀ/RF6ݹ^rs)ND78{aY5ŞP1i&%H;pFŝxc!IGu33$qO8S1{[d5NmX%/?OU$h~֋5=[*m"mDxƋ~k%Lų_*^XWݼ*"~
ClUeDrE!v	BbS4c:ѧP[^ڪ
UOO>2k3CXT4i7M%j
%-߲w<jfU\VCaiI&At|Vr4%<آ+T<㫤|8aK	IvWNx5,aMRQE45KVgEsx^E	e(K7ʖm#'*o"~O],ںҙm^p/JњkUԴ'&G" v)ht[VnܶEʢSjVx%wR5g8Cmo>|*j9nY5YX
E: o[vjT%78-M٩m6x&y^XPݬ7@	ȮCTO"#~=Ya'
:ŴB5\owU%VQ֩[Kq)ɶKwIt<o¬-+[~n!aht݄p4,ͧp{m毪/]7wjH7{XhDyf4%'X'KH!Ʈ<ڢ_.UKzFc:8:qzGaֵ	(툊
pO w]C-yVͣ(5WIpzr#v"Jv2\>3-bI	p{h$"j%ad/FwUNh
ڹ
_C'n8%fN?Ei/6Up<^BfBh7j
#75 d{ـDAB.
vHGKT0TWy-j(^^
اRdQ7alq')^>7w"ʁ$s]Ny	~QWhۨvWHze\\M	T|	2mD`v-ÏM-`t+UNs!	_IAOb߀$NAWiR{:@ PKp    PK  G|bP            *   org/opensc/pkcs11/PKCS11SessionStore.classW|Sm[i*fQfR`e&6r䖂ν͹GWsS| S9{率{sI߯sw|'O# z7pC%:N^˻yyx/nT>ޏ|?f7Tx0OqV?qf	Y|ҍӌ]~7f^>n|w#/2/N^K.W=׃σ /saDAfpȍz^(81f_Su7Vy\)7
t[n\or0.|<{n|?PC?%~@h)-:GƮ]F2!L<4W3	')D#LKKd("{ZZzč3[tt"'Ez4۵DO$rUgZ2;wh=LͽmDыyz?#6L=jn-M=BtODdRO'Y&$ōI[1>e8+v#xZ_0ܠ6i}	2YzOTO1Ov	=&IHlEfJdbɎuZLWdPwpRW
1R|2#'Se(xV)KQG4addBǣIe<lz6ug4&d^/8%+FYL*)\G2-TlU=*6JW
*6c!*~o?WR)LfS)#mѫQэ+K3M}``<cK/dc i@lU+Zo[>N@\?/x̜VSJFccAqj6SF¿9}m
&=1U
ϫ;!0Y*XοUU?^^d'SxA-`;d`@t:ē]z4p
$w7مԵX>
/xϪB
*JUH@K1ɰm'c-[Kc9@TZϐ-4wyJ)<%*̟N
ɞ!UvaiOȔ6Z(f,D@`nkI|nU"0YS2ұB:
PUQ%Lj\asOSE
΋)SRc2;k=@Ѣp)xQK<Uc&(
vI񊘡sDwlAFNrWhI<hx$ DU҄vF7/vٌ4ȓ@8uz
ZZ	|^*9PJq0L4,Pp"!Q?IɐL\46x`;񩃆FjFO/kw`e~ GJ4iեmԥ^H-g6q#5~-n1H
}CӐ3aAVų
|]c;tj\@:<pZ#'VPbhyFbJS0Dҷ[($'YNl	q$9ZQy7dU]q3?y$FR=FIޭb72]͜ɝS-JJRB:,	L%1~vA\'<mh;rX4ʝbZ=teZ5Z
:DH<
^lyqW+x֣ဍpvx?W1=PYa7a#UPd9xs3Mp~ӳXD&	H6/da;}	z.@IE,/CjrݓQ*3~0rr<|f1}UDw06%hj>OvgW	jvAL+2\KBFnq(-^m&l1ܸMHt<(P!B 	+u.b{7iQq
	F}m(}8cEu(fp>ADs1KڛZUǑ9@o9Vߞü}l~炐
B(Ok7Ka4&]L#k,ZʼVqNhX"̧QZ|~yYJ}.\0ӌu%@[¢򖄥64m!)yB~;UmWY8!vv .R%'DW,D\ cVWy5v
:]| nYB}Zy^SRW<j)4IO$fVGN^46oRVP`U0-I݅fs
Vycz庐L#n
Q[WA$[g(%
`?YJkD(Vn֔ks4b;-ڶ,4mt\*lYwj?z})P٭Ϸ>?rmWAHT˛xЛD	w[rUp/juAOW+xlX97,ZFv3aiD`yȫڷnjj+H`p#n*oi,͸>53W>Go[ˠ+Fw:څwRN"J_Aly:يzg%=a'+i?J$*PK5kʸ
  _  PK  G|bP            =   org/opensc/pkcs11/spec/PKCS11DSAKeyPairGenParameterSpec.classTYSAɵ$Y( #Dj$
Wa'Ԓ?ʲ̄k?1x6B+<!<%X X$xFEVK-X`A-!lL1[\̀3ԸAw*wJ5W_֞p[tn.YqJYy-.o+/3sMG..~pjNFʝccʇfuޖ#grΓ)kJ	ouŌN0ZtcF8\'"	<[Uqi}R0gEuzqZ}謯Q`[H#\2WR4oɍ)*3MEotƦ^ȡ'TMxiԩ!:#SȤVm6:	t'&!%Hp:,xm:!Ap	ܩL*f"͈*/fӅlv0ן^&0?\d
D\X ߭`0z|wk8_Pn-S7molP;VNe=lQW^T{I"^0	,څ A0܅A J`BsB7ThpppU8UF=XV2:>lic8zHA#Z1#f鷌6c~_U?Fk>}|z\MLoGFzTQM)E}fLwo+1a
"PK:H2    PK  G|bP            3   org/opensc/pkcs11/spec/PKCS11KeyPairGenParams.classJ@5kkZ't
{Au1	B_̓CCNҲ|0? qSPT"z|B85|q`pMl	ײd7.	¬l.k=uoã]e&\Koui}h_d<KaS.F7~/^E	,
ޏ,En7	!>x/ڈ@h;A[jN$vq.]PQPK6     PK  G|bP            6   org/opensc/pkcs11/spec/PKCS11PrivateKeyGenParams.classeKO1OaķqX>c\HJUdZQ~qg?e3Tq{sOno`kiıI$`nm3#Ðp>VP#LT+T
)@0+C2L
R=;SQp)E𠴠kJg:N05C?@t=鹣ie֩]'=iG9$0Cc>=Ʊ;GjcZ=ř~
]>v{}~1qX1Ѥt-4@5lTsjQ-..4<exYs!mX "h+`zK]G/`#yL25PKg  0  PK  G|bP            5   org/opensc/pkcs11/spec/PKCS11PublicKeyGenParams.class=M
0_c* Eğ2U\x %F
v0D7B;BiK[d
R?
`kZ*;p50-
6펟Irs$<I^G-<VW"zd20T8p" ~4{{nxnznxPK%     PK  G|bP            =   org/opensc/pkcs11/spec/PKCS11RSAKeyPairGenParameterSpec.classTRAmI &" *EE5*lR;?U>~e7	`":gOwo&
 60`A9"e:-X`͂u5ns }T$NOS=z'$LȰUm
	WASλb^}s|gK[Kuvv?ξ Ilt\9͠;
wqKYO$qrۊbN?r0<lb˚;$!j<u5Fq&R;0fMqFuh15QʓplJBâz
'f8>.ljmVF.-FNUt؆MJ$ϵ6a38G
pӆKfC;A'AA7AAA/f6
W_J+8B 2B:8dVOܫu CgV`.a0rf;hd8vsÿf7lи/*@?v;w)VܣWeWޖ!_TO`!!tX
QrO}S}܆J߂̐éI;)PVl:I`:!cN?lt;mGg#:<FcfFyL1-{yW|-4VSq-h7hYޠ双?6ˣZf&0gz;1|
6/PKR&1  h  PK  G|bP            +   org/opensc/pkcs11/spi/PKCS11CipherSpi.classWy|6fdC1Al+AA!ElZ!YYvgQ{yZZ[+H+ITZZ[{ڻP{3'!J>{wS>8Ƌ
ac!fpxQ-c2B~JOǽP_		OISW0⳸0x:g2xKa#FexD£qY28,3}Q$|Y՘0xW<l_𴌯oxQߔ-f+#㻌3x@~Ę3eԋ19_0_yޢ^d	%N*z	I5ҫ"zHK=KdJE,[Ojt$실m\?CUjGOŌ~ߺ$-lH(1xv>ZFܮet:':{c(&SjZZ$CC[l"&cc1cD|~=	.ʈI[KČK'-$Ӕ\%(ZX3֛@yF֫8yWhIOLqlTQ:r$4e[3#}wEIuiCHft1!vC'6)_3Y8'R|erl:goUt$倯JDRIBՈ
N]|V@ZtE`AE0hDT裡S;
\6)Q'-Q.`˦ddQ(fܶvtuYXѻȤq2B7l.0ɑK@H69<Q}u,Ƌ̢Ջ	Sc7y 	&Oʩ2-VNI)"K9e={(؎;
.VQ7ת	VU,^3^'N4mHtcKәdROZtkAi3!Rݖl0,-pc87Z
;ɣswf]5)Ϻi#CoNK_WpTexˡ*HS7W(xo3hNc=	ՠv;+
K9tD~
K-[HQjU_M#HUO߶$SUFhS9ZFFt'"ZvץTmS[pi6?ק)ǻ֝#)}ofly
B.0+Nм*k
Ҳ(?rzCNe;u=jEJFNSpOޥTGC/1Jj.ؼܝh!Wm
5
eS>b㏨^]"dQ=^
_ýT۵T^dkndpp=Y]֣Ɲ#P6w0Æ)s:/	"@P'Aଲsŷ@`-S=$5.zm0wi%tS/AL5I<[X͖lHp'LO&riE
=@)#qԖq"3V~
xӆ28oa-Kچq{i<̢ܛw|@5KwOhR)=Uq_j5bA+Wfｋ跴LV1Wz+ws\4Wzɘ+=f΀G^A1`\T+FV1<B\NmyF!CAݾ1x1@
:ͣTm	
P}5ct<
t[&ڱeG0y/[c(Ӷ֎7|u1{QLk)hũch:("Y'9қ:#h]|OK9>LOS3[ʙQҶF́	s/wGv
dlI.q
`qh.mCĆWfPBv/QIQaZ|ءi.U{D.>w5rEC*W^xHM|63^Xۣ8C`g|dS6גgm0g-Unbw0f݋:Afz6D[fL)M\$E#xCc
:<rK
O>yޘ[k29yZ{4ZR:
Gq1
U;%ԸK03
Z*îzUZljktb5C,ux	S[-^C,`è~JRܔЄ"<}+L~4M+h9ѥF]G!$W
ӫځzD]^-z*Opczw:ʪѓ2]QtjƒTsKIoqk)<;8qZ+xމaP5qu?JGN::8t\hzy<t́(V>6	{b~tWQ6N(췕%;JlQT2vl\nX}'wf#:/<3vJT\/ɫ{/&oՂeH3ΓMlxY飯N{B֛")}G!.PKq|
  	  PK  G|bP            5   org/opensc/pkcs11/spi/PKCS11KeyPairGeneratorSpi.classVkSW~lX/PjQ Fj[X-E$JJ{5A{߾~:e~L@@g:gY B03{9ycNF#A1\ÐRb(R2$#xI2F%\%,c+^`,^5	h21&ᚌM!ƅeJBu	9	2`HS7dQ`ʰ`H7%jVAMY\R5}'uPL'I+9%SV!b)#性mt}Cw顾LWW!z-;Q`&)-[-SRP8ef\4SGv&Q/o9<5M^h!VQ}C|:Łr>e{xzs_aYY"G7568pDL'3⅏hf*xfb+4ɞ
ZQ+p34]YC5{Ts	Sv$Tgov2aO`hWDOyXPQ]xZq<)xFx9MdVa[8#KXʓ[j8i#-7p[4P%Wѣv>*.^F2TS%$ȟ\4Pr\uu՝Z
B]f:O`-o?S-uO?i.k{Kp.2XyzKFB"8U]Gm&hO|4cF­(%|#%5
|qQd	vOðK3	+ԩdѧdHRWZA'v\,uAC!ʕgdn[WRc7KZYa3<>u;N}TPAB63QwukoqFX2+PjʢUՊQ!jC;+1N[d?$15	t]g
5upsNRކ!Ufx!	gH0OVEFDNzפ'$ݓғtyqnZ{`$:fP`3.Q;m\5 E#s|;EʉQ[Ʀ{8hCXt,<ld(1c-Yl-2Zt2&߰3lw;КC,vE[=fwt
e4U;߃ XWƾPa{ԅcQ~1)MOMgdhm+O<7Agشuw8 ^	=Cz7VC@O?t kHP<e~L`")B͇
W0ih$~BBaK$|7\?PK')uJ  o  PK  G|bP            ;   org/opensc/pkcs11/spi/PKCS11KeyStoreSpi$PKCS11KSEntry.classTMo@}4q:%ҐJ	!n
|%JJ]g	FeoW *$~b	%AQ𡖼37z
:ㆎ94GIEj:jkXpGܖnڒ3dvc:kc9RN`8wη=kwj4s	mshw|!O,U/iOW=K%`RAym2(C-y
DB>exULH`;d.:ݒs^][ha@0?~:1o.j0pE
6"6\FZ[I?uA:6۱^pGjxPOFbh+S=랡:xMP*HbX%}
	IRlL	$(IɏӛhV!_E͕>yק#abT60\EQ	?#}ǼgU>k.YK4I:5p,y:L5`LPK^D+  
  PK  G|bP            -   org/opensc/pkcs11/spi/PKCS11KeyStoreSpi.classY	|u?p	,`ia [	a@Cݑڕp.؎ns`QFvm&M#=#mof/i慄ʻ/ZzZGWPߑ˷r ~_÷
߭B{:⊎2?g}s
c!R.%b?o5 >?j'a\	/"r7QA~:?~[2Yokx'wՈFЈtŕ M;y? ?o4ұ	o&]G MdtfϙUhO	Ѽ h6Z rY$ce,v},hXG~ђ ݠoj4@t:F:LZɞzAU|wScZv:ȏibbZn
к ױQެڨQ0cGK5;:rS52-I3O2CLgz~3k5}}TGzƝ&¼;[Zw6>ܲm-{ui)93k&&3㉸!,Q+T6,]ѶÑ56)H:sEX>2977eY=d:kuV
wNy<n6sdc3:=)3I]
R=M.dM;Sj
7mDn3ډ=1v庽oK:fN̙clHӨQ޳R/6+ǦjǪ9RgZ|&;ȢM}ɘ՟ce5DXc嚓+Kt'bfnOg:GZadI6\zu~tzDltnшqg
L ݝNZ	+jG9'ƛ[6yFVxJ2^3"s	@A%3iRf=l%7iPPSҙL	VtJE}6Ӟީ.X;2eRSCEF#B2NfW.moVQc؊ls2a*
Ֆq[*geٝ
㍹ ] ;͌ceX;H1Yϰ_fKWx5iw5e*7*Bб&DqW>ןϱe	[-ڿ3m	KJIEL03fǉkϪFaXi\A6Œixo>jk40pgrip}:B/R+ams'̓}t&lO
T8J
K%d3
F?t.v3t|lpA;h'òeo()nb}j]u.'iAӠ=rE</sk018	Fbl
_±6٫|:4:h!L<3
n1l"3hdtb2zDArRY`>lH%u8]na87(#\wl2(I}!!Z2!f{zsK̔<MdŎ\j!eȘNv;wto'w-aǭX:.&Y@SaR斍^uMr~kLZzaT|*ןc-$25(GyN:ѺA'lnn	6-[y)!-eG	0},V(^VMX]|>Rt{9>j=xYVנ~NAH>H*L6+oY|șe>Ɂ1ryT:WX"l:a*䫔]eʶx8lqƺ+ȈT>U~%NdF'/dՑUFA(uD:h(Ǿ|̠ӧon2G&>M=eYMq&}Ơ'dN5Tě^kko'1f'@o>`r{gw:W <lqY{ָFLOgcq,">Nt>w2(C|B(fN0V`+hMqyH+/sK"\)W<іL+-/uTzњHg[O!￼紛yM\Hqsr<˥0ֵpb:08NҶẘ==Mʵ0|#!'z.)}f(\yVE3(DN|Fl6oeFi3ѧE|:0xfGH2SYP;Y-s$Yl莺$%-uDYRƱxx\ *H-dҦ@6i{9Q=br<U5ɜjޔQ	"JjQ[d\1	3^{z3B2Z.SZ78cVq9S{ۨɧXŇc@."bIHWo`.'r-ʰui;c\r4*HD)HǅȉES\d܏.s)="-USER2ެhe
ɤ|pFIe7B1K0V'LsD0;RcTe}>$"n4&_b4cҟq'ՁPqeUMTR;쎟ˊ8g#]뷛rypUT7?D&.,F
 /
i>A?OQ-q=W~܃!CxM<٨"+cJ#osj::0K/0|
)
OQ^FT廗K}
^Eu\K0U@oct3|}O:ʞߏcjvP!佈QL+4tvyk|0fG25䯜;>/LzoF+%K3UM?᳼oWt91$bļg {{@3/`#yhG?+wֿ`װ<70;jq{CE,}blnxFB^dK>CXF儨.bvS-)BAEBUGC?0W^ʆBz?N=+C``+!,Y!ԫ$v
<øJBx.iŦ5sGyg:|߆KF
ϾTLܻXϑa١F0#%&k~_vrI HgokgK|SA爬/РrlC7fǙڙU@\//_W%<cr`Khr1¯9<w}oKA/KnRҿV&@uG-~'9E63ԯd>`WaQo-[
hVvJԧWLN!ƗY<6L	yK{l.*m8vGp4$# E;8N
|
/oJ};\yæd#sm]vv3:1wNg2z\~#K잂JXeGh߅t{N*mvx,<giehx=%2c#NUƤuP+Cլ)T8UE+;smK/~' R,<)H+/
̄ʘ4F~_*k+ɍlQ}rHuNb-<|Gx=LW6<6溺`	s9%FVz
pfX$]yY
;K8̛@{0̮!D,Y/ud\V<%ƕ+P2f~"n@at=˯Dp4z#N3 M1hs^s;ʁVaW'cQ_C7⢐o}M|)eO=ZoZIG9T5U3bbҤ*4"o,ƮT*@.*C\u
xKP2fPЦP0?=1!hk
w\2wZWTpV
+|,Y.Z+xUHF
җZQ,#LH7xk>&7JZwРu)_ 7֩QTU\@E,z!|]qo

&:T'IPK=g  q&  PK  G|bP            .   org/opensc/pkcs11/spi/PKCS11SignatureSpi.classV_Wv²	%bؒ}@(!ISB@6$@b	v؝.>HV>V[jUFMlI#j}U姞sgvw{=s~*nÃ{p3g=7>!Q)sOzPz_񬇴?[|s79b5/xzS|2}n~K<!732^GXO?O˸AӼ/$VҜ6zR¦A34-=tZTWWC{G82$h4Si3%b#餑@39K;,G爞Jfb24~HJhHv1+37"BT07ErkIGx\M"T1/P#=bZژ #Ft+MR|+J{zXt@חwIp@P*X' ݏIlno)ז^.m:d^V|;7wbטk%-?G&Z4QHIk!DHcIh	,1El>	w-YtxZ"jN	WX t@?xs)ܹlk7Ϝd*-Mi-@{((9+Z޶`z'=SЏ
2!g(*1`r 0ot;wn+޵|>%Z5F;	FP`54y_ uLDxJ5Rj&XL-
e	Ug"	;lPMwg-r@JTA[uL-nRUަ0rf'l![	킨S1)خH>`+8>W
~UV[\Ls9tCAS{֦]^݋Ii3AyD鉤MdfR]L~ ]?q:d?/
I	[ox_A'ڼiٽy-%KƳ.sH;,eKxCL޶-8_i|Qhq*y
%W"7QEK%XNMwlYP)!@-Ad"z"ZBx^Рuw4c؇Vtp'[\%)JSJ&lĴ%;:XȿEryCaJjm@{'pک|\)w׆ Zz=O$zV\%zJ\jEZarQ;!q #-A/sLez>O`ړ@%BBYTgQf(NQ)Z~4TPz
TP"dW^l2	F 5jBAA9)A	9(ZS k˨;~簖%f
چD[ǩ]z_-`Ӣa}so;h<ZÿU%4Ih>mossk-\6.r!ShwxBWd2t(6gq+_eӷҪ[/	r֔pylvxgnա_س 4ƸxDWs؞.Wk
~@CHl
x1x;3X
>^}|<uqwX>xEqeGe˛n
upIѨ:tAL6R%<gGu}pݘ'\EdÂ}rztw;\
DJmlp0hF"=.&Wu^g=Mɕ1UĿ{-?INZk 6AhJ9l@vǅARMd>"+sX#\407܌Ba4}qL^,b7dm瞘<N]=.REk5~U ~n-<Plw(ѓ]kZ}({M"UPK3q  L  PK  G|bP            ,   org/opensc/pkcs11/wrap/PKCS11Attribute.classuI% Y!b;	Zź]lֲbbHPH#Mi&@pμ}B#7?f{3]? =8׫`5.o;zz.Jb~> 0cz}nXOi,K0ћ^w=6ka]2$I(̊f$OVKY֑YSl &_E˖eBێ!1%`(857{('iYeD9XFԲNKUߚμPp^Ze%9E*GTlCF+D4Cl!!993SĈrɴgL! S$5ԡXNcٜ)CdyUq}Ч~A@d':HNFi,+*BrL۬Va륙lQRƸ)	4]ҊjU9A%1;%C/TĈU%9N)TWᾫo-A	5l'ST0ڀJ"WȔe}M$'mR.y߮֬=
31vt2pܹRwu&`R4@Cjq^IO3}SSOkj N{T
^/M!d5+O
0vIm-#vN6U7p>Wzϩjim]5ՐVwr>M+GƇU8_;-5Ik%-'80t%v
r{S\yVq=(S4xV~C6gKdhw8&9!\kmg
Ze6'PmS\~k9Ql9)M_|2+h՛su6[ͅ׮.hqJ̹}7dt_cnD]F
*tdKx.24L0%
%P!PIex3/\KQC~o$৤c70ĵEoWuaqWn?&`'K`D=66z.<4og})lܓ45OwG`p[cX&k;pZTuN[OcCY!yWIj(Ytmskjۦui:W=\~mYMͫGf{ِw8z\˷;>FoBxyȟe
y;ۑw0N;b<<xn x(Fx/ߏy_@"/!cˌ AdqYgA6|L0D6BbE1#ʸl1ˌ+ӌ#0>|_c !d,rr!G>|drQS|o0&1g1~	瑟dӌA~v?y0.Գ7{Nf|1-pG2ח6NߠF1:F+(ǭ1!}"]߫_K0:.ÃlG3c`2q	݈a(E}5O
5ruCp@/B40nu](
OWUabb@~Q諸>zKc+xS_:MއUǠT(,ڋ:-:0pbɃK'-?pPl_PKD<d    PK  G|bP            .   org/opensc/pkcs11/wrap/PKCS11Certificate.classWWU=L$b{HZZ
XePJPqHt0I׶uߵj[ݾs,[ѿmo&r !ͽ}/:{Ep̉R;ah!c|xDN8LcHNcB@EB_b;8'(I'Z8r2$r@w"Sܡi3r%O:O:('c(l?>>2PwjJT}Xe΁Apg_GxGgWrRrDgNI3Ik>LC]]`Fof+TZ#%kg0S)1Y[[U3=	-H$e5	$OFRiMJiׇTJIDTfpvDN씀1Yo5]T".Zm֕xGIYqH"'{4p2Rb52[ˉ09R:&C<Oùr0J.+'4y<*7tBPy?f	8/	CJ0lV煀dI0/#ڹ`(KDo3ID#RwhN	H번!e~
ϰa5DAkzПqJcí&r s[QgD7DdV9Њ}vj$%d;%_zF&O$x$MdB^|xGĻ.r}pC-64UH@q24S!5{5Ty&I锣Y'xF>#K>q_0l]26Fj2SҔ/zhq`deKb[p$(̧^許^{90x~Qּ6>[DVS1<YIiH(FoN26W-sCG&ݷtFh8i~<#!voHE&Ua}	DlQA8Yܚ!TRFHb<3x\KLkHڮ1%E~ xvwSԼZ|$UT"1Y5b N^Wm3{dvTzUDr:s}niv#n!"J9{|n`ia
WZaύ3k36+,ډWQx
o3-(}8a,DaXi.@YDq}%UWfa*0p9֟5W74&< SmFd`3L}VZ
~vASUQJxRK(^ĆpyT&K8`s6#
v"
JئP	7N[LfUZy󸋸vsݒ
&,nCup&Õ@	33d5e9lی`}l7ٌ@vuބ;vd2V?p	xPnG0Z 
F씪cЇLt<[}.7l.ϣv崛1@#ঙl}5,;VPK}tD  
  PK  G|bP            6   org/opensc/pkcs11/wrap/PKCS11DSAKeyPairGenerator.classTNQ,[,
x7ԶV,,DrXO`^{Q)0QHP9R!GLg3O ci"!n41Q@xwÃ'JW⩆	}0:$Zmn1YL-rɵX./Yb%G\;e᡺pOMA-qtވKҶD$Hf6F_fc=-
#0A V&'F	.3t&Coomr)ȝ!qGY8V01Lo]qY-YP/ѓLQhxNi;f8!%bN`9yWa_6E@q	d2vŤ^aZk)̨Rg
1m`Ny1pWd``v9zGn1/aMp/`/R4Pl&Hˬ^Ј<lFCr;.T^'k\mͭ/Q	G!d|<*H!l?#1Ֆj<ZcJca[Qv5~,'IܔA&%]{8qvW;ΫHZiCؤ_dk$EtUt*:CХ@[c#}GwzVOQ24ޚ}ơ=
GWщIT)t(w?\Uqf gݯ=wߪ]8?ɻAܰ=77 PK՟R    PK  G|bP            0   org/opensc/pkcs11/wrap/PKCS11DSAPrivateKey.classO@ǿ펕*[Ddk	bqqyusA״
+MEMkO.Hf&w>>y~:9Ls30E:iSX20b)qX+H8j06eRij[ov'3oDWB^+ٔ&C*8t;Nm,+ޮo=*ævr#Ǳ{^8uxViΉ+ErTf?QIXec>lO0ѷT(i*(8c~$Ik&c*
%	a)|YHEcbaVfOQϞް~zZ:,a9vGRt1L8pS5,՚qhTYhCnв5-ǘ~Y>RgVԡ\R]8%8T>n 3GC#̛4n61NVFn;02a<PKt^  D  PK  G|bP            /   org/opensc/pkcs11/wrap/PKCS11DSAPublicKey.classNAƿ]Wi#"Eݪ(\hhlp5c],c^jbm7>lFI-|۳3ǧ/ Vʑ7`b㾁+X0c1M%&PH6QxȐefMF
R+TM4Rݷ_1)a;'9ꥳ7ʁ
3BaKd^OVuw%'~૧va5V(sW^i$B[nU	UcJ~Ps<"!Ua`/M/¥߶#veM<#}JEa[ISLb.7Z%!񯘸ik/ۇM#ދP0.ePdFORvzll&f.V
st)LЩ8fq
K5,$ՙqhThw*.jL#5zHu,[qM'=H[9qJ4QTxg-q&K+U?ސqOPK(O  ?  PK  G|bP            ,   org/opensc/pkcs11/wrap/PKCS11Exception.classy\\eBb,&7BTBںaxfgB0UZV
UkZԪ,h[]RVhպխw߻wχ=wfP6RN9upZJN8tNgr:9t9]"NsS/8]JNWqӵ㴎N7p͜nt9m䴉N}t7{9i;8=Nqzӓ洃ӳ9Nr
Norz;9}SN8}N9}kg!r9,QlgŜpVV@-lz7~
c	lzYy,38P<S=c3*njk^ўkFG:ڻ{{lU~'1ot,jhd>vCbT(v"VT0FcT7cVM4F%8u]pԮQbe+DM(CSr":ڰ:#up./<FiUM,&H
{VڛI*|5`^:F0y	:?:QFECIIڞ`)st5-sނlRY.%,Rfy)#_t"ݖejX
vXYztTe
	5g`9DS
q50qYJE,與 crHq7Mx+z)='Dp&ꮕEL%=5-FUիE:ĕ%2G5t_glvj:+QMزJlOdKn0K#^ƸDcKөo>e^#zYzr.GXhl`n:,o@"a^:?+VcNo{\MZɤQ7Xn⦂hب1cM7=2a<4d7mxf]+[jDHV}چT3|񙗰~2C뜰Jd}
z6{V,U8|<,yv=ឰL=Y<zuFe!vp5|sc-1qDH*iRoBzoH+]{eY_ߪvya9z|A/ i #͸n:vY`"ٌ7۴~= +7ОןSD7
>yTo$!)CJvpvcIsMWk|+[<s^xs^UmMĂLXn;rT;
gg_n=\Pч'zuCѨ&VwAIn;as+:Wnψ.i>rYsdOW[ɞ斥Ny2ȣze*ѠjǗ*`Xv ]"[>x}i{Ǫx}$oUU걅l"耎ŕ-K[*Wu5wVUU}R-QU&#NwUm٢֮BvdSZ^HbF!bT#C+uTnXNtlmH
=AѠ%-=*Q#஛Gh"NR=-?fi)4Svpw
4*Of|L>|?g|B/63e_4|_k
_7k|o3
dfw|^o?~߁6G~0'
~
πwG?~?_0
~	b_x0o7
~c~ hG
2_6?/
 3WH82x8<98(
<"p\bXʣ|F@z8ht?IN;HTI9[RΝz4z?t$Aha(>
͇>->-C
KR+2kY7Uз@
C?ơ@zϡ_A[U:
Řժ0Fo(4z2cŻBzC;+SӠkӡkuЙC?
#GB֡c#(
EXP-jCA.t;4}
kjb
C'@wBOm~Ps)B{[}|i*RvY*3V7<_C/P3" C/Q0WURЫU
Vе*nP)&FUBoV$V?)t`RHbR"O
.ERPR%)(BHQ"X)I1^	R-D)&I1Y)R#T)IQ*EӥW_8Pr)fHQ!L)`)RYRTI1[C8LåGHm)#őR%R#űR|WKQ-ED),)jbs"*EL
G
WK")'EJN(԰;gs= ;
8}4oe|&k	Q4bf4E;D}ɝQq7G;h+}_mVౕUG7Qib&jT6M*n<ʭLMj8j`\1\ PK_ܓ
  (  PK  G|bP            &   org/opensc/pkcs11/wrap/PKCS11Key.class}O#Utf]]wۢtˋ.˺ZRʛ*8:`CѬt
Fo`L"&iMsιw9̝_' cx7nC7tmQ%-$aG)aW}	VJ2		Q5S/jZ6U۪=oK{q lMJ35Xɧ'|ԑ1z8˩ꀯT(OnAنdwEm%n5uE[嚎(&siy$=<ƹg56}\\p\C|fQs年~"<8]Vrí+c(Mt0m+U-&+{j*<rJr9SQ=E'ڞwނ^Y7ˆW$TYAѨN:R2\x)WB ].َ3t,V)w*MQd5c;[_YEa|OGCkgƐvi׈+Q𬜽OK}s{4fry_:(ON 1@^?
BFp,<pI-vX1!+wO]):.;fQKqeXB&;[Gc(gX#<Qʙ0\=dis(QtzW}Ǔʡ'$Wqy*5|Sw/`Y.}^7^(46|xHg	|8v'~yG N	<J<&8/(MIoO	|%|_8M<-JX#.Y9s/A%/@J	X"A	!.y
=zІhë:F_0Vȳ Xk@&ܬרO뤑OE[FsPC}_}	_SQ}ާ}oڗ>	OOu,䶚&jQc5/D-$f@9xo<e'PKSG    PK  G|bP            3   org/opensc/pkcs11/wrap/PKCS11KeyPairGenerator.classTmsD~ΖQH(M(Jj;-))/.-kR;ijb!1ʊ(qd${`6S:v%򄔺|swvٽ?w 7Ћcg2>q|qHó/"]|K㸇2Caa%XexP2x18u
Z=_/kF^kzTeb״tj)mBC@L$zֲ~whH5WV;馭ezf~^\eۜT2OGo!;5GuJNLgtIeI797P~ch~ŗt܁jų
DMmk*=Pغ֧}=AhǚsЖAʜ P*'1HdiVUZ]9]JV*':aY<%*pgZN)o3e%RW0dl*BUϾgfxȠ2ɎDΏn32hSc,ҙYpCp.kQvAkOל2O$_?vhvl	D-Fuԣ<{detޠ=uo;8!Qûj]zX樭#m)3jYHȼbsi4txtfW2^J.9(|)[<	Z:]jp1Z}zQ߽S
=sFECޥ{х緙o;λL+HeV3d1>H>AgNcQ+G:{'A$[x1F؈6겡=0;-bMx!D	y#"
\o]x~ZZ$I8N'$b֯/Jk%}c]qIN%n"Yb~f軉O8<nʋ酧xifH3ĺ\1޼7WÙxFǘ݁ 0PKK    PK  G|bP            ,   org/opensc/pkcs11/wrap/PKCS11Mechanism.class՚TU9L^]XH!(dBbH!JB'DU^{m{emk纮9w?y;g{<Re`R_7#IDgRoiCt4I7龤c-DzށhCI'=X;ޕ8%HޝDғHEzq	ISHא%]G4)I$Bz?NCz.^Dz	eIw^IHo }CIo$}8#IMXǓ>IO!}3HM<夯"}
H@&Ҏ-o#};;Io&}H?@!ҏ~"H@%ү~"H@#礿 oI@G?/%EƐ)$%CdzM/K?dLf%3H2Ȍ&3.dv#SBL9L$3^d!' $3L
Z2udL#"32z^tgMOY[dZthJhsڶZepօ&j3XѾsFm<Z^M'ZBPe2z)G
!jԃ	9ݔL4H6!T 2m'#ӛ3Sɦxs
tm%ZEl7FPexHA6R@$4T8 RZAmCDc)^lN6"~>UpebzwQ&'TD5V[D6lںtS*nM#\'>q71|K}lVx"#KUfxA6^/
K%9Vku%{drs;͎!lDgK.+b=堸{O(2퇕=Sc*O
+Lժ?'+?L"c;78fĪuC}a>|:_CGO4:_lR(ʴ6C|Ci5+UT+U^<UhM78ѕʮ8L'E%Un!Q\\\$<iJT$8dD."TNJfÓs8|f[U&SP_}D9\|#|>$)N%h.%wd$pV*c2Ս?k>&+MDe]c?:2먐1_Gd|qK}<Vgz4Dd,ge//{xc4O9Gl 0?	wEe'Ù49X禮Y=,_r3'sprn";v3ÊS>G -c129k$guHqGb~ę_NЗbsP6(sRQ (tNo}~fyi1"bd#h<LMyǼTv>͹ٹ:;c+!?쌾EũD]US(2拨1_E81YF<#?KAӚD:w4j5$
	8zvT2vfVnx3;nq.hĭ<g54m|LUM
uax7.RSpĸ)l9?ޠHg
M 	]MVt	,7Z<5;tz--eJmg>Ca~5
AէddOrQ%ݤOƊdA\*KT}`d.;y^M29*ٹj`	sܕ)f쟓bÖ\%Ɨ͍篺AȦ2~2nXaz?I-GR;Qhȼg4WgG|8=6/{6
Bwi79aL~t~Eg2&?P叉lqL)&Sƣv)X4XQ~"@boX6|
=ASrjezT%2^x\٪tsM]2N7ZonsP,tyi'"Vb9q#|
35sUUSz˽$2":P&9)icYwĿ\BOhupVe≆*|˧9o&_;aDoS꺮yK87;qeSl
sSu<_O9ĳD(3Eg?v/+aHq.;O|__[܃pa#'ᅏ5-Zp$3p1sEy_Eh`dz3x?u6ho]8`t͘KZ״[ھp\s*HtTg뼥uͭs{.n_ܹ7^GߘZ,FF1ԉ܀:o/ Sn,1zՃ!0fVV\8nEG[y:[UR2n֎q|SKJ-jm_j9ٮ.i8C
S*xG>E}Ánjh{'O
~
g
~/
~	W
~
7o
~w
~
7?)3.𗂿w-;߃//
U	V.6#"0	)>ྂ[[ (x ۂ<D<T0p##%x'hccs?zgK ]$xO^#x28.\	N
O\
/VTpzpF4Mft33
ON_zȷ
/
@B"K//.xCAW;Nz'(0ႏ )(т+8>A>E>Cl /|<DrW_
F_AEo.o|7|?0X(1$)O,9σ_"%/_*5&-o.=?!#,?./	Jo[߁c'4~BOh'4~BOh'4~BOh'4~~|Pa/a/a/a/a/a/a/a/a/fg.w&x80Fa0Fa0Fa0Fa0Fa0Fa0Fa0Fa0Fa3Cgg	nxa/aT"~S,RnTUWE*Wx7 Wx_P*|PN*|D~T=B/(*|'Mh/;}AB?Q!U~U%B~Z'hYP
xHEPԠ*8J@ѧ&UPMMn[ESs(GqnH(	GBQwtW(ꎢ6zEpDP#(jWWj(xӠf(΄8gCy@ys<yP(sqpUtO@@WBP(z0q(qq$=zOr=@ӡ\YcERxz1oB/X蕼
Y*&MxzoB7N(^>Їy@BmE3c}	/ UзyoA?-=Ǽ_6kޖ~Ǜo'Cɠ󅏌-h!obAwx3
ڗxg	ڟt0	A- P쁎m(޿.3ǻ0Rp
t+N޼-Sx/oD@xT0MoTQKVEREi	uhC>t)CyzC;yܡx}'^MnusL=š:8^xUz&cCk$
3
^[^kxz#/C/
Co`w.~^Å>Gy/BXs }1U+P^{jgg-t6llg{:q[9s٭ g:ngwvgPg9;ΎtvGgG9Xgwvvgwuv7g9[lΖ9;rg'8{8;?:;=ٽƝp6lIgl5lSsgl)ggg:;gg;;{:vvuvmsv]bg8e.wv8{+]l]Zg9
!C=Ý=#=٣=c='8{'9{8{9{g8{g9{8{9{8{9{8{9{W8{W9{8{9{78{79Wg7;{:{ᝎ
Vw,X5
f&w;nI9v&u7clRwm~
ަۻMo+M;M|OTPKn_k  0  PK  G|bP            2   org/opensc/pkcs11/wrap/PKCS11NeDSAPrivateKey.classSk@~&5vnZ֭&
k?Q,ugnI]7~( 7A	3py^
#e"nsܱ`.ǜey"+U{Jƾ8pe0xYg`0PZCiO?7šbv߈#(
c_8~eJxR9^JOZ7N@yNSsmF_$As2d6y2D+%@oZ|	ʙ[YhLݚֱ?Բ:lPNtz de߹T$q"ID$ҕ".
JL#%eXʔ*P>
N=1N}^+QlԺ*aغy$םnbh>EBs^> teBy=|j)#WMg<qp>)|0H4rADX<CM
R!~PKǲ[    PK  G|bP            2   org/opensc/pkcs11/wrap/PKCS11NeRSAPrivateKey.classR]OA=Sv;|Ѣbi|1BLhDyffWO$+>&t$3w;ޯ?/ xLr(b79nv
GcØZ~Wjp1Xڮ-|Qc0q($TvheOe
}6"M^O[Nё&]^wV'O_r`pܥ'ߒӵDJqcXĭZ07i1gmVJ*a1'*ZS_4>Q\H5g/F
֮6۬w1G#T 9
Jt*dKzwȥk'([BfxKCCs2~>}>#=uC0MgBQ(_PK    PK  G|bP            )   org/opensc/pkcs11/wrap/PKCS11Object.classWw +6}A$-lt--`ڕ
mڔNMGMCilQ #mKzj%dI;ܙsGs6wve9&g/2e&_aU}M}7x,}SƷd|ۇMe=&̟̟a#~ŏ	ԇ gxч9o~!^\a/~_xً߰_c[&q!U~d,	xrbT@U#kyKie-ٌ9ͰтգcDfXUWg5] <.Q]5);5H1vX|b2q,;2-1ӰlհOzAPO$3,mqO$NqYqxl">YJ~(\89{NK	.Pã3	Χb^͹y)ق
PE|Ki-gS!,JkN+vv:Fiա.2h4uM5;Mt\2cZ k]dupRyMREVi T@FӵZ7r)StDXJ#-u"UةK_x@R.Uqs*\~ WBQҼyiHhj`]y6kd*m6_f>ΔϏIuVd,(
(՝$0ψvn{$kdǚ/.u3^ueuҌs{nit&M]޵f`8Bys!Vsc(9,Ȩx^SF|DL;7TwO$nKʸILnfy?(x7ޣL19d$1\ar'z;}pK8gW4{k+<RT3sQkr^嵋B˄L/BY{>̈́3M
gCi],G|ZhQBiΚ#s@],77Tz.DlꓐihVe#	O;
NaH_W:&
f
ʚ)*rfRi3CRƂSLb'S0)ZAlҰe)fM3|J{Ė/so3 ׻},^#q:fp/E--]gQ`ϗqԬNUWmL^kM͑b׏	p
T5Wr
6-Q$jO.29s&I<7 ^G[%T*C>2t' } 4Fh?o[pcăxh}j=BX(Uc>o$I8|!	M		
		
	]j	Q/$F;[#ABiM^UNtm*d8&Cx /=w5$>vGۮ|̵: ut{V1Yv5b/eyde},g].ҿQ;1P~_ĆU)!)(	_P-l^"26/cK`+\CmE0uxO{h'<ƣ2ʘGWe4:euUkO*H_]>2]!]!޾DZYeAXƞM-(݉hMN"/*j=%U$.N s:jC	:9_;ܚe\doc3ň*.5DFMַm;l'v.@SV_eW8ߴtw19@|Ѳ}RVTkꖲ
՞SxUowf'>o].Wz62>M+
=KeTe?`۱{ivn"WgPKќo  ~  PK  G|bP            -   org/opensc/pkcs11/wrap/PKCS11PrivateKey.classV]Se~|-YPPP-4٠1B JjBH
IqI؍Zz^0_᥿y7ij'gܙ}9{duX"B#|spG,ˏDH\~,]R@%iXq+|^'X_lp)>>%`ႥRTMK3K1e+*Wsg#Tr-dJ~K-t͞e
3ʤŜJ943%۩&g\\|S6),;=ھbKzve5Afl%W\V뵴nX7;I*JbkXZ섀|NEh]+&#LRNo]CV:O/a%[rs9|-ak{p1\/CImjz?1ZlmDw8BحY(pm]Ě_I-d-3̖{R"VS,6>%k>'yͶjΖEaْs,y	*$L-jz	_Cv~t0$;d:aڡ81D;bc%UE-)w:8S@+{kZsypGl
MDd$y.kJѭpZK =|5rbX46(UD9~z8e53^$)ԑW7jrmcV
:ܸQ
}[4	GvwE4/}b CrtL=K@e=Dz`Џղv
|c#rvúBtݤ][r(CC6j$[b#w(eA$Wd_}coEO0
EOǴ
8U|U\=k.~ɦ^_@\/j	㺓
=LKu\E~_14n։I:ʿb.bߐ[M+Hrլ:\?RPK_zuE  
  PK  G|bP            ,   org/opensc/pkcs11/wrap/PKCS11PublicKey.classV[sDֶ"*ӄ6%RP'ԉCݤᶶUWHrC%K!3pV2<ڳ{=gϑ?(;2UB{2*d!3b@ƂA|n9,bIrbX#ڼip690p<;&,^2 [NQEy۱Tpkfi9^lVtsy\_]*% ["7Ӻ'@*ʪPt%WH5޼u"1Xp-$^Y=?#cM'Jɮ9o͇=ς8=۩m'$hVW3N>~}+ O%2*JݨXR^0}}d}ߵ-p^Ie18Ož;VPDiγE6aBi4lᮆm|p)Lr5|/e|kp6gUZޭau={)E{a[!i'?zrtA+F%Nd6

C'#j3y(]Kv*Ν١b%C.,>HQeܵr9l9ƾh5-lDu_V@gzvFs+0C߮q0^`F 4 &IF!a!!%N !2#G88^e$hjWhR$IHH06RǇZ.$RA7R	3՘.MH?#o?~;F)Fe2RwzcNޠ#u:K{"@jc4kLwѦŉMO'IXpWHbiaI0(OPKA#\    PK  G|bP            6   org/opensc/pkcs11/wrap/PKCS11RSAKeyPairGenerator.classTR@"
֋X]KSF.֦0*?%`LEM)pF >ٴtG6gg=?~~4$ut#!zhpYCFduhft\
o jjяI
tQ:00<XxY.%k>W.,eΕ6JyZ1Ǜ9s)n|-d3]	3_xW0̈́p2ũ͖ܔ,r7x")&d\ya2o<CgF0Qu.3E>~aVgw|gBTWnfvI(˸-22_Z0za$`GaKE57ВbF8ok!ÕTO\V9x07]j9)w*xR|j3
S1,hNx%Tތb)3\j`m^d6U@KXJJ$:uUz"7ڨÉϯ.YQJ.Vӗ$tkO,$m{,.ѕioaïx
%q6c˖'Ų(3sS\MUI a-*:֯Qț
ټ*w#OpC\鮓-v}0!S
SEZ
ĞIH'#8JYBwLjHjL}AU?Mo@
=Ȧo`
J,JEgկщ1%F}]ơ>!WoH4;5sO|DG"
6/PKY     PK  G|bP            0   org/opensc/pkcs11/wrap/PKCS11RSAPrivateKey.classRmOP~kw"k!i1$ %ʧR.:ڦ_i`#E!x{Ͻyzsν/t,Na,	<x,P#L%2a_Ɖ:/IlA@a*A|JQJnDa E~Ρ:-	x tO~u]F2H<'z%s5=dimZ}%8dN	T;W[J`?TGoS3j#yMb/U҄0sti4*&ʨp#cv{Uq俙\<^Y=>p=8WB˄ΛJ{|^X> @w`b7+٘mfD?੽RЪgTfz^;C3K_z橱y<p-O	wu7~PK;  a  PK  G|bP            /   org/opensc/pkcs11/wrap/PKCS11RSAPublicKey.classRQOAu,`P`jriIV
cr'5M07ƹk$`Mfo'Η履 m,,
\0&Yζ7VV	Lב
I6	(Tu>a"N{qG5avs=mVeW&kqT0Nu;JnPnW{xlm*6hF`m2L+[rWj?Uߒ'%̠JXuZ`!̜'e0ʘ"Cs"KJ.&>qNyT$<0?ʿh5`V[^#ýO<S:I6K~α {vY:BL0GO>!]Xs9;ٺf<SHo@s? PK-fq  Z  PK  G|bP            *   org/opensc/pkcs11/wrap/PKCS11Session.classXw\[h0"^ l4].q,5`І>x*QIә춻ҕ.5v{{s{zz ={ߕz'A<~{.xGY|,H>|S~|:agakȃ/2*}=o!~&o6.>!1)9_%_5߰-߱=?#?g)B _nJJ'R8dRND4fXQQ?;~w@(M
ɤsy)?*fdlӏM ؍с񡘀jxde[I+=gHfZN\gg֬4<39ڏ
d O,//N
yPOery
.$Q
[fk
[GR^ǺQ7s9>TJZJYlc݄ĶҀeSͬU&yi*k2Mf9Z`B`5kgߢMNUEh;uK>ђP4Nθע5ŭ
8҈rF	9hqiVt28.]c+w|>L.nFd+/=1JM\&އ3iCƺT٬=E^	/&Ls9b.:LR1dH2BT)muUCy)~4=,M09Ll3S:%7bZgfІtFg&.| ryLڬ
|3֣eKȹ|63_Ȟ$;_[\q_HtR{}_"Omk$ԞmPbjYF
Е&SJ
M{Z$9B{4]
5vBM43C5YX;* hE޶+jM	PsmF@[T$7[I-W$5F >M>(`3_\罖0
OD/D<Qĝ$~A)\
3[Wk|'p/!%RYYJ̅R*CN?D1Ya񙬒e&'1z@}>E/T!ގDƀà∈!QDÀ:֛1&ix"na8O~$a
2M!Ɇ)*8.R"	*X"VSfJ*_-v;I%sfSy$%%'Lj!쐃RVN9<j~76SQSo=	|VJRDqJZ;zF+[޼ܘs,Tg3=gLn£. 7=cDJ3nQ'<4; ;Q ?(P,?
 >5)Z/iTBeP4v6
Mś|yԁL-kP48ѩm	GqW,;L:)$MCg̦g3krSpklBW)]CK<`+c~	'u.BEuUKXp4ӧ<;Q0o^a?GlWh_9x~:j)Гg<WO5SnmUxnSNaO;oIt	
#gYm)7Q-Ћ¯֤тqޱst1ؠ^P[/Jj
dƂwB]2T%`1^VW(yQrYuw;]gwن$`vf2~ב&KqMW{jsJ@ųe2ֻFw@}[kvtz-^;{Qc݋
>tߵnnoIK|9UZ]<OPV7ժ~MxJNtz6q8ѷ*j%i%56ݱo_JV+.o/9[xqURUdGc2ڜk|j];/΢_Z9]<SB۝rp}s3K2t ά~;1gng6t:}GΪñjX7yq9z[Df/	W`*[fεVF^{Ƃ6/渤;n&G^na]|Xo~55เzTkPKW:  5  PK  G|bP            /   org/opensc/pkcs11/wrap/PKCS11SessionChild.class;0Dg$
hjQRB 	$N`8jC!DKz;S>_1>>z>/vsN	 \Nns$?Zk;3!.օM16QėRYNQT%'4U8`%׻-ald|*3{cq)ϤPsSw6WѯتF%PK$   "  PK  G|bP            '   org/opensc/pkcs11/wrap/PKCS11Slot.classV_weH$I]&@HHR)v'$:3z[UGzhV}߷zc.dv~>f~z _x?oC8@浏0PKSO܏>%lgJJ	>L1,J|_`r?=A	r<\Gqaf?dɼP/k_p19LLL`$o0& =m	(I#aDOѸ1:jV8#>#>-! Fz,)PTDJXݗ2h4|hMմ@uBlӘ#}_ರ㆑Vu+M[ޫ{McLKfo7YACmCm,TjPƔhJlkeZUόbaX<|lȚZ*,Wg+J_N+{b6+v$TM%c[qE;
ӝ}٥JKrbuOPSqS5ٍ^ST=
:cSyyf]cuLK&:q,PQnEWh;4FU @!UD8$ۡZqSs*~	k]ZXrjZ.Y'5^'YN]Aq:5\MNwqYk7E1mؘ2|[غҎԮt!wS7";.>ԔTOftxd7nC{5=oRG٣.2['7l5n;٫% o+X,z}ܫ+ʶ}neeUtXew8d]A^2~8e&t4ID<BO/+Uj-m~#^Rj12?2S ~ND-515{2Pޢu*ZJMri$	A9"h𴌿/6.&Lv
\ڟTC
VUUi/<#CaNЖw6]:iFt@2au=n$H2xek73)&o[d:%]?u>HGTϙ#Mj^ulNa
mRmgs#ugȝ\mSѭt:ڝv_iItJcP;?DcVvukOil%b'MU!R+%rm9MaP_DңNP>9TonN#⌬|,SctSk]V*G'mÜv%ǯ=nSeEAVc,9A[AÑE+TӮvD:]2ZBYH|?<hgPswRotۡ9ԝPB- A9=fQQ&V0m 96@lgg!wx^\{UmYzDL->{%P+OBm.cN
Ԛ٠RņYWjLTOj7[kQ7͑9li)
#(R,VoGU?4F (mSn)5`<v`j|}At7\:9qSӔ,?d
s#p&jw/%0	C~B&*5r^%?h^wUoIUnPP[fQ
0AϪ*Ů=z 1HxMIrWR|&2阘v,al I3{LhZ	x&LXEqCDLQm&@xq'W7f7j%k3qW5gm&NyLiU{fH&nmEuE!^慸sV􌿼 oǝDYYd}8/99zWqiԺTb6m%]֏whʟ5ǻWdexye9Lj->;:_PK-TH    PK  G|bP            &   org/opensc/util/DestroyableChild.classRKO@qq/ʛ`TcD	RQ-*, EPVU{RTYۍ3ޝ3~}
<m6aEKcD6lca0*\g8qz(K
4=ߘ$JF'*;-ѡ,}{ʱVi;X%U^iɨ@h
>|us.h9X󰎞
kpT̞Ņbs9rN21g7ľP}lPZfbn$q:;/1p4{
GwO`5+k`:f1nf̶5%frs\?Y[EEUd-L<z5P]`C6*MHq쏰k:kxݕnŨVPK  ,  PK  G|bP            '   org/opensc/util/DestroyableHolder.classSNA-݂BbTwT`RCw.dwKQx~Mķ%Lxf[)hR6sf3 JM"\'Ҹ`$(r*.!/EAtUQe)(0TSpU$W%\gHTjmza./Un6D0й`U=0~;n_TԌYm11E I˱)h!6D1B+|41$Mɗ]j++
q*.QaVpC(*b%\WpS 5!ݪu5W-
qGÄh]0i
pab4<4p3rf$!2dϹ)[. SxRކ#n<M
rdkаS5..
u
oU9n|?
(JOZJ9oaprwJDΑtAk/Sd'#Էt-ȏ44cJ"3;DKm(XZFw0,(<@%@o Lei4U݆r]rɠUQ%WICd-P;Ф)
$H}@y6P3Nci{(Ȧ~!yr(PK̅-˒    PK  G|bP            '   org/opensc/util/DestroyableParent.classM10BH"*DHP;Y1ψ|(`if~<lP(JKOX;itd;	hj+0;opew!4x0Olт@Ȑr94 PKYi      PK  G|bP               org/opensc/util/PKCS11Id.classeQMOQ=3ז"H
h?(lP$&v(MYܘaC~Ap (ޙ|٤ws}ǟO[ {7$9BaJ6OQ.r8zDY+j~Z+b!9>3&i5_єO[]oάӍ2c& gUC5ϣ1 CӔJ5<cVpj5OļXB.v+=ejfP3&Յ{j:`9<W5!q"Q9`TL8iJ5KXqA+3co$z{ǳ^t\k2;GۧN,J/Ʀw֗hfuVHY}2Plt>Avx24Eh"Stk"Q7#oa̚C5ȡڮh(p}[y j\0
K(Z+
76
YZ^a+<KO'ǣ+2[%Y	p5v.̿CM09;ԖL߶tIՀmn@{ \sOFZ۞
8gm$vIT=][ڄsj2/97oRG{d}ZE/Xi!()I$SMїL9E<?rKɔpB..B$F	"CX+'FX'f_PKW` H    PK  G|bP               org/opensc/util/Util.classuQMO@}C8q	B?(_|R5C"!UJJ$i1ؑ_%UuPjμ?Fنr6m"
	,%ko*KHoKcW2=kZߛGt*-uwVb:6,wb%l梸E}|\0fN"y_N	#W"?@j~o	V7[Sr}W-6X⫝w2ƢO($6&0X?Nٝx]h9'k:SzτL?("nvȉ&dyɚ# _lY]YCdV&]njn`47Ci>'R0KVpS4PKW;  h  PK   F|bP]E?                     META-INF/MANIFEST.MFPK   F|bPYxr  n                 META-INF/CC_JCE_S.SFPK   F|bP,?*                 5  META-INF/CC_JCE_S.DSAPK
 
    G|bP            	            b  META-INF/  PK
 
    G|bP                           org/PK
 
    G|bP                           org/opensc/PK
 
    G|bP                           org/opensc/pkcs11/PK
 
    G|bP                           org/opensc/pkcs11/spec/PK
 
    G|bP                         =  org/opensc/pkcs11/spi/PK
 
    G|bP                         q  org/opensc/pkcs11/wrap/PK
 
    G|bP                           org/opensc/util/PK   G|bPi/  /  +               org/opensc/pkcs11/PKCS11EventCallback.classPK   G|bP'9     0             G  org/opensc/pkcs11/PKCS11LoadStoreParameter.classPK   G|bP[7    :               org/opensc/pkcs11/PKCS11Provider$PKCS11CipherService.classPK   G|bPL?    D             !  org/opensc/pkcs11/PKCS11Provider$PKCS11KeyPairGeneratorService.classPK   G|bPXB  H  4             #  org/opensc/pkcs11/PKCS11Provider$PKCS11Service.classPK   G|bPBA    =              '  org/opensc/pkcs11/PKCS11Provider$PKCS11SignatureService.classPK   G|bP4  +  5             J)  org/opensc/pkcs11/PKCS11Provider$ShutdownThread.classPK   G|bPp    &             *  org/opensc/pkcs11/PKCS11Provider.classPK   G|bP5kʸ
  _  *             2  org/opensc/pkcs11/PKCS11SessionStore.classPK   G|bP:H2    =             =  org/opensc/pkcs11/spec/PKCS11DSAKeyPairGenParameterSpec.classPK   G|bP6     3             6A  org/opensc/pkcs11/spec/PKCS11KeyPairGenParams.classPK   G|bPg  0  6             B  org/opensc/pkcs11/spec/PKCS11PrivateKeyGenParams.classPK   G|bP%     5             TD  org/opensc/pkcs11/spec/PKCS11PublicKeyGenParams.classPK   G|bPR&1  h  =             uE  org/opensc/pkcs11/spec/PKCS11RSAKeyPairGenParameterSpec.classPK   G|bPq|
  	  +             I  org/opensc/pkcs11/spi/PKCS11CipherSpi.classPK   G|bP')uJ  o  5             S  org/opensc/pkcs11/spi/PKCS11KeyPairGeneratorSpi.classPK   G|bP^D+  
  ;             Y  org/opensc/pkcs11/spi/PKCS11KeyStoreSpi$PKCS11KSEntry.classPK   G|bP=g  q&  -             '\  org/opensc/pkcs11/spi/PKCS11KeyStoreSpi.classPK   G|bP3q  L  .             l  org/opensc/pkcs11/spi/PKCS11SignatureSpi.classPK   G|bPD<d    ,             Uu  org/opensc/pkcs11/wrap/PKCS11Attribute.classPK   G|bP}tD  
  .             |  org/opensc/pkcs11/wrap/PKCS11Certificate.classPK   G|bP՟R    6             T  org/opensc/pkcs11/wrap/PKCS11DSAKeyPairGenerator.classPK   G|bPt^  D  0             ͆  org/opensc/pkcs11/wrap/PKCS11DSAPrivateKey.classPK   G|bP(O  ?  /             ?  org/opensc/pkcs11/wrap/PKCS11DSAPublicKey.classPK   G|bP_ܓ
  (  ,               org/opensc/pkcs11/wrap/PKCS11Exception.classPK   G|bPSG    &               org/opensc/pkcs11/wrap/PKCS11Key.classPK   G|bPK    3               org/opensc/pkcs11/wrap/PKCS11KeyPairGenerator.classPK   G|bPn_k  0  ,               org/opensc/pkcs11/wrap/PKCS11Mechanism.classPK   G|bPǲ[    2               org/opensc/pkcs11/wrap/PKCS11NeDSAPrivateKey.classPK   G|bP    2               org/opensc/pkcs11/wrap/PKCS11NeRSAPrivateKey.classPK   G|bPќo  ~  )               org/opensc/pkcs11/wrap/PKCS11Object.classPK   G|bP_zuE  
  -             ؿ  org/opensc/pkcs11/wrap/PKCS11PrivateKey.classPK   G|bPA#\    ,             x  org/opensc/pkcs11/wrap/PKCS11PublicKey.classPK   G|bPY     6               org/opensc/pkcs11/wrap/PKCS11RSAKeyPairGenerator.classPK   G|bP;  a  0               org/opensc/pkcs11/wrap/PKCS11RSAPrivateKey.classPK   G|bP-fq  Z  /             A  org/opensc/pkcs11/wrap/PKCS11RSAPublicKey.classPK   G|bPW:  5  *             w  org/opensc/pkcs11/wrap/PKCS11Session.classPK   G|bP$   "  /               org/opensc/pkcs11/wrap/PKCS11SessionChild.classPK   G|bP-TH    '               org/opensc/pkcs11/wrap/PKCS11Slot.classPK   G|bP  ,  &             T  org/opensc/util/DestroyableChild.classPK   G|bP̅-˒    '             X  org/opensc/util/DestroyableHolder.classPK   G|bPYi      '             ?  org/opensc/util/DestroyableParent.classPK   G|bPW` H                   org/opensc/util/PKCS11Id.classPK   G|bPW;  h               V  org/opensc/util/Util.classPK    7 7   3    MZ                @                                       	!L!This program cannot be run in DOS mode.

$       'IIIBI_GICIZIHI\I#MIRichI        PE  L K         !                                                                        P   4 (                             <                                                                               .text                             `.rdata  $     0                @  @.data   D\   @  P   @             @  .reloc                        @  B                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                UE   EEMQUREPMQUR$   E    } uу]UE $K  eMMUREPMREPق  E}}MEOMU;|
EM8U    EPMQUPE} uMQUREPMR8e]UE   EEMQUREPMQUREP    E    } u̓]UE $K  eMMUREPMREPف  E}}ME   MU;|EM   U    EPMQUPE} u   h8@h0@MQURE   E} uXUREPM  E} u:EPMQUREPMQUPpE} uMQUREQ4e]UQEPMQOz  E} u33UREPP}  ] UQEPMQUR;}  E} uEPMQ`}  ] UEPMQUR|  E} urEPMQUR~  E} uS3EEEM0MU(REPM QUBPPvE} t!MQRhx@EPhP@MQ|], UEPMQURY|  E} uuEPMQUR}  E} uV3EEEM0MU(REPM QUBP   E} t!MQRh@EPhP@MQ], U$E    E    EPMQUR{  E} u3  EPMQUR7}  E} u3  }8 }!E8PhAhP@MQW3  }0 uh AhP@UR43a  }4 |E4;E8~!M4Qh@hP@UR32  E8$~  eEEMQU8RE4PM0QURE   3҅uōEPMQU8REPM QUBP   E} t(MQRh@EPhP@MQv3   E$~  e܋U܉UEPMQU8REPM QUBP   E} t%MQRh@EPhP@MQ3<UREPM  E} tEPMQj UREPM@  Ee܋]4 U$E    E    EPMQURy  E} u3  EPMQUR'{  E} u3  }8 }!E8PhAhP@MQG3~  }0 uh AhP@UR$3[  }4 |E4;E8~!M4Qh@hP@UR3,  E8$|  eEEMQU8RE4PM0QURE   3҅uōEPMQU8REPM QUBPP~E} t(MQRh,AEPhP@MQi3   E$|  e܋U܉UEPMQU8REPM QUBPP~E} t%MQRh,AEPhP@MQ3<UREPM  E} tEPMQj UREPM@  Ee܋]4 U EPMQURw  E} u3  EPMQUR%y  E} u3  }8 }!E8PhAhP@MQE3  }0 uh AhP@UR"3d  }4 |E4;E8~!M4Qh@hP@UR35  }< uhlAhP@EP3  M<QURE  E}@ |U@;Uv!E@PhPAhP@MQ3   U+U@UE$z  eEEE8$z  eMMURE8PM4QU0REPM   3uōMQURE8PMQU REHP   E} t%UBPh@MQhP@UR3"EPMQU@RE<PMQU@  Ee]< U EPMQURu  E} u3  EPMQURw  E} u3  }8 }!E8PhAhP@MQ53  }0 uh AhP@UR3a  }4 |E4;E8~!M4Qh@hP@UR32  }< uhlAhP@EP3  M<QURE  E}@ |U@;Uv!E@PhPAhP@MQ{3   U+U@UE$x  eEEE8$w  eMMURE8PM4QU0REPM   3uōMQURE8PMQU REHPQ~E} t%UBPh,AMQhP@UR3"EPMQU@RE<PMQU@  Ee]< U0E    E    E    E    EPMQUR]s  E} u3  EPMQURt  E} u3  }8 }!E8PhAhP@MQ	3l  }0 uh AhP@UR3I  }4 |E4;E8~!M4Qh@hP@UR3  E8$Pv  e؋E؉EMQU8RE4PM0QURE   3҅uōEPMQU8REPM QUBP   E} t(MQRh@EPhP@MQ(3  E܃$u  eԋUԉU} tTEPMQU8REPM QUBP   E} t(MQRh@EPhP@MQ3  UREPM QUBP   E} t(MQRhAEPhP@MQl3   } t_E$t  eЋUЉUEPMQU REHP   E} t%UBPhAMQhP@UR3jEEPMQU  E} tH} tMQURj EPMQU@  } tMQUREPMQURE@  EeЋ]4 U0E    E    E    E    EPMQURMp  E} u3  EPMQURq  E} u3  }8 }!E8PhAhP@MQ3f  }0 uh AhP@UR3C  }4 |E4;E8~!M4Qh@hP@UR3  E8$@s  e؋E؉EMQU8RE4PM0QURE   3҅uōEPMQU8REPM QUBPP~E} t(MQRh,AEPhP@MQ3  E܃$r  eԋUԉU} tQEPMQU8REPM QUBPP~E} t(MQRh,AEPhP@MQ3  UREPM QUBP   E} t(MQRhAEPhP@MQb3   } t_E$q  eЋUЉUEPMQU REHP   E} t%UBPhAMQhP@UR3jEEPMQU  E} tH} tMQURj EPMQU@  } tMQUREPMQURE@  EeЋ]4 U(EPMQURim  E} u3  EPMQURn  E} u3  }8 }!E8PhAhP@MQ3  }0 uh AhP@UR3  }4 |E4;E8~!M4Qh@hP@UR3y  E<PMQU  E}@ |M@;Mv!U@RhPAhP@EP~34  M+M@ME$p  e܋U܉UEEE8$o  e؋M؉MURE8PM4QU0REPM   3uōMQURE8PMQU REHP   E} t(UBPh@MQhP@UR3   E+EEMQUURE PMQP   E} t%EHQhAURhP@EPr3+MMMUREPM@QU<REPM@  Ee؋]< U(EPMQURk  E} u3  EPMQURl  E} u3  }8 }!E8PhAhP@MQ3  }0 uh AhP@UR3  }4 |E4;E8~!M4Qh@hP@URs3v  E<PMQU  E}@ |M@;Mv!U@RhPAhP@EP.31  M+M@ME$m  e܋U܉UEEE8$m  e؋M؉MURE8PM4QU0REPM   3uōMQURE8PMQU REHPQ~E} t(UBPh,AMQhP@UR}3   E+EEMQUURE PMQP   E} t%EHQhAURhP@EP%3+MMMUREPM@QU<REPM@  Ee؋]< U$EPMQURh  E} u3  EPMQURUj  E} u3  }8 }!E8PhAhP@MQu3  }0 uh AhP@URR3o  }4 |E4;E8~!M4Qh@hP@UR#3@  E8$k  eEEMQU8RE4PM0QURE   3҅uE    E    EPMQU8REPM QUBP   E} t(MQRhAEPhP@MQ3   E$k  e܋U܉UEPMQU8REPM QUBP   E} t%MQRhAEPhP@MQ3<UREPM  E} tEPMQj UREPM@  Ee܋]4 U$EPMQURf  E} u3  EPMQUREh  E} u3  }8 }!E8PhAhP@MQe3  }0 uh AhP@URB3i  }4 |E4;E8~!M4Qh@hP@UR3:  E8$i  eEEMQU8RE4PM0QURE   3҅uE    E    EPMQU8REPM QUBPPzE} t(MQRhAEPhP@MQy3   E$i  e܋U܉UEPMQU8REPM QUBPPzE} t%MQRhAEPhP@MQ3<UREPM  E} tEPMQj UREPM@  Ee܋]4 U EPMQURd  E} u3  EPMQUR5f  E} u3  }8 }!E8PhAhP@MQU3  }0 uh AhP@UR23d  }4 |E4;E8~!M4Qh@hP@UR35  }< uhlAhP@EP3  M<QURE  E}@ |U@;Uv!E@PhPAhP@MQ3   U+U@UE$+g  eEEE8$g  eMMURE8PM4QU0REPM   3uōMQURE8PMQU REHP   E} t%UBPhAMQhP@UR3"EPMQU@RE<PMQU@  Ee]< U EPMQURb  E} u3  EPMQUR%d  E} u3  }8 }!E8PhAhP@MQE3  }0 uh AhP@UR"3a  }4 |E4;E8~!M4Qh@hP@UR32  }< uhlAhP@EP3  M<QURE  E}@ |U@;Uv!E@PhPAhP@MQ3   U+U@UE$e  eEEE8$e  eMMURE8PM4QU0REPM   3uōMQURE8PMQU REHPQzE} t%UBPhAMQhP@UR3"EPMQU@RE<PMQU@  Ee]< UEPMQUR`  E} uuEPMQURb  E} uV3EEEM0MU(REPM QUBP   E} t!MQRhBEPhP@MQ	], UEPMQUR_  E} u  EPMQURwa  E} u   }0 }E0PhAhP@MQ   }( uh AhP@URx   }, |E,;E0~M,Qh@hP@URK   E0$b  eEEMQU0RE,PM(QURE   3҅uŋE0PMQU REHP   E} t!UBPh(BMQhP@URe], UEPMQUR^  E} uuEPMQUR*`  E} uV3EEEM0MU(REPM QUBP   E} t!MQRhlBEPhP@MQ], UEPMQUR]  E} u  EPMQUR_  E} u   }0 }E0PhAhP@MQ   }( uh AhP@UR   }, |E,;E0~M,Qh@hP@UR[   E0$`  eEEMQU0RE,PM(QURE   3҅uŋE0PMQU REHP   E} t!UBPhBMQhP@URe], UE(EMQUREP\  E} ubMQUREP4^  E} uCjMQU REHP   E} t!UBPhBMQhP@UR6]$ UtEPMQUR	\  E} u3  EPMQUR]  Ẽ} u3  hCEPMRE} u3  hChCEPMQU   E} u3a  hBhBMQURE   E} u34  U,REPM  EEk^  eEEE    	MMU;U   EPM,QURE  E} u3  UREPMQU   MkU
EPMQURE   EUREPM  MkUD
EkMD$^  eUkEMLUkELQUkELQj UREPM   3{M0QURE  EEk]  eUUE    	EEM;M   URE0PMQU  E} u3  MQUREPM   MkUĉ
EPMQURE   EUREPM  MkUĉD
EkMċD$\  eUkEċMLUkEċLQUkEċLQj UREPM   3{M(ME    E    UREPMQUREPMQURE PMQP    Eȃ} thBEPhP@MQ|3RjURE  E} u34U3U܉EM3҉MUEPjj MQUREP  Ee], U   EPMQURW  TT u3  EPMQUR|Y  E} u3  hCEPMRPP u3  hChCPPMQU   E} u3V  hBhBPQURE   HH u3   U(REPM  XXkZ  ((Lǅ\    \\\;X9  \PM(QURE  @@ u3  UR@PMQU   \kL
HP@QURE   DDREPM  \kLD
\kLD$Y  $\kL$L\kLLQ\kLLQj DREPM   3Qǅp    ǅt    pQa]  dd u"UBPhChP@MQ>  XRLPM QTBPPjll t)MQRhClPhP@MQ  ǅh    hRj xPM QTBPPnll t)MQRhhClPhP@MQ[  ǅ\    \\\;hsK\x38<td8ʋ<Dtt똃h 9  p ppPdQX  44 u"UBPhChP@MQ  4dhPj xQU RTHPQnll t)UBPhhClQhP@UR?  ǅ\    \\\;hsK\x3ɉ,0td,Ћ0LttE PTQPRrll t&EHQh8ClRhP@EP{YtQURE  `dRtPj `QUREP  dRV  `dPU  3$]$ U EPMQURQ  E} u3`  EPMQURuS  E} u3<  E0EE    E    jMQU(RE PMQPRbE} t%E0PhDMQhP@UR`3   }u#E0Ph DjhP@MQ73   E$T  eUUjEPM(QU REHPQbE} t"U0RhDEPhP@MQ3\}u U0Rh DjhP@EP36MQURE  EUREPj MQURE@  Ee], U$EPMQURIP  E} u3F  EPMQURQ  E} u3"  E  @E    E    jEPM(QU REHPQbE} t!hLEURhP@EP3   }uhDjhP@MQ3   E$7S  e܋U܉UjEPM(QU REHPQbE} thLEURhP@EPD3M}uhDjhP@MQ"3+UUEEMQUREPMQURQ  e܋]( UEEPMQURN  E} u3   EPMQURNP  E} u3   E0EMME   jURE(PM QUBPPbE} t"M0QhDURhP@EP:3-}t$M0QURhEjhP@EP3E], UE EPMQURM  E} u2   EPMQURqO  E} u2   E0EMME   jURE(PM QUBPPbE} t"M0QhDURhP@EP]2-}t$M0QURhPFjhP@EP32E], U8EPMQUR	M  E} u	33/  EPMQURN  E} u	33	  hCEPMRE} u	33  hChCEPMQU   E} u	33  hBhBMQURE   E؃} u	33  U(REPM  EEkO  e̋ẺEE    	MMU;U   EPM(QURE  EЃ} u	33  UREPMQU   MkU܉
EPMQURE   EԋUREPM  MkU܉D
EkM܋D$O  eȋUkE܋MȉLUkE܋LQUkE܋LQj UREPM   3{MQUREPM QUBPPRE} t hGMQhP@UR33E3ҍeȋ]$ U EPMQURJ  E} uVEPMQUR*L  E} u7E(PM QUBPPZE} th(GMQhP@UR8]( UE@    MA    }    h@GUREQEUREPMQU   %   t^MQURE  UBE@$OM  eMUQEHQUBPj MQURE   3҅ue]UEPMQURII  E} u	33   EPMQURJ  E} u33^EPj j M ɃQUBPMQPR2E} t'EHQhDGURhP@EP33E3ҋ] UEPMQURH  E} uXEPMQURJ  E} u9E PMQPR6E} t EHQUBPhpGhUWQ  ]  UE    E    EPMQURG  E} u   EPMQURyI  E} u   }, tOE,PMQU  EE$?K  eMMUREPj M,QURE   3҅uEPMQU(RE PMQPRJE} t!EHQhGURhP@EP e]( UEPMQURF  E} ueEPMQURH  E} uFE PMQPRNE} t-EP:  PMQREHQhGhUO  ]  UE    E    EPMQUR[F  E} u   EPMQURG  E} u   }( tOE(PMQU  EE$I  eMMUREPj M(QURE   3҅uEPMQU REHPQ*E} t!UBPh,HMQhP@URe]$ U$E    E    E    E    EPMQURME  E} u  EPMQURF  E} u   }( tOE(PMQU  EE$H  eMMUREPj M(QURE   3҅u}, tOE,PMQU  EE$LH  e܋M܉MUREPj M,QURE   3҅uEPMQUREPM QUBPP.E} t!MQRhTHEPhP@MQ)e܋]( UEPMQURC  E} u   EPMQURE  E} u   3EEEM0M}4 tIU4REPM  EE$<G  eEEMQURj E4PMQU   M(QURE PMQP   E} t!EHQhBURhP@EP$e]0 UEPMQURB  E} u
  EPMQURD  E} u   }0 }E0PhAhP@MQ   }( uh AhP@UR   }, }E,Ph@hP@MQc   E0$E  eUUEPM0QU,RE(PMQU   3ɅuŋU0REPM QUBP   E} t!MQRh(BEPhP@MQe], UEPMQURA  E} uhEPMQURJC  E} uIE(EjMQU REHP   E} t!UBPh(BMQhP@URF]$ UE    E    EPMQURA  E} u3  EPMQURB  E} u3   EPMQU REHP   E} t(UBPhLBMQhP@UR3   E$+D  eEEMQURE PMQP   E} t%EHQhLBURhP@EP03<MQURE  E} tUREPj MQURE@  Ee]  U$E    E    E    EPMQUR?  E} u3  EPMQUR@A  E} u3  }0 }!E0PhAhP@MQ`3|  }( uh AhP@UR=3Y  }, }!E,Ph@hP@MQ32  E0$B  eUUEPM0QU,RE(PMQU   3ɅuōUREPM0QURE PMQP   E} t(EHQhxHURhP@EP臿3   E$ B  e܋M܉MUREPM0QURE PMQP   E} t%EHQhLBURhP@EP3<MQURE  E} tUREPj MQURE@  Ee܋], UEPMQUR=  E} u   EPMQURG?  E} u   3EEEM0M}4 tIU4REPM  EE$@  eEEMQURj E4PMQU   M(QURE PMQP   E} t!EHQhlBURhP@EPe]0 UEPMQUR<  E} u2   EPMQURE>  E} u2   }( uh AhP@EPi2   M(QURE  EE$?  eUUEPMQj U(REPM   3uMQURE PMQP   EEE} t}   t2'#MQRhBEPhP@MQ赼2e]$ U$E    EPMQUR;  E} u2  EPMQUR=  E} u2  }0 }!E0PhAhP@MQ.2_  }( uh AhP@UR2<  }, }!E,Ph@hP@MQ2  E0$}>  eUUEPM0QU,RE(PMQU   3ɅuŃ}4 uh AhP@UR膺2   E4PMQU  EE$	>  eMMUREPj M4QURE   3҅uEPMQU0REPM QUBP   EMM܃} t}   t2'#UBPhHMQhP@URʺ2e܋]0 UEPMQUR9  E} u   EPMQUR';  E} u   3EEEM0M}4 tIU4REPM  EE$<  eEEMQURj E4PMQU   M(QURE PMQP   E} t!EHQh@URhP@EPĹe]0 UEPMQUR8  E} u   EPMQUR':  E} u   3EEEM0M}4 tIU4REPM  EE$;  eEEMQURj E4PMQU   M(QURE PMQPRvE} t!EHQhx@URhP@EPǸe]0 U$E    E    EPMQUR7  E} u3  EPMQUR9  E} u3  }0 }!E0PhAhP@MQ73|  }( uh AhP@UR3Y  }, }!E,Ph@hP@MQ32  E0$:  eUUEPM0QU,RE(PMQU   3ɅuōUREPM0QURE PMQP   E} t(EHQh@URhP@EP^3   E$9  e܋M܉MUREPM0QURE PMQP   E} t%EHQh@URhP@EP3<MQURE  E} tUREPj MQURE@  Ee܋], U$E    E    EPMQUR{5  E} u3  EPMQUR7  E} u3  }0 }!E0PhAhP@MQ'3v  }( uh AhP@UR3S  }, }!E,Ph@hP@MQݴ3,  E0$v8  eUUEPM0QU,RE(PMQU   3ɅuōUREPM0QURE PMQPR~E} t(EHQh,AURhP@EPQ3   E$7  e܋M܉MUREPM0QURE PMQPR~E} t%EHQh,AURhP@EP3<MQURE  E} tUREPj MQURE@  Ee܋], U EPMQURy3  E} u3  EPMQUR5  E} u3  }0 }!E0PhAhP@MQ%3  }( uh AhP@UR3\  }, }!E,Ph@hP@MQ۲35  }4 uhlAhP@UR踲3  E4PMQU  E}8 |M8;Mv!U8RhPAhP@EPs3   M+M8ME$6  eUUE0$5  eEEMQU0RE,PM(QURE   3҅uōEPMQU0REPM QUBP   E} t%MQRh@EPhP@MQŲ3"UREPM8QU4REPM@  Ee]4 U EPMQURy1  E} u3  EPMQUR3  E} u3  }0 }!E0PhAhP@MQ%3|  }( uh AhP@UR3Y  }, }!E,Ph@hP@MQ۰32  }4 uhlAhP@UR踰3  E4PMQU  E}8 |M8;Mv!U8RhPAhP@EPs3   M+M8ME$4  eUUE0$3  eEEMQU0RE,PM(QURE   3҅uōEPMQU0REPM QUBPP~E} t%MQRh,AEPhP@MQȰ3"UREPM8QU4REPM@  Ee]4 UE    E    EPMQURk/  E} u3  EPMQUR0  E} u3   EPMQU REHP   E} t(UBPhAMQhP@UR3   E$2  eEEMQURE PMQP   E} t%EHQhAURhP@EP萯3IE    } v9MQURE  E} tUREPj MQURE@  Ee]  UE    E    EPMQUR.  E} u3  EPMQUR/  E} u3   EPMQU REHP   E} t(UBPhAMQhP@UR蒮3   E$+1  eEEMQURE PMQP   E} t%EHQhAURhP@EP03IE    } v9MQURE  E} tUREPj MQURE@  Ee]  U$E    E    EPMQUR,  E} u3  EPMQUR7.  E} u3  }0 }!E0PhAhP@MQW3|  }( uh AhP@UR43Y  }, }!E,Ph@hP@MQ
32  E0$/  eUUEPM0QU,RE(PMQU   3ɅuōUREPM0QURE PMQP   E} t(EHQhAURhP@EP~3   E$/  e܋M܉MUREPM0QURE PMQP   E} t%EHQhAURhP@EP3<MQURE  E} tUREPj MQURE@  Ee܋], U$E    E    EPMQUR*  E} u3  EPMQUR',  E} u3  }0 }!E0PhAhP@MQG3v  }( uh AhP@UR$3S  }, }!E,Ph@hP@MQ3,  E0$-  eUUEPM0QU,RE(PMQU   3ɅuōUREPM0QURE PMQPRzE} t(EHQhAURhP@EPq3   E$
-  e܋M܉MUREPM0QURE PMQPRzE} t%EHQhAURhP@EP
3<MQURE  E} tUREPj MQURE@  Ee܋], UDEPMQUR(  E܃} u	33P  EPMQUR#*  E} u	33*  hCEPMRE؃} u	33  hChCEPMQU   E} u	33  hBhBMQURE   Ẽ} u	33  U0REPM  EԋEkl+  eEEE    	MMU;U   EPM0QURE  Eă} u	338  UREPMQU   MkU
EPMQURE   EȋUREPM  MkUD
EkMD$*  eUkEMLUkELQUkELQj UREPM   3{M(MU,REPMQhUREPMQURE PM܋QP   E} t hHEPhP@MQB33E3ҍe], UtEPMQUR	&  E} u3  EPMQUR'  Ẽ} u3  hCEPMRE} u3  hChCEPMQU   E} u3g  hBhBMQURE   E} u3:  U0REPM  EEk(  eEEE    	MMU;U   EPM0QURE  E} u3  UREPMQU   MkU
EPMQURE   EUREPM  MkUD
EkMD$(  eUkEMLUkELQUkELQj UREPM   3{M4QURE  EEk'  eUUE    	EEM;M   URE4PMQU  E} u3  MQUREPM   MkUĉ
EPMQURE   EUREPM  MkUĉD
EkMċD$&  eUkEċMLUkEċLQUkEċLQj UREPM   3{M(MЋU,REPMQUREPMQUREPMQURE PMQP    Eȃ} thBEPhP@MQv3RjURE  E} u34U3U܉EM3҉MUEPjj MQUREP  Ee]0 U(E    E    EPMQUR!  E} u3J  EPMQURw#  E} u3&  E(EM,QUREP}MQURE8PM0QURE PMQP   E} t(EHQhHURhP@EPL3   E܃$$  e؋M؉MUREPM8QU0REPM QUBP   E} t%MQRhHEPhP@MQޡ3IE    } v9UREPM  E} tEPMQj UREPM@  Ee؋]8 UPE    E    EPMQUR[   Eԃ} u	33  EPMQUR!  E} u	33  hCEPMREЃ} u	33b  hChCEPMQU   E} u	333  hBhBMQURE   Eă} u	33  U<REPM  E̋Ek.#  eEEE    	M؃M؋U;U   EPM<QURE  E} u	33  UREPMQU   MkU
EPMQURE   EUREPM  MkUD
EkMD$d"  eUkEMLUkELQUkELQj UREPM   3{M(MU,REPMQ*U8REPM  E܋E܃$!  eEEMQURj E8PMQU   3ɅuUREPMQUREPM0QURE PMԋQP    E} t hHEPhP@MQ詞33E3ҍe]8 UDEPMQURy  E܃} u	33T  EPMQUR  E} u	33.  hCEPMRE؃} u	33  hChCEPMQU   E} u	33  hBhBMQURE   Ẽ} u	33  U8REPM  EԋEkL   eEEE    	MMU;U   EPM8QURE  Eă} u	33<  UREPMQU   MkU
EPMQURE   EȋUREPM  MkUD
EkMD$  eUkEMLUkELQUkELQj UREPM   3{M(MU,REPMQHUREPMQU0REPM QU܋BP   E} t h IMQhP@UR33E3ҍe]4 UEPMQUR  E} u333EPMQURf  E} u33EPMQG  ] UEPMQURy  E} u3EPMQUR
  E} uEPMQUR+  ] U<WE    E    EPMQUR
  E} u   EPMQUR  E} u   }  tOE PMQU  E̋Ẽ$^  eċMĉMUREPj M QURE   3҅u       }E$PMQU  Eȃ} ~h\Ih8IMQDfUREPj M$QURE   UREPMQUBPMQPR&E} t!EHQhIURhP@EPܙe_]  U$VE    EPMQUR  E} u3(  EPj j MQPRE} t(EHQhIURhP@EPS3   E$  eMMUREPj MQPRE} t(EHQhIURhP@EP3   E$  e܋M܉ME    	UUE;EsMUEu3ʉtՋMQURE  EUREPj MQUREP  Ee^] UEPMQUR9  E} u33Ej EPj MQP  E} t hIEPhP@MQ33E3ҋ] UEPMQUR  E} u20EPMQURH  E} u2E@h؋] UEPMQURY  E} u20EPMQUR  E} u2E@h؋] UEPMQUR  E} u20EPMQUR  E} u2E@h؋] UEPMQUR  E} u3   EPMQUR%  E} u3aE    } ~EE3ɊHG uUUߋEPMQU  EMHQURj EPMQU@  E] UEPMQUR  E} u3   EPMQURe  E} u3aE@   } ~EE3ɊH uUUߋEPMQU  EMQURj EPMQU@  E] UEPMQUR  E} uIEPMQUR  E} u$E3ɊHlMEU3BmEE
] UEPMQUR  E} uIEPMQUR$  E} u$E3ɊHnMEU3BoEE
] UE    EPMQUR  E} u3   EPMQUR  E} u3   EPj MQREHPQE} t%UBPhIMQhP@UR蛓3~E$4  eEEMQUREHQUBPPE} t%MQRhIEPhP@MQ93UREPMQUREP)  e] UEPMQUR  E} u3   EPMQURu  E} u3   EHhu"UBPhIh   hP@MQ膒E    } ~UU3Bo uMMߋUREPM  EEpPMQj UREPM@  E] UEPMQUR  E} u3   EPMQUR  E} u3   EHhu"UBPhIh   hP@MQ薑E    } ~UU3    uMM܋UREPM  EE   PMQj UREPM@  E] UEPMQUR	  E} u3   EPMQUR  E} u3   EHhu"UBPhIh   hP@MQ覐E   } ~UU3    uMM܋UREPM  EE   PMQj UREPM@  E] UEPMQUR  E} u3   EPMQUR  E} u3   EHhu"UBPhIh   hP@MQ趏E   } ~UU3    uMM܋UREPM  EE   PMQj UREPM@  E] UEPMQUR)  E} u3   EPMQUR  E} u3   EHhu"UBPhIh   hP@MQƎU   wEM   ;   v'EHQU   PhJhP@MQ|U   ] UEPMQURI
  E} u3   EPMQUR  E} u3   EHhu"UBPhIh   hP@MQU   wEM   ;   v'EHQU   PhHJhP@MQ蜌U   ] UEPMQURi  E} u2dEPMQUR
  E} u2CEHhu"UBPhIh   hP@MQU   %   ؋] UQEE}      }     }A   }A  }
|}
}  }O};  }&}
  }     }    
  }   }     MM}  U$ EE}0  U3Ɋ $ʈ EPE}R  U3Ɋ $' }  4}    E-   E}]b  U3Ɋ* $҉ E-  E}   8  U3Ɋ܊ $ R!  R  R
  R  R  R  pR  `R  DR  4R  R  R  Q  Q  Q  Q  Q  |Qw  hQm  LQc  ,QY  QO  PE  P;  P1  P'  P  P  pP	  `P  HP  (P  P  O  O  O  O  O  pO  \O  LO  8O  (O}  Os  Oi  N_  NU  NK  NA  N7  dN-  @N#  (N  N  M  M   M   M   M   hM   HM    M   M   L   L   L   L   xL   `L|DLu$LnLgK`KYKRKK|KDdK=HK60K/K(J!JJJJJ]ý ǅ х ۅ    
  ! + 5 ? I   






































	] g q {        ˆ Ն ߆       %   	

9 C M W a k u        Ň χ ه       	

  ) 3 : A H O V ] d k r y         	

UQ} u   .j  E} u   EP MU3]UQEE} u   MQUR  3]UQEE} u   MQ3]UQEE} u   MQ3]UjX  E} uhDThP@EP3x  MоЋUB    E@T    h0TMQUPE} u   h(ThTMQURE   E} u  UREPMQU   E} u  MQURE  EUDP?
  MAUz uhShP@EP#]  MQREPj MQURE$  UBMfH  UBPMATUzT uEHQhSURK     hSEHTQE} uUBPhSMQ     UPRUE} t&EHQhTSURhP@EPG   hRMQPRE} t#EHQh(SURhP@EPDMQUBPP
E} t#MQRh SEPhP@MQȁE<Uz tEHQ  UzT t
EHTQURf  3]UQE    j j EPh   $Pj h    MQUREPhpThP@MQ%UR]UE3]UQEE} tM9оtURh|ThP@EP3E]UWj EHPQUzT t
EHTQUz tEHQb     3}URJ  _]UWh  F  E} uhThP@EP03   D   3}MUEBMQUREHPQE} t URhTEPhP@MQRUBht@MpQUREHPQE} t URhTEPhP@MQEURL  3_]UE3]UQEE} tM9tURh UhP@EP~3E]UWD   3}EP  _]U$htUEPMRE} u3#  hlUh0@EPMQU   E} u3   j MQUREPM  E} u3   E    	EEM;M   UREMREHQUBPP"E} t(MUPh@UMQhP@UR
~3]EPMQUREMREPMQUREQpE܃} u3#UREPMQURE  ?E]U EVuEEEuEEEB   PT
  MxE  
EPj 	  YY^Q=   L$r   -   =   s+ȋą@PUjh h| d    Pd%    SVWu   $u;j	&  Ye V  YEt	VP  YYM   } Qj	'  YÃuSj	&  YE   EPEPV!  E܅tPuu!  M   } uu
j	&  YVj 5 (Md
    _^[Ujhh| d    Pd%    (SVW]3;uu  Y  u;uSY  $9  }܃   j	%  Y}Sj  YE;   ;5wLVSPW  t]8V  YE;t*CHE;rPSu'  S  ESP8  9}uK;uj^uuVW5 0E;t#CHE;rPSu'  Su  MZ   9}u";uj^uVSW5 ,E܋E;  9=ą  V'  Y  u]3j	%  YÃG  w;vj^u}܃   j	|$  YE   EPEPS`  }Ѕ   ;5lxs\SWuu"  tEE8S  YE܅t*E;rPuui&  WuuI  ]} uSVj 5 0E܅t=E;rPSu"&  Wuu  VSj 5 ,E܃M&   E;uf9=ąt^V%  YKu]j	#  Y33w;uj^VSW5 ,;u9=ąt
Vs%  Yu3Md
    _^[5ąt$   YYÃ|$w"t$   Yu9D$tt$'%  Yu3Ujh0h| d    Pd%    SVW$uCu;5   j	"  Ye V{  YEM   Etm   j	"  YÃuZEtpj^u;5lxw.j	="  YE   P  YEM
   Eu-Vuj	j"  YËEujX$Pj 5 0Md
    _^[SVt$WV   Va'  D$ Pt$ V  VW'  V   _^[á@Vj^u   ;}ƣ@jP)  Y0Yu!jV5@)  Y0Yuj  Y3ɸU0 = X|3ɺU4 tu
 AV|^,  = t*  ËD$U;r= Xw+P   YÃ PËD$}P   YËD$ PËD$U;r= Xw+P   YÃ PËD$}P   YËD$ P   ,  @,  ø hyR dyly py ty xyËD$   8jԅ!  Yt<ԅ3Ɋ
Յ%   -ԅ܅
؅0  u	=  3r4(5  H%  2  2  )  D>3;u,9
D~
D9
u)  @'  0    uQ1  YjX US]VuW}u	=D &tu",t	WVSЅtWVSu3NWVS5  Euu7WPStu&WVSu!E} t,tWVSЉEE_^[] Pt
u=Tu95  t$i5  h   4XYYUSVuF^   @   tf    N$FFf e $fFu"UtUuST9  YuV9  YfFWtgF>+HNIN~WPS6  E6tˋ @y@ t
jj S5  FMjE_WPS6  E9}_tN E%    F^[]UH  SVW}3Gۉuu}  M3Mu39U   |xÊ(3HE  $ MỦU؉UUUUx  Ã t;t-tHHtY  MP  MG  M>  M5  M,  *u#EP  YE  M؉E  EˍDAU  *uEP  YE  M  ˍDAЉE  It.ht ltw  M  M  M   ?6u4uGGM}l  UЋ
zUDAtEPuP  G}EPuPf  %  Ãg  e   X   x  C   HHtpHHtl  fE0uMuuEP  fEYȉM  u	
<XME   N  f8   @@E    M@;ʉ}   E      fE0uMfEEPt;0  PPt6  E}2E   )Zt2	tH      YE   E  EP  Yt3Ht,Et MEE     e M   8XEP   uguE   EũEuHM@EPPEPdyu   t} uPpyYguuPhyY-u
M}W4  Y  i      H   HtQHH     E'   <+  u	
8XMNt8 t@+  E   E   EE   t]EE0QE   EHEE   t;M5EP  E Yt	fMfME   #  M@E
   EtEP  YAE t!E@EPt  Y%  YE@EPt  Y  Y3E@t|s؃ ڀMEu } }	E   eue EEEMt;ERPWVEU4  uċ؃0uWVI4  9~]ԋEM뵍E+EEEEtM90uu
M@M0E}    ]@t&tE-tE+	tE E   u+u+uuEPuVj   EPEuuP2  tuEPuVj0   } tA} ~;E]xfCPEPC2  YY~2MQuPEP   OuEPuuu   EtEPuVj q   }Gۉ}E_^[} S n    .  UMIxEQuYYEu] ]VW|$O~!t$Vt$t$>tO_^S\$KVW~&|$t$WFt$Pu?tK_^[ËD$  @ËD$ AQËD$  f@Vt$j & <f8MZuH<t
H@F^U,  hSPǅh   HtxulrjX  h  PhD   3ۍ8t<a|<z, A8u퍅jPh5  uIdh  PS@8ddt<a|<z, A8u퍅dPP4  YY;t>j,P3  Y;Yt0@8t9;uA8uj
SP1  tttEP}Y[3j 9D$h   PP t6$u
h     Y
u  u5 L3jXá$VWufS39U-(~@=Tph @  h   6h   j 6vj 5 ՃC;|5j 5 ]['u"HXFth   j PT6;u5 L_^h@  j 5 0uËL$% % j
   Xá;sT$+P   r3UMSVuAW+yi  D  MIM  11UVUU]u~J?vj?ZK;KuL s   L!\D	u(M!!J   L!   	uM!YM]MS[MZUMZRSJ?vj?Z]]   +u]j?uK^;vMщMJ;v;tcMq;qu@ s   !tDLu&M!1K   !   LuM!qMqINMqINu]} u;   M\щ^NqNqN;Nu`L MLs%} u   M	   DD	)} uJ   M	YJ   ꍄ   	ED0E      
5TH   h @  SQ֋
   	P
@    @HCHyC u	`xuiSj p֡pj 5 (ȡ+ȍLQHQP0  E
;vmE=_^[USVW<E}HMI }Mu3uE;߉]sK;#M#u;]]r;]uy;؉]sK;#M#u;uY;]s{ u];]u&;؉]s
{ u;u8  ؅ۉ]tS  YKC8u3  CUt   |D#M#u7   pD#U#ue HD֋uu   E#U#9tU3i  D  MLD#u
   j #M_|GMT
+MMN?~j?^;
  J;Jua }+   M|8Ӊ]#\D\Du8]M!1O   M|8   !]u]M!K]Jz} yJzy   M|zJQJQJ;JudL M})} Lu   	;   M	|D/} Lu
N   	{M   N   	7Mt
LMuэN
L2uɍy>u;uM;
u% MB_^[á
VW3;u0DPP5W5 ,;ta
hA  j5 40;ǉFt*jh    h   WX;ǉFuvW5 (3N>~F_^UQMSVWqA3ۅ|Cj?i  Z0D  E@@Jujyh   h   WXu    p  ;w<GH    @  Hǀ       H;vǋEO  j_HAJHAdD    FCENCu	x   !P_^[UMESVW}׍p+QAi  D  MOI;M\9|9]_  O  ;E  MI?Mvj?YM_;_uH s   ML!\D	u+M!$   ML!   	uM!YO_YOyM+M}    }MOL1?vj?_]][Y]YKYKY;Yu\L MLs!} u   M	DD   %} uO   M	Y   O   	UMD2LUFBD2G  3C  :  ])uNK\3u]NK?vj?^E   uN?vj?^O;OuG s   t!\Du(M!!N   L!   	uM!Y]OwqOwquuuN?vj?^M|{KYKYK;Ku\L MLs!} u   M	9DD   %} uN   M	y   N   	EDjX_^[Ã=XXSUVWuHXh    j 5 0  -Xjh    h  @ j Ջ   j   h   SWՅ   HX;u=HX uHX=LX uLXLXF5LXF0  @    FFN~F3   3҃J#JEH   |Sj W:+  F;s   GG      ܋'h   j WTHXtVj 5 (3_^][Vt$h   j vT95hxuFhxHXt FVj NH5 (^Ã
XX^UQSV5LXW~   e     ? ?   u9h @  Fh   PTt
XFt;v~EMt
   }} ΋vt,yu&jA Z8uB   |   uQ Y;5LXt
} P_^[ËD$HXV;Av;Ar	;t7u1     ;r t$t$f ++^D3^ËD$L$+HDL$! 8   @   uX=X ujYUQQSV5hxWV   ~   +ƃ;Es:];|9_vSQP  uuE_      ;Er]FN~E;Ms3;|9_vSPuj  u&_E   ;}r]6;5hxtC5hx)~(  HXt u?;   _e +w;u}}E8tEjh   PVEX;   j uV'  Uҋ~0FU   PP   A      Mu։=hx   ;s9t;#GEF_))FL   44t)HYThx   +ӉQ)P   3_^[UQMUSVqW9   ;}ǉ]r!;s)Q	a AG   > tƍ4;sCu0jX^; uCF;sN;Euq)u9U   }ƍ4;urq;s~;Esvu@j^X; u%C@;]s	+q	a q16;s)E9Ur4맍;]s	+A	a AFk+3_^[UQUS]V
W}e +G;M|vE+ȈG   `seE4   ;wU;s
8 u@;uBE;w+;v'   ;s338u@< tC	c C+ME   E_^[V5 5x5x5x5tx^VW=pxt+xt#xtxttxtP6Y0y|5x5x5x5tx_^UEV<px 4pxu>WjYujZYj> YWu
 >Yj
   Y_6^]UE4px]USVWUj j h u(K  ]_^[]ËL$A      tD$T$   SVWD$Pjh d5    d%    D$ Xpt.;t$$t(4vL$H| uh  D@   Td    _^[3d
    y uQR9Qu   SQ0y
SQ0yMKCkY[ VC20XC00USVWU]E@      EEEECs{tav| tEVUkT]^]t3x<{SkVSvjDaCT{v4롸       UkjS]   ]_^[]UL$)APAPy] tt$ЅYtjX3UWVuM};v;x     ur)$ Ǻ   r$н $Ⱦ $L   0 #ъFGFGr$ I #ъFGr$ #ъFGr$ I      | t l DDDDDDDDDDDDDD    $ Ⱦ о ܾ  E^_ÐE^_ÐFGE^_ÍI FGFGE^_Ðt1|9   u$r
$P $  I Ǻ   r+$X $P h   F#шGNOr$P I F#шGFGr$P F#шGFGFGZ$P I     $ , 4 G DDDDDDDDDDDDDD    $P ` h x  E^_ÐFGE^_ÍI FGFGE^_ÐFGFGFGE^_Vt$v  YtwUu3UucjX8fFuR<ȅ SW<ȅ   u SYuFjFXFF
?^~>^fNjX_[^3^Ã|$ Vt t$F
tV,  f
f & f Y^UHSVWh  YujY5        ;sf f F
 $  ލEPpf}    E   8X;E   ;|9= }Vh  Yt<    ;s` ` @
$  9= |= 3~LEt8t2uQlt#΋ M	HEFC;|3ۋ
 ۃ<4uMFujX
HPhtWlt%   >uN@u
NNC|5 d_^[SVW t7  ;s!_{ tS$  $;r6& Y |_^[Ujhh| d    Pd%    SVWuuuuw3;uj^u3ۉ]   $uA};=w|j	,Y]WYEM   9]t^uH3ۋuj	`YÃuA;5lxw9j	YE   PlYEML   9]tVSu  9]u>Vj5 0E9]u'9ątVY03ۋuj	YËEMd
    _^[SWj3WYj_9=@~]V0tA@t
PJ  YtC|)0 P040Y$ G;=@|^jHY_[á(Xth@h@   h@h @   j jt$   jj j    W   j_9=ut$xPt|$ S\$=u<t"
Vq;rtЃ;5s^h @h@C   YYh(@h$@2   YY[t   _t$=\_j
Yj
@YVt$;t$s
tЃ^Vt$V#   Yt^F
@tv:  Y^3^SVt$3WFȃu7ft1F>+~&WPv
  ;uFt$FN Ff _^[j   YSVWj33"3Y95@~t0t_@tYPVK0YYHt0|$uPYtC|$ utPYu04VMYYF;5@|j|$Yt_^[h   h     YYU]]EuMm]EvjX3h<<th Ptj Vt$P
  eYt,F= |~jP}  YY
zAuԊ
$|FFu^ËD$$|t:tH@u@t*t
etEt@H80t8uH@A҈uËD$ rjX3UQQ} utEP  EYYMMHÍEP"  EYYMU(EVPEPEQQ $  uEPUFP3}-3ɅQ  Ej PuVu	   E0^US38]VuW}t39]P3>-Pv  YY>-u-G9]~PH
$|38]hHMQ   9]YYtEFA80t<^Ky-Ad|jd^ ÙA
|j
^ Ù Y_^[]U(EVPEPEQQ $y  uEPEP3}-EP  Ej PVu	   E,^USVu]WFH} t;Eu3Ƀ>-ˋ 0` >-u-{FjW?  Y0YG} ~DjW'  $|YvGY}+} t9u|uuW   uj0W  _^[]U(SVEWPEPEQQ ${  E]p3}-EEPSW  EH;|&;}"t
Gu GEjPSuEjPuSu_^[U}et2}Et,}fuuuuN]uuuu4uuuu]W|$tVt$V
  @PVVx  ^_VR|yt:jtj/YYt)V5|ytV4   Y|NjX^3^(|ytP
|yËD$@P`|@   VW$5|yu?jtjYYt&V5|ytVY|NjYW_^á|y   Vt$u
PtlF$tPYF(tPYF0tPYF8tPzYF@tPlYFDtP^YFP=`|tPMYVFYj 5|y^S39VWu   5H3:t<=tGV  Yt   PY;5uj	Y=H8t9UW  YE?=t"U;Yuj	gYW6  YY8u]5HYH_^   [UQQS39VWu'   h  VS@(5 8tEPEPSSWM   EMP9;ujYEPEPEPVW   EH5_^[UMESV! uW}    Et7}8"uDP@"t)t%ttF@tՊFt& F8"uF@CtF@ttF@ t	t		ūuHtf e 8     t	u@8    t7}UE   3ۀ8\u@C8"u,u%39}t
x"Pu}}39UUKtCt\FKutJ} u
 t?	t:} t.ttF@Ft@@Xt& Ft' E_^[ ]QQSU-VW333;u3Ջ;t   (;            ;uՋ;   f9t@@f9u@@f9u+Ƌ=SS@SSPVSSD$4׋;t2U;YD$t#SSUPt$$VSSׅut$kY\$\$VSuL;u;t<8t
@8u@8u+@U?Y;u3UWVW3_^][YYjX Pt
u*=Tu!h      Yth      YU  U3ɸy;tA=zrV;y  P   u
=T         \h  Pj @u\h(P'  YY\WP\  @Y<v)\P  \;jh$We  `hP  `WP  `hP  y`P  h  `hPx  ,_&Eyj P6R  YP6jhP^Vt$;5 s@΋ Dt%WV  t$t$V(   V:  _^   	       ^Vt$WVm  Yu
   	   -t$j t$Pu$3tP*  Y΃Ƌ dD_^Vt$;5 s@΋ Dt%WV  t$t$V(   Vb  _^#   	   !    ^U  SVW39}}}u3f  E E4D0 tjWu@   E9}E}   M+M;Ms)ME	
uE 
@@ȍ+ʁ   |̋+Ej PWP40tCEE;|E+E;Er3E;   9}tbj^9uuL   	   	  0A$EǍMWQuu0tE}E$EuI  Y,D0@tE8        8+E_^[8h   YL$At
IA   IAAA   Aa ËD$; r3Ëȃ D@̋L$   tAt@   u    ~Ѓ3 tAt2t$   t   t͍AL$+ÍAL$+ÍAL$+ÍAL$+USVWV=39tVjYj[uu   YEYt
jYV׋E_^[]UEu]Ã=D ufMf w9jX]ÍMe Qj 5 |PEjPh   5Tt} t   *   ]SVD$uL$D$3؋D$Aȋ\$T$D$ud$ȋD$r;T$wr;D$vN3ҋ^[ SD$uL$D$3D$3Pȋ\$T$D$ud$d$r;T$wr;D$v+D$T$+D$T$؃ [ j t$t$t$   USe VW}wu= |~jP	  YY
zÊAtFЀ-uuM+uFuE    $w  jYu$0t	E
   2<xt
<Xt	E   M9Mu0u<xt<Xu^FFu3u  E= |~jV  YYzpt˃02= |~WV  YYzfp#ǅtJP  Yȃ7;Ms6uM;uru3u;vM	uuEEdEM]utEEe Kuu>t	}   w	u,9uv'  E "   tME$ƉEtEEtE؉EEEt83_^[̍B[Í$    d$ 3D$ST$   t
B8tфtQ   uWV؋
~333ƃ u% t% u   u^_[3ËB8t6t8t't8tt8tt^_B[ÍB^_[ÍB^_[ÍB^_[̋L$WSV|$tiqtOL$F8ttF8t
u^[_3ÊF8u~at(8uĊAtf8t3^[_G^[_Ë^[_UWVSM&ً}3ˋuF3:GwtIIы[^_UWVuM};v;x     ur)$ Ǻ   r$ $ $l   , P #ъFGFGr$ I #ъFGr$ #ъFGr$ I         DDDDDDDDDDDDDD    $     E^_ÐE^_ÐFGE^_ÍI FGFGE^_Ðt1|9   u$r
$p $  I Ǻ   r+$x $p    F#шGNOr$p I F#шGFGr$p F#шGFGFGZ$p I $ , 4 < D L T g DDDDDDDDDDDDDD    $p     E^_ÐFGE^_ÍI FGFGE^_ÐFGFGFGE^_̋T$L$tG3D$Wr-كt+шGIuʃttGJuD$_ËD$Vt$WF@tf VV   V*_^Vt$WFt4VV  v  }FtPHf Yf _^S\$; VWsr< Ã4D0tRS  YD0t)Sh  YPu
$3t  0   	   S  Y   	   _^[UQV}u:   E#E#EV   YEYm^ËD$%Pt$YYS\$3UWtjXttt tt
   VѾ      #ֽ   t   t   t;u#^t;u
   
   _][t
   S\$3VtjXtttt    t˺   #ʾ   t   t;t	;u
ˁ   t   u^   [tUQEH   w
zARV5zDV^te MEj	e EjXM
jj j QPEPjZ  uE
#ES39DuD$A|YZT [VWV9=tVjYj[t$   YD$t
jYV׋D$_^[UQ=D SVWuEA   Z       ]   j;^}%95 |~VSYY
zX#ƅuezDJte
 jE]	X	e	 ]Vj MjQPEPW5Dz   t;uE
EM_^[ËD$Vj YjD$YD$+ʃ҅uF}8 uF|jX^3^ËD$SVWj \$YD$<WjYjX+P7-  Nx<tWj7  N}_^[UQQESVWxj Ye _j ^jȋÙE^jME+Zt!CSuYYuWuNYEYEjY!E@;}U+ȍ<3E_^[ËD$L$Vj+Z04Ju^W|$3_ËD$3Ƀ8 u
A|jX3UESVWj }[E   EEe +֋#ΉMEE˃MEu܋}j[jY;|U+ƋE$ Ky_^[UESVWH
ف   MHMH }  ?  MEu&E3PY   EPYjX   EPEPwEPtCG+O;}EPY<;?+ËEPEPvEVPwEPG@PEP 3|;|(EPVwMEPmw7jRwweEPIYY3jY+OMɁ   u@u
MUq
 uM1_^[h0|t$t$hH|t$t$lU3PPPPuEPEP  uEP$U3PPPPuEPEPl  uEP$UUS]VuJW~0ۋ~]3ۊtAj0Z@MuU  |95|
H89u 0 >1uBW@PWV_^[]U(VEWPEPG   YEYuPj jf  u}FEډE؉FEPW    ~_^UQUSVWfB  %   #ωEBپ   % ۉut;t <  (  !3;u;uEXfXK<  ]ȋEMHuɋٍX  ߋMfH_^[W|$j$    L$W   tAt;   u~Ѓ3 tAt#t   t   t͍y
yyyL$   tAtdG   u~Ѓ3 tt4t'   t   tǉD$_fD$G _fD$_ÈD$_j̱YUSVWj2u  Y;Y]u3p  V  3Ҹ|9tt0B=}rEPSj^;!  j@% Y39u󫪉   }    M   A;   @e j@Y34R }; t,Qt%;wU|@;vAA9 uE}rE܈   P   |ЈYRAAy Gƀ@=   rS   Y5܈%܈ 3Ј=  t      jY_^[ËD$%  u    %u    %uT    ËD$-  t"t
tHt3ø  ø  ø  ø  Wj@Y33Ј܈_U  EVP5  3   @;rEƅ t7SWU
;w+ȍA    ˃BBBu_[j 55PVPj  j 5VPVPV5  j 5VPVPh   5  \3ftt 〠 @AA;rI3   ArZwȀ arzw Ȁ  @;r^Ã= ujY   S39$VWuBhp;tg5hdWօ$tPhTWh@W(֣,(tЋ؅t,tSЋt$t$t$S$_^[3̋L$WtzVSًt$   |$uuo!FGIt%t)   uuQt
FGt/KuD$[^_   tGI      uulGKu[^D$_ÉIt~Ѓ3 tބt,t   t   uƉ     3҉3It
3IuuD$[^_Vv   L$3};t"F=Hrr"$wB    
   ^5   }^Á   r   w
       ^       ^ËL$V;
 WsX< 4@t78t2=Tu3+tItIuPjPjPj03 	     _^ËD$; sȃ Dt ? 	   =  ËD$SȃVW4  <~ u#jE~ Yu
FP FjYD8P_^[ËD$ȃ DPS39DuD$a|YzT [VWV9=tVjYj[t$   YD$t
jYV׋D$_^[UQ=D SuEa   z       ]   }(= |~jSYYzXukzDJte
 E]	j	e	 ]jXMjj jQPEPh   5Dv   tuE
EM[Vt$;5 s8΋ DtWVV(   Vf_^' 	   %  ^Vt$WVYt<tujjyY;YtVmYPu
$3VƃY d tW)Y3_^Vt$Fttv藟ff3YFF^Ujhh| d    Pd%    SVWep3;u>EPj^VhVtEPVh|VS   jXpu$E;uDuuuuP      9]uTESSuuE @PuE;tc]< ǃ$qeuWSVjXËe33M;t)uVuuju;tuPVu3e̋Md
    _^[Ujhh| d    Pd%    SVWe39=tuFWWj[Sh   VWtt"WWSh|VW"  t   9}~uu  YYEtuuuuuuu      9} uTE WWuuE$@Pu ؉];   }$
eĉE܃MjXËe3}܃M]9}tfSuuuju tMWWSuuuu;t2E
t@9}   ;uuuSuuu   3eȋMd
    _^[E   6$Ve܉]MjXËe33ۃMu;tVSuuuut9}WWuWWuuVSh   u ;qlT$D$VJt
8 t@Iu8 ^u+D$ËËT$Vt$32;r;sjXT$^
Vt$W|$V76tFPj0tFFPw0tFFPw0_^ËD$VW0x04?H׉p_H^ËD$VWPHΉH_P^UES]3;VEN@  SSvQWE}SpSjEPSSZEe e  EEPSEMu3_9Su(KCE  sӾ   suSE  YfE^fC
[U\SVW}EjE3ZE؉UEEE܉EEԉEЉEEE} t	t

t
uGj^Gw  $5 1|9j  :$|ujF  Ã+tHHt     jE   X맃e jX란1U|9~:$|   +t1-t,0tRC  E~c{  er  j  Oj  1|	9V:$|Y0  U9 |~VPYYjZ
zÊA#ƅt}sEE0EEG:$|ug} UUu
0uMG9 |~VPJYYjZ
zÊA#ƅt}sEE0EMG빀+
-9 |U~VPYYjZ
zÊA#ƅ   WO1M|9~DÃ+ttHHtd  jeU0uG1   9   
1|9	j	XO0uD}  t*ÍO+MtHH   MjXjXj
OX
   o}   E   3= |~jPYY
zÊAtˍtAЁP  G뾾Q  u= |~jPYY
zÊAtGOE} 8   jX9Ev}|EEEHEE}    H8 uMEEPEuPjE3Ƀ9M}E9MuE9Mu+E=P  ~0E   ]uEU} t`3۸     3E   ^=}	E   uPEPQ  U]uƋEʃ33333333E   } t3333E   ME_qYfA
E^f[ M   )       n : UES]VȾ     #fWEEEEEEEEEEEE?E   tC-C }fuu9}uf# C CC0  f;uz   f ;u} t   @uhFft   u
} u.h;u#} uhCPYCYe n  hCPhYCYϋiM  fe jNfUkM}EEPEPt  f}?rEFPEP;  YYEf3t}}~j_u?  fe E   EP]MYu}ށ   ~
EPnNYuOCɉE~PMu}EPEPEPEPEPEMe 0EMuEHHH5K|0;r89u 0H;s@f *,Cd E_^[;r80uH;sf# C C0c jX̋T$L$   u<:u.
t&:au%
t:Au
t:au
uҋ3Ð@Ë   tB:uA
t   tf:u
t:au
tUV3PPPPPPPPUI 
tB$uA
tF$s ^UV3PPPPPPPPUI 
tB$u
t
F$sF ^U$S]VufK
3WEE܉EEfF
  3##ʁ   f=U  f  f  f?w3:fuEVu39Fu9uo  3f;uESu9Cu9u
FFk  EEEE   E} ~IƍKEEMEEM 	MQP1tEf EmMuȃEEM} E  f} ~%EuEP'E  Yf} f} 9E  f} }+EEEtEEPKYu} tMf} wE% =  u5}u,e }ue f}uEfE fEEEދEf=sfMfMNMNfF
ff     & ~_^[US`3Ƀ`9Mtc}E؉E`9MuEf9MtAVWET};t'@f< 4r}MuVurYY39Mu_^[UWVSu}<x u;
t.F'G8t,A<ɀ A,A<ɀ A8tx= j 
j$      3ې
t'FG8tPS9؃/8tXu	

j[^_UWVSM   u}<x uNAZ I &
t!
tFG8r8w8r8w8u
Iu38         = j 
j$   33ۋt#tFGQPSH؃>Y;u	Iu3;t	rXu	
jˋ[^_̋D$L$ȋL$u	D$ S؋D$d$؋D$[ %`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      H d |         $ 2 > P ^ r           ( 6 H \ p          * D P b z           0 @         {Gz?            I          K                       EEE50 P     (8PX 700WP        `h````  ppxxxx          ( n u l l )     (null)  __GLOBAL_HEAP_SELECTED  __MSVCRT_HEAP_SELECT                         ?   ~PA   GAIsProcessorFeaturePresent   KERNEL32    e+000   runtime error   
  TLOSS error
   SING error
    DOMAIN error
  R6028
- unable to initialize heap
    R6027
- not enough space for lowio initialization
    R6026
- not enough space for stdio initialization
    R6025
- pure virtual function call
   R6024
- not enough space for _onexit/atexit table
    R6019
- unable to open console device
    R6018
- unexpected heap error
    R6017
- unexpected multithread lock error
    R6016
- not enough space for thread data
 
abnormal program termination
    R6009
- not enough space for environment
 R6008
- not enough space for arguments
   R6002
- floating point not loaded
    Microsoft Visual C++ Runtime Library    

  Runtime Error!

Program:    ... <program name unknown>  GetLastActivePopup  GetActiveWindow MessageBoxA user32.dll              T X       h l 1#QNAN  1#INF   1#IND   1#SNAN  H:mm:ss dddd, MMMM dd, yyyy M/d/yy  PM  AM  December    November    October September   August  July    June    April   March   February    January Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan Saturday    Friday  Thursday    Wednesday   Tuesday Monday  Sunday  Sat Fri Thu Wed Tue Mon Sun SunMonTueWedThuFriSat   JanFebMarAprMayJunJulAugSepOctNovDec    \         
                       H d |         $ 2 > P ^ r           ( 6 H \ p          * D P b z           0 @     InitializeCriticalSection U DeleteCriticalSection f EnterCriticalSection  LeaveCriticalSection   FreeLibrary >GetProcAddress  LoadLibraryW  LocalFree  FormatMessageW  GetLastError  KERNEL32.dll  HeapFree  HeapReAlloc HeapAlloc  GetCommandLineA tGetVersion  &GetModuleHandleA  $GetModuleFileNameA  	GetEnvironmentVariableA uGetVersionExA HeapDestroy HeapCreate  VirtualFree VirtualAlloc  } ExitProcess /RtlUnwind mSetHandleCount  RGetStdHandle  GetFileType PGetStartupInfoA TerminateProcess   GetCurrentProcess  GetCurrentThreadId  TlsSetValue TlsAlloc  TlsFree qSetLastError  TlsGetValue  FreeEnvironmentStringsA  FreeEnvironmentStringsW WideCharToMultiByte GetEnvironmentStrings GetEnvironmentStringsW  WriteFile jSetFilePointer  InterlockedDecrement  InterlockedIncrement   FlushFileBuffers   GetCPInfo  GetACP  1GetOEMCP  LoadLibraryA  |SetStdHandle   CloseHandle MultiByteToWideChar SGetStringTypeA  VGetStringTypeW  LCMapStringA  LCMapStringW      K        S   S   x   p     '  @+  0)  P-  p  "    $      0  P  @  `  `/  P1  N  0N   0  @3  1  0S  3  B  PE  7  ?   >   B   A  `G  p`  PV  0c  PX  p\  pr  a  PW  @e  `Z  p^  Pg  i  I  G  H  F  J  N  K   P  0N  L  o  0S  0R  `T  @3  1  m  pu  @w  {  P|  {  Pz  |   ~  ~        Ѐ     u  u  y  y  0y  x   
  J      
! L! ! ! " b" " " '# m# # # 7$ z$ $ $ >% % % & U& & & ' \' ' ' (( b( ( ( ) a) ) ) %* e* * * (+ h+ + + ", ], , , - L- - - . E. . . . D/ / / / >0 ~0 0 1 G1 1 1 2 N2 2 2 3 a3 3 3 4 [4 4           	 
   
                     ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R opensc-PKCS11-0.4.dll _Java_org_opensc_pkcs11_PKCS11Provider_loadNativePKCS11Module@12 _Java_org_opensc_pkcs11_PKCS11Provider_unloadPKCS11Module@16 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNative@52 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNativeOff@60 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNative@52 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNativeOff@60 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNative@52 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNativeOff@60 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNative@52 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNativeOff@60 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initDecryptNative@44 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initEncryptNative@44 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNative@52 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNativeOff@60 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNative@52 _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNativeOff@60 _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initSignNative@44 _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initVerifyNative@44 _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_signNative@32 _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative1@36 _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative@44 _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative1@36 _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative@44 _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_verifyNative@36 _Java_org_opensc_pkcs11_wrap_PKCS11KeyPairGenerator_generateKeyPairNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Object_createObjectNative@36 _Java_org_opensc_pkcs11_wrap_PKCS11Object_deleteObjectNative@40 _Java_org_opensc_pkcs11_wrap_PKCS11Object_enumObjectsNative@36 _Java_org_opensc_pkcs11_wrap_PKCS11Object_getAllowedMechanismsNative@40 _Java_org_opensc_pkcs11_wrap_PKCS11Object_getAttributeNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Object_getBooleanAttributeNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Object_getULongAttributeNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Session_closeNative@32 _Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptFinalNative@32 _Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptInitNative@48 _Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateOffNative@52 _Java_org_opensc_pkcs11_wrap_PKCS11Session_deriveKeyNative@52 _Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptFinalNative@32 _Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptInitNative@48 _Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateOffNative@52 _Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyPairNative@48 _Java_org_opensc_pkcs11_wrap_PKCS11Session_initPINNative@36 _Java_org_opensc_pkcs11_wrap_PKCS11Session_loginNative@40 _Java_org_opensc_pkcs11_wrap_PKCS11Session_logoutNative@32 _Java_org_opensc_pkcs11_wrap_PKCS11Session_openNative@28 _Java_org_opensc_pkcs11_wrap_PKCS11Session_setPINNative@40 _Java_org_opensc_pkcs11_wrap_PKCS11Session_signFinalNative@32 _Java_org_opensc_pkcs11_wrap_PKCS11Session_signInitNative@48 _Java_org_opensc_pkcs11_wrap_PKCS11Session_signNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateByteNative@36 _Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Session_unwrapKeyNative@56 _Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyFinalNative@36 _Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyInitNative@48 _Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyNative@48 _Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateByteNative@36 _Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateNative@44 _Java_org_opensc_pkcs11_wrap_PKCS11Session_wrapKeyNative@56 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_destroySlotNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_enumerateSlotsNative@16 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getDescriptionNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getFirmwareVersionNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getHardwareVersionNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getManufacturerNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getMechanismsNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenLabelNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenManufacturerNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMaxPinLenNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMinPinLenNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenModelNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenSerialNumberNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_hasTokenProtectedAuthPathNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_initSlotNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_initTokenNative@32 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_isHardwareDeviceNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_isRemovableDeviceNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_isTokenPresentNative@24 _Java_org_opensc_pkcs11_wrap_PKCS11Slot_waitForSlotNative@16                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     m                           <init>  (ILjava/lang/String;)V  org/opensc/pkcs11/wrap/PKCS11Exception  C_EncryptInit failed for slot %d.   C_DecryptInit failed for slot %d.   C_DecryptUpdate failed for slot %d. Invalid input offset %d.    NULL input data.    Invalid data length %d. C_EncryptUpdate failed for slot %d. Invalid output offset %d.   NULL output data.   C_DecryptFinal failed for slot %d.  C_EncryptFinal failed for slot %d.  C_Decrypt failed for slot %d.   C_Encrypt failed for slot %d.   C_SignInit failed for slot %d.  C_SignUpdate failed for slot %d.    C_SignFinal failed for slot %d. C_VerifyInit failed for slot %d.    C_VerifyUpdate failed for slot %d.  C_VerifyFinal failed for slot %d.   C_GenerateKeyPair failed.   getData ()[B    getKind ()I org/opensc/pkcs11/wrap/PKCS11Attribute  C_FindObjectsFinal failed for slot number %d.   C_FindObjects failed for slot number %d.    C_FindObjectsInit failed for slot number %d.    Out of memory during object enumeration for slot number %d. C_GetAttributeValue returned ulValueLen -1 for attribute %u but returned CKR_OK. The underlying PKCS#11 module seems to be broken.  C_GetAttributeValue failed for attribute %u.    C_GetAttributeValue returned ulValueLen -1 for attribute CKA_ALLOWED_MECHANISMS but returned CKR_OK. The underlying PKCS#11 module seems to be broken.  C_GetAttributeValue failed for attribute CKA_ALLOWED_MECHANISMS.    C_GetAttributeValue returned ulValueLen==%lu, which is not equal to sizeof(CK_ULONG) for attribute %u of type CK_ULONG but returned CKR_OK. The underlying PKCS#11 module seems to be broken.   C_GetAttributeValue returned ulValueLen==%lu, which is not equal to sizeof(CK_BBOOL) for attribute %u of type CK_BBOOL but returned CKR_OK. The underlying PKCS#11 module seems to be broken.   C_CreateObject failed.  C_DestroyObject failed. [B  C_OpenSession for PKCS11 slot %d failed.    pkcs11_slot_close_session: C_CloseSession for PKCS11 slot %d(%S) failed.    C_Login for PKCS11 slot %d failed.  PKCS11Session.logoutNative: C_Logout for PKCS11 slot %d(%S) failed (%s).    C_InitPIN for PKCS11 slot %d failed.    C_SetPIN for PKCS11 slot %d failed. C_Sign failed for slot %d.  C_Verify failed for slot %d.    C_GenerateKey failed.   C_WrapKey failed for slot %d.   C_UnwrapKey failed. C_DeriveKey failed. C_InitToken failed for module %S.   java/lang/IllegalArgumentException  Length of label exceeds 32 bytes    C_GetSlotList failed for module %S. C_WaitForSlotEvent failed.  C_GetMechanismList for PKCS11 slot %d failed.   No token present in slot %d.    Invalid value %u for ulMinPinLen of token in slot %d.   Invalid value %u for ulMaxPinLen of token in slot %d.   Unknown PKCS#11 error   CKR_VENDOR_DEFINED  CKR_FUNCTION_REJECTED   CKR_MUTEX_NOT_LOCKED    CKR_MUTEX_BAD   CKR_CRYPTOKI_ALREADY_INITIALIZED    CKR_CRYPTOKI_NOT_INITIALIZED    CKR_STATE_UNSAVEABLE    CKR_INFORMATION_SENSITIVE   CKR_SAVED_STATE_INVALID CKR_BUFFER_TOO_SMALL    CKR_DOMAIN_PARAMS_INVALID   CKR_RANDOM_NO_RNG   CKR_RANDOM_SEED_NOT_SUPPORTED   CKR_WRAPPING_KEY_TYPE_INCONSISTENT  CKR_WRAPPING_KEY_SIZE_RANGE CKR_WRAPPING_KEY_HANDLE_INVALID CKR_WRAPPED_KEY_LEN_RANGE   CKR_WRAPPED_KEY_INVALID CKR_USER_TOO_MANY_TYPES CKR_USER_ANOTHER_ALREADY_LOGGED_IN  CKR_USER_TYPE_INVALID   CKR_USER_PIN_NOT_INITIALIZED    CKR_USER_NOT_LOGGED_IN  CKR_USER_ALREADY_LOGGED_IN  CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT    CKR_UNWRAPPING_KEY_SIZE_RANGE   CKR_UNWRAPPING_KEY_HANDLE_INVALID   CKR_TOKEN_WRITE_PROTECTED   CKR_TOKEN_NOT_RECOGNIZED    CKR_TOKEN_NOT_PRESENT   CKR_TEMPLATE_INCONSISTENT   CKR_TEMPLATE_INCOMPLETE CKR_SIGNATURE_LEN_RANGE CKR_SIGNATURE_INVALID   CKR_SESSION_READ_WRITE_SO_EXISTS    CKR_SESSION_READ_ONLY_EXISTS    CKR_SESSION_EXISTS  CKR_SESSION_READ_ONLY   CKR_SESSION_PARALLEL_NOT_SUPPORTED  CKR_SESSION_HANDLE_INVALID  CKR_SESSION_COUNT   CKR_SESSION_CLOSED  CKR_PIN_LOCKED  CKR_PIN_EXPIRED CKR_PIN_LEN_RANGE   CKR_PIN_INVALID CKR_PIN_INCORRECT   CKR_OPERATION_NOT_INITIALIZED   CKR_OPERATION_ACTIVE    CKR_OBJECT_HANDLE_INVALID   CKR_MECHANISM_PARAM_INVALID CKR_MECHANISM_INVALID   CKR_KEY_UNEXTRACTABLE   CKR_KEY_NOT_WRAPPABLE   CKR_KEY_FUNCTION_NOT_PERMITTED  CKR_KEY_INDIGESTIBLE    CKR_KEY_NEEDED  CKR_KEY_CHANGED CKR_KEY_NOT_NEEDED  CKR_KEY_TYPE_INCONSISTENT   CKR_KEY_SIZE_RANGE  CKR_KEY_HANDLE_INVALID  CKR_FUNCTION_NOT_SUPPORTED  CKR_FUNCTION_NOT_PARALLEL   CKR_FUNCTION_CANCELED   CKR_ENCRYPTED_DATA_LEN_RANGE    CKR_ENCRYPTED_DATA_INVALID  CKR_DEVICE_REMOVED  CKR_DEVICE_MEMORY   CKR_DEVICE_ERROR    CKR_DATA_LEN_RANGE  CKR_DATA_INVALID    CKR_ATTRIBUTE_VALUE_INVALID CKR_ATTRIBUTE_TYPE_INVALID  CKR_ATTRIBUTE_SENSITIVE CKR_ATTRIBUTE_READ_ONLY CKR_CANT_LOCK   CKR_NEED_TO_CREATE_THREADS  CKR_NO_EVENT    CKR_ARGUMENTS_BAD   CKR_FUNCTION_FAILED CKR_GENERAL_ERROR   CKR_SLOT_ID_INVALID CKR_HOST_MEMORY CKR_CANCEL  CKR_OK       0 p         C_GetInfo in PKCS11 module %S failed.   C_Initialize in PKCS11 module %S failed.    C_GetFunctionList in PKCS11 module %S failed.   Cannot find function C_GetFunctionList in PKCS11 module C_GetFunctionList   Cannot open PKCS11 module   Out of memory allocating PKCS11 module name.    toCharArray ()[C    java/lang/String    Out of memory allocating PKCS11 context.    %s %S: %S   Invalid PKCS 11 module handle %p.   C_GetTokenInfo for PKCS11 slot %d failed.   C_GetSlotInfo for PKCS11 slot %d failed.    Out of memory allocating PKCS11 slot.   Invalid PKCS11 slot handle %p.  C_GetMechanismInfo failed for mechanism %u. (IIII)V org/opensc/pkcs11/wrap/PKCS11Mechanism      @    @                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             u  s  ͚   W        HXHX`X`X                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      HX      `                                                    x                                                                                                                                      
                                          	   \
   8               T   ,         x   y   tz   d   `   Pzz                    ( ( ( ( (                                     H                                                                                                                                                                                                                                                                                                                                                                          .             5      @                                                                                                                     x   
         `y!                       @~      ڣ                              @        ڣ                              A        Ϣ [                       @~    Q  Q^  _j2                   1~                               
      	               	      
                  
               
               !   
   5      A   
   C      P      R   
   S   
   W      Y      l   
   m       p      r   	            
      
      	            
      )      
                  
                          C   C                                                                                                                                   C                                                                                                                                               h    |xtplhd\PH@80(    .                             @         @         @        @@        P@        $@       @        @     4@   N@ p+ŝi@]%O@qוC)@D@<զIx@oGAkU'9p|Bݎ~QCv)/&D(DJzEeǑF
euuvHMXB䧓9;5SM]=];Z] T7aZ%]g']݀nLɛ R`%u    ?q=
ףp=
ף?Zd;On?,eX?#GGŧ?@il7?3=BzՔ?aw̫?/L[Mľ?S;uD?g9Eϔ?$#⼺;1az?aUY~S|_?/D?$?9'*?}d|FU>c{#Tw=:zc%C1<!8G ;܈Xㆦ;ƄEBu7.:3q#2IZ9Wڥ2hRDY,%I-64OSk%Y}ZW<P"NKeb}-ޟݦ
p     PST                                                             PDT                                                             (h                           ;   Z   x                 0  N  m     :   Y   w                 /  M  l                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                11n3w344444444t5}555666666777788888 99#9c9h9
::::::;;.;3;s;x;<#<<<=
=7=<===2>;>~>>>>??       00G0L000<1E111112223+303p3u3 4)4x44)5.5L5Q5{5555m6v666y7~77777d8m888999999q:z:::;;;;;;<<S<X<<====== >>#>c>h>
???? 0  p   U0Z0v0{000$1-111E2J2f2k2223333/4P4U4}44n7w7H8o8t888::;;g;s;H<M<<<l=x=>>>>??9?@? @  t   '000N0U000001111222233V3[3335 5556)7277788i9n9V:_:;;<<E=J=f=k===>>>>X?a??? P     000000c1l111333354>44444
55h5m5 6)6&7/7#8,88888999999::::;;;; <	<<<<<==6=;={==%>.>>>>>??6?;?{?? `  l   "0+001Z1c1X2a222333333l4u444555555y66667777799/:P:U:}::t=}=>>???   p  T   0	03080A2J222233446677777 889;<><u<<<O=X===c>m>S?]?       C0M031=1#2-2r2w23
3R3W3334445 5V5]555555555555555666"6,666@6J6T6^6h6r6|66666666666666777&707:7D7N7X7b7l7v77777777777777888 8*848;8B8I8P8W8^8e8l8s8z888888888888888888888888'9+9/93979;9?9C9G9K9O9S9W9[9_9c9g9k9o9s9w9{9999999999999::
::::::":&::::::::::::::::::::::<M<<<<<$=C=H===>8>N>[>p>>>>>>"?+?l??????         0%0d0001&1j1s111282=22233444445N55566-66$7*7e7k777777;8@8Y8g8899n9999999999
::.:7:S:v::::::::::::;	;;;;,;3;B;J;U;[;a;k;;;;;;;;<<y<<<<= =z==*>9>O>?      90C11117245555555566e6k666p7w777777777888"828I8U8[8k8q8x88888888;;;1;6;E;K;[;f;x;;;;;;;;;;;;;<<O<<>>>??$?+?1?;?A?F?L?\?e?????      03333344%4+434<4E444444555.545<5K5555
6666a7n7}77388y:::::::::::::::;;;J;e;u;{;;;:<T<]<U========>+>E>L>P>T>X>\>`>d>h>>>>>>*?5?P?W?\?`?d???????????       0J0P0T0X0\000000111111
2<2F2g2|2222	333=3b3r3w3334^4d4r444444
55+565;5E5J555555555555566667P7b777777778*8:8X8899:&<.<H<N<_<x<<<<<<<<<<==$======= >C>O>Y>m>{>>>>>>=??        e0~0000000111111
202=2K2V2i2222233;3P3f3m3{334474S4f44z5555>6661797?7G7777799999:<<<<<<<%=K=e=l=p=t=x=|=========J>U>p>w>|>>>>>>??????? ?j?p?t?x?|?      000022333;3A3G33333!477:;;;/;8;D;v;;;;;;;;;<<-<3<;<C<N<|<<<<<<<<=	===,=2=======>*>7>G>h>t>>>>>>>>>>>>>??
??:?      ]0j0000	1+1X1l1111122252=2C2I22222%3W3j3334a4f4444444445"5x5555555556606M6e6666&7779:\::::;D;];;;<<<<5>9>=>A>E>I>M>Q>U>Y>]>a>?-?>?[?     $   24F44555i55556f66    $   11 1,181D112555555 @    000   P (   222255(8,8084888<8H8L8P8T8 p H   h8t8888d9h9l9p9t9x99999999999999999::::    |   `0h0l0p0t0x0|000000000000000000000000000000000 11111 1$1(1,1014181<1@1D1P144                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      MZ                @                                       	!L!This program cannot be run in DOS mode.

$       '*3cK]cK]cK]=aK]=aK]=hK]=aK]j3`K]cK\LK]=hK]=bK]=bK]RichcK]        PE  d jR         " 
     L                                    0    (  @                                     <  @  <                                                                                                     .text   R                          `.rdata  <      >                 @  @.data                          @  .pdata                         @  @.rsrc                         @  @.reloc  T                        @  B                                                                                                                                                                                                                                                                                                IX  @SH IMtMA8оuDI@X3P
HK`Ht  HKHt  3HDBhR  HH [H%  L  H  LH [J  H\$WH@IHMt~A8оuuHtgA9u^L$p3HT$0HD$0HD$8$   D$0I@XDD$x   tJKL
  H  L$ HDa  H\$PH@_L  
MLC  Hܠ  藅  H\$PH@_H\$WH@IHMt~A8оuuHtgA9u^L$p3HT$0HD$0HD$8$   D$0I@XDD$x
  tJKL
  HP  L$ HD衆  H\$PH@_L?  
ML  H  ׄ  H\$PH@_@UAUAVH@Hl$0H]0Hu8H}@LeHH  H3HEIMHE     M  A8о  M  A9x  Hc}pyL؟  H  D9  t  HU`HuL̟  H]    S  DEhE  D;  HOIH;wIHHk  HH+Lt$0DHLt$ @  ID$XHM E3DHL$ MPI  t%NL
q  Hʞ  L$ HD     E HHH;wIHH  ID$XH+HM Ll$0DHL$ MPMI  uHU H  HHtLDM E3HHLl$ A  H9EH-  L    L(  
MLl  H    3HMH3҄  H]0Hu8H}@LeHHeA^A]]@UAUAVH@Hl$0H]0Hu8H}@LeHH  H3HEIMHE     M  A8о  M  A9x  Hc}pyL  HQ  D	  t  HU`HuL  H-    S  DEhE  D;  HOIH;wIHH;  HH+Lt$0DHLt$ @  ID$XHM E3DHL$ MPI   t%NL
i  H  L$ HD     E HHH;wIHH軌  ID$XH+HM Ll$0DHL$ MPMI   uHU H  HHtLDM E3HHLl$ A  H9EH  Lv  豀  L  
ML<  H՛  萀  3HMH3袂  H]0Hu8H}@LeHHeA^A]]@UATAUAVAWHPHl$0H]PHuXH}`Hj  H3HEMMHM  A8о  M  A9  Hc   yL|  H%  D    H    uLo  H       D   EX  D;O  H   HuL  HÚ  H{  _  HHHX  D   E E   D;   A+HHHE H;wHHH賊  H+HNHD$0HEH;wHHH菊  HH   H+DEH\$0HH\$ @  LuM_XMpHE MDHHD$ A  t$AL$L
  Hޙ  L$ HD/  vHDM H   EHLt$   E TL  H  EHP~  7L  H  E8~  L  
MLî  H\  ~  3HMH3)  H]PHuXH}`He A_A^A]A\]@UATAUAVAWHPHl$0H]PHuXH}`H  H3HEMMHM  A8о  M  A9  Hc   yL  H  D]}    H    uL  H  ;}    D   EX  D;O  H   HuL:  HC  H|  _  HHHX  D   E E   D;   A+HHHE H;wHHH3  H+HNHD$0HEH;wHHH  HH   H+DEH\$0HH\$ @  LuM_XMpHE MDHHD$ A   t$AL$L
-  H^  L$ HD}  vHDM H   EHLt$   E TL*  H  EH{  7L  H   E{  L  
MLC  Hܖ  {  3HMH3}  H]PHuXH}`He A_A^A]A\]@UATAUAVAWHPHl$0H]PHuXH}`Hj  H3HEE3IMHDm DmM^  A8оQ  M?  A92  Hc   yLq  H  Dz  +  H   HuLb  H  z    D   E  D;  HNIH;wIHH  HH+Lt$0DHLuLt$ @  L}pID$XHM HL$ E3DAI  t%L
  OHU  DL$ H{  _  DE IHI;w
HHHn  H+Lt$0Et%ID$XHUHM HL$ MDA  uID$XLE3A"  tL
  iMtCHQH;w
HHH  ID$XH+Ll$0LEAI"  uME LHA  HHtEDE EtLEHE3HLt$ A  DE DMEtHHHLl$   H9EH  L  x  L
  
MLN  H  x  3HMH3z  H]PHuXH}`He A_A^A]A\]@UATAUAVAWHPHl$0H]PHuXH}`Hz  H3HEE3IMHDm DmM^  A8оQ  M?  A92  Hc   yL  H*  Dw  +  H   HuLr  H  w    D   E  D;  HNIH;wIHH  HH+Lt$0DHLuLt$ @  L}pID$XHM HL$ E3DAI   t%L
7  OHe  DL$ Hx  _  DE IHI;w
HHH~  H+Lt$0Et%ID$XHUHM HL$ MDA   uID$XLE3A  tL
-  iMtCHQH;w
HHH  ID$XH+Ll$0LEAI  uME LHA  HHtEDE EtLEHE3HLt$ A  DE DMEtHHHLl$   H9EH  L  u  L  
ML^  H  u  3HMH3w  H]PHuXH}`He A_A^A]A\]@UATAUAVAWHPHl$0H]PHuXH}`H  H3HEMMHM  A8о  M  A9  Lc   EyL  HD  Et    H    uL  H  t       i  A;`  HH   X  D   E#  D;  A+HHFH;wHH  H+IMHD$0u HEI;wHHH  HD   H   H+EH\$0HH\$ @  IGXLMHM HH]pHL$ Eŋ  t'L
Џ  AL$H$  DL$ Huu     E MOXLE+ˉuHuHA"  t	L
  벋]LH   ] EHDHt$ A  TL  H  EH`s  7L  H  DHs  L  
MLӣ  Hl  's  3HMH39u  H]PHuXH}`He A_A^A]A\]@UATAUAVAWHPHl$0H]PHuXH}`H  H3HEMMHM  A8о  M  A9  Lc   EyL  H  Elr    H    uL  H  Jr       i  A;`  HH   X  D   E#  D;  A+HHFH;wHHo}  H+IMHD$0u HEI;wHHHH}  HD   H   H+EH\$0HH\$ @  IGXLMHM HH]pHL$ Eŋ   t'L
h  AL$H  DL$ Hr     E MOXLE+ˉuHuHA  t	L
  벋]LH   ] EHDHt$ A  TL*  H  EHp  7L  H   Dp  L  
MLC  H܋  p  3HMH3r  H]PHuXH}`He A_A^A]A\]@UAUAVH@Hl$0H]0Hu8H}@LeHHj  H3HEIMHM  A8о  M  A9  Hc}pyL  H(  Do  {  HU`HuLs  H  o  Z  DEhE  D;
  HOIH;wIHH{  HH+Lt$0DHLt$ @  ID$XHM E3DHL$ MPIE       t%NL
  Hj  L$ HDp     E HHH;wIHHz  ID$XH+HM Ll$0DHL$ MPMI  uHU H  HHtLDM E3HHLl$ A  H9EH͉  LF  n  Lȟ  
ML  H  `n  3HMH3rp  H]0Hu8H}@LeHHeA^A]]@UAUAVH@Hl$0H]0Hu8H}@LeHH:  H3HEIMHM  A8о  M  A9  Hc}pyLO  H  Dm  {  HU`HuLC  HԈ  m  Z  DEhE  D;
  HOIH;wIHHx  HH+Lt$0DHLt$ @  ID$XHM E3DHL$ MPIE        t%NL
ى  H:  L$ HDn     E HHH;wIHH[x  ID$XH+HM Ll$0DHL$ MPMI   uHU H  HHtLDM E3HHLl$ A  H9EH  L  Ql  L  
MLܜ  Hu  0l  3HMH3Bn  H]0Hu8H}@LeHHeA^A]]@UATAUAVAWHPHl$0H]PHuXH}`H
  H3HEMMHM  A8о  M  A9  Hc   yL  Hņ  D}k    H    uL  H  [k    D   EX  D;O  H   HuLZ  Hc  Hk  _  HHHX  D   E E   D;   A+HHHE H;wHHHSv  H+HNHD$0HEH;wHHH/v  HH   H+DEH\$0HH\$ @  LuM_XMpHE MDHHD$ A  t$AL$L
  H~  L$ HDk  vHDM H   EHLt$   E TLJ  H;  EHi  7L  H   Ei  L  
MLc  H  i  3HMH3k  H]PHuXH}`He A_A^A]A\]@UATAUAVAWHPHl$0H]PHuXH}`H  H3HEMMHM  A8о  M  A9  Hc   yL  HE  Dh    H    uL  H   h    D   EX  D;O  H   HuLڄ  H  Hh  _  HHHX  D   E E   D;   A+HHHE H;wHHHs  H+HNHD$0HEH;wHHHs  HH   H+DEH\$0HH\$ @  LuM_XMpHE MDHHD$ A   t$AL$L
  H  L$ HDOi  vHDM H   EHLt$   E TLʃ  H  EHpg  7L'  H  EXg  L  
ML  H|  7g  3HMH3Ii  H]PHuXH}`He A_A^A]A\]H\$WH@IHMt~A8оuuHtgA9u^L$p3HT$0HD$0HD$8$   D$0I@XDD$xR  tJKL
  HЁ  L$ HD!h  H\$PH@_L  
ML  H  Wf  H\$PH@_@UATAUH@Hl$0H]0Hu8H}@HN  H3HE MMHM
  A8о   M   A9   HcuhyLc  H  De     HUXHuLW  H  e     DE`Ex|D;wHNH;w
HHHq  HH+H\$0DHH\$ @  M]XMPDHAb  t[AL$L
I  Hj  L$ HDf  7EHO  LȀ  e  LJ  
ML  H'  d  HM H3f  H]0Hu8H}@HeA]A\]H\$WH@IHMt~A8оuuHtgA9u^L$p3HT$0HD$0HD$8$   D$0I@XDD$x  tJKL
  H  L$ HDe  H\$PH@_L  
MLÔ  H\  d  H\$PH@_@UATAUAVAWH   Hl$@H   H   H   H  H3HEPIHHEM~  A8оq  M_  A9R  HH_  P0HHX  HL
n  Lo  HH  LHE H+  HL
Q  LR  HH  HEH  L   HHIX  HDHHAH;wHHsn  H+3HD$@HEE   Hp     HDIHh  LH  LMHHA  LEIԉFLHA  LHHLAX  DDNIAI;w
HHm  H+E3HD$@IHHLHD$ A@  HA;PHL   HHIX  DHHAH;wHHbm  H+3HD$@HE8E   Hp    HDIHh  LHr  LLE HHA  LEIԉFLHA  LHHLAX  DDNIAI;w
HHl  H+E3HD$@IHHLHD$ A@  HA;O   LEHM HL$8E(HEH@XHMHU(HL$0HM8Dl$(HL$    EHE,    E4      H˅tL
~  H{  D+b  iH     HHtSEHM@A   HE@E HL$ HEHHE3HH  H!L  
LL̐  He{   `  3HMPH32b  H   H   H   He`A_A^A]A\]@UVWATAUAVAWH   Hl$0H  H  H3H   L(  MMLEHM  A8о|  Mj  A9]  HH>}  P0HHc  HL
M}  LN}  HH  HEH9  HL
3}  L4}  HH  HE H  HIHX  HDHHAH;wHH\j  H+3HD$0HEE   HxHDIHh  LH  LLEHHA  LE IԉGLHA  LHHLAX  DDOIAI;w
HHi  H+E3HD$0IHHLHD$ A@  HA;OLe   3~x  LHu(EOL|  Hy  H]  I[x    H   ID$XHUE   tL
|    ID$XLM HU0A    ˉ}    tL
|     E t$IHU0    HHE H;rHc߃    A        I   IIw  LH   LHELPXLM HU0A    A   DuvE 3҅t#HM0    I܋E HH;r tLeID$X      t=L
c{  AODL$ Hw  H	^  Iv  jAGL
{  D$ HH  LDE3HHHLl$ A  Iv  H!L\  
ML  H9w  [  3H   H3^  H  H   A_A^A]A\_^]@UHPHl$0H]0Hu8H}@HҴ  H3HEIHMN  A8оA  M/  A9"  u`UXMP3A   u HEEI@XLE    t"L
Ez  Hnv  DHωt$ \     Eu%L
Kz  HDv  A   Hωt$ \     HHH;w
HHH^f  UXH+MPHD$0LE HEHCXA      dUHσuL
y  D@Hu  t$ \  PH  HMLDMHL$ E3HHHA  H!L  
LLԊ  Hmu  (Z  3HMH3:\  H]0Hu8H}@He ]@UHPHl$0H]0Hu8H}@H  H3HEIIHM,  A8о  M
  A9   UXMP3HEEI@XLE A   E   @   tL
Ay  Ht  DHZ     Eu!L
ky  Ht  A   HZ     HHH;w
HHHd  UXH+MPHD$0LE HEHGXA      lEH˃uL
x  Ht  A   `Z  7LMLH׉D$ HV  !L  
ML3  Hs  X  3HMH3Z  H]0Hu8H}@He ]@SH@HD$`M   A8о   M   A9   T$xL$pHD$`HD$4I@XH|$P$   LD$0A   |$0D$<      t*L
v  Hs  DHˉ|$ cY  H|$P3H@[ËD$<t1L
fx  Hr  A   Hˉ|$(D$ )Y  H|$P3H@[ËD$`H|$PH@[L  Hr  ZW  3H@[MHr  L  <W  3H@[@SH@HD$` M   A8о   M   A9   T$xL$pHD$`HD$4I@XH|$P$   LD$0A   |$0D$<      t*L
u  Hq  DHˉ|$ 6X  H|$P2H@[ËD$<t1L
w  Hq  A   Hˉ|$(D$ W  H|$P2H@[D$`H|$PH@[L  Hqq  ,V  2H@[MHZq  L  V  2H@[@UATAUAVAWH`Hl$0H]`HuhH}pH
  H3HE MHM  A8о  M  A9  HHos  P0HH  HL
~s  Ls  HH  HEH  HL
ds  Les  HH  HEHs  L   HHIX  HDHHAH;wHH`  H+3HD$0HEE   Hpfff     HDIHh  LH   LLEHHA  LEIԉFLHA  LHHLAX  DDNIAI;w
HH_  H+E3HD$0IHHLHD$ A@  HA;OIFXHU   LM E   tL
9v  H2o  DHU  $E !L)  
MLm  Ho  S  3HM H3U  H]`HuhH}pHe0A_A^A]A\]@SH HMtcA8оuZMt=A9u4I@XT$XL$P   tLL
u  Hn  DHH [T  L  Hin  H [S  MHUn  L  	S  H [@UH@Hl$0H] Hu(H}0H  H3HE HHH>u  IHP0LHHLA   tVHHHX  DDNIAI;w
HH^  H+E3HD$0HHHFLHD$ A@  HM H3lT  H] Hu(H}0He]H\$WH0IHM   A8о   HtuA9ulI@X|$`       EHL$PE3HL$ KE3Pbt-KL
:t  Hl  L$ HDLS  3H\$@H0_ËD$PH\$@H0_Lق  
ML  Hl  qQ  H\$@3H0_H\$WH IIMtYA8оuPHtBA9u9I@XL$PPjtIk  LODCHH`Hs  H\$0H _H%sk  LD  
ML  H!l  P  H\$0H _@UAUAVH@Hl$0H]0Hu8H}@Hީ  H3HE E3IIHEM   A8о   H   A9   L9m`tOHHU`X  DIFI;w
HH[  HU`H+HLl$0EE3HLl$ @  HFXUXMPEM   tAKL
r  H,k  L$ HD}Q  L$  
MLh  Hk  O  HM H3Q  H]0Hu8H}@HeA^A]]Ht$WH0IIMtuA8оulMt^A9uUI@XL$`   tbH\$@&B  Hi  LODFH^r  HH`H\$ i  H\$@Ht$HH0_LX  
ML  H5j  N  Ht$HH0_@UAUAVH@Hl$0H]0Hu8H}@H  H3HE E3IIHEM   A8о   H   A9   L9mXtOHHUXX  DIFI;w
HHY  HUXH+HLl$0EE3HLl$ @  HFXMPEIPRtAKL
q  HBi  L$ HDO  L:  
ML~~  Hi  M  HM H3O  H]0Hu8H}@HeA^A]]@UATAUAVAWH@Hl$0H]@HuHH}PH  H3HEE3IIHELm EM  A8о  M   A9   LehMtMHIX  DIGI;w
HHX  H+HLl$0EE3IHLl$ @  LepMtTHIHX  DIFI;w
HHDX  H+HHL$0EE3HM HL$ HI@  HFXLM M`EIDt$ PZtAOL
p  Hg  L$ HDM  L}  
ML|  Hug  0L  HMH3DN  H]@HuHH}PHeA_A^A]A\]@UHPHl$0H]0Hu8H}@H  H3HEIIHM   A8о   H   A9   3H}h HE HEE`E tUHHUhX  DDMIAI;w
HHV  LHUhH+E3HHD$0HEHD$ A@  HGXDEXMPHU R  tAKL
h  HPf  L$ HDL  LH|  
ML{  H%f  J  HMH3L  H]0Hu8H}@He ]@UATAUH@Hl$0H]0Hu8H}@HΣ  H3HE IMHM  A8о   M   A9   LcehEyLe  He  ECJ     HUXHuLe  Hge  "J     DE`EyEHJe  Le  I     IL$I;w
HHHiU  HH+H\$0EHH\$ @  M]XMPEHAb  tANL
f  Hd  L$ HD%K  Lz  
MLz  Hd  dI  HM H3xK  H]0Hu8H}@HeA]A\]H\$WH0IHMtqA8оuhHtZA9uQD$hL$`HT$PD$PI@XA   b  tJKL
e  Hd  L$ HDnJ  H\$@H0_Lz  
MLPy  Hc  H  H\$@H0_@UH@Hl$0H] Hu(H}0Le8H  H3HEIIHE     M   A8о   M   A9   I@XM@LE 3j  t%OL
Je  HCc  L$ HDI     E HPH;w
HHH]S  HFXM@H+LE Ld$0Ij  uHU H  HHtLDM E3HHLd$ A  H!Lx  
MLx  Hb  VG  3HMH3hI  H] Hu(H}0Le8He]@UAUAVH@Hl$0H]0Hu8H}@LeHH:  H3HEIMHE     M  A8о  M  A9w  HcuhyLHb  Ha  DF  s  HUXHuL<b  Ha  F  R  DE`EyEHa  L)b  dF  .  HNIH;wIHHQ  HH+Lt$0DHLt$ @  ID$XHM E3DHL$ MPIZ  t%L
i  OH,a  DL$ H}G     E HHH;wIHHMQ  ID$XH+HM Ll$0DHL$ MPMIZ  t	L
b  HU H  HHtLDM E3HHLl$ A  H!Lv  
MLu  Hv`  1E  3HMH3CG  H]0Hu8H}@LeHHeA^A]]@UHPHl$0H]0Hu8H}@H  H3HEIIHM   A8о   H   A9   3H}h HE HEE`E tUHHUhX  DDMIAI;w
HHO  LHUhH+E3HHD$0HEHD$ A@  HGXDEXMPHU   tAKL
wa  HP_  L$ HDE  LHu  
MLt  H%_  C  HMH3E  H]0Hu8H}@He ]@UATAUH@Hl$0H]0Hu8H}@HΜ  H3HE MMHM
  A8о   M   A9   HcuhyL^  H^  DDC     HUXHuL^  Hh^  #C     DE`Ex|D;wHNH;w
HHHN  HH+H\$0DHH\$ @  M]XMPDHA  t[AL$L
9`  H]  L$ HD;D  7EH]  LH^  B  Ls  
MLs  H]  bB  HM H3vD  H]0Hu8H}@HeA]A\]H\$WH0D$hIHD$hMthA8оu_HtQA9uHI@XL$`HT$hA     tJKL
l_  H]  L$ HDnC  H\$@H0_Ls  
MLPr  H\  A  H\$@H0_@UATAVH@Hl$0H]0Hu8H}@H  H3HE IMHM   A8о   M   A9   H}X uL\  H]\  A     HHUXX  DIFI;w
HHwL  HUXH+HH\$0EE3HH\$ @  M\$XMPEHA  t)=   tENL
J^  H[  L$ HD$B  #!Lq  
MLq  H[  _@  2HM H3qB  H]0Hu8H}@HeA^A\]@UAUAWH@Hl$0H]0Hu8H}@LeHH:  H3HEIMHM|  A8оo  M]  A9P  LcehEyLN[  HZ  E?  K  HUXHuLB[  HZ  ?  *  DE`EyEHZ  L/[  j?    IL$HI;wHHHJ  HH+HL$0EHM HL$ H@  H}p HsHHUpX  DIGI;wHHJ  HUpH+HH\$0EE3HH\$ @  M]XHU MPLED|$ A  t)=   tENL
b  HY  L$ HD$@  #!Lo  
MLo  HY  _>  2HMH3q@  H]0Hu8H}@LeHHeA_A]]@UHPHl$0H]0Hu8H}@HB  H3HEIIHM   A8о   H   A9   3H}h HE HEE`E tUHHUhX  DDMIAI;w
HHI  LHUhH+E3HHD$0HEHD$ A@  HGXDEXMPHU 
  tAKL
X  HX  L$ HD>  Lxn  
MLm  HUX  =  HMH3$?  H]0Hu8H}@He ]@UHPHl$0H]0Hu8H}@H  H3HEIIHM   A8о   H   A9   3H}h HE HEE`E tUHHUhX  DDMIAI;w
HHG  LHUhH+E3HHD$0HEHD$ A@  HGXDEXMPHU    tAKL
W  H@W  L$ HD=  L8m  
ML|l  HW  ;  HMH3=  H]0Hu8H}@He ]@UAUAVH@Hl$0H]0Hu8H}@LeHH  H3HEIMHE     M  A8о  M{  A9n  HcuhyLV  HqV  D);  j  HUXHuLV  HMV  ;  I  DE`EyEH0V  LV  :  %  HNIH;wIHHMF  HH+Lt$0DHLt$ @  ID$XHM E3DHL$ MPI  t%OL
SV  HU  L$ HD;     E HHH;wIHHE  ID$XH+HM Ll$0DHL$ MPMI  uHU H  HHtLDM E3HHLl$ A  H!L"k  
MLfj  HT  9  3HMH3;  H]0Hu8H}@LeHHeA^A]]@UAUAVH@Hl$0H]0Hu8H}@LeHH  H3HEIMHE     M  A8о  M{  A9n  HcuhyLT  HQT  D	9  j  HUXHuLT  H-T  8  I  DE`EyEHT  LT  8  %  HNIH;wIHH-D  HH+Lt$0DHLt$ @  ID$XHM E3DHL$ MPI   t%OL
[T  HS  L$ HD9     E HHH;wIHHC  ID$XH+HM Ll$0DHL$ MPMI   uHU H  HHtLDM E3HHLl$ A  H!Li  
MLFh  HR  7  3HMH39  H]0Hu8H}@LeHHeA^A]]@UAUAVHPHl$0H]@HuHH}PLeXHz  H3HEIMHM  A8о  M  A9  LcuxEyLR  H7R  E6    H}h uLR  HR  6    EpyL}R  HQ  D6  f  H    uLR  HQ  6  D  HH   X  D   E E   D;   A+HHHE H;wHHHA  H+INHD$0HEI;wHHHA  HDEpHUhH+EH\$0HH\$ @  M]XLmM`HE MEHHD$ A  t"NL
Q  HP  L$ HDC7  ^HDM H   EHLl$   E <LQ  HP  EHd5  Lf  
MLe  HP  C5  3HMH3U7  H]@HuHH}PLeXHe A^A]]@UAUAVHPHl$0H]@HuHH}PLeXH  H3HEIMHM  A8о  M  A9  LcuxEyL.P  HO  E4    H}h uL$P  HO  p4    EpyLP  HO  DN4  f  H    uLhP  HqO  ,4  D  HH   X  D   E E   D;   A+HHHE H;wHHHc?  H+INHD$0HEI;wHHH??  HDEpHUhH+EH\$0HH\$ @  M]XLmM`HE MEHHD$ A   t"NL
aO  HN  L$ HD4  ^HDM H   EHLl$   E <L^O  HON  EH3  LKd  
MLc  H(N  2  3HMH34  H]@HuHH}PLeXHe A^A]]@UATAUH@Hl$0H]0Hu8H}@H  H3HE3IMHى} M   A8о   M   A9   I@XMPLE 3"  t%NL
N  HeM  L$ HD3     E HPH;w
HHH=  ID$XMPH+LE Ll$0I"  uU t0HH  HHtLDM E3HHLl$ A  H!Lb  
MLb  HL  s1  3HMH33  H]0Hu8H}@HeA]A\]@UATAUH@Hl$0H]0Hu8H}@HN  H3HE3IMHى} M   A8о   M   A9   I@XMPLE 3  t%NL
LM  HK  L$ HDF2     E HPH;w
HHH<  ID$XMPH+LE Ll$0I  uU t0HH  HHtLDM E3HHLl$ A  H!Lka  
ML`  HHK  0  3HMH32  H]0Hu8H}@HeA]A\]@UAUAVH@Hl$0H]0Hu8H}@LeHHڈ  H3HEIMHE     M  A8о  M{  A9n  HcuhyLJ  HJ  DI/  j  HUXHuLJ  HmJ  (/  I  DE`EyEHPJ  LJ  /  %  HNIH;wIHHm:  HH+Lt$0DHLt$ @  ID$XHM E3DHL$ MPI  t%OL
KK  HI  L$ HD0     E HHH;wIHH9  ID$XH+HM Ll$0DHL$ MPMI  uHU H  HHtLDM E3HHLl$ A  H!LB_  
ML^  HI  -  3HMH3/  H]0Hu8H}@LeHHeA^A]]@UAUAVH@Hl$0H]0Hu8H}@LeHH  H3HEIMHE     M  A8о  M{  A9n  HcuhyLH  HqH  D)-  j  HUXHuLH  HMH  -  I  DE`EyEH0H  LH  ,  %  HNIH;wIHHM8  HH+Lt$0DHLt$ @  ID$XHM E3DHL$ MPI   t%OL
KI  HG  L$ HD-     E HHH;wIHH7  ID$XH+HM Ll$0DHL$ MPMI   uHU H  HHtLDM E3HHLl$ A  H!L"]  
MLf\  HF  +  3HMH3-  H]0Hu8H}@LeHHeA^A]]@UATAUAVAWHpHl$0H]pHuxH   H  H3HE0MHM&  A8о  M  A9  HHH  P0HH   HL
I  LI  HH  HE(H  HL
H  LH  HH  HEH  L   HHIX  HDHHAH;wHH6  H+3Ht$0Hu E   H     HDIHh  LH-  LLE(HHA  LEIԉFLHA  LHHLAX  DDNIAI;w
HHq5  H+E3HD$0IHHLHD$ A@  HA;OHu L      E    EHE    MtHUH{IFXHM HUHL$    EL  tL
]M  HD  DH*  $E !L}Z  
MLY  HZD  )  3HM0H3'+  H]pHuxH   He@A_A^A]A\]@UATAUAVAWH   Hl$@H   H   H   Hށ  H3HEPIHHE8M  A8о  Mw  A9j  HH?F  P0HHp  HL
NF  LOF  HH  LHE0HC  HL
1F  L2F  HH  HEH  L   HHIX  HDHHAH;wHHS3  H+3HD$@HE(E   Hp     HDIHh  LH  LMHHA  LEIԉFLHA  LHHLAX  DDNIAI;w
HH2  H+E3HD$@IHHLHD$ A@  HA;PHL   HHIX  DHHAH;wHHB2  H+3Ht$@Hu E   H    HDIHh  LH  LLE0HHA  LEIԉFLHA  LHHLAX  DDNIAI;w
HH1  H+E3HD$@IHHLHD$ A@  HA;OHu L      E    EHE    MtHUHHE8LE(HM H@XHL$8HMHL$0   HUEDl$(Ht$   H˅tL
C  H@  D&  iH     HHtSEHM@A   HE@E HL$ HEHHE3HH  H!LPV  
LLU  H-@  $  3HMPH3&  H   H   H   He`A_A^A]A\]@UATAUHPHl$0H]@HuHH}PH}  H3HE3IMHى} M4  A8о'  M  A9  LEpEh}EH}Mt	HU.ID$XD   DExHM HUHL$(M`H|$   t%NL
H  H.?  L$ HD%     E HHH;w
HHHH/  ID$XD   DExH+HM HL$(M`Ll$0HULl$   uU t0HH  HHtLDM E3HHLl$ A  H!LT  
MLS  Hk>  &#  3HMH38%  H]@HuHH}PHe A]A\]@UATAUAVAWH   Hl$@H]pHuxH   H|  H3HE0MHM  A8о  Mm  A9`  HHi@  P0HHf  HL
x@  Ly@  HH  HE(H<  HL
^@  L_@  HH  HEH  L   HHIX  HDHHAH;wHH-  H+3HD$@HE E   HpD  HDIHh  LH  LLE(HHA  LEIԉFLHA  LHHLAX  DDNIAI;w
HH,  H+E3HD$@IHHLHD$ A@  HA;OL      E    EHE    MtHUHL   HHIX  HFH;w
HHK,  H+HH\$@DE3IHH\$ @  M_XD      HE HUHD$8HE Dl$0HD$(Lˉt$ A  tL
D  H;  DH!  $E !LQ  
MLP  Ha;     3HM0H3."  H]pHuxH   He@A_A^A]A\]@UATAUAVAWHpHl$0H]pHuxH   Hx  H3HE0MHM/  A8о"  M  A9  HH\=  P0HH	  HL
k=  Ll=  HH  HE(H  HL
Q=  LR=  HH  HEH  L   HHIX  HDHHAH;wHHs*  H+3Ht$0Hu E   H     HDIHh  LH6  LLE(HHA  LEIԉFLHA  LHHLAX  DDNIAI;w
HH)  H+E3HD$0IHHLHD$ A@  HA;OHu L      E    EHE    MtHUHIFXD   HM HL$(   HULDl$   tL
B  H8  DH2  $E !LN  
MLN  H8  l  3HM0H3~  H]pHuxH   He@A_A^A]A\]H(IMMtA8оuDIH(  LM  HK8    3H(@SH IMtNA8оuEHt(A9u3A  H(  HH [H%D7  LM  H7  H [  MH7  L#M  H [y  @UVWATAUAVAWH`Hl$0H]xHu  H3HE L   L   E3EIIHM  A8о  M   A9   MtMHIX  DIEI;w
HH`'  H+HLt$0EE3IHLt$ @  H        IHHE HEHEHEHX  Dȃ ~L?  H@  Hg  wHHM E3HL$ HI@  L_XNLM EIASJtCHOL
?  H_6  HL$ HD  LVL  
MLK  H36    HM H3  H]xHe0A_A^A]A\_^]@UATAUH@Hl$0H]0Hu8H}@Hs  H3HE3IL] M  A8о   I@XLE 33P"t'HNL
H?  H5  HL$ ID     E IHHHH;wIHH%  HFXH+H|$0LE 3HP"uU HHHH;wIHHf%  H+Ht$0t H    HHU H;rI$I  M$DM HE3IHHt$ A  HMH4  LJ  b  3HMH3t  H]0Hu8H}@HeA]A\]@SH HMtLA8оuCI@XHT$@3E3  t!L
>  H34  DH  3H [ËD$@H [MH4  LeI    3H [H(Mt=A8оu4MtA9uAAhH(LI  H3  q  2H(MH3  LH  T  2H(H(Mt?A8оu6MtA9uAAhH(L[I  HD3    2H(MH.3  LH    2H(H(Mt@A8оu7MtA9uAAhH(LH  H2    2H(MH2  LH  q  2H(Hl$VH0IHM   A8о   MtrA9uiH\$@H|$H    A|G u
HHH  LU HNHHL$ DE3HHHA  H|$HHH\$@Hl$PH0^LH  
MLPG  H1    Hl$P3H0^Hl$VH0IHM   A8о   MtrA9uiH\$@H|$H@   A| u
HHH  LU HNHL$ DE3HHHA  H|$HHH\$@Hl$PH0^L<G  
MLF  H1    Hl$P3H0^H(MtKA8оuBMt4A9u+AAmfnAAlfnYrG  XH(LF  
MLF  H0  V  fWH(H(MtKA8оuBMt4A9u+AAofnAAnfnYF  XH(L>F  
MLE  H0    fWH(@UH@Hl$0H] Hu(H}0Le8Hm  H3HEIIHE     M   A8о   H   A9   I@XAILE 3P:t"KL
t9  Hu/  L$ HD  |E HHHH;w
HHH  HGXH+KLd$0LE IP:uE MLHHΉD$ i  !LE  
MLTD  H.    3HMH3  H] Hu(H}0Le8He]Hl$WH0IHM   A8о   M   A9   AAhH\$@Ht$Hu!AAHh.  L
8  A   D$       ƀ|o u
HHHE H  LU HOpHL$ DE3HHHA  Ht$HHH\$@Hl$PH0_LC  
ML=C  H-    Hl$P3H0_Hl$WH0IHM   A8о   M   A9   AAhH\$@Ht$Hu!AAHh-  L
7  A   D$       ƀ    u
HHHE H  LU H   HL$ DE3HHHA  Ht$HHH\$@Hl$PH0_LB  
ML7B  H,    Hl$P3H0_Hl$WH0IHM   A8о   M   A9   AAhH\$@Ht$Hu!AAHX,  L
y6  A   D$      ƀ    u
HHHE H  LU H   HL$ DE3HHHA  Ht$HHH\$@Hl$PH0_LA  
ML'A  H+  {  Hl$P3H0_Hl$WH0IHM   A8о   M   A9   AAhH\$@Ht$Hu!AAHH+  L
i5  A   D$      ƀ    u
HHHE H  LU H   HL$ DE3HHHA  Ht$HHH\$@Hl$PH0_L@  
ML@  H*  k  Hl$P3H0_H\$WH0IHM   A8о   HtxA9uoAAhu!AAHJ*  L
k4  A   D$   D   Aw	D;   vCLY4  H
*  HωD$      H\$@H0_L?  
ML:?  H)    H\$@3H0_H\$WH0IHM   A8о   HtxA9uoAAhu!AAHz)  L
3  A   D$   D   Aw	D9   vCL3  H:)  HωD$ 
     H\$@H0_L&?  
MLj>  H)  
  H\$@3H0_@SH0IMtZA8оuQHtCA9u:AAhu!AAH(  L
2  A   D$      H0[L>  
ML=  Hw(  2
  2H0[̅t   0  H;  H2  Á   "    Ɂ      HvHc    HH2  H2  H2  H2  H2  H2  H	3  H3  H)3  H13  HA3  HQ3  Hi3  H3  H3  H3  H3  H3  H3  H3  H4  H4  H)4  HA4  HQ4  Ha4  Hy4  H4  H4  H4  H4  H4  H4  H4  H4  H	5  H!5  H15  HI5  HY5  Ha5  Hq5  Hy5  H5  H5  H5  H5  H5  H5  H5  H6  H16  HA6  HQ6  Ha6  Hy6  H6  H6  H6  H6  H6  H7  Á               HsHc@    HH6  H6  H7  H7  H?7  HO7  H_7  Hw7  H7  H7  H7  H7  H7  H8  H8  H'8  H?8  HO8  Hg8  H8  H8  H8  H8  f       (  0  8  @  H  P  X  `  h  p  x                    Ȋ  Њ  ؊                      (  0  8  @  H  P  X  `  h  p  x                    ȋ  Ћ  ؋           ======	
============
======================================================= =====!"================#=============$%==============&'()*===========+,=-./012=======34==============56==============789=============:;<fB  J  R  Z  b  j  r  z                    ʌ  Ҍ  ڌ       	

H\$Ht$WH@IHHHD$h       HD$0    DHD$h3ҹ   A   D$(    HD$   L\$hL\$(L5  H!  LHH\$ `  HL$h  H\$PHt$XH@_@SH HHu	AH [ù(   H|$0   HHuGH|$0H [H2  H;H|$03H [@SH HHu	AH [3  HR   3H [H(HuAH(  3H(H(HuAH(  3H(H\$Ht$ WH0Hh   H  HHHu%LV4  Hw   2  3H\$PHt$XH0_ оHl$@Ld$HE3HN4  L`L``HP0H   LL
A4  LF4  HHA  H   LLHHA  HH   LHHAX  HcL-Hc  HLHCHuL3  H  g  FHDE3HL\$ H  HCfD$hHK{  HC`HuVLCH3  H?HKHt  HK`Ht1  H  3Hl$@Ld$HH\$PHt$XH0_H3  H,  Hu
LCH3  HKXЅt'L
3  HKH  DHL$ H.  jHCXH
\  Pt	L
3  HCXHKPt	L
3  HXH\$Hl$Ht$WH0H  AH  HHuL3  HB  H  3w3A  H  {HEXHSP*t	L
3  Cht;HEXHSpP2t*L
3  H  DHΉ|$ /  H  3HH\$@Hl$HHt$PH0_@SVATAUAWH   Hy[  H3HD$`HD$   LH3  ILL$@LD$HHP0LH   HL
3  L3  IHLt$x  LH   HE3MAHH$   `  HH   H$   3Et|    HL$HIGXILD$PPBD   D$XLDD$0D$TMƉD$(D$PIHˉD$ A   HtxLLDHHAp  HA;rHH$   H$   Lt$xHL$`H3&  HĐ   A_A]A\^[HL$@L
2  HˉT$ H  t  3@UATAUH0Hl$ H]0Hu8H}@HY  H3HE HHcMHBMHH;w
HH  LMPH+Ht$ MH  }1;|'HIH    P0HtLLHHAQpHM H3:  H]0Hu8H}@HeA]A\]LD$LL$ SVWH@HHD$0   3fffffff     HD$xMHL$0LHHD$ Ht$89t$0tLD$pуH@_^[@UATAUH@Hl$0H]0Hu8H}@HX  H3HE HHcEHBIHH;w
HH
  LMXLEPH+Ld$0I  }   ;|	   HHH    P0HHthLL
0  L{0  HHA  HHtBLIHA8  Ht-LELHHHD$ A   Ht
LHHAPhHM H3   H]0Hu8H}@HeA]A\]LL$ SUVWHHAHHD$0   3H$   HL$0LHD$(LL$ DHHl$89l$0t
L$   ƃHH_^][ff     H;
	W  uHfuH9  @SH      HH  H\  H\  HuC#H#   H
K    H
3    3H [HHXHhHxL` AUAVAWH 3ML8  V  #  DV  eH%0   HXH;t    3H\  uA    \  t       H
[    LH   H
[    MLHHI;rZH9} t  H9E tHM p  H  HE H
[  T  H
[  HD  L;uL;tLLI  {  HT[  HU[  =7[  E   H=/[     3      eH%0   HXH;t    3HZ  u   Z  t     >Hx  H
a  Z     b  uH?  H
0  E  Z     u
HHZ  H9=Z  t!H
Z    tMĺ   IqZ  T     H\$@Hl$HH|$PLd$XH A_A^A]HHXHpHxATH0IL   XT  u9_T  u
3ۉX   tu7H  HtЋ؉D$    LƋI0؉D$    LƋIe  ؉D$ u5u1L3II  L3ILE  MtL3IAӅtu7LƋI#ˋىL$ tH
  HtLƋIЋ؉D$ 3ۉ\$ #S  H\$@Ht$HH|$PH0A\H\$Ht$WH IHu  LǋHH\$0Ht$8H _HL$H   H
S    HT  HD$XE3HT$`HL$X=  HD$PH|$P tAHD$8    HD$HHD$0HD$@HD$(H`S  HD$ LL$PLD$XHT$`3  "H$   H,T  H$   HHS  HT  HR  H$   HS  ZR  	 TR     HQ  HD$hHQ  HD$pR  R     J  3B  H
{  =  =R   u
   "  ,  	 H&  HĈ   H
EW    @SH HH
XW    HD$8HuH&  ~     H
*W    HD$8H
W    HD$@H  HLD$@HT$8  HHL$8  HV  HL$@  HV     ]  HH [H(GHH(H\$WH H)  H=)  HHtHH;rH\$0H _H\$WH H)  H=)  HHtHH;rH\$0H _HMZ  f9t3HcH<H39PE  u  f9QLcA<E3LLA@EXJL EtQL;r
AL;rAH(E;r3HH(LL
_Ijt"M+IIHt@$Ѓ3H(%  %z  %d  %V  %H  H(uH=   u     H(H\$WH HO  Hd$0 H2-+  H;tHHN  vHL$0  H\$0$  DI3   DI3  HL$8DI3  L\$8L3H  L#H3-+  L;LDL~N  IL|N  H\$@H _%  %\  %N  %0  %2  %  %  @SH EHLAA LtA@McPLHcL#IcJHCHHKAtAHLL3IH [H(MA8HI   H(ff     HL$L\$M3LT$L+MBeL%   M;sfA M A M;uL$L\$H%  @UH HHHM(HM$H ]@UH H
M  H ]@UH H   H ]@UH HH3Ɂ8  H ]                                                                                                                                                                                          2      B      T      l      |                        8      "                                                h      L      8      $      N                                                                    n      `      P      B      6      (                                                h                                                      jR       ^     Ȱ              p        C_EncryptInit failed for slot %d.       org/opensc/pkcs11/wrap/PKCS11Exception  C_DecryptInit failed for slot %d.       Invalid data length %d. NULL input data.        Invalid input offset %d.        C_DecryptUpdate failed for slot %d.     C_EncryptUpdate failed for slot %d.     NULL output data.       Invalid output offset %d.       C_DecryptFinal failed for slot %d.      C_EncryptFinal failed for slot %d.      C_Decrypt failed for slot %d.   C_Encrypt failed for slot %d.   C_SignInit failed for slot %d.  C_SignUpdate failed for slot %d.        C_SignFinal failed for slot %d. C_VerifyInit failed for slot %d.        C_VerifyUpdate failed for slot %d.      C_VerifyFinal failed for slot %d.       org/opensc/pkcs11/wrap/PKCS11Attribute  ()I     getKind ()[B    getData C_GenerateKeyPair failed.       Out of memory during object enumeration for slot number %d.     C_FindObjectsInit failed for slot number %d.    C_FindObjects failed for slot number %d.        C_FindObjectsFinal failed for slot number %d.   C_GetAttributeValue failed for attribute %u.    C_GetAttributeValue returned ulValueLen -1 for attribute %u but returned CKR_OK. The underlying PKCS#11 module seems to be broken.              C_GetAttributeValue failed for attribute CKA_ALLOWED_MECHANISMS.                C_GetAttributeValue returned ulValueLen -1 for attribute CKA_ALLOWED_MECHANISMS but returned CKR_OK. The underlying PKCS#11 module seems to be broken.          C_GetAttributeValue returned ulValueLen==%lu, which is not equal to sizeof(CK_ULONG) for attribute %u of type CK_ULONG but returned CKR_OK. The underlying PKCS#11 module seems to be broken.   C_GetAttributeValue returned ulValueLen==%lu, which is not equal to sizeof(CK_BBOOL) for attribute %u of type CK_BBOOL but returned CKR_OK. The underlying PKCS#11 module seems to be broken.   C_CreateObject failed.  C_DestroyObject failed. [B      C_OpenSession for PKCS11 slot %d failed.                pkcs11_slot_close_session: C_CloseSession for PKCS11 slot %d(%S) failed.        C_Login for PKCS11 slot %d failed.              PKCS11Session.logoutNative: C_Logout for PKCS11 slot %d(%S) failed (%s).        C_InitPIN for PKCS11 slot %d failed.    C_SetPIN for PKCS11 slot %d failed.     C_Sign failed for slot %d.      C_Verify failed for slot %d.    C_GenerateKey failed.   C_WrapKey failed for slot %d.   C_UnwrapKey failed.     C_DeriveKey failed.     Length of label exceeds 32 bytes        java/lang/IllegalArgumentException      C_InitToken failed for module %S.       C_GetSlotList failed for module %S.     C_WaitForSlotEvent failed.      C_GetMechanismList for PKCS11 slot %d failed.   No token present in slot %d.    Invalid value %u for ulMinPinLen of token in slot %d.   Invalid value %u for ulMaxPinLen of token in slot %d.   CKR_OK  CKR_CANCEL      CKR_HOST_MEMORY CKR_SLOT_ID_INVALID     CKR_GENERAL_ERROR       CKR_FUNCTION_FAILED     CKR_ARGUMENTS_BAD       CKR_NO_EVENT    CKR_NEED_TO_CREATE_THREADS      CKR_CANT_LOCK   CKR_ATTRIBUTE_READ_ONLY CKR_ATTRIBUTE_SENSITIVE CKR_ATTRIBUTE_TYPE_INVALID      CKR_ATTRIBUTE_VALUE_INVALID     CKR_DATA_INVALID        CKR_DATA_LEN_RANGE      CKR_DEVICE_ERROR        CKR_DEVICE_MEMORY       CKR_DEVICE_REMOVED      CKR_ENCRYPTED_DATA_INVALID      CKR_ENCRYPTED_DATA_LEN_RANGE    CKR_FUNCTION_CANCELED   CKR_FUNCTION_NOT_PARALLEL       CKR_FUNCTION_NOT_SUPPORTED      CKR_KEY_HANDLE_INVALID  CKR_KEY_SIZE_RANGE      CKR_KEY_TYPE_INCONSISTENT       CKR_KEY_NOT_NEEDED      CKR_KEY_CHANGED CKR_KEY_NEEDED  CKR_KEY_INDIGESTIBLE    CKR_KEY_FUNCTION_NOT_PERMITTED  CKR_KEY_NOT_WRAPPABLE   CKR_KEY_UNEXTRACTABLE   CKR_MECHANISM_INVALID   CKR_MECHANISM_PARAM_INVALID     CKR_OBJECT_HANDLE_INVALID       CKR_OPERATION_ACTIVE    CKR_OPERATION_NOT_INITIALIZED   CKR_PIN_INCORRECT       CKR_PIN_INVALID CKR_PIN_LEN_RANGE       CKR_PIN_EXPIRED CKR_PIN_LOCKED  CKR_SESSION_CLOSED      CKR_SESSION_COUNT       CKR_SESSION_HANDLE_INVALID      CKR_SESSION_PARALLEL_NOT_SUPPORTED      CKR_SESSION_READ_ONLY   CKR_SESSION_EXISTS      CKR_SESSION_READ_ONLY_EXISTS    CKR_SESSION_READ_WRITE_SO_EXISTS        CKR_SIGNATURE_INVALID   CKR_SIGNATURE_LEN_RANGE CKR_TEMPLATE_INCOMPLETE CKR_TEMPLATE_INCONSISTENT       CKR_TOKEN_NOT_PRESENT   CKR_TOKEN_NOT_RECOGNIZED        CKR_TOKEN_WRITE_PROTECTED       CKR_UNWRAPPING_KEY_HANDLE_INVALID       CKR_UNWRAPPING_KEY_SIZE_RANGE   CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT    CKR_USER_ALREADY_LOGGED_IN      CKR_USER_NOT_LOGGED_IN  CKR_USER_PIN_NOT_INITIALIZED    CKR_USER_TYPE_INVALID   CKR_USER_ANOTHER_ALREADY_LOGGED_IN      CKR_USER_TOO_MANY_TYPES CKR_WRAPPED_KEY_INVALID CKR_WRAPPED_KEY_LEN_RANGE       CKR_WRAPPING_KEY_HANDLE_INVALID CKR_WRAPPING_KEY_SIZE_RANGE     CKR_WRAPPING_KEY_TYPE_INCONSISTENT      CKR_RANDOM_SEED_NOT_SUPPORTED   CKR_RANDOM_NO_RNG       CKR_DOMAIN_PARAMS_INVALID       CKR_BUFFER_TOO_SMALL    CKR_SAVED_STATE_INVALID CKR_INFORMATION_SENSITIVE       CKR_STATE_UNSAVEABLE    CKR_CRYPTOKI_NOT_INITIALIZED    CKR_CRYPTOKI_ALREADY_INITIALIZED        CKR_MUTEX_BAD   CKR_MUTEX_NOT_LOCKED    CKR_FUNCTION_REJECTED   CKR_VENDOR_DEFINED      Unknown PKCS#11 error   %s %S: %S       Out of memory allocating PKCS11 context.        java/lang/String    ()[C        toCharArray     Out of memory allocating PKCS11 module name.    Cannot open PKCS11 module       C_GetFunctionList       Cannot find function C_GetFunctionList in PKCS11 module C_GetFunctionList in PKCS11 module %S failed.   C_Initialize in PKCS11 module %S failed.        C_GetInfo in PKCS11 module %S failed.   Invalid PKCS 11 module handle %p.       Out of memory allocating PKCS11 slot.   C_GetSlotInfo for PKCS11 slot %d failed.        C_GetTokenInfo for PKCS11 slot %d failed.       Invalid PKCS11 slot handle %p.  org/opensc/pkcs11/wrap/PKCS11Mechanism  (IIII)V <init>  C_GetMechanismInfo failed for mechanism %u.     (ILjava/lang/String;)V  {Gz?RSDSTg')!B<*J   C:\projects\pkcs11\jni\build\msvc10\x64\Release\opensc-pkcs11-x64.pdb                                        t
 T	 4 2 2P t
 d	 4 R       ݜ    ݜ             d 4 2p   20     מ  =  
      	 B       g    0    
 
4 
2p)%t d 4
 #
RP  (      !   t       ! t       %	5t d 4
 3rP  (  0   
 
	p`P0   r
p`0!     t  T p  ڔ     !   p  ڔ     !   ڔ       !          ! t        ! T ڔ       !  p  ڔ       	`0  (  `    d
 T	 4 Rp d 4
 rp R0!   p      !
 
d	 4 p      !   `      !
 
d	 4 `      
 
T
 
Rp!   P      !
 
d	 4 P      !   P      !
 
d	 4 P      !   @  t  <  !
 
t	 4 @  t  <  
 
T
 
R`!   p    <  !
 
t	 4 p    <  )5t d
 4 3
rP  (  8   '54 3
p`P  (  P   3
E%t d 4 C
P  (  p   )5t d 4 3
P  (  H   0
5"t d 4 3
P  (  `   -
5 t d 4 3
P  (  @   -
5 t d
 4 3
rP  (  8   )5t d
 4 3
rP  (  0   )5
 t d 4
 3rP  (  8   )5t d
 4 3
rP  (  0   -
5t d 4 3r
P  (  8   !   @G  G  4  ! 4 @G  G  4  
 
d	 
Rp)5t d
 4 3
rP  (  0   
 
4 
2p
 
4 
Rp-
5t d 4 3
P  (  P   !   ?  ?    !   t
 ?  ?    ! t
 ?  ?     r0!   p>  >    !   t
 p>  >    ! t
 p>  >    %	5t d
 4 3P  (  @   054' 3 
p`P(     9E+t $d 4 C 
P(     
 
4
 
rp-
5 t d
 4 3
rP  (  8   -
5t d 4 3
P  (  @    20!   	  T `      !
 
	 T `       d 4
 Rp B                        `                                                  2      B      T      l      |                        8      "                                                h      L      8      $      N                                                                    n      `      P      B      6      (                                                h              hFreeLibrary InitializeCriticalSection ALoadLibraryW  dFormatMessageW  ;LeaveCriticalSection  GetLastError  LGetProcAddress   EnterCriticalSection   DeleteCriticalSection JLocalFree KERNEL32.dll  cfree  malloc  realloc T__iob_func  [fprintf _vsnprintf  MSVCR100.dll  _malloc_crt _initterm _initterm_e _encoded_null _amsg_exit  __C_specific_handler  __CppXcptFilter F__crt_debugger_hook @__clean_type_info_names_internal  [_unlock H__dllonexit _lock _onexit  EncodePointer  DecodePointer Sleep TerminateProcess  GetCurrentProcess UnhandledExceptionFilter  SetUnhandledExceptionFilter IsDebuggerPresent &RtlVirtualUnwind  RtlLookupFunctionEntry  RtlCaptureContext  DisableThreadLibraryCalls QueryPerformanceCounter GetTickCount  GetCurrentThreadId  GetCurrentProcessId GetSystemTimeAsFileTime memset                    jR         S   S       @       p&  *  (  P-  p  P!  `  #  P      p  @    /  2  @N  0  M  S  T  @U  2  @  @C  6  <  ;  ?  p>  pE   d  X   g   [  `_  v  e  Y   i  @]  a  @k  m  G   F  @G  D   I  @N  J  O  M  L  s  @U  Q  V  T  S   r  y  |  @      p    P  P  P    `  p     y  `z     ~   ~  }    9  r      &  d      '  j      #  e      #  b        [      !  ]        T        K        >  x      )  g      $  \        5  o        W        ?        .  j      &  c        Z        ]        G              	 
   
                     ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R opensc-pkcs11-x64.dll Java_org_opensc_pkcs11_PKCS11Provider_loadNativePKCS11Module Java_org_opensc_pkcs11_PKCS11Provider_unloadPKCS11Module Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initSignNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initVerifyNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_signNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative1 Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative1 Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_verifyNative Java_org_opensc_pkcs11_wrap_PKCS11KeyPairGenerator_generateKeyPairNative Java_org_opensc_pkcs11_wrap_PKCS11Object_createObjectNative Java_org_opensc_pkcs11_wrap_PKCS11Object_deleteObjectNative Java_org_opensc_pkcs11_wrap_PKCS11Object_enumObjectsNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getAllowedMechanismsNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getAttributeNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getBooleanAttributeNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getULongAttributeNative Java_org_opensc_pkcs11_wrap_PKCS11Session_closeNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateOffNative Java_org_opensc_pkcs11_wrap_PKCS11Session_deriveKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateOffNative Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyPairNative Java_org_opensc_pkcs11_wrap_PKCS11Session_initPINNative Java_org_opensc_pkcs11_wrap_PKCS11Session_loginNative Java_org_opensc_pkcs11_wrap_PKCS11Session_logoutNative Java_org_opensc_pkcs11_wrap_PKCS11Session_openNative Java_org_opensc_pkcs11_wrap_PKCS11Session_setPINNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateByteNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_unwrapKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateByteNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_wrapKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_destroySlotNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_enumerateSlotsNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getDescriptionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getFirmwareVersionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getHardwareVersionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getManufacturerNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getMechanismsNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenLabelNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenManufacturerNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMaxPinLenNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMinPinLenNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenModelNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenSerialNumberNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_hasTokenProtectedAuthPathNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_initSlotNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_initTokenNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isHardwareDeviceNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isRemovableDeviceNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isTokenPresentNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_waitForSlotNative                                                                                                                                                                                                                                                                                                                                     2-+  ] f             @                           u                                                                                                                                                                                                                                                                                                                                                                                                                                                      D    P        8    @  h    p        a    p  V    `  F!    P!  #    #  a&    p&  (    (  *    *  A-    P-  /    /  0    0  2    2  2    2  6  `  6  ;  <  ;  <    <  i>    p>  >    >  ?    ?  T?    T?  c?    c?  ?    ?  ?    ?  G@    G@  @    @  @    @  @    @  7C  |  @C  C    C  D  \  D  lE  p  pE  E  d   F  6G  @  @G  G  4  G  G     G  G    G   I  @   I  J    J  L    L  M    M  7N  p  @N  O    O  Q    Q  S    S  T    T  7U  p  @U  V  |  V  X  T  X  Y    Y  [     [  >]    @]  ^_    `_  a  ,  a  d  ,   d  e  p  e  f  p   g  i     i  >k    @k  m    m  r  `   r  s    s  v    v  y    y  y  ,  y  Wz    `z  |    |  }  p  }  ~     ~  ~  ,  ~  ~  ,     f  ,  p    <    
  X  
  9  H  @  t  <  t  ݀  $  ݀  	        ,      ,    L    P                L    P        &    &  R    `        6    6  b    p        F  x  F  r  h    O  p  P    p       `      P          ͐  H  ͐    4           >  ,  @  ^  ,  `                    f  <  p  ڔ     ڔ                                  ڕ    ڕ          ̖    Ж  :    @  n    p  ֘  |      H    n    p  ɛ  L  ̛    p    E    H        P    P  g  ,  h    d    ؟  d  `          ,        ġ  '    (  E  ,  `    8      h    
  h  
  %  h  0  R  h                                                                                                                                                                                                                                                                                                                                                                                  0                	  H   X Z        <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>PAPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPAD      ء         (0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ELF              #  4   x     4    (                  P  P               `  h                                    $   $         Ptd`  `  `  d  d        Qtd                          Rtd                         GNU hQ,T/h5C         	   (	 
  H@  ! @,P`:ggĂA @
VIsp                        $                           &       '       *   ,   -   .   /   0   1   3   4   8   :   <   =   >   ?   A       C   E   F       H   J   M   N   P   R   U   W   Z           [       \       ]   ^   _   c   e           f   h       j   l   m   U~^0ٶWe繧/7ceuO(kU\$l0hR%թn!Da [ݩR31O_ƶy'2LeٺCz]9]F<dF$MJ-!zcѾiF!lL#̨Qف;Xtm <w9ߙ1`e,=ѣr4P.+?Gp+< -.62M9 ɹ[
p=6V0R.CE	F}퍸1pokH驤|HV7_έH`#Cd@eD*qX/U                             :             b                                       

             x                          O                        "   
                                                                                             %                                            @)                v   $  =       04         A  q    ^  @       v   6       	  `P  R      `*  p     P  @       9   `$  9     @         o  02         03         8  F    `  _  J      =  V      +       t	   O  V             
  @Z        @        6      (  `]  R       X          @  *      @+                 0/               <  @-         Pn        E  V    G  @G        ("       	 4  01         I  s    	  R  R    B  `         I       L  k  @    ,
   U      
  z  U      )  m     O  `       E  *  p       d  ?    K
  @y      I           p  	      b        @q  $        s       $  p        Й      
  [        0i      #  0?        }      
  pw         P%            	      7       U  '  y                    	  pK  $    {  :  >      @  q      Ћ         h          z      `C  u        	    |  -  I      00         p          	    
  P|  U    D  :          <        %              /  05       m
  W      8	  M  V    H          h        ,        __gmon_start__ _fini __cxa_finalize _Jv_RegisterClasses Java_org_opensc_pkcs11_PKCS11Provider_loadNativePKCS11Module Java_org_opensc_pkcs11_PKCS11Provider_unloadPKCS11Module Java_org_opensc_pkcs11_wrap_PKCS11Slot_initSlotNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_destroySlotNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_initTokenNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_enumerateSlotsNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_waitForSlotNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isTokenPresentNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isRemovableDeviceNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isHardwareDeviceNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getManufacturerNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getDescriptionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getHardwareVersionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getFirmwareVersionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getMechanismsNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenLabelNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenManufacturerNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenModelNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenSerialNumberNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMinPinLenNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMaxPinLenNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_hasTokenProtectedAuthPathNative mechanismFromJavaObject Java_org_opensc_pkcs11_wrap_PKCS11Session_openNative Java_org_opensc_pkcs11_wrap_PKCS11Session_closeNative stderr __fprintf_chk Java_org_opensc_pkcs11_wrap_PKCS11Session_loginNative Java_org_opensc_pkcs11_wrap_PKCS11Session_logoutNative Java_org_opensc_pkcs11_wrap_PKCS11Session_initPINNative Java_org_opensc_pkcs11_wrap_PKCS11Session_setPINNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateByteNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateByteNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateOffNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateOffNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyPairNative Java_org_opensc_pkcs11_wrap_PKCS11Session_wrapKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_unwrapKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_deriveKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Object_enumObjectsNative malloc realloc free Java_org_opensc_pkcs11_wrap_PKCS11Object_getAttributeNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getAllowedMechanismsNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getULongAttributeNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getBooleanAttributeNative Java_org_opensc_pkcs11_wrap_PKCS11Object_createObjectNative Java_org_opensc_pkcs11_wrap_PKCS11Object_deleteObjectNative Java_org_opensc_pkcs11_wrap_PKCS11KeyPairGenerator_generateKeyPairNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initSignNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative1 Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_signNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initVerifyNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative1 Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_verifyNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNativeOff pthread_mutex_unlock pthread_mutex_lock pthread_mutex_destroy pthread_mutex_init lt_dlinit lt_dlopen lt_dlsym lt_dlclose lt_dlexit lt_dlerror __vsnprintf_chk libltdl.so.7 libc.so.6 __stack_chk_fail _edata __bss_start _end GLIBC_2.3.4 GLIBC_2.1.3 GLIBC_2.4 GLIBC_2.0                                                                                                                                   ti	        si	   $     ii
   0     ii
   :      L    P    T    X    \        
   
                            	    
  $   (   , 
  0   4   8   <   @   D   H   S    [  t     Ϥ  [                       h       h      h      h      h        h(   $   h0   (   h8   p,   h@   `0   hH   P4   hP   @8   hX   0<   h`    @   hh   D   hp    H   hx   L   h   P   h   T   h   UVS   J  t    u]tX   $x    )9s     x   x   9rƃt   [^]US.     $tt$$Ѓ[]Ë$ÐVt$ D$(4$D$蘐  tt$ D$$^c  v 11^Í&    Vt$ D$(T$,4$D$T$@  tt$ D$$^鋓  v ^Ðt$D$(t$ T$,|$|$0D$4$T$  t1|$D$4$  tt$ |$t$D$$  t& 11ҋt$|$Ã,D$@T$Dt$$t$0|$(D$D$8T$T$<4$D$T$y  t;D$T$4$D$T$蛔  t|$4|$(t$0t$$D$8,۔  v t$$|$(,Í        UWVS|UMc   uEUU$MM 4$D$UUMe
   M1ɉT$ϑ  E  UM4$T$L$  E   E1E    tIM4$L$  MEU)ċ|$#|$T$D$    L$4$   UE    E    E    E    E    E    E    E    T$4$   cMċL$MD$D$    4$L$   UMċBTL$UM|$T$Q$P(u6Ee3   uVe[^_]fD$D$4$  fMQD$D$4$T$̷T$莞  G  &    UWVS)  L}e   E1UEE    }ԉ<$D$T$  E       @TUT$UD$    $    PU̅   E   )ċGTt$#T$t$$    P   M   1ҍ   )č|$#t1v D    ǃ9uUԋ$L$  UԉEЋ|$}ЋUD$    |$}ԉT$<$P  Ue3   Eu8e[^_]Ít& W}ԉD$D$T$T$<$  ǝ  &    <\$,D$Hä  T$Ll$8l$@t$01|$41D$T$,$肎  t*@TT$D$    T$$      u"t$1\$,t$0|$4l$8<Ít& ڸD$T$D$,$X      ,D$@T$Dt$$t$0|$(1D$D$8T$T$<4$D$T$׍  t"D$T$4$D$T$  txht$$|$(,Ív ,D$@T$Dt$$t$0|$(1D$D$8T$T$<4$D$T$g  t%D$T$4$D$T$苏  t	@h׉t$$|$(,Ã,D$@T$Dt$$t$0|$(1D$D$8T$T$<4$D$T$  t%D$T$4$D$T$  t	@h׉t$$|$(,UW1V0D$PT$Tt$@D$(D$HT$,T$L4$D$T$茌  toT$,D$(4$T$D$谎  tQ    v t|*G tT$$l$4$  T$$HǋT$l$D$    |$4$@  0^_]UW1V0D$PT$Tt$@D$(D$HT$,T$L4$D$T$܋  toT$,D$(4$T$D$   tQ@   v t|* tT$$l$4$  T$$ǋT$l$D$    |$4$@  0^_]Ã<\$,D$HD  T$Ll$8l$@t$0t$P|$4|$TD$T$,$  tJt$|$,$J  t6PlfT$@mD$fD$D$܋\$,t$0|$4l$8<荶        <\$,D$Hä  T$Ll$8l$@t$0t$P|$4|$TD$T$,$~  tJt$|$,$誌  t6PnfT$@oD$fD$D$܋\$,t$0|$4l$8<荶        UWVS\UEc   E    UԋUEȋEUe   U1ҋUD$T$Uԉ$Ή  E       ŰEȉT$UԉD$$  tzMFTL$D$    WMĉ$P MąuqE   )ċFTT$#T$L$OUĉ$P Uąu=ET$Uԉ|$t$D$$W  EЋUe3   Eu9e[^_]Ðt& WD$D$T$<T$Uԉ$  ח  &    UW1VS<D$`T$dî  t$PD$(D$XT$,T$\4$D$T$萈  tsT$,D$(4$T$D$贊  tU@ht`    t|*o tT$$l$4$  T$$pǋT$l$D$    |$4$@  <[^_]Í&    @T$$D$   4$D$D$D$  T$$hUW1VS<D$`T$dî  t$PD$(D$XT$,T$\4$D$T$萇  tyT$,D$(4$T$D$贉  t[@ht`    t
*    tT$$l$4$  T$$   ǋT$l$D$    |$4$@  <[^_]Ð@T$$D$   4$D$D$D$  T$$hUW1VS<D$`T$dî  t$PD$(D$XT$,T$\4$D$T$萆  tyT$,D$(4$T$D$贈  t[@ht`   v *    uuT$$l$4$  T$$°   ǋT$l$D$    |$4$@  <[^_]Ð@T$$D$   4$D$D$D$  T$$hUW1VS<D$`T$dî  t$PD$(D$XT$,T$\4$D$T$萅  tyT$,D$(4$T$D$贇  t[@ht`   v *    uuT$$l$4$  T$$   ǋT$l$D$    |$4$@  <[^_]Ð@T$$D$   4$D$D$D$  T$$hLD$`T$d\$<ð  t$@t$PD$(D$XT$,T$\|$D1l$HD$T$4$脄  teD$(T$,4$D$T$訆  tG@ht\   x;   v-UD$lD$D$T$4$     \$<t$@|$Dl$HLÐt& @D$   4$D$D$D$  tLD$`T$d\$<ð  t$@t$PD$(D$XT$,T$\|$D1l$HD$T$4$脃  teD$(T$,4$D$T$訅  tG@ht\   x;   s-UD$D$D$T$4$     \$<t$@|$Dl$HLÐt& @D$   4$D$D$D$  tLD$`T$d\$<ð  t$@t$PD$(D$XT$,T$\|$D1l$HD$T$4$脂  t0D$(T$,4$D$T$訄  t@ht$   ׉\$<t$@|$Dl$HLf@D$   4$D$D$D$M  믐UXU}}]e   E15  ҉uuUG    G    t,T$4$P4$D$EԉD$   uEe3   uX]u}]ËUԉ4$T$  P)ԍT$#WGT$UԉD$D$    4$T$   (  &    \T$tD$p\$Lc   T$,T$lD$(D$ht$P1|$T1T$T$`l$XD$$Ҁ  tkT$,D$(L$$T$T$`D$$  L$$tAATT$<|$xH4T$D$    D$    D$E$хut$<1\$Lt$P|$Tl$X\ÐUD$D$T$T$T$`$]  뺍t& '    LT$h\$<D$XS  t$@T$,T$\|$D|$`l$Hl$dD$T$T$P$  t+T$P|$l$$  tFTT$,$P8u\$<t$@|$Dl$HLÐFD$GD$   D$D$ $빍&    '    UhUM]E  UȋU,uuM̋M }UЋUD$Mĉ4$e
   M1ɉT$~  E   UȋM̉4$T$L$  t|M11҅tOMЉ4$L$  MЍP)ԍT$#T$D$D$    L$4$EU   UEMԋITD$E(T$UĉD$$QLuMe3
   u;]u}]Ðt& WD$D$4$T$T$A    v '    LT$h\$<D$X3  t$@T$,T$\|$D|$`l$Hl$dD$T$T$P$}  t+T$P|$l$$  tFTT$,$PPu\$<t$@|$Dl$HLÐ$(  D$FD$GD$   D$,D$ $fUhUM]E`  UȋU(uuM̋M }UЋUD$Mĉ4$e
   M1ɉT$|  E   UȋM̉4$T$L$~  tuM11҅tOMЉ4$L$  MЍP)ԍT$#T$D$D$    L$4$EU   UEMԋITT$UĉD$$Q,uMe3
   u:]u}]Ít& WD$D$4$T$xT$)    fUWVSlUM#  ue   E1EUЋU(MԋM 4$D$UȋUMM,T$M{  E   UЋMԉ4$T$L$}  E   E1E    tIMȉ4$L$  MȉEЃUЃ)ċ|$#|$T$D$    L$4$   M11҅tOUĉ4$T$  MčP)ԍT$#T$D$D$    L$4$EU   UEM̋ITD$EЉT$U|$D$$Q0uEe3   u5e[^_]ÐMQD$D$4$T$T$膈  ?  
UhUE]s  ŰU uuEe   E1EUċU(}4$D$UU4UЋUT$y  E   EȋỦ4$D$T${     E0E    E    E؋EЅtIUЉ4$T$  P)ԍT$#U܉T$UЉED$D$    T$4$   UԋBTUT$U؉T$Uĉ$   uEe3   u6]u}]ËWD$D$4$T$ĻT$!  ڇ  v '    UhUM]ð  e   E1Euu}}(UȋUM̋M D$}ԉT$MЉ4$zx     UȋM̉4$T$L$z     E0   Eԅ   E,   E0M0U)ĉL$M,D$#D$4$L$MԉEĉL$   OT}0Eĉ|$}ЉD$<$   UuEe3      ]u}]fRD$D$4$T$T$Ʌ  븍&    },E|$D$D$4$  댍v M0L$֐4D$D$4$̄  X"  fl$   $   \$\]  T$4$   t$`t$pD$0D$x|$dT$<T$|l$h$   D$4$T$v  tOT$4D$04$T$D$x  t1D$<L$OD$OGTT$,D$   L$,$   T$,u\$\t$`|$dl$hlÐt& RD$D$4$T$T$i  뾍&    UW1VSLUMa  ue   E1EUЋUMԋM E    D$T$M̉4$u     EЋUԉMȉ4$D$T$w  MȅE   UATT$UD$    $   Mȅ   E)ċATML$M̍T$#T$Uȉ$   Uȅu]MUȉ4$L$  Uȅt"T$UD$    |$4$T$@  Ue3   u;e[^_]Í&    MЋQD$D$4$T$T$  诃  
UWVS\UMÀ  uEUЋU(MԋM E    D$UċUM4$e
   M1ɉT$Ht  E    ED  UЋMԉ4$T$L$`v  E#  M0  Uą  E,l  E0M0U,)ċL$Mč|$#T$|$L$4$   UȍMBTL$M0D$    |$L$M$      E   1҃M)ċEȍT$#@TL$M0T$UEȉL$M|$$   U   MU4$L$  UEt%T$UD$    4$T$ỦT$@  Me3
   E   e[^_]Í&    MЋQT$^D$T$D$4$  벍t& MЋQT$΍    U,ET$D$D$4$  nM0L$֍4D$D$4$  >+  t& '    UhUE]c   ŰU uuEe   E1EUċU(}4$D$UU4UЋUT$q  E   EȋỦ4$D$T$s     E0E    E    E؋EЅtIUЉ4$T$  P)ԍT$#U܉T$UЉED$D$    T$4$   UԋBTUT$U؉T$Uĉ$   uEe3   u6]u}]ËWD$D$4$T$(T$    v '    UhUM]à  e   E1Euu}}(UȋUM̋M D$}ԉT$MЉ4$jp     UȋM̉4$T$L$r     E0   Eԅ  M09M,   E,   E0M0U)ĉL$M,D$#D$4$L$MԉEĉL$   OT}0Eĉ|$}ЉD$<$   UuHEe3      ]u}]Ív },E|$D$D$4$
}  뻍v RD$D$4$T$LT$}  돍&    M0L$릐4D$D$4$|  W~  f\D$pT$t\$LC  D$($   t$Pt$`T$,T$l|$TD$?D$hl$Xl$xT$4$D$n  tFT$,D$(4$T$D$p  t(GTL$?T$$D$   L$,$   T$$u\$Lt$P|$Tl$X\Í&    RD$D$4$T$LT$Y|  뼍&    UW1VS\UEQ  uŰU Ee   E1E4$UċU(D$UԋUT$m  E   EȋỦ4$D$T$o     Eԅ   UԉM4$T$  P)ԋUԍ|$#|$D$D$    T$4$E   UЋERT|$   D$UԋUĉ$U   MuUe3   u`e[^_]f1=   tߋQD$D$4$T$pT${  붍    4D$D$4$Dz  {      '    UWVSlMUp  }(uMԋM UЋEU}ĉMM4e=   }1D$T$Mȉ4$9l  EN  UЋMԉ4$T$L$Xn  E-  M0  UąW  E,$  E0U0)ċT$U,L$#L$MT$Uĉ4$T$   EȋM  }ȉM4$|$     1҉EEU>)ĉT$UȍD$#D$ET$D$    4$   ŰEMzTUD$E0L$MT$D$$      t31=   t*MЋQD$D$4$T$yT$ y  }e3=   uae[^_]fU,ET$D$D$4$Ex  Ív 4D$D$4$$x  fM0L$ly          UhUE]@  ŰU uuEe   E1EUċU(}4$D$UU4UЋUT$j  E   EȋỦ4$D$T$#l     E0E    E    E؋EЅtIUЉ4$T$  P)ԍT$#U܉T$UЉED$D$    T$4$   UԋBTUT$U؉T$Uĉ$   uEe3   u6]u}]ËWD$D$4$T$T$Qw  
x  v '    UhUE]C  ŰU uuEe   E1EUċU(}4$D$UU4UЋUT$h  E   EȋỦ4$D$T$j     E0E    E    E؋EЅtIUЉ4$T$  P)ԍT$#U܉T$UЉED$D$    T$4$   UԋBTUT$U؉T$Uĉ$PxuEe3   u9]u}]Ív WD$D$4$T$T$u  v  v '    UWVS\UMÀ  uEUЋU(MԋM E    D$UċUM4$e
   M1ɉT$Hg  E    E@  UЋMԉ4$T$L$`i  E  E0  Eą  E,L  E0M0U,)ċL$Mč|$#T$|$L$4$   UȍMBTL$M0D$    |$L$M$      E   1҃M)ċEȍT$#@TL$M0T$UEȉL$M|$$   UubMU4$L$  UEt%T$UD$    4$T$ỦT$@  Me3
   E   e[^_]Ív MЋQD$D$4$T$ܼT$s  붍t& U,ET$D$D$4$%s  덋M0L$ٍ4D$D$4$r  ]Nt  &    '    UWVS\UM   uEUЋU(MԋM E    D$UċUM4$e
   M1ɉT$d  E    E@  UЋMԉ4$T$L$ g  E  M0  Uą  E,L  E0M0U,)ċL$Mč|$#T$|$L$4$   UȍMBTL$M0D$    |$L$M$      E   1҃M)ċEȍT$#@TL$M0T$UEȉL$M|$$   UubMU4$L$  UEt%T$UD$    4$T$ỦT$@  Me3
   E   e[^_]Ív MЋQD$D$4$T$ T$q  붍t& U,ET$D$D$4$p  덋M0L$ٍ4D$D$4$p  ]q  &    '    UWVS\UM#  }(uUЋU4MԋEM }ĉUȋUD$M4$e
   M1ɉT$b  E    8  UЋMԉ4$T$L$d    E0  Eą  E,  Eȅ  MȉU4$L$  U;E8E   M8   +E8UE)ċE0L$#MЃ)ċE0L$#L$D$E,4$MD$EĉD$   GT}M|$}ЉL$M|$}0$|$   U   U}ЋMȉT$U84$|$L$T$@  EE̍v Ue3   E   e[^_]Ðt& }8D$D$4$|$n  E    봍t& RD$D$4$T$ܼT$	o  뇍&    M0L$D$D$4$=n  XD$D$4$n  7&    },E|$뮐4So  v UWVS\UM0  }(uUЋU4MԋEM }ĉUȋUD$M4$e
   M1ɉT$_  E    @  UЋMԉ4$T$L$b     E0  Mč4  E,  Eȅn  MȉU4$L$  U;E8E   M8   +E8UE)ċE0L$#MЃ)ċE0L$#L$D$E,4$MD$EĉD$   GT}M|$}ЉL$M|$}0$|$   U   U}ЋMȉT$U84$|$L$T$@  EE̐t& Ue3   E   e[^_]Ðt& }8D$D$4$|$l  E    봍t& RD$D$4$T$ T$ql  뇍&    D$D$4$k  _&    M0L$D$D$4$}k  0},E|$l  t& UWVS\UMà  e   E1EŰUMԋM E    D$UЋUMȉT$Ủ$i]  E       MԋUЉL$M̉T$$_  Et`FTUMȉT$UD$    $   U   EMȃ)ċFT|$#T$|$$   uoEu Me3
   E   e[^_]Ðt& M̋D$$  EtǋŰMċU|$D$    L$T$Ủ$@  fMЋQD$D$T$$T$Ủ$j  f9k  '    UWVS\UMs  e   E1EŰUMԋM E    D$UЋUMȉT$Ủ$[  E       MԋUЉL$M̉T$$]  Et`FTUMȉT$UD$    $   U   EMȃ)ċFT|$#T$|$$   uoEu Me3
   E   e[^_]Ðt& M̋D$$  EtǋŰMċU|$D$    L$T$Ủ$@  fMЋQD$D$T$HT$Ủ$h  fi  '    UWVS\UMÀ  uEUЋU(MԋM E    D$UċUM4$e
   M1ɉT$HZ  E    E@  UЋMԉ4$T$L$`\  E  E0  Eą  E,L  E0M0U,)ċL$Mč|$#T$|$L$4$   UȍMBTL$M0D$    |$L$M$      E   1҃M)ċEȍT$#@TL$M0T$UEȉL$M|$$   UubMU4$L$  UEt%T$UD$    4$T$ỦT$@  Me3
   E   e[^_]Ív MЋQD$D$4$T$¹T$f  붍t& U,ET$D$D$4$%f  덋M0L$ٍ4D$D$4$e  ]Ng  &    '    UWVS\UM   uEUЋU(MԋM E    D$UċUM4$e
   M1ɉT$W  E    E:  UЋMԉ4$T$L$ Z  E  U0  Eą  E,D  E0M0U,)ċL$Mč|$#T$|$L$4$   UȍMBTL$M0D$    |$L$M$P|   E   1҃M)ċEȍT$#@TL$M0T$UEȉL$M|$$P|Uu`MU4$L$  UEt%T$UD$    4$T$ỦT$@  Me3
   E   e[^_]ÐMЋQD$D$4$T$T$d  븍t& U,ET$D$D$4$c  돋M0L$ٍ4D$D$4$c  _d      UW1V1S   UE,ɭ  MUċU EE,$MUU0Ee   E1EUUD$T$U  ME  EUĉ$D$T$W  M  l$T$PME  D$D$E$D$   MEM  
D$D$E$D$   ME  U$T$  E@M   )čD$#ɋME   E    ǉ   t& MT$4$UL$   MUL$T$4$   EU4$T$     1҉G)čD$#GD$GD$    4$D$ED$   EM9MtMM4$L$ML$  B11    Me3
      e[^_]Ít& E(uԉ$Mt$EԋED$UBTUT$Ut$T$UT$U$   Muu1농1D$1T$D$$ba  ]b  &    UWVS   MUP  ue   E1EMM UU4$D$MM,T$MM0MM4MR  E    E  UM4$T$L$T    lT$4$Pj  D$D$|$4$   E<  
D$D$|$4$   E  M4$L$  E@   )ċEL$/M   E       fMT$4$UL$   MUL$T$4$   EU4$T$     1҉G)čD$/GD$GD$    4$D$ED$   EM9MtEM4$L$ML$  BE    Ue3   E  e[^_]ËM4$L$  E@}   )čL$/M   E       MT$4$UL$   MUL$T$4$   ||4$T$     1҉G)čD$/GD$GD$    4$D$|D$   EM9Mt,M4$L$ML$  9t& E(}ЋM|$4$EЉL$<EMPTED$E܉D$EL$M|$D$EL$MD$$   ufD$   4$  EOE܋UME    EUȍUE    T$D$   D$    L$4$P  -D$T$D$4$"]  E    ]  UWVSlUMð  ue   E1EUU0MċM },E    UUMM8D$4$T$MpN  E    E   UMĉ4$T$L$P  E   E(|$}ԉ|$4$E费MUATMT$UL$MD$    T$U|$$   M   E)ċET$'@TL$MT$UEL$M|$L$M$   UupEu!Me3
   E   e[^_]Í    UD$4$  UEtËT$UD$    4$T$UT$@  뜐t& MQD$D$4$T$GT$>[  h[  t& UW1V1S   UE,ɤ  MUċU EE,$MUU0EE8UU<Ee   E1EUUD$T$L  ME  EUĉ$D$T$N  M  l$T$PME}  D$D$E$D$   MEI  
D$D$E$D$   ME  U$T$  ME@U   )čD$/҉E   E    ǉ   MT$4$UL$   MUL$T$4$   EU4$T$     1҉G)čD$/GD$GD$    4$D$ED$   EM9MtMM4$L$ML$  B11    Me3
      e[^_]Ít& E(UԉT$$MEԋED$MUT$$  MUǍ@)ċt$/$T$t$|$D$       UBTUT$U|$t$T$UT$UT$UԉT$U$   Mu
u1&e1D$1T$D$$W  X  UW1V1S   EUÉ  MEE,UċU $MEE8UU0EEUe   U1ҋUD$T$II  ME  EUĉ$D$T$eK  M  l$T$PME  D$D$E$D$   MEN  
D$D$E$D$   ME  U$T$  E@M   )čD$'ɋME   E    ǉ       MT$4$UL$   MUL$T$4$   EU4$T$     1҉G)čD$'GD$GD$    4$D$ED$   EM9MtMM4$L$ML$  B11    Me3
      e[^_]Ít& E(uԉ$Mt$EԋED$ǲUBTUT$Ut$T$UT$UT$U$   Mu
u1|y1D$1T$D$$U  SU  UWVS   UM Ý  ue   E1}(PETUM HD$T$84$aF  ǅL    <  PT4$T$L$mH  0  lT$4$P  D$D$|$4$   Dv  
D$D$|$4$   @E  H4$L$  L@   )ċL|$#4  ǅP       t& DT$4$,L$   @,L$T$4$   $$4$T$     1҉G)čD$#GD$GD$    4$D$$D$   PP9LtQP4$L$HL$  ǅL    Me3
   L  e[^_]$   B  L<BT|$4,|$8<$Pl,z  <}E    BT8|$`,D$    |$$Pp,  UǅP      PL4D    49u답LP ǅL   H       L$,T$((  <MBTL$8D$    |$$PpD  UPǅD    ҍt5D@4D    49u닍P@щPL    J<HGT8,<$Pt,"  P,4$T$  ,PLLL$|$D$    T$4$P  ,$諬0HG4$D$D$D$gO  ,$iǅL    N0HQD$D$4$T$ T$O  밋0WT$нD$T$D$4$O  ,x0WT$,Ƌ0G,4$D$D$D$N  ,)0WD$,D$T$ T$4$N  ,PBO          UWVS\UMӬp  uEUU(MċM 4$D$ŰUMe
   M1ɉT$?@  E       UMĉ4$T$L$XB     M0U؋GTE    T$M؋M̉UE    D$   L$MЉ$PdU   E   MЃ)čD$#E܋GTT$UD$   $T$PducE   D$4$  U܉EԋT$UD$    4$T$UԉT$@  Me3
   Euke[^_]Í    U0D$D$4$T$\T$AM  뺍&    M0D$D$   D$L$4$
M  M      UWVS\UMà  EUԋUMċM D$UU(Me
   M1ɉUȋUT$Uԉ$i>  E       MċUL$MԉT$$@     MȍU؋FTE  @T$L$M̉UE    E    D$   $PdU   E   M̃)čD$#E܋FTT$UD$   $T$PduGEtgUԉD$E܉|$t$$D$@  EЋMe3
   Eu]e[^_]Ít& T$UԉD$D$$K  v MԍTD$D$   D$$YK  L  f\T$tD$p\$LS  T$$T$xl$Xl$`D$ D$ht$P1T$($   |$TD$<D$T$,T$l,$T$<  tmD$ T$$,$D$T$>  tQ$   D$<D$4GTD$8   D$   T$0T$0T$T$,T$T$($Pdu[D$8t$<u\$Lt$P|$Tl$X\Ë$   1D$D$D$   T$D$,$+J  볐$   D$D$,$T$\T$I  녍t& '    \T$tD$p\$LÐ  T$$T$xl$Xl$`D$ D$ht$P1T$($   |$TD$? D$T$,T$l,$T$L;  tnD$ T$$,$D$T$n=  tR$   D$?D$4GTD$8   D$   T$0T$0T$T$,T$T$($Pdu^D$8t$?u\$Lt$P|$Tl$X\f$   1D$D$D$   T$D$,$H  뱐$   D$D$,$T$\T$H  냍t& '    UW1V1S|EU菦,  MEЋE(UԋU $ME̋EUe   U1ҋUD$T$9  ME  EЋUԉ$D$T$<  M  l$T$PME  D$D$EЉ$D$   MEM  
D$D$EЉ$D$   ME  Ủ$T$  MEȍ@Uȍ   )čD$#҉E   E    ǉ   t& MĉT$4$UL$   MUL$T$4$   EU4$T$     1҉G)čD$#GD$GD$    4$D$ED$   EM9MtEMЋ4$L$M̉L$  B11    Me3
   uee[^_]ÉUBTUT$UȉMT$UT$U$PTMuu1뱍j1D$1T$D$$E  F  &    '    <T$TD$P\$,À  T$T$Xt$0t$@D$D$H|$4T$T$Ll$8l$`D$4$T$J7  t1D$T$4$D$T$l9  tGTT$l$$P\u\$,t$0|$4l$8<Í&    |$4D$Hl$8t$@\$,t$0T$LD$D<E  UWVS   MU Ý  ue   E1EMM UU4$D$MM,T$MM0Mg6  E    E  UM4$T$L$8    lT$4$Ph  D$D$|$4$   E:  
D$D$|$4$   E  M4$L$  E@U   )čL$/҉M   E       MT$4$UL$   MUL$T$4$   EU4$T$     1҉G)čD$/GD$GD$    4$D$ED$   EM9MtEM4$L$ML$  BE    Ue3   E  e[^_]ËM4$L$  E@   )ċEL$/M   E       MT$4$UL$   MUL$T$4$   EU4$T$     1҉G)čD$/GD$GD$    4$D$ED$   EM9Mt-M4$L$ML$  Bt& E(UME    EЋBTUL$MT$U܉T$UE    L$MT$UЉT$L$M$   ufD$   4$  E\E܋UME    EUȍUE    T$D$   D$    L$4$P  -D$T$D$4$@  E    A  l$   $   \$\͞j  T$4$   t$`t$pD$0D$x|$dT$<T$|l$h$   D$4$T$.2  taT$4D$04$T$D$P4  tC$   D$DD$H    D$L    L$DOTD$D$<T$,l$$   T$,u\$\t$`|$dl$hlÍv RD$D$4$T$ĻT$?  &    UhUM]Ý`  e   E1Euu}}(UȋUM̋M D$}ԉT$MЉ4$*1     UȋM̉4$T$L$J3     M0   Eԅ  M09M,   E,   E0M0U)ĉL$M,D$#D$4$L$MԉEĉL$   OT}0Eĉ|$}ЉD$<$   UuHEe3      ]u}]Ív },E|$D$D$4$=  뻍v RD$D$4$T$T$A>  돍&    M0L$릐4D$D$4$l=  W>  fl$   $   \$\Ú  T$4$   t$`t$pD$0D$x|$dT$<T$|l$h$   D$4$T$^/  tOT$4D$04$T$D$1  t1D$<L$OD$OGTT$,D$   L$,$   T$,u\$\t$`|$dl$hlÐt& RD$D$4$T$T$	=  뾍&    UW1VSLUMÞ  ue   E1EUЋUMԋM E    D$T$M̉4$m.     EЋUԉMȉ4$D$T$0  MȅE   UATT$UD$    $   Mȅ   E)ċATML$M̍T$#T$Uȉ$   Uȅu]MUȉ4$L$  Uȅt"T$UD$    |$4$T$@  Ue3   u;e[^_]Í&    MЋQD$D$4$T$T$;  O<  
l$   $   \$\}  T$4$   t$`t$pD$0D$x|$dT$<T$|l$h$   D$4$T$,  taT$4D$04$T$D$ /  tC$   D$DD$H    D$L    L$DOTD$D$<T$,l$$   T$,u\$\t$`|$dl$hlÍv RD$D$4$T$(T$y:  &    UhUM]s  e   E1Euu}}(UȋUM̋M D$}ԉT$MЉ4$+     UȋM̉4$T$L$-     E0   Eԅ  M09M,   E,   E0M0U)ĉL$M,D$#D$4$L$MԉEĉL$   OT}0Eĉ|$}ЉD$<$   UuHEe3      ]u}]Ív },E|$D$D$4$}8  뻍v RD$D$4$T$LT$8  돍&    M0L$릐4D$D$4$8  Wr9  f\D$pT$t\$L賖P  D$($   t$Pt$`T$,T$l|$TD$?D$hl$Xl$xT$4$D$*  tFT$,D$(4$T$D$9,  t(GTL$?T$$D$   L$,$   T$$u\$Lt$P|$Tl$X\Í&    RD$D$4$T$LT$7  뼍&    UW1VS\UE^  uŰU Ee   E1E4$UċU(D$UԋUT$.)  E   EȋỦ4$D$T$M+     Eԅ   UԉM4$T$  P)ԋUԍ|$#|$D$D$    T$4$E   UЋERT|$   D$UԋUĉ$U   MuUe3   u`e[^_]f1=   tߋQD$D$4$T$pT$x6  붍    4D$D$4$5  
7  l$   $   \$\=  T$4$   t$`t$pD$0D$x|$dT$<T$|l$h$   D$4$T$'  t^T$4D$04$T$D$)  t@$   D$DD$H    D$L    L$DOTD$D$<T$,l$$QxT$,u\$\t$`|$dl$hlÍ    RD$D$4$T$T$95  뽍&    l$   $   \$\-~  T$4$   t$`t$pD$0D$x|$dT$<T$|l$h$   D$4$T$&  taT$4D$04$T$D$(  tC$   D$DD$H    D$L    L$DOTD$D$<T$,l$$   T$,u\$\t$`|$dl$hlÍv RD$D$4$T$T$)4  &    UWVS\UM#}  uEUЋU0MԋM E    D$UċUM4$e
   M1ɉT$%  E    EO  UЋMԉ4$T$L$'  E.  U8  Eą  M89M4[  E4M  E8M8U4)ċL$Mč|$#T$|$L$4$   UȍMBTL$M8D$    |$L$M$      E   1҃M)ċEȍT$#@TL$M8T$UEȉL$M|$$   UucMU4$L$  UEt%T$UD$    4$T$ỦT$@  Me3
   E   e[^_]Ít& MЋQD$D$4$T$ܼT$2  뵍t& U4ED$D$4$T$U1  E    녋M8D$D$4$L$)1  ]4D$D$4$1  <^2  &    '    UWVS\UM蓏0{  uEUЋU0MԋM E    D$UċUM4$e
   M1ɉT$"  E    EO  UЋMԉ4$T$L$%  E.  }8  Mą  M89M4[  E4M  E8M8U4)ċL$Mč|$#T$|$L$4$   UȍMBTL$M8D$    |$L$M$      E   1҃M)ċEȍT$#@TL$M8T$UEȉL$M|$$   UucMU4$L$  UEt%T$UD$    4$T$ỦT$@  Me3
   E   e[^_]Ít& MЋQD$D$4$T$ T$/  뵍t& U4ED$D$4$T$.  E    녋M8D$D$4$L$.  ]4D$D$4$x.  </  &    '    UWVS\UMàx  }0uUU<MċEM }1UЋUD$Mȉ4$e
   M1ɉT$g   ED  UMĉ4$T$L$"  $  E8  E̅  M89M4"  E4  EЅ  MЉU4$L$  U;E@E
  M@   +E@UE)ċE8L$#M)ċE8|$#|$D$E44$D$ẺD$   EԋM@T|$}ȉL$EԍED$E8<$}ԉD$   UM   UL$MЉ4$T$U@L$T$@  }}e3=      e[^_]Í    }4E|$D$1D$4$s,  빐}@|$֐R1D$D$4$T$ܼT$,  zfM8D$D$4$L$
,  PD$D$4$+  /&    43-  v UWVS\UMsv  }0uUU<MċEM }1UЋUD$Mȉ4$e
   M1ɉT$  ED  UMĉ4$T$L$  $  E8  E̅  M89M4"  E4  EЅ  MЉU4$L$  U;E@E
  M@   +E@UE)ċE8L$#M)ċE8|$#|$D$E44$D$ẺD$   EԋM@T|$}ȉL$EԍED$E8<$}ԉD$   UM   UL$MЉ4$T$U@L$T$@  }}e3=      e[^_]Í    }4E|$D$1D$4$)  빐}@|$֐R1D$D$4$T$ T$G*  zfM8D$D$4$L$})  PD$D$4$\)  /&    4*  v UWVS\UMÀs  uEUȋU0M̋M E    E    UUMD$e
   M1ɉT$4$A  E    EQ  UȋM̉4$T$L$Y  E0  }8  M  M89M4d  E4V  E8M8U4)ċL$M|$#T$|$L$4$   UЍM܋BTL$M8D$    |$L$M$      E1ҹ   )čT$#UԋU܅   UЍMBTUL$MD$    $   M   E11   U܉4$T$  EtE܅)  E   Ue3   E  e[^_]Ív MЍU܋ATMԉT$|$L$M8L$M$   Bt& MȋQD$D$4$T$ܼT$'  {UЃ)č|$#BTL$M|$$   UMȋQD$D$4$T$$T$:'  E        D$E܉|$4$D$EĉD$@  fMԉD$ED$    4$L$D$@  E릍    U4ED$D$4$T$&  E    {M8D$D$4$L$%  S4D$D$4$%  2'  t& '    UWVS\UMCo  uEUȋU0M̋M E    E    UUMD$e
   M1ɉT$4$  E    EQ  UȋM̉4$T$L$  E0  E8  E  M89M4d  E4V  E8M8U4)ċL$M|$#T$|$L$4$   UЍM܋BTL$M8D$    |$L$M$      E1ҹ   )ċE܍T$#Uԅ   UЍMBTUL$MD$    $   M   E11   U܉4$T$  EtE܅)  E   Ue3   E  e[^_]Ív MЍU܋ATMԉT$|$L$M8L$M$   Bt& MȋQD$D$4$T$ T$#  {UЃ)č|$#BTL$M|$$   UMȋQD$D$4$T$HT$#  E        D$E܉|$4$D$EĉD$@  fMԉD$ED$    4$L$D$@  E릍    U4ED$D$4$T$e"  E    {M8D$D$4$L$6"  S4D$D$4$"  2k#  t& '    UW1VSlUM血>l  ue   E1EUЋU0MԋM 4$D$UȋUMM<T$M  E}  UЋMԉ4$T$L$'  ]  E8  Eȅ'  M89M4[  E4M  MĉU4$L$  U9E@T  M@F  +E@UE)ċE8L$#MЋM)ċE8M܍L$#L$D$E44$MD$EȉD$   E̋M@TL$MEȍE܉D$EЉ$MȉD$E8D$   U   }܋E)EE̋HTED$EЉUD$E$   U   UЋ}M@T$U}܉4$L$|$T$@  Me3
      e[^_]Í    U4ET$D$1D$4$  빐U@T$֐RD$D$4$T$ܼT$A   |t& M8D$D$4$L$u  PR1D$D$4$T$$T$  "f4D$D$4$$  z   v '    UW1VSlUM}Ni  ue   E1EUЋU0MԋM 4$D$UȋUMM<T$M  E}  UЋMԉ4$T$L$7  ]  M8  Eȅ'  M89M4[  E4M  MĉU4$L$  U9E@T  M@F  +E@UE)ċE8L$#MЋM)ċE8M܍L$#L$D$E44$MD$EȉD$   E̋M@TL$MEȍE܉D$EЉ$MȉD$E8D$   U   }܋E)EE̋HTED$EЉUD$E$   U   UЋ}M@T$U}܉4$L$|$T$@  Me3
      e[^_]Í    U4ET$D$1D$4$  빐U@T$֐RD$D$4$T$ T$Q  |t& M8D$D$4$L$  PR1D$D$4$T$HT$  "f4D$D$4$4    v '    UWVS\UMz`f  uEUЋU0MԋM 4$D$UċUMe
   M1ɉT$/  E    EV  UЋMԉ4$T$L$G  E5  E8  }ą  M89M4b  E4T  E8M8U4)ċL$Mč|$#T$|$L$4$   UȍME    BTL$M8D$    |$L$M$      E   1҃M)ċEȍT$#@TL$M8T$UEȉL$M|$$   UucMU4$L$  UEt%T$UD$    4$T$ỦT$@  Me3
   E   e[^_]Ít& MЋQD$D$4$T$¹T$  뵍t& U4ED$D$4$T$  E    녋M8D$D$4$L$  ]4D$D$4$  <  &    '    UWVS\UM3xc  uEUЋU0MԋM 4$D$UċUMe
   M1ɉT$  E    EP  UЋMԉ4$T$L$
  E/  E8  Eą  M89M4Z  E4L  E8M8U4)ċL$Mč|$#T$|$L$4$   UȍME    BTL$M8D$    |$L$M$P|   E   1҃M)ċEȍT$#@TL$M8T$UEȉL$M|$$P|UuaMU4$L$  UEt%T$UD$    4$T$ỦT$@  Me3
   E   e[^_]fMЋQD$D$4$T$T$6  뷍t& U4ED$D$4$T$m  E    뇋M8D$D$4$L$A  _4D$D$4$   >v      UWVS\UMuPa  }0uUU<MċEM }1UЋUD$Mȉ4$e
   M1ɉT$	  ED  UMĉ4$T$L$6  $  E8  E̅  M89M4"  E4  EЅ  MЉU4$L$  U;E@E
  M@   +E@UE)ċE8L$#M)ċE8|$#|$D$E44$D$ẺD$   EԋM@T|$}ȉL$EԍED$E8<$}ԉD$   UM   UL$MЉ4$T$U@L$T$@  }}e3=      e[^_]Í    }4E|$D$1D$4$#  빐}@|$֐R1D$D$4$T$¹T$  zfM8D$D$4$L$  PD$D$4$  /&    4  v UWVS\UM#s^  }0uUU<MċEM }1UЋUD$Mȉ4$e
   M1ɉT$  ED  UMĉ4$T$L$  $  E8  E̅  M89M4"  E4  MЅ  MЉU4$L$  U;E@E
  M@   +E@UE)ċE8L$#M)ċE8|$#|$D$E44$D$ẺD$   EԋM@T|$}ȉL$EԍED$E8<$}ԉD$W|UM   UL$MЉ4$T$U@L$T$@  }v }e3=      e[^_]Í    }4E|$D$1D$4$  빐}@|$֐R1D$D$4$T$T$  zfM8D$D$4$L$-  PD$D$4$  /&    4S  S   T$ p2\  t$nЃ[Í    '    S   T$ Up[  t$nЃ[Í    '       t$t$ \$pë[  t4$5n4$Mn1\$t$
   t$t$ \$o[[  |$t1$   ]nǸ   tD$    <$mu>1f\$t$|$É<$m   \$t$|$Ít& '    UWVS>oZ  <|$P$\   m   оЍ2@    @X    T$<$PS  m  
T$CT$l$<$     D$D$T<$D$      l$<$  @T$,$+mT$,F  D$T$T$,D$    l$<$   FT$, F$mFXh  LT$$6m  VT$Ѕu:FT\   $P   FTV$P   <[^_]Ðt& VT$D$T$D$<$  Ft$kFXt$k4$1ktl<[^_]f1D$D$<$  nt& VT$s    VT$[    D$D$<$4  &    D$D$<$  &&    jD$FD$(D$D$<$
  &    jD$FD$LƋD$1É'    SD$$JlW  t8оu	[Ít& D$D$D$D$ $T
  1[Í    '    t$t$$\$kÀW  |$FT$    PFXt$iFt$j   \   uH   uP1tf  t 4$iuj\$t$|$Ðt& ~[    tf  룐<\$,+kV  t$0l$8l$H|$4$  i   1D   nT$DBTVT$,$PulFhu\$,t$0|$4l$8<ËT$DBTVpT$,$Pt҉l$T$T$@D$D$$`  4$1h랍t& l$ƍt& T$@`D$D$$  et& '    D$1É'    SD$$
jçU  t8u	[Ít& D$D$D$D$ $  1[Í    '      t$t$(\$i;U  |$   uC   uK1tf  t 4$g\$t$|$Ðt& ~    tf  먍v UWVSLt$`iôT  4$ T$PD$$    D$(9  TD$\D$D$(4$D$   D$,  T$(L$pD$    4$T$L$  D$$   D$p   |$l1k    D$<D$D$8D$D$4D$4$D$D$,D$D$(D$Rp   D$D$$l$4$D$  ;l$ptXL$dD$4QTD$L$hD$A$R$qD$D$4$T$(T$	  D$$    D$$L[^_]Í&    D$$    D$$L[^_]Ð  S  T$           <      !  
              p   S|  tq  u[Ð@tU   gtD  `Kt3  P t"  A|  t& fÍ       Zt     t     t|   t   uÍt& 	t   x   cc  jNu7Ðt& q)R  ijpÍ&      }  P  6s  0  Ít& R  s  
VÍt&    F      .     pÍt&         f   c     4   Nf   ~     f   |Lf   *>     4&   fd  bbcuÍv   Ð        0lf0a    nL!5Á   )   Á     Á      !Á      Ã12}ÃQtT0]Á   =Q   X7Á`  K+p  cÃÃefÃ7Á     Á   uË$UXuƋMe   E1]`qL  MԍH)̋M}|$'ỦL$MD$D$   D$L$<$_Ũ   9%Ee3      ]u}]Ív M    $ỦL$PU̅tTL$\L$$t$   U̅t$MЉ|$  ŰMЅs:D$E$L$t$D$WpU̅M
D$$Q4<t& &1K  t& '    UXuƋMe   E1]t_K  MԍH)̋M}|$'UЉL$MD$D$   D$L$<$%^UЃ|]9!Ee3   uL]u}]Ív Mԉ$U    L$PUЅtŋ
|$D$$Q8볍&    &g  &    UWV |$4t$<l$8D$       T$0D$t$l$<$D$u ^_]Ít& UWV |$4t$8l$<D$       T$0D$l$t$<$T$u ^_]Ít& UWV |$4t$@l$8D$       D$<T$0t$l$D$D$<$L$u؃ ^_]Í        UWV |$4t$8l$<D$       D$@T$0l$t$D$D$<$D$u؃ ^_]ÐSQ]H  [UVS-]H  t&    Ћu[^]S    [ÓH  3\[      Length of label exceeds 32 bytes    java/lang/IllegalArgumentException  C_InitToken failed for module %s.   org/opensc/pkcs11/wrap/PKCS11Exception  C_GetSlotList failed for module %s. C_GetMechanismList for PKCS11 slot %d failed.   Invalid value %u for ulMinPinLen of token in slot %d.   Invalid value %u for ulMaxPinLen of token in slot %d. C_WaitForSlotEvent failed. No token present in slot %d.   {Gz?Invalid data length %d. NULL input data. Invalid input offset %d. C_Sign failed for slot %d. C_Verify failed for slot %d. NULL output data. Invalid output offset %d. C_Decrypt failed for slot %d. C_Encrypt failed for slot %d. ()I getKind ()[B getData C_GenerateKey failed. C_GenerateKeyPair failed. C_WrapKey failed for slot %d. C_UnwrapKey failed. C_DeriveKey failed.    C_OpenSession for PKCS11 slot %d failed.    pkcs11_slot_close_session: C_CloseSession for PKCS11 slot %d(%s) failed.    C_Login for PKCS11 slot %d failed.  PKCS11Session.logoutNative: C_Logout for PKCS11 slot %d(%s) failed (%s).    C_InitPIN for PKCS11 slot %d failed.    C_SetPIN for PKCS11 slot %d failed. C_SignInit failed for slot %d.  C_SignUpdate failed for slot %d.    C_SignFinal failed for slot %d. C_VerifyInit failed for slot %d.    C_VerifyUpdate failed for slot %d.  C_VerifyFinal failed for slot %d.   C_DecryptInit failed for slot %d.   C_EncryptInit failed for slot %d.   C_DecryptUpdate failed for slot %d. C_EncryptUpdate failed for slot %d. C_DecryptFinal failed for slot %d.  C_EncryptFinal failed for slot %d.  org/opensc/pkcs11/wrap/PKCS11Attribute  Out of memory during object enumeration for slot number %d. C_FindObjectsInit failed for slot number %d.    C_FindObjects failed for slot number %d.    C_FindObjectsFinal failed for slot number %d.   C_GetAttributeValue failed for attribute %u.    C_GetAttributeValue returned ulValueLen -1 for attribute %u but returned CKR_OK. The underlying PKCS#11 module seems to be broken.  C_GetAttributeValue failed for attribute CKA_ALLOWED_MECHANISMS.    C_GetAttributeValue returned ulValueLen -1 for attribute CKA_ALLOWED_MECHANISMS but returned CKR_OK. The underlying PKCS#11 module seems to be broken.  C_GetAttributeValue returned ulValueLen==%lu, which is not equal to sizeof(CK_ULONG) for attribute %u of type CK_ULONG but returned CKR_OK. The underlying PKCS#11 module seems to be broken.   C_GetAttributeValue returned ulValueLen==%lu, which is not equal to sizeof(CK_BBOOL) for attribute %u of type CK_BBOOL but returned CKR_OK. The underlying PKCS#11 module seems to be broken. C_CreateObject failed. C_DestroyObject failed.    Out of memory allocating PKCS11 context.    Unable ot initialize dynamic function loading.  Out of memory allocating PKCS11 module name.    Cannot open PKCS11 module %s: %s.   Cannot find function C_GetFunctionList in PKCS11 module %s: %s. C_GetFunctionList in PKCS11 module %s failed.   C_Initialize in PKCS11 module %s failed.    C_GetInfo in PKCS11 module %s failed.   Invalid PKCS 11 module handle %p. java/lang/String getBytes C_GetFunctionList   Out of memory allocating PKCS11 slot.   C_GetSlotInfo for PKCS11 slot %d failed.    C_GetTokenInfo for PKCS11 slot %d failed.   Invalid PKCS11 slot handle %p.  org/opensc/pkcs11/wrap/PKCS11Mechanism  C_GetMechanismInfo failed for mechanism %u. (IIII)V <init> CKR_OK CKR_CANCEL CKR_HOST_MEMORY CKR_SLOT_ID_INVALID CKR_GENERAL_ERROR CKR_FUNCTION_FAILED CKR_ARGUMENTS_BAD CKR_NO_EVENT CKR_NEED_TO_CREATE_THREADS CKR_CANT_LOCK CKR_ATTRIBUTE_READ_ONLY CKR_ATTRIBUTE_SENSITIVE CKR_ATTRIBUTE_TYPE_INVALID CKR_ATTRIBUTE_VALUE_INVALID CKR_DATA_INVALID CKR_DATA_LEN_RANGE CKR_DEVICE_ERROR CKR_DEVICE_MEMORY CKR_DEVICE_REMOVED CKR_ENCRYPTED_DATA_INVALID CKR_ENCRYPTED_DATA_LEN_RANGE CKR_FUNCTION_CANCELED CKR_FUNCTION_NOT_PARALLEL CKR_FUNCTION_NOT_SUPPORTED CKR_KEY_HANDLE_INVALID CKR_KEY_SIZE_RANGE CKR_KEY_TYPE_INCONSISTENT CKR_KEY_NOT_NEEDED CKR_KEY_CHANGED CKR_KEY_NEEDED CKR_KEY_INDIGESTIBLE CKR_KEY_NOT_WRAPPABLE CKR_KEY_UNEXTRACTABLE CKR_MECHANISM_INVALID CKR_MECHANISM_PARAM_INVALID CKR_OBJECT_HANDLE_INVALID CKR_OPERATION_ACTIVE CKR_OPERATION_NOT_INITIALIZED CKR_PIN_INCORRECT CKR_PIN_INVALID CKR_PIN_LEN_RANGE CKR_PIN_EXPIRED CKR_PIN_LOCKED CKR_SESSION_CLOSED CKR_SESSION_COUNT CKR_SESSION_HANDLE_INVALID CKR_SESSION_READ_ONLY CKR_SESSION_EXISTS CKR_SESSION_READ_ONLY_EXISTS CKR_SIGNATURE_INVALID CKR_SIGNATURE_LEN_RANGE CKR_TEMPLATE_INCOMPLETE CKR_TEMPLATE_INCONSISTENT CKR_TOKEN_NOT_PRESENT CKR_TOKEN_NOT_RECOGNIZED CKR_TOKEN_WRITE_PROTECTED CKR_UNWRAPPING_KEY_SIZE_RANGE CKR_USER_ALREADY_LOGGED_IN CKR_USER_NOT_LOGGED_IN CKR_USER_PIN_NOT_INITIALIZED CKR_USER_TYPE_INVALID CKR_USER_TOO_MANY_TYPES CKR_WRAPPED_KEY_INVALID CKR_WRAPPED_KEY_LEN_RANGE CKR_WRAPPING_KEY_SIZE_RANGE CKR_RANDOM_SEED_NOT_SUPPORTED CKR_RANDOM_NO_RNG CKR_DOMAIN_PARAMS_INVALID CKR_BUFFER_TOO_SMALL CKR_SAVED_STATE_INVALID CKR_INFORMATION_SENSITIVE CKR_STATE_UNSAVEABLE CKR_CRYPTOKI_NOT_INITIALIZED CKR_MUTEX_BAD CKR_MUTEX_NOT_LOCKED CKR_FUNCTION_REJECTED CKR_VENDOR_DEFINED Unknown PKCS#11 error    CKR_KEY_FUNCTION_NOT_PERMITTED  CKR_SESSION_PARALLEL_NOT_SUPPORTED  CKR_SESSION_READ_WRITE_SO_EXISTS    CKR_UNWRAPPING_KEY_HANDLE_INVALID   CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT    CKR_USER_ANOTHER_ALREADY_LOGGED_IN  CKR_WRAPPING_KEY_HANDLE_INVALID CKR_WRAPPING_KEY_TYPE_INCONSISTENT  CKR_CRYPTOKI_ALREADY_INITIALIZED    (ILjava/lang/String;)V  ;`  k    F|   H  @H  H  H   IH  `Kx  L  M   N  pN  N4  Oh  @P  P  Q  R$  Sd  T  U  V$  WP  X|  Y  Z  [  `\0  ]`  ^  _  pa  b	  dL	  ex	   g	  i	  j
  l<
  mh
  o
  @q
  r
   t,  `v\  x  P{  }  p   L  `|      Ќ
  @
  t
  
  
    8  d  P       (   T      `  p  0@   l        P(  X  p       @  0L       0    P@  `         (  <   h        @  $  px       `  @   4  h  @           zR |         |B@   FJtx ?;*2$"(   @   XD9    AC c
AHCE  (   l   lD=    AC k
AHCA  $      Dp    C LL{
JO $      D    C0P_~
HK ,      0E   AB
Ls
AAAC,     Fy   AB
C:
AAAE(   H  0H    C@HWFFU
E    t  Hm    C0PFS     Ip    C0PFV     TIp    C0PFV0     I    AACC@CAA 0      J    AACC@CAA (   <  J    C@HWHH]
A (   h  K    C@HWHH]
A ,     KI   AB
L 
AAAF<     L    AACACP
CAAAH <     dM    AACACP
CAAAB <   D  $N    AACACP
CAAAB <     N    AACACP
CAAAB (     O    CPLSVO
F (     xP    CPLSVO
F (     LQ    CPLSVON
C ,   H  Q    AB
LNSV

AA(   x  R   C`LaFS
B (     S    CPL_HX
B  ,     (TF   AB
OWi

AF(      HU    CPL_HX
B  ,   ,  U>   AB
OWi

AE,   \  V   AB
L\
AAAB,     |XV   AB
LWq

AA,     Y   AB
L_F

AC(     ,[    CpR^_x
F  0      \q   AB
CK$
AAAH   ,   L  L]u   AB
L
AAAH,   |  _V   AB
LWq

AA,     `   AB
L_F

AD(     \b    C`L^\o
H  0      cs   AB
CK
AAAC   ,   <  ld$   AB
L
AAAC,   l  lfV   AB
LWq

AA,     gV   AB
LWq

AD,     hR   AB
L
AAAD,     jR   AB
L
AAAD,   ,  ,m   AB
L
AAAF,   \  o   AB
L
AAAF,     q   AB
L
AAAF ,     Ls   AB
L
AAAF ,     tR   AB
L
AAAD,   	  vJ   AB
L
AAAB0   L	  x   AB
CCM2
AAAE  ,   	  {?   AB
O
AAAA,   	     AB
LG
AAAG0   	  h@   AB
CCM:
AAAE  0   
  t   AB
CCM:
AAAE  ,   H
  0$   AB
Ol
AAAA,   x
  0   AB
LO
AAAG,   
  Ў   AB
LA
AAAE(   
  PU   C`L[Nj
A (     U   C`L[Ng
C 0   0     AB
CCJ)
AAAA  0   d  4    C@L[\Z
Ho   ,     *   AB
O
AAAA(     	   CpR^_
D  ,     Ě   AB
L_F

AD(   $  T    CpR^_x
F  0   P  (q   AB
CK$
AAAH   (     t	   CpR^_
D  ,     X   AB
L_F

AD(         C`L^\o
H  0   
  s   AB
CK
AAAC   (   @
  	   CpR^_
G  (   l
  ܣ	   CpR^_
D  ,   
     AB
L
AAAE,   
      AB
L
AAAE,   
     AB
L
AAAG,   (     AB
L
AAAG,   X  @   AB
L
AAAD,        AB
L
AAAD0         AB
CK
AAAG   0     ܷ   AB
CK
AAAG   ,         AB
L
AAAE,   P  z   AB
L
AAAC,     H   AB
L
AAAG,        AB
L
AAAG     3    AH hA      (3    AH hA      HA    C MDl ,   @  x    C MDS@
A\   T   p     AAAANPj
CAAAFW
CAAAC      `       (     \S    AC ^
AEgC  $         C HDYr
F (   0  (   C@DWKV
A     \         (   p  S    AC ^
AEgC  $     <    C MDW
F  P        AAAAC`u
AAAAHOAAAA               ,  h       ,   @  XU   AB
HS`]

AD,   p      AB
HS`U

AD0     8L    AAAC0}FAA  0     TL    AAAC0}FAA  0     pT    AAAC0EFAA 0   <  T    AAAC0EFAA    p      AN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ("  
   X  o8     
       
   D                           !     H!     H         o   o   o   o                                                                    v"  "  "  "  "  "  "  "  "  #  #  &#  6#  F#  V#  f#  v#  #  #  L   0             GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3  .symtab .strtab .shstrtab .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .text .fini .rodata .eh_frame_hdr .eh_frame .ctors .dtors .jcr .dynamic .got .got.plt .data .bss .comment                                                      $                  .   o   8  8                 8                           @         
  
  D                 H   o                         U   o         P                d   	      H!  H!  H                m   	      !  !        
         v         ("  ("  .                  q         `"  `"  @                |         #  #                            X  X                             x  x                            `  `  d                                                                                                                                                                                                              X                          L L                             h h                          0       h  *                                                                       M         	              x                                                  8                        
                                      H!            !            ("       	     `"       
     #            X            x       
     `                                                                                          L           h                                                     (          5   #        K   h      Z   l      h    $                    t             L                                                                             E           u                                     3         3       0  A              '  P      8           F           U           \  `  U    x           0          L       W$                     S                        4  0       K    T     `         m    L       \          L         @  T       @  S               м                          `       .         >             I             i  R  R      0/            	      @)       X  0?        7         `                    &        i             {                O  V      %        P|  U    <             L  `]  R      pw                     h               %  Pn      _  X        e                                    `P  R    	  pK  $    R	  d  ?    	        	  `      
  01       L
  _  J    
  k  @    
          "   
          05       `  $  p       `*  p       -  I      A  q    J   <                                  @q  $      @-       !
  +       ]
    s    
  p  	    
              
  I  s        U      a                        z  U      Ћ      +  00       m             w  @Z        '  y            3         u  b        @  *      }      6  p      ;  M  V    w  E  V      @y        @       5    z    p                       =  V      Й      C  `C  u    x  h        @         *  p       P%       ;         z  :         $  =       :  >    "  02       d             n    	      03                       04       =  `$  9     z  @  q      8  F                   W      E             N   6       f  @          	      [      $  @G      a  @+         )  m       ("       	    I       !  0i      Y  ,         6       crtstuff.c __CTOR_LIST__ __DTOR_LIST__ __JCR_LIST__ __do_global_dtors_aux completed.6159 dtor_idx.6161 frame_dummy __CTOR_END__ __FRAME_END__ __JCR_END__ __do_global_ctors_aux org_opensc_pkcs11_PKCS11Provider.c org_opensc_pkcs11_wrap_PKCS11Slot.c org_opensc_pkcs11_wrap_PKCS11Session.c org_opensc_pkcs11_wrap_PKCS11Object.c org_opensc_pkcs11_wrap_PKCS11KeyPairGenerator.c org_opensc_pkcs11_spi_PKCS11SignatureSpi.c org_opensc_pkcs11_spi_PKCS11CipherSpi.c pkcs11_module.c pkcs11_unlock_mutex pkcs11_lock_mutex pkcs11_destroy_mutex pkcs11_create_mutex pkcs11_init_args pkcs11_slot.c pkcs11_error.c jnix.c jnixThrowExceptionInternalI jnixThrowExceptionInternal pkcs11_slot_make_jmechanisms jnixThrowException __i686.get_pc_thunk.bx new_pkcs11_module pkcs11_module_from_jhandle pkcs11_module_to_jhandle destroy_pkcs11_slot pkcs11_slot_to_jhandle jnixThrowExceptionIV __DTOR_END__ jnixThrowExceptionV __i686.get_pc_thunk.cx __dso_handle jnixThrowExceptionI pkcs11_slot_from_jhandle _DYNAMIC pkcs11_strerror __stack_chk_fail_local _GLOBAL_OFFSET_TABLE_ destroy_pkcs11_module new_pkcs11_slot lt_dlclose pthread_mutex_unlock@@GLIBC_2.0 Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenLabelNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initEncryptNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_waitForSlotNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_closeNative Java_org_opensc_pkcs11_wrap_PKCS11Object_deleteObjectNative pthread_mutex_destroy@@GLIBC_2.0 Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNativeOff stderr@@GLIBC_2.0 lt_dlerror Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptInitNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_initTokenNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getBooleanAttributeNative free@@GLIBC_2.0 Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getAttributeNative pthread_mutex_init@@GLIBC_2.0 _edata Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_deriveKeyNative _fini Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNativeOff __stack_chk_fail@@GLIBC_2.4 pthread_mutex_lock@@GLIBC_2.0 Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyPairNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenModelNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_unwrapKeyNative __cxa_finalize@@GLIBC_2.1.3 Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_hasTokenProtectedAuthPathNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_initSlotNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isRemovableDeviceNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getMechanismsNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_setPINNative realloc@@GLIBC_2.0 malloc@@GLIBC_2.0 Java_org_opensc_pkcs11_wrap_PKCS11Object_enumObjectsNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getFirmwareVersionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getDescriptionNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_verifyNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initSignNative __gmon_start__ Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateOffNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNativeOff lt_dlopen Java_org_opensc_pkcs11_wrap_PKCS11Object_getULongAttributeNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenManufacturerNative lt_dlinit Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_enumerateSlotsNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative1 Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyNative Java_org_opensc_pkcs11_wrap_PKCS11KeyPairGenerator_generateKeyPairNative Java_org_opensc_pkcs11_wrap_PKCS11Object_createObjectNative _end Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyInitNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getAllowedMechanismsNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateByteNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNative __vsnprintf_chk@@GLIBC_2.3.4 Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signInitNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNativeOff Java_org_opensc_pkcs11_wrap_PKCS11Session_signNative __bss_start Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative1 Java_org_opensc_pkcs11_wrap_PKCS11Slot_isHardwareDeviceNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_destroySlotNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_logoutNative Java_org_opensc_pkcs11_PKCS11Provider_unloadPKCS11Module Java_org_opensc_pkcs11_wrap_PKCS11Session_initPINNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenSerialNumberNative lt_dlexit Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initDecryptNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMinPinLenNative _Jv_RegisterClasses Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMaxPinLenNative Java_org_opensc_pkcs11_PKCS11Provider_loadNativePKCS11Module Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_signNative Java_org_opensc_pkcs11_wrap_PKCS11Session_loginNative __fprintf_chk@@GLIBC_2.3.4 Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateOffNative lt_dlsym mechanismFromJavaObject Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initVerifyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getManufacturerNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isTokenPresentNative _init Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateByteNative Java_org_opensc_pkcs11_wrap_PKCS11Session_wrapKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getHardwareVersionNative Java_org_opensc_pkcs11_wrap_PKCS11Session_openNative ELF          >    P*      @                @ 8  @                                                                             (      0                                                                                    $       $              Ptd                     T      T             Qtd                                                  Rtd                                                 GNU HXtЁ!E_    C         	   *A@@  @,P`dcXŢA T JIsp                     $   (                           *       +       .   0   1   2   3   4   5   7   8   <   >   @   A   B   C   E       G   I   J       L   N   Q   R   T   V   Y   [   ^           _       `       a   b   c   g   i           j   l       n   p   q   U~^0ٶWe繧/7ceuO(kU\$l0hR%թn!Da [ݩR31O_ƶy'2LeٺCz]9]F<dF$MJ-!zcѾiF!lL#̨Qف;Xtm <w9ߙ1`e,=ѣr4P.+?Gp+< -.62M9 ɹ[
p=6V0R.CE	F}퍸1pokH驤|HV7_έH`#Cd@eD*qX/U                             	 (                                   Q
                                                                                                                                                                                                                      B
                                          I
                                          [                       G                     2                                                                 L   "                                        @                          /             C          *           +      "       7    7                  C      /          `B                 @9             	     O            M     0      I           0~             o     P+      $                             06                 7             U    P;                [            1    ?                01             	     N                `            
     W      7                 *          :             o    Y                
 l                  w                0             	    @      <          3             X    |                02      c           h            S    `F                G               	 (              {    P5             	    I      :      5
    Q                                 I                 e            s
     S            
    r                /      I           0w      z           P0      I           `            
    `q      S                           {                 ]            
    0k                @      :           +      I       G    P      *      2    `X      7      [    0d      s      j    @            Z     u      ,      V
    o      g           ,      E       
                 
    :                 -      ;      L          <                *      H	    K                =      
          ~      /      O                =                                       PD                                  2            9    4             P                  J    P                 s                p<                  >            T    P,                              v    8             
    U            	    L                             D                  C    1      c        __gmon_start__ _fini _ITM_deregisterTMCloneTable _ITM_registerTMCloneTable __cxa_finalize _Jv_RegisterClasses Java_org_opensc_pkcs11_PKCS11Provider_loadNativePKCS11Module Java_org_opensc_pkcs11_PKCS11Provider_unloadPKCS11Module Java_org_opensc_pkcs11_wrap_PKCS11Slot_initSlotNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_destroySlotNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_initTokenNative __stack_chk_fail Java_org_opensc_pkcs11_wrap_PKCS11Slot_enumerateSlotsNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_waitForSlotNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isTokenPresentNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isRemovableDeviceNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isHardwareDeviceNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getManufacturerNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getDescriptionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getHardwareVersionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getFirmwareVersionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getMechanismsNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenLabelNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenManufacturerNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenModelNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenSerialNumberNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMinPinLenNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMaxPinLenNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_hasTokenProtectedAuthPathNative mechanismFromJavaObject Java_org_opensc_pkcs11_wrap_PKCS11Session_openNative Java_org_opensc_pkcs11_wrap_PKCS11Session_closeNative stderr __fprintf_chk Java_org_opensc_pkcs11_wrap_PKCS11Session_loginNative Java_org_opensc_pkcs11_wrap_PKCS11Session_logoutNative Java_org_opensc_pkcs11_wrap_PKCS11Session_initPINNative Java_org_opensc_pkcs11_wrap_PKCS11Session_setPINNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateByteNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateByteNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateOffNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateOffNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyPairNative Java_org_opensc_pkcs11_wrap_PKCS11Session_wrapKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_unwrapKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_deriveKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Object_enumObjectsNative malloc realloc free Java_org_opensc_pkcs11_wrap_PKCS11Object_getAttributeNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getAllowedMechanismsNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getULongAttributeNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getBooleanAttributeNative Java_org_opensc_pkcs11_wrap_PKCS11Object_createObjectNative Java_org_opensc_pkcs11_wrap_PKCS11Object_deleteObjectNative Java_org_opensc_pkcs11_wrap_PKCS11KeyPairGenerator_generateKeyPairNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initSignNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative1 Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_signNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initVerifyNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative1 Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_verifyNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNativeOff pthread_mutex_unlock pthread_mutex_lock pthread_mutex_destroy pthread_mutex_init lt_dlinit lt_dlopen lt_dlsym lt_dlexit lt_dlerror lt_dlclose calloc __vsnprintf_chk libltdl.so.7 libc.so.6 _edata __bss_start _end GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.2.5                                                                                                                                      3         ti	   U     ii
   a     ui	   k                    +                   *                                                                            P                                                       	                                                                                                                                    (                    0                    8                    @                    H         
           P                    X                    `         
           h                    p                    x                                                                                                                        HH  HtC  H              5  %  @ %  h    %  h   %  h   %  h   %  h   %  h   %  h   %  h   p%  h   `%  h	   P%  h
   @%  h   0%  h    %  h
   %  h    %z  h   %r  h   %j  h   %  f%  fH=  H  UH)HHvH^  Ht	]fD  ]@ f.     H=y  H5r  UH)HHHH?HHtH)  Ht]f     ]@ f.     =)   u'H=   UHtH=  EH]   @ f.     H=  H? u^fD  H  HtUH]@SHHv  HtHH[Sy   1[ff.     SHHDy  HtHH[sy   [f.     @ USHHHHy  Ht'HHHyy  HtHHH[]Sz   H1[]    ATUHSIHx  Ht)LHH+z  HtHHH[]A\Tz  @ []A\Ðf.     UHHAWAVAUATISILMHHdH%(   HE1Lx  H   LLIy  HI   H  IHLX  HcMHHQHMLHH)HT$HHUI1A@  H        LLHEHEH]HEHEIX   ~9HJ  H5k  L1ф  HEdH3%(   uHe[A\A]A^A_] M1ILLA@  ID$hI~HHUHuPPtMD$H
*  H5K  L1  D  HE    HE    (~@ f.     UHHAVAUATSIHHE    dH%(   HE1v  H   IH@hLu11LP(   HE1LH   HH)IEhH\$HHP(   HuH   HH)1Ll$IHt HIT HH9uI$L  HI$MM1HL  HHMdH3%(   u:He[A\A]A^]    MEH
  H5  L1袄  115D  SHHHdH%(   HD$1u  1HtH@h11H   H$u H\$dH3%(   Hu+H[    H
W  H5b  H1  1 f.     USHHHHu  Ht'HH|v  HtH@pH[]f     H1[]    USHHHHt  Ht'HH,v  HtH@pH[]HfD  H1[]    USHHHHlt  Ht'HHu  HtH@pH[]HD  H1[]    AUATHUSHHHt  HtmHHu  HItZH@o    D  H҉t8 StHE H  IHE MEP1LH  LH[]A\A]1fAUATHUSHHHs  HtmHHt  HItZH@O@   D  H҉t8 StHE H  IHE ME1LH  LH[]A\A]1fUSHHHHr  Ht?HHlt  Ht/Pyf@xf**Y  H[]X@ Hf[] f.     USHHHHr  Ht?HHs  Ht/P{f@zf**Y  H[]X@ Hf[] f.     UHHAWAVAUATISHHHE    dH%(   HE1q  H   HLIcs  HH   HxID$hL}1LP@unHEH{LH   HH)ID$hLl$ILP@u<LELHLLGs  HMdH3%(   u:He[A\A]A^A_]f     DCH
  H5^  L1  1f     AUATHUSHHHq  H   HHtr  HI   @ptbI$       
 H҉t8 StHE H  IHE M$   1LH  LH[]A\A]fD@H
  H5     H1?  x1fD  AUATHUSHHH8p  H   HHq  HI   @ptbI$       
 H҉t8 StHE H  IHE M$   1LH  LH[]A\A]fD@H
΁  H5     H1o~  x1fD  AUATHUSHHHho  H   HHp  HI   @ptjI$      D  : XuHHۉuHE H  IHE M$   1LH  LH[]A\A]f@ D@H
  H5     H1}  p1@ f.     AUATHUSHHHn  H   HHo  HI   @ptjI$      D  : XuHHۉuHE H  IHE M$   1LH  LH[]A\A]f@ D@H
  H5     H1|  p1@ f.     USHHHHm  H   HHo  HH   @ptFH  Hw	H;  v#DCH  H5{~  H1z  H  H[]ÐD@H
^  H5N~  1   H{  H  HvD  H1[]D  f.     USHHHHl  H   HHHn  HH   @ptFH  Hw	H;  s#DCHj~  H5}  H1y  H  H[]ÐD@H
~  H5~}  1   H/{  H  HvD  H1[]D  f.     USHHHHl  Ht_HH|m  HHtL@ptH   H[]Hf     D@H
}  H5|     H1z  D  H1[]f.     D  UHAUATSHHF    HF    dH%(   HE1Ht,HHIIH5~  P0HHLH   u#HEdH3%(   uZHe[A\A]]f     HLHX  HcЉLIT$HHHH)1LD$IMD$LA@  ED  AUATHUSIHEHdH%(   HD$1j  HtLHHl  HItiAHEhI|$HI1H1HPhH$u H\$dH3%(   Hu0H[]A\A]fED$H
}  H5={  H1x  1     AUATHUSHIMHi  Ht$HLHRk  HHtHChLPpuH[]A\A]ÐHѴ  HMH}  LC   H8H1[]A\A]UHHAWAVAUATISMHH8DML}dH%(   HE1Gi  H   LHIj  HI   M   HLHX  Lc؉HISL]LHHH)1LL$IMLM@  LML]ID$hHcuLLL   tEEH
|  H5y  H1uw  HEdH3%(   uHe[A\A]A^A_]    E1E1 AUATHUSHIMHEh  Ht'HLHi  HHtHChL   uH[]A\A]fD  Qk  IH  HMLCHX|     H8H1[]A\A]D  f.     UHHAWAVAUATMSIHH(LEdH%(   HE1g  H   LHIh  HI   M   HLHX  LcLIRLULHHH)1Ld$IMA@  LUIGhLLH}PXtEFH
{  H5x  H1u  HEdH3%(   u He[A\A]A^A_]f     E1E13 UHHAWAVAUATISMHH8LELmdH%(   HE1wf  H   LHIg  HI   M   HLHX  HcLLHQHMH߉HH)HT$HHUI1A@  M   HLHX  LcLIQLMLHHH)1Lt$IMA@  LMID$hMLHUHuH}P`tEGH
wz  H5v  H1\t  HEdH3%(   u9He[A\A]A^A_]fD  MHE    HE    BE1E1|D  f.     UHHAWAVAUATISMHH8LELedH%(   HE1d  H   LHIPf  HItwEMHE    HE    HEtBHLHX  HcLHUHLHHH)1LD$ILEA@  IFhHuLH}X  u!HEdH3%(   u2He[A\A]A^A_] EEH
5y  H5>u  H1r  f.     UHHAWAVAUATMSIHMH(dH%(   HE1c  H   LHI5e  HItwU   M   E   LcULLMUHIBLUHH)HD$HIHEA@  LUHELIMhLHh  u&HEdH3%(      He[A\A]A^A_]@ ED$H
4x  H5t  H1q      MHWu  H5s  H1
p   MHu  H5s  H1o  r     Hu  H5s  H1o  M@ f.     AVAUHATUISMHEHdH%(   HD$1@b  Ht6LHHc  HIt HEhDt$Ht$   Lh  u%HD$dH3%(   u6H[]A\A]A^     ED$H
w  H5r  H1p  :f.     UHHAWAVAUATISMHH(HE    dH%(   HE1wa  H   LHIb  HI   IGhHM1LHHMp  HM   HEHLHHH)IGhLt$ILp  uWHuH  I1MtHMM1LH  LHudH34%(   u7He[A\A]A^A_]fD  EEH
u  H5q  H1jo  1UHHAWAVAUATISMHH8LEHE    dH%(   HE1C`  H\  LHIa  HHEA  U\  Mu  EMHwr  H  LcmMLUHIEHH)HD$HIHM@  ID$hLM1LLH}MLM`  LM   HEMLLH}HHH)ID$hLt$IL`     HuH  I1MtHMM1LH  LHMdH3%(      He[A\A]A^A_]D  HMDAH
q  H5
p  H1m  1f.     HMDAH
t      MHp  H5o  H1k  1oHp  H5o  H1k  1PfUHHAWAVAUATISMHH8LELedH%(   HE17^  H   LHI_  HItwEMHE    HE    HEtBHLHX  HcLHUHLHHH)1LD$ILEA@  IFhHuLH}  u!HEdH3%(   u2He[A\A]A^A_] EEH
r  H5n  H1Bl  f.     UHHAWAVAUATMSIHMH(dH%(   HE1]  H   LHI^  HI   E   M  E   E9E|LcULLMUHIBLUHH)HD$HIHEA@  LUHELIMhLH  uGHEdH3%(      He[A\A]A^A_]D  MHn  H5_m  H1ui   ED$H
q  H5=m  H1j      MHNn  H5m  H1-i  q     HAn  H5l  H1i  L>@ f.     AUATHUSIHMHdH%(   HD$1DL$[  Ht1LHH\  HItHEhHt$   L  u"HD$dH3%(   u3H[]A\A]    ED$H
p  H55l  H1i  fUHHAWAVAUATMSIHMH(dH%(   HE1Z  H   LHI5\  H   M   HEHLHX  LcLIRLULHHH)1Ld$IMA@  LUIFhLLA   L  t,E1=   t"LMH
o  H5Ak  H1EAh  HMdH3%(   Du4He[A\A]A^A_]HQl  H5k  H1g       E1FfD  UHHAWAVAUATISIMH8LELe dH%(   HE1Y  H9  LLHZ  HI  U   M0  EMHk     HcEULLHEHHH)HD$HHIHMIȋM@  M   ILLX  LcMIQLMLLHH)1Ll$IMA@  HChLMLHUHu   H}M  t
1=   uD@ HMdH3%(   ukHe[A\A]A^A_]ËMHj  H5oi  L1e  1EFH
j  H5Ni  L1g  Hj  H52i  L11Fe  D  f.     UHHAWAVAUATISMHH8LELedH%(   HE1W  H   LHI Y  HItwEMHE    HE    HEtBHLHX  HcLHUHLHHH)1LD$ILEA@  IFhHuLH}  u!HEdH3%(   u2He[A\A]A^A_] EEH
l  H5h  H1e  [f.     UHHAWAVAUATISMHH8LELedH%(   HE1V  H   LHI X  HItwEMHE    HE    HEtBHLHX  HcLHUHLHHH)1LD$ILEA@  IFhHuLH}   u!HEdH3%(   u2He[A\A]A^A_] EEH
k  H5f  H1d  ;f.     UHHAWAVAUATISMHH8LEHE    dH%(   HE1sU  Hu  LHIV  HHEZ  U4  MJ  EMHg     LcmMLUHIEHH)HD$HIHM@  ID$hLM1LLH}MLM   LM   HEMLLH}HHH)ID$hLt$IL   uVHuH  I1MtHMM1LH  LHMdH3%(   uzHe[A\A]A^A_]D  HMH5Me  H1DAH
[j  b  1fMHVf  H5e  H15a  1HRf  H5e  H1a  1wM f.     UHHAWAVAUATISMHH8LEHE    dH%(   HE1S  Hu  LHIT  HHEZ  U4  MJ  EMHe     LcmMLUHIEHH)HD$HIHM@  ID$hLM1LLH}MLM   LM   HEMLLH}HHH)ID$hLt$IL   uVHuH  I1MtHMM1LH  LHMdH3%(   uzHe[A\A]A^A_]D  HMH5]c  H1DAH
h  a  1fMHfd  H5/c  H1E_  1Hbd  H5c  H1)_  1w] f.     UHHAWAVAUATISMHH8LELm dH%(   HE1Q  H   LHI S  HItuuMHc  xSMHc  .  Md  M  HLHX  U(HHEx	HcU(H9sFM(Hc  H5-b  H1C^  1HMdH3%(   (  He[A\A]A^A_]    H)LcULHEHMHULH)HHD$LUHHEIBHH)HD$HIHEA@  LUHELEM\$hHMH}LHA   uFHLELMU(H  E4D  Hb  H5Ba  H1X]   EGH
Ef  H5a  H1^  1 MHWb  H5`  H1
]  1AUHHAWAVAUATISMHH8LELm dH%(   HE1O  H   LHIP  HItuuMHa  xSMHa  .  Md  M  HLHX  U(HHEx	HcU(H9sFM(Ha  H5`  H13\  1HMdH3%(   (  He[A\A]A^A_]    H)LcULHEHMHULH)HHD$LUHHEIBHH)HD$HIHEA@  LUHELEM\$hHMH}LHA   uFHLELMU(H  E4D  H`  H52_  H1H[   EGH
]d  H5_  H1\  1 MHG`  H5^  H1Z  11UHHAWAVAUATISMHH(HE    dH%(   HE1wM  H   LHIN  HI   IGhHM1LHHM(  HM   HEHLHHH)IGhLt$IL(  u_HuHttHH  I1MtHMM1LH  LH]dH3%(   u9He[A\A]A^A_]     EEH
%c  H5]  H1b[  1f     UHHAWAVAUATISMHH(HE    dH%(   HE17L  H   LHIM  HI   IGhHM1LHHM  HM   HEHLHHH)IGhLt$IL  u_HuHttHH  I1MtHMM1LH  LH]dH3%(   u9He[A\A]A^A_]     EEH

b  H5n\  H1"Z  1f     UHHAWAVAUATISMHH8LEHE    dH%(   HE1J  Hu  LHI\L  HHEZ  U4  MJ  EMH']     LcmMLUHIEHH)HD$HIHM@  ID$hLM1LLH}MLM  LM   HEMLLH}HHH)ID$hLt$IL  uVHuH  I1MtHMM1LH  LHMdH3%(   uzHe[A\A]A^A_]D  HMH5Z  H1DAH
\  vX  1fMH[  H5Z  H1V  1H[  H5Z  H1V  1w f.     UHHAWAVAUATISMHH8LEHE    dH%(   HE1I  Hu  LHIlJ  HHEZ  U4  MJ  EMH7[     LcmMLUHIEHH)HD$HIHM@  ID$hLM1LLH}MLM   LM   HEMLLH}HHH)ID$hLt$IL   uVHuH  I1MtHMM1LH  LHMdH3%(   uzHe[A\A]A^A_]D  HMH5X  H1DAH
Z  V  1fMHY  H5X  H1T  1HY  H5X  H1T  1w f.     UHHAWAVAUATISHHxHELxDtLuHhdH%(   HE1G  HHE  HLmH  Ht  IH5]  LP0HHX  IH
Y  HY  HL  HHE.  IH
Y  HY  HL  HHE  ILLE1MX  HHHEH@H   HH)HD$HHH`H      fME HHUL1IHA  ME HHUHCLL1A  IIE LLX  HcM] HSHLHLH)1LD$ILCA@  L9etOIE DLLh  HIX     1HMdH3%(      He[A\A]A^A_]@ MHctH]HhLHHEdHELEHMH`HHxH@h  uHEH
7X  H5V  L1S  dOD  f.     UHHAWAVAUATISHH   HELPDLH@HEHpHE H`dH%(   HE1`D  HHX  HLE  Hx  IH5[  LP0HH\  IH
HW  HEW  HL  HI3  IH
+W  H)W  HL  HHx  IHpLE1X  HHHhH@H   HH)HD$HHH8H      @ MHLL1IHA  MHHxHCLL1A  IILLX  HcMHSHLHLH)1LD$ILCA@  L9htFIDHpLh  HIT1HMdH3%(     He[A\A]A^A_]IH`LE1X  HHHpH@H   HH)HD$HHH0H      f.     MHLL1IHA  MHHxHCLL1A  IILLX  HcMHSHLHLH)1LD$ILCA@  L9pt.IDH`Lh  HIT    HcLH]H@LHHEHXHUHhLpL0HHPH@hRHURH8  ZYuOI   L  HH?HELE   1HLHEHEHEI  HH
+T  H5Q  L1O  1+f.     UHHAWAVAUATISMHMcHHHEHE    HEdH%(   HE1\@  H  LHIA  HHE  LuHUHLeLaIEhLUE1HM HULMLUL  LU   HEMHM HULLHHH)IEhLd$IM  u]HuHtvHH  I1MtHMM1LH  LHMdH3%(   u;He[A\A]A^A_]fD  HMH5mP  H1DAH
R  N  1 f.     UHHAWAVAUATISHH   HELpDlH`HE HEHE(HEdH%(   HE1>  HHx  HL+@  Hr  IH5xU  LP0HHV  IH
Q  HQ  HL  HHE,  IH
Q  HQ  HL  HHE  IHuLE1X  LcKDm H   HH)HD$HMHXH   LMI   fD  ME HHUL1IHA  ME HHUHCLL1A  IIE LLX  HcM] HSHLHLH)1LD$ILCA@  M9tHIE DHuLh  HIX1HMdH3%(      He[A\A]A^A_]@ LMIHclH`H]LHHEIHuLX  LcMIVHuLHH)1Ld$IMA@  HxHULLXMHHpH@hRHUAU  ZYu	HE/H
O  H5oM  L1#K  f     UHHAWAVAUATISHHxHELxDtLu HhdH%(   HE1;  HHE  HLM=  Ht  IH5R  LP0HHX  IH
N  HN  HL  HHE.  IH
N  HN  HL  HHE  ILLE1MX  HHHEH@H   HH)HD$HHH`H      fME HHUL1IHA  ME HHUHCLL1A  IIE LLX  HcM] HSHLHLH)1LD$ILCA@  L9etOIE DLLh  HIX     1HMdH3%(      He[A\A]A^A_]@ MHctH]HhLHHEDHELMLEH`HUHHxH@h  uHEH
uM  H5J  L1H  `+f.     UHHAWAVAUATISHHh  LLdH%(   HE1a9  HH  HL:  HH  IH5P  LP0HHk  IH
BL  H?L  HL  HH>  IH
!L  HL  HL  HH  IHLE1X  LcKDm H   HH)HD$HMHxH   LMI   f     ME HHL1IHA  ME HHHCLL1A  IIE LLX  HcM] HSHLHLH)1LD$ILCA@  M9tGIE DHLh  HIO1H}dH3<%(     He[A\A]A^A_]LMIǿ   XHI  HLHxHH@h     HHHǅ        HHHHHH@h     H1E1H   fHIHH9u   H LALLI   D  HL葻HI   IEhH    HH      HIcI41Ht     HHHH9uAI   H LtLLHHH@h      IDL  HIMD1HL  LH LLHHL  H5F  LHH1B  LԹHLH
L  H5sF  1DGL#D  HH
{L  DGH5HF  L1C  HH
L  DGHH
pL  DGm f.     UHHAWAVAUATISMHMH(dH%(   HE14  H	  LHI6  H   HcEL}HE    HE       LLLHEIFh      HEH   H   LHLLH)HD$HHEIFh   uVHuHttHH  IHLEM1LH  LHMdH3%(   uMHe[A\A]A^A_]@ DEH
K  H5D  H1zB  1fD  DEH
K     f     UHHAWAVAUATISMHMH8dH%(   HE1<3  H   LHI4  HI   IGhLEHE  @HE    HE       LLELL   LE   HEH   H   LHLLH)HD$HHEIGh   uCLEItYHMILLHC4  HMdH3%(   uBHe[A\A]A^A_]D  H
J  H5`C  H1A  1fH
K     蝶 f.     AVAUHATUISMHMH0dH%(   HD$(1HD$1  H   LHH@3  H   HcD$`HD$    HT$   LLHD$HD$HD$HEh   u<LD$ D$ItNDL$`H
J  H5zB     H1+@  1(    DD$`H
I  H5MB  H1@  1HL$(dH3%(   u
H0[]A\A]A^} f.     AVAUHATUISMHMH0dH%(   HD$(1D$ 0  H   LHH$2  H   HcD$`HD$    HT$   LLHD$HD$HD$HEh   u@LD$ D$ItQDL$`H
tJ  H5]A     H1?  1+f.     DD$`H
G  H5-A  H1>  1HL$(dH3%(   u
H0[]A\A]A^] f.     UHHAWAVAUATISMHHHLEdH%(   HE1/  HHE~  HL1  Hj  IH5PF  LP0HHN  IH
B  HB  HL  HHE$  IH
hB  HfB  HL  HHE   ILLE1MX  HHHEH@H   HH)HD$HHHEH       ME HHUL1IHA  ME HHUHCLL1A  IIE LLX  HcM] HSHLHLH)1LD$ILCA@  L9et?IE DLLh  HIX1HMdH3%(   uVHe[A\A]A^A_]MHEHMHUHuH}H@h   uHEH
H  H5>  L1<  $@ AVAUHATUISMHM-  Ht'LHH.  HtHEhLL   u[]A\A]A^    HH
CH  H5W>  []A\A]A^1<  fD  UHHAWAVAUATISHH   HELPDLHpHEH`dH%(   HE1,  HHX  HL0.  H{  IH5}C  LP0HH_  IH
?  H?  HL  HI6  IH
?  H?  HL  HHx	  IHpLE1X  HHHhH@H   HH)HD$HHH@H          MHLL1IHA  MHHxHCLL1A  IILLX  HcMHSHLHLH)1LD$ILCA@  L9htNIDHpLh  HIT1HMdH3%(     He[A\A]A^A_]     IH`LE1X  HHHpH@H   HH)HD$HHH8H      f.     MHLL1IHA  MHHxHCLL1A  IILLX  HcMHSHLHLH)1LD$ILCA@  L9pt.IDH`Lh  HIT    HcLHUHhHE    HE    HuLpL8HPHEHXH@hRHURH@  ZYuOI   L  HH<HELE   1HLHEHEHEI  HH
<  H5H:  L17  1萭AVAUHATUISMHMH dH%(   HD$1(  HtHLHHM*  HIt2HcD$PHHD$    HD$    LLH$HEhX  u#HD$dH3%(   u4H []A\A]A^fD  ED$H
t=  H5}9  H117  ʬf.     UHHAWAVAUATMSIHMH(dH%(   HE1(  H   LHIu)  HI   E   M  E   E9E|LcULLMUHIBLUHH)HD$HIHEA@  LUHELIMhLHh  uGHEdH3%(      He[A\A]A^A_]D  MH9  H5O8  H1e4   ED$H
D<  H5-8  H15      MH>9  H58  H14  q     H19  H57  H13  L.@ f.     AVAUHATUISMHEHdH%(   HD$1p&  Ht6LHH'  HIt HEhDt$Ht$   Lh  u%HD$dH3%(   u6H[]A\A]A^     ED$H
4;  H57  H14  jf.     UHHAWAVAUATISMHH(HE    dH%(   HE1%  H   LHI'  HI   IGhHM1LHHMp  HM   HEHLHHH)IGhLt$ILp  uWHuH  I1MtHMM1LH  LHudH34%(   u7He[A\A]A^A_]fD  EEH
%:  H55  H13  11AVAUHATUISMHMH dH%(   HD$1$  HtHLHH%  HIt2HcD$PHHD$    HD$    LLH$HEh  u#HD$dH3%(   u4H []A\A]A^fD  ED$H
|9  H55  H12  jf.     UHHAWAVAUATMSIHMH(dH%(   HE1#  H   LHI%  HI   E   M  E   E9E|LcULLMUHIBLUHH)HD$HIHEA@  LUHELIMhLH  uGHEdH3%(      He[A\A]A^A_]D  MHO5  H53  H10   ED$H
T8  H53  H11      MH4  H53  H1/  q     H4  H53  H1/  LΦ@ f.     AUATHUSIHMHdH%(   HD$1DL$"  Ht1LHH}#  HItHEhHt$   L  u"HD$dH3%(   u3H[]A\A]    ED$H
L7  H52  H1y0  fUHHAWAVAUATMSIHMH(dH%(   HE1\!  H   LHI"  H   M   HEHLHX  LcLIRLULHHH)1Ld$IMA@  LUIFhLLA   L  t,E1=   t"LMH
6  H51  H1EA/  HMdH3%(   Du4He[A\A]A^A_]H2  H51  H1-       E1֤fD  AVAUHATUISMHMH dH%(   HD$1    HtHLHH!  HIt2HcD$PHHD$    HD$    LLH$HEh   u#HD$dH3%(   u4H []A\A]A^fD  ED$H
5  H50  H1q.  
f.     AVAUHATUISMHMH dH%(   HD$1P  HtHLHH   HIt2HcD$PHHD$    HD$    LLH$HEh  u#HD$dH3%(   u4H []A\A]A^fD  ED$H
4  H5/  H1-  :f.     UHHAWAVAUATISHH8LELudH%(   HE1HE    r  HT  LHI  HHE9  E c  Mf  E   E9E    Lcm M LUHIEHH)HD$HIHM@  ID$hLM1LLH}MLM   LM   HEMLLH}HHH)ID$hLt$IL   uxHuH  I1MtHMM1LH  LHMdH3%(      He[A\A]A^A_] MH/  H5?.  H1U*  1뼐HMH5%.  H1DAH
33  +  1f.     M H&/  H5/  H5-  H1)  1`0UHHAWAVAUATISHH8LELudH%(   HE1HE    r  HT  LHI  HHE9  E c  Mf  E   E9E    Lcm M LUHIEHH)HD$HIHM@  ID$hLM1LLH}MLM   LM   HEMLLH}HHH)ID$hLt$IL   uxHuH  I1MtHMM1LH  LHMdH3%(      He[A\A]A^A_] MH-  H5?,  H1U(  1뼐HMH5%,  H1DAH
[1  )  1f.     M H&-  H5-  H5+  H1'  1`0UHHAWAVAUATISHH8LELudH%(   HE1Lm(v  H   LHI  HItvM   MH,  [  EuzE9E |rM9  HLHX  U0HHEx	HcU0H9slM0H,  H5+  H1!'  1HMdH3%(   A  He[A\A]A^A_]D  MH',  H5*  H1&  1f     H)LcU LHEHM HULH)HHD$LUHHEIBHH)HD$HIHEA@  LUHELEM\$hHMH}LHA   u^HLELMU0H  ED  H+  H5)  H1&   M H+  f     EGH
.  H5)  H1r'  1fD  UHHAWAVAUATISHH8LELudH%(   HE1Lm(F  H   LHI  HItvM   MHz*  [  EuzE9E |rM9  HLHX  U0HHEx	HcU0H9slM0H*  H5(  H1$  1HMdH3%(   A  He[A\A]A^A_]D  MH)  H5(  H1$  1f     H)LcU LHEHM HULH)HHD$LUHHEIBHH)HD$HIHEA@  LUHELEM\$hHMH}LHA   u^HLELMU0H  ED  H{)  H5'  H1#   M H(  f     EGH
,  H5'  H1B%  1֚fD  UHHAWAVAUATISMHHHHE    L}dH%(   HE1HE      H  LHIt  HHE  E <  M?  E  E9E   Lcu LUHL}IFHH)HD$HHHIHMM @  ID$h1MLHuL      HUHBHH)HD$HHHHE   ID$hL}1LL(  ]  HuH   E1HuH  H   HMH   HMHtLHHEMUHA  HEH]dH3%(   1  He[A\A]A^A_]    ID$hMLHuL   <H}H
*  DGH5z%  H1.#  1f.     HID$hLHLH)Lt$IL(  u\Hu LHHELE1HA  HED  MHO&  H5$  H1!  1fD  H}H
=*  DGC@ M H%  H%  H5$  H1   1UHHAWAVAUATISMHHHHE    L}dH%(   HE1HE    +  H  LHI  HHE  E <  M?  E  E9E   Lcu LUHL}IFHH)HD$HHHIHMM @  ID$h1MLHuL      HUHBHH)HD$HHHHE   ID$hL}1LL  ]  HuH   E1HuH  H   HMH   HMHtLHHEMUHA  HEH]dH3%(   1  He[A\A]A^A_]    ID$hMLHuL   <H}H
'  DGH5"  H1N   1f.     HID$hLHLH)Lt$IL  u\Hu LHHELE1HA  HED  MHo#  H5"  H1%  1fD  H}H
'  DGC@ M H#  H#  H5!  H1  1UHHAWAVAUATISHHXLELmdH%(   HE1Lu(V  HtyLHI  HItcU p  M  EumE9E |eHLHX  LcȋE0x	HcE0I9sSM0H"  H5!  H1  1HMdH3%(   j  He[A\A]A^A_]@ MH"  @ I)LM IALMLMLHHH)HD$HHEHcE HPHEHH)HT$HIHUUA@  HELULEM\$hHMH}HLA   LMufHuID$hHUH}I)HuLM(  uhHMHMLLLEHߋU0MA  EfD  M H!  EGH
$  H5  H1r  D  EGH

%   H   H5  H1  1Ԓ@ UHHAWAVAUATISHHXLELmdH%(   HE1Lu(  HtyLHI  HItcU p  M  EumE9E |eHLHX  LcȋE0x	HcE0I9sSM0H   H5  H1  1HMdH3%(   j  He[A\A]A^A_]@ MH  @ I)LM IALMLMLHHH)HD$HHEHcE HPHEHH)HT$HIHUUA@  HELULEM\$hHMH}HLA   LMufHuID$hHUH}I)HuLM  uhHMHMLLLEHߋU0MA  EfD  M H  EGH
"  H5~  H12  D  EGH
"   H  H5J  H1`  1蔐@ UHHAWAVAUATISHH8LELudH%(   HE1  H\  LHIC
  HHEA  E k  Mn  E  E9E    Lcm M LUHIEHH)HD$HIHM@  ID$hLM1HE    LLMLMH}  LM   HEMLLH}HHH)ID$hLt$IL  uxHuH  I1MtHMM1LH  LHMdH3%(      He[A\A]A^A_] MH  H5  H1  1뼐HMH5  H1DAH
I  .  1f.     M H  H  H5F  H1\  1`萎UHHAWAVAUATISHH8LELudH%(   HE1	  H\  LHIC  HHEA  E k  Mn  E  E9E    Lcm M LUHIEHH)HD$HIHM@  ID$hLM1HE    LLMLMH}   LM   HEMLLH}HHH)ID$hLt$IL   uxHuH  I1MtHMM1LH  LHMdH3%(      He[A\A]A^A_] MH  H5  H1  1뼐HMH5  H1DAH
g  .  1f.     M H  H  H5F  H1\  1`萌UHHAWAVAUATISHH8LELudH%(   HE1Lm(  H   LHI?	  HItvM   MH
  [  EuzE9E |rM9  HLHX  U0HHEx	HcU0H9slM0H.  H5k  H1  1HMdH3%(   A  He[A\A]A^A_]D  MH  H5'  H1=  1f     H)LcU LHEHM HULH)HHD$LUHHEIBHH)HD$HIHEA@  LUHELEM\$hHMH}LHA  u^HLELMU0H  ED  H  H5Z  H1p   M Hn  f     EGH
  H5  H1  1ffD  UHHAWAVAUATISHH8LELudH%(   HE1Lm(  H   LHI  HItvM   MH  [  EuzE9E |rM9  HLHX  U0HHEx	HcU0H9slM0H  H5;  H1Q  1HMdH3%(   A  He[A\A]A^A_]D  MHW  H5  H1
  1f     H)LcU LHEHM HULH)HHD$LUHHEIBHH)HD$HIHEA@  LUHELEM\$hHMH}LHA   u^HLELMU0H  ED  H  H5*  H1@   M H>  f     EGH
  H5  H1  16fD  HtHrHHHЃÐ   f.     HtH҈HHHЃÐ   f.     HtSH҇H蚇1[fD     f.     H   t9USH(   HHŸ   Ht1H<uH+1H[] H0H   [] AUATIUSHx   H膇H   оH@    HH@p    HE H5;  HP0HI5  "Z  HE H
  H  LH  H  HM HL1H  HI   HE LHX  LcA|$Hc҆HIHCR  HE 1DLH@  HCB  H{kHHCp>  H5  HφHV  H{hЅu<HChH=M  P   HChH{PHH؅   H[]A\A]fLCH
]  H5^  H1  H{Ht脅H|'H1[]A\A]f.     HI  H5  H1(  H1[]A\A] LCH
   LCH
5  H5  H1  u    H      H	  H5  H1
  A ۄHKH  H5y  IH1
      諄HKH  H5I  IH1\
      Hff.     HHt>оHuH    HHv  H5  1
  1HÐHFhSH1PH{pHtH{HtH[附f     AUATIUSIP     HHH    HhHpHID$hHP0u]CpHuH[]A\A]ÐID$hH   HP8HH؅tH
E  H5  AL1
  HA1D  H
  H5  AL1
  f     H  H5  L1  1eHff.     HHt>HuH    HH  H5o  1  1HÐH阂     AWAVIAUATIUSHHH5  HHdH%(   HD$81HL$P0H   IHH
  H  LH  HHD$   L$$H1LHD`  HHD$   M   HD$ E1HD$[HLM HD$8LHP1DL$8DD$0HT$ A   HZYt\LDHHt$HIHAp  L9$$t]IFhIHT$Hu PHtDE H
  H5  H1  1HL$8dH3%(   uHH[]A\A]A^A_fD  HD$<f.     f     ~r          t  ~            H  t(     H  t   H[!  f   @     	        0H#  tY   H  t!H     !    ^    r  ,    H  d    H  K  HS!     g     q       H8       H     H  <  f        ,  ~     H       H     Ha     D  `    dH  T  bHs  >cHv     Ð        H      Hv    H  uDÐ  E H    H  H  H[      H  {  H  eH  u@ HU  ÁP  HA  8  `  H=  p  HB  r      H3  H	    H{    H  #ÃPH~    QH~  TH       iH  kHI  ^jH
  NpH  Ð   H  (H     H     H  [     H    H  H          H       H     H      1H  S2H  fD    H  (   H  {        HL     HK  K        H     H         H(     H*          H  h   HI       eH  ;fH  fD  
H  yfD     H  ^ AH  IfD     H  . H  fD  0  H   HR  H       HY       H|       H       H       H       Hv       H       HN       H       HT       H       H       UHAVAUATSILMIIH Hc7   dH%(   HE1HFHH)I H\$HEI@HHHEI@IHHEpy|+A9.AHEdH3%(   uDHe[A\A]A^]@ A& I$A    LLP0HtI$HHLQpx     UHAWAVAUATISIIAκ   HH(Hc7dH%(   HE1HFHH)IH\$HEIAHHHEIALMHEx|1A94AHEdH3%(      He[A\A]A^A_]@ A' I$LA    LP0HItI$H
A  H&  LL  HItI$HL8  HwM$ID1LLLA   HRI$HLRh@Iwf     AVAUIATUISIH   HL$HLD$PLL$Xt:)D$`)L$p)$   )$   )$   )$   )$   )$   dH%(   HD$(1Hl$H\$D$   f     H$  ILLLHHD$HD$0D$   D$0   HD$ D$uHT$(dH3%(   uH   []A\A]A^Cv AWAVIAUATIUSIHH8dH%(   HD$(1H\$Ld$D$   @ HE ILLLLHHEHCHEHCeD$uHT$(dH3%(   uH8[]A\A]A^A_u@ AWAVIAUATIUSIAH   LD$PLL$Xt:)D$`)L$p)$   )$   )$   )$   )$   )$   dH%(   HD$(1Hl$H\$D$   f     H$   IMDLLHD$HD$0HD$    D$0   HD$ BD$uHT$(dH3%(   uH   []A\A]A^A_t@ f.     AWAVIAUATIUSAILHHdH%(   HD$81HD$H\$ D$   HD$@ HU H|$IMDLHHUHSHUHSLD$uHL$8dH3%(   uHH[]A\A]A^A_s   HH   Length of label exceeds 32 bytes        java/lang/IllegalArgumentException      C_InitToken failed for module %s.       org/opensc/pkcs11/wrap/PKCS11Exception  C_GetSlotList failed for module %s.     C_GetMechanismList for PKCS11 slot %d failed.   Invalid value %u for ulMinPinLen of token in slot %d.   Invalid value %u for ulMaxPinLen of token in slot %d. C_WaitForSlotEvent failed. No token present in slot %d.   {Gz?Invalid data length %d. NULL input data. Invalid input offset %d. C_Sign failed for slot %d. C_Verify failed for slot %d. NULL output data. Invalid output offset %d. C_Decrypt failed for slot %d. C_Encrypt failed for slot %d. ()I getKind ()[B getData C_GenerateKey failed. C_GenerateKeyPair failed. C_WrapKey failed for slot %d. C_UnwrapKey failed. C_DeriveKey failed.        C_OpenSession for PKCS11 slot %d failed.        pkcs11_slot_close_session: C_CloseSession for PKCS11 slot %d(%s) failed.        C_Login for PKCS11 slot %d failed.      PKCS11Session.logoutNative: C_Logout for PKCS11 slot %d(%s) failed (%s).        C_InitPIN for PKCS11 slot %d failed.    C_SetPIN for PKCS11 slot %d failed.     C_SignInit failed for slot %d.  C_SignUpdate failed for slot %d.        C_SignFinal failed for slot %d. C_VerifyInit failed for slot %d.        C_VerifyUpdate failed for slot %d.      C_VerifyFinal failed for slot %d.       C_DecryptInit failed for slot %d.       C_EncryptInit failed for slot %d.       C_DecryptUpdate failed for slot %d.     C_EncryptUpdate failed for slot %d.     C_DecryptFinal failed for slot %d.      C_EncryptFinal failed for slot %d.      org/opensc/pkcs11/wrap/PKCS11Attribute  Out of memory during object enumeration for slot number %d.     C_FindObjectsInit failed for slot number %d.    C_FindObjects failed for slot number %d.        C_FindObjectsFinal failed for slot number %d.   C_GetAttributeValue failed for attribute %u.    C_GetAttributeValue returned ulValueLen -1 for attribute %u but returned CKR_OK. The underlying PKCS#11 module seems to be broken.      C_GetAttributeValue failed for attribute CKA_ALLOWED_MECHANISMS.        C_GetAttributeValue returned ulValueLen -1 for attribute CKA_ALLOWED_MECHANISMS but returned CKR_OK. The underlying PKCS#11 module seems to be broken.  C_GetAttributeValue returned ulValueLen==%lu, which is not equal to sizeof(CK_ULONG) for attribute %u of type CK_ULONG but returned CKR_OK. The underlying PKCS#11 module seems to be broken.   C_GetAttributeValue returned ulValueLen==%lu, which is not equal to sizeof(CK_BBOOL) for attribute %u of type CK_BBOOL but returned CKR_OK. The underlying PKCS#11 module seems to be broken. C_CreateObject failed. C_DestroyObject failed.    Out of memory allocating PKCS11 context.        Unable ot initialize dynamic function loading.  Out of memory allocating PKCS11 module name.    Cannot open PKCS11 module %s: %s.       Cannot find function C_GetFunctionList in PKCS11 module %s: %s. C_GetFunctionList in PKCS11 module %s failed.   C_Initialize in PKCS11 module %s failed.        C_GetInfo in PKCS11 module %s failed.   Invalid PKCS 11 module handle %p. java/lang/String getBytes C_GetFunctionList   Out of memory allocating PKCS11 slot.   C_GetSlotInfo for PKCS11 slot %d failed.        C_GetTokenInfo for PKCS11 slot %d failed.       Invalid PKCS11 slot handle %p.  org/opensc/pkcs11/wrap/PKCS11Mechanism  C_GetMechanismInfo failed for mechanism %u. (IIII)V <init> CKR_OK CKR_CANCEL CKR_HOST_MEMORY CKR_SLOT_ID_INVALID CKR_GENERAL_ERROR CKR_FUNCTION_FAILED CKR_ARGUMENTS_BAD CKR_NO_EVENT CKR_NEED_TO_CREATE_THREADS CKR_CANT_LOCK CKR_ATTRIBUTE_READ_ONLY CKR_ATTRIBUTE_SENSITIVE CKR_ATTRIBUTE_TYPE_INVALID CKR_ATTRIBUTE_VALUE_INVALID CKR_DATA_INVALID CKR_DATA_LEN_RANGE CKR_DEVICE_ERROR CKR_DEVICE_MEMORY CKR_DEVICE_REMOVED CKR_ENCRYPTED_DATA_INVALID CKR_ENCRYPTED_DATA_LEN_RANGE CKR_FUNCTION_CANCELED CKR_FUNCTION_NOT_PARALLEL CKR_FUNCTION_NOT_SUPPORTED CKR_KEY_HANDLE_INVALID CKR_KEY_SIZE_RANGE CKR_KEY_TYPE_INCONSISTENT CKR_KEY_NOT_NEEDED CKR_KEY_CHANGED CKR_KEY_NEEDED CKR_KEY_INDIGESTIBLE CKR_KEY_NOT_WRAPPABLE CKR_KEY_UNEXTRACTABLE CKR_MECHANISM_INVALID CKR_MECHANISM_PARAM_INVALID CKR_OBJECT_HANDLE_INVALID CKR_OPERATION_ACTIVE CKR_OPERATION_NOT_INITIALIZED CKR_PIN_INCORRECT CKR_PIN_INVALID CKR_PIN_LEN_RANGE CKR_PIN_EXPIRED CKR_PIN_LOCKED CKR_SESSION_CLOSED CKR_SESSION_COUNT CKR_SESSION_HANDLE_INVALID CKR_SESSION_READ_ONLY CKR_SESSION_EXISTS CKR_SESSION_READ_ONLY_EXISTS CKR_SIGNATURE_INVALID CKR_SIGNATURE_LEN_RANGE CKR_TEMPLATE_INCOMPLETE CKR_TEMPLATE_INCONSISTENT CKR_TOKEN_NOT_PRESENT CKR_TOKEN_NOT_RECOGNIZED CKR_TOKEN_WRITE_PROTECTED CKR_UNWRAPPING_KEY_SIZE_RANGE CKR_USER_ALREADY_LOGGED_IN CKR_USER_NOT_LOGGED_IN CKR_USER_PIN_NOT_INITIALIZED CKR_USER_TYPE_INVALID CKR_USER_TOO_MANY_TYPES CKR_WRAPPED_KEY_INVALID CKR_WRAPPED_KEY_LEN_RANGE CKR_WRAPPING_KEY_SIZE_RANGE CKR_RANDOM_SEED_NOT_SUPPORTED CKR_RANDOM_NO_RNG CKR_DOMAIN_PARAMS_INVALID CKR_BUFFER_TOO_SMALL CKR_SAVED_STATE_INVALID CKR_INFORMATION_SENSITIVE CKR_STATE_UNSAVEABLE CKR_CRYPTOKI_NOT_INITIALIZED CKR_MUTEX_BAD CKR_MUTEX_NOT_LOCKED CKR_FUNCTION_REJECTED CKR_VENDOR_DEFINED Unknown PKCS#11 error        CKR_KEY_FUNCTION_NOT_PERMITTED  CKR_SESSION_PARALLEL_NOT_SUPPORTED      CKR_SESSION_READ_WRITE_SO_EXISTS        CKR_UNWRAPPING_KEY_HANDLE_INVALID       CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT    CKR_USER_ANOTHER_ALREADY_LOGGED_IN      CKR_WRAPPING_KEY_HANDLE_INVALID CKR_WRAPPING_KEY_TYPE_INCONSISTENT      CKR_CRYPTOKI_ALREADY_INITIALIZED        (ILjava/lang/String;)V  ;T  i    ^p  ``  `  `  a  `aH  bx  0d  d  e  `e@  ex  @f  f  @g0  gh  h  i  `j  @kX   l  l  m  Pn@   oh  o  `p  q(	   rx	  0s	  t	  u
  pw8
  0x
  `y
  p{
  |  0~@  ~         0@   p       0 
  p0
  `
  
  
   
  @   P    @     p  Ч@      @   P  а    @   @  0p       P(  X  `  0  0  0H  `x    p  P  8  h         0(  `@  X  x       0   P  `p  P  `       0`  x           p               zR x  $      Z0   FJw ?;*3$"       D   \$    AW
HC    d   \"    AW
HA 4      \I    AAM a
GAHDCA     4      \E    BAD m
ABIAAB   ,      ]   AF
HG
D   ,   $  p^;   AF
G
H      $   T  _    AJ L
AH     4   |  _I    AAM b
AAMDCA     4      `I    AAM b
AAMDCA     4     `I    AAM b
AAMDCA     <   $  0`    BBD A(J0p
(A ABBA     <   d  `    BBD A(J0p
(A ABBA     4     `c    AAM ~
AAIDEA     4     ac    AAM ~
AAIDEA     ,     @a   AF
HD
J   <   D   b    BBD A(J0
(A ABBC     <     b    BBD A(J0
(A ABBC     <     @c    BBD A(J0
(A ABBC     <     c    BBD A(J0
(A ABBC     4   D  d    AAM k
CAB|CA    4   |  e    AAM k
CAB|CA    4     e    AAM n
AAQlCA     $     f    AC
Ii
J<     f    BBD A(M@q
(A ABBC     L   T  0g    BBD A(M0r
(A ABBBb(C ABB       ,     `g   AF
HG
H   L     Ph    BBD A(M0u
(A ABBGl(C ABB       ,   $  h
   AF
HG
J   ,   T  i   AF
HG;
G  ,     j   AF
HG
D   ,     k   AF
HG
E   D     0m    BBE A(D0M@d
0A(A BBBI     ,   ,  m/   AF
HG
G   ,   \  n   AF
HGd
F  ,     p   AF
HG
D   ,     xq   AF
HG
F   <     r    BBD A(M@d
(A ABBH     ,   ,  Xs:   AF
HG
A   ,   \  ht   AF
HNB
A  ,     v   AF
HG
D   ,     v   AF
HG
D   ,     w   AF
HG\
F  ,   	  y   AF
HG\
F  ,   L	  h{   AF
HG
H   ,   |	  H}   AF
HG
H   ,   	  (7   AF
HG
I   ,   	  87   AF
HG
I   ,   
  H   AF
HG\
F  ,   <
     AF
HG\
F  ,   l
  Ȅ   AF
HD
E  ,   
  (   AF
HD
A  ,   
  s   AF
HG+
G  ,   
  h   AF
HD 
E  ,   ,  (   AF
HD
E  ,   \     AF
HD
A  ,     g   AF
HG

E  ,     XS   AF
HG
F  D        BBE A(D0M`
0A(A BBBA     D   4  `   BBE A(D0M`
0A(A BBBA     ,   |  8,   AF
HG
A  L     8z    BBE A(D0{
(A BBBHR(A BBB     ,     h   AF
HD
I  D   ,
  H    BBE A(D0MPv
0A(A BBBG     ,   t
  Р   AF
HG
F   D   
  @    BBE A(D0M@d
0A(A BBBI     ,   
  /   AF
HG
G   D         BBE A(D0MPv
0A(A BBBG     ,   d  @   AF
HG
F   <         BBD A(M@d
(A ABBH     ,      :   AF
HG
A   D     0    BBE A(D0MPv
0A(A BBBG     D   L      BBE A(D0MPv
0A(A BBBG     ,     @    AF
HDi
D  ,         AF
HDi
D  ,     *   AF
HD
F   ,   $  *   AF
HD
F   ,   T     AF
HG
H  ,        AF
HG
H  ,     @<   AF
HD
E   ,     P<   AF
HD
E   ,     `    AF
HDi
D  ,   D  0    AF
HDi
D  ,   t   *   AF
HD
F   ,      *   AF
HD
F         &    IO      &    IO      0&    FS      <   $  @]    KAL iAAE LFA     \   d  `   BBD A(L0R
(A ABBC}
(C ABBK\
(C ABBD                     ?    DT
H^        7    Em       <         BBD A(T0{
(A ABBB         \                t  ?    DT
H^                   \     t   BBE B(D0A8QR\At
8A0A(B BBBG                  ,   $  p    AC
G
E      ,   T   G   AC
H]z
E   D     @    BBE A(D0J
0A(A BBBA    L         BBE B(D0A8Jpr
8A0A(B BBBA     L     H   BBE B(D0A8M
8A0A(B BBBA    L   l      BBE B(D0A8M|
8A0A(B BBBA                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             +      *                     &             3             (      
       l                                                            o                 `                   
       w                                                                    8'              &             8      	              o    %      o           o    $      o                                                                                                                                                                  &)      6)      F)      V)      f)      v)      )      )      )      )      )      )      )      )      *      *      &*      6*                                                                        P                            GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609                                                                                               `                    $                    %                     &                    8'                   	 (                   
 )                    @*                    P*                   
 l                    x                                        H                                                                                                                                                                                                                                                  P*                   *              .     *              D                  S                   z      +                                                                                                                9                   i                                                                    &           P      &                 &                 ]                 0       ,                   :                   I                   P                 k          G                                                                                              t                                           Ф      ?                                         +    @             B                 W                 k                  x                    P      ?                                                                                                             7       	    P                                  $    Q            b    3                                   /                                  %    @            `    :                 0w      z                                       <      1                     <     N            x    P,                s                Y            *    o      g      f                  m    `                h               
 l                        *      +                     G                     j     O                K                `            	                  ^	                	    P5             	    [            
    e            K
    |            
    8             
    +      I            0      I       F    2                 C      /           >                                     0k            A    02      c           01                 @      :          {             5
                      D
    I      :      
     S            
          *      
                     	    r            J                    4                                       W      7          -      ;      P                     r    @      <                                                ]            G    w                 u      ,                            L            
    `F            H    `q      S          `B                                                   #                 ^    ?                P      *                               PD            #                  /    0~             o    P0      I            ,      E                         %    p<             \    +      "           =      
          06                                      P             V    7                                       7                 P+      $       %    ~      /      ^    P;                                                           U            
                         @9             +           *      m                      `X      7          G            &    0             c                         /      I         "                      	 (                   I             "    0d      s      Z    1      c                                :                                   crtstuff.c __JCR_LIST__ deregister_tm_clones __do_global_dtors_aux completed.7585 __do_global_dtors_aux_fini_array_entry frame_dummy __frame_dummy_init_array_entry org_opensc_pkcs11_PKCS11Provider.c org_opensc_pkcs11_wrap_PKCS11Slot.c org_opensc_pkcs11_wrap_PKCS11Session.c org_opensc_pkcs11_wrap_PKCS11Object.c org_opensc_pkcs11_wrap_PKCS11KeyPairGenerator.c org_opensc_pkcs11_spi_PKCS11SignatureSpi.c org_opensc_pkcs11_spi_PKCS11CipherSpi.c pkcs11_module.c pkcs11_unlock_mutex pkcs11_lock_mutex pkcs11_destroy_mutex pkcs11_create_mutex pkcs11_init_args pkcs11_slot.c pkcs11_error.c jnix.c jnixThrowExceptionInternal jnixThrowExceptionInternalI __FRAME_END__ __JCR_END__ pkcs11_slot_make_jmechanisms jnixThrowException new_pkcs11_module pkcs11_module_from_jhandle pkcs11_module_to_jhandle destroy_pkcs11_slot pkcs11_slot_to_jhandle jnixThrowExceptionIV jnixThrowExceptionV __dso_handle jnixThrowExceptionI pkcs11_slot_from_jhandle _DYNAMIC pkcs11_strerror __GNU_EH_FRAME_HDR __TMC_END__ _GLOBAL_OFFSET_TABLE_ destroy_pkcs11_module new_pkcs11_slot lt_dlclose Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenLabelNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initEncryptNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_waitForSlotNative free@@GLIBC_2.2.5 Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_closeNative Java_org_opensc_pkcs11_wrap_PKCS11Object_deleteObjectNative _ITM_deregisterTMCloneTable Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNativeOff lt_dlerror Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptInitNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_initTokenNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getBooleanAttributeNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getAttributeNative _edata Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_deriveKeyNative _fini Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNativeOff __stack_chk_fail@@GLIBC_2.4 pthread_mutex_destroy@@GLIBC_2.2.5 Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyPairNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenModelNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_unwrapKeyNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_hasTokenProtectedAuthPathNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_initSlotNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_isRemovableDeviceNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getMechanismsNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_setPINNative calloc@@GLIBC_2.2.5 Java_org_opensc_pkcs11_wrap_PKCS11Object_enumObjectsNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getFirmwareVersionNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getDescriptionNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_verifyNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initSignNative __gmon_start__ Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateOffNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNativeOff lt_dlopen Java_org_opensc_pkcs11_wrap_PKCS11Object_getULongAttributeNative Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenManufacturerNative lt_dlinit Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_enumerateSlotsNative pthread_mutex_unlock@@GLIBC_2.2.5 Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNativeOff malloc@@GLIBC_2.2.5 Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative1 Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyNative Java_org_opensc_pkcs11_wrap_PKCS11KeyPairGenerator_generateKeyPairNative Java_org_opensc_pkcs11_wrap_PKCS11Object_createObjectNative _end Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptInitNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyInitNative Java_org_opensc_pkcs11_wrap_PKCS11Object_getAllowedMechanismsNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateByteNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNative __vsnprintf_chk@@GLIBC_2.3.4 Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_signInitNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNativeOff realloc@@GLIBC_2.2.5 Java_org_opensc_pkcs11_wrap_PKCS11Session_signNative __bss_start Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative1 Java_org_opensc_pkcs11_wrap_PKCS11Slot_isHardwareDeviceNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_destroySlotNative Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNative Java_org_opensc_pkcs11_wrap_PKCS11Session_logoutNative Java_org_opensc_pkcs11_PKCS11Provider_unloadPKCS11Module Java_org_opensc_pkcs11_wrap_PKCS11Session_initPINNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenSerialNumberNative lt_dlexit Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initDecryptNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMinPinLenNative _Jv_RegisterClasses Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMaxPinLenNative Java_org_opensc_pkcs11_PKCS11Provider_loadNativePKCS11Module Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_signNative Java_org_opensc_pkcs11_wrap_PKCS11Session_loginNative __fprintf_chk@@GLIBC_2.3.4 _ITM_registerTMCloneTable Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateOffNative lt_dlsym mechanismFromJavaObject Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNativeOff Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initVerifyNative Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptFinalNative Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getManufacturerNative pthread_mutex_init@@GLIBC_2.2.5 Java_org_opensc_pkcs11_wrap_PKCS11Slot_isTokenPresentNative __cxa_finalize@@GLIBC_2.2.5 _init Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateByteNative Java_org_opensc_pkcs11_wrap_PKCS11Session_wrapKeyNative Java_org_opensc_pkcs11_wrap_PKCS11Slot_getHardwareVersionNative pthread_mutex_lock@@GLIBC_2.2.5 Java_org_opensc_pkcs11_wrap_PKCS11Session_openNative stderr@@GLIBC_2.2.5  .symtab .strtab .shstrtab .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .jcr .dynamic .got.plt .data .bss .comment                                                                                                 $                              .   o                                               8                         
                          @             `      `      w                             H   o       $      $                                  U   o       %      %      @                            d              &       &      8                           n      B       8'      8'                                x             (      (                                    s             )      )      0                            ~             @*      @*                                                 P*      P*                                                l      l      	                                           x      x      w                                                      T                                          H      H                                                                                                                                                                                                                                                                                       0                                                                                                              P                                                                                            0                     4                                                                                                            H               L                 	                                                                              x  __TEXT                                                     __text          __TEXT                ߄                                 __stubs         __TEXT          p      l       p                         __stub_helper   __TEXT          ܘ             ܘ                           __const         __TEXT                                                    __cstring       __TEXT                r                                   __unwind_info   __TEXT                                                    __eh_frame      __TEXT                                                        __DATA                                                   __nl_symbol_ptr __DATA                                                    __got           __DATA                                                  __la_symbol_ptr __DATA                                                    __data          __DATA                0                                       H   __LINKEDIT              0             *                    
   8                 libopensc-PKCS11-0.4.dylib      "  0           H           P  `    x        0  ~     (     P             T   i                                (                         bU<XںkP$       

  

 *                 8              /usr/local/lib/libltdl.7.dylib     8              /usr/lib/libSystem.B.dylib      &      (     )            +        H                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   UHSPHHq  HtHHH[]ys  1H[]UHSPHHos  HtHHH[]s  H[]ÐUHAVSIHH;s  Ht"HHLu  HtHH[A^]u  1[A^]ffff.     UHAWAVSPIHHr  IMt(HLu  HtHLHH[A^A_]u  H[A^A_]ffff.     UHAWAVAUATSH8LMMIIHK  HH]Hlr  IM  LLu  H  HE1MA    t;I$LLX  HcHCHII)LI$1LLM@  IH        HEHEHEHEI$LH]HX  !|$H5+  HG  1L}  H{  HaM$LE1LHމLA@  IFhHMHyLLHPPHH6  HtMFH5  H
"  1L  H;]uHe[A\A]A^A_]腂  ff.     UHAWAVAUATSHIL-ՙ  Mm LmHE    Hp  HE1HteHChHU11P(Hu0HEIH   HI)LHChHU1LP(Ht<LCH5=  H
  E11L~  L;muLHe[A\A]A^A_]躁  1LeHJ   HH)HMt#J    I   HGHL蘁  DIL  IIM1LLI  ufUHAVSHIHo  1Ht9H@hHu11   HtH5_  H
ł  11L~  H]HH[A^]fffff.     UHAVSIHHko  HtHLr  Ht@p$11[A^]ÐUHAVSIHH+o  HtHLq  Ht
@p$11[A^]ffffff.     UHAVSIHHn  HtHLq  Ht@p$11[A^]fffff.     UHAWAVATSHIHn  E1HteLH4q  IǸo   E1MtJ@ HÍC~AHC tñIL  IIIP1LLM  L[A\A^A_]fffff.     UHAWAVATSHIHm  E1HteLHp  IǸO   E1MtJ@ HÍC~AHC tIL  III1LLM  L[A\A^A_]fffff.     UHAVSIHHKm  WHt2HLo  WHtHx*@yW*Yu  X[A^]fff.     UHAVSIHHl  WHt2HLo  WHtHz*@{W*Y  X[A^]fff.     UHAWAVAUATSHHIHR  H HEHE    Hkl  IE1M   LHo  IE1MtkID$hIHU1P@Hu3HEHH   HH)HID$hIHUHP@HtFEGH5~  H
  E11LKz  H  H H;EuLHe[A\A]A^A_]}  LELLLHn  If.     UHAWAVATSHIHwk  E1H   LH n  IE1Mt{   AGpu)EGH5}  H
~     1Ly      HÍC~AHC tÁIL  III1LLM  L[A\A^A_]fffff.     UHAWAVATSHIHj  E1H   LHPm  IE1M      AGpu5EGH5}  H
}     1Lx     ffffff.     HÍa~AHC taIL  IIIǠ   1LLM  L[A\A^A_]D  UHAWAVATSHIHi  E1H   LHpl  IE1M      AGpu5EGH56|  H
|     1Lw     ffffff.     HÍA~AHC tAIL  III   1LLM  L[A\A^A_]D  UHAWAVATSHIHh  E1H   LHk  IE1M      AGpu5EGH5V{  H
|     1Lw     ffffff.     HÍ1~AHC t1IL  III   1LLM  L[A\A^A_]D  UHAWAVSPIIHh  1HtyLLj  IMtfAGpu!EGH5z  H
7{     1L6v  I  Hw	I;  v%EGH5Nz  H{  1Ls  I  H[A^A_]ff.     UHAWAVSPIIHXg  1HtyLLj  IMtfAGpu!EGH5y  H
z     1Lu  I  Hw	I9  v%EGH5y  Hz  1Lr  I  H[A^A_]ff.     UHAVSIHHf  HtFHL[i  IMt7AFpu!EFH5-y  H
y     1Ht  A   $11[A^]ÐUHAWAVATSHIIHL%  M$$LeMIG    IG    tbHH5y  HP0HHLH   t<HHLX  HcIOHAHII)LMGH1HL@  L;eu
He[A\A^A_]v  f.     UHAWAVAUATSPEIIHqe  I1MtcLLh  I1MtNIEhI|$EHt	LE11PhHt!ED$H5w  H
y  11Lzs  H]HH[A\A]A^A_]fUHAWAVATSMIHHd  IMtKHLg  IMt8ID$hLPpt)H{  H8AWIL$H5x  1[A\A^A_]u  [A\A^A_]     UHAWAVAUATSH(DMMIIH  HH]H<d  IM   LLf  H   HEL}H]E1HA    t<I$LHX  LcIFHII)LI$1LHDM@  IEhHcuH}LL   HHr  HHEtD@H5:v  H
w  1Lq  H;]uHe[A\A]A^A_]t   UHAWAVATSMIHHDc  IMtdHLe  IMtQID$hL   t?H
  L1EMd$g  HH5vw  1DLLI[A\A^A_]>t  [A\A^A_]ffffff.     UHAWAVAUATSH(LMMIIHk  HH]Hb  IM   LL5e  H   HEL}E1HuHA    t<I$LHX  LcIFHII)LI$1LHDM@  IEhH}LLPXHHɊ  HHEtD@H5t  H
v  1LDp  H;]uHe[A\A]A^A_]s  f.     UHAWAVAUATSH(MMIIH\  HH]H}a  HEH  LL%d  H   HELmHM1MA    tAI$LILX  HcHCHII)LI$1LLM@  LH]E1HA    t?I$LHHX  LcIGHII)LI$1LHDM@  HEH@hH}LHULMP`HHY  HHEtD@H5!s  H
_u  1Ln  H;]uHe[A\A]A^A_]q  f.     UHAWAVAUATSH8LMLEHIL=  M?L}H`  IM   LHb  IM   H]EW)EHE    HHEHt<ILHX  HcHMHAHII)LLEI1LH@  IEhHuH}HUX  HtED$H5r  H
pt  1Lm  L;}uHe[A\A]A^A_]p      UHAWAVAUATSHMLEHIL=ۇ  M?L}H^  IM   LHa  HH   M   LH   DEE   HcHEIH@HI)LIE LDM@  IFhH}LHUh  HtDCH5q  H
s  1Ll  L;}   He[A\A]A^A_]L;}upH5p  HYs  1LHL;}uUH5p  HVs  1LHe[A\A]A^A_]i  L;}u)H5p  H;s  1LDHe[A\A]A^A_]i  o  fffff.     UHAWAVAUATSPEMIIH]  HHtQLL;`  IMt>D}HChHu׺   Lh  HtED$H5o  H
r  1Lk  H[A\A]A^A_]fD  UHAWAVAUATSHMHIHυ  H HEHE    H\  IE1MtLH_  HE1HtiIFhHU1Lp  Hu0HEIHHI)LIFhHULLp  HtFDCH5o  H
r  E11Lj  H'  H H;EuLHe[A\A]A^A_]m  MI$uL  HE1HtI$M1LHM  Ifff.     UHAWAVAUATSH(MLEHIH  H HEHE    H[  IE1MM  LHZ^  HE1H3  M   M   DEE   HcHEIH@HI)LI$LLDM@  IEhLE1LuLLHU`  HtiDCH5m  H
p     H5m  H&p  E113H5m  H)p  E11Lf  vH5sm  Hp  E11DLf  VHELIHHI)LIEhLELHUL`  HtFDCH5m  H
o  E11Lh  H!  H H;EuLHe[A\A]A^A_]k  I$uL  HE1HtI$M1LHM  If     UHAWAVAUATSH8LMLEHIL=  M?L}HY  IM   LHd\  IM   H]EW)EHE    HHEHt<ILHX  HcHMHAHII)LLEI1LH@  IEhHuH}HU  HtED$H5k  H
n  1Lqg  L;}uHe[A\A]A^A_]Aj      UHAWAVAUATSHMLEHIL=  M?L}HX  IM   LHU[  HH   M   LH   DEE   A9   HcHEIH@HI)LIE LDM@  IFhH}LHU  HtDCH5j  H
m  1Lif  L;}   He[A\A]A^A_]L;}upH5j  H m  1LHL;}uUH5dj  Hl  1LHe[A\A]A^A_]c  L;}u)H58j  Hl  1LDHe[A\A]A^A_]jc  h  D  UHAWAVATSHMIIDMH<W  HHtLLLY  IMt9HChHuߺ   L  HtEGH5i  H
l  1LXe  H[A\A^A_]ff.     UHAWAVAUATSHMLEIIH{  HH]HV  IM   LLEY  Ht~Mt~HEIE LLX  HcHCHII)LIE 1LLM@  IFhE1H}LH  H   H~  Ht]u6ATE1OE1JH5h  H;k  E11La  H~  H#HED@H5sh  H
k  E11L#d  H;]uAHe[A\A]A^A_]f  D  UHAWAVAUATSH8MLEHIL=;~  M?L}H\U  IM   LHX  HH   M   M   DME   HcHEIH@HI)LELI$LLD@  HE HH   I$LHX  HcHMHAHHH)HUHII$E11LHu @  IFhH}HuHUHMLE  H   tcu}AZE1UE1PH5f  H~i  E113H5f  Hi  E11L(`  H5f  Hui  E11DL`  L;}uAHe[A\A]A^A_]De  DCH5f  H
j  E11L;b  f     UHAWAVAUATSH8LMLEHIL=j|  M?L}HS  IM   LH4V  IM   H]EW)EHE    HHEHt<ILHX  HcHMHAHII)LLEI1LH@  IEhHuH}HU  HtED$H5e  H
0i  1LAa  L;}uHe[A\A]A^A_]d      UHAWAVAUATSH8LMLEHIL=Z{  M?L}H{R  IM   LH$U  IM   H]EW)EHE    HHEHt<ILHX  HcHMHAHII)LLEI1LH@  IEhHuH}HU   HtED$H5~d  H
Bh  1L1`  L;}uHe[A\A]A^A_]c      UHAWAVAUATSH(MLEHIHKz  H HEHE    HdQ  IE1M:  LH
T  HE1H   M   M   DEE   HcHEIH@HI)LI$LLDM@  IEhLE1LuLLHU   Hu;HELIHHI)LIEhLELHUL   H   DCH5-c  H
g  E11L^  PH5c  He  E113H5b  He  E11L;\  H5b  He  E11DL\  Hx  H H;EuLHe[A\A]A^A_]Na  I$uL  HE1HtI$M1LHM  Ifff.     UHAWAVAUATSH(MLEHIH[x  H HEHE    HtO  IE1M:  LHR  HE1H   M   M   DEE   HcHEIH@HI)LI$LLDM@  IEhLE1LuLLHU   Hu;HELIHHI)LIEhLELHUL   H   DCH5=a  H
Ge  E11L\  PH5 a  Hc  E113H5a  Hc  E11LKZ  H5`  Hc  E11DL+Z  Hv  H H;EuLHe[A\A]A^A_]^_  I$uL  HE1HtI$M1LHM  Ifff.     UHAWAVAUATSH(MLEHIHkv  H HEHM  IE1Mr  LH2P  HH[  M   M   M   Hu H   D}(IE LX  DHcHUȅ   9   HcH)HUHHHH)HEHċMHcHEIH@HI)LIE LLUM@  IFhLuLEH}LHUL   H   DCH55_  H
c  E11LZ  hH5_  Ha  KH5_  Ha  H5^  Ha  +H5^  Hc  E11L(X  H5^  Hc  E11LX  Ht  H H;EuDHe[A\A]A^A_]>]  IE MLHu U(M  D}@ UHAWAVAUATSH(MLEHIHkt  H HEHK  IE1Mr  LH2N  HH[  M   M   M   Hu H   D}(IE LX  DHcHUȅ   9   HcH)HUHHHH)HEHċMHcHEIH@HI)LIE LLUM@  IFhLuLEH}LHUL   H   DCH55]  H
?a  E11LX  hH5]  H_  KH5]  H_  H5\  H_  +H5\  Ha  E11L(V  H5\  Ha  E11LV  Hr  H H;EuDHe[A\A]A^A_]>[  IE MLHu U(M  D}@ UHAWAVAUATSHMHIHor  H HEHE    HI  IE1M   LH.L  HE1H   LeIFhHU1L(  Ht%DCH5[  H
<`  E11H}W     HEIHHI)LIFhHULL(  HH}tDCH5[  H
_  E11<W  @HuE1HHt1HH  IE1MtHM1HLM  MHSq  H H;EuLHe[A\A]A^A_]Y   UHAWAVAUATSHMHIHq  H HEHE    H(H  IE1M   LHJ  HE1H   LeIFhHU1L  Ht%DCH5Z  H
^  E11H}1V     HEIHHI)LIFhHULL  HH}tDCH5)Z  H
^  E11U  @HuE1HHt1HH  IE1MtHM1HLM  MHo  H H;EuLHe[A\A]A^A_]]X   UHAWAVAUATSH(MLEHIHo  H HEHE    HF  IE1M:  LHjI  HE1H   M   M   DEE   HcHEIH@HI)LI$LLDM@  IEhLE1LuLLHU  Hu;HELIHHI)LIEhLELHUL  H   DCH5X  H
-]  E11L=T  PH5pX  HZ  E113H5[X  HZ  E11LQ  H5>X  HZ  E11DL{Q  HDn  H H;EuLHe[A\A]A^A_]V  I$uL  HE1HtI$M1LHM  Ifff.     UHAWAVAUATSH(MLEHIHm  H HEHE    HD  IE1M:  LHzG  HE1H   M   M   DEE   HcHEIH@HI)LI$LLDM@  IEhLE1LuLLHU   Hu;HELIHHI)LIEhLELHUL   H   DCH5V  H
[[  E11LMR  PH5V  HY  E113H5kV  HY  E11LO  H5NV  HX  E11DLO  HTl  H H;EuLHe[A\A]A^A_]T  I$uL  HE1HtI$M1LHM  Ifff.     UHAWAVAUATSHhDMLEIIHk  H HEHB  HE1H  LLE  1H  I$H5JZ  LP0I1M  I$HRZ  H
SZ  LL  HE1H  I$H1Z  H
2Z  LL  HE1Hh  HuI$LX  HcHMHIH   HHH)HxHԅ   HxLp1E1ffff.     I$LHuDh  IM   I$1LLHU  HIFI$1LLHU  HI$LHX  HcIHAHII)LMFI$1LH1@  IIL;m[HUHcEHEH]LHHEH@hLEH}HHxHM  HtH5S  H
X  11L[O  H]Hi  H H;EuHHe[A\A]A^A_]R  fffff.     UHAWAVAUATSH   DlLpHIHQi  H HEHr@  H`1HMH~  LHC  1HMHd  IE H5W  LP0I1HEMA  IE HW  H
W  LL  HE1HMH  IE HW  H
W  LL  HE1HMH  HuIE LX  HcHxHIH   HHH)HԅIM    LrHP1HEE1f     LHuDh  IMf  IM 1LLHU  HIFIM 1LLHU  HIE LHX  HcIHAHII)LMFIE 1LH@  IIM IL;xZHPHu LX  LcKH   HHH)HXHE   HXLp1HEE1@ IE LHu Dh  HHb  IM 1LHHU  HIFIM 1LHHU  HIE LHX  HcIHAHII)LMFIE 1LH@  IIM9^HUHclHEH]LHPH`H@hHHMHL$HMH$HpHHPHxLXM  HHt H5O  H
$U  1HE1LK  OIE    L  H1HEHt/HEHEHEHEIE LE1ҹ   LH  H]He  H H;EuHEHe[A\A]A^A_]N  fD  UHAWAVAUATSH8ELEHIH[e  H HEHE    Ht<  IE1M   LH?  HE1H   HUIcHELuLLIEhLME1L}LLHUIHM   HtDCJH]HEHHHH)HIEhHuLMLLHM IM  HtJHED@H5YN  H
S  E11L	J  Hbd  H H;EuLHe[A\A]A^A_]L  HuE1HtI$L  HE1HtI$M1LHM  I또UHAWAVAUATSHhDMLEIIHc  H HEH:  HE1HQ  LL=  1H;  IE H5ZR  LP0I1M  IE HbR  H
cR  LL  HE1H  IE HAR  H
BR  LL  HE1H  Hu(IE LX  HcHMHIH   HHH)HxHԅ   HxLp1E1ffff.     IE LHu(Dh  IME  IM 1LLHU  HIFIM 1LLHU  HIE LHX  HcIHAHII)LMFIE 1LH1@  IIL;}[Le HUHcEHEL}LLIE LLX  HcHCHII)LIE 1LLM@  HEH@hHHMHL$HMH$H}LHULILx  HHtH5`K  H
P  11LG  H]Hda  H H;EuHHe[A\A]A^A_]I  @ UHAWAVAUATSHhDMLEIIHa  H HEH;8  HE1H  LL:  1H  I$H5O  LP0I1M  I$HO  H
O  LL  HE1H  I$HO  H
O  LL  HE1Ho  Hu I$LX  HcHMHIH   HHH)HxHԅ   HxLp1E1ffff.     I$LHu Dh  IM   I$1LLHU  HIFI$1LLHU  HI$LHX  HcIHAHII)LMFI$1LH1@  IIL;}[LuHUHcEHEH]LH,HEH@hLMH}HLHxLE  HtH5H  H
qN  11LD  H]H^  H H;EuHHe[A\A]A^A_]aG  UHAWAVAUATSHX  LLHIH^  H HEH5  H1H  LHe8  H1Hm  IE H5M  LP0I1MN  IE HM  H
 M  LL  H1H  IE HL  H
L  LL  H1H  IE LHX  HcHHIH   HHH)HHԅ   HLpE1IE LHDh  IM    r  IM 1LLH  HIFIM 1LLH  HIE LHX  HcIHAHII)LMFIE 1LH@  IIL;L   tE  IM  LIFhHHHH   HtHD@H5`F  H
.L  KHǅ    IFhHH    H   Ht(HD@H5F  H
L  1LA  !  HHB  H   HGA   DGHHLD  A   H   LLD  HH   HH@h    HHH   HC  HHHK  McH   HGHJ<A   DGHHC  EI   H HIMYHHH5D  HJ  1L0>  LC  1HZ  H H;EuHHe[A\A]A^A_]YC  E1LHH@hH   Ht(HD@H5tD  H
J  1L'@  IIE LD  IIE 1LLDI  HB  LQHD@H5D  H
J  H[@ UHAWAVAUATSH(LMMIIHY  H HEH1  I1M   LL3  1H   MDmIcHEHE    HE    IFhHU   LHL}L   Hu?HHEHtvHHHH)HHMIFhHU   L   Ht]H5C  H
kI  11LE>  H Y  H H;EuHHe[A\A]A^A_]A  H5B  H
TI  1ۺ   1HuHMt)IL  HIMLE1LH  H5B  H
I  1ۺ   1LcfUHAWAVAUATSH8LMMIIHkX  H HEH/  HE1H   LL22  E1H   ILeHE  @HE    HE    HChHU   LL}L   Hu?HEHtxHHHH)HHMHChHU   LL   Ht]H5A  H
H  E11H}8=  HW  H H;EuLHe[A\A]A^A_]?  H5FA  H
H  E1   1LEIH}tHMIHL1  IH5A  H
IH  E1   1<  wffffff.     UHAWAVAUATSH(LMMIIHEH.  I1M   LL0  H   DeIcHEHEHEHE   IFhHU   LHu   HtH5I@  H
F  11LE;  1LEIu]"H5@  H
G  1ۺ   1LE;  H([A\A]A^A_] UHAWAVAUATSH(MMIIE H-  HHtjLL/  Ht^DuIcHEHEHEHE   HChHU   LL   Ht'H5i?  H
E  11LE;  91511LEIu]"H53?  H
G  1ۺ   1LE:  H([A\A]A^A_]f.     UHAWAVAUATSHHLMLEIHHT  H HEH,  HEE1H  HL.  E1H  HH5yC  HP0IE1M  HHC  H
C  HL  HEE1H_  HH`C  H
aC  HL  HEE1H2  HHHuX  HcHMHIH   HHH)HUHԅ   HEL`E1E1HHHuDh  IM   H1HLHU  HID$H1HLHU  IHHLX  HcI$HAHII)LMD$H1HL@  IIL;}_HEH@hHMH}HuHU   HtH5=  H
eF  E11H8  LuHS  H H;EuLHe[A\A]A^A_]|;  fUHAWAVAUATSPMMIIH)  HHtMLL,  Ht=HChLL   Ht&H5t<  H
E  1LH[A\A]A^A_]8  H[A\A]A^A_]ÐUHAWAVAUATSH   DlLpHIH1R  H HEHR)  H`1HMH|  LH+  1HMHb  IE H5@  LP0I1HEM?  IE H@  H
@  LL  HE1HMH  IE H@  H
@  LL  HE1HMH  HuIE LX  HcHxHIH   HHH)HԅIM    LzHP1HEE1f     LHuDh  IMd  IM 1LLHU  HIGIM 1LLHU  HIE LHX  HcIHAHII)LMGIE 1LH@  IIM IL;xZHPHuLX  LcKH   HHH)HXHE   HXLp1HEE1@ IE LHuDh  HH`  IM 1LHHU  HIFIM 1LHHU  HIE LHX  HcIHAHII)LMFIE 1LH@  IIM9^HclHEHE    HE    H`H@hHHMHL$HMH$HuHpHPHxLXM  HHt H58  H
>  1HE1L4  OIE    L  H1HEHt/HEHEHEHEIE LE1ҹ   LH  H]HN  H H;EuHEHe[A\A]A^A_]6  UHAWAVAUATSHMMIIHk%  HHtcLL(  IMtPEW)EHE    HHEHChHuLLX  HtED$H57  H
:  1Lp3  H[A\A]A^A_]ÐUHAWAVAUATSHMLEHIL=M  M?L}H$  IM   LHe'  HH   M   LH   DEE   A9   HcHEIH@HI)LIE LDM@  IFhH}LHUh  HtDCH56  H
9  1Ly2  L;}   He[A\A]A^A_]L;}upH56  H9  1LHL;}uUH5t6  H
9  1LHe[A\A]A^A_]/  L;}u)H5H6  H8  1LDHe[A\A]A^A_]z/  4  D  UHAWAVAUATSPEMIIHN#  HHtQLL%  IMt>D}HChHu׺   Lh  HtED$H55  H
u8  1Le1  H[A\A]A^A_]fD  UHAWAVAUATSHMHIHK  H HEHE    H"  IE1MtLHR%  HE1HtiIFhHU1Lp  Hu0HEIHHI)LIFhHULLp  HtFDCH54  H
7  E11L0  HJ  H H;EuLHe[A\A]A^A_]Q3  MI$uL  HE1HtI$M1LHM  Ifff.     UHAWAVAUATSHMMIIH!  HHtcLL8$  IMtPEW)EHE    HHEHChHuLL  HtED$H53  H
6  1L/  H[A\A]A^A_]ÐUHAWAVAUATSHMLEHIL=I  M?L}H   IM   LH#  HH   M   LH   DEE   A9   HcHEIH@HI)LIE LDM@  IFhH}LHU  HtDCH52  H
&6  1L.  L;}   He[A\A]A^A_]L;}upH52  H05  1LHL;}uUH52  H-5  1LHe[A\A]A^A_]+  L;}u)H5h2  H5  1LDHe[A\A]A^A_]+  0  D  UHAWAVATSHMIIDMHl  HHtLLL"  IMt9HChHuߺ   L  HtEGH51  H
5  1L-  H[A\A^A_]ff.     UHAWAVAUATSHMLEIIHG  HH]H  IM   LLu!  Ht~Mt~HEIE LLX  HcHCHII)LIE 1LLM@  IFhE1H}LH  H   HG  Ht]u6ATE1OE1JH50  Hk3  E11L*  HF  H#HED@H50  H
4  E11LS,  H;]uAHe[A\A]A^A_]/  UHAWAVAUATSHMMIIH  HHtcLLH   IMtPEW)EHE    HHEHChHuLL   HtED$H5/  H
3  1L+  H[A\A]A^A_]ÐUHAWAVAUATSHMMIIH  HHtcLL  IMtPEW)EHE    HHEHChHuLL  HtED$H5M/  H
2  1L +  H[A\A]A^A_]ÐUHAWAVAUATSH(LEHIH.E  H HEHE    HG  IE1MA  LH  IE1M'  M    HuH   DEE   A9   LcLuHIFHH)HI$LDI@  IEhLE1H}HL   Hu<HEIHHI)LIEhLEH}HHUL   H   EGH5	.  H
1  E11L)  PH5-  Hm0  E113H5-  Hp0  E11L'  H5-  Hd0  E11DL&  HC  H H;EuLHe[A\A]A^A_]*,  MI$uL  HE1HtI$M1LHM  ID  UHAWAVAUATSH(LEHIH>C  H HEHE    HW  IE1MA  LH  IE1M'  M    HuH   DEE   A9   LcLuHIFHH)HI$LDI@  IEhLE1H}HL   Hu<HEIHHI)LIEhLEH}HHUL   H   EGH5,  H
#0  E11L'  PH5+  H}.  E113H5+  H.  E11L'%  H5+  Ht.  E11DL%  HA  H H;EuLHe[A\A]A^A_]:*  MI$uL  HE1HtI$M1LHM  ID  UHAWAVAUATSH(LIIHOA  H HEHp  IE1M  H]LL  IMq  M    LmM   }   9   Hu(H   ]0I$LX  HcHMȅ   9   HcH)HMHHHH)HEHċM HcHEHH@HH)HI$LLUI@  IFhLEH}HH]HUH   H   EGH5
*  H
-  E11L%  vH5)  Hq,  E11YH5)  Ht,  %H5)  Hu,  E112H5)  H-  E11L"  H5)  H-  E11L"  H?  H H;EuDHe[A\A]A^A_](  I$MLHu(U0I  Dmfffff.     UHAWAVAUATSH(LIIH/?  H HEHP  IE1M  H]LL  IMq  M    LmM   }   9   Hu(H   ]0I$LX  HcHMȅ   9   HcH)HMHHHH)HEHċM HcHEHH@HH)HI$LLUI@  IFhLEH}HH]HUH   H   EGH5'  H
+  E11L#  vH5'  HQ*  E11YH5'  HT*  %H5'  HU*  E112H5'  H+  E11L   H5w'  H+  E11L   H~=  H H;EuDHe[A\A]A^A_]%  I$MLHu(U0I  Dmfffff.     UHAWAVAUATSH(MHIH=  H HEHE    HE    H   IE1M  LH  HE1H  M    HuH   DEE   A9   HcHEIH@HI)LI$LDM@  IEhLE1LLHU   HuCHUHEHHpHH)HH   IEhLELLI   LHtlDCH5%  H
)     H5%  HI(  E116H5%  HL(  E11L     H5%  H=(  E11DL  zHMIEhHU1L(  Hu=HE1HA    tvIHHI)LIEhHULL(  HtFDCH5%  H
n)  E11L   H;  H H;EuLHe[A\A]A^A_]#  HuMI$uL  HE1HtHMHMtI$1LHLE  HMHtI$ULHM  InfUHAWAVAUATSH(MHIHo:  H HEHE    HE    H  IE1M  LH&  HE1H  M    HuH   DEE   A9   HcHEIH@HI)LI$LDM@  IEhLE1LLHU   HuCHUHEHHpHH)HH   IEhLELLI   LHtlDCH5;#  H
E'     H5(#  H%  E116H5#  H%  E11LS     H5"  H%  E11DL0  zHMIEhHU1L  Hu=HE1HA    tvIHHI)LIEhHULL  HtFDCH5t"  H
&  E11L$  H}8  H H;EuLHe[A\A]A^A_]   HuMI$uL  HE1HtHMHMtI$1LHLE  HMHtI$ULHM  InfUHAWAVAUATSH8LIIH7  H HEH  IE1Mb  LL  IMK  M    H}    }   9   Dm0Hu(I$LX  E   D9   HcIcH)HMHAHHH)HUHHMȋM HcHEIH@HI)LI$LHuUM@  IFhLEHLLmHUL   H   EGH5   H
$     H5   H#  EH5v   H#  E11L  5H5Y   H#  E11H5B   H$  DE11L  HH6  H H;EuDHe[A\A]A^A_]  HuHEH)HEIFhLHUH(  Ht!EGH5  H
)$  E11L  MDmDmI$LHu(U0D  gfD  UHAWAVAUATSH8LIIH5  H HEH  IE1Mb  LLV  IMK  M    H}    }   9   Dm0Hu(I$LX  E   D9   HcIcH)HMHAHHH)HUHHMȋM HcHEIH@HI)LI$LHuUM@  IFhLEHLLmHUL   H   EGH5Y  H
c"     H5F  H   EH56  H   E11Lv  5H5  H   E11H5  HB"  DE11L?  H4  H H;EuDHe[A\A]A^A_]r  HuHEH)HEIFhLHUH  Ht!EGH5  H
"  E11L?  MDmDmI$LHu(U0D  gfD  UHAWAVAUATSH(LEHIHN3  H HEHo
  IE1MI  LH
  IE1M/  M    HuH   DEE   A9   LcLuHIFHH)HI$LDI@  HE    IEhLE1H}HL  Hu<HEIHHI)LIEhLEH}HHUL  H   EGH5)  H
   E11L  PH5  H  E113H5  H  E11L7  H5  H  E11DL  H1  H H;EuLHe[A\A]A^A_]J  MI$uL  HE1HtI$M1LHM  ID  UHAWAVAUATSH(LEHIH^1  H HEH  IE1MI  LH%  IE1M/  M    HuH   DEE   A9   LcLuHIFHH)HI$LDI@  HE    IEhLE1H}HL   Hu<HEIHHI)LIEhLEH}HHUL   H   EGH59  H
  E11L  PH5  H  E113H5  H  E11LG  H5  H  E11DL'  H/  H H;EuLHe[A\A]A^A_]Z  MI$uL  HE1HtI$M1LHM  ID  UHAWAVAUATSH(LIIHo/  H HEH  IE1M  H]LL2	  IMq  M    LmM   }   9   Hu(H   ]0I$LX  HcHMȅ   9   HcH)HMHHHH)HEHċM HcHEHH@HH)HI$LLUI@  IFhLEH}HH]HUH  H   EGH5-  H
  E11L  vH5  H  E11YH5  H  %H5  H  E112H5  H  E11L  H5  H  E11L  H-  H H;EuDHe[A\A]A^A_](  I$MLHu(U0I  Dmfffff.     UHAWAVAUATSH(LIIHO-  H HEHp  IE1M  H]LL  IMq  M    LmM   }   9   Hu(H   ]0I$LX  HcHMȅ   9   HcH)HMHHHH)HEHċM HcHEHH@HH)HI$LLUI@  IFhLEH}HH]HUH   H   EGH5
  H
  E11L  vH5  Hq  E11YH5  Ht  %H5  Hu  E112H5  H  E11L  H5  H  E11L  H+  H H;EuDHe[A\A]A^A_]  I$MLHu(U0I  Dm빐UHAWAVAUATSPIIx     IMtMAE оIE    IEp    IH5  LP0HH  c  t0H5  H  H5  H7  E11L
    IH  H
  LH  HHu  I1LLH  IMU  ILLX  AAD$Hc  IEHtoI1LLDI@  IcIM I}  IEpHtXH5:  H  Ht`I]hHHt|MEH5  H
]     H5  H  1L     M}  HH5  H  M}  HH5m  H  1LLI  YHH=*  PHtMEH55  H
  'IEhLHPHtHMEH5  H
  1L  I}Ht  I}pHtc  L  b  E1LH[A\A]A^A_]ÐUHH]    UHHHt9оtH5  H  1  1H]UHSPHHCh1PH{pHt  H{Ht  HCp    HCh    HC`    HCX    HCP    HCH    HC@    HC8    HC0    HC(    HC     HC    HC    HC    H    H  H[]T       UHAVSI   Mt9@   d  Hø   Ht"1H_  tH;     I1[A^]fffff.     UHSPH   HtH  H  1H[]@ UH   Ht  H]ffffff.     UH   Ht  H]ÐUHAWAVATSIIIP  t  HHt=P  HA  L{ID$hHsLP0Ht,H5r  H
  IH5b  H  11L	  DCpt>ID$hHHLP8Ht%H5'  H
  1LE  H  1H[A\A^A_]ÐUHH]    UHHHt9tH5  H  1	  1H]UHSPHӾP  HN  HH[]X  fff.     UHAWAVAUATSHHMIHUHuIIH56  P0I1HEM
  IH>  H
>  LL  HHM1HEH   I1HM1LDL`  HEH   M~   L1HEE1HEH@hHMHyIu HUPHHuZMAM DEDMȋEЉ$1HULHA   HtOMLHuDHAp  IIM9rHEHE"EE H5U  H
Z  1HE1L
  HEHH[A\A]A^A_]ÐUHy     H!  ]Á              4  o  R  _  [  O  d  /  m    v    {                    ,     |                      /	  !  H8  H  HcHH(  ]Á     H   ]Á  uHx   ]Á  u3H)   ]Á  w  H`   ]Á  b  H  ]Á  M  H   ]Áp  8  H  ]Á`  #  Hy  ]ÁP    HO  ]Á0    H   ]Á   u1H  ]Á  H  HcHH&  ]Á!    H  ]Á   H  HcHHI  ]Á   tV   uWH  ]Á            Hw  ]H  ]H  ]H  ]H  ]H}  ]Á     H  ]Á   ueH  ]H  ]H  ]H  ]H  ]H  ]H  ]Á     H  ]Á   uFHR  ]Á     H  ]ÁPm  H  HcHHK  ]Á   H  H  ]Á`0  H  HcHH  ]Á   uHw  ]Á      HH  ]Á      Hb  ]Ã?~0   1   Hc  ]H  ]H  ]H  ]H  ]H  ]H	  ]H  ]H*  ]H1  ]H:  ]HA  ]ÃO@uAH  ]Ãǰ!w>H  HcHH)  ]H  ]Ã2uH  ]ÃAu	H  ]H'  ]Hg  ]Hn  ]Hy  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H  ]H)  ]H6  ];`n!*3<E*3<Ee#,5>GPYbkt}H&/8AJS\enwUHAWAVAUATSH   IIHt2) )0)@)P)`)p)u)}LLHHa  H HEE   LeLmff.     HHEHEHEE0   E   LHLLM;   } uH  H H;EuH   [A\A]A^A_]c  f     UHAWAVAUATSH(HIIIL-  Mm LmIcHHHH)HIHHMIIPHUHMIc7LM1HHI  AA29})A    ILLP0HtILHHQpAL;muHe[A\A]A^A_]   UHAWAVAUATSH8HIIIH  H HEE   Lmf.     HCHEHHKHMHEH}LLLM} uH  H H;EuH8[A\A]A^A_]  D  UHAWAVAUATSH   IAIHt2) )0)@)P)`)p)u)}LLH  H HEE   Lm HHEHEHEE0   E    H}HLDMM7   } uH  H H;EuH   [A\A]A^A_]  D  UHAWAVAUATSH8MIIHL=L  M?L}HcIHHI)LIAHEIIIHMHEHc3LM1HL  	ɉ   L9       LHHP0IMtkHH  H
  HL  IMtFHHL8  IMt/L1HLLMA   HtHHHQhL;}uHe[A\A]A^A_]        UHAWAVAUATSH8LIAIIH  H HEE   ff.     HCHEHHKHMHEH}LLDMLM`} uH  H H;EuH8[A\A]A^A_]+   %  %  %  %  %  %  %  %  %  %  %  %  %  %  %  %  %  %  L%  AS%  h    h   h$   h5   hF   hW   hg   hv   h   h   h   h   xh   nh   dh   Zh  Ph1  FhN  <{Gz?java/lang/IllegalArgumentException Length of label exceeds 32 bytes org/opensc/pkcs11/wrap/PKCS11Exception C_InitToken failed for module %s. C_GetSlotList failed for module %s. C_WaitForSlotEvent failed. C_GetMechanismList for PKCS11 slot %d failed. No token present in slot %d. Invalid value %u for ulMinPinLen of token in slot %d. Invalid value %u for ulMaxPinLen of token in slot %d. [B C_OpenSession for PKCS11 slot %d failed. pkcs11_slot_close_session: C_CloseSession for PKCS11 slot %d(%s) failed. C_Login for PKCS11 slot %d failed. PKCS11Session.logoutNative: C_Logout for PKCS11 slot %d(%s) failed (%s). C_InitPIN for PKCS11 slot %d failed. C_SetPIN for PKCS11 slot %d failed. C_SignInit failed for slot %d. Invalid data length %d. NULL input data. Invalid input offset %d. C_SignUpdate failed for slot %d. C_SignFinal failed for slot %d. C_Sign failed for slot %d. C_VerifyInit failed for slot %d. C_VerifyUpdate failed for slot %d. C_VerifyFinal failed for slot %d. C_Verify failed for slot %d. C_DecryptInit failed for slot %d. C_EncryptInit failed for slot %d. C_DecryptUpdate failed for slot %d. C_EncryptUpdate failed for slot %d. NULL output data. Invalid output offset %d. C_DecryptFinal failed for slot %d. C_EncryptFinal failed for slot %d. C_Decrypt failed for slot %d. C_Encrypt failed for slot %d. org/opensc/pkcs11/wrap/PKCS11Attribute getKind ()I getData ()[B C_GenerateKey failed. C_GenerateKeyPair failed. C_WrapKey failed for slot %d. C_UnwrapKey failed. C_DeriveKey failed. Out of memory during object enumeration for slot number %d. C_FindObjectsInit failed for slot number %d. C_FindObjects failed for slot number %d. C_FindObjectsFinal failed for slot number %d. C_GetAttributeValue failed for attribute %u. C_GetAttributeValue returned ulValueLen -1 for attribute %u but returned CKR_OK. The underlying PKCS#11 module seems to be broken. C_GetAttributeValue failed for attribute CKA_ALLOWED_MECHANISMS. C_GetAttributeValue returned ulValueLen -1 for attribute CKA_ALLOWED_MECHANISMS but returned CKR_OK. The underlying PKCS#11 module seems to be broken. C_GetAttributeValue returned ulValueLen==%lu, which is not equal to sizeof(CK_ULONG) for attribute %u of type CK_ULONG but returned CKR_OK. The underlying PKCS#11 module seems to be broken. C_GetAttributeValue returned ulValueLen==%lu, which is not equal to sizeof(CK_BBOOL) for attribute %u of type CK_BBOOL but returned CKR_OK. The underlying PKCS#11 module seems to be broken. C_CreateObject failed. C_DestroyObject failed. Out of memory allocating PKCS11 context. java/lang/String Unable ot initialize dynamic function loading. getBytes Out of memory allocating PKCS11 module name. Cannot open PKCS11 module %s: %s. C_GetFunctionList Cannot find function C_GetFunctionList in PKCS11 module %s: %s. C_GetFunctionList in PKCS11 module %s failed. C_Initialize in PKCS11 module %s failed. C_GetInfo in PKCS11 module %s failed. Invalid PKCS 11 module handle %p. Out of memory allocating PKCS11 slot. C_GetSlotInfo for PKCS11 slot %d failed. C_GetTokenInfo for PKCS11 slot %d failed. Invalid PKCS11 slot handle %p. org/opensc/pkcs11/wrap/PKCS11Mechanism <init> (IIII)V C_GetMechanismInfo failed for mechanism %u. CKR_OK CKR_CANCEL CKR_HOST_MEMORY CKR_SLOT_ID_INVALID CKR_GENERAL_ERROR CKR_FUNCTION_FAILED CKR_ARGUMENTS_BAD CKR_NO_EVENT CKR_NEED_TO_CREATE_THREADS CKR_CANT_LOCK CKR_ATTRIBUTE_READ_ONLY CKR_ATTRIBUTE_SENSITIVE CKR_ATTRIBUTE_TYPE_INVALID CKR_ATTRIBUTE_VALUE_INVALID CKR_DATA_INVALID CKR_DATA_LEN_RANGE CKR_DEVICE_ERROR CKR_DEVICE_MEMORY CKR_DEVICE_REMOVED CKR_ENCRYPTED_DATA_INVALID CKR_ENCRYPTED_DATA_LEN_RANGE CKR_FUNCTION_CANCELED CKR_FUNCTION_NOT_PARALLEL CKR_FUNCTION_NOT_SUPPORTED CKR_KEY_HANDLE_INVALID CKR_KEY_SIZE_RANGE CKR_KEY_TYPE_INCONSISTENT CKR_KEY_NOT_NEEDED CKR_KEY_CHANGED CKR_KEY_NEEDED CKR_KEY_INDIGESTIBLE CKR_KEY_FUNCTION_NOT_PERMITTED CKR_KEY_NOT_WRAPPABLE CKR_KEY_UNEXTRACTABLE CKR_MECHANISM_INVALID CKR_MECHANISM_PARAM_INVALID CKR_OBJECT_HANDLE_INVALID CKR_OPERATION_ACTIVE CKR_OPERATION_NOT_INITIALIZED CKR_PIN_INCORRECT CKR_PIN_INVALID CKR_PIN_LEN_RANGE CKR_PIN_EXPIRED CKR_PIN_LOCKED CKR_SESSION_CLOSED CKR_SESSION_COUNT CKR_SESSION_HANDLE_INVALID CKR_SESSION_PARALLEL_NOT_SUPPORTED CKR_SESSION_READ_ONLY CKR_SESSION_EXISTS CKR_SESSION_READ_ONLY_EXISTS CKR_SESSION_READ_WRITE_SO_EXISTS CKR_SIGNATURE_INVALID CKR_SIGNATURE_LEN_RANGE CKR_TEMPLATE_INCOMPLETE CKR_TEMPLATE_INCONSISTENT CKR_TOKEN_NOT_PRESENT CKR_TOKEN_NOT_RECOGNIZED CKR_TOKEN_WRITE_PROTECTED CKR_UNWRAPPING_KEY_HANDLE_INVALID CKR_UNWRAPPING_KEY_SIZE_RANGE CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT CKR_USER_ALREADY_LOGGED_IN CKR_USER_NOT_LOGGED_IN CKR_USER_PIN_NOT_INITIALIZED CKR_USER_TYPE_INVALID CKR_USER_ANOTHER_ALREADY_LOGGED_IN CKR_USER_TOO_MANY_TYPES CKR_WRAPPED_KEY_INVALID CKR_WRAPPED_KEY_LEN_RANGE CKR_WRAPPING_KEY_HANDLE_INVALID CKR_WRAPPING_KEY_SIZE_RANGE CKR_WRAPPING_KEY_TYPE_INCONSISTENT CKR_RANDOM_SEED_NOT_SUPPORTED CKR_RANDOM_NO_RNG CKR_DOMAIN_PARAMS_INVALID CKR_BUFFER_TOO_SMALL CKR_SAVED_STATE_INVALID CKR_INFORMATION_SENSITIVE CKR_STATE_UNSAVEABLE CKR_CRYPTOKI_NOT_INITIALIZED CKR_CRYPTOKI_ALREADY_INITIALIZED CKR_MUTEX_BAD CKR_MUTEX_NOT_LOCKED CKR_FUNCTION_REJECTED CKR_VENDOR_DEFINED Unknown PKCS#11 error (ILjava/lang/String;)V            4       4      X!     a  L   L   p      L               `        P       `
     @  P   P    T T  s s t  u 0u u `v v v  @x              zR x         zR x         zR x         zR x         zR x         zR x         zR x         zR x         zR x         zR x         zR x                                                     
                  (      2      <      F      P      Z      d      n      x                        0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ! `   @___stack_chk_guard Qq@___stderrp @dyld_stub_binder     q @_lt_dlclose  q(@_lt_dlerror  q0@_lt_dlexit  q8@_lt_dlinit  q@@_lt_dlopen  qH@_lt_dlsym  qP@___bzero  qX@___stack_chk_fail  q`@___vsnprintf_chk  qh@_fprintf  qp@_free  qx@_malloc  q@_memcpy  q@_pthread_mutex_destroy  q@_pthread_mutex_init  q@_pthread_mutex_lock  q@_pthread_mutex_unlock  q@_realloc     _  Java_org_opensc_pkcs11_ :mechanismFromJavaObject  PKCS11Provider_ hwrap_PKCS11 spi_PKCS11 
 loadNativePKCS11Module unloadPKCS11Module  '  '  S Object_ KeyPairGenerator_generateKeyPairNative 
 lot_ ession_  i destroySlotNative enumerateSlotsNative waitForSlotNative get hasTokenProtectedAuthPathNative  nit s  SlotNative TokenNative  '  (  )  ,  .  TokenPresentNative RemovableDeviceNative HardwareDeviceNative  /  0  0  M DescriptionNative HardwareVersionNative FirmwareVersionNative Token  anufacturerNative echanismsNative  1  2  3  4  5  LabelNative M SerialNumberNative  7  a odelNative inPinLenNative  nufacturerNative xPinLenNative  9  :  <  >  ?  A  A  openNative closeNative log initPINNative s verify de 	encrypt 	generateKey wrapKeyNative unwrapKeyNative  C  D  inNative outNative  E  G  I  etPINNative ign  K  InitNative Update FinalNative Native  N  Native ByteNative  P  S  T  V  InitNative Update FinalNative 	Native 	 Z  Native 	ByteNative 	 \  _  `  c  crypt 	riveKeyNative  InitNative 	Update 
FinalNative 
Native 
 g  InitNative 
Update 
FinalNative 
Native 
 i  Native 
OffNative 
 k  Native 
OffNative 
 o  s  w  {  }      Native PairNative          Н  enumObjectsNative get createObjectNative 
deleteObjectNative 
   A ULongAttributeNative BooleanAttributeNative  ttributeNative llowedMechanismsNative                SignatureSpi_ 
CipherSpi_  init 
update signNative verifyNative  SignNative 
VerifyNative    SignNative VerifyNative  1        1      init update do  EncryptNative DecryptNative      DecryptNative EncryptNative  Off  Off      Final DecryptNative EncryptNative  DecryptNative EncryptNative  Off  Off      Off  Off          '00P`p@PP``p	0`00000       D                     (            libSystem.B                        0      /     @      K     p      b     0      w                                                                         0      
    `      +    Ћ      <    @      P    @      l                                  З                                    S    |                    ~      
          I    r           x          u          `z      S     j          i          j          n      R    l          p          a          e      S    `d          Pb          c          0f      P    g          @h          ]          Z      V     ]          @Q          W      	    U      Q	     Z      	    Y      	    P"      
    =      L
    3      
    @@      
    5          9      C    N      ~    >          4          0B      2    7      q    ;           D          F      1
    $      j
    "      
    #      
    !          %      G     *           '          P+          )      2    (      n    L          p0          P-      "    1      Z    /          `.          J          @      M               @          @                I                                        B                         `          @      A                                   P      7           w              P                                         "            5            @            Q            Z            `            l            x                                                                                                                                                p   q   r   s   t   u   i   j   m   n   o   v   w   x   y   z   {   |   }      @k   l   p   q   r   s   t   u   i   j   m   n   o   v   w   x   y   z   {   |     _new_pkcs11_module _pkcs11_module_to_jhandle _pkcs11_module_from_jhandle _destroy_pkcs11_module _pkcs11_create_mutex _pkcs11_destroy_mutex _pkcs11_lock_mutex _pkcs11_unlock_mutex _new_pkcs11_slot _pkcs11_slot_to_jhandle _pkcs11_slot_from_jhandle _destroy_pkcs11_slot _pkcs11_slot_make_jmechanisms _pkcs11_strerror _jnixThrowException _jnixThrowExceptionInternal _jnixThrowExceptionV _jnixThrowExceptionI _jnixThrowExceptionInternalI _jnixThrowExceptionIV _pkcs11_init_args _Java_org_opensc_pkcs11_PKCS11Provider_loadNativePKCS11Module _Java_org_opensc_pkcs11_PKCS11Provider_unloadPKCS11Module _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNative _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doDecryptNativeOff _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNative _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doEncryptNativeOff _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNative _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalDecryptNativeOff _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNative _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_doFinalEncryptNativeOff _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initDecryptNative _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_initEncryptNative _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNative _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateDecryptNativeOff _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNative _Java_org_opensc_pkcs11_spi_PKCS11CipherSpi_updateEncryptNativeOff _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initSignNative _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_initVerifyNative _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_signNative _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateSignNative1 _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_updateVerifyNative1 _Java_org_opensc_pkcs11_spi_PKCS11SignatureSpi_verifyNative _Java_org_opensc_pkcs11_wrap_PKCS11KeyPairGenerator_generateKeyPairNative _Java_org_opensc_pkcs11_wrap_PKCS11Object_createObjectNative _Java_org_opensc_pkcs11_wrap_PKCS11Object_deleteObjectNative _Java_org_opensc_pkcs11_wrap_PKCS11Object_enumObjectsNative _Java_org_opensc_pkcs11_wrap_PKCS11Object_getAllowedMechanismsNative _Java_org_opensc_pkcs11_wrap_PKCS11Object_getAttributeNative _Java_org_opensc_pkcs11_wrap_PKCS11Object_getBooleanAttributeNative _Java_org_opensc_pkcs11_wrap_PKCS11Object_getULongAttributeNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_closeNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptFinalNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptInitNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_decryptUpdateOffNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_deriveKeyNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptFinalNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptInitNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_encryptUpdateOffNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_generateKeyPairNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_initPINNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_loginNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_logoutNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_openNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_setPINNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_signFinalNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_signInitNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_signNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateByteNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_signUpdateNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_unwrapKeyNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyFinalNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyInitNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateByteNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_verifyUpdateNative _Java_org_opensc_pkcs11_wrap_PKCS11Session_wrapKeyNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_destroySlotNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_enumerateSlotsNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getDescriptionNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getFirmwareVersionNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getHardwareVersionNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getManufacturerNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getMechanismsNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenLabelNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenManufacturerNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMaxPinLenNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenMinPinLenNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenModelNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_getTokenSerialNumberNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_hasTokenProtectedAuthPathNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_initSlotNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_initTokenNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_isHardwareDeviceNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_isRemovableDeviceNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_isTokenPresentNative _Java_org_opensc_pkcs11_wrap_PKCS11Slot_waitForSlotNative _mechanismFromJavaObject ___bzero ___stack_chk_fail ___stack_chk_guard ___stderrp ___vsnprintf_chk _fprintf _free _lt_dlclose _lt_dlerror _lt_dlexit _lt_dlinit _lt_dlopen _lt_dlsym _malloc _memcpy _pthread_mutex_destroy _pthread_mutex_init _pthread_mutex_lock _pthread_mutex_unlock _realloc dyld_stub_binder       PK  5R              META-INF/MANIFEST.MF  WAO0#&&m8  m;=;i'!)1)MR-Szrxp' 
38&	e/,5/H}g-2TܧG@T@D&#:·Lp:! _vHAT$ƭ/BܧfI.a|i4%^*Ǆ,I&z1\ţ2 5xq#hgnQ:=2)
KOi^D^'	g C3I7qDcК-\P3_fux3B\$(#;IxeL[tRf|Vl%nB#6f;K(mJ\0)zx0]`hWG74II|fH*T)0n	eH\J^RTOv 3"jpY
WtIE;袏HVzrcVz4*"u#ڎmr}k2d	&'kGg*7;t+r]-
]E<݇mG[wyRNv}vhV2C AA*S{	QwHq߯T6j'!Cʛݾ/ۍ:ڮKX?-
G4^k&,.1x!t5`28t79Fȹ(Zd)B R}϶ߏ5ɮ#\6~{qu_6iwE>j5ںUb^We} қ֮T\Lxiغ[Ͱ֭KV:"&Kjm*ޅ~#Ӓ/)W,aO"J/'؉>c編hKyc:<PK-"|  Y
  PK
    5R            	   META-INF/PK
    5R               META-INF/services/PK
    5R               com/PK
    5R               com/sun/PK
    5R               com/sun/xml/PK
    5R               com/sun/xml/messaging/PK
    5R               com/sun/xml/messaging/saaj/PK
    5R            "   com/sun/xml/messaging/saaj/client/PK
    5R            &   com/sun/xml/messaging/saaj/client/p2p/PK
    5R                com/sun/xml/messaging/saaj/soap/PK
    5R            %   com/sun/xml/messaging/saaj/soap/impl/PK
    5R            %   com/sun/xml/messaging/saaj/soap/name/PK
    5R            '   com/sun/xml/messaging/saaj/soap/ver1_1/PK
    5R            '   com/sun/xml/messaging/saaj/soap/ver1_2/PK
    5R            (   com/sun/xml/messaging/saaj/soap/dynamic/PK
    5R                com/sun/xml/messaging/saaj/util/PK
    5R            %   com/sun/xml/messaging/saaj/util/stax/PK
    5R            *   com/sun/xml/messaging/saaj/util/transform/PK
    5R            %   com/sun/xml/messaging/saaj/packaging/PK
    5R            *   com/sun/xml/messaging/saaj/packaging/mime/PK
    5R            3   com/sun/xml/messaging/saaj/packaging/mime/internet/PK
    5R            /   com/sun/xml/messaging/saaj/packaging/mime/util/PK
    5R               META-INF/maven/PK
    5R            *   META-INF/maven/com.sun.xml.messaging.saaj/PK
    5R            4   META-INF/maven/com.sun.xml.messaging.saaj/saaj-impl/PK  5R            /   META-INF/services/javax.xml.soap.MessageFactoryK+.ӫM-.NLK+NL+O,+K-27wK%&UE=sr1F` PKy;H      PK  5R            0   META-INF/services/javax.xml.soap.SAAJMetaFactoryK+.ӫM-.NLK+NL+O,vtM-ItKL./- PK (5   3   PK  5R            6   META-INF/services/javax.xml.soap.SOAPConnectionFactoryK+.ӫM-.NLK+NLKL++0*())wpKM.sKL./ PK	r A   ?   PK  5R            ,   META-INF/services/javax.xml.soap.SOAPFactoryK+.ӫM-.NLK+NL+O,+K-27wpKL./r=sri PK-@D   t   PK  5R               META-INF/LICENSE.mdT]oF}ϯʾl$l'ۗ*}0G2Ckx$XmlUU s)0Fo:Z<зǧ_=|{ɋJQ^#ӐZk]S"RZT9O7r[5ɷ
lwywy)]C
usmKfXQ](m}MM.T!=
=:nt!PB'MG8T=4#WbUu׎TY
OfbND^k<X_A[+`>M?CgStM7C7]
f9)-!utlƴ6Ue6ԥMqFPD0؎ Amӛ9أ?'t0C
rh/xeEjSo9r!^;#+`PܼP\|VʍXijK|~|&/)h^CH}n1M6A!Ux.tz밦x5FAoVk.iݩ.]Ʈ]/`^$\)#\/䅇,
dJt&iD!KqL8	aqqxEu2!(I &~,9(,#PHK;1cJɄ,
f<rfN	SɃ,SE"Y!A9`c4K3?~,cBCsy@G!OY U '3^ʳ W3BO뿰YY>|XH.3h$3_LFQ"{`H;C	ǙHKB$~@K>Cx;0,IW vPGYj=vy[0Tu@1F|ي"-`ȐK3'Fv%Wٞ[	=rSû?PKv,  
  PK  5R               META-INF/NOTICE.mdXmo6_5h;/kOY^m][Z-(TlQ_9}H,Jsw#zBkS,o?x׃>}"֒<RөJx"z5
bZ}IDߐ+[/rffEOAsR3ZUQߟb<6l*Q3
nc
'rުI^>Gt{t8 eZ-ň|Jcd_b2w\&=Q<~j>I5UҎ_vƮ(DN'aSptcG!$x.6yZ91)c/fB`8Yn!H'cLSQӁemKyeBX2a:BBR|n@ F$
zV#iaJꅴ~hzF=CJ1dPʬf)-XYXdg&ȯZ4UꭗBKaJz$Lic 8]Rmf\\MVct'ShVr{ƕQhlXbg֩N*FHӆ3rx
!y`#[d| E6)Si+VsvLe(>B;RY*l.;3ɬE&Ob<	tK
,Xl3*qU~3)Jgi6<JJl`H(&D@$69i[\vv.i3?3.'rC+p`l!.N:\Qa;)KD$T""6+z*R
_}g7qhP V^#6A7leYaZxP		WޱEOBe

;Xti}5%,` 5P{
r	vc``-̐u.ck
W; o>2m8 me'Whвُ*4		 X{Yt;ꩅ.aq&oJppW++l:RюZiw6Q3ѭ2VƖjؔ޳`NmGj:aCPpP\CO[z}~EpIw`ocͭU.T3ODQ<Qvd䂷5(]R:N)&h~!ВOUiTI9~v/􃘀S?# ӺRC+X@@~YHh'9htSaŘvѓ+"<_:~3^3ύI72#-hpgx˘JCTw\Awhՙ.,	iʄ>LQT:(~|R7MtA*] .ylS2o"+UdO:Kl66& ~\ktrz
2[.28A'ר_JoD<T#V?`m?W,gm]C_&XpFpVֽ1%qEЌG7*&|R+8<,-^eHAh;c޾")aXRS݃,MWa%A=)[%oU\u	O*+K!M@/ޔN{PrӨ7pn3l=ZD[Pe׬i.Rj9:uyu^B6
FtqIP7O+` H2L"PKnhX  =  PK  5R            =   com/sun/xml/messaging/saaj/client/p2p/LocalStrings.propertiesO0WHmvP6h&ĒcGӮLwPPU9s?|zkDQ:8̎ .!Cx4<\m@8|RpDJheZ4kYxRX.\I,UV*"%
WNk.$_RFhPVYЫqIQ[ΈeV 2Td\3H6J^t͆a0m:k*T0u2duYR.D>''hp=O77y+<Ս𚊠ԄhmBYxh~k3xp8LX,Ji26Vقx^E1<T!5@\mYt3U=9BpÕU]?%,G%C%uq9
*:EmkH/`
Q/;*@iL"2 vOs+Fߤt4yS;בk_Iӊ0R.(I}ADMHҎwu?Nfa^$GFG՚K6.kA*\o18lO`~lKx:NcJmUa	%{ZNDŌoiT8iɪƺ%2f+I[H4`Ǡʏ1x5,}^V[{l['W2q`4qGb1Ä</
]iP8~PKX  T  PK  5R            @   com/sun/xml/messaging/saaj/client/p2p/LocalStrings_de.propertieso0WHtѢ=Ə*ZB%ڑ}i;"UUs
mNU5	d1Q
NAbh( Ri%	йypѭ#-jqrrj]5l`fCUZ*-5(6[yexkxɩeKR9>\DzZ5pw@ILpla]5

!:Ygh/e>B$RErҲ Nzۺ_rР#oڐTÕ6B篝,ML4FK"wm+_Rd<MkǕM7&:O5W-wCjW!rkL&Rqa<-Jt$8ՠBg:Rz6ϦަikR_cf̬2\O
9hJ|#h`ًmH>} ~6eeE?rXG/g+; ϱX"" 7`XV}#H Nba<]VvS8;`r1,I3%v,Xo/%<]m%7z:'h0#rX|^N<;ďWEgffDO+<5l4L#l\xɏx>Y8g}sh8Htv(:ͭEX&oA괽k}eAtzʄZ;K![2bv=_rm|)cb1'ӖW;5 -)7PK9RJ    PK  5R            @   com/sun/xml/messaging/saaj/client/p2p/LocalStrings_es.propertiesU6+KĴM=lb5bI,h@R8ECɔI !r潙7W+@ћBrybY"H 52bpg-i<bvx<5^S2ĖA}'Ѹ葿4rtSCq> GeMMhQ +xjj8Hm]X<==	qf4~.j;?nlec~9}7+uRo^{nY}4uAkqed?zO	(RtN(E<lbQKosXEh%t&HϾ(y$h)#%DZKEeeX_;8JG|P^hL*'u2^ZG?IJ6D;2
8c)Nɸް\3Lp9Hch::#\PQp)	UGJy_⟜ISSw:C*YatN8'p6^PmoqTaF-`L,):W.'gˋΟѐxMlNa2[B(p+zʹ,p?OUPZQۗ\cb9e]?$AHsvqQm>&3
)/:SOgN[H!P}v
]PJg(JO0
Cv7R[߄[c+VD燴W9!ui]oJ:9\cmqPKAZU  5  PK  5R            @   com/sun/xml/messaging/saaj/client/p2p/LocalStrings_fr.propertiesUMo7Wve'\Hz"gwYPCR6 ,8yopt29[j o[3W
9TFiz7ZCУۡd[wCl6CD+ I+7DDbܶl!>	zp|pj@CUg)%!u!W#YOZh]]RV˻ߦ#gINQnz><zs\on~/mt?RL"BfMx$z[dI|0$j{&160dc[߲`moW^RScUႄ{-)5qpLXc
ǜ8r#*hM#!m=]bYH÷%T=L'|:2:"u+p#(S.i=Eg4e\PȥU&_~::P+)et p  \==_|*S4L4,e *x圮Tjp/,Xè~Jz~1J36e)҆*`itoܙbvm-8xgC0;D5mR8*j,nGgYewniO{YrR|s{ڿ*]"ڙ3/1
6A8&8j Ф`n~Fg4HK5S5PDvb<)Ö5.7Hѥ%~y^sFIkLPK=^    PK  5R            @   com/sun/xml/messaging/saaj/client/p2p/LocalStrings_it.propertiesOo8iiڋܦ@"Fz-%)N}%SI =p<2g3hۣSUxMbquAlѝfYG*xJVZSɱgwRLSld)ԀmZiTԀ :ƪTZP3%Ov#>ZFԮUl"Z5 O@@ChÃ#fEװ	~ƥLu;Y|JLR{nI67G-;sNbj;ݳ+@eв=A76A*B^V9H<nDXeh(161d^u
[җޫPJ'v>`R#<R֘/q
RuY꼤R
׉y://d)MwKqZ!.Qrm	T*8QW#*pl9AU}"g_#Hh-,tSF߲ROce_`lyrUD9W`Oh'YN_wbXGKp%`Ŋ#>RP|df1Fiq7wu_B"c?\>93k-ٔ&VO;YAtga8ԅ~6t$vZIUD|3nxU?v}5r>/ϛx?h305)lah:v,+w1Oqz0XFKsr=0hO-.cABvʈf+]Yt

?ݮ7XRM/_PKZZ5    PK  5R            @   com/sun/xml/messaging/saaj/client/p2p/LocalStrings_ja.propertiesVKo7W"j>8q0`!rr\j v"CRnICK7<ˋKN%;5|(Ѓ"l)F#Ҷpm!wM#5WOK{	%edv B?~ Pq4nW@^#:NhD3!{t/(AQ7y'	@3g=jLq{u8nlwGVpBo7wt#k9*B0pe]{CDѽ4pɖkпW
R|RX(b<$TqH-n	5Rn
}ӈVʦs>;
˭$Βޝrbe|6[EGVSVfʒ[;:
ϱQGvdeӆM|i8쪾)%QRL!p6.iAg@>=&^Z`K(bC}`T؊qy̓$pV^ɭLbO󞭥荣Q妝k;\0#ݱ
2ՉADr\4Ey	9oK@,
``VY <\5oc˞il+{y,״GvL#n;EwNοGڊ?<e[ߜo-7}{
L~EɉWaOlnװ{NK<\%|`{J#2lK9/%hI3yYdSro;ތ'}	_HVN92ԝ'/gT'pgt\#~Ԧؾλ:
a7KZ,;oe1-Y_~|8KS-U]S=䫉??as`2=^?lQcX5$|w}x|\o6wJ}$>/ύſPKӧ)  b
  PK  5R            @   com/sun/xml/messaging/saaj/client/p2p/LocalStrings_ko.propertiesVMo8W%EK2C.hzH& I%]eGt!gޮ֑\WUd,cK"[=q\.mce4!X gtޭa tvE6l iX5[m<(ض	-.rcCu-ʴ`|S<Z p 1v鉚:vߘ6#g[wC(?/w..Ӱ.srz} gw{e>AD茏umu 	AL AcvYGl[dK۫qۜ|k)ʴRLzU0r`
BbZȧjZL8P@> !f*׶#lN@=OfhIyZF>E{%'+ebX`8I4NQ1="~9Y"UKMv;r	.5(*d ]S360H.dW:͇?1Эw*LζmgFz5j\\ eg	MsP#r/^!8,Ŝ ^(!(H=bU? US.VPP)quAQ#o(K>􉕉'r.!,+S2D)ϳ=gW_B^@mGbtUz8Ix>4ihox6:1`H!\e

ݵ#ϰM&C,Oiw"~x@nLݯ^> b@xҵjh&w]0-q(߬.s~65
lNnkC}9}È2;j]Uc>j|A]xڌLzRB~ WN	>mFߏݫж{nIP<J,!&gC*³PK)ӕ  	  PK  5R            C   com/sun/xml/messaging/saaj/client/p2p/LocalStrings_pt_BR.propertiesUMo8WK
ĴMEiS]Q{=BS##S!e*i{$3lqoh8Zݴ3("{+U M";u;-=:7]́EX1ޮK}p2RigeǀyUANn4Pl;:BU­v5

o"V8G@~(W ۬S{4ޭꖇ<C;Ll7/OZ-vy|q`zs'|@GU`f.ktuXk6ˀ￵K<o,r1PBY䲉5ʓ=^'1 0s:`mA*T&P:Ȏ㴪"cUQ2oDOȡ&
5V2yEOxoo<
Ug]	14/#^Vw	e	mY#Za!J4ՆB[if̫3	0_@߀O*
q<fUū2;%?A?K5oPcx	Jߵ1AdГu::2($/3C:MyҜ$w<7U ɍeIqSig|skJt%܃gB#N8e;1{E*K<]>ENix4UK"xRԉ~t~"Q
<ѣB9=%~9 "Nc1]sǿ>u4rFl;혮ŚS3W[nl}ZyſPK>K    PK  5R            C   com/sun/xml/messaging/saaj/client/p2p/LocalStrings_zh_CN.propertiesUMo6WeHhvCvc=B#[,
$]wF
vZ,r0mfޛ_-g3m{A}dqULD"bVXzdӴ]+=8MaYp`Amc5;+A2AǶ߱"Vvh4m'k{
b
fvp[m[5={hh|,5{ٷj0#a\pq%}Qz8~K٬yMS۴`W&ar}gF؄o1Ll{;phb-d (b>+senbOcAӘ]xFy
6)E`3CgC}4W рH$<"y44MS:u51p%tϨRVd<qG-5CWǘTYCC Y^ $)2ei{ȣB)Aq"~T<PCQ֗s6`+Ol8bAڔJ=W9/{O@&C*TPjN!P&eTcBIn۷*,릞 Lج!߭;_sQ{uɪ-B,ԯ16wk-Yt;7Xbr("}9R$8u>Th4 g5VyϱwoJ6_#|o
vJ-J&}$,>=o	^E(|
4H&7:	UB"͒!I6
{S4uy.i,DOuek+\qގa*,lݮ7ĒL7Y	eTMfD+q3֋ſPKF   |  PK  5R            C   com/sun/xml/messaging/saaj/client/p2p/LocalStrings_zh_TW.propertiesUMo6W%Ĵ>LJLCvc{"),
$-;LGN783]/;Z{t->eI'EoXCuWACCV9eĳ+C5;!=aoݡ X 
I?s
V*b 
2 U4s
=h筮zMP-1Jqr^Z$
= nFlnA-li}7^=(Kk-~/
9W@ߕ33 B!M
Z֡G2(N9$>X$)޶caȆnk.ǻxm"mO$۞jۗ<3Mh
gJ[,Eli´mKT",X"|]fjjH>ET^5(+Y`#Lt`~t γ K"Ŷ_<;U+WFbHQ,b*陬8쏝ŻxVPEQV:ds0ލ{܀G%0T?ɿ
8CAԴHRv3C3RPrx!}eU&
%fƹ)IV"*fga^W`W0acEh;o'Q2wʚE3ӗsҐv"ޤ8FkV{PU{:q.C^Kd`~`QNie$wƞӟǧ9PbJa]$FD$м>3yV('b&(XF3)4KpvA
brczh2=.@6:e|p;?PK'ʆ    PK  5R            >   com/sun/xml/messaging/saaj/client/p2p/HttpSOAPConnection.classZ	|T?L^5Đe)H0$CęZ[uK-j-(J\Z\ZKXZZ{o&2}wox$Uqb Mux<j<L>
sGy
ye2t>N
+5ҸK>_{i8y<'zi(%I^p?Z'1d2>8iTyi0OXx3u	B<[9^Zs'|iY X(z5HKo"iKKM4e,xJ>^z'ȤU"jOQ+zY#kN	
zYmE:{L٤sDj8s'kuUB:,i
iBs4	ΐt,pgy)?-a~9:%/y2|/B/5楳D]*Od˼|9_!+Wg^W|dzo`Fbʛ5η!J[k˅|ο&G$4)d8RpP|
SEsf-_a΢˙X:gP"l	
6%cL#M[jFj`[MCu7EbP3حfRLbD2MFCDlj8NNV29gŚC>
5ŗG0R\k
FVayUhpkw v[޴!kd%Yli
%ñ(ƝɍS)Zh{)
J'4E¡hmb[dm٢h摿,llf g,#LLz%'a)E}KyP!W,ާ% $vhme	EѤ(dR[,o-hpq7ŢMAe,)f#ͦrCA1
|;EVb/)qpnQqS-~=E7z$RKPsd	09 +&뒡x0i:1ў)b qQ{=BVȥ]ZqylS(>T
G&͉3&CuuB]<׃ ;V'΄#h^Lpbn0iL"
6"C)3sD4#V~phs`t-2ԊS4;4z\;5ީ]퇴-!Xa|OWslL*Vas#(WssDZ8a!כ22C+61F1ي$xC١ۛ9[L$6HP$Nʰ-gD䙤3h: t%WbP5a?Pq$ɭJnTdxZ.IunexShnte/&ˈAL4@(t
UJcXS,=xbPHvc9A7Ѝk}lٌƏ?Mh4[Z&Z@zTچ/]X,MJ-v)9C#[RLV/.cp'눖nTXQ"\ܐiStG")e{RK18Ԛ6y(xRJ
~2a~ߡaﱬ;O"Z	X@
ĢW'҇UXmv>k{">",
H$̈"
I{p)v)4'Cͥlz9,^l`??%	
n2A_~7E{wD_2W*K$X<|j~0߼7-1Ԅ_r?x{෱:@k{ߗK4}g1o[}r
iG 7b@it	|rǘ+J"H
"V*!}#!?? W_|%2v.4	}j(٪0
9bbb5`}PNCv9ggHI% Aw,dd$9s}D0c3&ffİUm(}!Q4ʣSU

UXG#(CS%o&Pq45P>5D2ʨ9*# HPjÙٱV J8$f_&+YO7!~	CFCtƒ۟lijƪ2C)*gҘַ	l3.=8,@ uo
Irz7B^ 
u\7O3(
EЂ{ٜs{`.8f9fsD9v';rqڐ
T\QI&ci 2OY<^ +/
n>a ]B'#h,K`}5HP"iP(EB9hz*	^`F9k"楡pHHvP-ONxk3F"xJHfiY!%;*O V9A>3fD"	ӆuom棧I3*6h|\
ycJd^ܭ}X-On)IkXCyrv/91
'$4H4lG{D)syalƵ!Ҟ	S7
:h-k<3M91>L}J2EKI)vf
]
G3%
3_3
=;|D,E%9Te9Y]~L3c]Fz]fQKC_xÉ1=G,sJ!eL4taߦDC[m;Y'B+öCMOI^.yvX^Isk"2
*hm=6>Wca/z$	-1%S`7o!q1
[Yd큅ʳk<oP(?ZfWK9qk#/lJz"r0eA+UIrc>oCWg}E<o
F!'zD+v{Qḇݤᭃ+vIy;(ίLQ*\U\Tu	4ks,q;J=y_jP.@,OethW4:~?4AwB2A;уtݍ=
 GX/hyQ
_Y߮N7Sq79S	R\6좒NkNlNYBuTHAQ3
3K&!nW`̉/Wg00- !!ߪi.AF[êmvш)*(<Rt|K2zYanUCR(?Hjr&J0Zq2S@񔤩sn@y:OQm3ўe*l::*>Λ zQXwNW6{ EhhRۓl{,K6ZsltL瀓.G{fRTЫN3EUPjaԘ/DcMMhl"4fY|boRgϹ|}·f{HQOvMx:n;ixofhVyLZ=Hs3R4/E2KтmK(p&UR|E~_~Ilix۫4l!<ShthIG׺ȧ
0wR+EFL_.
iVvP~:xiNu7P</tW.jnv>@W9dʉRl7^=S=kw<t(Eܾ|Ќoh`: 4m8c=vi÷=Ԅ5gs`;l^ByyQjY+޸b؇ߔHZ;:ۀv@h
QiՍ%'\Mؒ=D
CU0l.j"8XaN.a$ݧhA:[[zS1xZNbvOsx6|^d<5JA|syAh}	buc<H9R	ѹE\u	
Ki$]ڱ& 1Lkh6]jr=RMHB7#܂AmCZԽn"܃ts?RM'x+Ho"aRI:*Q>O?|#/'xzҟx=='Y>3>^%hEϟ~^u{m~g=~?_hcSϔ>W#K5p*cRU%+u;ԱV3YSsXWKثVsZb<PmAt3yOyTwhǨxzTsz+\^5Շ<Iuuyc(tɎR>1<1:f4Н 5[ϖ3:L >~K&>zu:e`0tGz~$F#@?!u7Ad2i8BJ?Fc.pNj5}kxUSk HjicTM/cQjqE5<R
=I+\&zcN_b ϱ^giY8Ų
7vG}}Xu!,< 5hbPFM 4ѻ(O<*F~](}0'k|g+5S_˷.L5j6jxg~{kUP!hLyka%\yX}Si friDXyrb3"Qq?X!x(
=C>dmP\
O
+MPxJwPE;͍\ 4J~jGL<x0̉PmJzҸ
]]FUHw5N整W.m5Ga8M8	<^00@rq^l"?ʖB~!WuCళ1.~6sn7MUg,W-(|N9M4!ӄ|N9-'xiNuldⲑ4?q	q?!qt@'im7gv:
t B$Ol Ǔ?^L[6	&i }_'73M<E&)؊&Dp1Jg@`={b ';Y7bbe<'O?ڕi̷ߧu5MV-F"-@J8J#G*Lռ!Si	N-CYgic:9\>.J>/[2/RJz2~O.5<o|3促\ɿf?v̿ټ񝼀wb7wZr3!>_£8O.~;i>o</~;/&o)ⷕQ:OϯB~U
וPSMԺ<Ճng'5^Сn +>껁dtYuDU|vYս@WU=Oym.*+.%Г
Хu[S5uہڼЬN fvAyfsCY5J3
BD/9~N*w4pp신90`}Tʂt5V=
7@BJ$W:
TPU(A]s#s3 kt'6R9A~*s1E2eg}0=>/8~(_Nk3IsAO
eg>QUHѹq+MIaU.N2V%N;iUK!JXVI(</Bב5Mt9΃njϳ.Eܽ>ot_ͅ
@_'+
RnX	P^Z4TN*@:_
[0S?jw!P|i͠_",4(BaMKi-	afj`'z:h&
n]TIj2-~xƸ;qxͼWi^i*0Qm*+,8@e"Frdh$ ꖍd4T5'V.K+rt-WiЊz<_IUT@af<_P*x`z僴jG[68N:fvWv{+ZU]|UvPvM,Gފ]{M-nO)#Ɠ`Et<r.y4#.\0=e*65
ոK|`.2 PKj\  13  PK  5R            E   com/sun/xml/messaging/saaj/client/p2p/HttpSOAPConnectionFactory.classQJ1=i:V[k} "\.bq1P)Lc)3a&W*(~>PsϹ%O v EU$.X&K%AXR\=T܀3"odLryx/
И!JӰci(%0f#xo
wȮ8,F"bn0y?^-"`'8.8Cn,ɀ$K_05ۚܥ)Xc|Ys7DLd.&~ѯ}%cAR~PKCvG    PK  5R            B   com/sun/xml/messaging/saaj/soap/ContextClassloaderLocal.propertiesEOk0^6hiCP(X-;NBS=dfZj;yu
cc4HxtJMC;a+9i1!R~J	bE?	RF]]4ށinB*BN[I8E5?Px&u/q<swNdl/6rQ{ciDC7ܣoDBo<|
3%F> إCW>,cY2=f뎽 /AZ;	~PKOB(    PK  5R            7   com/sun/xml/messaging/saaj/soap/LocalStrings.propertiesY[s۶~=gNLݨgNL{⤓W$6$s{w,	ʔ%X|bwKU>l6?`>e4OrL{JT/Yq#]9*E%V)}]g+Zi^ff $(|3ַ<62 SKqYY	vUFgɔdDH e,Y3PƔc$N*B'l;Gt<_}?g7)eLsltvMzGETj jB)Dq:[Ɋ}RQU|J?V t5|DE9Hh,1'7'kt !
gWJS5IAn<2j!* VQY"A'\Je"BC<KtoҞ=[	BTdi8DC	v{s{Vo2	x%PS
Xľ]AjQmMS'iي6 XABxЊPCPBsǋ`gQ`Q(xy!:Tr+rHw$ԡ3ɰV[e[!K@=W>2(Eb%OOԄ/@z/{eFc4ZrIO!գ$`*CB$XluM#l^j%!mR9f`.}g.&At$>=B"J)1nG$X4ڠs
>Fym]t)gs	)0Ka[3}7 96vx೯'hY[T0l+gj'7N<pFԷ#X/{{{kr!lEأx+dp"xAQ_mE[f=?;`JjSJej|כ@~;;{d]'vmUެX&kڃ.E{T.K+u6wlu~IVg	[9(FaG7p݆יZȑmHA`^Tl*?ɰd'ץinIEdhṽ,,X{?NL"ԋԘ6U"T'mud,8 |b}v0ik
{XYHYIZоOj<Q[+\r<)߆Kŷ\Ӓ>	 F#sɂεbKWx
ڋva{>S+8lZH,:G샇
D"KeMQYf]&#ۈ$܃<h\~'Rֳy{|"#Tk+	MRh(\q]\kxU:!()IpNNxrc+"n
26x c;=ەXRyB1(AVW~hڍAяB0+tC	=WlX0Nų}Yk}T*Qc]{H~н1-~	q'm8햀C|A}R.js%Ɛoo?1.dN\RYA@,Ij&duٰ	9n҅=+gN$W]fn
HP0A*%N\|~r
;0+-er-LskKAIe->G:&}kUK0ˠ_X@0p@os%k2$F0˨u>Gɼ%޵w߁wRd:?޵E1p4Q<XC^ŧvl>co_}BF?Jxn⨂?=x!UaS?Z#klAK	;nE{i>t F޺>*<R[
&;|jO]n=diP5x'#{Xf>)T8mN)?53hE<߈.ۢqMǽO},`^hxs2v6qswM_}39g|=w5ݦZ&fmKble]. ?{h]&;g^Ktϱ%Dz$?;+u1:̻p@1>p0p/ռ
s&x3h3: R#3Ν'Fa˄qdK\%g_g/ PK^d?	  ~  PK  5R            :   com/sun/xml/messaging/saaj/soap/LocalStrings_de.propertiesYKw:W𤛙3cE8siL.%ZֵDTr{@$ythJ> > WY^ܫ$l0ްagW`\FǹbьIp#tNӔ4SBu+kehV<V<Ïـ0̳D,	*)T[|po@,4V2LBvhUi\I($<
 aw$0P`'1X	r(LHEnΔ{wd`>F|
מg7B
;P&u4<}BkKymJz
%'AKl8WP-^s.&E]DW 9p. Y[ja[Ȧ\%E`ة91j+Y66dɭ^
!^NUl7L00v !27E4y3	QbXM5N(b>iH!I,D*'5ۼ9=,R+>maXLC5A_?   
b4o!=lJL&gn	mZ4D*C$Ay.}_
yz{'U$KY넩!oE
IAdG<E,VBB.E
ւ9H_6aM} Ұ%r!酓V"aSK}\\nM002egu)2ۋRw66y$?q 2%&>Uɟ,͐e_zKCrr`UY#9b^B*V/RxM\VӣC<3`اhN|{`+/Bp@'dot]Gbkް+n}/0
f3Izޗ8C1~m61l_LVL%Yy)v^IM9
@EĚ4 TaBb}J^aBx^tlJg4aofجY
! 4c~N)uY2dtJ'+O@8-!N$[| QM.Qdz
h0Ij22w]QXC,ݣ]%n%x4jsw)u
#VW!
Z	lA Tl>?@3k|K&,qT}d۱G }R@#}ʴ3NFP#6& /4	9r1bhHRe䨺Jqn
ؿf
3=iKʜJ(A<F,a,OyC*vBsh\P4gؽT+W@{ƀ'/aeLq
`H˝iZ)Vy_lL
Gw=iZWˣE]@ μr`v!1Յi~ 1$?W`\B_N`Ob<J캊p9:IO]8{Z֏WniWB>ZUcBB>=tXv><0(|)Ҹx#&Ua-L}'>f*P#1Pԥe<GOlZ qBsl
$~Vן-.F.
;9$>~=`ȲȌO4r{~{sC3ʫ+8*RQjm'N6Z@F:8Uۀ>Sۿ yVcrڽ\?6֩ʰu
d[ c
v6LvK>^niAw2W
s֍ <hY'q7dr}`;tsՊ v xrP'-=u3PUiIhF[Nȹc>;;A}kgc
Y8Ֆ j؆l`i.Cr:${ݽYkLU/ zhBFhڰI0Z~2	^ɯǎ@H?o<؁֢P$223@8$dhBk0OI5>PpьuV_kxe'`h]A`G7~hޜ|؆d%ī[UNN$#~\lVc$p543{D*x-qGwu/"IM
 14OKG.k?/'}릙Yv(v߭2ۧ3 ˫%=u]m
9<퍠x	oFi܁oloO툯uVśCuWIIhn;-䰲C%rs{ں Qxt*1̑81pPĞNZL8yT	ܑӻyKgi{g^e"`=2~uapvynq^&͉sǳ&<_ߓAFܴs7|dɺ]u޾??z%rJPKأ1wV
  !  PK  5R            :   com/sun/xml/messaging/saaj/soap/LocalStrings_es.propertiesYKs8Wnm,Uvvʫd*%v75CIv"%~e0D@@<zdH=4D&˂J撗Hi3`F܈,9z	y_6`;׆oi3+7zN5B<@#+.s\2ahDaٶ`zeE\ˢ4rYR+NBMItà@+)6D	
U'"ˏodզ\}:v /3,+)̂vu~<<>yU@ϣ#Z{z}L*~vR٪R읆DQ5wl}E{D{^?%IKl870p2r<`._^Ҡt#
$,y!OxSmS8VޛSxSG3Q2hMUyښC
=͂{4qY!>\)]&BF\{FDˆ$n7pD|ܑ"O܊d5zEb/E*^~E"a~DI`@L֒+2De¾|<@v2+1]f^A٬#҈5^jĲz![M!O`V<6 X͑ 1J#+_EJ"u@^M*WG~.v"'Pa]RKjcDZ&+%"?<vi)?R:k8*B^+_GzYܫ옡RߕUAmyJV+J"4Őۥih`&toQ3+Ní:!8
/ҫL|E'LdUIg}*qKP&
O|
z>n@YIy׸e"~8ʆЁUHLv-XJ|a
Q<:եk.hv%P>U#dF](["vǊlH!' 9ɶ£IՑ|xyHFSzF:ke*H^uiO&7 Vyuyg-|RCD+d-c'jH(yR1h>¡))`8aK4Q).FƄE؝MV-b^~ۘŤ57@L]%HOS`_Sһ7
jwXy>~Jؕ5U/cm*ϾO=@\E]qɶ*%qC/}+:~%8#/?,r4#73%:Г[P/] >!feP+a%L]HULsvvZs鐽&5ȔɶXSgx+61&>ざo8&Ţ>6֠io=؆h],4lgFykJP`&~-y7q̖㔕k*XNlk1S碬FͶ+NLtB5lP9YkMaxh8EV<׷bLξe
vb+d&}ZN(|+Fjh*82C?z|x  1BL )A5[
raRfj[%َl#/ծ*l,9aE][A<}JآY>&?a8΂41{$sQۋzXZ&"f
&l/iv`Eh3xfHmBc\ڈҵy^Ьդ㣰e5a::څʲ1r	ac+p/6JF=I2s![q7)k.|pC ˰oy:eyu6½	Z/&<4sbB(m6d]*ǑlU\o6+c!aEπ0x+?9do ќ#~LP==5sNy*LKK@g~ BέuO:VZpπwm,X>Uqk>n9'
*hߺi*5U  |IǢ&dbM$xi9ً?_P?\<^GkIw'Yߊ^7\/)ӠJ4:`oXv&ZR:fOqYa6E1#`z"t_7?vBTZS놢5xG5#=cs𢻽
w
#:7~NFԿ1=PhW#sl/DR5}KI{Ч:ZR.蓧7S}1:\w^22= >sMsPc\@Ge"q-@*A5na^ɃC\|zO,>}<8'b/y!&{g7Rk2M#j̛\XA7#T`Gys44٠Q{g4wWc
0`yӈc/Rd<գ:Wj(6j?z~ϘUPKu=
  !  PK  5R            :   com/sun/xml/messaging/saaj/soap/LocalStrings_fr.propertiesZKs8Wwkc<T^'S9-HBQm{/@zV2C  '٥GO6Z/x8`<J3ir7KnD8fiQp}ɜeZm5Oafv $UA[-y_s5i$4>`Y3"Xf`W27Z#UPpqQ0|v21P
HwwwprHDjhd̙r˙8`HoWg˘9yrk/.^"Wo`@29	p?<[	Xmt%gQK8ׁ%f~B3'<IW wEbNlJMB/"}\6sJُ!1wu
U`RjqemiC[Sv
,檺AҧNzT@CL<6ND&s!Y̏0kRA"҂YK`LS+5:Ł#
	is#6(t>zQ=Z@zS0Rs9hsKXmlԂrr"Ij{ BQ4/Lxy$	ūaH"D~I}k/ @6/A!QLC4`CC ?9J@*HaҹW,T)zZZK\loX*鹢H.
R
WܦfKԢNxN, 3	TnW~r&s	RX"PpI3i}HeZDNFRUL2I[P}JBnj50sƘhHV!r} >nXA!Ϣ8\XgA>\_g5#Y^)k<nڂHd"1&QŒF)
Wͬ9M	
&VKL	gyU#,H6TQ%B:>o`-G	[^"ʖ<dD[H!/Liyfd=*Z_ۚGϴĚr2lLGhL@qM4".YmJ?r<ؖÇlE$jۺ$uId<ԟc`IŇ^.Dqӧ?faKCם\o_O-$En$GaV-=0(b({{3Ob
K,Ct<@-IE:.9	إ>Puj;
^X."V
E ɷݗ.B"]}J6
A0a#Uw0^ Z[,`-m&sؤKjDz /pFݚ`KZVje 8u׶zfhնX[a354ȧ*sjM{٘[CFzA7+jX4!Z)6V3ͥqCC>Ѕ-#uFpV7leu̶:H~:MKv]PbuH Uu=F uE
Pky0nҬ06}d$XYG$zSv^Ѹx責VWj3WX^/pK="9dx4y{m1ɵ}ڦ@H'#DljSa	e^
k#:
ٸQÿy, ;E`/|W H6]S#^C#-_yjY0˸>gAtS땚ܑ1HpRl=mz	ּ5Ĉi* Ѝ)/ܬJwv#aWW <Rywg咾x</в'Z5,n0;Wβ=Æ2\서}F
/I8An
<Viw%T/ؤw=&n~
lڶ7'u#MK0MJ~fްoά	綤goS?<Kw;eZʟkضȐEJL
RuQթ
Ǘe7B{/xf`[qK#d2`h^E`[Wijm|`4|F{;`FV/j,av#MedJDZJУFBt\
WOpw&'*E:vE~񋴅}*hLEV9髼_n3МqbzZLע9-ѨmOg]>>0e0yHVg(3?P&|Ty}Wilq$jvJ.gy.ӣZ-VG\u	W?6xlU[<RJj:ޘL[t//O6/ojOixN/(o԰+UMrlBFm*7Pxoҍj!rKFPKuF
  y#  PK  5R            :   com/sun/xml/messaging/saaj/soap/LocalStrings_it.propertiesYIs8WgbZ*wq*]YzrLB:$@MLE޾ /O^7x4ruoxZbdn
O2JϵaYkIe1eFXav"N^[iYa_fnLDWRmX04>|eT02,LV+iZw2
El^LhrDl'IHxۢR׳ qv\Ka./Φgo2^Zi//߲$
0N
p[9.e4AX7k5/XmD9fq$QH_T	,;=
$I2xG^F!^5'!d (cZ@,hO
|C(EY9gŉ l4jz~
w< q=Ji?!Xw1G|nB[+
1Ӿ2$e.mZ=Y
yML燙ւ){KÇc>^Bz ]ܤ !.HX!>|[4b#׮fA6
uP"Ѓ*O${{IPA ^Qϐ@Etz`=
Ml!H$1(E	)U<q<FPhRB<r[fhiwZA[U9 IB*RՑz mJK1p	 F&ZiȲNqHz13Gsh>}_9O'Shm9#
\IP 	"lXQ`"fU"PpL	|8+qEjY#X[`1isp`֭)vZ7s @SzFjKd[9?	ف-I /_{Ϥj[74x_[^0T]	z6&`=۔Lߋ
fӆ^7R%z;
ƆolZg%[B鶧;JO {bZgh ,
moQ{Z
^Qt4vk/ oCz7-LC6MBf3{_xL6R@B`ڼK˻}*Â Z85D[?>hù0ý|5;o>Һ{ˠyOT0y,b'"Μ2{|:3]tLK3Ɔ, thЍ$˲7B1.XHe?+P$8HQsB\!;H{"dw
fCM Evk"kv0 YcњeJ
vo?'1ڊ?	è"+~pzƾk,`qUz9 UOb4@S̤%au*s,BplGV*{1d$8(5,+\$هh ]>EJ2SYkBv`ѱ+x@7
t!
	[p YPf=EZ]JTB*EKlxN<[Wkw%r2֫BxxB^bq>Yvxux0#\i}QkjEfQl}!P529~D~d)Ysh.Q*&Xdm}ֵ2l[)wyU{{C/%G&HߊHQܟ}ܰV>>B"#@Q4k\Bc-7m#<ՅpB5
c<~

x3KvĲgg 8?hx|]y7Afy
Z`׫Cx̸5Ϟ{>'pHCx̴#`;?
*1bR%P0$8``Ͻ*?/}?c/` eU#t3]H~
uuuvTXڜfHEܷ[+|ߴ`t:16{#刎JCZ YV/F}V\4WdKE/lN8:kӋNq]j+Uk@ŸC0codhk
:|8|sޜ>Ayd#I?\Rp{M߶qBOʴ}Q/E{A
HKb!}]_a0lL=	qH@	){RXﬃ̏9erS2-A?c#Z[1ʵ[)VCzF(V,^a627pi-^]6)GlL[*VjxЀky$㶪w]`;Uh,4(Qkݿ6_Xo&PK@I	  $!  PK  5R            :   com/sun/xml/messaging/saaj/soap/LocalStrings_ja.properties[YsJ~ϯ7*BB3Ne,p_074xR^D﬽ųڼ=TzhKA@^ja*NTeYiYSkmgqֺ6sv*.]^x7Yr][5$I..bma*sJ+~gy|UZa
mkCDIT[duSe7&+M5S7^j,h @70ҦivWzj}VeߦES_4fDaOqqFmVWZiqa_x_gϰlZJ]Z5YZk@\J.8+jM	<u#[N}[CG6\ԱX8~UJ|Ɯs9g=ݦu+oWbZM[V&N6Hbt/s-pl'Zб1h3e\>m<wI"چBޔ1VB~pFes+4]%Ўu!l;w>a <!qmӓ8q	xͶYW뷴7mδaH7~ ]M4df?Ldฺ=pHW* &\B@&WڗXM%k!t

ZQ׳"VC=#iA-$xm C8BZܥ9DW.HnD@ 3# Ā.P=	A;KxiL2>Ӝ|Zy͊4i8iAy=7HD3Ň0shEB4$'̈iAHv-ƐG{-\jfs_YxO\uWsϥ`}(.b
ܑ̊!5P|h?ӳg3S),Uy%O:zo([øB9/P.!)יG| [*l9O!LXXbMH.̖8;*$,E2Y!
^7,PT٫QP![eGyHg'˹+/+iQk3 rTԉ<YIgxFeqq/>+L@V_Yt,K?ROl%{/%{@QaBza[ZB?2}d
QnZHR$CjTWcG^iW,g@Oi-h:J tyjdITܴOBDʪ]Y5i:R#%&PB0q8 ײ!:/S)Vui[Ae ;	A-=LK\'5#6>ݯ3S/B%;K^}z?@)1DD
Tǃ>
KH.2b\.aݝQErHsbe8+vηgw]wzo.}7V-wH|+Z]~LsX y+6L{s}+Xw<Kb.?xPauVɤxUA\dXUqɋХĨf 7&#ω1Y=6k#LpƊ7
jmVX,|l5	*儢F"fAG5s4JBXo .CNk9G8N:	1 `|kehvmUNۗ\rCp/jҘGrWdToxgtwCFЬ9HfD^>'Bad>FJBC2T?μMJJ=6W%+]U&N	Fyy5XV2%M9D(r "V6AmwjXm?teլkqcqښ=.j*BJM#lG:2%OJn|Eτ&w\h0
Pu-;5y4rRɏT
,C\/arݍsC&gуE'_W#ʯiǰ+''x=vHSN|Da4P:RwBkO3ns2;qqڭa种l'Yu9?d/$47;k"#&jAͯ-9
ȠWi2V$q .o`A@hݸśm9AwY&W\
5Gt87#DUՖzs+1B({zAnQ'ūr׼Uׇն?7&"1;ɗHXӹ=]@j:A%
:2ߤ7(:gt[ N`¯8>s >OM\,سnFhwqvnN?0snlnG;yަF w>xԦ]hϛxJg^&qN?~-"\nHR
g|
1ZNE*2)s1XfОLJ(lKPrqJ0(֐!˷l\,:X!,k<'kgj)qL,)Sf	ԺWmVM5pK{P<d9-bvbqO')a9&=Qr{RcGgFJCb<_,!s_〙p?m`t>&oj@*nHPYpu,v[p?6x~wHrpO1pZ'=X
vω_S+e;G)$.I #<J9	O!KsFywfԴ.tl&tS:~1=;Gx7%o!*Vrp,d3~ 
V-x=sԣs~4ԠgJ3OFyWjoVzPK_  a6  PK  5R            :   com/sun/xml/messaging/saaj/soap/LocalStrings_ko.properties[r:+P&i΃@۩LU-"$e?wW{ߋ ʴT"r,B}75y"Fx:XFq(_%ID77iFuRide
HTIyg/`"XzqE}f((	~[(͢kXnTڶ"
bgJHVu^ɻ4NrV#&w4 p0aM]fwwwZъr}VE&y]'еfǷSL,qvқ4)gd%<h+;%ؗq].)40:J+5>~"ڑݏ5,KB>}3nhHD8%eF>=<j_Q ӫ|ɿrMr?ȋfzEu$HdJ}>Z:eOp)zAs۠0p=p&ŗ̥IV8gVq5#UR8m3$+tJZ|\$`}5#</j-47??{v8ٌX W(T3t`6&fK\Y>X
	^TG<jaw|JKsѐqE  XXF~?n[0RLkIːȽ3/SBZea~g2Y+3Vry;͙Vli44)=N8bI~dȗ7slj(snw.H0g82)߅N4LZ(5+Wl
ͅwgw-
(ÍFyeFDyH]R
#L[Zo$c
,$Uzl5T<B<b	l;`scc\FcZ0璻̜.ܷ  6f*57G'S6vuj}#<_̲ t=DbqqzN
.B ^2.Rtl"g_=QOt)r.qEpoE&^-Q6˓V6",L^3]n!fV !L%9uT &{(pdpJOnWs|A\xǝ1Է<xgKz~85ǅ,Ih84u]4꘏EPQw}mL*H
udfs
L/@һaKae>rnM*<UQ8Ng	]PpXp1&gybCe*̃ZG57!ؤ<'9F]!W;	\	f`[7=e?I*
P53e"Z(ZZ:lIGduI
\2 X{C;2?kN\Cnq9!=!fGu#g{r;ވYMҴIP`Z.;!X<G2U\ki$Xnӟe:|e>L)W-t!{$DdNJ|dmB!eX'U'"nt*D[ĝPm[okIg8ӨpjP(!r?"ݔ{5f}Nmļ`w˔ҧS3D[Q&6ČD<1l6#s\^*r>VE<ܕE&TlQw*bYڼ	-j]1L;نIpEnt}Q,ºL.{/k7w%7Kݫ20ytմ^6S/ݾLbcwC$_l'Jx\)N-UUZ	X+;k<ǧQgKCh|3|hKH[c@[sѦWԸEc1AlfC(ՁNybq5;⛇Vc'=28e)M1,4Y
V5^gʈӮ:+Mj$X!Q&J#@$:_~c}W˛?L9DIDV!>hYQFqyQn]V
<s@cXlfnҵ3 s2%Zèf(
<>D|
tGI<ZF?O24=$4s%@œb<y">WҡJdb3dLFmvBu2K(+rø1YiNdy?THj@Ct2Q4Cg]T4n~n{:Zy[̊8أعwӅ8,A\k)z# 9?q#/ո0."L,yEImCF{-<MSB Ȣ8`=/䆂n1˘e鬔=HE8S<xL>Z!>0_Kr0_%7i(+
&:5X;$esy4:('*QMUS8p"Kvޯdw~58zxjt}etw}WCӢWM(fkX @N nq)WjȚ^{`x
P^~TlÞ"㠦yN7m?Mr"{J	Rs@sT4xbHgySpLTFpLFǄF
enMx#b2sTf|\GUڣO%gᰳVJ^"PR
ECDm4*hn}d<V\@ 523r%Pj-LiۈhEiĽd97nF ?>EaEdUe~Sx׏^_pPK)ͩp  3  PK  5R            =   com/sun/xml/messaging/saaj/soap/LocalStrings_pt_BR.propertiesZr:+Xf&pU8ĩ*$RR;έ9HITTږH  *OK=h?p`hn5cx)d3ZXBcfL\譈y#si<ͬ@H$L,-yZ\pe	M{ 
˒q2y]YH2)n6/FMQdggJHe""?Q|lU|pBDX$WRs2e=ONhQԡx+ 
/dBRie
~yXcEZ{{B0%Al8ׁ{}bb-_#=3Ĥ7'ot/
%~e`?PiA89`mN 7(qY.慓><MU1f2\Lj+bl)ߌ"]D&"DCK!ݼv88y fGe39BbϷWDml+ESh~ξ&p:<h\x"X#VhڨùҜKx)\>x؛'cH!Y-:`]ۈf
(5C86e*EX+J? !xάf9QyJ< 8
:'+**[SDH}؇?
lRNx(tCk]-hE$qHhD_;˄];1JoT&P5&>EF%yJRZ?88NZ"2F
yhlu=(j'EDT`-`3\s]g7	X(y(k(8ƭRjqfYmN?OiT1'pC")uFH
=qHm1Rf,P]RIۃh
#R*4ġGG	K	
ypo8AXⲮ#bV`d;\V EF^fHi
f;f;s.56a%9TOA#яNB̏CC' /PB7hAq09Inx$[st)ɾqEF7g[Ts'ŇbkNb:|C᳜YэƬn<mfBᡤ̋;CqPB=<dNmܿ
,DGWdh|@O~&1S%Yt)/w}lU샢}ˤqqVNEFEkCj:I2\]lKO5JE/z%.0lH4Й*Oη ' o1 Ǽt <C3obin6ݙ^osTw<eՉP^{qVjd)~͓AӦbb	cy04)7z8V(!2
"t̾bl̄Rwԩ
'@GvػwUKWzգJjDhsthwD)OQŤU*8uuX#U|4;2nҬ,>fvP>RԎi})NZƬUZ4S%_EYQ7\yaSp @'fOL^ar:>8(K:&;T(vvEO<ي\w[DhL$NP/Xh:M
s\O;!oMSK (zA$4rD+.zh>7"*"yطwo@E椴3dš%XRD=F|tbRA?
ݕGM0+ VrݏDo/:b@iV-d}HF8@Z|G@ˎYtt faTg
xYhDwniY~lYgjµ^-<jA}KǁHQS*5{gv؜@MV}m7Ǚ8#A]{:c2,96g3cosSOٳ߃=Kٟ
yl^֒*.93**)sQ5l[ѫ*T=T7#F3-5}w8m($q%z6}h*;.vbG5gm:=+ʝkM6qlEWfH0hT܆W;]?s{ԧO$-cT9=Nn|U>~bw;dϕ=`0xWc2Hj*,c}:ӈg6*`(i1~y7=f.+rw=WV`;dJ]v*>_Pe*.}E.ScY_IWUGrR|^L!j>}ZcPut@pg-1/bOPH9{ܡܤ+wPKnF5$
  "  PK  5R            =   com/sun/xml/messaging/saaj/soap/LocalStrings_zh_CN.propertiesZ[sX~ϯ8Ƙ<ʭ&T ǳ}ϡ˱
Bu^xłXe]fnC'ybsYV,kjey7iU3UiVF{
}e5;T嶊e@HC\<fŖAB9R><cI+5+龜0ɳCuV7Uv{l`o$-MvYc@/0n@ҮiWZhe29Ӣ/M~qoawP|zB\\o.K+Z_XAk|vJR h!,8..8+j?uoCo]vª;#&nbmJK
}|nquZ<9:n][p]>	Etsû9
?xS/N8hM';t'Xpuud:qmD8Zpa?G;R)y54_J1ĺbuڬb-
L¶Ckx.\A@@xK(-trtkFn413@x3I }Oݦ3ʙJGjZ~Bwe\~ZneonPyǦڡ bb_c??@:{Ym{ž2oG1UQ+F"t 
IVȣ1D~YE$FcBSn2Dȶ o,Xi$O@62=Kzo ZaT ,9X%HʪJF5
ahZO9)0 XOGsאٔRO_(ddW4mYX|+ʇB+
<aCId^=rH'AkHc&O]nNOnN1?{ZzAnF@ºaGL_RxZ]a2}SP:=F+oך!&
 VO=WH	]Px-
vdX.PDan\+'t	 lC[
.>f~邏,sl()mNЄFͬE.i!QwlA`TFKO YO
rZ:)7=,[*XR2E6C:$mZ8 vzE '6CY5R6L&n0y@0FFA+TV֬TF"EǕ:% B2H^;%z	cQIkZRH{Hv|-0rtMix5WT
5гL6(-G8g8}v$ We
cHM|M0|oNT{WK24CXiBWRKhr5G0V
ޗs48<Kb,5?323ܝisdwV![i>T 	=jK(`,(&}9'HͤXg H<I5uB%B[(hJ:DԬ JN|<4nfU
Ddv`:
=&4ZcX2haJa4xW[zdu+' :d;r Iw$լdSfPS$BM:y<~L0k\6eBmvK^!u8xBJ䪉[-FݓyȾJOYwBrRAH]%RB{)Y/[1I|Lc*$0UŭjU=\XkTР
Ȗ[jutqұǓ`_Axois)ك5=㩶K DԵS^8U$G=_,
yDQzn-i?38-q@6iˮi.nw.9Iwt뻷'Su#GQ<*Y.Z
O%	xy8J{E@vT^Ӻ].gDB[{l蜁8F`7yҗc	N=?[z垁5Gb s8FgI#w.Ma/{Y U#e]	,^y6$1ϟ\ӐyhN?50yY,-7φ%5:g;SjO-
^ˈ0H9S;v%8>!e/^]M}eIˏ^3YD\yr;T!@Ixż$CޔI\IY0\B)z^>C+ߩYn6xk0DM^uW#ځۡmJ煙PN.XoSo.+pPvh{xkV,1ʀ.
[	B],tWõi֎\*UpгrHw%۩F
0Mw-_gBL3M-)]ĞNYuxY "GE;4<
gɟt3	\T!O9g[3
-0s|^-|h< $~F[Dpv6T?bɷqrGܫƦO(-;
{?WIwܓan~ߧnH;t O&FVLҴם0ysnpMr'mC/puӕi^⮜GO
^PKij
  v%  PK  5R            =   com/sun/xml/messaging/saaj/soap/LocalStrings_zh_TW.propertiesZ[sJ~ϯ_vkcu WABTn˩<#,q- xo49}V uO.^\?6f۱deVm&ФYZ_
+wwEY]lQL|eM}6^\/ۢe4̺-ɲzOǢڰHhM[([;T(xmײNط9[m+
n2Wa[d[
$mn}u`RQ7+.*_i{i珫o
f
/wE\եs=_w7Sև&˗`@yyqpvեEղ5!otm
7
ܠ/P陖Km#o}?Q?p/359\K!tl{mR|UA+#4ۢ{F6\}ql1܅'ɓ x1yw9:JNRu(K>5kn5<`G|s@<  "<WeiU՝We|
.l^n\C3Hϱ8x#خ{cA҃ Yw7b\{EriQTྩ|Ό) c;T75.WXѐabWC+HfP̑Z5Zj&_achD6(X	mIV؛E+4#v3P`hZd*U=f˫*xM/M4I>;co.(W$ o/NDFKg/LT΄2tsuPtRTY4ywiͣ&Ooȷxo<]uw<;D]rBCqС*`Wh͞tH`Gm
[E$^Ϛ٬wCRGÔ~5<86XX$9q Cg bBW^ӦC,.nmRW{}eC"a)&JLh|XfDqCɑ	7q`
O%y# TI~P\~єo3uVSb9"eU51\UP2CF9#$'k=͡2~o z=LޗL`wr-(ODs#cw
:P{]⡉9	Q7xoQ2-"N ETv_U*h"&tL|9пEǕ	9d{:-{bcˊ8e*9ASP/W?,>
&p4eZѳpu4 5,g}z&Q6}s6*$D>tukݡnOH'%R~`-;Wzpalar%A~׶8KR,+WRדG7PN{03kDw;1$
;	Mg
nz!풮l?$n(JR޳G#M6P9l6y#pV`mzGPp_LnoG&*΂"jNxMo{"aFAEMnl&}czhMt,k݊]_\wm '?|eH['4mJ`4'}:2V(e 5uQO=]q/n1h8^)L]Ũ8?yjqq;pv"]2}؃MF.Wu؟⎛j> '1mbXS	AWG^9ѨT&V4r5S>tAC>;M;k4qK>3,y)mܘNNj\dDgJ^Ocg3xKt[4RddNp&ٳ]X=	:DꝪ@4yV6.-~|{`p 6/tD|,iD,F>ZOҝ9}X)=" w f'"jxx
P4W#zg `wOrvqE0 cZeO7XXcy9	\7N ÑE։	~ͳ0g,bQbų<DFv!gi4& c]ZӲÖgC	3@c[Tha8m!9uM~	}q!*%{٥/^V?߲R<z{j|5̑^AVLR(d7C<Ve:K-Xڮ{p.@VΙ;yA
±20ǦD-7};s3.bl5V\:^:+>:|hr"d bRhBF	KZ9L<̡?̫8a?^5O0mPCx_P`~8cu>}v!&;xzFwɐ3.SἸ<0r'Ş73Zމޱi`^;8q:QDOkŒԐkI
e3'ӽ>DsMۜ'{0v?p8'G
> kXh*~qk6AaRzS G`7w3cT٢>zQ|Tw/GPK&*
  &  PK  5R            <   com/sun/xml/messaging/saaj/soap/impl/LocalStrings.propertiesXmOH_1*NM$
TǉUn
u of_;*R	<;op48Um!3gDQ<'R /ӡ!7j˜K	ZhQEGskjP.PI&/@
u%*/)SQTb*WZeM/nDq bcx$|V!7)3ZL8=LCIU4z(RyF*go':E|z/O'79?IhԉxV 4zɅt.
K
7
 tH-*WuiE1_ajŖ*0!EF΂>XIr
c5K9@JxY*äJ0TAs/**pPr|maͨjʟgP9iV5f]paρg>SW
2c<uȢLTyǴH2OٗO
\yIdL52uβW SP*V6R2BAik[ŵ/77=-K9&Y.SFn*|O&蝵zQW.Xgq"QFn*|FoW-YNE.MK
|Ln!3(Bbi
),OW?gdn1iD$to
		/(ܪ4$d4)E%1[cxcbxy/cy2Јz$U+;N剰<c[ɷn}pҕ*1.]vc|ߓ6B,RB,r{RI⸓LM!jS![Ƌ!Nq9r:
[/R8f~O7cNaG^3ROG%}P䅇t^?%ǧgx֯=S|ZءٝΥKΝFl`0}{ju[/_!k"h&XI^T	${{g]^"{3ych:Ӏ'VlQp4P^J$L/7] ur⃙
d&K}XV%Ʋm MUڴ&Ob􆟬z$,7zqPALq_"SL%
-b?8<`ʫxL5h2=UOjՓ~9x 0;l0'ϔvCQP_>N3)m;]Ff}oN|٭*OJn@9pX}`(*N85_ۮ޸`98Ne<uz
XHhrð!Q,\h݇ńKK9-A FVY݅P~WKlvW`
N͹1Ы#GGtމ	oM
U1|pțA8kмQ**rWݩY+
?ZuF-<STWRf1MugUAX*Qͽ<i#@K[L@JUv)2ֹ% NC΅g  O=0M)ar(>.`1LbpN{kq{׻gtMAg=Pg/ԳuM.\ HM}f[		llkdg_&7!Q\+s43-p#YX][osL-6<VWEPuJӹ;PKE5    PK  5R            ?   com/sun/xml/messaging/saaj/soap/impl/LocalStrings_de.propertiesXr6}Wݪ-Q_v'LyDAP@ʿi\(ROJ`
zuŲ?
KG}Y.9TqPk&ab!,7	;pE{_JaJKU2%y]2u/ԒUE&aPs|*|	]]
²ʰzL\RgX-+jŮD\'lްR%Rij~pp{{po'~:o*9ǣdUV><e\X$9{|8ɬ1GkOOd\Vp@wd+	eU
1ْJbx4Nq_&"K^%Uc5w_sf4:?zk](,l
>8`0.6>L&D/ <죦]L6m˖|AaVkn&=7YQ$
\pɜ]v*7 %VBJx868y
#WIpv3BC*rb1L"];#04
h^zҊ%RH?TF1꒛1^ȥ#ڏ(R"!%fΎd[&f,6<Gg)	f&|O{σoY/+Y
0Q"k$CjQ	HLh.y)B/iY@9׺e6r@&$Wk.QwT/}F|Ta_Mf%uDQt]edSur!햿iϟ+2JnZ'N_dR;s
&Z@Dbp;CґE?+cu^hR,	%&_Q쭜JSXl)(&Kw?`5P
@,/5JH%b*ɤMvJd;R$' *I{w	|odie?Ґ{6 
zD}4P_R~h^_~x1?c8ZޓÈ&5M4=FF`I\(ON򗉨OI(NOƏ0Ʉ3lJZR:Irr*RʶA=|	B"fK-ĻzR5}!?a2mt)CV{$fJj)s]wUCõ?w?;
LC!VR״\lVya8
4u+txA7*:sBu
[sPzFǨ눱ӂF6~Mo
`7ir4{5~Ěu7ykMammI6;ӣN7=lx%?WPL;H?>p4Oޓteъ!)[fzPI`k
w<pN,3n27m7AwjOg\eʺHWfkZOjw_ X	?:+M5lܛܲ&ԛs?ֿ>Yn=ĭ8*6sW1.ۓc40n1 %&QO;s<\ h9o+,(}w<'~ס{~^ob%yZbH_!N^ QR3#8}:L
rU&jø}~;'%Ϭ'@E83gCo z8]E(hc =yڬvCݪ-Ļ{RQ;3ƫYkJ*yzsv]6VM@b\ [,zh硉7Ȏ@ЎhqAߩE-Aѕ<|9]-|\
hhr14q҅vPK6r  >  PK  5R            ?   com/sun/xml/messaging/saaj/soap/impl/LocalStrings_es.propertiesX]o6} :/@X7.iRv}-6`C;;b 'E{LްLlvײdkVL)R	uui,c|JV*1ǬpEM@/;Xcv!eig+@+K׀t%,(l3/TqIZZi4{xXMf;Y8-$ڶY]^>>>f"Ɍ^_eʮuR|5&o]Mr#].f)99Ζ- 4Xhmp	OnԎ= [Z$~FaýV&$uO󌖳|63lmL(Qguڵn
RU*uS N0xo!Z6S2Jb,q&t	,!Rզ^#<4A)536{$Yj:70b-8o)!k&9BI%8H-bd[\D{ϕ_~T\V*/md	߻&aL
dS*kMr;ٔЮF0PIeُ><0?ݝ/Q:N*#mxjrPoZza:B,v=o%([&Q%$Wi;++8<?Bb3J%#>3"cz/R1; )҂ӽ'x(/>C8\d0isByIeXGGLL}mt<*K>Y(^qg8::,nK^Ï
;x]/ckQ
')6v'1&麑E(,>,jx~)	/03lP2bdC;Rl>^TakզAm():#'(K돔Tc#7L(v7I(
'U°.-&^AA,,)|"_(6r_}5
t
1wfӁ~$؅ G+C
Pk+ƹD|,JEy}`p?$}62fQfZHoCH1Gv(89TTyɼ3l/Rɭ?[`hS5.Z&_y;g49w߽=ebڴro.C@:3Y{:^XRџ{o;"~`/1naRY!XFO})MbTQդ"O__W2Ɏ@ )Z{LE<T)>}.`ggB6v f~,$am??¢KxEܜOS*z}e 4ut%1'sWV7_
cG`q;aZ=
zΌaI"-t60$|҉0y?h
nW	;d"nyxۦλkn0aL#<Ȅ$"?;.
o
}5J"[8!
KprE:)kjĘ9JvN҉Cs+Aäʼ#M=x!@U8~O[SqW9 Y,Fsګc;3	ق.	5퀄J۾<1.UXV0>dx| bi]SE-]rf2m_8i*9V&BIhp{gt$v1 6P9uױ֡m.Cz}zv%f
?ķ?Y2ArzKDB˗`($y PKW2#o    PK  5R            ?   com/sun/xml/messaging/saaj/soap/impl/LocalStrings_fr.propertiesXn9}Wq[W{ă&3<MIɖ̿)^n] cdթ۩"O'i\<[w6x&Ɉby:3I_,WX8Nص	5,-0+)KS7\?Id5$XZO\*~u3mcfDܖJ6Ny+[/fw_6.FJ+ [CQNa~*SޝJǣY5єO~TI.W78{s3(im)^
aq"8[{.cw~%-FaíW$u4Z.K,{S=B[E:fWݬn/Ue~n!$l3m7Rp&ÚDX%B-8&
9I@iC^Ax.QB>
诬lSƫXX(.kh?LIynD$К=k)fr
G.`F7.M/R"f
⷏2yPp,YyTM[
orjPJd-{\IvwC"+HQƕ+`*g{JN-mG$h/߶>VmWh$(܀q[PVpGEΏ脵{6@RS酂KNkPYN݉M<nčMgz_g/_eQ҇BojڜR:D C1Q)HV'	|zZh
xX%*)]}@$#CJ&)VH#adtoBƞr">>C|Ñ9ԑ8"bՁwn֣7BQ9}f2ӲO&?z4qftV2ϸ$T9z#fR}nhtvENCTxO,:ҁ(تGjI:#j:K_zqN%em}tru&LI*bmCpU\۟;Ĵ'{|M*I"UIB1<n^rp:~"ς-3*19N)C:|৙\<Ga{Cok$sLwϾh[3(ރ%0g!ɥ0$RSuYʧJߨ>B
6l2KvFSBxۄY*nFqo?ܳAV!y\qf%.a](]Y'\&_P[@7$_{oByTG/qQ	Clg}MqR 0O{O+]sv4<r?Ǜʸm<vlTGU8vpDr3x0bAH ]@&%^w
tKd{AÊ/S)Qk2O{q(?+2$tͨ5GqϭLsנGT-zNKS4a+4Q0pE{	]dxUa㨋 ^B3ha &&x&Ao
B75:<E0xb$x .KPI'቟kl\8"0ydyZGY&N =TVkNP(9VŶ":QM	a?0^vԻ(ː b<`hy~q3]ֶ>ל3;h:Ԯ;/@}};:b_S#.jjUы!)2w,ߋ2EPtcq甊.Lw)GE/}ox)G;bnNeĦhtMHrw  z@:(vPo5,:ۇSⳎPKCW    PK  5R            ?   com/sun/xml/messaging/saaj/soap/impl/LocalStrings_it.propertiesXMo7W-PdE|pbu&i9BRrKreA{Cڕ%M)7ofZ7F.WXĆg{gxuy
2XH%6cJ12#0kQfG/ 1zixE[AHQ#@#k.\[µ2"
%+إI]Y?36?,V
lrI+]&L))uVvTd=dͪ	||$B\$R9{dtZBϣ#{q+ nM!^
@0N
8];.kn4 K:$V+ctrDR0㬁jEvˇL(QeUkݭ?svsLYKx,+ܼ
k%'<˔.	'[Xǜk
6	֕dp
if_&Qe0$8|m$qȐRךE%aZZǊIIDԅ.uJ$euiC# ,dɴ]u:PVYR;!n8R~aY71I4ZAQ*3A0Ɖ{O[/R_Z|CgTN6
jkBp;C΋9{C8 %?zb!8^JK"}YEl4ϟa5!S6J:dFд\˒F9:bou)θcDx!V ܸg52ܵu@{
61+[QKeMT`!|>$F*mzvY]H	u IrM$+/SRoӬCyIO0gY8$mt~+!QPzIy憓$<4R@")Pq="Kyp⋦%yE|M$d<!0xdsϾ91 ȧQN<cw
']=塾-xBED۞nɏ~]xwπ(m='QA1wE/JA}GhtA~ED!gzpx6mgBu>ܥ#Qt|S~
c6F*\q2bیormh6N۟~Oij7Iɒ;Z!È!jy+@̰mQrxÕد(CSR}[p1yp3|p3>z+Voݡ*ax[DͲf_|Z#M*h_#ρ{fGӒ/jxߠF%:` f?"ԏQg1 l&
׊g?5&N
3Wh++Agı+bZ52yz7bq߆oU|İyuY_vY'xbAsIԿpCCH0p("o6j!==|R5si<;uÆ4F펶ȵejrZC0RU
%%6>,1I(wM;ϛxQ	o$0Kt:IaoAgUr2*xu~qH6$%xBЮ8;ldetuֲػ6bg1=GIv`DJڊbr~5N-u)'iɚ&/ko>oQZ?;ZpGmt$%^ˈȈtABaoƜ S#w|톾ej)Pжr6܊NْLf÷"<ttPKBz    PK  5R            ?   com/sun/xml/messaging/saaj/soap/impl/LocalStrings_ja.propertiesZIo8WhEj1T0xLC.r	PIZ >*StHENSSm:Kd+&6ч&J*Tt-J,Ҏ
Z԰5,7a7EvM}פ[16H]Z=
M`WӢLoaYÿ`ڶEZ,gekk۾+
`@a6EA `\0`M./&1߲k/Y^^[(>F^-.0XB¾Xiγ3>7~cm7A
Xر+X8&ȮZtSm;ݕ0!nߜUM˴_UgkΟVk=
}|a()6sA 	˟~i|gڍ貴(kTޱXp+'~e?Qlggr` m
ϞKX7@йhK^\ԃ=ɉPFX{`	UDT/b$l'鯼$<DSqaUYmT2m$iYbSq\{VH0s.P9rU ~csUmT}Y]{˹B$(LvvblJB>O!Uds?6EZ8c)W;ʻrx4*
{"i#!5o!&'d0
`n/\QRN|lX#fS95.iJI|i4cYX*BVϪ{VB ָ&q9.WOW{摰ݕE'b
\ovl^N2IZ994da2͘KvTV"PO.p;r(<́r
8k=+ڕDnh}[GMx2yanǊJuрɸ%ɞap#"%|C+ڏeNOAdsiw*R0eebXʡw0lbPJa$<Mc,Bƽ@o
rƿz0![}BB1ǕĂHR%uR0<j,PK$_[K-lE;O%5,q.Qhy 5$͵.tgے1m bVcP5ՎDpV>/=N𧁼cUh[V<
ABC,V"Z>ݝógεl{ezKmGNT9iTsvңpQe!n^TԞW{
$t	npǂFuiQ"H7TD4d޶	MnW7ݠZXwѤ	eW!v5B#-@5KmRk51ȷS!a?M̑#<iTq<˯%[j%!62kT")q"f-ԟ"zB;JiG3rܤ(WډD5pL.YMRLTMB$$dE/qp8j0M5ڣ~݄~o$7gװu(2|Da9F`o9S+qO_݂IWm]JU_A2H] ͛::bUlp^H!05'k{7=ZPOF]1ن_:陆xʼsųgܳ$8Ţ0fd~EЌ0<;B涿ۿ^yluiDnbwb~jjSY`%zkBSOI`xX{v^PUxSk)~kǏ?6?v7M_A[[(]-S%Lö́P`yg{$Js7D
&-. o8r6 3+|HǾd	Мw/OY}V
4u:p|dߡvgM[@3-mecfށf,A\lmo-sXh*d8gjK#\Cs[rj]l_la3ȟirg\ۢCf&({5ַ] PKo~  #  PK  5R            ?   com/sun/xml/messaging/saaj/soap/impl/LocalStrings_ko.propertiesYKoWfhQo¢t;]FX,sHʖGm/0#G"E~윉jTwg<c;6dYj
˖˼ȳV6VFrazm2kW|^7Ywl
+yVgyvr!k|iUKZb6/M#Y7mnۼ*M>%<* -Ҫm7ˇKuj]˲m.墸綵Ym(?_-.>,`Re=a½Em ΝNddSmL@
uˆ$)llMzM w)`¬ƌ6UVnœ%ۦ̞ϿL?&hS/[[p/ĉn"<gy8CDxyA($,*9*3aFϷqkj@66	wp$LᚺqOI"!x8E7?akYVt5&EZp8#T8J!8I"H)\{\Kjd5S!#gE~HOq_P߉Y'-lh8fS'3x*YVV-
t5H;gE5NWX
0T櫼XX

T 	'W%]9hGu'24lvAR큿DNwvr+8He-Zf1!y6yFPф]NSq\g&Gڼx,e	lG3IG3 Ɲ46ͦ[r0H:^
T]t~BrT
Khu0茘z=\ZG{$	xcZfG{
X;@G<H[+̼2);:R%e^C =/Q⸎AWhQoa-B_CAP>[8*f;"1S]Zi 0xE/ģ-hTl-M@~yzbHZUHbX]]wO9{%xf<J=25n%A#N,ssscl@RUJ0~!W@jLWN(mϨuWpC
n21~ǀt[I-\_
@u;9WlD74dD4ٷAvIT߂襽jf݉^
:x=dECXBm660&ѴG`!.Oych
bSDm7n;[xcCkXqiD^bq(v/u_Fڎ[at(g";kr14bpt*B}~1IjXx5 <+?_AZe坄 c+=ch~[m؟w+cQQDF1}ʰr[GA*ULEih_E}6\TAʫCD?FS<5NbxUSnc2͕ZL-@CrӬpﾌ
{}ZE{&'*j.ܸRF=ߦeG@EeN4=s(ۻssl-k[Q]:xv\9'2tIƀh6 {tPxtzb;P
)fxS]m_3	;z}8qaSv3<(AZk"o
YjPkbu7S{wT{{g u%ʽA""S'(%(8q<PTwI
NPc ){ALqƠN|n[@'^I5͖Žuެvz 8z*̑COf
:ũ+-bο&xFQ&F(ENԄtFJ$߳\V6-"36efL?P5J׾+k@whQ}&{
PKQCg  G!  PK  5R            B   com/sun/xml/messaging/saaj/soap/impl/LocalStrings_pt_BR.propertiesXn6}WK$-Im $NNC_h8Dd{7-]0K"KLNȍ(2VSN)^L0B\*&tStB &iv,O&'S5|P) $dYWũ@[n T9SDa[:wfk1\Vg]Bf<<+RI11a^N"ùˬ)Ye9n6M|pY8{cr۳ٍ{}-i٨jgq92WKiMoYlS
ĕ:Mg]Nj2&?'L2)m6}Dr6%7Xv#X-(U%M"dP%5~kӻ$Ğ3UР0#9Ql˟$cgĚh'[],"|<C" g&7dv]-+L(hɜ;zK2#km<wQYhES[Quis3V2!#cحb/BRpL)k>8I!"e0fSVp'66^ÞL/TX#ۓ/co0
i3Z ''A3lKQO  )YOޓ-3QN(W46	*(*cb¡V1c6֎7.T(!(nEϹY+Cx"H+{X񘪳@j:J)QeIlPH>FRlOU@0u8my0_&
ښ$EȸB6;Qn,
+"Rq+ٕC̱A(UCT?lhM£şY<oJt<ѕrm#v
' 44@1Q܅m<!aI*̽kݡI8ܓk;[drbTo[h:]Z؄A%rH=`ܓRk'@·FU+r#߸
f{h  b@n^&DtX;Ü'if/(PZBa٪^1o˒Dz9|w'Wm/0.toZ A[(\o0#b!:~c+
!9ô,piWnöl\;rkLkty)
slb~lw"(ns?EԦ ^sdLEK9;<R&jİ}XETPDJWO7>-.[HA{%l*`NT
G.}9n?
=-5F ?^vlF8vWN4QApKaU?^{nU#B%3%ioҘT0utj}DVcW6	-t9t}w"3I|[pwG׃r6ˇh<.Ә1	[#}9C^(BTM<;kp_Dg7֣)bL	lMhcu_-a"*=:#KugDTp&}ipl%ޫtO%e.}<цk{\C?"B/oC{ƹ;LBNqv`8סV &˓f87Zjh6hLJKj"5z{5|	l>l뮏7
5*]ꐟKWG4'UWw䴗w^2*0(:J&bjE
Пac7,]2W~wzp;ޮfH|_AǞ#|[a_PKN    PK  5R            B   com/sun/xml/messaging/saaj/soap/impl/LocalStrings_zh_CN.propertiesY[o~ sD(%tm!/Ed%,;Ë,d עfͅ܋YԻxt?7K(&[dU~]7ZEYdl2/K^kI#[<ܙ]?6EKvMd[|t0Z]VقJ0HW]_w,۶^+ɪ,v$ˢ"G$Ob! `o0Ҧv7OOOvyƿy귲kW.uvWէB67$eַs6õOw}1DlBˊ%kAmI?Z.u|쀯ss_/,mw/v
K?%^!w} B>'3w=O `ʴUVUu
ͩZ݀Y̣ >.`~y[GQκծXo0 K .iӣ0Oѿ
skr |_2DskZ9iR
x"w'# u`*4U$/apM?|4Pc `wU;U_NW[1K.^4YPac[ ;aD]2XFeH:Lզ(s!N>wiNyFt, Q񻗠k7;0ǃ?cN2 ,
Cܐ
:KR3KqHџja"T|2'Dl,M3;z%0^b7>niVC:֠zd	E |Y hYZz(	Fl%M]ʳ`#0"Ō00mm@S9-.SaSESqJMۿm5܄pA*a$21@0T49
B0f"c8
2X9r
Y2!rhSH<F ƕ.pn$@ԫdŬ#˿z  VZB
8Uzhn{Фaޫf-`b[S!ɽ$k&>]`Z`z9QXɸҨKɭ]kֵ{V:>!&Fp_Mb9[u	֯+dradX6lb֩7	sJAi13ϬqӽtѰS-VoNనLz)Bi%a&Nz,t()p(W Q]ى7BBGջݮnC_$a
TpU=55q	K8Ev.fyں02tv4_c6x4n#bꝆꐧap
V,7Y A$! 1DmS}Sq~&lx9~H@ 76 v\Ϫ[{J2,]Ԣ㈤gR
0~dX,/ИVΉj籽hT?e)XnMYԕ}psĨRb(H_w2AIlcya_vvA8dybuv>с>Xe5ɬV32Džsמ$U'O2jzMn~>Mp^?$
4-4bWʁ3ŚF){G|?Ho媮F7w׃URJߤSsJk1m{mY|L" B(0JF=t26.鋧;hSQi.w<ʦ-`6VgW0)~6fbR`@ccǛɅ{"8rwD5:</'Q9Oպ>ّ0"XY6lO9j9)dz1vT$fTy{dk=0>ef6PKfS     PK  5R            B   com/sun/xml/messaging/saaj/soap/impl/LocalStrings_zh_TW.propertiesX[o~ׯX/ 6M.@RMs_hreHF~fvw(Rq$L}v/f,/M2+KMnߚ4+KnXѵ,]H;,*K&hv"7f uѲmS?67n
Blꥨ$4EZF_9|ߥE> \_= 
mZVEVVyvMwE]"2K.5{i]~zz2c5߈kE^^,خJ/]i9,*VhnXe~e_%eڷs6õQ,ںo2 
V؊+DpBҢj]
vm>Gf[EeRM˴ll^Ug+_QA}-ë,-'>Lw+尉PBҪ;3Qo@},9䶉O~KA?~G64ύUf!TQ}[Aύ5ϵb2 2s|:1|xϹ78v*sa^JAߥe|@$]Ir	@Tm$Tfoo	>I)ܪ6, @pD}BӴ?k`-m֊ܭÂ@|S.@'؉玀C>JdNk]O6dx#]c|HϴLDWi_BH1'<PX&
mdDsÖb䈇 	I&L=mE%d5!rIBUl5ͮv[t.$Y
~7#%&z+Q+Q8Ao.M>ǀ|i]8ؖi&u]Dw[Hcfu!~Ds:$/B%V>v>%R5dU4g*Dh-7RqcGRncj(OA
a4wkFM9t~q#Kk놺zʭ¿{8s(vFPPBOeqa[mh֕[gzPG1I8	G ~$ޫݗ{?rZ`(9Q*aiɞ3`!喖#,4h:=377Ta3VNBH {JUwi'C# 쉂SKqhST;>hȂq|pГmSk>BuhШS)0̗*@3PjۺB&(sM7XQv94Fu%VΒQSg)K(Y><%20ҡROl"wp~9$91 H7Lw}ӝMiz`ȜxAD̮?2,&P50^iS026bU<doׅQU*tx}<P	W/d}ZPGbE
X\CFpĺ<1J~B?]s4뺇Is?<C)_j 
' 9MlSΚ1P1EXt|CxxuBy^u4X(T\!$zA4
aMЭN'/	9~l'Pg9urE̛(~~ЕHn(Ŷks]ƒf3K7:$cxyWu58s5
K	^D'Ot2u98; !	w<@|;bwo	;ö`۬3V.NOLRS:GwN#:No\]wi6EIlmLȺ04S7iK?k-Ϗt
ϐR&!V+J_ժ>Сxܲ2mRMi!"M<e~c;X{ c%erTl6?PKF    PK  5R            <   com/sun/xml/messaging/saaj/soap/impl/HeaderElementImpl.classW[WW&p	 %MPѪjXTKd$g&j[~]ŮvvM]]d$a9쳿˙`ߺ0]HAnם9vVؐqt"By'
.4W]AgC
l͆56u3l~߁<pࡀH4|e)H^:?,EѥXx*"#zCZBklHSB(&Q≥xd6ku[+JQxT%+Ww3&Ѥi<Gɚ&3tH#̸,~)WȎVtp^}LIZ+e5!-gI*I);/6v}%	8
]F r;/䛀/NC@<.`
RR]BC%C):iƁCH`YUS#yZf.8#]a$aYMx<%Jӥ|jBmy)[$?[(+q˧G8J<8Xy`=+gmtVMCVͥM8j>#r+!2[?\}.%oNI\\3Jȩ.ֈ"91fXCVޡy'vkpEg2[/#]R|jӌY١-A6f[Rl @1;Ӗy&5/:: դ|!ü鬸)?x$C|$ 8?aDJ
c">'pxbȱ +|/,eqSa[-	1jƧ\IMToE|[2'E#"U9%q-7"NQq-ly-_ac/w~[jj)RTdIUtRhjQ[U8P3	8dfY%Z{~UYeBU)W%(ReamE7XËJ3 {ash*:CO!ܶ_P3w=6mMƁ>4Z.I|Fx0gOGVt8P9 #U;/<#qng
|ʜO355|֔3aS~cdO`y?:~ݸ74]q7?Eheq;QOq8ȥrKN7eQApiK`'A}'0i@`mp/
/|v2ߴŉsh fĩ&VNtYNt!)	lB!1Cao8A-XPJ)*9C4H74;C?X]|+NeM
MnSU:zi09e;Kl`dFph!)B)Y!4z)׊V/,yW2ut={lUP9WB2EAo*7*d+wonj_`;.{5Z^oW'-'SI>> 	ubx6w/]O?aOb]dKGze7J<
PK=K  f  PK  5R            8   com/sun/xml/messaging/saaj/soap/impl/ElementImpl$1.classTn@=q5P$N
	-Ruĕ/w(H< (ĬqIH`hΙ3~5gQ@Yn`b9wLe8wʛ aa=vm%]PP@VV6}AE	)y/{|ϕ	wh?t7CXmя8POVhxr#{!J)y}|Zbkh
]Pd<40hh	8r)kSTi"XIP7#ntlTOWt'z;T@y}EpũFR_lZ~7	h"Zf쇉$B{Y(ጅ"f-Xp;:+X$Cc"^W(i)^+
2,T}&:(ӵ`ҝm@'	I<=΂"53t;c0g8FY	9z(l	6 dfeu%\&^C/fXgN]|@+w#{$'{1d9sq^r6([N}#fF)O29Zu74pK.hزPK07  m  PK  5R            8   com/sun/xml/messaging/saaj/soap/impl/ElementImpl$2.classTmSW~67BX%`&uRD*bHj,T7kn(/K?ഝou^3w=<>9_0r;0%	ƴ\ݐLJn&0[rmd0!'	ZTO iK	tcZβ{*x jM_Aw~opvE/iWӞ=;!Q-
Sӽo,Pq7|[sS/\;.lpYeMAܯecsx]7kuKZ&l?GkJ6mӟQp5u
q)ӑ:-
ZIy
wMZZζ;Gx^'=<&xfB>KZ4/ŏD{%^*ZDݩTKl˥ua^4+6np?aJ(:
,.t;q
}IU!0!
8F5|専U
o4\T|1H#qT<i\C	F^p
4D7[ݣ,KTE,J$)_+qQaJ\>nr}egA޺gZ{;:S6cOA7dhK~sZ۳Z0ne,<hS!Dg	&	{_UЛ:^=qK@͔%/M,Rm}SCM3H&4N8=	E
ӪF ݆9H
XFFTLf[ 
5F0BYIE!viȏ"A5 _5FaKI8M^ \hwHfՉ^@"Xl	@,c5U QɰQ,ݺ2;5Qs5!g+d[
fΛ2oB$p=:~CtlG%[ja5~LXOAfك͠Jj<$3݄IK} 
d,Buh?jgr;!1:o𥳐~HD1xM`ku_$	4 PKD0O    PK  5R            8   com/sun/xml/messaging/saaj/soap/impl/ElementImpl$3.classVSe}&KPC@ZA..^e7&eFWLKۃNmH #C2.~~|oBW2Ech:2(4Di0'yWBWcxY	Q4c\BɲE$}	H114gm'є5,kC=-|T]bnΚzA.fn2Vi|2
ga8-ZVT
y+n(ܦb6}akFԷBLSraª,CE,ݙ&\gUАTyu3pL*CvIV8׽ZRS%ߋA䌼zE4(Sa*OwTvƏ{ Cќ]t4}%*&YK3m׽u{M2>q/K2zpQ
xQY5|$ẌXFUӢR2>uQ5wFTs	_P0t"`z`gvK7=öa̘WM*HXtrsç
hU~z0}wα3-_T3g8nՒ9
n֊:)ҾF0'rӰ27=_Hǚl;޲|,[~`>-cTDc'[
I́p珄j2=a^/ Lo"`?]|O$;
 QCA/i_\NvP~!~=;|8swA>Z۸eG4
?S/~EqCe?F_ dd<!.N<.w 
wIPp$wD?DV.OiNr4ElϖFB㒞a\ 2<A.Idϗeh"({|!Z5A\I9R"pj2)
XEb=Jb_|oWKꓩ&bboC1fuD7
4!. )&!Gl(>I4aqa>Ġէn$;h0'Rf
GK5xi:EIo.PK/j4  9	  PK  5R            8   com/sun/xml/messaging/saaj/soap/impl/ElementImpl$4.classU[SF8`ȍ`;̵!uk.2KG%FS
>$3L43}OJ{vcP{={|Y0gm=
=0Ü
@łEPi=bYc
Vˍ(_͢U|Vu
RiC1!gku\I۞Ws3w
mvN2
:K_1~-إ=h/V SP0Vh32NY݊N#]ue׸iNAsk
&G.~<A,d%&-0}[##dE%pZN\:3AժJ}b#XʥrhZ?救R>yϹ<!4
pbms[!Ϝ5[3^ݷc[PJJA.
ޖXя[0tU\ы:ĐEN,G)h3ӦSǷNEY<%sQ>k+׭jtxy⻡
O(:cx*}NyR>jSO[AT楪lEV4auo&L"L@Wo\O)-?\uضݭ)9۠/!F^z=FVA_YnHdR,ُB\J5ZrWP;)!R)
^M\c}MFaDK8t"ĤW p7
q1oUm-tbr?Be`_(XL@+  XivlSl,9?&"DЯquE[D+tBxfrGT$i
t|w|zά@|FHqIAo;Kƻ0"0*ˠ 7L;߉eIVDHCt={yy	!Y¼OT`J4/ Ut$++b`QPکO#$xE7qNL#nPKxd    PK  5R            8   com/sun/xml/messaging/saaj/soap/impl/ElementImpl$5.classTmSSG~,\VQ$ElcCP^_v77+pFplgLQ/g7@	)ܳgϞ</  qJ:q?PJ|7Q|
|EL10"d2(Ӹoు*f欁9Rd,HghK
a}۱R_Fg+'ǘ^zu-kV*G1MrRK{(^tC81Wg+KnΚ=͑}t1+KtʮYp,DX%!֬RQ[vaݱR4'oQ۵;MVƩHL"YH
0/<[%W1)ו8R:qzaȋRF'h-{	fh//'źxB׶xA,70!T	NTИZYYo*eq"3ŲlUru%fR⪁EKxj2n1%zp3<7Ι.0Qxe&Vg3]tZ))Ǒ9쾬3ŪKɛOEW*e8i<B]j%ފr#vğ|þ}K"+SGX}@L2B,|&^KMue\kD
]vѫל(FiV$mPjlnVc,[O_t2A3rd;%߁'ovQpP$٢)G8OOч:O {6G!=~FxXG>"}ao
-&I	Cv4
iTUal!+NB?RNz<('KOq?C?Y.ĳ$ۅ$#S7qF*&(yƟ\)(]|ĒhџqzZ>(
º[4|DvvBl4NӬ;Hq#SPՠnxOmg>eZXwo15G1K6N
桞wqD(3h KHewlWVJA?|z;Z{cYjPK+I    PK  5R            G   com/sun/xml/messaging/saaj/soap/impl/ElementImpl$AttributeManager.classU[S@=v	
(wTR pSqԙmSi$)tFp}G9~jy`l'ݳ~pMN
	r[5w4pWgW[\
0!ĶpL)6M5=PHpkip p*-uBumlƂl~
E /Fk76sΑ
4Vm1.}CnY#k}+ZވmZYɜ2PًlQ.=cu7ߗ=vNNex1*͕#>mnyˑֲe&¸C |+Z{C*]OJ1w<i5]vd2@XfB1W-ϒlZL%5Ї~au´2ߵ!.W70jKJRɣҩdNa-@Qsގ}G60JwNDJ,ԇr*`
2Jwd*lY|%j?AϢbE?B~F8Ik})f/1W
Yt Gϑ/{eppba8Mg9KF1LQ*~RX$݈1;9>k׈i")zS9O3T!%!RMO]s;n.'zg⾣CRT=1UF(Vk*_DS]h/M]t
c)')W1-5Tx=%9KV=JeFq@q@E_ž\Mr$dJeJUuۘCPKƾD  x  PK  5R            8   com/sun/xml/messaging/saaj/soap/impl/ElementImpl$6.classV]SU~Ne%YHB[,Pk
|XD.CXٍ
zNuzxAg-:5:gw	qH&=<{nv+0E7&cxEwJ\^eZkQL1+^
d+Ȋ֜\~@*㚌2	ucJ[Ewek18rsZ3tf7MM55)*њM؃cNQࢮ*Vrvien7,ÝdMZbLS!5,V	[%1D?V2ŝiSTNЕJZ╊V$jE6ԊUT6HcQ^*9^s
C[Dl7MO<?j'T@[߷C]OT$]xUvQ c/ٛcE_KZFܪCkjxSvUG糆PhiXXiW9K
n-SЏ
V8G\GLMeװ-ংw񞂧pJ-V `MA{Og4yQ3d.o 3 AG$q#d˸ofU)ӜY.1?ET2S=Ovh=")CW2j9c@43֟
C'Ԣ=WM/-hEL x|-f p ezƚAj=hGbJB?u+eMɰ{98$a>%j܏Eizw!Bo:N
H$YD~Z4r8K?D(lamDmHi>gڎ0A!,)D13tgسJuDw#?!`>n RP2y0Aq1 -
C< ^<+[Dy!dӃ;
1=2wv۷ĝb
my
#F?,}tg>Ǩ&/1#}+7F^&by|C&,JM=ȪN!u2.__>O!Dv"ihOp~mD"w~lp0X<1ET/-$ǶrE
P"BDKx8Vm PKY    PK  5R            8   com/sun/xml/messaging/saaj/soap/impl/ElementImpl$7.classVSemȗm6J[mj7*)h0\4^e.AG|C;ch3=/8㋎VϷY B&z.;|}!>EZ1C=v| AE	#xoG%.1o^%dDLxYAJhS"ËxE@W=SPՔ]T>  æsmuyԋw+зve""+opi]%KY-JQw]`XU%Vⲹ54,0ܿzMDs(E(1kXT8;꼩<h9:a 9cY3JL:m'O[.}]@}S'YK;YNW㼪NA';́b~z~I8ќQT^I3L%`MdK%G
0^YADYi-y"'	q2N#-ceᘌ|89\qU5\OzpF@z
hlᆈe$R#>;LLٹ(jgؖ;eLS/&eӷ%d,˂8ݝ*Ž	\SG
3]Г]5L٬'#V,U
FKD:Mͻ?گ*鑙KVjf~ų`XKԕN5ZoUkfUp$;\|
D41oRbVZBQD駾 x?SO)i$HVTOBLԥR#2XJ(#wq߮#ZttC>Ag`}'$R>>Բd;8{ICĸ់IuUnȾB}8[߭\1}~""LxK`>rG+TJ _C+6!Mԯ!F@#,ÓH<m"~^Cw!J#ߣf#'1~7oU	#4N
A+_(O{h"6[egCr{F/!;`I0Q	wU8lOSY	>1>B&?d<rk4"Jc'ח3,SJVI% PKh~s    PK  5R            6   com/sun/xml/messaging/saaj/soap/impl/ElementImpl.class<	`of=r!	!9	ȍM."I6f7zkgB@D^mjjkjm*|~mevc޼3_^_$wZthPJ5gS	`$5Oos.|E~_@-^@yN0 KC:|=};4Ż.'5tv%]#z/^z}FCNϩ5KjIͿWSj[j{j~u}.j~@
S#ѨqPƅ	75inANt$^dLdJb[x]"#\s|_u!+
ꁓD!
En1pbhCP3qnQ=0OMY:Trl{811BTrKTӫtg5[Tl{.1-E[̠309n1-2b[,t3-tZGEA
[D䕐=B$Rs5,u}%XJwєw颉?[N['Vн4.q[Lb6j4jjZr
	F))XK8^'5!TԄI%z<XG]OߣH_i.=K.gQsvs\\Oyq=C:%. qyqK\.qĥ𥸌%.W%p+]*-7$BZz~A_$6b5Lz7č$7ySfDn+6q;5wPs'͵zH].q7nC7/#sKaEa#ąnq5COd<LM[$(d+EVQ@#~MD:qǩy=F$#**)zj΢x2bK<aĳn[/Kn[t@#K {n$ݶ'tZ`@83p-h=⤆F޺SF:a|\ָDv͡|4'`09Q^Ze882
tUutW.lv;#Ψ6:hjىw]`|H詗օ[+OllA$&^j1^p@=&>0D{P?=J!:ƓWK<3zy5Yh5(\:ގP>ͪk6t
v/jҺKmtnj5mၐrb	bcYc)q^݆\ݶomc{mۂ-r.H-K#*@@bg`W-ԉLvY%3׎D(ʉ{nؠXWgp\I]N Wx>1Tє!$@umaR8*Q
ld@7uP
xZ;ɦsf[g[dJ^,Z._MKGs۽mDB	v1yQ{	DW$L%nZ?.Cp Z)zH'3NW`g;MmxA=lAw-wR*-RKlx>!1j#CA);#N#$75m-"mzwڑuF%StCXllNtu;@2²KOqQExbiNֹmh-`Pάx=3݁rZPõJo7tu#ku0!Nh&J5+39FpO.D\s0QNP(k}L(q#YCq	Y
Έpʳ;Q c(mfB.ڞ(Y6ՁRx
53c!1t8<7Vl&
IGꗠ,DH#;:@gK{~6ON{õϠ_qEYCL8$%g8mR"r較X@{;9Ya@b5pқ
G܃#9ZMBTMqPB;H dk,:Tӟ
H;t0؈XoD?Lva|F;@5(Q-\zS;nMX`"ކ9Z=;I˗Rax%ʹP'F:fcW4L53I~"nSڇ\)2Aw䥊K1&04Ml.|؏!oFGtY&T:
ߖ͌1rJQ\݈T$x΄a,a:5>R۵Nb,xGUKbbW\łs>
F0f1"b%%\hdZ74l+ݱTo .5؀Yjp6Z>i=pe7Ț.5y̳=aۭj^hݴv̕)tnww`Jf2TevPRک"r[SHܰ䈬
 D&n0,nF!XnC`*%tmo$BaKtUIYYQiՐr~_u;[#kdٱFjs-+M\ܢ.xC/'عa5lw]<k我_7l>	rT,28IɬS]:5r(Ԡ]YcAОa_= :)eV	(w:,'g91=!N߰!VtTʆO7SkD RGL!mX(25fo2xSWQ/,XU\H%f;#
f_9aҶrR7y#H*tŘL:m̂7
#F]ӈGCݍ>4sD	p
nn+'I q,ljgeH@rx2U	a_
 zl03l1rN
'vU$$ёCj-' 22hl(Eˣ|;K*,M

!a@QRIS;J:zTe<"a󍶵=CD3a,̣9PĂmaSvF5;nn֊P.YqkAQJb@K6M$x`+T εDl5C*3*zyvm!`gԭ[s5 j;WwOfkVk-٠\e MY: $ohil*v-b0f23֏#bapcJh,YgշzK-n$6PV%g5^_`T̬1ǤĩN|x昪*\taVgslnWPOws6h-+HT:;Y[UYgm0jt{])YuvmdR~ֳ
:1whY%4z@#BfPp;[gwuv;{l+#'-aKu.GCΖ/:{@>RF:A, yc]M|k:?m\@ {|0@.>e&YQ&[w+5uvSnUg{i&Dm;#{^y.f:E>Z	yfv5q=ٯ:C'7:{=ou
{./?u/^g+ى..-8wQUU4qPVVW
l|
h}])ePiq|'0fO4m±K:i8*2`)ūC	b]|'l Ndvv0 KM,kP&dqg9+N0E**I7-]}>i}:tfҤi?`arn$Ib:D;'):}ڂ L;ǯDj*+2W{Z1E\lu+S_bDʄUWd/T]]c	tGRyRF+&Ncbbu7g==_>,ƇP>+^yMq3"YQދndMIJtAI]!>TDBNC5J,$4	8KUZ].
i<9p|J`W󏊃kN5̀Tt;5
QȥbJL{PT0B@5FޠZOSlR%P/l̰t_+/Fׄ~5u ߆u4nʷ!8\	Lgגǹ\sh~/5fP1 s!wc6s	]K#ɦr
oxНq7{Ch隮kZγ j䠰HsVO5StoQ	eaPe#5|,w(~hZmy
b_?0cg6Xh-<o׵|i!a:bV{`
NhP6/8Heds( 
:令OVS$E	REXaEuTHhb~=h*4;ZS*`K1&_^A*&AB,F:_AAU#0D:I*INǡEkdQ+d͘S*Z*Z(đfJA-Id4FCevDwNnAER_S+7,#CX REmhaZQUR2 M;]׆Ӽ`@n
	]񡌜:89ڥ'^x1uTyV>ôKi6
me)c1;ccܶ2z_D>ʱHB:R:_1(t~Qw-:$r+Yr#K@:dAUUVM'p-ѺVB=ʪI&*hǩwZBP .ǐS>*q񈮪6tE6ꊪ
WZzPP](rA
d4|Bz|#1Ϗ>}Z%nRPPbK*0&GdsdqgUX^R媶ֶ,n	A|BE5ɇRYjԩP
bIg]Mdŝ
ߌC(aC2͍pu`AP6Ț_-.#dsKkm<HtÒhZ$̳9'K_>|=j`A]3CG\~l]Qцq҅-DRCrbH~;Ol3.lJtd [=zBۯP"5peY[j`pA!=6[mkg;8?o9:1ΰ4VQp񶟯-k$G=#QF+58*F|QFD4tJ?S;&m[rfEڣ~B=
FN<l A"~2w'`-
m _%.'yz	>{S[Jڃn٢_/6?,*M$7#*hT{ ~+tQ?SۀTT]9}'f	k!H6 Q.І	j5	lJ|$5d;v*`m
`>
$ Nd6[nZe F98xDANO[]>/h8`MҶ&fm2Vq5V&k4_/}D2(29;!k;B	H@-dA@= X`"4X3aU\q$ݱpDaAX-WQ{g9ʺA ,ȘB9chUq[Ȓlbfsn#'8ij#6~/Ƨ0(q-LYp=U}eL6ȆS$bc	~b*G|')Mruj\Ce.^.FCٙ4\,+nڳيoGjݐׄsq5_>oH"[33w;WsNJHQ	.Ita	Mg)y$oq_~0پ0Է
3a(F20HQhIk/	p'
&j^
p
*е0YMdgRe-C(\xBqZ?(B	b46^?mRmFܮ p#L,M3qf6
q;^vG\xR`neDp7kBJg(>vxϠh-S\z+PrOcEȯ[a(p;L;`	`ځ;MBDB]eĠIb]v9g#/ Dk]\bW?Uw@SB+廠UjnlWtnC:~xCÒ61I\jimw
PikF|^ &4?(KhuL\5vEj!*.lѦn|>}%qB#LFHd@ȉn:BH8^`e&
±R9d'Qb7ͦ=tHy5JN_$prLS?gQ&#|${V妃v/pڛJM[hn-@N#o$5b&na{owm;؝
)u!}0</qS˥yGcb>mɈ.Z
nU;-Y,)8COmk:7[$q>/5A!{&G_b-9=e679~ۋRomG*'!ǘ-ryIǜJdm!<zWQ7^$\-<;Tk[_n2~q̥ <e{M
M>IƽG-9<r=l(N1"(d#ZogHl5܀yǡ({L-E
FH_DhN%ew2䞧)'c6 Ĭ!y@[{JiTF혤hQ{=.p#À1ֱZ#-qI	8= g"{IJ/ߦqɼOo_a*Qu5&9iq ӓ$ .N,1OxM*y`hX_x[..Ǆ_y/4rJCW`ED`w%&%21c#	1s^Jw
;q8+P+`e(kwIM䦝f|ZvBqsՉ$&NiZES9&	s	F"f!	q?UYŌ mko1/ڶyh
Dzf?k7AUЎ#}!0arwI`ʷuY޲-0qѯFAkʹͱ# LC2<vW?L\ܳ
r8Scհ]'`-h:Ѓqzvhn2,	%P~/í0QsZܫ"HdDk3? ^J>..S}V;7m,ٿ}$U&)Ӑ~cU&M+\-mG5Jr'In7JnؔIy2rrՉ"
K(/Ex盈7w)Px1GP9S#o``m!^ldPy[4y]@۶e+>8K˥ ㋧1xLʥ5lG͂,M\
;0"'a
 `W8}SX>C3YHX\werXD.j?%/`!L30!3S.)OgrT "PĆFG'HV*XX'.X:%/zKto3.n#+_Gqٿ?_A&Fc$`ߠ:~wȓ`1/,ehGQN`r 8}	I0
 CEtipHpJ[L>Rg4ӳl!8-nca9*U#,2^8GV{\ٞ<t>kڡ58JqgX)o~<sQ|'@P̽{Q\گ?G}f^bttA)@[Ὤ.'潂<Jd(fWkWעv
F	z2~u	C<TzDG!Eptp}V
	7F߸@FL[j>8W8g@/p_q(pҢir֡.V9FPGB5sh8m<r.p+
5>>SS>{^L"&Z6:)ǡOѺh2Ub&6j*V%EG>' Ǿ`Q['%p/fp6FJTD7z+5XEȭJV6CVyy t	N~,8/8Q.mdhh8"=HZbGľ1&3Ck}N㍵pw_N~+,6 ǈ(8Մ4u:
@:_eʚ-݉=yo6W䩊ڲ	"Km^	غMݖ7ش
2)(ka*y
VVtAیf	zGݻ	$PX+j"qǸǕـ2B~?4b>1(bw{D)af޷Dwܿ	~QX(xpK5ی	{, ΅~>4?`9y2SKP(~ë!Z$O*K^Pj`Y*7+E2va]Do,ER!u[hqίD=
y}5dkXKoKFy(y`7"~̓*AP?Lb3JCQq9n!FDW,8
M͈-_A9N2Y:ePo3LF`k9&d
FڎIx$n/SdvzH߲=rߋ߇q?
(`߁BfCL?CLZZ<1ɥJPۤe~^Cw>Mv#ڻ-Gz>(}hd7GaY-w	bͱZ+fFaܣF=CAܣ&^9߃<)\9iqOOtRx999_9_<zgL5FU~룤	c
z>#ͳ㻁k^G3ῷ1crDԓGFnLBYfXj T,zRF%74ee2* *"BWbb#{q)sذ3ԞBܞ
)G_Q>F|*CLT\~м^5oFc7#j;9x8gvLqVb"k1GxI6#\%ST?AB9%Oot_vG1ȷC%^\}PC`DZ%ԋjGz]24#}u.f|U#}j4,M,?[YD4Z
^mڐ8Qy.x&!SJNRYܨ<<]\	\S(L1|TTJ?_Qdo<_^@NHt(cʡm- 4
2^^eܩ#!FA
ybcaSE\aQM=].A͡%OYf>+Rbdqc9<V@"M"_WDζ%r\
"uʒGtrD:js8	jd&M:kL:'$YcIF9>J(sIg zD\kPP (
9@kPRxUV.^K EB++ԦôѻDnh5>ĵ9D1:qFCyPb
:󻄭 qA&]z +ȹ
d6εKN8}<mUXcx庿ó(risq!`9a2'.&
Mc>8\0Ƽ *0 Y}%Sud 6.R9f}c7 VנջuM7@،xc
ls'As{EGt!tDk`xvܚR(ƛ̧(.PkJtҎM.	\1	qw!i[qUQbk(AA74OW5ߠR^;Nlc
(2'F_=@7ZBv6O5lnx?fn 
#h>Z9e1N@&v#'v 'DN<h]p%b7Gk8]쁋œpx
6gL͇y
T\Lqɽa|_gA{`l>G1NM|.TʣNF++Foog'RJ=513(peAe1od0uԚ7J[ܼ
axŻpxNC3t]@ih|.dP/|C&ЬΕb0afz3&IN)V|iޅRq0z">O Z:-N֡VJ>Oxx@>J>ZsI`NdΈ^UY_4d@YLe7(CW5|=mF3( |dƎ<iq-_NWigC;Ҵ![;sav>BL.i%0CԌ|K	qj_F:$nRI?PHOD1y2ĉ&ï/MW1v>7&*~&qT"ۥ!ok!I]yڵ0^ڍpv,n6(&%|pZKeIݠ|=1._Yf
^V᧪>*yĸ)~u(ͿmC>T	)PA
kw@v'h[pݸ|[qJm7yvCA@	?Feb<&%Ft~4ԞH2F-Gi>ƙ{ y
C{ĢaM	:`΋	q^kSF
C&hƑuBJPvnl*evItL2'P$ 
i"Mد'JY]jǲ/7yrP1䙤u<оB%Qo𳨾},
[H@PsXzN?nXXX~1~k8
\yIje<`*fu8bح|FfZ]4}oח8ތܖ=-[ĚEATEAC}ʴJL>L}#y(LħJwoc8zHN((AZ٘u֗<KfʽIM9,7}},#1(fet}dh@	ڿ`SFr.Z WlEn`sV>Zڗb^4:
rQr\o!K{ѽ&ǲQu&rXZBU0
*ETUd=ǁ!<lY\1H!"OZYZޮnRd˭ayQlbkBUɡÑ#2cV;L9geiV'JculҔ2Y˧r<Br<B2$iZ)CK}Ly1#Y,YwBcá1`c4pas!YGٗ9ALʭ@"kh )޺%;Fׂ>~,E!ci2쨀BGLbFGͽX4*1KC	s2l*SmӒ#è=%xĜaYjeCv;f"96u
囫ɏP-=[t:]l	ȮD:Ac=;6xF\n.v.S/W]#@8˓3GrHL)ʰeMuYNl^=ǲj>>>ƲA2ŝEz}rq}r>
X.2I-Ry4F(]X]1R3)\&s6KsI<?X*pmc5.%|)^Q%ëױ`q؃$T9~p`Ex	vVRS\S\&mI
TBjRu%76
e!%{yp%}2d\q8@􍍠'7#T?uWsH2Vͳow;c0b-kdɩ 	
4LI"mdV(SL1º<)G
BW_UoT0,dRFʌ Y9oP;N(9́,g9assnD2X쟵zԣm1&
:NDc8QhF4 %P7@42G_XTh4*?8nPXQR
o;0@ScL&Z[?SH=ϞCeCH#qD@ՕI&ҷ7@ZY<r&=J0Ieckb+p`$-5jԑ˫j9Aǋ4(Z/m.v0}~LUchtܾw
gs;Cs:՜9sgt.c`XX\kKǹt9:
ݹ:O[ZQWcr{|p뒦'BijLa	_FC449^&}PI2i"3rlH΂U/	4JsN<OXj%ۜ%ۜ%fK>`I^8S|x!w͌iD05rf}lϔ0gSa3cƟZ?s]Δs\}l"GU犤wu8ztn@݈2=+ԗ*LI)1<_xD}u>.$ayڣo`WMNbyAS߁w$}Z~zlJp+֣thmdmxF.7㹙_oƩMӒٌ9EّaArB7
TdMO&f${MUؓus%YM2oe-)>gd3!GOT63T4=`//SzXwm	ìPPr Iw Н||k5}l3Y#W'm@l-gmm[@/?@smf^~VE('?Kn6RO8&z ǸT͘c~]o=D߳?n38.8?LJ`QuPy9lA/[ vaGbG?H:	9^vڼ7ŊPdD(3a$B`:UÄ)e8ֲE@X_'U[kPKw
8  ׎  PK  5R            3   com/sun/xml/messaging/saaj/soap/impl/TextImpl.classX	x~#Y,D>$J\@M$(I )-G
*qhKzуR((	CKiiݓR({;J+K~;3;yoެ~玻 `9BTAo;x'J GJ?/W?a&7oR!膷HBUoxw f-HxHxITA8 QCޤVD@0ZSHL%1DDz
$IL'1LGEđ$fh&B(sH%1$8Ϣ ZQ,gl,w$p` H$).Ob0+){8bJkEUy5=遬8ӻu+,ʩ°U,MpR&F3aIQDIšMMl.8 Fu{:VW1rnVFY=j'-ΠSfJ2
ýR~؛HRNb>M}}JL+1U)jd9r0p-0h,%ݛ+/c;|u?~rWa}@H%Qfqua&BS<<TQ񍇇C3#g1,DL:b0$u<.#>2Zd_uL%6a_$ԧ{T1k"#b 4Dx*N󨗡^3:i8X-i+4U n$%Դܟ:`a['QF;R:zgKTFsCHF.q{|gKP5OC#eQiL6ӒiEէO>n\Pzҽ"Ɠ1@ *n`oA%r>X#{}~\5"5RLhEju-G+\FLI7rOo
˻/҄\NAbȝ$)y
ѝ8U}cvj93s).JO!MV!_kW0RN(9t6"vuNohB1g ^#*l:M얕79'RYrVV)^j2+4;фl"ie/2s8ː39K[!b~;n}qVUЖ!)EBGmS`[e }UO}'ڲxwI{K=+ _5".?Uh;	t{RlQ&:e8z
hnhr?`*_J.hs/
ZX2*Y>bۮ!GbJĞ;rVhOe{uo֕++U6PV(*]OIt
oq`|D`HgK#| ǎT8M,YK<+ǳL&q^a?[! ɮ^<u٬DEiږLrKEŮ.ST`+Y c 9WaASixs[1\Eى\
p	KI\FT9JK\IRp :2z 776fjyu*jaL;Nw	pZwؽp <(xV<O$<%}9x^E`xY,*fUy((n,Ӣ8E8Nkug"j&uǻPy2IB3kCX%-M)2aؗ4
j C9/t+)eQ?m>p}*^T"UHOg6ceWweiܐ	}K6;yBʕnzr&:C B- ؎}<Ux7^y9  TZG_zLC B
ĠXg Hƴ@
ۂ>rԐ&PI.Xj,A5&TaFU"Oi?dwa=";GX۠jb6خ|J= x>r2	Bgף3i#6hL|)癉^,h#!ݫ[gnBpo"l6]Zc.;h]s!hBawBȔ0PnVGfNbo3vafcll2>m^od fˀe/XuĂBLZ1hE	>\T#E59-he
&ކz?o>fΈQ^H*B]Vt:d~f0(Ԑ	3hx#sSvYO?%um>=6Gx*>&x
YR(dC8{bx9*5eKR܌:ѻiMoTG{<44:	JwBK9&|q%͏_R	z-E./=2ЗUg}Kh[z>9ǔ_r+ _ͅSwc?(L微1z\qYWh!-saI++S/aB\P7N}^"zN̧QĆ|1[|WBo5y
>=kآrjC:8n*U6,e~,Tu3F(VkqM%zmP;ewf`/]j+]bXZ+s|ޡEɀeV~Ҁ}Nq/V=_vyܪ;2G(o+Kt;'poUIFe5^^t/ØQ7KNIя\+=?{9367iCڷ[N2k U)8^$^嵨_.N:p,sEcpRjF'TaxP
Ca4l>8xousf;xAy);,9N:s5gQ	r~E.')݀4k!~EOe\f;vt:ӎGp̙<]b fzB	!̼aEnv Ew9g5a\e!^ENL-2.*o$dM>sӔ}lr;$o~-	Vsb.6"ԞPKuϓS  )  PK  5R            7   com/sun/xml/messaging/saaj/soap/impl/NodeListImpl.classS[OAf{YZh+KPPhKeAxØ
I㦐`xn2^p/ʏAP2&/3;sf? bY<*bu+ܟ""2XVCGSGu$cgxf"{ ДP_|;sf-Q}
a1M?_0iL/1y̐}EÂ%|M="+pl`6>;:JO1X?	X0A|ʐi4)R<
BQysh
m)6sd`n[jϰ=JUӵ	wr'V[(D7MАC.!~7qzaݬkNhÐGMRؼ'\ꐯn*r %*g(^B
yk`o~"sl%)ᖢҺLkVpXTE%TeII,)MCO%	I\ _f>z]W#
2=/y})B
2Q)zPKN   6  PK  5R            ;   com/sun/xml/messaging/saaj/soap/impl/FaultElementImpl.classVR@(Zk[+*E8%]k4I
߇r<
2gϞ˷ߞ=__+(v
&0㚚_7p7
m:0q7{j5f
t⡎	twl1y+2DvK<b\vgU
g|W%%,0h^Q2tmWVK!$%j^7j;;`B6IQu#ު+}"p^mVSe"֢xT%3_YK|ŋY\Ah0;(-
k:@n"_tWPܚ%+FUm4уI%8g121ClvzdtzFPvWc3]z'ܒ}U,2R!3[ZVh"~3&f1c^?c8j/)>ê>'p]/LO).2Q#%T<ֵ}]ۖrƶ	1+1'CQ㛵+szz[J7ݵA)$蕚>m;]k٭HwʐMJd'қ|s*V2.*RC^NI^AnK% 7}yڡQqM!F>8464hN#38AZ8DiH;K޶%l[3ll?E3u[ƚa/=aS\Q%31@
y'hО::
ڐa|EW8<ziC$j:o AH"CsN+=5
3*ГFFc'GPKjii  J  PK  5R            :   com/sun/xml/messaging/saaj/soap/impl/BodyElementImpl.classTYOQ.-L`e: 0SQbXSCp)ԙ)__$h|Gϝizru_Xƚ.ܓbFYN$M`N<tF9	,H%
3t<\+|°57=q؆#-l+FzgVᆛN^C~#6wC++NIoxɦT3}Kp
V.
"SoÆ-A0$#W'ޥZPHManh5{eh4vɲ^ȕJL'ath@3>2+;zrK^7\86E%<ڮo6uWItGa)FZxI|q}}+[(/KeкS
.<LV)VIFʐH4Ǫ@=$dI1,_g2?8l0̨mEDU԰t`Pk͇asC@4	zxp^8:贉 %;D6Hc8nNЋ> cHnC-iۚi'v
#uіf)v24JZ>G}F{oHMu@ɞtdȲQ5\)Irw'fC[oBSQ PK!  5  PK  5R            5   com/sun/xml/messaging/saaj/soap/impl/HeaderImpl.classY	xy~?iZX$^-0Il6,HZ{+8m6m8uc;qp4v* ݸ6Mḹm`;?3{j$<;G/ŋ Znl?hj	\?kjg7jͿ.=bN·X/UKj?5|O
w~Xnm
/W𪆟j7j35\1}uu<jxCÛ.	\"n(J
)8\R%K\.)vLD
JK]nl.L*en)EnJT)z5Y^%רR,嚬P+}t*"w4V-XHKj5#RO%.i/<<Է`o=}=rPP	p| 0
iL[`|`g82KOL'X,05;cd#É	#muG80a4q08:##'6G`h3p ?
g{fe$F`ĈhkFJvA<u #ѱ뇛G+d&\nNςʼF nXVo3p,pd\;Jd<HܘIHiNb̈ECaHںy&Ǣd`Yd$7FǌPd~U2/&\6,]ONhPyZ
PxU@<0|Wo`k)a,mJD`=^[;]5Ts"5wǍh DQ`7X8ODsoZRƣd+ϞvXtp48l"Kzj <"39p}8}ɀ.;bcY*LÍD:Fba	ȫ<C55C"?I
U\Ǥ5U9d2Ϸ氜#
s1{fM5Y+ЂB#ٚeX{;a0}Û)K[amHcF|o +̈UUA3k˘<LSx32Nt
hUӞmfGń9|<[%*0,24U}II"U$Jj.*cKH&ms5l.\j]%Ey6jPh|0d͕=t<C!nI)S}V{ɨ7ﳀX;@$6vU)K~E^ǨpݺVA|z9]6]6F]6]6jY-r7:HUn&]:d lN]KfcuU[ U21݉@(84F4١Ͳg`./SR<R;u]즮S]8>#c Df_4̱*[ݡ1uDLhS2?v[d|&L2>)2:>x/J~G48G^|^'IFnb]]եOW}26
~]nQooŮvԳِϲY"G
ZJ1A⋌|k\cYCikxLMpIu:?ƺ-pNBTfHzo8G,w;ѕvYrV
6^d?DGFsQΒEחCܮ7pRv$kQnnܖ`m6&kr.Ew$Q)=eQ	<.2)<+:#,a˸iNKP=s6%$YtXg k;#ЈOqޯ<mZkV dYD&5azJ,-m	F!?jܝ0bq.qܧk)-flسW;;%AS"[r._>V\,3%߰dpuzay$ғ +j릷to5F'xRnv133<.jQ̒s.3.ecǲ-ӿ xg|iQKN9
wuv/'L(zx5TǾdw$3F~۪yjE!X}hڤcfTbA7<QxOl-3|J:Һ%|:+=ӆh^9u$\6eŵö309i(f(2f/P8nq#2@wPkG5O;p[Zuy_tڤ#Gݕ+׼CMRhEm#UE:̤3*7(3t2LkM%eÑɓY8ǳTâ
/SFd(ٛn	3iSL'0(@,Yk#YvƵӭ}(OXM Kqü (j8x8gQ_,	sQW:8wg-]naQwLrf^dH~VQPp$gqk9s<gNzW6u;Q:xB%8Σy8Q3G{Y@q}JzȊ)5=ݳi
eP$=เE<gQL}/}
M۱ceوReg،؀U؂&lztl.t;pvv&B)F	;Hm׿In {^/24]FiL<xbq$),o	y{>,졗!ru=3G8@H
#D>ÓHlDM~$xhUySX}&NGMU֊omlG\wH,pNw7Nai.MC45WwGёbbNꛈM~ۣj
iXfg{a)'Vcn{;twb6xMy\}I}YBmOL&/Z3Ynwm/uu>{/̘?K^%ԴkNīM4i8
\m
cAmŧqZPYn
ܩ8v
e)Ԟo%&S+Q	ĠWӔ+~
ul7Ћ >]Dя1A18yOq4c|zL'SHI5Hb2>ݤ:L#+Vxls&e3)ۜmSL>)jRFP"r0?HgͬUOz5&5<
k/c
,2(
R/P_lTNISY!i|-2+RUT7שO^PxnҘ,9>m3Q}ElEóX
hh9YT,TQk,#Y*8VZ0YRBYq|֖aT^jS)|,vӓƬ$ޘj"M_｀uJFOɶj)3fr`eFrQV09O+Qm[9D%)&g"eț<y|}|9I+J`祇Hǥ"Ŀ=oXk͖L^UdodMBEI?Ҥ2HGڝ)ӳ}
]E簃)ܮymW˳zyqլXԻ[6Kߤߢ&/7Kx=6>g܈sǏYr2+l^en)sƫ3??#>Ɔqe?q:KN&FIv:kis%z7=.pA	OOe9UoQlMf͑%L|
n-sa`
}9N[,%4c:8CeQGp
E-^/gFh̨.Ũ\#:VK)XZŃYR>ĐT!,%xj<)bhm_2!L*;x 쟴zUivfuɬgj^CU163
@7(cow\$CDĳB,nao[p@Jʳ,,ר*+Q,P.Q)5X,X.
X)uĴۤg+QY}ϙ:f=6nkҦa&_1_f-02*YYwkhR)Ux=CEO_<-pCCcRT^|T,WA,HxtMI3b7H/fZ
PK  )  PK  5R            ;   com/sun/xml/messaging/saaj/soap/impl/NamedNodeMapImpl.classTVADb6H=	(FC Q|Bg3|s<VMUuz~JIb:k@3,np7n,gq?8ı( mR%gS-UVemӱRm|=G.8嚥l_`X&fk;YaW4O׷4v֖I=smC;pn] v
[jֆr&i2Ek𹡌Oc/F%@]%p1[ҷulntŘqN͝nlJPg)`^WYζj3e [}7Վ($梲++͑&BiM`L0^U/O9m+l0}-e.ܲZ4-$$(c<CFG$Nb8HaKJbL2%a56Sw{-奰4}\7tUojJ]fhݨm*+(\qG:Q/LDaz鏕aiM~ GIk:1c,͏}B#8Nr=$/ F=IPKdlyeD~'`ǁES;i?"F_tt"aĞx~gp
.xLƘwheT/A+dX*K,Α<c^vؙ.ai1pb@ge403d]$޵`XŮR/cHE;aZЂywv}_,j5^mMWOS PK$C    PK  5R            4   com/sun/xml/messaging/saaj/soap/impl/FaultImpl.classX	|y?O?O@88r>,9̑&uI5[ҭ,[:IcBi,$kn]v鱶Yuv],˲~}ϫ/X+a5^k>׵o|KGwtj=]7/݇g}?g9J#m^s?.O_^?}^3oxE2CćRr<+mJ)MmJR)3ǉ~F
1TJSjCfQ&dv9զ+f>ŗ^
Yz,.%Ԑe薫(jYMQ#?JiҩGG^iѾ+m^i*mVkF_{t6W{e+чlfmZC3z04KPWicSmcmDhgǮmݲI0>N'sZg"beJ#V:	jin?Rh<Vi	'Rq{װJ(W[*:6!DxTw6]D<4l/𨀂h>b%ĸICdT'}4_Ql#ٜɸW9肶+TQ1j;&ɌZ>.d96AŐvg˼qK]M2gtgesp
n 5Xhn[,D
(.A.!ƜLP#FBamjKkO_Q+|{?GBH7RD=]H:3fFXtSˣ5$AX$o
A91`-ˤQe8jyi&V681OZpeYJG`eMFVxohyOVf܂[3*)h[8?a%mN{.BTɂЌ,<a'Lę\,1aw<bюMSz)ECYXEr ,yblVD2ʎR11[3Hss\yaScUUfN:Tۛ綬4f&[!\ʥ#wPru>7reֵMtr!l%^3ST_~fdq9ךzFkS&`t*Xz`{vD5t4q
JNyhhHN`A`f{C.^seO&ֶ̖_Ĉt;L
e6Q51&::l7	;L
~g0GzMLxo&ESvr$ncH){e+ֶ?ZxuO;tpmEn"VR"rєxDTi!\j*Vk]#m}X/(	&XJKULֽ3o$#	Sn6٥"NmW!D1Փ#8cxӺ #aOUה!saW2Hn8Ku*JL|n\O\_x>?%Ҫ*VkҺcJ)Q2(
1<:Cx"pN+^t"`q2lJ\#)#r)IԿ4%M5eTN>SN&{D޶KA>$s(	)lNjRxArJNTEZ4Jp&r0B{F;LKnD땽XMMdLJd'k0շ[jG<bGYNj"j_;=2a[217>f&sHb]M:_D
RyV>.h-+p]IR!etq,Aw.ȹ`kJnʀo	wED+t^ZlC:	yӉ'hTv0jO&eY׆cE\:rƼFJ2
v9Hj^e#)W#ݣ4jmhVS
Ard9՗yN*zIh(6?/Xjm	3'X{?8璷V=Hl
/pPhQ;uTHtd*:`R5ʩ
'FNOҢ2&jo<YU*+zFD ѭ\?[$8tdjkN}ݞFpw'9F1F,1bc@)(l(N $NNN-'D͗${Fǣ%h-nv=*}vRݶ+,VX{?UV*7PB:x(y:U:la{-pqh1Wͧ:IokAz^Y/ލl^wzWܭ2g8*&ՠm/g}NzmSqNfYZt$/UH"Le8Π"+[8y{sg?[;JU}6L]99S-J]m>:w"C釰q<Z<0<E-/bĿqcy%\ǿx˞W*˛9nU<#+A}pv/ml =hh8M1#DC(s!ǈ/ABSxpJ3ՇA'rPGqTd~b<
~TV,.>5*7ndv#6t|֜J
&ELp/Ӿ)?Dfì?fqlg̿^cL6qYY>f#͑uhݲ#0ϣm xcbuU_k6z|O)m9ucYg;B}@ 灹LԫW:LG1>AR?1vY1TQ<J!c.&}Bq*g&]T[H?
@0~6iiJh?c QXv̾Ff'qE6
iޠ.LQSem]ۮ(**}vqU1O!c286ی5[4s"ԓ9H r|5a)d(Db\{x?eXj<C"p		_/xpPO"y;cog_RE9"VOS{A%6
LfYJsw(u9הmO]9_X_"=Ŝͦf/drjzpO98Ӭz6%gm1`4
ZaBMgh&q96m{{tN{]7׍-ْlr=Cd &3#_BJ\zp5XB4_o66~]>>+YUҫ	4lc)T,a~	WYɌKWRŤuY<38#$?tFF!_x
t3?Wdg7cC%20\usP'rS}JUPy{Y誓
d/ؾa&
"9YО7]T@&#~gX|t`LR
C~)#bD)SeBAr1!#ɫL42͡Ls)S
eL(Se\>^wI&^o:/f[ƂMgqD40l K(RT2Ur4Ie6I#!0 ۲ѺѮńsQzϠW2oǡ,b.m9ʲ dJ}}9PýAփ'WC\M缡**
a7<[|_ϣDƂ\jɌ+#<WEKk`[>ܢA #qҍ҃zc؃
?Qmg.b*X|׻0y67jӋRfTQ?5ZbPosݭy4]rF8`P5Ǹ-'}6ڢ:E[@XϏ/PK`=  '  PK  5R            7   com/sun/xml/messaging/saaj/soap/impl/DetailImpl$1.classTmsU~nf!ĪJ+&)--J$8nɖn`!~?/~ZF"3|)]L4=޳9/w_3 bXq
u\W4<JaYg:)jXaಆk:NFU
74iXgjռ`WwCnvC1+yK#uI
&Uo/Xfk2
%]2Qn1weGJ+d[v030_(HuC[on8߉v1EmB[^];\aX,ۻET٪Z-;|!hճ}[ceRRe0*+5:.yfk-T'!lN5Q(-_2u_Bo2r)(\>v4N$6w%>|cCSV{]7m1{EGk9^@o54
}5pKƘ0n<^`|ǎa0WZحkNh{.a
*#ܡgaےH]e1
`cƦlm9wc6͓Zvq$L40
ù-0ESH׈Fwh7wIR!.)E&rvv>X)J'`H#YbHIE䨂b[#M%XPN*8FGa	"$Rtfx	K&@2?IВ{H&~@	Ei:;T..pWgD1=HiM.)L1ř2?!;{Oq⹤BD%y{TU91F
ꁠCCNeIYlM_JГ}.Uَa#Ma:R3<*x0kt'zrNL)JǽfڗG*"uJ{	+PKy  ,  PK  5R            5   com/sun/xml/messaging/saaj/soap/impl/DetailImpl.classVmWG~&YEjh+
MB`Eb666}6c\즻o``O{G7B\H9wfg}{ܹ<L`7XI4VXb]ϥB|𥎂6q[~WW	cK:yJ{KmttWjŨ
e.
5xƝUǬW竵b[WIBg^[qJa`b^ߩH1ye5ENε%X>*٥8]+GƐ()4<e$[6vMDk!7T~3"NfSt1Ti]m2"kV20MavJG\lT#Dvdڞ)j؞{dK ;vdE4i.f\=c:[N6<KYZT2}nkVa,[oU/\;.KJK'2AZ`[ZEO:Ω]S[^Y	D
RL$>.%ql2)9%g;'~d8{7o6eYOIp0\߄f$LQu٧.dҐjGRɡKVDiQkhQʓk
MVAJ
q#iвP2QsUfԞ
\;lQ]QPG	Ydp=M߮,Z̶vdH7G =;{McxdF,û4hePs8O r6-a'"ac{-Enq֙l'"i4J>z6}hg
A9EdP& 	4NdrV5Z)(SP,QPn4F6COhYK!G\eAa
xQĹ(Dڱ-W0Fc:^ȽB7^YvO$D63/1A٣8eIu3*B58d
ҸJA·V{EJ(ŹF<O21t?íAY2P
)Χ29*@Ĵ[vb!BΨbΣ\PK(\  ,  PK  5R            3   com/sun/xml/messaging/saaj/soap/impl/AttrImpl.classWf&Q*
^c"(P!B9}7;avf
	h=zZ۶zkCgygv}a{|=orWNǛ`)WXO<I	&x7<Gpy^$8ejB0A*kA&[oC[]?OOg|@W	>"OIh)"_o)JnJ43bcٱlM*
bF4hqel)e
g`itDA
N[zLKCjYa
IdP4}
=96Tbop7PYr-.cUM؋fA/5J{T[;W=kHxȆhҠaqVk,tl?_?exVA&6ٓsZeb*lwqJ][{طP^ ҰځԻ*Y4<G̑L1}
cpkiÕ.˙;#Jxlt~9d J6YJB( P9 jp7.j7ɕHRϼ`+8Z&F:f+&J=VظR:5JO\s]pD+#8=ic+53+9H

Is)g9X<f2$h;xj{%2yɞ1:^@t$$EL3235<k,.t0v5xe:Wi^g!lD\,J^mr|3gɜEYEyӱ~MG&F>Jȩ,Yv+&-&MʞV_
FٚtbkB̩Nv*u7:nC%B+/U]}C#,GEAG
`7C鉢USUY|a-ɥd㔧\HlFiyRCE%0ӯ0o㑊+RM!Rʓ:g+!7K;e/6t6WN%DJt8BuЩz9:=:l^`i`퇭:Pk`4v:\ p\`X"-2o'X:ls'M08!4
j*j]Mt9\
punVM{^a?/_7GmB5	}?g)ַ1F(1p PXA^.8oAo~ϤR2hBcA;]	8CRπa58F1oEA	lcEb/B$5x.GNz8+b(Uq^dh0t/=qur dk4$`4Z%pjlh\:5J
"34.e
34+UJ[TVdDRx.)ÀJfQn)àaȰQʰM"2l2La@ʀ;ax	CbZEx@D%w.naMuQqp	\uq)!eQ%5oAQ98?4?_OjmVY^[Dߕ+*hvILg/#$U9	A#\@5mII=vVyѣWJ=abNb(lTujB^gRFA>N0k"ȻySk[tv6E<)e/=WŽW	rH\M'ٴ_pJD2]YQ(''%T8B\u"*!n]W+c@>P!4U#R*ZpZ5zb(ҞP]u詢 k5{du3mhtR-5{WAvs3|Ea=x0hyO@''p{D܌˝܈fF4z3*Dt
?9>?5YJզxA!jM挪~poᲚ^x8,l-쾫jz߯%7*.PKr3    PK  5R            3   com/sun/xml/messaging/saaj/soap/impl/BodyImpl.classZ	x[ŵ>ǖ|e:N'Cز,:kbNC,u KFZhJRBhJilL$m	KWѷ{}-%?sdyIsޙ9Y93o?<-7R˥6ŏZN4?xƕ>'ϔYX%j)fb>s9W̓|)@yFB)iX,FZ?!%z?爼4Hg2ϒjWJ)VIkx>dR",Ѹ5~jlM,Źe*'2zϗ~nVim[V//J"wJ.e]q.K}Se\F\e
;u6|%}lϻQ-URqAr	j1DRĤDfZ?ǃ~h|p=RNxz5eRb)fJ2v4$7K߯Lc fݲc6R	}Kfi[Oh.)ҕkH
U>32vERiƾXnO'Moit3L%khzSweckό7L8"n
m(TL
nhͶN3K%evɨ=ha߰>ѽOMK썛IeZvN<wL3L$w5=#7LiP
4`7&}V^bAPܨ!f`RXs=ehTk
n4n6Fp ) 53=R`.ɎXhzΜ#35*h0T,?3(
Tx뺪}׿iOGqxEu1L֗t4֠bfPd(8Scɗ85'X rZ3%67LVqαV0
!̨^cږ/@-QiYiO4qy4ޮh=gnջZ2洙4҉$%}ҭ)m֬[F*Pn4Z\T&^-.tc!O\7|NޫSSfzGgjfge:eNˎ-݂ieM12
!ƙGJI?ftSFBvvph6'
pʼb-d"|]Ai>40<+c&6Gs|䛵
`OjU`:itai7f#MO\	z02r7)3r@f컝3&&fqߊ)gAԞh2Ήۄeݙ  m8҇4i1V+/N it-i{JK.imTr0B$@e["[)11ns%ZحLpDL%$9ma.-%`u|aIc6z*鴇ʺܢ"5'{9ʔ
"8;0$'P*,Gl4v΁È
`iLD3v01a$cK=12g-QnQOcqۛ_zK#YGT1bL9oJi	?ɷ 6s@fF)L$Wf-6>Kw^zΟu|k
JF;؟H}A2	t2:Fq_^=IYDCw󈑱UO:
==|/S>&
<A?|kL/[aԉKGA|_0߯c:?OIuAObj`BfKB;i-#*
ґN3b:G;,&	f@t"i{f^:Vt~t:?#:?G4~VV:t>._A;)aWO"
85/ovG^IW)4h|iV~[h`-A!ؓHu:$b|'z?EFSDPKY.zHH".K4m60;f/ؓLEz95G0s@PAʰ
!HlAwt.O~EW5_j#,1@v feF2^DF,/AT:$OQ~'}@<3g:@728}ZNӌ{b`:a`}ЂteA۸uosId:F.p@Og"_aοÚο_3՟ҥH|r0^HOhr+s	OP<7ؕJZ*٩
[uDR/)lANa8XQ3:]zt7q@)uTqC%P@L"j̜wܺ
Q$(T&%kˬmN"46|H9Mekd9IÝRl
&I.JjϷWySebZT[$AX	uNelΜI-l8N`Il#u# ,:\jvZfn𴸠!Pe"X`IQ6!Ax#2|xwe<
@,׍wY47RJ_r+!f hzN0׺1	/{]e2/`rn"ǙUPjIm	!}̜1vRNǖ&u^҉̾0E܎9`fE+!]Š)$v fJws<6]sXdm	\;T^CuOͥ  cZT3	`N
{ڿiTՌ/4[Ĳu=\wԦ\؍+/׶vu%<iY@FbH.D>7xȃVmCb<P]x8T=z նJh9J ނV}H>B4}>,70ƖvBۨODx~PO,ݩwri.CCO3'od#h-eOpI҇\4e*H^SGhU=Ij%幤yTAZhQ-mF]NfWwt*45*`s6T{FhzU{#TYaG'jfѕjG10ZjaUBi<yx>?q̫'<}c9tx`)<mv<PҘx Ci;Pf8aCT8#cuw=]t	}|MhfK`79or:aꃖD!#{GF.Y-XW#fRtfCt~<+>Ʉi?T!z"?=AO*(Kl(^z a؎ӨI-j42G8:bmv)aNKh
ѼG%U
R)=^$7̕Juw@n0`NϚD<nIf%,xނ3pB6B&*J2AeA}[1ṙM׈YE:B!U֩2l1_t֠ZAyo)LTK0aL&˒wэt\"F_ ݽ-j(V@{mKsRey<pSv| 9Xj 8½\bhܵ_wLmD4vVʣaZX3Ʒ@uy||zB{F/VP"YﰯD8Kl+J|54C9*r'2N&RNPs}gbjo=.%ّ=O9CԴZlj&5Mփ'2R#o` 4q1-e/5r	bXKbupZ6\SFH߁tiJ!{},w^<Y2^B*:O>UFi]_[@?-9`2h}k8ES%bC`# `áPR]1MyORi<p-\9A=(˜5/W͏W, rqXI+qj}(mFlwx$ۇ|#tA0ZZ`:>D[%T[A^OXLsQZ5t׺ՁJ??7,EMP-Y͂~gp\7u#_T=s=i~B<"i:x͹Ď!X%"^	t<M>M;=Cj]Dr"mGx@9HCDRYcdhLW#:
=4zk //%,^N#NCx55uϦf>6Zcbϣ8_@Ws+]m>BVox_Bp
N
_A/^k)L_"n~P=$p4$]MME;eB
-oyN+$=BbYT]mx{}ߨ$%^
nxP\Yr"Ӌk~tw}LѤ ݬ=(|܋8&VyDϹR.VP=hOA{j?+o-߇hwސ/])tUݰZurh
'=p؆A0HnqB

bWktUiN.WliioiHC%./8̤g~/FMTηB98B9'nD=
bԞ"TA>ʰJOg[ȕ.-u/: o Yn95ؐ	\/wA:P_뽧zI~),,/Jx5+=~]6w= tF%ز,@P@>ս @X@ ]@ަm	\+,KRwc7H3&1`e4{OP!՞a{8|:S]Rڠ;P@=|*x*il:~Zy;8Tt&)jy6pڬW.$OIn?iN)z׉&WS[7اŖ*ҋMyE05#tm5%~:AS%/c:[Nr1+3,F+8Lh6[KP.w;xa95H0B).{}`z^ב؅i)`
OLԡͶVZ/<S%7yp^2^*
1,".?PK21m  4  PK  5R            :   com/sun/xml/messaging/saaj/soap/impl/SOAPCommentImpl.class[SFked:i	C@I!	Z(7!#F<P}h fs?Tg%!lcdxw:w<vD1)0/`A	<3><a1%_(y"j$-*a/3$fff]UܺTMZ1jM)̭Z[bfNWb$U!dg.=EҗmYSMImM5UfkSZ7ȢBF0$}Kw-{<۩XV&'SQ'5L]Q5S=5HNV  hz2ֻJ d;ÌPmQdG޶]n0tdG^Ҏ[3
o/_v:&$ąMym6zfkS;yf[TѽBئsƮn3L\4-D}tFKh1U2*J1ӶfGdMbd#	b|'a/lI?0\meȿM[K?ISTl3JssK25ղlO\UY4	eP'u}aZv<Rw{pdF̈́neyĝ7y7)F(Gf,[$]:v[B#`w/_yeۙ
yzIlskOy+#^2'CK	-ˢp|ouvg
m"ͺC:g_f 'f:O4~DO ~ehi%H:2n&>'mV
<)>#N|6˧ё1ڭl*¦"l*cClf.x+pCJ!Gjel)
pr4w_Z44cfwk.<!S^{3}=>iFc2Ӛ3A{lgm,L3,7Ay}rdqC(G;4w* $(aToPGwE<p
&uAa[i<?PKLjj    PK  5R            :   com/sun/xml/messaging/saaj/soap/impl/DetailEntryImpl.classNApqCpon/`K4ޛMfA<x|(c@!D/UU_o XI ymX4d`a@9*8d8[+[m*qu~}qty
[:Aɮ[rM<VX[od(+G7nDŢLºq'
ϰ Ee{
E0ݦ#=RưK0ΐy=uaJ~@UyswYJP+*kTyx[kM@\6i b髭ݲ5o*GJ"ɎPT8BLds2Qr2$18&ILQƦzbY.`=n
asb3	a'PKg     PK  5R            9   com/sun/xml/messaging/saaj/soap/impl/ElementFactory.classW[T\68a afjLb0\pI0$(jJ	L.iVUMxiZb+iOu}k]>u}郫93dZ.wЈuDCL:nÄIL!&:o>wN!7up>!nta
(G5QT1%qKc$ֱUpFvIzJG$=3N<95x^tJq9pNG\4t2uNH:.ƥsqY\ť+qG\z^ұ/kxEëY!f5})2ǃf1 >#k舍M]pyoЌFah5chco{Xዅ#'Zr}ӈ6],_UQ=ma߸ҖcƄ1C4[*RmF
OHB@՛e!Z(LT3|t"*kk82ly(0daJqn9R
t7?dp%?;"QK3|1y~,f
PV	[x5q[]/0<j,M%!Q<MPDp8^ӳxgv%X_s4rz1Mޒႆi.m
?p&@xtxGz:Ȣ*`"Tbc^o7bh
$[o.`V`j&H@7ҒnN`mnrrfAYm6)ꄵt/SoE:$M?%cBm0ki4MZI'lV6iU''UJf>y-5!fV0Gͣ
^DZ)	4_M&l.jKWsxZyb>._SK[/]{9$Gu{w|s9Wf!)LR\9-l^+o+maS\x
co}yE/\=a;:JV<%⍍)?`ʛZ^<>Px%ݶZ*[ɣ:##f]DAYK&pvKH9L屑c]z*	eغ9
3EW,i_Hv*pHCh.+/Yd ,E܊.>y8dJ%dp\F26P(Nx*pݣ)8>_]4 
ۆۆ+=3g
u\5F\L'Mݶ{,{(O
rwzp	>rÇÝ[5pAY_E{}THEًջ쥊T6n9FKٯWMoV,fߪH7N-g߮ޕ/fPiGCʚՖℂ鯬*q;=Z%Y'˲Fi6p+S%ieێMˏ}.f; qGEephX3,9}=&m.
G|
c(>9EM<aLxq\`RDUDKpv/5r/:);86 {p%p}]|֟-]ineG ͉lϣ
3h[)'32ɮyiz͎ǯ,qLque<H$03{
-x	f4$;èaħr82 P3+md\Efpk030@Fw'pfqtXu	pHM,gߨYZ	&AD/TgzT%~Hn
U [ۮ: '$OH<$OđXsǱ//cPWYkDDngo>o!oIL#.1g5P,98^e׽9~CCODLEl_E8Z?79DpfwgV=O)6k-.-9@FOefc_?K,:4/PK4G  r  PK  5R            7   com/sun/xml/messaging/saaj/soap/impl/SOAPTextImpl.classVYSV.؂K&%M
PY ,ukB,y,%33u9p1>w;;=o 0RX`(a) dfA_2X;tbٷ,,I6x<on~h1,ÝXe48K+JQw5oXyQ]űՒ]}6oknbɜ?V-@0etKW*mnؚjnef-ĩ
QXj:엖^&N>',&v!kq]+/'4%G7Sj.S]OPrvʴ-r腼"ie]u'!2gL]bKiwvD˰=M/m9~2SgR)ri,T|n	yvmJRv/EI4o>I٦GN.yej/ՒW"5B:}sYl3k-խ)NO玙1n,YRE{ºͮ1!7)&M? 1%AwGF)(@R.^Șqe2s#IEX<O11q|%0e~u^@D9ASd	 gݸD41oqNj j퓙x_4NhYS1}cjC5+d,ju6
MEARЭ% }袑ғ0tQ'@F6|H2L#Їv*ͮp
:
o1FHaomk$ءSa?-rig=#l Bok;a5];ȩ^ٍīhC3HH^N/⿚a>lF%Dg3`0TC{3w 3La_V!'4(
L!;tss/uhdJ]}t	nzd|;ϱ ∗utfi0wPЎsú\:<!C=_^ǣBO<A A0n	x,P ЖD#_Ip=3^AD£93O>3P|A_ע
^S.kK
Z^rtؓ_P
8PKY
9    PK  5R            8   com/sun/xml/messaging/saaj/soap/impl/TreeException.classP=O0}!PHP.U"Zuw\vd'?
1aKw;;Hcc3Dwʨzprċ0Nbt`'I22KbY2l.ʅp~VaVs%{Q BJW%;)\VfD8)5]m\.Ukbg[Jo8G@?F<(FT	荮7`)&=NYا N받9PK*    PK  5R            9   com/sun/xml/messaging/saaj/soap/impl/EnvelopeImpl$1.classTNA=Ӗ.
ZD,-KC$`B
XGDc|߁?&>e	&;s3gsv~4Ѕr&p'Fsr	1*1
tkNcĐ.Vyw*z)L2L?;0U4\[޴-+}ΫdMf%,&ȑL>hX&'?_/BkSNB<⯢r,Eu{Wx[|	moc	o/ȝ9{E$ƽ
5tZvB^_
ZNr;t4y]V=C<2shr;jϪcXOE`-+()=U
UEӔ[~b*aN}0bssJC%׫Ն#*7ESuS[vdޯ>q)9$rOBI֮d{!a4BhE~7MGڧKh-tvdœݪ0y)$1KR
tsa|At]ER)) fRЛD
EvE!X~ vH~l+Bl8a"y$}deu=\!^Ǡ/c8(!7
uCуa4E{fY\la7|P00$0ItPK0D    PK  5R            7   com/sun/xml/messaging/saaj/soap/impl/EnvelopeImpl.classY	`TN2ɝL.[ @d!La	&K,	HX
ę		Z[Zk
w]jjf}}}m{}<9sg2d{9/_pTX};i<J3HF%Pig4å!F[pFPiFK3F+rF	Nࢉ4I34م14IN*=0CBUJmF3c|TI3˅rYYNN9tT!"7</o4Z(0;irR'-srBFV:lVī5ZJZZyINw9Az'mtSNs:<'.l5ȅX4$pR-B,vvৠMV(6.#DCQbNjwNBF4Tvit<ivbvprvǅ+MF׸*&\'n&*2"˃hԈ[߈m
z!ogkjDm6o}m@k[{_a.Kdkaa5;5h
ny>^SR5"Q#o@l1auiV떮_njo5B1U1TՄ:_`fbyo
F#4Dp/	ȷ鈵n3suhp"8}
y&gԅ˙EG|M8'4VubW1Λ"/fm\f21_ӎZ_F7ktOl2bp(QlvlyeuАeHwXLXmF̔N9zyiИzڦ(dI'2tj:D#sWz3kE~[ht-)z8m@$[	3J1G0Q$-K6+h3=;X)5Ycdךb6SL:++^YeAmy8Sc,EÑVo}=$ak:lVN(J4iG+=(n oRLOy;}vA&/HI܁CMa?OfpcmlT ]kU;"rt9[ԨD<>6&HlEh{gvoTl6(Llvܰh3<2ݪm3zQV%h/[jz9&a
1κ"6Ce՞nڶZZ~:+ͼʹ4{F`0X3{&1nڄ)8l,cQ@sPW\nrv;CF:No{,XWp0dUeeH]%I/)\
-ڄ0M5]-Pu߸z&#+8cf3'C*Po̜"S@Tl6,;f)2sM@!ucq .#vQcsu܁: NAnGs8U&8:}4,7M=Goѷu L_t3UJ[inoWN{} )Dcr_hJ۫6I;Z;2܁bj#rUZ̥i)S ĩ=T%GeJ2.aNՈ;NݍZmp-N8KyG&tz1q!z\͸EwZ(6q:^-gKfjXѧY5b:=IO	i2VR°NO# =(yRKdi
W
N_i͘Ē1__p'jܝ+-BU&K&#Z٤hT6	cILp9A\&8!:u^bqmrHJU3*З8J޿qeDɛBrpnN*n6[N|g4zQe+y&
0mx+pîbrB
Z'w(OZ4AWuz8܉&s{	]?rHGNo=<ӛtD[6YykeeJLޚ3=9'!-ަfz,۪uvN?`{|uC(3TLL0Q1|InX׸h\c<ӻb}%}	TA[_ТMIܿuLO#ېr~_jci_L. xO:}hN16g8D!??qJ-Ay-2aZ֘=P-IU/tଜ9%S <RK	)Jz-zkKVuu6bF(1Uf;T9Df/zo3o9,fkIMF
`S&c~P_OU@mE(f زiE[f0QMXгgj.fɔ!uS+E%Lư=㴮Z,oukngd##$zE0cڛ߶߈0`5z}
`$sx^{Jw^@}mmF׽ZrIcae4-W	n
՞Е6dRnn4Ifiѭcb/whodJ##]Rea7WܪrGnl0Sn5ح.>~̿Wݏ
l{^
3YLꂛU>`y&hd(wg­/86ETYKeB='%G&kK2-Ԕ~II*3xrg7O:ܾ'z݀%fe_`Px9q}i9cn F!s|چyzNpW_`)9\O0<tOXv8  3c&P{m7p4}A޾o3yFZVx.,SxB\tz<q2qcro;̷[D\%dp威+QϑXX:acUnUr}呷𰒿{1rN1<
4<<J<шqCI<CnX \q?
eicS6|ջUqT]CܤCX|_vzYѐ8L])cXu4}_ƈy%yǱ$(Fq%(~gc1i(ۅq/Y<~9Nq2&2GJ8sK'8JKO(n/ \Flb11A ^l"@5V\jO5hPfYl*l~?K6<(2msفq*x )|jF?Qcb\rmg9"~ӋiÔ
j=I1cHAL%x>E2_2	2s$R1q5/ڛqa&-Z+-*ҵe%׋Gm-^]WZ&W#,[t>`kx39T@}ǂh摑8 UޓP		T9IK}{0cxd"ek8qbΣ	sMD2ʰqkX}T3qK)kX);Ycz<e]Lf2T=jLѷeR{)9#Ivl%lS#hlse; s4lmf=ʖmn@y\jxL
Wxѫ}
EkfQe~.,HGjE6oӐZZ\aVnQvv'0haYrxIb,.+8Iˍ,{1
0>d}c2-?Pȓ7`z!&:jl73Y*<	eukYghT7Q#ʆ.]*<wuk2)`o/rPKߧ|-K|;NI|&-(ǈ\RЖg̳X|mmb|Oi쯼o)Tm
?L+?0g̴iiBƐYb<W.:uE9q//:C7-ڠ:O`'zj	()iu&PVm61Öz

ua|GC8O
en)]E5ߋ.6!("	
^ݛ',Q#Map1
.l{iw؈~u<T4 Si 4*khn3p74'hޡ3M4	vI#1iZ/;~_+|b;
,
[B!rT%/ 
~݆\)DTP(!LdUM8(Y,)fѹ^g8y,,0fi栄i<i>i]fh.o'x^9V@z([{93Z9h{ء\Q&BvB
 6nw.y\Egw75,jI	Z[ZڞR8SgG0aѴ
)B[i#',k+hKqM٠
3lwϽkO'֙/V
Yv}Y[~_AANۮO.8C_31nEYE.͕JW
y+dKPQkjkTHh7r(Wb݀t#VMQOpߊ6t;BtW]ٿ}hoJ1;GCl	(cugca95̚9Nkӽto^YͯS\$Ooӽ.ÙrM%k]hm?6ź,_TCOpT=tIj,iƫs)Rr޿	rG2	
	PK~H  1  PK  5R            4   com/sun/xml/messaging/saaj/soap/impl/CDATAImpl.classV]SF=kH
%M

m@hA&[Z@Dȋ#KInQ}h_d]Y(F;0]={W? ~XFM"㉄o$H[afYXb!̦0ߋ?SfKSI/iTe_=~SJs<ϐVm4iĪڅg2E'Uݮ(nR*R᮫	Cq5Pqm76^p+TYTg]5,^qgK3 h뚹9x;ewiv2*j~ikeCf.2#alvʫY])Qz9a8k_gxn?MUg%3&[JjL&vU)M%'aﻜX/ɕ#W#W7wbo
UM'\jSe|sxդ;N# %ܴIUJşO_U%{HQ4qX[jh?6=I
s[s;ؕ𓌟ES핻x)C2ᮌY\2&0)cawR]'`7Z5t#{!uPޮ.|쩟!S3oň6Xd{H8ŝB5F	M׷%uҳz`u2zLXnc`aF"yyiSV
?@̽w% 4i6["fR{)l,
;J7/wȻSToSȝ3Cv6¦BTVfXFxp0CxȓZ- |HO]_H<8&Q윏-}l&z΋@aObXcȹ=43t
CØB	z|Q4
3OG@>R:H{4oCt\Ν֣ tq] 	z[
LJ/K0 puDw]h H%žna8醮9¥GMN}ǥ PKPjE  {  PK  5R            <   com/sun/xml/messaging/saaj/soap/name/LocalStrings.propertiesE0}
k68rI"M*'B;ΔC4%+vp
ӫp?$xc=C
_#@VAS:vspk IjMS#Lz17CTbm'{ NBj}AvxfߒU)6FMdO1	_3[؛445Uu^
;Su岯4L(/_?G[c_pzϢ	QXz)hMa"IL484\|=WID7j{C2VH#lM'a4~v$?l\'=Z:n
Jo:DQ[Dps\h{7:+uqF
PK}s  _  PK  5R            ?   com/sun/xml/messaging/saaj/soap/name/LocalStrings_de.propertiesEAo0DsـZvP;Ml(aaWVedPrb,#7&{|]kᛠ&
pN1S2Nm	ɑzSm<rYJ3Q!ia
ҿ^Gd/j(JeS8˒9x`KAud;YIcs4:sLהv(P58Wy~Y*I:}:;K9hR\ҭn֚Lhpt
;d!jR|NTt/jUz)b6VH# q2adt.Cqd18*I}D&7(pz}^)0iIeH/U~J(t
Ѣ/ciV_PK7  v  PK  5R            ?   com/sun/xml/messaging/saaj/soap/name/LocalStrings_es.propertiesEn0~
t@-;a&
:=HML\JvZ{ɂ|#qU>]~ԛ'(9-{L{8%J$39SsQb'8,Ő{X;%W9=R(
	b{B18eÔ9x`KAgkSgۃĬ>籩h1Qj\@!/um~<?ߢ4-4p+?sŒn/JqKw
mF̔@Iv!CTv˥
8hNC{=Y6KĄRδ&M%@NƉAu;Jn@_'JK͹=;N7vo{]\wOJu]y8WFPo媩PKf  t  PK  5R            ?   com/sun/xml/messaging/saaj/soap/name/LocalStrings_fr.propertiesEA0 mP#qn{ Ubמ$#;)+gRq7ߛy^+x31oa۽m3kU`@-9s%`LZUSȡc=͐{+!0i'@FYO>-#(
	B QLJ<f
Nd`{dzuRslr(rTச
fTu崩Uu/?|W>:=&(f~	b
#|-ZRș0K>k	NArt7%_iى,j1?6j(2U-A9uᦃh!%חp
\G>kZc##It^-ORJsdTVz-%B](A H#MZ$-j\0=	_+PK^°    PK  5R            ?   com/sun/xml/messaging/saaj/soap/name/LocalStrings_it.propertiesEn0~
9tj9C
6=taaWFmbdPbػJ`@&~$<U2as
ZO5Qs:p.K HrZ)	&X!
6W=JF@!s_=IQ;#)9e98Ƭ4@Ĭ!md1Q|.ySCfmam~kQ?;q$-<9UUgN)bADqt6;dJ	TZWѓ٪S$&lZL'q4ad?]u-<SLVvpOC)+}{sXг3(ѩRW춅c1+͟pv`GrաPK?J  l  PK  5R            ?   com/sun/xml/messaging/saaj/soap/name/LocalStrings_ja.propertiesMM0MTO	rЋי$N
gR!#egϒje{x'C^׫G("/u37wV*=:[ 9^aɌx{`|{aW;`%WH
/\*B&ݠ
="qJ ehx5%/r=µ2=z|~^8nƈi@^x[GwD!l%
"+>9$A~odhMWzp=;sE5Htj9g"a5ӓR]:O:;Ř܅S!d<-O<UE*cu9ewC͐dø-B{wRl&*{=Di_eW	r7[",Zw!'Ժ^>"V٬=?PK$j    PK  5R            ?   com/sun/xml/messaging/saaj/soap/name/LocalStrings_ko.propertiesUQM0W<m/ m8M%mR$
.x±#iY!;)ՊHכ7/KTx'/=diW'FI<UZ^kiztglbIz{atsbd=HiQWe:H)I!MA9$Emgj)(kQI4txfYz^ԇ0r00$Ӏ&:x_է@UvpxWJɓ"bNNnA)]P聂9l2-ދ.)_#"ttnET,BIaZgf&Y݇nyJSi*F+*TMNruǣcXGzmj7(Y1g7c՘2gUÄ](ݵEʜ"Vi+#k^DlgYyD}PKZ7+    PK  5R            B   com/sun/xml/messaging/saaj/soap/name/LocalStrings_pt_BR.propertiesEAo0DsZv;MmXwaVmb$Pb,->~zxM2wY:m8'cǘ)88k[D2Sk
 JǥkѿaT0:
_M%Yz1AV:)Ngp65 4:φ.
vTQy[8U^,ʧVE1I/|t8%(R
Xz[I2S
ְ}F	@)a5_6UtуkXȺY$ƇlFؚNh?>X{!8L#uD4"(	WŖ[WWx5tb h /EI\PK^Q*    PK  5R            B   com/sun/xml/messaging/saaj/soap/name/LocalStrings_zh_CN.propertiesEn0zE|i(
`2"h|aD"
{vD@-lޜ G
^p´@V"g.czt'lY6#09;1aHiI7ez)!?	+iѥ"vFj5y5$*yPr ZPrB6|fxaVMls6
*/?-Tm`/ӞYxFo[R(8mPÓ{ѧ&kHz5Q͒3GΒtHsvd&j͂?t8ǲt9j[m˚+^j#MY;:C>=)~W2'U˄-KxV."1+w߻T:Ԅ^*2_5᪲XeJ<AE:aCQa~oB%$ePK$    PK  5R            B   com/sun/xml/messaging/saaj/soap/name/LocalStrings_zh_TW.propertiesEQ0+F˥R!ժ=LQ;wE=$yy̠㛣Nl<B)|qRiiu@l[$zpУ;c#}l!,Fit0#Y!%ivibW4zu
d
<BY@&GzJ}n\.o:ºnƪi@=?gv
%t;ؿyy$ܲ)-ؚSB^6Al9^v9ώIGwHrhAvMgi]ViUotY1^fTYȱ.csb͔Yjjtenyt[W~≡"ڭ괎I"e:wk3p_PKX    PK  5R            ?   com/sun/xml/messaging/saaj/soap/name/NameImpl$SOAP1_1Name.classRMo@ؤ	)
Ҭ*q#$TT)HA=pA$x_
H GQ
U,̼G 7qũZ8L
upP0Kzm0[RDRO(B=#M<S j8*{,# 	d)X|hޣէC3X_Zek4F?Xq$be0R΄Id*4w=N+|V%w-fyMhrx(Җ(gz6u\E?9#CΩ;&X>3$lUzKEID..nw
Ń\Fokng*#%lBQqvwWp=5w=oyQO3%e^+)b)qx`'ĵ.TU-d23'rcp PKQZ  =  PK  5R            C   com/sun/xml/messaging/saaj/soap/name/NameImpl$Envelope1_1Name.classQJAI65:H|K"$q첛'AHFPs	twuWMA?=Ǫ;&&JCUt@pWoB;&Qo%CQZ^Kעb;~[M޽h\|S2"$
8mQ_rOFЏ<#_\ܚ*d<>f4~ؖ*6œX-M0t77ژɛٝO!IBI)	ֶvx<LW
3T>Ϗt,̢@*	̍8Q)KbY`} PK_זN    PK  5R            A   com/sun/xml/messaging/saaj/soap/name/NameImpl$Header1_1Name.classQ]KA=}<E
B/aE!Dbk:hz
z\'HH33s=}x~punlmJ)Cq}1VvV5HnD'¶"RqZ{eRtdT-E@p0Fnѥ~&}cn-Sj2ݏ~yf4aԖ*69_uC
6*p4qu~NU[ٟ'6ǋN!MѦEge{OH<RCg&l9Kw:Q ƜE(%,[W|PKDL  w  PK  5R            ?   com/sun/xml/messaging/saaj/soap/name/NameImpl$Body1_1Name.classQJ1=N;cVG[+/4HEԂP(Ut+ikL̴R?˕_ě@H{H cՅEԡjpPجĭ]DJw[Mv$C.E'īm7EL	ڃ3dN]T٪2"%5˵vx(y Xti8}
Ze2܏20j3e$M2gHb
mLm\|s3	>'v5$bHQt(;&ܢn{l=\:g/p+f.~#<7q1<Xs摥Q"2Է).}PKf`J  o  PK  5R            @   com/sun/xml/messaging/saaj/soap/name/NameImpl$Fault1_1Name.classR=oA}s|9s` )0V
!PDHAr>s_ܞ$zj(()?0{	R(-vgy;~ V,8TE64\+6*Aܓ"X,֐PL*|/UT+G!#^/e8Y`#OMp,מeĨ*֊=?b?
Ecn'Sip4\9.eio	A.eZ8LY櫭82aP'5\'73عhAG՚y.'*
I!U{*LR%\
ρP?yyz1>;n1opӘųbU>Os[?m{^^*`Qaϰ
Η;j\p38[j9t۰PGb_.x2{"D-PK?(     PK  5R            A   com/sun/xml/messaging/saaj/soap/name/NameImpl$Detail1_1Name.classN@
Up4ڐ .Ę6fBZ0+>>qfD/M̙sӹ6LRXTu²y 18"$&NDCţs6,j=	>`+_̗r,xTXs}Xkw{uEucznȘg~DZ]3c2D2[Q_>nèOj4QNod`a UW	ISñ~XǔC$䰐!-g{rMJthč6m+#=GLCXdi
1
%bIa|<!MϚRxs~Pluf3Z%nWPKWb    PK  5R            G   com/sun/xml/messaging/saaj/soap/name/NameImpl$FaultElement1_1Name.classOKAƟ7ix*KAHB$^1d+_SС)C4P4<}اG H!BEWXM`?
LrgU!D dJ]5<)F'|$S)e}>SJxu}_Gfu?RlH}ݕ!SZƌf[3ͶzRmwD62_Qq$0qpo?124"Jo֜:;R܃{K)SgE@qBH#E0҄u{Dtʕ="qH[+}>)BNgf|^F&Sh PKLCm    PK  5R            ?   com/sun/xml/messaging/saaj/soap/name/NameImpl$SOAP1_2Name.classRMo@}kIRL? )
i6p #$	Rhz6fI쵱&_
H8rGf
U,ϼ7 wp2Qpjゃeᒍ&CA!8<jywYcKPJLAHۋ}4/a;""L2IIƊOG2Đx&ĈgH2k$\;#UtOT
~.ODRȲq܏ǩ/Zfw
*êB*˅I)?ɧ]yrdҞlt7;-޹[|AMe'SXcaX8ډ|3!_:w#sSq	NK?BR_&;O{X06nj}E岏0qwZn6i@%0ol8SP5lA"y`PYL/̴cV7pdzPK)  X  PK  5R            C   com/sun/xml/messaging/saaj/soap/name/NameImpl$Envelope1_2Name.classQ]KA=j֖C5}"X`M;z
zA40s=3+CpXPPb{27k]1SVPoE'ĭm7E%h=Mӗj 0wuP#WUJ_h-iRkѡu("n5_ze2&>fpa?n+/1%X-4-0t77ژɛٝO!EOFE9E{e;0(7`$29Gx~ccR107#Gѥ,EdoR\PK}L    PK  5R            A   com/sun/xml/messaging/saaj/soap/name/NameImpl$Header1_2Name.classQJ1=Nʅ
RC*Jƚ2)V[~%iU(vS$ޓso Nᢘe%e3ĳ]DJw+Mv$CSZևAKFR¶"Rq
ڃ'e7Rtdtp\2I^;j>
|HcDq#DP&oMUt?j{!Q[^PG0~IԉVI9Xg
|/7=Um9'6ǋNbC%Ew_aPn3VU";³cKȑS@bV{*/PKUDJ  w  PK  5R            ?   com/sun/xml/messaging/saaj/soap/name/NameImpl$Body1_2Name.classQJ1=N;cVG۪+/4(n"jA(Ut+i;֔LR?˕ě@M
$ss=$/O Ƃ2CH*9<f(m}q'x(T7Tf݀K4FQ;HD;$[" {wRAR5~')>BZMZ>ױpE4nh}ӪAȱ/CNp.§ĮIRi,9Xf8͋/nGǻ;S*Rf1id(:nQt<r.Y[e8V3T^踘ET,M8S(Ka9+p PK
%rH  o  PK  5R            @   com/sun/xml/messaging/saaj/soap/name/NameImpl$Fault1_2Name.classRn@=㤶	-<4-%1M*U
)(6hi+|k6 `ɂOc(5, \{g>MWrXUKM(c('ǰy5ǂBy'oL#Cl.f[וu	[~O"t`6>r"kOֳaQ$iw=
{.d>"x$YjԞK
|X^>A*5\=$B?k	,:LZa)ǩTQXZHuP>8v8Fv|^;*J6v&9P~aًwj*4'(MY$,E_E'XeylBP4CP6|K	[hK`2VlhEhk8Gg`v*OeT@?'	n`^hIpB:O#)d".2Χ=ԃ9 PK]    PK  5R            H   com/sun/xml/messaging/saaj/soap/name/NameImpl$NotUnderstood1_2Name.classRoAfZjmVVJ`A1&1i0ݙuw(+&={ăGQ֙&MA޼^_..Xa	..9b-,\!nv&lр1VOi'Xw #,73`+1qzPG;B$:qg(CL
yK&4,BQSFIM[B AS\%4'A\ݾn}t

	S)gm)ń\l.	jD`sO٬>ۮxL6mIk)d:A)cG;jU^=8Scwi^kGߐz'z> Sp?긍+	۪hmdUU:ॳ8E=&aef䁙}ġiq8s)j(	PK3  [  PK  5R            B   com/sun/xml/messaging/saaj/soap/name/NameImpl$Upgrade1_2Name.classRMo@}؄
(P>BlH["!U
-R .h.6 q$9(&HP8Λ7of׏ l຅X&.ZTD+&.3<՛84۩p_2<%wPO'"?遗0=Xۻ" HI<+>
|$.#"Ҹ	"WɎbjf(S|$L+~8*?:3Xe4S=x
U
TkÍ4s>Lfjfv}HF"1lό*CSO=p$Spo +8IJ/"5p -5>԰Ƚex|6?zGd4F@DոE򗍻w.jpgRΔu
i{kbp q:SͲ.*PK.Y  C  PK  5R            L   com/sun/xml/messaging/saaj/soap/name/NameImpl$SupportedEnvelope1_2Name.classRMo@}k؄(|ِWRh+m%uI
w\@?kZ@b;3o>k&ΛX,`Kj&.hRy,L
7yHP1Cj'+z 
9\|'<zXa^Eg\rU;
 Js/ˌ<z,|sƩSߣ>c64flD々T2j[S㎔F;U̎)!(	s^=ea
A[b^	TǐPT4cQw7&IbLO$IxdҜ7hHۭ:mF\%?s#($2/>wN9,D},\>u<S.[ɻv"/(6,70kXG忎 e1*_Һ8-~38+*݆~2Ҕ=TؿYTUgI;PK^*  k  PK  5R            F   com/sun/xml/messaging/saaj/soap/name/NameImpl$CodeSubcode1_2Name.classQJ1=kOeoF*ā
#J:ƚ2)3o\~x3UA*&$ssNN;c0e+SasgJ[v!׎$CUZvҰ';/I%3$/:"^Z@$3<I5e>]!<Đkqua1-٢
c͔{b`,Nn/yQJê ykp2wsq-gRB}b2P;{`/Zi/Qu@usrET2U,db6jY43 1XEPKuG  w  PK  5R            3   com/sun/xml/messaging/saaj/soap/name/NameImpl.classX|Sy%[W
C`#ےmc`b1 %E4i@ׅYKdCCC6]MI5]uֽ5S||{~h0<O>4g/ӿpCn}@>G?N	7ˍ\174B%>MW	&4>(j&tPQJU,bM,D
x&1]:+4QtGFq&<nޡ՚k4zXm>-ܴzDGQ?6
2mcG7 
>:t<b1(,n2Y.Ml)[k4? nmv^&zY҈GIӣc G;)SNiAˆD*cG'X"r$92
X&2#q3$yt,oOߓU2ʍlS>{(7Z,"1sʌ]#ˍ[mn۲}ΖE[ђG"C=C";B{'F8f'ÙT4>=x:c34xW0pϮ@M8ou42x ҿg(PE
Bϝ(Zⴡ&SQAXb̈Y+Ki#=5ǭW,1!:t&cb')ԋ}rYW4lT4W'krAѸ98=5j1u0RQIwf2
%xT,<eӆ!m'鄑!l%J ;nw8c5`$&e%K9R	K3i)oNcfx/n^[&J[6V{}[ydX>2#dkQ~ƄYBO&˵4XdvX\$aw||#4 Y:afdPI#ed>kѵQpwͼǷ@В]r]jg˭G9y?"hzCd^Rnm\|iSY^n	s,#J(j+4Sڤ򓫉-*orޛDA_&jtl;̙7kVl[qEŭhN}W~_TI璽ZUW5ye7-|'::d]V%5-OSXSgU%(Lk?Z7jmiZpwswTmsө1sGcE!Toۆg:=DD:=Hts|GS߼@_7yuAnzQЈ۸=[tzy~>&q{w[G[{yBD&d)~<t)2B5ѯ:/!}9aĺSӬ13&n1
XX#F>0bPŐ>~1"(갤O"MDx"5el>}:CY9
xtmC`j:	 \;
U3w!VgY.t:] dpzlҜ2!-b3U܇aÌ
=(N_㑛NqTNK9.nN
Z'hk[nYfNru)>HUˬm#:K>Y!luBWuq]easju+7/V[@ոUv.fn_smZXS[OyjV˻Cz{vWIopMU#y<^eo|*ܛ2\`
Si(bLZ>˩U	Һ8"²*uq^,/MXPiqjqY!ò\0jI^ߎLpqP|s9Ǘnozz4{uӕyaÎ-&[yvc+3I3V5=TZ&12Z/x"eiڮ,@̌Od&Qtns%kmyt9SgTnrʐTAt?#_qC`܉!7_Dw]Ts>
ڂ/pU=J@T%lKe[ϒ'|4	r7ci|GЮ"
[C>jjjZZK+XQ-"1oPHłq[ۉۚdG-g̯͒!Ewɾ/x|̊)\Z L3WvA[(Bҝi;z>|\*D'3JAcC%6E+m)S]R`u/޸;WvSle*?%HU3X~y]ZvbK);p.Sgi ~.to{h8G~O>=AqR_<X\_ gh׼恏]Z;v}Z!(Naef#QR"{J'9s.ОU@Kfie;_q[*yP"c*誟,
_F1l6AJ@BV:A7]|4`=KЕTCIT]0On$Zm1.Pyj8
;Dit,5¿Mhfi-sS9k7D)e]Ei++mJ$ų4&mE1ෞKy/
^"lzCRۧ`TH[RyPP@>
kU@j~4+o>z 0*R&zL~+t>Sy֙,`GUReYah]yY.~1Kb[K_$8o$AInk<T/C2CG,h#7Zf6F \6
"D6ʹ;%TjsTW
b[eGoUl|3T߃]{+\[bFB}pBxʡJTD?Rs
i#j&$ԭH;F#AǓH#)$w! ޏ|1'
4900w1>} PY{TzCf+T)+kVTԕ.*¬_ (S*%6.Z<^4V++/u^.Fu

bW~_3hy*u=E9EVi LcEV;
}x
&Pw`?(-⾞~
1LeG./ҥv.dPa,)[@Ta_Kev821#P	̞
3G5Y?3X*bo
	N 0#+('22QA]z@>%.]b7%n.qNe:3`#ל `U'!ktx	`zF  p8 tA8duS'p -';N;IGב-읜;.Y;dGzrJ^iw.ֱC͐ưc}\r ]Q،<yFY
uT_8pxM	;?Gf=[[
ɢw4+"vOσppsܢeփb-zYpU7
$	A4 4zl;e|+%5*z%`z%kX؟'/ݔ3{:֭[@RI9i z
0iЃE~w	ˠz ^}w}AπnUPKlΟ  (  PK  5R            >   com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings.propertiesMo0zـD~vHеEa
dIdA>ʮb`_R>ҺWufŬ{υFFNVi#O1ߡd}kT my!6¶25Dkz/I;4ߐ\g$C(
kmZR!z颲n@C;%+ưohHMN=ÁìVt-(dW5n(e9yH
R[j2,5s4Jx`;/ ir
q؛m"W&%0^MwU]'ڵF	^̋
QY::笏2l}x(Y)GWpO7F8& )|+3co(*Xġ>yVhCvwW Y2;{Zq]\G4R٣Kl"p__NeHTmY欂%7	̥U8~~פ-0$fy>w:
+j{N,p^]^\cXGtKɺ1vZȵ>A|Z&^Tpݺxu8Q"]t_Y~PKyI  j  PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_de.propertiesOo0zـXE
&-Сhffl$Pvw]KrDߓ,|x$SoaNS%]Xʉ'0Ao6̭ݱR6tR	=WA#2
PJﴱz-r+3&5!",Md2떍wpm
t)T:mm?@BC>l[{TM_鋶AqM,U{+ \Rd6)2%(}F}|1
<"-)$6A]؎q1ߔ|;{iD6zx:K3RuIպ؆%{v~Pg1%/$BIL,YKiz't/u434aKW uKtRǸN[SM?ʅWL(o72Z!T{eSfrv&Dl<٨A].<h=nZI^x(S-ӅnP=ntk%aiyKA8p3%_4UcX 5sCi@@ۍ7/FHA܆NiU+էQ䦵6yH	R Yz
+\PKv    PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_es.propertiesSk0_qЗ
NA=6tZ
0Wbk%Mݕ}'gQC~_w:AM%gg0/\  :EV10E)5:fH
HZAZF
{Ba(.k# FH1}%,\iI{(Ѳ#5)j6.ԳSNv-g̴/Y}^*.[Mj^"Lrrn).H:gL)x
ISmBm#\9΁b:_r=S	K!X0Ţ(ŮJ4*EgcVl7(_ ś(|.!
,d	Rxr^N|7{l1~xϨmF?y*K<H^V߱3{:qͅ" #q=rWwEƐ#MƐ7<B#hgI)bS҅@2	M%d'DVj{u|&KV
kGY܅t=tlY^\q'gy$эVNn	Qii0Ð(21,<mzW؎EzOyPKWׅ    PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_fr.propertiesOk0)rvn@l
)K
P(5k+%u${J{Gvܤ!Ѓ1F77ڃ3IUw{ȏ&0\,jt [m,X Ԣ=\ \IN!V,R>j[B
aABRJm:v> t.b+ v.*ed*F2v;pTң\hc26τ|?ze^(.[tt1=3	hjOp5T)Ohv#E8̶Qj`Aimo9eR;'ⵡ`ĳEJT󢱡Qdu.C5_,;?&3ߞ4JRɍJtM%LHoKejY:o`iJk>3.o&r-r=)Hځ:\3?6
ڍonGLӵw!W5DӿRFaL@贸߽^ >)aGEVr^8|MI
;i>J"֒Tr~
iג%9?)8	Zrrסeg5haR7PK7|    PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_it.propertiesOk19[޵zpRBz(Yj%1Ү~64@Ƭv<ʇG2UzfŬ;"Hr5ȄQZ"F1cm"&!Q7AG*h@FZ4Vnخu)keM#5!"LLd6m2QPbڨ@TnsjګAte!BQϓFs\W6rQ].FߒK9FpKҸse_rRʴk">
F^̋RU$|mgoX-KQp;(d%d	'W2%zce?/Y&V1!N:IkܓܸЦu"=P!U-<_{lN{wj~͌
6l٘k]^t,F̗(1
leky"P%$7lǲcMBAk=p
cxYCscо#lNRdg+.O7CS04ǽk}S\Ta0|װG~PKknm    PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_ja.propertiesMk0+^.5$d[a(v-jB7-#94rgF<z%],.Pދ_>T$%AT-E׫^""kTa-TQy5^\ޗ)$d3n@N#@A2҂WCDXK`k*N`%U˄`JK0hst*!y%zlX  8
JbZ=>>b:^Wj(jEvyr,1newW|[>X^
vr[2(\,Lo~FThR3G\9"{"hԶRBnjXqgxM-q/ D/5x8ݦw.v?MB?/_o~X;ai-Ec,0(L,sc	C}hkzbDk
g(< w\O:]D?dDZV?G7芋AﴤIU/Kl&nm4;#f1C#nF`pMv705x
6Sʲ0s/b׎t ț?$f8y CjKI+9&HE':5;ŭEM-ҙu3cT6aB>&p[NSruЋ.YVӷ|Vӗ<0Dy_ﯦGd]gfn%3=I_蠼,izFfhqPKޤ]  x  PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_ko.propertiesS]k0}ϯЗErt40T[$c}Wrt]G=D^sW'Ⱥiq,sGJr)Fd-@RiPBu% އJjUWTR]l F@%˚!ЖB;en 6E-{- (y7ٵp)b@z,*@G@n2_/D8S]145z!z~`U??(%ɝj
6/Y:g3[$FnPHFz8n
}ZMgE(`f22VT;e{ْUr{3UFv;dANd,R/;cm(lAO/
,DsIX7F {<\5zwLd{,jp%xc9CQfV~	\ͳI[M5ԅhZh0
H)pk"sD}k]K#EQy,r|9#C&3#^M&P+ZYtJky!&y7r6%xK댥#`u=7ԕ>QWK)편4gEqܖE6nx5 $kvjgIv6q"tGQx?(1Ϝ,7PK 2  X  PK  5R            D   com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_pt_BR.propertiesMo1#R&mF&E**j q@BS{5xmn(xm̼| <9
aRL
(
Z5vt6Ec(RhI}t6`!U,"=[mPBhX0)
0Ba)v#M'q&`c
IYВ,JQaWiY' |<v:8_ɦ&☔e!|V_Fwѹb'p^&rA],5EI\BG]mBm#\8ňlo%۬v,^LRDp^466޻ڊ{_8us4*~B6=n)r<uϓ{'o}=1OVO)s뛴Nx<Ohj$<L<K{9xQPw<?w1vҒXT4^
2
6&I.IXE(xZX'
a-oJo]lp*<Ð--7bT{6е7:at}'2?1|_ڍ?4Ʊ'ɿ	BWڒK_PK&w    PK  5R            D   com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_zh_CN.propertiesRk0_qЗ
E{p:Z
Pbd$9Ywkt:]-P#xY\O}
w& ߋN0
`3B0kuR3,PsjDǞn
nh@GDo8lZ<
V(	'pnE
xdZkju>	p҇5\ZM<ym?Yo/_(7
6z
v,
u.7?7j5ߠz08>--1.1Vjai@=2uDdf{-f/$>kpƃ!,q#/UTf
Y!!O.HhGxI!u8\Í[4N$rNhBWRIMSg-fh"Iq2ghFYl#Sm0'?J)c$**	޺m㹉PJ,%Z5SּD2|Y=,*vйO
$y
u0wB&9!pٕΥ\!PF?B-°ǅ&/^=%DHE!nfz]h@`}SP@l&IjѠXPKi  $  PK  5R            D   com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_zh_TW.properties_k0).eD
(ki6Ca9deʩXWWwϑnf7PI}aQds({MہRj e@90m3a:2A=7<hzt(Ҷx GTМ(~u~|ψEǴۃRv4 D\57Vr)L`D $=o{RJj\g.:D:َG&YnX^]ꯋW&LaE5-ˏȌu6јbrf cSR.ÍCn=1~A}?8FkVAH.]4JIm1{.|IwU0Ƹ	1M->W+ۤ"g3kVAޠ$U(A]SVr4I|DVfx]x41ep߳4Gˠt-xjrFcxa?܁zjƽY	0h_/vNl"ɢRorOchZA)2N8=Ѭ@8|sJn^ڥ;Ug>NcS]/FD=#"$|yCfS:S
v\\t!([p!$O?~PK_G^    PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_1/HeaderElement1_1Impl.classVYWW.L3HZW bQ1,-{^ ?Hsz=M3ͦgι}ꫪn/ C
pC,bJf
	-m	w+^
)@
x$t	8O a&0$J fiI%\W',$jMgdVT3L*# C2sW3#]T]RZ䮫ͪxE[%s  ^1:v3l1,>sC6I"غfNi!7cg7`;{+\sg"0H
o0Y?شC-i:WG<]v
B2(p"A_Fs`8Y/jD8+hI/Q]zpr|I
-&@=zcL/{tnD5n!	UP$]Ϸ(Ӭ|U
#qM_2CQ 92
䯩HFИ4V
յG;	Fq,H*e78˺LCB;C&-pf}Ga;aKX^bJ:=[m4>4!4(ñ-0+VUWEUL)	}ns.q5q$>IS|Ơ٫==}J93e&(A-/lyŰu\?u(N/hLǢf.uDj;r&%`z
_y<op(
ηFE M
.dUa<ycߜ\Re4'^lr1+6S_λ*j/4C7
ob2L`حLzG}[Al}H|p
&74541DC$CG5V~B4>=;I^|t
iX7A%NJa^՝k }&OT:bЮ4^iпaHvu}mkIk zR]GY
8
cPDT퍅$خMհV8`OMz
{Do{ĭ%'Hvu]k)PCEL@+"Wm8ITeru
r	,΅An`H^
e>91?|V~%vܒ[`UG+#1Ƈv%6,
H[8kܛ]d, i-+F5RtPPT6IL&p	C!vֽ?!-QxT(rRU2nPʓZ#gp,1\ݐ}cCvϔHmyBȣ=ʣb%0b>cn
eTЇJOc5M{! .p
CM<(UTOLNPK  s  PK  5R            ?   com/sun/xml/messaging/saaj/soap/ver1_1/SOAPFactory1_1Impl.classUkOA=ZۥjM_<PW$GB#
4y{Ι{1H$҈,ĝ4rN#I0F
)L$q7

#ܓfR)TxCc⅁E3wE0Ym5mZ\ۋܳ<ZL-R3݆ca
n9uỼi	oݰ1jj>tѴ+Y<]N0V/DڎpGܲ.

5=nf`=Vy&
4lNG̕(&7z}4)	J2:b=9܇pbUi
CjoV"ډ%oF.n3EՒnHj8G s1TCFۉC^?aouƶES^]ݍB3$ZѮzzGOכŊ>VS":Q%
OLsLiFa(m)Yћ[g]G7@%qI<v+2((p:Rㅣ|'=FJ_MJmW*8w^ \Wm/L~hfГMo4<nx	j.Hl!_@\D$WKBL -t-
n{ɽZqUIa<B//l!;,#g["rirq'˒5X3i Y)s%:(F0
\"9Jni*d$Ʋ={FߒOu"	;EӤKN1O]=T΅"
;YT(PK[M    PK  5R            @   com/sun/xml/messaging/saaj/soap/ver1_1/FaultElement1_1Impl.classUmoG~6vr(BӐ
"bwL**URMuv}<7;33翿'iב:0-L'\qWS#)HaVsRy	Y۵9R`y3V1+"xvfK3x,ͯZEr8aP^I0-خXU	>NYy}[dfFO'%^sEGi2MW9ddh-`x_Ð[^Un	sC*OspMU1Xtd=V36axUB⹽cŐ%kːȎ>a8B֫^U6uV v6_GiY#ȟ.[u0}q@"^ͷĒ-۵7.J|qBA
K)
!
w
B?
U1FxPjŭ
y`j	
C(r39+D`[s*001Ysz1=d?Aջ}ٹdZzis&Dv4nLwb MSEZ}z	e*;'|U҉}d/fAdwyԁiGg, cFVHr`چ:=2?
Ћ>DjdӦ`ca;GV'OH$|8߄7NFO/&OHΨ<1J+O *DnHG!6BZ,]NمohFG!Ѷz|S)F>ړ4'ހ	0I"ڧ3}E%SJ2
F; ^>㬆,
z1'L5F#G]ƶ!Gc,qkߢ7?xS4!t`D#(<EK PK;>  	  PK  5R            F   com/sun/xml/messaging/saaj/soap/ver1_1/SOAPMessageFactory1_1Impl.classTiOQ=S갋`)]*VH
@Hyg4BC$~5G	U퇷{{?} 8Zѐ#Z5qDեC1kaTA9ek$aX
O&L۔ɁȌ!Z
-uQ]eBNWxT Me.pmc*p]^2re;:vXZz3ES#tΪU@a]c9NWEQcޛ\[ tܕs;19/&yMK
!g3Lǘ+rInkڦs5Cȴ:OMA=CryTvIy^aB3*ߒ]-83J63]Qi~dg[
[f*甂+-1)v´J2%^5N%%+A	?U.A3d:F爪aﵹ$dP6jC玮?F5Meh'=N"*s
k){S&r^#1?Db$wϭSKkT
3BJkvVw5\n
]bT8	SO4KXb!Rq^:ݢ,;ݦS7HXD=7W%
WhtM
3549D=	h$C2tRĥ]O{ORHfg'37{Ȗ gPK    PK  5R            :   com/sun/xml/messaging/saaj/soap/ver1_1/Header1_1Impl.classVkSF=F4	q6yHq i	4./MT#jK$WM:h3}|,0ͬV{?'!+LDqɴO[S2%HG51Es2棄Z(#'X@²X
]Xߊ楄d|/JtUd8oZ3J

e͝Q4ϒټU܊mKZC]]\KMH*9I-3D&g(k|R^s}D#K˺c`0.Sor'*Mq|-;{7evkc[H<yRc9Emk02Sbώ!JsC<ԂȽY[2)j׳¬^SE<C	t@bۖB%n!ռ%Lm΅#\[#s" 5wtJQf;mϰLWu׉N;<x)hXhΪ8ym

	ypZ4
%`@n||ུZzQ-[
i5Q%lʟO-[EjIcJ!ko?AezH&(nztLSg?47˺NTw}<vpbiKZp9
\x"܊h68ڿ&zʺad$bVkF0RTU3
aue][g< vAjv@CWKݱ$Y;d"R 
}s""iRqe3:KaT`Heq5a<y<04ժK%
>Ԯd*zT׆qƗT.$`ۛ!tCg(l!\5:hPVّr,ކxrHۆ[x~/ CV'~J_Y4D{wv7׊;}$"	zGOh<0O162ާjԀV{ 5?wki9&ޣ(ySMZ"1?&bN]}X..RiU~N0dzs)5ر\cԎX<$ZB"|bSqgZC þfGԎ`4P@_U]
CCX,5Gqr%
gZOB/~XzL|"O>iܢ$%hp?PKYF]  
  PK  5R            9   com/sun/xml/messaging/saaj/soap/ver1_1/Fault1_1Impl.classX|y>.Qa	$H@Ӄ%S"P"ARx$! 4'۱G6mi$'"ȶƑuGڦi:6m3ItN㏸w}/ADkI/П{)I?!^IKJxɤzo+K*ʱO}bC1>C,~~,EX7A1w
xLo?]B_31+\/sK.R;{:ФBz]
}E*B_S袇+UKVT
ZyV^buP= 	
/υ
ݫUn"/
pY\*@)|y6n/
nS] *RU
FY:1F\+O+A#Q#z0G
GGxLepr#MPl<hcaj;bԸM#-]6oT%6l0UFjD0Bzdw{$96} #FbUz*@
4'v4j$R1|-`x	NӈiەX&
]
;bi%-/kS]^

>sFdÑ~}f^k@(vv,`ek&=J֜JzҰD`Z3ap
Z PP;zcٔGD\Zr7ƌСÎL+0͟#T"_wd85=T;rBr:E2s POӴtmiIIW9-D
+Ez{4Q	P'~U.3.KL`2~Y=!Y@ ^3LrJ,bjPfVhd8nQk@&_!<fz낂&O#Fg$fzZ0Ng곬Փ4:Vd@x4'S	J6ezW6t34.}y̜/dkSCd!,nLjOӢ$)N펉Qjfk2][n[a':|I)sZDi7+.2)R9Fyjt*[cNsLц:>zQ6"v!ckXAG	^*o.r7~~ң*]g%-l3DunAm]H0r0Gi@8r/y_S]4nzQSTyoVyߢ|ʷswi	"t/*lxa,k* 4ʇJ):as}s5+,h f*%p 

pǡqQ?p;g:ӼX6f	
3fR5OnAp%e,w&Zq`
oDXF:
x	z]iLFeXj[cepXL#%TN	E'i3(llzfJ_E>s.-e"28ߌc.jT.0[k@F.TgܸA#4V)`p#hr:T߃{<<OE"iٌH^%ίy		z]=gTz^xj0a辰9'CchRfrXB-xyK$,Kuހi`dSp\X$bd/2aCORSJC*?̏(?V3u+6X^ D 
Ƞ6mTq~"ܛ$S`.e"TF::k%+^ՆzyLY9*̳JƇSzD&:WFtcnzEGr6ť1mAZr}H&A[qeW{H
`AiA*E zzU pפL=]҆ve{n쮻3eZ(S)!]klwu[tlY8gΛJ
4d/T4
vSLm>XZ9͚ٗsucKl.}-.
.ݺqف]m7{FE7	@"z=ݻQ7}{87K}3XulX׸1L­W25y~3_fY2{BZ[K;;kV]Y:NWf}@#6a7J Ty9.5Oh[	y?$pOM}W1b7ZrE&f-6^:3-ӧPǼ$cPMII"B?"<-0[/o;G<IEgVDw9<کat7}H>J G[ o# ORq.**.XlX=Hٰ۰_#뭝.-zx
^%䴃T&:$j(%CҦ-JQY.&uCxjOꮼOVP~>fSoTuoRnN4Is2X3TJ;\)z܅7aT韤\Af:QuqēpGX;.IE@0}RB	Jy/L6l%OQM͍UаKPI%Cm%dib8EL>!`teE>%r&~F&J^%*	aaѧI/ڧ:JIOa$QoIP7 BRy+ ;LBҵ~ED }~[JM>CQHCy=t
]ȥKy#"R-GU 5|=4EmQ0Td	KNx&0o1^`
[[5-<K_17EW14EQKH	Y<{"Xy6hY79^vd-ڬA8o}r|rT8~~FI[E5!覨ze.>afW`PHgh[LEY 4nsBS$Ci3?AKҢ,řl.v%a TEo@ W%X~my1<ή$_iMk'h)jkrPNRi+ůWa`!].2s#.)	,9vuUJ-Z}Z`r;4Ŧa o|IFYnb+
.sC*]@~/e̝3g2B? g00^S ٌr~пM}I}.΂^W Kim߱ӢaZZ0#B+P1oRkA6 rn=!u`$^W{ld{AyKPҧ5yاmn9 v	:~
qOM('rk'hyڧuOhn9y:8;"@-<AG }~"xZV$kBhZDரO͢PN]hi.wam~Іo&LҶ\nwqht84C#CXg"v$-oHKx9Ͼ>zߗӿ]VwꗭU풪]R-D])a+Ş6wu
ṫuڽ<
웤A
i{SdhL"emhXEh[`u&ֆn*y}:;f* c5j罴okvZi3I}|0ؠ<BwAzs<N8J8N||5nVKi_bd_&0nbtBV'[9gQFQw鎢&|W|M7	/MB_/&N9@m$ 9r[&=T2ʃ^~N}J֋eTD7mG(Ë2F(D%gZEPCgiTͯUDjZ#4|hƹH+'QC>Fi4-|~'OF~P$
.OjUT]NQO/)*v%H3Bf >:PKف'  $+  PK  5R            :   com/sun/xml/messaging/saaj/soap/ver1_1/Detail1_1Impl.classmOAg(EA ,IM	40_X]swVF&~(l
Tjk\gf~ٙ;%<1 S&aZY@ڄc9gk^WA'eex !<Q۫;U-K7,WBP	
}r.dbkށd(ڮܪF;3T,	Vh3~ُ2CV'Yퟀ
P{Dtjjz~/Z"7^hIњaàKZy6Ȱg:t-Q݆ "\rR2<m*נ",_zP:W-rT<	$EezG	ev/K%^QKt.of[TmJ?wKZضshN$%K2܎#LySpRN?إi$Q]g?/`fs3g`L.="	$J<1!M21QF[oFUVlM),9pcn3jS.¦ЋFfU8oy0rTk^ꖥuAp#IU "߻HD5+9K1PK=    PK  5R            8   com/sun/xml/messaging/saaj/soap/ver1_1/Body1_1Impl.classk[FYBDmeP-ł[J!;@h6Y,V}էgfCr-<Of&swO)T`Z<fLE_9*㹂L3T|"XT`98VUE3^bM;+x%Ut{?(XcgɌt{9[q7,gK
cG]#.>YvB;\.oOfv]C
Z
<2XcMYКPmpaӛkYbۖ0~]ޤnj+;{A1ϟi'<Eq-ݘgiń&~/JsC
#Tz(d:)cܓ8E7L//P~֥|rb}M)ߍ14KnC
)XA 2L%|7j,B ܴ#aWM_E$dm2躙W,Po!ãT?)0ͥdeo&NXpoH>W
egzO2)%^?
u-x&UQH
?!_ߗ_]/<r=EE}'<FSDa!*QCyNMl	aQniWG)	
lA6(	Qqڥ=wvNh{pg
6rRH+p43Quo!T_dFN[d\rF\ugIEJ(ǉzhD1!^nTQ őǓW:7ӅZ#euhen9*:ZV/npV7kv4+kc+#$W	LzޤQP߃qw]G^n?W$#zS!y.$+D.r-iqDX!VA;B1A9@lƿ"r\/%`1;*=Iՠ?Ak`VΒAn¦e	h43-2DtP['"|g_O'ŏH2yG#vEji%#?!c|OCpvc_k0AFA!ɠ8}ΪUDwm)-z`~PK%C    PK  5R            ;   com/sun/xml/messaging/saaj/soap/ver1_1/Message1_1Impl.classVkSW~lXh@Ajr"hj
XLvcvC/Pm+:m?v{n. dr<{_2p7:íjm	 $$z:X!cw$$H3 K@& 	Y0ɇu		JPV5M:FRe\Vc3i8$ieY:C]0Ԃ-$i'ZrV|mf8KX)Κz*timiiuMU+tث"ְ'4ۙ4,[w<>-3G"uA$v#Ulre'1-0SFJkzteXꤙ:q'k)-e*aYy|eX-=	3dwg覵w"
0=c:ftnmHPLG+>Ձh<kW<pz}*ztEp1gh]fYwx}hr9^xK;d攖N@aYp$9K>R^) v*DEjb&!I\&s""#[%!u22Qhq\dh!%r$3&Ţ2,zH{gIcq+IDg[q>(|I>a4ps\<!CnڞYʋ8. >'hbOO2(9+dM;N[b
UzFfJ§3k鴞Ѹ`3oM	eaN&NeJ TPt:i$Duǀ;<ùiWXV>5R
uXMWrWc0|wH飉MT.fm
9KvȎg蜕ʐzPo=NJ
))zb>AE|\ '~Pdz}Nk2u9WTvNMQt(DC9X悠ώ_Dpbl~l{(ښ^X6vs5ݤ]njt+wRy4Rf[r&{»
] hNvZӓѳcM*ALOT:itЅnzr D% eӊC]1ϨKXb}0sd"PRyT?y4 |N5kR~RS8x/˂8+(<dPG$MMTA5!t̳y~EHATX#f`;wxΕcKO\?@uOL[ѻJa6JC=!ѳ伐eyr\l={_yP XT[Aڏ`+^cd	Wn}j}`\e.{b\(J8`{k$Lᲇ<K:!,r5H+ΈR~uWvЈC/k]ym}~k6uT" :UbqjZWT$d`0*QEp-
-#ئhzCsh<N?A+OgƵ}VEyT8BјJ(?&k)P8t'}G"G.LEPKtP    PK  5R            <   com/sun/xml/messaging/saaj/soap/ver1_1/Envelope1_1Impl.classTmOP~.t+Ud0TlPh4M0|tYvc+4?xn۔e	mr<9?~Ć{X0,I@JSTb!rÛb#hFǱ
GoXn8?17/?xfn4	os|l{u0^\r<ܷ9q*g+`xzi+*Fmk
GFSWDa=8:_0L_P.|vȠŮW^+S4Cs%wq4Yɢ#93.ckPri]@K)kHd:a-ǨھMڒO&(簊F&!LW<ÓCDҴ8gVDSV4~yx0GM"Erv5iK=q~N&{/zT'FzjdT0R*u1NCImNq$a<Bp#wyLFѣU"JZyt1|Bv (i|Ũf"zZDG7h&5744.JȢәUӢ*?K
0>UgJg|KAQz8;pqBl?0b, PK~  r  PK  5R            ?   com/sun/xml/messaging/saaj/soap/ver1_1/BodyElement1_1Impl.classTmOP~VCaнIA1cJw3J2ێ_ e<+sf٦s{s?}`
+
p[0K2(pWFAya2JǆmO^jc^V;Za7TOTњ޲oXMZ;NljwN3o=L:9fj!P
:C~\U9u2
*at6w<!ɦRM1l?kj:WXZ~LAj)
R)tŨ0~E0<*ka)Q4.;##1~uCiΛ؞2;NKCOiXu%0)aӕDV+GPia1S"f
GuPK7DaM33>x!r&ΦXZC9LA\l
L
ȥrmcHV ]02.a@2PMEa;6	;1'إ^" /#	ץR{i"(p/U*EƄRengX~PKnP  0  PK  5R            <   com/sun/xml/messaging/saaj/soap/ver1_1/SOAPPart1_1Impl.classWi[V~	122n*XܩKb/,c_S~IfYܛ;}=ϣ p?8W0`LL1
\1S2.+i񦌷	
Lÿ)fbe	y /e,*tWBK؟_dK(m¼yVB9˵>mi"!5r	3)6cJ&̾|K'p
$ʛcEXvlAMcc]7	4q
6mٲ!v4Z@(F}ǖy8!wé"f}Bɐ7GY!:OBs!w^3}Hډd#?8K]um4?M,<w"Cm$<_`#vl)gC,O(X2
2nIPM^ۓ; 8Pn1">E%l`[&kֹp,}.M9gIq̆-ѻV.<p-kA
Ocy7ˡKC%eܖеe4nԕQ"!sCru!g#0섙}9
C
/☄#;{:OquN0[Y]ХwHǸܐpr-C3'; za$m@eو7+`Y"&)zG'TBiL~n
_ٗbpw=D@
_˷X7Tj,Jc	$+ ]Hx7Q"޳JBX]_N&DwʳSQ}mϻ9[ҵ~%d+c}fS6>%,IkԖ*-:Ud6:>anrNyWamcKBRgz<J^S{cmd0l;i`AhR(L=PSzm[I)ӧ~]*YzӧQ1hМnz[uHiR=U#HfZlvt(􄠏,m}m5%b[%bf8RBw58ΕP#L'eRmDZ^R:!?5ZLߪ)^OpKY
y4'= _h(Ah%l?1.aC4Mg2+gh].aOG[	{Khw<#O\HJN)gӳ҇~Wq444u"):JV	[C,?G{Dy^eh%4> L=DR+x^E8#U+
HOPb(VyWph5XJJ%q+bw$bf*hmU(dmeg^x#~.(	A!ᵈ~?PK3!  
  PK  5R            ?   com/sun/xml/messaging/saaj/soap/ver1_1/DetailEntry1_1Impl.classTmOP~VEaнIA112cJ%}WMQs2\6]z==9__XJS+L^%p_FAya2Jm^c~VۖZa7T_U\ug7-nkVڑÀM.3uMk{o=Nꎮg?:g,{WuhYܰIescxxNl!=)GsM!c
x
HW50U"_8(yyaO
ZgJMy"{xd?Ыn$Mֹ(4=4(Nò+$.	F^ƞ*xrQ9RXʰ6N=#ah]ſ=!
3wM.g|EѡZC9LA<l
LK)plV navNf0ȸ9F6=6%9`G@؉~<.Ǎ&h|t$ʧ_JL~ÊDTJ7EƄRenGgͅXw~PK= T  0  PK  5R            >   com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings.propertiesVn7}Wh]|UAI:e}+ݑ(E$WP;$܇İsYRՏ0<??;`4/WH[_,ܣc0bk; F80V/-_d
T^6B-aEVpI鷚k.$]j!ʁ^DJ
V[/Q?Q5@rOHfrt00mG_vʻ#e=0ӘTCb!Nbv/%oݳg_nmTQ
耄(\(7t@2I5#0-{58Y#StM9Ȅbs]o~'DWJ{ @]P^&e-x+=R'h45J>Wh<`eufJ\G$4wTr33[$(4]n&:DAjgМL!+uBßI6QtftRҤn|.7\sOgoI#C8w)XYg $F,s&>kg	YǖDR2[9uik8e49}%
l5F[g]FקI	{2neI2`ӑOP<v|Q}siȔc-vL# %fi^!A_W^[֪r0NsCșbA!R|a&z2yu5 hGZ!&n+-}$x%fb484㳧3gsKLcB<Y
d+NY"k /t(0)EmGTwZcZm]wqY1+Nk\iL"NyqY$''V9R)C}$>A'\Axi_ϸkd,)蘶g
tMYt+r*#k-3[	"<,>NGvmh
[k([g+0vdm]O|UwȝVd[G'4n4:;!IUw`eۂ39cq2i1^)q'}Sb-KA?=>ÜSj^"XpwHv{PKB    PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_de.propertiesWMs7W`K;cp>NJl7i=Njŝ:ӡv]N(rCr%˝Jv9G#xkSEG:p<NfA:P\.V203=5wD>Cl䊍!$쪒fL+!}|-Mm][yEUΕN-꠬+/FbxRe%P ;22jzrlF?ºr+4`PTeS<sBtI-)&Z֞l+ܠ
eAB.(@aC	RWx@e1T^}
O#
4͉<2ba)\%$2p-RjIkފuRk
?O72#u\hd*A%U|a
}{U$Ɂ\)4@'z"ӯY%g"^vO`HLX>-S3Y}k4oKgAJ$yWx/cNƸϚLt%W_#i,Ǝ9LoT:OI<ih]nM(ApLg_i{1FZ`knY>X
p}{u1-$IٲH/.Awe몲.`~{'XwfgMB?3#[y|5^Ua+4-a#	uE4AXQ".4toLQƋ/ԼRύh>8i!!2] *`a}zꆔ̂u6]Zʊ0,
_cÎVXlhRJZ)7@MUypH{$Ϭ(b:;n0@0 l"fu iA6<BA?Nz
lM;OmwhԠ7*F5]:n:š\~geYq9Ԓ˃Yx'$
_j@'$_p0xM@i~>ni+E"Adt6n>1&&7#ں_ HQ_/h=Iy,^,&$3[<
PTN,Y,N%iނB	f P#UJ`Ӡm+7?zMm慰6dAbE/ޚYbRKtK*djxV!s6NZ$Lh,z9M}P
Lb?NWU0箢g~V>&]һz?mhA]x7Hm$ͳPK-T    PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_es.propertiesVMO$7ϯK"`r`VKv7"E5ݞ'n(=힁D̔^{ў*cSa [:/tKm4E83FcAx_RTaWHRnnD^ABWפ
- Ry>Tp˔0	J^Q;+t,>\K1}qJۄic3?<#tE[+á*z2ͪJzAqpY"H/s`vPpшc~*= 4XhZT"F6+TTwhF#5>OdN*[䅸1Jj+Bhq"pN4b]\e9ho\ƚf,gF.5Q1m}6sNj .z\(f'LD #g/g_#_=SM.Td٫=O3KPʮA2ѫ.81}nC3`mO@B`uĚ-ŧx'RPwZ$!smfVYRIU]I|J b#v%\e෯7Pz@XiSfwk햖
hvoqFvP0-mI*.޲g\iq2RGO6,a^|$?~q'OqC4.o/CU6scs8#0G!Nw/	!oT.)
.ˆ;:.A޵d@M`FƅaD-,R,iR.QA%Bqzu:1â":/[;5Ȟ/:0dbp\`LuhO.mƛ69U
@сP\'R'-2?Rj28&Q=D*v?9IWP'/FYIX)sψIvhxYAj&	mCCyg+]p86x2"]g&b4DXThCm|C@2z9ǽՂw;vf7fӄQ]Q+	24\֔<Ш$w5uomz$.RtIC`x^l'm62
nOB%!as닲O=ұ\bWB̵lF8ғ6x
AN!$.K!v9u%\349ݑUV!!Ig+`Dy/VQ 9K{V}H&{1
J?PK0$    PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_fr.propertiesWMo7W[8ESI@
jw$15ɕ-}$k[qM!iv{3`^fr{8h2wNVI:R\,V2t5<96\}\)OK'a
+$*n*528%5:ƻorrg
akOvRWZ5LԼ
P|4YjE pPdZonn<ºamծȵn#Ѭ|g75Bѫ˳tZ`cOOm*~S4XhŞ@'Mx%ݰ>`sFc?
6A[B1H32d^^X2`iy ux0?_^!yA1)([Bjmom'n~)1:s\;}.5N]O5g)}Ar6hwrw
MX>-)ڪrK	f GZWV=~ ý.C']  PW0wQVR
⇲|T3JKߺI˯J麠y_YaNi`!1"X!
Wq`m}@ ucWP
a!iVFjFW=\'a(](mWR-Vxsbz~WM
e&q$q1&	_b`jUÎyAbxqJZ8ǽXPXe	{e*X\:jUV5=#Qe
0$wMTɵ_"lq:1M.wq2@#q:N-c|q9Yotm(|% ӚqRݾd4zcuq[*`qT0%}i 2AG]_&	jwe
;g Oqm׭r=(514}\YpOmڻv<NсRjg=C,=jٺ/͹hQ);۷s/b=
qMo2]]VYO)h/ԭXD9UNgte}8Xʑ#3'qGzg&vOx7eNE^vuN#?֔B~?Hד`1>x,MQ-I%.䧮<󷟲JޛS%?|ћ]D+
9b҃9PK߰H  
  PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_it.propertiesWMo7W[ ;i\IjE
jZ+[-fwp`7sb{y%!}23O'B-
.X +,uʻ˒S\$\YIֶ^K@W+|P+Eq]EW:DuLg˕Ζ62ic5==}xx.Td5jY}8Z):3s0˟VWLE
Q@N5b(
4sA ~}Wʏ~SG10p$/uB/ĵQB[1w8%s,c+{Ǳd!SUVF91FE[ %qbt֬B&
i{@s8St34,YG&e)׀
1@w\A)&)JbUvx_=Kge0MPV*AchKu9iRaj>w0t4*	j~Jf3L)6ybxsm7MXhMvy{۞/mбb{mXmmN<=/?l0rY\ΒXJx?gh4U|TMHDrv,}ZŇ&Fbh$+f+XjU\{B\f8Dr]_\xBk64|WiaqU)c5ZM#巪2	G#uu^Yt^Զ'.8Y=僽va|jV
 NvƗAUǻn}˪Rniiu6H_ÿ$IC_,&sG#Z
.9O1׶m(0p//Zʾj(CÊ1GĴh4t}h!Di^N(]e+ī}xm>n	'{Fkdֈ;hlwcipGARcC"fWM9Ŷ<&&޷c}8/LQPrYtIo&o'
F%B?;>aum$&V<vޕv4:ĕ<eqvp$6ta X^8xs#t,IT׾	]D3	|hWp>Q	+*tP$ހۄ<d [ݖS	7-ތU"ժY&PK
"n    PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_ja.propertiesWKo8Weh=,K2ٖ.[7,ER$ΫhCy}CXo-qE9 %Pժ`QTb06ThAM!Q%ZތdVmA(¯w`˜
TV"2*Ҍh^H%ZDWEFKab-^!QiT5ǴуX_꿜gJ^Ҝ]\W1eqE{UAMbH-ٙM?'*y-2:+hBE*D8j]*R]q"wGggZ3r\LcZf<Ig%+8Av}o`wbo
k<ha'z&Mͷod"3.hzS#c$c߂,H^=^)LG0	Zzݱ9$3;# =|-"1e@\Zo,PY΍)QYe;~ՁZ*'P76&4ЁhH&4h<8X+j2@[TP $1zg2D_mf<>|*QL%Z#g-̟"ѳ0q)XnF/LXIp<?(4hY3$ϯ=U*wC3A7WW
Ӣ)9Zs{߃=F)B{i'u}PK l@:Jwu
,VomiО;@swaHif<=FMAIIioԮ
0y
۵4G!;KԄی-;&eG
jn ̌KgAՁӛ0OfF-RG0_L-YLq벋.OIXY&Z\N;˭kP_ڠ/Z-dk=M	d90XgQW?thSKIԢ4pVAACkkbo9.t6atG}gdMvX̵mdԎRk_w*/weMݿ,K!M!]+mT.d#m3=E/u!:}ᔴ;@?V5h^hwepRB&YT@o`mw3۩
07:4G]6"r3^7tU<&(QX@7y*IH.
YTתNGz[
0V-^{o^I%`DNhzA9]u$nK7\~f]к%6g 9C
c\nka>:८-Qi#=*T3nw[PRs·]͐d`vaҲTkơ8΂PKGJ  =  PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_ko.propertiesWo6~_A4/-0iI K)!HP``$&*I91ﻣDq]]=XDwߑg$FV&7M-!%+jNXS^
I*ϫb+JҺ&3E$W\yIޗeH+B~LXT͂X
%׬=,5%
i+Eܘ*UҲt%r]kJ\%˪X 54XZjN//(P!+Eѭx%/답v~P¤j^q9%¿j)yvsW+ɂXr+`7U"btHm9%mM!JқӪb'Nq8ǫ5
2pΜ$N}2ύ/&0ab^B,$:g])k Mv]fh0	;(Uc&
C|˚qj'fCMf.'q$#zkZrNm=Oknxy`cx5PN v5|rh٥NiZ3 Ncw`D!.6K!W>n^EN&Oh !C}p^Pc(E%!}DlXMY>K?˪.-Th&	|N	fϒ̑/ejAYY}Ni!\gJO9j;Yg}xk[!5/>P̔Eܛj\1ٳ'MZîan$'F`bHM|=<\F2Ӎ[ LzQ[jIqWXWCOic'a`<1\F1^4@9JQ̛g|2v"Vh!i׌!*RN4M/ߌؠ]d`h
(AдՒUgk+L\hĈئb|Z9\ޗְǆe	A5@>|6F v'bR[g St|<änX%݀ož%H^3
RH58돲YK`UC*ABFa_ٕ'C`qea?㪆}paU)@(_^}V`/ÍxQTw=˾` VyH0Asjӂ3I?ӜeXq,6QLe5llx=o)&a>~Lf(>!%Jñ1ob`6Ah~xQ	5d.a
c`dC(͎f+Sp\R|
/~{VMfixHCv?PKhvN  *  PK  5R            D   com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_pt_BR.propertiesWMoFWKXk}$q;vn1CbEmRZ-%%qZ`&f޾7C赭N@dfل;i&iHOrRZ^й<ɱg\S<Uή,
$2[VlYSNI_\69R!dWML3]*ZAYC*cAS19Be!TP-NNyu۬.¹oQU͇_m Rtqs9_kY{9#{[/B.(!k{7UGk|2Ea`,KoOaR
d~'F+P`cQl%,kVdZ;lAMQd9g3Fo.$Rۈur$ݤrG:͟%rhK1<68IW]"AFDY į _D8(
͹8N\;)!.tA/KՊk&}>s~e+`"+%A1\\"3i{Ӧ{wR
lkvѧ |Kh*wׄ
$=#2=,Ue][ݺto<޳_J]*lnvp[*n#
A2@+ScVo]da\KCR4-KahdYcmOb)T2ce(otԥ짘̂u6}Ql
>y@+-=nꭟT_#afD5Uncl1U|^U$eVm)Jl&8Bcé~Av0|piL1d2lQp{mr?ttlB)px>natsxO	iw{_kIǟkpT^b24+cT=}]N7}v	hX=C"=-	7էx4	{_~bƨ\aȼifk[\{q*yODm$[G樳RoF]
`GGd+GޚG2t=SpC{(]a%sׅ&o{G/A&_Wc߾N MyB|x<Y
ƀAHQ؛]Q;7aPK
f
    PK  5R            D   com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_zh_CN.propertiesW]o6}ϯ 
H}d؃mIXCAh[-$w/iʲzk&2uWd;Ѭ֊PH4ox ʊ3R]'H$)ˆ7bD&`-5n$E_&j
Eek@є

lxpC[3@)X[yś^25RiPMגwMZxĥ
y^7՚ CRAR3e]5lXuhV>f!nְY6LܓCv.x9Hyukg_'&ATl hPgB5Li[U6$:ЁIYCw˄G?WWWX	(kqF>ug<<gďC;8b'%|0/`Zrw8<|}#X^fC7pw>O4{5֤n8QEqOHׁęXz-5Q<G|5Fū	.Av8tقn Å
0(:RQ^3pibz'1E^;e:8Ogԏ̱f0°X[tIw78?|,N5qͱS3k|]ז`;2w*O4Z^[3TWH/%iqVL~8\;pNUG˺~ߩ/Ru]u_8Y~s|ͧf)9_1RqOȡ;X[iCAϦT~"G5Ֆ7mW;ᠢ<#H|6dtB$JEBٸLIO~J'u3;qԈ,I#my:Ӊ"
z_|˲RC;
n]ey9eAw	]+(-է ߶`p")
5
%9(fFY*cEaPb/
1V=\&âT,2}.LxE5r>Da`G~{w \ z|p/%6		ЈY^qVhQnUs3apB6AmqҬ2u̼2X͹D$7,0@爗`"n1
n൱%([6/tC)Y7e^}Yñ]?)ǯ=h}rb;=S'Ow9+<jT0zLQ[Tډ)a6H^ %զ#ܱ8W͛0+n-q?	_oОeZ/]p=aW%׫8ri`&琼 PKŮn    PK  5R            D   com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_zh_TW.propertiesWMo6WK$-A-vzP0mE-I91)S09#u5B3dZkC#,F>	$im}+$jBtlxC5S#L![VnXI1^C]
D
P2[pp}[3i@(QH,mEśN14oSѢb-<barMF@jֺ>??c6BnO-~ZnYoݺryC
efidb/S+` 
*tL)1+vi*t'@]Iwu&C
J ;p'Q~vȽ7cc?y?))wcƉ 3ǟ;\ኖ\cʹx!St)|844FYk_,"˼رNyqbc< ~s86
59cAtD6kCz>~x+9_УKeT@,%)@~i3t q
YB̊tf	1!ť4'EfеruTΎ/{١3P
%<bP4*K^˔-a)yC|QȸZ7vw'Qo1c-0B?cWZ1LK}|WrgƼwR m*)޴3OrC%Nbg;"q6aˌ|(L8(á0U|q
=&q2?Z=xbU[O9\1zpx)2x-"]{FabVddEY0NJ+-$QSJ(8VहZ꣧Hx4ȍZA-l>z}%+6qjm03^#QҜ' 6T
s\FJ~hH?X6[QwFyȗf3NEɾ
|ogQmK)Mlq=_wG|tOIƩRHF0:O[ȑ@lr$0
l2RZ2em Sl+;,*N'pLT`NÔIo`J*$w-4'+hBjLu5=3e86-}3X|
h;u1,ù탙Qdw0aC{
*G	n?7XbnUإemG
8G'^ѼMdt8شG9֧дGw0#6̴ȯxFY
PKq4n  
  PK  5R            :   com/sun/xml/messaging/saaj/soap/ver1_2/Header1_2Impl.classW	WƒA^d	Gl#0)I'/iAliF֌ N4nn%M6Mp;3z8<ͼw~߷ЉЁLY~xyȕc&%L0"p!.Jx"Z|<GOHx?)\S">-3ls<<ϋ@5.rKO}Iė%.\K%"UU_
	K&~K¸oK~CD|_$HďED@ e>xFԢ9;xү	(ۗ4tt*-KsD-M;L->{ϥu>ΤbFRvc}fBq0iC=h&<hƵԨM7'zԳ>k	A Ҝ2l=Xdi($k̎G:it^pؑxh[q2lLii=Ҹ,($,ELdƳDk&sD1̌T%n]}Ehq=zc|z
eqmKX0\[}xdPׯX尭2N)aퟎ;iTDI}e)JwI[xVlbWd`+4h8r٤Mnq3A׶J5YaMc9^KCZu'T^vVmUOygX ф:tΜBeK2~7dM˸¯Wyx{qށ6=wTT\*ڦZzk_ഀK*R%Y2428ئvcd2f0+c ޝx$jX깜JN	GNN芳x˺S9VtMoOۘ%
]Qq,W}_
, p=!&~-cIoEN;ChPTV)}\KxlQ@GeAvH4:6lҮQܐp7"ޗ'$_2yXʜczQr:}ӮtYs,PR_dѕ&'<C@k[ׂ?D,>DԤ/ Zp(ZdQF2]*+g7wNv;R:TNuDr[u4Y4L(0Z裳(3HI%%T_Ie%=yXEigMv^N-Ib-ȴ{Vۃ$K	
8?*wkUM
SBv-eGN"oRMe*(>,,ҍtM$S	4XE0Wֺ!̚?Od1-;߇^L/]_,"hQyz<e5ݿ"hPD2)#ʆGO[>X&3v#K6=[[2|I[Jr[ϕƴ-!P++;W=QiMF%;[TUڥyul*3v7= 㦑*4A55Aź+}<G@W88OO0@lggY$˳mAZ}"r͊8!r癍/|7ZL;eW3닕T>QRX9VBY0N)z^fP~SY730yG-zYxˑT
5`MTwkmsSlk`_煱fa?@oQOYmtRF()J q|hy#H`g)Jl&)|ӍO%%^خ[1ƃ m8EA"	T}M"GDGl)Z*>V3]
㆟0 #Na>U|x6@Nas:qƚa7}%\9;{S&HY38CYT!E30ь1b.1^?DD5Lc"6JyրZ-F=EY&Rc;G.>L|]s~1pj^ c4 I4$*|}aSO5Pnyh`{ip9)q}aAK?C@Yiʃ[Ti[b8/j28
>/T n1x@E+=[8{X']VOPKgs    PK  5R            8   com/sun/xml/messaging/saaj/soap/ver1_2/Body1_2Impl.classW
[~fY$&,
.
DB%&mX\fY>U[ڦ֦5F[5U3=e¦}x{̹{ιs_	I#<xVaЅJ<,Tv|=ZAc^<g9>%/W*U<qS{4}Ӈo<<g+^<{,}Zqg?`xxx!?,T+8Y_xUAiTgpƎ'`2nN#kq^#Qk&ΘDxHu!pғ᱑уV43cL2 'tS$ܷπ3TG10RD#VTOSq^ˇ{*VsCY#TW[_ʚ3TV)]A>HyVpA
ߌcdx;/oY}|ڤa3	{X!g
ꙴ7 ^)n6ء9=v-ڨ|D&N'~pn]A-q=$
wyXL+-XPk֣?'eFҎ[&]TP6A3jc:#:*cFJ~"crw}WU6'2wF~/UÚ/i'bڍ!N	\m!
H=-EGj`sr:tai
fR)Z Ji~Ƒ/.YT8琨ɻBҰ᠆_52R(A5\E\h.uhXĈ)5܍(h?rhCX鉄5gBq34AʨXpm8l
v[˞2Rñ'`	@a]pc
RY
M+M4'cV?wJҀ@T7MICO,3p@sEU,ᚆ7L E]
vNv7u8l:;Ý{84k$l	|B[~e
Nx[;xҮ@@}eMLq&H:E?r DaXC5Llg}
OTgO/nfB9DC!]sͥ5
	ŉI:'Tȧ]UI)ձi|ߢ9Jqj;j7$]ɵ9'1_즺E5YN:6xԡqz75iN'YՓָHFO]Ĵur9!=2q]GZ5-2bs咪7˅mmw%[
mJߍCԹKQ-/$
QIacO$GW0UgOd&eݯ(]IDќIhA)PPrV%؉{hp$q/>
~`D*!/
ۆr9XV!G|^Zv2<rbGX nu$r8L'iR(;޶^WA*V`z{y'>_OHMGQuCz.~9%Iޓv-A;KoYD2joYMzQ˨O(P,$a\+8*hj
$azf.Vl0V9x_V>p[iH[ֱD@nwx4eL,/09<g}RĻ4ťIҜT};Bu4o^N400iͩ*gٞ"˜I (wLS{C9OZNv	uT Ɗm?GE"#mXF몤p;/#Ǳ~W!I?Oj&#.vOҩ?E!t=9{nj.%uG
{-H/bgE_&WZ
wEw_#('N7JXK;WՂLEگ9Lwe4߭ r?&*O2M]*4׉<MZ&et/NuhCP]Q٢T"ZD2"YWn˭"PKP
ۜ    PK  5R            <   com/sun/xml/messaging/saaj/soap/ver1_2/SOAPPart1_2Impl.classVvVH%@҂ccYY!g)aKE8
ڐ,<tq8圶t,;	Ygf#? 'oa/W%/bDF;H:i1q2d| ↄI7qy[w1%bZ2R,OF?>t/D-$Hq-0F%)iE
c- 1E1d3ά7s|@ZPv%l#X$`l^\iyK`~HY侐v4:3"NQ*lpuB	o.{p Q͍l2ɚBc!g\ܟY۱%=O%
CKᅦPFbaߵ'ݲS:e~`6zh[gDdG͡	h8/EơϜZ)IF=O[3uqmZ'C?e^Z"E<ٲg:Z65YΏ){P[qMS!+x%G
̫ҡDrDR+`sdGOC+
qQVUu}2':99M[\\TU/i]BVBXP%o㸀
=j5J,0˜Ua%bYgx1z8=xZ`vz5iߠLtfiN'둂&U%

[N<J j@ Q4Dcz?G;P=^T}m&y歩Y7gdټjdCrî׶x,؜f%Զ;2xy
Xl6v6kv4THucUc(RaYti}zxcz,ԢFmE%fX@hm=G$ㇸ41cUِ58˴0|b#ơMR
hn}}uOBv>L"7'詛v]OIhIZeA	2ɐTЁ, &mVԈplNFZ1N!O	b|L9hA( qHLe+ؕK$VSX%YDWFk/bav+B
A:}AW'ZAc
=Gj*4|CUpBO(&NR(YJ9Jy:'"p	WiePTJ2j}?&kN:KVM4@{QM/'_Er/j&]d3'=G
6fHAM[M'6D	hKWp,3Ai䀣pQގPKVm${i  ~  PK  5R            @   com/sun/xml/messaging/saaj/soap/ver1_2/FaultElement1_2Impl.classVmSW~6K_XHmAA߰v\aqw7k[ot3m?7u:=f!F(a{ys^I? G0)S*:1-F4aV%\bN Dq5kQ\W膂y[CaQU|CBvdwN#lQ,XQ,˻rBr
CcgI~Wso,Z΢ƲF^=皅w\>c>MsnrIӅ6&]Ӱ%f]dC[:Zމ}QQ^n1g~D6eIRcU8?o\$@elrp~u #e^Va؉+[ԋ%˰NқJᚡC5le"Mthޝ2y|u;[qV:gP^,&
1wf)
s}mm4#|r4QMERD^1_,+vιcƝLs
xS<t
|!
hQPаLxkXe:"$9A<צqapA'xn+ki8!
!
@T,
5N[N 6,;
_,C&ebכLe85n7M4
F>
/:q#.Kq^[4|oDok1[
t?-l_&ӯgNJYᶛ
㬆spy'f
+ymnFq=gdaR\+ۑZr]&˾W R]~5<WZ+?1Wu-8~JC@+	wz<o0׭`2D͉eFd*ʳ`.k)B`:mHIzsT:^uFt(){j
dVpfaLa_LLzhF01yVPg`?8đ )^RCFA
"Hk=B6a'CX`Ec_Y-#ed}jM-	[]'x#}&0)k>FW*(TL&DMD"\GJ;QKIpj/9EiOH?dw^6h h@kcs4͓_hN=CT2ٻן&i{Z&ӎzzw="8\N^yt)&LH'EF ?
Ґ
k]Cs>CǟU8O1^<VvÈMrХ"'RaܿN꒫cL38YN+!QcR ,pR1ԝ	|e:oTӹAwzIMqNed慴N:2PK{P	  
  PK  5R            ?   com/sun/xml/messaging/saaj/soap/ver1_2/DetailEntry1_2Impl.classTmOA~=8+ Z*E!Scb&
,Ǧzw_H41~GgGشPٝ333~c'͂4
Tq_ANOM1U
lKtCwy]z
[8]C~[a|mQ2_aj:ba	-߳d)0>Cy`G{qU_7x䆕0MGxT;aH|rztϦ	׹!7f)#CߧV,!/T*DlW "p)Y46JpcRFҨ!:";n3KS4,˺RPqE42tPʑ2taf5lE#h:
QD""yޙAZ"s&.Xw(MJX:BUi2Hi7&C0E rw7(Z¦{f	v7#X'yE];[!m*a?)2^	?,By](N0f<+ "RiTfnJ!b>Go6Ě
PKxDT  0  PK  5R            F   com/sun/xml/messaging/saaj/soap/ver1_2/SOAPMessageFactory1_2Impl.classTiOQ=S갃`)eX,R!)`!/1<a3t&$~5G{3(o˹{?} $ՐK"\5I	jJ`X?RKGI<
O5<cM.3ĦuP1m_+蚼+ƘiyEӵ
o1vaaxoƎ2&)(pw+{d˥Q:"/B7C*[;|W*c锐5Eٷ\@%)uW?s=3U&nJt5ΜeEU>rY/$3t^3KЌlo!wiú:s/iڷnWLQ SN_2фf+9
d2gxq}u|2q<񩏭\.Y&P1IYpJ+4L(5*a]󂤳q[9/f/t §o~Ca\(@F4)*VjIA COtiJބOܴj/MIDX
KS3p!10^Z[fh}C(c;hՃ \
nE!ڥ/qSa~{HC!uH3dҞHUcu+ *ĒT:EBdf~!Ķ
Dsr_#+\>'ID4Z3:@%V9(r}A#ru"g>nٍ٣hFzE|iRlzv7PK    PK  5R            ?   com/sun/xml/messaging/saaj/soap/ver1_2/BodyElement1_2Impl.classTmOP~.t+	΢0e7)"113&```LnFIl;6~Dgܮ9
f{sy;u*aY@]9.
Q`H>63|*W1\[ִ-AL~iOw^FNi{Vr(>
m^1H*gߪ[t2]q
}SCy`GܿqM{V7,. 7am8ܧ.	CC3{6Ű
i4~Mk<0*}SR EH(ׯnD9d7Z(zcR(M{:"n7KS4RPpI0*2tP=Ջʑ
4afS5n#_o:0s"C-9SSC,w!.	LD6E&FBt
#LV [|+`d\4U\h	;
%؅s^a՞ݰK<v7"؛U~ RD
	?,B~](N0f"
+ ":RT*nJ!Fp;f}lPKԏ3O  0  PK  5R            ?   com/sun/xml/messaging/saaj/soap/ver1_2/SOAPFactory1_2Impl.classUkOA=Zۥjm_T@QCRHBbbefwwI?xgvMzws޹~`OF94b(Kc$q=&@%)LT
ILCCE[Hs;jw0xrC0x.un{Ix|ɦ\5=KΣDum~1V۶[2|;M/j\Mʐ5=5mJ͈GpD-4PAX'Agτ5޵
e3p0^6hXE$3/V]VkaX	M5JD/C̀NTmt)j=t2V1gxMQ#OctXسK#ٶhq{kUhVu+^}}_,We+C) U4<Ƭ'1ྺ-%;z}k&;.9	3nEc/]ܟgZ"Tam-Iҏr]zs&%0,	>sb'.ҫv7 &o?43:WpZ<Sdi$[e6[\G|
/; Ad"%!W{0N>-¸0H!gBKN'6ZZGGqs
hP\ZC\\d+BEE\<N+ʸ
&+R$GpY\%M{lXvhHk3ߧ^$aGH`1w{y)iBIE3Jщ#Rbg8
PK?tN    PK  5R            <   com/sun/xml/messaging/saaj/soap/ver1_2/Envelope1_2Impl.classWsU>6
[Ek,ZHZJA((6nH6M~"V|	>fZϹݦa37q}sq8S<;3M؊gc8y\P\VqLA!p*bc\F./bC%n&1Cgjϫx!R/+*^UPg
6]-l&&sΤ9F8q_yJeܼY*;L6Tiɲ.%*cCw3p|m^VP?f#	Q<iM4s3}*xL{SGVd}fʙ[ԗ܊#$LAߝ\P(wy/nqҬg,Lقk4F)_"q,j<qXXYQT%
A7{(x9)xMIʸ'#"80}>꺒RNҶw57vy>QhH)Ҳ֎zG
kDS0meZoN{VQjz(0\{D'0}˞4w
i8)fqy{"cy?{.쾌:uIy-nOثkn*^k؎7-
o;<顡ў.5向sh'P0Dۖiy[.ԭ3㸞n
*ꮣϟx_C
qCG
Ӆ,ǣ)+5JbT
~3zz͞]|)`H0WOpMçcDg\AW]ޙn%ϰ-j|w@E}BޔF~4Ъ7GU|K|`׻{fpPdULZCBgs}^/s%],w*ؽ[
߱	   ` gyI`%1~D:L.:boy'vUE+5yq5`wV$buBe
OrOug7-ECռ$(d3<TAXQE]+e.ԪcDj;FB>ubDAےlqH/a
mf5(T)/SN4SS'R#껏m}]/ H.	w#<DmY֧oCx ,Uk"?k>/up\Q;wuewLDa'tL@zK8C?Y3@< <Z$xV
aV.`_}s_ O^'ݽtݒd4$́v==RL3Rԯ'}>/7tBO!u+6!]$"aka[F
8dU,@Lbj\~1n"M]83`x!d74?kgrhF	9u=2,uUH')NQ6>UdȟD
Os'qHFPH	$UIݳh
ls{ptr:IΨӹXN"9T9SA:for(CC={kؔyr6\
LG#pLV_%]34ۈ''%E3@:7B6IĉX:W(ehYMK'PKP    PK  5R            ;   com/sun/xml/messaging/saaj/soap/ver1_2/Fault1_2Impl$1.classT]O`~^Qu0tm e|
H Ly7ތ]nُBzo/ە9z5{{9s/?0b%zE1Tü<,*݃¸wS`!T־r0;5U]Ф%U[0dZlh&/B{M*ո$"teH9ueXTM^͒p~9h5ag_ij$l+XM]ex=CP
خ,9ȍ=nRAYe^7R:&l:+J |SS4aU^0k'֝¡(~7v0HުE[+Ժ
hXD־*V@0.ĐL(xbMW5qa+xf:JŲ]S떹Q/FgRifD2{$*i=Iܠh-9c	$\ϒoZkgn{\n>jYk5-? F <@R.rpd)-D%vGƌe2G#ɼE	G.;)zW>,uq$袭<b	2tnWMn}Ԇ4}%!@P>uX$fDԆ|5>ʼN&id<q#aPK  '  PK  5R            9   com/sun/xml/messaging/saaj/soap/ver1_2/Fault1_2Impl.classZ	|T?eL^@@`B2lFI VF'3qfU[kkvZ[qk(HRukn_.k~sߛ7Iwss<x8#.^t?nGk{<ZeJ"+Ou~&\|]​WɄN>C8py׹i'oFi%c8[<'堋7{rf7x<8,qj8"kz8ʱ:d/.2mnZ[
-.N)s.tE.DH\Z@qpҼW;.MsD]+OOJ:y|J\/O3yϺF7FIy(]2w|"/Vy|EMZy][XIZHKik-{@I~'? _w7\M..~X؋#.'51(duA͏Dy?'dI?%=OY␋YFw]L<E/x=.~/ecL_q.GN~?fۢP|y$HL9H:[3@74EQ7REO/;C11[02f$7uz̯aٴ7HvoZH7M2`:W6GA2oI8N.ePKGTl*6yC+Wĺei[o_d!T$Y8&g陳!1@P+)O{;Yt$yGg[(pNc`$b	ڌm*'S㱋J@[}S_%)LokqP:GMu=X	!FAY-P2>P5,ndreOPYlNFvM,vM(Eβ.+,kq:7LmwCdȐi2!Z "WY=*Sm;!sD6w&ў`R2,fCra(;}f̺[wtX[9
F";;meڤ[U sBa.KW9U2d1c2mP<7J
Z-nA9CV}_
vopnyJ8!qQj;RV1wp,E^'tD8Vg/rh6˯B?n[HW^ԙsx7
qgW0ГsݘfUe!6&R];mQϨ̜<!R3!<eܨ~DQG<u;<6MW>=Bmܒnu~	[XKSV5=)Tk
ܠbf*U6KW6pE$2F
6V/5ȊU«83ZbG	C"sA24IߖFaJ?ww<|6gC\iyU>8Nys}h~ QHw&w
PjIBl%7jP<fcޥ ̫<AY>)=*"X5<-LG~,
s,?
'-]q$v?~	{&lp-鎘wg?Zg,oOu?n(8OYY4.?{k2\W}v&$ʍMuPt[(Forls=	:=:=L`ο>_guz蝷FyRcK1ޟLk&߱%t
V~
n~,6ӲAIy=A?JO<"Z:}oWӌΖ6N4'̰p߱1X*RY*3~#CqaW:ġ
'JDy~W)ӛ:q:?:Ws	#ND)R N%@554#C<k!8p"yt-dZPfSWHzcQork+5GL˅<
6oV61!Ch4+bwS(M?7\לnO7?<tA8I,`"蚋^E|iknzOet5ɯ. nSdbNB(OmӵB4NExVkeZgZ»=L5dTHGD3r^Z6AWx.1h)Q+&$xdm SM'˦^7]B_cAoL')SyrhA05!ҒZۼ1(D*q&tmͺ6[8wDVksj]|Ls)iY?+
آ;U7 T:Z]c\)P4@
S<"qR#pЖ tUυ5Ao26
Rah-=v P<.vrSȞq̷7%gX+I)^	D Zo0ٽ5Esem12ԛu+/nS[ר5\m`v6nÆ<b:6b3򶬈Q[1Q",Mim_{	][-4W1Ǟ<o#_jJbdk*S\e9m*YHWEc%{ElPLufY[~\lUIN˽ɽ8w,iwΊU+
X>pʖ]z"jy[u})W:vv
h]XZ\ִ.om[׺&[z;[ezoäζUΎ姦'f&DubM+́F׍)yFMAè)i]X2*[ne&#:GIVz6g_Q7Vun
&ƕS%航i*JׅHN%wb(ld	i+gp$
i+vf*O>8ɺh,ދ3p<ahՎB$Ϩ0Ru5ث%dzy_<TБce!gap9d6^Ihb&#ƀ
H1:SEObm]1b7t-bc
XH8Bj5mFiIPRhEE
POU6WPѩGl?#g#ƒ sFOb([KlbçR۴Cm:<6J/<,CvNe`]}\7
Df 	R|BkjHO&%<qGx(xϯ OZAUs?Q~muT>Rt9x.$7jg65k[D6vG j}
>=Jz&׃G<.Ǐ(N6cQ8{Jp#p֢8+3ə'LM5e(xR^f8iV-^-K63tt5F]Pk<5Ҧ,(Rx΢P48Oř;ms˺ؓ,5d?wM
(L¹Y)BzRx)(lB-H45ٞhf}9wB 	|Mdpо^ ǩ'XF|^5i/҃4-f~It; +ܽ~(@M?0&[44v*n4hKFk^:hYET噃oDj͆۰j
P 5ǱOvy}9M+䣫 W>Pu
~{,)zJ
iDA68,r 
v8E?UDMS-ʚX5AQfiހgm2f"\q3fT L36Y8@p+݌,_l܊w.1P{i 5k~CK: GvQ3KR '͎ra*<-LY.F
~OiWSOIM=UM$dC{yT@
yt;͡B;pIK.̽Vנ݈{)L溜A%\HcJJ-NJS<=Z&#	3/(܂ir_ߧ:'sߥ6Mh6\[L%_3Uu
xӴjτ
ҁUZn8j%w2D/N-wҺZ_ksC#X!p	Yʠ]U@u4qƟs86y	V kx!Jh})pdOun9Uf]E%!Oc^mr3P\ʌh=t^s=g
І]F!'9[:0bb4w(+\GXcgvÔ{2l|WtQ),$Q!xm57.a'e9+Upع`(HODHc	)wt0 hxpx/ ޅ Gd Phjh@
q.rmg
fYxR6[xp6(|p<(|c>T޹QЃņx?.$S	g95쐁KH5'boM#w-3-76;j(rk6B_S'P!O2F^NK5<;U^'ҩ<N*>^8aYp}:,G0,ƈk6K&`XDyepMnCb|C:2|#C CyPR;J6]=d^:D}0ڲ!le 7jtY'iF:*y	Ki>)J_Al,T9*)@4,۲e"S dJEfAHPz>,PWpb(ZcΦ"'UTg^CӸfs5ZZ롢
7ڌRjS=&դm*I	
CAR83Lbsa &;U&;Wo`ցv5bڭ(+75Vx[t++·"^.
!/ ?ùTk&4Y'&ُxVo;"|1x<_
 ϗQC|ϳ.b阞4ӯ$_~
>;4L71
3k
жH.ɶO<AcwTK^_(oiudHr!ߌu/pl?DEPI:zv6ߐ>ҹ.J  ӟ
t&	>5'si)4dź 3h\^k^GsҸfQķoGInP5K>Z}7(I^~.$ A{[t/y~v}2<Wҵfvx$uΊw;S\<"MCOUuՌЦaY`"J,xe$8&y
4 !gY{M4&&dGhp:Um^w85sv<_%5y>b5F%IҜ[к9<<c$6b?| ]ARh<z2_߇+4_?#Z̯21'_GSJJ'Be`urGW\o.1TB!4	t+-΄)Dw9V^f!33MDRޣUF-h:
VAF ccPݟ*-:,D'RIcG^cId&xBRip	^U<R^񕫾\M}FՉo4itG34
媬q]FʪZY<#9&KM*2L&g糙쌣B&ii汱SiSNe:;Sة
f1,݈@ɬy>f
M&"m$=߾	f8]bdr
/
%o*bLڕt$CյHqï鱙A*h6&j4];hI%ZUS@\6k;Ye?R6XGpYB<jK ^+'ګ\kSך)cC6]]5x5;TCܩԖx0AK< YH"5lm1jKN[j3WnY}C1qDͼޱN̈om-CfnCBv*jm4ו_&.a䟠O炙3wXVl;LvD@fgR"yVd>:[oge,=\E'ݞ{}l}FlI
у
)?PK;
"  A  PK  5R            ;   com/sun/xml/messaging/saaj/soap/ver1_2/Message1_2Impl.classU]OG=5Ǝ!
4
ښPũ
44Џdcu눾_>RKJMU;1J
qgvssϿ4Br17,q	7]G!<.jk3CA6"_׹\/i8s/kmѼa+s=I,oʆV7<90/YUn~VuʆYVmMSmK/SjAi*D~O{G,.IXe`G{Icٺ.k^sO-U}Y׶TRsfUE,ʮ8%va2\9!2,VD&CxΩnM+}>VC5LGf-ڙ5=;3!O1_lG1?"EByb0v1;ִ:%1?KFYjr;kz)rr{$r{Qm_#ݖHQQ!(\D'/nc<J]Vd({$ǇяnFMn&
K|p_a !uu
,V%vhp;v;:|kTIG-;۽^NǓw&hm8;KaTDG΋0<
fgpJQА}|z[0-ә C[t~o]~o'.hpwPI18'GB^i=uf~-J]Mvh'`?ƃwCv>bvaa\H9Brl j0F>7U%nq!N%r$v"Y܅>"D&9MZӦM:iD;q-ti'tRDAĄxFy9#I\5T.L	iR	TB*!&qeP՝:K7Щ{tgJ.y׽GlM0& I-+U^;`PgKrM2eD>>yVP|/b
l[gEZyE!y f%(}`,XUr[ѶHx
\"]m oгX5zS}BHƽ=1&4a^/Iu+3,K~PKbgX     PK  5R            A   com/sun/xml/messaging/saaj/soap/ver1_2/HeaderElement1_2Impl.classV]WW7L21Mm5|!jU
jAm:AO}vku?N a;39sUJ2-@ƬxNe.2@bk!|q,%pXcRXeMfx-hVIq<S-J;Z͢XjYYYZ4MwT6ꎺj?aY|+mp{U0h']4xں6%wKw&
`۹c,W7=cpm0ĭm
a\M34-SH;eUʣN8?eI,TID>U6obnp3&TQ$*aql>:~}$fv5^vutd<f(rw2*Q.,¯i IPSk
Xhs\ϤhW57zt~HBR+lDNkNl!ڏjo
Tޣ1'H-]!Sb!s-0ho lhΉ˳5~_6:xDx%AXra#fBOhMHDn>1\r-ET*#hѼ2z772O'11m_Tá.E.ptMp>;ۈLE\WgbjcA  }[ugCɆ@}3gbU+Iv1ڣZ5t6\`>vB,}͡~y`p9Z. ^|No_TЍ>:e[/F|ؾPH#l^< R(lK#W{X/N^z
$ 6hZ}D1vQuըU?FD^}'?Й$hbA·OVx	J
@8RĩF뜣5pP_Oh]ԁA2UÚB)bJrDS2K(Q7vf0ݶOFr0޶T i̢.YFM
$D40"g2,0ќG0&SʰF2ώaNUhUUbPK*/(0X    PK  5R            :   com/sun/xml/messaging/saaj/soap/ver1_2/Detail1_2Impl.classW[V~#Ք4Vp+)Z2u.iRӔtsۿbn:g۴5e?49|{Ͽ	`?psL̤+1A*{\\%¸)"Ø	>eD	s1%	:a]caa	谜e2+ڪ=Ribٴ
7%`ϔiY),`JW-iڊZr^a{[i<SCBi'oΘ-dL4蚵&!Ypr[陼;~gB`xir*h	hk5ŗ$B1:ZIj,g,}`:H$/B>54Ϩk܇q5Nj#5:`DH! [AjzuT@OflSrCV-}25(zcDZ>?R٣3nc	U*^WW_ԗ_tҎ8[sʮn\4yW5u2l82Qd&%(cmϕ.5h;e-Cy^e\b2TQrDxԫՒθ
P'5vV,3X-ZHB#<񥌯Dx,`l%,*>~gTR(zt"H\}̰W
)2 %΋FƷx,;8ɝl"#$s2W
3Wy-|_bIƏbg<~+>TõP3W#6;>;ʍfjBOeɾ۞օ頽m=ˆ7|Ǉ6Ҏd|{ݎΥ^:0
k%jjg )<Py:GƃfZC6)knɽRzipM촥ȟebGWԗl%ACwiEG3@SqzJiGH?NR!\(!1i
i3lN60g@=ġTU&|Yd
nXO&b)bI5{F̾^7)`dүu'{98vD/7Y$#X5#44
Q9ڵ/}+ڳ}'M9.4FQLQOrgGGsD颱 hGrc؍TlC~uq?lLuPJ*>u	|e:GZ\G3":u:~Dg匟bǓrXǛѣSw=JZ1r~f/\PKSZc  3  PK  5R            6   com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl.classZ	|T?f7$0 @ `l[$ $!yI&3qۢZj֥ŭv{WVs{eޛ$Prsv=/}oq6nnxG6=};yn?_x7_nQnU7~̓_o<؟}q ?=cyp 9!|X(G|3[
,=9-7V17>yo{;7O2ݧl217>s?G~n|1ƗyWr0y/%2ϿV5|}Y]V~d$#77/qwn?7oryw
7nܼPz`M&7Y(<eRp+"=_Tnr&q܌n&rS$n&s3Bnr3L%n~"E
x[̤_Q}-fqga?32G\EsEn+>QJenpS$=pPD"(b"bX"*b"XEWUrjXMF,(<EEnٸyʠ?YBUuP4vq
!sgScsBF0܉0U_4Ik*WZ-X-[BEc[2Uv+h/EѰ21'H p[[IHgm턱9YՁP aaə߁Ӿ!9޽Olj,p?	ptźQEc`JR=m8CEkhR2?BZaTddjD$aKG@8MZ!rX8r7:%c.[_Kv#ůN-3(HJiRtAb{H$Hze\^¬%Ou^WS/h]%v7OnڢgTí>"1ʴmZoY޼QY⹴-ՅǺ%c*Xf[M֦kbt |Bl^hzH܀kp#Ƕ?Bv@>}ؘƓ	#3	VODCRq0u5.`B@VCPdpp/a$
sޖ&ߨPlhu~=p0sKlvA8jֱuQxhab!TN·֮qkZI3 Iu:	£#ųCdr&}!+b"%P|W%\eF{m$Kc+΂aL1Ӣ :yIHٚqC=P[0L)h9>;7NC)CD*d≯텫D*4wp=+rNA8^$!kDdYZhNyF>/2ne=ɠm3aGˊ ֭	'ap%!8n$+X9;[hS֤=#Vú١sb6-·Xwb#Yfٛyj} M	ov9mhK`_t3sALs޺䅒/wST:M6
i@2Xh2~566srSpMH:2h=A`7`Ѻ/r==Z(.
=TSAi5x)t6
H-X,bAa6Q&=6,:gڕxv4, ygVrZ)%-X"ص@Fu5͈s1rԘ+a91kC06N
Dix0)4xu"ÅIZϧ_eZ9ڼo?eGdͯ)UX|>A~9R8~s7_)]Bqdu4ӣ;Dr͓(]|8A^ˊ#j	Cpp^s'Ǘv̎pi2Ɇƨn.u1.pUXuA4:860k HKNJKa\,Q?pxyAJ)Vy^c=,
rS8Q1i~fo׉d#KuHi"M
ؾKWmۂFrWJE&-UAj)xBG`
	Ðq<PKQ"U +s^@
qz{*LG WEبMQMh'zfe:Zfy9MfҼ	8f`.YX0npb;PE,\AE5uxfbZqG(N	Qċ;COUx~K,E^U-خmخ*,ȆII'B玶nA	QsQ൤1-}bCtDmdQf *ÇvzQAzܤesB[XE[b4%80Ѫ]b*TxPb*>@Oy*B(7vX߅&kX.136e&k]7Y~sU7E'CDWδ$$[F
\vAd:D.T
b#HpgB(VG(臻Kp)-@u*ٯb>S8Td8EXcxlcS˱Bv!7x2\*nf57k<cS*Qhu^l	ΤdycrnUq;b7VvS+a?=*^O{FQ
5Pxl?#1
A'&dfmXAM}q"Hapq"(<#xlH^3NR,ص8ҝPNbՔK\Npjj*z%*ը!hC
ֽH.WET>.f5xJ-]R#UAE7LpH(Τ ,aXc& F><3!p0U"tCiFt V.ѸID8@0֯4)_bFJ)+La)yhrSe;=dR׍aa>+ WQl֥֜sԏZ^.ܒ1`YNҷԤS2+>W|OI=xA/WZn4Q	w&ŌaË$bfx>7}pҳ`e?olƥ"(ȵi*$\YEٓJk.YK)(FI,ʦِcѓ7WMs>\PgK^Wympk+udIaﲌ$}el:KRSU/ܱpt늕MVV
mYJdE)&g
Dk2 qk6cXd}⨕'pIy)%i}^0kϤG?0VȀ~XA&  < a*_y:;Cp~wGQjjIo8 ԓzz8EOp8#==6ќ_C>> d%' e#& Jޤ2Ѥ2Qn@_߁'z7s5ӫqD<xr[ygda3^@қ"d!?	OѺOw%$|f<Cߧeܨ49E<=OB0;~ 	0$:;^@(I]UG1񌜏4H&T$7%Ga@ ~SWW~j\b.\C@y*Dx^4V*k L)I$q\eQ
צ9)sr#'/+4
cJqDUs>L7
w3
5~&C_п_¯>}Z9fylWM	#.NE-ɖ^l!^c͒XS>3
ow,Xs$9X_*m$.^vqz)FO_DIiaހ?NR	pe%\@*PV>Ȼ*}h*J`C&'P. fSD."

fһ9gzA3&_-HUn$f
Nl?#$#w-Oc_.e0!E2|}ܢ%jҿMÎ6<	X3İDS	&?à
ol"Ĳ;#.kfC<VJOÊ>h7+]jUf[]CVf>Vee,S
¬!Xd}Y> *xf
]뒚\>Kx!<)PLHQ"['vS\!a"A~N0߆w(m$=%y_xOQSG}ci4A'x
T)p7>wc|f3ڹ,zs[=r"|_)X/4v>G/ HdT
6B.o8=f&O&>.Íĺ,
kX*pZ^Z+t\W35hCო~9\rFV2=$ 9FL0edmאLvŽ$H))ڲhL,;;Y.?DiS{mhﴡgg(WńB.mb6z/I+M+?DN`6d*='#塚%*JUkI;
IA5)qQlp893)M$^rOĵD"(֑94.;Fpa\G$G 9"TCu{aiCM@J:ɀYĒc%-sdg81GZagNs?83w]rkECG3Ol)9o3,ёsH^,vYL,mI\
8/p-
XlVGNwR,3VGmq#J9Vk͇x#qNMJ#|G'Ue֍/Hw9Vnu/\"d.4^ls%yuqpaM>
s%DY+
jp"k,CЎNǊ5VGszG~Ңt8RfGiQQnuDY(]en@h,}2o-k끔F6u;w8b[S
tl
ta`-Q38)]b0RQvz+NtoQ3iRz'
佔)씾>*f3Ҝ|!~M"zCo=ݘ(+qe6mFZi9&rl ԯ$y<OSNL-"/2Y.	9tf|rKyپ (PmϤɫ[̼znOwڝyGvC8lGx´g3?w>[dEcLܥv^ud5]f:"JvpD؍{Fp8E68]p7Gv=CzO6=q`Z	\e#J /xlj[|4|iq&GLٵvFLAnٹFnCn@8t`SI1]6"Kjkb ΅0,7=x	oCvN!ؘTT~`0,.is4NZ2Tc'ANn~y>vdJ~q!K,b),+FP-^%iwGR*Â_k>ZB);[?X3zʧZݥ`EVHO}0Q58|r>u<.%6О Wlh	f[,ֲdm?].h3`&%ydH)x #+](Q?4+ 94=J=dHIdA{,bu
A&].4I>=$>!YU
Yt}zo nL;s n,;k ;g >"[4 w[hAwBI"@s(AX"ZNa聭%=N;*+?#k
1LEܲSAeΒ99AhEr]ުVw} |<SZFhKfA2	G
 J,"ՀlqqfKL\KP+j8 +ĵt]g~s9@5x-JȆ:i
L
IQ	1Lk̜TPPСW9scLH97{O^j#[&xE?52ѐnKt3~,*-1G[E{ֻSr _> eޯ{q hUPMP_ML|IaPKCQ\%  :I  PK  5R            2   com/sun/xml/messaging/saaj/soap/SOAPDocument.classA
@oEA4-ܵ
"O0
(38EPRBz} Bc# lx$n$f-U+<ˌYf
@uoވV˲D?
G<JNX#%SCs!E8.az[~cPKnE     PK  5R            4   com/sun/xml/messaging/saaj/soap/SOAPPartImpl$1.classS[OA=C[JEQKn
	AM*%8l'e4SFD}G]i-Нd]f~#<8бntp_2
jZUSQÚu
J5wͰ]1]i{M3e>o}ȪvrRzĐaf{b;d|;G<>1UFD0-%R'B;ݑ2eX(ZoӵD[ھGb=)<yM1:4	Do"FT>>twKUSQ,I⥐'~CCɀW
L0}]?ت#"ʦ7<ĢAXWKl/qKX2uMnI42sևQ˧k8"`' xPSuf30>[3Wt{ۭ0t0\fU驍?Ifi^\V<'ڍ`1{b/LcVј<eGRߑzKa ۈˈdQkXLڈL3W}`zǔIko`)e $-ꀲ-6fu$ PKf    PK  5R            2   com/sun/xml/messaging/saaj/soap/SOAPPartImpl.class{w`̻tZur $Knlɶ$Y>݉m)jB`z
X1`!$BhH$fI}M{3fW~ 0u.̦q57(wt#@l9Fn\ᦩ" Po,T&O^(]M7Ŋ̿CxP(ab"FxH/1q܌f"&z!P8#J1#ʼ0Er`&sSM7S4n+b"0GG#q3bj1Gss`8xa|:@MxQb~r,_5(EG,QR/qeWyUrY+=b/~"V{Eu^h'(D/ywIt%N
X-`whBLvz
l&M7an"trs
7QnbĹf7M772iܜ??澟VSE7gY|u67ps.f<ߞWss^Wq3.᫟ե\\_{vV*E\-<ZE\fvGܠpI7{q7zmvdaW]77{oj;7;y⫇j'_rowsGǸyo'=)E#~兗xӊx#~2zswx^/(j}8ECp"m#67PumU
Eg!(?Ei(9lKՖPU,jvh4У7iHP騊u-KИ߿AZgybhñHY>e@C߼fi13DU}UXF!'ZBCјDP'Qcٓ%QjQ=?i
Z-N2sI!V"GkM]rƤDZhNw=HP	L)^3aymZ }y7kzp$'kjhrҢuƃ0XlvtƻLk[NZ#7
ԔhTTr0ׇ[#16:R/]ns߲i(0-XCƋYE"D9:Zkp-
 Ϫi-Ab`(CkHC$VyzKU0n}sъ&=E)ÚȚg)EEA/vTljB!A(л}jrIt	9MXd(͍LC&H64MkQ<59ǻ4q^w\B[ډ5':𝁌,o0GQ-(R'Z"aGr0&e85'W`:&"$MpG=5Ǜ3\ٿFÝ]qe=f}li_sEd,&2]Ld#]Z)yqmIW<I!k[LBLIWΤkb\H)	)EѤ"ݻ["۷vco;hJU4y@7zh/٭!?3-&?2U ΣLc՚Ό#[ 0/n!Z=tb&ǮYc٧,iL2K72JlAcp aB35/S5@Dm:/Z}rmKI&cK M\̏tc(ј[[YkP?e<QF#-d04>LˀXKYS?MdMfHl<0$Rx0޽LkբZ]:^KbU7c	KS/Ga6kA8DӴ>дNSBuM~",N򇂭AZU^hS/xXPP'2ivv5:y5ufdtJJ.<am1'%SɐRg"rhr3Xݏri3J	rgEÇه'CA`q7Gۤ9J1	g<,,wч(:&3]9E!F[/I~)銙cVUdj0ӢyQ44䦦?S`SߣN|v٩,=̒ET[XcIA˄-KOECY8/Sx?*#R.\6uuiz|nE8`4Qְjy]$-30̙KSR(aʖwZ9dI+0JC4N|gM&]M%ͭ6aI+HHb,Gnɜ.x(lEvecNy=)2F&{Jvq>?{8ꊥunVR+SXwC#tTBIN"H,%C|:HyL<otS:r;/rXiK:9iq8cZ+HHw&'T1[EIͨ
4Z'@9 )
ڌ2I]7"ĉqeF;p$=qX'sr--!C1'f^1<eۓGZ#ђEN9áno2I2u7-:2:Lg17얐Q=Xh-QV*|	_so7"LK1|0"!Y_U|Nؓ9PVoOoGE	|w*|GPb%Ixתxެ:o
&6,R=uZ%BdgV:Gݕ]1-?=P)&b؊0W}O}LXK]|65_K$y#0^U2)u#%&qY:cΙUUviR~Ux_0c͛+7OM2jJ?9iFÑJ~M0{ l`ˑF#&-_k-~R<6cp$#EJP6Xf<C'8+dSI+yj2ݺJ/S!}N GC#T`i$S576Ta`VT )sU|UA Xԝ^Qq2V?WҟaH?D9^ROC+iXa/t7i>Oi/YJ8(P5zm5W
*&7<w.P+H-.\W\llQYt<ԖC.:!2є7dbl_".˭UQ_m=jdEC>IGZu}<\u).ϔ8rytK_&ŸNif:ѮvKD|x|F8XVq	.U]^WRUW+F3\e;[!gīsTSΕmf7_{ȱJ\Z5OUz[0b+؎A7F;m;U<*ƱK-ح#?Q8<Ttc*P]"UT<CT`x!^ŸUKg*^\ɡxWյw=77pBr#7*|p"qyM/8`wxg{	^z)k p5Tu!u[=5I,ОRN'pɜL!
3~aT],^H2@ٷpr$'q4$|(15]X/C`0F`ݸGŽG1g+|RW|uYp߳|oT|^WT|_S	WorU ?؟V&2L`lRkCv\8fW>eī0\X?T?u)ɏg
H?)?k,MII<Ig}L=T8xP):C~K#B5AuMιlD(Y*v(RvmbN8eG#oJS+w?)_ٗkʿWCzl$vl+Pߺ4佛1MGFnXc2m*p$#V1\)0K1_zWue@`3"GfԯD.团eZk(8k}=+ƔF}S
fZK2<9k,Vr\[,Uabg}8=.}c kmpm,G:c6:gIgFd"lJQY#ʘF?K;6&>k#	/5(" 䇒HDVޮ68&Cˉq	)dp'sM֓M?NJ$<3pc㢅tO9A'b%ґ^g0p~gտV?+qpPsʺeuY;}cҌ[WUcn/8[Ւc XCjU:^8v;WSQ,YUŵyHHx^%P ps-W
>Gc~g?_9 K7!*];$/@ @JGA6.;;l2NpwwBV^ջrwZ0B^/'>m#j9*(vA(
Pa61D
6+fnnn_"Jn7m=t;DstGd1uMMydK#WЍɋĠz r
z]S-P:fKXQxp=fgi"k'86t/}G?`x*CvBQL՟%{Ɩa/Č'QU|$up6(p]p>0.$\հr	,Ka)YC\aa p#'dCѓ^0 x+èmA)9j<4y^h./	4):t{iȞ<e3gUka,]U+[%q.;'0e<p
6ڻapz	7@-D2-n%[x;\wЈzzwOp.Id=\n}(Ua1hUaZ`1!><((8;DK &BE!Lpal9Pmw;$cn8<61H!Azi.f67s6$^y͹7j,+*R|N_&qtE.gF>Ҏ+B>0`	8pR5rgӵ<pR.ƙv3qYNW!g!_ d4 Y:ku#ۤo-~4t6h
GO'50g>F~|`0j,@NK@ZcϤG2׉7-	#-R0br59k(Q]DѸDѕ,4
8)XY_/Vp<BN}^.sAS9O7IQb,	=P:95y.'ױz`Yih$?x-LæDzIdrreXB=P0M7
wNJc /ZkZuuQ?N
\=HzSQBz$|e$J
u%ƗI'԰ڰ"Xu~J<J(66ֻ'dwiC~^OR׋|8D΢JH<
gJN&,MW',=D+e_9JK8r2.

wxGcL!گ^xa}lNl2aNVź0x~
F
q/Ԯ&NG[j҃p6*^.Eڕ_vuz9	hnQ6@]IEmdhx8X-ol[(q: 06Q8jh9ds8+HkNEd4\
g28WW5x\ǓW\*JeCT)ZcazY0ޑhu>0"JIkI]j0Q>bBBYlc-qXO4np_OA^IO:ʷ7k`I;;R:iI`;L2 9V(6J$
07hT#l:4@$H_4h&zšQ[C#V-	؈Mi51`sȮ_V^8Oц[MƓH2f-A@˦H4rlGB\Ra2;[W[f
sJ\e̴FvJ~7_gO8}Zc:e!>]EAڲЄ܁EU~qɀ iZLAHaqU&Vʕ/:rUr#9v#rSW:V!%@](gHIN,ax2qOc>(l,uDiFJt;s@ӶwՏP/"
CqN΃lG}=C2s`)䗜) S;_z
F
M	BgGd[sM\eйn	9δc~N_Xgb&ʈP^mOmBBJ<.xҔx:(6|bb>]N969	ANuƁr1{<2(LCgن@ ϳC^Sq.gѰnoSLMW ܙ"5ӀrpHǁr"Xz.d'\Z,dq0XQb)&Zix].ċlA<Xmx4)=Ÿ i	¥v1UUĹ2;%Ҿp.$Y8Et\.csy W9\G?s8:֑+ tb:s*#@V8\Mf;k
3z
nsH=vKךMe[@\ׇTM	:\%ץAn0+ ק&r	`l7$1tcBhl7.v=Hn18k5vFc|=p+,䛋-F[huzMMdc#.qǝ}vi\A`WfSe}zB.acN3
V2[3j!,NC'C&_qOP
i*?%~TP {YmqVޫA\ᨌYz	S^L2J`rӐn
=\^s.k Ut1g5~ak_N"B.V.i/<BvYC,F;%(7ܲ_0.W`\\yd=p3w3 AB#b/LB~':$,O
q V:4tg4+pxn/MKWax6,ށş]|"އ_%>Z]FeT}t:w=P"VYp~ѽwdXa|Tonrwj%bs2eIHz8Ȓɣei>"a_0K
cCH.)^\cq}ħ
2 p4=~[k:cr/{:d>q>bx|yWv#vwб(>1M:ď8wr;{b0s|teȞ04]y?O94i*&gUrFHi#M ٟ2>'xGgH:]:tJ3H,Sxb#uen*Q7-uM!;ܑ,vy_ 
3v*e`iL_ۉZ5]$p.G&W5jȁoE"VY67줭@Z
4;T3@Posyf|ː$><^PJ{,846PКcacclj@_2ndËޒAbo
ǖ=/~ۛO(ip/^Z].xemsG|RtV{5˽
w+^3`JOW<_ypaȲj}en/k>Տ\^nx![r]M,vdޓC8EPK{C["  [  PK  5R            .   com/sun/xml/messaging/saaj/soap/Envelope.classQN06BP!饾p	P*n&(UbGS8|b `=;;;~{yp#=.>C;Vhc8zJTY*\!}6E&Ʀ,"5`LAMa
]d6ݓ䰊T-/܇ٷ޲*X1`LR3dZ':VʉFbIv$P$)UC=UU66CԂЩM%ǉȩӥݲp6t짚Ec`hYl5h=pB	mRܨ7d[+O6vV:7PK;*  /  PK  5R            3   com/sun/xml/messaging/saaj/soap/MessageImpl$1.classNA*Vme I2fwJ|D/g+l5iHәg9w kXq<)j56mFO_~)7T-NBTՑ:øQR齷>d#OX6Moxq7.tX{qy?8d3|)Oo0D5Qg7CxSrhOhEu̛R2j"%- WcGRg2aT?tuF;fI}^OD::lmݰg+eιd0r0&lKƒecwPĨbcS1n@5/sЖf5S.\텊Z̰09sJgjǦ2כWQ$;fU̸q5o{
<
TX@3!1o	I5AO!Odmx\~0;$=ߤ1i y2>3dM{>"wg!qzԆ6fSx1s!s̥jJh[op߽)oM?2%yܧ9xH՝HImPK#cs    PK  5R            F   com/sun/xml/messaging/saaj/soap/MessageImpl$MimeMatchingIterator.classT]SU~NNBB*H(ɆXVA$E)B;,n6.?fR%8~1{N6iŞ<y=/ fq;rB񢎗0'rxYaAdp9,j(0pCn٫^Ӱ&CҍaU\Z%CzETkpW}kYaUY(坊GE-Pmw d=V)9~ z7ab+ʹ℡vm+b7R6gyw;Ui7(!9wIzo-,jYxwD}lLJ$̲&e0V}	<yRbpdf&C)֚k1Dp<p3-CB1̞IߙZ	JxC1{kk)K̛cWZPv]y\r25p3Vu
of`C1b`
x@2\qˀ%
0oF'u|X(bP&O
9sZβ
e`uTϷZ#G=]33?/8 EDB֏yjMr9	!H6<b`HS
px1R
W9i(#?@?#L]bQ<KZI!P7u0G#h#cm@ߠ%_9WHYB11J^݄gEFvjml&rMFH:A+MuVo]FsC/1¿}Et9IcI?yMݘDz~p:+[c Ug}-)&.
ߢ2>\R젒\)7𠠺d!L+w bYRaN {	T̆}xϩy*5Di$PK;  
  PK  5R            1   com/sun/xml/messaging/saaj/soap/MessageImpl.class=xTU疗y	z4:j$P*0I&0LbfBbw-
%VD	mu-ko}"޼	@O޻sO?މO}`r'WJ_':FR:_g:A?w`~c2>nroT[e~B_Vzlm+'6Z翡9K5m;'0[~w.zM{qζPm:_i GwR.z豇yNsGt''L1?Nu:?'I)Z8a63=s_hE^Wh9u:ߠǛ:s!-CuNww?tBzℕSgV/K:7*KhQk'Ͽ:?H{Nh=5u8BRgq
M$Qg:vN)0p#"UiԜ6._7zd#^DwAEOp}"WG}q~NMwMĀ1PTy.@N?hEQaNW]t5bH~.bMw
=Jt1^t1Qh/v
=Ju1Ut1162S:7t1f;YQFS4|飜0UAJ]AD4v=;D^RxXHEq1=NGC,q36283gZKS#J˩5TSK:뢞VZA U}.脷DPMԣg!BNF黕JkZ6b'PPChH,c=Ρǹ8^7:YJѤ;&]\K2z\+tqC\]j	=IFputq.~?s>|(?ōĉ7ج-ŭJq_:W߯u]6EN׻hwx>jؖ7S$?M鱌:<@{pv].b.{u.^]#OQ!cЭ"kW+_Q[5B!sڜ3*,+UʷW(
R5Ca_0gQ>gZ邲9DC
ѭ@C1V,isK*^Qlfy,L`**f,XXln8Z5te:i׍t};Mq:M:ZlN:GS,[6rڜ3+:0Wm|]ƆP0?lŭ6`xfDߔڦPkPuoB>ϷWl)8%O΀\_KAfT&#	 _8]و3"Î6\sf k(mi/8ArU`Enm'tFV
8~ί|ku#KpįȂ1uӚZa斦fK8@c8׌3p$̩Y5!Inlm0SOrJif1/_C`55˂M!?髭7Dcc3[Ss8Јb0Tr0k,G0V5>MenWyj%
˦Ι^4%6:dN}
=r߆Q _kOڀ<MTPW#++e#S9*-=u8,*[2cYyYEjCܒ=jCmCDHp R
PR;$cE~ӚĂ߲W'TkXk	зUhn	4Z#mC5n9j8װ)êن~ٽ,Vu҄ r$\;o"2H-<:0&Zޒ%4o^g-㩇hH-cZjQm[+S[D[0	
ոeN񴼓վB2(EIծubFB1%$@݌uhn?-,=COZD8+[b֣o$!(??kM-F\~ZCԢ?4!B^viR-ܴڏCAN4jEM` nl
9tYg$SmI`0D
&ِXChz7(^:ѐfTL6cى'(=Qp"v6X'2Ԋ>AHOmU+}-xנoT^1=(G=ceDd:_m8G*Z[jIJ	tbKKWNQFF
iTdʦ
jALuB~ibNd(,::.M:q'x:~8l-̗o!rmV)Bw)e/:Ã#6cRB3ǈڤ5@=9
#ihgp1nY҂s^Aڣ#uq6[D"#rYg[/+Pθi~\tUC_yN~DcH4\-F3c˘Fm{1,rBH!;L,zZm+2C0lSSm$V~%c[imX1Lr(ZNY'%%b>RrQtB!-n
P0Et%lNJ\R#ڑQ$ZMk

q*-+PQXVW/?"
",= !؄
d!6UpeZܑñLH82܈[iur
7.ݪ(!@>Ew&m#RƑĄЌ?5?|2"+Zyk}ڂoNE`Y=.ODUBf%]BPfM魔ڂ&D.3-2
HUM)1InzDG!h6V;j0(e5dnGh0<%tOLCwvXVKVXL`U̀`97kنJ	 1P㈧PcQtmVDR^t;!wv13$\V"tt+}!TC<ܸ%/ߝgC45
pEx%AGN&r['5`&0`HڢFuJ,[]R"YΎģb%99G3`'/;NMNx|h~BZ\(f(Ku=+Ό3k LESpd㠙'\^-+As:J6~t2?`&2b̺xhC<C1@TޣΏ .sJX7Pjeg(̈]Ԕl3rYHfj
x1zDGF.G̀4cZ CZŎ=:fne4J[
fQbVV
m0ع<]@7BJMڥ2F}fxϋL:9Zhlak
-1ċ|!^bCں&f&g_⯴ij;mg?Kt\1laEXBYCbqΠ(!^4_0n:*XCVCrM8Fh*ZhzY5!tMeg5ڜVASdKƈE0Hc<&OL{dMjhL')/
!$"_o.T#MZ3ci]1CGs}E}ʁTB~Bc0٠zW!9`-YcU.z|Ix"ԊfxU6g9GO
~!p/B#sꒈcUUh 8}aIL14&r6R(V]ZVS
~6_G1I!1i!0|6C4w|!)'#2daC6Ð `W))ywzzOrлQu:·FiIlQMIÇi+SV ,y[=+kAOHqq)
Vzʝ2q:Ppɽ.!sQTMkP
u-~S}uq9j>a}UZMkp/iZAJ5~ZAQڜbGA7҉XH!S
&
/OCf#s[j,Fs"#Um`T2BIv@{(1f@Q}<g%FQDbH¨羑MF&T")MEgE2&iRyJcv`w3[dcc-h5g@%FV;E<x+=iG?!ЬJsr؈5Y;4^8SL0uz®ǘ=a?c<e@[Z*zь57C8.g
5NOC"
1a1nz"Tn+2G<gksm)6x_!{sn>DY#_KyCO7 9А`!p5oAwQ)h<th>ƐCIɍ3d7d,BFkG*c)ku%A'0\hQl!snZՔ5s
9MF1jI氈$}^n*jؤ<#r4jv9F58ye	o1xzLr5LFj?(@~"K@!⯔OPh/SP7YfR1veKzQS*%1hJCTN:<M025\_8Q;\\$Y>P8<9=Qp(r](zVيd).>Tt+iMO%0R~&mY|
(P18}q=!3ΪkxcAbؽ쀈;cB
Fh\Li鐳9[|_Nu$cwS
y5HrYaJ9ǐs<=
9C.$n_-#˳/?_̤OӊM@0rUgpPRfT3RpEƌB<]VQquR)\b3sQ!Q!ϤM	o.,!r9??=(W*`2A/ÊF[a#d3"B'&X'hs9*"13t1T"#'0ɬt$	-P#㼕+n*oZo1HS9=LӫgW(ΏJxH^;jCT T
%NׅЫ4F"h쓪f,1}jud: 7E_Jw$lg$]RAcPx\glӳDlpE7-So
ٲmsu!rw"p΄],M]_2Y#n&\/K|JbXBEOF畝qj]>]]2Q~/aDU8ࣳ҅O}%t4X7nm	F-H߼Ǹ&;jvQ: h9A2IN:b$?TVM++[ 	13	uT*QpܞX8#OwA".bSK}X	8%Q%HM5fȂء22s0a1UVnLXԦT(Vc{Pw=%~̰}G:Xwzct?;!xfX)"䴣Ź!Z-b~ӠD-l.-1	8&'r]ʁI]@R6ZQ>VFטCʎ.oŢ@MkoFRV"jMP;#{8@M" f"P
"&d=ى~l:Ke劎/
E+r֯\#%NPuDTd6In9─i#՝P+#6nQɯDRIErSG;1-lVoVvE˘6¼CsLĞU	Q(nL.IS%Nޞȥ&z7"uqtVJ;Um%CޏΏPE)?CKcAM&r̋UCacL]g*ە8
2;
괦+߁ϨzYyYoܬ-BE6|ߋbt%˹-Գ3̘{i2^Zw}
^ IS/XzYz7_0kUkZ^{=`;eXB
z_6.ϭiˬ
vU?+W^t`s-#ccO{ځo#%HUui퐴2]Up6n/4| s70	
զa?G(AnTD͕) UE8ủץC0.'\7
CMgcZOeqFk"{sRm$ܤ$>
3f
 .c.DKl/({W܁{ۓtZc~W; ~yC
썙`s~iMWywBW wdUn;5NAT%{Q)r9ԚK{7z.Cw(3!O gC2ݠ0B g@F@
`<	{a)<xNc!H *Hr;]a֮8]?+[4@1wȣ0w6ARLX,@+0
^ޯ\xN7-X	oC3]~u5"j6`Wl@eO[fLF/Guj4~GJTMw";tSR{e]U|(ewG{uCAyX,,w)o+
Tc6VaePx w
QI|9Ce܎l
 c_`wc)[qR0/B1	xfB
KCeeBs!l;yrk?Ǣԏ(Ȋ|hoFBw,D\o'y\X.h7.Mz?Ծa4R kA)p7ڐw=#TZqLNJ1(|Tv!.UE^	h`Ï_FB6*Rl^J֒X3=`M!pJydov&V&{THm)Ւ	SUPH̽(DQe28D)(LY)2Td0̈́Ildm&&!wB [[i*4A&2{l3<9.p8"A @ĳ`[v:ʄ&L3sU"%'T*cp_WW;Lqt_&Tp7knF[!Kp+wyaVB1&);ɭ=|fWpjÍ.iPQur?NRRQ)m¦$7*,d05W{Uv_U-QUUÂ=z,B/vؼu̝p^V$|nE>XZJJr%iioܭ_;Դ:oN=P{	~U_nNjSczWv
Û9n XYu;p@Xh;ݐVWuo6fuЬnRՙXlVU%ɬJRXJRqHͰ՝| KrLZv}CbvNX)
)QB5vX[q}qvXWbpwmhs\Z\ߝ6T<Ki;0<K8y%{jwNNo%)mL3;5.,Ig%GH}pQIF5.&pmB<Q4whKK0ލy9_C!iTWr]hTmd[loytbYca!wn:Ҽ%wp^ӲEl
%)dC3#%i^7"uz0%t4zs0ޝ~FZBw|ntS֢X{K2s'lvgNAjCM%6&["B]9{Q]1Y\/n [1y<	.D}4yНVb!4ya[ZQA
uga5 `
9]3vlaV,]{O	f澌s
f7Ɵ߲-ЁA0GHGA{=E"Wzvml-eE	3$̞^ϰ]9=ʞ/`ˋX+{>b
Ofn
>ɇw./g}
C#_>WO
S~oe6%w}95}eAvXgbgb2K'<Y4p
*&nv=<G}G<'@<$^Ż|[P#d1)Qr
-grqr1?E.%2'>ADO)R^Jg=ևYagSi!<	4EF?+otq#rMLR)mH3^?/ٳ9~^ZkFo"U_C%GHݧp&W! O?/gb)U<אĻȻc],FN	ت\
и' id#, KpU"H<|w?]vz8`!Ap-hi~%yz$}F'{{j4f̎fW5 SA@
U}ƽC?4~<{y'S7Yk:kuO9~o^V;``t U	FS9]8c
yudzm*bc"v͢8cy섃?bmeҷCc9AWri^81ryJ瀛σ>*&vY)
	܍gذou[#Q#p}p[;NA/wT\*_8\~FC,a" $WaMiX܂cG
<;7öN\3w]&bY|~,
Sv!׃Gɳɩ1na߉Xݸ5JjSU(df3bծ"ne}po%tvv؆T&Wy]S>zj3];U}pj܄\]O#~
X	;w6	_=o F cx3򳡂"|ks:؄zawK^~!܇6a~1S|/Sd/E&7R*!>)MLJ)fCT@8R/Q$tR7oطf1'1(Cک2[
\T
=
)
J=#AFƻ)IzRX۔oh'#JnD|?+G5Y5wa%bv[uvd2<J:=t2;Y@J; (]෣%_5翁!P,2PLwB,|/oCfvhi\>{#KX+o'~ >I8ӌgƟe9;S3ΊY68&62	vm
ݦ0-9+~A|ˊ$DNm.}ĝ7P	)-D;1j/iPzd"UY~*_~[Yfz],eض|13# <L+@wi*>݁g.6T'Hw)ozĄr54$j˧SīoU?f@ҭ$1ZYeّdqRQej9JJE6tEn6qw0p)E C	nBBo"vǁVHXo~1\Φbi@	Dh	0cT	"-!Fl6XC+
\&vQ`Y`nl[FtFf
GGYG(NZIg1;m.a`A"_b1F؟L t	{>a"{A`w/g;d{
NG1
W{
{INf,KޖK3K9K˘Lmtt[!)Vp&btN(!JcmAD!喇z(]3%OuKL\jI8BS7WZinrr+3檄&	x""bP]̇LzEW,چH0%c`upL+wdտRLL[R\b)BC!T*tE-xD]B'Ceѽ0!T 
"`@tgynJo!8dd^d Ր,(0
*hBi<EFV[R-	3clnf#Qfϵ2.=*c;<ۺ#>7">/DqqSiު_D(ld*b]ivxPׂB)h@:RT!^/GHqWP&ZmLN)Rʁ/

i2rZ?[
{j/o]O"~C#~ ~P
`3Փ| t~tYpm +0>}fT؄1h'Woo,nxbJ1FfKK@,`)[Û["Y$Y[KBXu""NE	9D "GDx	m˨N^7(t,o*Żp0dƹH+Ak:*Hķsfə
:>U90fgC,7ۮBc]!q<oap:YwP=!*{m;-G	=|^`;Oº%G0nxCkCF!/DsK4Tn<Kump7ЏvkmVxqdϩE/ʗH"U"_W
0B|A8U|0Q@rH(50"\ïb;
q*0\be	Ƀ\ IVk/GRp?
0@CD`FZf[$A	X
h>Ƣ=!C࣊E@:>ft;hhcbN\'MS&C?ҀA2=	bom5?2x4'^G_ a\ ]o7cƻvIXqouij/,n:lMdh3**T,ČH
h\\m\&ԚofܲBjO$y 9*S1
s
Fwd9p
SddXe?ˁ(r(\"p,B*79vˑ/U9	>+irנ5T@7T(ƐI/Ak1f6ڭ@_>^SlQ(_	OؚU哬6|W *HʐGz
*s[߀^eUi(oQB^ǖ`A[!<\#%.ɛA)S))Gr~UfM3Ab<T~	'L(S-|{bw(d=
2|8]Iy݂3;iO9P$h/w+0Xt	Õ O>5(gS)F}yIs&D	~
rpȹҼgZzU!tk
\*0+<!n_[t`'|O{0|ˇ#D[RYId;:n3voq؂+vIU۰&)Rm0*d
jc%Sv,Ir'ՅM:Q>Skk;i'3J祋&wTr[yrY,	f|urHK25~,Yb1ʳ%G.GERd0O%2 *X!WCl
ΗAT6XV-20쐭WZxu\osy|,χ/FT"B	KX+XװBy-/cʟ*yfLnfV#oaAުXw`32TSS¯TU
94fru"8
vb&D^`l}*dX`ˑwpB:udۦx(<kqq=x:)ChtB
]7?T;-mj̵3eax[$$T@Йb\!Lұ}0u-[ˊ&C;{@PF1f{e	xy1j:|7[1s0(?uC81xahwhvlg=UmL?Uc@݃0݌ G>0E7ct<]
_|!RQaEv޶;i VɳBOIY[hO}r+ej+]ޝh;^tAANCIε%7ݠg3c}JG_M:ޭЍtDO_ TmЛV݌: w
R-9^rH"U8@s]K8 mg!W>c0N0[=8C~ gB3T%F/p}o;ð]~~I<1xF9M_4	j|uOs=8ڈfS	V_,%b
>' QL1RdL|=L^-%Wr#k9A4m%gF!oP^[vwJ&4#58Ybד(t=F.&AaT4䓡>dhn8bh.Rz;Th)ytw&	nD&)j,&1Hmnz߳Jsr@r!C
Zhp?m`6N\m,цYZ>rP+6F¥V7kV~Im2<Mf,xG
iev*|f۔GrWT"W`>l
lxJr)뽊4jeSɦ8ilDl
)MLh<osAےE}aH,4"g-!>xܺdM7woA{Ju9{4BRM\m	i1V0u
r]&C9^:Sl/rKtr_tYfTq;+@J!w+ΔGfA-oC(Y;^:ݮ5fɡpPE4F*nS"Ed>a7љD}[Yߪ^&0,ˮ<2,6r4V]c4h984Z
ʒzh0P[^- *P5@Z,ΆZ|k!haXJ;~hm#<GQ_kYPv~kn`sfh70Z(5*x\q;ϡ;%/,qe=`d{zt{ ս{2I(ih+,Fei͋lN5A*JJ('rN
1nzN9Қ
KLc5M";[ &1zl&g}sݍ,s
rQ0F1)m,ӵmA=TH۫7&kY><ɌDmь7][]gا#@	]YPbcUFrS u	K{ǟG=L
ȁ<w?C)u0B^"6bIq6_gu+PWÕh%Mƙ1nIGSW>
I3=9D_{m)m 3U2њ\lL:zDcWA7s,_V SP
T?8F1Z-lm7aXDĀ^y`S6i0DDxi^Gdjo"yʛ0E{N=u.?Aj:ڛ,U:*BdVL/Z)PHEVq%-y갗Tg_˽½`~ĸ+vçuh>G:!'1,<Os[l<QaN7i]$t}͐d7ߙE+{^ŦgD< /VeYӼQ]~Y,Q}(beYn6|?we(I=H ٨[`9c$:X"0^ZMC\@^JHᗱ@G^lW*DPKs;    PK  5R            0   com/sun/xml/messaging/saaj/soap/StaxBridge.classTkS@=,""*تi)D!R|
Lyh*NMMN2g9cFg(ǛTA?t{ٽ9{}^&ᾌ.ha( Yɴ~-^#	KRy孭fMQ5p^ͲhuW74
-Gn6A\/	ZZvYKD#(͹\},hXr5K7]	䯴}e41!sNX{uSw0̨'߱xMmWkF*ge`duSl֫b"CYȍ<uoC{Ν<nb륲y!al'6Hx0ZQW]aX56K/ѩx^a 
m:ACbj<[$_NNM^ThR̩bSv][/]FJ~fp0ѽSCzűrΪE{)i
ӚA\d=˒T3 ⹂(U1$^H;7*TD0vD-UNd%Ϣk)HKM"6amt0+2j:F4z^a6	4=B|K2 +4Fi_%Hl4qCt#D۞=N@:D>(h"0`D5	0qM3`mR/edA>@CMb~w΄8IɓC49dU}&})ey PK
:   a  PK  5R            5   com/sun/xml/messaging/saaj/soap/SOAPFactoryImpl.classWSW~nަu+҉ҴMnjYh&8/%ܒ܄
Ncs/0ul|ӹo)̷{o4Mɹ}|z7p
N8_x_
y?c~
Q0	𤂨oS
V8
s2kDw]|#Zp^|/ႌ81!&pA@!/G
^VcA?S	tBv\-#B0(	iXwl}@z\,jH>uHώi\iZr5ķ豎9	t*˛T2s9VӴH.e"CZJgO2I]ꚥH)ݴ$l	 ,qptn(n/MڰEW%F}9]Zƽp2g,#mrlFik(+RPq4zdO-cm@H`ZVPސAҗꇍIV>kj]z:8=KȉxdV <[Vq=kcD(WL}귬E%bbʤ>h-iX	EFQ
"^OgNJh&JgEV΂.$LvN
:3Y"6F"U?yE7uK3(1EF萖ON"eaC	86l6NkKTNOEKq}`EYU}ؤESU\/$쾳oSX`|26L4nЄR6<@Wrq,IVjل֌Vuk2~2xC6\a#HSB)~ˠk#j*~*aJ>eWxKb^]qC{?Otiy3}UC	m3g'G3zVN,f<Ϣ1ߑNi97L:
)P(BvT/s9?E>Mpk:ʼTE*QDIXUяd
;d3&	rs$"ZJ׻/ oqf6+42aH,^t\|v3O";37|$$nYThPe`&6Z8l0o4-VЭL׷}Jz8)p^v:˹2v%d'Nd	Oj[zyiRn&#X7^;ՈXSXIWťIxn}$-q
6l;k{M^vc?g_:-圭+_ގkwqًkl<؀۰iȜc]A}|&9vh8俆WvNa^Xr
m Hŝusl+
{֏{HcFڰln..
ܖ涼[	&lkF:31/T'2PS	[	m㸝T0vV'tK		
V&\$rJ9!))u8EJ=N]ٳ+%CifUEMbW8>HHqbH1\.ROqK16T+))'"	fK*uKF*xpی)C%Ԣ"Q+QT'pGtk
ܹZ.B鼁ZӘƧqhFi	=}fo3^A8iN3unu|Poɡ<:w+D[k(.oou,wdG|
(>;4ch(8r+ѓXxcY9s8$x/pE\R8mSD*긏&>H}3d~VԳ ̵=șhbxK\ JwahzrD!>]1OFGdeLHJQ^ˉ,`\CAq"`HCU9S
a'%fyy*L[ގ)=oNR	X+ǜPKڠO    PK  5R            5   com/sun/xml/messaging/saaj/soap/SOAPIOException.classSkSQ~ 7QZ^\%L̩L8:~Ê.ldf؇~T{ˊs󼗳
`	[ADI.d?=a%gXQu/8lpxaՇW>l2RysQP+s$ղ|Q*%4S|*r.w7lR\cke`p'-De紲S-ƾr\$K$bhn=֙f2,v
쮣MD\EAk fr[.MBeпPϣTM46a,ёcV,fyK)|7&xDضR'3tZbbWd[L7ւĄ+dU5jWQw%QcvʡY.0-^Փ׫FA}N[v7Cb!}C,Ͼa҇!Ht)A-e}HD^:Stہ[Ƥ?sosa0apaLR#{Bڷ(Ewoi`ls|N`S䙐eNCM kt
.:IB"Й38:1Lb4mvcq)u
Fs.2X
,|2MѸ;rr?mKdt~Q2|XŬ6-eЦ,LFz6sf){/z¾Dwjj/9/of~b.﨡lͱI<69h$۔43 ;-J]=;:ӄZ'tضPK35  ]  PK  5R            8   com/sun/xml/messaging/saaj/soap/MessageFactoryImpl.classXW6r&v%yɖi5&
CMNve
'i^#mꖾ>pҀO9=S,,O9?3;7'~0vy0eX1D`((2v!'z1 㚂1Ƣ14bQ,WEsUcxoxK
+/ƐK};}E;1@k1L2|C7d|[w$֬ꂚ)9nflbmG3fN2c%Pr&iPo,8kcK%ԝM,"֌F۬njgKKZzH"kTcR-?qt<Y]23F&ٶҳUu>c[j!3iCjα#ABui	ʜ;RojײA1!G#Ggp݃sL
	;s=2JOPɟ1mBres&	J~eT-%ۧl!vF˖9՜irQ=
kV\2/f=^pM>gT9X S[ey2+@ `vTҖFGq\-Z.s^mZJx|{ew(x/2+{2nv,_Uѹ*zݳ3Hז:*-ĺ(ij߅_˘WVvSy*fۧ"qPY9/	TiCXi1_O8G'$m8oڥB*:XA+fv+G9B(~'q/CH
ӂVؽ^lԯgïGq*.U
o\%Å-Irk3,[BşHنY?//	N<ѕ%i]3Ӿq-qF8MA{7ZΚ5/)a`+qϩ&MUzlwnySc%]Ǥ_{qx7?]^[vOsB?ǟ$Ü3%lC9+fh<J4tJNi*%j+{{Rq{[SrM6ϫMJrzzͱZWjWKAܦI?vi^9}0h/ڦJ}_^Twzvܫ$byDpssis<b2D'wՕ5RjS
Cx+X*o<C>ű[>e@O }λq
+&Nqk]Sj[T8$"v[lcıg/=8ڹ
5|g
'ً{xl%||hY+,:=vߥE].VҳDo,%8͞`5
*:wDcqcEE>VDՒS+Pn~
[^C=+g˯ʓ͞s@0'qƲYgtH% W	f̋)^M.R7RwpVhXĞU콷ƩHFZ"whS.Fy%=e1ÁD
^ġU<r7"֐d@%_
>vG!if\?
W(%SfFYa+哮L<.`/bSGf\/IZi#8=kǨK-#&)D&#VD>DUFf>"Kƴ|I&3njL|τgb)kh:&h}dWLF
;G(h'+KJArLut
A<e2U&ʷ6᠈nb!HƑ A2CX
$cdSjldy(]zcgslJ˩ڞ-p)LگyK|(36W }Qe3o~΃j[f.B=PrmD.2nT$Jw'_PKJA4  J  PK  5R            A   com/sun/xml/messaging/saaj/soap/MultipartDataContentHandler.classViWW~n0[
B;n5l(
lMrd&&_/+ӆr%l?0˻<.?w #w9jq50]|@mf4rc5
A<q,p|˱!Z,d\2Vw{822[Sgņ4Eҵ6k9yJ
'7Psò-w![$	'%f,[2	[4gH/a}fn$/f&mfd>/,{n5giʊ|O8+mSi0tIw!'̽G/EVHL5Stb `EN;Α9\RӂOˤK~UAHުbH>YNap|YIwerC=pss<r-t*Efԫp(jY/Vr!m2'ڌ[YyއC*aq1XdUS֨RQeS9;U0ܮ|ZڪL|l隳+àInSʷ
MR'0I#*.
=Ǫ5<S-lV((+}C:z`S8^I(r3K"S	i D	@ D 
@T0h$ڪSSHptdU/17Å\EC[rg~'"o<Q[#_D'eUC㻙UݶH_mT6cNQΥE6+mjJ&MK{(GhʒʜĮ)5Xkg	q4{vѿֿ@<gvQ3k	"}ջhCD+Oq~"-^#u~Cm<xllzF?|	o(nuEh;L
z=7W24JjIĐQ
g-tH#R]{P:.vѸ3K^v
ADcD-:mtNE'k2.P1
H:"O]x6[4oCz+\CK|.ZmEQD'h]A+TD+GBJ\ΪSÈ}:PL,`$'%L1V|w
^!"	Fqãa	7I7o 9A'HT«$q~&PKWR]    PK  5R            :   com/sun/xml/messaging/saaj/soap/SOAPDocumentFragment.classWU?67I@i)6٤,0MiK6Hu{vwf;3*`E(*<T|Ԣ4uAP">?;ٝ;?}~o`#{fLI
<Eӧp<ѳ4*:{F M""mx4yȋD~@D~D,OLU=OyȫD~F5"ERKAWD~M7qmތ`Flu[cYzzXHeyMϧ-U=Tb0;5ռsaKe9;kf߬=ϲwVذ
i:(9p}ȪYh.Rws7ȼ[ԉmYP!6-zTfe"
wԀ j2n
q`'ʥ	DJj~H]=cE5]PQ2%U2aKv[ܞRMTpKOL:6=r
$q>cMU[]_ɹ<K+
il-⍘JdK\;LI\1d֕Z*q=QKUL^4yu(Tϐ.^o.Q%s	Z	[
)H@@}Z:tl7|0Q	f#FK
3A>^Usnc"sSx]FZ.^5Щcͨ3Ր#P*lV-qڬKt1$U2"4jAق{<>sPP$rd6Gݍ1>UL_%,PyT5NB"F4sM ,_&Nm:֥@ugIѪ&,#Q2\:^ZӬT6U	96ڬ	ZtD(Y>Qk*k9W`8pfGF`pdp+b0Lk4)C,|_w]D>
c,CPb`E6iDGiB
gW{^HIHgNø׮75앞թq2x>Gf;G	1uM;,Í:4FWb_N aY-2
tfM};$c|/yMǰCb	pwHnSz[mKY؁5TP}HߏeA$z"@Ls;bt6h`?t:p F GEmO
ZJ\ۄ:Bfelx dPJ^^N*Az|	+0F[x6F0{|fk6
"`5roqݓ$
4Gl^XKaMaUs 6
BF=5'1)~)Z
!W=,и'q_oc2XP"L6HT/̄OfOfH'9CPs( %AS"#O~}Iq醏.	O"5f|{"2oic6OvLjh켮\a~A׆ggjc<~BBC+>
Nϧc/{4xLwтpl58Z#T\aTX%Y4:EĨ:2S[ޱCLxrQLZ{V
us
˫ߦғ`Pu9Tp-]l].}d; ìtEJgVZ@-B0XPEɢTe[vD@mpU~
4lg|3F|>I|8UWː9)WF	ys3pD>
!n?A3_ˮ`?N?w:
!̘":"}(⯱0Dv<ݨJkچ?<^ǫ:֧y{={f[5j^H:&J:(?<pM_R_X[9wx_n/S_PKC}[  q  PK  5R            2   com/sun/xml/messaging/saaj/soap/LazyEnvelope.classRMO@l? ?1ѓJĸo8	ŠMSүt4 qZEQ<lv{fv
 .P]tG(Bu
NN
5#>fceRE{MOSV["TNK4G!oOs(q K=$nt"nno'5&Cn	jh(9Xwc֦!0cůb7#K\9.THA(.6¹xL~Z
JnI·L<dẓ
K!UGsכdFg8'! hhPQT]'d(a+b#mv	HeM|PK|U    PK  5R            9   com/sun/xml/messaging/saaj/soap/SAAJMetaFactoryImpl.classV[V~(M! :"B!ʦaV٪\H/H.Mg۷}g禥
K9y{NNϿ	`1LKH,+hƴ9	
dMIXPЊW-Od<LFZ"KX[x#22b}$($}XS/2^Kx#{?%C37-=^L+Nu^i$CxʴMo|c+9'ΥM?/WR_ȢCVtc{g҆Kv|;oX$E]߈$O/EߛW0܋Z:d<p&}Ӷ\p1K=ЖtcsQ/T+m<ӱ~;,%Oá&B2A*|zk)!a:G<Zh#@	
aC*x'M&ʰl=o5Ps 
`%"Xc*wxl|BZ޴ve\ZGŮ.@W%=G;qɴrܥ{U[U0
[h
sF
FID	K4DaU=Z&c+59KWh(-95uӮy))H j&F`srphF-xkZF.[$|)7^|Sp&zb4Ӆ͢F!kw|	`G^(p;pxOČ#w<r e{f|}cw^څhO㘮w.N+G|aKHG^"oH6զ]~A>{R eGUV2Dv>s#4Ɇ.}teM>衰.(]O:kЮ_AnFABb؍b$:;:pr,]t}ϨD.תB
Rw
Ս1R7N uxX-pW}Ddo'!	SheQPKV*  	
  PK  5R            =   com/sun/xml/messaging/saaj/soap/ImageDataContentHandler.classWy`fg@9EJB PР=&d`/vgDk==Զhm+xl=lkVmeGfwlwz3o=~Ӌ܋+pq.Vq\E}^ENK
*np'aE惂C0n`ۼwxq wzqVb&.cq9ANN'O|ʋy8(|z>s<$
xX#^,£byL,Y/ˀ8"ǽ'<8B1O/*pF=
fm`2AzxOo#դ)^d黬`Dt+F*k$ _fMk9Ek(pJD̸!2R(!mݢL*&^3`i[83X43i]tBOC1J-#n㑨T<fƌ{T4dRA:,=]OU`jamΙUNמFPORa-3ȎD&6jtص[<VpʉhPY=AuwH
8!Nrꮔi
CaCDpcJf,B
=$ǝ{CZ"ޤvq)te%\삃$cpe2"/Ujܞ9B$*$;~-ZGL)2'D✉"Ke1+9H0 SK;D ݛE%\v7O0aQھuN31y$<RF79VkSz՗ehx4[c
#kƸ!GU񴆯
|
{=*[TP&ԯxF

ķ4\w2"w[<H|W0Ov<okH!a%Vg#vGKK/:0}zԌu;&.?~*^2H)ژOaFo3*e𥌝3e}ۥ}=fA|nPҧxIe
~W5
VP=fj
~w?$g
Z6_β3d"eh9L 	ԧqo99Kla=OX#foh+^Vpqq}Vg|V&^`(y;;ao
e

-
oaq,1݌3RiK[,/s SL<S@0I4CuΊ(Cgf!aU"Le9d):jb"y*I2ER"B)o3CaJUQ=CDW\к%w8ܳ=-$@\U2
w"O/wKƠL+1}FvniĚ]]jZ4Mê&1ΈvkG3Y.a,Ok`VSђJU=z2֬`D
*s)W-b[{Rgx^=m	ˏN0cn4J̅'>╧
ȅerS0?26ɡg(1DOLG%;Ȧ{jne7phɣ<z$!N5twnZkhNޭf-eVWHQZ7|a1n($N04dkj:b2#)}WN3FGmVCcEd;~!\{`k5b(CLs|s于_)~VW	8\S^̪{AuVkWtu(~0qM)|p:<ǺըພXi6ю
|{SU\*UI:9p#	dxB/j6m(b}|DZ#޳g1 uҗCyS:Lt1y/NDN&:Csn+!uNl#0p(3_̋">sZRpV N?
1i GM*0&[!S	mw,d<[it?ꏡu}N&ݏJk~U)'0I7MbzGՃ9,X0j &ݩ
a^cYuӨU8Q.Vϗ+ӫ˲WGHXӡ֡a<yvC܃hhtrAb iҏqog/apA1-`9g!fWb(wADȱrWz*ո<p}7E܈Wq'ٛ2"y1I{(]gх0u `l6硛9"AHi=L(rV8.F;䴯-#I"%kyU***YT/#%CD\A,dYPATt+Y,Y~8Uw:	[UġqA!lV1	3w~MtzYDo3T>AimNV`7ʛq	|)Py AaY4Rm.sGeRPK\c
  =  PK  5R            8   com/sun/xml/messaging/saaj/soap/StaxReaderBridge$1.classT[OAn)--*Rb\^ZDC-6cٲ%73?e<	6R73=o_ X($
MrLuaZ31%w'<!S|0TD1U=GLyGy2?풞].-1te_/8Umf%<D8/2
ڎE\X{ٰ
1ÇtA9]-z>vYr
_-e(-6־pw)$N{5P*BoͶbr$.PjQ["4[7W;߶&Pu
Bs
J3:R7xV,T݂xnHa ZQc?pW1*qIE}R|*襪tXH*qOT<EVE4
CqKz>kW}lmi'#YaBLe˰[m:5b"Q[c@&t_@YGIĻ*7xlE_2Wrgac*h 	9|NHZeL=MiC):iS(?^W5(Wn89p5aH/Q\'_<?i>#|rBrF5C'$G&5T]TQN(J(ou}L^;6Ij:Wgm;N+P'M!n(r\#tݨ*PKL  r  PK  5R            6   com/sun/xml/messaging/saaj/soap/StaxReaderBridge.classVmSW~nXYFPQiER`jTHƆ	~qI
'_ۙc;%1@R3=y۞7%<9Oc75|%1Rۧh_۲knhX-ml=fQ7=
0m$xU,ے+ꅊ04eL=sx,?Z7C,TC`٢j
wigTx}͘"o#y;i͵5q}PN00Ø\eʇYd@Y ;Rєc{3	_^-Tz-yM{^W&3u&oҰpdU-)vxEhRƥT1.5O^vZnElXz6L
C8&4|g`6@r|bSC#l1]Qr[z#imlxX &ʗ<;hN1LXJ0,<熱]a8xZR}s%-U
LJO`F ?Q `2p(W.l:-5<%y#3
[3m!`D;|JPWNr=`}_rUM	fwLgC<ѭB3Տq:FSV#>$_ 'htW3so2׈̽Alx~'&>I4?	
,"f4\>%VLqb&(Yt{{dSw騿BHBиD]B):1A<t_c
2y2B~A}B0\G*A|7XNG2a'3HSW2>W6䪆\\}3G2g;8w83Fp<sV1PKh7  	  PK  5R            <   com/sun/xml/messaging/saaj/soap/StaxLazySourceBridge$1.classTNA=ӖBk-~"lǂ"E hHG(v,[nKwhCLk@ؤ3=s3g?Yzp_8Ƙt"\yKk"t2kNcĐ*Vyw*z)LR`f+uGoږn>U]f5YJn3Ĳg+BfX43x1Y
UVSOp[^,)k[.B/r,Eu{_x;|
.L鷃I8[r:j*3CDW!fG.on!]\C;iw/X-!S8\vgVi/LWܖZuuf4$PC5B#*w-it5a>
OTC$Xaa*zሀ8Mi%m=LfÚkJ"⧝Nax{%nܚh+\.ͥ-:5f)LQO/KH@݀
nSyOCl6ܢ[1=bs* 2_xFB01L/[P2)uL"'Fͩ	X~(rP~b6Ec(ҘGD1kdVH)e[}"QT$]e'
BPW8rLذڽfZrøBkjWq[a
wTw}P0AUPh4z PKO    PK  5R            :   com/sun/xml/messaging/saaj/soap/StaxLazySourceBridge.classV]WW7DLF(U[VԊB-5D~:)&3}[ַZUuOm&k~>{o8e1@/udYLș+:\0K:|MW1kp]7t̠$_7ujJY
sn	kv WVg_B٫A5Wj踋f`YKf]jvCaT:%<f\pZgyo$ky/YU|GIDaZV mjޚ*̨Jٮҋxa,n)V
̀¢BGd,03r*Hw$kbQ\G4]~4eՔ{nk.7=xgՊg-ܰLD!EuE˹fmS-SкXHО*uLBW~v8jV66ZZ:֗j+#w)p{N6YO64礰2S)nV$ldGm_(㞁>k+gMPF``'E,n.KE%iЎ%
TPmk 
-74||E3o@f;jk§vTr;9<R`ml]	ŵ؟j{*y*dE]"E9z=tFqf8qj۠ݪNn}ķ>--
SQsP˯>h.-vWm2^6\ncI+=ǲ+If8Q#*)w?e
K5[Mr39ʞoQeYwX_fvݼ1`>25wHYx9K@LC4G9]lfr/ 2g垣yL%v0S/=C/v_<%V7N":qc<{ WOp4%xS31a.q8OٸO@SԍSlbЫ!!!!).ǩ1\<V#bnZQTDDȪa->G$6@#|r/͋0r1ہ'BhĴWe+/cg (>R!!h1h>pDZ9!3|zr
U)2)27kn&}Q2c+#Ȕ{OaֆP'"ܵO'0˳ZIz ̀wS
&$>%­CҾCl{؋[@ PK]NE    PK  5R            >   com/sun/xml/messaging/saaj/soap/StringDataContentHandler.classXwFiAF8YAPhCR`)A0fQ4#,ެdm4i4)6$H~9'HțXwϮ؆TlՀS9X98XQ0.6E
PpV*؟BT?QSAL
~b5 ~%槄xF}Vsx^9pN (V/e؄sb~5_
^S7m o
o)+x[#aӓyFwL+[[';$wY-m;B}Vʐt̈GҤYI=}Dϛb_%)Ӗ?213Xưm}̎l]?-=t$cdl*m|c#\nݱӫ)3׳;'m'\-1}܉xTb4-R a0z{AO;*:9m$F%l<)$,t}z@1iUTͮYi%;76X!C5kdm,=z
F
sbu,KZ=٤ М
D>ӊfs9l)C(xG27cȒ+kZ
NMr5rzCDayDk5u
'EA%[U9m/ͶyI{ϭU@l3fƈ{>k8*(=y33SkG÷ѭl5.
=
WßpQ#|k3f&ynK]嬼cdVQ؄¿h
.i+&a"kk̳ղX䡂,
Ӹ
.JYHx`
;RX.;#3*%bF&#>
>PZ9e
W0sL
.NkRsLQ/'riݤP7|)a7}ZԴr%lޢu.wTUetWs]|mEu;w_|/Yۣu"P%>(bCֻL؎A|^HZ9koRP^zDif~=34uG-zl#GWL6м .Q|,"Qı*:%tD 3O1%Je){5t&F'zpE;ftFal.	fop?B·6 .Yk/C̅9]]G8vp+PR3Hv<Y*UnRř&o^<XG<ZM%1˹YHw{
%%ZlG#
2R5ӌ8@=]yWb3|4,IBPFo
	T	e4Oby\w˯{2>]aHT	Mn!n=xw_\8٭LBN5xCUfLh+]%`T
7vj:ݗ6_)t/e150܏&fil a(c8c8Q 9ܝI<X1?"%?cnFۍj)߅CB=M }<=HG/lz0@D*C
!2_aaޯq
WpTAPaI~8O7e**IbՉYF.T8sOz4'Ŏ| D-JP\[9j)a-W%+cu).Kq_;Q$D=q$~X_~KO _6}%{b
>g%
3z9NZ\O243O9r?On3ìZV"Cn!Q5z8g[IvvU#;$֔7Yx;F6˰G|V13ؔ(㾾]?u}l3±V^j"ֹy|+U{unf#=!ʯ4wC\_Kz7l
E&0K=nXAJ36?+gЙ]-e>CzlcPKĩp  X  PK  5R            C   com/sun/xml/messaging/saaj/soap/FastInfosetDataContentHandler.classW_E=I6]BCBդ\jZbi( %ld7n x>Zz{??I=	i χݙ|͙Zq
T&bZE=VQͪxs
.D4>߀xA1+H؅1
2*Z1Ţl/EavIeUq96(
^T
(Sӓ&S%cHf
{19廖8(Иrl7lL1˶Č@(,4jx!7o|֔`N%!	<6vrI`'l2gzՒa,%='
3g ߴ35]j[4iװJᬱ츄>O̕0V[ʿiӂS;<I#[ˆo9v08ܴ9{b~L\GP֪Ŵ39)q7ՅRwm˄Y1#_NZY
=(eŵ|s8r?_i5ܠ,:Y>0PBr{n/bu6x\4g<s޶
<$j)aKԵmI 
q~tkt=YSk(`YV!DD@2/I`EC
^2^*u2'k3
︋}K˶U諚ULxS[;{-[TUwb>Ve,03TKۈld=]"LޥC|$K8^Oꌆ
%8n.N|3|
_+i%Tɯr}}xD_wt'
Gh\u<tCm٢loe5if\0P۸&)YcշīwnJ7kۭSXeg _4oqc3;=̻GR06Cq#'\#mB-u6NmCzL5Qk̶"rBb7X:~ǂ4QrGx@V5ǟKs|;#Ė[FF3/I@ޞЈ0<X~mu8܃ai%'B7[C	|~FhwM@(E}#HmDme0ZЇd@<1ُt!a!ָWnU4Dlw
-ױWq`W;8:NeR?IbC8C\:AχV$Q*{%|p()إQ
q<g `V"qڻ+$ݞ2 p
6}*ƩD@NOCԱB=$Jd1))Hiw~M^G[}
{HmO5tJݿa
jOсHG#f}ގH}+Wq` T
wQ:Bwdf*1&Ux#$"r\b];^˥!&c<)4q&2yLfgEBPIŊNEy8мHEHZN&2)G"PKҁ}    PK  5R            D   com/sun/xml/messaging/saaj/soap/dynamic/SOAPFactoryDynamicImpl.classk1ǿٻ޶ZC>y' RkA8l4knd_S*&{d&$3;<Jx ZRIGz$RwU~,{vL9ˆHd~%>9-+EyFsQDZ2vJK
::W,_0n9ߟEKȍ`Vk^BYnTOvdF(쌍kF-l͘J.pq }g鶇c_ӌ+}PeUX1:,azC'x>}n/Uڦ76i8"=2j3C+D93._0J51_ďQsO/@EV\-gۓo;"YGˌr}J%uB^
N3)B|{_W~PK%͵  @  PK  5R            K   com/sun/xml/messaging/saaj/soap/dynamic/SOAPMessageFactoryDynamicImpl.class[KAĬT7d(}ҪhGvwIOBl"3;gsw7,b(|üw*Pn4#jJA79X䩇:q[쁳ba7tn{IB<ZdsDEuu_厈6W?$7&##F3E !۽HfV4HvKwM$wov_xF>;
},a&p&_LhcEpM0mucca]&x_j@n4X=ܦHI3#`OZ80Nr@z4j5V<rtZ/_r0Di:|S/?> PKk$    PK  5R            :   com/sun/xml/messaging/saaj/soap/AttachmentPartImpl$1.classT]O@=
!(~TAY|(I8t'ݴӦ%_h(R`I3|{9w fLtࡉ!a@
c&ZH0a60i`UUxxaפ{/☗]YcΫv~w*ԚzJW-3.C0мCgbhz]mtYfȮI)Ǳ%OedXS*gύ|n`\wD@I0k.v.$ͳHEB{8$%A
j#^uy:TJb^<R+fqW\xbi`9ZƵ0"%JPD\{;5ɰ`rvug-X;Aͪ=a	KT
*&|Zbqap}m}UD<sajԒXq*Ey־%<=u.ֹ/,y"bK"ԙ~;%KyKT]ݓBپ닰yD8E-1η6,	7.Riщ.ڽFe4/`#4}UJz}^!i6FO?Ls&k#
h@>!R4i&AJfIPt˼z55y^X[c{J1RdCB3ih>FDї褞I> PKl3y    PK  5R            8   com/sun/xml/messaging/saaj/soap/AttachmentPartImpl.classZ	|T?Ld2$ @ &!H$$Ơ2Ldp2&6*VZUj&(*նVmںVO-{23wg߆{Q"*rSiv^#OsR<9.\/LyQ=RsU
j,ZT>Ee.jZO$SW8^.U.>Wܠ':.3\4u>Eyʹ]ū|,-#m9䍂f'q-U :ovl>WV:N9[t;EQN'omN.(v;r\ΗrP.b⢕\-H&/Ro`L:ra
yW:kxl\5i9{kM_z_(7rQP$OZy|#_nqw78yηh'&X	\ͷp].
%rw=f򏄑]|u}|?rpr'tN~ɇt~ɏN>q:?䧜qDgt~]OG0)eXh[p1>O/
l{@YG^[f|+V
F|Se7VTmBl.kx5^ۀ̏=/Uw#@xy_iyoD`ْ w
2ʔ[
m*He3([QĜ2GuLP)wmx6Yz<aH(C%Hmm<ڶ 6!Gkmf6fQ;ahR_ ;hӠpq
OBs:Da-HOIm`jWlEO@[H)}cLHުH{g!y,Dy
@24 7"'WG̔ 1+8(W$HӼF{<ineJKbm<$r +OH3.-Bа-Wĸ,X]ac7LI)
qbipl:9ڰ"x"!_j%thFR9DtŝY~p0'+~^L'5ևIج3nCؑ0,ul
uXaӟ6i19nBP8	l/}ms[v_ɤ[O^Num<YV,ޠyCo{g'=>/9,ζ1ԡOA{KڇG] $TÞ	E$F?|AsdT؁ts?3ꘊ)3]7U&-iд$Ac/S|[:=(o-!xBQzc~j< <pVJ2pm`ľky=ա6l MsA
Su~ZNp00VV^VঐThӉ3u.EzN0`OPjہ90^WC3-K=8/RMwtwt.t
kMߣ<~?_`nW*_sCnzS|1hί:ԆSΜ=T-X°ѭl(|7ejS iXY"E	&T2NyjP"Ϳ߁DW-.kH`4CPXR*Ky(
Yt~gESLiN7pCf,.
gׇcy#yNng*1Lm3}1:МTwK+m_&N~_.f9,.؄&_,NjT=Be*K8=ӕFBq^
|-@eSPEQ=@yP^|Ou7pT D#7_F[%]GApREp	֝o4rLd%vs> S'^O03m*i+omPeNHzD@&֙qXR-JU=|ɓ؞j2?~Go
2i?
AM,EՑ'qQ_:uS՗/|\#<ڭiXtfeqQY`ǳ00PҾqFspZֹɂS?[{3Qy]RQDCb<(HkNP-Urki#ͣM?ybKdAL`.f32$TrPF}ее6D2ݜGu-˭
ղ 6p|.`Z3i̛Dvǔ*X ,UԲRJ3hӆI;{
0QUB'}R5p$;tWVxke2MJ?xȍz*pMk8|Gznm6	KrH)`syzku%!4BAxiN@Q|HpkOcƙ4jmc=i߉OliP&륍.7vV73gN\G[S3e^dd]`k:cʘinNY"'VPfu
ʓd?AJ[ҩPjT/4%ieIW[lhgU%G %|[jYYFAzp,#Vv8B;ug
Q/?S?>-jøFϽXszO!nc)j-Ѳ	ϙ1lkovԸc~T}QX
~.5MxԫEe&]gIf-Gv1"0})g?E 8wrD" 	;Ωt)5'e`3ӦZ9bD~s|%4DH	P]
2gBI~S)-*R|-"@6,_K7RV6TZ֓ӏe
;8\Om"WτM@$vylf.(
-#@T[r7%;S2YjtF[~#8C{AeևL;ɘRݻ.u8bb5
OD{H+&\9{(^ㇸ!׹dJN)*+G6}r}GqXXnJ]Q K$i2LѠ
{Iϱ?H6wUδ+ZK)
Z@K)NetRh/t5ec<Ryz 2d*I+b! 8]=:a! ($A6@ |ȭtS:m?lϐ73䰩#@n4t}4>94 
4n<D̱ݔq4&>D<N0byr\a"b )D$@R܋jҲr-vݦ~&
õP uWf-$&Aŀ(gBK=-
 mBWfk\XQP9,(R|Dg4zN80au2uʞviJI<(a
3Q014ahȰ٨k:A6vW1&.xaw@Ƒiq嵛UVQz ,릩iLfȲX|PN&1PKp-ƅ.3R@"/*@bl\İJ 8i7YkB܄$>DE=4f%[zpuD~#ڍt@i)L6^qt.0֫(}K[a}qA_tf7"项-3T3Z(=4O DKZZ ʐ-,^Ɠ׽63eCC L11umxސ8D2~	Ť6$k3-d-Td-j\C%wSĊ<54
3c7ҫ
:(J?eCc/t!ո^KiT.(YEq*zrYl!iYor)IJTЫ&J@
l kH7cLL/*~C$;.Ev?~kz ^I.
q`y"i¾<2ӛYa`sc=ex%rQm`ڻOW$"1Ba{xz_(PbȑgI-:BNU.6˗r*B6ˑ^`ctr)ӻinJrtQ:lRtǾ*qTF/f9!g'-Tg9sCȃ'.@)+7QPwlPG`*B?_J4^K4^B~ZH)G)q<*:J
*igR>S8>3^|8D
C֘Y/K(iH+pM+}cɂgDCncQyXo&lĥu/DݷJ|a#HQ4G$ΥBΣ<*xU$Z
ηc:0Qgf%MNįaY0U~Z3̂cgj툍tSSQ*t6S,&2r4T3hLu"ϥ)<y6M94+*kd||ǐKjAd;Y	,'`Mrv3<[<im=۞*QoSq<HaK'tQv$7ͻp#]4\L_T,IXVR6Wx,rXcShAZr185!qjܴ~VbSnV?0{ME)(MQ3	9DǬ,NJ#գ\̖Z"̥皍@=	 tS\=L"A)%GTEU8Q{zpì0#9ĔUcV$۞QlIr#PmDyރ.뗢kEKc
5agC)`멄Ϣ졅&n7SmvA!}to븅N~u -4!A *v(t#aO頹&r,>G~ֱfw#F?
qPZA'갉尋&TEYZK(bMia
;3L%#hEC'VbSŦ"cWtEbnd"%^rv6y(aW>mtAm/e|l®tEbXWWs=tIkX,qkKLBrRp^ FPb5FY?_AVcR%]Ez*<fY>HmȽ;(ϣq||Z.|1"\в2+<x-]5|=7ҭ|a7a^;5;wxһ|}
 wTݼB YOSZ[:1Q߈Ƀ`ӷ"륣fH<aNfMxg޵lFgZetJ	UƇf22Kք4v~݁*P:9[ꚜ:ǯ璳Ϻ8Gɒr.kUHߘdŹհh#p4""+J n+Ifl7Lv|X<ݴ]T
Gm1"EmLQq֡zP^XHZC!Xܯ7!UEQG/">8{&Tď9'i
?k~_@)gh?MBTW曀0s` .~BWC=hv1N[L۲sM
V\oV\NES&RjQZP4.&Q9=y<HTe]Qѹf-UCٲ~J"׮KʄtY%~ZyZ3
kF#*@#e/ėOMkcdOϬod>K4!L%vT]MёN֠-8ፌf!4F1~iRD3.OV?F9,
|@01BKqS18ehL44VsPB5'-\TKS47fm0!V?p91?B:`'Q,A]5CPmr+=Е
N!!h xWm
ſi(BMBHWi蝴(l-icPGӴ	4WNEdZM5Z5iEՊU+!VJ[2ZNk3,@ў<y\kMFZk~+A1*B)kGv"s.r9"H+,t{m}8ZE̐ 4ƌJKE[hx̩?~x:͈	3&T&G兏ջ1Z⚛i\Q׻Eת7:urIs9cfm9ٵ:JV`m
N\m5M@[Ke:5`HdҟƓN[m*IfRvHTSyC7}5Q5ɼqEQ}ɣdȶq%َhEPATݴ{79w92Bd<ڍ K&Xm@+M4OL^1:.D$ԩU_,Qb!pթ_4;8JuF):]gA8xz]s|8VhEN.t]4
cN-0c)(U)})i<S,y2ctPKc  ?  PK  5R            ;   com/sun/xml/messaging/saaj/soap/XmlDataContentHandler.classWWU2a(B[ ՆD[
ZBQ#`p2N&j]v9A}"?73	z8y]~o~pсP$<C20!!E:
M(dD0-
GԐv2jaIJ8)c3\xecV)IxTF3L1<%i	!jx^NC~	ScT/Æ~9tFjsL))KWԧLmҩ_c?Dg24	oMX>3#|.+ōQnb/i\HYD.o&2F"r|'r$r&2n
%zdg}ut
WK
S3bs37!Z6&~rir|Ċ9&5ڮH~*\O9,MxzۋRz%t`y]o$L!D3\ؤSh#ík[ѭP杤"*rvaA$eg`M#>Z
l-7(^q$<î()9ET
kb6=<%CQCp%LR_N!]-)؃$pÍv,tVwBBwSHxExA\QɛX.hs@L,
x^:٬<ET(87s
w2C=/P|Gcdjuju#-j8jrCO):աU[<ҪSUD|$c+襙Pa:%0PF\$|/6Zr°)8eFJ!q)X7UgZS<0vZTre\Q|3%:Y6ՙcY!+o mL}S2"eMws|W)jZ?em'wLSW)w{
kYVđKO]fĽ(#<7r,-IX!ѣf}(-X "fv]Ւj=ѱsld:,ŇprRODJҡN,K)~{*Pb药w=anŋWݘ5Ч`:BB4ޝP&H+'h]ױoC]
DZõK+q{hI	/L2w+S8DX4NcX"]ijႋ|H7*)e'@<>Jxnw#;>?ҳIY<6jCqMc6ͣv	]#ưBF9 @O  ] "FA"(=.'m;~#"3Pq
]xq}GqgD%YrC?%ԏ/a"bWEX=
ز?m=t,quOe>ƦpG/^Z*h{XOE$ӶkqmOTѴ'n*;\@n$3&z8A;NdXLLM)4ҵI9XtE\%]^bǈ490$FܓXrG
i_0&OZ*@ONxJʢ5GcE'PK>ւ    PK  5R            B   com/sun/xml/messaging/saaj/soap/SOAPVersionMismatchException.classQN@=ë
@|E!>ЅFCb&&H >HąG-1nlsܞs6`İʰf`@Ly*	$+;-ԅ`ʳond[i@:®廦{똮(cj)M˞ٸ;oفVw+C{bٽJQ>IӑjO9M&=wՏIϜ3J[)ra,CT(6~`WQbrg"?^=H?'qiuHUPMW$%R
D.b!U65b27S 1ErPb60{$GIto3#6nKfqSdBD∅HSPKܠl  @  PK  5R            ;   com/sun/xml/messaging/saaj/soap/GifDataContentHandler.classV[wUN2ɤ-ű$m!"P R-ғdZMfd/xK_x]+Q\W`g2IZZ=dk?= p_)xeL(O*؉KtxU^CLኂïuoȸ*cVA.ŞTi:#!dBȊwKFNu):4°ot/8O9wˌ*G2|ɲ
pN2˄:CӨa
٤nOd$Q+3mϞPry)+J6<7xxicNXLG73Lgta=0;o,{b턙7vOӕ=W)hQ0}<n3?q9a_bpz<K1t>	#_w<CÄSc<_^I9
E`
R"1M"VV<a
΄c<K΢@*YRvzҲ2/ÖA0y6}b8LBBΆyQ~+PV㏳ӫ<uQnZ-Cx*R؈!s"> ؃gU<NqVхn
*zqTU`U
o-oxx34&|1^.LZ)*>*>MNm_/\冱G[ymXMOYs&cS7E n4YL\β=MDPgyjtbDH3TZٜe]gzD'Ub1hR0yƝHJ1uo<sN9:=HĨ[+wtBq)+еE%%D?5׶-C/dlCv
P"nUi{huo&?9cD^DengITvskb6fxZrFD*iKձ&M64&vӯA?!d:u/}htݡt;V QhL<|kZV=a{I*T]EH:*teՑO{@wu]=Eo3jth	WVy*ytʹ"]<k?5-YfW)!Afls/	tD:Ez%߷hfO
wlGCf{9Gd](/pk]#Awn86fwG_iJr*Az\8K.9Zq1S
Kn0f}2s/R/}w nXh`)>8I?^Dxҭq<i.2vYCB0N򆐑rUa!J	G2IP}ݿƩhZCs"ZFE[t*bvZidA9aIRɧɱ97`]%PnPWq꨿¡a(V>vN»OG
Z8PKx<    PK  5R            <   com/sun/xml/messaging/saaj/soap/JpegDataContentHandler.classWwcK~<& 
B1ؒP@BmЖ=FQF#۴ҬM6m8MӦi i+ٺM)BsFE`ڣ737~^-v#cA\  ATkA8Q7wRwR>Nա,X
# ׯшGxT1b#Al3rF
[v =A}
B]MhuLktʺ꩜n2
#-
|vuѓK΀>21;uǔI;ffJh6gEҩhfQx4k艌1zDwun{\)!5;Vvpє>a;5r_tIܢZG
aGs*ad\Ӷ(#sֶܒ~WO3=t"|
#˛4z5't	9'aowxHܺδ29Q2tiGi	p~d<2SDF(ȹ*9`pJM7. }R]tLY*_%oܲ;dVQ+L3Mea4@6=3f&s#EWS_XO%.6gMVe
BRU.viQU-JVΒx*׻+Z+H{*^I2IN<&Q^P!~$c?OU\*~7TPK+\RqWTkfΖ,ޒ-FyqΙD&nM)3%
446-
<"y *GO.l/7WfXt[9IYSn1wثK}'ǘ(Z5o}a~T2
2**hג}MsmY;fh2FZ`w4t-嫦#Δ/AJ~Kł_u7i8\\`
UXت˚)=vz!O]e~kELި-05keȹI*yCibȧSzu(7c.5HKc>3qLwl9ȧoq,Ũ踆H%YcܟS`T]٦9KδՅ<rY
5̥<Hu-˝|5z&cX4жL]{.*mPZZ$'ʽ1TKnGmP*%f֫Cys̤ۦbLkK\A-Տ&{{HG1wsn]d6>Ydg)2H
K1&0QR6WuQ؉];|)xg«+ʝkfQ-(`>ū~`TuVϢz(俊fPuonGje.c-A~*M6p9l+FnJwb=n!BFԻ*Sr i|j@u.	"FG?׃yԇD+2c4*=J̷-]ECw1?񇩡}A#ҝ%xN #tY'5cgȪN%>BٍuҞ8h;N[ww֪<Q}c\/~L%zncؽ{.IV>F4͜xaj6Kz,{8J8<t|ˣSEyǧC1jp}<r*  կaZ2̢qhf&ԔZfPCZ?D	OahfƽfӼb\Մk<6k,-EKh
<z'}3}yDb",-¾vI멋=曏R"meWH.93Zdт)fyj<Ly)(u('|zw9~֟%wL{q<wC?]{ N11~˻K̫!fRdq/.̋Bd Zol1]hO0ud578PK+  c  PK  5R            9   com/sun/xml/messaging/saaj/soap/EnvelopeFactory$1$1.classTmOP~6V; *jڂj@"!@Hwu\ڥ//?e<ma!5/>s=t^ixXB	S:t<*ⱎ'05LɌi}Nj-P5oaهmn0-;y^;b;M-d°h^?PXa&=.n7D7\|{<jwbaĜ.]N-/-i.$㧎:I#Pq6d
'8NDR]<A6RKۻJh:rVHUq
x>sGKq(!c[D~,Kf̀<g#E\	R\Kqiu˃Pgaޠ\` MܢBE*g30qqj\},ͥjG7[TTH3U*%i( ťͪuU(;F͞LǯXIyz+$VЫ3_~GrAc?aq4EaVHVJC˴>dZBk4jǉH?4z$7dy"VOmIX&+nN\}o(HP	jyk( h鯔NPKِ  a  PK  5R            7   com/sun/xml/messaging/saaj/soap/EnvelopeFactory$1.classSkOA=ӖnYWyPQ[PC	4JRCa;)C;.~#?xgR6ٹ{ܹ|
`	+.၃.2xb<q .(p1`3l*E"bȯPbi!a&C.i	)逫n}n}I@(	["xSM?4oP([<9-[XZNB/$&f[kE6źHc~}	]
c n(X0ra*pDl.!CDɦ&8Oi&5fV\]'&[8?V&uJGV`u 6|lS}/<a.d)=&CoI6u~VW8vPR#c#(5Z)FRTX=Ntӑ z)2sg`!aZ2Fh: bb6P6NdA3r0P;G~w
'n
}Mvڥ2EnERwz:O1xr	4N{)Lf>C:W~PK!A]  ,  PK  5R            5   com/sun/xml/messaging/saaj/soap/EnvelopeFactory.classXy|UNl&Ӗ	͖KɹIm)I̦4L7df&NJ r(UZLZ<	EfvI|?f;ϼ VJ
6z7jܨ <#nܤࣸY-
p.(?` wq+(
>{+|~)%B
⠐igA)Xe+S0GdqD<,ǈxLx\|pI78&RE|IƗWBq_uk2qn|CMRA82#Am0=9bzL`ݎ`}kGKsscG斎@ZhF?hEFWM#fi]n<+aޖu:	 5d3"9#f>+sb|QJWzhLfDƐ=i6uLvc'Kk&ELS6!-BAypY}Q]B땳.m@KnzjEڪ,3O"ڽյ@c2
rׅ*-.$YaCo٩G۴]DڮEb<6鲺ÌfFz$&eF{A/k'lkGHmٔIvؤb'5¦~oH¦!Vc,6	n!ShR&uBW1*	+]H^WIj#iRX{7EÝ][9pnK(:ZM+4$42)Uxq4lѸI(YiY&*`M$WUn=dm
G,!iNrPKI%ΓBcv²D
i߶q	z/^hDNItј
Y&mQA}FKR͘=8ߕxAYzB8ӃXi-'M²^X#Gi(aaeWb6-'񢊗SZ(̈́dQ		UJng_%~R	+RB#̩2~hS;^BTKYG*6*ޭOіnG?*ފVQWMO۸=IƿTM=%'2#a[U$IxIXtY.j^yfaxCYDu= ^Q_OI58%rudVڍkٽia={U2p/iߧ'vmuȼf+ܯ^jlhi'2`<$KY-&`Hi!Gr%Yl@8֣Y,[^哹-f6_vdG&_'lmNDs:Jys4qKN{x!5(6׈	߼<O|h܂8"I8'z8#8ɆpںxX Nuf^"!k$Ltuq)).=v%%	xHTꤧC:v9cζn2;	ھs=-+3:/
g,,-kLsg0zɢM=h-R%$Uq#Ŕz`7 =vY촻3`mxٛ`Ty]gv+Kr==ijrjlmfJY3S3\d
vڐDn:#?e-h0`Eכ	A
'*Ǎߵ+
G:@:ɜ28%@]{VC K0H?F;[5J}o3gHOE60[P#Vp>!1ąߊ8rٞoj~rW)>q8.Qn0GlcD@%.Su|\J*,!k.
YXzw@)?!8pܣkrPI_1uQs<kP<BEC6Z%ӢОZ5eZFk	q362%(mLx;: rhԳTN&9f!ı%-lЃs]6a*0bEPTUB``%PQg0<N}6.Rtf
w%
VP.*>F^~	e4!bPd!SW2D^\ۤ 0w !<918F0|hJmqUٖz\MԪ1Sw1GSW3F@/\Q\C
kp56~r^] |.&EׅL;ݶ%mÝ^j˲1(%k2&;%wJqq4]4ǰY: F)p2F_ʧz\cUBjO0!lE#XYŪvz{u
'=9CXwy'F|we#
Oa-+:Gq68(C?CO4>.*܇C||?Gۉ O7&rLJ){+6TNv(}edcϨq#ߊA܍G)ă>Ü=<ʙ!<ax/p"4.blX̦)bF̖5{QuVAJH[މwqneR.u.yEEH҉D.o^ys5Ϊۑ.pxe\#c	$WI̗'Q,We%ɔ2X%brFI}O1wRf<}- O·`bC06".d{]U԰^:{# {6آPKcB  &  PK  5R            ?   com/sun/xml/messaging/saaj/soap/ContextClassloaderLocal$1.classS]o0=NQ!!!jH:M%uę/u?ܸEh{|uo ^p
׳F6n:Xspm{S*rCì/x["子<1]0q=I"(ATy~ET/%xHi1Ԧ"x[F}A|ĩbXT^ȩ}C$Kg|`L:0Bm'M(Ә4a$"Hc?xb/C@HmNpEʅfƁx).Nz0JC
QAE%(8Xw+[bYqq%g;C36}bGGvctd+J'x觷
0ZJyyũ`hb6"E5y\)fr9#-<-grT<%ۄ='F~P[a(Ȗ!"sHMN?a-㲉+X5L_lPKЇ#  @  PK  5R            =   com/sun/xml/messaging/saaj/soap/ContextClassloaderLocal.classV[SFd;82	 4!6(iĔq̥
Ŏ)M[#b[$ާ:^:NϮA`swήb1a)FO3!TRQŲႊUY'bIFFņmv;
.gj.SmskKR9SY\l
Y鸬VXfd<]q|9["Yk2m`ٮL^bUn˕EΚMӝSN$+
"YJN&/.:-+6WF-VCwMU7U;mZ:W_e8?uk?qkUp&"`ysnZ 7z#(3e+۫N0e\f<'}б+\HK$Q@FGƣ	2&a
.d
3˥~#]a:D#YvQz;hZbvp(Ǟs=<<r.(Kdmϛڋhpp2hx)|a)
 E%JGKkUu4a
T\C
b9Raih}VBDDzM~`?9죣!۷Sɥ	dwi[RJy*wT=j7b)Ѿ<3os܋|LD(epmk=c/:l[hVVl*xlfy/#2N_Hpp8z\߃Jo:XF
$'@|A'҅q
.F(IgH;٣B1E"|{8]D0DԂԤvѷ!wQz^eB|pf܋V`17	mR
Vwt$0JݖARz!.$
`LTĔ {@Bb}lB.DqwӗH 
=OV6[\G~z4vq7Cv%cv@27M8Ayyz
Prj-O҈C09SHMadGvaHc|"Et!;O1!9?qnGu=RLc{J&PKR  R
  PK  5R            7   com/sun/xml/messaging/saaj/util/LocalStrings.propertiesn0~
9ljI

C@rUd*K%ۏdE{i>آ>~I2GuoW0g9"et J-#Kct- a@:`)	~7:'Wl(Z/QZ&VAj#ܮ%pQ\p	qaC$v6ZS_Ah \22/{#G8)Z1dX0ͅo8J]-tpSy2$Cr0ܚSHQc Oa(
q yǚni2T%b_,w[I'~sV~9e*G_ȧ;m8Sأ*::s=o]Ty<9{Fyox>Q(0n_w?xr'_PK^3^i    PK  5R            :   com/sun/xml/messaging/saaj/util/LocalStrings_de.propertiesOo1)FʥY@JHR*lrSeϲJ?lߛ\dp>RU31oat}8OQ]9͆,iƤ`f-%0Tم=֔ D_Ek17A=
QF]);MV?]J&$8S,ɠÝ/ 
5Rau
:jدқAiF
u8zb1/6q
7|0Z&3<`m4x#b-)L@C؎5K/9`J/%_(۬WίKîW:J

>
Ͻ}([8	cb(Lх6 9YM/m/CYg$o"
mPo:((X-<X	j|(Cro4#MB^~+a	dYd Ɵ/˾PK67W  '  PK  5R            :   com/sun/xml/messaging/saaj/util/LocalStrings_es.propertiesn1#qi%0H	 *
=pen;B;%4j*{N/-JN>q_%@W=Ip7``f-"0E*	[e"%c5Cָj!A+@&Wŝk\AJ~B,5!MLlvM2hrrxP0Ry@LBR
x<*:sr
\C*0UYeoF)2{C<|0Yl3˺3<P
k-)d(G]B"@1b]Jc!,h,۬#Jf]#K5.O)8HhHbLԆ
>.`<jhKslT˧A8M{ˉSPl$eK	2%r(q[7>_V$[?Plr}hu
/[Xɂu?7PK:6  G  PK  5R            :   com/sun/xml/messaging/saaj/util/LocalStrings_fr.propertiesA0#qi%0V .UC/^gul㐥c.]V!yf:
#Qoa249He-.,2"	Xk	
Pk\d.Ck'm+h4_׏RZ[`HwŲgZ	a)F,lBˇGedR_]	9j©Ai'췫bt_HnltkdK<g%rvH
o<s6Jm	6s@"Y"~o!s5K]>I",va+g.IOA|xtN9Yys;*'OwpdTхӫ. ]^&eMKmkج!(gnHW|2wWa<|w7ؚ߅ӯfOkwޖYPKw]  B  PK  5R            :   com/sun/xml/messaging/saaj/util/LocalStrings_it.propertiesAo1+FV
fH=@$*"";׶YR6=={o:p1RY15?}A>K"hW|z#K1)X=*kE	Beu\	_JI[FBʸAIYNG6L:9+
DYHszAᙣ|,{Wx8}?W
g+t5;/vqiwؽI30&2ZR0kr	^rt^JBx,h\n-Qfd`hx)ü>%@0ۈW
OcX{,/Y}k|6{m1PvL{4XT/!6jĹtȬKKapP"o>/V(zx=ó<?j
5_SPKT_    PK  5R            :   com/sun/xml/messaging/saaj/util/LocalStrings_ja.propertiesM0#R!i+"3$nC,c4{`ygQȃ lnJ#F(
P*F;D%ACRU4(Ԩ.}+FB-S	ܰ&P!=tabԮsTHv Ob+hFYFp)y!G@̐SiL׫/U1\C̫%lUa)'8	TXWhV4Ym|j*KڂZ]&j
IPkVKKT(HV[:qVx'-S.Zیq#Műqzllyl'0,q2u1,1wYInn͞d2g*Ga`33;Y-2rV%S:OWQa:eΙMgnԴ(8
[sbe2q[9|F?XFF虿RC*}?
PKJC    PK  5R            :   com/sun/xml/messaging/saaj/util/LocalStrings_ko.propertiesn0EiXd]HH "lj,E;D	YX yܙ9|] ɨuE~d.!e)FATP΂TCCu,hXjƈ/Rz?`( jBuڍ}P.DldP)z=(=]bHbv	Vh@(unXO1sNM3ZqS!aU&)4k(d6-E[ĒDa@Z p`N&hhH|i?
6ŋddI-qmq+1IA|{1UisP0ȳ,E6%3+*^{ņӶQJKwJu.tXeCd4$tX?2<<SX	AKVlsLAWCzΒuy^M7~k,y5=CmCz5}G3M9[wO,?PKCWM#    PK  5R            =   com/sun/xml/messaging/saaj/util/LocalStrings_pt_BR.propertiesA0#qi%va828Cֱݱ˿8U%g<YWu7-'>1*C8nH!1е`
{*'zk\hDIJߣ6֖ĩG	vB\zF,,"+yqZ AT觃p餓;)j14}O(|?[K);M<?l3Rl(	XK
8j
 Qm(Ҧ+<J̲%]1SIn鰞mVȒyNϊ|
K엶(c{ޅ}d@I,J*ΝGm$j-OT*bB $N'Њ8`k"L:m[IM}*'5 BtE	,P\;.bdB]4~ PK͑  H  PK  5R            =   com/sun/xml/messaging/saaj/util/LocalStrings_zh_CN.properties͓0<HRBlDJM95pK0MyU{kggy#XeXx'C1,dhxWMi
^[4>dm2
#V7"ύ4kUk~p`2BzޝeWÁ-j]E#-vCWv5dEXAȥZ>VR`Gpjhx5䖜ktz:|JSUJ쬙bNeo'[L+ɽD&DUCszfGxB-pIDGm% pxY.;kE^$IThM[s,f$~M}䚘"w >D
`n֢h/(l=RʖI?2a]ra>ie
KQYdY!b.Y'XzWeY\e9'U4fn섑*N&yN~If7Evit~"[(oDWE!W?w{B<PK    PK  5R            =   com/sun/xml/messaging/saaj/util/LocalStrings_zh_TW.propertiesSM0Wĥ cR!	VT8p:C6đ;Rjo2Joޛ䌜?+Q7f/I1"Jh`h3].cjTG\gD|WV`4D¹<;1(Z"TH_h
]BQV(2!;X	5.7S#xbjtrJUOSI>3zU;97f]l'%&^bSLI޲AӞcYQAq\zTF
/awNJR5!K~Z*Ա^6ve+nH
q^D!*u|A}An
͹߰ץh)1᣸-2AdHu~#g$K[
)g%s%TJrtnEZ&JNL\Ta7<%-$&T"$4[5&oF?p^k4:j>C\x?87PK}    PK  5R            4   com/sun/xml/messaging/saaj/util/FinalArrayList.classR[KQ5VvGSp
%E1
z;n9^"VOB~T4f̜fop>>N2dp"HCi2:Z 
CqG}LF55.%'CΓT)k(/#ta:B*ʲDSG\k0`ex.tOF]oLDKK?Ya˔RauLk_&;׋$Yk/g5!ԛ?~ׂ.#k(4.YFh7t")W{aLWX"ȑ8~{go',\B`<#<A'O.e!ʇ)W9.b9pqF/PKZ꠨  ~  PK  5R            >   com/sun/xml/messaging/saaj/util/NamespaceContextIterator.classU]Sg~6d!Y
hZb"jG{	kXl1xU7:#83՛LQ;msv$b&}<缻 ×x=v )愘bĜL9Eg4(R8'\E3ᒘbh*;亘㸆dLGу9
2
t!ˎ֩IޛNr9 b8m͖e#gΉ)c)3q(Id~\VkD1ԬQ^cK]4SEK
){)+oNr}Θ͚n`ؖEՙTR>&rfhd|&Q4DɱnE#mNx:%6mPzUc.Q"4Q;QviNlWһ,%#5H6ŝ|fT%换`mKl삙vHEPNMx5jeLCfTdcyBW0u cP&v/H谰7r:(؅:bbT5:t,m,o\tg:F$⇘P
U*'fO.E*hf͌eʣ:s|-\3V¶
R/*w2vAõFTMWu{
ꉴqZk٠7.Sh	,/+.77qJ2愗C.̴
>6}:xλb6}{>O{p6gBȾtǘ?q<^Ù %" &(FWA{H quhzȭңC^~w>	cōϏ>AcŻGEzeШ*O`x}?#G?ÈWpKqoU sX.xpEʋ߄RХ'Umav|P}Ir8РH_H/B̿Oh<Ҋ(I%s|qC#
? %Le ѬPkZ!60T-#|RRoW^H=lhܚʗvEL{9 rL<$(.sv>_tė8opd)Ө[a[U"Q1!aݏ0WnG-$M{M]8⢞gȺw*J3@n
A'*PrxaU,e#3DJGP$<pPxS9s:WeuGd7jv?xY]\tC+󬒅&~'{IhM\<ѿPKVs  
  PK  5R            :   com/sun/xml/messaging/saaj/util/XMLDeclarationParser.classWItS'a(a1I0-<϶@{`2MMb&$!u4
Nbۤ9.n7trWe@Ӆw?I 6 6c(8ri9 4bD<
btRἆ'IOigu\b	.xNeHx!H/xI_+rxUkr>ď7%9)qWt%CHͷ@p踕Nd'3f,eb\CǇG^3qQl9d&j41mt(H	qۿ>$IU:z7kf{X7Zvٛdę:dI}`MdbH:bCL)؈LŎta&3<trwU2XmQH.#EJ>kW&w9L
MY4Seq˹I@=e;.mqRkٓ.ki5e
yNVwF`q5,Y&P~	Y,;s9eaNMǵJuΊje
V:yN$RypdF섵;)
:i@:
l͕@`4L5&3?;_Ci>fnc:&>.#i1)>cf5&iktJV_$1|H՟ӌ&<^:tfHm^X1]F;ZΤ0H2}%@H/2l[	Rm|=7s.nyEAǕI
t*'I?r2dcͳYn-0bq^w@}4~m7Psj5v 5;|aKvvƎǣKb;iU<lv$R4츶vXʲ9*$2ősxJs[m
0V/*/higClڣysc:)|k99|ѣ;ؤnuYh<[U;rH]pm~J`w\(V:&('+Kj*QT9,C"6gQ	<HT3QͭJKPy5s'vzἬnNLSW?o]o
:J&u
D#X]<Yn|P:'/>gD	PfBތE/{n/{(]@ѤŻmZ4}4"yUկd<|#[~	xk,Jo\?ł=K&
+
_\\Ґv?ސ/:ֵ$T2,GQ)+/ӒeQEua?!}fb4_*ek \Uȣ`(#d(
^˫3\Jsu4xAN+#`ƍ1h:Ti5bukƱF	N.ˢX$Q-hG% _~lvp$Æ	k	.Fl"nGiwc8E;xe$y'E?f0?$SR;/ƿa?8#e8'Vqр'E30..KxN:W b1c"X}#F֋&qq7MbKqaH0tF*X,d3.2Qf-(IgBF@C\Y$Ң
,7(("p5bkk`N=(};MKd6B/8/0/#9d/zi%tG*?,dNLa_n8VsZU$!?o}^Bs2װ:jMOF"ἭnTbo|Ԩ r$0LڈfEMmZ݀A$Ofب^k2	<*P|C*6T,ilP	
c'yI'q7UxQr[|ExDF$pL}Yx4ޢSJ/PK[     PK  5R            =   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter$1$1.classT[OAW.@EEЊ +
"JJ0!iR<
.nw-o&\Mv6;333 99$PP0iiRhCSn㘍NwbMG7Cm5[59U{Ȑf
6._nse	g+\n74ei톩5\ηgV!B
<%2ebGn*Cdɢar)W|Z[f;gDư؛xe[~?xo
jw
{GgB(b,
|:Hlg;2)!
[όDPV-ݴ]BWT㞊U$1"I_c0qlWZz}
aym]4=öT*Ltմe3!Qsbs͞qhܛ# a']tLmR)]V7JO)jVU>X~z!Y{ 
`%2.="mڃQ\Oxۤ?|B$a2&_>	rCGOmQNu,G$!~Hb"ľ$"60^>dJma$-'0d,#FtT;uRZ Ԃң$ot
Dpݏ?ODJh)PK~q%    PK  5R            ;   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter$1.classmoPLQԩ8:S%`B"奻biI[KEM ~(=i{=~		&
sez@K!jݶ[	!^aaa8=g=yc㼫|=&
$sM_xaڦ\E(bUg_0d-vpE\1)ceL,BBtɢ
uaYkt'[ M%F񴊲91$xj07Uf"Swd}SMg)S?͊|ja9A+xb
U
T\A^SBPuPﶻ
R5@
:/l-G*fOX6*y^ilѴ1p]a5Kð8e97w_gja,8P+D-: tPe茈ѓFY6H_JG|Q5`[ȑ<.$in1kkJ-C,'x)^zK*]8ͫ-y7856K#('Y3rAps$H芏> PKuj.X    PK  5R            I   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter$DeferredElement.classWklWgwvv6!:vyP!΋#ݤNKx=^O2;k&n*Ż%Q$u\J5AB BTrdvY?瞙{w{^w]|.HƄdL*!C7gX3e䣰P)<m+*hD18<$ad)VW#,嵟><1ohb+/x\A_	OxJn'di15+vmfjy]@hp~m4ٚk,GSt
3o8.9Ks64
F}ۇLqt
d_8E+373h9bq4tij3az&m}s-S{fͥ*M5ޯZ}eB'
䨆~1L#8?/AmGL=[U9{ϑk))	̞Ц|
4=$ynk'&1JO]8$Ejf	L,xu
TfxUu4)X FW^JLε ~[pdfxZ3`\0>*C3q$NQlRH ܇&)pKlگBG
K	\/T>=:sP;Uاb2e}49+Z֛jV*1=ea"b;*&pZ%	u`Y;зJ#SM|[N 3w15^,T|U<T|e:S1.>^rZ)TL3{Z)@9tsZJWb9Cc,j[їS 5`/)%6>]L/L庩_zoQ9QϤ~LФa޺l)-ۜvWvޑUZ::"'5gP3-ohyZPS~x;؆SLڅs|#{Sk6RCߴHܜHxvoLrZ0=^
GHa*lNAJ/ 4:ˈ:mOLC<x
)I<ҜZW8O%]/#ZFSxRZ#Ƈ+Ge^ԵbIeK2rCN"L?&?AxlB>NQOjNT9Ѿ>m>KHEOEWQ
#&3&Ѯ9GRcHװSc*avcHWwOyO^D%ǣHw_A,ZOOOkx-)-b5zeҮr@iG@i=J
4i!L+pVOA]&2x]H{<n00ؕص
':6oʋx\ z{h'ehn
,R)tGv[X⃯~e}:F)<\J%:: S[ğ3_#oxL`Nſ7
p7h%ܻH;dc# m[|z/LnV q$e֫ʶw8{#+lW(mYC?'-53AzeiEEܴ@)f+@RP$
Rz$5Tn
+V>^D4E'+ 2s!q<.!4Q8wMc/PKXD    PK  5R            N   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter$NamespaceDeclaration.classQMK1}nmm9MJt5eV<?%NVEDB2o&3^2o/ vT@Syǌ9{#oՀC;;=ߋ@^E{Jdaum4{4~D7PZ64J"FY3&w*fj~ F$*ҤDkiBǒNAq_A/TX.'*q"EnQ4+ZQHY՟5[e>XcEPvW	Cf~8PgiV1MΣ@v5edȖO`!ǴԧB,uwPt1AGRdiX,Cv5RBPK5ZCo    PK  5R            N   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter$AttributeDeclaration.classRMo1}v6nmCS>RJ >
Q9YV^o#CāBJy̛;G"ŕj0RHqsԱ^0lfT
#Tv!rYN3d*9$CTD[2|#H7Fڪf>Qt
Gp?s&y0izJ#+k;0E\ԍ_-TVRD1r&W+d tc
;9VL,-K
CNfas-IJ;W0apgp	`DDR%_ow|}^`q!ōM\"JXdA,iE$+\a;>V~PK!0    PK  5R            9   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter.classY	|}~^Yde"6%!$Y1GbSl!@HB 鹮ڮm^ɎҮ[ICXCmdzl-c[Ҧ~>ɒM~?Og "609<>Ї>cA>%7.i_/ǽ8$ߟ/[.S>Є?7BWgK|JWi/zY9<y9|A<E)ϗr9VWduy>=~S|ˋoKq#V_x<Wv{C9Hzc\.?h"⩤6LD$ճNDfl:->إ3=6gdNMEm'""ss~?>=LjCG\"(iGDR3wy>+bd<ʬKHD>'Mu#xNl(Q#Sz"SI^JGy#1=CR3r}{<ܵ>LZéiI}"?{LLE%tS*Id\tfx(Kf󙸀od.QI~Z9dXս=Q+NK(L`U]!MHͥ	l*s-Õn;LYU,/3=
EOMrNg>u݂ȓJ(:#,DAU`JEFu4R|vWG\"		]y0Oc0	qN&1Og4>5L,>QOeOo	E8IE饔aћGUCף˒BRŖ#}]אjjb#\<w~%]@sJd[bƲSiᘕѬ]*ge%1
dYI*:aF
,6r6[PUIۙ͒vAc֭vH UZ,c'hnMqˉUdRvLMV`2wJQ#N򙨾;.S$'/jh؇	
q@`P4LbJ'Tq;qP5<$5?r%i
YIƷBTXel]'>E8D&ܒcr"/j4L+8	Մ&r/4MԉzMD&V&VFM5̖PF>¼k%M͚hѦvɺC:7h`ۑL:؝HNuf:"3e
OhHJft*+jsY\:MSԙxĥ|Y:xfM\1<'吤	"!Qgf{Gu*[+2Hӑ`fZfv@d&i%pCxף:yqO|$-i}7[*S=n// ђWCn'ϩLlTF8KLpKEcWR kZC.A<?TF-5YW_˻еK۠.JwRemIdlx&2s.L,+4cרpYR45858qTVTNekT}/&TrEM_k6qYg
%;	xSݍܨ`&9ðGS3$:9LD*u2CTBP݃#lMmKT'PvTLLڟ#	:Qn<|RO:&6a]=|?xF=*WfP@Kh"W"B>ꋨq59n$6ʼ؁_jAeEPcBT HE ϧ<U\mV5jEZ3ݲU3ռ엗ᙇ.	I)&)jsMjW;Eʷ<ꕮ~Mث86	ūI:i㚤

}~xxצEBѕ"\
I8{ZgkS;Gpo0У&+By4ȽV\ƐNc*{h:^+%JԐY	a
Ղ(jl& UJXLଅDLxjdnv,Ft~P )-N!M
YozU$U(Tonn`K~/2
KZjC&pGi]ERΛ_Χ&WK>
_O])zi!|@$l&K9;FޱB<y5C
{l	u+pOo!:tsrŵe;2	2^O^opkvQ!Qʱaq^E\~gq`C#eVG`ͨb}_46-Ud
%QR}Ц<%
d(C˓x2$o/cXS"sCR&;<ֶUi+9{"WIsYESH`g{ΡK"; r[O4(VOƂM[(X5,^ >j&D,YlRiȥfʇU5U :mEh=AtDEnQj4_1+nf(-VyOxTM6Z	V/ڦ*))!H;mXaebbi~g؋\aY6GmFuٓ4ff+DMf籚DIL8Qe`'5]W
Ug+cRot7۱MSlpȪk\%h.)52gҟeN=(d߄)df+7؂dMA+Gh)QHQv|]t(ݶ(xUT˱=I(tЄr||au*
wْtc2;aR|"}66e؂1qd9~
6֘RhR~l@%~HETAѷ-ۗ/?^xN>Pzy'z֬F>nzl^K-5O7C݄LxV[PZy3v7*)vNeHavåJfU0	N.j57d'RJ'ZDѰI_kJ*	wzື6dA+QԵyf=eO<q[TiR#0PM&~](_J

b
vո]4aT4+evRR#KߘyX?GRuᬊ|ֳy,pԃ@=TMOՅ_p`-Lyۼir6u+x~JOtcC{ai3koY{3JWTb_Rfx\bknb罌G0p*=o4?s&&@px|qbQ'v8l3!} ג-fkOoy4K>HV3d
TF(%"!<|4-5W˃Mh{q&bpA1>1"v#f{`}tȷ(NGoR5v<j>5*tnP1>_1N PK>H  %  PK  5R            =   com/sun/xml/messaging/saaj/util/stax/SaajStaxReaderEx$1.classmOP+uLp(Ɔt<y80!ɥή%-cie<ı%5k9=wN9 $	14
#(b.Ҽ
]EICB^İR1jZzSxv]8o4-ݓWI/xM;2!6L۔m&F+-p_#,c!w@ mm׶mq
?@O1ZrӚn]|OnqBTKyoVjIbk2t,Aawpt\BŹ[V
a"5Y56+T<bPLFd+6*[aDKc۱hIS)oRT]C<5vdK:؆x湐NMŢF㹤!
5`UŚud5aY[ɐ[G
aH<C?j4Pg-2P[.
%
bJ%go0EC=ځ mBh5&3BL&5Y$mBH
_|$M( C牶.c踂lڊX'!C^KjȻ֏7Dyޛ>nFe^
f0CqwHsދZnĸT(q `1h&KPKq5  <  PK  5R            ;   com/sun/xml/messaging/saaj/util/stax/SaajStaxReaderEx.classVSW@X	Q|X&]mcQk+]&n ~/v:cv|<v::Nݬ!&qιcaF!\R
AXjpYP+R\UpMuhuiNↂ	i#-
oHSRrMKY7A2DFwMn3
@G2kOkjv'P?;Ɖcq]}}}OCnSik/G^
s9-u1>:1틎T'S@cҴܤalMfzf\M9O&9[8iMkjyx).a,}#RtbyID9Ƽǆ/MkS<BTn冟/aq=o9~h6rOWZHetrmFFZ&cqT32n
+m) D3uGt%Drj͹UyY$4iwwǟ3@MT:ӮaH#	`k$,fziOz4q_OOPd]U?qΔg吤aUщ=*b4
jeReH[*l8*\UcAE+$ЫC|޲چ>]NKKgKR7K>Wq	uؿ&]vbEM=kJqmR	_9[&yf-RD$٭Y@yݚHKeaҡVXl'ese1y'eNfbsXɂpvإE{e&Q]Xo]+3~htreɼ+V,ئke+r=1guӁ =Y~[x gu-#Q%EEr+)"Hv(QCqq"**pl	mx&BE~_Gcr'j(זE"<
,! g
"ܽ	50;FǌKh^n"	5W/-u)#8ʀp7paу$care'PN{NV	/Y1fҶjF|q{	f(gGUA?%t%3$*StԄgKgVy^GE>FSd@aj=,:Z\XA!{&&OZl-d/BJ`ȧRX/).ad,22A(^E`R%d2"dFCZ4׺{0)G]UKhzHmm!pi&5|jyQWZJ2j{8D}k~8A^{e;bQ[&ί1fll<_ش1<dWKOF-PK    PK  5R            A   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx$State.classS]oQ=.,l-V[**ʶO 4mBB$ftYWd?~4,Kk4>sW6>d&sg̙ٹ?}Z*x*vMcQ!.xFM2>]ÎޛzBjuMfA`wтF9f!i:0z[1Z]@OLbE͡.n^SfG\TK:x5_FN_M7r\ARgNf3C9;-^mRRrcrߕrsr)5le'$[OHb;
Þ$wriFx)ydr*|%WTa_9XSqG"*r
Xٰ=(S=wCb@yӏIeSoћS顊
N :[!Vd#͏2Kpd*iI|
VK/H^BIOna3Ir}regq7FnOQ#TA:Ć"B;YXcA?pv9q~X?rLe,
PKbgC?    PK  5R            ?   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx$1$1.classSn@=IR \JMPA
T)
@m%qؑDxHH H|bv()/Iݙ9gf׿|`+qđK6r	;	d$E
b
O|c]͝Q<˩2ZN;.7śWT,?8۰Qttv6U1|wf`نQ&L[
Wh)f9VP2ApwhrDYkmٱkr=K`Dǰ:ՌV~Ip&!I9o#qˉL<Qw[BW^l
3x٪:<hzx0QJ7I\omle%Mw(khzǴ]jDPswtǲQ8qx:t$NKni
'(M,qte3]HfXa*;9ゝ1gy8'/
aai@*%v4Ec&ɪP̝r;@CDPFS&hE?K(K0_t$FB|B$aS/]wp3Jnh䉬dx0
w~Hc7>>
&zOw&AfT%%ͳØG
cأuRO	z~_^Oq+$*&jyM6.vBdw~PKtE    PK  5R            ?   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx$1$2.classSMo@}I
5
| (j	"U
(J6rD9Us88QcPq9zf<ｙY߾xp<nڶPpm%3Tay@k<2dxv1'0<b'Fy<4bƻvx(#YywhJ+dhTf2Z~_2ɸ'Qd;$a[T|J"șaVTcJ_('"^`GS-M&g#Hpe׆0Ę rOeLJ}HL7BW
0_LGdaq:QOU4E4}z~Hg6,m`:.tw'cx)ð~_A8YM3d5(j_D^gi%GX4ςs@lEl5Ovb)1=phH1|OEl&zӓ.1 $ y"}A6ztOTsg]ƕ}2M@dϯ\@/PKR0     PK  5R            =   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx$1.classmOA[J-g OP(BkHMH*޹krkL`PƹQPfvfvo,`-(Q!AnH"Y	sQ1/aA¢'ak]-lsىjVn(TmfRw4]PJZ"ᝥ9*4iV]2R;us_05Cl֫{zt(*w`ua;Yr,MN:57&
?	Qr,"eSh5K|oF/?,';| gcZk0&Rwꖐ i>!
j䊦UV*Gp(
Ǻi8P|H6O%nf`=Ӯ	
kPu&W90%<1ˈ#+#g2nbDsP"cbEXĭP+!	`XAus&`ޓtgL[0.1y%M^SJ[,ivSavvH67_r\ýRKxܭZl{u ) =@4>A30Hm q*Ori|bccd"6zkbQwoދrޘϻ8Eh79:3=hcͣӈ"Ka>z(G=$H'Mb }RF8Q4a8&B_PKvD  2  PK  5R            =   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx$2.classVSUn!l(B*$[@iK
	Biћ%Y.>Ljg㓣xMsΞs|O\ݎǑpVWv;Ih@<᪆8|^
Lю0-LiC4Z~_a`5_v՚mԄT%c9lQ$H¼g_İXt9Ș[
#n-J%,G
9YRo#2m}q7fs^n-~ 875s_Xc\-zk؜B"a<k˄prx'1p+}wtb 0Qꭻ* N%2jVM̮թm@>A5Oj,Qh>#wt953oOMOS^tC.{fɁ8%ӸcڮO0"e
3:q/:0ᶎq0^XZqD&Fr4ɭC|cc8m
)@.1Mgtٲc83[)s.㶐IY~qԎh)%:2ET5X: Oitܗ`G|/r_rꚱIUNTBQI*"q ),jsӤr9̬VofK5:[_Z!?HĽ<Nm7
FqjdtF-{kbOTpnq!G=[.~AB¡K\ MDwO܆Xz+Uʩ{s
>4:7f CI.yGFxGgn zhziM6p$F79N&I>=}ֿP;\\AHϟņdOLUQ	FR&)fYy=!sh{o!M&m!)NIin16'h_x:
䷎u@7ҰÏqAR
+JIEg/o(wEo=e=88GRXI=)ImJ䣄>jȑ.,)Blv3/eh%ۭhtMnlQ.5q*vG؅oaAI@)5 tTPK{f  
  PK  5R            ;   com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx.classW_TAeT%!IHe1	c77odHIIt&M5DAcb4mcjt_㯿~00@Qq]9=έu
||Y@#Z{51uxƏ1-g+ϩN n U%q 0Y}A4?͹ *^`3^*p/?W`;e ¯xMz]h8B Э
o⒊i}n
iX1=4N=}
B]3϶Huc)U;H,5^ިe#H|LKL-=ƌdR-맵iܘ8$1+jVGzDE[FVPFgLÖǌ֖YfިTZNKɸz[wKFKA5WwEM'56dXPG؀nE؝̳Gtҽ+3Xc䦔:#aGrBYvG3L\dFK0^ѴOd#TQzn=ںZ03
*9jSPJ
q,,í#ݣӷ	=bw5lXMzPt`,5=ju[?1r0	ߩ 5T4D洡qsn4(X}sq='SI*saiO$	H89k
ʳVx0#sFc\`Ĺa)	

%i+XW]XbFb@Hp[m8/&@$^K*-tjsbFzr#ݺc%tdY,2降bgz!sM9IDxO740Ónͮ9$Waq J!ܩF%OY@Tǂa,/mA\ƃA< {VS]hִ4!X,S*u;#GY.VVw	VNnq#gv|9{Xs$GamhlذFFU$eY)n&̸]*c׷&QnTѴGP<'T9௴g`[ֲLڣ]Nrڵ]78&*A"i#%b)O3|츏΁쨠c.fs]s¿6q*ؽ
@8f;r6I"[5kI3{԰1vJkTi#<sw(l^q.!7Z>31{uR_QnWgO2wEN}\鉄a^\{Zu2v|%4V,*Ը%5 -N8G4}I.ʚ"8vE1g}d62BWB>%INբ#%{BL^_`7W~遟㖬qYc}6~q;G?*\[7ȿ{C㴃*a@RE!8f9֐4
&.B-zbBW/ŠHKhZ"pi[#-^C#RR.O+V/G,(D)} t td<t:i¸rj+yff.7i]wHg|P.-^
7yXN
d"WQ<HC3|ɅYkC
jvcst
g)9)ٖc5Ob8=B@gIdyi>Js>~*΢KPkPX[QQy263.nd¢{%ԃKLaU
3*a\7iT`ӻ)L)8K:{qxQ"~AA<@OJcH3{^s@BުU*k˜2jo`$B<*)lk`wV8*bZAk5ҎU+r5]뼔&$0
iiIS&F1Q0y@<]6d}eTӡzrgkE9~8	l-w9?/њ&8qxZojBQtv݄zJw]k$Ժ)Su\줋wğ&wػcFH[{x.'Nd=^(wX24v&39(VaAl+y 3@٠a07ie:wh|o5Y~	9F'S⧝{>|VM9]9-MIA*퓂'sYkpbr,'ˤ}փ/IyO1G)˛i_: PK̹ݣ	  g  PK  5R            A   com/sun/xml/messaging/saaj/util/stax/LazyEnvelopeStaxReader.classX	|T&K 7EѢ+`I$վ>
ݸVkVj[EH7նjVV ϼlv+_}3ơeM[hKKjpW/-y<\'+ݗ2?_ɣӫU/qh^a$Wu^cov1h7݌d&ܼݷa^F{F2z{c>c~F}F2G>b1`$AF}F2g>c9btaFatNF;etH {Ǟ1cQ,FٌyybWoӗEbzhqU-zlɸVWI	ў0j6"F4łrcejVIA# _({z8N-h*k
$ڣr&%p)@"˖UD;H(+m)0*5j[xHaU,Gx'NaӞ07])FC/g-Bbtd6Q%jMZHsEghKcфWy78e&d,JJӆ6$<Qc{E>6:W
Cqp}cȑOJGTB/]} ,T+=lKԬ'jzCRw+َy|Y>_uѠQSXvk2s
\ʚ춸qqЌ WÉh([ެ`҈'dwAs8iԱ$L3 mlO
zcVeЕـc*c}-+
pnumB=17ǅf2S>4HԵa#ɬyNO]aX̉Ѥ̽׷֙C݆^tUm(=_rA|K++y%b!	r<y1Mfx٭2_c!Ym es,4&CLy]P	sXf;NyΨ07 R[ #('R:}概I6.ë'uHH	Gϣv2;Q\(BE)&hqh݄§
Ҩ.`Q"j48
{Lha}'tF7O5JjHtFЭlm͝J[_{^~Ch7~w?wWp =:m)y_<[q1>	nS<g*?>Nś-Q#)jA̧Rۺ3kS_F{UFjoj;m0_pi@&6!n'nPC2+5؀Nǎ:Zk3ok'u6{_+q3 =Q9JQN})~AH[7I(KΝE/6@nf,MY8峻ȻMt#򤍔7cg%Xu:ڎv1At"z'AyMLLSf(u:h]@Wb\G1RD]l}ӱMs=ox`@eM+MBƦu)SF5t-+D`ab
6	J5U@Ԛ@4-u55ՊRj4Sc<*B*tJ7zpRh:lU s_1K7 BeD79reg؃մ=^YPhw0kC&Os(-Rk,"_|#L)SyF
FN/+B9YRh$-ASu]+#BC9^r<DfbIL5SN>KWQnY GmPuOhA'cɩ0ibqXLg`4lؖR- w4
~r-<ţ{2YQsR֍a/]pl޼H+Jt;Cx6'By"`-q"pA-Hǩ"o-(қTĖDE}PjO}P;r>YQ^{jLjC\gn*usN'uߚ(Ҿ8RI%<!э3%`wA[o&*o&Yy <h
n6ZMpwd/QS'yZk/0ejY$3Ŕ9*2WfiT̓y29ɜnʜay2WfLiV bek^L2gY%ȼ_5{LVװWv5@
'2Xe@foeK6P3iUd>PkrPrPnPO[[
Շ@}؞?m(s-N+ո}$<fϸ*-9hIj}*%80owKJOsK
B!O<o5f0<.xuRz=C%P4ךѠcOõVY=j8PBRWVYԞz+\v+dP쩷9ĺAQ/ROԏ9z"ku=
+X>3wzϵ~BE}
O:*ֺ5A]gOuZz=	ր\쩟qXQ7YC6쩷;P7+강KLh~PK2T
    PK  5R            0   com/sun/xml/messaging/saaj/util/ParserPool.classV[WWN2QZVmD#.oXmCHfD{I_|C]KAZ}OLB99{OaEa\pQG$pc:e㸢VBQMjNCIjLa
鸎nhcnHaFM:i
ِ'K#3jry	򗪮d;kJkX Y+4<H7k||rt(Q7V)Cw<ҢA@"]g̝#FmVz7*WJeVoŘl
WM/:F=s˹-DL\gޮ4<Si*^%4iHH)Yn-7P&}߬0g4FΦ]J.ˬ0K&z|ll}
Kok|GGv7<p[;ALԺ^v%muJ=x pz˂+xF)cs<5%=9[c*zR+U
t=KÜyŹyҗAy6V0PUWVl,XQ8}j*g676`!lsVJa
4@B ,лbjvQZgs-?*NBM
{+@ƪ\sNmmPgR\.:~`:r*݆V<~p鬜qj[UMI`²p 
VP7c}~/bX9>ӂX}#Ѫzd٧p՝$sI
"fT
oKN
>}ڃ0Wrk
?y5KfD9:C{St%#1f&*v@Oqz9v%̜]W[H?>AB/s5(7k>0*zasdR'8Mm>&JDgt#R{O9^ҴS+I)KJpgD(y qMȠ5ci:z4E
Va{C*/OZz27b/]7<r'Įg&b8uBL >Raӊ8/a96Pm#$
I"-+`8p
e8tn
:=ڍPK-  
  PK  5R            5   com/sun/xml/messaging/saaj/util/MimeHeadersUtil.classS[oQPU(Pk˭]kLISD	,.dwQ)51>/!^,4EΜf|3}
`wUh*PBVXŦlP-EN


m¹|!i
ijSްȳXvnչkJۦǰW6m}е<2qi+o
{FN
ý\_A9wz?/Ȑ0+laX'%2d/
n
Ac_wdD
cQPw
qh1%ߕU4$p!=*vAu
{pnIqw|@zçO%-?Z=ͽ6nFr?JlwY@wέ>!d;7	b~IΑfg
`<h\Im".#K'F#\.>a-2t2|R-7>J

PI^A)UZ.c+ؠvkӹD,Y.SjM)1B$mRY	.,E PK\zAG  8  PK  5R            6   com/sun/xml/messaging/saaj/util/JAXMStreamSource.classVY{U~Y&[JiT֦6]
.Z(MӡddB[QQq{V@S#zÅ?kb}$-\|_~8 r`Xe1!1)^V
^MA%|4.1tAOa\A&!'eQ(F
CFg1-cFB]̠f15-6:	-5l}\J(3RTo&7Y;f[䦗tL$T:$s3=&
쨞'$H'H	
eKpcQ:&G͸,C̪[_`BhL3Tx:'LF7VF&YHKU{m:Kt	#8]'Z13ku`jVl-~OK;)8'
	鸞
3EbR.kNE	,meN9ܶL۩*%tUxS!	]_}/BeXzFg,Ϸ/([g|%[D0$! csxz$N؊AalQцv	',-OZkM[x[E+B*U,Qb	@``H@Pt^B4&,q>T>X\R .=	*>g"䫨s|K\f/ *;N8]-㊊uDH^1*!ED:(ؖʜ6-pD¥{\&,s*oT^)7RTv'Q|3wCWBFYj鴞.>3{[
ǈ#.170:퇚f%aep %'3qwLY<l-uuqf2ҺM3ktrhG{z>A>nq(jqzGP4I
WB(U5\lIK}sBkoמCy
(w#9T̡Ujf~-fvvꯡzXb}6cPb^9nb䛡P&̜;vl3jӴH/c'o]ZnκyqNT{`-KNxLF_ŀ<ʳeg$sN}:W QPTXrQsh$j_F׌tW;͡i=nYD*D|܌^aUq4Sx; #I1^tGʗQ:hy&kᚧ<&.*d4̏ Qd&H=2'hÌ:yB@пrbUP\+(7	wza*ja}W9=:`#4w-XH7¦p7BM(םJ:T[O@7{.?PK*    PK  5R            6   com/sun/xml/messaging/saaj/util/ByteOutputStream.classVoUngv.-V@vײ *mhv:)Yh&cH	%BH|?G5
~t:,}9|;~} (b,m|T{j*q&i(|3|E#>`V"0y!Y(]1"~ ¼%8j筱rn*MsYZZF2Jh;}f!vr.Yc,cKkgC+5^vew-YF]#*c_!Rrv5d\2v!=piYs;/к	0/7e*v!D0ϪS.YF0mw2JCjidt(Z<]!Z-gc6Yyd
@NAm"(ɂ@
OVP&Hd9݂=S*+RnXLõC)Vg)۱)T&/ɇW,7bՔph(N@t]4Ov-T$FM	ق#`2ީ,+N%:f6V>C;vcGhK yUp!l9c؃
ҧ]bÛ+^=NoqqhgMӼ?T"!g,CPV⸖"/<sKlbR, SEq+W0%)筷f
tNt[!d!zk: n8QFЃW:cqҷ9vZA]`-LFzDn-y{/Ul7*";R;WQ;䷥ᡴ<9TPB:?>)wu̡)},8z
х`aQ49j"DIUm/q*Zg2QQz^!!ߔ[udXWyR.K6
UUz8>vs@J]#ϱ{F`v /Az4sd;3'83?|ga]?x$#CFR|Q)F2K+>a2ϒǳ3 $	Ior&$yQ|ܦ|w(:KO?0N%SZ*"OOQ<_Cy"Cz	UMZUl6yU7LxEVÜE"9dQ?9H2EDaI~F⮮׹xBO}S_՚GhBCڂ;<=ԡSjQ>|O6@A
s"pMkmCa>wdvTLp٠FKW;F8=E}2d8N!䦟 |Gc%Rh^Cӭ*o8M>λ*8D{<f
-@@>Ј߂FGs PSeЫTMۛ*PK7b  4  PK  5R            5   com/sun/xml/messaging/saaj/util/ByteInputStream.classmOPwm׮q0|­CF0' $(ڥ/DEc ~(㹷eo|sνw+ O:-K:rx"_J<frbYcWoon2duwRt ow^'u";A~7(nPim+J|Ym'뷬ȶO$v=z;5{qTxTR=i9~+>f`5llFN̠C\,yd3HXNYJ"jJ:m8
H
1P5r 	Krh1b_
LrU`Oζ@l}Do+L*#"uwsfxdidy /`%2d0FN`q,#=<Dw!ې	Ch,.!
2fbV0s]h`tO\9p牻 fzn(*pwE~J1AgE_Y$+&3"I?;$gy`>"-ݦ}7MYrJ%*^t2ݹi$DD*Ծ!B#/
=PK7Ãi  v  PK  5R            /   com/sun/xml/messaging/saaj/util/ParseUtil.classT[oWڛ
Y	
d@
I$nVE*ٰ^[{)QSJHXBjDju0mZK3fW?8
PT0
N`\@4'9`N˘PFQa>+ȤOecHX2;Rl2U,Ǽԫ{Wm4n%RW,ab48ZtU=-[]ϼM4C*pLMWVW\9y/.M%扊;ld_&˦"=Kn143Ap_X3̦o5QϠ 0#|`˦KNK>7\XF%=zTh8b
2fT\ MK*0 2:m۬q{έufT,2nU3u|:2ftf4E)?t3mө+}9
Iftκݕ6] b^N/&vFt/I:D%İh2TjOTЏ:Nt(ym!ſ"gICȒ=>R_	L^C%l3|W̶!ѧHoX_[Hn6ֿA=Su
υІ׵Z]\x2TqЫo]S#/OlF);rmw[k{=ԓC"Q(@Is8ѓ8S	ܣo$1&!Gc`ٷt[BU#>+T3Iqa:B:gwl
1"{A2zo(QPKms    PK  5R            ,   com/sun/xml/messaging/saaj/util/Base64.class	|ToِI`!"g	lX@8$ @K$ݸ@Boj؊QAV=GZހ	Q}zsWQmvMZH	TX*U`RL:]i-59YSE!j1),UQ^SYUp 1OPH-fcˬP{x/]TtAi.石z"U.Y9o\?
Uމ1jWV.HO+U&XT>Wl~V[WTjm1A	*
E"뗶V|U#LQce2'w Hc@PJU0XRJҪ"
Vh
|k	ʩj:ZB-6)n*hu`P*r*rWbXJY
XSmѨbS,p{*
JTmuiG(n5#758T[W}0lE7ͲbBT"S6bVxbQ.G*H.C_%xFAh&d<+GJ[V$n*k6[@7a^❎ΩZgm
B^"Ź.¼7 hImI
VMYc&^o5hQպ97"&`KBqGuʑhC`vP/qMc(3~qpT঑*JgSs(mFH)[--;MvS;mPMɤN7Ig	'_%9Dڢ̹*d}mjZH;:pEx<NVBZ[FAkO>3gv"': V	b*A9ل2(!@D~P|:3gH|&Y}CFٽS0"<Gv4^"W 
Оw>hԡ3h,
hV*|VuYz=&\Omٌ0tvj<Tjc&7vty=%C!(ez%.J{g;1ptAT",r1%a#tKez
h!|	jdƧCՏlG)Q%!Rc4`Dbc^t6魥Pf˼Rluf!4)g7|g>K4|.×dM[=nG/)ϓP[`)Sl9<{f5quc;~թ͎\fe{'Q::](o܈b|p7S:wR9O$>wa"K=#dJjo,M{;{vu[ZnԄ-
zJ-TBaNA80G-qDQAvZBݴF'mKyOot0"ᦋE:]"ҥb$]&vQDbB̥+jJ"FWvu0/e:8i%kKJфaE#ũTکPZfE32'ʩ)'MeXe6ZD/.\,BLҶwk:T)*Ƞ}*tv	Q3Ft49jgϵՒƲC^);WvsvM'\j8c""ϝ2иBFrW?aND7"|7anu+8o|;qÖw#wDVZG¾!z<HC",*=Bӣ.=N	!)IψatE0fOwO"\mGSd<Yp6Jpvu6fC^qHLqGUڎ")na2HTe>Ӯ60IM'c|OUɬ=@FY|eYc{vSfұ-q8]9?(O~JCLűg9<6E.<vSux9Z/2;:x77߷(:]CG8>Fԧ8>hwvh.֘W5zp{jdV~ZJMz'
݀\"G\ګ(gNEI+L5*Gq4Qvx3Z4aw!+؍Ow\Y!wQUT#N^v@eF]9uuEr,+~*ߠ{CeFQ!7^Pe
.!ExmjSrrFuM]CĩDK&iukMOkV5UkZhhutfh5Sk֡ZizZGhuZhњ5O+BZkEȡ:ANN>WN)Ir*'A'bY*Kt?ZKj-:]ir@*Ml'dTR̓T/]*] Ѕ2Z-Ab)Kd*FA?t ]&=r t@WUzntkid^6LĥPZ9$hP#HhHаh̅!Q9&Ac2.C7FYDhB3<Kf[Hi*meq6Fc\y0.d\ĸq	'K13.g\SU1f\9k1gdbfqf-_2~Ÿqv;݌w3ag`˸q? ׌1f<xq'O1f<
Ys2gEK3#O0U_c;2^gx_0x?0>dc'O1>g|888p%,MEą/t\#񁝏O`)^޳]\3؎+f|7lw%h_z
ĕq\_b5.Q:R|rjuoڝtnԮ_*=eK$wRqH;J	UlB|AǉWw8PK.    PK  5R            ;   com/sun/xml/messaging/saaj/util/FastInfosetReflection.classWwW~&Y2̈́j>ذ]kH(J	в-4 Ⱉ	l𣵭j?lˏm$5
ss<ǟğٙ%a{}ޏw/1mG#qeSp>z|EW.Dbx<-ߊ(x6mx|Gw=/E/e+2^UPG
^7-o+()xGeB/%tMܗϔre?FeIgTVRc2kd޼U/KhLSn
#T6#	C43	*vFԳ}Qۣe%{d킡'E5^:_*dS^,JXW^Dڃkn]afwv.Tx*T1Rv1n
ۙ
0bZ[Bb{LU˘iJFat+X>gLb>c2%;2\XRl*gTu}:UlSX3o1Ck\çA洭gg<}cFآ]3Xml,_J
eRt6ʙTEE^S		I:B
h5(ssB,C,~|E!,ZU-a+E|Q$(t_BY9wN*N=8kRD7Ւd[!#siY鎈=4NڞՉ{N0T;
1j<
%b['^1Oҟʖm0cFd|wLkkȨFP)͔eM~SL6ĤQqH"E,<Rl3g<	[^;ߛ%m8!.ąwYW{*ǯT|CZ2~~'b;T%.$g-NNu!Y@*b>)bXxBD#bn	U*K*-^qI^qI<U7{UE2.,'~5C\p*HWtƊ5@Uk_>k]˅Tr-5/%4I\2BϊQX5?Kk;C.W/2_9#E;|}0+b /e@U,ve.~5nh_4SԞ>ǿ2E4?Hgus6&+ַ{wy#N{r#޸+Yo{0LHH$.AZpDY^>UW pFOQ	?B5\eWLugiz88Ԋ|c+my

E(Jb54oIǶ?(MS	<Dkc8<C86AC9kSXыmg{ulkX/Qe"^ut
/>1z(ƫ=hx\Ӄש=xq8qD9Xu.N!%re^"/BmO/=*i2	I2_/-`MLJj\,
alO$<bc":	m"^!GDV)jtjT1L|#+D(!_}"BZalUkc0w#?|ԍVw F6I߾j1 *([>ħFH2zP[NF{m/ה>snwEԄ6lrWV*.AKx;f:mti
sTڐж(ue\et1'1ϣ ӟdN'y8x8Hy^^#$.0mY5֥,[}+;7?*[%kPKH    PK  5R            <   com/sun/xml/messaging/saaj/util/RejectDoctypeSaxFilter.classWw,{Fve!؎-&ˀAqDlyhF-%ЖmBB&Ct-tOi9ތe;vxޝ}wko ؀q9nb' 8 5|C7puSWǷt|;Hq+>)=^
 jq5xP>|<V'XS:3zVR$u\r='Ikx^:^DKҚ8!%N8%חu㴎1
j&XbZ$WY6ٵ3&ޓHv
29)H[cX.#W2vvHķwQmWOg@"T"rTwb=3Gi#waerfQ cùmQ'Adsyɣ`mhR=ܸKߙɬe~@ΔS.fL##
`!{'rMqVh,8ټ33.O1d)æm*atg4N"v̔1zU6(¹X1con^5.PmNo1_0fyΎ(q1{Vvɥg~.3?N?!qnܑzt Mwg#cKʴ2JuEdVX]Nr(4T2#1@æj-|!>wJ	9txrs+wg촼;<PrL[Y.g}4ip!'vԐ+\\L]0>$q#y]TJKe7%,ʗiIemT^2	M%P3Ku	4qm*=* :h:ڊ~/q@-wՙ/2N#)+
gRڡ>*lE,28M1)n..E5ZܖX91Sv/;$C2#-t5~-p
8.\Ş5ibdDIQ4Y$kG<Ǧt!1(C2q7p%Љ~WAǻ,njy9JHꏒϒ:ƫ|L䇍51YA+)PTF,B*nU3mv_v4oYTvuC-ɷֶ3]*HrmFGmo;A*;hNh
[9=tH13	ajdd$:r%HkutNX5+S[ɴkd صW/un:gk}'OQ.:+={NZٛ3RB!_t-<N\
`Xr1<lY&C(1<T2rYrbs,}
Kz۽prr5t7XE65|t׻> CF&SOUYv!B׷}"ƹ>3Q0
#r9sd	`+ C5ٜ6o{	dZMWw~W5A?
㸠$Өzް2q*0q>o|:oj>'OC@hZkxu-BL[h㥴oQ
TQI(U|o)SPTRc<~c45*>Dב.)sWt0-,z4oC	7+?{ol28Jj?y\V*3s@|3:7UDUR\2VAʧ*Wi=%8qAr=*8=Jp<>L:krşy&!{+U6>߯Ģip[2DÄpCe%&}ȅebڗv++SC0NȞcLۉqw~R~y^׺ۖ2s7)IV[v\-r&e1>ETxFL3M*2jgDrI,Xq\ȯi{٤Utuz]x_c3>^ʇvpk^+o]"ɲΥ/4.8AL]酎%-Z҂d1WQA=z<xO>J~
i><ٯ#x^xATEF%mW@ft茩ê$ҿU@OƨM Qϐ:R7>#[X
~mb}ZCl`D7|P_TkSREǗY>mW=;SXnSk{n__u'T]MEYǻ12?ʕ-PK7֬	    PK  5R            8   com/sun/xml/messaging/saaj/util/LogDomainConstants.classNPrET .иsEj"mslB\ >qJc6ML{?^ 9Ah,H;t%@U9=8 sG(A<I"ɒ_uy8%Ph]=P
*=MUSQjWԇT@"JRζPGS/]H+A8Z>ue".Y`>xߎ"|D队Ů	><@s80Ks$@C\;OrG2*}I6ן`כU=şQ +[:l&R9% 2\Ac!5|]ZPKSx  W  PK  5R            C   com/sun/xml/messaging/saaj/util/JaxmURI$MalformedURIException.classRKKBA=ݴ4A4YFIu+rN6rrj%ow"hk9߁7 ( jrUa!]1dP2,KNm-o a&|RCJ؏ml:Py.q]m`sx|ܑA F@1Be1uHbW&-[c,-
}b7	FkB׋<Wڱ@Yt(Xg8=J\yseGUl"MO
L;hPOQ6f`/e(SeA4_@kΐpIH+VQJX&VbNvhT'PKM7R  X  PK  5R            -   com/sun/xml/messaging/saaj/util/JaxmURI.classZ	`TL!!l0(KɂNآQ!`4E}jmm]jUp_*.պVkZ}Kmb_犼s{gI?9~(|G|4@H}|ŧ3An^"Edd&Yxd۔gO@mT If4ҔH3TRiʤ&pimRUڦҏ&((;ʦmY+8joSHMT/}M?FN|pC4QFM^bS MiӥaLell\Y'
f@-iiNiMeզAشTٴ\6iMm:٦SlZc@:_N4ib6ٴ֦MBHޮhe-n$cq%6wFhPlyVּ͛p+-[N(^tFds3а<oJ(h'xrU/J(Z<{ى
Y޼pyJV2'
X]֗2OWDRz{y@-$,tmnqxgF6tErdZ,K 5WrQ,mZ]Y#"1frc1~Q{wWC/pvWgCW4l`J
H䌆d]QGm?ޞh/h;K6s5)i[Ir}I[hhj(ڗD2˓3Gz
Đ_9"_nŕuG,|y~7NόE:c簒StzM.f3h"ټ1.Bܰ#-V\
-(%]=)x3.E9쭘kwwv]ʂ[F_ٛݗKnac,eZhSрtPA!LZ3>W)M>_BZsb^FVlIFK4[/Zܹ檬f͚p }ѥ>Gk8'FK2l^" i)͚R)}ֽ3ittvfل=M}ĠtҺ3ɩY2x%2x=lMNε)bXbA/XFɪge-r[h5"ș)׈O&VG;;mvGG/gD45;Й4^M|2h jscbZ͂kױg%Tbvgƈ3b([gsCb5Ҟ9=Xz>/kII^bsyw_o{t~LEV?.8[@*.bmin8 h3Wi=<E~Gm`T} ϊ%7}
[N 4gn{8s7-g	^XocaR*x]-A.t1E;AJrH|8	6J2l1LhKb%!#,`;5:K WK3?KJx\'yOc=+OHƂ̜1c	<";s05Mp}w_\&ǽLΠ3	O(.k~'?xb~D!FC}0!'8&>z"/
.svOgs."v:;-IF쐔`GO_#3JRO$5W.)['v4ch=æg_%dwH{*4Es	=p4/>@exG8S>p@yF
D:\@!~=>"q12#g>C4vzxt-wcYQrG$x_^A'Qnyx~dEHV߄P0^p
BtāKYc.788S;TKq>za+Y#qAVɏ$'g	5#\ǹ:6lWV?иA.AlnXK"p>/|qƸtOZTw-RK";:&<"l<l:%|hIj#|llj+gM9uy)))&ꈨf!x2A,/DE*tU.Ef},$um,
-<>B/͚'x~^ּ5?N/pݞK;_η%1.:zyQԄB 44fH=KFiػ5op;ynyA!:P
3P8&YrMk^˥	cS!Px/2LX`|1"9\Fdmf
P=0k|R*iWdG,l^K0Rݦ:3Ԧ|A|^#3=(؃(xEbc^;pXC\❡"e F0b&a.bVs=
ǲd^y-"kAFexz+m:0ZUWn[{Q:)^A^,p,Y(v͂nG7ԣxd
fzmyL_4Fa0Y)5w>\~L*3w=)
g;ptjǛکصnBTG-6tܳ#C=fދ*n?<?bK}F?f|8DzfB*ĕT4;QOp
ǃTOP2Gi=ГZIm+CvrF5m!<z$Vj
v+#!E#ʳ̈́p3(1/G?Zh3c܏ks?n@j>JģahhXijh<&S(+{MIa
-7gYU?#~9sh/6FUhbiz[(zoøR/;Ө:V6*.~qbF2זQW.fru۰jJFh+d{ޮi^a*%~ml߆P]-
{1Bǈ
{qlx?=,x-ӘÝ4i䧌R:sqġ0 Ȩ8-&[4ǈ<R+<(kY&vPLlUUn7S-Qn]+gmxxր_e{0emb䣍>jg&TFv3N`lI_>MۃQ%}.eo;ZfvcKqȁH#s۬tV,vh&ihB4
cL1a-|ZVZf9b
ɸ`++
7ZN'Ž{ixb5RޢM%M]@^:h]N
MDߢmZ@WR+]E;iF:nMЭUO;&W~@{K>zѣ
=AOiUDϨE?SjE5~Z%~zE]Bw{uzU??|'].m܍E\^pE=#(cωfNќwSv8kyRGn#~:MOU.g38MW<U{x(+blMPpVG>be0ށ*~'XmYdJ9HK*`^hc.n̠&IULř-;,'aYepz1lT[fV.ֹ2$K%;oUY>at &+b0U*j-}I%5ZንzVJL߱brK+|[8*"k(d
K)Iup&O80^Jly'\]%U37 F[Ϊ	ݳ.(W
w!FOv<I]0k;FASb7f扉8|<o7|0ɖIJY)Mc1U3J:U9GI
T%j*HRAԨQhPGXj,fq$50U+UNSЦET.5=gɸ@ME	[T\J5׫ةfn5?Ts2_SZw	xW-_RS-jv6߭\O/̕ܷOҎH#HHPt9Fl2
ޔiG2}
e֧AP,~ŋ^S측Qk$N-
pJf<7y4f',]T6biن@WvLOո'n碈Ex1\)G0x%_oB'q-ƾG'%8Z#CxkGKǲ\|\×@:C
ç*j=Q3Ѩ:13,ՃEjNQXTga3_'-fu>P_="ܧ.j+%xB]gS
.|Aa-|"[]M;Ru=5i檛iANZvu++7GR}RIת>uSIu&WSb
bp
J#+WP"&YeV]Jˤ˟(퀯ԇӠSA{_$}k?d~:LO~ת_NAϝԧ>]7(	K/sl_MLNu,uqἂN>{0lS˶&~voڧa(\ʏP`)js\<i_`z	+ԯpz^ER9征qz[إoG+KT=eEÊxf0fx"asr~O8l5r1~!SabEk6TƩsS2Ne뭣S[@uRaf*kTc1sf-OQOkv)f~*`h#A}ql
-G.
ziT³9{OsssܗϚ}RrixVJթwc5T+$a(4XJ,GI}pN'UNOW+xM[v%彫W9BxhVU&1KMa.fƳyKTy*W;1cc&t*0ֱ&֣؀jh5҃Zc3zd$0HbчS͈`q.65n\ZǳF\7f
CB'o۝iX~qyz`YW֟4T3F_?|%; 8v;,Un\q
]c\F,fz~qs`?/\N/u9Py**nP'4OkfDXɼgX#cb܁J.fn{	3ބ4{3`g+pBZqb-(qyIO~2**E~LsQft$ kxRkך`/P*x9|蝞ӔmceP	[,SRGibWY]A:
68xӍ9E4|xp~`|O|Zi+D$P>pX 56]WJP~L
AGJQ=XݔTy3_z<~ӏ f !7bYf9暕YbK1O?O;bxa@Gա%Iq,x Բu,x`"K0%z	nb	^ƯݲQ~1~m4$8|wU_X422OӷN)lju}ɐ$#ݭF꒓!-ϬX9qqwfdV<
ׁn3.Z]0d\@rWJdV ̻6GsBI&'bيR<děT`J%iTjOSD鏋ax*C/wn?֥oҕa[ghVabUũ_>[+w=|ys
܄"F}17U6]f۠O1+<7\渲8N59gHuqT.rnSk\|;.iu(-㮐.=1WSQ!)qUC|;+jAtM9Wм
T8܆qvԙ7`y#f7a7oIۼ庮 :wB]9bSHrD,|y7Jh댌/[
=bO.}UCp6Y}Ǌ7A{pK,Vkv7TVuqhRoK="~'x*?T8<%6b'ʳRs+R˳CfXcȻ\v~Urчyꢏ	;8enꑟHQ<xOeydoec=f{
p&?l'Xl>,:̟p"3Ke;ƽ+aQx|Oo9d1?=="db}jM?[vC[nnRtΛ%wwc޵xK;M>
{h{uB jOqWIP˫^q<yw=ϫ߳b+}wn-p"0Tz(,+G.b4
A-ȫ
EٚCб,:cxa{iJ+]J#R$"P$JHHs	nZӏBNnYf!pK<@qogqBư
^ŉC`.$kM:eg(뿥/,V8Mށ+9䇛UY[mtbPusSP(ҏE-&lpoV6hE	;
5k&Y(fc5V3\yllk0:-V+Z'ak8ϬV8\G\9x߉N?):?lc
b ]_ "HPKJy=  :  PK  5R            M   com/sun/xml/messaging/saaj/util/transform/EfficientStreamingTransformer.classX	x\u47=Z,xd	EF pG'ihFMu$!Ԙ
ed0Ii$M6I)m-!-7Oi$Ϟs۽W_K K[_bk
B_*n|/+Zǯ*+|C7|ˋZo+cx]w=Gg|?{oxq%ŋWE	~`߽Xi?_^=/NG~\x~'^<g^)xϽ؄_xۋ_g:Ee@g?4D.ĔBҊˋH[Y
1bC:x*!sT\Ct,WPR</:Y%
BzՐjAE"A++LDcw
jZÍ}S0Ĭ@8kOt6rU
h
&Hbo W
17v	"&!wYP K	[CPzAaMk{m
E`	[8Hogѕ-`c<U@
D(ی}}`HHAV2HL'ӕh9;P"P`
hy`"
WX,k
VD[QSם9h[IҎdb(YD"j:mťd~eMi R;uΎ'&2'0:c\3q.%ΖN+
SeD̟¹N|c.<g9W*;8ژL˘<gPB8_=G ,(uI2(ȍ[5RvE d[~q1ƝȤP1ƨ7:fKwo 1@z(?ҟl(uCkX8:b%T;#p)$UF<3-02ONf`K!Y((ΰl9{=$vR $iᯇN8ܜNlJvN+Ы!Ψ7ggz`]V0U#Ar<S,#ᠽAs} zH.1GK|3E3Λq!<abC4d!~OӅx9]=biBz\5tr3ː\%L܆MoDPyb"
-`M2`73G04qmn}xM|\VRVR#f-FSd)k2ji\16읉OTi\`3cSW&^vvdtʘ1ell">'#p؟lky\HblVo\'כr&X)_єfe_LD8tjNvY6ɟcɈ?1`x^֕lԐ-W鮡*2eKТcM{i:i3]:xU/}$+7)]yXu4sQ5e7]:;LEM>yXn56ݔ#J>)k
Rl+Y)[~ۦU9M'
'H[4N-mYb=axoanJ_z^`5F:kEV)!Bsa5y^KRZͫKq<w_UӒZ}pif7KQΚӌl}qe{˓N$#dYΙt^J
Eclt-;邢jE}unx`[	kCx4\փh@fWu0Rd؊j&zlMjoWivǰ0K(2a;fqq_49晒.P<kg.xԈTMyaMN̫ϠOW"dQ]%G&޺(m5S5meD{Wpzϗi.ȔZ?kE~W̴id:vR­ \+,gzG^d1heA%֍A΢Yɳp)(R	MxB6{ȪUf4-vGLeݟJ8`P/ٗr0pضJeƕ
ڦ\/1fGER.C
y0K\	\5?$>lc(N3i36e	98+En&͡e!>_Ӌ1g'Lp5I1óÉE/GuCل)91-Wνq~[|[2GΒ8FjGbJqqL't$|Q#-[5S? CЏTu+2\mes3棈S8;+XW{u
:TlkA432y545|:$^}XѠ>
ОVapq<OQ/*m;*2*T8!osV0)=23)9*ymVe>62IWB̛)"__Wji"} 	ʫj3DtrE{\
)FHaASba
NpQ**|E.5|F
_QwÕ-1\uJ}EcXbqNڕcX~T62,xVp~=q6ߠOb|}u]R}q>j&h[؍49PbR)}=/q]0#iC-~"Y	b<fPD9!sz	U'286
^0IQ|!ђЎf'=Qgmm4l2PK<B(9MGuLFկvDտ_}u
cX?5aubx}kRXSc
.xe"QXNaݩ8׏60>|G
ɭ6ænc8>cMM'-XU9p}
)lp#)ΝM>T튚J|$]vž*o
U;ģc)k{TZÔ[}7ZukX76kM<:,nmiJ#Z]#@lwvIōgq@Gg
,^=ʜ9<<ݒLu2 !lI9}.̈́Q*>T, 2Yc\M7r쒕hU8,5:j'F-~Y:|X6liirFe\6.xCvMمeEJ&V&>E!e,A&9Ho%m%9,A^8~	QKD-QZKBayT?"Oɽ'rZ}<(c򐜗:fXǟg(Ob=iN)6?rXnzGy4K}3BjqbYnV3`x2Qr:AiLsCp,5{6#/}b<v䟫%-08z^pm6yb
v6ٗq&M[Qm%}Yٚ3/pphf+*+^v+Kq9C,gvm' PK2     PK  5R            0   com/sun/xml/messaging/saaj/util/SAAJUtil$1.classR]K@=FiZVRal>,f&ʾf`W+23 <|1㣏eVO%#a59͔(Ez"=s2ZK
k%Qgg)Ϥ"Q:V6/Jy^mJl
0W[LT|+EKbLswl<P0Tɏ.be\.OT*٪Nz?v堑&Tѿnt4:NsKHw||
j>Bʰ!0TgXx|k Q3Nzh]h5hw*S[2k`@@P	~:.Y֙EO{7~yjO_/~.ɒ5m,F PKb  &  PK  5R            .   com/sun/xml/messaging/saaj/util/SAAJUtil.classSmOP~6Qʫ 8_&`J2%Kw3]K;	?xήDܲ9<w?~~`OUh"yE,;
U(ARǒewc6Gx6}3dW-ǒ҅6Cfݭ	~rīfcGxoM!5=+[hF0݆7a
n9u|WoJ֫ʋRfY=h-0R0v>mNMUQo!%Qfӳ^1M"XwƁ):^=CoUrKך=æ#E]xfHZ6,lMc0=C:?IP!`B:6=S<bP
V4(e6d
ixi|URa
#
wv)iP|TZh3*hCBN]B;@jguQcX)d/LR e,,АdY-}
#
vStlltԑ>
+3ToG8aNxԓU\s';n(Ӎ96q7	a_X;d/`)_"`"|AX_?AߡS%DUs%RT	PK5    PK  5R            4   com/sun/xml/messaging/saaj/util/TeeInputStream.classT[SPNhSõ""PMbGfPҦӤI:?{J):>t9~{I4^GІg*Z1bͅ%,VXX&!$ChtB>m
tΌn9z2+x{^42ᴓge.ҧqZsx]q#ʚsL[RV)dqdM{I/
LNFwY"cuS+{q<M
ŕ(d#Ib7݂	2"i3YN
ᕀJ-!m;)Ør3T<ɖʈ_
Rwj2	ő@p%pzbcz1G3'Ǵa1huy]
]ЁN
jG,m5!;<d3Qv&Y0.1M:-7X>P>-,woi@HSR:#mwzKA:[!c$F/*CIS G*bh @)=i(Qtj(f %!X@gLqaj{+eR%L4{ *g"KYJ>>f%GF
]#"M ɿ
M^WlEj*Fd7Ї)S-s1Ƙ_K޾""
D:ڙ,2Q[ӥ2n<¸L
6AZĔ>SZR(y[Kbz-$TEUi͵ئcMkEj"ZԌ
CD*Aȧ PK-v4    PK  5R            C   com/sun/xml/messaging/saaj/packaging/mime/MultipartDataSource.classPN1'G)
@(X'gtEǯQ|bOQ>>>\b"q$q,q"0MOl)0f6<nfn>]tp*6^THDH젳(듩Ijhr%0o
>J2~MFlՔVS]墠-	}/&FĢSa4_tQ"얺φWo8^& <dvlc)0PKTb     PK  5R            G   com/sun/xml/messaging/saaj/packaging/mime/internet/MimeBodyPart$1.classTkO@=[P|TAY@((<AH˚9t'PlM;K_DwL3wsϝ{g~4Za⾉6<01am&<x&&
L14=7dX*:oUi8滮ܵc;kv."摚'Wjapi-"ڋUGD|ǣbpoGF
C~MJ-{<˗U24E]jMU"}Hqp
ACG
dl'rUe|3ٝ4r@2<
)I%H,­s FPGЙ>(t &P{A<LWp5v<)cgȸADNc(եf9\@Y;:ja	+UђR)*'|Z|paVZIXo#Jz2teYzrTlr3GRj%q^qYD`%?$EPs}=L8qhrpAk

gcu@p_G`A?Kt;::tуDIE4c_Ftѿ0ȍj(L1O{k&`ߐƏudvBR4iLɦKP4mw5U52/࢖N</^RzŌk.uk]K
bNj PKO  @  PK  5R            E   com/sun/xml/messaging/saaj/packaging/mime/internet/MimeBodyPart.classZ	|of63L ,$!9B6.9"Z\V6awáxjzAZM=*ZmzWk=P[[Z"d7,HQ>0%ڠ|Z'>IFM^'yXl&b7d_R@w#OL>O$!3e,dLF&7xz
?+5|\V-,[dj?=	%-N1j0*^'&>o|, r<^hEb/RmwLi_.i6_arY}j\x.@.ך|ܯ7t{"(rM~:(LYX<"[-emOYn3'.Swȳ(fn?NsLe&++~nf?%-&/+eU.6}	'YSc]kϿ_q_y/~-F=aSri˅r ,MʗOY;Y""-ťhK~~_U_3u&6'fFCd8䟾hsg7,b
ԝZb+؊
gcT(:9m
366̶LpjVxy5Z^2/eҚV2SUS5T$JbMpx,}V=2{"C6Bre8N@Yudkz]s9LV@d(tvuKqiWG@;@q`^K(Xq4T"5K^/P'VTFlKk4Z]_[?{4oR$IMa+ď7A]"pCkpbQhY4,z7'yv'0~<ψ7wYjIO&&a-lxx]j^nk}Y>nHzTx~k*&|.LP7L~>m%s+9uFB'1H*YlbkCLnQhlG)rVElZߒN
f)Ǚ'2L+©+ͪu8S~죂9gͅs4H#flo-q!+Ge+8x0	:h`C"G"PL3	~bù<+l'#RXXΠ$;	TД l͎5ƛx<pGR@sRH+d֣kgd܄kcUj
P6ԜFi䗆#Ptz"ZI=dTTz]gS"-73Z#Q')
'lxfq,OMi;Dh RI)ih{-*lLWMbGP3cSÂd_c'fdOt9$*갋n:)6<\3
8oÍOgPqx?A8T!,%]zL)	Rʄi-]mYGUA($P2d9L: 	-(}L82E!)4CL<\c55D9&~4=G>&#+bTk{Eg&CA
BO4[akKS(ñFTxf.J ّz7Ҡ#G2uՉWvA[}IQk/&9F%شzԦ7_Jimg)ĕLou& 	%Dm~߱]~ϦԎt6626m-6H~zУC9IG.A}mf'D9;*TɴXWG6n p
_O2mAokDhڍ%<'$BVDCp5Ol>DOkR+Ϊg-M`S5KXLb@aŒiLcd	V5bxbni򖅒qc:aL:洁姞^=uI6'^sV^ӂBO%݈-Ṩs5u!
<[4].Fetfl򐖏;P,-Z
򰸨BkW)RPf0lkr`s(=ux{es?CPGb<
%;wKMϏέݳ.F6h56?y9(.R	0HjuZC:qr\lk=x" &JRZ/7.\m!ӺxK"2<KfL>֜ٲ#V:qѠ^j%VCJo)WL2Slz͡Ht@1259G+
c}Cd87l^:`%s
9zbD|{ҁ%5
Z(4'vjasQk;U̝{ɧhHM 3$/;H!)͊x\dOKCձ@R9rF3zCj)@

WB+bDxfHRqk@Swts:UGHmD$3W"  $+j8\]aƖǣ;>V)vK܇GԠ6Њ#v]a$ͳYfEdyТ89s޾qeqt'<
%q}%*P:fvlbݾ]_!W<̘x{*v	-c(Q7BաX r!4i>mG[+\YǭOnlN[zE"*2jӝxҨwe<M~njDє;Z2uн= zFˣhyqM>ycDT\J}+;X|[)!K3pՔOQvcv>_/q+)|&sDqDNNmQw_pWVU xIe*N+کV{V*C`س4^Ko>xaʋ2-J -Bu%R*NW軨
 >xS	hGw
r<_@F%@S; a{׊- ^x +ILzhFdR7b~ۧ >3y/߹olYP@eHv@/(@AwԅQOz^IS-Sj$ѳLW,<pވ?zeH?DK`e0
޽A3=f{We(w+YlqwT>HN}a-
Kʌ4niPہ(e0C 00o 7i &[t"l/֋= " +I CYʫ&fbkXG.B=~M|<<kpjS|_EY剐lDvh=$PnCi=u=x*Cn2.{
o'zFD Vб4wǽQ!X/$R;wbA}p	UpOɽi,qܟ&r_roaFw`A$W"O
zMpzדYY5hZ-;8Tlý.f/)it:uE_Uʳ7~|B.ݽJa#2sbR&>&i;jIe;!hX\=
d&GَL{#0Q	/4)nཌྷQ>x5p<vg7X{ұ&叁JɺOe`t,oIc$Gn8 ,>ܞK]<`-@B~r0+7|X.x_}.c
i\
sG*֪wvPO_An!_D2aFHcf/>£S|k*f1Ko^9A'R'*Ku rye&U0y\]00	v	<0Y
)j`S1H 0mI00}lFR^u)6[3zax1|(NyaſZ%d-ۜ{=]rJZ09
W	y~+gISf?/<[VeASt3|| L{9AًlPz^)mV&s1;'b5i.}ddj,/u>C@+YYN<A,(3Ć|>׆J}wTwJہaPp=B
4-Lrփ,lh{ m 
:VD4O -҆{qzVukUe4׵4P&)2hrؗ/#*TX~
LJVq>lQ-3j'$F'SJ `_E\sہ /gٓ
x*&Pwm">Dq^P)D)pQ&Gp$Z
*~*4D.Hi
e3Cv:e;}cs=Wa2KCGT-RmK%W#;EhZ#:z	ݽ=5c2vՔ%2d7QLLtGqyJ-U|2\ynE*SiPAuuUE!.-|% J2_
 \K}v=uʩK \q[r+R,"YRnuY{G
Ngqy_*UC*gSZRtT
^;!PP}OLR{ .k4ECz)4$9tTeJ^?z=yH߯FIYrJpۃi{
4BzMX Y `p S.+jxtB	0434F{	(BӵWV{
AuZ170]-tB`QAMИCY
$Yd	
3|ox/Lʈo#}
i0fvZN+;e&MI~%TjU]VQ<d.O"lvءDK#"V=?r"dfT3
54CepYQHZ+KMV;E;ɭde)G6t9n[6Α׼d'Ŗkos^*t2VZ-o:02 3>F2!j21ɭTgV,?c]6DV%KYp) \ڔ0ICd+Φ*G8]yA:Qs *0)ly>'PfMKepӚ6p$ ki]ĩo K烥~3 \ \%p`w^mwJJM|TVA"؍cj1n!vf}:+R9lo6L
LNc:ݐzطHgȜmɨ#ĺk	d!A>%,P#~^	^cCǨ32CKnȿ=-:t\4EFmԳA /6PN;N*BtYZ'3P;}NCD˷j,Wˌ;ȒmtƗ+Ta:N@$9^h5NuPoQ6ߡwR=\G-3CO=hw_zРEF(nFn9H;x:JXUWbu
!kbWA -_Ŗ<(Srwh]E0:3#c+'^3'渥_B|u'ZFA=Z~jj]gtm$CSԙr(;bS`4?LxY/v*O;((G3Kx3l]י`C5Ke9pҤs+@z}D7%@هHu2_vH%,NtE=^nR/}6IO[T"^pTlltH-qDiSfW>B^XZe>z!7-U=,QUzUf >=>UN'RBȭUN?SA4&l#J}
14XMM04HQJshq.f|oQ@E2
Ѹn1ۍ^z "l7nƏizָ^A{)w'S^qf+.N K%<tdv.J>#5D'-j<͇nR}>}eACUaw:X\1eTLjFx?UJ**
)[hvϩFsi&Ms)LMS8+NPd<ο
L,[鲹R¦7~nWGα~+扁htBQ-)`}	ޝK:׏nE唩%rVR
i|@n@y*\,i#lPK u  <  PK  5R            J   com/sun/xml/messaging/saaj/packaging/mime/internet/InternetHeaders$1.classT]oA=çlJŏUEZY`%A}}X&0,fwhMj5>Q;0&ZB{g9s3o p?n03nv(hPzIaHseM{8kk |w۵|n9t\F<#<v+Ui~}ް#4+^mmV2͡͝}I1p]99mRѮP+Fr8Z#4=K#Xv_؊ \<tZWUSjwv*Ap٢.uSZKB3{'szN%&`XĦĖ2lǘzD&.ɒ1n'Kt5]&Ao!M;e.HurymoC2"\7Ao
NkCP"NCQ FqX3") M	`
,Ah3\+S<1b?B	o|I.9+A,H"{1YRCY"	:5-2NRbT]ƕ*Q:ӵ$PKY z`    PK  5R            H   com/sun/xml/messaging/saaj/packaging/mime/internet/InternetHeaders.classWkte~ٝeҤ&t{P4&ִD^IR@eL-ݰrWPB[*Q` x<Gyx9G=3mn+m|}^w_<
`	;CXt|>/
qfCI?J@ ?$/Kr<+:	!kxX3G8'ӏxBOD~Qt@rz oӲuP^e}GIdla19)bf*e첒6w&zkRx@oJh&ek2hfm4nV&h*\!펛LR~WKyZ5xJƭtMOWry
;^nW(hn!׻Mpc&նnƣoYy*pqkCwL9idTI-%v/$&w ]^Mp/ٻ\򈙢
5V_:SH%.y0 MXmj7&Ʈ9\d}I#$̶mVR!rSh pO^k[>a? ͺAR_vf@T=
.dDf/WW(̃}\8'	r|\#1
9eŢѴ p5:79j_8y6S5ۗe#i&ɢ\Y<fve,~-*+?*;MU{6VV0]LzF+5M(#3+YgNd4skkk>t	z5IvZkr4uxo#7p
V*,8?#:PbZ.=K12pG hyB3"F
#^QTae|u5d"Y󟮗bUqxM(mfFX	MfͲgxBRO~GDzDӯ35T(C7$Z3=kbVOgE\
O/^$6nnu'rȴ=JtjS4s"7,)չjgݢ_>ttpC5I8w8U쏨TFe&z`Bm3j'*3
nhseݝN@#H9nl$afܐ˚r2["%FwᠳLL;}8
%?W<Kфrm/Gap̊{#g@YP1O(#Ў@
ҫxB	`-4:ַҢFJ{,:M_E0|Nm!ͮbG
\˱g1ƍw8sQ+GoP(U#RuK*̋h0%hØ{"p#*yR$
(ČoSDBaE|aVkiO=2Q/G0!:[q^; "00I\jUgn';!0w|=I黸+P|/}7I8q؀YJ>B#C>N
<H-Zq|Lp+Bcә-]F%:ai{*?5]18)l'QG4qTKaaDuZ6 e	*f*#Ø5{W%iloڥ^ԡ*a\*
K*}7y,߃b>a1g~Pf?<@ڸ7еtM6;wHe0⺅'Cᓔ2ΙrL	GR'xlu_^huOQm?ЫIss5W>z\lG""Âh08BF((#|e֑QW(2;vō]F6J62McI:a
	N`6wvn^9C^'.ⱳ``^tch(mÂϭȯ2FA\IZ A96fsm+M+*)W1?<&*ja
oy$G{<?hoiO8?`'(SN|><%P6CH<x:Fn	N"cL2.Y
%OԺ$
OwV[F1jįj^J/@^ٓNxJt_x@ee
<d)ɼ6N"N"N'@)B{bs	gq[DRճt,
XӤglyT	YaZQ˹:#.#^ĎHlDK݈'QՎӷ\Ne;_&UxBj+~ؑod?zVA~g`2ą=>՛yIӭp
eJeeo^h?ob'PB@XA\hMU):TnRYUQ-aDƗaF:`ڒr$KIYB
4XR\~`j7.؄_|Œv~	]ueT}*R	pOwMh˪BOi~<ɻ?e6'aPKf
    PK  5R            F   com/sun/xml/messaging/saaj/packaging/mime/internet/MimeMultipart.classX	|յoo2M2!PI lHX4 F$2̄YjKY}}.*؂yTgmU[][mfyH~dr=g~q K؁8sN^Pou	{|E'^:^qU'xMM5x#WM{N5o)boxׁp;{|:GMcS߿+P'=zGUG]DMŪMCt'8$C3ŪLC5YvHN&H.<S'qR"<T3\5uHjQF,5eCl'kÛj>pxKJ+UMj
]
~
ߦ
_k4p/+P,-w@.8PWE$YD|uo}E,X:ka@$J:uA_4"'y|ΉwZ7ć].E hEG	yv5dMO~
	p$9m|TO(oD"ܻ(V|3'D	+6
SƺZNθCΕp@hG=U
h;]b:KE[aXKԪ(kKNnkFkE64sѦVHu8#hc%
uBp"i	g@ͿRa6%tDjH-[HJL]SC6_s~e8	<	pPŲX;%@+2A:KjW]0}N?e.J+pS㓴VGSO],-N*S>`)uf%!uB'JU)bYTj`iƍAFvutTD'`[樟:V*]w*S?30 rt\dHW8%A5\qAp]ə఺\=(oAbU
ѕ(d
-wfM{kKNIOrvO[X~%2}mmg.:}2&uy"/Ypj*N~9d7’zH&)fD
l*C &\h`:uaL%>=GL]ID&UB6d1pXfئ F2Vug\nFH*rXk7<Ce/i_õWkk`H]}'sXd8q!d!ӐY,17{iz]L	\.L)M,AQj9,vM"A9`IDjQ4Z@P/b.򹡲CVұd-)Krj5Cu"7(r\f nJmrko^#&kʻhbȆ@w:H<i8o[	aCdo`aw!k!>%VrV5lv;h߆S.?D>R̻(;(݊R@*1/y5[x潗
J:Uo!]	ޖrh"?)+&kAc%KȐn$t,~7_ֲޯʙMį|/cZ]O%6c	ɉO$3Pgz00D3)bu90tPϡⳂ񟋵YeG_uwpY(џĨ;}MGxjc61_gdPɝL'YJH@NSȸu\Pҹfd$ǋ&vef'{q3Tij"5 ق62hE: OÏ쓔qA]3U6^fdUz9ȫެ
E&m.PW%|aI]ݐQX,g	,THowg8x*TXQn3KfAIyJ,9֬%&~[+K+=WJKXYFbsO)@\.fIҦ#QWm(%
?aU)6{Ve_t!1]s#Uo!0Cg{Gr/L.myJN~mvnĞ߆U	7r`)ZVz } 28t62؋.EN?1pJKU3.ǵM(8"D0-i&/=DzjqZԸ+O`	l?rG=Qίj1R;w}0=|0
pM
pi:1{_4

C1uÊL߶kxD'Cvk.oLH(KTP
sK{O'`ܭ:(;%Hl!#;b_@gA൞
~^YnvðCjg O%>CNNmtJ,=qE+M1R]<Nԗbdc;BUՋ\^TpFv=,ӷWO"bUxx]]{G#ך)7s
[+wl;dNKoUqiZ7r5V^?A'(q|pC;Bj2a	cSp;y;
ԋ1ۄ⾵gĂ,bKYJY&f1ozd@;
MPt{LM yĕ4){Xڳ]b\<b<(iS@Ӣ4S)em^SsT˅{ZJ(+(0Ucx0ER%2
,)W)Oڢ)e&܂[)֋ǤM>j1ŵs"S%5_aQvXHCFmRu?&	Ag3x aj}r0u>TR({SN*zFU'`S2`7j:OV/f[*ٷc'Ms*s9]'c=ؖ'ζܪ,O*=w'˼DYPZTƹws69TG?TGG܋;@"PJV]#Ax$"J*ZU|wv<Xvk,ywy'w0tw\U܉wcX+z5'=}p$v{Ywyq.d'0ƺ].{2ݮ^,qs 2ҥ6W~d܃5,5WqaV\N;ҥїj3T-ypr%c/|tm?.U=x2{lbYUA{Q{2LK4z}XqP-:EO!eB+O:Cܖ{Bbjü+,_sr$RLS!G%30RfbFTc̡FN&G",Yb,VrnF%+ciY?&i,\2IZiYc!6Y/eIxKIP&KLf&r\%ȗdl+Z\+M	
Ezo6[r.e<-ߕȝ|O^-P~ "5r^mܧxٯʃDyD-j3VqmVڥ!?Bv<m_j[ZyAV)/j%W^AyC;,hOʫڳk}$hG=*zJ.v`v|ˏ`'rfl͖XupKahg
wN/Pe;iմn.sQMLѮC16~zmS曵q%5L#[{?ď2'{?٩}W'đٳ{HEGX|ج}>z[mLӮ[LzkQ<p)V+>2QSHLi}<2h[f96:g'W(ײ{.M{nN{XNQvH#0>ǳrh}y^>'z5د>ަ?ȋāD:27f@zWNv?w?dL:џ2't4êAd5g*L_ifa3Q4jB}`#>7GpLILɚKXҲXŗI؇YV<m
q*Ҧ#+aMIA8!
g՟:U5B_
L㉄+ŎM%?0?j'ěbV/ʅե{	>-^_5zZ\rJyaZa^$X/9d-7@'TB%𔟨jH/_U
Ve֢Xaւ25
^y
^y*=W@V?'@S%	*;ԎkiHJ$.nx)JJvNdGoH[何&ﯞ@bSGVc-}!|UJ}Չˮ~hTkmOӋ=En#NsɅ =CPPKEADs  )  PK  5R            <   com/sun/xml/messaging/saaj/packaging/mime/internet/hdr.classT]oE=vI7Ihhq@IJ7dl/Κ]JH xנrg
-5;s3gf?J!NA$F񜌞
ΥHXJ%%٭+(*xE dMqShڶvYk56"a<$j¸SgHᛝVp:5aUk<G8_9-ڭ
&<!Z[-ehmne]dq3鄡mWE;`W
av43a,ω*0jJܚԶqkeSkLU^1Dp%ɣbUlUa\ūbn1-V"*t%ëf7[xCEWUlbKIXk٪6O8߹z~w"B4+VLnz_@V_Cp!u^zv۰B7T袼9y(#m|7l5J3E,ntV
S^eTb/o71n8ΫOqQ|z]]D!t.b8m!F
NNn`cf{`3WpW#xgGyQ
N:O:&4sRHd&".C}@_FvX@8CG4iÙ@8p,5@Grb`.MEBf/v1-b;r##}8N!3ڃ:N!;%GJfp_a2(-D."E1'#,XOӧ(s~>hMw_ӗEvd[@YOmzC9v!t('T.Ơ`QZ`bz/PKej    PK  5R            D   com/sun/xml/messaging/saaj/packaging/mime/internet/ContentType.classVs~J,;@p!@lF!
`@cbꐴYˋY[Z)Ziskz{Kg҇fr{K&~ gLi;#̤3`~gwY,2{CB+RxFgu,?CǬ8t\d?/7Dֱ b8MJ22Td(S7PՒ.ʖ:hVVέ-Tnlf
3Vlg.Zv
|qr)Zki5ͅL/ۢ]2S*U͜5+f&G;j;vuX!7M-tl:T*ق7fŖ}pU/ٮ ɖraؽ]nri*Ne+
]MSE%<ns_ir
l.*DcqJ`E3ފ"[[]r_˗toJ[ճ&-ֶq3j3Dŭ(of*5"
zW'6YcA$n{GmIfaI뀏^o|$;c%011Z4y;!l{~t?7-'-u­R%o%6>͆#elJ>>p3{Zw_x6slH>a
#p2Hc`G݅^21NDli#~oILu];nX˼m_ܭH>K:j~گyuOZEv$1\9nmwoۮ#4ѕ1i=d܉yT4dVFxNeq()ZRL眄*]MA}=a?>'h _kwpZmסͬ!z:=x
=@\bTVM)Cxs}^ؓ8ę5_f*tt<@Dy"@COmYC@
Ӄ5-	9i%S2Swm2^&k;H%;5l#'1:@'ӽx8,q忟৬.b8ezSaVx"c:	?aھwJ
M1u=7{7 #4'ivUf*"p:4B{aU5
RopQxh(<rs]LmL
E5hzNkO5Zp3%!QuE5<p%~3tJiߗ
"#$=)Ic߱Fl8ƼZ]quQ,D*PaH7뭻:EJSG.!j
Jyc>`'V=K} y}#h8̑X#ёwqDZ8r&$ֻ1a
ąLPx~)uQ)Wa;NH`?73>$Mdt}2!AED#\xķ;~DUT[
a_旄}ҿcu
#9sϧDAKN#ex̿(_C5Yz6ش뫍ԮHx&γJĒ!d=4SOf<B<M$g.~PKkYy
    PK  5R            F   com/sun/xml/messaging/saaj/packaging/mime/internet/ParameterList.classXwTF&#OǶ0"D hnKr̝0sZmEmKi[-
'P~Z.50I+X9gs
¸tX!4cL 2a#C*èa_2{LqT'd_VT_**^#A|S>+
۲NGHA|WsL PŏfVP59LƷّn}, k[
n{%uk8kgLk81WF@ivo].lOqAi=Ԁ١$)v.=cʺ #fVt*YT22Y}񬮏2eiF2zFO\tKbL.YZU.ر;
mz(<9M0,#C8}@ߑ(:-ȴ'l֠,!"m4SAeˤbc|ʹE,9a)Mf2?'sT!NC%wnwN+ו9VYV`~2F9%
G,'%|\bH
j`nʙ!'^О%ʩz~ejؖP"?KR1ҰT^sAct-`9%ϧ/շmlJ<PZw_
WK8elSZ;G[(c
^Ѓm~*{qRAdv5I
?k*~Ӱ{,Bjxi8_
	o8WL
i87&35
oj8+y+!Y"a4L(ߣ 6wl]1e
Zgm`d[έ8W*JC6
;ݕ~]JQV++~1Sz'0J{?)f6
#UGl_=;jQS\frp
3:lѽε#\M}!y:ūW2Ʒ-0dvť+i`kG/^sװ9&ul3 0a
z>퀃;hA9ǒ(x߰X@ !4:H$mpm+jmEpjS+@)6h`jw#My{|OРh$q+%TLw\Wq]xhdCd^]}'/m	y8I@ѹK:{nlFuc{>l Cч:`/x!VILPU17xt҂Q=	:M*UT*belQ+N!$ǠGbfYQq
[
yT1&yD/,C%-u\#U.f/]\*l(]Nzҁ]^(V`e3;;WւёF_?H?R4{#׺.I,T0J,s?e|[&[
<Fy%P
?۞8S3k]npLi'7*-$nyuA˜ɣ)S ~_ZuILtʦ
9	6ɑȆ<V-q[wlsXl	ʝ`$굡X8Xh7zZ&+@N0'N;Y-̌7gC7X,,)f,w0o
pcxO7xqDW??s?7	q6) o,,uaI?Dְ`%
(yN񵦆21j8O\wo{RP?BLb#̀ .U,u:B"-G&f]>bI_z$cDOuCY?￘.)WՎϊc%1IQ(hi-<m)4vL >;/IhQK:c,REwќBPKbN  _  PK  5R            G   com/sun/xml/messaging/saaj/packaging/mime/internet/ParseException.classPNA浊(w8AHjL0܇udg1'~eYD8~TUw9UBC>Fg}Bu2"ɽ"m<N#ԃ$Hf){Ж0$vn"Dm&J93>XJhԨLԪEfNLlS$E$;RtId_#BuP]iwJߩ(O=?_r^.quH78V#c3E3}f:nYӡNpb\|y-~ PK~+  (  PK  5R            U   com/sun/xml/messaging/saaj/packaging/mime/internet/MimeUtility$1NullInputStream.classQMO1}]PQ>y ؘxpAM01Rmă?e]8WmΛyClJ91)\!S0daO2ȋ8QWiۡ/TOY7P/b[f
-cdZI
Wm?

4L[!|$q@retkr;Mn1;aT%JSx:$r. ^6b1T]Bj_cy/bH9aZkZ 9ulãNG^
oB"8^M.
'X&d/y;&iVrj
K#PK2`vh    PK  5R            D   com/sun/xml/messaging/saaj/packaging/mime/internet/MimeUtility.class:	`Tյ.oޛd0dadm(a0$fbf¢u. !*muZnf2Gۯs=s9,s?<8 :Ugw%1 ζCgwR׽:l3.dn|m:l/5&;9 lu@6o{`O
ΞS̶W~8]gq>;_;޿qi=#6~K{V#=D/ɗe^ǟu*quN=!xǛx`ok;m'=}8`?O}yc}B#4a491o}a/
%l+A[}`Ύ8D;P7tszKbp+cp	n3npvz8tDNHvBTz<]<=v𞼗{ܣL\F/e?8`;cD=|
 Z&S<1y7x
^}l>I8H"3(6||'|'
^j)jin/3L2x+^i*n3>cg_`/4_d?K~/3x0x|o0J7|CgG
b_R+[BM-hs,
46#@()/g$C?ol	AӦMlT 	juԅJ D]SÍ޴pcT[7?\+5'G]uzKctt9l5CˋLhN̊qL0f6gDE3Q NWі ;vc{&%FK"ZRR]ZV ¨S^QV_eUe[0	(!R
"CʖUs-C8)+(IUEPUE9Y+&1[E͡@[sq:N@T)U^[䯍Wph?4N'<6.w52umm :Dhs5~vLP(z$`(q7jFLcA4(7)|a085i?e#%`%1[ω2uq䈫7b3O2lOD轐dzotI/#4ꃍ܉%U2gv#JS9.4'"Pҟb@jPZ܊l\iBeDJp&{s+9hULn	6)0R#wKzά(݊hN,@!tm.0n-QѨOy^7-<cb .pJ2q.(in;@Mu4`#
[Dczl-#\U|}܄]怉GNϱw=Zm%D-dqsCps4PF%O*qXitP%[VNDkh4+M$4sO*1-(JwIUD'i
HR(;P%)?apjn7-i;Q`k	TV՗ٓBE=)2pc-ѪɨH/8Ȼ{ݘ'L&Mۭ0lhdx2>kZ"d-9-͘$g#Nj#]::M8-Sy?ʺ
Get
䮙Tc4t.ҋ^Ϯif7Ves'++KL.C	kgNV8l!!3Hbje8*TYiõ(fwܭ-7a[毛ZUN*"LEܲ!Xjaӂ$մ8t24Lcdt&+#(HyB~O[<aNsv=|Բ `y4ʝbaF7~7"g'KbNS,R'_W+oɯN&=zo';GLQ:.TBZZbIcmAgCSܹG-`[uJ1N`El4vz')qnhe(&/s5N~-[SenQ	2ȼ"cظɼ&(~vG2zv5Mti
N~#o&JRdsYoFCmJ	BǬ f^d璛kY3sA'ai:E	*GBlw-N]~o10E%`5cqzw8'o:D|x'uw>'J~uh;,Z9b<D{٤ewb0Ni3{%p'kfz0r9|/'&|_3H_F!Ъt
|.L4=z%Cu"Y'b̏A
="z'|_;9t%
 YcdK'dЯ1T[jWLmtUݮ'Iw).J]9z,$0Fdvb#n#hsKWBpY︺{F7yyESUN+q5d*Οr_=*mtF'߄`(zH4q oZ˰Da	Ű'bO=<="{D1쑉#G&`a}	ؾl_{T"Q	أbأG'`N=&{L6²zfY5tG(X3+T+;mذSAm%
44!0lG4[8Nm3ꉮzfͶzV$d\f$2#ZK/ΙF/l+gITJ=VgU6Zj) J\!@37Չr']b$e*RL.=ݭ]qRʧ1LIGZ4*h>wBbK_>0'~8W^FV&rK݂Nly((7	i
kzuSpR7wF4\m]
5m˺9+%HGeՅTV]r%Q-E-=6nGQjƊtN/(Ђ"[ƞɒn j]H˲Mkܲn|2#g%!MYuh8j}S=j`쏌g㛕?-5.PțGA;퓜kͦi偣?7.4l,^JJf0oC"ӛMfSb{mԼ.1XYƄ$꤯${-gJg_X!N"{J"18#SW5EAp '|}>L4a.(Yޘ]>ҥ~H1?S2
aOм=Pt|Tgtӕ9]
Vy xw?}}!AE+ҥsm`|A E;$4v}PkeZp?d|\ze~Vl+؍6`9K%dn$<	=>} wA?nȃ=0x΄68 'SO+	]C,i~SYⱉ3,!2XU#s0DJ\z4gG"uс,S0 6.Xɿk~v1MtHeJ3YfU5uiiB[
2HIWƕ	5Bw
z%HE$hc}]

!|z%"]fnQ(10JPb$eBv>$|>A5~f9H+5YG= g(2jf'	ECU	Hj,e6@@j⪿E)+A EAu*:p~fH[ٚpށf4P $Kǔ}AKo&p<YXO6`O<W_8\b8	g 8c8E9 r`H;~]B
B`8
cX.LdC`Y>Բ"%^ԉ ֑iq'@c$.;D&#vV(B):<N#<&MF%TihLQ&3`*+J6Y(r
Xɪr	2u-;ZqbY
$+a-ԣddVd(JL#JfJ&	Ck3PǚE(3̥d4$~,ُM<FCMҽ]3!h~4K؆7/؈)=aRRPŵaDE16 kv,|m0o5=ƛ'
KֻX
x_cu.`\ϖov[ _[/VHH
oy&nm3<
&	&͗>r7cCiq2P02dGSZ;{wp)\޴b`bKHf_=|{,Bw#9f\Y\ w@wy<
6r\s
Wq7\{ͼ73nx6<@pPhфR7*Ȇah/B7ֲlo,\Fb4)	xR˄l4'u lcl8$b@ڌ 0cxoSa0C38E(0d*$
(I
8΄ԣbc5qy]L0q}>.9mi>RY8v^LNyPV[ڶ`0S*]K
]3ͦfPwKh1Ty0v`tҦǪ,:ݚ )s脜ѕE<<p VQ!
CaśoArj(k`_<74~>T`.-g_+`'W-h
QôF`\E?;0Θb^S
*E<c05AEehX7!|©<%mu4d:5>fY77Tzn{gU!wp;6>HCEpv
y5IHXPI5VH; 3'EU)L$an_L-{,لnOw-%7
Iɇ
AN$?
ؕN~=9ȍ)CD^FH [`s<Q|
:I6p;P[oG]
K/߇p%{nv I8&O'W.vA:V	3H'>hq.ߡƨHF#,+10G,	({OI|*PPINMA~ ?`?eS3y:>>{d9;08u6Ð:ֶ
<8"'jvy"p,kQ	tAm7mbVjƣ>ެl43-rPBp-Cn4,k<V`#-ǔN	2XoQ?3ߠWRDOGbCUy0:n1¯.h!q 5UR:]۠ȋ`]d$
I}'ndvAE֣=-ٲ/5C?vaM񷠔
;P߃})c816/`y^B{]px_+sAؙ]8XHb=V$RPb#D	7 zIO܂|RuÃ1lq\q>[V<-0#A5uYȎXRQaTeٙЈMB, F2nflB;/wU4FpT@ǪG@CV0Oy±ΎjG	D<ie:U瘏;"ܓT9O.<L-0
< )loxݒ,	ŚyMƵv<B|iHMcixL¦Du# ^p<Ǽ( ("Qi0^)b$LáLt1
Ѱ@Ec^&1>^{1ɬSp<!#U8M[X(GR8jpP:~۱̍})ZzrH]"T$b fonz,m %Z"J53(Ԕm[tP0JKQ§%y8Kccݤh7)ډbJvi[IIHvIm7\ԇ2u6ݨ@6JD.VzbQD%!jl M],4QB!$fPKPKaCX:Q*p?$V~*xYH
o|"!Z&TrzvbJ^a},X~P5Uk/*c	RxKjPƸ`eT$"0 ԟ4[H{~s^6g%<=VnJfe۠OqrsPڴofh8'0gRҴDEmv}6*=ORoLFqyn=W
n2-/l9>m(J%'e]kVaSPi:׬&]kG=x (c$6~v(f7t, q-d#S
Bq7Cb3T;`-Rlr;q7=phEGNxBC~xN< C{#0|!#Xw}vg-B[T:ʔ9X,_BNea@A#9)sZ{,[
 2
m7ُ,\i-*:)])DC&1)ʽ"șF0.lloCݑOI]0To9T(5>e4Єht3fՎd8n9wyEeGyilhٳZ;ff-5	zsÑg!%ϫFgW 43h09%~9wOƉaT?AP%i/׊?U*^C:vo_{~+A.M| S8,tK4)!>c_w<.,RO`~;[y3T25@d5.4?
t40`=Z;0R3RYD7&\Pv8gW{q$*T'(,X(v!LȦș
<yfT斻TzꋈS8kS c"%dI
 <HƤJ{\bvנ V5Zgz4AĲAP@ZЧ1⹘3XǃgQ^baym	Vy"I78d/pJdR(}csuFU'Qb	\2\!ErqO\=:jf.lfy7NHb=.ݮ]gjSXc]6;k51
a(\bmY69
~Td9P(P9ɅP"*YP-oJ6Pr> W1 PݻіSAAr.a\s tW$pj9az;lv!ur=*ȑ!BGbJCG54|5XKVs
:]׫a[k3t/aXY@R=<Q
p|cCJ9*?a))00|(?]	
eH@3"_\W+߀	m(bw+|*Fg*ÎlPl.8٥*/vNXl@`Yx~+s2|>+z`u
خ"*{7{v*jKɯ`?yqb<<Yӑ-11ư+wee Me?v"D~R~\0:#hX`@0T0\0ZӠXӕ( 8FMǆXNC<n5*װpԵ:pYQЋcljZ|QI1!6ޟubzM
}>0 ۹Z@67Fj޼Ů62ެ3iS&TpN7w"f"2}Z-=
T>,|@My}eNvDmGVm{P;$0ENvk۠œNV`IÝBYT:`ŦZ6]YЩ;
kt0)JȨfS/;ܘ¿~A7Y|K,VGn&Ґܕ1]	<S5iR_m
PdHJ!Cp6
0QSPCVJXUAPQm.ܤ-[G[EigRxJó2Vk^¹k+
-oj
h3	w:60lڅ,I%kYv	sk^e˥(uuSVK`=!'zURq;l>{#t>nR,&YSjH:ݬ*dd ٭8ÀfccmFȁ$e͛F?8F|t ts45ְ)jA,'ktLP7j7D5;I6ԛ~nyHLAL뇩\&rFf-<S`u2jW%|TcW>b\vGO>(d,zW6Yڬ>t!6k(]Ɔz8ם#_}u/`׻`Mw ӗOvLnZ6gFW+Z	twuw;:=1NN͵/w;G]bc/;]cS_;g:g]b;tϹ~	|C'?b]/^/^vjI)p6\[}p-	C|N|n{'^L] ViVx&S<
Q<-2VIY?`&`u!ŘmHa=\.J[yp [兰C^˟>y<)g5^zTɛ&ofiV%7r3*ogl͖[by[!6Ȼvm`;NŞr7{K>>{a#<Yr(yGyWB8yH>'FFoO3||\6	V!媕/)0t(ύPJPȗ`n7i"=ʘ;UA3!PKW"&  L  PK  5R            J   com/sun/xml/messaging/saaj/packaging/mime/internet/AsciiOutputStream.classSIle3c;4i;t2)q
.Y!&@ES!:q48P8p@@$D*DH6@X% !ĕ;BCk z0A¨m!pXON"TaPǐqHǈTO-sn9m+P
NyطXQ1͙1O[9OYpy}c)vwLMuS
ff$/ft=\3ؾSsO#c\6Y(:ɳL2k
&y&9ofZIqcIo;_t']5{ZN2`~Ez4oRcTUxٴ59Ā'6FG%5wy07vt2\1FlWs~3X30E=.(ۢh$,P'tDю(}
R-m(&$\rxbdcxC+l~ĖLsMQf
-1aB'ї;x/LfO073u*Ac^B@@H (F"Fx	M+FE+c7* z=*zu"f:eOWﴔ.<MU<mkފ:RPu*,֥j+2]e@f6⫨XX#AW|jxS`O·.k27&~!zkKF0'_02ќ8JjZk5굃S&
rfA%epLg֒|J$D~Ta^?+0M畛Tb|P.-kDqz	m,B5k"̐QWxq"4,+oʇ)~%J\H	MF}T_EG
H4 ڤf 5L
פ+Gb>8}i
ǘOЧ(gx>Ǔ/,}6[{PJw{΃L~o=Ƿ^=\X,3K(9TA' boN@kҷ	G졟KzWh߹jEz7PK?b  w  PK  5R            H   com/sun/xml/messaging/saaj/packaging/mime/internet/BMMimeMultipart.classZ	xչ3?3,0 [Q	PąI2d&hݪhk7{ko-F7.UAQbR[jZmX0d>OΜ,[>x`/M/zi!'NKIIޔ?J4oK'i,ޑ/nJл&g?L:䥡I4鰛xily>pS/V3yѰKU7;ˆ4N/ؔi7{sS륀rr4n.An.̡",CwP9dI@FK3BbK4^E#%AiFa>ccx7ORagB2\&$7{DҜ$yd7W
S@{|NrO>]z3M0ϖj!R#oliJ3O7&wSdu4fsMI&Itsj͟?oɅΉǒp,<q550TG"m'SÉxgnmx}3m#1h6љjL%"£'6e6c+01MLm6UR5X
f@LR:q91'h,)Xnjxsmy8o{Hܺx{E3V=LpxmEGymTDcH"IU㻾-`_a'3ٔԁVY+6VST4N㝉O̔&>L@<SL?q@͑Cb˚LEaf٘T&sau@N6)Ƴ	͆m kqM8iϢIF۴)I|I	k-`rVGR"5J}eo!#XM	pmao3:8b["O`vL
M8M(jV:S6u%md66Sݪ赜VưX+nY-jdX\upxry9G%E;˔vXͼS籘pjhy>wF*;:+ G!؆VY)-=hF	X mM x-ĈwB.bؑ᝭DbWZ,l	::얮љkC",3E9w&/4)/Iewl>@/oQks&SHN4hr^5M$ꎮsuFa|!G]NW}:Ń:i6H)89p*h#mEt>ORJ2rF/
GҗM>G/uLi5~~c݋LHL3>	٬#ŃQ9
D=؂Z'%il7x$SdgGG<
և@ǍίҊTMgEW>^|~i>>Wz'-a!!8/'Đp3+<.<>D:(9F`<LWYEX0E6P;"hD0.h'Y0*|>_{>i`5hk(k֔!a
!(Q]xDpRf^Y<X2
ko![x}(}°\+)'*XC_+f!#RNKr^geG3D-ME#HH.>O:S2SM2k;*C" %O}:4C h,7DSkMxK"vq;}(6Zlo qY鰐
Κ#-QRp,=#ܢ'­"X2~`$Zp&'0hnC@?yY,Xu	ش#tm>hn >ф7W}/y/||9_!~Y<AzYO/JUW+>!IV tZ<;e! "5]Z+wgC= #)	T";2
vdF+CDPMT:}Q*XىC7R	|unS[h
HwK$ST] o3&s	 hþˢZ[âc!;
΃stc]IE}cPwLR巄7<rp-&ϑεJ>v<mHč7Z}
km&b^}X߾a-v&"IAI~"S_?2Da~>Y/rN] Hmj&E?)zx=Aװ6c1EbGgohZ
<YQ8/O-H8d프*&ѬV'(&'#Rrkܸ8;>G	bJ8oqѿ_~~\enhr"=]!c' =ޝN2B
h{'3 Wȳ$G_ȱrɻWu%)C{>N&͡BSΠt&Lh-YTKU8t5~kln -߅]oa
&/`7v+t;`
awŒͮųfK.MEǅФA=T>*)r '@2p
!|ȰBh#hqc܎)cWq.l?&rC0	G4
JVh+Bġ+s
nʫ{(*JzldznB̡^Db6H]X{+nO
tXl|C˷ƖRuI,
[Yj7qogs-KG^N(Cc1Ot?_$j)/	gwӨ*C91 ʬ/A˨{qB*տ+2PG >rӏ)c	`):Ǝv>H+YZM?Z	E	W'1DP[?t}nBNnʅɴȡ74̤^a]n4&bJ~8Mv&@1^GM3kx)+:x2V.j9T  Ȳ4l6F{'wQEz~w?I[)2Z.-MSN1Bq\e/;Y{r\cU.ƲIS>:͂"`0cO)f|1MӝC3<Nx	AY*怓?P8{ZS
\Bufk4oiTBzN? jy7j#7CwALu3]!vЏؠvs.yt\_?6-pgNEh }.n NPf]t(CNDֽ V{e4(8LtIwGhI?0p
z{aL#Vq3B30Cs}͸3<	8w0<Zhdn0)z6q*$#%R6GFBx3b02 [ޮ޷nnW}/ߩ?{g=_]}' CTeI4)'x2L'Ip4gl\^2NK*,r3;K,!ia\*[ ?#gھ{k)0:pRbs"KiK4;85a8ܕfc,n%4Hf}|R">FYwL1~ǈoH?OՂ1)s֗#V~V0XM+fɭQ9|W\eCwccQNPn,9~7^ݽs>y"nTFp򮦱&pHZ$JnYyAgh9'B^OQFJE1ɍ(VG"bxtc9"wF3Z\biq=:=j=ASD.o-mH]H`gg~_|hNhtK*S8ׇm΀p@t#7pĘ:	7*
qIjH;bi~X={_e؂>x?U)]Rls{7ed P]IF54Hpo\h+yi
D	F)[N]|6V+Tq=T(d=cxo=GL)v3jE%z.pum6b66,2{1EL!3FrI;Qox
Bq	pÞnGQE%pJWyM֟AfU.(Nq/^96@~DEvBH!~9?|s=FJ# aM~KNpW4~\+Ə&v^vJr0qSro"l8H]0pF2Akt-}[rd5pmI֡2UTh|-`K]FM#seWV̬6Y~〚͢hVOMt͂6[agl><we9+i]iz>rCyE;wQ.ߍ{
C!D]pmwL~ μj!8#Z~)k }u,EE~v+(J4N
zHfp.ux8c0,xrprrRe*SM
RCx*|Pϩq+5T
)Re@MR
5RMA;MMWj:Eի*MjDVUVYuʭ?q!@;гzv`BϮU'g	?6d`ʍBJE<T.aK~u1=	rhڈz\FN\QɌStxA-AzigŭQZw$̝y9.	r,N~})S)9SWvCrcgߑGƝ+q#{9,֞xN+(Z֪tXa.{	jezif鎧;ň*}s+k.Q @-Bhjbƪ%Tdf:[CԨ.BjQ(ZhjKZRmtj;TvڣJ ^X^Vեޣe!ohgL~pu%zH=1V\0Jr{;T,oWF̒m4D-,Cq]FKIN^hk{߹ʁ2"FýUI]CW}q|[t66?U5~jBmL}1Uߣ]b(ڗKf8C{ʘV]ՙGO(|,iciWT7zYCIeӅ:|#0ԬUtD/*G0mAe,yxXߑ]Ժܞץ!kvRN~*B7MU>LwSp̴wmbێ=pأLhzNW{F=Dg>jRj#Tѕj?mV?ՓtznQ g.u~^,ScEzRDϨ_dl7&6+=Lj+ae?G*3t#Oz1mDLD͒K!RʫͥEz~1%W
{ekrdy+Ö8ȦUf-J˖3̻*;	#V
ȂsB^gOAC8,pXPtAUѬ5 ʼͱ_iddEH;YT^_ΖMF{w1[dMPKǵ:  1  PK  5R            J   com/sun/xml/messaging/saaj/packaging/mime/internet/SharedInputStream.classeJA'A|\yE=augZ̓CT0OG	Vӝ&EYT,tQUm'[
ig]u0I=,S?rHT@~^^	'}tY$\5rٞ(q-GWҼFkqI3z&M	651aO>PKĮ   "  PK  5R            K   com/sun/xml/messaging/saaj/packaging/mime/internet/MimePartDataSource.classTkSI=b:G@"C[1<5Z(UVp03J&*VXZ~V==ĸ⇕陾x'([T}p,Y3L[8$.ZW,X2fŌu
tU"ٲN8~u6`é+T,/t-Б٭p}&/*	mbu-W}CVejWMyQs5ӻAD5|DySm).)yάpI
RQd@?mz[x/ۮF^0̡%U)1+`u d-7-vm\HN_җW>V"ݢg1Sf!ܲ1A98ncEqG`f?:vܱڸIo(xσ]\0{(@`9N[^.{n̘Fޖ2{/$ɛfώcog;HB3ţȫx/u-]+_o5EbIm8Մ9t,~0sx9l)>U؅(_!F8( "F9;qǀD|p>s╅HFO9&B8fkdw{= =1́ɍ̚6"'yC@YzƉfAa$N18~M$;?8&/
uI8d+iZ$ߐomg_#]|(,{:DHO$(|{~RvP<یђfI6hyʲyhoawwd`2sPKfM  q  PK  5R            D   com/sun/xml/messaging/saaj/packaging/mime/internet/UniqueValue.classRkoA=
Jmm_Gm61#bwcՄM(㝥&D{{ܹ	$V!dܖ8.㮴)XK V b%H;0D¹|"{ݦ`HV
[px$$]ܬsǐ9چ˰Sջ25K.ovKs9h=a	Ͱ=Ʊ/3LKxdM\៸fr*QDha6CqeK7/u}G/8u$H
?J1L{~:vBêfdk+ǰby	1wM#tz(d(;3ެQOsIai*2oRiÌ;+4pP}Yk"@ 'id
OoD,Y)!\5YdhU	5cDO~YHGa7D
}NH|t{.}e<
kDZ
i6
鼎E,
/$-L\%GڗiPK̳>1    PK  5R            K   com/sun/xml/messaging/saaj/packaging/mime/internet/ContentDisposition.classU]S[U]'	$--Pkn@G)R>R$Gdr/IGu}32ovOquNBf`2ws{9~
@70.#B+3j`a0{a30i`*0j@yh01̌2Qef
|FƜWއ,#fҮiG*f="IYxYY$mөD6SHJײ"+씌؎'"Ęc{9N'@EvFjYfgT@q+9gem5OU=	4=gK4G"V[$/VFNRfLZ	Pz]:g2K>o]D#Iu%LAc!Vx2!qQɒ+4Su=Yl*a@<CLMS%Om>z\A];dhN&P3l\޷9x0R&ԛx
WyO -}-FQuM,≉$0vVJwueA&,tXFi6㶉ȄĒA|bbctT~k22#7&vta~l9uL˔e;	?tVUuV&#@=iﭏ?*]{;au h9),i݁Y/NԓouZ3 78^j?*|/OS6p6¯x']:eC.,Ry
ОBeTeb|	QUf'۷aLule/VNDzu?Pٺ*\+g;,{5"aA;F&9Рs 
h֠+p-c.դ\ܝ\y0PgPN8Rp}yEeh_&\n;([iFV}n"<!%B.N%BtEO׋"eKsyA}ǘDPع\4).9;8fkTB~s%}u@Jyʻÿoo89ňD9ҹ"2X3BSzTm{R]T/(g5|?k+kqa9ݫ|K=*je~d@Cj%|	$TÚ:GoPK5h줻    PK  5R            J   com/sun/xml/messaging/saaj/packaging/mime/internet/MimePullMultipart.classVs]Y&NIqh"ˬqGBmqxFZڕZ'%$G<@?~љ~og(#G鄎Fw=w%^kEO	yZ3Bb7(G!>g
1юBL	G@)8g*2~5	TB٫yQ 6p_
48ߎ#wh%/+D\OstΞ-leJ-]:)׼]]TYWxzGJ%hZ='JnɩԊE+:ov`Ok՜GkZ\ہ[c1+{
Y%˯yBh>Z|۞*vp)V-0Lq' vզ1lW8ċ[x-ǔkw=7Px6OS
rѶ3V+8ՓL9xʮ^݌pN,g`Z1p+a<Erdd@]і|]9	L,?79>8b/y6h"yC))a0o%=GRgaCv];"1h;J5BZQ6"Lk}adWq1Wu݄!<f~X&ɞr%ޗ
L ??2cDח];]ZO_j~.JL_+9y	]L+mK$l}M4+nx){QرIPX9yQ[MM2gݠl tk0Ś-1!")Ub;C℆2x)?{Sݠa6~!QغαІYv	mDu&oޕcR^
+ߌm3}bTصf3fiKhmK
鳳vuP!EZڌ|W246&2u;7ڵD$@޸k@阻
keAcǜ]aiD=X3sNN4&
|~^%]A]r4YDz@|9Pl\??Esz!MBB1RM5}R깊6ôTtlYV*[&bZ[;nƵw//͏>z{1XaJ'Bq
1^gÌ8B)PkcN
5L _H?LQEcb5Oul[Rͷ<Al'APêS#_m3+4Drh0$h5_
;V}BxῩg$#n̸N8F
?D_zw5d/boZyY\D{:lV2fh%p{Q>ZM|D.0_1!l##<9L00!V0G1O_dqOP8.TKzX騮id#B6rkh/AۉG8n`aǐm'$gMЯ30e=2G!{s
zv_wYI2RW>{*밤
0IO'ir8nA<Elr,r5}
ʘ^$)rEL؎X#l5pߌQx;c3Y@:[Wͫ=ePK    PK  5R            N   com/sun/xml/messaging/saaj/packaging/mime/internet/HeaderTokenizer$Token.classRMo@}k'q\RP>W@b!|B*!mR%JL$.Hwv*7q 
C 	
NQ
|}o<3h~=V	y.";*lg>C.}w(X!ă	Jg̏p9icr.r#Ie:PO̽|w_{;*w`4ns7m3O2+ՈGKћC|d"ϒ􍟐{7:̴q#I"(N&~v(HN8ۇ;TRvK}U"-괱%Ҫ$ĶV}Lf a)g8^y%?w
lK*@S ;y%粜I|y'^+/
t«RHW,[_chփc蟲52Pl|vq2mu CLF!eT#|
g26_,:hNfnffܩt_wi_PK۝    PK  5R            H   com/sun/xml/messaging/saaj/packaging/mime/internet/HeaderTokenizer.classWkpSt%]Fؖexe؄\K[XH2uIZM6I3%33HJl!v#BO#NL3IٽI`giaݳ|gzG 	Aͨh¢I1&q7QNbL4qI1LIQI1ZL~ƃ*Lq	?<h	|^4g]xx$9a$Z_"acz&cdL6M*OPLOVLDSxHdY<#GF'<t&jSrJS+eRrvoݴPޝLdz"{DMe_߾jρ^Cd<LPd1FPJOx4n	Ɠ01B^-%MD@`agaT[M'lW"Uɰ;blM*(=@-)N`7S~߷K?r/lN0zF*e?ܙBcFvф.B4k헸$O&+Y`yfy2
GǙSd0uL{_ߢP(&DeF	tLFcyJd'Sr 3#@8ߞd:lFUߕ6a\C;F|` Z4:
miyhX/vl!hZcJwsqa{أq]C+h"D?;3FeÉQ&lDV!ti#"˄'Yҧ<K}bWp4<{`f.-ЮL٘2ݙuX͖V`>Ew+7ui#0-z*%	^hHo549l,MeLQٯ6ɾXQΕxSx3	I$V]
[`P+m9(gfkj0sp:oc65T7Ѐo2ooc;MW؁@J;%D! mRazB#rJl,es[)({]faae;-A5zPjjv,]m3VϣncߗvkLvZb	k#Rh5k#U$ZCL<[z|oxj<c	yǿϣZY.w?cwu6wwEA+a2\ziDs}8گ]ԳD4!+{XS$<,}WzoΘ{ACu/C<TT;vŧ6.НFfPim`}3U~o)I
-3p^PE\UrWGٰ"/FițȡdjWQ51ewU1o{W`4b<gS<JC]Ep*q*zE,I_6j%TN
/ێJbW8$.6߸#wĆۥ
|4Vs(X^t[pc+DqOfk7|u~:/ӟ\V?!oߡ?¿p7>9׿LKDLv\5O|ȃHȋi)>J䩊lTK*QS+-@]HCLôNjJ:Oz;^My6/h3n
갭 mm]{.%ɁxdJ.w<̒B-=׹c~m+EGpPShXB9<
N)SƛXʴ(c95jZ}ySPH|jM|lY;V9Hm%[˧Qzzc?޼\`T
gԃ2E~wS_zqd~g+g	36
γG|^(){T^O_E<vs5\PUZ7g>Ey=m/b-p9p+\{V\XvOÊ9[۾\>~+d?%:8ATa4Q106ң	l#]4^
cE0H'q&x_9%r1Q5ev+;"-y)	H&8ŏاW0Ĺt0G"8ƒS.U|kAɶjvW|ɐ5*dI\:`x;ǸWQg}dU)PK.7    PK  5R            B   com/sun/xml/messaging/saaj/packaging/mime/MessagingException.classSnU]{b%SNАB\3Vϸ#_
$R
aMb	>g}Y{_\{"xUCPpQk7¸!0wNCPy9eY$(uJ*nLjַNjvZ[ 'ش$֮mXFhQ1fRqoێBҨNntjUf9e3cFӬ5f'֣EL%TWv[4E5#$$lCa[F"z	3S8wgoIX޶VF...E=1y,e& 䚳b,lHy^iMWq"nݴZ=ph*U[y^Ĕ8bBW`S* 	gZ<^ڌ[O㶓ӆtm:긆C`rq	8xN#fi	36T&amUJt{)3vB<?D/%299o҂`r
x	a;!3(S}N"\`LCBzz'q}dV23䧀i_@{t*m^?A<}x}lM@Jÿ|ۈФXr_ Ktn^f((+gWtGq"9ஐB*=Bf꨺%Z 3ѡ=h7R^R<dR{ރ.1e#`,xH&:*TXз_H|n5o[6Xk57Fx9E(q|O9#+|o<
rsdIaDI=(:2!jcnb+x1%8\*PȤyPT+Z:<xI-Ă}7CyePK:  j  PK  5R            6   com/sun/xml/messaging/saaj/packaging/mime/Header.classE10CRR1 *B$-jZ8 Bɟ
`L"H#;-0_,%?,W)*HC̶,F]aC5_ulN;]4
?vZ@^Q,0B>IPK'      PK  5R            D   com/sun/xml/messaging/saaj/packaging/mime/util/QPEncoderStream.classToU~~_|g:tttHalcjYbAt[kg/201L$f$ x#1?yOme11M^_ h` u8B@a#Q^>cr 葽{wPɗ
1ȵrt:SgByx2h%վ!xfʀ|OW6-6z=*Jy\̤&v5`.#$LH;kt*w6ŮlZlx0-Uѩ\t"S*Ʋh)ePWDv"4PabMOYBv_-f|70H޽<:JeeFs25Jg&BETUh5IЬ}s|XQ
X٪"Ή'cW9Bd-h6kPoc VmlGT`}9b6`'mM`#68Y6-g57Px;T?1@{ ($%2Ink5 C%6Rh܇1%`
XF=,5ޞ&ޢdۃxTi%D\6QZ"-*~e? ^tjU%^kHx&lb\Y>Ҹκض 
˘{
m:κĴv2w-<fIvLDP2Bן0?X]T->=i1[,2!f5\ɷ(qJllq87"0g#,d-? %0-fXaP[%5:ۭa4Ubha;[w{v$\eGrxe+K}0ҥ(bF\ G&^u%Lq-FM4gaao{'Xs[7H yZ!78~j_vU$Ji}l.yrA}U¦XrG٫!#Re?X9DM.\$\<'/<wM^hO
MuݚԖC<G|-5Kq|I|W'k\7xr^cu~yn.MgnDگJ&yn>>Gu]QWwT{IKM$ݪ5DҫIڗH* z~O U'1zT/V}Ġ:F\!5!{t;u
PKY&ER  
	  PK  5R            D   com/sun/xml/messaging/saaj/packaging/mime/util/LineInputStream.classTKoU=מc'MLC%uƦ54i]hڂT
ɸ`{yD`,Q!%b"U?	iehvȚo8|wד BYGi8&M^aLh0u7uᄆzkz
s^ˋmyUih6
\951'L*͚|dݘO]-yUoZaܲV
醡}kݶB^ڶy6kőװd$=i	{Q'A
29% *Z\(7yj^Ho6"kvC^)
}#oNqW<y=.[gяYdїCY37pF=iYw8I
SYySM`YO_{;R)KT0PW{5\VIA`:~{Uc:Te:2sv#vgf.L3$7 pRz\sD'ΘBN m? Ίd10=иUĵ7#斄%%YR̗X
Hm@r2R}?<)X.Y-H݃5eP~ݭG*{ꢲXR$d1ibY$"Ǜ;+tUq#$;B,cvǚ)L#x9\_%,*,&f	§;X:>O-ظ#ΰ(RR]U<ؕ[g8ˌK͏|F:^Jū̲#kx		.)
z' cX{u&)lrmx)PK30a  T  PK  5R            ?   com/sun/xml/messaging/saaj/packaging/mime/util/OutputUtil.classSNQ]v8@UVEA{QFX$"	I44/>I5~`eim1={:g4Lh
injȣ MQC	z-I;j>r-]H.:U'\ʪ+x23X-6|o'	Q5= 0Q3gWl:k	2	՝v||nͰΦr+fm+K"j&~#Ȝ)=<Z@Ŕ_q+u6)nȬ7Pjrbj~nk;)uOG#:1bZ]踇Ys:池tXou]}6m^`}-!y5~x]
2zaU`,!*1C%S~Bf!NĐMFɫ[}al^kĻ}ӎoB#RUM%E
%Vf;/M(Kk&H7?ʁh`)isgErD+סkSH_bߡ
˞&[&7K/eIBm"]\S98µ)EħN<ݻwPOh/PKz]>    PK  5R            H   com/sun/xml/messaging/saaj/packaging/mime/util/BASE64EncoderStream.classkpWgofِ		!$-]r$$lMX;*"VA?T-a:j:ަvC?K?89ds眓4	G}x  أѩWcدq@wp!]}[WbN_1գ󩜂\.ez)vMƒOD29=k/mS\BU]șH(s`.$wl<ڛ>%|r4&RڛF"]xVa_o4eT2JƲx<5F"'Cg2x"Թg+XƖWp\GSXnf9:d1QqFѱ12K)L_dv5MT pل(
h"DO̸!c㎧6p-t`*.:e
ho0DcqV}^/ݏ*c(E+u
E~4bk?VJR$]2KP6ӿ
+=:)</z˕AJɲ:p^C^+P}o+5ƆD%LzZA)CԸT5hws7,L6XnV-vE裳U@58kڥf4K9FsϺ/N-8}u+VaG*S3+ѵ9`© ?]ɸvo@᪎.Ymтv}zi{6"~\#KClqxAY0{u;8^꾏qY__S3`fw9a;r܄ԲW7eޓXSL$#e-)wIn]l79IYL.7xRfjym~ѪCU cAZtZ#yTiR<sPXUw6:ۜz7Q}^:.43t5%
Rrad]ږVfpKt_ňmP*۫SzF<=`np7;
l6MZa\d>z<f|<d6~Ii| 4.s>+fWE/u\Û2WT%0:5Ճ؏51otPLq~ٽ;o^_qob@aNjoc6N	":Rxzih`2܁sO54+TO;TcqXiv4b"VCfHB9?e&{<&-;.-Q:}]B*ؘvkέ)	ٷy_^y7z7p~yK7?	Sd3^/9/x~_x
-m^yx'Շ?Ťx!mu8nuP$Eާ1d^P}N:7"v۽!&T泩;cUZ<VUj;vM:xw#nӉx6wߩEFy7as8얽a[5JpX< H>9D.^/}d&K?Y"9J Y&C
&Y!+=dUY%r%kȇd\#Z I\/'Z9E>,	I$EI(d@NAɐ$KnY/y2$g9Kn)r#IIfBVr4ۥ!Ni!w6Uml !oD_<i'oPKz3I  L
  PK  5R            D   com/sun/xml/messaging/saaj/packaging/mime/util/QPDecoderStream.classTKoUg&8v2y88nJ	8i)Fii4:v&~W
XR@,h"X! Ѵ*aP*|w<B	!s9<׷? 8t p,Јfˋr	%,oORz:dLލ8㔀/crYh̬U)*I`;]U󺙰TTuN2Tqhl5sf&Ǔb͛e[ޡ\LOTZ>[bV\MVع,dkbKJlY&0P7ϙ]:],MZ*9v@`%DV vY*:&d*%+2\si	YJŲcչ\hd|;yL5mKH.T+W3$/ :0)pZhC{DuLу N㌎ UI^8^CęchkD<c)9dp<z՘k5IORKl-,WTmFqp|?-|p>֔TYn[e> ;݁׾߆WnC6 bqIgnSc+ 
[0%7k<k؆8iIyWhψ@slmeVنOFjcli,j6o5B.{fܳkCϚORUQ0"PlA1{	[Yt
I$3'11Lc)c&a	籌!
_;x
7E`sc<qq5:ٲv2ap(mCۺ^OLij}u $
=$vůW<`hzHGϸS%]:o>aSdQF4V9DoDBP4^	ksboaFPfpc
OܼĠp{7LVRҠ0n
CT7(+¼a<ｐ$
(lD[/#<><_=~	PK&iF  ;  PK  5R            D   com/sun/xml/messaging/saaj/packaging/mime/util/UUDecoderStream.classU[pWJ:ȵS;qBRɎ:6N\[;u-^Kk{ݐVŸ-[@ۼd 34tҖ&x`x2<1wv׊j( >WC >I2,.Ɉd~-%"dLqygp
.-IFJdUȇPPaEIJx@TL_`RЄ)l_
`:aIW3*Pz=?'zv,1`ح|R|=QPy*|ٔ1!Yc^ ?χ)o
M2b)ȤXh#QS<3fH,35FO6_3̚V@cjۏp>ZʌA}$mKzgRرF
lcdUX4U"qOϻB&F2sY"Q'{z$HRA&͍J6hATJ|`Z;HfQQ;WKdЖFMGfssùBF*`EU<ʴXcm̤HJYK֘!rB8lJEq5$ЦfI:S.
Hcoޢ;4܅~
p}دa/T|MÝ1
qi1	MF+i=k6@:8qOI
Oihx	layƺKf~5y
/OzQ`MY,Ri@#teBNn
;J ,V˗.ۘ/K)>2
U/:ՌYvAE+YmMet+9n'zVrdK#E`CwHe"k8yC}5Wnfi/`喂0fs˶"l"O Yyd+^fwe[.weop
B#$OP/AļHDybw^}t}؊7a=66"h=hpV;6$1ٝ|X&Ep#9x@$v	!~ku!"	e]uXƳR OGЂ;lcq;?ߨޱClD\DoQT"JyDcehC>XQΡө\@}9G|3gqaZDh#T~n3 68 |E#ard|\%Ltc
δAKmۍxQ
k?O}wfGV2o5/t#[_SZ)J
/זjFԋ>WnQNj߬
(R\E
³=H#?/WrE2zWQsC.a{q[xq[hGI0t	77VF.el:ژ¦Hq"RqJa!=n{Ki3|/{e<ŋ4V",=7LaZ(DTޯi㇢_
ϫYL2
ygy<&b1a&e|2mwIS}{ϡ
laK*oQt$NEiy\G6'
;ff:}+nKcO盨tįNtu?J?Q7.a?ߧ<)}aqwXy:
kyv79ImYwr1r=fm;}x3=x?`esڮRӏ᧘y\/-sM(honV| bkQ]㸇^瘻GQ1V_HaȮCK#Nڃm?l[8-Yl
AB_=;PKge  
  PK  5R            C   com/sun/xml/messaging/saaj/packaging/mime/util/QEncoderStream.classT]sU~~dt[ҴXJivbQĉM!´jnװfvF^zrn.ğ=' {~<??p,NۍC[1_e.N˅82x;(.jxGûvu<fHoٟVkV5ly~mazڕJi\%c~$^Xd8{UNH%\dPV=XݵNcmmػui<GxNаoԭn5emմznkV'Uߡ>~g9Wc]O5=E!n
(.i@r`gJ}m^5)Ysʮ_o62]i{@]t;rrWNq#2	0?Oݚ1cґ _XqKFagql쥅|}ɗ_}}-CP/}x/FRHybV@%5s+YIa!qȊs=ŞIZG"e_7$GͱPA'Ql!hB9y%# a	1F4.u5hx];:7$}+8 cy#1Ď!rQ#q.̟1"=tP}4xs
, <	T Eг26^#6s@q(tTũ42NrxQ5y^I)擻3Sg2T}6ϤT=v ɔt vw}zkԣBC\'eRkfK:{7"$9r]$'1aC9,fCSIU͋"cОAg)ÞaO!=Q>i1k` { % K츐sRNfPKw1    PK  5R            C   com/sun/xml/messaging/saaj/packaging/mime/util/QDecoderStream.classTNQn[:elV(h[Q[({2(H$$ʥLbgN
>o#|c<wڠ,!N3ggιח ư"F`@=ܗRBE)
`$]*x(G**S0[x3݉>u]xy5Nn0]%'lY1uS$K[)wƐFc劭XE2e'=^ⅷ5W<QqfU!L$
yWs-rJ[
fMa@/E4=KuAWN-B5"khhEnPXM4L`R'2@BiOzOWDj˂
Zr]Ǎ;/x1!Y
sba0ss	/6Nd X`.`/H{HeӰ=[ak楒in'rǙN^0'Lފ#qѕ|"Si3/K>F! ͐ N
};
@'Ik^Ļ,af53BN}B`&}}p4~N)Cهuhh3VNl y6*4bU4ڷU%YBѦ/0N	\$7E8ӄ=CY+,)n=~_"xI^'	hep
LwPKa|    PK  5R            D   com/sun/xml/messaging/saaj/packaging/mime/util/UUEncoderStream.classUoUfwvgwҲ }hElaUj} [CK-n0/&>cT&6sgݖjLls=ww\b
1tc"J#"&EL8*."qLq'ԎafD5Њ	s1N83f#'"A^>6P0P9%
9G6aR,9s<-SaiJ͟γ\agnޭhؘB@RVع=R-n_8CLV!2vv.z[ְ{4Sȥ|z>Mr>mN36tfjEՉiHӕ$z);,>?Ζ
e\9ʬpX	ﳋ~bXqg¯Ug%!ex2O'eZ6Z(܉zvɮQ$uc#aG{E'b>+TKg+T׭hV	CX#hB;ĝHdxc6񄈽"}J&kh[%
V6`f@p8O&ʨ2?ଉy<uǜ7گc*NyE\m.-W
&?a6/ǑJ31rFGzE)m`nQHorեjQv e/wCR%Vo^lsE JPH ʷVwu>Dq<x1O4!P}>K\7Y%"t!wakCdF[aP<ļ-Ň{76CTgg!/H<ɓW:!I7}4\>ה&.oWB\ۃzBﺄ6+ՙOl!zA._MUV{m\7b\E#Bm{^ݎ*h;T;GAw$X=z}zRԏ5VyL5M;ʏ%rAeǺ5y~x-z|ˇ[KL52#L9#?,0"j"S';\ƈhF8!WKkhY!˹˱yN\-y`zP>?r˲{ȦUc*ڕ3vߝe&xӇo9QwR!"UN
FSWnr	5lѨ֍RC{
:-woeyGEfz^6z#PSBc3۽u}li4]Wk_g7gTpO\ha(O~	G$]5ܚ~	e6mێ6ayݶaS0@G<1c>~Bq>޲B34߱sCH$t/CMzI7<icE>хK)ߍp~i|f+o
>"Ok3W>Ǣ$ :u[o-e`8βUfkP1C̡z?-ORA޴i1qbѴE,M>AG[Yv3R67PKU[  z  PK  5R            C   com/sun/xml/messaging/saaj/packaging/mime/util/BEncoderStream.classN1r@AEagb`bc$nc0!Æeh821|!7L\ >X
1iy{l`58L҈h`:AHB!gTx:PϙsXi.'șW
ڪR0=mi>/@94]AӀ!1n:4¦k>1A%Ag_Y=}9 ow&D:ut}_) 6SF}g@_	}jԾAʿ̤Yic15@I!*@S )Ӻ[g:, 9Id()4k:	<}bO23(]}V| PKlj  |  PK  5R            H   com/sun/xml/messaging/saaj/packaging/mime/util/BASE64DecoderStream.classVkl~'9	qP8!&4 Kh+8C96KJW)ӴMʦM݀2m*&El?cU6kݺ?5iU9焌4issy_ ;.t)!<[-zt[x3x=jUЧ߃E8*[8dᰀ9eWS1%`ē1tlH$m(Qh*y2mƢؑ9{fk<϶TtPW2d3HKmdl_nd $()NE#H&y
tvGS#\246FG#cHx(p#X('Bzv4"AWM-Pؓսt>ώh,ƪ9ե(x{bjHa"F"N#̉\:dcC*=IIżTGR Mb>t&3kөQG
wk4'ӓeq!iP+XJ/
%
ыZx5b>+Kli"Bhlt	R7
TdRx:T!V1W^|+8Q1
xL@@Oҹl,wZ(5#t,IyZj?$ߘol	| O+*Lh"4Ŝ=R%ۣBM|!5˂uAMh
\A&㪭ҶfkaЂ18TU)wq+*)-8ޠ^/8
SM.;܀!(M%L-ׂ8ZC;n2;!G:
LPOE&whUkt5>"jS͆vE>,*fJ>Ϙťٷ}" P$#̄?GDd745"=[]͞5r_/Rɰ5
ᚁK/Cܧz;uy9Ӗ/Ȏw/kgb+ݩr=sJ(^UG[`<o~D]q9s8ЯE7
Oh
))L{!%Qm὆Ł&<hFO4JLS[~;X	fƫ'{II]`(Us#T-;^es惺#tIW-J|
n/0Y_a=ej_f5}үϱvc3^A<4.EU\[}p5u7W?1-X2cזh"lL7I/3]KP0c3(<%D}S-:Rn0[ɴ|MYgerjci*U.dx`mtH3謲-W|棕}<VAP8!f.2dm!/#Mҟ2o/~<
]x]70߳Q#>?9U\?['?lFw[hsf'lTc6E6k0eL4p;M
XdC)Ć?&W[eqKnm]r[_X}aCn/l}aEn[vG>E\$^X(~b|(3,T^b#d?\ .2L\*+eĀ q!b<F\!8q<N\%O	j9B|B&52EibP~X'3z9J\##IZ1b#/)zA6:FD$7
'e3En$M6.[d:ocz,JwTK5ݹ2J9\_9lsNI)|Z|gė9gī^b{@\`gvH3O3ԗt7PK!5JS    PK  5R            A   com/sun/xml/messaging/saaj/packaging/mime/util/ASCIIUtility.classVYlW=/{lcHH2	!IC$fiB,4mL	:CB*UR*eRTUTj6}RϪJU-͝s{OO`A,F=~tQ*ypI"RD ~go8 Sq0"ᐊACGp4cr(b@ELJZVOm]I
VܓMv1Lq{*f{
ےI2[cD8MGpd!+9H8mĎ^Vg+nD=,T?m3thEѺ7n%,N	iZCVٸ(oR1l.y lc%-Е	X'VSγiJ%鷺pXGF8nAngӦ6#$ DTԩ!i;嘜-}>CD.2R9{c|ށ\|+&Y%)\&)6[yzHYg:TŠ
)v3m11mla
{EZɔce+c:]3wZR3JFP*%ѹۙ3U
fӘCb((V϶4m"+g/ė&6-
HkN`ȳ$ HVWUCH!Ra۳Y:FLOu۩/jsuf#Fs3i5T^Big[sRrV6HMpm9<s^yZ,nVYY۰7bȏW,|[˧!Q8{P躄V(焥L޻˱LP1}ŞP{tţ{+u_Uu|S5]A{}z'Ơqݯ^\X{z@\
pϻP}e̧q6Z798͞fZ3+Z`PW&?1罀ER9v>M1۹!\>.@U[XXR4)`#j	hx
mh^=`ۑ.nA;Ρa>uW=z 7[sDȝUat\mx%Qֹ2hUZ<d\kȶ8(ǯ]=P5-xB'*X.*D	B(w=w돜Sԫ*Vn7歾=FXɷM>GQ_roNP2̟$5*w%
/
.!:%>%E!bݕ%@Qֳ؊KLH*6	Fn6i}Fg	he-:6Ru׿#ۓ]ܤ)
rV>ibی=Ku!wI=KeK@s(2?{n{6pw?.m#=L^ED/_ne2	kyl(-mo ;
PF|3ZtӭlK"G E]_rWU\st_\enK6Dk5xKr%;U|?	rv|
iPKNf*  
  PK  5R            2   com/sun/xml/messaging/saaj/SOAPExceptionImpl.classT]SU~6$l,BC!imZ?Hv)
Ub>lh8cغl6ㅖvh;錿q|lB}yy%YlK	%$|ܽ">cQB">$aGN`)e܌㖄mn֪*bMĺXUk5tP+ZVڳ/_s]@_pO@dRtza*[U͸:˨7LYl}(j:45A_e
G+f t>Mű)xLkZuv]ճ*N5?I1gMJ8/ͣU?_n"6ĉl<5uJ2@
qulʎѭF2jf0ܮדm[w=_9eWMw9J9A[(m2>AAF+[1V*a5'ٶr^:\k-՝\]_ꖓk0ʘywdT0KÒJw+$[2tgps"SgwI7-"`{2XGạL3RSStèw{#ELF@O,l@U7D:GgQ(H@E<ً&K.+
gE(j}=fTc^Oŭ7&qҷ|;ÑG:uv7kXUYq'}U?餢"%^k]'{#x2H<qZvx8տR~EOB<PHQ041:1i80.b˘UnU"K'4OzY}#JNz@~*цJUsw~Jncl3$ |	_a_SߐԷw:&~MuD"{&OR熼TRϐL
bk^i =F 1PY_Vu1BպLר'6Rg~~Bc; gAYC.tRMU|ճݪh8UjPKGy  s  PK  5R            3   com/sun/xml/messaging/saaj/LazyEnvelopeSource.class}QNA
Oj7n&x'Dvɒ2 i ?؋U]/O PPaOCý4ahx5Bk5K7	U57$l'|ӸD(>nwfh+bkayX'RswB]CحS*%fP\Տ7nĴcFGA(maڊ:4CO={33q?1oT9h?!l~6;c#_)YYS>G!Y'肠99)
fJXYFY"T^PKV1    PK  5R            ;   META-INF/maven/com.sun.xml.messaging.saaj/saaj-impl/pom.xmlks۸ɇ6cs׹؞Q':m-y (|Oيk홻b7`e yF-
3:Ǉ1(SDCgDQi#&%(B@c#*/P $#>P<_kX/@pn>$EL*cB3r\hlݒK,$2JE4db^Jbj<eb<bsF1zcI,eM
uZ>'/%&qɚ/OL גК7h4 1 RRXK , ̀^K	BB!X"!'s*A2̛26ldoKBnXDh`0JVX.`W)cgτ1t8nʜi_gdNޑ[@#̀zfN"tT	k+PcjJ1EWuA7}H%Q#
[$8{
+'zl_l	N,
VA#0 xEbgh>EƂ΁1&TR{iKBAA2si+ɐå!]b4Z
XEf tԶQ}Ay4͸{YstM]d}
<o`*T새Z:5,[eI$,(%Xv-Bp9LW.ivҸ| R1aXfUV_PMnr~i~rrq02$E"v
[>p׌{NC2v)MnZn2=ٌNO0"D'up[3BKkE g\߄EuS=ykL=bOX88:I*оLS[S2ӽ@5jFlpmyRqX8Pş@ľPowCO㡊YtBǟ#'˸}D=[g'@Z?&~X8>[o~st̀p673 UDi>rb>
R"v;Y?3Fe],zL7yaϠ4ɴr;)(m_ƻ$v4s'뺔-O^He6m	
ȶtW]E[pN@ЫT<{0s+"wV]7sPk
_}Zbav~vɾ8wpFR=
 i֝q%tgPBUM̰A*T:4{CZߩUZ{(VT<:b![[/tG	L.<*"AKyW
;}Qo"sGAa=\tWV7I7O6Q֤q}(i:wPiWn˭#異eõS
Դȝ@=*37]onZ`硸4JWOM?{6]%DG[_X+ 	.zgc廡ܕHxC5ZK7FR]^Wt;B"(Zf{
-}]6:8,N%w|}6/ZR9&5A6[l1"M6@ތQV(7I_:=YqlHJִZyl|YRQhb}Jzyݢ1gQW%Uw|:u):2q`<w}a˹RỏTTR5` =ˠm/l^R]$Nbm:̯+]0
o;J,w@>9d'XqB
<N?3λo[[|ePhrRW!E*T)!Z]ua]7cjY\qTb&8I[LMzZef	[KSٮtiOs2ۤZ%{a8mfگ,P#jkca-EҫItc"m#\ i88ZHHy
NɴR+-h$
i3$ǟhz9ek|_LIKop_<Bn0Z~ܜoR|=<..~Nz
Ԡ0r%]`^Ǖ6COg0dMZ^]PQ	$B'*jQ3RX6)syrMs{rrn|Cv&.?j lT7t`V$J6|kdbeOZ<_Y^0xHP}Ȏ<T=U`'t_F}R	}?V>ԷLF}i) vROr3Fpr;PKek4	  ==  PK  5R            B   META-INF/maven/com.sun.xml.messaging.saaj/saaj-impl/pom.propertiesK,*LKL.L-NL-J//- $U'gqgs PKyEE   F   PK  5R               module-info.classTV@#rIA(7QAE
Z]C;t4IWʛ'Q.L@؇{99'`_zP-E?R`C6xI|W枌"Qt"(hg
O3d5u_DQFDhj-E[60"(
D*s&z\la:1׫ "oIc2610wñoᤱ	a!q>&n*Ţfl|ٕ~lU9h8~t{<y	o{uKJ!UI3͗0\G"=ucc`AwﲢrPT^dtNhTK\U[8ZoUMÙՁБh@(VwMg򪆕jl_5n/3+.JVWJnѝ$ɺe/iwf%*Υ*N]
DSLf7+c-C:&R]|ZYR|_ջoXl3'k;+WwG{s?%;*Гa^neIR*n׆/P6:;уYCLc,BXmi_Sl%+_khqR}5vk8q[;)6CYg(b-]R$PK^T    PK   5R-"|  Y
                  META-INF/MANIFEST.MF  PK
 
    5R            	               META-INF/PK
 
    5R                           META-INF/services/PK
 
    5R                           com/PK
 
    5R                         ;  com/sun/PK
 
    5R                         a  com/sun/xml/PK
 
    5R                           com/sun/xml/messaging/PK
 
    5R                           com/sun/xml/messaging/saaj/PK
 
    5R            "               com/sun/xml/messaging/saaj/client/PK
 
    5R            &             8  com/sun/xml/messaging/saaj/client/p2p/PK
 
    5R                          |  com/sun/xml/messaging/saaj/soap/PK
 
    5R            %               com/sun/xml/messaging/saaj/soap/impl/PK
 
    5R            %               com/sun/xml/messaging/saaj/soap/name/PK
 
    5R            '             @  com/sun/xml/messaging/saaj/soap/ver1_1/PK
 
    5R            '               com/sun/xml/messaging/saaj/soap/ver1_2/PK
 
    5R            (               com/sun/xml/messaging/saaj/soap/dynamic/PK
 
    5R                            com/sun/xml/messaging/saaj/util/PK
 
    5R            %             N  com/sun/xml/messaging/saaj/util/stax/PK
 
    5R            *               com/sun/xml/messaging/saaj/util/transform/PK
 
    5R            %               com/sun/xml/messaging/saaj/packaging/PK
 
    5R            *               com/sun/xml/messaging/saaj/packaging/mime/PK
 
    5R            3             d  com/sun/xml/messaging/saaj/packaging/mime/internet/PK
 
    5R            /               com/sun/xml/messaging/saaj/packaging/mime/util/PK
 
    5R                         	  META-INF/maven/PK
 
    5R            *             /	  META-INF/maven/com.sun.xml.messaging.saaj/PK
 
    5R            4             w	  META-INF/maven/com.sun.xml.messaging.saaj/saaj-impl/PK   5Ry;H      /             	  META-INF/services/javax.xml.soap.MessageFactoryPK   5R (5   3   0             n
  META-INF/services/javax.xml.soap.SAAJMetaFactoryPK   5R	r A   ?   6               META-INF/services/javax.xml.soap.SOAPConnectionFactoryPK   5R-@D   t   ,               META-INF/services/javax.xml.soap.SOAPFactoryPK   5Rv,  
               D  META-INF/LICENSE.mdPK   5RnhX  =               b  META-INF/NOTICE.mdPK   5RX  T  =               com/sun/xml/messaging/saaj/client/p2p/LocalStrings.propertiesPK   5R9RJ    @               com/sun/xml/messaging/saaj/client/p2p/LocalStrings_de.propertiesPK   5RAZU  5  @               com/sun/xml/messaging/saaj/client/p2p/LocalStrings_es.propertiesPK   5R=^    @             ~"  com/sun/xml/messaging/saaj/client/p2p/LocalStrings_fr.propertiesPK   5RZZ5    @             J&  com/sun/xml/messaging/saaj/client/p2p/LocalStrings_it.propertiesPK   5Rӧ)  b
  @             )  com/sun/xml/messaging/saaj/client/p2p/LocalStrings_ja.propertiesPK   5R)ӕ  	  @             ;.  com/sun/xml/messaging/saaj/client/p2p/LocalStrings_ko.propertiesPK   5R>K    C             x2  com/sun/xml/messaging/saaj/client/p2p/LocalStrings_pt_BR.propertiesPK   5RF   |  C             46  com/sun/xml/messaging/saaj/client/p2p/LocalStrings_zh_CN.propertiesPK   5R'ʆ    C             3:  com/sun/xml/messaging/saaj/client/p2p/LocalStrings_zh_TW.propertiesPK   5Rj\  13  >             *>  com/sun/xml/messaging/saaj/client/p2p/HttpSOAPConnection.classPK   5RCvG    E             \X  com/sun/xml/messaging/saaj/client/p2p/HttpSOAPConnectionFactory.classPK   5ROB(    B             Z  com/sun/xml/messaging/saaj/soap/ContextClassloaderLocal.propertiesPK   5R^d?	  ~  7             [  com/sun/xml/messaging/saaj/soap/LocalStrings.propertiesPK   5Rأ1wV
  !  :             Re  com/sun/xml/messaging/saaj/soap/LocalStrings_de.propertiesPK   5Ru=
  !  :             p  com/sun/xml/messaging/saaj/soap/LocalStrings_es.propertiesPK   5RuF
  y#  :             z  com/sun/xml/messaging/saaj/soap/LocalStrings_fr.propertiesPK   5R@I	  $!  :             c  com/sun/xml/messaging/saaj/soap/LocalStrings_it.propertiesPK   5R_  a6  :             ʏ  com/sun/xml/messaging/saaj/soap/LocalStrings_ja.propertiesPK   5R)ͩp  3  :               com/sun/xml/messaging/saaj/soap/LocalStrings_ko.propertiesPK   5RnF5$
  "  =               com/sun/xml/messaging/saaj/soap/LocalStrings_pt_BR.propertiesPK   5Rij
  v%  =               com/sun/xml/messaging/saaj/soap/LocalStrings_zh_CN.propertiesPK   5R&*
  &  =             ս  com/sun/xml/messaging/saaj/soap/LocalStrings_zh_TW.propertiesPK   5RE5    <             )  com/sun/xml/messaging/saaj/soap/impl/LocalStrings.propertiesPK   5R6r  >  ?             m  com/sun/xml/messaging/saaj/soap/impl/LocalStrings_de.propertiesPK   5RW2#o    ?               com/sun/xml/messaging/saaj/soap/impl/LocalStrings_es.propertiesPK   5RCW    ?               com/sun/xml/messaging/saaj/soap/impl/LocalStrings_fr.propertiesPK   5RBz    ?               com/sun/xml/messaging/saaj/soap/impl/LocalStrings_it.propertiesPK   5Ro~  #  ?               com/sun/xml/messaging/saaj/soap/impl/LocalStrings_ja.propertiesPK   5RQCg  G!  ?               com/sun/xml/messaging/saaj/soap/impl/LocalStrings_ko.propertiesPK   5RN    B             ^ com/sun/xml/messaging/saaj/soap/impl/LocalStrings_pt_BR.propertiesPK   5RfS     B             S
 com/sun/xml/messaging/saaj/soap/impl/LocalStrings_zh_CN.propertiesPK   5RF    B              com/sun/xml/messaging/saaj/soap/impl/LocalStrings_zh_TW.propertiesPK   5R=K  f  <             # com/sun/xml/messaging/saaj/soap/impl/HeaderElementImpl.classPK   5R07  m  8             ! com/sun/xml/messaging/saaj/soap/impl/ElementImpl$1.classPK   5RD0O    8             u$ com/sun/xml/messaging/saaj/soap/impl/ElementImpl$2.classPK   5R/j4  9	  8             *) com/sun/xml/messaging/saaj/soap/impl/ElementImpl$3.classPK   5Rxd    8             (. com/sun/xml/messaging/saaj/soap/impl/ElementImpl$4.classPK   5R+I    8             2 com/sun/xml/messaging/saaj/soap/impl/ElementImpl$5.classPK   5RƾD  x  G             x7 com/sun/xml/messaging/saaj/soap/impl/ElementImpl$AttributeManager.classPK   5RY    8             1; com/sun/xml/messaging/saaj/soap/impl/ElementImpl$6.classPK   5Rh~s    8             @ com/sun/xml/messaging/saaj/soap/impl/ElementImpl$7.classPK   5Rw
8  ׎  6             D com/sun/xml/messaging/saaj/soap/impl/ElementImpl.classPK   5RuϓS  )  3             h} com/sun/xml/messaging/saaj/soap/impl/TextImpl.classPK   5RN   6  7              com/sun/xml/messaging/saaj/soap/impl/NodeListImpl.classPK   5Rjii  J  ;              com/sun/xml/messaging/saaj/soap/impl/FaultElementImpl.classPK   5R!  5  :              com/sun/xml/messaging/saaj/soap/impl/BodyElementImpl.classPK   5R  )  5              com/sun/xml/messaging/saaj/soap/impl/HeaderImpl.classPK   5R$C    ;             A com/sun/xml/messaging/saaj/soap/impl/NamedNodeMapImpl.classPK   5R`=  '  4              com/sun/xml/messaging/saaj/soap/impl/FaultImpl.classPK   5Ry  ,  7              com/sun/xml/messaging/saaj/soap/impl/DetailImpl$1.classPK   5R(\  ,  5              com/sun/xml/messaging/saaj/soap/impl/DetailImpl.classPK   5Rr3    3             ] com/sun/xml/messaging/saaj/soap/impl/AttrImpl.classPK   5R21m  4  3              com/sun/xml/messaging/saaj/soap/impl/BodyImpl.classPK   5RLjj    :              com/sun/xml/messaging/saaj/soap/impl/SOAPCommentImpl.classPK   5Rg     :              com/sun/xml/messaging/saaj/soap/impl/DetailEntryImpl.classPK   5R4G  r  9              com/sun/xml/messaging/saaj/soap/impl/ElementFactory.classPK   5RY
9    7             7 com/sun/xml/messaging/saaj/soap/impl/SOAPTextImpl.classPK   5R*    8             6 com/sun/xml/messaging/saaj/soap/impl/TreeException.classPK   5R0D    9              com/sun/xml/messaging/saaj/soap/impl/EnvelopeImpl$1.classPK   5R~H  1  7              com/sun/xml/messaging/saaj/soap/impl/EnvelopeImpl.classPK   5RPjE  {  4             
 com/sun/xml/messaging/saaj/soap/impl/CDATAImpl.classPK   5R}s  _  <              com/sun/xml/messaging/saaj/soap/name/LocalStrings.propertiesPK   5R7  v  ?              com/sun/xml/messaging/saaj/soap/name/LocalStrings_de.propertiesPK   5Rf  t  ?              com/sun/xml/messaging/saaj/soap/name/LocalStrings_es.propertiesPK   5R^°    ?              com/sun/xml/messaging/saaj/soap/name/LocalStrings_fr.propertiesPK   5R?J  l  ?              com/sun/xml/messaging/saaj/soap/name/LocalStrings_it.propertiesPK   5R$j    ?              com/sun/xml/messaging/saaj/soap/name/LocalStrings_ja.propertiesPK   5RZ7+    ?             % com/sun/xml/messaging/saaj/soap/name/LocalStrings_ko.propertiesPK   5R^Q*    B             e! com/sun/xml/messaging/saaj/soap/name/LocalStrings_pt_BR.propertiesPK   5R$    B             ~# com/sun/xml/messaging/saaj/soap/name/LocalStrings_zh_CN.propertiesPK   5RX    B             % com/sun/xml/messaging/saaj/soap/name/LocalStrings_zh_TW.propertiesPK   5RQZ  =  ?             ' com/sun/xml/messaging/saaj/soap/name/NameImpl$SOAP1_1Name.classPK   5R_זN    C             ,* com/sun/xml/messaging/saaj/soap/name/NameImpl$Envelope1_1Name.classPK   5RDL  w  A             + com/sun/xml/messaging/saaj/soap/name/NameImpl$Header1_1Name.classPK   5Rf`J  o  ?             - com/sun/xml/messaging/saaj/soap/name/NameImpl$Body1_1Name.classPK   5R?(     @             ]/ com/sun/xml/messaging/saaj/soap/name/NameImpl$Fault1_1Name.classPK   5RWb    A             1 com/sun/xml/messaging/saaj/soap/name/NameImpl$Detail1_1Name.classPK   5RLCm    G             s3 com/sun/xml/messaging/saaj/soap/name/NameImpl$FaultElement1_1Name.classPK   5R)  X  ?             U5 com/sun/xml/messaging/saaj/soap/name/NameImpl$SOAP1_2Name.classPK   5R}L    C             7 com/sun/xml/messaging/saaj/soap/name/NameImpl$Envelope1_2Name.classPK   5RUDJ  w  A             i9 com/sun/xml/messaging/saaj/soap/name/NameImpl$Header1_2Name.classPK   5R
%rH  o  ?             "; com/sun/xml/messaging/saaj/soap/name/NameImpl$Body1_2Name.classPK   5R]    @             < com/sun/xml/messaging/saaj/soap/name/NameImpl$Fault1_2Name.classPK   5R3  [  H             K? com/sun/xml/messaging/saaj/soap/name/NameImpl$NotUnderstood1_2Name.classPK   5R.Y  C  B             A com/sun/xml/messaging/saaj/soap/name/NameImpl$Upgrade1_2Name.classPK   5R^*  k  L             	D com/sun/xml/messaging/saaj/soap/name/NameImpl$SupportedEnvelope1_2Name.classPK   5RuG  w  F             uF com/sun/xml/messaging/saaj/soap/name/NameImpl$CodeSubcode1_2Name.classPK   5RlΟ  (  3             0H com/sun/xml/messaging/saaj/soap/name/NameImpl.classPK   5RyI  j  >             0X com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings.propertiesPK   5Rv    A             Z com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_de.propertiesPK   5RWׅ    A             ] com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_es.propertiesPK   5R7|    A             ` com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_fr.propertiesPK   5Rknm    A             c com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_it.propertiesPK   5Rޤ]  x  A             f com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_ja.propertiesPK   5R 2  X  A             i com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_ko.propertiesPK   5R&w    D             l com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_pt_BR.propertiesPK   5Ri  $  D             o com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_zh_CN.propertiesPK   5R_G^    D             r com/sun/xml/messaging/saaj/soap/ver1_1/LocalStrings_zh_TW.propertiesPK   5R  s  A             u com/sun/xml/messaging/saaj/soap/ver1_1/HeaderElement1_1Impl.classPK   5R[M    ?             3| com/sun/xml/messaging/saaj/soap/ver1_1/SOAPFactory1_1Impl.classPK   5R;>  	  @              com/sun/xml/messaging/saaj/soap/ver1_1/FaultElement1_1Impl.classPK   5R    F             . com/sun/xml/messaging/saaj/soap/ver1_1/SOAPMessageFactory1_1Impl.classPK   5RYF]  
  :              com/sun/xml/messaging/saaj/soap/ver1_1/Header1_1Impl.classPK   5Rف'  $+  9              com/sun/xml/messaging/saaj/soap/ver1_1/Fault1_1Impl.classPK   5R=    :              com/sun/xml/messaging/saaj/soap/ver1_1/Detail1_1Impl.classPK   5R%C    8              com/sun/xml/messaging/saaj/soap/ver1_1/Body1_1Impl.classPK   5RtP    ;              com/sun/xml/messaging/saaj/soap/ver1_1/Message1_1Impl.classPK   5R~  r  <             Ǭ com/sun/xml/messaging/saaj/soap/ver1_1/Envelope1_1Impl.classPK   5RnP  0  ?              com/sun/xml/messaging/saaj/soap/ver1_1/BodyElement1_1Impl.classPK   5R3!  
  <             l com/sun/xml/messaging/saaj/soap/ver1_1/SOAPPart1_1Impl.classPK   5R= T  0  ?              com/sun/xml/messaging/saaj/soap/ver1_1/DetailEntry1_1Impl.classPK   5RB    >             C com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings.propertiesPK   5R-T    A             = com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_de.propertiesPK   5R0$    A              com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_es.propertiesPK   5R߰H  
  A             W com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_fr.propertiesPK   5R
"n    A              com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_it.propertiesPK   5RGJ  =  A             J com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_ja.propertiesPK   5RhvN  *  A             Z com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_ko.propertiesPK   5R
f
    D             Z com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_pt_BR.propertiesPK   5RŮn    D              com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_zh_CN.propertiesPK   5Rq4n  
  D              com/sun/xml/messaging/saaj/soap/ver1_2/LocalStrings_zh_TW.propertiesPK   5Rgs    :              com/sun/xml/messaging/saaj/soap/ver1_2/Header1_2Impl.classPK   5RP
ۜ    8              com/sun/xml/messaging/saaj/soap/ver1_2/Body1_2Impl.classPK   5RVm${i  ~  <              com/sun/xml/messaging/saaj/soap/ver1_2/SOAPPart1_2Impl.classPK   5R{P	  
  @              com/sun/xml/messaging/saaj/soap/ver1_2/FaultElement1_2Impl.classPK   5RxDT  0  ?              com/sun/xml/messaging/saaj/soap/ver1_2/DetailEntry1_2Impl.classPK   5R    F              com/sun/xml/messaging/saaj/soap/ver1_2/SOAPMessageFactory1_2Impl.classPK   5Rԏ3O  0  ?             
 com/sun/xml/messaging/saaj/soap/ver1_2/BodyElement1_2Impl.classPK   5R?tN    ?              com/sun/xml/messaging/saaj/soap/ver1_2/SOAPFactory1_2Impl.classPK   5RP    <              com/sun/xml/messaging/saaj/soap/ver1_2/Envelope1_2Impl.classPK   5R  '  ;             % com/sun/xml/messaging/saaj/soap/ver1_2/Fault1_2Impl$1.classPK   5R;
"  A  9             ( com/sun/xml/messaging/saaj/soap/ver1_2/Fault1_2Impl.classPK   5RbgX     ;             D com/sun/xml/messaging/saaj/soap/ver1_2/Message1_2Impl.classPK   5R*/(0X    A             I com/sun/xml/messaging/saaj/soap/ver1_2/HeaderElement1_2Impl.classPK   5RSZc  3  :             M com/sun/xml/messaging/saaj/soap/ver1_2/Detail1_2Impl.classPK   5RCQ\%  :I  6             S com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl.classPK   5RnE     2             n com/sun/xml/messaging/saaj/soap/SOAPDocument.classPK   5Rf    4             o com/sun/xml/messaging/saaj/soap/SOAPPartImpl$1.classPK   5R{C["  [  2             Rr com/sun/xml/messaging/saaj/soap/SOAPPartImpl.classPK   5R;*  /  .             
 com/sun/xml/messaging/saaj/soap/Envelope.classPK   5R#cs    3              com/sun/xml/messaging/saaj/soap/MessageImpl$1.classPK   5R;  
  F             g com/sun/xml/messaging/saaj/soap/MessageImpl$MimeMatchingIterator.classPK   5Rs;    1              com/sun/xml/messaging/saaj/soap/MessageImpl.classPK   5R
:   a  0             s com/sun/xml/messaging/saaj/soap/StaxBridge.classPK   5RڠO    5              com/sun/xml/messaging/saaj/soap/SOAPFactoryImpl.classPK   5R35  ]  5              com/sun/xml/messaging/saaj/soap/SOAPIOException.classPK   5RJA4  J  8             0 com/sun/xml/messaging/saaj/soap/MessageFactoryImpl.classPK   5RWR]    A             n com/sun/xml/messaging/saaj/soap/MultipartDataContentHandler.classPK   5RC}[  q  :              com/sun/xml/messaging/saaj/soap/SOAPDocumentFragment.classPK   5R|U    2              com/sun/xml/messaging/saaj/soap/LazyEnvelope.classPK   5RV*  	
  9             Z com/sun/xml/messaging/saaj/soap/SAAJMetaFactoryImpl.classPK   5R\c
  =  =              com/sun/xml/messaging/saaj/soap/ImageDataContentHandler.classPK   5RL  r  8             k com/sun/xml/messaging/saaj/soap/StaxReaderBridge$1.classPK   5Rh7  	  6              com/sun/xml/messaging/saaj/soap/StaxReaderBridge.classPK   5RO    <              com/sun/xml/messaging/saaj/soap/StaxLazySourceBridge$1.classPK   5R]NE    :             & com/sun/xml/messaging/saaj/soap/StaxLazySourceBridge.classPK   5Rĩp  X  >               com/sun/xml/messaging/saaj/soap/StringDataContentHandler.classPK   5Rҁ}    C             \) com/sun/xml/messaging/saaj/soap/FastInfosetDataContentHandler.classPK   5R%͵  @  D             / com/sun/xml/messaging/saaj/soap/dynamic/SOAPFactoryDynamicImpl.classPK   5Rk$    K             1 com/sun/xml/messaging/saaj/soap/dynamic/SOAPMessageFactoryDynamicImpl.classPK   5Rl3y    :             4 com/sun/xml/messaging/saaj/soap/AttachmentPartImpl$1.classPK   5Rc  ?  8             >7 com/sun/xml/messaging/saaj/soap/AttachmentPartImpl.classPK   5R>ւ    ;             :S com/sun/xml/messaging/saaj/soap/XmlDataContentHandler.classPK   5Rܠl  @  B             ^Z com/sun/xml/messaging/saaj/soap/SOAPVersionMismatchException.classPK   5Rx<    ;             [\ com/sun/xml/messaging/saaj/soap/GifDataContentHandler.classPK   5R+  c  <             b com/sun/xml/messaging/saaj/soap/JpegDataContentHandler.classPK   5Rِ  a  9             /k com/sun/xml/messaging/saaj/soap/EnvelopeFactory$1$1.classPK   5R!A]  ,  7             n com/sun/xml/messaging/saaj/soap/EnvelopeFactory$1.classPK   5RcB  &  5             p com/sun/xml/messaging/saaj/soap/EnvelopeFactory.classPK   5RЇ#  @  ?             | com/sun/xml/messaging/saaj/soap/ContextClassloaderLocal$1.classPK   5RR  R
  =              com/sun/xml/messaging/saaj/soap/ContextClassloaderLocal.classPK   5R^3^i    7             I com/sun/xml/messaging/saaj/util/LocalStrings.propertiesPK   5R67W  '  :             m com/sun/xml/messaging/saaj/util/LocalStrings_de.propertiesPK   5R:6  G  :              com/sun/xml/messaging/saaj/util/LocalStrings_es.propertiesPK   5Rw]  B  :             	 com/sun/xml/messaging/saaj/util/LocalStrings_fr.propertiesPK   5RT_    :             O com/sun/xml/messaging/saaj/util/LocalStrings_it.propertiesPK   5RJC    :              com/sun/xml/messaging/saaj/util/LocalStrings_ja.propertiesPK   5RCWM#    :              com/sun/xml/messaging/saaj/util/LocalStrings_ko.propertiesPK   5R͑  H  =              com/sun/xml/messaging/saaj/util/LocalStrings_pt_BR.propertiesPK   5R    =              com/sun/xml/messaging/saaj/util/LocalStrings_zh_CN.propertiesPK   5R}    =             n com/sun/xml/messaging/saaj/util/LocalStrings_zh_TW.propertiesPK   5RZ꠨  ~  4              com/sun/xml/messaging/saaj/util/FinalArrayList.classPK   5RVs  
  >              com/sun/xml/messaging/saaj/util/NamespaceContextIterator.classPK   5R[     :             ͣ com/sun/xml/messaging/saaj/util/XMLDeclarationParser.classPK   5R~q%    =              com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter$1$1.classPK   5Ruj.X    ;              com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter$1.classPK   5RXD    I              com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter$DeferredElement.classPK   5R5ZCo    N             u com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter$NamespaceDeclaration.classPK   5R!0    N             ` com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter$AttributeDeclaration.classPK   5R>H  %  9              com/sun/xml/messaging/saaj/util/stax/SaajStaxWriter.classPK   5Rq5  <  =              com/sun/xml/messaging/saaj/util/stax/SaajStaxReaderEx$1.classPK   5R    ;              com/sun/xml/messaging/saaj/util/stax/SaajStaxReaderEx.classPK   5RbgC?    A             	 com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx$State.classPK   5RtE    ?              com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx$1$1.classPK   5RR0     ?              com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx$1$2.classPK   5RvD  2  =              com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx$1.classPK   5R{f  
  =              com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx$2.classPK   5R̹ݣ	  g  ;              com/sun/xml/messaging/saaj/util/stax/SaajStaxWriterEx.classPK   5R2T
    A              com/sun/xml/messaging/saaj/util/stax/LazyEnvelopeStaxReader.classPK   5R-  
  0             ? com/sun/xml/messaging/saaj/util/ParserPool.classPK   5R\zAG  8  5              com/sun/xml/messaging/saaj/util/MimeHeadersUtil.classPK   5R*    6             / com/sun/xml/messaging/saaj/util/JAXMStreamSource.classPK   5R7b  4  6              com/sun/xml/messaging/saaj/util/ByteOutputStream.classPK   5R7Ãi  v  5              com/sun/xml/messaging/saaj/util/ByteInputStream.classPK   5Rms    /              com/sun/xml/messaging/saaj/util/ParseUtil.classPK   5R.    ,              com/sun/xml/messaging/saaj/util/Base64.classPK   5RH    ;             % com/sun/xml/messaging/saaj/util/FastInfosetReflection.classPK   5R7֬	    <             - com/sun/xml/messaging/saaj/util/RejectDoctypeSaxFilter.classPK   5RSx  W  8             )7 com/sun/xml/messaging/saaj/util/LogDomainConstants.classPK   5RM7R  X  C             9 com/sun/xml/messaging/saaj/util/JaxmURI$MalformedURIException.classPK   5RJy=  :  -             : com/sun/xml/messaging/saaj/util/JaxmURI.classPK   5R2     M             bW com/sun/xml/messaging/saaj/util/transform/EfficientStreamingTransformer.classPK   5Rb  &  0             \f com/sun/xml/messaging/saaj/util/SAAJUtil$1.classPK   5R5    .             ah com/sun/xml/messaging/saaj/util/SAAJUtil.classPK   5R-v4    4             Lk com/sun/xml/messaging/saaj/util/TeeInputStream.classPK   5RTb     C             n com/sun/xml/messaging/saaj/packaging/mime/MultipartDataSource.classPK   5RO  @  G             @p com/sun/xml/messaging/saaj/packaging/mime/internet/MimeBodyPart$1.classPK   5R u  <  E             s com/sun/xml/messaging/saaj/packaging/mime/internet/MimeBodyPart.classPK   5RY z`    J              com/sun/xml/messaging/saaj/packaging/mime/internet/InternetHeaders$1.classPK   5Rf
    H             Ñ com/sun/xml/messaging/saaj/packaging/mime/internet/InternetHeaders.classPK   5READs  )  F             ǜ com/sun/xml/messaging/saaj/packaging/mime/internet/MimeMultipart.classPK   5Rej    <              com/sun/xml/messaging/saaj/packaging/mime/internet/hdr.classPK   5RkYy
    D             γ com/sun/xml/messaging/saaj/packaging/mime/internet/ContentType.classPK   5RbN  _  F              com/sun/xml/messaging/saaj/packaging/mime/internet/ParameterList.classPK   5R~+  (  G              com/sun/xml/messaging/saaj/packaging/mime/internet/ParseException.classPK   5R2`vh    U             Q com/sun/xml/messaging/saaj/packaging/mime/internet/MimeUtility$1NullInputStream.classPK   5RW"&  L  D             < com/sun/xml/messaging/saaj/packaging/mime/internet/MimeUtility.classPK   5R?b  w  J             r com/sun/xml/messaging/saaj/packaging/mime/internet/AsciiOutputStream.classPK   5Rǵ:  1  H             L com/sun/xml/messaging/saaj/packaging/mime/internet/BMMimeMultipart.classPK   5RĮ   "  J              com/sun/xml/messaging/saaj/packaging/mime/internet/SharedInputStream.classPK   5RfM  q  K              com/sun/xml/messaging/saaj/packaging/mime/internet/MimePartDataSource.classPK   5R̳>1    D              com/sun/xml/messaging/saaj/packaging/mime/internet/UniqueValue.classPK   5R5h줻    K             > com/sun/xml/messaging/saaj/packaging/mime/internet/ContentDisposition.classPK   5R    J             r com/sun/xml/messaging/saaj/packaging/mime/internet/MimePullMultipart.classPK   5R۝    N              com/sun/xml/messaging/saaj/packaging/mime/internet/HeaderTokenizer$Token.classPK   5R.7    H             4" com/sun/xml/messaging/saaj/packaging/mime/internet/HeaderTokenizer.classPK   5R:  j  B             z+ com/sun/xml/messaging/saaj/packaging/mime/MessagingException.classPK   5R'      6             / com/sun/xml/messaging/saaj/packaging/mime/Header.classPK   5RY&ER  
	  D             0 com/sun/xml/messaging/saaj/packaging/mime/util/QPEncoderStream.classPK   5R30a  T  D             36 com/sun/xml/messaging/saaj/packaging/mime/util/LineInputStream.classPK   5Rz]>    ?             : com/sun/xml/messaging/saaj/packaging/mime/util/OutputUtil.classPK   5Rz3I  L
  H             = com/sun/xml/messaging/saaj/packaging/mime/util/BASE64EncoderStream.classPK   5R&iF  ;  D             D com/sun/xml/messaging/saaj/packaging/mime/util/QPDecoderStream.classPK   5Rge  
  D             I com/sun/xml/messaging/saaj/packaging/mime/util/UUDecoderStream.classPK   5Rw1    C             `Q com/sun/xml/messaging/saaj/packaging/mime/util/QEncoderStream.classPK   5Ra|    C             jU com/sun/xml/messaging/saaj/packaging/mime/util/QDecoderStream.classPK   5RU[  z  D             X com/sun/xml/messaging/saaj/packaging/mime/util/UUEncoderStream.classPK   5Rlj  |  C             __ com/sun/xml/messaging/saaj/packaging/mime/util/BEncoderStream.classPK   5R!5JS    H             :a com/sun/xml/messaging/saaj/packaging/mime/util/BASE64DecoderStream.classPK   5RNf*  
  A             bi com/sun/xml/messaging/saaj/packaging/mime/util/ASCIIUtility.classPK   5RGy  s  2             o com/sun/xml/messaging/saaj/SOAPExceptionImpl.classPK   5RV1    3             lt com/sun/xml/messaging/saaj/LazyEnvelopeSource.classPK   5Rek4	  ==  ;             u META-INF/maven/com.sun.xml.messaging.saaj/saaj-impl/pom.xmlPK   5RyEE   F   B              META-INF/maven/com.sun.xml.messaging.saaj/saaj-impl/pom.propertiesPK   5R^T                  module-info.classPK      Qu     PK  Tz[              META-INF/MANIFEST.MF  YJ6
ߗYϺo-&!j1AgLB̳ rZR~oޖ"&pǇ48yU/+ KM޿>8pVGA%MPz.yNS?%(4ୋ-U[o	*8k-{\϶a<+ɖYpWwUY2ʿ'ocl|Wtr$gC?߿L<Qw~ ~9g~U5'C?x3
+O3U4rϙ6zc_q6nz>/]|Sy=qPZo_.N߷k^mW;d5WA>egMU"~YU
啡?߁E33۷lC?ZT3#{'4)'>y/Omn~Y~6ӓُ6Gm<kbAo|iz|iPNU>٤)GfGM+5oSYFwZg
|j0MTv_d ]k4xӟ~?E̩ 7&h4<9YUVZ8	nNlv^e3<~#ϣ&/rEd^;?mථ6ƊSSw70|=|AT33K Ľ_
tUÆZγz5
>I$39̷zo5?ݭ_>Eox~mW@phç8	+tfׯ?'SyAOqxϾ"G?nL<)a>yj]0B8qy<p7'ycclϟaKتV]G/?\{?y|l~~Ωw;E1	1>cůۛ_[vFU~ăo|nn,?@fFw_CJM3@?j|L	qWmy0<s19ϟko/C?OހۤcN$\gO._홡=rVsS[ҟtDq~zx@\_qM73'?Z߻S]+ޡ	Lɍ$Houj>ih; .'/rp茐) ķ~<)ʆ~{r~Λ<Q77uTn{Ⱥ7zf_?yw7=8Pke.
~ȿ.V/qg(dgKkPMmV/G$\k>3?ӫcbw||ެzc=Q7Gqt~>?xW'+X	u}3T8/F"_6w4-'?qfr??˛ϏF:X#qzdW%=-0'`g
~~ԟ:SD㌌>?V{z~Ľϛy0h[u$՝3~ ⻣~G#}w
ӧw[.~L1%|4㝽~usy6Ĵy;eDM9^0Jw<CƇ4g+o=M:?ԧ)_Z?#z|Iϓ_sD_O9ɣ]ֈ{i6~~>o~{PFd~Ɩ=|lW?cCSE
g_ܕ4[z_N/7=cg[\~ۊ~,ZVߺp1~@߁yT|w~!~.
d;Lh5؇~cO-k*}q;|5iz
#|7nS+{?}=~t?I'6L_pZX8ǣ4-AN߉wDK_%toCܥ'=C52nQq݈/~CtknOmjGwh;gͷ-fx˅qM9KQ=eU?^q_Έsɞ&޸A[~wo~GxÂ^9vO$nW~Tl:_f{?gLATZN<+_bo	~^'8ҊJ_w0p=sU[09]^2-\	' fgLZ4{mooi tZ[`bcH5}Unv"ƪ<[hVtf=-qEM^OxlX9#ADnMc`k7+
ub 9_p	ڪjlszM_]%6{%>3a[r_H/x˥bx8DƆ7TyEbUB@grUP~ar:E[ q	
rnelFx*HE+>L/,;n}M6?>njFNw|Ȕ.JouٞJAkg R	v=	^/Z
cgNKa*/ݒxj!'Ne~Yv.f.dAW8JrÙ2xe~V*1nƖ]*>")oýA|3+\kJ ",裵m/Ko7R_'p)L.
N
RܟwKIt3蔬Vgs<\"=:_zޏ_汦JJqrt7*"z~/mLpΟ紪Ae,xvH{q6m\xĆ}W8Lqz_{TKk\DJ~Szc$ 4Kêփ
LƆu̹VP[@SLka ^YeFIAUy;il`(*TʫQm3ײ\3JkLxI9{dfRK2Kp޳) ,+ngSrv4N	4)~6}~vyI'RX;Kw
ˣ ^wxt&ss)>TDa v*2$Η'b~gpsp*N٢}thuOwVx"		GZRJfϩLH[eX%FW501,=ru$#QйZ{0r%V ڟ[HFD`7fn6 3c<-U`XsֺĐM͑{BawZ'XHi^2:GQ)i8 Gk'FE[ҥ
FAT+%Ă_7z:y忑T-P2"7
WzH:`m> L{7<6p#*.]=8:gHAͼ]bIY:&Qwicg7GD	ni48J Kj{w1	б&F[t<,rSd9 >I.zGxCx5`j
(N,BA`#T :Nj˗5rݬY˒]ZOxu9c'	2(``	}lf66F/R5ĸŢ?r7Am^滩965;]wlʖU"H7*Fvzr1G
L"Ǻͥ-Ύu#KUni7(*-:II_Tus;	p6+tklsS4'$}en]86}eWK|햫t
p
	9'X桳=B0߲uYD	zz\.yxIІp:0Q
݁G#_MFb΄^G͔xۗ[fMsKaBQ=Y}J= J6Ҫ-[OڡpV꥕Ohbыtn!rzj4&D=alZ@Q6ɢߦP}!mDbc[Z8-س'Rbk.9єS)Ȉi]D{6iI9d~c@`ɮW~pB= Cj2@<3Bz,{ΊtR*Z/٣=R
ߏFIFPNDVvQv\TI}|>ꞌw |YOH&^yޤx22a#!7Vtq]yyvBUʯOnZ&y9aޒ]h.v|wz0SvԆaM8cCMڵ)1}mŤ8|?r
t,u<^3]%ʕzH,T]Ozq̊&KO=Ҍk 
p:6 &mDL\wP|ebm<Ƈ,zsRke3)Y׷S:ƻ'2m\%Zc>DD<^uET-$I]:q~8ղU`ۅI i^- 拣IKg97٤%#iнXq
k	,2U*3^Ӆ!ύO
`k"d ͂b		#M pdj |t׽UjF)IJ'T)q5ÝYf)&_kư&9(K|ݼYZyoHUByC{֖uq%ualGrt|ŮZP.XދQ`h»sd朵Kb_4`QϤF<Q)2iP'nEkU%9eUe\őDҭb5m[en?-0 zA#n˛ìd͗LvyD4i8?l7Z}@Y\D'ob 
63u,E=sI}14kƎ̶2۩&/,b8I$IB&Ћ|K2SD
.ԇCb	9USiÃP,cLZ)!c,KjF)m 
~/>.(wZ/Y/D<6\|wǮ[r (r~Hz
F
݉=" ]8._؋XLiupc]x#vڧ=2|HmL9s
)=t;ÄA홅+\|-u|h簤tR|U![dږӢ$A Hhp^DSѬ5<Y׳"QOhuNDs@j~BQR^`CGuReb1sSҬM/ZvlYǖŗPlʤfA
x4>quf{fγ.|~<=AKM8ELΒ	/8byy<4q4Fx36>{o5v-]LxaXRgP,y֡܀=+2gJac 8_neȉT X-p{ vO'oAp7N``V}k(ѼP'A3Awm7H'Ͻ0
?kyrS
JRQ1N^Hm,q. 0-nU:,M1P[j,rKf[Ty!kQԁT=s7s%v>wgMa:,icw:ap
~|	+2m9f0& G~	X]~I.QYIg;"yMLG{G'5-m1mRV+><]6C繬'AoD˶ 5e{2]VYLZ[mR/>r 	+ Be+()@,9e#-ik
=bMuR d61N{IrOw
>FzىViM]8_D<;zsR|Ghg}`:~ffUIH{gz[[B]a^DZ+uXka#%wa223S k?p(
=+P9mf;3*0yņGgЃ5 Q% DZ衞Vi^Pzmf:uO=ԭlvkH΂d*(++QJc	y>	cPlz3ONcHm$G%+ɪpE֕BUbK{WhFޟZEk -nBH~S^5Oqsz~\hA>5]H>}B>ThnUtCopeyF#L}edX '/`y+S	AÉ{z6M菇7CV.W=7Ll#b} dcK|rs^E~0
=0G3K"b/DדZ"8r8Z23%n
  %
yo[ tǮhU!n
/V3uV@uZvvZ<ۭT
yZYj8NR7GE'B9l$YVtқe@ulóˆ|7
4`t:KxoErCf"WHr'[2J[#סY,Lm}6F,Y;A']]= 09
"O/~| m)]*UPc^gJԇa9f;~M86pڭ-'I+
r>=0OtT<:+3PB豋#hon8y<鷢'=Tj$G{ͽ$o`2,$K*(X\SV ؄k\eWl:	G!B[<N@۫?s`c)fThf{uK5Wvop5V2Dc8mbpor)͋9
fN|#̥S5!x21\r<J'ugazu<bb 118.Oʑ`IB| igm^ZoWx~Tt~1Ն?vO`0$dL($᳟جqZ5g]<掘{&$֑_Gug.B=-L:\,UZ
6[ȉpEc>;;X_z6=Sfq[GY-)k~omBDtpq"M=@v&`{⮁~y+/,jCks;*<u(`Ĝ<9*j֔(m3gbX{u(;WQ^Ǣcʮ9Mm~
S>=jS7\-ܡ[3<-Uk0qdy4TIw/T/7ax<\ͱl,-A_=-A.pR(\N;zoHS^W= 4nm,Xkb|o~;E֦QqRX+"aN[1b4xM"RnۆL-k@7́-;bǖ [5DlobBCWqOєk[e)ߢ vL/RoD%hL\S$F_HI;_x
e$uzr1o,5ahc_R_'[	S*}iQ8~MAPdo(y|UלIf.1f{l3!ԮƏ+&7+><g_{*Pkws(,p}DQOxdGFi9Sy/b6{ɍHK-^rdSۙ	۝'.^ vK͍5&ʦ"G;a] VhO,{&1m9,d~.
	hzחcRӪf/x㓊yJ活B9Iy!JupbYgͤz;C,fn/"r<HuYݺ|e!~|o܍"ŕ#bKv΅!9/xg l VJydWF?8tXty1
/\g;cG˃?<XP+գlLB6ɺ	ZU3'lYlVeҕ}b;HѨ|>ɡTy1ayZÉݓ|'M/V﫽@BG"H.0n99#jEU&/^=0e?)KX)KtVl!X䨿CtYބTbzGӡ?,iklq+O{ifq`]nngs$[ lqu".F6|%AO3ڵoٴ?_`zK*8)Yt:hy*EzhhocϣM#váuZ<Ns0y'+.ڟ7 Y"?2٭ B`8smۆɕXK7V%4؝
m( j%iAڳWk kE|zә䪪̭DPr^,JVY'*݌/y"Ox'qw
_G1 qyZ@jV-Pܮe]e`f;zS^ ^_b_}kD4bld\ls C|* ,QnrDvi񝤃`<z Me\QPrM(gi#fT--ώ]tl!!~kbP%^ X/
R$AiOjߵ!>OLN)I	N/4Cm
hvDHj6&9E>t4?Kqc#bL 88ߋ	xr౶[Yȩ$[I52Ulvy}"N;A)r8mf#7gfrA֓ڦ}SݠDWcl*v%5-*f-QNgVӁϖ&Mqz!m`Af1EY8>g4 uϑ3ܝ:ܪ9 9ћM:TKՔQn(G+i:ɍerqX$/

)ԅx최bk	)ͫJ`gKe
+V=J\S_Wx:%ZrsN,=2 ,AcU:OhǏ^J72N+d9[.lE3=*RI叽BupӖ(ұ'urm\ 2²
z6v=\+w
42V\i+̯ݒ·`!ʧnaAVFQ ]
v5`s]7%ky8
xUM,Y4[2l9]㤓@`4'g'ǟW$C|	=L҄`ely^B9K:N=2^9%TJ/	qppeji/Ԯ	:7⳩X_;>nIĂ;Vܳ7xӒD=eWK,2OxS^?y&Vr֢YGXbj[av
-E16+ս^-W=ǂ(MH텱d(Vz:L]ؽ	kc	υً@P6
dXyh[sXnœ(.sIa~CH:(m3!Tɗ"%J;Qk.#4lphtFY).
 ՇfyP(l@fg@D.[O"
XҳԊwYPmOk5T=LD8[Xz>NEb;:ek!,$&u'QdY\﷌= aBaR3}.ʬ<Cbڱgkk${T
`sr<
`@
}b#7_F |zf*Kg7Kԅw
"{|eIbvrq"lW!⫛P"l~$8Lô	/dt	lƵ8uQ:1ya>}ӡGSec՘rwqp0 n\A>u^|[rI"obDzs+:nwiB0!W^d x.:1lA"^;˂oș=3x`~2:~!)Kpg9E.?C9LcauYtu쵛3rA$A	PJel-^0TkkdV9we5`yyÛFVXd6	H8Wzot)hQ+-jy]@׋+eA`o1ғ!Zm]uin.F<Lk@|~\{|򺩢ѓTgg,`pz:pxvhcb؃L(w>fݹ2:D}>N?~XNT8 HxxV41gڹ&AW4'oxa%ڡ!Ih0_9 /09x
|F¢XT)FmT,OVp(Ct 2XS E3nWzQ\@gk2*wcʏLqOj^\(LzVчrq{C(k؈3P))	sVy
)o?_;&]`]n'U2D,,{Liܤꄅ['x9U}.K"_ŮD
,1¯r/ٯYBcVOHqt}\
A[^`kBz|r:%U\'Uu:|yS΃yRe1հ\#I7BA` x<u(>:%;chDʘ/ؤs(9K`h4t[""et2R:&UAgAbLbz">P_*;"`Q5;Ҽը
sRU*LMM?̼{Crt8}kI@}Iˈj"nZ#g:RSݖ{#1
NIFQ`og}0]FaY&ݏgVw3h9׉jeV'%$1\<OBwmm@p.ڗLK6@mа4%+`?0}֮b/!U,p,  JiWO*"=?J짞89ktNζ#Lfyn̈́-nf/>+fD-G׬5K]A³`D|!Jqu;/5;?($PYcvD6ӑ
hCWuu:"):4sKCBhoO(ٖMFbwŻHn6oSʖ`jWi/ټATzqikss]`a;acG;D2C \0mjn,Ѵs*{ 1[W+s[Ͽŕ0KJ9@BjZ<lZF:c'~ hRZ/~Hǫ%R5:~p-./"EKPڗ@4ǝ0>Z/Sz4Uovv}Ԫ?	*RSYݢo7?_!ILݞS'5+UruhBV݈W'AeNEhp~>}KŬ%x<5жn ¬!)'2]Z|*H6lz%xAw?LV&V=nwݥ/:=Z4Ygs]m;m7}PvCF&J,CȨ)WTm)cjqT 4|Aݬ0.5S>GJr24MCH9Vo.+>y+ώFsn/4;;kiVjߝDy3'To>BiF͈֩p6).cvL5Eȡ{ Kem&;Aq+8#Q9a钍4:-^JX_
}Ir%qVˊ:%kE_/Z߬kt,=xv<d묁
8Bu{mcG0bǜ#>>g';&&زZɃ5!ޛ0HB@FQyމhcoj+!sU1C졔Aϐfİ8NG;Zjh[djltzf 'Wsh8m\Q-(',8Iw*vJ泹P6L.gF8,4ϷFfGm:/@ϖzQ\6xz.v\VAihy$iJ`8E
%;DqfeI}O&{3z׻|EF$VF/EWhm-BՔǩד %aHo2s(8&=iVLٕƲ1swAx}U(LGwm:]|zLc1 8k
<8텰wj࠴AI@QNVAU
晋_tRސPW$%*R`RvԐ"PF?hՆ1	jC[Bs-
5!tU?`Gj"\F0̂=*q 0vu>*_|mP%C]^/䥛BPKh9O58|4펈,V@.5$T<~@4!|!L4Aq|ɑݑ>Oq:ej4l,+|]vwz 5f⊘"[{cWVKPDp<ԨR{XY65DRngF\]Q Elu=|#m"$ǊN1^E.QPY:DZ|'{Rr"ϝ~6^$n֛B@_IڈZƬ0
ˏ'r\;Or4PhgU5^΁5">2SԒ#~h\N3@B殴v.-!Mz$68j+eObu&ԕ>.ew{hׯxz{hɹ0%ஹ|2
l@Ł}O:~oO6:2NE]Рf9ū}l"=z'}ԥt@+BkT3?q|o|
\L:ϳ"HKHـ/lS=ZRw/C	V^ПHv	 위zTĳ(u?zZ9|llvh+p}ͭ
՝V~iGca&qtq%/}eqN="؂YݰMܿR.oռ58ZG|a{U`U HXOuQ2Jy,	v3}P5N>1ht<lY?ˡO(`r5e
S!IBRlW3ә2.`
+X1N܅1H{X^Q@7~N6}<9DV wI~gs\rr=zN?:hh#`dL߳W8U$)ѥr0J=,8-\ysUzr	^{>Xyk]wL|L!'ູRe0F|Y9^eұWH<_ۉYkJ&O
9"	u~ȵq\,u3}9ޘ%^A]+bS
0<nw3e#!~q-{o}A&x~o8D\ARɀ>Z_Rtݮ%G%2vB}9}=Dl/<?y&EzmGr]Q5.Jn볼<)
6h5MVsmL?.tX_[IB]6`uPKJJ/7WGis>ur.yF<U{B ]	k,2cI4U$pޯ>!J-/E1gSmc`X_zV:09AIZT74
R~$ݫ:&)+nD,&Prf,R'*Y y]GB9ARZdaMYSjA[Gҹ܀8nTN?NNIp8ĨZ\:mE~ψI@UdT?ָL
X@*\֥ԉ<W<PfƧ̀u5:d2q5C.[/bm7^GmM{gJa~ڥ<ZiJѣ2u ã#oZ۰C1XkW%dbq 5ep>.>綵4FG&@&RmY?u+aٻy/,OA҅`+hUjʝNl8~dLyK,XܩG6Uq+$cf;y BUt	+OyNiE\RF/QUAuɼhI;
<hJ>aЀERNݾe8+OHJeww;`2R2sbUJrda䝦^<ӎw|/ɠ)'9ֽ|R"/GŔC_I|_{QD(C]N$B1E	102c8)df#`7r]඄ja90|6DYi㋴*W֔d.':X!8Qa L_fPGƏlX8pV[\p$xOH/oWYE4ht΋JHC
lUQdi/QH^ٜU9k|>)0C qAEiqH%Jsi[SXPی^b+YC/.ʭ6xF.z,8 "Z|,jzhK@lFZ3ZɉU·mvD<>{T0#w9_){#HC>@^[FBڵ`5Ҏe SzrcC<xXG^бm3*WPeux`_Pv?n=^Y6p'aN^޻T|ߗ|hrjݝ|XfwVS`X@e0'9[xa0&ni_7SnG&oH6.Rl$]Tڥ
8o6@NJ=`OEлv, n%:߼2<tOsw[_vӢfckhlG_UtYf QEuzȟ㧎I_fۅtJXb},X(nƨr4TASU'ХECO5zϳpezɂ+sBZ2XUv/[L2
~\S:u[e7B/X׋.52lz&wUj@3k|l]RgJ!4*wd̹6CnIR>w _C7OIxP(a+>wmf)%PZ@([`+fP*Ϯ2rA4ɧ_0ݶ3㦶u'j]
m>kөo!ڱZsvc[r7J2OB=ְg9sZ돭'*2Rf
޼XLruBA׃.iϽi?Q>pl9ۄd^Ek+Y\y7 h&dy"ϙծr+M{K2$lym3xA~
ǃ>Rk޺'qגnDNyX~z|߮X "wO$9aIlzD!g/D{ӿacĽ9KB\̸TC
&z+o=9
tAQP#␄Ņi =(p6ŧ7`!F]i]XKM=
-b|uQ`.|ZxoM]?@'E\<yfI6Aށh5lw90YZieP` hֻ;띸s(G5
@k|T7ӛB9W]4ՙpXuT6!`-Ld-8kL@*Z{weDXokwiLem{Px;8V% wRHb!M+'WwtUN/xr dRØmkq"5`
;̸]GSWУm
 qUP=u.6>CƧx!}>wqfń;d=Hp`Fb4!c>v>;5`Ձg{0! 8(IA
~OzcxQ{[ 	,|wP647OͰg=S̩E=f7kBFA{^3!Q:XmN=R)6-!Pd26ǟu)X
ը:)*IJ}D>Lj!px_᭮/
_Hc3REO2u	e@po!ǖ^.OGbԏ`|袗3]"ir	nhXNyTך]I\}O
`
G
7(#{@N1uNYm;T { R_Gr0?+F5%TǞ;j$2f<A%dRj; GH.<d;!$j$cm'])uȟi[=
`]2"0,0Uk//.CyEe	#<\"hWHBwGOo*1GiKӱ<H7pnaX3?.
eՎ9(=GP!_i4a'$>1f:Y3eY#E29Y:6{
/}+LTJgfp{JǦM 6Q\uXj^ƟoMWrQIX;|كʞ.hlS}yuDA+B3XVۑYjt/rڌtC}.91,]l#&#tEP.^]M8-M)K&\_5Xϣ 3%~<-|ohQ7O#]*`ǡmBn~%mߜ\y#U=KKouMs[4^ΕUZROn-^J(IB"$}	<zX'*M#J~ܨ]ɭ|LxdGlew:]o}lou۹a!551G[1WUGo-LWۺl7$
VH˓ĸ&Rb#r%ɳS !<g6HE4aԈ\qfgS N 9sd
(y[dj_Ѧ9_
j^A̱0;ý8t/C	 Tm܋L9:4__#{ŇOh ʃB]X*Ds ҉ΛƦhXUڎMعK*pI!o~:[2G[f^0lkNMM:0bFJo9b=+D۰70:wQeQ|d`
+\A@R,uQy2m&U
ͪe|)Aqf`[[2x'|﬎6W}=i?Ǜ
Ѣf.Nn:uΆn6Һ OYL8.}MBZ%{w|5ŀ
4b.2=H߹t3=
ãowiMҪ΄Q`DcErd$M37]a	pgADN9N~qU	ZS&u^*ͣ".Atu=.v`''M
2pcHxܱ/o7?ܟ¯|`,mBq;9`{ن%gI!'K7gS~XV2s=^sE|)n3G?tXU-vٲ)|qȝѺܲ+?	t70n=60'R.*zǂC$ rrYlUK
E|RQ,s|<Y#$ >)/B]O6⢀w"$Ic(*yN0_<`(w.sscZ , ޟoh`#*?22-ܱK\sM &ɷZ՞a
ǳ?!bs
~:שd
Uhwja)c'_Ƙ_ϱ7=!,&#^9%2\&g	zRHc-1F8LѾݕN{OT1&l:gڐ`_:kzF
ww>V9vZ:;&4<Q3t^PC-Z6,MB[ۻݣWa^	E|d=oBBӾpz9C]]h3{1u
ar%r
ӆHt=b_OEmbB;f̰p2NtE?IL=b>' 6UZr{T{j!eATyApȹ6A)<]ذyQŗ3]Dg5jn3+"VnTHҍ[jܦVn0}GC-z@89rCefƖj?L	e(*jm`y6o8>K~%仂Eճ
xqXظ6k.ap?/XODwcUJn2ymƾi~ G>9b?#ƿ<i+&wmg<#z(T2U:N6)/Ǜ¨J#h^`6ݜ\gMڼ$5dGr=X}qDDΊ_(K/^-lO>Ø%l҉#c'G;zȯwN>e5IԔʷc菑ta[$A ١飾Iq8V {n_*1=iLxr.*E#yK%deм6G_F8T	
ftB$7 wzyOxQP1{\VaHqҜ>.e߁IP_B1bag;ǵyD7~[>c

B bjM 2tJ=H\ezo]yis!Bv:&LEܥ̙It~EILHoa54	?DH:TW ]ŀCڈG~rY;aߙ:IKFٚղqB eի00^IEkF-H&
K dRqZ{B!Tsi\vF8GqhU{=dȑv:NS_g/G`/<k!\acrjZC6nXz~?-A%FѢ:]w2%9Hȿ
6RCMEؘЂB%[aDÔy7c-k|gןgsndp,QcE(|vRiTۍzǉ	=
\,/cB%ȘnV`|p"_;ռS<EV'WtF-]uʵ_EOZzhɮϡ1)FF{`޺\94wC/>5B7O;-x1o3ޢ!ԺPw+óV#@fw
8^/5x\=઼Ev 7ռ{vV2(!Q,U U(SߚpcNq_UP6&@ջVp&36cYM?+7N9XMJc#/1V	=R%Lx-ZOX>{:jJ˦cr&|iA9Y%}>!Tsa̧ÖӶ`ZAs9 ZhǳC8%g}-M/n?k큔EW/Sf^dPlOp=7d"1d7X,&L
M$.tµb
	0=ReY҇v_J($eNq ~O!|Z	sRS[,tC-ݴ~	ɛ|2Z&{1r)>5Z|$ٖO]vVH"zfr|jIvGXÔlK»4Z$W+]N8
>!C2bAVL0	WH7z*sxALawjyօk~9Z1Έz[ꋦ*Ѣ3we==aHaHQmI6P1a
_Fg_ldgNz<1ZxkP{a9JW,QBҎ^(&3iH?e&K Kk1Td؅Hm\_[Hm(VeMuyϿS2n*DL+U+;H3wǂ}QnX~YT^1]w}xec	qSՈeQvȸ+S 奶Is0wh4]w[	ǩe?7.1m^ɣ=o>`quʛjo fÞ{;wU-KvGaS-FēژIk/c
̶6*
2S%w 9tb//	Q7Au1~0īAacWB`#v#Y.dhuGZDU ^CPS%ح3	of=zWλs/8XV֭+ۛO!ݓ.q
,G''ǯ5Y?˵d#Vbr*;wXZ\oVpS0)x΂?wW\8212*ϢzrZ0h{T])F7||8I! 钠,7w#ItW
;FJ>Iy3BdO7:k3`γH\|{UAU>wpɥ]ud`P@ږЏ"EoϚژfYWTuJܕ

Ü8[/Jt@Nnkw1	@ܜl/TҘѴdA>lVZE~0S{>qd_ur/#.}.Abv6Ղ[y~pWTVfg]2 2|+H,$gP,wm<vvIf)ZP^=jv<$[(_j%θ+>@i/uU!w8`>_ʁ@a]e
 (/pA1FH	V:%e;plm;zcnptJu_&=z0VJa6>8O-^G_POB&=]}giUރz.Q#||)H[4b#FS_4</_k|~5| 6L4@W)*֗C5
r=Şͅ}iU}*m|0C0bHpDݡlcsfG\wN~L#ȜϽbJ&|Yo݋Md^V'ə/]ُKFkZҎhK.+`SbwKܭhJt<5u[Xthj* e~q%*/u@9A'_Z?&_6.S9Ǫ®aIֽg߈rKC{"%1cԏ⇜4`'5`|{d4Q	˰3E68ez5H0>m@t;3Fqv~-l5teT%1."s5 X5WyObPz?G4~"}i*8eu(^1/鑁o .n)R|<yT6p*
c)^	~͂bQy~dc,NUvQjń݋RZf@mQ?ćWw
r$Lԕ5c6	(3Pk*ϪN}7yKB qk;T
dDcPSiSk(=L؊dh!h)BhОcIg;H
4y
 i~9Z}s<flc$da*D RRJÚ+Rss9d˘W[0}B'ǼFzNm*
nLWA7=oӈ)V|O9']0-L
>yz6SLMwڐP:^"u+U	*WQ<[^ld|.+nV%v/fPo`^Ys^̀LpE]js:Ι ]uD<`&<imv02\sTKE^2
fepgzݦ<j;4<.Ěg
%?=J
dg'
ރ|+PӇ7.ЅXye)IE]?w|IX{}1݈W:v5fb7̡8m1:5wok|FHmU+\RsL[LNUS?M
^[k.[zp1!h<w2qĠ(n'/?t⡘N\''wޭH?D̶>+flp-e|p	x|3RMԗ*FJ>9F*gB"749;~/Y	I(5,~[(e'lT*b'ɽ'{B6ɟ,1U0z[x'M#}[i
?\$/ڎlyi3ZjX:IGC	efjE1 	!u]|82ZX8yF~fK޾;ntUUN.;jlE;Mw"5qVDwiKt;fYMWa|^,d-$Ob~m*8~9Dƍk̭2;N3p:.%6 qEgS]9
:me N41PiF
Wz\-N7
`0&.>(!aib(scʭ._{Ssw>U殦;v8f#_tw$>o?)UAo̹U7	TCa5J3FT(w|k0aGl'!B`DBf%l/Myv1zG2ܜ~h(|")	-VQD9\ݐ/Zar]@u5ˊ?Fco9OOQV n{UڜGi<BZ󒵯	Oi<c ,Gi^0	0/fUVzFl?Gb;J&W2htv7=tc4lӹzl$.ҍ@('Dׅԗ2E~VūpʪDJ
n9{
]q#C9
D7w@9k:8vR
KQy^Oz?'SvX"pv׸0)xyh89'O%z*8TYHqcxbzwK~xSfzCL dѴ$2%	$muՌ_F\U}o7@-<Ah{XwPkFdRPK>k[dQ,[GА!.7ꌕVnwF=?AW)ܛwݏupgɅw0yc}1F0Vxv;8:Ec\dHŤ\pJd_&z|\
>6e=՚mt9&-V,=NKg/M .*^;`u#2[hGȹjr!T1*vQ'³TM66q|$x3=oO[$ԣ[A<=c8a6>vڙN-,+$#[eLֺȫGVAl޾.o͍~!,@T|6%׮?x>\qDB20 װ
~J]s}M봣V]I0{@Z3ZѫD:-A텋`^;DA9-Ln
ŪLRH	Rv
LXpE_b({~tW(d,__kzD!$dMFGrjwoё uy&ޫO~O@n;QP hq_)t] 2]xyֽ%ܯ_]6eKٹE4
?J>﷤jroǈX}MI77e*綍
ƍ%~FKEk#z$=fxp
|]G-jUл}n~(W=_ENL
qN\wAB9Y8xєFsZ),A=mў+]:rYߛһ'n~OUs֧1+|4w(S !cѸUjnpoGa1z\,<ͮJg;@e;{7_*RJӭ?(-cѕA0Ɩ}@ru?m׋ZkMr]pJNaB^qH7^N5?j/{gOFAO;#p=aWzz5@AGz9=h$~JI/,kox_^:
`zoz@ȇcԹJFΆ	LMi3b;i5ĤtEeR>u)g=Igo`
Yܯiq=_ƮbQ5'Z=<ITGˡِ1Os@BxcTs$nRB(>_ϕ#<V<E/kr%:kfNdoolSn	b*h1vٟ=rqIϭaҟEҽv H[4mـ/*k#t~O,7-$ɴt=GY|:i(+5wCT{Ell^.ޢ_Y	+a}9A<M+Z'-ڨt)avo-<9g(%ɦn'0۾ !0/\$e4hrfWtzmpmi
[zRki*J[t ϜJJy&p)b8JnR++gj8r@n65:+U[>
	̵OZ
yZ߻$?vS$21rt׬6Լ7p@~M@d~?.ppEkGc۝?\nCG̖y=S:BS9\s8IAÛjƟb-)>^Bn\KFnieQĚdkn:/0jj{;n@j!%)hcZC064@݀@6.Y_-U`y.
ճظ@AJ7v_F麈YGkn"m0d=A =i!QIG}e|<tۗPs>&ĈsU?Sۊ[^#}ycߋeuZ\ӫ8*5ʤi=\c[ifG7H@pKylyՉ$*+TQ=^ПrpTߴ!7ƃ$-rnq,ȧݹ_[k1lШkOcӾ.2
G]ԑ^J$Rע3dp>>nhŪT+^YH'i#g
θ7!VّO swn}9MnQ(I7elWP؝ 374BER*N!m
Vv	AHm蝸s.m hXxxH=wͦ#;!l֌\b[)i;?"KG(ne΅u]KoӸ،^NP4>S z
-	g\s?Sb7Dص&go'ˀb+0Πj)ֹCw@9TfL?6=)	\ j2?2I7e>5Ʌ ;>OT]p1a7b*U
z4{%oH~Wɽ;Շ~ 
+ebM諭hzEнu\ePO
БO i$-xw6Bze@w}ƾGBT޷	20m҉G)).70$"ћ	uA"Y*m#ј/#+óO}g:M:PMk4LU*՝%
*]Хz #I| tyE8Grt-+Ihy}n(Wx}Guա)Ϣӄ/<7Ult@oI5 x(_7X8u$ 9cubBwgDhf~"'[̀WׁǑ
9U1s2ڎ!ٻ-lp]|HLN紏[|1|/-Ҥ0Ñ6( *bp\y6NիZ~sk}Zyǰ(c-a<LYjsyH@6LQQ Wa`"H1$@	lkc|qɎY NDttwe4.>C(?љ"]?Ԭ|Ǯ}gT`>vCE0#YH6wSsC[{d	qDjff42M9lay(ۊħR4$$r8qD[s(M:P<F82Z5;,(j.eF+J>MsғMxYY "+,oj<(2:Ϛ',%(_?>J6Y}sTE8az;5
P
:p`txk
FmewO'eDNNՕow?qܱa$;MA+R<ݨX,Op%!93h9ZR`/71#H<Ǒ*HK%G8$Z~XtΚh_6y=]ٗFw)^kΛ꓌zP[AR,n
t'aEe+S|>˰ZLF)M:#.̌b"	Ӥ.lF|N='MPRCyü޳;UjJ]"̩/h߇+^^*)|D8$C
D:EeS m|2L]g-L0[JA3hK<46AQ@p>
TKRa6#:z'!yJt3y6iFbk64ԅU@ڄUoדՁzd~B(qJ4]ZG9BWFxOgQw0mwPPNI	H9_ѼP6#}Ϟtv_EW|)MSjEA׌yYa'w6 ף̇]u	Ƕ`]k?Xows3עeBz S1YȺU>f:|#^Fx4o*Wtm7'0Gb*[7*rb]pZQ;>RsH]B?1<؃_W9rRt|-ߏhBS?4YK>IAʮ%GTYy9Q߯CDw~c|S,:'+r˗,ߣI/O r5Sy.k0WoR6U!juK`e<M+wz1bj9ezKH2$7f42
oy9]U)`+?̢H1p\ao>wӈʴމ1rRV젼qXIɋK}?sg/E\{lb}-Y*k][sozxQV{'H
uוpV iPzXGK=/򭪨اՇ~&(Fy
/Π=4mxYEs7j)g2a'NF{Tݡ=r쯛Z@-tpˤlAB0"r9KΎ-wͪza+>e	T;tzg$t=i̦8rg;Fר]AZ\SNB99|M؛X?gOkKʋ⛾ET	KA%a4갅dA=M`wvhpB4$Q/(mzlI҈>',*HvHI@ۂ}C.Xd5g얾nS{k+HU,'~LXɽ@)[E#е1 7| ;]U.!&opG}?.U|_xD#czGEE16g㘕Ҥ̵/VN%	O Rwpcޔ"JcM%R{q[&-ʧ
"'57-{[xw'To>,͇N.T_d 7V"V;-9;Ll!KUfm߿H_챟	5Lp]kU?C}aF\6tI)B-6Fٸmv<1CX0-9[kf.K'WrF\`[Įn*LyƑk}^r! b _ζ98C>8dKu	LBm?5[xEIO*Vɨ_/Q`RjLƇ8QH(";@|6m+/Qq׼Em0fB'1"Ӛ#r/_xkb7
bZ
V,%gʹ쐾̽~L!ߘU5%lo9ptοegm5C5Ϥψ1g
'/]]J֏G? ?m;d]7.uӣaqrݣR._`D}M.Au4]VźЇ9s/̝<|_ p@Q+ycy\G!'̴Q>-@ \	ED47S$.<pFE:8rFE㠶ißnڄ<[9pda?22O34NG`
6~fqD=D *uQMk7D	yr$.pםԔWʵecc(udqQrrE}-.ύ< a_mB/{tpi
)WWq|󽋷x$~-h5w\̴qHwz[H X\5%i/	okD	)qwGw6(C2MT d	!{x|St|R}1MM}ۃ򚡿%I _шbuw-tIN-봭q[]z>)(
@?7{5NfӴ#7/w6) 4w?눧9S
e6BIu\t E.RǠrw[lِ[4F3{NA'~nmA{$I%㽒AB+
 C1tVAnde5TQtm';FkɄ?E>Ks!-m:2(5)k9z_3i!]Ⱥ
YS]g`KJ|'q#ٞ:OPK K JPQ5P$ F3ҋ2'k2#1xC!9鹃DX3;_SSf޾Eü庖٥\d1}>!HڐhO37C!"x_41#x#iދߏ5
ӏm)l8`|S"%KNGfTke}׶Hk7̾s>U{^I`B:4dn^J{(8 Wї*wѬOq$yUtBEQO]5C t".Pɫ6bѵl*@6;=J tp>?<>#y
3:[A]v?J9N?lF q݁l'P; zK_0oԎSs>E;0X\I8x+-zb7w )O6><S&WZr8J(^ɨ+f!qpė9K9ݡRjr~47(;6!L(Xg)19/c9n~B
Z޾	65~od|e[}kѴSwB//'~q)ߟCI	)=2nvM.2YՔD	zԏ[%4=4ϗ>S'mm9S9zÛt$O=w.&8nj:
Oe/N@]ix魳v3s1wȽeO&&7`1x]}:poYb^EpGnwDxGVh2AedchE	o+q-Wvd^6
ER
OOo^Qz͓^{HU49LMC)	\KI)K6<MeDw0׵A|mPJ|m]rm\}["#R+ϭ8L/i$Kl薾7zF,3e4E.ܴvX649RQ |Ph4M;}l8^+sVZu̕Dډ3*IX}T!ܘ֭2dgC˄taꌹ(Xx"_5ԁ$WZ*	/bnP>9&}
ɝ0pfė-}4oT}~|]:K%:2c>nG N|YЁdb#v۪QO]O%Vψ{-1OwpQ" gk7!@$0*="=ޡ3k.PYޡD&Ar9*<gX8,xeΗԪVVxUijM;@Gm!.K9`25_o?RvDky;Eely|fOXS~]wHx9[lJ
4g%=5荑E$9#~kg_E[фDĠgz[ j!jS,6AәO$~ړD7HgO^K`#()v !AnU3z~]K8际UPE2G1իL m_A@0 ?zB=G'.E(lbL
y0YbBB^`.q 8m4RQyLNA,6a.{	QJJ/?#nE!n"]%|R.P(XI<r04aPn`Oc
TN5X2d0(7?MD==/pKn\(i"jB'#'Jm<U#)WX~	'1lUCHGrV߃ݷi%	NT.Ԟ587rvSu	m7HD&L(g]BMBx|MZgx!gHLуCZܼ	TsڟǬY,7L|c~9M&:ō#̢@|o,Jy3^NQO~Tُ]2sQ^Z
B꽵Ά$cD_r  Xf~rb8"nbKXxW	?c3*\6fUn>';DfS;|kAPaڤK8٩yjAVeָcFmRoN&)X-#pcD}螵z$H7+Lӓ	>
۾6~]q*_p'В]L_g2DydHGx6\MW\}Õ	DG35WD]zaU-,48  :PO%}:ϝ{_o
_HbعV7xǖl0Y'BCZX8/蜿;i{%^KK^KÆjIgcWRxSnج

́׽ڇ+ϱ	Uq CqK2M.COﵥ׽ӄq`^}	oA1NXeS	4y9RkfPқΦf))^sڳq~^RI儙@ƧsAOVz!#W+ńt[)C%uWOL,r5H8QI)N￦	Dx@P]*Vz\F;܋
|i<o\躿ZԖqvI`M1ܽ=_Tw麋Ux=t="wSZM)hqce#c)9LT9
{n!mJ?{#(/参7]2bUSӆ/Ǡ3u pC
1P: ;ozt˚ވ_7v3r	&旑l*%uK{_;TpY^6YLvn;!׹T${IZ^B2|r3U4Еn;1/a_U!^˽cwJ	bWrwCYuXO} kru>̍0_i=>	rf׭DQ(3s#9uߑ'}aXJJ*8=p*
dJQA9Vx	qxI]qd-&.}q}	,1nzk8RYZT[[ {	:ȐxOU]Cx^p3(_<,SDDiqxnI<~&1mAWInBg4ЮOQ)s#OBoAUqA䙰)p͸d%0z'gwO-j mv\fT\U:ȉZ)I?ro3ħS`Ud׬ԻM
-_Wчx-dw/C5 ),9JqMk~?=q?>Dlw@;¤\jvmwwoka:v\N$Es	l7zo9Υs3ޣ_G?]TvĮyCn@yym%$=W{]ǊSt^~ +NsΏAKjZ١E/o9UU{>n4	N鈆^<VyA#ڋʨc 	RA6W
woP$ң'+:DyY_igH"nrSCA;}[ш*mK>l_RgvǒŁ<Z̽~}k5=':s4 :NbM1	mUCI$9>#1iE\ 
cֵ)<zj{&vXk_kLrSjj.']-b~G!G"gO ζC#_F;T`	ƀȸ(r]G29@K%;QmRKxQ$)l	U>c<=
V0tP9M-%zLp1s\39$ߛ"
=LM$vfSEdKkZ#V
IR`1Tn)vhLbܜg)Jv (d@9jkE&IG{}i/rWǣlgWmpb
fQVb9ﮨ|Bwhszfc@PObM%{Ax4][e)npͺF(*U+1;s[}Vws_ psr[Zv; %`:s0\7櫞VwN	f"-=$HŞ ͞_*߄Jyv9M\G#EJ<N^_|~ÙөDz J*;&ܠpm᱄(9޻-p8о4hg(<rw[sDV-g=c?ԣKuZekAM^EIVvOA?̦Eh/;>Ȉk	 GCP)	B|dil>9˂	RKTH5#}NM6ygoZo\pI!\WLT{gezeU	慹]H,)4uKK1G[TBO
~B	}B=:vp:BQٳlr#H\fP#l/&5 @9H X
9dϕ&7~c{[LF TA<ܦV\ne]cL86OX8C2s(̓IŬ8D*?b?5]](pO|8m v]#˿~"ZPn#9R|*s+ej&/AqwOQ/@Q3u}GWn:Yn1`l/,`Q.A:krן&~A= aߖw吾QW>d\m	贄ύt{az`2SQ|[U),.߉.	 +<,(7Uf-fE8QlesˣXU< &~\ڐ_y&wɡZBb?Jtb8ႝ1BVws9HjV鄬I9/9_WV͂8ݐC^fx	̜xX݉VW^\O
,4TS=">'bQX/^'7!q_UF_݂#G<yҸDKD޼KǓݐ?.*9vvZH֋/q%
<i?[	PW	úGk'r
ПQ
*`޴YDh(~'ߞ?|0~{=$rF?6xN5r;T=Va_$<QFJ5/آG]x/Kj}#{}W1]-䋒Ĩ ˗I d=wȳ

x,dߛT\wrC:!+B!ё*,)wH\s8l:*t\O1QalL}#:*Rvn_59JN#aˌqhQ7:լJl&ٶ00Ns3Eɵ7 _#Y <B1e׎t*;~Xl6A :CCα6\"hZHH=tYia*A8fベ}oK·\޺`CWs@0D=][Q<"Kͪ- hCµ(Ijᚉ!Ok^oJJBՅfҹ37\1PjJ\s0U}眿t Tg4J<py,xZ<>c4*3iI*t,6'ջs*}ŋ(
J>5WWSU|x<5s?LdQѶGo!0	7&H	E-#팲moe^3%qҎyXZۼNtKl(#JoZ#Y޿(|a9es0׌٢EBf2{&
^:Vd 6>?ޛ2G㗱4Q3e&Ә
k2
<ڽ6`myqx_B<)	$-Vͺۼ;wS$ރo>=ڶ.$/780צj9VT{Bkg|`ԬHfǟAgQ0G唿~+ "]CZ$o}gAO~Wߒ %]EnrDu-gD,2?]n9>rQz
?מ&ZaO]yMr"?ƒWNkmxw
"vjm^<9XqD--ذ˗zc?wCAHN$6GUo
ViNQwCk_Q,!
	?_X
Ձ?[lW⦗?&BFGȭKU0J.\/7
`0ÝVҰt,7:.>oU](Fe	2iŲtxwA<ZK'k%g1.o}h򯘧P^	ξB9}C0Im?>uE̸'&	]Yevf
8m{R-s؟=Sҽ(.荻Y!@\gYjN7)ܻaiʹ;7f1S5Wӂ^TN
oi,)ő6Zj|jtVo+4n)r8iO)cKGbE9m@DfWyuC.3($3e$yjD*䥀09'SXsBfg?~О2I?"v,z/v}aCWw|~q|k}s"^^0;߃e>fܸ5@?W(u%`LSW6`d
s0o`inMz{f}N7
X3 ]ϰaxfK _O {14!4_ EEDŌSDYo#8F X?po)rf,8ǆ#{~2	F{ۙY:	<1_r/ IO.$ T}3]׌' }Di7.R3\O篙H$刳hB)i%܉d@̺Wz~=9@쐷K5{4Y-+{W ~'|BAטzn]@SUÑ'[
 Ƨ`'shysziu3	I2 !#&i<q_"UFPFEhQDobm~]ۿ?ti!sVpx>bq8(xKo>\9_f1gAkVBI 
aǄ/Y1xɷz:.e(5xBLqgWCC]&+_b8pM$ho9(8~xJN;ͩfa᭧ǃjQUWBOPF>Ѩ7pUR+=pʆdR,պ77ܹ?9=lM]v28Ɍv5^e+`.9Bt zC_n/Ώ0rwmr"E꠆\Ľ85`ujW?:}W
~BO>Zέxw3`oO7=D~r^a~sQz3RnQ'ǎ@=^uߐoNGt6
qkDY@Zlo6)5ؑе~5u,CT`h|"31md3-쿖hc>^uxZ9sEݹ12)^23qL-'S.
C==vaW%H	'$jٯe?:UFgW&Uk{\9x
g?oM&-Upwk_PD0	KL5puYPCrފ5mb8;"PB/='Vx<[zu!9/
qH{+ٝ0uw֗7rҷnSC5PkæD+a!S'IZ95xєe_@9r[
18dIbLP@UWx]|'|jOw"]Q؎Gx[Z+M#;|vFrIm]P3B=,|"QezjF0S\t{y~6lAp[b]#
=3[DNJ$qU
1|*7ia{Zsu>8AoevUN!&A-JRP-3!PS 
\@ſ^˩?XpӰ0gM5|RWo7?oQ_ŻA?#]wҩ9ȧЁ\pfTHjqTo-y]R+TW9
IRK
a^Sw)lY}AD|[1z@7@"89z5F2ds\Gw9yp>葛
#Zmȴҡe"B^TnlHGkT^wFFث0Ɗ֩^;l>V~ؔZӷ ϻ!@QLBv~GkA)a
jd4(sKO܁'o4^+ڈD60s>qҭ/zYt 2kz6--_ƚ:@E^˨!Ƴ8O{=wVX֝熻o%^nEʞ3|fOZ+r2zӴvMi=x?Odhaܼ9ݏ t -7_q,ޣ~;9R_ _<1G8+E[=T' 99]哎`1K ɉN刭
K2ۗLCLeZ }Iu,4/;j9\h[HHfox1NW/
:Z.:#frrW^'J_g߃6f|n,xWҎ|j!vVd? bt}ؒEdUCx3ExI7of1˶z%l*s 0Q"_*.Ч=;
dVԫ]6q+/P+z	޿O8Z)TOmĭDKKF?>=cF:܏24uAQ.g4jyD	rNʫw!z,ǐspBdNŽottMX]:H~צ{];IP\xmӚBZ;uŻ-e/{0~>Ѡec<شgdO][ѱ!W_BԷo._5/oA<^
fv::RJK^!_O~ijڥy;k4=`^ɪפWl<aL nKj=+}l;PՌ)4Jc+ckd*lNV;'dT1fd^S;7Zp-nlWyfk (5H'DuF
ڽ\' @_!c5) N}n x^[oFi/
Mr*K	z8N	磹ʙD|yz1=8?(%(̕0azy
utz"',QnyXFpT>\LG}kI6̀J" h'伯-yEJVDyc>NR9/Wܬ"=js&{W.{Xj_u?d?˿nNz|_[n;UCqhsi4e1
)	#%eI'		MS `wB^v]-APKsڏ*l'=c]ٳVg;uKk/73_6/_@N{@&ZA:Cl'u!p$.ɡk*'$4P)%8D:!#89=*WdyNo|O^V<)KgΖ+QqRH1j{2[XI|l5k/T3a zxo+2XëlE`W<|۷	S!{WgĞ ^d94eu򁳕#ШN@buD_xUߙZZ\M1Hk [5O]Cd"؃f],>D`b4k`XW sUa`B+nZo;t	{y>jџ4aO&$@dpm{Yq/e
<j.x."T,o(w_	VK̈mzmѣg]	&Vq/!e`0$f'qZ$B[ݓzܛF/ʇg6QM<y,9T<x p uo`u|Uey.*}C@=*Ru->:(f_;_0|6uݧR,$N\QH#NWDdG)x_]m>`"\8'GP&_qt pO20}kGz?#j#^LSB:5ŕC7ܠNv>f֏M^@~|xJ{ދ}I7S[OA	'o3w
&E@S-z)i6_HW初nct)Ӣ[{2Oս2$;0Tu
: PK޽/   PK  Tz[               META-INF/BC2048KE.SFG̖-:oC=$%J"ZъV<{?eD
y2El&4.~hmV?;J[r4EZ7m
}y \=(Vާ{ p_%K3qj/"`KObѤ4@mH)o;î?Cۇǎ?Gi"4[_U^5]`cj_Wm?~vw#'֪Aj^Uw[	%H0?aۃ[ _hE,͸.6 H$7q}P#xLzqv@Ep_ekon.+y+}P,EpZwƹVWi vV=$ބbl+"g?:G\w3?r]6=[~r~߇?"zg,Arǥ	jsʥR>G7OhZn㫾}Uݾ7%B{mlmu!C[4trx!ʨLF4N~9g+}CNf@ kYtMf2
Y
p1ZOC:
Yq7&YB/<PeTrq6wXuzۥ~oѽxmcܵ\csA9l6C %r_d_lm2v2N}ONйJܩ4߾ WxʨzxJ7kUd?xeQ|tDn?
?)@п<n!
# $'(˃48ai17)
=r<4-E>P!¯Bn\s!VAyJNR	\-
6iSd$
a4#a,-U4懪z*TZ	xxuq9ukٴ@ЕS>㚞-,bzdͻvm#.muV2Q\p}Oow@9I/ݜM/-Iñc7DAtq_(GCݬ{]M?_qJh	UNn5Bsă@q=W)rJ+'_#qu0\\d&#Y;II/!_nг~sVr+;5vwHeDc®q,&ǔbiaWsԳ|1[*A*duFy閻]E|	ͅQRwn2*ׇgQ8C<텼ib&)76UyiXgUas#Xrį)SS]x}vRːw72˔@C@%_.Awpl7<9t#]P'-lWk
G	
4?\S[Ō0) k}soЙ'hE츒獤]v5/RRp el[Aꩵ0P\ԅuibZ>wcnYs=P@ntq`F3S%k>@Z8|D:RJOm7~/z|X3cuf+m=3%PQMd"צ&y:Cl,ph`w'OEy *׋>̘&򩼐fzi(S 
]khRqn[X198Sm8wJӦ촡s
|&osG6	獇]..@ۘfnÀ]dwt];vϡߣݐ'JfLhj<gjQ5=>#7j{d\;)E,Be~Y1J~aǰMxWm'<a{#x!πZ`u%A}l.JT/PP#/+Poq/
}z̲0}>"(yG9{^c2QHn}y>H<]lzj$Em_VԫIyv ?[릊
\i{䂄$bWB=B|8>1=nVaI߷H!V_fQ%ͼ^})A =9ӡpһynx&wڨa=~6@s!W0>R|
?Jol/q<$kJsouFX&%o. Gy֒>H+oh{Ttz!jlB1zvPn1 -w@29dBBDgꒅG\/ tGЂEhvyXЙv:g/PS:y{FRooym^~{m|"q;e7s"vP	47@'w&th!hO'0hivRub
aF=+:jI7wͫ[T]E/mxv(|0|af/+W
ntvFѕWdS~5_<οvO_k<in0FzFi
krQLbrM J
[7Ii/~wD
EީG>a,D՛Jw/ŊiRz%iYw_>Ee
t_W~`}?ҧZmwGJ1:#Ωww"MJa~%ݑg1
Wqnw1ft-.k#RUՉv5Ȋ}Uم_G 4OCxܴLZ9
Qdh3Qf	D&pM+$?/;zZ%Y5#H47˕dR3}$#syv_C߷Pk>|^
U-@q l̥c:"<C9H+z]WwՎ4ղkgJK
k6pNs>@eߡ]
ȩʰ{S',۰Ƞ.}+rlOǖ҈lHfXSW?}{.CfA):7n^-1qsa>ens&eVFvv 9 Yy.@G& r/Ќ0,ƈ%cعWWk-.~뢅V%a+TX̮9\iLvK2L9<duGy-3s9T۹z|H6	t;'_wbBI>xףq~VCh?Y4 Օ/pW
IwrGA;¿z{+U- s5t@~8"Z!.pH$G'b^MuQ]4yFu20,j??'jiB]V& xDL$BZzYߦNHj$|:{~: 	nFWH)umʖ'1ʀK'ϖ76~f?ɗї4l5tt)EP$ڄ86zMkIv'_M7N^V-wK +[bJP]!,x@ո|Ě\tm\mALR{8~_qk|9`3Y-.Y޵iJvMo_̏mqx'	*q8D9v *ՓHWp<Ḱέ~b#R	yꬲU[
#>Caa:-Y+-e#r|#{''*=|J يln}Z1`oӢ& =*^x/H˵J'.>
kg1꠯q3v}|^ ٳi# b	sDvS[,jh	Uܴ>E3]aګ;V њm}9G<Vĸ͒{Rĥ#]B%1]t4Jo+_ITl;/XUK%NCTA5-J^ }-OHR^n0臇FdQT.t
v\WbDK-\]_b`$M<gWpH>
j	t,AczA3'dx(U
RF+l)X>}_o=QA
i'SV6WP
#OU8h{f
P_gA /1sʙ! ϝR@bDF:EWge(d}[ԍԿ.l$Tmh9)D33eKZ|\Ë.76)3
J:\=(IR#diy0XR2~<gr
cz+ LU'e7@ݮbAjSɗq|z%&EtX"rx4{͑Uyi:?~~*IW~7D#]n{4a29<'Z|2r}`qO֘5&-V=cN&onj o{몭_kUi۠Cāx ~DE)˭oe=K/rʴ̹
T9 ye	"d͸$,>~ NvO& rUK sr"e2uڮRt]0/!
9Ku:꩖JWw	ynX?{Ň=-d4f<>UGrԣUA.1Aԯw?-Sv߉UBHby.R3T/st"H{Kc,;wL7!:)C(Xpo]ퟖy/&2+J7ls	vhlipẕfi]sXTD	D+X~D4YJ,2+]}&/dUIiYjA
m^o ()ݸ{"{<  Lr<+(ܩ!7kH܍8`@N9)J^x^5خ@'\/[%[aa=)T?=Vp~t#zbv{=fzFpTVx:w;&kҝMѫGz_gpVZ`Fi:rO.pqF<.uU+E "elFGl=+:tSqdz8vg2A=nr%Sčxi	vw4'fok7Z诪D/[nJ+W.*(ZqO>dN7z
Z$"kb

)P0x+"aZ?|UE5˲hR[٥=||8(dnӴ-)M쯥'̵9kBW8c^cק_kcyޜ.T4I۾˖뎌XuN'~oD?8K{նq4}tDRgy;k"oR`JcsզY-۫wE_upHh ow	65tKi`~JhL3ex3{0f:y2s~!X~Ӿ.hӱ9itb\!љM.G%C(7Y<8Q*Q#z!,`{y&WdkJpY^ϰCrCM>˿k¿>,}TOz5J@"܇;y@2AY(@vÁK;hڹDiW;[ޣ/;.|!_uHH30o[
 b"=nhE7NBy2UmOy\%]ÀNȗ8G
#Mչd0do=.묃i=]-nbStnn4EQreN7
g'B{Vw|w"
Q4_$⍟\Wl>He<EVc(nt!8MyO;ūt4+ih]O:Y[^TBc~i%rDUfsWxkꔺWCAAg2G2QI2nҖE*
VW@ӳlx`7<FǂnȿY[4#C$15]QW
^
V4v]d_b?蝏LC]
(ǵ4<`?gdu\mKK£G8D`,Zxwz 4@> h~io{w68Y 
|8x
7'Ծ0Rt~íD2|97lgV	j5ParYNz\OY"jqw1핷 v8oLayI9<w?K
LI @njU].M5hI`K.Ǿ,`:mR5% 	4Kq)[toFS}{D۝X6--l[ڤy]dvjRS/)@]ߛ-|TVKaׇp<R<S@We.Ql뜎
$ڦ}?}wxnh'Uy$\dSfs!gǛI_Ia|&¦i,wŔ;D_CV974x/}|ͿlO	iuQFlmb\s^)^H܌;_Z^T=:*gWj~6\A
'=2)]r>f9ѠZDOnY\$>S_:}R5/Y =Α945RzrTL-X޽<M?fC|O<1ia3<AB;71";瑹$q=>s)4tZ>A ,;$#֮^_Tdvw9g>0~ǇV2<	T@c^V$#
dDV7;oMO!°+FT 0J-&A8b
9d5x	9K+Uqv{:H'>&Jr9ݒUNI1GB7Pl.T8<I%㔰?lWk}bB(__OQǕIګm`9S@F!SS
nފ	JVFdr
?/:=~kl,yJbUN*98)k֏
!,x:|Ylg}=!8Qp@'IXsDphz/Y90 ۈ*yj3*$\u㓥ӊ6{I:68
qKv V-`mS1c/BQlqPq{AZ+1.Y8:L)d2AX5u+"Ah>ER9Xi3ÜVQ
[Z71P>taĴ
C.mz[iUL#x:9a0ݸi_
J>W&ty8&rCkXfw/[Z{0g!JlhZNpgvtvs=F= K:E
\ldGIŦ|wr%
XM-0o:A{D'Bєo/ӽD_Fqv\kJ3t,-&r}It
:Vпcy
?%RtO0_#kU#,%<AtA#^Lś(Ei{?Er@ږ ĥrzZ̩zݜaS%_36ivŸp$܍lF_Gc$|*Q/׽5cePW-Zpн	psbSY>
MQPSkxxҟk1JF;;֯ [<q$8nR;G]0=SY]\ r=wMVU
6)"̔5y.xaNm3NtlE^f'@$U*Tnx!^jS~8c~+cB_´ԩVli`v,?HN#mVnى=\2/.L8󈨨ةrq>[<q&ʽ ǳ{10XfTT|>#2wo*~ZwLһ;WvKk\
:Fp9b	݃`4CZU(o0}° Dl7XL;B誅e0iȌN4kͨyKS	[Yu_,3 P[x~>0TfsܼokӖ[йwq7]Z/絸`2Z3n~aDZ#Sڌ#yBDWE)"3BSOaoC[dw=o~ v28(!.Z,8q$r&aqʁygׯJo9\2QSV&+20r>a#)%,,zo˗?oս\݃|ůsEZ=Ns/nf=ȶΟ37jArpOc3~c-9>61DSlewU8<UN$ ir7չD&%q1ӇKlH]UV=KDm[#.cgEŀ`OtiW:JS{be(zs=IJzw)LEzɹa0N9\`C)Wz<gx+m`bç+45ֹ՚{RMG-e_ێy	5ٚ	Fa:IOI7E*W'^N 
L#aJm8߂WX18L-n&U$4k˴rJycQi2<(B4Zݮ	92W=X/SD/?AHwkӻ)6,]3¦2y?E]IUחpΏs}n⮾&Έ^L_h\=ԏ"w=[9(q->dcQ+,OjA`CZmW-{'V[͒T#<./=o}%z;G[="٩zҸ\eյ6#$ccs8/90Nxn{wMN9lq[O}H<[Q itdWsQ_}ڴM:԰}a:;/12K}I{ie/mӮ¾o2N{i;tK-[PޫZ4u
	Kj+$th$sO^o5o=oaJF(H;	8rO)?]Iu=q{O;!E>:Wz!)bns"{'8x
]Vma#r(gGb72rxrvvB7$r  {;n& 	8TRhzFd\
t^G}ƍ|ZG}kqG6r1#C^yBϞ?A;,߀5jVB
hbZ?̕1O^wvK]B-
[W9=~-OKDVm\#<MLOt)oMK')8(C6
ctn??b~>Y*Na_Ltyd4@x8,ިйaN׆,D<C$G6@
P8_v~T-ރ;Axځ;u&ƻBף>ߚ-~@}H3|T^@ۜn\4n	qO䭑lN&=WDᦀӾEb(hnIPs?^΋r9I]\GhDwF<>fӡ0ڝ`5e nKLsdVKz+_d}NY-#kd6c'\4B'
4Ŋ98$ATY8zzǬ hם6yxf~znQI}uY
gQAh2ϘMGxW[ftʦwf=M(D	t-|wkAz.KQ.vd-3帻LC$ZtMLrX]ׇTLa峸6s aM7{=*NS6
2%\0#٠!-5`QN).
50
abGo2jtUDD#g9 2zSJمϕ*z"K X1AX(b0UmՆĶ	fl|.l()n8V!A}MFTueB{МA>7c<k0Wֳcs]z 
w[4q`xg
.n 5IW>O9Sfݞ[yIp7
LyE$֡a}%\k_0!+0tbt{i*Q\E&5+ g/ q
וV|"7S@b.e
=CU?"oz_vQ6ԭtȿcd-фMP%4˜?P*@BsԛNCMorcU"PThXӺliL:ފ/hK_*l24 CErlPށZ+Ff/$,짓kx1ê|IFZr'G蠭!񚱍\blOrE~ڿ?}`>f)SGXgT'ܢ^}lOv\sn4m@t,T/F[AXjyX8AT#鯆GEl|GV^Up;;Ǿ_@ciqbu7oXZR5HcLcO"&+^SXh6*cϾ"'a̴ r
lhFy{l?1sJ.2qiWU_/t׼ִ|Jq>q1h~
c&DtCJRf&B:B9+ě4?tpAgKXx>ztc',+U֮}>?i%NLw_^k xTWgj 	T`v؆ GW+2vwtے]z.Q̸<h@iAf͐3. #0UHi]{ijZhSC<Gv0	H%uY@6{Xn:2qUvV1Az
V?y9᳭]N+}y}p:(]h\<L'T[8v?NZ}?@N
rdBR+戡mb)&k-JaL}K 7Xеg㽾9MT=qҺmM~D`B
s'^Sk5Ϥ=
-]{Ƴ%Jh@Nj,6Rۯo<.yq,DAӼblt94^|[ɗuϞ{Z`1x#NZ3,*eCVw rUTDSKvG
ז/}(OI'-P~LBJŻHb:k-Ly!}^$͇Hm7g6X!vsy&#Fb^B^ͨ<p-@皝d,AfH$&nbǶ.,lU ]jko
ez:UI[3 ]*0/Yi#}mhw~ُϼ0<?`#RlP7-:1JrO1l^TGn'bHk'g^)mϛ3ˀ'ee齂zET!]Y֭{-@|(Yt^߽T+Z]lf9 Ksm[uY(n)U82O??;W*J}t"iB6}p97[M],J\AVkc\bAu%b$GcYTh
D
U~Fd4h
qYD Pzտ0H2+uO`MwSLeg'
q"w47kͺG3u͇
ejcY[=N(Ve}An;zS:'^1YiHa[n$+_=C%λ¯RVljM$PM=N܎îbvE=jOQQ<e}mv&Z=(Ep-֦ss
3O|nv둷C;}S M*2d} v_:Dms}:hnR8Iy~]P3kw~Ao>ܥXixKs5>Tr*,S>!a{߉OCƤsatf`
$t	Mܚ҈XYt͜c.KL>1|ɦ>2_<_#*w
n)y}?}DvHsAȨ;E'kNLہԺ'w#ad
hQ8(Q
ftܩܛ@SOAQ|ESȸ3]^/3:2TBGh饯iH|
C(k@a"xݍu-߬ei8\AWBM~{n4 ~urә}rA`rr-e	Ưb*[ 7I0d
(:j3_'zJqٓRE"6҅vBv:,,*M(]kQ[503Li7d65aOҭIb%`x*"8z:5oZqp^9eVNE[ٽx
[viibYfz0ۂewZ/iv&8?(kMV@Ʈ/x%	Eﷲ	}w<3\OO8?5E<
@,x{uK*o&5"\-AQ0uX@j+;S^tEխxZ]x/ ?[2W	yE&b)WBQ>8̚C#}1z?S
ǹ`UNpLf/
xWp2y׿t3~BX-.897Mqp?
eDuo{>vaiqKG>ShTJ\FiUHIFa(;]^V=~KԹ*Nly鈴QZX+Z mi)ٞo}DO;3'B酚8y
lBe>mq_.q%^^E%;
	<єG*GOkσю3Qdf{<gۣhٻ	Pƃ_ƞW("ĈR.l;7i={p/x|8J5PXCv4?OTܾ6Smjq,E}B 	>+Ztqӯ.
B{yEq5%y0WSvp
Rf}h*F.dԡk`ۀ=ٯ'a4Ƴ	*'{\TbQ+-+ԭ)o?bV3b 6Rɞ98m7y;]n 0h~*	q8 nQ;B8YD@ӱ7z	kΡs(> N~Emo/G|7Ђ"qIQjwxsIiuyH/z<㡒P\zf#VsO>.!yQ/
<NmX'r}^Shӄ(w3|͚Ra!޹9hauyZauAq?ĲO9pʱEtW2?W"+d
0,.6%[/$LNb^JBunrFRW&lJ < j0D8ca^4ћ cy=]_U	 :Z!ydj%s-lIk~<>jVeU|9ETw8k"PوJ.*P";RiSIԅz1tj'(t́ =8g
Χ pF%V+j|Tg;yQxR*Z'9ilM,UӶT-WFDlڽ&<Ѭe|EPW_p^_1;)qN]+USYF"|CL?|wS5b/-j{
;jQG`zxt@Kƞvבy'O E+)K4jĂri밡Zw&4$eqݰ^?sXSaMӿG$6D_zJy<0J%:SE཈h]CK(J}`Dv ƀ7p
`M$Wpʽ
İ׮S覞?&<^=Ag
I{\VPNrWHa&*tdaL](VkqˀL</<JK/wh!?mզ*uǳ  AP(9mS箻Ko剃lt8q0X)Lqob^~Ha|m^WO%9ABq[:{tUoY{2tkf6}E~3jp_ʑ]󺘂a碷BqR"5houB
NSziUٷS,ieK/tݝIIv\u&Ktжq?<x:	݆ǃ/ׇ+FO܉&}4ŪxUa)b]owG4&\cFhDwaP+a9fS9W|մl[kubgl}Hi'쪜3eU{t)86]+LD3:<䡲פ޽7|&Mhztp
]2R!X !z
{L?jo-=xZ7Q(#j&cB,9}a}mz˸m;1ț(^˦GM~!pK>jA70Duz/%f!x}}/\_ҋ	y.l;tYÞvz߆y~^gmuT(wX܄SѧMKDS`;_Ǎ/3+DTZ=ѽ1i
$p!7 Jǵ*BzZ<ux¯	tGK ц!nTSxӗU>fR:s3ʕMv7BTcC?/icl%[t80u{݀K3zz\EO5h
Ķ_n72{'TkQs\L:x_ jyYK/H-,^plc2lrא{~Frg@4@/j{zt4^AOv}4HӇl=S!t
pigŴʴ6>2WpnN=:ŚK6}6=bD<PȰE]bF
&,0nKXq3}kCXFlx˛NTTTkYw]CՐ/u~T+#
ݷV=FN'{ZeOb4T#ZM}
K)s1Ń)=AG⸟hZT&1
FZuWcw"鴊jb(Q\{aWxYcL=azD
wfݫf7AΰƼ`Z]ZD
{qD=w	qzvj/@h{}VL1LS`eEqg͛Okft|iiQH`9֖(>xk0s3HX쎇FIXݜMX=:# e,>\q}mu%^M\(Ģ*l쁨/h˭%Cc (?dB.7
jyf
WvG\θF
I(Cc;/;OuImCfΏ\>7k-)K=?DS	זHS` ZܒK
U5.(V=BbrSE%aC d22e=(Τ4uqb),@Dľr$ŕC"5$χ57Ϧ*kK{J#~toBiwt_ߤ;pJohe@lu&tz]agndS
~:=E]SwѨ]C{NRt5NT:,ڰ5\1xp1$1/2 g{<;_h,N6&2,wub`+R!KĿMhx(熥jww?F@3<XO=Mh4'{_bB$F.Oe(٫.[Lo?%'a-w=u`jD^n1	+Z{	}OwP2eAʒ[aM~˞^nxkƞ怦K VEMѕ7\Ue(sl@$t#4˵d	kGS_`UsN,g !t<CbBD*XO+Ca*~ Wgj}e
=42PقppO/	KbX_ӿ3c*ug5W[3d3mӗOŅJLIg=5 Z7GP0q':6e7\#|Ƈ?ퟮDÖ̦1[3U8ID':f2دXb|o*?y^iF8i/Lvu0/-:b߉O8wOd|vq4v,ϲk;0PMFܔ#g/ԼpCNhG4ĩ^eMRxN`ڝ0
g݁1tkGŜ#u+xtrIZ2*'gVZҏ{Xsd=]I|G8BG2qEF)~=GN3=kr<ನAmS)7ȹ{ur<ۗ?ܬ[2;9\IP	GɫrqͮL;r21VtKܢ)Man}'ïTxi.ܺT- 6fz$z(i8&\!RF);n{?~kP}Ep1P$#`2Ң*վhE.OO%ޒ+J&II`3($r*;EF^2x,F]- ķ՜)'Q .7Q[A)d.7
;Q7\gy_܅=mPjH?B0Æxw ]/+fn6c%O(i|)#eԮn~8*|7k3*̟蟨yplIXG3۵UOKߡcX}7"q}_^Saor@L	%WMU<1'4X6t DS$~\̊	6
9ƣosa~6o=8vJhc7)N#NQ{2(U"+/aPL.	KqTVcPA_/D3Q2wV
m0;͘I(D$dp57̎=bn}c(low/v1	É.X{a͝=]k/pO|;ް!9p Sx{ [&
Zqqk=Mq8Aj@7JyxH)UcP*%V!U_ƼO<SMx0x,v%!
n1js_IfI[FsPdI4
ء5O-㺓!H!Doy=Ja(Ce	h
hc	Ϙ$9}>0OqA/`/Hcayv$rfN˴pNw*R79;EH@/;T_hmD^ǰUf^w!k{D]C1r$Qo5g+,\#|DGq8eDҸ; SC1[G%T^K\)2ՅYZێu>nJ*GNWi*W@ԼإÝjO/6\@RrĪQѿק^mVr7HFɏPI	=n~_5䆢C\4R_cx48~y'RȎ|+Co
#<OK
C Be"j-=3MSgѪi(Ds[>X(5%dCgt:?G.50tX(?%4i sOONd1em1N/k*ґLV0jOA_2֍-ԮioGϝ&@D3}]˗[xါhO]ջ1^ro%-$Ȕu-㶋5v_o:߃DCގ|iB*!:v
ZVq3nދ}Len|%f$>LUhպѧZcO~¾KnǍ\KTtī۴3N"T+Mnv{zJT^*s\z8!`1[Ks6knt4.J 5	I"h"'ᙻwҌ1FQgq5.c1 	;34woTն?ڠ"j-аbW}qˤA5_;Ծp	=zSoJ`5i~P	ycvdW*E_B%|?_h=-awVovOfߪ0\Tb9n.(GI\u{?7Ri%
s-{@L/`Z~As۸`Y|_e/'-+nмIϊ+m1ܻu3IT>[1e.};;EV;|e9Ǎke2A;hMzl8p@k.E\.|N,#.ߛ0ߑevjQo1">p~*y
|d޹%g<[~ PͽXo0]_	Ȝ3BJ@YKۡ~P=ѱ^n
Jm_j'n>6Iy
^/(
t'DJ!LK)Ws&<|~9īgKenLrGrxjj}^=b2] @}syw^{l7!;H]K=JQ VqN}rd-TxfC:G<qkqS=Mxܙ_v#MQ]]E&RG]u%CPd1o t):>R{:
ަ_ƿ
}Քt.V'N8v8!2]LP46>}>Xuéw遡T:sqWۡqֻ>($ц@S
=̰+Q]|ohk,?lIB~],Y h)̖`޹&ej57ӈO%!<f4']m'ezǹ)IܴG擿p]ُGFk꠾Nv##;uQD=. K҆}tW> &i7IA8iwgz4{{kU{n	z+?
PC1{JU2xؼg-Aoz6NrOGo[G>R2x	aEܢKFh~_)%Tb$պ.{z24]q֘x/ζlv~_AՉ鲁XK6%UhiݕwzGe	}櫯Lr>ח+8×:V@dR)Z12qo>;P6ZwFQ`}J3 ;A2ѾL?Qv)$?laٿ13Q3 	d
T+s]qB^q
+
CCmcYwMry|
t`Y)TA_'W+yOo$;P\d/j%n4@`ė{eCq>={)Ђ A9۶.muyG;ހId:>~"H 鎨T4h<hdNR:_r0|Ȼ/?R2q
jg }-#{aND_=No%f^,eL08lvZP{ަ
4kXGD@M;K?78R@WۉnMh&q;pc*GFć!.GE^q
fDjAgFl^<#4Iw6꘍i!qLFD׊25>j0z3p%8?!O!,ى
6^^--QVZ7	
ITEpJW	#!|/PЇ7cQ"?d"lO{%6![n㟝vㆇ\s>
UyZkxoeo:cZq,IsQ];ۧ5>6#8+1p$ʊ|_oO坢yY1;?ߧvd<0VgKʙ9;-Omޭ|nN:5\͋\,sǨg͑|hpi<+xݷ#'E_*FM7[{8ǇuqH- 1/!2]Y_6O6 e:9(|v8im*p8&FOM=Kb1|hԆNWca8yhڔ7/l+@8;<3JlzP痛jH͋M멜x-V8G6pͣ7
&+C6f,71=6׫=W?
ec!iTpף8Ep_]8 tr+(=tHo*4"dٔIė^3?oƍg@>&ّYE`MHևau5Ou/\U;=gL<p_)GWʪ|<-.}ܕ$Xc;*#B![K=e6|Fؗ U 1 ,~n1EB;O@ms?[7~2L"WP[E]<Cƺ4})苟NK- ɒE]Q:V	AvςoHl|g4:D 3DGqW_Xt8-o%C WuCE~
?4	VCm4%4(x?qqn٨*:O`yL|;N%k_cjUǡEy2UϪ)1EU4yRTYx9rGf|B2=Ie|ܮ5WL?--TNu}ػ[ld&5'չn)	IValhe3uRܮj?౳/omFreN
T^\w5yIrȖWjpYe[!]@YyY~9hg }8|=`=pZtU@3݁mOoL]r		7u^\ajT:9^V\Z -tD~s>{TsR@7sVqY_"^ՆqUxouVX8rԾA.9By̶%bB#?KbCcMC,QBgQO>!xZ+\{p!`wo\,jj́ޒ,վW ^ղF{pXxw ZzepZXN<RZKNmb W($fQ2Ŝ@R^&!GuX)@rGҀ\LR
@,-۷M\yN:P4 xgf/;"F`3XІh9K6E<w7Q^,@{^64tۣv=$j{8t`^>5	ZB>?f><efX| Ӌ<
(+v[kA-S!۽*D<Uˊ|Ƣ"J\S,dlǙ6~̵Qk~t7(x?@XGZƆ}vT*q	ҨFCw'#~i]r鲨F'{'H
OaF}`Y~lmbah<1p{4I5#.$ɌF|$qFf65!NINcj)qQ4T*'r)"UwA=ȃI}Sk2,a>X\4
EGa
(@yq572qxܱr뜋(Em0hK031h;#_/[x/8k|nK!>W.`bl|"HhQe ~xcտZyڬHn=:A}DL$34㉥})(T(Nq,8|֥ӞQ
Iq#K[=߶')k9\6.+-Xys$81ՔrgWPLԴ`y}ʄJFosjo yL{ޠN_AV}㌓)6J	UtK/>U'$ary~[t>-P)^4"K-`މ
g~3x߃]
F=
-}AdLJONңKĄWsF2=:灤p-qu
BS:aHS͙9.E؏R7p(q_,vډL`z}+oe3h	=ξ;mR6۳OP1F(,h_z&Qˣw|=zU6zo=?.~^^R$"a`7"!kCyǋ9nI:F?뿈\O,z"B)y[by9MK^O|-Vr]>B[7j)Bs%NZH gEWi<g;@A42C=f"p(uSwHT<h?Bp9}yuAl.,\GTtu{mMk?O!<0+՘ڠέEsn]Mcp\f޷KFK$%_^m]vCF	N+sVʁ(.׉ȹ8}˥D7ϴvS$+>sGwؐ!VXE:%7y|ׂ*;1̯NNyQ/-gCB)^wSnZX'x
j]+;`Zzǽ}	%h~Hdp!H@L7m?ƃc})^CPzb6qU"Î4PcS j`\ieO0Ù~䱁t,DX=i͎ܭjǾF}3U8tQb }2M&z4cHTڥԉ	̯ܿͿ=k9źp1^dvYjOѕ'Ͱ(%Ɏftf
S.\o}w9*p]ܻogP4k#ONc;t$Biqʛ$f6@iyNМ	fP"oTWpN;BWZ&|%lp}D/#o?^Ǧ}#
ja+XfşN]H?qq;*oT-^Y\!a)]Z8 <vQpNJ[fܢu3$/g-k| .-Bj9t+{wpquOo#АiQdcE"8e!wzY\5ט0LXC1i^tq<YF;A)
.$W.`~3zv{X+I5bT)>{&DjHMZ39=4O0Oُ֡l2}\Oi&I1VEAj[-;yzY}٬="m.F~
m<t#*шгz+L*_jS]:aGNpqrTv-]jredPvpW&iK
bqR7'(jEzE2W-_&uF ~n2 V{ń6NBky^nC:y)45Oh"u.{TQ `#ur$qደ>U#	Vɔ*PsG( &Cr'myq[ǺP0CݽbZ7`Z&i9Ʊ)
5tX`yQQ6N߶DH\3,سev9'{R;yx"
+YvyQ蟜qmOHc{p{$Rb4>p ~Yh
Q,l=7n3:(Crufe08FLiy@yRSD:1{}s@kMP6)_13{ep9@x16=>SN0s^nK96W\DT&jCfã\"51uˬnOV(hsg,v~d(8H8&@n ~i:jxk)4Z$5h,tԅo0嶎ŶͬdJ;(q<@Z
w3Τvcmͪ8u~L*t]SWs[<ZBdq?,υfIfxvB?yov#Ygk^hB|ZÕgPF9{D4
A\n?={mR zdlx*R>@(Ze;
79y}֠+XV\A+[CNڱRO'-m6_@ܽ_R?q3<^`,\
;`~SUaaz#E4bwaM1&?+xqG]QKަAIZ3s:T\]6 Jm!+ 珎/")#o{ԥ<I+ *D\
=vAnR!gWeuݴ)G`jG=
Q	M3tᶤtKA;V{ʫq5Ԑϸl#Z${/<4Y?
@a]bQ9*UYսƻR0҉Ve,ɨCW8[,Y8#ϩ_mダ$)TW9sDe@)ƮȽL"o	N*٫4MhH剘Dcz~!}{Vs;?$c;{eYˋlݩnt뮯D-7e{^@RlWw݋,]asVhqoXWFX|sVi:GwkTU*om,Wcu}{ů1ilQ)c2\^:ei6YO͘5!2N!hmmior%;z̘@ywgh)t}O(v6ӮQ
;.04|L%.>#QÓ*{JH-8g[Igf#aPO06GA`
w +g!]7,i)ӲQIuVZkfv^d3=Ru+8ԓyhO\:5Xs(Foșíh::ݶSLkc#cd{GZnMa@9tqQ$.5olLv#?]>odj(Ǽ~8{"ZL\rl<Dށ5	9 ǲ$=WQcf^Oay\pTzϹ$w>;\ޥj?eg(kccJzO.'kp{(El9f> 3KewdlHLͭ_ *"y$z9
.&Aa}Q"
ko-˨`C?w4$ͣW9PS8o?.hY=-]]8߼26v
rSC#w#4I"R-p5]g-Nęoj+`pQs}PIc/@j`7oM˘M5i"VjCWLr(2ɭzkK^Oiv6mǝUKti
K|Tq?ѓu1sAv{*?[OX(@aw϶eiauexE<fhJǯH|56}`S8ltËy@OP[P[oi>}	k'ܬ:/	e]T)Yi%@P{Jiedޙj&oBu8ۄ
%6\+֯o`H118tK
UB&;JN f!?BmGB8o(S],tP14vxogtb}Ux}Ʀy	KGq* RHJpZS2#ʥnv/iS@|ÖN.2I\QJv-nʁ1t=8ѵ8߶FG~[ɲٌ@ӫ	OYF;7tX3"n~/ئJOےi0J('kTBQPEz8;%"=P޶+znۉ:VgbPq]~8LPg%b/Ьm/;NqHT
&VT%'%嵟߆5[x{\QLG@&%?A+Zr+x0)uQD>N(md+/K k:{GRk+45f_C~e_bK߀
dM_a

ٹ,z#ms
ƄYZ}Fv+vYRYaz?mvwޏ?kHc]>3jAVvJXl&nV~C>'
m)ꪎ'Ts3D0mN]r~1Op@QU+x:Bx 0+܊v'BWF=QWUߙYPnq@%6֎tHMI5-!%'y	[ZYHpUVvb7KOp{d4	:^ΠImTpͬ'ޜ#~^ΝB+rIP2%q~yo叧n53I@?1sZӕ@jMz[;UB7]
{\Q>Gv*3j>Q-pTM|Ku)X6cV^9k"bg(@|mmU[<7oJLAg\vACfw疿8m=i<>pwQ^sr4h2r_l9>}~
]FLs
S+Ј~"%	ɨGЬE D_)
8|foj8HGSgbtXΊ='ӛUG<e=9i_Â*r[3y<B?)nesIvcƳAM&Y`	XUH3}ݰۂшA-f6rT~.^SX"Xh O1x$?&e=N;̊Gă}-ylRJ/ޗ
N#tUʦƮ$ոbAK⊽;ϟEݎ4Ъ
ŵg
DG->	s3uָdDBwCyPcʃeB\g6{mK/vcoShD\Z+dתQ4ٚu:ݿ~M^9߲=Ʃ6)Zt{af8WDI"J
b:/ў}3:vV<ǈx8#eirZ}{ӏ}+l8T~yЅKYb+SMߐ/YUz`V9C"xT>H#MÎ,nIRZsM]˒M'  '9B4zg+l^Kg.@ʣ&-!c16S8}$|W@(R<Щ.:.H,LYC|..:C.-Z%%[m@
](snK=7xN$t?vLg7ǿŪqYTm0?Z
W$'<pzpT"xM},m=ɏo0IvL;Hܥ\N3x|ͿYg١?&)۰!mLm؏ph/cIيc w?S`5=FHAY[
m+*ۢ]q<&m7Od#v^/qE4tzڶx/fLL
eJD p-UÐ\#亿iHBGPB 1$h)/GFK \}{aHt\6SQUn+ zQT;ݽNTZoJY;(Y,z! "HOk-_S, Y rIBtvg8%sc>ydDʣϲ"A5wgR\
{ĕk R*hf	쉂b*\t;E`wѸFY"@	a&ۮkMc)`XH{WVosCQ	t=ćXhZp
dH德+uJΗb/K"?
#qn5Kܮy$IK#~B@W{O{zF0\i3<d
VRKPK3*nS]Uk"uxKaOLǖ-3Ǹai{#\+w2um=TfcbMO0{
Go)TU"nÒ'ԥo/G2;s+/jH?Ij8؋
`ƭ(q1.Ψ,z8W߸H/ݒvQgHf	ɍtO.=w{4vX}N*(U5awδ'nm_t["f#zWWvxNPXLULߓ1^Kwē؄$;\D	YƬ,cb4߃Pʍ
GȒD˵R;DpmfE`4Š|Zf>Vۭ'Ơ\㲖\k\
t	EmiN4_o?B?%}] 0GJ
TRI$-#QqV$bVSaj0,nIH0=g˼' 	3 oEK&8F@ pβ|F\I L_%~w՞m;iIVG!Pj3H[e'}ICg<7AB2%NFeØ9ihBua~gh8.팎$}s`Chu|3/$}*.-{ˈB8kCJ\rHL
?}U3]^YY L+oJ@{G0JC<-/[7]2y^N13MUQtgJ@zU_ELax4br8<v=t9hH7H@3.~nـ>sôxkELr:fK6LZ=$1ξ~Lj U&'4-DrXqxsk5C35tu%NzL3y3wĉ?+C5Jэo#W,!p!=C08S bp.Yr.vil݃s6/?7E./\ElʰEFĘ!9
HqG<ԭM?@Nήc
9LXL}{˗5U=#BXS:b/cz;Fw\z	N2;CE(96zzpU"Z (9kNC~qHѸl:X3maXjC7©/UBHS5mq~j>$qT]ux3o;CQ7ov+|CK,2BV 'ўtّp`@E7,~5~UrcdS.,n)1կki\֬Uin=^E͞Ot-iIC&
o),-{qd`ф>Yr~Z}[ͯGch1A;ʤ([9h&K߲/WrǨz>+j/|wdVnާαekX.6FF<QPWwz(sH#)zWnJm2T^.r}Byn=zghμ+kG!}.l~XroWq3Գ=K(|S᭞XQmY3J9@~(/عY*HR/]u\40<
UKN'
7C"`<Dځuż*C7Ig0?K_47LFzAtЫAkP.c6yYE*.)BKgBHShF[p嶭vU*6!VÙ?Cq{t1"Rt
"le
3Jde!םy@Ru8nnVsQ侄ݹ(nu(
:[|dNk9K$8GlRp]Dcћ~h,2BqrЭPdrޓSs~>CٞE(FDAGrTZRct@ϻ_L$M)/}a<DaJ		)y6in=/Qnב/NB4YPq?{[SK2<lѱBn
|
G5[ig|
F|?V	pn`qD4\$`h},7Ibx	\smRm\!<9u5%oTyZ]ߑ/j#p\3d9LbPB @k3	txPuwYNF(A 
ol	h1 R>G$mD!vx,F/Z< %6K
֦+*lFp9`QB$+wxQ|T0$-!@ۙ/x5Oح:Ne`̤.lR+;P7جӼG-yVٸbB-f!-_@f$mЬ9ϋjoԑ?ʝhR)~B+QISwOx^?B3q?FgQr[,D^X6vGEr,?]Q
ĜWJk\ؠ kP	<Y;~XF3ܽ_43;n1evSOm.kyAc-I^S94(xy\m8&8	uokϔI/o`qjmIB
0Nbd71 rc,ɝ!?=D^<eiB5hQ9":6\+`T_qϷNGQ$PD*a	n*)\jbuTCؠ4{ٷx^a`B΢N9yW9_V.V
Bk5=슯hx$ <_j<*ʂiUjakPVrڿ{?¢J(ez^F4ݴ ZG#d8DY=	0%Vqoi ֡=䚰UF
eY@1k+^6	Wd`o
\݃2Az.Sټr=M_*	x}4~[5NN﷕(!
'ytj-/y;:xA:W<r\VK_+[ZȲP@E<}6|[YU="7ZEh5xPx)ɍtq!=	IzdOxZ%|X+B|\?G6&wwBZ2Fޛ
cT9,1<t[8?7jb
c@fp\M3Jڜ^=qwC``:SQb<gD~lK)(E}يvvcXCf>mQ&F5$d5Ib;~Ӡz@ts=(;_^ƀz5z_DѳK,{̖vԻS\(>2`T&	J eeJ3KYe,0RF|'d2z<V߰pClMP^j\7WADlq @M([ձ8fht|䬔Ii^	hvrv-^	7jǞyЮ\ܴH=;C	P7a?}>^R@iBFO<Vyb$)l>9'VASjGMZ:zx]goXőOBz(4J@wDEwȘlnh	J&/ȏfz'M}*Hf16gݟmmƱՇ|Vi#C7 x듺.a|ψ*}aX˺<ddW.Z@\Vk{TkyZ~o)>:UCN1h@wpuaS3ɸ-"moZNLǱy%rUhXK
W%)d=CF^o}rR2Vhp1
Лp|/JF=9؏G=i;.y?'[.]7!u 6}{>_4Pfiu,2nI /rlBD J"_Kk'g82i$OnaT, v5v;U:3,Sջ
ר_yQ 7HϠ	(;N脩-⛳')Q(c/ygS1T#>FC	jq`5Fs}if'xU;k3։ݴqZPv283q}
,%~(y3	q_ClX{O娂;`֗~KBLoj_7u)BXQm>I>2ZըDk$M$9A:Xg$`R$<=\z:nNZ
lnϻxjvCI}7,F]nOkϦxS㑢Q:XT}bC;P"z'i-b8s}ļC`).=H9 ۖt5qU5!M:ǁTy/T=huOA A׈Z8¢ʦxLPM]r4͉dicl܈	\+n rr-oQbgC܂.auPc}CEuߥ^rCYLu#Pej,b'hIL*yiR7v
R4d'Kg51(|.u/s`x75zU}6淺Br\P>eѧP³
+/;uY?G <*2'L:d.<qkp>G&=6pIpFX	9C7ptaLn8nf<<zTd$Ə
ư깛aamkݸ?ȏ6^A
`%R:WiϦA4IѲBNWʷ
ذIaJݢZ4'߉C,Zǧ״ʢP,o\PqbZd5A8Xf*q+_}^K=[v=*O=p$[`[>b$pD4pr|N7Е@<@=jfUWg,PB-{.b"_o?:<ɰؓlX6c~Qt>!эjb0vc/.d`uB֐?Jkľo*PG8p-uL4/rnVi	Ʈ
Tz£v?];Tw%C4
{qƙ+FL;	B
mj4\.EO@;aS怔u]j"9gѿ<Ky,CbaU8Ga/jw>;
+)=}\47y̴s[+<DΈ
;J_
ZUk`A
!qz5\Z8/ީPG?
*o(xRO3/!;S}i:A$	=-0!W,8-_Lq`B89]
R~Ԟ"̱Vexܸt"v5_7kx
xk(Z֢DčB
`Ahu/,dILrilv79}?KOr`F?5^@)>"5V,5 bq"tT^Bz~xny
qVB]).a8b&sgܬ	=0􍳜XFOZY+G
ހ~hF'8$08@3m<ԁ'[4s#*a'!ؖro4?7?YhOH]x׷c|`
_No\	 S{A3nQו).)F
rwT=xF8{5t9]$5J38X@u</
 JT{ޙ*pOf? \gv
i*ELBCr@1( ,iL;#B3i<DyfVzN5,g*/P	flt*RDSs9[\&߼r[: Mȡ;k</dk77uCWU@;`y fκQH$NyBB:kyzwd?1N\#O|jFk^
T|{klI/W*&f A7q|ړ<g:1*S \#i_J7(qmyuo%?DUC(Z1)6<ai7 iYcZsRl&.SJF-Q7RڸEvپ9w1_#J&i~r2fI
R/+>J0篑HE`+]J`<%KT1Za[b&Y {g]cu:Akŉ=ԘyO^sEuJL(?ItRVxI?g*=QyAiv R
o1㠞RJ<'dA.3>{!1DO?zCa,.q_.jyE COѣ_m1UiNp`vOIH5y+%d<b;<KZ; )VaV-WI1	 vU,:]x.cvFMוoS z=Az'H "m2۩o-^":|67v
rnl\'|z8HљN0{o[P"lΗjZbeC'OoNJ-ȍT]Q֭hkKP\ê˹k(˥ͼ=0Wb &D=7c0t4g[|0C9x+!pnX Xߕ3/./VyU3Ώ}r%9Wl.lToA?S>uC~f~;܍d5k!Tug
8t@ɼ,ACStlj&ʐgId1"|&X[>/ //YgEmѤ8\<*UZB!;uR5ɞOgptݸ+z~9ny_OH^-rQOveV3[ w ~ُn+Nݡ<qRq t&X|[!E/!?/W;#)w9VmS³#<qq[Xr~LYޝ!]egm$TJJ%7pҷnӁЌ%Ȟmk=ČNV.Qo
L?pLS9p`E
`wuoD_f%<gEyƅGC7G|q%˙_QTg;o=d|`}l^eOL.tН{B'cH^z8|s6Jpbz|cԽֳp=aMvWaS˄h`qR_.YcAsjRZO$.΄stSW8L0t͊}#T+dy<D^Uju淶o
+{;g9`\Eß7bW<"=n_yKb#9.JR#][68{HzC_(@DҡbEvaG{ vsUOħԛ]$J(QZQA)u@#߻_|pL1RBILRϖ0$n!_TRA|?	LBE\յ4KD{."Ivc%GOhKj PLWXwl$0@aokM4ea@:k0	dzSsp
>eOޒmMneT/M&H*Z5J̾;obI 2 \mډ>Uy^2vՂ}L'RHRձ1(2jvEa N>2Uo7Fw& y:tU?ըW{V*n'}xDol{.L;'\	LEU?ȟB~/=wF؟NdMAzڥPJ9S|Γ=f^Oe|)7x-r3s!yuimoď
ڔDʿ[yHtt1
DpNKæg)"y<Uuz^4/K_'7V%K=̻%"<lLمZ66IPPK$߅u;:(9P)w6
>==6`T
&*
$NNWBF
0JZ,.yp>
^|xԠ COVQ
 yB	_Wޑ|Hl(\]ǵFsENx7O/p?
᧧a»BN!WLrU,vڏ%ɪN`D2$}DGzgu~TD۝bZ\6bGt2G<W M%`Bw(@%bOw.="n9AdMλ/yFߝàaiVRfPUV>G>@a0=}1E}[srȩ^<ahýɔF~EdNs5oǦnڥy;V5>ۗv7{%i#h\=8Q΁
d{=*}^ɵA6m($ oG|>V&ACiɖƞd=$'dT=@C@ߤ~n0:*~?y^_EN΅ENK~B#I0Ȁp3d'p/'inC
QE<ʳe7:I1|Dai=gNgdW[gꖜvl	[_Boz`8$\Q6j%>֠n};ƋxSr>nzňF"aMqɯ:ҟ 7U:f#QZs<͠y\M4]&;	
jNտLq[ȏ(qͧ3p^kp/vnhgǗO]\FjNU2Ήm
I!r#;}m]YeJ#,]ZVZkZ؛xL>v::	璏*^gVsG\:0\<\bnKEw"ތ>~/_( Oe*
 U[<_""k߯~(DnmM|[ɂX2;x~/3e|b&MRQjبgn4b
x9jrOsKe=<%" I8q ƨnkD_v!Ӏ<oZWXsw܁ jݭy޴5ERs<],ݵnHq+^):#
sML]
Zwf`(beN"R
F/-t6xae&} EyHr hU+"fxIpp<ov!G~)sW͇T1=%;"ejdhܰ!Fb5k ꣲ~p'? V<)Y|mݡ3zݍs4sI/U_R;9Rs4,= !w6(׈8	~o~(QGcJU<KBqwKm\~#E@0MX_wf_T>z43p'gk5ěz`h$k/[:pMb%3[0]WPpԢ:2ORsӦYi(Pz7j-^BK-H.YuE.Վ3 `InkM68$>W}yOR"[Z1K.0ܣ Q71)rOmwrOottf+ 󥾚c@|QE4]vTz-z)Yh&ǼɢnB%ԧj	͔ m5J޲u=̍(8
\Ʀ(c%N#Fj7
pPKҤ   PK  Tz[               META-INF/BC2048KE.DSAŘy<b= K02}K[cMlٳe'YkvYP5YxFۭ~3|:\s\\ "3" S !(rNdA L,IXL.r}Kl;)`AGȎj-m(W+zp41[zY\m1ޖkevVBF:[3#$ I@BT)D0Q1co <(	 As?sںϞ]C:YDRjd06s]͍o7}GO[GAO&%s9oCfV#,ȼ g]ά\~zg\ɗIy»H]J]bϜMDKLv'\REE
o	T9QCHϤM dSOZg9CyƾhZ笘ARd+a>b,ӯg<^vδ286g-l ! =[`ï"J{~2 ><CT 4Ӏ@Pb c︠ }w80<Eܟ `i_6(̱Q9U:
=3$	KoKtR;8@qXfw!^`d<cL}G,˜rr[ΝM7Ը}xK-%MS2K#N]ӭ<ubNj+Ub@ޣE%447njvkMvF^l(_^vm={ŌnU#\}*U$*ыUK5R߳x>YQ@bB%|`/k8Lkv,4KpN1nEEJ q)qinE%=. x{ װ16p%WVp?e+a|8S3i~^HAAoM<c1z꼳|7MuލVMs>}~ijm,U7BܖZ{~V\HҶ¥s4WգW1JG/f>8:yg"T!%;sSəZìl=w A*>90_m	Z}TUպ9pb;иu-0odR
YtrgYs L =zUz1nS~~Nk]wa`mF	͵G]"|̀(TE3z&$>5NJ9#oeHjs#S1L!e}션n?
-
thD[VߨI{!Խh|Eɫ&ͩk-:j3iɦi]6ݽ)AyBWZ1j[f!CfO*CVO(`=`5jۡ.#jE(<iNR[Qt6\_wfE)u4
{o4P)>0뻪8
!B\{& x`62Tn5LYI\3Y@^qFyٯmꐐkwk_G?^GY1Y!=gDoU9C nځ{SPr./Ǎd@)]a/fTppcӧ歚#gWڊǓ;F
3r`sj<t/=4q]O!2E2?9i7h
R UUA1-Eg{vͿ4P2X "$$@A8uRǖy/L5u#=QEz8UqO񀲑FUjڷ\(TxXuS^9siF`w>+?-E=D(xved.xqY^1a^dn_@e,Kީ};^]JʧdVZ_K'X֊6^Kpk'X0ݱ*Kc]Krv(:>zG,qAguv"G6.\yOl^G!ΐ}
UlBhn2`)s:P@׮\e_mɹ:}daLgw]q(Fg#(vW7{mRy"ne`a? 	e[Np5
fz@W}}u&?u4Һ9/K^
>>3/Tn=sLMVpClm8!*H  $`&6gbid ,l	|:x6j䕗3 hzP(;9loHC(߶Fg\遱A\l0.n[%zoۋiq@l\K Ҁ+'ﮈrT?g>pekw7x5`|~{U/00z쪳s;bRDS&iwI-5k09Tg#rfZb=}Ѻa*ɡu<h?4m^z/VrZE`_~r:Uȓ.?k{]RusZ:go!ϕtpG%﹝>jQqR\l4m&OF 8^L{P7Wk:+Yß Yb7]GbknA[qj9dy7 jN~c9*qבg5sҲ[?#Iy?pO	|:Qz$.+o
=
7N\{V+7yY9Y).!9(F/uqÎKz4/t[Ob(Y3cjʚ
Wj#<w
+*>08Llc2	!|ؗV,ѝ{is4Rm}~7X%Bۓ_>!~}nŤ걌S+z:on-vj9߸u|]@p@8F{MFDM/+\] _V`++˃fE~
燄 k@6x
[1Ǡƀ!9Y>3 ? e b._wϘ+ֆ*+/BqXc&ָxDΑG}L#1Yk<ʒZ߳P]-myluX(1YF҅+/BBJ-˟m/pfϙsS60AiLkLNQA=h	3}]z/F@N9x%jX,k q[(RK
tMc6,eQ8q{+m=<J1coW.-.xzBJ|$#MEʠ`Z|"\}G/E³f7Iш\[c..qyYN16Æ;txyn1čҴoKG\I&
 c%1bV7itsEZk!wxZ",*
RaafIsmp)[JuθXEǪn;<⁗xF)
(N2?KS[/!o
oGMx0<NtR I#t RD˪<c-byÐq~y£kK(GqQg,2SY{ueG&np.MK[ƚoڽeS͉(LE큪Ԃ@lP)y3f<gvJN[-^VxB"O*
b*^"攖	uk.8yzǿWlIw?k^UE$c8u	GJve{O`Gd	fhy(*N_IOyN0
v3[8uNgZg?{t!%G|Z{6N䕤߰fWO޲@u8;?[s/zJIG'SHp_{U.TqV~Q_1$FOQ"Zs;bE'/iM>ݿpfG8e*c`3rxA[3=ǮiTnʉQh
E v4S/BLl2O {ޕ\[}lqk	nwfxޝۢ[lƤ[%Zm>D<'N;73M2%28ʴ_7b>uHxROj5<>-jX9d%ΐk;9ߪZeQy{,RjXzpLw34ϜzAPhzSr
T89Ê)YS'j]l<?2
qQyr$&5'Lcp}Ѓ} O'Jl_,
C0d}/jddFD'qhQ#kS׋SlcG%".>Z~"~Q59S١d<wcSRX
ގM
lʯ4-^"*cG-7`a}XQmSʝ̥YQcd|U
q!b3VYYʸ xoR'chˬg2+7rWKV
~+
+I;DWlw#BlvglceWcdX~ |Uծ%Lra3
n}oq.jr'Q5|sSF[iџ{fWƵM2<l:p~	˯h<LԔW%O?Ѕ@  w_1oeNAl![CӍ
S'䌋RK7X[]؊}?uP5&ե=r.'NyxǞ)	}TT5.Bd,v8	59,Ӑ-/0-t#lTmG	TiWfk]|'>*:&h2MFʲGRAla«STnEXEїP˱ B9UL)Kvy벴Q3l7UzuKWd?ՏoeMtLe*y?'s[+S%<tYm<%ʚQ^N]Ui(MPѢ̊Q9RfPuXu'UQٌչޠ)2rםQW*zNGɷ
(RJ{܁$Z0o8"Ogd7?[p'e㭃-6тrw,?%g@Y uXˣ:pz\'!ǑF`bل:&¦bTS>JN) ϧL<pIP OuO[-)`V<ES#'Yak9Ø9ý]0ӮӨUIlgm}BOӅiO|^*R#/PI,Շ)Zy07lOEHs?|B.nAZ5UK^}eY61Տt]ҖEbrǵc%n
tK3)oq>/?a[Kh=ݑˉshoʰL1*7]B,yߘ}P03`_$oF6BPu8\$;}}	(Ƥ}u] @䏡N(<j e(Wra{b:!0{ݓhj@">
Wϔ+44>m^Q!?zB}DO<-79.RڸniL]V/MT>>@Ămc?Z1OZGzKWMԞ-Q\\ ʷYy*Z!<%s(EM{x4^c0F0ӳpOwThtOe/%	2cj~b~{Ԕ▅
fWҳWؕ"NlWKSS@AȦ$:M8JfD%EjHEYr̜-j1/߽<?veEzW!a/:
"6[̋tbxnMB+N4ڛ\RDޮYc(SJfNָ.x}@{g58{ŅySuk[/ʂ6块tL٧S]S"Xn'{ԕu̥Smƨg_h
jspR>'nN'O|5D^5	N]wcdfJ PK=4  B"  PK
      A             	   META-INF/PK
      A                META-INF/versions/PK
      A                META-INF/versions/9/PK
      A                META-INF/versions/9/OSGI-INF/PK    A             (   META-INF/versions/9/OSGI-INF/MANIFEST.MFn0EFE$wxUt++L(!w(KLQI ;|m,׋Yg
%I#axϔpyHQY'HSq]S
	'lG>~Ĩ>'SmVeUۃ'A01n2lDXhQL|&BO:J
9u/\
郲#{j>hbpn_E$%ƜOx
ޓ2)uN*فQ΅ BM{>䍖l'G	n+TRR0'=D"?=bԻGifttd@}ΐ3:HĦs^$%$!40cBt f
nVѭ9#_92%icyD WWkKJK=/-̨׿I<f> C)n̉un3)y9{N*yܸTQwp@pjXM P2"qC^G%hTw*D1eaj)%E)lr8h2F׾>dGA )e[\6L}O}0D|j0tՄ[ZWwO	 ͤ}cC8R|TQrB5޻8G=NюYW<vغl[72{nM
A\_TUt>JirN v\`Yo..\6m׫}|PK
O    PK    A             %   META-INF/versions/9/module-info.class}v@g$jJj,J{软kGdpsqPVǣ;GY'-zm冫^[
aX
ZW2]]9ɦ,dԏ!7VZ~_z%h0NYkĎk>A%[y"W"WMe!nnUآ1Nqb6%O[4%hS
9+-Ԡ(25϶wC
esYAR!NR:4UR&]2RBU^ݢ9*4#IAӛԔ)o7iA3]ѱZf
Lr3*25_]pg6rm2^芠|nJ)	|s|Mv4yL[y4ʊ{\i,wIƧP!c6[q\ObLDLg֚l5I3WAc &j{Aym-#Qg%
H]JkbS4T;ܖܝHqZӲ';lrk,D!ןnW7N.\uFiDZyDGV
m[uu;R>p'4eH{V ApIp< ΁Qp)p	<.e*x	| _ow(Aj
:PKm/    PK
      A                org/PK
      A                org/bouncycastle/PK
      A                org/bouncycastle/cert/PK    A             6   org/bouncycastle/cert/AttributeCertificateHolder.classX	xTW,y֤$&3	@m,$D }3yL̄7ԪUqwK֨n3IcV[wj{Zyedf2|s=%?i ,6_mk塝޾V+xyzT7v4Á`,

Ԅj"!pAuP.X5pj:~ڎ%EĢ5&hZإFBɈj]q_Sd$j¦MC˱Mΰf/V5~D}7ay$6,;#X\7j3Zg2z(6ۢXFk6fsɍ&ډXc4aѐf9oO$ dKcK6DTʹGĬuvZ<!TOCIۈkhW\!3{A9s3rGr01IEهd0ц-pj$P9.J@,bn`m'T6_sT=X ?tDm'BڐǢ󲳝vx1ix\ޣsdg	jh%vw.\;;6
)j&^U50Wc-_r2n:YIEw:֗8PYX[1Q4?&j6JYTK0g@	vnViPQFnc
~fH
왥R5?NtR~,/[P6T,dݕokĸ ~f$atn$TJ%$4K EF	%l	[%l]+aIRN	vI-M%\%jR]b6d͚2R6)ԏUԫCӵޙ|ӭ^2nqLi ЪA*oX;`-,mi^vj07wT;$e%/ɛI!>g2kfqbs܏(o1DRN%C/M>(2 MNc<nxJ~f(8*~PWQ^o\]-_L_gB̃[+Y/.-Ewّ.+v̢P8\%ݢkuP0E
395p*ecXK^TBIjUPyK0ȼ<R1W	Pp
.qܤ`iX2ܬ`-(/Q/Ǘ)ǭL_`!^+I^W+؃,ś-

.,;*;%g}2!/d)p(çd>!Fý2{>0.:<0)00pgN3|Cgq7Ã_q>0pWd]%Ue'Ri/80|
=N/VdX4|>
5t^u?(AJ@\b 5K
!<$Ac/oxn۴fTI6ýOImJ\J7yگ76;MNmmbXi6cƯo-n7
9.o]n}]i=9,ѸwIg1ߖRK
u$tBNd+/((mLjs%s
ߙnf4We&q7c) ȷJжNI\G)D?33Sj3S[Risֵh\WjwtjX8~D;)]']bsl Nt6^4׹cܬ/k<,l2E1!8$75M84!\AXGEBXřBw9\beWgg43mꉽ,^n<yScAKIZs2W`qڻ3Mcv}oBRN|<v 7%|
?>/dדӧ FrfҵI؏&<S٣0!$:M
m._
مY،hwgSG
b>zW
 n2q!L#pR	9<}vV<S!t%OB9p	xM	[({;,e+8&s5ȖCF2T򟏚+D;^k3^<j5#PK    PK    A             6   org/bouncycastle/cert/AttributeCertificateIssuer.classV[WUN20`j+E b\zA!!!4$mfҖzi_p>ZJ,Y.[{fCVL|g}9{3ɟ[mP<IYɡt&JgSnZI#ȝ5>ohC\4RFFO\>=-%)b7zҤ3̼@Uܰt72Vb&-cp@ԃ)S12*if@ٖ$ؕL`$@O5٩9#f9Vz<&qV7dp4s-=Se樭Zd7&ilko^b{4́@yOTbLYFOq]Seq73XXI
#N*rb9v}mILe]=)x	{R:9v5G$=ML垳v%|E$j$j%^xEIW%$NIK& (pȽU4U桽}Gj~m@&:m6җ]B&Wج
OC^v=}^"{UC6?w{_ewr]M*ԷYsN+Pgނ\)҅gjBn
U^dhbPaj8P4ᬆrJs2(cP
G\PKԠw5P	:1"+*Bx_Ec*Z0`hUm2\cPE;>fD_qOUt@gb#.|00Y0ca.0J1痭lcׇ|QGNx
Ne(&Lf(W??LsiA2cI56!Ýu
>S_0di+=Rg>D5C9EJZ
jm7O
;ǘ_}>Pҿë';ZVh~d[c)8Y]!ڄ:LWsóiEe;_he>C1tǍq!h,_C819}f%vf49H	:ϻ@0[Y7l\XGԀZl濴[k3FVFRE+X!V,}단
g2n(eb/A;j7v$
$$:	<EPKv̳  
  PK    A             )   org/bouncycastle/cert/CertException.classuN0%MҟP"4[KF5VlHEH<@
qe
t(sΕ| p>!:+M	&4o+泌)ţwpdB¨'%Bډ_*F#FH8[1태Uzh#ruiq:%G?lKc+N젙j!FF]B#Dwb)VkBO!
{+//54e OlPK   t  PK    A             +   org/bouncycastle/cert/CertIOException.classuJ1u:3UkBgqWq3JicdHdVCXHr9߹O c?%JgЮ/|8q~y7\S[Z(xQ¥h	{aI-m%o(?Z	|cl5'(QiEI
3:ȺHIhFcO0*bMino8|Vq޷vBHG.AxE%PKY5   v  PK    A             0   org/bouncycastle/cert/CertRuntimeException.classu=KAIrw8cRH.
EvTo\9wǿRP?JNAX;3;ż8ĘYgÜiU
[Kud\!Oj9:XW\{֡4R*Ȝ_8A'ADY<Zfi+fْ0f8F4[h!AG-B'{<SZ	w\bG1ƍPKo   b  PK    A             %   org/bouncycastle/cert/CertUtils.classX	xTof7yyHVL:"Ie4
cF',+(Kֶtm6	Ƃݤ}oz{3I23LP{Ϲso3OT\g,f`Æu68j<hMVG|VÍ{Hڷ鱐_ՄXoXָu-m.@rS6wx4E7{gTEzHD
F=!5k`LYԾ>g.P#mHTtk 
B=^E׃b"UbTʧ~ͮ%fZiu̧(mE5OG>ڑy2}A=B^wh)񕲮/R6Wcj0"0e[Xm՚auaz*f"L|	}t+b mT*Jhh/KѢ=n/6F<RIV2Gc!!ߔ)NBS
QO(UC>׮E"jufPCe
;ިTŢ}1M5]S?F'jQ-19v%wyv5Ү5wPbxnBD:whpui4]ٍ!7x:;}Z_<dO0pO'J=LA'f&U!i~޴Jc$Jg⎤1Ǣ`1,5HZuczw⠼2{RVl7(DJtO>V :=ST]>5
j;/xElQFb-!ߠFB:T,(7Sukv&F^g^i``zɯ=36sARbhօtJvЬs2h5e QOYꌠ*3eON4?#ƫhBԧq4J
ſ5Yd̰)湙R3XX$:$qf	91d1ivf:4htV7++Y	hjQ,3r1*˺0D|qi+N'wqi뒯{ۛF)z!5fБ;";i8*з7u+c!.n?Uc^O 3np
%6%TH&YBV	k$%\!J	k%x$\%j	m^B
6JVu%lY HA*aM6	=KŶd)gD1EEISۖ{"x9!D-
JC剡Z~48T9]Mib
c
R)#8hmBåD^OМ\Ptl>']7],k?{&g}G0	U?rvyS&lLf(hi&Jc]Yƣ3f؛+E6,Җ.]= ?~i)~h7eKq4dcshR+x]Њ'Wk&ǽi!2M8r5ik4@[u6ޑHN\Sԗ`)s)sO"E`d5U;L˭F}9v^	puڦO:'2_lv-]טX&sabdG#%t~<wOC)?w]
q)D
JqHAޫ
+(4¦ Ģ
.bQE1S
~
X㰂!n}Xb|DA'>`>`>B|$
KX,',eO1xP)h1xňJ<`!>`+,()
x_TP/)XY|X|]|C/(÷
68xIne	?q+ncq;~,Sȗ-7I]ƢP>e܍YL~dVaq/ⴌ?G,JB(2/XRƃ/,%bwdKL)xf8$DG#Bc!2"%,Je<2{S.=Mލ3VϿ͏?wEUMji}oG)+%sҷtUA|琘$?nXPNbvwZD	 
qa"NL}b#q7\^|#`v9	/=]3,#2$f0L] qds=:UC-//?2oq9CQ:<];$R{v
eâqX*|}Lc@|do<yQ1m`ebX8,'62^~NK񅸱#Keq ^NbJ|3bq>}띮uX:AkP]*:(.UEɷēL}wi1'w 2ǋmglmㇰ5/q\ҏb}a9ݛ'}l}M3B}p>bL$ߥH)b,vq;TY
8i
";GdPr8e5m.;gյ{nm/)z{?$+kDXϠH5w<S1Jf
^ӻ	[C*#Bm|%&Q^d-ޓ<nz6\=>Nqٯ
o9R?,:&򓨦ϡ?GE1qM8Ms")c#8G#Vx%ˉ\|'N	
;-MdvE\MzzLtr-:gq|k:Ø⬫9<:b2K:3UBK½Px
y|;N?N8sabk6#BLs9w|:ׂtD-F9&]e1(jEn-s3rqKLZŒD,VXǢCRFWU
(4tyquvH\3|/apĶa}Hc`!*Sb*O
PKD$F  C"  PK    A             0   org/bouncycastle/cert/DeltaCertificateTool.classXwUҼf:,pL7*jSiKhk56M00
+TqoQIiͼ;߽ﾻ>
8XQef](&gUe8;rE#cn
ے0֥c[ORƨcHU!i	'cNJ9S>9bTj\НzSRyv4+F97h=l 24?a
4dRDh,1vp$%-z̡NL6dFL#NkmCB.#n8;ó=6>
;nآ1n9ga#QVUۮ;;风q+55+5M=\38f+8X$¥ԶSX:2ZMR^\BFvN%B#vƊiiCZZZ3ؿr':{oLZL>2*y Pa%$^6rUZuVUV{HyCaR	 NuiUٞWӡ78)4&0̫Ǹ=4Qٍ ٶ)22^]kqƜ>jjbmpl*LPE$Bg-X`iZZ	,X!p9
к~!`I`P|V/$)A=lgjC3Yu:b#=S'ROfz6P
خwڔŬتTR
Dnv>RE]H^ͭ"6omIK+YV+<#8q]<իdmhF^ej*d9}WWz%I!)x򢤝}>&L:\PN=:F4M5c-U|
]ŔutQ<RY+`?f+8>2Q`)_qPp&6(he
N`A'3R0W(8dy\Q1c9*6)X,5
NbZuN\\30tج@A "&7XSjq1l]pv0bp;bxPF7Rv3Ȱcx<pKf_FVncv3Ȱ.Ge\{`xX:pÝuIQ#_]VOm}y%dbG@D@tZӜ R]莶dh"gi@yOn_G[IYSyD᱅m95#
vi,^z!z_.`so!Y|zytD[xooӰ-W5o $IZX Ȇ	
תZ `_X&|e_XU}jWZTYԺa%+9;a;j"K"(B`ma&-p	9k\-ܻað!АǺ(y8^-E|"7PX)d"5z<z9$oI؋eto:X,|-|A;KOh%}vjZCA'Y'z..7PKE}ۻ  z  PK    A             :   org/bouncycastle/cert/X509AttributeCertificateHolder.classY	xǒN|ID9-[6m/;RXK{Aie
RZ^ۆKvpKBZ}ߥRxowuؖ%w͛7o*ϜzI D].8|xWzPз']ۂa-l_m<흻zj޽O@\,PCHp4ČZ"
6ZlQ?nMdA	heFɰ2<FHRӪF
*Pگ=[t=*uJ<lVPw5j4KmeQPB	!W'uq%p55*6~U^%4cttrcEv˜ZLV]*݁6MWȊ̍d@qfӢeb;p>"1CU'Ź$']Wmj,jtY|F83ZڐjM{3-Xo4T#fYq^SU$=V%~6Q8/l6tzpȚeJN'd+OxB[42`+='51~@ᄑs$XX\-fuk^aZZD2djԘ,Huf[*aRSV"a%kwZ7ECC4%C2-
nćH4)EmkVZ
-\*Z6P,FRCސb(^U+MsOWCK` ;U3;^MYۯ1y+宂
|
@}>4OX?CYG%hiJS:s^)֔|vJKifV=CMVG[u,;#i62ZhLm5OAGAа1YLhaꉪA}DZ8fs!,^-2Y**R{;ņ#8H%7$k
GՆIKhƃVHJ'wue<sw8T0gB:wB9i{9d$̗pf	-Z%IhpvJHX%:$tJ薰K¥vK+a.p>	WH'5Z	WIZBJ)t;ʥ~\ikd,Uwd;ndWFy'qo-e_1݌)Qַhv&dW aoJc%S=*˪HYBj_^DrMG2[Ӂj<jV_ֹ9yӏF"Mxvyy;"Oks:<_MOq27Ik&Ք@ԞF:­\ӆO!Wl8Df*|6X\m>s'vb"9vɸ4Ͳ*Z*g6e	Nws?|T,2/{a^v법"*Ok3$Qz±sm%.Kߚ333;Kr6̽!36f;7{rEvFϿSS7yR+xem5(|exs.p0SBEVb
̕q=2tWF1'c	C
/#26%xPj|X&r<$cʨGd3GelaXq6:&#OlS1|xeXG-!2*1!c
X'd\'eTRdS2T|Vj|N
|^||AFfUxf.+_e#ݸ3c7n`x΍,	+n7p?sMY߸q;~;7bo^`ïܸdxa??Nrwn܅q7~J@Om5ß	`(`p08
o0׃[,.<xKN֯VE_׮+jc(k;^.f)xFTُyR*09KNpOxz.]2H;k&X$M}baH(GB,Od_oZ4৏@zw>ԍb7A N<ĵ|)']֞[qaj`9A昼&kEy

d)ũ9%5ǅ<EPKU$DձCo62t^=f[]l܄XvŤ[ͶxwbI6.&5|(]iEc{.>
EI>!VMԕT/Rd\ ~:+~,W&Ċ	V8ʋlʈ(8r	I0KTmm(s試wNfJ.&gio,(LD\~亊\vF}8?H:E8	#S	{	2ySD^OCr1.DBfPմ5,4d~ŤDV*)dv2A;3Y	ќd3Zl$6l[7!'yt eD$Kfx,FuB,MYIv_ EAϺtfvk<Ns[+֒#3VK\־rAv{"&qw_ih:4YhBl,,9F'XUF**ds\l;QW3S
;輴,epGP
۽*t7[v@VkBsAc;y
4| P\d1Uʦ1n;@K-q	GDښQ	:BZV)|xz9wѪ83?.mG۪xPKDV%0    PK    A             .   org/bouncycastle/cert/X509CRLEntryHolder.class[sF8V6B-!T%N s!vRRf6bD#|CNqx䡟-Idߞ2}y<f72[Mp
>K0-,~]z
U'ڳR:/v]+,e0ڹmC*Ҿp-:v5Kaϗ-	ObC>=	j]at%Yfӗ^GRIR^
Jsa:­k;Ϥ0yUsVwGw[Ȫ
3ͼpnt/b&#]QbWy6,/TEۧ,Fq5'Nػ2Pe*_h!h[s*#j0K
4𕆯r]h5PK*C~ǱQ3F؜]<5j8	dkTSF'ʒTUˮUG%?'ӕ7vƳ
w&V3BԂc
]BJDn/D}5{Qm>1GYCGa8R91sp|1Ea%t\NJ
*qM	\q7u2qwuAA4n(D^%g,+q[;~|`ZEn\!W/P)/+ײt
cPP(GNX O^ksq+6
'i){
_IL&c$;h`
;eap	
iQzʔF.tVF`O(54QEC
l!FPmtHq퀚!WQAy%%>dc5G/oCJ
=lC1ЏmQa
HPK}    PK    A             )   org/bouncycastle/cert/X509CRLHolder.classYy|Tn2;yy02ʖ$PYdQGC@Gd2g^\n][J]AK[2	ƊvV}{(=7If1?r޻~{M^ *`xp@quMВk-^U]Aֹ74[r53	ܲZ@G^5닆Dt~-hlof0g6nmKɅGW˄aFH3`"ѧiP$Щ/o"j]t2*ݺa)Gba#FHB@ѷz4aĢ9iPwd7dSSXMII6fzkYH!*2ayeF
Rn9z"uYdMou*c<ةteM}fonuBBUZ<j>r]E=_N}KGk5rBv\ڍfŝ!呮Mᒑ.;Djڕ^Èwk̐X\o=zg!3;~nբ$d&nF(-0Ynz[4K27h#nC
JlZn#ϫ٦ЀSaDinqcSmÜii[z#V߸ԗ`4c&+[^;CL73`Xg¤tgnu7hVWj"zqDv7ED}7߈y6Շp}=yHD.-<!1(70o${vފZUCa9<nHo+zXG(	(mE'B(%s.ooh6?(pb4YVB8S`*nQT\u`!LpW!	{s-pKD0LAϳW g}S+NGBu5 =J6gt@ryJd0oe*DdX@`z!'g5
~F5Ȏi5^fƭN!΍,]}n̮*y9*{zMvXKUNƮǶ)9)TzpO%qHXrҭ	6DjV>|u>-|FzzDfMW@؈
hh쾐}{X簫	}Qf3cx,D7_ݒ<{J+2|rq7n]5WH8KbrF&f%Α8W"(q+$$VKKtHX+NBN$.XK%6Jh$Ba	]bDD!qל<wcsB4?<W!B2PvJukRZ}'e=,#7
155HMJueֲ#8ҍ͜/zw}4Yk5JC*uR̸ud8;a]V:J]'2]"YM{
ȡ;*}f${M,]
">
k8i.(4ee)Qή/@(ϼj
1zπr
3jE#PƈR/θ8SÌð2`aY
OΒ*4Y*^,|;"喌zYckפŹjm-6 Qaեg1Yfo
F3XzFfcZ9{>sSJ䲱.UBgTltܞ1Vf#%#̭{.Hd]"'yp\/Uрq**_ř,UL'TOX82ULd1ESPTKYE<,JUloϪ*V᠊H@,fb@E2Rq^Pq^TQOU9}qS gH׸lE,E,NYSU5uxS,|]|*&[
bb6=[}~T,Ux#?VO*gsv~{[U)oXkc{Pp(!
n_YSp#FTq`(Vp+X܎?+§NGop=BUp/'J<?e,f)xPCbjDݢE@C#E,<,JYL`1TXDu


/z?I
!YLfAIq,H
=!NR$,fb6{,)]OT8e`nO,)3b}6#/0Ĕ)~0Jey_*o7ЖZoG(
rcnʆ^C3Wzނ~=LIz҆E6j=Yqo/Ok(Ďʢ~p80 Zd ͕")$2z$EK_l=1e:텝sn#wY|bǈēK%vevd;
ĩI5*&јؒt텫x?qP\r$^&''ӜTq]']2 >6*C?C8EBnQs&J,X觉lLA^,;ӈ
#{Ibۗ鐛 !ӅI@7*sθld@pǋAH@Ҡ:j&ڠM  CŁ"x b%BW7Zz2kpy]Iq99]u~q~مٌ݅NB_u[a{lopr=w\ǎM(00I%=4;;/s63tX7ۢfuD[rHTuޒm7jME1'n}JmsP>3R3e)y5+(*Rb%* #:	0Qj}x6J+Ri8-=0zSݧN)bڤ/WrDgeq0b;\^D\1ΚbNN9P!vAR;\g8)=$n.~kc5ꄲKGCZoO$_,']?: ֶ\X3 :,6DĪ9{lZXIܷX*J*UW&E+U[8݊{mJR
N_\-
PIvJT9f2œV1lbe3'])L7I< E8Qq@Q+t#tf{1=O
۵?
c#2Y֊}C:WINbo
MKzNgf[Ը-$Sױ*'30u;"s+JPK}f2
  q"  PK    A             1   org/bouncycastle/cert/X509CertificateHolder.classXy|-k:D9[($N@H)]Kky#LP4#m!-JiKOJ}@K)tfJ8}o7[? 9>(>ćW0,PlK<}u},4$nSq6zvNňZ訖"wHNg4&Y6Ǵa50vkjlZheetCs>-MǴ4Ѯȩ7TVOh0k8Nj'!CzTMfwFz Tj2c f(<pJRhIe
5%ze9ޡej&Ҡ?Z9kl§Xn;v<iea=agR9c4gMMZ-\r16SccíxI4C͔Dh gż`Wn(G/#aښf2>LbUme)85Xh<CB)FnYr2(bDcZa8vINYn'90ruL
pdg6jnH$C=0.AJJzℚ{j6ۣf/SiKRʜ"D($Z\MlsI-UjHrk^QDxwNOxSf39CO\hJ	ĤTC
Hg!r0:$Mo_߭A,82{ț4=uYen$ehqlye ͬ
S9ƺu	$Vdm
*'PS*]UZ]^VK+WO5JLJqoVYeN^w!e'yrgn*|[JkMj/ܓKq{r21ݴ?_
NpTdqC#	}Qcs)kvg^%NB7@g@u)1ԳIՈP'Wѳgi~ƮԹy$Tu8SZv.Υx#ͤt
pKq@鸺|3soOH,a$-	J*[B^	}ΓMBD.]	vJ%vK0(B	{$\$b	{%\"a@p̪ejb$ⁱ_N%&c~mA:S%ĭR*dkKeQƌqIř*$*㇖SYL8l
fp~3T*ˤΈ];#u0
:\V*m&=Cnee1Ot=HRyf\S*t1Vݓ2<:m:kx_"|iaVL(ܫӭz8scK$#TucKBR]ltk`Uy#Ȍ[kBtLޓӭTѪt9Y>޾ɾ.[7
ryAVky^^z{bRج@:g0
*ha0a|
!8dmx-
FVm
V
b
xUBܦ`6nW»{^CTp)ާ`9ޯ`-CPЀl`xVaa|H:|Xb|DA'C+(hX

ਂp
'Sp&W0y	M*Xc
xqS2x2R2xX,C2,2ïd\'.c?>+cgMW2	o0^5/e
jIƵ_d\'*54Ã2|Io3|?d)~ɸq~@_q#k71e
o~?GcS?npA1eWh\U𧍿
j;A>\hRk:v24B/ӂ(zn.9E#b'EǤX~tqܴ8NR<C	M	JMk||
8e?+.`
k@K+v}{hRlCL!E|M'GaIYlsCP^,͋*m\	yzfJNk,y{1H2
k8TSKC8ZPh"%s[~L^,;]̤tpȝa;vj3ٌ+&!Qr'-JE%ո͝,/iU%RD
}8#45gw됺pM:N`輨;s-V	sN*$:`؋ёl&Ch<N!;&6ՠH>y:k<;];C]g3!Otię58B@ΣraCa~#6:~$iWO~:̋Id:U篳\aP'/._z'v݁~_jϋP/経#q\~/`k;- b  D̡-DOM(lCYA	P4$\+:
%S,~i+Q7;zLJZ.ߍ:ϑ8xuGBh̡#A$ d>i"һk6wMtv2E'M/'!PYZ~[
Q^ǿ/PKy
  z  PK    A             >   org/bouncycastle/cert/X509ContentVerifierProviderBuilder.classOJAk5^sJnAQH@30a!5~%
44]PU]_ 8S3Y]0 nYrƙ2I7wcB|#'
"QnPyIb"ѲZ:
KCJ~vN+[xLhd-v`L u#MeO.j
'i뤙./PKX5T     PK    A             .   org/bouncycastle/cert/X509ExtensionUtils.classVEM
( {i-ܚBiJ/4]Hwcv
*~o?|?J=M,˙s3sz>|ŀV__ԑS<	ml?b?&Eh۵l)	Z.t+[N2z>qM13IPZmzƲ-zn8gYgS'/1/1,ӘrGyӌG
ٔ#MG4c󜙶aV2j\3uVFm;Mm-]1Lqb<yS"s֐挖YjJ	%d)Qke8Zf"?6kuKԜS,'rҬ]N,˝}uWf3O:쮊PLJ0ׁ3iE_5gXX́p|b b𲿄ݍQ!Vq:cWi;L:hsT+RMu\ǒy,#$w8>OU1vn縑ݲttk4Rwmǭj{̰^n^=KU*5!*c^e쐱S.e쑱WOFG%Ǜ4̆\
GqD{i|61Q{/Vp9fVJjS$uZphaB|+>zpЃRpovJgN'iůq}.>./}-. |ayoT֡%|&1:	^a5!4C.jcuo5e< jS}V$hzm>$
ySVƘUxB#hQюV]xHBMcBlI㔊~!6!O؈*1.1!&Tl
gTlS*:WEBX	1bVtSgwV~hB(8,Cq
!0RB\U0&2
Tpp# 煸$ĜY!
U.}=#VBVǹ_iلN[N?hy;ΒVIB/?3 8՘`qӸ{GE|R»EM%|c#%Ps?_q	Y	o݅]6@g
|ǫ|Wa5
ߠuyNwPkmj8yVy+!C5G]~-6~DOc?&X;fo,~-8|M6rުP]h<Mx=	~&BJǞÞEO/t	7JE)%)ˎ_HX 굔VjrMK'dԡ}; PKv1  
  PK    A             4   org/bouncycastle/cert/X509v1CertificateBuilder.classUmSW~\Xm-%pbmQSmu6a]nvͮ'3M2~kgsڞs$Ȓ3s9_)|ۋ^Tp(; ud%rul˳3nF;oS[[N4!um?p'+Ppک#+Hעz0]Sp4\ӳZvT#ׅ'Uk#t|j&ݭ<T	iCcα^hٜhlG^iլeu`̖/89O.ONkfz1dMHVq/NuzZ
x8scsZ3UL:n]xu3tg0h3}cFg17֭p[!7kGI.YcQ-j-_Ԟ,m̶ҘSaNPhG
xK`@	W^g3
Nf7gN~;эܐQCFJbv/⎵ԋٱn<@jR>jWH<75
6k_5o-&\ztxgC~Я0W%~Y̰+*6 6];4$p!ǐg6&4
2РcR4\p
4Ðt@ a|bnȰ->fegpᖊ(bNAb_?~~wX1+E	F)")Ar~MZt71Rh.z= #$0{Loy&tj9kNOob<4R{Xm"Snӟ{MǛXn3V
ḩh`M
Vj`L
z Y|8B$.дze_Ykŏ1PK2  9
  PK    A             =   org/bouncycastle/cert/X509v2AttributeCertificateBuilder.classX	xg~'͐ϑpEBE(	-	$(N6K73,
GUzWzQmBRzQ[.iy;'?`䝃}
{,: k78GEF,	=x(ͨW:إk7L3	$Lm2T]qKj(1Sv+QMI	FTS>=b\D$JAU
sBK󷮐0/DzLꐱK1j^A 9dSM#Fg2b#%uEz3#C %,JC'Q1BfEF,bt44R27dCxsSڮF4ĬU4㦪5{+ONuf[\к:$(֭jXY{mdg6ӴWEhOb$`ո˨4&hgTYÎMr$92jzPGα6jZը; f%;cISO[-!U:QNa2"!2!>cܠ"#tctSrw/ܵ3hj+$%řpS8R`5%\%Þ%`m a8e17soXwgq)KC#ҁټ0nNcvA& 8=a?|xi7vF]{~<
٧	<Tciؕ#C1GOFFM2X+c2.Aƥ2.Qel*ce<CϤH;2QQ:,bP[J(	װ#,ێeGNZ_klVxB_Ck@]8|b|5f{aU1ŀٍ3?ψc`լ.DwAcW)`оrtI!K
U-Źܗ܆_
v,w4G.PNjɔxm,MnxZ7`pLٜxIؔǬtft_r𮕾q}skd1%gF`g	m崫$ͬc<b?-,%[$gkzi$t`Mz.okKl3"ķW(_G/tQz	=KIݭ竉ra|y{J|
]E<k?E ۗ} !VaHa
	ԣ\`5hư
Dd%0ZIFZ`2*ЎJxb	8(taLjq,BxSlÍx@^"4T@&|33y[W
,3kZN`)^_J<oD UAީ`'ަ*
vO*{\(؋O+G|J 䤂A53
>|=L>dǘedb2
A}L>L!*fn&e>&ǘLN(tVjU<ی&A'.anVG)rPF1ֈrՐw@hfC3 ؘW'?4cp(n:/&{6ŗ&$$z[Rfk=)</2s5}VfGy^
O)|czgely6ޔɧٙ,ϩ祕'vmOu7< c=y{ZN܍EӲس>䑎}	SI⇭Zqpur=.D_&#gJ޳CUF7pIC:gTƀOSp1N; sRx$dxHRJrb]iVNlt?:4nL|t<# 
ސGkm?oĞaNxi:d\AY9GV 
oDN5յLO,yV ďowK+ÕnXQ{I7Mb7ƷRBsZ=?(Z#%uΦ/7q#:Qz@(/,iS4l57팕$/uK~ VD'Gٟ3W;YQ<.IuwKwM<MPK[g  n  PK    A             ,   org/bouncycastle/cert/X509v2CRLBuilder.classX	x-{I\619[	$!$v`;!vb4TEDiJK/Zz@#ni
[B[Rz-
3+ieuq_3o̼'=}X/.


WK]e-WvdhXLo!4IؽOxjkj4E#`8kɸ5Qy}HReƱ15Je}h45e-OTo
@,ft4	0ߍcd@m
q-|M8ԦD"}c;TͲyu4vDXNVևbpIPDȕjTXDB3ٙ~
jdpcNzz{2C0=;u
v}FOԥG92e"Tt<QB9:MhhQ"dEDR
Zޱ(^ەƒ-I^7H'egu`v#jh62t0HQа?W{"(_DԐ?5JTx@3l-0_
jEv^
'zF4kGp׻~~z6wus?:p oeH*
uq>sj7I-m ;(\c,E-Cd4p]"ϟmXy?!VRON"FF׫(WX7!^_SatpgT_Wu5cԌXEX^fϒF[2x1JՎ,BN--&'"-dޫ)gRq&.q9Y3fXr3RGI.SccӾsTG9mkymN|07w6T'rke"Q*~ȯ\;{Lxx4qRŌ@E$KX'a%\ a	.p.EV	]%l#avJpK%I0 am}+S`MBL*늩g i-nikj~}McvԯuCf+RmZ%IeZ>i	b{4^WS J
㲸WX+gZlV=i.Jn͝l݉\q?)pX3-g #䳹qZ1QggE525ju'[oB'v'=1(ǘi.io
-6yS!dD"O23t0;ЮDq_,7M];nVlx3:Щ7~<a;v-P-PC
T`g1Av:LC'y^,զd:"K!);"Q.m9s6kMlo }GY>?<4"$3~pЭ\<-glPV1G sok/R7c/ɕO%zm,
|KzgK
|\!;Y:؝ZVP)ah
.ǋH(U0a5\
2Q/%
6Fx+$L*\AW(h+lbpJ	bY0(k)-
pFWMfV{sV6Mx^C0bS0ڻúU>`>`Cng;@Ɲ
|5$g4n~G"ܫ`	RWb'_q5>/3NCߖq
.#82_d)|K(##_1U&C0Yw0d.~Gq|CF
%k~_0aSOH2Igq_eã?exq'1_f/i	T!/0<T WE/1X7j7ǆ)})@	QZORb'6ÅRlwOr4I^QJ^QGzR?i祄.?u1ʈ
X7.XCalŎy吼$y)g[<zcajsvӋ-iq{
;)U:!1ln([,%v|#^q}J,8 {/%+:m(0.ᨄ3X*aLBi~[W\3PLS\pޙa,CE
չRk*Еp30ho`?Sc(Ǎsh3
cT3y[3X9V`Ô[h*qe5ٙ+j"WȤ;c
SL
Fju:aDEg:V:Ӹf5)Z? %nSg:h|62	M`JMsg7%`8eSt 	:Cnd1`#
';%^&uOF[[b#'J-xŧ4N#2BvR,ThpM#92
?ճTK]YJ	_
dGS#8H(Ze3]m2JQ0fn:ˉ.eh&g[ )݌Z=O)ʬ0NSuJ\S+uI!305zMpՊzהz2ׄ!+h[x
s+ĦI1f:ǞJ1<laӔ<)6p<$-B#mz܂[3[Xҫh+@>Xbj؀ǭ=Y~boy.?iraG&fSQ);%^zirrM|S3ӣ<ș:\5Te4#!PKf;GA  $  PK    A             4   org/bouncycastle/cert/X509v3CertificateBuilder.classX	|do3@r,`MԚQ(	hk;NܝERjV['=lKnbBOzn}ikݝIA{g# ֊ r1acI='L[-&k^^^jţFk~,3/$=VDTj( mTHԺ?S9Ihf:wGd9*0ϽUuR	Y?lq]K]1sL#dp:PDKHQcIzޜC'"FTt4
,wƒF4#zҌE4SoLeHH8?bLD;λ$Mm}[OE1H
̉見z^جtZ=ŵ{1`<hWZ\	=Ya,{f`׀4y}t>tV0s.RBіNv#Gur	'dٛHZ"B_JYB>=F~afUWH:\#n<Oci]̚C+dJ:*d@Oƴxzt8+o a<^P,lJc=.sWԝZuG6Qٷ8#Z39楞}̴8[&r+z2iXgtCwKkm]ħdWp#m,SMF,Av	6f}_K=Ix[OJd	IP:ޠncĢ䓕FrmH'"{"ZʌmZ*qV[@Y=p\J
9˗%GXycy㑸3Ƀ.ۑN/MGնN-Kn.Tv@W? ݪUiv  hegʦRӹzdLi^QXAPˈMc9
mJbbz&u^j\v},b072V-]vȞxrX,$hT5S$r-Go7iH]K4ige;!UNu-J+~sӓ1
n'7`Z_JWYJ'G6Fϐ  $ Sb\N.=K\"q$$%6JlxfA-[%RbHbv$FZ$4a
3(ː;m(V(WrKق%+7Wib,ZIWyS0;ۺb#]F,;Ve
7O_c`N&3ioW0Q67ψ}[+ܧn",%fͬ82>_6QmnٲSlRr	!۷Z@j*Wk.$dk|jvyXU[~IES֎::ܘ~ֱ3$eނK]:bL[Ya?$5=YŲt{>9 l˥lksq.y魥}kepgҸ){At[f׺fܞ7[~:Yl%76pl?Hn+gB)./kN㕡6u:Jdw톢_Q~!y_eH=EF-retJs%'ˠLc[:빸*f_N^oٛ1,h'y|f)z<4w8!<=ر4E *5*Na8`kUשUԠJ·_.bhTq.C
xKF&IY9xު,M]E/8wcTnG<VWx8b'ޯ"U*0UBxBȨ,jE=	TPI;ÇT*V∊GUS g$1)Q3i^U,S*s**.WT4*NT4*R6=]Gոc>~XGc(؋?*?Sp+6SlX<w7Vp'.T_/Ư܍2NK񌂗?
NWrqB/0,S
@4)ޏ_2L9s1,e8u
^S<ȼYQPc0T303°ab+B
^-
_wg*C-C|*F-
+άs? ~{Qmu-="7ic|R<B*?5ڢq!;Nj@C(2W<}4	VbWhrU65
iSҷ%4.ăC'D{q>;Z2g01ˈ֤*#"ğ;H$O5yuqU2HG@㍎R>}Ίatȓ%4UhZ2bc6AL;,t>:b3afMp)7eI>	r'&Ε/%c b1HA*ɪBz jKXYN~W%K| U=Bt('B%	|a:k-M2BrӋ<|ـ5>@rAM⡡IXW_Ҙ%Yu:JTI=]E>~R%GB"RE!͙FEz1hTs
:Hw&qPa/z"N955PwڢEsG[BasĲVV |E.s
eY#"e78rbq.c^8:U-J m+ŹGmsˈll@<$t,0O;t?*㨓a:#[a3weq`BvB" :&qko\F;B2Bw['nC&<?7-Gɡ]،-x3ޒ||S\euq%^A=ګ%a;@иv@㬲JU6?	qѼK:A1ܒQ!vȠ̝jkPR<,\L޿,p'''pjK(mmT^w-[p0`.j'bV*y*$X.rDm`l@LQN߲vJ᧞S+H݆/L
G:#.l=	!ssCt_ʈ[3Ne܄.5G#6Б:y]] BGހpC
0w5n~}U!N=ZuБ(퍋|u,j%)h<AK/%?GPKDAd
  |(  PK
      A                org/bouncycastle/cert/bc/PK    A             5   org/bouncycastle/cert/bc/BcX509ExtensionUtils$1.class
0Eoj5U	]%
:*IpMc-9~<pr|Xb(TCZfUdFspVU1|]ރ%n<CX@/B"	LJ2sCކ?wD:l9b?,nk$ϾPKC{{i      PK    A             H   org/bouncycastle/cert/bc/BcX509ExtensionUtils$SHA1DigestCalculator.classTRP=-6HAoAmK˥HUE_izaBInT|(ǽBads6M~y`yX7
NNAgl'Wt
2ҹbڦX%Hi&(Rv^n)p*k{2䮂n
<3+#xϩ_4?q&jM=0ŗٴ]Lg]WqK+l
bs
+95ۨ',tN36[ǨʼK3K峤.$d񖲞n{cE-=v_h^H֫a'}H\( ;UJ%vQ:rSRD8֪e]pTSѯ⺊7TR0~eӗ$[,[Ho0cSsL,"ko`Hf3@ZTЃ"P4tCð47Ѕ[@cHvc
a`N&|r9a7n#%MZN>D`[qہVsI:dGSZ"@M48v#MP9W,6s^Gw	
%!s2EN #?hӤ*9=:Z<Qk#
`5OGWk`,~ڞr=uPK  :  PK    A             3   org/bouncycastle/cert/bc/BcX509ExtensionUtils.classSkA}\{^56ZT)*(!CE?7Mp
{{VWDUܽQ{"w{fv>kcI`kh&Ҥ"mwEddO
MrO:}ͩJ QOT=R˝C#UDPUvT؄r
}QlQc{<O¯	c?o֟y2lDChbI47CɃaÜY)hIshj(ːr0Xjf8~a^E
21m` Δܚ0grݿ\W2RfL%@.Ǌ3WYQƲJPl OŠEBBºy5{b5oYo9ߒ1Ƹ1:Xe[3]m/`ɮ$>Wc\A'z}ͲM|w7PKC  \  PK    A             9   org/bouncycastle/cert/bc/BcX509v1CertificateBuilder.classR]KA=S[ff/=}RAaiH8ڈ+ (|q^\ޚ9瞹3w  HKWM!hvٓVUdlhzE_K%8T6!g	ʅp6(VQ%7@ZBt$K}@3|øThcކe#a#IݩM3^"&P$n%f?xB;^Esu~e٩ZtLjt+3|&鿚7FloHcKiSXj
)X%R6
`Hˆn-&A%r7d^f[n _PKČ4U  @  PK    A             9   org/bouncycastle/cert/bc/BcX509v3CertificateBuilder.classS[KA=1X/퓗KCu2qBv'Ί
>'ka7bvw75@"iq-Q-ُ(%LfgJEs5R[ǜ#(Уm'Dr~Wu&X>>#@f`FQ42CøQ:vs0 q0J
`<g|E^L]oaDt'[lfzb32\%)9ujFn/
	^ȚJ*/Q00&](x(ձeX!>`6d)Sv,<lqjZΕGK?	x%>cTZ<PKzs̚    PK
      A                org/bouncycastle/cert/cmp/PK    A             ;   org/bouncycastle/cert/cmp/CMPChallengeFailedException.class;o>.F6̼;FtҼ⒜TԢ}g ĜԼT̜׊Ԃ<F5
D5|sK2ҭ5x.b`e`gd`qOIePd`rAـb`B6-* PK[*d      PK    A             ,   org/bouncycastle/cert/cmp/CMPException.classuKK@5MGl"]&
qWq)Jq8Sҩ`\QeE]\ssa?^ OKS#B|	BKn][)*i
q|ԕvm]UZ(];n"?=c4b+WJ	]]b	aO#[Xkh& Za;aU׀݀w'{A/_[BDy@=c|PK5   w  PK    A             3   org/bouncycastle/cert/cmp/CMPRuntimeException.classuOK@ߴM?)xDe/*^Bo
v]J[ҍ"x!
0
XJڹܾٗ7R⬲,N7]Wr-.PNNZ͋y'<Z|qO"]X&
c:DAheRc'!?aU55`7bKw_=ԁ&а AC'PK1i   e  PK    A             '   org/bouncycastle/cert/cmp/CMPUtil.classUmSU~nlY@+ZnE%**(!hes	[ֿG_PdF>u:orl I)3Nɹ>sϹw?܄@"%KKgk3=,
n:;BKZN4lf/p/7-Cl֪p?`0
qurj9UîlmV1Ǐ6M9y)so12_sW@1
^
MB1ȄETkAx-W_(=1y5\\
6qAe9eSU
昿\7|gL^]k_kd><2wkL*nnWBq%KWjĸ[T^`t*)co<}mk_]ys[JѤ@UF.cjjT7,U^exo
"6򪄷%I aX;.JxW%	I,Hx႖Zl[Ssͭf"vWuJ[<ڻ^{_v1Χm[-YeH)N׀\ҀcN.?mPJG̉61	
z@n*B>|>ؤ+ǔARħ2FQqTC
1/#/dd1'ĂpGE!2QHBǗI\Ǵ3I+HS3SѨ(4_7)+0H~@ӻX~*$ 6bv]#>Žp<]К-^Z	F1q(CvK2<74a'Ք7u.tfձ;Fȭ#]ufX.>x&$(F	%	6k~a(lyqG=`ǿPK_ĵ  	  PK    A             <   org/bouncycastle/cert/cmp/CMSProcessableCMPCertificate.classTmOP~.lL#t-M%$[2c4|RڥSWjtK4ҡD{ys{o:&KaH;L=|O<dPVCA6c8j8;]myW=tx[xϐ=V:5rŐ9v7maU!v=V=ΑcG-;)JϪRslAuNdUj1KB)9juItyȰ9kUQdכ|Ppb+9Z2#>>՞]GtBbN=
*S0`ZAFYHl3c'^d|yp?)e%hUwE1!mȇ0=PhH⪆4&4d1)e
s!W7X4.BW1S*r0kM]X{EwɉD0\1+kѭN:[G%ZOМ1!b6?B>GN"U;L("1>F3(tqbO#ET~,fIU2CÙ~8	V/PK~6    PK    A             >   org/bouncycastle/cert/cmp/CertificateConfirmationContent.classU]WUݗ,EBvbW%-F\&NdMnT}kلeGP=7*!uf=>$-d2"T>fFRZ%V?vVs4QvuX׹'2
ÍH -LCV@Q*q'Ǡ##<H7bėUe[Ps>A-p~n),jAihۥaIJ!,im))NzJ|ߚ$#mУ'ܤ,VDwm}-3[,Ԅ?{'n{p=}獊-6[z){ǭ	7yHTLQd۾TI36eSЯ@Qp^c
ࢂ	UtWNkN"w#'wd]:oSD=rT䩅.F!F#ўg#_$S}^7'k::s{CJE7IDIB36ʖ=W9ka0>
0+eL p\.jx
7-inkpgx[%xWE*f4$U\=iTwyOi6T1uװLn~چ邘_Үc3K>UBO( 	.!H`8Z5d~Hmv@zb5b?V8Hcb~CPw|T?u)V!>z:uPYib5[YDAStZRSCԲ0I`bƱ
$\><k1u?vԏ=[!,.HO]x?sT{L&˒~|f
g#&B(R.PK=ҡ  +	  PK    A             E   org/bouncycastle/cert/cmp/CertificateConfirmationContentBuilder.classVmSW~6	lYVZhiKI`JUᥤRhUnl(3 ?cg*2K'u/I f&{s=o  ;%>a4TMSm'-)_7#q\FT%m8kW#:VdX54ԭd$hjR$I?O5q#6eq&c	H4bBJOpz]Rj&+Fg]Q1ʘm;3FMׂnN(+Vv45$uEMXtԬԗȠEWFLGO1Q}3Qc2>;(e*P[ao&Es:<PNa}7BV#q2IpT)Hi+V<:6aUCUp
\"T[ͷU
sr$%n
ʄfDm&-ƾ
X'Qhܼ"N8#]gE'E98/UE| Mć">9ܻCfW18bp!JUר^]#-4f^zW^*/5'2)a#_%p5A_ϋp
ieq3! P]8t+y_eFʠk.6.WjR2ԛXmmJ5^}:2Y)M<a~(s\:T:ܬ<#5ի8<^{~65r䮿VQ2pEF=Oe|A&^pM;
27dXF3>юd2*	c̍h$)}fa%[>&c _I?JFLB BdIB/DV1Yf~6ff2OV;L
G'=US<)>rqNl }Ţg/_j"yx>cYYX??͡Ck0
!;0|5o9#Q/M>b,Vwz^Mp\[Z[Ȥ?E25Zvy GkG<!]b
ÞW&%V~J>>:cl`,ޑ)n1߶ǃW&>>*/#ke{쟟q#O1%Y]vŏNO,[zPK m  V
  PK    A             1   org/bouncycastle/cert/cmp/CertificateStatus.class[S@+@

0rUQF)KH~:#|C9
A: 39?|0UC,X0(b&!Ci8f1r_Lդ0DlznAxi7А-^izby3Y\졅O/F.xX$C-M͚rByrɥiOϷCeI]X྽lsiZ*7C[WtwQ׍ۧgroC2g9y.aR:@ˢ:ɘom79Ah+ӡ-s+|%l'CtvӾohQ̝&gSЬEy*hSpN2u0u+\R6J[㉩$gl+L9-uұA\H<ME\s&?ޢEFɣ29)+/|ı>Y>Dφަ-m>Q#𷚾Gi
J)3?4FӠUנ"I
gP
+[ѧhǠ˸
*aH6òQсQ<PqU2{蕖5+I[K*I~1`%!l2LgO&Շ`3gK}:CBHOKۇqH|K-ɯ&UP>dqS= ؞b PKͧu!    PK    A             0   org/bouncycastle/cert/cmp/ChallengeContent.classV[G&,KA<jXF(-k(5lݍ@j>}|i?}j<Sw6$&$᝙w~_;}>-M

S
çH
z
47Maauvi\ۖq3fD#f ێx"^<>egfaAqbsŮilGbHoYDԚ_8\r7*MZ:%y-F^&%=GIs\FƠ֔풕:7oERX)(|%KOE
[^C.
O8ܳv4>:4g-7WJGG'Oo9ý耑&DZWg=Ìl
mMXq[l'$y)ܵD#{[cL$]@m'hcGÂ^FBfI%X2xSp(G;ۿ@(F!W uxyǊ~)R%\	0^lʈH$ʛ27W]A {*'u$6YWf41nY3_*~-;d2{vJ©={`NuCa3m[ngʰaaC'CN]Q{2ɰa{eyPjRSf,!q;A[k[%oEІ&pV>=/w/{bhk}Vᙑa|c	׌WY6v$nk7<U{j+}ǊhƦ{OqV@
XSYWH`.ɉxD<UŚ>7鐎q
x@C#kI
uT)ZаZR-=Є
1a԰	
!
0V԰Ђ4܌bRT#HK1VCŽTS~HIϩ UqPS1gTƼO8"xJΩ8L0ۄ4ag8Kp,o=Zܢu-tsόr~9")4k5 |E%#p>u	~SpR 
DG~Xpdgiw \
@>Tߕ'
xXo^gp/y&V-z
T%^P0W|"/_ᕟF1<AV}s\-^W~~	9^+}\ߡ8C(a>F	eFeXWAa8Bn|Moh8@e-PK!;    PK    A             1   org/bouncycastle/cert/cmp/GeneralPKIMessage.class[OPB)/u/`E+5=,niϢ|"_|Dho>suY\@t̜ߙ33;qԡMAu4(_+IJXbs'qss==)P\$iqគӎ/crYYF2V<WpSXCm53ME͜律/ʶӶͳ̞wʡchycSuZd.VМcx7UzYc-8I`3fL.xV.7p:e|Ԇ
0R$N8f=fG<4v%Dʂ)
yԬI%*ZThWѡSE3=[&}KZD̝ÖzLQüH{{KdqH)"hM
GtR<k[mA&p0LA&a*:QDFt\ƨZܒCz`LCj.
q)&5}
}')JDC?k
")7#GШ7
f,B
V:i*Ay
d	DHG9Bz׿wV xJRCqb4S\Te5Tͩyg)f sU'pOIx;CXb:VdCVֺgL`n?$+N%Q!/~B|@c04=U$C-y(?PK  d  PK    A             A   org/bouncycastle/cert/cmp/POPODecryptionKeyChallengeContent.classVQWU.	,]Vl`ZVC!%l,t⳿>xxMP#_ZnRM0wv7sgg ඣ!Nx.CM2[KkvRwT蚚j+_WLSt-n[f
eԪbMٹPj11ggwBێm!ẅ́:rMQF^"bZu*U64Ս?mhyRV(<Çʖ"	VW̘wᑪ\öA`Mi1,}dY͡
(EkBL%K#1oYN-kꢶ<kIϒ#'o.ì?}ƥ(ݸb%&ON9媿rM;3hqEGMk#o֡CIuKY\Ҙ(Ԯv׮-=z+	x_y3\n<e
{NT#쵼[Oxx̽F+?F|mEvRft<ɠ̓s?63u1|"Kx#gxSqڄ1:ʺco{ܨWfS)|o׷+xM/og	Y>վIt;͂7ȯg%JB\pS.q5	m.Ix7$0-|c%A'\|E$smpD\AR 1TK\"-").1+"ϹXŗ\1FߊbƑ>ng7p6*fR)tsHDBhT -ccSFFo_67#c/.dVc2{g}2rc=Z|}dZ˰Z+0G1 )%K	D0M)LVŇ|N%Dבּڣ@tx2BBEx=RzcJfC
feq{J?T}eba3Z1
:Zz?PKҗ;>  
  PK    A             J   org/bouncycastle/cert/cmp/POPODecryptionKeyChallengeContentBuilder$1.classSKo@Mָ@)Pި48  %6j7Us'qcSq)=ȳc |ks_`ᙶ:<RTNGٟh3`LAA =23Y@KYM*YC"25gnCOA;PC@6lWvfxpBƍ|*C.PO'uܓwmn-!a)B+y3R
hm"
ZgIu1CIv+;zy4:G{b$zܪ?V49\H0	qy	+XJe\hn@w2ԶxKa1/B)YK>7,POz9@M:iZ򻛫M_U/XoOM|H1|G|pc
n29ru7PK[;    PK    A             H   org/bouncycastle/cert/cmp/POPODecryptionKeyChallengeContentBuilder.classW[e0$V(.X r	dm5/2 Vvje]v>OПS}gxG9;3ǟ ¯%K$k#6="_;+FݭWPؒUMducc#qQ5FKѲk
+b	2a(ǉe6o7x$	M$%q̄nGI>s-A4,ڑPJ6dYbsR\FTC#a+iՓ&RV긄c`',4$uU#\ Pk&b!3ehӚ<&`kwm:G)B!bϏfg6>\,>ՠ5C{{z{ڸvOLsiƒ1>$ԸڍI7'pj:#OhY[N@'c]̻މy"m/)vp[Aލ7af 74mDBPwk	c:AtUD\`ոmx6zN95^7ۚI0,S\Dj )J%hgCWYfUSeP\:9뫴癢.62pU`PͰa+C
!PP!İN}g:׻;35_tjtTCGJH xlm+w^0bQj"-·
ۛS4kYm%nHcCԖݯl[$
"U\ c1nZ&̩tǽ[;CWC|ڳ,A+MQw-erCН>O&'nL-nqZ";0pCv~yWO7"p\죬
L~7ӥ(ĀUO#
FRxd
|)hd5Jl
n

2<$f+Xb RPM,ǈ 1USp3Kq  2 )Ȕ}H؏سd"%ȤƓ$MixAсeD𼌃xEF'хS2n<+ȫ2zxByYF?N ӂ<Eo.a򡯠W^z-Q"H8&s8_oڱ.ub@tDl"gcBOJWX'd?[p:Pw	gp"ď'#Ձ/Oe|\
g=>OQ_qN<iv \d_Yt/>o]_YDh6ga2:Q|&RߦM_5{0-87{to_̲GsH{=}i}ާE
؍0_xm!^{ZS{X!͇=@%o y((%>(<*GX<̌Ta\vPKșu  A  PK    A             @   org/bouncycastle/cert/cmp/POPODecryptionKeyResponseContent.classTRA=CeTprW.$F*e3LԼ<U,)_|@{) >ӳߏE
5?k>FVNb(ލyǵM'mH׍=OG"w')j$܎1tA:[Hȉeo\Ƕ"^-)@E8Bm"vJ4ڭTұS<Šv8H[3iR׆0lK$2Ӯ!ٷ&Oc3ԟ8-mnszb
7n[t<.CS1K=
u2t%}̝~\~7xFV}ܔ3&wEqZ:[L(]נFjCiZ#PF^%|(
T+hTpUAf-
Z)0TbdJGϟ>
27Z̶"gGamN A>Ytbfg]K
HIʋ*s|\ЊbOOƅ<K鄆hGJx4t\Mv@A

#a	hj1*zp_Eo^K1)Ŵ[xUS*|x$EH%C;1 QatCP@2Q} PQ|D8Wt.x:hvg1;{^adʎPD+n1u,|}.н~}<idYD$ų,cdY},|Oj;

J
^ PKQj  L  PK    A             G   org/bouncycastle/cert/cmp/POPODecryptionKeyResponseContentBuilder.class}kPƟeQ{95t֮ذcAed7IV
jĂ%Ţ<s_ +I:a6W3Ɨ~Müf(R G"2n>z"ޓQ̥K3~Ki΄ԩޞ'VVؓnQG+ץy+'d4Z{7B[?:z"]3\wacWJd+iWn@՛Kxj*]haFaVᦆ[n3l
Êy0l'*jMsT94U[mOmӺ΍?:am9ճ]9֕!)@+&TPᎁ)U٪
hx8etaM<(:Xױ':aXSZ(4G3Ä2'^jy;mPh&x'  S#G  ͍tm~scFp?#ֈVދ,z7HPoPK4j=z  o  PK    A             3   org/bouncycastle/cert/cmp/ProtectedPKIMessage.classWi[W~0Ȣ"Zŭ%
 "0fd}.vmjT?<#}s'H&b̽=sv
&LC,ǎr-ռߒJ]C>eLvjл3rDit)f6a.݈	-<fTqm/<CA0#jX6uyaBl^-ڡG6ɱa]fJOQaC!|C]ʀo((GSD-
UFӀ><Al46T}4dy;l+CrX=
GsKiO8kjf)Ui?9޽#rWOp@+N6{_Ϛ?*ɾE|a%ҮvFJDĨYiPD(`Ѵj@BZY$7T3J&(ry~~J)V"bAlq#
t9% *S#)L³Oﾍ[#`M~}5T9f)>#NS7|A]3)9cԘjb+A9NDL@37><M4gSk3y&6rRS36u^t!a3aף>ɇJ7sM4ڂۛhB\h2'e)%EJaJU0ep1430<^u>Z62lb̰a Cwu).6IKKY]Zf[K94!J*s PGUSSڑ;ouC_gBQѷC9fB4:::2RxPr
t/y8w@P wS*eK+nm6:5.PTG~Jo	4#~5<T5΂	,|u3),H_]8 a%TDrJh@%\0A	1$E$Cjj<"8,acXB#HXŝ#vᘄhs]`p}0+Ї S"vcLD{J<"ń=xVDщWDK"4'xDn*o"	.^s\k"cǣ\<^]}炦	zf>~}) /i
(⑦D
%yfPL+I|NӨBpN[He`1$IVC(bc6U@q *37f5d]g-@K8E\-co~ėiFڈRH/7^^BynK?&uqT46nMSiBJ-jPznMr@y>F2T}{=nlMI|X8{OLTP7jM_%oSJ(΀}E~ǞI;B'a]q=IG$>o[YBh!F4.!]er69J:~es*.
4@0t;ۉ"887ۉљNjx9r/a*~.B*iEP?A;qvLTPKEbb  G  PK    A             :   org/bouncycastle/cert/cmp/ProtectedPKIMessageBuilder.classXw|l'·N[m	$!1$Ƶ
ĸIzB t
&MG.it%݅6H!n MwwKHWF"M{%'{ݛ?;`hs,'d'.rbN<O׵+j:{\XTsuj1ScaZX]ݯE{x\
hi-f\e^8OUmzK04$dpxGD7SFH:/6
TCkh+d[GĿW
%_E	ZD!GvѨ!cD	
'kDs515H@@6);uŧ|)Q}uǁ` )8]eS.r`h0qmL8@bvy@h. X8S#yL/vD|_#4W3MFLSæ
#R??ZYA=IyTjpBA?ޠzk>-O曻\+j#HɖK!17=rPdH;ㆴ	#vbXw0Njzpv3JZI<ar\mA#mR[ {>.<Wn&fV򢜉
(6ʄeEQr&[|k6ݔ;Uٖr2hc45now/6fj٥uP)#-{sxTĳۊleuЬzmźR䌠SQ0ؠ"LjVʔSi 5m*wzʛ`ӹ`9O:-_̞xzTyF3_f,p0F)98jέ?KmV7	8
})4%"t\̹t#O7[6u|bdIUGhhNI0_Z	$\*2	%lp+$lIf	H*J	ϒl	I蔰]	WIZN	]#an~J|yo5bg5
/r7w-.ݓ>uO8ݹ'ӭU>-(|yӇջs\E,ey%SהDM1sZrB24vK1}uQz&l9Kf#槮/nHN^V6n]kwMĜ^H.pFѴ=OqUG*r,zs0u9χTj5Hz
sV#"*VDwe&찻DeJ3M9Lr^W~`ж,RyɁvTR\
X-O#<3;΢Xǥ&SČ_44
Z
?`f'^JI3s	+e3jj;̵Ж=IX]tZi%cHM#}l3OEgTﱧ͠o'nޫ*XЈE
F<(
0x1[j*0b650WxxT(0/S
/WW2y(eUA^W00Ȱa/<y1M
V
-VMڎ
N.x~q'\O(',I^,S0bHPy#8>|QAý2F/3\FׂixH!< #/1|MF?+2b6w=_2axXFe8~"/d$p?e܀88?fxwgc8
/Y R1|s?4Ãjpd8'/wGi5FN
?Jh^]u!=COiG%]֔Xxǌ;-Thw8C)>Br
O؋["
x-I!Hۆ$gIhfіbY>ߢ]bcY88ԒW%
ؒYҠ-*KcKΒzpEH!|"ۦc8|Cx*/N_ut?SYNJKRBLb)d/]Q@v=N( ^3AΛMi}.&wn5O"/$#	CI*ks,8IQ3CCVfDc
Oz~.:;#jD[J;=K*W`RLa*. 0&&	Q	h10M#[\dgT70
.gFFjq.X_"p?"=byb־Ir)d
N
=XZpoGۙ;1mpKY~<)椨3w_87P]S
'WSb6/fL'$zq4+x\Z"oTu8$ht \X5P#EB=K$Hg"0S3Z(.U{:* PK51	  '   PK    A             1   org/bouncycastle/cert/cmp/RevocationDetails.classN@%	&$
)p\,H
T7H(HEnb|@oJm*Ї
NTp33;O h2Fa=Ju$cA*	CIʘLqGƞiSgލtO%썸Oj-]ދD$:PIWmq[~&F3`qp29ZHCʋѤ"=[GũX2P4`6`1<g%q2G 5}M'B={ԭa?/.I>fw_i@X`,X(`B,Q0jxmeX1Q9jM!]J-oe$H) o6c/><#?>?gP?P}A*>\i J4P=PK8|  w  PK    A             8   org/bouncycastle/cert/cmp/RevocationDetailsBuilder.classTkoP~θT"&:&*йܼc/DD#ItΰLI7(1My.yI
ҙ7ǆeO50w	j&ڋ>md]jMuڱMюמVe:ksFK{M
CAk7MֶYeRmfzFsoߦNmiۯN>u]tQ+~LC	"|YameQY|qاە I8'!D+MBB
>rAW&wj.WMg
˞g\f=m+Tqx~\崷ʴqG8?4)%d'v82')8
f@$\T%Q-(PpEEa<2"XMs-#&1pG@Z@F@VF)fs+6?<mZ3.Vxtk|ț!#VAfqcLqGP]d\(KG(V(\(T]E+BGp_y^GFb	w>>BE֏PK9&E  i  PK
      A                org/bouncycastle/cert/crmf/PK    A             5   org/bouncycastle/cert/crmf/AuthenticatorControl.class]KAɇĘ5Zc"D*B$U(h
J&q]D_UmZGId*m݋sww ^a!^wR;IOa؉
\JU*ޱnS+sC_pҵ?tτrn0Υ6-^v[+O)G}9]u	giqa㱚**c:@I|!,)im{cX<\]j>Z>bO:Aw}A/ǒ#foz'	d1eBYL(Q4X0Y9< EfXÂ1_nxPNz6GDrqw`Ô"f!S2?~#4'Z('5RI#5r(șEPkRPKC)4  2  PK    A             .   org/bouncycastle/cert/crmf/CRMFException.classuN0&i@)̖H^؊D0kL
1J](oRQ%B\B`s|sGenGfheڦ_2wR\[!6U&&fV%B
U\29̽zHVy
1C?Ni5h2@+C#a# Lͅ.M<)4l7h|=5LW@bf{~Cԫ+>1> PKKA     PK    A             5   org/bouncycastle/cert/crmf/CRMFRuntimeException.classuN@gΏ	@bt
]*hJ9cܡ˙+BX|[aa
DεϾε&b'J.s[җZ(Pnq)_"B+B@>z~읜zѯřwɌ0%bm4h BE
B+<	Nj&
7ҽl+h?k|PKF   g  PK    A             )   org/bouncycastle/cert/crmf/CRMFUtil.classS]OA=˂|)V XZ`AAEj0>Lmu6Soᙗ6DQƻK[Q<٤wv=?~0(:-[%G:j^_d7^(dJrYCRv
JdK/
ˆmwKy2DE`ЋB"qGn9٢h
E+w l0"#+Ng0]hiJ⾜V63)GVx%J<;ܷV7s/7+R9\;)Q{V%HE0kpҦ
5jЯa@ànRw-ÐI_ղzdI%Z.-P}[s?w.d h9t/[@"tcP`7x0၎R:n#&uÄY%/>C/o	vS*͡>:Y$kxtXAL*xx)S0^*baP=T3zж!'u
	yRs&1&ґSěm4cI|KT~PK
=s  4  PK    A             6   org/bouncycastle/cert/crmf/CertificateRepMessage.classV[WW&ZVж ܴ"
B
ކ$Mfҙ^}cCV%,h_ײޓp	V9Ϸ}%;翿8M8  Kx'E0Lý @YLZv6dMccĴ|!65=;ۮ145D,a:X uW\Z``;gb,9	4E
IfնՒfJDMeG12]t{L%+]y`[f--Gڳ1t"if:[\*'Ct\ӫ	=HsR!mfNxaZw5KGg̕^hg#}5Sl,Y57igy凚^p
pYk콦Jaf/
.pzBTE&
I!C^ew{ZY=n{v{k_lr]k2ucr\ܢM'"i8\{"$oxS1="zEqB["񎈓"":"H_rsM7}-0
-'~Ibw沩Yiu)?SƓcߖyk=ݣ9.eld>^!5ZlcRo2uԡMLhIQ%Vbf괵4؅zmƘv|GN0DeAч&؏0B2OFҏ	>8/Cv\d%{22hEBklq]a$`a1+!y	qܔ0PXf$aIaX|","->` aJ<bQ>nY2eiε\U7xRqz	P8ڵs>hmёz	#ZQeSdx)_f
Dv2{V[``]XFOqow^i?SFg2dB>Z9}Cn6MkIe~xW}EEfuc*
X,ԷVjx&"te&Vm2'DkxpwR*Yx(9
`\s|8UڊKg:#(/t{f)
Mvty|41]K14Ou
	*Ae^"I W`g8qeU$PK.ͫ  +  PK    A             =   org/bouncycastle/cert/crmf/CertificateRepMessageBuilder.classT]OQ=-EQ
JUhRZPhjnfȣ'yDh0F[|h_f̜9w`O^+֭)m$c$x&VWUŴR逬d܋fX*d&ff3iS`+`UȯGͤAv%` y>S"&YԔ-K{EN)<C[ɔ<mjD7z~ߺkV{ӡg4TG0T+35dFX6r.|i2geT+gEGG=G#<G3GV6E1qv(9:"AY[}Ë%Vxk-3R@ļTx**:_RDp_НS1X]˓t7\p

j
߅KA<";%D7:у	'ả^:qwm!Fggbz2nLSR9%R4
P^PVA%&ĕv|$]"cea1/+~
nn7t$&dck;R4mPq;2~ӝh!-,(m"6,ׁRsUFe)'&"Ҿ[xdtq?pJ>azcR3:`NN$PK?o    PK    A             7   org/bouncycastle/cert/crmf/CertificateReqMessages.classSYSPnBDQ*-ni+DEEJQGG)L$5UyW38cG|t\m+uj2rϾs>|}`[ԣfhѻi'-&{I׳e7X7L4,omŘី,p
U镴e
N9ɲfb\GpGݕĴZ?\,
3xZEĠ\̔MHDDXLU
QC(MV͇1Hd263S[ -ia*]_^We-
/ӹt&=He:b
x;\iA*,gG]­TDp˥+Pt*إKn{t+˰G&m;Wc7Idvnvֱܔ6PWVE_ӣJ!~wPj̣=uɟ˛0So#?a5D@5tIQ
-8
%kATbRگA@+"8"*ᴊepN¸^JVƈ1	T=#Ἂ>6͸)ڝEaZ-9$kKLtA^=Vd,kL|Z¨%D'`8\}H"/0$%y1]EDs
o2FsGɟ<5N\'knlkF38Y8G WzdB(=P}K:]@rI=1^^CdpxqtLj.y(fPK_K2    PK    A             >   org/bouncycastle/cert/crmf/CertificateReqMessagesBuilder.classSO@~nc+Ma""*vbČ _&,L?ݺ)]+Me,{wϽswo? 4P4}-?mӏ<OCqH[avw=E쵈)z="AR7Kn EP=г_uK)&~`D8r|E9EO +-dOиi"g7\y Tވ0 tx%_6II&'DQ(sh:%
ĭ:7GdJKi۫8UJ2
9i
/3QŒn岎˸f+:nױa4TG]L
qU0Tx0QK۾
X!9ё4>U7P9O!KZ<Q`' cpgH3_xf&N(q*:ǘ(B;
^Oh!P}?fPKwB!    PK    A             :   org/bouncycastle/cert/crmf/CertificateRequestMessage.classX	|nd2	I @U9MB@jb$M!GI"Uv'!evxPEK}^mBOhm}waAv!_7y8Ģrc{94ƦnvƦ]ƭ]<ir#fW¯ݺѴ"m;d,7%ަ%bkBp[m[Ǝ띱f-;H뱰-{7(12	ڰn̰>dږ+1r؈],mD;2쑱aC1]#jvCx!},lC5Wf'	vY=BTHhTФN=d{㐭	XҎ'̆heT31#B^LsxL$Ha8;Fh՚vv6)yf'-4u9r~DKdhJZfF,BF lp|YhYz۶۴=l\[ÊVhحm@9ddY	ڠr n0z	6FX;%ݔ9hThN+#gs@K@6L&H:ٕ4ԌiaÁfk
k8q-=AF s9fozCu@.5]%Mp&Hn-|՗ͮm(.ҽꩾP6-/&ӁV̌K	
َ2M]dZ6LbqRUS1\@zV3kRE}>swuVƹC2M'D8zmhDiE^6d:~@bC̸Z>ͺUT~eQf\8lNQל3u{n8M4O*IosUmGof%Wf܌SuF,]v,P箐-w7iawsldȽJiY	f?-NرmB=ۋe$3`Q>Ժqcn2p 4Fw`;\ɥ.&I	Rj$.D9J\&\+$X')%-qz%xD%6Hlx&A!k%6K\G:͋[vNl+e{(!Ez-p6#bKrNZo_7ӕ?Kc&d&yE=T'.
q6x~n,&1`cM}Ł6f]'j3yyovΟPv?0f\ܠ;X]4K˻ml'΀ͿIhBSv\_VEOFEx'kNg>ezb&I[{vB{ILwS73eGff[NUsVF,&
\JSglI;蘅U5[rJΪҠ=ęαf=Ja׳yu;/0p~::TnaR+T4L
b	*T@JƫTlc*KZA&:VzsFIōx3x!ުbަoW`;U=*.TwXX1^u8b>x>b>̣#L>*B1<$U1䨂8`IV0\)&S`
v?P瘜T$/3)؍3yW܄o+؃/*؋+؇0:o25&Rp1[}
%B>KLaC&?Up QwA]$x)~&6z_E9e~|GEՠF{X:)$/CVTA20_3i~}|[r:9-qzѳ
gJ|킏PQc|$n2ؖ	N~E~<!'
wTr:a!h	vnA*sGI+G2!*ϐ)Cy~l~ɓ#H^K3AO<6V<]lG? *iAJZPy*=~w#rGI:F4
ro'A
ZPDuD>Of8㏲HoI\ג_/R!M-8=!]/Ӽ;=ޟ'Dyw[W6.3N((=ŋY*{ϓigob)W^K[}fJ%O~֬Z*@!Cbɓ^b2]酶ƍCUjUMC{"%<ڪ捴gml&KwTr&%DL-Q/1r:Lz}LzUn+oNZI,hMr!~['DUf5JNcc|Ha?R~g^]NϽv_/>/BL%]e8eBi
5)<5Pln𓫇´XLt_SX+bYH(ɚ)O%YLQ-ԹM7!	>-)^'pTxL-7?(=_P'q	]1W"Bney^vV6>cPK&3
    PK    A             A   org/bouncycastle/cert/crmf/CertificateRequestMessageBuilder.classY`~[9N$`'dȒ%!1
Qc;vl|Ȓ;AEiK'tC)@DpNKw){oJY-,d}o [Ŗ*rGA
^Tn+Po8w_g$pEaQ!խhnllݮP\WFm$_툄X$$ sDWZ0&=J ]b(گ^UFR1U!
1G԰SH`TVAձhȘoXӕ9i
ԣ$}񡃪_h;0&hrTѺIg,WUPRr)
%԰9W˕9>lB, v4Sq=rbΠFYoڈ6,^	6EjS44ѿhDTߤBkTrsm	#PH XժXoXW*aV\펇Bezz8紩pXkґ.- nv\\e/E"s\PBp7+ t 4y.tTJ)X[u[ |Kg7<H%}r0ݝKavȂ3tV+#A?7]]%@ͅ-!Ep<VRU4H=4+HWPcd%׈j ^~$sU<JM)RYaCBM(O2
>VKs#u4jZזS?g3{|٦8cjWkCQ2*kna;fzdя)IcC<Su̚_''75iHm1ucs`wt7EbVz=I8[J	MVIX-	$,)%E	%%lY	J*<	/p$\(UBmK;iLGۃM5xdWAV!6YTcbYobDԋa̔b;
UW3+AsY&g;]h%Y~;Nk9hd#Z#/0fN)q?+@ֶ(hc2XYw<Eb!wvⴌ#0U]h96!Y)[bit8-rJS8j(6 bfRdVBĞk"% /vA>eE6H%sd͔"ݖ{J8>
Ed}ѕsC䖮e wU5R"!.
Ь =y$%oy*9m|}#۝in
J^ox$5_}QJ_I*Uۜ堥i2uWJ{I/Nh

h>,JE^񙏝%_o7Ĳr\*jqqݗS7vy$c;$ZBh2Aq	2pepDF;h+d\WʸRZF%e,Mr&QkyZ&1yx^(oQ7-L*oI%n`v&`Ng]ܻQb[x22.M2p^&2Q9>&cnу/ƗٖxjǫŝLƙ$$n&LkLar/|ݎ|ێA&WvOo1W;v
CO?~7v30d&d'&f&C?CL~aG1QGL~mG#dߙӎ~L_L]&LN0n
{L~(`@mu)~d"-W zEq-Rx-R-RX-ER-ER-5K 8,!F(<g;+5G%E80uk$u}$^cN1'n؍OHXL@>g֘:$dxҕPD!jc'>kQגcaq8cW\IQ3P5Uc=
jԨ>'Yl!
	`ZiZMyFmg&r+(38Τ٨eq-pX+66d?ijOeӓyhnPWӰ]	f`O"j?;5OMvzsrrjԉcl!SVȝ{f8+3+i`,RU܂e܀,:MijT%
ʋOqtUO<F7%χL<"t!X_HsstH'PZg="!Vg`KgrT(֩$&WŉE?jV[Bu39R	hㄐSǎ͸$Z7N}8jkUFqQ
IQA pOFClw*xjіZmZ=n'gZ96Fa18II4QxRvNk>cTBM3aOuaRA+mH<W*9xS+8&Wb)Lu'Z6IQj@M؎W%=	I<!:-sVL=Ө3hh\4$	tPK08
  A#  PK    A             4   org/bouncycastle/cert/crmf/CertificateResponse.classVkWT݁!B)`жRZmDi}̝!I$P#ե']	̃	5枻>瞓')h,X@}lw9etx^u35|`ّedizYg+ Qqk"[LFLQ*f^@3aYC"sSbM_M>+u/UUHj'ӤuhFZM'|1W55Z
j8YRhuQ!ȶ괧
.U"mc;ꞪYT2s	X-+[;L#CꆒK!
B&'e-ʬvk0EuiE+j3u6L6 s.]QVSZ^3yRl:ǩS.dk
٪xZ'x)n.@\cm1Mg lꁄ&ʆS݋taџ%z[ιvEs+6qMĨ"^WEEqS-"i[?O o-Ec!hfq?Ю[\{6&h#X>W.&<jO
ol7BE7%qLKؤ@|SzgڭDknMFFSǞ<p'2Q{=(Ķ5{X.U4c8^ܗ2%c2^_#cWPFR2d<я91e\¢+%XX=|$!
	I
M4_H$H$MY|U05>|ҋ)|*ey%<M;^Z^gq"oza骛EGA?@O
=$\Y?XF*}8n<:iƫ(#$7;Qwav3?#Xva^JVTQ	=|[etYwEJSh-aWpnkqyh\h	ps/fO7Cx@:bةk$@Wi?~kPKN@  
  PK    A             ;   org/bouncycastle/cert/crmf/CertificateResponseBuilder.classVkWU!E֪ʫP@Rb}t2I3qfRԵ㒵Q.k֚sϾs  ޑЛJoH8zcu26̺!]8޲^G ŏ%fF5O$
+e[Hj#v)my¢-Ji.$oiO4ԬZ2M̊G\ŧhymI=Dk[B'Ii5mۺzP5ךSe^s)!?nյ¡r	31PDt<r=L<\ALd5ZniHq'|쵎ݱͺ aNaSNt
Iʱ?9Bt4dmNbĳoWQuȑё7xa1*㬌1xC9oxK2SYt>{-u6+Au$2!snDt|mT9aϥV,tM`&(V31\Jũ;Rhs.Ym<"%tcr^xMLTY9	,S_F[U"b()iǇљx{=wwG/D~nt_n4WpziI/	r& c6w1cs%l	x1kgpgAĦ36+H()@E$V|`
_)ƪ,+Hគ4d 
.,`'cqg$=@T4gF:(ZI.^G2>d;vP>n"8ax?3bj9o}|CfYct64̓-DˡqҬߠ>x7By'}➐"fO2zȐ%i3"K"ĴA㡏Ƴ PKϢ[  -  PK    A             (   org/bouncycastle/cert/crmf/Control.class;o>NFԒʂTF +,1J,KIKOJM.adP/JO/KLN,.ION-*O.Mw+)ag`fg`adPPXgg蚗jȠW%jϔԼ̴"k6F6V`t2>&v PKkB      PK    A             6   org/bouncycastle/cert/crmf/EncryptedValueBuilder.classVwUMHiR
)%-B҅
M,ifdJ"+h=ko~Gw7I1Гޝ]f .vak]X'awV#K'Iovr0%جJi(4nVdR7[GVU3D\UL-*a})mrڔZ:ULrYCI55	KG	+!
	1-EOjs64;Ӎ99=ՒFhYPkE<00B)13fj1
MDSJ4〧ʃ%l\Qq=3gj݆̕;Z>0wURf\OJhk,uBIƂS#&E,1\[D_TS¦ē>:&cnĂLRSЂJ:<w'nf|A1=,wVIh5)5,3%쮎@*ڂɠXv޼Vڽ#%u -a6,vVX).[%ڭl87)ɼ"*bfdB@FVΘDDJ7]*GRDEό/y(f9fT4FG	
l!Nv	<.	m:<Ӱ]6UNN-^%u/JG1k[no
xcVZLQՌ
=R$T
i(jgW]-[It%fS/ьN2,je]tڷaGWiCYmA%7~^@{쵎fS< |Pg v}gxCn<a7Zp
7YlӍXe!CI40vc8͸Q76[Yx@16q
7r&<ǳK,o@?,T!DYL#) 4ea~z$+t2эd -(&dL,R,^1N"&c/t#aai	
}(}rvl/;u*F>v
p>WƄƜZ#L y$U\@G?q)h%K;#e]\ŵ<	#bǊ4_ydDr	n"K[lvnа2xwrivNHA sA4|X
"|KهHXW6dNE|Ix!\Kk=\'yS܁Rodq!R$Tq<ޢnwlH$C`ElY	%(+d"a(y}]!{ij85{ <vNM
ً9*	;WG'G1*WASo1d=
̸-L:n
~vQQU"aWtzG+wp!/l[qAPKI,g  X  PK    A             5   org/bouncycastle/cert/crmf/EncryptedValuePadder.classM1@E 6F4h6THBp!b,<2yy`!	JIS(g-Ze6
m`e!
+
C]wRyF00MPKh&      PK    A             5   org/bouncycastle/cert/crmf/EncryptedValueParser.classVWVex(U[΂XVelRG&@t&IK}~TF9G/	80:2{߻r[	8~iDx⪄h<q=㳬6.
uCwHؗa#j<wyOeiF^BI}6cNe\϶i[GZ7хbF7.gX%wԵ5^9q]2
H@25Ӛ6<Vڌӱ~r$gݴ+KJ{nWƱ+yU\4*mMMu׈LI/5C͸,˴)ÖfsaӞNO%C]P4wtPWFwW,%Q]JS.D kRrW)Spf^B
:}Kx8s7{eBӛ@lDT]	j:qlkkfw0-_JE\uPGί74X	S
vUHp|;5csr	e6nkRSIT`ðaÓO1t0gx 32d8gH0$,0{%tU7O6ith7Z㉁-HGdS"#!"UW{=!br^ 4mݝ)!!8ϚGԹABǫT`>,8[	gxFad?^ jq/-A\xx-.u{kZb"<@U.*Hu
"*
vA1A:S/*$
`@A 0`;*È/)؊QMqpUk
p	*k2}r'8e2ŪS)Gl{qCirS[)x3pe!ll2cZcdYbE_Y3/V_pAn~zIrЏ(~A/5vmeLoJC:[W1;[R@`+qIH%|!""DWDQO#>~2z&x~}|>\	_	˘"Je|]ƹeti^{t	ėn{s9r
eOF;"-P,C?~"u`0&Lk2N$Se|s_3i)^
>B>X	.  J{fR]E/=uZPKZ    PK    A             2   org/bouncycastle/cert/crmf/PKIArchiveControl.classUWEKˏm
UJ@mE	) (7IX>TTSΩMwKB
G_;~wf^pN0$tGR5YO%n=	Kd8ɎYFi۶i/I$72U-¨
~+兺lZPuU	K]s1r$4]i_ Wp\ *G-тѢQbS-^ضy)mkOwZ\4AwVN)i]PU_Q\Jmx\s%6\Y&	+BVmzִKy`hMu218+*pՋz-ap	2θ뀴q FϜ\_Mv"׸6QyPR6A7@vqFH67p®		!i7O#	p*08u>``0I_Vv9dc	:gHt*z=j)2IΔT9{.2|,ډ}Om#8SETv]ڥG
( D>P({,LS^o}
.bI01a n!Q0{

}}V03aR}}w['H1/dı&c3lʸe|-w.LN2>ahd,K	Q%,ҤYA?29{N?^FrBo8$|\A?d[vcάghYU͇D421$ɚ!Lrbh>fF=4|^ /a>G\Oi.{WIO3X_ 1p羨9'*ڋ7W(Ϝ`qL*/'X Vt4#O3? ]dۇxnPGŘCRXdHya"?w&gPK  Y	  PK    A             9   org/bouncycastle/cert/crmf/PKIArchiveControlBuilder.classVmWE~BmTPڒ
}QEi	FTe7g3U=x9`I]crv2g}޻_paL)L$3wmLMnsW<.
&{]Pi;pn+urjed]\ӳ8GiwpM֎)vk[<ͯ(80tsׅc5=8f8eA{ #Jgܔ[K?z~MzMlFC8\7n7#PL4.pǫskt՗7
n-wm7ɥI[W0wr}5O^
d"}T%ڮ±oo\p>A{geq?+e?zry*8B"b}䍆Qux%t(c[*oD+1qyPqθZn8q$<91d`00\"KџJ'D&&aDb(I
ۭedI$Op6hj;+ٓ}NsQ{x4,xؤCl3}80+sWI(7CzB&ǶCis8LFwtS S*u*C|
fg!p74㦆7pKCF1(gjP}!rvG9p4h/4 ;,`+rȩƧ*ࡊȫu	<*XSBA<*tHKp%9l22zվl9Kfs`7ecBBK3~Hhhb@&Ɠٹ6W~By_a1v'te\icw+m|?9diKd1Y9F)G	0/jglH Q	=cK]	W-b_JJ)6j6qbD
PK&  	  PK    A             /   org/bouncycastle/cert/crmf/PKMACBuilder$1.classVWE6@CZJ+$mKm%VJ(ce	^.m?s!%	%y7;3ۼzϿ  C(fb	m˱;9Si
ߏi2ZM8e*Yy rd/LQ,י:6XNe[S#d]rEv`\N`XQ2VB,xE0҄vՃ|	^e?@,z{6w*Z0enegW1Jn1L0ffdsM~OF;Fv#wo8π-ډs"a]~{.nMxf,3X'
p7rNy[:b5](
v-Nm9puePq;TSV
.*xW%)`L|`BW&W_?=+{ewgr뒛Bhڽ-^:6:-]ٷ4ߋ~Oz;FY-fN89ymess-$^VcVح.a{o[N)yݎY|㧽cD5!Cjs&D4LO~
1kH|)_iMݒB)Z;C!pWoHUǷR,Tjך;)VTȩHྊ$䱬b߫0:iܣ,BU]:(']n9m١5[YUqxP$pi6eg1SDӥK b1p#s}(QL&Oa2d?$/4hC~vW8ʇɴ1'("qz'D0;qrb<τ|/@Db<Jܛm
7cG"7x^(g";D
~/>qC(ضBLSAP&M%{*PK
t    PK    A             -   org/bouncycastle/cert/crmf/PKMACBuilder.classWy|ֲ@`6I Ħ0_ 16Z^UV+lJ$6m$m	b
-9H+JgVk
޼̛y3ǳ{?D?V?nG/+@!Jwap'<:MDh fn.bHt0pXJmlii!LjfL@bʄj%'PZ7hmjPmRNXꈦ88e58)L+FJ@e\33Wl% )vq֝ذNi4bT[,dzNrM>ќT76wf*)$5zKG+XnRHk]JuʦڸiTq."N9!-8CShQ_qaèrL	EC+FO'4"IF

j|5KQǦwi,pt"hԵRJSP'>ŌYKp+x>
Sw:'-;*ybh!%e:l5X;r$F>:7- y$¸]zӆ!`K}5{%O+.ٓ-b*HGoGEccok)a'jRp(gόټ ֞p>]Z(*snͤfD$geIܬqť;M1d~ʃō@JUI%Xbn+ِ-+YiQE+j`q(lx6Pqgd~*HbXN*S2+UeNRrrYX.*DhU"nCM"D)E"vx)",b.{D,xhԽ'"p	Q_1J	RZHd|$1	opiyuUy;^ؚYFlkL24L;ţeVCnZemYW~B_6,lb._Sp~Q-[H&E?o+p˥gȹf~͗ͷY}#=))/$m `%%ѢR,/b*=bM0=*C7/R2Eh}xyEziY߷dKN+2BX)c;^&HLaɈ )cqe4/
2$dYF
*er1
 -c=ɨǘk1.#	}RF^%ZFFf&/eXɽ26<{(̳d\w0
܁V@*
n&a^&c!&30$܆OJC'|ɣ|LxPE	/G$L8LL3L>L2OKdL$I&g|ENK壍_39#4lRNOV9b6EOʨG{ o89)((hpm!Hݯ$=Ux-kH;@ 8	m$ůV1_=sY1? ayIG`_V:'uxK~JPil>Ҽ+/s0*'q`uyϞֲ.D}hڗl$jbS9,~[=HE>.PlG|<vIF)N<#Vex0ؔfsY<黖20wb5{EbIL)-GKzO4]b`]蟦C/SjI
˽^$5?ky|!$
fj_߮[Mx%43NS>@il:R~JՔ㬿WSk>wߩ)AYy?'g;^;5eg]~iu)k'12lxn:DDq"	;3$
v2Y7
O^r#r
{l$i.w1	}
c5i_I#.cG2_D%G\PKt^	L    PK    A             4   org/bouncycastle/cert/crmf/PKMACValueGenerator.class[S@[ZpU*bA.)Pru>8iXj0$4U ~?Ҏ2~(l*plfɹe~u<ǡ24iQ-U0ĴBF͓cwiwzf!RȒ(NPjr5m"zŶ)ʾ:I唒[r՟H2KU]r=5.ڰǠƌ<-s3)9lXsR1Jt|'+'-+C\}>?=p{`
狛323N[uӨЍsEjd,2C/-䦲O
JJ5eZ-sA;.v)<9ݗhį.k\ƞNYdw{Mq'9NqtqtsHp8qᴖZkV;dZɽJe96!³0,8#!>}mm38?7!Ç$]Dذ_sVь&ǥhGT1ES+E.hBepEWi)Ÿ`!&`!`whR½-)&-n_Se7̗9*;Mb^!z(0,A+56R 8X#[Bi}>2ZãGc0MD/vkIDk~.]1a>!Kk
:r_v1F3bP3񰎅C+Uza"Iq8*8BDH
PK+%  
  PK    A             3   org/bouncycastle/cert/crmf/PKMACValueVerifier.classU[E~&Y8[)Fk[
K	Vj$HX]z<y:h23'ݍgңh9OsCbupwyz]z[4VZe@aZwj2M2\OmYW磻g[WMՄrzSͧRej] IL/1E'+
)FCTIC̊j0"%HQc#ɪDM*47mIiΡkVaeS
@ZbWxUk+mpᕈP] 1jUg٢\i7meKsjQvn抇3 jR1T4[S+lIO9ێ6lFlڬ$
޶ϐаeڮ׊w$r5Жׇ|߆^iٯ@(?Pµ.u ql=*Ʊ2QğP$Gǻq\x2W9q|1110|ʘ3ӣQFGGGjăNiGwV\MV+	9s"r"?t9qKcf4>"W)VڙvgNJFեruy꺌K'?ЄygLir1h201
`Ĩ&oq|j>3ы	ymꎉ~,H&j`_jR40M侁X60M3(i򵁏nZ30o|
M{Ò&+444h8<KJ؏)rd!#(buў#K'n.Z}|?6_>t1?!F@m7Cl>VGd"|,Ǔ~b'wx?cx>/`md"ķ>:.CB.QsDttKl&8
9NeWQ'PPKf

    PK    A             6   org/bouncycastle/cert/crmf/PKMACValuesCalculator.classJ1]US*A<⡗8]SMIR_̓CJQ|Ǆ4a?=QҨWb)"Y
#J͗b"sEI.VQ<uж&ߖb*Mþخuv4CFPS9\iuu]S!U$~]bDDҊ$NOPKQ   x  PK    A             C   org/bouncycastle/cert/crmf/ProofOfPossessionSigningKeyBuilder.classVmSU~..,
V$R[&)BRBi3eI.qsi3CcVfMI YP3sߞsy9~pQfŷ"Na$S-wi[va)Tno%qca3L׹Hu׳\;ªYc/8hdCi=33tpzζyݰKL.?7yCXp(Tq8.e5jWl\/l4ъ+F+<bC׫w6׍[X7˩`bX~aXs>C숂pG!Gy?eyC(ۆN\JƝ0ukZm6yI^ȂɼzDmtlYu$*%ͼRC%A	)&͔C{(P3
*8༂)
U0C1\zW)r6Oxo^wgoPt)ZyM'X|]ZS)yA[璶:+uZ9`R{;@;RQ
8_f'4`}~+_\!oe|@PNr)Pv^5;y9zMF0CboG0?y?
jx1
ki0,{
HނFqMKjgcϥ%RT+ඊ9UŲKJqO<2*>q\)"M/jv&7yeTlN.a !IzCvKT-vInh懨U-'Ob00gKsQz.4-ɵaj'Ʌįx>n{N?͟T}fu{-e-A+byIk<	Btʲ+k_vW;=DraseZȷ	qDffb PK$  	  PK    A             0   org/bouncycastle/cert/crmf/RegTokenControl.class]K@߱i]m]E*f/E m-x%i:hH:
+uA4[8dgޜ3g Kf5kݫ0.WTjwAem)Sr>.-ӳcO-1l)=nZMhnl[a۞cT
ݶ\HAa-6CTm1N4@@@=W0\~BMa
qrXH魐^sZ
ȦSSK 0$z'^-!.+h}ʃr#Eq袜,>`8wG19͌ b2-	sF14eF9zk#jxP3r%-Fa,tPKG4  (  PK    A             8   org/bouncycastle/cert/crmf/ValueDecryptorGenerator.class;o>.FԒĜTʂ"FĲDļt}FtҼ⒜TԢ4} _7׊Ԃ<F#<JQmrOK-J2X4|0'WX;edzdeY>ISK~%y%pZ32pV @22p 1' PK{L   X  PK
      A                org/bouncycastle/cert/crmf/bc/PK    A             N   org/bouncycastle/cert/crmf/bc/BcCRMFEncryptorBuilder$CRMFOutputEncryptor.classV[sF֑FC7"ۀВP 61yq8GZgkL_ۙ2e??YI,yb4ss?+KȮZQ>u\Gc,A0V(zYrW8vr3l乂t}̷}KxMhM2]`kϺkڒwLlH$9Dr*n|rq2-ˬ[n\^m`x~\m[s0mYZY`0,.u,!>M^.|ژdFK7\'4bF:#3.o94+·H#Ѱ|k30Sk0M[Y6B {(P3ى&'[phUV1⌊*Ω8₊ߪN4Gd
qd3rS]'1%-#{tF:ѻsrqӈ*xS9g3Lybm>mx!zLB'wL:	'xƛD3|И`g/L+LxdrײSӷ%\&Dٯ&Pg
;mǦޒLXcCEVG?r:~@^)\ס)(䦎!H㖎Lp[_0_%#ɔ$~]
Pp%IJ2
~0
WqO~¬kx@? 'U9I|4RKKu+8=fO
9(B)d~+d22yzV{}xEj?ss{x<ٔeOҹ:=Tv(
s,`!R$},`/u"nH	C9|1|De8C2Zʟ-q,eu O}<oCa CgG\[VdLXË6xF(%R PKt  	  PK    A             :   org/bouncycastle/cert/crmf/bc/BcCRMFEncryptorBuilder.classTmOP=j@p̮Mc"Sp	3$|Gq~i²D?%d4sn9ܧw ;(2#3u̠Y- S(bӨ3,J%)މFS3{+3a{Ѯ:\m[A~m^hȓagf];BxL%߻,#'+
?MKVRtܷܺwΰ*/s*47T*RQq6akdQ+pEMr]s(̍iߠ0,%FnTQ z1zkLj+NI~TM؞#q:⸥Cm
,kܛ2@5$葆$2V{fK^6<^v]V i2JdBhY"Td)!aw>$qB+]_!/IXD6f9+]lu`6E*>!u4edH9]`lGaXJKR#1-Pm( PKںL5  K  PK    A             ;   org/bouncycastle/cert/crmf/bc/BcEncryptedValueBuilder.classSn@=KҘ^."$H[}@AH4jEUBl
Z+W" >
1N*&"OX3co? <]Sha^aNZ%ڶz+P=[
6T#%c]¥7鎖^
i`wQ1vLDԐ$mo6FKclЩvSb,JK9+EW*R'#{aG'y=~tkB:cyS
<=L{U62vym~!7N&a;Ï2:v	?dHgM<\,?~_9%֔m6	p">0v04@E\bZc|]1p!0m#,f#2nSV<GѫQ2Y
X@R;f;dzXDi@pHRG%~PKWt    PK    A             ;   org/bouncycastle/cert/crmf/bc/BcFixedLengthMGF1Padder.class}T]SU~
i.%bl"-UՆF	0eMftN%:ӂ
gqw1P~}s6	*c /"{O.p25}?^c?/A!7%HtZvéVl7U])O	ߩrL۸ٞE`"E=),aJjNR_;TQx{	쇶UUTDٮB;ZU}	wV'WԨbUBTg-U@ܵ}JZEMY84V `skwF-=&"Ikt8Vޙօ;Z]OZ9
FU}k~	}9ՠnNMyT_ըg#JcqB9I1ゎ:.ԑpa[;^>ACw&҅f3d$}xxm~NczZ9L'
/)'yxzVЕ@7p%`9+	Go'h7Ҹ8^889ƻl&GkY`>01~qɪ˟%}\ΗEhTLT	oBF3.&yO^ndRv6Bzf@G߁p
&L?62K[{333LvzNCoEu?g"+K؉si?wwb
ef4+M|cpg\5mK-,lbP
E6&dS5lV6s,G얕1-'7Zim#MMf MygF o#e%P_ຎZQБvqot#ؙ} O)/W<M{Xb(lTrUcjR٤j2\RwZ6/K2#
t?6Hѳ3t? -k6
M64bhMGz_7v11I:PK    PK    A             .   org/bouncycastle/cert/crmf/bc/CRMFHelper.classmOPƊu " Sǘ4:	h1Q_ݕKWڥC?o
Mx"qm<ܻϏ# sa4FK3ssA+\IɼS-a eቀK#vdE
Uނk^:"-&7]fu݅U(%}ǢmaIl<nP´D M+lեXEҒPnU9-UMfT;e	ԏSפԶ8\)lR7Ζ#%nѐhSFFn8@
4.kHiЫኆ>!#r<ѢQQio̳Q/䊜"q强Z
s<f'g)//Zp*qf6bBU#z,*Csoӯ͂vfs/%%^66pU^<:RБB7FX
	\O!)tᦎ~1q1	WqW踆{tM:8d)Jn}^
0!+A;KV;y*`(3}齵_Q  &I%6H]Q7M|5<``IhqIj^~3Hu{PQG-lzصPK
v    PK
      A             "   org/bouncycastle/cert/crmf/jcajce/PK    A             4   org/bouncycastle/cert/crmf/jcajce/CRMFHelper$1.classW[wUMz0pl4-i-	)E!2	Ii^r  \.qI&MYkg}L_ <|&>qA'qeD7teD}gee0ؿ68T4*@AGch`a苏Ƣ5\uxHYT[*<SLv-ᦳjeI+nVb S
q۶$׬nZU-rN1-4YG55NhRsCH/#
A̩jD"آ3nPTdrvkluMY(R\{1qsA5d%$RkUT_9-]Zl=Yt]V#sLi1KǊ۾2J<5)lB@,^NEf-ij1xD͚}hbo"g
kORWuh{
hcS4qS>;UOu@ZcU4n;TɒbuՀi])ndTj$~,IE5YUFXIFD89Qmל';-wֳmhԆmt
B(6mCa70a,CC+>6vBaN.n
1Vv
?"x(='P͡x 6E̤T5ȥ&|CL;3Tuag
XӶuMC<Tu2cyں䳵D&JLB!Vg?[wR*gBxS.rU6S&X;)ʌjun
:񘾫WF/^рS2>!E2zpZu2v^h0&I؎	LSY2	-!	2y;pAV\lKB&ڈ.qExEW~1'0~EڏcЄ8BBcׄ$Q$0,-8wV>7Mn+rn);JK1L)l\LCͭFQ2tw(}KǤC{p=y}=ST
ESzD
3|wa^wD7e<AO׏hۆ]
z^]zxsyb7%Wk%qfrDibO_ q>e4=-zl.z.{;ٷJ<p}fq%eP3e8u0IB]ݞ]>|J^Y/c ^xCݖgm'o|PKGƯM    PK    A             >   org/bouncycastle/cert/crmf/jcajce/CRMFHelper$JCECallback.classJAƿ)sLwQA]tt|qvZwgUW衢QPV~w/ W8"nIP	ِ9)y톂'V,IԐo3"9"JZEa̋xoϖm77ta8|:yc63epF&3NWO9).Lb]w}{ˠ!g!ǽ0O\&eUER()%ji7٪1A0dq,,e@
eڷ]l`_
UPKӐ
<  X  PK    A             2   org/bouncycastle/cert/crmf/jcajce/CRMFHelper.classX	xSUo潦JS"
tB]46Ԧ
>GH@qtYgwAtTڊuqg}s}ss{	ȩ{sS=uJdX+EzdlIfeex	]*`&`mcV/H8N]@m[Jq7 PIy=@K
R75oC|FhnYsZ;ofڵ={vg@'PZqyo7gvRhttzMĨ673	-k7ZZk{ˬNor2Q"D854\WʰR5ɸ	G(ph5#;s?c,Mq/3$t{=m2i4Y{=M:]hH`^PLGCgAIOĎCjIj	UI5p|HMl
њA5&TLkwYۇ kZ5TUn\۶Y[TIRPm#3X4FSiaT)]TG)AaT"2[+`qL*Oΐ4;8r%BcA5
ǢF :J158RR	"ira3ʑ0.T afhg͢/DK>rPW
|!]iLf4Fl*ѾYЀ&3 -3!gu%9TajUl,v<tI)%]rHߨkfoǌcAAܾ􎦵%:6ihw?SU NlUH8ZO)
	O^oS%y1ٜc1,jX`$8cy>#ZIJ4Ιg4,<ew˚MAp
+n$;P8d-x*N'e11=ݛx̷XѴjXjiMbt5<^6R)?,%c#hPI"[IFܭ6]ey}a+=9:q?Ўo+Qkf{L
'Sn/З]b]#~(qbŝ74m/z &X&MyD"e۽]Ϙ*֣Hs<JgԁnGW(vN=ӕՒcc8^7%ߎ#\mz>(_j"t*#\ïH<KTݗH*tjK_e.TLO2ɘ/ZF%2X&<e4hJjnkd4IhJ8 aPIHpXBBBRBJ#J8&^!^%^#*	pIFµ^/
(MLws%mP~~ ̍A
v+k뺲ĤWi).$_Mv3nm=p8>nCVg6w?iW=ȖO}zco
%bGFӖΧƢٜH
/gVz??3o<qV$,1t{a}ޙN=
(xOnG^"[25?+YU3׋G4iSٌkNdx٨|j{$&g}33-$i^]8rӁxOrL}
Ϋf/|{ʯ9é4;u\+)'abxC=C;CKv1fgð210\0a>D/>D%8\Pĕ^||щP/9_v_qbʵ9хo8сo:b6ǉ-.؊;q~#'<s'/hůhïwNJUI4}nPVOR<g	D1 18K)QT2 K$/3<nf1ǁ:,`XP΁l	Q]ݢ11!:pJc8\V;(gXba
kXU{D5㢼O2|F,e8a9JzF'RW/JQI;FrV E%}qC
 XġMEZ(WeVqQ9~:|Q騟=
{~"fl`w7bO7AqqŸlOvOIW>b\6N䣚M4]hPFRy>~iz1jho8%$+:ODNNT.ENaB12-\4RŧIU,1	$!iBc	eA\ʞVlҋBv4(WF NƆ	1tP'9,F2<φBY"9ICM6wRRVn;h:hB$7/Vʇ_*mM.y)Sٔ2]mӍƨrtCrl4ʫ6{\\rAysɪq_eD?<T.UL(c^z6͋6V6;@KVe5KNn	-li3,mVc=66-Uhn45Sp[%|x3X|c37kd/2"]	gkZՍ8DK
~=tc?VM7FO	'n4Bq>pil8طoİ.T/1gŦzVÉG
b-
)Z
:u`ԫS~6L9+IbGx2L͛mԶS-8T]օL:bD6>ewXN8ScЄ
1م.|$np#&q5\XZ5^*L.$^&">sn0m.GG	+(7@OS]PKV  "  PK    A             G   org/bouncycastle/cert/crmf/jcajce/JcaCertificateRepMessageBuilder.classMKAڻe%:d.EXz8fFN}]T(}1$Dr`g?<?T, B_1-[#I'm'od+^Q\8q8!f[v1+8u*	;e+x1Jj 6-ngM+yE3m@oRs5wNr}vD)%\z٬d6g={MOMP(:)`*lrSA4t.՘ڷ笁5t`@!AT`ag\qX(0!jCtyTV!1#w2&c't';V#z
z=G»
xo`\F
(c|PK̾|  -  PK    A             D   org/bouncycastle/cert/crmf/jcajce/JcaCertificateRequestMessage.classUkSF=4-6q&NH[6<Ҙ@1MBKk#"$ג2ܙΔ[?7e1|ڽ{ιwվ?
7ݑg=y}hX;Gťuj"r
]%wM2y,qZIr\҃w@&k޶iOZ0|<yq?_+n5pKkM5l5kMkjVAM&/hf֥ǈKy0sBq\׽^=Ø]*۶g&W5Jzi/Z_2NaqnFփh{RۢfՠZib7`=.342N<Tڮ$8˺!^I ya<yK:ŜH͝$$:Jk.INC9XpGٕ]0Ow
=G!YڶîmS!|آ$%|(#	%\0$ኄa	W%\p]%|";&p92>4{/J+<HPZa|H-r0,݇$z>'T;[ּ$=}	yukEhN'-;N4)tQO6_FC/_Wp	[
1Sazp_A>@Cs	¼}PX(R2T8fY
x"#g2&02H˸aVeL#+w2I
&#.TB.2荧8_eQB*]b4hL$fCo_4?V=R	H2X@FcUCLo"YNƸŀq>c( '6i:|
 Co2ZAұ?flUUC9s1$_tUT/SV2I)9=D׿4풠JtXL
&&B
EYDU9ՍYOR(މ#f( PK   
  PK    A             K   org/bouncycastle/cert/crmf/jcajce/JcaCertificateRequestMessageBuilder.classT]OA=ʲ@QT-PD1UPbi:[[؝5P}G
Rp9W Xdd߬0tOg]Y/2C/5
AE XU<R2=7j!mFvDŹ9`3m	aT+E}ESZUByb1.UG,:	T2U*E^œBgj;VPQ$\{~Yk-U)RGRg0R̩F_(6C/嵩,Bnz,z3ͩ	*\.g_0d2mTA]J"pӆr-5ߴ7ۜIV;I6nNٙZ:5Y-K^Sdk<sЁ1tb%}`	bc60mcm\
#1fdz$=16sQ1uw»ݹ>nl0HkL2>\~02\ (8Mě#,I4׉p5D;rOp[{?PKEC  ,  PK    A             @   org/bouncycastle/cert/crmf/jcajce/JcaEncryptedValueBuilder.classSkOA=C |d0Z	
*AinfgW|$ nm¶̽3眹s6o? ܃0zV7i0-e6*փ؈@*<V2ѾF=W]T*KQaaȮ(..x@y=h1l?4yuœPBw#5Ij^hK7B^&vW8,Ly,',`[(Xp(TӣC*fTα4w!;鬎<VW텑Dj&Lଃ.aӽp,8ibKL"
zfX$,/jP\HuU*9=Jwߔpk7?`.<trOYRfJ寸qPK}=    PK    A             C   org/bouncycastle/cert/crmf/jcajce/JcaPKIArchiveControlBuilder.classoO1ǿEtm$Ũ3XGDҕq#na/'5XD㎌{M~I^ST=c`y !ym4e䂠]>VAi%ettƺz=[[MRE~:t7J,ё,'%lʽ4}̩ʩ:}#P,:r4`no5_+D#ZQDm^+,nrY8pd<5Am5`k֚Cϫ'bC톂뚟r1Q#X?:gUq!/zvҺ?Y\b
ײ
7𖍂E9]ᶋyqǒsq6fE<ˆyX13Q[Iߌ13\<!i#nPU_r S0F|1PKo  .  PK    A             N   org/bouncycastle/cert/crmf/jcajce/JceAsymmetricValueDecryptorGenerator$1.classTjA&IFjfͥl*C"BF*
k&6avR>(
Cg7EZE"]s3of?<D!iO\m\5[Bj!OM]1hb{\8j>.?e~fx髶3tx=a;BiQ#׎
uRR(qo_Qq:AuBvw:ө5c2; ;nP1,rR/d򯲤ghqf vB-1IYuD5<ѣc;(e{2忤#ViVK)]Yxxl]TӶvnIbJՔbkY70	\70Y[C9j-0G7W[FSh
Ͽ㊓BTvmKJ`h`iU 䩤SA%i$DEϗ#7FX+WFS>F+¯Jg)4,
72+\;Y^82@}0kǸ;%pl
sTEQRh PKK8  ?  PK    A             L   org/bouncycastle/cert/crmf/jcajce/JceAsymmetricValueDecryptorGenerator.classVkSU~6n
+TiZUA`^!,$w?ÏuFQ?
i 	Ȅ=Ϲ_~GPGZ3k6S]3
nL-KiМdgs7,';JnRwJgI&ue3Rn؊ʰ1J\mVwU%Ie~ciCKьJp>QbRD=;,۩jJOL:M;lCj㦘:F24gLf}S癢+EJBe]Tb5f|bz:pzNqmyi&
Fl:͈cjމ	/,T!@ST3)wJS)QP2YCN:UcZ>jïkT7/4Jyu%(a#DV(&/6tK}a0wh[FD\,ↈDh&⦈v/%fNa7AiYbPߥdk٤3ٯ9y
a%>ZyVz%||P_P}N,݁^J
nBJ`_2e{Fyg+9>>^MAmT_KvnNG+pUPt+B; qǱ,,7(5
e]l\ď7äaeb2nM-x[/2dH \tqQ\Ż2=QQފq1&e	.&eQi>;sQq1KE	|S	!| Xz΅&ۆ		}ܭ:$z
?0OPcf>R;uҠTamXrUmgVIE	=DSE 'ĚGҵdW$ Ç/G&O䂅#	O "w|<
Α*q4kcI#!%mb0	<>
R#ڼF_fG,/V{zs<q'3#!"$j%N[07
LcM9jBΟ2QawHf_Q#߀^B_Gv8ӛA"`9CPា<\ P["x3PKa  V
  PK    A             S   org/bouncycastle/cert/crmf/jcajce/JceCRMFEncryptorBuilder$CRMFOutputEncryptor.classVmwU~Msv#Ri$-lڂHh
\Mݸ@""|sl=MҔl9'w̝yfϿ	4t
	-	i8$ȚRi0o0ٯm8dq6j"73ЍbNHUcX:I$te=!w7w]p(˝)ߣi5Eڸ=&EAkYb3[ve'PKB$iyKkw4Yuv!uaf/BF<^Vzp~6xUҲ΋az7+ff,v\Vu{Xj
&fdcUZ)pU+TX#&e9^&nB5kyWx(<^3L/omЫw}K&U/F
-mҷjo.UҮm1NH-H4:kD	}eS[(~kh:ߛ~3a32p5c3puA	g|mRzJ3sϼdN+K"љG'j#ə֣6).c4z"FZ@7|Ѥ1rk#~FRRշATi"ͅiF%c>
9ۺ+ۅ|-!z
UZ/gJƻ|-W8vib;ˤ4*Ry~|-3A
:.SĄ Y;yC
 (PnL){
eATWȸ aR
f0x_)#dD= -#Bv	e¼ 81AtAn1dŗ]xHX?}-$MDA+8)Lk/v4}1o{JPmSzo	X/
twпzN^bl
g?RDG87u̯᫉@O=7#6\\4*(?EWO,XxyX;0\YWB -s
I)&:QK=RVUPof_ #L+ɇ4*Py}*)I0 8*10B!9C>.JcZ5$jDmJ?W{pv+BǮ
"QU;H$YÃDeSg=DPK
  S
  PK    A             ?   org/bouncycastle/cert/crmf/jcajce/JceCRMFEncryptorBuilder.classUkS@=[@(QRiQA(E£e2S0!]0PR&IwtFf(ǻGKLsM e
l0NI4i[SҼfL\[nuYun@lL04pS#eFyRȓbh5%;JtkǏbgKY;V*mGf;IrVBO:w5*@wumW.c1K:wOYs]onS\bUҎTN:KF#)m'.	kV 9%k`*u;˹*ZH39n1_w%x%ܖ(IB	Hhc\qx9R'WJiTfc`7cGJڃRBUͷr12̝IRu.RUwR#p-*(#e({*<K-LV_wĭ4Z|n`'{#e3/7yj5lxрj/2yQ~/j؋["TD"!XN<aT1} /et`JI]x-[`BF/^1+ݑ&BIͶM$2.|]f*GTfr
ҽd
' y0IWQg1?EG,g03<	<7>R#%}=uz'td6_@MԜr3eA!Z嗛E"c.'SK;ܪtwJLk?PKEB    PK    A             @   org/bouncycastle/cert/crmf/jcajce/JcePKMACValuesCalculator.classUSWGֵZ*Җ*XðնU!
	RC)mes6nv3_ٙ̔Qvg{Ͽ10O%[K%	c{exi
n%ә&Q'A=.XwhC6PʑP.+L	fg
kX%U-U1ݺ<w]Vc
HI8_cf2=۩qDSǢVu7̲h\z_{-0tے0}EotgZP	FnqNU۱}Kי\cnюJ~ZgTr@G-<ґ)ЍbLl~j:<zvM/2=Ԗy3ЎۭNuVS
6Ap][#a4B	ɸ cRES2>iɸ$㲌4r]\p..@\x2+zsxW4b[Ox	o
s< B_)=ZSd|dsױc;&fp5  
w/Дxq*K+qK(lX* Wׂ|C|+vwdAU;㸯Bq!+Ȳ \Ê!Y乂XU+ OYW@^A
R((H{A6A&# geg)GiWقWy+5ЗyHT>1S"*%Z-HZmD"+`)Z# ]@ćiI&TzfV"LˤwSdF$W"8/(clS#> ȋC$J)iv`XoS?~)ϴ4nwй˘P{-wPKL  	  PK
      A                org/bouncycastle/cert/dane/PK    A             7   org/bouncycastle/cert/dane/DANECertificateFetcher.classT[S@ҮbE^
"޷Z!aWQ:쳿l@gv:g~{|+>
}Sy۵B!/-/E #YzO
/PAV̶HaoNnN=F7mYbೢ-v }n{.^
nќ?')RuB؎9ba.`
(Uڑ9faL'<h潲k-X8Ҵ(3 \iFst]ԩL͈UCډfV:[xՉ+KΫ0*k%5MD[ٝ
THwjGV6;98vs˱ocߔښ\Io=v6	n7֣jV/-wWM#=$V=BhX;{3W= Pc7dcЭZ.c}5B4b5kڪMdcmjaᨯt:b0uqtDРt	Qѡ^ь~qRruY:\\PbCb81tc,FqVJ)\#qZWPFWy*֋	1[aG	q	[>['44ّZT#r/,GL14)7$M}dz2ST!]3=,FCH2R=F&0|C@4.%5MUoHjp]_ݏE8đ8 SHPK3     PK    A             *   org/bouncycastle/cert/dane/DANEEntry.classSYSP.iSEmZ4B,F塆4t%a_q|tFQr<7M/<swm2/0$rI#!50L|/gtbW)a/in[O1<|R[fI|$*VMէ*̤F3OS5<eF-V^s5b席p:h4ecsKo2Rn6PRosrbaw['t
Y)hA`7zWk[՜38J>$BK	\յv.3VC]V}gͱaUtknؙljI5?l/m5߰-^Ec"8!⤈S"NӨ۰;]\W^T+xK1{L޾]ݘ_qeA\!8>n	21\ᾱ~pk\\
	yܕ&$
ܓPm.hNoޭ%bjh;f^l8E=r=%"#!b!'c>,]YboW 
D1ʜ&$&H+Д:ƕ:+גD\,}8<BjSߡ<-[dnSN*/9LI3i7v\HRN8GNﰻd2
*lP"&&Bq;H8Y鍈>pBA"z!%1%IRL|@BqyD2!oJ~PK,5B'    PK    A             1   org/bouncycastle/cert/dane/DANEEntryFactory.classT]OA=veYP(XuiE&B1 >.,v3|52]
&>;79sgg<% O˶k)p/x g:#:-=n|O0WpkOw0x*Z+5)*|joj~`+͵#yhyhSal`"coUoLQ	le讞.Na#Fjv3a6Z["QPЮ@UС@SЩaa/1$ɍ'Al6YQUI(ؖ1kNn%BlIy"JKًlŬKRCIC7R$iP0'	#bHhe
qd4o ÄCBVE9(*.ᚊAL0b7b^	zT)}+[|>z!9Hi6Jh6`d,	3L"$Q%\|D_xCwkS~D:cM/50Kq
,~~LXK"/d)v+%$Yj"YJ긝?l-GmÿOPK'<i    PK    A             1   org/bouncycastle/cert/dane/DANEEntryFetcher.classA
0D'Zv%"w)%W\x %.:0|~<l
q[
Zߴjԩɰ*Ι
)CY;R1\d軡+I$2[߿F66a*0Dfx%PK      PK    A             8   org/bouncycastle/cert/dane/DANEEntryFetcherFactory.class;o>vF֤̜FĲDļt}FtҼ⒜TԢļT}G?W׼JԒ"Jv&vfFG
y%Ey֚>$gt00202 PK      PK    A             2   org/bouncycastle/cert/dane/DANEEntrySelector.classKO@&.h!Ɲ;	wCԒ2\h0QXIn9{'gH8#O{Acx]>CJN;aB=ۼ%Ϧc.C?́?'%i'Yd0ch	C}J5 5uCbycRCX~ƪ_/UH(jiH!ryl`KE*raHC2`(PûU	*ѮBex|FbH15"w.[sԍ'TGhCфWdxPKAR  ?  PK    A             9   org/bouncycastle/cert/dane/DANEEntrySelectorFactory.classTmWG~"!{*ݼ*V-Fxi!h)mqe7gwW=j͞噙>;s?}}*CHԐOzb{ըx}b#t6-9A
s-*"!mvݵHTe"U]*DU	BmQ;$/	WZ@WH<07sR_r)gh$ЪpźeIRMxU|p2lQ1쳟
5if	Uj&pTAGA,u޶PT3+'̹'OF`)21Tԯ@ٜq]:n;Ő|u[Ah[tGa'
Jeyy8Rps8qi3g9q[,<ƌbidtF>0jtyQꄸꪨHq٨=:R<0tZ .GÈE/Ыc\.8I|+
VnWu㚎p])M#.`^W -
I(V]
)ť`QCy
Y,i05\L9 gߍOc(I}ɪ-2(ʎf]47huZjS7(Ayzh|Ni.֗RQl{~xk{H`u/yE]_H2ҭ=bXnM^;: UK*(C_p$9Mǅs#MPKZ^-  G  PK    A             /   org/bouncycastle/cert/dane/DANEEntryStore.classTkOA=.[!P>E|"m}Q|۵,]n	O~DJbf_01w$~ۙ3Μ{v)Zpҍn|ȠhrxL"bdM#М6Q#/L]8C1{AVB,Gp9s"0&1±-bID3JGo:P13ёlV訝Ӵ-z0Z'Dn..䦀2X<(PܬY al::k-}E9'cDur I9+%I_í;P4$MֲwB1Vyyu|Y7zT3_QNcW\pi`hJȵqIdF#̱cn.n={9&-֟Kׂ!CEen'K4ѻ6*[i["۾sKFPR{eߥG^>v	;2>=2wB!m;Bo[YojVey
x]ZHqT4)*:qBE#NaNizF*pNA\PqUǥ1C_1pq>H,29 &nc~1.a!LpˏF?j%t<-N"n6Y)^0DHF/i@#UY*3$x=4xa%ҭ|nY/3{pmb<#q*d^Я<n]`x>p7BJoQʰtAjDy$f(ͿDPV׃	%GĤ*ҌJxq5DV,?/JX?PK=_    PK    A             6   org/bouncycastle/cert/dane/DANEEntryStoreBuilder.classRN@=ëR (BE\X
*.HL\2%5e0Wh~NcLt#;s>@at;v\G0D;CeHuM7\Ꮪ\XgPm.{蛮m\uzϷ7teD!ei	1!	ƞɒeN	s(

zr(rOH	ɬj]VEr:[#hrMCi
!0
Qd!l)а""^F4~59)H)Z}nYCt1˕䟀 F"S$ސ)?#_c<"і/PK_>l  0  PK    A             .   org/bouncycastle/cert/dane/DANEException.classuKK@5MGV%Q ;qt?1f$W
??J=swb GҔ*9iBn%wo4=(}Jk1sJk'hqvz1Ac4b;W׵JO.M1Ƅ~4֢8	b$mD$4vN@0*`Mlna+?|Ev|<h򞧁0APKX   y  PK    A             ;   org/bouncycastle/cert/dane/TruncatingDigestCalculator.classOAǿӃ^{JQ@ޑ,y0ŗ&5<`|i{]#]s%De5"A.ٙ~fgv~?>ZS^+Byڄs90ەڕI8Hrb$X{*XPeuBj<@\#BPK4{CBB+ʉJ#}@HtACYDPZdۜRi4*w;J^We؆cc
gVwq&.-%LLw$7yI[iO1Ŕ2]X \T-[r1*n1w԰⠎/`
csnShVqă8gj清E-^-ľ)~4&VXS	V	@s-7xOc4yᓏ[44T:#͆XW,PKU}  i  PK
      A             #   org/bouncycastle/cert/dane/fetcher/PK    A             A   org/bouncycastle/cert/dane/fetcher/JndiDANEFetcherFactory$1.classVwEm6nEZ%MSP(6AAI@HAfHlv"s|UϱG}lRJ
G43Νܙ/,
9X`r(K"!pbLBai	r:JT93
ixLIH6׹0];8::J!<aָ'9Fq|)q	)[BL'0F)\gnv
_7f2u6AeǪIط)rGn68l`btf9kS4CpW9:K8pphm&l;Ù-/Rzml37FLnռդWBӄ,xvjZnZ\k,LrbpOO~ԉǘ^_d[;BB}R	͊.W7^%D=S;9XK ZW>ee<#Yd<'㠌e$dxI2SVYVR:ܺ*&'<[x5@r7r؛I>akLq8(H8@3G.uǾ1moh'u9o8_a{r%'\\>ͺ]J_lcbT!Vq!QU b7^S~!RB$1b
9:bΪE^N(
Q⼂.qYY4+U{ewxOAcx[=8z0KB/ćtNUYv,ݴ]"ȽMqE-;&s]q]`]Kwżx{oEQ!HBF  i&9HCRe詑eTR˨V}to&>J34Hˈatvfa
'gSA_]$]Pi	#~AdBP
/L8]dSk|^Fa
 *(/pD][hŸ&-\U[e"xdKr\Gp'B؆WQ;011@ɥ[sL`g*_ՍO$",㨌MG>ddiLu	bzogp
7	 PK&  	  PK    A             ?   org/bouncycastle/cert/dane/fetcher/JndiDANEFetcherFactory.classV[WW8JQR6V
46[P
dH$ ؛~/vZJYՖ~gbUKw统=gr_I%$lC$<+a-qGu O\]	>}Th>VR`Ͱ͙2K4j",P:GfgV(h񢞣5FxHa{
+7lmg);oΐU@!̄͜ne,"e4Z$(:$f$'6Vhgn3[=ne9=L[S&PmdJdS,lTdQ7Q0ۥmջ3?53\4ik3RtR@昑Q'
͵Pfx-zN&)
=ɬshRƻ`v'R
jnYMi)"7;+m8Ж73xhfR̲sƫifh*'g֯٩fVx̏:Qr"r0ݏl۶Y(s4nK̩gWNmEB6֛*]&[D<'" ]DPDN!a.Dq@A$ϛ-D-	n
ߋcJ(]5tl]1XH29kO<rAhIs\O?~25#ˌ!N[txߴ
cDNq3uQ5Dzc$lVAPAA+6*؋<lŐ1FQe^bcc
5>{]A3o 2れ(41pf9.\dr$L⢌ޔɋ-#	"[Hs1ɅQ8_ơӭ˧je3æ+K~%n1l0
ÜԝJWv<AEf\8J_j3=/i,.wt-?/ղ<hl|HfYFjjbpm+
~++	}G􉾺9\yw:$߆Yx|hD
-"F%3߽\fn@93*ܴJsx.I!gued`g<>-(ĭ:"zD:d	.BZWBoo^Bd$/G*Yt7C\8j̾px_uD:qjRg;]Dbt&;K4R
~<>[]~"*
_^'NqA18%Jk.DQB(n R34k%fTiSoh%Әt/PKQI  L  PK
      A                org/bouncycastle/cert/jcajce/PK    A             -   org/bouncycastle/cert/jcajce/CertHelper.class}ON1=Pnٸh\5!q_ud2%+hw&6ͽ=׷ (w{7iw*,IGNjTؕnL/ȅS8!
hFjn[f4Ww,Ri	)~=\XWc3JəKC((*<N}lDp#guG(A4PF3@
fBh3oU&ETOh=ɒp-qѾ/hPKY    PK    A             4   org/bouncycastle/cert/jcajce/DefaultCertHelper.classAK0okW:u٦`/*^=o%#+=)(18=
/	v	9UZ34,,X5UK!meB7g{k+d "Y΍M*.%Ϭ4`5P<Z6RԶo+.gl+syiaN(!N@yzcy6k,A @/F]lqu~$^>-Vr{ۥO@xsO£Wl=z#uPK4U[d    PK    A             @   org/bouncycastle/cert/jcajce/JcaAttributeCertificateIssuer.class[KAc,7]}z0#(顐)q]lЏKF}>T4хv`Μ
.usL8][
!O\ު:AJ/A6|?^x.X`a-;OR*ʱomΤRoP{H@ѶJDely
Zk.p˦ww9W?^#)=Hvg%g􌳿4
ctme oZh	
fT6LmCK~mЋ#,[F@b@cVG
Y2:1c9SKUQuL <1u]UQF1&g,tԃB$=@r,uܧ	PKӽ5_    PK    A             .   org/bouncycastle/cert/jcajce/JcaCRLStore.classuSRA=6+"WlF(<
ڥ6
>U_1U^^${@Vm3ݧz~
0^f8cFEh0hftuRªIk	Ɖ$I
Ɔtib/E2"]K:nj4=wSB"àd0veLF$+2sr+`9EbSXggl8P_DMYkҦ3h1dI'%(d`۲IEZI~
cyd.d'mMN8*TAt$35TautXsmvy~Z󲮽mLG*?JYX]:t='yZyO.x8q"%ԲM{ITMQzqzUcVƏ).:rld'$EN
\A8YTFnj1`:	Rf@=qÀ:"щe+3:q[G⮎>LA00zqK0LP=z=#Lb wbcI%RW_|ھ<#HZ_#b	&erjzVv1'h50ۿy,9Ot`,V@tesx]돰FV
\cMa|3y<C2}CHj:M}BV88"={$PK-Y߱    PK    A             /   org/bouncycastle/cert/jcajce/JcaCertStore.classuSYSA&&L,(b<å	VT%ʡ<XfS͆?SQ?*M4q{曯{' xI=DƷ|!O,M)QX(4|e˶D,mE(mZcHK[brKۦfVJ"'QC+<e8+°#3^5eѳGyiRLWZ\MBVR
?)IZޚaC[/4x2vf|[ee*+f8@SN@
8󷶶X~IN6LQ
iV^9;o)ۦP1AܿCi,Yȅ=Kh+E6&]qs8qGa#G9Q_≙?Cg|7F_zMNzU;IO)Pdi80hCPڶ(uD1c/tbX	e09c0#sbc\QfRC/j
!q
ҐĵNaTye&";t)[<a'$ C>:H~
fzD%NFXU/lbf71ϰg07}H
}AD0YEb1t7q/o	UѻXEb7:nFCH@[ߢ-I	_oHҘ2< 5h&4q8Nvݜ8b[mQ%PKQt    PK    A             6   org/bouncycastle/cert/jcajce/JcaCertStoreBuilder.classWiWf~2BD
"0#XASPB`Z[SzNѿc{0d}{>ݒ	 ZS	D;=d@oOq:)@$CS-='26Fg$
Q"DGI
(gM3-*&`W EӺA4jIghtffR۹1dUiKqͲc(g%22ēWi'ѮO	APڬ%D'2JaŤ2
%>>?:I)bMIM6u+>߈ӳ6Ԫ&8`&f1>
SY{$b'ryQ24b*5ˮr2mF4TTOR!*3֞t3F5ݟ0ã鸚Rehŗ6SN?AeYE7{'UeR½NO׆\܀fmC.c[.۲t˒v)/D<!N^OxJD}"D<-bgDqHD@D(?FgXZ9ߘGȹ:Z+<Z+3>+xF59M@sF30B,uYG}X<X8D(?cgk(zF7ro[lpǅ-tK[ǳ^yo=.vsHI~\h6z:۾Ϋ^*0NhFDF^QŢeadcgHQsQd"*}2v_фY\b1Ⲍx#Rk,^g+,`LHf1#
v>hUpNv``1%m]MfCc1^,&XLVnЇ? }YzOTF


tW>i>.RE
hTM{"*Av[V>ڇRu.R?Y-R;I`7fQtt	GkUWB
a0w2b.iWu6̓sΛSEι|&.`Bl|4-F˅.|l*EdlP23@sS
2)-(7@];oew杓ܓe=oq{޾G=̶Z@[?hln
u+Kx1KZ
puM!ֿ /,SqNO,4>چN&=ß"'PK3    PK    A             2   org/bouncycastle/cert/jcajce/JcaX500NameUtil.classT[OA=mv墠n"Q<Fh|n]S>xyGg+@dkMN97_|0X2A˂b@Os6&`2NRQ>_9鉉uN=.wS,le8]ՠ[;y$WYZu֪4u6|e]ag]*cï8M9+lQ	KJΥޱ U*kOܬX/8r4ͥleEFͻդ,@CFR[NL<C[˩c5i]C.
5DX|-ضg,(׻0cR;UD6:#?7"FD*mÓ{n2b	
Z1` 	Whj@WЉf\3``H*QᨎnQЋSGb:.RpKe$T0`R01|S&hO!{>[Ǡ@}:*euz#<'BW''?ϸOPbLwKr %QF~&8_|Lxj4FKfO:R,BYFNk>ۯ2e䟵lO%N̏EL}7kʶy:3%;>T\PK@    PK    A             E   org/bouncycastle/cert/jcajce/JcaX509CRLConverter$ExCRLException.classN@ƿJiQ	G=xjRz0=44˺%lDc𡌓<x؝ovd?>P>Ul,dD҄K73dRLulp0ĩb:
TI4|"dp%I0U3*Hp_`0_FɆe&\EN8}znUڝh<z`:pPsaP
{XޥRR	2a6Ϩu!U ͰEg6EUM
 Vf KKA;p PKB$8&    PK    A             6   org/bouncycastle/cert/jcajce/JcaX509CRLConverter.classUmWG~"Eڊo5
6+ԒRjtwC͇'{NMΑs~Gf	i3w}3ޙ(D1E,d9C2e8Ȫ{ezH>5;}ZV!,#'l>gXMw/5ӑxձ̒t+CV=ӶUḦUm *E1Pth{=a%"Z{2h$KEA(KrݑtvŞM[=qD}ɪּUpm^ZopVUWvQڇ*г5RR;LW5Z3vYH;q*s!i[zv]!\";v+DwԮ!v
oz'vA(9#ryxR:ɰ,^R8F'}aWzm=CԳ["0Ǉ8>ccc2q8UO81w.&So(GGh[ov:
vIw4k;تH\;=Ww.yL;yw B,]c8e$?9]YQVa0(PÝ4)<q/⑆x!y
Id5ZÂ4!Zi5R<=J,	яad!d>W+iyvQ]SW)$=R}*5IhܤUtOUl;\Ǘ<Hd?(]pn#;dU7[X>n'ׅ}o`5
M
<4_H˾ve6dCeYyA4HHӗDFGhPKt    PK    A             3   org/bouncycastle/cert/jcajce/JcaX509CRLHolder.class]K0ԺjWnD&E2P)^UƒRRi3~7*^Qq(NЄ<y9`uѼ:bk(62UPĔVVRq+xdжϥ*,ϣvOsPB\lʋw})J).J{!ZKaUK˰*vg*6STToQ1F{ވ>f&L:t #`Lp1㣊Y}L`Kbzv0EQF١,
e
XxPK|`(  
  PK    A             U   org/bouncycastle/cert/jcajce/JcaX509CertificateConverter$ExCertificateException.class=KA%S5LN,͑B,`Ysñ61W
`G%Eyaf1Zs`(>I%C56\#>A*(;46ɨG%cp(&-悧6H'Gg+h)e0qPrPvPah]g\GݓI0=nQ:uN!r݁\jXw`&;33xZK<Me]"!FElR֦H|
d@R쿡,ouP_PK*  
  PK    A             \   org/bouncycastle/cert/jcajce/JcaX509CertificateConverter$ExCertificateParsingException.class=KA͇\NMԐJHN,͑B`Ysñ'+E!I"ؙef+gJ+wP|`%C).}>䑕b`GBdԃknIg$Sf8LcK2tN!2iEw;%3y(x(zXa_MING=^*tߜ+8Cxeh4[bak ? C2|xXg(=Sn!$Rae
+j;#5&PP}(a/PK^r0    PK    A             >   org/bouncycastle/cert/jcajce/JcaX509CertificateConverter.classUmWG~E[ŷVhC)6CXw͆cis9Qnb2ssΝ>-B!h!`V$ñzR-[=$`m=D(ESضㅷ,;v/e˕puvt.7,zc-Yv>lJ׳,Sxr:p&/m"3w :<Ytr2Xe$ߖtFvĮ0,HV<uEe.Jhf[2a獥iz!VeS_{J,W1L^nV4r*a6cwg%Fgtv76mVLQ
2746	fbǔ$暅|"Dw
PJ)ޥ.U:6&īOƵNt
(^˜(FWz'Jk!i\GA3g98q#9.q9.3Y07 CяQ1Wp{-H/J<CV]WYwdފ߱33T+:PF|JQs:ݥ+Oau|[:8t1e8:TWj8*:0s0q4\#
D
h*GxiT)ipOJ{pS~]bmzRQ*IZx9-+2%QUqVkXa2[x3aSt=4fvJ{xY?$W~#^/?|U}:D+5,To{CZDiXN԰SmO]z*#CT:3г1cB1"{TST×Ph`ڿPKHy    PK    A             ;   org/bouncycastle/cert/jcajce/JcaX509CertificateHolder.classMK1߬UA{Jl\,/*(q,"6afCJa攡2ָ?֮cU鈡B͹͝J3DKk5Ȍ	3'ڔ̭Qظ3TΙ2(?Ti^:jdZ!qX
<KtdPP1Q3{a%+^؝l1ۗ6D+׬M: X JXQ >B?ۊۘzXRWQ
X{6&EX PKj2'  1  PK    A             H   org/bouncycastle/cert/jcajce/JcaX509ContentVerifierProviderBuilder.classTmOA~kSR|-?PMD!_LR6_a%D#D/ٙg晽ݟ}0ZSMssERdɗ#|Wb.IP^*	o=Wv>j\x^0t۫pC"2+'՝@8eU}G+=,{΁U5lVzJxjS&5_Nܵ#?OɆ $|o/NT֍uoԝP'Fh n4i2pU^,_s7^ldK5ZQL)_~ҍ7qiWx	^/WZ9Wt7`ە͘:rMݝWxArJKc]'`অVXᖅZ㶶
XI]^7pD7詉GZC	L~h1(C[VЫg/}pe]q
/mtFNvS$gi5@sF+sǙcoa+>CnLOT0.sX9,iKBP<M s4!xl!1LnVhOHU0>z0O%V~PK		    PK    A             M   org/bouncycastle/cert/jcajce/JcaX509ExtensionUtils$SHA1DigestCalculator.classSNA=K)kU@iEݶ
~cRњj4~~MͲKvJJD2i)F(Msgιܽ3_ 6HCL0jw5]9)JSҼ"$'eYpm?p䧽R]x@Cg'q)l)2|ze!a?sl%E!xDwgJ!,6Y
${-ۢ6MjY<`<rwJ}7ǿ:6?`@`,BHᅎｕK*/ZVVV'̹LΓu%!H0t\qEǸ	:jX(܍-ڮRBMl>cO%(-!e0j*"Ozm(
ᦁ8B3pM)( n01aY;q$qOSt)5F&Yd`<OES2o˱H	Sp#R9tWGTE4R5-ݤ" L1;mCfXhq>Mt1fwc'vI4*R4=tNQkrzl9\CPK4  s  PK    A             8   org/bouncycastle/cert/jcajce/JcaX509ExtensionUtils.classX	tc*bRHm@6464mP"/ED!	KcY iD[IMҦFh+q5mKi/ތ$Kbc]#?rlנu[z	UwDy^5b=91Ż[$#>DBw?3O=b5"+j,k$q#1Ѧ!M7#c-.a=OԂf:{r$ԃrf-S#W$kfOjFhꄖw'k	4׃FH5.鉈SIM26f^c		Do=azh.%I-~K1@j,CFS˃f<).lo|549
	#G	
	M8-rP=z";?b&5'zS TԛDCFkFL 5y^nܢs4|\h'`
HXK.-4xO454>Q`fU1q89B$xgZPp5Y٧}\YcX'.vPn[GWR.I3Xg}F4Jy,t'ԏZ\f]+pkR<::xaÔ`$Fum̖6#hSA5aF5;==NV;
d\ͬ+ϣLD8)Y~pR)m3egE-KVf0+aNxU}[uvyPv`.MGmFT`fO|x1:Wi;ԽTud|3`P=<WՒmƖ:5|9J
&iγduW7'W+bZДp<P6\5%	:["hT+nq	(.T`[UM]`&N-O*Mt	tl!+)p@@@N~v	W|Nl7'z[zQOXN&7{adcJB+Kn{LIStk&[Fo*RE`1<.*8淳
2.6bZ.pKVW76b#)EKcS*䬳<L$[gyNe=>_Wi_>O
H]P-	q_.Lty$cv\QGN:1w3ˌ̅ؖq?M;zqh_r;7	f{#ra
jPd$bU
.+Q"QpnQ
VaJS.dx*5VЄ(X*hX|(X*X)hƋ4%
/e6ֽ]w(
;bxj
z\xy͵oEoAm2Ax=x'>?1|D^0z|H~&߈OȸGex'e2B1qR8C8w0eC32Șefç>9/0pN0dqqhn{ppoP}&թj"h,jЀ74-H\,X4ZCO}/o@âƿ}RHy}WeQeXJF qƟRxUemƟ
)V ~mߔfj7.kjo,duoye_m^-7I6 Qk')8c,9k£)|מ?u
:2##Y
}_0	|~6Nq	Hῼ
fYUM):OE7'6'sOV,#-ݮx$2x,_CЦqFBN~D[	}%%|;ouWCM8vUQ`gk
R
=WNqg`o@{
_M')1j$J$qnn8$p`٪stVSF@NCYsu8]ٙI\FD
PKDe  d  PK    A             >   org/bouncycastle/cert/jcajce/JcaX509v1CertificateBuilder.classS[O"1zxMRH4\5jbbL|*%c1C`b=Q Y,iO}}`D@&	lGūeQ&j).f+hMpߓI+/$X	"mlf2ؘO*./K\Z79iWPVS;7hOTo:_1t gTJδ(-`;Y^TC,F,n5.So՗O<۸`t:>|;93тtJGxU_K0G
Q/<b$&3 flD6FD3}<m,bܬ 76cl5Ň^~OwK[|6=PK2O  {  PK    A             6   org/bouncycastle/cert/jcajce/JcaX509v2CRLBuilder.classn@P-P2⢡E@\m7Kؕ x 
1D	K;ޑ9g?1j?0\'ڼ`p&2m%{InD"
eoÎz ӉG"fXcs%L.Ufxv:2:M6JnDR2زPwL|]mYE"OMȓcbNQ#GN):RR;mF_9xl~4iYQcA4ݢMQ}ݧ蘿i*~V+-0R0<;[
*n..anp"n5*
tCF::}Y}JR([|7l~ǝ=l}[bC̵1Y1JZz;4*PK    PK    A             >   org/bouncycastle/cert/jcajce/JcaX509v3CertificateBuilder.classVNA=˥+KA""B
`ZKݦlI%;hhb 5| W&9ߜ9u3~=5]^(ǲ
A9[hH2+ꊖW!1M&$^ĵ.iEVZVF*=1l1ȩJIK{WBNKbA<9#+9]\n+UKŊk0h1I*($JPRV%YEڜ
]v(Xk{1[(ݛ?&5ZP3I%a6!-KiYRgMR+ZK8ãG~gy0M49{%Z3;!MjsF$#i)auWhX{gIynu
Rds}ΔO*3Lxўe
еiSN+QGE$=[=#QET\ӕͷ]͈k6bB?o*ҜȷV~
սWsr{yG$ᱺH_S@|]d1'9с'x\bONtcN8pŉN\e&Xb+`p30+iYX0 7D,̱pѕoqt+_F._8(FHO}?0=rw@2܄p6wN@'@6cA}tC2	s
+c}׆^2a{6a#:2a\qZ'9aq[C(e+O+H;vK"dPK    PK    A             2   org/bouncycastle/cert/jcajce/NamedCertHelper.class]KAQssӏ>.MF@~mfdvWEE?n"Fsp̼8AwI>R#Ӝڈk<(=&ܜP8AGG9ja~[uBr}|%	*9f3gtҁ
M=F{ǎSpM+٦;{QZ+Oew2h?}6[Zv=?.V<$@<26\,"<AASصLud*ǪlYU:ʸglO(> :)$#3	Q|A>FmmCPK1J    PK    A             5   org/bouncycastle/cert/jcajce/ProviderCertHelper.classKAǿeYեK밗nF)
<BiQ*(Q Ł/}͛ϯ 8dH3=g
#iW%64SB ,B2|HQv2!GVd59_M߅c-Gv(Ё!ǕaW7&4ht qikm3՗jϲCgA]kPǽۚU=!!<6QrQNاgsC)6J%H*
86_lxe6eb<c3o<&AQ;PKYbʥ:  m  PK
      A                org/bouncycastle/cert/ocsp/PK    A             .   org/bouncycastle/cert/ocsp/BasicOCSPResp.classW[=`a$,ل9Z؅\d$٢"!kbH;^F^ͬvfU8vzNqBXXS8_J1{{쳗/\iԀVQxP𠀺A#wjf&M#'
;<fdSi#'&JbwްuM{b{tRWS0f&TZ=+'$atb)$WO攴)LBXwfFB5MR4-$&=$f-JER%@&ܓNY͚9!|`bo)0=ш0jұPx.tЛH4'hvZ3*;1}\MX{tJX*g
sV&gŭaI?k$s	5+h^3tpVHgk)]rY:qk钜5*YLƽ}0i\=f6(fYh=3DGnR9|IэWN)1͈Nxy"`'-wCN+z*VBn)J%"ҥ|i6.kc{GuKM18ejIUߠf9
*TL-11V zytsPǊ	Tun| n!`s 4%">|ZOӂ*ɒM/@=hiܭG{r,_oQedcC%E\(4Q.%bvS܋ABv,KSl,u~U,YDm"]
"nqEq;E[ĭ"nGĠ!"FDToYO Ҽ'*܊#p_Gmʞ1/uJI UR%mkkR8	,UãnέF:JbN0s mt9)vR
Tc C?tᏞKR~
Jl:Ӆl]ވm۪֎nPّ-(1OCԪvVy
_W˪}TRK$3Y]]W>cG`K`nt>tWv²0eMheMfV{8PB]-d=2Z32 C(C#B20\z2t1Ar4&J2˼##c#Nʈ"+*2Ò94?##<OFU262ȲdÛdAoq
ʳhq`x'ûq7-a?>	~	q>eH{%p
c>E	wdge0'$܅OK8^<ü#DcDcxqIPpN4ЄfhX*T/渥$W2( GTԢM?k8H1q-=o)*J;{TO<{"y<.cXoc1&Ի[]͖'HV!ύ	sь	1.ګnjy
\Q:ø3i
=^׺v[Xeʡ|m	ݱ!dH:Æh~6FNڣKtqi
\tζ]hqP>yZz`{
%stPt3(]-[
:oCqtƟ=FG5_<>. +Uȓ
GZ׸$^K"DHYxQ<~W_pMBiGc<9eW$m͛qﱈj0]?-<.d'/5_±%ħtkMߌ<OqG,Vyd{'D]MSKHϣFчQW;yG@6l1BhW
PK15    PK    A             D   org/bouncycastle/cert/ocsp/BasicOCSPRespBuilder$ResponseObject.classU[sDuPӤPSz[BHSl'U7UXrW萚!3L35<3pV;xttwή˯ `x$/1o2f\6&!^ĠIӽK	5rb1t90d-!7tԷu1DE1<.m
cM5ϴ#AqjǦV*%uemͩƷztNjslEUDi?HgB:=Yx}p+Zw=p-QN<|`޴˖	B%:cw^r
GJd_=/˷L$/X#Fq+܁\7mDf!Ax/]lxh#kj7=s[m!qccGepq#Y9qg/3]-$#Ԍ"KP&oh$#m8%}ǎ}<v^z{m>}3~h>-tSis*Cny%j[/2g=pP>;7%bo  สbT!0SP\^↊*NbVޗbnX4HIC)n)xXT0!ED.#-Œ(>UCNA
4d$K	C tLA]Wrf>A[JA:
} %
)r5Mt<F#N?Icuc]M":>CTOx`8H{/J/.uCmOl+opb0H#ΰIrpAi2ǘO g581@7 SL2X1>U+4
4>}e8K46hL(PKT  	  PK    A             5   org/bouncycastle/cert/ocsp/BasicOCSPRespBuilder.classW[wU=dT.Kz#j
)Ŧ"E!Hgb2~CAETzY]>ࣿ'K}&6زC|g}܀u\۶[rjw..WޢC}VgH!Eգ1ӳc{鏶WSdSdDBjPHz\%r4꤮Mh>*/,T'5jjD%}	5n
XZXE/ExV
̱񁐪s>jLHbPf2HrP&̀I{Hºl&b`cr|:Ad MG3<SM-uDÞ[WCT\]UP-#f\$L-ɇ?+ȳ*Be̪#AN=[W[G#v]UnTu0ݯFqbifx ϟN{ģהB ϡ(Z2=rc[/rn{t)oB3K幣j;n[TI*@ہ>Lzz
ݤÙ;cbY^~qqכ/m1m\3j^CP2S4B-8L#Wi5)*bXp552,bX̰arZV0::V2xVOSVB5AeeeQ<	k'Ԕ[*jnvjy
ăݥZ7SJ7os^tv9bX9#hX_~˦cwU((5^r]#˨u%eU[,JEq0?mNV=VnKF4ezh@ktK|Q9W8+F("&=/U,⇒
U_-g)k\
hq<fI=Ғ7<SO_rGzZ,K3K	OWbև$VcX깸
5棖똄hF@BF$8q&lp#vHX _ɧ[{$n	
WZ0|UB"%HQ.E"[qkF<3"zt=xTD/ч"񼈍x"x\=^Ǔ\ bϊ؊'xΉ`rqȉ
GB	.^^K:uވ47cc.P7J:0U<1)=4ց^!fX؞«iSx,gq,^(X6*!l%j
hIck3WM'aovE4wt|$>TvG	Ӱ]ӰYbXv#Y+K`BM_GA@38?h]5)|r_V`s=BYF,Q<̃	pJ4s ou>"U}8V?I5y7om*Wm
?1HN^J4z])F;I)8ohm+.G/ůMӸox$^s9dp{u?'q}8gy]4f$> O:ɋ[D"Kc3mr{UK.wSgVQ$VeM1v3tϽH׆1laba}fh0]lAȰp.@RF?ݪ3PKM7    PK    A             .   org/bouncycastle/cert/ocsp/CertificateID.classWg{T~a9B]@;;6NC--UdQX,ug{
-(lJ
8Wc'LxxWwܳݟ|`~>1 6rDM/	R6~%4Cm9nVu4^Ԭj!vn¡-uEm9d_[NHMY
Q6T:ÌwiPSu*[
(,I˓ba
0rO+Y&t.m2laQ$.xcV
D.)?@
zQ~-ؤb{,%AYcj|^(y=t$6̜e&MrkkL;%SrHI]`?KZ{lYƳuɭfѡ2Po5$=~)fL5)m<(+9SճW㚦d$X
2dbyPvK̓Aɔ1t#׭|HĤ|vy-Xޮ0yxT2L"*'jRq͢zNa||.V>@'~r)}=8zٲe}kM,"Pq	9Ī3:NB&5tF쑠UtjԞdoEFQbHnĜn!i+&N5mJw:Sak`~T5xuSS
Ֆ%n*mHMEJ(mJ-d)Zh£G2y౒*ylXc-u<8y<籁C*wnLݮ0ׇ^*b,aTb-a6
7oj|5=yl[׼eI7kG7kW3n"];L@o$-2˧-Wsur[O11	Y
=]TVҪuT$+1,R]wyeuW#%VjWyv,TU~J߀`}g_T+*\lDN?o&'<Ǘ]1f;|ק+ҿ[UF1`ID;E+D,.MD,F@D#xDP,s4AB1
3ɠ-b2l: bTGtq4sc)2^N1t /b!L`1xq*5"$q]R.-ǽ.69p</`3mzp\l]bG<i/}.^O

0xV `mxA݈jx:6nJ[E1MC@
F,lI֠8HoFF0⩩\oDѷioEJjxxH 9D[ѝj-~u$~akLzrl,c6 MBt
|dI["-ŕ7N͆רQW|rF%-5M"ޚZWGNGͥ
b .fh75/E^M3'P_;nǘ[G\
s'vq>R{K:]y%F
^(OƱV`
:	!-ZSQ^)C'%,On~ֺفبl:x{T*ˍ
Py$x7
sq9WT3PKMo    PK    A             2   org/bouncycastle/cert/ocsp/CertificateStatus.class=
@M7PSl")ͺ
!+FXbg<
|żo}D7T2[Oa\g%rfu2V.xcJɄ
ӢĒ(<n&#,1DvI'k|0BFMΣ'PKUv      PK    A             .   org/bouncycastle/cert/ocsp/OCSPException.classuKK@5MGl"]K0w7P~:12%W?J=swb?Vo 1$'EUSфvm%nrq"Ħ,*dcK-0lrh	wnjs/g	&.|L	8nhlDi-#:MheZ〝?aǚQ~:Wc	u>syz7䡻3O.'PKP   y  PK    A             (   org/bouncycastle/cert/ocsp/OCSPReq.classWy|֒bcp AiH!۸_A%d-ł+V+c6iӴI6#A[	B{Ŵ}L.ֶ$ ff='.<z58 8ml5ttЦ
Tۙi5]v
~vwP?0s@DnÌG=URV\
GU
߲uƴb7QlM%{CRIURI+hqƎSZLW
=yjT'jh-iQ5XA溠 IT3SIJ&fO4ei})lwvӒDKzUGjS^M.=e)zTu{H;%F45`m^:gQKemLi+"*	HMV$?R0^%:yNeY̜k?0rwtT͂Io:1߯h5jRcC25#יK2=ǝ6;pG\I:vM^jQa]SvjLtBսPK
,:=q59	%>f	`ghW7rQRcT?d9p[ţҨ.pcהDXA;Kk>Mr
+$p	WذH~qSc@ozUWM%
~ʇ(hԔe4G[Sg&fKW4I5pAIsWqcr~l%*\L>ҟ ?,#UeDaJUD"ZD\-"Uĵ"):"vx"-b6":D)9"q.qn="z)sˢeBYEȥb<\~/\Q>i
lefDe^(PBqU6rƬNfk>Tn[ѦL(:@%g}7EeYeӁ],ڋT`f%CMWĖjlKmK37c=][a|o۵E<kwoMZsunY\m7{8M]eq{6:bGQ\rv9yN
(׻tK駣$[6楒UF?R2aXZQ%&&5elA@ƕ'c5Lj `AH˸
20axBMx%SF/F!/hd4̻W:'c^!aZ^xxexULV~&od&fz+y6&og[~	Ca&ǻ$uQ&<*6^݇1	
F	Q<a&00OKPI&Ǚ009dII	1|\~|FJ8I839-!O<n&e1	>1&g$$P5L>X
WQKCcXJ`>AQBF
{$f_Ac}c_jl:2~8?Kb2mxMijYŁ~~? $9h?oGYԜ,~;ȜG;ŗ|9'h+Yn/uqOByMD<L?y*41On[W@3\ k,oo?溒E^I##瑿<Lx4n~M~cHvl> 7<Ps?{|ѧl7ccE("TNtY!եΘ?
X^ջAJltΑy ~=)A8
-v	0$3v([9Dwf1?=Jaܹ~f7>^\|wRҕ4 
LcW^GM,>#d\Ȟ=/Z= J*p3χCݹ1o0Wy7J+T,0T)=ͧ/2i_h&??+pssNq]ƭ6"*"MsU]Kf yߛaiBB_G}gnPKw愁d    PK    A             =   org/bouncycastle/cert/ocsp/OCSPReqBuilder$RequestObject.classm/AE=#9MP^4Axy.Y;RߊD5!|(1t?3`DcSBncqWf*/In{±=ȕygӾ4JffsWܒqǽ4rNѶ-ӓn2˻1m{% ?i
J'.eJeHf'GS<wZfg|UaB;NQЮCSAHʰwu{`&<H6ƫ\p-؋?%5keY
mhb@C LC}o8~1=cBE/N^IFQ-cML1E:=4ڔ
H #`!/J~lX`J_,#/10D8#yE\Bq2L?Tj**~a'PKkJ    PK    A             /   org/bouncycastle/cert/ocsp/OCSPReqBuilder.classWi{U~mzTHpȒ&b[
JMcݦә83ﻀ]\HQ>?}sg6~Oz̹9s{f~8
2E^txڋ4&M>xW6_ju-n~|H7	=ŏeJ*bX7\O~5.[=9L UL+E.TJHHI>ƓXLǕ?n(j	jEi2eq4X_4,J(bE	M&tCL
N*P1("2iY#i+-<%@"MTMh6(2v@6irU-N.aUWv꤬%,iI%!'{Dz*-.F&*qZ２-8-55Ȑ7^#=tPMIg=uhߤ*L)q!JJWUeSo'O$#_`;(ӧZNT(/Dqq3)vU`YVׁCvMîmfarXB8/Pڛ[@EB]1o|
$][eu͢Emz	8p,Ik>Lmyn8TqJB)Qӯ!~t;ΣXԅY:13wxbE.x-@Ya* 1pÅ1\gXa
Z CC!Ͱa=CaFK)cHqmu7-Ѩ	B!Ge!DSK
Se=ԝj-T̅YM&K~*y
WEj~^PyZs^C۩/@l	X(XߨilJձ%:W+4cp>--5󞺅,uZ+1cpk-s3w;Z'=cTX#X}׍R0w/U
0vm;_ R벰x^e.IsM+ADsIX/׵HO*(
1	q7KX[|6~u;&$t".*LJX\$.T.rq).FEC"4a}xxFD?msģ"n;A</b'E/؍GD)#"F/b+pq_+p?"'+苩I/UҠF$OʦW9/mQK߱[Nj/}{6Wx}쑊Ec^,B
4.fZ0XoѠp
ǹ85}@۬p4XH,m",7VW"c,>ᡔZA0dP9
L
$	  C+A,06;uZ	oݙG<9|,>?îy8Î)XG<B9r|W6dٙ,2"|v!^^%q9Q7fy37|Ym{O	,vmݧBoa-bk7f)E(̜#1[(,>4`qa"#9@c>9$eC '~7:2laKu|q,Bhe!ps3-/,ߟ0K./*강ܗNE+"HPu!;ک2'9lC'lwF7DG( PKN    PK    A             )   org/bouncycastle/cert/ocsp/OCSPResp.classVwUۤR6P@$M
,jLȦ5N'4ddT
]pS<pџ8ɣ7I{n?/lj.Am.֣.&vM8b,<q/	=cNߨ?0<Þ`7$o3AnO08q&>'9!^xGCdt9)5)׌85M!OqEe5k		tVҲR)&qLf8	$e]ѳ&-d3j:K+U{
zTcuIoY.4)jnCo"Or6	C1Hrrt&G"8,/-{Ӳjdq;)en)W-/,Wi7VdRKIϥtiwTyUEEQ%qW.)RЊ=HV@Lҥ)5:IIzgd"8lzWyaּrxcob*o3ۦ!8IjbvXmoBgpiĤ|"!6Ɋ;Fޥ/Gs*cUyo|pMFS'Jj 	A=PjhPbn2]eͤ~d=Q-jvG00heΠ 
<6yc<pcwn?{8.@k,qW[}峣Es:dZ<RK7RK/jwIRl.B%hnPٷҔ[޻Ĵ6BddE^mS}uy/޹y6hj3| FST7)oH-4FM*MhZSOI|]
pwNًXE܇GD@u,h"V1g0!GEģ"01GTj<!^H7)2[X5эclḈ>$:G\	iCpg$V$g<gsC8 USē^)Gpc/˭r~i*cR&Z
dbRB'8Ni%yIdJU$U$/tQY S?-Lk+-w̾Y6e
ׄd~n`AfA?( 5+by*Wq`{<MP]kM߯ZsX-|{2EFb4ga0KQ?Zni8Q#tyw+p9/a<-6)L!~_Z.+2M]#!\NL]3ǋטi-)O1.<2O90]!㶘!}:Wvw
vm@c'yNZx=+JU
)2ÌPK|    PK    A             0   org/bouncycastle/cert/ocsp/OCSPRespBuilder.classTn@=CNkRe-e	SҺeaKRYN*"54ġ)|!!h<3{ po pO-2؃48_c`-WP\2SVu=3gU˺zQLUX(fzI	銹dp+k.\i:%=NQ۵%;Uؖ?M6˶sqʵYٳrl8'SSq<E˫,;˰+Nze5]e6
wVIټ۾wDoݼ#-)qYmv}cۍ6l-*
,oM=RˮiJloBյH;[PD:znkRG) &`>a9pǱ (A1C903%ʙy !NI\^gMd㺷jVz=kH7-IzkZ×XD#8G_~gp^1&0'!N#%!+0ܐ0K߄a(Mu/&qOҭY+~f."0D%.ucqC]|.~.~.&OadE%ǯи6fJm+^k&ka̫'L@6ӹ6bZPB/1<nC)pw>1Uzh[ɿ~Blk*Fy*ݥB18fx8䯤˓*Dj	PK'&    PK    A             *   org/bouncycastle/cert/ocsp/OCSPUtils.classTiSP=$%FDqE\TES!}hL:Ip_2C3(B1-:w޽鏟	Р	HXuMceOfj6_HgtRtӲzN@st3kWT%|o~`3d^]<;&ziF&]Q
`J)p,?p-X,y|r;aa[X!geW[<&O@Wi
,a&;)2j%-(4EA"˴xgfNTѬmafZY|L*`
dlY
,[<}ԔJtVKM*>itF3ñ
oLTBqaz[_RgCʗHJ^r޺1mue;Dh!bND%␈"8*iՎpںm_IiܩԢ9hoR|HURu>)D{-07.2녮*{Cה?Ǧ<Z'^e^/ovu+qN֨oRM'U3+C]e4aP!ш]2Z8E#r1,c؋2ZhdH$.HbbkNↄnK8z"q;z4&%A)%!>Lpⶀƴ[r/oR>E ~]lIkSsw_PDh
Ɋzeo֠a5<(c[HHaO2"ԮFRvCmeJ:kO	rn󳝝[pTJ툜ﭐSr\ǣ

_п)9

G/]rİ{QPKg}^  9  PK    A             $   org/bouncycastle/cert/ocsp/Req.classJ@mkӦ(DA/MB4!llJ}+PlB[gfa?^ `!W.pÃoǇ*3ޒ)CsW8MNWG݀ϐoXٴc&~k;fζMۦg7fԁAdBֽvm+rCڼ @QRfX9{*ê^ nM&>2deuwwk^1oXWURiDRAAifUd1ÐyWKds0*}=NqCxBqLFL_^4Q|\1"PH0B!OPK$зV    PK    A             )   org/bouncycastle/cert/ocsp/RespData.class[SPB
\D=@ AEnVX--2bHt56ug3
| _tOvM=ݓ_G?W
mP3132˧\4zryK--1Y&|)
+[4fM76aE-?y+\hrf)>mqG:2k</^.ZӳEbhZV7Ӛ
Cׅ9EK#qig.$"(
ZU
V OT<Co,%W^X,US/zUrx!KIhpYB+Z$Jh.*UzqJB#Ԭv{T&&U5^.P4r)}#+AM׳sj5F}yWO`,x\{	ղHF]!>T?;boOh'ǭnȑtKĜ̪G{b7Ήz4)Z+À
*o*P0#
$֡et⎌0we=a&/̤032n⁌[э)=5K'-xo]`l驆]&=tC{x
G+`
t9L7Dw9߫/.V:)н=,`\ݎ;У}$!?](I>@]~g;~Bg$pp`xG/wdǎ"2Hc?)һY:<qR?PK(    PK    A             '   org/bouncycastle/cert/ocsp/RespID.classVkSF=يR ᑤI## %@ژ7`SL8M,,9̣O2Ӵ_ޕ
83:ڽ{ݻϿ	Es
F9VQ
;:fj
|$585x"IѸkf|U*jdОAjvZq3iV`4ݵ5rS3g͡ɒ/)),K5CWi1VwC)nZM$:L5ÞMeKuK~5Yl(fVQ[&+ָahYňXG:&%65R?6t#4lƮD$U15M*Mb>ҺU23%WBV^*EdhɑTb,.5g%pu<Q4K-ee1#.D}[NTE8.dagbܴrTəqs8j|r6TWj	8OpVPl Wb%8֚$6MZJ^mJ-n[}uv6Z<.x%oC1
<x m
Ѩ4. FXtPݪH.C
#:.u^:_P&ݴq#VIQ!ABiu5E
7	k7X#P`~ee`m+t|H-sje>iaIlч"LŌ?"D]hAgpGi'bﳁxcpWD'EBvcHc
K>
DR*2Xc
@
,3x1'&Xw1ħ&9[ ̀wV8b?颒_a5 5B2p)#yЭ^1-+Cae5%xN9tWD`2:Ȩÿyg2U-#_UL_sHCe|QF26)08TP`	R GA(h,\/_Pj^d0dq'51|ѠH0W[x79zϵ֩
˴h/s{Baj)x=a
ǹtG~H#
>zUvPK8؎  H
  PK    A             .   org/bouncycastle/cert/ocsp/RevokedStatus.classS@ƿp/R% \
"Wؙ* 3BiC3J7r<ۆAlqJ:9ٜlo &U
p,r񵂪9sĂ	`FoyqI9.qZ~"ROfcfVAsDd5嶘}.U8ޞO]p42/a\'!h֕'RA%sm%:bbZv1OOQǮf
~*a~kp޸b|{<\{(v:in,g8x296mE-`6O|(=ք.3bU/Wq	3.UԫAEf-*ZUh*ҚUj/}C/1+V[}4]!ϖ;l6*-٘LPb`yX\.M
oѣe:*Q.C
_G
QFP1,s#500:16,
]x!	&ex(ô;/Ôn<oBߥ}%77=T
	b+PF?@d1Od41mk{(,(Ir
3<b/U
ϫ*}F>cϰ1jQ@Ԑ~@x9nb%%TM)r#E'ѱݤd1=ȝ"z2h PKỘ  !  PK    A             +   org/bouncycastle/cert/ocsp/SingleResp.class]sV_%e -% %-Sj0q PqPڟҫfHe;tW'D{fuѳ=?\BMB&[}>pdִLE<w嘶HHФnAwx]&'y4]mr@TY0=---CҋxemCw+Uo9vj4Eۗ>1tt
=՟ZCZy0\	vٛ;nChcMilh0-gǔC6Y#B?<9u9nc9Wp"|ei5oPiW~0]thkݲڒ&y8.]'d8)㔌2Fe'}	ҡwrFB:޷D2ْw6i+4>KŊ4t8`vM_kHDSo?ZPb!0~oBHѮ)_&:9ߋ
9O{-,^qXL]}_fJ_3njTվ\&,-ޛ挊3Ȫ@N0$1EIh*RldL)G8*ઊU񙊣lT8Ҹ溂0,nCU>g3Ϧ6_*8EcXP0"l))-Khޮ7~WߨsKi
џJFT]}_%G P_c^UiF^_ma+ q% Ȣ>u$AWv0J6[c_8{R#tm<jGOv4C+s`8Aibϱ3I_c!{@_b	jklzВaKa7ЛM
#	PKf  >	  PK    A             .   org/bouncycastle/cert/ocsp/UnknownStatus.class}
0߯hVE(.} =DTCݽwpý?%hUҮ	J\.&i
N˛3G屔ªk	Nߔg(F!!Aa^ȵIO@8 PK\ȡ      PK
      A             "   org/bouncycastle/cert/ocsp/jcajce/PK    A             ?   org/bouncycastle/cert/ocsp/jcajce/JcaBasicOCSPRespBuilder.classRJA&nb$F{!)H
xd',ά$Uz>@JID/R;0ï? IoJ_+x
T6LqAbwjX%@!aܤ0QÙ6L={@/zKp󌮪0!-1-Yv.tTJd1AnÁ+m."#CEp0=lMU\Gzxa܃aäs.KN,1.]zeK-ˈ%Vt_ߥeiT-c/=Z0))'{mH?,@H+Y1|dc
Kb\ky460mQn@m93ׅ.>vtylv1fONk}i<PKp0  U  PK    A             8   org/bouncycastle/cert/ocsp/jcajce/JcaCertificateID.classQ]K0=[;t~>`7p2PDckJ׌4|(QbVCrCsϹ9>VCKsD@Cvh"xOKӧ\hC4[ə͘+_A󁋮*&)ՋyDbrrAO9d(NTM)tdwqfo/6
6lmlXn;ǅoߨo\HCOufFiڐH"ދ1fZ#-?|r{hasPF4	z5̤oAFs,UPL3,8.JlPKw1    PK    A             1   org/bouncycastle/cert/ocsp/jcajce/JcaRespID.classKO1)[6.PJix)!HP"@	!q1&lv(X\x&Q4c{7
0s\v]:gȐQёZ*<R2]ոrOVӑ%onR
ǰu^c-[RDS\Dz ~Q""ŏZCI󘼢/|\Tᾌ~X:R5CSEAeЃiHѐJѡ-0hBB+J1LQ6	=]b/o|6/
CUdJls/]
`Rpd>$洍w6(>&j.3%jjǿ!1#'D4S4;|-m.Hjn2@jwvL&|PKV    PK
      A                org/bouncycastle/cert/path/PK    A             )   org/bouncycastle/cert/path/CertPath.classUOV.s!yc($I)ZXkV~TE&M2 xXԑvh4ҴkBF!TJ9~\/_0E-
j~#MbZ%ZmsSٯ/]έWvj3kx;X[[[rqv䜡˪լMɠ]LTA5	ct-NqD׀2RsͽpRKvne=˯dV;x-{!CoQ-Pi"Ua"PAD;ҵwQ	X啐5	Q
~Wȫ~ u8b	}g808C~>s>lvʛ]vČ9s4}`Fc4fg՝{,M
Sh4AIiU#OLB%f.jYwQwڹ'Bv'Ln[':t靓CJGZG2::1ut#c 9	ЅA\#8>A>N+q|8pIqcJqHo0ݍq>Xj^e?YYC[Ү =xW1J< ۓjT*_13rNlB1]3jxҠcdaD=G2L7Ģ5jO6Te7\7`g,ٯ5Ζ¶	WCQM%or٧13tHsl/h#Ն!b#2EE_}G3Q=$@v((vQH-<WRHKr0@G!-X[\iY!9-9j$iM7ǧi%dq-sؾ^@Bu_PKã~  	  PK    A             .   org/bouncycastle/cert/path/CertPathUtils.classJ@i6U.i.^(TTwWt!)Tt{tEG/Q(J70g9眏yx|04C0t/8HjuEJdM((r\	w<3:	?n,UNAi\s;5jfk}%i2-Rɪh0u͖}65tk4h%t؞lyR!3idahtt1(bBo>0CUIYqt׷xE
Lܭ
=N*( m`A?ezbx1}h.Cv/C5wCF	8{CPK5k  "  PK    A             3   org/bouncycastle/cert/path/CertPathValidation.classAA['PS*R$
B%ڽ`eݕkj
ĊD#
ՙIΗqJII⍜E;֞rFF.E,5'^aP ʚń_7VNyTdP<1 @V GX7&E]?eAfmt;d\ʟA B),GD*-OPK6   V  PK    A             :   org/bouncycastle/cert/path/CertPathValidationContext.class}RkOP=We)]DYWQGEɺ	,bBK{eKjK ?8X&3s朙'2^2n2*x|jR.8epRㄻ9II)b[
'	0-䇠W6)8`)σm{ukG8Ԟ|{G5A\涽Ρ#Mirٰ+tzOu{.^	)mB[L">|hbiঈ4d54k0Z?7"ÄQ^kQ}qZ	}
4ޢVQ_(^])Eb((KkJ 5W<ь;fBZОu_tdpKǰ2}`:4LmN3(21)f0	3|b2{4yHg%t)=	DӣQZ'(5M*c6-,VoP̦I+n~ǂug=A]'KQfN]'~/+=b*n)#<'Fk2J%K'<i
(lamiJi33Oc)o`]:l}4!YPXoe.K)9)mPKWLq    PK    A             <   org/bouncycastle/cert/path/CertPathValidationException.classmN@RElkwt0qqӸsa~(RLI$>e<hXt3;,{	3tfDW*b(ȥNK&+4UQbVuȕɕHTiRbgsY..lۆ	G½)3Na8
EY<Y(a죅np{pp3bpNCpZ,b
 Ec`f*$[4{|	@dۛu;oPK    PK    A             9   org/bouncycastle/cert/path/CertPathValidationResult.classU[SVd	ҚZHmqqp*1/BVR!yl9J@_@gꆶ<l.L~v<~"&ANgt!|&!Δ4.-]	==u_nٱۦጯ[=F1 ĬRewk6L;Vִ~b/y6I6l]=0
+9	1Z5WiHFfQBn:쉘Rht-V

۱ݽIs[uX9zʹˆB1qbD_B[p:}iSQ}jAdPXk{"֟\: NM­Zݡr._ >V/}l?]Ǣ(SpM
L(B
&)pfut#©3tSrn
3]eȷDn2Gxl􈭛{ts<}n5\;7Ϫ%/2*XW1,
ᦊKPU(U|!-WĂ4cXe=eX"G+qh8fcsx׸V髟L}uͨ<ЯEznIRiSCܼ@Lu*SoH>g7(jaOԴ?7v$4xĢIM<Y,7(Gp|)f1{4| z'}4,$6#qYV-mumvAAB0BWp;p/QMvO1C_Ioӡt(%aGh2e>.tyz7&wP¿#,tA(6`lc@211?Xe|'ӧgSĎܙxnW\pl?gF'PK.%    PK    A             @   org/bouncycastle/cert/path/CertPathValidationResultBuilder.classSRA= ɰ/,8*EYA@($`LdBO>UbDrw텐}{ǟ/ *`WAW,|&P1f/`p$$h:mǴ՘1
|N[ %fT`+o0|Z<. ќ$YgX:e[Cd{B'HT!:#xanԯkR	5H	=#PWu=F3:h!#KjMQ-5)E=KR&7Lȡ3KG֖e윙6ӴMdS%KP'^BF	M%HDNEG;x[1U8]
=k,tGn̺!'kQs4(\K?hRN[Rƕ`8~Hq_,pIf?CE9ffD+	ܐ!328ȨPZet+>d&Ϫ2.@zqaa]v
FfÔf8pN\>$t`ՒHif.Czb/絍e-)q/7Ή5pCxJ7[OccErJ2!I<}t1")Ҁǻ?%n&!Aߐ#{Xx}x6G;`:ybpmK6|Gg
h%ns
gk{Xasv
a !gxZ:~|.kOx]0.+F7\%,zPK\А  ,  PK
      A             '   org/bouncycastle/cert/path/validations/PK    A             G   org/bouncycastle/cert/path/validations/BasicConstraintsValidation.classU[SV22$@F% iZphqj.-	z%3O)ӧ$&̴}3G}h]p5F3՞o/ V0Fe.ujt۶cw
D2ya;ٵݜ5= "GD$1`ZErɒŌ(teaY±rҚ+lQм`c,"qwA}An̻G!АIdz^&)&_fyWݕƖ
hglޕi+ȹ0mb{%[ wDeKxN8pR ߰-*.7o'8#<?'sF3+#G0=}$6]5=WUO4<hF}>u2Aϻ9VٝT27',R
'(lm*G޹ry۹=ʶ%M~c*<*$Qp
KaZpMC
hxWC4D4tiУ:&s5` u\Ғw~%쯈Mi(Z_󶓝DoǸdOM;aW<1vW-mAnb#ǀ=ȞaR:{jUvg߬ ?ކ*
xLxXhP
\ADFbs@+\´6pE3>0Є1zaE]Dy1|c )HXd#e\tbA'ytu}J݄kы_Es;.r7A?#Ԣ^
YWv)KYZi]!]gO_Cǚ>GTc$^a)D	u4K0!]kU}_/KrASZ=[)=b	jU6b0B)]=v!jS[(	:|R&y^QU
cF45jB=t"ӻ5d)؊)#GCt7NPҡ/1+ĩӔ8U%
|ĚYK3́@z5ȃ PKG1    PK    A             <   org/bouncycastle/cert/path/validations/CRLValidation$1.classS]kA=4f]۵Zj4n6BJŗEjPDa&[3)䃂VA|GwҢ`,;ws?fe,2CA2i*nqPIey!fM(]#U?z+RC=nC3/v>T雔k#EĵZq'NC0lvg,z 2qJGDpZkaqh2=Z̩dt>qÁyUz}})8~@36EX	+Ɏqgm68ɕfd)(Q#0桂9U\P5Ӹ^C7\wq7]̠"n1L$y&v3_f5DHo2hPPt`oӻ+p$ knf_>9 
P|!Cy7"R|t6	6B PK1    PK    A             :   org/bouncycastle/cert/path/validations/CRLValidation.classU]SU~6]hV)#			
@E%F%i%Zds[6
[o3mdF{gJJ~_~ = _  .IPM߱*fABw(ɇzJ$7	`K䶫s=N,iwD"A4V.s˧YC1؆C"w3v9-iQcq(9nVJynhJ1\	.s@t'U*>fE؁l
f+MUεuVэp<Y*nēaZL	:}gzAoZv1Fis\5J>`1Dkv@5kmce>MX-[	:xF\@?%8q^I0BFmpjijBӺ;~g{L;NYV2eȸ"㪌eɸ&㺌7d)zKDDBt?!HފkfFPxAjQג&pU+$:Ӧˋ&H)#.VRx}2hK%K"6^WPkZTr+fu~U9..,5l'טo.kۆH}Xdc9iQwSOQ6ڔfTL"*dUѣxKXT1[*Vы!x
{%İ&DR>T0]w
qOA)!DV`^#!>E)!>ENZzNg>=j44/Q_e^7ũ
r;zE?>]lIrZ>>C.}'t>GC<69F1O>]Ul4WŃD*8£$,F}RH4	^U|Y'+J. |/*cdٿ(Ky:`1/%Q^
,בf>G,k=@j?H^$5PKy!    PK    A             J   org/bouncycastle/cert/path/validations/CertificatePoliciesValidation.classUmSU~$,,-R
IpRjRߺބn.5v/gh`tS?)M$ٙsyy9Ͻ_0	[B(:z 7$iv"Moll~r,gu\fǳ\j'pw\=T-W\RݝZ'A~IsN;[!Ē^(XN^BW|1jE/z\]rz*Աj g
w]C3U
c)QUaҞ+L隭;y[m+v|E	#n1mAƞ{-4srsqNuD@sD_ib2~"E_RV2t_,=7.<Bc43y|j%biTe!
[>xZh'n=Q=߲I/X(<ACvTAq^exCƈK2FP_JDqF@tlE
5J9k꛶L-zMc0%}z7ߠKwxmIծGNE_~7gZrX_|l̵D<~rѭ_Ϻ
*XYUqE?$ѦB*eE3TqūS*^5xOE/fTn߉8nDX|bVA*üR,>U(oIAXd`wXU#
,HX;X9פoRۼCz2aң6Bhc
/	t_GREV?Ym;cCPhQyjJ"oqctB`{(.T]+5_%<l8HJPK]*v7/ړݏ{eXa<wl=XgCP
l`g;(C?/`9elpS`Ar:2xH&&6+\>/㳩H|J4GhףY{~Aba
OЬ]ӊBzy(l>= uz5Y
tj8C3R3I4%jqJC/@r)B֙PKpgL  	  PK    A             Q   org/bouncycastle/cert/path/validations/CertificatePoliciesValidationBuilder.classRMo@}41qMMmPpފDšm%ȵȿ	(ĬT=bi{3;͟׿a(:~7M-9)ToXȰͰ.ӓht2QWޒo}
J5>42zC<x[=(z4QGuqZ 
FOU(@$sȻZu~jCJQe/2JdH^QTOH$v*Լ!mSS1X6G_DW}fC>^{l`Y(hfDCDL	;&vi;@.UZ"
$y]?ff`:KedKrz~aoƯ3~m>?rNh޾D	ʷrx>Ƌ PK'<    PK    A             ?   org/bouncycastle/cert/path/validations/KeyUsageValidation.classTmOA~
WNZ 	&(trPП"BD1RJBIgvgyfv~0:ܿT+ZI۱osOOsOkv\W:m-
=ǽ-[<vƱ@>wn;zb<#*-e͘Vď\qsJf!EnIi]oIJ:.EaMzk0wL#k:Of/CeUwIӦ/0}g7H.͕EAɚׄJ?f-1+sX7$-̬M8_
pA0z)n_SrKs7/;]r
)hUЦຂv7t0+vzqaf-"j&Z(<	9F2qGSJmagr,'Pv<gI)Z1xUVb*T
-AA&4\AJqGC=jhDXCuƽ:!J1Bǈ^H1"*'\^ZCLE.0U}jhMHNӮtm$p'?y^[<o*jΏ;DN$
EǃRx&?ab!q }r3;㯑{JQ$Q1=?qO5i
 #-PD]X'"ET&T$FRPK{VS%    PK    A             G   org/bouncycastle/cert/path/validations/ParentCertIssuedValidation.classVmSV~+[VV
VQ+PTZ!{Y"K$ZNK;3e~CRdYH3{ν>syn?7 /jTWc{5jTCP8*0
v	C\5'+IK8QrӚOF3-LWB[)1Rfm',;Ɏ
=:%梆Yt:t"ZN.D%\]ms¦=ͫWWsZH٘UZ&#̤m^p	utiBaIaKVf<LVK;Ԕp)6i	iǧ'B8ZJHɰfk/d
Nu2뚘3',p鴄3(BZNKVo.2aiL%V¯F\0S=|JNeVtq"9fk{d6%L^$ϞiiI$1Hp*u>QdiDmLD'%x%(%j:WLb]3;4LQ^bgDesE'1*q5Y
15ײCA/_;b&Ľj9GÕGeOGLU7ǧ΂Se2eDeqT1/8.ㄌ2$;$H.\I>6l?伷h%aOCc^$eS

[r],aۘ6\#i@"<~Cutywզs/cWAf]#Vp .X D
U^kph+FKJe"!OQn/Ѝ6aF@s6mSxIE3.H[3Q!J.؃UYȸb/^Q,Ucܫ*v㚊},Яb?cPs*j1£*v`t;,XRЂ
Z6_"ЗbR/a1:i8y,&YUЉ;,Hca(5 zDz$"Kv-s#
	D߯\<OS<Mu$ptxl+H+E'&ܠH(jt{gX8Ȫ){%tI)g<> ݇a<-}>E|8Dc|]<>]Vl	mcEלW5/kַ+ud=FxO0-J yp?ه8+[[1, 3Ckf;JfOPFz"(	QQS_d=2.ޑq-V:B/4nW|J~92H^9r*k*/I4ۉ[n'eJɲ$g$:Zѿ"wt
Ě(ц5`my5tPKb`  U
  PK    A             <   org/bouncycastle/cert/path/validations/ValidationUtils.classJ1Ozv^U7u
*HM7
E"ҙM3d7\ >	*|| [Y%(HS>aR\+1kF<P.6	#6aTh@/x<8ǀ)-9e*ڧ6r+c
-/Y,ôC:aRL8RWZHqPtPrT϶
_ksϊ6{ȀxbCey]aمXMW ׊Cm,4=;MCK|kV(`ӸjUOa:	PK7,    PK
      A                org/bouncycastle/cert/selector/PK    A             K   org/bouncycastle/cert/selector/MSOutlookKeyIdCalculator$GeneralDigest.classRKOQnLDD-jO$D(8Cf\pc1am"ppcܸ2zmh\89|~n	02g|Men9Q	Jw&n\)]EO
DneVWCU*nH\*,HpO|(stsVz psaWmsrhsg+yTX.HǮ8L*_:U@߳U^H5).F[3e_׭eHGnza G{qLԟ/DibZMH؍N6݈	D&R3цa~6I1D$dsMaڿITsPt*)rѥ P=	|]伣&؋8Z!pecZF{ڇ<h|Guud_񉡯:@]5G6NjOmТӰ虷p~xÿ5>sߊޥt
Y.n<'1
'eO,Y"[U%<Ew3tZٞ5FĪQ_/_F<ߣ'ǿ|hۦ었_3[i͢F_Y5laTt6J+m%¸_}(
V`$S|CŚo'"ߩ}_ݱ^&PK[DQ    PK    A             H   org/bouncycastle/cert/selector/MSOutlookKeyIdCalculator$SHA1Digest.classV]lU>wgvgltBPv*]JaY
2[
;]V;%Al>'_IEAV!$/Q4sfX&wΙsΝ] ;os+/=cW3W?gǧAhak.bh4BM6XX{ЛD*8=is|'t%ǀt]8q"qDs񂥛Hą&qļ5v\4_2p}|u7JN
{~+W-b>vޞWz1X(:aY.Ɔө)ǴCU-ק)S8sǀaEݬnA`źԈL936g/2_.YT5m
0iXykO6hT˩IO{h@C4'֯1SS,Xah-al"LLE 0D v aA
`?Jp Ap0(}nOp`  @ѹ賭[)ݜ5>S/:ק,~yL?o
X0s{Qnf6{K.7ny,xb6qШނQU@Jƾ"_B'Ŧ4zÅr\Q:f}LnX^W=MMQR8>s#	4m[`pN[:;I@l:ņVqۻs)ͥ8`hSJaԇ'q!g쐅LŠ'{0c]{	(C{	V@S#
_HI5U`XE ,c_,:C;{gG_&!I.f8`=%yFy<cq*ȋ*@_kń$ R Z1뜩z
!ו,^;A!RJy*l\\

xK$JצUYE֙L/[˲(QKde56/![Bv̻d\F^݃Z[Q鸌,+U6#B
':/AL
W'd+H$S랒t-{kk']C_;OԊ)IײJv5t೧v_Wuu__uMzMEޠ!%C"z([?x5RD
^$x xdWg!3>9	.8	uoB_PK[9  F  PK    A             =   org/bouncycastle/cert/selector/MSOutlookKeyIdCalculator.classRn@=ۦ)mBoJTB\D I0>mrkّ/x-/U?fMeY=3_}>p"8CV7SP
rCwGdtfmى'b\c'/<#-בQl$FX+
s۷$va.Ѯc#c$}`(!"߼}ϰ"ywe&{ d1re(2tΚzxWB2S[9%YseZw8t}A]
dώ8Q@V
:t\԰U
Kʬ*sE5\Iz"dD{o &ȓX2} 5ieG)%1KWwopߜb8e6폘#|lg'SjS|:UkQdq,qT9.Ʊ'BeRBJ9U2~ PK
  =  PK    A             K   org/bouncycastle/cert/selector/X509AttributeCertificateHolderSelector.classVsUms9v( 4M
%@@-mA[fIl(^~+/3	 3G g|u6w9۳oW\} wpxwhfP2'32iSW#r芜޼i[dLN%Ts&z4SxTՔ) P2׎ile](zP*IÔ5#MROfd[jBUi6MHkIC{z\M	#yHe0p
ȩ,2$Ũd}$39^pϷ'L.w)hE͈< 4i?*\ǸNމ2iZ:~:W|qe#u5!뽩DfR5:eZEhwRMDOKluH)vTjE*D%pWږpۣjll]Ev	W4%SCk	+`SB̊8*B
4q9D[Yj簴LUͻ	X[較.dл,/n9o/cxaz601ld23:3D9q{Ѱdh*%#\J#]6DPY]eo
.t(pU}hCKj\oւ{yJ6l.650d\y|hQυO;9ۗٸ,GqZr{+6xa[<KxRNY~G
/q)_GԂq~d%l.<.>Ѝ`P'OHj$0,A
#I	xJVs`L=xZBh&<#a%KhGyg}ه~<y/px8C\EĠr)vRdD<
CRNpJ.LxGrCC)/a4O^?jʉayj_XGn[ `7DMTHF5Rk](?|AVԐ]ˡ,΅Y̆:Y
<YY	X3?ч-,5n%f;~EEx\;~Ap'C9oh2=f^)ꏸû9WPa>aAw:>5V<cgGᓑ9љÅkx;;bbEqE(x;V᝘bG6޼ׯZz/wA.#v7S3%XԍoG/G:[hekiii^}7C?R1m X.a`/g!b(ϫnba
m7w7*>긒gT=i8SoN-s̈́UvEb HwCst;8gfds+;-ی PK  t  PK    A             R   org/bouncycastle/cert/selector/X509AttributeCertificateHolderSelectorBuilder.classV[SFd[
`l
iIhR L
H/A#"KTZ̔:43}CHޙ^܄L<svs?

%$G|˻%M)nHknSړYVs!\3WƜ
	usk,JE6\D8؞l4[7yyGV(Xy%{Aj7
{wj:jfu~_7}삺5tC%aZcYa0mߢCI8_5og͠=5,SQg
[PsN',C<{\ݟROp#aN䪞s\u"fBx_Z$d_IY"sxkKO=CwP#Td^jLPs4^ȉ>jTQgD.:yZ]YF2dHxM2^1(
ox"~QgBFpW

}Bl}4фd19
$KK}ɑl+Bp4@2C*Fj֛ldDeO'O'%Lx?3TsTͱ:+yo֢/@7yNEk"ϗkފr
'Y+xW$1|S
zpMA+肤Т<VDaZA>MQ
:aR&,e+,VY|Fe|/Yl0bw1r&K&qcŝ8&I_9'OXcJi:_x>,"|^_!&&|Mu
$dfh0*~ƶ=Vn?$Zz>TF.>
P7S&u+3v0{D("(\X~}
+p#~bol`ؕOG؋Nk7^	bTH9ynLzМ
9/6Ϲݘ3-xIGI
t$xP@/{	+=1J#j hcv71!c/֝'ynӘwzlљtzܣ'G3e<xB0>Q̦?PK;$BA  
  PK    A             B   org/bouncycastle/cert/selector/X509CertificateHolderSelector.classVkSe~@KZ[)ЅBrm,7
b/Vl
 _
/tlDġ}`IDz]P;B$q
B;$ɚY的*ת9}5\CuZ"MN42u`K.e	";nY˔PGl´"Ĝmz"}F])Jg5GwU=ԜT%e	z.3J
X⦖uM'=sSFVchQ9K]tץ	+d4.TP͌2KhD+g3	3&$᜕()55MCWTWƒ3خܤ˚	?N[Bt[^Sn)|Y԰R213<AFai}m)Y1,7Xd9/E]'k(cFs_}`/C-v
Ѹmߍjp,M7qZ8+㜌7dt8/Kƛ2%NU	
[p]eFMH%&qK且S{	G5lMfӟ45+Χ" ZyG+VB+%CXbm8Pٵ+b\{vJ*D(MyQaAKqo*z4_.u87U" Y;$ZT	 A0dx[N@3Fh¸@l@&@=cYB4f	aSL̆ы,qsa(F>d
wer/&2¸c&3Qø$y&:tT`7#l/$ ;W(:H_j׌ iڨ$ŶO#n "!ED'yR4h))=/S:2?4➺K%N!힜/ aG;8gOX)
2y<|2ұxLTF.ڥFbi[.Qxh~@u`39@:-!ŠQkVu8A],Gv"Zoyk~m?dYM:V)h;<BugZs?OlLK4ynwma\	=
h`ŏ$̕J-UM)r[R3d9EvJKX9PKI  
  PK
      A             &   org/bouncycastle/cert/selector/jcajce/PK    A             @   org/bouncycastle/cert/selector/jcajce/JcaSelectorConverter.classTmS@~PD ZLQQiQiU[gI~)7?ĽJUd>r~3DHfC<31xNbmMzT%(c	%}wY5JKC^gI}
ú
aqCɐ UE~&G꒤X}ZS_ZOFyYz:Zfy%ה{Ñm]W-v}~!ДgOUSźop:
,:vSHJ8jô^+F6gmX"T4EMZu*s3Ek[fulURfa+K?+X>%{G}N;PĒ+O[MBډKs$8q8qi^3}?gMߥ1rlO$2O|t)C)4d*`޿ [޸v#$%qGЭh⸔D@Fǒ
b 8ICMa@W5d50p[qnN_=)azψt'$|H$ĕM?F=T%l{[_!Y\\.J|Ew*R\|#&|lcpqC=;l"%Jݗ}#Qtp\0yzci PK(3  q  PK    A             H   org/bouncycastle/cert/selector/jcajce/JcaX509CertSelectorConverter.classT[SF=($"
5E
mqhژ@q)S&OBb
W"2ay?xFg|_ |ցvktMC}^ѐWԶ0|M#΅b/4tBΉHք/Ftb'M50,88>Wd{Co*&"'bZ~Mwvuۓ>\{%$S&#/p+ו̲]j Dܳe4sء0r0	=6)GR=Y(kbTReM=mʢƍhoS[.b
8ͥ[r8TeD4tqwC'Mዢq좗)6ZƸ`0\ep7n14\kߧuB_;LE#t$I9ls&;Hjhu8K-:ìnF璭#z[4uK;s
n#t+( oං;
0aOǘ4)0`@@0Љ/uct}Va|`F:F0k7*xcu{jїNCWMr%ڇ~CShwVr*
qP΍ᮙOb%CU-łOQ5żgo&i&R<<´;xz|[fnm0]X:V)%:0`1|ϨY@_B1(Ӧjg?gu?PK.    PK    A             L   org/bouncycastle/cert/selector/jcajce/JcaX509CertificateHolderSelector.classTkS@=+KMZ"Ug0i55L2u8mY=7 H24qy˱:94Ύp6Ԭ_9f>#2]rǳ֒*Gcjy^A禧Oƺcp-n
V
0bO7<a\3Lrge4A'>Kngc3z|1L0Kj2#+͌U|"2\;_[qRT8)9Xʞ]={n*eXx9SoL~QwG9QPMA
PpSA7jɍ@(Z͝Q%-ί:ũq+t|-QMgvI,
)@"KZAzK\c3.YBT;VxKWDӞkamna@C#U04jh:dkh.CDC&[pS*z1#CfU၊ۘVqOTS᱊x$C	2|n~yǷ?-0D?2G#_lTh#E<?2
C:˯%DPu,O QL^bl:&Rg4"/QPk@j'Hcrgf?W2PK!J    PK
      A                org/bouncycastle/cmc/PK    A             '   org/bouncycastle/cmc/CMCException.classuN@NCJ. ]CDc
rC΅	"6&ٝfX8Bp'fhe_2wRb+a*30Qɹ+P7Jdgg88=pqU{9+?ƹ
)C[[tVtGehfRc@C@?`_<7@BszGl3Ptpwh=~7!@:ݧ'PK_   }  PK    A             ,   org/bouncycastle/cmc/SimplePKIResponse.classUoSE~R.-hO(m$m-BJ%6$Xul.stFFf/ȥ:cfg}o 7ūQQ`Hf[YVpYӡ۱"
XƝ=al	\ps/yWl|娳r$9Y&#4)e3##\8SrI+Ǟ2v	u
sf:AwEz;PAxS^ە"\eUy1QdM(@^;p	apwxe̾V<	_xuKixǔ][Ew̥܆gWma?L]gYUl{ Lef,]j7d;%]bWqܣ*H:iLk'zuaWVC݊l|.$?nP`c*U\RqYś*R		*Rp5SG"xEaJCի[QH}gND,گDgㅗvLh1}
4𻐭'z+
!k|tktnEZBDPyaHE:^MץmWQ] hXu`1X``EC
ܗf]C|"͆F;|fqO4IfM+%OF%G_`wyVے5$']ʨc5D~SH@f0RxtfnQ/
t;"J*[zʪJ2#?F8=~,>M|w|MAz>N5:6߰~
C
|5-Jv?cXrG#M|ن_mlPbY04PqC")*̉KS^R^L&!hZ= >~LP߅3;?PK  j  PK
      A                org/bouncycastle/cms/PK    A             1   org/bouncycastle/cms/AuthAttributesProvider.classe1@Dvz;ņj{&tvdC,<2bib^2ɛÒ&酰X W-by5jhTkJT[eeo^>]?%Qa?.S:?f9~ĘjJ,!;} PK۱ٝ      PK    A             +   org/bouncycastle/cms/CMSAbsentContent.classRJ@=[mcc[k[ R}(+oDjRRQ ?JMc+j&sټCO6wu\G1\r"dsp%C9f,_1_kn8Q,Z&eUVy),*+5\⾬
a]Fdmj\83}'ZkL'޷y:qNYQoze`BHAЧ!AЯ!!ɰqA'[?O0,lKdKR}$톟;O	SLCcs:Ҙ)Z 
MVK!$M1ЯJѻB ȼ`Q1FqzKg,~qb9a!6IR),*ה#D0HijLu,tC,b'PKw8ӗ  Y  PK    A             '   org/bouncycastle/cms/CMSAlgorithm.class|G,J'6d1X%m[XV@;W{zfGŲ|g7oFYO2ƪ{b]"
b9˕sNWYI<ͩXow+J6W׹҆AFaD6RøkR 10R$"k"N>YqzFuK.Nd%gU:ܭ?WE[4שּׁ&fVc>뫴dhSx5jѻJ|x2v235̚jKfJ|"Q館rVh
'9KCf͋a}V˘Y*&L$L$%&|چJQeofokټvݠTqZ&2TTĤ`m\Ϊ%}c[Gk[{
SMU+%\bK6m3r9r>]F5{=j|^S"吶v[k3i5zN1^:+'	kc-ˑ"r/LǬגAtS3#.-4tٹ݌WK4Lv\HWhMSD7x4&٭;{43mGxV׌T,HK"*5,3;{MƣW5)xa2^dzt蒇O47#:YAoNOW`S8N2v	lPڱV/V:GbQ_MϬiFTshGD\yAfeuSa*.78T'=N5,LŃGUA&_WqڨWia*4j"a:
Iq\>wnj4++gJvKwh^#X@gdj2ɬxΡV#䇔qFzBקzMaUShue"0Eu9".4ͬ-ciF$-,\53đ5liM[O(J497^9H܈oַ鎰rvn6q
vzm7A4cHsƥ`}4 *Zq-ƺѭ@?!aáoqZk2bg/4CzRE%K{BhlGޥ7d#	qGK#Ka!=:C4ڰ~	eE.iHP)?I3/7nxlX:ۋ%9wEcM{PPe!r;69pb>7hT^<>E
E#6v]bce6v]acWU6v]ccu6v`c7MbM#?`?Lp",.+߻pM}|6= 9
@0
B(Jqx`0L S}it`?`?0(f9\`0(ʁB`p p p@P
 KZX
,+7 ^`
4@
kvt  `#p(pp8pp$G:	 ` .  
[`q`+

 ' ''' g ggg ;[[ۀlO>({b;i0L]T	Tݴ0it`?`?0(f9\`0(ʁ`	PKevv/ ,@\vv&, *`
 ;E6 y@>P EJxqZAn; ^ ^^^^^^^ > >>>>>>> ~s/_~{?w?~# ^ac;1NMylўh7n1q
M]+T\R+]tJJQHiұJW:QdJ=JSjSDiNP:I^5JS:CC|+PZtRrJ]J(RlsUP"(]tR҃RZA˔.QZNJW(=Hi&*ש}NeD߉N{]relg(E9m{8Ks?yFit4p:L+8%͵int4Wrҥ&int4WqzN]©Ob).]ڥyi>t4p:R9S4rҤSP9indJs'i4qZ'+%NIKrit4r:]i4q:G8! yӹ<Lit4/p:O'8%nNJ"'4q:Y=NaN-$zS =i =1>=Ne9mN=|),gzӉҼɩCW9*kNuNI6y%Ҽ)"|Xi}
ltv&/PK7	    PK    A             ?   org/bouncycastle/cms/CMSAttributeTableGenerationException.classuAK@߶iQJ[\HE ^bktt#ɦ(qb)f|-~|~8>C,:g`x< y'g"/D2&iI.e37gw3P*\	cq%H*T\::neahd`m1m$Ñ=ܧjMJ8[[&jh`贠c
{ibЯ2*rѩ&+Un}֨7^˰S!:NwtLڥWDK01~PK    PK    A             5   org/bouncycastle/cms/CMSAttributeTableGenerator.classN@ Ucưjh&\&t4%eڴS#G XcX:3o pmhCg<?ꙶCr&z7[`bfY@sw7=
ɅtSDygj\xI>5ǥ.e컩	P-F3LQ甭o0lh"yuC݀1~(Wƣo0&PM|OP|9^

EJ*TT\jjm'JMhu^n{
tCH*
R|2BN#`9nw2|c yDhrJmPKk  w  PK    A             1   org/bouncycastle/cms/CMSAuthEnvelopedData$1.classU[WF`Q%iIJmJnB))MȋQj$iM[M_@NsNٕLR죽|hfv?zz2=gd9%LY	R7]ϕV*/1r^@-;ÉW$	.dPjRۖ,HTEߓ;M"$({_5h4ŰS-ٶ"BHbёB<,jt}7J\r|ۮoHQ󚝡XMEenK[ 8
¡A^[P6C/ow:*^8zg+gm#-.TU޶hMQr0yǡibI_o{.մPb?eԵ;lIaP	5NJnxۼ1uNo+8o\2w02ߩ3+QRK-G3}CX;@;Lg:ݯQ=MNh[ٕኀdO&s^>Ku$̕ *q UP`B$̟Wzps슅^|`*nX$,[S~l!,c n*^(I|m"41L\üXPӸL
};taY~H_rӧܿHՙx
t|KH=.faJ8Lt!2 *	z<gsV	EsTsSOýP?AO5EK i9?L3'7G.nň>mdcYrc(c FK7hL"qR:8~ >"w
J4(E(AdX3War5}qBO`$s!
d)ƥX?TiCJ=n V&lPKz    PK    A             /   org/bouncycastle/cms/CMSAuthEnvelopedData.classVWE-Z[JR$6P[+VS6Ұn6*߯~sLsGnBBn(9'Ν3{gv?/*kγY͚;nPLv^6j=m+jj8>%dJ5UOaG5غiDmhJ5nTӰsfSil,Ж3ik!akͱys42aƴQ@E.CꍐC%d(*-cDۖ>
.KO]wشg-3ʜPdlh^՜4:qŘ
Mh*rThLꂪ$RFo(#1Lke;j[AdY)[Li]eN^洸b[$ƹg#`TO_([޺F/lGN/tyQ'C'^+Oŕ;flhPز밻9l2KJҔL4[+<wl+)K^EvGD<"CQ%[1";]QDx J=H!>=oC
_F"ŇSSfR.SHe.¶fssĿ
9֛,ǭz_
e]
|Ov}
l"rKмoNeJ<27\˪ܱpmK1.zF~hsgNִ
uT'X!T˨'XcHe32zpQTBF=$	؅a{1"2hcq!De4ⲌV\ᾫ2񂌇2{_2j-5
I*
^SNᦄǡK8
K0X,,nHc ,1/a poJ8$<x]y#}d?-GCJ2Y戒pGӰ'!`"i?Z]v4m)>C%?t`:YW9CH*>#no=9=yov+>_ǧ#|K>%qU*/Ҹ$Mc>NPqi,([ǽ42)?l:Q)⌈>ULv7.d{IxUgmUDԔtgý/n\=gr/
z'X{yfkeٸ9:5]\z
wV2l(ُ5P^sj/7fDcPKe>    PK    A             8   org/bouncycastle/cms/CMSAuthEnvelopedDataGenerator.classWwUMI鰕DA&**)Ŷ!HgBR/+r<M1wM4$xl;>?7 {S3%OJpg%}gҳ0
u[\An%Y><9zZVZzszJUKZ]JHZxY5М(CɄ6̬͕Ѹnr㜡K8:x$:s	Z:z<l9!Q=Wqg2j[K,Oe$O*8fJ*Ⱦm95`XC鴚{ˆEx䲦a6.rj&2pHƅO~+L[YSij'1cWI]Y;>}@VlGo|$21q͔.,f3PmEG&}$l2u_p,5JFTamj1
[4V;mP
ʕ7DoۆR]"R	P) |ҖF*bEݢZU2Z>
1hD5Xj=:L&%Jΰp[1< Cvfa#>?C'CMY
P jdu"wŏ ,קDdʎ/4}dGgm5jzzI=ykt1kpcN ՃVm@]C5mæri۱44zp#Lgm}M+8q & SX6cA2e(d)
Hsu)Jz70akm(O]:^tӫq1bY=Ȃmd[&Sg7KrZ'bTO*hG4#`@7Ȃl*Ap)؍1qLA n+X
<%
bRAl	NCLfVЃ3
xVHkP[- ӂhez129{o/de%cq /89O1L^1"Ee%A.VVAB+l#IjԔݝN@$I{ZDWwglDI,C6,cZuwMzn|#aB2zn&%37o`WS@$V^V4w
m'~zC\d]^
6k<R-\^-`'^wC1/=oKaP.`8&g1M#{
;[f8p1FIf^ܡUKS1wI ~ .:$BՋaLuvuM;KPPK/4o  U  PK    A             7   org/bouncycastle/cms/CMSAuthEnvelopedDataParser$1.classUmWG~BRDk[h(.i}Ѷ.IQ"X{N4a=lSC=XQ=/%Ӝ3wv>}{g?`1VcCR}ʐ<YM>n{S_18w*|GDQyyyE]/?	e͌0m+vJ6TBG{}le2J6:vazGz$\qs.j~tD_JeZz&=k+Hg#YjI'+q`#4ht:~%cO(8pg#v=W]8ġc?)˷|: ]Bv@ye!ߋѫՏ^~^m{=/'^/%8g`;f
70gZu7nM͉X?J|s=sXNvf:_{I3Wq/Tk4цow֓kv)ugFKgY9=op~'{/FOyϧvmwrTȣj=L\5㺉10S5Q@$
&&',S->s-(bX".b2nQ
zs'{E"l<-KG_R£tP"$T$WP 4>D#:MTҙ3ϔ4Wh&F	yv}>֮UC!]'GJ1=>$͌oh7d1":	fF0
'hg)b23qZ5GrXNug	iyi#a;FWjT}1UO%q/FN2G5M]-"iwPKiBf  3  PK    A             F   org/bouncycastle/cms/CMSAuthEnvelopedDataParser$LocalMacProvider.classUmSW~n,,7jn"B!I[@XRlŰٽA)C?CRg]C!3MfϹ﻿0=]Vb!n%e-,Hn0Ĵ#pbffX;)1z2B	^*T nC$}J $GdrJ7aEQRi\p~G	|#=ѣ|MUk(p]^wC]:M?(E9/Eکl^jn솶-֔|(0qSjc!nWeI.P)m^-ߡDwD0_=CL
QN-Rt[.f*p=qȞjޠ0DACGCRsihN5.dಁqW\51Ý\ǀ/)j -}"FDj4.D/h|4Ɣ^odˀbZg3tIr6Z; K'_Ц[n:/yy'go9`pcr\G7b#@ 99u|1K^2u7$e2&>ò	i	`"oMw&&ɏ4Y4|OEna>+'tE
pj&u5EF12ݛtƉttc8wJBC9
wȌ/$~x[z?iZ=8œ04Lc$mتTŨ.2-*?7UZ]惣
~n'j"zPKAP  T  PK    A             5   org/bouncycastle/cms/CMSAuthEnvelopedDataParser.classWy|r$	$A$Di-le`3vgSm]z߭=%J/h}HA{]knvٙI{7S? `XTJʂ;;ʃ;;y7nn;]ajkj$%kg-E+S5cT`2tfbsTکi@evt8=FjuǗĘjqcȌ'4:D$7hhF#%]4j[F
mѫiFtqq5iHD(i'tsϘ@5/ɭmj,ouZIZ&u$Ffi
Z,{lhWA\l.[=9\dc=ѷvSs>_b.صYUk$MՈpHiLԈͧj}-S3̄/
2[
.>+s tSpI[V#/.ګNa=<hjzOl.ɲ{d/;Sh8{`01-tIZ(:9U,QcD|B(ըP<
SF`DM1-&p;tp} yy(IFiST
ZJYj@Eƒ\xUrʫjUՄk/N`hZ2v9..
W4_U}~ڄ
Nq@%ִ\PhRs9S7hqF6x"gk8ǊOW#cI/Tl[:gq(t=NWN3ʕD~t$ -Jh%،s$1'hgIm(~g%Hhp!*	WKh.	J$!SBn	=%z	7Hl	ϑ'_f	[ͿIS"DQ[|=IjTQ6U$Y,kwgpϏ/Ylsyj,By*I,eZ{_z9,K{+C$?7
h+
_9sN"OkE]~%T~sA[=a,n˒kUkszճ'wJ۹;nv<!(*ye;iq2=Uԯd,,%*996g]5}D;zu=d{zRXTr»-*XIV&WbBb<_A
(ƤT
\)܈(De(Ub@%(WЈxyp^`^b\j&A&

p'^VI Qp^`=
LVu
zA*ܭ`oTP0yK6&oW\w2L
JƇ+d!&aQ&cq&0O2O؎{eDZ-)&1[y\L231/2
0/3
29&#i{pdEe02b1|י|W8~ c?aI|O2R
*e]Q#ҿ'0DWLM&M!SWǭ"Dyd )4FJk)٬q\ƭHFc
JD%yFcuhۇ2q6 d"͖iMa&'H6:Ԥx^)9b2|
>"*me49ӄcB<533?<p}?b!?8e!g&`N} t}`Z`
鄨B(&J'aX^t&|ZZ	Ic"5ۅ}:n{îbvNY%(u@;wkZL`'~Z'ES?OgAK*p
cgm%%EIi~n&}8ʹb[~84<|
jBM֕:GBd.U(yk%<<+Z]k@m++m+(
`FI*P.P!TI/#Gc
'D>_e@ʆ+svp~]iƯդ(жxXQeǅ}&V>/F)Դc.*+Kٿ1.PKu    PK    A             _   org/bouncycastle/cms/CMSAuthEnvelopedDataStreamGenerator$CMSAuthEnvelopedDataOutputStream.classUsU=K-dc#MZcZXhն	Qq<ɦh?ٿN!MMY̞{ޝW W`$XS'r<U	߰ ˕j>]$Yռ#ڒDUayhU4MqK%Ɏ֪),IGiVKKX%!6)cx+"%L3rU>Alخ
B'i@%{Om;FʲSB{SeS/œ^-F*c71]ӶSOm4\)mΧҥTbv$Rvwj\*+3vS|)Me;aDmɐF-URKg4{%KS/yLReZm
M=,7-w2g9*&TL8⌊TLx]YTLxZpٯ!_DhQdv6/LhKQ66\戃ũŇ9K+ܐ']"-:ֶ%R0[rz{lcs;K-HsLEM(Cj8꼏YGX%
c*RNಆ(0y
o1{F0
26F8!^ph854\t|̐ 7n1fXdD1%,gQ\E,GǧQ$yP>a+8w3kG[dSax^MV4c[HPh$
!5׫dP
chcs=3(8Kk`f71By=}}*\e}v9
>`U
upO
w|={*e>N]|`$;8Xxs]|'NvՠZ/^ŏH|) <CmvNTZo_^ ^Ag\	3$DDO<G'k*=PIj:PK  	  PK    A             >   org/bouncycastle/cms/CMSAuthEnvelopedDataStreamGenerator.classVkWUIZ(R4h!<(-ZeMR	EV&04I'Q߶	@e-ry$f"r{f}νw? 'uhPn/&^*6Fx}C%fb3Ls:3/.2A5^Zei.񾥧uCM+n,Mf0=W\R7{eXc3Rc
YL̴f3{`
v¦,Erl)s:aF(nCj&mZ
TK2Yn
.*"<Db)qjNMԙQ׫a<rTήkjT72&M}a6JĜmjjΰ7zÉ۽qfi.mSAe(e=(0Ccwk|tt*ysF`ԕفJ·HL.fS8|W9҂Lzܵu@O/qjcx|x9<mV*}\7M)޷qIq+*6RD$ehD\qE"*t@D'=$sHsNMAnۅTJ]O]9N3Nrx.|pÇxҳ1Ǵ<oCq.
IѹCq=yU1WN asS0u;Y^]N{BQsë 0l=Fg'BI.xeñb>v߶s2deC3.v-52Q{~]e(p0*d\7eeF\EL8I͵AAp1]	Q$%#	'0s(Hs"*t	0'a A,qq\>傾OC˚>>dALf|;a)57m}C$;=Z'4jV翂↯nt HoȔE}
$_@zoyc_|N׵8K~.hI7)-r?/ٹB̯bu|Fomc-PIJd.#>@܋)")-ll!j}./c]\MFTJ@ٿ9Orđb ((?%F7;"ߊ[%!)$9݂|ѱYހGǻ@5؏PPK랭J  
  PK    A             4   org/bouncycastle/cms/CMSAuthEnvelopedGenerator.classkSPpK["7AVI[. R+"Z(R.'mC	S&=eeG9)T[Fh:999~	`%C<abABǼKX|S2z>X>"48ħ#<p"==U<MDZ>/OsơbܵuS5aKa&XĮ}HS()$$-f;i%QUdDf-9ʢWN4s%5Im	j%H/Zz
܄ˋӶQ0LV^0,png%	%]pkNz7Ȗ^^Y2@s[naf]ΉK/%[F^}2L9gV̂JY/#AXGI$qQ\;ZZx1
05hPd%U/Hk92_?JQІQ0. . x*bBRЉG
Tp!/b1xa22c8CeD1F1d31|܇m,JhKZy nsݵk9rkUQ|Z߰Nal~>#
HjqY "n|{ÑS`&Q0J]wx߂TYUz
7,9NeY㼭Vq8zuePKn  v  PK    A             /   org/bouncycastle/cms/CMSAuthenticatedData.classX	|U4N&=Җ6=wII[(iR iD&tll8D<@QQ<M J=A
x~f;M}ޛ}Ou73Ek#E0?D`VSs/!PtrglީLgb(eΡ;jcYPSh4I)PDW՞a9AӰU_TQjfS7S&$5HGnʹ2f醚:jXYꠡm#C68>{4E'lBsZN
qr̨q4kI!vW(hΨ]VK
+.e~'2+f"ʹIVxd['hA!P#ņM1HQ2ǴT#PZvFL!BXZr o7y%ɓy&0wT`yY.͑%4ҵt7ĈOQ!{BZ?:=q炷>MsSgwOBw%S<LF2<eڂNZM{c84q?iqxqqx~(132
ڰfzvol~4YCmEs'G=')rC{IhROj
4lʌ$G֫2ZH@~SP`*k#qF6u60s=''+^`]2sS`y8szMJT*`Tݚ	l
giWZ^l<pec[7mk+P][/_a>w5l$Ri#~Hi2xг^{g?<].U*TdmqhtҴc1:m[PVׇQJ+On1bǿK)\6ڼHu=-'pFCmBlVns#Dn:S%22oOΘ'՝,3#N*ZlUuRk1v#벓gIxm%tHxI蔰CBn	;%#\	I|	K'aHx%쓰_	/|+sYN! ƆF9AM!̰#зpY,wMͽ7XT>
D}EyԞjmn};?y2-\=KWUzLaʯێJ>o,~)hit'Jٙ-+^`T@+mY;e*7%o,&{Q^iG	?_3ijK;}nmm)EBsUj휩G/~!&ECni)gl%`uE
-PKt
\L=0C?ϮWg~<V^hPW*ΰ/Wp	C#RBJU
.BDA=
 +̰f\bzFjV*^`^`ArQ:zIAެ`%ޢ`Ù[V2l5<v])Xw*8Q exAA72 ?}C&g,ϽV*8
'>Q|SncwБged3?be!%~*d/81|g2?ae*}_cw_Hr7$~)#1,#_o2|2lAF2,~(c+_˸ߓq9&d\;pߨe@ci~WwF>A;Ǭǲ+e2~Gӏii]( m*NowKm)mC@4^Em42.FLPMĬK'Y.uL,b:H7^Z=Z-U<Z,u192-91g\Ȼ6tbtǄ:驺:FMtq;kp[ÿGq??֌Ajjk&0<Xs1";=x^O ;P3&OL T(ݎ?#Q}Ϭf;t#r8l6Fsx"TKgmruWd\'U$(d",!gg)V[HX;Ś*ynct\6Gn(106H9XrXjKy]6P^*8!Zhw@~j	G%$\&QI\$t^%pq4I88JH>.VOɄ-xi椙G=Am
9qr
/^#$\3PP^܊}"_\h_yƂs1
i޸XvwB0k)-99p5ʔ~|j!ΗGʻ{$os-X|&b"8A/Qűx!gŽǋrwDok=4a8O)qbzE[ˉO9!`|q1JzaX]X PKh
    PK    A             :   org/bouncycastle/cms/CMSAuthenticatedDataGenerator$1.classS]k1=m;uSЮi>ȊPE
.-T|LMM$o, xgVDlW@{9ސ|+
<`/f{3^R$!:c\gzdlǂ;X\7G/WńXYZf8[*'<pY3V$A?JGBk1,yN`0`.@`>@zY.iԎ(|z|dig*줅[%mw8C}T(*
bs
\bDk3Iw,lkt֓oR毷Mw9Ih-H/-*܏]AEQ!N'sJEV::Op7?T{7.*yd\@_S8ևu#
.N%
`TX9~ PKk  2  PK    A             8   org/bouncycastle/cms/CMSAuthenticatedDataGenerator.classWwU*!yݕd\v:&ڀtĮJ)Tj 382ی`:g`\s毘s#eF:餻ģp޻߽{{_",P;B)64(aQHȑv4-ӹ}4kXrѽ%accwhFzB)224/aup);c:GG`42q2}3;6r%4nײ-%4-0Mt)#Kdzt{ 4o_z41Y-EvKiЛsrN1Q	LMii'i-MVz;OƘc35tZR12T{Ls Vcc	;6tC/$4ٙTlYeӲVkVwP$k|n)qlә	uTEh6VJޥ*PoZn	F'z{QfS3>נ~"bܴr{=/mY`6l:B wzħ0F\)#ǅ=VŊ#\%Lmd.қnRFy/2-+&Κs:J\i۷Ԇ:LQݜ؍DtΌ6%itF	aw0gZҜ5jSQۃNR7NznIQ`z6l$p@DI *,YE`@L`@6l:pl6	%x4 [vn/٬4uwR
_+g2YκpіLhK|"-ԭ[\d3*UWSK493.["홚Nc˴UҲQҽJ\wx3߫*6]wų]'m/+Jq<8XK"OkMd`=/O9FgA)HJWKƊ*mkW|XV|/\KӠ=
~2P"
S,b-7M)X	]f`9F,AJ*91aWp'<Uk`pC
Td,`1r<w"{p*>d1,~(c7~QmvOe$XY<)Oɸхb?э_ei{<şdY~+^<21O4 Yf܇GXfM	/G'.Z["eUTnw:b3 W4ZFOu< [dQWhfisvp:Yy
ѽ}DSiWyp$2Pp5PxKy_tPYvezN{p)<SH#O	87y3,pOT
x-!.^N}cKk_$Vysy0/y&>#{E<o(it5@mPj[\eSCEWᐇ'ӄC%5,ՐK/`rqПq>wQOe6sI=ҳ4)eeZ	
' (U@h*6zBd? -<P^
{XL;KP[]g[6
PK    PK    A             5   org/bouncycastle/cms/CMSAuthenticatedDataParser.classX	x5s\2F!)vB@jHCbX(Nigw4=!%^Ц}KwNv%֮lvfw̛fF=P,Aa/(
($Pܳ@%[	%<K36c_LK
Z
Dh$UzfD%uSjOzDh@,SMZZ"	i	$j<}әBm1kHUv[#befR&hv-uOs@MiH4fP[X{@ hq&5ҍ ͚P\5D"hԭ%WvѤF:}{;(ƃ+PHHn]Lmygh`\ؓy#Z_k~UdT#BP##AZ:6Ss.^y"$k	_R-3biVej*q+iznp^qr19c60a+ima5-46#ٜnܒBnT5yܺIJ-or$i|YъLhmvX҈FԄjXn޶֎`[>u]PL4LG!N֠7ʕ_Rjj`E\x5T"CO+eZ;G3h1MMf#lJ+YwVY%yaDŵ+h-d.w\n-45>=kP_xuK<ՍiaNpY1AK`
/xK!h (LXW@L۱j]]+[hu-(J	pl\Rך'sNK
[1>%L}@DYy<iX"VhxF(|#%$FZ	$pH(IBK$\*2	/"	-6IhY	K*
	mb	:$l)KU
DoX\N!FȃQxy}1!ARE

{\$ARpw/>owif^u_By<I2}%ѽv5mֻхy.K*}84O\snsy"%E5%Nk{py2]k,\V/
Mb!saJy/RQ\LTicԄUfY!jwygȍd;y7g˶Ude4.<&WMP<ZJI\3]{fhw?ԺiNe'<%>wC~OQ0
z."BtܠTanTPW)؀lkt
|(SPrP0 n-
VVW3:
xxFs&
v6&E<UA+0oSa>ޮ w({x|xj
R0VG̻cWPOT >U	>p'ç>Y1|8	 cR2^n1X^1DS?я32?+_cbwq×e_ɗgK172W2LZF=M2,}N3\|OGˑBU؇V0QAB_$dsW RC3[j"YPmj<s4FPb24RJgZLKiw;}JL㴔ՙRi(G աiHi!`b(|dDԑH)+ʉJ]Gf&I) <wdq1ԐU!<@]MMJF_1y,%HOcZq<wR?B6d/T/?WE=SX=
)c+rRHM0{VO+R/Ŵ!<0+|X(CxV4XI㏵)KԦ'/-jNÕy~.g	
(Ph<6L!%D&a<:˟%pSXZ.O!,䥠@9yL
>\eVgz3])Q_(wH[\iʇEEِ)iTFLs
M=:^8dRidCg1'W	Sa1em3u85xG.#Gb5j[߳
gPjdihCx8TNJ>)%QSU(y+%{3L
5:Q&&Ts{0e:QژSeI<zy(E}ЉbeKƨ\݋K؉3]m
O/b>kIb>&PKnvB	    PK    A             _   org/bouncycastle/cms/CMSAuthenticatedDataStreamGenerator$CmsAuthenticatedDataOutputStream.classVsUmdZ
h"I
"bmV6R\҅nHnJ۷~ggQg8㹻4d=s~s9'Ͽ x7QB}04)!:>$XL|CcĿ߰OC#ค6-<g$04nDSLdI+iґa>ݴLBn[Y|b.K3%q-sLHhIiQkgY3Π-sRd8i0B6jY^B+͇<rZq#YdÎLKS,Eit	+i0VSڌ1HlldVgYnƚ;rZG\ڦI'Ahr|Wײ4hmnsȔ]9]sELCJ3flI:13a%l
s\ni7N#ЦLJv*Pxd+{5RË5di.f4Wka0{S?NjٮʌYW蒭Bi#߹*ۢ')N]Y2vK c26(cet,Q蔱E2M;2}e9H=Zܲ5^AJx25O5yW5Հe냡jt5f#n9X^>q
=©ĺC^猌7Ucݵ}oV:W*!F6Y~ˮؽAP*dg\<=RG0\iegG,?ФDU0b%FT4Y-*"YxϩQb P]^4OWWBW
hLEU*㐊HP0
<SxIA /
rBWĔ  'POⴂB=H+K>
QW4
0Մ5a)AM t{ufo҃O=՘E	Z>/-qƧweski*}yAI/FԉtѨNNq8eTE>K$fwǕpw=E\
71n1nq..q!Xko蘯Da,\Kx |Jx͵5}
u$k $]7e++ I^?W/mb~Ubӛ.|_8|"nQ*F0GE䂮&>#x7\UR	oQ=/Y{%#Pu{$*i5u9bלSh+o㈌]!z4(;ohu PKY  
  PK    A             >   org/bouncycastle/cms/CMSAuthenticatedDataStreamGenerator.classW[G-$z+Z FR%ȭ6
b	^-!&L6ުY{~|_և5{[{f%dj#gfΙ33sf׿~	#Mj<Dhf\4Dh}
ӰJɓ\$l4LdTf,<+Q7-UWjyi]xb@4	'yv3	`4<٘qKhеOQS:=optD5V̢4-)as:ߒ4a&[T25i-EKhNr&DSeRK7p"xFV6AVha#T_ydLZJ3;½CvdmبiXcSH|9!.`JDsSeӒIZqz:3ñ!\
u
;f}WAyU4T-9oMsUP'eTghP6aXF*pڅ9|nsW@2O30y岗g*J5"^
9-ڊ*
)	EYI񞥤schap?[2<Ȱ!d1213Ph񐑳%
)"x.Vi%@pȩJ
8kD_ڗC(0]b}Uv,=5҆e)@ݠ4>z(@Œg[ĳ1t*pe!jƝP"0ӽ]6p6mRl.*.Pm'6Esٕr!j.>nǉJ	6%+Z//rM:m&{Aջ*h_

v1˱_*!x\FDԡFA3jEϫa0kq@*D
1$İzR#
V㰂5xBA#F6&Ęe8@Ml¸B{OB2:S2`qRSBeD
Sp,
qNF؇^dy!D8!D7PMKh:O?ЗBݧ%j)-%fiamzLT(l]-jD2W#aD?/i%,~Gw)<Eu#kŒ>'~Ѩ7Zju<67٘/'"z
4
3x	>^.!J.XDB[x&><?"ytfJħ^#ok=a*80ׯe¨굻9TBNedz~Z!X,^+M#bronލȶ<,l?FESa86x]Oeo_7JwLx~	_!CU2bd`gx=v4&x@b䳜D=9jPK'  x  PK    A             4   org/bouncycastle/cms/CMSAuthenticatedGenerator.classSn@=8s)pkhpH@* Z)YW:~PH| Ba3uH87~_'HG=fy:τdHخ'CR{%[N[CPsOrm</ϻB	??VAgNrr{$qVݷy\a٭D߱-M\y>CiւP^o8EQ}ާY㽐5ѭ4C%PZ!+FKrt:8##<C1sc=tOԪ?/.ez<Ng)t䁬X!k;G==Q6&N5W,RHfqS,1i,Df+pAZKDX?#-"EZ"A3}qmTΓ@|Twu
s1o!${QȳWxC0zcJǡ6
PKE    PK    A             ,   org/bouncycastle/cms/CMSCompressedData.classVmSF~dܼAH
R0$q!IJV%W34@Ibh=={Ϯ _;: 
$G	hOn,&76vW7ugN@o^1,Ut4T8̙[ڎU2mM)f[VɿꐲL [^݊&`(``FɲuU9W$k ŸN{G%SU*`ʢZəZ=HUTT5ϼ:ZܷQdݒsKGP]%9k(jV:
s0bۥZmMoZvI޴jRDC9)V&R6HƩhӐ4@ݭ&N
JHzFUHݪhX׌bgD>7qɣF(y>(f~ZuyVv	X;TRMujC? CsK0\e00paᆀY;9K|
'Jr%@IF(`lYOEzxa4ԡTP^O~g=ŭEN-9}<:3!T4m1얔68^9U2ԟ_<{g̞iy?mhx(Fnu.:N|-!^K;n]+Hܓp%ü>dn%	[J#׉	|c,Êq|S.EsDDL⹈) rŏqzqx46!KZE}W*k@hwCź;z@,&.bRCl`NI<
:|뤋::O;LQ<;
1+dP3-wH0BDaeC1C:~,jIZ^vw܇&+@#}D/K t|
u3T_[I{
=miO0hui^d/1C{31DEQ3T>GW!|mhhbc0Jjs~=>QNQ0`R;$/PKw?  
  PK    A             5   org/bouncycastle/cms/CMSCompressedDataGenerator.classUQWGXZ&`jBMjж͘ݜdP_㛯=sΆP}3s7~w7'3"fAofq`:#0D7|NAloV(߳pVآ&ϝ2YHU+ꖤk!ȟreJ#ꔏK+ɳެR#G0Bڶm˂k3e:mJX[ͣ3xnmˉa=
>[1Jτ-z,yۮݴ
jsbau9	`[
UT0.,J|!~	P@/szvgor>^wQa7M6_LZƾT!H&ATRqcc8{sq|qCq\`δ3kx>Hf㉠
)rSxG'~S
"S:!ρ|Ja=~ŬRUi7҆6WB%	JK nX((3~uyp0>U[60:fYPAL20K*sOe,鸢Wq_G:f#)t"?9|̗C|2=A`7\|Ū!IJTO=C':hզ[7T]ⴾlRi-cљXtb=VHc.
-|hZkc8bZ,	PTd
ژ)^S7Fm0EGз19qa3BYvք]<:?PKT    PK    A             2   org/bouncycastle/cms/CMSCompressedDataParser.classmSQWe-JIMъUJDKJE.WZ]ZVoU39SޕX`8{<Ϸ fჇKZ
!.n?!+-ۺiYT-FqL3KeV*Tæ=I ic$,R dF3ɽiR@}G0)bL	ƊyK};gJgYͦ]@UtSY:iҲԣ|\}Q**澡ijޣZ1dn}տZN}jhNGREI5j%3F#tvL;:ƞkۄaPeڦ8f尬SGr2t-GW
&O@n)`@ A|?z k)i;#K>l͂GI22K5yOA\8qN.k g\-6ח\Ҽ˪hڵёZ=(*g2qn1MG*ѦCr+ǵcm<%!w%tC{\IAЍ0_F$JGMrHb}#x<"nẺ""Ʊf@;`Y`bj2jy3eN
4'r@>Zų*qu08j})0E+Te߯O1|c,pLKQ&S'X'.8C]ǏN:PEs|UV-etPK[K  @  PK    A             U   org/bouncycastle/cms/CMSCompressedDataStreamGenerator$CmsCompressedOutputStream.classRn@M옸6-iRڴ8NA'5TH}!2
%v\>@"F8Dٳ' qSlN4ˤO
nQPݧAPFTȰ Wq*V/}7nu *it[q*Hg87t4?I2Uܙ3x4Ndʳ?Ӽ7J~m[JX2`8ok'vyWs$[{qߤ/o9Y`݂Pe!,Pb(3hUPg`d26Uk&V-Pk^|F~RQw'{Zb.7J\Q^|W pH\p>iOt&w'swG9BU=v7sSˍby˅YIiKlno5r8Ey3"%lqM7} 4԰̯PK2Z    PK    A             ;   org/bouncycastle/cms/CMSCompressedDataStreamGenerator.classTmSX~.


\4DVEd*F+Uۤi퓟EU?jgMK8Йs{<ܛϿ_0GɁ%i5u:&b!>`Kkq+9gH؅B6;aW*<x-l#NۂgE*V"'(XrSbT+xR
+1þ.7lM+;+=ad{ERW8!'JUy؁(qQs:77jyT4Qm25Vk[DiMvʁZ<`ߖMoyc^t9J<cQ

<j6
5Ky{.f6'U7	*RqP*zTRqX∊^:K\xa(FɁLl #Hof-I`fif=/HUqˮp5e/^2[|[$e$aF6lE,ElyBiB6z.#],@\
:tiI]~jP!{1#iL{pV>9~Ei.I3@~悆qY	Lj8_5iEiif4"4l' -Uv_B;G<j9]KHC6h
aO+p
Vm޿pw<E%*9Qy<d_b
=*~ᎌJ
ڕ:'bFl
'uhĆ?r!/F<7y	&5/g,R3u,lzQmk~@C%O\PK7R  7  PK    A             $   org/bouncycastle/cms/CMSConfig.class[KAw<VjiG ,X@THP\wmDg)gEAA?ͪ%B30oށ9œ[L\ěک5}nxu92
_fUNyB
sZc623S gߧ"0nיM}Q؎mʤip9/SQUS{ WlO&U//_K0#0VSZ
	dXAVuIl#uz4pTr[f|Wl>AB yXw$$j?#v64UW|PK/(U  p  PK    A             /   org/bouncycastle/cms/CMSContentInfoParser.classS]OA=S*`A햺(*4<)TMx"l.>M$LQ❥p3g=̯߾XJ1bvC狒*/&6W=Y	KJT(T1**п7V]@}aEz,$-Z;xM;
^$(ܒ6oFU ̅v$FhY) Ȉ l:waj͓\GtEWŜp 'D5UQ1՚n;;"fs-3q4/8z8z9nqqspr1
Cz?nH_V4qGȗc@E1قB6f0609mM"ib8mLL"mb)mJ@W׼0Bϊf(8=6ZETGHL+SC'uT
'XObz{'g)&5<>ƃ/gPEG2F"S%9lSq	h8F^suYQLϯyV|
G_;PKP  o  PK    A             *   org/bouncycastle/cms/CMSDigestedData.classVsF6(
	'`M(ڔ @U(@z})?*}+ɶ4owϿ	(~Aa}c8КЖ1О1*VzΰfİCWV3lg^mrU+ciWL<ajȋ+rc1tQp
ۊ;BV>^ċ.kk^
Ɍa]mse :H1$j紙ý=V\&R[VȄ9*	6V,](|)na|.;&w-eةJm=x65+ʘZъnԦ9UNkfɗ)hC
45{GuOME隆3'O%K_ԉ)RZL/zH>_Ler_4n4 =_z(X((EefM1芴hۣW]ä&vA8k;AKT0^=,^ҏD
2%2PNpʋhhnZf:V\]ֻ4%01׮dsũxɵ$*h%l͂p9Jy}Ic;+;8;9vqñc~GGc ]'W"hob:Vu4כl6tb
:zU N("c)޿"_ҘJ9C~jׇ#i<8vTz[4#MM
odM\/MMܩDLDc:m#^}3Io<2*bB:*6a)^
1[1b*؈*0%]T.ɧ*RVэ+rN%u3*zq]Y-;
C(8Yø`sR
NCSpJⶂWqK;RKqO!Wwa) Ssk;1[R:12~T{.ݵӮj+#u?e~oDAp@'r=>mL{_E/`tJ.~12>|O[ϐb#:AEIoݍ!yAs-g9%q<1YGJR覕KbK=Lַ	-
b3A\H'atXe/[<t>x]`i}!\
lK2a](֥x?)oOPۖj e,-|3,AW[kZXbok9o鱔IQвq'M-PKuXh    PK    A             +   org/bouncycastle/cms/CMSEncryptedData.classVmWE~Ҋh`
Em75@5/͐.
qwDT=&Q,iMN;{g2 n!!*?ە$Dք:x0
^JE	a293yܷ$0SkΊ(Hq	
u&aW6=ae顄Q<moکUq2l6gjEbh iRmEk<~Y8ZaRuθ#v+VlնZ[pz{DgJֲfR笣upt7QD,UrnZv)U^5YJs̅jnkqj[\0{f.U;{6n:FFTT7ThǸUa-;Vo,EmpK34vVKH-Q"Xyզ&VFUS+Y[<9x#T-k2ސ1!M2ޒ2d#]T̅:bEBt2V7 LFgզ׹'h"4U9!\OEZo0[szb;s^*[=wn+NMǶ.u/U&P"o-ku.gl8?8\vtWIPk%r CH0D#XV>2{*>"*.၊X(TXW1M+H(_P0n!#DVAđS"-;sV#yF
E<Q{
0mG~[Ej:Gr\ӟeʎ8'0Mqtu/}l3`	i.o`?x-KT^+ć gȽI%ϳX̟b6@J_F"=xl"b	? LZ"(gsco(ae|>l"')n<;z>4H:%d§s,vM|r1z
=w3 PKA  
  PK    A             4   org/bouncycastle/cms/CMSEncryptedDataGenerator.classUmwE~&mv͖


EP ڔm6K\Lws6!	G	5wz'n8cɝsܗ?_ j0%SƓC4YrqqײԚwvmLخw®4M'Xl=o-lW8ۧ= _(mp%4i)Z(X݇$YJmlmsas\#E7;S;Re7wVg=zmXfK4rrDd	[0Zrȶn-#6
o.Wܟ_?;L57GIrL(x7աY0=4(CvàrSBxV m{
bd9նD}Lisqq'9NqɡsqmiJpkKgX86aVh\	ϼ<'s/>Lt2+/zrҵ\1KJ!a/3lQ
aɬɯ4nP(I?	篛qp )!wqI1
\w0.ը3X&]ѐU
x_H
4!|q=>R1R|>V1E9,HnEEZ2XRq@)n&0OEW{k,LUZJ_~KQF4Ń_KRUaEɈf6P2tIC!S9ƺ/=Jv_30[ѕ.֍6b+ӿc9*F߰\Ez.FdEwq)S,LbtIU8RYN 3`g _3EQәl݅?PK@S?    PK    A             0   org/bouncycastle/cms/CMSEncryptedGenerator.classAK@ߤ51jM[Л"H/f))ql&B<QXzQ9{3c`_^'t	!>\ŧL?hUk7U&>LU[gF7\[e59w&,lla|dmyek'$.;F1z"PH #tǾ8I"ID	*-nw4VNO|/fGHz PKQ
h     PK    A             +   org/bouncycastle/cms/CMSEnvelopedData.classWWWaPT\j	Zm(j45.vg
t2ݶv_q/֮JB[{N/a&S}{{;͸^
%5Pk:!wuC%vkIs@IJR-FLQ=(d0TPWb		#L%T$='%ęHNC\XnHj:fjfAJ Oub@BNǾEׄ$`J8]gj"6as׉d٦'[¢bn/{c%AH[%iE<7nhtr&;r[BFLZ,łeKD=z2?x	mnB3΄NwjikxAA<
%"%f<3(@nD`ư1	 P,FKLI3Of`K66ˡmܱM王gyHOOR8bj,pZ$)ۭY3[6l
LzcB1nHbpȵ
f̎hsNrBxazdTlcA-=v+O%a4p`NWݔ֚[5ε\T}aNź[#X%Ajkd&cu2n('I_Fe cM2
{CDXmT &WJtw߁,'5#@?e}M;4|ӹo$aM Yhh%__
+Kb),C8OCÒ>NPBflzSI7ܮܶ[:2	EhۧmZ$u[ߥ.`LۦSn+wU	|G8;\Jg뙧١Wi-ʭzvCvPG6ܫBA5؂C*a*TBbUI%S1}*1Qq98b>x@r<b%J<DSq'U,DTRĘ'Tq*p)%T, HV#GLL,;QO(,Ǚ
TЉ
pɓ
L2yU<y&/1y[
)&(9x[A)4H/TIRDo2a?;biSZʾ6		_{ h)HY6ZgiUGcQWm9/'`qi!Gp9Gq%o@=}<.D.o+חg._fI*ư
E}E?m9qd]Ʋ1j~1y~<ib=C;yڈDf)ӸIW!ؾ_F{͔"NCODc9tq>E|a\\y⼸Y|EfC3NAnWc7`_זeY|{7l
%}G>JHㄋcϏW؏YCBnP`ޘ@4`yUl6φSھKW0PK{D    PK    A             4   org/bouncycastle/cms/CMSEnvelopedDataGenerator.classVmWE~lBK+j!	ŷP	ySBшofKnLZz<sZ;K ـcݝ<ϽsgĀ(Dc
VVneyaٖ dVW[!1TyiEF7[/p`9tUK--CKg7^V2
Fe.uQ.7R:7j{TMĮqHZN2<FZW
.?=
9n9ma5QIfjH;%c7)WUb[謿ܫ%V
kۻ4MD:$Ni?.w:
3WRõ-p|/8}1ˉ~ªPfzDNr&Ylo=ɫ7]k-[:0]hQK4"D"]#(׼$ڮ~"8{%8EKc0<0,W&^`x%*eoIzr٪y{<.vJ-Sv;6dmt=Wd8U~.{3DtU7 o@Wxh4֋$nt{Dw+8yOJϴDGcgr:3_Y3w'Gw'p~+oB$$|(g̮;'cU9654m
W044&-ܐ=
øa"hEV
XqkI|(GULciVYUŒ8>Um3B,UU&)|
lJ4G:"tsYM٠{˂SΧ0;+Fիқ9/@םgEz
x= RY~B/C_j&IzCz{CN'!CA=ÏatT҄X[CôM߰Lj!^i:k7QJ0[عO"ƱUL["bY\
7EpB'O'(Bp?PKd  ,
  PK    A             1   org/bouncycastle/cms/CMSEnvelopedDataParser.classWWV\pAXVVZNeQ[ֆ!3*o֮HOO9ޗn}&Ͽ7 
`B>@"@_R5-@8*@>5ifH;MŘ6$L1M[7B	5:"jLƈb6u"atSʙ6ʢz
ULEfj56Ҫb(#dF" 
<9"/)!u0a!e0J{JlO'/zfёaьXFlJm29t^+j{)T?2h޽'b23lLtrBLPNlҘY%'*bn2
74StsL]sJUl3Ya(c!-,ctdFm8]=Kh:r3FB
o<bn(q3ʂJ\l
wo&	BCtj
`jh;:$r,y3Q\ҋă9ʠqkry%FgvPn?v/u̺n^~qdI՚0OruE#-=Aj]cP886#,f=&j4Õ>WFDbS5TGISbBӼq"Nzw N_D"DlIf[DlMvy:ݙ-bpy;<6x\]\[ɥ_0SɲhI+Z#e	~hzFN2β+C}Ȏn{W#wx;&ב[\{0߱e^we>726̓|j۟s{:?yT"Esn1]{p;Os͒yYD6ϹܶmgN*(тC2DQ#2{Q.|2p
h1~;𨌥8.c92e\ Ed\	1
'eT@Q(#2VA:dH8S.\Ĺ0Hp1\OH؃g$bx%eޑI؏s\śBxWx׸x]<:Dz𞄃|هxWBoO$N?S#>J䐦1=DyT"El)+]֕h]K-T ]K zVU!Rn
_^g.St/b?|8OΡ
\\$/nao
Li.%}W_XLpc
7&p%v
I"~ޝ^_k|I|=8_ڧ0! E\氯Ro.4YI2<u$+ Gt+%b XG@2*lܪ}'KU0_;)|T!$iC$q
iEC8 Z+tss5N9dkp|5c;BWn@.be,]&.pxttZV>RJݴN"ͻ%PK]    PK    A             W   org/bouncycastle/cms/CMSEnvelopedDataStreamGenerator$CmsEnvelopedDataOutputStream.classTkS@=)mcKTVm
VR*TC';-MM?şcャ_Q-*jfr͹w޻ٯ?ǒhlQ?[`,]`V3%x*YP:;7&H7Dي$Q^X!%yYCAhmJ!sƚFұrBۤy̢
Xl2`/
hreӷ牱n$,;M0EYZ6-,i)X&]<Nؕ4\Y	-%&rYR[65"6D*KE.¤![Pjmޜv1(Ek;7
L''?:~6(W-wmR*;bzW*rkK
*zTS_UDT0Ӯ_W3?:5d^|U(V獕bυm}~*r:nW?R:]1ѝ3?՚6KI-vP[G[)
TD5BLCAc臮0:1!E^.4аtp6 01cg8pRGq
578ζ!0v$n*}ONÛ7%ZD	
ve\sc	)2I|JG;0A  ݜ6L>T'V4$>OXbZ;H}I}dPEJH@Sz$X!ݣp+C[0S@G<q!>@6?q'5k'!*z6 e`h4ɳ
(5M;7H[Dv@7H0 | PKE    PK    A             :   org/bouncycastle/cms/CMSEnvelopedDataStreamGenerator.classWwFVl(raIH!!I[#p$#ˁ -='<?Yv$7n쮾ٙovWk4C< obщBs7 o}5]
b `If몑dcL2ӭ8,8bf\drt2S	t2̘>e33|Xˮ8WJZͥ33
h<8<6ZY4%T,OF˙>F%@]WY"GIFihzCIS.MwdSfC5PbI
O AAZ'٬V)תZ,KIsZ}YQ"VzZa0SI#,d@toLXv)ԧ2/e":ή昮´;+C3Ng#CS;
+]"ڻȠF	/fۆUxu3\"-)?Y!t[Zh
-iqM:6g3|+]*`Y/ˑ۵YfѲ9X΁`SNϘEf2ɜUר\L&ϊEVω&b"vEi9J12e>]#K_vQUUܻXHr9sdIZd>qڼAg.X>JNӊD9\\bG=NP XMk6lJcw0*G>M3sJD̕ذOʻNLC-4D#.]T>	7&K_Eߎ֩VZ!nzג);qLCt[ҋ%׭ux
O5!/
&ߺq	! Z1$nЋa	-hͼ異
xs	.NJX	kqJVag$lY	`L
%㼄0V%	z8׸aLp
r:Jİ !~h\\ Hqqt 1ŕ 5@r1ŵ z G^?2<,2`imM.]NlQR+}[
(+k/UQACFW]V%<~7sC[/A7p0љǇy|t7B	d3*Kϰ^r#|GxcD=.=OAȃ$=T
_EʽHtq7ꕽpc'ww=yɾpw9ޭy|e+Hey[Y$@nsx47y|/H",{d}gO"ecr1Ct0e',?*P)ZiTrOTzLm[xtn'qI5ueCmQ@0QPK`ƃ  +  PK    A             0   org/bouncycastle/cms/CMSEnvelopedGenerator.classy[W(0"B]]!PǰU!jJ$Kt0&13t}}w};$`<{}̽g&G=t@rav]}ūոnVQF|M+J`KGL7eMAf-3Eg"
!ٙ\+39*3GZiOG0
vaYzX=@ǆhdٱM]3%7ږi^i5Lq#wV #`#\:Kb.2j5
+rabF	Q%>c\QULwL3,6э֣Њ]Êo$65amTspHBez,hf3])%1LSyf|!}F噱c[y+N$TQ-:07'n;ݚ^K0͚YU
=$QuԌhZLL)
ۡ+r\1jԘe*Lue3Y'htx9iӬvbkXfԐ<3	ꦸ&+>gH}PX'oMEE%]'_bT)Y>C*pj=߃=r$SИ`w=}I#4Ƶx"Ų	)}H7AԨb	e⸼Ry_5lsLq/eF2߲ؒRe-JPDԘjX_-;Qf	-Z%ZHHJH`s8𱫳N^K5O;}̾fq2)XMu]8~OaE-u$g(6bXA! 	nB	!	JBa.a0PC%FXHXDXm鄥e3g&C8PG'x	
Fy#4V	ԃKp`1.L\AQ7q?7zpz76&̈́[n#F/$Ep^}nDp-n!ÄG7t*!F!0A' QAH$X18aa7apj5O L؈JOOPH4vfvLQX+b"X,bE\(b"J"E,L
8Wy"V8_"XIb5SX,du
F˸0I&ПpWa EކP|w{I4eYaw5qԺ~xm<QslAqq\|l-.>,?x/l~/sW8du.>&Glŧ6G{>.>_ol[69{PKwWe~  :
  PK    A             G   org/bouncycastle/cms/CMSEnvelopedHelper$CMSAuthEnveSecureReadable.classS]OA=n[P
YHhBb`|^%l;K$ nS3νgι3w˯ @V )O(J
[Ir`'#u=JRKy$-/Z[ Z VGGF'9:"?>_"9dǺ!#ʎOI2uTѡiM!E%ck7d֭k/,罷\R(|)ts5MW]3{I9 G"g{4cLd1m95L$\	7)TClJW̖R6}EJks1eyd0ˑ%*α5+_3\2#R\`Aly#Ϙۘ*Ltȵ#9WEk*c1WPKu    PK    A             F   org/bouncycastle/cms/CMSEnvelopedHelper$CMSDefaultSecureReadable.classk/AeV~n-FDSP}=fݩĿ"! ?Jb?g;';`3TDmz]CVYVk?OOiRBrHtKiR99{~.xU\92.E`[\Bmr+lM:UWɩtD(.+xi*v1݆2Pv66N/_H67ӍD1Jw醚s$͠gIX0m!ю0:1*0w5r^Q+cv/7]Jǫ᫂
lk"sdfc;L |'6o`7`mbVnE7z@6-mx4kqLPKҔ    PK    A             T   org/bouncycastle/cms/CMSEnvelopedHelper$CMSDigestAuthenticatedSecureReadable$1.classT[OAݲ,PrkA*ݢP& _|cY]v)j˃?dg
"Mo9˙_~;I0hSxΠ[/;"q=^I48ΗeNhʪb$b);0LBKHsW޺!0d;cGكs̆Qnvel?l#7Dİz<Q彦\.E*f$
^`xM<C D\_Aר4rӣz0D:}:L:tH8͐Y=Ph]=
L5n9nxGRgy)]pXz.ŔaL31BI4:ΘHa)5у"2q*S00K}aᄗZ5r+뇱ׄg`:A XP7G|K'*z7)]:3a#$!+X8OP2!2u8{9iϸrvÄof?n-qm]RgZ)7E-`Sh-,dd	lIDhIL:.PK#am    PK    A             R   org/bouncycastle/cms/CMSEnvelopedHelper$CMSDigestAuthenticatedSecureReadable.classTmOP~.p *NimƈKx.1Q?]()M
A?xC99sιO aд2Ls'~˧:w]$J0m:42
m!]Qa'-0˓U<hp{;~4޻bQv4t?<pĩoDAGK"˴;<
dKi,^	@0_j*wE(}KKOra>l`sYs%V4Νc>i(h5h04\0Ẇ1̹hσ2U	>eZ٧CTPz!UgYlzuq3P\u~@>
cnƀ

Zfy,%4#{1W<2mIf$	H~{L}ަϑ5#X7_n5CY
5KFvJol+pCcSS_YSyewQf YuņTIj*{E`ԍPKDE?    PK    A             -   org/bouncycastle/cms/CMSEnvelopedHelper.classVSU-ltYj-(-
$h#A*KX즻Z9'_qG7@q7
ǯ{7)d7jfrss={?>PHzr^@ݰn({T4MnhtjIsٲ[fڵl^^1$Ce
qSU	1}=+FM%][l}qfZU֕X&ധʻKض1;L{?mAqɲ3%+o)K&LҔ%9
ۨS[`p2=j։ҥ@091y χS%X0HdlJbي03
`Vq0ڃ"I0שav9GD^fD]4U6˗R,*lܤJpKMLUcBPQj__
j0<J:[3WV[TͲVR>?'	^ 8ED"i	^&x Lp,A+9.Jp2Ko
*q͑.+ \{Mm2獹=Q~c#Q=DTzVwumfolbdnTi	1##U)?
ڲ߁`\%̹+gRx$"b$~GǷk8<{$[`S=&wZms`%.Cƛ2@Q",!.N`\20!oq688;\Lr1%5>nJhm	.: rqGBw%\<sqX0$c	q((aH\:fߚ
םk'⸥AN&
v)6]E]K)9BWk !5Q`c(G39:6!:]; 6mdEkY.̡Pw8ٵQ=.t =c
I5C٫b/ztn#;$_з=/ş,9?`w_c(j8m,HCyu:{ʛ缞dгsOz&|{ڸ-59-u
AZͅV)ϰ,g	}z
PKaIX    PK    A             '   org/bouncycastle/cms/CMSException.classuJ@mӤ?QC&
ٸt4b$H2UV
JCHs0_ 0 J̌@Ќ	:gyFdn_<G$ZwQPq3,zM$r σjqp`C07g-'o3$_\-\rAaVWc8Q.>-lw?٢
^AGL;O5Yh^/%ݏPK7p     PK    A             :   org/bouncycastle/cms/CMSPatchKit$DLSignerInformation.classRMK@}[ic6ժDq*Bm{(x1Fڍ$[ 
(qA]fv;h UkCg0(#GΈ˝QGN2䯭[K|}pڿ>ܾP
yS'Mܞz<}ueg~Ĵ!HPd,2?h3F,nR)c=Nڵs*4ȫjY)XFAA봢.iOR'|NP
C'D
2((N_7^P|/g64͇S"Y"ۉpY`'PKmY  U  PK    A             A   org/bouncycastle/cms/CMSPatchKit$ModEncAlgSignerInformation.classT]OA=Su@
ZbEV>(~d#ifwȋ	#g][;_{ucϤ9-B_֊еn
ekִNfGad$RM8M;D*ӤXc{g)K3$r7
?-Zqvz2R"ita>A׽/%㰷#k+Ł>I8^})9КzMfTvXOh,gbMݷHISCzWJu:8OQ2@}P&'Ir/P8K01q18raz7'1)2nθynwǸ6.b&\z
PTzOSxe=(<u%i4FtR{K(E&?8vvSDvBHgKcx%3
9eؿPKTF  f  PK    A             &   org/bouncycastle/cms/CMSPatchKit.classKAǿ?6׭V֡aFA
B:+:cԵNBB@T4J4yy_ r%&7AҰRnv8˼mMf*6w,[}z~1C[vGoZCn<}G/TT+S"Eaۄ=´8A~aXj!VPT(X%Ȧ+ss̈́_zXO3-ƅ6e-˲ lb
+ Xsź*'#VTSaA njw@ܚro[Ӏ@f7IdcNxnH$:ELW䩎52`GʘemR
PKEk  a  PK    A             )   org/bouncycastle/cms/CMSProcessable.classuOj@=7ƌtRj6e)]"qF27}Z~TXww^s>? pUvBͳѵQjw?lc\r6gt;g߬	ҰW?%S-`ʆ	VHz
B0]l~;J/wb'3ΏC8]2\0(Ca7'PKj     PK    A             2   org/bouncycastle/cms/CMSProcessableByteArray.classkoAe^(X[o]dkIA?1&e$];+5V& h/I9s<sޙ3`Z
C\۩J~JǶc'C}Vu8Cc
ArQs0{y;h	{]iخQj۞g^Lכ>Z/laĹtf{[u;pe
w*筀wh{;{t#BvJts-fðzɞ*y:nl3vcb\AJy
+XPV `N8/ۭŐ
8YŖ|7ɪ%eJIo6)j
II!+דȣ
4it9T\-PT)gXC[s;]_!*U\!B4$%Di$/]gO"!"KE#ՋKLs9O_QΧ:	#bQ"߰z8Z˸Lx7¢茤!q"6iPKDTB&  4  PK    A             -   org/bouncycastle/cms/CMSProcessableFile.classTmOP~6
 d 
T_ysM$t))ުɟF2m0`dyι97Y	 _!!ܒ:o&_еJ'6W7v7;̇)#AyŬI-%, W4-zSvO:6g6yqPb@.y<ؗ0g|4tїbYi}#<+qӱI{W_<IvʻzAptõg'ײUV@͢ʮK	5n:Wqޕ<s]#g?Q,(FVX{MK_Kf%,v}*)㦌.22zdʸ%vdqs'Ⱦ8.wGg(|!Ht4ڰT?uWlp*7MkIkz+h}mx0	`\	a&Rt;`#Ѕy(#x`<Q0
Oy`/@$]n|˰<񩞞hDFSj+!MDPHa yY\'^6-*X>	DGu鶁}P3T3B5VABcAc^>\"J,ul`p[
^`OxMVJ]"C%ӲB@CZ<&rb%KGMjRɋC"M*PK041'  v  PK    A             4   org/bouncycastle/cms/CMSProcessableInputStream.classSn@=KMڄ4R8%.P	E<D
"ofeܺvo~
A%"B&)uE#Ւg43g'
<F!Yaz|`76/!Qt|zٖ}	0w͎0{ǐn{ב;0"B6@@2̐$,-c{l=EOzas^	\utΖT`9v'|;w"uX$Ll 3NkNJx)@z:$bz^O<}>cߓB9

r432GJuBdrj@H8ȓalVļWo$Д`Y(Zp]tqC":,%t,N#l].-ۛN_DqdBUWPN^VH#Zm%a[}A}L59I3nX_e9UbPsU8Ծ9"O?M %0+c<mΈxeרa.(cJQ{>$XPKd1  '  PK    A             &   org/bouncycastle/cms/CMSReadable.class;o>FϼҒ\FĲD|}O׊Ԃ<FhNb^RVjr	#b~Q~R~i^rerbqIN~rno06\jRSrRXX54}#e7Yr@
101 PKd      PK    A             .   org/bouncycastle/cms/CMSRuntimeException.classuOK@ߴi?QJ-xD!o/^MI7lV
0;oް'S̳X@ЌD<`yf2K.BTţ"P:YOBP:~8jnа`0t-d଀u#w҅&ކF
-NMaa`L'qO5[|{J/aCu{'o+S 

aoPKq&K    PK    A             ,   org/bouncycastle/cms/CMSSecureReadable.classQMK@}[DV ťSjodMSMn5 8I*e}켙}{ypC
}`$x{Ɣ4-0͕ܭ
**R%h.ǩIs%aB<	ܟ]>G9afB%|.dDϏ2a^h	m2ɣ7M R"h[x
Ʀ-#ǽZpJ̏B	Iԏ c*K24d;H{zKm젮^~Cz{sjmozTPKĩ>    PK    A             3   org/bouncycastle/cms/CMSSecureReadableWithAAD.class=
@癘zI
*jihaYI6W J\bca40{`!t0uJ3_9KymHӢXXԹ	^T2Ulu)wxJ!Vg}Z3T_6Lma츛#.ضVZ}&ݸ{BWj@{
iPKC
     PK    A             =   org/bouncycastle/cms/CMSSignatureAlgorithmNameGenerator.class1
@Dj̶CUPDRQg]^x(4ra7u !άqM=V
*u,`Qoi$ZwYJsnlQ@ABOB_ ҟT]瓥ۓL@D$@@7PKo~      PK    A             @   org/bouncycastle/cms/CMSSignatureEncryptionAlgorithmFinder.class;o>vF̼׼ʂ<ǜ̒\FĲDļt}FtҼ⒜Tb}gĒҢT,&-H-bg`bg`fdH0$8PR3%5$3-3ZT
l, b PKu      PK    A             *   org/bouncycastle/cms/CMSSignedData$1.classTmOA~P/\
11M%r]ʑvۢ|'iGg3_ X&X&t2
JTB*'m0MmvO[i1].W?9\O2$Cmˆ]?-{~:9qx,N+jnCWaa 2X=GoR^P
F5 J.axc
cLw-W0w03`a n40`i`a2J6b.=wn6SsՎjwTM6t?2'5R;w.\Wpi[͌߈|:pƾJtjv$[I<p,aBƱ
Kqb99鱉2&n#ob	EVO9hɫSOҳlz+;BzuW0Xe)_j MvA-OΈ/0OGpdRAB~A+B
̭P}C+BސGɐLis$ɉ)
X;ǳs<3]"и;$	G=	t{3=bS;\9C4axNЂPK[Y    PK    A             (   org/bouncycastle/cms/CMSSignedData.classZ	`յn2ILBD(Y$ A0bKOę	.,Ĵm_ھ-}oUwYY29w?o 0O]kki9knz/H`Sp}}˪u_PnICs]JZ_Z߸;
-7j7Czo09y|ܵP{`W	Gz'[ˮ^o|
mǷ6:bS׮#q@qdѝz;:=!}qmxu4EԵR66JhEEV-zn
鞈^h$hi@l]!}/06*t[|mz=8nmKPGWjgѤ;a$$ 1ҹtLK,MK$$ajW6zKZ,A,IxɞIcD̈́Z|OnNFtYR'<:uޜx=6iAvn'5naOn,-_Iƌ%cDѹ?zh%HyŴttCv%X|c-qCXE\_D<8ħ
	sz$j'DĒ%4[稷]DV{]zV.񅓬	.xw\-}:=nf %=dvllT
zΈf{յ~O8\K1<-P{ 4Bnh'])buE|šg~cA:kVn:<h>@<~db~)V\C\?%ICDsXq)جoSK@΍iT=d9VY
ήiUPPN͆rgfaDzeƵP.U,gE2J_SrX^5w21z:!uA̸2͹w1"M-Id&fE(̠2TͶ/Mx[.;,lzWη扩F717RDRp]_媤{̴BfH6h>VN^mV/l
.ecHeuO?a_@:^yrSUɞ䯓Sv	;KiS۠02b=*1/mqxn'9mi8W^v>5"E|[3ںS*iH0J67^U!jZJh,$BL((X"qRJ,hhhX.B%VKIUfH|N$ X/h%6HKlIl,H%:%nI%*^@*'gKYC+!gfA&Hz`$B4BMTF1_/oS1qhE;*Rgn0CHU_~c!%qT_a2k,-%GZZr&Kt <EP>ksdr*fWdMe;''F6Ȫ[san6IR%9tꛚ
3bRs3C|#0$gYrLgfI[Vtq
>-MMkzLj"K!@.tWR^yt4ykrTƷ&'++HTPJE2ݳ2e~+gHrl1bHO}V]P9ϭ*Ti۲(ӟszy9ny;GwZ/13^XYgЊcXD\mս&{I#o"~4o9ӷWO(d9=Y996Y-ey}ZvAohQ6nr {21>fȾ#[J>kҺ"v$S>Adr<kx񑑻s7}ZUA.bO7<ȧ~_.QX\]v\sREjУaz5lC;9"[ѯv|S
p-4|I5,E5L*ap9"09oiXdNjˤ
4T32Johw4i
58a6a%xO<&{&L~a~a&"D)~a*Bt&N&W3q.Rg+
w/5Tx7_kDp7WhQ)g
Ә\+Aa<w#?i`LKC2p>0Y,=I  d+~ &XBa(bbg1)fRdE(A1Ɔ
2gmxfN`Reb
(vLoób4JpoɄωl$LhOc2LJ&W1,`r#݆uLV۰_\d
/mlt
&,bI%LZbrLLlxEHC03Yd
5L1iddd5!q-&L|t&p|LLQ1,;eL&dOr&3d;x^!.a2Io`D'a mEIPx77*[AIaDY2?JZtA43ӨG!~D4ʣvGcw\x\lvq[qC#	<^tzĳ
"~LB&x,`s*tw3CDê#~<Z#8N	^m05:Ww:WIA+NWfUL){IxYb
9iI0>ma=PAan}Tmry≨4j*O]FwƗ<g[]l*-#B6q1r$$	q9ͱߍ$Nxpc?^j%HJ+~Վ6->0Hhh$?.LχvrB{@3x>N"<#M]QxU_;ܖ:V귟Aye?:,o=>Nt'3Qp
B9/:,QwptVbn?F8d{2ߤH<{$%sX$1_{>س~D:XzTڻޔۜS= -ݰcE%rf;3]&E-9"6[oVJm,Gd>9;+pμD/R»<lI&UfL]JSe8%c]{[W<'cQ$ahDS)S	KIh>~kF8妱;4c˕l<\.4Ã}
vJr%,E}w&xQtGSy&4WDΨU}$af=8䶺֨?㨳:
o7'<^%nBGeJDw|0s4GE6*nupͤ762=ZÞNs!ē0Gsk|cg1,89RiꠃU@]UK)kRإ*c$(S49r%D	p(VRfZ#WdxCfv]HZ4sTFūnK<<܏D=続q.RҰ|vPI7fGA8.4x]ԏGlq6Gؗ6Rco/+^rXnzaw3E(OkuXU<G<HϬÚ:Xa1A=r 9%JJtm"/_)4Le eR[Shs=R-.
y[Kj>DaqRvtLڊ^~Xs?Q̒Z^b?W.=n-\Jb\N:c*pؕJJ#@Yi2hFA2[AlUl*hUqU%Lʔ+f0IơTYi]U1XN
}HVˌULrKa;2Fngr"y'&HOïƈ#b]&9-(n+=D-6	*αJ<Qhf_QP<-mH*5 tFCtOHTcC!{t=Nc|UxȻIV||87uAx̢bƙ%gxe	V,FOJ'4@
"z鎈QGz:*:̏*-^Qc?PKL  1  PK    A             1   org/bouncycastle/cms/CMSSignedDataGenerator.classW	xז4jc'$]hHI"Kv
J1:FmֲYkPJzߥgz'%4H6j^iKKJCvuڒgofͻwbIIm6mO'#stٖH%$40LSz$A-hw"֎dmbBOFfYZtl3DҺ6N'DeԵ=.9j֠ѝ-	ˢ$`z=ic/a{öAe[sEI:5YڪM3G	+a«H0Vt7֓Ht2I8<uKX^vEFRp8QCYNXcRZvih&IB$5HY	k[T&foEhq>Ձf$ʤ	$4_?L'-N(WSqk9`i<b;iHڥ;d6;!bQ;3cGMJ$C!NZޒE+̾D\3iaEe.mjmRvڌt<=L+431cTԈiO@1JYb4^t	>ζ;RS=.>l}50IS%c릛9?pyxKBRg	\z+~PV׃Wt2͍@EمU\MwR篹_sqk灦5' ԇ=HPMjnUMȾxvfE0E"]fRqe7JgNsYFEQ,}TPPC	mU@:6l$TOxK[	<C`3.!)%-SG2zWݩ}U8}o5:nL8x7rGҪVʏ2[_q;Gȹ\;8H&	Oe`(RI#lX mgs0|8R})Hz=װii/vk%lqƳ~1S6xvq>"ȶЂKk}r9Sfd~
B̚_dwtTY|Fޞ]\޽f=늅Zʆ(bճF봼q[j4Vi^J/\gz4mwofZh`Wm;TێiYvې?pHb&+39+؅
TQ
hTIup)x2
2y6/ܠ`b&
nT<_ELbM
}!/_XLYxx)/_`
^`+4U<{exs,k,x
Z&(8oV,Ex+M"gG`L]L=L2&1;d\Ɉ0/cL1.Zsq>)#Й.cOF8eDVFǔ(ӹay&_br	V:4>L>Lk2LL29!L3anc	[|ʇL^u3vOgDKAt<,$4peѬT6$^-'Dᯁƻ1Si*P<PK	Vhґ/,|/q,iCoqdBcOFrqhI8oNKrMK
n=3b-$RtC[SR=Y⧓g
NK^
	'г(1D'<&TIXQEa$+2~Ό@Pr8U	1{WupSڔo%wɴ&ۮH7)l8ocխzrU)Dc
RThDu~x'ʌ告U_HKhX#W`h?Ϳ4C'}kԬě
Y|R&H,w1Baa9=.UGfP(%<)e3ګ#Z^`-q@kx(L#eσ4=p
ɦ
W\uld?_TojpG0ǰNUکYc헲Sw?i I
HFPP"eՕwh{47Ӄ:s3t	?$ܙ7wK^$j*BHhi=JMa
+;,(PKE_R    PK    A             .   org/bouncycastle/cms/CMSSignedDataParser.classY	|Tdorva kP0IV! ta`23L7i+V%BIb\vڷ;;[f$O;wLx^p-D#zA
LpT/@( BR(&ʗ[5ɖ5Vil&/-έ@,HH8'Z#㍬NBx+l4W&
6.KKČHJ}lqE(Dm;@gg	GS+O7DZўD{"uH
{"м~?HId)M&1>X5uv+B]+@4`I$LsL:c`=)Gi+,2)/)+HĂzcp{vS#:[Y{5ʚ/GHt&d^Rq̈[BlG9q!%:S|%m}BLiS
_Zg8+`èԹ.AbG >'A	F¦e9zߝ"i-i#ErԌQqS`loዯ	}@^ze0RD3o_`"qvꃑ}X̷/'[6,dKufCpW=ᮆ`ȸD0Tol^)ic$j9c01#_hEdƥO_Zw6#0,eVwGUXWHOؿ'Bz_<^QRm!c'X%N9>^+K1IK(QjSgsq'łDp^='W+eb)+h՘R	
{ʱX_YD9\[
@3^aLH3m#ͯ CG_ܔQc&ڸoϐwVIxοnk嗣3#娮
&ݙ"ڶncZʹ̯[~}
qg4?<H,v_O(Q/	cm/	隱+E/Zk
	cee|f*̓WqϢhhg+r$9HP[lh,\]Bc*i:3bhV;͎Қt
#KzDd1[ǟX8YzݑNJJGo4Ҥns"i4ɉ+

+nQXТ!

m
k*SUam
6)|XCa>pV*):
v(v*R)t+"
Q
1BBGa
{h9%>Kj[d+l4
Ro
/W/U8V1e
kOߐFVaM>KiZ4<3(oU3l\f2jtfհRn%Yhz\9#NLlpb΄YY6ƕ5[Ʈ:&E9zs˘ɮd=D/
0BYxXdۺbʹ_܉tNjTu`klUmoEqXbBe
T,KybI䤭Ϟْ[-Y,z lnkp9Tj$&
Qs!+`5?q%ZfYW+G0q>3o:+..E#0Ւa
)f(ݛAf򋈁MG)lE8q:;.B&ڠ[ba`Eݔ}(e;ެ0wtYP,ȘO^tG=/K*wdߍr`s:BcM+p1M׮184-&/9q^1	8|KxJ|[d|GGCs:༎=
(Y'Ju[`:Q:'u:np:2ulOtLOu|oA7g:p-:x['RX?1NsSg2s,KWt,p~cALt܅q%Utyj:ꘅq[ǗVu%/@M	&rLT^oи

M%T
 0Q`UE>pj4O3fkxk4<(z
Q'LNÓ4WS4MWɣkti
|	X9Y}P15qk7ixnX&pr
Mj(YIqj|Y|H`FM8.|DmL++5QZu
&UCRV$]C?5
45P@A䫴ʅh.<Nv -FM!=$+U.<C%Cht?ga:q	W/A8q'V,R0ƓYx2Og0-sdT_E	eRR~Vzjp_Gm?S,ڧkr=5XrВ_YKL6qzj.kt
SG&LHCDu{HG?G]<ӝ^eǽn -;:Ur`S~V<)˭Us(Ŧ^yïx>anpm({Hֽ#qyGC8!vWҏWE=nӭ%^ɞCHZ+"\a)W$i<`/gGtx'=1wN$s;gNqoCet\#os@0SR80pF+
@01p^ ^ *F\6j'=QH^c0٫̩8U3HG0*m&ZJe1k^XcU>Z<CxwWUMmR=bf!oÃ-GaKʽ4HoQ7o^:FT q׺˓$We^K.Ar~ze["^[*tk}So1H
}xW8X{g.oʉ]/:Ma3I'N]ŖJ7eK\YL%%`-15%Ykngp8hLcG;Ǎ]*џ/ט)S,`N?P&i2$}UKזFUIet,Va'Ō@)&e sy%?WDG]x_G4S4-Q/1e@R/ˌ{w<O	'Κ$:HTweEWs;9;B}/Iz>I~GHmuݟ$i?,\z`ք	+:*{L+reݺ,Y~s4dnW%p D{ÈB3n@~g
{^|.+w"gI\*)rZ}TF%m':Щr9UF>D?Tg:+9T~y13Zg?ՌUV*\1JvYp0&Tsnիלx^3@A:Vg
ݭ$S66R~z0IW>Q嬎TujTOU!:ހan	l?(әE_ON4Ya&7Z]GuO>5:JgqWs ISfb U?َXRcQ$Gz0<@mBdYǾKC6#M
72mag-{lf{'=LOy#2rM)ue|ct@kԓ`sJ(Xz{>M)<A./ncPK   .,  PK    A             Q   org/bouncycastle/cms/CMSSignedDataStreamGenerator$CmsSignedDataOutputStream.classWi[W~èqI]V10*V  ֠mKFf&vںtome_<֞; 1	<sss~/ 6",
ظ\\sKdnQ5ռW@IOXL?{42&T1Ԩ=*#
IDD`
,n\Ƙn08SL!fnA ׮p<Fl1F햳00U]2A1U-ZܭNɧefS,U_|(p"FQ@iq
U"e#L@Q3P1ۭv&́2)x2
"AtO}։tluLѢ>Rњj,M0՘/0{ҹ9SveOéQ_aƘO1z_S>c{Y=D@
A=!v$0ks=IRQqXNiym塍u}9L
rEA𵴇RQ+(<;gmߘZLOlBJr1PީG<Y}r[Pg ti4r@۸8uB٧3u^$n"l&TdNS
RZ;EZD5"<""EԈVODzDAFw	X1JM@y6 MMpU=
=[]}}&V@V=UT>dNjjIpB:Ђ3ͱ'?^kgyPUK'Az}u]Njj=yǷ_O&?E'ssINwzzh4f|9<uZl׳Dt˪^г9l:V!~[F6qX	]2JGs946#OF1ePa\2@2ȡHFɨ2[pX2Jq{C2n2#c)q+c2܈ȸ;ApabAspD}08$8pãxK|3ZmbІ!JG OJh:Nrxëv4(KЌ8Kk|:]-}&u%ii;3.%3tNT;ɧQO-)ɶ%\Ӽ % lIdz缣x[3]#8u]8ӗ]h#I_@2d2N.a~]D&%ɋH"YKY.f]mL2CPH$8y-|Be5z5cQyNN 
Z8Q|fSaH78qk`Q|toᲀ1\

~:;kqw>M+'Mݮ1X78ڻǱ|W&X%I]xb]iMFb°sس΅!q."*~o+;A{.Ag&R"v\kȻtIMUK$PK0    PK    A             7   org/bouncycastle/cms/CMSSignedDataStreamGenerator.classW	W4hp{ix02qBlӰQm( d	K#i}ߗMtqRǍ6um޴4?>BA'޽]޽y?<6]1IƑN<dWVH'CHh rvK1_P0dZTN뾱SP4}	c*aM
f$
E#_qMwGciUh,IaNƷɌwk[dGh&:	;	1ڮ~&1j<4݀[@MP7h,dL|&c7ɤLܞ?)@;e''sQӧ+('AFSV	-է)4	.Q`gQSY=}=~}0j350a-tg
O#ĭ^ޣ'jԬ<YU+̔f
#fbtJnƂh"?FXwkHmD=esǤ18tԳ\+Htyͅɸom.+'2NoɃM@7zbd]anܲU~󷔃GO.PveQPUkMjFMgwY.ydDV1b	znEgL*!QSKB}%%*င$.Uk%!N	mJ8$ᰄv	s؛{l
hx|o>@	x0HG̨{muAI{UB"QX"20Kk3FW]Ddp#<!A:{u`bɐ:(tż*pkQt
)e4Z2-pQ]\_ydc}gzdry}wJf
gKvvW'+S66-5jTj<^zLRLt3UI"%VzWz(⺤76(P +`3L:lØ&+PP]L(S7BT6I
Q&gT
RpN)؍0`;"
US
qFA
Z`(EBA
*؂s
nyx3KTP(؄x0Վ7Lc0LL}vы2&яd܇dL>Lfd2LL.cߐqd6+M</120Qge܏0y!&q<
#ʲ΋ErvCwx\^R>=}T:mqcЬTkU5=:IIkXFO2`͓_ybefXLtYx	^juĳ(;/㛮I4z+ nR}I4|Knw"S`+_jw۬2.&=$clM5S74d|O.NxͮJ@쩵<_/e]~Q{Uϒx&͐ǁ
0Z?1g!
dKTy^UyhXȐSpVզ%/e*]°~	K4NHʸ]Kiz{b.$58£T`\,KɺқѦ2^ƷT%6ѥY*gG}fRV˨p܌ywF	0Mt/Z[
i[ZEK~N*?Ja`T* I,`[YnZZͥuUvV3Zo9_"?ԵbK
X#Z̮{L>SI,<̓l>[QL~fOJ7(ZB5	vtӦmt
3 }<DI9̭l#$/U*o"W.xJ	+3{r1klK鱛)%|8BWP_PKc}^    PK    A             -   org/bouncycastle/cms/CMSSignedGenerator.classWgx%ADU)`@E(f E)	rN$$ G8S'N'Kı=XT~_oxMBg)tBb{Ql91Ƞt(E/
TzC@pxd`1wrh[W9{z	ą13#;wLY㮾N'A3w'މǏǨRjC*8bC'V/<.gZ$Ttvt:|ٕx,Ld(35SjN|.Joi0Vc Qz<rrAWj\]eP_`&vFHI
b
4C̈́>}Y
u-捝Ғ~?H]c'н$Ѹj1\,t5.GqVt7̨	zTgFCXX5}+P8EYQTչ^I:zy:^3y:8ͨiJŵ9?R6JBTʜWҜeVO*8%=ӕ֋O%
.6T]1%tLQɬ!NIJb\=^	!"
L$f4
gSri ḨWiDORi*j[Uz$pʅڌ֭EhU%Qc2_EΛ^"L.RQHYcx.7%ڪg'XBHIQա$b3yo ˀygPffp{Bs	{̟kIKs
.W¼5ɸfdsS&.E9&S_cL(<6sHJ,u/MHFU=  3;a~Ǳ~et:tC#Z߉MJY`<j:Rm\ȆM7æBG{Ke|r%G=,DuOš$9i\"s[w~̫saՕ%x)PbExNl77^QFB	J4/=5w%HpDLIpLi	KpB'I( $AXUSH0+AD *1	4	%x
5Fq ^*Gs.<
^qi]3hgk-o T/gvy)u3.-Z@꜉djy*o.-ܸ^tŻv
/cvWUZ79*0~J鋌vhj}K%
/QR.L\V]`Idp(Ta?杫ϤM^Pǝ1#ɶ\^'Jle2A9AA%AA5A
A-::
64l"L`+6&x'9jl` ~!C^LLHN@p^'C)Xd:`O˰  QIf|2~e <ENwdz`{epe+<i	~@C+<~J3
Ï<1~g/	!^"6wK=XX$JDp5|~|#8'>I)O||_ "L| 
MLY
mEoK?6
^"xQTB(6TO-G?!3XQ<¿Zn-LӟUוl PXwn뺁:	YUBVY#deBڄ,BȭBNmBnQMBnr5(B6AȍBbq]BɥS&!	WaϠDQ=C)^;";t ǞVchUպ&ughOveh/ҋHZ.}C,
ֶ0=Mv_e<~{Gڈ[MV˺ۮ%+)$2x)nS%7u{~]zpO*hbc{.;`
w\[Kp"s:JsZq.gAt
nnk_da/_ܲ;we|I87s+FYŏ~Z- ,,Kl>IUY]8Ar}0v
EM[6bt&O*so[\¦B˾Ev Y3 ʟw,WKldNrd0';VNUp`'dj9bl5X%'.`8
p`U1X5'5_bvasjzNI5[K_4%`۵Ď`8o-Y5eP${!p;6 #|acPKo	  ?  PK    A             *   org/bouncycastle/cms/CMSSignedHelper.class	X['	al$⊱'D61`H<K [HDz}gs4uzM!)ءMn}}7wfV	$=ɸϿ][^| 4pȯZ!yv[U7XP[XRkͫZIbR `_"!}@:Co(hIlmkl
ކچkCOwtں}W%`צ^2 =E-7C	Rs >644[8KtQHZdtGOi69-CH[xR]<IEhsvm
jq;65]E$C4FsS1k>-v;3Pّ-W
|YZ{Ygԭk㒹#(6ذJv\W#wRk]Z@ЇX'JP=jf)5٩ݧvSלh\jh򊓆VEfKĞX˅cq_4kxV
jwEcZ{X"yq(8@
Rm@V:4;&"*?*#*Kð&6g+ϴe=ށfӽ,#$ߛr:K032rU2k@f,;x.9Uo1udq{ې6Qx9<$sONzE,GoCb.9j
F8bP^Af)cݥQ=a52I.4ꡰ-SwX>mmk1yL7.uN-1x ʆ
|SN>tiilS3nk%ؠgGt4PzXҠhP+lUv^u)ݜZ,gȞXh8KՑO&(Ԃ/%І0}qmmk⽎Ģzb]z<m>"TD爆zvl|~==[|~!뭇Ģq ՘-dE]kzlGZiǰ}`fuzr
x6d-29"1)IwL,;-%X&`ޔ$dpn79JWu̘K3d~f-<nnK1Oݗn!]1Vިh8LCOaG;>L3/ťqM\Oy%fkyDE(H^3Z3xiginC_,=CЊ~̩hL".ѣ)v;v1ǎ;1ώ2_v)8_

4;*RRKna
"

F\  @W0`
)د*L
|:Sxk;g!9y,8r,Zٙ'syUHLuO<

+iYY5cӥh|6P73yVUʑsbsg,e1Y1۰MfV홭7rrⰪVeaU?m/㗱uYD)\+٢|-*͒Nd/cʌ8mEF\[EO_x_9
"YV#Ogʻ}td|̅0|F%x	'11͌)5uS1Ng1`팍M͌ƙ-NF83g3a\`\P;W1a\˸q=ƍdr.(ͅVVj(.p؅r<B
OP\']h`,.,.1niY\XϻP]\X/eW_uJ|݁Gރ2~9bocr}㻌1+o3ߌ0x
Uk&<F>P ~I(`2(bx3`Ip؁'O>0~ǌ0A8q(uʜx|F%c'8q@e30V:i:nq"cc'9qâ։:'K8(;XJUN<#/ͨ("O'iQM`_4Hbvs<t
q<:TgSB;IAU" O!qkՄ>,nǶ#P/r'YNtkǽ]5GPPs uq
%})a^Km$UO˻kx\NcSC+;03y2CYV7Y׌h#}<>)"]$&1xIY:,nm*jT퐸jR\wXܒm鯙7dNan&-u+xP `E2q?Z*5<),pIQH>_Y?w{H\9)1~I/@A2Ѫ
Wwի'ŵowW["9@M"n:n䵕Nʍm,8$),M=cXRYH\FT&ĥ"6Z/I\Yq_Eq"
F^iOSxb׸X_*i<ݐm<Ð>Cn0d!
4OCe^ClCcs
o<ϐLCn1d!pvME32h*Mel6S	k6
-r6VSYgds!׸5!#6C5CM7׍;Hn6).پUqT.t.4&\E3`\1 PKlJ
    PK    A             ;   org/bouncycastle/cms/CMSSignerDigestMismatchException.class;o>.F6̼;FtҼ⒜Tb}g`׊Ԃ<FS\j3R\2SK|3sK3D5|sK2ҭ5xb`a`gd`qOIePd`rAـb`B6-* PKsx]      PK    A             -   org/bouncycastle/cms/CMSStreamException.classuJ@5mҤt&
q&#G۷RP>%^[,\.;g1o N#أT)2U{^ԈEh¡15,Lx^r<.s%5ҫL2ՉA̤NMn4SCj6b0EA
&>h .ll)O ~SYᮏ-:OX?BY/D|~Wy\[|PKz     PK    A             '   org/bouncycastle/cms/CMSTypedData.class;o>NFԼʂTFĲDļt}FtҼ⒜Tb}gĤFE\@榸$$3030302ih`O,3w3XtTfZfj5#;+#݌@@ PKDq      PK    A             :   org/bouncycastle/cms/CMSTypedStream$FullReaderStream.classQMK@}nGhնz!D(Oth$W<xҋ (&'-=0;
of?l̠U.lj3&{3,_[auzl?&$0?;Gc=V#ēӉIIішM\/086C.ui!Aՠi`0a(Tſd0k@Aހ&1ӵc&)jmɠD*gfؾ/'XRT3͉E˓X4L2<s(8ͨ4=2%_.#מX/^Q&U;IV)m)Oc
пPK!&pk  ;  PK    A             )   org/bouncycastle/cms/CMSTypedStream.classTO`~6jc &&_(*qJXeGR#HCbk??Buscw+9 A#pr7]ۮgRhNQL?:9dڏ)%BI$vjby{,GiuT[[7:'WOrcU[w
֎(nne'=6UsԅܫE3 k2K&E6w:0ڐh>klloL0Kᆴovh!"&SDn=""zWYj
V?!S xqDPj"|BiK6tbte!bDFM-2.	aT&1mO7(l2QBbLHô~LI'z	Iܖpwh<d]|
 ]KGGR Ț㘥{aThNȆ9BQ. (0]-ەoxx.yox4 SHW$c08fCLx Uҧ2EY+T01KɍCm\}X,ROܕtWזq3tGq	<Sn,;6O[2'=PK`|  O  PK    A             #   org/bouncycastle/cms/CMSUtils.class:|3M6K	4@K8@!AJHDZIN/wnCC۪}wU[$4U*jR|G(ݻ۽=.?f曙o{׷Rl(ɆܨM7AȪؼ+}ЯBd46uhrZۻ{ZۉХv!
/T!ʁPxP5!pp՛[B~vPr$Xݱl
o}?ͽ+:PEA^UNE
i߯DTb4_bŧ<Am,ܡC~ڎW#bYUe߀.CjJ"苝~êi,rڠ|8Ho8P
#J*oh,ׄ6ʪLNg YGmJmդʚ>UQ[N30Ѯ
[5nL@ѫо6i@hCaG%s]Dz|>G~j\/A"aMҴI.iK]V]c&m!6̵I0ŉjUT	OR|F+A_Wga9@J8
C|څ`ݘF~=IԯѠҦ[I"%Kt;)4Hyc6mL[U 6뤣Q"4Ҳ2h
!:Z|ŌာK1%==u"4
1L0_HYy˰|&I:%$sHUz
O(J3Qa&/eM6rЧDgF90蛴*ͽg?W(	O$m<}{;V"vUJN!\!:><v)	hr.aǒՋ{j/i`áu9Ҧ {{@%T!ԉNmVH'D,ª3{B&
=
5=t;OND׎NJe?Ĺ~"[珜K#k@7XPsjr_֔m
k.1ӢX;K5t@{d͉/7JQ&)qhuVo}8,4G"q>%_'G_5GM#4.ap6=fJidN	儼lC`M	8 !gkwUkBaӠڨ47sۙN?_sNf{?W۸:SuRCGX`Y*~Բ&e3U߯ĺ3	m
*2SC[ĪGn
vce'Jp7VXșpbE5/`ęArʶrJ7"ZꀼBcc{f$^;b!(w}6,g`wY¡rXv6(>ogSCNO8JW_D΍BoDzZZ('ULo2~%Ȕf;qor3h:%0\LN4TIm)s66n!:ddrfaj-@խ|5kDh4:4o՛蓀uH1bMF:b
@oMNz|<*:ruNQj-M@(
ƫ~XP[.S)p7|FXȘhʌ/%kF4]5;UEk"STCM75Tۋ".%W
?Dg@.55wl!7lφ)0UzP_\,% (@H!vSKL c|\+ROI>%U\-5|ZY>' _Z$ _k|]oMv	p \/
(w @
#vc~"O%!CuV a*D~Ѧd
TEsl?0`[ET*Zl^:uabۯ5k*=h
Mc1ubjz#zzE2?Z

,om'13l䌨|3vX@i'"-BVoabS;}MJ2=}R 
xSDtbd'd%"<=H'E;L١kU;zájyR04u)H̟7appzKh5$Wy<jm	닍lampT쒥]YPt`JYW>YsPH;F*U̢w+E9
Sxy"ف+LVVrc*Y 6$C&&sC+v2nOePHcIU ,Evu1{i
});SʷyI/wl\Tا0H"4N,;Ɠ钞3CSԴ>bt">Q&u-	EhDZFbe+!|JCkO=EN*]'ē;"J/۞
Z7ENXNlOIMObh*dtI03$2b\̔gA<*T1X|0A7M63 00m0$	ԸAFSA}r0[c@Qe+*1heAJ,v̓%(eP͠	0Tpkqm0(L2Ab1J$8K%X{4	~`˙nc8W
xg<	0gAtGUI0^	Fqb5HP%Xu܌+yJnxK53Ө_P΁9ndAo}s%A7M6300?\ |@9n`AwD8[E8>"F6_I_JG1G|L#&;_(	O)oDgfk|n?᯸ExC"fpExo5^٢"Y~H~w/MmTw[n]Z"vës~3x.<W0 ܃8
W2A.O0j.<\8_ʅ\8¿qg.r=BfCR
-&w| L(|:f.hN	Ŝb.wMsh4>r÷ 
23-{{kn2h.9dCV-1ؽ`2~M] dA< cZj$a_B.wrZF=Xo^Ed{ q{m[}v+!n< s+f:(܋j][u0Vȯ$*;lpguo9t8xl̅{Xq\t^k/e|
G't\3\p1/z4tl3xwKg5rh&Uk32̟ǣ)Hbߩb,Lwc쾞v |Zp{iq>ls!VT{sMնzֳu^.pU{~, =.1(nkcz$)8#+mqx;#yw_*BAI
SvR(~IPP[՝.UuZ)cJ֞s_|cxBםq͡Dq琢r-1[JaR̖cw\IVQ6.j
lŞKk׿F7[2N1o?G	7Ik&CVGڪ-2Pm8<fYUE4\e:{+
t\jl4[=jW`:BO4\ࣻO4G=||"OE,TOEQB*a+(z9~OǺ%Lmf.2~=(}:.,8	X,t1CՄYMrd_mܞYG~Ϟ}v՘ܞ<ѬE$S@Ф2L9Sl?";b^ԎDkS#
Mrr)'N8vam
ѐ>F!]I4QԺQSj8G'hH?`IK߮$#1>k#.[Nr6.4
AovbV+QOm[Nlga&ֆ8b3l\q.[9eFXO%JK(Gse1:j
rsqxrSm,R5E:H,kq_Z=}y,굷4e.nӉ~3Kg;!PYJ)Rs7x~:
uQF0#d<KZ"j&mHtN. i/ċ#K-OõrKuR-%lIKys,ns
yh-VR;WUi^`?NGX,>IV&J_+'\Gҗ\1ݙ0x/Bn_كͦBqC)5zBexWˌnv-:]E/m@m($X$HmE!qa<#!M!Ylf`,&dGء	q[plt(6zB[@mx/MQt4=71MEǇ⽦}moM]1+x46?PK0  8  PK    A             B   org/bouncycastle/cms/CMSVerifierCertificateNotValidException.classuN
0 jqn>,n.1%RIg9	~%nޟAH% ֦;}VYm+A&[]8YAɅ{)L*u3+欒!vab5RI>GH৺u0p4{PKΧ      PK    A             F   org/bouncycastle/cms/DefaultAuthenticatedAttributeTableGenerator.classUVU&$CERimRh%|bI
Sdr	T(4f-W/;(Y+;g99jAD8DoJ芍<p@lmV<uOoIJ+N\loTg:-kHwY{b&_m3	4r\3]Lsn*g+ZLQbz<SbbPZ"ޓKwZEӡ:yOohNƲBUkjY3Kraӭ]r.
5nX&uzlVm׫m[(o^
sw0*Z^59渚e[-)X7-R:g<G}%cXN(6MI'!v(o:erє};8>rgblRK_$`V[kc-ck2OWHӀ;ڮo(=2ޖqV92˸ }e| cH%qo͘MIH.P(Lldhr8Ǟ8g\C9bGԻ`Vq/t򟨷T܇g}p۩3:SiDMdPt.l$;M- p# "PЏna
ô0n*P[
DxgD1-+8gp zpK2=Xa9+P!yWeWu.VC7!ʷF
C?Uw	]흻+HIhfM]~OO"7P71oG""2:))o%숔B|2&eZ(<j&3:6p_uul>}g'hu@MDxï6q5O&S
T\rUb\D^ 
ĸ`;ձ7[G-D>r}HDvv+M6$)7ǳ=q2Fe?}=@j	#M\{
PKOL  d	  PK    A             D   org/bouncycastle/cms/DefaultCMSSignatureAlgorithmNameGenerator.classxSIJsUdEBIZP*"&Ҵ&)sQA=Pq{977y{qֽF7{*Al{<U
V%ZMy]=[$؞-l/ll?|/_2'	>3{p6=rJ*vx5S<38s6,hi]mjkQfy9+K=Fezؠ,UV+8SrOSVkGcS]CWZ
g#hSE-,Rc$%-oPR
e/eGJli.EWe5-έɘTLMuLTL̘f2Sr[i95}jK̤QIBou^]m&{SHs1m6)_emk:ͰfAII$WUl.YӒժh-VVlR+rV0ܯ0kLZQ3gƅMˍg)5tC-ljmlԦtM2HB
̙MFOq+YODe2e&-ߜ(bZfJ(g,R;3<W>@9yg%αOu"ǻٜ:O8d|"srr!rhq`BN8ehiyƕ,csVy-
KAYyj#Ks[/c7<#Y>Z6oN2o%VxcYɍ1s#HzQ]%VX9EbܚB!W?R1NT MX8d{ÝݑC uJoyՔL"^_`ܿZ$@-JjKʴ`!ypeXs5$;BsjH-$G1ʛ2(m,"K't2K eU+igi#gCw]=%VRWG(A	rb_'m75ͻl3DK%SƝTpGԟ艅GW<ESQ L6UjjrUeg\վ>x!ב$'>L6Ui>Le~snЦ{|;3#K#{[Z(m
Q˰P!i]KjT7;aܝ@$n_3*g,Ov/fn	QC=&\˶ʧ<*6цZѕpC-2~ 9_+NT,LKq_3[/;#cH%n5nƉo,31:2him6T,t;ʡ>5rCPr7+|e٬I<TC5.ާ8p4.<}CǸ&X-e.ظ&lchk7SF5ǶԤ%dy V}  l)|Atd>D96div9tՒR-YK'[晒MzIocLl'Y3hm[7*Z}EXꍐtb[ƫX)~8O|nKnK^,5>TıO1+?jDB7OWB(`*bAP aGYޚòM3{`(FU$\:Ztlm\ETU.(SFVYGVjHw\
~h"$#?;4-.kNkJae]W{WO4:'"!?uJ4=r6:=ِM^aLoE4ҮXAXWGzUQF*
tiaj_p<j!=%'\m}߫JׂE}(b,RfXĺ?)!Z\6R[Uu.=e2aOBU`>5'<w5xsb!`N(]1DO$їvQ-2LYeXmw:7}CT%6'3|4~Iy͠[@ƥB2ϬB|V7OuM/*z^[xITZWO%5
20ӊ+K@??Ká~sJ/,񪎲[u=vnv֎^2䔬jRHct9O2g"ѕۂl`+l[l`;6^	MLIM\)-X`5MV:	6]I,.6Sf	(l6W&vl`͂6_6,$:[&r"u
Kn,&X\`=l`[-؁$";T;\#;R;Zc;V;^tQ>8xu)r
w;+:x94;:N>wv]8МQ+NuМ]N&6g#
ߪq]&3j&vٺYU]XoIV嘌b}}\9]$z뵷Rd[};SĮ#EPwY9yE%eU5
ZvN` < <<<<<
<l 6OO / /// o ooo   _ ___ ? ???   88`@ @P@` 0h Caplllv @=0h f9\	4V`7`!ڀ݁==^>~@ !`	,2lM;WĮr?(b7x9?.bOح	"v"p2p
7ϋI'||OAiY9yEN4
ɟ9 8ɟmlv @?g+;󶓀S ` 0 À@	0	FcR'6_???l.pt`G`'`3PY@#0]y@3 hv {}} ?ځ BX
eN2`+@8_& 1  +Ua1q	Nm9:(t;kCG G8J,t7m
y@90rW7QU1ۥ|8+hn]\\S_]]߶]\ Zȟ]\B~CWՋ	`9UmH	<8ٙ<c4{[l8/V	EIce1c)cQ+t}ϊ7Gk#CHl@a	ݴgv3覽nN&MMn8^ՍtZ9G/)X޾N{ %S2XVhI%_km@R
LAk_))֐65b
iUZT:%k~I9b
9]'N؝SؙLC62
9iFZ!gkr6$)҂9d CЂ6T+Pr6,)w5GRz5{|-ٛk}hܗkh܃F3"͐j{ٯ
_ۛf~mg{3Z/PO~қ"S?C?i~AM03ZS?
0s@S?
2v?fw#wit~cuQIeC%IQ+NRE'6Mu޵ޙaktBbj5q-8bf־Z#"%ъiJt%+6DqP%׆)1JhmcJj+@s(Ѫ	)l/`(Q]u~Rt?1]KtJ*{Utޭ]]竕ZM1<}:_Խ:St~R|RJ={zXzL+Sq?F?fO7aJ
J
QJpHu~Ru~R;B&r&R&jt~R:^:V)oVjoTʭ۔J	_=)U+r2ɿF):Rg:iE)zoRNJѣF:?^t~RX>1J}SF(OW;:?A/u~R_$J3Ig)Vԯ:?Wu~Rwʃ$9kxWRoXXi/-7~LZg1_`H)Zvky|YguFqvA(2=3FؕO5SyrNJ65km٣3q^SFX~%iT,-ξLt ]g1e::P-cEkh
,PK2  5  PK    A             G   org/bouncycastle/cms/DefaultCMSSignatureEncryptionAlgorithmFinder.classRV?$,4IڐK!A)J'J$@\I{}̔tw'EC4㟾{ruε? gtNXSRV<R%%.Rfd]','17\\F=\'gW]
VjX5)bdLҽa9fiY	YVK=r2@ό545igLUu8aUMr:XasSM5*WVM	eK4eNSxN̅>qhP326n
ûӡpO6꓍sTqk~`;4U(-~=L=Wʇjs[OX˖QGֺ4?č2⹾hyT:1	Tx
?ʤʤǯY6=&wADjz͗sB=
ό93(qp.6x\vpwk6LhnϪ5CΌh~FF+8/₈^(OUD\qC"񖈷}ᨌ8CfƿR>r}ɣxB/喺蔀r$_e*9vix)XepSH4M,
25+[~ 6cqq)t@HA{)t2O9~ML%'ICƣ$},yqY11J$F01ØM(2$xЅXCbsڍ4>c|20>p"&_%5:e~AB[Jw*:	F=N_}(5)(A&ac?$zv0Zl"ha	0ODwv; -<{H?G@6XѫmGFD/Gt5h/=M

we1['jh/PKvC  t	  PK    A             ?   org/bouncycastle/cms/DefaultSignedAttributeTableGenerator.classViWU~&&L&-bARiBX,e[$	a2d3J~%9~+{9'O<}Z|xPmrh-NYӄ)rј,jotSM>YLIRqff.TY_ܐi@NH1%-'rYRʦl7Լby=sg^^akLXvfܰwg5˴{rE2RzI)(Er[V{R iҪ	klxж0JI2U]쬳XLjJZ]S*tPW[hʆ!%Y2̂m >In戧.J̭yTE)[wm*k|;BG`9UwN2{%xƝwg1~@X+
b",K備Qs6YkĒrIqZZvNM}x48ͣGx,Wx*nyƣ!Ա:9!<zT7UvQ{qvmtl {v{BD1znGq詗z9~n:]#ku8Vy+)?rR9q{g+`NIܑj)"k"L0beCF3Ǵ	ч7:"Z1+"9'q)mHyoV3ƱmiUdlx{>`c*"qW%,	`E(>d 	*`dYa ?!G/i=sרVppA"[HcӬ
4ZUkVQ
`|aNCg3'M|Nԇ4+3	sJUxYms\X¿BR_P؄ C ySt0.ecU|Rgchw2)5K9X QVhLQS}",ZHc'⎸h"^ۄ m-F
Hл5m&ev)C#`OᦓJ|,U|*ӡK1&ʩ|'[W"0}ߑDxC1PK}  
  PK    A             -   org/bouncycastle/cms/InputStreamWithMAC.classS[SV/؂D	MF@bRRRip
c4~_{[;ӟ2mweOЌvW~{9G>B Tޓdj%'Б\yDF>q*(n%	3nX{"]yj[N\V]2)rjm30L,kXx<(V4q˺Xʶ;ˆFAשgꦚ5l~sM/mzo8yM*fUsU]%oUܹ]
N\5Kۆ&jV1W1̂^8:N]7TM Brlo].fרVT5pzkU")$T\N:⣽\ޫsKP$\pQ%	%\MYZ!dlt?7G9q/q|cӔnM[{kX+\jv9N^AjQt{2qJF/n 7e$!YFHFH#~,dDqN\',Sadc1~Cȇ1bEY<`90>a\T{tA&NH]3uvJ A!yf4
iCf*Y'ݟB:6ۘe1}gZ*A9'#m03HxpI~Ƿtw̼EfDX#_"諵Լ6Hv#p
'/@4t؍Fh.Mٵh`_0k<=ވ>
Az0',Ex|~<
C{^Cvi_G;X`9## c\<Sh xU%+ڟ{M3+5	D-hd)5od7H=7}Ă&*DI▸|
|APKH  ^  PK    A             '   org/bouncycastle/cms/KEKRecipient.class;o>FԒ̂ԼԢĒ"FĲDļt}FtҼ⒜Tb}g`׊Ԃ<\j]V02aUWУს<8PR1'=($#333-3ȚTNZP\kF._88Adq17 PK    g  PK    A             )   org/bouncycastle/cms/KEKRecipientId.classRMo@}'q8$)il'`@܊*Q!
RAHMܺv
9-	u
RyYϠf!k;2u̗9cg]I:/\W	&CF#_@:bDN_느ֈ<!ߐGA=ޞpbi[ΐa9v/Q	9FwK8KN}
B>¹SHFُ#EU*j*fT\a0ce?]!ES긌d%(!CC5p4FhYC4aQ<dX]/xX$=a#<aڌ]g(1V@bw"%(Xa|I!SMM4!LZؔv'EHLsy/j&W4^I1?Cg1h[Tƨ݉jEe-D7R)7PKRV  Q  PK    A             4   org/bouncycastle/cms/KEKRecipientInfoGenerator.classT[OQ@EhQ`A"J")Hlvi!MM$wqN˥ЋaΜof3s;9lchFھdZLr+::myrd4-ëۖ-ǛE/ig'cgpg%m9HRoL85B,C;iJ8994IٙLvPCK/ZIsU[3Zt{KwSfԇ陼ƶnfMJaאc5HZ'c^u>h;[[gJD!.FW"ew;yQ
	$tKpKBͦ^A6C>!WҽFD:זꔹ \Jnؿ)kVY.R3Y\{ҳ߀[&Mr)hbU+qn℟'{4$^TBA')}.Ѫ@Ƹ>!\x1!>m-ԁ;bJ T1+C12FH(bF愘gpIzAK8kٷ^ƨ ^^AB/i7LVZ%,B'X@B "] c	|bh	9Ű-{k^|)aÊXJKA@tBW$ڭ"(PKND  p  PK    A             2   org/bouncycastle/cms/KEKRecipientInformation.class]OA߁-KUP-" mHQ(\Ԫ$411\-Cdw1x?F)Q?xh-#&s:;ٞ?>0GJX[d%mCgˮWCxV
|S8i׾܅e`/p7qZZC=4_}+Q1t^[kڔYEEH̃*Þ_2׽׮Vnq
qslV¥ԑh.fah8u,Yy8KniD3ZC'2y:Aa#f[}Pq^E.T\TѭG%ckfǦ9wJ<rدC4(uĦG艦1'O0=؛g|V>U-r{r-m3'gPwnw7N{M:4ԡc@9.cPG;VP0C![:0,7:0⸁i22j;z1dᮆ>1ف&<3h`3H[4kъZYYHˌa*)zz0ERE}aG!IJJ$I&ߐH}=iLU1Ki}-kFq	PKZ&md  g  PK    A             (   org/bouncycastle/cms/KEMKeyWrapper.classN0iSBB*Cd7Hv%XLH< Y{8:O_ .CI1AOᵐJnG2gW
%	\aU*-\Z1\~_&\vFf%}Vs934
Fo=BIYдuͭa5A?I'$3N/}Γ2C6ױ-w;U EpWtn+;|!pϜvj^#PKI     PK    A             '   org/bouncycastle/cms/KEMRecipient.class;o>FԒ̂ԼԢĒ"FĲDļt}FtҼ⒜Tb}g`׊Ԃ<\j]}V02aUWУს<8PR1'=($#333-3ȚTNZP\kF._88Adq17 PK2   g  PK    A             )   org/bouncycastle/cms/KEMRecipientId.classn0?o]CKmt"TTA6@ۄ\eH<;$I !m&RsqW Qc0^kw-c.|0uAcB&wn<p'	ql3̇ku½yXrzpuM8ޮ'iwM[aD^0TO͔MCNC^I="Vgm.6,Q.ţ&ÔQ[MJWaVQ}ct*z\jRC8e]l4TcAtVs@
WDi
J(ʃqLi'TCY)YTL\f(R%W
2Ka^za]r*_`6,)*_ѨZW?F) r1Fȵ2>@d:d)$S	2MF
Or	EP7wߣTd`P$2PKu!  &  PK    A             4   org/bouncycastle/cms/KEMRecipientInfoGenerator.classVmSU~.IYXRJmKhQ@T*P)	XmSfs	a7nlIKf̌~?q<g M&8~x>wϿ
*}PBXhl}{<;]im^ei"!˞i[)M1l˓ّ{7#}EiIG$қ+mvS47MEnITk&w*z[*M3u"|&|fj6H#wL׭Hg*dc%rc[NOt\oKpz<_1Kkvɼ]=CwL5.O(+Es,;
Lӌ]7]9
7XZ̬J,DOYD{%D{)c[3ֈpr((jz+9A
nm24mkɕ[D6ϳʫ<;Oy
.(xKE\Vw=#
P;dO
Ls㝾\66-&P4>:Q2ӎ?6dھ5r7ɀM6[o$ Yv%rK4 qkKpI:pz$}7w` ]C<u.mۣ>m|BO9\045A!
o")^
gQ7n2j8[44sc_2|bTDHEiqdTLొr*&}ICH1,1dfxO2,qPDzkNGȑ1|eR@?T=BBX Cˤ8b#>
O'O4
,L_l|K\]a*WC4W7b>az߉0ci
qV=PEI*5L|>v,KDKV
r*QmN*60A(N+y߹οƠBrPK 	  
  PK    A             2   org/bouncycastle/cms/KEMRecipientInformation.classVkWE~mUK+m KE0*妄b)VlٍJ}sP9?w)Ms>3;ϼ~p_+N$*%3
≍䚂ʁm4cX-h%gVY	zxUc+8/F42WT/[mR7괨6uz+`]e2޲Sp+0+i
s։pZyZ(׺\k[UZ!fڛ*/޷#jH1hqxqKzFo	{vF2s/JrhN#6<sWn.!m1[<HO#hrh"ݫͅԞ]v
Q	(N^UW^KDF9r>Eq]sV}ҳkG]"Y^fxy23\dDn.t^)&*>N'>)-},51M]LӨ12my˅maBH78Fl!R^;("D;fT@ϫQZRv*,iq2S':֑
	PT$MTB-eGFrkSN;o߽Dep
45
g$$P4<.
/H[CbN@74

%<i
'
75GV~JxKyۇ˘pK¼IHaIG*F*a]*F,aMH+aC%Uq[=xO*]>Qq#NWYH9uH?g>7vyeUC)蒉^M#_P[P{/5Rǧc{M<@ޜ`[#L(1ܜiܖ`ֱψsÁ7&g0ʐfg/Ifӫjj{SPG'!Al2N5zcR>Lt, >/FSQM#׉oK=T)
eRh|С[PKa	    PK    A             ,   org/bouncycastle/cms/KeyAgreeRecipient.classJAgԢjh!V{dp=Bj>sHF,
 4
vqύGtd6#maK
<{5S2W$&>V%(\cA;Gm;a%(vo~t]9??
z:O>>[UYn5muMH)La[=_☛u%71oEZjUs[`	PK"Ph  $  PK    A             .   org/bouncycastle/cms/KeyAgreeRecipientId.class]OQc)K"(Eٶ
*B/cPNvq[#?EC/41%?8gJ i/fϙyfi|`K1-m0hC\-_1.Y,3Ema3p=w5n߯	
yx0@mYެU24*=>YFI8gH_UDE{)CUy`V\ݚclt%Lߙ-<\$c'Ė0$%QgH:S9/֌
(TpQ%nZd)7a^ʆ)tJa>Br*,hFwkETd/Vz#&LeX{n
H
*S8s* MWTaBEJsMEF)JbwƔ4	hҤeLH3K	ͷ;
~mIbG!?$Dc
!Fw@ĳGx%D@f@"gcd5;@zlB+h!d|?T41&DDM?[}3-Bjr/>!g"!0^=X$KKJб[c ;ReE\"O-N'GPf2)MPKT    PK    A             9   org/bouncycastle/cms/KeyAgreeRecipientInfoGenerator.classV]WE~lR,Ѷ|)mj$@k͐nIvojI9/zz|gl$GsNޙyyvyyw`Jh]LHW&İa	fbH,:%I 5m#ccYCD7lHnr`Nnwn
n:Sno&aw"ٌe͜Ku&6N3~Τ%ʤh:ɵ\6933O
-+ᴑNM['<:<r15:JERܑN0-IE][jFar*A0
-{KY̨[\'^:ߌdls$SِaegUk7uda5
ON±)b	!oTy4aܖ
NPιSOMN-6"7q0=WPg+匹fI8ؑv+v7~O<HW
yR؛i#W5:Fq]'KMϯua6ڔ{jaV	Ć@5ocUn-T0ˎ!jz){Jb\_n'_E/3pI.n^S^exCP쒄.x1=q:}s;r3wtNA	j퉷z&X`91p:ԉSƛBJW\'ǽ7L+_K
%+fպԠW2,jE|LU`+gQ|xoZ`so]f~-y
FcbFt
0~o*ARIADP7[b8-
cFAYa0̋ނW[Z+che,	,uxW 2"̇2pC0ncU9p>5ѲY1e\{¤dzhZ0}JG4}˕n#	G(d_!!u4I>ƛDzܖCCP_Ѩ>j;BEC`!|gV%SNBEܙ1>G![(<@g	ɲV~@FǸ ǷJ|"6ː">UA-|9>o	F%'JJZp"Tv9ݝ}C8Ob>aѧe8ׄ =a,.5Q{sI
SE'B*<$PKjy:  .
  PK    A             7   org/bouncycastle/cms/KeyAgreeRecipientInformation.classX{E~M:vQD
D)*Aі
TMlDoJ}}4M}yMgyM/ ,Oj	@n	֍偺uCVIH3ѴiMKԓZiůfL&]F"Ȏk6-n]$4ҷIYDSiChF=ji	I89YFfH{#qr=|4EѕJR	3sq

#Z!CԮ˒YB-a&v~Zo;UK~)ey&ZNqBZ[kDRR*TA=6hq}TjfEG594ӌfNJW؛Mn+2s~b$F5%=mN5Ch﮸fѬB}zaD(8e2jR+i3NgRZHKB]%Ғ\"w1ˤZ%,tŴY^Ʉ\݃45TV4ϦtGSDƫLfrT*<g];WKUTr?V&nϚcjBNini;+!P%UBi5Z(yQ #fRֿl|i|?bIS]kēo8[E  *hh8G $)D\'p++.a%t|:]|4L.L!@M>LF2Tx^ljxr~&n=Y)TMSЭOD*A鼧m]tQŠ[+&"vv&RW
M^+*zU.J-D>*8ߦ7D߁yn%nYwkUT!sUC:j/7:8U]ERBNQ+"+K߬Sę7Ex[/ZzkDDY*'r]"eV
}ѯnP cRW)Xf6+5
fVlQ z\k,
:p3*hİllNG\IH(P)-
Tp*8M6#،(C<
|0y"&;
lvF67]2VV==2zq/d6X<a6Xǳ'eDpKq<#2/2S)*xslgAٍxAƕ]	6/t9ȥƷ,Lb<F@
}hhE ~^#wnS{>y9q|u9|VpGaא6o/O Ngaٞs8<E(bCm>>j#Ws#8<AG:N+
	AA
C8Nr\19)HB Ab}`!
kCx#0^'؛{cEED'5) k;FJ0J;fa
+,{?@U	j9|8qrH|>C>/w|
{`.au4˰'qt"m c@Ez4qAB`UC,}Tb-3b`r#_ࡆdq%s<$C<ic8BE6c+ھGX|~_
v"ԼLu+/PK" e    PK    A             ,   org/bouncycastle/cms/KeyTransRecipient.class;o>FԒ̂ԼԢĒ"FĲDļt}FtҼ⒜Tb}g`׊Ԃ<F5jS+C02aUWУს<8PR1'=($#333-3ȚTNZP\kF.88dq17 PKӕC   l  PK    A             .   org/bouncycastle/cms/KeyTransRecipientId.classOPǿnb0	NiG"fdA}.ص#
{ČDQs)@&==o? <D!i^2.Ħ!=w\;^D7O{==7=	neX
]|Q	alG=U{{h2X<=ͳ^[!
jaᜨԜف5+>i
M:CyuJSfnQ:c^3Tp>1RwoJj@<Ţ)>MQNKb׮Kݏ<sKHt(#)c2 #e"W)a4\M
i02ܐa!ߌvo'0GJr$
&zDf-%Kab= CmI e);Ff2ۇ$!؄K/TZ0֬/FթSTRLPi+Yr;{c-tFf"۸kqelN8LPKm    PK    A             9   org/bouncycastle/cms/KeyTransRecipientInfoGenerator.classU[S@1BPUEm(JPax
ZmIRWvFfx66E4gw~ͷ>J$@%C}x-.S
p'ynB|[yװЖMJ̄tt6νCC\|0]X~w2܍e3mssi4^fi#Gːi8ntۆe8Ԭffԅ
GkS.M_7,;[S5rUs!uzfiAw[F30=稔벭׍AYΙ,hm#dEQ'{4HP0MqzrU=5r)dL},T#<5H[e%4J8+I9	%4Kh*ႄ6	C:'mLZ}v#cPEM;5Z\;׿g6Lm
>W`~<ZyLׄUTVhWůO,4cHL0>OĽ"(UpaA	Pp}
.	DD~!Ȉ*8
U,u	q[;2஌e1!D\F'etaJFx 2!&&
HF14!>qSo&n
u@ Չrj1@1BeZu>@cSǑ=D0[h0э|lK]\O>4ZD"%<BؙhGhULKH&w& ?ݤZ
E,oo,(B1yzKBǅ!
W#PKkB  
  PK    A             7   org/bouncycastle/cms/KeyTransRecipientInformation.classVR@=V񂊤Uܑ"^u.1ҦL:)^fPH)3v&'}9n@
"z|_AT(b;߫`%At}D'C
x>wL F=^y/k]ShlUO	`?i/¡-\{&$%\g$n'3<[ۙۛ%H^BI
PИ-Q9ZF:_pe{~VsF_j<9[9"Rk;9pF"i;_kJuGx&tǆ͆c%SfT0NJWL	#n*M^QdT5`nkg0eǰ A!MG-N_ΐ	Cn"nPό~Z_4JC+|iR7c" n2f+*&:r!J0C{)w}m,˘H?S#[;(p@<
ʺ{Sd<	_[5>X̦]
STm&ԜNjJNk؅
%
P4A04ԡSv$5DqVCiGm8/y40\pIv)+H઄^	$\Wq7T4_¨)aH%ᶄa'aPEFTa:&ghP'`{_; (RITPmE<jXO`zݑX78.?b;Xx[>(/^ӫxJ%0(C$CC+Ig,L*zRgS7C]E<WB:wL:_PK*a  	  PK    A             &   org/bouncycastle/cms/MACProvider.class;o>Ff
0F
h'F_Gg ?3/A8+,Q?3_ߵ"9$3?A ,T__\X\[4*(,3%nT1'0  Y(
bq00  PKąg      PK    A             +   org/bouncycastle/cms/NullOutputStream.class;o>AFf
0F
OŪف'X&3/ĎA8+,Q?3_ߵ"9$3?A&_ZRPZ\RȠ__\X\[W($"TF.e
<@9`bR ,v`L`i^ fA& )bI PK|   R  PK    A             '   org/bouncycastle/cms/OriginatorId.class[OQeREC#Qv.n[n-&B&F_03̲>dg?3gOo ,NfmTpd{%z![+(5mM]5ՊFƱ)?]li]Ԭiֵ}jYuloUP+Ex-o	TYJJF/f+VdK|I`Z+*jɫehjVfwəuL\eS٨EZZ 0x[,j1Լf:Mz̳Q*M$Nͺ=cm'u$K%ᚄnj[ą+b'D暋+I6]$#am჋WnhWF 2Z1&LA$X H	`  D0f-6Eszσ~
ÄC:pqtq{^ɷR%w70sa|!N1{h77+j$xp&r IH^(M8 !JnCv佱OH}p~pWD3BO-3`x1po)':݅[#CV}BzՎKL}o7Ia,&XC);</i9	4GrvN6?Fk<q?/	ZJi6{rPK;    PK    A             2   org/bouncycastle/cms/OriginatorInfoGenerator.classT[OQNrPv[VA,kR$xe4el~EI|d9ʭ4337gq,14Coe
pfɫf]>YQp|9m
0t'*]c.v-C#P۶AUSV7ujuc䕤me윲iMm_SN^WԂS1j!X;UJ,[C
Qʻh\KV>hZicXf*tCfb_ZD)_ne*;}e04&Vr'E):GhprqstptW`/3`
tr0T'av[
Fk?XuGJC58ΦTTO+wʥdI\+NG-D?'?n!?|B܀,a!"MĨczHETB?&%c	w0.ĄO$=0G͸}RVntѽm8~E]S7:)ct>ax@r!="Oл-aS2;B\g~o!~";H9"S4ìeBdF*5
GQ;rω >51o?tIvGqrӟ8\xX9قkR@1i3W\+'Z?Az8RL	6/pPKV>  !  PK    A             0   org/bouncycastle/cms/OriginatorInformation.class]KA߱mC̊%B2huݍuWeE?14s^<煙7 {36F/!Cl_KeŐTRԄHNTݹu{E]PBϪm߽slpilY <k/TQsϫ'qC@Yt|DcIRGvyזaەա鈓3+lFᒘ;%R4,0N60a ebi0&LDUѐQ*Gq$1cĜq̫`Ţ*KZ)r2/2"_RhA*C:B(`壘1*#Ov}r1L4uEuOPKfb  3  PK    A             1   org/bouncycastle/cms/PKCS7ProcessableObject.classTKSP.Jx#
XLXRBY4bLn6Oq[n
	,-G9<n~Ő
|UN"HUQi<J3!ߌc
3n&=of(Mrf^iDQ&7Cͬ&KMbY3|!S1yʬyNfYC7+ۙQ팥/UsNu05֙MyQ9orsPgRƛͰHwX2u$31~akS1#Tτc
<
n#پx:Tt	*$TJP-V%	u.K"uU0%4Kp^ӈZ%0zRܴf"1u9mr\խU$rUCzr2|rр(B2#WF
2J.2q[;%P%D7#DMMЊJь{B/EibtzLP:-L|TTZ0LIC"tLЮ+_1c ^Gt
G/"H{_0yG# ?Ѻ>x2M<bXA-3@K'Tp
6pu*Dء9鉆]U}WJ>?$Cax˟Z*ym;r]cUT:])iE?PKΈ    PK    A             +   org/bouncycastle/cms/PKCS7TypedStream.classS[OAlrUTiKqE"JK5 ťEm["/7|DK;z;79sQ<΃KpdA
S)t͚\rs=K[\YSt9ǭD5?vҖr>g,ϖ^(9нf(]ϚƖj:|yK3;9,73lE=QWԂ>̦[\ԒmkC)Tf$EҶ	A	+Е<V?(dIXFP")ꢈevi*!Bb2$A$/YB@BV	mډb]6#
eZw@hD<_L%|pqcgT՞iܜO|Z{<c*:zFu'"`:BwK+UX}>ˇF)\CT>xG/nM"[b##2Bq2ǼZQ`hH[j_hG/
! Mk7yddFc1Kp4x3Y&H0osNHTߟ?DhL%0Et/6sк,%ٞLª"˧z'$-!ZZM6=hc{ΙX𵓍{=oRj
V\mrls_=9DZ,;
f0o,t6.d'7PK{x    PK    A             *   org/bouncycastle/cms/PKIXRecipientId.class]O`E ǫt/ءpa$DǍ
/!Ynq_&
$FoPsF&^y=m"z2/fVWf[ f9MWQ^HH֔oz^GQrmKgӨp$ˑN優U׬*׷؜SۢV[*mc
[uffTZeX^`8\/=ڢ5j3t/×ʲ[60H7cT`s:빝^tkH(<_^LqH(5UMqeJ]1#=w^*Ҟl("˺y=%<
kr\2x_5AhXREDC75$Ր$'Xf`64n̳,fòr/Eư@8KlȊH56t
Ft "gα/~gt ͑Gŕ9t
~ UКV>=h8Q4p"'1ddg0$?}Ru饟0	L~"i2{5^CD'xxPKiRM    PK    A             0   org/bouncycastle/cms/PasswordRecipient$PRF.classTmSQ~Jbf(i&cf]V\[/~MY39G5lIM{}Y.?~~`22|2:d(2:<඀[mVD^^r<"shtf9_L0H3٭x&7*q+_,B:) Q!tW$EȞ+56PWs|;M4;zE`Xʫ#[keZَfȲzYXIdIbF,0x˻XxN=c6zV.-rnptcsfXڣI	7$ܔ'ᖄ~	VJXm<D$P;;R(=7lIʗ>z+pMz1Z<_T˚n+?)p:)}^:N^aʋ;dP#x0cax00 0y-'9JڶR¢fewBCAGY;tb7v:R(]C`VP
Eh	]s]aEA-O.݅P:Ye2)Fv;X<SbRR%KOkZ%5ĲCUg5DwWB:~PK`yǕ    PK    A             ,   org/bouncycastle/cms/PasswordRecipient.classRANAH8D"!d粀bS1ʊ ,ph=k͎
|q<
lC|T
/@ȕ++WZ!Փf~P&'ɟ{_	J QKb]Ceyj;G(L͐mOǄ=bc6V
gjDnp>cR
K2p{Y4Nz6䌦>qqG$yLʉx#cǒe/;הXef+n~'uO7fUZ5UyVݬVUL&^6Ǯ|Y]q*c3Rd0X`N\ρW J ;1i/?{<<J$OrQ*ϱOeA2$^b^ZCPK_Ud,    PK    A             .   org/bouncycastle/cms/PasswordRecipientId.classPN0<7ml))	65MJj$(`+p:`w,	4xA~N^(t`\5F	$834e+חSM҈{lx'4Ie<8,\`Vq-cJA]8#BBBGzC?,%+:*9h58Xg)e7GtrNǆr4/$SQVQ9CpXjfQ3+5˥U\Q\C)@4TMV<{a^i
PK=D33    PK    A             9   org/bouncycastle/cms/PasswordRecipientInfoGenerator.classWwUt(ȢԢ*Rܒjhk:	R}wE}_F	.q㽓ԖcΙﾹn \߃X&p[ǽCqML4ƴM:	Jww"N֝٧靱	S݃ՙVjJA=!}=6
-M
	
2
.E&%%7tvδ<	8nneuRd$pɆUSnps=£	CwOu\.d{_-}5monHpMӱN&3QKѤenlaL^!CXR²B'oaNҞkx2,ڟ@+y t;IXO<ӊ9	M%@Y3=cB^-y9n6:L3
=Y"h,daKp
k}mٮ݆'"$+wmP2X>گ8nf@fΤ&Ge5'5ȸ_~hL%ҕJ%3d1K*jrtOiKh
5ef%B6?=OwrJ:<%7suqp0WE[70&KV7A [`/Ƅ?5<H8A*%Oiҍٙ{NjAϩ4E2X+ʸHFKelq6velYFele{i8晝Ik"l.%Z
ѹf%϶i%˖$uE=_prLV:'may'<[
3mY6iS8w|S
NӠ}Q\Q#_r{4Ρ<3O~PUYjK1\E*ݴUWf2HNa88aŸUV U\B&P\41oHbΣ;T<AW<2TĈ%2gbxd7ƛяhMprw3yp/}6c QpPC
xXA3.uQ=<
v;$^Up#U
B>fx9WcЍ>p2t+ӗ*HI%aQ{ⴧtXGE	p?Q§TR|J%URT)R}&#mWj-&QҀ?ħ%X箪6HtVgZ{i""E|]P;JzKE|-+fnm 1)H$&$(#Է$'!7oGjx9eò:{,8%p
DU`
MsVZ4Eh-KO,b!圳voy$hetf%OObtŉ {<O2'ZAf6=%LSG4bKzޙ.֡el/{hF`١Fw6C|)dVw!yJ^*_/c`H.6,FP=	CM%-ǣӅiFɸ~~H֧LmzNm"~ߍ_PKd+    PK    A             7   org/bouncycastle/cms/PasswordRecipientInformation.classVWWB&Z⒰A*%!`(ZGL&dMZovrz5J9'f6w{'ف*]G\a GU5/ޝ8{'|^_fcvѱ3Cp?,@O{;,?Di+rTIEe2]d}lJVXPZcES(!rLO6q2{1bAKGmZpL*HSG-iȚM2߈J(8di]EF1U.̠Kh>;:<G}qmVYh֓v)jBeJ0]6:NcU3.'eBl:ҨE<yҺYi@3XQ5f1jV6t*7FG*eQA99/'脳2s]cɤay	iH<)S4#'vOOpYIy$Jgj.o`
9y-sn=1ՠ)mĒlre	V{<Pyy*kW-%mX=[!+41.Sv}.n[QHJ]WڈSϖS(b"DlY.n"ZDhMGv":Dl˘Ml/SeecKaGh+]qRԻVIU,χd{JiY"]fk|4r]Ae-Hi+Xܒ6]by~RcޒCyT.i\<wi-}Y
3%A&[ortcsg3.8,A "$C
JĠu ;*%,M{P#vs1	kqTBIX%<!	q\B0,OHX'9<%aNHP$܏j<q*jqpCC̉nĝ؇I'#!N2/'|Н3N19;0Nq8%'q>
'Cx55@WGJ{7ư!+'t6P WR)4s*XM@4
k[Ҹv_6ĥo_?F5ͿRE]fƧi]nzdVtb9OЬƞ'X2o!	`	iK4I[x/3FlF=ET4z"o}#uX6j)\;[fWomČƽ`3N
AwW:Z[-Ŋi|g^{k/7ح(4f	*p{<U<G&_h?fpo~V븍kLB{
)FJl|ͅ:9PK  ?  PK    A             $   org/bouncycastle/cms/Recipient.class;o>VFĲDļt}FtҼ⒜Tb̂ԼvFv&6Ff(  PK3(oO   R   PK    A             &   org/bouncycastle/cms/RecipientId.classeN@)EwwÊD	LB6ܘhL\ >N4I/̹?_ .cqSx@00rl/dp|'B<	7wgi:LWr2wgZyO:Jq Z:GQB"Mz( #He;(99ehw^UQ]G#VBEs
]E*Bג_PG(UT .xx'{9nWr|H'(G6e%jW2ٰΫ\mO# {΋q9PK~@    PK    A             1   org/bouncycastle/cms/RecipientInfoGenerator.classmA
0E+S\]""* 
cIIiث Jԁax7| fz	*#A*Rd$bŨJe$ԹqqS;m
/s sMƭ.k-8Zma?461
h*71YiS1.Gb[gxPKߊ4     PK    A             /   org/bouncycastle/cms/RecipientInformation.classWwUM:t@@Y¢mB!-MGH'qf
}+Vi*.<?3I$p{޽wҿ G-Z\VZKnt!	V	2fnwKbY#A醄:a	;|LB8[OmHIjfj# mMxT2mQ:.c>ms@b
[tXX8IadU.(G3<%F:9:*Kv11J2>*/UC-%ɱtbވ)ތ05;mJh8YDBgZ]5	툶jG+i'"j /ϋcsSqTJ$Ԁ٢q?kH1 $bZz*!(ʺN){uUQ*k~>i3Ngh\씈h5yC,AӏvUeSiO^eG7_B|Ċt'DL#/Xnr8%91 YS-
lVTWHU0m4=k|m&Cb)PY_1H
L{KYEvLaeSn+V:5+!5c@5Xf07vk8k𵠝:s1sA h	PS];2$YFHFXF-2*celqke\'z;d씱Kn	[Jj΂Ecb!|l+-P!hcs۟7)DeeZ^AߣeE
{vƢk3$rqZ+KK_ZHO|aLdѺyNg)_;kV3GluPNwiTx
%>WJP|eo*6v59{=hUS|R+Ǘ9*n@MRɍ8bvub=jTl`r%F*V3C%C
&q(Rw	VI+:U,CBEBQрL(J1nBEI
ݣb:${d2+
Y1ܧ`?xׅguxJASp3g>< ^U0G<lM&29	&/+
գ3yKLNc OR_O@b~зT0Re	:Χ_=Zf֒[1~BeuZʴ$\]Z'Ax-x+io)Vyxg^F<_aOY9˃VB@{ɝ*Z\Sit
MEU9|1Orx^t4*^dD꒝b_igưw//ǥq\
i	mW7OcA3Br6ccpAڙ;!ERM&0uP-N_z'&p
;iM/9VS2:W+t'UIw9|=o{q7 -I|fnҍ_$Q/K)npFM񤗥L~gx~r7.#w?WBE[5!_Q$-9K)&tA
yr  S-}/~A?PK9x    PK    A             4   org/bouncycastle/cms/RecipientInformationStore.classVmSU~6oM[^JYZZ՚ ($Ԃd	KCɦ 3vƩ_茿:sv% <{9Ϟ?oulH1PKmA=Cll4Yޚ	b@R匢
MVz--eLh4%=<kbR[$
T#O+5UsyT2lxPP7zUh>%Ih儺&j$:W5ZUy#gv-_Ȅ\j#V,AR]^NRN1JMRZ͆NQT7TUYVE'8
6
Vm@W:izFlďJG]IiF(C2V~4b9<gb9Ch!ױF.WÏש>v$=I"ZwݸZRrڲΏp;KGO씹ܩ=nFkNL֥I1%ܬ1::[2DFh$6Ͱ˸ o2:|&<n8҂A2Őnwy#2b1|F7nXp7
aaaaaލ~̹io=!0A/_{`[ xC:OqJTįbqp褨ݐ1l5	B_fք.|IvpNhos,вgQs<;(0JA6dF(Z:w&A^SiAƗOQ܈+62D:8-*>g{[f2RTY:a'{h]`@'HUŘ@@X #lM7xp"-$W{,W*feoa{ʒdCWf %~EW;cm0:4YV}&{~M#loz/J$X8vS9Z%ȯd2]k^ũvP$=%Iq
EX\aq&DUҌ%T=s
!>ho:Y6uk\SeqBYQ69ՍPKtLӋ  
  PK    A             ,   org/bouncycastle/cms/RecipientOperator.class[kAllKjKo!%Жim6$JJ<Ĩ3g.;|	3طyRe<uڎ|ƠTꇲ+9m_;}9D(_iwzz)Clg-\nY晰%C.^a붬o6IWXy:qD[6&`/p,bժuaw/:>n\O(uQw/r<Hi5,iX֐԰aau99
@doeocO^6gFvf㳋7u$#CCHGTcQӻXǽp?,HaSq(yH
ġ}9MW`iqE4b+G>k2`+7/H(.`WQ(3́/K6%7F#uZё^]&(0,>O(3>" vI%*)SWz&
PK  O  PK    A             #   org/bouncycastle/cms/SignerId.class[S@K,JiM1EAEF;>qDDԑ:8r<[R@fzr߹߾XCD;C`P6rpʹMA)sO%qoX-/61Ī/z^CsR1CB*5Ө+--y*a)=C56
%=nq?T}ưU4lo	{Ac&Y(}ı*=m{7%jXaw\jtlᛖޭŅ(Fť(ַ*CRn;2+.N

Z}Q2<zួ_.d#^D>R׵<@jgNuC4!Yyȃ`)@CRb
bYq\Z&őč8q]RI1/*EV|9)rR2
)x<eK CD'{:LU'ZhGx[9+>C誠?`If(ǘS"!<Uw"w]-r $G>.%hDKt!TӖ&H}@@j[NbJHM/S$(4JMAk_cF1Otv(GHJ&uPK6ԅ  p  PK    A             .   org/bouncycastle/cms/SignerInfoGenerator.classW{ȱ-GI0V`8@CGd%@F[qZ2Mv;ݽ;ݖ2cGn}?n+ɎK=͓}zzŅ+ : X n`c ఀHS	 o~ȉL3f֌H J*K)Ւnj8I%,2i:`<6Դ1<=IOݩdS&-֫x&[l6m(ɲC9%yLK',I[Li5Kqj
	
Vs#3t=8ʒqD=#uH֔S(_JVP)#ZOE6Q)13Pp,
J%"qԄ;1I5]nO!<bHK#؏jʰ2Rm*69֫5+KZd_c
q崺kЇdLrFiX`T\5[)"uy.
&9Sj
$-ɤRD#ܓ%EP&oK49&c\:>Wt#=3=the|B6CݙOi0n5\&W1Jęc;=}͖G]pz,#YLMX_geYtWCC*m*S9X30:[4ʆMtKݴt8F-eY,;*D3FܘSKK2(6[9Idwgʴɦ;5˯U
R\M
iPYJr+ޯ4s1'SKOӘh^N)^
0_ Cnwx=")K^q׊'[~="zE[=":
h9x]麑xیJk
mcJY/tz+Hgεgԛ*՝Gٹ`L⍑NKX"G-JM\1cd-
qyVՁÔĪygjڄfhg.rU21'BvG'ךXyD'0:eb t5xp[*_]Fdu[0Y[̎u0d{bUIi$	xiڜ_]U+<FX}V,^7|4^RhZ^)ma=t帄2֢ANLшt0de0㌌0QZ71hePY1FF3d4aZ7˸o[eldl#.1dl2^،8؎PZc808O0$O14>Fy_ppߖ ވoJ8Jx_Q|MB_	I|7$hD	
88f8gHbtxS$@*Ic͐O1ۄ8ZjN!ژbbꉉs&npwML$:|FNEATE><іY\biW\,:|ضMvD»X+Zؿ}dK\dQlUJ2b0\`[vZa_l(6{n`^8^3?X},Vn+!E^ҨY45Q(QD{Ⱦ
S6Շ{}uw籹SJJ5?
73%L<S
Oί{d_%!eKO{	^v2K%u3U)ǯ:9Bw?<ˁR@bXl		sXwr;Js2f2z'<ݐ=z},K bR7l~6E}ɑ\ދaoKk}y<Itf m$kW3!F8)"IopE@H7!ЎvCa?߫k="KC[cC͋2<a5HvtH~
x`$:}]<Vm)ұ&-3[rAwhi
Am,~,"ȈWVO6a9/YlPKhJR    PK    A             5   org/bouncycastle/cms/SignerInfoGeneratorBuilder.classWSW+aEE6 VbQyXh.q5b__4Cc3O=gH)}s.w fl!1)`cN \LiUtu6
hVm]qۊk$gSImu4knȚu)Y%eMeLKYoS9'2i^]Y;3}ʲ۝(Yv6z_U7\P]Mafīi'~q=hj)6x~:1CU<}"^UhAm7~Iz J;uy0X0)%sc}5,4ޞ[6Z_V24T2SVR (va!d1l:s.X%+q+3b7|CKV)^42KJhL	!EO12^jP:dZYQiPcb^veYSh7jS_F]k05CW5Ҹ-"ZDl]"v%Mn{DO".bѵUhB@O%S-Ns2r=QI_mzoEvemGdt8.	"G4);\=p_8ho\TVxf׫SУWi	35WTMWy֓f}Kеgժz!ڊUKgƫLsu,&p7i߇eRC]K:*ַ^ou%TYjU8)%8)!w$lz+!Bc !6I	M̦#wF =~ 6"^bolds56i6ÈF1|F'0pGat#F9
vSlnqGǡ7m~:l7].vLzgL~rOyTǒx-	$~Ky-iJm=h"'=6-_?clyfʱ9XC8scv-{pG~b@^r%[.W%&O&IXCJ/3po\v@-D/D>QAvgO,+) ;YN/Cx.?A)Ssmƨ0Ghy|'zAgx `ާhamEz;8ģXs	>{L31"V|k}}O 
qYGO]`;eV|ǶZ!}"EtݸLPKDWY  ;  PK    A             ,   org/bouncycastle/cms/SignerInformation.classZxTln$< (BID4f,lvڧaXV[,V|TP[~ه}Zۊ3ݽ{7$mߟwΙ3gfΜz lOs4XnE16zaGmzw 
L.Eh 4m U-hU%´mk#*=XUP Ai"44z}}`O8mc/U)ScZbF 51|no84g%	bf7~ubo#
F4&6oLlZkj&P,=`FEp5};ۍ@x3K.CXInyԌEcFgz'{GAG돘QRnhH57!|GˮSG~7)EIL4Y${v%K#սfeF65")6RJ2
#Z1d2Q4::?eS28r(M3~IMrHnohr6y2EL#KFo x8d-`Y(Y#arh'V&[Hhc2H@L):I`cljR.D#mP83b^$;ҵ.U&mPl_{~sSe]s[gy-[*|v}))p ifgGك7VPf̠
D|i[I֭|X
Ihow sdw?Ys?ӼgYoQNl1LItUl)y@BhO#h`g1ZSoHRw*qRPJe[AI0	#&H0JSVlS|	b!<nd,I>-$e3;#ALar6%M0#Imv:C7M7KX?2sTafLN6:CJYX8%2&Zh"L*Uk`ҋR63lLWT:3>u(c؜2Nv1n>J<E+9̢;ʝ&vf	3"3-+<tf2Kt[
wZÔfűJ6kA߱q1 U>r^ $7sBf:-,'v==Y(CLU28v@9(A#Socfl=6YL1rcbC݆iYJOy"Td~3i@,oDݛMa'%!2\%)zKҁRD)tB1u~놮N'%*1
+]sNլѹm=bKB"iT

EGV v]D
+$+JGz)|}z#Z\O
,	/B!gXGLE7
3DȌbH/"Sf2c.3r΋9ޖ)](7+d6f"+G_bs9[3''+dܙepVn6:3W׷\1ќNo$,]>>,y9u5Y|>l}{cx6&_N":.k3--"
o
DE}uR%5h	mjD;DD"m)grbTܩ6;ejZ73=+7szm1\Ÿ:Kܗ*Q&41tjt85R.կh"C헝+/N)J3v<xѣͬӱh{+9cUz{ط(jX]i0#BF/"
oh'wXرHH.ZZ,b#Nfm$7S.]N}@	
Vd~!&fHN*e6w:[.3%9һmhwYISh0IR
4AS4`4
fj0K9`iPz
h
ޫ;*xUSa@]*\5*V*CkUx
R:ޭT
R*ܤ*|D1>-*|BO)>gT
{TUϩp
WvPN]*|QU
_Va
_Q*|M{TW
:McVGax껈:GvDGaNgb\1Wݧ%dWVgJESlrz)OXf{%UT|.~&EeS4-Uf3$s*M[hAYU&^VċMT^qj1]Q76dQ 5IuԱ/!a,}Aﴇ,qsshΨBeΚ;8fa䘸rtf=J&xq\G>E?58s%ۥsWzrxqyAǎenrN*?ѓXQrjԽዠ`
ES]b>e_=J,"͹%]ج,45.K+}:28VCEʜ7εΟHP89~"9
㔓/s*DTJqs|ܻ8a/XRغ[5:whu&}vxOiqGsf{2VۏRPǡAslrL?gG/:` C5,bX̰3|A!ãC1 Y8Oe8Y*ux tUa鰀ÓPCaC<pp9D(buxq(֡
&P%\@XF3Z3\u:t0\0D\C+`b-ѡ*<[q\k밍a
C"ؠR\÷qxjzV\FeIsqWb&a<O'.:
:tc[|Zp`tx2sgLСfLa+.bXUإC'^?ӥ1\pO\Oaa#t_G:4av"BC!°xC00PBA>002]1
>.7?w+~cL;w	o0sÛ^0w0tI(pW/2|>7"~Ӎ
~A3y?u3<K73<FobǍ2(a#bq/oܨC?qc1)I'WXB.!'-nXƴx?oX?>3|#c!C3<w=_3pT×0<,8t,ç8.WkE~sE:~"8x'"dlNǛi&~7I|E;bog/**
8
 PʹJ9)[2)
A1>fdNb(eHYTq[젧B>4QS5zu \]{T^p
5CJuC'H9sxyw@PP=S<Cĸf3ls)q\b&iq1i7x$Ru "*AU:b
#*NT@Q\q&"ԩn>y ꚚλMy4	Բ{eD᱕쪵쪵쪵ME"Ni4%㪫*5reԘD~ _ך^k_gMS^v~31C.+"~}H?-Ǎ2'd:Ǉ%Cʄp[LɵJɴjߦaxk^+J))NאW"
RyUI|CBax4/ob}!F6GHzo8iYk$W_=tiWfp@5MtrL
y&S\4o^X-Fp禚#P6Sc]dW:s\)hُRf-s.01QdjCR]TzPav+<TpRmWV`\rPVࢽ{OƚԲ
I+`<**W3TTT85*v"L\@'N,ce!lT)2)@yN|H󆔆V)Xު0u@.nD[ِ?%*PPhǕsy\
2﨡QtrLOAfU{Ķ'س~aQYޥ
ĔGPa)GssE%I^JCլ@eP%*u&[:)B2i|<+o|QW9o3B׊ðB0l(-_)cq0]%q,^WRDxTqgsTyp|%Mm(H_Q,2X3?QLMK|^g91>x,e#0C[UOpb!
X4.;jONQRϷ!^Z/3NB3O@	e%~d])йVǿf3
2ZſO{k<#&(aӐR=Oj{FJ&MܓIBr[HOrRRs'$ʣT'P2_iS
y#0՘ YZ<K:x0v?R{@ynsm]w'ub<ʑi
.e˩H\itV2-iO#MΖɟ{z&䳉H΢9!:3Ҭ~"idt+
#kjA,l,XEZqJIqR&~m!<sѸV,zVGG^?,(͞+Uĕ{{i@}bi[{C
J
肺H3삶ð&yi	헔H2Li|qR%ul 3Chj5?*N*(}'7}:G¾4gMq'=52>*YgW:P7Xs>_/YLhU&6Crx9u6Ձ"t]u*&Z"d9=Lib.2M4ܬsy]\Y	k_d|8E۝v? N]u\a8A,lp%Q8\FeL0V)q
E6%xhj4K0e&,SȠ'v	^?Anbj5?Ew\ڿP#
?k3ǿZ&',7PK%t  ;  PK    A             1   org/bouncycastle/cms/SignerInformationStore.classU[WW&$"Zi$Wl҄"oIl[;I0&4tIW7?ZB_=0&+9{;'g~O cJpI@+OdO11ANJ@K©R&UCB'aZry6yM1M)ej96yъZyQ-y㶺,-h&jF}BqhZQ2ǗhIы;CNTJѩJEYMiUb{ZtT"OKnѷbZYp%%:"]-|ʥ-W\WJ(r5j$ʲbU>cS%yϕR\U'Z
&N
8-'8#Y~78_jW<L	匷mOP@=Svk_ӝB,FZ1jQw;d-|Q]!ǅ֤R/D\de<<w	<l'6amjד3]޿B|O{šƴ"71i*$:0+6wTvU'2>$C!N⥛Cqdŧ236E'pI2pE1o\GD<8Zdy^qK4]o<!g3uM^#c;r\;W߮]YC?^}j$<	x	Whu.8iA%Yw0g:2fÛ(90~Bs&7QvbfcN;heoQB:	M¯HdI_eF(E9|M"cn4k-mUsX孽0ӅmuU| 5@H (M[)=dCIbXs!j|-J
BZCwYT2
JSx<63ciXӆttQ>
NM//LSL嶐R
ӤEpMSS-x#$2մ?{\>:nnB:
]k,ҨpO67?MF-MC5UYPKF  
  PK    A             4   org/bouncycastle/cms/SignerInformationVerifier.classVNAV+(PJ,"r+`*CDe;%e.7&&>oϴ5.P4693gw7g_
CM{3'_3M$Szκe)n1u#Eni0$g2iҝ=61mSUrm]1C-%Mᆳ-2XdO :&YȺZwe3h
9*)юj{$
Q5bgZie<0wj;WG"Q+q=[Ilia7N%ƭ%c۴TG7R	.1,AkA9vsG	oIl=]\mlòMJhpUBH5	M%\patgjƞWmB
7gίtCNj|̔wg
J	ThFKj?iɼTBm3Y.cFzk/^JxTHu(PrH[MTsnp[{SF+:d?hC5`2#:e\AXȨE:DɐS[P".@ aЎa!$6b,;Fe4So|+L~Kќ&9M[ ]@4${-	f,&=YLG{HD,>AgBD?#qy|ezR$ᓠ" LN1WUOc~Wa1c<=)}X˹2ܥ BV>ABOQ%;~PKD  @	  PK    A             <   org/bouncycastle/cms/SignerInformationVerifierProvider.class}1
@EMchbR,AE_qِIPFFp`gy<ow "C Sg%s\3a5lޟjU9I]Trk#^Bֻ=Z5=$Vg;<h* JȇtY*X FM@3^PKa[߭     PK    A             8   org/bouncycastle/cms/SimpleAttributeTableGenerator.classJ@ƿimccjS҈, =xiPKزݔd#V7Bfׯ ΰOhG[B\ji.>7imDE\~9Lqt.2C`Eu(EwS%%7EI8R ]!yO܎tB86W7_H6R)_& mhzcָ8DSz}Z\8yF?~0>zFBcv#NэPKd`E     PK
      A                org/bouncycastle/cms/bc/PK    A             D   org/bouncycastle/cms/bc/BcCMSContentEncryptorBuilder$AADStream.classRJ@=ӦƨUO\wJ]Wq4fBf3A]~xS(Eܜקg XaȖʇV{F
vktYvJDL΃ˀ7B&Ttm90Z*9ǪiJ.Z	WG"F%^;lVk]-oy^J\M
ŉRk:F2hUiöo#oñ1wTŰQ|.r`.\d\cEL`S2͐,c](KQIe0A"i!t*c`їT3M"afmneKX$=T/M
7_Nk	G18oPKx܇    PK    A             Q   org/bouncycastle/cms/bc/BcCMSContentEncryptorBuilder$CMSAuthOutputEncryptor.classUrF=2&J!#	8|CJ	`[f2Yo,yU[J C1ܵlc@<{s޻o , ?Vlז~eێHJ/}HZ99PVC\w_JOcV>$Kr#i
	&X)h'4F#H(ɩh0BZZ"M$`9#73ͼ2s,V(Js_ah=ln{k&fP /ls3	\[ȆSRɮ6Qƾ(!jJ;~պ!D`ZZ֩Ci;f8izM:ugGY\:2;v0sQǰ#:Ft1tqBIz-7?C	.5\Oh ~_ĘfmRQ¶gv(4>p<Q'l3)_J}'Em'l!tW
^|wXfLx//;/'TRE-kfQ7<C8g`3⼁ø`b YCH+k΀e-4L5]TSFMO	LW8k	$q5i\V!L2Ӊ~h;#>k5>9,#AR4\?.D)芧JbjTȈjiP4d#_Lb9=70J븹gP4$;Mjj$b5zN{X}a)5h40ߤ/R:1zMazk+MkA_"A560uB%H5BjPi@ؠy&q
Nn= PKNp    PK    A             M   org/bouncycastle/cms/bc/BcCMSContentEncryptorBuilder$CMSOutputEncryptor.classUn@655^(GNKzp4)Z@DB~ΒrTDP8-	K{ٙf cXa8Jac'a|۰+g2waM!nEd-6^޾jM=lw|}1ݪ\gή3VGo')o4
6r}Uu昻斯J;&cŬz$`FWYvY&/nI2I[Q;-8v<ocUoW
 ?"ԸL&,[hQlSpjKQVеt4va(SABA
\QУfdtfMQwSzdDZBHN	?JxUy&SaBB!S<3<$PQR7.`gZ)6>o#hƆdf%wOZDas#A.'ji"|nֈ]$p.FcЭvRC;nihm
}I
4hI힆8d4GV\1,].yǨWq
ry:ICO8^t˜~}A[qm9=&ָpf7)f?8b2md!$* 5՟A<{IBf{q&{'r}<t&L<C<k I#..2JIFMaTCHvd>uDdrg1wxV >oPKvut  _  PK    A             :   org/bouncycastle/cms/bc/BcCMSContentEncryptorBuilder.classV]SW~ EB`_
HiQjH PBh[laeٍz+o䲽t*LˌLRgھg@%a{>z={x
 p15z0p$`D,}5C7uwze2N'Ɠi\6s?=7951IqǹЯ._.׊h6W]f]ˎb]U2G%F)JgmFmnr[%+J&ϝHA\::-[*u˜ȤTa8Z(?_4R4,rnjmsedR|e:HxqUw%w1mp*rJCuEU,(H؅27c{{C
m9\+ٺdńOfZfvRYvAY%S[T5:fȎ=eJ_EY=Ld'z4GMft3і%y7FU19MLWг#evcv!He]jmPH%D-mx-O}R]N9?#%.JA=)f~{_PKK}hIZѽG6alWz-ᴄ%KKpVG":%p^	%\(CxYb<gᵟlNFN<unKV֓kWncܧ@]$zɤ/뮾=Ѯ|Bb:zPT*5el>뭵ֻ"z
ɷfFU^PC6#|20$eh$ncXF@	2I̎)eRF)-%2b?~\cBL1)Ĕ 	2tу
 @_ZpMB|'`_g:U
UOV
W.rƤ4G-[-Uj.Why#Jc_%g$WiuMZcӀ-<|d~mWbWMOq>܆
weP+$!``pÝxPGm]TϽ<&	W$0BMv%TSJ}-HӶ *D(P1*J\TK?/(x,BxL}Qg!4Dogڣmy\Tۄmr-"m\X˟VܼWCЇS!F&M,C/!?k$	tԅ8BWP".ѸPK%^*    PK    A             ;   org/bouncycastle/cms/bc/BcECSignerInfoVerifierBuilder.class͕]OA߁JVQZ#\
2amSb& $ 	m/ř}}ٝ}0ù&3
Đ4D1LQx6ۂu
e7y]N6GE;.88oUvf#[Mש[nnm?nG(Gj]k-+_zrj\jZ;%V>罩}vd/~[a<iMs%SI!¹FSH3,ZvC稆DGR-CO揳/z<N=*7U-P:aIȝjݩ,rs6%⯢X1}{vYd"HRYr%7WiU\Mgzl=>~v믷֡M]?gZ
d ㊁ᚁaLpC_aJ:I#4xpO	;8C%cM	Z(HFl8F$Etwi YC>r!ƶ<oN$1GF(&2#pWi9@sL耋>< PKJH_    PK    A             >   org/bouncycastle/cms/bc/BcEdDSASignerInfoVerifierBuilder.class͕NAC[*uOPDPvH4$"? iBlw:dLľ&TI| K_xf[lZ/9g9;?~`	C,a}!|V\i'bOp-ra^Ws/.~*sG1,b4<n9պUM/U[?Ucx	kYw3T
j\ y50Tx]TVʦRFή
'1D2I%bX~fmIgDRՓ횞3,u=VE7]j7%(IQو޹T؊
B ='DlT`liZoV\Im`Z塻̰H
!3J9A.x4WHઁf F0ͤ^%LisGimL
㸟BFGjs!^\ΐI%$MKґE#Z6TC10o}DZ'ϘGȚ-<4=¼9oan. ZYRLc|<$C"O~!EWT_PKߝ}X  E  PK    A             7   org/bouncycastle/cms/bc/BcKEKEnvelopedRecipient$1.classTmOA~z@TD^GQ?~ @0bLץ=^|HH41e"A[4fvgfvfog^1<W.օ~UFs&w|1cM-#ӴBx~h+׊p]neݪ
O3*UՒ޾cknsze""Pc(ݜh?-vvD$j@y{~0ɜl7pWnGO]pu7=:E
?,1̵yԴL'3@kIhaĂeᜅQ)-7İUe}pcD)vS{,gs'*d;S'OP
QS/g!	ݡ~=J}'M޺	\16p ׌nc7F1y#nq+4n0wVUM0LСT
UcפjXtt֟7-nuu+"ض&_j 0OҠ鴩 M&Jo̑^$k!NYgN9Gw"=Fw$y,IiFzA¤]	r/|L}#N}OpDXN*fDG9'4PK    PK    A             5   org/bouncycastle/cms/bc/BcKEKEnvelopedRecipient.classT]kA=&]]Sk߱䫬}h+MT*d3[64&A-bĂn4T̝9;7 ΰȑ~pVkQRP(hmbȰ!ܾ/!ZmXCڳV}`_;dXĈYmz.|љ0s2֪K<8?zVC_{'<	-E30
c(Mxݱ?ֻb,6OGj
{P96e))rpOn{YoZOܮ}ktu(sk^uLU7);eq:'9ovnNr**gi+v+aw).&3q7MdpDL\
dsrtCJj. O,/A$Nmf4OP\,G+w5zbP,ʕϸ[Ʌ\wR'X:8ATɥF3­$;Gcb&Z/PK"    PK    A             ,   org/bouncycastle/cms/bc/BcKEKRecipient.classTmOA~=<[^D1eoO[4HQƹ"ږKnwf3_߾+'窧d ^aL"P{Ias;1fJr[-Z
#<!hQiPv4,0 m[U9jy[؊PIIʶPw!}Xe
*,Zҡ^ua+<0S-R0H97[
&; ~Kk8.5j5AFM:՜P~ðCgu1<Caӑe+sNQ.x,rԑ6xS=Ư8:O6[n%.<
l~zVu|骭ڋ

%!o$覃é^՚+&∙H⪉h	
i	q#Ke ;ђ50QaeL2h~qtt=J;EƉ1"5Zg!?Fka:7S=qD5h>cjjq^7[;ĚȏjMܧ	kTkr &H4C:yeoPKd a    PK    A             9   org/bouncycastle/cms/bc/BcKEKRecipientInfoGenerator.class]KAkkLE&@#B"$h9~
+AU3́<{>?(;Ug{^bu+'!YȭZYVGV}E9nI*_1t%cQ+LTHH:Ϗȧ=qҁ-<ϟ{XlzW)j	hPuecM3NibGH_ܗ,(0aX3ED&ldνab9~ۜ+s`e!P( XbM&"?PKT+    PK    A             1   org/bouncycastle/cms/bc/BcKeyTransRecipient.classTkS@=hK
>Zqap(8|Jӵ$&?owzBE:#iwޞ=|idN>gh[4LCgm(lEAs[386R|W3qn/My;\<U7	QGn/qLZÎZS˚YRW;\RyPܞQ.rarJj3U5y5[.Y!+OKېhڠW\ui%H ;qݰ
bdH:BS
a]&e{5V+N=N:A[V'͵FVJU?		$(:%tI8/[	=.Je]nTmahԄj>r\pgNrtS:<#wSfF|x Y}$ek-~="he`ɰӐN ?_	2?89VUp	R 㺂>o㦂(Ft&cHX}ICPe\##q	f,YEzɍKEyg^hfk2$v {8D0nx>C4˩fR鏘~a^QF!Lp/E	w!6۬n;\,zE00u`xHlC`?(J0%$<%0'PK/į  ?  PK    A             >   org/bouncycastle/cms/bc/BcKeyTransRecipientInfoGenerator.class]KA-Ώ`*#P/J
/2uvwWfg!V7	~T4]
̙99/$NGC.#vu紘vm&	I{GuuNmqZ}}+Fy3O6<&l+DUM~,`Z1P/';~R*il@9Pި1R
ˤ{a;;Q-Fل2SVbO@JIXXNb$aŀYf@zj`IMmD\X`ykt*PV/PK^Eb[  *  PK    A             <   org/bouncycastle/cms/bc/BcPasswordEnvelopedRecipient$1.classTmO@~YTD=;, 3@11|kB۴{(L$$2wD&<Lw0t[}WB=
2UP[.c9jCłFhp'Z$b$|;Ze[aNU"DqSqΓ䵌pW2qDr3Vb)[["^9΢r
+.Z䤸gI}'i]\*R}OfW@920VAaz 3Λӏ6'|+?@Y+y,y|U6%::sH֦N;:T}!~Yn3NŖ_21&.\5u-n~aB[Z ;"]E	A: L*TMzrx1:y](R_
jPY^	&(Wt;TStvۅqSdMCz.0ia~fR<-D~M问Uԁ.f{OS&׎O"m{;?`F_7{4lZ1#}2{(=8de9/PK    PK    A             :   org/bouncycastle/cms/bc/BcPasswordEnvelopedRecipient.classT[kAM&բX̶`bAyltff/}1bn%YŅ3gf;߹9o VȐ-+c_	Ü7Ui\?(Fsl6Őa'KOPhn!9/#Gb{}J2IŤ;xU.DB3<e񆿹#zL
&B΂eᔅlgWNKf=؈ѻ_$֘\v=r=}ou	nl\ΞL]_OsdkF.+>ާ{L'ķf%H}o994~R7xcydp.8+6
((⢍s̐qUW0㑌-)vj#a슈bO&N"F)AOm|VkR3fK\bfjW?&H2D'M{t!OPK    PK    A             1   org/bouncycastle/cms/bc/BcPasswordRecipient.classV[W
C]TuA
Y$E
k	3
B[.}Z}ԯܙ@($T{ﹿs~g z<Z.	G/HD/!..r9&4RގBpi7.Ơ^i0O]dg͋燺j5BoP癕sF!s`92=l6F@;l`ynVV6cl3,a
n4#eŜgYf?ڎG%42e\&aXq!JvdxtB>zhop]10-QLj~X$4-Xmk %mqV:Ĺ"AIZϑ=Ǵ=W t+%C(sG2d6YiPb3|TٔYVwNV!)Cwyikkg=7S$쩌ˏ6Itwx *#';' a7KqW"f.0&Yk1tҔ,й~弢XvRք33q3?ʜ!/
GIh ,ipmҲ|sΝB׾|KFU?/'AtYElJ\1گw2O%
ڠs`#9v`]#:>/e[22Zd*M&cv28 㠌CAW9ޠ=U?agl[wgI@F!CJ~_$UA] ]E^<ã'Q[ËU$,sFf[+VI%/v-JV f%K|09L9	X.]StRxnIKa4xkUB
MSEUEX4X-W)cP
TlƠ'V	E!
rI:\V3<b+Sϯi肌(8q'Qp' 
NPAđ%	yQA˂ %}
c  
Up=0)GЕ̷
=\7ЍI5"4BhDWGj4pף-wq#8_/h  lې>,[5?E5ov-N.
÷NgpI:9<F(Xħ4z(8 A	?έ2(㴌;z Ʉ޳UJJ<aqagh3'(κYE7eg0f fB-E|'jRɉ߉dĻC''p\َRv(XG6_0z
?uPK|ߊ    PK    A             >   org/bouncycastle/cms/bc/BcPasswordRecipientInfoGenerator.classViWW~C[Ū5#(Vؚ4$B2L.adIg.}_=	Xα@8Q<w{}.iH2>^X1Ĕb7ϧ96y	#\_V[[t+y޳}urlA7SD/]b薱h霥k.[!Նhkb8u+خ[6X	]*byIܚ3߿q6dJB.&[ i4|Cv4c{\
&aXqLH96'Ohϧ*4cDq3Uىa	b $[-,bK6[妾kn
%KqH.VAh9-i36gE}ql-ݣ]]hp>4oxZ69= 3NkYSкMXXn_r6if${ֹXIC֕1 X(u9DX!sP-[,8$YA
xt޺7q"_SQnI]q2
T
2MQI[dUFeqLq8!#.MF2dtd[X6)n::AGN)3#f}37kEK=GR@z/	ztљxfB&ԹYcn-gtVǣ v~x!p4YdYi|rW2Ar`+Izpz#O	 u
Aj4Mb`ZUIyj"7vln>Q'UYE
*RqaOxJ@UBD*R[@C*z'qQ>\񂊽1!{YdU<+*cB@NTqWU<kMċ
`(8ig1,n()K Sk
PT0 [9)8WspC0 W 1 :p)CYs^
d9$iBr{G*>է(F~LbgDhnk(gu$2Yǫ2Fb-ozG#/v"uZŭR+HK4?`-G2Ba1(HЯ@c~@\%G"4QņDI1^GIMQ$}7V|&
߽oøvPKqo  w  PK    A             ?   org/bouncycastle/cms/bc/BcRSAKeyTransEnvelopedRecipient$1.classTmOP~.oY`*Na5`0bbt]Bw۴wDD_Qs;$Ft49<+Gxme_2=.WZAZ}"=1bU
URuQ:zEU@e(W1<	Swy|)N,->[~ʉSsZffr~]./sYoX,8M=Zq,Oռ830HEuDd&4	
pś
0\0o eaxAfZⱜu<wڌL[Mod;ge;SGOm{ʰ&3_7`C?[ܝI	o?t]l3O]c(jb LtirC&zqØ&wRHn
chrg)!~{.T-0Rhq,b8<uDDG%*jDd?PR]/+
ZtNu~ qJ6*-nz0A|I{CX!!lE|ߥgq%x	AbIU]mRO}|ث#N}!xK2fdsI)R'aPKኇ    PK    A             =   org/bouncycastle/cms/bc/BcRSAKeyTransEnvelopedRecipient.classS]kA=&Y]#~G4e
(Tt[0RiD>M6ce3NK/Gw
B6j}qa̜s>pKGcW	H-vp_(9ӊ)Xo>bG]zGP(Bձ[t./lfp7 VN\{%јp:zYIؔGB̥o<\'§dd
N8md-oO*~;䊓V=wB+/.Y'Pk+	GoUkDɪ{poծ@yzh{푽~mˎ:_N-wtF'NY6?8?!z17Ovùx),Z.EgqDys̐v`0/:bR
<DQf)R4
ubTڇ!pv*yPS*WV>z-=OW>f-skR% WhIoR
OPK4    PK    A             A   org/bouncycastle/cms/bc/BcRSAKeyTransRecipientInfoGenerator.classkkA߉1jzke5"EjP?M&8aNY~i@$(F*0gvv};Pz1DmqX>ufikvtfKo$ۆtG|\x|Gi0pcۼizKXq%w΃<?Ou:5Z
^,ãIu7MW}7V$٦:*q>JZܪ~8Atn];+R(8 p$QWS4~EA1ܛ${koT>NB{9­zӝؔ/eTXAGr=Ź
o/*B3d:>!a.D!B1Ei)p|3,Uh,j%i.߬~Cí\ꗡOK$,<7Vwqe4 #:"Q!PKHl    PK    A             <   org/bouncycastle/cms/bc/BcRSASignerInfoVerifierBuilder.class͕]oA)P,nZů"IiJhc^e4.F& M/3K\9;3{f;Ug%;O':CPna==å\nI@꿹d+:5V~mW6Q˾,Y9uǮ*[NjmeeV:j:3+\jQ<PN:!2S[/nO"ũ(1[bͶV5ɉPGk=fXe~
x.TnPk"Z {v~ݬ,pWr؊d|dQS-m3z̕+^s\U8q5$ÂFOn>YvWIwaox0p@
a\40%!pE_^\aQ:܈afp'Y9boqqBx
rDلF2d-Jfjyyt'pK_t2M`2`3f
$S_qZ	s#xPKli`    PK    A             &   org/bouncycastle/cms/bc/CMSUtils.classNAƿi)["m)Xu/x17zUBbCEt=Yng7Su@zCgYIfΗ9?OJn3C=dqz-^g(t>鎷I)C]%$A$^BC/w

GqUoyHz'	{0ap': >$Q(1$MʠCJy5jbRBGo$6Gr osP4&%e,f,T,24B-U v]wnMb]
Rb٨bF
m4dcObi
E'!A݀(ij&2Kc<q	1Uz՟p~c3ܙ;Fܝu6|zPKpk    PK    A             3   org/bouncycastle/cms/bc/EnvelopedDataHelper$1.classQJ1=i:>tU$t!jAAQPݥ31

~%1!Ƚ2}?`N,	Oע(yG\	#%h،ͳNp^Oo'Lc	YzxS_49+<Zp.ʔlY߳Nz6*oXNS^KڨVϓNCyE̕PBƎL{e92ħZ=R9rXCL
ba.T01+#b0*/小aX	hPKnS^  "  PK    A             3   org/bouncycastle/cms/bc/EnvelopedDataHelper$2.classQJ1=i:>{EhхTEAt\HLJKW*(~ƄsNz %bz0'%Z4`FaQWBgHIZ36Mn"Wē'Ǜ	o6)ӢXxqBEa v[TfW'q~>XZq.i˔l#ʕY^᳗Vr6`*❝]~2cx:MI{y/֫ߤO:
5icb1UB	&Pf:2iNqRgLjMH	aq1L#`xWGpox.PwL03
X1ŀq7PKeRa  $  PK    A             3   org/bouncycastle/cms/bc/EnvelopedDataHelper$3.classKOT1Wg.8#*".fDSbb0&<&a&:KIi'm[
2YЦyο cQ`.08>4t P-q$<UC%r?%͡I9زsɒgQ!Y?bW%Gv@Aoj,LI1Eya'ϒA%Fgl1-)(dʐexq@R<+`Sñ.q,X٣]TE*/7V>-[`Y ̱yv2+?9j9&1V
1;F<:m}4ܧtb%psZϗl*zs
VtQO5,|xWlՙ2PKOz  _  PK    A             3   org/bouncycastle/cms/bc/EnvelopedDataHelper$4.classQJ1=:҅QTEAt\H$+]	
~%1!${s?> 10P]1H-.XbIx-E!g(ߋJ茟)	Wfetx+M%e:
/Hu2XgXۧ7<9V0?e,O~xteJ6PQj$KOEpS=3N͵m2ckd~oGO:
5i4bbTD"Qa<0iRS'8Sw&e&{s䰀8&B
baT0FpE7<=;Ư_13

 0zq7PK
=a  $  PK    A             3   org/bouncycastle/cms/bc/EnvelopedDataHelper$5.classQJ1=i:>{E냨؅TEAt\HLJKW*(~ƄsNz %bz0'%Z4`FaQWBgHIZ36Mn"Wē'Ǜ	o6)ӢXxqBEa v[TfW'}0]ZӖ)F"DF#1+ճg/?:]lT8;]~2cx:MI{y/֫ߤO:
5icb1UB	&Pf:2iNqRgLjMH	aq1L#`xWGpox.PwL03
X1ŀq7PKD+a  $  PK    A             1   org/bouncycastle/cms/bc/EnvelopedDataHelper.classW	xW&NBhȒ\-,&BM\^mM]EZ1&r-PUGI܅Bچݵ>g;3y͛7瑻%Txуl`W(F@I]<kU8Bq0%:B.%Է).+-ж{f)VFJF£hW!4.oeЈO[[ڈ;mH%՞/
\S6
X<R,G4 'NB67j4IH	تȺnIU1bRk_KTݔ5x(IU6Tiq5)ڶRMơPk	͇屸JK)k	'r&հ$fN[L5ɏ0#A'OMj[(eZtTVS_sz12L#A?rK km*[ռ6gH݇"`qyRe=՘&c	JwZY"
WD͒)b&5=֑QNFk$mjq_Ƞ
ǠV-ٻxXep+lǥ[:գLYW(
F23Һ2)3#~{=QڋvL㥵'S]m73a9'oP(9Nͽ+V9()_/59smS|M[[w @
SW_`T=jG]6lv.qUCS]}퓐2% KEg-uATkPwSݞvsϑw~[W9Z߀#@K#Eѡtj15e&Iq%1ŉ45$i-kZ0o~PO~"xD\-I":DDtqPDOqHD>"Dx!E<U5"E<MwYl_nI7Io]G[W߻믤;V4ZֶlWWWYw!6ڤ&)LS;ܾtTyr*ϊ}e|6Q>
qًx%d.[q`pdj_;oSUk].
>Pa{dl6F֜>\WL<3^_{)UISi$C5&0}Y܍f,hķ6qBWyÑ	ϖZ(As$T2\p1*jK.eaX'010v3aB\	vy%\HhMBHB/f%R	e/m%\WIx^-+Gcx?1ʡ3A1|a'&73ocx;;.w3"O
odV/^N/a^c<0]^ǂq1|KQy`H0dH21/LSzq
//O{q=>[(2|*0|7-2ͽTDѩCq9RIr:0
(6,qqs+r:;:VB1i:yb~q!/gdJ3|53|-dS,dcg`P9sW<wi~t5Qd
oG5)f<Rq 
'X[,|<^xlt#_݊>oK|[pQSG9}&/j6f?lܳl_\60I,^Gꏫf3bt?o2By7oޜ[OYxdƦykc6s9kke}kuݻ;&[)=/ol?n73K8$+lʰ;Z''lM#J)+\p{qS谋:28߸ E)zbSg@Nz0_y_]l[-i/i_KȥݷLE|\hOm]
-=[o Z[JW1gytI_PKBF    PK
      A                org/bouncycastle/cms/jcajce/PK    A             9   org/bouncycastle/cms/jcajce/CMSInputAEADDecryptor$1.classRMo@}8Ƹ	HʇU-5MRR"!ў6mؖ_ĵp G(%.7_<y,ss,1d˕W~0]!wXk9M%JQYk0{J]@	gϰ8ꞈckSy!U݀ꖦqgfXKX$r~CS=խ	'}(ԁ]wþgwė#)b)[z9Do	8OG6E	uO®Ъ6v3+UEGnPa|Rgb<Ol!x<::r^Yj<ړAU-pܱ0B9ױfF+4i1Q]7`ԃI6}1u*J
vBERt<
dHndtv?E`WAcf1[d^g0p.Wn
QG꜀`Pz)2d5OPKp    PK    A             7   org/bouncycastle/cms/jcajce/CMSInputAEADDecryptor.classTkOA=K+<
-ť<E&i˖e)?`"Hb?xgj	Mz̝s93ί BV@(G͉E2mL65ho3}ꒀݶ<fy˖<öT`;+@k5J!b~{
,OTuisF^>2WlpZ;-XWEFmiYebX@Um=Wd' \I@QunئFl첥Lw]rg"Vԙ]966u1g8# ?[՜c[f=.1G#]ފ"DDD-GD>=ɒL|Tz>Z'VFٟSDKWM4zX7J'n'y&彺Uf]$Xck&qӝ\JF;˸2D<AFdyhChEQ<IBЏ'0)!Dy-		C$kbYɚ2W@ۆ;kZ齖3"=LnrJ9LfF1(wN1=l*}z8 vQ(a(X1,ǩgW=15JSb%$)VgX8D9[#.R$Lm>ҁ>OD|t	asзF{8)'x%R(sPKT^0    PK    A             *   org/bouncycastle/cms/jcajce/CMSUtils.classX	X3 a13c'Q֫X#$yw&mzws;m&Mnq
&iӦwMgV+V̼y͛ MY,-p[`-4< h;KB E'6gdARu68`[>2Ҹ0b4Slqwx
=ne`N9
~
!o[M0Ӈ+2(F8LĥkI?IgQD`Bb=LOL,	#2	`
rAyU,Ș(+gQO2/^FU]#E>4(Kh#N)K!.-uV؈[wh).1)yq/AqW>Ӈ.2׍aLT,rYjCJUkC˨5IUQ&nLZɻȠZ)kL<1I\XԱ	;8C\.0eb91dnz>
&QA)[H)
E
(.cʺq,!ECJ)J2,A^Q`t
A!4S8ni.^UTZĈ,*GY$z(;Zg	J(ѢB	5DQjklNtD
a _=^h}4y5Άܸ86dTR}4Oyq%Lq\)|HʑC?+),T%ZlVI:v5cOS
;<16MCgw0(0@iP*XR#InD]r]=*ZFQM;;Ő(A&*LVR(Ÿ?
c7;QVn$`CEd
MtvXIydƷ)hT"rՔ^0saoand,7!el*)MfRZBJCsX8^QWBu6o],iUVʈ(S\OPzҾZ#rؙ(Ua̍%;q6	KS΁ZsȸhVs9PCKPj)gRyXF1q0Π<d24u:rwpKf1TxHDRs-!AxpK'Uzn<I1^'o̟6Ir&ēv44+BkG.=L+D\$O#$	LsBm@'6uv$J]ofT㚴D1<E
[LY44
O%ts4>4/>bOo2lFl`(sp7r&xq p@8D88Ɂ́AI8847s^-s
^8x5JIOso TG@˖˱M}4ǒԷVKh'E]R39t[Wqܤ,>9ۥ@7j
hJ7VƊQ[:j-Yq9ql#r2[&$U5+q[z-m#PkМR	$j֔weY쿼xTY꤉mndxLOǂLKy"f&95acژ<^6+3%LiΔYtN\8[/=z&y(ede_Ƈ*znucz:&1R#?5
,X3E<
[		$B	J8	jv8	j	\
	zz			%" 'L@F5gn}o<nr`]-pn7'$Sv8 C;|KdZ~i;4LWju;T7i1o|[}7[ZXo	C_+|~C["3_0,l+ax/X3"f?"1O~j
mp˵,wu+ dIBPDPb{I>X
d	J+laVF
6a[lpfzye6Jsl
3
<q	v{X=Y9w/oZ|[R īQ*/cSĴ; `lR@jֿX6Q cQX3@وB`8Y?åhBöYX`'3ls0Y琙NOᄎKeUs{ jN0d
c]-@|I_ϲn#},]Rq	;
an8τLbl`Ehv
<YA e9vy.C̛g>m""wm'<Oلd:ǎαCU<q4󰙃[niʷ;.A"̎.£xny&Oq#%fr_lz8<z8v:γ#hw][1/?sljMߖ8?bzc[ҝ7,k!aXG,l,_ .tm?|Mp&
Oj	8}gb[OC"<0Z=ώ`$n-γ 6+BEY.~U_=*{5OB,2.VG`f_NMQ,ZV90rGcL",$Ѭcñ̳AM=Nڊ7C'~nоx?7}J9{^;s<(E0瀽]#;1Fһ]&Ճ+Qjw S@h;-(?L{B$H=t[R-[UZo[-?=a|Fϱu0A,½H>ǺT,k/Z`lѸ$@.bΓu.qmEtzn6-8}p]chn4*@5
)N̲+
.@;
t]S9	*Q4mccPK4<    PK    A             8   org/bouncycastle/cms/jcajce/DefaultJcaJceExtHelper.classTmkP~պ՗9ujN"ls
J t)iR"M觊?J<iӭ5],RL<97? G!ͽf?6mS=aH
Krks%ɐ${kVRز߻V.C+zgy ~qNM=eICT="xEHcTR1܍=n
7\ogjs磒Bhb+ڀC9NeՕyJqϕhmm޽aYd)j4pJᴆ32<nV>7<)ꮩрrǇJP9ܳƃecs(]kJ!Dsr|۫۫>g8p5eI~eao9xhh?DS;=TʧQPq	 K 5/#Y)\qWuLHؚ#1se8=DF<Ym-
$\	Ȏ;
sL/p!p&  fN)Ɍb`~t/Ō`jcnv0
PK4  v  PK    A             7   org/bouncycastle/cms/jcajce/EnvelopedDataHelper$1.classVwUM%aa7(J4M[,KhHK!jN^i3!3-+
Ⴘ~U\?QtI4w?W O[	\ܡ;}X'l80;}I,/,`b}Ѐ{ĐS&siEl$l#M=e)3n(T~qRх^)")	kjXb%js	/vYK
+zzXÙ谕Q(C*(2DtHGNqs,NR 31Zjiigm4$4VT9gdvI5`Hpg%9Jie:y!$1T6鈚fd;JsTQTT#	kuSIwdKGFICQyDHOr=ffJѩۗu	
hQM>VS'Ht YnZVa`dő4.Q3^4KČ)YSl(7xNjFz(3*c*glMlH5\ϊWlнZ:(8vFm44An8GIR	}t$	E;a VGeư1FAv3{ZZ"'nr(j䎸͉O%-#JR#D1GMܦo	+,.ݤMM6ZJVP(TE~(Mh6ŝ*Wƪp99)gI\M+*w%9R}qv:EG`e9r<WCSwKBFT0Vdq?_^L]S28&N &G  kq^$dl20(IFVC2㤌-8%c2pFʐQs2ypAd^ E^aXP@ E? 4bG	`
`	0!><COc\iz 3>%`^jQ3E/huӢ!vƤWoz/ŸAaTW,T!ޤ6{2G6
(b@y셄8j~QdVR]CG->'hwq5rW{Z#+Zk~ǘSj8Aɐ4N1@߸Yx pm 7]?pwBvM+wGkVz
Fơs<>y7Y*q\tXt☻ۺh3oK.x;*[?Fa?aPU .P.'İ|IZ~g1tbnF|(^-_<PKG~n  k
  PK    A             7   org/bouncycastle/cms/jcajce/EnvelopedDataHelper$2.classV[wF(J/lǎ@j\0P]K[G"Hr9 /}j;+so=p	-iLm
Xڎk _+;/lu}Q0fSo+
ԶH<͎ dXDԣr{BnYnkk-| %=-ְbSweʮ.:*b/bNo뮳cMQGqb2DDoWݽhFDq0vHqr㶵ӵ={%4%m(Ul1x
>ZxLpTmO+כ!cӱ-oBBE.hG*0npVGn^R#`iXenY-@4t.kz`\N=JFaa8CIWN3pu7dxᬂhSm ҠޑL&[{T&(Yx.(Dw'3>[{n!LȻ=o@[M+qAK8.dfĹB#
1Ơdʰ!c"<UqT*QqH㸢b\b8eJXǲ)'n$1jYTds;>$4Ԓ(lVsXv*)̖Qӡʐ<,TԪm7BAcڒ꫄DlD=	V
yh,TD*%=EFM_G+죑z.O&R|gђ$h$Fi?ZzޭbO|YR(L+=|ƯjNx8ri`(1d0̍0|E)2ki\@rH&~IQ::4IJ?$fl?PK$m  P	  PK    A             A   org/bouncycastle/cms/jcajce/EnvelopedDataHelper$JCECallback.classQN1*RTTfTzɬ$/	OPͲki7eþ2Bؤif234;P%hD<Lqa$EJpG%RLl欧3B^Ѹ-TT8
&8_kyyA^ּD:aߚ,Lb),X.f)6S3Oc64-rTI&	^
[d]Ieb??JKKJ
ؠؤ(QlQ)(EbJQ#h^߼.CP]N=O`_ZcvHc8v=8Lp{[h\PKx;  W  PK    A             5   org/bouncycastle/cms/jcajce/EnvelopedDataHelper.classz	@Gfaj.EETT<"( ĠIpg̠$smLh"M4}mkĘ{z` v~Uza`ҨAS5"
kA.
k3J(XALz"*GKVKK.TvQLugcCTaI5D{=rzJmb`ܼiTw
LfT0	M4ar^TX]Ro/_RU_QXN# T,^X]3A/17F,,1fwvy<np{7i˝4GLZ%fU\R%8`uIq	!Qg龍z,FT (Yr]
i\miF?iiJӼ ֶz4nq	8мE5yr'OťU/]3&
S;L5vtiI}eբR$c&Z~\˟@ѭ5=v
,ZX<7oIiJحRx|^-^-eهj-z>ʎჱUUv0j}R^nZW؋DPkKuII1$kT/;Mivm-A_vG+tcXq}iNq]i
.{q^>ڋ@`P@ ,̣p\-`ڳGKˋj(hXՆt:hdM-~7XMGwD7ujrSNtp}Z7.
[nQBjj8=.gbʚӇ{⚌eXycP&.жnbZ?mwvD,ظ$<VxYYGcUCr\JiɡJ\4ӋXB(MDlv!#
2^D+.0:ssZnWnޤ(lCU:5pZgغڂ.,wF;*:5C*:x*pݍn/cW+pY+ilD	[KTV:}
.X(5q@udArǎ"b<>TȂdI*W@EXW`|`&g
lӚW54JdwC=Qӵj-ޠuxZя@9ࢬtq}9J:6jGv֖z<&Jgd4Q5NeVCJ{`תV(ެvsMx#:CT$ih5V
o<FpRȻmj2"b<&=F.>U[͡LD24bnpm61J-:\
M+9t{r;$]6x/׺P
nTX1O)&ìB*Pd^3ݦ.x=kd1Qi1H(\-m'fsF/X#ڼ4/#X\,)g%gz\977"W7nJEsMlIjE`ta"9Wr]ř@, &992#ȍ[V9929ۃ{T2B=,hfh{)DkdmL7blDJ#w4+Fm2^ttȁxqrz3	O#oHYA{m#dxV8ezӁI@ɺ`ǜ[nrU,Jdʳ9슫oұډLM1qʢbWLu:D%
wNro~Ȭ)"vǩ(c1(9u2ji;JVa~CuQ~'~IcjG\Thmi.80BҺ2	:XFk%FH1=ջ[>&E`[*þ M`4H S,
&h0Q\
4d
kP]b
J4<
J5XB
4РR#5ҠF,X
5XA[5xM5@Zp
UNUAp
TIUE[UMp
UC;UKp
OUa
Y-*ܯ*<v
K*<£*<*<T)*<³*<***«Ė%3k0ܐ+<;yp{9&1=k*Ik3v5QK&G</+dP]rseLǫ^ ڍC>$2h9W{~0b齵WKRMOrMK/]f?fb&Z7Zr,iOs#5#~شfT/m	&㱑udS眃;9nYվbD}"e}{!ya;+sAߝ.b(rF"Eܢ:
`(`aEXW6vϐجp=a~z57bkCY}jtt%G4-Jg.}mt>!.]t;_tmʳf}3'TF
@}Mpjj}JMЭhkӽ>JڃV`~anIaka빥N0{uK?t.oi~5{9!r&6ay3*ZphD
_E}-z\"OL}rgaMu_tF،^>\+\6x	͊mJl0`PTa	F&C0  `
A>A9A5eWEl
< I0`6l>`W$Clp6	tl#8⩘@hl
.!cmDp+&Hf)l
c68iX
Ne6X4y1*Z,#8clp<;gz,c	6hf+6pfJ42>bl
ZZm68Op
^g'RI68l/;kY6X&8'gcY-e[cY;,]Fp9W\Ep55'zFp#n&%MawIp?eSy\@p!E\Bp)=Ʋ#?~f+%xu+}VϞ"%G,m!d<`Flaec&	Z82ng,[ |fex"eiO	>I$'w	>^!xM/lM'INb	^ xfl{ʊq,mce/0086^ql{-	!x}>$+	!6XQ~?yz1{ 4.4QTX*w`5ƧcAJHx$C7+S_2,'Whʠ(	A&-mVgnWg=	ZV%sS&|l?$l >Ϛ`cLEGXz,yC6NjJ2~f+ɻBc7х5hZAV,묎RײVCK謁S@*`̾ߪdUmW2hU`)۔ilV6])nWDD`7+q)xUܮߪzA6.>.%])ؕVd	M"{|=1@sǑ
7GB3@1cUpbT6Ue*5a0YC9cvh܇<m[^!X\,!aS,s9uG+w݇鐂Bg
QFwhFLn gq=YnVN0~%]U`S=Irb)[DiH[Y83g!
	F	O30 EQEBep뺺e˫af<6ӡkySBvhJbJX
Q;KvI׵se̞\
wH#];2Ո6n|VfRM
8
a~fuo4]6Fi\N.6
'?[C8|]h.Q]]Vs{;pK<$}g)[qmVzD

:@%v%o0Z
1F1 %FC۰a
,l4L-Řl*t.r1zhMvXtCp#UxCbAZ,
N7V`iqⲶ)*6}-.μ'~ZtSg}g@oWd& fg,3bL8`.|'
Bc@,Iqsb`!xX~yتLeIoణDn0V\~kE?$Spg
DGۄ9ihDiverlt?
AFǶ>'{~Yt'9˫a`qv̺lVeL"ʱ[q$&&Yt@J$˔h<IhuIx=ە<'T+&ɺ~{e;SD;d_!c8'81R: ǰ%Fp"g-r$Rh_QfE3oS0ˢWr*I>pyF)Ra%8Ȅ{Ba*l#B
XLf&tװXx\E
-v^$/mVjEIL߷)(q;Ptt%~O#(COBO<ܬ(	Jy,Ũ~NMŽ}aEŒ 3q?1 T!(STD78;4LŽ}ş`+ѧ8M?4q7ErcSqoxq_XG"n1	F5?j4Q&Vd;j73
x_/:&1팭:ں~SuN:Uw#|<"mB
$/!pA'!w:DD]Ea+R"%tx)!)Eg!:\4"i8/ELㅈ#t؀4RFh q/GÍHtx)]2x3xcHY|b6GéH9<q"÷Hy:4I&St)_瑦p4>qw":|4Sۑf#g&܆8C,tG!*A˛u/R)oD\åHuL/9mCې刕|>:|TŇ!Vj~BZH:܆B$<Ky2E<ZB8V3u؇\:E
<ѥuxI琚y"[VJU<ѣÃHLD/A
F:N-H~>1uĠ7#p..FZ3p%R둎ס~<x 'H谫/ :MOj3x3uI|7D갟<>|yEb_ė鰛r^&Ht%_ItvF|5It_˗]Mxo%Dt&>ftV~$m:Cw>vGKt :|J|/!;iYDr&'O'7,Bt??A~D<<A"G=[wnLF?}DDOD{I>)_dy63g?ï9D//Txe~!~E_c^á_sD,|[m\1wx:ѻ'~w}1xч|5GxqLO8'9gs#="7+>k[~4w<{<!?D?c~n!%*⽸^Ŀ_t}Ŀ'y: ۉݢ3ξEWPqaT
1"B64:Z$|?I;K
B(rAp	R>/tSOW'P@#I,1*<|$H)%(|$Cr*%uPby>!BH(3
i)*cŎqBeT!"
)}|_F$}a<DW
uoP|]RHDM'H!IǍ')t)toynZ,5D\q<)e6J[ $s2gQƐdPItV{f{K-{R=:;Bv,f);L*>Jo#I BwcLD!CG7Q,AːGR*9":ɬEqqP,-H@woHD(](#?z(3,(?E*éfӍ|qT?\)6	a'
wHHDpHƀeD7%sBDؼ\*2l\I)BY(^#^c(F<Z/:-̕0 RL?Jol υ*QWQ$3/N/&#6cMȟHIq͐
_qm2)RW!Od_RQwH)R3Կ(~6!P-.B~=FJ8<%23<*[È<CYPAQJ"o^)Z
\ }'`2rzoDDpQB)'
lH)
	r>xŇIH>2iɆ)5Pd=ӧ
I`!		W"_dȊIsχL%~c)˅QjJ&{e*Rd^F	HoQd%B~Gɿ"3eH)l )l
.`SgPKeر  SI  PK    A             1   org/bouncycastle/cms/jcajce/JcaJceExtHelper.classJ@g56~#
,VASm+
SOq	I6l65A&L| J&*("ff `6*ZiEIBfuN?ࡈ=~65]<>YT1Jy"@]]N),4k̴Na~H}VIb_~3%LǤiKIMh9ap;9GU$ZrJwih"Pʠ=hLN60X2ܲV3k!
PK
)    PK    A             6   org/bouncycastle/cms/jcajce/JcaSelectorConverter.classTRA=C!ȾaӰ9AكAаxjv̤f:<KPRo>Q'@y8vM~֫PA(:<:PP9k9ds"9WP/=roO+h*?oqXI(}XMΦ!::g1{#^ᒔe:ܓmrC'hɺCvtՓKuQ9mn2{3ijRTYP=,Ld-@d|nd=Ka<6Hۥ~3}7'u;Bjc4xjJb54*#%'UrC\_1X	sD//nQnGa67b
"VDT<PQ^EFM*UhUѦ9:v}q-ћQt4e&MQH/kwruR}"~UsaH󝖄^0kR[#{q1F9P
CP+}aK(G5xFI7*a JJЁ:1k*K	C0*a\$Lk`FC7&%Li葧Lݢ{@?ڔ`uٖNE/?!(R4*y
dy(c"t9zvpe22zrz-GtcQa~88^1dM0XkSQַno}wגyPK-  ]  PK    A             -   org/bouncycastle/cms/jcajce/JcaSignerId.class[OACKWEĂ(vlImCI՘4uvKBh|e<S(M؇s.3׷ b!kkFӢ zpǠ;2zށ<`SÈB2T>>TgZ2pw2Horq;"ܨojV^OeXUq>d?۽}ȓ6˻$%r_;w;ka#]C^aB$üYj;rj:
?$k6ILG|W*xie/AV~Ml;zI/#p^V2e7<R*USHh f@70g ycX0CSXTfY4鸅:fPTfEm,*]:]iVŗ~=%Zz(I-R<F~*`Zy'gX:}7TJn~򈹗0s%?gFB#Iىu PB6~PK:    PK    A             ?   org/bouncycastle/cms/jcajce/JcaSignerInfoGeneratorBuilder.classUmOP=R
́ ؀C&~RZ_n$ ]td[ЧO=s ,G	+mU	ie$"9X,j;3wM^r-E<0
Mp2<17[¢f{beRssKvkySowwͬ+4݂/feikhk&sD玻~PFUK\v$2]8=Wxʱ9e9JCKlR
5]3bA~2etȐeܐ)C%an$%LĶCZ&Ec->O6!ZV)KAK-#owsl
p57[W{WQpzJ!+=qi/[R~8LJPJ'V9FmNB}PONրv}z7bBEU@ᶊnlTE+TWу;*zEhŃNC<Rc}"Ǆ1&EaJih1%ݭJ>pf")69G(&kF[Oo e4<x	Zaۍ ;H<dW'fFxT
%Xzt8i[TQUiJ(4Uĳ2f6BZ0 =ԦG0Ou-yAPKRU    PK    A             @   org/bouncycastle/cms/jcajce/JcaSignerInfoVerifierBuilder$1.class1
0FjApGš8iVjCo-y 0f[yHۈSْ7tU%CgH["qPK׵&3lMKƑpf{6Gꮮb6v;#C1B	xtat7o$ϾPKD      PK    A             E   org/bouncycastle/cms/jcajce/JcaSignerInfoVerifierBuilder$Helper.classTkO@=c⺰&F	("a3ڒvJ_ 2.
[cvN{cn è]g(TT
yO	7
վ^ˆ:oeS$Ŗw96]%bXLi,U"VK@Ҝ}H(dxMǏҐ@8KⴸyϽOx;<3i/u]}fh-(Dd׭qvWww3"x]*wG$º*
0
L\;wg]*K1/:G{K@]bNH`6>|7Cj4@~+ҭ*0hj0gb
M4t`^ÂEem+Ø5ٛ3lmtn%HDzSЫ@q)2=6}v)P%>fd:)V6Np[Ʃe<=_ğ߻TqCJף%LLOv)@DWHN}%2P:L"*NPK
  Q  PK    A             J   org/bouncycastle/cms/jcajce/JcaSignerInfoVerifierBuilder$NamedHelper.classTkOA=ShU@*J<k$a1%HBBv:4,D?x/~83;sϹw;
`CCi`bZwݱ}aG5OMιY.Cm+;%<+W5.\_	HW.ʾ[NUnx%4~i%n>q,ݵOV[2Fݠ%́;*K+gВYqh]SҜ2۔mg]E	o#*j"߲QR(Q0  @Up!W˰ڡv10^
ktDH!7CjA%oSy<_ǫ1vWz825:9uI(ݶ;rsw4>IR1i	3*`V(I1<cO%<BTqǼ4ðYmkSuy#9rZBH xLBqhdOd
cl(vɓ@l
MWa1q#u7-&-)Hcq-5h5,y3"	-Mѽ05)KX1*MFPKLd    PK    A             M   org/bouncycastle/cms/jcajce/JcaSignerInfoVerifierBuilder$ProviderHelper.classTmOP~`!/ejA^g$A.K4ёHGnedso{sν`=CS˱gBٲf 		:sg֡ôy6a<6u_g/
D|R`ú
7:G<B֡#
ؒ9 O-1lvMvIٵBXPiEɥﲢƐ5Un+uDD54"J/ЮO_UAB	yLMff2VOG*%%rkQ_WvL>.n4.F~۵k*V]w 3@kĸ	
=0%aZBZuH
Rc-ᮄ{%dT!9	Y^-
ql}mc84mR$]#2MiMzK>Fk"N[7="t;%O1UPŃ5՚;hmH{JcNKR:rіhU<j,1~N#Q1MPkT0iCPKurY    PK    A             >   org/bouncycastle/cms/jcajce/JcaSignerInfoVerifierBuilder.classVRP"R+ޕ
JQ#
 
e/'M5LH$uħ3:nh
Tjڙl%'w #x-?3,MB@bZ%>Õ/5/K\1uޛ%
JfYzYY몥eu*
_j`QqMC5	4(\MpܲZt*aoIXԜ\+=[Z2˶W\9e"{iKW~#a+s0!HR}j;3bKBb3pJ!Ll!o%`c%iUݜeh<]]ØXaȻ
R3t/Q
57.$t+H*8 ంG#+LEc[iGjeT,6#?`{Ndw%581隽~ԃL{{'ȹUiɍ]5=P(ق͝cμ8oJ=XAfa!uBJaij+XG[kJj
'BAmg1h1vlJ$$R'p9},"DYbqm#wYc1)%pE/%Ї,`19O<1)IDm^Om*f'ǧE/NчgmR"mggRvA>HrFp-[7D[&L'["[e}Fƒ"*1çs78Ԛ1b?MfC;BvH6oC_0GV69ٷ60t?g[_>@W}Ic	<3i,z~PKjkz  g  PK    A             G   org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoGeneratorBuilder$1.classA
0D'*=Ap/*"EOڒ&Ws<>a`y/ +VWB\$=ؚ!oh%EMbnFUd6>,	X(aRDj*i~s9F#B<0x4m KPKCx<      PK    A             L   org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoGeneratorBuilder$Helper.classSn0=^?2B㣌Q݊"BHE lڤjt]Sʜ*q+VgELx(ݔ12!G}= <}D TH=TOyp]_*.UC%J+rzU~}2Sǣ6;)ߓlh<0aqwJx!0]GB5$i`r`cVMun쎁kj)|O⣦N=ܘłea9-\ (T/P餍U=TO3Mnn#e!g@3z5D~f`<R3H`)$tF7ll#oP%3ݲQ4"n$]	Is_,93[Rgp=<ĲfΦꯪwGHHv1֒9F`m;#4\\kKQ`Ń!{oʑɪڼ[c=r?PK5
    PK    A             Q   org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoGeneratorBuilder$NamedHelper.classTmOP~.+tUpu޴"VPEE>tڥ4HGe/c8{so
07mkUd2,Y}3)綟7K6wgf{[F}=pY		-N6W
lpU˿Mcx<,J;9@Tz*BOFdH0l[U!fgT}]>6NW_uMtac0DȩvR蠞XjgD,!q#A0!aR,!,ApNynY몥%5ﻦ]1&GűJcdA+	`[Ǎk
R6k90?kkLAo۠`

Y撂 qYDqӸ"$fqMܔŲ$IɘuanfjNNܻY
uomS}=xk%,i! $}(#Nn334%	 ?bLӟiN	1AH>8.v|sVڰ&bOuȤ=
3"qz'PKb]P  3  PK    A             T   org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoGeneratorBuilder$ProviderHelper.classTmOA~-r=KQMOF'(
JR_'s\㮹6_iHGg)Idgvyf23|`
wk]6{c
Ӫ0L]l>[ӆ_66w;*|M:M"d;
h[\5<f5NoZaǞz<[u~<dHE"Ѓ2+r<V]$|TnNP_
^í`ԯ\:+/РXb =w$	1	d	q	S&57.0,ݮe5jI|6#h=d$%ȯ{J`P`p.}
%2|@툴%Q0Y!0!8 ,
뜂),	q~3(42$#e!rBeT8ܻEXٲ)ficB%afH
<";D:gm\>o%-(LzWv+?xZ>iE(N(GHq[;(z\ȞPI&d=ۤOPK<T  e  PK    A             E   org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoGeneratorBuilder.classWRVD
FI ā6!Ҥ@ \[B,#*KT)Wg>L12Cu+@5=vvϿ Ǟ+Ѿ> Ot#-jhd뻊jZT39[K5s5ӝ3
hUme=cjl)jP\^]=m[`yz*jY;м*y1JMٺ/I"ISҺSWL#SVTUq
 VmUʫ2ӖY7Z:򄶩/=m3cnZ%V/Q429il˲1%.({HEeL7x>pQiǩy,pJS@ȋNs,MVMm`֮TMhC1Dht"VWL'pD3$7gF"$D\qCD7EHDE|"`pQ1=9ad,L<"1C6ej@QfSsސ܇a1>"q`ows 6C8\3y`LXY9RdCWPYǟ%m}sH2UtOl)w5+~u	9\ =[K^>粶&@Mj}R"j,^>b}N-/
5xxڙWij|T-R)¸"AD\B%t2i:L12Ѐ/%c#{%+	!J$D@o3	a\U$у)&ϘL3a<0,х0[&/d5&atc%Lإ0ze&aD1FV.uEd/ҌIQHNSŵz嵓,!A.qtWǑZv[
&!6:(-C(#	oǡb"Q{ ѵ!v?#S19"@!~7%cx[PnTdѻ^
x=?|wa=
QP@ծ0Q#0ûG6pT''qf36OQES'n0ũ:*w:o:W#R. z#_0PK>  l  PK    A             F   org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoVerifierBuilder$1.classA
0D'Zm Q\Ti[SDVj.<6|Xc6.!1lya{#RN$~"WMSjC.3S".1l;XbCHm2-f	ޓO#$d
@|PK8      PK    A             K   org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoVerifierBuilder$Helper.classTO@~+s07Pejb$DHHގ.핸o@"e|cj&Osso ^9hz{/ƽDuy	W	'ԁ^Ⱥ:?ʆ<]Mĵ}7hػ^SpŰNł'TmHIsEK0`XI܍/l~M6/[ؗ@D[Qxo]?'acHMᷴWtBaٻGgIK`={եHvU&2`4`MUvM{mz]g4^seK<_O]bFj$xxU0m/o^kj{ hnTQ45j31&
f:0aACE=W1'׉1.:
 ߍccGRe*v7}Wΰ12QrJs)|K9Ք0gKs|muw=+Jy`EZW
A{}Qg. DPK8x  i  PK    A             P   org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoVerifierBuilder$NamedHelper.classTOA}[hS@*J[C'	 A&nf㮹V($PҖƶx;vE0eґCPv!=at@8ޞȢҗeIiټj[b0SN,x89n|HaXsQp?ǾQVc[yy\E^m9Gn#u:Co=Rl
Bg:BKJfs}b,-rwK^!&^k1|4l4D4h4jji5c*Ƕ<VF2n72;&Ƴɶ5n=fUu]'	ks4=w.tR!Ru
mETWu#!0c:0`BAJAZL*C<"gQ⩂
^(Q"6Ve7"@٨>=F׷NӶ|_zǚCH0CxLHIh9fs?˯&Fe;rg=ë5ӥ9YmL-[ZHcIrt[8ÛNo≮r-Q^20WCPKZ9j    PK    A             S   org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoVerifierBuilder$ProviderHelper.classTmOP~`tt	C*jA^C]/		/r!%]ڎD?xFϽ9sN97%2fw^1DKcpW#\sG96ːm_u3ƱyW\ӯj\'b+etl5=JNUnx%4~i8B{ÍmlmɬLeW	L/0VYK~bCeg]6
yTBZ۬~7UbD=v}
1
Tq	ƶ.N(0sa69VsPYͶ
5=)-UJߊj*Ő>Ciy~Av]o8V7
9aW]wD).tBK &a<%LHH&pqT$@(Kx(ᑄ	9)iHaZ,C	yx=ßشiRu<A._xIe>K}x`.?h< t<sJbt?a~'uwH{J"}FR:|L;Ʃ5Ia*Ui/hPKD<^    PK    A             D   org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoVerifierBuilder.classmSI9DT4eEPϋr<w(kf7P4UGս~ehlgw7==;˿uk'3%
Y2=7Pn|{Vs۲sұJ:l@NцoSM%
G9c-@FUTVɷmR~`$9}gB`{猌WrmKGVh̨
Yrs%sJz<ɯʼS 6Sy3U#5%7-e,Z2eT-r5	/XfaҨWZ5]RgF{2V1)ue5P<th]C5Gïh8+0Sҕj$$]2;_c\FlU'Bν^jpqlkIm'ܶD[U^޽rfqj0?>Ëfk19}[Mrxī?T55"N@[8G`gZ#L9b#~<&AQhcĕ:0C,-ngaS;:z1E<ԩw>,`1)ø&N^V	SH8ճ,RHMG98?Ni]2(\!Gz;.ZgxGKK=К2Lb0-0?QB|{UInN;5D!֛;j
nV'YadӻKxYLGc1G?-ɞ22.98!Ƒ)6
e4?plG'7;l3;"EYj%_p1c
\OxN PK\z    PK    A             >   org/bouncycastle/cms/jcajce/JcaX509CertSelectorConverter.classR]kA=ӯqk_Q0,(R4Y-_K(N-ds9s粿~		,'+I-X_i1V=XN(JrSGΨA9V_Ӹ	L;wc
?$W3c9jI^ٿy|0IMFCll8
4*=YrZ/0E#I@+9Rlk=e25
X~k$ԈX6Y\AtƏ[X|y
,lVUzGbb,C86cR\ajplz
PCYE?.6>6@>W7M<dNp`:+U]ƝS) PKN  d  PK    A             .   org/bouncycastle/cms/jcajce/JceAADStream.classmPN@-B" `RxӘ SC !1L]-ڔc(&1>eV&3~?_ q@QCQ5QYԞ 7.C Zd'棩ێn:jvf>,s6/t-]uxw蒚s`t:'ԜPKVy)HdB}lfIKHH%$	-/ԭ(b
$d 
DH#y)dv9'Ň( Ԅ7q-"*g5;53BIkP~Avx@E9&W*ZHڅkAsK \ܒ/PK0U    PK    A             A   org/bouncycastle/cms/jcajce/JceAlgorithmIdentifierConverter.classTkOA=KQDBy-AKgE+>Cٲ6ہDD?qf)%3޹3?~}
`
khjWBc0Nwΰ6/!kwKgC)Nοc;~bm`KQ}h)h%.\l$Ҕ-\BJ6P:R3K	rHTXivjL°;9Vv@-&4emI(DQfD/=`;iu>cIUbB*KXmJ:ΨE9:cX+_Ohh$QdNԃ-r`h4qĖ
T9%CjY/F.<fyp*amN0+$Ns8
/C,՚eT@hqMF2:dܔqKF.2nK[HRC߸|bk3\,s+=+^olH0TWeq[ry!EY:]5*1_[O,UyguECA"<$
.bA<h&$L>4cL# C:b-Ĕ^L+G(cVA?(<fN(C	R)xSh{$Vdrb\o=Hn(&y<
!u<H|OLT@g<59:|ROԀ	2x${\3x>MI#p/1I)omw?*ަUϯ~PK    PK    A             A   org/bouncycastle/cms/jcajce/JceCMSContentEncryptorBuilder$1.classRMo@}8&	ᣔ
$B₂P7@dD{lScGu" $8rG!&(pg?>ʱȱT_!?S~52G
[<ُtYci+ӏŁ	'aiDQDȰ<@1Å<jhVfAgaHXDfTOurIO:uM4HNr,El73b \*QhThᔪt'sm:'î0>qDcs6ye"G~c5a<>퇽QkT:lp\ F9a<ְUm2np7,7*,YD1,N
z3B
X'>tZ$Go;)2!opWyZ'RĬ/(Ζ2T[oae?Y=n\%Kݧ<ly`Q&QVT?PK  
  PK    A             V   org/bouncycastle/cms/jcajce/JceCMSContentEncryptorBuilder$CMSAuthOutputEncryptor.classV[WURUFIe.*ҋ!PLK Zz;Ldh2N&V}.,YG/}&!f` \o>39o 񣄦p$/$ZܔLƖV|,6!AaKX,v,fن+tUK79wM.e/IP׸HdBuyBBwc+)R<7%YrsLJ:hXve \;,1m& j&	(!jkڊU6-<XɌkB|qeN}N`P0#͉ؤY5q務y1,*Yٺε;:@q2qce#N6tvkHU\JH#|Ut3x"T&Y) xM&fi<I5ausQ}Q
d'㊌2^7e˸&-oxG¥u6JjSzgnO<{ d-Ϸ)pĭU{kRΓ: QV9E9f8|~6
cl)}a/}ݛ_:oOSeli"/oC'>QЍjryfi91|*%4w	~1m TXKGFJ/A2b13kܤo)׫*8TIH*dSqM*.
pSE;nhGboFY-"9!>{)ݸӊ(Za^B,	,+_)3!>kCx`!T[1| 
Fq_O+KHZYQ*Lz%TGiV/^|b0sG-
.Ie{/.G{ͽ-;(rm$	z[\w^	!ARQ9UuUO {~G `}3s=EWt˃.X}+CPQ WQ#L.m7$˴ՉjBW},}]RW1UEF<ڃZ)lKs\0"*[A$Qڠ~hƑ
 PK  4
  PK    A             O   org/bouncycastle/cms/jcajce/JceCMSContentEncryptorBuilder$CMSOutEncryptor.classW[WW`VT![T7 K090I'/U^\}$eZL dgL EXW}ExFB\;ׄ%'J!Э#dP ,eUx*U04
f%L
GaC:7)Lr#*!izrX(gX7n>)8
nm)	e)TGM*1nn)<@&E%<ez)e5m%G6f~Ո&(K @GQՀ:&4!ԖU#V̉"1=Y5)]&Loi:v:p~v͜LZ,arz<E*ɵ9m8	&mRSSVԔhl̞;M
\䠍mF4uDcI
Iy9	â4jG7sjYoUI76'v<LU%qeQGT
DZ5ٜg.a]ݡvv$/9=ְN3 em71CJ+QKenT&يո~WfHAfxa;S;Han*=O3ju{68L-=]C]triYW7jzNK^AAEc}l>[CbF Y(CUy[
ֶؗ;:OqDDsH}=KזSJhwq9l;(_|ul$5UtY_)L縸
WZh/Xw/[%p\<kС7<ɹrK>Xm+/Rᄂbt+h@"[A 2`3zlQ
>^O)؆~䴂'𼂭6ଐ@;/)(
6u5ATAdGTƁ,9/HJF3FddBa8 2ъ1A.rQF o4!ȤX2ȝ	u]^CDEo?vz)W4/a^Bj*%~rk8(XvWMc~o?Q	않j|wĕZ@쯝WBHnv+f%_90|.o[uMk뾇OHf|Ww!Ʊ'B~_arƹ-!.4޽ 8@^++Lm/KZxDD4Ԋ}317RЄ?cTn	?ANF%X肐y膸hWg7a㯟eAr֥.y]a㬨Nz9C+((
2nڈކjyx A^R.i\:F6nv=}&TρU
@/ғ}eV6ٛ'Mz[Zm9PK3    PK    A             R   org/bouncycastle/cms/jcajce/JceCMSContentEncryptorBuilder$CMSOutputEncryptor.classUNAۮEX`U{EP4(	?HiwݩԨ$ `<-mb?d9\f: YlK<a7krmmaKnӪ}Kdb5J1JVC(\nB2Mwm6MU5O/lL^c3,b*Q1.8k6q6jIV86cX<\p3Y'T:9Tީs .{7 QDV
T#
.*UcoTƞJ.00u{cȕ9}o)6
>c^HO
LhFO:4Tgg~i1yl˼3.'yjUnkMq~=v۩uFpNCoۑ8i!\Q1cs)nIq[y$1Rܓ")E*8fdE1LtCtP)qhzufy~6(;^pũ)XLJ7]^;#@!=|E.aXHi!-E'gُʐ'K D0q#H_v+TS˭Lng3CX۰?1%<-t|LrcpCҗ[PK`    PK    A             ?   org/bouncycastle/cms/jcajce/JceCMSContentEncryptorBuilder.classX	x^[^cclql	4_A@jHb"/ZZw6mқ4
=Cڦ-!NCz6H4
Y%YZ	}o7כG^x! +
L@MT`)M[-JϥM5moŊuJDjz!@n_``wS@Y
mW\ʽac5nը37n13!4ݥrXu_@	f&˳'+'+y2]uC3Bjvi+T8y#bjvzD[HB%w&/+2xn:VU66'Uu)FuZ5Ӯ!5k"zwWSІpTQў SMRZNb$VrqէT,HК?!Vj&<*	C$GC:+P#1U`hWPfj~\j|@
X.*{0{n9rۊj,x[GԈck햇doDdP2kj)0?PHNdg恂&2QAMPfE)\nq0Yӣv8lZ!ҽKe8eưg;fciFuAɪqp,t#ݩ'ʰ"͈޶`rH4
F}ޣltFQWND"9=q+knphu
*qoFeUtfb^@V]٭Ȼۡ:EN47[L(}d:dS)'XNnK{%.\.ҥ='aT9Y]M/,u܂Cy\QLЇ4bJ  RfP54jA԰7
$VIPXe2mN[HEתa_)3Y7Vv'{OкP6lV3soSi4U>L7a*+(0
s5/k""ZE,q"VR*/ZU"։x"^&jm"EDtFĵ"6NF"Dt+zꞝ%
hAeKk`&p P#EϕCr)^h$33^/55wչp{_`g:,zuoB*溛ŒĐ
sl'o}re11/&䲢H6M	KPJ['$M(&b3@cE!h8Y?-M̿뉜Z~H]VsnBsNn2Č}))Tap*/u:yK])[^i)~܋%AUb`'ysJR*޾dt
]M OOB&Rp"*.a-$xP+a&^)a^%p97&kHxxfPą2	/B9L^QRTH7H&	/Ǜ-Lʐ1U|]bC&a)angnY{x>&$ŝCf.	&-%=;T	
Wb7>_AW>[ɧ|g|a&Ger8vp#t&|#yw]mv|ɗ|\p҅=
ŷ\YK_cM&a=&?p'|]0Ǐ\H0b[a.UaF|
4Nrs,!g]/")hZ4eeKm<J^PIABOsh㢲F*=Kj
Xi .DzS-'@A=#gQ}#uOzZgI 4LýQxգn~uCq|PX7ލƆbPCt&ÏR{EvyE]{m/$,KØcom.LdV@~rsNc>fP,xs_0_NW)S+I|V=v@S-ق1$	p{,
Nil| %v}=y$=:=	uÙ0W!i3I	A%JGJ)&jmA{E%(Ծ̮<Kleȑ'%-,DUϐgy xue;GE#CZrO
%<|6[gDI5?QD)Y;4/M4$#[IAk*(>X!$RD.ΊoDS{A??<I>^!Z_<z6د1t|ā}n}YڌxڙRZIE1֭Rܚ#Q<UWrB(;G3+L%:|3űWIU(PKm	  	  PK    A             7   org/bouncycastle/cms/jcajce/JceCMSKEMKeyUnwrapper.classWeN7LAnftVH9لɛ$uf$r'*l+x%@DgvYc^x}?
&
آ.]
Bі3]
gtmy+Ptmeisl=i{n\hV0Yi+464H
2INwafFze:(%M,mYZY{OPtHI[:$hĞZJzTƱ*-{l33.Ɏ-.h'nadYVy!rO)o2/	U$
ui1hz##7tQJ^;Y2RGi"h/ϊCI(|8kiN=#'vc;š`+YQp#bLtDg9p~p'ͥ=5Vv7Nܺ'̬m.륥nvޙh7\3g\?188=i(m`pvt˼^S|d[ww1eSdG_6)'ٴw4Ng;QHJdjx8+܈唓9kQ^UpUp8ܬ4D,PMtP&m!YJy]rqET0E8Z͖R]vK-YG^wt5݀Y-="L@-G-1mt
$pHnECuj)W[K[%˚^bm[hh.m;ъ3Hz*yWT986%Mo͕h-x~[6VQj$@UQ8Xͤ<5s\dFO&kAI$[6CX lgxIwS@K|sbXkTV,+дnQQ@~ˇHzAw "&	]yqFY[mղ§kEZR|J	9 HAaRTHbn`%_y݇
hp+>a+>(:|Q@Hp
O2ٌqN&1&k1a;а)
\I
&`Db2AôO!	3gkBgY
p\&ni
.ýH>&32<8<*SL~_QяP LL	&?U13yF)<q<伊!17UL~YT$qNi<քx	'3Uu/EF+~)ϻӆJIs";| @=bHZ7q8m wi@B4}PsX^b+J.E<O8M2b{q1ֺbm9rXYƟqE?8[Po22l],R7fqOWGCFS"*:Ѩcw6̓:V^'4&¥&'#!K;X7ptHw.ev#!	+MF0_)𗎆H.Frm$L'w4e^h\dkq	o]b
_nWruDsUD,m/iT_mHy\܆a/(QP!);V'Pz>D#!i8ODPKXmZ  d  PK    A             5   org/bouncycastle/cms/jcajce/JceCMSKEMKeyWrapper.classX	Xwp솺NXH &"|`q"-mz}a鑤M[
Izq$#=;BH+bf9ޛy 6VyJWnV	u[gZ~n$U}-mV1VkjJVfV6T+QVqIN	e	=J*5U&ajjXc##m>M	4CUV"zm*]$Ս%aQX34tSmLh8fvdD²e D:&AlrYӁ{SXHi0,[1TVש㺆AWwV6mA(X,FCK,YBh]W'Kr(hQ@С n"FBQ6nJxH9%S|lVNݑ(vߪTaf,MMPHc݉:ulN栢j7ؒ[R Y;Us,nmz<pV:h3X8<}aف/feG5b-
=Cjg*wD4*.WG,[W703;ڻzl4`$lpЭ?	A]-sWݲ~ߵ
Q&lvP@cVp`q
ʐZ [D.Bw}ޕ;R"(ω&ܳ4څlKeV\S}݊I!aKQ5{U^,5fNZEvǙۓkQo°P_X'=T+Nh1Me
2>aJ	jxbb'[YF!1q;v^Cm&3A-U{֛VlVӎ%gRշ<X+hhX'$Y`Vmv4	4\!\+ZEUM`@5YI71ȲJ:1q:/t#%BTUfYMJR^R3U$Һ|.j]lMҖr^Q.'C\I&462O-#E_W]A1o,)TMA"(EkXm۾jϴ-+*;jmt<VHŗEwι5_f\j]B_Q|gU[هB4YnO9v2I(#tn
a'ڬb,߾?^.+|mw cI.R9,&bPuXyZ*&i!|vN4fP!c!d):X2	3y6JGd0yFelĘy(!q	d,@pTn&/d"IF/Kd<//
/g+xyL̻ɫdǫekex^/c7ʨe2x]2qk%mV"㕈=L}L100{q/&w1p|`/N&z1O3gr*LB)/q0N2B'^DI&SL>8ōX*SU8W!I	"Ǌ-d{^~Eh9/h+0F7zJObyf8H5Bc	'>*hq/rQE7n#4?[Q=~p;ԟ_$LIh?Mac4
xh8r_g|885L8s7y$e(S~,-/d]xk:Ndj~N .37ٸN=[L(	\Ѝ :R
R,[HDc_]+r]i3]^P$(Gp!leK]4==KI|?I{
QG+VWD(@Co4чNc$~ķ8*!oU+[}5eK'q<XS4-N4y^rER߬$5Fg$'%lD	I2S6Sz\*m8&8iIu6s!'I{t$322ƞ^F~,%0PK{    PK    A             M   org/bouncycastle/cms/jcajce/JceCMSMacCalculatorBuilder$CMSMacCalculator.classVSW-$,5XBuZk0벹n&XxCvN3nc9rpOG
Bzɂ
˱
TnRL&
]p˖QLYO-QV5˂{":1T0Pgep$B],>/DlAxAa#$Əz6+UTr/2Ϲas`o
X>"*96#4iɍxKcReH-2?ޢ	\0ݪcngƘݛ'pC,VT6eg#Pg䛦0vK"{K,S)nU[YZv^.d;?

/_^P&D~6|%>}oâf800pa}aF>̴uNp+%vo]I^7fLu2="\BәgyN1(!4	.d˷$%[m0"}9׆SR|q{$n_IA_!`c$;ۯiP.S
g񩆓!Czh8
Q\3ɻAẆf5D0A

}$R$dAyTLH%Y䶊IRqw$H
wU$biz!;_PV)W*Ѭ6|ݟ,K-(8}
J鑅W*
ʚ9L_/ni;Y0ZNLAbt
kXXoG/׉X; oN$n6P
Ov꟤ʟZ :1tq	FF?:)Hi7!QpvVEhOa!A+!L.~zV:prBj͞F?>ohl^bZYw㞦IT5NzPKe  |
  PK    A             <   org/bouncycastle/cms/jcajce/JceCMSMacCalculatorBuilder.classUkOA=SK ҂[PPT(v.UHI(ViKdݝ9̽sov~5-2Tu"C;7li	efx<C?ɭ=m}@r(NA4v쌥LiW&'8b9.3e]OZ5R:}$Rd5SP\qSϘܳy$.ލ8P:Fg*señ
ڪUp+e:]Ug-z9M

(xYAV\]	6Sx6-e]kTK^6S"%,5Crxb#AcX{Q=
[ՂL2"b$\+s(gGv(Û6evW*]`\ZJv[W_\[yhDuxG
~y!M4ҼfOZM4Ҍĸ.iVI=x*?lmN%]WT'݅u'Iom2v>oS9Oo 諝>J(b;#yѥ\ /еŇ,>c6>LS# syZv8<[>t
Wc%#"?GhG`+A:!F=ۡ%r)4Y_RiqK`^$vDV%CUPKi
    PK    A             >   org/bouncycastle/cms/jcajce/JceKEKAuthEnvelopedRecipient.classSkkA=7Y&+>ڼXTFZR T?1ِ.4`ntA\.3{Ι{f~+Xc<[?cI[j)Ъ16lFHB}EiVc/=p{%d;tX@oFRyvDLF"/E_Psު7T؋84N9RSǧ1^HnC݋qSc	Ys&,ΌV;}q$F|jwR+bX/)<PW|V~+/g냮ۺw!;*}I]jFhw(9䘇^³1|/%jYi8-,\.ay9X5qâu`4܎b^P"'EZKho\+c4ʟq3oTq{3}		n}Vi$~ PKȮۡ    PK    A             @   org/bouncycastle/cms/jcajce/JceKEKAuthenticatedRecipient$1.classTNAT"^.+e[	0#װm>|M$ >̶5&stw|;|+<aH_1DS
kk˧Z۶]0\woBi''\iOX
j}-^Td"/xaN^
.۔wP>ƋwqQXqtjZ~,=3,yثVtih%]Ȃbdq)r1kj2`4%7N5F
ԛ;'gmu;HfFN<WA*z9
nqCzԷ@X~8
1
t
=nhg'XTMB2?f(͚eoRVS<%'R:9W)4j&~6TaASo!"Bm6ZtoR_[й"c:pSG?nm`:]e:	L)R&cLasmz9AoӖk9^`}!^AqiЛT?}^Rtuh].+`c@8ӳzV&i-nd̘aޘ!cFk5<4ΰF+B7oaɋŨ=dy.2>aCM7
1ZAheIԑ	%/y
=ãQu
uDd#PKƾ  _  PK    A             >   org/bouncycastle/cms/jcajce/JceKEKAuthenticatedRecipient.classSn@=5\BJ
- AJԒVHT*xZ6Kȵ-{S/	5 >
16	Ղ,3so 2C91C^V^SnBЪ#)$PB-E9Q#/t@ϩPhK~'GRDU\EJhS1)d<ؗ/o{}**IiwVzvq$؝lҥC	ČY)[]aX,ožrT壔r:Ԗp6."<nލ㐀iT<Rr@2,%>
ꏘwI9ǼbSK	Umd0oLZa଍8fqEy,Z8,p.2-ɯ1랧+HE(Q'C
͓!X 8O83ȑVk4phPjf9DaZ/7Ƹ!XeS,}[dIPKE    PK    A             <   org/bouncycastle/cms/jcajce/JceKEKEnvelopedRecipient$1.classTjA=4ѴZ?j[l* Ac~V*t3&6aw?0
Cw6(h0^fιsݙw ;(3DGRIa-Rwz͖PZgHBSPr4J8/	t>2]>U>8
G3x~>9qx]a;:#{
5*S	Izv];ܛTcgOaqqݑAʰ6n-*\:k Z\	H$p!d)}ӧc{z"PݟRm?>gNSQD_(ο[*7Y՛pj->Ts>vSmYXer.bB̘p-sØ)Bbu%l^ U`5~A =OSCV\|uJ%D3 OBO҈`])ϕ*#lF(G]:E3W
ED	AVȚDYB6?L
W&˫GLoȾ)fwưa(J%PK5    PK    A             :   org/bouncycastle/cms/jcajce/JceKEKEnvelopedRecipient.classTjA=]Mk+2`#nTq2ewR?> 
X|(F⢍?\w9Ν/ 6`1d82j'變ʞxmߏ5ԁzWѲnbW%!s
]r$E˃vC|x.Z"&A'{RMP=_u?Tf{ʛd/:C)@րaഁ93`X{PFPޏ6/B·w]/pAC;p8Wq<Tr@#Jp*^Ku39~bK]OIRXȁ;z-ƅNbd^9Md,d^5Qub0-2Z/P(eѓ"A
CcS4g+1V>.w5QSlU#,o+p9F~J7?
k4Ҥ%M
PKzhp    PK    A             1   org/bouncycastle/cms/jcajce/JceKEKRecipient.classVkSF=6h&~ hZ^!	Rhy1#ydAp7"	Li?qW;dܕs﹏߿2hchZ,0M҈\Nivӱ=i{d6']+'S鹖fp-mݒǦycۗ>yRxЕtYGWeĔF2Iv{HYag=iz7T)egflZ_w<t-`nu"~gv܌fy/+
Gt6pq`Xg<˩J.Y_\P=SҘ;0KTjFyHf*DlP~H#@(5<s#ZQEiX	njYvպ:ܚyJR~;қ-s`F5"kE9RzNyd r\qm79z8nqrCGgIaՓ00tɦ+_:?k
ՓPɯv75wd3掘'Bh
KN<Ðɥx:42]y鴶fBbT҂z$|ހL}a9Gf#4>":ncT]o)ь&ѯD3)1'Jт	 W@/tb
QbV9%5ࡆ;eHe
1,iH(]J<U_jc
x0Df4IA=Yx`#&}kDTNʃR]3>&'JXO"qF	[%|sDN<|D_~},p(Fq
 6`?\ {?uG5&ʙ{40Nʜ'zUe4|Nje3իu0I"Uo'28TYwQR>Zķ=їSĈW
Mk_DKhQv( Wׇz
r|_Y2.PKa&U  j
  PK    A             >   org/bouncycastle/cms/jcajce/JceKEKRecipientInfoGenerator.classkkA%kk[ڋZoE
P/HMc)~nqB*1`A4I-rgO Q`<Tw&Np׋yyi*|%hS2{Q%<Pw+KWI}Гc󄊤[I%rPr*M˪f(*MǯM30n`$_\Oa>^wO܍PDBb2,v[-ؿ0LJ
YT'!5_""UE'm*q>$o8~iů^cmuc=lo{|'aR!Wnˣ7ketp
-0LkrF\rɂYL኉,LX4)7aaNU-״\gxT0Ir#gQ<NB np!@57[8@vX7%38w8Fv_߱\)|9PKSJl    PK    A             <   org/bouncycastle/cms/jcajce/JceKEMEnvelopedRecipient$1.classTjA=4ѴZ?j[l* Ac~D[*t3&6aw?0
Cw6(h0^fιsݙw ;(3DGRIa-Rwz͖PZgHBSPr4J8/	t>2]>U>8
G3x~>9qx]a;:#^4j(\/ZgvCo3TwG!)7qτ#|amݼ)M[6T.=u8j
'HBR{O8DV7j>~P}h1DٝGxPJ!Tnz[kř[37}|[_|!Ŀ}:ƩT,,\Ĳ1W-,Z\717SHc-,n1^K0,t@`5~A =OSCV\|uJ%D3 OBO҈`])ϕ*#lF(G]:E3W
ED	AVȚDYB6?L
W&˫GLoȾ)fwưa(J%PKw5    PK    A             :   org/bouncycastle/cms/jcajce/JceKEMEnvelopedRecipient.classTn@=R.
ڒ&H!V *!͒:rmބ/c@BD%>BCᡖ=sffg|`
eC۵#\\T9
@	ղZPwmM5d(RI۷	|Y\9"Ԏr?Ns meXN$D`WT!<IܞM2:Cߎi3Lg[S`X(ouE_P^`!}a'Ly{z8I"t|pxeoզw60-͓#)G2>ZId|L=թ'㉜fC
s9ЀGҸ)\K38<8k&
nbWҖVdC\uU`9"U"zRDHah-6GzdRas`2YrZ[=tnӵ3[3#様aVxзI'PK>K     PK    A             1   org/bouncycastle/cms/jcajce/JceKEMRecipient.classWWWB
Fjjh@\""a6La Lv_Zinږ ֟sOI	Y*}3߻˻㏛`~.,U}ؒ};5]3wIh!J8uj+zwDUL%!亹<"\pkNGC`#p%SyBze4jzr{+#YÉʴ\/
pGvonJ(%٦\B	W;蹃2zV"7yܰA$W`"v-#a,5ShHU<AExjA=fb6Ղ~Aؚ1h
,EM-٧;nkK:/-jh=A;Λ:,[C?qU1 (^i鬏槥4heujHMIؐ]ylsvOc0\GR٫2qsGOtkIu.aMV!UR;DݘOmPAj:e,ٻ|F-((2mQς) 
<e3Mzu;i43鎄F5j̰(Y
=]*GEEںfr!1vammѲW⴫	Bt5W})iP]XM<M3t=c;a%CÝba
ýk1560xdos9m_B}sl1Y>2x^DŁʕ;R1_9/5|YDMQD:r<!:WzQ+:W_;$Ivſ֕Y_P3@{rXnɷqwn'IϽsw<Uf3L9/Ѧ,>ohj|
eYlcsoyٳʑݛ[kώytNG^guى{hЕ9^elG2Q˅@2X!jQC2	aa!qzeTORCB<"c{(FPe8XAd,eB/ABBx\;u`W\yv^<@+u
/
8_!^U!^wB@'pO:ЍR4bTR4'xNShStOofH~Zc*0		`G5/gEƒHFZkn%dg魙'{a$>'8vsxfvκ'p]sL	[HV[!d]58rl Y0*YFf+QHR9[S;
q$)r"G\[pB<x#d ɇ$N(ذ CTb/p*{m"gb:|"pM%LG	^>o$K<}+:xɄMRa呋ܵ΢1|g^;ϣ,ci_C+|K3_;N$8S~`-->Ei
a#]PK:    PK    A             3   org/bouncycastle/cms/jcajce/JceKEMRecipientId.class]OP
]yq;0: 3Dp185&\H{JطXe|:LMbH2KsÌz'Wo}1wT#U/P!EAJӋbwi!}a)IlKdJRm~@wT&
8eX!C>ds]e7'zʕ6!;r%:['IǑ*[IoiWq7B+]CFaRÂ
ViU=%[/1Sd06[qJ6{jP옵{En"pYv<e{-`pKDL@̀{naadc)<1,SwL,rYqK:J
}
:?~ϛ-"(Ig-R<F~*cZ}?TJn~y3&dBzG3SO3>Tl
lPKwc    PK    A             >   org/bouncycastle/cms/jcajce/JceKEMRecipientInfoGenerator.classViSP=J$,.ƢtEm#0~JGMMj"tơ32x_)m`s;6?}`ZuCgIfoi]JJSn(l%LA5fC3k,k!FTUњVRyC;Ԝf3-Sr<BF",]M3qf	8QdNijJcʲX4	7r6DMYk.0YmZ:,l2gRY.1yNFCIVϬyIŠܼ6ٰ=7=ŸlS5ffl3[V^i^xU"ED\"BqUD';*

xW,c%!5z
OJ(S{=f/]<n$UKT\b2oY|t<]5$j)-8I5X:z &om4[!iQۊ[m|*kcBo[:}Fד$W0]Nߚ-M-Czy=ʐCvhà	V܄_
$t@ЉaF$ta'1SyfB}I]Za:vй/ x^{@
RLE׋44Dp1q
Q	CM4^}t-23.Tc7[Wp|4p;7PK-FM  	  PK    A             H   org/bouncycastle/cms/jcajce/JceKTSKeyTransAuthenticatedRecipient$1.classTNAT"^.+e[Q#%bFװm>OShb%g63soi ,1CW*!J.?][>aކra S|[˛yJ-|R`Kn1a*+U'}y%,bSnE\z/#n:-%aɦشZEzfHWu*f%K/,G}kUYT,.E C_)YI`BLk^[a׹cUF\·Fe#$-ϕ$HϧЫ"y.y>-JCLC]C+5aJ$5΃<prfl\kJ D*I
I
UEJXl]P.FAЍTmڬCAͭZtmt:ЙvC1)Cctຎ.0QD2I=ӃfI)Vƈa1b.q0zֽk9^`!^Ati>/)|r˪/p
ax\h'NÝӳ{Vi=4"gcј#cGu5N	V*>CʳňYE9@;SXfK㧘| 2'4	^S+dPZFVF1#L"'PK-#    PK    A             F   org/bouncycastle/cms/jcajce/JceKTSKeyTransAuthenticatedRecipient.classTNA=uQ/"RiA@ @0_t(,;w	|
MI| xMfg{gv#pg=RFj*`蕁FW焤%0fI;3}eD`+%]bijyQIR<	3Y[RՌ}*)Eh<fȋsK`b11<X*k<%]2H5D.'f\I)3bpI,X,t[-Xamyٽ	i"_+dVƆiO*C.&AU{Q_ebz#,B7?x'&R9ډuoO9f6rx
O'ߧnp4kFG"}fd_Ceq=ѩ̊6\vWףf7.ᖍ^m\]펍$ma!Qe`B*(z"U4!ڈ!Es~jΎbx#P4;O7OE%62K%r۸?ѱ]$WT"ձ>a@c,R9 PK#J    PK    A             D   org/bouncycastle/cms/jcajce/JceKTSKeyTransEnvelopedRecipient$1.classTOA*V?90`JH`0zwx'M$$Gg
idg&3|;3?}jv
ԦTRo1,xB? i{)"Y
쨰[:P"kPh?
]~+?
W3l}垸<־p^t]u]qrqo#h33l]$P!&iʰ#G;'=nt&N鎌KG/ҴJ2P烤@k>0r9\a:<۱3`Xj9~IQ52]׺t`f4T/Z:<u
~/ո
O)jLg)7ܶ\`d2-dna7QM#nq;Y,Ql3h9:~KDynG'5ݒ	,,`P0U DSAL`}Β.UXbZ;_`jg,z@I3ғկXdRW6/1Q|[#
`< cBoPKC+=    PK    A             B   org/bouncycastle/cms/jcajce/JceKTSKeyTransEnvelopedRecipient.classTNA=uj+_"e$)!u5nMja41HPƻ-6+1q;s9cf}<8jar%B<3$,_
%Ղ퇫qTTIҶZ-dE
ֶ|i˛Ҳ=׉R(7%=eäWZTMr«/HLV-Q$_qz\Ju4\*Q[pOa_ܧApNÈ]y
Q>3L:]	u۪7|A'rza6MGTf9]fE8"Gf>x~J}He8sVqn޳ $'
dx}2O'R7y8{_:pSwa}_{70+ju@
FheǤKy'|Ց$&b,&`0LǑ~&@$$gXiΒ5FB4뙙gژAhw0n硑;Dz!!,!sN&;>Fq]1jќPKˬ[?    PK    A             9   org/bouncycastle/cms/jcajce/JceKTSKeyTransRecipient.classWi[~ C쀝;iM`6nXd#A	vt]Ā43#龤[%{4隵Yiy[??u9玐5ōs3g}9@/Pԅۯ*_V
_.;&b1.;#noSxZ]Pp984H^I=OƧɕ5Y,촂fVcxD)h6'loLdtrr99yž:kߍhH3
US,{V>^,;s|I
'?bs	RRz2CalLK^f@=$\ye	FFHCޔxkW|M'F)ybcBn-͜ܢ09D-B)EcňZh"NܬagINnR.X4SqYp,o-*yFwp!nNХȂ0;\`kzY5\;J'4=C:U
3snnNDtj_׹P6rR`#
gvi-[dQAL`EX4BQi&6*BƠ҉
"y*Q35u9
Hk7I#'UhɯXTfUZUZ uWމ&KQ5p^!qcbZs܊4l"^J#BAqKf;IjmWnFJ~}SowñB,(ްĘҠ8%*UWqB*PqRŧU<"]EDENTVUѥ[E3*zU7 9cΡpӆ؇\b
pdNV&Ahgµ/c>CdX>N<#0j(tG#hΆەW)s**Vb R	 )]HrUt<0#6%U
Hfd-^QU'%nL@VVsګY
n콚n#T	x#[dFU|ۭ;5QY:4419:14^t|Itì0i5"DymxwSHNx: L,w#9Gq'؄)8L\&&7jƚ|w5be
cihǗ|ɷ5LLaIMi&gc&?(aҐW4q?q#GV˳9]3}Q64R8$laiǰZx`i+\/U#;Mx4h=O#[Hnarvl
|W62x)R"
)8v4P\%ӳ-&j5e?P;QʀsD^3>cerTwq6qoW(CJA̕dZK2jCԓMlx@m	ȋyZ^(l<UzWCEZm2A0BRWkO&~700@E`ܝľ_ŌS(!S*ĆG2X
Z=B)%fi[~/[-\b7FKXq{vFVc!PK    PK    A             H   org/bouncycastle/cms/jcajce/JceKTSKeyTransRecipientInfoGenerator$1.classQN[1=	ᑖ<,X$)Ԯ*  tt8CptZ	ĂBʮ39>s~| +ƚM`j@@5v}6ɮK%̛8|m̩*R7vw"gȞˬibJR9jIh:viʆ!{ɒWyX(]t(Q*cR`(8|K!Uv ;8ƉrW{ݕ7֏Qe&!dmCިGv#jh]Q
ʘ@R>NcL&Pl	ۧ.0wgT@Q8*3̱-r-曟!|x
x/bEPKFS"  a  PK    A             H   org/bouncycastle/cms/jcajce/JceKTSKeyTransRecipientInfoGenerator$2.classQMKBA=c_4lB-x(%AҦ8ޞOyi
E?$Ef{y{y5uvd 8"#lzq^O`c '5RxH&>S4kl];6jdkr0rJ'N;mDQrc2؆Zl&RoR4H]||gvoԮ*/jbEş+8X"bY-ޮ@׬m-2(:KgXbuFs'[X~^*Z(8(VM"dQ3PKKȖa  &  PK    A             F   org/bouncycastle/cms/jcajce/JceKTSKeyTransRecipientInfoGenerator.classVkWWk0YmT*!	NBHPV!XbL.q ̤3;sTWϝ	AALV}9g7Ͽ	`? pH@{h𾀎|Z@gh>͇]јXj!F/Jhb8L4;JǼUsB\mtfr{G܍ɻbaNj [q,UsX)ƍRYZՖ̺0ŮjP/1tϲݥhw*3J)1,1R9]
sZ6[͔<ibUBZkTE覒\XMCIwe%XQNJYʹ;,G 5a.7ouA2vy~*+Efhj;WH v3mV|lpXE)4u[*7MoV?"!f-հ]uڶ`N1Ycu_&=Y~C_GaZUH24gEw%9Ssjl&[cSZݤC9ũ:jSQ+S/S"'ⴈ7E񖈷EEqNy"ޡ9q	8n?-4}":^I7'ym }qw\2Ԛ&~bz)N$-^J
>Ze}%8]MZd?B?seW{WuxȯZ2mU[5^)LflG=8}w/pnw쑒G~o@aK5n*kjw삦.-$^ ߉!㰌A\уNG{82Bzq?%81nrU1+c =9sHsqÙn$q_Bw9q$C	0+AAb8q`E!Db$JRP99,p(KzE Mq6ၼjKjuV-VA޹q'/{Ԟ
Gב*Dw
=u|]_??ЯbD׃
iG֡+DpPÎ3?	3G8sc<J_5(Jގ5XϲHkPGm
Fd
KԬa/"(0~rm&$i$m'!.u|*iro!ipd=d+4NpNHԬH4z⊑אJ0#^߱7Rݰ6
*^9
叄"35PKm  
  PK    A             C   org/bouncycastle/cms/jcajce/JceKeyAgreeAuthEnvelopedRecipient.classT]kA=vMj[GԪ6ePF5	4Zm1 T6i2!]6!W
Ҁ/	xwyе39sΗ>{cH!]G	Gm'|I"N]C\5bİғ!\Bf]m6#nUOoV^6jC.<%]a5#Vv"Ԭ;^Uq85g z'ZU[ٿJ~r9Tՙ
L2l?t:fu0tRO̰ݵ<ˣ?Eݟ5Mbv)Lv)Kޢ$Q91'_K$wkӪb?7fWp4{SYugj*p%TCi=]~r
	,@wL8-Ӆb
I\2Ҹj`ÊAq!Yq[#}dx -ҥqvKOЪc!fpCh/3!nojъ!wbF#;*$IPKݗ  M  PK    A             E   org/bouncycastle/cms/jcajce/JceKeyAgreeAuthenticatedRecipient$1.classTmOA~T!
\bQD
Hbblrk|_74I$;kC#33lǯoCSzC<=p}vm(z+ޒTNmZwlQeC;m
*jS3t[)M~5pdPգCKGeYQg_Gʑ=^	IKմWxaS9LMQ5`za].G^{)]ۢRak,CwRs}ahՖ"W<*]Hh5`h3p@$CZ"dsNav2ܜu8rYui?=VaHdIײx\ftޑ>t%h:5D?	PyGlWyn;QW27PR?-巖QfMtcDn-m	D1EDFZЏQ-ZiI	b"L&0)^Q|
ӺT^\u-;<d@îr}/e.\JAēIM M#M#Mi_Մnd03q11rc<̜`37O+F;dl1
rAD/y<ySZ<>C6m*~]^)42wGg(#bQtDs$胅K?7PK%e8    PK    A             C   org/bouncycastle/cms/jcajce/JceKeyAgreeAuthenticatedRecipient.classTn@
ݚR.
JIҀ	H(JZZ	TlSG(~$HTx'q<CֻgϜ93ki?}m{kiJt:g_r%kw7-S>.)>|KR@TȕGYoY
/tE_@9{Uۨ(sb11dV,-x[HkJcOTTH^mRVCKlAF~İrDQMcZǌCq+6r+"mշ|Ka%'~E:Q4.g[zwVZUpwo̎MC%~GyQ&F$<8#c"ϟcBіBm
$r~WP?/m
%U]۪~qvt{Bs)0>)hu&$$Li\0p
/`,3$k^S2*`Hk K%R)8AVX`0s˘UX.4>{\6>e dES3
pgF"7hmМf
PKnSh/    PK    A             A   org/bouncycastle/cms/jcajce/JceKeyAgreeEnvelopedRecipient$1.classT]kA=~mjZQU}(>VSt3L̄Ihw;;PhՅw9ιggO_ <@a,0H*i3,li
<"dtM݄24Rx#	T눐Mtp廵æ}w_wwڑx3O숣-?b[D;qZCi=`JVd)_Z
/7=^xԉۜ4Mez<zZr[RS8hp&1D2IL%bߵYe!5<RMw'"Jyn~.-KX5'+k#-]Z:o7g6BoJG|G{@znU[5kT~͓8L1 fU64pÆ)`)9b`v}.LS7R"<DD7C~-ij.}M7X3`tڪ (8 M`]-xrP:ja+1nN b<C4ߦbm9ʌD#VL
Wˋ4N
1HGq$&GQ
~ PKaW  d  PK    A             ?   org/bouncycastle/cms/jcajce/JceKeyAgreeEnvelopedRecipient.classTnA=+(*Z+P-&MDm$1^-Ônv׾&$6%|㷠\Ui㍛|s|3O !ǐx(ԏRUZ(D8s_ZTGU텳iӾu]PZ?}/$qm2-vs;Ў~`U7z\xZa1!fEnsamp\O4mm'S.z1&We(PbX=&H060m4pẙͶݵ@/ue,_1,玊?ت)TC_BvJVʪUqZ.kM*KJj53MDzK/R_4ڂNÑʭ]wJEikڗU~8q:_&I0]Rk.S.&ǥiCD
WM5&Ҙ71+"
5_u DAHvYc'
K,"pf_L}T\3S(|Lxq!;b 7
UI+.MPK~(    PK    A             8   org/bouncycastle/cms/jcajce/JceKeyAgreeRecipient$1.classT[SP~,Rj!A-աSH!N:ԇ֑}Gv9onί Z#P#I6d^Lo14F*0,
ť1-\Su Z.',C!l6Q!e83Hm
h1moIFΚM!Ob:>E3fjYЬG .{Bz/M5m#Y0pPZ޳Bo,b<Q{_?+Bוt*Zd4WdU{߹dfrNWg>*?BYŪ8M[B7s&1L%OrqQr)x#ϩ%GG+GG;GG'GG7GG/}>ڭ'g芎]Vf{j8s%2H\62FoԴ,n\UN4~
Q-훘<[ep<Dd##21*CƘː0W'FL f$<ĔŜ/%/^JƬ/9C EC+<..YiRSϋ<C3ѺR%cxL]=Dwj7-%pηh?<wƊHB	KoX.aq>`E>0@t(m	~RV)fRaSG +H)_PKӤ    PK    A             8   org/bouncycastle/cms/jcajce/JceKeyAgreeRecipient$2.classJ1ۮ<"ZKOi:nlIVo'CUO	7 {XgX7nJGJa#"MV489`Hjx<:Wd46cs\
&XX4y'D$՝":YkocC!!J!B]nN?rV=쏺Q2̄Z&)
)	Ch/Α&~B̿(nQ.W|2`)P˼	PK.!    PK    A             6   org/bouncycastle/cms/jcajce/JceKeyAgreeRecipient.classY	xǱ=zrcChl `;;\&vbbB0XVvZ
Z-/@[RzҤ@}WJiOggo̼fV~=`9	TmjJzz#fŭ뽇x`v<\LsȌkX"e"e,<MFINO&8=51f+EwVC_oţZ2bNY#$0DܠJdҺjbƒfJ@5R&qڭ Wg{|,4fg!0#׸I7҉Z1[>;ݰЛlcd4=44>cl͔N*h
9<NI;s̭6uQlke\QZ~3!0ײkGFPq`&*Զ1n$H֭'f݅+SP'y)=Z+#zFTQKwHi-zv0iT6Q[3ji
}vem5}kݩDNlK͉rvz.ٲ7o﹊&o]WRTYM-W4FGwlx0e̶x:cuAC̛hIچXqc0pXWi'vGŻ|8=@nыGI]Ҙc'MgaU}#, ^|翞 N[pfͩ;;p(xv"M	Z^k~8?]nJf)>|=N!Ӷ~3ڠ#n'IieN"H(Tx_b8n6t;3úolkv"K9"]wX̣SV};8LSf}"EH9˘LetL(S9p.׮Oo E?E5'
	`!p`vV!KH^lutޤ;_Ӱd;)h̖R
~}8Я0̍rGrJ6GX"iF9g% (iYg"rH".)y`
'M5R䓢Cm՚U+M,4Gy!㗤1_83?gAvqVH8g.qH,,pΝTJ?L10/˛C	g'm틙c. uj2{@Tל(EL+eFkYUOkd2,HZgfڻOL>ڡdPmg nhg[Cɘ=|J'gL#I7 &GǙZ]'
&-!X!!.Q%ZbZu%K\"qeKJIKl(IbDD6WJ葸Jb$vKJ+qĵII\/K0$~~nBaߙw&"b	4N$RR&(T:VHfN}k
{ήo|LZt^}Gg%9~p9q{Q|ڬtβL玪S$3`S5OI}o(mĥ,/xJ[#gJ1E}EeJb6iskR $ xtȗOm׃eYPpwlt7m+hE=-g2WRTJkKNJk&:WpT m9̻9S~;0}hAY9߷{ʁ=MG`X/5]{%};[}﹤)(
x%
DSl-~蟁MS*ݐuYEE~"0wL)ȋE/,W1F_eJNw*2#QQYZ^␜+DtbU13,g!TT41d*28BLE8A\YP*f0,qifI!WVq>C>bJUxQ*.X*0,ePq>O1<V1'TgTgULy_R1_Vq6\|)_Sq!
o2|*f;U1P*?cyވ2
?a%ï~2PpV"VpX.M7p\"U
^*xN)x1(u
^?3@u|*
  +şD5C{4bC9CC%|.Rb,y2<GA}L<;zDHy!m߫"/?Yn1]=
'8EL{Lm']z*~,}o/PCe9ǇSʃNYIT*8Ni{|!' s$\8&6㭽xK0Dhilh9.r1EbM8.7.9!?. =Oq3*ŋ=]2&E>Y<~Tn:O|N~E&艜DfǖLp~N8=l\k8QƄSIfTuT,Ɉ'uV[NΈhocFẌ1&z#qի2bט4RĢ?hVD'Z"*K_(;%>r*U`RYzRX8\VqWЪ1ʈ
LkߥKݛ2bCy\3ZXU`~^`V5&HtW[(4ֶd%^2nОJ~nȈgDdLyD4Lz3B9E'MĽop>wHREoxĨ];wҼiCLCxiMfѢshQ{O c(7/ѢG*
6rE9ò0+36B]z{7N#T<ݞ[%lKJX9&hGiFj䴛G]{{i+#*kv(l}V#5eGz55#}!#ڴ:#,;FGpV(GE8TFICjOzB})f<B^{zgV9&檇ͯ>/z[B8mOq)Eh:@6ڝq<㔧J(Z:Z]yd̣zqy\2JueKq<*יKq<*y)Oվ8u&99/էSJS!$n{pZY(´n#}{唫/]|T*,s j:)FNIz&4^||Ŕo.;&GC`v9qG1j1zSX&Y> PKc3
  &  PK    A             8   org/bouncycastle/cms/jcajce/JceKeyAgreeRecipientId.class]K1Z?]EPŶJ"xcݬd2T??(vIy$' @\>|oaB՝#:fS&<Kӌ=g6'%P/jd9:U2%9R7o|5Zy-
2,X-:.NfuWԷHԮޠ;ͺJS#L,3d}Z6jj5 0P0d\_UV|-Ԭ\UM\jy_r-XX~F\1#Xl"wMҾZa#<a< &BDT<1!Jx?/9NJ[MHe;:+0naſf1oPKY~ϒ    PK    A             C   org/bouncycastle/cms/jcajce/JceKeyAgreeRecipientInfoGenerator.classY	|Tl7yyI !( Ye!HB`XЦ/300Mm]k[mZUPk[D2CL}}_ly3$s߽=sνs󃟾M땨ĢJ,(mj7!(kj>C*飿iVn@6nO~>vFu_ C1éFb9w!=QgsН߿?njXy0t29OSNm,4Ԃc(񏻝
=ʀ@h9N-0bQi11oĴX0c@	_J	kZ$hקBӯ@Hw;#I(-E@HTg<
;#Ak%%5Ƴ0bzuS}C@/{l	ѝ}8.aH@%aݩI)ϧ!6-0Uq͠>߈oNc0N{B6
m>3=ji "5_Pxզ t$JǘDnPKaNVN~j
Ѯ|u3	={L&GWU4g9%ч'pnuuv'jK9K,/6RtT׃Vbu?3l6lشed붑vCx81+HXXLW4ψӻL42.}=ԌGb}Eعs|0(Ҁ
7v^Ni@տOPj4H]Ģ_iotekb0ze3f;d䲜^?wG)4]s'}z4!8h3jYlqGmY\sAţϬ0b"Qmj `ЎfFve_ؕ*$99dΜGNZ)Day*`npt5|.u=C [5!gnUKa0^"`_LYXTMqJSj{ws,PͲi*u4f^϶
mKyp0[YpQ嘰)\fTET\9]n}>5c:{ӔvH	sb3*nU򃖹N>8HlP֫&tXjt^J^vf1NpDj1-qk10.jMes*2Dӟg,ǕY\tlvnhb>gˬ|xNϯٜy9|˲7ks{*4҇|iFU*
+ xyG朣h&a5kY%.9K
S~\Q&2=bͽ42ün9Le,:DNsNݼ򯤼;+bEr5Z"vշlҼN&XZeX%!#+'qN]%HHJI'_#qPa;$G$J)q$F$/IJ$11'%!DDn!8E7k]
hґ;i[>PNGӋ^hm`wËLPǮ/T<y sS7G`IS6܊\xr
ڍeM;i8R+l
\iKx8y-IȦyyuZ$C1-lUl<<?,Ђ9(:a߀tIdȦBPNG blw^oCA
XL-fO>ۭss1
'p]Fؤ뀹d]OtS~¢:tؼJfuĦ`f}P5iA7	W7Nz\ZƲb-s]{Uݖ2=A0L-&^`|l(&ʭoe-RsS0xE.iy>1-;Bd΍)BI"0ZF/}r
xlwZkeIR*sU}nfwj*=̅^W,LG[ZB/-vxDaS]*>z7{*/ ~Q$~Iibb+mLL6-0Y_Vq WAP*8Pz(<V	?PрhůX>&5U5cb#~K&&;<*{*\}^T܊?T&eͤc'S&Ƽb5oT4o**VT\fܿjb;MEb9Sō/kߌ&&HE?+Ub07ZiQ¤Ir&L$J&5Lj1Y!qE=L1q+XʤG#Xf&;<_(x+t3Ud'AO3iV3b9
&(xV4*xN4)8'62٤yK<"C^
^&Nk4+d2V/!Ev&똸n.&]Lner>&+V&{$XeJ*+Um;<]uxT,Ɨb&
LgrC5Ոx]~c4A-rS~Le (4-JufK)h]f@4[SVܣ xz( w%-7!wyrZܑ%,^xxZihK8vY<8-%>N)amZZ/LO˅$Cx;Y
Ә\ⲷ5!\#qx_́p>ҏf!=$
IdK8,(1(3\w✗PBL͈gKpqq"3DHMA?I
@R&%h/nL{2
JZ#%T$Qr/K_8Y\֋-}	(tq]>iߣͲQZ|<Um3k%.uW\]ՎgŬ$ėy\OEEqg娞Kqnu:Ԅx13gɀ78s((DʪRJ.Ylk#%q1(-.o:8/U(s(4p8.NeY\Gu\"⮡o!Gσ=w]ϻ>q簩QG]4{Q쵴{<.B:Gm{\<AYu,.u,~M//"IgQ߀OGbҽ<֚r-]sx	sTyʱ(!>yq+YhJ\ԒCJB|̃I1Kq7fQ/PZKV#fQNH^ӰRbZ$ }P'%8GZ|E:%ΚwxR+=ޅ?wJW*EC?ƪQND;4~ҸXVxnX(cV^?mGV0L&ĽqHv3._E!ru7ryJAm8/{SR4ƧPK51Z1@LI-D98B~v39A䩸%>.s7l\=\c>EfYƦLz:Dg((I̍YTB%,tb}Ei^PK<k  )  PK    A             C   org/bouncycastle/cms/jcajce/JceKeyTransAuthEnvelopedRecipient.classSn@=\.mV
 $R(B*<-%qږ	?1 FG!XU]kgΜ3 ̐}b;~ƐTS>%+Uml^;Ψ2̷~لۣX]B\?=GtWqy~c maXJ$m$;Rt
9jNu
(pzYZR7pjOcZ3!
L0
\ ;]aXX鈾=CʷtyR|˰/<]ܷjRv4m!?c>["OSMxB}(ɦIɋ>Yg,̆|]pu
3țᆉi4qL-utm*3 r"|REi)fK#!2F Yzjyw7ӥoX̧G9F|fDKDcPK$    PK    A             E   org/bouncycastle/cms/jcajce/JceKeyTransAuthenticatedRecipient$1.classTmOA~T!彼^-/"JA!1&Ovm5w[BD$2^m3ۙgfi ,CG*!J3\^][=f0ަra ՚S|[[y*-}㹬/;\0e*U|dy)])n"}<
!݃a:_(
=uU]Q<PD9J	I_
֪i	d?'sh;{SM`ѰnpGTzsG^{*]ۢ>aUda;IṊR0tkO+G6`1p@8vU)I"2C cv2ܜu]Z:(d9SD*]gHuJ5?y
iiUF.@T[X}~6-h?R_Zik[a,6jb&pD?u`&M-&p	Li"E&!L0F18ޫ'pv;R<Ҷ72Gn}^Jdڳ.WU_&¡&Ρ&^ӁI:6Hhc>3{lf4z\fw3'XY
ˤx0JrNGBϘFӻ
K!t'nȄ/i;3ѨFN:"%QC=	PKL\O  s  PK    A             C   org/bouncycastle/cms/jcajce/JceKeyTransAuthenticatedRecipient.classSn@=5NIK((%q JDe\۲7!
P#QZQZZg̙3_peCwc||\y
2RBw]Hrb1L7~zEB\
&}ٓ"֞r'Tva.BS-)ZR TgB/T$m$x+ư2Óc0L23a31n2q6bK3嵖+َ\#CReZ>L5SO?Ex5*H%	?PHexw=*>u˨ 鏘?HOG$KQzhLML`8m8g'qAB-L`"Z%45c{UTD%JDdкEs|,.7r;|.n,w\+]{oTF1>p2)- PKcI    PK    A             A   org/bouncycastle/cms/jcajce/JceKeyTransEnvelopedRecipient$1.classT]kA=ti~ԶFWTD}V*Vi	ٰ;	͛?FPP;PD0^fιsݙW wPaK/>J[^-|#E1ipe_h/}]>U?
W3A9<Ԟp^t]uOEUu6Cu=eJi~GTӺHjkC\_irWEW'-@k>0d
ΤN!ðg:vLROej{3jxg/"J}"b[V|ПZY/͝eؚs.V[CS_?{S
[XybB̘p)
bX kKtJ=?TbJ0!3"l+:͂mT IRI=,q1I:	ru(|D~o(@aI#/?aCĤpaJqdܫ
a6qcHLQh? PKT9    PK    A             ?   org/bouncycastle/cms/jcajce/JceKeyTransEnvelopedRecipient.classTMo@}R>%MSm#
B)E 
eܵeoBrʏ	5(؁XZg͛7;7 wQfwc0䥧r}0F5FކDނ@Hh<Q2/t|p(V%/h^Wˁq!o<Kˉ2Hёor=_o-bG*2:29vư>a8Bւeᴅ3)+3,w;'xd7p̀?!%bX+Ib~lѩ|2cuonۣ,sHô7VNH2>YI䞖|D磒&=ߩE$j6C
s9PGҸ)\K38<8k6
ncW
qc*h"U"zRDHih,5Gvleu1!]P4+յ#LWF1]=Bi3s1
j13!n~i'm
~PKyמ    PK    A             6   org/bouncycastle/cms/jcajce/JceKeyTransRecipient.classX`U}ߖwH% Av(b;Nbb'9g6F^[
;\%\\òCrw\zqp]I)oϟ?3_=} X-a@R|MܾL'1ɳɌX=0b!ӂCNCza4 
b_FnDFRL4іFt]de43Ya6j'
#JSĭz0O2ݯqeFGF"mc3f,p,$C#cy5{
ҝ<6bFٝ91EI`v*d	ֆyRE
̠a;hS:cxڃp"3gBN֓z5[t#q]TZiz]7fߢ6G؊#ü4V2F2ƽ4I{z,'K$xIa%Rn7mTzo`x)G1$ģG}Ac0t/կ\	f ;5Tg4fԶ]{(4ISj@=wszЀLz)Kca'3f$N̰fRF0C[;췢qFNFٚ
'^"ffĿ]Op,fӺ
^5-Gf-'
KTyo)1kɰP<T:bTֻ`WԘM^g3s0wNOU;:{.1f$@U"Iau%\HJ}d$/YB`ӤRXJKqUz3VD
2N%<yO;$p#@Ps/(㰞Pҩhu)4r׊:cCF$Nw-$8с"\Cev&By8dR(*OŜUYyv(_XroH_Tz-%M=bK--hYĿ+R姬=N3˄ԖLôd>*ꕹLՏ@>sSV{*u1Cm9Dɤ1PsqE&tWU竽Ǿ!	q]ԣ%k$JX/A" QbJ\$YMSb6]K)Kbċ$.#WR}I엠ؼV2~
Hu,|&r'df'vS"SYn~"{Wy{kٹJ'-7d'Zh28WTt7~S$뻯-j!R	ɝ͓Hʊ**u6ZU]ȩTCXJ@I]fJ:h&]8IC9vZf.q:cNq.w:er`{DWSw-&b&pZɗ㠆Tp'VR*V}3$}]~9i+a)Sq
aeBt=-_2*jAoS4/Rc**0-SVZv:a
~G{
ڶN٪
ͪ
5*~,?vtSé +;y
C׾N|[YIy(P`0/S++-xreUXp\
g3,aX VP(lf
1H
vQ7)7+,dX0QVpBުЌ)+,;x
WxOA,ܭЁ*ća3V|c

3	/){3|Ra:eQ18p.N*\zd9*|7A>/0|QChǗa]?hoO$GkHO`43
C%4Wa?g5\3W~k
nO?5f܄_3a'ÿdxZ-[}
ng?`o`xJKeo5 ep%~ ꈇg7%؛փ􅻇?\(ppqZܓRzR[ϐ'9A-4ꀛ4 GE}Iܴ$n?*e#B67+LGvD6/G@hNae jm
b
b
bS9y4bq/]vBb_%rVźr<r<y)RuRTYImqj	
gxiV3&?G.+++Oe?zN"ΊEYqި8-+8Kk[GCIn=*eloWYuǅȊY1'Prְ%y5?,9ѵY183ռ
Y1aĢˬ%{bƱ xm %ELRru
u%<(m\Y`b=jbH.N	qQBHˡ <!jff}w?e׽lyVbeCڣhd
XSͬya8OUN]]uy=G;];ݶˏ㙬Ўbn.syVܝw^	nvF~qwtl%VJN1/^4<7$qD	x$tH,q!qXZV@=KK%lviAuPKCy
    PK    A             8   org/bouncycastle/cms/jcajce/JceKeyTransRecipientId.class]OPU"w`]t 3Dx1`u=%[
,^xk2>Mft&y^isl0A!0-ޱ;s]%Ot!C(	ɐ E;SАݰӔ~$lPoeFRKm~@wT&*8eX!C>d?]e7'zʕ6!;$gGN`SA>驨h[vuA9n2l[nj5d5&4L2̛`N
VVS%2êYzRG.mzTk3);55*ʖYOϗ:5lSvײ'\Hʰx

hcd0o`#8Hᑎ),DfI4븅':f̲X1!TCgh(.}t%iqEH:G֦h1VfV}<=ڷwc:G!k({13Gif(G}P<#?i8;P:HȦ2PK    PK    A             C   org/bouncycastle/cms/jcajce/JceKeyTransRecipientInfoGenerator.classUkO`=AeLME@2aA\t(NHu/.m/%MK$1~G
ssާ~05K+ifoYM}Ŋ䌲SfeFibu]5R^?PY]h
	fZN]-egX,yò
̌35%/R8UɨL~*gj0)QZ۶[jyg<g:3 rM[]&11tZc*<c1;MԽt+nƾ,*hD|&a.PSY/YODVk"LozcQ@hrtǂ<oN0z.a⬾֜80=->9K
QpU܇z:1p6Z;'*YEO4~45O#zjUT+l/.x.U&^_|PGv_ToU{cԻ F M[n@??0 1^ ~L!?S~tA8Lы0aC|kF>~3la\mTPIh#`8|#tJ%<>|	ϖJx͑#qc1Z'fհxhh~8ڎī}+bq"Õr%Ę:"!%,{ 탕<Sĭ׎n&o^_	uy#޼x~w<E예PKX  	  PK    A             C   org/bouncycastle/cms/jcajce/JcePasswordAuthEnvelopedRecipient.classTn0=mBF7~mɛ.XK+m0bqMKK, UbC!dSnHﳝ~O]`<w\GdXZٞm變aAu S֯UİS=B}5cJz7re$E˃oc|x.r&&Cu=8b U#l7[-2	ijZlZ~qTD~ns@ab4qĬ	%JuwJ
ʿ$x<MZFx|7=/pt`K;bODɱH饦w:[d}*9pR+W3Sc;h``[p>+(Y-maw-c9*+{!."~H3iH34	}O
dĤZ[rGxR~11_/'-X#_PKn    PK    A             E   org/bouncycastle/cms/jcajce/JcePasswordAuthenticatedRecipient$1.classTmOA~T!彼^=^EP B >-׵zm~տD?8{-~hٛyf7 XeH_1DS
+k'Z۲]0\woBi;'\iOXrf[٫rEH_ Y^
.W>ƋwQQXa:1-Z[yU\j@:´JYxsK x,(Z"wq?'FSFR֩&(Xa7cUzsG^{&\Vò`1wJ"HI/Э<9.yغG![G5
;V$U;N&<pbfluPZsH;Tΐk5jf>y
iiUD.@ЭT[X}~6-R3h#-5ИV31	7tᦎ0QDI]ׅH)Va1c&Q096k9^`]!^Aviޛ+}'Sׁw!0!+z i"jjbLZv1cyc1!kLp8'gVNX&ÔQ;$U>Ld|0nm'_?k9sd'USG&T{IgU)B
6T/X#"X"L<]0ЃPK<  u  PK    A             C   org/bouncycastle/cms/jcajce/JcePasswordAuthenticatedRecipient.classTjA&v]ke֚i@A[/kjKB8
۝;KP, >x6"
gϜw.svWe=C<cFy:4*4[BJL$Qd3Ua[%ON	#Bi/El~̽Ta!':hKjF<Noz#]ӢT)~ưtJQ¤)昝0TK'(9]'
i%~=\zW|h$m~)ŸZy-쒹iw{\FI?uu
>4J]_dO &׬.:8Kxe
3pmL㚍axF7mp!bGulQ1R@P!1%@	 _3e&GEZYw3[Vᖛ;{us!QݣM<?7PKڳ    PK    A             A   org/bouncycastle/cms/jcajce/JcePasswordEnvelopedRecipient$1.classT]kA=4ѴZ?j[&۔mEJDJA4݌	;໿EPP;PD039|+XfHWk/&I%c@'a#iZPF"b(ƶ}	a(ˮ$nWDhۼǽ=l0(O|Px~'>o{=otR=heh3PaR{/-UGzؗ
?:&mN+=V|}ՙd4"Ņ,rYfvcޠPVaugD
՚wpu[ľ_z5o
Fm*xXw-ߪx?FJq1}?p0\Č
WLZE\
7(`>n1d6uS0LwX0-dpfH^xGRn_H`p	bѪ ($ Z4R|f4P.>ܕ>>n|}P<EŤtEa-T(O!aRW2ܞyVҫe, =L*D)&;PKFA;    PK    A             ?   org/bouncycastle/cms/jcajce/JcePasswordEnvelopedRecipient.classT[kA&v]kKGkM)Ӏ
mDۂJiɆtwٝw4`&%/.ٙ3m.?}JR]y`<|O?cXZ]/la^t$>Pd֯Ta%#^"B-	J1}e_XwG1w_
˩<ؖ-U'Uc[h,/q1c8*CK	c	y&,L)+2$g-5?mھ~Hj5~
^~ofyuTkPbLoշVvXX.<GJ)l:~OUmX1mdp9\IԫGnX[7-pB2nPvUv*F(y$
4pVX:Dлk؟?Z^+dNpo3|ÝB|qSr w},dE4h
-
PKc7    PK    A             6   org/bouncycastle/cms/jcajce/JcePasswordRecipient.classViSG}%G!!m!#`Bla	rr
AZJF_SKP|ϏJҳ2FGʦDN{===S?	

DS \MTRA0VICWL)P%]b2
z8bybF8fIdnsY	wϴMQWp;s(8"=q/-h}YM糶cz-
)
[jŅF" 
rOxC%<5s݇CNU"Ř9E~B9
\PpČ<ݵ
t)9M|Fr3E
lpX>]ns2)ۆ H<euRc#i+8݌i䭆NX/szya05wFk;He<)<,Y۠q#F:h"-H.dlKnm7&yT0ƌXgż7<ޭzNY{..c#.x'ʒcL&Vhjjzrh[PzHOO+*N8ⴊ~*^UUQqV9Q*b
F1q:̽fNнzhh<kq;Va2jChw)M&:}-g`"jb^E%Xg_dUٚLKwު}	Jt}ɿ{#L\wS(ɅI칖Yz,qWn=+ZQy1n$tq@G/+(:Iq\
C0fbNǋ)qt¼ݖbQ;:FpWXqoA\})H1hiPz_ޕbC$V5\p	iwk"!5)֥pj!vF>TG>N㛋pOEk
 d!%sE:` VE!xJ_Vcرǰ~:$Qp|@oP}>oHO8$?\%{+f*|;>*B+Ñ`*ʑP#HOGSiqGǔ
\	HWDBU|y3+V>_T\W1FP?z} 2>|U^KDe(it[w4O[5?PK
    PK    A             C   org/bouncycastle/cms/jcajce/JcePasswordRecipientInfoGenerator.classVkWUI.L֖R6h)!<@*	Ц%11L.aB3C _P%kwz$@C!gcs?w Cd	|tL?ia}	mb-%PfFBݼynEyKt4-7T-;NHLn]*eyi&$ns"/'ƣgkK&icX%ݹ|ֲ
wkG9&LLK#{&4^lmcUwKxMr-	/%䴢53&]0]#ގ]:>L'k}{IXk獥ƍPW&G%i.z#δKz~Ϊ֮tq\3%WU?$6OQPM38j|9M1kYvfF 	sӪF̵HxSVNr:WTjͅ}a-CiVg5W;d;A̱+LQVѠbj`h`+:3t:
5:p,100dx3exᆄ<K8<trwqU)vׇͬzOȀOhyN6\q=~"Dgp5Mx^N5͋ZI~^Y9xY2j}6Ğ&|.bK^<H]L)uUCNt#^VYq%vi^#TںZR)SЅ~)v1)8Yo
1 w bK@ĔTub^XTЁ
.ࡂH(8G
NLaU5|(S!4CHB1ú\Fi!2&L%R5τ\
!22n㙌i|BM8ne!]$H>k^AhOv#C#LV
J obFC5tjo#RmH	$"Y^Wد_x`cG:7'(#e|522`4EWe|Y5PSA

@frEaTFNloӷ#`:x@=}
4)( aF9-?PK    PK    A             6   org/bouncycastle/cms/jcajce/KeyMaterialGenerator.classeA
0E'ZVJEĕERt5cLHHث J+ S%Y(_ox@A+$yKwXC\T5 S?ce0Rfɂt^suRYЃڱ~oPK      PK    A             6   org/bouncycastle/cms/jcajce/NamedJcaJceExtHelper.classUOP=űJ"
CaQә=g]2G$~ ?>ɰ\&s}9M26x74]
SL3VQlb5!diJ%fz5rN%9Hfg
3/2t*]dZ䂪T&oVĺTeOe;U1+.vG3ҥiF8O˹,(n4	.Ay6̖NlKSϳgYk+ʦQrq2""DED@/(E.*z^ΒO
Nbꑩ5fH-k0JbM,
)nk5f&F
PppkӬʪY+ۆe;Bw.ӛR$ݾ%2,i=[I ҥnpNR=à?<EL@?2p]>:7x.㎄KK#C\Je  a1dm#0C	0=2IZ!zz:?_aٿ`X~A+V?99xrAχ<uoP4)øPǘ<Q_k@כPuOХPKȏs  @  PK    A             9   org/bouncycastle/cms/jcajce/ProviderJcaJceExtHelper.classUmO`=űB"
&{2y1bD9ç=b]nn1?G$ v0V&,.msOo_55EU'F"]]J&K:3_73uEΩt\f:KoeZ6'l*e0LKXL6g*EC
-K2۪OYH4fK#n]]*yPaT)Zh_25e927++۹PÈfO<<xC<y<Fxx\Sh0+fRr=+Х"S2᝶%CM兤^<Ј,TSyP9BdE77,4k˦&fDfaA9kEq%>5ʤb1'"']}&ĥ|?{~5i>\a ׭)+ܰ´i[Va\=WG
q/ `-D
L fgS3}<HWLd`h/~.a߁V@0!b_
+s~^ |!Ol&ewʴSbGIڄzE}hCm( PKP;]f  f  PK    A             =   org/bouncycastle/cms/jcajce/RFC5753KeyMaterialGenerator.classSkOA=-Sky?(݂ JkLl)hB4le2,_Z#~Gw)BD7;wΜsΝ?}`:"Gp3tVZ7/7&>hʄ/9n6v~Gj2YQG$Jf++JhT'a)*mY3#tuvJGeC0z.;UiKl|r+g|}bCJK9>8m[BV.	_VJz׻Up]޺+wPHmԮ
vmZ'x׬G$˅t&=rEydk>CxsD8:989z8z98981&[݄ןI[r*$d&Ӽ\i?wh!PCxLpIw40Ϣc*Q$kƊb3E)Pz&jAsE`OF?mMEzid2u/)ƷǿUl(cu
"u^ՑXc7&a	{cS4  PK)C	N  8  PK    A             0   org/bouncycastle/cms/jcajce/ZlibCompressor.classRN1=d䡀/ķ 
U1!1 1]
S2SUD?2vDTfas{z{?>_b N-)bՐPwuຣUVg-D3j1AMn*EMxb;?yy4hUvld8eO͖KKA]_15%oirzkjIw]9,aJ:t{뎰
L0L^[,_~Z LH:Z'4\ JKI!&@e[ØA*"F:8	%YBBj\nG,é>!^yJOCPCЂMh~te_PK4u    PK    A             8   org/bouncycastle/cms/jcajce/ZlibExpanderProvider$1.classT]OA=,*hTTx0Bxc>MCmv}GDo2ƻ[xhI9sן?a!Y(aBRdйm U*bEviyTGp<g}aicnInzhJ.EQv)J緬s6#,Xmmaudcݦ|X6CBQ!UA5ّJ4懪x]s}1H+a5h55nj04L
<pWs+fW6Ha5+"\y٘톱j8:p2fń0 lm3 |hH➁ҘbhtL㡎,r-)]ByMcu C&X=Jy}rTtb_q}w_#H,A/2'$KOhtơgT>CrBů[5JeX> >Q1±¨+}C4B&Tw?K9iFv75D)Hǰh!,-K
PK7\  G  PK    A             I   org/bouncycastle/cms/jcajce/ZlibExpanderProvider$LimitedInputStream.classRoQ,,lV@A[ML/6Ě`jTaYdqeh/^$?ɨqc^2}3o|3y~}d9n"Pp˴MaHn7x#S?x2ۦc6ZK%)7-j6COMUt,՝mz׳xhwK-Co23-C[^?<f7v}a9&(N]i]vSFHFX"cI*# Uya50L\9$gvS(T"
TO
	+¬d	W 0DiHgPN2nһ]N4hy/GzГoa%[!._*'\Ȍ LH=qJ>7
%c}+yxa
>gh{16կӇ
;<QiIW#H	52x0ƕ')O!#$؛MI)4ì8Ft*IpS*hI[HB>8P~PK|z1    PK    A             6   org/bouncycastle/cms/jcajce/ZlibExpanderProvider.class]K0߸n6"U܅L^LAP.Ό.meGs8A)9m!M,1r'~Vg0 Xmu+uЯ5^s t%w;H~uS|(3l+YYg(-:ղn^ǡ/ExMyix@ʀi`ȀPQqvWC׫^{5We\:T*ZuP
~ߜ$b`0B&F0e"iU%*/"d=,tf#WqɚyԀoc6?G#RT(j3Hs_Lxb9ͯ1w!$2#?`k@c&2,5PKj  N  PK
      A                org/bouncycastle/dvcs/PK    A             .   org/bouncycastle/dvcs/CCPDRequestBuilder.class{KPƟj~E-XAAaхsΓjL[U$P9C$lg;ߞy.RD2O=4LD2,AO5KCM5F}v--Gjr./~ҘaBAjL#X rԮ:W(A1"}3@5g5VDĎ*j	q2x؆*ƬNٮ\JJ$J K藠pjN]KD^>PFē:)B<>i륏O+RSƸ&mR nZAf09XÒa,ż1,*[`3W[mbOް@WJyOϑO
h`:M%F_PKX),    PK    A             +   org/bouncycastle/dvcs/CCPDRequestData.classk@ǿev1uvfL
`/5Fe
K?JKlڲ@{;xAn,I,yϿ!l"w<DZc:V[b꥙y|KlK		vHlYvaL>wH^(#6S?t;[Dl8Mޞ|+0!7ge`j`ـIؿ6AF$r;Rq>}cɫd^ylhmVM((⎞j&PnESTbU<RKCuW3d6}*\T,H18cXrզ%TЫUIT;gx|(_rJhЅr<]!Wjք)rє2ӯ) PK+  S  PK    A             -   org/bouncycastle/dvcs/CPDRequestBuilder.class_KPƟr?̌4
FE`u!HWsb`mS[U		}>T9{a|{-f0)u0
%ڮF!\syR-}֬wtq\sOuG%< [˾\2B	R=2ۆί;Mΐ6MM
':o
$	Sd	*>vȓySn^NtG~"_޾(8B
UOLsbW0 "XB\F2X
Ch)Qy$ J`ؤ83Z#BuEҭ|~z	!\ubhPKVb    PK    A             *   org/bouncycastle/dvcs/CPDRequestData.classQ[kA&f6n4]
֪	Ow$RQGg6!t`809~>C+~A&A=WJHNi-bxyFJ&ǉ,:ϺV$,x*JfZN U(t>=+='ḭMaDHg0;s'K$YT#,kq8;:pgh>C?|#&"4gە~_C-Lb.*(XC
.llKqW9.:
G8qV"_|
3B=b0Thg&JhQIDMq=Es)PLJ9MlF'~
u6ŭp`
byVaUN0PKAꁵ    PK    A             5   org/bouncycastle/dvcs/DVCSConstructionException.classuN;N@}86			F4t&8H8 2F]^p@Mp|ޛ7w Iw9JgO(|J>MYbtlU&
հ*$|{9mwF/BB{\	󙳅ώS~Q̕$q:lwA}?1oڥBUآ6H|6<ʻ<MM{ȇD=A<^chfo-2 'k~PK   `  PK    A             )   org/bouncycastle/dvcs/DVCSException.classuPMN@(RĝqC+I7jwhCԚfj)-<GDcx(bd#24;c"^k>^eEF%d8؛f#^TxyTx0B	OC/Oǚ5zԡh2ʳ[>MO`E<O]XkuBu&:h2`dP\>9NWPP_'bTۄlkt67X}kЮtw
ԭ"~d|PKQ    PK    A             '   org/bouncycastle/dvcs/DVCSMessage.classJ@4iXk[Pp]YTN!Δ&V
o JWw0o/ `;Q옡,ΔzzdXe2`|׋b\1$fb>4Z.H"].oR,n⢹L _4rPt8(1잯zHd{ҿii"1("%EԜ5-:|0k(Ŧ5;4['g
J45H`{/AHKOغNz> PKnٶ    PK    A             0   org/bouncycastle/dvcs/DVCSParsingException.classuNA,쌍.&;b A:f2cfԆ'MH,| xA
d9߽)2*3+J>S<-xZxϳS!!)WN	K2^IeЙ%$2^ߋZQNgW;gHK`/Fkh,Bٱdhf LȅHcl"E5"M}D9Nsl:BH[? PK^c2   [  PK    A             '   org/bouncycastle/dvcs/DVCSRequest.classVwU-}0l%M"RIDN0NBfZ
}\@E\q&*W&zLf|o}߽彙O @`J_kA	U]7aoyww-:7mݴ׌^3Տ-a>S^;MIKjBW}13~ZzrЈt*B`nr1&j"j$&j̒ Gu;	&dL A0ڲ$
閥FiRC=ۖk7W+H7]b
@	i3rm6-
QbC}sncG15Sh`IMONIv0]F,ב@
RQēp|Nie 5-ܷp$K5;;eȜ?wc9h%i#V pJF#nE4+Ώj*];;-1ħ-%
wyy@q@yӏY\ZcLLD Y%x|0]94ԏq1bƘ>)	;Q&In[
4,hX&\`J@_M]`j	/N`韕N	݉`D]YH7YH:_koBz_`!?sZÄDKӸ,H˛Nvl[Kh-i4"Rf%
+QCN6La-y&1Ic'ׯءzR#NYp):ffDsO̪b}\EY#	Myӝd/;˶{\u܅v7݅r`	(~<alyث`
Q 0C"T+h&<`>SP!`ZP +xAࠂ{?RP'IUp/aF,h
q1`25؍qщQO1*cl[pZCcx]6<.<2+oi;pVN N1&c^9A/,32BLٙ،3:/0}y
۪v,&L&vѷy%*"TwF*ՠ4J&+hp5˿u&H#ht$d4"RfBpVJ$;nH[/b; _UefɄ%ĺ9)\lO}R=nowR"_q&Rys
7)\оLq3x/7Ÿ0n6#4Ÿ0lƎ)Ʒ);Jyc
9)Tq'$-}8Kc?蔚礞!l35FC/|ab"'d27\PKv=~  
  PK    A             .   org/bouncycastle/dvcs/DVCSRequestBuilder.classVWd~e1(cVeZҖtFY0)cTK+I:hϑs{(=-&}Ͽ6-35ຄK,HPRi~g96JE%	]ULgm6HctRB
seUx>#caWWBBb
 <O72`6,GsK-o~⿒peG5KAzۦ#xDU]6g8qAG6m2t/MIYǦ:H8W3<3#Kd`mY$cǝ9wW":tj֘LAPjXL[M6v#E54jJʞنeCiJQv5WKL	B{2ze\'㊌~2ޗqU5	H.EI?`201DԉT`RNH"jypP\qw,2nKrgJeǙ3akˋًCadAҧ4+ۮYsY=;ϯۧov~
:4<?:s@kgͩ聦CLP0bCŻT37>maJU;*>]Vq!0_	.[gx_U`&[ecW0##!VbUA
+7KOcXf(*H43)Ȱ.
,}s۷Ƌ^Yņ(E'3$qsvjb<eAg2]OC(9+!9k< ;`=SCBXǔHyBEPv)#lP8Ѐ,S_$x
o"vjFT#5	Uetd߀O)q<<􄶬GaW\]!RkAd0
FZ:߃kMqPKKNL  [
  PK    A             +   org/bouncycastle/dvcs/DVCSRequestData.classjPh4Mٸ*$"tW).B_o.HBRpCIvu|s`|11٤Di${)v2]V+CeZ2U%"٫BY_K]y14Z#ʔv`; YK
>
b5<X\8fYw~ ׿;t곷X7p/LX;jPK:0I   X  PK    A             +   org/bouncycastle/dvcs/DVCSRequestInfo.classVSUmaYmŀ-H[(b#Z64mM77W_j}3~K?oexR4=sf ANH§$BX;*<)/mEuӲYLWy-#EϤ
S8R.a3-AOhfʠhp}G&To6MdX"qG,]i,q5A^i64+3Z
s<=MfNhnQ#x 	cg'(
#'Y^TVԲO®Ti^TY!/Km:7O[6Tƭs0e^hg },7fXՍpڣSg
]HRV%6St&ɡ:iM
SqS)V-;^е1-g'z(}e{䌞qIi͍q}ָw`ݓ
⒧cLUgP(r2\ױLmkjfaqz>y]mOa
rk'akԦ2F:YakNbPi2el2v)#$#,#"#*c.ˈI=K+aShdyo
Gѷ˚L-%"嚻Ut.6hnsFBk3nϪkgjZޙ#wfftčzwv&oN/gdeUo[َ
ۺw)p_qJoT[ѻFZ&xT<OE*QfQC*`؊gTt2lİM.<as#*1c*ZqTzS Cx'THP0^P8
)>h9qeTЋI)2&Őe+i+Ph40Wp*bZIw]op#~nTˎs))de84kyoHDu4G`8tʛGQ<f#0StyF@Wyf*gnA6qxp1\">.\^&_̸?|4wWFHs">xgMy|>/rn'oa<.HEI4Ʈy|jɽx3JIo4kJȤT~2ӏz"a2SlNsRM7ݒ﹌zz?~c,Ru4`h`~?"IU.<
W*$_|B|}Xx˛bc-#a_-kg;-2z̟萱ёޡv{Y?+{6QPK'Y  <  PK    A             (   org/bouncycastle/dvcs/DVCSResponse.classUmWG~ˢ
$ }X-ZK!.4;_M|9GOG 	,srg=}g .^;`hMgVҙG.2PWfBTr3elnϮθMC	+oBKzƤM4X'Z	ŏe^̼P;G"QxisNHq:CNDϓAΒ"_Ժe\qb)pw~DQd8Ոt9(0FXG ݄s]B_w͐MF-ml	OAhu
%\PH G݆qn¯3~0"Gz)!7T+36W@LPJeOYM؝wLZ~FĭZ.Q]1c^'
8e-
m5p C&+t<t&CT}8L_ER$p&օcXC^8HXh¨7Ejkfp]ԩCuo\d})$'B7&,t})Z86sڤpB'>`#6>`]YmRЎK鲅g|ށ\8MbfB%kØ憉fD41
LKmphb'}fB_Ev/κ\Ž{9^\ևDSТVzNa䝡֞Hy*Xb!/eղ&w~X+2;RxeJ[zXy/;+w/c9CkU|RhThTC?!G2l}HGTMHVWM+5+PK  C  PK    A             *   org/bouncycastle/dvcs/MessageImprint.classN@ri]TY
	PF.B%(+xI\Pi
7dsNf? c ZTAl{V=xtĻmF	5>3]!sahܳ=-۳;:ԱJmy8uV+`מQKqpǞzc&!&!.!A[U _N^Q/	Ԣ:VU2$,AdD! l)䒐<Jåu.hkĕu<]eMA	$2!㳄gQ{F1,9r9ԵTrPxz4:
D<b[q-WAPKj  Y  PK    A             1   org/bouncycastle/dvcs/MessageImprintBuilder.classT[SP@"4`PDiA4=`H2)mGwL+/{s׷ CFdň'Z4VXAEEǕ!g9yE~a Ś8<N'S8Jz"dlEPۢc#2߼]˛g6{һ=6tQ哒$1f/z
M+fͳř%J.u܉뻩֓Q_>7щb {v¯~!^u-W/봶S
WpKA*SЯ'feQOf#5Khpu(iߜ
^wDLI"Ff,?mԏ~B Q^Sp*ZѤ]N4k
]ԠaJà*J#)
mI-ށqLSYØWqUTłT≊1,0#ŜI9z72tm~ɖSaW&VDI!k&:h,*xH tD?c+^1dV%$ΡctzMs(e$X9!FxJXt2^Fu8L[BVPK(  >  PK    A             6   org/bouncycastle/dvcs/SignedDVCSMessageGenerator.classTkOA=,CP| Z>mE-m!B,!A>mXvqw_i%(㝅JK#_fs3w??~E!00xb{޴Loa`תe{nvG7
?Ը16]Ӱά0tkf6my"TY.h..}gàjwN411Բ]^ke\u'U昻g*ڂw]P,5I::w]/_xq:C<x+8Y]UIBSTQ(0(
dS>YÀgS	$J$aH°Hpazg2WY2<d<JzD1y"0EL"x圖m;@')
oۨmAbېq)
RЇ;
zqWI+R
dL Pe!-ceDPFdBFzq7KZ4}Q[m1dw!IsF,'(/464ϧ;W ɯ;&$tC̷,1R0iܠyWEr(PKz    PK    A             '   org/bouncycastle/dvcs/TargetChain.classJ@ƿi?Rfx=TznR6|+EP<z9Fv.	Y
$zÍi.Ww5L>Wv芷VwRpW}m6D'D@[֕pͦ9rA8Mҽd<]h qGμ\[o?8$%:7+@w2#Q
1PK5w   s  PK    A             .   org/bouncycastle/dvcs/VPKCRequestBuilder.classTkWXݷ`#1FAhǈ`-Xhe1M&,WgsҊۈrrry8@@eޅ7y[2nͱV-0}gڨ,[Q4%+ܴ1+ddWx.\#n/0hy䵅}&@`s4j]5f=\|yp<"8$3Hr\hywK3]*G)=oPK)p4
e@"Q޲m+2v_a-xtv<~f[TnT6ȭX-wGʴQMbGj!{}͊z
lt!jVPD;R)ح_A{UO~ `~l^ș!En6AMUY2_H+$m1dRbs,bMdd/E£3fM>7.]FГu\T!
mѶJnA6Hǧ҄:`ohHPn_/&Ù\tl'8
}Hk8I
8aBCb8ɚb4Sp3,k?v
GpQK}	!,UǐcqK(nW1k*qST$W㺊$~U{gbEmPnu*RH@S"-N:%BL_	JO{8hkTG{|[1zƽ&J
+װXGx/
_7K'&sC.~D8H
GkX܉ZD%6:0cx(S_!ߢuPK2UH  l  PK    A             +   org/bouncycastle/dvcs/VPKCRequestData.classS[OA-LY
"wʂۋ]A,$!!5tw(.n?|Uj|4o/ϴF̜g|߹ͷ_V)0tv}7^`(/Vy]Fq(2#=
ꞣWHto^yp#d(>Y	Y
꾽g()"tv\aMKmm	/3$~#4Za`[
y'ފCV+<in.ێgDHI1'<ڇEqXo/RfN^moe~**,pڢIGG͑8G+G@26O5~uJV=>f_Cׯ Y]Ut&1w0eDp\ D&2HCWd1Յq\0i
kaW4⪆11z!VhkGg-UIGŐP%h)E@|(~ր%Fq{+dPhblk`x2^|ID~ y:N4.ѮB$HG\{PKݷJ    PK    A             -   org/bouncycastle/dvcs/VSDRequestBuilder.classmOPZ`0
(*2,Yxu]guvS{?2`w=sϏ ه^3tɣ-hK.{l6{ܮR"p±ܒHlg̈́ozXys"URbZoUjYa05nخf%NuV\lݪcZ*ླdjoP*kyz\l0wCh>ӝ)m	mc YPlU
ж~=(ikA(@S0`Pa#
bQ2YrvE~1Ce~c Dӷ.Vҩf
3l$s?b\J&N\nDڿ"Q*֠ AEDCfV=I44ctx"b*ƑV18c%lqva!OrR9	yE@t]R
Y/XiqM}
:^aهz/
"#tj`>J3ddFbc P:8PK{F[  >  PK    A             *   org/bouncycastle/dvcs/VSDRequestData.classSkOA=S[Eʳ*+~5.>Mw)/$JI#?xm%ls9̝
`
ϒВH2tY]n+coi9\Ҍܶc:~1^KnDaJU2lws;*bh5[q̋j3U3uf,#/tۍ}4yJ!c!(ŲlCZ٘],	yR'qdE8ȍ|L-6UWTWa.`*T\2;n0uQa[`5i0ᦆ[Fx[T`1m#بqă(jBPRֵ~B'N2<|9ϼPjwk6Ћ5L臩5m̩a^u#c)p_G
K:AsGM_\.5#qWv2E?$CBy^ңc(&(ꙥ25<:zԑv]o
"sSxpsbjo$Qó)&'kX7n!dVώ9ebĘDW꽆eFQR(_2c	nz2PKl    PK
      A                org/bouncycastle/eac/PK    A             0   org/bouncycastle/eac/EACCertificateBuilder.classVmWE~  նA[lV%XKj(hl6CX
UռG<$M_ܻwwvű~?f|C00[S^0Lý0VCܱG;a.ms3GْQ =e+GI;o\w#JhamkB;K%r<67uqHধ{҆Vnԭ5&I^,jyZfɵKnuA!Kț[r0~i1Êu343KйHw̺=$&LkewnZN>J~kEcZќֹ\C㸦VvVhd]<5V
XbiQgNpöٹ%lN5d9,JDKق?攲ߵZ]+ZKC[G8&%LI*m	H&Ẅ%+=hRq{|Zɱk[D0vE-aFd0ޭ5hiVdzQ8vNK9s9ŕ	^DI{{(%sSqFmfI8vwӽ]6z^z
[C`OJg5_ũ!
FqW@)x*&>R G\.
K/F*1ZbuHPτx$ĚXFI!d-CźpCȈ`SF_ȸdĐbO _ʘÎy}l]+鯭p)INV4y``F}OI&v<=ě:`Bҥ<%3j
joHY5Z7T_S|N
VxCGzh7`4TG$pXó:bZeZe
Yeh5K/&LEL%E9Y/ 61V*r*:2uDh~5j_&'s8SC~
#R'UA`Όƃ`DRykm͟?i 
PKBІ}3  6  PK    A             /   org/bouncycastle/eac/EACCertificateHolder.classUmWE~lXKBVCk5o4
Ծ-
j6Ctٍ ?zMZ9GNvC6iɝ>w "8ދ#;ZUГLm&7
Rm
bLw5[zD*V]&a9W0`+-`tE)+Ӭ|	hZ
)96B<V!)bY(ɲoZӚQu	
͊̈́Bw2ˤlL'7XUa:=텆bv%W'"Q-wze,^a֌[w
lLߴ+ߴ%wejFBAq+MǷ}xyv>70\#>W۶-u68VJ3t0:l˯ôdGS.+.!kUt	GDFpL	Wpѷ٦IT]ǠIcrQw5W1⼊U]T\T񾊄qT\V+)ᦂ|#I+rR<<nm6SٓRH&&%eǄp'~?@1ZsS~&:{^XʔQpXӡㆎ8ztKq:2HC1-I)ඎpGF!ftcEJA|чOq_b^U,jIqM<4LbIo4LIi<k)4|Xhe)V4L㱆x܏ϰ Cz<Ѝ=tc3-KAf1*:!G^f^%>?Lj025|GC
:N'Q?/dFar$ݔė[r,/
<?Hm?N-͜Q6ӗμUǳ_!{$%x4k:~Hg^`=@!,
߰<tBwtPa	lXIesW*XȆ!o5ld+8]e GuY>,[a#g):^G1(JZi?PKv]    PK    A             6   org/bouncycastle/eac/EACCertificateRequestHolder.classUmWE~lXRޫZyR-	b  Pҥn;[PϱsD<d9'wܹ> Aǥ8RCG2gLnZ7b,ǒ	5[\&W*)ߴ]_0Bx}j*<im[&"t2-	
%eqb.k6_r!|A>/Cb +\Y-2Z|(rv)-9-*?9-4EEZ0а6'X3)
6e$^>ٶ(s{+?5*>6Q~).	v]QJ	s[n&eʃ%I6,+EkY<
ON	*Xqpr{nțB"5_yi&[܊t=?Q5*^!D~_
AMHWGfx0
wR-[$xI37VV{'::<K

C5\w4ᢆ4!aDe
W4|@Οm{n2\H[Xr
4\DIk7W{jB&sʦgQO5Ԝ=6TOoPtTh+Oꗜ2[[nbl6
{f
|0ЭD:
d3f-I%gVw
\ŌsGr|n<'c_*1c:rJ+19XRS1e>NZ5%u|tZtEUx:vS,(_~>>"dWVu	1i©ҟ4/a=?CLUaf*2pZE?	jG-"JSt_jJlH04@GQ#
}$PYǩAU3]Kxԯ|z ?3/>:FFcgWl<PrWl"2PaXȆrboUlfB+myӯ	k'}HX GIl,FPKjjU    PK    A             '   org/bouncycastle/eac/EACException.classuKK@5MGVk0wABw*O!FSJAGi},rϜ\~ 8EtP\vZ{)*i
1~TΕ..zRr*-Tb|011B>YGWSBȶ44	b$mD%4r{1`'3L
X:<dN}|m_"}ڛi ^}1 PKN   r  PK    A             )   org/bouncycastle/eac/EACIOException.classuJ@5MҟX"]&
qWJB\(O!FSo. >x+tQ{\%SYiJwN4Yh{(EiYWZC8u!vnBəR(_b4bK7w}J׮.M1L' mhlDI-4Z-HڈMhV㐝N0*`Mn`';yG|<h򞧁0{CPKEy   t  PK
      A                org/bouncycastle/eac/jcajce/PK    A             2   org/bouncycastle/eac/jcajce/DefaultEACHelper.class}OK@֤4xZ܋PjE}iB-F̷ғty{x}pMVz34dJB̹ʌP,{B~5IroRr9%n ij"::
XJRd&!NBXX?['fQ2a?|yp=T=x=,1G&Tm
PGG
Mol}m,[aŦZ)ٿnf3V0{6s-%=-ǮPK[U    PK    A             +   org/bouncycastle/eac/jcajce/EACHelper.classmOI
@qP\yQE_0i32
U]PU`@,kK.暜b}*i6Az/*cm
6$4E&n9G{:cC<tVIŤcb5LJ$$9x54߆Y
h?"~[PBxPK=     PK    A             7   org/bouncycastle/eac/jcajce/JcaPublicKeyConverter.classX|XS9ӑ@XJc' IDpζ,dbV	BCJI{A`٘Eޥ$ֈ
o{|ϾS ֋+]l0υ%UkMi5{ꭆVU{yRsYEc^qQ:7a|"56lX՞쌄O('<ј	Ƣ&<
v-&hLwj}}z4$$E<Z;=S# {/8/$_
x>6l
ذ=eX@[v-MYE@4b&SizHBьn=y4խdM)96h@r^f!rnf4n!_
=N_źL]ɴQSwש
dhceH<Q#:[2mGxԻ7[`e4Hm	< Z=zZBH2a`Zt֕qvCUxWŴ[KAI#6iֹOZ?(h-Ĳ5E>F:ňr>6,ڻn].S$92DSe~T5G"zw'{IAǢKsHe`c#m±#v'JfQCEtB&|jRk#Kg+B#qJb=JqY4:7x}z.^Rx^"}M\DƅӪO>R$&4GH8d<lY.49g@7*++o,%0"OKD:ZYY]aNɺFv5LSTyk&+y+{Uaĩ!fy&/g_P}.-1-vٯ,F+2Z6X?gZ)!CY:-bGZyL]~2
EXf5ZiY|KȊmiRmŻ-FObfc'Glo%-"籤qm<#Szs=B&	쬠kĲnxϗL[%%$6Klh*q6V6v%KtH쐸Db.K%H\&q{%$:%!	]K[G",O*D̶ɟ(*|5CyUkMhz~U,.J'\vjk+,{-sb0uBW"P6d&3V dD[K)W5>1T")S_6؜r%vMYgI.ɮ͗^9SϚ]uFt3e|p
-N79kfh'%C-]Tbr\EmBWcC^ǤSp2hN*P[^v5m\@Ąds޴[Ij)|6ƅy*EGtϔڎrd4@<%V(TOڦ\OfM˓^:'Q0Mޯ~-{LyIx:M*8Uah`	BTtjBj*b(WvqxSNK*3dXͰg2pù1\͐XޣUq6ާT\PUUx1,g؄8U1,GU,T,c*x\BxawQOXQ{8	SI}|f:
~k-ÿTp-:|S7
Rp3>c1@8܂2|
nPpa>oCmz;%/3G?a	D;GT؎#x%!10H
f܋*x7w(x3~~|/Up{G|ee}nsϗx2<gR/GC,DhJ77hT7DDBC^բ?#1\!SOu!Ш%4fySbwwRE#T bN:y3üli4J=X=$?*!=[}R?HQgﬔX}L);p;jĂAcwF4=tHu;"j#%9>))r5vR[/Qy:$H!qXR
C:qQx=!Umݓd6%lla<ujkRbaZ",KJBߙcs
i3
&]ʆ-$Uґvkƚ(yKMcI,qĭ{^2k'XE01A1~ HLKib@
|;~omJ4Rr,n	Cb+mԦrKIٴ-YӶ.j`[J-~Ky(neZm.-.GrLJm3j:<aI	H!>;nD\"g
4.̴KV0TN$v \8vSJ>Cb1wW2r˒!q%ǕV㴮$=\vgQIeCbU
_62rڍ^ڷ`%,m/}^k+pVW郣̅3g"INb̝FN}Ԯ Mb6j7QZm\z0P]S+R*']lӻY~;,a(#b;A	<8"[|[[|)GhX\<,IMMJ	8ͧԝC)Gq?/PK
    PK    A             0   org/bouncycastle/eac/jcajce/NamedEACHelper.class]KA1ssݾ,MVho+"H,aeݑq_E~T4+RF4p{s9缽86Li u셞:!XbS/ytF2"ȸ\]}EC5!uULFRTL}5Ds:n)Ok)^INHiA"F*wj9z\q
	f

ׯJz{D+T^LH:2ZHXH"2&,G Ym=:}hƂl!1lj/X1'G2XՑɍt~@w#dK[J | PK(0U  m  PK    A             3   org/bouncycastle/eac/jcajce/ProviderEACHelper.class}RJ@=SkӦQ7Jh6*B)-EtHb$bJAQ\~8	UZ0\s9w.Sw3۳9AJ~eR!A$WΨR2ogCgSߖ=Z.]ۮ%u|}`|"m
2b걐@䔙fݹn}1G_g'sLêMCVCNM_G"֒jW'j@g$TQ01vёGQA#FjA'u[\m=ǦBTVRyWT1"ssNxF
1"k7PK?џ5N  Q  PK
      A                org/bouncycastle/eac/operator/PK    A             8   org/bouncycastle/eac/operator/EACSignatureVerifier.classen@gC(QJGE"\XHٜHZ< aHfF;.=|~hRTЫ.󂭼~;@_͊5b)>Xv#y>uew	h[]V6?so)&72t6:A\'1j5[&n=PKM     PK    A             -   org/bouncycastle/eac/operator/EACSigner.classe1kAߨ"jE2B-TVek2c7 lEWJM5	OֱA/q(S_BwlvYm)5_q;1	>鬂JHI
+%o	5Zh\=$ZHPM
DuPe] PKi      PK
      A             %   org/bouncycastle/eac/operator/jcajce/PK    A             ;   org/bouncycastle/eac/operator/jcajce/DefaultEACHelper.classOJ1]nU'iͥ*Be{1MY͊+=) ?JL=ǃyc;>v5ATi
Df)ԥcm-rzeO4~ޏ;e4oᏃ'Jzc*T0N\X挥3f\sqǪQx_!A IFpԝ@Ӓ*-j "RhȰA̭ϟ,UC|oy	^yu^Wl>z;Hց/PKG    PK    A             4   org/bouncycastle/eac/operator/jcajce/EACHelper.classTiSP=BB)aq1"
.AjHc$L
Bqft?񾔦d$'wyɯ~ *]@N.z
8+CY`sC1iS19%ơHT30/sh'1*ѩF'VVQ9RguxVոjٺ芑3UdtNw8kN#Ye\9ehjWF)Q@O*3+RY:KwUߓ3ъM
F*T3'-omsBR0s]k%p|($>hcX&3] %bQ
-;'mY%SԢS%hʒjR"/׷Mxgvo˵vu[u,[mMgszD%P(yy1cqOy3FSƔ\_S;3tZ0VXJq7ina:KeW3n0`0&3Ї!\ YIׂ)<`A#qs,0H2XlmB ex`)H)^1O#2$9Zz *"%C^,>4ڇ9rW?9ěn[zix 덦h;Gx^zbk"bVEb+bǟWPK*Q  J  PK    A             2   org/bouncycastle/eac/operator/jcajce/EACUtil.class=
@?
zK5"He,KV*x,+x(q0 	|q"m01r|(Vr]ͥf-Yw]FQ!1 HU3E!a
$'PK<      PK    A             K   org/bouncycastle/eac/operator/jcajce/JcaEACSignatureVerifierBuilder$1.classUWGM,ETXچ*J3Ya1΢_|)};I[㡻gso؏h2Л\I=aS|y:7lǖtnYG&''Ik5ᬐ}9ćKԤ:	,98oW.O\OE`8Db k,IOuA<VH[x앧٧Rf;3ߘ!'-ׄ%"QA*Dx4K ["]b6-˪0L҃$QNt62>Å6eքǥ)f`۝%Nk_yܛ	~4B{z([OTҭo:ClWGȊ6l߆gSA
45pDÐpLq
_2d>)gps	x255?R
5T-g$*f{u''ne/E-U}U1.]3]1u_lNwH_
FYt~RbH8	8^DA@z0pRAL0L. FqY+\Ց5g"8:-1#:R'箨$XUק/6fGx*}A7n._2b87Q$k(Qj_#i!sC(K Jҙ-[ȧǶp;J"?"!j
DaLAAГGwPjڅ]k
qGymw+(6
oѷ?#gvpgmc,Np1ZI	9" #w5E0&<xHA%I oPK6Q{    PK    A             _   org/bouncycastle/eac/operator/jcajce/JcaEACSignatureVerifierBuilder$SignatureOutputStream.classS[OAl.^ZR
FCJ"}c]g+xDK"gZM|=ϯ ,I:C$3ͬ6\AXj˿bJZN!%>X*mINr)#4^(|횅`3Q՚ܔFt;eRS^ٕ_X5ϖ&qY ݥƖw⾬Spt=Y|f7ZG(S_8Fkۭ"8C\
hAjKw_6HЧἆ.j_ Crx˴z:(=:^\YP
-snE5qFDH3pI`J]O`:цS榎1dQ&̬r:0OwKRg0
|ϡ.۔zW-ul'~G☤2EÔ!gOc *%B3gRu?RSV?c1:n''X~L0>c	!5R20B""sSw0YɵXrI$s" $/B9E2;̒βBPDx{]
a 
]# PK  &  PK    A             I   org/bouncycastle/eac/operator/jcajce/JcaEACSignatureVerifierBuilder.classVWE-$l.RX(<Ziy
R#jl즛
mZ/k=G~&@wsgvW Fm '6Գ&YPϊy]FO2iX{Ct݃d	ұT[3aYNe%w,NpMr'
%ĒQi5s3M6D5vi$:yvS-4"+Our
ےIMf%]	VrV&ٴw$4{njF2b<)]8cY-RH.ϖ|lG3挙iST
xϱw
Q\a\Yzl'팥guvM5D
hHxcDt9ZLl(Fq-m\,c3s8p"2ٔju.!	SRdTƥ6䌚mDOgDV~:0W2Z)2sh.<3	."	mKYkwnV8#Txh񆌠62:d)-o Lwd+[%e'#$apt4AG:Գx
 qKR*.`Q~tE]LvTh3q閨.u*Vy=3p/ND"_0bkOq^ėIV7I)[z!H[w|V̪ii%ߏ3Tu8%jIP?D8{JEfTSSqF̪ ,wKۂPqG9E$*
CAA|`(
d+1|*>Rp
<Rp](ơ+yM$
)uӈ\өtk)bYܙ3Y:ir˥!2}{VCE>	5XO#%:PKc#<2? xV=X."Ȧs_p+Up7Y9H+pO9.`sܷ4%TCcA__zR[XC",a*֟GV@'c^!}*BS{Z77w_p\=WQ|EQij,j*w__K,kj_b+{,S erq$õ9O1RH"6~'G<'(g7PK9P޾  2  PK    A             @   org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder$1.classU[SFB$$4q(
 i)Фq[4&2kycDHkZ7/H\fLڳrpv;T=G{n{n:׻ ±:CG,\ێ-2N%|tjjXRNP˄o-QD݂蔢]rzb6J%! /	Ue*| JHbQ8~j.>YK=ɤSm2wJf-,p;
8-I#)JW2nձ,˲0Ltf&nT0֢d݊t=Sg[rۖ0,i:{^is+7Rz[6=RfvD]r˦Ncn}<JhE
]".i0aPe
W4\0aa<{Q[O	R^=r4ɫx6a5OXMOI")d3vcX|K|emsⅲSW={K@͵B|ӖL_7p	I`@'B6@/&
\S#Lƴm`wz0/JQ|f|=#)긅91[@nQ
c],KP2}Ac0RrLƞ?///lWTkc>C8Q) SI\9"PH'&I$p?q^@=yZ!zDcj1\IPD)Ӊߑ4)HLagTlWoXNDv?}8d
Kj!y?CTS
3<" Bo1D`W|B
?W?QPbD]PK˚Cc    PK    A             T   org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder$SignatureOutputStream.classTNQ]CL/\(-ű(KLOI3̩gJC"Q}k>{?~~`1
"kj*}!F=KMF>"c5
XʝqUaNvo-'e.
Y+0()5#kw]5ݚDQxS0MlQ+%5O|n<[m.'mlKW6ݚcXnrfn{Lyd#/,Y_߫A|bRVFP/m?BR¤
b­kCUKLcz;Я᪆kka@à!."*RN	NޑB}ZP_ې7{+aL"nBWe\c)+cii2K1SGn%Ooiwh.{/
f-H?GOQ~1J=9g wqht"k^A
o2OxreSHa\
L>b\=3jCOOSbjY01
zL"!SS:i-oFH&;H
ɂ$?hg`G,CI >6keP$APK舓    PK    A             >   org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder.classW	C֒ղ#:m]7[`7"vېEZb%z{GһIz7{$w}iݙJiI7o7͛v\p	[%J&&a^-ᴄ7pwn8= w==m< %N-`4yPYL
4s#H={UY޾*eyEk]qek*WxղjnZNkFLWd|4S&szt{&etJO&)q:a#kFT#!j\+
֢f
"D5s{RMHlHhɴYM&LP5:JAKsRN*ZJĉH<^kyv[^s=e7:-?N#CۨsjRm6Msj0`),"fF7W*r$5Rͨf"8i83[et3&MjiSOQ(VrFS\4JSMTop"Ȥte%JL=qfiUGlT'Dtͨ(T&Lh>fͤTFO00:pL3L}Jgm6Y}3IS`SZBosSTtT֦\$GP?]5dY2ZӝTWm\9335u3Zj}kat0HqV3Ѩ,R1겚YNtYrT fj ojVIӀ*W-9LMFM-*>6a͈	qHkD""$b@Ġ"D*∈c"n1,bDĨ"NxEDD7p=sDz.4whk|]^s6ۤrÜsѵfn/emԨ5x\q-9Uz)I:UtG9*뵤)!u*:UD&u
i}X5Snv\K^d
-73:jo'r8z?nZ9v:KDY<^޿<s>0ZxEѾO(:+
^)ðaC/C^pglFؤ(6+x#5
:Ь>qN  7)87s-oUЅ6v7<N7]
:q
܈{x^$!3pG>13|"2|ZqW	u*&cȈ2bd$"2|[/3|S\`xDdg>pQFda|IF_adz˕4=~A:TY~VyX15=!L{sZx-Fw^+\$x&yq,]=6nl Vfs&Zb^^y݈hyf5sOwg1?esm<<xKd.2$݋0ql"wCj=>hubS~PMYx<xhd6SpSTIEr37vTV˫)3VllĖpo}J;`*>k6a!S,Ý"~H"Rbm_ÍkMu}?{דxJk?k-~_	hȮp S?w
Uc2_v̻5n,>@
 (NIl^{[K\}n{uMٺm߻T BaTq9wJpm4<h#p"T=8d?;rCeU|YX(rO(B.Ѳ)౲,xYPd|ADiKCOPKIŕ  [  PK    A             9   org/bouncycastle/eac/operator/jcajce/NamedEACHelper.class]KAQssݴ/n
Sj/(D@~ueYUP]Q"adPy9g9;
A>'(2ũ]TG=D`&1uC"ۑ݈'Mi_
y൒cW<|$H	)s+rw[%HpL36_XX`YX#Xm'TxnW+_xO5<ˀ?XvqZEXBF%LS"u5L,N6^*llXkج՟Py@|2HTL^{D	m,k.OPKeN  c  PK    A             <   org/bouncycastle/eac/operator/jcajce/ProviderEACHelper.classQ]KB1~)*vP ݯ9GlUP]QюX(t}m>? b ]203H/̕
vG#6e4<ҁkՏ=m.&&P*\
<Qڧw*|YhƂ
Ʃ͌tوmw.؂g2h5
B/`A[ۏEpPK)/1>HU%<Ԧu''xaC
C9l"]v25cuj<l|,RU16^Qi4_PzB2Hc2䚍gP~K2{
PK_hA  G  PK
      A                org/bouncycastle/est/PK    A             *   org/bouncycastle/est/CACertsResponse.classT]OA=@E"|X$Ѥj6Fy[.nvqwk$&6DMMA;-Ժ"Ý{Μs~e'~M5UWuT[n3JFX.YcyTUdHbjw
m09@cE[v(scP-K5tE}bfVYl0#sr4dr +ڎR1Wl)ì嶌)ek<Gu䊷:2è'bM^~jf$2L<u7*U#j7mU9%v7|wPkq~az޼:ɔY3ӥ۠t*Ӗئ
%$[5w3N!ِיhMWhS4{Wԇ,B10xgDCl2QdEaV9#ƕFEcpE]u1nU8&heH
'0h壼OӄSa4Oڜ1D 2ĹNY{hLgq-;Jvpl*bv[=M
}P
S42wX)>%֜B}ћEs~gǐ~g88JkyR.QO|˒yOK9VB Zt4v!-NQPK"H  4  PK    A             0   org/bouncycastle/est/CSRAttributesResponse.classUSU-	,,
C"@R(Hlh*VUdtwCIv|8FfO>'u90{ﹿsﹿsx	=T\^|(]϶j45㚮W)=+W}TMٶ4c$P6t[t뎚PLYNi*助6Y	>^J'UrnlZJFDd~ݲ=ZP-KѢA8h>NiPuo\S=Y#Y75Hi޷ί+O3|VXMښZXu5L\82=6l-W%IP!)ģP#VF;\+݁{lmS*JY3u'%7@2o	9&V-"_)K
-QqDr
@Ysғi\S+"ܖvjm#+:oh"n="<"z)<PYwP
-Z<^-

Pj9vl.jƭ
#CٌK[E[TldA3D-9sStSJ%[ eSQ'jw\4u@|o~ei4mBT\fes*ʹJA c\F?d%Me521!ʸpS20-e,dxfh_y㎌XчuFងw@ %f3U	7)}eAGs	C10|%>aXbx>Jt_JAQ˷;j`u!-+vʤ7,qrQT$^dU^Fm"Ϳ#KU4y=8r_VM#4oļܗ/ւkoou_rg`=C9<?>2x5_"EqC <
ͯ((%Nb.y<}H0|=)52÷	 Aj)ًk ̋*Tf%{Xq$p)OQ)p97M!Wm];{kxuٹOꡑk"{UqIo`2@kΩu@vZةI?-ʾPKJjΔ  
  PK    A             -   org/bouncycastle/est/CSRRequestResponse.class]OAvk?bp1I	IkHnNfvF7^`"!JwgZH؋9g<{fv)u, o4wCeWK!/ǥfFa7RB^.1D
5I3dR!'hhu&<O*/ХpMlk|uTT6#>(N%/7ab k43a}7>ho.5տvj}4kHaDe	L̠GiPó
eP\!|u=yubJcɓi4ocrz^-EboHĿR˾քǑb%	
%v3]8U	+Qq_Xd8Ɠ)FLR3ePK߆z    PK    A             1   org/bouncycastle/est/CTEBase64InputStream$1.classJA'_k֬Mj7^rIAq-q6Lj{W">%I0xgΙs~37W xKǄZU|&PH|?@OAX)~ NɑEXvf46_M*a7Id?f(MP=`>|f|DȟJ\p o7 4sDu"碀EȂV%LzPnhX$=BinMpCd
%?ELjp2,yV%U[lUX[OwjÞ7,yz <B_OP`Ӫ	6N/;aqS:^>]2PKA>	  t  PK    A             /   org/bouncycastle/est/CTEBase64InputStream.classUSUnذ@B)jBmIhK&bl6љ8SL_xqG/	Zل~8<|s9߽;_HWM;xUْYiZY[yP.H^ӉQ2䅄UH"I.GTY	֓T\Tt(Q0U]SlMffWjm:Զ{W\^Kek6fnb)Lj9Y+E2(`U3j\~KOSx\3_mqjSʏpc5duQfJ0Y@Xڽd	H<$˪PU>8W+!$Oi	^0(З9ABau&z"	d:}2Pt4s/zt$DOnk͵^̑7^A]
1YA/3a\1Ppn!8Nt(f`Rb	>0݅Q&%3Wd㚌x!ɐޑmi2eUzp)竔YU%m2jUo
-j7t ]Ĵ
iYYKs-)ǒd;@_ .:&vO$Z(M6}5o:ՀY,cuP:nujxRigWԟqO,<Bk67ΆCGW/ocb sAtw>pY5GLVw~DI#LO0{vAzr\*n!Y·xZ J	wBsb?ʖ$=ML̶]5AFmYTK-k
:/wnC%
?YoSMi-UPK    PK    A             0   org/bouncycastle/est/CTEChunkedInputStream.classmR[OQN˖e-wlQnzAP4Jxh,IYf{o?LM|ͨ8	n̜G Ә^2b"ꦀ O]=xyRvzŦ7Ւ
X_\\xVuׂlp(6U/dEBR25VfPjʼl<˓6OԽ!i_jfa%?p#,QWTi+i aӀiˀeG`=Y̑>ȁL'E:,cB7bl>!-$q  C/;I8pC(N3w9)bpLP2ypa
%zeo*1A4+1zI!͏/E ..;&D	1VNȁ(Q#{Wvw9-ڸ4mb 
bۘΥ{ƅmn}ݧA'հ4p89F#I\%Udqd؄
%W'{r#7;Ls+Q͑>ALϢ
9eR[zw1J1~H~PK}.`M    PK    A             "   org/bouncycastle/est/ESTAuth.class;o>vFĂJҒFĲDļt}FtҼ⒜T}v&vfFm
\ʂRKL̜"k06FV`dad`d`1PKv      PK    A             $   org/bouncycastle/est/ESTClient.class;o>.FΔFĲD|}O׊Ԃ<FhNb^RVj2P\~Q~R~i^rerbqIN>PkpsNfj^	;;3;#.Pk5(.+Nfd;602p 1'Y PKA
      PK    A             ,   org/bouncycastle/est/ESTClientProvider.class}N@z[
&2ǅ;G1q.MyXbс/LvaZ^JֹئV!8ɣ^WI,6iꪤXO`6}a+_>ۢ9\ǐaF+m1x0&8ĄPK      PK    A             2   org/bouncycastle/est/ESTClientSourceProvider.classmA
0Dkm+K(qץtQ(T1ԚHjA7f<;5B¬-gʰ$/B20Q榱Blo-׮L֎nS)]_ZӪ( GX9wV"J_ZaO-pCAtxPK%~      PK    A             )   org/bouncycastle/est/ESTException$1.classQMK1k֯bVCP=nCeM*A v҃P2o2's3kvr5Zg^m(tM$PEAM?66^{phzƐ!>1@WO-d-,XVȡ₡RwI?=6H9ͣ
Jؒ~t 7
4ӖRD͐k-Ew<caDq@}s-R4֩V+Sq;ʯ!ˀgy\^&DCJ_&vcCb?PKd<  
  PK    A             '   org/bouncycastle/est/ESTException.classTSUn~ݰ]*",
5amZ0%D,%نhd7V|Wg:ʋtF8O:_d_JYMښ{w=I} .G` rPYttaG2VHFX%_4GWt-%lYq
JSwVg\~5,V35\JԨ7lmrj^eI y}BaztBZOTDz1R5k

+t7ET,=jvpYNqDegCFZ2O(׭Z0jˉ5a7Ta;B5g^@Ҥ]ۄ:Xu0~~$z%$^K8%1,1"qZu	ڐ\}.Ɵ~ŇTdF(op4o~Ogs/Ͻa/R:7ٮrŖT\TчTT3`_(*""UЃwTǻ]b2{Wz01h 4C:,Y0`@$'qa!P
!*f,Vtjj4z۶aS~/ZŠL-~4yV$ٓPq9Za$4(2 /E=ga^!-Om,jbyͻ#?$H61þ}]ėw}aȐ|T8G!yA"*p dl"|t8w>v-GhҰ6OMҰc?<y4n
rĔDBₐI0#d$=FHT'Kukaq%Y+>IrUJk'U,47qn 3u^.D?Pw1L->od~}e?;¯eBPKh    PK    A             &   org/bouncycastle/est/ESTHijacker.class;o>.F̬lFĲD|}O׊Ԃ<FhNb^RVjr	#B~Q~R~i^rerbqIN~jqkpؤ"v&vfvF$
\RKLk
KS5h/.+Nfd32p 1'Y PK"R      PK    A             %   org/bouncycastle/est/ESTRequest.classTmOA~=Zwb)x((P-P 1trX_Ib!(W&;33w Sxa2	se8/ 4[-`HLn	f^F;E1[Tv)(%w2i=;G_"{{3Šy{}㽡1i[=Q%7:\`Xy}cwgV*	ttVDZ]de?e(pW[]LBn×j4|pLAl\L*PЩKA
z`J5D=V~Z\D̅BxvmY)
$%4No"#T[Ol4U?z@qAޤeӄ]%Ap3uI%ԗ5wy(N]gWWE<bvtGE~pWEC*h==Qц&07S I1%c)H1-ŌOlxF"YJ9OAWM]:utX
ͼeCiA<\D?tedu!T\Mr5DV&JVlLk'XѾ!Hjceĵ22浈%-(#E2 x~XNҌt@窻
;	\woB1^bCr78k;=w4p'<-V+&퓴{ZƤ>ڱF۴^&)DoPK{PU    PK    A             ,   org/bouncycastle/est/ESTRequestBuilder.classUmSQ~VԴL-T˰+-KfDi܏j:mFXAfs9{w_<6 /Oi2j>'W69$*rZh/Yڳ鴑4E@kZe(zprPA#ʩ,y(CYY;%Y+{=#\ +j\гJH)ͭ
KF0(k%Fuf\FEmrV{e+IM3Ֆ9M՜3wcBQa"/7b":D%[DbU`Z@GeSSц;fժJZDXRiҒ+SJm]4V?b{]m7q5$䇡Ӹ^\jwXxؒY=,fM.5ʲuF 3/,͝B
+nܠw$*^	0"Q	0&:|$KAD_B;`S'a94ìnf/ff]9\҃WaxIH.M_|JKԝ|$+
JH.}EѬ*[ʖ
,[*Nu^ʸOV	o!b8blߔv5%`|sxJXNYBGX|lE,{))OJL5w0G	0&^~brxbpXO$YޙۘN$	uYvI)Fc
5V?V5z8H]$ PK2    PK    A             (   org/bouncycastle/est/ESTResponse$1.classPJ@MFRB[Qx)9Jkt7d7ȋ< >%օovv)NwP#y,csx<U0"XLfh2g-M{5sĵID 	ݭЩZ0,O4SКDcjcn;(9(;8p(rYag;aV5A
jL롌c9fH)~µt0"hQG|?Elkwސ=B/>F!ka!HY킯<Z/PK45    PK    A             (   org/bouncycastle/est/ESTResponse$2.classSMsG}#HެGHbB[&`%XcsIcizwkwKTq1b9)Tzv[`Ufuϼ|B_
F
`2yst%݆j^=n2/ٮ1^
=$_-{V\X.zm)vxBYU;Qvqqrg:jC[5i?^}ۗ\5RӉ`ZMalqӞ~ҭ3vDՑ}8}"WXY+lf]tNE#FÙblܲHʡMH{APZnQMʑB.CsuǅdzuմՕR^0@89&(V640]jtDIb4$M$ާM#^bZ7Qq	ShvzADe͖wJ˦k˻p廳Zޗ5tGU}=7AUL`9\0!>6173H@İfDMb)
Ck0;)iװ`cy|S
W4|n`$jX2B5
_ҕ/zuzC%W?WjTMXCsuePtDJ2qmIwV_?%7E =n@##%C .#
q{i좘F.J=<?H~JGv6ئ	o~GobXG;j_p3LnNq;vF;2laq;?l`'V@3#Cvt?|`O,]mff o`P=OK;#]%]4`wif;PK|i    PK    A             :   org/bouncycastle/est/ESTResponse$PrintingInputStream.classQMO@}+ZQ>ECcMp !ш^JcjtD%GgM8웝yo;o_ 8aN2[6h؎1p,鸂bΓi||4ge׻Ϧ!|-͵%F.T+EW}-RP3(


T|/9CJȵ©	

Q0
"XA64*R(HؖPK!-K]l\0h]-BXfCV2=O/ft!U(+PFQOqPo4=y$fas+Jo^M
:х:G7F11SƂ!ɲv47w	|zc9&PPKNq    PK    A             &   org/bouncycastle/est/ESTResponse.classW	|$df7lDK6 EKAPBIkd3lug6xлՖڢ
Zj>އl,{MNQ se2|2&Ș(JF2H>U4u2d̒6Ke(7tSVM=E3WFg(?PbriNAERƖW=b.(9E-?Zo_2bѤF6DLd{KcYG*afϙ5ߕ43q8k/ϚI,3-aDb 1~ely%hFM%LZ_ªaγs厭a#FR	U7if=aJmy74>jڳ𪡐ffϚ=74Ú|1LPVkM-Sإڕs6~FQhȊW#A;ԛiGŎ.B햤Iv%ZKV5si*$ZI5tf&YW7#"Jx]\n6+(ujvѠ-	Gt5Bޯ=L4vQMng֐zқK[m7["[WW{ՆHmI!-nZ.-m%,iT$70dHj	ںk!rdhuR7#icGUbK4#\Q^zcr:!v:!%ЦjQmf֕ϴ]Cʆle:->˶ɦ0I:s[\r1i/h܋4aQTNc_G~A̹p:Zw]e`U"fD3ܼyb1c#ϚWFT&X]R<H4pcӢIZ*4߼F-6P2^F-a_UKZʷk]=tGoL#fOcjQwZ$,pV	+$&awIX-z	)a$G+}nJlu90?$<$zw jwK︀? |IH+#/5kD&@Sy|L]1l_G_19kr*7J]0o˹K#gkrBIl3`dy㹗-n՜b^z7]PBvasڧN*G.XA,P:m\vF.FV/_~	Dz(+X(*02|LAWЌO(X{\
Q`6Ca	ưlI}J۱K<[isW0\{|Vfأ@}
~^s
^3|A;p@|:C-v_f*? qlAGcxCC0'H
?b2|$O74v<Mo1G?fw;/G/w~ۂN0b+~6Ջ;x5o~Ň'/>N|;qSߦ~۽V|(-NzT5)w*+x0<AVc2Q|ZcY-1jΘ(jM%Zk<KmPTѨ!9O ?B
!&B^Gg<@j7kR=Q{
;}8+=,Ƭ>"aJ}EVw7H>>-wt_^Ihƿ	(8GqK"U	(
&=K`?%>_}x^KiMW[:?UyaJm~UJ 7+)g/Vܔ9D3ѠWbQn=>=`0%KVϖ};WPl멎~gUɳk/+ߏ3l<SnWhJNhNmz1tONBbTJ;˜9	Cv݇iC|Z"HӶ6<ș;Y/C}JWݨ#J21,bHx~Al8=Ą=1[&Vռ)S}Y|':'AU?zrT&|m:&cV
`[g_vVh9SUD=U? d'c'є(pY=q&;cs*ofR`<|Qea1;шQK,ă.EEBZ݄r;w~1=H鴺_IEu(X.5Y$F֞(q0GlΤ;M.ԥ*5V_;FRsNk JqK%CԹqi{|ܺVd	C͇(H<8><nt
dʜ{ϨKrɑiJG]aњd|<'}B>m۱EOePKSi	    PK    A             '   org/bouncycastle/est/ESTService$1.classVsU-M@)(HH@V)66l6Yݻ- _'?ulvǌq<wCVfL~s99w㯟~p_!al
)0(x6)h6)*ؘplmѕvV.Yv
ۆ3cYzyn1I;kȌý툈bd"yh0vww+hf`L_26d2i(hXVɓl=
+"(GIWw&XNV+iE<NLt]8拼/lNe|M %EnDȒcO6M^e6
	ǘgĆS/d%ꪒXT"]\tdR`Κ%2WpOĆ(D\R]j);oDU4Z{EX	JG"a9K)י7+}7ӝstMA5)ӱA]^,~&wHG6r̲Ǖq1(({_4<Y@3AL*~*&}jNybYR(
(
/"7ءI;U<b*ثU>U<"MEdBL<\cTVU8y2ḱ?'#kKnlK>|yT~^5*!?xvH5\3XemGTFj*%Ʀ/T*Y%DjDV:R2Z%Url\GN馼ުHs/(/G}^D}פ~Zisf{yx#uz,FtCGXv	OQct<.EBCXʧtt#c+Nᨎ0&{)х	8c5y܈㘔0%ἆ^"ႄW%f4Ƭ#l?^0 eG`J(p!\0'0z1-!CNn.(8EΡKJ+?i轠
&,[b."xQ40lCZ0iՄ
Q$	%:8:|LCnm\hZޱ}o|<	3j7כgy&Q;!~_wPm| qct˘>RW=.``.>X[%DnW޻wxŖP+8:ٹrpZx57)Rÿq\v'C˸z(|BӮncSi$=PKj    PK    A             '   org/bouncycastle/est/ESTService$2.classU]WE~6L.%6(-I. JjkF,a3-;p[c#7=^PY>Ǧssvf}ߞr$RIHBЖӐf;!YvKhuOXRԲ7;Yw|I
?""6j}%f;%|i/T5n4S7fB|QYy
]V`bi7ɤSG7ŖHn;a)RH ֥u!Å#7<?AiUA8̝ZCL9h̉sݡykg-ᩓJoUmju合P?ݻuc]u
!8
!8Εq*LNjZFZ:Hi7.q2Hcʜ?@vme?墪SY~GcoS
e z_qr?>SuȊPO%|/	l#Rkq_0e8&C/[fecx]
K5q~<iBU"ʷ܁v,-s߭
jb>H._9Zw&w\޺ĩ"ה\i'"G"q(b.B/Op?hG1T[[LQ!$d>R. 6CeA4#"'ڣq	i1᪎j@G&ut Ԑ5P}]בGj0)5J=| iq;>Kce5Ici4.4FxKn)jUuUeFM5Rev@2hR]w\ÔZro/6de (Sћ
9}"J:COab/@=K9τ<'4*}R?O7P"540]Glcpax_`?~G6F-|1BŶPam]m,7=?SOȼPh4}_Mي310ΐcH?.,ȫ{sDF PK+o  	  PK    A             %   org/bouncycastle/est/ESTService.class[	|џYKj}Rr;!'qvP`-olFIiH
-mI]b(Ѓ^_ ^9kuw̛7o[+OI X+`s%/[,`+$X)AM\ `$5npGcIp\KhjE`,TCф;=CWI-@B	aڀ{XM`ĐRRM;t[{lmGҿDc~-Do"6TZ<I*L:H8*pXӢX8Pa閒%oCPr3cY[[Z{{tiK^7B
4vSykע!W7F5
JotXCL3z4'/e׶6QqoDzŭ`ǨPPMbQ`b/h$AܺViѲmZ2{m=I59pi\CЭ%㣾!Mx,Cj <LՙN+ҿ®1wX;AAHUgG40fCJ:p,<3KݭZ;i1=m]Wvvlo
6ݭE=!̡FC1+5GLwEã~ͽq V́X<@1Ok0fJP8bh,9%j<Oе=gAxIs]WV.]Q1b Vvݚ}תUXw_K@܀z_{,>DA5k~vW6g3L0ɢ_ѷ^]{կ]lUoÆW{d5.kll$hnוQI6<IE:)H<kOa1<nWEk)$BjW<v0Okc	%cPJRjAӳgWGq<E!]i'NRF0qUjΦH'I-Id*MrJ\X
b	cP:+bfRJR%L#Qek(HV#lA2]o'GF.JN!(j\NA@ԌCQ5 Ked6tzF,u6\-٫,Eڮn
s(h5ORr:mRmP
wP4mPCFwP߶pPfevQ8L6'ڣGTsM߲D,ɴ4Gb+`b#hYOYC:G"Z|k,QVN;M[إtd"9Kq0"Q-׷d^Mj~#]FK1Kn$
[hx,OofnJamSetL=Ƹ6Ѝ[Ji/I!Gt0Qh-z!hFRR"2N@5:̸Z^nD_aݮ`$7A[t0>Zf#%[e1~rmšAyO!w$$'+,yt]ޖe2aXebfhp.l5u@R́Uh31;JIڢәivgL-lEu695ϚbatγN~d/Ko|dPJ]\ŭr
ͨg(\\lXkQ,ٞ`98
_1f~4 jFA4zȿ,4&'mݜ3:)
5q-:(8nR?_9ø6L@1ncv+EkmLHz-yPgc%BA@#)TlXs<r:OL'cR箔N&T8cV>D<Fs=Dǲ;T$`$`$A%X#E\,z	l`[$h2	Z%*v	%`$[/&.
"QDx7f"-"*m"Upo"!;ExN#{ExC"#½"'Ec"q>!'E_Oi>#gE8&"<(C"|NEaB""L̠=?ِnJ)='W{</T!X
Xf_=fRYPooh\]mW3RU}Dm}-Cj<fl?)%'?JsrƝ[f>ͺ#G/,wib9(2"+eh)/TzWgn/LCu\tGYW$H2<JLE3>J4e-ȓ{I1#d$e]*K-}ݠcPr\L\xZY(BLRhx1e$+Y4
+ϴr~.X{gf2j--ʜu1WX<Pbڧ32p3 0tBQp"wmy^lu&J l9s")%jq&	E!پqDJbMj9lķC#}X0%-&y6bۋ|;aƳsOmENt1?sSgDYayٙ|g;s:f#g9n0Y^Wv
7oN{g33qYYϞ)~e+rt8RYgY/߇O?P_T}ug3IE"A^S#,GUؤ6\kŵ
8.^Ldr%,T`&U
&L^ &
:bƋgP`/F:qWLY&d5ɥ
La3BB\-
<Ť/SتpCMp_6;xL8;؍]
$dW)Ћ
|{ap'qq!&Bc*}
DD<[L<x%rfrqTY^?W
\
| 5p !&!&*m+(j*p#xuL
18N<x=wF&Q|=P
MLnff&oe|'29dL&
#0M%ۙ|TFocr'0336fd"bv|E}Lh"	?i&_Qetrn+L)c&dgdo8-\yiLarRF\ƅ2u^"?эq1~Ld]&cc-L`>&w1yL2/dO2
SLL~Y&?q>'r|L8'L~*c=~QU8%чwb)ɣN,û|Љq.&9ы_pB_(pI}BN}˒ØFxKXM$o7m'tý|IŴ dX^l^E5T4.Q9^JYPHu_VYS.EPA蹐=kE7@	xE
0!\D[NWW>v"
a|~
Ylna|n@u`q% ԧ :մÃǅO<悒:߈ɷJYv
pB؊;!lQx1{I`B
z؎؉[EI̵x>JJ&1`N$..s&.bD%.J*xq9 SP撫QՅ)d.٘qB9u)+L:U+\q37!,p>'y>f9.̝
\Q(
s8@ss;]yBcO"ʳD+7>*udɼuzOA56@ar<uGxx"OhX1L
;\eS޵
 !5r
fcPxG;NxB<I2>Oap>uA4NKDxED<"_jm3=.x		MӰ XNC5i(zئ92U,uA'
RTcLbUEc
כΣPr˄P},͒6
2)6g2Gl+&/SؑNm	ap+ݡ:<pl"\c>c}&~OǄ=f,-A !iyg6o
XnԦ[4(:P<b[Iqav^eqǔ3FǠL@3Ib]V>P*k/g~fNP?`Gp!+}svד4vy'dH\np_grRg߆hK9M{Q[uMD6'ҹP Bt6b 9oPgn#w,o'c$=凐FK[n1[mQU6Wps\mY2Sk0'wT1Y@mv clM>Oyqav

4A`8LЈ.ȠMdMw령@˻NO4C)Ԗ!	b"f1b	Q(.Kl<3{> p
7	|>:dFfmKnEq@8ş5qaM=˳-M{j|oPǿρu1
(X~ bB)ِjBٸ@E>}	NfĸʚO94$V<;M%-#px=}6:ZI\GPF>ǬM'Nd) <h
-J:Y
فukǅ¥u#R*`gdLFFfiL\ .:s]1VWPp(q9op374ri,lbjד`Pq#W%V%7EA49HPv8*Rzag-su{vn7sulbv2}R<MH;yKNZ-r
]Hqaބp>1gJL:-foL9;S.Ŕn5Kvsӌt\s\q4;cHtŅїN':Δ{2e+PGy*G rܭPIAz4zVjD[7 u6ۋݑ΂S֞7&	pH23=DaMpro-l{>Kǅqݛ1-ޓ6M.[<{$ɞȤ@//$%}_$S8r\q[8n&zz~Ŭ&OSh*ƅک=
?@:/V&<_f&8\U}oyMⳜ=p~v*ؽǌ
2gr[=~Η	n!HCDi,l	P744jd: TJtxd~!1肴V?8Q7$:&!%[xB.JҜj
$[~6S?*_=ϊB>WF\n>qPKr;>  ;  PK    A             ,   org/bouncycastle/est/ESTServiceBuilder.classJ@)6䡭m$ŻBJ$]jJH M+RP|(qVvvvO¾= 8B!	CҜΐ!k96wsߛC3=s̭X0PnzS׺IpO̶8T
Ԅ
"uiQ
S	I	5"ߓvGjwOMBK_KBplnGu/?/V"* -B910JidQaKm
vddːxC&iqE;e	3#M
:).ksiC<(L!d$݅L@#
$)\iҪЪQPKoa  "  PK    A             6   org/bouncycastle/est/ESTSourceConnectionListener.classj@ύ?ЗոpՄl! d
ɤ諹|ҩB6Mg|=O 6]҈jWф%J]Uae	C_֎/
FݲڊETA><]Beɭ!\d 'Ij86wQׄAZZڦ>G_Cbm]z:8'PK<ܳ     PK    A             -   org/bouncycastle/est/EnrollmentResponse.classUOA}SA壈HE
J)| 1E@Ccenݝ_ɣw/`bxjev)Ү5M4{ߦ|
`muw|+	blsajɲ!rZojR-S{ŉBǖv{f_-r'Z۶fQga,ڝgj5{,u..CrȺbG;\gJٲ-xS/cw̒U:Ɂ|ϰL]/PmnM&/Rg.PU&l{ԐX+z"80Ѡƌ\<PmlRlu6結8_$4]vJF3|T%Kki*9oZ^%Fˡ[I>o>;V-/L;<?jc'3i};)!^\ppYII" !T10םA31$1 n0]Y-o(\YJ1)O=I`XU ô&7xqgdq#2&ц0ÙO`13\l&`>Ua}1*=)RМjIdH"L+&9Fs"
""m7g}Ё	0wWv-"~.Xj.>]*GL/˃<8F1n1p$H,t/YM ~PKa~    PK    A             %   org/bouncycastle/est/HttpAuth$1.classVwUM305E5ukcj)JTLf̄Z}ww-
}	=񾙤	6=ǜ;}3>;`
~pc$4IX$a$,aU)%,.!&_LPS6sUԌc˜Q-}B@u4! 2h	wqcXw7f;Ƶgؖ5tO Oq.rӼ;5dΣzYkSǘb`.5
*y̐˲-U 5cXY4DQ39קۖQW)&rdMי.,VUN惰2+%`)Ou&t;;AOoHp
i4Tǥ)#\RFvuäh&yC;Ӥ-H3 [E}]Fz3vj.f[voC5:{[MJL5I2)6$w2;49pN*<2Toy[eLYiɶ%휥O,F$z7{Lՙ0|2xMKfLbzy3ζY{|RU:}R٪2ϭ"ҩ7F']CM5j9rKKDv=a/*tA|Uac~q(19Q=Μ.)㔵"q.8Wy".-GDBą"zE\$bDDĥudwܱAκZ8~lKkGx_UfahOD͔A}Ke-5A3堥5Aò5	hbs/x5W,ZTǜҗ?3.調tsYtS0h~DPQa4Zd_%+^2~3fOq8?0Ǹ9j5CmR{^{a8V\tp1
6xaU0!q
\B7ͫVx
V`WІk	8*XESpWЉx\ܤ` 7+X[,ípxHwrqs Q<22mxYGe$sqwsd$r؁Wdq132<2[|\FܱZ.GэveJe\0.-<mnl.jMT@%
F `;H"rS6~ 3q[ [0$@}
HIL
tQ8Zx%᷎hcCM8m#yPS5 w`A'xC{gz
9ʳ?rE
;l.jM
~|[<y=|)L⽨Eiz/H@
#T#OOv:͛/)m,!>cr8x{_摨27+=~!.N;ުo˰5oFCŰJs9Ǉ
En
\^{7d? MX{<2MױZ@/$UH].b0!b_<<OBH=O~O¿PK"td  _  PK    A             #   org/bouncycastle/est/HttpAuth.classX	x׵lyFxla	
-h$7,@2[ -%]6]tIۤMw/ qB6y}}yo}kB;gfa_?8s=srGϾ3 nOȘ'Ub+eX%#$]F2:eVFD-2nZ#2(C2X)xe03A#
kP0O`ZAj[m;LxDmYvDBv	k"Am&F<{+bOjCt^-OD3YRgt&n̪x
ZLO)-ӃLPNeGV49㤑<mD<'S'ƍ
t[<ްv]x݆
}T*ME9dhrЈgM#בh0(bjArNvh`*b_vѹNi	˦QZ4g2źz^Ti.BKtDyG0y7Ufbtt\<ArE5}%Q-%l2<N=Hf5Q#iDi"GFVkmVc_]q\+jqtK'OMRC,i֮Kə&a3q>^
&U:1(#rHV'6M($</p8/cq6#{A")H{%&32Mt׺FFH٧͵4j\+cЁb2^iHY=mٴxO-F25{3Q=eyjSe
%ށz4;eŮ;2@NXCv:=uIGo.3z4Gw6fĒE3sx<pO]\v%	~ڣf8H%\wѻu%0%M)5'kЍA^%L̥
Nv~Az8ɘtQ
_üwv3t`cM2QQ1K;##Q-MZXI-wкR[lX!W)flSu;hU*Ivc%[\N+f(^2c&EA^[Ȳ;MYGr@_zQ\lAOܡr	\8nf[^͝TW޴מtq-nȬK2tP
Lt2͵*{n9]gOTzp0G3=@ƮelV=zKc1r6Y Ivxpln9D=RMd˒/MS$7 :~n[31?f
I.3_UTI^y6L/1zfe[iZy
|jsܡe5A7X"c22蒑qJƇe|VIIpL4	bt	%JpBI				I	of	opJxKx%S»$[#'>@9r r}ϔKzwGg5hM+mT<ڶǩIIms~A=TZI`s[wL,DLSibng6taAx~Qs X'nr2nDn(~D'[3@)+6WW%NS0͐j!^RM2
Hs

H+)V:F*J~ֳ;i!Ki93Tw8՞$.W_CAOx-tB'!-sYrArv]O5'AX'b+$R\\]LK3nv9&WRyCE	qߜF-Cqr272[ckhd7[^CC3scG'
vO)x=T0X
38
zP>˱H_`Iܠ//|4ZAF&^Ǡ ~34^,tX?+8UPMa7?
+؊Qpr/؂l+
U`)5*\<&.
n5
>/$6!QKBOBQ
>&|D+/GByĠAyZgXŘŸX`Ӌ'
^LEndzxDΠǋY3bf/-yfx}txxϱωC^X1X`^Dlc`?^T,dvyX`apԋ/~G3x?c3^ds_`p3ɇ E;a[dp?d->8^|X`'ãqߓ݆A	6(ZRN/KjA
I$2R)̑n<]s4|0-AސhbL|[?(6y;x6<qc9az
Sf jhD<~Q(ŝ!;/ha9pX>.yr{^W8;HzS=ȩyqƼHմ齓1o$"yq^ɋӑQ,'1Vy1d	@ĭ'c
-<jM.0ʍ,,io4z;o_pۘԄB
ŅN;ވ/2`C^R4.ۤ\$(s񨞼8jYMV=D^Y[FLw\|*UHE͵cTuzӤ֢\LqL4EM&w^GTJ|^3Zk׊kgGm[<+PDQt]m{JwKTeL|$RNuօcH}H#Y _&j49&>q5Ѡz͋8TШ6Zjøx4~5`
Ui:FE~o		Y3<LG?#E&jP3eԀ65
S-,TojZXQ`M~S[TYmljQ}|Ӿ5!Em4$؎)C47' 41quD7*|<wRɚ'7Q)ҪpgB|
jk=k.8VRًic{NUZ}CTfN\?fbS=\$|!jC?h'cݔDTU
ju\|</O_vvxnw#	qS𼄟J+x
p%L2e"x/u^b4.q+K(^h%Kn*$<.q.Y%'WWI* l/^ƀ
Κ+Z9:u51	~qB!pz\'b
T.RH*5nEۻ
\^vffzyݑ7*VS{)9a.O!(?/΋7LҥҼ}B|B>]iŠBk'O:236|ܸ)yn(A`+&>&>|nP(-0E7˂87e&2Q|[n2ɷLgt &}[C~5a\7K^0?PKY9  4#  PK    A             +   org/bouncycastle/est/HttpUtil$Headers.classU[WU&e@ -U.afbkmiRM@Mz;$N̉+/>/էEW3"<|ϾO~C E@S.QYX y7˾c*ʙ+V]1V
VɛJ%
`:Jd۬Y.VkW(,*:F[N櫜 -a7\(Rr'[j6_feaFv&6H;w^Weڭ%suEt˪$)y"DC_t`U5DYeN鲽tGJ)w\y,D!of3۵Ul#<YA1
>-p"ⴊ3*ΪPs*Ϋx]Ť܉	ODWd45{̰ˋcZy^
(M%Bqr#Zۊ?G⩔O}zA>X]
a5Qk
oiE
m
pI	xGC5aAa
ia)VGqG1'9\U	Y	7%$%IXO5		x7hk%zѲ*s(TXі+ޣMŶ穄 ,i"uW<srty	4Gfp\
a3$U9}G#(utJN
a%3m=Q0
ګA}/I-PT78M
#fҭj 3TgDAS^knkO

#]]B rqJ7B"4m|yxxIk>­΃=IrҬ? f?< 	{KvV~>6r~n.7i ̥I'i[J3B6㈬A9
JN׍qH獠4SoL0#1J7PK8%1    PK    A             -   org/bouncycastle/est/HttpUtil$PartLexer.classT]sU~NdtK_!Q
`SPʓM8UW(LoJ_{6&!g>y?_,`+H!(-UGVH툩*t&Ku0D֭jbfSZW$év㟵A9E=vێA!.7,aYڲܺ ۻs3UMӨr3oWhk{t
AnVRRPٵ)I	jQ:wj%daZ2CaUlî*4r]%O<u0:Bfď;;k\[v8*cZƌWdqarŚ:QX
è]n{i0.(4vYYTpc
f#$aS0%̜0*,i(8 _Pp04.¼A+"ǂ09ix[K\0,<ҥ)4vevnc8t}.-hceۼbTF JA|Vo
J)6X&#t>q8t%}smoL?&c\{tn(cϐ؞dm~<rw>\ʹF&{)npz>"ugʋ6)Cq^<ѨD#x_7TNfC/xwY>1˟0S;?tzhnwrWJjk_6=9zgsra;AO_= j/]GGiiuWIWqf@LndGrRvӽv]PW~0ɿGKD"Q7fh%/%S¦h10Ь!PKZƎB    PK    A             #   org/bouncycastle/est/HttpUtil.classTsE~6^0%
*6(h#iAc0\2w!
~#_qI-ߜ?rA߽bPI&ϻ>n>{i,phfZ2-
yY$V4b	jfvY*IuQjkޢ9V=\%}>Gw]!dHׅW_ܖUCR@;!Rn=_[d"zZvOҫ[$kr\"Sp
4Z^]˼T~YU0uxzY-'#UIӆXAPC<PZkϝ1(]'Gcca#cop11Iǐ)~z8GjY}tƞ9/*43@g	dUPMl l@Ù['q%/׳fn7wW)\PxCx
w`ڰ1ᨆqFJ	yqچ36FgH
5,1i,js
8Nb%9|b|a)pKz+K-{2|uEϓR]n?1VvkP-&@]
H#pZ#E׿	"(}6VWrN_':-dwn56ƍ빏nm2gޜ	QxX.9qsش34jLQރ~ii	`<C#82cEvI>賴T+,)^[rWK17lO~u- F-rmhy8aܤުNىly05<JX0KP!s`PKtf    PK    A             (   org/bouncycastle/est/LimitedSource.class;o>vFǤҒԠFĲDļt}dR~Q~R~i^rerbqIN~jq>X}jJp~iQr*;;3# tk6FV`dad`d`1PK5E6{      PK    A             !   org/bouncycastle/est/Source.classeN0ϥiC"$&1T!kYQ`Wx 
qS4/s?>cNI/8y*4aRh2g0e6G"&v0W)J+Vӛ;=)Dj	w.6F+|v^d8
1&ďbnd~gY]oE]yGgeaoj="
B	m1bzDF	󠝇PK]Խ     PK    A             ,   org/bouncycastle/est/TLSUniqueProvider.class;o>NFf
(F
h'FԒмTFb8ϱ,13'1)(,X\Ƞ__\X\Z\P_Z L,@43H PK+`k      PK
      A                org/bouncycastle/est/jcajce/PK    A             8   org/bouncycastle/est/jcajce/ChannelBindingProvider.classe=
@oOS<ZT6NdakYx %&6N<yXc,0'7Dl**tV\`mR5JVJrLN`e\Jʺ%['KR%צ)2}|fiv21tf?[*P`ZMGzuPKF      PK    A             G   org/bouncycastle/est/jcajce/DefaultESTClient$PrintingOutputStream.classRN0}n!P,e)P -Hp!¡R"`To' 6q(Ĥ,b酃g<oG~y}zuU>bHY8o-۵ޅ#CmDHq颞PM W5BZ}GʹtD=iP-GiSyzRiKy&!UIw)火%Gsp9|zzwfjۤXLa &M$Ld01i&
id1F3F1ycX00"o?cfM)T=l/P$Q+h %hE<	F.?=9NGcr=eZ)U(7PK    PK    A             2   org/bouncycastle/est/jcajce/DefaultESTClient.classW	|T^޾ͱ`q6TG!`IM FzlɆe_}@Bkժ[lҦUۢ^Z{ޭֶ@yo7
o߼f曙ovc'?\Q `
LS0[AH\g)`
j4(x*	@@JC;:6.jX$0=ԕB	373^C6Ȃnf7xf
R޼T.cu,nZr@MS<f$Piȓq#kY[T(jvlFm2	#ʁf"-7cIYڦ'BɬFBqIx)NҧozJ=(zwKx\SJDf QLXz,H%sz㊴aNN:Oz3٦o#S^cX+,Jb}zt+$?9egX2vZ
פDIzb	=>b93Vڢ6ZRfrM5NFl+Dtذ٨ēz͸#rI)fI2))vebfcUWF~Ss+elNXF"[G/`9զn5kt&zWbln°Sp)hLY)(mc癭zIy*n-WmVL';aN3oL3eсFCѕik:ㅍn\CS+8cvjN>RtzD*c͸pbMm7|AϞH9]>2\!'/Eƕ=x_KhQ;Ǵ*o$
i(#drT~TRvbk<MZM1e.;mm)]^bH%RK
JTKHJIX+NbDD$.x%!N	]K"*-aHl葠fLth7NSӆ5-%e7CV;3U's;P}ۨ@=eEdfva8CUdG2>@U0HPY tK5?L6!Se{T}{
c
^7Aea+l5)+0~0o
㊷TsfRՅ}5NB|)ȁ'ԛ6-)-p/xs[^
"E9Ff'>Jkm)(w你LAC?>a>akX03440˰A
oL
)&|U>bp>34f8a>"M+L9ا![4S.5\[5hX4Dp0>b9CÅد!kX/A
%
[q$Ї5t˼+Lаh8XpaxHŻu;1bd6b7v?b02<=0Y{[ucO0gTq=~?0o*n!O2*E+3<f<Wop
e{
oG~3>| Ffx_OwOg:s~WiՐl̚Z}[髲_w;{Q܎roΤK9,X@OҪsu{ {\NEm](-`ny%}uE|6U1-|*Gܷ?k;ڐp=\mZ2"qubz8GnnIǑAґQFUC|dN sѵ>.fDe[@3>,Fs2xeBMtGp}'+qw#3<ьeDi 8D<08/tw,>@|\J1,u5׿3dArr=CyJ,`a*A=(GPKnXUq*tOrXq}͝a1_`HLs"ǜcuYjpکa%a122B;#R
ڵ$(
x<bgg	3_ntCW!<M`5[AIi\A.qE2UuHLawXgҩ|A߰!1x{"ZPg0#/YRVU?t}|6wyW-sL>>8?vn["G̈,kP$-Ak}G_(J3%|FpC')@QqU.i.kB8yq̕[)i(W&jFG"		;%9$ҎB[/GbxK^.&61QC!$=rTp$.Q
[H<9	q<tT;:jAuFt\F,WM+PKmn	    PK    A             @   org/bouncycastle/est/jcajce/DefaultESTClientSourceProvider.classWwG֖4kyrDMڤWBqB qEu
rqWzW9vyGyZn4uMGBy_d!N~蛹Ϲsk~=*ت"fTx7ةK
>>㰂@_m
nKbOlG
K3?]O5Lzk
wH5dqEU3vđR}`e}Mp<i
I_'@pb^!eDLВ$L(]gr\+1}BOZKkڹ}⑻QFhs͂#%N x7Ff42d&zcƴj
Rdi<hXcݴ=r]cx[^v\ޫKP)
ZNʛxݐ㢷FbP1KA4<SƺU˂c7'i(e F|\n^x^LQ!fFI4x^4W,ӭ/T8X*IC˗x(JmJUi%>2=Z*e="U^7T%˦*÷*ɤEN-`jQkH
ZOQ\jRE5d)Ɣ{I$^@mSS}<OKiܽ}+gwik*ʎ+{l[eTJ_uV>[X+[YAs;$^HO8YoK].*FAayc{pRi*JGˉaÛfxC>oe863d8p>w0K)ǿ65qb;Twn:fkKf,q im/Sn:n||6;R+?WsW/^-W27e|Uk}kiZYwٕ@+l/jzǗ9lnZ1TXp_6A5ޜWwm5tiGk5iߕGGܚKTʍt|xWF;,ýn#]cخvk8
D^mxLbWؤa3n!]BDÛ$E{Qp+&$Ii
wH8&˔x\ ޣa/ޫNOÃx]N|Pû!id1			)	00>	|EaHr_0tIfJ𔄯%|A%|C3(0F6"J$|\q|KNbZFuuolH9[Me_ʗ1#P`!"KCDdaT-i^h*ϧ
<DMJ.$:gq.{/$fl"D48hh'Z, 'ף>J{a:A4H\ĹEz.-^ro4nO/ 34z]E\	
K`s4
?dH:*-}"(LcN'Nd4:_ECTnZCu/^"
b_U
Nua3!?[Z뵲	^v9t}eHh?\NKYO 43B?kYͦVJȆ%ҺURm4JڴDJO_4Z0`Oש:]%W]j,`*p1(vүYi kH&<O_W.(qz/-\A01
C!0 װ_hf2':Iڎ1WpPKv<    PK    A             >   org/bouncycastle/est/jcajce/DefaultESTHttpClientProvider.classUO@- ZDOQ[<
ZAPD APKLmw%?&4$jwAăPl233ٙ~3>'%~HR
3)"R4\Y,CsN2?U "˓+T"&/\	0zɐz&}%LQC^Ob`pZ1$Uc5×H
a$_
e<%*w|XQ2njgs#2__&awrax/=+_8"Vθ;nٝ۬͢=ጉg<կ
xyR\Y7(SF,$PrY2lࠁZ1p@+ YlUU
El5PᏖ7خnXLRemCnUv8;_{\ajIwn_`h-S9Vmp8A0ެdԓŦV_wCL[zhk=pp;Y*މ
yYhC,㜅`&\pj,@ii^fWq=jvM>5
qKA'0`&NᶉӸgqS!Lߞ_uz]J"Zhrʜd8IS9=)
$)ŒJr$G4%S%=IʖȡY
l ma*b.bn/VWĘݶV_Ĩ}(b-*E;h^
Ɍ0ÐSpzTDwƈ(kx@z8Ӹ,2huk'[%='RPKAtb8  j  PK    A             4   org/bouncycastle/est/jcajce/JcaHttpAuthBuilder.classTkOQ=](Vl !Z0`̲mn$ qJ5ظɝ{9s?}P@W&%_l_bUHCvI-K:Yor /0%}	l4<"uk߯Sme(R_53K@BS;4|˱W>ʁ@1\k*xѨASo\"Ѧvw𼏎KWmMƖc$_!IݱMJڧZvFK|']ؗ
b


z$RkG黖]^?lJ}O:sQ|ȯb<R\;L0u*̶
kd
6Dmz+6wpxۡu[*zѥ*ngs7URPG*.Oy!l)h	<M#f͔@IDa)HZ(ŝvGOq_> nM&x1b|H;Fz5(paFaVa#
4Ej_Qa	͟hHa|0-3 1i,iyf>³:.҈:PK	}    PK    A             /   org/bouncycastle/est/jcajce/JcaJceUtils$1.classO1ǿCNß"bLȅ#G|85J]DGgȡI;̧?>}kh
4@"{.rE$+7"r%EJ缏Ta)F`AHyËv)TS9Qf6=>KĆ^nK#3*Vr_Z,kMC9l|x3^eIUeSEK{|.A~t)Z`RC.V{Iv2KwʨC%ӔuXɱtK-E/]ڃ .hp)b<;ten׺qvbֹ8 vV.-40U/K-z6n^9i.,F7Ex%F>UZWQ<9"Zr1VPi`6wm?fAcgV#nD3'w\3b|xtq@[PKOtt  ^  PK    A             /   org/bouncycastle/est/jcajce/JcaJceUtils$2.classVWG-yLXJ#JZ1G-
RVew'}־wxSSNT;!&zܙswޛߞ 8BhA
aWχpB/)`*
F
Դm"+
_ЗˍS+I;"yin]>?/5Ya;b[
uW"x
|(%pYy԰-G`T0	(lq'8%W2˝%l*s\/*%
H)E޳-=h'cB
\w]Sԭ\2Ct3+(e	Eױiqunbޢ
`yjDI:7^enqWu7k0Soy;̲/5)85yDfU%z-L繮yLsdG,QNsrz%Q02Y)RH=5izm'Kb0y"`O AwhsJsn9Ikub/ٴ"G-}Δv5%O)+enDpSQJ%ےr0eA[j2x\R
xڤ5Y%CE0p!p0zbqHޒ~g|V\3o#R=P)x5O=X|)ZČ",o/Qk_d28QlOߌgTBhb_;=gx%T7˺qU.h
t[_XVY'0^$Ƕ?V
nkm;ᤜ
yhY%;IҕCVu q@y
'WiHⲆixoj"Їq
aBLjxSr0,3pM㆜Ͷc7%;*A*])r*^m
R*(byU\{RIbHP1;*.?mS3j'\mPk9iSw]Nl!g$w[qgB/EB?i::$i D7f_o
,Jt&Ib1& A~~_W+O퇏3aܧwB$PӮZ+mGp.>+d2G)fe*	N
\M
'XT0_(Hп#2T11=D{$HpS@C:
#p`zU,ӧ(p>A-]i~ 0pU[600>\!)y<BHW]tO~|}OֱGj_%𨷃PK(O    PK    A             -   org/bouncycastle/est/jcajce/JcaJceUtils.classW[WWÀҊ$t,H
XvdLޗ_k ˲IOwg de9{z9g/8KPV
}!uy_p7eGuCwZd0/reQ8l5ƼɔxuCKk3kY)'&Niy
>ғ3¼i7tGMD:)qehDYIf8iLQuy܀1uRUl,ݙV4);Hb4"AfִQLvLm4lƘÕU'>`$9FTiOLO
KћT(|e!vTCcih/y^i?D"OłEy 6UBOYBG$NR
rܛ0>q!^, ӳ5&.DwR5(C	Ո)]Sp(R]cȭ:!,K>gFRZ|lY9Gk
LEIu}:mvBnσLyAv]*]PJhK[ؔb0G턒"ܾL+)CTI0Eᕮ̖%6kXSWGf(D;eLS4tkjDԻDT4[wۤУY <T7!"v%b=" 'Q_D@DPDE>EqP!):LP1|/`GK7b[u/wryņ9MN&veOo[5V-yIؠo?O8q˼7
^c_RLgW)+ښd1e9vZ^g~2;ᵛJ]W\uD\|g-%'+휼	E2Ce<+dTⴌjN$؁Wel^ȨYxK؂!qa{(IpI8f0	mHrbK8SB;bc)	'`qp
qN&%sn*e('ceD	:;Չލea!Pmה.-ҽqTmW;MO^,l=ݻ.5̈PJ34 6Mp8JPLn=p4Z@s_
:>Jo8\Q(Z?{kp! 8/"܇n@TxY'v{b-
%D2<y3>OÁ|6Ozq ([(GPe,<n5Fup\V!M?>4vG54:׹pA3H,>2PcutZ[Q70C"Nm;DH9%Pm\d؏BZ/"4{Px97͞;L$`f~g
BrG"O8BSIzӏPK-h  .
  PK    A             ?   org/bouncycastle/est/jcajce/JsseDefaultHostnameAuthorizer.classW	xTd&wK!CHpd&ɄARBD
D.L&{*kЪmmִI"-KibWڽ =L6&:7{ϹsϽ練8`X
nrc@K%[_hzHby6bmΊilJ7pU4g*H,jD53GS+Mlnr#lxr}4$ayJBKx҈E4ӊa4{ֆ-+mOZnY%p񴳮0wvkVK77=F;Ffrh/<_֍DDE{
K&uIb^Hߔb+Jw;xBoL]`Vn	қPܩ6u}u?xN4h6LK3"zi4NHgk'1rڪVF2:r?پKX1KOYKǄM4%bied7{xv]٪
2N)&F޻q'FDMޝ7j;ѼgلQ=y73n'ϔzp4^g鍉lt'y׺<7o\ѻhascniٜqcfPA-q mN`eQ:.I'
CȦn5vt$t^a(:۫5lz]I&V_8B)|\Eȡ}r`NP^dҊMXvi/x<1fK$w1@cpޣS!	[k;4IQ[K^htZJWI]`;>^J:d͏F'<Mɰ{aֺ>NJ'Esn;y+ӨAL&U[2)mS.nԝJT1
ʴh[@u
o<.Wh"zԯwjɘgF0ٛu盛kELJ'v=vqO^*zTVv3V|RVd#KYGOpuew1_bDDWIhX'$qz+%ZYWKHlh(I5JIl&]x$vHh	]̌	ZGdssMª)\'Z^2ZCyMtMW󦤢erI>z=WM9jF{¹\~ho
,\+BRzLejNv{gE_V1e.ed`	/JfZdD^%dEysկൻ<Ź#WB,Sı:Vs0{q];<8|#4ȀE8NUS9ߛfrG>rXmbeb6]jeo~V?}&pƎ<L̝TlUC*_lTq[U
P
`Rҙ*.ƽ*nU,}<_B&!<III>*X**.adN&	a@E5>Rq9>b%U,gT,gUs*xRq)QQGU܈T\kbk*`D"<U ã*Vo<x|Yo)H'
z={]xRAnW@^`u&`M&O3yɏϘ<`kZWLvMxJO&Rp+~
ފ1yɸw
Q_W]mɋ
އ3y/
v|ɷ؏xqmoǟߧ}}66լdmqֽe$?	(q 9!
;p\$!8r&Z%8$!!~q$\MŮao>kkՈ/(s68!3%Vǁ~8:EUwH,>JAI_I2pD%JTI$)p<MBjC'Pp}[Cq4oMhXT;}΃(n9 g^Ynk_s_>).
n
gDBaWFD)!>CN<K_?y!L|/
~5xؗߏԐ_M6'࡝̦%9;%|6l t<ӏdJㆬ㸩4,eY)lP3c!18?%J|ޔU,)I(x4H_Rƻ崔Ar<v	0a(%.5qv{|{w<<v_9r?6r-.H@?{񈸔Q/8Q]#bݧYwC9+9;p?o9"Jyu8iNMAkixEZq"!%J*'q->Q2iz[ZH7pTE,~b)ru̒0̔HPC3wKs8	Z\õyb3R/`J56*9P(%\Ύ/
>ՔY$VT|ЈXr0[38EBw:Cxhܹ#=dRB= j~(LRQr@{
P-MܛϛlA٦ҚEdnӨr;^{/[+@,{N3͖*
jיv|\/Iͱba1Q+!?PKPq
    PK    A             9   org/bouncycastle/est/jcajce/JsseESTServiceBuilder$1.classRMkA~fvtM65Z,MLAIi!=M&/ɦYؙzyh"xG﬇Qλ|3w߿~;fx.*ֱ}-4@CIF)2;ZS҉(cژ{թ(zaazյ&Tɩwie"3zeXQ}-=Ilv},}(Ta@ϏFT]m5L~O]6?tP@
ebSMG$*I
NR?xdDtL^)ժ3Tr[{h}[	ג >V^[§rqq<lZ6v< PKW^e    PK    A             7   org/bouncycastle/est/jcajce/JsseESTServiceBuilder.classX_.`ˋuBl%!Lǀc86`C!-^v
Gһs6 ;nG|GY%$$O`{3ފ`	[Ԅ#%H%4M=Ia	wYa.7<je/5[yHB_2r_WWT'3)Ra,q'JSi2HsK'9`Z3NfuW84?/L$t(-Ӻm-)aK2
l]nqmF7\ajܝu\赣=xr1uNd݌eYuA
HFU]q&]2l̴ŉa[I^bI֙|jVem]Yɬ5Jnl[](N
N&)sNǦ-j"&7v*9g5uV'Ō5\
|,nDM\ c"G(RfYWlsJ&
į	k`8Ɔ';?oٮHfWV
CqkNByA5 Wt7Ϩ)zkb'Oԛ0PYyX,_Kq)hyۣIq^5S֜t"H|,y--#2ȸ[=2:d+c}22q28(Di}"Hb2*='C<>4Nյ5A
idNKODz?IHӽ+jNz;vF:ת)uDr1nծ=Yj3]}aU"TO+dyטGX7NbweiqMiJɟht
`Vr*竾*i*	զTN*~jyj)5j_s
mZ峛M
u^ul
NjpGnZqV:XcUT<RXQdXQ5qMqƮSeZ߃StAV!0 
ڑP
vaLAtb\A#tI0sT5i^Rp&7m(>=
Z\ZA
AVA<+
*4c)fe9g_q|9~=/*x1RO CYON!R=0^`-e?d#?f?݆|7$4ĭ*G~
S측RаuTP~Ur~mMiSuYUˣ:mG>
hBz
)xz-k)/)SyRMF$?Qc9kmHt,7uSRZ%LOKx5ڰk+hɶ~y+ڽ7!>$H2NH2F8#=ءRcJm]m
:j{Ex'%fR
o<#&f|s<>TL:I{z.қ!ʇ!]m@WCQ<p[
Lvo(:~W
0d`;t4Gū]7pOw7ȣ'Fv9M[4E<+vPF{z]ukn
	'=Ef`Z_G`VK?0>:
AWXtGJ^"urd4%N2QtPD	@ߵTE߶}Gw e~ƏQ]c6n޹2<je?8=-PKyeU    PK    A             8   org/bouncycastle/est/jcajce/JsseHostnameAuthorizer.classEn1DgɁ/T	VRD::c6O;ɧQ"f4c¤eyy=9>ӝ6Լ529wܗ[a̍~Se쇼!&-Pv<]W9P/A2\UJT{lK`0-T
 <{\PKc&      PK    A             8   org/bouncycastle/est/jcajce/LimitedSSLSocketSource.classTkSP=@W)RP-(">HAT4P4Ȍ4S!&e8?37PhQ;g &b.%k}#6|;'~ڰwF@tَ+oXV68.]9YrKcp& kVFי̿,sui;.N)-[JI#[r+<a򨴚a[$*+P+,3ݱmkaˋمm^n55 /&+hj.@"uwse1eUUT[`9g,9d渲UTԉIo 
(:D p]u&_&y);k:c%Q".-GD/L9mb[n傦QlRw)I95B:U] wfY,TNIHWEHS(RU-zЙRjL_W	/`:+<-%.zk0,		HJGHB7JhV,!pSB3&1Inns3F?ÈN}n̄	r&\nң8oO#Q5
斊hAXҶVB*a('NOnsFRCc#%QZC<J#\jl{?$GGi&ؐzej>jG0I5z8}܎:1E8b u Gj#!z+d)!F#zF15ZGx^/ZKk:z2$l*|geUY5HPKNy(    PK    A             9   org/bouncycastle/est/jcajce/SSLSocketFactoryCreator.classeN;A_XFuh$f!ôt?Ef<VRTA}]B}8#؋UYXV範>)l	ܞ)l3Q$~&VٸSWA1lseA1Oh!eUz1	ڟ!FZhB-!U9N=rPK      PK    A             B   org/bouncycastle/est/jcajce/SSLSocketFactoryCreatorBuilder$1.classTKSAEEE1t ,ca2eڙXpУZуbYj& [=3Ә`Hd{!æx
áG4@jG)ypfݨt"K͓U/3Hr-Ga4ϰ"12R9(!2*bF%̐TFR<8RqwFwnY9FTS~%2#kގ§^YF(Bh9GO]}f!TUɰy#vm`
)
x
 ;w`czY="UiZݣte(6-lv;,nqV#/PkuYLCGV㎕"9n
r?}"k^ {	Ȳ+jdt6<f"?]]N)gavQäX`PUu ؃n8bczllQ{Y	0zmь>-8f#FsR'8i)#Npg4:qވF\2"ߊ8Gim*CQ꩐Xzio
>WJ2S3#>+u<J"rOb42sۉGHE&s}1[Ho3eȽLXl>J	Пwa^v,(4'_?gd0n MFruh-Εhip}Ovjz}7KShETߢeߏGn:I 7ƈPK
`936    PK    A             @   org/bouncycastle/est/jcajce/SSLSocketFactoryCreatorBuilder.classU]SF=!2Fꄄ|*Z!IP!ЈR>1(GZ)Scf]=>8{νw
[JLZi9pfT}K+hTe##SXJA7FT
2bs+r#>õKpaǱooݞ#=ZAX\'!	l
q@hǫM6#JP~(%ۤډW*b^PB;I<I&ISva6v
zn,|nX۞qqNpz"v"o1w7t&Y6)DU%d-Pgj_ .WrI+jDPCA
g5isF4\`^-uhijE&}h6T'|q5DM}'$i)y$P7:%xltw|;Y?Ef7SpNIuaZԅc]q븄QL븈:SWЯ:.Öin_c
s|%}i:X`2,f0)7>Ra]K>Oϴ<-ns:vV[9&Q\y
[y\yʅ|??d7hD>Vla >o޿`R9gO~# d%
SL܇yXW\wkjQI2Mzd
(G	#x@Klw;d }ekyb[񗝔W1 f^,_0$I+-:>@qJ~ 'Xs$!o9PKE׉  
	  PK
      A                org/bouncycastle/its/PK    A             ,   org/bouncycastle/its/ETSIEncryptedData.classVWU
>҂BFYk*6J!y0&
~ZPs֯	)kwH	k}_~pUJA93=m>?{~}a_xPGwאn3_21"Me7e\a)l4m\) 7ъɤ&q
=8ca@yV'/HaRv9j0nʹ:-F̠͠9e%ȇ<Z=1*IҰe\egX[BЌ%-X`>,ca7Ӿ`4*hmJn
blrVmD}a#An02c:ld|HN)cŧ}V/>=avCN(ja'|P ŁyVвH+=} ׅ( F(PR.ר`W롢F"Tnt&Z%Z,Hn8BR*?QTޖs(hX$̾5|!*OUxj]&m
!pNF{
/p@+,"*&.îrBUp>q$;r{m.$Q]:OjsQӐ$٫Ϛ{Hm?<@B6!Urǔޕ {d.7LK5&@GN4pɹ0(f6c΂[II\
^s#r)-vbOZ-]*̹3ZP6ѰiPqRC
ְe*Qm`ЄS/hbLC-ՠ1
`wPR:pNg$z!OWU3*:!U`
GVqITY}0UGBy~U$V .1I$9&U""jt!d0"}3HB-h2>	I˪1mv?h5Կ/i4W(=!PriP8PӒFDk
ϧߗ#rT8Ғխ7
-
?x}:h^ě="ޫ5iURx潿wT
ѝ(MGX&#p[@NhNՓsNf4M2f9XƉRx<]k28onl&
C4N0">
|&F[u,
|ZWoFѵ\@_k'(^İ^sxGg#4[|PKUEԊP  
  PK    A             3   org/bouncycastle/its/ETSIEncryptedDataBuilder.classVkWE~6	BڪUp3\,@$Ʀ
)Vl4lM-U{QzG?XI Ory罿_oV	o+zW
hc0
gFGμZ:MyCN\EF6-,+VM#%%>wn	1#.,G<p)/̛wDzNs4ԤW.@ER1f/GX#:6Z8bjCvTplxֲa5^>u@,s̒	rS5Ɋd&Aw6_p]\@IP3&C;"VIB
MsHhf:NAM:͚}v՝T}:"']elj[85my\:hw?C'C9^bpeW^eo&R0[CNkO͐Dmo3t*O}CN#c'i5d1ڴ %s>q׾j072{ך3Z1?TD\[oП#~RUiSu{Gn(ܓkc'68>[pµuуi(gx^:bYю(GMqJ8y]Gxq9	npbCb+|bP>S1/TzVq+V%|b	ITDI*ֆpS­6,6")aIܘX.MbYͶ|&9KhIGKZ*+pg2= ehf\)}{B9ѷg\ن+2?% f8ϓF2x>WqOvȃ.ز'*vY⁂#'F";&V@Wd|3 Q(Av3RD|Y]ĽmlT;nxSAU
ʔ{qbJ1Bգ?PKQf  w  PK    A             )   org/bouncycastle/its/ETSIKeyWrapper.class;o>vFĲDļt}FtҼ⒜T̒b}א`OĂ"Fr M#IC_~jXofjjeJ~k^rQeAIjKbI"4ۚY@L PKǌ      PK    A             *   org/bouncycastle/its/ETSIRecipientID.classT[OY\hha¢2
aA@YEƘn9ֱ/nYOi08SW_U׹ PHHHҹlj4@״:@MY']\Ek@g]5ϱz]6H)V<@f
B2.C֪
Ga*pzUJÐG]n=RvH<]׭5oӵlue9a`-ޭp^8,J})?;J+秪^xZYw}QE@[*mI-S|_nц
_:5pHàh8ᘆ~(.w]E?t=L_%N+yis^o)wܚ_tm*
Ncމv>Dg֮SL2;3~5uC}hg,0` Zʀ5Ѓ>P`m@?3^X=y'pńN/,~11bFYL8K:NHbRi\rMʖUX+җOT|~	+κ+M{+]>D9D饢qat:FZ^5N/`y?a	0U1Ԋ'!4ϚN5
o1+d?̾E?Oc4(owRH%*|H*K'3#
5#hٸHčs7_zy&JlKp]"Gj7r1Y&."aQ<%c=&pa+\d'PK3  !  PK    A             ,   org/bouncycastle/its/ETSIRecipientInfo.classV}Se	98.BѾĶV&B!ikCy֊oi8ܥ~?_k{IiH2̕J۽gw/ !xû֢%?oasKB4gvb9ZԨEM+3lvUn%E)HKIvJJAdꎰOüc:yq2-H-*eXk°LdfL=D5˛uN{GF 'K)*4*؆.fk^dY3K|,JZ9cs_o
X.Yv)mMk5,Z͜Nf
kӞS2k$\3Z2Yw+hU9iptZl	s==-C1=7PdFԺy͟bWnC+(֫ڣ:ex֟rW(}~_ւ?w*Ow[	Qtt}cfv.[D6r/acT*aeqNyox[FTe#]d\qEFLF2rKw(%w2Z%x%e<(@heA#%;J]i_gW\yf7M/swNDɇ"o}L|QiĳyZ=헹+u5/bt{ܧͥU(HHfa!bA'N1aP0C7T*N3a-'"cȨP5TU>fayaaU>S0uWqG`[Z*
u_2h
fqO>Wp2l+}-ot( 	~d!EhUȕIz6`AqG"iu$4&|
x?\8`AC4m4Jl'ē8n9.>? |?1q\zlךx6\<jvՅ
F.*M4RAMSHȅ=;<~Gcߧ䉈<bׅIA x>HtPKBg%    PK    A             3   org/bouncycastle/its/ETSIRecipientInfoBuilder.classU[OQNA.E.*ZJqK&"

%Xn{D
J(l[LVtf7o ưPp-xʹir!#mj̦"C!.3^#/V:SXDf\3yz[=9iCcI<#^RY|#.ث"ṜGdgy2+tSz|#X`5GҍU7^aoc
!'i[\ɯwԟjԟWBs՗-҉$Csk!Hqˠ1ӹDïާv*P*+hPШ&}>1_-M8)ʐ:KޢV_Z9sR$hoU}F^_H9>u4ێSY1u%v{fqɺx/|6"
-Pn
U`	h⾆[p}jЊ~
7֠` ;xdPmh#Sq*:1qL*עtU_*v._-aYYr.]Iɍ5݄FOA M^tjR/jm@8I$Wob*<ph8rO>z(0IΞfѵC
xJ,P\GvHO"N!^Q\&DJz/PKl    PK    A             )   org/bouncycastle/its/ETSISignedData.classWWW
ۃa]qpG@JHԤT'83Aik[zZs|7`-p߼~{%˯ vjH(5E9(t:(w:(N{JBuW"}PBU?l[Zjoֱ/jkLy1%un<Fxcm̥R%Ǎ v"h)LS#Ԑ;gh	;gYtzH
c᜷mYT;f\P(,[Յ%y
iDT1	PvsA
a+0'lkD@Rmؕ9ma4YpJGy&6FR)>bj<ۈQLTH`艉j)P-=owJ@82TmB"TF#lj<fCf"IoM̟(X(3Ζt`n}ʻ(Ys4Iu,ږҸiB4xݰjq{"ͭ@ޖ)ʵX:EX,?Q#չ$\GB|v%igIPMi<ZۘQld^rT5.쐦ٜa-:bȰa3fa;ʰ! aQϩS|xV:wzX{"58h9 <REU.9nH#e;QJ8kBo>ĳS\Z^
LR65Epp K5=.(=c	wKvWxwIz=NExQxPp!".sUPge2rÈ&YēX>t/ū^_Cw6bA(hDT~BĀ%(SPruBTR^!J

V)X

)h
VgQmP°HoIkЃBh5#58s2aLetэ2.ȸ"#e.'d1.E!qBB<%02%!&xZF8
C;^Ctξ-zFt})ղ8ua8UpWL3e?J<}Am
'NuꭢLh͓x
/ 9WptkI'ujsE]eR]CmE20zLi=7T;Q7^/tNϸ*JFߢ)ca B5Co8hM
zUNv'(mO[֣q~5ͥ,]7#'܌0L?zқīxm/<겦M|R
rI˜/iymAxH޺g6wc[.cQ)j0Lvz&~ĕZj_PKT3    PK    A             0   org/bouncycastle/its/ETSISignedDataBuilder.classXw\X@V/@E.%`ٖN:nq8'qzWz,Y:NONw)vk,x7f޼y3s{mc(n:j<M[Ds%-FbcCis3[kQ"15ܦ
mMDJfCj܈EBz(.Uz[Vװfp@Uiޠ;4ckoB<aKǰGgGU sX?Z_4!ZޯZ<b24lMϪ6*4)ș*`L7XH8Oy4LC	 ]-BYHĉKA^91Ըbhd慧?^`NGX?p.-Fgg;{O!wYvp"fD~kH{D*;17;iqyb1majXh$FT+znG]?c`X	޳v b@wW0<>\-9ݕQiO%[s=^6dhm4S1A7qgp'^"]ϺVNŜ_o!t_W^?u0/v[H
Π m20u
:3	2i3.)tBrBGzHjJuX;unȐ)Hΰ-H{t^`CQd&Ӧ \r[%MWc"P3V
eU~fnJ⚡Q5IA;Ghy	,=Ft|M#1]
[ھzJW.7C5%eCH%q%U	$AF	^	$$lE_Bz	[%l]	;%쒰[BF	M%<A	OW>	-Z%IHxÊv{
DA2z=~{ M['GGn@+$n¸FХMv--گX	`NuAEɳg"~b_<1W]o{~$n!vB8%.`9LUNÓaSYe''{vO"U>caLІS%
CR;Q↚g .4:rˌ98W+^S+{fiR)AzSeB՜0`wr$ʙkJoT5%rRQ 5N:~a2*9݉8aSȻǸFL&ǘL>ޛW%CtMǯýNZx[qFs-d;IjVIұ3Y	Ž-N{?v'ɶ=/g3{\5}uW=9~Ɠ^]2OJ-ws+ITVwtMVg{f{|=X[8q+<cn8*Y"jqDXR#
<KQpyk|x!G "/ᘋr8vrc>^)zbb
X%H9^'V_QD
G6v1|!)xnxG's{9>v 9Ca|c98e +ӑq qq#q~(fSyLO
UA'e'*,1/ʈG2N2Nk2 ?g2s1|C/	uA~!/eg9q|[o
+A~-o?w qw q?1qS8Or>A>!ȃ|A|jacɭQEU,#gENTEϰJ1DV<QԫKm^%z%`l3V"_ͩI29$Yy/H˾QWsZ<e}oM,-G77۳[,QbJZNUctMJq~ͻ&@xqT/ cfU7ssOƛIdJ3l!
50z|hKxd-kOj>dl2ޘHX$8X361^)VzR1ޞ[H5I'Ŋlim-IIxsU'٢Q7+"LI)ҕw
II㸹gnԎ%%cl]X#zXZ.M؆";K$ՖLOg-HH<u#Z+Y	'%x^7}<=i Pe{B<STb]<ENK]I$NGqS?kGLﭠ|<}	E$QJY.IVr^c[Xl+i3[qYPKmȱn	  W!  PK    A             ,   org/bouncycastle/its/ITSAlgorithmUtils.classSOABWBAE'
C^lRl۵]r5	&g(b as7372~82CcTdHWN.k%L[jID٢pO>ZÎ(ޟtO|~i&UP_+7/AAo4E=E藸BwݘڒVD!O|K| 2oPꃮTO*զclY9W&jgdm0,U)
k"$"CظdMjR(&idaxկ3`7Xu1fsƤᖃ	ܱq
qwm1BXU<40$-H]}=y*
d3-["o7MeH>cX
slq$=K%&]#8̗R1lqb!|;0ϣ>r<ݸ PK  '  PK    A             )   org/bouncycastle/its/ITSCertificate.classVWG-,<]pEĖTSyi(kⲛNeۿ
R~;	l0̝߽7w<?g	͑/%"q	-ոhC	ᛦm[:iuI]r,ml3Fie%5ZI&9A=
}'m2R,7b}ؔK,{.7$Qb!c>5;\NW%tQ{Y̬ɋ5ZH>5o^Bno-2휶w!i`EC4{Zj)]X=T|/Ce4䙫sՒty=(7ʎ͙͗E4}Ճ~j3lM$"gꁫL"16<ze<ځ4lLN2'ΐ+^3O\ZٓseT2mH8v.h
ܴ4E\:3|/evm܉9v]΃QrVkr&-'e/mxWigdqNyd\K2ޗ08xMJ.GHdd`6hOӐFCG؈=Dv3x*m`Ml316H\׃4 z
Kda=%
+n]pan_t(nHd
HUO?,Cݿo@&Nc
ˑT:'gkXT
8&iTѤM!TEE܊Tt"]Uqs*bWыѷB=QoU|Ҋ)XR+
kJwXVud37`	|)&0
ֆ[x(ĪztQsm&,5\7y~ǫqf2=*"^;;$V(mX
D*%ECwLq>%FV(mػn$*
U\a6ԗƖk<!#Ij!Iz=Bu2V6KxM7*,!_x
|"4x*M'=9Be +T*o39Tb9}mL_EPKL$;\    PK    A             0   org/bouncycastle/its/ITSCertificateBuilder.classVmSU~ٲ޾R[iUy		@_(Rb6nv/壎38Gꌄ/3l^
iمLι}s{9w~y$DpKnEӽ-fwm\8U f6t[ӵ!G,XE.9HGfSЮۅ,MN,׸JHXE}KUu|6m\6uZjY`EBMrg697QV&y\)r!RGkƒng:vZsV6J
[M*3}dz废)=DuSOڙ̛Ai{k_D.p{ϹyY'rpֵ˺['dqJi28+S9/8/れ$;.a*`=pg< O=Ttx)z4tw' zFU.dC\jD5"Fu-
9MO2i!p"Yho_
iQ\m5j^az7}BQ:&zKU"/b=*1߆ssH%-}c303Wd\cx
i&pc1Ў[bëpb;ݘbwp2^FxO'LF=Uh>,(GVA
 0$'| 9@@ż0)}վ)ˠ@.*h#>2Od]M_hy-_^LH:EfGE6<O<|;d7ivRr'?H"LbFWb;px0J,چHnAbp'~~

X`}/A^ ȃW0?Jࢯ>uy꒾F՘wcLRp{{hP[kz|=KV\AwOo=
A
V+X03TQc<Dnw'|z.V,~~OA7X]./2Uh%|IPAL'U*=PKCYXZ    PK    A             8   org/bouncycastle/its/ITSExplicitCertificateBuilder.classX	xX~ɦ
i066;XNQ)rM,򮲻2M^	
I"n";q镶}}ptʶdie_пogzfgfN,պЍ/aAÚ*lj8.nB6*USv%5%֡ګF#"BpUKzb-[
S(mWOJM$F4M꓆KEhN[I#V hB7ZՓ}-NwuQC!<#ky^*T$aƔɄU-	<XmnV߀e4JS/+hWLR!>]"Zgykؙ)+lYftICM_CZL
}䚢+aj^a%+4Z\Ñ_ѨT]d:՝U69A1	%IԀYy+E!Q7=Eшi%6{6tVV(F*)z
e3O(U(AǷYTpA ,`)	2RdV][ַ'7G	uSqū"Tn,Od'RB{S=$ԢF>1J.	kPw_O*QcgL+1,vk|IྜྷJDɍ(<i#AUe-1/'WI.٦Yˇbs+$o'2͔bglky%jEHB<-yW<: ewE̾2y%ml^/|KH&(H'n$\Z$Ԅ0"i*^*^\iRc&A>."󈫝Ԛ̩ɜښtnRrn-j]fmZlmVMtbʣrPgN%EWfY:	5)_ӏhq'J޲Q;XX#$
ga5SpCF&f60ldİaV+10Zba;3Ih]~lY>m]muP3")9mY =;S⽞rnFvQ]DTZ̼Dfu

5:AUK.5+G
w
&1KK)Z"6Z뎲
;UR8^3smJry0М5g{5M6T'N'9]:ay%#]IhlvQi6Z</xZE.lu
#UmMٛi.8V5x<{gT˝Na7&?];)ϾjsȒQaqFof`1\5.`/Q[9s<q{</2\O
U>0KBA{R/X;8NZXr .%8q '8Vne^+8Bx%5x.Z:9;&x3G"s wyЃ	xx!z{=H}QGƳ!2n2np#2Ȉc>.C2i8>)k2>-c gdh1
˸
/0	&NxX|YWdX}2h5>"
x>'?+;}-Fݤ#1MŔ
[hd%+I^ʬ^
 Q:Pnje$RTnlc@-:δ6Yק&9rT =>~|wT*28{`#*fU6gQ	pI*zAi?6Y[0?U*Q^E<nƏ2(O|~<ڀg7u/F3Rc\W~>oeuwۅN!;-ΌAr	[z'Q3>~sqjV\!g5T~`^J#jF/`UNM zsZ}e>y/*tWO?0XO#):zp9*Ab)uAgcK9=dKb%Ñŋ{Ήh<72. h!WPOvC	C\PKIY_    PK    A             8   org/bouncycastle/its/ITSImplicitCertificateBuilder.classX4tOEPRk)mvVjm:sI3afR{+I
n?zΝHI_ޓs9lso~w lHHXشSBUcӮN	]bYMm[$,F2eШ[%N:۷{fhՠ\yiک	A)EhG/A!RkcjhLq~ieb<MhE_Ogt	9Ӹml=9_߶f-S7iz2U
nk+am\N\:o:'U\-:{\,ҬNT$츩ygwuX̶^u`t	"6?bKLߋ"Rjv)WHJꔣ	m,rk6.^IWJnfӤ5ZP+Frҧ%.;[ԽgU6'wy.]Kfq6ѭyPr褹+lZCRU04+2θh}eIR0rMQy_P"M+Zsu|7{As)GS7%J-FA
IXDSq:N\{iua'g]Q\qӁK͕A=+cﵝƔ,?)g`1p>d"1\°aå1\̰a]¦R0Lm!%Oh
)zƪJw$kl)I),ٴSDnh,jb3*$coG&L'eԄ6^Zq٠Ϝ2*~m*X~`J`.lX%54ww`@h^sW2zKVw"U#	=?V}{ӼYޟkƼ)6s%ZRSVi!)xg	W+}S1w)yJ((K
3EN
-y	]W<
bPAspsSAFQ,PP#- *WQ
&.uYnQ*mby`-uح`#R
Z1`(LkGU`5[fTíA'<~
@EF+*K]2}сe$qdlхgde
xHc'e\<-<"Y	x^6 /Ý2v[pw-ob;^wWPU1赥ݤct|M߻MK+y] $9fiCFL6\ǓH+y|UA":1dX(iobAN1v y|EHsￂX
A~|$ //xWX2r&rv
_ea+v$J;za-JsjH
Lƚ->9ޤtby<ZM㾖U8Lg7h,J^v(VjcQ	LDp
9#x3χk9|AX4s.,sBSU{|DH)ݸ?Rt{pPK?Ѥ  X  PK    A             ?   org/bouncycastle/its/ITSPublicEncryptionKey$symmAlgorithm.classTOPn7V
MqJ!{X@2%1>ݕ(Z柤h4<G/6=wsro<J	:n1;kU5;nSlxDvϑ+7J	#PԭC
ˑUyWn\.{v:ɰhu?p^Ȑ",-
>=0xrG))drW^Ȱ^_E;B/lЪv'$GPwn}۬_MC:RŞruFwK=Y!lVm_ؒU8^UȳvƶĸpqaX*EwG&n0abDjv L`Dy`"	xL*$LH#k 2r䕙6뺿Kͬx"mFm
n7m%N+Uj2(4K)ШRN>z`xI41`ph"WE(#Z)ߥ1N;\~;^A!(p FsM(!vj;aџI1B͞`ǘ91vNuKHaquPKѺq  P  PK    A             1   org/bouncycastle/its/ITSPublicEncryptionKey.classMK1kۺ[GC?"BQREJPSII+EGiE!ΐwO !HCܜU23\kxɧ/.4@"LB_Qn4? ao@'i'K㔠ldgp&VAAAw+Z9curIsD_3̘;%DTHcE
6ȣL#pB0Ս|ZmC^:R+ٸe]4o^߁T+j^ PK@;.  A  PK    A             3   org/bouncycastle/its/ITSPublicVerificationKey.classJP[lwDX(>9)%GBJA\ >87.f|Ϸw 
4 L<Y&rd3yIY]djLU*)삤Ee*\kXmK֜Fף楲eN<Yf4ίXk{MD}&
#_U{<6ZgfJ_bc-n~Pm?̐Ug5 PKMH     PK    A             4   org/bouncycastle/its/ITSValidityPeriod$Builder.classaOAߵk-jEENibj?XB҄,9?e=hbMwޝW 3fG*R1KW$8~(3<#0RB0Ĭi4FBPhPd/dam24Ua =ut,\{BKJrtzW68M4COF$m~$Td,Q9խ382TOkwz	Q_鉎_6..bW\0梀s.f`kezpÆE,9⦃\-ïR܈Zۋ"lBkI;+yXV"ͥ?uܥn'{u;Gxxi\=Qʱ[X;v>R4Oڰ.kX{RPK,     PK    A             1   org/bouncycastle/its/ITSValidityPeriod$Unit.classS]S@=MWRAElآ-ЂU0)DC2(o 5::>.lgzΞw= s`gd0121+LnW׷>7ݖJHds'V\s%	r<j?[faoyցek(,Ԟۦ48~cr$ea8Y,%Ȗ{6
h˞YpMYXZ{=
ж|
αT^		tKoQJO&Yɕ
t
%t.;ZD56w^/ɞ5%qNH1-%mOXu0,V_kKᬆ~\0!a(15ኆLqAEVyLp
f9pÜ	̫[4wzk~^V<;gJ߰]=;LN3V@In@e*\W ęGc?汘9
@G%",$<$!?OXwByt9]"Kc/X	v2ހ8$D0qXO{^,x	vtUnzӢXwzQOh6z%Q2ꬍQijt^Rļu9oEUnï hD3,T"jQ(YZ*J	$(BJ1&TE(EOG/xp#'b/&QR;^PK)    PK    A             ,   org/bouncycastle/its/ITSValidityPeriod.classVRVN0hܚ%
JL%$
)Mo|bDo&Ô>@$OB9s]~:$^1t 3\g:杲#mJ&Z
c=aIn#w
qgI-S-
t[0tt*+-O2L1k'Bfc%\4䷄M`kےSL(Zh-a]hJ޵-_HL';phADkD))+BO%g
0/kGtMu9BXǓ< G\u7|IyDYUlYcGoGkS
=jk5hpat%D{?SZz57>EFlɤQs:iqrO{I#"dI#z)V'8ۂ{m[tn<o[uV.R3CT՜,w&8FUn
 U6<@ބO>-tpqG;ڔpt#	;ǡa2⸂)e}N9x],*P%CFǗX1G:|#qxĪ$|ĊOu?(4H-=R%O]z<]QEգJ4O*<6iGHF:zc#?[l&H:^'W{8>R/{X'2CǃܯGC1'/ri ҄ux?"A^wFjc6)C$`/oU<D\>~BTQhqHRZqV$VbPKIs`  	  PK
      A                org/bouncycastle/its/bc/PK    A             0   org/bouncycastle/its/bc/BcITSContentSigner.classWwrrIPҖG%'C)-+cdZd+V+'NZ	h!ӄ>N{N_hWlI&ir|3w[6!݆/*;3<QS
Z
&&	d>˱e}C
(S~3,C޾e;m8(c9+/~̟)Ȟ5:6K޴@
&}v%y=j9Mrxɰ
6#=×Y+~#3$M<?3`/E״KIϷ&-_3@	"ub`ɩͬuQits2,bi1dLl=͆K~g}O#/bp{E4S"9I
6Xţ$XN^ƴ[N_0e\Gʮm8y=c2o}^4%tg)SHjn0'J\݉\/YvNz
'ܒcΘFѷn}z_vh_w&mLLvtjOc4l:@/m{%:hf4.tW_mS0݌`U9KP3~맨S\dwcmMugMSəZ=^@xCA4)ҩwԱ-gF˞j}1kMO1),I_6ת86 'ϝ*/>+V|<Ϙ?ʀ8EX\@)|R۠Q 1Fc{ؤa2Y
ha/9;'g*r#+	@n=^}8$pa{zz8k{F/5&fTb*˞%QiJYz&^[HcKsk6WE5=oRj)˷e/o*9?4E)pFz5Yav4phy֙ȗ_]ɝW/>F6,ݵ	
[w%Z l_DT7Mf/Pogy
Mŷ>ϰ
>p7 mаrBj0Njh
[ 4:Цᓈj@phC;,
Y
qN5հ
@罒OagŃx"p+QWd7cxJcA ~_OUdcx?SqϪ8xax9_c+]N/{gx<}Ʀs>;<w(3
Al:8̕_)V)S~;'6!E"+?L8hP'f"92>2ޛåD^OKWb<͉EdǮ7:˳6&Kˤ/Tql#2_O\,q//-ë5EY^ƕ2XDWsx9AWpMmsxWõ|ԊpGpre'	
n
xQ,_7Rc=Tغ5w=!0QiTh\C_'LTxs(nǟmj`rUP
";*kC:? ZgyB+AKfl^ܵ8W <oP(^-jkeߕ$1U7CeUF98PK~    PK    A             <   org/bouncycastle/its/bc/BcITSContentVerifierProvider$1.classRn@=<LR	}@۴%@(0H.,Z(b5tc'i$*T >
qTKsϝs>tv	`CmJjyBҼ$z_#>T~sH3,M24F~̰t?P8<yjYbJEJmMI]zOfxvY)5cezB0I9-qFFƌ
}<)Q	ܧ*?$x^/տzhp,n;(9,a53*6gfv"em'*q0*^	Xk}L#t&=>OiY% !C"2V`y
a{t9]+}FT,c=Su˄Ƨܷ0=s0	5)t./*^(M+jkW
,l"%JѥPKF?    PK    A             <   org/bouncycastle/its/bc/BcITSContentVerifierProvider$2.classV[sT'Qť( cWIJJ`Kn7Y>*3	O<'x⑗> S'
eaUvdHF{{#QI$WГXL.)%^mX
,ǒfl.kyRA0M^0lSqZK
.U׳dmPV,)8E)*|Y
^\C(=a)s(nNU+
.^U/
4
_B7ͺt]
NUuS^pP0t"#̞X%}lfT̹Dzs׭
OUluP
wXZ0EvMa;(sK-
izMf+kM	zŐ4uK8u?GVi8mҜ
IC6<"⬊s*ΫUxUk*.xx:B脂+G"t40oQ!
<#HvJnT-7nۼXpΪ踆g	IOs-QhӀSZd9A2wڄo1;q\96.朡%VrR!7ʶeڥ?a#v\oҼjdkxc.ㆆ70iCѠK;h8n
WУACӘ-5(22dc2$n8
1)i&L>aigRa3H&1Cs+;SVNۿ*
9}7ۮAD/-|a>1%l4CGw	T	*
sN
8U0WCNգ	CJy%MOexnAjRj6SϐZ|m|ROVXg^MR?"~>C5M|(L롨{	?QDNR?ӑ%/ӑ-|I?1fH1r搏L$àqWk)t0/g[#EXUnPʒVII&HPK:p3  	  PK    A             :   org/bouncycastle/its/bc/BcITSContentVerifierProvider.classWw֖<zLa[M!c$UMXDUwWIL-@鋶RچK1	Cםvק:gΝ{|;zo]mDW#xHB}gW]yRBk2&s2sL$|;Hh11Kh0c<g
ᖣOiYKmw.wDA繑*9j匞3˚l<ZrG6ömuzM̘zޛk&?I}q#mf8-Da;]B2~y;ڨ[t `ٹf4Y=sʞ,޷<$M/en;TTiK4#&r9rIhY:;٘X0H0ӑ+9#kZYu,鹴f;9jѧcD~"
AnvyCݯZ33^H[syTiO!YڬGS
쨁鎭&&Qk\hMXZC[G-m`3%,G`MJ	2uh
:?vO%:hr^O
9ݟ1~uEnbͽ+e51u=1?37f`6幭d5Վݵj+/#wW[A gb	UVUhvbzn[/|8=trC-9#*E#MseiF,3^8c\ꊈ7,V[iӊhU60la1t2Dv2t30bPzv3a0A}g} GYPle-g&Aj!`E[!- dwv,pkg|ݙ_^>sؘ$G,hsbkux_¡QxϒC>>or	;aZ%{R/Ym؂%jϿ|Ci"^zg|r{_ͯCM.{ۍI'7^1/hcLzD(Dr(S[O	f3Z1^pjk7dl2u\0<-
ޏ)q
 \A3(*ۄT
`
nGC)81+܍Y[WR>
*8'I#I1B|.cB|ABxFa |YhY</ċB|O.Q<'ķ$/c?!we7e|?wdĳ2&qA'E!^q
/4a_+B|	~@~ց@ei~F$%aiͩL gh	Q=1کR|)c R\-m)6uA#@X-ѝYx+EuzͻxoWq}0
651򯎞0=QzK]K<h:мéu%vK%(x:/7h	&+pQIe---5?VJoe}8Af1},p	חV
hJ@FhD^B"N1*E_޹~?#}t/]	o7u+B\[_oqBPįX-UurH7</v?-U,pb)ZD2."&R0zJ;/bgx =燗xG/q|cjD.+&*	@PK1zQ    PK    A             =   org/bouncycastle/its/bc/BcITSExplicitCertificateBuilder.classTjAl:TkcekŬfEPPepf'мORoXRgqfkbVxegw #pyl
OURi7{1T|b
Ca#V?ФfAOq<e t	>?e癤l3yN3x	tD^¢f	?`R(,"#~6%Nϗ~7un)Cd˼cIwu`?l=&}%90O$%*KOY̱ΕhE9aGM&7ulFyLwsq|b~rS
̲l6X1%z+<Y+z,%(x:~3T5߆
B熮u];]ҫBPf5ƕcDepQ7P%uk=ʇ(qn1u-[C\>Ȉ7',PuU׶cPKMd    PK    A             =   org/bouncycastle/its/bc/BcITSImplicitCertificateBuilder.classQJAƌYM1"Y/f
0;?S@Y_b3P]UݏOw T7JG2昡tA*E|i2?l^?BRDĤ>%u0cLE-hwv+S۪I-M))z'_-.e&1H3er8E)gUO'Moqc<n~$kC,i̻0?F_TliJ:H,(0{l_k(±}bŝ!n2W,6X\BPK+    PK    A             6   org/bouncycastle/its/bc/BcITSPublicEncryptionKey.classWWGVbKUZ[Q@R'ĈQ^
UоW7qA﷭e]j[)Tj;K@$h8ܝ7޹sg:Zh(F	%ʘ+I*6IoM"aTђfڪn,]_gHX\ux^Cעf2w	3\MGBϏfT#-wcS.Sz<әTʲ0϶ӡj;&	4&Xɍ̣q
./csjFYƇ#yϹWQl!Oo"|.G=Vհp0xB5D&M'z\Q:
y"`ZvR54RN{
hj1xXM5ζh T\sbq2qvm.q
9Z3KN
np]y&1
oh$
nX шkv+I#_Э!_@MwXWgDj&m<`JRuiy\FgCF<jpFsk9[Sp/Gg qwf]bZ֔эH2F5͍Qη)yk7ߢ9L6	֝Ct8hrGJ'Fc5鉘,JlNS-%U	3:f5_P7o#'8
\a8=d2,fX°aCV0*V2bXfXPP˰a-tFŇx3jaNetlLlPww W81zBG\B	o< ދ{tlLTGWLcIȬN.SH	V=1,ޞ[:4)n/Lb
L;=o
G, AK ]󤉅^cr
)*OeL֌:n쎳{lTGCޅ{Y.R^2< }
a
6[QP
AxRA*X$^3)/D₊+}qX,QP#&lG2 :-BlqxYFD(N؁cB"B<#ī2v%X^؍<%B<+G[xQ2ڑс7dBFvn}]&f܎*]^^FeڑV5%K,&vB|DHDrL?_U=O~s"G	=OVe5j~Z}x,aoe5A|Sw+"%=,g ~Dj|
asOA}lInaCKc9|R
>]=0J*' ];V.R
.-p*rL'?w
ޣ^❫Yqfqazh?7W,*Y\h`HcU,>⫆!4TѳAt+8yZVc1DOn;. >{D?L6ƋPK[]8    PK    A             8   org/bouncycastle/its/bc/BcITSPublicVerificationKey.classW_W֍Զƣ@]AZ5fnlPa>m*m_~:o !c4{9̼wO G9cc96	(5m
ݾO,>T݈fa}UYa	1KbͺMݰ	 !l	5̈MO,gY6gbô=D,fZ6	?hѝl[(E憙:8gV(3m+.ۗXJopGCLbiIiiz!;e8nKCQDXXZDb.`qǦf *ӊ9̴JLڰSԸQt;PBN
d3Ӏ
=n+^(Z8ӔorX_ff[	2K^ei.X,G&/6 5k8fJxnF2s5U0SuUnǕ@o4ԐԔ6mz!OPT(tFhUg?xά,]+s &GuX}㚦i7(A5hGZyޝnXuLWdk)Vtyx/-κdN׭"UP'waSma078LјqjNYV$Cyh=ytc|`SoM=>Qĝ"XGKE,\="VQ#VD"VX-BFDkEc+;
ol˅_Ҵ1aؖn7nI=ps2$RM
6Y
WϨ5Oݖm}tДOwvmGZ-41S(_kdty>)]`u32;ﵕ:ELm7W`"o475"ݑyYwΩ&xBn_s󩞚3EW}ݜ=9VYg	`7;)5tgFp-xފQ2*8Yf˸.TFdl>w`?> c!1ɨ*c2CQ"d͉Llʐ! \AE8h!FdI#y*ЎD"Ή]Z8i|xEmxRv<ɫ83&a^H:]8&Oq4'JQ	x]n!~ s&'oIKEN	}8ɣ<F_>xd0f"*Mߟڡ]jXBN  8HJ̢?PV[79rPM؞ħ4bWyćP3Q2o8Y}%(~YĻ
ė$~ŏ?-Fpy+wn\E6,-]F`_O,^x8I H]t⣎Ө(>"ZNf1TKuI|ҙR<r]A)T\:8
O]Uesvgr2*K$4cT>^g#DV@u;D9];=ΕߨPPK/˔U    PK
      A                org/bouncycastle/its/jcajce/PK    A             +   org/bouncycastle/its/jcajce/ClassUtil.classUJ1ƿߺkŋK<xS
vRPDAzJcX⾕ԋ3of> `HG|:Dq&kY)Equ`PgFKz=wBiNS1fB8a{ڔtW5o8N	*gP;'Un^8M
25ԾzZ{qG$V
3"Q`s^
G~@6ƻ^Þgv^#_PK㧸   7  PK    A             (   org/bouncycastle/its/jcajce/ECUtil.classUkWWݷDAb+-
!U!H
"H_p	tfB}_/$\s&IЬ}}̿ B\{iRO-x^'+
4H7-
n	hlJ/HM??M4Gyw.'M&fNbc`f9r1h]GZ$
0Y~`gi]$Oxl+:	'}sT*SNͤ@+i:bְӮ]pܬe
,vsXx.8alMgW6I	ZåV&2#=/ͼg'5dH3>h謸&!({S6mʑ{9GǷи2ŵi-uw[CЁ>v
|}46LIxSPXq,u<\پKט-akET![c}oZU|9Ǳ@::<)xQ a{#_mRЮ༂C;
:\PpQAnq=

z)8tYwpQv;ة#In$=1s##nBuxj
(lOg5^xZmԯFf&EV,V&9"x_BZM_J
 4ePV(iP#dhcjxI
͸8	o`Lû1&4$44C
*44`ffU\}W̫e>U\ÚP>f0T:b*nLx&>eaE<`Xhx؄[H356˞tW4x+D?)hBVjСmw#nKl{DwdYȒDAt7%|9M+r!5]\_o"&܋/Q<' ˋ
d7K"F^,5&}HȎ&Jx'Zvqu)p%*0ջ_VKfv1D?0uPK4#  	  PK    A             >   org/bouncycastle/its/jcajce/JcaETSIDataDecryptor$Builder.classSmOP~6(EQ)>`LXBBtww3;kݒ+MXf$΁bsn<<=?}Ip0n
g%
^9fHX5=ɐi6]wՆ?ʘavoy"<\i;Qh7oi{|#+E7#?`x9*eHPV!$k,t9>%3?Cf0H4E{<AӐ֠k0ɐJ
(NG@PuUz֬Q8^}[MpѼ͖soA9Iȉ.GK	oW?iC3
'"e`Lᾁ$q$T@2id̒2:2xct`EGOu	vuS;~<<eegh_He'SECtZ \R}b~zey扛 ?e] wZyn܌­]Ǎa[]`:XEIV'fHPKD=It    PK    A             6   org/bouncycastle/its/jcajce/JcaETSIDataDecryptor.classU[SFeh'!q֖҆"4IS&	Pz[[[DHI5t@Sfuo@j	xwѹ|;O QK`0-F$3+tf='!^	1.fPi!H߱];K>3|,La,.vX7fnܔ'JvܗY>g!ۍ*V#+2xXp-ʫmAl6EIIX୶̃8ii`$bܚQxjFh{Cmqx9fH@X>xXtztC{}
57Dmq_855]e taa
yrh1[L?B6#4Nr5SFOWfdgH֍(łI[clow4&&U, [|^[Բ!n
XP02o>k(H)ಂw}
(@
*{ӷÖ*m	KINҙ^2Cvk>֊37~3X*yƩy$7_=,}oU!)~yW6tDL/.J=%||<?ݭy]O
}gV4|w4|LҠ",bhH"aqZ5BCw5\=
 !/Y1p_YTお	<T	Ű(UL+S(ta`n7.W]}Ksu9<SFwKbc
eO!n>"IQU4S4Ri"GUZ^hR>tizvK.V]B/߰J唬tk4q)9{[x=bX3w|O֩wL=}|+X%F%DDy5]KRυLEE0&5ZӳaS9O`a?PK^P    PK    A             7   org/bouncycastle/its/jcajce/JcaITSContentSigner$1.classM
0''U{CE@!@x(1	`̼?wfN3TÍA:&oԐru ݞ&p2?ZBHɇ8=t
UyxsL̞b],!r/PK~      PK    A             =   org/bouncycastle/its/jcajce/JcaITSContentSigner$Builder.classT]kA=4&1mֶ|`lZyl&qº@~,(N$
0{sνs8`#xӗvQ.sN|
K1\|W)%6g>ϕx)f͞X{Tٵxk=";.;NVث0<yw=c,_I|&ܷ)YEЍ)њ%(L8q{}IrV=q	I)a*Cp<d]T7dģx|ōNf3 /?T>_V	WɶOt6*p6"7BG#e\Mc	L/r]/7a;nŝִ)`LnrCDk6<a51ҢdG6D_[dKCN7~FK_wPFyJ'spw/FFb˝"(eV]6؃ز^TDW;PKԓ
    PK    A             5   org/bouncycastle/its/jcajce/JcaITSContentSigner.classW_`&YȥG`b,A0,ffBj^-=MRYB`UMO{n~jgfwY]
?5|}g}?gĿJ!P)"
{􈄢JzAp%7$a]d_]'tw3ngND4s12ݲdyx RULrklMh5zTsw2P5,SGu)ѣmjd/+!OڍEڱb8rT#L6?&a/Ru:ءٮ>4':S#ux-R<$Fw5hDCZX܍+IV!V4WɑKymdʭd[FdJ5#d>x3P6sʃR1Hԝ[,;CͨGq%[pOqUER}PݰahQh1t3@We".\Dh*xq2-2>rf/WG8ՌN2e)G7)C9`KZv44`MuRUBc#[|U
לL#%(EbZ#lQioˍ%'B[svY/rY㻚0Y½%,5*#گ*(Wep]LdfI.Zv(ۼ&gW}ɛ]Mi~P5nq3G~䤃[*]ԑ_j1fM,-^m[
֩
"[cw*:MEzW|?QFK-fH
m)UH=еAm&nքY3Mz R
zUZ<A	\$M $,"]`N]NzV6nIf={::nx>\t/Wmv!{-y1lɾɄk+vgo!Vu4e抺e'󷒺!ʀo[#٘$1ǵ6~mk
l΅2;ٖdXOm|0>cwض&q<WP, {r߼9h"țصsꮤ{_:{ǭ@ s[B"q+pegr &L6".6˨Ǆ
8.%2.aRR09Ȥe2zq-Q2ngR7heoq9elel2V6&og2.C26L)5xx7sS|0AÇ|x3 2O0y'|*; ^0y4>^T >9]t w(ώLd sL+(xɷP8'W| >@
& rLXC5.*_	19TA?{J#QQp){鍔\oz#7R!x䚊h,CǞ.c|/0x:4gfG	g֢Ƣ~gi>sq6=M9ƙzU4p[	c3x9*sM	dcIk-Bukxƒ|w!_0gPCpPUKHW	(bϡ?ؘ+x/kœL|Y"SؽT?%=G#iJ3Nbg\/eK*Z%ՌW)
DAň͛mV	;k֓Y?t$iWNkIL_Dc8mX7͞S4~P@yoO}fR@+)߉*HҲs0$q[&O{:eiR>B\r(8b_rϥMT>6ɮ>Q4<[_=R%¼7mQmE
oN%us #teFLPKa)J    PK    A             A   org/bouncycastle/its/jcajce/JcaITSContentVerifierProvider$1.classUWU2e:TjK*!t [SF$MD[<&08fօk7.C;M
!das޽w׻{ p_0eLvga8,?#A!~"%Z|~*7M酹9ůBnS]gpk[
ᓓJrr`Daj	~Hfݶ?͝Q|lf`C=&%U=iC-2QB_t놎2°80)5jՂHTGV]<C/m
gbm3a9,X<	`^"ly@3;vɐ
|Rh3ƻrT;*~w?
^R0\UpMrG ϐ*@lsϝsgICGjiz2sp׶u@Q}pߙ7ߙ[4ι<VtNԠBzMms滶J23/0n-r8Fm|TmkEëLbFkiHaV+!ACLuixq
#09
0Aﶆ3i+{,J$yIx*niU{|$IA>Vc"7^p,:eEnA+9
6}!~{PyF7fMBO=LS$I4@8qHot8?xC&i1iŔk϶QS6pz*Ɗ>ƺ?Cъ7(pҳh1Lr.wl/(	[d˿S
Ik֟z+w-fN}gg|~X'x$bm;^}?ic!QA+
PWRY4)$6Ս PK "S    PK    A             G   org/bouncycastle/its/jcajce/JcaITSContentVerifierProvider$Builder.classT]OA=C)kRK? ?vM|15&Z	@ }av;i];K᳿BMI(㝥-JŘM99w2)1mҗCډנ$B|q~~約avw.'l"+Ulm_	_mPJnlh
ٯtONhtZS7]qPJt3	160a0p@ƀi`6T^avػMJYսGCz]x26Y[+BE\ji0,ҼӓlĎ'eV/ng+)?l8ǽ@Y|9o_qYJc`:pUy2㦉)2âwMLiM'kAC0dW|_5GHSt2\4J'cF_fH[,[w	+.rcj^D0kwc qţq>rK{p{'s,dp9Y_PKK  1  PK    A             ?   org/bouncycastle/its/jcajce/JcaITSContentVerifierProvider.classW	\,|0V7*1(j I\`Ԗ0,vfV}iڴ5mjoZjâդm5Gۤgz}WofVA0os{z<G(cǳ0/vJ&i#[[HO^隽E@k74jv[h;nEFb۪֧)
~EYQT˪\[WGDB))Ar*Yq74\be7cSmKH6[hzfE8scB6]1zy4-e%U"M갫cQJHQPB3
t|D^>0Ke#~5i~ON`iYQ5tDaG:چ503{i6r\c,x\f3Pu;Ki4M	diMjtP*)
Ac-<lwR,T^jɄp[dO\SUp'qPVAja=FRWٲjXYv=tRd5M659&)I+htF/o,	h̩@(jx"sj6Csض^@[Ou}x)A3]=4a|=hy4
g2^.Ɔ<rMU^^BDl*fgU6覗8Co7A%i'w:SS-3YNkU+ɸ+OBjQG/'[&M'P'&d
Me	v˦<@UDq2_m4GaˡŶ2lͦ)ame_BtR{j6m
q[k{,ԍAGtyQl4XmU3gA9ÌMAa:z3l`h`İ:g0lap=C3CC+66ndapN]VݰY@dΏi*z5M?魞EN'R_RU3EOK3KY/M/>VEOnT6q٧}-zÕtKax`9}<`.M~zmqːJlfm;x묍s7yh/&'Y;51|7&_ɰ6fg k(~Lgi:xSr@l_9䯨.S@?ns5}oU&gfvp>=3'60sl}r3
mzS+*@' ēۺ[[He:Pn<_B/B	k"	xx!J(EZHDr.y*R	+2	/4B
R*ϽZbVBt^5xkF>&nvW~ n罷sqPE')!wIa	ĝ|"\|x/GxC\|I|DD7>)V-b/1]YGEȮǹǹHq1&"{E|
_q'_Q>/""0qJO1Dl1ppOc_&"|J'!Et]5[e4,ڲrp(`_>.PQrZB6hqZ-ՎE ÷BGPfVQq5oXm
_&gH)fRc=?45cJƱ`9N#HK{}V`^v5&}G:jډ[q8?'qfv8f\8ǛRKhj	|yŃ#OXJfM$i`j)>(xPPUVVVD*H*-	݃΂F˿{¦ ysxMb~ڢ[sҠe􃰅UqMTOeHN)xf4'|8y; #cZ~S;hYN>S:VL6&X8nN)$~ ,
M<t^Ƭjmy)5>mG'ƫx52"(r!G)o+X0@ٱ&ϙ#gM{F4#EZ"[Qr(a*C^з\@ɥ	*M$579!z6KtUJ}$!;@vޓS'x ,I '1PK?V:	    PK    A             B   org/bouncycastle/its/jcajce/JcaITSExplicitCertificateBuilder.classUMOQ=-CA
~2|%.DQ4b>g+[56qd]ܙ7=s/_,`MA{`jGAr+I^2+\N6sӹ۱M.|`%WBH[mͥw',`.z4L?63-M/an{x952<[+s[kd-AIQ3M)ό,y0ה:?ɉpk⌱ٕ#m>͒UT={&ܩPTѥBSѭ§GE/f"(6}C;ǄTDXyY\9cmaʋ)+F84w%+?+Ǩcf~u>o꤮+U%7w0YF_Ae5jɷwݿlm?cpT>~(M>x0Cd,5eC;&dEЇa!5`Jà~0PV?OIY۰iɰ0WO\}L讣x?NqV7.c16鶌D(]}C?bRpW+jH<	<
IR5\p:)	ǈ2"Jx:z_`<<V=PΈ'â@DB~ZZz] PKu    PK    A             I   org/bouncycastle/its/jcajce/JcaITSImplicitCertificateBuilderBuilder.classTmO@ۨ
 0U4$fT^̐@2+sk.o@e$~ ?#lY{{ ^)AX: ~}.d9wY(-@;LlEL[]sb$k6o43~qK	?rJXM[63t(<f^`	8e⌱^90-VϜs\I^=f"*,䁿f(H>C<Ԑ0ApMCV!G3*f4i^ŝ?Sn5jϯ?CfwGf;)+#KK1j6]MP :+_Ƕx7mHㆁ))4`v܉eq:fc+:
QTYZ|bVਫG>GÐXQ3&UVRWOY	|]<)B/sAT+joqҭIOI)UKQ2j̝`Q2xyXW(!PK>  u  PK    A             E   org/bouncycastle/its/jcajce/JcaITSPublicVerificationKey$Builder.classTkkA=4]ݤZU
"+hkB4	nٝ-䫿HA	X;a$
;wf9s/ QeȔ+e HA/"bpA඄Qq$/b'umom&/]=q%h3<'s镮J<%}㉯Hio7x8(<TId,To@%9&CucqLy-ɠYmOc%T~1ݮ_2x9O|)CubF9.'"vKO;9^: 7wA6&\laL+:\aV
7aaDucbJOib;6"Zy%Ұ_H΢,=- CP;kb(}IHs@zqׇw8.k)n6W(ut[l&_PKϕ  x  PK    A             =   org/bouncycastle/its/jcajce/JcaITSPublicVerificationKey.classW_-mHR[N+ص;cGƤvvYbiWYIG>v&Bm{7IH'ǛZۙ7;fޛFOlǿQ_kq{=$ZC<Sn"aYZ1j4;ζx[4&eaKhOpkVjWm~;<jiMJXc9dA%4DfFx^e+S67RimӟLuO`~ôt2iZ6HhZf6H7%L::$1nDOOFh{bn%$ӴwHh/
L]9v_ښ9~COWMi NH٪!hFTJ&scEu<txRDquB
U#? JhqS=V,]Z[
tDE"ŵ4d8Kh܊Or;)(E w4-\>y
Jqn:uiCԔA5et{ΡqBUFAб 6)('`A07_9	lwyVLhFv-bgwl
&v1	QS
]]L(Cv*WHWkr㨭%ZtHS+JZ!/&ׄC-7e؄j, [rs9ܹ+b[jۓIq5ўB^+AX[u֝Tu޿dRhaO>ԶVn3PqNleC8mg&׍BSfM&-ՑE.Qk(˰a#Caf N3`ɰa7CC773p+>^>6
,^t7	}]MLHӵցV-݈@95ܹz,D3t}ai'^Zl`#!	-
)
YzB	ZE*ueмBܰl]pEⅺp%^u/9.ȗ6/YvI*=;];-_>WBBTX+<er#nCW^\4OO1W,T
\gTT|U2-&
ajSBY=/{QmH7RM"i?߼sM.2
0FRUp(MK`R
Vi-PN3
Y>L*x>VЁ)h+(x&#F
W	j+k>qFNZ^7(X7*-

m
n .FD;8w
./TG8eܑ#_B<(c2K2<,qR2^O
ewS2^x).L6eD91<*c:>+c$+4(c2x 
|(;=}fJ0WM?ö>&E% Q(4?ÛO2з}
?i(fBMy
yPS[%y)^z$j	\lJG0d@J=i$Fj&!oe6_grd:'Ys2YHE2Y<-d14\38/2jA۶;E mQg wLlG迃&Dߧ*r-7j#͞)|}=)`eDϡ9?h ^&>eΡݵVpƊ9E7j3x2_tבƙf"~gz_]?4)|'o^fBepǦx
OʝM/^Y!p̙FA%DnֈrHiZC5JIxJ7NPK$  i  PK    A             8   org/bouncycastle/its/jcajce/JceETSIDataEncryptor$1.classA
0D'*=QEq6D(j.<3|`Pjz0d[qla|+wQAhIZ*:E-:ϰXq0c0KqAū0Lkk
Arrs	XZePK[k/$      PK    A             >   org/bouncycastle/its/jcajce/JceETSIDataEncryptor$Builder.classTOP.c2Ё"mJ@A 2ѸŸǻ:;Kw${oDD_MN7~,wi 6!g3D[%_0U[]On
!ܰS7T`f˳d()GN=bXwQu[6/maX7&o80^%sLݔ.6d5tKU*0%-y˖&'Wa#Q(xi鏉za'|!ݝwWØMø	
	3fA^7,^yB馞?3dW%;\",_&.F_R1Eht	LN2eyyGqL+8ʛJsxĠFwܚ`H;vlg,In~~͛e^3IZ$ H]Zty@2A6wt'пB"o\˟b5wp?d(L\%]UI:mR7Ӥ.Gϐ]:uA$ Kդ-,3d
HqPK'0    PK    A             6   org/bouncycastle/its/jcajce/JceETSIDataEncryptor.classT[SI:Lg ^QL&.+Q >50fR3%/[*uKCY{$xyssL}k 0d=]̼@<yN?ʳkmXP(bؾ*8%hU:kF(TxP4MHT@֔@iϵXR3@|"tkVqV\ԦⲲq`S5tCgE}6nNز*|P3ҭz+U+YJ9?m@9̏kz̅j5̷BPv_klue9a`-rVV.`.tI#_UqR)CYl#Zvr]Nmv$Y;0l 5fB8޹݁}k8᠆Ck8'
5ᄆG>٩o&}TBqk>H#]?YJ-<VJ_P<LoOfvźӥ-iFwI2; 9oob7R?wL{%&8/1Ї4t8nR8Ǻ~>]4ЏK2WzůrtA\1:Nwi२#o[}{JQr]G?>??TBi?.,>NP  N>=}\1)NĔt.(5L5L DiԿ5/%qL*uT%RBf}b3e:M\ϿPYǽ:>/BnS
L!!a:'@Iw"y/hs]pICwGs)2@_pH3:QbΣ(0PKaZN    PK    A             5   org/bouncycastle/its/jcajce/JceETSIKeyWrapper$1.classA
0_*=o ]T

!)Iz5COͼ!Z+QU!mB+|_:r8Cyiq́]fF@X`?Fy,DPKX      PK    A             ;   org/bouncycastle/its/jcajce/JceETSIKeyWrapper$Builder.classTnA([B-U7RXlUI/Dkj4eJKѤ
M| x J\'3gv왝_/'kH
C0ݤG
!ܴ27V;nltYmaJ3o[ܱ] 
\fxQQU+!'m<Sa}k)ѼH(O$칝cIZ.rf]aɮŽ#}*f<Ꮘ4
f4ڠW=S:p%<s4liQ
Rm)wwPbp)H`ty5.W5M'ڽNW(SA>\ DCB)S7t"cwtLᮎ2*(xLN'I44I,(/$AIj)n;p6<!GQ̫ͫ4GTnc{Kdi=503,x~Q:E o;`CNbDh#bǚ"|\(y\3	=
=EGi/JPyiHO#5PK]7m"  -  PK    A             3   org/bouncycastle/its/jcajce/JceETSIKeyWrapper.classWk{E~M;vZ[1MCTE ЖJ"X@e[qw~
B٤ii7}(Ù393:9y
j	B&%TF!!i!!ݑLzj[շ#d{"%D:ܚ>éִJ۪nf,%"gucj4+6]5EN=3,6(,!05;qVPW55kZJ1Gw^^ެj8twۍ!˦K.2M:7
4GZ&MUM(G,Ej6\Ӽzac@P¥#~5n≃ϸeJX2MR+LBN!pT-bmϚ>:t%sqU;Dgo5Ϸφ9聥%KSNЊl>bj','j.VPx5:cS=-$8=u69Oip];44K9k4~w@),IsВlRDN[xiEh[4>?sSIDdů%WBLȥr"YW7,\֕k,wUJ6Z\Px~n*U(MmKbJ_o z,}m[QQft>k¢M
Hkزå.גfYZ{F2Eh.Y҅A<2(Kk2,cXp-
"Q&fq-n`XͰF2IXu.^s)o
/4vMk"Y]Hk{oՓGl:lE9YFe[7#Xyyod$2GuW'$*\%]>bzRi}Ҕ|t~tM ҙ:OKimrBrG$~Wٙ*4UPϿ
BI<W
T}b*>g2.Ӗ
{xާ+.H=:,Oޟ
K-P܊,=
	{,F@AU
.G2Jb/
+
bHUV ]eQPC%UpLR^2
¸WA-lWYbzAq mx ^B9AA؄dl2i]xJetI=x^7d܎dl)dc2 ؅e2%A^UAޕqf<"35H܉CeYO7+4Mnwp>}j&-Z7:"*UF
N!R*@c}tGH8Gc?jnW@K$c~@ws5L`gc!/'T'<>8)!O&[
X
C\Tm
|PC@L
2'$㻶EUy|7z?*Oy
S{7V<E?<zEl?GN WW9NwO`S_s6/7EqxD()tvݵ+ҴaC-qz{hSslOz4t寄Ci#;vm?PK툉В    PK    A             C   org/bouncycastle/its/jcajce/JceITSPublicEncryptionKey$Builder.classTmkP=w]]N݋/թm
faE$[bRA?J|nHvU	<sޛ_pu\a|wbi#z<d(w}lcqܕc9A컉kG㖐u˭okŎ'&=)OO[)+#KY;k'>N؜H}A^s#.+4hh(hE57e(NCj6q7Lfշ#i_6NV>WGSo>x]˱)#k㲘NmpHurs8-P'OY509UΫJ%0\ӱe\ֱ+nm`l><;x
ia$H{Q/}5!G=lq<BQ
y\ʐ+ğDV3q
w(.n9Plo~[ 1TujKM?PK'  h  PK    A             ;   org/bouncycastle/its/jcajce/JceITSPublicEncryptionKey.classW.6ip* !X΁8AW
8`kKb28Gz'}4mJh"
3MJz?oǛe->=}y{s :/dn`H	4GyHBmhuC7BByUnkђ֎YnL31Ծ{&ALc[Bw،&afq=jekhlM .?O{T6-9΋|B?Qi	͍4mӟr>k0m:Jǉm2yC5qnpȏI
~3JDܴt{<wѻ{ԌLÑ5ԤD$.t
UCQZ<V4@!RV:o`j{t'y"-	M3j(PI;Jغ0M$x\Mt[Lv	hK(fJDkrl8OXmm[ӡH	lbXJ >Yd&mǸdƯ_v0ͦCԴ!5mcm	c	B+ǦfGɃC t;P7r%9)t+<m0^˚<{Wg)uAh	XYD	S
#t%aRt(:s[]S:q
[OHؽ>W"dĸpSs~A7CfJ_Md	BY
R>ALn9V=:M=4FΞMͬӂ7ʽc9;/*EU{(T˱Z%6L+/TfS{&QPsɔE
a%lӆykbC3v*2恢
AV[v2ne`Ͱ6a.`.}=zaa־g.JнOxgѹ澅-݈
QP;wGGƝ=X*/4{Sli%:2X8dIgxWHZ67+⾶x
׌4v"rE(]Bddx2O8'.;Ɐҳ-n7[jiF\5TabȳQf+}.WF2wl_Ik[z #K]u+PLzt\y~[Eg6^媏T~ͲYPr;WU>sϟu}U^]
`*
)ͨSS~!nFZ
6 'vPp#N*&U*	oTІ7)hě[FV6!ޮ`=ޡ	w)X
^w^1~C^Gx>셆G>&cd܏d̋eCqߔ1/m)7Bq_2-!ieL+2I|\	!*i!#c
1gd$5!c>[oH`"Fqz*QV$Õ6lUWSâ:S4ȵtlԪߩՄU`~l}xhc&ؒ/<sp/b14ƚ9||Fg	94I?o=l?8y$GysmMo9HBq1Cßΐꜛj].3$ـA0
nL~W V >sYגoh}W!ӞrQi49Z䊃,^"Na-xS"nfBx"OGc4DH	o._e0ur9u~X><dwGP<Y<sx<Irs %f/ñKpiO]Bz3?쁇A#,C F7@b?7N7
4PK<l$    PK
      A                org/bouncycastle/its/operator/PK    A             0   org/bouncycastle/its/operator/ECDSAEncoder.classVwW'Em]J\IbD\
mOfpxD}׮~~rZ_z/B@ޝ3o F;v*px"%<
*hNaU<IϞ5FuXVjXݻhQH#̸0̤dI\\)2\teWR%ˈ,sb2Lpvv0o'
P'bfnƦgD\dyPɞɲ-Y[.s6-n9=#sӌ>_4,ShJ7H*%z*`'sia҆*쉂ա)oʙ)ӳf/-=>":fEL)Vн4I$A
&]!JNyi^X¾1i(<Hk ZUPcNV}p砃=x)!\V&ɚ$k22֥e¡hj@vi!?<doZ
9Ym"ۮEuDVgOj}"J`"5k!'/h$+	McTN"Q*,:?G(gΚDTخb{Tܫ>;UxTtإb=*اb
.*QqPApO;\sY*OuyyhoT.o.1I۹f/%vl4K"_aw]ީyPS/J.C!9 H_΢;J:g(*UAOy} ܍b-x
M-ma"Mҳݢuf噫5a8İ
*:Цai؆#aXhȰa3Fyva\xTZLhQI
p1gq..O0F?[H297aq	9708	)2nbb.3d0<
A2\ex֍0t4-{ f#=D_
F3\9щ_9p<	Fjjۺx8[Duq:p㼁=~OGq-<^GԎ2K&|UgL(TW9X9Sn-?֡-iW1#d}_r޹?҄><Qv^I ?[#?<^Ha8+"O#7p-WMo~eY7I_$z;BU!V72Sq4ֱoQZǟ8PK7sU  
  PK    A             5   org/bouncycastle/its/operator/ETSIDataDecryptor.class%1@D#7`a,,!,YVPFЙbfy/ {	i+s&+?7k|A6l$l[yw|ZkrD#c,7ad7X/y>\/B/5JVИ`4W_PK      PK    A             5   org/bouncycastle/its/operator/ETSIDataEncryptor.class%1
@D盘V#V"h]uC
U,<7q|_o ;	iKBV,JcbH8Hȣ5BشӶg|7f4z=z:8r렫
+䘒 2\N~PK/'      PK    A             4   org/bouncycastle/its/operator/ITSContentSigner.classuPMO1
(ɓWbpZ!&$FIOejڒv_GgG^^M{3}{y3htwRdf&廀uH@rP@U#δ4)!3VQ9e	f4V35WK%3eOrбZN\nTP
-+r^ntFA=ޭӽ.͌?#`{2Nnzєye,8]+x:?_;'*F/&~M.48QU@{ [QbK~5h	APK$    PK    A             >   org/bouncycastle/its/operator/ITSContentVerifierProvider.classuNJAqcV7,BoIN3
k ?JYAc~x}pCkoH/sN>8yM,!xJ=upkg.6v2[Wč_˲$$۴"v؎uBQՇ:̉
NH;LNBWϞV-(]_48F̟/N.׃*tyoUz0{_s9Pe'PK   q  PK
      A                org/bouncycastle/mime/PK    A             +   org/bouncycastle/mime/BasicMimeParser.classVksU~6UZ!(@IZh!ZRIA&۲[/xC~djgOoBgMC	UƱ3}sss6Ï v^|(%	pg</I
[B4}6R!kCe&ʹLP2zg%Hک
ICif\+;$xƭՊ32E]Y}B+lGagYЋf$ѧZ$?#8h֧W\ѵ^F)EFA+RAkj׵aǎNgmXJY(ۧmD^Gq&Y9=)9JM{^[dIdy#GIV,6vuZFްlS[Y}z0S
ڄkަAnøMΕ;ݶI#Xx5ˤQx}z)o&vrl'Xmm<7v8?|iє$VXBVByXQ--3 s		 YE-[	T	=<,!|?I)ض!6ٮ͏Oo8%'ߪ&l
=«ֽ/NvL3-6ښZqGlkm2R^QDqHA7+X˰
xUA
lk
zpDA/<ða;+~ <:)P4N*1qJ& N{g`8pM~އxˇAapՇݘ!.3n}8ȣ\cq r$_Ext̵V8(NH؇N1G>̖#?.БDvCEE[HG*>T]/ÀtGNnjܒ@6)Bv!;zT)-N-nS
G>ZX4VircG F1FQTc0}(K̡#G5 /t/мF&z3$}ɥ]KЮ"=JxSҍ؛1❀T-X$*Nt;݃biҚU|=|>vX׿o\nǈݫx?e^/(BZ.$A.37^OeU.AowZ@:஢\V3nȃCusD1γ+7XT;QF:gq@ЍK"I.j^FUןոVZ 9M^7IdNgŨ/PrF#|>(8FXV^dz{PKG'I0  *  PK    A             6   org/bouncycastle/mime/BoundaryLimitedInputStream.classmRMOQ=v  N+ggh(0CmM;5tp`
1hH#7̹{9~So\]rq?gٖ3(6<Ū55mWwFCig,E.[㽡[E}in,9VѾKUg)F!f)e9y9o&3^
Йg*X"XEA M쭔3!PsQ!qCD~rgGU=i]2d8r!/#a0^xdD
b9ra]8ܗ0In!N^,fMWYs̻6&ƨ{~
:;U?ȍ7znu"MΞ1)KqR'!kHGo
}?:i91S;D|&-4z/H} Շsu$MҥBՏ01)-+#!) 3(?Q]5,DM6NM?vbYq+a*G:řg=:®wpesn&40G(ѽt/0`	v
IiFۈ6^	='gN[!/PKKxt  \  PK    A             1   org/bouncycastle/mime/CanonicalOutputStream.classRKOQn;ˣ Tj7Z@a$`BB6N˥38
,M]*./csX8{9;?~;0"Ds)1/(X,{i,kiX;.<}/|+dЂ)f6rfv69Cf^4Onָ3gUi06-
oa˝Yt]
t
bh<zfS)2yU^pԦŷ-Җ|*kN|&Om<5[et|ˣr};zˋtoԭ.%1Ǧ%^FF1ehehZ4CKrXa)sn.1ѳpq@UbzH__I*e*Cf*⸭
0]אPE"^}
9B*pOAtc{AtqeWϽ^73zt~HB&<B1qN	Li}_@`G?ЩUAPɏ$Jj23e`%tD%2et9[}c4/&f''O#^1hdjg1Q`<졅L.&^FN!3Bnz1O֒aA\VGhtֶQ)&EICeLXi0|gd픢#~.^[|}8G#")d*PK.t  9  PK    A             /   org/bouncycastle/mime/ConstantMimeContext.class]KAku(3&\;	/qde]vUt!QfKB9||)Ai:W:{"T0N`Rw]OHEp*yWڎg}x.{8r@&țd4.gΌ($*IL
]4kXAא`h(6Ygho;N<dY;V9k[[UHQ"jj7Vc$P"R(W}rF V(ψAUK1.T7_T*Z)]?1PzXPK=P    PK    A             &   org/bouncycastle/mime/Headers$KV.classJ@MƮ6A
iBt	*X>%ΪP=73o/ p`q괺ahOBLD܏*xTKH8x˲ʔ3%ndy:%ʁ~=TE>Y0oT<<ެ"5lpX`MpiqlPiA&Rwa.<3BvH);&o/51
Plw'x%RNPK ,    PK    A             #   org/bouncycastle/mime/Headers.classX	|U^4m= .-!k7iڄPLt۽:;KjAQ<Zl"[E
(jEkK+`{w{}{pދY^4x</xЋE^,5^lO >k%+cn5*!y:n<$3I2sz:vĺz:zb;6mcP{6=ګ)E;2D23(@*rYV۷v#?lVQZRJfGT	Du;LBцA%oTi44_rG]Icu+VuUXدktn$\oKȽAU'5Ẳch>7Ckm:EUI/R]~{%V-߭yRd&4|G:s֒BJOxg5Jd%cӓL4+TUI8$TЫK*RꠒjibceҦ~Fd֝9YLQ%M.-OٙRK҂Li2Op"mϒGg"0"'3{%SQͪ5l"0&T{+^MU9=ꐡ sgqZI
dh>Mf)J\`~%Ԗt2eN;BVX9eJ%UFanTܐZI!I
EO^K;K%Iu|μNQRti-A^ѻuCjT,PȤ
$O#kPO#8KE".*bKD\*2*m"։hqEZD.DtL䱻ƫThגD
d٤IL2vaBY'.4?C*q[d-2*1tg47izS՚)lJ!cM[iW6*!66D͝E^ͮQlѝCscFپX1.{v3mʶNC͓	go4jT;S-Wyhꔋl*4Ú]<9ٲ̚vf9rz"a#ΔHXư!p>KX!	0ba+# <̑p!8CxoЄKXЋ$\Z+q=;;yٻ$
1lǻY	kp
x{W2Mzf	g#V^>vv>'>pç>9~_#{PE?f0paaeln<G{9-2|Ao3|On|ӏ<pW=P]w3C_b`n8Bo}{6A/Q_LFSJ>ϟ$3^hr}!RFKICD)Apѯ*DcbLy|-UFߌv5>j0~.y'Xs8}M8}(-o}1?\ĉcV$<6<l-7a/Ui	%bS E(PC!pb8r}w{ 9뀷ȍxK<=x<j$(?<o@F9rju\kjw}+C|7?'r9"rt.gE<=?^à1y{#x,+ &F9D7<VOp8 !+DOdF^dr^;f^#7pEwr穞8L)l <	gpUKUwRÇ(ۢR(cl)@TE ! pwpR:z#1˞Q;sIt QgF"}T|5<qSX;3"bT./"DK",a-aۨiT=)nhI8\or,fYHOuP{-j2XaN;Ht[n09ͯHQ9\
"߆HеKx)܊q$QH4v=fB1Ķ]Ľm嚙L@"2i,X^R˻[՘cR&G¸F!KU/#LFK}Ng[::/L/.d*~BU6!}͇oa[=c!ϑh:yō
dzj.
zHD:	y݂.hpJ&TWC4>R<ZLW/D_#n|Xħ&{TgB.ZpKXnLAq6u8ӧQOTNbr5c%/,s!F]G`O>9b$447@yXfMh:+uD5/7xr|~ڌ;3bݨKF-'"
7ppxD徨tCĊ+aFL^	 PKvk;
    PK    A             &   org/bouncycastle/mime/LineReader.classmRnQ]CN:j|06F&Op$Sa?F?7uj+}YvΏ__;	D0g!jv+RUd`2:v߫΀!vl/ϰz_tb[0dN.
/Q*WmowCC1[v#%vS4yH^ۦ#dHH%p/t"{z+P$h
R
˵KgX1gRM"kVf4CBCEiPհe5̣0U"R\⪊\RۭIճRq_=q;NQ>9ЉEL4hx~MYpÊb*
}CJ53#CR멏H.Hcq}GSC]"S6(~4d_`3/s>VcA~$uďa(jPXQ PK     PK    A             '   org/bouncycastle/mime/MimeContext.class;o>.FĂJԊFĲD|}O׊Ԃ<FhNb^RVj2Pb~Q~R~i^rerbqIN~nfn/]GjbJjQڼҒ\kM\p1231 #F X4+ PKg*ræ      PK    A             +   org/bouncycastle/mime/MimeIOException.classuJ1u:3kH.(dtQPO0FLSJA\ >x$p.!:F3BBr_w+V/Fs¡
1K?rJ%z9_k\Z?KJi
quS9+ՀZp*mA:%?lCc#Nlh FDmBmh؉SքO=v~[;v7_ _}+hחCy*zW}PK   v  PK    A             0   org/bouncycastle/mime/MimeMultipartContext.class;o>FĒTԊFĲD|}O׊Ԃ<FhNb^RVj2Pb~Q~R~i^rerbqIN~nfn/[oiNIfAbQ	T1;;3;;+#A,fcdd`g`d bn H10  PKcN      PK    A             &   org/bouncycastle/mime/MimeParser.classN
0O[_Q T䞆&%Pb
z? Z]4NMsmdQ֬#a|%KwU
ִ,=	i7		Uoٲ߭τw!L`
¬OI)PK      PK    A             -   org/bouncycastle/mime/MimeParserContext.classE̱@s	i^@j/pnvIvg67WSx e$T|X!%̜Vrn+7ĝZxG|cSw昕b0љ,>,7ZZ̡ˉc#5 Ő0],嬱c	QB PK0|q      PK    A             .   org/bouncycastle/mime/MimeParserListener.classP;
1}u/^B4v[ X &DѫYx %FQ;qytG%
	GC'{SA֥Z1\
20OfWzQ
rEZx7ƒIRHPPPaXv_]OE5'ojss)ނۊޗAlPE<yc PK@     PK    A             .   org/bouncycastle/mime/MimeParserProvider.class
0t:=<Ev/^d톾x@? cҐpƒaD-x|5=J*]B*=t6{Jɓċ Z]g;2!!!IxUYE2Zb%֌wm3h
0CgS~*PK۷   L  PK    A             &   org/bouncycastle/mime/MimeWriter.classT[OQN),l\--uPQ@jK	thOBlO
|D!?JMfvng;H%0uoxm4x:M*IBKFHne˔IicPZ<-ĮtnHasi}=
K&VvS"/
ˤ.fFOlm(afNSKE#KjQꋶK1@!zQ]dū|tn%WPs<nSPK^o}*RdV9#'8tMムHRn=
z)W0`PaĚǬNxa801Qb$_3%F9zJ}>XfG:MQΪx,p|S͊lM8Xtcp+՝&% |")HM>[Ѕi
ѠEC'ԪB12ᚆ5:]~S1V,ǜ0Y:ȇػliգַ#idL.6:vuQ˂é$/=
n mz 5x`+>Uz3z`iϱz|
HkN#t#yJn`23iCk2V>b~`t-t<I/#ˈ{)X)"FL*^?PKy  %  PK
      A                org/bouncycastle/mime/encoding/PK    A             6   org/bouncycastle/mime/encoding/Base64InputStream.classmRMoW=o<_v2!$:@8xRE RRTJT)df
uf,{\ eQJYԛH-jHt EM2Ҝ{߽s߻"bHb!=[nGԪS?Zb(.]@^V#V{ 9.9ñ;=h핎5"?pmhhGkQӳw掵cg=5kny[-DZ#v5laxDkxkƶ_?0.]kh
FU0ƠuJfOMIn(NWxCP85qL:,&8Lr"a"_~49\p1
'f329z/e]hQ#"k7Y9uTUlRф*^aVo !C/]|ߐ8a1?cPÊLtUrRGWxdU"Wc~­(df5''|ttUJbԍdt\I&wtoҕ )0zm<#䷿@ 0))hPڏ_=fqZ1B,y>kY"b@QX-<$t-ġ"fazFyqe
xGܤeMh8K#'թtF%(L=F}.C<O{
ݽщGȄwd_`#bvOH&ÉD`yPPMz4F[ڝ9[`{h6%<D/aZ~3ɽ(w[p~BZQ[Zn˛|!j~Tb PKl    PK    A             7   org/bouncycastle/mime/encoding/Base64OutputStream.classSRP]4
h_JD-ZGP}

Ӧ*?8xG?/tԽO
b;g_Yrv@/F\
Ṫ]3MthHM^TAV2\X& /*	WOZ-mn{<e¨_RF
b<FuCD Z5滳JATز]6;t
'v05޼/~A}w-4 LzN)1iQ#fI&m={8,F5l`iتavl[c.ȭOOl7cr q>@':tm8hF2jDl@
fgqpRXױ: s?8A:,c8cpʓӚtǮ;7N>#z MRu:IoAl{'5GJLFd~(%Ms{89)[y>N̎	M}b42TIcƱ'ߡVjv?[}dLY9ɺ J$\$%EݒVmҾ"M0͌ZW32pVrQ{W!V0j(\CRg&DX9_ߤ%qV٭r7@H~]ʕfx mv^YP2?dMG౤o/CWqap-
|
꬞EՂUx5uv3uRvge+(]}\dځO?oџPKv<    PK    A             ?   org/bouncycastle/mime/encoding/QuotedPrintableInputStream.class_OPƟuVY6:9(ʿ"J@,B4P2];"pǅ_[cƄ@^yÇ0~
"-cÄKy'=+1\
A!B?8ef*8iX3d~*7n}gbfv|kk^mGZ[ÍbQ[|6M{C-v=Z0<o+zζ; =GةNGuJx)ZgX/7ZڰäUZwS/`~3öΪgk{=ԬB:kzA3j̹	\HVn+USO֭+HX6,G[5Mym""""b".0(rk\c1iX^S0H@Aݡ+ڑ@i=͜UWҲ<s4^]>z!.}*HuE<!| }%#(woV;)1?#~#^p´1z'KJSU5)t<rKMShk&k=)vUyt<6ZkWtrf1Y]~ V r	T{Ctz9`l7!>lJ7"uePYRPXg+/PK2'/    PK
      A                org/bouncycastle/mime/smime/PK    A             8   org/bouncycastle/mime/smime/SMIMEEnvelopedWriter$1.class1
0Fh5U{xС888OmIIb9x %=<ǌ! Ǫ#657JImO}*2@^>6c{Yo9ǈcַ̰̍))\lͰ(!w{
S$1N0N`FPK&L      PK    A             >   org/bouncycastle/mime/smime/SMIMEEnvelopedWriter$Builder.classV[WU ҡ@jXC L,DP/=9df̤.|m]/>X 
(d=>s~`Aq5 ڃz7Ih.GpZ+Jh.:SqӋsWs3,(pm5*ܮLw;St,HPj]KU3K)8H.+Qz=aj59dbF}ÉfDl?a~ܴq;̳	)fECc"?x(dd%>͐=YMFuܣf-qyLByӶJ?4MkQٳʛT4g.Д/E]
R.4S,WřWBamyX@ȥ*{FQMaCʦ1+rU+j*]8(s$@3~jV4f{&}m4'@)UB 
eB^EY{/;F0Ebr[5mx|G	xЬڬb:mU$2ޑ񮌈2ze'O2H4mcm#D"#㮦sfn,zj+,_<#))fǡuJ!-X|}zCqRhfRCdl	Oz\t~^
eB眠Ě|#'9,	S>Zի^J>_
gsVL*@X 0m|@A(B
bH*ǴkQp+ BeX3A$>!!H, _
 Q0c.5֘t%5Ud+nQCSvHԚz)}5[TCnQ=âI$Q*hxT+MHR`!G=l2A˯{XL<q+ry=#A`I_OLhx^4)]N!Eyob?ms'5~Ny\Ӊ^UWEtkz0/VƧU4^b4H՝AOItG='7*aRIz"~Pspc6nl9,ec*j"YBDOy!hA'c<PKу    PK    A             J   org/bouncycastle/mime/smime/SMIMEEnvelopedWriter$ContentOutputStream.classOO@&ni  M(
4$V`TicVYGā#>TŌK+!|}ov7 V;Z>[u&PRC|)AAJ`LK/=3PcZ`opb30#`$CZ}'0"7
GK3~Uɷ$4*[6J~66fm/y~Z+ٽ#3pXJ.l9X,VXb9β̲²ԍOr*Z4U4zHaP(rl,B`EJڝk4Ѹk'yܾB3dEe,nMnLv>y)^52+{Q{rPKNݨ    PK    A             6   org/bouncycastle/mime/smime/SMIMEEnvelopedWriter.classVmwE~6oKETkXX0jj!ئҨLɦKw9~//ӼsQ AX+9{gܗw އ^|z	x莄i%(L׹LEOba  a\LnfISYm\aEa"p&_)oqCܹM1x\aEM󭻄.W2-+^j`Vde-Deװha]J_3YRb匕2LNdr(qH".DrVԫ:s"%'H'^5eczʀ̵l	Ϸ#͢LwOhIr
'y	P$^Rw85^I'%huJ5(^1yokhZ3}iHnhDD[۵U߰mVô+xCF@ưqgeL8'Mo8/md\1)㒄T^Hɸz>%v.DWCjl0DxόOe溻GǸAךXڌK|A>ٜW ^G< LH!`ZuH%e[Y[<y4ʍOHX*S`Kd֫=wWHލ@Qb*T|+**ѧK*1*^5S.&>V1!D\,@ROUᦘ5n*DJ
"U /
B `
B{B|vSpW{N.EҗQ1zPw-:5Qd#]?Òq>Q@5Mu$݋2$5jGgÇ(?E (jdy	h3{е='5|DG"%՞"G0
Hp8!`zl 9rH(Ќs3>3r7X
Eʸ& T
A׫J=iX$QQWH1һ=bPKO6x  
  PK    A             5   org/bouncycastle/mime/smime/SMIMESignedWriter$1.class1
0Fh5U{W	7C)iIPb{^b7)JځȰs^]mwdĨG릮R:g{12KU5ŋVF@`?&fy,D PK17f      PK    A             ;   org/bouncycastle/mime/smime/SMIMESignedWriter$Builder.classW{uZ^-TZۥHI0`cZئEbh
ki-/Vv8=҃]҃e;@HzGzWz7mЙJBH0>v̼ys]=~E w%,T$&a/$4JIhFv	
8WG,e=XYN"ΆS."MiS,隹Y{MTE7nT#2֯jF&mhyݙUtcD͆t\l<
E-
Q-0;wvo+ӢJ8p̒NBhʶ5k(x%PCcM9U5
$ZlSmWr*G[U"3Mɨ:KDSXXJi)AWRjWTSgELKtF⊩hPLS(%
#ZR˙V᜖$7	-五jO\5P|մإ$sGc%-
h%c䒔2-xT5Yr*Mu|BR	K;Hg5s4EePv{J{ qT1bjf!ubo>2V٬'k%I)hGKD(O	f/؆ˑG(Ee%̙Z2):1j%Cu kKKaQzNizgVU-HIimH咦Qfذ!MX:4
YG1)&jn%5MLa׭.&Hplp@tjOۍtG
NQu;=l{8wA~,W	X7fYP5emffZT}ɒ.t!yQ#GD>[D)bm"""^&."DBQ;E-bԛneF]ڵΦgl}WϞSbrT^._k˛{۵mYO%ʆ2%,˴ibIx';:ؖBihÚ
SPV`|n*oPA?2iJd-ޞ3ѹ2fRq+uATJ~B<ZddY71S[oyyAF(|OMyˆ7T̛{+^fU׎jͺo&im4 22"+v:v&2622)c/2ab1S>qPK^ΰ
dtఌWaтketu2z/c c(oěeaEF'*xx !~:>^>!3|c8 '<؇Oy'00ezc= A
<C:2LzjAf8^<Xpagkcx>+,t>9\Wq7WG_cK;ᤊFriQՉZƅgrɭ'5*hM}c/B2PkÒV)┥r-i Ajh
?DD`1=G	6s3m3Ȍgq)2?9;pkƻ[BO>Cz'[_$${o
AaO]ya%D ;0hwq1,oϹ4&r)	<rpi\pw:ďkZ+2qޱķ.[\dm9{iM@oLN%vZi<ɋL٢fN\{bP%|VC*H/\AT]E-D(h|EįP;Vxfhef*٫UtXxc!Pwy*~_f8x,^ X/4|PRV/A#Oyu-xlwϽ9(|m*XU,(f8cQ]%=V"W (~k/Ⓜ-z~Ǣo][.%g}g
3W3xn%E@co᝶zz4-_4y^OB/+E\+-YTˢ,!ÅqQ+{\K?PKs   O  PK    A             G   org/bouncycastle/mime/smime/SMIMESignedWriter$ContentOutputStream.classT]sV=rQd`pCNR؄4.	CxQ.[H-2]<?]IfgswYXYYdXkH
aYJ姴(ʔuFI[^q=WiXQGr}o(~s%=іSQmR4)n
N>	=9-wD$z:$%bNdE'T'bRC8;$cG8T9-?
߅vPɍ0;*mJ0>o<|Ȁk<&¥]9TK|#;l47rU2԰q.t!K(e6ɍH9&XySjߍ1?n 5㊎:k:k~U5\J
m[ɩJGZ+Y/3Wl"
/ϛ%Yg}J>T~jJ&.lbMMTL\Ĉ	6E&(Mc&17fcg-;p4cf{Ʋo=Mqߥ9O3+2'zKDXS}wH
Pn"x"vZn9CՀ,<kX R9abe_بuZXLV&3]?[Ndd4n]?ap=<8:4o\|biј|f}4)gjoO>C`%zv	y?|ϜӉw0epdѡQJ*nob1wJO34q
> PKk)    PK    A             3   org/bouncycastle/mime/smime/SMIMESignedWriter.classW	WUm`tQJm!!Tj5lRC2dB3[}Zwn((zx$$}{]f?G ]*a5%x%,a;$H'N	%$%l/FPQ#{]
Tvw(m&F$jcH=V_:ojn[W k7ӡ6lioPO$+i[/*[seҞ؇F[[fw007W3#p_ތz>6Ee-S줙'p*cĴ+)
k =mDS1Bfi]mF42.`Q,յ6IaDtԑi9(^׾|})eV.+Μz^m拧|H5qL,Y>ǬxlF:Wy-X/J$(k%^
kcjfe\NjcPiCy2FN(}1̮JG|xT3&M_0	$FR5J>KDuiuG7f=l焾z`*z.N׵
Y鯡zo[؎L<cK˕x3QbѷΡq1q	T$hpqb_A;l3;HتU=\_IJޞ8w]"DE4h*M-":DlqM"nqNA]VLkv!QdLš9APA4-j}1JyIPrm@VoҸP"u+_*eNz.cw\Ru/7"`)%
}drV|N6É:3ӭtԿuwZ`SĎBICH{y+LJJ<Д?2Ң/Kxum'7Nn,ddGZ(a5UUPp553dgXp]+a+LA˙%F)X0`2
W0.<pIfxYbxGcxxIv,cޒqD=xᰌ{LdxWo{2xCF- ޡ	PLtiw|Y3Lhn\IE;<D "DdQ#)(?&4=S蹀/'q~ܞ)LMഛEIw]NJex<x wrCN\9Ta
5R8c	lRJn4'Uh
z&14N7<y!7rH	Ղ?N]AQv{uV+F,Qȱ[gKqYvYH4vg6#UߗcU៨??.rqUqj?P+ZS<NL<y=l៨W8ZW8133MvlAj
FuClTPKK    PK    A             9   org/bouncycastle/mime/smime/SMimeMultipartContext$1.classTNAe+V腲&b/Hb#~IY6|#CϮZ	ɜ9{9sf
^2'So:pZK.3MS~"1hVW\G7=wje!_Yˍ@Yd]eܰ\z`\mT=aRU7pCFժ
c;cܾ`uXs}H6~DKi1U㞬Oba@Zvؖ-!
NC]]rעSv"2t,)
h

+Q+&[odydj	j0\8MT|
 +u<}C1jUE&|᝗U߳o;Tʰ{	\6_
Ї
LC?404(*:0&bF2$)Q1AL!L$b2+nY0:S)
iK8T}_Яˈ*U!+Y`"m[`.t=JV;G=c̤3ǘMbyd}У8t0NBёOG6{	zsY]%z3n_ɞ)M;Ë[Sb:Hp2,ELJ~PKxЖ    PK    A             7   org/bouncycastle/mime/smime/SMimeMultipartContext.classVSGmp\Th- /J-/wiPtүt3?ѿ3j𒋖eyߞ8G}=3W"tgu3DOets[plO^>/
{e;fvV
e蹖q
Ym)ƒ%4'/
q3+\/[FђWt{Ayk)%O[3
BDE޾'iJϐc8W) vK %#J37E/_(B14+XI)f:Zz!t:w-Kdukڣx76ohL-*泊iiz2nQ/?RNTUMw>mq6feʥ)&t gvGO(Z^}ʮOmvls/(V+
c:hpRpM3w
`VG\1*ORN86$Qec6#V[csIc[spИhP8sqq !v#G98.GqG'G?#':3AwD뢭](N-_͕p6ׄtD+ݷ!O
~xG-ѹ;`+`n)4Yڦ^zR|wn2\UjLP,7??Ը|^s9ׂit 4Y+J;Dd<oXAX@.|"EGD>ԩ؋WуRH.HdlBE3&U)ݸ%oFE4`J\W+jV >I䦂aPRHT0
]i)8!IVFagquӔ3/Mkm|c's:$N!DAPm	(M"zӏLv{ۿid4%8TYE?&9	?=MLA_!alVD]X<_%O`h8?uHf|SDQO㽮-'&5̶Va|fv
-l_D"ϞH]x(!"hc]3Qrmaw0<cq'6Q񯶺	'.qo811R>zG/>|qpB.)CKѨat6y`R_4jY{dC۴ш递-Ch-U_PK?څ     PK    A             4   org/bouncycastle/mime/smime/SMimeParserContext.classRAKAU7mK!n^K:F}u&fGUhք*sޛ{o`?>pH`4}eCuEp!D-b\=H!7~,Vmy*!RLCIz?ZYP)u#~0b"82pb½g*b83NCʘ'<[͌[0Ml؝=%Βxd2Y]-+5uy#Ʋ&N;;ص~ym3u%mͱ(v"4VsCǂds:C!Ƞ &cyCe΢]mPKIE    PK    A             5   org/bouncycastle/mime/smime/SMimeParserListener.classWsFؖ#!p5qbDI葫$p@GD$CMKzz;-8~OaoeGl2Xɿ*M|/yQEXm^tp(o8!vwsU-f*-ýF<-[S$#mRV,Cւ1	Zɐ*zhjPUCAk?F',56ȡ:{vT;|mE9ԦzcT=\vjJ
ms~Td[`	R)8EE?htPlg1Qd,ancM'DluTUL:=mSў
ic_/^&IuD\PJdp8T9HܧX&~9
L5lG5hHO	Qbbel5*#1YR
gk"DYhK\+&aGӔl:`c`sDdaLQ{LB̿LV5[(E7#s#ey]^˖,Ml^]*<`ĒelZ]W9btl#z(!,[>{yan"(zk
39/KW(9S-L#/mJ7ՙRt/䑝SB&S8wH	%(UCmFuce~Uf05്dhcz<6c3-<c;<v]oy.t
bkeO"SP][JbUJ-[٣rZ%fSRzeJ>]yL.@srLё
EUjkUXmނfy[)\)~R)en|[|(iBH
$cq\'deHs1u8ϙI@|ܝuCҝ;oBj3?4+rr2l8 "JET2h b%ʘ쐈6XD,Ã":xaC#" (NDC
"@X
b¸{.F) ਀`	؉tЃv.<ٰO
g~cp=x3ee`3xD@ /
؏S^h/3xk22DFWL!ި.8N H\ud1u3Z)?ѨZZo
o^"6QBmSS_E/CMS2N|p:.]H`>ظDXn5u7`V'szn/+Jx:}7d{--*7Y=s<ZY[p8z+-g9\%8xM|N`P=-_cS'|$:ڕ՚SxI&!7XJ 0.:\2GNk
.:Q$UQƣ됖yy4"V%ZB;*<Sxl6vO9lq}P=di>_PKg    PK    A             5   org/bouncycastle/mime/smime/SMimeParserProvider.classO@ƟcHV7_PEt_1I"$<R-	#i:.ϽOv?~~`
OJn=PS^O6O#QR\&ې
Bg¾HtG~qXaBmnmbC%*nefT|Hxp uZ>[%bi՝:3x	+w:f-Xp,\evvtLYֺ#=P&V՘	k0OA^Y,y6rRgtGg9>,ׂSdYK`L9(Y͛rהY)K6ʸoeS٨⡍x0Qk|~,RujR56tƉ%ڧT@ˍ4xhGqFJNQ=EuqD#NPo~᫟3E42|w	7>Ex+݋<~PK    PK    A             .   org/bouncycastle/mime/smime/SMimeUtils$1.classRMo@}1uR~Ri$7VdP$ĥgk(D%D%#?
1UiG3~;w?};Cٻ^oFB
a*JҜ3Fߓz$j?H](
5*T_n<'aGJa<I'!7[i!ճ"IBұi6h[)
sp(Mw))	PcBQ>fBqU+-f,8O'ò7
/nrA
`Ѣ),Mc6pm\u
l4bl1cf&4fzRl;	ӲWa^!cסEд5P"c82
L󻨐;?0WX;uIݏn{Y
"nn~JmꑩsbnGgkFE~vu!FPKQ    PK    A             ,   org/bouncycastle/mime/smime/SMimeUtils.classT	wƒ=cyB
 KVLP!P2Pg3W3
5}u4iK8N4mҦ?)Id[s}sgRЫ NIiC
ܯ#

FV_'%@CnvJ6'Pvp(M!}q	Wx]d>J藰axrx&LOd+%nopX&V%"hWv414{<tIh%9V4$էb#7hhq-&,tN1cϼA*မ7\o85P_+j@zE>`[+T{h(bR$s(Ǵ*4r){e=cAנmE}ܴU[5v	Xʲf%R1㙎ME
O3toBv~%Xɴr\MBSL+t(a]jNe]]喺0m.^
YȣE6mEl;MQKX>Pr<6++ےv؄Sz\;Kd2rT's3\gX2MXyhzST=l
fӴcKwlܱδRq|,l	%kW1J*&DR<&bT0
Vܳ&W-M~s(&5JZi9owL]3C삓$ҥɈ蓱O~2ȸ[A8$㰌#2!㨌w8.ㄌ2R27+wMtaJ^>$M]Pze0[I[C=鵣txR%oRMB}6^5qd*
Wn*pJ\LZ_J)CEݡ5ѳUmjMy'?${ul^z͂Tlƌv1nCQ`Vn	t؄*b؃@ISqYvA\d^w}*UC*ޅUƇU<8cj3|_b2W5O2|3e\ <(~o2|/@90}'YVOR ;0o1|y<ف)<#vē'=jʶ1w=km+Iՙ4}sM*n6Rjm{t*;Ub"/utSd:-]O`GXs
as9rO;*|-"	ZD'	%Q,yMRgt?R=
52&AAA|OQZe,KsNG^Ŏe<:}l/7,e~g_ԓ(!&cjz/ݳPUjaɢK8}Ӹpz89m:/fW窗sII+)/c9J+0NS2~//>%`k?l\㗃J5j*jt!uSj`Gr44Wxf87VJ%.a	06ިhC^oXs[#x+ozFb7k׻R2V~轆NDd7PKkt  
  PK
      A                org/bouncycastle/mozilla/PK    A             :   org/bouncycastle/mozilla/SignedPublicKeyAndChallenge.classWWV DEk+jasč
NeӡTL"C2f2(}{mŶjzNzN2d޻˻;QRI@~fGj(kLg$vNM׬]yJHU]1bj!J5MìvNR=NXWuՔ-aj	%↩Y#ceǈHztt -"4QOYVZ)<m%V2U՗1x;ܿlc>SlMZV>9RNP顓24S DԆh4
	<.5#<IK3tY3d	Y})n4V+*i"ǹO'+aoѴ2Eçc].`ik1*|eǗꀝ`󩤪l۴í2%i]P䔕PrJoE{5/L#1UaM5
+m˂kKh ٍeP^
"&l!1/jfI=3ay.ǩyc+֞L;ǫWffH--vLJfJJT=E2xژfiǡ|Li1j4w]V3aXp7:B5u
63laʰa;Cۮj\-ʳ[nCL.BrIYg6GlYǍ%á,@/?ҍ*兗_BDo:vlSr

|y6:6مrڞ׹SVuu8rg`]uxn7fVX7l?ҿ'	>'}[*&/DNPB9'(N0	8"a	%G1	+8yJX$		e%TbHB3JK(ňe$,I	K1IBBΉQHSюGDteN^㜜1N^
EKAL"8y8yQD/qNNU}xR!<'/r,'/"Ӝ)E?^:>gISU襢oW{{AԒn9+V=0@<ODs
<_hU<Nںk*^) X̅-sabaxF+8{ݦ4 .wo2_]%UsBVӝ:OMuȷq9qI@+ְDe73mpQxH}h%;Iax|I'l\ڋM
Bw_t]񽍏\TLQ?쮭SO=x納/6@IYmn]%V0_|Pp 09O
zRω/q/àZzm|Es#qFF)e75X?Ozn 2H=?m\XUE梪\vRtw
7i=ꡩsRsOIfF	WPK    PK
      A                 org/bouncycastle/mozilla/jcajce/PK    A             D   org/bouncycastle/mozilla/jcajce/JcaSignedPublicKeyAndChallenge.classVWGZPk$ K kKvQdwHtH*{Ns<C4[NNf}s3wv߾/ [K
[KRcv5qp(1᚞eXwl3+v \aTD<{
TW$QX䌄&	\#܂PpLF%#QEᔄ݂\cumY
@Oܱ-b0#p[MYϨfZ5un޾m	?W.	SzsjQmJAzޫˁ#t^vSM=!m	7mLg8\\wa\aEp';s_S&z<.;1)J`;=+NjUS<hDWJ+=06JHu%mu+gQ]5\),viN3a8pa<#2\b2_0g9W0ΎBml>]3>oRClĿGAҚd#­HB>#B%LGj8:ӝԩePLY/KÕָڨSpd7;u6E.
f5|ѣAEirvKh8Nb^wSX044,aEUU@EiIlǺ	dTrxbULIF
k*%cY2XwﹲFu^yG`Пrqf+p!9^<d~ǣ
u._&t=H|>?aQ!$t3o<TXj4DZa$OϻYV2ƫxQuz̒э*WF&xWsg]/,Ki> H*|\WoPK~8T  	  PK
      A                org/bouncycastle/openssl/PK    A             4   org/bouncycastle/openssl/CertificateTrustBlock.classV[WW$H5$H`i	^im퐌a0`2Q@ /}]hY˾?ҵXZ$AZ>{o39 G6WKC`wxp]㱼G5 ?x6]#NIhJJjȪQUD3#cjԤ494F,N̤_HURA#긪N,
4-0')fI4)oBl0)mj	oH-ThH%5y[`9Veh캕W1q֣Q%e&T۽'B~=jĔRj2#bYnZRU4x\-Qټ>BTRv
;?w]Lqu#\aĶU(cBS)*d.ٗ0WEgOi7)*(fF2szS"hCD'D<))OxFnM"hW>j|{fS(#4<jslw2׻V[B×sVK7l/Z[P]=Mk\q-5(VU6죌Kby
8oݭfwmjU'W߳
xD|MaߪF)mߙ(/tkh7}sGiMwM1	zLveH8&Cq+rɨMF
Z؉2vpOVI˨)^/`P3,p#Z9+NExMB^Ўk>$$<		bU)	G0]B7%@ȕ""]g\aV,,gobWL%z%Lˋ䫍^61c1}H(^8MhV;i2 mӺ!]Ӹ˝M6ݭ|vnKQ{d9wD4^ݞ;x/:wp/.{OtLaN8r?
/:PK{m
l?pPZӋ?s~ "`qT"_.PD.jp}:|z8ݴ>3'>KKUkCoq9j;<88gdFS,Iw]|C^uW\Y>-]:D\2gLt
rFrz)칋[! ZUY5"T^)<@ؑ!قc|i`Q\3Q̡;bei8k>DXr,$PPKS
>  
  PK    A             2   org/bouncycastle/openssl/EncryptionException.classuJ@5MҟZAv!4J7%;A~:1fJ2UVCv1̙}g3_ '.K+;#S,\IQRft]ieZI*';.ŃHK2b^1V0;ɖV5EC3B*s;lq8_
5\BgL=;'Wt%wO^}vPKf_     PK    A             /   org/bouncycastle/openssl/MiscPEMGenerator.classW|6~!0h5D*iHI6|4BLnn'&`u{O{}s+=s=/O) +Ź
)8S
QQ@y
W(X`jK(UP^AJzK-تhkvNle3
(k#X"f\Jk͡Pg+9'	yFN.0DZj?Xo7Z|d4h
6{::[Xq?,0H/x8vlW'XGGWK[gd>4ԯJW
	[QZl(pl'Khu*")]3oS=bhZm
z"=}wD7bDĉN
=Kk8Pz􄞢(p=Idm~6\&PNz}w8@\m"mhnj֣ftCOѺx
q˲_->@io!;N-6OGH=1EEz6ycIo`4d"ƵDw4㨠"'S-xTpUf4	$is#6RP[,M猱&aKF;l;OzɁDd(҉ospcCnBjOeL/c$F"Z_̈
.Rz\L/%ɷae咱]M=Z^\g$ZDe*\џtcl%3(P)侀w@BBMƻmM}"SMA=`>bH>B{^4|ԨFJ 5Ԑ'qo{,_f⩩2*Kr5u{rD(568_Zb	SȕcT/:9{⮘^墼CztrTMQʕ4կyCB`_Kk"pjw@Z*헪z*HN-eF^OKsaHL$w%<2~-֣zODK,1<L_`2	D@r
m%6ItJ%B][$JlK\!]oxĕWIh.qDDDLbNmSq1ݿOL/$9z{Uޭmf,YXO9YtL1¤ǑgRGVg%FJ|4
3yQfT(k=&ȇbZӽ6dRLw\RDxd*CANF*%K^Gџ=fǋmnMs*axVqzC#VWQJcKaq**.bhT
0|X%WE3C+
UтcX3w:"OUIk),
,>pT 1+<d8a;0bǻqa; ÐexQvE'sކ:p-p`Og÷~
71n2>cމ0wdxg[ne nދ:pO1;3k,uRގ=x_.]	cK?
R4v?Ң HނE @Ժ8r-e6 4:%Tdڇlx? cK'
K@Q%BA'pxJ8|w
wUL6.K;qe8EL5#ʈۙQA!"
Ek-Q&za,t9ۙ'[ 73<\
"'}ޞRzB(M	g&#>lma	LXp/f&%ǻs-6	ʊ9Ma7}5WZ9Mu8PC6C?#DjDd)d6"`$r5,c`F%<"227DP5/+=V 9)8!\|0.%CdŜ[$dnIqf	8׆)X2c}gU*Ɋ'%ؚHhoC%j֬(N/Hp-ݶXx47ϊG9p#XIu KP`1g$vK(W`7qu^DBC6-tKP4/ ?k{UACmU\sZ{̷vrUnCͥG;\_ƼWQa@qk/'sM
٬s(yHSj3ڬ|A:T s~!=:p#q7`}7K~<Gpsy(lq6VPlse(8WNBB\M8/";:̈́eB#,wq	+BYmPKa	  $  PK    A             +   org/bouncycastle/openssl/PEMDecryptor.class;o>.Fhh'h'FʂFĲDļt}dj~Q~R~i^rerbqIN~~Aj^qq~Dc~uɩ%y,\pb6@9<   PKO      PK    A             3   org/bouncycastle/openssl/PEMDecryptorProvider.classN
0h'?Cɠ[Gu1$k~% 8xwqy"%\+VTZXe.Z;Jf:kYy8C-보_yCoUn$"&ȖwZl!#H?.!H0x$ASPKfk:      PK    A             2   org/bouncycastle/openssl/PEMEncryptedKeyPair.classTmOA~-^i"B}*HҢHK`Hq]zw&$e`dgfwyvvv~4
^x&7NG74]\L1M&TE
;Z\yږښ
[mXAUfMk׊f1J|oR^W>q1~r	7-Cժ{4	,eN,=$3-q>	iv%B|djjag҆mQ}R┯Il^e4rr՚T
Oҙj,f9
It+ZƁl</]T4Zd+*VU0\g4ōq]04^hOB	nIp[Q	wb:ΘЃH;p"FWrmZ&%F
j;!T[|GAћΠ]3gڤ%>)7d	GD=Det-7q_GB2z$	1%Ĵ}bƇxxCb·R>1^xYϲQ[ڳa+^^1+;N|4 "M"qG55eNMO#+̀	::棉:#:@|{CO	W,5><!*LIM>Ƅ\ȓ'@cnbͅ|G3o `X-cd'x[^T1GBP[0 j)PK0X    PK    A             +   org/bouncycastle/openssl/PEMEncryptor.class
0OO+ɂ(.N5RFWs|(1*]s{`'۔ [PT NJMnن_dl+wɡ6Qj[
+dbͿܙZQI0nmM䘠֡sh5A8 ozh8u[߱<PKj,o      PK    A             +   org/bouncycastle/openssl/PEMException.classuJ@ϴiӦQCڅDa6*nJB4H)QV
K%Hp޹9g1?_ c+F(ӱpH^8Z+NJ(2=6q&:IInVR'Iį'66,54OF9b?,47︽͓XDpoV
;q`R66"$ҫ
b:@e+hz+;*B-@C1~PK8    PK    A             )   org/bouncycastle/openssl/PEMKeyPair.classRJ@=c_UM*cQbAVqi$4i`\~xGZBfq}s0o/ vʐjX졧tex#39>UCE]sR=1ݞtb`n0TQKRE'$loP
4/;!<MDþZsw{jjXf7庑X`+c %0,Q@E<Fb:1J^US`-]ha~²ݜnoNP{~UPMBFQ(QPK%(  t  PK    A             /   org/bouncycastle/openssl/PEMKeyPairParser.classN
0OS_NY܄Ni%$%b_
wu  'ZuUzʛ6`#,NFTuk@(|hD/NZš3	YfB4Aiz^w-!3#Q1EJ,iPKR      PK    A             *   org/bouncycastle/openssl/PEMParser$1.classA
0Ej5U{
^!Cd\x %<ۼ<_ v+[-
FMY=p%񦭛FP?U[
iLV5;}C9f{oEH5f#N1M.P&PK%Ð      PK    A             9   org/bouncycastle/openssl/PEMParser$DSAKeyPairParser.classUmSU~n6hJ[[jZhimZMhA$fs	ntH?ܼlR{}=	6vÈ.P<iu}2Yz&ٲ2!jqW^cW dJp~WkeVO
QLz+U֎yG\y1rnVJa^+۶S+3|2Vs''b{b픵]}CwtךՒٌ割<ZLs6CT3\-~cm;dl;S͔ۦdps
);zUx
@뭴Ŋi 1m̷|ĥm*V\:{Zpn:~YEQta&fNĞ`0\
19v"1GmwbAan&G#18F9s\%corqmr;YE[A^Ǘh)zgޝSo|la5ja3Zi{\	AD|2!il;>wGf8DG;sn
ogJ[Uv1E0`WqGjGngpOpܗR< HI)Rg0%x:
n#)+OXQC)2R*H `
U3XOh)CfÒ]1ʋYXp*
2Gneښt1ܢ2hYheO6 F(^௩:h'41Se
j QXQBP
uawh	ЄJ6ƂR
l5XHYV=JZM(4h _<-XW(RLWI#i? 50'L2]QJ%.I\,ޓhPK   	  PK    A             <   org/bouncycastle/openssl/PEMParser$ECCurveParamsParser.classT]SQ~,2(B1PlRIfhV82kK?Ż~ݠ39=(Ny~dp<VapE7tg6Z!
CTEM#,K+;Q
aCJܴrah2G-K;`Pɚ#GFް(]mOSuSo:;lM3jd7wEM\R%Ǣh2MVìiUmiʚԄFRM&/+K⢥uGߣX#WJSSz_~XeEreS5{&ٶkj1WJ]:rh/N2,^Cfe#ۡ3=^kZNGvrӹu6r(>?M[aQ1qccbr㱭L|
OImO]~Whbnu1ޤ_z*K/~ELq?8f7X=$*/I,(xg
⹂*<?G֬ȏ)gߟ7aekm2JVX@|Ap`zM0!#=Ƌ/$H ?Mk	Rw?@6Cx'X9bGYS6rhaca(Izg!o#TKD7tԠ71.(0'Q$:HJuZ',#DG14LK:PK$    PK    A             ;   org/bouncycastle/openssl/PEMParser$ECDSAKeyPairParser.classUwU.ItiR4$ܢEU ؐ7-nCvqwW9͇QֹNX0afޝo߿pc0L{yi=@oZª3˟xeLfr=2<*	O8#ax4M8aj1?5J'hym
MjhC3gV#l6aXv`[Ɖ^Shk\u+7>xTUv,zAC*XRXWZpf$}{M5cz̇LHpzܫ˺cI9xv?ѹ4rmjbyt6vqej,a)`F5w.4Z}GGM)">qCq
1ár\,59ysqM0[osCld+@2:"ұ1q]ˉ=:JxVb'Df彫Ѵ7}FCt>P ;%ahv]酱5w3<%m	FOo|g[OìP4*8TT(rc)TVVu!|*{ns7QPh_J
q_
VÆE)
()X
RA
R{X4i%N|T=8, "t"hӃ;LVFY]|B !xVڟJ.Vjd23>d.Vi'lc"YL?^N<+wuukhcT&: lRqӘz
8ReGccS8
8ttXPyPsNA/{6PKsݫ    PK    A             B   org/bouncycastle/openssl/PEMParser$EncryptedPrivateKeyParser.classSmOA~ǫ("yBQ6&R/)OumB_HQƹB؊/M:33߾`Fzf!gn0]AEAqYB2Qn'Flwx ]_-jॷJ6zڑ+jǮW!ò֌}X8Iv$ЉS8i y
[?-w>L[ODgX֕JYvLPI+fVfۂ
aGlJ+x.}c/
=m)lW]U.5%fHI^P*U)SЯ`@!#zf1~x|6Iw8HrWp1,v8$k=KՐD$4؜C
ݘѠ`V(2*`Nع".UcA$U܇NϸWe]EZQ<;8};v`צAt2#MJ!#oG/D? 40YY'<i釭3W0Vi0c9[#:
|m 5͐#$ntpPKS^M    PK    A             6   org/bouncycastle/openssl/PEMParser$KeyPairParser.classU[WU$9@۴Ѫ{I
"Z JB,X0
]ڇֵZYK}bL)Zٷ9{3o kj5Z4ahNz!J/0n@w6?zk0cUAN{C:ŞٍdhRn,:%"<^U`b=ɪ%'%Y\IV}븥KɒE/^ckʸ%z5eJz(SNJ^4'5e\^^V+|e8,f1szEvY,[^[πNe?d]C<0gm=0NV<rLjΊ+Ibq梳f7-i:Ui{eSYnT}YQ(}hzuPߋA^78ir=s\3\j6VY8޹'X2\U݅﷟ʑxuopG;8.r\̑Hst2tM
RmVukFQkpCLCjɘN-OR>a{S/Ou6vt]>>W(XKm@>0C+$ӸiF)Үۊ¨W1f,
0'LDt).tSWp[Wkcs:0ȬaL+y!H!FbyzF\?tzmKwԢg[nEqeJTgŢ%is*jj"9:D\ם]OP?
ady延	%BOʐ	'O°1%Y`(IDP 6ѦxShh-7h"W28Fj12'xBK;m)MxPS;6'"ې+YyYSUME%|c'W3xtݣpd8G? &bW񡧈?E.sNp8CtG\zAb_އ*Q
Ugg>\PKRzl  G  PK    A             I   org/bouncycastle/openssl/PEMParser$PKCS10CertificationRequestParser.classSmoP~.cuped0fAX هEȈ3&dJn][b_H$(t49Os=ob/%-!eNJIIscH0<O8M%²	n
rãOBum8-}_GSa%t*-)|Mo
혟M#m>lvP	?2Xjt<Yu/?[!I"cQ33Ȱ5-[zMpHeޓ9n)RS&R_G1ϡr,p\XH0,iwWdhiZ]#T&΅K/@;r0YDTpH)K遊9l*XFF
<! )uh
!Sm
ښ?lA HM]=TǡaU
AWeYy "E2f
>"MwQr r=׷;ɗjkV]<Jw(8
gxIX(a#"
ә 8;xw%PKZ2    PK    A             4   org/bouncycastle/openssl/PEMParser$PKCS7Parser.classSQOA^-D"])(R
	%4׵9]J_Z#'6=|7s?~~`R!mov&v\/ȱ@&qŗ1Cb[:޶\ߪ}pDLPϖ-k ]tlힺ^S~زt>:v{²#a9RoQ<"Ϫ$_nJ%hDweizmh[uNQ1I/DPeWCmo2e#ˡsLr\Ƒ3LfSf0ezTVT4j#&G!<ڈ\Oư9\+HcLR:n
ǲ
305⁆T˪[(iGQÂڸ]o;~w#bЫRQ$(1KG;W6lHk,*Medǋ]ebj{)jOѧ3a+:(uF.ɟ m&fNŁcIg	^m<;
e~PKa2    PK    A             9   org/bouncycastle/openssl/PEMParser$PrivateKeyParser.classSmOP~.슎t"n+8e	[X,~Kmڎȿ/DbQi{ys^MLb!z6Cb˒VBԶJRdTpi
#~
1*{另pˑm!<&Bgvײ[c9^h:]ilap_u:aXp*m^/^{~xalīXvWtN\q7y-:ne*oʙrU!8mTTpC @S0ং[

&f\z^qp\Ru	1]+Z<V))jcLC1
3x
XҠ;ȪŲ%.ȩcXWRrZ4fZEJltt>&n׸{bOpd|}F$IFr<g!!jjgoaGaCDk>~?F@cxAzlG!k8a$]%{xPKXs    PK    A             8   org/bouncycastle/openssl/PEMParser$PublicKeyParser.classR[KAKk떦vYDhSQd(nzЏ>(3;̜3_ ΰ"LёNpɠ7DPd d'ǔ*-Mjk?p<ɐD]K6x6qu#mRwϏ/mg uc_)=݉
R)75DވwX?Q	
_xM>8}7aF!aV!`(*q&ʹh~D2Œu$#{꣉*ÔRK 71Td"}i:&ya0EBcx E<6:Qe PK'
Po    PK    A             9   org/bouncycastle/openssl/PEMParser$RSAKeyPairParser.classVSE~nhk[*Ш)$D)z\ppw8g+h 3#:(rI+3>{7_ >A,8`"#s
"Bi#]X2lfhAׅUa8_^r=B]i
a&Ɩim	c=TVsk}]=öNfUkԺ+t~TêfYDM3m&*qWD'nXR:^w'{T-azP5ךSӥ\x`Ѓza=U+˥6\\6
P0	m3$`ɡS8~}L0r=5mVmvj>J
ǷyOtH\T|GboiEp"֍*j+vg{3h|ᓷQh0ץBLꎽeZ\wQ-ĆWZspkB{#ݮjx(EK9qc=9q\!ڻϖ"Ç=ǥNKٯ̗V1kfjDտ+$Ϊ<ɖT Հ⃧xw
Q[
{*ĮhTL{~vƤp1 Q]/6ыV@'-rr1Yp7"P7qOjQ( y)X"/i)2QaYj-|c<T0D[<bMAHQRºiJ;3(*PY:)

ncC<
-]zA9βi
<Mk
ZIPC}slFFcx
p@rN~?Sx
-̕GYG*0S>O5/ZP/<jnvXx,Ԅh!EtϚ=:ZHx2:p4b3D e<?>p3X_+"yq0'!1wx<pqIrFpGc PK  	  PK    A             ;   org/bouncycastle/openssl/PEMParser$RSAPublicKeyParser.classTmS@~
!(o*@嵅B@ZJ
-8vbHI'IWȌ|G9n
Hfr{ݾ79$Z~duSwWZN$L煙erZ+L鸪	}ߊi"YSnH;[B#cEiZA7f윲kLXS꘳zl;Y0QRxvl#®ka:h~fQ9ݯ׶:
B*W0ZaQPRč
åT4re
^:PIrBwMY7o[8#V5?K~vQcf_ŵ.ꀣCh99qx.Y=trvk/K=$DRY^_-*TYKT_TqW;u
+RJTlV@廃5+Z4,120!Ç2`cC21oтVE+x.)$cNŲ-$<CX%cI^J<ɨq']%7MaG
q]:=ABx'c!@s'(#4Q>"wlG4z	VN\zb~"<p&4UD{"t8H"tSNJPo$(~0apqĉ3PK:  H  PK    A             G   org/bouncycastle/openssl/PEMParser$X509AttributeCertificateParser.classJ@5.uU*D^HE"(((JXRIIo7

>%T#b]9A4_8%}xҁ;b@k0Q`\֕e:yT9Y[8'0kY7-7̺me|amml	;`e8m	v'Xk3Y=8Z~Pn`SxthYepP[ HPRhC:0A!VK^;??.T8^8"*j00!Y
*lwd?|> Џ8g~ٵ4y"+L֋"fwVfnW0wu -!9	{,<`K-Gٌ=.a	8&q9.CCJF
PK󹆡    PK    A             6   org/bouncycastle/openssl/PEMParser$X509CRLParser.classSOA-l=-P])^QPć6$c$<]MsxF+}iqF\vffvfvϯ  YeHhyaB;/Isr%)	ɠDXvP8!iXq|r!rMek~!>
J>ú뷌{4>5 ~h+_W^}˥$6jGաū~ eO0n@Eq-[m&Q?7#Fq<DsmHz;0$C]$-cCq#1ÑfߗRdеMS#F#TLpL5@c-`0UEK-Jm]$6CWME˖%h
S"7VJm
z	c~6@9}U{cŐ\ CHqdrd5CuW,v	r =,mujg=,u8:(;ЁSPJOU8YHO66Bl(紦	^}C	 PKb$  I  PK    A             >   org/bouncycastle/openssl/PEMParser$X509CertificateParser.classS]oA=Ce]mҺRmՖƇ&6IiYFu]+}D}Ge̹wܹ vq,Ô{rG1HC˱d'auB/OngSx:6>n0)|:}i,!|7r/M~ex#lW$wfL?)j-6GB[e2zJ?W&#&=i=߭*#QmFV Ð^9w8$1qGc#0*/Đ*T$[hKP!1Ǟ41lk .+!cJZQsx$*PEl*X
99,CS-ra
O݆<z8/FrCX5]@.L!"EG͌V ?zmA.W r-n;_]ԺXu4(ڠ؆^ItZjj`NͧhCI%<HxIcU<><p*PK)  a  PK    A             E   org/bouncycastle/openssl/PEMParser$X509TrustedCertificateParser.classS]OA=m.DJ4iI@
O,,ݩ/mb}G@+f3sq;?} $F;9-0čӂR7$XA :{Rx2<<:d@:C]k}h=	gc:^tܺVagH)}ft&F*VI،E(mIKg~׷ܚqU[qaVE_J9O_sEZMDI_u#qC99rHqLpL2Lߗg8FjP21C9ϫ1l5X@w:1x':X0YiZ2j0u
[C*uAO=~y",V	RǏeĢaXi`Q\I!mvF{|ͯP=B:.!F@F6^|)w0_`ƳIVZ0ml8fxMrI{Ir%r.=
h$x

N%PK(U.  x  PK    A             (   org/bouncycastle/openssl/PEMParser.classW-CЍ(b!J0j)$>4)4	I[ݷ{Zw\%9I"/'}{﹓~8g8[9*8Wy*8_
PE*b+Tܪw\٪g0mIaM'6P80'JN(hߑC{XSUҵpl0>8'8XXУ⣱˟KnjQlDiyb#ۣCZkX2Ґd|$Q=;79SuHyCSKT+*.Rj)ҺԽ@C+y-ʫ\*^	U1oPnm*L%xmݧhipVUݸq^>$(%ŏޅP+k[B̍0$B!o;xr`roLL>2[?6N& .5rcʹMЖ2qӦF|6K-<_o
)ŭ'~QޞKt(:Y3yHLv#<\ctUW5dObp/~ri{@k3Sc.*}D|Qذ^3m'cee<X2N:^6U
G.cUfҒPdUmЇANX1O=>WM65ͧi.i5΃{H̜57
ݴآEȦv\(41RR|rq15Sf:?p5*,E`@jv
\'pv
Dv		 H$F蕢+ZJP>QOg$7ZmוozK-൧e/n<>]=T;ɪ)6@;mh~qmꫵƭmT:j>ޚ{s)t7 ]A\{RvO8x x0x(Mx$? FbXx<	`OxH3g/ßȰ +x.I9y
,2O) dL<,o!MAF/s˳U]vK4D$8˙5E~o
	jl{먫]8N$#}DgdB57Ho\Oq!iQՅeX;`P	bKn'|;_.Nk% |[0-1VKpDA$z	Jx>	_X'6:kt*鹙8:$g 0Y6T_,>+c|t}GBWs,ޝfu
2J[˘b?`\gs@9ޓRFJ\kޔ`$*TFvl,ޑT*}zë~VUeoKT[yޯP܄ih=?hI,R0[kI(#EAK]]3xe
}f,^<sñ&qKM?MN
B}}R;_#n߸aRӑGp۵0>7_epp܂- wa/vl+pG5)[8	f߃{PPKUZH  @  PK    A             (   org/bouncycastle/openssl/PEMWriter.classRMO@}KBL4PH@>VTԪͲJ۲7)=BV*?BY۠ fŏ_ Pu}WbJd(	wyj|2Tn3	
+O:A(8v1r^'V
Ti<v8㒏	CL:huzR(9y
zp5nPP]'U&Ruc"q9
}~:s'whtI7|
Tna,`Qom&L,(	L̢
C~/8;6eI<_<<ԓa
Z<~>Mm[x2JaP/#Zb9%<Q[&XDS}sGc|S<7tųiA}N<rm9lZxbۆV5p	PKNQ@    PK    A             -   org/bouncycastle/openssl/PKCS8Generator.class04$A,SiYdR	
!+;}m6D	m9&yvWƒ)^|=<33ό9" eLα2M[T66mPոm]4H%T3j`ͽ&Z$Xm([?n<|ၐ90ط;7_́n$m)onuyJ\  4>һ{HE
5Iݞ2GRGϤNѓ\VHhsv;jKmoQN+U4fz{JJ̏+7W3	mp_LIi]	%#N
TT)1ClVY9N)u$G2<LW V%Ed%;QE],SOCݔy9MX٥}}fe>})^.K-#]	=)LF-]~jJ@C[\r*ڣD5N(*w$1ޟ(f!u$Y-l$:ۣѴ3˧?
dTcjJd5W/Hq[F.&L
d6*}]I}Aq>,Uֱ:Z׺,K)	*l6fiPfn>%vDK$
ʰk@6
T*b,p).J)fu{S1:	oOηlrNI;B$If#4"Qi<<6VS'NijGRPRqjJ<JS1n2'gLN']iNE|\kEtX'".qKDxEt^-l-4IDX4EN=]U[0]RtCcӦˇznJ89u4m1X`O2\vv5Yxɩa^]<<u?WdO=4+[V·݆֪~΢?t%@`g2$F1118hf`0V2V1\VFhgx>ƥM͌ cvIB\<0`,b,f,a,e,c"!J	c\*	ATK{$0l+|$iXB#T	"Sj5W`a\˸q3ƭ/J\ŸqFM/22+2Ƹ;18e|gc|qN]0eǸ ACv|Oڱ2rnj)Ƴvlcoر"zCQ<]_g<Cg|@m'mw̠&Gn!>X;i1Z 5rpִi皶3l1-nvi]fy]dŦ]bڥ[,4oĿZL
ucux0{L()L ;fo|P?Y$Rta7DP1]&Hh9Y㈆X9S
ᗝ-#tV98_9
89#+8,1Zc(<oT|@yڕT:
lIj
""v!RU"~M\Sğ9<ry;y<~x=Wx-x588"O}j[?7EC,7
}2~Ѕ~cEQPK    PK    A             0   org/bouncycastle/openssl/PasswordException.class;o>.F6̼;FtҼ⒜TԼ W_׊Ԃ<F-RD5|sK2ҭ5xs10328秤2(2 l@		10!v` PK|      PK    A             -   org/bouncycastle/openssl/PasswordFinder.class510 ~Tn-TdYvd_<
hߟ@9l;I9q,a5:&x
a8/:r;\0UhI-u+P%*PK4}      PK    A             :   org/bouncycastle/openssl/X509TrustedCertificateBlock.class[OA~BU(햲\E.%$	/.ݺDb"GP(f[s3g^~@xb!Oe{6j\][,2diZۦ!W|seRc9jRhx5ch`/D#CmO_ZdZya{.Cce
a?kFA8nI}%9"+|8f]/5TyǶO4TX\d UL֨x[(8z\]t]ᒴrUڊ,+oPrh޿GRM*G+GG;GG'GG7GG/C*00oIF㉠(Ĉ>"z-ּj)vOUǰ0
BVф>fĐfLA?R
ХT
KD+CWfJ&7J07_)HYaGF~w,c:B̋z]2552EDɷkehsLkcH$&@X2mh+y	e,\襩T	/xI+~F*+3d!sp8pD9XQ
+g{.a\a2ja3v)<iPKlg    PK
      A                org/bouncycastle/openssl/bc/PK    A             :   org/bouncycastle/openssl/bc/BcPEMDecryptorProvider$1.classTmOP~^(EE;7@tD鮻n7&&e<-.iI9=y}rϹ7 ?$C(d6ڵvЮ1L=][>b(7yn;pH/l_tTnY"J!i}ɠt(.rn|V<gvk[<0p1'tn%\dHx}"c5k\AvWkƿhDz!mǖrǦdr'{SF(P\P)H+QQem=֖mW%gIKb,iD'Gc8~va\eVO?x媆h%
	BsUe
S!=EMbyXUq+Mr6oㅷQ{-~ݡy=5O-§Te\.>K$wvbl ORM:K}g
C?!|Eɧ!ա_qbd_-~FH;D{4ʒ3G4ud`sDRh5T.FPKA3?    PK    A             8   org/bouncycastle/openssl/bc/BcPEMDecryptorProvider.classRJ@=ӇicZ	.I.Bł HWt)!)X_UP

~%ъ.E̽s=tzːtK~'gà):=0е7n_pZFgu+@X@RVBx4HGC'b.lQcqCnJ=
ZϮL~cIb?l]o64j<V62NF3E'5e@W@T);4"	3ʏPN?7;6XQ9dQrJ0k><Z*ak'PKMuI    PK    A             .   org/bouncycastle/openssl/bc/PEMUtilities.classW	`e$L'SFHKChiT%B)`A!HHb2^x.{}}"$i67#Ͻi ȸT"Kd,Q%Z2522X!NFU2Vh^zM&`TlG;J<;X[JOSHО4Мmn3棓GP4Wq]Fmh
xďںc⚺XHьbzJhmi%vFZI֞@ )*65ԁx2o4Shغvum3#~EVj'ӵ䴂0,H1ʂdp0OR&xFb2{Vܤ$LjXOrp-FɓbG~<R-!=aD1@*s"~=Q=ݡ~=ם\.1=4=ٯ>Г֝PR7(xҬDө>%lC{[u
y}uGZH[i9`$X{ZĠϞuv.oL
۸g8BR`-3NTcMA_4f(p=рA5aaOO
8uoCF*`$̝jD)Cߗ}̀6SI W|\grrƦRF0
͏{AwOѾxi-POvbP0eDu_0mlMO=ǌȞ缢09I-.?NE\%lv={c//ƦF_W?,TC8ҧ/qCm)T#뱾HLOhk5W$˥쉤So^3
֧,w}1n_h)_'{@G^>[Wпiͧ5]s}e1zZvJSzqVSIf/EH=VgOQWXƃ'tLSRQ_kt6g]\Eg8S;ԭ/F'QM3"[mnbI;jDuCavC.ەQƑKWIMGdS3)h,PK߸;[+0<F
弣uTI5T*sO:F2#)Y5itc>@Dw)t,w
/{$]uz$쐰SvIAB%%%'_BDMJJ'!&!.!!f	I	)		%pA	JxJx;k&MM_ϡkyǤ\U;=t'3Zo+<;<H?V\8LjzTgWݣ[c"-옾;,*dxy jDr*PO?WYq[?5v\ߒBm7YEש*mT~??͂vO.I+6Tqۚ^WnEo#f9
ng3VX]O9TbTE=QT70dx#Ûncx3[63bh\Řb4Q*pKTU\U[qZZQqÕ-W㬊0tSi;ϪhX"}/؍/s_ax^F|Uu:So2|Vq;[?ai>2g?g/~k0wgTS~.:q7U!L Ea+br>pN&VICDqT)xGcxBV1Pq1KqaSp
'S?<%J_
9a1Sɜ'
]xюBemxv<?ؚi/#Kx7o$pS{ XQKR%7l0
&;IAa?2Li^uB,>%ZGqW(bHV!bXTIӶYpwc*.3"o2bFVNc۷xr9eTf83(b1X]dx4zzFe0eŰh4۲fX٪G5Cxx&,,Xlgt'(J_:ŐT˩zDar1%^513Rև,'0$QجJcfs)#"/c&tT4xvAqȚmD\GɼsN9kv!z2a9)Ori%FeC=5.!G8CbK[8:mmTESN;#p4Y5GDYbVQ:KyRF!
jVsQyyesr#JN$?':oPI#II]rui7=a/i5#dk\Qd<,<RkGQA(ʴath*I.;٩+V7.US4ZbՍ~j.Dʭ.J+<il>KX,erjx?.:KP&$|@%2G+KgmsX >A2*ŋ8OM)@B,tUs%8SxNq=%ɛPt*HgX=J\g1Z=1^ռmڞO.%hiԍN;= )KRVJfœ=Z8ECvN2."aŽʓb(#X:&yh;!S:re<?G(G^#/j^<7Gȑ]9򜬼cݧvkFYa*+]sXI5S_+.DtR'qIX?PK  u  PK
      A                 org/bouncycastle/openssl/jcajce/PK    A             9   org/bouncycastle/openssl/jcajce/JcaMiscPEMGenerator.classUmWG~%@䥖A-mQ5
%Jd2nO[BTΩkxgLBs4ޙ{Νwf >	c]撁E۵[upB+	%Exc@f@/wJo?'
/[4pRxU5`dtr$!w|{4omnٞ]ͼڞk:-YYǑ%K
@
P>mT
kO Eܱm5nv^OLS*3q+kJΊBڂ룡"Og(D8!T(I/YБ9LM˺O=2"[.]3m˖[BZ|߫b]wQc؁Xˬܓy22?<mu}=ЫuIS0302213|pSQY7[dmZ*=ʫ\	{0ѾgɨZu# S:ѨFNFeuR3Q#Ep8q'u$N:N(.t`SF1TE%bwc%3qi%*31&Rj:UYdM၉k(j:a}Hb>
iz~PC.#^p$}SN#eiyѭy| 	CltK\_P?N.^:xȝM
ROGѦ::?uL]\=F-fq/wKQw>xLjU!͘UZh#}cj=GY8CWKlɚ-
*ۓԞ>ĩBXFe@3L3PK*    PK    A             8   org/bouncycastle/openssl/jcajce/JcaPEMKeyConverter.classWWW Q4+mi6# #"v!P}]pKtoj{z$NI*=;}߽w{/ϵ_l/NT:!:ĉNpPPdsEB^{̉cCIwtqIA
6qJ%) qLR!B ٗqEҔev$k,A	)LϪJDxhK3X8$SPhMi2"&;"G
G,K)*i2ê,³<A_d<jb.|B	"-NT"[VLJӒ',EYihֺn=06ZɧũV:pџg=bT=2RmF}	y"SKlt-՘"{|"fԁ#;븄
{z%u^u7DAX4geIGR#-(d_@h{plJVHs=O당f{/`M<<#m6'<)Kbp2.%Z,Jٹ	[]	[^vh)ly>Q:mTCPQf$Dn໢i%mr0`\W&
rDJ FFtj.IDREkevJQ|kylQc7z
<y4h汙-<c;<vţG<yqYgᅺc8ܓ+nZE޴gt.wNR̸XsAMv79m+dɫ,6x]M,abU !AbTt6g5t;y]s{^{_^\G~2/<B3B5k+Z\=\zm`(--߂6A+T%&@D
8)N&a/B@5)b$k1&.&LD
Ej
A6q+# "VaJ2EpJ:D؃8-xH!&	2 
1=xR@/&^ЇxG@?0'x8p ge#L=c?p	ūŋL"LĻK}K,i<EavR
NPȀ%4sӸ
p$Ra)xiz__ن+8{	,E6XRqc
\nΊL_#Ʀyn=
̀q#
I\NB
WoZO+I|WI|N!6/,/<_@/e,O$>iJozYvڀ4-мlf'&ōs	oA܎Ii&y3K1	c4A
Co'UmNZ/7csK]$>:*fu浥u؄Q ~aI=rb ԸvMz.3./ԢhaPK_B  %  PK    A             2   org/bouncycastle/openssl/jcajce/JcaPEMWriter.classRN@8NzA! 7U B"z,ԩ-{Sʣ	8s!R+ HԒ׳̬
[mT;KJ8!C>zuNŹҏc	Ƣh
"@8r+^ByiFMY[~5/I
(0~sa*z:)2TW~3&Fu9?)ݘ­'%NfEtp/,`&֑mĴfLXxi^;	ݶy7Ș^qC䉑$}M;F[xuT/q
rɹQ+̥o2bRjg-RX}: =X-_Q
kחYnqq߰iEɇ2
/PKP    PK    A             7   org/bouncycastle/openssl/jcajce/JcaPKCS8Generator.class]K0߸jWNU0B(8
6*hҦ,lɁ{8o I-ٷgcW
U<A^'5+& (zh,x*3%"%KA"yY|AY,47&16cꕫs!ET$=<.%g?kj
h(z%z#
dpp10m g00c`zf\9v/rƅi3Qa2:wk/Om!b!),cل<L,٨1#ըۘ`--gawXБ<	PK> S  {  PK    A             <   org/bouncycastle/openssl/jcajce/JcaPKIXIdentityBuilder.classVk[G~7&,*hm#VZ@[ef7Ej/~է5<6O}Z
%E%<̜93̙n;-5>lP62*'4}dE樍Gm<!>Ь@P̀nXu\3-Rt.ԀeȢH2@QyLhDXQ3V֍;:
klH&[xZZ!|憝>FPR~ZaR4,Q-?`@Ne1j獣!@]֌p~sYkТ9gXWԴe3R'oov=pШX3N"ҥ<
2pcݳ6{2y"FѧI)N82ldFC)eBM+eSN'3\rto/=ȣQ";SkKL)6Tx 3 kx'9cr):߶hB-l[KIm W674mjgxXL>(-:Y=*ƈj".d)@ya1*V3<(Ca
C#Z141ghf1021l`3loRj|טYm0,v~5hO-*-6Ǌ˓K:Obi)go#'ˬ[FƩ,Y">h x4*BĴ7XyvA2TJ+8KZ(^{p!#C_YXQ]wUD[Uro᠄ $<&>	9ԡJC/C58<%aIXA	
8,a+jG%z%'$I	4g8<9	PЋUvhF9 bNqHaNpɇ
0DtUz"9")a0!!K߯N#A/qCAKVa8G~PGѥ{"BSx'GO|
_9p*}!O5ڕ/8גW܂g	<_KNZ& /C-S#N}CwRӖy=~<yiA?籋3=bI{n;9|e4I5=QG{3n#<:)DgJ?nb]Ƿ.|<bq:^w.S	s!۴!/C/N?$'?Ѿ+c^L\cJk0@h[c7n}AM@{FfU9T\3*o޸:5-vMvPK~B|  
  PK    A             Q   org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder$1$1.classSn@=nSCLZޔBE,J 4HؔGL4Dd'X|ږ`.3{|Ν~k3T۝Wڧ~t@JKz?ZHcKZZO3MBTMeDɮ61?s-#T,gVs"̉,K9il=*R>4M$)ё>{%K532z̓`heZMRZ8[$ˉ8Tt`Á*4\YQ=vgR(B>\"(2u?=}XN΃T6H\Zd5=pE
MT]8Mip1WR1J;c7PJ?Y&2>FKIu0˭ѫ4k
eAWc&
F4VЛ,i/ޞ$Z
v-.Zi%PK]    PK    A             Q   org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder$1$2.classT]kA=]7ͦ֨&eۢT>D/͸ٰ
о#
?%ٴd3s޳ݟ Uta3:"bX#sFA+
ɰD
8:|`[/lJұo<<am޷V1Yk[i(mݮ/FGPeh7C9Mr

dS*1Ju95,j4\ҐՐcXmYS3fC:zJJiΦ\rb+WP+[~+^Ė7}y^I	5s$S;8s֑:Vt\ƪ2tE7̭p;0dAW0^Q/2
0!}SK>v\H
l6 $I1 ip>6h!\1kll	'(}fP!SG#&Sdc"*2+>ǙzzN)wU<iX
f`2c`:S
PK-*    PK    A             O   org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder$1.classX{c{BL!	J,;(qpz##磌(-'m/%m";MRz}?{Yߧ737=u
o %՛SNFZIz	B1WI5&:%T%wo1LùU:j֫eNjI*VJUMӳن6BnHHSl]u]Ej㺣Y	752)ݖPMݦNN>۲{mq-dtRwGrPEq5DݦfZ8ezDdƆ
-irkfh~rDx̍뒮]mLcsGP)o5?ۇ%4V[odZ|vϲi{݂/1
sذ±cnMf2<02kμcfRC>:wf\uRN#3=Ûᬮ(
a^?_gt\bk%+\̇K%k-;huzX͚]v7kyc6x%(mcp	lѲIֲOl^B}{αewVԌwaiڞݞv<n -ǶB2z80cN9HR#\c|9Hi>M߫3lut-:tx$7+p lM]mMTBs[!*Za_F>@)hm~tZv8ffr΢$l-(tB,d2gJjZP*ʄnȨQ	4
4	4
l	tlA`vnY "C
D6]Q.nʈr:Cq^Z<??\f]K[\x Z~3\MNot;	ܮbx薶WL~sU9t2(\}V{,aC`ig>n<ρ@myW)A|_(VZBGddʶÎ<Rw.Z&[ e.vF^b-_zyQ1D1r5r-|K]\>Zi{m_~Tʘ En
ET)
.c5<PĘXeQ#
.GZ,a*XKu(f{r`+Yp4 ,,)XI
,^*}LKx5YFEx-=`
^5oуGex',>!c o1x)ݎY|ZC, XG[YgeY|d$x6	|XƝxX|^]LpSݍʸo]2FQ|L2,,>,2Rd-x>3F颸.i+Kҧ;)knF̤wh|J_QjFTU;ҧfOașPA*z*jW7ɦS84Ͽ]*!{塷l<DB٥g~;3ߚ3J߉T+HDy|//m{6V<wS$N֋!"U&
?F
_*
Nj_n
<>&~=&~_{ΖY3~@~<Ǹ)t{.q1ar/Sk,YOcfMELSyBnjnƯEYPZ#u:ڙ5^>JnJ!QR
8$pA$OxЉC9<+n?yn0=+iw?'Om}F5PK-t    PK    A             M   org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder.classT]kA=cniblն~FM7("D|0M
M! a2u7?JnbKb$,{9=3̯?~x"Ra-3s&BAT*1$[it{R1dm{J2|ձ[~䉁AJ+xWH;
>xG	:Vy8r?E\N[WS' p\KQ;ySi<=B
zr/kꂔfi)N`'%yBt°p,f`ـa`C6ףޔ6
;ul)"儃thyfIE_\'31,,J
Ilp	LMp}WpDLmY1.C%]0'UA BnFrT(gh%ʀ5]!߱.c;Fn!A< ML8=Y_&?Kjf3OkZ{p٧7Aȫm+V͎:oYNcn4PK♜  E  PK    A             G   org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8EncryptorBuilder$1.classTkOA=SkUC|Zۢ
FJ
$MO2nYv)IH0Q;[*ŤMv̹瞹{;xЗ2uEgGIl`aj)"VeSI,CdTjJ
Őim<pl$=g#jn
py9eYOg'QSqq
jrЕs-[[:#C`w㐜@NG〯E(&yTu2ϐA^允y.2'yc˟Yt1{ttпK\5*+e*׫S,S_"';NGA'D1vWr&\\dbWgg5.[)0u=ܰЇ)Ncp0&Fp(rzM.C9ԒHW~Q*!_9q,bPU.PBR{!W-)0MQp	LFh&EM&*5AvC]]{,$PFHn>ҨuF@/s<؞p>F)|f F1:`g8D(>Y&ǒPKގ?~     PK    A             E   org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8EncryptorBuilder.classX	xvfv@$N;[V%kZw#oMdIH$P(4P -=zwA``
i}BK)JcC}g?oyʏ= 
	,
*CAm[@@},srp{[}fwG t2;΂qˀՓ6fI6$Gߔ
NoK+Pmih$Ndʋ2r7X3\KjNj6Il`A?AV-?+4PjpƝHDȼCq=3=2EVjh-pT7Gը:ZtҢ&x%ʠy-?GZGIG4
VjU1_#e~mtw8ڽk#Z#Ҍ1H-;IG7jl	>jpj(`Q:ꐖAï_Ca-;6,6vS@ZNG%g`!#j
:,_EAԘC
Ai{R`'ʊ#n=uyOOQDA54:tDq!CC|l\9qr{K]}..\NjuoY\K4ZXp#NGQQ808xhpt}
1#Xl0/ y<}~/dhC+?'Jߠ2:'wGЏQ]djtƃA]Ѽ'_:\o	1N5~Ih &R(P;MM4fBe39Lvj!ird6>hĦgc>;	Gu|OezݦVAc_@ZUhzg/N q0wAÌc:U5;	ӃkE#~;aNh@

v!9EG AɎn7wE1U;e*DXx8JO!ͪ-AzZug/lX38@a#A\F
2\9ڷ0=LvDR[O,Fe>uw;deK̒LR;p|UCGC*5@۪$lMv	;$\*2	;%&+a=JI'av	:%tIp	~	H8(
	WJ"hm>'kɎM/iyḣMն)"<t!F}Ffzj5؋5v^>sv7b
+S&Qh:3x0q`R7Ίz30_s^AQ?ufX!i?f7dLgs=tj/;z.7"q#vvyS7%6#|
?kw8>ɐϲnMYT ޾&k6}SUgW9̬.8"+T/uϧ
^?=AT9cܫy*]~PL'Щ~ns[Pa,Sb\`^@a(a(e(c(g`X̰a)C?^*N;
.afgh`hdhbx	 KTCExAYAޢ@F'qo>ACA
N+0 
6x;PwqnNxxK
6}Ly!ᱏ*X=<vgcq\:L2<Tx9m:7]1<}0GŸ`xO2|a,>(×2|'?oeD3WwO1[Fe̋3%_8?2Wq;?8_od\'d\_ʸq='WY7_2ns2N4q3~-Vu+~/6I)A}5w0I!
d܁,43?iP
L?_O~(/v^~o'½Szf[bVjZmՖYm.6g1[?JF4)̖l)̖l)̖ZwCnb u5[uLɾ0)vj׆1U(^ ,5HLrct| 	)ܢ!a<hGpfa4C8EX"PJ&ڷ!)<lYބ
6eV)
|zQ''4])qi,̎N]yI7I35*bCH͸MGzTbC1Q㢞V1jj\MKbur$nI^ZڒҤ9tmEEu㢹М
$,JbEH'''4
"ӄ?&֜|v"Qounܱ4nZx;j'qigRl!KH<bɤdYzشZӲ2sIܗ}h
dt'qk.̺C7IsQ4y*GP
X("C<.OҸmU))!J$tQB	ӘDUFF3XIcTQޱA^+hDP;3#a3&szȜ.>8!晝%	1,M,K\E	Qjv*\XhvVXEF	e)PK_I
    PK    A             H   org/bouncycastle/openssl/jcajce/JcePEMDecryptorProviderBuilder$1$1.classmOA+W(DԢQlXm%A5^7qWID}i2εE !ogvg,`i }R*a U)VJѴM1C=42Z555x1D*%d.c3ݦ Dǒdwxv=:m-u<+[^^{qψ[ho:6~z\'ǧ70D!(ΎYn10-ROz$^!$so|2}SxI[ud`h[ɚzj_mqN*#&cHư	-]]ӮhUV{<ARǳ{~%8
h	"&%Ct93=	+2
'-)tO\Pq*pUyh*FqMEP\W1*dLPpsHb
B
`3
&Qp\,CԨmr<JhM9SL>m,ְ2w}kpݬ\}nlk^4}!a i*2#4HB}4z3g1`QI$SBHDW?;y;ݙ#!}hHJ`#xʋIdQ +AIPKLޗ    PK    A             F   org/bouncycastle/openssl/jcajce/JcePEMDecryptorProviderBuilder$1.classS]KA=lfjVڷ)<( >M6úa;f'I
;C_"v`;̝~	f[_ʟS=0Ya>(2N}tuP1M&"52ϳ>9;ZҞ{cޏEti}ۇRL e/*aE2̓ވg=e'.*.qbM2j7V4Eu]R:79gF2iZfc
7mz0)<8`JX
|Usx]E	Z[ƙʩЉ0&;RVF(r	Fh*gi"ju<߷
 Cx?#le=V{X]8-
n}7 kK[wl?`l	5ڤhUPKfҲ    PK    A             D   org/bouncycastle/openssl/jcajce/JcePEMDecryptorProviderBuilder.classmOP#2F
SKI~!ADc2tvv]J$W`HGӴa,&K??x	a^0xBHZJ<Mߥߓyq?R0긭0	D_p
Mbww7{B\6GJl_lFזU5MؓR~%pQQF
^gPbQ2Ώ
L0L6`a#/[ΕI/쯍y^u@v%~R}>bFh<qK(v	tÂw1eX1QaLXxhGFؖwA ϕ
k$_Ҫ=h	Z3srs?z
2r	e UnNsO.s,fbƙ4➦5E˘N9jn\]IPK?F    PK    A             >   org/bouncycastle/openssl/jcajce/JcePEMEncryptorBuilder$1.classT]o0=ǲePl
t~--1j҆:1iV*K-썟 ~:-lҘJ$^;w x4
oRFUg1Zq]!!GVAlGQZjrn\CA$.^zN{@ jzZg6!W1m+7>3vzAx
|3q=|euNlNGQF+\QEץrR2;rɤoE (`^`A%\s:wOFy\}C%(zR/i
}mi	u@!EOX]Ohsj3ߑ+Hk
YАӐ-
*nkPpG,fVewO"XBQv%+(Эm0O mr
&n3my\cA{VhpC컎oAȑp
I]^d7CrH3byr2BXaggZ4SKXL6rK,EFqkG~s1Y"&4!ʿ__ A.WRcZbe&)Gx0f=wpqD
T]1PK=dS  &  PK    A             <   org/bouncycastle/openssl/jcajce/JcePEMEncryptorBuilder.classT]OA=C)."DmKZH$T1v;en)_1#㫉?xiBibýwf9I,{fpC[NB䮹w:VQYunX".^GL9odˍ|m_S
̩3;
[iʛ9@uzt*jZ|S3E8f)Mkcpke'oV6U][-)6-	Vq?V#gXmu.a7VVLݪ6	L{8yl궹SVʶYHBEB^	>	}20`q$Ҫz xҚg
^^*+I.w3ٝ~B͜!/nkͫϤ}ѭ
Y
<:ȸ
%{
nb\TExmDEA1[x"#  2D52F0)cOzLAyeJm{'h5Fc9HW~1Ubj(K`b*K#d	O1}#̄#G

"5x@kَ`Q`p&a[8G5\?N ^<MR|?zqV1gx>wϺ@F1wpz8&)v-1`EeF-c	&g&(ʔGkPKV    PK    A             2   org/bouncycastle/openssl/jcajce/PEMUtilities.classX	xgIgiRG!!"@p|DDXvLw#ml%$$ىl9@MIz>8K[hi=)ە>g޼'/? 9pPaz
9Lk8導Yl-Z9tp!9l0a7{8Q_u[XVYqU`[6Hր`Y:ɦMi|Yh$Ig邥#$:$P߰&+mȈ
M(G<O	#!tIh|Hj!@_WǦޖ.6lJ4tw.5bl(
]&d7lnH57qF?NKPlU	QduC{gƄyHzxMk`33s777g]vr~a7ta65X47m-jsZ&|X6uRbitc,h'
We(yĔQ՛{CIUI^=޾
~/"**@

%J21|ȡx,Db)AYsII̍6
8Щ$lX"RU*㝑p6F^<Dq5꾐HG1H

muDTUR74v{J*7{XVJސSP0
-)=*2DD%:Ob,{8^e})ks;;bxXŬp4MUKtjJ)C8q$DRP<DߵG	aB"֎ V9hY6̱l<JjDt~yAa]%%tVtXzER<GF2Mԟ^}]ʨ*!_G,QuHXFKCTP:GL';\jDyTZZ.T)545;Wg4EQƃ#lO7#%[K%Ԑ/OIbdMبqZH:u)%QkW:\'Hܗ79`Ba49BGdpnl0Xܻ[xwƓ^%v΋q5=bxrȷ#>T:T4Vc%oNbK$1Bȷ^8I}oJ+Js}MΔL+
v]!UBy!K&[[.{ѱ`ά>"fw-M$Q'EzAzbO{CK,-窱M&#BWS;5Y=Ig.b_09ovv\F	ÓXʸq[J5XзC
1v{*$݂n}Hlw,7{WV.jD22JץL*3Lzy#8`@ߩ9Qmɡ9s8Cy6páF}簉\(E\' $%7KpJpKp%8$G%)]-'%>	< $_+CwN]m 7u|Kq;snv*#_{Lt]K?L[gѣJfnQY.Ȋ	Wu"|:	ZAKF`Uq6lUXUdР>fOPULTGeVO,}f.3nuЋ$#Z.?1gy2O<VӲSqNVaek2stנuLI֘$m&U37y9sBʉ4;;#)CA;Vm_2l!˰`K	K>.'Op+	"A	&"&&	%2W> d2$4N'XNpPE
a+.)(1Y%Cex@3&CN!Ƹ
+!2<pf2DKe*/C- ,SJoTN'&!%+W`r3V$"'h h$XMDLp&~u%,"8`1	W{d]bMoV;<γódQ'xO0`?gbY^bˬa65rnf;M={v.Aut:l. -Nag?x-
nm^x  	ˁ"z!ĸEmv1X؃(lՓǩn3Gg<Ꟃ'ٵ%j7dWh{h8y/z>`dY|
+=Hx~q`80X-3`)_!fՍqv%@<'Z3UFN	|0Ys0!Nex{X	9$%]/Mu֚#S_</{1@=cd!~녺ǝ

I۰l
&ۋL?|v$dq- =-؛,ỘعDlc N?{lKsWcu	pfTʅt.3<e*fNLAvVW9e쨩H΅[~"e0t%=#^Z-UWUxW=b"BTZ$TvgU0`ĮBrp8yTwB|
^pLCfZtP,uD6xN38v#R%AuP,aG
h%RԔơt
^w-dws*dΡQ[<7T;<+h8cɋw\J+J=[C&{Xy	v˃~Yl#OaQ=]*r/b7i8LW%RoAHO,).L9Eֳipђil~5/es$5469lsloB	u<w%8NdY/w~<R_;])S.l8:kjx|f:R*Ic.qa5j7|;ۉPnM+l.z#΅wcMq;TK]6熟Q"OOz-M%{-DNb[>"2'k[̓5n#Elҏ>=S#˧yn~]ʮ^d˲~
6!'
r 
AWyAAV3a:e[teH(*fLrUP.)psi+
17|0Mᧆ7|0'N70r
a70ǆ7|'3=Q9DEU$s{sq\|P|H.;rL.pci
4LùS0ݯePlE8_ڽPK^I  "  PK
      A                org/bouncycastle/operator/PK    A             ,   org/bouncycastle/operator/AADProcessor.class%1@D#XXz6vVKe!c,<2N3Wy/ 	a\wE$M0O鞰4Y!:羱k:y#`8{+
S*N?I:
!!zPK8      PK    A             3   org/bouncycastle/operator/AlgorithmNameFinder.class;o>.Fǜ̒\TPFb1PVbY~Nb^RVjr	#n~Q~R~i^rerbqIN~~AjQbI~>f̼"vfvF}
}y~=SRJ22S5HpipIQf^5#.#*L
,o#+0= #I PK   [  PK    A             6   org/bouncycastle/operator/AsymmetricKeyUnwrapper.classPMK@MӦM
{$~D'Qdt[ݰY??%nDPP}ff}{y5VO:B
sDgy0WɌ`q3&4RpM
9=yjFJgteZ29鸪-S^_[ʲISJnѻ>Qi'ZOò.Vc5e m;~eVihgǢ<cl>!|@S6f`Xl'? PK۽$    PK    A             4   org/bouncycastle/operator/AsymmetricKeyWrapper.classPMK@}MFMz<$uE(D[=o5$ٰY+EGzP̛a>>`
	s>%yH|F&B(tz
E	E	;R%l*y3d)RqU*/D}xY6;7,d:W.{8?<&`YO8B߃ꡇU]39a &Fg^o6bu
MmtWOhl$_PK:Q    PK    A             6   org/bouncycastle/operator/BufferingContentSigner.classS]oA=-kaJ?,вhhLlI>`L>
0Sd5/jbC?x%awg9_~MU}0cURϥ'lTK:P/]zw%D9CUK34r!?pc﷏DG14~u>v@"쭰*%Wd"vE"Tҵ
Sxh`@@ƀi K{;^+	/1TwO%:LɊG.Ov4ȊqCIsmÚڵ9=<&fpD5$L(K&fQ2BiyuFX2p?Ut-;x
oρ%A/5]PN|4RRa
CXgXhJ$mr9NTzAETEʌr#l0Fci|ę%_+DD_F)iO>!~0&	X`SX PKO  @  PK    A             -   org/bouncycastle/operator/ContentSigner.classmjAg.FA7VA2VBTeΉCdc/3! ia|̿ىlK$ZqY㴔	kUhgb\o>ˏIo9hAͼ(9x$v{7ׄ޹:cOI>!E5g f
[&
]PKW     PK    A             /   org/bouncycastle/operator/ContentVerifier.classmA맠`A(DJ"Bk5#j
Į($Ks@UB{KB#T<Cc#9Fj)>&<gP˳ԡ{036kJ9-sV.
.f˛;CB7E?byqϻCPB <t@zPK;~s     PK    A             7   org/bouncycastle/operator/ContentVerifierProvider.classuOJAqcV~4 9E0 ēa2n&3g<~D>t]Tu+dEQzMIT(`IT=;+X[Y_tNVk=
޾YSC:,M
tO,w"V8߮$Ң9vsts
n8Xɩ.Ϯ	*<@DGMإ˸.lK{1cWa{h+(t s9ez7PK52Q     PK    A             :   org/bouncycastle/operator/DefaultAlgorithmNameFinder.classxGgOVĠЌp8ؘ B"h{!{SMwzԿwGD%͓T#i'I%JT/)(A.KZ"iWI{Ij.S*IGK:N҉Nt3$%II@E.t+$]#qAq3bѶh|>3?,.)]vX*U,uJsi+WZ1ՑV\*7??PX\2ulzê()MZ&vUrlYFXeQskLwjkk.;\vSdo<U`C@ul~`4rj㯭_?=;HT%)ťSّygKJt}HWʚڴ.[[W]EAvUW"k+.Ƀby9;fjE*fjER1ӧǸU%>E5u|O.ACk5IeZSLhN֬RA0]>X^cKVڦ1Tm,Q_vQNDJyҖqdU+KZlB'{!Gˬs-e8=iQm-3K--QFE(H%-eF'Dl:AY"Gӝ*Jَ'<YMweRȱsE)۱Pk:smK~3		vSY?HrѾrYMN:xƍv&ᗝ̕.~y9sv1wQKf"OΫYP9i^ <|DHԧ'tOVLFx$鞬:	X:ɨSYY:ړ^G0{buz7D["U#[kiƗ
GGcpQSmX)hpHSHCHY;)l+oS{[<m3GVS纎x,J
5&Αvk2e9bIZo^ìSGBk2lߙN
tzy4(_GL_~q[Kz3\jN^;iP-'o)qJ">~1x?n
7KeC%SP aq%םtw­}jWMwX_SD݌/:TYnmL	Y'-
a򰙱lhե~~!|AΛY^>fzK{3trڸ69o?v|Z<JɧΘw'CarZ͐nr3b䰹=;6]Q8miIX4n556e8u.vN]3\e=Í|nZKU9&x\zO5[(/OeOz~my3(tY5o٣e=ZI^Gt\Fq9VF/xeofOCor4(д64jMLi&~pb6;Ͱ&$$TyweAwA 3i~.8%\B[MYmGZ?Xk<"f.rsEу݉7?w<o&?g~ǛJ
U>ܚq~^RjG+«þXWEZ±`<6E:6OE74\xgMkU<ߎp~|lYYǧͥ8ngU^ڌ5Y#rB{g}U[:c_l+J=4|tYL]<9OH.wﶽWjag{W|&lmo]r$Lɝ2j}kF&_FSڢfܷ&+i댆MHh,-_̑2+wJgimθoQJnGbx*ݍڄ+\[1җ<^[۵2GHg8Kk`NWGW9\7Kg#̯m[h1W_agV83/F93gxp>M>Q9,Cw[yfi=3Xmk2Vρʰu&,4:~v"y]0-Sdw؁5e>k+@$&:cRq7u?H|+gt=;9̎LηrfeD {T޹n.һ]nyNϿzFs'۞#=yI$4ADI$K,'iI$K4U4I%UJNI3%m/i$(/i*IՒH+ivHRIKCҞB(IR$eKZ!iVIm:$#ɔZIk%$/ IJ:Ht$.IGJ:J1t$$dIJ:]ҙΖt%](bIJ\ҕtk%]'zI7HQMntnt%!iGܢ-n1-<Xn-vvEnt--nn[{^nTTv޵=?Aj33f3^!pމ>ڷI{۔xrlgis]JnSuNcCfgnf
s4G,'16ww  OOO/ /// o ooo   __ ? ???    \@/7p @_lP@`0ÁH`0ll
l	D`PL|(ʀr
Lv`&=0*`'`>PahhQ`@t  	āUj`
X 
	
 ;l[ڦ10mE1>36/O-scd!=f*{[yF-P	l  ^ ^^^^^^^ }?0pz`ǐFX1<X`[`0 L&dLJRQ`1e@9PLӁJ`,
`%Z=F1 ,vv B@hf08
X
}CCÀÁ##ccSSӀӁ33ssKKˀ=F?
h:<f`>3p
c  nnnn 6xcqp=ppp3pP`.0vxُO.]#SAڛޓT<ܴRDH]ȉȭ~tp]z=a[F.hz60wow
wF.Z\NEbE`]E
tD.r=/$|JL.=b2!BMzܓ";\ܜ\hUW2(gθe7'AF"ĺ`^hJAV0Ɛvo4r-nXuֻ
|?y<y;ޡ<*ǁ><z'y{x7E<qW8;a!ϽϬu^^c[Bz򸳷m<zݜv;[wQ<ޑ<qw4k[FX"%>ahP3Kb%`TYW,vW[)
=J|MY.dO}e/l-آ=-ſ.~.[{k[|imEo{{[|kl?;-<϶ў(eJ<EwXĔr%aU+xJ%`8@[Xă,Rv+0ÔJH%neq8:F{Yk,Wi'(>EXY4*2&%^gѬ,NQbS4%fqw8CX=,Rfg+sxŹJ<%>b1_X*:%^c@Xonē,*xvJ|bϲċ,jxNJb8D;XM,Wt~%fP|38JɢJsYT4;*qj%c1K3XVs:%c׳OXl,)%ndQ5,&*qIJ\bײ\_XW'#JbRXTwJbJYlX%.bQ,JE(W2J\bWĕZX/[?PKx  3  PK    A             F   org/bouncycastle/operator/DefaultDigestAlgorithmIdentifierFinder.classw@SWϹXW]]"@P"P
RCk#IhHh{:J[{ٽn}
swqo=o=)~E9Ohp(J̐TG=\^QV&ŠnUrWv\Rin
.R75Ԗv+K}h_ϜІgʧvڌR=3K!)*ՏktЩSnf]V5@aCǰ3?-PNbn]@<0]Úi(')kC-x:RO$|H\1n~}P|\="46Z 
2M$FmB]2o-U⾅d17| )*2K܂3blР0W_U91j7#4cdF3Jt7g)b"s@845W0[3mƯی3l}<ko/L7]$-+5nܔ2,
Ei	&pƨ\+692ŔGH<R'ѝh@{K4X`>7ƥު
sRBR^(`nQn(*~S{Sa^[WC*c#TޥqoUZ14SN
xэ,t	KbtEa#GٖA>cy#dUU)a(%K:jnN];Aev]ъjnkO~{0;~ZS /݇C2mƏf5~ݬdU4TAl<S71^dV]-o0FrdcExZ9p=nac{G?]g߿/3FҜTָx\K{5n+ޛ8W(.^E܊ _pd6T]vf2-~ݪ:(4}31Yfr)!xc˼+˼n0?Πx<G0<{u1t^o.K!.x1TUTIM7`|NuUZVfVѸ=S,vxc2vxs:vNUiYs]7ኇZ"̏tdiH"cVa_H"MPN}uDKteZIZJ ٞ8e6ں<8169^"
ckRG^biDVXGH鶈8D#5~_<:}HXVO{IQ=ܜ@6dik4|%~笚jtL9gy-N0VmE5F)hAYWm5,	 eRl@KsvCG">g}ucuS"xXi£U{?N-RFFyXj>(xup,[K8t{$`"N;LfvvV9_]e;#	VSUnѶ`̗Ɯp"BŘdU%vGB~K苹 ex03zX-0Q3/<c9dF^I9TQryqWfС#v3ғr<GF?
p?[mBG_dR6i
ǕE7Ok[8%9=9d׳$lzH6)WFN#2":?}=.o7w;z[guz3v"=nut}&tO6]E.诋|]`]E.b/]p]H]޺1q}t.8&666M<jlbMllix&lya/ċ6Mlī6Mnoě6M줏y9[Iy?Q,ELe-y6qqݓ"-/>
' zFF% UcR{ɔQbAc\Y\B8j?hޣjϱ$H3{d k1TvI!;YeC8Rp@*)T
8Lf 3j`Pu!l8, <@3p8p8X,qX -2 ,V a Q
8q +Uj`
pp"pp2p
p*pp:pp&pp6pp.pp>pp!pp1p	p)pp9pp%pp5p
p-pX\ 
	 6[c@8$6.!1	)9%5
-=#3+?

;v~~'HH@r>!l+4 !&91+0yC4ʹP68|hMpMrC̓<.KvY&q@;X|
|||+7?

	@ v vK`+0
D]W WWWۥ[l?y
p*pp:pp&pp6pp.pp>pp!pp1p	p]NK ? uZ`p=pp#pp+pp;pp'px xx <$#&`+<<<	lOO ;WW׀ׁ77J@y.>!	#3+.voAK+k[;<XlLĀ8 j8X,&hrmH,"`0YϕN8\9M+ghP`/`T.UFbm$0&OhR4x>
:74&,
Y# }P`ũNdx<	Lj)Imߢ_Fx*5ȡpZ1CXTn־nX/ܬ}Ր.*ު#~1ӆMΠᩂW":i%eK?ib()Nj7iP8]I7ݛ:Efc{E>LkEb&3ָ^'w.%;Yd݆L:FjkNͯM!w	hRug40?	3,ޠ.y.1sɞTZ0<!,l(~^؋1DO J&ɉhldөX=mUmE6knIv{owIh.OR/o^.C>Q\>6)rݚԮPctّԮRIm"HjdR^ZRYmg*I'|oRsMv"p"ڵԮS":j!Ց|Vm<xq{	_ѥ|E]W<w%]sW5<{"}>=|c_Hj)ғS.JjtRۮ>due|\nT4.<j|0U<x
u<K.re%r<x*Z.o7sy(rysy/u*gӹ<3+ݠ;/p=ryRgsy><.b.Od.Oq\z<.rrKs2r.\rr.^.'r9*b|Nj(e~s_ޗw2Cd.#9HyL}D0H0H
T^O$G)'{+'@r?eHl}w_)'z"iW^O$s<EҡHW^$(/M&[>[oisJl֚:l6kZln006Sm7i|l63f<g6t2^UQ,?NSJ_'YMo6j[PK(  2  PK    A             E   org/bouncycastle/operator/DefaultKemEncapsulationLengthProvider.class[S@BK
^xF[,rG)CIRF ΀Ȍ~$ǳeLs{&? 
?re"kfO24O:j3P25M#ZHF.2tjz
Q)uZ<kw=E [-&CǹSbW2C۹VPkY)p0;X<^X(˄+p2SL
Ea<H#% o*F}Nl][9yvdjڶ`csCly5h2G>+عTC]2yu[r|=-#$./:jj%*Oڶ Q@k)KI;jc&=2_ww&')d?h0Eˊ_?};I%*crсr8$N.789ZDxыx"	{z c18GcpDDȇ>$}Ǆ0ZqSR$ތV0bd:H>MPpSG|ED-iJ֦Em>zu~ -4oK^#tuUIIiBjw*3ةJNe^r*sv*%T$r PK3  )  PK    A             C   org/bouncycastle/operator/DefaultMacAlgorithmIdentifierFinder.classiS@K%Hrr#Ri!	%ڦJ"3PI4
9w3響?BG FM<y\
<Nu𓲮5MP;Yhj>&oN#BN嫃ceR"{ذW.'o`X2$[A2EFMޓ5>X"{iv
;
Uf-̩YQuȈ;LgnQtq^o',A}vMԴ31%Of2Y0/tUFX]Nt{򖘌N9;>5Sjdw弸Mqf~"*̬,3'Ψ[RA9G*?rzفlGiFNYJ&JyCC'.=z9q9ss0H1^v=qaQS܋N=E2GG(~*':+و2""H_3|g
TM]'v71v@@7"T-&Ln3.{L3yC&7p	09f>>8VxE&KL^0Yc~L"$$$$dŏi<`k2K&xWu:7}5;M	_Eq|GkMv}nb܊*к8Yߘj{?ND0~hL9>6"U {%sU7;|ϸy÷ݼʚqFu29P}?PK    PK    A             <   org/bouncycastle/operator/DefaultSecretKeySizeProvider.classSV?AlGHMS[jja8M\4PŕeaBrmBiL^dif:yCtz0O}ѹW~Љ_| 6J	G=H$Ñ~4,9 <FH")?L+I 
Ɂd,통9aIƸ3=' A}Q1Nrv9tM紩z#Vb$ڳT2N{#o^
j^o"W+ި*ŕUYborS5U)Jrb4sİH*+JMMPijZFK"eVK=ZRUҕV,[;Qa9YboiFWeSrrr^иnM*.Q8=L_ɹq]diZtL]VVD+#n9ƔA޷X+,;_;:Vy/cuQT_2<RVװ81vXGSo*?c	e8+_?]ezAu<O%Qtp7d6Yp7Gy3kpx+ne١Y:r4KlK69;ffLh<)hGD{EE":DDDDEDtj
ylZ&TU%

U?v9XVa>XWrF[˱Fr]+^N	:T=ZWu	>IcXB@h$4	-	7vn!n%$FEpN]	{	=#vFBj%aF$Hx@B=K؄1	^q'H	?0£i!h,A'LriG0G6!}xȏ#$
)L Q
`?88H8Np&'
`pO!agOL,{ctRٺX-5["f;vlbQ
캱aՠoXZo.g\9W3c e[l~g\5?k/*>rl>l\J_Wo/8F_
]E|rp	_7e|?b<>nµ.Pe7<U{s$2~ӿq9N*ӿ_osw8{N.y2^݇ PK("슸    PK    A             I   org/bouncycastle/operator/DefaultSignatureAlgorithmIdentifierFinder.classw\gog)(E"1N$IL{L{{o>;{s{{@^yggٝ-'BH#Y.nȾcdF`@Fȡ1qɌȩȥ\Ml`d##͌<ȌAÌĜ2u');nnolmk[;"zAŲƦƥ5KTV$qQͲR7
+CwrۛQX.,E%ɪLhJKĪ*+#TV./,).-Vyk%ƙe%%%峐1fL
	O
	SdCt-blJ*9P=">p6?O
ڋ_9?W\EEuₗ_ RK/3LNv\(-.Sذ2TR&
S܀YN¯oX,-qOm9L,V8E!3gjʘ11vIʊ+%x
M?~ԇ++ŖS[=JDIbKW44,1zLOLZ]m!
)'ՅtW11l̙HeiK,X#{[<)ק_ag~Ksdo2%98K1exf/eΤ4TT${iMCu]UIwю;q*V.9v%rMz*'޹kq?7S+wTcf(le	u}9ZnqՌz	HXZZ)"+nA$[sRAd[xA% Mh'{!o\
%kd'FMn0&4P?u3-a	Dy,T<}NL-ezg<H.C&2KBͧǣxʈ;p2ܧ*{smj`Lh-NE5!rsPΥ	f{"VT7doY>}F+8(V|ܢ^f
Mh'uЯ9h.hW{J
ΕUqכ"S|vGi׹uļk­la5ix}ڨdezlwNm~<フL֜`Luu!kҪNM.Ÿs@<%'f>!>^-MG̓$#lC'[}Ɓ-O_\휸d]ސ_P_	Ϡ$!>gѿ}"}K/l:Cu3g"lfӱzYbi
.]2Y17TSP[
7K_}oo<)Joo}{WzU׫mPQdcr!k5s|>v	>V|t
Dk5]vDZ;ñ=غHAOdﵑh,2 ޒ33YSg,|;(5(i37--hoiUm%m%
pG$0B녭 	+D#΂t['^  ݑNQkꌅ:-CőubV"a,"n2	E#]j[+JҦp$fz
!%^.,!yh5+MR|hN7)"H=([wEF/nߺ2c&N1ʱzM2))ط4^vQNמDkwDc
 -ONKUmX4fk$&@kW4ŝMsRd[OhkgT!Ɇ[D7&|ׄqd!vw=~`M3.UX($T3\U#ί;tߐ=vwu7:[|Kj[
kO
_R%9<
nH4X4FݞWR\|횻ǯ3zbqa$wGF%f}\|-;UK./-I>}<=R6'!K&7X+DP؋xmrMO4^kra7hS{GiXG쾎ch.Q:Ğ-mOT8cRd%[Q٭RUĳ:_j|r?G1D>|5uˢ~{2  MU$)[_-'Nկ|"ΓoOܚHℝk:4P}MghMį)J-&5
G񴶦9ZҴOISg
+H
rN*H-?'C&[i.p=xKhVb_nm-Sr_9goѹfw/Ea5ΒMZP{.Vcvnd_2ÝE5p{EO6Z_s;ֆIAx"KVi%BNq5_wqYkk/$[/Yqov_E;{9E
gt;˥:֢]k;5HQ8YRT/=Z+#!<uTMg,Ҋ9OKcÚqV!8?zivl._&feh[POy)*EE~=Z8E?B[3\TSQ_ӥ4EXE5`h6	Kg[4VT_j	j۷hI;T^*|X@.ǻ_ɶ=]h,-X=Y+DPBӱ_y"kJq:d+»#=XWOQUdUxm{,TSn[ҟɛsʽnklknrߊ1y\r<f_Pz T4Nx׊;}PmESwSxb7jD3;"0BGS{
k}R#OŻ`S>+oɞQ޼p/ݒCh)h((GYtd8bZⁿ'&lR;Œ6Eho	}&{NT`;{M ߉R%p}%H]t1#_L;6IU|"IORM_I~HN^+ԷR&Mt'}-wȴ)}}䍦%oEWe7Ej!^{)uׂO^b_&b]M-#ֵ[<ZT1cm4RzB>1q?)XS^)(-3Wk^ւm;nr%X=o	mg1OGsN4xch@nR(kRx	d)ý&w9^OjF)a1RlF02yl֌lȶlT02JFfd#YH
#;0ZFgd	#
RFB42ٙك&Fd$JFia$*FZ1#kigNFfdoFz2cd-#1r#3r#G0r#G3r<#'2r#1r:#g0r&#g1r6#0r.#1r#2r#3r	#1r9#W0r%#W1r
#2r#3r#72r3#ȭ]=}<Ì<ȣ<<ȓ<ӌ<ȳ<ȋˌȫ댼țیȻ|ȇ|ǌ|ȧ||ȗ|׌|ȷ|ȏόȯȟߌȿL|
f̠̰1Af0f1#dF32#Ì!ʌ\fcpf`F^A֠q[и=h46AcSи3h<4#AѠXx<h<4O3A٠\x>h4^/+AՠZx=h!~	sJ"1aP5(ﻘ"""rz?hm5uLZ
wc&Oү~:D<^f~7	;mUoTS}sتfj~TuqPY`\r9??~L)(0'f7I{ȜiL64  Sit`Pl	@	P
ʀr`0[[ @P
, ``1PX
F`X
4{a`% `
ڀ5@;t]@77DX 88888888
88888888	8888
888888888 
	Xl> >>>>>>> ~ ~~~~~~~  	P Ai@:dY@`
r!P F yH`0 c`0 L&22####################rsJ&ْLfd#ͩx`@`9M8LxMof[f̢L#,$ef͙D,xߜ4s f2*3sG'gW7wO/o_?  L0 Hҁ l`00`80F@>0 `"0	lLls!v @P,
``43<8888"bf5> >L3s 
Ā>~:` @ i0(4s	@3DU@+h iq	I)Y9yE%U5
Mzw &N`3pp7pp/pp? `gvK3GGO OOOo ooo 陵mC#if2
*z9<8
>,0w!Xf3 syVf&@ts`VD0EI7Йts
[hyF2`3n	VvDkj#M8Q
%9X$Ϝxؔ7{N{l",Z8Z6Xe"žgq<
m*\4Wly/7Y&YU#hcH"$[&&j'2eq/q,pO+rDťsQb)vʢ䔔抜^AYbfs
nl63W:r5[#6X[0*r"%m7Ziɪ
̬GԷbU3kt,MB7X[h}0NGe@wC̿IIдfп!Qh*QZ8jn6Pso][k+qm[hmpqqp+q8pk($n89pkcX!qr9|89pyqsӸ5G*qsxӝc&fh8lNq(O>#ŵ>+I>'>/9 Ņ(ɜ$,Ź"E*ũ~!Y~)~%ť~-i*lsLʭ-VnMhnM*nM:nMb)K^$%BJ4pk;rkʲLYvPZeY,urHq8JqIqKq
WHq9RiqzszGrzpzWsz7pzpzgrzqzpz8R^%ܚ$OeOYn)D)j)))n0)6pzsz#RqR)6qzrzǫ7UTU[T;UT[9=I8=UҤӻӃCåӣӻc!LR"]pZ/ůJ|R|R|i_s;N[N[n)C8G9JJ3xx%R|2)>4$眮SNKKx)>t')>Q/8E8Y8T
N?ϥ؞iUΗbZKj5)8}]5!ţ)Ü!œ-%ų+Ӝ#ŋ2x[DWeJ2R-K׹Exӷx7xwxӷxxwxxxӏxxOxӏZEVI?NHq=ӅRipz+8O9W#EHK1)Q)v)vA)v!)9}\>!EOJRtrz^/E;I[qʥؗۥ؇ۤ؛ӛf)9]/E[XRF)tqY9 Ł)x<Mւ Y.MO4MOMk3~ViyM5_+~Ugj,M4}y>_k"휌h-NӵShoM56iiSM[Z75ۚ~OjM4?ǚtwޚ^鈦Wjz_M4L!MjM5B5wt;4ݢ鰦tT{iUjz|miO5?k~]ohR՚M/BMhM#5}	>Yӧ~>JjxMS4}^5}UɚZ5}=~Dk1M?4~BOjFMߠ5}o4횾M7ifM-C5Iwjz7(]"5!\MpMhz5B_j+MmkcLm7X,8-{FK<
o+Q3={v];9źg1Ḷ3"J5 '/o@H?:`ȼ`X?9.3*5hm/.CER/RWӋ>8N/ϋO?J(GT*B|bR1_;1V&2ȭ,)5HRJQ|)qk5VOJq#Qʓb4FJWnJߥT"\+WbJQJ\+rDru)JO*Ѯ\mJOPbUnPEJ\Q%RV%TuJ\\pz<8MN5AY&^*+Zl+PoKG-uCN0Ua%,%*M5[J2{J}%>R	?T%>PK  2^  PK    A             :   org/bouncycastle/operator/DefaultSignatureNameFinder.class	x[;rd쐘 IL 9lYI8؎LpKEdh}Ѓ--!9H=iKIKޮ
"ޛ̼]' ڳ/B	X-`z\$b[!`P].p	W
JJb
/p Եލ0	wv;;,؂½A_6w!͓d:ۂи@+؋{ڶ`==18#;
׮`U]K=\EGTUM},JWA
Dj
r;GwyOwOφOφ2@0
 ☺
*=:78 %]H.낂\\bTg4JQfTݟ</oc992̦#5*-
J(he}~Qw<-%ø"r-x
d[bq R9vByM-y"q*N{
XŉOKK^psie_5Zs^*-m#q1-$as^yѕpT T;0/VcFvGخnCXZa+<NGL1q鯈GNlOS1JcWΈSJc!ʸW\⸀q
:2c<wBV>rj:qMΡ@8oߦ^Yj<:8]]{7R3<.r3&fn.1gϜM̤֝sf2mLVxr*a,e[D27m^1k+B3]$lJe^@v;QfF.[/3ˍ1Na*I[ff|u^zƏwG.̔{T"WKMegFЭجLYN.;LkՠLԦTRiæu`{"tfV%jS+7FCް=ռ3T%Xv:^ӦU6dܮ_S2ĝO>
5+ƈװb|SSbtmwB_VmWn
LMŦ-+bjVrJ84cYLsz$jI-U<6Qw8\wwgCi|fzDcjNKت~VM~5jSCՔOk;(]']Z]v6Ukֵ"\gORXå:Y˴Sw@>Ցeyl?E
ZXvz4B'd{-/@o7mYy/*5;g۟'iiW=7ꎩk+MG~{9&Oމך@LOSĔ\"rh21Kf/zwmb2WbɴD[M[璩x"x%Sz
-Xpd<%'V3MíلtkwN}&W9?
̥'OV.V:苎#LܗRk{,.ao\*ݿJF9nef@?KٌGpd Y% PWH;$i qI+׾Lǘ=0iFwG=Bl5c>olƢƊr[K윪ĸƕq7Pr*=
c+3d%|ےi~͹T͇ΩėM&f":[^VSrT_Uf
b]]0bE{="GB@B-`lY0  "`.Sa-`pk0) !`iI
8  %`F@Z@FdXrpCxx	x$E:<ã:Rtw:^?Gßuo:]Oÿux\_Pa:C}ywVچ_kV_V+}rݣ2Hs8mRN8lFəd.yОMl]QjFz҄p3=8P-G5zNT/#{eݵg^slXGb%K	/#
+	"k	#	o"pv{%	"E0#	G%|11q	I}S>A ᓄO>M᳄$|	D2+F:oE6;G>~D1'	?%s/O) B#A'?~S~x'IVbƌނ~x^Gw`"pËz?܌p'>?<⍄/"p3­^Jx^+M7n#Nxëm|ᅄw$n{%~$|pÄ&C8JpppppO'<@$SO>C,s	'|EC/07^Go$pw	#|߇˄pJoIx>r+$jNoQ|	/6aOnqR'Ǆ	hR&4£4aJ9M*c_G_~~ggQt&%|/)l T{+: d@-Taq{59u7@J⨶cIJ
nS8Xv\|kOjWŢS\rN*%iRk9]<Ru=JSaݑǴ]G
 uCv<.U}L9隸Gic4qT.
\wB|6~I=wT>Q=4.iP/;ѽǵl9=
*ӆxt-UXh+.t9?Z28.b+)ȁ㴎qwh xV<=Ԛ]k֪R=J\?2uxS84r mWu6|'+ⓆSFjO^kZ8nbnXmq6gs/F=јퟌfnl/"nipWc!3nnHnaFx'$?<8J&26KkI<)fU
}8p,K<XH`a [$gb],t8^ϧI\BYhΔUIi^ZD.(ޱ$*%nfač,x	H*,\(q+%`M6JbaKY{Y%n`IE,$nb/y/f%@ %ng8B;YPG]RvcuV"zu.uĀK]&1RK%\Ws$qJ\R{$^K\F/hPKɲ
  K%  PK    A             ?   org/bouncycastle/operator/DigestAlgorithmIdentifierFinder.class@RvՐhD",%c^x(wsﻧ_(='S,ZIBc%F'.̬XWR䮗Ic[sZ(aWJ<B1za*-sfn+d_a(۷?qB(m<@Y.PKjQR     PK    A             0   org/bouncycastle/operator/DigestCalculator.classRJ1=mޯlE-VEAA"qlwe7,AP(q-(ZL$3gf5,0gs'll!eSz!$Vet^(7Y1_`q.(}UۯJOK%$v#CKo꺢)jdUJD<
w-nwkix~=v%
5?ܯ7R+%w
޲إ_FBoܡ,\)z,2,NUIwH2D|
ĳn>@YA
J@Sa4~
'1N`zWeI5WFI,mĴbB#BhMh_$nFzfh39PK=fgx    PK    A             8   org/bouncycastle/operator/DigestCalculatorProvider.classuNA1XV\`!zSk>GDlIN$3s 
DQ`hf"V6#oʛy0݉V0l
aE3V0$vv~t*@R$EaZvuQp8.vdkcƷ52TQA1,V3#+ǛoPKKƸ   %  PK    A             5   org/bouncycastle/operator/ExtendedContentSigner.classuAt@j
Q	
D	fw15#C֫)<ts-BG_jŅ:ufGhg"E.8)۳I,|IoXX・ʼe\L90"T"T#^eE9Lŏ!BFF	/PKFQz      PK    A             *   org/bouncycastle/operator/GenericKey.classKK1ֱJp1
S.D|!bApU::S(_)X Zr896VQzEHy'	Euۻ6wqA\	y%\}uǤ\=0|׾hu#	pVp;eA&ar9BFJ"DPhM%ԛSoڏҫjXRٜhzc'360yQ"(RL#!v9!}aATZ ϨN#ZXhU=GU9Ui|cǔ:Fvj鶬Tr!r[PKsM    PK    A             2   org/bouncycastle/operator/InputAEADDecryptor.class;o>NFĲDļt}FtҼ⒜TԢĒ"}GG"F
=
JK]]\R*J@5(+eg`dg`bg`fg`acd`g`e`b``c  PKߊ      PK    A             .   org/bouncycastle/operator/InputDecryptor.classm
@ Dg.ѩo0)"ulEwe]#CGE)ȹÛń`{mE(+RiSrYfL%[_ƺR欴Ymh7=
nꢱmX[iϑ`GZjs(X.Z9
Cv0n/PK1      PK    A             6   org/bouncycastle/operator/InputDecryptorProvider.classuNKA}7X9&XȬشVFOF	Wp -J*^%| FhTT]̔MzDVHXyri󳟓[̘7.PPPvWy'r%?{qڿ̢!@!XX-xPKEZ   !  PK    A             -   org/bouncycastle/operator/InputExpander.classm=0 _]W0988xB%PF`27/{/ ;L	c&N-c.MrM&5/\,'hƤ0!X*-h*="VSUp͌ҴCOud̵q?rC@{~x+'̉?<,f	l&mPK9p      PK    A             5   org/bouncycastle/operator/InputExpanderProvider.classm1@EgZ&Z*X%K,<2B?/y
 [<¢䎩b霕*9єϜ_)rN(u}ͶPrיc \ɍP[Pi'i77$YMWI0`PK}0      PK    A             >   org/bouncycastle/operator/KemEncapsulationLengthProvider.classm10au:U&'"^QWs fޟ 6 ԴتP"L+IJ\e@9D:+`X=ř?ջ^%0FXϳZr/F9CY۠oa`#x/PKM@      PK    A             ,   org/bouncycastle/operator/KeyUnwrapper.class;o>FԼԢĒмĂJFǜ̒\ϔԼ̴"FĲDļt}FtҼ⒜TE@`jVeV$d303322ih`L,3ԯ05LkF(
RD;a@wP0e&=4b6Fv6`bad`bd` @5@
e PK   t  PK    A             *   org/bouncycastle/operator/KeyWrapper.classuONANNPC	!FJe%eo5j> E܋d277f^~2y{0δ&K{F~JI|akpV,B奠"jFfw8"IqExhw^/{??B%6+5*fu'ٶRPV%!TP⌘xMPKp   @  PK    A             <   org/bouncycastle/operator/MacAlgorithmIdentifierFinder.classm1
0ڮC(XA:	"O7McJM$Ws J;=`UƖa
[-vEd ̝עpg+o(Nsp^lY.	T6(H'%Vk7VgN5,1	D袈@}PKq      PK    A             -   org/bouncycastle/operator/MacCalculator.classmON1㎧Bʀ@!@)(6f99v!k| B"̬fg4;<^ez$AݳD(p+rϖɨY	3O*0ƌc\8!Wm뻭BY"ԃ>E7|H8ҿ4cvvtnΦzµI濆%a(+ʄPNPK(8   :  PK    A             5   org/bouncycastle/operator/MacCalculatorProvider.classm10H -π@BTH .1.N_<
AH}/ X@LCQiCP4AhjN5[G	-d0 A8Mv=k?r3Al\ў|_#!SQWPK0\@      PK    A             0   org/bouncycastle/operator/MacCaptureStream.classmQnAݲ[m)j),jjjMHD{ðd|6l|_ 6F}ߜΙo]-{Πgs;dܠ0(=5j1+0$A;=w-&ܺ\&wfvk|7*]jEQgR:oTb%<*iKlQl?:ep;.oM/zp7E;F
mQ;O}Ԅg`y
06[a͎G~!ow=WƔlb)DL0k"f"920%"R&ͼ4c1(5B]48Ym^{'z>^C\LQ\ʀ<=̑MBRgdmE;Œm}t9VK<?h	_FfV 5[钊+#8?A^	 ?דzf켕K=<;dMh$IMjۣ,EDGg:@IfͽݖrGH*5yhτ:œ$$`yF>"[G@PKN$C    PK    A             :   org/bouncycastle/operator/NoSignatureContentSigner$1.classQ=OA}{| )XPXńj
],?e;ф7̛7ofg?>԰s+]^7#<oraS3т{COL$C;|QS{&Bsw:@r3բ҄ŋʇ4A!q}#l$m6lH	Cɭ潌HVd rȧEvސ
|9fM$ЙcaGY`8a/B18`DH"X}3³C`e*ѳQ1X[QHcD$ɚGc;lJ\PKv_    PK    A             8   org/bouncycastle/operator/NoSignatureContentSigner.classR[KAD׬M
LJ$A4OC@dLue֗?J<hTg.so`!U(3ţ-
Oy;è+ͦ3g
wɀ!K\Ff).y&
$ƱHt)sCp_(˺aHEh|Ejiw-A8W#dX~Aї2F!dձxu~*i{RB ×εmv0^(/t#Bbݵl:ؼ[;9A
,q O60a#IyL4VuFVĬ"ey| 0MnVҡwN?XkCWnbwHI@3CO%6McvMk}PK3\  Y  PK    A             9   org/bouncycastle/operator/OperatorCreationException.class;o>^F6̼;FtҼ⒜TԢĒ"}(ù(5$3?ϵ"9 `d&AT'+,Q?'1/]?(3/Z3A8HHFQ~ybRN*P1 Dp228秤2(2  T T<@0320kilgVRU ٴ3pA PK,=_T   ,  PK    A             1   org/bouncycastle/operator/OperatorException.classu;O@gqlatt
]MD)EP9#.\x+@H)(0"f{ؼ8Et0"4_FJQI]\-]i4ahl!f\\Y*+bZ:F#FH8N.*5b'9[b	AO#؊;h& Za+cv"b)VkBg_}vޝl'^
2y;Ю󞧁0{FPKG   |  PK    A             7   org/bouncycastle/operator/OperatorStreamException.classu?KA$9HjXv	6BR(7raϷJ@	XPp0ͼ]B8FsBRyt/V\N/3к\d/\B	PNzt'SᗉPʃ4sI5yςYmQ2#?DMf1* 47P[	XUXZ\z[t(*PD }E{]
PKd   b  PK    A             3   org/bouncycastle/operator/OutputAEADEncryptor.class1
0?U< Y@
䅗Ws JDo^L.ED<JwY`(vBlmnL>LpY]TĶi9j(Jc4vGPKU?~      PK    A             0   org/bouncycastle/operator/OutputCompressor.classm1@DgQA+<Xj0Tʄ,"v1z5ࡌN97`8mR:TSiTִ'#E0Y\Q&cbhH*Ƣ\r]J#Ha(*mttPRs~Yaoy'_6zhc5JB^PKe      PK    A             /   org/bouncycastle/operator/OutputEncryptor.classmANAE	 .tf6XV.1MSMISc `bLSx0
`y*^6ľY$nce%pZj޲BC־v1z/%+_qΝ	MׄQ/=T0Y[3;Dx:L_Y޾N)%z@Bl PKde@   :  PK    A             8   org/bouncycastle/operator/PBEMacCalculatorProvider.classujAk۸<&? ̲@D!vl7#2;j y(qDICW/RvAqC{l!
h:_ȥYuPTҕ)8/yke#^O-ڙXx+	Z		:߃ϻ<UYoOc95:l?Vl^klx"oxڴ	$qPKO   $  PK    A             2   org/bouncycastle/operator/RawContentVerifier.class;o>vFvhh'(FĲDļt}FtҼ⒜TԢĒ"rԼԢ̴"F2
g`e FFF PKbu   {   PK    A             8   org/bouncycastle/operator/RuntimeOperatorException.classuJ@5MҟZA
5QNT!ęNԾEpPeLE]\|g}Bp'?\o{+EZN>frfфCST:[dbn,5
>RFsMiĴ#K[*	a0i$kkxaV!6lcs-N?B0c(_dgN8xw\,]A5wO^}r1 PK_2     PK    A             5   org/bouncycastle/operator/SecretKeySizeProvider.classuA
@7f:F&ʥxQsb$;ZС,"zw_ &2$Ց:C?($_%k#yER'9q} #6<|Jd<8ZO7XHQ>>S**2a0'NьFKupq<՝fz PKi&      PK    A             B   org/bouncycastle/operator/SignatureAlgorithmIdentifierFinder.classm1
0ڬC( uD
=Aڦ1&7Py BTYWƵ((g!ukFsŭPmhg*x5N1m8vVVi	I֙dȪusy]VĄ"QD PK?՘      PK    A             5   org/bouncycastle/operator/SymmetricKeyUnwrapper.classJ@MƦQSHS.Dĕ(cLt[)('"(\=ww6V	(ZRIs@<+4W˄9eN
g9W;MDjبVi+BsSjv"utZyUh$<4=<x/&?G؊A4/4	cw
%m9u֢X׳cOM6>>vL*Ym&?PK    PK    A             3   org/bouncycastle/operator/SymmetricKeyWrapper.classPJ@}M
lzEOAm-IlW1 ?J܈Ѓzͼ7`F	#YJsL<SZlLe4F
M'MDjJglʴJ䂩(EutZ;]UE!\#/~9aǑA/nڍ 
t86|X*=UcnM;pm.Κe=[;dhb3yF=PK||i    PK
      A                org/bouncycastle/operator/bc/PK    A             *   org/bouncycastle/operator/bc/AESUtil.classR]oA=ShV@@KUZub
	jB5i| 2NnvZ| M8K͞ιw3Ώ_tQ|I5L-GG
?彺clKZ\*JAg0T3QY|p	 B$acƱ[{]=)\ ==kpS\ߢmw1{&)25ǒFG[Ŏ$]o47._\X
r?*0']1u{FsԮ}&]My!ጆ2~*:)}Xp>aEkDCVc󰚀	BDSѥqLJWC#YPБ
3n	M5mQ%	PCSQFD>OA|zӱ|C(*}n*ϫ-ŒnfI 9G&0fH2y/PK{M    PK    A             =   org/bouncycastle/operator/bc/BcAESSymmetricKeyUnwrapper.classJ1Oک\.ER"Uf!J-dILDg#( >e;s!s?AO攠6HH~S_v8$SzHQ	9e:\-ж ǒ`{W1ׁQF33fNEh6]dgXsCÜYJ:j׮s9vGeOGUiaFk x2a'sol`z
r 躥2JX.c+e,JP8W-8CVm`Pmaj^0~ PKs/  y  PK    A             ;   org/bouncycastle/operator/bc/BcAESSymmetricKeyWrapper.classJ1OڱSjmٹ\T]"TBt!W2ILg#( >wp_ NPll愠qu"$yWN< Uz@I9e:O\,Nwô;[cJҴ|mDLО2$Ffq?	&9%>Aq9-Q0ɨu^--q:}nݩ<&F<k xagDSVP EW-(`P#Tı	'!PUj;7||7D9PK+  u  PK    A             ;   org/bouncycastle/operator/bc/BcAsymmetricKeyUnwrapper.classUmWE~l;lV,Ji^Y(bmR$
5 ӳlư쮻CJ~p*|&ˑ~3syyݙGf1ɇB.0\㸎0YY/*ØKh8q6*G{GB82Ԅ+b.kB.k^e*\|稰:m0jASY1YMˬ[nͬPnpԫ
򂚹v˶BYBeuvmgOز;LoR23ݟr8?s~`-_zꞽ_t]/MTOpPmKs^RZє^<C:v:c>c;*&uIcgS;PSJSqa{MCA)s\xu78p1UQ2?zjUw]0G嗛>Wi8i|r:'2vTwRuQ̟]PV'BðlW^aO~:N˳xUu{=#Y2%wn^a^$>@ Ɛ4a;wF2ddZeYicnq|<c(W|cwt|I|:>1N5VfW7Aq|"-{7T	L;Gʟf1k1lj1S#2agC1O
#.RmWXW,>A%l&y_kii6q}3=aiN;17p
k<Lc_(3(rX$)(uF@Q
	Z4OiR\oPKj    PK    A             9   org/bouncycastle/operator/bc/BcAsymmetricKeyWrapper.classUYSP@	bHIŅ":Y2(I&,W:# 2o>t<7d|gι ghP_Iӽ+)	&,$38{<	yf3Ύvr/XQg|w<nH|z1[,ndLiEyo;V^~nS*aG
/
 (0մebrl	#a WX+9v\Aʃ*3̗&U*kgM=eVUEyͭc2Ȗnf9j$ex;λs6NQ1ӱ9׏F&4+hQpAA5c}aE处љTⷤe!@olІ3I`8ַFĶן 
ne|.o2pZ0켞!j|ªlz,ERT02*2^j^;3="LjUz*.KETцpK*jѭwTԣG,B5
#c8N܋pQBx1	GxS.x~5R\QD$HNѪkilv1JJm@x/)ԡ6YqNh{x<}r~1Gr.	O> ZEڨ 2ޏˇ\j>~%x'FiߌVUpuY:eY0*PK  4  PK    A             ;   org/bouncycastle/operator/bc/BcContentSignerBuilder$1.classT[OA\D@pM*
1XfwODH(mŖ@h=/ cX#Pg?2Oێ-1ܲ%I|^8u邝%#v,Dݴdq,xb2Жr&q=[n6#O(1)3&zY)|AJOAr"f;s%%,~ *<zR]/c݂cZܗYaZn^f*`s垫yyqzfu$uzP9G|W P9Rz?~eZgj?~ag\i)3['ͳ}t5\Ф!YCZK獺XlT\F/CQRp/lZ62!uE%;xr¬rw)7vp-
*Vp9QfmstV3UZ` *]fB挿	(v*aTrt஁63pj2`ƀEzĔ7P

"1uBRGg*26Fttᑎn<Ű"cJSmsu}:e!7]ښƂCO?GSqUr2ϯ= pI+6xc5ĻHc2q8}L}-<5JJSWh.yԑTL/)R{KGZ?B!<8bx6pA2
a55zUO$=A=PK    PK    A             9   org/bouncycastle/operator/bc/BcContentSignerBuilder.classT[SPҖpVV@Ţ3Pxm,#[JM:IW而2&qOUa<9o&ǯ ㅀ`l䵀)4\Z̜qɤ|(Ⱥ4匢lJ/R1Ko:(dl[[FyI]ږ4.7N[,歪tqKLZŵԣcg%T4[+;2wej4`
5ײ%?pemtR]'.N	?7ֵjɝ=V07͎T"$%tH%``A[SF$O13nO$'Ukh-c`6AӐ"'hi?ҌQ`{~3}ޠVsr'x\3zȟvϛvjem/Y>F2ꔎ!XӉ]JuPF7nȐ0  nq #[<͐Vs7J1A/amCtf۹~9t+gM")ihٞs5݂VY%&R^E:R</y^,ɷ@;dj ~eJ|R'a##
xnRZpy*ie"O'#п}< >-!ƽ 5%;^d"OB (RT
vN~)QoPKgiG    PK    A             E   org/bouncycastle/operator/bc/BcContentVerifierProviderBuilder$1.classVoSGmWH6$U5J#L7ǒ
7{*)3{BK^$Mr>=x4A3'1az'h*ˑ6uFxP2_$t=1~ ָ;BQ.E|f^(oI^/oO5ߣ `KSGm]-VaH*n)H_ֵʲ!CF[xk(ZTdzZ*7/-D(jM]?Sj1y%^e]:;uTSEX+*=FbԲ û6ela#Zp,|02ORӫonϑDh3*mmLj]<Wfߪ}1㪒?rM̛sANΞm2:B-МCqbzCdKT6	a]N /
?3%֔^@R]uM;Dxi7CuӺvkc'|>gcA.;@ʐiH;Bց/uЏ&0kW6.bƥ&j׆|c\quCnژ-__^n҅6x5X*隵EB@%k<MM{C#uE_潦T&çH$6@#!}qH:,q7O}4%_qJG>,_c*_tg[XxRۘF#aMEcw
)i&><Fffpy 6q{56Rv+I&	ĭ? Y4{Ce&	܏q*q$@3I҇PKkr  5	  PK    A             E   org/bouncycastle/operator/bc/BcContentVerifierProviderBuilder$2.classTNA.E;Jt@C"Q		QLCdN	C	FW]gKTMf3 a!mkG~'6<ER_iAԄf~!s-e{dΣ.nÚZVd+t \kܲP@5%PwcV\2\D*u[4i֧=3w{]tH0m lU{.RlC8vSKoDBn4Vq53'PqiS7N5ᾼ_zKq<vG<
.5|]o,W>]܂O&4AtNo[O%
͖^t}gvZ=oc1``qXWj
qtS6Fq261WUzFB/VKzAG)bpCb,<I}H亥vgHJFJz$.R˓u		|q3.f{+QKP4tL<m42,.0X𧏽?
|7M:D#f|Bv_{\s*nYӬ'PKW}    PK    A             O   org/bouncycastle/operator/bc/BcContentVerifierProviderBuilder$SigVerifier.classSkP^5KE[uuB6/2l0P)OY<3&%9-@A(Kmʘ&|'wO_ E{%i
櫎azPR~Pwz7[R%6'j<Q}
Nm>}ypW\';+cs-`k:<R
B
D|wб;0ʑ;b}+}jY;Ⱦo\Nԧ䞌Ĉ8	a^CAaAȰq,'5{}gp2I0d`jiUzCIrjs<82Ƴp%*udu`0z>u=E"bX8EjoS>~·@`8ݔ~Lb.y.zfh=K:V{K[X~ /b"o}^
kmr:Pʋ*;xa/ah$VTN豰b^#nKMu5'PK̰  /  PK    A             C   org/bouncycastle/operator/bc/BcContentVerifierProviderBuilder.classUNAQET(-7E($6Jv;%eٝ.>h$>l[DEDt;gf:~|
`O#[MmEj&H$ИYCrCM+m"MA}헟m)+=:VJ::p
S<
5{Ɓ[O<+,fhN7	i=l3optYe3 ']C8(1N0-TJslm]knɺtgb_,5aNUc2b"O	+.R"'9Q8
Zh
(hSpUAk
+Pɠ7	Q7gcJ$few[p*G9Po	wz62#bL:?,_V`4<{R?}9v\KSD3FG°W3f?fd2F֬l/{}7г?aKVZ
H*0S}QWtoϽ#.A^Lom
 Ai
]
uOC[p-n4ǔt}TяV`tGt/jq$2qwPn)R
"K!Twf
hf0?DuStB1G?8s
z'<	c
<9Cd=]䡆78RJAX^$;Dx:'PK    PK    A             <   org/bouncycastle/operator/bc/BcDSAContentSignerBuilder.classJ@ϴ}zU(. ATzW1LIF>PT|(q&X^dfr?^^` :<&h[dGOpWQI*|KϾ,2j%)hrs!Y3JihE)|zPduJ.Jz#ujӌd^5PYRꃩO3l0b n4Ъא=)-.t>ϸb^خRըcY
-Nv0jOpU6{lXBD=zЄ8:1`°6P+0B
- ЇrFjLU
&BILm+̨UL]G1`Ж`<UmM7PK5(    PK    A             F   org/bouncycastle/operator/bc/BcDSAContentVerifierProviderBuilder.classTkOA=kE(oDpx~ U"ϤmCmfWhI(ݡ%"塲ޝ;w?}09x*\R/0$<%\-^&shoʒ/C(K"ԋRP]~1;P4i"p[Zk $Xa\<DMg*BP熺"5*}Dw4ߺQ/TG1Q聢ϟjBW"_;RvRfNǮ(tTKrkRʈST<%<Ia[-Zp,\gᚅ-`Ƚ.	!R!UAS179;`suiC:9k/
8_F-](]"aiLz,<}Ty'85/*e G&w+xY$0 nq4<1$l!ccc4(
1Baꞌ8I8CCdkg0~AGL?`,>bxC>cx{$lb
~p0ܢhhٯ_PK S    PK    A             <   org/bouncycastle/operator/bc/BcDefaultDigestProvider$1.classJ1OZh҅VXTjE]:sFƤdRiJWӱB0!sKMtz0$yߐt#93$PzςGBH;&]=PfԷ2Yk%>}2jû>?[ _,2k<YJ<yʈ_~r>STĪƇ{H{|dY`E%PsF)X!ryNuV~c=0:J9DS-İڙJssͩr+W /I"uϡel85)]L|PKfY  4  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$10.classQJ1=v|Է\h"R|,*
tvI$] ?J̌n{s97`5C\OЮT1Cҕh0Y; x,TwԪ6o
HlL<0ݶ<%6'lðهm2j?):_ C2-o3E00aCTfoX3Ѯ2ܖODmǭGHۺlJ2J?jTH5>RDELcsCxMNȶtו"s$Ks$srܜsQ)f^,S/)ᩇüyb.*8XVPK[bh  E  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$11.classQMK1}vzU$PkzKw5&%Wz*(Qbv"=&df2}|2PrŐ/R7't)19LDa^<
=.Mۺ^ Lc5eDMQymкCFXmx;!݊nlF?ʐh*__#<<JI殕1?MdHT?mozi#C+$e$S~>dI~_c,59yLPt>f<
:&*u"UtJN~K)2X$	%X#97悋JY1t0g鴼|
uâycK.*8DVPK,f  E  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$12.classSQOAOC(TErQ!XAI0D|mknKʛ?I_2ε}VLfwf?~XØ]t{v!kve(Ca#G0#DsQl]#EJϣuG&?Ne|7E*8p-':Od٩/R@1k/j8ԇG/aJ(
㇁Ht콭m!jk;uymoGߍq?ٸmUN?$q
&X&
\70e`@!g{Mi0rvx°Dw&=#@Ȃ=Tg땋]'#/l(A:~.,dI͘qܱpwSwނ{&f`汉xdby,GvS :JB}|˕RěO`s$p[>J:hg/wEO6eϐ?8A_X.)(}2X	C8t+Oѧ0 PKz϶
    PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$13.classSNA=S"ERERaiScЄ$"Mw6L;%I ?xb${gs̙O Xcn/0dm7e0LxZ|H&j]h.=MRc~,Cx='܉HKN]wDG,;eWjau4rSa#L	!r0NV/aXBVSwޖhvX~/^YDj0O׀i`e`MS
rvqgJ[[%ە^BaऩJl;^L:~t:ZH_sXf!L,㞅븟<01(
OM(cn?ʧ0E$Gg\)E$	0Gwe([UfFrϾ!pmS)asw],PK]X1ZPes PK%  ;    PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$14.classJ1Oj۩QgE+H*"A[B.D]:s;MIKV| JLnC.I:v{TҞ3|CҝF̐,@
Mw@;i)F}3ZRlciP_!a]_-Qd[2 plpyyXf(Wk#+#cPTOOEj#m: eeOi/XRk4H<(Q@!ԁk#KvuPVL3qL1vQrÊkg*YMʉ2xlX+.:r(<$Rr{Ec۩YRPK}Y  4  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$15.classJ1Oj۩QgE+H*"A[B.D]:s;MIKV| JLnC.I:v{TҞ3|CҝF̐,@
Mw@;i)F}3ZRlci[d/d/(ca8wtpyyXf(Wk#+#cPTOOEj#m: eeOi/XRk4H<(Q@!ԁk#KvuPVL3qL1vQrÊkg*YMʉ2xlX+.:r(<$Rr{Ec۩YRPK_qqY  4  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$16.classJ1OjujgE+HT"A[E".NSƤdRoC؍t!p9%z P:Lv0w,'t#:193"P'c"~QjD*"1VPF؄[{T2ԧOFXmx'gA ?kdH?_/ì9yZL_<2mo0W/D#~GH}IY 4jΟ-k4Ȁ1<(g6uxX'REm]2/"ӌEP
İڙIss)?U˯W]q1{GnK`Y5ƥKoPKE%Y  4  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$17.classJ1OZuj[E+h,VT"KgӔ1)oC؍t!MI*ҥ=̡T1|CҝhFĐ,C-zGB&h*F}3XRlc~~}{WTN=Cu2jÛ>?OIt#S~ctOdj6+5_i3<R2yvʈ_Nt9a*bU~HzHY$˓T@5yHc!,YPdjuaL
ȶtPL#qL160 yT+.+&05+Fù0]ȼ#0KRªSck.Y%
PK7_  9  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$18.classJ1h[/zYp
N7*VAQPH:s#cR2[JP|(1
!\;:ʕsMb3ъɉY[q/x,Tď[5m"<"1<桌(	?>=[U׮j+P#uVw]'Fːo[" =y<{a(+;VHþ"Q>Xn8FڛגL|ރ%RػFX!byMv ։T2"ӌEPy:a57.ˊi.`b[.9k~CԑY0YuK
 PKki  B  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$19.classJ1h[t$Nmj"Fҙ12&%i7RAr8z P2H|0#t!Z191"PBEuG&-US SjʈͪT6Mͯ4R:Daᭀ
jnl3dH?c=x&<L2K]+c~":uPQ(?6^i#QHʶ$S/k>ZR!kȀ1,(fCa@3M:*:!{CRdb$`Sbvͤbck{Ao(yg]b9ud(ŒzRPK*[ʐg  B  PK    A             <   org/bouncycastle/operator/bc/BcDefaultDigestProvider$2.classQJ1=ѶVcE+JTA*B}Kgn)cR2_骠Qb:u#]&r z 
CZeڗJoHXe(ģP!lwGڄEl#y[Rlc~}ڪɎ1!}2j>?#˯~9<d=Ly<L{a(WkɛVFBPm[Q݇IY4|ɓ%P0FXisȡCȇ\'ʏt,UxARd"c0Jssѡr
]qґa!*/"%W3(`gPKO
JZ  6  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$20.classJ1OhE+HlQT*.
-AwIEJWCԍt!ϯ Xg*WrGRI{P	K+FdăP?QR\POHlL<0Oy(#Jl/ZfQ4dՆ~4/w~!`_ÌY\iZn	S*9'q}I^~>hIQ/"Vϣ aLnM:*ꐽ!CX$	%@Asn0WSd^rX)/0+ӎV]FXsjd]J+PK TE_  :  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$21.classJ1OZu Rj(XDݥ3ȘL*V| JLG7҅`B.{wHr?>_Tΐ/.E7!W2,܊{b~޽Х61
CڄxhVHƔڔ_4;vS1B
4SO1^FdmV"!&=Ly<L{aJV	oA3C~HۿkFI28QK*590yP@P@ę*Lt*U&TY"ҔRl`Asn0W
2Ln`\S^v#`
,?e98Xsjd=UPK?_  :  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$22.classJ1ƿv]=xhVEkdMJ6}+=	
>%A0!>;VT3BCҹ'1Yʭ<*'[
]k1Mq`5dLMYkכ,#􀌰~6]abO`k:_/CäÔiZ;=2=1h1\ULECss$6u#RV^K28QK*-90yQDPD	đf;*Lt*U#{#D)XEA3n0
2_0r\zCOYGK.NY
 PKgE_  :  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$23.classKK1Ocj[mGcE+H*"B((ҙiʘLZ?%B0!sK`kS=T3Cҝḧ,C#BE١UxST0Dbcv桌(	mSɰ7]2jÛ?
Ω%zݗ!`5_<Ys~zge[gx\MC~GH~IYْdI.TH5d
B1tPPAٶ
J9EPu;a3.S~^0*J?vE@
i"OE:5.=:PK <=nZ  4  PK    A             =   org/bouncycastle/operator/bc/BcDefaultDigestProvider$24.classQJ1=v|Է\hEHE((AwIɤ+AFLȽ7s8 g.fvnYEK$nĽJ脟n(ec2]=F"uxd;X&+qK7[ߏ-}Ϭ1Y+1Q
PbTkN*~":
qOS5Tbtw͘mIQ%у#S}F>B1VB%1z#eRr&fZ=P"M)F<㼺|??g|T#SC3٩ޗ^V^0
aLbG%O+PKVpf  F  PK    A             <   org/bouncycastle/operator/bc/BcDefaultDigestProvider$3.classQJ1=ém҅Vh
E]:s#cR2ؿUAtFL$Aetz0/ߐt%:92$0 
y|wM;/bMk5dHv}jcr%#6#Ewّ'amua//	IrzgeDp[9=~H{HYy'4㆟O:~
Fh+"Ry(̐itHRgduPl+E8+r&iTd{pTN:4Q`%QjEbɡaTPKsVZ  6  PK    A             <   org/bouncycastle/operator/bc/BcDefaultDigestProvider$4.classQJ1=>t%(AmAKgӔ1)Tt%(~N.r9y~}0R0H%!C!4$,]fB2̴ţP1h)tGļ*|EjyX#SjS~uzԲC0$2jÛ!?kt//~V<{<Lxd˕F殕	?*]1*Rşv6Qk#m,"e$ST"ר+byQ0z#ׂ
Jm鈡xD)XAə\Csbn.8g[{+zåbf@;i0_2EY,9ԋ.e~ PKTEZ  6  PK    A             <   org/bouncycastle/operator/bc/BcDefaultDigestProvider$5.classQJ1=}X{E+JT AۂKgn1)T_骠Qb:FL$A	`kSCH*ir!aV"rdHaQ<	#hKtO}_6"~jȐb󛳓^#1OuOE/#2 pFa//ir"ysʈ_n|1*b_;$
t-*'5_,5jyB1,JYPbHuZPl*?ұT%َJG"):
0Jss١R0.czIXzM)FXuh]H PKyZ  6  PK    A             <   org/bouncycastle/operator/bc/BcDefaultDigestProvider$6.classQJ1=vֻ>C[(^@*7((mʚl*IP
D̮H3d0s2/o 60T^3+4J%C10$,]fLe(uĽP?ov(p6o
ؘx`VPF؄_oeasdՆ7~QKbM0^d#[fXKKaăaØCR=^ܳ2g[g4ZGH۾klI2狎TH5>RG"
1sC7c:*:#!Pa,,cύ6lޡr3f.,S],¿)s)*8DVPKAf  C  PK    A             <   org/bouncycastle/operator/bc/BcDefaultDigestProvider$7.classQMK1}v֯'ZAX~EAkdMJ6_IP֋ !3&Ej!_madW*i!aJbr,CA<	.M[^ Lm5eDMQd&#6D'}O2$ð6__
#<<i⎕1?mtH:n8FfH;IQ|qג
)_c,u9y
(b n8:tS<VA3:dJ9EP%L8vU*g^y0r%=;2+3R1,8TpoPKqd  C  PK    A             <   org/bouncycastle/operator/bc/BcDefaultDigestProvider$8.classQJA}ɸ]O<$i%"EA֙LZsP(g"9vU|}Er!_ahW*i!aJ4br,ĝx<*;
\Mn Lm5eDMQ6ȺMFXmx#5E'dHa?m<x=x(0ʕ+c~&5i_S5Hi[MIV|%R}|1Q@r9ԡ
bHm+E0IB	0DFss6P)C`a0KTooJ쩇猔üyb`,PKWf  C  PK    A             <   org/bouncycastle/operator/bc/BcDefaultDigestProvider$9.classQJ1=v['|h*HEPQP}Kw5&%+}*(~]}>fae>>_Ա0R^1+4I%>C10$,]NLe}c"~ֹjD{*x
DbcyZCQb~q:0C}dՆw~ѭ~nt_dv#[eXKKãaÄCRmg/YSm0TCME6.oƑ6=BRVJ2狎-k4|.#-ǜΡUDRdc$`SNxn9]?geJFk, ]Y:-S],.0sFa<&1e
N0UPKV-:e  C  PK    A             F   org/bouncycastle/operator/bc/BcDefaultDigestProvider$AdjustedXof.classoOPƟul̉ n(jĪ̿ @%DLH72JJtDLDF2Ձ,&}9{9禿~	4I};EJ?Vkҫ4syPj6gc+gi_E3n9rU_^Cluou֮e06yExj6t7R􃆹^}nzdD&,Fݬ֗qo׉/϶E{;l	nG'ũ;SaӶuobPUCt20OKzi{Sd4\ǘ$4#aX
RrRFjq
פdqKd?nⶔ;1A#<(CQ]ʽ,FqW!,%MK/d3~eɷiZxZoaAFYc˴*$;`Q>D(b a4	dd'~Oo#!Lx5ޜ欄|ݏ!)(C18BjI\!P4zEiRFdٿYYUKM4Э3ǰ=,unM. [8^G7n`	?PK.&y    PK    A             :   org/bouncycastle/operator/bc/BcDefaultDigestProvider.class{Dߴt"3PDJAЂrÒ&6m6Y}߷}r(WD?ۆ袐/;34}AH(,HBT4,Û& )oljm%!b*zy*YY%aXttN[ԌzUGW<Yi1uj9 ֚i1Xveeԓ5ͩ$fh)MI&+zr)˫I/TVYYAI^0[ZpUw0R<5YHMʒC_u`ҥȦb-JeHNSM4ö\	z9֠d%rL褤0%sȱRI-vW3uYq2Yug=;r].[t3Z
ݡ73<KW*7BKȓ뛚X&Zy~##ۡuMy,[u=Ǔy8ctSNfʚ);;\WY:YMCBy/ųy~65kg9PqxW*PgJdZ ]ƝUE-=)43zΊΪIՑ.ә_2h#/>~F{Q{jjXH+}z$cNo][bJM0Icd;ϫJ<w)t34:;wt8Q$'.0Jg
+0N`@@@R\BRJ`@d)5S&ptZu3f	#03CQ
^65֥r1d^9s+]'A%cz
f"iG56]^3$ad!|Ya>ܑ&`uni4<='p
&(f$00213e8111qc$TizƹyX@0.H&E	pq
KbX+ch14Ռk2c\ϸq#&͌[2naa1dŸ;%qGKq^}1hĆ88pǱƩt8Vrbf(:f1F;a22a352<l(yxx1}2OOї_<<x7QoYSg*e&OQ;hiVJXM&4EMHZKaܱJف}i(<"PxևM7,	߆s>֐](<!PxKCeHx76H^(c5	{CaC5-$|
PI
[|h$|
OI(h%P#M'݇AgG;	N$|
O0I2hJ2$|۱k#W[{h[K<};vؔ+xQ.BFo?n+O؃{򥃥mxsq;K6 /.[1"ji#(ߠx{|+homq-
b*%j Al
b:mA4Ď A
l	D/~E_PK˂U	    PK    A             ?   org/bouncycastle/operator/bc/BcDigestCalculatorProvider$1.classTmkA~6IsMkk}mɵRQ(~DZ( l.m~')?Q~B\y晙}_F!ha?C_=#'I_=*/$C'b
*|o@Iq'uKAv$=
Cc':H:<m@;u4c_F#ڞYbx5+wyz4A!CQIyEΙxn9sxB>KXMY1[n4;s
z@K{ۘR[FM桉˸b%e\53GDXMniuwFC%Ɩ_n~081K>JHr|/j(jTRwV#}ՐI<U{c{s>ƪ
kIr-eVL։2s|JS	OkWܛDdL.lUȳɨW?PKY0C  E  PK    A             P   org/bouncycastle/operator/bc/BcDigestCalculatorProvider$DigestOutputStream.classR[k@f7M^\ŵ5+EAaWHB>)Me$̈́dRȊ3IZz	s7|߹09Pw^agx4nR<Qqm4ԠH5X'$Ō|.b?bhϸz*f<SK| q
z<QB\%:P)O6e:segAz(^Tx JqN7 te*OES)̓W]M*7h⚉&L,3#m_
}0ml SV=[bs7mmܡʐF\[d<F~*ۥ߅jic".klƟ(hQFsz0:Ooq@I1|4+Abb!hT[Vn
WcϱWvcWc	PKS7O  >  PK    A             =   org/bouncycastle/operator/bc/BcDigestCalculatorProvider.classTn0=ʲflm9kS0BSHZ!cxY,g
$Bt$hVa=^7W 2L+&+0L5[[6[f!o08tm#$>?}hwE[1:A[G'+B.Ш4LYlV{Nj
.o,M z:cO'_47d.1<{rЎe7[naTb?%L*PL))PL+g0IưTbG]Л^<׌{Ʀ+r%Uѓ·=gEI>pǪ5q
x
!dt5Y\ˡ*򸡢[*J9gȚ-

NEZEhz<DR̃Y&M 3+`@Xc#!iBWpyq'(mvmB%N@"EP PK;    PK    A             3   org/bouncycastle/operator/bc/BcDigestProvider.classuNADkYgF=NHHmv3ކ,ࣈC0^T{Cg5ZڵFOr.GI<iVk԰XMB_3Rt1*ՅuX
_NP{I~~M+>pi4ѤSWǲv`P1"2_PK5k     PK    A             ;   org/bouncycastle/operator/bc/BcECContentSignerBuilder.classSJ@=cka[Qԅ(bMDA]qfJ2JE
BQęغ҅9;yxyX"yFж}.w	,'`9N糀I nbT͋߹sr,0wE)hB9Mg"fUh#k+N^Eqeak\ْÊz'+}d~
/D_ҀQ]/6vLM&p\M<pyu}+Nx}dtKded7hhWlIUenE𫙯n[B:ZhP0b¸.X'z1AbN{TS r3$H.&1ۂWX:/cz4Տ|PKL    PK    A             E   org/bouncycastle/operator/bc/BcECContentVerifierProviderBuilder.classTkOA=+ˊ"7Zpx~ Uڒ4> PfvJ2>b-QMfsΝ;s_X*C|fva^gtx)jVޕEO(qWE7JE_IhKzn8?\Q&DU+Dc+Hh`QhC\e-}~sjσ(gw7Z3y\0Mn-K|R(Iޢ}EX/e"϶'#
O)T3-ݱ
#6KuGd|OҞPX3Yr;V4`2`l`W
Ɛ~KeB`Xv-M-E5!ghQ."mJ
AG=Iw+CVk9*jG\Tiu~ܶ0;b`.^hݷ0)qL#c11	$ML"1x<]`J4&}2$%}e ;F_3yd3R>}>g)OHNk2NÛ3a|OO0!¯D7h40`vQ'PK\W    PK    A             H   org/bouncycastle/operator/bc/BcEdDSAContentVerifierProviderBuilder.classTaOP=1jTPэedh-nkaη7~1#2az۞{y_s@8No{i3]͠o)zZ֊wE4Amh'qe*T7 0
nT\T˙PZt3c:s\vϤU\`ea5aSݨ91=UXJ;+uf`jQSZ){7k~jRh.-$z5^nݖ.%˲.՟?wk?g}Vfu:e:-eTH]NGA>+`@
nL{㓲%×U`4yO!I^Ɠ>KKIuq+ζ{	k5*rθ 4h	-၆jP0<	aU!.&U#b0baΌkQua~|mTFɦ<C$TT/|# 8yt:	dE1{C{anG Ӧ}hyZY0
)L
 %+fNlPK6  .  PK    A             =   org/bouncycastle/operator/bc/BcEdECContentSignerBuilder.classTNA=CKQQQ[*!5&otw\ٺ;E-|&e)DZwogfϙ3s/_bTA3!zNpB
OPw
GzjPm[o*nX `|`b03%JWux]@dУ!=EE2O+&wԒ˥oϵs;V2)"EWkm(bnp|7l9<d*ql|rV͡N9JHd!|h]2g4ˤ9S'^[[-YHXp5L-uS˿B!ɿl*}h2x#:2B^Jwvʈsiֿ|*g	}/,'kB]&IwMo"+H80<1'6n cc)6-Ltrׅzksm5Otck0{ 3y}L7obsۭ}Ubc #1D!IoBT0Un?PK<  :  PK    A             I   org/bouncycastle/operator/bc/BcHssLmsContentSignerBuilder$HssSigner.classT]SI=C_"t\?ŏ%Qh"h*3㸓a7?e>hB)UZۓ	(2{{s>')HO
/;oe풹s0A9
QiXٷ)&
!aGBr%jsՒ4*X[R5%oyޢtZ
;آ70
Z&fXm-MXCWW=C҄404u클U°KrU-;M,7vWfU!wD{m7ZmEktvtgzu/Vsoʋ{WWfKR.@OTօVs$8&ߥC#32a8p8	1q*v]ʞ/Gs,.?{3O+!w&Nᒉl">L"a$M`z21\14
OLc^Y6738_2861?96E)nLYɗ<BٚoU| O>zF3Ȯ84f7pov6p.)F:L0Bܹ?1L8?74c'vHJn̳c/QE<t%d4FhT &JqlvuF*%p?A
)Oc2Ip_:9A[;ZI#}xq3ƝEfb~?G	$O&6jd3#PK8?    PK    A             ?   org/bouncycastle/operator/bc/BcHssLmsContentSignerBuilder.classSKA~3GeZ^eY(Q]$O7s쬠_>$GEiE.<3o xŇo5Lk'E rL*nEiJՉLǨaI	oLɖy0|UnIQ4bꭒax2r|ioUd0<=C=GI*8g?ڂoPgips_Z1[]33wNvW;w8px|o
7ozwWiwFGyMx	{|(Hr ^`kV\ĵ &Tlaep3>c|Pgu,.nrFH91Ane"eG_Se
x0qJ$
e>>%
\?mW/@#'z2,P)hQpPKԷ  8  PK    A             I   org/bouncycastle/operator/bc/BcHssLmsContentVerifierProviderBuilder.classRn1=nn,-xhTC@jW "*5R>:m֋OE |bvE`˞Y93; >Cc}aδВV	ީ!z)˰
)VW1űT&cxjLR
SM򽩓T>zy6'LLUGZٮ5ǺN~_oʤ7oC
Irfs*Gɥ-soxuʻE/ՒZ:bl`9@ p!@~}wNJl?X?:}ʦN1O;)0<Wt
;ّ9G5FmWhlMW;XB\Ƶqu:bb!bT'NF6Is@`(7>׀Eګ] 7?Ո;5KXbZ?#?$
PK-}    PK    A             >   org/bouncycastle/operator/bc/BcRSAAsymmetricKeyUnwrapper.classJ1O:u*+wAZQPaZEŢЅi&dDtJW3CA1|97yxyEյ+!9$Xb{IEh.ktH[^ptEd*2LqQ$Ay0
z!/Dp(M[Vd<6M:(8q0!Z=4^(vW-]DV8ڜK#nDF3=ǝ:F2FľM	de"+S.q1i.f	
5p`lYwu.sK&{e9bc.J]=F|PK,tT    PK    A             <   org/bouncycastle/operator/bc/BcRSAAsymmetricKeyWrapper.classSn1=nB]R
Z\Z.rM@HIFMnA_S~bv "<xΙ33=PX[0R_1HWt)|D(0R(]?*n]mȁnx˕6ҦVU\錎6*;J5&RQ=ax4:~;֒j|-J}R;-yUvJq&0 0`>@xʹOSTc+j:WEHM>䕸cF{Xg[vWI?N\4Jmy;'$0tC#D8K/Sofwʏfv\	3`+%q5D	+!X5bFՆ$=\X
`m/p[sHL;, !sv(IUf\<BiCqSNPKüF    PK    A             <   org/bouncycastle/operator/bc/BcRSAContentSignerBuilder.classJ@ik1֥u_PqeB޵j$S>PT|(qd97 ۘ#stYI"$,n3O[Af
צeQs;
{Wzѳb&߁QenI
̅S/&͚9H&9wjWŴ2У!AЫOu+4R3vK^>'0[JI;{4S͡2W\EV\v6B]ubVX6KKb 6HH1X?0N	??%4?+\KQ5k+k
L=%sLͩ'L=c:W
L>ـ >PKGy`w    PK    A             F   org/bouncycastle/operator/bc/BcRSAContentVerifierProviderBuilder.classTkOA=V+Fm>>*4> 4!oݡ)씴J
?e}JhMfsνwv_xG3I0(akR]UO(iWVE󵪯~!=7\oo)@FSh"ٲ/PCb $Xar>yis鈺}U9-tMpGACb
*{eo5*5P(c~](6y?+<-wPDbo9=?UqS=MJ;BEb25da?G_şJ8\Ҁi i2p.`ȽpdB}sΏ:av-ӥ> K+Yt_oa7H=
+yzZT5\0b`p9ܲ0Yq̍*üI3134'q|W0` 3qYȾI}]&;F>D6GO۴dy6	xoamp93"N 6D$
d`PK@A    PK    A             7   org/bouncycastle/operator/bc/BcSignerOutputStream.classQJ@=Q] \*chPP. ?JT0s9ι3o/ 6QeX#ݪ]CA:1AHNr~.}/pd,8qٳ=wލ#g Q,%z(<4:-ymW#ڻ	a!Pا]wS3-ߣI-QpŅfJ@i`!mm18#Ø6f"2&FSя)Q\W˂ZղD߷6bZX"IAS)e,Jg',? 	(t@˵ٹu
M LSNL
0b涃UL&6lo	j5mr[`M]BPKFα    PK    A             :   org/bouncycastle/operator/bc/BcSymmetricKeyUnwrapper.classT[OAV" (A*WQ
4[1Ӳ;v}a"4H(m%RÙ3gofNί?Lb5N_8o'Svq0
wPЕ&U4lC0u8j3ECu_UrUҮmdf쬲cMf
}5gFa~j0P/铧hkVAhlPmhX}ػsR.ܭ1Y?cGSZF[5u+p7͵?T#ת CwTwr<Z㥹WcQ$!(Y,EB65QpKk7\:au1VB+Y3(<QsL9UrYS:7]ATWny#᭺+w!
%µkQp:N
Hf׶Cz[sڔ+d׽u4hZtFlh#0 !~4OAX!˸'b	&&L<$f2Px}
cxa&h-[:͹ŘpZҮxVm?VLRo%"Blv2?t4qo]NB6*Ecx=J;}dfNz7c"Oʏ2^=Cz6˘`'O`%XI̭0
6SPK  F  PK    A             8   org/bouncycastle/operator/bc/BcSymmetricKeyWrapper.classTOA=9PXx04B4\k{]5bbh«1Ξp3|3;3{?;EVRmێ-0joSfHչ <`P$aFve
o{5z(gf+0KM[4LǼ\OfƳx➰]^oݷ-Jh|2։Nz_^
IXֶϏ#sD
-۩S4qA	I)Cf4Id?)m L1mEq3pŹ{fݥLJ;~kOna6:2β5ߡ~B^]1Nipykپ>YE㙋vjԶ܆!\0+.આa0
1d4`R9Ltp]RL"\㸝)wh^gHк0¬69fb*qbdd$2d+G>fByA3p׺1BHz]LѶkI?iRyD q|B&+)A(g/`N^Ƚ@2/L@
m_ PKs_ c  <  PK    A             /   org/bouncycastle/operator/bc/CamelliaUtil.classR]OA=Cۮ-E@ۈT	ՄL2L>S|U}$賿gK
Dwgs̹׷C p? ^Dgc)A-ѻWLff-KOo%NeKlV.w坶xs-U3;
.|Hg=o@	#H;V_:yvfmr^VkcrS[KŞRtV;o-؟{8O?j)e'P>
d6^nQh5uF\2Kڰs^*8g a i`y)iٕ?~`2r`UI9*	+*l
?r.%!B#	!FC1!\ẉfLL gb
7MLㆾ~$ٻ,ˑE-ГQZD.{Fq~煯(b4V?G,;%̐.~?l'IOP8G&. PKޯc 	    PK    A             0   org/bouncycastle/operator/bc/OperatorUtils.class]KAInbŋMnޥFWYgDݟ⿰7
P(٬3g9xQ 4N
N-0׾Yȥliӹ@%PO`E1HiP\+R{v'_2u(ʠ3߹ e8ǾI\."ƞ	Z%JL@nQ,MHS!|(w)>6~=uW׺e]J&l%ecSNcu-=4V:[<2
ȕ1|ERF6&0ccs%T1˟ɣ;4Rudt$;)ӕù {70`(6|-*i՟X[2{*U1?XΪMsPK:t   C  PK    A             +   org/bouncycastle/operator/bc/SEEDUtil.classPJA}mI\ы؉A"BBD3N&=COK@ęQ49XE
Z s(GkBtv±?}&uOP;F]&?&hxj@ޭ'6)dDhkx]K-Wl~〆xJ`bSoS9561`lΞ6Ϛwjwk9yHaHsȣG<
=cŰY"Z1[S<ń,XnWCYg,O	PKIz|1    PK
      A             !   org/bouncycastle/operator/jcajce/PK    A             F   org/bouncycastle/operator/jcajce/JcaAlgorithmParametersConverter.classVWGl.UXbM4h}@$Eۦfn e}wk_W|m9zN~;IE{J8wݹ3sg_ lv'8r%sڝU4Ő,pBA7,%sC{C{s5Z9XlÎSt06F9ԹP8F8E^%өH(\Sx(LBA2(WR$B*kMzR!qeuC.Tm3Q4KTC;Ԭb֢kQhM1o$%C+ba4Ri$Szѐ5H/H"x5g'	DZ!UPdƊbnf$,U(n7'iYbbJU])P,]E5as_\gTKk5&H95ZC˻Ťi4͎CG,vf1W
*'Pw4u$kmӵܜa'&ɒidj`*]Iu94Լj3`Oc@x$^aS{Bki9
ӲOM'SvI)%6:oxbάqrP&b<8Q}S4%+`{tmFrDC8,})CEM)nKw+C.,{rz{ڴ_Vn-iTx江Ǔ<qS<8ǣ<xtx3ֱc{8bh^Djh~/$=ދyQ߹_ɧqT
%yr-3! ^v[ei5jM%ak,
i<Z_8v ~{jƥ^!=cq"mL8aL8	ۑ	ǘp⼈1"bR"	3"`i/:ч+Ne&NAbb	YILxpY@i0@ЋP,И1) C@YA+LXl(..D՜Sˏ
ĨFPUmR$OKQvg0k2Hkjm/G_\ꇋP6G+n_	㋈\ߓ;p7Sx[('IM:E
[t룥k7?
亻sCxm|(/Na?\Hxjm VK
ED	%_­e+߱d8
].=5p
ܾLec<\v2TWwE	a[C5i|gg7r]p-<i`UZ%]og\PK}`    PK    A             @   org/bouncycastle/operator/jcajce/JcaContentSignerBuilder$1.classTmOA~V|TjնW+/E]sE'&R$eZimvfwf噙۟}0.t1':ɷsI۵4mx(u\v/kXaPl[(mύy9;rYE&p!/䬓|[nׅ+wtR yp%Y,ɚg$k5GMMys5),WDFxN\W4JuǬskY`y3\ktiMKg֧-;9)yϕXQyD).FĞZ@9i|FA& 6$"7 f^wt[)
5D5УᬆsXdNCl.m wO?0dMdܗHJ\MU7$%sI2p1|cFܯ<PDz'·&v6|)߲$Go^0p7
\-}H@h7#e_

tbXi<8FU"c:.c\@L(qt⾎*@Ǽ^rj"䆧e;<D@[E It^zT2`0(l@4@4ڱL!${N
a&5G}̦R_0O0BYhW-J|x'솖'l
ʧ^
1 	9}2H},iR3<}lISXch>oPK     PK    A             @   org/bouncycastle/operator/jcajce/JcaContentSignerBuilder$2.classT]O@=|[,"-(hLy@1l;t)-iIHxw
HAMt9fo<,CXg6z/_0hqDmfi~2]|xQ&CGKዘaW'2+J嚌L:^eJos+g:cQY(
]'2V%b.ZBIɕ^ef.ٳwav	ͼj]TZ~'zeۧn3oW^"QfOI8eOv?ch7sp"u4m[4'I	ݵVcKF;a4ubHGuTU
]`:4tpSG:qKGn00=
kUW
ct-,D.bQ[!]RH$"㺿c)i4c٨*tTkRQƳ~.ܡV(
50n60a~Ƥi~X{0ՒG	UzLs d.aJO3SHh~TL ͯ3zȡfs8ZV=cr
tPC3
'`PKg`    PK    A             @   org/bouncycastle/operator/jcajce/JcaContentSignerBuilder$3.classUQSU ֥P+l`jmPXD7۰,}32SgI L3s=;sϳ b;hg8 b7t񭌂c+#7mzgqMeϭg=3o&jW1KRg"j;49Sb֭T]\EUa8w,h;qܸK  _prɥD+KE=JrS^l,)-VgiR՚4GE(x=(vͥV|̜RP0r(,PFHq+X{EwB~:|p)D8*cFR
.w5<qc̺ beȵ_+u[M;;Xl]˹ӺƮP+nG+m?Fn]VWa#*ΫxSoU1⢊K*dZUtr͜NLmGa6ǆq25/+A8R.On!W2ꘋDMP)Ui?E-C5t"3ں?*	/w|CxGwѧm\ա[eYA#&95\:tMn>C)H05!HӐNIjGf$=
),kH>,SGaŶK	2}ӛЯ2U`7ˬ.㔢&Hl `$Nh!D hf+Ќ& 1Dr>M$~Ń}{L4GMI
Qr4pO5皈BCiь<V.rkkXӛr1:[_y
*u|4w!au@_=ҰfBAӡqWAc)/LfQT#@]XAf_PK͝     PK    A             >   org/bouncycastle/operator/jcajce/JcaContentSignerBuilder.classYy`SǙ-i21	$e;IB!!G,Cph<,%G	)i6IYrQ44Ɏrv7}u޳,˒|f'ׯFW9Ӊ	zSVS{7xٽÓMP0JMVg^kOWoN6%Pl6ZTcvCJ2Iȵ>}-ޭ=}Pנit	ȩU|V_fu{C@+lwv@st"tODc5S&kCC6:`O0
j'ICH,p8_Z\_hJR	ǵ`[dNTFd|9d=fIh!BYND[Bu@K!=
QڈN9bԭn[0ǲS3OadH+h	ZO.Q,z\LtWмoj٧-<z<fjY77?G˦;"yh Yk~0MLE{{BA?۴fBqćM
g\FmBbG`Hvu	ǰe
Z|Ar,mFc-gC#a-6L1cb3A2F{Qu`P#NFf1B>q$⣉d,4!-p[nf	j#&x0B[,ƢŃaR\6	UB>kӁS\}jje3fvLBȝi%&):l2gP
T";ɟ>S<o0FS`'B!!
DaAt7[|M[IcF	;S2X*ez]*1]]:)QMҍ
"?jwqZ1#9Hj"1wV_4E2!	53aԪwSFwޚ."Kgԧn>ϯ37RvTBT#n($`~faK6}ŷm~Ӫ53D.TT793]2ktT:
eB(0R?nbżD%T"l,ʥ4鼌liެT)
o(,n9|2ڙkiߐ/is'=3%FуnoY6CsͿ?_5/ >ju*bN2
42kϚw2용_#tg3^X~*xdfGvУ;ڪyG
;0oïepTGaZ9}:Q|'8ȉJ'8qITI,*)&]+%-#+qDO_b$$-~H%1(q&G/1$KHK%IIH%"HD%bq{%#ysP<%4]-Ci{K	~uu ЭG"3Ef_+i"MEYRSyƓ6
agrkU2%[k_9sLEcar^9<>y1Kxi^ymV*$ c(Eva(>9s$ЍXWP"wЍyM_Z1OK\ި)74~N/E _4^»8ȽqT <X$Ke^(@
:=7Ҫ+Pbܐ C.E.J]},G+rݟc9j,*R fo|50fM%W	si)eN6)K*gy~${`ْ.-K(^XsYv׌q0Gbs~y~/etn{kYɖݩC**6]1iaI+8~KŇ,oQ[|8TDTq%*\j|_LT1idA&
~GE~{?TƏT*ndFDMu/s/*(k#5LDX?ޟX?SQe~ɛkW<oUqU?pU\bȯT܌V	b'9&<!(gb2&6&y\$"D0q2DaRJ
<iLnRXస<+<'T&Õ
g/
r器NRE&k4+xY(p3٤£ุI-:&ܪb
&
NLWMqW*&(}O9N&٬ %+tޛ6&-L0icҩuUAZ+xCt(xS42٠-bҤmDqwĺ
<-1_3
 0Hl!]@P=a` ߥ[BepRpQQogFK)Em'RR!OIbN"f U'xJ|$O0wAmkB<CoqqW}RL)ѝc-K@wOU4TۓH1ZD_dSnS?.>ч10
Uӕƛi
GRӢUZkK2Q'-/RS&Bv)x-^;kfvZDW5)q?]|Oi<F=I,Oԟ	E̤xJ}2c>/ĄHj.^Q'E
sA[&[Eqj.%>jYc̲0A_B`K6r;/-<_Nugp")5BOu1/%>3zMٔ]DNR<MbaCwcp6%`SsĎw  9+%uFo.$tՔo)2!5/`5Y<VHzmiI˄ѱS4Ae;iz)#zSHc)nBxd(ܓcc44seHf1M,֐%~D`iظw7$EMnWyt}ն*;۴zd\K]s23/͝!?d.4mUj[G<wjRfCH
r]KEйNT /Rt9럐xA%G	vk9/BV^"G'r}m]6j)1o+)&ė%2vFnTb~&fʓ;ԛei8@{N}VNx1.V"I^>
7,eZ~4ӤC4R;E}ȇ']=!tm˞ivT;	qb0HիaEAѬ`%,W/Ϧ y)2ZeWw^8j8yDj9(EN\{rQ?hfyqFi<OYyU줼['e?tV3YOf?xVfߺ}Ku^a
?PK@a  ''  PK    A             J   org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder$1.classWSU-iA[ۢX
	֖Ze<[jś.8~@GB7?7u<H I⌛칏ǽ''7 W`OJheXw[tnW$9DbIn-KVFb^ORt%-'=ö:r/I''A%:d&lV%C׵u-p3V\*n$&*s 3K]CL)¼E+46f2+׸Nj=J#q";3㱜i9y`'.stU{p-rH$m5ZQmh~&Qrb[.M9WzPG;I{ؖG@ߟs
w@5Έ8'
_5kwuVf|F{' >ۤfN@f@sfRhV
=;s%l0Kq;DPheqN2˸ 㢌oxKFe\5s>(w'R36~(jo`@ry+)e"l+c
>(VJvEGSQ<R:>T_0؛,nr5,-!oi멪&{;v$ucMɛSq&ٛ%t>TڻdơbtU]cT?R*7
WM_ 3]PQ]" ᖊ|nhG	ܰ
#7	h1W!㮊zL6!&cJAf\`dQO0}XPQ|.,)#
!&n^RuM*\4Vm|D:aQ
:b24d@sakȩQSAm<14K.\N2
&@-oɱ'PzgC»`]=,|Mo
}m
+4|A-JZY^}WwfTB$txړLwh#C1~0tov>
{t#G0~FJc5F"/cτ@>b=~݃C*uP0zߐ:m~)KQ/{Jx=;OGmWPPK4  
  PK    A             J   org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder$2.classVSU-!l,Ѷ@EH`hB@K@Z*Bf	]8:'Xhˌ֗>/tNrw9,ᤀ@ṣS!n 8DNoewnOUbC0 2
E'*cyty]pX\-lP@l)gm[c(̪Vqrh;h0`fA-j*y9ZVi&ܒMȍꆒ9mZ"s,DX9ȼU2D7zeU9)1xr;ʲ$uGU2DzPyz>T-UjJ\r$[˚\&s%) }>;L֘[mU[挀a.ga#/+\c_)k3%-:wAJfWDqBDVm"NxUDD.""
i0  >%N`G:{'N6~5Gww'PGϱzQwm~jN*h49Ul:U^^_Ҿ}HG98PB]-G3/kex	ge4srdAd<ޑфweȸ CBpŠ>ܐ2qRT]#	g0&bH#Ʉ\`|,!kzG8Lx)4j]f!=ݻ.yy45;e0Ѩ625{4o*2
.S2l:"FM8PKub-x;…=Lwak7~Ls૰C7R+p]υŽ:amGW	tBPGcWL;wȭO=B|{ƟxƷv73P~DÈ?|
`dsc7ֶ7mw6_: &zf
QTtƻÉw9zZ8{`Q!m!."*l!%m=5[+"!"D<-DM{G !/xB#,F$*!PK
  '  PK    A             Z   org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder$CompositeVerifier.classUSG5;l8~$0b fepwf5ܽh%/9$T[RKRXeu~ק >D 3>U_g7g\ϕuJڵ4fߵ@8+׭97ٲ儗b0d{Ib)S1i!2iBfR-Wb9A'nF%ʚpdhT#վ sYɠM-ۙgs~Jro)֑UBDxͤT!E3B4LϏem鬾Tv_R1׋U%uϧR8Ȍ.Ñp9q X6ʺc)kxm{C#Vk\ߪ#:C|yքI 'mg˛	fq؃^WxVTÝ]rW=2=a(x5j|C

W:'zW]hhq.w99z8rq8qf4\-}tx?edi"f^zzHMs*&=O+tYatLkK1fxa0ksda_%__qR	T9:w-:h
}+i㔁ch46}V05Ќ>Pc@Ωݘ":&{[FFcJK:[")>8+:,\VdQG?S䚎A8C$1i'Mckw ZcD~"c iN;7GK7~}(j$xo%	$6U"7"gOCs{w4ޯcw&#4mchn%H'ޭI>}cɞЙb\',6%
OtCh;pc#brCo8Qf"mcpg,m(lÙQ+ʨ^_Q]SzZW[XFNjZn=qѮQ˻vm-
6 }Z䇙m\F&l
в<+&sJuF9t~V~)E;$iGPK,Mz  ~	  PK    A             W   org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder$RawSigVerifier.classT[oANnբXQP.n+hc4X/m43n]|D!ľ߱@K+(ɞ37|ߙY~e1HN=c%_z'nZ0,P$uiW]Y}˱cΒ/cWcXyV~Õ^Cy*Uaք]5v73og}V">²묉=Ynnw1,Usi4tSVtl_3Z-_
۷GxGM+eR惲Z$ɿ9MhjC;Нl ]F"|i
9q9ps8-
8<Ti5t67ءN?\JҞy	Ͼ`2}ÜU~՞G~ UNrc 4GQ
8c28ޞS&98R:#̴	d8:b#.2Nոo-քIa/ECQ_Pӥq*p!Eh-Z8HH3-Le'S:[#L[J}ƥtן@p\pG"ESq-Bv$(*Ү?K6&q(Tt2*qbubPF6PO/t\S>Cf6ǹo-~.YWM ĕl\o
mP15V3I:/"JxDIZT݃I0zI;ONIraZ܆7PK&  [  PK    A             T   org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder$SigVerifier.classU]OQ=.,@S!$eeٽEO>`"`$GqnY} 6ޙ33gN	`*TWCy<P0x][N2Ts'"#儻`XR,IRd;Iscޚfcub,Мr4Qz]hA'ǂutX\^et5ӎ#YTxC9bqmSXDytvUO <5N)2Jx*{~\k@:ܴ%L3YqKz.CR>'9㹒"pC4-M
[Bm0ftӸ[	]0nИɘZ3;v h"׮Z
74iР!ᦆF
Mi2ۺ0mH̥Fy;#I!DJ5#sSU~wK_dY|.26QoD7PrQaImJT@hWG=TbH:D8щ1<q:@Vx봖Fu? C?[K-)CgrDSzmFmҍ ^S$<ٻdjwc+ԇ^}H
Jɽm {)r7{jо-;ĳce+_$D#$7{_еzCLEfR%u!^?u}3
4t=<PK]w|*  A  PK    A             H   org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder.classWWW
!y0Zmqij+XQ*k004d}}[jWlmP9v9MOI2!	Mϩ{\*̫Nۢ隹U%7wcr8*f
Ga]6S	U(+Lnjj!nd @JѺ\u0	s+jԆ4E6Ֆz=G!bҥTItnIT	bW$d||
]6EYQԸz=%U3xUS@
N=iʺB"a=<Gbn'y	jg&7IbYl<&/(6@AHQ3;xN+KՄ:K|FwFK^@8W,N]15qη8SwkIq)]9I34GC)*LG66mo
du`砪NS4X> _
;s*򨢆(r	`#mSWJ1[PT$[{u5aE"v3
%1ϗP c]6DٴCsqGi\
ݤdj~;Q^2)2/Z{tFʠ3Oa
3i*]tOLT>K.caJU`a
Ca-C!İ!̰aU =_@CKn^Ho'2u4sKX~fx1eqfV.01i
jy  OX
c=>,B4iL,I-߹3E=є^H](nwu"[m"J}kO7vAd4fh3DaHa&Cs9PZp-ep󵞡K73E}ʙY7.('AN\}%,CTHR$,
(a9]?7I7K-.ƭv%, )j1(a1JCK0&abp8Tn"Z1&b
r0h="ለv8xEtqt.{p.<*g9x9xDE<.؋8x'8xjWs1HjZIRN19T	?s&5e9(
r
^0ͧ=	V^uip
'$/,M8T~yO$>YX	N4v	wgb
i|Ƹ͖\W["#r
p?ǪZ!7BiEK&OS6VդpN^BE7öee'2:hOq
 *d{TTߦt
޺"_7qgJwTUx=|~J/wNN
u^/X8G5?sg_HȱQ{CX ~oh+ia@꼤K]%WGѽc
-N c<w0leΰJq'bVXDB@/0&'=Dr<jLD^T]zEX@Eq6Biyi]~CehRVI
x΢I{Y!儶U`H:,>ʂ
/uVAwYD+Xt\sHL+I)"KRGIZ PK©2    PK    A             M   org/bouncycastle/operator/jcajce/JcaDigestCalculatorProviderBuilder$1$1.classTkA6IsMTX믨&kEDl,RiA^ˆ]}OR0
>$^!%.|3.Ϗ eH-Lv!LR?'/4CԝV[ZB1x)}SP}}Z	c(u}w+<
r"Q?>z<ցpC;i<;'mLS@ˠmzܜKmTxSkL#߁guGƦBa?>1(r.X-vNupx;4Ngf*LANre䞀4OO3ș
S\cu"ظ%\EFsMnUc=Eͨ-.Xk;Q
Cc3q{BEܾCJJ@HJ?,uXjI7H"x5gu%gy{wsl!
|*%dFfp!2e+jLcc8|꣈˸-Re2PK1(    PK    A             K   org/bouncycastle/operator/jcajce/JcaDigestCalculatorProviderBuilder$1.classUYOAk`dErUegE	ȋI340ExD}cr_bvꯎw =.E)Caudvm9̠sAňS)2mzbN@2TmKa!ө0A&	C|wʆUsZ&Z2@Xiߖ;pϝxC'/Z;#L/EͬW	XiG1}oΠw_<i.G$T`dᘩų6,a	/2zDP;&󂣐򁔕ϥe*-i-d0>pR*9%rݦZc(^"4nh04kBCH-
nS:g}J7:s̜Y<*}4EHS|̜]E{B?esq}_qDƙsinQ'Q&7W+5[pi/	R\rn_7Ey1{vS	B@!
}E=0PH5-؀"Dհ
hQ5j:Uӥ:ѫ}:`긇**;*&\*Y!=#=lڥ% 4e7>$Ԣ*pj0Ttu_fǈ^qhG3I1އhzZsk"Gm}=~@uY@%P.$h\GB^:[6PZCo4h	gz:r٧174/PKeYG    PK    A             \   org/bouncycastle/operator/jcajce/JcaDigestCalculatorProviderBuilder$DigestOutputStream.classn@͉kMiHiq7݁X$"T$lQȵ#8M@jĂ*.u9|>s왟 8C!ow;hHKў$A:J2^WԛQHVHP	u9_r'W,ez"IZ
7<r
)LܵƁrTp
#g+.O!ץwQ"ĞO0]:iKbʕXxhC=_mtط`Y gaymڔ*á͑6Mm))
W4h$5

}.hSޞ"-9!o9R
^@D@ջF\Bi&x1w_x\?ƳiN['eeMK6P/PKW&:|    PK    A             I   org/bouncycastle/operator/jcajce/JcaDigestCalculatorProviderBuilder.classTnARl-b[jQjliiĤ	WfXF\mvg4ѐHP3˂	9ϙ3'md)-ǒotnraXv}*<TqN˨5ek
7pFmSlcW|-M~hHes,?ͫX{=»ٺqiK3jQR읛T%ѬȒ\vef`RjZ{o
*
4tzZ OAҖO
ggSwנiӐРkאpSф>;KFZNkGhfYbpaup|7B«BqLsfJqTö:u5%oO|Jӟb&1$n] H㱎
xc	OuPԱC6CfR<|js>H;MOkFFe0gЯuZe+uQbEQ
[xV#:7zҗ"n..)5E<R,f¶]Ժуl'Flj v:-0[6{ݡAPK̾E    PK    A             @   org/bouncycastle/operator/jcajce/JceAsymmetricKeyUnwrapper.classWwUm0-ԀJ4m	eZtRJɐN&a2)-. M*蟢ǃ73m'MRsr߼{{}{oo?B,ĜB<P}pXkըj t39R<D&wJᲸHLWP6j]=͒.('ڲDtUnӹ] Ԩ	h[I1@k)F>CHyID*:Yl1-+Ĉb8g95ԃ*_Cڨ+MB4HVF{ڠ$R&.E3.V5MHZY%ԣ
@h2ii8W-JMF}7XTQnȲbQD1IZhTM$n(8:l3	ENgZbZkcKҁ!kߙ6soP3syzW
YJ.:,tnFy漌7b)l_4&50k秆'?6#D\8<Z-4#)e#X2*RДV64V7uv+<c@Sm,>SoŒՁ$C[eŊf堔ԌmMVՐSQ8]z\ܦd3wL
pG *M#sh;&R!Ȣl) pGakǓffFېLpRV.'ujc$B
Y@	u0'PkFm1xdP0a>fXȰPg`db0,afXʰa9
0bX-`vW{kLOdT}:>~IW^?{/R4sIB=͔eʊ)]LLh>8x
hjʚr̗洝7eԱ,xg
}Yr$G7eMsU4g+,xgW;«a0뉨l*N<wa U*nN({5h^Ǆѻ8mkӮ{:s{3udr3YO)'#ٲ:5P]ϱE"xL1

ID!\"f-b*RtrBȜE?Q1*usrH}1	Q>q8,btKX>S_]x{'89S'q!`'
\ğ'/p'oyv-x=hKjmxރ=xуvAxhǫɛ3	$4,}l%yce"|
X;}[ Gx͑nݠDoߢ.Wۇ} .fr 節<GL[yO;Y־<ofË	?g F kq&BEu\GIR'\^>]h$E
WF
aF
뺅웫x7cו0ٞ𙷠kW8w
s0:~uB}<\B%%A%LÉ++ڴ+}-vz)|j- l¾Ap;(fAU
ѐ$K<ϒK.XOr-9.	lBNil633ǳ?'*D͘q343l)aS>$L:E%{Z		aoCf=PK'5;    PK    A             >   org/bouncycastle/operator/jcajce/JceAsymmetricKeyWrapper.classZ	xT>gܗĀA#f!Ć$@$[ Fڦ#̌3 toݰm(b`Xwuk-bVs{3MHjOws
7b&`BNEF܊ͫ*6n>PY65M|ѕ$jƦZ:Ԛv}6Og}[CY_K2[o-9j-Z-CЬVV&wKB뒖zl-z4P>}$W6
9
7 0$:,==$BF7@FC[^
zԨþh_&/2Oϻ)´$qw]g
D'/a=$i5"}/[}z&Tl?1#Zqɀ'ӌ]^#e;y*@ovc]Pd슆VH{daj9~|:SANU$Ya|'w{h>B()-[$#*`ASjvrqr<<pћ_@$iB!'HYdؤ$o$jD":︠NLr'8f9$Y&:¾11ۉGXOw(٨n3"\hq)g+pӸ~3]}=kHni.KRsb4uu
#Yot7u߻/״%ԏ2m>-j|-JNr_Gu:judftKO&$ǜ,s!GŔL),i2%|߷5s6}SeqYiP2Fi.M~^DМ!O/IxLC)K%+jh9g!'kIfJ/:-ReXƚ;i\[dNIyTA3l[zRu*@ѽGHnFXLL.ZpY5('2
䮭׈LPZ٬Bmd-7H&FJbmeQߵVrHQ4F2I}ɗA%w?)Գכ93<+#J3;UtRv^U0xz$7\z$Pնofx',{Ʀm~:˳۽Q:)uۋɩR>y'SNˬC:ݗLDSE$+&PJ.HY{oyB1B۽WǺJ*L
Y`o)=:c퉯hU5g@0́A;xʏQiZoz.ym^>d]!-W!biZT&tpZ-,.V}OW=n{k[OߒUbדP;B|8 y^֥I*dyBAMVݯ.n5htxXr
ҡ>qNҒHz?7ls7*IG+V=зh0Z(W"j =(S_G8|(t>%NeB.T8Ei
(p
LW`)T`+p^Rg
\_-G!`^}|	./_@@@P@H%"K> >$>">&.pO
O
/
/+|U|]7|SW
o
-YIi[ߔ=%ƐF;QnjZ&~,։LTTZZD4粼^HA.nQWed\ws!o¼9<jFI'<=S9y3tLV>'mwI3LϳKu,KjHğT@*&#_;)
'th鵹Ð벮 ݁V(:<6Zɇg)llB3٥O&&=2HKwE|/燜{&-m4Jܽ&kIvDf64 }v+I0^vke3E6>4c-wrR%?/|Ș6ϡUqx&xv=I
EԦ@i~'VF2Hv@❓zY+xflcLY.ouO&>+pq̣mbklwbw`z~Ml8z2#m/ёd~L	|V\1ǭ79L
ojCxK
x[4(DԠ023t0a=aFM1t1\̰=exC70G6@j-j53\'*!_3A0M\$$\HܥV2**\P&ԘVjjpA#N`S5p3xTKT΃`i,aP0SExe858hPes58@ys4؂4`%Ӫ58k45lŰPVXE c2
\f8
xQ<Mk߰wl`X] fɰa#æ83d]]*܂~n*ƀ
í*܎33\0CTϫ vPaSV{1|?C_dR?pJcưaPǱW^
AÇ>>-*<³0|S;*_U(7T'~N*V^晾~#*Wu\%` mO0|3_f
÷T7~Z=~ *zx)ÞB0
{gN*4!oW58ENoH0k 3PKC~/B)p :!q;j6F4:K#)EU#,} gUF(5
DyzwUq	cŖR2
ca|iLlKd1CߊR2Yη,VTOs7𵉛r(d!iܚRh
=c\bYK[/_E`iK/"
K	kXXBGIKELT׌8rs`SBO7=xd
}`kU_=";[`bxm>GR1<<?swy1͙[wS0!UGٮ!r;I%&	Rv+Nv^re
Oor*C)h9!y],w_-;Qx˩Nacvk]N- Ԋˊ˩1;0>.r辶Qx$o8XCŃvDs
c+xlst~>/̙kzPlR=y4ֽtS2y`i)7Rn%ExA%poċӺ5(jN0ވn6~|QBrwQR,0m%pl p
xm
rn-{\ptmEnwп&A6")L.2tP[I
$yf8>GZkb~07f8hQt^=
uUK=tDgL5$>|a<Ba|p(C',G̈_L8hJ<SvpK'ksrd0<@tu5t,8k>yթs$7W٘V O@c* gJx<?
G6&Kj_o{ӔK fC=Y$&k1d0~1b2~ؗq؛6cd\>c(Fll(kQxܡ?PK=>  +  PK    A             4   org/bouncycastle/operator/jcajce/JceGenericKey.classQMK1kvkի m(A*J")MnMzуIĴ
"ŋ	1̼Reb!bH鐪2lS)u")PBa9O
F#1,[a7=)b;	F|\9--$CI?I,b1ҹfq~HCi$`߭lm	栭/^FS&?s~OشFB&r4a	
gJc9-09VB˴%l]*OahT_+}M13m+!7`VK~0PKNtH    PK    A             K   org/bouncycastle/operator/jcajce/JceInputDecryptorProviderBuilder$1$1.classT]kA=v]4jjMZ٤DS*Ae76;avR7RQĻقna3w=ggh1k#I/i,6E1a0PZ?Gyecڈq/Q	ו]5&#_xRy=9
}=WQڛ	_Lh;z$E;ZɁO20lP+0oams2l͓L<:C/?TE=ZYsm52ˆϒ^tۜ4S}^݂&C;upwA	q,6*XQ5f*QB08(81]45#t"vjD~*E.ݡECd4JQy	<|3V"LJkQ}"KDZK:ez~PK    PK    A             I   org/bouncycastle/operator/jcajce/JceInputDecryptorProviderBuilder$1.classVSWmHXX_Pjb
H" Pm},5,ݸ{Pj~Lڙli_L8=wC0	#S2s9ss޿>Є	
K+I	蕤`OHsݎx<$*^4lhyHP
霥27mk$rQbm7$#vwQw"yHrn"n"s43mp]ړƙC|P$(aςkyiK^N.0EV.)rx.4/R[{ci[phÂ[`^,G!^j_Yhˆ<tJh#fy V_+=,n^3EG6Q iK8^[LD߉J{j[-OiSzC_0G>.k>n1/U6un;Z*9\tEsvPeIJ:UQE9ԷZeRGGB6x~I@Bš%.#
F$\t˜2e<#cge<'「2"2x^a2xAQQ2b2QqT'Vid6*,eos&A6jrd\cѳWѭ=@M?m6Vc-ǰ:W֏/VCB23طΓѴ2HQE=&U64*Ig6SPe(~}mZrNoz]nk[TT7/

*TT<s*0"hP*HA{}tymSFZ.ABWтb6BMxU*"#Ȍ
1
 Wġ+Hં^
8

Nm A!5AlC)8a\WpI-xx9z&]Imz-*2IԴe1']*_-3g萳'hPJ	H8 ezS@8,FA0|I@X}܌[/<7|Kcs P.LbaL0ud,+|U{ Y@7lNG_8#Њ^E= wJxKxgtG>
>tOb8
nJX.HC	K+U$(rKMg/{,㤌>'E$)#~_{8I7	L事FIGѸ@܌Wj,;2a,
vd/PKWZ  
  PK    A             G   org/bouncycastle/operator/jcajce/JceInputDecryptorProviderBuilder.classTmkP~.[VvL;Mӹt ~ka
Rno5%&&_)( xu5<yI~l3^>v9΅_VVh;mZ㹒Pӓ!r۱^RUOu/8

۱{:BU)/GپLI$Rީݖ2gw9<5"ߣHui4[PPU}e_#E
Kt
2hXa%b5q^v;s_PA<84z%&&7X8zD°N`xq@?
3HeȻ),*➎\dp_:ȣ6^>́JpKςa.@^|JC튱dg5x;C-̓Bfe2Oc)g\ĥ)~+.Ej*g7ͭ΁E
\\,n~H1Y|oPK    PK    A             9   org/bouncycastle/operator/jcajce/JceKTSKeyUnwrapper.classW_E.l=Z5-Vjj	PE^2$K&.- T7HR𝙷yw?@(8)qXA(p]A8z=\nٖwshJ{)cdʹIslK*d=ztJhҶTpHÓmnvrRze^0NN{VpIH[:Ļ'#zeV^[*v,/9e|-V8TtfzL+h]ϰM2j-(7&)Yi{mXA	Š
O:n?%kL{X7l	㐡;wM2r:D޳ѥv8+]4n%Oɮ4Ȓ{5MyVJ6$E!on:ٌ;LNBM'z)ݬfQ+@^נ3o*<uvlJ&;q{<]J
nl*0	SnFzﾡCDPuYl$&Ǎc=ΧME8X`IȖ2v3\iG_(cʢ:%"IQR'[ 9zQJ6J$|79LU3e,PM]R3ȻKϗm8hT҇){-P#p8_`
\$h	4
lh$lhX`%
[\~#dXSj(}ɬ6-m@D^-򽲮=Nw)iI"mgFKxy	mC~+l:.4BWԎHhKt2|K-u=p\S9#+5s9(sE-;*PS*!'Q%a?ؾlʤbC_Hw.;6e{
{4^f%$?Jv.Ok?U~Y> HZ^BoXHkOV)H@xO07FP,K^F6KOCk8F0NҰ
!
+Paְ!kF4kyv@Ci8kX4ʰ40ndI
apC-$5 0a524bRk1L1RqnU1<*Vδ<Np?ó*p'ϩ؉QYxa=U>ܮb7RяUIxZ%U2<8*p<
PwIE/-nSzvו rE'U/Uq"[!CO"jg1ޑ9Y|;WNfp$q/ǚK_\L^zR_Eڼ#t>fz	ɰؕ:2wp,7JK}K	M9'9̵T=p$9&M̡{IEiyKzF"kE6Og}×9mQ#!A/Gމ6fN-5B0@A{mUsx=R;Osib(G嬂_pQTMKzS)p@@]
+'f~Gt*rS7T=PK,k  3  PK    A             7   org/bouncycastle/operator/jcajce/JceKTSKeyWrapper.classW~x[VmsS8Ē6^=kK=#I$;g/ۤRۙ"AӼc7כ}~㿯BX9ͱ
ZcK,O*P
:mc6#;}k:M{K2SAS0r9i.[͌cKMW٬]<ﲨ`{ZZa漴KXX
>q4nYB%!h)3ƤdFٌe	J_ZJ0Ax%\(-hridx[0"ŁQcѸbÞׇ2[M&U{~cGp<i.yݔ_8zMVpw [-ksYVB˄=h>ǝge̛gnxvnf=42g]+=iFNx}̔glp,ɉ4`4ƶ<_O$S->92\5Sp\p<BWx O&|JIsTOv2zk0hJISI%iH҆
ɯSWM>ݠ3
m%dNI_	t+f89n 嶱> w'7twTҐcIF)򖉷*4vo
 yb9ӥ--ΕmNvRSVIner*\ݩ| MtU`^	t
O).w=t}8Jߋۯ}t}-7U:B0$W+q*	3eX.OwXcUΰ|O5V{nY!=HX!Xc;.:0*c
.b[%Q&́*;ge DtR-r#+jTԛe#Q\~j+vRsߡA o7 DA
@6x{wp3̆Nn4${7;wZߺ}g:%"Jj+xD<x֞K߯hp?6k8_{pQq|@.|P=Lv3N<MaЬa;.ix/\fbh8Yv 3a+x6dA"%^fڐه4
g-yy
!|
60m4>#L>cL>L>}1<bE&?Pq
W1H)&U1ULb_`uUŗTL*RJG>*{*L~bO(tI둞SZ¦31<OrK7%Jj{)[P(}4Y
FJl0&]0RLc+;7hŜH̼LiUӟQ(رM\޶9S
-z:nEB"~OZfb,޽=+x>ޱg7<oo	&ϽcЦ=d۴5]"tKH]ggx=<FYJIJB$]x,din-4>U/ױU{Dó{*nZoO4D_,=7^A iv_4":aP+7$0-T ?L")+&*n8x?PKշ    PK    A             ?   org/bouncycastle/operator/jcajce/JceSymmetricKeyUnwrapper.classUkS@=$_hQB(ՂE-,ۤHh;#3x73w>vnuЩ_JkZ;+`֨4TeӶc܄ӆÙ\irX>	֬Zj$ioFSrMS@-rK%ahm3"9ͲHpy״-	#>q;Q42
}qG7R޵E3RLc 
h%,Y;7&=M epYdŬ3XO}hMI5"<sm3ŝfLcَRUINvm#Q1]<$MyUlZ
c6V8"㨌c2N8)O)2NqFY	gCY>`Q׼xzYi=A}Zq#r3Ea93Z
xdec/RS ?vP^mF6iKu'%ojƱ߳,VhIHxt=9rE,[9m,jzshmxTkOc@UqARхN!*T	m\E&TBI!"*L	횊.*q⮂K/c+=1
㑂XT0'
!hx C!U\STuAˌwOY~URTQ34v$͂8NC
]h]%+Xg,>#G/TaCSUĕ$W!>}2np&XX+#^L2w1	sس.iNŷ=]t/}SY\+pd.ɴ=OPKs؀  )	  PK    A             =   org/bouncycastle/operator/jcajce/JceSymmetricKeyWrapper.classW	[=cd4l%$M@dw4X0`H+'-Fb`mҴM%%閶Iӽ%;v_{G2H0ry{ޛ{߻ox߯\c~c]~#Ǆ%zz:v"CFbGbEJra=8HIǵaF$'Sx iQ	mLrZ4Q$%PVVBYV	Bh^,	Im9" O̶%acb1a#fM*-KCԜph4o)wYa9i |VZ6S'Im1]BLŢYafd=byF`pdM'RC*A^XX$*B1%D6ei&h<*Br1JXms-jjV.G\iB8c-	meʢtܴ:Z2,Nw(a1z63Uש7<t0v.ۋ'Yj@IKߓsљ|u"Xt$5KZȱs9̜Нr7y415Y2M	{獢=LU,6uL.&.yQ׋ghs6h18L:Okg.k:gc>wP3tw5=́zE+%`s~
hŞyuyͣWa[y[¹D	۩K1UWf;œzNao/YVVkZ}rS fT+#&cPƐ}28 㠌C2Lq7ȸGe+cDQq22$>	77SY4?~軛k'kg|:{zJwGROQ_W+ۼ{zQhE{6)NѬ4CͦiS}^ţhaQWfA;p_ǯCҳv6c
w%׻]Jz:7<g|ciTu?V^vXq	-puR͏zrjcoXYSq*vTz6wM^6a6}ltbATAUB+?mSq+*86TTLny%~:b796*vQSE7*nlCD O P oG|ƇldISxFA
_PƧ<
|CAQp
cCl
4_R Bs<[l`_cośi67N%BW{k	C̑&ЂMszys[J2sٿPi.w^lfZ_T.{KH5=zy虾
~Us9BO>Df̳_X!܂G	fc?7hL*eɁ-w+e\>ķA^	._?]
~};iCEY7	?xP4K2F}PxKv/t\$\n^oo]YeKJ.=5i/^^w*pp2NeR?YF&ӉZlr5K^?vnBY'^@/^u{?^wwwz˘\W3lUe
K
/(+
.!7l}GkkqwtuPKD    PK    A             E   org/bouncycastle/operator/jcajce/OperatorHelper$OAEPParamsValue.classUksW~l,&&V%ڪX-!r+XɲeiwGK?hFK̴:}Aa^z. >SdCRpsys90yײ-ÙAb-]oskH?RVT*[,%IL\^;SdjNMY1kz>^o1LWLGFŲ& ǈ&?}]$7U٪Ww\Z*?3̦k57 wmKYZus@?]exֹkbéjۍm<7x˭o1ζk{thiGT$O,!{ bB/5{1Zm-Q6ݩ3hCFtp]ѫf):,tKpr6ۮ9	NHHI	NK8#ᬄs%|0w:$ػ%c{-#qE%ȉ`hTh'ܐ8#F\v/|fƅH	lֈc=BDVYv7d6tn
X|f1{7g;>ܗ#N:.ձC0`Ǳ@
Q ë`1A~"OX}@
 q/~ᮌKJe$XCJFd&Šᡌ0ӸU_q޵t()6dZ↝NEOY%p^C%]Q4Om0J=As8>rҟ֋ǿ!=R^X$i=%x~pO>R=g<vSïU#y1D{i'WȾO+9 
3a
plG)F\~ XVuŴXQ֙\/#{HwP8t',9y'.^$PKŪ  4  PK    A             L   org/bouncycastle/operator/jcajce/OperatorHelper$OpCertificateException.class=O0_+mJW$ڀ䅭%5&q+@H ~T:0w#hPC3U>3q/xd_p	}Q0pR>)r)n	oI1WH1Fh0.̈́Ib~%&
'".!JK-"C-7~х1%s3_DzQ7Rk6)S\%ߎЍ_y@ѪDz*E6$BPKL) %    PK    A             5   org/bouncycastle/operator/jcajce/OperatorHelper.classZ	|T?LL"0I A,E&hk|L^d&LXmjkZ[jնؖZ:l`vu]նVޛ{{=s=ǣ< K6	$),	HP&\	$X,
	Γ`	VKF%@(nhmYPSPtZ
l[5ܤ4q#KxL:ѕY[ǋ n+r2~E'-ţYD*)yɺLltm&HӼ۽xIm
B'Я(7t5{k^PÚ9$l]^ƶ|"^OsS3B.O{KmݲҚD~)kw-aekkkV6/T]ݒ/eW_[,Wt
9I|1ZBjh=Fu;43Ŕ:m
uuOԷon^0]cx6:.ZT_aT#d]TD+5A5#FªUK_:I"#
Sb>65XvåJXU`g)h(<̣3>7/v{u@-UPJr@iԧ>h84GG2/
	&A3]C[~_:L7ӕ0K>Y}d|x:ƐW#QvK#ix٭83aejեkԠVhN>ЮF"J
.?D´:1zS#]ґpEJDebD/^YCJR-AQl)M$2B.dW<snK8詢[\D&qr
FJЧjnGy\
5닶+~QHӝ4g^%X$D["&%0D"jBE)IHt=u55\mzPYx{àhei-T4FJ_\`yUh 7 Ӻ@3=t1&O:E<q9`&f5sǦ;G.^ppxUʦ6E+>rqz>Ԡ3kʝ
<"@0?.ٮTiH8(B#W|ӳۧF`Pn73x
jؤ7&йuZXvMKf5
<A62Dygkv2z
x
cU\gX*^!ofN˸LrӬr:זT2ϕ,Xڜ4roVtr"4sYa:Ii^)רx
E7Wv4zR \Lm7O
D>p)Nh!/B~P7S"рV"ZwVsK`,H̊2zuKeq
}YK'
|hCfG9-&Dqz'GVowET}
!.wg;5iT2엦]b|
sa(v$3Da^7b霌;s*Qi$BeF6ܧMWקl)}~`ħ.WoOYSue-ٰ$E#4?dF}<VJ-άit!K+7 սg\9Rc9f\`cf!-FmP@Pտ鍾MMn8P䚣#(F@#ڥ-Qu1/l|seM2449JR4
r/GTJ9NQgW.5qń>Ub	K0C	ΑT̓`$X(ATIP-"	HP+	%X*,`
/`MgDA/p7%n"|E="n"&"|M;DSD"n{"^FDOEx@E8$apTExH#~,OD8!"<B]oW TH╩♊I/M&ũקgi`J
,g&ޚOX\/-S>S'iLS,2TO,mdk xi]~6I\]>1AւD(M2
=	[aZy.w}S'~0xS+$(tYBXuvd2qiTewd| #uoviwnf}4k4`w<%%SHj%!3X;?,<|ALxnj|h'^֤~\_=57NڦL@m;fk0Dc?$@+&w&HۛfNN%+>5H$Es>T2.j;&p0R<g|h}?&jK>j̈́)E2Q
,57vaMX5
^L
	.7u]HzgЮ$4$&ZFexIʱV&K>0İa70b*3|j2|`$ça4g>9ke~d.A|k"(zp2|0o1p)ЋKe3~8˰p9a2<p9'CxRxOc#m;,EoGW˰aʠ`}Nfh,!C'vʰ/ana3vō2\e["zb.Kde؀Ѝ-*v12}2Ј۳q:ed6`a
1\pÇ>p
ç>Ye9Q1|<gbag6"v3|jO0|!g.pCa!bd'=N8;F'"~݉~ɉ6
íw0p7D;k8Vp/O(eJNt2/Ao9qȉyL/bSn:q]'ᗝX71hGXcag>~2^B~;p\60u< qB9=NģN
=;pWN\"n%f~Sp~ 12g+' 镩]/A)MX7vPmJq $zӹdiF>eŁZ+.Wk :+'bC&w_<,4pm 2J|#.1|{!	 h׃0~|p :_dQ(ڷlbBVULpRUc`,ȃ|t$a֢x6J,U"NN\t3Da5q>x6jyլ{U*7٫c,"<K%ݨk4ZMF4.~|r"n)1o~6"{9^\Uϓ{a-p^@mL;$jp;N@}#&$
Y#JqU '`ZĄ=,c>p488Vv}Ȓ@=Pg탵4d]I=zKXl6%+;A}JVe1<ڰ#Fu"#)QlOM]	.&pIqj-P;|p'#ħ5Z ȓNABGF9
 K2u_d(4:ۀvxj*\8)fmfNRsh;*i%P-9.#{.?휱#Px@'_ȥZ8оt샲2yL>YwzVҡ8pFUyT' %6YSU1Is[9 ­p;67OBYPE̙:M YQ*Q)Ԙ0%&8J[:]돩ZhyH;FUiv̤VNG_wTs_E/nZZZDJOu-NFr	Ȧ3-H,<$Ե( *91@*[U+ҷ(W&ՋczR=@%6.{`=+Zzq
3r@aGQ'Nr-r$R蠐s A3
TQYG$"sxafXL*pm	E>p8|;8|J[]7'jV@Si9T]PU0G_,:F2l	# 'D_#Å$UG/CbLh]_G'%Ae^	^mV'Be}N9P6uϲO2
&fhg:czDA:
ߘ's]4he6Tf=fx[ÓM^
6R9]spmeT7{K^vf˗/6NxE\9lAd}w=9f餌)K`|PsG{hks3^ ^}N^?˳TdqF5fVK'ŇLe#W)vs	pRNю?۾8u.1aƭ`vLXAmiLɽDz&mӻ +*)'a:Uh:=&
5	Oj+ᑣXއ&z/'z'z%zo$z
-ߢ=qˇ6جu+&w.xD?
^0v&?.[|Dϛ]wk<'_O&.|0O[g.|J>o%sL.x6NA^C2|y:E|+ROz,Ek#~o"OYXIb'_q?(	K?)Q/QܡdXUZVpPKԛ  3  PK    A             4   org/bouncycastle/operator/jcajce/OperatorUtils.classQ]KA=?6Mbpk[X}>l)Tj-Oed;NZ/@~G"-t`{Ιs3 ULTqa_0*Rymw[M̞34lRM)#L(*x,TwBalHJ%iW	e$:29/K&YJIj2mۊyCIJRd&&I4!E:˺Rt%QDqưW=|S^8tz{&O)i5313s-mt xyxLH
jX
UBq,hో&hቋ9<bJ>L;щ	Xa*v[/0<YFf y)҈>҂Xo̞b~alOѺDh֛lgh5+,WG+%PK    PK
      A                org/bouncycastle/pkcs/PK    A             3   org/bouncycastle/pkcs/DeltaCertAttributeUtils.classVV#UŐjشHL	"DTI. JW*γߠ?/$`{n% C*,9Sܪ? #v7\Zu7$܌cP GBD(08o
KpMifݗ0p0sQ3dyP-`q'S
N[͒!TV%	9n"]u5_Dr|h>MK2
9%+o5	dz4[JoE=4Ij9]&S
5Rl$o\N߯yunHQBזZZ0Lׅ^4Z?͑QWҙmuW
U=\KeKzM;@J{V]KqḞ1j:ɟaJ;sk,\r"v&'9	5ޟ$Ev{pEa&^$KZ~QO03nQ
4,.Ʈ:ccU"XM;_;dH5^ICSq$ZuY] YΈep3d0be/01p.C?K^	׽NA*)hz.&.%!t+smNtMQ([kA۠qHPN7y.ZA]:4]}M}Ss;Siџc/HSFBlbqIpro4
> XTZ"͘7Ɖۨѫd~Q6j޵freP[
w%_yTЪm
ELL\
WЁWګ\k
:1@Ƭ+)$t-0i+]XKb,Vd '#u!l %cxW@NO M(
x_@F 1deLCM[DR#+nx񉕴΂Z\0N-D5_6mѶ47%R TTE0lTbmhhRUD]
GOhtHcba#~Đ}#1OG19'&V??:@$zpêxTy;<@(qUQ
>H%DL,7**ʌ	h}c~	Q!MmdPKa    PK    A             A   org/bouncycastle/pkcs/DeltaCertificateRequestAttributeValue.classVmSW~$ܰn@EJ$Y Uh	"}q+aC?:~+Δљ~N[{@B[1y{s={y3!aS..Hh5-ӹ!iSo%-,XV;c1%/hMNVN8eَf|4u
FiXS*Q(νuZE̗\٩ZyHc}큖kHcE-ڄ78$͔~P(ldtv<@b,BNi],jG5]&&
]ۉ>znpb 'Z⠕5\5yQ°O;8/
9|zp
:ëWM}?ڗ1G73':m9it:''hߓٕkNSu1#Y֬wyG3ZN2bhe8C0ptcyj$^7r(
1d[FRX|ŧ&)1=1?P.8;{1k5Q^Rjĺj\wMүUGt5C3
{=^y#)Ę{CkT|&xxyG&pQ{,
ѯ4AA 0\V cH(h¨nHƚЇq&|*3х/dt#%ঀQ|.`VL-1Pыy/^dM_m̋QVuZEIUZ*̵Tkna!A3lڻ-0wDOʼ!Idϩ/+}~ԢE	^)g24}bEzc
&-#ѣ6iZJK#?bڵO1Q	vM	"!JKoӝ
=A;7yViw~+z^ƒⳃ*`>n?72='U2O
?aa#ɆdrHR}+1\}{ߍPK}&  
  PK    A             H   org/bouncycastle/pkcs/DeltaCertificateRequestAttributeValueBuilder.classOPƟnBƧ

m9p"a8ﺮBpka6q^7{19} )pIrZ̤,r*3	1-&9t/a/JaRۿ)X6hKŲcǪRMMR,򚥖KJv,W8ڳKeFTkxum+}p4K8Lt`LmE׵[sjUv(:6-{	Uʹm1{UE/_#z%%T켡[T+;T[|t{MC}y!#ȣM(q6ޒl*ZC=7/5}}`
;/\vl`rdYVˑH"֯WZ^^@]jT;}XR$z9DY촫G1ہcYﰓZu[b//bw 0D >&SL$L0L3y" Q@.aHFT(Ɛ0YHqKt{mEnzOn
|̗גIjX<$]Qb.c|mXl0<4ۈM'.xOk+lbqff9F&
50Xa#.]p;^BoLSPK$v    PK    A             ,   org/bouncycastle/pkcs/MacDataGenerator.classVi[U~&0RL[a
`%`KZc4Rz0f
/><~w3&PIr]6 pWBDSXN)p!_Kǿ=#e
*'f|񱨂RDŌF!AL+%cu16U0MS3fH6VJntl\	´-:C	+PHyPʈTFąc<o;| 2̥{P^oZb'3DlX<`ځ:ɭD`lK7RpgS.kZ	玫J l&b0Ra;mE'zRipjMO/Q.xs;x_tx,L@Ҕޡ@^9Ol+h+){ۑIʕ"dnVVyn88].O)ȆE01''U;m9a$Hggn]ocؔb	ۗrlڷD*6əC5C3>.3<pУkְbE&x*"SÁ
JLmd*1Ks"ӎn
snKC
Zg|aIHz @˔[yR"x,_L)]UeؿWQc4%Zn>ZGvqqKip4TVpkh" 4Ry^)E
O㎆0&4aJC
RTaZ4e
frVC#pT!WU`A{*7Tt),A̫FB*kR,IRq*F"Ś(lcx!.¬FRЗ軧>ndԩjk<5#]]Ǡe4_fck0Inb ?v
s_W`{_(,וEZ=D04,ޒYl{];O"~){+ʸ]|`ݿםY|;?Nb!>z\Z>Joe=rx?Fn,?\(pqd
=(MG8pUp2
PKt܄p  	  PK    A             6   org/bouncycastle/pkcs/PKCS10CertificationRequest.classX	|6	BBU&	! W@%`H"A$f7"j=Z
meL=lkާ5/}{ŷ>`~yp< .0ޯB֘	8M\kzgUe
Xh>IY
ݸH~q\ҴZ}Mի;37DcuHhgHaNG;"h9-8?bP0bK@!lahp3l'6Jmл#*hL7˖U	uZV{cѐn'?bE-Z>
D
fIDe(:~R
߫d#E#q#mPd-hϲt<ObhBh^-D4nBjK9Ri.ZFBJݚյjubehbnY0zFT2+jÒB٦nfr)tSv;dL#%ڪOFcZSX"[I.z8uoz
u"'q>17j4~O@lWzOI4FP$뼽lIi?SkbCuvN5t+L2a5]<LN1kTy;K:-#miu',)ÔΤprF"=G,U)fDt2b&=\gMUdMbL[c{h#$0lDonXZ@+
k*;RZi];
r&iFe&=膾<mZ~;&*)krS1I++	+{.0}3)rǼٳ=tYyե^)cȪdˬIs@:[luˣcw]?bXtnFptmᜧdѐ:-wY	%AF4mRMZL?JRvf~5vSOw9~\̕]hD3/f$F4*4|MoE]u8AhrO=Ѓ+<K \&K%.X!,qJV6k$X+q:N$6J\-q&k%T!.	MbDV	ZNt)wfz}j.'1~4\՝Ƨ(+Kzm)$L%珀IU'+5K-sf]eUH?kDVEShaO'HWo7"m<<_^wB!uAĜ+pB-&ǧ~42 ӅLS6jCC&P+HY5[c(WanY0ڱ͝FtL 4-Nrdţ"%@rtOCF1tX~rToyiʓF^g%/	(B|T];*r6K4َ"y4Cq^b+*86(C&()8W
XAa,
24D2(
.`HT1
OA;>`">`:,|JAa,>c)ggy)auxa'<KRyWP)Ӭ<:|^A(X
ᄂxVB<z|+YA-gxA||߾"Mo1|;
f%K]b|?,^c?}3zw^܂?{q+mՋv1?wQŝ,!%^| "wsxËb=,/>S^܋o1֋,Ͳ,b&[bgf?	P AQCbxp@xXTx2Ч(`(b(zq)9oK>%x?^c#<*&Ч_Pon)dh[ڻz?q
iez+001"|RPO
"zr90"z%Jq/-̕uA
'ro>F8şA@HҼMP7Vi ou.d@R\<<;/NsS5&&(:&P~ι_NGvޒM48Ey5I.AqodqY<"ɤhJ{4 l;"&eĥyD;\>7XyHg3vϕ~=**OʽˡxsF}6%N$P{TL
GŴuTL~"E(EyD~ 0ɐVCbCK%[q
5{& !lb(.Й{;ZTȫR$DsRKJ툨 'c7+5jf
Y>)8w>9}.249c+Ěez[oZSTlF2)SJT&r+rSJTslt'=9ɛX:._SLeoLqoX&qWMϞJ5J26|g\i-Q&i
ZUsEj6r1EP.6ZcbkM퍇+=<[u./ Ϡ0K7$ss}֠mcb[hs֔X409I{fZ9GzZJi	hQ];Z8ECtBEyS&HzoJrxe!"*!xa n,~Q}"u8H{ -kprt$7;	9SY7}C/
N
[=:EIT7kVfrl9͜{ssnfgLѐfob!Нό62ۛ(~Kss:\T<HsjCIDupZ Q6}ٵ&gG	;472>tIqaIdϓK1!h@\s~~:Da*,tTbQR\Շ+RLRy6tU} Ӛ7L}l*}o"I+0-871 }$%B=,2^%3,SV(DNM3Mvq<P9PYo%m$_ܘJg	H.Gðdlꮰȃ
SbVPK;"q
  "  PK    A             =   org/bouncycastle/pkcs/PKCS10CertificationRequestBuilder.classWkw~֖
IP%;!b\8Dc(
()zlUb{$%ڤGrN@opfvus,9!Ͼ;3̼;޾e {[$G'Y]8+9uѮCC,
>,Atݬ1s9"A"fujJBXKؤnʘT7;k'g%V+?9
nY-;p(d0I[S-v#=g]cTװHV&;n)i;TI6n%n~=+|ez4{JUIqUK#U;LMDC!IST1}32q%U]m<QHizSY.w5H>)WuV-'ORÚbJklV5J4o
}
ǧKG
XLbYڼ:'TK<IS?FiXc[?ڂ]ߘZmpsI(ŝ|O}u$j4pm;L}ܑ߻712㕴A:Y*54
>;޵b-r'ڻypYXJm,OSq;V}+6`͕NΥՠy[\tu=;>)K *-W>=|HB[w60& SguklWĴhh!AβfxStgrsKRC!!lئq6u+%]|tEOvk}]51k#xO#ӆKކ)y}QckmӋ9=^'H+DUH\A*4޽jWfenʉ=Yw\/ry=楶[ask聗nVSՌp'Vn:kq!;&T.lPG܊bQ
dlfB;Vf؎c
bx\-xB Ҭ=`+Ns
"xWOS<
Pl$j
nǔI`dUna8.C,2>y/x_19C>|2uߐWGY(^q d$Yd6/~ c_g	,S?bq_ne
ms_b?L߅?:>fr[.r2H_*hrЪk=nޓHVЗ*` VbE"^5/b!qq,g;ZRd*y~n[ F	H/9ճ7%,`/-`ǅkH!뎦<~K?УC"7J,ޝG%/d}a//r(Gv^tdpi	&no+wtiF*9]Ķq=8H%A3S 4-7_V+
I~?V?H%&^k]裏.s5;GELݤ"iZ,T,^utpW<ڹ;J3D`Wh4<&0.;)rhN+)u͹
6g55%MY)*}.=0(!ew?e{J
^D{JWQ2@ckQ;QNiG^e]ëk@JHTPK|  9  PK    A             6   org/bouncycastle/pkcs/PKCS12MacCalculatorBuilder.classm=N1M69 r@T@DIu`EjC!l	EFi߯o g8dխ6#EF+
(u|}]Eg.ŇFXdd8u^ڵV~J!":$vvd0r5o2ǻi2}F&3Ett|eN||w_25t
}).AT4`// PKAߵ   P  PK    A             >   org/bouncycastle/pkcs/PKCS12MacCalculatorBuilderProvider.classA0Da1tU1hX)+FO)kkBj.<2Kf}`1@pO`TaTXThi5{2t^qz2G]vJfd*V+njJnskzxߛ@XLWt_nےk/ϒt/L#C		PKqT      PK    A             (   org/bouncycastle/pkcs/PKCS12PfxPdu.classWwۓa!20lBbTlp+8<0qfFI6].InN:i")q%mHO3Xy}KWy^3!'p{c>n`a=c"Dh9hXwHB&6zӺzHolӱnyƔ;F{d`?\W-{D3j:zj¶<ͰY4jS2]'l'3V|Bs=Sh9p#Q2CĬ)fft+I&=h,oH>xoF3ӕrʱ=sIP|#+Xڔ.AQ
	K
1ߣimSۊ@ɆD0I/HvX@w]-OL^?iQ="Jq\3yij5gH7ޘc 	7faGb',a/55+F)?e[K1S2i
N
R<(ƒ(9ܟIktdH()Ik[JVg%TRGQ{K5/:d@my#6<cB6+N5eCMk>XF;됂ǭy,320H}
Hʖz*SsvU'} R!L P-g&=B=8ee2757T"<Tnze<Ì;YWGpkOڳL8$	yb%oXڤM'NPRa*J]CSK[`@D`
x8(p!nJF zw(m̓ÕR	7TyӢ%lnGpzpsojQB/Qt8>LDk{ՠ*
VŰNʌbV9TjWWk4"ۖ&\)ՎChqMT%L2:֫؊
sf}=K{vڋ4\jpr˯k߻l}zPxV5*؁A
vY-
nPleΠ@V+RpAAy
6Pp*:SuH+a+*XGpـ02
6`Vfǲ9q?
^w0]fx6V܃dd13'deqx3/-xTFaQ|VƝ ç)cd(.|AG,$%cɘ	<psߖq7>x+qgL>_d}d$87AwSAs(2=S@Bdo4Doю<C_xOk,O,~ؙß/WAټoM Dg".
GM$?F?5!tY[Χpq]AkNkGgF"Y=t<KYųy!g16xh3>͝Xk__"pRIK|
줧D5:?tMhXu;`	4y+ȓTZ9	*-p 6g#]
F?v6e8ROz76I9Nw.~4ڀ~K;Wq~gT?}ƦA7z[,TTu9_<g&4_һ('_W#p-VF?+-dݘ/TuBCgVQĥ]YJPK2N~    PK    A             /   org/bouncycastle/pkcs/PKCS12PfxPduBuilder.classW[wU ZVҴ%P	"MZ06T4t2
0	PT#eւ?p$i3A|ș}N/眙~޾Do_"$MԽ?j["L8%hWLEJ&t55[f5PB:CO1iKq\SM#'#ZN15K4J!OD"Y3-IDϛVy%E5s?m#щ5ӆN\ՌѹSH@R̥TS҈@K猂.Jh~%bCe.nnigEp3h|XT55^%S=
0KgH̓nUJo2	<l&#0T8
l9UIri-l q];Zt/=5αg*o:jЂrʂSي;`ffwo|}.xړϡaZpbۋUBYI@4N
)c׮0
k#jr@0nZy{LG΅[sza-CÃ<1<̰aFGa3z3x|'[>>MwM}.r˳'syz[GU\:kX[`l >o"L7C|}_xK#&=omނU{̍8
b9smOMh;mm[[.bCLil6}a['u? v n;kЊbw0Z=g!Fwۇ<_tlƨs߉|/;਌嘔BUh(c
dJL󵨌>0#cOȐqOc|:˥'e,q.=ŇeFK'd2$<׉G1׉P$c^.^[Cg%NI؃$CZ(V|)!(Hx	8'aI	!negpD4Kxr.w1L'H/޽Z<f*)%;l"]U@/<$IxfNWK2F%,N<CkwE'I#2y	q+%]+,_O$;|bNU2,JI酪R\n#v7.q߫ph|7F|M[X0":7mU7zMi`!N>`/]u#qX|/oRʃF86MEa=j.0#X*_N(`o
ʈPwǋ".{\EH".y\%|qHRKCw>	0?8<	2=Oy0+ЅuCvߦi%	!FM_vނ!Ȱ1PK#Վ    PK    A             )   org/bouncycastle/pkcs/PKCS12SafeBag.classVkSe~ ۅriQR(fZ(
J$PlYh`IfM^~'?RƎ~uƟOp&!;d罜\sd_<ܞ3ݞQU!s.0T\MJԵwVd`4Bf)h7RиhĴxTOO*ZNI@͒fī5iݪle3"]VAri/Y4=P<i*q^]ZXTr&Wd]tz8uʺЕR CWuz=*E?1#PTŘf8@X"d6NZ"~jhu/Stdk@WEغbjbB@x0*I%ϼSeQ؟tLWu:r*e'cIJ[o}*)c	=9v-fم6sɝ9V_B3/rHZtܾM;?{ߥ]GQ"a3a]HHfDThq\DD<,-"qBc"ZE&])":uvVd'h
nO81v'mwG)LD;:(}v;|13
xvM݀ysA-1CGHR"cbwge+4܅wTMq\r!f_ɚ6McRMX,BA\!₌*eaD
ɨKF-231S2jpQFC5!1&d$%).3DY0\aecxj*5$.\
aUB4	K5eHH8aM!~,0,2$CR L	%ǊD$c{0寲+4w9#@.4s6i̹Gc%87j2%6^~{?YsF
a)Wxd0f3Ӱ7T-z'\C-<
_ÿ7,S/Ԋ"N8Ij1j;GgnMw óm|,q[NAR-϶M~"yF##lݬϷņ-=J%OΗSș5Hǫuej PKΉ	    PK    A             0   org/bouncycastle/pkcs/PKCS12SafeBagBuilder.classV
ST=c*_mZIqi])RĭIMS~/!3vr7v;v$wye	~0O
'r{9dXLOJEaNc.`ܾ)iւ٠p0L5q)$5fWtz>~a+kcMm	5URSUvҚZwM]QVFY)nf|Ul껔b;v\.hi9INuJP+d2B:/V-7t7Jtw?9i*W)G0+!2or[YdvX\g=2ìK&/PO8͚WXכk־-`ѓ:3uxǱAg6w!uUCs=v|:1OxFĸgE\E ⲈE$bB"^񪀩>z?K}F`oG}UoپA!0OǶd#fjY:44ϔ{t̰dCܶ?Jq$y_yStۭHeJDB%K/z_(5QBí5ܠaVhN0|?~p4VB01aoC"kW $8dXaa192,;-s.G7n2 }n"6
[1lb03lHBQt>0%ıp[B_IHAv$2(BBI`O"&J}}P<}]їV瓪NѬ "4$h%={t5([.yNp(G&ݹVJz)u
4lDXc5grK4r֨<EmUҍ|n值D+er:\O&twZ)ڑSY?4o#4/`-m48l!QJ/<|~
[50MB>Hhl!Sj!UT2
ߵsPK3    PK    A             0   org/bouncycastle/pkcs/PKCS12SafeBagFactory.classV]WUݓ\mKk-$@
-PI[
K3̄>|ǾZ&,Ywk);ȗԇs{g?BnEIzvQBH,OHhg@Beg+Vwuqs<НPJ[Z6A+|	ݼ3SI:m`	vAw-;mkp=@lr9ItJ8Sqv\iHfrѲ+\wiet?SumK43Or<lay5,S¹
p2rmN\5	s0>'3n|	XsSq)ЀLt%UDt=(
<N@%ԋq65}v*h幭QœfNռmmBNPtE=D6<H2jDkuC/Lm%î;Ma,f8p:ep*{fW{s"]M%FjdiZ;*M7%821jЁuΦMiODHFЪ[.\}ʹh>l9RUJ
b5C宖S?2f[۞> `_DS*l\m|L4	ON\
CEmWpA-)xŘ´ @=p_A;(8ćLICg06LF0+CEJFeD}02bBFy"s|.28Y1oeKadƧ21	NZ~$Ҟr5}cV/zB7E,"&o =%dbEVh߇J_Fiz6pYH q?"F=B8Eϥj}c{0K}E8>s1G4]ҳP	[/_TB(3~@]b(sW4C!GׁrRs_R	*{?jkiw
b?΅hg)¿PKt33  +
  PK    A             8   org/bouncycastle/pkcs/PKCS8EncryptedPrivateKeyInfo.classVmWE~fڴI,65ȫUfݸ`WxTαQ.I I~ȝ{~g6 .|}]ntiy|jڦ6PvV`Va[uqw"{^һ:'RQNx
Tsd,t씕s\+J](yk+81z|F!KX9:<a:3+CN,n3/gxѫuܻ5nƲD[)7W^ZaƢL;.VVskq"REDs\b)ơAAY"x"<NEϛy@IO4GbbUoQ:NAs܄_`BJbBW]n?bafme*~kԙ	4JiA	&HcVnQȱ#f6eY
yJWr]4Vͷ-TToL`C1->b@;w<\|
nɯ݇$|Zx;3[!/.z~Kx8hɱǉ˓e6wLH
6*kX>_Yu(׃w%x~YS
+I/[
Iv5"nLk
5J҉
㱆xIT$s
LU<p
_h`HIAZCf$Ѓ/[
*bXRdDQ̫xeIU$bI[I^*ZNŔ$؃	3@;U}]󸱿rxpLҟ m2muQZ:yh0`LmF[7c16i9/24T'1WW+U3Ķq
tn'~~T_2!ҕjc?;N	1ݱxf )48@"Sc\mȞ"i":$TUkb8js!vx.x^n	}?.F
XH:Y-wy/rwAet$PK/n  
  PK    A             ?   org/bouncycastle/pkcs/PKCS8EncryptedPrivateKeyInfoBuilder.classTiSP=iXdS,K  K3>BI_+V~G9W,ӂ~9۹9ݛn
g;qN\-Kce
a4
q0wL7Çsuh΋Igץ2v?Ūu=K|8Hf#]{*%֪\j '$o r-<n0nz(ŋ|rk9aCibq
''mg
{[sĮ7ôe[p̢iu#L}31bNKt}!\&׫'zb{':.7 ܿar
:t*RpCA
3D7:b}),'8MTW2CZFoi9&j罴p0:YX#ب#k}4}
ihI-	ᗉJx
!i5hh چQ)%Lcwe"9Øb3*f'o
C;}{gmNQ 0Pny}ѳ-Dkj9JH"ѯX<iX$OD2bѱcxK<^
FRSc`+a2ڬ`(XI-9YI[PK    PK    A             )   org/bouncycastle/pkcs/PKCSException.classuJ@5MҟZE7Mf&҅P~:1fJ}+Xuqg΅yx}p>!8M^|%&43]_rFIQHgun
aߖڹQ%bv*qq>aui#q]&`H4֢$BDm$4R{N'fb&tx5`I^K>Vж+sUw4'>PKLJ?   t  PK    A             +   org/bouncycastle/pkcs/PKCSIOException.classuJ1OL*ҵ3
ٸkq3JictHL[)(/Buq'|B?>!bQ+f\+wnŽӋGN[ðo')jW*>5<'+\Fa))MeĬT#+Ut045h:MfV16"l24r{GNDgE* С٢׀܀v';xG/;|C}<h/󾧁0{EPK+   v  PK    A             %   org/bouncycastle/pkcs/PKCSUtils.class}WHƟiKԢBWhQ7EdU*E CB4&=ԳGϰA]qnBU{_O{d>||/AI3$rbEخ-2oxiAR12CṂn0en`RԹ#tOb~`P|
vyuClOZ6t1
KшFU3csZv"wrQOs9ܵwtyìse}W3dٵ'!{ubO҅o֍\KPM`cWd/el [],w,ϗ5?2xyU4x S["ihj˦+um/|{HhsSzX=L96UldRx2(!ͮ+8
~TpJi?)PЩ gKue8_jq}_ڏRQrͯ0k%G*Z{qWu1\T@TCÄppF8&? Hb@Y6"K*.8a,' L~Kn+FTݸFna0F4
-EP"24Oxe:a<{n9&2q<N(!r-RU^)xDwo޾+oPn_Ar-n5لwÿÙ7YYea!eXyA{0`=PXdza1^/whR=en_HQPK2Y2    PK
      A                org/bouncycastle/pkcs/bc/PK    A             ;   org/bouncycastle/pkcs/bc/BcPKCS10CertificationRequest.classRmOA~孾Sė
UQc(Ąi]A;+R$e-	m5&73|+y,bv_3o|>xɠ0 ZÄT*Ti*]YK@er2yE28l$/Ť#J2Co}!#7UTVDղTx0	DMXW'T-ҡhNM-ѮB1-Hm_pJKd:CNoUޒS!._hDDV:<Ag-Y80N1[q;5L.xڡqbo1I6LLjo_ޭ*V~e"Lͷ*KU(I*zeL~\t0ly\2l\qЋ	anucn3mc361e-cnH!c\BX:f,j.vyi$ez7
@_f s澛-*#kJćLNfengd?"uѭ:<ޡD7ЀE
e_-PKV^    PK    A             B   org/bouncycastle/pkcs/bc/BcPKCS10CertificationRequestBuilder.classJ1OlX+.ܹ*EEETX(LJddX>%qrɅ$;77.V	
uKsDε`Ft#g(D+y[-JCTuq2"0RJRGE>9+(q`ti)F`
xH;fZi
m@rM#n_hz6p?r-7&XWhRWI:g}/:lV3?_'`y!=cFN'еݨW\S(ژY,䛪/bY:8f%Y!`om<c	ˏcU)DgPKà=    PK    A             ;   org/bouncycastle/pkcs/bc/BcPKCS12MacCalculatorBuilder.classUksF=KQB@3Pb+&Sq8<2F nPm+3Q*
m!?ܻ==k
l(d(>VЛ,Gٌw(7BTV0܆8Kp~tx@zqmZg/3\2Sv<
}t
IM>k/8vmW00^ozw9.J9ֹVȭ&1jrטgǷEqGPE?hucX,.7X卅Z
b>{LzaR]-WY^o4r
voln/ĳ>,#rC=fQ-%SQMv}#4 +2WT\W1bD)UQ/UUqNyU:yJ
Z5 !f: :JaJd'x#A3%g{	+c&?Py=awtY.oOq#$14O%.bJI4N0EC/4[z4h2iH|
Wq+,;np[;i\i\G!	e(1)Y,|@o{~&bmK^J~uIQD(^<	P>br.&6^kZA$e.MƲ>܃*z%}O-1|3GEYKΫ0|,cil\^#wI\m1/B
V$
Rb|#G6VWQӧ PKȅ\O    PK    A             E   org/bouncycastle/pkcs/bc/BcPKCS12MacCalculatorBuilderProvider$1.classVR@ !HŻrIxAZ*V3m`L:I?_uDPg| lp	۞ݓ 0d3{m+O9t:pP1")r˨Xw\R>FUr\_}AY$|Qؾi6C͖_CbsvI_*	_rܒ^p*o	{vF=^XC*|GٕL.AÙ7nGPsk NY}}iИ0DYѨ,κYZ5?y2	GTN	ߝa艔iQԛU:ymh
ZPЪ ं6Vps$FpD,A&k!$${#N,fry9x(g57	8ģll7COOWe*95&욒eneuNv
G4`o˾6|aEzɣQ=:`CRY!"5E'_z

i8n
10
͸8ni)
54b@Rq8ݐVqUcDv7ewKE'FU\X3.Cc)Rk{b9iP]Uw=Z޶	YLc|,ܯwzˈ%F*|h#hҚxo-L~VG4cD *?1/4d3ƿ`zSUrmW܏o<FA-ꥬw|½-dNCT
vPK~J    PK    A             C   org/bouncycastle/pkcs/bc/BcPKCS12MacCalculatorBuilderProvider.classSJ1=mVޞ!mQP]_DEA|LqݺV*(?Z@̄syy}|y)кx&8R.J%ssDȮ	ruvͨꂫ0ri-l36.Irȸ|YF;MW^5Nw_[/
0	7!"|*AeOwCr&2Y)m
#/sD{^iM}/A$1AD\L01i"): "}&XP,&|TYUUPhZmL[ ?8wgVRkHZȷsZ0۩PK:B[r    PK    A             K   org/bouncycastle/pkcs/bc/BcPKCS12PBEInputDecryptorProviderBuilder$1$1.classTO@Tf]ub7T$2)J4qb$2(Y1{{s{}Ul2)=RLW
dlZ<e*Wv4zk)$gzVP=)	C{ôPvj`7vB4#TSm1WG\'M3
]רjr{Zzi'<Đ,rբUrT[kA!<B缵(v֎u_=Ղ](]S^n٤Ry@8A1u)-:	r8,~j"KHH*A0$aX$Cn;yZn]h
*jwH,50,ǤB{mW?nՋKὧpVtה^c*q"*E;7ґhKsTM'Ӊ.h~_Z^=/ceㆌQܔ&##c AaQ{B(B@&I,%0e].Hm'/yPu
reZhӥj5qcܵLGm0ēI M4CMCM=]ZDLb6m"Yn"7fXɜGoFvxBz 'C`0OR@f3F3\sL/OkAj͓@?@~cxfN̢͵OPK`8    PK    A             I   org/bouncycastle/pkcs/bc/BcPKCS12PBEInputDecryptorProviderBuilder$1.classU{OPuԕ"E|Nc
%1ehO^FK{_~#5G4n	DMzι7_0	XOLHh?XHPt`M&%6%9X5-鞾8|B(0.A%:m\keve#e)XM$AfZG	G$D-]uʯ3Wn1v6tIi
ז2˩tE0o%G#7s&sj1OhuӴ **ɐRvӹi9X3-ye
*r yCKGVN̹1)	@8uqP^s˦45dKE?)EFD2ʸ&㺌67(s{9F.zqʍ1:ky)+V8l33&Fn8a!K&b'l^ܵ挼ټoj<L]v3n*0ץ>cM3VeNE	~rM7T-n,Wsx͛vT
$AT4#"*.㑊FtPѣqMT I0OcAAJ!TAFǈ TP5kv}k.jqdt/F*ǟUpt^$" =?KR[]{w1ǳ|x sä)RƑp		Br@|wx@| b$#y /FC`{hzM}d#%IӉUa PK?#    PK    A             G   org/bouncycastle/pkcs/bc/BcPKCS12PBEInputDecryptorProviderBuilder.classRJ@=c[Scj-]t1`(XqNZIEJA)X(n(w̜
y}{~5DaatpAJKCq[:nC!״ol޲?7+w<q'l$];^y?}uvl7kՃ#	@&ȠEg|YèMCZCnC90vJ2)lv
yS2
0a`,*٨L3:ƣb`VGsIw$qy2ZRRa :ȤF]3Z+tZ@:0{b fdc#ff	$r C,v|Arir1}_ e>b>XHggPKXX  P  PK    A             B   org/bouncycastle/pkcs/bc/BcPKCS12PBEOutputEncryptorBuilder$1.classU{OP
"SFn
y(h($_]w.mI	D?xn;F sq,1D
lr[#f޴Mm}%[=7Cd; =/N/ϕL+^Up\=Xs7wL:XGĬb]0C]t3:nA9%82tϷ{vF4QW(Qw瑹=?bn:j,roN1RTbM0[![7<5gQ\[W5ʡnŋ34rIP$4I'YBL}	$0VW!y[)~cwI},aVD:ۚ!jƪL2]#|% MO]vշ6kE>^K\#K^8y=g9^؛WV5pOniT
M$W"V.kc쇷?5^A;b@ALA"{{T !Ո>iXL#2:0*c2BхqHs1M0e<w<ϴ︿WmEρq,غ_r9^zń Q
"xhDD1R#ǘL
c:ukmcd4~aD[йS,: .{Dе5J<eJ<CV%4S̝Ebb/2ЈI/8oPKr  x  PK    A             @   org/bouncycastle/pkcs/bc/BcPKCS12PBEOutputEncryptorBuilder.classUSd
!ls:6+iɜnA/ueCI/y
yggwI3DH&*<y~_+rH(H?+H>H
k{
h̲xLLOO2̜.ls&xn>~ln7x HnvE񬝪)SMx&l-z-Fٷt0kܢp)VU)G̭{ɰ_Y#?֞pnlXYyXoW
0Kg-)<>*s{ufuy!՜K7Yn^6w+=M?I2;n[̂uPzK4[9=i<ߍ'
n&?#k,SqVy器]喝b\%W? ?Zu
{>ss'|:_z!KSM_'9yq)SrgFc
:}L75{Kw稑Ѝx%C;@9ힽq}A?CWV7gDt\U(u\FZ0tCGFqRJxY)MK$3:aǒܕI>dVpG>p4|9Ik&?\dY4Ls
7Q[Zv]<SYe
Vs8AA 3y'9Ur*/T+A<ǤO|dz~|$n&!)1BFFdzL+|ƒkcq+rqR#!7@JQJ]\!_Q=jhU.g񰋫YR;XY#ezٔRSXbre:=%TQ1&Fp;뼟ՈO:PK]  	  PK    A             >   org/bouncycastle/pkcs/bc/BcPKCS12PBMac1CalculatorBuilder.classUmwE~&-lRû.(6Mi)V 4?x&a;tw'>;ʑCϑÏB$MRIRʇ{w{/9>fJNg8zCRb.''|WmXFꡈ_7o5"V)ͧgTҫ2vB8wy9
 "*A(FQ7X.v~-d/5|UMcxkBv՟K\]f8oq[vau# åfk<OˆnFƻ#(Tv% BO)O<v|7݂ok?DvjmHH9{/ɂRf<n==	A]ս 
iߴzuHH(]䴊FT;ޔX'wbv=%RW6;&F%n	\_Fj5ON8i8k7pᥐa ۱]9TrҲ
f?l-Ըڰs-JM*AhTy9٧d |)5L>
vHet|J¯DC
QsZe2?CW}8+&Ƶ&>aicì619#jļ^1\3a(>WdF
mna8.js	8>mm⸌8&&bSa8TSU++l<MQMM!)ӧ0sajYLn=Ý3۩m|m˩W~4/Fم`;X~V^IɎ#/n#f eP?4):L'Ioƀ㻘X/@Q|1,~֮PK\    PK    A             H   org/bouncycastle/pkcs/bc/BcPKCS12PBMac1CalculatorBuilderProvider$1.classVmsD~Q*Ĥo"B-Qmi0MKZùV$gka͐ob঵i3ڻgo;okS8`,`pDp:NSFGԎo:ɰ:z"VpDϔ&w4]v9WѨ}h0I*6GZ
rah큁!:wc3k7V[--$C͜xH8j'VQ(͸^lb~`sN\YGYO!LZ:vo,FC_ZbFr|aඹ37:%3I>v#_0lcKѐe>gV>zB#Bb
\T	բ,|.>ܒW
IVqLq'TTqJk*^W14WXg2 HqrHTzCBa6|t^6Ya@R쫞=vЉ^."`ܑ	#Rm Jw"]z}}7Qad˸to`QGc:t:JǒIu$Cc8w𲎣cZY\754Ŋjx(IqKy5(&SSTx
rz2pd34L{\k尠ɇ0QJ(,H
dRrPKt߄1J;X䞢>zO?FD>Q$W4!ߑ8.vQߜ.қ;U~캜fO+]ؠO$&Zi92
/U/TƢO%2PgOb"fp"PKQ  N	  PK    A             F   org/bouncycastle/pkcs/bc/BcPKCS12PBMac1CalculatorBuilderProvider.classRMK1hU[ZqEAA55~Wz*(Qbfyof>	7ce~b`,rz
UL*	nRI0)4,˕<ۻd<`IRE"@Hp:Yr}7[h^j2ѧ#z$}	;ie	o)m8X!I$܎"
2a%`̃6A
\f<4.obȀ綵3DeY+&:#oPKh3&  m  PK    A             /   org/bouncycastle/pkcs/bc/PKCS12PBEUtils$1.classUR@=[*EQ
h,_ J+Jï4]K4$d/_p|(ǻVEZFFݛsgw CS"U)C<\I34'VYKN3b88ɥ(z !x[0t8!_9eAȠo{E.bbu-[p 407*3'GqY"'(Cmy__pG0\
¢ʾؑeG~Z|ӪtrOnD`C=jՆ<ԆFn`|l'fUɃ{0ARi]G-pcYzINz^/)
"~i"{WUtK
Ц^\-b]1
5th8ᤆN
4t1p:(U~O╼?J$"אh`YIˣW'JWD=>uXjĢ`=֕/(G
igpOmQ%ȰLN8qYF0͈7ᐁ0e߈4\2Њ˭BJ1iHsU9\уI:1.u& SR"/.p!5>햌GV9ۢrkӃx{$PKUKUKU=ͰC.P+{͑M1G7q׼it|S6 ddeYɣwгl~{A YEvI!I6fj65&QŨ픈-2/-<x6RXVw``BSpopsdm̓|HPK.<*  ]  PK    A             /   org/bouncycastle/pkcs/bc/PKCS12PBEUtils$2.classR@[ mVmԩ0|pZ![J8 >ٴh[Gvr$;gew~$rmx6cCGl-U_Ij_fϑ5"Yv]u;w	)	vK~lQxyB:hbAlgkJy-e*U&C)>V{˽\dY𫞽et+^,?+fn׸Tƛn69``[e雎oR;
ҽ0/@м+<8vXK1rdX eVR$Rg*MWW_lINwz2T^AZfEC#j8Gq
Nhpatyߛ:Myk!?uldQ}bߨ[LSXZm"2ZF&vpU
5ɖ(i]y_W<l嶱Q|u\3TM8@b"n4@@NۘJLD*bR⊎s:pS\U⺎AL븄t[~Q݈ThׯЉ[rݧdd=jt
yqY
y&t[Ha#eCz:DNcObd66҉]y['B$N
kq;]̽

c-=ebes@Z^EEޓAu|}c{\M>XEGDqH	gPK.    PK    A             -   org/bouncycastle/pkcs/bc/PKCS12PBEUtils.classX	xmilcR"abm'CbYR$}%Oz$
1lGmGzWz)}4V%KGk>;;{Ǟ} 
na@;*
{7͢ձ#emn@ia~OsKG};CQG45B$ؼᐡ!,F5:H@QuH3(晆C
zAG^7s
OhA%vՇ5v`bε5C@!6Q	TkbG?	T{WȯHM٩PG82L-ڈ>	=Zodl^jF
hCVnVotOG
RwR@mwS0oo`H=[_S[BͳG]j0dĮ7eu+p>uXuՐj~5ǇuEx
H2èaͯLӸㅓ*C~w\\F6vtmVcj@ṭԥ89)mМ	ʱ-D4ז3iZ#^5f55=͈ۚ}}@P*Nzc^M-Mќad{ݕ!<5drYS׹[!w+ёvaX~U)jgnb|D4rZ=i&t>ҵsuvy490ђn,gb~=Wc$LEF?[M*̀5Z瓠-J\y'&w
ƃN,}'[CD~O~I'Q2)μyܖbs:&ORI&H3!_snвK*yQ:yQ=hL|E<ƺ/f~#q1ˀnPas8s6=UX
CK܌.XS=B}@j	$VB	WKX'Z	$\'UBp%<WB	$lp%<O	=J&a^	7KEɫtmuiy]#GwCOA&|Gp+jG.LTzZWEN.vGq\א۬r̆]҃GoT
|-%/U~ۊ_XSim,~:L-7,ς=;ҡ9fNV[T%73"m[+ӍMR
J6-mGٺmf˧$)[s骝}$L_)AÑYyyȿ|*-e-rf$<xI(zQoM\y%\"

20</WaN]ǰ
2*,ER{`Up$U)xT0xZex%34
u

8
M
`f+x&~c,TdwQp++Ggxc2dxaCfe		g]l!0d11|E,#geDyfx\F}3`a_gxߒqN|U0~ nL81k2_ddŏdex1>%%dt|U؇GNW!SqEW}uXcAPὔ,Oˏ$_Y~B\NR-,1!Gڼe)s(vN{/O3iLy特|MsB,`s}&,I1'}cO	4Ɍ@ߘ c$%qW1!'qUcB9I]P^'_@;(HB;
='1
{EӸ(kLGKaX=!
	Q~GZ-IVnI[GvkӘ?s->OcrLo	s\̣%qouh$q\,"q Q	dZ-Mn9|Siӝy(~L*8'Gf4ϞLB$j$,ߒ7	z?;Mdji\stI	=@b6Qt㨵[HIV	8ͷ%ZZRwvܓs)	1g\TۭS9ejVIR,م(m	HO)<D?QG	Sjs89[DɼfSOⲲTF LܜB,#-r1_PK	    PK
      A                org/bouncycastle/pkcs/jcajce/PK    A             @   org/bouncycastle/pkcs/jcajce/JcaPKCS10CertificationRequest.classVi{U~Kn: 0IiY.X*At66̄ɤ(.>?xdfRAIΜ{{9+#FKFk$Gc$4Dc$4F/aWϘ>)!+C~	uÃjHfeHتkei2"YǞ7
tG$l|/tv%qǱu0t$ʘzdܮ_pY2GUJXwG8ܕϤmtgJi8,8BkA(y.yPt1*FT~jXִM;,wH1+FNHzyӬ6&/<뚶EJ)߶473pۛq=O;XTּ1
^p{%<*v*ϔQcop/W.^e^TzKG;
<]3r36JPKhiISvu-fN?<(ap5M`pvNϩ0@8P .RW@D՛յYS5ħ|ѵ1&[rlRʍJB的nTTΎAsZvSZldӨ˜Est$wm5tw®]<x0Dv3<g23`8Ƞ2t0t2b8pDfҏ^~yK*;}{dƟ^byfh'kUXGLXcf52D/텸(|ĪMU)pluxh\E-o%js|< U1U
	!S
lCXhM
㜂6!hFJ
₂(pRN<`U)؈lG1ՄaL7!xЅHŌWq' Oh'1Y720'2N"'#! 6[ƸL7Hoi<*Ԓr5}n\˞5&8}?A4$i_hio_e$&O=%M~V
DH}9^K>zyue>!Xv	r<]YZOnrlŇKx{<#nQp7JwǞonԶJqlm\wjW&K{~[t+%y܈R :{w(ש$|KBVϐd8ͨ$?q
wPaFH
?M^B>A녩5*eRwzk}]ZrkЋPKs/WH@    PK    A             G   org/bouncycastle/pkcs/jcajce/JcaPKCS10CertificationRequestBuilder.classTNA=cEED𧠦͔DcHT.FWaSٺ;k
zc2~[1q|;;s;{Ő/_o1L>FGXn[m#}EMYabXGJơ=ވ[p;9<}W*|J#FV[AldOlCwt͸Q9|辕o֚
>RX}"U!ɎS)Np0q0AI-j}DKWgdR/L?W-geo6ϫ>eN}L*6y-0Vm9efH1ʏFc(7C.&e\eXtqW\`,r t@]h՛-QufmW2FhC\;4xC2:>V>
PKv(    PK    A             :   org/bouncycastle/pkcs/jcajce/JcaPKCS12SafeBagBuilder.classT[S@*)i " \mEq#Ӳ,5dҗeFQiZLٳoe	`	 :'X7-8:"aԲl/-f0gz|5Lbu*#P3q1$m+Q.iF}YzJ
6w<Ӷ2FsM+/#+y
y*EHbTuL4<RE݌qh,Vd4Aւᜰ|ֱM0{&8K`o'^XLc'_Rs\,[F=Rd!.
zVpGA>z$u1kz꺦4}uY}䜞jؾC:ѳzcU"6v/0W!߬f9y߀!?wub;ܥ{)-:spވ[C mhנ"a@ JH-LєNLKkPs1bQ=̩Ƭ,ebA*X<	aLN\i<AWڣd:p`\G! &І-a
&tg4vD/U]
N4֣%ckc<(Y/)a5VP%ʈA1 I*ª`BJƾ9ϔWըk26+8PK^m  O  PK    A             I   org/bouncycastle/pkcs/jcajce/JcaPKCS8EncryptedPrivateKeyInfoBuilder.classQJ@=7FXRQhpQ[PܸNƐLJ2)\X~8V
^/9}y}zpuBnZq}Bpbϔ"\ӴUge]Ɉkّ!RJB$gþ(6#~:աٜWC-V"߹੐\	TlLۨ۰m_g5kߝ1SpU.zCȃ8Xrb,Bl3w#L\3ݦ-;X%<`+wc$ PKL<G    PK    A             ?   org/bouncycastle/pkcs/jcajce/JcePBMac1CalculatorBuilder$1.classVmSF~aEI(}OZȎlJiH@`	|!1	Nx??=
gn_tWFMAȈm(4by˱
4ƹףdPIUGGi]QV%aYN"ڴGvp"?Lʲk++xՆ'؎d-XH+B6 RcϘi3jkGM? 9pfm8|o՝ZfRzylH2yr9[hy2Lr왾xAx]`wWxw=pgr\fv!uB%ԡIF{Q*eQsR{=cvt[H;⒊Qc*UbB*>P񡊏T|bθ`"߻7h+]E$\7.'0bA~GG[cFwMImCf~mJyجQrJKW=2JǺ=.zs\?)=lde[	},e~vg?Ozac:.cJǧ#Sǻ|t蒄q74-Ɍ0fu+ÒbNn|-M*u`>/pG0-7d4\AVg!X0,i[
װ,I^I$N#s,TP	H]au˩˥)zY6͌Hy0up:oxxhP ȴ )3_!Z!ܢ%H30Oc=>Gk؈7o? "~>	ɥdI@(p-K<mID}
kD_ (+HuN%%`HMx)Q%jD"^< Х%bX1廉lBG$PKa  U	  PK    A             =   org/bouncycastle/pkcs/jcajce/JcePBMac1CalculatorBuilder.classX	x\
.']PB]Z+EZ}}H[X8Mz&}w9Biݕ,}gg?7ov}/ben̩_]U65%Adw; ];[<{uhkiYl8D#rZ9hTN9
YSuɬHjjjTle]%Zw2!Y5кU`HNE5QmPIFΰ>icnHӵxƃҌH(C4╱@%k?q~Ȝp1I]y!KDӪUZҬҖ46Lr2UʰF3&h$z*dHxU၃CÊzOnO.f_u:|+Y#G3i+򤥅ucIj#tNtM>Q|E:FT-C=4\4i
j-Yb$45IG:OvQYA˯0tX
ȴR)յ}茼xOkPGU%aD4Л}mf+0gܙc_w2hr	FW;	̊*ߜfHbX2i/s[oT吪1M3攐MNouwNUaߏ)]'8pC{#a+}Z|1xz]YE6U6Ԏ
;JeݼI뢒QfQfy掶CBftΉq{,ۗ(a6It-MhF*ݼ$a72::-;DOn#j5!J=+ֈZoZRjf[j%,EV	$J^
K)vHH)a$tK#agH'!(G`n@%(@;10
q
puriw)t_}C>{&"̯ߝ"!|+p-tx`q:ΰbe)Ūs᯺tQ3'Z;Hstu]cs  MvJCfdyQLzK(u}@`<u2kN k[]>e?igYw+4Ek*?4:,=Cf-Q\[0xEݘ[׀b#uW!zfTӺzd0[g?;.fƗ,Jju;ȩ_ͻ5]vYD=l";U,ft=4;FP_fʸY/ ^(ÇhbhfhaXǰaF^,㙸E(g0a?ZT
LFpHhG27^!ixj5<Z
xVV_/ZQ7Xw;e,ǻdĻe\2V}2jq3|q|c8V(>i;*(>q;>I'RN30peσ|
_`Ђ1!|ك!|%3|{?@wAd÷~MqlI<VGC% !17E'%
(zKNa*. z2\[Vr-+lYi*S.J"2eiwq=*ܔmy-zM%03_.x%XJBaIaq<2.ǜmNE$[wqQ1y]c8ﭬz.z1\5
].ùɰo.mH	$YeK(c>'{EG>}g0r<ybmԇri	3x2CN2N2.&d=Θ1wuRBN9bHx$.AoC1%+`7ztw`/DXŧ"K+!=D%a$ΕfEk&pSow.y)RXSbG{8.Hi!rM"Gh ~#5(zM[0*A0 \F*t9fl%YbNW^:^8|.=\;_N_8|:S7$Nռ-Wb	?X?-j)1YoM;SЭ>G+(s3|Z7	PK\\    PK    A             G   org/bouncycastle/pkcs/jcajce/JcePBMac1CalculatorProviderBuilder$1.classU{OA<Ξ"J)k}"cƘv)]P`$PmmrfvvO\Da7z:;n0\dXu+WqY*d-rdU|Y*$┞L.]+vWKR_KCJ^Ϧ&S%)g@s35tnwmyq)yv+
 "ۘɕ{/	֨Bv2EjE!WuTdI%!{BR\~Bz4rbA7=dC?mJ+*8U 2*VƖy("Tw[q;բC}h2e`nQ7pAgҔM!3?y^WNC4܆̤'/<nkلv<}!p#*H+ӆcR#=kBf)Hb2֌[a5ůW*ݪ3xF
pU9.yIhuw!M$i{p[h.-Z0qnXD\-t ŐF,ca$#8T}8o(.8&#m$.i1fMpEZ89DK7"Z07Ví)ϓAa(im}r_E
GdNE:9zw׆aѬF1C0XͷпY:*Jp4Ai{Ckt~/=$}#kxZّUyCHv34i'E/9O
ij<PK'    PK    A             E   org/bouncycastle/pkcs/jcajce/JcePBMac1CalculatorProviderBuilder.classSjA=cnMm4~UuTR5 &1nwno, >xgԖ@ܹss?O 2̸0\u^3仉ztQ18~=Ń;"fQI ױ@^ۑx]w|<Hy?YBc"~OFg9O8	nJ$a4i³)
y-Q¬<NPq>8y,H"?>:Izk7SMPww s1;oLScZ<.q	̘+TVVl,`FɘEܴ2n3ZaO2_Zk-5։@?钗O}FV1CԆXb;־)Uվn[4;q9\p,seB9
_ KiTrF
ڴ3 PKC<    PK    A             B   org/bouncycastle/pkcs/jcajce/JcePKCS12MacCalculatorBuilder$1.classUR@!jW1
(^B+h:֒&I#Xr<-v&۞o߿|p
4Ѥ.:R Iw{	sQ4d~*Y/U]oA[f\{eOy t㕵²c+Bi	;H[ua;GHXո1*|RE8qciv­8]pg+RP-G'lY{}Չ|1;^!_Z7'24{8Uyd	Ah?]Ge|esϩzRc݄Te5Rxz{rS27R|{2q%ntJ)^ሆi8ᄆ
Njc86{+0͵n&mM{ҳVe{~
mͩ'0N&l<M)'$b,s"?t~EMfOUϟ/yBp;HNk#+gn4i`0-Im1"Q
hH5k]5I&$.
gqS9qwt`JEL긄{:.$9wqiiҐxAy4Ow+(4Su5E,BZ*ePP!MTJ	:Rjυh3P+66Zۘ1c=%}	$6\~LQrNkf>.H1_Wk(pVô.JfwQT|:A\:%#"5{vpE(PK65    PK    A             @   org/bouncycastle/pkcs/jcajce/JcePKCS12MacCalculatorBuilder.classVWW-Kj!*!@
RZ6즻}or{N~̚B8gfޙ37%Є	{@NIhbH:^0Ài5	ad4!<lwwƠ!J;-[dfE:dBŘnH8-2)a)\t(*i
;^<焕apJވRP쮄/\7;dm2חt6bOI8ank!8xȒZ?mN9V4]weML设(Ȼ$(!XV}I8nZ!UC|Khghdws:xxv"kYWwem<~gz^MJo ![dυ[bUBw-L7-mXY˿i7
qpRʱ>o&(ѩrB϶	Y29+8NqG*jSiUFY0Bn>bed-&
:!yyR4BV<Qn餽d+&y&TY[D=h(&qd*ㄌ2N igd<)㬌d񴌰vtY~	;?U^BtT"j!Gd>M1I0̸@{ɹ.+i.U\d
UWV6vToLι2lS)K,˃5tpoy6C;bNR.Jdvgn]%P[>r>(TtĈ
ϩ8"U
-S!c'P_
,U4#n2nbT>_U<,CCk!2,^a*7\@ZE(KA/{a(x:[e<Y(Ppq0\Ǽ(ZyA0܋kpsR:SJ?P-ܘ{u%}X3\8MK\!4D:[)hCF.n<×?1Z@	[GD$"y\5D?ұ"KKqĸ>ݑL_ݩdܽ͸/qr7-b h8yOG~9|RG#_ƽ{kX"
Scu|,7%ѵ<E?`?k<p~1<Q_#:%iҚNg_Iε`i*1	T&e2|KC+z	

6P @ދ*O#PKW^)"    PK    A             L   org/bouncycastle/pkcs/jcajce/JcePKCS12MacCalculatorBuilderProvider$1$1.classUmOP~.0
D@P@P!l0MHfHuJo$MDIv#$sN}y??~*Cu4Pm%jL12yfPis-+Y+븦-ll
!Ll˲8*
`h"a-~wg[k]aCpr.m4;nV8y82[BG&jev
kL]v}-\F*2|c+C܅%C/'K2]wx_!ujZx>~0*|ߓҾ,Be:wAQ=M
"
+hVyN2T"
Tlcjx
<B1|Oȗ brS5ZFzGozg+!E+вdb(|)tKKt
6<c =+MmS^ԫ8!h3Sю*ZBE5T(T#1)i*j0(zBdD$ca<xDN41^NԥK	ϴqh6>iq~K[i3ks?
0<A(a )SNѯ#Dô>4*
x
0u0u

xbB-o%E_"⋋T;)Yx1?)_eA	.N\=CDNbUU''H#0PB,{S;A߱p"
Dk(woDR3_PKW  e  PK    A             J   org/bouncycastle/pkcs/jcajce/JcePKCS12MacCalculatorBuilderProvider$1.classVWGm,k>TR
G(	X&RCi#}
ݸA}w~=5{?H#朽ww; g*d: I+ϤrHuѴMTl05L(d0'I岰mbZĻ
Wp_A(	_Ft*9/)8Dq$g윰})\CtSm!+_7#,^j('˗Y2* OsB{2-nCeϤfA>
kڥNh?REI+ᮖ}G?A䕅O'H %}֩ƪ=:>VȧXks|ŲB
O)N?@9x\޶3G[`FbU@M7-⚰2ޙ[,;KF%QS-^MQ32*t^oYK!
wte32\}ad.ޤ;-J|1߉է0Č@1efcx !1a1e8:C?N0X4rouv(̓LOśT'H>
--7.9uآC0nu[
[nARdhc$wAaa	BPWuM[ea8
$dS&0#a}iwnmmwnw/H^ȗۤvHSsa}G2}Zj𼛦m[FIAЉˁְW4aLCi
СeD[$]v#a$'%ًq
`B.\Ѓa?nh؉rӰy
*&5wv7D]:>P{*Ru$\iL8C`Q9̨xK$wUǒ|"PqwT`V%T\كa,qR&r<Rtв-܌=Oвn|O.%W
>7s<%G1&	SQ2A-_ADɮc,&N>==R7Cp'ň?H*V`%W4Oz/Gp8X2=pk;pxφ}]}Uxk\L
u
_>ʯaTgR=DP
Izp3=?}Pe()FQ)!ULFDe2`B
E#(uPKQ&  '  PK    A             H   org/bouncycastle/pkcs/jcajce/JcePKCS12MacCalculatorBuilderProvider.classT{OP]|vF͌?QIHr{)>P&%P!d%MO=='_ xaRdxNAB0,I9[Fە?=xݒrƶ{P0r%Gk,ѪBT{:K
$c,IgW\4+bG~;.;2K'ykS:{

&
t[3?C܈ǳqD'mM+&>O[^|jpm|wV,EΎ9s\=zx>E/lzbex0c3y%a6	pepCE7UL'A-EVQ<C[!y2h<ey"pDLc]u
6GnQ/H.8F^Cx@Pb>i	i\Ǹ	w?hTSL뤚XHTKPKd\  q  PK    A             N   org/bouncycastle/pkcs/jcajce/JcePKCSPBEInputDecryptorProviderBuilder$1$1.classTk1~v<ۮ5uӪnrlHEpub@ئ^J.%Stɛ}7ɷXG!V1U2l.z{O]iV7hud`+%5CZpdv|P}<zORPZ^8
ġ/B=1p(57ƸR!MN@En{sx^[#HuG!fMOE庅9l',8$3m2Iƣlx)mwZoΚ3.45*Q[qK~ޅ1m6U/R"WppdbsAdq.̣6XQ%+fؑ@aizaiMG'6| 4Z+cyf38CgՏX{ĭB}o)8M6Ǟ~'\73XD X1a
WXd7\piTVJPKh    PK    A             L   org/bouncycastle/pkcs/jcajce/JcePKCSPBEInputDecryptorProviderBuilder$1.classX	XTpP!&#2c$!%F77(ji{Iotob〡-i%to[Ҭ7~{{9;p U/PX3zyU>lZ Y]̃SX:O]_;TE3`]LM~TWtwt
zF4ZY[[;EԥĆT!DfPY7A~Zk1ܪV(2,Plzd8lBfSƴ`T`~aQ%$P$`
:ds0%DzCQChŖn>[	6N isӨ+ђtfLf2e$
LS:FXoň֘;>Ѱ3mQB"u˰Hx`kIu'fmkA зyR7jgMKȪXP_<Al?vL(S
T,[Y-g5kpcÞF.Ķ~c;$hh2<LiѰ{|CI{~M硸+2N1Z{z)a]ZAãE:OOZo]ˉ0 /|UfN'dv>?ՔaLvgu
Sw6` {NuDVlĹ&3g
-6{fݓIN}j@rZ?jwyunds9Cg9vTuSu@";h`(
CFĎIE~]ۯdWG<WK]X	Wz S'67I$cV ٩k;ucsDw(>pj1hF:"}/7)ҞxnM9lÚJq|}LiI&Zo%[f?w\17XpYֲkmO%ab6*h
胇n<+4yZVL>˭PeR>ݏr:NˣMVqCZ2(
@hHlPbDV$I\,qĥM^II%[MbDDWH%:%蒸JeWKH\#rWPhvgD{WfavȚtlqsAUջO%U|$)_($ʷ{W
-fp993S5~~$JyITV`Ȱ{ ̹["r&"9lCEdՖiֲ]f7kV{Hgy:ɼfM$au.h};]5Gh)]sкtvkz
OUL&H@$t.Wvfsv+d1q1Q6<a%]J~-baSU&[J%?e>2N}ܑ9G>Kjkƴ)K|mЕ|ڃ/=gԙ0:#?HE,T丕aaxtt5ٞBd_3IoQR[Ug*&2AcX7([T*6b
y*6bUbXPǠBh`PQPȠ0 oSAgPvx
*j
Q]**V24,.**5xZOg?AK!a&?,|cL~\j|m|S*i^ชR|Yc8gcg8p?Ä|N"<XB!^3|K_.kh!!ax\AЁ2
b~/+U7D]`g5S
Sp_S03Y?f	Sj
uܻǓ+e
nW`x/*Mބ(8#B(RpVFm=wGPp'p1Sp-A 3UE*j3PM@dgFwAdÔM?ojV,Bʊh|7Rx=*JJj_(-#y.Y{B(5kN1^V':-t7zX~
]q=&..ٳ(GNb[c^M}x\\O6N"*rOn(pQ\,qQG]aꎋuccqǼ
qqĆqqic~"qRqQ	n-#UZGlWYI納))I,?.6VufSȄs3
~yt˘ha6ŴXOzCLL%;v2XcbY\ 6V,Zl~!qQǞ=eG(!QTM͜*Ǆ6{6PL=ion9f;^Eh~2t}@{L"iQ)D냣Xݘ7m&Y|,oL\uS쾇z8BtQtcs]OZ%H[(u%BsRY4<>_E
|()b|r	/AÅKKpO"{Jr[ӝSo<
ӼPKߧj
  4  PK    A             J   org/bouncycastle/pkcs/jcajce/JcePKCSPBEInputDecryptorProviderBuilder.classVmSW~.E-B[_PLXې.6K۲ƅnlo|"NqƯOdB :ifr{ݗݿ%CwxJu[ezLn-I.2<w݉X,[VPz6+f0PfnnnqKxeuG=/CL7LdahKGKU֩'y5g̳,E)F7eT
J<V<e⋖a?8J<^.*VǕ`Ob7RvLc-|h
6o<ZR4ꕒdK7=F+%C]+$ď$4zu3Ʊi^lTTm!e5\RZ&
͝N3I6BښSVQc3\"ѦAa	%#aD	JxO¨"+G>fLyiQ]nThU[NckǇ8E\A2mդZ@$;JY*zV2;z\oEKteo\tk
]¾щQ_{rA'S;ÏB5Ew(sQp
BQpJtK+BD"@A\I̊k
p]B*>3!dGJBbY%bEeaĢ0dDD]WYw%u9}<N5qȷJ$E%*T`5+פ8s.o.V]dߑE)ď}|ROh<AFd[w+ 7)p_>;M(16@jd\gHD6Tc4D'#ϱ~/330gcfh4_=^NN-η
U%	ЋS4`}ٶ3;lݏ}_x)HMǿPK8  L  PK    A             E   org/bouncycastle/pkcs/jcajce/JcePKCSPBEOutputEncryptorBuilder$1.classUNA*uVVle[" $5$_n)}+D2BҒ4M\33 5CS8N'#	;t5Mv(Ug14gz1ˠ䄳X̙w:ϪYa8]XT&V>C;	eTvR%8
|EnLAhèiԌY6}NQ6xlJ~R@AM&R^Xk.%aqǴWw[24kD:%Ҷf&6V҅G	aCqc'SS\An}5i+qhZY|C>CǪ˞Zs3ƚC!CFFÑ:eSocsX݀+9n4&W)\XE%Typ.t$=35)oԀPiM=TnjBFl*SЉq_Ax$ii)A)4#Ҋ~I2,Ɉ$~tAc~`܏^<1I<c&ͬ`M[7rkɛ1]6$t1Mcվ-#a5-oK9\^w<S]`o   			H&Q	!<@OtHnoѡ


KăSMy:C2e8#7t7C=[C3ySxtJn2yLL1{/<F4И8!ΛK`҅G$i߭?PK̨*    PK    A             C   org/bouncycastle/pkcs/jcajce/JcePKCSPBEOutputEncryptorBuilder.classX	xSW>V~~cCl͕` `8ȁ@@IL&m&鑐ٔiKh,AD!Hw^}mzIwY'Cfwgݧ|b/UQ٤M[r*60&Xd:xc:/F@/+H}S@J֦F	-k-Pho h
k!_u:6ZZ,eC@q{<Z(T^SS34MAzÝ]ŉzwoׂݭ<ۻ۴NwݞP|2h9;#ad]ćNZw{ivR3]nӡ`B4vh!lvxv;8[A
@F&Рq܆y-oq Wău8w
riвqdjOyI+0;ݾpwqPe-
Nrg]jyd3ڷa''G˄Clx{s;<Z7O	L6:>gܝ(BlhۥyXpj}LgBvkOl7/c6.}v}{"q!%0|"kCݚNnc	qZ/OR2%7촰m`Nq>kq6kwgf]ްwEJ9cop$3j]ސǾȜDC$d9끝|P
&Sl&7҂=z&HFp=CC)shoC 8`3ٷfP${e=a0R^0<T?)Ӱ<]p"fi{ސ=n7)_xǽƣ]etEcO)5}@Kpi2n΁]olTlyņJٰr ૛R2fH?TuI	d8!CY'6
G %_^+0|SnN	
*C/qIp<|ۖ
,S</07rиP(dܐХCKsL%Kk3z6Vde)+<7%=Rjd&dX+XWb%K%I,BbJz	*Fk%%I "qF	D5$6K\+"U:%Il!hHKh;%:$}Uڜa	 ~KR*tڞD9K2+*S_wĞP&S>}LO%YH\RpdarED|GGuyQJlx$+OVWgkwv&[2A/oQ٘)BMHJ=;)e$L%CJV.̒kY	>嚯iT*Y2I)fhvƓ.U*Qw47Ђ[HR:_		Lf2~ݣm|dIg#m-Ui\l2_;T(y/z)i2ɴ&EIE
UQSLe"&\d7]
/T W1P1Tq9VQI-1QQ\M<2SQEE11g2)Paqs0O	&RQU\~FTB{'U)Ka2Ϩy8fpV><˲S1I)>ϳ_`T90b:/3^|{{>8OA2=&g&?a19_0O
ށ?(x'^Up+nſUmxY̻Tp^g1FP]wDIl
 Q xIAɄ yAxC$Y~7L~Ǆ$_<+x=(xGyxT(WL)(P.GX&E }nǇD.}%v< }M~tܡZ=׹[=F()g[Jh)[]o)RIo)A-x;it#hbJ[/m'Ĕ~18OgSe~18sUab**F_1އ$=ipi«l:X$I:z[Òɒ,jߊ%CʹUҲ⛆I7:wװ	7Lp15·\1'yi	@7c ܀oZs(W%**cFUDݬKŝ1!,OfD4|֑u*`yӞ|;;"V~u9)ɉdD\vJ`]uvJ25*1t1&\XUgYt`e[
܈h#w.(Śgq.$7"Z"ɖqHgɆXZge+)+ɋa0IنӣqJ[#bzcӓvi:"jȆ\1p֨"{uy'E]T,u}	tȠJY{_=ll!sb[|kw
n|.tsyrnԗ#X6\$\]11uƨ|6>$u9<íUx[D堙CmDTDŵg)ދ,]$8ױeC ^@^.q:NL#7I#qo`}ȍc9J BIPe镑t}UXd;H %P/$nJ6Yny#[Ur)yh{h-Cce1G!nW)]PAՃ%$eF*:!J##HzzR0$Iv֓	5Ț5~-
;m0v洵9kyiՙPXUj+]x6xxiAc>k(z
(rr9vQ,ޑm#eU9zVgZ%ךAkZ1_5*2_oU	[
jsl'1]b:Ũ{)]}:PKioh  Q!  PK    A             +   org/bouncycastle/pkcs/jcajce/JceUtils.classTWV~.E8$*S,Hq,iI	Im%;g9psԟG콷84n'}r~o L"1(㴌!328'cXyo!y ϙ<ɹpuav]Z.굉|AVg{DzFOl'Ƅ}uӯʏ'-Խ[g0=72l7\iJM+bPNwT5>Үa2mZ=nFtxs1Ny&m
^D\2~04pZqYw~2-?=+խeF]d8lnUh"JFl4W]/l1dfmy{oaXyO+U5ڵ
BήFJYcZu'\q-hvϴSdhtr#!'aD¨II.!/6f5Yk
J>^U;7;NAn߬1Iaz)[S_b
cˊۿ_Qw

.>9|pxPPN^bQ],r`4fq/9rrZcC2z(g0ntp(
`9<]vEnSnwU3ڙ0 SZO=}bۿd|;2z1O\87apFs!f^^D@dW(* ~>M
c}Oৰ.$S,5!m;oҷiS:TCZem=
PKL  t  PK
      A                org/bouncycastle/pkix/PK    A             ;   org/bouncycastle/pkix/ASN1PKIXNameConstraintValidator.class[y|T?&//$d2@A0o@A!,a1!HDUf[[tu\hVD" (նvQ]0
wߛ7K'}w9sv}3<`t&2 r\^2q|zTN\?*R8J6̧Ϥs%%TD3	?RVyI8AVcxauMq8Zikq0R^Z/nB8| 4Yqsek8K"#NhيյW,Zhk0Xo	EqrbaT~Hd\_jn
3b⨲֍׆bIaXnGcHCk8	"fPZRݏkVUgzAҟ]i>R6"uMX%T_Q}ҽu`&ւ˝*,562"!Xd57"8l	-!Y_92/Q9TŘAnR}a5d3ud
CZLI`oZa(Ѡ1HM(;MȒ2d&eZ.'Khik3*tuꀻUetRZuv(kQB:C4&ʆHSKhA0yqVڴ)hFˊӦkip!uMbt5+"D	Ŗ[|Es΋.~@*XZ>Ͻ˅(R8XMD#uX<C@H&͢Z],e-ͼ:Pݤ]9PrN6Ja9FKlzѰ:R#7!U8bSF̤ZjhAfUf9t13`ӑ,U lk6Ϙ4/ܼ.ۜ+ʥ
$o^8%a/kjAn*\j4**Q{
ƚX0PPt
!+/Ѧ7ɰԦ5;V5n,ѓ9jHۗx '*MU$@wR}"JIT|`]1imFFTuM3>mkp;aB\܎I;D4cZJ7NR'm)jhnlIU9oe_Tm*17I 4&0zm:ީj0oxRhɓKŐX3ӑ}YEۋx
=zv`rkh@ī/6}	WKBtF]_-f6epp.|%1ڒ5o	o+z0mytfzAF3 =%Z48XHʎ>)oZq,vYhsjm:mͭuZV[0-j4F/kݺB;+iȨhmn
n-(%8a.i	Ԭyl7vg19*rEn)%/dǚPk2rkZ]TxQO TQ{ ^hMkJeqaREK@rA n``.B`F]pƸ`ƹ`&>Lr._Ma;dAp7pp6naN>/dKeG/%,Wdd-dߐ2+%^\nUW$
;
JHl=ܼ y7ۑm掤E+%ؾ`
3I$%-t2ڷ>.ĪS2ԡۯ$	_O)p@ZH'9i/[
31p)DHj뤽t8F!iy>M'
Z(>d)3Ŭ/ae&nB!?>Se
&f|a2!i NiDqL1&52:6*d2q	HuTKv=9,&hfƩp5.pg\h΁C8adJP&f9l+0n7(>sO/pɑAŅ\,vO)I g\ى8R
l Y$-J3JW-'OfiQ*g.T,'XA	$xa,
!$O
P!J*|d 'AC
@U!F9*| >*<p#>KPpX%A-C	>EIQip*\Ux̭BTV&!!*LfCUul
KWYl
	"l
	d$UH Fv6D+V
6Z".%XƨƫMPa:+!*b>e
K_VgX@$d*T&K0`!j63EELﱩ*<M'('A!ͤ
YT`
9*, ]#l
[<"x OTE*\K`+A6*<e,8j-!XJPIpU	 XIJ7XL7bk	SmYw:\Mp
h%`;
U8Cϰ	
}YAR'nU௬ƶ|^)vg!;>@ut@]*Ov'f)p&=1\/p#x\Al$'l"h L&F[>N	O|.	H&	AM{	|`/}|	&. h#h'$ACO&x)	~H~L,s
 Al,JKa2)eWܞ
f	"Kk$ؚ
lAAc,PNvKxQ>4Vsjb-˂ͫroc *HL<sx.m|@<x>(\`IV6,_jٟ#DhxQ氱 qO#+>$ü?@d* {RvTrҧK71~S{RIf!R4"DrJp6e]Ϥ@68 `tVQ_h-옹)ba/;bz\LH_Q\ؐ,.:@ڴ60,nc:{:yA#ZOlsBVTVa$'*CZT{Rρ[:6Xgt={j	xOSZƠSAuS.ưPŐ=b)[mrA&xƢ ~jѾ]<>Y4Jv8|wv>Nvqqv"㰒wv=Nax1 {)j|8ؙvʓ	NsȘA=2uuC>+eL^aDA#]7!wio?shOD5D
U4QC=T$jx+'Vkr7W2tBw.ax eEJ}x~
?0	,wPPY/7#m&8y4SZO<.ju\W`$5hgѩ:dRC.a=np"E7vP풇kjQp(3
/FQx(2
/Sa	xRRE~=laۧ=l|~I˿Q.VAt!z'Ubj3Ubc5Huᱺ'%`uUO4/zJ_VPe}iXq[V7m.eK<׋mLu:XWTfRa19X0)uBtk' Z;k%~mfkcvYVnةc/g<vu]CN;_sP+دS9aQuSmȾ
Ou.()2z4ydhs=a*ya2/Ǡn0.:X#݀sR{jR
n&Ǖ,06v7ɻ(Ajj$?iÑ
N̻ExݶlsqXٽB=>jDsoa"_*rm7M*q=|S:bTu<ښiC2]`4SL0JBfm&ss-cx,Z{o1|dxÓnyYrm`"<fCnsk~X*sg$Mï?7
~ge
@:*|(H&&tpZ;K5ͶfDw>W[3AR^}/ܸ+%<Ӳ@Gf~BҴxxb)2C[/mԏPunJh)" [lQzzD^TNP֥eMMShSY+䀏]).xϮ^UV.iCet=	[V]ʊpHgא^7f#X#ol0FRh2F1O
#p\'bzb>o ?~ߧ| 2QV85xv]e^CʫP.VXɭfyI݇Ϙ\ϛUۥA	95{`%
~g< [Pz}%("C
fmE~,Qk7"܈#jsh y@N't3ye^ӵ85TSJE=>'GQ䗍ϻtc99]lG8Zӣhe?7ߵ+[mbˣ,k#۩NI$dͪIXa"H=F?TD/A&Yl{u-y
]ݐa@u;H)/i]k}g௳Y;MvI.1mz{8S)^t(IfYa*x,,X8l`I\ڧMOr`ѓZtPY&XU_p"\Iď9^:Mn73[쑋D#=2C5K}~^8J[7{`8hcA9
]T?s\ag"TA%/ȷS
M˛~C׫,#47,?6^統}~:oҽ)|FDvh<n三3&^:rĤ:7CZ)Z~>BrD^#K{,*8)sÏi< 1jhG1͇9}e8!%<exA6c%e_;drqi5z7Zk!Lv4)ƣP]?$g@B%iR@xAc@pCIBIClnFi.@3f՗0,,g3Ij3hx=rүH1^;qZ3&n7EOjaǦ8SL4[K
?mӥ"Cd_6e,^ُȰ٧$Ӎ6en?2U?.C;ߝ/^O̧@sā5/GЁh#K
}\7X/80^P~jbL%q>[=a\]*oKeu=<b>
̵
}Gy#ޣl1"mԌ`/=D8ɜL5mFf'^7fsfvBG9Ǎ11rѶ9vzߟ),4&Z
a2a2>b]"Q<a?ooK/S_.ֶE32o ~h5<mk!KPib;/Pkm
T`Mzs5^nc4Xk }n6NOeNtnt=7nB\ى>/! T|96ЇB_T7fM^H(at3Sl &[yNl2O }wF*}@џ3E}$OW4U+JoxtRiC&sF U
S~e).ڟ҂kf!ybωp3.wowL^āj֫=K+9+-1
I]vE1o/wyxOj^,3yzC6,8IJ6Q\){LIf?r5ԏh>&%9̼8[LWd4ƽ0M֣u~`蹹ʯ`OfCw
>\6'n'TO!3	7J'HE3lHXq6If!/r͘JHz\g>MYT@-$~;9)0x
P ?GX^	Iicpnx?1!-2B.Ld7	{bpj-2 .Ȧ#C>^93vHN&u#V_v"j)awǌΓE|<e|Y<+`KzÊ1zˢr4Wy~@ڝ"GG,/X)%`8n0qBqTP,樹cVĊ+Ғ
j7w3#FL=ztq1v}o	ރHW:PK{uw  I  PK    A             9   org/bouncycastle/pkix/CertPathReviewerMessages.properties][oܸ~& '=Myq2'Nf"i[#xO/EK dȯUEX,ReESw}.ؗd}2\sxtO>ےݱ?VOXkWd_zw%_g
# r;F]>/nSt/w^}ڦ`]Wkۦaݺ鳲+.˾gob|K]vѷ0fjgnl6לnyUy8РPT;dV#NAkإPܰ󠭣cQ#uϚ+(9EU_ǄmSԫQZ@APIOPf.tX]`1K7XQ0_,Z!Ś6ybܦԳ) xt6A:j"IQ벻uw&e d#y8L&ƭlQcCY˘j1|H-wC0N 
	
ޑQ-Jt&@Q!T͸)4BV`m9"DoJ
:7o0R5a.x'q i~HSf\|O8>
>A+Ձ|˲;0޴ʙ2JO͔f°	&T߭/}W=k/o%tά	37/8(.#V'Hgf3Q h>*JEۼRqVkN=Ts6rWTWxbXj5VlWmLXF7hM6[M<pWe~FF;^DK\/I ¹	̍Uۼ*A!	Z:0!,_je	>/,,?1ȱF:*v/>78`/RA.{|CJca!^bMo *k૶WE=_؅O]v,}>t>$
SB{]4<iW^#:uKFľ)iFQӇsÁ-{Pi3錱Y?]MT!kI2 0
'5]jAGt8[S8GeޟKܴJ3 +L;b>fK^*PLwM\aT`2ӚaiU@.P~=l=Oh{P ~5W<՛H.vFSh}h@LS%2[B~c5ToW&#;̕CI#ʥBrxk,Ƽħ4Lq`$RNk-6l|z7/2F~
Pʓq6Mwv7guưP0ŸȗC%8@uXxƚSh3
7!ɣے}ɇ쟮6-~fW
zm9
0z*^/&Eyu
+5XI"j7{RC*E
t nwU-c}x'ݳ-[Ӭk=Q/FCu8EmY0aD4&.fWnqIMm@JVNȂVe-}N)-EʂTmRV@z`R=6X鞠v[Ϻ1ݷAK@,
MO\bYd8ϰF3#|O
]1E9Χ('rC}6{vΚ{ZT9y3>,lg'"`8^N/eo~,#OFs6	WS2Dm׫^r9 It?W0`yy#$?|9%{ٺA 柠i?䴪Xށ\wri @C A-5<|oǺ3OmyW}%=t;
)pKVVκ+yfQOKa`_ˁG(ribT3>xe_~ya8{y
u囥XzpV$eʆpcdO+쓻rmlEa^W̬*9]\uW+y[B{}AŎrĿM::*cSQ[VS4bQGD((ZKZI356'5ǬgMd:465$bѡ+nxE0:MH*TVU}YT&(u"
*GI$чQM:#Ύ,*MSy?rUEu:eGFy2W~$W<x |4[F)0af!lHz¥YÜWMҕ	m{ 40ҙ2\|6lyÈᅑ ~
ޓ-mk1K
r:D\
X$̄1rADL\4 B9imo<{.٢.!ϬYz AH]YؐO"O
"U'x`.Cc@}"`D>pRN#tC0	P	Ruyf_R!ct3aĄ6| Eoe]~Y1EϗoC(4V!eK %#t0WN,:F@f	ȈnjoN3V?W" ɱp\Mni!"K<ڱ6 H&	A>a9:a0hm#(Mrlmmc>.o_I^,\ r/E4 |=~N}|/heCEj=|Z%E8s=4J|_܁A|\߱WƘj`ȹ7i&Gt
/1:Yy.*8qvِ~
G0j9)KbiN(-lTc[͆ᕽCD;hx	㫈G[R4;b+szNaP&,ѕO{OE-5:BVxrNhBaFM_ˊg#"|wUh a:llq앭C͸^auLPd@,7dO1?AqZӛdu>G	IEܙx>Lpusq-nFrU0P/[&"&.xXnHG$l3㗼ǢwO4CnN@6a+KQ|̘4s-q? C1-s>w$D)'H-e|Ő{3.aL

NO垾BpRx땚| pL$Kûbث<&ņZ ߍ́
NTS*"nŌo0HZCr<Xa6U6옰V2% Us9Pg#x5^!u
oEx
Eo{miC
MpVpĿe׷%^''[>\|AUY()+a0_ИjEm3zJ̆>2jG)tI|3cB원9vLrQi39o`?(9t LLo"_(F669lmkiK՞5k8m+7n1i- ]8Ε-m>{A#B[wygB-+vF0

QQYLgZȍcMMB7-;,/q%9CfP%9li(%·e=^{lO2a۝H`/!6gFtY"y &S2d!qVՇ<"Le+ғ4
`sf)'dc
f1T:ǲ5Lveu
ƼK].1$g2aTże+ ޒ^Xt+T>Om$!ko˂)LϵXn14M2R[S'Bv-0
a57ɮX@kR:@F_ds;ĕ'XH;-i#xy:z8G7%6
	' \gBzZGxKɞz*FIA~tԪu߉[8𶁁r4
rZχ`qKAeߕcHa&.IG}aDf㒠SmU$c܂>LPٮfUиwO
6=1a%"MDy:=#rڒw,)8k"RҸwBtM}2!5eHps]ݫUS?n BtU\[و]L ^*<>b
'Lħ,#xV|pĤhF7e7\#Zш7%,rJ(U${Bn+t;O -"|a)WYܿ6֢]9@i	l1LGߋl
7
}kbTHw̌?o ufD&%fi-Xt?]Dab4P4vj9f(/C/&pHI'1ADO'`i/}>>cF,!>TEhA
8HQs=Ϡ_*p<QDTmA Z	l<^}dy/#jAS(=+ilHhxz7DVu
JbzS
X|ΣSFQ;8Xҏ(6L kF8mZs|p_=l'Vݭ\v=YfDq@M7JǶh
CQ}MV[}k}uh'm:N!tTDoUhVJ}bE*1m"aAug2mF=%ڳ+GbVhQZWIdݹN/JTuR/m d)/9r6%V/4Z
^`֋eT񣘠TȎdNVrn(2kk2Q{=\M}3~CS%Oe N?wvvr(tbQ̝TKKS?s{fF_QWߋw;x&w_*u'?6*ؗM
,Y.M>T#5uNܸ-;	x$u2<Q ?
2iX
0{ѡٳG_=9yc6KD0;Rfh&|OiXswGA|٬K^M+"%~?իW?z\_" {U!u '>U``,W-Ծkb/tU͟
IKU~7xmho2*sdՂjM'ig%kG6o9~;#f)IXp`KP(;`G'w	c>ClpD|?V*/2_RN
Z"
U	Y7EɏZ7BF2G,K5*U~7fG].j=ޝtZ+YǙ$1[yɎ7*E%uSUTf1M퇘Qx*pe4"qrPF,n_7$2 grde;7252VmDW%p zN
2*dJf ƿch;c-mYphe٩/zPe~uUBƕ&9L?Ӄnb-,x|J(c^jD)!<hٲeocA}࿇Ffhs^\=̆-%	9Fs"]Q>-uZ`yO: PK7Kq  t  PK    A             <   org/bouncycastle/pkix/CertPathReviewerMessages_de.properties]_s6ק@/vm<LFvVGV,KgCd֟ap
 Ag8ce+F<zͳT梘`Üo#xE6Qbd|71OO8O8e1Hf-FE/
!--$~G]u$`(NWhuDqKٜKW	Yu9vO,NYl:s`OX*2H~QV;=_% $9H^ʶ\G $4r3YKw S6GOnbkvs%)',4$``'ŢP;!*I2)yh$a8oW ;LהU̠D(Hv0.$؇U0Z,.68l ^x6e2	wKJaH|uul1|ŻMVm`ir:Fʫ;ԖhQLuƀS!<,5U'.BVj.vW TB.{T 3Ba~c!ihi8Pt05!hRG}7lçbλ> Av7Fcz
zg̟ȟ#
;X/t%Ztlz<"̘]E3W︈ȡREMv>ֱZ.B9@Qw[&k~6Ya%P3FtXg(+/&H|:PȽu;#`"QDA[@zί+|}˒0Mƫ42m	<i({sL%5}l5Fz[BNxzLt}AC-X%zT-#2Z$AzeԳ^QSPw_<];j,=aipHcqf:ݛƣbK,~1ISNsn0YV
3Fu
q\e}xmճJ~Z{TZz^#CY%"X%5XO(RQ/|ʷF/V
>FO@ME\Ne`'yVW(Q /˞>tY쓋A`.*j>Wo){bJsld.^N1"NSdbTsZtƯĕ0b! 8Ўn6lӖN5hkƳpV2գR9˖keH䨝+{#ctWW/0fRԌ9h1[Nhk(Y|O>u~D4%󾡜ъt|8$Gڍ6FPc0{ƶ{s''Q_8Q>`XZ[L8N_
l?HδZPɦu>.EܛX^/@)|&҉j4EdY+;"?Q|W
nC;"R+gYfV(n
_JJXZ<]+P+ZQ2)[f c6+rj	
Hk1|!8K0W0T-s\X8tn %&)E-`#KyXqE֭wᖒ\f&ta1v~,h,ɷ4?]v9[67˰:3Yx	fQ+P	lBy!wp~vU$Y#)}Ҭ[ /YbQ91FL%N)yY\մXtJ=Dpv{ifW/P^@?q\:-RyTˈd)NtBΓ$?]7$
/qjt7!kݫػA2=Bz|krѸ*u;<T
Q.Ӧ&!i@[>leopthJfB	h*LD'%LD 0Ț	oE(h7EӪʛLpMagZ\2BTB{ʊ'`?Yf0eWƔl0OϵOWYe$5z^db]|b+8*Iͮ-!ZyDN4赢`8dOV7~T1^߾?a.6
D*b+ *+h$D(u-IA	!|( 7e6F1_k2JKPľnXyTឣqVFXl8\6è.VjW4oUSW7' SK͸F/ЀMWI,WF.$<wZnV ^hm!@^&	$nkq5E>vW뺘>XB!]Qlqx썆5H/$dlq
hƦ5*}۳8xl__ʅ]9aYm[V)@]ݛn&̀k-h8 0FɃNs'
Fm@^3NysU/$eU"Kheׂ
 젤vIF":SF!FeùS(>Ӝ5_N3C_`m:n9,.#It:0RI
Bm`گnnN%ѵl${li3N4+kaT[w	{נܹ+}.:Tj<
\ʋiכC}w4xgd{9pvCoǏ)d4}$ļ;(w⪇rIMiE;CŚrڄ+87y۶,fHCx
Xo!ko`nF
7F 9(V܂U3e.8QFivL B

M5D[bXB;ahuH7jmjH,Gu-1n1蔪jbEFshiZK+t-ɼ CH;2XkxmgT6nxn4KIm8waSB'*,.iFq/̲@ݝu8o#U8"H%_(BӀ>:Oi^Q½I^C|jQP)ızݡϮ'`(nh&hQ=-ڌ}7ݺm^|pU<]&T`Ѡhh.l-`]!2ýAO
."N.bIrOU{YhpBa_AI4BE{P	T` a
ǂVOd
Zk-J9RpLT,/7'Ɩ\I anF
d*dx'ᤸP(<(1:6Ǵx^W:
2?,GA4]vսM֬ۧN4a}]<GuV'MikfT;zWtC	ܺPSPYu.KhK:nX`sLp=F,IW?4/w<$TB*%o7븐~m&1x]/tQ.TC(CSA!$8IvQ՛e]Lc̎YyxI
yTފh0D4X\G| p5.ˣ2_R:^`Yr4VgVY'a0"f2S:12,k,BN+4GڪEP1 ;&%Nqm҂ _x7t	j+\[E?p\ag*v48R
3l)Q0شawwzȎۦvýdAWڎ5M֌=Kv4Qd7A96g9z/Ӊ̼ϻ+0%N'^mdG%;s~laY͏	¨~	ö˦:ڍ9PZ{
~]kΗGg;T_)dRLnPBHQ[h-,=/rjR[ZXUG)}כl&3AIUBj"K
k;p.֎k4ܒwඈ
1$
f@ST=*zlT8{i*PSS,b@LMaLj=.0iaeX@y@1e$odÞI4eiuī_MuP0뿠aBDr
.l=G\/i2OI¥''.N`k.x\n(tZ}l9nI%7\q5y(R]B}~j]4Qft?g&Zє(P-%dϚϱ6Ss:S{tA窓,ZL-<yq낔*	=zBT0>#TV#6!۹zmD'Dfj'+#M%A!5DTI R
4|T);e"tZ]68B:\m ֬p8XLi毯Rvl-:5&bB򩖚,x}7JJmA I}'bI)Qqu*jC13m4>q_tشyd<{&\=5̹vVy{mm
+j>%E`hʽ;軃~PC[hd,2uOS|
}JeToէ~X 3

vjwێ5C%mӻ+@^vtovmDszneD
j4oSar4SNt_*P5'z+6ޣt#JTj0c?pwLB`'T2펢;|ps5?\?cvx(GHoלR@ c"LB	k@#AB:$j;w$9om3fky<+N8K/Go0
TΣj\
rHhjҧo#r;wp8 ,7UwCSp:"_[w,Nvs'ހq@M*lち xʿtn`"{a6ㄞU[]yÁ-ف1+AX&Tt۲Y#\׈2,&GmN^ͳAk*OŞMQ]:Gp
xj7X<'lN{h:5T.KBL%+d}ܓ-{uBI|_U"-CVaM<tlQqvM<]x 4'JY
=%;,
wXp E#j S6˲Ak"	[69Xu(3RaZIxXm)aq_kWy7)6e,y٩1"&O.t}V%T+tǣI%X%٢Z' p
gLpae xnI;r;'SD:ƯeM*ӵ͋csqY
f!7k
(oDJɔpT2Du9}W~=<"'*Tr<xpl{|O~1U"]Hۦ$gŲv~nKBOyDY-9Mݬg>s8{B=/DH"ġnd%^ž`(/DKX:ZA+_
~,%U5Xoגv񚽌҅A-^?jP5E~iI}}Ś\7wDg0d`YU|>%}Q{kن60 py9=WT4A{5 Gjb{Вke)^S|czQ;tLEz9.bH$]f':vze@l{d+roե1su:b7I,h[)1f )M:
zx.~&+uwM2M1]+wRwSaU+ھ{hk!mHO|Vl0	܍O-;`}h%!.RJnЯ㍮| nH\!}jdQH]r02x4G-ֱQW87ZY$Z.c0^Λ!q=IW|o_]CobÅ*\pϏpWWZMkdXP~YdϒE=_&h-'BqH솿^L%
]
8|q}""n55󣨮G_c?(F+GCuqhY%P$"{%&<PKWL    PK    A             (   org/bouncycastle/pkix/PKIXIdentity.classTkOQ=TG+ժZ5)ZS/˲*,dw1lRiS6oj告 )|{9sfןo w|DcU7t{a&˙i9+jQU,;ɪfBh9B@W[{ˤ4sRTs"G
\vKܑLȡ]余Q*h&C/7b4<ȵm'D#A\飦ypC9⚩+B6<ۄGʉ"g#-(k\ekYN-2fSRKn+/d1ê9x4ۛѽr}FԝH@ ~<3UKc%Y}(t԰tjLS;$g+R!͐kCX7bd"4"X}V
\QiK'Saw7nKz?ڸ"0"m"`"D8DrӃQ0&qx!S".cHbڍGx fYpc!nfscnܼ6KѓQ
c쀇wF;oV%u4pt@αtb/?$OHmwWq]xRhm'ųJp?uB\d0A
:h YK&ti%!@	q;ˬXn^9\bюV~IX9+yK7PK^K0    PK    A             7   org/bouncycastle/pkix/PKIXNameConstraintValidator.classTRP]@ڒBAP(-^PI[$TA(Er2!ʹ4EdF#3^^(}BK!Z{sv?߾ Nڸ&QNy2),S󥴖N6-SԬnW.hgV4s'gY?;9ڻd4+-dђV,
YVitK3jU5*vͿvgzFyEQ6h57:<,&
g(2L:`]hSS˱zuj&[s*Qe,3gxv+""Et&SD+m)!K^7:𩅓,> FGJQhT-	^r=晫qe^5˰?vfVmONR{p}|$4AB+\)A-	9#ápWB	Z0A݈xу1/xE/"9qP8sqx^?[-Lz|)K)r7=\}'B'$pkcnav=2&PEm hrD"遭X z([<EIqqӣ_1Qh_:Fhc^83h8>"E|xEF'^:}UW`5l2fXBes]˙ZR9E
z;ҬCPZ1U4
4Wor~<d3PKq  V  PK    A             @   org/bouncycastle/pkix/PKIXNameConstraintValidatorException.classuJ@Ϙ&OV5Q++nQDPi:8S&So.| J=swb?^ )>i%t\B`ˉSF3[>+%\?=:8725rV(2QpC4Bǿ/R	ΜUCH4qa	BDmXfhf,IN@_!GPUz>$[/Xyj3z;ul?
yhϡ^]	݇:'PK	o    PK    A             9   org/bouncycastle/pkix/SubjectPublicKeyInfoChecker$1.classM
0_j5U{CED!{5CAO^S7)485!m!r5(:MTwqR;2siIagp0cİLgyfΑ ď ;;ꉣPKKmF      PK    A             =   org/bouncycastle/pkix/SubjectPublicKeyInfoChecker$Cache.classSNQ]-L/KX ҘX(Q_<qtD|?|_c}D6龬5id3y>bhϚ.20Bޢ
_]eh3,afܴ^xGl0tu[.K5^iM.CnE_2yeAtMK|EmT<|(Z66U^lz%4HN~^UQSǞ`=TA+7#v9"r`I[9+*s)Q1't*+b)CB-RphF'[<f'y0nM#?hn.]hZHi!(!m8C*0""
EΪŅ 44cQ`<4)p$.eهrUrj޶E#gqtS"Els٠RGFb,!$q)`r)"q2bF>maF-\Ĵ&&&Civԟ8c0 V(XQ.L;?(8SyۘDkʦm̱eZFv{&A\$+foR
~ ƾ#K;SuTm]d	NⴄPK?    PK    A             D   org/bouncycastle/pkix/SubjectPublicKeyInfoChecker$Properties$1.classR]KA=7YW1ﶆӇE"H>L1l
ͿjһK@g3Ν˜~ڽ$(!a>k4vBe"$Sb,X(_
*af]*V%x(Ma/1QO2NBXn֏Ux"'SҹP4WP2%>ǆEM97Y9U.aά5JG2z,_ScʃJ e4<TШb	+.E
J'>0NR.;*c"MsU{*fF5 "JE,sl1j3nw`+Pyy͵"߰_
e	ۼVkܱPK    PK    A             D   org/bouncycastle/pkix/SubjectPublicKeyInfoChecker$Properties$2.classRMO@}RL)@KK7Rq@)35fQqG!RuV3;4_z |ƆDkT`rOie#]\NeCr$X(?ҥJ	fF<5R1E4ZhDA?t21#een֏UC=QxAF`k+JT7G2nI9I)5'(
[GBer&<xxa
U4jǢ,xN2Ǜ=a\vL,xZ2Mqj=ii3CX3_S)uu⶷nܾ+^f	>Ө-reL|?
>bxxb}kp/	PK"MG    PK    A             B   org/bouncycastle/pkix/SubjectPublicKeyInfoChecker$Properties.classTmSU~6oC
EZ!/)ТPZ(BKe$K6`3||@ 3N??ɡsvCqt<s9{ QA
f| @v0# 8ZI'kFH%[-&JQ6'mRޘ7-M'>O" 
*e-!7jdBfMmm5W9Y4.վ.o)].R#
nnu]UP
:bT|Pd]@[R15{;5(eemcE-ۚQp_tV*ؚ\48;]6BjըmEl]M7ǩk]u;[Z32EUwL_ĚJ0:}Mp]s	ʸD
eٴT:Vr0`zkveq{qz-3W͌m賩D\!SE]"n".,mWt6)̝m?;γ|+gx c|gb>ˉMpD3EͶ4\s_5T4o<%`$M)^	A$_B	m> #	`%㖄(CpA&%%0\E&!|F3ai	L1dra$K3Bxbsazjga-Hc{t,eK%jV],Vn]ee^EyUWqrͥ +MjQ{ ǁ6_衱%uj[uEr2"}я۵5K{ҳ=ĵX%6'F=
нX:9
x_ "'"!<%ObxH{8Zב!`ÃH$?&	B7QOb=|U6Դ*"D0Q[%F#Zq %xXiD!UG}TSjbxam2ibn]2gHuGlᘂ{Z1]c~Th?R9#:=OVc=|յw2s{;HlUs;Rsg*]p~;S`ap$׿`mD%n* _7PKYV    PK    A             7   org/bouncycastle/pkix/SubjectPublicKeyInfoChecker.classW	|eOdfMR
iI.m!mu!iBTh:;M2tݙ
	*-**ލx j<Tӕ*x+xx!7lٍ%};M}λ o
WAF
Z*x]
z\YV_wWIniM@TDnC3jPDj$Ӄ݆#X;G!.BA=U!b?H@5/t-հGCOv@4VC*z4izQݯhGX$G|14@TL}$>-¾`w(lĴ=HP5EKFդ1E]o&#nRX07$(;6%#zxT^x͙ۛcBLfoNMgP;U-T5T$-3-i	mZf,Llo,e?yfeɔf"m/]I0TKpV<mA^'#(ڨFirB͉D+Z&mfڒ*ңjZz`.T)1ȧ/,b(yFݓL{tLB-M:9h&oifK4/QBMǒ"7`mSm3@=vࠚSO
h-!|Ni=Cn(r(ԓLp:	"+>LA
\'=ÃńBY:➗I2nיV|,KNM{uZ(D{q{Y"3uZ"qR],רjD#a芧RbDMFcEbH1Y(F][F:|ZTNNuaM4lDԉa˼?ŲRv8TC.+h<wT+I-LpjZ8u]^({X/Mn*j2*TY%Y^r"ZI.w-;,/^
;WKo`:{M%l[FK&v"7nj#eJۖh8\9Xٛv6O÷D.{؜(^nu6$DVիRcPt]M+TI :z ,QRk~0lp>}Xf\	Uo^I;rO%e6
vF5u]<OrKE2!c^e쑱We<CF\ƥ2.'_>2e\.cHFB~WHXWnJ;AⱥgGmj[l	;gGZu~[_f?*0g\Ŧ6_P) 9QEށex9Y,dWLn!q\6$?SeI^p0ms	Vjd?X~. ZF7#GB*'5FLY1RZ4l_.]N;W^Wrz襶=y=høݸ!LƄa8u7` z"1I΃+syy\{Ў=p^ٸ6t1\y//|ԃ2l<8/g++= W{71cك.x#Ûp
B
ouaoq067v7TÍ$nax;4174|n(!p.7F~0(f>ꆉw0.YOɍ12|ڍ4`Y&nc0q-|#waax/㔄/Şx:-r)ղ@Yr~0&lU;ܯfs_ %ATׇ3R)Ѩ@ ;hh8ōEt#h1}3Y|((oOGQuƟ}Vꢪf~1/:~Y7g񍋪gp_s,Ȋ	4u&dVjP{
6>/\]MJ\
xpjNf̙~h|ݞy3B0|x~:ԏ
~49j{j敢{]}
*k>zc]rzQBFJF	tHdaj}(
?Gem7VQ{;f[":jU\с:~iC]oSdƛ;tj>hӰ$u|>d(GNlkkPŤ<UD*DW/&.7B5lZ<14H5=hdsnnms9AYEM-Λ[۝[pu2zաԡc-[rZ%JFBԪ"ّwNPW/dNPy&sXo>?w߹4|rlJR^rcs`эO:('p"y)$6J'x%p)fv
ܜ_4X^/PK<t	    PK
      A                org/bouncycastle/pkix/jcajce/PK    A             5   org/bouncycastle/pkix/jcajce/AnnotatedException.classuN@B"V#-&{117
W쒲Ux+L4$| 860;|d3_ .3ؗJ}bYT%7HLC3f$ʹd3$x.Tw Oue$&|.x,Z)mAAtb!;[Swq{{`⡆nƁKꐡ>ұ6M<)4TkQn57t^@7OH-` 
+:joPKܿ#H    PK    A             7   org/bouncycastle/pkix/jcajce/CRLNotFoundException.classmN=KA}Ĝ(zQN9bDTO˞nL4YV?J"07o>>>\`O{kIϭYD+mld]OԸ8C$,Ysc-um6V7.g22G[
J?pt<+i/4id=t`GS[R&kIN/پԉ5zJ+~hY>8]c[/PK   ,  PK    A             <   org/bouncycastle/pkix/jcajce/CertPathReviewerException.classS[OAlh˥V..(_0F!}((1dea6) HDxGgq79g;3?~~!0t3f~TQ|a5hEȅ@s:%E)Vb!uk2]Z1+*̯46EUvlQWei\Zr8G-޶
 Zvw䮩ĚlC:YrWjmV]¬m8;mrĶ[g;$W	_ ,y:DV G#3cLg.A"Ύtjͩѥ(cSTbC1ЅPZM(3ًL+3A"V&p[tpw+WJZs$`JKdw)hӺ|adv cQЉ&z4	9D6h&4ޤz7$"{D=ēZ3_paO);2Tb$5&spr$9R	HєIRԅ6ctss^=GqEMsB'OaO0>6'34~PKVwc  (  PK    A             =   org/bouncycastle/pkix/jcajce/CertPathValidatorUtilities.classZ	|Sџy|,sH(±ĐȒ#ɀ4ISiM6mMƄ&@#w($=Yc~~_s pr6XfZlO*%^#q{p3ZKǪյ^vm?bW!do0*O.҆[w;nknnt7[:f46xM{{
nO:[t"jh&>wNvmx5iX'Ŵp0hr/
iݚ?ܭu"5v6nO3ϼDe5{6"~-E>-i=p@D;GrZ]rد
PyDuBht@4	p s#;Z[[
¼;@fi=hX9x}+t{ݝ{V/s{;ܞ-lv6Lކ---)ԅ
b[C{;C%l!R5g2ww/H"rDF̬֚Q-VˍiC}drp,]v]ʣpԑsMwCEHZr-Z(*g^c*״4цvtx:;[xgG+?
e4lЁPP<Cd܌zZE{ZꂾPo<8ԻNA%oֵgM54hFM1!J&2
}==`@zLS$L`/L'mh6&IO OM#(MOњv̈-},%ߴaVDi7%Jl"JC18tc4	[KZ0u%a3[cZ":<{Oh=tM9z"ZOd(BfbBȋSۥ{ه!'ӚfR|A^6sK%nL]hdRnp
L6pTm	IEp&|k/(k9<@u'hIh[ȅpwa|!ffi	uW0umE`t5<qD.άףF-kNj'ykA2orz|_	./;ڡ;Rbh)>ţtó
Xl5+I`B@
t7ǽWoӧI1m1x>_4zJ$mZ(Xk26</k
'Q0;QSD[bT
De,z`t$<H0GF@q(5D"!wh`:sӺLE~D m.LR6Dz&$S]˒Ar~-3~~O$5R,{(3kC1K%99m+5ڦJSɳ7'MtoBOPO_G;i&A;-A#o$^Hr$f$|ljɦ48[}D曶O:OjqSvTF:1duӟf0|ęOCGO蒭>`LɔtE|Q{R8D<ʙP%)LGϯM^l$%D'3cHҷ}2p&iD41IgM|)m)En8ժ;LQnBΥDҜY٨CC!)Y%$ê#ޒÑ޺}fh,u
^Jy(FX<nK&gK|N!T t
prF/eAdfjnHLbڨuu&b
Bbn$tuS/AMڈ~~&L"ݩ0p p8>3(fi{?%-{ՑjJN+<";&,|~ #$&^fȏ!C)G6OQ /\z 
Pڸ2mšH =}{]qd33Լ2@1"@;
IdZjˎhნx㑘6SH6}DR5WVz1qˍk
B̨
A
!?y|ڣ(j∅	X8:Ġ\ƨ<cC_/|RSWnB!
2 6e
l0sm6XnJT٠u6Xa+mlp
lQ`o6
~&`+#^	xIfoV	xX<"!਀c)Qn	x
x\_<!`X<)C>,)𴀏Q'	8%|RpFY|J|Fg</<gխӿbI@
$t*LMP&ݠW֙4.gB"Mfǻ̽@Ms*&du
6|H"ɝ9.-9͗)I+)0.$dр4^3Ք~0-AzsIJc_$b
MrZ{YlEz}W^=!U2D!G'"'dZf:lNeռ䔷	q9SWf7Q:"C-\(P;&4`D׍Ijf}S'4=mT~kqKUdUF	Ǩilg7SBXjCWg6I>Ct[=UHaRVx<u蟾 nte\tnMD)̌~OtTM\~dw_"S>WIVJ{ĒiKr*~;cZ.ח!L(?qjm&|d2 )
4\`+C-r=XQ&Gf3S3c)3;"$|k`,=hLo
r;
 ōpr1]r_~7hFnmw/ߩJB"bR92,bX̰V«UXϰ*M-n0|8>U0l`>C
`SkfrT60.`WAcwTN&FZAبB#f1&|~̐*ta
q
=AC7nf8[U9UkH+ܦB/P:q
!a
x
ء^pwSve%R!שRa?V
WxO~
p/MOѯ6Vf
aSZpW*~n0ܬBFTc1-b)^Sޥ7ݛ+`8p2135z70F Ãofx[bxmSъc6wY;p3?[юvTc>3g_X_c1-?2Ɏ3vœg~g;:ds_dxK_fÏ~;SH|j*XJ<?XVXgXgk'c~ێ+Wxx%;q;yk/1`x(÷`90|?`%ï,ç8?9Y;p.~k,:p!~39p	~1Јk.>u)7_,\/?%I ]ŝbBQjs8rQ"\h(KrQ1baT@j0/Agڿ6Ev_yf'd0k!Kv;+aQpTŲQeh*TNTAHackhZʢQZuqAIZu<13.i5Z[2p<nSʭ
<eQ^ՠڪσWU)&'`\y;,XvDPyi:x۪GγXaBͨ3N;vNc2ԒrJuIE;#U^@o1&'bV6
^2VrZEj)XXUE:_^ͳ1^@BW!(دӸVLWEPkQYCvYSkz7Y\>\WuguKN*O)oV`0pYJ:QsUVe(WV\v	
*k.
6),/$\7Jz;<rkCyVRP\Ub9i#="Xt]l (}hLAn}*iuTETURePlR$P.S\w2K*%Zbe۾qpZJvf*])h;N)oQh-ƦlNNfu]˜6g6|GIW3ۙ3*[9-Oz*o>dvA?@VxsfԹ7UBdJQ54]YWRi3t麞>t"]/tV搞yyT$!7!-kJfԳRouxFCÐ=<1\.s͂h"⿠ˆdsˈR2){\9Ps(8-xCvNqrpטr#T}*9ʍd(9|nS\a(a^yfxɬzBԖPt"Thޓ*X&[&A
>#"ΰcB+Kz%o'j &pt:4R<XԲɤ0A8^^`3F#&#%J}8|6Zbbe.s׌:	9qJ>Č %*\fyXja!r
k1%䡈=9Gr_8"Ƈǆ$_%!ٖOÊo*;qz2W<̪,D@;A^!4kL3tcq۪<Ɣu.R
v0kxpQxi=j
R^Gt
\zN
崝Elpᨲ6~,d_ViyIð%tҟ79YjRsTY}Jy[g8>8٧\,<FY@? bB}?s*E;'ܺ]uH0]t@iC$S(&#g%%؊KDT>aG[kleNoiYqffaY+1şgqup4vC/5+96KBzFUmb#Ioc<ێGFو"y՘So5-%}%֣Q*6y}rh~r1%b1&6GfPЗWI+=n'@d
gvTm,a?
KQY",AA>Q`E5	QP͇یoHPVa,^+FΧ\
e_qT%OIzB	rKq}VwSPF,tSsk8Ww!<d-7qFRi*HC{w'+H92vۍvuEr^ܩs )ߎ)+8u8#ғ32o7M	IX9b@({,d8lS(T+BE)N(%b(璃stTVIXPԤ p! ʽT6V(G6VBKc
^)GSH/&UhZ?[S:nYukm+kLCx{?چthurN6Y_62Um}|yDsJɈb@V(R>%WV(Y)Ӎ2{Dɑ%_V(vYq(ٲ2sDJш"deVYue%o]/{EOoWv%ࢷVv_T**/Pa/{V|/PK0  7;  PK    A             -   org/bouncycastle/pkix/jcajce/CertStatus.classeQN@=S^c'E74nB~JZCB?2ީ,HŹ=7s3$n#dB]y{v{v!;
QZ9Gr2&Bx@,K7;\
nM?cO84Mq0r*G9ZoXź0>1AWg@
nҝZJqPn6/+]kc)HBˢ}9QZ%O'(
ITA
G4kDH LE.50O4L#DdK#=vWEL[H6^W":oPKmqb  Q  PK    A             9   org/bouncycastle/pkix/jcajce/CrlCache$LocalCRLStore.classT[OQR8.ZA@\l%o/lʖul_1QI513^`nt|3̹+9<`hDiM2^Z.,M`Vo%
Ʈjz+<eʋB6NeWЋizZqPLK[r]1[ˢc3tWuTp+Ɏ!`;nNpgZ^y=\~F`	6wbӮ23rd5jV!m	98!G7GG/GG?AoI߅Tϒ7	&9i'ؐDk2Ejp#Ðǿ(ձFF#uVK/!Dì
b]IFU&0.\RьIR4!Q-n.1 -pE79\a3R\	aWC.b`٤í.۶-Q(Gh˚9[xEig=ou*Pp,FHGqɞw3F,ƾ <JXRpG,USHJCIIſSb@}i_Bauo1A=p6%VȫNI󖂧ڧIv K!I4Cֲ;F:c,Wi54 `wPKI    PK    A             +   org/bouncycastle/pkix/jcajce/CrlCache.classW{W=cKzxl'JFNIh	r҈v%.=4ΌR,^ʒ}kXۀW-@Yʾ~G)KsϻH/ n?hqc;1Ơ hw	/|t%RZJG'ǆLbNGd-IeV724ajBQNkqմzgTM6956UO̬ZВj(38tDNX:r )bhs%deLRu:j℠숡2Yk29-@$`Hf䰲dMd0-#Ul^6N@jYίiJR9G|E
SrHӤ
	2pg6cԤbsUX˖oriձK	%ã[VshJ#3tXtCY5E)PlxRGYPj>jYx~ .n%V9c*Հ7u;1meRS᨞JܷvGesޒgRzX%mynvv̇m_:gR\bnT
JeװNXT4hj(>C$}tx`n̅gXNȦR	y!"c:meե2noZn&8ԕek#`I¸Vt6
a.kyCԇVҩƛiC7C C!̰o`V0pC/C1Gd8@7#^SqH_
ƯpגCv76^Tu;Qi7Skl)K݅]uzM7-Oyc	Іmzrg5Z5V=,ms{ojFQ
^X]Ӏ_S?Xl$GZM6V7\zIo6E6d9Tzw]o}4@zUۿ b/Z%IBI	`HrS"+a0%_.KI؎%܄w;%lûxcJ»%c8Gx}v		7xR8>$bq1g8ŗ)<'DL#\|8Oqq"N".*^<->|V[52>'bWXE:Ʒ4(BgZq?Њ>[ėf+T+VF+q^Q=Io6m%kq9X14Ǩєloۺ7c˘:v,9Hg_jXB4Q\`+w:'/4R	38jٓǳςx
OT[h</?gm0qx!y9װ8Π?5aqy]3ًm/¼,G^exs88u;grϝA[O^^_DЦ<~/#.~<.w͘VAfXdz2\QJ,<F +`4>]tEAq!0XL?P(؄4Msqp92I{(9nuKUwY&+K=NN?Z!oa.8^^IAqw9Ay1sVpOq\:VʩF{ȺrgxXmF3T_PK*V    PK    A             2   org/bouncycastle/pkix/jcajce/JcaPKIXIdentity.classU]SV=/In@lID	
mQLibZ
%}BqD&~c_LL{~JBg6{v]]q~FJ/3tk}u%\/Kga r^8$ܦ4Bl2u1rZƺZe+mL߷
3̲e.2\,Q]yd̹aSH/Y7LײKyn#c1p^QԂMNY')ZCٟLe4dEcew؛-Y	/m7

Q̶#g[)ad0̠h1޹ScH7ۆeima9z27-ۘ3F-統]nPo98I8J#:1q2!a8F8>Hp|1H'|)Ν0/%ͳhX>㨍)n
NpS9?]ߴh:ĕf6j:ј9MV	fR7DGML7:Tshi)vSmh/yzY'@FLA':(\ )D'n	qGAt3a~w㞂^LLeaV5<"#2cN8fdDdX)Y!{q_6KimMp:]IskdM ݧxc;!cޞ{l%j%J3Ps҃vhhjbrK;د0zk{xgVE.;cTtu~H*3fv]Um+>(ANՉK
 ZIUI/#EܮHVtQNmy AjX敽& q"XQ!r&iV
PK
    PK    A             .   org/bouncycastle/pkix/jcajce/PKIXCRLUtil.classU[WW$
*vԶr!@1X[D[((`e28CA]OKV/>JL.d-]Ȟ3|}߯@~=Jtmcy^^5ert:qýl1Va8 Mdr=(^ܒIȐ^(Pvö Y"Gޜ' 9+MDv`zUL̒7%}Wpo[#EX
mQ4	sջ\ CTܻp؝.Z./e,TaϢ~Oں_4
=ʦRY{c8v]-#&N%.)\"̒$
=7m6taV<^
\2Qg7Zg9f	k8(Jl]q^l3h苆铡F}SMډ}o?~Q̄xX-aKj-vq\MTIlmVYVv8p|q8qC8>s8qIS	}b؟'Xo-,kH⓵;Nтt>9_>97Юנj!f|	dS^PgXry&F
ۄٶv\fYE:HCR! y}$6EOT^zwӘVHRQTENE＊=TETt3{'UD°ݸBňU*bR+
qUA
2!̴L)0
H/f6O
sGA?	3` |o6f<3,& Y)z)W}WQ1K#^.)O7iq8_hAW&<Qۇ	F=O?G
RO<'Qs%A>Gw1T?uxNyY!ņ}tmnC}iN1hKX|Q%4)BtI:rr&5I,ڵ
k.V9Z="/j꿰dŜ47T`T`!Zx6̬oɂZpN&>,J0vs8
=+9=UK!"&3F&_v~b)_[_/WkOj<
(i@"}۴08 '	X;@7/H̳G[øs.R63B 1No3N_A!ֹѐho$&b$*!\APKꇙ
  2  PK    A             7   org/bouncycastle/pkix/jcajce/PKIXCertPathReviewer.class|y`Tݙ2yIf2 !DPɆЈd#!g&ZRik
֥6]U!*Zh7v_^/@~̛-g޻{=s9w}) `
\f
if
>4vXedf03f!7r~V[$^@Th>W3U*UJ
DfFz/[Zxyݒuh+"+oMkv^i[ӺMZ;6aolb0eխM
Z_ڂueM۶5vn2C%[62%և;7D7cux|0[?/}Uxr6t6EwEB|ln$
};CfI1<$M(9jDxw?Ѳ7Ecf!ܿ?zsnig{W8f;-Y4c%pOYSձh)|LIdGh;QGEMt+H`<߽34I`}(p<d ݱцnlz>Ʀ
MG'G#6ydnՏHձ1r^*S-{DOc{,=ZuA}gc}5$1+ "i
[}p([BzPW"}}m	";F"R9$=DI,\sr'=g'L-Ǣ8-ٸ\}=|ދ;}=ctA{h` Ya0//ir(rAEqs%ǔ$ْ"ȝuX9pw#;lQMɥ6a9@.2etTyLb:#kq'Sy<I^P(xuF?j
4g"\Mp8JG&3	Suhٍ(x'DEvP	L+h?
vij(LTɘ4iM ~{;yCRdR[Ҋ;IE&Ek\!q,+mm툤q@ژ9Os&i>0MU{x5mؑǤX%\K&ָ$kL	P|f%ctK#ɿq
}F'PO"͐unr$%NV8irU@5wXT@lz[wA˧VUSaoni԰֎frסo4q/oXغi[CG[wݺ>L0sskǕڸySfPtUK׶͝
W0(hhoִm
נo8u|@#1"pO݌P_,?cG$O!o&?=Y
#WXohֹ	cbdcKZ(͍k[pmZ6v4ljbW[p9
NAkۍ=}&+JM`*LDeEc'BE8ЕĽ#*=37>Hlqe?Aښ⑚#a zP{5Ħ>Rrz
-D
7nc}6E_v܄VB;Q4&Jɂ`H#v=Cm9bد3ngp.*ӓ T\me kJd=cZ7d	M<ã0	,OYYdylftr4K:m[bPZM/ڏRR1,G%DU^K뎅)mDfOݖ䃱j=QAREO#mqe´qzԴvD{LiJK7Z>7|s66nDY=թ4i'N*oZn.	ĞNͮTMc7kI.̭Q*q
HiIS`<,%Hb)Mj
V?qUBbچ>Ma2duv'R1HG'Wn4/&`yKwTn&#aśhY#dy(CAEvIAJևMO7bOKqWc>eMR`(:ǔP+^4|UWKe`τph9V+Z3s$Sv1nu=Ӊk.\Ua%H)!ajfM-iȦhleROrȻ35-5?SZHwn/jC$4'aq>CR+䷴iKڟGg)S䦹tntiAt@^5c2bD;gJUI%Su8F
%EBۊ4`Gأfք->'ғ*~ތ<LMAIÊ,MqR4KI6z; 7m}"2̂$lϤ
X8evWSXCĥ/X	~92nGmKH nz
GzzQ@Tȶd։Κ
pyf͝=+wCS><qn۳'wJز7D{˝~hvi$<-	/+qE$NPrt6nfg*#G52o=pii`Ӱ52>t$q_"eXT]ݺΑ,K	M4Kn*MgK[½XiOMsrPvP	n0nG#_*ʲdv)tUQf$E6]8Dtͦf~t,ݍ,,h؛"Ékpld:	Vy7+3O~2o&e:͙5)Ѹ"i
^D2+@ySh0wqFc8c9.7hUd}f td)y/73k+[4م(c|Tϟ):Y볕4]l邖~MB](ׄ;ъ<]֚OQLnJ'Ƿśb].)ƥ|ႬCօ۱":vGt=`0`H#VLCLgmzLD3B}hW{9s/3QtMctCnrVYq,
8K:ҁKٌhΙ.;yeyKΎE2Z0לŗ9d
Km9w*i4s,:ˀV1Sc`'1
T}=VOtZ&B7c152׹ y{X
nvhxeeh{tVnŹc(OXB8&)ǷfǞdJ2IyX@e,X]3X6MVdփE/YR;Gafմ=NL(rZt#t?Gt7vn/X3/nȫd"A) xmł-. hQ?flchx$5#t6}A:I8gۘ!g,{.OmLřuݓiBJrs Ȧ)wDkY`ʧ9
6'2M6Ul5=H".ܐ mvnCcKo"GFތ~@,
7.S"E0,fWqf,evY5_:41N\xV8N f,d^@;i$K"Y%%`(::uA)Խv7;┐يDtMxZ.8xʌDtF,d-dW';4uiú(=</Y! j4(@נDCY`s5Tj0_*
5ѠV:
hPE,`hTz
.`5jB\\*
5hҠY
Vkpk4h`mkС:
kAtjI-\5tip[5N7hp4A5֠G;4`
n`}֠_7i̯	Vc[5V-*U*];Tx
T]*RYjTV:-PB-Rb-Q%*[z]e*[Vl.S*BeT֠F5Ye-*[+UFe*[T֦vul֫l6SeTYe[TvvWe;UQٍ*ۥ>VYʢ*PM*,UGe7lQeM*MeoV*{ުlޮ;T߭Nݥ}*[eǠ/ծV 3uH-`|19R]*e,bF>
G܎$޶8Ⱥ)p/"AIRIt5+V}vtNĘ[jZ8RYXli"jBF@&<[~-dғq幥&4)9+3'˪eY;F]~Jɬ\OGUF++ʼ;ꢜڜ=UYrf'cWO':k|eӑIe+8+7gTY_]fݜk{7;YgrFچ<񧶎ԗAg8!;*",g2J+H%;fU7&]<ygJ
əd;_u;oL쬓UAGr_8%Y/Yaj޸U}KKr7#qS
/`ua&'~T^ b33.a^wF#?-u]3nV"\0rq"R}Ƥ
j9.c%-ORS}u,(469Z8zb(БT>GA,,yp^Wt|'Fp՘BFWv٘9o_YpuY]Ź:瀎`މVf|P+t*l<k9z/IW{HaO
S͘.Rh;C᳼m_<./BȹN\h'Е,{S̸=eyKq9A<e$/w:g>><'|p)Be&9Ey|wpr9		%K\Z^-_\.N4A]wn_.^5CɍT<ӼNώ۸41t˥'e_gALgpS."A0` N0H`/-o$6tIs<:<q(YGaζ!=| c,@0`dcTC$8S	<L$^	 8D#|:	."I0`6B	E(?
>Agκ`Φ$}!! dދ>CY)߇ߨ7:;ߤ'm:|Ygo ۉ-:UO|Op؟&!~MN08N(i;p:n.߭×{tx!8ީOt6Di8߫>wp]љHg#:;?^u	 0>c:ߧ: #'&?~fO\8O7S:0?1"0_>YtvXGt^$t6Tc:u-\'txI~D t>÷1ÿ8IK:I>Iz{)O:;2}>Qk:|]:/,/u9Ig
YWwK=ȿOo? !~LB3:|Jg_/Y^he~{? >Dgj}Ugك:_E|2_x	|~`Jߦ&L"\o$)!8Kp`AF	A"pA@'(!(%(IJJ6\>`2/Rvx
U>*f)WyljC$s0_<&/ytj&fVW*z|^=^E]*:zSvyB)?JW<|`)A=.z%V	nʛ	Fp71g=^#x_JST`
A`/Sf\F! Kp;[n{roN_Ao+{ev9A	YYAp56je67<J(k	>,QozZ
yUJve"G>|7(|ET|%ߤ|e߬<[x55w<Kw=Zer <|Y|ïS<@2`~GOyzp} <~tCʃ'"4xx7Z2Q<M3S/aߡʃj	jn%x<N'	!2W	F#xk_'x %	~C[W	^#	H'Uj		zAp';i;18	nNE0LSv)G_r9l"xg1_, P̯P/櫈nѭR6l"@eA'żH0X"3Y!_)2~KԶ3ޅ&JaLa r8m
y9z	UQ 'bDT?j>ɋOp][7zU v'(smʩPrO*׎
D8~fvGIE< >/:*AQ-\n]8 \Dozo݆0I昫C˱
ARjC\1At	Ƕlhrw9pX~Dx,I
EW+szBxhGĬ8*GEDΧi(:W ۏRj[K*vDJǰǇitMpU(J}`WQWg?YipmQyU)2`$\#UGo<F$/W"U%!~~?	yԪ~r[Z*)=M|"1YBܰ&C$z*wo=	$E6?X&$HVHJ岩4|N], h!(QUYA"4ՠ1Vkˆ얦YJSTWn=iѭ`TPTZ |QCSQ>xxg}99}cHJ%Ge9hYܧsp]-nx])++<[je::bǨߧ	4}1bҏo3,EO^ڎp{L˧CzOizX<{8_uO"{9*G =z7=ۃrE<gu)y?16䴣؉CMBl"MbyZ=2lͪuXԆ`z
a#)=FQF6CK[})եE6|B/
ICEIq۰`ScxQ_`QFqjE ũ8uoUҫ;ͩk
װ\UC")TroPL}(!^'cr?WF8Dxx1ԗpl]pvwXA0F`DvZ0LT2(UTެ5g`ר|{
Amʻ,wQHvK?q
4Tq9 i*ߪY(E>'fѢ%*n{ʰ{1
G(vu8vP+AU.{u.gc=)FQqчŝAL~:iU\"3ZIm} z\
Zذrkth?gMfstho!keZM]Fg(
H6.STyfB)pљRT=v?qYEPvTKX_tT"7$! S%^P/?KfV͎9ב!NJmAKXsfg7Pl
5#PFYW]qXs"lU]!}D,s5&K˞2W Q;ŨH/x7wa꣢?;Y!lLo!*!%Q'uP_5`5q@D1͟T;z*$>J&v"X4UdGdgES(W1=cm5!FQC&٨T=).Azg>.JpIQ6Fnp
hҝ9bN2t~(:5)$dn5Jb߰xW(Mwˌ6ʒC⠗
txUknR?׏~vFvv.5EP"	 bgm:x'_ȓ
ǺnӼ.RےډT2͡3% Ә9hY{h
Cً$*TcHԧ%Bc=XBԥ~-.2QHߦ%Ij?.*MzTK2|׆F_"yg5@Ȕ"gF1֒dM9^$u=mB=o[)HH^o/PC gT,.C-IfɠL'ɼ ̳(_*JBP[iF 6}%w4Oa}:ΙScЙITbFa+`!f@Z>mg7$yx*~?ë+"|/P)λLq[;!,3O=	-P|,T^Q'a$sVpY1~Oy|)(ŰMzUy	a\\&OQX手o]gGT^v
TbQ9CA&d]* _$\Ƚ}2jp/#h\ub*EP|M1CSPt
* <-hnj0LK5
z,~B9{,YXEOh\~ z<S2YN+d.'e:<ϽfyDy>hwu4{nCY/5JYx?~SN,!1:v|H0x˯q$ŷ>N~9(O(1oX<PiC)B#hiO*9eKoh9 +5|V~>=6g1[kߞ6[6Mfn 3R,},,
_z5bѳ8Sh-!>rkz~ß15`az3|6$4J>EI˯VMAØhI+ܢ~IٖM@1QzO)I[bcCV3steB[M]
^kox9y85Fx(>C#d`*WeriFdgK6KO
fApShErJ(i縋Kzē߱zQBT[x`Fx+u-WXV>K~* 'TpoGf<2\N1d-Ȟbbt	wHM=vJmj#pVKrAEl WR}rR]&uv<k c7C2mAe&ȹOH	;].ef_bX4(FC߀hMO(lto"27b7)9yJ6>i%b0)$L02+Cb:4!F:Υ\\G,y;:%bJs^]{MM9 \k_QjO	9n:F&vtk>nsbuD
y^2talMfЁwZ[ԗJ	.)ހ<>X޴7e:|4M<z5mK[F	gk؇"~%:JSXBh't7c2L&$mB{I'
Bc3r%70VdKʚD7I}Y>)w䊥.XSR*}|@/CǑa}(yH<D:E0 hm|sDXqWzܳ܇ܟ__D5nxSYd(s֣c!pʏ3rYZC&&-DYc7>2h|%VB3
7̕::CI}ؘ_((,subga.cg`1f"$b.F:	cP
dZuk#f=@lM&uq6p	מ̡3tDls&!g@!ݑ\R
T/EV 0HTRDG"9uLFDRg&<Uv&M[i(?is-bp(=9۳Rԙx
*%3']ۋY-2{uφ9]=T"e{*Fd>^;HQ5'\S[1 2^.Fm`a}L&E}gr:BZ4Q{T=yA ^FB ۔Ue[
uX:,1W1}.[~+KӎKEt~U׀8>5ZM
+*&
SZ䵁LRxtM+3TjiRf]*}	a^oIyzLC:\xktgeyJ_cf־R*ױ5A
{-uNNFf;ըS3pJuPR\bVI3@j*LY$8vֺLj:>(R
#QCl!a٠oʶ}&)}0t=g+ha_O맇])%ŧr1Jy0~_]ˋd}R: Kb'|J䢣bkR<D-hq`*dϾb%Vmp]lܗ
<{Y<] C۞9]mދAB׫
X(
Sl
+<3 t$;͍S/LC8Lkѫz f:ZQ\􊤘s!3b4WH1f<*c 
yT^A	?d9js.Yn2:~x3{kMoUuM!hI_M٦h9Ih;q֬/&E$)~V^θ`'DIGCC)|)1<-XD/n]f}C*(!_W	_4%~wwWľ9oU^ԓ'\ZJzil)(|b2)B"ÂFz3yR<jT5X-%RIk,ꑳеɏ͛~;}}P7]cbٲQMJk4U/hxAz_Y؂?]:,&#%cJh}	>F/'TdF	YJ?gV$9/1UxDNq"E
\)!(6J%NёqȊ
W9K!$3~쀦MRX!(
?;R0e~CAJpÔ@aQ`b9(oׁ4߃:A眊妨R:VcRϿ.xM
&1֘:zfُ7%aj=wC0SǜMCeDO$A͎U<,^JewR	b)FӼ5)IjrX9gfu3,.Nʤ;915dL?Q/e@vޒ
ٗRjԚj&=Q6h̅6&"QрO㫎?A^դ}{q
`?)P7(n1Q5}"+d!{Y5htY;1(& dt^` ?goϷkoBWV+[,Aq>7z|.wq-"~^Gkk1>u}MdnZ!=&<w_ F
+G#U 3O΍'pXK:INth
Ig9hIIB1hPy-[GwSoǫg @o<Ue2]&kFa8_+d|ܖ8(r+<sfWae\0r\NQ`aeh01ázr?I=yZ#:)P(p}\AxIqA1|pR|(VՀj8))W&E4Ր3{~U'jM~tr9X[T>U)?,oEU|^`y?*+aFs
If3!G#N8bU.3o̿ny@>Ȼ~󻪏X/s̒z͏b]]K5@w|k>xAfRlM9xTUtQQQ11!$Jtv$&J'M$N.C5.Wŧ@Ǎ]QTy?khè5g,߳<pK{=q_m{?R%s%aVk6+()nIt8;~*a7[FORh!= l)y#W@1M6wɚRROhh@l1XOi212٨y 'B3;P2?|IymX_s(dk5f
~7^i]L=qE /u?PK"._45    PK    A             1   org/bouncycastle/pkix/jcajce/PKIXPolicyNode.classU[wU&dd6BJ
5F)Xnt2mILJ]_їktծŵ\_D{24iD÷s2O k?~ b;4_
F:Gl<gE
G.g
k@@q
j2)O84khSY=>9=-2ihGrehj"I=k
hfLݤ3% H8lBFĵJ;t:iCc3yѴDgUD1}9)f|>kqT+5R3SSsIkciҷoPi#婁XݱLtlyHŎrR0ijN|o{sYTqYbV Ħ2cKblNS4=6~r|YG}9}>@`iܕIjb=Qri\"~+S7(=}KH蔠HJ-!F$j?"`O➚)Q-$#HgV{[d?ڪ˸MV/ʎ29UU6B#*s @	Ⱦz[E}KoI_ ^:h&۰YxV<'#2cDA!QF;22<2vऌ-Hx0elń&qge4y]hD^`x%^	 `ϣ~2d O
`GĐbgH31L1$«0000O1G}c4aڥQ5{FJrG$,}DҶmIIt$mIk!'	Y<RVDXPvSJ[`)ۤ?vQf,DWJ70j+Y"U|&I8K-'/wTpnX?:aރt¡R7|I\pf~ũ4
2M[_,	W~ߧ_YC:)֝aJ%N/{ܭPP{]Yp.Hv~
+:-.4vpm؃_ Ao<EIkqaNɐh"^&sK _W$}dYQZ_U|!`km5MC[U|N*/IP})mQPC^{ݒ{ⴓ^o&!nŰw=vw!	4"O'|s\:wPK[  
  PK    A             ;   org/bouncycastle/pkix/jcajce/RFC3280CertPathUtilities.class:|Swϒ޳,y`aBtx66CSGȒ#Ɍ$*#M7t$MӺi$K:LttP=IO&}w_'`
)Qr(P@
V`kؠ@
fOpf#f>޲⏽fwe҈k`8q9ۼo___[{wރ<G=G?ñ`$	DFBp$٣r냞

i\{Po*oiniu"jǂb]0c<" om8D¡L'g$FhdzЯ`4>51Ox$"Ks
F#Q$@.63~0a.ὑ?RzI2!<8K^`D	]`'!-1Qg׷aQqyIJ!q	L9hJ+&gTBRaңGf.Z=q?_bֱ0Cdx>5Q?h6OٴFlkk`{|}[)dnlKM܊5J`ii!p$ug^VP'i6l0؉v	*b,Xn8`74mG"Þ}i{x0GR O	EGP%R.jGO{>FuQ=_z80cLWGJ|}||-|[mԆT)/O\К]e$ߧ[$L
SaC".^"ͬ}"L?]mF<d
KaGR.x=}fkəoJ'y
tNHJtFX?lQ&	3")hI Ŏx$؝Fl۶-6'DŔA"[d0mT'C¸vٖ'P;$[D5GX<7cUG֭qN&kg`HUj^6Bt40,HNY'PjaUQ?QN-Q_*"N5HP3g$brA.dxi)=}m>303BUK\O>Q(#Yf"Rr"1ВJ/$,ڧǩplUCNuJV~HحILM
*SS^29#1eMiMCb֨oLIadQ$ci7h䣛:gB׭\-,FnsK&Uɺtejrg$z148wG{lpu^*s!=״0>aanrCaH&9}نsǺH>_/npY̏Qɴz4F5c͖ c̈́
I`gi(+$iLkEK\87(AۈC`ѷ5 $WCFjYzո9^:%/gSJA
WgpmLG)uG]sq=6"}
)<be=/>sbn!_8sJ'OT'/|!vs ҫmSUz=<2"|)^)tu/M/<?VWSr-,?f҅pjPT6DB{?FݸJ+EkɧʺJaM[a-+r9<@d$>]{Wt͉i`0=6?^x24CtXTuQ*.ˍޓs\rQW	jjE6k`H+gnH %N+ /oȶȁ@@o7YIhLЗuCAd>f݌hboGp\zItsWLz`'ePd怾I
3nc$A3?)Zj٪tԖuB4n AI\iEh]ɪ$af]\z|VZ"IQsfHdRyUJaƜB˪j*tikƬ-c֑1ۘ1۔1e6ӳ*E822XC1vIbܦ'͚ZvrL2N?*^?oo#ox:=g3S ~[POPdmcw)uOG,cZ v+@XR)\ZhT`X
\zQZSYVhWC
PU
|PM2d,kex^ }2Q7f"[exo'dx]2[ex@C2|XGd1>.CBS20.'d8-'exB'exJexFOi>#ge2|AgXO%/BF<fyԗ-Wg_dIInα77:ƛ"X~z\Kre9Ѧ<fb4	1
{oER{a=X-ol9^~*'~
byb8k^	2_
*8d&̚i!VLun
IJ<"ב5{~u-6#ڮź@J\]kf4֌hW]츩80MhWO6hMaK6ʗgKggl6uC] 6eo4r8Wg^$:7of<QEjRֹ\I3BhcLyXB?%fJLC';g\c&4֩#wӹ~Jag˫n 灂I>fo5S߿b<ܐ%m*Gt$u~qLF}iYK(O
6#oQ4^h/vN}3.0(;Y=M`fylEr.439Օ^?_rKβBniiUfHp':3iMqx@fiTB.`
x
`ˠSA?V^ UK'n2A
wB
w3x)c^^>aRawJl`
?bpU!lV}^-*lVv2;M[<lWء/p#O7}<ڬp
g0;U.a
18[Ux
nS70@gA{T؏*DO(ngv0*odyK[8H&U8`Ї7h AUƽ*܅T؆y
7A!anaUS
Qae<W|0GUxުBoSx
_×M*|ARa7ޭ·1/+|-1x={W0x%W1x5ssowb:D7&<9)pi'?N|bTۜ8GsNx#q||/"[N\:/ç܉Y'^p|'_:
W|7N\ob F_vb-~Xf 0xG|<<[Fg'2W[S>3&{7N\c'^od>'^㤋?0#?13'38}o22_?Nvx	X	>Ts<|+3xG<Q.08@=S% z8nc1go n
|8H>I< 2h%iqwp=\
(WX})]=4/^{JRx:>t`Ljr4(lO5LHkHHOHF?4kl	i	Xuc7!]u5UxA5Gz\:,c2NFӸ\u'tTj&K *cӸ !-|t
M4.?5)~Lj8%]e\MH&p66CˬI#ն'p9Vħ=	Z\KIR4lkrBlD0,N*ԊSڊU[ZI*G<R9SSȤ5yO\HV3ǥ#1.59FXqJ)Qa%Ϙkż8F֩|	j6vmSVȩ=4Nz8nn0wKn{ME@)G a+vC&
H{hS$I(KeetXT9벌d'cE0<xd\(PgayXFE7Hx «7,;2?C	$Ej 0	yC%gL:F qrk1Σ5'<kpwQaʌP]&`^ڷfQ1iRfXXH+~D8TTْפ}fx%=Ki,q[ ^vAy/SќPl,$qC+Nt'J6w+b}њbWm*uz
Rԑu,8~<M&'	3b3 ?&ObB\haCZ'*(fG-.MziIөn&--џũ2}'URx)TyZ/5%!Ng1Ncc?َw4xbMqGdJ'g)JŤe;h	iWq)O<sjD`µc0:eQ	ƥ$𺒺5V5\znC-Vj/U++JH(ie$Ӹ_+KH7|	i\sidBfWVA4{ǘϔV4뜜N5WBry&w[sK#]=.X$MXYh"aVXmB khO9Y^Xs*۳8sS*ʗQ΀YN 梕`bLS6C?H.܆K|)~fORˢbyHke,gS^|(2QcuHӟv+. F@[C9Zp"'v@.0u5D)Upܮ硌2Vc2m栯ƥ;L_`wVl'wN0_(,nilˠ<'=	KAaH"]O.HnMeDYmG!lSv6s'sgHEӬ]MA
'F	iqxv*gDj^sZq{;J+3pYCn'Q&dqh\:ǥNc~ceU<4.$oI".ŤX@;}p'=}0P&a18V	o2
×{LBvCf]ԴfY;Oc)]Im,M4R(,1tBR*w	Ds$$gB*6,wQk%֫gk	Ǥ})}iJfKcX,VhO`u&4$;7"J Qx%&evMYSJL$lMŪ
sexi	Z+:ۧxT"zP	#.9Lfn"խ0ZJ5(j3Pek"?u7u\':{=v?8ܯ
^kʼZsroDΖS9ԁN2T@F}+>OPnHɽPF)m[YH\&iA9ݕӶǸ'Urnn3cff,2]ںzP2R=,QV@njk;v|A-%kV޳Dgߝl
H]u"P%EM*RS"2ץ܌|[='0{fnvLz1w @6~pQO91[:a
;-@;KUI/mb6<\s'$7kΤ15c.[$cM
4i2
oncҀBF䲒zEiw=q2fb)!-n<MhAR[ӕE|lM腻ٶGTVJ!"Q`܂tqL9ۚvJюG5{2Eppcؐ,5IqbT=@Q]U/K
0㒍&y\.HE\6lzn(F\!p_PKÓ  D  PK    A             .   org/bouncycastle/pkix/jcajce/ReasonsMask.classkPǿi6s:3:! mjڐ&"7|ك?WPRϽ~9 Ě2hʦԆikS$
7C?ÐP#4Fo&Ap8I
/y{9?<zscӏi1᯸<nv$뷝fo't߸<QxٽusP m]鸼z
<((bha:N.rmާ5Nß5G̚021!D&$c@%2.h`U3dP:/*dAeZOcv|{7Uڜ1E
蜘Gkn2:k* 
W},g@fHl.aD+M1%"Y[beO)zL7,Ҩ#}&VL	H?@ODZۣ5RŻ:.C(?ªD0<î}R
5;Bn~9ӔEmV$#jdɑT!&Y% PK.{  1  PK    A             6   org/bouncycastle/pkix/jcajce/RevocationUtilities.classZ	|Tf7;Ȃ!!YHPeݸA-m^jj[$Xoh!KXh:#à`{77zR7F1ʍr7ƺ1΍nTq
&*Lx	%8+7_>9+ϕt`B<aeSE02HF룑`,
21`8^Ñx:DڌU2b`<nHj1#gͬ*rkts"](FaޑZײ쵾F_C}법Ɩz+:Q7ۃ
F42Ut1'7f$)]YNOXXX`TjmL577, 5Һ7UoY|ͭ
Y,op\l*:Mp{1˜SgMSGbwl󬕆?Ƨȑn0čp,h.d#R"ulK`k:,<nW808QɴE6._|d]:;P3؏q
QXձΈj`~+\as-F;B?N
nİ9_Dq0#pč%օj!TM
ոbƖi]40b1YZ%BUBP|~f95X	)JkFuq>FCMGǍ]B ˒PͰ-(rɐBd9ԙW&d~l9xʄUk](V5)khtD::C\薙c%I-5,PoQ&9t)υfrfs#)lɸ8cRycq8%e1:zִiˣp Y[,9r̮Joh8'ܲYn#w =7D{QnZ.QB#1vf6A<d&L+}V#'7-/	nSV@Zrڕ&
ۛ#[;m23I(wXVk8/6c)7ʊb^᠘J/[`,Z&
,|vG6WRuln\Ƨ
N-ѿ_-Hj2X_(dCDD؎MVv#bn/
P1\uC`/7=Dǌ@Wֺ.u\EN:vr(,苿2Co+
-g9!]*I ܛcL,'E2f%T"Q*p~>xID鐝ԟ.iQ0"ܡ:`QilC$$fBJCx
-rH|v.K#;}R&Y.No
ΰ;&5[/<OO*4Vڸ9B< iV9JؘaJm5APķ iLHV.l9k=ؽXA´c!R%&n,l[!)(en7K|X/q9=g汐OL
فdK66Sћiy}>"#)evn
nI2.`y _(תE(v*LIxNqڴ',\ɒBޏ/5yebڡ6ٕ^p5x
<rSG
r1SyȽ K&q1k͝
De?&P^*q<l㖭wčnq	nFntc&*6*lR)t("

+Db
q.
(lQتp§>*|N
)|A
p5+|C
Rw=+T~pv
?RO~3QV
PNz>D{|Isu21yUsGUNi82җIiޏʏ`s׆1I9Z\\`-5.)2{eΓ*rMϔ1>'='89?ELY5f5`3ʘad@{D S@r`;PmɃamgJ$67# mjjb镅k̼ICVuM2i,s*=60W0G
*le0
gnQ!O6U930KC"3éyk/kY}jNa_qcq;
3>seX;Xc#gƕWKȜ͜cЪ
 dp -lӏCYwPuNs̗cf]

/ס
Cȱ[;]N)>wL"{$Y\U,dJ[c
Yu}Ǥ%wVT꧆&%+Vm̚
u6"삏Y:YA4#R ˎ}Ýr
vLW瞑U96HƼl`8[qx_'Tv
8}:΃|0:./M!`tKq8t(stL":3,"K0:KYTE*8WZ{H5uFT"_X?C
Z+4X
] 
M:6iz*ױD@3q*h e4V\+Xt4^QI'
 $N1&8&XC'hJ>"J@T#o:Tu:.i.`y4S'i8gEﴰ/4_A:_]Dt{@6_p{5/QPôVf[|M#$S%R
:4<Fm	ڮI{4<M1
狴\ß'L|S_<
%T!>B
S^OWiIg	g\ߴL5N-V	hQ|^C
5o%oަ{w/
+@U-t @)! \?RRg9Z,tY)^f/MJ)ޣT7qT_;aCo%-0hkmMI[f
 7n6[
rp^!~ҵ!IͶ"~JЋKzpͤvbg_
{;:Az?Xh'5 )noTxɡdB-bȫ'no}8fY~1	f/yiƦw)-Q8!_l:͖"d%VCk{-v?L:=΃xo;j=x{Nzl9;1[,(;Q)0eM/S6]Uydb.b^(g0
/(#Rx.}cYFvKH̦	+TMwb>t'6J:kE}x]|{sxٮk8ˋgxG%a>X"ǺxJGcvil\//\-PϐCk=Cz]6vV]eg;8(UӚ=e:eYxW^UoÕIJf'I/9e۝E].۵8嚑?1xMYŦډSY\s?VRi:V^9QmQ}/ךyA2&9#	?A}G.Sh%J&֡`naZU( L
wÞfek\p_Nsm?ϸR~g;Xkow<uI[\܁QL*Vd;ͅ*SΙTM+EBg;N=ndf7ȣ]<Zމm$=%-Y}4ZR*ZO4=swm9W_kr1JpZ\9()׋2z_91#H/*+5~h<ҋxd|>ͳ]%rn"xWJLeVC?p;2Oq7ݓ.!.{dʫo,)k625[qiݐs/=+S=ʙ89"U5tDBk}[GI[)yW{3h(A90Ux{Gߤ/.fvGmb%fsżǍH
`aJ^8kWBuNNכs&gO1̝L1~D|g?>ɃTɬ~&an7t7?/N+Zs5*.ewvOOPLΚg9KXT
w!e])ĴT@Q.G^?:db6(b#)vYXמCȉPsm~m͇w%gai#=&\9/&+ʋmYG׭)C~69not4ECR5	xzFKyQ0Wz˯vyK5]~<36e݀}-
)#IÙr>{Ӣc$
Ogad 2>,᫐5+Lk{})YvVr<x8H̐ǰSY-
'	>jE*MՇp\jcŇ覦}ݵz/hMy1)P+~'{s	槶gvm'`7>>0v\(ؕA4(<]'+x\}7ְM):^sPPKͦ  1  PK    A             7   org/bouncycastle/pkix/jcajce/X509CRLStoreSelector.classVWW
	WjD!#ֺ
P@*݆a	f&t߫jÇN==@nN6 Zw߻ۻ{_淿	m\aO
p[Nu29ɼRNeL/҂Xv@34 6%,+j)a-PeKNc>#>SUŊ'ȵ
UGǦr(.׺j]G{
yTWT%'bil7DUKMXi]2Q$b侚ӖjZ$J!k%6fRM11hӔ)aʹh"qͰԒOM?U)JOK>4娚h-@,N3
^3+KnbtiETL3!-V)ruوp܈QYHD1ll:hİ(m6U%ЬB:{^XŅ"8U6Vp#hh44E6-]
ɦo(sdtΈQ"yYyb
N5;	EPP"s9cS˵MMjYlڔ}C
]H$rYQ4Օ`z8jbQyY}KG\mWtϵfv>qLsDU-"./ED6;DD.bשhEu]/;\}
`DWg78^S@YYEFg5ed畊k-{8{fꮸmMͰ$6YfNZ_c!\>Z~[6_:'_@Pj-X#!>	c(AB $>	<8*0$fkqLp!jpB/	7ᤄuw_x@­xPBbx؃{p!AdQaA^tbʋ.$gH031<a1<0/9g&bgax	'fx΋{1@_?yLSC
Q-{L(E	 }uؔt6b?Y}E6jufU1\[WƮ(ە~x?אe%t$-%qW/5>{<^nt_^ĥE>k>iF7yCD]G][
2ݗmE"wb]/Robh<[EaV_S7>a;Et$Of* GKx.+\sz3Yr"z"p9R#,य़gd6o	wR[)|zU}ݚSk)p9-
;NÐνJDtyC*q$L̻B(vTL稯K%ucyf\lǐ\^E5o;#˘gbz؇F}ƃ'LvPK/8  	
  PK    A             8   org/bouncycastle/pkix/jcajce/X509CertStoreSelector.classwUƟi)i$LEQ
j- u2S3aR\9GU}dڤiў;w>s?7 f,j%cxTüX`wٔ;ʦ)6mzB/5tvJݓ3UҒTlX-5QӎtdvD5UtNڞyܔc)źue=<W7mOiXDrAiUCe޽cWA)wyL
k;<#tק{PeeaZo#V _Zր
p,n>X1^pQZV隺_)O+/2Z2h҂@1K)aEoO`XՓL;fȂg:%dڲd^|qT%-$e<״E*6"JEפAۓ<c;SfZ$Țަ
[7:E7tY2Y8a%
}ؐXV&UTL+YIhSsO՟՟?UO-Jqj\Sj)NRVKqꢊSuW(sr	acB!5[QRN
b|L/wM|J']
%|d^TUSer~,\h7ԆKRMA6Qi궫͛%8랾ݪpYdFY<uiǩKff$T$Vx8VYN^rl[GjfAC"_szʘY?%9|S	GT@$V2.c@H`Ffi't2bb(Ў6f]
EzX^~/p%VV(cnhEF`
#1jF	\X1a팅88хc$0qN]:#0'$C1<(ƽ2b<x,H`qg16pEcq?ÌG3z3n%酦h	?cMK[Lw>]-!7>ς4 ܎4mMShjHGO_|$ޞ(N5Oj"hK◒x~ęRNEh<BÞ#mO~#7پS{>ΰ}glO>~`/~Go>?u}<h3ogy<}'>β}7l?3W}f	z@>';xkh\h;D{/PK%\U'  4  PK    A             :   org/bouncycastle/pkix/jcajce/X509RevocationChecker$1.classRMoA~-V-bE]1	M1x	lw@oj`2=Iޏy~.\é1,=QO{=8(fXK=~hD*j}!r/b)}	iLVv/#bj4*cŀan8	ĉ77|(dPNC
@hwPzjrNjL,0M\2Q0`mRsۚ3iohdujzG'zh-n(Ŏsڿ&ԡUfrϝi|ڑ\`᪅krf!yb#AU@	˰q!
{,~/ @F-Ǳc+]h.F|w}
/эgl;) J$n%L Zrp;< Ooԟ!u%6Q|q~@
ŏjS3`y2GlH/PK4\     PK    A             :   org/bouncycastle/pkix/jcajce/X509RevocationChecker$2.classS]OA=R֖,j݂` $1dߦä)7MF_Q;nsg3wE,2e)B|kDjve2DGa%z}=QP<dp:|!ZfG
M+(}h0L\ gYZ~R)p-qq7:;wr/\8jؖ	AX&hStxu[:aEe1r-XY(Z(Y-Z(SwZ"eե,7zBtnaV3LwJ/λU*uP7$Al8icll1ec mcFf-aJ}(*}xaED&u;WH&qN<;RgTTnBM}͛,U
ǈȒN>zs!i7I<!oW;B
3̳2̓-Ni5yJj0n'FQG9R	y"mT^&L)<')"4SGt׏1w2b
qhONNDY2PKLj    PK    A             @   org/bouncycastle/pkix/jcajce/X509RevocationChecker$Builder.classWWVbd&NAj.0hWV)*8(
% IBnkmuszC}d&39'7w͝~@nr
Զ[ϒLYKs7.p$z,lt+J[Vmne[\qhOEW
6Rѐi?ST%QEEP(j=fTg<
+&AQӽʄa#)ÈlHeXD<Qш_*OȚI|¶j>CsqT[[;51qJ6%3c6¡2s&tHauZ'M%q/!ъBz0jhTpdK}Y.΄VZDUVOSWZ.`u1hfZpb5yڴ̡11MDT21I6-OE%kB+2iA8켋}ٜ'b
g!ҩ0ІL=??R[X	
 	Y`Pr-S3*1_WjMSvhb)7S/Xc<6xǃ<<jyycxhHE89TYabEBpZ>+Q>мBI<#\Ӷ`Ucx;LL<Pld,.fS5w_hfM}]wc@ث4'|aϧU84۞@D:OŐM|m[Y30,H`=K"ҫ4y=F,O-[XmڭtWY^#K6m/6XyY_fL[<r?,K@fueIxLSٲ{Uj^L@
x2Qg	،>㰀jf|X\65xTbH*Dl&^d%&^f&^e5&^g
&d-Zq܇x؇6|!"xLC'uCx	?	z7M"}%9Rh4YoQE+QF4ь/S#d8ʔ^Z G8 -G%VctQέ1u[w:^e锬{}á{qC$y=%98ς8?㸐^q8
q"d`Z,m Gg~H&9i?mgUCwcsxn[a46wmg*x/oWs_ukqȽCUˣ*Ma9HWV墐/ODf;s.x[1cbKƾwl2q6	h%q:X=qJ'ثeqN&@]\)/lpm@x7 ۏx9
ۘ3L>˰<w!<gptE0=ܗbO3Nt	;'>}vzO92<A~ޙ}q1u+R5JqO[_PK۶uC  S  PK    A             F   org/bouncycastle/pkix/jcajce/X509RevocationChecker$LocalCRLStore.classTNQR8.ZA@܊ "F,`Q9,e%ۅ;>1QI513	|/sJB/JΙo;3o??~05|P7kڦ7GхE~OޒM#7EvMp-+4Kime=cڙwe
}5}M7\OK&;ii+fۋބcYtl֢{O\Rcyb֝[Eֳ-nh.e1J¶̽صK}LePź%)[*ـ
2?G#r4r4qhhh$;+0,?A^%OO?	TIZ?ѢtCRBR<PVkyd
cceUTZ*MUM<\iֿJa@E
EEŰf)jRQ:6]<~Mp75) .a<˘ lMRmpfx&6̴-i7<o-򄡟tAEi"M=
%{"d'3@]CLG>!,rz;U :J+%.S:!fn2,@kqA_
yi+xJpd|-?V
$*u@BD8cSpzqPKR  H  PK    A             8   org/bouncycastle/pkix/jcajce/X509RevocationChecker.class<y|TIr_^^!cѰ," @b`@dLf,,Z톶.ڪjUkjkҽ}-El	{ι{{g˧<
 Kk
P	_EP˼@(C(*z}W)
gW<A	^P<ʲgw`ѹ 1:
р[
!|Ꮅ8y,|;7jB?/V";bj 䬶:79[Z\qUu
M4_ke
ͭ4lB+4:[HqR&ҸQMioF<˶#mum-"Ͼ|Ѳ+I mþnWiU5;߽
}Wȿf/1֬pg$
[^8˱Ю^j@o_0
yh.
]x1B^IČQDDdi",Y\HDV2bsuv|Dg'yM{'[h.P(	>yXH=d]!NΈGN2EiuIXot]^R0 ̮fsYgKYy='%
!o
{vx-V$®p$TD|e,oCA
7xsؤ6wm#d{<]FKG!d"wP{( f-1d-*}MoMVͱ.wvi|6ɒTSMQq+@pB;f	B18zuH¶x{=^KZg`jn4Dʑ_yXLO0H[
yal+iu]![ayWٵe#HS;6@SrȂ.ZM|!	nV\>si\Quz2J823F(wqkp`aUvLR $Y407݁NֽE<N㖴s4:1å.LJh\ v)ͮ0P3DCs܋%fWQ僧nkdgFUmē/4֞PL-|0f-Ju1c\lߖ[5aYX0"z6-,%d^:}ZjTD^Y\hO%X{C6}G
5{#LM3h?qOS!kE
5
H^LEN#x	Dq sZ|-iR)?uh-'6F">2i/{5Qo!h!mu$&Ku>VW8.Y譊7o1ecfAs~:FJJu~w44+98=>;<.QL7	״{{|F+HyWS<>)>Zj)K
F=F|`+c$v%1g,hI	xx~Qhz9j<=kҤq{uE=|s\\wy%^l$rd7M?PU2h6/F/"yIM#av2-T#NrA֠Nօ#%|dC.VLK{M,L5p2Ԭ;ƹ[EڪUg@X|&.sai1[a(׸]׸=f]ǚ 
Y<A,=zh<6䭉l1W{FM<]/l*qYi3nĠ5n;Keh
v{Id1<}{G254vD:@#7g+%$\@OIo ]ǥ<0?KXAţY(IWujvvdыfqYbylHicEp[,8.9&}|1RʷE7==5[Գ^ArH[_s^T_CpR0)^hm_3k}Q(~woȟ{~'5?_z>O87/Y!u|	ed`wJB:eIo\jĿE>!q6oWNd
n蒳'䷁ 3k@5p.G՝e68z{PvR [E
+Py
)0Op(pkXKS`ؠS
lR2R
|I(]~OTwH+&	7KxHE%*C>,#>*6	KKC		wK8 ᠄OJG§$|Z!	J$/	~	$'$HJ0$ሄ'%KxJJ8&	JxN%|EKxA^𲄯IoHoI6ޔ9*noDVԔ|Mb/¦Kj]SWŔ{'i[)M7M^JU>Lw#ʱ䙊)Q/NtV!%VHˑ1xɶ\='|1LItDX|5('6rg9~'I(?980#yݤ>ɛ̖``a::Cn?1ozyjY C飌ilN*QGoYb4$?-T2^h8GgU2@bRH:]*"IfI33IIy/5%qp33g3oZaB	rɈW^@3'$N;'DR5O/f${|Dƙ -ocq:ya"h5>k=h͋Ӭ9*%l<g	[YVY	񂓔ג*B1wlIW2&c-ʜלsF:]OUC_>mm};7FrJMv2tUӊ+N_uӗ7Kh\4Wd.v?Z%w٬*UoہZ&м5gv;C<7d"DYx/:3Oφ?Wz8Zɜh9Q
1&Hc	KiR&*cZߑj	?(L O*CO]ǽG&{!M=7i"cѺ78O}иtIG>8xEhN=z?M։%'X_6P~Yk".tMU6|91oZ3&Y =#_9%8,hSJf>ޭ}g?IL&|wn&0U0MmV,
͠fk[ܦr
ZC_15hfCL+5dp>
^ǫ4XWkp4xj11KA쐧;A]à5h*jҠ5xأjA^A/?01.
ѧ
~
B>
k`)`F[ZܣAj}ܧ~Nv^ In.
އ*|00Xe]t5Mty[|[5!~HJ#0G54f`y`;~\]O0Ih j?Aޣ)
|xHxg>
,dPh?.|P/34 ?"%
4ugyOhƨ8AiЀçr_kwrO38g<9_f38E/1xW|b	AE;^I'KG~dFk_fU$әw&f*'f8/8  dVq>~?,LUMl1WJbP͠V,Tq@:
KT\?c[T\)*UtAD.e*W	R5}ab2cPZ'XbpJuo"ABTl`6Ut霌:~ȽM=19*6*6Ul7fRl|5.`J/Tlc.3(a0A)ic0|ELV2|3:k~7^gp2)]a@+y(p cIȪtW]s75KO3${T-Ouý.0[gPaL#L	TN/DN?q$rzwNUacS7V[|T_vR11thZFK5hP;4BُV.a!p+b:uCؠ= FgtSu
:n-u
zny8
,Aqi?, )sb=O<5(1&
hT$aďmn!&`
Hx!cOKf 'urDU}Y5.X O,@Ieh{AxNl)z4dυ\l'DU>q
\Kp+ĆБEt/<O#l=
=tB=u0ިxA2x9 Rqd<g qf0N%S\^"
QA#Wг
^|"9̠vH]ڢS41*l˕R`a(*n8 S*l*U|ޠxL
~Guw9rtZ]Tr'nl]QqێٖRdnMZpxL-Em%[w)ʎ7ڐh,˔ƢKͩlc=ےO_LI~2x1Fv;9	6>}H|ѡT}TEK~9rܨ4{#K}Q #94<$aAC)<C@ȳuӴ0^֡˖BSx)B4 #Y;"Ut88$Եsa>ͯ qwrܓy
ǬK9JٚӑCb5l39f?<^B.7Pv*aqKY'B`Ĺ9 fG`ILB3j@	L)%N?	$;I)(˦<E%4RVbJfvKxJvv[o=I\&4k	#F(_+ʡP[Ca:VX5vTTع1#鎲o>j>lk1#;,feXZmGN!q3'ܨQ}D|[CvS~DE$}w?M	*r%|t5EW*b0%A8p5M^PmJP9yQ~G~G-~pHuؖGKzAiaH/Q<:x#[b3r!9G^rt]s)UK!
e?%	HIOi7nI4%ijM3BJaǝw3q!]V]zy䍕/(!}\@b/%H7(-Ӵy	kWI\-X
5%ENoBV<ٖߌVļH!K-/{ 'natv1zP|昕|[l˳J;Jjٓzv}򤋹J>YkKiVSA(m"@lb:EYolZ}*<Ui	ټvZ|0zj[yt]2kln?8Tcpt<:_pC-s\or0W__F(m(s)&9x:V[ױz!%\G^gE^dH,HU\mKJK(*+<|S^gz^.ueH|>ky~?:ݡ/+Sbq}a\Eyum/ΚD{AAq۠vG!mg+U3-Z80GמE'avTtmPB},møɦAfÿ;"䬯0®51V"l>5C[
;ah,_'qv:fhRdQ|bj.`9jFj;N+7'=K [
.r$\i?7èfToY GNl>͢΂SPl$1q0:Ɉ'iN)/~+\4藌
JA]B1hwSlߎmmC]EyO;ޑmwiGCH{G
QRk\jT;h4E*ZX'^\\F{)mVN	ǷPPPK2Q  C  PK
      A                org/bouncycastle/pkix/util/PK    A             ,   org/bouncycastle/pkix/util/ErrorBundle.class]OA)]Z?Z(VE.&-ZHcmvg
+?xf[[Bd9;Iv~lHϐxe[fHU;okt^9<̵6F=
ɐàӺ*w1`Akdbk	?\OvUܶ-:IK!Xcε	@ڎٴ+8ÚuS7Kz	D!p
Xou%yjn5hHiHkᮆ{vYCztz!W(8>^)S۲]kFFJg%[^píQ]G	}L4SCTXTa9$Ŋ9
OUXUC|mou/-!-'?X9z11`xf*hZoP%K)RGg҈
!:K8:}YdBz!.E)/YPl>G%JҐ#
e:Yʕ(|O|>
yhQGz6Gi	PK%  C  PK    A             -   org/bouncycastle/pkix/util/LocaleString.classN1Oa`pDPAMLLhf`v04ؒbҍ$.| D@MoӦo F>bcGeˠOWˆp^ʀq`<:65$mչ+ZsiG2	#wgu}B0.iEMnuBSszvW2XF':axԄa"e"mT;kj
ֈ*($'4Y{K7ԕS⯈e|˲ !E,-bAE
ƉhQ/Cl@fb%FY
HսJ/@Qj(`!FZ3Dt~DR4]6X'17HT+#_PKc    PK    A             3   org/bouncycastle/pkix/util/LocalizedException.classRN@=#`V|?@Chq1Fe+Z[RZEJ_qQJ
Msd>>laat۴Mo!s)ۥL81Lҡ꺎{(Mn-r,Zĥ/5,nZg:6C2D}ϴs+\u5SǷ[7=KhKVm|X6杨w IK%1dj?
?DX;I3Ş#5mR:a)2=7'X%x'f)f:vJ'
FT@JÔ(b&Iy
dcQN] GBn,d+ʢ=JIYZktZBp _{Fj	+@:ۑI=[n<a!ѧB7Srߡ#H4 PK:T%z  *  PK    A             C   org/bouncycastle/pkix/util/LocalizedMessage$FilteredArguments.classT]SU~NaeS@+V)$V_P`$mftnx8!^xљʌeM/Z߳`3R2yϻ . gv0
{t&? ͥK37N
W2O5E5z[/EZ8gl_KznCpRDoyfjnHm8AJvrA+9jEѰfVuN\`2
d0Y+բZf%]15(G$4>uҊ	l |BjͲ5K',Ѕ{Y!:v\3+Z{~Zp8DqNy/dZ֞X-wL?u(>If8ѼP,8>sM+;zӃmUɧex2dtq2I'^!'\,%8qDI\d)Nd	qɬilos2'a)	*R;\W*ʦekjwxar4jYNj8gNkZqzi!C 7z"&}&}fI80'N9|]:*|HR#Q_+; Gz!J]
#$(]ʨc!̓PuΥ:'#"
#(?b!B#lc)G굈?N0Brα_@	
Phԑ9Dۂ}|%cgHCJc=>K^$8~
Q؄HVlƘ(%`Goxov="5:磣v$S9"':}#(m,v}G
N>!侟*upF;=1EO;g	P12,-A\݋qo?|E;G_rxgo㽟MStC욦6=nl!<6&!i<8;snO3|Dx	@PKm3:    PK    A             1   org/bouncycastle/pkix/util/LocalizedMessage.classWyxgM3iBW`كh(G
$&Cζ@
*ڊgm6@BPA+jo}_f6Ʉ'Ї~{}g_|f+_	%$I#^\	
IP$̗@B	A	$&Q 7znj>ߑQZV=I^|AS)=B.iŠiEd<HETtF0_f39CK.PZӤTD] omJOw	ݬK
'.7@-mwttkҼ}[cVݹ:van2tij7a8ޫ6UikA-aqTVV>*U'OlVӓ,fTr*T<R)k4ɪT%⍙hmvT;kW36:QTГiRI04жSThBڰ[hVp6M{-ii9UbĴӑi-
icVH-YRU
h44ǻ^	-k2Tz%γБo)2)9Nh{A7%
E
}	}O5ZqE56
xϫ+qH:2	mNT24G/m.6d
zb 捴֔=:\ uA
Xw֍eRۯoŲIqOڼ3f
zL96vy_r5HFj"(bf-"ZE[īDx׈YDVvjr"1yH%Ֆ"z4Y~dMo~h?C\RENO!00gLcK/.=/=Cjھ`^yĮ\>'M*7PTq9겛n?ᾮanrvu4>5_uuڭKZfнuvz>>#$L9lմV
7|BL렻pu,ֹ{n3Nĥp7\ [AV]L:qɸ7X[dUq
2ed/c
xM,{»dVdt2;d.nMxP:}22VCL>ʡq;>V4a(39O0{)?T<GGw	|H6'<Lp8G/k{9&_f&O14L!|O0>Lqg<L3f5gN5] ?C-]>v]r$NCMڬfUQ~~я:8piUHҾ5X`1{0WZs+"D%ևpfg Ƙgr&rb"{
G1b4<~qNQ!ZRDZD 2W;$z厝ƏaF\D4ocـJiA]cb46ڴZh86=2\s\'xԊ}pd^Zs ILBX(nppK-/zݤڭG,St"tOc$!쌊D"VƸl\D--u{MWۯ>
chF[1]YS?C}X1h@:Gq;C/,Bb%Ycb ?/' >qz.E\7K|UWHUY"^A)jC<Uz&)HWքtLũ"[ƽӧ7x$*Z; '
//u流4~[ącؠxYWRXc8p9Ku%+WSԘ_ZT! blT̴^]Jbd<;\魧!u1S]QwR˄RG\D$iVкW+k5/&KsY*!4viϦUK9-[v;9e=~.ꑒzz[=VKֵsb-=Û],%eaũhl|D'WN:AiԊ|r_9(jc0oܘrQQ ?kl':>dH&.,nod*,?,ڻ:r#jpd=UZ5K`	hĈ7~ZrPKJ		    PK    A             .   org/bouncycastle/pkix/util/MessageBundle.classn@ϤI:)M
B̂
-bA)
L%`\g(`CBq
[U4z|s ]CB?f(zϼ^a{\?8ڸRO^=Cΰ~2}5м@uÀPa5B_8&rZ'>Jx]
zΡepszΣ'CE;Dˍsx|JՂe`aւmhD;cP7:V}46
!iھ仉ҋ#]Nw0mTםK6>c.ᮄ,KȠj²	5VJᆍiب`Մ[&6a!*i_?io"
z5`rvyZԗV*:l5[6<-ZY6F\ [ly\Itz3MyeVie۰4<E0gej	4\4wMPKT/    PK    A             6   org/bouncycastle/pkix/util/MissingEntryException.classTKS`=((jT6<DZYDgU~HL:I*?8tg,+g>Msw=| 0@V(hWС@U)A$ksB{ڶ`9EM8g	_-i_29mAxBs0B!5
[P)4On3i#}:-!:f9VpYhЈS%ipף㙑vD7%Q*	 A)|8%tEeW9(O*\mt-%SUGfj$tm8L	b)J:ךwNbl١bwu^",kǨ]3p[vE[Kt9}oI^:K~=28LNrk&rCP'vK|]gobs_rW"6VWh^q'DfڕoKa^b2;FRi~mnEVVы*pJA#P;Th9KF8͐ڙv9!;p#;p.11wZn>ߝwÜ6Jx8JcԆ8[,ξHNH(i2h	ަSQzjW
2@zOkYwk,S+bF&dLExq(JVɥZ{ߖLCrD[Uk
|K#?XXt7Xk5pe܈Q\a{}B2nj􇴚-xoj5&RVj̽h֖B9B-?8*}G

PKp    PK    A             +   org/bouncycastle/pkix/util/TextBundle.classOPǿeeLE_>"ľ
4Z)X][3EfVa=g?<D\pĀow򐊈g콟@
WީzOpIʞb+rujž4_H. HdGR0-ًc43R1=$~D=$ڑ?2uW~OS$m**,XJ,-vlWG#vT:`>w6#
٪l7kRoGZϏOX).ry[\q9{/wweX,:tX)c7m\-sXwtX1tSveHffWDBqJ%X#r>=5L`r"KAyz:Aj蘄fhm.PϤ\" glY\|z#OyeViIʶfk [yE򋤡MO5+F
/W2xi/Q@yZq/PK(t    PK    A             9   org/bouncycastle/pkix/util/X509CertificateFormatter.class	`ߛl2l&!$HP4x	D "dwHbw6$kmb
AZ֢ﻵT$DG~]w< {	(
0]	f0SIN0G@|E'TCX1Iqo#L֮9FT3S	}bNo4'i2h҈Esڍn	Fz><>f:z]HH8VaD987	vs
pJ>y5s;,nx!ff`_T8Hԑ(jRgFP 5	Ǝ47jakBz{~Rשk^3aDT0;Bz4a2xX@0'+fn	>-i[h̄fDM*[g":5*:[
7R&IO.WHv{fdJ"7h	
ꗆ4SkKJHew4Lc)aSkY
q;2
S;ȵRxE)w0Wōj!gQjVE2]ũm}o%"V='i][vi.tZL:
hÐ-OZ-$k!LrNWl7Y)jtTPG3:hvqmSDC!L#ͺ-]>t|i>e4e:6%)'ǒ:-kimaw
@&K
Rjk,^<)K,Zz;[[z{wkcض߭-ԫ۰q}9
"@g<mYp`.tOm
N2mhF'3iJSaۍxRECIS8k7,T4Z--VH&]⨨f*Ж!)J[cK:i+uI:t)p'6FDx[\`DCV2's0a+l5ǮĈR7( HQWRc@ 
cPOb%wFeUCFnuf́1P3)Z$c
k~PP۠,k툚z5Y[w@LxxSslJDۢ޲֒V,:gV!N}8Пu;EXǻ4:FjQ@M3z7S1]z~	Mtĸ(ߘ+"OCmhl>cI{&t f,罔p<N%}T48ԒfXk|k~afKuD)g_N^^}?E]!w9nd[e|Iw5-9L2֮`Z&G↥~r7E	JO|t^}y[:3Ew$s)v?Er$5/Xc&P-gINP:FOd2i[ۣ%gQB۵T8n7	;!{szYYj1\[{"ևKQQYCYܺeF!nw3-Ms
Ks:L{RufU{9^]-tݙ@(Y$3Waŉ$;C$d!S i	tF+=&ӾϸVY:"mբtt)g֣~N[N1LfI~$t N0KP'/A|,HbDRM	X.`
"b[l	._ C;DD`
H	[a	\G=> 
x@g$exUwdp7p7pppwpwpa2|F9>/dex\/#2aT2<)!ڐ9$ 17=Y:s')>!&RƱ-Z6T{|b;ŉݜZL,\?$L阛ctjv	fg*6ة5GN
͠I:;)2ξp)@3o6Vɲdct=v-y-eɠ'L<)K:"SW>
:=9n뷁ojtT%sߦ߸GɼxS7DY3t<pUY''g77>
59r2rWY9ՒNX9mr~s_f9嘻ѯ(2icWjc\9*˥%9huWmes.9x,9SxT^1V|B"bY%efF+cbVeW2eae<x0)3gG3^dx
UFv)1AF33fDQFgb$IH1CapW0g̅S̸q
f+qN#:
|+1k|>6ܠ7mlTRnRૌoᅌ

[et6@MOaPuRuokP`w(p>w*	
lĈmUl)Ђq]
܇	a¤d_RA:q7cH8̩K^sx8(%x'B\
qz
71nf¸qv{2c|AƇ{3>xƃ2>xq#O0>Y+qSO3>,s3"Qc_b<a`22db|aS_-WᕌW3kG^ů1E~݋u,{3~@$/sF=2~/.Ɨb#&ｸgƿ3}/fb _"Hf/^lg/2~%W7f7?؆0vl7?2d%Hy^\b"Ʒp>>xo$HX7Eݡغ5tk5_BI*5N^0<@>x9 Jwt#KwL!}'k,wr?ǀ|\* 3K[%:u#{vD(tQ 
uT\ێ>t
ȳRѴ% CXەטHkQgSAXT̯qD`c}Zfe>WyJW6"uu;\~gg}wa`yL`V4>.xNVJS#ںQ}PXszDؚnQե+f?biEa8o֘̌wxVȕ'b߱}m3.
9j]zfSe y9*Y{)})MtYW}yqyt^F舤JW5y|^ꋌ|{其e׈1mɳ-f"lK2k)-c[RYLUgrqo=Hh$)**D2

J7 _y~r(]̩Iʯ>v4*rp6ś
HTT%JW7)"I?"m(/tVd>]mTm<nhD9pERn6]-YM{aoL}jՂ4jp9tL=%U[J#4MvPon橢I>ν,fW[ GTJk2!:/m:њӉ&<BMnZJv(}ݓgd'ڲ
gqnmmumU]Śl~
} ΎU-6ϊ=uyz'T7@+#9dlqgʸض.P 8mzKG(Hogvr윣,7a|Q^9v69jV;K%Oct͈a]>]VC-
IMKNI:Ut]NWqA<h3U<%gX*䒧X3T,u"~%*%OUdbK4,S.YbKNS.y'd
rR~璧xKzUKLTUKVWT%UK.y]RQ.9[Y.)TKRqKQt,WKJ6`UPm*Ra(wUG[~hp
߳,XZK5*%Wu:
*uE*뒋U8g.DE%UT\r
t*%XXUx%KPQ*.٨r vd
rI
kvy*~rz\ry.٤%m%YS\Ed
snKIPK  *  PK
      A             "   org/bouncycastle/pkix/util/filter/PK    A             .   org/bouncycastle/pkix/util/filter/Filter.class;o>F|̜"Fn3(A +,Q?'1/]?)+5A#(]?)4/29$'U ;B$3G?
Sb ;3;#̼tkML!6F6V`bd`g f PKD݃      PK    A             2   org/bouncycastle/pkix/util/filter/HTMLFilter.classNA.ݱj ~h,Ac Fܖ,lZRDxC <OxexFII̙93g' ID%NJItK%NKHJ8+'2,YI)dFYX&XxCSrB˯RH/BN4)[yO@Uo;g"齚+۰-ӵ*enq.QnвWs*[u]\RjlJYz⹶<5㚏[rS,-v՚Z%U*T"У@gHqz/fhH✆8!RЏkzC
C1ߍnw05zmtٳJK֊UtmwIDݤkx+x]?Ǎ`>a41J&rJdydڱdd_vp\ hxa$ʣxaҘk!ʴ`ZgR2	E.<Si)̔dL=L'Ba#}&Nﵺ+!"*t/EF@R  Gk? PKD_&H  :  PK    A             1   org/bouncycastle/pkix/util/filter/SQLFilter.classn@MHCBKh熹 
-JHJIY8&uk9q*`Ă`!6eJEx^ A˙Lc$c}x>xc`WTS_ERń**2*2Hz>{^/,0D:35s<<*<5s<<<>VLz77Gw}!jkzvkնho|;n/	V1Zݾg='k5x<1ڮ祉;يo\Ӳ鉃]GdgH?^>myf{[ciH a
pzP!2
#)ϻm&i-eڴp`8M?D=mCyF3#M Q\f #B}#rK]νN9;1NĈDBDxIkFls:$ޕYQjl_H-^	B\h(!P<B-!PTbZPPC!ޡ\2ah?Wc?fQNctqHa Z,
PUPKC5v'    PK    A             4   org/bouncycastle/pkix/util/filter/TrustedInput.classmP=O0<'M@A[=MM9U W (Ϸw G02'LG.eq1_ʜê.ļjtgkSJU174Wu6ra.Mtgn1?yUGw=!>`' ǰ#i'批4c;A8=xA|]lLDѣ餵ck~nPKT   |  PK    A             6   org/bouncycastle/pkix/util/filter/UntrustedInput.classON@=CEڽ;qƍ+Fd*:+M|$. ?x\HI+}Lz2<Xj=39ZoLSQ:+\ZgY6+u#j
q
#+qMU\tܔ!<;c_86/| 6X`8|l0lΈ>*;h$@[ؤ;&5!n3Gg< b.7PKO     PK    A             9   org/bouncycastle/pkix/util/filter/UntrustedUrlInput.class;o>.F6̼;FtҼ⒜T
Ғ̜"мϼFcu303032jd%%$'e&Xk0 ]✟ʠ
 #1''lZ86U0  PKl      PK
      A                org/bouncycastle/tsp/PK    A             *   org/bouncycastle/tsp/GenTimeAccuracy.classOPǿݐv@`PEAaǻKl=`G:PX{~|9?}`/5kP5h
*P(dHW	Vh¶+%aPL˓/@A =.?:ddg{yr8r?.h_­ȭ&H+ K<;%C٠xK+W<({z|LP.Z'.AߖOpiցTSѯ"A5vӲQ/se|xx jqSRL/lr[5㮁Nb
1``-1<8$qLpb*;1KH,K塎au<}:mK̰,s,
6
vODΕ;opdd0I~Gh:X4x-dPh5LkxVV5ZRkΖjلH_#ZhQh4
%F@bzC~CuKf
5,(5l<4/b)? r'_D.fi6DPK~h/?X    PK    A             (   org/bouncycastle/tsp/TSPAlgorithms.classkWUd VwUCEl!6db1VC2
CLZ]g>ҥ?˽'qg9sf?`?F5:v2JjZ\YiL>0O+zqb2`hזST955Dl*ԵBa>G>֗28JJMJl&f(˦LJm'!X&hhyhŚzk{ZU-Fysk}ҷ8这G*2_D9ةݽ
[YC͚eVжgյ;.m~'dIi]*m۩ivS1\njLj}9M:mNÓ+N˳[e؏5
/5BHxxzӋ!%Kl뜶[5Zg*z"̅8zFj8!
g=nz6\\\zs[ZQ_kcy
JRe6I}jDu	+xCao)U0Uc
C&M2gGFt:%Xv3_ã؞|~/qt8z#Pc1~ c`112F3^`x2ƫo2IF1Gq<TN8%S/_1fUb*7C**T%F	#(0+UƧ5(2>a
1LFܬ]5
Oҟ07@H_jBaRcRHJUJgx4㒀>n4|p|h%`-qG[w,+;>
X>l pE-t)1;-u	KRKzW^JP:	nP&*p$&pO6I\I]$WHW_g<O_PKC    PK    A             '   org/bouncycastle/tsp/TSPException.classmN@@#fGI70n;& LjM3%T0ј0}(frg3|~8G~P]2XPI	ep苵
cл܋t'3o|Hx*]{uљ3a1m?e$3-y TBcgQrKQGCM8b0&J`HQEA=T]uQE{ZZ;s`hj[M~_PKc    PK    A             )   org/bouncycastle/tsp/TSPIOException.classmJ@ϴiic⦉lUBA4b$̔dImf{sc͓{iTyŗ,!}֣-MDЅHDFdEg˿tsMGCGfϮcq-"6"IVÒ0
9r[D	[-ۆ.6K}d-RjW:@=|AYB(NGϰ~:p`P5lD -PKI    PK    A             "   org/bouncycastle/tsp/TSPUtil.classXy`\ov2pX]@ $%!D$$ 8a^rxx=lA[/e=j/{}hK7If4}zwxq1
*`Y
*UP+PX9n(e@qLJDʲ@8
JeUFmtERIӷ]iiiDFpgCR1|P,^#ӓ@"d\L4LmjmniQL_26{|f(b=4RY9A-àXS7nnamh Hdc1RH<֕<ۛZW-5:V7%[C!a~e!vA2YS:_`J'9lR/'FPfC78'pO=Kƍ DΙspUA6
$q
;ɖPB
Q^Πx	Qa±!0>QlHMLdEoAJ]bD{IRN'cʍaU@fdU	aC(c4pGxҚB`lOOlk^ņK)$*Zz8hkgԶuYCƢOfiQĴ[i<MDu3gs2rm1
6/=Q#1	mMFFu`'ץ"[)4[f4U
ŷ=S6ӒP.)`w'Xvz
Xw4mGv*k>#[^-
5Ò'lu/Kwm={5JdBSK`}mMFܴ*d 5[9G{iCls8lDO*bDMR4z8C]+TQC-Jq]
l2CaC"ﱷi0^1D5Ȟ [u:F
q|eCP	I8;oГfhc]mְUum'>HyJ~*G6
ȯDM{OK쉛x"oDlS9{"U.գ:]u5o@߾er!X 0d	4灿N<>xyKw@I?&O
La*#j$tkw:ɀ8ׯ 4٧Cn1\щnC3wW¶u#W3d2?H)82qgGC'4dݓimS-nBfYr}\-\5.>ý;scB!Ft&Bq#_zڲuV}Y2;h}GY(Oyz~u)J.w[2B/f:ibT4RAm_Cv0x6zPP`

NSp
(8C
|
*`P0Sbf-I\,qDĥVDP&]"$CW",J$I$$DJb.{$.BJ$FZ$Abč7IL~d߾K)N-Y/1sZF~<9NΡ	͙>狅:**[?Z/N};3,Zu|d5hJpd~9|jQzR3eɫ ʓh;VmqGJU'I#.N<בC9"3ӭr)V99Tl=GtnOvY)bgTnksNι(-9i^nc7ZGSwD~K]S8h8Ѯo;]vzhKNH2uއ-nmcIo-I8|,׳q:|K|f-.`Xɰa#&[nc;bw3M
p!ûʡj3tTbhcXAiQV;>j4k8FHBXCRDU\2B{K
k+
7<w{
5g

Wiy[n<MI<xF2130Hàz|A01a0a<C__F3{p'<xNLk8/wT<(fxHLf1[ţ«b8]c6T2,RbKT!qCb'_UX)Lŗ$Gpcb
C_*uU |~UUbo3jU|]LS
qV)bF)EqR$Υsc,B21$J*Nm`}[_	%!j	W[yЄŕ4hG_A*-ZWs􉖴.*(Ŏp[TQϠ[zYHP2-"nP"zH\V]^Aq]UjoiZ=,(@˼ei-KKQQ}!q}(k]ckشė0Yޫ}'"{	Wُ.}8xbs79}
$^HK<)\wpDZ9^xJu7$^xHs	G$VҷP6]dD5k;'K9)Na<-%t-8(.=R'.L+ZeRW΁0H]iaދ9i,?S:\v$Ơ8*$Wa%Aƶz>갸 іPhA~5V9(>28q$ہ_!n))L:'6'w=B(4F3wnU䚴س3jW?:z4h/oZT;א td&(X#A^eFQV"PXdbs?P#2(]Di./?$n:,n-&[lJ|\s5̝͝2*V2?6eÅtYwp옎ÇZi;i}f|o1p0,f|4[̧̺r,lϱXb>`6ZG&4X̽bs0!b>k3ՁPKvFT    PK    A             1   org/bouncycastle/tsp/TSPValidationException.classuN0KڦMBh`ҭI/l R%&5QTX@H< U* N:?>c@p9F3qI]*u^!ʕ
FereL.m].1SKC礲sYK?p0Rbf+m8%O4Dn~=>#1?$n67H&O7D/v JCz+%4WDMPK
hG   d  PK    A             +   org/bouncycastle/tsp/TimeStampRequest.classW	|O,	!@"lv7,XP!!mshDaw,3އ7=hT6=Eznfflvck~o}3{p!U>lӇa`[Fg~ Om[1y:xmTM0k;ճe`pG ʉLF٭u͒U tbЯTuKIڔJj
IGĺV+HTWަ/HYM*խhIkȱzBI8^>:KECZ6JbɋDbrR\_K-\ǣfZ'z#=X:c帘,%c,諬q.|Z$-G	nSj*$~H6K@=tY\FR,VX	;5ܤԓ^'Y9`>R
v䨪Gc}]JƲd-Lɦ)VziQKd$a	inԷs-=I-udTB1䬥C>Ho.:uZ8n9i*wi(W(,VB}Qh.H+RzPjvxp+"`|ӚJWe,$oNƺPF2SjqJjJʦ:wu^^2Yi}4KIrC9NUb	چKer223ctquꀚV-9/֬Z- 6(=Swo/޿qRWSөQv8XnJ7fdT&gOKAnkwt Z#)uqURƽo<z+KSdV'!AޙRSAq5".|/V:Elq+D\)KE\%j1/b"zDtSuϬ
5.k_m7Y4J}<䪜JU^QN. -yivIJ5oV~JuKM@IB&Is;Y9-"(}o+]bO!f*s=Gд
ϸKFR2%&Jg`Jߺ/r~٧/n@iK+e<r9̼*&jWgV?r|?m0~d%,>	Kz̖~	QKG C$6ငF0a)n0p^¼2LB6㐄Z*	mxBF!VVBZN2Q5xŸCSB	V	6	x].;$\wΆw3fۏi?v~|a_#	?*ðC*>0n~'i
a0	?}3gex$#~h_c/2|S#2|!_b8Ua8R] >	{K~JệQș4.1)U@-@4Gj#[HCAPCO*<(~3=!kM9|37rrb:/A܏ؾMB]n UPC#~?CC=åM
En%[]H<6Q_
9q9cnv˝
#M)s7
n$
ݏG݅#ꅮ92uIt\|sHʻs2ss\F?yrQy9I+PW<)TX%wHONOvThm5fGehxwh6˭STY4GP'N>0<84?r˘@x]MdH	,8$6
`)9~gp{y[ì&9GÏGef=-ރ96FdֱfAuY<X*:1CqPE.Z>1wV3jU׳z<%n#3w-Vm!@e%KFp{?3?	.c
`)8A~xlŷ&-B}N/}55s]n_
Nްmó		1&XCgp[<[52=e?ù\R{Ş{$R\Y`]gRĎ᣺Ӆ2A9M߇έPKz  +  PK    A             4   org/bouncycastle/tsp/TimeStampRequestGenerator.classWkSW~ER%$ꥂZ	ht,qubmmUJliՙ&{6 a2{y9gN? ^xhCWoBKYkTONhFBv)aVײe:c[3Y7SnPO)h
UjE"x+fhE_82105NFbKSKpd('uK5ip5cͩZK
!nM-Zʡ9ZQ#kɆB3^FRi.;Rt&iu^e#)MS5fXjf``fXLRZ6"g-]1(ƦLSWe"&J@yL>T41lee5j4PNk)5fɩ'IE:mc.3IauE^ӭp+VZ\ϳekA}G9Ԃn)me7ܶ4eYSڔBV]\A Wx80#<:xt8U]<y5zrCtdx9dlI쓓JNk}?ulc/^c*JMiLK:6;ᯢyb_U,H<)*XΨt!NCd{$_]B_tQ5,؈Z13!/mP[{6>k3.eSw;r|ZM	욪߯̕QuuYyx/Rw$؃7D9{1,BĈV^x&qDǨ^h8Shd}x}M3L\a&Ey&5}Xx_@$0ȴ3Ĳ!v+\
&PH0d&Z3^==f!3Bmz{7=[}e9=ώ6@Op5XzGck=Ri54;@0rCL:0	rX
lb0Ç
>E&m\?0٦ߓl/:Q,OeFFf"2[B
|=pľۏ&G7<Af -x*c#Ò.Wyw!D
ؙ*m@R:1Nq'Rro;
|pGlnqYަx{Xܞm^eG{Yo-ewgWbqtKz`(aOSOhD(ޟCv5k?B~p&7!}Z}vטÝ>*
{$3q^#n'Ct>FPK*S  ,  PK    A             ,   org/bouncycastle/tsp/TimeStampResponse.classW	xזYyYc0pDܲ$PHiV
9XXVjőMik Ӹ
=4m6ﻥw3M]6̾;p 6
nucܸҍ167\ގEw	py;thOF$`5
t0I%Z稑c1ԑ6ZIT=*5ӦZB2Ծu4SM>=e6}lUxHN_!KDDF_j:P"ehmVZb 7lKZYԈEòALHs>}FLdL5moys~n,iys~e0js^=mb`hעe_=ajZD1ɜ˪-R@`Ϩ}Vo!Ԓc5ejI=+t6WCS]F,Pb("Vm刵P̃n-M5e	%NYP|fPSQ&=qlD
{\<)~²-dRfGzc)]zu҈jxWJZ
oS$,sTd[Uyswc{\V5x+C"Tp!.ډY!91dmM]ĕՐ`jXT*=I
n_Q:I=RZeS|Ĥz)CZˤW1JYcI
()5UT.D7^f:]\s5e;}I2cj`a(-)H%ƢqoU=WLENwCm)
ӓG;GǒfLО3
mp[UU&TBt{ăf61,NIdG"|"""։X/"(
E<]U"!jIDkDlq-"%[D^}"xgW@wQ'_^V]]-Oµ{pvsdTk:q/m/%pbV='jk53;# +jID|M' dkZ0i}M\hCKhvdZm@]GmzP5fy PUY<-ipO-4ڊiyJ#/JCf\_K(5.|UԪ,-*[+bP*N-Rv#8R|zk}EFhXfV3.p-ye5=$:+lz]2l%(P_Z2LGdx `I3fXYeLch1+q\
Lq+nϓц32vPrH"XR&˘\;dKe+XWʸfҌ0yu2z^}x[V&wXhy	ՈCxw6"w1y^	{0*a/Ln[A&%d%$D	&cL&%Dq	*d\0>3bJ%|$i		|IHHLar/$$e9&_0|g|^` ֓ҳJʿD9<{" uXp:>Hqa-3XC;4og-Q8x%ąY
A`:z
q'"n+qQ"(-Cq|'ԙC4dbuWRGtOӸT
SQ̞P`#f"M"e@ӋYut$r擛5gq~_ f.0ck,~tRlع5O.z]OιHlv%%
f@W ݇8/=$I0Y墱71G{ڥNb?4gCsGhAJ6mxsUt&Ob&*01 6\N{sdsk-9fp	cM@`Ol#-2<,}&ǟo'Ig|656'ޟigp1w3J_y"Z5L9Xc&^0zc$Bau[ٖw;k
VeoF{[yUǱnN=˖ޭ;v~;/9بS}hH߯FZ'Ʌq?"COO7Iᅳ?PKh	    PK    A             >   org/bouncycastle/tsp/TimeStampResponseGenerator$FailInfo.classON1-DERP ]D$dbΦgQ( >
QQάo ah"q >3քs!85M5wv2(*-'rHQh-Q53=
jVZ[ݨ:
	pL FK B.GEYn_#(,]T{O(#,nE8`rkO?m0OPK->*   i  PK    A             5   org/bouncycastle/tsp/TimeStampResponseGenerator.classW-lClMhi"bcC!E^Wv͑M&i#iғҦw]`	&@H/ҙJ,	'T7f3ozϿV~L`3=+N[-Cm[k%H7UKOQ	4k>35i>)˧R:ԖJX=@A𥵘⾘j0xPR!-mJ6K3?%YŴYLҺ54l(7!IO%^%$TkԌXiHHy@,|OOUi!	LOB3MBKaMւzKZ0;m-V5#Ylf4mLIHA1ZɴLSMТwCM;BxtH%>@IPo&X*hh&}\Z"~BDKht[=j&Y;Ts(	]	
rv7҉`jԈBi,l[و\WڧIAjcajcT~]mpQZ0c{eT_
TτE!BwZlޖ\WZ05-WâeRGRs״xdŲUKzS>7Rk/)`-N5UtoRĵI.pcCSn_ybשGJğ&3sn]KRt[i
OkzПևu:xQCјELkɞCi7	,P`b%~v@@R2EVxJU]nX#VvuGOYsYM3A襕+I{&QRWjWx2*p~%*{]:%rZ"2=m+Zj6Wvdq5dD30N.2O*R^W+UdtjuyeZ4k,)ZDW<RݿcU[/WS7lrd^]2X{]-V9p~Pg'2Z7k{˔^ꠝ[nuHV(
6hY,YlP0
6hPggYAFRfE#R
`we`3,*x-)a^QGyv9x@kfoa݃
!^UA71mx;8`d.f$d܉c2z~O fgedćeeYq7>/c>2ٽ721nNP1Ȉ,>#gqŧX|ŗX|WY]ۏHF܅`#ibQz}͗=/Jؠ1&=N;ث&ND Te[u=Rc3β頿xɿjܨqZ !IY9CVq9r#d
pӸ<E.Ǚ@#c<'@g@,^鼩:=|:Ʀ)aw4738[@R
;V:8N@TtaG8h.bY|4;y-9h?o{g`F]'ӃK=J6<JnLlf._u~1F@~;oVAE}h<ln%cn{]M5'΋hA6ϪC?8雥o&q$^sSϺwtg~]vy]E]^O#cQD
\D]^K,ŏƜY|,%r(^"*':-Gìe*!!&'+WPm"~/a=
U"\<* </f0/V@=2lw`^9{Y<|Mr7J;]nKx	z"'CݍI6PdGGPc܌I;xXIf V\^y#9fq\]'tx]Kl]yW	}FPK
LXs    PK    A             )   org/bouncycastle/tsp/TimeStampToken.classY	k6͹,
awa (ɲAEivfg̡IƜ^anrhf!$}}@{fgv'__z>} 8^`Vs"h^L8װӃY+ow{
v\1Yc8C1rS[S+.pJBctŮ̈́ҩ-L=?M;3{u0i8\vAv<V։gܞ}V19؛ᤇ-vaKe 1v:;hX|./ZN`Jh8V[Ss+v=B6y(iNƊvvM๫.xf6ȈMq#iB4{Iӱ!2R9v6][e!tY;UU>jf)fF2o1!3m`[1=V~RSF%39"fYGؕ^S03K6|n7yrl;L&q;L}*9
&/VDZfA-MmcO=le363Btryƽ[\Jy/۲J,~2|6qWyz$iym`=kvײmsV%q)-武'Kmg$U`*$$Vbfքeފ^?'v
ee1	3JyD[|y%˲)+9YބVW`Xs%$SMsa]UD;zXtv$<fD)wH"OӶg"i
EQ36r8=i)K[&/v3fv0dA3ӕ,+'¼Ux&vm.3)~oĺs<KS;g;^^]c:7fs8l]PȦ:++M:V .gϮDߚ8ՠOx^!/C(`Q8/!hI<9lg$X枌<5XD@z2t	F'Koncʹ>-WǮ`Jܲ:gjղ+_QÔe0r[ˬZH"{kssI9	@Zƪ,x bS>0;E^:nn+ #pr;
PZz!0s״ 'bOv\v[bP ղ5έis(Ph咺|rfENDvZřNέsNA|pr3ʕO+N
;9Zm*_}[bkd)RjV%Q?zdi#kY)0Y>+WƷwto\V3#DiFp *\УЫЧЯ]Y
*$v(\pN+v)<[*v+<GTأTH)X
{
+d
9k
PtGg2kӢfZjp3wAtEOнEm`|/
s/#Qs$g5Z+߁t/V'^w^P|a.kףHW:`EsDoNe̫Zр(LR%PWqrCݞO3[ޱ6
A~WwrT7Qqr
Ԫ\[>VҬU]&w0෌+T]ybv,~Z qIYS㸤10+jp*3qd{nF]GAll_TTAջ=X%z愞Tub.qrgSVTO3y9ddrޓPSY}܆LƗ׏T-5_5w_SPhYOիhC%7؊:.H`ޯ8ADDAhqh:]\k^]BLױ:6C:a+Qkx|LT}\G+q>|JGq1>c->|Ny:ėtlutWt,W&_7tt:[:Ʒ;:V:|Oǋ}!PFHyM3K	q~c~+;O?
I:.u?<.O5<!n!Pn۩E"x
p9OX24K35jx-z:Sh|
o3V@`7Rghx3-xRɔoNOj8StwPw"N
&6v
&]`<
lg	8[\uix-X"V
)h8"
G1
GMEZ-Эa,p.g8mp?MQ@#4vRѬ?<ʿi={+ 3}rON/ƙ M4]֊4wW+&0Vh/>'z	<}}ywĜ)EH( ͏@x7u5S\L<Co>%YG)>H;t齘~Gwi?	Wz;ӭ=F55H!϶1h;F8N>=];[xhφƕm6{G^\"]1,mk*ҳ	aj{"=FWQvG]&YKA^<O|
هqyAˮm:ŵA +uR~۸_/zofϪdB~:dglY{Ƀn"_<G̸cGZ%:A04o,Y|A%,Y|~%/,y!~1}9_;L{;X"=H7<Nw;/RIG]+Y⌿^̐nKeε<0UD6}(_^k۠LYܦkTk"
7=FDIH{ܸ.r74Sk,Z;:e"e|/վJ=lm1H4rsӏƊJЂ%늴sSUWԕʓKN/ҧ`6ͦssG'q»R?XNLW1s))zn~K&<P&[R8bTQmJ))TO+5QGClRU|.~RM7m>+i"nME:`[]kN w_PKbQ 
  A"  PK    A             4   org/bouncycastle/tsp/TimeStampTokenGenerator$1.classUNA=KKV"V-Z F$KLLCY6S&<=h&Mxg[Bc3s{;),*dF^)8;g9!Tr AUn+Hذͮ͗=&\OUYgl'Tֆe2$mT-nRUpw&u;Y#(ȇCFHpx}A=b7"(P,5y]
|PԥGWt6cV¯kVk6w:'Ŧw&EE}rOIEs*zU$)ϕp=`
\a4 \F*O`O̩Ґod23Js F Dh}lf%xN
azO$GBrji+ҭ7E}Q`ٰ`3}#%}ߑ8'`ӭ:b7$IdUT\p5\

}Hi"▆(nk8.!FdM.~]6hW0փˠ-$T0K\lTGVtBf/K~	ZeqɘDã$M/)ʣ
ŋ$@=zF:]wX<&+Evl~}Les=ăg^6"EE2ٴgL`6s](?a `@Z0֧ 3{=rPP/T	4;HUL)Yq
rPKi  A  PK    A             4   org/bouncycastle/tsp/TimeStampTokenGenerator$2.classUO@~&eSmP~8YdJRB_ȭ;FK{#@į&M^]@l޻{_O	+dWX%fi*U.$H	Yྂ
+|;cY5|BYN=a[&|uLAr0fNU^&ȸ^U/u|m2_\g3۾wPn$ܠeӂqCi=pDfR([5(Oe+j,^Z{Eg=7@_Wmn][qsUxjQе4q*,V\'CELE\E
MEBY]*R8sƳV0.?aIFd<n9a"gÓi),D(5!y,ת.,[/}HNXmD-}ުr_m&敾99-VNEĻN\iPqU9\p5t#
74㦆(ni8\!;1\D&~J"Gq\.XÝт[EdٮOņK?~ШjE(eOǶeLD#g	ܢPEIY@#TڂwxHZ(=&C{p7{{ '^68"IMhtP&161+}Ax.((9{D(^"ǳ~xLZVPK$  M  PK    A             2   org/bouncycastle/tsp/TimeStampTokenGenerator.classZ	x[ձǋ|},$"	q	^(	6D%FnlY2uQ(4k@@"-CڕHg,ٺΣ{Ιs93s}c :1	k*^&jVIsլeBp4l³{]}` x]#3zsz0}SP2±h
B"QP<	^7'}ZO]m=m}}ݧ[|ꞾNokOXBGwPѓmp?eN`F@`^X0rc,p<c1H$̄IOƢ!8PK$B.ÈzkviQaƔMMa1{
|/r^|ac(04GC|:]U˃V-"Y뼱5?>_%]C:).0ř-י1Dc10!=*6ta^BkB~Ãp0,F69!kXco6ԭUİ,tuP<l2bI6
'6hmˊE͖O\d-Xsnk@ QI>%~Ô.}8[޲
F_r%
雺I/>8djΰٮ;s{GpH:¹&9EBkՃ/aQ>l8	)Y{
QCa&`cݾPDo39-kF8n;d17h)X%Z%Gٜx/$:CYwsVvY9ciؚXq727οeQ+I ca2XO<9x{ml8$$-b`
E~Fo~07AC72.Rg/fF+G؋pԺ}>	oa6,!,7~`½V͔SĐ%rH.GDGS"2|>y͌Z 6Dm.9aL*p`nn.AV.'] ]&&(.iVZ'4Iʫ>%s_[UN_N\PHfU2clYVK,B9gV"m[3sl⹭'5	G,|,[cB2V x6#k/cl?rNXbg޸Wǂ3\56ZqM2z"NW	.ciV:56ZV01SWr{=JH]^_%}Պ|8hN#F"U.uK=]m~Vd;P`L̥FNLNuvB˗&}>_)AJJМvbS8̉8q3t(TХ[
UУWJVp5
V1!u
(+8Wz

b
  P0`
6)ج|T)VUp)PE
>b(Qc댥lr.ɼ=&NS~0eAg/ >>Yhch:*Kfayd{|h7,_6to*YȆ.3;9QYYޢ|Wzqeg7.gM.O*<\^^]=\Ŧe(N˕̈́)=~MCJļbrZTQ݅<V^t^|P3EYݼ-/$z>,|TAaERu,JeA
mK-j[U{|
EhQgjP|l6M8KnWk"LMĪ
|ZpR3o. imEF>[Pc8?f#]fnKEe|w (f*{BA{tIb}4>s<CN9	UF	$OTۻ<{p	ubM]6_Ҽo/3
Nt=QE8(?0N	FZ&DRɗ,YXl{ۗz
F"w6L\̳T
KL%.** C<=A42>rҿV,՜nn;:k92}?\7H2_4sjӉ^*
3Pa,8L|HQMc
}[
N3
m
@*ih8Zxz(2BRÍ5_h|4,ǯ[
;
{aAǟg
k
g>k?5"T*#_]
'5܀=ah`A\"
DÉUĖClVbChlۑ0:9I&6ui"W$$iėr"ZP
G4
tf%pl#x*ZXG
/p@@@fE8U]tfd6N
!p{'HO>(0I*v]-`S:T<BglT(}Dnڬq'*W8Kc*j*O
M*ʾ{i@P3ԧYU<GT<O'	|B EZ%+^ "0(p'ULP>hԯU:N!QX#E*ޠϪx.PuVb; ZDeA]HGG *J裕x
SRPo1ƪ@dX~nӇ|x0s_('H iTqu
`*\E~Wy<=g|3ZdWH}qv2vVz<30[H3[NK&sr:3ۦt;?rJ3[`NF>Q-QmEcӂY)wa)>Pyט4i]X.T`0#ϟoݫ+ wkv
;躦$x#FpjI	/y]ӫv	ˑ]t'$}LGY'v<Qk˶=g#x/O)zS)=Izģ9ҥ{u;]RtV,n¥h5~47M{9Ep]JF<<w9yf罙yS<O%3E? v8 r+xY+
 CS=SpG<Y`[ո{\ˋRs7>DW5NS	g_`,[g+{l[+me9ӧeg#jXڦߖf3-<3	3<>{5/__nߒ_
ՎE-w}⒒G㲌s,)v%N 'yͥ͘7Cf-XCo{qqBKM53Cb<3!b-{Vh<Lwy̐Ly*yأ=xeOa`{9w{4WSHң*WNa+s1]Fo?'$=ۮ|2;9-I{.fGߜom$+Ѷ1-O]!/Hѽ"IgX=lk[q}K4Iύ4ό6ϊ_˭w&&]x3U횜^Zo¶ϻqCj$uxI)>^5kr޼S-9pUKo[撅xlOME}S)xb?)wPS|yȹ}V𴂽
pXw~]e&e{'M
z"TUVLzgZ$Bg@)R3|Un7;-o`׿`;Oa:,yKkp{Lm#̷[<eܚ+-@'ť=ǻnmFՙ܎2阔$}}6/\G.w6̕Rtc
e$}}n	/%ɋnEM0Qm<goX`,R-{-*\Ξ5YNvoX7_PKM  +  PK    A             -   org/bouncycastle/tsp/TimeStampTokenInfo.classWEǿkaYޥ`
B[j*l4Ke3,ݸ;ӆs9[UcLNn񹏹sgpvd$4қ|"%~(XdN*2	&QtUl,W0sj-;[`	]S-ɇZf	+2MR-<΍R̒e2tifuhy^Ѵ)zmzq^+wG١]&Ų,?}Y]_)
`S[g2qVچ=zㅡf;BnmvumPoÙ)Jf_Φ9sJIf*s7h-0[휂wXnHD2Cvr\/s({+^eO)w seG߱wGJbF#2B@UHƈQqMuT+ekK[0D
VjCR΋;JEi%S']ܙn-\x,jA
uD p"8&OzåޢFĘz'+n[b3h`RIp±WцOUV4f
ZTъ;*qWE{*T|b U\_BƗBcAE/UtcYE'R1_+7
f@÷
n`C,քx&VNy!!DI'TR0u|<ZH-:'t+W	=_]tez)/. Ml@|(5${׊%@3}~Lvf*v^^}~?nJ+)
_6ɸ-S蒌iOM$au)4Dwf^b

 ,I$:.EP{هb>""gtEә0׸%GP:`9AԤmNv|[WaC7&l	'&MEPHXoӋ&er*XlxW"UQ~5V!:OQYnHfD bOv#PK,rB  
  PK
      A                org/bouncycastle/tsp/cms/PK    A             1   org/bouncycastle/tsp/cms/CMSTimeStampedData.classW	{=c;{2';) oQ	-bK١iXzQ&FB3rcҽtlttM[Z.}?_{gF5Eߧ3o9s߻>`
m݇$$LqZЭ$tjLR:)iͥEg2kZ3SUXlBO%dQKЮe2\4.%لf1qگ$tm)Z&j	SVșܙ ->&3UNxp39lDS1Aۯ΍zBiIZzaw4lfDiTިcd:>=.L+Oex_zQKX$|-c"t:b.D0Lǃ |Mq!!Jz')6Tph|a#彅+NǇOFESFh%1Ќx0L3VŢp"!Zb0&*Hkˤ"J7QrNd('b"3-AT{Vp`X¶ndΰHeTֈEIkB5(uXW1U?:F(n6/4H]װ2kguQO*ޠ3/bNBtyTF'Ǎ+=TZd83n#D놊e[t/{IꆍYXo'(əX1X"sHÐ"0aTb*FhKަIeZF2vxKe\&r2zd/c]2v˸Bƕ2+*oW˸FƀSЫruUU[}K`Fw@HuUQ-B>Ґد2m&!.,9bˬqeIz'Ͳ@!bmt#FR-|&k	(zCOE5/貺ou爧9҂``9|ֲڕ^un2:)^^Vئw-o^%2)v=3|jފ;aQ21f5w?gß)|m^쁚M뗹[gg^U?d$yP)ֺZTt?Rռr`cT
x+4CQъfТ"V`؈M32BX8b-tWq-NXmHS*:"⍸2&dU\Y*ޥ"*ހ9+q
fx߫b3p-x??lA|a0|T>ܣ`+C_g[pJSq
ކO(d47`_P0܊O1|Io3|OS0/)^Pp1<(e0|ka.}مa,}yZ~6hF:8' =Ak"'6x=<=y~ǜ(0=)`|xrYhS<M9rx&q\ڡ4lMs/ݜh4dq#$7Mؿ
"
WcyO[Ǔ&L=gp9Ǐb]5v/SQz5Qv!w6<24N3xj>=:/6E+r{D6o_;v%Y=19?-,&}LNrE
8LZ#S[mU9y</`8U<~Z-GO/ŵqV?K>7CDut{@.rǚFXbV.nl))*FGuUU+nv1^-2>fȠ*b{.T|.2-ߗZ~T]f:f;-LײV6Nw
?Zj7rR1PK"z  u  PK    A             :   org/bouncycastle/tsp/cms/CMSTimeStampedDataGenerator.classVkWE~&lh*PA&-4@Q ldޯ/z<Y9G?{M@69!fyyy~4AS^_7$	nXv
qA-@2*S׋P054P*Ta45XxXBO2*AR+;>bQݏ2K"U6mY~|5vD뢭ͩF6UܿТ1('y zKvlh,ھXԒ1VљQ 7[%FaKdÙ -_
-&R[;TcbA-OqclytΨZ<M15_䲄`]jfj)icPwcRz8 j5+(!597}ZE957MP^h4]03NUjjIYc"ǜfaǢZI(g	# $"@p2SW<M0(5	}ˍ\n]ʜZEAo{Cfx|QpC l>JLGGɶwASDlȡ1k
p
p2soZ]1m1C33V
'n8uro7:;fg}._V>grUC
+q,*8%ѥx[iЍ<BzAq1aY,
V@FRH^`XÆ ^ībxMiؔqCH7xoʸmʘ2a+#xK=lɘʸ/hf'm7Dc܇ 8:gn~/޾]|wLVce(b_/@?PE ka[e凌$-aW񰻊H׿w^qWPsEy\*nlZ(T1TqYv`+`8UG,Yxhpws\y+#tO-|ߡC++?M0Op`9s/L#%jPKe]y  Q  PK    A             7   org/bouncycastle/tsp/cms/CMSTimeStampedDataParser.classWwv2db,D&d)h!vB2LX:^IF3̓i-NBҕM(R|?{G%HP;o{{}o_؅K1b)݉c
V$sn˱>zg]G
GƇr(⅒/s"@(2.qbQ89WeM;[M)3SgZi
UFgbTg<Y
V7:
VQNAWPUG
ǗQz̆}3OF(=ˑDU3J!'̂ir6
zU,gS¡5&x3-Ӷ|mJ悙cg.NTOemmژ&+rfum:a"oc^Tnnh/YvNPZz0>z`Kswzё&7\/sKNv1kiwFcӇGHN%ۣN,IY', !GLght'2˽mFiܧۣҋF1s>۴7`ܢSactgpk%b{oi˹
gj6U)8Ҳ[%"/I_\Y#z\ԢFQr!<n
%ǜE\FzfVM;z/č}	OVl7{!=``Sq**U\b^
*nTP1""ba;TUT1`w?
##U0R[9	!14q
DsHM1'ZG>PA	cwn$草N5Ez;_WAG<@1:t	9k1&\Ip;y.](t~)-:0+\>h&:]Wiג%4ReGgP&v3p;hhw~EDj/:Ic:nƔ^.n*V+uaZF6*ftl਎lֳlnaqfu>ױ؄t\3`
s: 9NX
gՋ8ًMA(v㌆=p<9
w85L`ͯ4܉_yTcl^p]xV!<Qi6>5dPb0_y͓lb4gؼ%
!Wags廚ɞʘ E9HVt&h<RP"6/x/Ch#`hK%֫|'ix9U;e-M%g?%]
X65x/$颩eVElO/Phvk7*E5[Uzb^և聾veTdaϖ[
+L'8*_
~LAU*ZcC.#IQ5gS4O4S(PBw&+KUCuR.՟/>/2ū:@`G:1[@ϷjFwAjeR'Cr>)
pIcq	de%JfӋ8G4\=3z-
7ky =`%PK  E  PK    A             6   org/bouncycastle/tsp/cms/CMSTimeStampedGenerator.classT[OA]X
rjł(R4M(&i4FDGMx.B>;%dh1f1x,ے<YڳBlGr;#xrD\8ϊXXl<9qY(1tq;kMdhɣ0Z(et|pG{H,*r1儤Yƨ:lvXtk
Wj*w
*f<1#*P70)q{V^$$aRUɆ!IitGGݭUC]C
ibܮ-܍o`WZUG۸N֦W N$W-BD͊oa9nHp*GḎmDy
Cύ*̇<Að.0eƨ=TfJM! CCH fu*ǂN^SyC+3,ЏLCݳ8/tN`bz
$U}4zT}>X:zc!KgODOmilBavgd s,	@S2F<,
WR2DeD+,/vun
ѥQBү=Bg_
,+!)FIR/X,c5=Z^QPKy  W  PK    A             <   org/bouncycastle/tsp/cms/ImprintDigestInvalidException.classPMK@}6mc5x 6Q؋xE=zk}Me5لf,_)(?J
=0̛1_ 	YT^LL9#o.=/F.}JUET2+˩utcf*?DG:=_C
k6B4c[q]L4j-F5m]sn''INyVj)ZR /yEy9PKbB     PK    A             +   org/bouncycastle/tsp/cms/MetaDataUtil.classU[S@`*޵ B[ЈWxT-OKXK4M2O3ZF7Qg-j;='=?|puC{"J0I<(svmy$r:C/E 2"^r޵uA1lG,`!,L3ɉuk
qqb-'鸗ANHG|Ye_CBisE
X)5"sܱ^@`;Í{'%UKnڞm	_ڞ0Xv[4kÁmUԏLv*5r{A\ʮtCwʜ-,O՛8*vMF|.WؑzE7qXoAWP-ҫ'j]戸}[
gWk}zRh԰_Ði8ሆ1.4Drdh~cJ4kO3dTh.T[YIvke)´?%laHTwhR5["ۙnӭZۤi2Љv0}0ЃIq>1`4Ћ
q^\0Ѕ{%H'qYhDf1iE)r]1Ydb81G:t$^丿62MR_AOiVim&n&>!ѧDlo>"b}(Hg,U's_1+Fov[w&+'V&}@(1jCr홆X%c嘢<QT&g)/`ĺ˵j1
b,hk⪏[Щ-}PK4~h;9    PK    A             0   org/bouncycastle/tsp/cms/TimeStampDataUtil.classWғ
l8i$n-ņ!	YK+yAWG&-}4%mz#m9
$izi6?3H"rx{f|g޼}M]hwa60Bȅ}%Ⱦ=;$8|{vRH$8)ݸvJhbu{Fx`*OEGԜF.Гڸ&3Zj+)JpYm4&"jhaq"RijF3^'H4	WE4w$th"Z)oќ{-okH:{<X9)5ϧдxCUOha5IbKh~'nL'%(
iQ]8,吖˩qZ,/2HqtxNuv`Y˩fZNZZ̬Kn.#΄̤jb%pxJNҔJ	*^Sɤ"^猲0礔$-sXLj)˦ZzcT\$^QWzN{-S=*E|l֘섚	-&|]RڧE(U+,2E#'$T2t*|_՝QsH27Hs*ohT@@:eOVԗ+gP	Tt`爄d<,̼*2а옚1jkwKtC鬰JD-4^Ů*tFrqla!+ړuN_վ]u|BfmW\S1wSE+Ѣbh^W]+S?ПͪlΨfCAtD7{Avd5dGuS1җ(j(yFͧ^zj/VwxE:".booL[-=nIOX"TW`@
6$pVmnxv
	*pk<.<=k?$W:GjNZ^ܪh^暟+OLg3R@;oznBy{Du+|H/IW4[nוVuW4\[_K|.+_){MWcVI#ZKb:i
cuT">1e!*wiq龎*e_e9TpJ/PONRŲ^x{G$׈~$L_Z!Z!7<`gCþ
eykm\V&$܈Ep+X
a[(XGJVeɛ\q5Ȳu쀂.!>Vp=˷)
zv
xxNEޫ
هއ[e17&97vL>n^ށqEex܍=wL=+L^}*Rm7<4w#O12oǧ<nL;n8&_dr7I`]7㳭'<܊NI3}vn1TEԌRQ@DYEBF3uY~8? ]O[n]T*t,+ēi<BJυf/='óP'gqfZ
x
|gϟA=V=|4~^Qcl>b,!y쥄8E#c9n'p]&
hFtݥUil	ןCჶpxNǺHts_	/1Y7g{.?{a
vNbz<+@'Uя(~wAly{9+w&ܿ'I2Zƥ*v=.rv-IAoѾ,&!&lOQ3|Eɠ\f
#j{XNRn9
-e3Sf"wYe{ux.7oeL0eF#h&NKA,7VG[N1Sa$%:bqcqp,El*Eʔ{Nx<By %8vJ1*C/	1obAD\ljL5XHw*n;(SB^:N`]Y9!8ٿv
NB<=!t=-2J[LrGp_f=cO1
RQG*HERS䨓 5=\H30%hJ\cDMd/b
M/0FhQ&~2n_
}L~vTFBk|tiܾ&Uw[OEu0l	X<IK38gPKd$YZD	  J  PK
      A                org/bouncycastle/tsp/ers/PK    A             B   org/bouncycastle/tsp/ers/ArchiveTimeStampValidationException.class;o>.F6̼;FtҼ⒜TԢb}Ǣ̲Ԑ܂Ĝ̔Ē<׊Avנ`:v&vfFQ
ĲDļt̼tk0{XXSRX\`C6 MK{;F
 PK}?;      PK    A             7   org/bouncycastle/tsp/ers/BinaryTreeRootCalculator.classT]oE=czgKScKJ	u@$y^%.Jၧ_Sɯ APQ
w ^Qpg׎UD{gΜ{Oa!zcUNe4!4Y()@6͐ΪbWJ,E˔ҨY!kcYtZc|YE,*EZiGrkp:g^q|,Hwm^mR3\?sGޕfQV;Vyq\LKM#\E.L,t@a=3K
޿6|D3D_HYʫ꺎0INw-)'/Jk{{J!"pF]@W	JW1wPbjlzjbWGQ՘gcbG^%yj]Є㪭c1A'pg'%??I.:qLGepʄ8&utaDG.脩Ca0}3 
Q0j!#m2)e&OӿuZnš%W>)חJѢӇ(k/+08󄴓g w2% 'ުLpGxd_z)m&g?Ga6ŇpeG\1nP[EO"]tJ"0Qc~1{P[c:NC3x#XSdz2Zjp1xqx6(F1@C۪!p
b-yO$=cz$=jW@}>}|ށ!W=cֺp)eJTsx5\5[_GBBҺE`pE	Lnsp	٦Ne0
ɠo4ܹH(rkFqta^PKdg   8  PK    A             2   org/bouncycastle/tsp/ers/ByteArrayComparator.classeONA}rW	Y2A-46Vq!yw9k+bm"phLtwg˛.lQ]Q0RU&G(?\EHڤ
cB#N7qDPHxDtűL~88afR;. #"=_\IDF{Ě.zLfv 3VGw9֬^
ӆN{fkrXXo:ecy׶*V03zZ~4?=:a,PG;`PK~)    PK    A             2   org/bouncycastle/tsp/ers/ERSArchiveTimeStamp.classWy\8DQawq5h R%B5;̬MH4=6wöƤ&M3>6}of`w@>-~yA 2\WgohE	7
(Z-h?-إjy^
Ӎ1=ENGWrR6pl+'c(;ɜ<h**وQWQzLy$!L6)9.`IDGRqTZ
Y؀e9ަkjI⼐1E\5*@HPP=h#^S"m
T#{RJV
ՌtD%>Zn"zT+yr*ٺGHI=uhINu&!LdRIHP5mK7[l_VME(oK(ci6s2rs_;usY(<='tC{сdH<MU	luɰ<*U=ܱTDIqY
pǆmWcR8,ɅYnpYFGfo"Ku˘?FkP|Or"D&9#i+P<[
2a" X n߼#'|{xCPz$n+QrUO>		T;i݆>Z0W<ʉ-HoOw:w8);wJ*F lVɇzT>ã:z
?O%S9զ8]r4+[oXbiu=d&a(JŸ"C裊VZm[hG S!E|c[W\fL6+lu$v0MSocF+3ӏ݆CD""6"IVD\/bf;E,7QM"ZDh[Dg#b7x%,7q~t/Z$PHn\l"}MkKR$>ǯ0
,BAvhݻVåk-ds75\$l0W;K%ZCJa77ilpȿHpM1AK舒V成Æ̾lr*6/n[͢h5Y4EƷ~^:5tK?A:
ͬ٫ݤ޼8s81C?)vRۚ¯v}n/|"̹wңqS}ag_ͣƭ(u\7u^xg%?
sji5N a*%TI	aJBJB $,QB$eDIX
	1*a
N)	pZ:&	6	B	"	Hxk	+R	2	=xCB/^!xjJZB
PJ%6F	qNY5x+SaarɽL>9>G}828LƘ|C>܊w1y?|8 >D k~&L&L3CxÇ|Pyag)&SL`r|g|qч>P*|||1Y
Wo6zY˼ӻs%E6rSNr'qRr'9HFK8֜>q'Fe$~=;/ `=L4Itq<21$3G!zTq\9]o'KlvuAqqEB?h<IlaGDr `h oqՂx&1PCU@`Ify^QJ| AJ	e4f8m}!z	SAeO،|ݜq*u^m_{Uy%ʠkhh,܏˄悕פskP;#$+Y6Cx496H	`?&/A4b՞IR H_ywyΓnuw%gn䘿xh<5X`.Đ'_iz`%s)ŃsXj.
	rrCYOU{Ug@jk.vY&Τ,wrv6!hO7348jz)QC8zAR*O9uZKi,Qfd;wvݱ^Y45֝Eem)gcG|{jBEW,/P&?N Jx)*xA+2bV&`krժqc3iae%o/˝hTd$ 췪~)-Uo?J%ԗfuNWY_0#QNȮc˧1?#$fUPK]!D	    PK    A             =   org/bouncycastle/tsp/ers/ERSArchiveTimeStampGenerator$1.classM
0D'ZM (Ez4~6)I,x5Coyy/ kLZR4Rפ<BCIu%YUV=]2/@2l-Wc1dZ5U8/͍avaosƈc aLBH/PKl      PK    A             R   org/bouncycastle/tsp/ers/ERSArchiveTimeStampGenerator$IndexedPartialHashtree.classN@@iTAPPoICqmqji-F˅1qP;@B{o9;Mݟ,JFY:fu< >b`}/$C-n;z;/p
n5q{\uc)VcB*u*;I}ъyp!B!yL}
:u i,ñ،7<O,R`ZZZr(pdSYԲ`4#4EǕ
[?^HhCZkTJRwޱ\
h(1
Z@y0zOVG62a1?lL PKKP    PK    A             ;   org/bouncycastle/tsp/ers/ERSArchiveTimeStampGenerator.classX	xǒ=za06@42%1rH"-J!.iAqw>	[(]KBHvͻ73~쩇NX&{ {0ƃy].vnfpbSN_PBKhJ[f#]Nz"T
_Tt*cr=u#ܢ%eՠJU#\)jDz~KSæҗlaXZ53QuTSS7+^PUh 3H`b*%MxujSmH	dRMG15;
OܒQGе^KH\O$&%Ӧک]&]NC]tnܲMGXBB\*њ'fI#-c"7pK+D5
k	S۪C--vh&ѣ*cM#YJvSmvEFޗ46MLK!!S)[NJ.ي'궲,K߮&	Y6J/R>aү5=ؾqͮ45&ck+X49m*"j䴩Ńc|+\l"֗Z2RE5%^VrZ7,jGI%#}`0iW4VWFOIо3].iv-]pCdN/bk{qNvʋLySlESPs٦0jvwe12sFAeta.JK(.J/Ѫ#33,FΰIAW@ɫ]5:Ɉ6FMafY"\;.,
F	)n
l-}If:u+÷1;4F&Gm[RMG̴A:8ayZAm{L}tIT8s4p,XƱ7p8Z8VpqG+*6k8ϱfvupVMa.86sN+[;EZ8eI#jYIlSsח:h}+n;XqŜT
/nl^+mz<N
F,Qdrґ5KKÍ9nQYr1.Tta3O9ӄd7F{Ϫkl-n"	OSĭyJԄnD1+UE(""S.îCxQt%i)|WeGZm4J/["Qh+-}G{Vs|yay"YQ.Rܼ FytJ2oT[*KͰr֎kbU?NJM8mܓF֢|_"c%e0V</q=^. 52p u2
GF 
jex!ɘWɘW˘Ș&BVƋdeLd o1oʘhExx@"CSw2^#2=2xgb22Ge\	kD-X-A	1<$)	|W61.KHv3|UG%Y	&,_?v!# ߐp7p?ȪoKdՀ [{yG:qRxD/	:iC+ux)/OFf)Τr@=AWR)?Qbzʛ%٥l{)b
"ghT%5ZWҏSvѷQY .Z|Muuw'8
x=G&9t72OnjQUvʱ'"ED}n3tXW~d/'p֖`yϰ~pԑ$9n  'g`uaC-e]w2Ǳ2InT[&
ÂYB$g)Y3![sQè s)42´!wAMCUO'73KΚ_pONjp-aiӻ%o9Kǆ*%D$P}ыX̱"^Pf}pYE)7Tryvj"TCu󳱚E[s.HNw-4zcm֡FϢF F8~V\om}vɬI/'N[& <_YHp/#.`EJS{-u|N2ΞdT5c)PZntk0bd
`!LyYM<j17;GDj~
xk,5$2ĽܱlU<Fu_x=[$*`,|חfe-S{XL=c/E׊y__. mǽ1P4(M<PKPq	  3  PK    A             *   org/bouncycastle/tsp/ers/ERSByteData.classQMKQ=OGNGf `"-EEdq|=th'3eP$-Z7EFM {8¹@AnD=y:&9<>'nW ˜GPL]ѕ0"EH@5
;2:9PyQaA^C)F;OdݩrkVA0)J/dLS5gdp4YH@bLdd"bT	-߰'Y+hF1㓺'[f+'D@f_#])?cR6&7tM|Ha?PK[J    PK    A             /   org/bouncycastle/tsp/ers/ERSCachingData$1.classA
0_j5U{
7]AOCj	G Jxl?
eGwRU3:
,CoUn^?4qtFE*ӳt{vKV>k	!If.pJ{p7}p99~d9E"DY|PK-YS      PK    A             8   org/bouncycastle/tsp/ers/ERSCachingData$CacheIndex.classR]OP~qZd7?:dk'Fb̈%Q.䆳kmgЛݘ/=s&l~~ۨ1$˕Fn2[JIz0^|!Lo7ZiW]3dWxC,-wNK2dwka"hۏ;҉:anv(-`[ݵv'be%{ɐav( vmF^~ bP9giI},AK1LucϷPG(Y1,9麭3kǇVWX(vH[
^4΀H!44:.)
P䊎&u"t]qSL3\}IF#d(tcp^'KLDn:*F6JIK3pô1cVQz1UiEJYPxTg}Ea*Q>@iOwВ>MԀ?P(gd	
RLSqOHɢkqm@=PŁ8գU=BOsDsSyT|?0PK~r    PK    A             -   org/bouncycastle/tsp/ers/ERSCachingData.classS}O@V(llaoXD
rbmf-0Q	3sDq6}{^_C<йx\bm,3,Z
KqI$w#[Hw\vuKxy툀A'ű[z=|#,DPC:l:?MY{+L..\ql	;Nh2aAh}Rrk.9CM˱2t_z[ba,c]@(!Uސ::u$t$u:R:ёfY;U
ýl,/Q߽_P޹|sPzeswvjlrjgǈ@^x+ëfva5s-@b`:pـ+4ĨR\5ЋkX}@%E!+WL0$*o	cDPuy
c{\6Rj[oh MWh)mEp҅Lп~P дb%Ak!fJ S
Q<D9Ȝlcb3-BC܌'EYMS5${bECIPK>P    PK    A             &   org/bouncycastle/tsp/ers/ERSData.classe
@'Z-]`!Zi8rn#j>%کa>`ӣaC8Hܴ*a&}Zk٥̇˵Yػ$Ww%!aW,s0B3PK      PK    A             +   org/bouncycastle/tsp/ers/ERSDataGroup.classT[OQNelAT[/UDP@Z./Q̡ݔMt&fbxM1b 9o3 z1ƦANjH0oax6KQ+[6ChIn-ndq=9br..k"ޜF>2YitVZfq?j
uPnc%(ńiD7nlYȩf1Yp64նVT`ͧxfII)CAe`WZ{@m]dd Q	aM2NR}U2@C0ݩi|Nuh	C$H)w85FK9ꉖK4W 7!Ĳ0Q!.A]8TT^_A7rޔSr11 ww:TI
"`
$+]A:Tp]
Vp
IոԠWhF_-qWt0y
sg+L0ׄ. 0SfVy=v@м3Ϧ}hhJ 
Зm%a	B	574?Nl~'?b$
cLz"70ɰ/zCG!(r'?=@0!X1!QDkW<f&-M3Zҿ)jl5/_	t֧tEɝ$_ H-)$j {gB mzڷH	jrv
'{PK40%  /  PK    A             4   org/bouncycastle/tsp/ers/ERSDirectoryDataGroup.classSKOa=CB[AAV&hմ8CS#]gŒ-&Ɗ$E?M 88߹1?#7g 3.qh$Y4""%ՐTMO8M-qfEZe"zMeY1=xsRUͩ&Q
sC3Y֞)L3anqN֜Qsoʪ:z^Jj/Vt&-U):WC+K#W:dy)CòkY`idV%,HO	:ጜ֡
pƥ*<6<:xtqG^mmEw3HrQףӖyOG X/3pcTqnSn4Fm&f)2OQTi#BeV4QD7Y4$B͸ 3!.]Ap	č~\c /nD`fRn`ܤ3c~ zήehBKڒէrFSSMA
L	6)Y%&I/6	^>cjKS;_Ky
Þ1{gu";-RZ½m;|]+Xwrw#[;,vp%vidи^yphE+5(r`[ːj';)t_ۘ封amc΁'\_ I?[BZ%չôxenPK1L@  
  PK    A             0   org/bouncycastle/tsp/ers/ERSEvidenceRecord.classY|SuOlc@!1R!Nl.8Mz.%HѐdMvs}IiIl,P{{[ۭݻ{t[lFιJ+עqwW?}~,c;x}~o]|'_.esvcHd7JOZLQ-5sl|ܘ҇	}&2]5#EL-h%Z[35fSFz2gqHe-Sļ^3M}"ctp\ˍzJ?LFjJK`dšI#eKfZ*6FBO*o`s,{FIs	x2vk8ik3'܄fǭuגc$k9MOm褖$4鼒z<%W,яY-n8͙]1fWZYxu/yq ɴl]SxYd(GpA8<c:eDw&Yka~(dM.x_2_`\rYVh;2I29qaxcEvtwNW]U_Yz6`rO*e9vj)j:'JH֒H{=ѧr-5ROetUCD&kQdb43搙յ	ZZ`:mD!c,eƺ,zIr,2͇rK
SLESO 1rd)0	i=MiQ#ٷX\ϘF]ZXk
Njh	xjO2iɝٱ	F	h,hߡ#zk{vnpTmT]XEv
<iIjzYx4jVɂXt{O9ԿJPROrk7qjX:64,=Cvљ2[1\o\vpn֝d;,H<M*r;5tp.c֍ՙ
@F 2XUxlQXt>y97gT6;3sn9pT{%Jc-LV2JrtG+-JRV[kSY%|]EVclz2\yͻi8/Rg{:9_T^1;4I5Xg}5Y%0%Wini$t2nNf)H~3]mZ23t
'X)2zn,@3mB|Gjt?J,h%-[b={%葸O~>~}x~$HHxPI<,&	MD\"!K0*U^C!4|n
]!|K
B l1{3I8|tYV+7&氕]RzXJrʟkYtKa胣ʗy޹Sz;6no_7ݸ =Xy(g8]v^y:6L
U.BգJ5D郼6-q>őVE	Y"+{ļ3PQ^mTb*b7{.,KvIY[
ug!Mo{;d݄.d"!]L,6ajĭ/V,9_p|KVǳuju#cΊz{'1度ٵ"Gj)5}g9.[M6Fk2ֲ~UT-ms!)k泦,%oT[ua7
ｷ!Zmn?s5h?x>Bg~	Twyi&*n'U9 >z&!Ut25L4bϨ؎U/Xd~NţL<o*"8&/^Rс_d"ͫcwb3.IV3*BLn/0WU܉_Qq>"ʤSïο
Wъf5~G*>/X/X?dUW1_WV&k$_50[&|?(8Q8ɿ+xdcGow
Nf!)x)xI;DDLi&^LV)xLW(
'""1Yf?Qa䝟aMO"bL^%"L0ie`-L1UR&˘Ƥ]sẂ3ʤIz&3٠,q8O!3$"4b;?3	,R?ҧey"!*Z>+uuTU֕ȺRYu9_E8IOx(qI$"{ '⧗Io8L&8Qgq0k6^jvhZ&qQl/MyH^yC3/=EE:
xx1_Gob|t$PU_ym#bGLzsh
ȀO۾_P8Ǉ/pQD1zY#9-؝[1psL,boD$lGp(6_ ?U|G'w	4Hxć%'{%,pWnHWKۍuݫ:<tbG<1oyշGKΘآ8pU^eEK";AS(1HKݴ8xY~)Vd@Xcqύ;vH
y8t1BB
(]E7"=bS¾SuDC	JJppjvcr{$>Hut
k$ƾ	딕nz
?gzw/Ҷrw__8̩)V Fi^H"B^f)z9AN>o.M,OE#`im|%q?v%Ò~Wyx?r#֊c:$]%#Nc$cH}ɋ{^tc3,6ww@'[5.z9)L:N'Rzl]o*D]gçT|t
	GIyv[-W9ë;KA+[b^۩'k^=#(
gJJwB)P
6}I3eGfG\AbzG9p~+_ß8V2GP:Ȃ,tYӠԬ3#ȳVfN]%ӜtZ>^~Z%^urNM	𧎠Î0H^<?3E7F<y1}w7L&!T,9xrKBJOshcydHjśV:ecZqvώPIFW]1g.-൒WEű:<Toot"PN(>?1_@#rފa3E"?Y\]}nz,<%WJҌýxUGH3s6;g0nJ}n|!GK=79ޙcyebM
A=HuV(0p&Y])@DoN7VηpNWfAҒŌ\e
'؄_wMv PKN7Y  Q(  PK    A             9   org/bouncycastle/tsp/ers/ERSEvidenceRecordGenerator.classT]OP~6)+Cݗ	:\B(aKqK-/D]xD=Ƣӧy8 G˴e[~P3-s%)3.}6е\/po
 *VAq]`yvU 渦lc_:{E}lmea8.iJJni!zrn56XD[ED3zm'?qF:TWTNߙ=J|d%W(*P)+PЩKiɅ:NXoeJ	ΑD7K-^Xףcx}6VMN"L	c&sR!h2J:v:(Ru3o?w3
Ifzuiٌi8!4a
.j%]f4sqH臮b Ub
}I&EiiRYbh佇Ԑ(Zi!!D&*H'1
apmk%?aWps'r"`7=%wqP-ҩ<b*8bCx&	N)}(:>PK,k1    PK    A             8   org/bouncycastle/tsp/ers/ERSEvidenceRecordSelector.classS]OQ=-hQ"v"!!Pb"ۛO?D?8 4&;ޙ33g&~`/Zd_$k]E"]jy
t3JD>m{3rkI~C`pWJۓ~^}@-+QΎ
GG6lܷUشW7n]TNfO*XGR$w(=GUS@@>4&/SË#һL;gҲ燜_b@-mLūY
ٗ.esר|qM6х&R&8&ؤ1Mc3Fȡ&:=Hcr(E6%Y:}ϙ;A}CrOi$
_ꃐ=U-%kBr5'qR.'pS
`7-<jaaZM+ 8ӭZcL[L:cLMvJ? LZ_15eK|BL?!)}()e48dxAn-+I~m91+ҒY"(α!/!ebGgr29PK|5c    PK    A             >   org/bouncycastle/tsp/ers/ERSEvidenceRecordStore$HashNode.classQJ@=ZSc|Xj.@q!(JhŅ]Mӡ&-[?J]9{Ι{3ϯ7 1DJbT!V0LX20JGq}D<ܿ:!|ڻ%}6|?pN˸l02n1M0c7Zj
Ua^5牜s9
,8<+Q0`N<C2~FEIDjBl
:dXV@J"VdXe=cC8NlhpwxR br*a%N-`X S,
>@rFb8=83n*}@}dJ	E{a-*N6~PKfP  F  PK    A             5   org/bouncycastle/tsp/ers/ERSEvidenceRecordStore.classWwUMɣɔ-A+vIRB4T""Ȑ@dZ\p7DѺ!6r/Gxޙi9;ok?`	U-&b҇$8 ӇUW׹\JR6vDQ	%4بIbN	ǻ=wjTѩGj4LzZw8ShDˈ6%]zI:;"bQ
U\-e4E#ntutj1CߣkI	sxBbAmJjZPSHpM5]I-jG#$1KMznhIՈS{^Uc{0IgCI5޲,7FIS$cSiY>oS9N,e,
^eM/r73WOF=2_MT?X+ICW֠Kэ',~+'=Qfd˸ц TN\;?Ǌiɔyc[camsTи\Fd@ZVE%'
Vj-a^JF )`tLi$MVX$Տ~Mu;i+%qMD`-n/@6*
-HN`q(.$[1A6s+ظDXʪsWK]\Kfp*/2rY1QG[,w1𑛛>HwsYFŴݼ|tcU3p|EWeyЏ;>Vpej"/XDQle-:]&/rv@飢hkYdQ#
ѡ`26)XI$̆],8x 3D([LŃ
\ئ`!<
xXP0;L#
*K
ʱ[A
h
ADRP
y{(*X!$r$]X^&\O3yV"g<:Њg<B/.+bߍ erA&OykF3KYq?юZ[%ӒJ{CT_tX@HC?*.6lUvQ# A{ ިU.4>M㔄8M/$\Bk׏u
x
<4AG?>L
dΓd|;=r?>jpz?;Na^lq
Bdw<2>ȨFYeb
%I$%dv6*GU`5~*h0o!y2tLя83$H&w3;J9F9	|Q+jk o68<~mV
L##vlts1E^ۿhL&LT]SqW_{	~|Iim;](fek~r9>Vnmpzi`z<fe 9;^AE4q
{}͚|+읐/;^_yi!g}1 bg 2Zg`sM܋(YG7|fldtvlv$;*? 0g  -ͳ1<1Y觯d!ڨPK1  [  PK    A             +   org/bouncycastle/tsp/ers/ERSException.classuN@gNCJM_QbNE	~|ž8ADN"g7QJZ/ݨ[%sUrrLA82e*fY$lR\L8M.ui<#S[fE:g '!$,Dt%4J@_7@s/B	a>l;;b8~Arl^\cmPKӨ     PK    A             *   org/bouncycastle/tsp/ers/ERSFileData.classTrG=#ˌ,1$X%		" 	ƫ)dQ편@TEEUK"vQt=oLBw
RȤ0oW@i[>"pv(EU+=}gs^M<}_<"z]RJnWtU
ǞjD&#CTVPZbAYEdϯ-xZX9Eפ^rEh׋s0Xcx1CRPo5ME?b8yjkOϗ5{}Ԝ%ߗ5O#*#.Қu0vj3
ϯʐN
g/U[n=".#Z:+췘;ͷE=!U[2CreiC?ps'8sgaUJ=fHs;EC^C?+O}gVwRgrZvƣda ?[o`?R8dg,z0e ~`ᬅ^q
iKi41F4
fW40s
̧qʘ1k`!9L7}}4_DХEc.A{Jm#I;@X+n`Z(T2]M,oco0^ia
yl`56p!]ޛ!O,. >Q r'xn[_7-^a7u.9k[N͗ɗ-Udt	i\ߌ0F7-0Ƒ~"VWm,0N,|PKEI-1    PK    A             1   org/bouncycastle/tsp/ers/ERSInputStreamData.classT]wU7M{tBVbU
V~HHtrMhxŵ ɲk7M.dZJ/=g߳Ͼ`	I=-z2p=wvm9hfBQ,ӱ)ł]d8\3m^0lyexh{@%ESX
Wv%ۡ5IThqDt6$}3Tm_Xw;=JرI5"`Oj͇a{FhtrCs̚'Ԏ,X.meH_֚Dӭ9x@.#KG_hJ
۩
ak[HG2śMSI[vNԏ4(Ei9DNHka[HK/UJ>Hpp1116Yw8qf\QL刺c/b
ƏI=Zy@Ha$s4J]άrtØ_+.
-Ѳ-^ַ)5+'𯿆ln#u^*}量c	CW >
8.x:RDǄOuhc uwWO/j s
J.b^$֐)|!9|`I7
V4UC\S>C|ޫ?F;AOaYMez.P Ff}%U{-ʘ4"N_@)B%ķa`r2}
0YCw)'Yw,{l*ibNީ-);Pi%/)lc\X
=ob+o^Gh-JP(9Ƒ9K~\	~%^+٧X{fpLns6Ǜ3h3*vhϡ6~|RxBR)t㰫ASjky_PK    PK    A             4   org/bouncycastle/tsp/ers/ERSRootNodeCalculator.classANAE2Fl쐰chb;me4S/\x e&6!='R_e.W4=P\\oiOSՖ]-ەT{wճXZ_s*o<!*O*vpfhe87X<\nshq*XgtC>50G#|c/mmjաpޠsi~PKݙ     PK    A             &   org/bouncycastle/tsp/ers/ERSUtil.classVwUMNL.VDHh+ -Vڤ2M40dd-+
>U=?_;3NR`{ɯ8
ߺp;8=a4OHVx#!&uzSɄIkccvC.DJ$m*G3	eWJ':Nr{ELRbE&%cLaY۝LSԴ́'R&3et9ɦUMLM$}PO&L14&qIiOehG]DN8@F'!0JJǥtT sƻ($&tYtUI'`B
z&brJOI
4-vh)[`<10zLn}E~xYֲ(=!U\KL/UŃj&Ii]R:%SAIJFS%j4ke5KOYKCGӤ T7-
TPf22U/R06.6jzofɍ(
hM9'lRGpi*}.]5êLRU&]mݦ&6;h.Bj3J<yTX.yc<<<yxyxl䱙-<Zyq/7vOYAH+=.j'v'\_nP/G.^t!ȠHkxJܰǴmFY,2VeިWϢr=
'-507y)v)}Z]²IjP-T<-FFƘ\mz+SqM= Qo5k攽LcQe`z.	".
F
" .KDD;#kOC"_7DlaU#"qT
F!D,(DģKЇc:qJ.`$-`7&" d	FpRzO0#O3rFxA@?a*h<. ʎQs<FsIF2n8#'9^n$}!cJēa+ic#Rj?q*iE֯d$Je&T~.ƈ%"e;Y|!Me4^eS9gZ577"-xdC=U7 w5Lqŧv\w~[4;A˺w^Rs\;S^|{_p<T	ff K0g$e0@.@.4Y5"UƽV}Viw +XLi@`Ǯ!c/Osı8̾<@[Y/~[ [ ,T7#yeTy-[mq;iGW֪nk6!B|o߹;}5-茍rOB8$7/3#u9o'ou:qƀ1mԓ+;~BM
Ը@j*hC>."p?\hpi7p#OJqj&>7Q*8S6W2ڻm3x5uUrFq z)~YPKG    PK    A             &   org/bouncycastle/tsp/ers/ExpUtil.classNN0}צu	ZV:0xabA@
HN+ˎT	$>H,v;ݽwp!=>'tϕQp;)ZB|	s"d+k&F<&E*t,;4Cat`2E}rUdZNh`؋C]Gv걉V(sPa@@'Y`=K!
'Cr{PKojD   u  PK    A             *   org/bouncycastle/tsp/ers/IndexedHash.class1P(U`@$o1E'TEZ+cDb|(q%w_~K{ #XPe(|BidPUCuJab\HY?VZ
FE
eUT\X:ptE(1`%x>pŞe3YI0}{?PK'      PK    A             C   org/bouncycastle/tsp/ers/PartialHashTreeVerificationException.class;o>.F6̼;FtҼ⒜TԢb}נ`׊Ԃ<F[J2s<3BRSR22AD5|sK2ҭ5xb`a`gd`qOIePd`rAـb`B6-* PK򼟂      PK    A             -   org/bouncycastle/tsp/ers/SortedHashList.classSKOQn[:}ЖWUi*IYݶ20v`K06.DIkܙi]8o;~ܙo>0-x!dmBQBЛ3.F@^4nUnk]R|-X
MwX^,Qs?
NuIQ
:N[_%%1wL@76Z5WCS{E,[-9v?shۤk4R1/A!SQ	]%$RVb'[&
ũU{KU	%[9C
'rxJ)wT#O90aPB7nM׎&_|8OiqB32ฌe$dю2diQYȈ#1Ћ0 	
8/.ŐHL^2t9Ϊ^[+wy0D{O
PM;.!x"YL',Q$ Y@gnWrGo@<tzf<(|E[A'"+H'3V~aX^MLR'x1L1Ht=vޥ@i{un9S['~LIe|	?P

mH0z-\m!K<mi1- PK&    PK    A             4   org/bouncycastle/tsp/ers/SortedIndexedHashList.classTOp~l+a."tPQ1eSdfƇ
ԭ(̕tň`41(B1uswN_-x5Y,J1xOSZQUJf"TMh<\VLjT񐻤qaT2c\T)rY;EHn;bey4Zn4c?As_8W41̒\0V*բRʚlUeͬUK2x(=[Qǚ:K
=䚌o2/]@NGt	``kHΧSUS"053bwHܿoA)0?`[.SB7*vMW]3=DbJ1k>^hq8)"&."NE8í!E܋F81aЃK>,q80>c܏^\ә1T:޼^(
fR\,U
e
?LT0	tq; 	d\=MD&m!F~Bbb4baΙ
ɃCzGt^#^[Md&#MLS>cƍ{ySCTĝNA^
g.GN emY6xÿh'H8::Å Ѷ8ٕ9TmݎPGfd˿~Zꍏ-PK'    PK
      A                org/bouncycastle/voms/PK    A             .   org/bouncycastle/voms/VOMSAttribute$FQAN.classSNQ]Nvnh"e /@A
D1$PuZ)+$RM|ߤ3"6]u>g_N|`>H>> &l\Pq'9)}eͬ5EP0̴:
HkuS9cXL>ZCތdʹayMm]У9DFZY3#<M͔Qr狙h2_6S)dF])2mQLlQ3r@	KdMg4d!SFPyL':"H.IԲ<Ⱥ*T'8`^@
.?3	U]Q1\ \eP0GF+
22apOAwøp_h|*9SVi9T2JW,=vI/Г9@ ۵MʏkOB}EǤ6][\"qІF0vθo.RgWc}E>LT8!uJن7 j+4
hIiW/&hN!4Ҟ{_F!u?ʞFr@G[N~z2iWc!7Bm+B;3`G^%[?ATWDvZXӦr-nS+('ł]bTS{2OL?%Du{E63YU0̟Yx l;cd&c5v7KڹC'GO:oPK%	  u  PK    A             )   org/bouncycastle/voms/VOMSAttribute.classVwƒeI@AIM2eq`Z,w]Z}!Iy%m<Xo9'C6T蛙{s;3/"dkEDDAFD-"&b{$T(JYoisxp7C}|Yas{CֶwЬd(=;jA̼U͢b)l2az*;'T2̰F#kM:i떩覒Qt.n0sYǏlqJhє3QlE-ii9mbQl"Ee'{p37m%cz^t[;0lp*VWZBDj=WpbضurgeɞȪEVLytTݴ)9EI0Dxʹ! iˆQ9\V
ڍV]CZQڴkp>	(yV3dx14Sǉ%loca=
o,[`ebvQ+nS5af1q`2M8T"IӆU#U*5әGZ7GʎͦŢnνˎn$RZQ`cN	Bft+<7x=nt+s+}osWP:i:sw.yVU
HW=ZI5rض:"ťqfZsI%<ĭuZY^5n'w:`5xe/(91g:lG0ETl;t
]vxX@J@8 ࠀG@p$&XYXi$\z"41Jw{fqpKO0l7r)Oהok+؟<̏6._KRڼ<uq%{Umbwb	<iyf\lUK3{[v-[o^k]+ge߫rd	9*c.h2SF]2ڑq/
2~ȡcCQd]c8%	1.d1!Cрm8q$
q~</0~%~7sN3^A.ᬄc! 	Q0^$~^𺄧2$58qx^r{6,m*?ݫNsGQ;N BaNJ:Ow?RZv
4'k}io5`phO\BX;47jj386	NrWz[FJ`֖XCU|qLc*> >\O#U\ECoh(FwW H*.DI)~4:Qşp/qo"웘I@oRtQ1&\sGbBT$1?%3.E¾X7 ;ϽxxMl'|^cԿY] |ߗ@;**>YWPf:3pyk!K	F`-:.|Mc7#Ld0nAL<?{ټ?JwQKzԓo|o$k/PՉ:s[E1q^9g^IUB:<PKr`    PK   Tz[޽/                   META-INF/MANIFEST.MF  PK   Tz[Ҥ                  META-INF/BC2048KE.SFPK   Tz[=4  B"               R META-INF/BC2048KE.DSAPK
 
      A             	             \m META-INF/PK
 
      A                          m META-INF/versions/PK
 
      A                          m META-INF/versions/9/PK
 
      A                          m META-INF/versions/9/OSGI-INF/PK     A 
O    (              n META-INF/versions/9/OSGI-INF/MANIFEST.MFPK     A m/    %             q META-INF/versions/9/module-info.classPK
 
      A                          t org/PK
 
      A                          t org/bouncycastle/PK
 
      A                          u org/bouncycastle/cert/PK     A     6             Mu org/bouncycastle/cert/AttributeCertificateHolder.classPK     A v̳  
  6             s~ org/bouncycastle/cert/AttributeCertificateIssuer.classPK     A    t  )              org/bouncycastle/cert/CertException.classPK     A Y5   v  +             ΄ org/bouncycastle/cert/CertIOException.classPK     A o   b  0              org/bouncycastle/cert/CertRuntimeException.classPK     A D$F  C"  %             _ org/bouncycastle/cert/CertUtils.classPK     A E}ۻ  z  0              org/bouncycastle/cert/DeltaCertificateTool.classPK     A DV%0    :              org/bouncycastle/cert/X509AttributeCertificateHolder.classPK     A }    .              org/bouncycastle/cert/X509CRLEntryHolder.classPK     A }f2
  q"  )             h org/bouncycastle/cert/X509CRLHolder.classPK     A y
  z  1              org/bouncycastle/cert/X509CertificateHolder.classPK     A X5T     >              org/bouncycastle/cert/X509ContentVerifierProviderBuilder.classPK     A v1  
  .              org/bouncycastle/cert/X509ExtensionUtils.classPK     A 2  9
  4              org/bouncycastle/cert/X509v1CertificateBuilder.classPK     A [g  n  =              org/bouncycastle/cert/X509v2AttributeCertificateBuilder.classPK     A f;GA  $  ,              org/bouncycastle/cert/X509v2CRLBuilder.classPK     A DAd
  |(  4             ` org/bouncycastle/cert/X509v3CertificateBuilder.classPK
 
      A                          & org/bouncycastle/cert/bc/PK     A C{{i      5             ] org/bouncycastle/cert/bc/BcX509ExtensionUtils$1.classPK     A   :  H             Y org/bouncycastle/cert/bc/BcX509ExtensionUtils$SHA1DigestCalculator.classPK     A C  \  3             P org/bouncycastle/cert/bc/BcX509ExtensionUtils.classPK     A Č4U  @  9              org/bouncycastle/cert/bc/BcX509v1CertificateBuilder.classPK     A zs̚    9             M org/bouncycastle/cert/bc/BcX509v3CertificateBuilder.classPK
 
      A                          N org/bouncycastle/cert/cmp/PK     A [*d      ;              org/bouncycastle/cert/cmp/CMPChallengeFailedException.classPK     A 5   w  ,              org/bouncycastle/cert/cmp/CMPException.classPK     A 1i   e  3              org/bouncycastle/cert/cmp/CMPRuntimeException.classPK     A _ĵ  	  '             + org/bouncycastle/cert/cmp/CMPUtil.classPK     A ~6    <             5 org/bouncycastle/cert/cmp/CMSProcessableCMPCertificate.classPK     A =ҡ  +	  >              org/bouncycastle/cert/cmp/CertificateConfirmationContent.classPK     A  m  V
  E              org/bouncycastle/cert/cmp/CertificateConfirmationContentBuilder.classPK     A ͧu!    1             
 org/bouncycastle/cert/cmp/CertificateStatus.classPK     A !;    0             \ org/bouncycastle/cert/cmp/ChallengeContent.classPK     A   d  1              org/bouncycastle/cert/cmp/GeneralPKIMessage.classPK     A җ;>  
  A             M org/bouncycastle/cert/cmp/POPODecryptionKeyChallengeContent.classPK     A [;    J              org/bouncycastle/cert/cmp/POPODecryptionKeyChallengeContentBuilder$1.classPK     A șu  A  H             -! org/bouncycastle/cert/cmp/POPODecryptionKeyChallengeContentBuilder.classPK     A Qj  L  @             ' org/bouncycastle/cert/cmp/POPODecryptionKeyResponseContent.classPK     A 4j=z  o  G             + org/bouncycastle/cert/cmp/POPODecryptionKeyResponseContentBuilder.classPK     A Ebb  G  3             o- org/bouncycastle/cert/cmp/ProtectedPKIMessage.classPK     A 51	  '   :             24 org/bouncycastle/cert/cmp/ProtectedPKIMessageBuilder.classPK     A 8|  w  1             > org/bouncycastle/cert/cmp/RevocationDetails.classPK     A 9&E  i  8             @ org/bouncycastle/cert/cmp/RevocationDetailsBuilder.classPK
 
      A                          >C org/bouncycastle/cert/crmf/PK     A C)4  2  5             wC org/bouncycastle/cert/crmf/AuthenticatorControl.classPK     A KA     .             E org/bouncycastle/cert/crmf/CRMFException.classPK     A F   g  5             F org/bouncycastle/cert/crmf/CRMFRuntimeException.classPK     A 
=s  4  )             3H org/bouncycastle/cert/crmf/CRMFUtil.classPK     A .ͫ  +  6             K org/bouncycastle/cert/crmf/CertificateRepMessage.classPK     A ?o    =             P org/bouncycastle/cert/crmf/CertificateRepMessageBuilder.classPK     A _K2    7             SS org/bouncycastle/cert/crmf/CertificateReqMessages.classPK     A wB!    >             V org/bouncycastle/cert/crmf/CertificateReqMessagesBuilder.classPK     A &3
    :             2Y org/bouncycastle/cert/crmf/CertificateRequestMessage.classPK     A 08
  A#  A             c org/bouncycastle/cert/crmf/CertificateRequestMessageBuilder.classPK     A N@  
  4             n org/bouncycastle/cert/crmf/CertificateResponse.classPK     A Ϣ[  -  ;             s org/bouncycastle/cert/crmf/CertificateResponseBuilder.classPK     A kB      (             w org/bouncycastle/cert/crmf/Control.classPK     A I,g  X  6             x org/bouncycastle/cert/crmf/EncryptedValueBuilder.classPK     A h&      5              org/bouncycastle/cert/crmf/EncryptedValuePadder.classPK     A Z    5              org/bouncycastle/cert/crmf/EncryptedValueParser.classPK     A   Y	  2             Z org/bouncycastle/cert/crmf/PKIArchiveControl.classPK     A &  	  9              org/bouncycastle/cert/crmf/PKIArchiveControlBuilder.classPK     A 
t    /              org/bouncycastle/cert/crmf/PKMACBuilder$1.classPK     A t^	L    -             > org/bouncycastle/cert/crmf/PKMACBuilder.classPK     A +%  
  4              org/bouncycastle/cert/crmf/PKMACValueGenerator.classPK     A f

    3             C org/bouncycastle/cert/crmf/PKMACValueVerifier.classPK     A Q   x  6             d org/bouncycastle/cert/crmf/PKMACValuesCalculator.classPK     A $  	  C              org/bouncycastle/cert/crmf/ProofOfPossessionSigningKeyBuilder.classPK     A G4  (  0             ڧ org/bouncycastle/cert/crmf/RegTokenControl.classPK     A {L   X  8             ۩ org/bouncycastle/cert/crmf/ValueDecryptorGenerator.classPK
 
      A                           org/bouncycastle/cert/crmf/bc/PK     A t  	  N             L org/bouncycastle/cert/crmf/bc/BcCRMFEncryptorBuilder$CRMFOutputEncryptor.classPK     A ںL5  K  :             Z org/bouncycastle/cert/crmf/bc/BcCRMFEncryptorBuilder.classPK     A Wt    ;              org/bouncycastle/cert/crmf/bc/BcEncryptedValueBuilder.classPK     A     ;             C org/bouncycastle/cert/crmf/bc/BcFixedLengthMGF1Padder.classPK     A 
v    .              org/bouncycastle/cert/crmf/bc/CRMFHelper.classPK
 
      A             "             Y org/bouncycastle/cert/crmf/jcajce/PK     A GƯM    4              org/bouncycastle/cert/crmf/jcajce/CRMFHelper$1.classPK     A Ӑ
<  X  >             H org/bouncycastle/cert/crmf/jcajce/CRMFHelper$JCECallback.classPK     A V  "  2              org/bouncycastle/cert/crmf/jcajce/CRMFHelper.classPK     A ̾|  -  G             9 org/bouncycastle/cert/crmf/jcajce/JcaCertificateRepMessageBuilder.classPK     A    
  D             * org/bouncycastle/cert/crmf/jcajce/JcaCertificateRequestMessage.classPK     A EC  ,  K              org/bouncycastle/cert/crmf/jcajce/JcaCertificateRequestMessageBuilder.classPK     A }=    @             T org/bouncycastle/cert/crmf/jcajce/JcaEncryptedValueBuilder.classPK     A o  .  C              org/bouncycastle/cert/crmf/jcajce/JcaPKIArchiveControlBuilder.classPK     A K8  ?  N              org/bouncycastle/cert/crmf/jcajce/JceAsymmetricValueDecryptorGenerator$1.classPK     A a  V
  L              org/bouncycastle/cert/crmf/jcajce/JceAsymmetricValueDecryptorGenerator.classPK     A 
  S
  S              org/bouncycastle/cert/crmf/jcajce/JceCRMFEncryptorBuilder$CRMFOutputEncryptor.classPK     A EB    ?             0 org/bouncycastle/cert/crmf/jcajce/JceCRMFEncryptorBuilder.classPK     A L  	  @              org/bouncycastle/cert/crmf/jcajce/JcePKMACValuesCalculator.classPK
 
      A                           org/bouncycastle/cert/dane/PK     A 3     7             T org/bouncycastle/cert/dane/DANECertificateFetcher.classPK     A ,5B'    *              org/bouncycastle/cert/dane/DANEEntry.classPK     A '<i    1             R org/bouncycastle/cert/dane/DANEEntryFactory.classPK     A       1              org/bouncycastle/cert/dane/DANEEntryFetcher.classPK     A       8              org/bouncycastle/cert/dane/DANEEntryFetcherFactory.classPK     A AR  ?  2               org/bouncycastle/cert/dane/DANEEntrySelector.classPK     A Z^-  G  9              org/bouncycastle/cert/dane/DANEEntrySelectorFactory.classPK     A =_    /             F org/bouncycastle/cert/dane/DANEEntryStore.classPK     A _>l  0  6              org/bouncycastle/cert/dane/DANEEntryStoreBuilder.classPK     A X   y  .              org/bouncycastle/cert/dane/DANEException.classPK     A U}  i  ;             !
 org/bouncycastle/cert/dane/TruncatingDigestCalculator.classPK
 
      A             #             \ org/bouncycastle/cert/dane/fetcher/PK     A &  	  A              org/bouncycastle/cert/dane/fetcher/JndiDANEFetcherFactory$1.classPK     A QI  L  ?              org/bouncycastle/cert/dane/fetcher/JndiDANEFetcherFactory.classPK
 
      A                          b org/bouncycastle/cert/jcajce/PK     A Y    -              org/bouncycastle/cert/jcajce/CertHelper.classPK     A 4U[d    4              org/bouncycastle/cert/jcajce/DefaultCertHelper.classPK     A ӽ5_    @             w org/bouncycastle/cert/jcajce/JcaAttributeCertificateIssuer.classPK     A -Y߱    .             D org/bouncycastle/cert/jcajce/JcaCRLStore.classPK     A Qt    /             i org/bouncycastle/cert/jcajce/JcaCertStore.classPK     A 3    6             " org/bouncycastle/cert/jcajce/JcaCertStoreBuilder.classPK     A @    2             ' org/bouncycastle/cert/jcajce/JcaX500NameUtil.classPK     A B$8&    E             * org/bouncycastle/cert/jcajce/JcaX509CRLConverter$ExCRLException.classPK     A t    6             , org/bouncycastle/cert/jcajce/JcaX509CRLConverter.classPK     A |`(  
  3             0 org/bouncycastle/cert/jcajce/JcaX509CRLHolder.classPK     A *  
  U             2 org/bouncycastle/cert/jcajce/JcaX509CertificateConverter$ExCertificateException.classPK     A ^r0    \             3 org/bouncycastle/cert/jcajce/JcaX509CertificateConverter$ExCertificateParsingException.classPK     A Hy    >             o5 org/bouncycastle/cert/jcajce/JcaX509CertificateConverter.classPK     A j2'  1  ;             T9 org/bouncycastle/cert/jcajce/JcaX509CertificateHolder.classPK     A 		    H             : org/bouncycastle/cert/jcajce/JcaX509ContentVerifierProviderBuilder.classPK     A 4  s  M             = org/bouncycastle/cert/jcajce/JcaX509ExtensionUtils$SHA1DigestCalculator.classPK     A De  d  8             @ org/bouncycastle/cert/jcajce/JcaX509ExtensionUtils.classPK     A 2O  {  >             XI org/bouncycastle/cert/jcajce/JcaX509v1CertificateBuilder.classPK     A     6             oK org/bouncycastle/cert/jcajce/JcaX509v2CRLBuilder.classPK     A     >             M org/bouncycastle/cert/jcajce/JcaX509v3CertificateBuilder.classPK     A 1J    2             Q org/bouncycastle/cert/jcajce/NamedCertHelper.classPK     A Ybʥ:  m  5             R org/bouncycastle/cert/jcajce/ProviderCertHelper.classPK
 
      A                          UT org/bouncycastle/cert/ocsp/PK     A 15    .             T org/bouncycastle/cert/ocsp/BasicOCSPResp.classPK     A T  	  D             \ org/bouncycastle/cert/ocsp/BasicOCSPRespBuilder$ResponseObject.classPK     A M7    5             ` org/bouncycastle/cert/ocsp/BasicOCSPRespBuilder.classPK     A Mo    .             h org/bouncycastle/cert/ocsp/CertificateID.classPK     A Uv      2             No org/bouncycastle/cert/ocsp/CertificateStatus.classPK     A P   y  .             Tp org/bouncycastle/cert/ocsp/OCSPException.classPK     A w愁d    (             q org/bouncycastle/cert/ocsp/OCSPReq.classPK     A kJ    =             \z org/bouncycastle/cert/ocsp/OCSPReqBuilder$RequestObject.classPK     A N    /             f| org/bouncycastle/cert/ocsp/OCSPReqBuilder.classPK     A |    )              org/bouncycastle/cert/ocsp/OCSPResp.classPK     A '&    0              org/bouncycastle/cert/ocsp/OCSPRespBuilder.classPK     A g}^  9  *             4 org/bouncycastle/cert/ocsp/OCSPUtils.classPK     A $зV    $              org/bouncycastle/cert/ocsp/Req.classPK     A (    )              org/bouncycastle/cert/ocsp/RespData.classPK     A 8؎  H
  '             ە org/bouncycastle/cert/ocsp/RespID.classPK     A Ộ  !  .             ؚ org/bouncycastle/cert/ocsp/RevokedStatus.classPK     A f  >	  +              org/bouncycastle/cert/ocsp/SingleResp.classPK     A \ȡ      .              org/bouncycastle/cert/ocsp/UnknownStatus.classPK
 
      A             "              org/bouncycastle/cert/ocsp/jcajce/PK     A p0  U  ?             + org/bouncycastle/cert/ocsp/jcajce/JcaBasicOCSPRespBuilder.classPK     A w1    8             @ org/bouncycastle/cert/ocsp/jcajce/JcaCertificateID.classPK     A V    1             צ org/bouncycastle/cert/ocsp/jcajce/JcaRespID.classPK
 
      A                           org/bouncycastle/cert/path/PK     A ã~  	  )              org/bouncycastle/cert/path/CertPath.classPK     A 5k  "  .               org/bouncycastle/cert/path/CertPathUtils.classPK     A 6   V  3             Ǯ org/bouncycastle/cert/path/CertPathValidation.classPK     A WLq    :              org/bouncycastle/cert/path/CertPathValidationContext.classPK     A     <              org/bouncycastle/cert/path/CertPathValidationException.classPK     A .%    9             + org/bouncycastle/cert/path/CertPathValidationResult.classPK     A \А  ,  @             0 org/bouncycastle/cert/path/CertPathValidationResultBuilder.classPK
 
      A             '              org/bouncycastle/cert/path/validations/PK     A G1    G              org/bouncycastle/cert/path/validations/BasicConstraintsValidation.classPK     A 1    <              org/bouncycastle/cert/path/validations/CRLValidation$1.classPK     A y!    :              org/bouncycastle/cert/path/validations/CRLValidation.classPK     A pgL  	  J             9 org/bouncycastle/cert/path/validations/CertificatePoliciesValidation.classPK     A '<    Q              org/bouncycastle/cert/path/validations/CertificatePoliciesValidationBuilder.classPK     A {VS%    ?             ) org/bouncycastle/cert/path/validations/KeyUsageValidation.classPK     A b`  U
  G             s org/bouncycastle/cert/path/validations/ParentCertIssuedValidation.classPK     A 7,    <             H org/bouncycastle/cert/path/validations/ValidationUtils.classPK
 
      A                           org/bouncycastle/cert/selector/PK     A [DQ    K              org/bouncycastle/cert/selector/MSOutlookKeyIdCalculator$GeneralDigest.classPK     A [9  F  H              org/bouncycastle/cert/selector/MSOutlookKeyIdCalculator$SHA1Digest.classPK     A 
  =  =             < org/bouncycastle/cert/selector/MSOutlookKeyIdCalculator.classPK     A   t  K              org/bouncycastle/cert/selector/X509AttributeCertificateHolderSelector.classPK     A ;$BA  
  R              org/bouncycastle/cert/selector/X509AttributeCertificateHolderSelectorBuilder.classPK     A I  
  B             l org/bouncycastle/cert/selector/X509CertificateHolderSelector.classPK
 
      A             &              org/bouncycastle/cert/selector/jcajce/PK     A (3  q  @              org/bouncycastle/cert/selector/jcajce/JcaSelectorConverter.classPK     A .    H             * org/bouncycastle/cert/selector/jcajce/JcaX509CertSelectorConverter.classPK     A !J    L              org/bouncycastle/cert/selector/jcajce/JcaX509CertificateHolderSelector.classPK
 
      A                           org/bouncycastle/cmc/PK     A _   }  '             > org/bouncycastle/cmc/CMCException.classPK     A   j  ,               org/bouncycastle/cmc/SimplePKIResponse.classPK
 
      A                           org/bouncycastle/cms/PK     A ۱ٝ      1              org/bouncycastle/cms/AuthAttributesProvider.classPK     A w8ӗ  Y  +              org/bouncycastle/cms/CMSAbsentContent.classPK     A 7	    '              org/bouncycastle/cms/CMSAlgorithm.classPK     A     ?              org/bouncycastle/cms/CMSAttributeTableGenerationException.classPK     A k  w  5              org/bouncycastle/cms/CMSAttributeTableGenerator.classPK     A z    1             g org/bouncycastle/cms/CMSAuthEnvelopedData$1.classPK     A e>    /              org/bouncycastle/cms/CMSAuthEnvelopedData.classPK     A /4o  U  8             @ org/bouncycastle/cms/CMSAuthEnvelopedDataGenerator.classPK     A iBf  3  7             % org/bouncycastle/cms/CMSAuthEnvelopedDataParser$1.classPK     A AP  T  F             ( org/bouncycastle/cms/CMSAuthEnvelopedDataParser$LocalMacProvider.classPK     A u    5             , org/bouncycastle/cms/CMSAuthEnvelopedDataParser.classPK     A   	  _             5 org/bouncycastle/cms/CMSAuthEnvelopedDataStreamGenerator$CMSAuthEnvelopedDataOutputStream.classPK     A 랭J  
  >              : org/bouncycastle/cms/CMSAuthEnvelopedDataStreamGenerator.classPK     A n  v  4             ? org/bouncycastle/cms/CMSAuthEnvelopedGenerator.classPK     A h
    /             B org/bouncycastle/cms/CMSAuthenticatedData.classPK     A k  2  :             M org/bouncycastle/cms/CMSAuthenticatedDataGenerator$1.classPK     A     8             XO org/bouncycastle/cms/CMSAuthenticatedDataGenerator.classPK     A nvB	    5             V org/bouncycastle/cms/CMSAuthenticatedDataParser.classPK     A Y  
  _             ` org/bouncycastle/cms/CMSAuthenticatedDataStreamGenerator$CmsAuthenticatedDataOutputStream.classPK     A '  x  >             yf org/bouncycastle/cms/CMSAuthenticatedDataStreamGenerator.classPK     A E    4             l org/bouncycastle/cms/CMSAuthenticatedGenerator.classPK     A w?  
  ,             n org/bouncycastle/cms/CMSCompressedData.classPK     A T    5             s org/bouncycastle/cms/CMSCompressedDataGenerator.classPK     A [K  @  2             Ew org/bouncycastle/cms/CMSCompressedDataParser.classPK     A 2Z    U             z org/bouncycastle/cms/CMSCompressedDataStreamGenerator$CmsCompressedOutputStream.classPK     A 7R  7  ;             | org/bouncycastle/cms/CMSCompressedDataStreamGenerator.classPK     A /(U  p  $              org/bouncycastle/cms/CMSConfig.classPK     A P  o  /             _ org/bouncycastle/cms/CMSContentInfoParser.classPK     A uXh    *              org/bouncycastle/cms/CMSDigestedData.classPK     A A  
  +             t org/bouncycastle/cms/CMSEncryptedData.classPK     A @S?    4             Ď org/bouncycastle/cms/CMSEncryptedDataGenerator.classPK     A Q
h     0              org/bouncycastle/cms/CMSEncryptedGenerator.classPK     A {D    +              org/bouncycastle/cms/CMSEnvelopedData.classPK     A d  ,
  4              org/bouncycastle/cms/CMSEnvelopedDataGenerator.classPK     A ]    1              org/bouncycastle/cms/CMSEnvelopedDataParser.classPK     A E    W             q org/bouncycastle/cms/CMSEnvelopedDataStreamGenerator$CmsEnvelopedDataOutputStream.classPK     A `ƃ  +  :             ; org/bouncycastle/cms/CMSEnvelopedDataStreamGenerator.classPK     A wWe~  :
  0             V org/bouncycastle/cms/CMSEnvelopedGenerator.classPK     A u    G             2 org/bouncycastle/cms/CMSEnvelopedHelper$CMSAuthEnveSecureReadable.classPK     A Ҕ    F             q org/bouncycastle/cms/CMSEnvelopedHelper$CMSDefaultSecureReadable.classPK     A #am    T             y org/bouncycastle/cms/CMSEnvelopedHelper$CMSDigestAuthenticatedSecureReadable$1.classPK     A DE?    R             h org/bouncycastle/cms/CMSEnvelopedHelper$CMSDigestAuthenticatedSecureReadable.classPK     A aIX    -             ' org/bouncycastle/cms/CMSEnvelopedHelper.classPK     A 7p     '              org/bouncycastle/cms/CMSException.classPK     A mY  U  :             / org/bouncycastle/cms/CMSPatchKit$DLSignerInformation.classPK     A TF  f  A              org/bouncycastle/cms/CMSPatchKit$ModEncAlgSignerInformation.classPK     A Ek  a  &             J org/bouncycastle/cms/CMSPatchKit.classPK     A j     )             	 org/bouncycastle/cms/CMSProcessable.classPK     A DTB&  4  2             ! org/bouncycastle/cms/CMSProcessableByteArray.classPK     A 041'  v  -              org/bouncycastle/cms/CMSProcessableFile.classPK     A d1  '  4              org/bouncycastle/cms/CMSProcessableInputStream.classPK     A d      &             C org/bouncycastle/cms/CMSReadable.classPK     A q&K    .             : org/bouncycastle/cms/CMSRuntimeException.classPK     A ĩ>    ,              org/bouncycastle/cms/CMSSecureReadable.classPK     A C
     3             
 org/bouncycastle/cms/CMSSecureReadableWithAAD.classPK     A o~      =             $ org/bouncycastle/cms/CMSSignatureAlgorithmNameGenerator.classPK     A u      @             2 org/bouncycastle/cms/CMSSignatureEncryptionAlgorithmFinder.classPK     A [Y    *             > org/bouncycastle/cms/CMSSignedData$1.classPK     A L  1  (              org/bouncycastle/cms/CMSSignedData.classPK     A E_R    1              org/bouncycastle/cms/CMSSignedDataGenerator.classPK     A    .,  .              org/bouncycastle/cms/CMSSignedDataParser.classPK     A 0    Q             	 org/bouncycastle/cms/CMSSignedDataStreamGenerator$CmsSignedDataOutputStream.classPK     A c}^    7              org/bouncycastle/cms/CMSSignedDataStreamGenerator.classPK     A o	  ?  -              org/bouncycastle/cms/CMSSignedGenerator.classPK     A lJ
    *             )" org/bouncycastle/cms/CMSSignedHelper.classPK     A sx]      ;             T- org/bouncycastle/cms/CMSSignerDigestMismatchException.classPK     A z     -             _. org/bouncycastle/cms/CMSStreamException.classPK     A Dq      '             / org/bouncycastle/cms/CMSTypedData.classPK     A !&pk  ;  :             0 org/bouncycastle/cms/CMSTypedStream$FullReaderStream.classPK     A `|  O  )             x2 org/bouncycastle/cms/CMSTypedStream.classPK     A 0  8  #             5 org/bouncycastle/cms/CMSUtils.classPK     A Χ      B             I org/bouncycastle/cms/CMSVerifierCertificateNotValidException.classPK     A OL  d	  F             J org/bouncycastle/cms/DefaultAuthenticatedAttributeTableGenerator.classPK     A 2  5  D             N org/bouncycastle/cms/DefaultCMSSignatureAlgorithmNameGenerator.classPK     A vC  t	  G             a org/bouncycastle/cms/DefaultCMSSignatureEncryptionAlgorithmFinder.classPK     A }  
  ?             f org/bouncycastle/cms/DefaultSignedAttributeTableGenerator.classPK     A H  ^  -              k org/bouncycastle/cms/InputStreamWithMAC.classPK     A     g  '             =o org/bouncycastle/cms/KEKRecipient.classPK     A RV  Q  )             Zp org/bouncycastle/cms/KEKRecipientId.classPK     A ND  p  4             r org/bouncycastle/cms/KEKRecipientInfoGenerator.classPK     A Z&md  g  2             u org/bouncycastle/cms/KEKRecipientInformation.classPK     A I     (             x org/bouncycastle/cms/KEMKeyWrapper.classPK     A 2   g  '             y org/bouncycastle/cms/KEMRecipient.classPK     A u!  &  )             z org/bouncycastle/cms/KEMRecipientId.classPK     A  	  
  4             A} org/bouncycastle/cms/KEMRecipientInfoGenerator.classPK     A a	    2              org/bouncycastle/cms/KEMRecipientInformation.classPK     A "Ph  $  ,              org/bouncycastle/cms/KeyAgreeRecipient.classPK     A T    .             u org/bouncycastle/cms/KeyAgreeRecipientId.classPK     A jy:  .
  9             f org/bouncycastle/cms/KeyAgreeRecipientInfoGenerator.classPK     A " e    7              org/bouncycastle/cms/KeyAgreeRecipientInformation.classPK     A ӕC   l  ,               org/bouncycastle/cms/KeyTransRecipient.classPK     A m    .             * org/bouncycastle/cms/KeyTransRecipientId.classPK     A kB  
  9              org/bouncycastle/cms/KeyTransRecipientInfoGenerator.classPK     A *a  	  7             J org/bouncycastle/cms/KeyTransRecipientInformation.classPK     A ąg      &              org/bouncycastle/cms/MACProvider.classPK     A |   R  +              org/bouncycastle/cms/NullOutputStream.classPK     A ;    '             - org/bouncycastle/cms/OriginatorId.classPK     A V>  !  2             i org/bouncycastle/cms/OriginatorInfoGenerator.classPK     A fb  3  0              org/bouncycastle/cms/OriginatorInformation.classPK     A Έ    1             | org/bouncycastle/cms/PKCS7ProcessableObject.classPK     A {x    +              org/bouncycastle/cms/PKCS7TypedStream.classPK     A iRM    *              org/bouncycastle/cms/PKIXRecipientId.classPK     A `yǕ    0              org/bouncycastle/cms/PasswordRecipient$PRF.classPK     A _Ud,    ,              org/bouncycastle/cms/PasswordRecipient.classPK     A =D33    .             } org/bouncycastle/cms/PasswordRecipientId.classPK     A d+    9              org/bouncycastle/cms/PasswordRecipientInfoGenerator.classPK     A   ?  7              org/bouncycastle/cms/PasswordRecipientInformation.classPK     A 3(oO   R   $              org/bouncycastle/cms/Recipient.classPK     A ~@    &              org/bouncycastle/cms/RecipientId.classPK     A ߊ4     1             1 org/bouncycastle/cms/RecipientInfoGenerator.classPK     A 9x    /             : org/bouncycastle/cms/RecipientInformation.classPK     A tLӋ  
  4              org/bouncycastle/cms/RecipientInformationStore.classPK     A   O  ,              org/bouncycastle/cms/RecipientOperator.classPK     A 6ԅ  p  #             h org/bouncycastle/cms/SignerId.classPK     A hJR    .             L org/bouncycastle/cms/SignerInfoGenerator.classPK     A DWY  ;  5              org/bouncycastle/cms/SignerInfoGeneratorBuilder.classPK     A %t  ;  ,              org/bouncycastle/cms/SignerInformation.classPK     A F  
  1              org/bouncycastle/cms/SignerInformationStore.classPK     A D  @	  4              org/bouncycastle/cms/SignerInformationVerifier.classPK     A a[߭     <             3
 org/bouncycastle/cms/SignerInformationVerifierProvider.classPK     A d`E     8             J org/bouncycastle/cms/SimpleAttributeTableGenerator.classPK
 
      A                           org/bouncycastle/cms/bc/PK     A x܇    D              org/bouncycastle/cms/bc/BcCMSContentEncryptorBuilder$AADStream.classPK     A Np    Q              org/bouncycastle/cms/bc/BcCMSContentEncryptorBuilder$CMSAuthOutputEncryptor.classPK     A vut  _  M              org/bouncycastle/cms/bc/BcCMSContentEncryptorBuilder$CMSOutputEncryptor.classPK     A %^*    :             S org/bouncycastle/cms/bc/BcCMSContentEncryptorBuilder.classPK     A JH_    ;              org/bouncycastle/cms/bc/BcECSignerInfoVerifierBuilder.classPK     A ߝ}X  E  >              org/bouncycastle/cms/bc/BcEdDSASignerInfoVerifierBuilder.classPK     A     7             q! org/bouncycastle/cms/bc/BcKEKEnvelopedRecipient$1.classPK     A "    5             V$ org/bouncycastle/cms/bc/BcKEKEnvelopedRecipient.classPK     A d a    ,             & org/bouncycastle/cms/bc/BcKEKRecipient.classPK     A T+    9             |) org/bouncycastle/cms/bc/BcKEKRecipientInfoGenerator.classPK     A /į  ?  1             + org/bouncycastle/cms/bc/BcKeyTransRecipient.classPK     A ^Eb[  *  >             . org/bouncycastle/cms/bc/BcKeyTransRecipientInfoGenerator.classPK     A     <             / org/bouncycastle/cms/bc/BcPasswordEnvelopedRecipient$1.classPK     A     :             2 org/bouncycastle/cms/bc/BcPasswordEnvelopedRecipient.classPK     A |ߊ    1             55 org/bouncycastle/cms/bc/BcPasswordRecipient.classPK     A qo  w  >             ; org/bouncycastle/cms/bc/BcPasswordRecipientInfoGenerator.classPK     A ኇ    ?             @ org/bouncycastle/cms/bc/BcRSAKeyTransEnvelopedRecipient$1.classPK     A 4    =             C org/bouncycastle/cms/bc/BcRSAKeyTransEnvelopedRecipient.classPK     A Hl    A             E org/bouncycastle/cms/bc/BcRSAKeyTransRecipientInfoGenerator.classPK     A li`    <             H org/bouncycastle/cms/bc/BcRSASignerInfoVerifierBuilder.classPK     A pk    &             J org/bouncycastle/cms/bc/CMSUtils.classPK     A nS^  "  3             L org/bouncycastle/cms/bc/EnvelopedDataHelper$1.classPK     A eRa  $  3             N org/bouncycastle/cms/bc/EnvelopedDataHelper$2.classPK     A Oz  _  3             ^P org/bouncycastle/cms/bc/EnvelopedDataHelper$3.classPK     A 
=a  $  3             9R org/bouncycastle/cms/bc/EnvelopedDataHelper$4.classPK     A D+a  $  3             S org/bouncycastle/cms/bc/EnvelopedDataHelper$5.classPK     A BF    1             U org/bouncycastle/cms/bc/EnvelopedDataHelper.classPK
 
      A                          +^ org/bouncycastle/cms/jcajce/PK     A p    9             e^ org/bouncycastle/cms/jcajce/CMSInputAEADDecryptor$1.classPK     A T^0    7             ` org/bouncycastle/cms/jcajce/CMSInputAEADDecryptor.classPK     A 4<    *             c org/bouncycastle/cms/jcajce/CMSUtils.classPK     A 4  v  8             p org/bouncycastle/cms/jcajce/DefaultJcaJceExtHelper.classPK     A G~n  k
  7             r org/bouncycastle/cms/jcajce/EnvelopedDataHelper$1.classPK     A $m  P	  7             x org/bouncycastle/cms/jcajce/EnvelopedDataHelper$2.classPK     A x;  W  A             | org/bouncycastle/cms/jcajce/EnvelopedDataHelper$JCECallback.classPK     A eر  SI  5             ~ org/bouncycastle/cms/jcajce/EnvelopedDataHelper.classPK     A 
)    1              org/bouncycastle/cms/jcajce/JcaJceExtHelper.classPK     A -  ]  6             
 org/bouncycastle/cms/jcajce/JcaSelectorConverter.classPK     A :    -             F org/bouncycastle/cms/jcajce/JcaSignerId.classPK     A RU    ?              org/bouncycastle/cms/jcajce/JcaSignerInfoGeneratorBuilder.classPK     A D      @              org/bouncycastle/cms/jcajce/JcaSignerInfoVerifierBuilder$1.classPK     A 
  Q  E              org/bouncycastle/cms/jcajce/JcaSignerInfoVerifierBuilder$Helper.classPK     A Ld    J             y org/bouncycastle/cms/jcajce/JcaSignerInfoVerifierBuilder$NamedHelper.classPK     A urY    M             U org/bouncycastle/cms/jcajce/JcaSignerInfoVerifierBuilder$ProviderHelper.classPK     A jkz  g  >             ) org/bouncycastle/cms/jcajce/JcaSignerInfoVerifierBuilder.classPK     A Cx<      G              org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoGeneratorBuilder$1.classPK     A 5
    L             ) org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoGeneratorBuilder$Helper.classPK     A b]P  3  Q              org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoGeneratorBuilder$NamedHelper.classPK     A <T  e  T             x org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoGeneratorBuilder$ProviderHelper.classPK     A >  l  E             N org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoGeneratorBuilder.classPK     A 8      F             a org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoVerifierBuilder$1.classPK     A 8x  i  K             { org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoVerifierBuilder$Helper.classPK     A Z9j    P              org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoVerifierBuilder$NamedHelper.classPK     A D<^    S              org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoVerifierBuilder$ProviderHelper.classPK     A \z    D              org/bouncycastle/cms/jcajce/JcaSimpleSignerInfoVerifierBuilder.classPK     A N  d  >              org/bouncycastle/cms/jcajce/JcaX509CertSelectorConverter.classPK     A 0U    .              org/bouncycastle/cms/jcajce/JceAADStream.classPK     A     A             v org/bouncycastle/cms/jcajce/JceAlgorithmIdentifierConverter.classPK     A   
  A              org/bouncycastle/cms/jcajce/JceCMSContentEncryptorBuilder$1.classPK     A   4
  V             R org/bouncycastle/cms/jcajce/JceCMSContentEncryptorBuilder$CMSAuthOutputEncryptor.classPK     A 3    O             [ org/bouncycastle/cms/jcajce/JceCMSContentEncryptorBuilder$CMSOutEncryptor.classPK     A `    R              org/bouncycastle/cms/jcajce/JceCMSContentEncryptorBuilder$CMSOutputEncryptor.classPK     A m	  	  ?              org/bouncycastle/cms/jcajce/JceCMSContentEncryptorBuilder.classPK     A XmZ  d  7              org/bouncycastle/cms/jcajce/JceCMSKEMKeyUnwrapper.classPK     A {    5              org/bouncycastle/cms/jcajce/JceCMSKEMKeyWrapper.classPK     A e  |
  M              org/bouncycastle/cms/jcajce/JceCMSMacCalculatorBuilder$CMSMacCalculator.classPK     A i
    <             	 org/bouncycastle/cms/jcajce/JceCMSMacCalculatorBuilder.classPK     A Ȯۡ    >             }	 org/bouncycastle/cms/jcajce/JceKEKAuthEnvelopedRecipient.classPK     A ƾ  _  @              org/bouncycastle/cms/jcajce/JceKEKAuthenticatedRecipient$1.classPK     A E    >              org/bouncycastle/cms/jcajce/JceKEKAuthenticatedRecipient.classPK     A 5    <             i org/bouncycastle/cms/jcajce/JceKEKEnvelopedRecipient$1.classPK     A zhp    :              org/bouncycastle/cms/jcajce/JceKEKEnvelopedRecipient.classPK     A a&U  j
  1             k org/bouncycastle/cms/jcajce/JceKEKRecipient.classPK     A SJl    >              org/bouncycastle/cms/jcajce/JceKEKRecipientInfoGenerator.classPK     A w5    <             5 org/bouncycastle/cms/jcajce/JceKEMEnvelopedRecipient$1.classPK     A >K     :              org/bouncycastle/cms/jcajce/JceKEMEnvelopedRecipient.classPK     A :    1             <" org/bouncycastle/cms/jcajce/JceKEMRecipient.classPK     A wc    3             ( org/bouncycastle/cms/jcajce/JceKEMRecipientId.classPK     A -FM  	  >             *+ org/bouncycastle/cms/jcajce/JceKEMRecipientInfoGenerator.classPK     A -#    H             ~. org/bouncycastle/cms/jcajce/JceKTSKeyTransAuthenticatedRecipient$1.classPK     A #J    F             1 org/bouncycastle/cms/jcajce/JceKTSKeyTransAuthenticatedRecipient.classPK     A C+=    D             v4 org/bouncycastle/cms/jcajce/JceKTSKeyTransEnvelopedRecipient$1.classPK     A ˬ[?    B             %7 org/bouncycastle/cms/jcajce/JceKTSKeyTransEnvelopedRecipient.classPK     A     9             9 org/bouncycastle/cms/jcajce/JceKTSKeyTransRecipient.classPK     A FS"  a  H             @ org/bouncycastle/cms/jcajce/JceKTSKeyTransRecipientInfoGenerator$1.classPK     A KȖa  &  H             B org/bouncycastle/cms/jcajce/JceKTSKeyTransRecipientInfoGenerator$2.classPK     A m  
  F             D org/bouncycastle/cms/jcajce/JceKTSKeyTransRecipientInfoGenerator.classPK     A ݗ  M  C             ,J org/bouncycastle/cms/jcajce/JceKeyAgreeAuthEnvelopedRecipient.classPK     A %e8    E             L org/bouncycastle/cms/jcajce/JceKeyAgreeAuthenticatedRecipient$1.classPK     A nSh/    C             O org/bouncycastle/cms/jcajce/JceKeyAgreeAuthenticatedRecipient.classPK     A aW  d  A             R org/bouncycastle/cms/jcajce/JceKeyAgreeEnvelopedRecipient$1.classPK     A ~(    ?             eU org/bouncycastle/cms/jcajce/JceKeyAgreeEnvelopedRecipient.classPK     A Ӥ    8             W org/bouncycastle/cms/jcajce/JceKeyAgreeRecipient$1.classPK     A .!    8             C[ org/bouncycastle/cms/jcajce/JceKeyAgreeRecipient$2.classPK     A c3
  &  6             \ org/bouncycastle/cms/jcajce/JceKeyAgreeRecipient.classPK     A Y~ϒ    8             j org/bouncycastle/cms/jcajce/JceKeyAgreeRecipientId.classPK     A <k  )  C             l org/bouncycastle/cms/jcajce/JceKeyAgreeRecipientInfoGenerator.classPK     A $    C             { org/bouncycastle/cms/jcajce/JceKeyTransAuthEnvelopedRecipient.classPK     A L\O  s  E             } org/bouncycastle/cms/jcajce/JceKeyTransAuthenticatedRecipient$1.classPK     A cI    C             1 org/bouncycastle/cms/jcajce/JceKeyTransAuthenticatedRecipient.classPK     A T9    A              org/bouncycastle/cms/jcajce/JceKeyTransEnvelopedRecipient$1.classPK     A yמ    ?             U org/bouncycastle/cms/jcajce/JceKeyTransEnvelopedRecipient.classPK     A Cy
    6             Ĉ org/bouncycastle/cms/jcajce/JceKeyTransRecipient.classPK     A     8              org/bouncycastle/cms/jcajce/JceKeyTransRecipientId.classPK     A X  	  C              org/bouncycastle/cms/jcajce/JceKeyTransRecipientInfoGenerator.classPK     A n    C              org/bouncycastle/cms/jcajce/JcePasswordAuthEnvelopedRecipient.classPK     A <  u  E             ܛ org/bouncycastle/cms/jcajce/JcePasswordAuthenticatedRecipient$1.classPK     A ڳ    C              org/bouncycastle/cms/jcajce/JcePasswordAuthenticatedRecipient.classPK     A FA;    A              org/bouncycastle/cms/jcajce/JcePasswordEnvelopedRecipient$1.classPK     A c7    ?             . org/bouncycastle/cms/jcajce/JcePasswordEnvelopedRecipient.classPK     A 
    6              org/bouncycastle/cms/jcajce/JcePasswordRecipient.classPK     A     C             ޫ org/bouncycastle/cms/jcajce/JcePasswordRecipientInfoGenerator.classPK     A       6              org/bouncycastle/cms/jcajce/KeyMaterialGenerator.classPK     A ȏs  @  6              org/bouncycastle/cms/jcajce/NamedJcaJceExtHelper.classPK     A P;]f  f  9             ô org/bouncycastle/cms/jcajce/ProviderJcaJceExtHelper.classPK     A )C	N  8  =              org/bouncycastle/cms/jcajce/RFC5753KeyMaterialGenerator.classPK     A 4u    0             I org/bouncycastle/cms/jcajce/ZlibCompressor.classPK     A 7\  G  8              org/bouncycastle/cms/jcajce/ZlibExpanderProvider$1.classPK     A |z1    I             ޾ org/bouncycastle/cms/jcajce/ZlibExpanderProvider$LimitedInputStream.classPK     A j  N  6              org/bouncycastle/cms/jcajce/ZlibExpanderProvider.classPK
 
      A                          z org/bouncycastle/dvcs/PK     A X),    .              org/bouncycastle/dvcs/CCPDRequestBuilder.classPK     A +  S  +              org/bouncycastle/dvcs/CCPDRequestData.classPK     A Vb    -              org/bouncycastle/dvcs/CPDRequestBuilder.classPK     A Aꁵ    *              org/bouncycastle/dvcs/CPDRequestData.classPK     A    `  5              org/bouncycastle/dvcs/DVCSConstructionException.classPK     A Q    )              org/bouncycastle/dvcs/DVCSException.classPK     A nٶ    '             h org/bouncycastle/dvcs/DVCSMessage.classPK     A ^c2   [  0              org/bouncycastle/dvcs/DVCSParsingException.classPK     A v=~  
  '             4 org/bouncycastle/dvcs/DVCSRequest.classPK     A KNL  [
  .              org/bouncycastle/dvcs/DVCSRequestBuilder.classPK     A :0I   X  +             _ org/bouncycastle/dvcs/DVCSRequestData.classPK     A 'Y  <  +              org/bouncycastle/dvcs/DVCSRequestInfo.classPK     A   C  (             O org/bouncycastle/dvcs/DVCSResponse.classPK     A j  Y  *             / org/bouncycastle/dvcs/MessageImprint.classPK     A (  >  1              org/bouncycastle/dvcs/MessageImprintBuilder.classPK     A z    6              org/bouncycastle/dvcs/SignedDVCSMessageGenerator.classPK     A 5w   s  '              org/bouncycastle/dvcs/TargetChain.classPK     A 2UH  l  .              org/bouncycastle/dvcs/VPKCRequestBuilder.classPK     A ݷJ    +              org/bouncycastle/dvcs/VPKCRequestData.classPK     A {F[  >  -             N org/bouncycastle/dvcs/VSDRequestBuilder.classPK     A l    *              org/bouncycastle/dvcs/VSDRequestData.classPK
 
      A                           org/bouncycastle/eac/PK     A BІ}3  6  0              org/bouncycastle/eac/EACCertificateBuilder.classPK     A v]    /              org/bouncycastle/eac/EACCertificateHolder.classPK     A jjU    6              org/bouncycastle/eac/EACCertificateRequestHolder.classPK     A N   r  '             J org/bouncycastle/eac/EACException.classPK     A Ey   t  )             	 org/bouncycastle/eac/EACIOException.classPK
 
      A                          
 org/bouncycastle/eac/jcajce/PK     A [U    2              org/bouncycastle/eac/jcajce/DefaultEACHelper.classPK     A =     +              org/bouncycastle/eac/jcajce/EACHelper.classPK     A 
    7             
 org/bouncycastle/eac/jcajce/JcaPublicKeyConverter.classPK     A (0U  m  0              org/bouncycastle/eac/jcajce/NamedEACHelper.classPK     A ?џ5N  Q  3              org/bouncycastle/eac/jcajce/ProviderEACHelper.classPK
 
      A                          [ org/bouncycastle/eac/operator/PK     A M     8              org/bouncycastle/eac/operator/EACSignatureVerifier.classPK     A i      -              org/bouncycastle/eac/operator/EACSigner.classPK
 
      A             %              org/bouncycastle/eac/operator/jcajce/PK     A G    ;             ' org/bouncycastle/eac/operator/jcajce/DefaultEACHelper.classPK     A *Q  J  4               org/bouncycastle/eac/operator/jcajce/EACHelper.classPK     A <      2             # org/bouncycastle/eac/operator/jcajce/EACUtil.classPK     A 6Q{    K             $ org/bouncycastle/eac/operator/jcajce/JcaEACSignatureVerifierBuilder$1.classPK     A   &  _             ( org/bouncycastle/eac/operator/jcajce/JcaEACSignatureVerifierBuilder$SignatureOutputStream.classPK     A 9P޾  2  I             + org/bouncycastle/eac/operator/jcajce/JcaEACSignatureVerifierBuilder.classPK     A ˚Cc    @             1 org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder$1.classPK     A 舓    T             4 org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder$SignatureOutputStream.classPK     A Iŕ  [  >             7 org/bouncycastle/eac/operator/jcajce/JcaEACSignerBuilder.classPK     A eN  c  9             ? org/bouncycastle/eac/operator/jcajce/NamedEACHelper.classPK     A _hA  G  <             A org/bouncycastle/eac/operator/jcajce/ProviderEACHelper.classPK
 
      A                          UC org/bouncycastle/est/PK     A "H  4  *             C org/bouncycastle/est/CACertsResponse.classPK     A JjΔ  
  0             F org/bouncycastle/est/CSRAttributesResponse.classPK     A ߆z    -             K org/bouncycastle/est/CSRRequestResponse.classPK     A A>	  t  1             M org/bouncycastle/est/CTEBase64InputStream$1.classPK     A     /             O org/bouncycastle/est/CTEBase64InputStream.classPK     A }.`M    0             S org/bouncycastle/est/CTEChunkedInputStream.classPK     A v      "             V org/bouncycastle/est/ESTAuth.classPK     A A
      $             QW org/bouncycastle/est/ESTClient.classPK     A       ,             <X org/bouncycastle/est/ESTClientProvider.classPK     A %~      2             :Y org/bouncycastle/est/ESTClientSourceProvider.classPK     A d<  
  )             AZ org/bouncycastle/est/ESTException$1.classPK     A h    '             [ org/bouncycastle/est/ESTException.classPK     A "R      &             _ org/bouncycastle/est/ESTHijacker.classPK     A {PU    %             ` org/bouncycastle/est/ESTRequest.classPK     A 2    ,             d org/bouncycastle/est/ESTRequestBuilder.classPK     A 45    (             g org/bouncycastle/est/ESTResponse$1.classPK     A |i    (             #i org/bouncycastle/est/ESTResponse$2.classPK     A Nq    :             l org/bouncycastle/est/ESTResponse$PrintingInputStream.classPK     A Si	    &             n org/bouncycastle/est/ESTResponse.classPK     A j    '             x org/bouncycastle/est/ESTService$1.classPK     A +o  	  '             p~ org/bouncycastle/est/ESTService$2.classPK     A r;>  ;  %             ق org/bouncycastle/est/ESTService.classPK     A oa  "  ,             j org/bouncycastle/est/ESTServiceBuilder.classPK     A <ܳ     6             % org/bouncycastle/est/ESTSourceConnectionListener.classPK     A a~    -             a org/bouncycastle/est/EnrollmentResponse.classPK     A "td  _  %              org/bouncycastle/est/HttpAuth$1.classPK     A Y9  4#  #             C org/bouncycastle/est/HttpAuth.classPK     A 8%1    +             \ org/bouncycastle/est/HttpUtil$Headers.classPK     A ZƎB    -              org/bouncycastle/est/HttpUtil$PartLexer.classPK     A tf    #              org/bouncycastle/est/HttpUtil.classPK     A 5E6{      (             Y org/bouncycastle/est/LimitedSource.classPK     A ]Խ     !             * org/bouncycastle/est/Source.classPK     A +`k      ,             e org/bouncycastle/est/TLSUniqueProvider.classPK
 
      A                          H org/bouncycastle/est/jcajce/PK     A F      8              org/bouncycastle/est/jcajce/ChannelBindingProvider.classPK     A     G              org/bouncycastle/est/jcajce/DefaultESTClient$PrintingOutputStream.classPK     A mn	    2              org/bouncycastle/est/jcajce/DefaultESTClient.classPK     A v<    @              org/bouncycastle/est/jcajce/DefaultESTClientSourceProvider.classPK     A Atb8  j  >             U org/bouncycastle/est/jcajce/DefaultESTHttpClientProvider.classPK     A 	}    4              org/bouncycastle/est/jcajce/JcaHttpAuthBuilder.classPK     A Ott  ^  /              org/bouncycastle/est/jcajce/JcaJceUtils$1.classPK     A (O    /             	 org/bouncycastle/est/jcajce/JcaJceUtils$2.classPK     A -h  .
  -              org/bouncycastle/est/jcajce/JcaJceUtils.classPK     A Pq
    ?              org/bouncycastle/est/jcajce/JsseDefaultHostnameAuthorizer.classPK     A W^e    9              org/bouncycastle/est/jcajce/JsseESTServiceBuilder$1.classPK     A yeU    7              org/bouncycastle/est/jcajce/JsseESTServiceBuilder.classPK     A c&      8             	 org/bouncycastle/est/jcajce/JsseHostnameAuthorizer.classPK     A Ny(    8             	 org/bouncycastle/est/jcajce/LimitedSSLSocketSource.classPK     A       9             j	 org/bouncycastle/est/jcajce/SSLSocketFactoryCreator.classPK     A 
`936    B             		 org/bouncycastle/est/jcajce/SSLSocketFactoryCreatorBuilder$1.classPK     A E׉  
	  @             ,
	 org/bouncycastle/est/jcajce/SSLSocketFactoryCreatorBuilder.classPK
 
      A                          #	 org/bouncycastle/its/PK     A UEԊP  
  ,             V	 org/bouncycastle/its/ETSIEncryptedData.classPK     A Qf  w  3              	 org/bouncycastle/its/ETSIEncryptedDataBuilder.classPK     A ǌ      )             s	 org/bouncycastle/its/ETSIKeyWrapper.classPK     A 3  !  *             ]	 org/bouncycastle/its/ETSIRecipientID.classPK     A Bg%    ,             	 org/bouncycastle/its/ETSIRecipientInfo.classPK     A l    3             E$	 org/bouncycastle/its/ETSIRecipientInfoBuilder.classPK     A T3    )             ?'	 org/bouncycastle/its/ETSISignedData.classPK     A mȱn	  W!  0             ;-	 org/bouncycastle/its/ETSISignedDataBuilder.classPK     A   '  ,             7	 org/bouncycastle/its/ITSAlgorithmUtils.classPK     A L$;\    )             E9	 org/bouncycastle/its/ITSCertificate.classPK     A CYXZ    0             =	 org/bouncycastle/its/ITSCertificateBuilder.classPK     A IY_    8             B	 org/bouncycastle/its/ITSExplicitCertificateBuilder.classPK     A ?Ѥ  X  8             K	 org/bouncycastle/its/ITSImplicitCertificateBuilder.classPK     A Ѻq  P  ?             R	 org/bouncycastle/its/ITSPublicEncryptionKey$symmAlgorithm.classPK     A @;.  A  1             U	 org/bouncycastle/its/ITSPublicEncryptionKey.classPK     A MH     3             W	 org/bouncycastle/its/ITSPublicVerificationKey.classPK     A ,     4             ~X	 org/bouncycastle/its/ITSValidityPeriod$Builder.classPK     A )    1             Z	 org/bouncycastle/its/ITSValidityPeriod$Unit.classPK     A Is`  	  ,             ]	 org/bouncycastle/its/ITSValidityPeriod.classPK
 
      A                          a	 org/bouncycastle/its/bc/PK     A ~    0             a	 org/bouncycastle/its/bc/BcITSContentSigner.classPK     A F?    <             
i	 org/bouncycastle/its/bc/BcITSContentVerifierProvider$1.classPK     A :p3  	  <             Wk	 org/bouncycastle/its/bc/BcITSContentVerifierProvider$2.classPK     A 1zQ    :             o	 org/bouncycastle/its/bc/BcITSContentVerifierProvider.classPK     A Md    =             w	 org/bouncycastle/its/bc/BcITSExplicitCertificateBuilder.classPK     A +    =             z	 org/bouncycastle/its/bc/BcITSImplicitCertificateBuilder.classPK     A []8    6             {	 org/bouncycastle/its/bc/BcITSPublicEncryptionKey.classPK     A /˔U    8             =	 org/bouncycastle/its/bc/BcITSPublicVerificationKey.classPK
 
      A                          	 org/bouncycastle/its/jcajce/PK     A 㧸   7  +             2	 org/bouncycastle/its/jcajce/ClassUtil.classPK     A 4#  	  (             	 org/bouncycastle/its/jcajce/ECUtil.classPK     A D=It    >             	 org/bouncycastle/its/jcajce/JcaETSIDataDecryptor$Builder.classPK     A ^P    6             q	 org/bouncycastle/its/jcajce/JcaETSIDataDecryptor.classPK     A ~      7             	 org/bouncycastle/its/jcajce/JcaITSContentSigner$1.classPK     A ԓ
    =             	 org/bouncycastle/its/jcajce/JcaITSContentSigner$Builder.classPK     A a)J    5             	 org/bouncycastle/its/jcajce/JcaITSContentSigner.classPK     A  "S    A             }	 org/bouncycastle/its/jcajce/JcaITSContentVerifierProvider$1.classPK     A K  1  G             	 org/bouncycastle/its/jcajce/JcaITSContentVerifierProvider$Builder.classPK     A ?V:	    ?             	 org/bouncycastle/its/jcajce/JcaITSContentVerifierProvider.classPK     A u    B             	 org/bouncycastle/its/jcajce/JcaITSExplicitCertificateBuilder.classPK     A >  u  I             	 org/bouncycastle/its/jcajce/JcaITSImplicitCertificateBuilderBuilder.classPK     A ϕ  x  E             	 org/bouncycastle/its/jcajce/JcaITSPublicVerificationKey$Builder.classPK     A $  i  =             	 org/bouncycastle/its/jcajce/JcaITSPublicVerificationKey.classPK     A [k/$      8             /	 org/bouncycastle/its/jcajce/JceETSIDataEncryptor$1.classPK     A '0    >             /	 org/bouncycastle/its/jcajce/JceETSIDataEncryptor$Builder.classPK     A aZN    6             	 org/bouncycastle/its/jcajce/JceETSIDataEncryptor.classPK     A X      5             }	 org/bouncycastle/its/jcajce/JceETSIKeyWrapper$1.classPK     A ]7m"  -  ;             y	 org/bouncycastle/its/jcajce/JceETSIKeyWrapper$Builder.classPK     A 툉В    3             	 org/bouncycastle/its/jcajce/JceETSIKeyWrapper.classPK     A '  h  C             	 org/bouncycastle/its/jcajce/JceITSPublicEncryptionKey$Builder.classPK     A <l$    ;             ^	 org/bouncycastle/its/jcajce/JceITSPublicEncryptionKey.classPK
 
      A                          	 org/bouncycastle/its/operator/PK     A 7sU  
  0             	 org/bouncycastle/its/operator/ECDSAEncoder.classPK     A       5             !	 org/bouncycastle/its/operator/ETSIDataDecryptor.classPK     A /'      5             	 org/bouncycastle/its/operator/ETSIDataEncryptor.classPK     A $    4             	 org/bouncycastle/its/operator/ITSContentSigner.classPK     A    q  >             	 org/bouncycastle/its/operator/ITSContentVerifierProvider.classPK
 
      A                          	 org/bouncycastle/mime/PK     A G'I0  *  +             	 org/bouncycastle/mime/BasicMimeParser.classPK     A Kxt  \  6             	 org/bouncycastle/mime/BoundaryLimitedInputStream.classPK     A .t  9  1             	 org/bouncycastle/mime/CanonicalOutputStream.classPK     A =P    /             	 org/bouncycastle/mime/ConstantMimeContext.classPK     A  ,    &             	 org/bouncycastle/mime/Headers$KV.classPK     A vk;
    #             	 org/bouncycastle/mime/Headers.classPK     A      &             E
 org/bouncycastle/mime/LineReader.classPK     A g*ræ      '             
 org/bouncycastle/mime/MimeContext.classPK     A    v  +             
 org/bouncycastle/mime/MimeIOException.classPK     A cN      0             
 org/bouncycastle/mime/MimeMultipartContext.classPK     A       &             
 org/bouncycastle/mime/MimeParser.classPK     A 0|q      -             
 org/bouncycastle/mime/MimeParserContext.classPK     A @     .             	
 org/bouncycastle/mime/MimeParserListener.classPK     A ۷   L  .             

 org/bouncycastle/mime/MimeParserProvider.classPK     A y  %  &             
 org/bouncycastle/mime/MimeWriter.classPK
 
      A                          
 org/bouncycastle/mime/encoding/PK     A l    6             ,
 org/bouncycastle/mime/encoding/Base64InputStream.classPK     A v<    7             
 org/bouncycastle/mime/encoding/Base64OutputStream.classPK     A 2'/    ?             
 org/bouncycastle/mime/encoding/QuotedPrintableInputStream.classPK
 
      A                          
 org/bouncycastle/mime/smime/PK     A &L      8             
 org/bouncycastle/mime/smime/SMIMEEnvelopedWriter$1.classPK     A у    >             
 org/bouncycastle/mime/smime/SMIMEEnvelopedWriter$Builder.classPK     A Nݨ    J             
 org/bouncycastle/mime/smime/SMIMEEnvelopedWriter$ContentOutputStream.classPK     A O6x  
  6             !
 org/bouncycastle/mime/smime/SMIMEEnvelopedWriter.classPK     A 17f      5             g&
 org/bouncycastle/mime/smime/SMIMESignedWriter$1.classPK     A s   O  ;             a'
 org/bouncycastle/mime/smime/SMIMESignedWriter$Builder.classPK     A k)    G             0
 org/bouncycastle/mime/smime/SMIMESignedWriter$ContentOutputStream.classPK     A K    3             &4
 org/bouncycastle/mime/smime/SMIMESignedWriter.classPK     A xЖ    9             :
 org/bouncycastle/mime/smime/SMimeMultipartContext$1.classPK     A ?څ     7             =
 org/bouncycastle/mime/smime/SMimeMultipartContext.classPK     A IE    4             B
 org/bouncycastle/mime/smime/SMimeParserContext.classPK     A g    5             D
 org/bouncycastle/mime/smime/SMimeParserListener.classPK     A     5             K
 org/bouncycastle/mime/smime/SMimeParserProvider.classPK     A Q    .             fM
 org/bouncycastle/mime/smime/SMimeUtils$1.classPK     A kt  
  ,             O
 org/bouncycastle/mime/smime/SMimeUtils.classPK
 
      A                          V
 org/bouncycastle/mozilla/PK     A     :             V
 org/bouncycastle/mozilla/SignedPublicKeyAndChallenge.classPK
 
      A                           ?]
 org/bouncycastle/mozilla/jcajce/PK     A ~8T  	  D             }]
 org/bouncycastle/mozilla/jcajce/JcaSignedPublicKeyAndChallenge.classPK
 
      A                          a
 org/bouncycastle/openssl/PK     A S
>  
  4             a
 org/bouncycastle/openssl/CertificateTrustBlock.classPK     A f_     2             ig
 org/bouncycastle/openssl/EncryptionException.classPK     A a	  $  /             h
 org/bouncycastle/openssl/MiscPEMGenerator.classPK     A O      +             r
 org/bouncycastle/openssl/PEMDecryptor.classPK     A fk:      3             s
 org/bouncycastle/openssl/PEMDecryptorProvider.classPK     A 0X    2             t
 org/bouncycastle/openssl/PEMEncryptedKeyPair.classPK     A j,o      +             w
 org/bouncycastle/openssl/PEMEncryptor.classPK     A 8    +              y
 org/bouncycastle/openssl/PEMException.classPK     A %(  t  )             ez
 org/bouncycastle/openssl/PEMKeyPair.classPK     A R      /             {
 org/bouncycastle/openssl/PEMKeyPairParser.classPK     A %Ð      *             |
 org/bouncycastle/openssl/PEMParser$1.classPK     A    	  9             }
 org/bouncycastle/openssl/PEMParser$DSAKeyPairParser.classPK     A $    <             
 org/bouncycastle/openssl/PEMParser$ECCurveParamsParser.classPK     A sݫ    ;             %
 org/bouncycastle/openssl/PEMParser$ECDSAKeyPairParser.classPK     A S^M    B             5
 org/bouncycastle/openssl/PEMParser$EncryptedPrivateKeyParser.classPK     A Rzl  G  6             
 org/bouncycastle/openssl/PEMParser$KeyPairParser.classPK     A Z2    I             [
 org/bouncycastle/openssl/PEMParser$PKCS10CertificationRequestParser.classPK     A a2    4             
 org/bouncycastle/openssl/PEMParser$PKCS7Parser.classPK     A Xs    9             
 org/bouncycastle/openssl/PEMParser$PrivateKeyParser.classPK     A '
Po    8             
 org/bouncycastle/openssl/PEMParser$PublicKeyParser.classPK     A   	  9             
 org/bouncycastle/openssl/PEMParser$RSAKeyPairParser.classPK     A :  H  ;             ;
 org/bouncycastle/openssl/PEMParser$RSAPublicKeyParser.classPK     A 󹆡    G             ~
 org/bouncycastle/openssl/PEMParser$X509AttributeCertificateParser.classPK     A b$  I  6             |
 org/bouncycastle/openssl/PEMParser$X509CRLParser.classPK     A )  a  >             
 org/bouncycastle/openssl/PEMParser$X509CertificateParser.classPK     A (U.  x  E             
 org/bouncycastle/openssl/PEMParser$X509TrustedCertificateParser.classPK     A UZH  @  (             :
 org/bouncycastle/openssl/PEMParser.classPK     A NQ@    (             '
 org/bouncycastle/openssl/PEMWriter.classPK     A     -             =
 org/bouncycastle/openssl/PKCS8Generator.classPK     A |      0             ]
 org/bouncycastle/openssl/PasswordException.classPK     A 4}      -             T
 org/bouncycastle/openssl/PasswordFinder.classPK     A lg    :             ,
 org/bouncycastle/openssl/X509TrustedCertificateBlock.classPK
 
      A                          
 org/bouncycastle/openssl/bc/PK     A A3?    :             U
 org/bouncycastle/openssl/bc/BcPEMDecryptorProvider$1.classPK     A MuI    8             
 org/bouncycastle/openssl/bc/BcPEMDecryptorProvider.classPK     A   u  .             
 org/bouncycastle/openssl/bc/PEMUtilities.classPK
 
      A                           
 org/bouncycastle/openssl/jcajce/PK     A *    9             
 org/bouncycastle/openssl/jcajce/JcaMiscPEMGenerator.classPK     A _B  %  8             
 org/bouncycastle/openssl/jcajce/JcaPEMKeyConverter.classPK     A P    2             <
 org/bouncycastle/openssl/jcajce/JcaPEMWriter.classPK     A > S  {  7             R
 org/bouncycastle/openssl/jcajce/JcaPKCS8Generator.classPK     A ~B|  
  <             

 org/bouncycastle/openssl/jcajce/JcaPKIXIdentityBuilder.classPK     A ]    Q             
 org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder$1$1.classPK     A -*    Q             F
 org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder$1$2.classPK     A -t    O             
 org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder$1.classPK     A ♜  E  M             
 org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder.classPK     A ގ?~     G             
 org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8EncryptorBuilder$1.classPK     A _I
    E             
 org/bouncycastle/openssl/jcajce/JceOpenSSLPKCS8EncryptorBuilder.classPK     A Lޗ    H              org/bouncycastle/openssl/jcajce/JcePEMDecryptorProviderBuilder$1$1.classPK     A fҲ    F              org/bouncycastle/openssl/jcajce/JcePEMDecryptorProviderBuilder$1.classPK     A ?F    D              org/bouncycastle/openssl/jcajce/JcePEMDecryptorProviderBuilder.classPK     A =dS  &  >             
 org/bouncycastle/openssl/jcajce/JcePEMEncryptorBuilder$1.classPK     A V    <              org/bouncycastle/openssl/jcajce/JcePEMEncryptorBuilder.classPK     A ^I  "  2              org/bouncycastle/openssl/jcajce/PEMUtilities.classPK
 
      A                           org/bouncycastle/operator/PK     A 8      ,              org/bouncycastle/operator/AADProcessor.classPK     A    [  3              org/bouncycastle/operator/AlgorithmNameFinder.classPK     A ۽$    6               org/bouncycastle/operator/AsymmetricKeyUnwrapper.classPK     A :Q    4             S" org/bouncycastle/operator/AsymmetricKeyWrapper.classPK     A O  @  6             # org/bouncycastle/operator/BufferingContentSigner.classPK     A W     -             & org/bouncycastle/operator/ContentSigner.classPK     A ;~s     /             >' org/bouncycastle/operator/ContentVerifier.classPK     A 52Q     7             Y( org/bouncycastle/operator/ContentVerifierProvider.classPK     A x  3  :             ) org/bouncycastle/operator/DefaultAlgorithmNameFinder.classPK     A (  2  F             < org/bouncycastle/operator/DefaultDigestAlgorithmIdentifierFinder.classPK     A 3  )  E             L org/bouncycastle/operator/DefaultKemEncapsulationLengthProvider.classPK     A     C             O org/bouncycastle/operator/DefaultMacAlgorithmIdentifierFinder.classPK     A ("슸    <             US org/bouncycastle/operator/DefaultSecretKeySizeProvider.classPK     A   2^  I             wX org/bouncycastle/operator/DefaultSignatureAlgorithmIdentifierFinder.classPK     A ɲ
  K%  :             w org/bouncycastle/operator/DefaultSignatureNameFinder.classPK     A jQR     ?             E org/bouncycastle/operator/DigestAlgorithmIdentifierFinder.classPK     A =fgx    0             i org/bouncycastle/operator/DigestCalculator.classPK     A KƸ   %  8             ? org/bouncycastle/operator/DigestCalculatorProvider.classPK     A FQz      5             ] org/bouncycastle/operator/ExtendedContentSigner.classPK     A sM    *             c org/bouncycastle/operator/GenericKey.classPK     A ߊ      2              org/bouncycastle/operator/InputAEADDecryptor.classPK     A 1      .              org/bouncycastle/operator/InputDecryptor.classPK     A EZ   !  6              org/bouncycastle/operator/InputDecryptorProvider.classPK     A 9p      -             
 org/bouncycastle/operator/InputExpander.classPK     A }0      5              org/bouncycastle/operator/InputExpanderProvider.classPK     A M@      >              org/bouncycastle/operator/KemEncapsulationLengthProvider.classPK     A    t  ,              org/bouncycastle/operator/KeyUnwrapper.classPK     A p   @  *             H org/bouncycastle/operator/KeyWrapper.classPK     A q      <             s org/bouncycastle/operator/MacAlgorithmIdentifierFinder.classPK     A (8   :  -             q org/bouncycastle/operator/MacCalculator.classPK     A 0\@      5              org/bouncycastle/operator/MacCalculatorProvider.classPK     A N$C    0              org/bouncycastle/operator/MacCaptureStream.classPK     A v_    :             ; org/bouncycastle/operator/NoSignatureContentSigner$1.classPK     A 3\  Y  8              org/bouncycastle/operator/NoSignatureContentSigner.classPK     A ,=_T   ,  9              org/bouncycastle/operator/OperatorCreationException.classPK     A G   |  1             - org/bouncycastle/operator/OperatorException.classPK     A d   b  7             } org/bouncycastle/operator/OperatorStreamException.classPK     A U?~      3             ѡ org/bouncycastle/operator/OutputAEADEncryptor.classPK     A e      0              org/bouncycastle/operator/OutputCompressor.classPK     A de@   :  /              org/bouncycastle/operator/OutputEncryptor.classPK     A O   $  8              org/bouncycastle/operator/PBEMacCalculatorProvider.classPK     A bu   {   2              org/bouncycastle/operator/RawContentVerifier.classPK     A _2     8              org/bouncycastle/operator/RuntimeOperatorException.classPK     A i&      5             C org/bouncycastle/operator/SecretKeySizeProvider.classPK     A ?՘      B             J org/bouncycastle/operator/SignatureAlgorithmIdentifierFinder.classPK     A     5             R org/bouncycastle/operator/SymmetricKeyUnwrapper.classPK     A ||i    3              org/bouncycastle/operator/SymmetricKeyWrapper.classPK
 
      A                           org/bouncycastle/operator/bc/PK     A {M    *             V org/bouncycastle/operator/bc/AESUtil.classPK     A s/  y  =              org/bouncycastle/operator/bc/BcAESSymmetricKeyUnwrapper.classPK     A +  u  ;             P org/bouncycastle/operator/bc/BcAESSymmetricKeyWrapper.classPK     A j    ;              org/bouncycastle/operator/bc/BcAsymmetricKeyUnwrapper.classPK     A   4  9              org/bouncycastle/operator/bc/BcAsymmetricKeyWrapper.classPK     A     ;             1 org/bouncycastle/operator/bc/BcContentSignerBuilder$1.classPK     A giG    9              org/bouncycastle/operator/bc/BcContentSignerBuilder.classPK     A kr  5	  E              org/bouncycastle/operator/bc/BcContentVerifierProviderBuilder$1.classPK     A W}    E              org/bouncycastle/operator/bc/BcContentVerifierProviderBuilder$2.classPK     A ̰  /  O              org/bouncycastle/operator/bc/BcContentVerifierProviderBuilder$SigVerifier.classPK     A     C             ; org/bouncycastle/operator/bc/BcContentVerifierProviderBuilder.classPK     A 5(    <              org/bouncycastle/operator/bc/BcDSAContentSignerBuilder.classPK     A  S    F              org/bouncycastle/operator/bc/BcDSAContentVerifierProviderBuilder.classPK     A fY  4  <             _ org/bouncycastle/operator/bc/BcDefaultDigestProvider$1.classPK     A [bh  E  =             " org/bouncycastle/operator/bc/BcDefaultDigestProvider$10.classPK     A ,f  E  =              org/bouncycastle/operator/bc/BcDefaultDigestProvider$11.classPK     A z϶
    =              org/bouncycastle/operator/bc/BcDefaultDigestProvider$12.classPK     A %  ;    =             > org/bouncycastle/operator/bc/BcDefaultDigestProvider$13.classPK     A }Y  4  =              org/bouncycastle/operator/bc/BcDefaultDigestProvider$14.classPK     A _qqY  4  =             x org/bouncycastle/operator/bc/BcDefaultDigestProvider$15.classPK     A E%Y  4  =             < org/bouncycastle/operator/bc/BcDefaultDigestProvider$16.classPK     A 7_  9  =               org/bouncycastle/operator/bc/BcDefaultDigestProvider$17.classPK     A ki  B  =              org/bouncycastle/operator/bc/BcDefaultDigestProvider$18.classPK     A *[ʐg  B  =              org/bouncycastle/operator/bc/BcDefaultDigestProvider$19.classPK     A O
JZ  6  <             p org/bouncycastle/operator/bc/BcDefaultDigestProvider$2.classPK     A  TE_  :  =             4 org/bouncycastle/operator/bc/BcDefaultDigestProvider$20.classPK     A ?_  :  =              org/bouncycastle/operator/bc/BcDefaultDigestProvider$21.classPK     A gE_  :  =              org/bouncycastle/operator/bc/BcDefaultDigestProvider$22.classPK     A  <=nZ  4  =              org/bouncycastle/operator/bc/BcDefaultDigestProvider$23.classPK     A Vpf  F  =             W org/bouncycastle/operator/bc/BcDefaultDigestProvider$24.classPK     A sVZ  6  <             ( org/bouncycastle/operator/bc/BcDefaultDigestProvider$3.classPK     A TEZ  6  <              org/bouncycastle/operator/bc/BcDefaultDigestProvider$4.classPK     A yZ  6  <              org/bouncycastle/operator/bc/BcDefaultDigestProvider$5.classPK     A Af  C  <             t org/bouncycastle/operator/bc/BcDefaultDigestProvider$6.classPK     A qd  C  <             D org/bouncycastle/operator/bc/BcDefaultDigestProvider$7.classPK     A Wf  C  <              org/bouncycastle/operator/bc/BcDefaultDigestProvider$8.classPK     A V-:e  C  <              org/bouncycastle/operator/bc/BcDefaultDigestProvider$9.classPK     A .&y    F              org/bouncycastle/operator/bc/BcDefaultDigestProvider$AdjustedXof.classPK     A ˂U	    :              org/bouncycastle/operator/bc/BcDefaultDigestProvider.classPK     A Y0C  E  ?              org/bouncycastle/operator/bc/BcDigestCalculatorProvider$1.classPK     A S7O  >  P             
 org/bouncycastle/operator/bc/BcDigestCalculatorProvider$DigestOutputStream.classPK     A ;    =              org/bouncycastle/operator/bc/BcDigestCalculatorProvider.classPK     A 5k     3             / org/bouncycastle/operator/bc/BcDigestProvider.classPK     A L    ;             V org/bouncycastle/operator/bc/BcECContentSignerBuilder.classPK     A \W    E             T org/bouncycastle/operator/bc/BcECContentVerifierProviderBuilder.classPK     A 6  .  H              org/bouncycastle/operator/bc/BcEdDSAContentVerifierProviderBuilder.classPK     A <  :  =              org/bouncycastle/operator/bc/BcEdECContentSignerBuilder.classPK     A 8?    I              org/bouncycastle/operator/bc/BcHssLmsContentSignerBuilder$HssSigner.classPK     A Է  8  ?             z org/bouncycastle/operator/bc/BcHssLmsContentSignerBuilder.classPK     A -}    I               org/bouncycastle/operator/bc/BcHssLmsContentVerifierProviderBuilder.classPK     A ,tT    >             " org/bouncycastle/operator/bc/BcRSAAsymmetricKeyUnwrapper.classPK     A üF    <             $ org/bouncycastle/operator/bc/BcRSAAsymmetricKeyWrapper.classPK     A Gy`w    <             & org/bouncycastle/operator/bc/BcRSAContentSignerBuilder.classPK     A @A    F             ( org/bouncycastle/operator/bc/BcRSAContentVerifierProviderBuilder.classPK     A Fα    7             p+ org/bouncycastle/operator/bc/BcSignerOutputStream.classPK     A   F  :             - org/bouncycastle/operator/bc/BcSymmetricKeyUnwrapper.classPK     A s_ c  <  8             0 org/bouncycastle/operator/bc/BcSymmetricKeyWrapper.classPK     A ޯc 	    /             3 org/bouncycastle/operator/bc/CamelliaUtil.classPK     A :t   C  0             5 org/bouncycastle/operator/bc/OperatorUtils.classPK     A Iz|1    +             7 org/bouncycastle/operator/bc/SEEDUtil.classPK
 
      A             !             Y9 org/bouncycastle/operator/jcajce/PK     A }`    F             9 org/bouncycastle/operator/jcajce/JcaAlgorithmParametersConverter.classPK     A      @             l? org/bouncycastle/operator/jcajce/JcaContentSignerBuilder$1.classPK     A g`    @             B org/bouncycastle/operator/jcajce/JcaContentSignerBuilder$2.classPK     A ͝     @             E org/bouncycastle/operator/jcajce/JcaContentSignerBuilder$3.classPK     A @a  ''  >             (J org/bouncycastle/operator/jcajce/JcaContentSignerBuilder.classPK     A 4  
  J             X org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder$1.classPK     A 
  '  J             ^ org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder$2.classPK     A ,Mz  ~	  Z             b org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder$CompositeVerifier.classPK     A &  [  W             h org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder$RawSigVerifier.classPK     A ]w|*  A  T             k org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder$SigVerifier.classPK     A ©2    H             n org/bouncycastle/operator/jcajce/JcaContentVerifierProviderBuilder.classPK     A 1(    M             v org/bouncycastle/operator/jcajce/JcaDigestCalculatorProviderBuilder$1$1.classPK     A eYG    K             Ey org/bouncycastle/operator/jcajce/JcaDigestCalculatorProviderBuilder$1.classPK     A W&:|    \             | org/bouncycastle/operator/jcajce/JcaDigestCalculatorProviderBuilder$DigestOutputStream.classPK     A ̾E    I             ~ org/bouncycastle/operator/jcajce/JcaDigestCalculatorProviderBuilder.classPK     A '5;    @              org/bouncycastle/operator/jcajce/JceAsymmetricKeyUnwrapper.classPK     A =>  +  >              org/bouncycastle/operator/jcajce/JceAsymmetricKeyWrapper.classPK     A NtH    4             ' org/bouncycastle/operator/jcajce/JceGenericKey.classPK     A     K             њ org/bouncycastle/operator/jcajce/JceInputDecryptorProviderBuilder$1$1.classPK     A WZ  
  I             C org/bouncycastle/operator/jcajce/JceInputDecryptorProviderBuilder$1.classPK     A     G              org/bouncycastle/operator/jcajce/JceInputDecryptorProviderBuilder.classPK     A ,k  3  9             5 org/bouncycastle/operator/jcajce/JceKTSKeyUnwrapper.classPK     A շ    7              org/bouncycastle/operator/jcajce/JceKTSKeyWrapper.classPK     A s؀  )	  ?             : org/bouncycastle/operator/jcajce/JceSymmetricKeyUnwrapper.classPK     A D    =             ' org/bouncycastle/operator/jcajce/JceSymmetricKeyWrapper.classPK     A Ū  4  E             t org/bouncycastle/operator/jcajce/OperatorHelper$OAEPParamsValue.classPK     A L) %    L              org/bouncycastle/operator/jcajce/OperatorHelper$OpCertificateException.classPK     A ԛ  3  5             0 org/bouncycastle/operator/jcajce/OperatorHelper.classPK     A     4             T org/bouncycastle/operator/jcajce/OperatorUtils.classPK
 
      A                          b org/bouncycastle/pkcs/PK     A a    3              org/bouncycastle/pkcs/DeltaCertAttributeUtils.classPK     A }&  
  A              org/bouncycastle/pkcs/DeltaCertificateRequestAttributeValue.classPK     A $v    H              org/bouncycastle/pkcs/DeltaCertificateRequestAttributeValueBuilder.classPK     A t܄p  	  ,             I org/bouncycastle/pkcs/MacDataGenerator.classPK     A ;"q
  "  6              org/bouncycastle/pkcs/PKCS10CertificationRequest.classPK     A |  9  =              org/bouncycastle/pkcs/PKCS10CertificationRequestBuilder.classPK     A Aߵ   P  6             T
 org/bouncycastle/pkcs/PKCS12MacCalculatorBuilder.classPK     A qT      >             
 org/bouncycastle/pkcs/PKCS12MacCalculatorBuilderProvider.classPK     A 2N~    (             
 org/bouncycastle/pkcs/PKCS12PfxPdu.classPK     A #Վ    /             x
 org/bouncycastle/pkcs/PKCS12PfxPduBuilder.classPK     A Ή	    )             c
 org/bouncycastle/pkcs/PKCS12SafeBag.classPK     A 3    0             I
 org/bouncycastle/pkcs/PKCS12SafeBagBuilder.classPK     A t33  +
  0             
 org/bouncycastle/pkcs/PKCS12SafeBagFactory.classPK     A /n  
  8             ;
 org/bouncycastle/pkcs/PKCS8EncryptedPrivateKeyInfo.classPK     A     ?             #
 org/bouncycastle/pkcs/PKCS8EncryptedPrivateKeyInfoBuilder.classPK     A LJ?   t  )             &
 org/bouncycastle/pkcs/PKCSException.classPK     A +   v  +             (
 org/bouncycastle/pkcs/PKCSIOException.classPK     A 2Y2    %             O)
 org/bouncycastle/pkcs/PKCSUtils.classPK
 
      A                          ,
 org/bouncycastle/pkcs/bc/PK     A V^    ;             -
 org/bouncycastle/pkcs/bc/BcPKCS10CertificationRequest.classPK     A à=    B             /
 org/bouncycastle/pkcs/bc/BcPKCS10CertificationRequestBuilder.classPK     A ȅ\O    ;             1
 org/bouncycastle/pkcs/bc/BcPKCS12MacCalculatorBuilder.classPK     A ~J    E             75
 org/bouncycastle/pkcs/bc/BcPKCS12MacCalculatorBuilderProvider$1.classPK     A :B[r    C             8
 org/bouncycastle/pkcs/bc/BcPKCS12MacCalculatorBuilderProvider.classPK     A `8    K             :
 org/bouncycastle/pkcs/bc/BcPKCS12PBEInputDecryptorProviderBuilder$1$1.classPK     A ?#    I             =
 org/bouncycastle/pkcs/bc/BcPKCS12PBEInputDecryptorProviderBuilder$1.classPK     A XX  P  G             }A
 org/bouncycastle/pkcs/bc/BcPKCS12PBEInputDecryptorProviderBuilder.classPK     A r  x  B             xC
 org/bouncycastle/pkcs/bc/BcPKCS12PBEOutputEncryptorBuilder$1.classPK     A ]  	  @             F
 org/bouncycastle/pkcs/bc/BcPKCS12PBEOutputEncryptorBuilder.classPK     A \    >             J
 org/bouncycastle/pkcs/bc/BcPKCS12PBMac1CalculatorBuilder.classPK     A Q  N	  H             N
 org/bouncycastle/pkcs/bc/BcPKCS12PBMac1CalculatorBuilderProvider$1.classPK     A h3&  m  F             S
 org/bouncycastle/pkcs/bc/BcPKCS12PBMac1CalculatorBuilderProvider.classPK     A .<*  ]  /             T
 org/bouncycastle/pkcs/bc/PKCS12PBEUtils$1.classPK     A .    /             6X
 org/bouncycastle/pkcs/bc/PKCS12PBEUtils$2.classPK     A 	    -             [
 org/bouncycastle/pkcs/bc/PKCS12PBEUtils.classPK
 
      A                          6e
 org/bouncycastle/pkcs/jcajce/PK     A s/WH@    @             qe
 org/bouncycastle/pkcs/jcajce/JcaPKCS10CertificationRequest.classPK     A v(    G             k
 org/bouncycastle/pkcs/jcajce/JcaPKCS10CertificationRequestBuilder.classPK     A ^m  O  :             dm
 org/bouncycastle/pkcs/jcajce/JcaPKCS12SafeBagBuilder.classPK     A L<G    I             {p
 org/bouncycastle/pkcs/jcajce/JcaPKCS8EncryptedPrivateKeyInfoBuilder.classPK     A a  U	  ?             r
 org/bouncycastle/pkcs/jcajce/JcePBMac1CalculatorBuilder$1.classPK     A \\    =             v
 org/bouncycastle/pkcs/jcajce/JcePBMac1CalculatorBuilder.classPK     A '    G             
 org/bouncycastle/pkcs/jcajce/JcePBMac1CalculatorProviderBuilder$1.classPK     A C<    E             "
 org/bouncycastle/pkcs/jcajce/JcePBMac1CalculatorProviderBuilder.classPK     A 65    B             p
 org/bouncycastle/pkcs/jcajce/JcePKCS12MacCalculatorBuilder$1.classPK     A W^)"    @             
 org/bouncycastle/pkcs/jcajce/JcePKCS12MacCalculatorBuilder.classPK     A W  e  L             
 org/bouncycastle/pkcs/jcajce/JcePKCS12MacCalculatorBuilderProvider$1$1.classPK     A Q&  '  J             <
 org/bouncycastle/pkcs/jcajce/JcePKCS12MacCalculatorBuilderProvider$1.classPK     A d\  q  H             
 org/bouncycastle/pkcs/jcajce/JcePKCS12MacCalculatorBuilderProvider.classPK     A h    N             
 org/bouncycastle/pkcs/jcajce/JcePKCSPBEInputDecryptorProviderBuilder$1$1.classPK     A ߧj
  4  L             y
 org/bouncycastle/pkcs/jcajce/JcePKCSPBEInputDecryptorProviderBuilder$1.classPK     A 8  L  J             ]
 org/bouncycastle/pkcs/jcajce/JcePKCSPBEInputDecryptorProviderBuilder.classPK     A ̨*    E             
 org/bouncycastle/pkcs/jcajce/JcePKCSPBEOutputEncryptorBuilder$1.classPK     A ioh  Q!  C             
 org/bouncycastle/pkcs/jcajce/JcePKCSPBEOutputEncryptorBuilder.classPK     A L  t  +             
 org/bouncycastle/pkcs/jcajce/JceUtils.classPK
 
      A                          
 org/bouncycastle/pkix/PK     A {uw  I  ;             
 org/bouncycastle/pkix/ASN1PKIXNameConstraintValidator.classPK     A 7Kq  t  9             +
 org/bouncycastle/pkix/CertPathReviewerMessages.propertiesPK     A WL    <             (
 org/bouncycastle/pkix/CertPathReviewerMessages_de.propertiesPK     A ^K0    (             
 org/bouncycastle/pkix/PKIXIdentity.classPK     A q  V  7             # org/bouncycastle/pkix/PKIXNameConstraintValidator.classPK     A 	o    @              org/bouncycastle/pkix/PKIXNameConstraintValidatorException.classPK     A KmF      9              org/bouncycastle/pkix/SubjectPublicKeyInfoChecker$1.classPK     A ?    =              org/bouncycastle/pkix/SubjectPublicKeyInfoChecker$Cache.classPK     A     D              org/bouncycastle/pkix/SubjectPublicKeyInfoChecker$Properties$1.classPK     A "MG    D              org/bouncycastle/pkix/SubjectPublicKeyInfoChecker$Properties$2.classPK     A YV    B              org/bouncycastle/pkix/SubjectPublicKeyInfoChecker$Properties.classPK     A <t	    7             " org/bouncycastle/pkix/SubjectPublicKeyInfoChecker.classPK
 
      A                          - org/bouncycastle/pkix/jcajce/PK     A ܿ#H    5             C- org/bouncycastle/pkix/jcajce/AnnotatedException.classPK     A    ,  7             . org/bouncycastle/pkix/jcajce/CRLNotFoundException.classPK     A Vwc  (  <             / org/bouncycastle/pkix/jcajce/CertPathReviewerException.classPK     A 0  7;  =             2 org/bouncycastle/pkix/jcajce/CertPathValidatorUtilities.classPK     A mqb  Q  -             K org/bouncycastle/pkix/jcajce/CertStatus.classPK     A I    9             lM org/bouncycastle/pkix/jcajce/CrlCache$LocalCRLStore.classPK     A *V    +             P org/bouncycastle/pkix/jcajce/CrlCache.classPK     A 
    2             .X org/bouncycastle/pkix/jcajce/JcaPKIXIdentity.classPK     A ꇙ
  2  .             /\ org/bouncycastle/pkix/jcajce/PKIXCRLUtil.classPK     A "._45    7             a org/bouncycastle/pkix/jcajce/PKIXCertPathReviewer.classPK     A [  
  1             1 org/bouncycastle/pkix/jcajce/PKIXPolicyNode.classPK     A Ó  D  ;              org/bouncycastle/pkix/jcajce/RFC3280CertPathUtilities.classPK     A .{  1  .              org/bouncycastle/pkix/jcajce/ReasonsMask.classPK     A ͦ  1  6              org/bouncycastle/pkix/jcajce/RevocationUtilities.classPK     A /8  	
  7              org/bouncycastle/pkix/jcajce/X509CRLStoreSelector.classPK     A %\U'  4  8             j org/bouncycastle/pkix/jcajce/X509CertStoreSelector.classPK     A 4\     :              org/bouncycastle/pkix/jcajce/X509RevocationChecker$1.classPK     A Lj    :             O org/bouncycastle/pkix/jcajce/X509RevocationChecker$2.classPK     A ۶uC  S  @             ! org/bouncycastle/pkix/jcajce/X509RevocationChecker$Builder.classPK     A R  H  F              org/bouncycastle/pkix/jcajce/X509RevocationChecker$LocalCRLStore.classPK     A 2Q  C  8              org/bouncycastle/pkix/jcajce/X509RevocationChecker.classPK
 
      A                           org/bouncycastle/pkix/util/PK     A %  C  ,             ; org/bouncycastle/pkix/util/ErrorBundle.classPK     A c    -              org/bouncycastle/pkix/util/LocaleString.classPK     A :T%z  *  3             x org/bouncycastle/pkix/util/LocalizedException.classPK     A m3:    C             S org/bouncycastle/pkix/util/LocalizedMessage$FilteredArguments.classPK     A J		    1              org/bouncycastle/pkix/util/LocalizedMessage.classPK     A T/    .             f org/bouncycastle/pkix/util/MessageBundle.classPK     A p    6              org/bouncycastle/pkix/util/MissingEntryException.classPK     A (t    +             6 org/bouncycastle/pkix/util/TextBundle.classPK     A   *  9              org/bouncycastle/pkix/util/X509CertificateFormatter.classPK
 
      A             "             1 org/bouncycastle/pkix/util/filter/PK     A D݃      .             A1 org/bouncycastle/pkix/util/filter/Filter.classPK     A D_&H  :  2              2 org/bouncycastle/pkix/util/filter/HTMLFilter.classPK     A C5v'    1             4 org/bouncycastle/pkix/util/filter/SQLFilter.classPK     A T   |  4             N7 org/bouncycastle/pkix/util/filter/TrustedInput.classPK     A O     6             8 org/bouncycastle/pkix/util/filter/UntrustedInput.classPK     A l      9             : org/bouncycastle/pkix/util/filter/UntrustedUrlInput.classPK
 
      A                          ; org/bouncycastle/tsp/PK     A ~h/?X    *             F; org/bouncycastle/tsp/GenTimeAccuracy.classPK     A C    (             = org/bouncycastle/tsp/TSPAlgorithms.classPK     A c    '             
B org/bouncycastle/tsp/TSPException.classPK     A I    )             kC org/bouncycastle/tsp/TSPIOException.classPK     A vFT    "             D org/bouncycastle/tsp/TSPUtil.classPK     A 
hG   d  1             {Q org/bouncycastle/tsp/TSPValidationException.classPK     A z  +  +             R org/bouncycastle/tsp/TimeStampRequest.classPK     A *S  ,  4             [ org/bouncycastle/tsp/TimeStampRequestGenerator.classPK     A h	    ,             a org/bouncycastle/tsp/TimeStampResponse.classPK     A ->*   i  >             k org/bouncycastle/tsp/TimeStampResponseGenerator$FailInfo.classPK     A 
LXs    5             il org/bouncycastle/tsp/TimeStampResponseGenerator.classPK     A bQ 
  A"  )             ?u org/bouncycastle/tsp/TimeStampToken.classPK     A i  A  4              org/bouncycastle/tsp/TimeStampTokenGenerator$1.classPK     A $  M  4             ޅ org/bouncycastle/tsp/TimeStampTokenGenerator$2.classPK     A M  +  2             + org/bouncycastle/tsp/TimeStampTokenGenerator.classPK     A ,rB  
  -             
 org/bouncycastle/tsp/TimeStampTokenInfo.classPK
 
      A                           org/bouncycastle/tsp/cms/PK     A "z  u  1             ޞ org/bouncycastle/tsp/cms/CMSTimeStampedData.classPK     A e]y  Q  :              org/bouncycastle/tsp/cms/CMSTimeStampedDataGenerator.classPK     A   E  7              org/bouncycastle/tsp/cms/CMSTimeStampedDataParser.classPK     A y  W  6              org/bouncycastle/tsp/cms/CMSTimeStampedGenerator.classPK     A bB     <              org/bouncycastle/tsp/cms/ImprintDigestInvalidException.classPK     A 4~h;9    +              org/bouncycastle/tsp/cms/MetaDataUtil.classPK     A d$YZD	  J  0              org/bouncycastle/tsp/cms/TimeStampDataUtil.classPK
 
      A                          F org/bouncycastle/tsp/ers/PK     A }?;      B             } org/bouncycastle/tsp/ers/ArchiveTimeStampValidationException.classPK     A dg   8  7              org/bouncycastle/tsp/ers/BinaryTreeRootCalculator.classPK     A ~)    2              org/bouncycastle/tsp/ers/ByteArrayComparator.classPK     A ]!D	    2             m org/bouncycastle/tsp/ers/ERSArchiveTimeStamp.classPK     A l      =              org/bouncycastle/tsp/ers/ERSArchiveTimeStampGenerator$1.classPK     A KP    R              org/bouncycastle/tsp/ers/ERSArchiveTimeStampGenerator$IndexedPartialHashtree.classPK     A Pq	  3  ;              org/bouncycastle/tsp/ers/ERSArchiveTimeStampGenerator.classPK     A [J    *             	 org/bouncycastle/tsp/ers/ERSByteData.classPK     A -YS      /              org/bouncycastle/tsp/ers/ERSCachingData$1.classPK     A ~r    8              org/bouncycastle/tsp/ers/ERSCachingData$CacheIndex.classPK     A >P    -              org/bouncycastle/tsp/ers/ERSCachingData.classPK     A       &              org/bouncycastle/tsp/ers/ERSData.classPK     A 40%  /  +              org/bouncycastle/tsp/ers/ERSDataGroup.classPK     A 1L@  
  4             ! org/bouncycastle/tsp/ers/ERSDirectoryDataGroup.classPK     A N7Y  Q(  0             w org/bouncycastle/tsp/ers/ERSEvidenceRecord.classPK     A ,k1    9             .  org/bouncycastle/tsp/ers/ERSEvidenceRecordGenerator.classPK     A |5c    8             4 org/bouncycastle/tsp/ers/ERSEvidenceRecordSelector.classPK     A fP  F  >              org/bouncycastle/tsp/ers/ERSEvidenceRecordStore$HashNode.classPK     A 1  [  5              org/bouncycastle/tsp/ers/ERSEvidenceRecordStore.classPK     A Ө     +              org/bouncycastle/tsp/ers/ERSException.classPK     A EI-1    *             F org/bouncycastle/tsp/ers/ERSFileData.classPK     A     1              org/bouncycastle/tsp/ers/ERSInputStreamData.classPK     A ݙ     4              org/bouncycastle/tsp/ers/ERSRootNodeCalculator.classPK     A G    &             	 org/bouncycastle/tsp/ers/ERSUtil.classPK     A ojD   u  &              org/bouncycastle/tsp/ers/ExpUtil.classPK     A '      *               org/bouncycastle/tsp/ers/IndexedHash.classPK     A 򼟂      C             ! org/bouncycastle/tsp/ers/PartialHashTreeVerificationException.classPK     A &    -             # org/bouncycastle/tsp/ers/SortedHashList.classPK     A '    4             & org/bouncycastle/tsp/ers/SortedIndexedHashList.classPK
 
      A                          ;) org/bouncycastle/voms/PK     A %	  u  .             o) org/bouncycastle/voms/VOMSAttribute$FQAN.classPK     A r`    )             , org/bouncycastle/voms/VOMSAttribute.classPK     3  PACK200PK  \z[              META-INF/MANIFEST.MF  ǒHxo~T t 'hA>*(r]A_|t٭(Ӻo?AUPҫ߻e<ۗߞ\J13uUSUVÿ۹kpC47K׹w(-0uznB/e0ta_ono_n?.TC򧯗q~Eh8~qޏ+P}e??eeOGO|2Ώ~<}o,̌Iq=C->vvVB]8-$|gw6qK[a?QZaX_[8f]?c
Z7Wקߗy[؇/_O;mG+qv+u`8.ɏ똟X2ν}[ƹy?-na_?yb趞KGZ~*qե{;׽~z_ؤʍtwh?>rw hC8I?iۇquѿ#^?WύIL\?Or;/soԭ};~8}On~F/Yt-2ڟK8o2ۍn?o8W++Hrx?~Wu`zp۞
uE)B6^>{|qw;NGzg9~p&>eZoc}A-*62g޿}AH7s?¡O!pM"/2\P A0!$zX>?܁۹]/㍏Wq^[퓸~$6O#3~?>74xcY+<on|:'|_~};_<ng>G7ob?ǉA?kx1>3eSC8g|0N5}|=}ʕW^yɀ;z×xjspp}EJxg'>yeR>-8Qnmg<C'C7.v鴼3qYٍ_c9_`н}L/S\cꮩǗw]~
,@PÖ*?70kM۞fr*˵Nr FmcA6>+#M46e9-J*;<>k#kްӕD"q]:gG bJato]OQ7FSFU},séc}0ь9DQ /	6~ky&r2>haGKYCL$aw[FG'\KIQ`=@{mXhiO/ ,ao{kK4λ,q%:m`vcjsZ%YS&#
*J=blʥ]8)X/Lhy*jA<NiZX^TgevcHH=v s,y˅ޤ
g
X7hn/[Ѳ~
U-0E&۪j>D-TA8ݿeF؎a[,8NS0zV_^5t:4mC7Kq;!X_`5hcRP	k|_Mʚت4< M<FrB>d^\J˽"lQ}oulO	vZΊMX2spM`U,({*s6xK^܋MT{(Đ:Ksr3e?{i.܁W'Y2ۣ*=Ԧz]t*|ǈ ]Ei'c:]Ѷ9l+Jfa\>79{(nP8]y*+pRb>*&+j("CQ
U樸yVr~=㸯~ *a&,2A3*=cc𧫹84`)3dU;v= &ix3d,)g!yne>9W97aHtt-e 
7L:A$b}dS_Yi}o3
5; yV
WB<\`0ZI{I[P6]z_5DVUaRFJʎMĝE9sdOsp{b]B%w˯Y5p5I|-qջ/#*;{v|ʍD0wAM#o#'Ěx50=e0`7gv1ֿ*^'2qOF8q]=~ 
;n׵DUGΒFe#ϧc`*vs,3/	eP.w%9IjYi/RI'
C%C?mEE@òx׃	QMG=Yd34_G\-?ʬp/D܎#d6";"L\jԨw1E&Fʰ	0/.s X@f4ά
LnU^QhiI>TM+|g理i`*,&S /s^vmrH[$]!Jۿ 	v1oȥ.;GD@JXWAǃ#յ.f܍,MapuTSer"Q .2/lCAdY8#pEH"&|kr2M!/~
~Kњ.l2h/#Bfg!b1Iߵ(jI{edS5/du]-x<)^^srU录OoYH_͞1lN klݯ6@= ?
߷^UT嶖E?l%U,.Ue
3mq5l:TLзBڽo2\َ r!DSҥCmϦn0fÿJt˼;}pvuQClHud"͹@!ן[G^6]HD<]qK. V)ЩCk
Gv]uE1#ٯ*L J5 &i/yG0> !o<qExK(7[@66.٘&FłԠm*)X9^p?M507֔jkLQ!b$Kg((i?M}J]+5p:U3o!x8%}*~Q-_HK{z~2wu$o Svks=lJGD*zk_UyUo .x=O_Qi<V4!
F_xXgpXk7t8a1ܴ+jOk\OGHOtVws(߼ŽYǝ6l(HJC	U7\-t;afdΘT	"'t:<B0אAEY¼S}OEn) G:K5]Ӂ5T4칋=1p9xie^JA`MHXmE𲍡=` ^Z2zBo3+/v. ^Ytw+3[.Wj:j_°JjWݱ^7sݩUܛf{[@$Y3Yf&*\-h>ukqL}OޡO{+$Tp0e!oƹC@?Q>WΠGc~[]x"xLUN
Z~5D$!~~ - sbgD[|!]xHwif	(Xئ
Ms;(PoSe:tM
U^Tv{r,hT9gBC{ڃ\g,#6{J2H/~k$Yw!Wթ\rh'&H=X*
|惘FdfDʽFf
h3qIJMQmPw&rPn\J*V۰ZAUM
Z,}=Mƙ7+Vs!*źUAbh7r+!uI:L":ᐅ(MƨtRY;KW 1^B+=g9JQѯAAVTF\fVZz1@4z6|b ޛF~slwYds|
*(\N3L7NnAJ.'] c i^ s_#%Y;QpM'7Mk66RV[~Dj#lZ9Q[7Et+WԆ͝g&"32abV\Qrnc_bwM*C>nRI:+=%^N;Lt${?ƛ{xs
xW0!%.٦ަ`֜0Z& MމW[}VU<~+:^$MAM+leelUzM5MOB/E?'ʙ6FK~D.|]]{4Gr2u$h[A?}l~siQ5uQ^ncffәiⴻ/>w$
R8,v6Z)">K1["5y{2\
f)O{6:iO	k ?7S'e}t`^c&9&`-L6ݘ5qAk'|oJBBYթ].tn%)1G'>H鼺<	_YvXJߘpYS!Ӛ
^yBVI
ĵɯWEY ()"wc'gvyoOYt&tIr 
Φ['K(׃
b/XY4ހ
]B4b\"֕fLsgLYV~5bn&ɇ2ʼ6X:ǂjЃZwxNZ@Mбʆ( r=n|S4K*rDiQ?2q_3)Y9I]1ѯ.'V$H[O^eF
X5g5O毐vFrfc?`2ntZ*O:p7:@Aq%cI{)틘h.?$0uv$u4[ӂp}p">~"Y[fe܊!Qx,͈9Йf~4$=	<oFz@İ*<Oo3nt~%c{^FQoBq1r[4`լOAzmж|Rൣ؄sM]kHS\NIqbɴZ
[xYJ_|=0|=bw=/H`םma:S;y<͓ڌ߸Q
.N~̲=f*(GG{!oБ-ƻ" ?*E[tR֥r
G.B]~5l k
y
q4Нl-c0$otDg<bURnp̒N'z]k,2b,-{=EVYYhOcw[IsM$18gW.Oc:pfxiWʝһ1Uv94Ǌ"VIi3g~|oeYyq툸@:ֶ;tI2p
gaf~,MR|;F5
&: $&pEVk3+H,O^3xIK4' .+ӕ^r*|^NZey;ᮿUWut܊ڲ5RPegbckuG)Ozex8;cκ25̯袸ˁU %zv1irG(FIE+e4q<7]oG=ekurUhfOVq4YfLABוǪ4M|aC48Z%<4I첳?T uneJSRo

}ep6inLV`{X.jFޒUK#o[j8Vwe>s5Ads,ӋP;yM>(̲@zw8L$N;# 4!e"+N;.ud{5rZI\$S4|GN="!ٻsOlˌ_
۔Hv{k+IbHI)JsX<%Irr$;xϻ; v c	N1dӑφS?Ou:xRXN>a1ty~vu]ͻ>n |Tƕ1rQ4cy^x$dGˏi}rJ ,ϒDHisVy sa4Gv1t<*VPNhn}I`/eguqDezD˰=&-/2r2D:0{=bxG0BQ1;R^L@Tюzm'}AZI]06dEy5|OyyxI?ʛ26y\8sʺª.F\ʄGVZ
0%0 Lrg ?sl
	5@3^Z+/}֒ouw&p
~L6
_ hTI3 _ʕ
Ci;ǭA(;E݈}^*{s"ua}Dt-h6<S
J}XR/;~%6͡`E^fZJ!>ExZ_sT9@kg
Ȃd]RPClzln7-K46AW#Ve9a-iMn:Lnwc/Ȃ0\m#IghmzϏSZiU+Pq
˃Dsׄ"}!d~3M[[}M4싩6gA 
Z09ƐI7觮P<K/ۼj5hT+P?DOb_#>KEizu|@LP='#;:t oU^K=dV\?3W%iul7ٱLfEn]	dyOҸ=r_X#T@T}EtiiǎDYm~'/G{6K`,]\Y9t]^?o\u7᯹s)AV`_\EC/+l$	͋[`.NǮw)uVEm_sf*
}w=_F5VuU8Ut`Q[
MCKt'(ۆh7eJٯ
ʄK[W:*ˊ
J_ո_(xb:pvA 8Hd| gnLObai0J@%wNbcZ?@5K*+H?VT_:PU`^]`#S{;VonUv Gf3* <o=8'11r&j2`#;ך7DDI٩n*]wyq8鉅:Ce<:i~!Q'd%g&]{p^98<̔HĵkFZZe.TaNiwֳ4-qsa71)3)g^f)%&!U|N[O|^aDNwC>/in4E.X$izX6pY]E)L2UUr.Wm^1}tzEjG,&s&[=@eE{@g*PRd8ŢC$8|JL_ۡ|@_BΙ}%2AhOߟ٪ ڔ1ԾVͺh!uݛ6n.IqiD@D8s2iBu
ˆQ݉Mddws%YaޱT0tDH@$V%Ubg;/\
è^M#CceQm9 Zu5?푕Ԇ6:F&ZAJ
s̃kꖇPF'L׀W(ʆ	$yt^l]Q_3Gh1,ěQ=TJ(fcev| k%7,ݝt3٥]ˇ h7wU@ލ[ħ|'6L+W9u{4BN'atw; 3ȵ
ܢ>Y;JhuSDdvE8d$2(#=lJkD
 f/<]߈ο"-5UB9.$ͷR
M&J_=t{׎|:]1(wĶHB	H7gll]H/j[y]wJR
5861,hMٲX|,X~-Ol?oXuevj)7*@GP#±$Y%U]o/^,̻|mƞ:A.jp AC΀J
uw
*8{ݟάKQvZ-	-&9+\{ZR[jut%Řրϼu\υ[A'ڽ@{ca5)c^Wʾ"" T4+$LcFV_ȃɚSTcH_[9uyUv<isEr[˧$#b@4/hVl옺֩:PΰbZg^3o|eG^yyMe ג!5J֧6Y{ڿV*ՍQ?|]K]$nfgDo80`&RTSMW e^H)u.᪗R*ECZpZ}"boZ끛yBI$V2qM4>"l?!iGfQ>0س 24 'Vvd'W}=?Gg!, 9pFȊen8>qDM)ݭQ#ˣ<bNEl:21>j	kg*TӰWy)	3oeMm>=% bf:4jlSv Z+ls't1#KP*drB,8 wƭ<d;=ufIWsn9p&sNҢ$@=Dq#.s5lNu{a5Z֦t!'lCL2ٯv(C46=PT2vqFEMuXRYUn3NU> ø:TTX乪VY噶rOj<YdLL\SMn]I=CA?d}o⪿.DSV`Jv/
C5;oe Vf2zC9;
m骣6ŕzf0A}Z|
?!$9	UgMX."uvr]]L[h^;av#um`]c]Ckw= R"9&e`'dZ.t)kXbW6==K:K^8a[]:չ	
MlF|OQxX
`m
. ΋`$,lHˉ#x}dt۹+d9=,%qTVz!8Yտy)~+(~vXmXJti3+o[ZiЯu}L{7P;`v@V=/gX+*6!N!81G}6C&w>hOs2fęA4[">._=-wV0"5KTD3 7HE=׿|јqzb-&=cGm~æ= 
hG`8y궪Ҧ1P^g$H Gn\
i_A?X[pÃ aړ"+&@rըf@.Tݝ>8iXDHaX	ۃǟmWc[e!{ % *[vR>:=<DefIn*]m0g >}MkX>lMÔ=wLrC!F1*u@bKSksOvf[=*wȽ]P<-3zj:wlږ(W0n XLȶaک<(G
 tZk%	>j@0{x
G7 _	IcMgJ"JccsVGVq*HEk+1h81CgdOc/>F{rI!82
#a%%U]\_:6]z-J,0 .>vuz߶1wѤ>[ɀ_Fw0˕nmYT/I%I>pOqlA0zwϣϸ]/-O[ஜ};yZӟZubh|k6,ϳ

gawc|c[jSnb\ʴkkC\N|WIJ]f9]R
v>ow7֣֞׸rc/5Y(k[z*L4jUK6s'N`<yB{׎hwPa-[2ۃ+MCƑPL#j=AJlؾ&~y9З##i*
NzkVxO6z$(aѮ>l7uSQ6[۫5'~y'wG:
De7D
F/ta%Kir *{
Epw`lZq`˽XI]2ލ`@mz&X%?	Á&̶| w}  N0G9;(.QyPxZG.ջ'SٞH\S &h?5<n'T[u*~"eu,W:M\Щ'Vޕ6q^F`Eµay eȆ9uyEcgNV}.sCp!y*`Vm-6c?,Xh_k,YG]JEVkyNvBwU{TTf[;P"](Js?;+O/6D<4{{x%6#qCPۀXzsɽb^42d*!4"3X~bʯ.6Z*-G1nU
{l
BDݾ/zw|;ŽdͦIPD:[xFx1U/-"!Uy
g;ˮK>;:X
^Hv$+hݮ}s/.v!sa.<r+i]_Bpv5OEյ9ڸkt>]|L=qA_1tB{I)>RuZCC;tQԵ^L%n|	D>O#fGkF[8t ^Qz4yݝmS7rAΚa!ȕP_IImn	âs[Iہ\27jd
é
}]kl.ssDJyY
B"L[z)k:zQñ1D[W-﹪*jh	o<W;5h{or#	#JSIW};EȠlW)]w8oRx.Ug\wG4xTÉOq]3~:`RWTM+j)֩
+[Gvd:rg3&0hS\yqWR[%;%ޔY>:	<(pEzk:Qx^XmZ(1XM̉<d~ٰ҂KLϢL.ļf~l֬n),29honb"ܸbvP!8yvsip]9wN3P@	ەxfcKSlѯg7pK5UI2#Y9n|ȘNɖ |]d4g1nFL4bamC_9lv+{
tIuUTݎd^l07Z9+9x_xn1 5
6OA.+cdEu)'?s#!U)Dy)a'Fߟ4۬U!B2Evzj/UOO_9=>Dנ!v 8A{A=:C>J2kGn;C!$hx2lATDs?':?IzxjlA/B5"6D!d344f7t(4yƮum&re9(^vvԜԮ4n[r}@
|=%̛/gRe4h +S-I,vG֦}w&D|3ziãqTJJ%^+h~ijej${n]nD~?Շ`J@80:+ĳOl<$i+7^H=y7JueAi7:Cڐbm0N5Yzy'Fg僮GDI}V#lEhbl5bi,$~'U/N'Q4PМ*Wx=aH3LΔvѵcę
H	L1V[]*픍cݦN8o:I`9J9GLa#m~cߥá8FuHxs3mlc.pCZ$3ɗ+~@WRI}t%?	':6UB͉4ϳ:cb-Se9o[*>|#'2A
5{_)F(kZ.%vo<
P4m^*8b&)Vs7rRtIݰa)eB:qC s	G9a*lTp3Ky"Ӓ
JѾ	f*";[E7yb˱r~Ctaq.y޼ۈ GP-6vq
zj<'-7V2U{\
#	<ɫYMnvԻW0ꂻڪΉjBfkZ:}V}M0FrF۸dÀuW7 P3xZR6 lGyV6ؒl=n{Zȋt~]"d}/0k}T&F7ճҭ!̏MihFMpK!_[oy
35E@IqCdd%+48K5S1cq8n3Qƙ?{5>IWz!7gӍ:3YKʽp\E*ń[ NQjp崥i_qV<Mw')hV*W'sJU3=}uo3򺯩9;^J)BCoc6qMCvt'=ow5/
AtW-epbXm"ZO4+c*V5~ӵZ$zxeZmx;ܳIA1[{fz #5];8gζ!9
͓}BxTl]gsF:H%akZ^ _R-&d9m7[<tA6kӇǝ6aDh!:ŵQ TQ~)׻ߩr1]CuS'lፅ T-QӄҙɰyM3M8x؃=[GouG"X<F,3l*/
 z5BĮrY$]װn^_[i܏cW;lث*8k0!&il3!SJu+x|VѸ`]$Sם|\YP^g卟Zc[ŖVN.&QbYips91ւ~<w?3/BnF5tth+y	۰D4pw.N*&=rI#hDXEkq%{c2TyuآM2J@,uܥBrל_ <*C{*y]pTdpD[,R,\Z8)^$X|BӒt@vlvPg<ϧbsHĹ[ !^
jhz։_2U%)'bu{Nl6.&~?J"A$g0j;}aIx\CȉIf?/lcvPm&66WG7g+.ymkXGLa=4]#I %^kT]!V<(\}n-?v;h` :қNl~hڑ)RcZ)_b?K٬ޘl׭h# 1yzBJ`wi[nJ|%_c+N4niV,ڦY)#iyl>aX=)>9$6M0l#+c={=-%װК$uɤzC`yVgO|봼P=V\	[N( LGfv!ܻ
:nz?g>\ènX6`kY6'D>>$ݭ:D;4Rl "NM5YQ;G)~|;:tUG3kF93nM	0TLc?>o0USC/f=_EuP/iB,"|'AZA^~ITZ	l5S 6$Ah;fX6U-SX8Z^
`sf>4|ڪ;F"$5?+ Q13,o{K}%40*R̇0VW֎>X$jz~hFV_p\31n~:f	!ڣ&6PZ11,_bN{
1puIyT`p'17|\!
t}-'0*^{y~F';זdCg>lG۞fdl*.8O6Lu۹T<)u 
<٨Zǳ5Xr _ `=h$ɛ'U'*h|]S@wZɸtzOL?7X܁e`zLyzBwh⋜4]8Cߙw?fwpIMLm._A\͝_Z	ӓppOeFҪ{/Z	~r\ir<ߘۑ8U2ApjԘaZvRrz1oݐ߅IN)#1\p$d%z&He45+^&dQ5]4PI{= =`zh'#uâ>GnhwS3U߱Ե=+
$Ԕ|5H;]9z8޾z #ћ"F:XKCW@;N(.Tߤz/nu	%n!hBaeX+6QSafujyCCi;JKF[fUlCIP[ +V{Jh(W@4jN|RTtO7wbgꬄ%y$/y .y
G=i;zwܮ]P}@S.{p>h^-:1	o_tG7gj=Bn$xʸj(<^&ެ&in HX:3Du=7j6It Y_so'PwCS&񭶡niFܭ14
	c" Qw^}C}lbt6zUk,/YNz+w+p	?Q8r˚v^qnh#{]i|5ȷzi6yj=Od׸	j"Fhs+)`I|T7<wٽ?PO4:OAa2R`2
Y/٬(UV6<ؽF[lC<ցzQ' 'yAyyj|e8ezC8;o̭Oo_a㚝fe_i%xv1铇>{ΒM>.
p=Qv[
Ldu̫
-I00{bpAzjM[zb.UDr-#$J:
0L{	9.Z5@݇I!<^wcj-a`iG{m\{7句p]rРߛ9n?U}dݾQ&\ܵM#fۮ~%![D3-vJA?u`y2N3G1qy}v0u>z^`[rqfK;`BJG/p_82] =y/C,'25C3I͟b`{fNEڃqLp~_4(]N"ȸ""ꄪMOFp/pnI<ovP[.±4]k:ݍZ)poTq6ưЛ	cnx-jeT.aL*+7<DgHKq=W5v(*ziE?;аS 5b;zu^P؈is;Wrj=>$zշUybY\@Ås/_wܢ>̂*ar`'xEV1/[f/F7&#&∼GCa{q%B~d,BRwq4	W!GlLsG4/Bo
uԋ5:8Iood?'-٪㼍я Q+0y:@u9l+ԍ
=鼕%j=lޮRq7\y$SC| !hHqa"#RYPWt
j
vyO1_߁JG&iXNm=aIBlGT÷+l> q.w9ԑy:hJ``#9ͨ4pQWο'~?jAO╇Hgy$]0+s	|~J-R8Q<k,a=\oZy?4y>镢Zo@:C+^E+'
"/uv%'\ΘܫաЍL{
nlzvW1pD剫Yy?dm6B
T3yL].b8F'<vG}Ȗ"Ad9.oҭuY*tGXlkvE,cP]_l]k*u9]~<ϫ]7En/#;4I{Y5?xKI6%\/!Fm䣓!D|K￐4eSc
eގvmŹ@{XVya=O{9jX"'I͉axcIS$VKfam9NnFӮ0fqAY
P_8HnYQ)Roa\1@ Gp nW1
h_/9;d:H[x.ymfآDK
\y.Ǩ#Py؆-NQX){Qo#9M,alv>[{l}-D;1B9t}eݎ*q4f-#mGW{;p_GE,,?4z*8OӒWj*Z6Rt挼.2?$1yn!F4K	.,m"<b'3l
_O>!
zuHO"0	6N] MxcTr }{>[Մ$[͝DJY4D,[|^G37N׹NW:j[%eWE^;uW&\7͝Yۊ;&/1pGNSB
L%Twć@	މX)iTiy։6ϱ_yH0Q[ŚfYld/ۚc,+ύ6'ہ.Vi+MIƷ5l"z,ex#6}`A	yY9)`JeB!:xN&od_x{'C5,4^@~R0ڊŽzuMbR{&Ot RK6?zkCΰXI=xne66p%>(N
]`kRLV<o!}Xw2o\X;3UL]7\.%J~zE]`27(PB]Tװʿe#6H33q7Y}$tES1H"[T$"Y7'Ak`K9yAR^.RD7
LZpiV"AԌSEqxFDQ;)ԋ:N):8s0<t}~[?
x;frXdl%Z795^!-x˯wp9g6eL̞T7Ut drބS:bw͹ͽ$ҵcCe~1G¸pnbS!E%Τ]&S 'DЧ`'kps_ֽ;tJe	g9iM#YF잼NL;?Y]8\⓫L	F.?\_ˑa<Nlf¶kk~u=/lOI~gP~;9fUAU\v'3:v݈p|\\<UixQ.r\}
oJ\fwz4D
dqsSk}J_koYc>EgVkPue<6|\ɖEBR(_-}t
V:fi*9^eg2H=V"p^XtU~U94M4Pou}=ɾӆ/XN6qצN-g"*)c^Ab">Ȅj
zmYIwĭj_%mzWxLsϣ_Pf:[OR
mUw^Y͖!c[볩?;O"q*N5$@^V=]z>,o^\w"N=Ӆ2Ҕ<`"	dm!{rHYފh y,{0%zlnP1<)ofDc=FP<L[P5	@@]vxd`mN)
^zMN8Z*X(MUAЪ]9j Ũeb&ۦNӯ;9r@
,LڨpꕄS766`=g3G}C3qqØKOv?9Tj 1o^k׈#?<`0
f~RZ(!rkyp|.opSm7c.bZX@F!*Yɩ%j{BɦQmJĀO\(z}s{5g'
-24r'o|Q!t߾TAK0FPزڭTgȳhWc:dz\2yvp2U3+p2'9([A?l"Z
|axx<;@,;Oel}
7Th]bk[ن![p;#e|X;&3:ӆBg.sVˀ2[e{{VH-"07Dw1-}qOE%DW3IuzOK'
*(}}kR-:2|FVM۶+ưv({zvSM
gM:H4E9|}?
B_K.n jܾ}u8<8˧OēW	^0:T[w|Xi[0429}/s}0f\RycXpqCIiL*_^poBRi\1utoS7tҊWeb&mF\Jlkh:Ƀj{{̟;"me#s;\+谜J9Fu_GqBZ`v9sGꔩ:uȐ
imG{ca>"J1OizL@sچS+w`&t>>q^N&}vjLޝ]IǡII͔do̯׷1ݎ~v*R%	D6钬](_; =_Wuon]~BG
NcY`{/f.6xdG؉;:cQFF?ա5!]pcBbc99o̤ٶƜ#%hk!ئ>ns}yuL^=G3-nV CBTҨ!j8EL!k-^@s)$y{t ݓF8
iR׀W'wBzYń,=^[#;ea^;sw<
0ĄU.ZkR9Xcn?VtO>$zsze1b7qgc.ro[oYmSw4&ԝcPf J MU+jIBw|G%ZsI9쎺t 1^ɜX=58؂Go;1L2
8q_xwMOm9vhՑdtd;,Ky[={=35BFK9%tW@8KY%`n	Y(CN^ 6KCǰT%([|3
=0-,uM50Ƥ,y{cZ %iSܓv[{}ՂT7oii!;@<
U;eb(\
?*JH4{B%TU?"e~cwK9l)=[dñzêa@srf#=-@a'vMKol ؽ^Z
[ܱg{ɯb=YhiQDAZ#Vi@R;+.I@iVGj)<,p-t֒xut^(џR/2P0&HY\(P^~=.&$Z1r(t$q_OY񾰧\,}SNY#)C%KOáW1ڟ=g#׊w	Uqd;u

W#pH~)мv7-֌7ڔ6)#'72u	6jZ^&z{[oR5[A2b&8*PIAmA3$WykH.AC UI^GqXTR|#G%OjuY$`]
c}P}@2_mmqS.;f^&@{L	$gq,<-_->쒨W	FeM{]zډvA▽R{z5eV̵xv nױ7mU;-e}#:L9>jpcL"BMǍ\8x>VD4'otabP#VȹUxYkxt:xȲXwx6bPʛ.D5?^jo,1g4N='Rٗxt>#K.}`ܲb洫yIW$g(M辜H5`֓p0ƟwWܒXɋNBeC6yne0wN>Ǵ1-
i~w{8CZ#
`o3Rl)|0܁ )&/o䓒BԳo-gOE~_=#sg|_n|*t^}AB7;3Ճ^SNMCG	2Nk>PaZ N
`xtK_+SˬMeS!>(}>DǢL^k'c$n,0e,]nw>GIG5KqPW}z&RupZx &5МvA*㽱Dz`.	ΓqY|ۑ<$+\6[﷚=uP82uU_OHа6)
S7W/?/G	v5I>vnkC~v!*R6Lxq ED;o4>^.nH]ʗvيpBA ~IѨH00#'*4;.0n[
z'xF L=aKnhlNjHf4*n֌+OytGoXr:#	G"'xqFj֯7#f*kG.G\ٜq/)$m/PGqpn!txx&W!a+XǦu_nvY332SwOgPbgz;ȕњf̝=y5[۲mQu #HʕY.eE0EYXjD3y_E)?OlC3cl[.	j.U)p7xg9i^n1f?u!ZBx
Ub`
jwbGvnJ /tp1uiG7z H--	tX5>½{jB)wx |5Ʊi$fer|i6^[ X?o͇wwR{1"j dv#1K 'M>z  ^ykq,yЪ!9駡w$+(q!F.l
qO,`Jz5%JbvujWmW=U)㔀b |er90 & +1ܪLR*ʧ;S$lXsd&{w@K,	HV%]s7QWtӨ=w7xӦX13lES#P[qf7!o~_O?ܫC!O]f/mxzNQƅٶB)aU_vc5N9Y>L'2r;(Ee-Lkco+
?.m{a!v{%j7\loHYw.fM(T(#y1).f*KJZ]ɝ ]$Tٮ)~ZvOc
Z#M=]MWhA(m墳MI4xrǰe[@6Vk;EACn^IsbyhȜx`F%9.Wz:cnqY
ݮS;d;u2*"B7Ͼq>f7tP+j4EPWD6eAɒ`r
yF`#Lz\enU,9`:RrxoPk	1pַmw]h0%!6'm+S{|Hu1GMN5A<fH|2tg
n~tX)/L,l/&+u㏼"lنo?jJ߀u7m-ndqv s~'K8z=w1uaosm7ɫwXf)W)!贤{!C?
pr"}tS+V1cEP>wG4t(w-}X*m<b3lMl\BՙJdiYzEB=>hRwGL8S_iyPUb=Q`j=7XAAsFZFbު!]\kVB XV	EC ;`O6*iV,C(Vd$֛߁n0Csg<f[ 	MV6aYSpk-|)`Y򱓀AdSعe,k7;1;>M;#۳2ͼ+ d,Ibq,]W;q[>yFv5<8ɲB{QjVYRj#s?R_NSIӋg5@٩R$rpq2g00
aw	$|Cgd
4a=6ż@<E)Fl'î1dA9LızS;"teb|NAcuG},px)
,
|:-S"	ec>\>'/0?/V=Z^W}y1zH2rqnoL+v]*7g")
A+xsGaR_)Lv>ˀxp_~AөAD#9ղ`E
SOHEGī(-+!PS~ާ-J*4}O.1˳qn	$ W 7Gkݔ%?m%pO*b;dj<OJ׶8EVIήd3tG#oEҏݮ
1`6(`\Bw+(~[`#n	qQ	eIu+Oib_
Issmx=Y|*&ȶzh43 Nb+Yaqb@L/P|oISQPkz!wzwAvqF6t^oovKXCH̗c

4d7΀&IÙq4V¼(๬˝vN>}{m>mm~(=ZBYԅ1Vauq8Koxc	Ҷvݪ	cVJЮiRbշ
%m;[z8D¾n<0\{ѹGWS\nJPWA<)p5;nԼ#]2xwڛȓh@4GCes8`%dZU[Ɏ`V'i63-3bv5b݀l8[F 
߫l:|n]h$%?ǢoM7Սk&+`;,qIhS_c=Ɉؕe'͜lzbY}}7I3a{>'ĕ
:^InMrpv::~l[gՙs&"6	8n3g X
>ܴ~X>&Bn4]	W<"y1	Hu#soڋa
~0|_jgvκv |qi/5ic3Z>R:wR^)v}cUA*9YyH2bhs.|*P.FQ:1pZMRpIkYj;[UdUi4V =BW|{N%`vu9㼱vVI%oYU{''1<$rR?{g^r+Y3%d6FGlPQlR
ǭRm
Ugf %妗}.CzyQύY2-0 tbtNTp?"7Ϩa	W{X,GRD}(=VUb|i	L_|f;yU˚[fHb N*s^!M@-qK_8P߮`/yd O`q7,'p,Gp21'"_Pp3xaa؎`^l!2GгB4Zjڶ
εN.\D VxS\\:Fw6D|'$t$8k[Ag2}"xKCF7xLvJL7sW
-9zOa|Z_fFTdێve"j]rcwoM?G?|ډdrJfDjt1΃1q:,؈GQ^	55m0;!ȐPd9U1mNïEG+xsؓ6x>"g
)?c˨O
`}|0
Ո֫I
In9PIP_ZóXK.j"C}~d(uIπ*$Ğ]Jl?AoX
0#/ʄbZq(V@Ms!}VҪnXVGB	c-<4k6
_cʒQ_̶.ܰTuNW3P2тk增slp6%ئù qr89~jɗE~b?|<b
}eQ{[	a ;|䍷zyJ;$bdj{BMWv*i2=[-xhF+R}ZA8D*n%'ԪP㖮i>!6l\^g<Rsr!H5sw)Wů^<vL>!=v0	hGt+B{Zk5Xa3)/6X_/!gL2̯sREԦ/8>nhOIl7x$zٟ7TV\̌͘n-Z+`9B'
'{SaTj{UpJggc۩g8[.3dj})Wp9BTSIz1{!xdVށ& %x
\{Wm4O^O[¥GXӹ3ՠՊdzSh鉑{;HXqO<vKfоH[oBTv~_^P]iFs[\"޴kkf`c?\.,4U4v*u"Go}?Iy5h*[SZ}a3JĜ &^=պe#C-!\iL\ce:LkM)61,1~`&ɋUNdgEAUI{
}geQE-TA%:6x&PKD@q   R PK  ]z[               META-INF/BC2048KE.SFǲȒ-:fgЃv.  6h'ϠG&wTY殲ݗ{hi\؅6îOo?b#iÿEJHcХ8;X\-kςfbZ FG=%$T?OK5P5Gg,ݽ=
&%2;Z'
хǎ
_ҥǴ_$_u^=VPW
E-QWCX
/ܾ.__E!Zʒ_
.ΠH{+U2DKcmpft񴮵vDucOxiy9/ BF
g+;hot:WYc1T
ù:Z&R#uڜ~l!YJfJEJF.W֛"BƓAj>$z4jt4CzZ]@}"m8?8gUa;RJTQކ6ag{ݑW32a*ICآqt`Fzܿ<Uq1c!4ޱ9| U%VGx1m{Ph"窨6~iGi-d2rd|JQ|7}.}lętP6m\=pvamo= \?6bB9<.B١뚗}32\ǟ46t{ҿVìY#d<LV,(<[5p3"]+v!OU~6ݳwÇىO9L9fr0$*ҶFwHE]5:Hc [ x,!M]h4t\Ng@,BQzwֶ;7f>qG'rd&@}A8) g>t~qErcb{>D%o#BY`|#d|R/WV;Y((>DIjg:0%Њ ]`4?w˦e(_@!XY`gE #E"Lވ_) l3qhAO	bn(lIΛ,t[M`4TCzK~plK7q !Qֱ(y;Bx;rr!ddLFhW(>ږism+	ݷ	xX(ȵ.+F0
|2=qŷ3ʦKHs=+}U.+qc
DVUɿA~]s]J
nqnWJ{'MG,ܰ^)W}a
c bQv-/V	%*gnCX;֤N}-\,wtA`J1(Y?7c*^7q{ߋQC:0c;"鶁/E{C'ep2ʡƝk`U
!6t:b͚KoPEOᾥhW{>54qXAj5@*'k<GBW!|W͘c#DA8(!˕7{Qnק4N{(<܃;0>;18X!r*<ӥ6Sz320s^-A}?oI@{jUt[CԍoC]I<D
'D$YNdXCv"(bc!2Jbeb_fV>\M<UMaQ7_AqTj
jOFN/C{>gk1 1#$)d3WmF]Y+";*!{s8-Y!e~O.VPwFu̌U}	i?o򩙒Y<aښĮg ]FT{Zl+"?V1UsqhWe?jB"?<dX:l?$2Ib]o`bT~WpkOl\NZZ _!^]/k]L4 ?2:|K24tu1bia;~K/
~w	w|!.kvD!\$VFL:⼌",MSϯLwIn-flkigP0#rz/5ꮗnN>M&M5OR'GqN|?y;?]3y;e
ȺfTBDEk{eA8EE[e~2FKCdOpMHH3sqWW{2E<_W\ 3yZjp%Eٙ	Nɕj
_bpHܴzvkϺ>ے$}P=ʏlO{T;۵sB&͠Y w.sHD$xJ|bq)+했 `6A#@#<u>a <XPV.O,wzeh 7]]a' D=~ȧ8&7ыP|Xip:$*Tg|]H{sB^pҜd/~xΎ`g>: Q($Q.K|<VVsQ 2Q#zFkreKD=J"89mncA8\I({4In	aa9}|_=s;~׻Gts]
Hd`ta5Pz ދaLǆ kDmdS:AtpVJ3v7D[CJ𰘸ӡ4i<ak9*p],3^-.՜
Wݏ*xH}'gs
oD2ܜJV_谡*)9KO/s.!_ڿ $|PwЉM9DoCd[~Djp^>',݅AM	2XN 8]+z	˜RW*)s'okv1C Ren?A7Lδ&T7L5&=rM1TscxMimPVal¢ǾL:9^XO'4e)
L)7xnS^0K|O<_8.DhRXG<mx])!=Sbda靔Qgk7獊C&;>[:ߋvn폄NWm@J'Ξ#CiĜٞց[@
׾35e
u!]sj,製<<Gs|b0x>pD|UX5nKD(1;]ѽnF뿧ŞcYCegζҐ$il8GD,^^ͣnGq0^
c>R<_7|m(EH:eCu`]x6 9y3ȿ;.#(҇f><\SkZed"=k	ה 9j;R턓wcџ~?τA>cd7]fW0YCZH eLi?[\<a?%pn%T)COܓ-	S,rFܴGHaDfY׈VS
ܓY97fSrNՉF
gM)-%$ޫ% %;|shMQ _hFKl?eW:KJS\/{v,cqP#Dc]ZEix[|[47nǏb:5Yܳ
蠵((@H
vCQzI-O<Ap"rt3d4ӱdZ^&~߃Gԃ,E]U{!
Sۖ[׬ֆ\*uƏ|r*l^M2b<$.]kT"ǐ8WOo<4P('0MKX:ĥE~row$_b huP;{.󖭤L[ll|$EPH;t:oq?@{VH*뒥rIVi]꺺̭ Supfk+Za)96VOldx3}GKy61䇝*IQrɓN
c'}kQn:έchɣvv0f6>	מ41\ɲG+u
GS>YlWָovLi/hmX8FU2Hf~d&}o<mB
ri+ Y6	cBK]hXW	;:bU`W&
i'ܣ3L7qf	&Y)NJ[. :>:1#Lx Qc&	T25$$UUzbw-j7xz2<Lxʥ%i]l@3!^M?SFeNC^&!fy-'oY33sMyLWb\@kCN:fمnȷR"#@:Jjp61hsa6Lq:,ioވO}({Ȯ!/6a""1]8Lkh?\~Tw;7^e}6xNy m<{/_jIJŘ)=H\veM;9!G{^}?6.);@ K
YvYʣwh}'kyouT}>MdҺ޳H`Ȑ X!]t{~)]_
l|f1 =GF]Lqr!R5rz]NluټB	$Wq0|j2;

hqѢ0|=^~@к+#p"e(tdZ_XR́E@"q"?Uzj;g],
s1`w,)=~G澋7h y!m9G;w;vb	HT:1W_ΦnÑ ])s.	;ҧIo'dx_Ht'fnJvv5؅7O;8x{7G<Z\(oǞ%O:*Z/- ?	OVȈhw/k5m$1sP#R||uO6'L~i@-vF{1[y7J>A?S}d!Ml;j6 b"7Y2-C@9""ҰɑmPzFONv2=z<>(N;0&u*HuGǼ9/h|!*o!` 7:J1v `u@q^rykxVR'NGK{l|,>5oX|oO"θ8'((L<MUj^^2<]A6f9ޭE^A<Ny׆^)f8T&aC£ ^
䓄n%=Qܪ+EtWH=jqRIITlȀD;1qhECǏNlN/(P.8|2W	xވu,ut=ioQ]H7#YG*+Ä_TyؤGD6_v˃)YS+cOK8ߵxD^Ȣ^z!sҋivWYJytx 1r Mv͘@~.)7p}'S|:E&'}LT
hrILֱ݃~}͉nJ]A\.d*8VT
^t
Cȸ5iBd<JNb^St%!s0:ݏO Yb]w1n]}Pn^\u>ëT()wMWa'ITw]}"C ުUr;oҭE&@`&𒨥,y[٥7*JD(#=Z9Ǥ^W+'FW>cMZĺ($YO!2vaNx#iu.Ɇ
x<ndqQG:e8|CQI+>F1Kv[Ry'Sޫ"2OI7:ߟq4j]rJ퀳ǕmATޛCKnN
oՐ+#tdD&JDF:!}~s@6F5A&lh4p	/
Ü(ayc/GJ4OWgd P2zA0m9XARtT_'`U^OctN2y* 'Q.H8ng0x\:8ǔyi6a.s`\%~	I`ށSb\ݦh)wƛpؔCRV} $ay'hKq͖qeit)Xͤ[V:ÈTG:N;ʞ${N,<kg-ݴ>.v^["τvnn _^]q[ҴF2vP9:Ft	/	˶}]rk!3ZQ&R2>*ԮsQ;KJaȅ@(<[]kHؿ9òzu0($hQ{7)i
l:uQ-ztu`4cB^!w$<sCWh||VYJ=Y{w}{lvV).N}**[Rb3
T⁯q,jEuSh[AGWg*>ܤnc3n,%
:#%DU=ζ!yޖ4oR|9\
I)<K[:=;03olUU]
snB͉b_k?3ewqT>!$ $I&'
Pwrn[6Ab7vAm1(xw>Tmhb_Ƽՠ.<ot]
 I=UHn,KG?sKh;fyAVU(?]F߂ͻnw/DF)a9D5I`3r8W/7bFO,	.;u`[m"pAkx
!*ς+A=gw9bޔ}'g(I{'.BW{zc3(c'N{m*+!tiv1(O`@g2' X:ח]BF:XfL<o=x<-*I@0zcyKu+cFRdZ:ޘxd22y`ɑ]OQolܮp\@f;*R].
~DOeHCB'fౡҽJF-M4d+QI_}ӹ?3.:{J/dǢeU\Qc7[oO2|+kJ>*`yxvƫ-_Jؽ$u\;;8F:^+I5Gcޘ3(lH02"ZdY
TSq܂J!g\S|X'ݱζhYʚU ƼUO\Nn*ν7\vaQ-^C{CZӯXxC؀9RH1?Q=@vO[
0P8]!1lu
/:CB5pBNH$Eb (m?6KZI{AeܞX.3p8).#YH/#<Wru讋iEj6*=GRn;p; n5 otȧ#C<gvg7JJz9{7+)TEܲ_1^}o(̣Yq>1'PtVy7X1IN!$cҮ|	cN<jlN1fo_"L#׿yCUk0zpcS!O`4]+U~K#-Lnu[RqwU۩~x|vqy]$r6ZHg؛<?TF>	wJ8]O |1t9-UE2~Ɇ\g[E2pϷqs"ȣ__L
}M?ۓ}^bU4zHջ֌+#
_hʗyoߎ)!2]pj#t)ZTPVS{!EV$/3ZWɌ*E7wt;^-6loFM>I*n2}*"/_	-=l
knog'V&!)*$^_{eq4ٳ&,v|bmrJ+7mI}Z<a^BiOUqX2<5$ЩtE[ ~i|¼)N+-+cMƱb[^g<m0V"$;߅Qnb<|/i^j.;UǲSر9 IDJ'!(Zag3=Ӎt_i2
sGMIT]&Қ6NagX_v.uk!
=QqRN)no+i]̈8jĐH۶ݼ*cXͯ(`4bqObUQ`(øjӘ5JoU	M{}nCHd^l<9~Rq2pLAux/q??pA2|X7?LpvʂH~g𿍁!,g"D[07rMm,N鋭ndzC$Ab	iU+S;)?lN~'ǾWA8pŐW))jWT0@>+({
` XpBr.FBqy?bڝyv @4bE<K*1>u_Dg̀1?9O
#fZ'db,[?'+.2{jJ4i>Sc"GfV1zkU?h*Y.0#jam݄N!X)"|3@=sN9IM4dgUڍjhs*e!G9c_ï.}O+)\a g%}b6)ON?'PW}ˠi'̓|jtmy7=p<qP
S|9\X&KY6-Et+C_͢pθ_G=MS.9bJL6ec:hmH*!c8GG׮ź4ˮJ8TzM4o_ugewү}?]!׳ng_bЎ%S,(권i8rh/(ǰrTNL,h{V- {isGMT7*??+1PQT99M,3X/sLk~$]nlAJ#׋>\tJ4Ƙ@G,G<,3Phϝ֋NK{4H1gNRM~N뷿xHw֣g\RW~+J4`6`Eo,U\<}XFfƱ!%k/mۤMo)2mYDbd+g
qzjS֟?@tk;p%sMZa"͚)4kRYW8'%#"!qtYqU\vzPև-OWQ/ꡁwk:
I}F`+&!eWVCM$F}$1ŏɞ(0ڮ'ѯupvZ
e![^oɒUy|єRW˵dN[J&f{bȇa'Bt԰uSo$YSs,	)jaWl.O[ԗ$C?ĽB 0BuqH>UBfu3Fowp[3ݫ6ٶ+5dG/\W0S(Zcm~/bܟyz=f'\bJHȤX{C:K`MC0qZTm
KzfkTLPeEwG+acD1W~&$@XD<oΩ'a_M>kY94KQTƖC;>vo5gd7{C`!SNK4"kSZ;jwS翾vxfMAǎFpcS
ck7Qz=⼝Px7Z6WoC4K;ٗA>'|PS(jc+^`wf}}wC[o;TD2QYOsh\:]<y] njp4;xvG?4o{[+z8]S',B+xRzFк>GG1;OWoh1Kqz{Q{hzQ;0ߔh'?z:@c3r
v_R9IlUDTF%?0,?M&Uc	
c{=cr(`p/~lHyW	^9xk\ynBbb'v)?FUѾ]D:ج^aE=(,08D	]۴rAgnE
2`F]j#=z4٫B΄9:kGc"hoބt|Rv=Q܃jCc58]>\
#=e#0S=>E%x+0p%ȗDE'>@lO2)fao:4;UOv.dQi>l\M]/ ~׸X=bNi,5l!iy"(J쾽)?tܕN$fWҰgtgՆ^_wƮo PBl,;7_˅*R+7%gbF1y!ɃU&Rm$`N(
_c/u~NCc@
:>aOH#St 8`:/wZ$	:1J<#WtBv:&NH[(ǲiƐOi7N}|G7VBy# -YBffQ?P*h=կGKi|9̓99LW9ɘw$z'.n
A%DyCA0+?ϏC8Z$jumn'Plcq`/h͌1Yy-xoxΙʚ@/]pIk6Yy-X|63SAqel6uGV5$#m^8̄^.>΍E=ԉd
1<|XE;Q@R2hIa`n:gg?
Q44{>n;U5whm8r+:8¾ .'OUKd5N)dpBo>ۧ"oo!'񤐶?欶ClFBD`U8t$ｕqV7?N dBJ ^z!ΡWm <05A-?*MjrA>mlr0w"u$*2hZm&V]":>---
{[/lpeC3i@%Q._!Ew

{.
42@dݸ(r'6JZ&VC0FQr״zT#Ȏzst=*TʼCJrŝeV0r`oErt}+7姃pb:OĠhjP<&kqM%Aߦm<HA>Hh:`S=\n
uwS6b+r#cHYQ ȳrG5bh%gپzlWj !)2\ךlnwMND==.24^r->}߫J㕹K`\q)|֮;2UQ:A^gG??K"W Zlss˩2Ϛ(rMʛY"̫azáϲ)LC!s>2ޱ;	dZ^&$h5+5PT
=vis8*yu9N lNaikT4z7Ҋ_LU	o߸/鎫Ortw["΀/^3ҕ>֝Rk7w15iJaBWXUp3Zgq77Ի@jׁ kohyciŘÏW3o4i6$ g	TKj"#;Q㣴%{uȯܳEC>+-삕tXsrlWxaBCYRp4(pY끣%XA6+CbYSgI,c<s CzV߿ÿD|[݋@R%"H0xa{Aop3Tw2$RpCeT+qڦD?y#?~V*LD~D6B]W4UF
6x#ϾSU"@J[:9lG,M1{ϖTֵ(-&jnyzјc\ƅ`EX?#ωW7'uGP* #!s>V5ޯůgHBu3l/IOͧy틼}Ʉ?Ğ)i{k~ltr,.8Ngti!<$`Pg]bUɸ8kVj8k pNDwލ}\θ0LV`R%oFbQ,M+	Q|#;Ĩ\>235Ex,@Lyo
:_SlCN<^Xru\݊U^1[Pq"
DUbm6u^4גl_eCI҃B=R3-$i 2,Ԧ t<t4&|יOjm!k2zǤiYu&N⮞@IE[}_ xa}$i𣭴4-ΡFAH=P@kIeBkb}&AL9~ݍb0s`^w`K="9l̫C>Lw8:vI[ީYέܷ)vhb3 ~#j!j6Ik>F7W70J%2]11̏n}t3*wHm>~߆͇sHH0aQ!r5V$!;ms0~#BlE[p͐
Y7+L*UT@w/r]6E/nZX5gnY?1z^ۑ#|@GMk7\,Zv,'@Za	8g\>}\~(e 2]~lc.En*G
~>m"oO%~ȋN|dRq$˥D0d=;) C+[~84nY\'(kиwic9{h|NOu=W]-_Q\T*(F%ۑǊ&5:ZOb/E(=ˁ	jx7n,?}XOC|
xh%1qg-3Я7z{`	ވǊA<Ϩpuu'w}'cR7(ߘbie^MU"MeZAWJk')*1_ɒIɛ@Zh'\%w:^Y6vK܌Q.3	8W⡾n-[yi
rjS`n2JIs;w͏O~F׵(s+MP"&p/Ս}7He?N!jbб26* 땢M0?z^Y	9!bp.ĆЍ<;f'\n:
}7XMk/g䄰_;8|mޚ7.K9wܐ`-8qd!%/q̙p`slBwa3;:x3L
Y\M=߸ _@x ǥ8MnhmεTXH;~:^ +i
FQLsr«]xZQ(ޝӭ8--^c^J}%{6M
^ijvxzC3(l2iBȿ+`}z:vCԤoHLt"q7~f͎"Kް! v b;9U]U}oi9ؼu5̌po_Wo=ϽY!p6E\nGn~jё<So.G!:[bT]a=}EO~jS'~M$q9GVi8❶/O85rt
֍K<e+=%Pul9w9NdC0c#ճxYÐ{=ztNb떦IQ說`CdwWzhŭ$cC8Ϣ||a'jal|1~:ʅ`eM\񎦷S[ǑaspH{	
w|@U|=UgʄOr3q9c$QwSȕNe6ݮ-tK
۽?XO<XԘ3Y@`-_xH2'3mxbaW^ uwnq'/z*<c)U㫁Sr<s)_\4GvK!ʨpXyb:/>;=;|=*1GUnjϡ42
َׅ2@d[,6جq8f$*-]ޅ56-g\8O]]T*oߑghV=tzG@L`M<A_@p11*& Fi{,榰$S穽WGD;Ua>z@ފOeWO~
"?]8qsOA(On'V`E(ꂴ	ܣ=s\.N>ԥ#I{֯5]3vA.}ۧ zG/{rBP-Mām܋8!G<)>\3^=,)UBQYWVyxXT\ ]qŴg/=jq<\`$Cxa).yo_-MUO/Xmw6w&;^7қLQQ*;MWXpX"juf/^hDSPpm\֑p\wQ zJġE?1?%yBc90u!wOԍv7C_q[X#":ciW	ѓ]!u=QS^F4'A71t9#1>6". 2m74ʹ_4/ʖ٨פ)aeZ}jGG61)_A\-OvJw2汫2;N=|̐E(
qnKmúsÓP]KbZ^%Z6G?Y^!CUߧI={IUqqtvտj=
AmѹTǷh -vzq Wđ{: aG^.وt{ nG3쵣u5tXyO}*A26ݺ)nIy(m\/DuG>2O^'ba>th&2%NP*[>*k
p߃O_'~}e<(!ȒMmZgTG;x.4~Z$~:|,N33Q$ҙL\7nDQTͦWQ{DOv	x^+Zz]s#~~kj^ݖ;AYǆ$	d>
Hϕ9W} S~u#V+W5"e]x@c\yk_^/"TMbH&$5Sekv<d~$O*`u):5Q,\wnб
Qj~ny\y~E%}S\!3joKvk0\71xW~Bv?}H=}]l	xY뒮Rz&b k85w?eo7̞By:
dtw8t%MF8e~+վ+H#0.( 0ɃFlf$Q _GE!z/igw:wYI[f
sdIϧڽ?Ik<+E;0Z|{Eh-\>5._MCWxYXr4^
&A/k#l-:``]G
]faZR7:ݞy=<|X%DfsgS"OKɒ
<$/'\oϚ?BxShXЃ-`vݽwUĻCi}sr)>E0Hـ&36= ~hR&`k>nR;ڶhB	jk}/nk-%NRJQg1ej4nKN-j5c@C8/+$ٺkdBjEky-M-[đ!piU?<х@0&kJS#$x|pEOӠnB\EpNJO)Bh0MIgk1Sgõ0q8_D\o=͊]{3fw:1%5IA]gFSҤ@=][MLY$.
*ELz
Z2XzKC	N䄱f)_'2bk}Z';,q)Cػy\2@67nd>W
 1Wڱ7& 5jٟ<	4me,A<t

.zN$UWV78@b$b^(źӡ7;yl?)τ
qA_0UzI<#_U,NذA7߁T~6յ\.}Hp]Nfe\mjK~.Vo[4{q*R/TNC_bnO.zQt
pl2TxIf.D؉T,qL.^ucuK綍c][ҫ9uV@Lx9I9P
lFi\Nm`6Ywvcs>$ˁ;!yQѻ1@$W'wPJI(?=g	gd F!r'$-&zOl> wcbߏ{<-ʚ{?XG&ozSvsF7l4rP4OQN4YU'ȱdtd~*g4^:x"0?&=zwWvKJx:tm
;=[IrA6OgڦǌR"s%AiV@@9)Hѯѝ	PP2q-Kh鈊^R )#G-:q!a;ֲ* 
p/[8 JC"Dބw^\o_L ݣ;6kl(icaf-q";!rb&W_P~xC	%Y[6qQonr@`NSzhG;aa}5:(`uگq;Ӿ{l%A^1nx{bNCpױZ2?
X殬QPc&k|
5Uֽ_S~-׿'rjPUCVq߿t&vW/o3.-2
\ Ʉ<}Y-ּ'?Zrb'&bM&jq}G})kM%k_Z}|`f5/&YD-CĨo?Y)S&QIGLtI6tO{~kJPK욐Sռ~q\/ǆ;dR.[w3GI}X+6wB1!1l 8O}aq~X|F2VXNiLGFN,nB/Pi7l ||KshDC玞kfç,~SmM/SǞr* 3$ynwYLjVӣ)#AX{\g#\Mv_(0G ,y!'<ҩl2
~"":
X'#@8$._/*@x)W0{ۺCS|->Z|&̤)h*η|zߺWPx.6Tpv;\(ybM{ 5=`a|Z3v+	(ey#{;3e|X9 gihd8l7㊨}\gycoCT<^_gq|݄㐬ck	su/K:u˝GxQͦxNںL* nji7䭵{>(yX+zIWrO{W\%>iQ].zuཙJ\U{Zf@iz}5WlJkkbDGBp@wuz=tKD*^_+?xO~_녣B1$XݍeDԓ~3Q藌[J	3pnֻED}@:k_uYpo^.F0lo) DӍdL[21m[}H+^їtċ4GL-Dt(ptجs"[և"U&[y7s~MJ-0(r!T{;AH1nWT}R܊`sL>p^kσ:y`m/o?"BOMR jk6U>=KՒo9
@:a,SpuVZk8WBh8wII>!;f~[6]pzw-Wqm`;}TCaj	KCYx+B$E8=HS+缍X[쬉:r'>8<3zӗp
K/MH-f;2<6~Q|>]vsk<WVNg@8a[V)UemʇTk켪@	VZluكxcՉn Ô3qӅRcWtpӎyCi;˦S7VBT eߍOǣ7,C 6"x3|:HX/Q<-;Qӵf+R~'"Ay3̧S{>c@~~vԬ6vajR'z }uҰ<g֬0<JmEw|E]- gg@#VY;).MH,~ݖbY<~mz<&h^r^\m.6v>tˈ6}_ɇi\zc*[a-y˗vJ-i)KPwو+{!u0Ss:8-mO>1G4@J#oB]A;;5٧yDgzVݖc0"DDAoD=ا˰'c;@6f!\t5nj&;*@
pL%7Ioi7W}a'Y!Kɾ3rU<lu&H61:d GB\J\7 <$RzaWДUt*HݣX%
7>:J(esq3UAdUj6Or*L{6eX*oy:3MVz0 KOǐ<7u!!#
Ji!5}dPqgGKqE4I,5,4rYwjS%aޘ?
^Pe6p,bьπ눙N37pg"[\5~z&-SK!j]q0`2:)8PyϰG9P'h?L{}>t5,MӊSxb.:|.Nu;,&Fxۤ_oƿм,oYZ{CRе2~|W5M`߃
O
S3kGDb;!I.	`,:g'Un7;bYw
k_[/T88Rw^ֶc&K؉+i#(K>5Wigxif`QIܟ#
,yegg๳St$OZs׏H󈀧sts\*p4DxH/q.P\L2::B6'snјq`x[Z
| y/C9i&ƔI(*F,l)RN糟_rcr
D=iQ9ÐJw6omðs`,Bs날oU)(W@G
#yUVyhw|ԁ[:~a3.	pC0pCw_>?yQf=(i^HXL2p'Д?[F[aHb;hqO֒-2ATaGWӦŲe,!= s
rVəLQ7]}EJٍۡmX$΅PDؕj8R!PTu	9Mn~Mb]5Xl&=~1 u 7БJ$~TUU
\bj}wHY.\LʶJNI-'v+Lmpf>A;67iY)!;&}8׊1:]Ȧ3ceZ	 d xwpO"y<e@;%>{BNDLJƩieJ	8)\mBoGkaRs^@jF	!L|2KiJۨ;8ت;Kn'sqeX
;Ab[`أ}`'{1/|xP܌Y9c*k@~;Qkwon/?ިJ݄=q5yIt3vlgYG00"
(zH>IgKL[֦cnhl*Ɉk46ZǛ` @C #1+(B~L2QF${Ɛ-p|5Y!J !.Jnҭ.X0Mt;0rCgrI8D>m)Ҽ0}^?=<.55)ׄ㩌0yuqJ'[?f}>`ȧ@LL_az3.vA+JMNx=	0gqOu7]U0D<җ
]qCO
qVqzLAv-$^D1v`!_ ĀN)XNY^KTدaaZ{G`l[88A.{*ˆ
丒;9u}cGB=8:<I99#E^9T-:i$\qVr6~ t+uJM.IbjFs=Fl8|r.[3rՈ{gB\;z1_C{10elˉNT 0\ZzXjkg٪$0oωBVCԱ
ޘU( fI@NgVVfl;lxx=ƃޱtMHQ*+hdhh2?o˗s!q?.uW.MR<%SY=!}/6?Cf6[Tw]7{1TW)g~h}:r?&>d۳Zmg."ݐXm~C/삓_&su}=.GOJ/-lr u:GAkJ ϝE
>AWGBmA@bc%i9[Y.)>ˈǮT+Jp뒜KҖ\GD|N#bV޷1]kl>Fd̦2:t MrN2,*j_y?<Мs/e×\cH3l Uvn3v"칽ľjfLR١ۍ
U Q}pz#NW"/1qOXp.a)7Zs֔j7|P6\v|A-&/~)Dqn6!xhMΗqg9վ_uz5Tkv?H~+ͣ{f»H-@az
QcvaOGApf*~ۨ4g>vɖ-{M.r[ElI?Ғ!j\ƍޡZ]dW'8oژyv}v}e]#3rw.t-N JQ?WJTbUq6]tX()rK|{度Ang翰H݋IC !}e]!jC(nPo8|ˊñˇFOfǍ[=j(4
.d/1Wt>aZ_vD:q,6 n*dkD;tSiTgUuKqǫlՁA$_Kx1]jBN0,'p6~7kq4,<$qY[CeXbc52ҘnnPfڰ
A5}A7U(p!(_[$>ow1U^^YHkA^#-V\et;1uOGe>W܂ga K=NX^MPe;LĤ)ﵺ~
>ͽNI5%m	>ox߯|'Vm}0Ҥ&-QHd0Fes\
KCgG1"o NwNY[ҬE)#*?p_3eiO~l l$D>E尯ȹ+毠0>v^=LD;,u0x4]pP;լܞ#ϻ1(݊	o%2Q%"Hc׽!pe@(=bim;3{ɂqե;J\ny~cIJb?؅G6waDrliv<_]>=CA#Nx9oO5_΃^BwXYse@fc?G%ˑ+-'Է *F8)詺BeT頥 Wmh~8E2F i~!|PA$0@i3mpY4>NL)){C/,ՏyFEHcq˺ߟ"R
 <P&!0PskgdI2EHA?i;x$	=pgHAǯ2
A_AJ˹Rjp|D)>=Ȫ }Gwo{ä2!)pM5ɟ]aWqLl9,4_wA(K|;gaN6Ҵwy/Bְ5,w;=I_~`ywN$aZCàMn}T|+쎋c#+Cb:Bcʄ.NO*BwH?Ï(9:(bVDy"N2並U|})~d'wF[w֞=aF֥e2sj͒_?[2lO[
;l~%J\1(2I! Ïwj?&9h\3AD!V1b^b G˯#?zضzBU4yi,, UuPk|Kko ʴU>79e;aU^O6@Ou2Ž|
HB9
ՉAd/n}%mP@Kc:O(Iƌ3IIK:{B#LXN´&Vtʢes$\"<cn*%7?PAb'DK;P3L!Hp,*V&d\r3cG?1ܽ}&v4\nIY@]{TIG2Ow=C]}LЪ:!DWBg@koUm߼-kyp0m=>Y%j!Eicߙ˫	a`4j{Q=1#bŃn-͗.]J%'wHbx7FCϏ`emynU	Z%EffbmR59q[EFl;1xH'tD~KѼV7?Qc/HŒg
Y2T$D«@i[׆/_hT̠ifJӪ*YXA;6bGwJ 7ncV-*
Ll;GS _j11aS\j]!bߞ;`Zb7b`-e͝mٯS|i<dqt Wqhts.:j*X:UlRl~:g좓Lx+5[3dK3Д=Y?9哧'A0ެ́L|
9'43KV^ wH$n
EmN	*0U}s5g)H4}>#O=BOK[9HIQ2m6ciQUP?F,]7&Z<1:PY\Hds:߲t^*_w᥉DY Y,8GIv%_s=2'}qT#.FNW8fwպ;7iՏ"C# Yr(L
;-jxrfi:>7􆚌r3Dа#rrP1K^w;8o}h.~V"BwR;+ZuMq((ii)y$zQd'ZEu65Fr:֔WCCzh52X\*AJl4XwlGst4hZ02­i';|_Yͨ;frNl3	ri	 :RnfPgYұ\U+b7qݧ]4v`ZúN
RԁwL1]\WQ<H	xԷ-ݯ"]Wו4ÜzQ[Hb'1æ7ר[{9&ʈr&k=19Nv_/w.a9bO.yuQnKbdKwGp/:#Sչa1M/7WꯑJ,-gjoE!e ʼgO+YWVs!-Q,%gD6(4|a.J⦰pg+=~/uݗj?*O胂0+,'}N;b^]LZ/rh`@ֵWo4O棒b{<xC\GS\/!gKDU1KFyjwՋ5kuڰD@eI+Ň+.{)ݽm\ۧ
?̤S%n޼gYg-J$D|?ӗJ;5Ri]e?/jʫ?&?1tS[.1Ò췹BaRy#EܬDGSf6reB2K5
Q/sn/g.^{R}@(GQ|l{9C֧HpTSnR;6hYrǙ PK3rm  t8 PK  ]z[               META-INF/BC2048KE.DSAŘu\[Ǚ`$$A.F@)$锒DS		A%;X9[fgo}^ UKgY $ ,Ld
AX 4^2hJ/rsWh;A4QNpW+7ҩ{u]m<}Q6Vp]{[{[@wl!$WSP	 0Q!D Q@DP)DS	A!co 
b=1AH0h+niCa-uo _(+h_LZӟXu-+%򊮂3֪
o% ?904BxjUЩU䥕OQT64M|'a1wN2+RO|B2qy1{=Jſ۶S)eH6	%
5=ZZ4KŚ>c]1d%
atkQ
lߩ
7swdi<^ϵQuJ 8[<@`eXUd$RA).Brw,h48yS a ,
N$ǝ9 kd^:8<7 $ؑbЂ=4@&g8骍5MqёdM\fc)?u9As.MkʩszWuWvehBvĝ#G{i^ڱ_
x)(6Y
M;RT\\ӹ
UQw%F1'X F\zg3}7]ǔW	k**eZ>eNskyl~%Cb@cЗߵJɶU#9+-ݲy[AAR@XLX[Ag խm16pO;k\3%?&)c8
/Š 7&3?{I6f;^¥wOm߄tpdA8	4Gn{{7Q8us؅q{	Wc,yObUlZ|Go{ZӸ~|йbX:9KOe`<~V~Đsr^Sȱl8ǵU6`FA&Px@gׅ*be
`ZxÎ!;Jr8K<̆uYhD잘erމV"nE%ܻY',ʱN2x9[<$ARb{u-˖Boh_4mOVU{ M' CT{?i>NsCN1/Hട
7`-+RiL{(TF	XÑvSDgo
VpxwK=t4Jo
20s{]n⺚2є,li_QZE)qG
weު+$.鹪Kc
6B_	<8\9phn=nRT\ٽ;`8ϓ=;_; !7V$Y:y`Nkx9[TA |,YeUقP3נDlaXD`ҴißŊ7|Xiݭk3$tF8 h!z{B\|VZCqni^|rX3RZ쉩co{Qp[E8b ˉÔM|qNYPB ac@ '?`uZ׆0\
5#=NEzxeqo񐢡z7CKUS:_;niFjO,mn2=+E2H?dFzƧ+{_5e^`G@N
'[!=AMR꧎;l~lOцsDo!o:7%}ZIP:kS=k	9KeőklyЎƅV(majC"B\U[$
T+,"nt)=2R]	-Zꅨ#4 A?gϠU1FTtj6sY
ёRB0!
2R 1i'ҩuOPp޲\
ϗVe :Fhj-6Ƽ2  j_?@A }
4ZH$o
'~B,{+|Lj@!18(F]!A@1@T{4a =Ф4?bZ<g{w+0r.Ċ
(OoLC2\g\im?;[z;漏	
/ #d"8 $($,~Li$ _xױpsuF}wA_lq
$ؘ$_TR3J'Gan.ZyR0?eb@:S He!2wsg/۷-?hg"NRXa*dT1Yo~z#JT iYvqXʢHn><>iaCd<ml]*=oIi\s%'vNWD& k?jX7YxrMǁƤxnsq*OTL-*?/h_;hU#&FNCjv{R8 `s}̙ʏ$2>~e83\?d=Xr=}yfQ:VyPHw(kQOxc&[&dx#DB }۟?VD
)}m(YIbHH@_#PUhZߣO0l1ůit@lPYiOyzT(3"+j sX7UξX݇ӹ
7=r%a\q [:y/k_ڌsR3Z
TjK ;ê7p?d.p=\N|h<=$\-=0H
7C!sȓ:
F(O_f` edhi$?	O  .f{YwϜ(֚#'Lnu W,eo~UsR82k(]  -Uxhl&GͲzTY,kn45kdg֔{G( aLcB
~PqvmZ럭/f/h˰`0[Fugէ⦹H~}NW"SL\N
7|>"Я/y/IHU衅lk%e"*IJm-þ]G4psIb)l?ZPw4waObhu2$W)Ol Y8&Z\XHe:1̻SC;x|}/f^><?jxf<(
svc"%/<,62TCujp*>v
֨^$*Ք= X<Cg5ñݎY7t4WrGXD;fYkb	[EA֚t{
_[K#ĬF.79@:bW^b*JXNo#2`s3>>>m7cC긺zbptOxW¿+jR~P5lYM~$(qJ
^5XajA'e3
WǦOm<LM[cGN
3D
*jT[@S7l5Ιj]8wWz68k"@λ9O/UĈ euk.TW;_mWs,IpLk<ȪcRFgR5dĕq/xJz:StC|äF8gn
1RP\8r-GxVk!	F啦޶bRKdߵ"F̻w_^}JnWL<j\b0
˯)Uk;*j2B%ފ =Z`S3{{wCJb?HBs*%]aᣃ'N]ϗm.:*)w!ߐی(o_:}^^D=_edQ׻GYv[e.m-NRoz4$)u
9A<GN;97)|g ed )~
`Ci2owi#Acd:fs	z}9A-ǎ~!ӻ5+R*Nuj*Gi߬b-BB"[jM|N$mzF̑L O{-ϡ4<nU_ub6dTQD;y1P]͌ x	/?wgJsBK"%zўX#VYчxsa"Y{OUv]5pPp!RBP}]*n?]랈%Wtiӆ"PhUcՂ諄~ [aae=`UzŞu!;wFǚt8|C6JR"-z'jVy}d.&MpOQn5SlNV!mi\Ot@4Gj5b#[ļƔm,m~;2@œ,VC=Q'}^8#:ѠR.vL,;u5& ;-"NϷ15+Kc|be?i;LBa`]JZ.D׿Y&BMy,ҟn]l9'mT}*}QI-FbvǙS(s}ʜTQܚ*x8x&*O7qB{J:үG:጖g^^Hc1OE`]YDװ[5-YPɷ14|gCSw]<Wҩy{"긻}۫[;ЈAHǆE#gI܊r&.q Rze_q	=!gUdؾlLfD{D9j}]o鋗oޱW)z{]S-KoKܗ~5~"-OĪAsP@]
kFx
-i-vrn<yMS!I$da;~9Fj9)bhΆ!9Sޑj ZPTx^2,-pmGHͦQ%tL˃9R2mT0,	D _ [G[hvd^Ks_wM΀?d	66I;>e`t0N w>àX.
nLL3<饫^>3yz83w5J]=^8ZvS:-r5ຽO
:~}>[ŀȊ+}

,+ɨLt<܇Sqxr>!Vw!겴ze1#ҋ寿2mEndjIƳy5	6c CeFĲwY_T\w,r~ƷztV3hLbCuxK&4xԀ
^ᚭKD! {\7_;Q%̸> /<J#G6q:jaهR  	r;? @.c((
G%a
nrݕd5XXΨ9t'G@p 4PZCW&!&	[ǴҮJ9g{YȏdB
P4Kz!MCcf,L]VHc\CUtW_-vp\g*UR~3j
.νϼZ~[VLP##n$*'XV&)U=
mU<s_G;ˈSح<fMJ;p*iy{Yn3mst'U>ӀgRe;xgTѰk<d|-GQ	+S}:4o5٭plo$A>YG#C.<S>}9l{Bz7_KҭkiA5Mh5he9D;Tv'6];k?0-u$50<P_sX"4-YZrR.e!
>A|HNyymyzIC!3j{&Dk\nk:|W=?'~1V.;3OiDՑUMOr" 	۵W?P<x PK   C"  PK
      A             	   META-INF/PK
      A                META-INF/versions/PK
      A                META-INF/versions/9/PK
      A                META-INF/versions/9/OSGI-INF/PK    A             (   META-INF/versions/9/OSGI-INF/MANIFEST.MFJ0CAZ؆֖ă 
^<iMj.ot][ڵ}y%*.yEcVy76.y.Z-[Kt'š)Aö3XIhc&O?aF%.l[Oe<EƖWq8gJXw3_4kn;<uN
!s3b!K~b4K8C;!f
OLzƯVLn^ym-bQ	e]DZ@KrG:ĝPK  S  PK    A             %   META-INF/versions/9/module-info.classRAO{L}}'3uf:5A\J+H:!S/urnnz~@=bUXČL*{N`WrjID"[32ʠg˾]b6WS"Cr^FuZruApo!W95gvʞlC4paqkU2ǠFXG.o-8E(~̝m~l8N8qMqڭfrOmsERKk102SB۸b1Yjky9ca UZU"vcꛌ"碳DS{s.;HUWce;6~rӹ?Xpv1edU/ghxثifs3[Ī*x0LB|*Sxm)ԫZU;ajKIx~Bij?j=igq5|'>tm}{:2,v8_Yv}6өV݉^:eG{b?0q8D&ǈIIqYb@,//ooOω/o>1 
{ PKx    PK
      A                org/PK
      A                org/bouncycastle/PK
      A                org/bouncycastle/asn1/PK
      A                org/bouncycastle/asn1/bsi/PK    A             4   org/bouncycastle/asn1/bsi/BSIObjectIdentifiers.classR@ҠE"xAAMzT"JbHC	EJr
3L9Co?(NjSB!)Ԯq::I::PB:èq`>h8U-řbTQÜ
j4~8z,-!,ɯ42	h;v2	)-FP*ە՗\6szbt2o
їnܜVض,?(iqb"Y_E]lS}6IZرǨT˖(`n9u3?=D}QMut39UKh?zOa&[ϯZ-+?=)~
qv6y2MhFh8ȭ5ˬ0*R1Lí:j$[T%sy˩+Uf_̟Tnnz7@ (,9X;jR8q~:H4@\~` a`@*1 $$@Ɓst5Hi4׀p"p
p Gc	x<4I/ QRjf|2vQ'nNL.rTf̋2d#s@!2eee&edefdLȌȌTej2c".#<?)j$JwȬjBvhFۡNPP,tZ*BW桭Bmak&B;m3ZQIV5J}
yقz㼅z㼃zlb3m5ڐz2̅zU>
PKU1  C  PK
      A                org/bouncycastle/asn1/cmc/PK    A             *   org/bouncycastle/asn1/cmc/BodyPartID.classR]OA=SZ]O vWE) PRCv.]L	^OD)ďQ❵I@<;ws?f	ƑbhQsC\g´;10I^<o_/W=]+1mz;L!N޺Viq)<g薱k.9zu-pZ<dϴ{=!bM}ѱl+J\߳#~`%]K7vi}ateb]/Vpg׊DqJKBN	z$2ųxxv^_/*0^|#h\-P/g6tVkŞ:'WIA]hQЊaId
wDk	q] 4W1.`B r&ܔ1U&^N
S2}~1
励(F<D	H`ȇ^GҾΨ@9EQ{kezwlt:n}2#<a;"$ȢÆ1;oaSxTͥOG6ycܯcV$)5X3W_!}A}C
wxPcf(=MmaP,B!~&`fZ9qPK  t  PK    A             ,   org/bouncycastle/asn1/cmc/BodyPartList.class_oPƟlRƘLѹ?9ڢVtb	sD	zu(
dBDq~(9cˤƛw>o{o  ,+&MtޔVCGiim[M?ԵM)ӖU$׆6޴-`a8qcj,4Z|W;0t`W';~qƬ1Bz9V2۬Ec6פc2-tcVCʱhhG@T@L( .@ PdsmK4Mde;<1i\MEVvOuU__#'rSI6sO
	wV܉Я3^*!WyHpy	I,H".ŐƲi*93XY6Y<(gv]Dš]nd6~emdg'v:[Ysqa,?jw{%]Wfc\(p!y#);j+Tg?9%\4!?9I`i6rwQiiSϿt*z PK]V]?    PK    A             ,   org/bouncycastle/asn1/cmc/BodyPartPath.class]oAڅe)R~Pk]ƄƤhZ"
R´	?b/QƙeKoyy|+U<$]g	vfͨ8G6i5,aƆSmimoW`l8E0QDl-Fm*ru2áͭggr#+Ǌ&Xz{M2G,جY!Ŝ֛Mږ KKP$$4կBn6*4ة`S9<-ZmT/BW5~cj4]30(Vˀjj,x
"+pY0 ycX1$c7d"BVe).cAS*Qb|K&SF|nKU0G=7;$O.=nt\<FRBS&B=!/`pC'.n/TJ0@g=p\HaΩtKV!N6+1WN0UTFoPKYH>    PK    A             1   org/bouncycastle/asn1/cmc/BodyPartReference.classmwGC,DM} M%TVbBD:,+n,|~|<6/<==pŝw~?3<JA1Чnmy˶4ybmʹKJ)e.1NNxN5)M/݅NF"Q1hk
$4SZwHXN"0<˱r;Zv9ߍd*,*)\וvdZ.>0
at7\.VdQ-'N6
Q*fBd"_J.w,yꉃEpJX!j`*c{fͶOrU<m6~07m'~pL{s^:ts:Xu`GM) *Zq!fG9"#8sx$[8x]j4ۋ sZ-}R)|\OsvVӽځU4c"a{R>>{Bӥ|k&^3}̩C8b }*q^EJ3TU(D̫L \B)i
Ǣ)|`hX4Y3=HsUY9;%
|)W,
CS;X.0F lr"9d""@cXoΞb	GLpH郿
?CrA/$s<&_9 go d!kPn4(mb')mbMmd0UB7"&֛55qSAZ-0I3-Ġ9pL*QZ9B4 9F+rBm9d S?㨟1 3t*Y^^/ˣBrhvCM|ٹ,PKb  B  PK    A             +   org/bouncycastle/asn1/cmc/CMCFailInfo.classkSdJ[ڂmaYԵNG;t.nlEv%%`{_-U2M_l墔a_N? m-KuݒPʦ/k]P'PЭU~5$>f^B9)2SO~&[%4R4SSzvFBdTuד S0nTD^4ejK됛\OtYhDFtTrqlȴ6%L'{H4f&?KE
,fgؖQi=K۟ИVo9h
a&Қ;5$4D,g}K:)c^Ų}
o|bl1'4׺H\#ysDOf&cݵi&3!{n8U|Zڡ~z6/1f
*!xvuCǥ֌e/XmvPHaM(&o~`;XM5׫QNpS-©NpGNc2ZdqBIOxRS2gzddT(]Mc]#іGhR;b;i݃3io׽k/~5AwA/awm}>#hGFE'qME-KRϢ44b9rKK5*X*U4bHEUeuGpSE
FUŘ6V4nfye
7Yb6;,h,,Y
QpS
R2b)py[ac ,t~U}
cc\4uVArkV
mChB*=ӡ=ОX'EŇ*5E'(6>w)A9 P
C\'| _VPCTwo 96>lq|l=6Uڤ$|'/HI㤟7m"+f.Wܡ;Hnut_܇'"Ȃ -	`ň=+ۈ-GE#vQ$j.	"'z.}:H _Uv@PFXF)? ~YZFYr}% +ed) Ked= e
[" PKRh  	  PK    A             4   org/bouncycastle/asn1/cmc/CMCObjectIdentifiers.class{EߥeB Q셀H<@Bhaowr{!aW{G%X(;>A'gߝwf\O!k]+:AAbA
Z*FA$QPBrAIA)AiA+JjAktuEA
(ɢ
K,H6W5&WMH.@
X	5Z݋)KK+ 4АBC

)4`DѕFWt?h>KYMbS|OmhCwxn(fV7ڲVEuq!'RG9WvJX4Z.4Ձy[99y,#λ\_q	>/P59,)]
b6Eҵhq9ʡojM:pII7ۑҿ:26|7s>ϱ+u5Y4rW*_mp|}z;Ph+/6پy[u3|ы+WUY點_'<}큹3-~_+Co Ȑ>H٪]<k\)F{Ua9IAod],Y4ݤҺ#'sQNҠwآ!;QB#? XD>(ΰcG(v'Mʐ~/dhQ:̶̿G5ToӲ:}
mV;U:W8^L]Kf`p;lZ6`t Y`;:Nv=n`z
p	`PTKHMTw aN.n^pp?  0(8$4,<"2
*:4*[MbrB\xH&9;9;8{9p͹Sr9snppnrvsvr8mm.gVV6ν898pz&W#FWCDBz&F$>JǠ3zv~'ЩFN3=I#ЙFGӍ~	]drcvNQw12JA2tO~
bhϡi,Ag:O:C ZoC|B=K.4yVZi PK՜  	  PK    A             2   org/bouncycastle/asn1/cmc/CMCPublicationInfo.classU]WU7_X"6m5iCMKԏa2a?S}ŵtµIGWs>3w0
g\	DCQr#Fc<vq@w6lJe{Md(ΪT][l
yN&|ӵc3@;,[A9w* v{תzoWmb9ciTLl*lV2^yuv5^+0TBuյZfͯ؆YsGL4̅=GUO/,Y{KU
..W l*y8ZLd8Ɋ4{ˋ+K#WRs\w;#yS\t9Nzβ;Ol	ED[oK#8+qNDD?iF ,c	BW94_ݲ#{=YSǂ6F`*O382h gc1Gh>m6j
'>L F$ٓ
g%P7p0uVс1x_E7UvUblƫK*0B檊ӸL#,)6
W@CDl>Uc63l)H▂aU(vVW09VKC+͌r	;D0UHЪkxj̐![1xD1]Gj$<&#B쎎b&>?maca
HlKd1Ĉ{DB <B,ZGTo|7e9:0Xu|7TG9mK/iu:hQ|4N ~G{i!-a=
Dqp<3D$g($Lޠ_p1Iųz㍚#Ҳ,2UA%X%7>$nz<Q	hyKQZ~<L59PK*k2	  	  PK    A             )   org/bouncycastle/asn1/cmc/CMCStatus.classksV_8!
vL
.bꄋiEJdI))143N]Y4x<yZ9ҟ˰8-!/|-Xj]39q4kUBj[k|}FgM&;I]nҊ)Z-	V',U jN4_d
K/Ĥj.W^ϰ-	㠻+JQs
KJanYHYXvwۥLcVlRPE3hYD4s
:spTKJOʎp=CTnc;POR.uƣk=w5glҵgwZ|kòrvPMΰr];/L(0}-/999YFd8.c@Ơa'dj;EL)!QFFqCBmϹ!:vAD~?a5q9{x
R=SHjڇLWL|^{;Ac9\Q 㪂4)QwYRH$dqMIﳤ02 
z^|mȠ
M[,|rr,np?沸=YLfYҧe<Gb+GQ7P?+1
LCڡ^f{*CC;ڑfyVdy\!-CBV'ibFq<)x240F?P(o_c_Kl$@6\hb
uPچV6!omW%`*)cTF/*O{$| Y?
şx+)\Nfqi66֟ID1RFl!f"ֈY!b1&xOnҗ0!|Y
RYBiEE!
ĿPK*  v  PK    A             7   org/bouncycastle/asn1/cmc/CMCStatusInfo$OtherInfo.classU]WWC7CgiK12J[+Vh/!wĶ!ZO깙!A!4as9~Ϳ/0{|*!&7--Y7u333ՋE%Dvu]̂elu%宧sÔh%[R}?Ӷ ,dm,BP3a=Iir^keΛ%	1TH8enjgilc[SXg[3J)9Ykdg3r]9&37K~LREm}ņFڳ<;H2ȝy̩xQc
C/Q>~A!aF>Wڒg^BaDT+E z+.$[mCʠm6m>cbPGoqi?SF.g#֮iAS1R
P
FqN'HkF.|	R,|
_ 3÷2ࢌpI~qEU2b5zጓ˥d97Kj}Ux[]8Ki;mȨ?V77y}DP+dqs(a%
@J=F
7+h6kU9b[5Xժ^dURC/
B?gMuA3Pn?#T!v  ,DcTaMK=Œ6>h'
${'Xz
;sU0h b"_GUP	X4bѾ8?Ԟ!W	J"iT1mtPKZK^    PK    A             -   org/bouncycastle/asn1/cmc/CMCStatusInfo.classVYSf=&[ȡ,)MHRCCRI
@"dŘH"SOxt&^@g
Δ6<4M]'e{+o $vx"EG.qlmeDf9WT޲9D9[,M9;Si7^}-[Uͬk=Ag5Lʹul388Y;DS!)VI,ɖFATI=J
ZN)
M'SM;oK[*]RL㬲Zɹar認u+!s^vzjXǅv|Xvu&S
* |AdOE.ԶY1BѪf`$͚J`s8vzb4mgyˣ{<8}G'wiC.{k  FpռU{<1URгON⥡aІ땆eQC6z>ZR;|գAD<\/d5|C]u_*#74ba&4ԍ7H$wZTu5-L,_E.\
LEb8"m(c"zpE {Lg"ħz1# i&>Ї)q|,xĂ 	2+R@
Dƍ,Ņ	mO19^P,Kc_oHPO+mC%&):pZ2*Ml8 -w@|>/$cYǒt.|il(4CfZ"]X}5T8k|3d:%9i,rppA!*4^:pM%ad;BHDcm'	A*#)!=Hw=n1@LKyXH=D,,|t4WDvۮRF.Q9F;C"n{ZHTe[uwfQ_1ܤbҫUX&ω2RGwKȻh9q+'52ox[0rJfKqۈ+ǻ]?<kef|rÕc37PKCy    PK    A             4   org/bouncycastle/asn1/cmc/CMCStatusInfoBuilder.class}OPƟ
"N: D6HH%u]#mgMXHCےmm&s_ aˉ<CpbVmU:;8.XVBLܚ>վjjU3q	ZvY-Z5S?5ǭ)56g|n0,e޿ȹv,3Sg]t,-G2v~2VΪǜ]޵aSV7Yr$-[ӳ  
;׹TgP#\CܺV5+vt?L*iŪDϬ2lV6q8)'DG>1eݣ+LG:ڥsAY[acP1;xFǦ<}m3o{6N"/9	%a$ܖ\qye)Y,ss$D
"1'""X22VX4
;SǠc:ti	Q*>@dE># =?$ݢ#SSx$XW.0UXiYW{	Z>M
lԱ|os78pe.6b>syktxxE*RķPK~b  3  PK    A             /   org/bouncycastle/asn1/cmc/CMCStatusInfoV2.classVmSU~6/,YF-*h4RQi-(X^4e
K.nO38##3m3%MBpν<ܛ_ و6x"9slpK7t6*,%31lurtVf%"Fi`+K+j4vfCw?m[zdv EP@RpuC5-vo5O\ZQ(bR|^)a+wf!aZԒnRZJ)}{}d8,92nZ:n2EǡĲ/u2llAe_aK>(uUMjO)Pskb?v9j	-UMV)K_m	Zl
baR6xqG;7yq[<ߥA5`XU95pGFxb2eggOmӥpy. z.{A+ZQ;7ȐMͪVL5QV8Yy>"=47OZd}ůB7Nњy]]1z
_=h%D4]'"":.D4 HXD}@v"D12,#l5xI|'T@$#	q|#3Ȭ 	L*kR@
twCfiaL[hKSO*k3<!ƲUpJ0&o]pӪ_Fw ]AFJ`^:`VOit](8{ĸ"z)],=23*J.B$\
zoaȑ#*爻/	\f`=ц $OG/tFHڄ^R-9a7,l;9~U$#Fj$P9Dq33Nc#3
>Mw
Z gn"r4E&y70xB%gpbIJ⊻=1b |h/ea{}ܤ_!- dFFosCtϢoЛzBfC3Y*4Yn-9EAE< 7<z PKI]"i    PK    A             6   org/bouncycastle/asn1/cmc/CMCStatusInfoV2Builder.classOa*'t)jW8´4MQ77rq\-dlG>
Γ<{}~	 M>)v_+{a0gfȕ<C@{ڪ]BgU)Ɖɝat̲ieuE**놦3Lwe޼]ڥqLi5%Haxo>bXn*A/5fSߋnga:Fޢr p!z3h4iak.`[]J&:,ubwC\143z
IǞY[]Pe)ĩ[7z-Kwm;PKvaƛnq(7й2cCMo_=h.nsPDE㦈LqK$\p>\K%DA!%Q,1A%~Sf^GB'O ŧ(ψVORJ
`Y:.W"+x"_`h$8?u)´Ouѣx,:0Wt۹nF+׏{vƎs*IzYbn?PKh    PK    A             /   org/bouncycastle/asn1/cmc/CMCUnsignedData.classTRP]!XA.

-
("
mZ-PEcHc
/xyRiSnֶk:k LY3<
XMsTI
3P,;د4lͰ<iɉ$RJ&J,V7bZqv~أiYf;Y=
n*J0`,J&dw4Nնm4FM+0wuOUvF*Yc2Z[pJh$nQܢ9=V&90ʓO89<;
rbd9iCK-)B8EmrC	Km}WpQ@t
-a(^,gƪ
?ykY~GG5zӥZ?Qx͜j.z/B,]	f/}l=)qla2,?_!5zfRЌA	p].%
$aDB|;aL	A7[mS=}0+*ypÂ̉bQ݈)nيfY~]RG
@:GZupÅH)
`*pMSGDGXG3{pIuQbMvdch8C,s~vKOͤs(?f|9<G%C<c%rbnz$+8
ӎQ}ɦ<<1#$ysfw4)rn\&.EIiPK-    PK    A             6   org/bouncycastle/asn1/cmc/CertificationRequest$1.classA
0_*=Ƃ7(.\
)Tj.<7Ǽ?
&EZ9͍:-(]j߳y#\ln=H[6͞şf;f*CP,0F<m
DPK[a      PK    A             M   org/bouncycastle/asn1/cmc/CertificationRequest$CertificationRequestInfo.classWkSg~,KU국5*hH*"Q@J,5fdv7Tޯ/L!L^>CQ9
60{rg9۟?`_w`wt`@7⬀`$Kn9mwCpq8F@f'ǱLl94lG1Tl],h*qh#Yk
S5^&yS@y+)cVl4jZmRQa[M+<Y>CvN9܅mu5|5FѬi$¡eY#OZNɏZbA3;7xشrY4Իb;y-`|4558NJ&O5m5KRMKAnpF?׫C	(?u;e+|D_&<>O-z0چA[?%>pNbR{
QYolsL.tG_-$bgD<+9E</ "8,[D#ibJnthb0vE&G*E%ag^$'$Ԧ5K6Mlߔqv7D^!G6fG2kw
<IH[}僝hf	GZZS]hxQ?k۹stSتAwvO'u/)K(џt:>ϙ*$>BjhxM+ߌEBS8+#dDPQ!s2v༌N\`s"Ødbx/oelK2W&^fJjF
,ë7$u	xM	qpS `Xp%!-poI8	UPYa!p 4,^IЬbAQۓu0 $U|JuW)h@d} v*G:]B	/X`wP\VwW`FI+xc,D_14ٷw<7d_`
V
p7_\)On?,4"tO8ceU^P/ZZIs`q/U4FufMUǽXv
=e$џK'bbKj@Ô>7+=7vP1{AwSYBJX߱}>}8]Rt?tϽ3uܟTq\qod|9:U7PKV  v  PK    A             4   org/bouncycastle/asn1/cmc/CertificationRequest.classW[wUM;0r+ $hZhXDR1P(6X	xNaJ2Sf&W_(*-ˮ/uI\蒵Z9;g. EhDӮD/I{inՂn	NԤ IQUͶXsT;Cpsf%C,GUMcJVl'm̚g-ZtQRkΨXLlOy3sJm쩎N~FS-MKw_/t9K3]=\iPҼ`ӚeӚl
մ,co Xל$t3js#H
Z^)ZRQ3*^'f̒.b̹dH&#/ 'R9eM1MA켥uG_2FNOaǨE51Ni	hl¾AE^H&*V||bZU
kiS!:E"DO~8 """*"&`D5B\Xԣ)[#kɧ77PT+_c|S BsuZ]Pк$\*Bhr^Zt[3FsjrMH\$sN)rõA听.5RnAmۯc
-?\2ݯ\%'P&(?Uk-^FTqF~
b~oFufV[пqh	Cx\F?d,c+BkafT.dtcLсqxBfwZFɐ0ɽ2S<zA<>ӆ$l.Y	p/p/DaJ⊄MA1%cKU6E6<Kq\g|kXh[z}?҆YcŶ=(ճ~ܢӧS;YWunK-NFЗ .~VZl#C!aA)r;oM,?71__}N^eqoҕ8`<8l/|N؆&I?~Dr)3:V(
Y*BTR#l#l}]W܅~`mAaaщ3#/#v⬏E0CpJ z-q<I{/e\SwI}x](GVI[=l>JJ&ɶD-en֦vǲ:& n_2p5;3UeV7pn<>s뵉Kӑ~ċ'PK/    PK    A             1   org/bouncycastle/asn1/cmc/ControlsProcessed.classTOPM
8ApLk2EE&xX20cB|꺺Km!O<:eF;+L] Br99߹?~`w;!pKb>1gڦӒԊa[jS5]T4_6aFC_3p *ڞf=_iR|3_nlUTKkjѲfƚa/uc7Cb凹 DCaFǃ0J´D;::gT9$Zr577
xty8#F3 4,ilؒT̶`XT($D@ƚQԪy^純mNGeEv}fko8eGg^D΋ELDqf.a&#\B!@V9H(̨RU<ESkcv]0JjKê )&?Fkuy[{4%0
:/FHA
]W䏸:Wo&#KbIaXqLLb=_UV;ADa&	nH<)0N#,6RJj.qo~)5aY7Fz^nE	 MMPK
  4  PK    A             ,   org/bouncycastle/asn1/cmc/DecryptedPOP.classUmWW~n,PJ_EAMvC5%Jҷf׆]x9psQmg)ɇ;{yv{7 ҏ7teW<G}9I<9z%(nU*jٯl@sa|:r y.-vhıeV
pdKGcX_gkU&s=J;?n85^w"³OY՜UՍ5Ǔlg]'Y7<{ӶVݛ1Ň3D\5g@`<.pezU-Wl<_zL$5hXαuTZc:u|P]zw@tkf6Mq"YR<(;g<"}L!p\>uWpBIc
Rw&%GQ FIG+BoD.H+)#uH.U# O[Z灆^viietSq(Znz@lɝws=wj_WfkǀALi8SiG\HMRWF0Ae?`sU06ULஊIUÜfAdc@E
*ҸBC>Uq*.+Sk}oo+((kjyRI^ro-S4VtcX/FW/	erR51Q
ԍ7d$Zk/l#$b
F+>AHFIjn}͎13Cm	Gl/m#px{T,U"n;41YJ6`v%MJW6.
|R?PKUT    PK    A             ,   org/bouncycastle/asn1/cmc/EncryptedPOP.classVYWV@C6M!Mj,mB$%"$ScN}N>GjY<|wf\?;1c, OrI@8X`f/_`eͿG-`/r2l13
EBM.2Nìys[|N"{|c)M9?7Z;f=GN=|r󈶿tVzK_隭;y-mf^S^~`:-p8Ʈ}32OF8`l1[@یYNje]45pk vDu9(nfF.`0fZ&]ǧ1
Wpsܛ#5C׳B:Gxk2i$<OߥF=wץwyU|׍_[WD\>@5.#"h?f9$.{b$	@
R.gvI~qzl'8su\è&[Uqx<Vԍrͦh>={7<~lGJ>6ROhJfQOb9[9KkvwStʸ12˸Od1d0[Q]TFȐX,R,&YLX|"JcABs,%(	bE0/aK$aY	Q=,KWwWB׍"	0@	
GA/KV/w\tU5̈́t':%xI[J9uϸPA<+}lPsE
WmETmUE65E>l"C&Rs_Ш(\qw!>/}#Fn1jB }]O)BSFOZV9U'VjpI3CDШIxM«F]T(Zl n#YGrŤS$2gTs땺^5e-r+ΪeQPKO  
  PK    A             0   org/bouncycastle/asn1/cmc/ExtendedFailInfo.classSQǿRYZXIJ3h68˲\u1X?^i&r*}폪EP's~9sv)ěd]ehMz0ԸXisor*3֞3UHZU"ghry܃*G	`Td6m5bf60UX>[;߲0g#\kj2xD-XDr5mPbI=H"CuIpmlCgUM-߱irЫ[6$#UBv	n0,60(Cow^Mf6*@@Q4Xk
O'\!뀵YR$M\3i[׫~ь[2$ܖq6؅ː1$aѨ7QZCH݈Ћq0B?
sO.`E}aуI5ORK֊)
^!"PH	tcdiO|Rc%%@0KȇǬ#<NyY~*!> *2W0,`D5x5j]4+G(0=_A1wv_*t2J%kn O+i&8a[+hJCѓ+_0L9M'xV4HߝSm
6PKM    PK    A             ,   org/bouncycastle/asn1/cmc/ExtensionReq.class]OPƟ
sMƫmP4AJih^%[HFo+Cq[FL_9 cau>ЧӎjnC,csh=|ӵjqmöYkގk̜u3_1;p+
=[>gK3֦]zʃO|'K%
&G&Ͻ95vit|gQ/B BqaB5iEW˰<ʜkyZ&TUʹM=R*sOsxSUԪR˹^ Vazt3zP+ZaR+f&cϪtD2&}nB%\.?T^TɨA8uh.2Dp庌(
	ЄA.
Jh\nIh.tIxtIcoZ//W@ac5C3<"IDf@
Ӿ"}GU-#g4i*C" ZgyLpBBsQ;¨U!e|Aю-<&X-JDq6)$ڴIǔ&ޟ<(ь	ED
X"HR}(ZHѼʩ#-P8PKp0  p  PK    A             &   org/bouncycastle/asn1/cmc/GetCRL.classVWU6^X`b
4C[)MiM\64ljT'xg<GsԾu2s盹i{/+M:rEB0ĬiM:Us9	LK-]BIdFIaJzk-A&+Ud,$kΚV()"Tҿ)md `fCMϫOnO4m,	E#Qض5dZsۦeE-P-9u#OFZŶEҋj\!8x--FZ,|ҶnϧS]{rur2FOU{8ݼj)V(Ev8`Es˴:k^g8pa,30,!:}M	51?
g"޻3◣i=h2\Y@ʱp&"xkSwmwjyx< 7OtqMcZ[ƾfOµB2><bO6O&]节qE 
&)PЍ.!B#Ļ
dL+8¼ kFAnqS[B	qwX2FQe#!d###KP{B,ˈLaȈS"c>\9/j祐ç8+ 9:DInny_=dVh"#EC
>S`$;(ٟ<ֵ|CI7)FctL	 
A7þ<X6!^D9<e|/!!t0pFFKLKa^ib&_`wZ  }}/)"C7kNhZHpgnpV}m^i'=FH/V0ee|*MIh\U\u2+fce4etDaPKT  
  PK    A             '   org/bouncycastle/asn1/cmc/GetCert.classT]SP=-T@()@J-P3u1
wj0M1M_3B;ǋ(uo[>
/{͞ݳ{<$DRU%}ѴMwI@W)tSPdΦc5.3܄+O4sL,2A_tHРiy!hwsGv}]t;,eu+d9ff0wZ&_^p-{JK7R˲:SCr&_cm+!ƘljU_zk"<cLg"d"*GD@@zUҖl] ebUφvW"Ͳ(=<LQR&伣$]=cqq*d0Uzi'.,S~7Zv@<qԮnLgSdn#=w)r*nhᅇ[2:a"F672|PpDܕЇI	ALq3	$70Y"f$<p+ԥ]x0!lCG vF@:30(zǾ讠o; F=GH#y5xGF7U&"$Rcup'P<D=$j8C0!;Bѡ~Cжz2VKBKz3sV~BJ@O:
ܱw/FQ
y
|񰌕Z  PKM8    PK    A             /   org/bouncycastle/asn1/cmc/IdentityProofV2.classT[WWN2aDB/"d& b[jSؔ^0NV'}_kIjjQڽ3d}vηoo~IaH -\HlnMߓW\ߕbŭrH#~MZ-;UȻԱeN
gKGcf
?rr )l<[uHy$ѧs,b=ϩX^.V_ν@s9X5۪I1?ew荲9N
tF5B2t
ٙWl$pro܃NtHu(ӮfLqZً{s_dRׂЕOQcס `UCkc"ӠօЭ}N(EUpHG+D
>Sc
,^VHQײiZj?ԏ"GQjeݢ,3Ҝ٥O}6:-][H{Wz{,)ХNwM
'Я0h8%bRkDBAAY
1A$ô
3.C%Yb7TUpqa!b9i|Ru*|"
:P뼵ט*IckֲT%YEC	F3(g7	qieq@?0hiH4p#M,R&u.ֹXǃi	!(b
t*{3 {xw׍1؄^26b}[,A#AAgz j۞ׅkyp:Ew(-ڌ&٩&J2Rll/uxDnR#)PKJzk    PK    A             -   org/bouncycastle/asn1/cmc/LraPopWitness.classTMOQ=-LPЊ)2"UE5j:4eN"XP#k0Q|mwwy?| ^t2#d>eh5LÙg{켒6Mm[SKNAWԒ9hhӪ$Bd ug_IA,9QvMל:*9ajm \_lt*\2^5uKU
WWv~sC7嗚^td-v!pxC2CgaFZiu1,eipLDOS+X\\66	\%4hLγ7:xƱ
3W#IFZl4CTE
h˷wZqǻWzf86Rjf!T_yĕNHhGHBHJUfD׹@Qnd}!"qfI)b D)<r2'|
 =o.JOhՐo(9pܑc㻘zT:0M0yc{۶>V{X1? b^ag ;\:{Ao"XÿLT̖YC$B3tm{U*Z};śO~H'sz@Պȼv?cG	%~7 }p9D<q>WyrSLMPK<  g  PK    A             /   org/bouncycastle/asn1/cmc/ModCertTemplate.classV[sTQ*8IJ-I%@'-NklpUdŨ +?Gxix!iveiS+ov=_L>a㪀x:Ǜ˶kZMa^\7]6̖ e=SHQirvӉZmޜ'$
wEӻAlq]⌷̯7Y9޲VѤeoXfF'[IzL0zcέo6M[07<˱L8n=l=Coy
3\Լ4L8J8g2k
B9pnL+R
kqxIM#3t[-/{_Ved'Cns=$sx㩖6Z;Lz_@g5EqJĘgE3"Ίx^hgQ|*aEw,?fҫaa*΋hHD>r$jg\}QYtec1{'9Nѣ+њsõu_лǉҿ^jӕe&.ɐ'1*pY 22L5i6\exm,	(ü	+cXp7ޗ%M	)| a$Q(J^p`Ӎ;F+P NSU}I
%9 	5Bv)!AƧzi%66V?}\t=blvxc,cpQoXZ_x	UK>Ӵ~[3)5]!`p>Ha*u3AzӔ@0eK=(Uu_al	[pqj}ID!#a.G(ρYƕ}q+bUlc5q;e$C-BrƗQ&Ҙ?PK#{  	  PK    A             (   org/bouncycastle/asn1/cmc/OtherMsg.classTRP]!XE^Z("ZoE h4`I0
'>8#//>Qm؇9{u4?}`%HqV MqhnٖwVlV@s+Ӛ	twbI4[7JyC<ϼW;7gV)beV-!ץ-f pzGymY4یr9rc`^n,zc8sl}E^Έky{(>~<$63fIqµ%(,oMND%圪xekǴrSg[ǻz9Zg-HI+an	%#pz'vgjзLĞw\6HFtW0!"!j깨Ңn]]YX~fEњ%{&+mRb˪Tf445afW3*١\V^!+8
$Rpha2V 㬂6Dy:0.v #Wd"!n82ᶌe0pG	ܔ]bd^ד;TtousHQl ÄhF A5W0[C#|vtG[dtm7-
xUL,XOZƾ,a7HHT#G%a:FP<~G=o?D$n`X݄
|F;Ծ
Lo`fX|ʈ_L[	7q"+IY|}h+,;VI
TI'KiPK)`>k3    PK    A             /   org/bouncycastle/asn1/cmc/OtherStatusInfo.classmWU7ްY
>вـ+[ V)>$KXHvB$|EHrN-o|{x<fS3̝;sw9ADw
JQI>f<fZw!4IVhb$f:nգicg&w<cqZJ^,.Cqt+a0HHÇV֍71TnVfӝuJzk禶F3mdMVJ+'Ui#'T.cX1
pbZv2gbNBw5M,lS62e%줾&6<#^f
')l13gnQf]c3g{l(IhXs5\u#9op<˹>[#KC-Yq}aqlg$L75[YS'znjOڰ'V.U1lZc[9.sstp\xor6;r\xN.smyr_փv%2})!k	_2_Uš(HN\r
ѫ#JOdDY</*,VWURx8* ϪPG9ZWbg\;q걣p==obMфOd1"2.AFc2+Bnh70.CM
)2	_4a_
1-Č%/!	}ЏY!ⱄ~GF?1
$ᖘ·ZoX;!~0,a|1;I/fjYbcF>!: h@hu(TK'!jш EP}<͵]\
C|-Fa'."l( }+@'_?)? TvO1}lO x"Rm 3Z@֊08 Zj
@'HaU\Z9"LM-|ؠe?*EOjEe"LZ "վ={}	=42_'x346T6ڙu<ZxЃP+{
PU/ڴ\PK{?  
  PK    A             '   org/bouncycastle/asn1/cmc/PKIData.classV]Se~P*(lRRm--5Z$
,d&KGOx7x302zs]&$e~y9r `V4CB\r+e	-iف3iF٬YڵLE
,ZҎ;eT97i3nlpuouC-Gzv.g?)moOhZ5h<
5[Wi,S@W	zF5֖mkjNQ5gFc3fiRTG3CJYygn2ZħU[YT
C_v6eӡᓰ\323n[OB/mrJutslϦ2);T%ⴈngD&GYDqA̞ԸH-#>r2"(';-A:4*2H`+,;z8#k ru:?Ryk*ݏC)_|t[q
p-?mjzĵ٪ [
f|}sAzԼQ|{*a	3nۯd_HE7 PiWn̠:}IPd",CDDE\ы&~8@g8)eȸ]mɳ[<ͳ	M=0)f8| 2Џ$Cs+
H=9,pX$aH"!!OnZjEFȁn$ͺ[eާVf%%Ŋ\c}IEcm?آ0@s?gx(~}\Nvy<5{/^``Ng1L&zq{7K=<J|~xW_I	Q*EʊCYq).CIKi튔eRV
_^@^,DTJ߸z2tKo(sCIe_;gM;i~	<q%)>G_325;ªY%g+)ު(z۔Ԝ߁Rh<>΅}_`E\Nj-5J(żBjR&ԂjVR6xL
PK4
e  
  PK    A             +   org/bouncycastle/asn1/cmc/PKIResponse.classUwd~vMednXd ؁]ǺLzv4`6/0?G6Z_{}i ,0N	&nszղ-ТDz7ꃇjVJKja3_tJE]/nKwlT;+'LvS:ksvOk[O͸NQΎ;qt*hOTUTZ5Lۆtcǵ[@©-gֿӵ[5RZݞOe*	WANMtoٛұ<s<Zpzz5z
F}Ǳ$+iiTh.9+GIȐD#Ý׬m˵""NxKĸ3"Ίx[Ą+=45Oi6W:_tkm>4S"j"Q@ޕkns>r|/k<y}vqi[f཯"=~wTL>]~77}L
.e8e"feLbHF C\F	#!$0d<F
n2bPyܑ0	bQ41H>fːHN~ƊvJ)F0&
&'Q%?kF	Cl3VXOA'|9*4$(9%lKJr/LKg0$"&RKd7-ЛS;b{ʟ"VVHyD
89e#JxdO(r;!f6<
<di\' Dg-+S/q)ʡVWqɏ}[}a8E5;[eR|W
	f++.>
qPKGE  0	  PK    A             (   org/bouncycastle/asn1/cmc/PendInfo.classSRP]D*/)XPPX6a)	IM#Oe쌗(u6\C_9'g{/_b%fo45_41ncC`B7ugSV
s1biys[SO9͊fnyI''kG3:tSlhvW#pQOmeOIKdC)F5IS[DYv.i꾪CK(Es$.kf+i×ck@k9v9.뾂!\?Z=Τ.ɧe|c1t^ :HٶOmN{P8kZfWl=;&຀!7
h.CM˞dh.$h4!R6
.1r&w3P3i]Yxҳb-zS+Yd}I֩pnR=^'QϏuRm%=	w +A	 CD!p"xC]x"DŘ00)<<aJD/ÄH~2kmҔuugQ)<BZ!v!n ).ѩ^~+0'ǏxiyO@O]!=qlh*k=J&ǽGxqGH:q_ˬ+ǰL'^"Fq_D> (G@2"12%,S1՟щE2zϘ.%-^TpUB+@2~hBE?ר^/PK$    PK    A             0   org/bouncycastle/asn1/cmc/PopLinkWitnessV2.classU[wUL'bmԚ&a6T[6bb04LNj?ɿ2%ki?JMUx|ۗsw &@4۸*KkwIagʛVB$|GDՑy.-&/E޲}s^5]]M IE>A֟8IQlȺJǮ:9oaHC)&g2=˯ys[5ǗKlgSOy7[V;VUs=m۪K1?gJ(sZUN.p{%~+uЛC)7ǮJYpWfz]f._Iߺ
뙹0cKʀ[	ݚ+ݧI5g+x]
T𖂳
VpN`0\EYL*:Mﻏڱ;2:R;jLUq0,3/9WsGyAyy}uzn뙒Fpߘa[<F5%
ADCQ
"$C#q
'겆$f40ٝeנa
qCIU1K*.wqa!b9i|R-{*|";T:VQ6;NtRHqCJqOmK]U ҫ_7bdǍ&>52(vQ4.],Dn:IG8 kaMDlkFf.5PZk$?8]Aejxo	Bx}&;b1;*$
#Ư(xqq{|{e|1.$;T9ăB35¶ȶ@䶐.g#PKj08?q    PK    A             3   org/bouncycastle/asn1/cmc/PublishTrustAnchors.classU[WU& --PZҖ6(m2dIW/>W\KH,Q_|o/\Kq$$^>ogo3??6DS5;/ .cx5Ygb{cyxaʊ YwB}f"
:<sVx%
Egh)=0GU𒞀vQL㌹1S)LW@MuB1-(.q͍I}eB^Y՟隭;y-ef^nR4oa{V]u[y>0ZrZTq^lSΈ̌Ly+z6accªd<rTVs\!ǃ&j:bcVrU.̹rԺo
i}KPkO@ųl-k/܃@^˝uYL3".DE\qIe}"E\1 ` J~-Po!pXb)'>>$]DE
az-rݿ	ȬC'@-zUJ0$2g)gyoR;P9qC2%8EhWG,`i_];-Nd\-n˸ve BlDoGwd`Gwet!!C=gsHg3fq|!(f%f3'a<a>04/$hMMV0f$3%Cчg?k,FY?JҨy*#%} B+U(;̪U䶰naij6[w`O0
`5*V2(|'d{Uma"N6!""Bp>V"#dmCбhK_տkkcȱt_Xک7nI .)!ڔ_T~GY7} "D7䙡M8@	foOFۋTϸ$E5̋ZUOaЙ>X=Iot(}<hP6tT!j_Zg~e5|PK/aA  	  PK    A             -   org/bouncycastle/asn1/cmc/RevokeRequest.classVSW-,,HZ
FX(DKKHԾy`v"]>vNLy̴+͆$$sw7@˱K@o1.R7~KݖcyP䤀P$x4LRX3{RBuZ0z]@%mSȪ֒fԈ>ɞhoPjI+Z"W,L4TzH5	-3vXSxL@
GFZ"1z,,cjdvP<pvmZ
iM96]Qg@DV#]4zH2uYOXh6fDF552G'Չ|(x{Vi	J69s1Ss=cp=I)?nĮA<$)_yRNS\dzjɍ
ECam&~UfcG.IfDgx 5y
[`Ӧ	t%,
41m$Y*_Ss2Gߕ3JQg4Oh"hWD}"8 YD @3AUs@SFT+favX
8۽[wVܕGUr[O{-M^!S[[`3dUqr	e-7mꮰ|z}fi9լ	ydehOgNg(ǋ"-Hf
8YiVEo Eonl1oi?2;J+,bST`dԣKAtP#CB'Ï32DRpLF2v,؉~r{2ZeT"q&0U&3yAL&L2ј%(0pgc2-8.KhdF	ę-$"LK5	*C)J8J<zz.jS:}zwWj9uj/|%w5Kgq*ũ=&I:J"fe(eR.rhz2e+e,,OTOoXc{
>v6=TGX;*|9e@2k
sٰ
Q
wKxRkφ}D9۰=Q5|nHDw?lGH=Cchƪ}6:@|E+\Rfqe
%aiçf]1C-qP[KV9鵁~[]gI}sux9)u5Pϥԇ1h=Լn}[0O0|>e^>>~~F\LԮs|/*GHc#9ZHuZH'>ۼV%I[:ƷW;d,~8*YK8l}gU|-1ZEUWPK%O    PK    A             /   org/bouncycastle/asn1/cmc/TaggedAttribute.classU]Sa~^@W4?RY5E%TT*ʯ	necp1Xt_'.QyDS@99<<]~
$֜ha{}n24n28lh"w7TNRO'֕YbhNjfk)EP/AGV[J5]3<YmN#''\RDR)-Bdn[3;U10$tPT%k5xJ<ET$EH:u-CUGK"zjT9~q1XnUm(ɤ෣s&Q:ui>zFM}WpE[U\.C@'d'_;'AD \ވFRHN;ZAp͂v-dͭoBY\*
O(!Xʩ:)r&.:'x31Lzxfߦ
w.t6ss7̍B3F&͝&Hf{"1%&=CnŬ>L`N
XL'=j*egOF^:i\:4`X_OH@˿><aaJFgP.`ǍrX+`!cA;,?y`}>`	 I g:y@;$9g-QpNA|)턷Bz8t8}Rzb_q#fm1ƬhϊPK09    PK    A             :   org/bouncycastle/asn1/cmc/TaggedCertificationRequest.classUmSQ~BIsըTBti-˶->h&ə^U$K2}ys{Y~@OOK[\1.V:ɡGQMK+
ͮZ84Z:CrCf'EFɒ
Er[b%(֧J4.1>Q%=Y*Ȇ&U	SV
+VQwXᢩI⮡+r*\2Dt8S2vECI)g1GVst5O9aS458S*VM}[=e~]<y8\}Tb##U2uCԘ|^T4c4Wc6!_]I\3Mm6sr܅H1_oTNJق//8߂sL0SWlU
YdTm{q./<p3B
b0En1e0 @@nbJ@/$}d0 ஀~p\}2fg/cUyg\QO\00>SnZbb s?dj&EĈC<h  WAub%˶'d#SKi z9ZG
#b+H򉘇)Dm c:PHk-pM馕i?a8܎
 e#gU3PK    PK    A             1   org/bouncycastle/asn1/cmc/TaggedContentInfo.classmSQD)XͲ20M&'{,}^hFəUNoݻwνs
^
'quF7tkA̘ٝRiXa%&'Ysu4:G(Zjrf]SЫY(,XoiGוmE+FNNZN
RM|PMK7
YsPwTh5Y)r<rt#i;#B13r>nr}؊imDer㩂[&-#SW@n>ŋx17O'Z<>UЍ\ߐP(n &xJ&dfQMU	xx"vFgj
7AOWqMnfY3jdXnfvl7T^̙./̝'_R#إ>T#cpA-pݸ.8ytC
5ÈaqB<H`["#^a)=@$.Ecy3KO'm)%esJC>|&h"Ѭ'^)G_f*S9h9ceľK>f+
W;a1<%@%ʧ.Sh~"	mJ/xX*xR|\loU!l+.W𴂅R mIз&]DˈmFNpp
7Y֖PK7\o  f  PK    A             -   org/bouncycastle/asn1/cmc/TaggedRequest.classUmSU~.!lX)XjK#Zk6 
lt!٥
-+?`3q<g@Is=ܻG #2+\
_
<\h0-ӽMj4>+ xb%b4.а:Emk˰뎝qIvIÍLFĘq5K7$洴Q,j9 .i,YnhZĴ#Ǻ嚶%YSYbRN26,i~m]G1TL%G h;Ț]˸)#ePmrkS-Nhk)nRus̴6kx5^M&Di+Չw㕼<=G
Ĩ溩k\8'!2k$;&l&)w
p	fM~d
> 2M+Xqpx1XТU	mnP]0	-J8'SKxIB%\-GE	$%gNCtBcMOsB
:i+)QC+SQyaCSK[f-f|՚Nmԫf&3(sXD@	=E'9;;}(aBA;4RpЄ7(x)UЊ;N3p)(hC]ff19ybAFx
qCϰȰLbeQcT
| &>)
*Gq`
4F=Q{JW7gE%? #@!LT7ґգQ9i@cGJ=<E	?nUbc%K\$6s?S.S3҇w%}<@^DM_[+)*VR"ZA/MFf?vE_Gz{3!xܵ\9$m+|o0HV'0*aTQ?s_ Ibi4W,{&L'jn?e`^TPKԖ#  3
  PK    A             %   org/bouncycastle/asn1/cmc/Utils.classRAOA۲,J"v{XHU6)Ht:iYU/HLLTftMN2ͼ{7_~p~f_<E(lݎ׊KMd=52qNiWOcۥ)Rb	;\"Tik3ِ;
"*:P&,zgK<`>\QKtpwq HXP-/}CWohb̄eb܄mb9mԅli+⪋<ۗ? k %:צ'm:ΐAyZ|38Al(Ō01k-\MS͂i,*{"ڤ{ϴRXuEJf*+O/pc$P~=L7|Zŭ1V׷$*kC2E8JpNPyݞs]FzPK5C    PK
      A                org/bouncycastle/asn1/cmp/PK    A             2   org/bouncycastle/asn1/cmp/CAKeyUpdAnnContent.classT]SP=@(V*HBi!"3׈1%rџῨ3JqnVp<=wg{I<JEY˶K%	[XnV,Z٫ۦ![O7OqNRNeKtmD=;WͲYNEPsׇuݾn,Lz/'1vvByrcӦ嵂Yk)GUKXdDe\+#&A]:^jY6K=عѸ	#V]4cfb\LSI$]+]\$_ 5EEf	`ft	AbA'nDMvoA;lt!{lQЇ~$\fL 2
QF\FQ)[.to+wA⢌6 rMq))5:1Y5^_/1Da>Os34`wF}$υpPGt?=A|C=U[cluz	Y]ߎz
?}5<XJs#L2f}'<FO PKs  *  PK    A             .   org/bouncycastle/asn1/cmp/CMPCertificate.classV]WW"&|ZX5ڈHME@Q*دIr8 K
VVY/>G=g $լ}=g}=ά p?GD@ऄX_ig%4&L.Kѝ
j8Yiޘg73'$nx4	{#d
Jh:EOHF"bQ>&
1+(QgQոJ	p9#	-FnC&IiM/FCϟ2
68y}ò,V:y#n:Dr!#
IRo;NӽmIYְ+핅n6O4Tie9ǶShZfEͰ,籠kYEqhćF8&e3ڔI̛9OBݵYSQI
;^DɉǪ&oUby|!zƫSq.y"F~Dپz6:=#KEOKMW.(`s6LyPet8$=eqTF28.ㄌ>u"iшqYațbJc:y%b-{I
p<VO2މz[ ɾؽ7Ty(lW
ڨ_*j-e
^<~T9Uh,__+|cLwjofo|8:*ѤBG*⸢Q!FVс3D0pUE*">VrLE3nh8M[MH`6g0`+0`w1dH+i/b
.Tf0Wp	9@BxN*
Cgd0
-}>@B\d	qeCc|J맴𙀬WG]#dZhlW]/a'_bq, ^
17uδ7"_1?S!		Jԙ-8ص5|˅YNZޒ
#O񿲍Ƨ诐XBDe^A^C3%%?W8u$f5<Y7̿.
Ox]t2%*:fVᴇVҴW`l|1Ec4|Sƀ~LBRQY
_C?C D{8b9hvrEnyD{nszTh~u\	Wɭn5@: PK9#3  U  PK    A             4   org/bouncycastle/asn1/cmp/CMPObjectIdentifiers.classsGt6 `\ؘ aaitΖi4{tFz/d6ag}mg^"Z@TLRiJU:ZcT:VT:^T:QT:YSTUiJsU:Uy*|
A!^1up
@# X4fgaX <K?OTx75ͯȇ+Dϛ.UhB7,=PK_ctn.Btn鸦+2,Wj31v<sДE:
U6o%1BӆbQ(5ǧ8w[rb&+rAٶSVB|EiQ-^8ZF\jFJgif߳k:Χ17=kXg]Ӷzg؝(uQwFvmίtNIװ\srkAcLiNh&s0k"ȿWg[4MKtĂA@@ѐ3#F
A7ИV07
)Ěhp-k|t@-
͌87G3k
DKbLI-+Xkۣ+pz>-=abQzsm
w%K5aͱmk냄h7(c}^(#
p#S
ҿ%c"?-6K=iyOU<CzF*G>/jĳ!:7DBtBb[ZV?.3lSb5I, M"ht`)ph`X	Y ā@; @'.`#	8Ѐn@Ҁd,L'VFr E%V`p9p-	
x xxxxxxxx,ۀ+U5:zfStY9IE1A{OZsW(Ij\jԄRcRۥn)C뤮Q"KmDjR[.LjTjN.5#Ր-Mj=RM
B"\47>iO>=Rا=Z؝V}vV	66awNu¾;Fط`
&8a߁/}
6$^XU`˄}\ؗ`'
da_=Bga+}R<ڧ]}>O>}ѷ>}>{>;>G>ȓ[6؏e~K~]$PK
B  q  PK    A             -   org/bouncycastle/asn1/cmp/CRLAnnContent.class[oQKlZKZhFMCclW.N/ᓏb&~/sl/3朝E\eg1t\b\+FZ/,a6܌
#o׹ıLn2HVbs`hmpӵ~yöx2fWʕelod?۶=dwX[F~s{hߟ!p^zDKΦÝ[B@BH,aL"!0a߅TU>krR }
MCM9,F/q]-n;Q5݊l{ȥ!Rʿ=D~1?|
F1)V9@0CcFF2N!)a.ɈaNӋ2Ƒii%nZO[E(Ԍr"Y|ex?f
z>bkzhOk_Q3M+"i{&kz2dIXz:
+OkB).=W>wHL'N8Cghh+(^PK$9    PK    A             )   org/bouncycastle/asn1/cmp/CRLSource.classU]oW=7de7)%@u	
@J	v܆)@Z۫z^SxT⨑?t8Vޙ9sٯw$QDZ H>P@ϴ6mJK.U|v]51ar-F6B[Rc,cO&@/{
FeY	߷fP&jJ{sg;7SujeۗE"݀e5+q9s҅_Pzv
L~a"A]$uCHcvgJ]:Lo++|>UYxkt
iOh1p}`dCɜUc`(/ֽXuˮtSmT+g~oH1T8b@EL*UB)[NEv0?Px(qo3k'A*xv<ht]*x6x'vKsّL_R^n5B͗C1L}B7jim1ǦO>ҡ⒎0}Pt|I6&1::z0CoL"o\p4lp]Slh8F0Qw.`FEܥ?J&(//Ve/ǉ>B(ji)C!xh֑KE6K)e^#cȾ͔Lrv83+^X&0O&7"X";KE\0%qE.JC[+(ͯF1f5Q}$whґF;bNP@K4ͶTz񗈚#aA6+~caCl쵡Q& mzWZ/jo87Ȋa
OJD!_PK
~  b  PK    A             )   org/bouncycastle/asn1/cmp/CRLStatus.classUKsGƖXyFA1`@ZN0elG,DIU ]EQ#ܸ*(TǅJ-ɏ6tOw7Շ,~
!$vQ Ks\uv.G],JJQ:J̲"=Ge4{ӣfW@o^WV6Aѭ9z(Whp-)lEƱL#;Y|2U(ȼ].+Ss+,*n2z%_'<v*Ȥ]Ɠәs쥂\$B>a&kbi)!04;78|zMPVSɦrk6iV>]r]>LHM5}"Яaһ8Ώ0xzRz,zTZwNm1.]yӱ]Ap"u
p0sюl6Ҟیo*;:yhzuPgn&RKnIEpa7p]f0p'x3!n@e`e3ƅq=8D-s:pQ γCbsEQdsͬaLNSWbaVKҡo}HF
ڢ4BDF9)z ]ۉ*~<G/Y*\k"V"_"nc [`#"]5xE;`7->GM705J; ='% ?d3?]#\G4kEU1Ӻք}yBzk
jSVrWr
'[3f$c(f:Uqޓ)c8aao#LPKxss    PK    A             .   org/bouncycastle/asn1/cmp/CertAnnContent.classTWE6P6,KICZClZS*(5IQcUC[)lnL7曯%9;P!x=f~s9`0a񞂾D2cfVbAA<n1.Ÿkz%۵bq_d\7繂BAsS܎)*RnI3+gw>Q9ZUtQjsvűM[dYz
Ȟw&o,jYPiʼ%άOsҶί.n"lU0XZCKqŜot! CSATlvJWptѫɪiVugәomaoQެƃc&1-^:&q2,Wҹ5,m2Okj_>y^0+VUEc=jZQ8bL[*UbB;*&U\P񮊋ԲDrXkKcnD]V(|&K&6)n)%zeeY	Q`ԩaWN:x}))~eNr
ӎy
i{w8xԫ]=}#7H:FѯCg1cWtÇ:bTuજqM>0ccܐpSm
qp	hFVB^X0y		k #!'
J/S	iHe5{2EJ}^<|?.ʺl>n@@y#F(!T/F1@ɚ%Q&xMk|Rn(\/ab!'{nwѾ&V_*I؏Pd0َGh5OڥQ'W 
$%S
,S&k/?Uo8ܒ:F0}Jd9Icf/iӇ
Ь,ǩqn4Ax-zPK    PK    A             2   org/bouncycastle/asn1/cmp/CertConfirmContent.classSn@=u:IR/J] 
HiP@+5K2.RYX

6,;N]Q{g9 `!e$>b@f(=Qixn,Z|[NŏD]2^ȅxU{~o=Qٓ=鐺'K]UB4ڕ?9C:^yNRAlS%/#\9ic*2*4$qEMdUs 
ђВ1]F\64̡;zݨmۮryuguc\'HnI߼աHAѡMŴ2(a3,4Z0yzpڟ%Z=wl
1A
L:4JCThvf
eâe[/C33^aBG[(nbB.RMvq&k[E5,wqmf:t(?Uc1M,Y)K[#r7qPK  %  PK    A             -   org/bouncycastle/asn1/cmp/CertOrEncCert.classURV]Md04MZ .m$P@hMBV%Br|/}3
f^^ҙ~T}0v,yxfY{9ֿPD(+iU*NiZNj[Ku0Lޭ:Z9Gn@XlrCD̳ܼnmjU3bpwPr8_ќ\;`+$3=;JM+l?T=oT1FچRОQRYC
8\$oLY
C(ƒ]h&T[&[7+u(k6eWVTwUZV٥ǖ9d*BW	p$i$+:DS֊J`Scwe[ݿrȜu?X,Q:
n>5̔TR<.HxEx2wy\qiLi_ׄI^$nYDnmCsbP&b{Z
$, 7t of}Ќ^t {_?ܽk[7ywi{^cHÂM/oMF$` 3\ЏsB11+`
&nH`N@;y&0I?$,2Vb2w$Sc3&VcHD|Ck1<y&7-g7kQԧkJu=Hl(O~Qti6"r{HH!:7/PM9ambx!D!_Ï$exH<U:G^/AsC)) WckV{4^:hB.MrIn;;mc3IRA4!,x4sG7=D ~jMH%)up-J*DH-'.K}D¿Xd8><Gy5ÞM5|"Jv<μ_"фXցE'ZY%PK@  	  PK    A             .   org/bouncycastle/asn1/cmp/CertRepMessage.classT_sU=7vec%kd[ŊhJ
SZZLyl֝t
>%x^4	_&KBޜ=s鋇{ p+ XbV%jFÆ8%77NXd+T7%cڭtbcdUh37df-iV\;]3&g~P@VW,MzN9UWw[6
wm^0EݱbѴRŪma]䐫=-e.;F&ɗ*ܖٝ5Mӑ
ݲKWŦrj)7٧rƬVu{*!Pi/3=xboۮ}!񶈓"B"1"┈wExauV蔒>~֭؎೫Ph<}l&ǔnu<BT^	짒\zѵ:;D:+Olf'_j:\KMcއ_ b2PeA8s	Og>0E	ᲄ0%L"J8/9$%LaI4I$pEB_W%Y*W%uu^7^ Cg@OtF]~:]
aL]=#uѓq+ӛ['; {~A\i03Ol`"bu|HǨw!9lg0~6<6
6.C`T.ȸśhd_%ǈn S|7wN[QO	z
7<?zT?1/k{q~تf*vv9d35O>F+MQՕ귯=GD?@M7K8#150]dV،WC ?i$/PK8Ŷ  .	  PK    A             6   org/bouncycastle/asn1/cmp/CertReqTemplateContent.classT]OA=C[,*RqAe"jJ(!qM-B/&b"H&iK@ܻw=g?_ŌnG``YfڞQ=dPy6mΠ7lT|cWw\VհjO3id,:d^)O]Y1wMCLf33|j3M{z9;m+
Xc;Czb7iӰJ/Qk+Okc^lb	fbͅ1|؛eڴ;%j謙N7l[B|>M-.EGu	nH7MEsm̝SΧTT\ ݟKت'кP])E*/Er*Nki'˷0ZZԫ}
jj_e6qF*n*hC"8EP(QЈ^Q_&0(et"$6D᱌.~$ˊ[IzY-	[7_EqCNe6+DїW(HcD)x1<sm"vre/+w-8/c tƞ#nQD)$$ҍ^'M0P"VeՂV%ܭ=oO;e؋xN2CMW:R\gLGo24peWѹsq?B(#Tk9XDD7TN PKڀH    PK    A             ,   org/bouncycastle/asn1/cmp/CertResponse.classTmSU~6o7YhZC)$6B+F /X6%6iXMү8#_?qnLq2s^rsyιw맟\ AF0'YVgUEʶfWxrґ)hiMWfuⶹkefH9^h!v K7jZ枡	[HFvt9N.hf|iD)W3,{+(f0Y(BZqlg,2y:Q~
DwlҲApwL)ns%M~p&֥ťf3F+k)V;}sdmUձRc5(9l8ga/210p˴֕,5znȄuAv"MpFѕEȟQ^K{7ˡ=y=AkwIuњkfܳt6n;HuM8koFg{lgvs&H=)}?>K%FSD$KpY«K8 \0.^0	!7&aos17xG!x.X1IŲ-b
ƚnq"X)mM
>b,}i:ZqFL F8+F8Dt," }/J(vC|-U?VcO0CJ`1=@1)*j9:K@|ϰ/a pFw)jLy>H'}3P1&#XpOQ9Q.}mwȠ2(VAnԏB	+O ?BPǐ"/7ɖ(V4i^:xCxT#|
ovo7a\PǘL*+*sC}jv&ѴZGOD&PK
  
  PK    A             *   org/bouncycastle/asn1/cmp/CertStatus.classVSW$RF[  AA4Z@`_K.a>þ_mgә~3f/~_ ~9{~w~
@7*/\dSܾ,zi$-jz>f$rLzCK 2ydJٚKz%l%it*l]L
'4cB_`化LX6	'A]\`\`8
-ޟ4ҳe-D9LXvii3ӓ%Fp:עZʎA-e
6HU&)y
SD
ͥ<*&p.iΚ9O	8+i=׏ *Ǌq͸P*P¬\1?YZa΄_GyP&/4pͼhrS]):,8itNWe+qj5YI1xv	xBI=O	f@>>ʹjM?w@n(a;N">7|wg5{&8`ŌX*g޳
IlCW7Q38j7}Á_ַVĖ8 ,^G#H赗
[ᏮŗWӶMZαMZ w_K2>I{zVB]3d 7{RA=+qBA+N*؁5L\
W~<ë~&
)bY&1	+4⬂:SЀ1grɋu!d&/ *
2f2+1(#KF'C!!0љ#&(fd!{e"z}812nzF/hs2b/a;EPh%q*XS͈c	_'YߩP5xo,V%i4w?r\,|@c~to^tB׽FX꾅}ݽ<-Y"YE2XhqYėq-{=|>z%x[m	i}	?Q">U-=nEr
mj `-2"pmT
5窑EO$\
%JT'o9Y"K
AF/t|䡎Fs䡆VBPFhQ,Bug颴X*nO<_8{p?^,˨SEvQm-/1xh0pbo2OgwQb:/j豈>,r>ZM['бPK.>'  
  PK    A             0   org/bouncycastle/asn1/cmp/CertifiedKeyPair.classU[S#U\+v!.Y.M&C6Lb2d|bTU$'|}9}f_ !یa9iۘM8d趝qB	3di%s劀e[ɤ*WR3Um&ٴeXΤ7AV켣ۆYʞ	򵑶tǜ1t^HX;fg4qYOӶCңiNEc鴙TaӴ)afH&&266zN,͏PH+@&' =οd~Q0ݲAzLyM?8%Tsqf6znHk2tmG1u\o+z@E
..ܺ=3`zDN{L3i9֖)⊈N]"qUDExFĳ"<=[gk`ϷZ؋E҉nete)
}ȪxuUUVcuo[~HJCKkNnE ?7uC~B1mx.Hmzϱyvl*Փf	q欝LgOM㊦.{I|?QK'"C2^qCF2zY4!ȢETeau+2$5oh-Yaq{'[ioKaFBЏkx,%	E ax_"X|(!,V$h1S$cږx8gGQ
5ӮvWQ1`!>RT>>kIw}Q-HN|u snhwTiM W=`X=?AZc?Rt=ak"Bj	7+	
 ZUMxP3MV@1)Hk?WB.~Qqg3\5-F2T@L;K{"" (\2@UՍLy
k[ƨ2^7(ߢY}eW=DG	J\=@kW=G͒;h߂+2C⻕ֵ
걻cKx6[|;K7a	V`<`TپvbV0׊X?-/PK<ǻR  D  PK    A             .   org/bouncycastle/asn1/cmp/Challenge$Rand.classTRP]-PD(r)@ruc
⓿Pg22^|ԽasY{9'?~~`k5Q#y|&nγ6-ә*vE-^	+.BFC#Xc:9gNa6ѬfQa%DFlZHs7a%H*%Fj.t$t3I}+g_
I	ݰa}.6d	c+Eq;J"pҜBQiJԭdť3N;R+`uoVBBԃI}YX"c֌>IB3B_FK2d\(# ㊌8Ei`QԕC:JNRHX'KfELQ˩UWwګ<xZIs2HR6mԉz$aY9MZ+bwя:tфN?<^.?jͣa["!aSЂQI&F0UІq
B=JĢRmVo>S VIW!(ɓAihh/<d/i'hs?yk%%5h9kCh-hN*:GXC	c){_ǘc7?BV9_bAzjAW}%7ߢF`Vc1rXJS1/	B#YVi0uTlq:^T[N}u1/9<(<&TюPKm  4  PK    A             )   org/bouncycastle/asn1/cmp/Challenge.classVSU-	],RZZB	OֆJK$eiIU	;?4N_Q.!l&q2s׽?Q|Y.ȕ\MF4"vnJ7tXL@3Ʌ%!MIZj+P	TE5eM5gζtLKa#k*FTfj̳Y iYZmճ⻼l+bh0)PFJ9UhԖ݋*Y31-"TLYO3}5VTF@3֊G*rF8[j!QלAˊS{*gv aʏtn4TU^'h68glTZ*" P;68%TF77uU+=OȥV3	ѓoӊcuWD*5xCD7E\."."Г`FAShd?|ŽtXm	i
V[b&YxN#g腬ÎUJv{Gw{MNӺHSud>Qy@j]vj=~?PWk2Zp]Kq2A.9"20ڔ	7e4^m2.`Ż,c;}Yeqł>|$%HǇ⡄ Xa >0e	CX0Q}SƠHxfFL*Fo653PY>D˒DUtCM1SbHkT{(#/iv o}9$\7c#N|%iT~Bghɣ/&a{G۔	OIo%bDD@niσ&v
&K;lb2b1k#Fᦱ9<#rDX=M0f9~m)mQ%s쓳cyD|'xpX̌vhdFʵvh؁b&V=6p~(؈یh+<Pt5f1?r.};E;#9OyG\<as0C'ED(kxPKuפ  !  PK    A             -   org/bouncycastle/asn1/cmp/DHBMParameter.classT_OP]Q(	
@uH&SH\B!Y|*7ɯ0eDPlmq/sι7g X@ARcо0l-;-Y/,״%vI.
vkYMo1ͫ;cƾ
3eo,V;K¸皯Ln܄>Jml0U'Ɛl!Pԗ_0|`qg<Yy٦G$OL' (nw
w-nde\0ښKO]=,RSU5k׼I">/T&8L6l}WEYigK-Py	_nߤрrZ6Cp"\B[H"\
#!c\`RUA
)S"
qS!ȴ!#m#r|fQBЯ N92CvhZCߢ}^V/Z\:#~'ab&#"S}"DM}%Z\L@'r%uDth_)k>F$NeV>s
8ə4j
=
\8qz|"#??'	l. 
PKi    PK    A             /   org/bouncycastle/asn1/cmp/ErrorMsgContent.classUmSU~6IYYJPVA&4hQZ*B \.n6L)~iPf~3 n˦ɗsϹ}9wg ̀# `Tyh]ͭVw5˲hEi
[/ a<jװ-a8h 󗘫f2s3`3l"*f锗(Z->`KK˶JvXdmWKUNgM5s)Wy2HgDbjFkExGC#{6$l.UKQ*ZŚN/W3nɶvcʌ0QLSXg?T'2mv}{' W)/$9鏥	uۤP:➟7Fsm^clD\1$%#"xY+"xUk"	X~aGHvB&:#j	;O,~4=n7:U&3x:ZȣqN5#5|\	_γO{)?
g\Hu=fxUwz8z·Ls=2On뢕]NlC!!)ud!(Bܻ cSܻ!"2DinfdcV }nnqsgPpY0bXc	X>0IDO͚8V$$8ЯOs&{RbB^WT aH89h]Rk<E y5{P+SO1!>;cD6(1 (B1)*q Ӈ jRjsC7Y+y

C]MD5EB)о15 ݟ1!Ryk@}Cܯ}aEI2An23
uNz9fzo7ҳ$%uXO'R^WA5|Qg	`(HzdN{D凁PKIk  	  PK    A             -   org/bouncycastle/asn1/cmp/GenMsgContent.classOQǿ-],Jnwť16HHi]Ų[ۅ'<yZ"Ń?m+eryoۯ p!(s]cߵl˽04Zٲ݊u;U-g?sVU3kʖ9 횶0P6ݜ]wu0[G
pɚLbG
-S<zIl+ߎ'eխ䢮[z\6-ڦHu/ "@0 @bǧ*˹tr6^О@im;ٔܭ9L\Sӧ\.ODט7厜зue݆?NH?ʿ%aD  $<7\%n&#cJD"27WIUnR"!a(N{ʗDQ"զS^"st[⚢~ B}fUhsȏ+_~3M++{vqɚ^[dIX9d[abAi=|p>T &y0{Yx`oW$~bPY;myVoz]PKsuEO    PK    A             -   org/bouncycastle/asn1/cmp/GenRepContent.class]OQӖ.]JnwEcR16HHJHW,.$xKok@$_0cζZ)73LygfϤ~}< 0A9*Ce[=^JΦmlzíްg5cgvUifñ]v*nfnn~?Y3W|4ۂ&bT'N,.1iL{٬-X}RPzI.:'ukr-$]:WBDHS>Qe9B.چSK8#m'5p8}559sOy}Sȅu}Kת]Zۘ6w?EjQSw/`H܌psQB IqL8\&#bWI"/8eZhՍ
_LFTNaxmn򢲋k;m3yLc1bt:{Fx4F~Lk+h*_GbMكM
"KR1
K(`
zI5Ń\ {z$&!QgP.Ey[}<u?PK%eTO    PK    A             0   org/bouncycastle/asn1/cmp/InfoTypeAndValue.classT]OA=-"w˗HEQBjE"v!e["M|P"/xl˹{gΜ{)<q=NNaVpMl
'+
%yhnҨ0lhV^ ٪-jɂ=[T+n1*~d`SV"Y؈,%S7,-xj9K7
a3Y3*+E1//N&(kY	7Z%'f!x2.t%K_5:,jf'-$sNn"ՖǍ8WAMgR^-}[pAO@v~.
dM5У()7OPnlD,0!"?NNsQg*?'3r)ꍩhEXd9%j:_z#*A"E\SD3\8h<A bUpE
u/p׋~Lr! n{i4;BeKQ_<Ur+^;ϽRh!IY
NI*#.=,.f=̻'.E	8Yƛ;leAY2TMI ]i?qg?K29;$pV	1p"1Fq@2
>e<,RMo7lv\I׃:ӱey{ʸ8Zx iV`?PKHn  F  PK    A             .   org/bouncycastle/asn1/cmp/KemBMParameter.classTRP]@(rQڂHI"E@BhՙXimp|pF)cgG{7T99k> xҌ3ѡT
FSnX4mX3Cj.'5;)䨖!sEZŒĕu]su3U+KWD1U-'雎aSn`&
,2d5{^kj1ZFch윺fO],G	s\ԟ_nվ}j'rGsflQ/.E;lkhXEyQHhZszJ^pxC2stilxhxh)KIDtqZ@ca9h3NѰq~OQz]5j\k"S&Dk8|&`Uf
լ1ϛ}0YgW3uI`f뛳Po_ۺ7B;C8!t0ECM0BJ"yePBh5a6ւ33ܐp$baZL1ܑp7%\Cᮄ0nK60+	s7ӖqTmcI|̿.:@UwR}3$dh
r.MVlPƽ}¼O.1a;AH3U
S S\IVX*+]$\	S쐕
.dex2[C
+d=,#EQҸ)tRdF#w<+8?n=2;|w<
X7Tev+g2V\
PK/.    PK    A             1   org/bouncycastle/asn1/cmp/KemCiphertextInfo.classU]OA=b
JA,(nA|[CYvJ&B$~R4irsϽ+<mG%+mr,1?
4&0Vxb{"A=mIN3,wڡsrʲ/#n>oE|gas(8Sz"|0ڄb
.R"o9ژox>iu'^cfs:bvy^CÎ0Q}8;'쌛n6
L`-4O7VW*(RpEAPA0ـ"F/&$?h4kw1ݴmsE1w8֔{މ
	
+Vj6{Eu-X[o˛FnVТ6IkeH\"!Kh4,7 ? ^	CtHQ	cbCWы	}:U]}R7b 3BW4Ю0
#J^4G/h<	65keǏ]
2|c,洸2_8'
P&Bwk$ťx-
qh!Ю}GD-Ke,X<Kю5_R% Rxz<H[RAxTe/PKw    PK    A             ,   org/bouncycastle/asn1/cmp/KemOtherInfo.classWwUMf0e)a3餥 в@lt2$(+ʎ+ 6=/|_N&m&1=G==޻{}Ͽ ؀ݐܨqc"_ ?{XQ\[큸u_ަVstLf\7"H	L#l7DZZv&ʹI%P]0d 7f-*jZsXSzbӬCSşNN-t).m3yWr4F+ǔbDjѨQHO3̦U0>YCRt(WǑ-#5=Pjm]JO,uN#KsE8_~N:MV&%ֲ̮N*f%tU~93.OoѼkl-OYԾZ_٫ŃơX^Lܷ7״tظvKM}4fo_0L}ҹxVNKdຄ}_B?IKFþf6#
5LT8{꣍Ϙ;3w_\MˏیeM.F4`6(	mA6R)LgZ#ihj-+SL;K<i1b
Dj}"X,KE,\
+EZ_DYD@Dݞl:z sB63_deIH`]e7=ʖoDo^}Z`5EM?HJ*UY7Vl13φ>uk!/N]:WjIDc"?]S)V=)gnQt/JvlbHM#*ɸ~*:USLwq
]gHE\ (aHfXð{%cx-%aD7C
J{cxOHXfxJ<-aaxV£8ȣ$l#!̶ЌC/pCI`2pgxكۉW<GkzЈ4aCO2:ÛF!pʃ}7םNSQ*]b)젟UnFUKR-ƖնXoYtoi$>A\8/W
\=9Ӳtdkgn؍fYJIΕU#L+p#Mwpt2LZx!)@jCdX4qpq_]I#vE%.ڄZP[8
Zu˼8jExlYu98s,Nst2inR^0>%iȹ=o۳~ٶ|Yo8c+pٹrVI~z`."EG&^D7 +V,(csJh,
4ߒaC0>I-N84^Y$C)U-_92rfsѕC}:'s/eԳs:?Q? 6mԿm~O3/NV<P{4)\KG̮YB΅U)|NFc2ThqXVUwp;h	gVE$8cVC=x-{pU)|#.(PK    PK    A             0   org/bouncycastle/asn1/cmp/KeyRecRepContent.classV[wUIv:rZN(PE%H-htrӦ3a2*xʓ]˧$h/X*=B;>g?Ѝw=<Y	p;97d;脝+s3"笮1
5ϛ$tVeT:)CJIh"<uM3
eC)9	JZ
ԉd3azNK*4rnBj9aq9aYǧS]G+4R'n-ˈia1qۤ~Ift+g2"gtCx'вHJif&%:ɻf&h3n\3ni:?1;Od:MU.Dp[eJB\/;+(NiZPk/O<[QV^UƘږE{Weɸ_0q<UJ0g^ʕٵ9>9m%r5_)˾lz`B8d2dxFFelUel2v)a{k4utݴ*KᎡ2l?0
o/GޞemiԞ1nGg5Ԥ_Gop-?
⮪G51k)^zwEzcE"U7du+*3Ԟ򢯖%7Ԫ=GVt]TBj/*61<*Su*v1B@UGThxGU4_:XA8Ǝq[q捨PpJE3FN31$^iD/0CR
xm	I]xA(}8`02
=;paZ~ya)聭&ÔC6y}{}`B'cjXώs{_KQ"CD
dѹ!KA3~N?	wd.6kp.>,
i
?У]|tYz7,=gؓG4YĥRWX.eIOW[!?dd'S07B܌ұ آh~EvMj|IsăTNdpIa
P w;#2܂;%iRPG4FCȽoiSهEB2vKPygA{w|w;p$GWR.PP5-	=5HJ%A2[yk"8v!I.fRPK ]    PK    A             4   org/bouncycastle/asn1/cmp/NestedMessageContent.class]KAϨ9Y}DAE`a7Z`ոf֌A?]Q7]U@y+"mV)	lz¹wT]n3)
a^h>sݳ\*ުq)˞P\(Ǖ-)1\FJs$wxZ\eµOR~Q:J&LD`c ŬP2^KMsUc3rlh6`tsE:-׸3cH~j'C?o#;o} za=!;O0u5.bfoPK)R7C    PK    A             '   org/bouncycastle/asn1/cmp/OOBCert.classTWER6,KIC1lZS*IDD)lnL7曯p[_|?M(TrΝ~νsϿ
X0xC`"pCA(*Z][W˻̱+q^vƋlBAp+?妸W0ZO|<lWA"z]FěcȲ:/z
Fȟw낹&zYPiQ`U]gVS0mׄ
\+M>s;F',rD:gU>#۰
\|+]kpxtT_-m*u?ĿosItLWIN4tnuM~bLtiɻs1Yj.eݱi
ME*^Q1US*^SSqI*.Ӭɕsy;zH:K4Idb+{YB1XFP=R{}pu!e{?Kv!{%[<%_xUB&	.RN4Z8B:TqC:FqM#*!.AEZKk^Z1zWGnIa4\{f7q_$d$|-,kH⮄$/
)i:!9z<-	f~jr&wJ¯i5AW5B66	(0C]BA;t?0kbhac_`v3:Fᙲh~C@d8ՍKkH56#G$ ϥ⊔LBtS??|UdJL41vԦB%>>[[)o{6EZ(QҵVj)IUNRg跈ҷs#G*fF%h?PK~31-  r  PK    A             +   org/bouncycastle/asn1/cmp/OOBCertHash.class[SF!B5HFB%i-4CoBB`K-^ogZ~L/@Ĉߞ=?`?*P_(8XeXLip²-As#9r-VRMAH1RjMÝ."wd<,su4W54_04w-hlӤ~]L;KZ W
uK$Tی	Ti34lwf[3rx-i6VB7.;i3dm퉦f܄Q3PdranhrK0>oj]]MKC;R7`<ż\(Wux\+y'B]d^ȃӒkwjZF3G#
Nrד1mY|zJ6\kVj\7mfVo(mpI@tx_ 1])Y2NmA+8:}i5*{8D͋//c_vKGtGg`6{<mZ'wF&r?ӪRѓaxbstT8O
e
ˠg}-}uWg4q7/%aDB3>pUT3KhBiA	=Q	oa\B
&&HB#%-3j1>a"gEwcb^D/D9JD!>E(loE b _`Q E!.&aBq
HVC4٩_pUmZd ])Q)94֢ <̀<l%oJR܃qc|H53 m <lV~ v0BZqBqzy7q9l1+gÝ95߃yW8D79qn~+r4xY/ D-e]Ow37]K%S)t/:?} ]
}<.{8Om@z=idX-#am}cl+=.q 9#1++<eg6ISƕ<%;UvB5_Q)`(ηSqQ(MPKq    PK    A             ,   org/bouncycastle/asn1/cmp/PBMParameter.classU]SP=-A?@I Z>"ZEO!
5&Z.?pg2vQiZi#{wwMϷ ♄@oEB0(y6)mI"鴄S$uۆ)grig$E(QV_{Ko$4HYZjrs*
}]d͘nCլBQ܄-̌IڜRz}(|E޲3µyI͆6Ru}jNP=9FulyjqY9SpՉFٌċ\"mZXp,AKX[9KXGehqLq'dqJŅ|\BkO9XY+wDįz "QK7tGE/o7z}r>rӧǣv&VzOVx
S]TD_!!i}8U%~ {Zor8K*ѭ=*N3 140*hD}UȈ121\aH¸00p]Y3RpS
ㆂL+I(Y,N;iI
x~/>1ˠQZ͵	
6$<Y#ZKZ4vZ4莟lc^miz31KẩvTdR?,`eW2Iz|3x~2olD=UZ"ۡD#i?~pJoI[N)+
jUDd9BH[^R1P=_vV=Wv7UU'3ܓ^χ8,µll]GXPKd1>  	  PK    A             '   org/bouncycastle/asn1/cmp/PKIBody.classX|SW>^V&lli Ҧ!
̂ZoHo䶀0T2Me*S1m7SLe*sc*ST2'lwoڞiHR~s;<nxOV*+Ð2+20پFM#z0HhAnlkpX`P\>cJ	CncFyv5	cMkN4܍.g2wC
_3ntz[
nңλM}r	6K86%jɓbֺ:%nocmQ
Ax@Mƛ]u+.c򞀄L%af]pWLo<!+_]M]JSȔ5:kj,F^Yr<u^q2̶Cx\CJb4bʹ&F5PFLҋǘnhASF½!#FeE@=izPjɤ&!-)5YH"ѨVDpojq#if֪jeTÕXqI}͞A3~b_U᪶H4%hXE)k!EX"\D*1HADJ5ϯt{"<Wn]RZVG=]=	MgX^ٰbݜvx˹L۸"rzK/b^si	#	e3+Ft-Hv͑DKN1_.كX6u%%%kܒ֯E㙃yZզL
R֩Y4/=ZuQ^וtkx.Fřik.¯,8,[/~-ͩ7˃LY|]0Yٷs`^mZt he	FNK
i%"-#GN0	uzln'cҤ%؋CC1C	C)a(00aHQ0e0aDIȸV{dWu2@B7ȸQ"7ɸYSFjne,TGe,Q#VWF22ehp.|vMKjǥZ3J'״r@Bfܢ]ɒuʬ!X%#]gdYQPmSef,[*cܚdQNRrpc,ܻdvt.`n<uyHәpa>zn08ȑ`G7EK2K`%PPWt<__;=jkҿڰ
ˆm2*p

na0_姯0_]\w/7mp[6\o3f;ea2<İa3t0cã:mx7b+S`ImxBAO)XC
6 a#?b8`7l?Pp+V1XY㘂O9O|
?S?Wp+4Qi<3m;+	
>_+؎(؁*N*"^T%n>CJ\}`Tm
5Vmb&	6b:&?4?I@jW%դG
/H_.BЍ#	Z%=UM:HjAH_%h8A7+0iא.+A#=ZQ3Bzu#=^q#JzNR4sZZ:dQJj[]8k(^vXX{pzLI'2u9Rm`6zA3h0/!I2@T]$cLVhJl(IEwY*ftS9so#2KF	uG8`N9z޼#bk]OA7]D::N".3R+7J5PqĔ9*FemTSYIeTPKe?.*r1*ǩr)*r9*\薤n#V@V,E3p
1&oJ'Z86FǤ	sޖWt;||'w|7v|v|/v| 0Lc	1i5397y04E26U155u3
7M\0T,K3L-m1s~̜31s~̜31s~̜31s~̜31s~̜31s~̜31s~f~K{9f%!"=EgG-^C榓06;R+Tt< nm(alׅYxPKs	    PK    A             1   org/bouncycastle/asn1/cmp/PKIConfirmContent.class[oQ@_-mֺ[1&Hy Vl1!>l]v	~~jI2.kQ2gf/33O 
#H$3>0mS<dt>e-nS:1t'j]&b
(9!Ey^%ofqz?,­tҬȾ֍0^_~ ]y4QgXq4m24ްwt!oZC|8` Wbk^iGs~i֫tzZ8nY5٢9SMyJ%D%($\0.aB$i=kRC_,Ӊ_ٞJ&.fݯa#?).IEc>ۃ\H[%>;SjX{H) V0@ª
]kJAdB12摔k\sCƒư8eZXAp^;%].0
 /eS4G]uvO"}f cA;"O.u~j_;EX"Vx{g]X(v7ڸq]ڸϞ}!)OhNQH}3O~PKĪ?G  C  PK    A             .   org/bouncycastle/asn1/cmp/PKIFailureInfo.classvF	I8!@KPjhPYbɁ4"F`KFGjo]Ї#E~k9u-M'5-ZCh"]`ݣ8z|yKSzزZZsZnB(UЋ-ᴬFǘJFEw4cbڶj5X
siڈM39V	47cUZapH+m[aLv
[%"aW޲*f/N4au,̻YZ%+vV-;Mgְ8vVC":Aw;MaHZ0ڎD4+R\yQqv@x
}_gえw`#F_S0i<d5
bnl{
2c,EG¾1rYw_HxFM;@A'oRtDW-#?~_f{~l;T0rYè	ﹱ슼]b»fC	ʽ;oP: \tFop3pyEOd&^Oes^Fnjƈ>>\}d3b|İzGA0)ø'QtF3'_E`cnq<KeeeD1	4,
3ƃLYfYXVXx|(E(/ReoeN:z˕ǆXJstƲteƳDVtnh'KS;C?Q/Ce	23	jѣBY|l{0nrj2EqkyD0SKt>yS^0^*%
6)\ _Ux|A:8p
UEo^mMD;p
p:k
%+(Z*j)n)qk&{\q{Bq7'Ž)VfnR$cWM/{A{x<@
|@O.!m=v@zPKh  B	  PK    A             +   org/bouncycastle/asn1/cmp/PKIFreeText.classU]Se~ K6K#EHD-6jZHR4TKxMS&&KzKgxg x?89mgdss޳>)<SYjᚄV'F֜`Dt#NŬWؐ0,3%Q4=FOO{ɕZ{IԔ3fLHliHf%	NTVi1fVx(9)zu,=7[lfiZlސkl.5hW]Y$Lx=eH%3'zɘ&'F:*y%x.V#gS-a{13~^isѕȅJқk-e$QdGvyv\nf!C%㲌2d\qUF)ϟ:8xڝYc*q:40Y;s#Jd=g7r\;3p2ԛ'昬5,)r8aa%pٖOꙌذךT31{9-%UEE;*^@+Tt#O*TqUt0	WU1ţT(fx>Rp
m;
cFdc2xQ3S0>eǰo1kv~^Cʜ(EZ7}:,tPp$S.Z4KA?`\ j<O;?p-uY_XRvN8ddCEe]@h*X[5hSmj'Ƙqzz#O(lC=3op%dH;H|吞n	*D}&5搌adI'+vzÔ6ej'1· +{]|PòTDU7amBwp;;KAf':
Jct93\C;X:?W2ާ.5ʑIx6k6Ƭ6PK6:  o	  PK    A             )   org/bouncycastle/asn1/cmp/PKIHeader.classX	wIJij at,@)Ҙ@6M4Iӽt!tQn-XL
M}״?䴥>tS޻.O3~鿧،.	FCl.?wl#a=l*;z4bKSSSVli ђۻ:$xwF!HtB	#Ԅ|~},852m#CQ	Մ=1#bN1B/!zYbyگ'UjuH!-2ꞑCZhl/!:A=2= \Oc;%XFaMeSh*#]sj;ؚ@\0GzPM&a	q#ӾtGT_DC>$H{<4ʎAM8Yª9R'aJ0_NjfFxu2SBcᐷw7w:ȥxIhf\? d*a]	JРX&4I6j8q/yvvVto..Z[KSEaɷ[Pn*jQEa)<eYL0%rM,^m1QxR2uj*a#1WՉҴ%(̌(7#\Fʛ#FWLzꩆFzoYb`DKFM2|2d4h:e$2ȸYF2h)r*sז`uE
%X9eCK0T.UyG̦"bBS\QW;箿Lnk(Zo<yҴjWߤl+O-Բl5/u3wu2y~+ɟ˲ƒ<PM,'%\>WX[<?/v]DֻKORN9V
Dbg@٧ZXnqͿkcR~߼@sr.ڞkcOΊ`LN__+ز*aUݶ0ˮX5#;RV1\x0V܆Qv0dŰSpB
㠂v֢RA6HdVp'qe(x
QVc8pLxoRoV
1a2Gcx	^INw1=ex>pb0G3Nb4×'>D?D d{<I'Sa,I9'> ؏9'N_fq xP,C{qqzGt_
󍤦PXy4R{驸O$i5_菉P3@l-%h)D{2۝fl)DKFr(
hǿcli;{.S|o
LRn"pb_w?

i;*wfHy"Yәv "ayqw{m3N%4p6%ג'ǒ%aghop!	:d	$><o'H^:o@z,&~	qL[ξ-\_Alޑ9갈}ZwM)GIYO=f=" / vP1doF%I=Ie,Icx=Ii2k
0WXJ-<NO
$2ԗ,k/ZW#^@}R_
_
0
ZӖz]AyK}CA9K^,pCRϾE$YYyK3XixBJ^y3T:EF
q#WI}J
pmn/EjݞJ}
w{lf!	
'$$$;DH>Y!#2a4=)jbY1-tJdre,VGkh(uM`'ffVLCS3ɏPK5P  *  PK    A             0   org/bouncycastle/asn1/cmp/PKIHeaderBuilder.classVSWaQDZo۰Z-$FZ%Yj͂۶~@ՙj2ӟ:vS9B0)|s g		PhNimd;OA2xTRZrMzڐd-CºmqGc816q0ƴC)҆ez&bgݑn%)AE}Jgt+h$>_2ṄČ5azڈՙ줕Iy'c
ٔ>1F(Y֖՟#mg?'
w;ʓ.YSt*)J</999i)Z'ȓ	ٶ>КiS2@nʢ5F̝tfw`M1oXDsq-E_i
X5>у3dZFB@ql^}79a֭ftS82dm2VX#cd^O(AV`G*.b`M1b0Sɳ\6T)D`Pw㖜|
sɝѪC3'sC~Ԓȕax-Sz~iy|39JIn|[E"|C<Qzj9[)Rc^֔ԥƤ疥>GyMVc/r^G<>qMV;Ui}P_XA;+x/)؄
63lcͰ␂V/+!
콢}G(8'I8 NAcb؉5cgF^cx!pa
73Doa<^ E "vCa!ːc`3 ^FdSWs=Jpͩs]ŵu
R]Kp&a.fa;V]m04@dY&6-nWw*`n3רjpEz;j.7^zYIP<JDP4ԑ]%EPèT	?6A+e<OgqZ0ySj13}j9- 'd4Z>P_ZtYӺiJPyiOkio*uҖJ-5Osi,5ira']$4#|SQ(qL}4DRQMW=wMVɛ*3UwȻzMLuk"뙢o]&`WC&AxK$7K*J\)|3='
BXQ?Xbo"AwǴ^h(tANP9(bnPKlw    PK    A             *   org/bouncycastle/asn1/cmp/PKIMessage.classV[WeC&XZQBMf)m*hc mHa&M&O+.,k}k/txd%Ya._ws.of H|Pg/O5y66frz7s9Juְёsv6VFB9i#笾Hb>1yL1HdR@D1mKO92)@6;Y9RpfENi}ГF<fJe#9dn}+ȩZOq[@%=7fghژ7,&_ｬ_#iJEb鴑CTY	#S4򎙎D-:&
طFCS}æ3dI]ʬ\ژl
26_2e\j+H,Yܚx:z~XwEf[Z[[zXQ]Sꖮ,թq2e"̛,d֜7!An	OKxF³%<'a%tH蔰W>	]It5J
m_	2X&I+byh-XE/@p3/YmMS.&"Ǧgc5CJG5PՕXo"WZ6ж^c(c}U&Z~gkm([{qj!ݮǓdSfJݦڞ`U=8{g`zcz8Ҩ-9o_۸١8@QM8)Wu
3ç
"
٠VP4E{aaᴂ'qF^e80004k32BxKCF.0+#^6;)K2"x]1$dAqC,ӟ,'.2bM0I07O9zʘۏN/WdIFH#	Gc8eV?G+Z@^[{cjOB
>YB/^@*BV
XiE=D2n}_\Av|M怸^¼`}O|EkOB^E?%h" j%4rF1=k? ާWq x|-A6n
A]%rYIvssFNDU'Lyfp)eG6(=0r}?F.
-4o+4#2^xyct'8/?w|r~a'˸Nkwn7ۗq}Mݮ6Bnjs>4YEO\* 7qpxiT5GVg&q>([ǗԳ$&;C[E_\l!ڨ/	
PK`(    PK    A             +   org/bouncycastle/asn1/cmp/PKIMessages.class]OPg++s@t  u:qj(1C3&ī4KqKx奷3QF$oW09Pe&{yү??CXV>a޴ۿ͐yZrUn:ix~
|dyQ:#U/:o8Z=Y_
0)[7lw3?H`Cĳ_]r^}{v- "`X@L(`DDu5rQC.:jTj-t "zǣlFAyNRS+2p#)ErjϺҚe5én+Ы#K¸80BLI.\NKRļ8e"bdDA︫ԾoϖǼ0KI'024"NVjU=@1fȂ3ɀĥ?~h Q6#3FWV?!P Ԋ+
\%%R	 .|X)|+Ƅ\{q&!qwL1j;M kPK<  X  PK    A             )   org/bouncycastle/asn1/cmp/PKIStatus.classSNQ]RzPUBԊ ZJҒRhP2PfH;~Q#(3#DV:{9|`+Ȧ@}Dt9#0B:$Zʙjjn]@Vncm.I䲱tRN.҉D<#f*cK2lZrՓ5TS˦U:MxDS()Uc,вo(U4SF6q^)E5hl=9&ZܓS-ڲn*Tk.^R+F^a4LfsBV))JBm+N/N\ty`u.z7CW<h*wmO	/q]|=Ds7:SEaqqJ9?燙{C`8VC;CC'C@f#4cԇ0n3a2ecpa܏L0<bx i!$}ɸCW77aaF.' {]hK2pF_'ѽj
ҁGF蛤iPĻxVVlwb;ĐC<e~FHeRSl:Ao[N}~{L/"(J_~

SHP檨72 qF'CEaV
A=Hqa/{)p[HqI	biE0u[)2X4kgL[lǌ+~PKR>    PK    A             -   org/bouncycastle/asn1/cmp/PKIStatusInfo.classmsW$5ִiŨX4mZ&(!T(
]KS)-hif:/} &t3-3p~9r `"lI@(neU+^ufeem) Lho_)
ݨ&4SRk-
4tGkQMDQMo[F~Ym5-6b!7n7lu(^!`̛VՈf\aHAY}&ޝ)oMgVV~ùAgjMg<p,Qιn4""D7E1,-oSY'5Oi5A
#dֺ6[CzI\D%@;wB}k掠 S:Gf=@Z{'=c^sfVعDz\<qezUVZ	xg#y֞zg<>7HQW[k?YY;'K2qN;.2F !&(2Hϝqi'c a!\d3F,,4>"`MF(>0O\asu	X0X(glVR}RqU[Ǆ)/%PNVKY !{J$JJ*[		lrm{
Yޯّ_7	=ĄEN=T\$@%;X@@D\$x3"N=Hwԝ"jluʇY#>D*Sζ6>"PiyRm	)~vĄdAfH@mLy("V!|ڝ*R_B҉pZ0<6mGzC1eLwq];2;%9!޿ٔ-!ü=9
0WxQAPK^  v
  PK    A             6   org/bouncycastle/asn1/cmp/POPODecKeyChallContent.classSKOQn
) CjXh&MAXmc	q5&XfH?ʥۚ(%n\O&>Ν6e{;wν~ 23e%'C*vŽð4zٶ͆iݪu;[zQZvJ1c2-7k]6._ڰL7MfN&K& ސbX'VVb(a7/W,
ꕗq^TV٬N9]
BD#$zA:OY*}**rK:(cA
圲:%K=7܆cU.H+<E%=eSĄ0?|L9n.H7!0#"Ygfc1E i2:
Yc~H(=aF9H |\"KG_`	O_{abM"{҂dMO%I6@D)#T1p+F;{Ww~x;Ť.=\+w~h|0~<xF<i/PK	P=    PK    A             5   org/bouncycastle/asn1/cmp/POPODecKeyRespContent.classSMOQ=oZ:L-*) ̇ɄDI4VXcb\Mfԙ\Ht_0,;ܓ|a
147]ύn3,<Aj[s0pe|\"AAv|aͣF$6U_*an0ɟoxoٵFwCvWC5NF1A {M7r1qӐ5=iZU\nutQO%m_1$*_jmulm%{/r);-gﱬbgU`*RT8'*F1-
(*@IA3
&qY+)t:Ka_mF}$%:CD̡(
ISŠ<eyU|_^:1
cgW>؃3({pj);XZV)(,aRbo~7TH?c?0M3: ͓FD?V?PK&n     PK    A             .   org/bouncycastle/asn1/cmp/PollRepContent.classUSW
Y.DJAb
V$lXRRh(E00}Z[,Lsg73}Tȴ/<j97+aƗ~s6y c@M\RJX'
nTp9Z]G.Ehj*??s}&JJWWDQVl^8wEI&Yo&?}uDջ.ʧ;[vsէ2:ުRKѝK[A_}L!y-$:ffj1fέ܍*h9R.rh=uT(
>С!ጆNPoBcM64ѣKhS@^Aʄip0w0 fjYv91nة;iz7& Ly,U9AO4_MlWhВ
Nb }g<1bɱXHFŘ\q:zYpEK,҇<҇ܖm7"óc"lɊ2a3ZhȻOvYgyL͜sU1v`&̛!T}'o"f"lCtP4ZeFOQQ7IvA}Az/\(SH4;I2J_s6$b8@L97.BA*&&%KuUVջ"4dpE<7@>]/u_*G
Ml#48?CCh!yoz7 &j6\<>ƅ s0Yg˒Fs4Ai?,{f%G>DU(Gl٪`l9'HRQo[yqR/PK>lDe  @  PK    A             .   org/bouncycastle/asn1/cmp/PollReqContent.classMSIMq""B6F&5/A#	!LŸa`Kx蕭%^<%yV3!McUtϿ[ qW 3]PΤc3j:Xy84[*˥5;$gV4+X21Cvez>k=ZEKpJD϶#?o9SVٙeVU6.|73v1ovss覙O@-NeG	&5e@ 
xZK.8!zsMnarT,RJjU./fn\6tV
O	ʅՂSxl)TKAE^W>mP=ުxnԛf
-K]x6mJ+r]u_BvS;Jakv45vo7J?dYYi^ڝRpe%hƟ`3&WwsJC75@ ӈ
:?l9&a7Nj؃1
8z1ރΨ<٤U9C8&把(.Pi$l.f4](SPYv|?
#*@79G@O:3ZYY?:hT*f_)B3^!z*nT&nWqsrD*2H3U1WJbAl<I')'1bE7
{&b!KjP$ ~}l`"zDo`v?u+T!P*u%q[aΉ>Epu+piE<ָܵ_$$nF{WxC5fE
6q?~
*7Lk=8*$6Ps/h$0
In_PK`gˋ  [	  PK    A             -   org/bouncycastle/asn1/cmp/ProtectedPart.classooPƟmMfEiPK$۔1Ki	ݒ}&N}?\ZPT9Ϲ폟 (`!f^34!TkRtEL^3[S-t^TMYuZ[ujYƁNy뫕yfXTw{f|ӵ'2ή^^/,2>TvHY+:Zn5vNcߔ KHpzn(Ȑ\iĩj)3J,îj$4=pQȚ@~s*H(nl}7UCVۇx+c>jiOQKp||8n 
&qAA L",̜0慹*L2&#\&##UYh2!+FtMJ2$i1F P[B0=`Cwz ?uqC?A?C,kP/u]8H>	>7 #c17$cRDG1[nvQN]!(*̐&XxJB\9K,b9v .._PK[gk:6    PK    A             -   org/bouncycastle/asn1/cmp/RevAnnContent.classUmSU~,,i񥢶B#B(Pbx%R-+4d?3 iHGfK7ujl@6|3s=9?/$L	Tu	dEM:5	Yێ%MO%/CU*ϴe	-6zd.?>gg[jvyv7@{v8+VŞ@rK[ƦX?[f+
,;F:4Xn,urZroG̢(;P8ᔼqW7'/s9C#w7SO4EH;ΜxBJ;?&4<ryXxD~ʶЭ2Մ\{.'+;g*ScOdqVƀe!Mo8'm	b= C
!^"w1FCX'r&fFEGS"K6xU5ڒ2قXL?p'0lhC*wiMg˨j2ա%Lw`z7:mxdt`y࿅
FcmDA:H?bU
I=H".nTDvPcI+WX{	0\gpᖂeWp!|0pG0\DF!|.#̹SY&A@Ap.t|I	2.ΐihwQ}>6>IHiU|,kc
HYm0ZJͲXn@f}{O;#GcuV?;.gWH0_ALz
Nҽ3$~E}9HlhOe#grrp9p${jDDuczm}z~CbuQ gR $svЫ8οL4xPK5  
  PK    A             *   org/bouncycastle/asn1/cmp/RevDetails.class]S@B 
TP@A	((P@-ZŏeH#lӚ'ꌴ8zÅQϦ|5L=fϷ 'Nv7dCӌn*4V\=SWL°̝JۺfŎ#l4ŤQC*ޫ
M-᜹.6
uGU
VF1&ϧ^%5V2
9C;[A6O,15jiC.}',k|FHp6=1:%'-(9{K8-IoXM=[Cʣ%<:x\&:Ri.쩌qO8RZvP,a'}xl͈f
鞅xUl'Cʖ"gc]yV0}Гg/\%ğ:UCd}TO~,	7D)
8^40CF/l@330,wЍ1W1=f&`B ^L	iqX.MOR	􊷦,E}B//A
tLc3(+pxJ<R=$v~)v1@%e^v4Hi
Mc0&H*#
wd5huǂx57q4ސ~"	J{x\F37B;LQhɤC5g>V˘]0 sgGjQ*~&PKϡ    PK    A             -   org/bouncycastle/asn1/cmp/RevRepContent.classU]WU7I0LLK-$3	E56|4 
d&VO>kYҗxd%Y˾s_D&\wq!Ih2bZsAyYm.Yoz^t~]utTLX0ÕB~U7
N"CX-ӡ
fi1f!_d	Ӷ.<k8nNQ*:6*5#9#
Ѭr#8n[ԙӳ!Oc"g
KϭVr̜6aFAE{<CӍNOXi;yJ.0\ͭdp6exR2w&YF@;#59Z=
Z.z2ݺ[; 2eah-6;P4[h`M088G+G9oqtqG]q\$w;#ѤkneJh`^"tZȥ6D[,&&5[񰻡'R/f#h3Owz&x)GUyxV2:~ITi2065ՠך_eM<2d| 㒀\NEqdA1$#eH&~. jG2mc>0.`B'm㮀O$$D1) %A=	*>0#ྀ/|)S$0'4,Jy	x a _#iz3AV>'K ?:ę)쎜":4SJ+2JϠ]>C0lb`ќwh!%Ek?*CF`Js?}>QxR6oU
mB{/(Rm}^(p4Fp_%a8bx.rꑘ+9袵3D{b"p՗+A^A䃸uҁ+?P-T_#_MO(}{.uRGWTȹKQB=2ք0
ӉCQзxLBGu PK/-  
  PK    A             4   org/bouncycastle/asn1/cmp/RevRepContentBuilder.classTmOP~PDyWTۀ 08_41,v:~OMI-adh{sy ׅ~!%% hDVLЬ^*ѐ0Z:uӢZ5eivm	wuY+V=gg:&IqբS7^,5{N<nNI/Zl+ ~:F3_xKΦ^.QyFn
V:lbδ\a$eYzԠp|K""NCG|ĒkxRyrɦ-NزRF"b"zDq^DR[Я{i34>5<&ϴ7RJEf<N~PNih}oqvInnݍY;fwoEt+۾tv1Dq%>8\DGqsCcܓ9cp=˘pHHA$!8HƬF1Gw).ތW&L3B^ۨo;!piwh=`"

;tӟ^@J~BjOǜF5Bd9g̓Qw?f]pޓ9/HKLQZ)C<-7rHdF'R4զ(:~cYPPK/  Z  PK    A             -   org/bouncycastle/asn1/cmp/RevReqContent.class]OQӖ.]
тV+&
Ӥ~5&īi.KOx奷5Q x?/1g[)J۔9>9yfJ޷l3ZE/[mujF^KgzA0]ǳabyyiNkLw\Q1FJ嫦CK37Hb_hm.m,T_nsy1Oj
=Ռm!"D#$U.RJr1U\mEKgrrrZGIu՞}uȅ5aUéykȫ=A豆Nܙ!KI" Aߝf¸L	̊cN\7Q\&-bHL# GKaxhl<C}Q ]<tSVQU AL)|&3]vqt9D#=F):~A5H4կ#A&k	n%a)FmҪ'I
&$w&wpm7JZGLB'N$)kie
_5 PKh43E  \  PK    A             6   org/bouncycastle/asn1/cmp/RootCaKeyUpdateContent.classUSU=KEZXf
bJ5-$@
\Kغbri7/xtƙL!(3V_!	dνw=|oj3*ZeO|5ɞחn8F#q%	(
ٮif%:p
f:!9l{%5x-pX(JVT3Nd}*=M>o$(')lszlr3mmϕ}BJRͳMSm'H)w*
;6seolewX*TrpxYka8,?"U:IԱ˖zjNΝTkyX|z6^3'[s%]R{ټfs1SN]
^WpM
TЭ]AsF%tᩓKQ*]Ʃlm77*^+ez
QԪkRtK"wT8*g쯫Yw,S$]pI/zRu҅t]X~gƱ3
b

腬M.# fKhnpPC֠bH
	0*`Q| C*n}Bp_0>Ta➀LJRӭ>_2N[-Bd6a*fNP LcYD:mKwHE,>7#3w2v1$  `tǱUhїÒZYq#Ps))Ȕ|)+}XbJ_mܮ$	{rmStOR#ӣCaxNNAGDo;Q%RTC%߸$JqQTDc'h6@t<Dis_ّv*hiކ;
i
M3	Rs9U^n<_^~E<c;Dg iQDE|SWJDґ">)
/EBWPKLT  	  PK
      A                org/bouncycastle/asn1/cms/PK    A             )   org/bouncycastle/asn1/cms/Attribute.classoOPƟ
ZJq0)@ufƄ(/ GHRv>b&$eQf;GxBղ{-r_u#Pr[I0^cF_v=5JeKmוfr`ԌJem6:3h.坂!*]2bT3f6^X̘M Q8֡ZD'C	T	nH䷆/H:8iw!Цm6RgZka Кŏ	闿 u@Qv,YeT&</EQRmSS1yMaI#
`r
f`,Ae*KhWt.&xR>K<'W@Z'9'gH_qc>Q^t!#DһXsSyy},=c@ܿ&%p8gpD|'G8@^y:e!#&
^ &0/r>?PK +	C    PK    A             .   org/bouncycastle/asn1/cms/AttributeTable.classWSw6YYIBEJ\v*-UZiI@hm]`k/	>>LXK;Kr
30.\M/
<m`%	5}d:A[c|\JoYX2%xh;0̤śEFBm,5=;b%ȪtLhX{¤DBadvtvɌe$cbwfc]72T(a9fO)3mXTRBCn9)֗N/{*-A4g)7i޲5SX*ƌ0CF&y0?989Z!m핯cSP|UX12層ͩyəmz4ZE9ggq2l1+YblWР`F;4+إEA3Ta>vCLǍ5_>eQ7¬4+'x}@eӪ9*3
]Uha8
'ǯMfZס8~ܷ^.lѶ5VQżRD*jYI!15]1ݖPFUX9O	ÛҞQG6ėwq29ZU
fͳ3UlEHTpxnM8*Ra1xS#*db^1G>򶏍QP~u8x5؃ZЃ=r<0'20f8p|?>bA`xĨ.31<;epa܃n\b؋NDз8}ndؘ{H9 ݤUUӮnyL/۝'\FEU.2?%ؚC	Fzw<wIs<#@ 2S/4&髊3Arz@+(PJſ-\vls	fʱr`UoϸF-9ӟC{y4#7TfoΡNkٱTvȋsc"
|NЏf'R襄[H!=!4aGC1VHۨ@\Kx~J
j8ҜVCx
\jsRF WAvtE/B#>f!~fԷ8$͡Db"Q#%x$XD;-Et!q=P`&#1&D7.n䊜*5'(C-4RoZQz7Kh+uh
gڎEYytG9|7,MXE!0FDvZ=2Mϖۤ-˦µm
(| bH><yQ}_D<(A0q;]miNXʜÚĨ8?PK/a  ?  PK    A             *   org/bouncycastle/asn1/cms/Attributes.classTn@=q:ЦMP@@
BAT
+Ǳ"F[	+lMDE	c
`sܙs=s=oowp!,J>2DX]c{XvulCw鮝׌
W[U"L\x~ˇ(/ٮۆVM8/U$ᔊIϯә>.0nqNx~imXe
		&\`f&˥\
pjzǻ C\q9"r/=$=Kr%,u}K]׺KwzXuh=إubJ8&!Aq'%pr0C
S"qf9sE㔈DqPY/;5znWk&.hR(*mV7P_>,">'sv0ߣƸZ2Fq\s*j)AjM@kcZ~$,%|@!)vPh~HTS^Cƙw)fS3|3U_$".(&)r? PK˭aJ  [  PK    A             1   org/bouncycastle/asn1/cms/AuthEnvelopedData.classWi[W~AJ- "Z6RC20dbVQZmyZ=g%{M?`7~ȇ3X%%,okAuעȠlVUŵs)+*1UjWڠ_? /R1-@u
ɯWu2`PC!aDc4oRxys:AݠU(f@txPMD-vfҎj%Ljfs&W59<
(3=@<)~5`5<j!MWH4KD?ٸB	Sb]J8Ny+C7!?VCJ
(R˅:h| W5
y{#q=0	^%z}ji`un"Qٹ~R&Ǖzb)?Hho9`FnODІXj<ˍV$Gv{
F>,[dbE즶*,2~UdBtAcEҢȈ,8ܗBL^"6,%\[El]""*E"<"DTi]{TYF
+l{s;0.O#Yn-K
L]5ˊLngƒ@+i%7K6K
+j05(L]Y9]Ue鴨UB҆N
=˿wiyг̈u+.胪VPBƯ
q-t
Ҝ'Llq38n꿅[B,KKX#6		KPPxRB-eȓPZ%G	xzᄄuh$Qb0<,s3p!@#TCp!@8Q'a0؋As/:a؉0^fxŉv2a9CI9.2D33D,@P"A=Ra(m`'!*9,.=専H#j9Iou\A6n!b$>1qI\5+\(ƞ$]Ǩ\bHoMࣛPbAA}fKrqY.՟(	]G
D"ZDlb!A5ӹ&*a\퀧R0OwSK	ʞS
lm
6ǺeߋߐR	>'~D
&̠EQI=>)
9)Z
>PҿpAzCI}1CC.gSja$e7.иIȗqLA4)\ėcX:9R=d54r\>Dˌk)s	`2?S̣)ڌ#)`2o}5e'i<SQ߽Z;`gng=2o$ͳlw9ae$8ĭYݝ?+6PKzI  w  PK    A             7   org/bouncycastle/asn1/cms/AuthEnvelopedDataParser.classVmWG~ ˢAj5jyHH"66k ž5,ݰ;A_A{
J=_sls_{?;s=a3\.C%2XMOXFŮk\زḦmŬk43ƄpN1\Y5XftJ.\K5^q!F	KwV(s=a/SUr+l6/ɹC'oݴR:C?L:fٴ5vͪ;p-J30s"x3R#ݦ{cv`/igr+Qf[piĦZd19e;̜]Ubdk
gƊ7)vUɉ`T*0Sw+])C0DQ8U5zSr6`pnPBh*2nçYa/@Px؞Yjs
;5wO@Z{-R1JUӖ)/'ʇEwTq%:Ij똋  _
^WpXG
b
N(8V3`]4v!6!<oDh<OC"~7[P[Bq;pN+l˨5Ox|W@1emh 2P	Um=X+'}/loZ!
;D!(R+=@Ccp^W50!k}Xà*rr]C?
a/&)ŧ{p(J1%Ŵ gqG;+]p~n8TJ`]%|)Ŝ(b_bKU/F1+S2nS1:%+d,CuC2ox#eyc$IhV@ހt	djdj0<Eu~dc=	?~&<Ï$GPpQtfLNid2Hin
)~&\IMX"Yǂ\0,ߞc4l<T$<H!ķ[kډZۏO &hIȐu1z9.=7ځYx}K'xPH7tt&.wiɣLֹtFO!m7!/Q|;1UYgll&f$8}mTe6PKV@y  }  PK    A             1   org/bouncycastle/asn1/cms/AuthenticatedData.classWSg~lVBJE6 ޢ
pILnއGk[kk; SfZL	@i98F0Ϸ>ǳ! gb K
<l噣FFq@@@ox
#0ݯ!ڵhL3`$=VOX)QÁQҥ4Ĉ5G
j_h
-l2Q!H4mhmB~Ңޭi̤Ɖ̧&+dck9ZT5=]45YTaՈDxU}z;T@kc
褅t13CN5(`>ZRJ_(Ր7%wMZan>JJC}q/D]_!RWUz۶jDjW2.P[s}DXbIE,ohF\
k^v_3;VD-SɃZ Er[ZGu/Of7VB~
4jMCVnLK@un[Ad%1ЈpvD^J~X}K▰PB	%,TIX.T[BEGB
kU-4kz(ׄS_{" [UGd|^ΒF
f꤈Uqw&M^1)+̝ܰ-NeeiVnZ&3ko>
~gާ
@3jKYtU=VW۩zUtylֆeu$=r0*vBzr=f/]&t8(yÇg] LGğ;^eA$#OȨdX0
OXd'cJȐ`ce,[e2rm2
&c:t,f`d/2ePP da1g9;)D'p;	/;Q^+:Qk5V^w}N$/1ax	/tb1fxˉp~k5DjZ};_,֍:=p}͑nTesOsKکQڜ~ON<`2\m#G6
cmLa3/
8)8(qS\bg8N*.{#Kʍԏt	vȓP/a	
|DHr$d8J[Yx4G7QEf*n)7Qk7_ڦT"Z·kиW(-+%JvC3^,:Ќ4IS9DՂu@u",̼W!|u0@ORRqSnrp>7cEzY=ac2ϤЖ|2e.³RgSؙ|:e.xy6vd0O]wJWᙤycz mpWb=ali'l'lw:a?Iڏ'vauxhW!ßVJLf'Ke%e _7{FVK<_
L^$DSE.ĺkW[Gniz{Xd"]8\Ӆ`Kr\_TAb2mӉl@]̦[@݁)ݑ(h/HP+; kPKz6    PK    A             7   org/bouncycastle/asn1/cms/AuthenticatedDataParser.classVRF=!hS	%_A1 	-:5@H.0"Fr>)	ng:O:Ӈ,"0]9޽?	JB芄H:*i|JD`9yّpfpt`M-a,"F~ƶaaK袛i
	iYg׷3z.NJlLq\kO,@k;vQvLےн_b	[lis{Q.*Uj&#v;^44XIm:<[/Rz49(e	
e"`\xcP=YM^CFQa
Gh
X_fQBth M],FsjZ	tcݻ{kR^:/Lm1̰bӓPڏc,[.5LE)eKrUZ,&'yڶ2zd\'#˸,2d\1(㪌k22-f	NBŚ}G#ţtѦVMq'uZ?Bތ^l\YDִ#t	>joY}Sr"i|Z;w{O-vҦV̮S]7pOgP"6#b*おQBxBW*㑊saV9H["<;dİ Ѝq<QpOx&.D}XaQj!K3vuJ~sYiIO"Ў6],ݑRvGʟFȋ4˱w!?XM	 /~\bzr"((
/]$11k?*aB8FK kb=7H#hxWmxx(1Љ
La+/Rv5	nLy4b_bo4nf\\wa#	"*o`K7])t<MKwE\U@?GbEʰOEƗJHΣߗQ`'Q?ےd4kPu
ѡ4\(Hy2jEdP1+|3{yƇNh_PKrv\  K  PK    A             -   org/bouncycastle/asn1/cms/CCMParameters.classT[Oa=."^,[VQʥj\XCxZflᓾ&}dԙm
49̙337_ Sne0`RG\#VëM'p
eړRpqȭRg!6옾7,l[y[tk!X\0t{ʮ,aIެ62#RӉ*\:-XV84XG-=3F9ݵ16qjs*
CvδzjƋ{4i6V։v 5p4Ġff旴iFn`T.mSؓ7_^rK9sӴ-CgEq^Et$SB?[Dz,"oбuz]afKu4G2U RJuF䄙<9e0{i'H=mdQi2.3
7[/C&2ZʐdU!3PpaXB70LJ-1)	W0"paaFB?"pW"{1N:MѮ6%lM6=_ m hǢlO?7Y@
ԯPv{X*!#C@Cw -$+%<R"0_D|`whW=W]̾_mo\K"Ҭ_F'UpZW;
\z/g"	QbT?3Z/1f?T]T^<Xݫǃe\	xi[KQ`	EDXPKI|]
  o  PK    A             6   org/bouncycastle/asn1/cms/CMSAlgorithmProtection.classUmSW~.$lQ4Ehհ![jm,o%@%Yd7n6t/~3%a~3MN9$0<w99{Ͽ`:}81CqW<8i87.2el<nhv^Ni9&LF@p\lJ33[^YOhOerVLMiSeY5Ugywim+znʎVLj֗9
j:M[Ps9ͤkyW k#dyG%D=b*
-HJ #[7gj4z4hz!K;yrau<r2LGz넄c~`dҚ-Ⱦoв%2杌Uh41SVZ]hޢP9ERߜ{6И8=TOv)\#yl>:5UdѶEnȍhߞt757hY1Xi%$pV{IY.H1{8Uݡw=V}tyCa!vk\ꁈ?0y@y+m\\;	f vJӜ-"Ҩ-}}/RS(0yнׅo"%DӇHԢr[[fٛ4֦a }N%: Bp78 cm3|X ݸ00p~?c3#E?"cX`K?1ϐ#2,1|(>gHq+~\Ųq
6e-;:e?Ϊ)<ᨩ'sjno"(,Jgy~0H#{
UjDA;D4+%HqdP+%}p\l"y"q-eeD%AO"RE_QCR0&ᚠԉNgOw"{dEd)"mHX~f憊xB"m<g֪{R4Kis% 0z:GH_c?Me]e%ml`mZR]}V33xLi~m~뾌U0pdG	l)b;q5Y	ffw˸om1(aPK,[  
  PK    A             -   org/bouncycastle/asn1/cms/CMSAttributes.classmN1&@BJCz.TUUە1iEkRw\ }K_|X
=|dmnd{RIsPHţa[JLCf/#i.Qho~PTlxe#~8fDiD.TԗMX俹*pO:ks}5ġFnV>צ'\Uõ%֏vӘHvFh7~=jV8\ȆqM;W_PsuIe%s'l7[RBi!
"a@(*EBLVǄg<S9%CvŌ:sNOi5U'\өGjS1*1vlMh!vF711'،.ƟQ PK_  
  PK    A             5   org/bouncycastle/asn1/cms/CMSORIforKEMOtherInfo.classTNAE
(
BȟZrv)&>$&6;/|&#ĘP{3s3g Z 8=
!LP[AmcelrQ*V1K+jgժa#3u˴v	.XvbE[\ə$A,i
ՌgZK_Lg-
ݢ&s=\aԢkx )O29QgXMqZQǤcM9e<zs=Ϭ.tg%(95+lx[/=j3VxƾYB:%ܐpSBDBn[ QgblIAUWɓW{6*
q%>6H7gq
R
6FhC@@P@acThc	#U@B}ч	21)#*dbFȜ<˧`-3,Y(R5$aiF !5%>C|?grT訣i8=AR8AʱT0L$iz0~ȋii}لs(QGw>oC`aLXu>?\{_PKky    PK    A             4   org/bouncycastle/asn1/cms/CMSObjectIdentifiers.classkwE[Ij%mS7.-"izAR
@e/fwll̶xx~ ~ ?b_H<33s~"E.,b0vMN4W%0fԟْ2d;-?Qc1Zs/ّ ;z4_ځ0î'#n7Aׯ{b;~8ݭS9
k0+YVL2/WK3gwv̫*neX״Mw
;ю{-VէTVNd4㉞GSOoctUv<u׏<Fۮױ]CH

d l(D#BK$KYliJ
ѓב$*h"veښDNvb8[-WEP*Vk4'{]wvڢXjƫKyAtDqeK6[
;,bTkF[_<=W=:A.iKs̓O^Tep:Sq\\~{3AԳl1!(yb%ƈ1N &ċK!0q8JB#'Ib8IL%b%yb?po7DxEm*qN7xM!>&>ɡܾܾ]bX&>$nwrX`]{M ^ǧcW^Q߂jj&؄DZKZGi֚:uNcZk=uBZi=֣Z&؇ҟ7_%c$ѕ،I܏FGnW^$aK|Ò*؊I<bA~Wbvh'f(c?ĨK|cMMFؒhw'f[OPK h    PK    A             .   org/bouncycastle/asn1/cms/CompressedData.classU]S@=KP,؊D)  "mA-)o
5&FgvdQwӴ22=ܳw7__+?菕*(R]I={SyUSYvEKʇQ]3͈i:/*X(꾪:r%ƴ!kI4;PF`i"C@ϥC{FF	ym"Z U=%eJԩϞingSr0hOR)eZ8d6*wMI-ˆ0\zocyBU6tn|3fUC=&Wq.CMl<È
/aڹ?].*GoR">Vt̄a-zQWiɬA,_vVj'm5z<r(#kPFF]l鴒wT\/	KUumڹ=:
Y5z.]`88\hŠM{F\!qr0a	/&8Lrx(fEbFDD#Dx0'1'"`QD?ҿ)kնewk65#Zhi]@FȺG*tބS,ISDS?f:J6偀tzͤFsMx"<$IK8%O"'ʨE*bOh.=~}oB*E/Oc$G⦱ÖBE$}R ,GN,ݸo-XM$ƃyX1LDՒ~PKe  n  PK    A             4   org/bouncycastle/asn1/cms/CompressedDataParser.classTO@6,tUsu"mn1!?,!BBBO˭;fb{,_ihb?ny}+5l0$>åȗ|n7}LK6?{ltk |cwG$6;v3d	IVn k4{r<ub#9Z۵vڇߵޱky {[6^UqQMjz41{1i v(h9j+TBt\04)a'V/x'TdVz];
Ce
W4jӐ!/ưl|\l&2GB.MDnz2Xy_SŊed56c$
s4p@
w$q@U3E^Lci7HMj2uPб:na%(1"CuY yJѕ$:*Go	Uld2*E)y
d7KgXgCϝ31|!*/XxBO:yv{Ӭ3d٩GߏtaD5,F_aPKazT'$  0  PK    A             +   org/bouncycastle/asn1/cms/ContentInfo.classVsUf
BAÔI@A)P%FۊEna!
E9L_|I(3Cc=g4mIBpνιsν;~p{xI`On[a97SF_,vsZL&<+/fӠim#Zܟ1-n3-_iNA<Z<N	Tʰh!^5T|	-˛7RIS7-cL]1tAq4bS<nVKL[̘1%QJ8<3SJ(v]'5+$FBKt
H9m	+&[m v3Nڴ#f2nDx^qFXXG3G-ݎksIUgSFul7A"q*М7_|\0:1_5Sh	#^"Q82>]Nv*f}qcSc8yT=rlUZ;-C]O2L_ȄG'f6!SZ7"<g@coױJxYb$^KtH8 qPaNDDD븄5p#@Wt s{y+nW9O5QX'ef
DB2@nho]³v,bغnr5Gr49u-bjZT-Fk_:3@%\w(fÇ=	UE^W*vQEflR$*z0«QSю7x{VɫmxKE7`ܤ8mӛ1wX\`Ї0#X$|,|8c1,LN=ﳈC?tNBaWy5&}EQ;NjˌW',4t6j㶸zDKemu{yh>G|<b}B|GRAf-f6[܈qC`7<p='ʏhbxy8!֐EYG0#7B
Zq!>%H}4zcm7, Le	c߅TxϫUwJj4}§#
StTTe*L!='SD6Q'n:	BݿA8uGj`̊*؝Ŧ%p\
PVBnHu%
kù"Vw_P xw	Y}L}G_1'cXtOaKtö"2dt@<c\FS|)<CD_KYw~PKy%  Y  PK    A             1   org/bouncycastle/asn1/cms/ContentInfoParser.class[o0^h7AMm	>TԲwCݷ*|(ɥD5}s~?}%qİW~`Pi4C%׺gd0=Ʀ?̺~sak(dP1TӯW{;<p๽T3cHj}y!>}9`gT*!_Af]yE6v85_3q@
*,+wfa arۍaImEwN)]OcyTOs-qB	,,YVq{WL&jc2V-AO|+ś<&aE5WRT$K`ߢaӪ	cۓťs|@4hɽJc	7iNBH2GlRa7<w~JD3(%_PKYa    PK    A             ,   org/bouncycastle/asn1/cms/DigestedData.classUmSV~.
Km*(**.,mע(KWKȆ$v70_Й~s.Iarɽy9Mn޼XΪe2î>cʮ̰e۽SӔdTo<עc[
_ ن)5糞[_t<m(L;ޗs:h6|5iau2R.7dVxm}tkn41=_z0FZDEös%v#0 K~qmx\e
ƌifn_̵1b27qIYՂ#OX%bga.v$lNM:Ά;[4%>𑄏%\pQ'.	\ӛN@+9ӁR%t~3葀	A`6}% {olP[Tx<dv~2zmN&qo3=BKm[Ո3JzOaCһukMʠ
+qC}H
Πn6=lR
Up
N`L(8[ln$;lK6y63lfe+62 <1{l<1yFFd"fQ;t,}_T@%j]<)E]<biӠSdgHQiMhx%-eʴ:\тl$GđG7=G%~x֘*
bsA}.MMGt爌څ~jnCDTQ7^CFfjEk&ۂP%CY|1&),l/mgHej+ܞEEjy
ȗ#.*&=rJȧt! PKfK/  	  PK    A             4   org/bouncycastle/asn1/cms/EncryptedContentInfo.classU]sF=k;Q$PJIj(ql)D	-JkB"ᣱySE8Rj++4qi~ܕe;4꼜{ݵ߼ ҇^d6g̐p\ǿpXp-t]xn2is}U\Wl?1
u0ě^kn3ܟô1O(n7ny{b>3ںQp۬ƚABWUڴ̚_Ysg|ej/WeHGsYe<v8ǐ-65k!M*˭L58kM̳jgeȀW=T
=ɣ3.aH1	%KpBI	H8%S	&,D3
bNG0ekң۾QkTW'ĕ|>:ۉXn{3غA#5c&'̮tս npQ21[<s
 @FNAT!I)AL*pA,.)_
z\0+Q|+c%sܔqwd821'Sؼ	|G?Zs^~i=o I$DUZ +QiUSdG:6urm⨑]v}70Z:XWՒ;XzRI-`aU	_$w(LP"B=N"!!#QЩ|Li12O}̖
dJ.
u,oZ&4H
CcdB/''3gp1tJu_D<v{R2)Vu@
/iu;ŌD PKU?~  H	  PK    A             :   org/bouncycastle/asn1/cms/EncryptedContentInfoParser.classTO@~nV
LԉQ*M a	=fζE~cmf}_߾c!,'1\0L}͐8,[45Yw
ܬV,p?Y#Aq}0[v dWhZ2W55sa)bCmNjU5+nk`lZSS1,t\%?CTҩ6NIڎ]
;=?5 (cǛXˬ+?g^dn?43n;* \{NWݞm DQ&L
p]U d|I!r2 KRKBӁCv\E_\BO_9_ Q%|Ҽwh+	cx(!y	!0	Hm<0
Y8E떼nYD+"##b(BmKg@%)$Nob)B^d#`4~J%^
ͦb-tui!ם\-~w	xLG#Ȏ wӌ!|}ݒ%j8d
PK%>X    PK    A             -   org/bouncycastle/asn1/cms/EncryptedData.classUmSW~nnX"VbBإDT5j6|,ɚ],o֯8Scf:EgMxn:.9s}_ @85ui^ zlYJŪ8HhJ}U>[wҌm9dǶɲ̵#I֪9U4ݝ'fљvziwZiǩ:͛ZŶFj9joXgE欙ifMnO?dyҶC,ET6	38Y20D@d$/_6e'sOm3ҁ¬4
Ics
wI''6@u/
8.D	%z%$R`8wh2PTsBATR4v[3B;R+َUHB>(H CX[o]C664_:T*4kUN{ Yq.QUj}|#3+kyb2{zr7#k
)*NB"$$B"cLerNE.2dMR$䊂~亂䆂Ӹ`WL3`?)ƬQBЗ/2c1;er$[@!΅28ԅ!)
^!'K$n Yvq-E_FݴBB.x}?0q':
co Fqw4}6r[&CIxG{#A%Mfhg=]sEu;X^MK	"I$*:tU7}Fpk|ۈ0FB)^9.7_q;a@^Ool!]鼁^ǃ!aBPKxz  G	  PK    A             -   org/bouncycastle/asn1/cms/EnvelopedData.classWSg-dI\D*QSh!
h"P@Z,1	[Jt>@geʌ/8ӗ=gsQ0Y`jg0os~|g?~A|/jA'<X<sy8j4*`SD֯)=P#DԢ- )-=)~AP Y-oShYа1Me<3Ẅ́泭GI=#Av.4&jf4!k.璋jZ٧z6gT-n50]FyQ3hQP:%F,4G&"jBj*^j%mj
~K"mSMloaJ6:YiG"TͮV Sm=ֳ۟\&?/r90vH"E[US/\U6˚MĊЍƊnS5*@ueɲi
*am|]	;%쒰[	J'jU{In61j0
B%%>+6I^&"`5kMV~]ʏ[i˝Ŵ=b]a>S
z;V~3lB@f|רذdLU,ֺlNغeQ|߿S>sF.Zv}f)R[Oj;cpO>4F;JR#2QFM2㨌J2$!cQF9Qc2q'N2؀V2F
C;i3]2v#^>syyw<[0A-^gxC̃:ձt
uZE{H4p!!D4c
t1hIDPkKgdADאnHF*5VYstq\y\QQ3<gPH)ճH*YOȜ4N9">p@qǔ"aQC:Yg꧰M	Fc_|Χ-d.vҢ9\3639ELZAB tnꎳ켔kne]kLPw)wBre	(6a&H]JϛќQ(oHdʽ	/q2q'qYsyGn?NectԼEav89q2K(,y|Bv'3x"ҼE4¸Q UHf:ajjew9vzEA8]>(^QIdh
NizRn>h};NGYF
4Du}Ŗ+fx?B\oB$I:Sv'
X-Np_[S(WYV*wQR}n;\Q[$	>!+ts%ԗ8N
A{p=?å'  PK:    PK    A             3   org/bouncycastle/asn1/cms/EnvelopedDataParser.classTmSW~nY\DKQZM6Еn
/esqO_AgJqv?㹛,6)f&ݜy,6\.>dz\``tĮ\~$pfܚquQ%ϭP<aApMȲRT|O
O*b%0@ϫ$j[p܆ۢ	ȶ5_.JU'8yޕF.\߲W˻huլ8q?YSyPօCoZ\7c]Md̺xTPyk<t"
*cT2$7[g=<&N툺e.yOwTC\T89[c[ekpJÐhPð4h80YIWv],RpLAO.nSM]I
%t>Hg>z|-u*յ7o\ҹ	<*=8^
h0
d11Ja@>W_e:frpU9%)q]nu|ERt\RqS>L`^[˗*-fhCV_e76T9dT+4Ui*tʗ4A:Cz|>cx{w~GĴ;iu4#}
w" SMh1%>	Sy݈ee1~(es+&#VUZ+{l/
,wd-~\j%Pnf}R8_ȍ6iT"D'FM7vdz-GWQWmk&_3ؿbPK(4f  e  PK    A             (   org/bouncycastle/asn1/cms/Evidence.classUSU6	lX4Tm%B6
V)M1B%3tƇeݒF-T}C94:cps;n^EKBN$Ig犾VU˶feDU6\OV˫<R=4ŞaQw֞
!a^בfGbk0<h+R(^W!P?6JEzen6&]C<˱%N:
xdWyݵͅ5HH;L8$o*=i,lƅD5nۅpP٪Wkeg_]J?skma8u=.usujyyޙװm[uTVOln	2FexKƸ	2H˘0_p%
"i!6FΕe+nhňgs)HXg e#7٧ ,w)4\_[QEzgpQSQ$,Guo)~fCoŽg)l
B
I\L!D
`e3WR+l>f!d)e6)8
ǊfU4)
bMnJH9{wZdgH>x#Ʃҟg?=t>Ȗh7E=E-ì014~D6cri1!C,+s&CLoCD_ϢLv?)LmAu$hk/)?y;2MZ1q̎6q[M?DCt" >Hh.(hܓ +)slnCC.qzr6/9|uI2_b;8odNۙ
;xI,XPKhd]  C	  PK    A             -   org/bouncycastle/asn1/cms/GCMParameters.classT[Oa=K\RQZX.R!<-˦Y,[mD|GoPiMo2̶h M7;sM/ FT[;QWWf*S|6a6BÄi])8)Cd-C/mq}+aXضficr`am]MYmΓYm6-;e
F쥦kUSth-[m]#P$9?캶1R$	>l#mhNC}u(vΙVZ@Ѽ`8NƖ:uK
7E-m[8,f&m
{+Yu1gne8#⬈s"΋ ⢈Dt
Ph_x0SE:NRQ̬C{樒жPFҡU0'f5-`#,
v48
Ae\2ZfehQFT20$ÏuadЍ;w%8CDJÔ>fdЏܓH径ALЮNgiW?Ӟ/BBZ~4cLt6Pk~܀'ο,S
կPw+PV],,
EbHzERb%Gj].JH ,ajgKx{ԀL= \q
.HK~k5:j],QS`3s齜OXcrh1Ĉ~z5Ly
We<H+_a20i-2``%Xu ?1,sPKz]k'
  o  PK    A             7   org/bouncycastle/asn1/cms/GenericHybridParameters.classT]SP=@)
j@6E"(XǙt# Ze4@`zˀ'BQȌ/>Խ ڎ}={&7~
`^tKEݖr,Tt*9Poқ+i켒c12OUyV*USq\wV;~8~gOq	Sٺcjfn<T`O[CPq=S˹%81"F5>bk
ɲ%VU2~uI4YƳgtO/0μ5ǋe-egB&OY$;Y[GLFWdd_<)a4~,,Ld-؄cy=g3C^" kofv$D,Ǔl7:(mjLmvcM˚N zp#0
0A0![(AbR;}0A4QDaTa0 Ab\݇7Oa u`C?|-&	1J.L(juezڂM`>v0pa75;>#XH%
ACde@
2Ug_ v-ѫ~GD<*K2?mOIOԘ1[/dܮȋV'hzi:H_zzZ9vDT_PKߢ    PK    A             5   org/bouncycastle/asn1/cms/IssuerAndSerialNumber.classUOP=eR'֡At4D@㌑]WguuDLI~0k55s}￟ L@<CӢnf%K1TCJe|S)hUv[S!Loԕr!ːAÆEf^ˆUUJ֎&+%cRNe6'K37a>5ۨG*FQ%٩1ej231!lǨ'j^^LKE) ͟g,ZeXbS*_zA=Gȣ-am~,pyj$\o|}[Sb};=Z'YP9%dbq?d֘/z<m[bI/͋Mu|^K>sO}U;w-{yMCWwkm;a`CT;toS5#"0 	"xeQA٘ ,$C`:!ݘ`aF@Z}(6	$SجStstuڮSКӆ
Q袏@=О]ȆG"@3`P74K'K>FdK:bK>!8<D9G 
K! sR2Ht`;/mGFqGm@C>D&ﹹ.W\r170[$u\|wD&A8~Hk4o~`n]SgytCr?emb
VPK kL    PK    A             -   org/bouncycastle/asn1/cms/KEKIdentifier.classUmSU~&-kKP[l4Zm-}1F(MDCnӅɆ~_pDg$ǎ/ors6K8;{=>ݿ 7P
"D_$H@$7c4{
`hó3)M7-㹡=8v0S4(nį)A0[SR@鴽MYS%i^:;ЅU]Vڂ!}ʆ/(f>ؿr*RHu:󣪗,hP,tʆ}-bT_J*qb&|bTRf@72%']pg>k.ҭ&sJBg\Z4=􈭑SusbvIy^r2+&Uu26bp^	$=,`X;qI&(0,rmd?νռ:pde|0r|/jV;N0D@:~"hc7ǳukjUoNkWcK'n\2J>k;=^w3pκEqgl%vN?] c	ↄ+DIg`%J8pKB?> 6,KFRB&YL	!,H"x""yQ̲xbQ9i1/Y<e8Hb񍈏TQ]ORԵGJ)7#^f^)T( i`HCgcu;ɣ;Xv
SΡ_lW^MDeznIO׈m_{-lX'[ޕcC[=
:Hr ]ReCQ=փęY]Ea&ʐ)\0i
D5{Hl||}
$ױ$f[Ê\w5<Y
skQ':Ȏo5yxЋ;m6WqN;ՀC46ݬ.5eG]&\ORPKڛ  /
  PK    A             0   org/bouncycastle/asn1/cms/KEKRecipientInfo.classURP]WBE x*bC
ȳ__8OMkt>?~~
`4yx
S<4aQR+k6+f؆hٓiofL	h[6؆eVJVٰ߬E3KLS \![޶S%uzgVWU5 UVXnڴY?ǵ(+e,	wɹߜ}f&3"3mc@Ӎ5isט~ZQgƪaL\w7*q\	'EqZm"
e#m 3k0uK%q	^ˡoT߁u
A.~-?@n}f q:>cЗ#%m]SW4q$?3A}k+zxfM`.0I|'a.`>{ ?YOeGf\q2!.#M2ZT-pa"F8J1)	/2Iq&%tN<!	>2=5}6 DIpNHMQ4p@O}GbRìi\afi%ҳһO;ת^m
M
;ɦ-<ES6sdY:fs.ΐ(Ƌj2Qo}DXUbes5BʝOEV>#]ZA:0 KmK1o^;TkxMr[1Ŭ(a/PK30Q  	  PK    A             0   org/bouncycastle/asn1/cms/KEMRecipientInfo.classWkSg~$lܼa
F(ԀEP)(md+aFz^mm;qƯtEgSꔞl
3~yn
@~N9ubl}էZy9̻fUSaʣFB&sIE)ބzQi
pF}J<4RGu%ܩ((zetҡ%tBPhuLAL!=mzl҃s.+zB*{:*&PT%sb$ˣTMI}L樛@T"hT`<c!eT7ʨMF1
qU&hS
s=aeK"kdH2{oswO}n0W]F
ɚ3)1:cI-4zT		6=ZK`T#btFk*!zmtؚǄ{ȴ5D@q9Q[-?ޓ
f,%嶣Y
t6PcmsvF#`~dQ1;zNz,è-k`n9/̅D^[ET&'Z$/b;lqh-ռne҂(iaEUw=xSXu<ooFrz0]!_*:mcQq/pKyaK嵝12aZƴn.K<<;>қ򕟝%z.$'u;Mo)͵H@](s}0)DCCKb=FU{n^63Vy<Pv63fE*֢Ѓn%2Kxp؃`QWX{܃R`c8*C?)\u7dBaaȍ=qc/>QAw0F#"I7Xь.т3117c܍qt[V\t
oѯx[,LE>"<ЀeL.Ie̥J,k`6bcW8N~OpPl &MOP4eiBl1ʄ{|6J3hwM.IKS)դpUpCppY(LT!0!U8S3])*f)7Vm"
lrJfuTJ;c /=WvRÎO1
xh9OO6r3?w
+3ۦ|bTm7xÐ2BCT
^~9-)l#쿃
ɿn@0|?D}X`Blv{{kU`Pb`'jʤ:(7fFrfe9od98Mu.%'p,Lli \$LJ&d-MM@ vnz\oUsaԵ[c`ƻi1zOlTSt?PKH8  s  PK    A             ;   org/bouncycastle/asn1/cms/KeyAgreeRecipientIdentifier.classUmSW~.lX6TԖB5lj#}j [-vvn?Ԅ)35N'3}9s=ܛ}ׯO A	$b}xl0.O72ism*^p_-N"^!e?"5Bup-Bw[N1;Gilp^W-r_XZV>d2JyH>҂4qBpᑵi\srrrӬQB-7BQν$C_xbSUVNRozmsVMŵN})Y^:: NFI&,_uͳkA.sъ>Z/vD2w9ejw}Qؤb&(8ംQo)8`LYW613g}VIgV_=~sW*#aF<^*./=J_ay=ٯ.cg,\h*n!J3ٰVp]9>Uu6{ 0+AZ	4D\ûȥ!!akUI֐Č50'!OTLS!aA²
].0/3"n%T%,JBe|Iǥzвm5JՒ9dxD: sQSeZe#pv'$1Qhߌ]0lNvs]ᏈwP?A]O`SXwvpjr6o۸+c(kvv_ª,Jm{=pO
S,w5#@GM-Id=B]i'_pkkp<0g(4OHSˡ"e}IMuPK.j    PK    A             5   org/bouncycastle/asn1/cms/KeyAgreeRecipientInfo.classVmSW~n\\Che(-mD%aC7SwAaLGld05y{vٗ? bK 
D'8qӲ-wF.'pʔn./Z;7>K2&\.^9iن[p<ev,iU{#_E^=*JVm.t,#/tGo'x1];5n^ƍ=OL3r,Iە$Π?+O`$ur*D?/%ؕ3')s>/7dF7}[8u!a:Rֻ7
W-}NomXYn
LqzzÆ44}t>mݢYPq+xOA
(x_
z*S𡂏.,u(fXM='p (M&}L4%j[D~PZ&6y-mZ1тRne<fga"h cAuy\U_oe_ˀ/%,ɴ״Mcψ
یW<wOc$\#?OfAA2w_2
7(>A,\c\Qt!E!Qt`0\fn2be͐8	
w2|bIC<RqU>*F@U2[bHǊ
N!Gokd~G
q}t*JH"j* *wW~tΕm	z~2z_*/G!|K
/%*Nˑ!Lr+<Gs!qc^`4?˯mMԆϫIR!b2[<6;KhktAK0ʐ磛dy8C=ta (tM}
-ԏkj7Z35-k5Y|VUoS\2Yq/$vt$9
=~W>drFӱ27mPKG,I  +  PK    A             5   org/bouncycastle/asn1/cms/KeyTransRecipientInfo.classV]SF=
R'-Pr@@!%!u6QLQW	HDVJg
΄L6w%$3^ps=wy`UT._aHJ[:<ZAn"v2u,}rVJn#\[0-suw?"Í' քl;
J52cG*oP2*_77箽k[`SVÝ2SjƦP)/%7uYuH43$@@w:5,=AAV.j
KkGdfg06}13:6e3MݕORC'xrG|g	wv#tq|ő8qko89axݛcK@}B
b1PmRroh=P>͉cA[&T^>%b۝	
uN)9]V$Fnc[76J*,Op/U-RU>ic^|EAN9u#
&M4)
:qUNuǤMŌ4פއ,nJ4sp	5⎆q[e$͒aaaЯW޷,1@JTzz
^nf6O3xX8{\y~~\l>LM>X1Q ;IE#111t&q"R4feA:wY4~$y;WdBOK}٘nA=kCv!U5~me2413%/po/,@0!
V.tK||ӇTMܗ~9+/?pZąPKde  <	  PK    A             (   org/bouncycastle/asn1/cms/MetaData.classV[SFd%II
&N\ڤ!q	BCkC/["L_З%tLK:mJ- Ռg~|{?\3~)eR9ݷ4]3ШR(py%r-|x3|JyE)[ᦒlܦ7&337ʢj*pЊY"ІRX&UJ+Utkte&Q)sƶWfI+U}:\Yk%U9D1sz((J$FØ;j';⎲p>V-	AL:ZsZrrQ@M>JU\'MM58doyi"+ZY3*Agyx{<8}<.H/V'8Lxbnخ¦\oğ[8txMHtK=kvd^j+`JʢUJodc-~J^ko+~xv^vz6w?z8edk)3mh)Cۄ9M1Nt#B?{ёYqE+"xE|EY/ "iEpUD71fnpO$3wayf3@%|LZR8y,`DefVL)|%@C< cI@_
==¬UQZ1Ee+r>1کc[-`$8kN$wQ{^!/Gc{X/!+a7&-1}-nGQ4x}٠B#rD ZKNKR~10: uɏ\A|خ2k<6#0G1㬐|?Xễ;27ef7k뎻N"h
M*1cFD ,W[C9EE9F+B9c!D䌝YM<+Y8uCw^$yMoAy^b RƖ@נEѮ~qN܇'LPK):  H  PK    A             9   org/bouncycastle/asn1/cms/OriginatorIdentifierOrKey.classVmSU~6,K᭵զЖHXbBj*mXلGG8qF_8nJ6jfr>9/׏?=|>
COx>$C\s_34끀qŘZkfKVL-U0YfXs+#/`"i*u
R,2#+cV\WJ%#4M,(%fE1>I>>%K1T&_Jef35E_.3 ֲ'P/VTYD?獘XH*nhS@RYkJN@Fl+JTW\	yI:)+'r4T,S3reMrǁf
eCWR2fVAOCZ*%:z/Z=4b;ef
wU0ǲu14.KQs[iةNVKhf
,m
1&₈"^qIexCWEqj0-Ԭ>@Y-&	ޙpp=^kK[?}ٞ(<64Jڃw#lHf۹je>+nw6ժΨˏ$NVxCHK끸6u+X]ge-"<2+c|#em7qq_u<y.\$dHx_9|C.>Q/bX0'XGxE
	S|yS	3X,ID)i.ֹL}x+(^,-TbߟcƯ0\%)зgO*2FIE!|o?pexm`sH[55>p^A90x"58Ew{πu"qC/@ҡc#G/}#~*Qؼ_@8g>tq*¿ VKz<WEUf	1T`G<(Q*iN
FxpZB* z~v`:sub?O@cw;lV
=g;lm;>>d*©i:ESwnȰ% MX$iABFwW=I
PKbv  0  PK    A             .   org/bouncycastle/asn1/cms/OriginatorInfo.classUSU6	dPTJIP`Fm*(jjH*hЪvgkd>3Bgڄ13ھ.$8:߽~$Og sF!FVs	(9N]l˝0Uf&,;Q[ekSٷ+	g$*IbZJ*aӤO7nz4ŕ<<u5נH?ErvlWCw(V556ӹZ0Znnmnlc> ܺe[VjL;u3]ql+]k5#5tT]uUjUu8FݜL)_lYFHd<4{ՒזVM9tѻkX_ruukroψ1$⬈aϊxN"FZ0L~iRGz,\2mS8M{Ԟ\TUs=/?5oÔҭ}3j<dWM,|5eW	PYQ1
7i69/9Y#21-Cf8saq*R2$xdpci^윌8^exdJÂd2,2$$Òqξykޓ"&I#a
oK$.2}-:U9]r5ems?A ?:7Qu
F(1z: {E#gb(tPm|
7Q~&ns@:Tx{6
mH[x@hbu(5_=`^i1WK'EO3$B\~Doq%8SGv.o\(sw쨏oC)Xoagz!9NJpFVS.G1opm$}-̳cژ*üj&x~<+?d9'=ؓ0PKL  	  PK    A             3   org/bouncycastle/asn1/cms/OriginatorPublicKey.class[OACbA.(./@ !v\.n"oQ$_|Cgڥ%%ə9gfw<V	+ț16/[Ş{wH }B]F%V\sL
Z^msZ=%hLL'r\SK;Ƕqj9gDlY`IǴ\{bs-$BS3aNv-ӲuWjY*]ZPYo-UCe֡Ŭ*U"M-	!	Wjp~HNHdfNFOg?E+ōռz\rц_1궐ު՚j낄bd@?ѵnZ:J	k&xu*nR҇|<\eO E߻
qWA D-Aa+@QMhaLĤ.L3+̜nL	PFfdi2`qG.5tF3m)]q0N
iWiƓcj{|QxNaA=Gd3>C?}\G*?Yk	|(X,'ݕ oFsԾ"4_=l^?E@8DVĒ"R+rQ%:(/X{uq.]cE,ɼ.encs󝅻={b'LPK    PK    A             1   org/bouncycastle/asn1/cms/OtherKeyAttribute.classnAƿ²]ЪUR{AHӄeY(L7#7z"&gvf~wfN/_,bH;qȋ&l;6LF޲xip1-zOuɻzi2y3Hdjo
^td\yf1keT6IFbm!pm^t`ݵ:	3`iUw.r}
5^;;6,	1	$D$006dRC&|>Q8A%02:(*ja${a.Μəw!`;&6x0kƞW
gKd?Đ;ҁŘU ㊂0\ SG)cFtW%¼	"dL")2"h"2p[&n*~V+pì<3l1Kx#?rCm6`:Tmǈ-񠅇M$!KQ!-r*ڸ¢yqqh '*_d#!*Q>b؇4y$%5`1VxiN/ҶN1QpgM:+cE7M6ZKC@LoPKdj    PK    A             2   org/bouncycastle/asn1/cms/OtherRecipientInfo.class]oQX?VvEQ`SH[SJw&)Le[( l23g̜W il2c+O
Ӱ1LW5f꼷ʕno
5@6)XZ~k
UaԭTA-s6
^gX&ٿd췼ufYТᬺG3\ƯƱa'\$+'/aaewx;nRgܟg@Z,>p,):qC#G/(۱ WLc>i'Z̊ړLxzJ!7jV#fL43!5D[ɐ &Ã"
	ma#Lć G Ȅ9Fck~BVI0x2}3y[ix܈R2@C]@7nK`/}L0n
%qu%yG)9*a.Ox(:5];xV8HbF~Ixo#XT:Hn1Q.9@n:
s	
ϏɋUrҋ(ҳ/
G7PKn<O  T  PK    A             9   org/bouncycastle/asn1/cms/OtherRevocationInfoFormat.classoOPƟ;es?VA%1d	a	]f]H(~L-}?ܵDn1Ks>=~zҙ}mǖygeSZaIX[m	KPm­[&k΂RxAƿ|I8޵Eab fյSf|ƪMZTġkqiQuׯy'1|vbU<[ڇB_CDCT C9[;"ǐ
<gҙ||i]ISFymG+5SǶ{)M[Ң}LACy,J]4!W]%t踬#!0}Qd\M%$0Vq܎b(0$Ĉb3QB2%zy
[o6ۢHQ1N}fFP(#OQ{(ƍ:ccd?NϸӀ0=#i:whwwF&|dlq;o|C	Fu,1i!=Ny|!ʡ9G+申%\cʃ'V
c#PK-]R  }  PK    A             5   org/bouncycastle/asn1/cms/PasswordRecipientInfo.classVSg= KhZR$U,Z@"H(mNg٬*Jc_513п&Lvy8w=ߗ^0әU=l3saٖwz$@6m҂+ Y6Coћ]t05]kG,Ǟ,;s4ODUӭG!z(qܲ<]CxWImpoNI4WS+`8=lg(,`4bxW\.	̟&^'Yj}5X3:󌭊W*8ni4m˴i+~:q]kO#["}LzZ[g9q9eI'EEqFYD|  1M`1bN0üSInI~`Ԯ|۔ZkxW͓,l\&wx"b>jFd-L>ѵtk]֚Wd:v;~Mu8fB+Y[،냣P]2bTF.81'z 02!-^**&W>ebR4
	0#a$|/%|J	#-Q,>7YSO7ir/Nx"E	I+
5,a^QW.aEPRP},FGR?>RWzqP5S{i]Ge>?w >m	O"/"&"%43d$:V;fT@"+_GFTQPwU $=˴KMSYW`3εRtqCz> NCo70PkSs,^H1U
 .Pl`AFFC PK9ۨ  
  PK    A             5   org/bouncycastle/asn1/cms/RecipientEncryptedKey.classNAƿiK+ EvAVZch/ 7v,ہ[Dl#/|(v)4i%ə9;3 xL1p\Gdиk*Vy!jskJð|vt-|
չ NKS<te7̲hdo3f|Kp%ǵsy7$:CsRg/Tl.q-2.mt۷-*ے++P+D\a]rqL|!ł	M%vCl<Ϻj.so"^/+}\irm<2=ӵjk62m<}*^LבZKD:a744(){q&4S2$d#{2̨}W1+.Ü1T\üJHRW}y"yaZ̓-yƐ}'ViA烞R4vB>:as!b_!arxכkИq2!iRfN!Ķ:<ChQ0)hӛ45r0qV.5Q!^8KGqK*#'ۖ
!$PKA>r    PK    A             3   org/bouncycastle/asn1/cms/RecipientIdentifier.classT[SPBP51"xQ(Uܤ4փiiRFRQ{HAhvg~g_}0 ]P?lM
-LVY0
/i3m/$^33 LGLƴ)ӋZ
#7NP#_mm n^OW8z*e۴oꚥ)͏SF|%ST.Mc31\&-e
(C	/tYI3+ dSںz=M%GoVlIY5_U(gz%iU.fYylTfxJڙQv2HZusfvN&,ӭ\z7oƂ.s)"9Eq^DfDDh&]D".Q5gq-?Ch68?BS<T3h8%iP-yбJԊ]<6|RAE):<}kՊ<"NW.G@?021(52D2$ɸM-ssMe7dcTFƸ w%\	Ѕqqn%m/PB317SGjNs	O7e>vB5E.^"$2	URU 	9&ݜRb`5*`y䔀
s>_uCI}([{PGдe8[zXP_+e~^- BƳm<!oxUP(D[_P+\PP>?e13F({{`.,PvrRJ!qW$IPKK    PK    A             -   org/bouncycastle/asn1/cms/RecipientInfo.classV[SV
2	I$Ź;@4PR"0JH2[z{	-t2K:Nw%Ğ:g{h?;6!v\9Ih{\g]CnNM\N323Ul[HӔ1c
3QU j(9bЈ2yJfe!iVM5h=dd]n'rY]nibiMZάf&O6UDV12	&j%;`es$T-縜@chKѩJTc+y=;̈́"ILyC]Tj	6:c#E;Z4TsZpuT*!#!cn k+&om*9;ArKSNMb84,܆bqIXk-'[lA6;&>1.К7#bFdFQZ÷Q2"E8(␈D8,∈"hq\	Q5_ю-'6i=֤-GkNjmǣg;@h& OTVnZ&>w:3+oCUxTm/SFvU驶ok,v͎'g.Hn`-WvgCB{<Tn#e+2BPǢ
eHWdY0")c7^k&#20*CMbx#1!e#!$fщ%tM$[,H8/qEŤP$\`VB/zKxه{ŝf1;JץAs_Wt_P]\{78(q!
pHyC$s? ŊA'1}L\^@0^22puXC^oA.c//!+4Ui}/X]Ruj*Eo
c
YV.oH6 Њhq(8,9xpf8^?^A@F.=c|\G+1*ʣ>Xa|FLϥtĭ	
KDw~گUGO.0QpSYO%짲%R6FFF+?B	:z=[Z72Rg!?%8uJy>MO]?&Ǹ&?QѨs ~mZˁ0ꞠPK
  
  PK    A             6   org/bouncycastle/asn1/cms/RecipientKeyIdentifier.classVsU=6fm" %M7PR4utSMG_POa63MzfK;8ff{oy{7y篿Q@Ol:547]5-Ӿ& 6ՒGV0
˾k<IԚߚFNu6E^pzK[U[4w)<64;eQ!mWB׹gjZDT2j)U)	flf0]rҞhj.	j&RVBX#r{۰
e$+m$D)+*R޸CpZX\9uO֫_F{?Xf*V;o.ssݴMCİD1"m"D#⸈wIґ˓0>!g< Xli,q[t%z$ ^<}31?6jت)_^%p(:z^~ -].0tdlYUECw	1Յ/Cޅ]sou??x?d0%c1'0-$2áC"CF\F?.pìa>pgw%(r5	qSB)&pGBH8açJ8&qKy,Ir=οY٪=uc'"+Ѓ F 鴔%4^jG֔6(3>=q¹|/=E$@mi#죋ّ<mAω6/~qVN8E=w&aDqM|FZpYWj[8!i+?wv}""C'Cd >rUfVRƛx؄Zw2#,:B9Ѻ-DJ.6%a!2,]o%\0ٝ{ӧ(t}pR*ӽ 3afi$Ѿ ""<
PKIc  
  PK    A             0   org/bouncycastle/asn1/cms/RsaKemParameters.classTMSA}C
"Q0A
eA@5#j%fW7
#<J%U~\<Ԟ$ٔ\_~3?}`+a0C}zvm10̮Ʋ'S+Xa+:56bw-c8aqvts%f)lϽ_ts3hT\Y{DR0)za:E6
t-#82oU!;SMiܳ+}۶j=2<ʽəp,v'h&,]qZH=a\`<-K<</0LLI|[l4,{Ö;i.oIǾM_m9G
N(t(8SADig3<09
*gjǚZ3ć/6Hx<= P usDs5y42Yۏr6x}`MZZnIOrgMv SǬ<c{Dpj8vkBfAŀe
m"WqiZqMmbDQ=Wq7UǄ4̨
}fJ*.Je*.yo^i{Ve3yH'D/Biɷ7EY(R}oCFX	w>`isz^ǽ=~*Xd;~M

ImԀ}
]:]]{DL%Bz"1ȟT ɪY`
$/۵0[M1P'=7ݍ 	鳇*q^KHW
PK2SB    PK    A             *   org/bouncycastle/asn1/cms/SCVPReqRes.classU]OQ=,GE*
,hHbKH۶]"bSD(MF~ 6ܽwΜ9c^8MY=k.ҪNg4sMϛʳwm-e.2bڧ}-o]1-gy\&4甚7wקBSzHmh=K`Aj&lCWVcd\6n>1tSI=.\'I<)Wӕ1
nb=͚MBYB	7%x$t
G*',ݶ_$Zk<oXz%	3gfP&G5P_J`Ћ'M_m2VOK'}ߨrM<d,Fō<fͰe3f
>Lb#=x(6Blfd≌>Lǔ;xLa鹍iqSM}|ma9{]nF2iKOZ6Mr
!\O
<%	X)!^uRb~*In%O{a>	"GUNks_U樭}D_LEO"hN?T(p
K%0p 좑5hUaPquUݷH;JLM1e3x%'|p	h,/,b\UoIPK \  P  PK    A             *   org/bouncycastle/asn1/cms/SignedData.classW_T>fy!3DM hEuRġ!51G7d-}nvIm3ȴv1ҽMO?Cs{̀{==s7=<m>Vac@`~	 /#cfzXw;{SF2"Mfª7pbȴPy sx~~A	m#
u3X;0E2HQ#||o"VecZHNEf"<1)kw<HƬ'؆DxjHnQj?E\se%V
	I1'*K;Ͱ>>3
̔aThՉEM#ɦ|\ўm8Uz;4:	
̖$C:0p׌.ÌZG%;-q݌q#w'Cy*lZ"hӢ=CxT#4CV,iRn0Sdef$|:Ѣ--=[0>VE\[6@m
)k"[dD̊
SA
Ҹu(Q#R8@:졛3٪6b}Q[mW]m$|"]Tѽr_q;qU"R/dt._jZ>c%WON*+1k|V¾
Iң|wؾ?.0M2el"cdlMƃ2Ze<$cWhCN]2^#c7
mׂ7eVAkJLņ":F+6v~K2a?V'mDzx.ZC`ƛ~ЄzJr1Tnvm(05bڐ?72-\uq%e]hrc@sǪyA)1!5̝ŵczNF#N=Uѿp	waŗ疻_9|T
\7/.4,(}*RuXPPͰ*jpDaUnF
*4+WGUET,qW'Xf2$T4`PZ<b5R,T0{RqN3oax+*Vx#>T]fx{~0|a(>`?F<O20|A|K
zY1<l܇)8/2
	o)x_Qp_V$a^4WP_gYaax)0}Zzx>˟8TZ'qRAZ-2OAq4vZ ߡw9ZA+QNx$Y"X]|Udc 96#eB_[*+'axj9\״,~w=9~YqW114{3	0s^ksU#co&5R*^qz\^Wj5]AF[
^0}^5ů\Cq_OgPnX-Q%3[=5,ɣ790|Zވ\ɿxG _X'˙Y09Y\wxq8]]X2ISd$i/l%DMUB9)|j%ӥ}rhMNuM"qo?}6=7٩DTnk(4uwN1̽/uk?ۋ!p4az
)<Sy̓@%<w_En<#WS+619dϋk?Jc{Az~J:ƺ<x,*BgBҸ-I,,B=Ƀ/:2Ohe\qƗ؉yKApQce<NeKoSVI:mZJ硠ٌ8/}/<+89:_P+̫/W=QPw"A-z)`ڛõF>Dgzšyu97y
\,Ncɞl.\,^vv]i_`
qQM(rQ(vjOsy&rV{2k}A9.qH(D\E%{:<\?PK&    PK    A             0   org/bouncycastle/asn1/cms/SignedDataParser.classURV=
2B0$$m>Lh[i&᫭iMH"_H$R(S3e_+^a?vWGݽ{u`A&KDE	OpJA]ֹ:,i	˺z2;u/;Gn;eIw'HX5trGP	q"03q	XcNش
fX
JUlFP0!}&I#w,l],SrrM5Dht\fHcmRt1-x\!`fUls,C#V<1;=4LTc1RÞc(چ2inKL|2uYg9K'(uFpn-u9َлшJ5|_VϢQezlīfUfkғeer('qצ!N)!͕*6g u4 	׷
[޻0sӏ2>2nȸ){eܖ'3w(q%)"rW$<u>EH-*D>+VEwߐW@󛫜ZReyjEyX4y@?VE_PPE+TьkhRщG*QaDE_OUsh\E&[ _0
慂^)ǌfZ1+̼!ൂSh\+]+$'&4CJn-2}cqA/-&D;DoF=O{A1EH_h#wZ t8:,}1!+ZE@Ql$5	YEt[QFھR>>=.~b;Xb{; ,
;^**K;ɋ߰X=cMzI&cɣ5v"
*5v:]7&JzatP6jʼTcOj*+w T1GTDM{X!s2ܛ$bj C)S*)Rw$Q|b&"_8Kw^(RҮRPȽ-W$y)l(ťPKf{G  	  PK    A             0   org/bouncycastle/asn1/cms/SignerIdentifier.classT[SPB4HxTJZ&eL&I}W|3JUfT^|G9i#B;ݳwvݳɟ @&!iUɮsh6ma mYZ1gcSi2an:۾խ-rT@n[mWmMnQ͑Wg2魪۲nچD ks8Nӷ|ӱ9VHK%*PwMۘ͛VVw9P6TϷtE츒,Ɠo	NIٚU7,f*kP4_j&\v͜۔p:3ΥVyZSҞ݄让Zk\c}\2fxhqGGv<:yt22&BۏwH'Q6D?_:YZOR
98^V
Fzեcc<Yhã7^-0sXDppJD#"Q',Bnfq("`yqfnhmMh⁀L	zqIfض0-Љ<ff&i}CМU킺&0NWǤ'$}INh"ˣ_a%Zi+q0
1?#`}hݔo/HwвiE,1
4Pba=k{]+iEZœ]̑gE~ToGQڊieg$11(+1NE1FwW(0pvKW~Дr|aC PKJ
  $  PK    A             *   org/bouncycastle/asn1/cms/SignerInfo.classW[WWN82
x7 V*i
jEi!0b]_ZвVǮ}f&1`f WWZ|{;䏿1`Rb
	S{0
,9LaZ46Ҫel2&g3>saO0aL[nFάpD5wVv=v9]bE=ɪ)Ě,42j5F'M9ji0t^5}(iV>HҒYmb䯨QLj"z"j%Ӛ)ɕ°ݙ*F64o.m/C<g\LJy;%ԼٕEeɬ6FrC?7eښg?$p %mSJNj7SA$JvPu`*Q>5 SM>$ΆRgVQinjV*#Z!#rGwN2n8oP/F휨%˘1lcTq>6x
ܿ08vs̱c/>f-8r8qm8@b60eèVqwIKcw,M7޵to>Ub
n(p&9x or0Ͻ-1ݓ>9n{7^S\].CϦ	7~sSA9Z<G_Mjlu/lu=BǶWݯIцWdH8'c@" Welyujd4"$cDd4aPF2j{]eDqI[.pEX1.`B|(ind$#	qM@V	0%u	aHŔ3(ʴQN9ˈ%ʷjzx#$CW!QRUKrl7
:VqEᢸJa0G_!ǈ\YƧKz-U9+z
&n5';,v|Feh_Eܼ3!C^ĬQD^i14a)ME?6#{99p81 !xBzB.=e|g2XN_IN}yD5ɓɈ+exn,+G7GbprJC/㎐WAw\v~N,b٪]B	&qvu#A
GRv^$+ZF7KF%w=F%Uܳ%JUWϕ۪K8Q"{}]
|	mbpK؂gg
ضpX2/"F.oۖpU_jPK,Y8    PK    A             $   org/bouncycastle/asn1/cms/Time.classUisF~(&!@8.-P4	8 Mzb K%}33ioif/U$ǎ3ywG>/ ] b  6?]?uB@儑5E0Kr6)5HdL޴9ERT-mItZ!Ȗb
扩ⲥE!BF440:0F]aT+Il!|\7-YOKфbrZq>3n))EiT=}D"d=s^F5MIP.(:H*YK5t5)+RJN@{+mM	P

U-ſhXʢ;'6LVSxNo'Ŝn,C ۬Ӕdұ9#'iiJL6}}#vkL9JRt+eeGcʹQ-uv7fMW֘xazqω
uUIJ)ɌsC1Աsf~tk6˨JN2JՓׯ
]2|H.][7`Kln,Crl.ob"dLa#C7&[22H3`ɰa7CCa/ÀPғxC'^g/Qui	Z:;'87^;{5Ʃ*13;Iad<VH䑈5^%lk 	kˁUc>oF(.2rA|?>T-fLAh p..<I3< 4]!gaO<:<D^ĕf\3Hx
D!0G8
E1\Aq)yXqiᆈadDġQ)"pq.,1RLrvZlQ?PP:!
A{nc
̈́xnOe-EV"RGGnxIgAhbH0 .??\p3Pć+	RL-)⭁/@xVwA_-]L/i
x/>.o|aaݶ|ٵYf.<XKnog_oճ?w=+=<y=_+ykۀ׮K F!qH,SVX_q(^'mP^Ά
hD] |q);n-WgN7^GkJ/L]5Koe+8jC)|zD0^uVdh
f	̺v}|~PKz\    PK    A             /   org/bouncycastle/asn1/cms/TimeStampAndCRL.classmOPw)l-RPPd>^VM|G0"73ܵVɹ{_}0,,C +isrdbu;az6MQiq,٪掮)ul(kZ[vu!nMk>hjZ2'%Srf^~0:/aFwz593ܘ
%%mnR[g2sՂIS3J]!%#T"y[4
m:\pM@.LS'F=FyUѦ@dcMNT7.V$'/κԬzu(t,J^5[K![}Iaֶx6
F >naF|:ͽ0B&ƍ案sHD/717S"X-<	fZm<:mc?jP} ?MW(f@&Ln*X~q@v(4F
I!fC$ǓteWiG?s#?-^r]@iB՜$MFcOh~ ZN9AtC:B2+Y IQ褑+)ٵzѝp/\H ^#qqC;&?AFdF/;,OΧ	oC u/oPK$5  @  PK    A             6   org/bouncycastle/asn1/cms/TimeStampTokenEvidence.classUMSP=)|[M+jҎ3mk+nJэ3D[t漛=&&a$@0=(d}Z*r9m-i-ԧu;jmL],,I;POY9=ѳ3Mڪf43ehqR+Q#JViaTNK֊\Kjy;ZTӃ3i~Z9enIC_eJ\;g-Op*Jfjq[.>	kI7#FTޛ7dŽ-NJV8Y"DqHa}ehc;+9I_?GH
vmE-pVޱ(gA5JWD:O*.G@5
%2)q=_Mۧg˥N)>+^BLy{s]WyQ*ۣVhQz<h@	d8ϝpJNsQG>1$$t,0,g80ᲄ\pW$6*zt`9zIMX)z ɥ)m9T/~(B8KWР㺢1^Ξ]5;<{%
ׄPC:CopA鷸m@S]"b[_^:ㄭlxEEt3ߠ۪sa>[E52RI
G3)/(иRDtSVn6R܆oMӄ+&
i./z0Ig
	a!YDzy']9ups:&cX?Dț[_73G#Q;to$?PKj/d  E  PK    A             /   org/bouncycastle/asn1/cms/TimeStampedData.classV[SVdI IKK0L6MRRNK%ńЛUW`VCg+1StK:mw% XG3ߞ~9gXQeM@ :,6-ӾKF- 6,VMRְgY[u!筒Yj1Ֆ7ݞ0iezZ.kf;o*b6Yxf?ZqdMgRKIK/d͜FEcb,*4kPnVx=/e|-MN+MN@sɕڐ|)liugҪ7R12..Q̛Ko]X2"E ⢈K"Aoxz$4p/;KbMzZFE6Vo .D-mW4+o|Rշ|t8=RmlS;"rԫQ#8LFhm<Z嗀m0=diP$'&Ml!WBӶַ]z.DKumi.]OKgԜI'tNx1g0%cWdU>0zOFe3ܐB6>Y9$O$caI>c\(2HO%!%a&,!	x,!5B=_B.wi)f#GCзUZ(B1AbZ|GRɎ&8@	IF=$#jjioxxN^)#Xp"QjO swbCadjl'ؾ5Kk$>[蜋c:w	
PD LT?!%$(U(iF[pKB](M*!9%ocqȞzsWIvd.4D+<'ɑ{sf)捺9맘uY:ż^7kmꊏr`_,Ĉ _r2/尺QS7\5]SӤ\'YD:V%pPKA   6  PK    A             5   org/bouncycastle/asn1/cms/TimeStampedDataParser.classUWdv4꼰%
vNtZP͐vamҥ ~O>o \& ⅄Xr<e	-H`c{H$Mf̄&]5m{@HH\.H yʎk3V..
^˲݊d>nlم&/{>Ϸ
/sM%{ߵ
Y*]:T5g60WQ'd6V(8g4N,^8EíQXhd7d*zcKƲ%sQ*vAv絼%#\tYda7C? Y!a7dx.ciZ~WBMDZ6Kx5bpN[!`r|qW}%[0\$#1nБyf}v!lDh1mob(Fzy{>o4'<ICz͜0ЏMZ)<&wpU )腤 ݸ.
zpS`EqGAwdFL:>sA|!ȗʸy0'c,H+AbIEFF
%ħIMyR
gQ^w*))Љ4Ib>}Ns9M4]$QDKk Ww񭚪ⱚzWU<s>ƶЯj`Vڰ^	2U58
UmU<zI$E_&Ơ3
=+N45NQub}[֔0ILqt7,4=/

w߁+2|dD՟#>Q"vQhB?1hvpr>
ҟ	ҟہ[v[OCw'҇ne_'.ܣ~FTkzVkJS>4)PK!>5  Z
  PK
      A                org/bouncycastle/asn1/cms/ecc/PK    A             4   org/bouncycastle/asn1/cms/ecc/ECCCMSSharedInfo.classU]Sg~|-YbiP1 jA m_f+a&GH-Tif:zㅿS{n䣺h{y9yϻy Od*@$ZbU426Ɩ+mB
cGL۵9C욫ۆVq2\ӭ	Hk榯H9ղmckn=e
7fl)s"8US\?P
.U.	̟W"fug%=HO9v^LflpW%LT-zy2}oU2ժIGYku;Ukrcޕ#=	K8.	'$|(#	'F+lR Is77@Dw5;0y@qgJi$3;_s";b_:_Щ:i{nmb2Ok.kmy'NzD>D1A¬:D?Lg1t#BwCTPđf09MO33L0\#.5)Sp]iL2ddJ >1iC`!',:% -6o,#ua詇>@?#V	!{Rm`^M?Ŭ:OqC=5m idOj
BܝCd}AxM|G6
x3&qBԛ^"FI|#1^<Bu]q+M,5˔6edH.[t(Mn`yKl$tiGX>s[-c
̧0927^7P1naȞiH}[,v7iğh7PK7    PK    A             9   org/bouncycastle/asn1/cms/ecc/MQVuserKeyingMaterial.classU]sD=k;*Mk%[n+҆RH)PSIpEU#KA;S_a<]#LqZ9^ݕ ,a;	)$C<-Őp#^ᨻͪcSMu@rm:C̿kr#ڮ>7ZWzߪ!7hQ1$	ySg}>c8m ?hV`F`uwV}LaõppA7n`{.^gp|bUo3ܮ+CzxP|۵(h^IeZudơXDd9udYokmٮA8nDi
^5Ka@AMfݷv`?H8+aJ9	%$.
	oJxa4R}fDD*S:l	Cl],#.L6nMa!PՄ!~~GGO%ǈ"[GڰbXr=
D+Dp8B
NcAۈ+81*&9W
^â'8Ҹ%i,x+2T|(
2搗1Od\g2	|*sʭx5MY5v76,-8F'^Q&4J/~M<tZ?1kߵ3+pg"PN$KHK$QBqѸ`-)1=IǺ%9pN%s&xpb/)Xh0N|g
sƵml>!(7{%8Hjϑ^`tEka[l`@L	S8KP~Ak	p\
w0]k~)'tP8`YtJaLIU/PK^D  \	  PK
      A                org/bouncycastle/asn1/crmf/PK    A             6   org/bouncycastle/asn1/crmf/AttributeTypeAndValue.classmoP
[p>c
CgbĘM%,#L-0qb$1/Psێess/_lC09`~j00yp6Lwvd$UNOh=Lށ쒻j7ZkMS;v^+_ݝ꿐Rݴuhmիk:R;o.>>ԊZ]zQxKyݶ-nh%ĝ~z IKHJaXۻZmzir>ܟ'@bzHZSZڍxH̄Ҥo1U!}tdL\@&N4l.Ș5X 溌n
/!ma2A)aVPp7E15a2Q,`#Jua<oC-sxTDHQP?Mn*xFYK!֩b%u
~9bgȪgP?@\V=37##WC"^U?C g}">B~ ^%Z8f[IpIK/8U'dF[8O4~DqcLX$
/
P6KPKRK    PK    A             6   org/bouncycastle/asn1/crmf/CRMFObjectIdentifiers.classkS@E )@ 
rPQ[xi@Ij,ÌG9`gy=&?EZE*U\QqUEZuz6Dư@04hT&(>4c*Ӟ9r3
\)=nin҆x
S6vV@ha./U<+@D7AM#p=3Kn>L
xf>V
:@˩b:iqqZϮ{nn~1=:JI7=9i?&f}:i5
a{Kq`hyj+]Z-:iAIh3ˉҖ_m
wҳ3۾-.R3}-\xʗImpNJmϮ5|+d5>z
n+WA~w/~aSӽwxhh5MkfFqhg`t0:7]n-FcqQp1xb<d<b<f<aL3f$)c"cd#\eUR<fJzt/I!§Uj.R;vH!n=RoIm(EjS5B1Rf(7|<
WF+qn-Ⱦb[
lnrRvmY
RuK]
a!Ă̶T}k7~PK0}    PK    A             '   org/bouncycastle/asn1/crmf/CertId.classTmO`=@@ЂA%GL[Y::?1q$FecKssϽO}ņW	X1-^Jv*غ4+FMI{.nM=S&8aP.v5wbm3֘S!0ޘ7>
`Z6_^Io
#oRSs>.i
Szv
țY6
:} C֥YP@Ae@?ԵntMRQb&6d.'2,34c:nʫ0kTj^Z˳i<fN3VZ>˭sn.c+WR?fSi#
nQ*s
l6ֽ\sу2|!pSF;9f-Ë1B3L0a#iEB/T{p
Y9	+oAc/a 6r)tm=n[OB裯dω+εaC0:F_Tc̫6'^8Fk(łQ'ѩ@B}Ge<.1	¤0 Uu
".[4I/=j3e<,c!gi@q}vk:t|5=LJ=A>+0*PKR  /  PK    A             0   org/bouncycastle/asn1/crmf/CertReqMessages.classOPǿw++s2@t CUtqbHfLO]Kq|G_gH$?Tpν=G +M!z˲-Uƞ{~tiT[4]^plߴ}؞ۆ=l_w30);fS5ZZ^0JMӫ0Og ֖[IN+' "`X@L(`D0{vwGSWep6Jf^<TlyRre5r\wuU5vAv]8kHT!KI#$A_f8M&fE$1's3MV(.p "Bl˾n<[՟?ⳀIG0xnZEiEy(8BE['FLO+zaRuH+Zgfd#YaLx|jWqtzBH{gwPq#Ji5&4q /CͯojD	8ɾcb'p-$ϛ͜
PK|ŕoH  h  PK    A             +   org/bouncycastle/asn1/crmf/CertReqMsg.classV]WE~6XhBIXhR嫄P?$Cv^Kn!(joswzT|gBr<3ϼ~/a.̴gj_w\un=Np{\Ppa$n=7̤3z|#YvqseI
ٶem6a!=1,HDB@3TNFg/HIffR"ekz嵩2!;OkDʴ!CyȯϰdD_"fM&
emMSӚT#4Kj鐙z9	8["LeTZ
7<Ygv y	E'zHh4#{)2xhOeJfʤY-dk3%cV*[
,eE~MXZ6,YSwi X:+j
i3SkLD"Et(S".qYWEt^˳Nv!j5ꑈhywvOl'bvo'wnҡOz*=G'2Ά>O5̓ԊۼR*rLt8ÞS-em=U͡$pBkpj-*>{v)]*4̽ZBߝ%)wNFnh-0$e ns]xOh|AwdHh=89|&z1#i$((YK`gD>0K	J nSҧeHЧEc5MKO',~JnxHrD8#F$
H{FZ|x2FVh$qD&(=X;m;X:G2'`2UO 7I!(͂C@M4*CV^uBs0Cupɭ&a9]D@yDx'WhG|C7G*~
&@*rHSDp::@pDtҪGQY|tr|])p`!&_^.җ}\uɮ]Gu	[Jkډ:F
懝7Xv.r8"	<MV)XJwRDOKyJ7PK|    PK    A             ,   org/bouncycastle/asn1/crmf/CertRequest.classT[SP,x&E	XQKA妄" Z%X%608#G_x79nm)/ߞv=ۏOเRCwqIOsnXYPaZIgi-zZ[%o&l',1mJNSae:#eݒ$GG"
-'6mi2Rvwhd~m&V帵DaKXQ89\OY66-WpZYN[n\{&ib1[
13bop,z.[9-KDEqV9E\3ǎ.LgNzJWt̬[Fhp^Fcl:%oB3("gZJ!V22[[˛3yWycv4t&uL;N	m:'k^ыTTJ>\58.+Ce~Ȩd'#V^8vPx)
!knAdcP0	
bf0&.b6ø&H;pOB3&$\]ٍ%VgWYc}((E	wEn̵Y?H3<slXM㡺V=~v0j>˓.#je>Pg?1Aԃ*V۫CMW~Ap[=@`4L2͟/C#jWg4f;x2{=f3̳nW7I.O.%,++S?brsW+[?r˸=u䮃湧ݣ Q)OczF2pNP))(;	?PD7PK_F<    PK    A             -   org/bouncycastle/asn1/crmf/CertTemplate.classWkse~-lٶ -Ҧ\6i!R.6ن&d7wΘ1m/|w'tlݝ2{s9no 6Zsni
8`!)b젅NZ +)MPPK9xN׳rXZ(:.`Jl<ơQ9Hj$b2Q%)Z[MYӽh,lеT!IU1V3,U1IIe*'eeQhC;_)Qy<.HU	I$,Bh4&
32)jd(YEPMKP@H#TjTb*V2P*bnr@ҵ@w4ұS1
!949!'9tDYd3JVX&9%g~9V%B0{BJjw%8Hs#3@IeX2"+
J]\xEֆIztYպ|TOӴW-5z+q_FI*2BwXkeZhHF2ŏdc)x<c9<ȣJx汆G3TP]:+X]Xw٪ 4ݙgrYR1;ܘvj E-{o2tƋ[fee-˅ܖZ#ƕYn{ĒfMln0IYܯ
nL'U;MFw2vvir[1+_CxdnBe<+sKE̌)~PA9	s}rd>I"E?vDt`%XǠ
ψ<'b!D<`E,Feyvn+BDcDxp C38E/1xACbd1Pgp*`#t>S2<Q[1Q:e
Wt!)Px]!))ifзIͮT.ꢆ;#!UFobU93ӜL6u=؜9/ThE%o 5ć<ηMࣞu+7-p]>	Cc
e/44FhqMS s9\gs8g?r>>by)BG-ӥ/C\:<toc$YM:	;kxܽ?R%lF=ԣGG'O]¿奣,H|jZ+| x;6)|<x5Z/&"4",swe޿UuD`>Tς<"7{A1_6拖a1_z_u1_^Dļ-[\6+y=lfPK_}  n  PK    A             4   org/bouncycastle/asn1/crmf/CertTemplateBuilder.classmSW%"R	Jj[6`
D"n6솑Й~~:SSfPY`wSHas9wXNB,ixeڦ{~ԋE	d]b떄BʹhU\a;Rnv\67&
0)KK0\	cj)Ulc)ݱ'Syۨ%rDVp4]Q&F"eTF9ZL͊,ۖ#3\73"W7'RMEo
iTGTMZ!jၣ~f+kl.M[%X2L<o4Y4U'MNdg߃4m	;2T}2N1 㤌S2NKwp%1ݬ[y״tgFHO4Z%qTJQr(l4G[m9U"'[w7+'hQZb-sdxH~mH&Zռ5(:*wZ9NP#'{;*}lZƵ춑o.
QGp\h98$򐦮m÷whqzS_ċESqT\aӋq\FJ	l.bREPqU `ө7XdnLplI̱g&l<P0EWGx 1<RaE!nMNxLP"}(sb**}*e]x@^%$Ǡ:8cR7RHY{#9eT$oTO@пE:
>CT=~CA^?AOƠ%`5 m N v4 ·{x   <	se@\K˷j  yIW>__p5?a,hNw0d'Xnx;Frݓ2>d>@7/
!k
ICY?'D>Y;hDMGcq*:JoQ|ctPK?h  P  PK    A             )   org/bouncycastle/asn1/crmf/Controls.classOPǿw
sNdҵjA6,d#$ħTR-vw$'}2"'&8w@V>ssϽ>4jj!Wzn:o3={Q*U2/نYvg
|j8b-;箭e,m䖹Zvsa[<Gg6!H~^Y;v0@^Uv^#tMy%Y%WBYBaImVURkykfDO.ovZ
dyDΌIt%wm%]7c
:#7wM8i?UЍ!0aHY!F8C2bqB\"%c 1M&N/a[i=on-A^!'M!ZHZ5=Oq&>#
'kD_va1WcF.,JvG:֨UbBgQ$Z=BäS;;𭄾zB8;k!7p
B?p}N\+ih[5PKړ	V    PK    A             ,   org/bouncycastle/asn1/crmf/DhSigStatic.classTwd~],sE(smDSe(L뮲4d4$E?;o9sDooۆMҳ>{_&w XIDX@P\_V(|tvsbe+z;2ɬAYc0}[wL#ioꚣVsҝouڦV2EϷ
=SwN4V窮
\Ԟ/
pэз]j5I[b^1ځv@N{äfxföچ;h储쏾ZYtp3{$gcnv퇦cޒp\%#ᄄw%'J\3V9^
Q@3?$䔙z("G=(`°*v5,3sc^9Lq
ޢ#zv*P=SV&
*x#
ƐP0$R
dH+)x!.0\T<Gi1,*2S3(3Te|O2|)caQY|%S%eg<ҍo0R<d
e'Z%I1$COUQ'.FDN]\SKOQS{mw]4be/G. h=/S@~K}MuX[D&IIt"<Z夥mH>ƴ*8y);N>K=L;}JDϟfB_R~DB^"1	EhRomESxWJR$=d.s/zi]!$o17LPK՛3q    PK    A             -   org/bouncycastle/asn1/crmf/EncKeyWithID.classU[OQݺe[TD\- h1KY([l"}6ᅇ%yd9ۥiI2̙of3goarєo9S
kfЩqF$ꆶ).iCѣjV{Fq#}ҶCQwH_UhySFJT\^Nnѝ6y|~gR&crB]I
Xš8d^}uSk*O:^MmğF3V#ᢅnGy#JC[aAyZՔS6؍lg΍Okc$Y)tC3mUu7T	
)Z-%tC yB%-	f$hvL	hvl*̘EcnZQ҅,vMV䄢]UFrr]Be0@h8\F/\
XtÍ&7jmpn8`cw-n\C+SۘD.&
DZ3HDDx,"EÐFa"B弡Dן+lD:3ehei1v>pJ?H÷$!|!g$y*CQ
+B"h
KLaz#<?#w?+#<GhY;%/<UA/l|O$+i=dI=٤-ؑ_v\ vU9XfFfn̕dBwruX2Qmy8iϊ)~wn'vq v,SCa)xtF&PK('  K  PK    A             -   org/bouncycastle/asn1/crmf/EncryptedKey.class]oA²T`Wj~墱~Ē&nXV
$oD(bl=s_X]:CiiқcTx`Vۨ
ζr\plNyfU+ۇy˩oYykFaHz#E^pe<Ux9ʥszF"Wڰ'F!3	ḴE/ft̶!!,AHJ;ֹbޟT+p5ADJgKis{W=1	Cplwxk5nU57!ZS0
&䲂\!WqMR	\rCecE9ddZK	I8!iW}QḰa>P"LEzN2#oHti?B4p۟v.YS4NܔpS~D=Q/&wh},SExp)"!Hف#$B$3qg	֨}_{XǀPK/F    PK    A             /   org/bouncycastle/asn1/crmf/EncryptedValue.classVmSW~lXXĀU! 
RP
Hlmd	.
B~0әЙB2;锞sEI&NI={3?
/Ӱz:gteN`XtZ'	
x]2-ӹB[
8z*@&Y#9z2)ΒcږN|ҒaѲBɵL斱&:А2}¼YZvt+A#b=#9NI%dޙ]0ΰCh6O)=5nKPIo:=֭T4N)==M2匮&/INִR#934b13v6$61.	,*g4c@yn!g	g+P綣<ox3Dϕ'Q!SF^x}t⥱2砭2Id3sQHvm1ŃU=YәĒ:sihtln̘BVn=2ޒ"m2NhqZF@FgdCU!	xC2rі7JZ>|u/s+W4S̡
*NVELjrWUvHlU`+*Wb 	f{emVhpT'+p`?pmJ쿰C3՚z&UÉ`/f+kl-Fʟ"[z=?xU;4BE Uq8p8*d2Tt"K*1.e^paU(

>`&CVzqa]{
BH)i*3}uaVAqnL*'
.BF?ez/5;o[X/M-B;1"bC
ׁLb<YS I!	/}<pV)3tGQ;gLh6::Fh:us!6ZGBh<5[-dXi}D<XOPӨۥxdʈJ]ϟS:~s탇$M{ާkл@z6冴g܋dcEYij~G,qZSZZRK)j-QAڥ)/,jµ&9ZgokCI>jU7m7~	uU74>asi<cZirB	qIf$wVpS״&Hy,M\{Z#y|A^VPK&l  M
  PK    A             1   org/bouncycastle/asn1/crmf/OptionalValidity.classUmSU~6	l,F(b+]db/ڤA$btO_qF	_wxn^f)Nr9>9=&߿
|FX@0Ⱥ5xˆe8Ҭ^	;S
Ųa7F^za
%XR֙`Mf9ZMG̋
m ً<뛬4)(- uF"<3&ۢ뚩[u-kF}/fvl1lKqSXн!:m.iuEݨkU}PLӛ֢.3Vծ&+j5)wۨ?kEm?fNl"W?VNfY7<p?zZآQo7-131.⬈s"1!ME\^B$`,NSNcEaX%~':=>^8YFeO
^8wc܄9mG 9ymIZ%$ZZ;%c{'ޫν:gzeg102E{2F*CFRY沌抌׸bu	HIKi|MOTޗp	7$bEܛ.bzn5W.:z]?bЛzg1LZ">=DX}؞C*nP!+!Fefs4OEhﾰ;]Xw
$=!
}SqOCȩx>? ·ϸr>:Ǯi1v
8}3.u2*ojʨ)B86}ܕ!,)GhP-o4,
Z9Rh!4O1<l%QwC\$[(/sLP PKWሹ    PK    A             2   org/bouncycastle/asn1/crmf/PKIArchiveOptions.classUSU$lXjhi	`jKKM(ld7lм_ф)3վ٤!+Θ{ι=sg@!Ka.!ʺrSB0%;i8s$g
72[l5^~U]5	Zᅶkȝ*%C7+'\w$Dȟ5wf\B
V\$BU<&+UITTTEVJj[ǰL	#/AmL(MyMd6+s;-[USl)1gR噌e8ޘǖ!@ZOz;irp7JS	xaU8.Zh5mRM7֙jwڱ+qphZXۦ\c4--Ê1Zs[CA!	'c@Ơ32qNƈ2Fe\_]&z(%>K9SKrǻbn7?t>!dIPoeO&|6C67?vs)l/l̹q]§;;
ӊ:_>1x		wB+?xw$dkaVVE@E?*R*¸BŌ0V
+6n	q[
qGB̝B+
&b^!>bQU| ĒI㡂)Pe(H`Ex
[i}aӷʆx0NIЋ F@&=/'>a_?0UܣF#$њ~@ra7$H9m>8&r

Iulju|Rz*J$CDÔjejh
u|_{cS#[Z"p-WvG>ɤulxdٜA/j
I*h$reMKP.'y0Qsv^oIvVQX}B'=osO-w:$Nx/⦷a7A;[~
NGPKr_|  	  PK    A             3   org/bouncycastle/asn1/crmf/PKIPublicationInfo.classU]sF=k;Ș$ K
nhZh!K_YQGNcO}L^N3eK:?/tڦJ~8wW{,震59j; 08f%VroLVQwf2Lv*UsԲ0]搼Q.kKUP V`}9i[k,]tY YH͙eǬJ;k㝹9ǵ*qR9~
;S[s,isXW1
vP{Z Q27r,Rn3.lk?$HK8"ᨄcޒDz;مdGc#n3K`*].*~fUj;:\O}6L2nsAvlu+^gi5k:I
lߵ>yÅT
_lo>^s灛 ,j
8@f80	' "f0L*cJAgxzAee(P10ÇdcIdx82N'2]d̰$cWT+#^t
]~h)EZ@#\F:!׋T(EF;UiLiM4=;\wp;#`'"
'L@c!	)9|9KIOGT{TCCbFRM|Xl'A;Pg.%MhZ@;N$~us.c=RX/nC0횎!Tg?%qԓʴ9iG)S]hXu}ȷj?P#٫W\kt|aiy/5TG><ԟa=^JBb{޶7p_(t? R.JM\򬸇!?.Tx+;NPŚ>
s~{?PK@{    PK    A             +   org/bouncycastle/asn1/crmf/PKMACValue.classUmSQ=\C3]3a!WMK,@+&IFv]VZ`)l2iKQM"̨K8sϹ} H8-kK.&2jD	dP]QΞQÂm+Yyp+Z2rLKMiF(jz`eCՔ1r1heux2emȨjjD0nߕS/xͪ
ǹ5PԌ3A>->-$U|F;JfhuxxtΤA	cYaK&fU])dNN/iI&	#ln!GzVioۖ@f3s2%-֛JL&fLUS%SHa=3^1ڞz̑K4;9ݸzΓ\B]-;" q
<Fyӻ<<HB?B<Ƥ7!0Ü=2yxE/0O/d۰#mP]o#;Yg͌fۼ6ldU
K!7,W)fKX<yڲYqPg-UXmp>!Xc1e0VUMx`p'nBp:t3m>g=p
F.%}EtKO˝/wg3pXQPKX  (  PK    A             ,   org/bouncycastle/asn1/crmf/POPOPrivKey.classVmWE~$l#UԶVڰ
B5DfXݘlb=ǖ9G/~GwbGgwg;;'(q^/6`pvlUba: PܔmX8feQuᘂVUSnuö43
Spa˨ɒXl$,4]j2MQlסnJܚcF+QuR|.5c{yb;hVzӵ9Ʊ	KTY,l	R
exolfi<s8uQrˢ8kxF_E\*'&o]Er1_+T5*ɂV
tG^!oӮ{#	m۞]35DSqu|qG{
 9ϫQqJ*^T1%/xEiJ|d-T0w5$˱c*챨-NcG;v$b~Q$yc/ak
#w27:>CAdR]]>ٮl	>rN&T8@01fx'^CCI)1\B3KLCs&Ѡ#0ϰ! 
,j4S%
I՟vL.=ü`W͘ #
"@vOBD?Ꮡv/_r$mJA(%0j/;nh640Cwu=k`AZګy˞T踴ii-}R.0	G>***P(4JQ+Ԟ"3$vGbMo`m*mI?mT0JunW.
w[-JDfﶉ$!lG;01|9Zls,+_U'PK0  	  PK    A             /   org/bouncycastle/asn1/crmf/POPOSigningKey.classVmSW~.,,#ķd,"75H$
}Y5]48tLq:p&_{s?~P"Ѭ@{$횅YTt˶u3Qi?%[.P`uJΘkձ_ZYH©H[R[ypiC]tL]&e\NuެȒ7+x|:4>cˌ,NQ ꍚwn\/YY%}YaoHm۪qbVJ307|xUOyT"_|O).-lz-0ǁW7&-g{hk*}. ]7mIBWqR)=*zUVqFY}*Ω8O%H)1W^>G2##рz"|Zc5"k@/~?lo'Ogf20_/c*h9֦k}=Z[tP7T`=kCLC5&2i͡9ᕦǽ#LF:UpM	\ס@iхvf3:ToL{6m6SlhsqpWEgC
0a30ѱY64\FB<n~Ofhn/DiWgRN"Vm'Ȩr76zPl6A-#[j
kHX
?bѨaid{!0atq]NpiɇA#z5dx#vک=u(6f5kX!`+l@	qrFޑPFk7Чɳ_H6:0"w#"FxX=:H%a(([c0U=E'ĿRiz	PKw  c
  PK    A             4   org/bouncycastle/asn1/crmf/POPOSigningKeyInput.classUmSQ~+fia/T((ZT3
Of2iKMMu..@_ιwss>0g܁@IUdf53^iݜnSK+-m
p(vv;)IKW)uN{/IhEŬ/鍴Z2sQe*9?1@yb<o$7evA{Вj:[=psf"{]?.TsT5W&'Bb!g
RKFl^w}@3W׈Yq &5/k
B{z>3(k:$C|G2cb8pᤀXS AGnil=) I944x)ޝ)%$v"̑qrllmД`ĝ=XaY7W[UɩFV:%F@ԃi9d4
i5ݦ-[oyӳNaHi$tcX7.	|76\Ў1nƹ
/s3-͔-w/<""1-b D\2fD\Cҿt>C?·~WK|)O\dZ';hE"! E)WtB"ss%wU<{tʡ*0+=b([S]p&n?CCB^51^;}7ߡC
mSr*X6w	=Tdݸi1>.W*9di@
8a1j䏘۴^\n;pA8V~BwT[?;H|W'SqZr#T^=pePK9u  	  PK    A             2   org/bouncycastle/asn1/crmf/ProofOfPossession.classUmSU~.IdY/Z)6҆MڈjVCXbFCU\%nbA#8:6tdƗ/~G/|{ιϞg/HF87)Փ%mªV(f0ۺeVccF圲2yEYV"ءSѲjC?Y+)y
ꂦjʮomv27k pub0di&iVb|xQi(l XSnRP׎<e5kMvo+Ɩk:6u:Up]kVըiDC̩RNӮTk)aO2m:c{@\jF 8q6p^kMbz~<NF*Bus{a`ĊMgce#4Fru(4]sO6`~b;14qE@c^pQ%
pY\@;ԝbŮ8U}2ft&h|jx1_=⧽]ѢnP+WsAya_ M{ ;Gɋw@y[݂1U7b}sWڍS3Ǩ
2uw@k'/Ӭ
ޑ ඄$ޕ0$Ew$bkw͌(F&"#pq_EXG"PXBc/""-EHrS[=uo[ҭ&^yoRiC/$[갯-v7ȎtqZD#IN	Q%;ha9?hɴn%s9xuO)'/{}}${XksZxO{ƿ\ 9?s@!200A=D1߮h(Sߑ%=}dPLx-|BZ;a2B^xh=2	ga:NP[ԃ94qA0pdp}0<ycxgva!}L<KPK
    PK    A             .   org/bouncycastle/asn1/crmf/SinglePubInfo.classSRP]ӆ`+:*B6U
rQDbH4Z,/⛟PGf}orԽm+tk:k|><)X
BzdQ¯
SL{\-EN+f^6f-p|5d`ưZ$(eU)&ֵ֪l$790uF$ܔiE897Ɣbpip݉]N>G,=IfJflP)%p>Uύa<-qYx!b[tRZ*٥5ziizp/᠄CK8"ᨄcr
l6SizhK'"O=QptŚح)o	6jC:ikZŤ;C{>ϓ;Fq)&})zY/kU.UE'N3G
g(S !ΩpYAIaDpaaᆌf%#wd\deщ2хy[V[3?іyp` m\ؿۼDWD*D+2,eStU̩	&|CDMg70#ȁOBT"נ4HSP<~C-BWDmDͩPXPI\]ΐ'?_";%~> S䫂GL{-Rg{}
qUO'XgioiJЙKTvgAqGn=b&x);/ጓsN2VPKd  b  PK    A             2   org/bouncycastle/asn1/crmf/SubsequentMessage.classRn@=1IJhZ "
X ęSwl(+>HD=hYt瞹ϝ7 g(c-7>dCx	9b(/yg"H,8eX}ŏp9=x<؎H[WDJ_Q?}d~01C+=gf}$
uO=
Oi:gkgDn_$	5	|&eF6yM}ƞ0u\a(3;N^OgpWhԧ*g@Ǻ|e_-̡@p	W[qUAX@D4*X3Q
$#{rpG0hQJo%eKlI@H9݁v7Op*2s4b@gl4L02V==蠟J`d|LﭑZ)j/PTPK Hh  2  PK
      A                org/bouncycastle/asn1/cryptlib/PK    A             >   org/bouncycastle/asn1/cryptlib/CryptlibObjectIdentifiers.classQ]KA=㪻Veeef`Q(QH=Af+*r!Џf4	Üs~;||PBDBTH NղzjI霅R:k1=å,Iѓ&A5*U:,JdcZ'(f.Q;f]]j賒mygCƷ/bYĊ$qkB-߳Ne$&C!08cXM8R؊C6p׶gBƼך<fxN)Ƅq83Il&ĭ^	M#+ 1rsݙ PKcW  H  PK
      A                org/bouncycastle/asn1/dvcs/PK    A             -   org/bouncycastle/asn1/dvcs/CertEtcToken.classWwE6i6hy5M
4
blQq.a!
my"||ZTQ_	Qw&= g;͗;ޝW܋Kx<̓%}%xVi8k$t*Bz	;K7k($GU51ioPv(lDJEBhX,F6dUUL0ڑP&5#<1vPGs$K)d2=fWHomR@g4I6zcv wk\[hZ2=jo]U})@dR}au'il{#WȌ	- Q=dExn}ęS	͌"TW7I6'!;:IuRo3=zJBMն^Cbna,,LmڂĵxuydhN1[c`ˤ;i^1 a^~n.ZrgY1;r
6Io'*^iSgڽFP[#ᐖԺ]01{/Y!<01!aĈ-Mٙ?9lc?I;ʮp,.KX%R]7R`\n"b#c2ʘ'c2ʨQ//A"e-# c;6cV֝`XXwv8W2m龱|V"cՑĨȄ5qqM foba!~WPwL	ben-Ηq菛6.!: uRslcmO-B]m*{4On_1	n8im8RdtG]&c
M©
7TzUHy$v=xbJӽQ/&/fȋ{d{ŋc^܅ǽ)4t3ļFΰ!`0dŐ`e0,d)!`38
OA{2gxᰂ0OC?p9(x+!ExIA*h
:G𪂍xM@+~Smvj(&%0$E9ԋRx)9
rd+9v#9*+sdWkȞc?HvY-|REK٧2~ML珔
Ng^q8yoQ!F.&6\Ʃ4%&J.	⟂0=_TO7?@tѳ猿=9eE|$,M|)23焵^|.^ª+u* a ?_q _
phQV.Ϣ	\3CEixyO
;SqhoCjH#?VwzBfW ב~+-N99<=׵ܐPwpRJżb&sЙg@fz&3}*;MJfG٘J阞UnS`ӫJ1* *Hq]OhnqnzՃxwG\ҹk5\ߘJ!A5TXvG;ԖP+S롶:lUNPKRa    PK    A             -   org/bouncycastle/asn1/dvcs/DVCSCertInfo.classXyx-{bc `KA5"K85Ik":$;4M&iziK4mM.nЃrJӦ}_䕥e潙ͼ7VOXQiKXdR;۱Uvlݎ;i~;n H`w.^J#*[v4ktuz{:XiQc	w`nr#2oΞNG޷vx}KnPLgۭ=w	X/r$3RPuj$ԘoQmXL9#
{ԣU( Q[٨?Щ <	%Op)eKx0!<h65Ѣ!Ӷ[cSfrZw$P(ۭJ@ubHBG=ĕ7
-ӞrSSxV!񨱠1=R$v1"ӺPvLI++D.w(Ps,V#OKhFS O
l|LExs-^ʤO'BKGֹ=(~7DP 'J.ƺ^Y5FgzvkTI-"'+t՟:"Va+,1V}*]nd'GEj6zuZVCyJrH	F,o؆]@~V@}F
ׯ
3kͽXaf5}<3+̬7OxtŃwq'\d{cp0 =ۓ@
]f{b~ IbEl$b"YEBD"ZDhCN
}V"<TlI^X
'<MV+fnnZ΄*UBɇ*V2_>}4>[_=Kcr2guSXCWVyWť{HCR|Ҽ>uZbrKths>3~k^kn͜ܪ[at(<㌎Zͣn5-~SNM4M=jewXK2m*}	+۝VαZ<󠳰19eeOY[g5<A\0#
]CnʸquH؍~7`@2)cɸ	e]2n2n\t1*&Lx^˻{d\X{e,Y&1ybn&e>&3y?0 1%>cL)C`r'|ɣLc2L>q	gr|i	>|IRO0b2&Ae|W$C,g$1"0%9䌄0*!I
	GqVBߤD?ΉQ;[++QWwΕR򩭔>mj+O[)J)VJ.ס	&{5L_7MĿ̣||_I$Y	K#Ö93ˎI;8X@+W	AHtCA
Oos.HO:GBLҤ(!1iOg,!xXƏOAgp#/l|/6Ԕ<NzqЧ>;)Q&KOF$N'qqpaCąɇp{J]]<jJa|gzsJmpSMb\w'IlqP"/C\)]$zzg:YgQ9Pc?o!ݨdC\y8axh-s,ԞwC
)9=_\iow<sG0973xI:n
\:dvZ_Mm̥iy)siYqĎ!.`Je"|jkk+HH#(AKzLA#"mƳ.w<,LWS=Gf\Z_SoVzYןҗ+NY.eîae:j6&鰋ٰfM]ȆMaBT*9eD(c+1ר*Z6=a}6Fu:9eva~y0Y<Rx[oe>2ޘ|-9WRjޔC})v9WSx0bJ]ꕆJOp9/y䩤rBwPKf    PK    A             4   org/bouncycastle/asn1/dvcs/DVCSCertInfoBuilder.classV]WW#c$5ik51"(h$b' Ғac`@fp%?O}oת1
)]]=g* 9w{[%si	nRsOya?0=^يX"lK	l$H%%8&S+->ƛq%0 {M*O{j>/?W5
5Q-Z2S0?Hڪ]Oi%.lŴlԄ=@
TSoF\(
Ruä\sT.jKRJy5WiZHUL[3'Jp5ӑRu]mhV8$#$LMPG,)oS."n@LRQdh֫u2vmC0XK[~bM8qbHV8<EҢߐ=\thFbE/.{z1{^LH?wa5ZJɮ4sZ|Դc5{rzZ)6NfΛJo{ᨡ>uc|r~ŚWoߚ3ygn=Ԯ3F	3nD>LD:{$w:Bg9{ccN#;jpSj㘭EvUìǳw>1y+	9?E=
AO2 d㶌#cwe\'2=Q,˸2ܐq=de nb:
6lIIIba_WlFƇE|-ψGJ﹝VUt)kj9WS#*O%9
w<xTIǓ6'_A?'ZSy_y4v#Nv"A
b'pOkFSdDE~PfwxgdRP/4No׽ ON{4m)r1:Bm݌\3ϨWqf\!N_Q)";ߘ"tw||gZiĕzWIɳr4hio`]~vf'>B]^kIn#sX'DrC
v<PK"1l    PK    A             0   org/bouncycastle/asn1/dvcs/DVCSErrorNotice.classVkOV~N1RR(AIZB/hA,]qL.,1h}eJPK?7MvJDzy)˨8&CH8' t39tcSc{7Fg3Zͭ-mZ_f8ul{YFLی
ˡފ场g8̖VY7	Ya_#W^@@^#cЫS^v*Kw6j52niԽugB/N9[6VV\qj
8מ~ش Is+h/PsΚ+E3[f]o)hW.]YU3:ug˾/u۳hEfVFst@WEI	$0(ᴄ%#a*a*&m?Yh
Vn#ZOԎ|@.vD
0>̋d!f?ٶQo{Z[_HLFxF[a_ MK`T*V9|ء#8UGuIFyE4B&T4ST1qgqAŻUAQqU8.Ç*WU$p:$Mꁆ
F00)üQ2Spcpaᾂ4>QB*9%dLOL}c
G#A F
Ϳhwr/Z4;. 
LEcBkࡖ}m11ƙwCрصv;2;	dZ9.ƺ/(1	DP2iGhC
ڶ=h%m_7`lbqԄp#T3@.v{ ̄g0ZnVvP!<tRo'CD'`=z~#
IŃ@פ;4åydw0߿)zIy_V3N܈itni3>|afPK
   	  PK    A             6   org/bouncycastle/asn1/dvcs/DVCSObjectIdentifiers.classkOA߱]jA,lg%/&DMHLLZʶt?KH423>nysv|q
qWlmLؘqU W](+ʖWJުTFS`BɺlRؠ)V[ctWIRHuQL tG:?LFAGNp''(FMxp&N@|2IxW
ý#@.ُC]}{nKQc::JOyq@ɼ"pMV}5f({k|2/O"qFQa23װPD	qUbXb,ӡo0/(}.E$9jt&L˙V26J)
!~0t+'Pc	[;[+َ밽lgS?PKՔj    PK    A             ,   org/bouncycastle/asn1/dvcs/DVCSRequest.classV]SU~6$, hVdIcAۂU
Hc).%.
,8g02M/C8ݔ6ix{ysޯ_;QD	.	/I, dkvsP@G4v0' M9aZ}KT6c<6rŵzfr4]3֖adahӎMVڪښU0چQ'm}4˜P0@ͪj^HeQpfCђ%*&vŴno%ɱr\+o[Z.IjԌU(Zȑ/e6S>S?iz&sĹw
39jx,yZqJƮHQJ&9Yrpv_17Mܡ.KgWw(,_ĀWE&✈E!⼈"rmz<E N	1#Di"rj[D~mQv\iƙقXTGsf_z97jSOG}*O{^Z귑'	>hSq4Vg_!px{ZmfqIOs~8!,)x
.BVЃnESЋw.]gn1e|0paaaw@#2bǰˈ03d #@Se$qdf:TzVxxOZ:
1A@.Y)he"H\@RB
/3xA:dZúò:ud.;if ;|(t-:G1j<=T	P	tq=Qҧ4WDGr$v"W`PvPG]l`snx ;kXއ
4>F7OWiz|GJAT2XKk"B9)k^a;tP~F("tG 7"bO2錉4	ϝIc>W PKM+  ]  PK    A             7   org/bouncycastle/asn1/dvcs/DVCSRequestInformation.classW[=b CBbl`\!SǎAvʒdٍ l1"B`;i:-[ZwQ-i$# q&ݗtK??M;#|yw޻˛//؍[dA[,j6Z&cׂ! Xl=n
mn]|0Fw
htvF]C~+}px??L&xb\NFjP w瑑Ag9
8/MBM<tpy'\ww>rqԝ$OzHh|J
]ɓɘ/O~.јr$tybBQi'6:I*wұ!2YnU.$uRK
ĈԏGiUt:ՐBa ׆lUBIgRx,HqZ
Di:$ht8 Gq}8,Ǧ2$x+ϻ.!zdYyZj)9LDR&ڢWId"FMEca~I!juг0E%=JBEPztTդ=wV詠T9ڙW'Q"JʦVm)2+rKVM=tU8Q}n۹k
1{k0F(9OcGKt.Dq4ilOOXkB+Gڵ0IFI9h2:@E5SΤTGD'eD|Є=d5Х
`!&E&vDq@AwSDQS!"EDpGY
Xh$_t)nryTlxE@*5A̞Z Zܲz<k/*n˭^ueF6V^mu}'[٫v½nuoWmA֖W3]u2{k^YZj=U]Sn;k+\_qeZ%WkVo8Zy5\I _Xǃ׸8r
kө~l5
1VA5vZ$q=P%p^%t"!G0)a'%p600JIMIv<$8pQx6]bxXB^1b0G>z`$ç>G>0c}E/3\fx[VƗa(>(W!^mXsߵ"MY+xҊ}+bxʊqѷ@<̟TqL7F?)'n/fq3Iʙ&)m,iɮޙTp=Wm7äm^cXKEz")4ad=ٍsHpU`R@Z?1RhDsH񢣃}{L9dRIyM<9dSxfoۍiz81]A+/
Yy)ʯxqK)^1.oEɥЫ+|
p_0SimH6S?HjO?BCat+[VͯD06.#-VE%I'6׉	&z~in_ڗќXО/3xaV]yuRym:ډ?H1<2*|.
c
i㣸Αh3I_!I"ւ9lv
LʒjY
_hM&_lEwԲHĒ?h"IAļkcl3.]͸cx~syYW$hh33=꒑BBg~0k>}SCईe/|Q?BQ	|r=:J=(lu.,OR[3onh1L9-[Ll9mViK4Q-iFPN:-WN/tQWĩvMWiIn.";*j܎̙o`;
ł`^*W\P0wW4
fY<_PK?^    PK    A             >   org/bouncycastle/asn1/dvcs/DVCSRequestInformationBuilder.classViwe~Y&MPU
"Ŧi!TJbZB0TdtR3JQW-R_+~x{'I~y{}׿]hta\R4qP2"ncutnIjIc;;`?	(B};=(#\qKx
E{lD~+=!
}P(IFZl2FJ)GZ,WFRjBT+2KM
XLhj{PCGOS4-m4(ZBmR*ӚޔHKFRK4q}n{ҙQ ޙ,i,J&+x#9Vs+r+JLUf'b$w @LFyu*t!SP
Eh撹VUPMQ:!CDL$c2-%+`AeBt`*&TP5p(eQ7TcF)2ꨀ妉~םL5CM-[5
XTA"_]{1{	z֕DDB^M͏
\Ц}fT29n$Sy] Nmp\j2RmiWsCClfLAvө/N}tJNHHD둳ћC.b"ZDxEhAOF"qEl!PA7
%ހeE^.%zNcLm.A5[?l)n(d
PSndURW)n+KSz
??7SNˏAGp͗NK0;*pZ+l
%C/P_湭R6^h/au=]"&ﯷKC:q5Sj%*7aXB3jW.j7«	W &qVU{$CRuUMBf-~kqˡKXg`$2<0#n}xˍ0g8<x7"x(wc 2<"K0&no/ZO:N_ڞf*q(v.e,ʯ: ԡ@zyDq/LI1%ŔSR#Ly$5JHO9Ӷ 齤/o%.O.}j",VErwySx:NW$[@|:ȁצqLopS8<=r	V a%N$zg8΢_f|>~$#P>2/֣Päλe-,aNgX.O-ۈt<"I"Y$~ao}o[}Cc}NgYWT583R'}u_3/g-6ApYwF:|WPw/v!>=}1
e܆s"9HzfA5ܦ#'ͲL]gqmn]6[6wiEXnԟ$OnGUc'oru̺袺,FFktn8EbsrȔ+*WEt-L.AW
35O+C!s_PK  z  PK    A             -   org/bouncycastle/asn1/dvcs/DVCSResponse.classVmSU~ )ljQ5[	RA͒.]v
#'ƿ0vƗ/r<'٘d{ys^? "D0  G=p/a͌54:/!{gO׼gٖ?	52	JY6{o&vmܲj.[5:k]0@uj\E^4\Ρon1kqRgG=$U
BJCѫkiYRDR}j̰c䷚]UK4j:ny5aWҌVMi1l<oll[ڡTךͦ'R@*wCc"nJs0fznc\r79_1* "
cSzv~/1(
o.bH
7E񖈐"E%0v%#Y<>kw7RMfgS/Gک7F6R`.S]_F{aʰ,W3q+gj+cK"?ot$O{CM_UVy?V7.'
ޗ!]F/>12a!bŌx$*	cd1OX|ځ)|s	,JP$!'ư a,Y<cJ&.>V$["bCV`S"/XJ@kЯ\WSjn;n3z?h/5L=pϴNtIVB RĮ	[??7l1ܰ)ZP^wL!cڇ0N	'p_!
EhL0qZc#јN`/kǵl(M*yNw>DoboC:3՟E>!=
)/Uqa{;'Vr zpL{ǥ .4 t%
*J-w9zW܁{ ]gPK$  f
  PK    A             )   org/bouncycastle/asn1/dvcs/DVCSTime.classYSAõ,D.dFŀE
*|[q]R@O~
J%U/>,{
g2yugf ny3꣱)sÈw,qOG[YY~u,G"´mΠ[vҜb> Yjm[A%JgѪVҿ${ig)f4(7t*X<ef
3%٥dXe:zQhtIZ{3ַ1\**kN,$|Ys1l,%q<[UMAs
:}cS--]NQ{gu-Ɯ)x{"o<Z.W-P7vUU$^IiT*}patj)?^Af'j>)vڵPRjh%
uqE"H3	0"c&&.Ma\f\E*㺊^ܐ殊>*.4T4*Eܔ4:}m-[^1@}`:Jz?SJ$lV}h hлA@$6`I,1w1]LceA&!";hLA{w:@xUCxcBgdQu
YYJhFzV;Y?|Gr()h F)Q\\FlO閃X-SK2D0wFSz5A B1U{	"gNDPK(  s  PK    A             %   org/bouncycastle/asn1/dvcs/Data.classV[WWAֈ(DDK٦QA[a2d&fDX{<tʪm_ڵOV/{'3լ};>x
"Dma%j9ks^8:j$ |ͼmZw͐5kN^OCJN̴3!=7'L":o-=MUm?_謚!-9Llj:qcXY7mU+餡Ψjy!h4۶ACiK3Ip|Ԕ^XX2BEuY&U3u	;JX2'H&MiǰLKk!蒑NKU
휱Kc[@4Gw
zhk޸ΒOQoЬH"k[HyJ Vʃ>5Kd];7MvPmIdcq.g2yUeCI}[DhE8 %ED!ⰈNGty\,q;`Ŗ٤'+J[-v/?05+'Y
Q#ʍخaَTjlC¶Ko[P
YW|~a7ϛc*g{v{BggVx'p{z&ʁס{^}w+ŃO%werpGѺ<܅gl!BxgdȠ8+(eaG>ф26".ha3fLF=ƹwQF^ޫld%622+lfb\gn%H8z1m6l	}.8d.E	$#uC c3/$T"b`s[)$%(_1+Nu3ݞRӳ.a@TqZg)RʨyJ/it 44DrXl\w<Ћ.-)/Ly̓r)?|}&O͋GNv1V5~Cs4]"XE>Y@zrpX!S~C_CUؚsL-kҲtM EM^qO{b/7Y[6]dhd&'%~"V,jX{>rc娄!sV\oZVQÔM7brtq1w
EP{CV#NMεw?ml:>y\%|%MuYDD	PK    PK    A             .   org/bouncycastle/asn1/dvcs/PathProcInput.classVWTU.3CMfQ	J
2Hu:܋3͞VeeOzhكJkZ̊/п(i{;
1X_;}ܸ5

ynHnu#_@j!l5hݩT(4֩ְ8-EJwGXNJʠ{,ytI5NV<3BAǬ8!)m*QՎݦd~H7PѣjL8
߿ɈE$UJ\_?vF*7b]z-,NV	HibJoeaI^O̘ yjSGUj23A=n*vtTCftnZR"-9/0SYo'_'7*$W#?0U#J4tpOC)$rcF6y*1Q=Z41n덛jWZcjQ(%ZVFTUhm0=Ơ]+&MS^<=.܈n*&9ֆcNjso,OfPOʦ㪙Z
\˥xL:^q8hip&ZcZfjGH6
EX.#RWODj+DEJjXCUl_BԫER~GUI\-;R/czxiTe:-C&tmbZq{<zUDy2s'K6[;QM_``<UTg*)!&zAv3NLuw,
YRITrWMYguYO|()~q 6i[MIn4ٷ뾬5K{(a1C
eT`
s X<%c-fXǰhbh-2Gv212J{`x)1t(CHa?CငMI!q		Y	Dzcx^B=JQ ^ %	+a;I`0t3g8
ëx[0}[gJ}wO9o 'r84+ԸgC^U%ʽ	|u\i>~חpIm$7SyX^"')0?&@|4.lrl.\@[6Ov*G;B9CQ+ܤ㋵	%Myq n/h7Io9盇^7	89>".dQ*q]G` J\I_[];wjjaV}V˚O/Yb+\GԈ%A/r}u	O!Yq&ϧW$@|Z%b#yZmſ

pI>&%""TI\H+݈UR.èoh*ΌТQWn/'嫇)7mU	\$	N`$޳%}(&H綪TըCRM];~!\1_D=S̿HGoH;|[yuQ^k|<=7{{s*stc]rDRL̥M\eK\J\o)5IdtKޗv?{}]fT_җSss_PW6U$ޮω PKbm  F  PK    A             ,   org/bouncycastle/asn1/dvcs/ServiceType.classT[SP-	%TCĊ [6S%eJO7|edQn.r;{o B('JBK@@y01%"CAgc?TR$3LX5yfцM[]͌n5K3:%]J˭Ym9FK[jif6
t5n2zA@W
/FZ[rzX[3£	s}E/hN;Φ/-\V9)	P4zrcXy>/+e+[ND\*MD;%!3e>9>r՝pz31ҳv(tVc*Mi&̆O<OQs9Ck|結ԲY=|yᜑt5%_҉2[AZ ɨE%,!Pe4}7y{KF*.C?=| Cać.<ddxaԇLV8`a|	KKVRN'
/	jaZ~{-^i͢Ӯ
 uj	.%~A`N]j#곩=J,]-$;-'jv,;/!%l!kw
nJ5[vRi"m3eԹ/3tn=`&mL4N$&3un"DCgM?m믠ۈ6TPH΅#="9Nx:R͟^g06جI6Ew PKçy    PK    A             /   org/bouncycastle/asn1/dvcs/TargetEtcChain.classW[WW&	LBD1⅋EDK!H0jk/~/C_pʪ/>tڽ3#!䲒69gwg} ]	kXDN<#@p	{}_@kƐF9o<Oz5=
-6	Li#ulpsPKؤ$z&]
(45tԫ<MK3&*\b+FB
qa4!IMn-u}f,E-hm
S#15.G)`EuV팪zja5:Li1t%ōH\mȒF"D!-!p"#{(!u"Jcd8\Mi[q!Xk)L<2t2klgQN]eHsUd箭ӑjT&"S#2d, 5:DlU6"ZDl*b"DYY$:;7'gDnV-}nMGތrZ2DEd猯lrح]V,)eA0²M͂w+Xd[:XlGG!U/hsTW^F=gʴ[a09NUP%GT%/_e/
.,|=^N3Zt1\B#Iy	5	.Z	8̽A	
8"a#$㨄$cxF^4N2NIXqpWA?^exu
=C!w!.1$\8 aڅ2LЃIza0̸ЇYyȠ3\fBOXk<Zhr=qgeZJk!fFQ#48eEǌ+ve7qb%mr7eeWQ'/`|ܱ{e6AxL%t+bH=P,IM?۴)6!GE|FsADZ#/b+> ̫\M8a{L4/xDISVAkǔE|tܛ­3ߖa^"EHZ=$Sx+7ͺvnj5h9"wlx )鿡^t.? Ӟj^_C2Yh\y">\VvEri3?j
R|Z&C4*K	<JSΥU$G
lm۽>a<HedXiQVN+OrTM#
Jϛq.&-O[I2ishJih*q]ma+zj UՓmqk͚2">_Y*`u7DsZZe/?P2J'}u"迋g?IPK7    PK
      A                org/bouncycastle/asn1/eac/PK    A             0   org/bouncycastle/asn1/eac/BidirectionalMap.classJ@/&ZnMAp!T\XAr5%$%>ZP|>xvgoF!xg`ddȑ^BP7#1o%\r
?蛖yC
޶)m8='t||H(N
KEpKqW'{UTQ04n3lէ.5N_aw*XV Sb,PAC1XJߣah%d&
9*rHa}R-R2iQ<*UI
;:_P~Bgd^%+gplPX|\)_PKS    PK    A             -   org/bouncycastle/asn1/eac/CVCertificate.classW_,(EYeV-kܔ.hawXV2;K$mMڦWHZJI-Ѹ$ڇmܙe_ss1wyul`'%[B<+r_!UC!V
+q^uLtY-BL
ۖM&M7b>#tˎO#1S.znJ%[mD)RFTB;6$FTzIL$LǠAmL{"=cSvRB=KRi>[!ZR?mgu+%$,vw(˿$x&9g4'DT\<	q۲~}dn{	Ns[Ǣ'g2YdL^!#ikblң܉SNd'[q9ǶJxМtD
)-9`Zz0OP'	-{eNKR	;1,~/	f
^3N@BЌX㫄k"*]TOM&VRv<4RӺF/ڮN(k0SFd.%ޮ%Nӡ20%@B8f%}%V|:εGZ5?rcq0G3i.L;Pk3Y$3+sdC܂T$Ps(8xBQE71DX6G
j6'u0K>QkYI*nfN<)CH>Pu_lu+H!e~]2qdt+O1Ae/Z7[s/OxLzF-Vܖ%ܶ9(SCCTX1[gC@	rv_q\8w^N~]ݢ@юGnO}"{6Z%}%E/_uR\У|K\((ϒLY#"4"fTP7Db{GZ#|EUKKNC6,dieN4g80m*v b'd{:jQq7U]ؤVLbELE=T!ҿ-U܉*@BE#U4`>X*T=UPGwaNE 2|lc<zx`$

WO2|
i?R0g~`a"7~AP!`gi0|{gxaA)hOL
"R
Ns_(])Ewa:~@FX@%8_4*7e
V{+P	HU_nos+xMxy-/,
&&DC{vV6Te8LO=4*}	/\s~%y,6Jq:.;{W]~<b4^Lcq	?}LL[@sS8فgs+/I5o'㜌oϖac;Ğ7Qn?XA
azjqމ0ELDC	,@Yd˸3\v/O\6́[ͅ-,wP!b,f2\?]!׏漵-/kUjjK4bk$㽻71>Oбр%X_j:t^wuiyadh~Eo%^l_&o4f\F˨$ƕ _4иG=^6.Of5u?b^ߍYW!ORϥ/o3WW(fwZqWp%Oaosv˲uU9,d@
&FM<LzTW\sS?PK~k  Y  PK    A             4   org/bouncycastle/asn1/eac/CVCertificateRequest.classV[WW&A-5բQB5ҢvH8fp2A^z߱+]ZVkCGD]]ڽ'! Y9' 0@+sYS잺=0OK<'Z-A~USR9F@OۡPϩ`/BnUs0i3dS55t˚;*V#{lWMaE
(ԣlE@EdVl$k
#BBb	嘦(FBXE`J5M1z՘&It,Y͜4T	9Y<D̀^J O"l;iα*Hr0F+}rKpȉNPBY$%$#2e@P_}V}w.FaS5,i\b^PXkRGC@4ո/%CNkiE3 U%ۭ1ߠ"9aК|ޮtl-@]6[wD6	q^v*Iݘqfa"E>klE9inu[vqn(L;+z˪d0Q$n1U_uTi3GʞP/ԭj!>SIM+nSwSwT6fHVDlQ/AD"|"$a;:V}.2bu6z\q:WzK3ԪfZ$u3[bym^F~\L>/\uFq(w~_Rt
w:K"}V(9w37_j^<nOx)~.b2Z%3k&g%lAU8,a%a(C7D	pH،R	A*tJx]\ HX*+a
xZxyOlḄp$SO)KюACAqa؉8à3gueexΉV\r"`xމ6f8`2\fxuF#x^tW#^P=	Qz=ʃGʤg&5M彦9)qB
ogRNoTkm|g~R	%eI$
pᚷ׻Z\b
a_J)me
LSoCC
أ$6"ddo=q~7?Pt<{0ґ#jg*IVB+5Nt5n+0QزWU)|#A	ѯ~Uު)|~7WhV|4800WVe5Rxu/Mϥ%f	Qq?UwQ/j6$l1hA4BݜFk
{ڍh 7Ho&Ȟ39`oZ[z4
4{	NjfyMf)|6XG3NƆr53-F93@n)b0c/z2~!w,'`?]{Ҿ|1WMAPKc  $  PK    A             /   org/bouncycastle/asn1/eac/CertificateBody.classXi`+!@L0ӖB-Ȋ-(PwFD$;&m64=6ikZi܆#}IڦҾ7V$~oͻiV{! qՆ6T0ǆ6T0φ68mX`	5.U.	%5<L֨k{1	%6KQt&nzg$pjg(e5N5nU=
o3MOC+Ixp5le)5=uZBwn;/q ŵD(JzB+p.=GzW".¡Δ
mU[lP&gnqW4n]ގ&rk_m5^$,ͲBմka2.¨R[)[֖jsʘl.mm;ID12ŶvhJ)Zg'e\#(hɉpo(fDTpy(~Y$TZRy5#f&	s&0&+aevºکGxJIfY҆Ak4$k"rJ0˔n=Ѩr$n)ON7[Ve7?s=39fLpNLH0کSΧ&P۠H<	F@y/c*q	z	6"|Q-qPB:{8~/a-]znu[iDkq|hGcu}@P'z-]doxy
$,|m>#Ks3YGvFjia9յ`%NڂxIlTкB娾Ez<F$,ׂwQ[-Yĩ%C?8H&g*P=htψqq򒳆<%YiWQǉ8'^@c8kuK%1D
%1-!珅zB1D8ytPP`c(gPGelEF2<2dxelqm2T/]Fs[5M@z6Е%>.,UM;q54=f,_ocO^.
ւY銂X-6T"U.dfO^RǥqyJk.vpcNS
*MկۚGɷ?uU~֬|ɶñ<asJ6Xrry\Ԩ(=9%x·L"RYG$3I	YJIZo¸\
,Š.72uw;Sx	CA0g؄i8/W8t`q`^sv8ư:;a/^̰otocow`-Nww3g >p1|Ď|ƎCg4gb8a!^lGeW'FN3|A1/2|!3v̇16oG0Uq>@/Y>(v뉊.-MzoL炢[=Gߐm	Zo+,z^}kȂA.
R6G+z%<#:auZ.g[ngYYDϴw-Dt핸0ѷY 
XvHi:@gRanǫP)\RFc-V4~cci.3śkJf܇ǗUGJi|}ie~r?k+=l6=],^zU=i',o#^~;NzIQ~b!1F։'R<9jw)cm7|kd)(
W^AUȒte$l
4Y,zK{=x!N}1l4ݣ%gܥ?_rr8+Ɏ?O%SF1[Y\)''Oq1R&R᝖wcڸ"nXx1+(\>#.xTTz|7'/c9Q񍡯46<A)[[M\fkOᢻ$ΕMa"(G}L:9$*)B4m&kr
MXIYtyyebn2VҴRв	Bf
 VBgkOᲐ&dRgùbMg,L@GZ)̼5VMb
*GFaJ1!4KFA)Bg~ǊP(1ÚWc)FR~>&Qp?caϢbntFainGE3uxl=ZDT1gwsUˢ`?"!-"{vj&.%{(1gj._,a%lj4M^.LT&ghvnf[Od{s8yÉzkIONo0ŮdܜʠpP0+o^EytG2sUeW6=fؤ}M&"3Fpr!#.67܄f)fӅzSs",R.wiAFmj/j?PK7*}#
    PK    A             >   org/bouncycastle/asn1/eac/CertificateHolderAuthorization.classVwU	i:iˢ@ MJC-*
bm):@ɤ(n(+n(*kZK]&zdB6	凹}߽f/ 6O	5KX"j	K%,\µp O^q o~O+ZY[TƦH[aV[AM4mXIjk%tih
ljWHۡl&[	mTMS@҈ةamh1=9cm7
ql5+wwLSi= yickxٗ_HˆQ݌`8RP.ג:EZuUM;McLOLjD#LTj=(`Mu 
"A΁_
]OiIc4K|DM;Pf:01񠦻~kB5%j"ꦝדഭN&-d5mpsҶPS#NϪmִ䱸$+[iS{HSSvB))nS@r%FyۑKruq]IaSQ}ii je\YY;HEZA&Zo*vjxҎ]TтDrv(g4-53RMoWm5+m(:7E>ݝ`!(c)"6QM"nI-"MVh*MDDl;g:KuJ}sJld^4gkFA;}8xb&]pBЍR%l6\.J{N}pw\JɝZT"KEkۖ51crotw1yhKhl.utޗ(`kWVӞ22NdahbBqduрj
~8 	d1*$eq'd!kFpXGd(X<#2v
$,fg+)x+,a7؋c>܇Xx>x,>aYc"Y>#x{1[cXf9?v.ߥ(VU٪v~T*q
WF`1=~oi$Oyz/=46O q_i,q/fg2nä$)Җ]w_:_2LS$\=LKH BPS+&108q|][	;7p_.p $Rxa^zd~c5Lay|5xJ'wngC=bg&C{㓜_9ĢLP
2!Etrz?4Bq\-}N;/w:>>]nM&.>wdo&?C e"b"L*v" Z6"tN:TZҘGyheeL=pk!POtl縇9N|#WMbxC?I&?qEr}:EB'IY|:	F|v_tzT/bN=^)6e0UqUk^W󰲀l2PKh   @  PK    A             :   org/bouncycastle/asn1/eac/CertificateHolderReference.classS[OA=Sh)WQrڥ[@V& (	v(nmF~HI$wͶ }p7g2Ϗ R0DcyZ,?n`ѴMon$Lb!

lNѴK>Yen
fa)r`UN:BD]8Yu"Mm59m+eFľEON]NEn_
^c3iny%W2el!QIek\nvI1J)Y ơWœz՞IrHxEAb/UoHm
ؠp)VУWA~wny}Ѽ'{YDx
y$JnQ;ab[*1",aP |*hQq*ᡄIMP6!.!!QC	aF8Hx*aV\2:*G~C9vUҭ{`qJ@+8VI
9ܴ
P,i7Eo%۫6}?AFK`/ 3[Щ>Cd{"[ut:Eh53op_Զs1R)S LJL47edwx3.Evh?8)/uS:e'S5]ǫkbG
vNnCKPKct  D  PK    A             ?   org/bouncycastle/asn1/eac/CertificationAuthorityReference.class1OqF|;u ȊXX)l312$わCfX^8;P~-z[pr3ߙ)N.'.NzIHujp4yJvM{%1Lޱ)gw0V#B?tWG-x.t7*}m(PF*CA"<S ^~j#	T`xExQD%_~|EyPKZ   ;  PK    A             4   org/bouncycastle/asn1/eac/EACObjectIdentifiers.class{S@oPByWy%MRPJbHP5Ŷ22P{6[qhgwΞI3w"{Zd)-Zej)(SL2u%SDu]ZJL	+Z$H؈HQ"&:56|QEVq6f%۱+$j\Lt0eY3RIVX^jnR|%ɵVLV,ϋIz$7{kvfu6kcfI`,J5\ڸgncHzuοSKw/4#^mU#}j-Fg慩L'neά,{R^?8ُY\)XYv45oj^Zr*m$Rj[fVe>E<{ꕒJ/u }@?0 C=`F1`$0L3@ЀCth#1$% ,+)
πu`xl[@xl>UYg76;{*ֹ+OhBGN
ՄUFBǄ
	:)tJW9`w`z&]TG(qsI.?S\:

l
siO컴/RХCe
t,ҼKyaz`}ܞ6qk}y.YK^̂d2?PKIm  D  PK    A             )   org/bouncycastle/asn1/eac/EACTagged.class]KAkmҲ+5EΈL"##ЮfaYYfIUWBB?͘J*a9yޗ9?_ .p@QFإ'<yTrtQۧµN3Ip\	
K۴/v`˦y%8]=Q坙bSfʕ?@@̀a NPbYy_	tܪVS"hXuS;:%[>RI͓)eb&M$CjOD]P̤g#d?&@\![!b#

#ϱz˩Ʋ3l9_PKAx<    PK    A             '   org/bouncycastle/asn1/eac/EACTags.class{{ BHB} #sߘٙUZr!"H9>os'"qOY outMuu-;-䕉+ӧ-jqlev:KXbErDA&e$jXfHKiʕAJjKt5
vE,~Oj%Y۴$G-ÇfNzLp_UR/flQA9~}ZEi6=m^YbcEt
ځ{^$AJ`'6kll_6!ڞJ͏Bh[%}"lHb҆xGZg&2|gCvCȹTicGc.*,wwU]9vdRȶ8W]6nm*{8wf)V.
27ňB̂/0așٳ5BJ3(̵sXY7"TVh-?ͳ4P%զrDŉMؕМ`n'}35Hj:/T?kɓi*ץqD.uRsc a3|faT'hse%x**Ö^UeBNc΢b滩C),aVq;:NȑDjʇ|TpW

?M9=ڥÞi֠Xx@:;
;eYƗ4=sS&tL-ZqpL/W(hjl;On>p_+r6MH$N\qWYi 6/Fo|LsX
ހnB
Dn'2NTPae)^/8U2J]hzq	T 8k-.X:TXQWa78uh`~őth؍ܫqRl}8%ӘXb5z/HOi؇
j0ҭp?&s(\O[Kwrk2ME1w_jlDހCxX!wv60^<^:6:V2y7GkSc}cjZ)H,y$-$I,$i%YDFd)I2N.n$=$+IV&YCdz$H6l!Jd;$$Hv!yd/ Ƀ$I$9DrQc$IN$9Er&)8$.$)THIY!'	H"s$U|U<.	M+Csq&/8915]_`\ŠćWb
3oc| oax2"fUp+㯃?v o28am# ૌ֌)p3_f?s/`xC`c%>/2~k.ƯSo?M8㟀?ୌ㟃3O0
>WS
~o|- ^E>xՌCo|?;`/|W|oFq3iiFhFɌ1x=^l%.яe_>aF9i_b7K_7~a#~ƨ]F}4i5ՋmҕgƮ["1PK=?  	  PK    A             .   org/bouncycastle/asn1/eac/ECDSAPublicKey.classWGV`8Na]rȊ-g&R_PֲbyծҘPh@P
8m|$ZR?? ZI+Yrb{fo̬ߕ ^{N/Wy!{,,܁n~	Lv/?QBDB͸\0)UV挚瓪j'eeK4@VUTw\VIU.Ȇj
hѧI-+~jO =:-wT<<c[cĎhITyP)Cɏ5J#6pAQcjDעi*ǵYM[ΨSEi鸚X2%c(I*"bk@SMyҺ!]cC}ZD*S	aѓDvOwSIvH3LEp>T
r,tsܖzxf
,ɬ c5y4_/9N*!=]7.R)*(ƠT	FWgDI*s&ɾrViO(Z=H1%ѕ8\DRғyX9ŜiBTrxOnJJM=g,vn7kѢ'cSzJ,DL튡u]`4\ػE0/Ϙk1ҤtܘzWJVx_ Z(x`ohޠ%rc (*ޱtZݦ.QS:4իJij47ZѕL*	/e{L*`7ߍuFmflfƦmflSeq3~Jo5,2g:EI!E-GD>"x"ni;,u-7Jڙ	<@xk(ٰ1U;YA-=nu~Ӈݠe{wl5¦@p6bKF\=̑[fωm؊@:pnyn)cU䘣ޖlwvݥm)(vI؋Hd؏y	cCo]}$ԢR Ix#CUnfE5C}KI6
	`Jhe3"%0%000p$q-_B^U 3|A>!>Ncч)|ه(>MT|ׇi|aه>C,Qgçep+_eg6w|#>h"×.㳕cA;G>#3pߙcTOB3u>\|[ߔm~ۦ.G?,_;$[j}'oto+QOZGڏ2x]\u<+<A
85Cmb<۞!w{?|=!zGǤ`{^f毗v]	2^Z­,`wKhvj	;,8QP0'4X{/W_&/k
Wф2	1RŀELuuD/2*\M'Piui%oV7x@<ܺj- #䫠wo%z1F:dIFKrR%ӽ{$Hzûk+!,t-D,}G%\_>evP lbfh}AʮgVdf1\j+ĠSkuI|TZ) SCQtddvEZLg
V2L61!Ik^{DVTSY"Gl"MQodhfh7hʧqS	A6"ğğaa⹖ qD֋Bw$OwVwzFy1A"lyzDʹ<yz)BVR\r1ƋgC̈q9C{	{wWR<ѽD?6Ut-V~G7
iO^d;_Ol/8rge"Eu=8l 
ZgE?oG4?m#)kNz΄|Q,_\'p]Un/xky*RPKOa    PK    A             2   org/bouncycastle/asn1/eac/Flags$StringJoiner.classRJP=Ʀ~TmF%
(MCƤ$nGsӢ̙Ǚ;w׷ (#BjhбaDSNjS^=&T!Ka«3P9
pܪ]|v
~P3+~ó,Fm[1maۮ*fZw}Ǔӑ
HTQϳFlɹoϨo?HBѡO~	.Ha0"aTC7r-0NPMw<~+eu#a2u9(rnI>|7s%<F28	9ECibxFM&w+fָ52Fe7Ȳ[䋒9Fl9HZbm_5OC{PKlGd    PK    A             %   org/bouncycastle/asn1/eac/Flags.class]OAil.oĊ E.?(*
k@/0$x7l'ea5-pÅ&Z&ko=~ٖ@bs9 &1D
1č\1ҕH_3(FQN@sKJ*	/	EȐ$}r^_^H+ܭpewlmn+[E/eQah?\vOh98^'
UCǵꖨ=3|ͥ|ʦ!)O
JZ󫞽c toܶwy;tĶ*TtQqQE?C[<}p$
g5GRОQlsssV8ǈhՑF\GHh#:2&FuhRzq]05`L5\m)-АM)Rn0q)5n.zGsyKr%U>бÔ`'-LnIgi֋Xk?c#ɈL&cfN`2W?a*DUi@$n%aOHw6:,r{Qk,&hj';X
^}0!_N
ӻhϏC`|
M**JehRMPK߅sq  5  PK    A             *   org/bouncycastle/asn1/eac/PackedDate.classmTMsd~d˖*IIG!!?*'))и)4i	U$qq$#+© \z%26C:C8eWVj}}k# Qd#H	&-@Lov\^@(ʘ	
g\-3X~jUBLLXMs}FuzͶLRm2iPpv4Hӽ:AњFժ̮{}MiVEsݗRLV5t|74a=ͺ[-]hW5Nݾ[fu&c[zSnTNGߚFg S8Zs;4ytڢK!%];9ǃ4amQ<I$.
	g%)-d+j'ŭL|^OMk!SkLf!3a]g51JWv۹!VֵZف>qc+CD(㄂	(*HblU0⢂Ӹ.+~8%"/Xʏ*
lXlJl`E|"@MQ/kl>/3tmG7\%L,}sCQ$SL]5iAB66Rtw~͟f+>o!b)bQ.eXm|V*Iݯq׸@"tW#W>lH7H"D>IR44\b4l\ќCQxdxQ		i_zU}I: {{H
'9fE>ZnvLhTߐk|╛I$G3w	H
ځ*N
RF?x1Wt'u:sL?z*/%GH,8 C+Ӌ]iU!
o}3&PKV9    PK    A             3   org/bouncycastle/asn1/eac/PublicKeyDataObject.class]OQa]RݶlH0)1nJ/$r=6ͮ&E$FoyV1dv&yg̷?`ع-Za%d5%}я4v/=IHy[ hlz;z#E!a>k>e[<W]x6E(W#du#z\9w+^1"<4ځH3jK~`)abb@(Tv57DQ	m{yNnϽ ,SN]a*x#8O( 0璅	\0eWux͂H"nm3X掉4Y419d	rTk<Ul%Qb ]IE{0a}H)7wgdWc8q1=n珐`N;.u^0XdH3|G2A]PKt2=  ?  PK    A             ,   org/bouncycastle/asn1/eac/RSAPublicKey.classUSWR+
5ҪaCX+VEm*%.]"'$mi?ө=gwXs9%~p_Ƒ#]q<GRAs?t99/)duN19zݟU<UW٢eڦwNA--8)ݪHQZNSU{Ɲo){v˹7aҵ9Y#T([,,Htiaj7]OE*,ApRf7mVr\q:'Мr!C}2w
wܩȜ%˔A4}sbQd-aټeICXggn(<ӱq7(<gZٜMifMץؒjޮYrɋ
WTp=KfkfG''sv)KNӤ*R>6gD;>xRe,odHQ̮}Yx",ĺ}Qm:Nٮiز=ip7
}$Mj9Y6=s9*vb<|ϪxNA/8∊*R*U
2(o6{4({SxWlCjaD:Nm=OoDu]LS)1ڡu=4+4ndS<c{;֕s
T$d=r!埰O@ѨlwǖKe;iS3
84 Vc8:qA^jᒆݸۜ4:n\ek0&1\gxd	L1n3 x	w8L9xo1Pd(%00`EL3IΗ}tLz8?.niD'BV'XD+
O1X5
'ZJaIo^\q}W|(!'2U|=Anݧgjpx`G0XXÉB
NgKήnBv5<Vsߡ;c|c@A	U8dQտ״4G=*43g^fŕ(	Q!rx{C|nbIEKh7}?G{oAS_#D8pNԈuJDxpd
'5ciD^z
#>c?ܯa^uP#`$0c0NPKYZD  
  PK    A             /   org/bouncycastle/asn1/eac/UnsignedInteger.classT[OQmvY,(  P.m"xPW$eYKIj"!⃿,K&߹73̙_L S~5bhT8ԓ1w	#jB(NA1]g*Uckbh-;En8&BtZ2ŋAگ{[6=#e8v"S*rkͻ6D*olĆ%(-+aLfqlic29%"yf#p6qn~B:yv1\62+wZn*]u!=bJܚo@=H	A	a	-Z%\pMBv	ZdTL]^$&BSt;36,<BIsO뢜1NVEfz׸yC]ܫd
y_05FdRuH
0LA#)PQ!h
!2n⑌L'c2na\c}#`RF?
xHY7GٜnY@#ގ*,&|In*Ѻx.$JUc#d1!fkJNPFkj)k?>B$b`xEv)I<gL`:@{؟\!˱(A_蓨B&^Ier	jta !ПYO<PKK    PK
      A                org/bouncycastle/asn1/edec/PK    A             6   org/bouncycastle/asn1/edec/EdECObjectIdentifiers.classJ@EXۤ5jzzimAQD)}DSIFTTPP(qNlu>9g@9
UE\EBEC$9gPV̙қf.ŠuW>Cl-%kTJf`q)/Zmt;wU2Cƺ%jijëFSunX0=rpW.rsF)+Q0ʰ~v巤[<Wvfә΂
$BC?&4$	0HŤ!Lit!RX$,
ǘ|7&/OT6eT)ުՐSzCRg/X#gdHۭnrѶK?QPKr    PK
      A                org/bouncycastle/asn1/esf/PK    A             8   org/bouncycastle/asn1/esf/CommitmentTypeIdentifier.classmKO@*(|S|V7	ш㕔6m%c<P$1ifgٯO F/
SX¿b(fE^qmUmtu3Xqۊ-^sStc(DUWSGnpm5n5ːѻfV[6^!Wn[ko3t7{VI^K؝;ziD9or^
O{~ux"\2ta'L!D
Gw{,Kۻ`s$1"Iq"C(Dyb
si`X&VUbXOcQ TH,2$*v'\:-W*
J1;SD;ĈDdo;aH	pb+q {!6|/PKfs    PK    A             8   org/bouncycastle/asn1/esf/CommitmentTypeIndication.class]OAߡ-nY@n+k+*Z4!c,!r]Ųt!?&Ipo2RPZ̜Ιy<b]c|^4L~LjЫY[[ῗ^cw˺;Ǐ[=ͼYUSeqS%!a픕kjZ+VʹTx^65+噸u2C%ꚺ.vГ7L=W7ZeM
ˤ)6b[8cO 	pE@D@>J2L{'	c [omu:Wxhs<ū9yhrzgxʦ*,+lE
:i]BJƨcI0%p׹)AtQĸ@["!F7E`N$N$g;)ت&isG*3B@3,yO#+'}u?:?""'͵d>ȰH6H_c9Ԭ
NNJfeƈD-FNb31cJG]`.pO n}4隫#6ۙ~jsۓ8z;+Iy#YO6TJ'&BPK2*  o  PK    A             7   org/bouncycastle/asn1/esf/CommitmentTypeQualifier.classmOPwtŉnNq N bd>
)n-l	~f"q73ܭ<-9sz~0D2۶kDi؋*
޶-0
ClSț5jjzgk MM-9hҪl*fj{ZKVʹ^15JZg;i~;l	
&*<s2U$-~A!Ʈ. $@0 aHpg;AT"٣pJhO y=eѥBx~{OR{.5ik^(7mRRM#qK8'u.1WD+""0ʗ̈́?&bDÐ !MtLSG̲Uwf oڻ*o9B_8)Q Ő	%J2kb#ưIǬLpQpx%G{N,"MxD*!?8s$h#~ Ѻtpu53	RqGaF'}l)-]3G!)(z_s94p-[M<>Iq! PKL  j  PK    A             6   org/bouncycastle/asn1/esf/CompleteRevocationRefs.classT]S@=ۂ6P(A
*PG}
a``2W_x3
(#/>O|8x7vݳg={o?MN3lc~2'c/M\7\O>NΚ_fP̽0%l3lV+=PaESÝq|2Sc3'L
rl"/ch;Zx^_8$g/hЭɹ}Lo	Oj{|9/4Wqld(sWtAsi+eyP.AP-!"FBDZqVDOsFQ}ܠtakiOQ䓶,I*z_nka<NmSUc7VT! Tw>]CDC'%/A)dԁ(C@FAUhBJm"tȨ@ݕB	ZPE(%Bh"Ho͸YE֝pua>1VWG;aGzhVN7WePf@uThj_At^,3ܠ(*i3ܥU.mM\udaÏ6~h[ C`%D%4JTiyqWA||E<AU{M\h,
H6qt$^~=2P%$k[%r4
g' PK"(p­    PK    A             -   org/bouncycastle/asn1/esf/CrlIdentifier.classUSW$ܰ,XZ+v[6jEDDԴZgIָvƱO|tFgJlD4Ia/眻;&o={{ܔ'<&!K>a9{tN%3jL	=B=^*9ޕ5POrsC/-N5Y_-1+!L5.Qbqm	6=WȖr.Ow]+H@9ý	5L1/d|I6mFљVt>cQ	;ۨ7SmY1,ްk9pYg5,Ydݲhk)%9Eor7ϭ\.X9˵]#^}T<;	5S틍'[:Zgrwq+~Ӽ
cN]43p&x5G;l*ܞSg}!WN#8ÝAvNlT[F-Q7wSmv/AA
1!)M@q44^N(Q`Q6߱=l~q 'dI6s2qOldlN9'ceLβI8y6Gj>HqɸoD@DQOy|=$+D DFhJ}*ReL	ei"TF+PX*X
=D/G@K/T-Pէ
,zGZve4xt	DIQ"H=יx"U7Cqo*M>&SUr$`У<,0,1'ϒ,=[7ӽ1ӻ%_!A"ӑ7-p0]RRc
~`E^Ǥ}r
#)kͺaHo1!PKHtF    PK    A             )   org/bouncycastle/asn1/esf/CrlListID.classTMSP=%XR
)QPq:SԱ
!&eԵuF)ƅą
(;n #2xp1LL3D'2em)RR\mkX-5tHOg'RYfuW[[)^|SΌ#ne<fUnHˊk90[Y12XS1tn&ywS/rܵ}<i6[	vIEפw2j8P-ApF_B&	gB):Sb(7GiOQ
1+IK&w'"I
+f(_d`3y6A%|*H0mt2])3_tvg;Qf0UȨWF:d)Fn2jqIR >"C !>ᲀaЎzǀAh&MސtԳ9~tDVqP^ZQ"W¿ࢺLYUM(j/)̓Z55.0&>&:iqa7~ۗlg
JJHT
Zh
K:DVz6Ѷ)`2
"DCTa&\L~3ީPd-Z#!?|a{#BL_:zJRdZh0wSPKc!>!    PK    A             *   org/bouncycastle/asn1/esf/CrlOcspRef.classVmSU~ܰوT"R @#նV
Q* m\e&?Ì$(3|?Xl
ffssy9ϿMBӮ\r岄`,-	2r%t3{h2
pjE>uGBV,KIX\syaHgm	Zq.7%if;Z^%M'ӕB~[@S:r"v.h1d"cA-x%0&nU{ҿյcVƒc)KsڪɗvABkl!6wk3D\5|=`KLckqfE5_T8&QBvm :[Q4c3\dxUK12ÛP2g881ՙ0<ݱx>zvOS0cU!Y[mG7[N|Lq+s:DM;z"}ivSy1_dC;UhcCoOsK5{s>].pnyw'</)Ẃ$-hSЎ
1&V7(x[M2UpzGA/!&x؁H	ddD2!(cʈᑌ8dbI(2F:d(>B|L_);GȂgEqÉkӪM}S
A߃-CVew$RC@Hd#he!$<!RE9O)BގZ׉	ACwG͎PK0=TGX?DvqO{|}y!V9@T{Vu,`bT"<
H$:N+)-(	JP.uR<s?"]%g`yj~	M+U3MghJ#m/ˌ$<ť1`@h%X++a[قB+an[t%1bDGd PKΓ  >
  PK    A             .   org/bouncycastle/asn1/esf/CrlValidatedID.classU[SYI8u
A%̨(MDfW2c'l2P?*2U샿R'ELRRէO}>g˻ q?]EpReE۵QqÌW,7kŋsBiX^\Rl6HMUs7ln[ɤEϠ#+yGƪr7X!򄂧feλ7Ai`19`K-W쳬Q+eݡXД͛ƒc-Qyc|M}H:h@_mԭM@mU|֜dCئY>)_:=
y~1/ϴ۳WIIh!aN	]II~lG4n0"\Wrpvɼ/e]<),&C'V0lb#l \3~NnZ` { S8^k(
qn+F5f^K;UBsU59-oHaM
dVGX
("`HP٦)8cg6b+ۆY;	eqNF7.YыWdd!gqŔ8daURM&mDޤL[3o˷<A	QiFu*Ѿ
!p
TCG$ QN5FHC1EuVFkZ-VB:F^L=2f^nqJw`Ə|}oqlB_х		:Cd`28 M1&jtz,8HZ5f5.B	x7)c~V<%YMz	xF+cqQFPK l  J  PK    A             -   org/bouncycastle/asn1/esf/ESFAttributes.classRP?zD@ A(`E* Ūxi[m4d/| qm6-ڋoeګ3/ (Ъur*eaQAhY+n?QЭD%ajHAOTz^A [V
@MֽTZ-KAz^T[슼if%a{G)L樖"*,Tuخ2`3¶2u-6_<n?snj-oQ`	y爐81e	iT:oڢv̢n|(vwLu:zƋQog&6˅x<6SM좈1_MmUleǄL=qfakugm<{ΣoLsWn{ܙ_?"]ĕ q-
f~%+ZRFaiRDю($D$B:Ht"!I/# d\&dd n1r!q2K<KyN:y=r< !yD2yLdF0
fN|di-q/yq؋Q/F8ŰGŐ۽D}DZdQ^> b'[r.4od\qŶ.^;bE;>tņw=W/PKwfܐ    PK    A             .   org/bouncycastle/asn1/esf/OcspIdentifier.classT[OQb
Ԃ
(*rSnbPB{hnmD'>0H?JiH9|gfozoa<p`7$MHhӌ`F
KQL)R2$4&2F֎НYGB+LjMdRetlAB9WӶՅmO&5+%"%gӉ쮰H9mI<ŝi%fJt"eg-ejk4:=$,֒X7w`elWwU_v	ǈvED6`y(S՗:C8676wM#OcU(CqM_F2$D/$Q AC#wGPsrnV{	UCr?U<wZ1gFIREjm)q)7q^AWN<~XYMVTB	3WZ(TЎ&+@/<
:1[
p[A=1Gw2FD=6>txf#6O|a_/yf҇>Lڸ71E/{67Myh'D}kG=v0uhw!UP"	1/TGl_'e^\D`y5H#toUa90jēC<70崌_5v+P=$m6 [herWa˄O1{$зǋ" PK     PK    A             *   org/bouncycastle/asn1/esf/OcspListID.classTMSY=/B#QNm{@EF8/t$vtҩ	WVqU8q1dFޤ
gss=o8m ^M
'-Ol01O>(K''c	ʸ1疝4L6wۘy]Ǔ^zrbQ:yӎ$V+s/Yc@ӛrK2eaR4l)iۖ/ʼzEreR/YNalyY詭}6RzF#AN[7>4\wOSA'W'Mf9{nr@bݳhR3}\.Y-zH6߭G`.
(تG6WUKd^KC^=ZcbTK7QZW4Nmn5ܼ9gu]D6КF>m-Kezʚ]<\bjXc'Ad;R=<?WUfQ!DMثb~>mTt "cI!:#D1A?30d`b8p41p&BdpGg<]άoM+|'A@ ۠VЎV
? m{Z@|V*f|M:auh[¯^d\@tvU,*
?dK{
tU^^BV=znb+gULEXT\:Q3SgMF9%"[H<_+OTS>a =hʥYPKʏk.V  G  PK    A             /   org/bouncycastle/asn1/esf/OcspResponsesID.classUmSW~.Iܰ,F$ XXLM%ոfF'35q|Ns6`	Nf{<ﯿ'ai4/Gn
#ܔV^F󍜎(dҢMOQiq
4V6˼;
S)rͧmY^2gƖ*V1.d(U/)bU^]ӶNnŴf'J1aoZyqK2e8Tj.{jc$)]"(֔(椅'ޜ#kQ5#m9I/muJ)A@ĵ9Պt-]^
*Sp\A
N(8)/wv䝔7O,2Z]_

{Ԏ|dGum3w9Ri'Z	7aO&L7^v٭Z`Mp3Xp
:9:Lk+
pN)ti!%nLCq
*lK2LcJC7.2\bWUk*aL3`eb3ߪ83paAEs*F<gq9}azq(B ]DBYuߔUviO~BXm/DXѶ&AjIZ_amf$Fc(Wp*{U,pw="EEDO=[wC?KAL~`9BH9S'E
9O"w''<}?=}r?B/X.4qw_`w/yuB5,'YU1s\{
CQn PKA%b  K  PK    A             )   org/bouncycastle/asn1/esf/OtherHash.classTmO`=t+]^&  ]tMD@8!|*[ي5OyeF_QʶN4Kso{ιv7 sXgm&5Ьeٲ-Й3擅SxA.m#M冝*LU*MMo$#N19Gv]py
NZޱ$w`f8DE1_[6v9tϛE"PMzv덞|yfִoEחv>_^eNu7iwϊ֡ŭcS,U"MB	fvd#xQB}~nEWejF@dC_IvOwQ?բu`zsK~2u݉17t㦂&0!DaDAFEvK5l\A3&H#ZPe!&S2pGqfd\.BBYda>NkNZmind^=1^0
&F^G- fS%ܦT%i?9AHHt!CuKJX.abM´'WiZg *xZP=̰Ц9N5rd{2ޣC;qdI\9uV:OQI)=Hy^lRk~PK[y  Z  PK    A             4   org/bouncycastle/asn1/esf/OtherHashAlgAndValue.classUmSW~.IXXF|mRЪ AӢXcے&K]88#̨(sje3a2<ݼyK (
aP J:)MX^u<G]8lى!Lԝq-&+=:Hu˪Wsnů9#`MmHXʢ(ݧmYV9%0R}uzܶ[Y*قʊjƎTIY*xڲ&kʿre֪{s\\+M*'n"ۭU`fy`GV93GsdQvCUe-zγy8<Y=q9PT |nq4Cﶣ!ᤆQ
4pFY
k8'0HfCa˙TzWK곩㴺XU ؇/"'ݱC:իg6ݓ{pYf}&.5^/,ðfB+34阥O`a1Ävl#|i`S>"Q+>MBʀ
&23l5ps_3,#o1:qaò	\a<[?Ǌ.1\gX1tyYmU嶵{"%)0@?svHbYϝ?_H!5{߈,/Pl=GQDbQAu$W62M{6JmZ(M[L{/f&9ڳ4q`b@CRY|qEx3qـ8Jqs/0pyS\3K1Qp{=qrdLPK 6    PK    A             ,   org/bouncycastle/asn1/esf/OtherRevRefs.classU[WQC1nZ
EvOfEIEvHS8CE=ثU`VQ>@HD9Ƿ9|8tZ<P\@dZFp1l)_N<[fRr1#űI٬0Sms5YrDض%5-13iUfщ41D$.bnj)Kzgy/!
E'ƞ'E1,f:dDZτ¼05
;b
b*"؆,z-;RR9s`(>XRPʍ2hDST1g#
ۘ7cL6髍!xAqkY9VU*+`
lSС`
v*إ`=}aZSws&vF|
vD:эDC|1Ấ5_ş24>O%Rjz̫J4mЫak*&#7oA8%9T8<8цqcNI8%w986AÈ4gUt#UMXDU>\p
?I3&5\UJ+}Fہɧ1=;%%TM^J;jcK7v~+Wh_-k-BKh+)2[&#h^F+/i50#~"E&
Ky,gDЕ/VӂtS5q{wc
xbR^4U'uڤ@SH
|qR^*ViAgh6XV[{r%`0
$edxKdPK,57`    PK    A             ,   org/bouncycastle/asn1/esf/OtherRevVals.classYSP!ZYQ

$)PqWpiJCh/5ZF~|gE;J=-:99=M ^HU,Ci5ְg%nŹ?cW&H`ػ؋XavSn"V5Hx79ݐ"gܙ˳Fjf%Mo3CI<7i##<횶U+R<iBNri[&cu
o"mQ1dxL%pvy{ɊčA#c
CщBu|LewC"	\0wu1M\]vi1tVhxLOeg[[zq:s\]%Hh&ငI8,CX
Mb6U+3۽3BCzMmB6thbgo0Dj\VWB+uJƫ)ot&H?SMo[jP	Rp(hGA@X+1
㬂=8'EX]TЄ{aHa~ܐщk20aa8%|=	3"W)LD2nIܢ'&3@q#=#zF u+_a	
8^;U'|yh1}
sU"G#-*|Y<hx<<b9L,SYL0MxOA"Oxoh$:JIjI$$tx)րKQ")HJ}HPd/Δf]-t0
nExjL(,GEPKbrN    PK    A             0   org/bouncycastle/asn1/esf/RevocationValues.classVksU~6I!ZHҒ[KH[Vӂm)P&KXivS#vOuFjG/~8~wFﻛ6f;Mf99g~y`?C w04hḅgx<Q5<*`}j1ɼ%CttBkɫI03JT6Ψ4~P'FO(FV尀v'JT/ITa[N9U4\f\iXlIl:QIY)䃚aT=5}elkyQɍ(SG19=l9%Q(;7ڔQS-l$Oь3}tcI%k&b4jT-ݟW3)%G4ySDcdۣ^SrVH_,7T}Ý1-䉌2N)xBӶ;	 `)V7<h4CRŸ]]agCѓVG4q[-v]$}I]>8D!SF̩WTS"mX#/bDlM"ZD.;DKf)
:=92+Դ;LlJR7X)3ўg9ʮ`e*C.(<3jPZngU5r\iy
߽"u,ՐnS*Djݣ>{{5rvԨgAoCGjH]jt5pܣZpش;磪C4ZmKC#a7K MWF/OJu8&a-$ԣb^"N00]c80G;c2Ϡс~tv/a8 3\cN3\`짏$84CO.э+~V(0ẁ7Jè)'/1J熋F#zRIoZIk}il{k6ѕF
d!kB\R#Ţf|'\H׼ߡuyIa
by"rá{xDڠ[s5^G?wa\B8o#<.PWGf_)x@ob@\twldg
>{əp::fJ?.vQ%K-xDD`}OH26_8糭HBZM%jg1(Q=lhc"RǴhmAf	vZKMp YDDD"1Bxw	šY>0m<Mf6p?z%̔T wSHGx 	j)vnNRt/MSY!Eb)ғ]G&g-2	|Z:?jcCd7ϊiEg}*RX
m{IV?Oˮc3PKp`  
  PK    A             ,   org/bouncycastle/asn1/esf/SPUserNotice.classUmSW~6!l,Pkm5&!jBUMHIƾ.k\ɆRW63~CRǩ=79ǟ .CcX7[o~Mݾ!`2cn^1m2f([YJֲuEW-I-I̶ˆvm%f/j* Hb1@YUScD:eMd.2$:x4GyV
K;5q#uKMYJ&ښajWJ5Ookl)L+Y]Ӎ"oYjn&UT#`Rn^#fIRJmX5S{U`)jΤsٙYEuàbG@SuFA]58N.,Wa½1 }eZjQ
{e `xo궾Em98!⤈S"N8#gE+✈D/⼈KG+mV@b8Ɩ: iO:KR;=z<ڭ}xu$hݨV#ArPԊcS[H`	5ڽA="`1{L9u:AJۘG[riHP(>q.'\ǜrr$p	H	ɗH3N%D!%NGV"߻X0\  9=~VWFs2ЏjI"a2n@@zI+/؁_yĞ
&~h@!!!NbQnH7D4]A	TɗH
1%OML9kОbm&&M\*4Iu v䠰Pg^	1K?̇[n/ YSF%Ah<f]	|<>w 0!\uw(toxW9[tl"^7c{#CdPKPT  	  PK    A             %   org/bouncycastle/asn1/esf/SPuri.classRJ@=TӦm}g)"Ƹ"R+DKjM$/D~x:{2O/ VPfPc
s&Cm/³,eG][e(4EG-5zӱ%Ü4̺+["͚L-\Pgu\pۡ
UW20ʰ/m^DG?zOWb#<G,85hѐXd52S:%}+.EBFiR&`*3QW7kdW.ŹkOGL=`˺l,C`>8E^30a,ݡt4N|4ϸEILcOPKb"lp    PK    A             6   org/bouncycastle/asn1/esf/SigPolicyQualifierInfo.classmoPwu8
PSԙNYB:U-0qcq7Cϥir}{/ x,wi4JngOpomtk^ިXUC;zuVxߙ1ĬZE)Zvu+jL)[mSJjѺY'9?$[M
zkkݡۯ3+^V,[zI-ff5lP 
 	pAa17@	3>ܿ!<CUfE5ìp0z~es50:'BSѥ wE->5-s.?Y&3n׆\-gC"	S""f$x,o] `NywF8r187 dA$m授VDH*ѭ۪n4'r>jB7nRo=rkrr@+t`ǽČSe7&KA~N_n?C aAY/O1ߖ@	'ăF+d\p<}ӗq&jO?CobÉ/PK{  b  PK    A             3   org/bouncycastle/asn1/esf/SigPolicyQualifiers.classOPǿw++1"+b!W2cB%	-k+kG	3Q }25V!>sz>ｽ7 Đ6Ⱦf>0"z
%d #pB[M=A
޲R{܅f#5QӵٌvM67|W:mʆ-%a"%dC_ihw2BaPCNaav;0f@yBs͛I](<BU?m25𑹾riw/N%i[=WQP1``04Rqe&`R9qCG:FpS2:
1:!;t	k!w>_%3zh",rxܥ!SCZQ?r)	c,vX'jb͐Qθ8E)ZuB筅/D|bfJZSыQX|̏1՘<Bw:1u	WbPT7PKYQ    PK    A             1   org/bouncycastle/asn1/esf/SignaturePolicyId.classV[wU&NNIT̴
ATXI/BBhi2M7>O(kلeɥ=^y}Y_?*&0  d
ĔmSFj1nvH9qjHa"^3AV7wӮhYyr[wݯbeFp~Cg-ݮeet+ߨ5;Mtͺ-6L647jzӮ<kYݱs|^nήԫe(:qSbE)T)3/wJ7U@:4;`31삻n4y%jxo&k|[w
coVCtOr	:!G@ҭs
随IpݑHqLq#"FEqR)?|'\A4rɆ<FO(i/ſ䦰գȇN|,Z})aw3s߽$2\Sǃf2fLٯk}m>\C67gǊb|gIא*T881G0&,C21YcʆweHul:0dK8[Ra6]	i2|$<[/`=	o` "Hx.D>SS>Ttû(V@V.ۓT9U+}0(P~@B
ʖ6j[1lƨqIE#|:+j_h-Ȱxtm||\hSַPn6JZjEUykcKHZӭmcn
È+PDEDt\	m<ƔHQ1frªgѡ
. jȅ-|ʖOO<Fq"-혏 uxrm|6uI{A.Ӷeh䖤 PK:  q
  PK    A             9   org/bouncycastle/asn1/esf/SignaturePolicyIdentifier.classS]oA=#c[~b]1!!MmXu4Ҥ?hb΂Q+ɝsΜ{fη>CH+9CX#hhV[UF뉎jqK5ý~Ovm</[un[>q-<ȶ׺gNɨ4z߶61N<>I'7&lx־%z)oו6w{֡YBA\AB`^?60&!~V>ܰ1FSɦ?,19]m
OL9kj^YEs*ȪH⒊(U\ejX!56H#p3Nk9p!Eπaq?j-#0M}T,Qy#4F
e;/?#<
	=zy6m_g(qg>mauAIR&FY*)=| A'sV@2O߈
@Ap,pοtcXË@y[zyPKR'"    PK    A             /   org/bouncycastle/asn1/esf/SignerAttribute.classV[WU݇9aJmh @k4jKm
x!&i2At-ORxŵjeCR$@|w9{s?u 9pr-pArŋ}D7t:%uEU#^X"0CD"-$2Fd-͸SFoJo4SBԈiSQSI͠FMԵH"P̠6U#
c&fpˌJP=j<QL@\[Aq-[M56о`ad,r`5%M=a0>?TbnexTK Ҧh2OZC[5kcpk,40"fiMZ Yv'1-Vx;pw_rYA2ҋ3^w0\|Ƶ/UTHi!=̈́읔
efE'W>pphh88:G8hhchpKFA9H/Lmяfűkwd|TU;m44Qݮ`EL"bUV8Hp Nqn:Nz-MOyl6,q-%R֭]-k%ďioǹPq䄋90	ÍLHa
G~/2zT)h`MkDTW\[
NaHAEnDA
FEt]
c
jq[
-
xO5cBF'fd1- $CS]@@XF`J|.>L
PebN>|,ǂL"⎀tݎ'tօL5rRMΈË6*?U;A|c	Q\<37=~'9nMK[B%g%E)'eۨǛ\?#JQb|Ű)!sHrJYM$vV[5CvUȝ'hv)nY$X=lc/SD[F-G4rTi}-9,aY5{Yr~\ERK?i| q9z'?C;>8:ȫhy&;nh%+ Hlސ{ӸZd_I0<Qڼy,y7qX}=c[
[E9ܟX-ѱv¶-g!×Y7l
KCeSQaeANA]%PKPU  
  PK    A             .   org/bouncycastle/asn1/esf/SignerLocation.classVkSU~,Ihk)^
iBbIJ
$ta٤ɂP/Z//0':cÿЩ.	H2sysyuh@Q<=yF@@:\BəQrFGd=ҧeՄ̬fzHL
%of熔)U7lșpF鄢k&׌Jd״5ۣ 
.I.`{ߛLf՜3m)#Jj(M&+tVjjJBTft-ʌ#I4&Ԍ
MiHԠɬb%}}$:k:Vg7652V+sd)1ƴjHe%'&W'EKWu"(Rs"1-eY
;S@$c_?53a*Yb^W	Z@PY_Fvm4ӜYmJ3UD"xZ3"* "8,Pôv_m
Ji'zn
l߻JwҚ 
U\/VE-ʁMJ7FM`'k@L\GPU7Pp\*#n>XJB^=cx3Uqgƫ݂
	Y9WMybֺjUjY/olG%		^<'a?C\"vc="j%ऄ]x/H؁	qJYvE$P^agxayCz]d0EWu8^D0Û*5/c0(^tm/.3$^tc:CFx.7_|)J$&߻h%!B
'z5?R+Q2 bZ.F(`T=|EJE
x;Mo/}Ey }ëyEhf`rv}{L. 7yd~%;k
0~zWɄ/[Yu))xN>κGX
9
;82vK%Krܖ_9L^l5AX̹-[ĚqѿF9Զx|tJ>1A-6EjUIԶʿ_е>\(zFM}dgjy6ʪPvzjuz';ӗH=
ۄgs~BtK7h%ݩW|$=aa'=윥~	rJJ]ǿƲ
*]USxLLvrY-!- =.cWh	qGG(<*'rˊ-^C/\nnPKw%^*e  <  PK
      A                org/bouncycastle/asn1/ess/PK    A             ,   org/bouncycastle/asn1/ess/ContentHints.classUkSa~^VUV^[
J2f]6g?ͤX4:/	99Ϲ. ׷`puk\7tsNxAMfZJMۦ0޶мւ+SuWwY')S1TkfdpnLCo"\OꞪ--`di~8fE2PĞH2tfC`S"{]#%ӎI82°+"!L>SaJ>L놙bp	bR&V@ 4h$!0[~eBD	Ulf7]%q)Y/n	\CZ͎eP*p]tkZ#K /Ǫ^)k})ڸ2ߪl*
3Z!E.)
MRQWcu ː[Pn	60.$H^	NIK_Dr1EpPDqTD+FDᙈvr1!x.c"x"ٸwA%Gq'*F/E풩eYTяά(5pP,`ϼ@i|>j3xNYO2CvHEvE\6cr~10p}Ɂ!"tupdv%ވ?MG@@Re-r֞IdOd?ˌ92y@u` 'P-Eк {~gtZϮ>@)k|w4^_ǜ@[k/7rƺ	#;EZu/f9NQ0StxB@ÅPK4  g  PK    A             1   org/bouncycastle/asn1/ess/ContentIdentifier.class]kAQ756G:^,
B׉ŝ)	Q!g-l9ϼr v͐KqԹHE%|GJPdPNh;A+>Qi(ݓHNPmyP3	MݏTt;Xy:&$JKm8}OGHGJl
Lrs6lY9bc_u^ɶ7b P+3i0#)#\d.;cV:[c6>"Z| Z=5]zy>$#e:;C7];x:³!
J!eMVh96cO5sj_a<&,<`0`mPK:u  Y  PK    A             )   org/bouncycastle/asn1/ess/ESSCertID.classmOV&cƠtЖ&q
.[v[Qʚ5cOƹKMl&{9Imi[ߴ>Ӵ<Y:9<k 7X=Rۆ04
qH:ۖKg\OgVgy3:curSF)鋟*1Eҷ~ד(267C/=ɓiSjݵua
"A%++2솾ZsƖۆS-ʆʕ
MX#atZb, pf(g+]5OLl3
KS閌5[P.ݼ[ `cwJxC½CƎ]o
^~^B9ipOq>K化=k
-ZIn#lgd-cH;2ޕ1,cDƨ22d۪H3?|:}t0]# YmmM'B'34Ȥ[EqX^B{lւIfiѕ|vδ_k'ޫ~d{ͪZhխ*{**#BA7EBEU
O*
xm
V|b ȱ놎(%)ifq]d/h"K)e+
&ISiAe|`
QsK	-莱yo7AeQ4v3YH1zFAB}uEmַm"$8$Py5Z
k*DWcu\,֑.@GzUm
_ecUs<-OõGQmo~^S;d2#gIA=bHF1rZcvDhjBk}&Id$LzHV)fp &-z䮟FzDW	VWapf"ԑ)vb`%G1Y`7J2PKR!  	  PK    A             +   org/bouncycastle/asn1/ess/ESSCertIDv2.classVSwllQTE$@EE6J 6Jd
ajoW5qZљMN{@$)w}n?/-ll)q}PNL6CtbגѨ #*}|V8g̷􄢪=r&h!ŞP/({xqȨolpHpLӊFe(A9PNcS#fmd&߽H,9%eL@-(qUrCK|N^k&-U@jx<1)wt 6gdOT"_4D7IN)>p.LjLИ
STMW WH_R g,LĒZ|HNQ#'v70>bay"\bk[WNir]8`VSIXԖ%u_P3ڊ45{}10uI=*q}kqz3;|sm]kh.P8
KI]z|׍&[q;)UWgccFEa$b-"&bfN.n-"vhgM锃OȶR"g9"z?=Fc9k뮁~K$5$5Y貀uYPc
r
KNG;\;?iYdZgwY̗1YMN+}
g;N.6ƞjϗ}e=I{T+0ؿpLžYcV4WV`ð($<~	L`@B
Hh`,JhCjTJxU$2HUZJ耏y/JX$l_B-7dDB=Ө8̸+LL^eCN0LBLL+lxFZ5:B6
{XڅI&l؋LlA܆}ЙQɛL޲(6
4}U
	r<=o^4U]AUBғk=ٓJ*X!'9PI!oqßAoJk&gV*ԱN	ht=@uX\w꺇/vV`=?g2Ipxf:uWS2`W0L)|>H47sSuүsM,~zo[%v]\=zT<&"uQ/LB\8x:-.-l11 a"-#K q""D۳xܜO{1/)׎E	O "Ws"Maz<gz\iB-PAg~ez
weאt9kYtKh튈ߞGUN!'fq
Ps Z"6.ωrNEVRhR~npq<4ؗAOНWi"vhA7=2VZp%PK2)    PK    A             +   org/bouncycastle/asn1/ess/OtherCertID.classVmSU~6,@EkKHI6Z
/JTjDkd	K.PZӏtƯؤmQ.'3{ W}p$Q/	>\7LÝ=eQ^7zc<'e2Ҷt6e-p74g]@AU0mm׻nӜ׻I|rn'urꆞv\JP F& 7mMifVMrzVl~S7)JafgF.-;Zy3$9nNW5W[fh9
4 jbm:N׋rKm0p<hnNSá8꒻ܬĜqX]JOdƚNM5H1jFR&xC0,upG .͖kqnƦۤ	WX="ΈxKDE#⬈wEq^D"h:<R~$9#K3Z~Ihan,p! ;m꽏2AG8R0fŽ)F5m_2?Q|M;wVqשxS
v+C'dWd6'dW}!}"l|dY .2qEE4hAvdfт0dCpUFX7bJ 6L#et`,y"b		CB%,	a,+!·
nFBHVWT,KM)_/aߵa;kec۞tÛ]~T9Ge)((Af}kĞ!BlWyb)%"
djI4XG-`3#x
>@	C.t	dY_Zz?aGk(Х/{?sMǲu_@y?nEDD*!uuAJ䂂TJKEGȓa62S;H GJ	>aү+T(AM"]D
p+$Y̳尝+(<s@N|;Zcg]NX_ƿJFR"*BFH PKT?)V  
  PK    A             7   org/bouncycastle/asn1/ess/OtherSigningCertificate.classUnU]Ǘ1iSB!$x5ⶐ8q) MS3ř1$jy'xBHxM%"|g$`Y{u?8#*!2kJi|eXhʝݨf6-KkMfdffh䍆SX	dzQ?{)jLAk765Ǵ-*@
:auV('oqНyASm-SӬjPU6ߨnmt_7Q`tTrU]2k!:8ҭ쒥mfS`\/;ʦ7[,0u0iqim3ӗ̪Eey5OZf<'ZmcnLı=c%H"0,ᘄF$Q	/
L(&Q(F'Y1*i}ܵKAznUb35U%cU{>KelooAs\Q0UH[vw?'RZ8RdAq%ddC{(2i1Y^='#3\D.G17H
57ފb
WQWcg4QZb-	
XOoj\褓$ @:wm(.@C0䗈 >FdYm|#v!a,*W9jKjtC_cCLu0Y Qn1*Ϸ­6?`Rpq5wnnab	I$-ø0v0]N>r. #SD
R;~GWWM17r鋀=d &a\	5_yW@CXp
1Xbq;D'%L1^FƏ|TSp^k	* PK-dح    PK    A             2   org/bouncycastle/asn1/ess/SigningCertificate.classUnU]Ǘ1iSB!M{
iBmCLi2ZScOg~'TTaq{)WT̐&9mg
9|C@8-*ɔlZsUVM6K7R-kRJ }l7k5{Z˩yeV+_TՂtJs ggvvs]sLۢaZ%0,Duj	jS-Y-Gѭ{;U5
bmjfzݨifmcݰ}hIuU[0U)?yLV7V&n*EGST?+;=^t0K5k]S#=}4H:6eiI312*AA	G$0$ᘄ$Kx]`2Nvgc(-|_4},wxyϊ-=\KȦ=Qq7Leb;s%Md{}G?UgUK｝:f,,r7tH@Fq7E!"cY)2xyxFF?Cgy3pi2\cƑe108'10p-I,0,q
I)Uz	/oh\ݤ& D:wm(.@30) <FtE|%!9aR$U:sԪJjۑ1m!&ttphc۸ʿ+pO|7hvBHBZ|`txˏaԏacP:T1SD
S;+NWFwι7MHNd!!aT<%񶯼+_K!*ZLK,<;{-?,axyߣ@|lhs^+﹬9dG5)*PKW~Nv    PK    A             4   org/bouncycastle/asn1/ess/SigningCertificateV2.classUkSU~N.6"U@H6KhBhJѴޖ65lb08M3޾_X}7+DB=<{?g pJmx"iZ6Lú)pzU-ۺ~=(Jʶ=ԺUj\z<%^۹>|Z|R6Gi~ZFŤnXjU7H.+Vfڬ[*e7蚵b{uGUOzI-J[ijz#
LrV0KFǧ[_JZn<7؛ΎM9'nrr_`7/gL*sZz,R+Ii
٨[eЈϪ] IIx^¨1	%K8#	^qV:2f֌DG0OҙqjL"<Gmj_DyG}ɶ`>rR'ُDjQ*+~.;O*Bɯv۷3qg/1n\}-%dzvXh^0"22/rKGLsXyC^,2 0\e>0n1U?xa!!xv7c)c?-zǒ"ZjRwX gT-M-`Nك_
)"Ki!\L]"
l=Þ1R];J;rJ
}PӅ&
r
nb%n~u{(1c٧qG8\iU')'QAiak>
`꥓p):J]أ<`;اҺ<$bȸHfE;ӎ\}c}ݞ-$K|ggW弣|gWr1vȶC|" 3Ȕe\pb$){m!T6~&<ϊ{TvǇ>|_PK'  	  PK
      A                org/bouncycastle/asn1/est/PK    A             )   org/bouncycastle/asn1/est/AttrOrOID.classU[wW	9d2)Jbr02MZ*Z1M`c_ߐ_З>
iV[_|Oހ\ws< L	E-/0rvlﲀo%AY.[NA`Z,w=YJP$.jU`INNel
뷫u4lHf筲g@-NjU4KJn9^ۑ.){ǻ,5T*Եnh5'7^2̪3oĳo]OYvn\-Yz^"J@l.7*ُ(tVf94`U=O/S$*F!=wO
mV`9N*l;ឫz8n}Ĉ!	IW%K&qBuoH)p&C(p}wDh=I},_+F3"9ܡ)vNbkr#}֯=L.AsڧPoq^ ĮAV1"y~û*qN~gx_[@(>dqAQ1âY,)8eP08,FqM|'IWAU%g׮qu!/BT2$$֠]=i]<Ag;QnC-S6B?cM#Y
_	ODp\t7lWe66{[Xq*Mwۘ5
7pk6DJr7AbNB3J,A*,qWAᡟZ`w?|cxu<v<QN̙f01OZAC*?PKȏ    PK    A             (   org/bouncycastle/asn1/est/CsrAttrs.class_OPƟn83U: K&U)RD^y(,x;x!oW&([Fb=ϳ| $fj2Ggl

+eK̂+,K@k掭<㸞Ve]۰LbKy}/M
n΄>[@k#9Ŧ-,>\:\O[s;di6гD]-KBT,E"U9#O,-@U3(ouc`Tk$UV[O3Y<
TdY)ui2ʻھl=+F>oT>C3ܨF?K2_	Eat)AP " npU a !Mѥ("
21ErUF2:qM&N˸1*|B<|zxhsNE}h%"~+oѾ }ClU=Lm۾09
8BZo7˘fq}Gi0?sUL>b|hO꣩2T`9jDXu%RM-OQNFB(!.K7#lIW%:őD{@43q>A>:Ví
~PKے  |  PK    A             %   org/bouncycastle/asn1/est/Utils.classJ@in6U"x@0ыm\JJL$
y+=)|(1](
aoE{'zY3@V&i^0g)rYD2kmᨬfbZ>iJmr%.FS%U]nLkƿwO?hUxqd` <	݋^~뭢cmU`7裋>\;f;c7X_PKe     PK
      A                org/bouncycastle/asn1/gnu/PK    A             4   org/bouncycastle/asn1/gnu/GNUObjectIdentifiers.classRPOd ;ؚ6e YP0Ji+ >=;0|ǹ'7ϯ@2`?280#288N2hdĠ)-N3028@fciFIJ=٣?YtpJPPIPT~w^εįjȵ$Yw?Ϛ{+KJJ]*yv٥8|J{p|j8αq~`ݱavB
IU"N?%`9W[d_R+Cʠ]leʶ9u/К5*z
)2s9[[mq^Ld"eez2iFLXk:?s݌Y뼐2X4oR3̔a)+OezLKIݫMNȿG|kƂ87'̌߬Z0t.8vq[ږa&sߩ?
3nhC#:.D7ыC#BE C0b1E!$" p.4".!.# "!bC:b@,"bD LD
Q
S`!*TSqX(i@:EFDN9*rDn}"{D9(rXVm"DSuŖo05[݄_ד!o _'/ I^Hy1mr=rF~>.%K$L&H^N	nOɫmjy
'ب>ûMXPK	{<<    PK
      A                org/bouncycastle/asn1/iana/PK    A             6   org/bouncycastle/asn1/iana/IANAObjectIdentifiers.class	WWjJkWڄ	3
Q@2}}7jkm+ŮF
i9<}w0:cD.ct9+]h
F2:FW302c21g150jdF͌Z]h=m``t=VJjjRTTOoB b4 @ոhЫWC&
:Yfia/=:똯c+
ZI˶
pO04ΧHƱ
cCaG
,ǌigR
s"c:Vʴ]#ɷNhb	3lSÛ,Ύ>VYH-дH{+Hȧ#BU1M*?YpW5FB]aU/L.EZf^?!ΤI,㨅Ϊٝt
^gkͺh.֒F%&,oD᪍
ŮZOP>$2Ş:c>x;u>]xAXF2ҼDX~e~MD	c,,6 c횎m
-2Y3+k2h/˲c&
;ᯐBSDSڴdȺIkdm	1YÖ(TW2l	̝dF	~R~1rHʌ&ʦx_ea6R;1e4RF2Zߏ٬Њ3eǛbg
Ht.=@/ }@6`;0 v `18 ,`Hi W&(1n nnnn w www   O OOO / /// -&^}Y,|UYf̌̍2GeLLȴdv-3*Ӑ9$Ӕ9,3&O!2&sAa2Sn{dFdK$.;X02E'rtR9DN?B
}D[@/&tr4#NA
?l	zMˍOw3͟ha*strcR@˄~eBX'г~lB
LgsV
=].SBBWAW
'B@/zJWj_C/A?PKA  
  PK
      A                org/bouncycastle/asn1/icao/PK    A             /   org/bouncycastle/asn1/icao/CscaMasterList.classUSe~a %
)- RTX-m6qwÀgozL/^<M3^zՙZ7!g{ޟ_~>A
E*УǑY۱9),el9쯬鈀vwkŲcn9S͋$,׷٦[3$hJd_=_@1.e!xAN[k)y"˴[\.:ira$O
+o|yrM*C#-y]YS."E7bV%YignNʳH=ٞiw"mcx1ځCugi2ZnIuD`/rˮnYB~QoiA	!	%J0,%	#^pBI	&ڌ35)RJau|TM7ǀE9c㭩uRWfv ޺f\2&Fg*_;ݪšvY3өyɽ
\OvqE
](ڕ.Z{hWW #2AC1$xuFA*8$o1gE^.3\a 壘탆7dDq]8R2&pû2^eiÒoc!-c7dx[&wnq9#E(gT (2D)c 1wh"m[061=(Eh*젗7z5Ld!+kfU
eK
*2UW^+
>AezzO~sa'}~
>݁:({BSMD%uS,bE'BU'@b|f\Ű\?4
.4äɌ>$:%sҤLS|]-M%v` 7+*D(dc3Aɰ&P
ju
PK/  /	  PK    A             .   org/bouncycastle/asn1/icao/DataGroupHash.classRP, B4K(BG :aӐ6!|/PGo@vv;I,2h"ksy2縎gh?y33Wl1mtz~71w-BT^6mKWn	ʻɷ'c]?kp<Rgf]"c<NՉ+\|:pH;:#F?q,'I#2dl
4W4+hQЪGcB6=lAi4(2wEwz€|)GfF6W\F]ੌ$UM]2$g/]%BO1
WУ744iE!
MՠTЀa)nI1ҀR*:0*m)Ę븧*1<ވvܡj۠))vo~":h*Qq@'G?)>@d"X'$e[aJ3Qă=̭c_aw1UQbA5S}AJFwh E*OJ`j3ʄ2R&ꈘ.m({hun>@L""K$PK:    PK    A             6   org/bouncycastle/asn1/icao/ICAOObjectIdentifiers.class]OA߱]jU
~. VpEbRcUvnMSDM(e6nr93sf6ϯ4Ĵ&&.d2CUUZVTjXWPB\FVbz-:]>CQm
羷;<b($)rF"hJ,NNtܾte9p dzt$Nw璔	Ov=}^c0vn4JMr rgP/f9mSG[?[=(y²CYv:/K
KWXJY{;
\7pMWj'ۿ/ۉ&Y\,f	yB0G(Jy5
di=}BLX!< *+%TNH35Z=*(WJ.hךZ:uVkQk)VQF}G߰6	jcr3`k-mc4}L\ldbN|l7Ȧc['kvsM}£OqUPKhYB    PK    A             2   org/bouncycastle/asn1/icao/LDSSecurityObject.classV[weӦL:ڂ[@k)V+ɐ3̤xC^~ ._t/>,vY
Ln-DZ>Ϟs+ s/y!>9v\'+NlMC)ɤF4ЖRW[IF6s\L\CҔ\K!I-Z`:e=5K]TS@KJ·{ce+zBNM^Q-@*ͬd\5-<Vˆ b+,q4iG켢*ѴtZM)A3Fjv[ʠeZ#:M%=VAv=N
ӯNgydU:?X4Ttbi5Xzwt0~{DOIe2
c;6jcZщ!B~9S*cbDe

V<U4R%dt8WYj\,״Cgeܾh6XN7tԦ5[nN^*g=]ĞkLtunaf7XOWEDD.i~;DK3"vks_pjJ.9-߬|%i5j5nU[𭣘 ֪HPK`MGe'`wZƥ&`d`>:`M%p͡r{\U
rW\Mrs?_cdI8j9F D݊x-Gk=/ey?m4ۭS᠌haO^F6
2d6O`OE[qG26㨌1$C0yq>؄16'ٜф<9ۈ~y96MB^cJ؃l.y#_$$\ЋlR")6C0 Çn(9d$rp>gXVWǔY~+ba4
!4SC'HGgL:$u<JGM8C8_4~EmxC!t-F,Yf"ES
fh{&sL]$`Lo"?%AEX񍓡m-ue71SikQMZ)%}ǝR~4<@;DT4#"i|N8/^* ?,>ۚq"9|HɄ"+?D![JH]Wǭ_Pbu䷴7|o
2ױwV#7{Y⻘FX@l, a-[+l҃y1jSE`8V>i?	1p>k-ӿKS4p>Du|V
X>RYYB6O	 PKRu    PK    A             /   org/bouncycastle/asn1/icao/LDSVersionInfo.classT]SP=RB|(,hDE#<t(c>2`?ɿPg2vƏQ޴dfwgݳٹ~
 Tmr,
˶E.Ҷin0t*nrCRC'^M>_ؖlu䎶y6t>oZ>U0э=Q`N
UsY5}2[!Nxf8*j96k*F1hec&Y標lMjvZZuͨk3N!z'aϩܵ<kvz\(@-G@X@>xMK2ȱogwr:ւզ8?QL˭uY>
j\Z+2|K'og?Nuzu%%taL 7DytU(&.7D271C)bq1ͬ+P#2"e4ƏiTUzrM{λ	:w)@G %Zxǔ2)e,|Ɯq#P鵴uJ
WyZ ?\?+7%vDQ1,
!dԉ{q"R#RR~"\A$"YbdA5 yR>a Kz]"'Ժ*"B[hpdHPKҞ    PK
      A                org/bouncycastle/asn1/isara/PK    A             8   org/bouncycastle/asn1/isara/IsaraObjectIdentifiers.classPJ@=$mӋZB+MjćA|*}(|*$-(Y⃠QnQpΜs@A?۳+<]mS1c.x~B?IGu4U뜠b7LDb
}O҈.k,㐲Ltv~X&A(r~Ô`g,etL$8A?Zw\D܄UQUC$5";
y,R#2˳ACY]YIzFC{@ू2PKS    PK
      A                org/bouncycastle/asn1/isismtt/PK    A             <   org/bouncycastle/asn1/isismtt/ISISMTTObjectIdentifiers.classrFH45@	$ٲ'@0	.PRnY
+j3eЗ:oF19k[D4E9tIN8tq:KN8r+N8]f76ѱWJ{~K^q+{7h_|)`3f늹fed7FAba?iiUTJYЧESHn|lK-@2ω0TJbvFVuU̩|&:{ RD=tC˧Cɵv-ɸPжL1:RZc|4R"S*{,FA7e&nYϙŢ+=33hONŝvL{IY^|-L^U`Ngm*
v7ݛ3)F(J0ɭ"43Jn7SXkm>Nl@Y$"BCUU>_V7ꍕ47@tc˟Znw??[T1` 

@Pi Mp
5tX@x,+*<
`x0Hxh-	e9&c^u'h7ެr:s:ӒӂӢq3NgVN9tiSߪy6eVQGZx6+=Pl/}C/\TZ[쐵-G}	{Mc־o=`mڟamrk۰ND/vHPK&    PK
      A             #   org/bouncycastle/asn1/isismtt/ocsp/PK    A             1   org/bouncycastle/asn1/isismtt/ocsp/CertHash.classUmSU~6/lXR*`b
t!R	PZZlaf7fo:O	c/~Gddd2s}s=]10!!LH2Mnx9#Cl%oP\J̈́PcT[0ljƎUw$M&Ƕiox%alŗ7c:K8CSN٫b"abKifT m"+(<La	:pvl8	MOn&%m<5tpz'K]$xgkzr3Ӫ
s).)DD*su)Yc/,J,Wwc܁>n+t'JocZS}i]to~E3΍:|7
QU.kC]؎;F݉	xfWla?%$&2^7d)cR[2.ȸ(#!cJ%e\0r9$S+/]BǏAODM&'BnIeJƦcZr8m Aoej|?>G;Z/{@y&B:sz$;G^e=wϷDK[yPTyWVCDyDy6*=klb@nM^R#>eVrl2;
XU=Vql*FAo\G^O|`y`_(@;R3яa>Y5K"ۅGk4a[VXsĴ?٥2EZMػ--M|3j{f
|#B6HdBRy:(DtO:(
|ב=l@QKGr|*_iHFFr1NP3Ҭ3[/XO`1;;~giDTlI,lXcOocøLefDsEia&78?PKޫG    PK    A             =   org/bouncycastle/asn1/isismtt/ocsp/RequestedCertificate.classU[WW&(u*!hV[	m*E{Lqt2%7_|kՄU֪Ňڽ'HRfs>\Ͽ~Az"APʗC
ڢK	[G|Z|7Ӕ`KRTӤۗm˔BVt4bP|w=v[W<-EȕHC۲S6
Jr<B6L(*14ht9>y%̢L_@[kJڄY;&-)d9cf'`'qDtg2lh*7_5oqۋ&sKstVt ϝ˖Ts-+v MKqQ/n˲i6&JW^ɵʖYE@|tz
BׁpjAµqzI߳6hz]O'v1'eܳgY"tx&h` tKi:gD9RMK
vΖ
DW^s._-Ң0b/DX(**vxV.UQ1"bHELŰ*xNE\AtJ<F=:4&kO,{+ mVCKnC	qcnStrp]R	9V3?~5+Z}ӈ}o~qݮ-/"=j6_'$aWl.tϢ؎VhTXt]G/4[яtgtl8x:$XΫS,ul7X\hGoeqQQ5 05[,,5SaӐ%Y
cxWi\ֈfqe
O+xc)j?rXuệ"8'FnNi!4/A?L?c?FΝ y{-=@r棷еllV%u$b~#81[P*QAfU!SI!SBc_mt2Uwɧj~7eic"e͎bU|8\'/
>wp៛;hL8Li2r/K!7!2mQTi{ѷP	QxN@bP`WH*zc8=ۿٽU|VԹ:=_Qx֖4NݥvG5LЋDo
_ıRZuט;xXw4y$FK"M8ҿt[ALdfXUSK`)D	~3XSVoPK8  m  PK
      A             #   org/bouncycastle/asn1/isismtt/x509/PK    A             D   org/bouncycastle/asn1/isismtt/x509/AdditionalInformationSyntax.class]KA1Vk1(bJ{Sr9٬a4QO_DM Ƌ3q)$7gΜ; o̐*1SZ]B=0q5QfpHtS0jx/c+:a/Qƈ˷bVS(=6MQEdF3MhͿFIċ ,Ya*)RERZ) gLwǍ2}iCyC`6<h1iLŤSe/x
3aZlYj#i8D,C4Ʃ)ʀy~
9n?x`6kw	KĢt8W|fıhf;:^eׄ'Ka4Y&o0Nڴ=s
PKN6    PK    A             8   org/bouncycastle/asn1/isismtt/x509/AdmissionSyntax.classU[WWN0rj5Pmm\V;$c̄}#Z5eCICWvPϜ?_+KX
#[xbڥ.}Oss\7u&CτZӚf]1.XՒdzACSTL+eQ.^U2Ųnۺe)Z,2t۲LYNJE3I[LG3{qӗ9~aOM&s4ӦA nN-k|~iE+8A%ڳVUZd8VRt3+,HtE]UC5Ki)3R̮CN4t(Tu4QӍV:J֤HU15ːhݙLn.5VQ]2dQp6c0h*{i3vɭƐ:Ҙ1\hmL*?GX$wzYwU+.-ഀ~gsb	xwaw0ۋL{≙=DH{I/7{.>?bvz;1'mLkږ!4Җ7a(vZy[s,8'M>HZF\oa5imZs0]h7Cҏ!ʾSK8K",<$:%D|(W$\DU	I7&'s6'w4'3	DȘ'8)qU)'s b_r(R1|%}|0f9KIHc9G-<U+ 9л?QhDEhLɯ  ;қW6B:OҀD~|@:vuP85FBݔj'h-
:V~Bb'd%xx$'CT11B#ס F
=  -Piq,id}xg(q(''ya>
'ɌcLl!h4#GIe>uda˒"8&'i~:]c3d.E@_r #×䞽+LE5\dF?/PKL;D  
  PK    A             3   org/bouncycastle/asn1/isismtt/x509/Admissions.classVWW&D&Vk#"ZvH88V>sxS[N[}IV3,6Ҝ۷{?C8c68CUW(
TPV@ѓFN
pha,S#0
eTKN\f\2CF6'lZM#tÑ3YbKF$RTF9벑U<9mM+V44946LQr4"ghT=]'񴝭H,t,#e6ʠdilS5MIBT=P?!OM7KݟM2ik꒐K4T-d(6'gZddeǈ_/MQW-7|;*w?>1HOխQРHe^]$Յi%`KvUYn+\.5@
e7j5lٓN֜ON]SbXݙQ-u(>pjyl<<c<vc vvV]}wDV0ۇJnQ-:-#;5XNeoz8#J/ˠZ
nE
jnV{Zessm=Puc<T )WDs򴞇+S{*گ<j'\|Z6J,\Zwj~MVJf}TDE0 "6`}P/b#xhƠ6(bNϠ/XpJhC08D18/^c`0ր(^g7%,ПƔ.T
AH/b0 +A.(4^),5wHѲ:n+9(QQ
D;Rh)
NH HOz{gG4AGgb]iy\]pw{Uk6K*㈛ G^Z>
q[F=nrxC@?@_HnF9>Yt.kY챎<֖;_/`ߦ=L3]ˑ#jW}Wbm<<<AC<׬	4lo'	6PcqͬR"yIkCR,UOs٭x{=κ8MsyS_qls=vn
mvU|ɟ,<F+iׁzѓ/!#h[N|M"N=DsU!TgKm<zPKMQ  
  PK    A             >   org/bouncycastle/asn1/isismtt/x509/DeclarationOfMajority.classV[WWc'A2HԈVEܤ\T(m&ap2S_V_|]mjQߗDswn̙o8h1
BT:?v^][^UҰt7%]AZĐ;f覗w{naJR۾0ZRټYOT(ZB8Fi8ALk
*ƌh&
k̫'f;Gf)uի\Q)ɋEJVAӼqH:k%[Ro}
W-b!(b4^4!}۵lNFLGd`	r o%gb.FN:"idXw99zmgs:kS+|ñ̤ͭ2JaquB6hmʄ
<^Di̪[7ҘqjkOjr65ٹg.&׏1S$=.ҾgTzC>AaءⰊWT8UvGUtx]1UPWѩ"cǢzVU]&Q;G6}`N|ula,Lo8BWs+[ԫ`5{S">6յ8]/tpn#AeX"vm{7+n:^mg;b8.2r8rVԕT=wql}-/4Cb8p^c" ư1@'d!aÐbc8nİ7n1L0L6<Ћ5
DY|
Lk763H3|`kȼKЃjCh.GWW4ywXsv"_7aahj~滫IQh-hhM Qt(Tt"Wd⫾,Rڿ͢܋;h]FGU+.O?nXNzP	zT** :ɼ$Fp+tUg@^@CS9Z/.#+4YFs	^<z/zk*\9T@>QB.
qkYF>@
bݤXNϩKd.ѵ&(ϐkJ]	'IJG-xye
$`1NQv80ǡX*'kyh+(+ja#
q0R-I PK    PK    A             6   org/bouncycastle/asn1/isismtt/x509/MonetaryLimit.classT[wU
t:RZ
jZ&IiV(
)&̄S<Z YL.]Z|ۗ'5(	Z8ᶄۼ]KܐpbȆJ擲dPѼ"#%wˎM`:t̔Eb֬\)oHlZ<NIJB%_")#eov8sSC
'mZ1WΓZ1r	Sm/^Y0ݔe1܊1ͼV-4%aQr嘓qF6)Mg{s0s5ԛ7=@pf;zswu'mw(mdBKKW-zUaVޢ<;ƄۨNtn3Ls!d9C#!cRIS2NxGƻ2exO2h.$}XoZ8ў :[I?.q;f/j.E:L okxyhӝ5^΋ꏾpmClΙЭ}rE|~Yv󈞝rDVngBQ*f1BFÐSP	\PqAE*FpEVT㪊a\U10tl0l2Ŗs!p>e 8=m&GC9×
pG"
?yܦ
7K?Iad~S'-`p[GUzc
dmSu!'П!a=y:Φj7rG4+xFj>Z53fٵsϫoXݭp%x2H6vbAj&>q
uԱjYpj2,ƌoxҬ2
	Z;/xTEx;*M];s`\~
JhDԏJ:SPK6    PK    A             8   org/bouncycastle/asn1/isismtt/x509/NamingAuthority.classVWW-D6lVZmְZtIlpnsmM9/~cs7^I8ߝ;3wfon_~p
эnPkYx._m*spirܛLǒiT%PL)Z7PR<5$TĐ2ernX$!/z/mN$
՜	ɦbuD694.gJ)Y5m¦ANj&PP4eRљuUSjj4GesT_MU؄yI5TlB\JZ1tZӔHSu{3j&뉀%M(HY1eTxS-w=VbG%mZ`@HR]bN/AG'M#}I#䔩)94*qyL6"]'i8Fu-U`FZ%+*#koy=ގIu?p~Y{:-:\Ǟ@(
E"/BttG[g`)9UjL|{4fNsNqOIO8ǣģG+?<<hWr7wEȽ<%a6HWeӦfE"j)ގB/l>/Jp]Ggh,X5(AUNKudu|YkGDBGB.qzjF(Lw',n$[E0 b=┈vlAEGHDΈi<`PD
D4aXesp%/02\xA`+dЁc\\a0`AR@7Tc̹AZ	h0%PkǫEANg?G~sؔcWGA

7"
ƛJZMtGpvGk 9Γ;Qf|DxΕ;Rgp)	7㪳؉
^ڹO<`UEȻpRdqՏس<i%b޲3{I}tg[$}8C9J|w1s<n-ૻ}UP:=|!턅\WD`;-h$T4`P'v?bt$@ݭZZXl~|قgJg
f^^:
RGj%$?}mMS9tExwfK-92ٕgy5K-Y|>ȐGΣiܴZQ9	DrW~ƍ|PK,xe  
  PK    A             :   org/bouncycastle/asn1/isismtt/x509/ProcurationSyntax.classVSW-6lVAP)>j|
1DAPH
cIָlpwCP~[t~2/|?S{nS{9>&o {7ȡiM9|av<ʡ.$ǽr%1kWf/ƵWO

(c8ÊN>Y"%Sequ2v&fC谦T+$ʙA%fq?LqQ:uC`R"	ANrXͶT#ޣfRw
+g.FRZ)KeKٕ4MRtfqiJBּIۇWսyī9z"g'h31SW5\,'PJA
RvPCvxtea{HlZM}_-ҽC%Fk\I_oql.z(˵d[ql$;bvQ;J<WqvE~w,v0N5UsȲ	XiRdB V#`j[SNל]6͔bDC5XJf5ZV2Dc3yl屍v;x䱋n><$~M<<Υ}CSKBp_q4,5v.]~{>u\/gM.eo;kȹYzYaK{Vdylbe^x(%ag#K s4k/@ޗm_,_҅poĆKXK?vdϲH+=@[Jn@$F|(>GqJ^<.b"dč
PvOXNy7!⌈uwZ]yF.0,#1|B1gDa@^upEAhAedqLzIF^ЂKXZ`d!^І	8xՃddFO&5*bɱ]p/T\(c]R9*JkpNI] Ehnh2tnP47kxGJ4^]oedwD+PqՒKQ2xߟGakؚo#{Yt0'݁4>	(FH9(\waLc|81k8E]
h4|9qcrq`e}|~ixx26h]C#็e@;N.ZXe$?*5QGH㶝 SE%T<5̪էBSYq_ˉsjDoTV|F֑4G+3x1ME]2+O3<XXgQ+O氌wDԟgS-5~6oPK,    PK    A             7   org/bouncycastle/asn1/isismtt/x509/ProfessionInfo.classW	x-kYLh1We0>vSPLI
mȒhr޴u#-I!.	p}#h][+X>7yo潕/^{q u7SKdT,2f˘#cy2n@WFjeX,VV.oOrՒfQbXg`
.3p+u
3:"V`jk0}vRz	D#S++JIVƵ*kVWB.5ƪJ)z|]	'2RHFƈH=+$+ƳEՈD؁iX7jGcS.4]5A2h~5F+FĢ9/)쉆ýZ@y*59(Ny?$1vx[[*^^5*}%Uj7Ek	Ahݚ[~o&-F}:y}(&vDJ_GURF'/zcX
h
	I4kSziTb(Rci>7)㦅ͱ8It۪|T Ҷ'Ozs3fF۔P%Wԣ7EcjsX!
ZSk^]THRZ4:$QTYZ8"rR(	дc~Τyo@
P$HRnjxՆ~-4:`u-oCDyADݫ[G!07}C5*]a]$Pb-*x`ϐ9Q9mۭNFX!58y
&%MkovZDzi΅l[j~
VvƿiꭡX+-ףVa{!GM2Kx$tH!aHxIP$tIHJP%tKI葠I%6	a	"hC%{d2OtY`9Zu2Kc[:e"mYLߡ˰);I?hd0-1}-6f&.Pg,{BWLAd
Dz3nHE)V:[-SwԤSϪuTuY꓇Yz=Jn *~SeNdY4t1v3n"&;[umS݃RɃ:zeV0dXŰa
Zu60ldhbhfoo`7C'0̓8=؎
oV݃6`C?`x7]l/ǻY2ClG=؄1`8'>|</>9fxQCg2<0ys3<pe7nǷx=v<M0'nW]lrWOݸ?s0s7+eGn܇0Ѝ}7mnGn<_N\dZi1TNmmV`6-tTpШ{k,Βk-ޒlRK.2K[Β͖lKnJK0d7!ے膤>$F>Sf; w I@0uȐ(;9øcJ h4Cx	#<J($5H<E\$D^(l2A<@[@Syg_]N-&QzW~|5gx4SН6]hY\9Isx ŬqӸt2O	̵Rʩ)
!LFcmK=';<gXs>H8&5X/N	ZP<k,?>cO'u%\V_5ou,SkFPdk_ȣ1od|@^	KxDLV*dh;!{WGPV=;\<%UMgI2^1FPJv5$Le2M9!Q|r,l	N-^XӌO/e{Nx3>:Jv3-8[sטO[UꙇsDQ3g!*fPxV+ZsI,(!3ؕq s
eTDvOKne,'Ӡsv g0v5ua1I?;ilmߜtb餋mtαpҹ6'ѿsy6NzllmFAb)PKX  &  PK    A             4   org/bouncycastle/asn1/isismtt/x509/Restriction.classJ@IlkGAVhM$EŷVD7.|(L͢B9sfsϯW `H䧎W'*YrՖ*9.Cnn({c~PEsnE^ulcex^[⿘vMn
J/o)_TM#FsicۧJJ<zՋOŀ~
&l2f$Gl֛rи}`zA&0ZY:[`ˀn>ztա!j-(툋CQ,'A蔥@>k2`~yb ~hCV)&dE"BOvhb6>:kXUIh
{T2-"*wE.?bGoPK*氥  {  PK
      A                org/bouncycastle/asn1/iso/PK    A             7   org/bouncycastle/asn1/iso/ISOIECObjectIdentifiers.classKo@4%WgZyTbH*{cGc"@B*Pw3/ 4(qq9r\Xΐm0m2l˶sڷFèfh*6a"j1}/Ȟ3tc/d4t(Haʰ(9RxN8K1`([UwTrUǞ2Z8s߻fƁy?a;Os,M7m;Ld/_nYbv}wշ(~FIp[f9tjGoˤgtKW2aJ

/cGaMxL!<)ad=L~u긚RMucS]VuPAQ3u ^i}F	+wkvlAYS74*9]j[PK[  7  PK
      A                org/bouncycastle/asn1/kisa/PK    A             6   org/bouncycastle/asn1/kisa/KISAObjectIdentifiers.classQKK@6Uk_ZߏK+tKŃUPzT<4uۚ&*, (Q*Ճ{351qATndZUkV+TM̯hAa(%:@ٱ{cAl[0.3-7p]ǼX>A?T&ݱ,gymq`?hkg?V\
<J9v\/dWTNN
}"K-ƑNu1L>Xq"hm|.7SH¸	cN Ea Z;nwD5((:H|sJ2?.""wyH$5zYPKNUf  L  PK
      A                 org/bouncycastle/asn1/microsoft/PK    A             @   org/bouncycastle/asn1/microsoft/MicrosoftObjectIdentifiers.classNAXn
V
Svڂ"L@?MYvمc)& <av)j M;sove9#6n۸c㮍QLy0ʝpaVsZթqɪmm5*PCv:Zء8/9^̐;Rp{V+OɈ07E[HUPxW|61S#-)nw|iiytsCPf1]gOD/]]Wx'X+\xP}Iߍ,ܷC\a(7>NU]cO(LLLHIa6rxy$H ),`$/ʹ4=e&Le
^J$ԧS/>z1q3p3a>"zbC}Gn}C.a&Ap8a6ANh%X%J՗(. PKwĿ  ?  PK
      A                org/bouncycastle/asn1/misc/PK    A             3   org/bouncycastle/asn1/misc/CAST5CBCParameters.classNQKEPQTGv+(ZDҋ*(jYNB5J$1xeVhn3͜=ٯ>~0@4`4bgэ΃ฎ\$.\A d!nYZM:͞ez涰eR*-,+v\n+"ڲ)s)ysTq}*ˢ0;m&sO)iwU0a)99nAhs.'^U_j5NY?3N6l:^<kWHy+)Iϳ)#K,usv	T\Tѧ⒊*U\QqU_6`SDFX8ڥ-k(hy'[?1ry?A\o>mYfrf%Z> MsByŸ(::Ѧ<
iхݘ$b] 憆L!aj6w5cZf5g46ҥ-9i;+5>GF/)?$l W4ψEqHcDkHV*
-ꏴ
Sh@Ĩ!ac8?B@>{h1Jd~j<p'x)|O5?mWm@bu4w{5\oajc5<wPK>  y  PK    A             +   org/bouncycastle/asn1/misc/IDEACBCPar.classTOP6(t!{tRQPn%5Kq]H?7_1QF\b&lswsݾ~ra5:CDMmdˋ]Sxq޹_"Y*w6
ָZv{e[<61]W-ގkYfWlݬzdvŵY)ث2$ZcSm "mW0W_ؾWƕl	;jk۩Yz~y%L*q/w*zZ5ebJתζÝ][BLB%\0 ᒄӫjҰۀOCwf\`~Niņ@t\PW]SnYn.i0PЋ+`
$ ,Va:tS	]*& nđ1FZ&MadaF8nq[F:]WkSh2; 
QtqoХ!#@blgȒPM1ZS1M8#?ձ50VLQ>b=69'IN~-t F(i` eB?!	qʧt/[3?W#	&t?-13Nt40Tqg5
u,qt}àDOPKݑ\  D  PK    A             6   org/bouncycastle/asn1/misc/MiscObjectIdentifiers.class|STz@h,PDL3nF@FҤ$i'Cg٠{xoｇI|s'[;ADvJM]C.)%-#DF#
Ac])hRAyM4Q$AW	,h"/VAAՂj4[AaACНt{+>Az@.#.ff̕1xtfs8JZ\E?6'-eStJnYKXP5w[ah;9=f\t2=,%HPMWe
mڍ9èG=%ŭ<nnw豚Ȝt*Ag)5[R^95k6YG֬5̚ueͺm=[ґ-gK:%]ْYWɖϺϺ?v\cwnCYɻqCȋ5
BG
N -uR-s+)u񩁨ksao%K0y=çɎl؅O"XQo 7#k#Þ4r۝.`lNDc
pZEh,hpAu8:oV(^+&?MD**#ψ$b}#E#oKՕzɥr߆j	R]HW}@oGQi+AމOURU+z}6gk|5iq9qx.X"X(򘭵}u˼\궧ˆvVfVu̲ViqvZKڶA֦lÀ5dvfyv7$%s/T[go{ju8RN
/*gajeg,L%)[%i![LH="K>u8O.ϐvmlQ%Z	)̔:1a\.az%~oEyoU^Xh}C4J#̷VeMy)1uJ̳qqzݮ%.?h6m(1#0a)DF
.7ɢ8dف@q8-m合x0 +{&@ܘ^U&NxKh0/6ePݨKx(gMS'1/
:XMFMF86>#(ͥD,T-gd4V[\m
#l[qoͼ)5rY!#5sq}(,.h/RBx ;PҎ%|rH>Ʉw~6AHH|Zc}5/9>%Z/]TALE'O^5 	ɂX) ϊ/N*LPi*U
FP kM4CLA	^
ntj	
	 hFAM	MPy<~@Qeg~(k;Ɵ2?{{Z,KGGc2`98$X	Vk:`=<
<l6[6`;	v{> (p8<  NWW׀ׁ77w >>>>>>> Ak=iݴss@/7 }@?| E `00
. ...#K(2VNP\ W c+q@)0$*`20
4 p-0n nnnn@ 5 7t7ZctpͤB
qBXU~}+@gJPү~K_)DJW%JT@#JULR)]te(}UkJ_WEJ+}G)o*}[[J*ݭ۔PzHQǕRR
O)]tҍJ7(]tҵJVMJO*ݢt>t=J*ݯtJw*ݥcJWJW==HVҴD=.5q}~-ڎ|vb<;am.
v?l=<G?Pv(>;=;al=p-ځ<|mn<v6Wqgž9--6
{z<s6pnܢE`{ۅӰlv@}vͰskԎxf3ogߝz췰?6omѶ6aa/dP-_`7+*`??7Ff`w.x|h7Z3{s77n㼇}Wbk
臼7G<h?3
o9~R3=8x239Xh?`g<i?`fK֘8Xk}PKJc
	  3  PK    A             1   org/bouncycastle/asn1/misc/NetscapeCertType.classS[OA=C[,-7Azᢰ-"&HEih'bmOM(+&s9sfϯ̢GB b
Zk@wZ۹:z^P:(ɪʫ<CjUyetH@,\M^Ꮈ-YWݻ@9vQ5ZQ\2$]UEHFc^$]Q{1ChN'0rkeE4qi
J"Йj*PE%{IF#bAPƱ*O7"skM^8f-Q8C{=.l$+~Y>ًtZe-LY'8?eDK&"	t Z8km	v7`'Č4Ld0!kbwCSpۼ_r'hi%Z>MSQ&$Wv<"~=ǉE| oS!>B/ćD+R!HfR'XrǶs:-l]0Nmdb[W|]Gz:5Z:_溟!7d^qc'8<eu,|n,_PKTbtc  R  PK    A             6   org/bouncycastle/asn1/misc/NetscapeRevocationURL.classN@ R_MJ1&0!, ˤSBJ7%ӂ.Ź7߹scsA8'0L66o;ӲDhx 0;#jy;֤t1tTc=Cn?4hVۮ4O~ut=m%Kĭ@QSWj
ݜF[1?^I-fJ44ҐŒHX0JFb	2~aO&D'(Jݕ.A1_cDwLJlwhcIZBl|PK5=  $  PK    A             -   org/bouncycastle/asn1/misc/ScryptParams.classUWU$lR(`)Bi%"-X
J(j
-TlĪfY6,4`A>7_I8r?^࿤Gl Hȁc{g曙;sf_ k?^	.C1^,1^ye6ck*o}-2	
L(lVhӴdfՄQ@XR3y{^)kHfigH:h&Uۊje1YR6-5՞)!KyhQLS3M62VUP	$?@k]1To^{\(<wWDL#q
+dN/i=Dղ^@>)aK3˚bDblMgu~)LN,e
*y"JL&
O[j&,!{{;&J
\4/Jڤ:D5PfHBmdA}Y
32)d9޼s޼3w-vkmog*Gy>E\-⢈EqID"xIĀzf =xXO^!;PYv8QWN[mgrcLSECǢ'q;12NNZMj~;~NY8;zB"K"G^{66 !f	qS 	x$w>F	-%\$¸.LHk{]B;&%H80ͼ7$Ûo10ӄ(f2cc`>ûI%00|5>R c	5W6#T 7N 0@9>bxʤKu}>b\o*ڵrݵY!P]~/IG#rd/2{>c&!\>^3W
W\ºXncE܆.wy|0Mtw\xhȿ#onѲhR'%<_zi2Z(!]:Z"6g]%wI`
EdX_UZ	aO;xR^GS("}U.Ĵ{aJm@UnCQ&⡗L5]?aN6.cb>[ӬW5銹٨ø횟Nb8/lx7|>-"G5WJD.9Z+Zh2\g7MSEzfPKc  
  PK    A             6   org/bouncycastle/asn1/misc/VerisignCzagExtension.classN@ƿP+*R(1D/bL9x\Y[>^JC#=o27;;RI%Hqsbh>S3qG$BC&,raK>Ps@mNJ#>KPv\9#S0zf6:׵ɏ?l{q	23q+Pdd;q@7fVWDa\t;u
I$4a>$5aEB(X"Ec1$$ y2e1[=5k)R,@y``G /PK$*<  $  PK
      A                org/bouncycastle/asn1/mod/PK    A             4   org/bouncycastle/asn1/mod/ModObjectIdentifiers.classQ]KA=殶YԃE캕(Q$X=AO2:J(($¹g{plH!HV	roڮ]SvdW	cE3yBn|nLW	6'CPLMJ&xG;DUwx`GġܻHFCGuڗD.Y1=]z:5`#mOXi|-cú&3cIC15΅0@Yg*Vʫ 궥>Wn
cQ*$6F+OPKHG5    PK
      A                org/bouncycastle/asn1/mozilla/PK    A             9   org/bouncycastle/asn1/mozilla/PublicKeyAndChallenge.classT]O`~^6(+	'M!e)`H1PuD' L#e<o7;y{ssߟ L#c:MtBGͲ`0HYL:EO2vlݨ^6
I;TnYl(nhL?傚+Vm}W*eZNZQuB!HT5}@+o<dӲ4|6U.4zcVJ[&yestC(K$[5aK60w>0߶)Onj;jivA=g?}WK3ݬz1,θ
靯5\By)xc5B%Vzeǝb/\!S+BB %\	=+
LB'qЁnF!
7fJD"nbQE#zyzCeT6t1YGӷ^i|0H>"",o3@Я"NњcD7#<=|lmRjT
.0bFcZ0{gH)?G;@#NޮtaI8ubx<<(n~"WNcD6 К@/6*Ad PK_  k  PK    A             ?   org/bouncycastle/asn1/mozilla/SignedPublicKeyAndChallenge.classT]OA=j
JHOTv]]lD'M2im;ss9c?_X
C4}HB>frYk6ێ-azsWֶ9K@B%\֫κ
Bn2LU*u>yMzkU("dIV2Z0!%]iV|ǭVY-u_[c(V_©2h{;ܦ{?=T7U+w4hԠk`h3L*r 7vIp`dݠ|;[&<}٫ŅPf؛)YZ\=V.=P{Z]6^@1t.ᚁF
DpCn2L(39cYIqʘ:bFhF3ւ
}J-$&a,[R@g?)K(݀1'R1`@aBRoc,au$CH*VHBs!f͙cO@{7a:U>3fpnwNQ5?:
Ŏ5,qZ(PKO  $  PK
      A                org/bouncycastle/asn1/nsri/PK    A             6   org/bouncycastle/asn1/nsri/NSRIObjectIdentifiers.classwU^ ,VQSd2-V--4P([LNNb/Hq_˟_>9=';r}9]hfEK-StV(jQVQUd+)r*jSRQEW*Tԥ*E]h5QVѵSt,k^:`ѯE-vؑHihV4DЪqf7-,%Z<2h:tp]v9
h}f]_^eQ}׿,7dQO%\6_CMQ=%«]IZukffSW#悑yJK|v(Q0gGc̮sv])5nm3gzv.gQ0fGQ={`b
EMZE9O4*+JiעEιA6ܗN{efoѲ|1Noʹt-xo;~O9b<)Qj[HS翟i3E?v[`LX}z`ā&` l6`;	$]$Hi d! 
@!nCt;pp'p  ^ ^^^^^^^ ޚK6Lͧj»քgArT2/Hn\/]r䠤+M2+LI$3}[%Ӓ$wIHK\'EғK%7J&$9WHS_LS<0Mネu)Y)?IECX;I:.]g^!B/~uz	l/~g6~U?C~4:z3"֯mdz!C= L֣&Og\O~=ǃ PKp,Y  r	  PK
      A                org/bouncycastle/asn1/ntt/PK    A             4   org/bouncycastle/asn1/ntt/NTTObjectIdentifiers.classmKPMiV>Vmn3I zЄ^ɜK&k
 }ޫI8w}}X '/`N@@<+eQՂ"*lVż,neNStS:U)t˴MSBl5tΰ,Sӆ	"#çv?-(t8UNQ6DQ,nKW͎;n-5k}2$oy""-v[öHZm4bɋe/V2S$%˿Zuz.@IIII"}XM&[L0#=EexJ{)Y+CC=Ɲ~],K=C.?	7bC.)ng9'9{8_x~ PK*7s    PK
      A                org/bouncycastle/asn1/oiw/PK    A             0   org/bouncycastle/asn1/oiw/ElGamalParameter.classkOAi+n[mܔv,Uc5XCҏCŽ`;E)(UI~?xf[.u=9gf/_,C8dk{+qr^]r"t=YoI-=ɝa;|[
i;Vkƥ{od$ä_Z[~ët^zPzRXDo]To$^5DPx0fwƷ_[Eg5

c	U6jt!!Яἆ_\fHgsk9ܫZhzhЮ(ݿs>~o+:n%  v-XQK
]*6r?A*wV3il !IeB`tbD
/èƕ0p1d0̌fH㊎䔙1NE\푿Mw$y:}z$iCRPO8}`4{-y`l` UηA<yHڑ-Rd3Jǵus3n2"ħuꨗHȏߐyyL2epɚD d$(0ɐ&2DX؇֠J̟".`C*"[XjPKY    PK    A             4   org/bouncycastle/asn1/oiw/OIWObjectIdentifiers.classnPƟ#sn*	&0$lcu)Ъex^&^er~=9mҟ )k%f$nHJIܔ%q[".J$&
- (L~F:rp
vR@/rl¥i[^RUWHz!4hiǶ<(M[ξ5`n3;'gVv9zU,0{Yjnַ{.lImLw,\C/7_=m7=ܳ?|wjE )>Ss/m}G1CaHX",V5}:!E}`2,!G 	&aP"X׶"0cY$u*U.\PrMʔUL<h]#zWԿfgKqQ26`bec_e?`W?k7PK`"    PK
      A             "   org/bouncycastle/asn1/rosstandart/PK    A             D   org/bouncycastle/asn1/rosstandart/RosstandartObjectIdentifiers.classS@ʣCy(*ݒ4-"(iJeFgtRsm39{?|#">p:<fN8pjƩEN8up
:9uqƨwSU)A-UiQ
4b-,ka|d
%"ʩj~j@
F+c#>XM0?4	ǰ~J^R5Ji4Lcǚκ֔!]Qu5w(j?:h[*;KKf.Kf	M)u$qŏyL#J0/[(^8,ml"úk=HYi-++)f6lF(cBbLwٗuҡDvN'
˘!õҼ̦na'뺞a-]Fu 
Dn3+1F=sYN,?멛f~` @@D(0 ƁIݩtt`Xπe9XV+u-M@gTϦj/Oj|׆;:,uD1RU1R{J:(5(5$uH"5,U/ujuPGϯ4Th7GM?5U

[%;aZa]S¾
raw`5rdoKDര9Z4l> (&QFml|[ٳ¦>K_PK:    PK
      A                org/bouncycastle/asn1/smime/PK    A             1   org/bouncycastle/asn1/smime/SMIMEAttributes.classmJ0ƿl((^9-i̮-m&|(1ws9wgW=e"+H\L	:2
6hkY2/\pEK
eK
ʊO7^|H$JNW\ꏇǁRJhiLce,4?faBÂEpם\u#M#6\84ҲHh}AXu5)qZQ:kpGPK?4    PK    A             3   org/bouncycastle/asn1/smime/SMIMECapabilities.classUiwe~ۤӁ*e6I,b4b
-HZDqL$d&@}_p~DS|s	 ˽I79~s}#n|˅j(om&|]=]]>Oo)@y<nO6)馟$=~Q]34뀀"O$%jXl_ǿ`{zFLFL@]T1F֐MeVP[Q%Lhfi):VOaE
Zh(U4UsYK+:-^We=j.Iē	n٣+&kH
Q5Lj-wF1G)ՙN/J.ƱgbRPk*qѶOXոR4W
]IKK4R/:WJiF|015%ю-MʔR'c"AChuK"N$F4G^4|@dW/J8FIٶ:9Bg*n_96|EY:WfiyGÑ˛3W]ޣtĜ֦Uod$<ZzۯOϤ.R'TDjlHh.uDJUbV'y4MS<Me%
E1e$.-	{-2mq]"ZEph!#+SO_Dn=vO ֶyxzK酽/;^7im
<dD1eB=+dWhwq]DU:?h֒%R᎕FvTkFxtd]R̒'Cakj60lcΰa'C/CC?QJ[Q%c3FekpTƍC>тp\&wr.'el=ոq3Z5¸aaa0N3Ǡ0L0Db*Y)a!!%	"%a IIds kCB(6d$ă$gxcVE0o՚DFq~U4aJi5زߑuuZGtd#>[񉐬D5\!+
 +$/3AvA:y|p`|x"wo:iy=7~"$BEMEf脝62{ۿ{
\"F%Sop9G0Hm
-f0@g{+:wg1}Q?:wAD@e݋1u$yhUQ$jVPnNdTdDgteXehfHah|Y<KY<ë_PKinYL  L  PK    A             <   org/bouncycastle/asn1/smime/SMIMECapabilitiesAttribute.class]KPƟSɹ޳LЬB$^'txǪ>@*:!B<{g_ .!^r+>hӳ;{4ݳuɞ{6A*GfB	iNy]eZ^WǰGPO;\pMf[KT'
	)7m:nt؈P,PD)(H_~k<J]b%l6Ǖr-lnvh|&(%\CXICXU!;"u1,aK]ql+PTHű2XA)ס:l<'O^7D=ο!=@j^PKSxyS    PK    A             1   org/bouncycastle/asn1/smime/SMIMECapability.classmWUKB7$ Z"!@$5M,	/%.$twA K1h}~&:lRhoܹoH.0 Vܒ
+lB,$nJ-iE4.-7PfӢ"vI7i	~UN9O_r<"0	sdt:8)2NZ%CYQ6]h}
t'}&2@Ov-Ξ9)G y%-|#-tSwo'ġY+Ţ^ŔU8(馓Q+Q6%LB||`jGԵDySԷ%a|mj	(yzku(qHM8_fƻ2ٍ皹ӰnX}nHe_jhdKG_9CK-(z>#A'jQL[D{H^rgz'㊌e#]1.cBU$Lf.н_<?ycfaTx,I$mv7*v@>"6/RTCHޤVzv Dd2B!0c*M(-)F1
O>xAA]d<0VX}2c}~%)Fadˌ3!cݏ(6c~>e|GI]t9OWoPu**a,XZ$F)MvkG\;ڀkl>gRʐ`2RG9zFO3B,J8$ k蓑iahB=,jd7e|
3$FE"yL5̑?Ws@47WGN#伆%70YLtwیfruV&! D.Z}ܩoJHM4 ܩbojЫbJ
**a\
;U|YVW5[}PK4    PK    A             7   org/bouncycastle/asn1/smime/SMIMECapabilityVector.classmKPr_,יfa~0 #q;¶? ЏYl}9l_ vAPSAHLtSj9zC+ftwaASFvZbCUbYNNiaeI&oA+5vIN,UYo0VbwA;Ӹ6V*{O:v$H$%	Ǿ<+z[MsYyiN_{Z`c
 B+
	`:feD0'cGdb^Fq!cCH^xsWq.6)H"x&dg&崋7,wȩ!
̶&FG+.XfZ^Km*h1w>@PKc@    PK    A             G   org/bouncycastle/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.class[KAjdE`,]RZ>eBwewgՍGE-,<Ϸo 8b]pK4٦;ޥCqmsd葪{vI4zK֝LNsfSB
b(.>5ҵi'2͊(+(*)Pn׬jwENn!K7zT9}d(0	M&S[!Uz9s_;ZdI~%f`o3
`#B:U[VD;I$D{+"#%(Æ\YyI2$ߙ+''Hcd8|JD)Jt^PK<)n  [  PK
      A                org/bouncycastle/asn1/tsp/PK    A             (   org/bouncycastle/asn1/tsp/Accuracy.classUSU=d%`#m%BMB@V#E@	b?Y3[7lgg|7utu
Ȍ/<8ѿD1{sϽ0	B8rqAxdXsQf4e
dC]Y2Pxblljj*rhFb訅U)%y.y\jfq>22nPj>]НUvTK͹J}.ƚ_kNҡ2euͶQ26Ca9˪YgoTՄZD4j&KJQ[Evy"vX+v[Sˎ'Բ5Hf3fUS_&)6m|=7e9zjϩ퉔d+kh{PjmD]]li9\2HjZjr4ĲUul.kd
X@x$Ḅ$J8%ᴄ!	!	0MpuYdXi~t;h4ȫ*ԑcG[<p'ɭ=k2;ﮝ<xW&O4M=xhi
q%	LpYC`Ë$x8x91+s
9L1+^0ޔ,e(xCZFWe0-s2H;2HT]zg<==3V):ٜo RsޞpA(=s?|PA#HZR]wzmr=5+<b?`8bPEwP}s]U\ŉoGaDĶ0ķ	a>N#a\R8ՔnRYse
5I.Fw):l_qggHʏTZp
Q}Ǘ'wl`fLO2=.sx.vg?2#>\3b$`x{V!?̿G6Ip߀OyMe;)M\IDWAĝxFL#=tN{{m4_eQn#˫Xt kȣr*>hH"PKSL  	  PK    A             0   org/bouncycastle/asn1/tsp/ArchiveTimeStamp.classX[~e90%JJb.j`4F
[*:̮44i6ҤiiFc/MOOR}3l'O;{9WmըjtKYrDBek۱=jn.	Xh,1iDEԴBj2!5ej|>a4l(iɤfPGVM3MZZB(FQ0s~5Kt┮㉔?Ǵ)H7	͟6Չ:ҽhNOqFifO0ɢr&&z6NeI5X3V,<N3&gkxEtZ3FFi,M$S:fZ즑GS36!-:ѢHɰ$N
wMöGfʮգ#p߭gԸjo$$wj2b&R~	NgP\5bx\Tlr<lDKz 3 rD<75L	dL(Ǣx6vn%X\ј;vq;A`C	0ȦJ~q
SjV7(1-H8wPΘ3,8.2uU&wXrǤ]kzТJ\<I)%|Ku"'3Z^]עK\#lU}w^>u.\U9;],:'tN7XF̟vR- l(p@@@@ (.!I $Y`V+p褷(V]v/_Lumt-MbSt
im_~ItCk,8S%k+ʆV
]ZMPݴ"(:^)l?rlt%h;m4Y]e)Q^F~.nC
p[]q%Xٔ|]%&<2.#:B;$d	=fygڹ,CN&vi0շi!}4JTn]u)2KeYY_*xFdх
jqL.|X*|D*xU
 j;@CUЌ15Bb\)X
'܁S
ދ	TЈl%NY,&Ya0,α8GY|>0>CfX|VF!<)_dϫ},+ >c~<2_1/8eƗX|2M?7X|ŔIߖ1e|YP^{Q>ڍPa@PIQfAQ[K@߭ox
\G"#<G~?#B?,J}x̱ /@Pj ܇xH\9@
/9dY\⥎,``>)b(Qhť+YZME>
#̗Eq5Ż3xyp+^DzFf+39grWkҀ4(uVz6x-x4`:/bj:E4_ETUt&zpʙ{r
ixe,Wus9A<1ڜ<n,qna
*, Ek}uRm+ڛ6i'@r4^jfȍof'-fYEq
ոJ!{)߾g0w]7]?
k'~<:>9ՓeVK`&y~d϶a{`8b
<w<lv-;LgںDF=4>`3O6Ɔ/TPt6Jg&?Na}inpCwc7*J5z<<ï2KJe秳˴=c2uI|=V-klPK5ٖ  B  PK    A             5   org/bouncycastle/asn1/tsp/ArchiveTimeStampChain.classU]SP=F`EAAZ,ňߊ Qg
mmZQ>+(E}gwPPi/ݜ={w&2)UbqO͖e=rm:WROSz^z5׆
YqNS_@ˌa, G-Y)>=g![ P14s#1Ş9l3%R(趙H2.M q!CI+KsM4I8j
'&5W4Q(Y&-B%씰KBV	kL|}e4%6=[3Z+n_u=z#^Cmw5Ժr4$[Naމcf#}cMMmjioGk6fy+~]Dh)vҹVm:m蒱Be'ch2wP!1A0ن(zIsq<1f80@'21`.(?8p^\^&:jḞ]D^&K5<ם,SlU?":~Fh	)u#e͋yG*GUfau	S2k	#Q:Zz;.5ET}L]BT|59/+Aք"-⫕hhлYA+|":$ji pyio0H>`ߘ?_~=0;L&{īoDvۊ*NI=2w	6#$OE<yGZτaAq6UPKepB    PK    A             8   org/bouncycastle/asn1/tsp/ArchiveTimeStampSequence.classURQ=a0"o@@F
 (/
8)L&1Pꚟ`ŒXtJ?*žPH
pӷosOwۙ|a@'r1186E=}:ǓKB<E^FU$9Kz*!
$#2Ɣ]%eUHr"hT'RD:+1-ZDM-(}@\S*1EcyUҺZ:$e]kD)/twr_3a-_'9xcД2<O+F'Ï17:4g%N'՘G'rxTQţCsA8!}7ڒ>4ssa@Od#ql۩h"8f!O}uK֕W[H#>B'ϑ!y2	(Ap +l.I@bWqf|JL[	hw.f8
<`39P̄qwtM
+PFFMȉY6h$#8XXZ
"S<u?sy6Fpa:va2D(f5bh5<Q$o6laps,C}5,{PKv̄V,AbԤ
:7#E?u
^w`w57pʟYp{B:'(FaVin6zN=^)glO|>@U*[RoAw=ҁ.>.*MZfr$;cPKGN4N  H  PK    A             +   org/bouncycastle/asn1/tsp/CryptoInfos.classOOAƟiK.[kJAݢkS5!HL*ݮ"bwKg'^kHoW0Qyg[4)̟ߟ c/'2>a1-ӽ0,kj.[9jR-G]tݒ/FApp}4XYQ7sRua=3^
ud3E-'S.v];c=c"<<㒹e!   $@'@fj%&r&с\t79۝q_4'	=e9h8m솶UTiV:e_ӊE0|ڥSi-:}-7V-z0(?|z1{\ `(K\BaBDS"a4KBD?fD@咤ob.7ι⡶/!(3>zA_MSU"*7D[WjZ|U<[1rQRkHpà)6QⲒCo
f[S}'ք1@6||@7<xdOp=</agO\4J-߈^PK.)*_    PK    A             .   org/bouncycastle/asn1/tsp/EncryptionInfo.classURP]Rj"*JT+ArӢ3c&Z*OhȌ(u4R̬k_N|#E_ @e[8-bQy.iJѳ;k?rWR`zLnSz
Ard풧F_~,
/	>֟nl MqSi{/
+	lrkd*+p\3mcK^A=Fk9Qyf=XopkrN>+K-NlR)^sD"bY\YZG_m&J~C0[6<ǽP*ة`
(86uOTחrL`	A}_rhc!swO\_2[NZke&Y5HS=5bh|fod4l3Z"qfzu3hYvj2cۜmJlU`YSi| EmS/&y{*a{Ѧ"n$x5*v(oO6ɫ!QN2t"QQ|pQd!\g.2\ecQp^ם<SJC$}v<x2 1W.j_QGtJ~v{ ڵ5̯w}dOc'k_U+b/Q*VG#b©@/T5lj>Uq3UA
ѳKU\`{LU1IK*[RaZۍ2b?MA\99LZ^JbR0D31cqsBY
ܝ8=˽wdu-Ӫ1PKm-  |  PK    A             .   org/bouncycastle/asn1/tsp/EvidenceRecord.classXwx%Rc
H%[`nl 1=C>Ot6%t/A&uۤ3,t4tIG{%(}ٖE<<o{IzOX;1׉띘DNΉ[h`Tf^`nP!ڿ__u_-1thPњ6iaUmj(׻[hm"fX<CGBJ%WDO1ԝZn(=M :H,]t8ؔpX<©ZTGՉPBkWeGzX?p}X	c(ںEDZIVQ]!ZCK'SL%!'mo*	td[&&Ivuf"ҪEV! #w*knMQNb"t(^XCEUwOP<Hҧ	X/iFՈmGzYajQ	v#鑛{hoRz
-hI,%tknuc$1ݚ ua#`RDޅrM@,:(x1vYvfP#;;O:WcLvcv&vD
Ń-Mmn3YW7fx<Rf/qUYhsf{5M\nD3=d\#Ʃ׺5V4bNW?w.w1a(x<w
OgP\nEZD"ֈX+VDu"n^D
"6$AkDVD\Bwye@+sU %[C,tӛsr<O)&NMJ=w̞..?OXW.ƴMvaY܈& gw+<>Lʆm
rorTgKgOXk9(-ħfMAnѽJdQpM䐪rtKLM݌gsޔdFZsk櫽a,5ͯD6oݫONj{zeN{{3aS*toı\&N9ZJ)\d$_Nf}is-VAF)'cB2
PI<e0gX2j]2n&dpPQ{%10͐ze,E171Y
x[彷<{ώ2N>A1|#ᄄ|sgàL؁O2< 
bgxDB;Sw]gx1	E/1HJv+_ex\<0DJ]/3daxçX;͡nSzv?
w'
R֩hV`TH`T
HA".F3`:E<掠3Ƴ)yP$"@kjxa>i.[6/Q,A"~A[PJC8=S4VGoUG#DM':UxЏ
]0^w.g\N=QdP8pq,"2_n)<7󑣓<Y
᜷rgwy+N=""!bWYPv"t_$
A3eNi!`~nT#`U
/[&jo]OuX5Z_
`uj8A!LJ
i\9U/GlȦJѷK(O~N
:%0~"%v&
n,hX	-z~ﲟEGHg֚! <^6?o"<J45M9Ua?H⛴؎ڄ+wy}i3M?03MY\"mP"\
XRp+.R>h%^Ο>[m}'WΛ/- 3^M˘#E4qR*94?3hB"s+YA^$񛖪Q{&_jt)Sea2ҬDukw˴|e	6ڣ2m-/K
Uғt-)g!N4)<GzA(ƫ~i΍J|i/X܄E(pR%FpDvK
Rc80PK]h    PK    A             .   org/bouncycastle/asn1/tsp/MessageImprint.classT[SF6(r40iIH NHM-taxb#I?[2`$Kڞ%
|;9

|Ӊh-3ѵY}mV.r;L춽=VY tfho,(B"p5?od`1EU0tɕ-
=XgY<X^5tug6n31׃ooV$<nZ?aVW'#m Rʊ]ߡ|q+)#*d̴Q	WO>6;Xָ۠\2gVڦ֏D"4|7<,˄EϤ[C
	WЧCgSp^|VGg"﩮F[I=lX'+z;xp:qk-92يeL&:$_xOPiעcח:eafN]'Sl^tj
hPЍuhB^t
`T\P)͸4׺Puinmঊ"nI3bTbS*qW;*FO1M~A侮",%k;yLS"B C
#dW_,̀/~A'J;tj!C9XbY&&ʻW.F9ϿKTCa} dRO"%,M2@)4$FYaǥ1K4ʒ:IgHy>;]%F)D_KīSeR1*cH&jPKʷ;  3  PK    A             /   org/bouncycastle/asn1/tsp/PartialHashtree.classUmSU~6tò1Vj(/6$Hm+H%DS|$۰͆B}'K?pF*#q
gG0*R^_ν瞝7 \7~aN8 omr@z#<LVB+K\̑^ NrajƗMCА5{\S-uht
m8-WAi;d)](S]ͩ5kډR!k|KY2l7)fŔItuN58:8X\gF>^̶gX<|ÇjLCmPڶ4#?Pj	ht"%[CYͨ7EzORm]OvY3Ǧt	R{c]? s;!ǥ˹Aׇnպ/l>mB|Yt>#6HoYl[*h혥i@m>R2f
6]vF*q%{4μHxIBPi	-Z%pNy	I !"MBTBGF:6/v@n/,?ʉW~ @9CuI9EyAy͎~T9٭Ahzg1	-(@TSč_1
Wp
NbPEn	C
^
^;ww{
N`T)
LGDdetaet@d$0ͧ|ƍ*GLɸ	n>Uv=DA3G_n ml$&P$#뉴NG $W!d&Uaթp;VHCʘD,TF	zEt3븒@;&1+e\L??~~j5@h$нI	7Ck 	1./ TaSi+ۨ@OCj_Go&|i
Kʘ{ {_NESuH]E6DŽV.?=$+UF!E.^Ei봆B&J;~ &Z@/&j/,6_
p:po>ʣ?ĕZaK»rn٣՞|PKS'k  >	  PK    A             '   org/bouncycastle/asn1/tsp/TSTInfo.classW_g~
bZDŰѪDRbP[$k]L6xUٛŶZz/~䯭M]C3;<33?7 k	Jj /ǷE1w~D7UT	J@&bj9ՁMI;njz<bqbX{"f6N!u
O"}Tj@$-WZ Mڝ:
̞{kA3n{4beD#a=wӺLi1;F4(w~vZ"CjÈiQ_9|q$KЦՇAU?ja5'z<
IR5%"o$Hߪ[L=gLbPG.1&Ԉ}FBq3ոݹ0JQk9z}Qm?ψr=h4rRmr;ZOẔ&@%GF8^3[;Ь8a--&pL吙Oϙ4srcjOwO@?h8v|Úˡ /N[*ǧ]
u"32ȣg,ӵ7Ɣw,@w_/D,q"VRODEDU"EFZwX~y*΅5cJL)Vf!ї;ЧhmzÉҁ<14}!$YvKiy/{ːeI͛6Fd˧5}NBV|yW~QZ'DJLjW^a\0q{-1γWsƈr%f
y#={wA5.3ї}/̞=9;gcZ62XuƘlk̦fS>m~ķ:g
:mGܢf21[|:MIeU.϶wɘv萱aFt(^U!nwbE(!PƭX XRt؀VQc>Q^~TdkC0(C?0P6&Caq'I؂ex5	$ËKhS/I؎7$oJɾxKB^`x[B3ЂW$e	xW-_{2lOf#D56u?T6*N
[r]z:eIj%}N۩Cv,'^%t~DmI(W6\E8z1bdX&_=
E]#-VDRRFMPVN(ߦpnBIpa*-9|ipp~ex;;@s+hzFp+ju>k
(^gc)\
:!Tcs8y>|4~Bmt]I+c1CXN++Cʎ$xrfzjPv_(MDH
hSD,_Ò9R5_tO2(ZY5sͼ.RSŔ)[BVtVM܂+Ir}qv8m`f<|.c^3x2c.G_y.a>1/}9̧2r}&cBa1W |1c^G+(&q4Υ~|^,ϥ兴Li|֫(c,Fi6
gҼ3z*׍S(~/f=hwUF_hѰ|B_PKhK    PK    A             ,   org/bouncycastle/asn1/tsp/TimeStampReq.classVSW-ٰfJ`A~(XD6sIָ
a?KgF;;0e{S{f)&10s{͟އQp$p|
jfq^!JqQRP.$Tٚ+,u.ITM{\HTQmEsj_,)sȎ떭8ZȺZVٜ6R09$(u#%I%=fORMɥQ&<+cLFM+a3Ϫ:%TweՋgwf:6cBRS,?6<102B#9#zH)3u7̚⺭UKs2pE
NجiwuɛVSV
WV.ǨZVli*g>w:VނݡTme5[m)ZITȲ|ΛatZ	hpPB:t
8$%]ph]5X
zj*%'*mZs_xt1+;w6rτMӃl+K0j70Z.u{[|Vzk*Tp
=0kKlO՘{"RtWU};4=ÝTaM99`kEy0@*{wp2nTZ;Qz,u^#2%3$0(^9	0$yx$K/52$4e6;/a/.Hq0Kh(\cpc o0b&$L8x1)"D~+(n8w$̊m'pCI"N!#RPAZidwH7&9{UMw:Od#Qr:	茤aTmC31,oy	y
2Lh+Fhe\U|z3$GWqw
`+V`~m?A4#]`yo_5|s	?h}.-itJn	%ZK3PNp.hhvx['4ɭ^YuIi( -=)P
8XoxI)jAWki}_[/nP_Os&}ǩ3SX^G_B,I+GIPTr+OW)N;nYte׽W*;W*͒s%w3]w¯Зt4ݍ*DK#xu@4h#Mp{4.6Z4L7`Y4s+lXbah'
q"-AD@l}PK9B9O  
  PK    A             -   org/bouncycastle/asn1/tsp/TimeStampResp.classT]S@=ki|hIS hj)6bMj2SuF(ʌ/<n[fݳ'?߾Z)Ƿ^9aUt;	v433^S$hN4^6:ܲ`xF&_ѽmij12j,d!ѩBV~]]
fSJj9&_M͔2
`ܱ>!ICA/l/aFcRٜ2Qq"aݐLTVp.Skf.v5i6lFp-]_@6:t
HΟQGtSB.94_݌f{Xtec;rLʡ(/dsK<p˜aWFօNAכ7%km1Lci6#Z_xͼ:#'7<NW"pMB7$x$G	%ЄvA!C<"zp"zqKD&yя{"x(1KcVnV* z@6)6Gfm(?,*#ax	%b%)U7y=(W<cCl?eF{:a'_# (O M|K
}>01*UlHAoIH:`:z8}	}{GjS	aγ?QJѿ.ɑ%-`1 PK|de    PK
      A                org/bouncycastle/oer/PK    A             %   org/bouncycastle/oer/BitBuilder.classU]Se~}7KiB*lT!j
RM$!ɄMxQx!0Lnj#0^{QM63=}=p1 '` F^V&#p4L'Qah15P<AF:&B4-IZ3f:n%(uJWєi(!Y93j*NJ2m-)q'3@pnZLZ@c9[ټ`LcMfSF:FnQ?ºe7V?Җ7L.dh!j[)ӟ1saM䓩𾔑)85b3׮'*d<A7mWN.iQm{?`c	)=m٥4H(dxdqJƛ2d4hprZCgp$pWU_)qF}Wk坣Jԝ*3T*ZQ
Sqp㼊QA9' 8xGEvTхK*
kчZc07tLprÇq7z1㦼+8|CqpuI>vÏI]qa.XFY#2") "y5RBv<+B:S.>Ep"6m/jJ̵gV^Sf'.>]ڲ~xޣ6N~QHV2'(qnpѩ2@AY_+
26{lLtTgK_|*ߐ1adi/9D+sZ#zXM-q2Klj|Tަs^0{[Ϟ_7:sw8:_͡io#J
9x<M,qDmBwjKpon^oI<5ϗZ4NX~N#*|_.nx5%Q 9DOp
x+"|UR@R*(쐎KF>_4}*^_
&(ՕU)I9mȞ)IS6
KZ{(ҴPX֔PXCa%,3JDPKNSx  '  PK    A             2   org/bouncycastle/oer/DeferredElementSupplier.classKK@4:Z\;Ņ/EEp&cƤL\(B7x.,|9\& Pf0*}/Ez.h
ĉrmvаRK{G*<d
UêI\8v
VTJ<A4'L[Vnm74ҎFN.͑07~K4Oڶ!ThUcY@R`"F3c9tvzHQ$#vN6枾<L}d;If-eiSSfWY>m"Ҳyd^cYtJr<2Z(
(M
yKIڏH PKJyw    PK    A             "   org/bouncycastle/oer/Element.classXw|=V#A	dp&`(ċHg+ıML\pI/N;V$Nq"ҝ{BGH)3vVB9iޛf|.~E K}(ԇ2}҇*>La}y>Y NS7W[W4O n,{)5ZH(q1l6(d -6_KohUߪ7v塎H0b7QTE߰-h$Oz{;лMEl|qG7c2&6=XctV:I3"V[[-IH|C@m7pZ=5ՙl9qQb.#ؐ7;V߈$,ƛz8.Pcl#W[XFxvrJL6'H.& uΖ}]"+V8-Y*7%1*J;YwY¦-,LoٕX VyfĖGܤ)įUsdmj+)BbQ3"9k۶J)PlZ;t9
Tl];F{]j;WD)ji(X#aWFcHxӡf{Tm7[HG]ͪnZM
W;mX<D6`sq:2FuDJ1=0L0A;!A;iftJk7j%DPp+ZgSlEÔBQPXLsQʲ3>Ύ&ruqZ`?/WF
-ވX5kc9qL
i\Ύ:5m;x"l4ƫ6YiLe5bI8o<ur5[۴>]sj]cRm3(,j+$',0-_"jCʗpέ$vH2eKD,Kn/MF-!ɮlk!WIAܨ&7+x[
6+hSVХ  [o-(䱞:57@*m)JZ`J[&>.d0g\+d8d?^֙stB;V^p{%\:W+|2K*/CW7!-wl7-)aw[˹5MmYW'9,RX,Jl%Yfsd q,11:cJɭs:2d?>.mlTo&~Mdm~|񵌳%u`o|u:q Rn?Z]׳.mx"
ιyNc9ͭQܫ9ARՉQ_ţl

SUd!T,fr)-Lۙ;U\`r;"ww1y+x^1O"_<|@*VFldr9UщU42
|TEmLj1W*,'XI	K&&G RZ&**ނY	<WBLz /0"|W|KLd
&d-&f&eB<1w~܉3we&ɲ)b+&cϘޏL?d#&`&eG&b&c/&!~Y{&?)½xOb"ǲs&~fr"<8D/U##fEu1}aFǄ0TCrFMs>D<֔R͑i[㥖"'T#!z7ïqaشbn#;v?)#e9%ZG\edWEҽ~QSBh
)jR8)))hUJ
ǵ/~-P°G(PW0ԔVU	-0)SZUi
hU)
DLl
@	MzܖT*zlAy_%J-?=M9(*T(ح!
w)~W0< 5	!@#.^?E=n{Yg)'*|!\ص)
.1Mqi<u4W5ǹ4si抓;ל!4ZM)7gfsi<
(@t̂ozSmo+tk5  B\%k[f+
'P| 7ib*m<b61Z~F^+`_*ph'Jz_^D|"US,U>"DQ:/}Lu'5zϝr;U9_s)sӸ ^2]v5V&9b܊'')umSW)ԃX/V[8_3p
g]K/D؄V
֊Qn`&
1M
v0D <PV*@y<̯%2|rb 7o<elYXmG_]j$GP+AQ).Ju5xYhy"VD,}my|&[˟1etޏ`~Rψ?鬧i"3{v	15
Kx=MkQ-+LMW'#*(g1Cz"OQk]Yɧ]WQ[M/4.ὖz9BX%~9mȲARYmέZ8ҭcYY	-gFK[94ZcvV8YgOAE}V7lz~{*qٿV7L_j6i4Cet0q	{'s){JXfث_>lts-rSSL%N=yz?U>
/u{M6'I8/fvf9QtnZX^~pA+2JÍ'qI	mΑ,jO;eHV>|`y9(\yy{tA@Lq9JQ9A	9B9La{4}C*4_`j>W':'m4N-
 2
l~iOL~`X9L^ #aDxLyzŅiH/g3Lf&CddC&Cv @h0_.)S
浛.)l4l+zP`sohT&!;j_ G)y~ٰ>t{opq*w&GZZ:SD/[l1HN.,i)'0g| W~|~iٟk9,#Ύ\_QH/gFqHjFi%E1g͉QOON3;|tG0lW?;5Sg{X^J^?.vKePK
  "  PK    A             *   org/bouncycastle/oer/ElementSupplier.class;o>vF֤̜FĲDļt}FtҼ⒜T"}לԼ҂"v&vfF
M|ـv10 ###	 PKDpun      PK    A             %   org/bouncycastle/oer/OERDecoder.classQ]KA=뚚}hZhЛhITO:ȊʺFzH^{sνw	.6ܳl636#t5,Ǩ=Vv]:ك\FtQ6 &o{VAq;FؤCFzz([!T2
UŜA2Wv	/l3+.IjhJuށ\?:'\L$4!E
HjbYfm{ClrLbq9i;@پz>N<F&sHe8W;!	~D!sSw
^PKϰd    PK    A             1   org/bouncycastle/oer/OERDefinition$BaseType.class}SWK	jU!1@mJiClBM%,6,}svN;w?T,3t`ݳg޻o xpUBB °¨BD!00p]aR!000p3[[T.aщYY
HtKZ,mǮдm#L\^[7e٧3T"ڕJB?έQv2DHf.ϝ]KIcj~vlПΥRZҵ#lΆÙl$2ݮmW͝ؠvfnhY-z6v|\2fWs[o*WY-bkaTޏjN`VE+VʱLbfebeO
bɡ'fh:S;0}4L\f=z0| iޝⅮM"s=2;VJ=se]H7^tq`=VfBWq;k>F?c1b3F1Fe3&c1͘ad|0ø0> z`2133R5Fa36e[/yƗ!,G{*WJݎceU7F_ulYUЖEm] PNz倗#^Fr˫^y9堗}^z9ek^x9M/qyOh,Cd=rq;¯Aڭ4x5
RsPm3|RIO\yo~rMCfxS~)Yy86.
FŮ80E4tDAc
|LtqHAG¢ءhqaSp(\<]..):](\)]<5ꏭ!=YI3}/D""FHcȮH0 r ҢD"zHKV4^XY؞X,f؎XHoV1G,=ku1S[o)Cl_Gu]be[+|'7{7G~ha{)_PKr.  F  PK    A             2   org/bouncycastle/oer/OERDefinition$Builder$1.classMK@m51[{UH
IF.dͻFAx8,l&y'2`EliD0XsJ'`*Dsһ-yaEF-){*+y֏ CQq<bH..VF̯"ytF[	Ā	[.?-5R,]=IĿύ10YDØ`cB0ߓWa.P*%͵GS+';"<RX"
8Y-$U^A'Jπ{JE?k4g:`!<etPb PKR    PK    A             2   org/bouncycastle/oer/OERDefinition$Builder$2.classRn1=	1I'dB[m(}E;B."QjQ7q&&qz'-HDH, >
q=EHH,k_ x;R{PyO%TH;tnt:c9Q" 6lґ2RE{;SCO
x'U'Y:^N?ء΃|Lm0r޹J(P[|DxR5,ٜyâK.́<c˸52A}r'j8IsASmk:s?Oe&OU3VowKKx(s0=l+eŰ5A+7jxw7p΂Bu,qtB!x+Z+Qc\g$(0x*dF!
69[&|6-8TPK	e    PK    A             0   org/bouncycastle/oer/OERDefinition$Builder.classY	x\UofyeOItL@֦m)iMҀ5v2gR
E\1AK[IKTQ\@QQq҅44d&A~w9O0KlZ`i6
	WjcCM9
W644nn&iqwz`ȯ
U=juWWzAn=Hafkv)JGvmnߥM¶no'a%tu	XK
/Ydc)Җ`#G
}ހLߛ{xLӣz5@;nWj@aj\yeE_
*nhtzHpu1K:ԝJl$ӯzݚݲݦxB짎PRj
uW2Z	:~
CQUo%C,!	Y(y<'/늪d7ݯvSe	(R^Rj?!%,QymCHٴ4)Zϣ*䖂	~AQ;OKmwZ
'?	ɨ\*N`WZwg7v2DCnOfM4jڤL׊'pq'O M 4I&ҮRjU~Ayqw[}__q&Z-+P,^-8|κv:w
@У)Һ
^J;6)T>_M!:Ȱ)67lYOSЂxmkdO:OgfFL`I~
i],eG	E(Ok&=ťvM~*Zշ>
M8dm@n@A_ʲfhrB^֧C$x~RrwDUӕ)΢5;R
%IX%.\$Y[$pVIX-HB	6JRBM%lpIBE4	ј(N5;f4tP֔S)	)2$SRT֦&L]FDL>D4%<TZcV4٧74&fx5V2Jlxm4	Ok*YL<Iu,?*'M@b6LV[h؟i/5MS'WmRajˉo-lg:]ױ2ؘ1G&lFXFwԦʃ$[WtbVokKEnHƚ57m&C1[m73ے"^VrElz=7C3*̤_Q-g	uiOp47:CiJFH6)O2'LfVǺfE4
'wax)&.lnO:m)gmt:Kcuijɨ@h`7˨ǻd\à zog0ȸ*c#cneX3(e\
leBQ`	!N|XSQdT1hGc28??)c>%cO˨ ʨgxw/[ts~NEXd}9&c&!c3Hza28bm<gpsa:cTȂxO,p΍3x,/-؍0x~)bkZ-fn/L.ZRc;`Gaw`Lx2>Osу<w
+>ӊĸNBnzUY.OA2gMi9['@VʹG;#)Y }SkxkmWim]Z[[^mVhm.AJ@7Pqo*4MC*Zg,XB_<֕aa`a!qn+miA8ow~@2Z<I5vƫâra5FD
xHw5GзcGma5DDgvd'y=^OqsaTx})xcVaQH0z,1^_E^_e'[HaQFV2xǝ!.%X)OHR`ޣ<`UGM+1ssЩʈJКc'|% u*$JE9(zN\_	"$ZGॐhna1HGJd
@FZX>R^MldSS4W%4蕰R-е[1+ǐ	R!0qW?z79q<6_6q+hjAjnr9ł]>'"v^Ԕ9/M9sEڮy}G߽(B$\/b5\BuFsGqְ0<	t	({9#b Yd6:wPfr;	@s j?Qjw0x7F!T("pR%fe0FB(GIFr'ZMJ8|QDa57
/C9li`j0![S`,VJ/
&ԢfX]8|nuT.:@Gm{I)}|+(ku2[̴tf-o3P;
9_ĽlUd¬1Q,E(.hJ=0mNds8TYF\&*qarV5[m&~xWFnȏ+jPan(1s;eg^HMeynj]ĮVy,0W^2^a6.7:8c*	{(m#h3sy
B2hcGZ/*"NA/[<x\:$b|UeqX\؀q#hnyia1!.9y2y!- Kqg31No܄C9PB]Oh_M0	yEOaYKa,|2鲢9%zW
@1MG#N#tߊt)FIl=]+ũ3)Fog&n1bHgXŹuZsVDj.)~şf1rX{PJO',"6~	qq>v+I,#,EH,^cu_?
/?obsnXPK  !  PK    A             6   org/bouncycastle/oer/OERDefinition$ExtensionList.classMK@WlLQ !)B<xK)HP((TMגl I,*xY{Xpawg^z pBR+Q&PP&ZdDrCǗJ#T<
EʿL1GiF8?g:"͔c7(քMݧLꔕZ,Y(s[zFSfA; 4%s'VL;B-5
$0+A	y9"6peƶͪF(t1?[L:JLq^?cp?ɱǻ#ΦZmayz0Cc*hp`PK5    PK    A             5   org/bouncycastle/oer/OERDefinition$ItemProvider.class=n1f&!R@7(VBMe6b%ۋQp 62h	=>hSN6&jdL)-0+[P>T,-;}Nym壎8tvB%H_|~?0A\RvscM*=J2hЍ}V	8PKb   q  PK    A             7   org/bouncycastle/oer/OERDefinition$MutableBuilder.classTsUnMmI[tcLZ6ѴAZa6]F)os/>茄AgW8MhH-9/;?{m oV`z6Ci#ww"g	+ʊwE0DFޮ^q/MӪ&+¶/Yujv5l`ũ+ȱ
He()WHMzh4h,{FutGuc]`Y&eOxr^E=ӡ豽-Q>L+(
Bha7`l{,Qfe+;MQ
ϒ9GrU)뗐K!W6ꤪqo%y鉲%w9pJzj7}:GGccc(qW8'8NύвvF(^GqGғ=WJtwQ5=x'Mc\)Jq!~|>:ۯÅ!zG"weBǤ>:tt(ӏcxCGYAc91V&pg23Q(5\QwN|?RxW8
z"ϊο6T	-]$$E9뒆_Y[SlQWsui~Lh72Q00#ێHǉl;|Nvo{'ob}:ʯoMftz);қӏ0%G(2l/Au^dhzJsD<83L8XBgC:̶6}ШKd'=I$Gjb;A('IIpGi᣶"1 ߠCd8C
8VhM	]봖PK    PK    A             5   org/bouncycastle/oer/OERDefinition$OptionalList.classPMK@}Ʀ~MDxK)A(*x&kHY6I,/
(q^ex;o޼ٯO W8bh
Cg3tL6H"x]Oi^VguLDY)ix|sw-[^h<~ uekH%tB&U8N
qT(EGz}f=B;_vs0hvQZK)Q9	Na;blQ);&t{w
/߰+kQ8ئXz8 C~ PK,    PK    A             (   org/bouncycastle/oer/OERDefinition.class,$/G8MRC(i#KaJ $8np^5
L4HJۤMz}%4nJ?]iWFF7;͛ѼW^Ď 	bgĞ 
bo=AO/rz3P*AOx:E#P:>8N& i
't"1J$T,% D/W~vGOD|$1JGe*vS<VT]5S4Nx,[-/d'O\ftZKfrjB@l1h`VT}bN	Hbȟ=?E>|yz$͟"fPH*ETpޙe]蘺MeAhE@ԪITZלah4VZ4M%QV68/48zT*,`)Kn:5%M7l#+WDT.QR]U4Y_.+%Zvm5Sբ|<CzMFT*w+LFe!:g\55%*WXt0ks.P*|Ie#:4&We3tM<&L#ֶG7awb\U6a1Q39MiYv5,BLVo裧*TU+T/5W<u4\3燛%u=?/b@ĻD1*ⴈ3""ΊxDDNĄ^x~r){"9vhK#ٜSƜɮH"b"7ecm)d;d;5rF:l&Ffrϒ7Uh{N\LQhj|wЦEδtO]DoBZeru
FO#cw#bj}S1~KP$X`y [Y<6DXY~leƲ Q,rOe^	I8
Cy(H81T%Ôp5W%pMVS!\XadˇY>Q,ϰ<1,g'Ycy>0fˋa_
q|:'9ϳ|,_f
WYuo|[aLe|nG5ElwMQ
)Je\Uʏ-wm/6@[vlAo.zxwot5~	!_]:K6N/-aC`{hOamkM>rv.}xq
o;GVG\nE-!_>(h`?۵6qĕ&tkႳpW񛆷| Өh:mp]H|́ob+yq/og+9E/_d>6)-Gp}7\uvMI*n1&j<eGQ2\y?+䌡; i;X]ß-0yIe/u]Ӈq݅mi`~_YW2Ϻ*f}$;kea~ƷlzwCְ55,ZpkXwXq:~fˉ^T_LPL/PKR3  I  PK    A             %   org/bouncycastle/oer/OEREncoder.classR]OA=CiWE(T|-5+	oj1iĤiN+}	$Ώ2٨i|s's=gw?n C-}ftKUܫ0
k/U"h=n$%WNWʫ؏cot[:a!%vዮUİ:̾R\4bD17T4;tHŁQ<RxJ^HRiZ?n8eច)iò[h=
n>HD{ew<;989Hx$[vҦRtULD:-::Ȁ9450	{ E=tpK6fcOؘê<٘7lO
zC0Cwiq"Hh	0b۴˧-~OSddeh}y kkڕJK+ؠNsQ6E[D?MF>*:PKJ<    PK    A             +   org/bouncycastle/oer/OERInputStream$1.class]O`ec>TD"T蠲@p0uL0Sc1D&LOϳ;tݫ}޷ӷo 0HTմ[rQl+Z*OZrN˹Nt(Z%PӫyNn̴@hBї4}^L	HtĴ$dYHr
ͧdt*,Ra5ll|n9R⒚k|Y>V~=yȪEնƚ
g%qYvV.\O˗-ӣwٜcԘXecbԘowQEV8Gݰ*z{ͰKVQ	;%Hh&a@j5*0ӻ!al]a2$F#1aFcale411QnDF78cb33b (c(N0c֌*	7K(;i-oS*$lX
gW;эeۊtДHw<K|鍗u$6S!3e$5AZk+ϰ}c.~=iGٷ~)؃t e71L98&)eBq&ey)=M[;wq))^S{|OL_R MmOD20C^(㭴	PKrL  V  PK    A             0   org/bouncycastle/oer/OERInputStream$Choice.classSsUnv76"UJd6*h6%X6ݝm>ȃ<MgdF_ xGcfΏ{ٛ?7 PVqT"b\ńc*dH߈mVd]p=W,2:p}/ϠT4ZAb5:dH,tl8znh_xvKF :	MPzf(0/vW6a6ZGwéUaT[v?H3nQGnmF'jKm9ШlU!'`8E[,QFyp5s:v[xaQ_xTT{QkcHG+UFRMy
RpRdaeL+/2O{/B{e}
oHTNAKƤz'"ޕ{)RK@5Xp5#*KakTwWNF|`]y<)kzUWWM+4u?_K.)GYLF;LuMkWL_=ҏa2)#aYN9/=\_:. U]ovv˹vw=bfP.cFzBLAIO3b+MPEBk%-@Tcd}[b.$>?RZ$$$IHʖHCLYFMXH,#!=w1J'j_R(e$)<Âd29J78g2#䣈Cӕ~:K4LMK%#SLgZ
CEĩ5G%B%arvԮA,'H
PKԆc    PK    A             4   org/bouncycastle/oer/OERInputStream$LengthInfo.classQJ@=jXgLAwE!P((t4iJ:d*OnEqQM,(s{y}{~*CiaHUˠsaXk6W3LH_s[1
Dܪ8fIlZrT aG{K^
FCױB9:񃡆]Ôa;`X9ݧKm$i`2(HH"a@l9,D#Nޒ<JG`0,)Ep0&	"i
QI'cp21dgXnl=Ҩ<|4И8{@qVo#B.Ȉ1cV4:f;PK?t  p  PK    A             2   org/bouncycastle/oer/OERInputStream$Sequence.classVsUݼvnM4hUHK*]DC_R&!SA?#EA9_?xNM{w9t
V|§EE
6UUq.8C2-	WdI9KO>z<ۍaƎFRfm
'-;%:NtZZVO__ٲ`ƣr23!9d׌nMwٲ˒g
2uu./qSVLVXY[f,#o)i4MJ{nѹ̙tE1|0'2#䩛n퓧҆
#!UY @ܡl`궜Xa0|șF ?հe^y)5Xrl6-jx4+)Bɗ*%V%#i?YS
3_~{a2dt<[ȤҺe2h̔32C

 ;Gۨާ;YߔaՓZ>jPbC粌sigu E)X`>
(PUG<1ۨؔ~ma PoMЭJ$nr5:O}FIxw	Ш'C|l[^65J6QӋ
6l㝫'*ak4܏
NC50M`ΰѬ!Ca#z&I
㐆8
ЃQ
{q܋'	`843>}!`2 cxaa4C!Ó0|J6a?N1L7q3М!t
g'ox&#ænYX>])[OOs:,A;Ns˔IC_v\%)Z|D;g0{	h=c~eK=`E+%W.%ELX\B";zo"޹@mnQ]iTئt(W"y8MP
Os/8hXg#\E
. Dw-[
ϫ.JE#O/QI

1:ǈ)qB-{
Qӫ.:nb{A5njN
}\{*Bj1H pLhTD	d`4&U7$:u˘KD^<	/
j[,~CsdA]
LuWū(K8rPJKиQֱj<ј}7 D: 8 ?fA?(O8QPK=&  	  PK    A             )   org/bouncycastle/oer/OERInputStream.classYx?gvvgv3I6
n`(ɒ 1J ڐ 	₭N6de>Z>6&P>Za}i?gfdos{ι{fra 2P!|e&v4@@TQ?|UZP
&>}p55ZTZL>-Dƪ݁o6PVu!joٲ^	@8TլE=:knkvx+=v4OohffkIAUc4-/&-EW*XVzPC15p(G[%@HԨ~u\uk[ɍ(Dkv[m
VjuI঵m&ⱷ\mo#چ-*x׮P;b@W%6ѹmy:[6lQV=f2abp$F6$bVҬ}]gKRSC>m74'-[iVfhP5D;Իm*
Nck-[.pΎ֫]Z}Pw4Έ[̹6i]QrpChjɒ%βNw,Zw7ia?HD"
䙍VK]-h~Ab?Y`ihw-wEp(B4O
TnU=*oYpBSnRQ#Lڨ`\W)ujl&SØN+S
2fӂ`>x4=D}<\խw{1#Fo3	%((t;`Y162rCDmD)-2/@DQRhӢ$O
c2BG7֧v2BnC$y^
~qG%jG65Gt\(?yI<=# HP:Ɂ3sҐ1UG&=A7KȂuCQ"گEvB5n87˛=xNDlg\%YtKΛN24@行ŽiWH].8Dđ GzĔ
EcZȟ8#͜&=6۩YivZ9~RyAхAF$ Kg2ٸv+iGRBy%R¶2jt
f86]˶=&6(D[{Lzwk"|cz$lȠs]ZnI Jiyj4UC@Q&W8Og49ҾeЯN7$*kJIr۞1#Mk$m+I5n	To0j8O)L1= ͱIcOV."?gTRs5uNdHIՒ,Rxԓ'^3x, Ml5xQ6hlyZ9ŐR8tOb^֯h[u&-%w̀RJtqx̧wVGY߲9KLt7'fOFwZiSkM4u$n塳٫ww]EǙ:b.*S;UtƝ#f**>3SF>Uwٟꌩ\UT{f·.Q-	CJ3Au:d%E$'KnsyOVj-E),5j,Y"Q1+KQc\%I@E`.wLMqQM3βlЌ̈v~l˒>n':w( Uo)5:
	w逶,c|¤qȱpi'.z77;Y3nYdT=2epȐ'"C2P)l0W*ΖP-CeaKeX&C+dh\6&f:eTdJI<	ΗC|X%HQ	>&%UOHpS|ZHY	>'%.		`_>		%_A	"C|UIu	F$xX<"<&cKp@ǩjQ	IϨ^֚JgÈk4\NuS9On?Zd s&ܹ<V{lG3⨨xm^קEi|<RZ]1l$j4TVל<{%M])>ʶ\΢onYHTYS43+-C`tA䮾4cGx/SǶ۽ӮXvYe 
g
p)HąDAeF5q3f]<#V2&4(YHy9dfrTAL qӱN{fr&,tIB1s9lҙJ9;hl2ñfi9DP;#F󍌓{4wR7CI3EF:?RCc{_p,a4\VdƜ?͂+p;,R;NhR`FݸPV`+JQ3!ͨZ`}P@}g!o3̃b.fb%
\p=
` ^VKuP0&
%
Re
`r"BQ S&sW*f8bY/[p;paqXk8
NplQ`'nэ
4E*p^AlUI/)+7+p!^E8v.
Vn]ʰ2VOo0L^rw+-|x+(aa0hG7۱5nώc%vq.耷879 ã8ɴIDí8Ђ>0@"wE<øQ!ap#-1|.*,Ea,`(df'+ṰKVa~k>pÝ1 Wb*#1|	y7 'v3|&O1p/pq	}2\p=MxÈpw>̰᠃糽pqY9Pʸ<c#_Y<TU{ӟXl:z(0#Ʒ^w#{oN^9-Q3=EK8{F @\ͧqeEc>x	p{1}!q[YSI-svXIeX|1|~L(ThT5JCEc%rRJĊmu:!GHiItHa+WOR."<)'A!ulxЇiҤ @~~|
y~"Byo'n r=e3@=6 [	nk {d'M	,!,	cacĬqϨP:.k<Ǆ&ǅZxnȟcb0⫍V"7F(e[5ߚlna#,tXK\}0mѸh6[&F{%|yK|ngd<wIL]FyStYxh]6P^r[]䲴$gۏy l]q	dÄ%spA&<iYt?gmg6هArMqaSP&M.[0.{|y7.mpO8N
1~CfbKeKMvW{j_mNA4[R.+og88itLw+Onᔃ
in,vzZ͟t(h$)є~N3Q0s65Eڲ9ځF jI*0((PPu)T!AͳOL@ۿ8)~Nd|XrIrYJ빇B	Q*P*)M2(+KlzZUjɌcVutYe6EP6N F$D^ȍ>ub6)YEyB~zA
gl&
,.v:Guje#9biG`6?H(e
yT*z\bJ'x7HKmG.3RwȩOsb	.(oF+,J!ͺ%ae(_;s|=	]Ya($MiZGG5-WY+U'}ȳ(/4WE=r:NȯI2-A]V[*2vߴ4FMZ%(fؘ::R|^SܗR_opIk\BpINyTE.ޔMyglm6ziL_eYțl6Űm\mdzPN^K5#RmqÔxa׾rAڏُ2n?f&$NɚF߁YvI8.3I`4 DG9%Q
KEqXH4Ǫ`g\gQpXOSB9U\bH9EO뫄&uH;2	`K΅7%H`j@p6S3%2Q8usS<E$
d-ȜDo\Ӝ#fmX	c 
PqXNķ~O"esNPQi8{D/{'qX͕i
(8\OF۰aɪ8QIWS΅~ev4#ğ3*qZeY$NvN_4S9zr<-KI؜x#r]XIyHKL,*ɱNja"\ cFԔ'=\X/~`֧sZs~7kiUXrNkɭ`.Ś[keAӲJi6/|;ԧo(R*]&p	7_";dT$":-~h:UfG,ĆPA1qRb%l>٢UiTEέWWɑ\͓̓RA<Rf5*88iu*9)'d%׫^/2=jOqR]~ʅ:D$6|_Vz_ln\m#MRFW:Lg6 vVi껜_$pv$\z\Uive&[ؖǕ3V<cS?1q.zz4$k*5YB(bd˚a(eJnWׂ{E*}(merx
&Pf|g"wGPdVAڴҕȩMSN4d?>eU2qbtqh p>>9vtdsڜJpS&;w|"Xϓ%a	"?|#GlƳN+\h;ΦgzO8OXPKױj  m0  PK    A             (   org/bouncycastle/oer/OEROptional$1.classTkS@=K!HT|A@} E<EXOK`t?Ig82wM
S13ٽ{{Ͻ~ z;:ڡ)ehK66d5Ctƒ?+X%+Tnǉe!&|T._V%si
ݑ_:C)Bjb-bq5{m{W:ZеasY2ly=ud)ʾH:mQv8ň'YԡZXpWm]0+뮵gQBQ\0kt-NEAla85֖_J0tex>[hQǢ3NM${ࢂn=
.)>W.4PDz?ۧl!T޳pi!8d#,d#ڔ8l(h?݄
q|jpONՉei:0t&ȿ}VMpw4DѦi
7#Tja,1!	
p7ä~LìLБU}A0<R1*1C͒Snjx$OrR
7T.buw.At	oWxy#h!%KP.[hǃz $["Cd]uҙ̧6}akH#/D\M\wKwoF#*aE6#dsU,|A<!v*gXgC<I9QQBL*Ij%yZq$VhVPK=c    PK    A             &   org/bouncycastle/oer/OEROptional.classU[WWN.N2@J0 IPjDFXZ@m13'ҧb[AZ]]Ud ߾~p`<"!-ecF7tӅbnz|B :sMI.KskU8GJ%q49k˺U4}IUc0
okP2"搢ļ帚UQ,>Kmͬ:9Kv-fp]-ejV%SǚM#MUVj0zUwZpr^VmdvZkV	k)ͱ2\a:[ttɄUڢJfWS3f]ö4S^&k3-M+In.^J@q	'$pJi	g$H {hl[)Qfxyrܲc-cil;HocOm֍YR,
ޝukz1w[-&Z+j׏v|í79ȕ8nǰ}~
/uRkU=TЁq^
! ø>V>Y||0ҧ
Øn|WĐcEq_D_2e$020
ìaܖuS2d0'#BFpaaCx%oYzNW+=Җu"8ՓMVj	
\/].u/p9reH?^ED:#Fz.D
<{up	C(syF/aN
;Oau~蔨"i*>ҚR}	Z-\ǷPXw̩
<z	.uR?"]AZ̘e&q5
BtHwQ}-:Ucc~}0y
|',C"OFrnZOpF}A:=mqΐH'	Z
:)j׸CKOYJP8"A//^x.zPpm+tSDߢ&wX
aS<tN/5*k,lj(\Wc@㤿BE .=9 m,.i7Lc㣔%?*_p?P5/PKԠ  Q
  PK    A             ,   org/bouncycastle/oer/OEROutputStream$1.class]OPecDQ*/"**-j°a3`D/}c1+LyvagQ?sN?x`ò~+[fFwm-{vV֔izMiϕ̜mlglҮnc)XՍ%59+ Miڂ2(OijB)E0Ǫj(UCIFuaurHiwVݐ\^Xj	C	f.ՕK4+qULIYecfW]
-i2Ǔ6fҶRYcڦml/J#F-$N-M[3y6o
tOO=2P'ငz	
%4	.ae}]+{%
Q-rĨ`F%#ʨbT3j1>F- J80Zpdt1=^IFgqrFtD-%EZh^v6ᘹ}ӺAoa9v<L5s5RY5ݷ$^wCz,	@OJV:F+g/*e/b>	{eg٣a
|i#èC=рvtPvb CØ4)
\EB9Jq.><#xʗx	)+Q
\ΡD$\
l%+-8Fj*~PKk_  +  PK    A             *   org/bouncycastle/oer/OEROutputStream.classY	|TdfG2$dXB1JH!AV_G2:ę	hqiݴV]uB7ꊅVŶZ73$}w;l{^:n sſ4h&ha5!" pOZYm֎@DcE֎efgQ8^
nh5U"E
,yX *1VӆNK xF
/&i3VpQ}N*&B.QDZ,cdI `!ƺzOoEv.V=o[Q8淮2dukЌ٫	D$,uv_@d"]'Zz,ƘzeSlj+4[TGIj=u1 @elm+Yfgjȱ+K+(P`F/E@5bVu$bn bQrSK-BCKXaf+l
4N2)LVC13"&Z"Ҳ#b,jjo)誵I*f-?:7֞Yb=kl-
8Ce72C@lȱB]kkYQrK
3Zi(,RmQ]Qbn29Z̜DێC[p땉*$j,0'ICnh\CSI̮`LO z(TOpsq emP4fۢ.b6[ڪWS-͍֘uXnըfgڱnk2ە=`jՇIRHEjhC	ݙiot2Ì.GLL$[I=-rp
K]M@{m-`75H&".֮'Wh`,7bx8/@t1dxѥu-b+BѦ1+b´:
SŎdrek]ju
_a1SO`j7Ց.YChbV27}^wg҈ضh(5ŬvX X1^Sץ|߹T
yp}rOR;B*`rH3>
nGi#tt.Ñ@Ȥ=2܌fW7Ϧ
Ôz6y	De{CvffDRO<Nτh]Ch-Y8ux-E{f$"RiMj-T}2)Lc"OC
Cg@'7C0Aݠv5qfd2ԩȊfD<3hօڬ숊O&*JDjИVABw\f&߽CCK
ڑͤsH\k=aD"|Q;e]tE;`p0婮'S4p5=V"Pbd&rN
]
cQ?gW;0IHR#UӰ2u|13x؉(Qj[H-5|ghr \>D1Y֠k`ha

pT"%LV6	KbDDD@
+%k$b]k%I q5J\'qFM7H(7I,qĭm]_45Lwi˖%'/3ϕa28yÌ$wS
g
&[FϡC{S
(ɎLoL&y@.2DPd=WyH᣷p31dbcu#-aM98bg%S,0iuBǑe14y#Nr_3i9''/9.:&2 嗑IIG:12yx{sMϴ
3L'۱8s{ƉεugʩP:i;>g}՟z#mb{zQFCLz
ܨ&I	<l`%c`6~e`~m`<~cl8BQ2C2yhbhfa%2|a>FXu-7p
Bc$c
܏wYo
w:񞁫*{g}>Ű9wONG/3P30700pC4p'$aሁsoV訁jsU8fk#)Dm`Cp8K8
\ \NZ`0bec0f 'n"

)n.ƹƛ$>71:bCl9:sur_0a!:bD
"?g1,бbXp%CPQͰL^1a6t<'&23C!q*CEq:^恗EDǫl֫Qo?&&1LfLǏD-CLV8UA1PP0a!bzU2X:`XLiyf0,`D9a:*1T11t10uLp!
pÙ:~!8/OSQpva8scі:cwBz
qfԅBVD t*Y_fv6	)x2˦Jn> ߨ5Y+.6'u%Ok(LM7ߪhcLoty7r'y
lvu|Ȅ'@sH&m,d1 זnW?ҧF7<%{F\63.m-!>XM\OYF˘7}-o%z;ـ }Q]O;%;ğC=^zpdW8+\4n\]!x ˸;Y؋O#
Ճrn=S,.y cɲ2vT{=}z]:kY*AD>JH>mfxR	/$.v;GY6q
Jzqqs`[J7s
ϭbNlwnQ#waOW}ZW^?EC)4C{pc|nC}N;HWW^R^si^k2fVn;I&^U&T9%>5fF^wZ{'ŦJ=["ǛҮ`OgoL2QKN2\{ H<r?Y=q9U
qzjb%QKJ
_\,|7qR\|n?.__bWG4=j\<F=jlNG;AQ=JF%>^9xA	Q܉'+]4^<U>WMEW,r%m\lJ-dżs΃Z.㊋+{(\⁸Ze	+ӥ>jBv:AYPD&fӷdNVFv1sٶo_9L 1uD\4"TU%(yyt=Uv3@\|i</]>{^$ITg|~ݸ,ý޻*5O=}opJj _Չ랍'Oof'jމݴ_*ָQGջzoZŗa۔1;+\^.&}W])GzT%WV&rT:9.R<N_QboӃ]^=Uɢcd}LtzӾ|f9vi>WRtWy7se
HtYn҄0(Ց%>Ԍt'cEGJ'Ov%߇)pRXsq
~b-̓I6UT<KkOìʺv_U)PN̞"y8t@:<axxuo'ݛT||F[LuOda^&~8l3Τ)I9V$]HFvۚѲNEVoa,47%Ip<ur8GQxS(NYLf,`FÐc $%]6jN	&N<

N:>zK($^8G)1
G|G1mbti {3G)Ad}
`"~R#@mO3 =c0r
5O;@>L0e% y_PGY@gcˏW	sA #\T/ūz˲g[a&mfzs eϧHqJ6gJ<^6q+ e)]9rG)5wr3.nM3m\P ,NqYxlGW̙L؝[oj'Fg=}iSbPtK,
'#yIN-?n A|6[o9ĻL]iP*TSo)hNɩ;8:Q*evv8kz 8գқ
gCS64<ZCx5, 䩆5QqGPKJeC  ^(  PK    A             !   org/bouncycastle/oer/Switch.classm0/ SCd"сѩ?(6E| r˽?ZWBWP$2,MS´ZvRXjx~?;ybr!X	Cݨ N:'aV&C+iL1˘{PK       PK    A             C   org/bouncycastle/oer/SwitchIndexer$Asn1EncodableVectorIndexer.classMK@ikcVГ!I xJ/dو  8܂X3<;_ NCh^De*+/بK42I$xXs}$6e.
&jYLnB{yO=bk">ມ#^$ƚ@$Ё`*$BgSIR1` +o؜c!w#[
֌?c*!j6oPKgK
    PK    A             <   org/bouncycastle/oer/SwitchIndexer$Asn1SequenceIndexer.classJ@ikӤVR0P7"}2j$L0pPDWźs?s|{pmL'LSjgdR/}b\{2^Ëq(nBrEᅷiɯ;Q0-F>y
;ѰAc/?1myYt&:0M4LŚ3ޡ5z(3R,RJ(֠`*Sȕ*!uC
3GoW3'X;/?V%\@PKĊ
    PK    A             :   org/bouncycastle/oer/SwitchIndexer$FixedValueIndexer.classOK@_L[SC(V(K!4j n[)(?JEv=z 0á@E!5U'Je*)RCQeiCZ`?tzSl(OҲPSUk^ZYJFW˻TJ~l{pX-TNej4A8ϐOG;ܝ
gp:~yҘ7oPKI     PK    A             (   org/bouncycastle/oer/SwitchIndexer.classJ@ѴNq
ō(E! d?I1%`.Z˕ēuQ̜w?;!V~(>tV]LNԣҩ&֑)RZϱ*BOY:)_:zpc(kbΟ.Pi )%ŏeemö&y~fr>sz=hW$$.8p|,4iM.ʝe@ݗ'Xm02pq/PKadR    PK
      A                org/bouncycastle/oer/its/PK    A             )   org/bouncycastle/oer/its/ItsUtils$1.classUwT~nS.+CQ(өI`e~ݥw] ')I:ٟ?9Q'$Q|oэTY{>x?`dpT)0~'lva
Z⭖p&m dȻ^M7EXq{n>j<CfvӖ[14- MGpã #{&'v(|z>}
McAp,>D+=\8hrPcdkEP5mym;
AaOwW|lqӷ7m
(e+'m(>ߊuuv#%.x~Xڮ%ww(Wa[DO<vP6$.32E-۔w&bM/#eT6Xq'TT1ⴊ7T⌊TUqN=C+Me1__*]5_9s<NƓN<D?h-,'8+(PNֱ^*m YCNb>{?5GDYb]h5Y_\\/$4##qCZGGti>qA>qWthm;>1yD44Kinhu
ABl>0e
%F{>fq ^^Nk9^@z~
?@?J9od'g
HeHF
]})%2X,=qȟJW
irDnIp66V,M<w?b\*;FJNvP[.Il"~@jէ)_.wP _XJܦziw4X!UD7*&UL<J}&[ܧiE>$4)vD4oy
5"^PK!W?  @  PK    A             '   org/bouncycastle/oer/its/ItsUtils.classTNA=CKE*-
""!HBlfq)G)@oxw(4;sϹ;wG B2Csru&:àfA횳4C`)gZͻ^XsڵL_:0}1j
oF5g,Dwm;ċ-m_2oۦᘢd,86W*or!w,%mW0Dk"^:Ulk,+R]vLݮ%LҳE)e]OxE\/@@2F/2VM=Ö $Я2fp!~yKA4-.4
"4kЩẆb]js-S"])4t٬c~vi)3@*ɤ;28YL֣vEMR+uj1W]usV05^M$/UN:2@}^]LMh`7{э:n㾎腡#G:q<7κE@ѯbA)qf{,ɗmߦJsB:M4ͭ	.f@!)z렕ڔ7#Ɗ{!飞h;DJ'_=:e&*RBS; >j=}M|=dވ0o"U@+Og
8ƭ}L)cta?c"x!+#yz'ǈU: ޞWzԯf&PKl    PK
      A             $   org/bouncycastle/oer/its/etsi102941/PK    A             9   org/bouncycastle/oer/its/etsi102941/AaEntry$Builder.classSJ1=ikmK#ևX[ oke6Q_)(GkU$gΙ	#CdѐQgF2H}:uIu홠͐kK]fK:Ys/<m\}pe4Fj»_.{*?י
Ko0PE0p6~VVW6u:QI~EvY$a~ʪ~-G6ڈcF,4$2	h
i`c>D?gcxZj>M#Fآ'Bj3"|k!q>" -&W@*(t}u ӑ {}\!0%"|PK"RG|    PK    A             1   org/bouncycastle/oer/its/etsi102941/AaEntry.classU[S@EQ"
7E,VQѪ3BX;`0?ɿ3bo/>Գm8r&;9_~T>g81e9hK4gh0Lk9AY\%1tUn
5<[ox}ehr|u^_[xzL	,nNVO6vˮpG$7L*,au9i;#z"p$hqpTU;.n4h.drOs[#ãDk$m27+@5Y<!^96<9'i/<s^AyM:,x֊%uQIM
(hUpJimU6gQ	[=oIZxIFS%2b0*cݓ'.e(YyF̂ӕľvPg/6եm9+(`8#JPײC8jԄD@B蓫Ѐ4ư4#*1c*:1*i8*A&TtL:{Np] rچsiaO'n"K
Zej]W@L.=u"@IƔ6{ L(VC^GL׾C3,ߴX#n}m"=Y쏔KAX@=2Td'vFK[i~i	fYd'BЊ-%CS[Twg_82ܱ/8	Ht&(f
9$_s:PLs)*.:;PK "U    PK    A             E   org/bouncycastle/oer/its/etsi102941/AuthorizationRequestMessage.classPMO1}dA?&zQCJ0#HPAeiEm1F(cw&bͼϧ ,D2UUHń	V]ϦM'ŤpʤуIoz<  ܣ+bAKz;WZ?z
9ؑ~Wֹp|)/m\a~v8l<AECW(.T`^k[F;L斮O2|2YJ D!L'E:b0C9t[z喙b16Xñi1'A2(sb!`D13~\W~!70;0.G17  XC4PKoj    PK    A             L   org/bouncycastle/oer/its/etsi102941/AuthorizationRequestMessageWithPop.classQMKBA=c3{&{-FK*)P +6s)1g/leDmZyO[
̽s=a@
!lKm8jiUw1m2-3t6H[H0rE&ZIۜeF(yk)sYs_ӹUZCEfXIz#)|a￾pL5[p3+\M%E
J.M`ڹ`׌6ӽl/	&כ'@0X!c 0B.ae5Y1kiQkꭃݓ[wl%g?`}s!}hcұ;HPKp    PK    A             C   org/bouncycastle/oer/its/etsi102941/AuthorizationResponseCode.classS[UϣЄ@!j@ڽZi(J//䕗nq?G9srÖSG_9_`CYZק(Oڮ}ڂ't	1/ż-R`QJR, nY؛ʑN8\w-=(TnL"g{JKu$-4WIfLN~q%W+8Ei] UՒVT{E:RO@ea;@uT],\'\GFN^	]qtIO$+MzCgfg7
gRѿVi8zIKXgokKjzL?9GQhdŠcP'apK%E*v]Y?;nuiFO7'}\&Wpq씓S[`-ʬx>I?KJ8cM⠲.ksU%y;ڢ,:KGBh!Ȅ`Ă3׌'p[ӽ,请o9'L7аtB n-ik4vbK}jy<t	Qd:QB'a!F	B$vvRA~ a0J8D聖(`["ڢ!{<
;	cQhB7l	8M8Cxp0E8Gxp4³isK˄+	/f/f	/^@#0^#؄\a.UM NAIX/f%Q&\:C =Ig+8`^&3q&2qawib.c&&L3񐉣&&M7(XtoSZ U3}93R65d^8sg8V f,>#>{*|X}
W#[{p2|M̓f*|i2m?`{g~{?! &2?UuoDhT>C#U˟-Vր'κLb}4̪I㵎쵖ZOuwأeNEc{eb/w/dW={/;	oؓyBjPK}ű  
  PK    A             F   org/bouncycastle/oer/its/etsi102941/AuthorizationResponseMessage.classPMKBA=c3{Ԧz-WRIE Mh9>/Lf'[Qh|ڪ {{ι|zCl'eKmaQjҿ6
BK"])$ )jhNF^z-PV@SM%5֢f-rX>KrCng29:fXZ.2/ylU5J&4Z.ŵ
!kR'PLmn'0
$"M T8C@UǊFGYa!X4e"6L߇hwo^V~&78wp:;RpGL<`:0zG)PKqbj    PK    A             P   org/bouncycastle/oer/its/etsi102941/AuthorizationValidationRequest$Builder.classSJ1=kEC[VED((P1݆&+WEP(qvRE	L&gΜL/O 1S,Uҕzab3'//[厬Gޡ8iaɆu|sn:5M7vJ;oI,\\XZ]^~wJ JN8:ᾨovɜ1k a`XF'5jN:DRNUm GK WݩE#9@D
YqLBSH"p
&Fˍoyuz
J	Y§'$#VZ`!5)G[
BD ; }
0 
G["=&ޑdSfXHPK(  |  PK    A             H   org/bouncycastle/oer/its/etsi102941/AuthorizationValidationRequest.class[s@-@J⹕J[Դm+@+*GWVLIMx_[;nGRhM$q3 gqaǬi"RV}3˶!*.g/xQR+.g8:ɰEwyڞ0HtHi奴/a]4^ee=kYlXi\ymyYKtl1-b',=sw&2v)fn(fZk,aJ/\n
O3''g'kreo?涝bL'Yby{{=MˣAsg0_p!
v*PKna{e8{SږNb~pM![أ{"iTJ*n:N;fغ:j7ߍΰ;Kg_ݮY[y9(sB؇v`4	c!8*{d8B	Np:ePqI8b2aZaSI2bX(ӟ;%y<1Q|zXz F2He˂U@)|h5\Hi'W1'*{$V.F:ìo
!#		O쇴KADiAqAOQ;}AgDW#!]|U0?N@! VzHU3>d\|$'K} zk1&5KQv?PKQ)  w  PK    A             O   org/bouncycastle/oer/its/etsi102941/AuthorizationValidationRequestMessage.classQJ1=S۩tZRD]ZW΄1uh
ORD7.(13Օb 7snoO J!Hm
)A*faǧ+ݞ˔8eJvc]H!PZba\2>;i&guWByH
.Ӭ!|ɽmIӻ;"[0LX.&̯CyqPBB`׀Pj.ulXk+F&}zjs;ߤ}ߊ
(dl$ |ra z+r
:8bc҈Ɛ30F	;LƌdĠ>bvz)fX7H;ϰ+N{aOA0{'<PK.w    PK    A             Q   org/bouncycastle/oer/its/etsi102941/AuthorizationValidationResponse$Builder.classU]OA=S(+
iuhLJ5J$ۄ0dřY%&	Mjj$wN-FdݝsϹ{f2/ VQd5LY䡈~D3AGa&]!_z5@h}KޏxkG[~(꭬a)"p^G{f!='QpJUT?l*D{.X̥'VrjXrk\2v%Z^IJLu~}Gq:S\(W֏^p°ai+0w#qmUC2Z슀vKW|!ip7q8m=sn]k+<.9eC`Y01o3ܰ16&1[6.bZ?g=,R\a*'0,c4[d)m=zoe@m s$e(ZG,;m`r{4t =: 3m<Ye:Զ 5Ph)zF4yv? PKi>  !  PK    A             I   org/bouncycastle/oer/its/etsi102941/AuthorizationValidationResponse.classV[wUNva*H
i	*H	ҖFaL9a'B]˒.|3bCV`<sL^|'yETGT5˦m+JeZu29nzUkbA׬Mnq'9
.yAzU)0ժMû0oxMxީBvESF2FhYaXnmQxXMa:6ä6UeOX<kx\v2WkNݨZDx3Cr ! ތ+b8t
'RafXSxY.<sny|lH-JYgݴ2,ԵnNa+ufޯ}Yn,m0+S

W0
>P!P=c(E[Vky(BtGR˯Q|Rbz@|Cݡ6zfb{e+/|~'KTweH]cRkéQ#obwa72</-gZxwQcHi80
pZH1AżIq^RI䤸,*&pUE_8*NRTL⚊)|%M4*%x7LZѶE~QѼ#'2$K@q2h*"4m3[(꧷o5@
xU3OPw0Q6ƊD-ʌ;
GRT(@x!07Oa0'Q9Ao6d=2rN#Bh4`8LdGqӏR}1s=>lp<Qxj?I%,͔+IWj(XhHc.3It.$U!/PK!  
  PK    A             M   org/bouncycastle/oer/its/etsi102941/AuthorizationValidationResponseCode.classmS[E7<$byjmBkJjV6Z*f{fowCoq82_l6t={M_CpAW~d;_"ӓL6B
uAbGFˊ1:<v0Pf/KAǤj(:W^P"N?QRJGuڡkdkZT*Ln{z7sUbӕSɴ+{!t#-d}J-8:53Eqݬu2w}cK>iƷMŊ~gRZ&~К"Hod<ue@}ZN5SaaSzU,sťs+P4ڛGB\b+:a$5sX7%u
}zX骰ݞ_SdD.uitA'Q(}ΒKT8Y=UzG;S{(m&cFnb/^y{jhwZ<zx.Ȼ'a%Ä(e8a0Ix		It#$Mq
fH\,.RxPt>L
<2M[	WW	E;kw	q7Ә2}mjb)pBE(uu
-ʬ)V>N
C1ikֵvak'vk3f06	fa$HNvQ}
P#1-<~>縘~Lnƌ٘LavRt6iݛ(U0s{hAgj_跧)>0gϛ-?0R1S=Lo~Bm9XYk{ZGjA
F#c]F> 43)#?$kG|lt;dvFџo'FFdt5ߞ1PK    PK    A             P   org/bouncycastle/oer/its/etsi102941/AuthorizationValidationResponseMessage.classQM/CA=SWU{)ag1-
",(;nT?/jEH%HI=s9w> 1ƐZJUވ2V&u#UTU FZeP&Ťo$M
.d,JE'iSݐJDMqO2#"gVl>_Z.=0!HQM4C%r]w~̯CH"*,Ks|l8%ec3q)xMU(pp7x9vd@o)2ЗA:tW"8/F{t9spsġ!gpkʟmHT{N^q
3#cwlc0މl PKMYv    PK    A             F   org/bouncycastle/oer/its/etsi102941/CaCertificateRekeyingMessage.classN1ƿ(&zQCY$*b=&BH<eHWbxhb2OM:7o<>(`!#Ի#h\bXo=޸""P߯8UQhf˥8@:|(SW
MgԦc
/\qk-EUzbW*Zg5Q+6}G#q`DW[+#O-rM/k`HB*S#0+MU-Fhl	VٳFe
(bθv֓&!X_a"ao<:0u>\Ȏ3'PKe    PK    A             F   org/bouncycastle/oer/its/etsi102941/CaCertificateRequest$Builder.classSJ@=c1o.bŅ/DJe^e$ݸw((GjA9sy~yx0	Dn@mER
{!9NB-E@9wl	<~Pm^s.ShKlJfjkNmD/Q(`F/-(ֵibZޭq#@@6FlUNIuv.,R3Wr
ѿkӯr<߭?t[Kuhhj7,ӂ.-ЛB}o&,
X.}G)Rd|_X$DUg
hcG Z7 5 25h!yue[d1hc"
PK5t    PK    A             >   org/bouncycastle/oer/its/etsi102941/CaCertificateRequest.class[S@KPD@jIPDE**cg:iM
>XGۋ~(l	9{7 ߌ&P|(SO-JleK|>e<Yoxah-pq<aޣ"ɧCy2e!Jǒ-[uµeim)Þr%&/	0݂/s4<as>}q⼑)Ϊh%YE375c4Et.<+9<rm44w`~&:xk< r{T
Z&lkqҖNKr0k-Yz*(hSpHA
:t*80;{pL1\#ns|,>QDu
)yvvI@J=ߍT"\߯5t=M0 &p]2c[+vS%o#'r)\戀
u4YQ_"8tA!i"hƠ:#͹$ ނ(I¨n\Rуi.K3WT\U'GOᚊӛqy"n6<O^\mYa/'p 6SJ_2jjޥ^)BԶkULhkW Ԝipd
RѶ\'w-ϸ-	p{; g +ӥ д@rާQۧDV_h_E4}T
lvC	JBZtcpj}gT^Eo+NBͅ>[ŭ54"h^E_ujJmZPK鎚/    PK    A             E   org/bouncycastle/oer/its/etsi102941/CaCertificateRequestMessage.classN1OA_FetAO"h (&>o+&F7.|(ct%ؤ=ݦO/ aHn2[#>TZHön=tP;CJWBj@+NZnP*,y	M^H)|ikMĮТr?wcagb@DJuWŮPj:F>?73A3/Ha4bDֆT/2$avwq .k"[
7`Q3gYz}HtO&#0Cyqޑ}u<b1Kg/PK[IQc    PK    A             J   org/bouncycastle/oer/its/etsi102941/CertificateRevocationListMessage.classPMKBA=3{Ԧz-WR! #=d^9O_ت(ڴGEVEs{=w eHnK%Ma$ SUBx#V/iZy|"Q(6Fs2ZzBejy&}a:2T5i-kZwHAEQ!ť..3~P~MD
Ь T,(ʐ2R\to	9k0B:FH"4R0Ɛ(MѺŞ<aR蝸N[4ib6'ݕ{LEDoOd̀G~
)N}C	Ή{LtY*f"X&|PK
1ҹf    PK    A             2   org/bouncycastle/oer/its/etsi102941/CrlEntry.classR]kA=M6iմ~X0$%"4`ڇP4;[ٰ;_H_X?J
d̽s9ޙ>\ hcBycoF*ҏ<jӡꝺ72cXLKytq,^~P;ixJ*wˡp/IC%'"ӱ"S.<u<F*d.)tI+r7.M=CHJ>=I=ʌ?&J&,&>~V4g*}
Irzeg 20(`.7+RpBauX'bLx]B,#_s`9!:y:9	.[Tαt&%Tw0aPȋd;"TJ]BSI`
'c=*PK2Yd|    PK    A             4   org/bouncycastle/oer/its/etsi102941/CtlCommand.classURA=Ce
Ԩ!kB(DysLe7G
UJ,vocJS==/g ^;6
ĒPu}Wl<d|V(^&5<QP:!ֳ^uqsWɲ1P9Z9^ɀ\Qzn~sj@`C(mO;y Raa^QE֟)]r؂UI` (`w8=e˲G&ӫ7V*}ۿdl+]vӇ:k9Ҥxt6M⳾.=Yr].]

l2@-f`;1s圧lNN~ZdIK%\SHNhzMJ6 ތ0H^4h¹Z|'ר_2
RYdK/97#"?݈	OjڱBXBV,"ڠ)ֆ-k6Y؀4c,w ,N؅&qXͶ=81{q$P\41.К	<3A8OjZOi<.?	zhRaqfB$dm!}6k;	-;d%ϟT7Ȧ+KE#3[=q}Bp}<I2n-9bO]+蟭J\,Ye*!KoTiA}Cg'q܀QI'$N;	hO}Db)$fSx7*$~D$71)Fn-:mGaZbKnz3fsym[}i{F}Q+;V*PK,X  c  PK    A             3   org/bouncycastle/oer/its/etsi102941/CtlDelete.classUmSW~.	lXTT(.VTT*6,w꺛In38eƶ_=' (p9>9/p?&pR @-/A[]v$W Ȳ"yzv?+}Hp(J
wȜ{f\Z{.";F쀝dŐ`=7Ո"*SA,tX})wdIya pf^Pz+\jreW5mf>?d.pB^e[fm!TdQMpkܓOq{p,[XRUլc:MԾpOJ61jZSJbەgͻ7NzT^z[Ta12z5$5|ᔆ>
5pVCsԇCo2{wy3h"2.H&($Ԗqn'!G3m~U/4n|ēo'r-[Wbyڢ6#{~M-5
,?0@n8qdm@XbkYޛ4p_F7Ҙb#[,nEN]M,fuNnu12td-}_rKGO.*?d/+y.m8ud/JIOr&hpߓu҅Y?UU+L|#A
1/opoWƌճh C[kVce[Hjx8M<!gݩP/ u/!ME$At3Q
 1G7D(Q5߀]`/H!aG3{[<aeCllGӀ$I?F
^Z~a`|YNnaIPK\0tz    PK    A             2   org/bouncycastle/oer/its/etsi102941/CtlEntry.classVmSU~6,,[)Z+ئ-!ФT|UF)EhZ[{٬ۥLra7p%Q9&leN3sssg_+T0 7pMAlvmyCB]!GT*["xنϐNΕ(&-Sf} myo+mr^![mW֒GlwK8v) gL(8!D;i	gjmM
"mUpr*koNɬ*HxU+mcCԤcfḒ͝.MށZŃ)|,yxYز1e͞|?SݰrߕqvL7ϓC-}zjPaESV0(=Nr.ₑ^T`P"QqV1ℊ*^SqJ*FUxi͹WyMprbE# %~-ҴqR.D2ڬ
11':nI:NK{.!~HcDCԗ?/M?w/Ǹ]^msy\bsGE*C}яtGDG:buxtl]Yp!7F
XҐ"-R7O>c(h²K\+2Xp_hƗ'9_r/_xtKT
>])
iŧpd|Mc<Z@qqN4Fi",7JSuSIM=ݟ!ʢO|Bv3	ؠA!hQ< Igxʾ	vvxqbp|u|_2#**G[ޥ)ԞMKvOw.3xlEi:4	_DIQʅv?u>a70Ɖ9gQ8
t:&gZr~Q>mN}x̏p|SEV`ZfPKB'    PK    A             ;   org/bouncycastle/oer/its/etsi102941/CtlFormat$Builder.classVrF6	Q@P@
$`;P!P$Kph
vd{qEeH<J߂v\2Cf{tz/(f<gWwn{}8HaiXfk{H	a;n'w%:f+U۟3N͢[:p2/S*vyyN~I3,:(r5
LetJOr<$7Ԏ3c-.IEZuڋ</ӱAg<OI6!S/',WөXq,n1I["wuat.<367;*{@xŴ
U?vf[_rzxY枾LehlAS4:H#HT婴r׫ݴ[QpT1|
>VpJiKo[ݨhFo"ȁK}j1K`')I״+T8R@7n'p',+1pA s>9! h4y>>~vsfu
Cz{-=1û|>Q{?i]3leΐCeYv(1D5`Vça
4L(F5hZL$w/RJ"!]!5pIiSqߨ"|M/֟Soms7amL#}1r'3aDMڈRF`2%i7E+ҿB~VqЪDgfUp+ Zp{ ,5 ~$`*kla'{J pC{v;*TXVC?u=%kQ"߰!>B;N
{߽Y(yRJpo3nVkzBRu:PKI    PK    A             3   org/bouncycastle/oer/its/etsi102941/CtlFormat.classVmWd!%CM@ز5,M	?ϱcG~?JΡ
~5i7 aEЙrC@i]b~Ǵ"YY\6{t؏;.0W6+xwkwqŝ%ekM|]l3OҎe^:=o}hx5Ht`tl1	ee%5gYdXN^m{>@:wv˂zS
NJzq,fF{EELVGSxMuiM6sxZ,9A'ds0zX͆t7\fhd[KOor,;cA s+k"|jyãY6=snݣD\K"."=񁈫">
򩓔0{*dE	<
|njӠrr8j^ŴK
Ud2dxt(<%wt[{sδ󈑗6Cu
6Oqv̄3"m

jMUKvZ\pۅTΛ@:g2Іw0"ȈCяQ"2CF\ɸqbJF>.q1XbϹA,KGn⁄[\|%6V$[!<@a?a uk-g۬em׫yFCc{e_<]G~RJ+V	D$M:
roTO*te
e R3e'"65NG^/=Ġ/[%
߽㔩̩.5w%&%b͙$ +@8E zMUDb_}Hk| PÉHgki]oxHFZeiި%̵P?ci~RWɚ:Cmjw 5=tߩwsrM9v (F0]#w	"PwU$MPKt5    PK    A             2   org/bouncycastle/oer/its/etsi102941/DcDelete.class[KQ'׬WMVt]5%>HJ!m M+x+GHRAڗ>CI*h0?30쟿? T!m0Obi	Ē`ѫ!#/hBK3,Qiǁ{XqPvj|?/\ɰx?RV;P("Ǔ#d_lVĭ_Hؔ1=P$}4h5&	w|ޘ*CZ/<iݍYES4lޕjo0~XU
`@
@JM(S0d&0PR扎<uN̛pΝoHGyXd5N*K]y`^=WOE	SJ|5ͦB<ðf
O;Xlvweba:`\bt9O(UD/PK6=  R  PK    A             9   org/bouncycastle/oer/its/etsi102941/DcEntry$Builder.classJ@jmlM+^UE*(^wX#!ݭPAIRi,&g3l?^ bVp*Cl\RF *r{Qus	rE.K#Uu& ђKK%ߩGJdIAiNTT`Bڂ%p
wn
EfYV6_tSХ}G_w3GZsm;-6MO6щ>q 8gу,l-jާT9H>CRњ4XÿCF&SyNAhӼO2ď@&yL U\|X!w |C0WgG<b_Ys2PKF W    PK    A             1   org/bouncycastle/oer/its/etsi102941/DcEntry.classUrA=HVb4DEc./x/Q(eu7V/*
)S^|.*K}tz
C E˱9T2&(_^ϟWco1Ql.u6Z_hnPbb/6m^1W>-|IXp*zɭ:i;)=S9[6J6UuF5
SΐBsK0?0.tK:^3o[rOU1iqSSeWL%bezkۏc^Ηx)2	WqǳYzA `PvC
v(ة`X.7zl5͐Yg9xM;Hnb%5KsoHِJ7D]GR;Og!Dqk[ycx>G0A_A9	:*da$9!0&b?fTQLKsZy1dNŘ<nHq
>`Aӛ=`HFò[Z
ˆ+ 
dnCZ
;'M%01aVOZ2Id$b&+^)*T$IǛ3ȏi_}U+6-jԐ]edA
&N_{j}6Vx/5Hb($OB
9a#]m`XåkJ~
?PK?B"!    PK    A             2   org/bouncycastle/oer/its/etsi102941/DeltaCtl.classœNAƿ).ZQȰ1Th%r=6&<
oQa ^1̙~g9W <`E2rKCzK&ZȐfU[PGHtL\$2`CdxtAihHQG:ᤓ(X)U^ufXGb-d#k#gòa3tiՅ]x/x,d)Յq` .%G]%˱+kmgfԥ'^om7WG`g<mS\MuB.3<J2<0<LZ$qӁtqb![Sm

-·ASb¬q:HǄyϜJ3/.}ĭRv҇0^y"28	U<Wawǘ?PwQ07kPKD  w  PK    A             9   org/bouncycastle/oer/its/etsi102941/EaEntry$Builder.classSJ@=jckZw塶
D@-}}ЂoqHH 

D"(~8mPlfvf9;"C4\aخB-K*uٮв,ʮKQl)[q'#k~tq#-J<_xUҎ9r[@/ΥVI]lj3:hl0g ΰ|wvaW6y'+y.[Tq-W#$
ݕS~~Qđh`3@	0`bOɻfKPJ*>I.Jm%"I,L}E3f|nl4B0h 0-@l]0YF,5jT3	iAOPKqX  Y  PK    A             1   org/bouncycastle/oer/its/etsi102941/EaEntry.classU]sF=k;-~PncP$%Ai,Q!@FԿ48L}CTۻAgwwO xDJ|%۵+#W,Krvee;£mx)@ld|CK"|ak_J2kWU8Y3U3GB$ָ"Q
G	76w*^XtMa7[~nɨLjnu3ogub!ooԺ`&0W^qj
X2WPP|4}~~dt;s{;5=)aL&MWb߉'d0MYe~l`\AZ
&Sp\
>R	Caqq_Q-lQ$FqyHn WdBS9ٿGq@Ng)׋ݹY걗&ÅL߸KdX0^[Scߧsk.8QNb)yL,i$$1p9%ՠaZBIY
2,$\0$.8pY5*nD"'y1\WGL,47U]WxaOZoUyI1K82eN8I0=ZeU	^-6L6n
d]6'nk]|o.NӬ_s|)&TKǊCj%b]e`8b

f)
F)/dFR7Fw;XlcymQp	8RaH
|T|mG"o?E=M۹]Lևz\RVvpu

u'Jy"WonOP1G'PK6  @	  PK    A             A   org/bouncycastle/oer/its/etsi102941/EnrolmentRequestMessage.classPMO1(G,`Hr0&nY.bO_	ыIi{3^U'<U!u:R1as
Ҷ?fRu9eRX<vCR})I/߽B:\JjuNGڒpkzNU8ua=ŝrQ13/o]T`qέ|U}C
jP9~2v:?Mwh9
dRiD0B̥yXw5b.Ǻ%k5j>K!#ԓ:C?`|q
cd#|#2; _PK&G-Nm    PK    A             ?   org/bouncycastle/oer/its/etsi102941/EnrolmentResponseCode.class[SEm/!ᖘ$bJD6
xkf;l:ӋQ,]RVV&D,ݪwK9=ii8h/LTWt*l:ls^@p5/D.UՁ+DzE
8YU/RZ*$B7ȟu'J/ޮ REJv*U uׂ$!Z{N}+
*ie䠦"e,PVr6P["R5j2FNܔtݦugWI+zĘo-Q
K0c+'M!CA:_naUtԄ^/By-tp)ZP޶'ʒHTi~Ԃ}̑H%I0uTiAQ]=I&-oEUZ
tjSEߪЏ@d0Υp>fw4@.FF)#=6Q814_<zimCzzhg׏,,"W]t3\Fe3N3CaKQ\"HeXM8"Ik.ҸxEJ1Ÿx1͸xm:c1xq#q,dq2cTdq	7xe-m,3ʌی;ϱ3-kmb-yi@jgl~kGY;fv[{k56gKܠ d#1Mx<.FĴM٘)NbVHn
F;)BG;;?ѻjWTvs&ޙ^bqрkԃ~@U}0=\\mQ/[/vyz^gR[io/eYvȲ,SF~2m˾VĪѭ[1}FwѮ3\PK
    PK    A             B   org/bouncycastle/oer/its/etsi102941/EnrolmentResponseMessage.classPMO1}dQ>E]eDbb	hhN6EZM)<i41z2EOM:yʹ X`H]qTZHÞ[to\tP{#AW?H!x''_(^sARIuCFJ	k7-^1צE#%y{ҫHw` 0ưZ}S!"r6%/~6Wmq-xGH_3&ǗdL1gD.a!z'Z5mVdh)V荃s9=f"FbfT}fXOL^E-R3Sa0GޱlPK[o    PK    A             :   org/bouncycastle/oer/its/etsi102941/EtsiTs102941Data.classURA=C% 

"Q4U)0n	OVɥG=IV%P}=}?@
GDvR,O1TZ%cn6	W.[w^$:
+L5ʝ9ϸc3t2MxLMfDJȂLXq6vtEk\(b'Us%EUrũX~$Ҡȋ@kGBFE7̘d' rWL4wƽY`Ȫ#I BZI;fQWA
\TШI%fa0PYESRf6{rb"cɰК
 he!%mvkAD<SYΉR%HS+>kBOK-c"{NtySʒ3}zi^\Aͨ
/jP)./Tܔ-iz.M4wj!MPъ~mIsOaT	2:FT}~ܥ´J0E@l&!`m(j# zpzl25.VCz#\7}у}<8DD2+Lᱬ -PS,hZshҿ+|whw|_xxLfw>-TQP@V]nv0F'x>~܂`@Up-<x0oPKz     PK    A             A   org/bouncycastle/oer/its/etsi102941/EtsiTs102941DataContent.classV[SEF.@	\%qAb`X1he`box>Y>`TyyGh`,o}=}N_+^|S:X'T(PROPШ5VZxM^ʱ=mCnuK4zDy4t_
l51YꋻiqC/iƌc]2F|EpӖ0HX='uv¬+jgƽ={G&#8=\̱;o,0!WgA5=_YX\O:
zd8fY"[n2q
6D[w]NM+!\
ٲvMm1tϷDXhw~۸C>^܅bODXaF-~pæy߳|I$ϕ)xJZ|2:f\?gv4(ƁG
tqǜNe;Ct֎9k(?R k}OkΛ;$*aC%PP͠10TPqP*TVѮCO8☊*NTT)Tö$tc}T[#s[[J8mvJ3+ɓ'=j68{!Ϯ6r)L^l	9vmQqI#驇/FݵvGv-X(]kn,$ۻU=bKZw?$lah,
p
#l]	lЌklMp[<0u^a*kW#7t
}a0$n2j000ai¼lTL
p4\DJ\
1x.⊈Kd?^)'|ݘ\ARCЊ#+d$G%&J4*wH#?C|{WK)ğ&^#I.'^/gh5jn˗$ћ$A˱6C!:y?]K]s]FϿ3]x}F+>h1@
뛡OEsh߲ƻ)ϖ?%B?%UMjeq/2_@PJ57;QOO?9X̢<r{҂\YGw
RO4":}h
dxNPNn8k?PKk    PK    A             1   org/bouncycastle/oer/its/etsi102941/FillCtl.class[/Aߩ]Up#[2!	M$ti!S7.(1C$$s;=,FU?CoV)z0%k^wHE|Zo"I5|w!uy^V!݉~͘270=w6cq!x 
+r띡?'chh$"REs?c>K+e2__L
)p[\RZaY
1$+;}	H6T,/,(Ӣ(Im4l]հz7}zx|.1cz6to}n϶#+XC
Y]+FZcv
xPK  /  PK    A             1   org/bouncycastle/oer/its/etsi102941/FullCtl.classJ#AIw;L6F(e Jd@E0J:v4]|""
Pb%"L2)sϷ g0W?&H#UUKOD* .;LmVIjq_ETkˋ*(VS((R;4cbDDaqil
K
q!x :?6SQ`	3$: EZ/p'"wcm&UX񛴞+e@?\T6}(OtElø/IHtR/*+gQ
h4agav+x&u_{UM1=N?q}2jߜGXWX	;XLv1a`iPKF!  /  PK    A             @   org/bouncycastle/oer/its/etsi102941/InnerAtRequest$Builder.classUkOA=S(k!JZ01R$hЄi%w+Mjj$cSۺdsdן?a$:`&
ʎ){T 99}ݪ-_{>XB2sT<K|i,
3LX,ӵW:6AUb5Ϯۖ.7-e͗{(}ǫ0z`U&ɮ06'%
5-sa\knUi:*-L
.w)M34/[>/bW445&VކWj.(z/2$o/^ɢ\9 ELE?,"PGNi쳲C>2j?yPR}Kusfkfq݀&d`L
Q(^HaEGIsHGF"t5wѝj..U!f	"/BhYe)
u]my@4WYE)3
ra p
g;|&AnB ]$W,a0ݠԠXm"alШ]PK	9P  P  PK    A             8   org/bouncycastle/oer/its/etsi102941/InnerAtRequest.classV]wE~&6nmFڐ-ijFi
6_fkt_d+Y]zWx)=u
".Q.ޙayfv~4!HX<Mмe[Y2y*ڦ[rKi]^8<XH4"w3pX6)"k;IZ1]Zr%K@0-iwCxr$m5<6ZɴZTEkv3OZea\-jrM-qt줖W;_.9uDݪe)qzZe61S2jhu䍩餖m^m\fo!w4d+g:ݩpG;r4fҶuUPHpˢUkr'\¨$𲄳I8/	J0)[x)_%#\â\l4w>{ݺ*$=X/գ՜muC 6/Anl<7HS>xbOvK/lIeO,َkנAHr}vDUo*8KPPpA3M)2n3#̜0)ał0o0ic'#E$

&+cʄ/cB@=x #eh..LZ]3ՊYy(h J@AE4켑Fʑa$VW1A/ul=^êz!!~"gZ'01#x5x!zs]h&B: ;
7c@BTXe6NWFbH]w#jϱYGl%> P8CPT#7l4Gojs{l5_G}ێcܐ~F@DAM7<U	^Ǉ
ԛ
^́}LuMi)PK/g  =  PK    A             A   org/bouncycastle/oer/its/etsi102941/InnerAtResponse$Builder.classTNA=Ү]V
Z]mH$I!!Z,c|kRS#CRmds{fw~J|a!߮qB#?Q8 
)f=iyrQVU._G[	ܰpO1"QsvzzTw\յ꺧Pk=WJåӣ|VR].zuNYPR낿srmJKcnkD0ޚ1p@ʀi`Ԁ05南.o"YH\Ga2Ux|ZҢF+y,O,ܓ}{VCrz?uܨa?j6
䦅da-$pbf
YLaFLLⶉ4r&2k"0`Z֬\btPӂŴf+,$֦ۡV$&jN-FѰ`\kt魹	 qLSz#d4P&4~PKn4+  8  PK    A             9   org/bouncycastle/oer/its/etsi102941/InnerAtResponse.classV[WW'	L2RS[L"cXBiS28v3'.?SL*UV}CTw&4w.{s˜i|ETGtU˖c+ZͲ׹0drOX,$M>'|OSG\,th `c /K_4:>_p׉Uî#㉑
+6vsG|CX0zܚ[s̟L63+N]7lJj܎lE/³*j\A׋˯1{r/T\^
B3lK9.|kr4\]zfHdN/9
20߂5~<&fgrE:Cv}GM#\{`X{
)+x_
N(@žJgߋ<LIa ^xzu7%tFI"RfҽTw''ۮFl} nL|tl
-YƋ?nb7^"'V}:5ө`&g^יw&c5DF]'k@D!LhP1-\fFQƐD^̩U	̫8*4i*pM8nHsSY|mAE
GO%>apXO02e8G_,"G:-s[ !km6DDgcih%XKφ6Jl$-@0[yPS>aq!I(MS7?#DrS;HVm|U&l4Ϛ
Kw6x(e}TۭOknO`0XeO1JDʕ+mr
v T*u|J>EWPKW)P  +
  PK    A             @   org/bouncycastle/oer/its/etsi102941/InnerEcRequest$Builder.classUn@=6uc\hiz\&"
B$HET,+{|
HAAT~ 1!T[ڙsfvfw <`Byl9x0krWX-y}cBv86=l	Pa94m8U}|MZܪ^Y7
O\7<'?.p-ʐjIV³R釙oحIќo2Ⱦl=FcPm/,m6־.b",}.2M.UTTV*8@S0ͰӻTW1d)~==6i
m
(NDތc">z 	##΀M1#dlɼ43bv|
ک=
S!e
pYyh ØIKfnaME1X@RJ:UZۆq׉ehd-KUd"ާlB&6>C>tQ$);Oj+"$1{M3Knp7z`6(E,ca?Ѡ4Ab
7>elҨ]g
PK[c    PK    A             8   org/bouncycastle/oer/its/etsi102941/InnerEcRequest.classV[WU	2DVK-%d:
R@jmZȴh4N
tO\K.Y^|}&`%	%o_Ͽ1!g}Zl[f
U\èzdoU-c8ǟnsň˿rG*"s%ۍNY3fuZ16LjlpKj9VqZu'V6쒖-y(Ru^ɷ=b3LUVTms4\5õZJ%3Y)2y1't)@DQ7Jp3ff 3ۆpG5V쵹mdF7h6z/6w{l}ۇNa
1f*C뎵ey.aD«F%IxM¸Hx]2̬4vd%seMt}OV^#K,Ų.Ei7X7֣mGv6og׊\{$>a4K}SPJ.ި>[aӛv{:YN˝#ۅ8ܼ<7TP0
Ā B\Qp
o&Ĭ0b^!X
#e!))##"n"+c
dݖ1- pWɈaZ`RWOolxq
a~jlJr%O DV+寔#a%> .a N5l=Sa]=ڏ~k6g/}LX
&9tAOgb&!ီqHƵ9hT@{#}Dsl.mDW
A'ig)sM:כaATG}W1~[B7=k޼`kc:_CK24#PKZ$    PK    A             D   org/bouncycastle/oer/its/etsi102941/InnerEcRequestSignedForPop.classQ]KA=YK=kR!AJ&A?aOFAKhܵm`̹s/3_/o rX'EX˪p%'rmtz+2W~n݀{Ԗ.ҵL63iUޯXW*WSfe
e&o!!a`;]=maZ
<E望|ˑYZ%GH.gpu=]&ӝ1_^At8#CCBGRKfݞ^5JxUrP{U2
3l쎰)B6GU&>sa|@{Dx64>|vc<ci!*'PK!a    PK    A             A   org/bouncycastle/oer/its/etsi102941/InnerEcResponse$Builder.classTO@~1Ja?QAlEMHAM#0$J9fImf	427nɽo>}ݯ?~XF@<2uqL?3=WqyARxċ0ո|/\ampOFvFzTgy)6ú>Xd\IXx\d}zk`e
?lp%.jݕoآïD{<)Z'j_&&,&l/[S|UfG(xS~z{ª=%JYҿy'kD5sC4BC<3H,-q$H1zG\g`Nzcaw-}qπc;nR	\)<1gp#)iv$Y06݌pZpB_tb:EEYKp[u#aP+L @0qǦvҤBM[xp.hQ̐gPKBk$  ,  PK    A             9   org/bouncycastle/oer/its/etsi102941/InnerEcResponse.classU]sF=k;R@?h!2T1I		!S8MEY\Q!>u ipR҇qy=s73 36\9k×M0H
.È]|`N'F?4mgS΃4:z#l{N֪~"D<}0|6KeM4=Pkn׵en-#n'Mfpܺ4lGC|kgB6
}"P~wMN:Wmp?zi%fjJ%HMBLӸs3d%\ktnٶ[2:L&u0ܬVZ5wO:1s0#皏L|%JxG1	I	Jp\		Ix!E~dX={P?]~;_g6[
H$ սdbΟv/Щ)YdWKp1ׄĐu(+!^%Kb?}~wEo,5"$r
$
>BTb"aJ>
b.4"\a^8HaAi\qWDX$cdL7e2іdd@v*AMpwUli:	")rYRq0gkJ!cjw6mRook6BU?Eex-ɚXKG
|,)ԒPZ}H[>Qq	i dq3q\W#]khbmmur
	B'mc4
!w|2ll'0gvgch)ۓ
S8Z	j-ZmbNB=8IEWo(4f_#PKǖ  
  PK    A             H   org/bouncycastle/oer/its/etsi102941/RcaCertificateTrustListMessage.class.CAƿm
ҠHZIh#,̥3xoQ+B"l,<֊̙L@-)2d6B0^ʿ6MB+oW*])2|3hNFK/\{%jy&}ajkS"_ +ߵך0*E
*xsk$"o5WhfEيR)*ZP?opfnHgP	dp0FF⥰a?|j/.k$Z[5`-I-(fτt>ޫl&ӯ#0¹E}qߐ}s>`cֱdOPKWe    PK    A             O   org/bouncycastle/oer/its/etsi102941/RcaDoubleSignedLinkCertificateMessage.classJBAƿQZԦ-[RY! #htQiCEVEsfs;ü<>a!/G-K~u[WM\#F]
Mo&:\ꀓ~⊒߭&=ET"uT aCQZbVV+?|o팡k$"g+ozGdDW;-ǏMrM/.Ka|iDJ"L&H$C7̿OԴp[Uqu*KƖ`EM!=gԌE3ɤG\WXwH/z2OL1c=`ّtPKnki    PK    A             O   org/bouncycastle/oer/its/etsi102941/RcaSingleSignedLinkCertificateMessage.classJ1OjXn"-jU.
#+I!mh'
>oQWƅ%S])Mν~7@seH+*Byİt|^wPP9|=t\Te
å9P:RǞpJ_Q*UL-/'4(oX[Xk?0ד/}qKo/2(Y/^ooD9P jSG&y&?tZ0B*)$KB6d?3A{k剨	ƖDo~C0{ƨ)3a<`>r{cOc&#0oC~յߑ{uf?b]5و/PKKJi    PK    A             =   org/bouncycastle/oer/its/etsi102941/RootCaEntry$Builder.classR[KA溚fe{zP{MACC%B:ʲ;cC
hvDp9g;gf?^ TG[6Ap.ص㈺ް;$H;ZݣW>3um;:s)8eQRH<qp>0s<gV=u&iͯՄ:0ƹ6DN/R.֪!&$u
kf	ʹ"Sd-9@)ru4(HhP= \*8<Vú

Cufn9g6 MR!ZڮR~cl=+HN>Yx2s@S@n#I2Bf2+*lkOPKuUu  o  PK    A             5   org/bouncycastle/oer/its/etsi102941/RootCaEntry.classU[S@=K)1ֻ(m"XPV(Eg:>tDcQg!>pF-#mZ墾|{;w VTFVx˟q['5\\gAU.^(,o&g|\0lUSxeEb"wk}mܷ=ZkyU躼jA{s=~P5gg?PܴB/kngWQ
!fAW
S1w<0'S˖`8"4Pl9_2\^Xn遑a@鰱@8m	
fkR,8U7\YL	ǎpr
(QU6I`r;S$ǫdRttk3D:`CH){<r9\fI\\N
ϭLaskE<ٍQx"6N\=s_t6"~^S޵0.Ȗ-
pHiv#qik9;*q
	d9AdUÐ8 9#9}8 FɩV/q8O7&+$hEA K²ݲDD.qo%4*`)7hK=F;'a
)&⴦fRkt/b_9c|ץB#V/h1Lk~?
t.+Fc+$/oY^6pl~YH*Mm4JN-Fl{<tǚil,)+:
ZASMڎ(/@b:-	$(KQD/PKo<    PK    A             D   org/bouncycastle/oer/its/etsi102941/SequenceOfCrlEntry$Builder.classRMo1}N?lv!Z(@Kwa)`q@C%iȕ񪶷R#@*QqPH/䱟̛_ Da*_3n	%l+z*f4|;ش3B.Ya{dGY"3KvC*ɶY1@w:<u/i;'9׉&ֈGnn$wޝ׸W|(ֿ٥'ydbiB,EhRRD
-t,%s:[޶&?(VvH9;kJ`qfX1>Bw\*VpwQfޥ
^)uSfpӜ3b)zp,sr#Bo p~p_P>`0K3jbW8dRBX1G1cT{1+'@PK5{    PK    A             <   org/bouncycastle/oer/its/etsi102941/SequenceOfCrlEntry.classU[SPN"xf)
ED@EEEFD/Ψ?i
Ltͷgݓ+~<b(	u=Cexhi^Ob.)+\U͵h|*<n%줶`%|!eIa9nyݦ>af%(StGl[Җ55:8Jp	АFma[6o
Q7fV&K{1쏚^XmC딞uoЍ< cjx{Vs0ߌ>,8|4ǎͮVyn1^,GN GG%GG5G-GG=GG#q&rl.POdBԇALZT
#sC*fqcȡvǃBmu+Ian+KBTD!C{hY(jp/HSA%忇)CEd!$LF9|2j(E=*DX	\q2$\b  J83Jhv\ↄH8qp:)Y	q-bk.',Kw溙~/&WsbJCJV?i>tѱOfZ}V(Pp#neO?%M|WqkL_[4&1w)=I6Xs99Z8ՋD] }leL Z)Q#e7Tm 8*,Oݫ} sԐ&"S>fz[܌\
X:ZN"dx@RCPK`SP    PK    A             F   org/bouncycastle/oer/its/etsi102941/SequenceOfCtlCommand$Builder.classRMOA}|;0z10!\$ل	=kޙ8cfU?X,;~yU
cAx0ٔ4[}͸)A Om\<niQݒ0LKR҈f[)u6J#U]Aw:lE7je9pmrQDH-=~7:bUbTz<|^uy$
Ui+f(֟;#Pusx,EIro2u/_	B\	^F?*$s:{50ao&qy,m=➋Ncwa$Oix,EBN4ؤ@v^\'ˬ퀐}o?'?w_
mX
7̅aLCc钝RP	PK5    PK    A             >   org/bouncycastle/oer/its/etsi102941/SequenceOfCtlCommand.classU[S@TMU!7K	hE
*
7FDџ/Ψ}?A=
03=s|gw/ p&7o0Ԏ2ƒyGg?%uX)L]\+')+eESQ-fLC(q{yY.C7!-ӬeO47;gSKMx;zpZBi)ϰ-
T§7Bԗg驢&ΝYsO)3CΔ"LU,غkDO0UK
2WfױNwElxKBBDge;m<6Bv}u
989Z8Z98pfў]URH!YKjqFQq
[94myQ\asd;&SS#}vg1܅ޮ|J1ǔ0BekTsPCXÕ$&QQU0aKMmvQD{Rb2ȨOF#!cPP832cH""&q	bփLJŘ㘒7.aDK!tbT	6Nӽ O[Muu뒞z6=-N (\7}x'iMI! >\+ ~aSi$I}
Gr:;'V1m4ɰU??R\{dC*9=/.l-5Ql)H^(2DShP!+Y;^PVp#De7{
4DQFz)q%ĩb^B}
Z]HGr)x2%+GF/PK"xT    PK    A             A   org/bouncycastle/oer/its/etsi102941/SharedAtRequest$Builder.classUNQ=)Eu[$*#HB
	 u&}MjH$|8ҸE+n2s9gfnvJܦ`ŢC]UR6vmq%?VvONYmЛ'ɷҪIoZo^RZoxvӖ%d-lۊTEǰ!X|UE*pK_8ATf&_;Tmej
E@: +z)r&3`HH8-0ֻ#ʳRWKadɛ)Br9stǧst8lW'2%gy61
}JO{8mαQ E!ܣy5=6QɿG!D֦S79&Λmb\I LksMIIb7M}*KuU#&LsP&q4b홻홞)^}>A_øy=a1/|F>8 3]`-	`t[ݸ3+Q0^`:K8Vr[d-q06>) PKP    PK    A             9   org/bouncycastle/oer/its/etsi102941/SharedAtRequest.classVVW	2R(ڊFLCZhTc(e6Foҫ]WYm}>@}$ڕ49g=3_0}x"CaUX3en3Am^ry9k,c,Hv[<~Mɐ!L;|g]HV;Cg&8J5Qa?ժnV|+z5cWj[tsK|5,2{Zjfi;ncԌʙ%Mp&PQ\"4zZlg;+]ϭйئcq[5\GcggSۼi!}صfXu;Q;:zP2s4=_ܙn&/sv
et-їU2\0(aH°w$H8!ᤄw%'ᔄQE_sfȴkıx|.}8ݫ
J'/^#M.Ui]3Hx7znf/tW'CX~NSp9H<ǴVѺ?W{{r4>:wKg_oF"N# >;ULXO\#|* #ceDqd㚀	ܐI歷IreLᎌ8OSZePElUw\pI^oKr#O Ey+%譔#a%~CsA/JkJr=,)
ag_Ha &OXaJ2w+Az{Mp&{:F"~7ΒWFѧ<ClWب]"R2.5h/XҢbx)vrS> ^i Պ>(HB@DVXBHXku|~\l0x51Y-L$MPKH    PK    A             H   org/bouncycastle/oer/its/etsi102941/TlmCertificateTrustListMessage.class.CAƿm
ҠHZIh#,PsL%[Ԋ%"$sfs;yx|4CbK*iC=P>1̅öo|MJWmL;L!4-5/J2TP֦"'E`!@Vr5k5eaDU2/T~CDIDj2닲PR&/TĵM~X?#2oRݐ 4Ȧ`8d/0Ka~p|_\DI$k[ݓV[P̞	ww#S}WOL_G<`}s!}=:cS;PK6e    PK    A             :   org/bouncycastle/oer/its/etsi102941/TlmEntry$Builder.classJ@ikݗEBD\@*xc	L_kPIhUL70yy}|C8pб)<lJ1Gr[{iyl˵uT1K,Y9׎-KKheqrze=l5+d~[aDq<'J/\jq.F&;]'CK<Wtd՜h7a`X8ht7cWk
}O'[SɖvQVsZoSaMtׄX#P0E7Fah趬_h{YV+MfP]Lbzgh[&<QԖ	
Q6ROրρODhC_
:;KUHB*H<`NRRL#PK})x)    PK    A             2   org/bouncycastle/oer/its/etsi102941/TlmEntry.classU]sT=v"[qjR-Nm-(nL~9[IFnÓ"xT)Hra2?
+4'v;jϞ=w_
Jd+daڦaL7yiVӴeOwz6mg~Ǔvrlcb{Nnm1ŗ7I;[ٰۚy]6
m*p9naҋMjcZP+UrnMfH9nCr=y=ȗmé[Q%OF+l'CSAw0s9UkAɺ0b}^[,ժS}Cu!Nȥzsj^{3x154#kKsޖ0!ἄaȮE i}Pʫ|״Eq]2J2Qd3_әX{`w΅~CL%
` ݾp};
\>Ę1I[o?@˖y~IblF5'Zv3Q|ǻcRca2q!+af1+L^9a
q'10/̂02.ᆌPħ掌)ܒq%a-#-pbIFwF:}n>hn|Vŕ'eH6)!:	V(U#%)K	=ef(^;h!Zt9>gq`-|?M"	H03|Ivo\@HBJbx@m0Z/+#=K?0~TM9J{lGFŉqs
g!w1|]G%E;}\EtxՂHvtv'%<˿IV5M'YEPK=mGЛ  d	  PK    A             C   org/bouncycastle/oer/its/etsi102941/TlmLinkCertificateMessage.classPMO1}dA?&zQCY$*~%=x,˸bWbO_	ы,zDmҙ4TR0Ta>twPP9|=t\RDF
å9P:RF&y:ZJOhS
7~ѯ+k|<	-\+jY[HXaXXͥc_%9J+%~	JґbL\G3L/ܿI,҃"g`!Ajՠevs!m08q7NT0F1rw#1S0M%/G~)V~E։}>&zgӑw,> PKfc    PK    A             ?   org/bouncycastle/oer/its/etsi102941/ToBeSignedCrl$Builder.classT]oA=C)+ւQ[E|؂P⃉EӬugh_ii?1Dnrܝs93_`eR%y$C:1ynH~#,
u,I	C
>QuQ/;Ů%duVߪu3ӓO1+OFVx>aRjnQdr'fß-,[,xl[{Gav_-c-`.jc;Rni{$ͺ)Ss]zǺz>?wx;{m.j5q)dp	).dE.pل+6VqFt|&aHq#"
ƯO+ͽXG)3Ify#m\9Bŭq>.04٪pk 7 {:Źi1`	g@qhXʀmXiX?
PK,    PK    A             7   org/bouncycastle/oer/its/etsi102941/ToBeSignedCrl.classUvUݷI3͐)LiJ(
-JLF&%Ng̴O|ZR?QϝdB]Meνs>sΟd+]c4,û 7qs2[mx36)'^9=Ft
b=n7uwg5uէxw\ö.<7uԭZ1MyN5A<m;-noXz&WuʫJl5^7)*uxT2J}xarpН1blsLW')tfȇV-7	P|kB0kauvjH7hpŦCVu~u!*7g:ƺM$	J8.aB{NH8)ᔄ%|0|4KCA^th=Y~}5zsVIL%{)&lPRfk_sV[!O+!67
nnEi}AJtdJL4H޷lM5@)IfR"@s#	DFIrbwYO0afGEanS榌sTG-#[|&̢I˸;2-Ș!,">{a.M΢ȏkޮ;ҔTڄhv	MV8sd(g.*wqOr: ~#)",	L9H?b|j+s@U̍/z	jd`F$%Hǵ^eeW^!ƔH( tMy>YGGpV0;~[$+fnyǠp/ү>3{I|-"jQMZ-&Zqtᄯ90ZZ+2StPKƯ  `
  PK    A             K   org/bouncycastle/oer/its/etsi102941/ToBeSignedLinkCertificate$Builder.classTn@=KLKn)WHP!*.@Q%78veoOHE@(JBE(
u}Y*@~$s(r2z#PvBE+X㓻(c/y<uLz^Ku6#Iۓ~~!G<|H{dJG6HWkun_ZSKT<(577.8c k4pր%:RWQʚ!/po̢d.Ev}O*գySH
4*oaJUً{NܶI`	8\ˢ8\7
yMPBYԩf>MOFE 'x0oX-^`3Kڧ>`Wp<CUmI1w2ˣ! 9K! Yh\`n"PK6 oB    PK    A             C   org/bouncycastle/oer/its/etsi102941/ToBeSignedLinkCertificate.classYSACk
$FG(e(R>m6c
;X7ɯUj,)PjOGABCl߿7 )m
e1CۄpΠD=.{R<%m_/r[b/c/4dTxb3K\No?3[D:"Ճs
0)<^YfrJf\%<镖C/J:g]d%^-_iNOd-Z2Uk(ZcIvE3Gk;4.L!}K_$F㩄9N(98'[Đٗ4ybtdʤ3Fs)X>ˋ7U/Qjh^BW\C4pXCX
G5t3$`aI)kwlnsrN)>"BŞ4Tnԍr\UzڍոWvӂ-X{һUir͹DqY=}$#B;΄p-!Pl!Sp qe.(cv e:N t"eet¨N+:i*}e6^TiH/Pq7]|I~qZW	C_Ui@\${zI˨	c#~Au5Cj*anC*Nìkߍxn~Ƭ"ă}b"U(,AESDg?yv"+/t"7>cR	FpVEh5>`b>Cu1P;Uʷ~|@qr*Z@+b5z W0N͒iB?PKm:  C  PK    A             F   org/bouncycastle/oer/its/etsi102941/ToBeSignedLinkCertificateRca.classR]oA=v~EXLXQ&5B\qZO1}eSIcZKd{9gܙ??}PŢ@y(PYѯt@O`;$006*8Z]َv`H8sAovi(&db/WVlFݐ:unцo*dnnVj	f}jwMDNd*N:OQ5{'ULfاX]ab}KU®|ޢԎ;|jɨSw~|~ָ.ȹH┋6w,;Ȣ`YkYscsRkQ^aTMaKk<dʷƸ 27Wcw=an9y]:ɲ	la}Y+g%1#.qu$FLvI~PKo    PK    A             F   org/bouncycastle/oer/its/etsi102941/ToBeSignedLinkCertificateTlm.classR]oA=vJ티LF[Mj !qX8-";5S/E&F_|GTҘ7{{Ι;wO_ T"Cmd6ih+(C[*~-w=5u8~FGѰ+nI|x7.E4ĒLz՗hRÝ?x_f\27\+6@βHX&"z'2iMʨ*&3P,ܪ0N*SaWhoS`jG>@dcyyf_ߩ5r.8"͝v0s(Xsƚ֜w؜%f᧗k<Sj+@Xx]hwHx\~ Y
G}+O
NLWK.dYhq
b`{a
g=?yqvc4\1C-_PKdR    PK    A             :   org/bouncycastle/oer/its/etsi102941/ToBeSignedRcaCtl.classJ#Awt30nF;J14 (tSRQ|(n\PTaΥ~cZ
ekdaZ5jdpXGE,}^KtzF_"E
ꘓC!yQGQ!ߋ6$Ua`}66;Α8<*Gl/0vohd܅	qdc,$"iatX봘½ոTD?\-/+MEUY5aEMlC&idQUͧJDohj`nzٹT#W]E5bb&lydŞxzp.xp#2p~yjaɚF0p3PKs_  A  PK    A             :   org/bouncycastle/oer/its/etsi102941/ToBeSignedTlmCtl.class]KA߉qw7ԛBnq JDb"[1ݝQ/UDAƋI@h33}Μ33\\H3HoTìjxC$TK}ǯӯ#)jHtKՊk:TDh0@mP=jIjqb`#66F>mVu~aen@⻍
uu~pWd<l!|idXDDjS0\=ָTLo+`O
y}SM%M .r.2fnay8(0dki>UE8D#&|4N6bP>eVMX+-,dgF8zܽj1J]ؽҏ
|nt[/1duQ͘E-PKWN  A  PK    A             -   org/bouncycastle/oer/its/etsi102941/Url.classMO@MBL](Mʧ0J(H"V1e06T*Q$3>h?W *X`HK^u <"_#a.\ww,ek\~8tl0g	:rD߽_\n{;ӧ @QЯ 0}ϸ:R*we=l.lq΂/}ð{jaDCc9xBäoT1*]L1d6t.}O`.¥;>dLqNSUisş$d;/M6`ҌrkMKomaɚa)ft*FADa<GfJfIIs;PK7m  H  PK
      A             .   org/bouncycastle/oer/its/etsi102941/basetypes/PK    A             E   org/bouncycastle/oer/its/etsi102941/basetypes/CertificateFormat.classNAƿ)l T[uibLF&5&(	ueN<;xQD7^P3-`~s&7|{2߾cVCjzKߒT-?!ASB=W0d;]
_r}#z5j)hf-t;_T#T(k׮߬ל,%˕:>ndǹ'۱|q w{"3|'2(0L[m
=9DM&+7v'|Di)$$M41)}<eDgr(ᬁ"洜r(k`.K[W}>᭎@	zڌ:R81tB`}X{,"lL#zFcl2rv+e (R;,9Zq/(FR!J{B(>IVQ!ɫ>.FPK*    PK    A             P   org/bouncycastle/oer/its/etsi102941/basetypes/CertificateSubjectAttributes.classV[WW&	[m5L$(B^LؐIg&,C#_k5*}CT}&nZ}>{3gB!D\񡈏c9[.	Ҫu[@R-0cU3MM\auCl*3)>sE+EM]ԾgQ}%:.`̬d[w ,]Ȓ+	8Ǫij6XiD_R*ZI	H)6)ЧseMITj9TXYdr}U,nE^UUŴ*,T"VU+=ܫvKU2CN3]tf$泋v
񞫋f	fZ*9:1JY5f&xɵMU,iZn1*C4Xj<9Qҭѽ Q3ޢcͯ,ZiY2
f,L/JMu9.f4::p4Z
'K@s,ڪfik]"bPĻ"ΉxO"΋@pc-%)@7@
֎R9X<6ę(O^/X,7܎"ز'O{9vG6
7LOĺ95Hre;qW'l6K楔>;0-5Dϼvt99l1]ϕ۞m*AхzN' yb$JkNaL1.2BↄӸg\%).%EIrq0ḋ1a\}.ȇqC.y.iDWjORo+!2gu7"<M{rG:=hCVA񒼉/xKHȃʃ]
`[/5Wن\9_-1p"*w9 6Eg銋N&⏇}D$E)M]i%;?̀H
/m#Yl
ac& VaF%
FżඋcǤcç.c'.ǎ9[GDnmj???BkYgaD=ql>ۄPK6b]  
  PK    A             ?   org/bouncycastle/oer/its/etsi102941/basetypes/EcSignature.classU[SPBD.UR5TQDDR9MhL:)#o#
3J?JmRqL6{vΞ={N~{([Cs|(S5^r<G]֠x c{BI>Q(H/Ow,twK
V
JӛT0g/\rԴ(#i)b&{+*qX=S-TsAIh8H,mf\W
%=
{*p<{yh%ZDQE/iNe7ld}Jߖ
Z/QES93>4sT7RE=;2>fI],V3BjK<OTXq}A\]",G9˼ʯnA3u"Xh:ztDuұ[G=:اc?Ulϵȹr0>4.7lŇ]Aa'm{3B򤱆ս?kIx措L^-ar3>4JfF
uo1/X7ֺ`@Z℁.4؁f}6d@Gvk&Ft",vpbq8	W"8¶c1jT1aGaܙ+wϷ)JXo",rڏZH҉mB?7"ʋ$=o+hM$Ҩ0|ֻeLE*q-f^@.Zr|Nz}sn1
R/+Pw租/z㌛}f;:/q-!<ke?VI;eڤ#SAkę01J9%>!:bK<{e̯j?i
FʵJC_&i^Uҧ,gVCa
\b1WEPKkB";]    PK    A             >   org/bouncycastle/oer/its/etsi102941/basetypes/PublicKeys.classUYSPn[`BbEX`2)-N0$ؤ'|ɿ3/>s۲019ww{~Ћgu$\dpeMahf&2%q\tȃ`Cc;
h+aڎFj*@Cf5#O~19}^h{ڲU1W2`eմ73vjUGQrŚG!kCX+3r[ϩS񙩂˚0P;[vFմfsgut>mʉ0v9uYNOīc)+GTX"O9}Qwe|*Ay	>	$%\L&915^߼lLtE()nD9RvNbiL O ^D%ΪҚ<[Iw:#FW<E
E*@o}l;V\ٖZ˸Q2!f7QEweZ zq^#}!hEm"%pA<Ҙ5Ge޾Ԗ^VC;!Z_8E3Z0rɧj!FJdu}x]ئD#֔_m#RxO!Hz}DN1^=$LE6q5gDx
\%>aD2%M4
'k/^+@?^*_ƭquord#[OnbPK?(  R  PK    A             ;   org/bouncycastle/oer/its/etsi102941/basetypes/Version.classR]OQ=]R(PEhu)D}"$<ޖk],d҄_D-(ݵ4"dΙ9w_~P]X/C\Gc-!/	y|u&x[\ڭ#EKxEkY
i5/SlWᜍƞhJ{P\Y-!}ZX
yt |uryuו+[U<{ߖv:j7
5$4$55vPcȗRZu;n6 .pf@{ɵӲΫ==苋U^jҘ230K¼2N":.cNGc3:eܠݥKmJ|lF[H	z,0B=ͥϘ8ˉEǸՃyʉE)B1IsvWDB$
`a@M#!ȏ0
Iĵ(]
$&? a~GkD4`HNj!u0NQ"=,:PKn-E  (  PK
      A             $   org/bouncycastle/oer/its/etsi103097/PK    A             A   org/bouncycastle/oer/its/etsi103097/EtsiTs103097Certificate.classJ1[j/^UI*xLcݺIEŷŃCփ⚐df&! 1ƐXUOi0U^{
ką|-Eڢ7OZqJf3K*1fIu6hy*]
D]*^;WtZ0=wc3q)xMxU~P>#Wg71~("}]'ŏ
|DTB0)QEEYoCO
1ء@
}6)+SpD$5¤%.،C/[maO͐3kka1'vL`yu  Ĺ@M4
vX*
| PK",+  =  PK    A             :   org/bouncycastle/oer/its/etsi103097/EtsiTs103097Data.classRJ@=ckch}tc´Z_(E4%Zj_UEAto{2;2oO rdsMuC"Upm0]Ux٫-|U\noyY-RɓWQ>w*ߣ`W(̑RfW2gZ6%
	&}~?*ikԐР1̦m#?/Je>8ׂW[si(I#Qo,z@7`a@}w3zR%CQ+rUb/F	c="YJ416]zۼjY@j	TF	Fs$yjFyz~.zzEzɺP
hPK  i  PK    A             C   org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataEncrypted.classQMO1˲D/z((Q	Jb	aǲ4dt-&0xG+$m:okg ď]2Ae]	lymyCyzjm~3䡨CuO|n?W<5ul_$#8O[M8Q_򶆨lkv.	3C]y Wl{r֧@e]vhhuL'kL$` i 
 ,Б"U-s}Mql*RC_9PFET[dCE,3_bNBlX[/OЯ,M2&c X#fPKoQ    PK    A             J   org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataEncryptedUnicast.classRMKA~FM۲SPl;Tb	m\YYsҿQuЏfW;%$50Ge`eY	l:&;=a-6izR=KWmûԖ.ҵөTԶ@IFpYIX~GA_a{*
A
!
3[m_'0ۜ~*p.-AQ#$78LVZ6Mz^oqKNp=A /b CÂ/a
NC={*us:5Voslx#A(ְ3҃ym&G̍X7G|>0a<C2by@A{bPK^k\    PK    A             @   org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataSigned.classQ]KA=eAdø%Bh}8ò&A?aOFAKhvw=;|~=(b y	OV.uH&N]¹wX {@yf7G/ԓ2nOOԱAIFp
א0Go}%Aeg9
/wh}j
T}!AewpyUe:l3?@A*А	üD4%sOM{Wj/+SF1HL|JU	_5t
@d+wPK7mMN    PK    A             L   org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataSignedAndEncrypted.classQ]KA=_YK=[R!VJ2&掁?aOFAKhvw=;|~=c zG.LX`th
kd1O8e0iya6ݐ/ԑsapLk$#8[t®	k0KnkkhX"6oq4G3᜛GZWH.d`pmt==&:喪g:Zzb1?ē!G84ARMɬsovc[VAu2(r؟ ("yꔏJr?`x x>6>~~m<ae1+FJoPK7X    PK    A             S   org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataSignedAndEncryptedUnicast.classQMKA~F]%%AaYYsҿQuЏf7;%$50>36	pd asd;Ц]w$̱<y"O+|ߌx@* |HQ.=';i]];WRc"k;VEXuaɭr
a

Kc.	sC8Qh6fIM%UWH.d`pm-}&lzqSN`.&ϛ !D8Hǡ!8t"URjKf^ؠú}mjWX镃*(:W$gx!WwЍ
'WVXblޡdPK
+[    PK    A             O   org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataSignedExternalPayload.classQ]KA=eAdhI%`=Ÿ̖;F=Q/=qā3sϽ|}a zG	m.L؜`i	o3_2_dI,[w=rDRGKf3CZQ׆?e&AuUy+{Z"ӵG.\(p8كL=Z%OH.d`pu=.mzp[gNp=[Q0ADqQ$
hH¢	HkK%oNm5]MEjWj*RF!uF!RO"2j3_11'|.6ЭwWW3XR!3	 PK\[    PK    A             G   org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataSignedUnicast.classQMKA~F]WͲcPl;TbZq\eMf~JNFAԥC?*]픐50|"V	⇮pe pd^ߡmo ;)EVo<<ާ)[KH[ԙd,s&!!a`3swcs^˗:ܡ	+PBf2c¡.U}YbA@2o@G V:Җd1nvc]U~BYQ{!*bAiOJj<`|~|>4ߑy~i>ba!*JIe/PK<.pP    PK    A             C   org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataUnsecured.classQN1=daD7(D%($Aeh (SLWMn\Q΀+I|4={nӾ<>(b 	OV."L`wheqaCvG7ԓ2vKԱAIFp3pwm
q
	
3,oT(zs{Pjr'@]vh=mu꿙N/oP6A
a"$4d0k@G Q2d1jVcUWAEr(r!w)iO9ዑbBn@Zo>A07`)YPK<դQ    PK
      A             .   org/bouncycastle/oer/its/etsi103097/extension/PK    A             ^   org/bouncycastle/oer/its/etsi103097/extension/EtsiOriginatingHeaderInfoExtension$Builder.classT]kA=6Yך~V[[MJ)1`X1lYfqg"O/JGwB$Ц6;pgfgν\??~X
XÐP?`(ZT
7JCx"x |Wi!UK~z$l+|{}ի$s)s]EyEB2]
w+|,Nn=nJϕ
r
WS^_sEG{/NrQ3'ڐl%t3:=j2	P,payOWsn=cۏ;*Z@qҰG֕h_OXɚ0si6hE~=:ZO2#dclqF˘1Ĭ1ײ19q=t&H*WJ(,PdxN0
vq+pW`9+qؘXa
L8߰d8M܇å6n0?QxpA:dsORjEdPKx
    PK    A             V   org/bouncycastle/oer/its/etsi103097/extension/EtsiOriginatingHeaderInfoExtension.classUkOA=".E|TAvnMԘhiB#Ĉјi;4YF~D_2ީ-&mAM<޹g3o r2g]Fy`ք*R	&iQTd3wrB{*m|.ߢ/di^s|@y:gtD䋺)Yw*.p}uJ\Y[P~ax>hʙGV-_#Kǧ:3Q1eů'y n^p/qH*dXʉ!W}z?mJН\qYsV['BO(%z1D}{=`n	c0	=;d.jsY+&Ncڄ\313nb3&z/)o._/VR0)^y߮k1EtqgL'&{Vq;=$k[+
MTꥶ?GƄ'DOX6hb`ȐB(fη&hn h_.G؍vaCZ{]m4p8dMPKKwF    PK    A             R   org/bouncycastle/oer/its/etsi103097/extension/EtsiTs102941CrlRequest$Builder.classS]KA=5ZgkVb|$,}h

>nYgug?3
.1 53p9 0%[?͈<Kk֨MS.UZ+0iQTr{ޑ'Oߍ=jw(cg0ڑM$CFG(K%I'Qϖ
|l#dOwq0 zlEDRmE6<9= #=K~_^X~MO~^l:/CDwx*>gslEz*G)rr41GgSrZSTF3d0,wrOLvk
"O+%!NchB 8Źk|*^ zkI@ wwx$W'7^YVGPK    PK    A             J   org/bouncycastle/oer/its/etsi103097/extension/EtsiTs102941CrlRequest.classUwE&.n`-R]HbJ	ZlZj=}ZnvqwOx[rQKGwB{I3{;ӿ~>AQ:C$=Wm0(XgmJw<erd]t_[3qu?k[!}R,	N1{@onc-8e:%(o7y[؞w^-u&n7J;,*y8j?/8ր!5Z^9Q-W{0ա[
K
ap#
YJyt¡r6<+X3fŃ6f*2q&Yʹ
OVoo
^Q)	)8ം3
2eZdX>6{?WN=ҚmU/(dDȤ	)egGjU#iƆ_;Jr\y	%Ϸd-ڠ4Q_xD|t1J㉏P߭!12e;#gmЧ;(ہ#
!5qDyGI_iit
1'!M^	 *TǢ4i+*&͇**f$"],8i~<`	m!_*SCBM2uZ0JsM"Bk\bE>uC~zdOl!J{`U:&0]O.ng#P)HoGchcb:ѓBoBUlT\trcD{b?FjGRu}uQZN *%
0SNos9DL*cz߭!R&2;C.[ԩգ.>ӪdUZg91PKʼ  	  PK    A             R   org/bouncycastle/oer/its/etsi103097/extension/EtsiTs102941CtlRequest$Builder.classTjA=ӦfݶV6~GL5TM.
VNv/q2;(T

>%ލm(n
bwf{ X~>)KO_6yAzd@ޢĪӘؘeA$PWL}
ٻ(c昽<F$f]I{:<L)58߼lݓђ6qY^D	OW!Y%L;qPv
QF3?Жm
l]uLDf+J(NzV
EAtkcQvGK1S*o(zOT6xpa
=L@b󸜛+.fq]T,N#n]/К6!2)+y
"qwmӸ.
TIvTQ'|!z')
[yVoPK'
_  >  PK    A             J   org/bouncycastle/oer/its/etsi103097/extension/EtsiTs102941CtlRequest.classUsUn~tӰ56V )`
Imc@	mBa>mk\\vkOkұQm$їs;~cP23Y÷w.[%>bP]nM[)N<{rJ-3hsa80i>y^w<LOp
aׂ\qh˂!Fݥ5^g>0utںaۼmN{;;r9{(9ni>l9\U8Me6lBGG>5sP %:r渖;z]5m͡Kx:U_t+Q^;^!\\)PG)o4H:s^X[XMk2Zy
ݱ[zuIo(SpR)
ޤ=;Wb(Ң蓙Xi
d"lˉBfQQKcq1Ck_G9A!O>A#e/e.kgt})_D^}5	aE
zk0cS*8bT("ҼWFti,PqiiHAX48Ui\,>#+|'p)E;L
Ej8pa&77͝;QtD2eJ+4pFmoj}lc3#fPO>Q#՟0%C?k<EB<t"RV8,Eh!OHQ-G 
3ڟH@2Oi!t]'}|c.բ&{%CT/Gv巡YL˧q}waSG$~k}|Ҟ lo)bUq971PK]?e    PK    A             O   org/bouncycastle/oer/its/etsi103097/extension/EtsiTs102941DeltaCtlRequest.classjAƿicn7F?1A)^dٚ}"Q\Xk.sfϞ| U\ލul,XCeDK5uFoN^h]KmJz:<TFA?6I~VvG[Kĉ+kϛ=Ku٤UcN!'pwԦn]F<ߡֽD߮ԢĮɖ2dGʼ(ٵ:Op.RcOVt[>mQ'9,-3]dBu1SN99XLC1
gpց@f#7
_nm"e+"2g,̛W<pqFXYs^`WU.Wopa
}G3]#onPK`    PK    A             9   org/bouncycastle/oer/its/etsi103097/extension/ExtId.classTkOA=[(ۖ<䭁*<E,"QBl2ݦ) >(/~GwK5<̝g=d~
C@{.8ycEHNtPO!:,SiӰgZ@͔gT-%Tf% 3Y-m^9IZ̙/d&YiVvlhf̞mWSM&M隙hgeö!99gr\OFs^n;vJNkydp9ҎSTɫ8<4:49RʓNի&oV!#αy՜1c ʶHDFE4h"eBԀhrs*?ɶcHtsF/<	GgV:HR|P-.Iq'83UH΋P\B$9ZB~v\VzI	|MP!cHcnra:F9sp;np7MSS@[tk~e׵MS&"C#OV @
c5~ t"Yʾ{9E(QMaRr "{,\BgTs'|@1U}Bb
#J!TS^v/UX)!;ZsiA=K%yG$\wasQݩ|=JS!X*ITGvnxڼR	)r ~BMJTPK\    PK    A             =   org/bouncycastle/oer/its/etsi103097/extension/Extension.classV]Wg~^a]JhA] "YXP+vIָt٥C{כӟŶ~?vf7|$3<3̼ﻛw X8N
D\ g#Er,!]7_/'p=kK

3{Gڎ\Ick̴}#oF,E,?tYߚ@˦dEv%8k
W((,Y%q}5&5;HnE{ٻfJ[?cTm)96ˆ=Z)//J\-h
@Pns@٬\p+e}]v
ϷM>:EdTA}5*HQ\mXvr3=-;4+5מ@i
OBn7fݮXo=2c
ޖ&]i	ޑpFY	JP:a{qŝLo 'v=)UoK$k?JE&zݺm[<AZ95+v=e8+LrGQKG+(ws|߿><q
WAVQp(FS&˼|+h0ڈȰcщOe\G2DF`
7etcR%e qS2e63n^My(~5a,M#)J
DέݑnM}n$5 46u^'h@gEYý05E/aG$C>#8S*$`d/hII4tu4FZ'Z:Һ:q+a.mUsi[Dv/(q$(#+\Ƶj6 l UNy55BhmNT>*j!qOVQs|bu[
J31Xpǂ7bQRu
P5i1rLdCwDN׾1f+.٧? PKQ  i  PK
      A             &   org/bouncycastle/oer/its/ieee1609dot2/PK    A             D   org/bouncycastle/oer/its/ieee1609dot2/AesCcmCiphertext$Builder.classTmKA~VM\61j۴\k}AHb?@iyYғ^z)_`MU:XLTgyfX <:ô]cHUW)xK_m҉R0,yp}"RbH]£TBңdv?u(ȇQynX֛wuO	"_6F`b!k/Z6/Wv)"yr#^"(BS8K59
o鱗SgAVGvqˡ-}.Y>-]A^m
ZtTga7-p6S]7ӹ{),6Ld<MdĤcm&un	᭟Mֶ"n˄a^ߋH$A}ezpA?Lg{ᔾu8)Xx IӍ*8g>Q-6J]<; 㳎ZqنsLQbHX&k_PKBQ  &  PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/AesCcmCiphertext.classUV@!V^ji@Z[O!k4$5?_TP(LI*df}g:ǇO NVT:Ww][3(s)ròv_=|-?p~öٿi)$(C}xS[pI>6c%#8d:T箘\xY؞*v\3VDU^/s^ŵ[f n;ld3Ó9PQs:^o%|}\>ԇ}ܡu16|xtL#F;96G0[6R\Sx=o«@SС`

v(RSA]SM;pl-AvЕJO>M坩?VCvyk9i$bU
5MsCpCMKy%Noл^2TA`<]S4lo?qNi؂#vEC_RڑA
1i؋a9;C'Uу*ഊ8"SҌI3.;WBb;$th9~1֑d,ߖ$$Zy,.SQQ0K_=hS_%}-2[LTOG0	w}l	ϴreZ|ieLVyhQTd<1ANPF+/ѦArQ$2."[EDzȰF X^ADm{$1G/J|!"eV1Dq4wD׶oUi%~PKc63    PK    A             7   org/bouncycastle/oer/its/ieee1609dot2/Certificate.classTn@=Ҹq7
\.-)&N	*\D"Ǎ\"~
(ĬVZ9gg},;e,1d{^2Lt+:8^R)Gi#XzKQŤUSAر[Aw]EWj]~ꉦ@"ۓRV>Zm걽.CxPy22fMDaqlN$Ryt~>8)PZ[B~|,?#Ë-#qF1mmBؕƮ(;vkW9`oAaT?B:_@ra#pcSiLsʑ5rfMph7g"W9-nkwG9z?MD9'MDMfQ6CCd(r.
P>tW~ص@=)%dd?8B!2zvtqFq		o/;@ ;_PK@T  ~  PK    A             C   org/bouncycastle/oer/its/ieee1609dot2/CertificateBase$Builder.classՖNAm((WE-Eݖ{-bďK;%ul	$gҤDG!gRl69s;99s6	`	s;}cC[>qϷ?24e-AS-_"\LWqc]}Zb=}2Kg!z{[v
K%n3m_dD*J]JۜJ2]t2SF[llh2Yecg9_hin)^dVtpOخ#w8Ctǯ:k5O
1
~

W5\cX}r椈ZDv|;r=;~Cx3]cayD?>f{\".'T*2(ΖxEoB<rLR㨡J_Vh>G*GOIj;fa/>_W0c&=5&i&%͂4,òqIin4V
~"2p/W3}RJ.ڒjK-ILJK
U{'N
pE׺0Tk *tp*2C7Ъg<ćDtVHJUh
2'xP}xXf/SE@h1 у&/Q<zC!θ"f@lթ!PK|+?    PK    A             ;   org/bouncycastle/oer/its/ieee1609dot2/CertificateBase.classVmWD~A,U֥/vIhT޷D]Km 5;!,O_spQꝐLpg&>ϝ;I "HCQCc9kJf;3寖xYJ&/k-L`3|D3U$NzKLZS`+-g1.
%i6g95r\ڙ_c\qxrFjmbU/0Ws%WV '7jNLebJ98jk3:8v,36A Ya;C߁16缧Ps]J?r$űz>VQP.w+5P2tj Kw	KfIGJʟMxR|{ԫإhZ$%SԬंv)8ം3
W*8c#%03I
	1'/yOy:;s/·j^^hlk?ˀ(.gsyH`a8ηwRpDJN­0!^K߯݊غ5xoG4?N3x'9Eʚ<[ z6XAΘ"Q#6]8q5z4:sp}>A&נb@Ά4q[y٘4K3!||_KsGIiJ3{*43*0'#:fU
6Ut˸+FU<TCQ5|KϨԸWVp]Qj
⮵4#Πe}4k#tH@
FKFi(kx_Y#zGKɣ+jDQNM\*uXFkT6JJ#_Hf);2eC	W7h22d4(0:Q1m4i
UOm(W6mZk#fG2&XX
WA[QIe&g<[q?[p#0~Zw;=LI(7hSr#f1Lh%YT$
|Wy顛T_PKlmJ  
  PK    A             9   org/bouncycastle/oer/its/ieee1609dot2/CertificateId.classVmSU~%amPBhb)UlPlnӅe7M.|_3XȌ/_R,u)I43{y9sn_B6UAmt0᪂&-ǒ(jL$WnrZrNͦKeR`>s-S(8r.K_l˴QuaJMp
pHҊMd`9ۆmezzH=
.ۆnNVOضt>)ro\GH2o9ٙ-Έ<ų-gȊ9C
cS:4vs4
QpF1.$l#_)OgEU87TWVhJ!'W_v4܍c<WuKtK1r3>qu"TgLl'r''
] j.'aڴ=#Ik00Ԫ8✊*.x[E*T\Rѭz|Ii[L(.+BG]&^%Vb7U9@~ߓ;}uJk*P!A+ӯ4d=U:QHr$^U*5X/फWswޠ3+HЄ
aРbThG-Cxg754bg{z1$+Ђf0
G^xF>bX
#ObU,0,3FQ:Vj0Fi>ܳn>ͳBan<0r+|Ѷ.I4wHn}$r?
";G8}46DNw%|'/#HE?dk8OxT<g=3I=f_%/<iʗ=I'` uhj_D=k=7ޠ!eJWJ@3('mA[Wh oz[
Q&?,ũrB+ũ?ʹs )Yj|yr?
? >ko؟U_ĳ}8Pͩ}'ݾSHz:[$z&~5*^+Z_PK`VvE    PK    A             ;   org/bouncycastle/oer/its/ieee1609dot2/CertificateType.classTNQ]0"Z[Di8Eji"c4)O1&~hIGi<WsW X
+f,ir}IWɗi:3/EAns$^yAl9$"i#+d.Jn
U(4sis̄]ʉc-0nq;,Kd\͖CiSL;R2(0V+9.+f6eKUǣN!:%84xQZBE;/onēufi9B|ƑS*|mԴu
}%iZg<ҩyuˍn757z|'uFD}S"="+5F7Y{;qVzwO2c\_h){kkԃІ0SA+Z4xaX74hi"751b Q/)b}wL+9C 
mB)_u2bwnJn}[|S1@B2OQ@{IObH>s2V*xZxi:e.Q'N܉}
#b0<'T["EҔ)y#ݵ$AO9ANzXTe,Uxp](VנC4'גjP	 PK%w  {  PK    A             E   org/bouncycastle/oer/its/ieee1609dot2/ContributedExtensionBlock.classV]WUCiAmS6C(""h)ag&]?'eBI 
!]A,kqsws̟qvtH])^6g$tde~edL]V7M3}zM7,cBo{-5WYi|ЕŵD%woX}0p׸oEöt,r:d>wl	A%3#w!)ICOs欠vYʠZS͇ESمm:ycHDGUDdp!a}z$/5aǓG'/餝ϑsrۺΌ<svp)%g%'F'?﷕׊yOj8"Aq$}GdɣN<%{UmqRFD)exUk2d._2$XSqX!t9ms:Ԯ@0'׹Ο%5%.{Mݱ'HB:X:ޘNE7Ŧ<b{b:$H:>
{ˇ%L"%`&RZ+qϷ`W^5Z>ZFo|)EPv*ΠMEaU"BƘ]Tэq'0!/8wUtaZEWWցfN >V0E11a2@'P0B#ى!\&݉2N^#]Y07ť 5	,"}4
hn am'XOʔ`-i\-C.ri~Ն[|&1
/.st!|OQhí W\}<HT2dG7U4N$h#oHlj DN#X۔6i0Ra|/3.ڏX4,,0YQ@B"xoY;>\9PK  
  PK    A             N   org/bouncycastle/oer/its/ieee1609dot2/ContributedExtensionBlocks$Builder.classS]k1=~;[0*"Ȕb

}((mfwd>-
ʪ?Jn'ޓs%?~~!3Qa~C(a7b2[BYS-)sRH[˕ZmK=|mML!=qVd(⥻\''%]03VD"$s~ѽǹVYUkۮT^xhz=,x<H5U2V\Mb]i)a	QUk(P_h_{-^BX9\r V}pGsᣍ8kޔasxѓ1ܠC[o):5p,shFY;1½1n}F#xY\ltO	ae\rh9맨Vr_PKV    PK    A             F   org/bouncycastle/oer/its/ieee1609dot2/ContributedExtensionBlocks.classT]WG~&P,gA+RQcZM7GvwQ7^sZr؛^G("<Xm;<~μW Fq.9|$Io\zRM0srsT);Y?X~+<.8rވ=
~ɻ"EN%Ep{*řGJxi//
y#gP9^bwpN<R
RQ>s:vIIמ
qVjӾ늂"V"l3uz/rd'C${w]QL`|RB8[I{b1\DΕOh{}(PZ׵Rɇ}b8PEԓϱc?G36vN/9&W4pmA,Rڞ\uo^o7;Z}g:7[FZTBnKn7YF~ 1gv'8 8IjݢzNKnfcyyo~{=>nQ0e"n00Qg	!M#&ᔉ0jj1G`׸hO31e.60Fy-&ыZ酩>BiHO<]'rM9:׉lӠab'
|CHMk&k	Wedпu3H1
_EwsW=St2Vp2,Bl
-Hp4"рoQh@*r`x%b:Vw\.iRwGYó6`FQazx5eo4"`-#keVLAD3DtkSK[^f7QGB hwPKw    PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/CounterSignature.classQAKA}殺fiundFzkAuXd1/dD]:q$3߼73_/o *!Hy˖$'G.p&S2:eߏyH!|D=Ps^|yB!\x]ZM&5b
AFLsGKQMVYdztkkꍄ-Yfu)1LI!XrS$s.ٰǞ阏*[
G3BJbgIȫv1E>NevwSWh36f؜blcFPKnC]    PK    A             A   org/bouncycastle/oer/its/ieee1609dot2/EncryptedData$Builder.classJ@5j=#m'(XAA2FMl
L
P$zb0o"ܡ@+].p)MWZ (5mKGիJ[RmmyjEOZ^M:uu,jrh~ynQY35\"Ť%}O<7
t06v[+z@54mvW`V
i:_\͵mμͶߛ[vߴ};&c"^AHǑ@P&	;R*m'Ӭ_[+v9
X]_b'#xƇth G8d(R
xXH<?2OTNrL PK/  2  PK    A             9   org/bouncycastle/oer/its/ieee1609dot2/EncryptedData.classU[S@Cchx+A TEa:)K&C|/
#z7(/lrsl~0:0f>b6x .8n픟@E
<:/yʟK
1tXNϦ
pէ٧U}NDzauyrsAia6/Aɘ<{ɶBr
A#78~њuP5Zk1 y`8"4L>Kmkq8Ύ}1dPwRtn	a?]H6Zv}鹆Φ73D_"p[,.KRwި¯WW)TCA
(إ`7ԖF%%2l<Ҩis`#ƳF'ӛ!T Vʏ7~BV.2Cki9{iot30LG?"+L\-pzz+MSS[>Hk؆MC1iiPq\NjH a?NifHWыapN\Rq#*A..8Yiܐ	Hאfz&\+9]WyaZPN6ni#&(pIOW0gcL?ٷ@%FgFސ\m5(\gb[
ɐW7kDwd_R.IfI03IѡErY5$*2[nIv">1;ɰb;qr*&+o5|7yozzpNZxwEc
}L	nU
PK3HɎ&    PK    A             F   org/bouncycastle/oer/its/ieee1609dot2/EncryptedDataEncryptionKey.classT[OGk%'$M\̒tcqs[7!Yy#wͮP>DjpTyCTs!qŖΜ9osfv~㧟\4	
خ
ҁ6wze*9	i՘a/O]qxI7GΨ6FUD=)WSf>%;_}i3'#/
#fI쑬-
j8Gu"7ˠ}_դ?֟=o(phD:ͭk"\ܵp=6=0re#(+KR:@vU_x3Tux=pu\"WR+7r;ut85j٬[ccyLu,G6zOń.讁0h!kḅ,p;T{CU櫛t?%
F:ɩREb;ܾ򡐼鹎{{$dpܮp{?>)wڎmۤÛIߴ)\GPڰc#6e)gp6zQ`ϱяI.s=GᲙCﳹ(>,\gsr567`f(-628a0~a*4_1⾬?NybxFz_4O iLC͆	Às8c?D&'	ay>!u{#/Dal41QBs<>#;ԟ.yJE(xW%I	9/iW䷜ߐA[bkY Lb6&,n%˧ITky$plf`XZ>aq).&
 PKk`bq  ,  PK    A             9   org/bouncycastle/oer/its/ieee1609dot2/EndEntityType.classR[OA.Rъbɲ>,UbBJ}hXBt;if;(	/>gZbHݗs7oe~
`.C]eȸ5F6%QY(dk	]SU ,B;6EQѡ
P:P/Ͱw: E"RQ~ь3Ukȼ1R#:hJi9`[0,o'°&dn"YE@>?~UNZnu3&e=90kcmLᡍi<l5i	[C]\<wx#'m'"Ȁ	&ybQ
gj LHq{},t
.Q״Bf{},xO4䨉לu9;
'~ wyR1hda'O(&wRo 5qPK 7j    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/ExplicitCertificate.classU[OA=-ekz݂K[) 	I߶۱.ݺ;E)+j$?~S*%@L-M曙s>Ŝ*i˶,
Q|TLK0؞0l3ə畹ˠ8klC]Z
tY3(r[ ֹY4
h=S,Qw-nDrr׆1+i<"H8=ms4<QI}>̒?^1vpW[p*}m(xK5'
\QRpab3±zµB:<ڲgNoUtd#9Sx.r&OG%\z8)4 YְE鿱^?ͬMwV?9jg/a1jUK->]
cˑ
h
pSUᶊQG
}*	p
p/Cta@	e~@XBO*+cfh[ghOP6JmxUGknJ}PKP.fɸT<&Ro<DF' i=K1=hQV6(Yt#Qbi_~=+Boh1R;s!PK6»    PK    A             6   org/bouncycastle/oer/its/ieee1609dot2/HashedData.classTmSU~IXnDZ	ZҺ@)m/6-Z3Nغl6_8c	cf|zNi{9>9/_~0/1,!ZrKB"絏<)-JgT*)b)oڮC@YK/E2-?oT3aΐQe7$&T}~6+A
RgV)N!&2.>36^mQ6E\{.moAg9|ͲKqiT}[Fՙ7f:}tZ<BE.<]7}᷋t]8WxWuK13?}zx鮐o/4~OT'pp0ݜ}|Y-v1\`!8%#)
#2R28/MdE=tKƎ-$ds=Lr^l>]&e'Br҉;6r*vs3(ը!B)W篯8E߉.
?Ԩ'~|۽bWT┊>XU(HxW|OE?tfTem}*аⶂK+],X|`}q
,x eZ⾂)| !=䶞`U7|QkqHҐIjddHHOhUi%M(ayH}ڕxEs N6Pd>Ђ`ҝOc sѺq-bM\*61QlqRc}k
)%|Arhbi21j!JQ%JZ1F|ZoU&C3fi"[Ycьq&18͘a"ьgq+@ǵ?}~whuO$9ZƷlXH&I?M&Ixc+5LGl?oZJj"Wd5IPK     PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/HeaderInfo$Builder.classWNPme-*7 ^E-7wAXA $,K]e1|MjH4|(㜺Cn}̹l ":ս&n0
w\Bfm]Ott$\ll:s%]*c%	I[0Ҫ$4m2*4K8w0XFf0RAӗٛ"s\VߪJ^57mPˎ89a0[Beo*VJyXVQXPnᤇRneF^j-<SmR	m,gWWK:1 g͓Fl	mmmC:Jgm<2~	Z|-3K:[R|دS'L@NA|bJȄe	z[k"jGBҏu!*u(rdPfUg9}C|A8&#Yݲb8z:CDLu$zY
6kt?V<yJ`7lCKV>I3*]ٿb~.*Pb!z\F
^dqd>Wܕ&xG&qsżCNTTkU{
Sk2q]F5d
qSF-n82.zܕ@JFe
7щ!nq37f'܌s3dxD2<d-fIOټ8AE,Q:|O9J={TJS z%}k?=
'*"H|C.H/rB h@+D p"l h"6% 5  pDg	D Pt0"@ǫG̣xTG{TG)zGBml|'%PKPG  u  PK    A             6   org/bouncycastle/oer/its/ieee1609dot2/HeaderInfo.classXwemvtKK(xpQR
{	okXH7!E߼}s|rT|7:ɶ)lZp̗ofgM?_Wa2,c2Zd%MBycSĖ'$T
/A艘HKXMVZX";a	ԓ)VdʢOŤub"%2"dE(9jn%ӡ]䣧'q!!Hk` eƜך3'wnl*c%}wfoH8=SnZIjtD7M݈w0,}LB1b36H,ӗ1LQ(ͦQ"-R%*BNhKwIJIiNhF<I$D\KtqJw"*Rl'fø|-6$hja4ÝCGɘ6B{
ƠwʷSOY⽒"=>WBna]ܺmw,imϩuGK7v%3Ԓۼ8(41V*ec3{Qu7KLa?2KS"R*77`ݥҜf+|QO虽vZK@7SkMhbY*~:}↴};YB;uK?'dlFM2TelMN	;Jv	]^YN1[}GzQG<NK0nn-Nޒ.Nq:J3)D[!'jCc;-!5o.9o7"45,NfDAv\)s[L㝷 yS!~y&s ̞
-"F-EPgkqb8X<MM8"y'.=]iE/^\Sxs[m	fW2}?.tB^DᐂgpX(qTA;1+ +h`5
j(؄!^
+؀yuŋ
G`Wч,ΰHgaHH8"daq ~tȰd=8G/.xOo~v
:ҞN1ǿ=1di3G04h'KUOl@^S-lM%5UT7[SlM5Tf(AF9$xoxVjH@ƻ#,j|,nYnKu7Հ\`|_@e2Q5PU UeqC
Xʲ*
,Y\Q,.}ժl	HW$WP&O𧌎B\tO5e'
>aO^Uvj7獃5jjֱ|z0o軋*!Q }#}|8O}(Sh^GXN#T .m^
r5uo:xOe«.U~|ÁCq/:Z_qxBJ =#5?s;4:C#vU%W^\{UgW_-[ܲs-/T[d>EW #I.I?~X@PKy1S    PK    A             C   org/bouncycastle/oer/its/ieee1609dot2/HeaderInfoContributorId.classTiOQ=6mdèPa Y"RdK D88iD75|?Jy{޽wo?|0#P$4NVs\lH($!" Ȅ:'%TMGt43$D-?1K|VT	տXĮtLI/MbNcK2t;f{fw|IZ=s$4<i?1f;qfsƖ疙.3̬7hL-8fq	wNQ|clpt`<!c$&m':KSϸ/NήhHwE+V+QɨQ/㒌2$4-Ui:Y<27O[cOGjq8wGӹ>J_Sݤ|fq$ʊ/8݂pBN;ؙ^?3PUQ J&vԢKA\@\z
b!OA
0 `0+7HC܊AŨqwb74qp;fq7Kffr4ei&*fUtjD9}X/LǨ0@Ba^5&!7/;="K9Lw?0_BX#(THM*)+de$&J2Lj%Z/^ E!M=XړJHB9q]a:ZEJ-j[[!MA#YdEu!52
&RPK+x    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/Ieee1609Dot2Content.classVmSU~66h+hCK	mmžIjb#-taٍ|W8_p@g,02?s
]3f8y{ٻ_~pN'
\U)hOgyu=K=˱
a:RI8Rge
--IQ5(䌏'}yɶLKfXT0@sBۙYWޘq)ڈSdWY+o9;mdTDBMcHۆSLl[
{+Vg)Jr^Vg9lŲSpbzí8i-FٙLO,L;;Ro!TQp)ka'lK[sX s'm9Sowd|[!2WSn"-;=ynYr;#<i=LCeATV.ӿYۖvxĤ[緻┅Yj(&`8OETWqAś*UxKtN?x"-/9:Ƨ^%sxdEk.h26qnB%O縚!EN&c~%Ӛ;Q\x#)bBo֒n5v?m6۫ŌoY:UG/n8DYЮaNamJG7c?{Ybţ.d5$axbŊ1~6OXjcICj`ŲIi4ļ$S5"
sQZ;)*.C%#d'c*5ę'L:$$_=||'ȿO9^ƌ@ivL>J{ǘ>&AWa": :ٰm1d0A:NbB+,s᣿Z*)cyO~B_4383f׭.X?B2>r_+qCSQQ9A,z0xz82?3;2{?S(){!)=N0A gp=
?VQЬD|d/lgOuvPKm1*    PK    A             D   org/bouncycastle/oer/its/ieee1609dot2/Ieee1609Dot2Data$Builder.classOPǿUS^(oC+ݐŶ3'M0$G:(Y9s??ǮH@@ӬVZ4K@b0b@0vcM
sX"5([bO-0|lRA׉T[r!ZQ7vGm&b^s7LʹKN$R5Zޯ^{AӘUvا3r%Oȟe)/k	S(nKGt*JgILQhj<)UE yOwΏ[A,wOgڏ7K/wUt׉Usw07tU1C@˩[a& d2+㌲vzu"UDv"x,S]"x&⹀O<#`F#R,2S_؛"υHfߚn:L.rm7OWIc9}?H*S!$HҒp=) I@4Nґ:KIѯN^5ի0鯁Y3	ߺ0 p3t3&BޅЋ!a>~4 7Cs3M(bo9	_&/&3I0Nu<eD!w޵9xY{$ dblf\R6ЍRcg$rsl:d&dpFH^\r{.*^jĦ		/oSc^jȦVJDK
ԲC5lS*	/uz7^צC6Dqj-4PK*  
  PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/Ieee1609Dot2Data.classU[WW&-^bHDpѦX+43̉OԿ@RAYODm4ܾ ^
Ckj [kmJj;%\]7*UZ<01ʠC;hua!Ne9kleڂ(Dr|l閍dr1oX"jx
TcdoP~/EZO,3712őyJfѡ4Ter0$paaV)!} 朏K5b
Ə;g
axgw}9pc52U}t <ݲo?vTՕT)TХ

N)VУa2wl'6齫N
>u֠gynyR~3uz.Ф<Xlj?#2s,ϻHMw"WdjTϐK=8Л[j.#[ʦ}J5SwnweӸ[hU7,g)
A
1ǰH3CWWчk*aBy\fR)	L*᮫藐ف3HӟWiz%z~r13ݙۂYYC<I
 .SY\O(%Z.}s3Cϐ>|_A_!ζ0zpւ>ըE6d+cG/Z$*P?q(
"];Ht_7f,BWAzȐ=Z"4deV)ğQ$~>Ǚ1[S'X&O,"PK
R    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/ImplicitCertificate.classUNA*
X@"RE"	mc],uw(5xG!Z
SKpgff8P.Z%i_Q"c{°M.wW.JU
Qv(DugW<ϠnNg96C.-[Ǝ
gE^0nmKO9-n+Ë34LYDs䧊mp=ms4<QI}1R|)]nqΓ#%r
TsQ
|
B
.)+0J=YZv!`NKkm[S?A*:sWɩX(gz:#	yir@
sM+f=ToBdVק;X'>Ct֚6۵8G;WQ3jX6=_TqUT\uQMmUOEh-~D%dP;Atn]	CĥѤIH3,$ "ALe'/WYa/u#WnFn GsDK`8	W	>x0:<`8`T<&Ro:Df i=O6)(6(1~YMkD }FdO!"{U0aPK<    PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/IssuerIdentifier.classVMSf~
2	)К$[HB	iiLi~yS!y,	zL'2LǥNm\zY}CWϟ~p
_pZA xrݓtݒto+PF^*	 i˂P]~R2eA#V7quQgr(gae!h҈rȨNNɦm=iV11MQTX"@IA\i[wvЕs*.Ti0c.v*t5ERwd*2U
(:p5p)ULtBLL;l7蹹;%$f,enn){xadYA{nΦ>}}&eK(:{<e%]MSvhOBaѡ_ETgU8⼊7T\P&M4{V6
STp6s=o[141b;^D<s,$'ܖ`6nJY|#ɴ+핌
-[knEeOz$ys'QcP p%S舠ƻ%#P1ta\e:f"
7Yꆆyø0FqE"c_HFKa
a#>k69h{-w?Ad\^Z7#6:䩰B_фك

EDsң<]&9Y$Ow# Za<c>P{mi/};x>["c{.kڏ8&K<$ʧ`5#hdZ/Ͻ*$9_D@"26{0WvosD
wiB~GK|Rgk-Jz$T4BC
>E0 "oeCx!̟l|;[[U=WݷDVz
PKW  	  PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/LinkageData$Builder.classT[KQy)gi0{؊!ބze7D/#YodК03;9_ l9xEU5qmNi87Tk`ya:rY
dk5l8z-[!LE-EBW
{OQ<ܳqZU	KSК9JϢq	!|oeNw7RN<:9ϭ2[{҇x0
{#\Ыԣ81d!aJ5s!D1,10"XfWu,oTj]f^%,	?I'?/E>I| աw͈>i	#/e}ldva$]
-@9xC* 5|A &=XCPKި    PK    A             7   org/bouncycastle/oer/its/ieee1609dot2/LinkageData.classVwGHl7MIEAh$ABS
ڗuGBzN#9Y49`{gߟXaH>dyn32HaVy$\Wɭ
:O<j0SFn@mlr0gyexGL-Չ0EO¿YO!2n;kcF[tHLݪiy54j͇rs+ŠgFM+M;5ݱRZx+*vU/^%=藈tzn%7fnk@7R}!h<\_uGĮu[>sGQ5>qeT!/ihpG\{"Ip\		K@GN2dG9pyd|:2PPtUKڽ${C! n9 9~n[?W@ȵ7 F}U[D:vQ]1D8T8RznCh'/J+g}vpmoac')$LCU1
&@91;/@Ƣ0sI
&<¬sU,dDX&#̺9\q9a	1/pKgAP֮ͭ-7pa7ql"ADD4Lr1B%z"3j7.vqC=G
и&ɧ5&1[
Sla[$C	$Ǽ|e{d	$$Z<0Ae\-RY/~FX}؎7+{)$H|ix.qHq;O^c4N"LrŒGV	b,ԏ}̗ZL<u[LPK)  
  PK    A             H   org/bouncycastle/oer/its/ieee1609dot2/MissingCrlIdentifier$Builder.classSJ@=S1o.]؍Ņ &:B"(~xںЅf9s/s?>_lcIz.0pBW,OKO|YODFU5X]*9Ogµn Æ{Z&/؋tíGr#Үhcg}׏Mw+*P\m⤗a,KU,м!vTaIsE~bvGo}n7;='^<svЇ$D&maʆiλV#Et5Ɛ2x 3X-=4YDF_~#Gc `מ1S~hP ( iB"O(`\hPKZ  H  PK    A             @   org/bouncycastle/oer/its/ieee1609dot2/MissingCrlIdentifier.classU[S@Bc+୤jyA.
aLǧ4Yk0&,O|/
#z
SЗsv9ߞ$~
` Ӎhd͢}0ePVvhٖ0$C;_^N*oTyA-p1QӊJ!ښ~$,jL0t[KY~0=,o,,,⾘\p\|+	VcG8V#|mwHCPCap=j֮s{g	D1FHӡw˗4XIފXYB{ߊ^ptE UWp*
VЬ
*88+:Htv>ޚI!fNCF{!+z{ ROULPʑ{ܮK7\jjfr(˽ReBjV2˙?lAApuIs^ruI!d4e*MOIJӧ
Tc@Ks]*bP%
4[*:A*a|"p#	ϊ"k
~9c-<C1I*UA֤];!b531_@1Z)VGސ'ܩ
ZF'dċC쏔KAR^r>@|R[4ߑ\yɜ5]e8N8%.z&N\Ll.Nn8b?^·z,r<y@=ҥcE-
t0Y&x@V%AG/PK+$    PK    A             4   org/bouncycastle/oer/its/ieee1609dot2/Opaque$1.classUSG~\8OE~a,Q/	p	P
M1mkRl_\xzŻ
)S{N߽"JfϾϾ_A#i:\ȠY-%w2Hm\vB`pQ-)Gtfdwg"G~FE1\j|-F|4ͷ!xSm-{QpsD[pV<OW\c>csp(}&Cov\)BkP<mr"ފ	]o?]4-{'ξv B{;	aj ˕
!JsŅf g69=[m0Zء2Upq{٦x.;WW@:R3ug:.qE:>qU5rĝPMTWsK"& :0_=y_ӕ_^^V.y$SYlWnYN[ɘ4ڎcHIҠ캵z6R_*NЌ}1zFN ɶSŻTNFGK.^X	;8[W$6A
&c0L\m35Q4adbjQ̙yrXPjX4pwP6910Ud{òVwnc̀o^9[|a=γ
ޮ֠r* K5Ŗ
sƗdYlxpJ~ XP=>3D^?ѩ=B5u2^V%>v.7n41ŏ
bi
@.~
W69ƺEL
s'~f{:zɤ(R$G45PK[  C  PK    A             2   org/bouncycastle/oer/its/ieee1609dot2/Opaque.classTmOP=e0@l醀ݐ$(F	ዥ,B{GLI~?n 8%9=<y??0EDr!Hn[9m<h][,0DkdD5-p*,s)X++oBX<f/5ss5<ZDݪ%Zha::5M\Qsa8VEȆ䕾8g\hpanȮHnrԁHAt/=[zu6^o"0lyz&5Icu<	N\>&Gj(1BoȻr*Þ-CSAk
+VpCA^s+捊ęEBfBKߣ^$Lzɕ)*ED-E5Ȯ%ѧ>ueʎqc<k	s3Z2z:fŐgx}tR?"YoԺA	LC
rը!\
khŨv$V"q0TĤWqrxbP!bS*nlEoMmuj[湹nn;q"(ZКv}h?ЦH;~kb*,}lHHV!S!'0CZ#a%V
h11Za[eЎ1tRxeIWP4KTDpJ2SHTh~1J~+0;-dսzfiTi
PK#    PK    A             C   org/bouncycastle/oer/its/ieee1609dot2/PKRecipientInfo$Builder.classSJ@=S[cۨ.j]DERu,
4jJd
.HA ?J);wL91W ˘͝t՛OR1n%Kc ){VUs\![xU.]edy[,W
n]U|<w(HNAkAYɯ49;RhzՋEʒ(dpANYcv!7"[̽ɵçrj
Wύn7G.A&D7B3BC)059$`"*0>b'5<5J]
?b4
0t &<`	))^	$? PKךߏ  A  PK    A             ;   org/bouncycastle/oer/its/ieee1609dot2/PKRecipientInfo.classT]S@=K1෨RR5 %XuSڮ5,ɿ3*_/>Ի%F
g=f f0=f>d3bƠl}4_d/+(x)OyS2!r/M7avy

EbsW%ye8[6Legt:+\Ӟ_6
ނ[\,ZpanKUp!*S[@
[)vblyޡ'
_h
UTR4
u::-`\,Vx`LY^2KLsr Z'g_Ux59h
(hUOAv`٭ID3햇寐N=[QtwBRE )V~kL͸Hd
SfZa&(R"=ɿN[#2j=4z5j؃N
qZ!4h#&Mg[C
GpNKӛ@}8K*:08.JsYA'0$"%!@E(/^|+ѫq
NOxsNXŧw}9D$~2QZˬ+ 
\ kҮ12};L957$07ߢyGl׾GdWpK2dDHD7r)H*T+H}w$ߠIH-cr-Iv"^!CyШR5}&ԎlxIPg$G.
	4'j4"_m*?PK[Cx1    PK    A             =   org/bouncycastle/oer/its/ieee1609dot2/PduFunctionalType.classSmSU~6R/,BbP
]۰f7aڟo@	cf|zfI5!qw9<EGji37|67l˱

o3{RNQà<YU{®I
[u5yXs
ra>P0QVo|S]vAEb4\z$EN)a۲$lT+KG?)
p9iGU-V좬RV?R f6%KpK=-O2-<'˴9ޜG4,uQ\YM[K[R̵墫ZUrje
)z1lWCHHC*%qYR$paKK5D|~F"x9dZѰѷIc:y#5<tc'*i<{NpqFwkQ)5+C?Q_sҩw6_1LbH10>Qt^%글9:g
ExS0`-e+q\F6+x]nq0dx/I13܉c?3paMT[qhGMQ
<wJqnѷ	ߎpdcи[/i7>zk^<^}L(
<0g=
iLXl1smJT\
(TF+5qd&yOH;~!}g0dHBЛ3|
X۔Y:vP#~6:>)5q%Vǎ|?JLL
?'g? .wog$.͖@PKiȤ  ?  PK    A             E   org/bouncycastle/oer/its/ieee1609dot2/PreSharedKeyRecipientInfo.classQN"Q=:&+F33N2au.t	_F&F7dvnл8U֩G`P$J@j=- d~1	1#}2̎C#APw:LY=*$Uz~C`.Py&R֖7:$w:<B]Gd:mT<?{wS7,X2lrjiMrLpgem/eATHH$1bc&lHb0ແ'Vv.uT[
#~	{	=fo{w?b`^|A-Cy'ȿ==;LTt9U`19| PKKBz    PK    A             H   org/bouncycastle/oer/its/ieee1609dot2/PsidGroupPermissions$Builder.classTkoA=CiWp<ZmQ[PGb5M4M
jcM&~NbBO҄c?x,eHs9sd~c<b0v+^)5Dueg:gTny|
nnq)\WҥB߷	8>ZfJ̷{1L7,1dmn-YmW-kpre|)=^)<g5[1ݔ^+D]GuIZlK)wdS!!"b]ydxuY[)խNF7զ%QQ7fX
Im"ߠwÿl^!&4&OZ!<&an˘,|;c:$ vtD1
S#:&T0B3BV*,ƑD.p741h)ZkRrܰ\Re("JVQ?q0eE쭀|B}.w"|0k> SHxx!\f$>n8׃!@0i!iNpp#H0? Lb䨱sH;ԦYU_7(
PK2 M  ~  PK    A             @   org/bouncycastle/oer/its/ieee1609dot2/PsidGroupPermissions.classVsU6IIBf@)-h[mlj5lkX송>oPglӱQ깛MZmsϽί{& &u1#".#g5C7Z^cMOU(2n?]U:#ck[
R.
VY-i[̨	g^#G4O^0,[%Ӵ[ҌCze;FhWn9knj%`\,[uVWf;6<٬g7̖Qݪj\y97fM)Qfuޯn!cCn zefv%ԩnyB4j䍻5ӾakVbJV{4[ۓwnʟ	<lqm.5M֞3	gEwEqQ{"ާ(gGě/#r`vS33Bz@ֽY&i/$w;.zЋ@\r ;N;^>}uoY$Gy^ZU˚I:<O&G"}u\.lcV^"Qd$|k.!$!!.K8⦄8&%S\LG,G1b>˘
>bG1AWOb s\;/^ЂYgR*k:S.j%?~ @	<i	^Fܕ*5 / ݏFic%31ZIm,T2]|/vdBY"W౒:zdY98p)ØqJzgdxk<u|uk]3A^R^#"+?Gama@)NDbv<u: D!W|vi1_5
Y-skN"Q9;*A\	qwr3-}pr	D'$c4"DPKxq  \
  PK    A             9   org/bouncycastle/oer/its/ieee1609dot2/RecipientInfo.classU[SFcd\-К4Pc*MpqK&]H[G<`3}Kg:}3
Δ6yCT۳(p=0=g;߹j?
^c&rdiZ{TV.s`q׹nsַ6-mSE. ٽrMw^{[2|Ϊ%P}dyL&[6*L#Y$c'?v5YE5W*Vs;Dy5mKPuL8c0$mn;kUbMsթz- BƏPEnԁcM8;VTs>uuvյnÍ%p=
J8p~NòÃhqcQsS[{][~1Mܥ=vm#t!Cz%I藐0 ጄA	g%:{tжJÙriTSf:]bk/D*RВv7r2<^LX/Z4a6yrR{%"R{;_=8
qNeG[4^IC
t8)91D	UA
:Q6.	mJAvEBs+u!>w2q,
#!d	,#2&""Ve"+2=۠K4`{?kwS{λxE+o]=Qҷ%$Y#{l)`'{8`CP	&{hZBR#k0MWIz	⮧%󀓇T`P4wKb	ggapB;ĦpبbONr 	x|TM?ʄ8~!s#d
~|U;xI*	һI?$*ū|[)"dU3a Fl&cpawtAT-JPK:%  
  PK    A             I   org/bouncycastle/oer/its/ieee1609dot2/SequenceOfCertificate$Builder.classSmO@~x)W
TEiEbLL	?\駽rYiC5!~i"92tf:<3;_~xÀ3oDMl'\-j-eT"P\=yxvG"&d*TVxKWLfI|\+")xzM+8.Dۦ;Y([-Zp,Y2sm}1ܤ<3޵DQLO󚙽;r'qxC=~"wu.:C%0CxlixRlL`ކk<QQLbe`]
g'ID)"G''`JxD:Zy߀[`v)_a_dA~Cw,j_H*3=t/sJà;XD$mS* PKŽ    PK    A             A   org/bouncycastle/oer/its/ieee1609dot2/SequenceOfCertificate.classTRA="
K1QP-\JGÌt,XRejXLsݺۏ 6C]^a|P?l;a%s-+a9;iK
! dF@IǗ&sg+,GSe椝5G=Z}W)7iiTht
^]owsNz)m2+LwL|v)q2D̉9Q+<Ӗ>%X|K-'e\9`Vlʁ>NXdoy-īIޜfʚ
U\#ASH2\[q#-2e-g,vZu;B-5 [cu.$'RBXgs|3Ν|F7Ƽ1g;2$6ߖ|b3>#R6iR1u`:4t	{pRGbj㔎8#S~QR<(i8CpDI]K1(.kKjA8
8!z+/A0f듎#T}7I+lz~G D%' "2AZp$ y4hh,#e`=
ҟ"#D+O(x\^9OMb*o~~7h@'rtqtrʒJokP#D_#d|F4o|Ed

-c" #B/1RBk '>U#dÕ\/#B-أ
3@Y4{PK('    PK    A             R   org/bouncycastle/oer/its/ieee1609dot2/SequenceOfPsidGroupPermissions$Builder.classTj@=MӚ~iVTPWPaRc˔DOWU>%dkYA!0wr{Ͻ?~pWF\زH^ahl^\r8^MiܓYrB)ũ
ZUӈ=_WJWNo_A`mkGlr-`Upg©;pfleyD	2.U 8o]gF/:´"zS
q	Ta`=mh?MP{6?"v$a{B:ݪ⳸z/On{U?RP$]ϻjɇ860/vMc8YppTL㢅Y\`4Pie'	
Rd ;BoNPVgӄ3Ǣ>.}BPz#Q2d
G3_
~)q={
9G'PK@T  \  PK    A             J   org/bouncycastle/oer/its/ieee1609dot2/SequenceOfPsidGroupPermissions.classURA=,܂W AÂh`E@BZG.n,WRRZ/@Tg93} 
"E{_Qa	oLA0-,;\	Y0y1]/
ӵtrxYs>caf
|^Qмz!=4K";w
r)&OA@x1=;M#18˄p	UNعxE?^UuZ#˙B
z7<_SS49uPc5|ɑ2frGij4+嶆filY#'vF:mykΊGBC.VvNCnIomh鉍a(2P̙ւQl>"^y<v6t{QZmgdOHcIbJc5T=mJ!IsU[WFIu
6K*lQ6o阆=8	>
mh؉
aX~iiAq^E7FUq*i.JsEE/TaB%%i!\&֌øLwIOY\eqg"g.ۧ%홙3myz6LI :r4i1Z6}0DiGc^5}p0W8KFAfUt053U
!zJ)XA={>TeUp^~~0CC7#I	RΕrEei<Eoh]ExN_f
:JAĵL2br/Qgp(V ~,"Z"Lqh*z$Y'}M@7ɪ4S- PK\8R  f  PK    A             K   org/bouncycastle/oer/its/ieee1609dot2/SequenceOfRecipientInfo$Builder.classT]kA=~nbҴڪU[Sݨ"bRD&i݉'S*(Q
(&&Pڲ0w̽眹3??~x#a|IR-3s	ժxC&R*Ü
D]kYfq5K%(90;=J"P/ifGN BGȑB=is秪/>H%B2i>j 7pNCZaB!C[
n̰2-Վgq@LLjyke5uVObZT;!h
p:aw<kgNzge@b&4qMGua7tLaa3hw|0V}_UG+}7x'#HpTcW"$̀1@RrW(%^.PLQW$t1>cBotq3"
JUp'a4pO2C=L5.ݾ4'6PKԕ  '  PK    A             C   org/bouncycastle/oer/its/ieee1609dot2/SequenceOfRecipientInfo.classUmSW~6D.YW)a\Dhm4K?8$wqwOδ43~/0I %'̞{yyۻ x!<\O4NKx3
in^ef
j^QмνzvZ-"OAcz6u>7_F9cq̷I۹x¶OQV%kU<ev֍U;oefLqtQc62v\e}cWH4ŸOݞ_`j06wṆNLemq,}
nguxZֹթ*kg<pKΊ5!3,K̠102ghg`dbf!*ܭRM'ϐ1uJ\9Z7J%uwV+~ȠFpN~9pW^ZԢrtB$3R9'qCԁڌԦm.:j{qJ$AR |pE95p	I1@7TbRo𓊠\qSrևi)fUcF T2bSR،0M;toh	N<g.%홙CC e4ihy"4HK4hlѷ#;;B>%R|d$Oi%^@6n/Dp/5
ޡ+J_`aG+
I^ 3z}r&@ɛ(5.SOcP;4{mЊHm*G~Q/jaӻI7w`!Zv;Zv~~w+m$+̭+ O2ri%<'7q
#eWY
$WKHH4R|PKzULv  U  PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/SignedData$Builder.classTmkP~uѵΗ6)c(}px\;b"*?P(+4͆Th9<<%_uSB'9<|4#߀A'$!Ȃ`{{F"A7ƽS:Ae 
Ɠ0я
iEriQ\ʊ6]i\jLPMe[6mlTuNc-	.-l,>1˨\Q?BSQf]Iٺ5﬊MOrV\Q)OO[wپռ?V1x8cC=xˈaM#nqcnI~IHWTnĔ
_c[\aJ5ѦH`RzH-`?03	Z!mdX\\\Xi#*cDL#J61L"|.
/PK  ~  PK    A             6   org/bouncycastle/oer/its/ieee1609dot2/SignedData.classVmWG~l.RU[4lR0D]HڷM2.N<O"rWټN@sNɽ3s3? (I]]ߔ kSfU	g
V⬜75XҷeIIr\B}_3p}nQN}/>%hKPif*T,x߱EXk]|j=tr+8b9j\>6.yՊ^jnEtw86Uthdi)fj	:<Vmq%vͱccSe_׃'{fL ejpoou&h`.FΩxUK~dW8;Qqmj~F1{M	e&cP22N8%Moki	T
	Vbj,O^]6Wmt$aDq%}PfK ĦPqЍ{
P3]ϙCp+:ٮh=HV%,<$p;Y}h@!y {=mp
:JGudUh*FF 8k*΢OEaU.Fc*@9L
aL3@
-LNY1(9a
s_%
S0,@| #xH<:%.>X_Āɭqh}A;hHx2T7~IC?36L-%ڵ-,j[X'z!Bsd^bE8_ѯZ&v DcƟ
L,X@Ev?8>)%TcqZU"N~CjSHnMiE%`0J	3#B\,[41r>&~}@̥fXmu1OxV0OxN.A.(4	"&@_PK)    PK    A             E   org/bouncycastle/oer/its/ieee1609dot2/SignedDataPayload$Builder.classSmKP~oKYieE+^0
 !(>^&kmFҟ*0~@?*:[ӂ`瞳=y}xyU`x99d6-qָ/xW7Rb{}TqEFK9oEa50;F䶣9	!v6U)+#&dw4]dpINO*!"A0P>Oƥ}T$FOc#maRt3Oޤ?|>L2HaZF 
(u\q #K5PT\7aUuntQkC`nkZTX|0D?gTxB03
H'^!_zԤ\K
	GPK{    PK    A             =   org/bouncycastle/oer/its/ieee1609dot2/SignedDataPayload.classU]S@=K)!XZ
JI "EJ3է]k4$ؤO|/ZFƯQ~ /wf9n  V
3}J|2nڦ7,L+/<8i,rG]$윈uEĊ7CY>'rAT2C4Km_ji8	T;1({̭-^ܰ]0Җ%
ܚ*JK&XLfvc)ٹw=Kܵ̃s|"ިji7$S,CWcLfw-GJbh1=0#cy2["_5q%]Kf(G3fZ૖칵yl`{qh.Z(8CADGSpBIu&p'i7D=:dhڅxoE}񧾐R7?IX?kFv7mӾ{޶_6K
|7Y=;t޴]7٨GThႆSjhA5Be50ZUsQqWe&CREc*0.
Utc~[i'O-mۢXi[^ˏ
!v&Dd4ȮiT@%PGiBheL鉏?b=P!.j'RI`n5Cd#H u4%M5IztIAL]`0h<@-Bwo 1S[0)(TS8Zm;[Fz}5D?Kֈn mـ븝i6!ge6bT4Jfח5$,Oԗ(4v+ֿPK>;  3  PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/SignerIdentifier.classVmSU~H7	P"*mXZJ*iDfݺݍ
qQ9Sb2ssr30Л䦄c7lnJKLz,\SB!*ez m<lӶHY"ȄҳˎmCa9tQdl)\M
{DcۺczU0P5Gw--8ҝU}Dǆ(J8TlZڎR^J^58B}wF[*gt4j98ҷ i:C_YhyفB\
⋪ne7l-1ms,|?fΜgK :xܩmJ0x}
C22e1"ㄌ2N8-eju
KXp\8Z!HoX:׊-@le6u䠯vd~uBN; `-v]$
u]#;tj3Dlm\l,iUJX.l/q_ٴ"W>8J#4]*
b(EpI zW+x5Mˬ]Qu`5	̱gq.`)ox+	d8[,nx;I2,V8Ҹŉ\-L 63Hv!Ѝ
0N+&A7"88I	%@qh"{GAzBcn:Yx@{3a{i!j
8#־Aq>0c1XkZ֬}LqBR&3]l/0"QPe/*)0kDԯU>Ԣ:=|#pRaJ~JN2D#D8bpD#ΜԐOvBL7a1
1?1zO.rB%̴I{>PK>	  
  PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/SubjectPermissions.classV[sD$#dҸM/$ihEIQSJ/4-$nR'CPQE(}7~xHwQ9v=T3:{vϷ߹jW˯ .4KӦ\phRym/t]X%"mea%/zAhz-TVD}	"5.q-ua:
s4\ӳ
tvcSx$
*uǳ[u	9n~óZf0o֘/f[))5]8ZlQmoVc_g;ڟz 狺ᄁ!f/_VËFmf&,lZVZjTh*\6h>JtBgwNǋG[,$228*cD1eqR+T,x_57\q]8M-wsvp1xl&6IlE6{B3]YrZܿ"sx{M|RvV]MFinSB7M"¸y=72P1
]!LBJE?Tc*x*T̲",xkpcSü	,n+x
*8ÆL"HLn_3&&\kдk+#^2NB  J}rg9wjRvQ67QgcI}G|1$QB#}cN1?*eLPߒ֎\N`?c>~tWgO=&vbD)+s`eMQDIT0M@&3Ngaؕ$	h!m[YNGODe[ޣL,/HHeb)N(.&$û0Y &¿PK&G   	  PK    A             E   org/bouncycastle/oer/its/ieee1609dot2/SymmRecipientInfo$Builder.classS]KA=֦fYieEЃVDIB&tWvh_MPGEQ;;{0`Jad[\3
tA^vNsDɺ%,<~kUݺ*dm۹*v2<CwE4WDkbCEOaWMrbNqI&dE2+Q0N{/KFot/
+4Վu̒s+i~
`ߺ 90*F1bT1LG"͠toghĠ,bUw]r$1 jA&嘗 ->ho@ɯ>c&D@!d@e)Eȴ0A.s\EPKvU  8  PK    A             =   org/bouncycastle/oer/its/ieee1609dot2/SymmRecipientInfo.classT]S@=K1hRR4  bE0VK&C'>pFzL{f
fZ0D}f>c80fŠl}4/3t^H}~Bb!Vb<Hk
E\%N
C{v0/7Xn0-g/.-r=h%7_[pa1y4@Is(SbgFmgHù:}aੰƎs>pHFծ1Lgdϝڕg·i/б9+\
^Y_\T>Czh
}QWRU!m
+hWС3hPe- 4뇍(z!7 w֤O7xP=K;:^\
ޮƏ7T
0$R?$lJ	L|s䫗`4B>2aO7p ἆhED
*.URN_.Ks%8Tq
TtbH\4*bD%
]4*΁T6_h+룙cw5#YDĉhB,Vj
YvoW1>a\@%Z	Dސgn~uvU"1!UeR.qzIå*3q'Т@|Euĳ
[$DЫ%C+Zxv|(7lDrdQͬ!*hEe]ULUwPKb)    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/SymmetricCiphertext.classT[SPBŴ%T.*""xVTgxMN{_>xyAbyv͞3q<㐂Pr8'
^KN+P1D9=6irŢprO]n׋eZr(g
ȞupC%Xŧ$:xl]d9kmu8*" X3tpzֶEްgKJA8k\GA2q8eDIA-U/L,me'./zh j̿!T~^䶀Cv&\Q-Y-!Dzbt*1}V3faĦrCǃUF	K>-Tt8SEL]*UP˼c9cWt%@dN*'{9d)$6Zl%ߞ!!G
;?4C6*m𦖒-#]RJf?hЋѢ Ba!֒fmm4<$f1E&8K,.IES,EdIWȸ9'K4c^
JPF'JE-8Cz[哼O>H0ԹyǷ\ԝ-ƾJ?.ezMl٘jD_DJA	DQH{U-BC}e3+S_#1N;5,T6+HP{$$\[C>K8
g`X
:PKc9    PK    A             I   org/bouncycastle/oer/its/ieee1609dot2/ToBeSignedCertificate$Builder.classXwE<Bʀ-OЪiychC),*p;-a7nҦ/AA)1=gxwHОw7843aq˶֤ZuÐݽhv[=aq lq$l
XgҽfyWx^mCyѰy='=dt5l2)+:o2!fL

W꾼˴5aK3I]qˠJ
qͤkINچ[,hh{U='2=0vU;srQ0tȄ=#C
wI#݄{	KJsdwGʘjWN84{{rU뛩.AV~[%Vn[62*^EU	%>g,rIxlPO 7䗠bx)1
GOb_zgWe y&ġȹ
Pʤ~gffi.{9:<SU:RqǄ*]}!+D0Իރҙpx<ϔYݻ"͔yz{87%H~5}&B9ui]tRQ=U:<H8κ4X_%sdG:oxN;	Ci<*ШOH[m>ҍVDJ^I,2#!7OxP{QXҹ_{:KX\MʍFsx4N7'7fx6vG?>=F{!ޤkg{rձ
[7`6y!'FQ
Xp@`#
lb	laWpD`3
cmxG{q\X~uH
gÐ\hŰ*| #i(Ǉ`4q%g,>g,dcabV$ Y`q*XdX\capXdY\ݷ2RHٶtk N袯&FiJi"EibMibJiMibXMeM4q4N
3K?ծU]p7*7_ҒtӬb=_<BsE̱-bu|y^"fXO1Dtn%UK
_·*|	U%RKF/kTn¿c]{9e@RQ : S`ޏN.8
 b 
 E`7NՊ]ej o(3g `-N G@R-E*TS)P2K%G%Oţ2Ce,xd+nژPKXL8    PK    A             A   org/bouncycastle/oer/its/ieee1609dot2/ToBeSignedCertificate.classY_.ׂXXu\
^;vI\cLl%iմMC^GѤmnzwbr42$nGo3άb+ *|潙̼yf[ͷ?-㈌~d1(㌄}1NHhI	!Mׅe]b\b\W9e{#^樗9e{lrQa^1,f,XV2"-A0%u-3&˦inӅiF,s%eŒ:t3!HIdts6gbVN1-h-Nu5%쁊YEI6m,;RBB1F8Ly]-C+Xǌes\kD!Ohi#iس%,/Oxj2IC,Eda﹬MkѴIEcHi3"2Ќ.meKFȚd6guͲ"Y@B)&ήZivwutjuxdqR}UۢYit$B'Y`Oۘ
>3hGF-#yWc07"n2"	C`{Oz2شXB;f	{6'!NȦL-wX4Hƒgpv4?6XerHD<4K.|K.*/6E%lrqŰiRnOd8(㰌28.ㄌɸ[=2NCõ~	GVޭdwo@JNtT[E@>B֧l]1
3d=fk!?ko֕YñVrg[|H#ۦIW}[K{XTnXGO'c~>u׹jj\={;3Y]gɯkד
~5:!	^rxʫY/%<XC`T|Ia,	SYv;:R:|ָmLjD0R䫍ٓ7zqdcR}_RO6zqF6|ztnl0YVNW#Ac_du\R&+*܀fژe\a&| RŃ
>O+~|F.|VxHASp&Tp
BPpgS
ze*> 2Lc&_Wp8[L;L{LL~GL~'!!FS&`11<B	/CmB$~ByL\֖lRHPb0Fkqn9@AI0)HrFʧ3Rꌔ{gYTt"4R
#nMD}^WzWԻ
xIi-e5Vu5"0FF:
S#W#F^i+!5p7￁B6p",-O_$,F;˼х[\[hHòG"s6wnHy7954.íI+.m\{NR֛e /~!ѸK}Ϣ]y=lJ	Z4)[h<l=y'>G|W\Nd}\ >k.9e»a.is;p~ޅ{`G_ts0Jtt)oBSOp	'D,95X'9άk)+uqN&7u +QOM\L,-GB:!XTuBpZ'oU0VN~ZNކ/Vs.UMxj֪
x.PKaڪ     PK    A             B   org/bouncycastle/oer/its/ieee1609dot2/ToBeSignedData$Builder.classS]KP~_9KʊH$IEBPP]MWPGE̯8}{?^ "2c+*.%qNp]8ufHWMn5FKhCvjn[ZGg
jxj!ʺ՟Yh;նaR1=6N'J|u)!,!"Ab(M7V:b(OI80&a.?%{DZ}ogZIL?RvfOOo!+Â ?%#OK2bX`lonY©um5hZGҴ|itJw@u/ Hg(dF @o$^$E!rf8"	PKP̀w    PK    A             :   org/bouncycastle/oer/its/ieee1609dot2/ToBeSignedData.classU]S@=K) (!
ʇE[eڥCM`g2vz-m@{wg9wO_ ă*W//uSw&-H4C+	'6[),pQsbyԴpGgDrd-k%is]TC3Sj0xJ3ҩ
n:s;	eSꪵe&v\l3NŞ̄V
*?uv6$?"CGic)Ӫت9
%-gP=Hy2yrVsa+4?f3{}iP-PX¨崾;6P+ኄ:	W%KhpMB#:a+t#6RIf*"u ;-{D_eYH!8OQD nTN3\Jb"eJ6Y6E!ѓ}j)a<&%\.Ӄ/'tKݙ5	^\GnDbt[^/</j0 BHF32Z0$"aTFevܗ	<"Ï!z.{Jsፚ&Oms~1GK^6W7Я
b4j,$pZ	\d01#ȑy2*(<͢92xU	0yYt3y!2_T -,+Լzv;|Q@]r^QM d)J#r'(),@O~U,╟q3:[cLqQ	%ix3/F)ʔԂGPKWZ    PK    A             D   org/bouncycastle/oer/its/ieee1609dot2/VerificationKeyIndicator.classV[sF679Bn! IKicZ	>VG=[_//C`fJ43?9BCdgtt߹?C|BZ;7^@MsAC}f*
)׾cI~[X"mu,'3k~B4^j1*E֒i/ä.ʱrUs:ѶQ2rTaFum]*=rn*	g"vl=k2k+
Mtlt~g%g\2vᛸm8_GJ99}z5;25&\ʚQԕ|=hȒxDazڽ%(C|xPxl;'0\R<uB{!ݡVcr
B{
T0 
ܣgs[w
嶏E.犻BlGzׅ'DpΌ_JE"ڌyB{ãR{:!D}B{=${#G,ߡԝ$0''AAa\p ]zЭ8rkE
Ěc5dqt?⚊S4>bq-*xŜQiY$>Qqyq['W^K{7_z14o%>D3q@/tua죛pg8Yzh#aM80?GAw
ISw.zpb

DP\_[x%bFl-F:NJe2>_CO_>(GqKv)*T<'''F;#;Sב]4 $az6cTLŘ1fLٟ_!B)ChSydL00}OHu]aPj#PKBԠ  e	  PK
      A             0   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PK    A             U   org/bouncycastle/oer/its/ieee1609dot2/basetypes/BasePublicEncryptionKey$Builder.classJAgSZ.)B4
6]9vn/TP }ҹ#Rh%037x%05&k{&U2:}7@qJ&ʞ8p鹌]n@'$L"joo9%cF%e^&Q*Pceg$g*9`"@`R`Ã*m{zf8f'eQq
qQwda迡ZwO'X3K`<̄(Li<-B!1E+
RITQ5և<cYFLe_(мW4[F@uW(O <o}
Sq{A Ok\cwʗl짹~PK.4^    PK    A             M   org/bouncycastle/oer/its/ieee1609dot2/basetypes/BasePublicEncryptionKey.classT]sF=JC\H
|ظ%$.ICdy]*$$g}3%f+!4xww{νwW$*HdJ]U0x]2@!נhH
DYu]tmJϽ+	bI[(8$l)oIyNyS0eG{hҼA ,U;Tp%7-QIZXEf96hM1k2˭%u˙͇%z[DT[rKoJ&|_7^ӵm+aZ3sT{@:YBE<xx]ܝ]8OS
!rsּps"0l>1e[6EQhkI=nNٗe(C}4	`QVC*FUVqD'*R'9%լ#N-=d<[ڍKs~S{!Y4ӓ}'S| inф;1OWj(*K|wO.ׄۗw#*F~$t!˳)0x6cyfcs).pk8\es&w
W`sKi\(,275żu/x5
^V+K+ch{9YH&Czn)ϣ0@ez0NԎqpvqViGchdLog#+ȸQ~/NVZ(M|$/[([#HTdTu<dt)24fHi$W(Ә4^ 3l/Bbs,llKSzH4\I$%Hrq#JuPmotB'>c[8]ap\auy?PKx    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/basetypes/BitmapSsp.class]kQ&fM֯I?w7ǈ(%"4PJN5
E5ł(qN
!32o 02{Pg:ur0PO(wP2̷z&J>Ey**6C)ۼ~H.w֑%V+7#ɘ*ၔaHue:feX=QAƱя咴Ǣx8P4`7`X0pakoakێ;i@3uHw$N/VRlN骧@"V,d,aF{rX0p3&
m;&qW?e]EitHTRtߊVGLD.Q! zhuz]J`
cyrgX++jҕL2@Oa{g?"y\OE
dH~:MNPKh/G    PK    A             L   org/bouncycastle/oer/its/ieee1609dot2/basetypes/BitmapSspRange$Builder.classSmkA~mrZj^ֈzUA(~\p!JGVS0Roafvgvf}4&C=.}$CA JbɰRhToW]:.G;Chzvy; JG7g;02lP+J)=$>o%'3~udP!0i*a)_
a~OD}θU~n0md0ð}~W6[gwH;^ADc̨`\2b
̈	LZ	U0⦍2j6*X16p:C/（cnEB)Le&hQ̚t̤FJfo;a>1\Ռ OX> |)`Ws)$Q_!/"ZVP>wDtGX~tIڤԱU~ PK  b  PK    A             D   org/bouncycastle/oer/its/ieee1609dot2/basetypes/BitmapSspRange.classTRA=
"t"A4
ނX)6ɘZYvcvB⓿U"(?J	IRAgg3ק/ qߏzHo`-J2oicY<<wR<Yy}dhps<a:C^v󦷴iϙ%Ks4l1Ӟe3)0
l#Vs`2F;	3NMI"G=L+@j9PƇE]B@. )1L8#WҮ4Z{lfI'$?Rg}c~ܮfeKX+)R
h
)hVp\A
Zz5=
;=哑=E<m%_6ژ=r
Om~M/qBFQY
]nL$}TC.h8%IhVC__}\piT㪊sRщQ1(͈4c*0сazawᴛۥm8MqaԇvA@&J5
dҬ46뛘60o (l*g	[uoѴDmWZ?ba7<{7eR P@edSFc7ZyM^ge2OSdhQ21^^ђ4"Ew3&j%G<w
^ķDo#L1FV1L]?PKt  B  PK    A             L   org/bouncycastle/oer/its/ieee1609dot2/basetypes/CircularRegion$Builder.classS]KA=}XV==lFHQR &8,;)0~@?*Pb6w̞9;#0&C̰YDCJwb8zN]tbHtLnuVW蒡d;e,sWB!DxpҶ⮐[j?9/f#+i;m\!+##^^(6mƽ}^u.)FHWԗ;&lf0n:Iy^ʨ(?c?l"XT1dqEQXcP&5XۂAZp*&w]b1-h+A0x7O (F(' #@/$ޠD2@z1rb8 PKх  N  PK    A             D   org/bouncycastle/oer/its/ieee1609dot2/basetypes/CircularRegion.class[S@i1VTEbEVt(:)MN4&5٪M|+#?zM#hnsN|`%DSF>cvm>!A.l|zd1I{Yegd՘kd`bIQrPBx.T$Mn1:9l	nE7ULgگԞeŪ\	'<k-Xfѧf!'ɍU
mcI!ܐkDuv(
56c,0R^2,soӟcfm&5 (#Sw]Z޳Fq~ߘdb$tsOo?(kE*K.2v#G^d짂ec4AOwq[_R*em]BImlDV2r;
_?s6KY+[q[Dv`Jy@[EXX	h؁*!*i
Έـ8Ω8bvAL	\fHA/.+8$̰0
aL!ɈXǸB`'ye2?AUY9:?A22=am#EnmZz	%L"b3"4B~oеbZ:t>7B;BDFB݂҇.xLktj_XԾ{k˸(-`1J<щtHC th0X{]gy|pb@GQ(Ƅ>h~_=@*ehdT[PK~׉;    PK    A             O   org/bouncycastle/oer/its/ieee1609dot2/basetypes/CountryAndRegions$Builder.classJ@4~ETD/Ņ iz,)aХ[>"( >xq53|ϙ	:GuOzzS 
fYMa7$GS-%Truܱ}GrN
]at}
mO+#j튣H7OI?`wfl7<JƑ=O,'frb@Ҁ!Gt{:kt|rI_]|9gf~o{gE{i#ZFhO!h4Ɛ	7(Uv;J4?w`Zc4	czU
K 1 0sw)^&~~ȵ@q!rgGPKN    PK    A             G   org/bouncycastle/oer/its/ieee1609dot2/basetypes/CountryAndRegions.classU]SI=(~k.a *%"OI38X?'VB-_/Ro'32@pnwO{s| F1
!21Þkqh;53VEWKӮpZUk逿Xn5O{su.ta<#`Pim
N?^Zcut^__箘xUPg<nTTp
aPp^ͪ8%9m)b8o"0L
ۡblj1*VP[k5[Qr;jV+ߩw3
YR"fmWQ.	XIɺ-F^@SЧ`}
+Wp@AnNBշcD2ߚ$|ۭ䷖ɘCM-i-Qn7iQB;`h{l>z-Q&3OUm=^&jN~$slǛ
:vc
{pVabKr659(pR$ͨ\UqWTҌIs]IT\SpCܤ{u''^n-t]+8n}%aU߷ɖ"ӟ	1|/SQ	G]}=UyB!c4[]зr?[GWqGdyDD$" ЁAGɌzn_\C̖[d	>I]C5+X1E&D&/p_8^`TNА/b"w#(]mh{Jcjp=_PKIo?  	  PK    A             R   org/bouncycastle/oer/its/ieee1609dot2/basetypes/CountryAndSubregions$Builder.classTJ@=k1jZVEQA`A1Mǒ6B?BARP(qZٳgf}{~%X..0kIPL!})1]2|*vY-7*.,Gzɺqc!kzR'8rܚ^a4
ϷIw--"ZZۮ:^1<W齙OY9lXv\Tg%*.vMs`PE`￢Jn|L
&.{(c\>D1m}0sw=g+rwe,50a J`SV1

3\_u/:UN$hG? wgc"D8md4DlB@)>a	P10#	Ȇh0|Vq"PKlET    PK    A             J   org/bouncycastle/oer/its/ieee1609dot2/basetypes/CountryAndSubregions.classV]S@=K )ADV@ u>҉>pF-#׋(nIё
Ry={l pC OC12	)W4<whEs2=Y[:sr{!Z-=!ߔN^0l+e3ŜSh+jjVAM&/hf)M|#)9\\k@Me
L[r&EE;$S453csG5<W58G74{kU}~ hި-Y#ݜeRf]cnjk[jO04{P}1X$,ሄZ$J80^N$ܾw-b3nsR,E</불IX9_?V;ߩ50ի{u$ws[%GZjZO?ν}Q#'0цa. 	CY1;'L_!$9/̅"(̀%]0#2NbX&bFeDqnpӕN[w&Mu9]tMOӟjk"/pZD4k	((M.BhlVJPoTb5Pv*|<hT0_iV'%x`y~'b#"rIH$I>3/Du+7*H0ַɂ$;q(^yz9}+Re{}v/$;7q2['>S-} 7ѝ-a&+M-OPK&  	  PK    A             A   org/bouncycastle/oer/its/ieee1609dot2/basetypes/CountryOnly.classRJ@=֦tXDur1'L~Q7VD7.(qFS}p=wp?` Sr'@r`d9bX"CNY"*tp
}8?j"@&4WKkH.Kl_Z"llA$VpUd
rRvnbn~{lwD+B&|Zo\pO:ڟ):ұF,1jbym&M0aa\	;QS7|(wˮX#(Bj#ԪWΩ,Y{|o|Pq/>h¼E~ٱߐyj?`S]tHx^RVPKr    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/basetypes/CrlSeries.classQMO@}Hi)*zb`L	$M-֖	?1xG
q7y3egv	bFK?][$-.n kr4y#,,pK}Qj['.h<S[朗վ'i\<uisAN`EA\B-v-̶
390עހVl9tm-׹tD@tĐ3]G)
	Ѡ"AZiחI3oٰzG^4'
ʛUF3E;?*=V|ewHoP'2/P'l>bc	̌scPK0S_]  o  PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Duration.classUmSU~Bv,B)`Chb!`IZEkݘlx?/qδ#3V8?لD={=9眽?|!A(A$ጄf	/JxI¸ o`gs@Z& r,n	ZT9m/ay}[7v@|⌻3CQK┦k j&MJ>R"UM̌ˍ4/[I[ˤfΩ9v{c"*LU>2i,S<.)kjr`'ܮ;jJKHɳ-uG
T=^؋LqǫT%l6O3tWVMdD1bjzr.,+.Jx88RZYUY&F^՜ba5gWWKՀ!,Q],\XcO]Kϰ\^tem|H)#[hisjivxFr:O\7Xե=:.pWy}".("(bHDHİKVqӪӒQdI$Zpz68lr{r]=h%n1r
F+S)|A	u#ŬP?XV@gY_w{Z֦y:gRN5huF
|XY:L$	*y?T
hmsؙ(hGKXPЁE
qS~,*8(RЅ7lp7zW9rCoqao˘{2i|$cr>rɸ
x9ܗ)qm
DZMә[4e5;}q^G?0_%}ԡO>ЯЯCFe~ riو2M~6aC<C~cw-py};^#yOho^>tl!Ga&v/!ORS[TASvx:eMD99_z~AkH9
"P+|COcENS˸g鴃4r/uR_u $'#:1{cwǉwcdczlLb"4WBvFқ#8{V\[%ofzMK㙎{_ov𨏰]@ޡ9HU-U-uU-BU[`[ʍ(C*>PKgO  "  PK    A             C   org/bouncycastle/oer/its/ieee1609dot2/basetypes/EccCurvePoint.class;o>Ff
0F
h'F6̼;F׼Ԕ̼FtҼ⒜T<C}`?Cd[%E%f)%FIũ%ΥEe`+Xx8rϢ #H<A0Uk;F<PP  PKD׾      PK    A             G   org/bouncycastle/oer/its/ieee1609dot2/basetypes/EccP256CurvePoint.classW_
˖QDB(̤16!I6	mW04NBV%Brmm]۵{{u[݃˶kWte?l^f$>>ssC?	0@'
bL/<pibx,3xvYI"Ne<,@ UDrfv4.neٹE\03zdM3mFEsyP3a4TGrũsT+K\I_ "4;gmrl]G5-Gx1{ atVw➇4G,x˻Xr)gጩ}j|VQ-v4Gw
AϪ٤M^4UҤʰTȄ*1SC]PԘIQ%LSϪh>[-29ǰ-8*q[MR{b|66g-mQSԂ5IkosH9E5Qzf5{Oo^\}U|Lbq/#u[3t]>rࡌQa89-;?}K>x:qNNocQ~PJ
؜1o8QбWN:z{h]PV%]E+kv2ҹIuJץДe.,	9S&_b96>zR(]BDBT !	p@°I8,~	G$< A	I8J5Ѽǅ:gǨI
&Dgx`>%pݽD=
mO6@8)$Pk{\ª?]BF kuum1#D;hhc{0"+@ 5*
p+cm}=Q]B7	ハ4F.?OmDwPEfO5
."K/4[=)t6fdJRlI#?DVNlWVQp
Pp/$}2۪`d=ئn(
ӼY;M~dᜂ^
`SA?XycRTp
c3\+RdQxEI|L[2i|[xwd|2fZx_q_J17d5&_g23x@Y%&_˓/	mqRpN>J7!CM^8fLN# QtOb;?{Ɖ[?J|W
5'OP)4"'vI;"x/:ވ^Ǜ:EK=.D]`\(' '2.%xܻ.k.׷+L/B	?e%G얀D?i"!%Qrֶ#E4+H}o1漇	!b:]
fӑ2/W5zݳ
TWcZݍ1:=
}71:F:s|w2)ᏔJxf5nx';俌M1s#82~vMp[pepXA:NlWF.׾}.*-#VZ?DPN4Oo$*{d	ʐ?02|T{D_v/;#V^1#_$|*Hǳ4E[F";b\ƕBU
)I#+G>G	~+tos}OZUETATr`0kzu~YSK%39xS|Rg}Qq"P M;%i=GEF0fz2'J'}Zxƍeι@7/&{PKF  l  PK    A             G   org/bouncycastle/oer/its/ieee1609dot2/basetypes/EccP384CurvePoint.classWSWIb
5lDoBB}lָd>~i?v:LhG)__tڞYp
d{=ݛ6.|0v[@ &;`LPL/< B9L!ɑўd_5Rf53-R唢je$T[cհL%՚|^Kv.e;T*f#NS
ImM<hv뺑ˑ5,6U+]ZLe
]^%
]TW\6b;JhH5;O+IZJ7'COGKSТ\P&lZF1zrfR`Uںe
ؼ4bӂ=uw#vN73Hk9M1okV.
ZTmh	%ov&zF%z<$Yzn-pV_ʂW7],hNQ2ZzGOj-_T	4\2O蚦uٹ?mٻcv1Uގy{y>2b5eOR1öZZ<.z`%3eх42bԴ>54@fh<Z4 &5LL"EDE"I"&b6q":D@MwN2fh='Dcm'r)cr{\l;y[]f1v:h[L^k]1Rk7~ d{l~~m)q <OqF>"+lw
4~zZ/)ɴۯ+.`W!Xͼ4ǔ<$ԢJZ<'A'AH&TLPFTJ؉A%%<!	xٓ^PY/19e&Tj%d(L"8I.gp1#9&v}`R(L,&C	AÌy&#8DT]TY>W.*Q~N@؀QEc=7y{}7xwzӼNc
騈D"n#acTŧ71︉/" e>	O@(`=0utܻpk2CyNzaW8ޚY~
H;M滗2hl;CyȩxY|>-L/JN\'6
?vɘ.&
`q,ȃn)) 1:+.yPqC޸
?skGW;q/x7>ݫ
chdL(~S?QunyO'_FrGOC~ܔ9Ϟ<{+<vڃp:^\B\4\oSqtǆuNfggwtVJPKNm  O  PK    A             P   org/bouncycastle/oer/its/ieee1609dot2/basetypes/EcdsaP256Signature$Builder.classTk@~nk?vfuiGЁ(Z'(ÕQ2b"wA?Dahrpϛ=_x&üxPtxơ~A JbH
wןlau*U>܏x<w"D~(JG*n/vw-tO02h~
!ZzA(V7/Roa46%07#Pt@e`#˂eႅEٝmk34uN*E7	cM*?IA괵$͡ĿtF|G9ppAls7mFwlTp"Vl\=Q$q8q
,dE,
GX3h5譒Yaw5 ,yާ	
&eNPk~zzk/nL,/|=auLvJmpQ	PK%c  1  PK    A             H   org/bouncycastle/oer/its/ieee1609dot2/basetypes/EcdsaP256Signature.classURP]1XE%D/V2[ǧ4=v!Q'gTo/>Q>!t
>9+묳nۻ F1ف
`1w6;#1(Vy˟p['u\\#k\PX|iu9AUrjKU)YZ^,.Yn.է'
Om>#c85=mzftc~ժt:jIá&(q}|͢
rbرU_+͂mO׃Y>;X;G5$9YثNrp1 ]2!%|TL;'n)ب@SХ`
(Va`d#'lKO[{:]l"eyԈb0聦e"d`Hja%uXqc]<MfvgmݪXZ<Mxjj{0~ҬHw5%hgӳ_Ch؎6
I$d8d֠ #
;qTVf't0bNŨ=8b/0&ipF~dUTчQUhEA޵$,uktщhCJUTMYQ`bVHPN8od1㯀eJ"XeS3okE*wyhdo1d$BLpM ]ڥ@W@'I9;:O/H-B/[&K)bh3DꀎEqy.Z1ƈ-kml8xc{~:Snoo([Z*E
: PKu  a  PK    A             P   org/bouncycastle/oer/its/ieee1609dot2/basetypes/EcdsaP384Signature$Builder.classTjA=&]4~T&eQ-(bCBf[]-1|jĂCwBRYPtw`ݹg;
cX2k-K[d<@?'Ƒ`XZl};otAu"U<y4vzX^DJ*jz/vw|-tW 0h^!?J{_J/$CeN,AmJɇ!'5wO.Y,,,N3NfMsO?*ډ<84l{?Hc&!ikI]-fxlE.8ppAlX4ep2*ff6Jac6ݲq7iOI9/Hvȕ
D-ҏe[0fj[ilѩ;O0Y\crQu?Ndam2!TLEWG)s	f&1#
w֧̻ۄej/PK  :  PK    A             H   org/bouncycastle/oer/its/ieee1609dot2/basetypes/EcdsaP384Signature.class[S@KD.^^(hRj**cu|Jӵ
	&[F&>pFJ=xNA_n~{@]XǐH
xaݸ9R;n!Ryu>ʰEEG$	bVɩ5Fh4ȚLjfuyrsA>=Qxj~?l+.71s#Vť+50l!-OVoa/Y!CnE99ytf
x6C`S2z0˧|ǣ'VϨÞ%{!&G DKq3
_38ӎpf*[
+(ؠWF)04V[([S?O]̖=*(eb8J{C-K~E¦Qkƚ8+f˶o2zWm~M8jz0zYiwJgӳbPװ
Hp@CQJG4Q92cDQ;qBE?2*vcLUUI|J 2Ud Za)	~|ݚ-ݧwt蓅ҨOVMY!pbfHP5qHYi+pdM)LE%zqN
NF1wi]mTʱ!:O/]^6ǥ96K$pLDY:8;O1-<\ގxyry[{*'$TNJmint["/EqIJQ,PK'   a  PK    A             S   org/bouncycastle/oer/its/ieee1609dot2/basetypes/EciesP256EncryptedKey$Builder.classTmkP=/QmnZU:EXc?6V}JKHnJŁ?%>Ȫ	<	9o 3$C<*QxTs`XpBaKQs\?ۨN=-ccs[|q,Pom:v$=ȯ׵]G
Yjc@ܕw'ϛ\
;{""Nvf݈!E2;Jجᒆ]e
ڛ(6;,^0XpV;숽%lЉI꣘گlI9a$ӷcۚ0I?0
YUfq@
L$U<rWesXё=yt\}JYAcEhyv+rΤ$ʆ2`v=: ]u1\u%ԢR3J+X#<!Ԍʨta}GWVGhj5.j)G=q~LU'x"PKCO    PK    A             K   org/bouncycastle/oer/its/ieee1609dot2/basetypes/EciesP256EncryptedKey.classU]SP=XAďPT "ZkZEt%MhMj2'B?Jݛcvf&{ٽg7>ƝnHH4]siRlf`:_-q_c!I,$C/kWwrOiW­Ae~hjQ3jXtS:/e2XvAYeS_5-rUsI5=2u+劔&oT-;:qm,PUef7]M$XV
Q
ąN9Z;jJח$
_N`!q_cX/<W}%Yk+$WB	$J0V'ɿ;XG-<IG[5]D<j)hVp%vKRؘ9/.d+SC[Q{05[0<lo.dzG쯚}E)p 0Aac40'qJƄQ0gQ{Ɣ0gqeŌc8s
3'.L21CߤP&6Mn'p/j%t_<1LZZ
= *L]:
TqY9ye|o!~=?|E5/Won"U6ptUp
z:cb bq
6q$;H|VbHm($IQOʪ~vHK@Sy(io{C$7q"CYH]&mTqRװ[S61f|L~:x= PK\-fD    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Elevation.classRJ#A=3I'i3u3$H D==ݒ."n&n\Qbݶb*ι[[ kXdH
R
#Um`ۉ|cPy]rWJYTʛ"s)CɶPn3T>{\?*WHf(KsP}%٪1L34ӷb]]ey_[X#샸O?hK[J6|}-=TSM$L|AN9`D,g0WQ1	Q3
/hzK:5Z)028oH
d埘a&$KFbIZg
o|Л^$
hP̯Ey5Fz@SznTu!NyPK>X  D  PK    A             C   org/bouncycastle/oer/its/ieee1609dot2/basetypes/EncryptionKey.classT[OQ@"WT)*ZE ݞeiľdO7CMIRl&3wf9;?~~`+~eE\c4,Ùf`tTe2J?
34pK2a[x!N̳5p*^dLC79-Ǘϸ0s4K\nUK/t65Hô0gڦVӚ9M7Eudh%aYMI;o]9&W5&FvBI)-ivsw%]'qSGp6ϪS
\WT_9PL>IX668Gghtlk%kl)z@&QBf	!	$HhF,h-ýSxtm,`4~"܋c)$!U;솿ZU0Wv "C
O
9b};ק',/dqIFjd'6 Q)2`HhW52 "!h=D/ƄSA􉳋)ĄANb6fuT}珵̪
QDQG
t}7B"+C"1ZaB<8y`)yD֕fx	EV$k4!ҩR.(%Sp뭘IaBާU;YAz	s!mo#V?QId#guD#^6zPPQGE7R
pvS#a:`٠m>L2VN<s3E܁+#ҴuAJxXF7PK̝jH    PK    A             F   org/bouncycastle/oer/its/ieee1609dot2/basetypes/GeographicRegion.classV[SV2	@Қ/Ii4M M
(vh5tJɕe&3L3a>G#˩c7nvv;{Hϧ?b'7h(
HQwlCeL`a[tfR1Pܔ%=`.*ETW1yF3VU,"+6e14fƶv԰vТUjQ2J,*=eWMi2]1tTVp=cXb05ڎ.풥J5Yy!:[[SHmyLZo77lȆ[
ř˚힗Tbwrawywub6tRZN#d%FͰijljJ{__B#aʵ;}5vyvtE"""1*⸈"^qR"ƨVoښ7#JchyX79MSe^ɓNZmML lZ)\=ޏiGr-[wtP)fW6_
ejvF+4FË;<ᯣPPjzuc
ەmvDCD_80zUpm6 sBG&.e.:\,#7$L]	Sx\d%aŐbU	q,IH`M"%.V$xO9lM}Rn&~vK){;
!'B(٧	dٯ!«CzQ1H2ÿ
>H=F6q1r?(MQ|kǇ=(T^(J~R[gV޳dR=k [ڪ`3"cǝ}__8A:zD$EuUǉW~V-{TZaz1kb&XsL$~C!B_,'~G$|\RIGHhAɃ-se\}
C{
>"7PKBM    PK    A             O   org/bouncycastle/oer/its/ieee1609dot2/basetypes/GroupLinkageValue$Builder.classSk@n[5-]sZusե䬈 !O(!eJaZq%+`e}_>{? <cYzȐsD^^SP2xJd?<AJ|/#vO
[C%DE-OIub?24dK)ϟD)oDL2vQi~Б1Cy+U~q,	C,ehTyk,ͽCh/M%ÎSkNy{g&鳦X0p¢s`:XaV[cV(wL((⮉%7ۚ&q85sQ2D$Тlqy0]ȹT>C?LWKCpk_t!Xe	힣xT bs\l)yIϱtQagHE$,\~PKV  x  PK    A             G   org/bouncycastle/oer/its/ieee1609dot2/basetypes/GroupLinkageValue.classTQSW.Id]
b[[Y@ P%P(vbd|$z7ݽaOtS־dXrν|wι{W 0	=I\`eŶ}d2/7'y ;^Zzu0/&y-.j?5N5,P:tΐ6E'Qݤd'A,@Û"Ynh~`
_OV`V%M
Mg˱=G4F9rE7K~а~KԶkN(=n;םG)͓QݤDSVu25[ +C(Qk
'b\u_.U'rCNේ%W<s<je9fVÏQ3J_0pݢ]G%:gpq
h8aR9
ja4Pg3{K}HOL?v6-qwP9ے^tB
02Ot]709*14$$ j10Z]6p
Wj̧5euLᆎX1,븄ϕRtN/G_(
5O=S{vi>R͢iCWi5O)J=B5k]'~*l?\le
6ȎIiHkT:`G?F~BerrHM/[/q
F+j%V`L9Ku1=5Dj"
b!ʰe`OHZޱ(kwpwr1dP}0`E+.c+y41dw(W
[7RY? =2> APK z0r    PK    A             C   org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashAlgorithm.classT]OA=CҲ"ZE\Z
Uj$6Net~Ф%?x-J,!w3Μ{; xn1Xrunx67RoR/7i
1huEQnq$\vSȴJҐW]a谜:dY>\X8=Q;}E3}1mEhLHYsd9Qd议qXfڑTg%84+ms׉˙x.BPE
(tuKeBrWÂp5,fhɝ=sJMOLNՌ$JkUx5/:
/U4ǰ_b)Cw$w#i'8.FQK0rJ4}F`ܱ6sa/Yg/%yih-
nⶆnhЦʽv*wH]
^+>!C1>#G xࡂI?WP0姈1

& N?|N}ɍ/xotTilS
	FlX@5
sz_lj#uJ7ޡ-wt";JO1҄zK	';TR{XO>Ev]\(c
澜"{ӯD}##klՙU_PK    PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashedId.classuROAR((EQ;(icBD"Dyq{ݴg$W|ק>hhb|?8{̷||`re+b^!^k`)P^mh>P9&C$L]'(*^0$;Bn< Ãnc Ď8m>?{k/lyKǵ6|({tŃ^hޫg-r][
ٔ0\?Ao92!Dʍ'WRE{ΝHCܑΡАpZä)
y
S1L>:%b_j:&ґӑDDBqi$tC9ΧPD)XJcF\P,Ә%zGwiJn?yX"zA78b#EViU@> cp0?@AtL˓g;Tf81c&g>VVY4̘uEɯkcC&
sBWwT0,F6e)ZeCYpi<GRGJͧ0PK%%.  L  PK    A             @   org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashedId10.classQ]OA=]Zb)~jLa`	T!)1!<,l)>I@^xGJėy83ܹgΝS Qf({S+ǉL`gbR]+!Cbh+Trƾ$rd#Ew 

nR,ҍa|z.J2 <e8
ER"~01?2D<!"oe!DNj4?מ(F[uLLL̘2,z/
(T~7Qo>d0aTQ櫘UX0YiFSiJ_R]XXV|[˧uj'ݝgǸ~Q4΁}G	DMqvr=e{	7pw{W?p{ƿKPKjG    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashedId3.classQMo@}k8qnր"hdVHDJC*=r]:NpJ-\85TKyz3 Pb(4[[3̓X)̔1uaPdN:2UκiΑx-x"dĻIBH6G+ٛ*N%ýtq?=8JL`K}F6KicڏwT=Hݐ&fLMX&fMTޟ~[kcO=kF\a",᪅ysfa
6ziZ(=':`=/C
wΊP=";:ðq0L&(k΅](aOܯqnNak	\*P5'PKe!    PK    A             @   org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashedId32.classQNA=]Zb)+Ĥ]c5$`LlRƄ4{,Mw0S|IP_|Y%`K<{3	p(2ͽ-V5Xj٩TGfJȀJ:/}'*gCE^:Ox'I( :|KR={P_ũd"2"S	qlA,#4xLDGT/2R>eDa'dx|ն	%)eF޼m5c1W=mF\aI\0y3ᆅ*lܟiD~BU ˵4њ>zwWrRu>rYv>]3`0ah}UU?~=r~XхbAwU PKy    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashedId8.classQ]OA=]ZB)~vykiM}(1!<,l)>IP_xG	HЄy83ܹgΝ OQd(4{3Xs̔1tai_dN:2UNǊ4{@<2$H$[IC@Ca:`L%E&[|ku>PXFkRXe<&G0U/2R!eDa7doiČ	Ĝ2r?ּ@򚽩ZUO+ÄQF7rX,cKba9ܴPE݂4޾'{:YE\Kq[''T1ȎN1ո v:&JGRs	#5+ֿ`w{W?p{&WU
8PK#    PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Hostname.class]OAn.GEQ>C
1h#h5H.XvIw /jJbLwM8sgw=m
?cBSajb_ի R"SUWm?h2>0="
*IVyؓ	.^lmX?.ƞ=?HB澊/<X}!"diljwmW4`0
^#["hد0Q^=Y>^&Ia<P|4:Ȥv8êYHYb\g:,dp=7LqӄeRv0͐y(֕>ђ'Hw)RN*Qts}gGwK	30v|"Cަp
iʀ7Oȹt?O0Buz۹K1eSxЪvz&Sutq'PKG    PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/basetypes/IValue.classS]oA=G",R
U)l-1I5} ӄa;[];_4?J6$w{9w;
(AT!{d9B0o2^s|NDDCp3q	Vh6uLf̤gvpu
g-t;}Rs83GycRkenq_c.Azmi.leN}w+j[ꉪpoRy'DD+P	2ڔ=A[%X,Տ'U9l<dLvFNPKs<
ȣ	V~ճj/QXU&bWT(pI*ErǐDA܎!1eknpj{N;if(DJͥBHvqrODu kk_Q:ǹR#C,4SVh2Oc2]$#dTV$@T0O78Ĳh?k"!IN&/1eH]2(JqmN!M	<APKdL!1    PK    A             F   org/bouncycastle/oer/its/ieee1609dot2/basetypes/IdentifiedRegion.classVSUKKPZ+T-%$[!Rh	RSn6qv70M?Ǉ8cIGfZ}?J=gI`sw=x>)Mg|\f$)֗m	CWuey3VE܊#l5_q
+ \2~Prl˖fE	K*& \iߵEO<u+t95)[#a:v!7JFUDL37L1ݢqQ4dXO(I?.(+˶[NADrvMˬHGfŝ1噝=ChGEQN.W%[p(b¹O7TbY#zxh>4~[~)W]Op@z|7}[kk4B7]PXtVqDň*xEqU1FGNW0󎘥^z=keZARܺӱK!yS{6?ZVB&b{ [_lZQf|+gVTpM|^5baH:Iג8;e%otڑL?4@GցtYуn
8y:dm]qY\bq;a$pu
Xp,R,,2&wIx_5i,iF,,SГ
nOy?\O<YiZ_0Kk8'хS8C#~{u(&{.aMQw` ^ǇчXy_#AST ]4V}`b?P,63FOK㏘;eǾ56NQ[naO8&a2g+RjQSQF"M~Z
S4ck	5cc6\0?}ߑDcC>㳚R{?Q~
 IB50fzLX6r:r
$PK1qw    PK    A             C   org/bouncycastle/oer/its/ieee1609dot2/basetypes/KnownLatitude.classQ[/AnJ)uièCEq&kYNIQ/*$?J	$2w.s	<	Al\%H\n@2pX)ҪNaqQⶐuoש'q΋K'Upټ(3Ɖ}O(ouqt#Ng&OC?#z"5&\zP=,KP[6WER{V)]1@V&d7aWM_/>U9cZR4DAti%*ʨ]6o;[_xDgM*ĳ!n3wȶ1I1TtHW>Qv~qe"ؾ`iuuXiPKhj    PK    A             D   org/bouncycastle/oer/its/ieee1609dot2/basetypes/KnownLongitude.classQMK1}iknoH=Ċ(R)'A<fװnM^(^<Ĥ.^L޼I&oO 1C(	e q-BɄ	jwm-:A[.eS28/o="~E}Rs^^Y\;
uXutWWϗSd_)L!E0^(&EL~F
_#F"
&<zԹ++?_CXXH 3K8M1ݰ	yL.~+3JsfBV6vy%W1iu1qchc4^b'p.aODseYDY
3#]wHxw> PKrX|    PK    A             :   org/bouncycastle/oer/its/ieee1609dot2/basetypes/LaId.classOPǿw)_q HW2$f#ƄtWnj#0uDn
b 69s b)<CY~kV̭ժ{'0Td8v0kA,yPQTkY)d0|__GI/HVKiRCKaRFsXqP7^V; ʆe{?zEd{2=!Deiv(<Ĺ|{9#/C%UzriaPÐXWNM}ˬ_ix,_B1ζvYNϯ}@3F@F=*5E&i@ǭ,191U*c긁;tƞtJs;_7L1Jà@^|jKJQ)X,B])'.kŽ6*]$KjK	REyŏX?PlY?Fq:b:b)(M#PN*ϰN>!wA<b*@J˨#<huQdB%co*]
PKE:T  6  PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Latitude.classQMO1}EvYDQrG0?.ăcwmU%l1/"F(c/dfu:|zYhP#m+^ gsX%PoyQ^TKoI]Ps^Z]82Xm+ZR~Uד>w#G /T.
L\]	+LG?%"u9غ(%W" HP.e` C:QnLr:t+站NXYuIӡVDIK1fw0ye(#^`TgC\3v0ѣhR4RVdNd3ߠ!aBkH?C;31AM݋g
F4PK@z    PK    A             A   org/bouncycastle/oer/its/ieee1609dot2/basetypes/LinkageSeed.classS]OA=S(KBXdU"!15PH5&2,,dw _Z"	(ζ!܏sswﯧ ܏A,n15)y'3m0
ĒeCU`&C6)d0ˏ7|__}w8^0Lmz!&~!eR7~wBv=<cA^(ow#/j2ag*`lOƶ'(,>	]籐F1u}(=^"ޠeezyM!aXÈkfۍUo%*tnX+q^]})VA3Ї@?*R榁neǌ11Ycsʘ:)?
w$w7bCNR.Q=HZ(N?`c[9ւ*ŏId`0FD~;h=)J_p[(Ё,K~ wOdO߲q&kҔHzSFȫ
iD:;[
½6
PKh#K  +  PK    A             B   org/bouncycastle/oer/its/ieee1609dot2/basetypes/LinkageValue.classQJ@=Skcc#X
i\Q$"Bj!Z&~Q7*
~8"t`;3s8O7w 0Iz~ @t\nH2qʞ2"SFngo 3aӧDx-E)DUv
`E6L,~|Iрs^X[rVYe#Z
1>p

.
Y.ֹwR"΄O#I7/@'c ^ÀVr:LX̍}Qvɼm؋ebJ!
ī$&VqLU:T8WHqG~鏼N+}oLK	30<<Gs<ºy\cWmvDB2,PKzÁ    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Longitude.classQMO1}N$lHIrArpJGT)9P!qt6ͦvEziPPpBU/ zߛ xϐ}0?2P;3>C+!=b(݉uZ
#w¡FՀe5""G"D
b
aWom[n(0,ꭾL&RiČaz	c*2N<լOQОr5d0c2Ǹ,fm1gܼ
^ٰҸ̽t8&:BUl3]EKfu̻,Hwm_nNJ)▻yXZR6ut\qoa]5vPu^c6N.^N8e/PKfI    PK    A             E   org/bouncycastle/oer/its/ieee1609dot2/basetypes/NinetyDegreeInt.classTmSW~nxM\(RkZ4T U0h ̠,׸܍7X~J;%NQnvi9Ϟs9=&
I,0MdML31U(g.,h;7=>ٽxz/}5[MIW<wCr-Bd-<h}׸ppkA <XR\?yP2K2VzT!"j\ؒ+җB+	aR2Tv]䢂qi";+vt5:=@<ewvVyGc)J	E*v}!DJ&:I_SDD(5bW.x'W}|"g4\Q:Θ~h
00p|qVR||٨2T(W$ݨc{GOĨݙFxtퟹ3Ariý\p_ZS,Z_i6f0Xg-}E
~|E55sd!a5\74\4&rbJ4-̇+t=ɛwy=/M2I-a5Éв`$L
>@}6~؄~tJ1M2dNߗ^oAXeo#=m\}K+{)ͤ
EZ3mfvd^YkxӔ#df6p|.
OZq@g;7F~yڨm=XOVJ+X۰u6w84
 kc%*	$J»^PK    PK    A             H   org/bouncycastle/oer/its/ieee1609dot2/basetypes/OneEightyDegreeInt.classSmSG~8ؽeE1,9_DEIr*,K!UsdY]f/s~JRg|ɇ$={[H.{~g?~	40MLX&FMdT3+XU6usޏBi*GmPOģ(6RB5dbWΞxʷqx(VWb_TKc
o1R@$&Ÿ-fb)jYA"J\X9MP&9x+4nۀ&$y"Tֽ۫
ޜS+QbxJPQ:5^BmDH^*5?NP[4T-9
jZ"Կ՝ٕ8n-cN1\>lsW?WU2ӯiRU޹3k##^ ]$)z},'o9'pi
okxG86ႍ38j6R	eLik}j
wMìIha»hu
txgxoFe"Ekk=-	FeE;w;ziS>%BA-vjHM}Ǌ:~YGQ
:.SmӾB֫v9x/F=nuN΢KYjVft%WP^s_ﰝ}EaXżAV71<WF
ۃ6:nd~!of~_/tO PK3Nq5  a  PK    A             F   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Point256$Builder.classO@ǿ6JSQ@e::D12d	hu.8w3]iHE3z^]&HإW){} OK.|V5l-iDiJ,\Lݥۦs)	A蹍ÛQ
f.n<~ՔLn!,`K@.
*>0}tҩjoXHPHV}%X(j뿩N@>320n00a m$X<ʀ9{*TZ)T	VҰ҈N,_%ЈTocFFmY82:$@t9`41ü)\2e9\5ճ
&B`zbVsL)JW8OԸrr |, N+9{u4P< 0\j #[/wq_qz{܌^:'B;oŎJ}(=h^Uֳ՝=],[**OE*#PK清>	    PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Point256.classTRG=#	VZ%_H+ljG	ql+ʕ4VȅS~Tň
e'~!ܣSRuv9}{v7 F$a\e!O<Yg]][0(y
puS=pEEg_D;OrϬXn8/YZT+]a{.C+̼WqՂΙks[n+ZyJG50LvHyYQ8.<:X{3M[9[]D[>]=[wzk`!9>I-a{#{Nz7Sz*;<=R>OA
>SpIafoM7/$:(']!%m"މ֑PَgIwqQ'CɃ-~Ӯ0<nk]JkH3=4Ք4I
*ƌ 9iR*aAu̫qK;*pSIǢJ*&0OƳl+[e\79}Ya~A^E?TKA)"
zz F
wǈ&_#\
jX{3A7d̼D-!NVPALN E s{Z<!$y2Z/b8
/vh #PW4F1T3OjQ-b/6Al8Fb95gt!>ZGh2=RJŶVszGh.(ygkj K#LjbJ~5" PKiK  ~  PK    A             F   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Point384$Builder.classO@ǿePN?)1&KDvy5qJ̌$ _u!繦>_XO0^k=<υ[ծq̺f̙OP+.{hn5vyS8#&)B<|T\m8JҐs^t[$Ww\#'
-V;acP
۴5xcI/:ﮅ	I6o?J06iejiJ敆3ؖN|'8N1s^yi4
~3j,93b̘Λݥ1k̜)\⪍c:<}	<h3)DAGNrL/-첉1rzy)쀴O0_?<.]>z>7t]*?`xՅ_U4.9ԌGÍ"2?PKϏ    PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Point384.classTRA=6YTBP]рM5eJ}$cju">>XƒRT9}L3È?X<]BY)۵y%W/1+</xA2w\\ۊ\]_Xn|F0D2O߯Y'st,h-gT,/qW,=!ꕊf+JMw'̙̍7C[[JHyQ"ia5h~&%is'N-xbY>e<'	:<lXHWxRd9E
Þ}=DRUuǓgZ^UЫ`>
v*إ`Ŏb[z#*o^,!Yo5Qc:BJxfi#m! |+%mj`!L,֫pҰG5fBti-caDz1iF58.AL8* B)iΩIiHR1J*ATxgs^^v]^s,+|W^E?@TK^L"	i=D~qYál_6ǂ2fÔ1o(ٝ^Dd;}4>j4du{}
5i-ZȢtezjzPjx+ѻh*.uZ/=7h]RJ0][޿l'%O&Lka8[&U*+PK-O/8  t  PK    A             M   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PolygonalRegion$Builder.classTj@=Ƥn֟VdK BR{5!eH&쥷/Z|(T^-|3g~'0z;7,-6̗iyoIY.ta!/ĶDe\I2瀿Y<o>)Rl9
fB)UҥG*OdQ7⺐"P"B;cU\F`,*=29Mpˀm,_JamM;d$%͖]yn5r-;m17s}4R@YLLcԉ{r٘i\,W6Nᒉy\0ku7,Ա2`-5`?2$Zh9<	)'dpF{XY\&vɬSQ4'_ְ;<Aš}^ֈՠEq= PKLP    PK    A             E   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PolygonalRegion.classU[S@![/FAjA>8k
-O3
3?/

ݳ~$}m31CYr!._O*B@r7IjZMF^Ks+PnKsus|[i;֐G$s},OrIOy~ښ2nr)n5|0;G-CEF{~	߲e@&i2M~=<e@ȥX\L40O2%\E/Jz*=oK{uY)AuƝRS:B]]CCa
U5hP}T7@Ѷ,ݴR7D7[n[ݮS-J+2>p#-Ŗ)X`فOfߺx'wK9(Y;
KlOݾ9f@%(yavM0PqQ.eV⪎Z@}:N_'5-QcD}ߞа7b+aLH|>T4}XUK	Β@+U20o.z)$:Oh
	͏V18־p5;hcX
n>|Q`e#لߨAHCD	
ELReluxk_Y6"52[γ2h!V|MAufP}V`kE2I4lCPK7    PK    A             :   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Psid.classSmOP~.t`:Č
	dk)v-?1GDė/~GLd4yν=y{N V0$C$/p!Pfda셒{5m;t1:rE/y[.lRxWMdrzeO
[Y?j5JWX<ӝW31U5ɰrGˏ\<)Bthg1PUa؁Cqx/k5WeHh+hkHhՠkcڼhC:y֎.)sA!3=*,eߦNU-]{^jWGI5L븎!È(ìǑn'0	qGp+AEsNO%oUW K)妲t0E(t|EN!sfVG`b]俙BV`(鐆F
f2Ղ	N8nTH+SVXߑ?:Ab9k*JRPK2&=C  
  PK    A             E   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PsidSsp$Builder.classSJ@=k/mzWQDQOBBA1Mǲ%&!>+
GE0;{朝a>6ʕ@D:28[>5l7'P}ӰMc\d1Znϱ|CʐD{sv=e*
)cLv3r'6IO44"/^ĝPӐԐҐ8:9I~_ZȒ7j+\Ήxi4k]JǋbV_ҡaJG:& BS gB:K۶I@pk)l2>p'SFyn&TuGC`2:UT}d04$PF@uu$CFXBV PKB.}  >  PK    A             =   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PsidSsp.classU[sD6v*GU0u/PR[#Ԅ8!Cnxxg":Ώfh!-/<𣀳2	/g~;W L^sD5NPz[
3'-+Km>KGS'\UC<:	^QAں
+[<6a/?6='¦S
JloP->yK(d(DqөG{Rd8TЏ^= ѨhV/⽵$/`"tJ>P"Gb|rF'z+ fIUh9>mҫ2<>wi4#xCHIEӭ$,C̪Hz=BM:7UԭQox)9
1pafy˯lxtRDwĺ*a?b:q1%kI eK@bYB,[>n堖}	2\۴Ȩq}'e=Z<)˽=td-\pW-afaE-d18zwCIGPGZ̘&.b{c-nOL\,&1GG35!a$Nߨ<u_Q	0v9:!55ko33$ƔT iXP˱m,K|_iP)h՗1n9(5tLu\LS$֋(-dwQ;b[lkp;g.kXJ4zQ NѪ}?ҽ>{\wD
Żpki&$MZǩ
PKŮ;d\    PK    A             J   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PsidSspRange$Builder.classTJ@=[l{^*"ERiHJIJ6
)T
 ?J|i,fϜ9; mv!t](osʐ\w0wq!^ӟtN\!gZz4+]8uYGh|pj9ZYynpy/i!gztFGD?YUD7 Ib8RxĞJ>x;DQo<Gsօ	x]@!<va
H(PTs5aı%HɈbYF+4ბ/XUmh.u!%MG;Ehm.щ;܇A\xC HVշ>`H|Tm#ZZka}D> @]!6b%I$M[!3deq&¿PKK    PK    A             B   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PsidSspRange.classU[S@SbZ"XjD@h*ELǧ];ј&ug22*RϦX/gsvf( I8Ҟ|ȰkҰwAU}e]^;y[yv<l?0.r7m9N5m!I8H[tBm?㔖tH iuB']3i_K&/f\<㖛z%װ-A\rvʿkrMwa-;vAϙD=y=$SύdkLjiݗBjiY7F[B؅rW%hJMvbQڙ1lD/yyŌPAеE35^p	HJ+aH806I"	+mF71
"MǶnBEg;68'ZqWMQMv@PJլ 
N{[+εoR.7MUqZA;t	1PS6uImۖRpOA7BVЃ3+* BhB\Pb"⒌>LǸ	qYI'pEFW&$dH8=.GI[/{	p7w}q:BN.D*Q#$GAi5ճ|xƔO ~
fߢw
}5[Ajs!{Zz]u6E'KBDA`b"a_yȲ
5D*nVq{-7( !#^gG`V88Y;.kV1 8X# _Él'L/W1VlL z~PK|g|";    PK    A             Q   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PublicEncryptionKey$Builder.classJ@mzG/j(ZD xKIl<൏P)( >8	ԋfav&;ﰳ_o ̐(]3)䗭e'!|W}}ܝ~kn77$C
l7tOZ\sLi&|sgc-{\.PV[U!톫!Y/.W-u+</+I)ڎo06+S6pZZԧ%8~OD~B
V
c*2W1|TYLgbA6D9BնXq+K`B4'4E̽ xP! P(LJ&$w76Aژ`'slQPKg    PK    A             I   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PublicEncryptionKey.class[S@K1"o%E#W@,ZAe&L!mMlWWFۋ~(l ӗ~{l??~0lc$3aϰmvmqAUl}~Vn'%Ox#ۋ\d@X{mu'ijs,2즥Y)=`fTJ;E'sp,hd-'+%y^2*np
a#mq^9tzbmU-):mmY*}=a;556|O9+Z1E_
m,)eSOlVoq!V-;U4~޷KH^
+t*ءKNt+͐kcfS,zs.)|-ɗ)8\OP\G0/<~s6m;F[ok/zN0|lpclWM)Z[ٖTۼR%Ѓ
}8mpTC	
RbHNp:8eQgUcTTEpI%y	)9*DYF}޴rڱH)[VhL@e4YӨ8E1C~RDh1cBz@0RΓFC
Sp
:/q|@z	%!
W z~Q*m


(N%:
п"G2Y}	SY`+(N@]4JBaׁdoQnlD2lTj%L1c	 :.ZxJc쿁oPK7c<n4  	  PK    A             S   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PublicVerificationKey$Builder.class͔jA6fMjۤ~4fs֢Ts64P(^m&c̖I1oP♐F!ZDp|osΙ= Qdt
	Uӏ	ф	%9	_zH+"Zr_P=]wCQY[_|0=؈JtyKڀIV2ܾ{vs_pχQkŻ܏u <?V%Yugk:PByRǞB6=jzk{XtZ"舫R6a,,-ZȰq>ml-MS#l)	qjc;
68vw_KV9~0w\2?EJ!,\Ja̘	c.'ܰ62X-kXoSE)%JǱB-7A#ҧ~lB@H=~yNL_ 1n<r#@!`cl`w@.`i ,Q|uO+pGnW2q&ֹd#.YEʰ7PK  ?  PK    A             K   org/bouncycastle/oer/its/ieee1609dot2/basetypes/PublicVerificationKey.classU[Se~ lR" 6i(=XQ#6ϸu0rwX13nGl02d=;?ƈPb6א[oߑ iPT] U.OFQ%W7Xn|<u(!R~&`#=y2
_=qX(s6(_-jK'c	aqnx38
".a걾,.r%ʺ薫OM
Qa*	miZY*:U1tϷDJtjqc=ʢЅ!~YZ샃#ܔ{)S^|s"ߩ/5ncΑ=*!\;mt3;\k>1}sfCt.Bb'#&2dqZge(c:zxO%nұḪ}wy,iS8u⃴h=D|OG5%d2ؾw/.uonz{ 	?zVX]b~t,];A_uGN`͎+aE'ѧ!/kD!̱6϶'pu7"pSXRpwY,ȰxS4.uYo)r
fB,P]zoS+r(4cT	jζtMoٚ^D5
T0!ߨxƑqJx11.
}2FyX6+ŧX/n*/IoLacpր5	m>CfwYcPǹB
1in=ܫa'~/1d2Q5AH($3C+(n#b1
nucN s-Lj@aghگm_<;5+GORcD"j@2ڨ#I?j擽/~Lrp%<YLVVQ$mPKl	r  
  PK    A             O   org/bouncycastle/oer/its/ieee1609dot2/basetypes/RectangularRegion$Builder.classRMK@}k1iY?ZQAVQxܦKd7JO RPIh^$͛z %Lqah<]f(ZԄyЌ|DӓCqǧ[~Cy3}6r}H:V'^iHԹu+ӧD55A
2؄9g2G<M
d
0~/5e8*WXLTt<Taf ,6&F0I9LY1`ȆW@+%	?@(J,XLM{Km>#^wғ	`^1Sz BXﰯJ/DBs]"Yjk7PKs    PK    A             G   org/bouncycastle/oer/its/ieee1609dot2/basetypes/RectangularRegion.class[SP-"(QhS4`Pg:PSJ0$"ɯ3Bo/>=#{g&g CxҀzo$*yQ2-f;|}χ]ȭkÃg
\,W!HwӶ#+*ΧeN3mRRkURp
nz
öv
Z.ZW9"\]k@KVYRB;.IWKd:X4$ilhp5s>p$oA-\Z6KSESwfy\aԌkzxr,E]V4zRK{bvdPܽ67	[cX
(hTpVAs
+hVpAAi3F&*-*\G"~!D4XJEݭ9.GkUfNיST+oQwaX8^I#!Ut颣AEiZ	4ׂ[^]'Qib~pS[\@ m4	$
SzøK_φoˏwʲ3n]ƴsϧ9960\2KiҪsȎ];)6%Wcmb=#
gHUuи˙fV56ծ QRh[)P!3Z;oE
;vʨxP
q
T	i:mg/F݃mOJN:t	c?[i)аL	j	Z;	
PK:    PK    A             Q   org/bouncycastle/oer/its/ieee1609dot2/basetypes/RegionAndSubregions$Builder.classSJ@=c1j}?\ԺTEEGe^KL4kBQmڊj3pL3d?^ `F /tm
zr[OBۏH]Z7Yd</	_2m/έcLGth)^eӶW_۠2"\K@
dH]v}Oik%sЪI:ttq`)!ڲgf[%m,uOƴ_:z
h3Q!=a`D@yHƞ˖R0<X-B,s&cW:U?tc -c~F1@ 
<[a
Fh29<'I$>PKW< ӊ  }  PK    A             I   org/bouncycastle/oer/its/ieee1609dot2/basetypes/RegionAndSubregions.classURP]BC; x+E,Ap8)mhL09eG|pF${{s 1ӌ&HkQ%_":^2w<دyO10@X^<#b4{K28[4`yf-Zc%t^_*஘|U"|痌WvK+7MLz-xE+P֨J.mkHZM -J{bK9O\.z[K<0*gxfnjٮH0\-Ŝ9xί6HT6lЩMx[؋r[x
Zh
ZPЦࠂC
Vpa|a5IXy49ų·҈Iw3&몄m8}(=C|#ItNcte{ɾpבMّ\ԾUHqp4C("ҜЌrԫA%
'qYHCWWсA]Pq
פ溊nV=nҿr*NxE4u?XAk
XNIT_.&ziS4$D|1G|d1UC57$0	к\;[oz*	0%C*U``

U+cXe?Do?`l9N71RuG+1*ĨnSnr[[4_m
񜾊+̖SұQ:8d$ñ/Ed\TFˮbz$h^C"ɪt PKYD:  	  PK    A             E   org/bouncycastle/oer/its/ieee1609dot2/basetypes/RegionInterface.class-;
1Ӻ"^5d!y
5s>KuOAsTj_9LA
*ɚ$x+6lreL%50[9,0PK}Ipm   s   PK    A             Q   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfHashedId3$Builder.classS]o0=>B:`Q )KH(Ӥ贇ImOnc'@ gH(u
(-|sv
=4Ƣ)ʔ]ann&lYHEj0/һ5-e,DT:|i]Fp-.hQjJբp_>]ˬc,+)H{%
ߔKusשL>9*MYxz=Ly<0MNZ0@˭pP跂\k:XgIM껻|Go^vZ{~Gwy,R90Ub.t
W|py
qV`o)=`-diPiI*8K99!=6CǵOb+xx?`RC25=ԶVLOq@'PKH    PK    A             I   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfHashedId3.classUVIEF83*7Che 5M
}.5v;)~f֚_a~daSIHWTSU'Sg?}`b	۱IH^rD$C-i7dV23bNFktVƉCXO%=%yI!Z,9{-o5ځDR|3JΚS'Vflofe&][+dPY;}uTн7j>23
IrPjOm;xƕiiK)GΎ[npL_+/oeH|mVXnKa_؁J5<sײJf8Z8srqstptr袰ݤ#75Q}T1>I|"cV8KfU{}܂8vкfb}
_
;@{cZ8kq~{)w*O$պ]~=
3[#T=]ܗkt9	1
`:4t tVʌuQXQ8N WpIqY)Lk0xNbBMƤ2WAR~ȄEO=8KdKz4y>+^U=DKo;j4i m^Z8C{9FcfcIch
7Ƶ?>ŀ(HJ|Wq}v
nΝ^kt6fq'|2< ۅ'R1T/'"8W^и4/"/!FUSh<a|@5MD?h@tXíUY7Lky#N8B+p
p
ֵEmxuBO)F2'8@E3PKS&c  t  PK    A             Q   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfHashedId8$Builder.classS]o0=>B:`Q )(Ӥ贇ImOnc'@ gH(u
(-|sv
]4Ƣ)ʔ]ann&lYHEj0/5-e,DT:|i]Fp-.hQjJբp_>]ˬc,+){H{%
ߔKusשL>9*MYxz=Ly<0MNZ0@˭pP跂\k:XgIM껻|Go^vZ{~Gwy,R90Ub.t
W|py
qV`o)=`-diPiI*8K99!=6CǵOb+xx?`RC25=ԶVLOq@'PKntԱ    PK    A             I   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfHashedId8.classUVIEF87Che0ǌ4^Jtw\çƵT@.}a~dSIHYQIVNUO}QS2;beG9O2Dͺ޲vsNf5# +M;#tj~dɸHge8e1tZch^5H+iMN:~ ˿me'v֜<:kxn6+3:Z'*bt)쫣"Q釔woHJR{jܬ`&0L;M[J92vvrsfZ2X}"},Ckc.<r}X/o5%p짪Qmd8sV2ph8q(G&]Z)k
Y6M&wGګK|Ǳ6S7o0VR[:j\swrǨjjTKRx-)OWWhg(|Ҿ]qMh ӡ!1CǰTfD8Gge"₆k8^5%ehǯNaF#ܴě&؄nL)s$L8Zdѓ#DV7As*Gs-uqCt[6OcV!Ҷ饅34Mc4hl6֐4qGQߧ)&N,᷹}sf71!}_cplB_H0GSDEq5qi!_XE;QBx34Ѳ蒱kϳ|9oBF.	pVW
p
ֵ%mx
Bxk-F2!8@B?PK@c  t  PK    A             P   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfIdentifiedRegion.classTNA-PZ\"xp0!xaܶC],؝yۚ(TMx
^J"M7?}C	Uޥ}&f0
>!53iF[z"!d|&Ln,%
˴%
شnƉ*yK\YZVZB㚾kntZߚ5lrj*V*Pg$f>PNj1+cƷSLm3MEC5}<%^gX>
Қm
i?Д1MX|H6[\˚ i%3\XrK8mؤ*<*T1׭yQ+CQ'+^OFFΖZ,	eV Y ͤV8"CO
6971q{z8^D0Aol^2Re:#Gu?bpygt#K=]qH/Τǿ7.*sRPn\=
T WAT1s# ̓
s݃V{.sӃF=DQ6ߴ]z՜(7Ntz")rҡo8>!m4:hSw1pA
IПJaA]Dvp{~#J؆f$pgo~%U	ȶ±22:dȔ~qS?cE#i؆K@VgV&w1N긗5\,G+PX	j1Hs	ZS& PK@݋    PK    A             K   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfOctetString.classSS@BADZKQ,JE/6`M4:G82ŃGg߶ZL53y_}PW4+g.îA˶CuJنȸ&$ɔ)jHFmOvNh7ײS`x3BVYt
SC+<4#N:m&䢡`].s
;Euw:nJs2vb1ax"mgQ;$4UjN-4$n>ɘV;
d\n8[-4{{8)I/UY#SZ,a=%K}~$yK6BCQȱcGqb0l1
ve!qra\oܼ:`#V|yKz,hje	(ҌH"psY۫^jo
+s>vpke}g1|sGQTSQ
~R؅tKM)N8S*'řj1
qYA@j+Z'.JqE*8K
1FjpRA;I1$z#Ntm\iycd޴V·	oe?>ZkeĴ
02$;_68)h&-ΰUPߵ_;$[[*8jU5uF>Ii|*Kԭ!8`b7RޫK8QI[-Qi2w#-
Tҵ|dbZrӶ[>|^[2n2P	#~PK[+:N    PK    A             L   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsid$Builder.classTjAftQZuAVQZ&cغnά˂Oxm%h"4*I9ߜw|uMX)al}Uc0~+*Mqcs#hױ]0x%r
wpC{QĻu_vr8t.*N[D!nܺ~kEɥPݎΰ
G#XXNT`$u:u:2:&*Ãh~PAjfh
j56ٰe|TõSʍG$P"߲Ǩhޟceby4f)38A3'4Ra(K)M6w_>'S6#ZC>ENRc]&H8#{``j(}'Q$2O^#{gwI/+QٟP4<{	5~%L'{=uluhPKG]?	    PK    A             D   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsid.classURA=K~Pn%,bD;X>I\;S_c
H/>#bOBY*s9}dק XB^ij|.`ȴL>,hZO8XLIs$2>iܰtZH׌yis
'əcpЕkƦ'Gؚ1]Ta;gQnQTY1RQmgU	+5\gZ\|d8%φ,	*fnrrpPXJL
lާG
B	j~%M0mcoTmQcܤn(KXv\1H	ePe(Q&\FJU2ahwB&f."^hia鮒:p*oM~Cő<+mNгoMV@49uIa'>Yi
']	S8u}ZKFK0ҥy!5hSI"*A:T!CWQ
TpC
Ū	wpOA3BVp
w0Pҳ}#a;Fo:iY	
eb/r#jXo)@?*2^yp΃F9졹XAXnї"'A;a
>w0:0%a5]G{ۃZWW^~M2d*?I_Msmj_OjP;HJ,:RJ>dJrLvׇCi'bk1>2_Ag(
+]giThn%g
PKK     PK    A             O   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsidSsp$Builder.classT]kA=&ݦicmhVl"j!Q0u7L<
7}-K
"tURS=ss||ye)ral<̐iz퀫n$h.Ü	DS<kOJm!Og!_pA^kmG1PWyE$Fmvp|a"=%mOqūnB:BPQcF]1SƓԡבё1A6vWQc5-5)QR[&Y1Z!Ml{:@Yewg迻rJW:v4c(1d0YPb*689<NaslӫKըV}.k9Tyzw/0OL9h)i8Lbw|㔵>?DynUiK8P^#$M^nEZZc}@': `8O6;4x\SL[^qz3uluh_PKX
    PK    A             G   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsidSsp.classTRA=",QPD(	XQ)|rq1O|U*Q,}|P{rV*s9}|	ܓzXIh1-JʹeH$ȉI1GBSrJn5Sqw%Í\1MkƆg\0]tUv&Òܴ-h#UckVr3i<tõxl|1FCyMR
KM1c㡱	e|szI	sYNlqgSWmĒc>3AR(ܮҚ)s4&$C,㰌Vm2etE;pwif/[gpȗ1^l2Vq]wRo,AD`Ygt?ο(Ef^[~"Փ>u9FY
(
?SloaB':_
uXE7NhQqgU(=8B(j܏ .*EH1(8!V$
NbV (+D	1)&a᝷S*b|p]FoHsɧQcx%,@A D4{ii4ҺcdCsym8kopįpT9	c	{Hwл[\	[]	yz_Ty%,xhWF@F>J7OzMMi>}B`>#93ZvX򸱍9)WaRGZ%Bqok$W㋡ m1iq5K|"'`y,-Ҩ<HzG	PKO8"    PK    A             T   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsidSspRange$Builder.classS[kA&lnӤ{ER%ŠiÔa7
y'O xvJy)vΙ9;sf~3#n-
TːV $O.{ZSS&fk$Jx.>
EGs$LfJb^UBqjèa4;Mab-y(#bÕ'/0
adiKC"<zl_7ׄK$o˴'1LlmHÛaMsvWjM+i2,a
ojcʃ)z-׃LbAf=c6
X1u%lbeU>]1UȨ1`ziB =Bf)dY@Ń%NXW'b@Y9҅7>G%#:ߋUt.Q:McX"igJ@/PKӶYX    PK    A             L   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsidSspRange.classURY]'DiE`0t"-%Da:ۉLwǒO|*0U?2U	T0$SXU}.}[{~`5ᾅvشLo!4-9Lrf6#eMYgXi:mݬkfʜa-
7!^{u'óIsGX.:q;iϴ-2ZOh,~vҫiB7\k@M&&1RY

@z
I Cᐤ#'
\<tbMM![ۻWx+տea{w=,UJKc}ҰRM-ٙu̗g^sɔ˒rs
-mI-^1}qXp_hDz$WK܅W4-)VmKW]ݤh~.(\0+JL"[͹lk}w55<
G	[}$i"'ށLۦ,گ'e8*jTSф>P~ya@IǠ-p[y)Uw\na\A)
i*z\@L9_}v>8e	g<k"5$=#2//y	Нi짝aҺWh@4hnPlxnKF;)<-cr:$ltFi5ǰ&><y-exJv?GS&D͒AI>]ڟAКMy
1JMC^S{L}9ŵ@]lɈ%<R#C#HqipRmh!-SowΣg1r#AJwH`xBR^cPK}N    PK    A             Q   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfRectangularRegion.classTRA=@Hjp	Fh%Vm%.]ܝP)|J!j/>'bO@AI3stW <P{V/M&zPYhIMԧ56mL5%Kg3uӰT{N{tY*3-ͫꆪdQbn6蔙YWOS8ii5IfMQm#s*Q9dB Sٔ^TGHiZxdh,ea%\lBO˱WJ6UEq/3yoO,}Mg5afƬf]Md4.zs""E4t<GF,
M(IZSGG@2ʯe
Cc諱/_#)[TYhNAHm\:YSg>Y݉燛=b~NqیJhE	5$Ѐn	%+!	ugnxЊ!n{І:ۉ77=8Q.`ChGa(N)z
q&_ϪOG7:NE<
PF
&<n}{_q n/A۸=7	l?@򸻍w2dE"":ET~qJ"\Hw!e9;;	}V')˥ij~\-%`.#VD/PK>{*    PK    A             S   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfRegionAndSubregions.classTNA-ZZ\"Z뉄*mŲS"x[*/|_PmAMo@4욀Yٜ w\O*ZM
FN=ҺiDT<
}[R7LKg2PU%,ugAQFcf&%YQK8hi5;IfMQm#DKI<^gBU$S~F)؉]ӴtdJB5J͂,Q5|V-LcKԙMzYN5kl)}]WW_GDI9^"Du\~ΌXfP)EjF<u8hA_}J!|BSG-hV{gVRg `׮L~b2zIJ֥(^ӈ.Jh HhĠ7.!	Jh°ȼ7F ]ݘ1L{|=q3AodLeo35jQzo;K=N9O+@Hj[}#yw_q7-4xеn/}=Rﾀ<avy*!n8>]"ŁdTk%_a^HjWvᒿ {ǝ}rBXIR_Rrm4
{Hj`?K4-2PK  /  PK    A             N   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfUint16$Builder.classS[o0=.Y2:`q)쒔S@PQVT1m)$;H}$~ ?
븄1[gr|jcarMʬ3U/&K%"7ͦ/Zm
D'SQHVR3{|/D̨o:|C{I$&<)WFs%7n
swJj-_g2ʭza!ejl0ep4ih]q [Nz#X`њI}$gt^1yEŔx{.62Uxuu&pp
g|w0ea.peWmTpe
gpE`o&!=v2mFBkQ%"ؔJ8Ghz,π[Z  ?x	\,̙QK_R!
9?X>bdH*?PK    PK    A             F   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfUint16.classURA=CE*޹]/A5@7ɈqWw'|_kR)-}|P{r!BTg/} 0
BṢ`e[bLA e-ئȻ\݄.i'og3'r0=;bI;dtǈftei	JYGυFKpL#/1bYN8˱Q*K~西lN?$
</ڻ9*|
a	ϰ8YG3Ҧ,**)l<9#"uzl	H#G|;c'kݷdea1h;ZZ::vYb}9]ݠu<6Fdp.gFĤjewtU.(=Q',$n]KyL"Tș،/
9Q8DGSڤ,Ħ`>?5&S?׮Tx6s >
;k؎!
M
q\^hh	)NSq *礸b U0لlz0&z6^%E6w'rqzLS<2NA/qǌPF?|ӱ雄#4%n}46KC˸^AJOߣG%|pyj-&ຂ
˘^MnU*Eh!(^|p쭣x4q)Y(h1"B/ШDF*2-az-4p9׸T%SѲJX*%=zW#-!Q~#8HA'PKQ\^  S  PK    A             M   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfUint8$Builder.classS]o0=>B:`ѱAR̗PT1Ɠۘ)$;H}D!@&Q#<Œ}t=_X>a\U2kMK)rI$apiPEu[i0)TSTFx#x".QjC0*y.~	>^x'+n+I$dΕ\I)oܹ~7MZ+|]ȴ+7oԬ0<8b֞Tx;&Z%h}X֣+՚(̒SeiБem{ <^/.K#;ry8S*`qƮ<LlXp1.|;%5\I\`pFƛYLk̛Zj)}~FlR8F
NSdVF@p{	[L/fe~Dg,}
6G̹QMom`R%+WQ	PKܢ\    PK    A             E   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfUint8.classUmSW~n,Yע)ZMpEXj!XS7ɕ{O5iyif:	p{s7O 1Dck#Ce[b!mS]NWfȠV]u.R'L@!:Ze3f	!xCiU2\H[yTa96Q4}Άf}/1]7N.lLOaz1͌/hK|%C1Dd2>xфqkX3,#yb1=~)nOћ{ݺL
E%]zd	)eZl~lv
*VУWA~d>$Cj&}PJnJhVAρz:D6t"hmR}=IJ{{Cs9tSE~#5i.Q?I'3
6x~!Nbk0
!4tᢆ3jPRBގidh8q
e"8)bNEXJa|s)
aF.7UcV%7*F(neaZ._r߈)8YRy0,W7ArЧ)=H D+-Fshзw,
W3J$':IWq>ť&ngv=s$Hǰ;p[=eAvэ!`!
r[VyTS|=s/UE$o*7H"
z tg߰POHM-;ʑ#"LJKV~/1mby߽}Sp.t#N|r~GeOZj*BPKq  f  PK    A             P   org/bouncycastle/oer/its/ieee1609dot2/basetypes/ServiceSpecificPermissions.classV[WU XZ[@:	)b/JRlC)Xu9afLX	},2kyy{2TB
kg9' .8FČT.
~^n(P4hyp
J2زѦ+mAd#}/e|/=v`sX&iUmr)xJ{]ԶKɾaU\"ζUd+ZuTk2S1sժXեZ%
o/ "A&J.eQ]N$Z,u~h[~P;Rama.fPQNw\jJCaf7bŲ\4QKtpCOffWo>w1.7n&d )x:[*FU<ℊ1'UR*PW?evV**8aV~Kh{8˯ń;n#⦌\OH:ݕu1vrlaau	S;K_rݪ}zy$?H:Rɑ0vtQ͜M=wHs1AHx}:cѯcsPq5S0.v.,!,iHbInxE4▆aY
p[F,Y
nܱ~!MѺXw-o'|i$0H4
"mJ59D6}ZHw㏰;?p%P},]cX.vL
3F7,61UlnB:"V	?"9_GJ0e(+JԷEj';MQ|
|<etnHɈDcW	k`̫f2l(b)6hotߧSQ{ZQz2f>2+w''Ǜ-2l!PKs'  	  PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Signature.classU[sDlUnӤ$ŁUi6BԴ4	u7E*}g~3CN3Q9(k:{Ξo=?
`_pBB6UjM	ωnJhjՄW%w,!a\X,|]<ˎQ=tu_u&i[D&äD3k[I8F%/LQ*Y	z6]kG#.r޹onkzQr]aR`vD-r|O©}P9
.*	9?-Y-3\a7ʫȻ@8rop3VA\D!~4klQ!5En$QIr'rnF/[X񆌓2e8%M+//uѳkNjS+/6óiвjNiWBg?nֺ NRI|Sځ%|a}G>诙:yzP'Х'?p:%2U)Qч^cYV1S`-s*2b44,x_A7L:,>`];k,XR0EPTp*DȢ oٯY[Rȴk6%^hA?NC!I//JgN'췑Ir4GQ587>m}w$A\#HQمV%KbҸ	ӿǘHn55%.k@-l:L #6Z.r]LT(+.S`e7QPiը/8d2zq`W'?};YNF7I
2Qh$C42I?gS+	qN#vbC8
30{m$PK〙  	  PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SspRange.classU[sTNT۴MNRZ腦5T:%?(3tffR?
ص!=Zηs:Jqe
-{ZۅB!'uj5T=ԊڊT%yOC%%Q*翨E!OҺ40]8YNv/p|pghʌgñ|[˪/ԫuP0W֔gvAEUb+N5&ʄUuʗ欅ba[+CV?[!TmUV+&{ynÅnyayRʹTBu*ӱ5ٰzW!{`
;
bHØS5pFY
QK]	q*k,diy<dޏnmBlڇBrЋY;;-'lv )ص~{(
{Pe{(R|٧[/ؽg\{yDpeW06g#i:`VqFLy\e횎8^esko`>o4NbYbE>KvXXDIsa&h.l|sr9UPhb8IR#,"[/3Hqdz'{wFiM;
3[XE;Θn*Fv1¬sm{9]?gtSۘ.mc)Bz{xh^}Y;bS1
p%\zsQsv2|U1[VTŴ;o7iWe᫟bs'0ݟGC2Fo&1.mw4{2J6%f`X PK=    PK    A             F   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SubjectAssurance.classR]OA=]ZEˇXTv0!%4]&:LH _|G3+#P̝3;s]X<
jmw`V&{HX&:r!b"
W{hDH7☇,najC*JsJ$+"QbDp0bN
jjdmF"$xoދОEKxJ#%i9o,?ZKca.@쥦(666~4ͻ͡RE2fmJEذaEᦃ	:p1`3n9ÜɞR[K}:1ǂ># FU=+K~}'N13E}~OthtAPeóQ$t-H 2N|MYyWvϘ'~9]|PK%    PK    A             C   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SymmAlgorithm.classTN@=.NBzP-\h"A
m1u ~C_T^^ЏQu- "-%X|saɼ!Q'g7R9>.'2:>D2"ݖS73G#sHmcN<-׉JB`RݦgmN{9<sd!g9Fٲ#"E
:r{L=ؠ>N}'s/&*Zm-c,9?Tp>%b1mg}њѦenٗ6[׬[A^)'j?E_DH<umb{ ޼+_Ypu$&&R&EC;uYN<լ1E[濑<ӀTt`DE'hG@EPmܕ=aWхҍIU`LC!0!D$&@\&aFB2!LJ0䄄I	01%>M mZzM6è`߆*a=776QEJ`rg&*X.knжG}Aΐ~/ڣsU1O*X
+Xٗu4OVKs_;h{v*^!a#O|*?b^~PK^Wo  [  PK    A             L   org/bouncycastle/oer/its/ieee1609dot2/basetypes/SymmetricEncryptionKey.classUWE [XvuJ(
l6sd7fyo苏ؤǜS$;
!˝;3߽| \ţ88^ff&;f3vr\qbAj&}=U+/Ԓ	P]p@:\Fk_VJ㊴csa{-GpAeNdΚTk}^c޶])%Xuqao[%+ZRJWa*APSz-xAE+yNͱQx)k%jKi"eHf;Hf	gNY{x,_^OwUrSKWn|haVթ!AAKn>-.1cMB#
F\T1*W0A2;ׅx/eNqrU~F$><QFLHI:5k!I~XFB]Gү}2MO+m.ŷխϿfuJt[1['*85hkDRC1Q!I_똗ނs,=KK"EvU ޖfi &nH)b7yWiTȵKbҬJ9ܖ
iUV]~,<+l
-/
0^褋42i{$lfㄑ`K.<AG錀_7:>؟p[S|PǃgCC|Sk_tcJ41k~MZF%vɎ"7.T0P'I5kYYS`~xWߑh%SdE$x+J20ɰ51#e
||jt4SChC}04JLC=7Oδ_C*ڞ0r25BPK]lT  z  PK    A             L   org/bouncycastle/oer/its/ieee1609dot2/basetypes/ThreeDLocation$Builder.classTJ@=۪5^zj}ZUA("i:HH$X ?J6Ҧ	f93ݏw Xf6.M۔G)%]ŵKt\t]-#j-F隥tC8&ebؕTmn螴HsLi&mmtd</ikiPpSOd?XlVЯ`PAL W>	t(
uP g6:^s>cwC]gKz)D;BT_TчU`LEbHbfa6Ƽݾ<gMn=<,3>wXp^"~e2><mz5G_had7}hTLX q@߀" lY5l܃ľ PK&&:N    PK    A             D   org/bouncycastle/oer/its/ieee1609dot2/basetypes/ThreeDLocation.classU]SV=dQ7IeR@)@CiLH0eӾ+HԒOtZbL%QmG`Ξ=Z篿`; kva`wAWAn=5la?­;/<lfPJMtM[~PĭywQ/7v=]3uMts\<㖛z^u$-].iyb^t5;֔]JYMBOF۠&Nd3u%S-1˚:93_ݻZ^wb;Zsl8y2cWG0|~^!?)$|(ᒄa	%H"᪄$|̐,z^
n
OWgݲawcǉ6QĢߝ	)h'6N)Ʋ8;qvBmR}k=w^"kg˒8MgKBalbZlB?x9V0
>-!L(}
	U &N0
0W	3/c2>GB5fQ2cIF2@
ȔqxRcbw-WLq0uO-Y!|iX_"ffF݀j )u $I=Ot%aaV7ո%.hyCk)÷dC`*$D$RZ_zf#M}ȯoW!tHN=ģ*&~Fj{0~)6)"jzn>?V~rlF/KEAh«p
'-2q&PKh  &
  PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Time32.classS]OA=KvUAR Q>| >Hx.cYT#L&m|w|1n mrs=s'L㙂>㮂F}]~"m9XTм
:bmeۖzvk'crE]f8da3'gd=
Vcʭ9xAA]m2A: Mq_+;^t-䌬[tcy󜔱Jfa	ϰ8穙}WLYqq|=Csj;k[20"܌(XN
Lo_4~8"00Z#F5G82?QZAO}BuS#:Oak %Nu>!7E1Mu7ychYA)$tKhBHC5D1(C:pWZTS1 =[(0&A0%ʨ1		RQ$#!	HW}z̗hemA&6[BR&y+os2QS3pjr
(*q't \t@KR:?a`ox7T/Г_xvbG|h芑M	rўՑ,cTԢ]pH_
To̔1[/5 PKMJҝ  W  PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/basetypes/Time64.classT[OP]mA*,EXD %l9,nKg~?dńhb8[pIt:s曙o&q,($6,_˱][*	@VPش|vW̅o/xުm'ULC%̵8e'k9ER[!3̍c_(Ğ9o\s\x,A]r?BzE:/n2MskLKL[9OGv<1jfM-ZZ۔)
97jY	rFuOF**TPЕ\jwi	]+t6jn|T4#	G?V
vt=-5+7YB

ЉHK1!d=F40ưcqr<bXqԥ #7Xv#mz6Y#N"EZtCr"ze|6QBCH5tP/RT1cg)bh}ݎ
	&xӥ܂'!2_"4:$oߡYF_d|G"+:sURJyiK~jn:ZSd*xEEϿFeD$]^
'>b2~PK<}    PK    A             J   org/bouncycastle/oer/its/ieee1609dot2/basetypes/TwoDLocation$Builder.classSMK@}ӏTYࡍ-"EidHRPIh,v6Lr,y7]nH~y'
aCcm8mdHgHipzStg.[-QK}ix\n.T&}k-2)S[(QAL pZYaJRy}irSha>18.G8fU`NE7$2Xb
i,bAf&<wl-§GFhe+10:rĵV/h;/Xў F(C@1(dߠ^k}"0Z 3CmPK.y  I  PK    A             B   org/bouncycastle/oer/its/ieee1609dot2/basetypes/TwoDLocation.classURA=MAE
tdQMFeUʧIҦtRCIGT _Ns;_?0>0xR|3mSL3(ieyoِ_!|CγÉq^%aBf9s\e*k5#֌
C;-k&+Xua:6[5~'Nμn>\^3NH[
U.7$Y9,Co}J
3n
W79÷nLd1
k.MZ3"vX+g>dǡV;+M8Ҹy)
RpZA3
:t2L&X!zxr3bwKi碲~E
!AnE% `Jz7u:$52ʟe vm`Xjڸ-GpQunzlr
  ZY4G Te "Ð*cLEFUtcD2[*.aBE&UV(=D9m,uКF#c}U~q%j=nMhҨ]LYI:EuCM+bZ|DT{DST	DY'i~O"i'ƜTxKiB~*E:ܣ@-|whA0mc-+%Ipp-%\L5Gh2K1U:=W8)KNDV+/Q *^U NQ+_PK  f  PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/basetypes/UINT16.classT[OQKo, K"r-X4۶=ݦ{J䧘i$^^|Gs
Z"Μf̙_S|.6<w񹄺p72
<sev-Z6ˬqX'%Sv&ؖMxrfmWSMոi2]3c9=a_ybYnؖSM3,}1oir_8Ӆj[pcEzff9j0ƢiIa|/Y|}+:!a
/ҎP]DBfpW%wb\I2Ţ~pcs$水">^\ɋf/zy'iL-[趫+bi,.:=\u!G1^k8+􆫕T*OHr|E\2* Z>	тnmvȐq[le0$wP0"@
t!*`\l pO z0 13
wL_ŒmZ͚Ғ&#Jq#"\]5Pw__(b
'%N[-ZS8yKvG~@y_;O4AَQ}i=uÍ]#7QvDZ£$+t#P{4s;(q}|?_е]ă`MD47Lb1a~p6=9-qO/?PK1    PK    A             ;   org/bouncycastle/oer/its/ieee1609dot2/basetypes/UINT3.classS[S@B)%V.\
"rG*joi`t-#? 괌xyx6e2`2vsٓ?}0 -JzRBm8YYVe,6x["Q癝Р.+3c0]&G5K
-iYЭx(͗gX-hLHM+
Z<&Z46gP9CK;E;]n1Mw\L]qXA3\ZZw3W{\ߚ0~$Qw\Ӱ9j w*Hխ"qު.WminvdU%GqCFf7ed"T.SC%u+]vuEBt3b.p;G%uAu<0Yp:y^gԣ_AP+N_A+
'TQЈz0DƘ	&`R z1$ 0.`VNqwkz~KO[(>FU$/aj2Vq|NOy	We$+|($o֞/#ۑC<-پE]ήQ諜X|ţxTX	˟0 G.q8%,Ҷ'lQC>[y/U?PK9T[    PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/basetypes/UINT32.classT[OA۶eZȽ`)Rwmhhov.nwO11PI2V P|sΙ3sdv<yApgB)&R4,HhXG![h25ay0Mٜg{6):qᚕfM55KWt͌BY|ua[ϜvyްX03,/U=nqj.XôpcEvg撏`Ef36PSa9䄄	0qc:nTpn+ @3us0[pxвy0łՑ$]e22nȸ%EF6NT+"94DRT/ڪnugWB+_uvKTwR,\׋V-*hQz
dqWX	BV`DA3{Ę ՇnЃ)>b\Ys>aG>`By_X3bM\Kr{Zd觀PcÓ%M!ܢU 54H	OחtI*!~˧z-
YU(^*hEhw'
4 £IGnmw	^"Vߢ@M	
=xAA'Y@m1","*܏iƟ<]ĉN֛H~	\~PKpl    PK    A             <   org/bouncycastle/oer/its/ieee1609dot2/basetypes/UINT64.classT[OA["XȵKBiAmX4ַm;YMwJ䧘i$^^|Gl+37gwΜ˜ݟ>c/^{1 LLBs(U6YFcht6>]ZX"+9Ӱ*u.xKhx(\B[.۵OY׬0kY2Mkfs
ےwjK'ˆg%Je
&
=eq]լ]r9&S5ǊȉM윍J`EbKyϩYaij{7ߎœt8nAn*вe=X(;<h<eA}"{"52d\qMF2M72*4o?3j@?9/|pQsPO{,Xҗ\,+hǨzѬd}pCo*q!M@AHA'&>bއ!0isD}<b>
  F򚝧	ZՖVղ&(9O@s'&I&!Lɏ&Z@kxGkK՜8CK*fQj6j@G[}$7!pc2OXbP:tnw7)hGܩ[tc0obнRwceX{*X%$VpW=/'N['TEj7PKWI  o  PK    A             ;   org/bouncycastle/oer/its/ieee1609dot2/basetypes/UINT8.classRNQ=-"X0Pb)RSlP0sݦ{KQL jZ"CsDJܙ93sgΏ> KBk8+z<<v
Ʋ]	с/$EScQöJ9j/Iyd%4
<m,.psy]bLSu`"[ٺcj)fn'
f1@:::ɢegYJ_kIL9L-c=n3MX[qYAYT#ZF3OHOJ8Ih:e:
F$vtH\?wUē7ɰC>*KF2B2h&=]m.4@aU,@'yWtF3b(g4}CՊ:c:^*hjf/K"/7*qKuPP/@TсzGE7*`@1*TUьD	VЃ	0&`FAq&L)C"}F,V׍e=glF1HQ<I2T
i!H(x]_>x/2*|hZ
@w̏RDgO"o}Ed?GlԾߺQ	Pa?F#JxMGՖ苰l	Oa\лYF"TS¼ [ZJX 9$?8}qprq!|l=PK u    PK    A             >   org/bouncycastle/oer/its/ieee1609dot2/basetypes/UintBase.class.A[kkյZè"' 5j]M<!Ax(qf۔F&93`	31۩]Zץ'C"Py%C[YcF0]_oDYY?(nKn.wC/7
f9_%jE
BVO}ȋn(eIJ>NR;36	CMҹf M:+;laوkӊ^{	t#m#fB-OzX]"bAv!:*&'9Ϙ| oj\
dfbuR
.?cG_&ǝGvtߐ<Hو2=)}PK>Z    PK    A             E   org/bouncycastle/oer/its/ieee1609dot2/basetypes/UnknownLatitude.classS[OQK-"uAŶKEL!<T|(x=.٦=E)>@Mˋ19-F%&ߙ3egf?C/hZ
\0dyKҪm<.
[c'!Od븮5c=y
sG]ɯfVHJ%.:]."p81趮艦8v3Y.3eÅ\z瘔eOU/hݲ䦽Y!ԃAٵAU8{H۬"Rv&ə9	xd8穩b pW;Ǥ'E*Y]
>`Ƞ%ԮFh@Pq^uDt\Րg4*ȝ#㧵jW%_]#ӧc$Hs<;a\3qm&:Ю@7
KI&0d0afbF/nчwa\E<~*c 0y$[zt%s*+d(BR--JwN#ETDvGM3"~@l?	Fja:=!z7ѷqP
S
d&0R~&B7LJu6:H5JPKhb    PK    A             F   org/bouncycastle/oer/its/ieee1609dot2/basetypes/UnknownLongitude.classS]OA=K]ŏZDjAŶ"aH	%$<Nɲ6)Oɿ#/>1xJ̝{Ͻs߾0vfe
ф&D Dq4D\5'Wb̗|OxrACaVkKc
e
.9J&J[g~Mh#[l>}2vJ"@hE*Ȫ'l˼!ֈ0ig=7'$w{8v1^6c/VSWmO9w'ʁ,rC;ד2~x'b[OűB
UHtH㼎:.긤#!#3ԭd*M9_iORƏ<.n̜}4_JyY0q9tXBB/Ѓݸ7-mb )c
(M\E LBڤeK =JۏXe}a
Ѩ"I!+B6I!]t}R&[=blm?"OB&s:f똉j/0zCln4Rt3v/FvS|
ξB_IAoKW_Lq*y
)
? PKj&Y    PK    A             L   org/bouncycastle/oer/its/ieee1609dot2/basetypes/ValidityPeriod$Builder.classJ@iӨ\^zO'""xMnފ
>%NJ[QIkfv?O6 1SZ`ݕ{#N(ܓSeȺQȵ|}Rf]
"ߩ;\iO؁m-+[nW*WBo,GsEȐ'A{,4iČ^qҞ-fsy-Vt[DNu|Mv#`bB
,9a$&3aah_t%pu"x\)0O<)ZDkM9
ii2L>"~rnn  CS_b[ЃBS0h`]ZY&>5PKB~  D  PK    A             D   org/bouncycastle/oer/its/ieee1609dot2/basetypes/ValidityPeriod.classU]sT=ױ#GU05i
'-$ICH6MRpi&F.E2i'<;xzW(v2N={ٕ_?`_c$9WXaHղM0hvĐ6۲ýM۞CGtlV*ܵbv,3ĭo2^

7Ux*)é2WX˺Ah_|L!Q.>'n:/β_r7\{Z׹P>m|E/EJf:0wXoL%2ݞ:J8o0 3߃oa`؜k7,/1fý
eq_=ÝGpۏXn"􄂛k:^^0&ጄIx]K&BBf	nIIc3jS>jV뽬wBSwB
Q]=3y3M~kpwOƈ{z3M;̰1XWw0O~K)BDd"(x
pUx*8
CxׄQp
s¼UsC4| ̒	ܖ1[,sGe\MaVHVe\FV2q;>+E=%_q (gVNjD}0@sڍbք^C=93 RY1Z/Cq7hH4>'d(	"'WkǾhd{SC:?iҢLH$RK6Xk@/~sǨ64#r9^*~cC,ҌQ66*P#2:5q# PKii  	  PK
      A             *   org/bouncycastle/oer/its/ieee1609dot2dot1/PK    A             @   org/bouncycastle/oer/its/ieee1609dot2dot1/AdditionalParams.classU_SU] ,ن(RlTZlKkCm,(5j՛Kܺf
cf|/'p#3y,44K;_?`F:#t1tϙb`acs+Ë|DPAcl>uSLb 
ɼpMMz.O}YLtyI,e8F]r-Q=$C-דPasO&[Ӗ%J
a{]Rb8M;?_6-CN19e[Z"Kt<8!)[wDKGk{`-2/]?Njy?.لsD1n)zḗ9[)R<SQS7z[^Tt}U}v1CC/ͼIP8{	ב
sSvwA)۵$atHҩ_
)8ം+8`6e>0.n4k^{^h$Rh^|ʄ 66m-EZ(F'*}>>})rO1,8G
͡֧*/5BF<!%MfBJ!5IK$!!ɼ	bw$II$TD.$iIThb
U+*.bQśXbJ:]ɽIk	'yyaUO'赤csFy`|dA>AYeYhTIK% ';Y"׵*<nI_b/s<3F%q=&Uml6VXUy3@eJN)@iZf^f^mjO^?%
fɄ8~ClK;e~|VڋE1@NFqsrsJN*-/na1ALb14JL@	cxgMzve	: PKsZ    PK    A             B   org/bouncycastle/oer/its/ieee1609dot2dot1/ButterflyExpansion.classUSU Ei
`VBQZ@4l6eInᓏ>	cfI!!13{{Ͽ~y:(^Qэ|h7VNAado#d*(=Yf+nӪ(pm`20@G0乶+sVE[*8Gy"-QjK!+
oXJ@kyn)̘AU?v-ӳ|{p,oTOl#*e\J 	ߑՊLE:; T}mU'Lgl[JH[ե.,Dq$6Dgŵc|%q@MWVLWvizfnݥDeЬ!BTT8UTbDŨT};(YEO*H򿷎VS$-τ]Ym$xt9>'^`/)N
٣v1ݺpRnD+X;[kӭG4hj8$"^
	ׯ
LwECW35{6/\;lf`wc{1c]6lޏa.v1f͇1LbБKhY?D{p!ogw.ץe}C@Y
JMDp*9 =H#jO`zGÛ$y#b(Sǃ33Wa)D[@^CT
kC(!c~Xcu,'V9ѯO/&d0T
/8n*Ap0C4H6`2	|:
{#%쀤?$<ǿ ז:%d~\ǧ,(f$Eo&fjxB
^Gmo@/^z|ICdǨZ˃xR3 PKЉ  S  PK    A             O   org/bouncycastle/oer/its/ieee1609dot2dot1/ButterflyParamsOriginal$Builder.classT]kA=]7mjG!MR%Ed3.Saf"o蛿D!P'Q%Lv{{8ܻ}<c(6NfVna-0R8ysNQr"8FJ.u`Sn}
m)`;	CL|<:387	y; 	u4\9˕rWҳom~41AOEitQrl:ޫP+<z<ahK*oN^;RAkx#A?ϗT&WH.uzj	rc5%,SS KRXNJjWPŃ
~Tø##9bU()*M2_3`i7贐Em^7],u{K5 * <ʣV"
 "`;>4ԥOD}^
)
y: PKh`s  S  PK    A             G   org/bouncycastle/oer/its/ieee1609dot2dot1/ButterflyParamsOriginal.classaSWKB "Z1A[t"jCSMaLNFlkfwo?S))c3~Gi]@I4ss{ww߽/ 3XC ChδMaPJuӪpn&LmۣջpoxYJOQ|ΣU*Nя>]۞03[-=!tVP/4+U۴ SOgnvU[V֭׹-re;nU/9u(nxvJb,Z.=kZ{JuIrr8M&<5{fWqѨqO_,\s=QBpا]55ֽU׬a1?qa}F!"k|| `Tqc
N(WpRCnM3dzt '{ \|| $D"L?]Zf>>v'f_j.JJǍx7#>L]eݵ娠I:ۑy-$|!\Ki@A&0$8iiFFW*͌Ӹk̪8kܐ&b7UÜ(~P){S/;0T6w,G_܂0ʿN1ni4&}ȟPH]Y4Ƶ&K[h['V#OK,~6NXٿd%nImIKP{d#`01D I˭fh%F~R{ioEd
&lsMaZqSmLiӟ1B1M5bۘ,^L1B1H.S(/4ctVqT,*L;<ܱz^! PKBʨj  	  PK    A             H   org/bouncycastle/oer/its/ieee1609dot2dot1/EeEcaCertRequest$Builder.classUmOP~.
[E*NZ6^}#%6uץl#~i2C"?e<X\s{s{ V0\(3>3-Sl2Dݲ-*Ìp]<z;bhrW0LԸ]U2qɺ~k
ݪi*unfvjZnZơ5ݵ2ڋ^ak(Ӫ1<Lj&<j,3ZMQr.:J/ϔRŕ	p=\K8'f?S
F(
3$v_04h%KM<`dEfjW_ѩzt5F}[ڠxr紃ڋ s3,.S7~/q(u=d+Dч,PCsP~OAU4ކ->~闿u.,yb3*&qEe\U1k*U1&ui#4/iaLa!RaL#M_ΩU\Cw]M9BY$III10Uzzw:B+̷c"߰Du pPq`p
ELO!ۍaKBj;~EHrT#,D
.`7PKʾ}    PK    A             @   org/bouncycastle/oer/its/ieee1609dot2dot1/EeEcaCertRequest.classWmSF~diSbdK^
I кXI:#Կ@g˔i~{

̰{w>{?n1	Wi_14<4m{ 6MKMyvl3oX
f=^&<g\6/s+Sm3fS5ڤl)Gi&,sy&9^r	m24˰ZڲxѰFKun{7yNRQ9vmp=kkhdO;#g^~+v!~Wmg"8Mf
VZsg=r19=CD
U""8c\76/C`3\v&:ݣdfa8Th)"Qk;굈6
9钹nzhL97uʝ*EI.	Jh>!zpi0S䣐S`OOG׼RJ$ҝ5*vx	#Qxmk{{pvPfHƞ=O4oOּ{~-uG:;WkyHDb>T+ɉg>>y^^ v f@][nhM8XS5ykrN/Dkc	=
nWA4O+u
b@e<a
0&FB|!DJB<kx.Ą/ю2:0-#)!fщ_P1'#odt!+.q221MoWSWp{Fc##9nQh}8ףEF-ⰾ*k	i$7hօH=VԮ,wwFw`g(U%]c?ڳ-ljn}X2ǯrbd?^$%\lb"MJ$uD$ht<dr;{۟5]_V<(WF'SAVBm}]UiM ܋ϲu/XѳQRzԢm g%Rt}ߕ3x\BZ	U{	0/Vx`^eוFrPKUf  
  PK    A             G   org/bouncycastle/oer/its/ieee1609dot2dot1/EeRaCertRequest$Builder.classUkkA=]4g}VCݦ
m(R(UjqÔtWw&~_)(Q55IBΜsϙ{_~ xD._eڐOfJ-}7_*z bEŻPa!<pCA~ĝ&ځfNoy:W)_ʑBң5++97.mdCV	9>3JM,y9~ۙ@uug)ǻl;&|#TY$&o	_ɯqI*z|v*܈\?sC{"Oq{6hxcGcL#8lq۹!OHu2Wm9Ә16fp.Hp=,n`¢	7MXJ#[i6]=Y]nr+%IJH
0rH<#hu->p_`>gp%h
ů(>w iG=Q;=i\zE=@:\'`;f_MVڤ֦mOpZ1KսoPKp2<    PK    A             ?   org/bouncycastle/oer/its/ieee1609dot2dot1/EeRaCertRequest.classWmSF~dҴ!D@ &ZɱtG΄)$Qmd,3*0>?0;O"}IW.3LL1\y1,S/.e}fF19<
nx6~ak5<pM^օsX
܉],\Ҵ Zi4]*J?N#F=4MWy&<5}S׊YВ"/xM':Kkt*at)rMA-L9+gnlUI#/|.Oñc/9F27-gH1VJzb4O 06wh9[%3;Cǥ\zaS59uEQ'j?	Atj,mw,ANn
:!5["iB_	.I,ኄ>N	H&3	Ξ	1{>==@c>!?c| I ++!
w^$G7rAm]kewY}r7G)^_)ʙ_ 
*LQXߑ/(=
Ef"OQC>h8{Le?=cu{9mJNY3U,ǼoY
*cHA+(a-Q94#(Ĩ+z
qݘ!"!B<hox(Ĭу2z #y!XчP,#e##~q+2d`>懯+O_w%i{׽c8QR{H/GӼb;v[ʁRܖOFI%#@@XEVnڿgm<Q;xv6ooh1"<;ȅ~E>z2l{5ڴ2t/rbh_D%_`E$U$h%GT#H?ږe=]o J;!H_Ec s
ܫZ\VѬ&=jP?P?eLy_]'hCB};4 S$qLeZp*#	 Jqj?p^U)1@DPKuZg  
  PK
      A             "   org/bouncycastle/oer/its/template/PK
      A             -   org/bouncycastle/oer/its/template/etsi102941/PK    A             I   org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941MessagesCa.class[Gǿ+bԸ*j*T4xPB*Ze3겋*O[{ت޿y'fwޙ} /5V0d141ghfg`H0lap6];v10>մ-
6*h
łT0zQ#\Nq?orK&EA<gV2?ډrQ$nĹXic3K0Tsߨk1;	saŝyMjZݼvU):+!YԼ<鍍<y`#F1?A=֠Ó
9yfls5d=_$0$m03̆Ww%R~PPZmIi9:%X\u=<U"`{0ܳŮ𻨋Dn1XnB`4<I/ؤF#`Qꐉ'5.rM1,y,6jfjBTCeT3yknm,xR#"a~уƨ
g0 7ErȺ]b}`M9m\v%; ݑ2մ,;=MN8Sx.V><bƸ8!M֏ɒ[)_+26KZ1ۅͫ`ƍ.up.y]Tt(輬|S]
6]j:ktɔ-&T_2NchjSq^{TثTܪbTܮ4~蒧EA[3Ry96	<tbO.h`)GPC%\GXF#p=:zB3aJFh',vNB7	hB0J0Fp/>"<ExYs,<Ox𲆃xC8B8=I
^ +F0£HJpFxV%MYsԸ:"_nǵbIE-PU.
mMhkCږЮ66emm}h[C,(0_U-_~? }lV_8i)zԤ83":EwHIn?ꪔ)$#R~Jrǣ!,Sg4JY7,)+VץTRZJ<)"+}nF2ZĜggFZѕkWg>'yg}i}Q1*xNAP%J=h,}Q) 9]2OA],؀|Aà_PKb@  
  PK    A             I   org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TrustLists.classeƟ4iMXA[&-6)P,ۀ"^vq-
RFλM5?|gvy}3 
!gecgh`hdhbhfhahehcXɐdXͰa-C7:
necgH1ΰN00İ>!` kM#k8+hC:Q63=7p̄ht a&w8i_CV.9"}z"hB%]"HٵxKsc5:oR^<ݝ^>r~ϷyV罃fKڞSԫH^_'K̔,OTtw%!'CMU6mX 4MҴ]綽2|Z۠,KT
B(ԇ-C'>}7$JB|J
3H
ϺM
_ĳCB!zC<GQ{g=i۴ZԲCށm\rSBɊқFrAf8b
MY؀꣺f;&Y<KA;w
3M/BoǰE)SbόXkicI\v8iUlp{RNMQ4U[GySW08Mԕ텓"\R0oss&^uQ|AkP̦cRSq
cfhPpoM9
Pp{ܫ@S0@W nǲ)5%ī֭fʒ=_j7w3F#tS릵V{UI	NĚƤE
"Fj	uzBDh&,'n&++	B'!AH7(nQl&܆GD1L0[h&<<Nx$)ӄg#<Ox«o"Mxn0v0F2u~6> |H1§_FsRL|B	+-hlfBENܝ9X@J٤g<6{ճ힭lg]z6yų	vJ[ u-_zמaxTqFnKI)G<./[B| rrI5U"c?"gJY8Ψt
S(J~S|r)IA_4^|Q@vUL.M&VYf 3#2P734T#ŅΥKdf<Z<^X<ՐG|!*wss?UQ
(Uee}~}<^=Y%&4zTx.Fz1uU+dW=Ll~Stv8sxG\F^?PKS	s    PK    A             Q   org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TypesAuthorization.classsFǿ"֎!6
$!K 4Ni
%#ɀ}}34ә[NHGïv230Ͱa/=3`dbf8p!p/QQcN00ΐb`$2fx!ːc0װ-
ih[tYE`θaהچX!y"аƖ*fH#kh1RVA#&ޞ=55D?'ͤ[òHo0g'r4'2hM'͚
F(^!JNIa䤠ZmұY^}Je[y&26yp@:AP*fk٬]YJIaҤ|'ANzҰ
	iXW):S{ޑNut9A.O"I-6L:|2y5ACH	(D?빼P#e
+L}f
+#^䣣bZU3:U'YShR	٩1k枬2K/I砒0rCv;h|ի"^8'p!סCV6I9J>M
eBd54"#m2F U.q݊
MdܢcLK/m*Z|jaZ*Gn$*6}h	
>כ62Ai?FTU"kaʩV\hS%3`A2ׄ-ԴJYnauMu:k̛ӛ|yz?2ȫYGKՎ~s::NxL3:chܣaK{[E<ѕ^܎M]G!{˦b`	UlnE:U#;JazHd`¢Ba7J1l
=

v()TإЯw0Q<!<ÔCx*a<,^VxEy^Tx5x)EG
7Rx[{QxG]*XP,0lߗ>S ՈNuzu#ʳ/|.NKѳi7Öv]t}TwM|e*W:_J3*7[:_CdbFuĥ[yKm|q9vo&;9#5;a䛮{
yWᰩ1gYf3޾
ʇsZ(n(L#i|zLc(s*)XYdڪ2WyWU_($|A~!rIGDgDPK\Σ`  y  PK    A             [   org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TypesAuthorizationValidation.classTkWE~vcՅ
MXhZo͐lv+9 w6zxϼ33e_~0g.0\fp[o33L000!-0,d'V-9?Pҷ,u-]bLh"PZ-h40U5(c֔/ZuycUiiX,Bb"xu/qaypET(2Ժ$fnr<k*njv&T F2TڔqC%	96Y\GQCmz02E-A6
MR{T5H뺌'
gN".p
٦Vˇu%@5w)m6K
j2HiTA=DixAQ\s+Q+۾Ht HRa\3Iۙ|9BKUr_{GURܢt97ҐKū7g+IgBH(£1ځ-N"iDɰ@iROWuERGO&0Envx Ԩp]'iNeގ&6޷񱍛6>1kcƧΔzgMzŉ6t\ͳVkB޼=~(G?vsG$OV{NT7y,93pEa^wtr60Xq0GYjm%|m,cOrr
`G@Հ̡Ըh})$2vJ酬tKSLG4Ѣ?|{?if?#n9Gw+~ w_ʌ^9?m>LkY~0|pyEg3D;ϡ)>"&&RzN.B6W:6YEDr*:[hr:"]Ƨ
PKs=  t  PK    A             P   org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TypesCaManagement.classR]OA=C[v
|"UBx1#TTC	iv{ilwάI12ޡTt=wΙ{o? ŔiB^݌b(L`r6e2T$
IN,m"eLܐadX~A,Nw^)PeHRu0͓Imb
Rʂtd
4hhy;Wq2W#сn/fV=]_
vArn72R6w&cEsiJo+s٠ѿU{+s;F;ٓ
ڇQOymHVx>p--L裂90˸2n▅:z%bf&eP֌֤UAf-ƇMsK/X\.ט۵Ra+gX,qgy0zglPKK  d  PK    A             M   org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TypesEnrolment.classUWENR؇`
TkZ"ؖGJPhZn6C	m|xN<$4`αs߽sg߿	`?3cdbfxaaaU1\dpau700,0n0,2p@6zҗꪁo^JnJQFel-SmW*\Y^QjMD|ΤU$ףSW(,8y_
X}5[8lՠd`@r{KTHXǽ
q朼J,2HEQerKJNw:#nX))込ȗDXQDDS<%%COEh
.(ɢ(%Bʒ$A	%NJ$hH"wSUD%DCʧ^"mgϱ=/+uel9YXjDH'<''<UBk[CqP6`炲V\'R+[*k쿝OnlYz,<BTGgx91~ijrn4^SCDk`XL9'Csdy
\{Z:Wq;ȗ=ХwM'ڢQ_|Gib{$v޴;NeOZ
A(uhIBMibUL\71kbļ˭ZfEly~qdx쑥c8?rhOLe%=[Ͷ;V#Mp\-л bZ_۱$Zxǻ^pNË^0aHðb464gmoaY75{4L$p&pkp556ѐKb$`K԰aG!PJbE
e2>;sb1E"R:gq>c2Ѡs7|ƶiE?+}VM&Lwf]'5,L6	MGx/aw&	nMhaOu_gݯ8Z*Uc|K3#G3mR+YWg78xƱGd<C~:$m1IOx{<US!WҾG4?PKbK  	  PK    A             S   org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TypesLinkCertificate.classRkOA=C)-@}" mX$
T%Ƅi.~ 12,Pùgs iñe㌍nDv%="jc怤s\q&MUD#zYo)RbMx\_k+W7	sv@["6G3hKQ E0wypk)k3Qíq|rCNn~")KBj3/E(*jn.))d-iZx TnX*K-qIp:=;=31=KIz-py,\pa|W.2<ɾ*4gHV%_f ai]lt8u8l7RBf
p+~Nc 4q]hJúc,E>Z@BMig,щc񧱨W:2cq=g:* v|Fjb.TVw0ii2k{_Tbr;e1->#mdP_~+: PK!=    PK
      A             7   org/bouncycastle/oer/its/template/etsi102941/basetypes/PK    A             R   org/bouncycastle/oer/its/template/etsi102941/basetypes/EtsiTs102941BaseTypes.classVU$	-Jm+`uV-#P
HŪfs	ݰPT>@:I4Ai1w̝w !FlmW\31n1αm
mQ
jHnծE({5%
[/p>}UBhUvERÅ\`2{#;skIqεj%,垄w!'ȰoYze_T)s5lDEGٍhz u-ɔP}-zMKyIז*-^Tِ
2!vBPAzw[8*9+UA]MUy$
6u1OJf<ekekm$uέС8#冲,}_	nZѐpDS18 痭vAH˓\<"q䉗]YSf_8zU.*PT;KLff'dXjNHZ
sjɇ^)rͳ/73%/\ѰvF7Kn)(7@8<:1ڇ?/uX::&uL鸡cZSwwleel.W*
cvgz׽YC,4z62d11^gg\`0.2`\bx10їX*>=31(0vRX:c#E2>Ma	06[mgӸ/ҸG/_1f4
9|]^ow&_tJ3O5DynO7֑:и~Uc_ps<)ӎ1{ԞS~Ý>=^jPf+tP1{c1Q÷fO,&kL=\3F
}N
t1GfG;ш_6{fcfglTjF]
cvM1bs٬$ow5khRs@H? 7PK3  &  PK
      A             -   org/bouncycastle/oer/its/template/etsi103097/PK    A             E   org/bouncycastle/oer/its/template/etsi103097/EtsiTs103097Module.class[SPBQJʵ\ȭGW&$NtS,qFg|Z÷WwY+=퟿~XBQEnUUPѧ⑊ә/خ-6:#E`泋Օ<}l=!͏te-[{\17GKϦ7]nC&g|4gXM7+>7xwXgU"0txĳmЍRge6mq,9Ղ'.Bω-i{G'ܔҞ_ҎkVɒ5ڞٞ0sNv,3l6E	~Zv70Q\=H繻Wl̦u]Q-)WLQicsϑcؚ޽z_·R.?Kх8	$a"Ä'8:lӘ#<' h,a@X$,ŐKr'&҉)bPjK[޳ˍ]y`T>9!bґ4+Uu8QjTSQMFu0-`_땕>oKŃZ,α`?9Pc-6P&rdk(s$;BA-$Pn^N$ PK
`    PK
      A             7   org/bouncycastle/oer/its/template/etsi103097/extension/PK    A             Z   org/bouncycastle/oer/its/template/etsi103097/extension/EtsiTs103097ExtensionModule$1.classU}sE~.i{5j-4)jE҈цBЂonbnG[TFR8
	k3={쳿~0FVg
ә;.yS
/Ņ|%Vm(N,qXAf-<&sf˺ZԚ/LN}Jkj7pm^w>782BXb{1G0pJB/n<_1VjK'zCd-rP&Vémn,P;,yjF(]jl87Dkh}*yS:fdHr屧{;[u%V#I
7syoR-dphٯu4d*Ń*_Gf۠<M#e-ץX))IGL5qIoxĸwM2qr4.8ߠBl4!2D?,iXTt:so;ESH"fҁ}=V3z{8LTTG$K~(i(6޷qX!86F5"gcH 6 .01kcs6R>1y	|a[q\Fh᪆kØX@$
/5,[BICB_ha[sy.Ղ_c:J%'bPOw]
[]z5.Ʌ2nEĐ0@m^f]r/`bzwV}
uW{7bq-_w`r	V:ӿMݛnu9&֞J:`wpP>0be0
ƨ<ۡ51Cw<t2FMe:PKqmz     PK    A             X   org/bouncycastle/oer/its/template/etsi103097/extension/EtsiTs103097ExtensionModule.classUSUBw6,aPZnZ^J%)R7BvʿRƎ N@M32wΞ={כp5
I

]R5\
}n+hOgҳL1u<'|XgTOWOJ/p|Oe6*d][uῊ뭊)醢UAxI`Pv%gC(2תfů{ֶ%Е9^\M{o+
TQ|֚,}lĖ	tyb	
yz(ہ6CF]uN-#ar]+XYꊊt\~_z=K*t$~i$Q|nv=[s}Ɨ5sqziJ"DQDqmtf(76]*沃a^h|Υ}9H)sp{Sf)"IK,[-,
J<BXeem*zU|""_ŧ*;ޜ mݷNәޝlzv6s+w=iNv:a%D1#uzqΰs{ph:>K7x`bH1t3\ft:n⡎;9&t¤!)W1,<#8ưmCx0A(c><xP&}n^<Y.z!qJJ&*WM!b#٤Fv5iw&#[AI_D_kNFJ F ^p9]0B.xwR,Sg]<0xq6=be3cMmǂѿcE?b<HG.w܈EOޯ/;6\Bd[AP"Sԅ-Bm44|
PK{  z  PK
      A             /   org/bouncycastle/oer/its/template/ieee1609dot2/PK    A             C   org/bouncycastle/oer/its/template/ieee1609dot2/IEEE1609dot2$1.classUvF(J[JkSTv2(qBү1E2G[pr
L==퐞jgffH+ &103z'32"\zAஈJzhoJ^h1Ls)WWIT)U)M1qDs&6C^0Xmx>Ci1)ĦhMԄd&Y
bGP|ԬQ!io:.[C^N*2#RAE0Dl>
a"jV5lΖcA*Vv.ƹR EM9"=&Jz'ܓΣ~RMb'ȓ%FRXj]Xbږjr67;+Y7Vɶ
õv:p<\|p;
7"7|*`,#2Ty38)vh0ᄆNix[i
hxW{hx!p2NOZ5vYv-e	=ot).PCT/2jXɛeGkv>]{05||v"fC$r4
ô$.Hᲁa|b@g1c(>Ubq|fC\5E\1	БnJ#VJQcs:0f?sK#=B1,䣐~(F)D48?VyR5!t)ʇ!Ct`@O'heNnOPh<o^tбZDk;/gwm_ab53+;ZobuHx%W_"/X+&*M,ocu+C2	5x+,*c1SPKq݉    PK    A             C   org/bouncycastle/oer/its/template/ieee1609dot2/IEEE1609dot2$2.classRkAtxmcZUmzZ8$*BBǽ˚^ކ|Pڗh\oofvvӘc(4[O'ib2%Th7=RJ`'ړ1A'P7ӯD$	bt6"=NױȍY*/SF*DNdK>%:eO'y^=<0rA"u潁600<GznvsLsT8p3KͰ>0D7[E|<TdI:lE49)\pQE8.J䢌2Jq*V%-S<GqSh,4V:]iv5M2T"e03"~#)l52@QY|ҎD-_u;wkа
[
R4y.X>
tqIV#dۇPK
TDk  i  PK    A             C   org/bouncycastle/oer/its/template/ieee1609dot2/IEEE1609dot2$3.classSmkA~6/&^mSm}^ro=Ph65wJE#A~M"Ζ~I-<܏_ Әc:S(ފЂ!5ܖx-<%ݒN66*I
Jt"^(I)iIƣ(Dbxh8TL&҈=d?6
cs"8ԩ`^(yƽ^oyyaxmA?Q1q81Pnm2Md%xũ9/Fi\uG'ao)Yd,qB,pE8EpTd߿rܣm@)hKӖZQ$e%T3-Wm10;
q@K1RȐʸdb;ÌȽ3f)7Xt<ɍqu+aJ}mJ9بRWndFB''S.G d&dPKǟy    PK    A             A   org/bouncycastle/oer/its/template/ieee1609dot2/IEEE1609dot2.classxߜʍgYڕ+؀lܰ1aNpY>w){
R@NlCBJޛ"+7޼y3\u
 pXd9lp:V6s0a0|I9px#7qxwpx7q rs$/p7q-np{8ApxAE-*"O53cT*unٴ֮v,٣i9E6ǖE-dD5N#Jv
,Ƿ]-;uoځf>c9մ{A˳-\i+׬myVk;8&~N&8l5W;@%uYA%EdD8esW6cvPJA7[n3iR8:ssa-F&G=ӭAzAʻH**#%HZ^u/TAt=Z$~1fҞ,em7XI5'L.94nhyun5epTvS}Yc'iL;kF8dcR썌a56<+}g@BDȴs#8i97l݂HL/ƞ;hiB/ӑԗ*Yh0ژ_0ͫ4J1q
Kh+YvZqA=-0d4w'Ʀ֩­f琊}jҞeuaDq1kjfΕıΠDnZDv:d8*$t*@mqT&s4 c5:ۂ&AP'fK߲ri⹬02Ȗ.fc[Gl&Ռ IahM7qi	fIĒ8`%6fSX0ºDqYrTʹa;=
r7UiצEfJs2YXxPX*M7;A=4TB:L iL ǪE/v
]Z<t3^Zͽ6[PߒWL5ZY\	斓K,*Z܋Yo4_Ƭ]YۛJcI$nFi:8{K
U~C00Zr'Q[h֧$hGx.JU6#|˻yw5Gտ2k&ËJ>ER-72YD&5McFnjS	ե*cv)IccG/1i/HyP^XU+rR%J\&#͆%p,>V~fǔh+\kF%vVZږ3I2|#cn(&&&[^I֛{ikZ=;#
0MozRrm\`gv=4dX>(h[d=7pM7W$*;zGYz=3<rvk
	Sdx⑱146:>[[Q|k'E9~$;d[jiJRoA>1Q*E3x~4e.v4bÁ
:q"9>%.en^"a283>!҇Jt<UP
rXa55r8C.8s8 m.`p尓Û9[9\rxrrOq4srsoros9|Õ&9Ï80w尟up+9nr#9<!sxc$?qxóQ~~D(\FgQy~_FWQu~k
/%WZqA0Q^=\y;Sq١>m\vHޟTN߄?g֣11.M]365.MͰǱz?`6,D*kZ֦Ƣ!WLl<2Qmxko\tf6L:p8-OGowۆ8z0Fq	V8"&!%LXO8p*4FMVBI8p&!A"tzgz	}~ل ap.apau'\@x LB`F	)B`v2:vvZDI&9q1[[p;7%㰛}l[^@8\Axav~b#
q=3p!×YZY0Zd)B`v21Cp	YNG'\H Vo'\B.»	!~$|	 |Y	_ |eW_%|MwհB&	o!\D;	%|Q$|_"|u·߮ag1+6c}`ߍNvJ$a7ᇄ~LՄk$;0E)g~AU%ȗ.B7{xnޖ~`3[>,hnG
XHKt	Y!!QhyrXӥ*J)3R|)RnURRnҐr@5Rf<[ʵB(	y)	J6)@ʴ]RrT^)OOʔ(M z1UFjgx]lP~$
u
ucx%ڬ=vjm>Ru54\QwTAk9vpR65SӲ)~<U""wUIvX:.U-T?\	콑lլͮU~ՠbÞHnv>YJG[u*r
];\;VJ[Dnd/krEH5֋]_U	;闵%J(e7.S+J	X7hsCb{s{.ӄs\*=N0b5bǅ,QWzՉƧJt{<?u{#{"kӝ2jTDzRV(s׎=PA=u~l*2_gǅ=jDNN͕,\ԤI,Oq_QҏL:Kg-@Zt+:ka::YxԢEsE1uʫuvMuvZ8P?u֤u"U:QzRgr(sW\pg':(? *~^uR9o*+:*z0=uXa:C"
H*ׅߊr"tvrmP_gKT)akVQM7MDoz#Vu%/4uB{{"v?Wi]?M*67[3iODkPyBgsɈ
c[]XxQ$USLg*ySy 5:[	AnI=!U:Ugu֬VqoәVqՄqӄirQ:[{Fg'_X2\0GIŇtvY!YMTu)P}M#ު:Q^+O^ش;๽9ᚗ{_Wt+t0ʒVO^OnNxE<8Ќ\U쌜5,EuI-f PK6o  "  PK
      A             9   org/bouncycastle/oer/its/template/ieee1609dot2/basetypes/PK    A             T   org/bouncycastle/oer/its/template/ieee1609dot2/basetypes/Ieee1609Dot2BaseTypes.classxߜʽV6B#ɝЬflY:ȦVO=٢w%@B	-E':$@!$$:μӝ|IP}ߛof̼ys՝^#,BX@X!ЅaJ5"Ѓ` drB88ND8	dSNG8 \cK~p?G	f[~(cO"W~o!AYʹk?{yg͛5n9sa˶Tud,6o9RsAl2;u;mrCviށ&'g`&1bKz<NMfk6\ݗF9srXl.[gJۺsͼ'|T5Sr-s@:~Nճ}_"e[-{6WzbkȤTQL%Ru|1ì/v<`	5j,2mT0nl;vZ[D72N4M!Zx66f3fBmmX"#|y'3vl=ZY|0	CQJ&di]2}RicaiR]Z\3ml-V;X#
ki#vI)ԲwPbI;~-|!L,6Ua&Aa"7GYx<_A>ϵ`ARO7aMUvY&ePvmp
'ں(
Rf)A
_b&.|,VR-IvXgo2xez&={F2fI
~KJc'Ϻ癩3F6dqiaFhVDL`I-;8*^.kR悃ݍ_R݄xqtH9RYѴs	'1T3Xb蛶'kFET\vkK)nY
Z}@m9~m҉KEF1'S$3E~p4;f&c~JElVOz.QT:T&<Rz#nqӵ=ACY{v}mC_''dx+]qLG]{cʤhĺREn+Z~Yfefܺ}S?WPfn]d<5/4Qg"]|]=e\]βU]g$w[χ[Z'F33$tz8^.VyFp݈6̣'Z{xfx
Dʠ
]\kfyƙ)UiFo2mmt,)zcxUJ^b;76}&7X6 %׻q#*M*6ÄevP,PU)[2wP%

pF&fFXЍ@R&B/BBXFp\G؀0p$ p*ig"p6~p \#~p)e#\pC#܃p/}#
AFxO <43"<[^@x0"ׅaspG]aRum?{~'״Ly6jkcQWkZNd]Y:o4|+SKe5\Jm؆a|e.WW<Vה1db]QX@h 4̈́B"bBJXFh#::	IBa9aa%apPa	GtB &&,Z:BO	!KXOp	'
AG!K8p<'N!J8p:@lye+p-Vm*
`:
ؚ(|'\cEJv8u;"Za`RKHa-a!C'%'rF HQ	%G8pDI	N%F8]3	g&|}?$C8p|	~D1b%~Jpr$\Ep
Z	 \WŖX
UL0Dp;aapN]	%@`7n%l&GK+ɡG&lt2:
TRa	lOI̵){<Aɓ<YɜJ&\d]JfWX%Sr+RJdk<T%+DICɄKܨQJd)y}J)i)i*@
J*^ɬ
J*VUH%*٢dlVr<M#VT%)y(y+VIOF%SJF5X&b[OXϑ"#pon
qky}j,xoQ4ü5w{.gC.o	sU=liwP(LFy`'SxD/ŐDX5P4^B*xY^h0V?B"PU|VAt6vOvP+Hj%3&uPzƄǾvĜOT3]DxMke`phxT4_Eh1.Lr<yN0bX=_A	B#DxK 7pA4#Lyq8kHrgdc77OY&TS8em0ep{ZVW[]Qlq.80ލb+c=T>*3s|:0Hg{^;	=ħŻt1
qL:h Q\5&w 'yhlXcVB-@
uꊑvc!u"}.nL^PLcXph`}bu c7(t~Jc{
ŉn署á)|" C$쪱9r`̇GFŁ}~F9r%<u X~#9'S4֢Vͦ~*	vuخ;v+1Qƭk.Z(ߗ1D\|64
~-/x0;0υcAR[O*Y
>B@";`uLcgBm	1B2ĶhLʢė`ޮGQczg#,%{..us͡IM=56Uljx>ȗCb Y'7j$J@>-_η3f8oj,<YX]~c^V_?K28J;~{("WYcɟgWD%w՗jG5g/Xݟ56WCg<\tB9C߆;iPoPKҎB!
  s  PK
      A             3   org/bouncycastle/oer/its/template/ieee1609dot2dot1/PK    A             W   org/bouncycastle/oer/its/template/ieee1609dot2dot1/Ieee1609Dot2Dot1EcaEeInterface.classTmOA~ֶܵ_Ђr7B**#(JLhAKٙٙg/ CG:ubKS5铎|6K8=#j]v.EqcM0tXrR/wuJ.bx\1	ۭCUPg8p?I+qA
?tTU%-T0t-k_#W:7=WͅpȘ£5IԪf9ΆC	~Ɯw
/{Vy_1a`-ΊeUF}6^EE<WyW5{+CS5jBD%Cf޲CE2fz9Ҫ/[H#s ʵeP/"xǠrB<
j*płu+KܫJ[5U	
.hK%
5\pU5;oSa nvavfMU]IvG۵tTͷj"qgjعg
ĠCAS
N+H@S82pa@5pcq=l&di<H<R0`6~L+)!?LP!zFާ֌P#z]$SބEZO
oom&$۶"T)R'no㙽E\2Bv)	+kmx6D-ڈ	sGHZl/?#̄a0I)S-lͯ	PKPͽ  @  PK    A             V   org/bouncycastle/oer/its/template/ieee1609dot2dot1/Ieee1609Dot2Dot1EeRaInterface.classTSF:C\%7y&i:@,t&g5ItlH)fioݻp
F
	'	|&p]
}6㹾oHsުNdok_zܒ~DFmj:R~K${n[Evs-@SUwG]60R
Um~@j\AEWLKi.lCNӒ^iSRuX#CdXpS*<ǥQm'mOM{j%ɚӁJDfb6Z}GFS=WY.RA]<"US.^)-\\]o^N\mŒ˧6%lvZ*קn=mKRrk2R{eUFGHoEV&orؐ8]:Tc1u-bU5ұe0=+\lmH͓{*d:πMLԄmbDӟPoå<3q|7r-v_*q/݉1<(Ûco1ûCrW9|rW>>g9\RXef5
z%|Ͱ̰M.cd!Y~"qA:ϕ}.x2Tq3KNR3Ƹ؎tXl`pdS_ic2S/0~Ve3 vt
+׉y)
q|St`/a97a<ԈITn)(79<v)ٱ=_:.R*ʦ8J[8VgZst|2'FPKoc  
  PK   \z[D@q   R                 META-INF/MANIFEST.MF  PK   ]z[3rm  t8              q  META-INF/BC2048KE.SFPK   ]z[   C"                 META-INF/BC2048KE.DSAPK
 
      A             	               META-INF/PK
 
      A                            META-INF/versions/PK
 
      A                          L  META-INF/versions/9/PK
 
      A                          ~  META-INF/versions/9/OSGI-INF/PK     A   S  (               META-INF/versions/9/OSGI-INF/MANIFEST.MFPK     A x    %             ,  META-INF/versions/9/module-info.classPK
 
      A                            org/PK
 
      A                            org/bouncycastle/PK
 
      A                          H  org/bouncycastle/asn1/PK
 
      A                          |  org/bouncycastle/asn1/bsi/PK     A U1  C  4               org/bouncycastle/asn1/bsi/BSIObjectIdentifiers.classPK
 
      A                          * org/bouncycastle/asn1/cmc/PK     A   t  *             b org/bouncycastle/asn1/cmc/BodyPartID.classPK     A ]V]?    ,             B org/bouncycastle/asn1/cmc/BodyPartList.classPK     A YH>    ,              org/bouncycastle/asn1/cmc/BodyPartPath.classPK     A b  B  1             s org/bouncycastle/asn1/cmc/BodyPartReference.classPK     A Rh  	  +             \ org/bouncycastle/asn1/cmc/CMCFailInfo.classPK     A ՜  	  4              org/bouncycastle/asn1/cmc/CMCObjectIdentifiers.classPK     A *k2	  	  2              org/bouncycastle/asn1/cmc/CMCPublicationInfo.classPK     A *  v  )              org/bouncycastle/asn1/cmc/CMCStatus.classPK     A ZK^    7             f! org/bouncycastle/asn1/cmc/CMCStatusInfo$OtherInfo.classPK     A Cy    -             )% org/bouncycastle/asn1/cmc/CMCStatusInfo.classPK     A ~b  3  4             ) org/bouncycastle/asn1/cmc/CMCStatusInfoBuilder.classPK     A I]"i    /             , org/bouncycastle/asn1/cmc/CMCStatusInfoV2.classPK     A h    6             1 org/bouncycastle/asn1/cmc/CMCStatusInfoV2Builder.classPK     A -    /             S4 org/bouncycastle/asn1/cmc/CMCUnsignedData.classPK     A [a      6             7 org/bouncycastle/asn1/cmc/CertificationRequest$1.classPK     A V  v  M             8 org/bouncycastle/asn1/cmc/CertificationRequest$CertificationRequestInfo.classPK     A /    4             
> org/bouncycastle/asn1/cmc/CertificationRequest.classPK     A 
  4  1             C org/bouncycastle/asn1/cmc/ControlsProcessed.classPK     A UT    ,             F org/bouncycastle/asn1/cmc/DecryptedPOP.classPK     A O  
  ,             J org/bouncycastle/asn1/cmc/EncryptedPOP.classPK     A M    0             N org/bouncycastle/asn1/cmc/ExtendedFailInfo.classPK     A p0  p  ,             R org/bouncycastle/asn1/cmc/ExtensionReq.classPK     A T  
  &             T org/bouncycastle/asn1/cmc/GetCRL.classPK     A M8    '             FY org/bouncycastle/asn1/cmc/GetCert.classPK     A Jzk    /             m\ org/bouncycastle/asn1/cmc/IdentityProofV2.classPK     A <  g  -             5` org/bouncycastle/asn1/cmc/LraPopWitness.classPK     A #{  	  /             `c org/bouncycastle/asn1/cmc/ModCertTemplate.classPK     A )`>k3    (             g org/bouncycastle/asn1/cmc/OtherMsg.classPK     A {?  
  /             k org/bouncycastle/asn1/cmc/OtherStatusInfo.classPK     A 4
e  
  '             o org/bouncycastle/asn1/cmc/PKIData.classPK     A GE  0	  +             ht org/bouncycastle/asn1/cmc/PKIResponse.classPK     A $    (             fx org/bouncycastle/asn1/cmc/PendInfo.classPK     A j08?q    0             { org/bouncycastle/asn1/cmc/PopLinkWitnessV2.classPK     A /aA  	  3             v org/bouncycastle/asn1/cmc/PublishTrustAnchors.classPK     A %O    -              org/bouncycastle/asn1/cmc/RevokeRequest.classPK     A 09    /              org/bouncycastle/asn1/cmc/TaggedAttribute.classPK     A     :             } org/bouncycastle/asn1/cmc/TaggedCertificationRequest.classPK     A 7\o  f  1              org/bouncycastle/asn1/cmc/TaggedContentInfo.classPK     A Ԗ#  3
  -              org/bouncycastle/asn1/cmc/TaggedRequest.classPK     A 5C    %             r org/bouncycastle/asn1/cmc/Utils.classPK
 
      A                           org/bouncycastle/asn1/cmp/PK     A s  *  2             ך org/bouncycastle/asn1/cmp/CAKeyUpdAnnContent.classPK     A 9#3  U  .              org/bouncycastle/asn1/cmp/CMPCertificate.classPK     A 
B  q  4             ܢ org/bouncycastle/asn1/cmp/CMPObjectIdentifiers.classPK     A $9    -              org/bouncycastle/asn1/cmp/CRLAnnContent.classPK     A 
~  b  )              org/bouncycastle/asn1/cmp/CRLSource.classPK     A xss    )              org/bouncycastle/asn1/cmp/CRLStatus.classPK     A     .              org/bouncycastle/asn1/cmp/CertAnnContent.classPK     A   %  2              org/bouncycastle/asn1/cmp/CertConfirmContent.classPK     A @  	  -              org/bouncycastle/asn1/cmp/CertOrEncCert.classPK     A 8Ŷ  .	  .             N org/bouncycastle/asn1/cmp/CertRepMessage.classPK     A ڀH    6             ` org/bouncycastle/asn1/cmp/CertReqTemplateContent.classPK     A 
  
  ,              org/bouncycastle/asn1/cmp/CertResponse.classPK     A .>'  
  *              org/bouncycastle/asn1/cmp/CertStatus.classPK     A <ǻR  D  0              org/bouncycastle/asn1/cmp/CertifiedKeyPair.classPK     A m  4  .             D org/bouncycastle/asn1/cmp/Challenge$Rand.classPK     A uפ  !  )              org/bouncycastle/asn1/cmp/Challenge.classPK     A i    -              org/bouncycastle/asn1/cmp/DHBMParameter.classPK     A Ik  	  /              org/bouncycastle/asn1/cmp/ErrorMsgContent.classPK     A suEO    -              org/bouncycastle/asn1/cmp/GenMsgContent.classPK     A %eTO    -              org/bouncycastle/asn1/cmp/GenRepContent.classPK     A Hn  F  0             . org/bouncycastle/asn1/cmp/InfoTypeAndValue.classPK     A /.    .             | org/bouncycastle/asn1/cmp/KemBMParameter.classPK     A w    1              org/bouncycastle/asn1/cmp/KemCiphertextInfo.classPK     A     ,              org/bouncycastle/asn1/cmp/KemOtherInfo.classPK     A  ]    0              org/bouncycastle/asn1/cmp/KeyRecRepContent.classPK     A )R7C    4             i org/bouncycastle/asn1/cmp/NestedMessageContent.classPK     A ~31-  r  '               org/bouncycastle/asn1/cmp/OOBCert.classPK     A q    +              org/bouncycastle/asn1/cmp/OOBCertHash.classPK     A d1>  	  ,              org/bouncycastle/asn1/cmp/PBMParameter.classPK     A s	    '             m org/bouncycastle/asn1/cmp/PKIBody.classPK     A Ī?G  C  1              org/bouncycastle/asn1/cmp/PKIConfirmContent.classPK     A h  B	  .             o org/bouncycastle/asn1/cmp/PKIFailureInfo.classPK     A 6:  o	  +             P org/bouncycastle/asn1/cmp/PKIFreeText.classPK     A 5P  *  )             ! org/bouncycastle/asn1/cmp/PKIHeader.classPK     A lw    0             * org/bouncycastle/asn1/cmp/PKIHeaderBuilder.classPK     A `(    *             / org/bouncycastle/asn1/cmp/PKIMessage.classPK     A <  X  +             [5 org/bouncycastle/asn1/cmp/PKIMessages.classPK     A R>    )             7 org/bouncycastle/asn1/cmp/PKIStatus.classPK     A ^  v
  -             @; org/bouncycastle/asn1/cmp/PKIStatusInfo.classPK     A 	P=    6             R? org/bouncycastle/asn1/cmp/POPODecKeyChallContent.classPK     A &n     5             A org/bouncycastle/asn1/cmp/POPODecKeyRespContent.classPK     A >lDe  @  .             WD org/bouncycastle/asn1/cmp/PollRepContent.classPK     A `gˋ  [	  .             H org/bouncycastle/asn1/cmp/PollReqContent.classPK     A [gk:6    -             K org/bouncycastle/asn1/cmp/ProtectedPart.classPK     A 5  
  -             N org/bouncycastle/asn1/cmp/RevAnnContent.classPK     A ϡ    *             R org/bouncycastle/asn1/cmp/RevDetails.classPK     A /-  
  -             U org/bouncycastle/asn1/cmp/RevRepContent.classPK     A /  Z  4             hZ org/bouncycastle/asn1/cmp/RevRepContentBuilder.classPK     A h43E  \  -             ] org/bouncycastle/asn1/cmp/RevReqContent.classPK     A LT  	  6             ,` org/bouncycastle/asn1/cmp/RootCaKeyUpdateContent.classPK
 
      A                          d org/bouncycastle/asn1/cms/PK     A  +	C    )             d org/bouncycastle/asn1/cms/Attribute.classPK     A /a  ?  .             g org/bouncycastle/asn1/cms/AttributeTable.classPK     A ˭aJ  [  *             <m org/bouncycastle/asn1/cms/Attributes.classPK     A zI  w  1             o org/bouncycastle/asn1/cms/AuthEnvelopedData.classPK     A V@y  }  7             4v org/bouncycastle/asn1/cms/AuthEnvelopedDataParser.classPK     A z6    1             l{ org/bouncycastle/asn1/cms/AuthenticatedData.classPK     A rv\  K  7              org/bouncycastle/asn1/cms/AuthenticatedDataParser.classPK     A I|]
  o  -             F org/bouncycastle/asn1/cms/CCMParameters.classPK     A ,[  
  6              org/bouncycastle/asn1/cms/CMSAlgorithmProtection.classPK     A _  
  -              org/bouncycastle/asn1/cms/CMSAttributes.classPK     A ky    5              org/bouncycastle/asn1/cms/CMSORIforKEMOtherInfo.classPK     A  h    4              org/bouncycastle/asn1/cms/CMSObjectIdentifiers.classPK     A e  n  .             | org/bouncycastle/asn1/cms/CompressedData.classPK     A azT'$  0  4             ݛ org/bouncycastle/asn1/cms/CompressedDataParser.classPK     A y%  Y  +             c org/bouncycastle/asn1/cms/ContentInfo.classPK     A Ya    1             ã org/bouncycastle/asn1/cms/ContentInfoParser.classPK     A fK/  	  ,              org/bouncycastle/asn1/cms/DigestedData.classPK     A U?~  H	  4              org/bouncycastle/asn1/cms/EncryptedContentInfo.classPK     A %>X    :             ѭ org/bouncycastle/asn1/cms/EncryptedContentInfoParser.classPK     A xz  G	  -              org/bouncycastle/asn1/cms/EncryptedData.classPK     A :    -             f org/bouncycastle/asn1/cms/EnvelopedData.classPK     A (4f  e  3              org/bouncycastle/asn1/cms/EnvelopedDataParser.classPK     A hd]  C	  (             X org/bouncycastle/asn1/cms/Evidence.classPK     A z]k'
  o  -             7 org/bouncycastle/asn1/cms/GCMParameters.classPK     A ߢ    7              org/bouncycastle/asn1/cms/GenericHybridParameters.classPK     A  kL    5              org/bouncycastle/asn1/cms/IssuerAndSerialNumber.classPK     A ڛ  /
  -              org/bouncycastle/asn1/cms/KEKIdentifier.classPK     A 30Q  	  0             i org/bouncycastle/asn1/cms/KEKRecipientInfo.classPK     A H8  s  0              org/bouncycastle/asn1/cms/KEMRecipientInfo.classPK     A .j    ;             E org/bouncycastle/asn1/cms/KeyAgreeRecipientIdentifier.classPK     A G,I  +  5             = org/bouncycastle/asn1/cms/KeyAgreeRecipientInfo.classPK     A de  <	  5              org/bouncycastle/asn1/cms/KeyTransRecipientInfo.classPK     A ):  H  (             t org/bouncycastle/asn1/cms/MetaData.classPK     A bv  0  9              org/bouncycastle/asn1/cms/OriginatorIdentifierOrKey.classPK     A L  	  .              org/bouncycastle/asn1/cms/OriginatorInfo.classPK     A     3              org/bouncycastle/asn1/cms/OriginatorPublicKey.classPK     A dj    1             A org/bouncycastle/asn1/cms/OtherKeyAttribute.classPK     A n<O  T  2             
 org/bouncycastle/asn1/cms/OtherRecipientInfo.classPK     A -]R  }  9              org/bouncycastle/asn1/cms/OtherRevocationInfoFormat.classPK     A 9ۨ  
  5             r org/bouncycastle/asn1/cms/PasswordRecipientInfo.classPK     A A>r    5              org/bouncycastle/asn1/cms/RecipientEncryptedKey.classPK     A K    3             c org/bouncycastle/asn1/cms/RecipientIdentifier.classPK     A 
  
  -             	 org/bouncycastle/asn1/cms/RecipientInfo.classPK     A Ic  
  6             W org/bouncycastle/asn1/cms/RecipientKeyIdentifier.classPK     A 2SB    0              org/bouncycastle/asn1/cms/RsaKemParameters.classPK     A  \  P  *              org/bouncycastle/asn1/cms/SCVPReqRes.classPK     A &    *             9 org/bouncycastle/asn1/cms/SignedData.classPK     A f{G  	  0             " org/bouncycastle/asn1/cms/SignedDataParser.classPK     A J
  $  0             \' org/bouncycastle/asn1/cms/SignerIdentifier.classPK     A ,Y8    *             * org/bouncycastle/asn1/cms/SignerInfo.classPK     A z\    $             W0 org/bouncycastle/asn1/cms/Time.classPK     A $5  @  /             6 org/bouncycastle/asn1/cms/TimeStampAndCRL.classPK     A j/d  E  6             ?9 org/bouncycastle/asn1/cms/TimeStampTokenEvidence.classPK     A A   6  /             = org/bouncycastle/asn1/cms/TimeStampedData.classPK     A !>5  Z
  5             hA org/bouncycastle/asn1/cms/TimeStampedDataParser.classPK
 
      A                          E org/bouncycastle/asn1/cms/ecc/PK     A 7    4             E org/bouncycastle/asn1/cms/ecc/ECCCMSSharedInfo.classPK     A ^D  \	  9             I org/bouncycastle/asn1/cms/ecc/MQVuserKeyingMaterial.classPK
 
      A                          M org/bouncycastle/asn1/crmf/PK     A RK    6             N org/bouncycastle/asn1/crmf/AttributeTypeAndValue.classPK     A 0}    6             P org/bouncycastle/asn1/crmf/CRMFObjectIdentifiers.classPK     A R  /  '             T org/bouncycastle/asn1/crmf/CertId.classPK     A |ŕoH  h  0             V org/bouncycastle/asn1/crmf/CertReqMessages.classPK     A |    +             Y org/bouncycastle/asn1/crmf/CertReqMsg.classPK     A _F<    ,             ^ org/bouncycastle/asn1/crmf/CertRequest.classPK     A _}  n  -             0b org/bouncycastle/asn1/crmf/CertTemplate.classPK     A ?h  P  4             h org/bouncycastle/asn1/crmf/CertTemplateBuilder.classPK     A ړ	V    )             ~l org/bouncycastle/asn1/crmf/Controls.classPK     A ՛3q    ,             +o org/bouncycastle/asn1/crmf/DhSigStatic.classPK     A ('  K  -             r org/bouncycastle/asn1/crmf/EncKeyWithID.classPK     A /F    -             xv org/bouncycastle/asn1/crmf/EncryptedKey.classPK     A &l  M
  /             y org/bouncycastle/asn1/crmf/EncryptedValue.classPK     A Wሹ    1             d~ org/bouncycastle/asn1/crmf/OptionalValidity.classPK     A r_|  	  2             | org/bouncycastle/asn1/crmf/PKIArchiveOptions.classPK     A @{    3             ҆ org/bouncycastle/asn1/crmf/PKIPublicationInfo.classPK     A X  (  +              org/bouncycastle/asn1/crmf/PKMACValue.classPK     A 0  	  ,             - org/bouncycastle/asn1/crmf/POPOPrivKey.classPK     A w  c
  /             F org/bouncycastle/asn1/crmf/POPOSigningKey.classPK     A 9u  	  4             1 org/bouncycastle/asn1/crmf/POPOSigningKeyInput.classPK     A 
    2              org/bouncycastle/asn1/crmf/ProofOfPossession.classPK     A d  b  .             d org/bouncycastle/asn1/crmf/SinglePubInfo.classPK     A  Hh  2  2             ԡ org/bouncycastle/asn1/crmf/SubsequentMessage.classPK
 
      A                           org/bouncycastle/asn1/cryptlib/PK     A cW  H  >             N org/bouncycastle/asn1/cryptlib/CryptlibObjectIdentifiers.classPK
 
      A                           org/bouncycastle/asn1/dvcs/PK     A Ra    -             J org/bouncycastle/asn1/dvcs/CertEtcToken.classPK     A f    -              org/bouncycastle/asn1/dvcs/DVCSCertInfo.classPK     A "1l    4              org/bouncycastle/asn1/dvcs/DVCSCertInfoBuilder.classPK     A 
   	  0             Ѻ org/bouncycastle/asn1/dvcs/DVCSErrorNotice.classPK     A Քj    6              org/bouncycastle/asn1/dvcs/DVCSObjectIdentifiers.classPK     A M+  ]  ,              org/bouncycastle/asn1/dvcs/DVCSRequest.classPK     A ?^    7              org/bouncycastle/asn1/dvcs/DVCSRequestInformation.classPK     A   z  >              org/bouncycastle/asn1/dvcs/DVCSRequestInformationBuilder.classPK     A $  f
  -              org/bouncycastle/asn1/dvcs/DVCSResponse.classPK     A (  s  )             c org/bouncycastle/asn1/dvcs/DVCSTime.classPK     A     %              org/bouncycastle/asn1/dvcs/Data.classPK     A bm  F  .              org/bouncycastle/asn1/dvcs/PathProcInput.classPK     A çy    ,              org/bouncycastle/asn1/dvcs/ServiceType.classPK     A 7    /             * org/bouncycastle/asn1/dvcs/TargetEtcChain.classPK
 
      A                          + org/bouncycastle/asn1/eac/PK     A S    0             c org/bouncycastle/asn1/eac/BidirectionalMap.classPK     A ~k  Y  -              org/bouncycastle/asn1/eac/CVCertificate.classPK     A c  $  4              org/bouncycastle/asn1/eac/CVCertificateRequest.classPK     A 7*}#
    /              org/bouncycastle/asn1/eac/CertificateBody.classPK     A h   @  >             
 org/bouncycastle/asn1/eac/CertificateHolderAuthorization.classPK     A ct  D  :              org/bouncycastle/asn1/eac/CertificateHolderReference.classPK     A Z   ;  ?             N org/bouncycastle/asn1/eac/CertificationAuthorityReference.classPK     A Im  D  4              org/bouncycastle/asn1/eac/EACObjectIdentifiers.classPK     A Ax<    )              org/bouncycastle/asn1/eac/EACTagged.classPK     A =?  	  '             G org/bouncycastle/asn1/eac/EACTags.classPK     A Oa    .             $ org/bouncycastle/asn1/eac/ECDSAPublicKey.classPK     A lGd    2             ^- org/bouncycastle/asn1/eac/Flags$StringJoiner.classPK     A ߅sq  5  %             V/ org/bouncycastle/asn1/eac/Flags.classPK     A V9    *             2 org/bouncycastle/asn1/eac/PackedDate.classPK     A t2=  ?  3             16 org/bouncycastle/asn1/eac/PublicKeyDataObject.classPK     A YZD  
  ,             r8 org/bouncycastle/asn1/eac/RSAPublicKey.classPK     A K    /             = org/bouncycastle/asn1/eac/UnsignedInteger.classPK
 
      A                          @ org/bouncycastle/asn1/edec/PK     A r    6             @ org/bouncycastle/asn1/edec/EdECObjectIdentifiers.classPK
 
      A                          B org/bouncycastle/asn1/esf/PK     A fs    8             C org/bouncycastle/asn1/esf/CommitmentTypeIdentifier.classPK     A 2*  o  8             D org/bouncycastle/asn1/esf/CommitmentTypeIndication.classPK     A L  j  7             G org/bouncycastle/asn1/esf/CommitmentTypeQualifier.classPK     A "(p­    6             J org/bouncycastle/asn1/esf/CompleteRevocationRefs.classPK     A HtF    -             M org/bouncycastle/asn1/esf/CrlIdentifier.classPK     A c!>!    )             Q org/bouncycastle/asn1/esf/CrlListID.classPK     A Γ  >
  *             T org/bouncycastle/asn1/esf/CrlOcspRef.classPK     A  l  J  .             TY org/bouncycastle/asn1/esf/CrlValidatedID.classPK     A wfܐ    -             ] org/bouncycastle/asn1/esf/ESFAttributes.classPK     A      .             ` org/bouncycastle/asn1/esf/OcspIdentifier.classPK     A ʏk.V  G  *             Wc org/bouncycastle/asn1/esf/OcspListID.classPK     A A%b  K  /             g org/bouncycastle/asn1/esf/OcspResponsesID.classPK     A [y  Z  )             j org/bouncycastle/asn1/esf/OtherHash.classPK     A  6    4             m org/bouncycastle/asn1/esf/OtherHashAlgAndValue.classPK     A ,57`    ,             Rq org/bouncycastle/asn1/esf/OtherRevRefs.classPK     A brN    ,             u org/bouncycastle/asn1/esf/OtherRevVals.classPK     A p`  
  0             x org/bouncycastle/asn1/esf/RevocationValues.classPK     A PT  	  ,             ~ org/bouncycastle/asn1/esf/SPUserNotice.classPK     A b"lp    %             Ȃ org/bouncycastle/asn1/esf/SPuri.classPK     A {  b  6              org/bouncycastle/asn1/esf/SigPolicyQualifierInfo.classPK     A YQ    3             j org/bouncycastle/asn1/esf/SigPolicyQualifiers.classPK     A :  q
  1             ω org/bouncycastle/asn1/esf/SignaturePolicyId.classPK     A R'"    9              org/bouncycastle/asn1/esf/SignaturePolicyIdentifier.classPK     A PU  
  /              org/bouncycastle/asn1/esf/SignerAttribute.classPK     A w%^*e  <  .              org/bouncycastle/asn1/esf/SignerLocation.classPK
 
      A                          G org/bouncycastle/asn1/ess/PK     A 4  g  ,              org/bouncycastle/asn1/ess/ContentHints.classPK     A :u  Y  1             
 org/bouncycastle/asn1/ess/ContentIdentifier.classPK     A R!  	  )             
 org/bouncycastle/asn1/ess/ESSCertID.classPK     A 2)    +             f org/bouncycastle/asn1/ess/ESSCertIDv2.classPK     A T?)V  
  +             y org/bouncycastle/asn1/ess/OtherCertID.classPK     A -dح    7             ( org/bouncycastle/asn1/ess/OtherSigningCertificate.classPK     A W~Nv    2             : org/bouncycastle/asn1/ess/SigningCertificate.classPK     A '  	  4             B org/bouncycastle/asn1/ess/SigningCertificateV2.classPK
 
      A                           org/bouncycastle/asn1/est/PK     A ȏ    )             ͼ org/bouncycastle/asn1/est/AttrOrOID.classPK     A ے  |  (              org/bouncycastle/asn1/est/CsrAttrs.classPK     A e     %              org/bouncycastle/asn1/est/Utils.classPK
 
      A                           org/bouncycastle/asn1/gnu/PK     A 	{<<    4             	 org/bouncycastle/asn1/gnu/GNUObjectIdentifiers.classPK
 
      A                           org/bouncycastle/asn1/iana/PK     A A  
  6              org/bouncycastle/asn1/iana/IANAObjectIdentifiers.classPK
 
      A                           org/bouncycastle/asn1/icao/PK     A /  /	  /             O org/bouncycastle/asn1/icao/CscaMasterList.classPK     A :    .              org/bouncycastle/asn1/icao/DataGroupHash.classPK     A hYB    6              org/bouncycastle/asn1/icao/ICAOObjectIdentifiers.classPK     A Ru    2              org/bouncycastle/asn1/icao/LDSSecurityObject.classPK     A Ҟ    /              org/bouncycastle/asn1/icao/LDSVersionInfo.classPK
 
      A                           org/bouncycastle/asn1/isara/PK     A S    8              org/bouncycastle/asn1/isara/IsaraObjectIdentifiers.classPK
 
      A                           org/bouncycastle/asn1/isismtt/PK     A &    <              org/bouncycastle/asn1/isismtt/ISISMTTObjectIdentifiers.classPK
 
      A             #             Z org/bouncycastle/asn1/isismtt/ocsp/PK     A ޫG    1              org/bouncycastle/asn1/isismtt/ocsp/CertHash.classPK     A 8  m  =              org/bouncycastle/asn1/isismtt/ocsp/RequestedCertificate.classPK
 
      A             #             M org/bouncycastle/asn1/isismtt/x509/PK     A N6    D              org/bouncycastle/asn1/isismtt/x509/AdditionalInformationSyntax.classPK     A L;D  
  8              org/bouncycastle/asn1/isismtt/x509/AdmissionSyntax.classPK     A MQ  
  3             c org/bouncycastle/asn1/isismtt/x509/Admissions.classPK     A     >              org/bouncycastle/asn1/isismtt/x509/DeclarationOfMajority.classPK     A 6    6             e org/bouncycastle/asn1/isismtt/x509/MonetaryLimit.classPK     A ,xe  
  8              org/bouncycastle/asn1/isismtt/x509/NamingAuthority.classPK     A ,    :             n org/bouncycastle/asn1/isismtt/x509/ProcurationSyntax.classPK     A X  &  7              org/bouncycastle/asn1/isismtt/x509/ProfessionInfo.classPK     A *氥  {  4              org/bouncycastle/asn1/isismtt/x509/Restriction.classPK
 
      A                           org/bouncycastle/asn1/iso/PK     A [  7  7             
 org/bouncycastle/asn1/iso/ISOIECObjectIdentifiers.classPK
 
      A                          R  org/bouncycastle/asn1/kisa/PK     A NUf  L  6               org/bouncycastle/asn1/kisa/KISAObjectIdentifiers.classPK
 
      A                           U" org/bouncycastle/asn1/microsoft/PK     A wĿ  ?  @             " org/bouncycastle/asn1/microsoft/MicrosoftObjectIdentifiers.classPK
 
      A                          $ org/bouncycastle/asn1/misc/PK     A >  y  3             $ org/bouncycastle/asn1/misc/CAST5CBCParameters.classPK     A ݑ\  D  +             ' org/bouncycastle/asn1/misc/IDEACBCPar.classPK     A Jc
	  3  6             * org/bouncycastle/asn1/misc/MiscObjectIdentifiers.classPK     A Tbtc  R  1             5 org/bouncycastle/asn1/misc/NetscapeCertType.classPK     A 5=  $  6             7 org/bouncycastle/asn1/misc/NetscapeRevocationURL.classPK     A c  
  -             {9 org/bouncycastle/asn1/misc/ScryptParams.classPK     A $*<  $  6             p> org/bouncycastle/asn1/misc/VerisignCzagExtension.classPK
 
      A                          @ org/bouncycastle/asn1/mod/PK     A HG5    4             H@ org/bouncycastle/asn1/mod/ModObjectIdentifiers.classPK
 
      A                          A org/bouncycastle/asn1/mozilla/PK     A _  k  9             B org/bouncycastle/asn1/mozilla/PublicKeyAndChallenge.classPK     A O  $  ?             E org/bouncycastle/asn1/mozilla/SignedPublicKeyAndChallenge.classPK
 
      A                          G org/bouncycastle/asn1/nsri/PK     A p,Y  r	  6             H org/bouncycastle/asn1/nsri/NSRIObjectIdentifiers.classPK
 
      A                          hL org/bouncycastle/asn1/ntt/PK     A *7s    4             L org/bouncycastle/asn1/ntt/NTTObjectIdentifiers.classPK
 
      A                          uN org/bouncycastle/asn1/oiw/PK     A Y    0             N org/bouncycastle/asn1/oiw/ElGamalParameter.classPK     A `"    4             dQ org/bouncycastle/asn1/oiw/OIWObjectIdentifiers.classPK
 
      A             "             S org/bouncycastle/asn1/rosstandart/PK     A :    D             T org/bouncycastle/asn1/rosstandart/RosstandartObjectIdentifiers.classPK
 
      A                          bW org/bouncycastle/asn1/smime/PK     A ?4    1             W org/bouncycastle/asn1/smime/SMIMEAttributes.classPK     A inYL  L  3             Y org/bouncycastle/asn1/smime/SMIMECapabilities.classPK     A SxyS    <             ^ org/bouncycastle/asn1/smime/SMIMECapabilitiesAttribute.classPK     A 4    1             v` org/bouncycastle/asn1/smime/SMIMECapability.classPK     A c@    7             d org/bouncycastle/asn1/smime/SMIMECapabilityVector.classPK     A <)n  [  G             f org/bouncycastle/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.classPK
 
      A                          h org/bouncycastle/asn1/tsp/PK     A SL  	  (             h org/bouncycastle/asn1/tsp/Accuracy.classPK     A 5ٖ  B  0             m org/bouncycastle/asn1/tsp/ArchiveTimeStamp.classPK     A epB    5             u org/bouncycastle/asn1/tsp/ArchiveTimeStampChain.classPK     A GN4N  H  8             Wy org/bouncycastle/asn1/tsp/ArchiveTimeStampSequence.classPK     A .)*_    +             } org/bouncycastle/asn1/tsp/CryptoInfos.classPK     A m-  |  .              org/bouncycastle/asn1/tsp/EncryptionInfo.classPK     A ]h    .             L org/bouncycastle/asn1/tsp/EvidenceRecord.classPK     A ʷ;  3  .              org/bouncycastle/asn1/tsp/MessageImprint.classPK     A S'k  >	  /              org/bouncycastle/asn1/tsp/PartialHashtree.classPK     A hK    '             
 org/bouncycastle/asn1/tsp/TSTInfo.classPK     A 9B9O  
  ,              org/bouncycastle/asn1/tsp/TimeStampReq.classPK     A |de    -              org/bouncycastle/asn1/tsp/TimeStampResp.classPK
 
      A                          Ѥ org/bouncycastle/oer/PK     A NSx  '  %              org/bouncycastle/oer/BitBuilder.classPK     A Jyw    2             ϩ org/bouncycastle/oer/DeferredElementSupplier.classPK     A 
  "  "              org/bouncycastle/oer/Element.classPK     A Dpun      *              org/bouncycastle/oer/ElementSupplier.classPK     A ϰd    %             ~ org/bouncycastle/oer/OERDecoder.classPK     A r.  F  1             5 org/bouncycastle/oer/OERDefinition$BaseType.classPK     A R    2              org/bouncycastle/oer/OERDefinition$Builder$1.classPK     A 	e    2              org/bouncycastle/oer/OERDefinition$Builder$2.classPK     A   !  0              org/bouncycastle/oer/OERDefinition$Builder.classPK     A 5    6              org/bouncycastle/oer/OERDefinition$ExtensionList.classPK     A b   q  5              org/bouncycastle/oer/OERDefinition$ItemProvider.classPK     A     7              org/bouncycastle/oer/OERDefinition$MutableBuilder.classPK     A ,    5              org/bouncycastle/oer/OERDefinition$OptionalList.classPK     A R3  I  (              org/bouncycastle/oer/OERDefinition.classPK     A J<    %              org/bouncycastle/oer/OEREncoder.classPK     A rL  V  +              org/bouncycastle/oer/OERInputStream$1.classPK     A Ԇc    0             L org/bouncycastle/oer/OERInputStream$Choice.classPK     A ?t  p  4             
 org/bouncycastle/oer/OERInputStream$LengthInfo.classPK     A =&  	  2              org/bouncycastle/oer/OERInputStream$Sequence.classPK     A ױj  m0  )             i org/bouncycastle/oer/OERInputStream.classPK     A =c    (             c org/bouncycastle/oer/OEROptional$1.classPK     A Ԡ  Q
  &             
 org/bouncycastle/oer/OEROptional.classPK     A k_  +  ,              org/bouncycastle/oer/OEROutputStream$1.classPK     A JeC  ^(  *              org/bouncycastle/oer/OEROutputStream.classPK     A        !             Z% org/bouncycastle/oer/Switch.classPK     A gK
    C             I& org/bouncycastle/oer/SwitchIndexer$Asn1EncodableVectorIndexer.classPK     A Ċ
    <             ' org/bouncycastle/oer/SwitchIndexer$Asn1SequenceIndexer.classPK     A I     :             E) org/bouncycastle/oer/SwitchIndexer$FixedValueIndexer.classPK     A adR    (             * org/bouncycastle/oer/SwitchIndexer.classPK
 
      A                          
, org/bouncycastle/oer/its/PK     A !W?  @  )             D, org/bouncycastle/oer/its/ItsUtils$1.classPK     A l    '             ;0 org/bouncycastle/oer/its/ItsUtils.classPK
 
      A             $             z3 org/bouncycastle/oer/its/etsi102941/PK     A "RG|    9             3 org/bouncycastle/oer/its/etsi102941/AaEntry$Builder.classPK     A  "U    1             5 org/bouncycastle/oer/its/etsi102941/AaEntry.classPK     A oj    E             9 org/bouncycastle/oer/its/etsi102941/AuthorizationRequestMessage.classPK     A p    L             : org/bouncycastle/oer/its/etsi102941/AuthorizationRequestMessageWithPop.classPK     A }ű  
  C             < org/bouncycastle/oer/its/etsi102941/AuthorizationResponseCode.classPK     A qbj    F             B org/bouncycastle/oer/its/etsi102941/AuthorizationResponseMessage.classPK     A (  |  P             C org/bouncycastle/oer/its/etsi102941/AuthorizationValidationRequest$Builder.classPK     A Q)  w  H             E org/bouncycastle/oer/its/etsi102941/AuthorizationValidationRequest.classPK     A .w    O             I org/bouncycastle/oer/its/etsi102941/AuthorizationValidationRequestMessage.classPK     A i>  !  Q             K org/bouncycastle/oer/its/etsi102941/AuthorizationValidationResponse$Builder.classPK     A !  
  I             ?N org/bouncycastle/oer/its/etsi102941/AuthorizationValidationResponse.classPK     A     M             uR org/bouncycastle/oer/its/etsi102941/AuthorizationValidationResponseCode.classPK     A MYv    P             V org/bouncycastle/oer/its/etsi102941/AuthorizationValidationResponseMessage.classPK     A e    F             X org/bouncycastle/oer/its/etsi102941/CaCertificateRekeyingMessage.classPK     A 5t    F             Z org/bouncycastle/oer/its/etsi102941/CaCertificateRequest$Builder.classPK     A 鎚/    >             \ org/bouncycastle/oer/its/etsi102941/CaCertificateRequest.classPK     A [IQc    E             %` org/bouncycastle/oer/its/etsi102941/CaCertificateRequestMessage.classPK     A 
1ҹf    J             a org/bouncycastle/oer/its/etsi102941/CertificateRevocationListMessage.classPK     A 2Yd|    2             c org/bouncycastle/oer/its/etsi102941/CrlEntry.classPK     A ,X  c  4             f org/bouncycastle/oer/its/etsi102941/CtlCommand.classPK     A \0tz    3             i org/bouncycastle/oer/its/etsi102941/CtlDelete.classPK     A B'    2             m org/bouncycastle/oer/its/etsi102941/CtlEntry.classPK     A I    ;             q org/bouncycastle/oer/its/etsi102941/CtlFormat$Builder.classPK     A t5    3             v org/bouncycastle/oer/its/etsi102941/CtlFormat.classPK     A 6=  R  2             z org/bouncycastle/oer/its/etsi102941/DcDelete.classPK     A F W    9             | org/bouncycastle/oer/its/etsi102941/DcEntry$Builder.classPK     A ?B"!    1             ~ org/bouncycastle/oer/its/etsi102941/DcEntry.classPK     A D  w  2              org/bouncycastle/oer/its/etsi102941/DeltaCtl.classPK     A qX  Y  9             ; org/bouncycastle/oer/its/etsi102941/EaEntry$Builder.classPK     A 6  @	  1             ? org/bouncycastle/oer/its/etsi102941/EaEntry.classPK     A &G-Nm    A             ) org/bouncycastle/oer/its/etsi102941/EnrolmentRequestMessage.classPK     A 
    ?              org/bouncycastle/oer/its/etsi102941/EnrolmentResponseCode.classPK     A [o    B             * org/bouncycastle/oer/its/etsi102941/EnrolmentResponseMessage.classPK     A z     :             	 org/bouncycastle/oer/its/etsi102941/EtsiTs102941Data.classPK     A k    A             q org/bouncycastle/oer/its/etsi102941/EtsiTs102941DataContent.classPK     A   /  1             ƚ org/bouncycastle/oer/its/etsi102941/FillCtl.classPK     A F!  /  1              org/bouncycastle/oer/its/etsi102941/FullCtl.classPK     A 	9P  P  @              org/bouncycastle/oer/its/etsi102941/InnerAtRequest$Builder.classPK     A /g  =  8             ] org/bouncycastle/oer/its/etsi102941/InnerAtRequest.classPK     A n4+  8  A              org/bouncycastle/oer/its/etsi102941/InnerAtResponse$Builder.classPK     A W)P  +
  9             & org/bouncycastle/oer/its/etsi102941/InnerAtResponse.classPK     A [c    @             6 org/bouncycastle/oer/its/etsi102941/InnerEcRequest$Builder.classPK     A Z$    8              org/bouncycastle/oer/its/etsi102941/InnerEcRequest.classPK     A !a    D             D org/bouncycastle/oer/its/etsi102941/InnerEcRequestSignedForPop.classPK     A Bk$  ,  A              org/bouncycastle/oer/its/etsi102941/InnerEcResponse$Builder.classPK     A ǖ  
  9              org/bouncycastle/oer/its/etsi102941/InnerEcResponse.classPK     A We    H              org/bouncycastle/oer/its/etsi102941/RcaCertificateTrustListMessage.classPK     A nki    O              org/bouncycastle/oer/its/etsi102941/RcaDoubleSignedLinkCertificateMessage.classPK     A KJi    O             z org/bouncycastle/oer/its/etsi102941/RcaSingleSignedLinkCertificateMessage.classPK     A uUu  o  =             ` org/bouncycastle/oer/its/etsi102941/RootCaEntry$Builder.classPK     A o<    5             @ org/bouncycastle/oer/its/etsi102941/RootCaEntry.classPK     A 5{    D              org/bouncycastle/oer/its/etsi102941/SequenceOfCrlEntry$Builder.classPK     A `SP    <              org/bouncycastle/oer/its/etsi102941/SequenceOfCrlEntry.classPK     A 5    F              org/bouncycastle/oer/its/etsi102941/SequenceOfCtlCommand$Builder.classPK     A "xT    >              org/bouncycastle/oer/its/etsi102941/SequenceOfCtlCommand.classPK     A P    A              org/bouncycastle/oer/its/etsi102941/SharedAtRequest$Builder.classPK     A H    9              org/bouncycastle/oer/its/etsi102941/SharedAtRequest.classPK     A 6e    H              org/bouncycastle/oer/its/etsi102941/TlmCertificateTrustListMessage.classPK     A })x)    :              org/bouncycastle/oer/its/etsi102941/TlmEntry$Builder.classPK     A =mGЛ  d	  2              org/bouncycastle/oer/its/etsi102941/TlmEntry.classPK     A fc    C              org/bouncycastle/oer/its/etsi102941/TlmLinkCertificateMessage.classPK     A ,    ?              org/bouncycastle/oer/its/etsi102941/ToBeSignedCrl$Builder.classPK     A Ư  `
  7              org/bouncycastle/oer/its/etsi102941/ToBeSignedCrl.classPK     A 6 oB    K              org/bouncycastle/oer/its/etsi102941/ToBeSignedLinkCertificate$Builder.classPK     A m:  C  C             U org/bouncycastle/oer/its/etsi102941/ToBeSignedLinkCertificate.classPK     A o    F               org/bouncycastle/oer/its/etsi102941/ToBeSignedLinkCertificateRca.classPK     A dR    F             C org/bouncycastle/oer/its/etsi102941/ToBeSignedLinkCertificateTlm.classPK     A s_  A  :              org/bouncycastle/oer/its/etsi102941/ToBeSignedRcaCtl.classPK     A WN  A  :              org/bouncycastle/oer/its/etsi102941/ToBeSignedTlmCtl.classPK     A 7m  H  -              org/bouncycastle/oer/its/etsi102941/Url.classPK
 
      A             .              org/bouncycastle/oer/its/etsi102941/basetypes/PK     A *    E              org/bouncycastle/oer/its/etsi102941/basetypes/CertificateFormat.classPK     A 6b]  
  P             _ org/bouncycastle/oer/its/etsi102941/basetypes/CertificateSubjectAttributes.classPK     A kB";]    ?             : org/bouncycastle/oer/its/etsi102941/basetypes/EcSignature.classPK     A ?(  R  >              org/bouncycastle/oer/its/etsi102941/basetypes/PublicKeys.classPK     A n-E  (  ;             	 org/bouncycastle/oer/its/etsi102941/basetypes/Version.classPK
 
      A             $              org/bouncycastle/oer/its/etsi103097/PK     A ",+  =  A             C org/bouncycastle/oer/its/etsi103097/EtsiTs103097Certificate.classPK     A   i  :             > org/bouncycastle/oer/its/etsi103097/EtsiTs103097Data.classPK     A oQ    C             5 org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataEncrypted.classPK     A ^k\    J              org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataEncryptedUnicast.classPK     A 7mMN    @              org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataSigned.classPK     A 7X    L              org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataSignedAndEncrypted.classPK     A 
+[    S             Y org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataSignedAndEncryptedUnicast.classPK     A \[    O             5 org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataSignedExternalPayload.classPK     A <.pP    G             
 org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataSignedUnicast.classPK     A <դQ    C              org/bouncycastle/oer/its/etsi103097/EtsiTs103097DataUnsecured.classPK
 
      A             .              org/bouncycastle/oer/its/etsi103097/extension/PK     A x
    ^              org/bouncycastle/oer/its/etsi103097/extension/EtsiOriginatingHeaderInfoExtension$Builder.classPK     A KwF    V             r! org/bouncycastle/oer/its/etsi103097/extension/EtsiOriginatingHeaderInfoExtension.classPK     A     R             <$ org/bouncycastle/oer/its/etsi103097/extension/EtsiTs102941CrlRequest$Builder.classPK     A ʼ  	  J             c& org/bouncycastle/oer/its/etsi103097/extension/EtsiTs102941CrlRequest.classPK     A '
_  >  R             `* org/bouncycastle/oer/its/etsi103097/extension/EtsiTs102941CtlRequest$Builder.classPK     A ]?e    J             , org/bouncycastle/oer/its/etsi103097/extension/EtsiTs102941CtlRequest.classPK     A `    O             0 org/bouncycastle/oer/its/etsi103097/extension/EtsiTs102941DeltaCtlRequest.classPK     A \    9             2 org/bouncycastle/oer/its/etsi103097/extension/ExtId.classPK     A Q  i  =             p6 org/bouncycastle/oer/its/etsi103097/extension/Extension.classPK
 
      A             &             : org/bouncycastle/oer/its/ieee1609dot2/PK     A BQ  &  D             +; org/bouncycastle/oer/its/ieee1609dot2/AesCcmCiphertext$Builder.classPK     A c63    <             = org/bouncycastle/oer/its/ieee1609dot2/AesCcmCiphertext.classPK     A @T  ~  7             =A org/bouncycastle/oer/its/ieee1609dot2/Certificate.classPK     A |+?    C             C org/bouncycastle/oer/its/ieee1609dot2/CertificateBase$Builder.classPK     A lmJ  
  ;             F org/bouncycastle/oer/its/ieee1609dot2/CertificateBase.classPK     A `VvE    9             K org/bouncycastle/oer/its/ieee1609dot2/CertificateId.classPK     A %w  {  ;             =P org/bouncycastle/oer/its/ieee1609dot2/CertificateType.classPK     A   
  E             cS org/bouncycastle/oer/its/ieee1609dot2/ContributedExtensionBlock.classPK     A V    N             W org/bouncycastle/oer/its/ieee1609dot2/ContributedExtensionBlocks$Builder.classPK     A w    F             Z org/bouncycastle/oer/its/ieee1609dot2/ContributedExtensionBlocks.classPK     A nC]    <             ^ org/bouncycastle/oer/its/ieee1609dot2/CounterSignature.classPK     A /  2  A             _ org/bouncycastle/oer/its/ieee1609dot2/EncryptedData$Builder.classPK     A 3HɎ&    9             a org/bouncycastle/oer/its/ieee1609dot2/EncryptedData.classPK     A k`bq  ,  F             Qe org/bouncycastle/oer/its/ieee1609dot2/EncryptedDataEncryptionKey.classPK     A  7j    9             6i org/bouncycastle/oer/its/ieee1609dot2/EndEntityType.classPK     A 6»    ?             tk org/bouncycastle/oer/its/ieee1609dot2/ExplicitCertificate.classPK     A      6             n org/bouncycastle/oer/its/ieee1609dot2/HashedData.classPK     A PG  u  >             r org/bouncycastle/oer/its/ieee1609dot2/HeaderInfo$Builder.classPK     A y1S    6             v org/bouncycastle/oer/its/ieee1609dot2/HeaderInfo.classPK     A +x    C             e} org/bouncycastle/oer/its/ieee1609dot2/HeaderInfoContributorId.classPK     A m1*    ?             ۀ org/bouncycastle/oer/its/ieee1609dot2/Ieee1609Dot2Content.classPK     A *  
  D             r org/bouncycastle/oer/its/ieee1609dot2/Ieee1609Dot2Data$Builder.classPK     A 
R    <              org/bouncycastle/oer/its/ieee1609dot2/Ieee1609Dot2Data.classPK     A <    ?             ʌ org/bouncycastle/oer/its/ieee1609dot2/ImplicitCertificate.classPK     A W  	  <              org/bouncycastle/oer/its/ieee1609dot2/IssuerIdentifier.classPK     A ި    ?             2 org/bouncycastle/oer/its/ieee1609dot2/LinkageData$Builder.classPK     A )  
  7             G org/bouncycastle/oer/its/ieee1609dot2/LinkageData.classPK     A Z  H  H             H org/bouncycastle/oer/its/ieee1609dot2/MissingCrlIdentifier$Builder.classPK     A +$    @             > org/bouncycastle/oer/its/ieee1609dot2/MissingCrlIdentifier.classPK     A [  C  4             П org/bouncycastle/oer/its/ieee1609dot2/Opaque$1.classPK     A #    2              org/bouncycastle/oer/its/ieee1609dot2/Opaque.classPK     A ךߏ  A  C              org/bouncycastle/oer/its/ieee1609dot2/PKRecipientInfo$Builder.classPK     A [Cx1    ;              org/bouncycastle/oer/its/ieee1609dot2/PKRecipientInfo.classPK     A iȤ  ?  =             | org/bouncycastle/oer/its/ieee1609dot2/PduFunctionalType.classPK     A KBz    E             f org/bouncycastle/oer/its/ieee1609dot2/PreSharedKeyRecipientInfo.classPK     A 2 M  ~  H             S org/bouncycastle/oer/its/ieee1609dot2/PsidGroupPermissions$Builder.classPK     A xq  \
  @              org/bouncycastle/oer/its/ieee1609dot2/PsidGroupPermissions.classPK     A :%  
  9             U org/bouncycastle/oer/its/ieee1609dot2/RecipientInfo.classPK     A Ž    I              org/bouncycastle/oer/its/ieee1609dot2/SequenceOfCertificate$Builder.classPK     A ('    A              org/bouncycastle/oer/its/ieee1609dot2/SequenceOfCertificate.classPK     A @T  \  R             h org/bouncycastle/oer/its/ieee1609dot2/SequenceOfPsidGroupPermissions$Builder.classPK     A \8R  f  J              org/bouncycastle/oer/its/ieee1609dot2/SequenceOfPsidGroupPermissions.classPK     A ԕ  '  K              org/bouncycastle/oer/its/ieee1609dot2/SequenceOfRecipientInfo$Builder.classPK     A zULv  U  C             5 org/bouncycastle/oer/its/ieee1609dot2/SequenceOfRecipientInfo.classPK     A   ~  >              org/bouncycastle/oer/its/ieee1609dot2/SignedData$Builder.classPK     A )    6             s org/bouncycastle/oer/its/ieee1609dot2/SignedData.classPK     A {    E              org/bouncycastle/oer/its/ieee1609dot2/SignedDataPayload$Builder.classPK     A >;  3  =              org/bouncycastle/oer/its/ieee1609dot2/SignedDataPayload.classPK     A >	  
  <             E org/bouncycastle/oer/its/ieee1609dot2/SignerIdentifier.classPK     A &G   	  >              org/bouncycastle/oer/its/ieee1609dot2/SubjectPermissions.classPK     A vU  8  E              org/bouncycastle/oer/its/ieee1609dot2/SymmRecipientInfo$Builder.classPK     A b)    =              org/bouncycastle/oer/its/ieee1609dot2/SymmRecipientInfo.classPK     A c9    ?             C org/bouncycastle/oer/its/ieee1609dot2/SymmetricCiphertext.classPK     A XL8    I              org/bouncycastle/oer/its/ieee1609dot2/ToBeSignedCertificate$Builder.classPK     A aڪ     A              org/bouncycastle/oer/its/ieee1609dot2/ToBeSignedCertificate.classPK     A P̀w    B              org/bouncycastle/oer/its/ieee1609dot2/ToBeSignedData$Builder.classPK     A WZ    :             n org/bouncycastle/oer/its/ieee1609dot2/ToBeSignedData.classPK     A BԠ  e	  D               org/bouncycastle/oer/its/ieee1609dot2/VerificationKeyIndicator.classPK
 
      A             0              org/bouncycastle/oer/its/ieee1609dot2/basetypes/PK     A .4^    U             L org/bouncycastle/oer/its/ieee1609dot2/basetypes/BasePublicEncryptionKey$Builder.classPK     A x    M             e org/bouncycastle/oer/its/ieee1609dot2/basetypes/BasePublicEncryptionKey.classPK     A h/G    ?             t org/bouncycastle/oer/its/ieee1609dot2/basetypes/BitmapSsp.classPK     A   b  L             
 org/bouncycastle/oer/its/ieee1609dot2/basetypes/BitmapSspRange$Builder.classPK     A t  B  D              org/bouncycastle/oer/its/ieee1609dot2/basetypes/BitmapSspRange.classPK     A х  N  L              org/bouncycastle/oer/its/ieee1609dot2/basetypes/CircularRegion$Builder.classPK     A ~׉;    D              org/bouncycastle/oer/its/ieee1609dot2/basetypes/CircularRegion.classPK     A N    O             K org/bouncycastle/oer/its/ieee1609dot2/basetypes/CountryAndRegions$Builder.classPK     A Io?  	  G             T org/bouncycastle/oer/its/ieee1609dot2/basetypes/CountryAndRegions.classPK     A lET    R              org/bouncycastle/oer/its/ieee1609dot2/basetypes/CountryAndSubregions$Builder.classPK     A &  	  J             ! org/bouncycastle/oer/its/ieee1609dot2/basetypes/CountryAndSubregions.classPK     A r    A             $ org/bouncycastle/oer/its/ieee1609dot2/basetypes/CountryOnly.classPK     A 0S_]  o  ?             & org/bouncycastle/oer/its/ieee1609dot2/basetypes/CrlSeries.classPK     A gO  "  >             Z( org/bouncycastle/oer/its/ieee1609dot2/basetypes/Duration.classPK     A D׾      C             - org/bouncycastle/oer/its/ieee1609dot2/basetypes/EccCurvePoint.classPK     A F  l  G             . org/bouncycastle/oer/its/ieee1609dot2/basetypes/EccP256CurvePoint.classPK     A Nm  O  G             x6 org/bouncycastle/oer/its/ieee1609dot2/basetypes/EccP384CurvePoint.classPK     A %c  1  P             < org/bouncycastle/oer/its/ieee1609dot2/basetypes/EcdsaP256Signature$Builder.classPK     A u  a  H             > org/bouncycastle/oer/its/ieee1609dot2/basetypes/EcdsaP256Signature.classPK     A   :  P             B org/bouncycastle/oer/its/ieee1609dot2/basetypes/EcdsaP384Signature$Builder.classPK     A '   a  H             D org/bouncycastle/oer/its/ieee1609dot2/basetypes/EcdsaP384Signature.classPK     A CO    S             H org/bouncycastle/oer/its/ieee1609dot2/basetypes/EciesP256EncryptedKey$Builder.classPK     A \-fD    K             K org/bouncycastle/oer/its/ieee1609dot2/basetypes/EciesP256EncryptedKey.classPK     A >X  D  ?             N org/bouncycastle/oer/its/ieee1609dot2/basetypes/Elevation.classPK     A ̝jH    C             P org/bouncycastle/oer/its/ieee1609dot2/basetypes/EncryptionKey.classPK     A BM    F             T org/bouncycastle/oer/its/ieee1609dot2/basetypes/GeographicRegion.classPK     A V  x  O             Y org/bouncycastle/oer/its/ieee1609dot2/basetypes/GroupLinkageValue$Builder.classPK     A  z0r    G             j[ org/bouncycastle/oer/its/ieee1609dot2/basetypes/GroupLinkageValue.classPK     A     C             Q_ org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashAlgorithm.classPK     A %%.  L  >             b org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashedId.classPK     A jG    @             e org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashedId10.classPK     A e!    ?             "g org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashedId3.classPK     A y    @             5i org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashedId32.classPK     A #    ?             Mk org/bouncycastle/oer/its/ieee1609dot2/basetypes/HashedId8.classPK     A G    >             bm org/bouncycastle/oer/its/ieee1609dot2/basetypes/Hostname.classPK     A dL!1    <             o org/bouncycastle/oer/its/ieee1609dot2/basetypes/IValue.classPK     A 1qw    F             <r org/bouncycastle/oer/its/ieee1609dot2/basetypes/IdentifiedRegion.classPK     A hj    C             v org/bouncycastle/oer/its/ieee1609dot2/basetypes/KnownLatitude.classPK     A rX|    D             x org/bouncycastle/oer/its/ieee1609dot2/basetypes/KnownLongitude.classPK     A E:T  6  :             oz org/bouncycastle/oer/its/ieee1609dot2/basetypes/LaId.classPK     A @z    >             +} org/bouncycastle/oer/its/ieee1609dot2/basetypes/Latitude.classPK     A h#K  +  A              org/bouncycastle/oer/its/ieee1609dot2/basetypes/LinkageSeed.classPK     A zÁ    B             с org/bouncycastle/oer/its/ieee1609dot2/basetypes/LinkageValue.classPK     A fI    ?              org/bouncycastle/oer/its/ieee1609dot2/basetypes/Longitude.classPK     A     E              org/bouncycastle/oer/its/ieee1609dot2/basetypes/NinetyDegreeInt.classPK     A 3Nq5  a  H             > org/bouncycastle/oer/its/ieee1609dot2/basetypes/OneEightyDegreeInt.classPK     A 清>	    F              org/bouncycastle/oer/its/ieee1609dot2/basetypes/Point256$Builder.classPK     A iK  ~  >             f org/bouncycastle/oer/its/ieee1609dot2/basetypes/Point256.classPK     A Ϗ    F              org/bouncycastle/oer/its/ieee1609dot2/basetypes/Point384$Builder.classPK     A -O/8  t  >              org/bouncycastle/oer/its/ieee1609dot2/basetypes/Point384.classPK     A LP    M             / org/bouncycastle/oer/its/ieee1609dot2/basetypes/PolygonalRegion$Builder.classPK     A 7    E              org/bouncycastle/oer/its/ieee1609dot2/basetypes/PolygonalRegion.classPK     A 2&=C  
  :             * org/bouncycastle/oer/its/ieee1609dot2/basetypes/Psid.classPK     A B.}  >  E             ա org/bouncycastle/oer/its/ieee1609dot2/basetypes/PsidSsp$Builder.classPK     A Ů;d\    =             ţ org/bouncycastle/oer/its/ieee1609dot2/basetypes/PsidSsp.classPK     A K    J              org/bouncycastle/oer/its/ieee1609dot2/basetypes/PsidSspRange$Builder.classPK     A |g|";    B              org/bouncycastle/oer/its/ieee1609dot2/basetypes/PsidSspRange.classPK     A g    Q             G org/bouncycastle/oer/its/ieee1609dot2/basetypes/PublicEncryptionKey$Builder.classPK     A 7c<n4  	  I             Y org/bouncycastle/oer/its/ieee1609dot2/basetypes/PublicEncryptionKey.classPK     A   ?  S              org/bouncycastle/oer/its/ieee1609dot2/basetypes/PublicVerificationKey$Builder.classPK     A l	r  
  K              org/bouncycastle/oer/its/ieee1609dot2/basetypes/PublicVerificationKey.classPK     A s    O              org/bouncycastle/oer/its/ieee1609dot2/basetypes/RectangularRegion$Builder.classPK     A :    G              org/bouncycastle/oer/its/ieee1609dot2/basetypes/RectangularRegion.classPK     A W< ӊ  }  Q             s org/bouncycastle/oer/its/ieee1609dot2/basetypes/RegionAndSubregions$Builder.classPK     A YD:  	  I             | org/bouncycastle/oer/its/ieee1609dot2/basetypes/RegionAndSubregions.classPK     A }Ipm   s   E             - org/bouncycastle/oer/its/ieee1609dot2/basetypes/RegionInterface.classPK     A H    Q             
 org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfHashedId3$Builder.classPK     A S&c  t  I             Z org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfHashedId3.classPK     A ntԱ    Q             4 org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfHashedId8$Builder.classPK     A @c  t  I              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfHashedId8.classPK     A @݋    P             [ org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfIdentifiedRegion.classPK     A [+:N    K              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfOctetString.classPK     A G]?	    L             | org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsid$Builder.classPK     A K     D              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsid.classPK     A X
    O              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsidSsp$Builder.classPK     A O8"    G              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsidSsp.classPK     A ӶYX    T              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsidSspRange$Builder.classPK     A }N    L              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfPsidSspRange.classPK     A >{*    Q              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfRectangularRegion.classPK     A   /  S             S org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfRegionAndSubregions.classPK     A     N              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfUint16$Builder.classPK     A Q\^  S  F              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfUint16.classPK     A ܢ\    M              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfUint8$Builder.classPK     A q  f  E              org/bouncycastle/oer/its/ieee1609dot2/basetypes/SequenceOfUint8.classPK     A s'  	  P              org/bouncycastle/oer/its/ieee1609dot2/basetypes/ServiceSpecificPermissions.classPK     A 〙  	  ?             L	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/Signature.classPK     A =    >             R	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/SspRange.classPK     A %    F             P	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/SubjectAssurance.classPK     A ^Wo  [  C             
	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/SymmAlgorithm.classPK     A ]lT  z  L             	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/SymmetricEncryptionKey.classPK     A &&:N    L             	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/ThreeDLocation$Builder.classPK     A h  &
  D             	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/ThreeDLocation.classPK     A MJҝ  W  <             	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/Time32.classPK     A <}    <             	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/Time64.classPK     A .y  I  J              	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/TwoDLocation$Builder.classPK     A   f  B             "	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/TwoDLocation.classPK     A 1    <             I&	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/UINT16.classPK     A 9T[    ;             )	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/UINT3.classPK     A pl    <             ,	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/UINT32.classPK     A WI  o  <             0	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/UINT64.classPK     A  u    ;             <3	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/UINT8.classPK     A >Z    >             }6	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/UintBase.classPK     A hb    E             8	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/UnknownLatitude.classPK     A j&Y    F             ^;	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/UnknownLongitude.classPK     A B~  D  L             +>	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/ValidityPeriod$Builder.classPK     A ii  	  D             #@	 org/bouncycastle/oer/its/ieee1609dot2/basetypes/ValidityPeriod.classPK
 
      A             *             (D	 org/bouncycastle/oer/its/ieee1609dot2dot1/PK     A sZ    @             pD	 org/bouncycastle/oer/its/ieee1609dot2dot1/AdditionalParams.classPK     A Љ  S  B             H	 org/bouncycastle/oer/its/ieee1609dot2dot1/ButterflyExpansion.classPK     A h`s  S  O             L	 org/bouncycastle/oer/its/ieee1609dot2dot1/ButterflyParamsOriginal$Builder.classPK     A Bʨj  	  G             .O	 org/bouncycastle/oer/its/ieee1609dot2dot1/ButterflyParamsOriginal.classPK     A ʾ}    H             
S	 org/bouncycastle/oer/its/ieee1609dot2dot1/EeEcaCertRequest$Builder.classPK     A Uf  
  @              V	 org/bouncycastle/oer/its/ieee1609dot2dot1/EeEcaCertRequest.classPK     A p2<    G             Z	 org/bouncycastle/oer/its/ieee1609dot2dot1/EeRaCertRequest$Builder.classPK     A uZg  
  ?             ]	 org/bouncycastle/oer/its/ieee1609dot2dot1/EeRaCertRequest.classPK
 
      A             "             Yb	 org/bouncycastle/oer/its/template/PK
 
      A             -             b	 org/bouncycastle/oer/its/template/etsi102941/PK     A b@  
  I             b	 org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941MessagesCa.classPK     A S	s    I             h	 org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TrustLists.classPK     A \Σ`  y  Q             n	 org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TypesAuthorization.classPK     A s=  t  [             dt	 org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TypesAuthorizationValidation.classPK     A K  d  P             x	 org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TypesCaManagement.classPK     A bK  	  M             {	 org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TypesEnrolment.classPK     A !=    S             	 org/bouncycastle/oer/its/template/etsi102941/EtsiTs102941TypesLinkCertificate.classPK
 
      A             7             	 org/bouncycastle/oer/its/template/etsi102941/basetypes/PK     A 3  &  R             	 org/bouncycastle/oer/its/template/etsi102941/basetypes/EtsiTs102941BaseTypes.classPK
 
      A             -             P	 org/bouncycastle/oer/its/template/etsi103097/PK     A 
`    E             	 org/bouncycastle/oer/its/template/etsi103097/EtsiTs103097Module.classPK
 
      A             7             n	 org/bouncycastle/oer/its/template/etsi103097/extension/PK     A qmz     Z             Ê	 org/bouncycastle/oer/its/template/etsi103097/extension/EtsiTs103097ExtensionModule$1.classPK     A {  z  X             Ŏ	 org/bouncycastle/oer/its/template/etsi103097/extension/EtsiTs103097ExtensionModule.classPK
 
      A             /             	 org/bouncycastle/oer/its/template/ieee1609dot2/PK     A q݉    C             R	 org/bouncycastle/oer/its/template/ieee1609dot2/IEEE1609dot2$1.classPK     A 
TDk  i  C             F	 org/bouncycastle/oer/its/template/ieee1609dot2/IEEE1609dot2$2.classPK     A ǟy    C             	 org/bouncycastle/oer/its/template/ieee1609dot2/IEEE1609dot2$3.classPK     A 6o  "  A             	 org/bouncycastle/oer/its/template/ieee1609dot2/IEEE1609dot2.classPK
 
      A             9             	 org/bouncycastle/oer/its/template/ieee1609dot2/basetypes/PK     A ҎB!
  s  T             \	 org/bouncycastle/oer/its/template/ieee1609dot2/basetypes/Ieee1609Dot2BaseTypes.classPK
 
      A             3             ˹	 org/bouncycastle/oer/its/template/ieee1609dot2dot1/PK     A Pͽ  @  W             	 org/bouncycastle/oer/its/template/ieee1609dot2dot1/Ieee1609Dot2Dot1EcaEeInterface.classPK     A oc  
  V             	 org/bouncycastle/oer/its/template/ieee1609dot2dot1/Ieee1609Dot2Dot1EeRaInterface.classPK     	  PACK200PK  Vz[              META-INF/MANIFEST.MF  ĽWڵ(S]tw$@z" @i%PhoМ1GNsi_#I(ߡ_y_bhs%0wUxrӷ_o_	!wCKC˳K:,$
#R("7"晿(IQQuH7T%~(Z*XGn/'gbüHohهu>(ݱPhdWy{eoi\y2InTZMd՗Gu=K3{V儙Vc\:I~QvVxuN(IjV·)Y8]W#r>bε'ONܾXKK8:y}$?Q
O_שE_ˢ+u}z;|/Wk9p:/?*{WQJ_G2_?ٿ.բ~M"'CZAx A0! ViJ?_z߯RgBgi
߷jY4uyZ͏/0DjM~Ş|՜뇯u|aj.$s4uxϛ<s2tw4أ^W|ҟ[ahlY>׵@zՍ@f27$z͹!|_g{b%Q+SeϚhn(ږj^j]^^WU$Cjw: ǻwF?IZ_\1[(X5cWoy=B/
ub-R\V퍥W
NkQ_5/JeÏK7XZqe97VWfjݿDs~ܵ}w=xY7tۺ|~vv;;(_7L.|w\NNɚ}-5x4K-|eد^FޫSm|CFEz^Qq뜍v9n|W#I'Wd׳׹.U
2J%}AjnϿiw[֮/o{q"Iv]`$5|{ĹC|;Dсk>Ic:Q4\rgQs/}Ѓ絟~YZ~Xo|>/ w<.AZBw֍#m5Z6qqOyrN!qF
޵a_mgzɫuS @wϽ.bj{%{Kdvbvti
k4d<8ȽtW6Ӝ:Yebm9ރ<oY6!1((5]MqFۛ?1OӖ~jOWW
x<~_|yηxy^?ߊ^۱WX;@j3bGHjh 0Ĺ6뱄_ޢ⿛wMSmZQdFs,On|U	l',܎zu}1*e>0D~7=Dy ׭Bצo:αY>J!%V回uW4ܠkfCxf>ylސU|M2ITfrԭOA{:I79}^<??gyxMߦ+
6:
Z
qxKު\o9'+<
+2.ÂEt/KINrߎJ3^KC?7=YLCޖYsDM4Jï"?#6uQ.|K	7S^)iS=~tk ;x}lV<K~C?}םo]Éb>e#>.7ޫRsʆA{E7;u=R's[N_BϏny(s]=O{ sf#5܍|Sf?	Ͻ?%GvoJx;_0sCF\#kO<Q_g|7+~UW{޼Sgjt_^qm?AK5UL6C޴YʱO;ͼqUiw\t?6n]AG-=Ͻ 34:^}9\=`EcǇn['8yvlkzw}:|I#	t=k'~ԧޥ-_6<+nL}_tglG{
s[Ioy4u
S~{C\8?|ߗBλ/R.ƏD{$nud|cGsݿ;_rV!^mrǟ}WNfϾK\E(5ܒ}GnS-Ս3#_/j/ |/MwּnyPJ|7E_V]8^AwʇZ85:]Mܽ;d3_~W~+Zi>s#z//_qA_ދϸBϯ@,u@n$X;=^;LLm8`͚纋򹋠^m8^ʢ
)D9TMd{o~{tׇPmouCgox@Zj*FϏf~(kOPB_k߬ͯ }~ԡ )!zS!ݺFowa|; W>ďLzg
WkN	[p_"<|(4vtq>	7T𿹎ZGsdɷ;!>P8?'~/To{nFǇfӇ'RE5uCt
o7Oɭ8[9H
DşCj')DMl;C]a/_د0~\)=x3q<iwq)!j|%j@ˣs9?ׂiA-E^#]?8۵K2%&/VsGYE#_sOo}d7@7!z>IOO茖tj;y_E\[S~oWvڷP-x_~q7Fsݿf0}ZyA?.}R;ׯb,>4rCN~^-hփ^*ψ//.ž)?4Wnr=˱x}.54|Ƀ}>mWDOp[#%sW#kygz7^idK\a}S~KqqU>? ^C
@4oݻ}QgcP3)w]w. wᙿrޟ]⷏9|Q:jfkR,#Wo
$ϙ8ퟛ;߰u_P?.{y~S:w 3x%|7w40xF}o;ܕGg.
"737i1v?{R-K<}]~!~qݾ%ȕU9{<W}d[S?}o9&7	_QؽtO\ͨثu:|Ͼb?6]m(q~k}o諾8ovG7K]4I~~%qfK)h"Bſ NM+Dz{J/>/t&iQbrţK^qy??3ž<ւZYv>yE|~īXhIFq^L	&f4vgk屬s9=X//OJRRs˛ޙJTb(d	ߩ(|ۏ]kFK_ܜ^X:pPkeW@|xፊQΗ}S/674
OE+iwb_s	Z{{xײ8.{Dh :WJ e_s%`i 5!<;&z	>pT1BO!)Lf]@|E{t>\q thyoz&ܓV`/(d[<5;wXSp!6UBoo"MB@+:ktי5^:`9>قh٣V'X܂b^@\9%|NK3rbS*De,g3TCɜ;1@[)q\DA2GjZ8_*a H޸Ժh$Ш^<P۹4@m/-JN2z2-0Gv OZ%8MEMJaXrACM>),Y"EHf?]W4GĘͭx0<ghNL'Ɛ>sܳ~鱴
WJN@5=)vƑ^jkH3&{^$5]sދ~^.٠! PzTț$=uF;(U\j _|@p+
Ϸ)+åa9J5
Mcp'nHɏQ4)l{rzr|XL擒 
nʛ&qmq'Ch;H<y~J(L0ҟlJVpi,Y=&S C*uOֳSn"
tQ,mH=ʅ6G` pGjVg-4C؅(4硵A1SA?axu^%i2IM=+|rQc~ls\.VAg}OW6	Hr -BIuR|'0z	 /#$%tƒg.bhn]l
,{iayϙd^r;߄ZRB) FRrU
1Gݾn+sy±
O}
=FZxnX;WXZ仇AlpMH#0W k`J4P$֤#H&Ijڌ_u諍\5:CcpX<ˠ<MJ$ 
8O@>╯Ԙ:eI<jmX-^ XY`v1:|Vi Z$'0ڕ<hȈ'qcˋ1b㆜:% ;	Ჯ*K5L
h4O2w|ݾr
pP-ӘWpdH⃭q(7a6N~{5xk[}JI,NQOgRc׈@ghςj>/;
k*r7Ŷm;41M}	\r0A&	E}=eGVkH;MӸv G'D5=t""BU5pXn	cvsխEQ)XсtS
ƭ`{: Kj=Z,jnfk_2K!J,RpIfLlù:ږmLwȤQހݍ\;Vy}w:ӡ;=t]sKc')i'vyv7">OֶJa#]>J
S ޓg?n3jb&ȘB~C'2rW'HEɅB_TU
vXLtvnD
u; OBQ:lU >g>Q(?kΨtA@3 NP*h5dAVBlxہh [QRqA}&MP[Zv/)sR? ( $աcPI-8q1pk6B5H`koR3Šѓ-`OVxpOک4ظ"i FYrZYGW`pA	`QcNsAM7Y*Fe[͒(:HrBg4qșy5UKg|`m--ӹDI9bƸkbxK0֥P<IcZlqN,xqNBؓ`-A^NtR'M!Ԡ3TegiN.T@Ĭ1ًo1`=)	08҃W.|n]_e|p{ B;GZcr{Y|u$SGVl:aA0,Bq%sT8/:-ԞHɔR
|+C5Z17UQښu
0{>E)w}h4-6{D~w"YqxAit5PCmʦ0R<E8$ZDDN<kK0iZ^G- D@E"6)r2[+ӷ /eS|=Z``
s$9#X	v֓ uu*VZuߡ1`?
Mᔆ=:*t" \̹4Ia-CDG',0kC`>
ipoJjNֺ)h)UT8!:Ãuq82o4R(XR:գZoM"m2GquD둳v%P
KY9B_2'<hH[MYLJZb{SR},N 86툤ħFv_=Dv]+w&En>h&%?ctִo#fq,8`*8HX4Ouawj4)0moqF?QENEF),},I=8-HApec*aQZb5GΌpfJv"5>Ź'0=b"7v{ǲieh3\[C/ҝ!K-"@5&mB3`֟#Ji:P|\3wH+̏4]w^_K_ం<΃VupX$RtWSO&FߵKKqpT,EmatTC#)=i
/IzI#h	#!QoB$T(Um~uwﹳk8&1Jy/+Pe
憎d&KH=*=@if몞Zk!0S3nA	|uu҅4u醒XNF[\MhV;@n;Db:dj d):O=EK`]L]n>Jtx=h^`Z
rƓL^mWVH+b/ю(~v4kHGk\]=}xI9Dxn$Q
BUӜ}&PQ{FIOO=s*Q>p$FAF%ʚSg̹=^#{UA(Wjޜgq[^Gl-x2X:3
Λ7#*ИZrT8Qc~G6QתL!b(h=ɉFxϠ)vwnT
i"cFSUb$G8.@M4ݻj՚6jOgQ<
IâSfR8lR'f#DVádj+9"&c>D:Z6X[L%'#[T
m!ѪޑMZ'&)ep
[f5FqjX#zlH}:1ŀZܤce.NMT4Ba!<ujK((ʛYf>Og
."R]dz@xܓqDNI"GG9<zx2,)]zޞmGb~ōzD-=$>_4><<jc,r
1РV7<PO)zWL徯 ksW!IfM&O</v2b['^ʕң+XHmKs(@ImΨ[
/]}.?51݀<	R[I!jMh-iPv̵+fα40?d_!|Ndu;+qn8[e5<SzSI)9j颰YtȈQ0?~bN]w?c"..&t:_HPS@r7	g%t^C36ֆ'sRXFfszM5=+6F]]
,	5ɓ9&䡲b,
wzWn_Ȫ+3p~9<ʩzP
4h
\fĩP3~ljt3;LRU$!*1;;xdr&Jyk݌NGSҬeGX.XLzEO88ͩ
z!@\`[ҳQv 1}#7U.A:
:cwhF'+A4jwN~nxP2W&+ten=J=T]v{?fOI:%vC]"bpDhUCFF#JC1TX,mbWA(g9}O690"5Xn;Ÿͬ"5I F~0͈%0kb"E3
_d;kB/jGn{<	hr"Sok~Oݮi-@iӘ"#0G 1IAH{e)wt/zs}x2!?I0`Tx d帶jfrߓwCMoj#YrQ$qjȞ	qux18<`N !)ܬ1^,wpF9_3+T ̗Bk+܂rcoS'G9|J@E[8ֿj:f
ٗLmh
TopD3~3J-_dٹ*IǽI1])q2y$->̋MPȔ31C{-v	Q	Zs[/::}?r3#aIގUM`	LMcn1'<r1r1\Y2r:@ y$أ環^6CF++Fخ'^"ﳃD|V;h~miGpŨ2
IعV 2E톧pIRX;nhdהm92ЗSȕi3Um {q7ZbҎku4С0XNCvDS@R"{z"<Z־K(<9ǮdL*-}O;[KKs2dm[}&Ka(뽘,nfN0TͱWmWL~xhȱYť	88~>6CpM*4}*xF
W7sj+p%V#PIhܡjJq_,~Y[2~mGOK:}U@E1&ی70;fR#aΟHk,d^"]_ki퀡LgQoj}> MI¤-Țꛃ>?sS`K#j
{֊L[2:Dpѧ/SLʞ[$=yaΒH2Gkj̡ r1m"A[T0Ao9[lWTE%
M򱁰;9ILܾ2{i .;hrR<y|otˏ-L-1).>Cn807ŅI	 'ǝ݃ j2>M&iU&#Ɔ{H\k%5tm?Y(q))d}5g,oU֗xZB;a+d4wυ[wb3Zpm'pZ_%YPnq=3\%[Rc3;T!/'kt.
þ;<Y0uB6ޓtmg|Y1R- jSp'M,jCd4~̙2=VNtf'p+i4=|b8ՙ۶PkgD2	0bGըOt&{|W$絉6
Fg0_J+㙈Y	ޡT[ūyzTL]ƴE@SB'hpW[%6#
gS=+b;Johr#ԌЏxI:%̬rVcلtÑ5x孬fV֔J7VXq,Ae[s8bk`X gNK[-Mb@H^L'@)g!j5+ܮ-z9'MCw
jWc|$snK!V@x1qO 9PÕZ	(=XT#zR[m(xSSDxf'FjGXlUNӒ9]QqnA:Nǡ"ChF%0a8}EL+
bEN!K*]+lǙZgڽU7kցxG:)f[D!I;oM7c0!?43^-g/ڗPmM>&+MUoblɓ+ʬ=W;R,5ʢnX]R	+pSқctc$n#JFFYYID@4+U܈JR
ɓhfXwJiQG+Xi30/oA$@Oi3,HwAN<Qtىv$8n+Fkf>wLL`$mKC |s{OR\=̌Z%簕f+m2p)r>TuO+kMLtk2ri`-noNӱ#lLirBKlQ.$-Ģ`9B'c;!fDPFq1ӀCs{mVfpC#L\Xϱ5DqPEK{6H`sд'{!+,plrDo'{O-
<YZvN)28֖SBĎHʹTohJmLU:ʃAcڏZFf
iB$AʡSIoo~%*34&Z3fʅJt?)J(7VvP;[p@K&@_ppatN!P+gWo~"APuW`0FyY4ZN@62+=	sTk䵰=/xgzx8ۧJӏrl(<2{0JFA}c
u@
ز-} qiL*e4?(hdTޑȺ 4bÕVKu%+H^_3!	@P	Gف64XMB\lDFarOxf[.KSʞrR)&`3A|"@*Yچ\dmRi2weʼOp~3v?y2 \nwX5eE&7Vl\<ZHmv?zY?Oqs8^t])pwk/mMhtdUn+i'/1_J^١볡Z16X#ZG0lN]pBgQt9__qmnpG'i%HՌVmVG[&޴ww¼ŀH'kXZ@5S%,hBƌ2=poc[ewRׅ8 FSmGb<ģ?iu=_s*utrUހ\fm4(S]R9^K  Z"bgy2ܫWB@WR[7ERp2ihIQl`zt 
TYja%;'fJu{ħ͉5㾲kFS	KS:(H/FvXRXI桚p3||y
۞S=uP_D/݃}M|[G  $~!.d87\]fމvBȩgG{SLCY{$< Fr@1STLyoUİn5V#=dsZѵ(<Ύ.S6q7!}B:.
cpRsp^PHx['mpG-.5B(1Bw<JzfVB1,P+kS6+䭔	@[~BwX'$RSI$ZKK*U ֓y@E`{Tap=Roɖg	^Nb,zF5n 3,=y1qX܋9`yBss&0[eQ{]7h1iuy@&8Xg	<ƃc<J#yAk`2ثl=%̣8~-Ol4zhvzĥ+HO뵸}&+}{t2IFvioJ/9i
`{#
FWJ3zϏ:_@R@S.]wcv,eL_(!'n'msL)䶌;5Q}mm>Bf@S$[x=ks)4!MKuauz5"|  gfl\4ItVv&b
7 |R:mKdgėcۯ<wj̀wI,O5Ls {i`9ˮ]nڀC|Eyi5Іݷ= K[6qYOG>:4Qs-sĘȔ#S{I<
ⰰְ7kx=DzO秆Kdo7u0mwb2ɚMi	UĲE-@GC9kduv1N|̡a#xTven׻1υ| ߈f!S/]''*T
R`{.;_pi1>` d[K~J|
hX߅6ſrM}452qŤ'MPs;a.T5!]:18>8~Sٍ-Z-x[P]'Kiȩ1b9ɷqdNYM/oz5tHSG**G,5`n_MѾr>ܝ6D:6yZR
L]4ɃC(rh u܌
.p.3%:~@]XC~Pa9(n賛I0&*"i
i
:U=1zV%UtPϪ(``C&$QrMFv`ؔ2L<i.H05$hlz鴘q+Ɇq.._·YFzbȾX#|ZKkACѣ@/d7u@IU)C5g.kvRqM#B=%fģ>:wa!|$BlD SΣnﭽeI*~\۶q
 z74$u;2xF8;im4!G=bimDw){i
p
s>XÇ	*:;Mky-B4iwH	Q~e+K1<S7|4o;ZLlGbf 0 +Z
!G5gyoW͎ٞ,7,Ev$9|jp갗+?Cޡ-A {M'^'xSJb> ni|VCqWZbZGK65O\}?wE3{a
D+
ε{mȆB0ɖ
=xwdl
"r_Csj0}W:4N3p8!C&ddnNe!L߀V@C31>ݘiTe3y~?z9$IMw4@%1];2֨.<5%;fup*h@DY;1!!3؝U3%e&*!_ڡ<%wXU+Q"	^̒uc&!>FG@K[J&+.aPC ŔBA0pچtZ	qW$JRƂ𘟍u	Ve'o)ݑ5GbnjXNalqn}Jz(Uct~a斅F"a~?jOxNL'GIi9ĝ3tk=V֎wu鈡Vw_۠ρT&hx,rmˀHqjrt<wEb3Xy#D|lA;-2k"Pl lC{qjyiyr=o!53KE|r@n&&ni9%jn(&࢜nxyrR{S_	~,|?)I	$L˨ϔZ`zGkڌ}<!, JqwT]Oo1 P	@+P>2١oT]h>?]Vy{.5ـy~KIѸpAoRh9xA1@W;|)r$O	9yzLve/T;.5X%[+M*_s8%CV~2ZۂDX=qoÔ_}DOXUۈ:h$SSa9i(ϚjFZS;6UTINTXd?ƛDr49lgMYfgi&H~kh{AMՅUgkss 3a u|!Yh
?^N~IvZ
?Oo^Gkjl elBq)&z<?9C~W~29,v(ﰱ[D	9_w]=zoֿQHN)	|;>(x%>4fRx72F3AI1W&QcTGkIAJDtGDnVp1lTBL̪q[ڒH<qol:H>&5k^Facj]&Rt
̬X1r<I[Pḏ6Uv$]/?Rw<\i<\yh:7jڒN0waT6&fY(
%lU)oxpLBrð@j7294ŧ&out-
˕?x/NIk^"ؖ{.RZK<ME]pV0r\,'iFǚ*=9ޛDYri{%|f@Q=r@!`ދ):TYn2b[*ͳYk<1F[$~|4/_Ԛ/kӞU12w#)(+%7$1/
<2OLLMHTT*z:5s.nY &o!ߤh-m3>$QlJwf)W:@ו?

z6o9%S7l41MptZv<梨;D]G1=;+$K-M`2d}X#|86v݉`Znna]"@Fn!]-d7MJP<w<\a4j`%>fX[MCk)#a'r1soE# ǹm>we& ĀG` 1|Jtjs[fwLfUgjmfl5`pGbu>
aeEdt'.6A<Y
a0.6Q'8tzV><&?l\FҌ˛W?oF.CX)BlءsV)&,$d~TPB 
[d. 8|zx_6L2Z'kC|]Zrsa/#8"L=;>$TN'E[y3}mB}33!DQXR񖛹:!L#S|(a&ｼ,5,^pf8ɐLcg|CEJ)<3~jz/AG(U5es)Lhe1f+
ҭ̫1Dº˵Y4=m#튒p-r,KdȬ"NWFsN|hÇrF7DVPK<H ֤˚=1瀍*> tȗMTp'p<\iN`oiU	te:B`)~{p~@jw@"`T2E`m]?BKߛ{ez-߮S'
!]<%0v+,^mTNpUH)>LšlzvWP.bq9[t4i}ٍFn6g:+di)(ez\ս3UOsu	[-:&j.*`8Krcpo$LRq9f>~ꂭ3n=)u(6. lf_=S	La}؆n7KkUhk%`-Cv"~&)!_U(5b g[/kdj>'i'n5`8RmK 3rD&s\h5<ьM誱fǧ}č-rj^ߟdv),eWR\>JydW+;qAV'WuۖQ<ߺ[ "ǁAιO#踤
A󽞅݉3EZ7+ncgȹ0,^o-2ρUҵAZ<OGm&.W(7)0u2++J
j=e~,P]jfL8oo枪A9.	M-۰ΛEoqjg_9i%Q.!WSWSD>S_^ݥjlj;
⽀u¢d$^:Gn&Q&=Lr:Pðƃ{ø,ކOY
*1K%׫ Y5
R#h.N(= { -ҴiO%oc Ĵ?oߵ(t2sG#	$L ̴'bbZUQPw̕+b94Ԍ{dsKt#&!_FuK3btqɓ"NpS`dҪڡ~XTFct۞uq>
"ոMb
8f&fR0rUpN<\X~f<)x)6xXRnfjS4B2~_5VMxˇ]~R=Y1 bn`G;d޹h?;IٶODpF*vdH=e(gXH/mZ|fa\_s]vƯ4%_ Nmgwgc;jb"ζMa 74C!3fEX~,]Yv-XMR5B7nǪ2W2//@^|t1^OQKdXEqP+?%|g0n#[i6
."hwKd`ʦݣ?^2^erGTp Yl+>_w䮎lҌ, Anqb%9OHO-ϖ6SdOPnzl| ˋ97MފO1F@xieκYh<99植)0FW8|mxf)l"	qE?sy{4=Y\5nQMzvc||zH9m̙"1l
VNkG0?ſ[H\L8Uﯴqfd""𿤓F~[vBvxA.yeSܶ=M@:Rn+wx!2}hBKo
-^v[*0d{hlIDԇl"^׽ۙU觺l<2lrD1ʘm0IiHF\!g,_ɜWk7f!
ڨ.J!a2@B{[[L3;"d'eQ4
I}0L՜˘+Ԃzk*($:9 t"8GZ&P{oIz{`I,hݮ<L-*w;8G	pƍFc}F$BuPfpىpw݂	sC8br0N0UR<!&Hw>ž{,BЧ4ޚ鶓zDAoKLPaM:v<	wyd$96j&*\kiƨ%[6Ie˹u>ƑԜ{.?FrF%x竅3W@A5yv.F<)޶K<_ԘQV(p*r(AX݅A_^y.iJGQY>J놡-Uz?gڳ
X1~rʃ#O4#%v:Aė 
S0ddg4R^W{p};={h˞p,BP5VXζhfMigxڜW_c؊By'9q/fl{YG'[F!q! qˈw9Ogzli
)lȊ	x_o%pI
p\
i|('"W?6Rss0k14(7G$jFKPclx
_$)m"5Yx2\!
*cn<ܜx~ 7-+|˨c4Y/r\:Sgr#m$VX 02 rY~h[Wy9 ]B*y´a I?%
kNKE᷉WJ,=O~
'Kc4
uhE[2CA~Ǟ+v>0Jok5V)rb6TB޵Y8T)>Pbmys)F~] )z>ע67ZRXrykfBȴwd2K~D=a&+@R	Jk	ӵ%|i_	]΃{2e3NnU`P#Q"ϐD~{-q-޿b1Cu!1іB/ly6k˂nS+ѾiOSxEj)ޙRF(LpDFfmkY-ؼQ_ƦFSǫ;5fq-ޖࣛc>s܉s]K>]OhF6Lp.9^Kkwo-ܗ:'.{%S)hɆh8LC yQ8ꨥtp"-޹/^^>A݋PTX\L^K-,L-d#< `/wc߻T[QbeaU[eR`fiB36/EIvv|?/̇Gu2GOwBq%XSjQS{t'9 ?HW.ᳳʝӥ$քqH@y7Ֆy8<^΂0~( /^¹A7׫w[i+]phaۡzs41`~N#
-T-!IePdgѸ;Bj=h.I5TK'u]kI5^K3p!;`h$20SPT u.+CT>'Ҡp<Tb{V
?+Z/6*؁EpZddMUԇ,Ph[09JɉXb۟CYH8o|[fS^hRRxDS t,}Jdv0':j"ƵK[2뛈r.6'¨b)$Tʟ	´rthR\X$A75#oj'̵6M`lQ=r!WeFjƯ@YpX-BmrItT%a
fKU6wIg.9h%WdlEq=r2a]3ܬ4XuGx~Ol+8QUR	
rRjBkJv٦/-=Q;xi,x9b]%ox
UzbwTsMg@	"j|<-LYNz
WFcqggapS/?đ~2үU&>wGeh'хjIHmk}ysУ{+di;E\'MgM~zUyӹBcA`EʏuԦpU:عq_0ie 䤑r.X&G7N5gQƚrS^5?ӟ&\g`CŴUe}׉o2OL_,)\7FOoG-/`Qi^#QLcbMFif.:\}_)ϐK jq00: {h9Z3ZpZ\&Sh$v;9朜8?w4QS+S'z)3yߣ8G"˶:Mń[yP9;ȷ~s.]EB335R1G5uvZ8~[}l]>uƴpfo9-iæۓجѸv	0è^E؝
TǫOAo@fvUh.6X#͸[pBaZ1ET?ݨ^Et?.O~l3P:s
ӧD;2%Sp~l+pcijM1 zN>,iԓ2}ndg~?fKYF;aﵭn[;
 ^^a@X@kJk!
[_&K>O#yYJ	l9e&W4q,>_.,
/<]a`_zSq(6YrYMk$"WZbTys{0֮S[g9gO/Qo3]yn:Pt1/'v7$3YD8UoɑgGkm-]qP.GAsm[}:Yn6AëNOz
ڹU+*^I4z.mnτ;8L	Q)q,=vxCuj䖡֗\
sŶz03>0ЧiD}[
T |9g E[K_#c!\D	tScN^sO u$8[yZ>&D&\riaQkz}Wr"/k>yWbX>GkZі\%nn7x*OG%/ZQ3$X|Bŀ
iF(,*}xEO
"3uaϸpǝ2鶼6L:}4*
^U{βeTu9k(ٴp@Y#8e<tUV<α"Q{d=w'k@Qy=yt=L_3lKW(7e#i~{v0~NdЃ
&ЗUua8G`kQ
bí<J2/*z7z6d'ݨqlۀeě=zJC&'Hۇ赘ڦ/:}hhe(*̅]"O;VY3 L7M{oG=1,X義?BJyŴaۓvI?ur>H8z-6lCu$x$F3
|}w>y{O<aPK^
oI	U>1$"t	8_ʞNcH2~Գ!PIj1b㰴W[y>DйE9i3@ ?Pn;`Gq	"{yS;bu}HpFIqQO";r(EgB
,o^"c,3.;JʜHK/܃}_ww
p[
?l'r`pj6{rg;>\`qpAm
֢'ِ+o"H½dQhQgdz~bs!ՓUXۛJ2xMp	
t%I#VTሿdU?!G𶊜ݴ}Z- ARf]eÞ }P^_1]5/R$N8s@TUߖmP[iIrl6ǹ`6&(ws USٱNdorT~(/-$T:W?eٟzkcDݎ۞!Y%zGb+m=8~xsm/<ln=Vrv	GrTs	Dw	Qz<W*<nyw2SAY:Ll쉲?cVNwlDrH:m36dWP9GRS7a~di} sw|(14x-ԅ˷PҰ3OQl)Sd GkA~YC0LwM)X]nmx2?Z[!˅͑ͼ+7TC@o햇^x(aITqm*D6
6Gs1\Qry&*[]bs
M~i)8mhK)퐏?wu_ܑ@XK;Sh˟d;YD^|CwTe<(^6=yfY@Fdj3qwz[UscT.a	f?r0SfWCpbQ/5=/<}7gGr$^0whľK=FO[}9_^Rp+epi)5au/a*_%^o$b:\}ZӤ1+~2Un%<K߂u\F\ncÆ ԞLv])ͤqik׌?<>ܫTOpVK/%$fG#2wo-&drmӎ~+Uy*}{J,
!DÙQ>@.ZsO)ě
oܘ9:fx9R=~o
2d~Fn):ZXxCcLy3Rp_G>hKZjG ".8kl§n.F?=7o˸ٱOU_/|@X=S',kn\o+)0~`bV!ׇm۵(~:щdp.Sw>ɫi!lgpJqXT
>D\OG"GyCR	V(g5\)?Y|,$oH>y8T.ܙ%ϰ 19ixLd{R}Zp}s:Fĵj)`BmD#|qOH4Ǵ%Wn`@a;͐~C{8=Pi@)n(js 2!;u!+9oC[wF>Aû	ٹ9XhۮVqSna pg\f/gd.ux}@y~z6(eT?BK
;kK>	IE^
2z)O00ܩ#M
F~os?cL}9I-Ys{h'|:E-KƟ
AQ1iҙWθ19Ϡqͯ+iED
=,vhiq8%f_v/8(~S=ÚEhfuHhhu|RdQYw}^eǼYC,#=n)Csxe1?$<-LtBq>ejE`kuW01.HܳOr%.=N^H/Tf>y5muػmzl~+
Օ<QfՖ=2uǀc?F#$mbnTtwvne3ݙ:v-vpĒdA1Kxy8zT5`
bz l ut b%Q}hCU<#O6'4oe(KR2"JE||9|Bn7j	0|(B uѐ8m.=y]GuD9>,Լ䬋vMTI޿#SX%_lu:c2m>L[c`kq;ۖպe
=n/?a=$5/|w|\@(thf	)Ǥ*m[NPCtɂgj$IX}wKx	pəJ,0BKG:5NsnD!<ҁ@؎-G+ze.2]H]!b[-P aO,Tn!N%v"BS|h_PԻh Ah+rN	[/˖uN:n|i<W.jhU gW8ڟ=OOPx0[fjVn-iΪ/(
Swuğ{VLׁ 7$.rC*{Y7Ae '>CDgH]1}K$ӈYe
|R©6t34mg.PLܗ7]V6جr9Dt3g(Wt]3lS{`<fsҦGCiJOY^߆'jJE{pӭlUȨV
zt`]^{1 >L1&z#6%hs G`cSw*>'x=h@?*&

Z^(Ȭ͇/:lnOW}8맋Y;Gk:C~G=@WBXꄞc'*@V~웍~m>'v+mguZȪ_%Zuď#ƭˬ/Awe|o(8ye}޽
1T"2ҳ_+@nwk[§gxޅ^/|ol6F^}KkQpbp7,k"ƭ#}N? ٮJs!ي[O:lKzEe0j7gQmiu&F *R|	J1`쳢(?ok|fT"AHx2YrBar"OF~۟4o:r2x4
yDZ{ىHC7.I
P W)M'?RG8^fIBVW|\[ .N)I>>q
A
{uOK_V(C-Dl*>֎g?~pⅈw-S'Ye4yͱSyӊ	/Fܲqx}nс[k;2[FzcM(8f)\RO[&C'8vKy:iC&Lsr
jr	[j$2@c\\!X@4$zN8bpno^dRp:)C,}BU?(MBVNZB^TKO`GG:uTh{DLޗBwۭMdq&$zXD*J1
p\ox9I?ϧp/Ŋg*Z!\)q%pWZr}Ƥy7SDӜѷcf\U o嫳eLw`bb3OM$sPP8
y6h_@&N$>^x_
g-PMC3KPYCNdm0̐~Ӊy{߆"V;+F.;hZH|gQdc(AkWe>p8)AR_e9nbuЭz&>#nVZ/w]%
[AX; $Ru)pl4&P]v!!-8
A^yB|5TG.|;0H햟r4332?%rUYVh})8.[J:G]Qdߺ*,@7X߭_v?9MHt'PzoaFmЖ>Q1=-{Uqd5EWR$ަt?\^FV7i(^
3h<hh
U.J,h%!_"	HWʉ\>j *JfgR@+Fcw;+$da.Y=;>o-1FT$.CwFWjɨofb\e{P
eN*ZنΎÉ\ۚÌQAܹq2+4t7*zI/TZrݎR*zbfTwi7`"Xq)9l\qz<#RGwAń]~f鏊I&ZXq΋c8@-A**d^bȯ_Qe\VMK$rֆݚ|yWt rT}
 .
XjgדN>]mFmxSN η.1l3)W4ۄΪp
psrxI>	]lPuϜgvȚ/[_2`~r;kiخ	K.O.iU{/v)ݞn/Eͷl=!ֱymWWN3nj UFG[mV:Xm=îЦ$3h>!x<+Aк+\,]ߞ%25௃f<2OpeV*ʡ2m["My_?/Y*`$
z%OػjTpIkf+!Mqe
N)&Vs+Hy6Dpϑq/
[7C$ӶGP56qV|M3V0H45:Wïi!:!`\)`HτlKDa\<{&Bl<dE¶\	߯%ϦFUbb9yCuNC 5JvΘ%2
>Jقw=c0Tk7ȗUޤJwAW/ﾠ7^8z{wyVC-O ]asYQN=!F~i:~Y4T&>x g.ⓖs"vqFu3m=68iWf	 d8jLtHXvy#|AQ9junP]H
 c1Z,?A|=n+s<~Fm ӶA><rCvלӘ.ẩ䥱DjJGY 5yǜi[`x2n[Dr956m/5<P7hZ-iKZ}wUrO<\ ! `(x<@@}	4qBiSs3HHRjgۅBSK]X 2(-ymmKV+:Z@hA	
m _b=o{/ҶpC6DHM0_ m}񸹎XI]!mqX3.DQOV9BlxL!@/ 	ݞ !ٮ=E@V+E/pB̳#TIM3UD
x~f a':ddd4fl++̷ +e/?KӼ?npAUWe`!3j
 U"5|$lW&yuRd
UG,et9-ݒVZ?iFdCT庾M ;Y9|kJLwg?(BG)E0ݲJ2CdS,om
P5.[
TZvUU+epG4gOrP\ecHHo᫈d[kv%YnU|F{~o^l#\~/<B%k;-%h3$t©Efx8!s[,"}
:NE|s\5#U%dvI!ej;(ai`hj!鵤$݆YEFa
{3IA+h0
ah cҌ%(D5~H{Chۿ_*qq8䱼̗ˎ>F4@y=[|V/VrdF7
ՂùM$h;:&D_|fI-!GRK'Z#׉0
JƼrx(mɰ#oG"ĸ"=(
j>
0.Mgm>^)w\]Gb
NYt88b _MJu{3y{i~|X/gj%B89 `׳bd.h׷Qn9](+*J¬LBl@FZk[ו>m2ɈɅ6v}B+]cyUYYqO̷2\J?LFpSe^ό74K#(;V'CoO膸eZ~r503S]1$^+ɿw-H/TiM?ԑuk*rFs#؀:_熹}(n2.KxA Ϸ<_NbH^쐬9R?
b?[L|K)@
zwz 'woEJqzjrayof`lFl#Dw{r'Zϓi!l"
xcp+	<*|5R }SbWrbY"/
em9,"vhDSloz."ҷF2Ӧʐ*CSFkژ%PUYEbi\@]ҹ>?k &fQN֞I*>'w/nio1b1|.४+!Lz~q:1 #'ǻ/Kཞ~J
&6n1xeidyb$Fv@/S
v1}B 3ja*vdvk*),).wP/_??'W߿(	=,)IDaoRmb;)?v`{̮h/\a_o?8;MSbtj!ZQ0mƜ
k2^tn~
4Oع.bՉ$1gN㻚iwB4ԵR+eB:btxȐ{>[ݿJl|deXx*E%롥^ݳw\OM7㤝j
pJB$H!*M(3]z{m
3Mom53d	9#P4KV~c
<'5sn^4D  1 G-q$
g߅9C^^G!^ҹ
JROK3*ݣ
%f΂0vرx5V]"A;#fVQd%44${iS,\`A.ڸ:|˾nӇ<}yN]@	3=Ƹ&mD.;ܫN'I<
I顱}# c}>& PVG\6楺HL,Kd:JʾR/~&=ٮ.a7vPOD
ZA0saάds_Z;G7sjHɜ|{B/+me#3DGPF"A(]/oAdƊ?Ռ{wc9_~_ueR~*UHWdlakZ7H(dE8]==kM8p\ix9X{$yFyXW
a:7l27#!at~tǿ UNPO˱C5i&ar3_EH\6P^-@)Gi	'0il}>e<s9>=x%mr&Ҟ\Xt[~qr.!4С AvI(FHٰ/O*AA`Vķ]gdb<m6sZ3]	#ϫG'TήDq`wn
K%_BNFh\YC{|s5g5owe~.|:nڅyFS_qf։=9ٲgΟ)
-.B: 56[Ԗs3W!Kۯ;~@'k
w% 2j6<fU+}`UՉ{8k,ʌi`a2%;61Y=	{
2ނ{]9d4zЇ3/
UaZL\k3gZc284>*s/:*HAS+rA_C~\.[&oQӶHo_{.'6/%UrstuHj4QË=PKT-B͗mJܭ'sqtYpvdze+/cu(,U/n2FRIrYMchS$BUWuhK6o3PK\x&}K
LD:dꭖ׬f"l5kdcl.nLT5NL.RIb5/`ψl8ۛo
)ڬ m	`
ȠlgNn{ϋSl|0RB f[涎[b 
)ٙNh[A*n{[fwN`m_zH8a@1+e{QfܙP]_u`17$գ+'Apkhkc#Gܚ!
J@jSv&.=;&xf1u~R⊶PR&T903l/(v#DBR1KbHqw  T8xjvrJ<88[Jn8#;RP)Q[Ĕ``9w{p?_*|@YOc1PEFk.Ƅ%AB+ZY:XS˹I!3,lHXG)b9.ʩsǧXC=PA^vlvE<w'eӇj?W0X1>sĐ 
o
BQJ/M4Őod(b\4C|w8*ny~<Wu-oG_0,һ-.|ʾ
/.NQ5ܩo9C/%OJoEn:4@D"-(22W	LDN8g.QT%;^_ϱ*շ /l%_o,V[``~mx>؋6#xƂUw*8L>Ӌ㛰Ӣ"<OE=s:l%D\ە6"b0
Zه%O^/5siOxUZ1nfh^ǝƫکo6Hh yO frڹi;"WHt_|"}*%%9;|Ν#Ria_f ɲN 7vTp^o'*˿ŞXz6E{
sSaGmx`yLb3;KMO_YBdh"&{jڜ<,TO&08a%uGC>!V%8+BЖ!hOfX}gPb}\dc9-/B/Iޥt|2b/^;81wRW_?Z"oAP[	J!.gX{)5.g-0 "t3K?ɱn?Fp z
	ܶ&2q`VQD:wW+?ƦB/aypbםҦ3=t+><Cŝt,-D!/@۪sA參; [-pS#z+㼮+0s~D-(('9ˇ
"+Qr'!j.)"BCuuu?;.ut-u*HvLs֚.oyJUywp[y;gT	+aޜhUzϚFGsk7
ɂeW*J'nZdF*:(jS>k>N9HsViz{8t\

Ŏ@H;(%yt2WKV?mڷMoVw`Շ8X.\	ޅ/bxAZa[8BH2_wOeU9T#Tb[= KI%:i!
pأ̽lZ$[/>oJ^9;Cnfp@чkkǣc]ĒS+vT]P;CAlEℱK!Jߵ,!-p[.Pۺ*aN\G2 F,+7-}ں'of{/>nQ*Ǚص&}j?=~FS6(z^{Lur@T-%`"
>_ʾI௭\앮X0R2nqυMP({W^+
ZPÆѿrKN&1C
%owtU)iIɛ^NoN d.O	_-D5rMIsМ7k8_<4F@XTF.4nb	6+z,SW
u%[70Zx(RȢ{	ݸ9ի$AJY0<@fyBB$3raQݨ䫑n<Zn֑Ij-"NnW4:-{+'UaU1LI[ȋm8?0V Xk}^_-7p'\vHŀ0auȔub{vm=&vj+,r 'h:/p*|vdmozU/!&Xp>)'L	#&+h,D[!t$W͈T<$ܰ*Ae PueNe7{m5A:t
A!q7A9f|NƙӹńFq	5Hc)ىW;͐/.Hݍ=c蘝xq̇oU	ɧ ִ$!|=X6	}
zfO@9,jC5&=bw6sZNWYքZq?tp+A+d
(YnIѳQTΉ `_Y?KC+C2ς/
/k;ѷ
ˁ5aSL1QP
T	T\6HȀ3xC1`ț{A=Up4qxt\}e['c bVS|
r&ÝƖ=d:=[1@(RKQsD'ul,0$zo4X1eI0G60\K5M64lX~T^ʠԒ#+Y.<_T|D9 pĈjwvgچLx6+"s̢[B:0K0Byhu	sVU*yt2hX-^o9tqߓA
o<E:nOlm
ꦎ\Ǐ ZNSlWֺi1Dȸݦ]sÐᲹ,{G@q]$DT&9D3hy?^N֭ Bې^,Z+؇NW?U'$IT	QE} $
D
i_b<Pu
gjDđ:(,bԣ~ҍ9hhƾPO<F_tW2f:LvǚۅuTRrYepa_$dr+6S엠2+` A=KÂʻ]čd[a׶kQNAd+{nC<M&.GòGwiAO':
	\
V?CgaY[@"\jbs-LߕOn0Y`YF=̣YRr{Y/SqlK)ŧ'/0O'6QyB
2a8pf0g[GSMN{Z:wz=J|5̿H薇i5_/?;A%	^aoLz/>M.ViP-~W!@ Fv@H e:K$g~+ e5W>]FXفF˱7 3,hcKr|O/]m߻a۟z e4[]ENMǓ+Ɩ*sWmmt#z&vnv_Ss!$(CJKä|x;N2\lV%t΀-Xķ S]e`n"9s)FۋӔK
2c:vVrA|o?ZQeh4UՠʽYIшVvlJev[v?)O~,s'q"*_'-=Y2&%WU*BO!m6vh^
>̑Z8xr8ױOmo1JsWk%je
32jKZ^X	֭}۟떌Siwl?i~r?3W2'&V(Gr'<y\)̈T۶ObzɎoBv`Bꃋ9%)Nƣsl9-6?#;&tD(D|`<)ZRkG[d?u*<DX]L\O
m!
oslF _؁964vaI+M$= _5_֤<}, 8A/zVz2/EA#]$:I
?nC9a31
{ %lu~6laU)' Gǖ5g,]K8'@N?yBtLoO2EeW[މ"U-k(o0Z`msg5=^rgh*Ҋ2a!k_Sa#n1Oֆ4YfC
kgaD櫘)Oĕ<*X-\e}!$yPW@ 09Lɲ[^|Prj"S`h[f:y2s,<ߑ#HHo,)v̖	8#mޔx ~k~1%mbcQ~owus:j5^E9L3
D0$k,>DoHe1L (-r'yx#ݦ.enGz[bVed56}zX:#܍,j`>]A=4nMw `2yϲPM4?x2	Yp0zDluϚ8xyKRu`\p̯XnK<`Wkm?<ўx=:.L7urRj¸Wql
wR}QQ@at|.Mp"ю.!@"*A*	18mٹLY[Cܮt08$yv8'*ڦO-{-}9H42H롺wo*Λh.Ӽw%ȷ"S<Ҋlg1j\Ut1K,c0)|[(bov8ɗTC/|sEUmS3
췜~&~%dY=+k"!{}Xa{u-- Ma~>o^ ~ϱVmrʁi|*mۘ'PIsou{fMcG[D[8Iy:lX΍<
ǽл@ݢ{uaL0{8-!IkY{CV_-4Rd6J_M\E(g0x	b+Ef焮mͼ*?/f*pyzu<4EV
seNE,e;nt v䰿
;槱O+rM2pʙ1YT}KnXY{rnRo/6ӫ/B:7Z\ddWÖHj=U-]Rďy
(j)	$b)SD&Nrn	9=rvnx6q
,Ptwǰ}@fښ
TC4|Ӯ~6)8fXBn60$v@O#ZJ`ňVR9zq
n($m}XV{UrsaelȷD(*鰲@=p:kXԯu:HH{Ӵ<.h8ll4y2GwD&6)B T_dW~Ε_->}{w.QyǰTDIDZ蜡!,6~ Snt"Z
!鍹oRdՐo y/qhcwwٗa4o͌ꏎrXJKp؋FwFymX#fO%s'DfQ`}%gpoX?,p&cqZU+7B$hOX풭Ř6ݖޗRK
0 1a!<x.:{Oc?w8főH񖡦޾-auŨ|:_m?.[33DWNj0fn1Er
co==nW}YLpi-mvrgE_%[ "WvKa9.uޠz!3CsmC=ě^3O[tl0 |o}4ikeԽ]tVS 1Hg'چ=C9>@lEχ:bLz%;BLM3[ qOCgg;r\4kȅ.m?!يẀ~#M9Qy>R9: :`QR&~6*Į)\ZwW.A4Ÿ2?@HsU˽ysB`h=	~Xw6~noa\O"8YdS=1Zl#ΝZ<Ζֹvc_yD%?k'E+]ƱD\zJ^Ѓ睔G?Z792aA;Tm*Q8Q/~/-}xTnfkyjx]kF}S:ԀL2ZEhZEhP)R/ 跧:]kn	PBE{TnUt

J/鹐ǟDGG/5lybs
iz
#dS+y28<GI
+ДYp(TY=݆+GTCiJ߹aè]IjI@zEdai/^ց1`Ę_,)pM)sm΂QFAzCtZmlN<,>yM=;8%+6IHjk-P(.6%̤JtZyueclr3D@oDHڶh19eJF%
uߖ9_22~HUnu=bj
XdRfrxW)=N>25ZدSWIqc3PM1@dOU"͆vl;6=C/z@uRB2xܣ4]mhS֖EN^$W_6{LtQ;jhŧFٲz3F:$|NOtQLùlR9<nmq/b21D$=^	.i]
-{?^p1(`N Mn@Ja"|ղ^֚c>z%|C"%*:~`vӘAm$&ZKP^z(R%Fh4O&]YP@1̀@vM6B"\r{]+TW~bZQ	"<-x:{}R
y	y*1oashNQ˕&Xbw"a'=mI\\X/W+4+0׬pc︇ۗk<w,kx*Oȣ;9S4XDK.?y_Y)wKKӹHOO6l&?U"xHM_{I"+yrs@3)yfh]lgEJEiO%T n\/s /9){餇!p[h%q*▱+bc*Q_x~sQzW>;,/QdUU:-FF>SС*&j山s- 9n9ʧB蘜K8 6q p4B11n!`itOYd OJxΤ~,eDAβ~5Q&!.Olp}ZO"=IXx&:;!uw@Pa!MN{deFZaЧWl&~f|ܾM7cz#ePc[5b!ZU1?Ƀ9䎛nNᓥ>#D\gU-hM;skB{.ثv|ws9=C8r0!Zrn#}&/Wŗ̟D+V&if

ښKA\<,}0:-St_cW2;c%$8}F8cX'^Qs>J9+_ٻGN?FَFcŎ4PИ눃Br9ZX"89,u
$Y`Ӈ
6\iw䌊&~x%:Ay=!@_e`{3@,EbDrWS͡u
ގQ:R 2
z0=!)XZz`&MN^9Ϳڹ{w.딪WkJT]Ҧ	*R	m.FG9Le)㽮U<\I㶳te<Gh25NYSY_8$ǿeˠ'2Cwm=ۛ&@mȎ&f >]O(mL@:"3rI_L"t%WWlW?a38lIaStj5ѳfno~+̮ܦdLK*_
 #>Y%<1m^z!QsiK吥, 7tJCb,S
c?iv*!aQ_
fn;	s*0>kwS-z]NF15⦳9ͦ)v|OY̻j+m̏~x@4PSz._r5[_-C*`cx]N[Jyz.z&y־Ϸ?a_[b2)_O
nx,Q+9{.ywm]5#3q`buD7;W,,?FW&f%ͮk 1Rmd11怂 nE8]tHOvـ~Sɗ7!>r
mNSM=~_b=P|</2p9ɁŁՙAyv=<*@M't7v@5KǻʏR;tb;-$lҲWDմ1#2Tn7ckRPcK}tyf9Z:PPgF"W7#	q=)%OiEt;-G=>H3$vg+5@p厦Y˞ j^~Ͽ/JЊ.<=ŷjt쌻wo{^a{u8	wtÜU_/u~݇]4lI&?/9*Hٍ{:Dӫn=&9tivӓ@.S!!)tb	S,K2,qu[[nF_'Ͽ -ޫ00Pkp+u(vZܾlwӗcc|k:7jAX!>tFwUpcຢku|NyrW^V{{(H12I)J<+ZHZz%	M
99v<w\xsR|4,ZE%!ήh-\c9Eι/2Bc95V]l]t  ߂6t3 DNl%ևbP0P4KȣR<6Rx͓~t؟->)@#͈qGj;`=XܖrkssCttWdCH:I-qװÆ[{wj\Tovc{DGmq:ig 
NNI Zi:=c(I>{Xsr$[5_pab_rpJG&R'kTP	6qEgq(c-ZFgfj:jk&FB_zk;|{P9|Z2,T'Z:U\@&{9*=xXz
ndxն SΎSV)w>9j#o>,c &!,ߪf(Q(r&"e"6|»[<EC9NŴ;-Gtqo9{T\(Vt+b<=~BIH:AGqR\;aۏX];=Lٸ8wCO_GQ]֮FkUg#w$0^+\Þ
3_vUF9ٞ8N_s{E[?a%*Hv'%9Wy0]҉'B씳*+.-28-5
"N-&2n>+WRϦsYAV˾	D?d,79\))V\zS{5#;OPKH38.بDM>BAC8 F[E/~Zo1?6qCxZnl(IdtDPM"J74l0Pz@Eر-]fO
[V0]Of	9 ;[_1]Fm0iHL .#'Y!))YQ"Z3qƮ-߿f=QFe6L{sH	ƀ6MnCS4;lxO*7(h<l*H)]Ew;{U{ -̫v몹H.WqtޡV{L֊0їlb#G4VYMk.ÎN~O/yQ 48oq$[n~<SE(jӡjn lgB꓀]+ҥ}/{l< }m[pPTzd<f>l4I%@>z\b8U$]\u4IQϮX}uFZ0	.OfoG8$D4F55X]ڻΓAe݆t&T.q;*"9o1%mc3EO/~Y
_8# k(T6OxAа<~Hhs!bЧ,(jtF6jE͐$Uޱ'1kbƄa4OP(KV#dSAvqW7l mK/wu:ahDcifKR&	!oۦ,<UkJq(8wt[ecFW68pUSQK.e#E"qѹ[z dselAu-=T
_
GroBm:a͐tZI=jYfv$8KXEG̀}Cⷬe2:4Ƀ]=Q(vW?B9bllԜ7Mpmba"xg1B[6BЁGqo(9 ]5Z0 DLa6
j&a:omS|Zvi8WNop ɳJ ..iwݴ)2CD..O˸]U0h$qxr"J.owpؓF@TS!FY#81EziPSqT{xH+YVmfT֐Tnͯtt7R}5dyz\dr]aZp-SNNGwА9XU74ݾ|2+]ݺ0#|̬q&/q`v9^Ќ# ْ9ο/l#aI柗ej,k$Ӎji>n7D ĶD5T4=}:{AERT`M.	ܻbӻ^m8a4hbЌ"Jm%c@Ӓ"^F[	(az
=~%鄅l	Uͯ~
nWPZ4p?Vz>":qeC=(%gܣƁu4) .&+ OoF
4\oNO~
A%A縁_K<q6sTinZp^Υh*6C V Nȕ{V} 0}R|89bFFLT=՜ͥ18jri%.I*{8ũhUza*ȇᒹq)2@
7p=~mL3/ X1	J>AN-VQd3{?!l0] k)e{Rps=M
QҸ>8b46!}1HXkH.4]^EC1N[\YGwKl`^a-jÁN)wpebǿj @˻Dڣ\(aY<ru䃾4ؗ~lB[UoFxǒ~?_O\'czB5ldDd
e7m_+qĜi	6Z稙/yϱxQ 4h)nݐڳDNn"1@A z-Х inG`.=A
O5Z\XOrrb@M<>C-)BTt-}a}
x{.!hSMs 06
ά/gjqdHN{>J=ў@^o>;><n@^Ҙ-ytvQЙ(Bz+0h0dԻp4/A0SZA֔aw #1͟'ޝ􆽻ew݇rK}
'x&Jm]WWq:y*V5=h&#pPG.$8(F,a~ 0UZІ;גQ	A55\mw>4|
0x̥d{7^T98)Ty.=0?Yzo~y?gI>^F7"xpD2}F9|c!%cI ȝ8#P Qj; Υ!4	t!hӱ@#3ql	mZ8ܕ\kM9υkޅ
\E{9 Ha#✊Q6Z]Zœ[&|§qֿY0?	1;lo3yazQ+uAu囍Smr_✍<y\iٖYeG*OQDyq=tzH
Jw9DiDkt.	P=Q<3S3!ʹ7	s&PM69Klg;X?Z
o2o|}%ގo_~e
OZ4l¦7 <oS79%njϫA:Ii?u񲸑0i!`,I=mw מ^A >37q!)zVX	1W7Y+Q1yذ:1Bqnh4\e\QeEX?BͻBPw`[˹^kN@dϛ\0t{6. 17F"f	<N墳׾վG4'QUZ4HxLiħH'[=tbKƷ
otKO*YJ#D&rqs%Ҵ[iw=L_.y6UTMjk;Ź8lu
Wm.eՇÞ_'
㓧ZPa\Bm&­wvi?+>59ۓNv?G`-.$;Yڤx@P_o8OCc\Ys<}B0"D#eԩvGkOv<=JiO(r.TKH5p:ٱmdN9{wqNp|x|\-N)I- @WebXvOkq[K?$JVTء_XE~
U*yvbIgNØ&r%N
,(Eiڈfw2[h1(SRvWjy8[z3evK-41ЉP<"׆^Py	6I	͂ױOt:0|,gytN֫^.UUEJn&]xtf_]|A1\|mWE_qY	gJZ0IDΆKQteT=GpA /lg %ϥxr[7k	<c?1!Bu92_R@瑖~i{G{'WP%5\A7\\Zڍf`5:<@G|⚉Ӽu(5c$cm$:9xlW9~X~n}*pбtajY i[b)y8%#|\joOP4J*ܝȤmGmXmnAoQ˄<qhjˇ[_J^{N,\Os^k)cH$tOÁw˴N'0x16nNҞ$9B=nK:὘	L57Ww_a-!mǇb5R]8lJSsv2U c
$>M{o >yɡF5vwЮ
vFUGs?γ),
 n9TMGEm\=c6un"t[Pwԇ%/_(/>$C`
lADE&5|j^FGV<Y+maM	<lA( 7 9
Asv˾%m1O!J ٕÖs~_,ūwp>yyf:o A}
>DBԜH>4brdn0R9"M_swˇUaKjJyc	~Sϕksh.R DӃ6iv).Wsn- 펴cTNb/.u~ ?uBW
Oɭ|(Sbcpd(/TvFW7~RMQa2z`cNP2MYRVGڨ+yڝA:7#Tl*4$+$gH'o-7*KV0[q7hb}6q$}'wϑދl|'t!*{bVNe$V5.'#&_ї^wǷ#
T{娃k`*)P8wT|J}m-eKMFuOэ$:EK-8f+"o4Ӿ }VCŬU,ЀKIEZ%ݽ$_s1g|˓B$eSsSTg`imʏq{g}%ָn%x.s-T^~j&o࡟s.Ao>{BhHD\œX;r)81^qbpEvAs(.9Z,dDdOrN)ۉ^?
Xϻ~@m.3 ad.Uv۔F&j.N7tRR#6Wl~1w>ns(_͵ϙl<+a4?٫ ;	 hۋC%܅#X?%\s\vI!cu{Z5
Q02j؀F]+0J^UU
j|utnvM}EtwQHVp}y <-q0}<}E7*^ɏ{xK>/.ňqyVn0/GNz-TEfY,=ֺ):dOUބXj6][쮰`|-ylR-4:? ,cbRM%fS+??b%lM8q`2|3^zZ|XM{CY5oW2J.s^WtU	綝aʒ:zfYIcžp|.qö#{-r:	T;'<rKU(Ѓ+@F.<[ٮW~xKغjt035L{Xw.?wm݂[+D5xNԕ+kcNV~>	|'OȸJc|RԸe`!W	k+W#=7>`)T,N)wqm`
/'Z80q}`4~#(^2;ؖH 6Fjrnxa[e
!r}I7N/@;'lTK#}.mF钧jSK }
{4N$|YYʔJ2r}}Q.Ɉ$? GrT}Fpm֚k/d$Nr֬J0ݗ>yΔ`˔w(uZP[3ALc2W"A/|狎hG8Ń uɦ^1n$1,w\voTy!RYȝԝv!'i<,
nN[ {ySkSP̖G$ՑfE@&lʞgP/J]6*dVu70%GSϥ¸Un;jӆ癦|'B+afnQ(0\aF$"A(y7O)z{_"۵91慮#"ϵH-$# ߼xҶʠr *2ͨE2}|Dۣh*|x9oۓ>"pOLEnP8SjK+_P(Q)]0xcg%:R'Bű'zJhtV"ڇӘu'{jmk/C[ٲ/I83ͥPбE}?01%F|y1~*7QVL"L[
w>.Xo5K$޲])M_jnk_|K'P(Pt.g [~3 i|A*P,cXf媋B
_ÙHW)6-S˥]X+®j (J}ݍǐrٿ"g;Z
;o.
fl:gr;@]Niݿ쏰\J(,ո_2<_MJGǍ&rd>@)%z՚(5>L&TkyJwGHonEL:"hBw
9GႪfӽ3"M4!Bށ{^]|H!'3ȠtJ_Ǿ><Gk\1x~3569Gy{FG737[-Pa0~j&h۶ře.o]iqU>)4ĕՉ͑TwMP,E%4|A\bo]xlߦ*zsvCt@@sԓygiݥ`
"xrɔk縠tJu=1}FhLb^F:%8|vk
LCWR2#.%+ٟL*
TV\u$ځZ_M`[46WeEl,tj<R#zkSQ!amU!ҌSEN>YZpΐ
L9xם;D/U;<%ixh'aPŒ_P7&V[ExAG@S5)UZs
мP7\6"#ư{Pov0ҖХC5)SOgM$;v;UdDm*p)-3h#w73"'뻪weDs;-S}/wQOIYPׂC<<.mxV>Xs4-shIt`j"!x:izb4y@nkyJ8i`XZμJ홆ؔ7|&ϥdBX
rL 㺅.l+
}Y$v.>],R1udv;#~8aW##sYy	_%!G{>w!cp=.]؁KXfahKP֐ǣWaƞgNZ?̴5k3ڂjh[66RnG\K99ޑKn_
U
S[:
i1bv-	qI28)&ْ̛yWIroQ'`7U_~xg,˗"G(-6{,u7ZhqmJIT:jvN6J&%@7Mt/?uhߊ?Yg M3h^pӬ&CnzmwƁXRǫ-Yz#]˄TfޟcPߌFnOV$ϩqND_^<\Sτ+,wӅ{m;6<7ȉYn
5[lC|א\!_Pη!	&nkZnaz\4GNS:Hㄣˤ7dñR )CϢDAx7Վ鯉D0YL/pi'5S=Abf'D[<YaZX!Ss8oc{sä#8?`
+tעWc&Zehbz/4~wN7}ǯH:'	U9Ap!7=T-wKwh='>9޸
IG49ݐ;8>≓1/~iܽQ}\l?GVj;@}i'Qu%A
R맱נhߖ?NneGkUh/b>\ض"ƙ:X^Gcݒ#6id l)a*$W{|~t(ْPyRoQ9Qy7#L|.Ln~=鄞wS}bѨ|b7)/߉E(vtM5x5PT~cJ'7@Ź2XPEJ
DXZjHK:^0=wB9֕:*pN^'s{Ljh;a9h斍
YM8&t&ˢ :4OBfYP01HrJ$gfG˄7ƾuҾFWXGq#ػcN&d2r,ĺjy:r_wq Hٕ{6
yY/:-({^i~}ѹWçC'q'"%*WFrqU	-Zxw@n~.>}E8c V=XnfK?;;Ζ9CgQp}I*rnh'|8߰0)nb}#%9rNpǕM+RN6f9Έ7Od~ۗɢ-(5(LWWഓy¼1v":߄{c:sK)*&ss6ᒺ{mj.ʘh/2/!Xj͗ü@ͽ1}u[{žb rآ\\MjlvO}殤t(6o2<"y}3|^1в~E'@]u>?gC++gH{/)U~v&
]{*Lvn~=W1c"Tۓ>ZZkׅq۽'7ۑ}1k\;6}Pf;J_![.W\{7$9UϓA0k2X)S'%r Ak'$gEVմ^u
r;U#"4u#pLξGrKn:|Ux2mQcfE0Jdx7w^?ã"8"g,:]i[at `t7z/(`o/8edNpTDO2nr@Mꊩ+oy7er?eDXkw5K/bP=~/yS] &);Bg$Ƭsa'9cax:'{ڙ'Zo

'BːZw㧍ąЦHSkTm.mnsldбtu~!)̠߫9.4}o;qelf?DnM*Ԩ7&״t۷'n/Y&xO}7V}N+=1|ޟ3{1l80椾IK
rNI?нg
N3Vj#	m۽_p7Ne֓σ\gML:~&4xD	v)_.`?
"5a-ڧp$ث Q]L-Q
1Χ~ΒA~%L~_ҽJ/SĻ|q, H^>
ᮖۙ+P;7:ҋER`W.]'n0'_NR5PQ8#Z|y|^γht vZ~:0!inCc!Mp~AuKn>Y1XF
.]{pP	rbR6Mš=+_OgWmuϫu{vf)U
g|]_3De[%임qs5jDc-me/M㒣p>un"x9:\rqյ0.ݓ-W+Mŗ]bÉ9j=j$g?>l0țVw?:!I FSHJh#@4{]2b1=ACOd.5nn*c!Sek~9JX틝.Ҽ<O)|BQ䤂^5쨖3u0e<H,*B2=æY8ݫ7S3i9%ᒑOE.S_$,H<G",k/c-RGR4#y̧WoAiH^s.њ[YzDp[#wMc6覾
Ӕg̬7|=m<5~aèS$!Iۣ̊U,^nnl3i-V|?tdVXk)r9^(+ž=FShÖQWd^!8D?sa9;0CTcsޛ2kwU4? C ɥ"o>HE6FvGc}Q.sEܿvu~?3uJ3<[
bmrHe7Gᄺt[[+C_},޻?'=C3a*w(bk4Ig(T|ⴽ|r(zPt̟p~֔L4JFOF \U?w/$SܵAP|JOōX%5Z@}C
0=,8IIT8|[jŧfjҏo[8|fAx\92TnI.ʀcX}>bTwOtn!ToR9xgc燭MjA
P@T%7y?"μ78^54'&țSw:TMYfJI9ߘgCU``Gfm 4ЭԆOTgLt~+bF?
ށx_ .,)[wѬë.QCj܌x6w
 *;gk[{뒄YOy>dĐ,p@eRG/An.</W(/jU,1<=ߏ
+dr#$(jՄ)Y
݆6uxf .
;)sYNi~<V$͗Fl\6lAS@(	R@&Qϩc;a<;anP'׻
SE 6ex]&t|b
M}ۿjߒ1O6Ty?/SS->`wQϤAEg;QSD{Y6:/;@DH6%t\^*z_xaeLer(ȪQx5u_3w!xۿXvKZF!ǌLP7! !e
>+2?G}߫Ǌ]M4扑b9'=
~Ѫ9?E>:U@6J2@w( X\33墒O;?Lsus8ߣW
)/rV'^N5u:Oc79Yqj+ۏ6	4Vb]wTME7M'<`Ob3p)n8f(A~St2+S	]{WjM$#J 9]gdh{$;jԻ?s3u3xΓ$RДp^GI	r}}I:%.Y[a&2}jx\NUE[LOQ6 &O#}fn@0DS|S,#0PڮeWJw콄5ƻɎlaFDZҞqm^dXsEn|G:$ZܷCzlp{4*3^6mNO[P|gxw",}h/[qBZ&;2;gs/J~lҲM7ԃj0Mqlk:e_aɠDW.MJ>ā D	p<FECm$P\ knI\^Om>
H>{X =nȡ=&X#!lQ2C6[_|A<c%JH|+FV
p>W}Н\
pro#XS-C|պyz)0=7>xHY⬺ݮ1/o(/#Ni̨\+*Cds`fWI\knG7:Oox"}'Xdnì8i	B r@}yXz,5N1ʜT[ڞ7J|<ٚw~Y=b+LqZNWtIpֶPuM
	^A-̉z9v6WGT+ ȩ]
' ?)޴_ԜۺX{Ѱ#n7C"plnHI>+-t^:Ns+cV38 #MV)[zXPײ)fK&wya|n_؋A#[a%r ;XKM>"n۵UQOrͰV:FaǻK<sJlrϰmO	Տs+GL	;tn[uRSkll%MyN}cIosw,f Q%ڲZ14N7)u>Gu>_n)N-+g^鬑Q
;qGBE}=|&Bl4@)]9sRiQu({gAwI#H{69ʽtUUdPƠk1]r?zs Nk&G)YeԚo" 
ȗ,qoPfL`O}~ls_O[f<$\u+fRrÒ#đ\WwO/@uv&v.dΪ{nSKX=[)M􈡊eB2}ss1Rf]8>Lݭpܭ8Xs:~)Eh/"ob+A6Ӻ>uJ<?Z))
h@urKQݝU0p9wD1[/Fy{l~_y#b;Ko,w\lWs
y+2o':A
;#="dN"
*-9dJ^x֍eZi6~Xٴ
*$ܪ:EMI>&W(GOt L!QYƈ[0L`쿢@q{oH7=}8+;k#.U!/4Fx/,]QCqzГ!EqZVGD^KdSsMi7;j^uS;B}5ܗCu4\
*I٫瞒͸%'<M|܈C`Yd,v=Ok70!YҷP7ãpZ#[,0؟1)/zKq/Io|=^s瞶0If>KUxp$v{xP#[{{g|J{k_PBrӉK1TJYe_\d>E8q`-wQ<{x!<a4dt9~\`_sdICf/+Z7GRTU/aǿ xB{RJV|+yD9sgaOG؀;[t_	1<wiɤ(}Cjqc"o	ޯXbV#IH+.1ڦVL8I(v)hGwXXNÚ@s-YEp0b!>uS|r1Y
 mno6c}R؎Ƥ,ArƘDؾfpb֧ op<je;\i=70= HM߬._I:GGZfa
e~7u+ϏU~`d}BW+F4Z2
ɯiB mX9~
&5?T}#ɽ&n.OX
G+KNp$Zm+xҬD_<h;=ZKQ'6<r`*Wq6^2X澀r1WxQ	JԭmTUe[eGX-MʢJW	//g_%B=!/`;$wlmǼMy~S\K!w>%Ql3^Bm{Ep,nZ'=2ytѨfT%r
@^?|>8X|S'&coe7Z>mSC<#|0/.[_*|W)O˭Gz_CE&6:XDUHQb*lsmSma$Y^D5)$ }v6CĶ@w3|r%L-og~T\{ΰ.dF4t\RaXjo0o0pݱMc*I|~w=E
]6IEڼ|츋Ȩ'
p[+\9hSy30
ˮߛHIԾ=O
o<ȣ'e]!HzZ&ùN7HMxzg\@boׇSJ'mOO
Q]-t!_?VLtZS-([[o[9gH @8#AV~Orخ"	ru#N36
N$$q愈B-k=䎏A;@ց
N/~zH?hp:x".&wyGa;N=hY.t[C晃zܜD0Ͽ]Q؞%Hi\azJ`<n%d"os!1:n гOZfUqh;a-%x{8#r~jy7y.͞
c./E5KU"`[@5؏2+S=Sk%!j`"H7ADW(<t5|=Y9!o&ApJPOJV)W߂/iS;h:#$u霡hcZ2cb]K[]Bp)b*PKd:גqMBu5^鐿o;?v{($Q̤*lK*m
θ%^eioc)=][KV"œl!e :wLXp<z0V2}3ɮbxI)e(G6WboMIΗ2u8cHPJ`H13!~7g';l:	AfY!J4KxPa@:R@/ͳLd^%Zy[*^~x0a1Tʦo(d_
'͸* Ļha|uw>Yɓ<?8(:O
J<	(!!(WS/*|RA3Exha1,E؜~|ΉBH27	^p͗z҂!4EŃ͟F9Nt슳CYn}7=cJƃE$g{0B"nݩ^B	\yzW,:s=I1Xy(ؕ43Z Ndgc[3-
{ge@5*SwˤN'.>mvNGiF.JpeSLwJմYs*Iu&7Oޮ_;
Sᝲya]|>A9F1+dWa4/Thz->5"la`M L0o*Ihpst7ݍ6A09oC4OCVo({xx0)WƸLqX6"|N{YT3+7wtsaenꣃſO`9YE~=R5ɒ=å2h`91"MM5W]H&]s*gc}dXC@^6*A:K*bˎcU>ֈV0xŧ)6 5JJ3R)̂J>]ix%Gҫ
w`qŇ7`Űnٛ}$!qYQ'-I
7I6i]wDN"?YFV0-9jE7䁺K[ۿ+0=}Ӛmɻ24C3->`۽q-M+K:?Y(RC=勏CL<!B4+-QFK`ڦRsӁpei܈3)\tL*YNVB,"~K{ԩlhJ	bsC5Bg
4d_(2tkG ~+鮓q7ȁs9_7kf,t?~QPXFrU5+\10ҔGnI1ul{8)ʲq$]y-.0^;Xa_&w4;/:yX~^6>ᅅBS)0=ey!W.	;\u>T2B39唑NJimt4iBʙvB"	nhD=l6_(PG
}[+)d}̞"b"t rj91: iIǈt^9Y޿w3aO5ĎIZ7z\	 )n}گ,R<`&@$"e־LCǺ&4.~kj캟@RYLPm2NgW24^I<GolI/Rg:VP_\wFK*:v#Z/ "+7F?1*|dn|ʰ
"JAAhڱH5ҁ^.z/-QP`ͮ	R%c̈	oI<t^G|>q6S:pʶ،z~k?&3`CCBa\ch ]IB
'g8Az4Lv
w@ۆw -mVICi|̗HAtHc2Y|J؊>^\?̱Vn:y׭}ZSΤΐ:`3`AYHϡM.rUTkiw
-=iG0сYM-*v?9n]ìVzH]C>p'[w]GT·O}l@Pa;rմC_W*D,o1y؄<]ck
Ɔ/m0IdIyʺt'-[oq~{P˚q9[K?u?ñf nGT\0o-%v0sϴnw]ܫ*wlh+[~O(yAԸaU*؇ndւmX*~o?N96rdiA^]CcCKۏuP=Vܷwߒokɬ1Q,v켨nX@yZwbt=?\rCL::q#kb.K&n͜	^9?N{+nt7YUJ؞2Qb
.B=(Bp#}w^a~rpR7fCiN%Bڈ+*Q9oXr=c7uB.Ү'F.+_ǡTuO-tl2/=4zP)[

m	.,T͚0ROOLv&3/	qX]ۜ5FUēzЁ֔U6@vwfp=LD$؆_V|H
>h#k.I-atns7`-V^);rQu9hʵgYέ17Z+3b	y0¾.7󃑔ЍMԘȸ9I&(*%<!IeWgacPYo3\Zr_$AO	Ҙk
\EKTW.W*!d]ptn@#:>m!=wr
fgUgO>åDtY}ڶV>n[{!%`\C5x<nOw_(7@ %6l'^,r}_ǳZs%l y	ӛEl:۫Ljv_
b:~#-**iH|E]1M^@=2:8 w\VxؕLb'k˱cE$X[E5Yj#nMgǩPD2B~@ӎ#13BKx텺q TT~+_ʿַyfMQ
Ujxu:zU'C(pP}Kޟu43Zu}um<.SM0tte$v-\h5t?n9P A[ ?fnouNdFl,*۞'DOoN)\s彍xsCHT"s~
',=:=2{UQ6+=k-*Z	/
Y|Nٶl(mەa˳fT?E׻AW^ΧLtvb

d\\D6+EC_'"Q庽hue\"437sn#^<ߦi>*:ƽD֐-ҳȡx":x*~T;*4B6{ckP!81x$oDZ;/R3xG{B/թv^MI 2,y``ԅ^/.ܾK]LK9?j'Bb]w+ὗ^c=/L\m	p`ZAdE-nLor`Wem+\gD$ߕZ8h7_mJ:EjFo} |'9"l?uM(ܟ^->WınwYnuw%2uM#;7F|.K+C}fQfFU92lNx&715]<S~v	&ǰ"c.VU0vB.VlXI!1!VֶP&zXu?Go
]-Q0BK)f}mw A]a:Y?ZԘ!Klo<~(|ƗxUOM& 8o_hB(vS_G]8:cC)+,4j{)فְ&aS3".h&4
L*8%_<UDΜ~VЂӢ 4ǜX| s*7[U{z8(-wS] gbN`c4W$Ià=`}8*KqQAڞ8T(F$_-(3$
.JH8&I1Qou|oj]sK#Fټ4FowRk<{;6nwQ2hQDR(dU}}8cX$!%Avϛ-9>>sul+?ǵwC+v@ ,0(?U9OTTF}~RJp}-}6Pi9*ܑR [ YOԮ9L_ R#!36~WzGﴺ(~#EAJqzl|LÚ` 8:/yx2,*DBHo]:q,SgIBD烮UyCV9׭^KEQtA09C/McsFkK4B&S ?$~ED/=D!I#r{-S6,U٬ f,ݟY*1vr|A{?~o,IJp90e^	2G->¯11$t৭ʿ[zaLrف rIѧR~#|~qbV|yoxNl|pG+%c*'b=  ;f)R@%Ks @e1 閸K)MN ],=~ono[?׾=pTR6ęMBd>ʧ1ԩpٟ$D~rr,	|6	@i\u߉O~]Qki[)ev4ߜ3cF =Ш|S!$αٻޅH$rtY
a`Gv
w b0:>&yU	T]A{{}ujIS~sG}~ kFWL
!1m՗kEۍRDQbDew~b#(|d Fn%#˩(9F	WLS_}e#|QsvSB'/A\3^pvȍmQ9%Oir7c\
-e)sFY/&\& cc5?s,Z,u㹯c9#9&
suҬ4gIsoI12Rt⠬Q= c] pʾhdԶǃ߄\U}h 0w@Q-_]>}SFy3C-cU@I
P[\˅ Bo뤯nJ3Irj3~cKH9H"g+uO#uw=9uvY9c{\a/+<!,=eh&_|[5Ofd;	?jafr#ْ/֗ꖷֿE_ćl*  7ގSlHS$EsQ$	p"#Ӱ|:=š+7bt?MkQhwvU{V#w9^Y,Zˌ,ᝄKyv:qh2VѶv%_hLPh:?FVvrb[0O!>/l[>@
95XaFɤkh VKB`^g8.}yl_$S_VE]9PLUzx9A+iCf|XnoDdǱ%9qP-Mc[9uN
t/?G	6nG0t`)Yq`:#7.!%mlSy@7Rs1h"6Ē: o FA9CO>k[ݑB夦-[-BUܚԀ-\n;RbgI46*\ޕ#M_\g\z?[,,^g>UC"Q6̴@_8`h2X|I/je?$o\5^8Rl0Ƌw&ȫahfi1ĄW/FS>ۧvX;1^s:Q*iI*]R!vJnM-*Ow=masG_gp@s jDmn4/
2Ix?`>elx8=8);#%x?"*܌g`A&k[2"sv6e{}BxF]O3kK>~Ċ;C@h6%UMtw@uh	,l3iwB&bNM1e¤bih']r]
7o;l]i2*?$duTs&k4R.p=QEċmQIFC-(y'oHW}}d>HϿMtm?Fi}'?H,MRV*WyOmDknq\L,.;U9%Ypțoo߹=Y⮻.;(DlE-æJ4
2d#HQSjmԲ`gjóAi8#/˕ƫa
RA xqHd۟t??48l3vw|̐Pd2"Bnǅ^|vrpD$م2 bAy{]l:9	Dn!AIndpd6xz7VAVӴhݙx`]DQCy>eIȳsVo#R]yĒ	Íni&aJAR^H5D\ML̉[ሧ[ gh})HY!=;CIUn+KeY
WJU<OO\O[hk\)dS+Q^j\ALf-A\l>_0;vE<msb2\)3?`̸+I{ݖdx-~Ã"tEfVS*YOdkTŗoaׯn{(8 ; "hmRkiMxуzRRpHee<Օt͆^OϜ<Tq9[h52֠94h4Fp%ɝofp;F![\:.Tsv Ӑr5;CCO^;N>$K;] 	`T3mS\!6
*C<{_l4,RUq'O}jrc~AvAYOwxqrPYK); v~;yaÒQa(imXh.24U5
{?!Kx馃gu5d)4f]R~ۖf\6]oytlj[o=X9ḽTH&y^=C+<zԫQ89r_$4e%ۭ|]]"0psC{v;{sp	fmf)J<Kإo32AܽO}jINUx*mRiQ>bOT)W,["R1ax/wt
ʴsYx?v''ݻ-ڬ`*
l7Wl@rh:!-zOClC=τDcG'
=x;n|dYdNg@8pٖ@Ӏ
H)M7sѨ!f-=B.H"׬')٬YNEt*%fs;uIؒt4!n%~O
7KJ_<9>huuխ3`RS'_okIqSqT2ZHInu;n|&v&%1!-
x*:áAPN,SGܴDz`*nx
_SS$Od0.z"*n_"|lxCʆmTك֍*}0v	r}mbQϩπ<1:a&Ev`VU,&<MVq$rxHڢӭ΢KՑCą*`],?=4Q#TkkE5'݅8Vjׯ\^klWLY.oQ2U%4*XN>4Ԅ1W  CVUyZa%oO:|ʕa$()Po%Hսl33Cc 7OX+WpryIsíbye%3|M׶ױL7'd9**(&Mr
OMʻpq¬1O_\,I47ŰI4,=c)' o7vtJBxLϩFqvgxKxU8HZ^lI֟ñNɠ=ݯK
7y|$@&gyfD *3δdPzx<z__6nigT4ekevgH"m'Z
KRy;cͱRz~1~/̚YczNN(^sˌ H|@|lhѫvo_ [LqSVҪ(څL*ÃVcS:ſ!ªklx(n PLЎ6 4R+)}h З	^ϸyQfڂ>WR{^}Thj%k(S
_N"lˀ-#T@ytnO>eoVXZO|WhM=Nl(Jў#Jr&	3 eo	xs_ՇYߊIu]xwVij\{.±ГzetW˳v7ҦHC_G/~'jHzǝls|le&/3FԗC"
3/:@2ytH@UԱgl,q=%WF?U9QvO'~9Ω#yK>@k_~U~l
dŮlYUټY!y[4seXFϾ\>?L4_wKūn`9}8qdTq._}!7ٖB,i>	?0W[
ב, #Hۿc?;.^d[?X m'7Ei[3֛|qOV	~cd+@\rݟɚ]${E_^>zGL3QmSIc=%:SBo0 )@&.ʏ.a.ǜ3*$eYg<@~=
!t<
Z
 PtʝT7:gV.Ѩ)v5>3pt#{ƴm7=I;d'UytKZ9_(\";ȖѬeas]DҹU/MHϟ?BWR;s\okv<0w}Z,ʽ4[2b>ue[HkdCfQfw	hm5fu~tjzYb倊jSS^B oc%UC<7~b}rzr7xBqIhQ[ewZOį}=kp8F%2LY%pVCgZo8+S=|Íz		I7>-WW&Y*V_pŲZ
G_nx!͵J\qw$vbiLN5/Lv(Or;˽x(G"6$O=$[5ua̝g!]GoJ|tIgҫSs[Td'Ԅd!IɥM~;~CELpg97Q%x3o)<B
^>j`:}*kT;ü3[y|"FV~BZn"a+#}VI
&
~2s_>T)ù i6ӳ5fҐ~'Qɰ/ҡ!$TD記FaKCc4]igq"
6[S0|87doSӱXOkF1wq/{/o'{@b=֞[M`0Uق`Խkv}|(l':Vm~ÑV'b@$zC
5#)F̄r"}LsQ|<+Wrv×Z?AߢLpU?^.(~8.  \U2+뼼wfrf܂μ<Q|-S^oZ~'aS|+۫{bAE&3Y/jvPf69di{g`3+cY?[/OowbCuFg6DEA˧9E<(5
Sc3'te,
C{s#ުެ~jfWX9OCVT}߽:8qn2è#v_'nYY~ﹸI<c!WHsKZo٫wrj
aI
oXG<!gs,=$3m=٨& ş륂W?~(ꜱn,a	-rk7m-mzSTz&\L	n>*B1%/yC>B!u.
\f؀dh<Qq;
6lVCL)nYߓ
y֓%gU-cXcFo)6wBo'Er_|Gcj02Bg5
t~ $o63b1{]˻$ioN͘5K!cΧ90sM{4C68mBpY3MG2XT\#ȇ~p}6*5p8k"bW8#P xF#׽7gajBmWckRZ]9%St2<!rg9^@[DwN@nl3
Sd`xT3  ]T‚AE}Q:A
6}zU:#Is-S!? d>>:hh=.zh	|KR7"gD$J.lH c>~Oa)k3о.[x*	NSZx~ʹC5-+0O8K6~7kLM)4:k^E/7s+6ݭ9ǀ57=x$gG`TX_e~Qf=ގ OZ8BՏ/4@GU,s`]z^RӚIp;~ߒO- [$hKWMiؔ	㍰|D"K%@F0KqKDev]<Jc<]I0Qj&
ŮN?]'jCu?:ܛCv#6{l;@vq;O
ۻ-I/`l&ܖ꥚P|Y5oBF[WmEܷ+-$:{SԬNF!Ȯ7hJWuÕ`/[wBhݩrH3 8L.lNUTl50茳tK?EwՇFwi#f!lV+v<	Ịڌk%g@UB`.O2,+a6*
TcE,:B?wQ]4u2K@#I]	Sb
vDT0m~;OEXZ%ж]aI|v!Mӵ-׆I<n'\:Cەeg˨Ih.LU"ʛȬu#mjpwdY+~ǩlA<XS4keɍ`7TUX"oˇ>j穘$nNĮRkC+^ɶ0U~߁O6;|+Ȗ!rB9cN6!Uwu=,&4G`ki[ ON65検ؾ
Hݲ'R$]<,."y:xe U$M1|fWWZ1*]?},Ϗˉ.F\00l"i)O[&JGvPԟ3nϠH_8ᱤϬ;g'd,=ObY7 ~odSƓ[\l֜aᄵMCalCs{7N\<7{b4>j.dǈiRDFu>Ӯ} w~'O|Kb*u<Qi:e*WؠCQxrOzzH=@VFlE"TғVʫOUT"|r"	EO
ycB­vEw"Y}=]fS_> jm<
|s~~t$D=n{/{y0#CL
p-6IN戃_dz[	Ƀ]}?"ND'h-y5 *
p/M}MOEue`Ĭ׭莩ôiv ΋,hzNp[==i=&gQ(
;.Dh=GMdm/[|_c@ټ~߁AۚE|Мw61d$-Nk9wo>qE!yNd]Jg@ۮ=r} *
A>1s{cldЈmT(N lɨC 3&@T
]üDW,$t^I{HEm3{u.~z.e,f܌ϝV  &Cr½WQM+0	A>_n}U0
/AGvOJA_?טKm'^N94#ܦzbsE>_7ϻJMsS-2]GO`
[^ 8ff]0 S:kSe,rx\V/seEj!`O=N[zhw y62;{Qk糁)'\].q
sT9`,O_"I8	;?; Dthս?'Im:#i;{V
[8_L`LAFvU ږO?\|pi!!ƆsIIibX)άۯwq+Uo_H3\8޾%y8ڱ_/xձkvIjL.P^h3\hWxٱI{Jf[>1sC3Ҝ?m9
y0(7 c"J: Vu"aLRL|Y+MTv9P
qJNb66LB>w˱OX./;ĕ	lcB4/mP<j 6syj(:'Ah^tE?Xt.ÀnhE=Z%A
Y;ZY4'zs\0 ğgB4͔
.]'X):~N\ۻp{0OvP2"(z끘.Va`nya>7ל=cW{~:/C5W~9,-:mX|Oa;l8[P[wob?](GbB!q!+.3'UHG܂	dTOSY=w~ίH	@\K^2Gp~>u[BZ?0E de粡1{*:#p^eL	Rr|{7
?`G*]H7hʶՇv3R_JW]>GbNLw1l|3^AaP+`Ϛovc±1'ͼ?EY(oY|@|-kYkeo`/4VSKDN,}L~|#j?yt.C;04G}^ͩEJv]8/n(}(Ln=hgh;K$.m~ܱ;9K~|)/^nby ~aR/t1OPL\E.*XMޓm[dƴxb6+|xHwZB9阐5z^gE_%<s09qL!k8\rpk¡;f
O>LzR`
/g0s柖AT3jb5(%MJ7t:'ɮHx~h˘ҵ_jUq
Tu{ˏB{۪PO۬dyj0ɞOE{=X2Qvx:wfwlО9sVV<OӽFp$!/ <]zln0}XC[rz=T0ݯ#{@;WZF~)n]zB|.61bSqV=]7[^
˽p(|B@W{*a'po[7gE
~'C~<MRyDXv
%%ڜ;T7O3!l_wL:yL`Erf2=2;֥ދ@[%eVZ3:sgstoh>][Ne7&(z
Ե&w{ku	c	axH^|!]ĲZKH^1l3Џq7Oŏ">1̕#qvSZ&`:SA
y3}dMh{43)o(*Dߍp3$?spl~`#6zB
,/=n[_c.@kYonF??YjWp[2
>!Ba.m |VgO=20kzMNl{Ld6soϊZܻ\bSn5j\9BM!Pzס1nS
"ygDI	yDY;#O&Z#Qgu~3ӕ.~RIYިڂesj,Lc^&L?'ѴA7U]d}4j6ipZcrڻ}
sY7hbcQD,7
-M8QRwvLIvWAFJE%C&Ut>7 tnd!7''tr(N6O ڣ^"w9<U^˻l%!Gx71IH\iA !̑D8~
7'EyF v?$Iadj~Ot)Iٮv|v#Utjs1AhU֚cE,RSQ/1<HuqeWEHoڎ<˙pmλyt⒲G*~FǂDw2BtѲ
yewJTؖ#LrDؗ\cަz4"\&9ÐSrak>˯P}Dg7ϦH-bjq{*
Xҹ>@e !5 yU܎ ="FE
9e;LCd'E.#ߚr70Ӻvdė0'.s.iY٤O@*ײr4Vx,yOGaA'3S= gn)({RIiփlGw~`wZ銪m0X\@DI:h˂'L:ֻ;&/QlTi!"4
YF㤸2R QПnzcF
0ׁo=osĠ#(UE&ns1ʍ/k#^7&z`DXR]ML33L7r1eliT5եNuvÃ9\ώ}|Y%ɟZOd7U#F*Hj݌#O%ߤ52äg~]y#xMcy	(v{E=;N<#F_^Av쎷cئ#ԙPKT~:Q\pQb>غg_T>
l%!)pI]:mV|pUɓt,I1|B9HSO--kk?*/ ..
jf߾Y/^~W>P5Jbw(+&ܝܜ>uk^=U<
'}m0Iʇ9E|e|BKy0|;=H,ǔ4;x'`qٛ]krƎ'ܮqٵ*"k)٥\;e說Ǉ4*6%eƮ~E,G>~	AoTn9<lmJݠ ܠI
,VN=Xbߕ(x~{¼2=|TEQܚ۞-g%Enı\[`GAXq9#mExh(4\x&oj,,.^Vh1Q_GFV܃.*Q&Ie`gH˭WJ ?IҝJV
=05RvVQx- (i<jYGZYndzY^HOSc{ov|G"s+4CCrF'
#nBxLtn޲DɦqadC?ni-q8g\?`@Q/#n$Ih?:qQUt &Q@lFvb#>v=tD<広MvH=(Nb^dr+Ŀ^TSb;4ß^.Wz|/.P1
fOc؟RׁJ+q,	7~0I6;skNvV]7epw^BlfZY3^X=|!xWyC
<.ɒ׸Dj4cfvuwҢ׫]s1\=٘E2Ӟ/\@i˭dHɁϾ*Ռa/jq
7YեHdL3,^U=뿛E'S)RPrl
b$B1Iy2]р~2
J09-(R)8~Š-ryྥ7ׄ'eЗ{ T(zgXCn8#SDO}BnWu{Y8ݝ!Yt"<ncaOp	)=]V}r`3?r^"/DOUY%Pt}Щ(#w2糳pw/~ocXbav"i即lT󈂴5UEc"ڏy'{E7tvP[e˱+R>.0x"pN`qOD05Fu/i?d	}t\sZ}l.d@}Elݭf8x&-^9&*FiVd~-q-8:Hka=sc$8`#X_?Ho)⥈S"Qu@92dH5Z3WH/e{3m<?om'C?pr资Nvռ'	;9x$weF<)n'_:cdN0;noL>X%qR3hLax;Iy=]DC泸;0|2^ "ТL83m0
_J(v`poS|.Hۀ#otb-j!Xn.{15k//n(k-:nNUAZު/WL@=ӮGRvKe1?q' ! 'JW= ۶^)а Amw˽~;z]Bu:R)o-
fhRh
?NUjZxc	6SdY~eŒ?vkԠvj[qm&
=lf`N˴.T{
 Sr:3ݩߒ~sbWR3n(o
y<(׏g}	\8öXe\
Mlw#%{6PrKJmJZoY*@Egk~_U}Vm
;wyYw6TYӻE3y[+V-g^i;ؑ`)z[TRVţ6U^S)-H),t2A%FEQ][8\aKRpZΥF(o.3ZHq=ʊMңd5g){2Z^;N潥cCW}|8ycSI`^71־w׫jn^4zw]ywLkBc/Us803( kY=*
nNGy,:<贸S<aBCQ/Ek5 Xȯ	8+sa"YJ$ګ*6!O{i'9D2S-zvL&ԩqH7<myU$i9uU8*"qrX(Mv싫fͬmPT5h~-mn#~V;8W9/D{##60\RinWYݝ/^r3
عIɷ<}۬<t/ſs~no')P{dZh[olɫq̤2Lv0HđJT:;^bw{~<Ӗibe}2\1fG`QOQ&_.]+ν{Bff6
Hꈿ,X.Ǣ~  R**4 ńY%Wv.3}(a]iL5h
o8Q{E22r鶒yGկVqz.4,+q"V).ɼ/,U/y$}8VQnn5^GR".8qޟo9q.0g#Q?^6NxGOU׋K%8i2SpbhCUrǢ_:DQgoq<h^ 4d'Mئ# #!aA*i4pV>;lo44o7y%\rcNr_5E/{&KW7Oٻ|D);.=Θ'fyeּt5"
\Z6$iǲ5TK?v={9	Bړ ]YL__ F(cZZ*ZzMon)Z!L)*(uҐ:*$w`kJ&sڃ%iu%CSvĄ(@Ǐ{`=<,#Y=InDR.=T,QE{hRP??~ 5 Jd0:W9TۡEO+;i@2գ[}Oo]@nu$94G&#GL,l#
GGX6$2ߘBlluᴄ57E[N9@eEB	
mQa-MsX?ҷz?_㻈cĴ.
*a>"R@%;Jᗡ~9I7j{˳@KSMHt2sk{cY;G#"=16 l>m~Qkưw6@#yu&nLU6i׽XNdsJ~/g?P[x!pRE'p`^z^{xk_caC<l=]캩hfG*#Mnq/~ٞtX?IݢUݖ
AI)D1M(\"\+$sv2@wy7T~2_1:5ף²miJFCRftt)~P`̋vTzQ"Ɇb@u\j̾I/Ul>E!wSOAK:[gW*[zz;xP yJN}z	?&ryN!NqUXϑS,$dVܡ2A?W_]@
]Ku-9%۟9oz a<Ax#N}OK37bLh3sʵG
 g6!G
c*į>}yo89T4O} [lpfo7R[s?۔#tXKTc9rY^9	sqriݘνF@8T#A6kW kù;@oSU0Rݠ I4]U,m9g/kqby"%oTl?D@PA&mΉ8JY(c|z쭌=~vDāV'bj23=$_]VQu~H|s&>jcӲ~J<
(l\U&hJw9ƙQ!f)>qf]S3tg8GK騱c۹p.~-gN@O3
W3V#eaGp:t/OԀM~p0!ύdxS@9`zQgحLʄTR;Ѯ)t+/wݤR|K	FjnO=
m$ 	j kGwєjDDYz9,Y?m$x+^ߔR͢`߄W'
}?=MWaiڡ_B~ڼ}?o=P=XVA;\χPչEE-_iA/
;*Lf!N29ḓ"=>o.ۢ-Z5T<$_).m.BXv%m8¿*=G
v~ A,*TR8''=k`pDWFR	'dUW	s?%i?Bz	'GRZDrzb> .w{]Z膵EnIEN25oжz=ȧ~.wpݤE[jznۘkj]Ʃ*]wj'(C&%Jժ̓aiY-=ih?XH {=ZFn Hޮ)DJ;Tzwj2r_y7_RM͕qKeV |2!g$_Gw܈R.;?$IT7uU
7Nfn?ݵᤎz"e8aI0|Z2'gϾ;=<Xy|&luceH	7m?6	]_';y?TeQQ5쳴gm[wBA@a`Ӏɏm!䂔C U-@.(&`utaA>7ot.Mioh!>Lpǩ%{;+=c~IVQ)C^1rug4K+K!5^Z}ˊK>·pў݄AouVD7;j`3ߗoEoaRU߀ToWـ33Bpe?^dUe`Oާ(?3r"En9p:y}ԕ%h%@g#ӓTֽb:VLlŢf'l&.L_O{_Ym.֣Mrrsu'>,7JE Ꙛo<UJW]i/wЬwUͰeF&H䬁Kֺ̺I9qH(hPw_U.}S~F㞩\|+׷1ۄ!p68rƋۯRj?Õ6JE4nxE\?Z.816{~Ż8믝| 4҆(CEWސZbJĿvjUL3Z41Kg*eZN̒|Y/~p/ɦX#녙G^62SRPwujqBX]e0u,thF|Z}>j諬C%]yT0ҼHZB:^˯sÝ6)NGڜPF{<q\h_eCo<6kqЊԫ (|vWߧ輸-Bo{FfȄHVQ[Lm2fJp<H+Rt
yZ^_/;ǲ8ʵ`Ewhr pqp\Sʃx놾y;Ÿ>D:U! :flb^Вw,'u~3SbFwv$1O;eޚM?a;tkUMlVƱuyَ
puZ۹QLp{Ϭ:o͑$y5&yPƢ%S#xF2c{b>xns~w̍_%2Ew1mv@ !/~ۿ>0}swS]!Du嬫	{[[MJcyo.c31&q4PY48D@
:
tFe\
,owba#ܒ,6 2͸uC}fW፣_\04XQcly25[Ax?d`c}_޻ď>?׆vss%e;|8T rėGV(Uusy+i,~6g11 ַ>5H2Nj8#ȳն99Eg*-oVJ|Lw16Ht85!ZMs; vbKSɤqˆ9B`N;_Thr\!ZꥅƜq|+_۞M#O[o.]o~"ɝn!SOXA޲j R`j.D1` 7O½nT}&!}JA䁞
:)Geίj:!3x-עlc{;"cg>~{Tj$&r-|wͣDFn-iɲ*AelU'A2Z
bCg
b1&H*P>rrx6\P#vЯEM=tWe@ \ L۱f͊ZzI3AQPR\"'l~kJ+t?{(3Bex~z
|7xE ms#0~#$<@wtٲR׫n,<N+ӱb9!M22~J,]x2gBx	)4yTzGNoRBOGjNV2Dr{fzLvA.ē=k-{S4/'6ζT|N'	J9|4+ 7^eӴGpjMy$#iՕk9K׃ ѧ_c~{sP^bD0$.C-LJjY1ݲ~=tᷱutw=аMO
Q1ބ|8u`eGKݾ km0dbl#=}nim6MȚg,#뼷}_-۾'b엲~][hv贠۩*,]P^ؼ;JL`l/CKaU'dP`)d+ᛎWzMb]
q$U(~hٕU	(ϟ=o:Kr3)djh"ZR\%)j1lM2(
anH9*E1Ս÷A-iN}>@?qW
 _<G-tŸ< '
.]S&(9;V͗~OnH#T/AtJm++e$Oue77ZoyX
tU8J%WVѣ_L%-PG4LxԀK}u6o<9]}sE`etbe|%y8;!凱^V*}?V{^'7*d(fBPYwWHYvQpJʫ&Rp|5V|.Oe
g
bdP:b1{ayRY>ݸ:"7~8ץ	WC7Q[2y.Gz}RByMat+bigBq
xѭN,B
8Vϊe"liEù8-i9ȾUcw(*qa팴e\ߺS~_{\?}][_Gb3lq8f	=|lO%l3Ud.gvIL%Ə}v3vpoq9o9ďwN-!6m73Q<~JO߫
e>I'/v+Gq+XT;B0οJCZYOj&*ùȔ@B^^O?DPm9y +5ā{UN"Le=S8$W&cJ1:w\L"w,%y?M%ܳoMV -ec˼Wr^ƴ/vܴ0g}VG_rs,+SJs[ rܧ셯w+mC!(+py|LꪥY׀=2hgox'
\%Ȇd'B5u`iU$cZo/4W/eD5G27C0ٹϢ1dG7gW<Fm	#IMo#!g:tDs>y
CB(ꀎ]Q(cc#rbj2X&@x7l#R1Rna+vًȝfv;"g}X4\'fHWpH¿*C<9!5ٲPe.~m23X}X{SCi=sߙJx[sLR7xI-wɪG\2ɨrS3>" "2B=iO/<<pQKitqBf6Uh)~j%;4QTNzve&Dt2
Jj::} ˃:.\dxɞEQA&5&E)ǯ
?go/,⣅[uEF Ѿ?իYTPfe{KK
0/-{ycD
ER!u毄z2G4 ++]k
1',So-t$.ۇ2eRYX2
5v
C|Z|÷y%@xce&5 pcj˨]:0i'eABd=j{Ai.&Y1Z$ݿ<*i?>ο{ȞFISLl0Mo;b!T%,ä'TS~k}'{NSfL
*Tȹsؖd&Mr͡6l`)k(]BM\I6hD8Ti&HG.[<TW,!?.7mFMt<?do7л<t61RexU j.Rn,)
sњ
9Өp^]<qjAJm#ŽW!P3u@4\b˛*|"XN3Uo=EL:JQ|
x&_ ,.a8OeN@DLgocoʭYe|caJ>oE7Qj-}׷aѼU
*LLpEmb	DX] A'1+yuRu0æw'6AfqG@k2&D_
w~X;"q}i_\viIA:^vU䀓fEzi3,1aQO5O7=C?u40ꂝ}c3&Oe?$DP+d.Dq:񕷛eHr*f^~"۴
ē}#p)>jKʌ[EH84*wxY$kf2[Za|
hu'#TnР)mz)S
6p~օ;fZO
%H=Jۙ>]$M
ӊ;9+>R^c~]0FV9	zٍ~#fcc\QT4|D%4be=$_N&g}.[H2M=-bܑ̘91R?=~{+<\Rݔ
tRKCNB՚QJe,	S.ko}?33n%}]rO:=W 7gd)
ֿ<?,uWuVQ,c+"<L!JIiiP1X ѳɼasհbT6?<&t#=2RSv5Y$K%OnS Ͳ]}x|ZtI4ңUnDr>\=#~mΔL:
]s7c挰29
ɕ.	쾘7C,XFC!pF
 P`(+ׅO%0'2]OJ<["]a>|0R0+v7m伲^@-8H@'Dw[Eb_IĖh{JzX
>n=J^Qr˓Csǧ+_?OfY>0;B30RIv:0LV~ܶ4%C;Bcrfk<1Ԏ7	?Sc[+Rƣpvųq,1gΥ霣m]>}o{3m.>
X ;E%hg;*zM3wro;.aqxYNҫ̎*~*t-Y>::x4"iqp0ЇS qˁ3=9)%n	%HO=y;П/%]yI! r5G
'+ZwD,u6U"6JMC	ZZwv"SA~
v=q9c<ɿ4f3ذ#i?CfGݠT-'+}Bf2@R
n߸-?|pJQ q݅w	wtuC]O	2)3h;pJxaō ZSXg,hz	%=c$>[6JB+Cu*Z8a$l`+/ Bq5kj.12Ú]`BRepqa3z,ڪtj>.6lǍ/ OznG"Z@cM.:7??].>䙤'>ZGk!*ۯH8ؕ72IH;B֧[R?oq`QhToxc7BwUq13JIkHt9`$O\uߎڻ哉
"8<{\%UfW29Dxm1Odg]z
*W1\#BXځ0UӓVOa?0ܤy)t.^	V
YϗW_J5
NG̏dy`rNfK#o]ubFߩF(ؑw-T0㖀3-PѶXC7>'C?IGhz%u@?t=bAm<g%އOG"];ftaӫg zik`Xb:M˫|=yr{ cִrGPuYK09XxμO φl#r Kuj<$bNZ4_$}7k-8Y[Al+VI;`j;{s~I9ɒ0n#)Qp
SPJ6aR+ =z7'rN\R-e9?Gm(R_7xZ>7ِ8HЭG
95OxG4uFCkqrdLb9ȇ`ջ>PP\} 9?ryUX9qau&?/u˲++p])4ٟ+n^Õ Y{CqӜ'g ߅J=
cu.{G^A"IJG(?TCN؇PfL
jܘ]yG50W:zJg{n=+:\Fg86,ζqxoػ( U͈C K&oXvZ81z4a}n+q'5R]Lf
lГkusr}߲;녔ڢ9)!"kZ\^'Wk,듒mF޴sbvs,vivguJ]`|߇\qjV3u?ހ#Sn4~iN4L/J-&.@FRZZYx+P,u
:@Tjm,NDdQl2]<T@
j92r[pF/>Wi<~,, 'FweDcÙw8[qsW)c閁4Ptj8Y:`)C}r-%}0yIռPEU	˵W/;dvHmRU;iLf9^iL\9I59z=L<#T7y|?_Ͻwdzru
TaVQ뛰i6GswgYF3z3pYo{n,DƦ ʄp(,buH~{xF'"ݵeio\Fr .=7
ω>k!;s7w)+)9Đ.~Oi\%7;%%IDݠ..p^K;_䃽[JqڬD=DBôEBvřF&2 (tc/ipⱓ|pmx!p,ixTKz;i|<҆[@m7?8&hQ]Ug>(8yMcnvMƝ8(:3kCx1H1W *íHv4=2~|$NQzM2"Dہh='htr~jCdb!ׇ"	K>!VEh&cA~+䟙K>Zg\*x7%ѻOya'VZw㰿duxܶzݮR7\Q)R
ߓ`r4k3SƭhXBa0LzPûu~j~e{1ǿ`fy&S 3kI17W5h)1mԄ^8<FJӳ5[bNO߉{յYN,ۙ3$.!y52D1؏t"ISM .l<utnʥBkEc͗U#O-tL1H>Q\Ҏx_F̠Y5^y'<>q{L<+<Yhy`2u9m7ϖ>!m a`Ӵ$fnffBSTV#NHZ0ibs>7&xyl)^h+_ZKdzsz[ajndoB8C!:l2RHKZvg}˥eA: ~Oro7YOKBnMq3hZb ε&,{1 ; ]zm4JX G]C$_EVV_jHԆGb'8nd+{{:pPIEfxN
Pꍋ丁ᦘf9)U2y#r
<:k~0jےQ>ޒ񤃨<DNDvqE$9?'9$Nc"
M&Ս$IxU=Qz==N&4!|CO;F>pVYi6%ӿ<iP>%Cspq˹&ok"gU|gU<ҖUUp^d0a0řƥնy_;- MeN+E\XŦ=ӄ٪Rn4KEAN1`(WD1[lԆdi6h1_7P۝SP
$WmlF$[^5 WX	_-M\KlȾPq?p&5ZQ5"VK ea_Dؖq$.^ͼT*_^5R!N'QfjA9'&y9b>	 >9
O^}qiZ%?~I%/IYJU,B
L<szZTo=ɱj+0L⇵U2X=\4+<yiBA1Nw\ bfշz(8A3AWQڕ_87wy<1dFae+kw#q%6Lop+AP<R4GM􏹥f]={|e6OZ.L˼K9^R]nv k8z{(F#L8	&~.ww{-9Hf!}H ǰcixxneEo-w}m/XLQ0 Tfƙy(5,F6sܗ8sؕz}&|02U!WçTiث>@^J	J ^x6ȇmBݙL0|"cRǲťA9ƛm5]TP7?nwJ?	<7#Ar{,@LjyW	swI'^_3_D>ז
s-/4ϪD7H}886^t6]jLv;YȆ1b|hkQaNNFw)a(; Xs47tH(-_rO~L~}>8ӄŰKpcR	R<	<cW)*-zY 1*P
i8 @dr*
y{XT<L
pH$۳|)s$OÕ\D$FGcihFOrlv\p07OEx[e!^01[f#oqiWRP!p n)/_n>၉S
S®'6Gݕž7x\L|sVN<+Iݣ+f!_.\+"v!)vO̗7kFeJR=o
>I{vJC&^Aw8:g@'-`>Bq7/n~d#_]b=.Q;WM\# +O^QA,D(k8ø%tIQqN9"/!Pm`tK@-:=nsNªsY0_
u h@i\1x8=|H[$
,hGgٷƳ*KgӣۉQ/<+[ZN'f#^OJ|
(_c6+m3!٣5;%<=p˽߫ k!jC]Y܋ I
dqEAR029:/A5Ƽw@Wo1<fz:Ki 5κ2&ww:Sե
06{]SA~5/ͰPBr`
D)%;KfoyqH&T2/?	$!<5GsΗ@KI]br5	,~c}\a QaC{$L!l>ҙ$jiaPIeO%9HA!|敏0B#D sٸ8u=]U+ӄ C3Bv;&|ƚ벧>549c}uLu]|^
Kb䯂̻?ؖ;l]\u#Lr~O8&xUۋ~QTxYᇨL4
ZyhIB%I[#}|x1G@م
 #(x9r%r!=!tm?I)fȓsa|@.xN2@gs׫뽆BkNF/-"s,m._U
CCm)w\2;dn.Ep8>##uRԙj:C]fb(>qݨ,bq޺t
'8ɨOW;5^Sp:asp\Z^O=9-ݾ[*vx)ƙڦ.n<4T;zVvZ۔n{mt"Fi`Z[vdmZ_40X;?INtʘ)#\ Gx[2FOA7t8
O+c+b଄Qi)-\
1!>-p\y
s~8>UzMEҎv:Fv9so3.|7{UC\Q4=X)OP>/>NwB>2ږ0[E' ?+ݶFu^0Sn4m18ye#d
풮;G~[ʁ0v/ttH#`/U|Zf)%,m"ԺG<	)m_xYMsd<MUY|e>?z=GgoyʦӯJ*FC -d7x·^SBڍɌ8`SGԜ'MuO<r_X8<1Pe4 K,G
$z/?xLbe΀ ϥ)^Ьvnpliqoo`o7tqgrޒC}Hp,nrsiKdQvPn&|:yo{ܽ݅wݏB`F>iy `xc8V@wgW5?4^  \ֶ`} <r8
H':{p ?PÆiXHݠ"gsr9glE59ze{5֕6KwmVepc$9a$[
£s}PNixH~x|	T1*
F[)t:_wǺRWKj#/y[z85Ju5 [ T̱
aN9v^E/hNUT[bp44
nH"0LA<c\1W9 C'Om͟h;~ʹ^rEIY|Z3'sȢckNjl?m
i86Ztɱ||饄us7ϢVwUjRʶxwT7ѣg,+ Ԧw/Α"i-Grҵ! yŽ~+/ݱSǾO{m;@q?bKi}nV}&tAYQQKru='#P
(6JXYiy7q
M)%6 ZU#Ud;ط <gMNzj3uzQ~m̞W Zzj~.
|^Dʿ͈y!ѳ^n{NЖUBiD7ni(0*Ρ
jf(t7<q@l̂R6//gOǣ&ξe!hpra{̦+m*OiI=[+pY5F_8%0te"<aSe.(oݙ'WZG "?`݂-<2NjOaPpVC۳O^v6vp<Gɐ|`q3wE|0<KŰ &~n-r]Pܱx[IxzhbOϑh4ո0غjd3Y}J}-Kmq]$cɊIr
W!@yQ#SDJ_/!#"S
++Uz˓8}v0	M=gUjaJZdz8WAm9qמύ+mC"D-[{Q2q "5mu_aGGS	Da26nD]7X+\PЃǯZ` -E$&Y6P>9-h<MpA"}HĵNIJkw MƈJU0W<H>Vސ鞾ٷ/fxjLPX!5g"I& Yy]A+?9ɜOemm"-n923NeR˭.]F.nןaQ%d[,_;X2=LS=\EW'[e_VI)'$zAEjҭ/InkyoD؅)54Ĝ`h }h-75̗;%Q @dtӋ$rӏT|,Ι˖]6/heuh>D7A=w[{TlUE[:)@
gS\cLJIJ+}Pzb@D3nAej:mɘ%B6j*k^vGTdӯnyI{<kDc^
흌1x.%@u]N
"em$%=9dJBϗD,YD|P|sis1m\bVuÞۉCxJH8ñKj@ڡSۄ4Ђ=mV[׮YHMSx|cųCۅ
P*}/tGuW69%c<ΗJ5˓1.o.2oom4߷CĄ~F,A?Bj(o1.X+.C!2T'AԚE 4 Z ym	ܶw{>[dSA6YW傇Z*i]cہȉ\SΆsCu(Z8ǄV1pL\F&+jKG?yXMpoB98wt 8w@lR0kYP16"ȶ
ݞ%kQ-* w.--p;^G~
&<Mw&UJ7-~jcĶp	Q˞mJr)ee~:eٽb?Éhe$}㏣uYZ/\sBAɸ^>8AOBf),grtV58YUJ ffpos'Ƚ9M[o<Fǰj ygls?.)e)DHe\.{tr) 21HF-N~Z{Efm1!:Rx"zy5>ܮI GrBV1ZLrZޢ&l<.!'~h8u
Yobx'AI[$u.3n&!prg5\
r{٪{_>뷬n	,8Q颯b6	k"m?%$o-w90}2&̥G2J)'] @H:xV*
r㇗
S9M7āQk֖K$/YJXTiS3 ",,GnTM7ZuV*(AJ}õQetMeM 
l:VRu:Y3ZW*-<QS̡beFo7Y{N	Xjp;#`n+hYoR^N :'V>Wv.B19r]ONM7?^ -ݞ=LN14$fje=+Gw|.>S9}ނƔ)<iph89сa}@zx%$ЮSwȯ .ݫb?a,[XU45֩
wO`>[<'gm^|PǕiFp3`O	6"_s&TrKPF*sٗJnyF!Fv|}ʜ7oW=ݺrM\]y&]1u6H8yM89._{F$`y3qFB{K6dO-0jo~G^SDw8A:8U%&gCi9wMa}BF*u#ǹNJBi9衯O
w{؍@Z!L_-23[B9?!f40ZPŀD I,
NePVnRCȯ
o!#
~7:h^縡@hPTc-*H`:/VwALG̈́'g>=5E7i{.h~Zs w/ȇ6G;VD.N/Ip	O$wϭeW6 M^QX4vKچe)e▄t*|p[zuW-Ruuuq.sx[8fi0VuRVipΞA?<<G)9_Z3Y|׹v~y~	Y,YCw%WJKm_'{~A[6Uk7rKzf%!keZ+xp+\Ի%?i?yA P܂<䒘%MBlѢk窟|jGY.jl8XլTfL	 f)Ŝ*Kd?o_yҧ1'~8"SpY	Xp9C=ኌGk՚%ѱע\+FJK4Ԯ}`(f5glsE"e^[6l!pp^i wY\_'g8*O#ӧ jag@Sqg'UoieS@w	e\T{S
ϫ֬rnqb]
:PţKq4z<;{L
ۡ#kȬ@ZOR=~P`|m؟O8cɭ2)LjӞ0V͔'ϳٳafsZJz@W7w{؉0mvfMj5m"h)
&BzBrEv(D6aؕd)s
w"FDj_}u/WlkR|>Zmʭxq2~?~ҕeNY0\HmDUf0W`}:O8ÿM ]G8+߸{L箴dV6Zg_b Pb*#C3GF 8+ We:YA[02JIjBk ?^Kn:j*~u?O={qe4[[<ԔS?QSk@3&FYo.)TD
u13O\"ZPtwz <7۠t8`w)fWL蹲mVz11u	Ҙ<)HBO<_ÜU'NÏf@F{9נ+LLkZxPZe97ɝ|z#E}1O;T
c&ڻWm 8^>yҷ,s36Kn}m.#ɖ6<D3;hUпtc?
П6^3krb;/\WaoC.}\#X>fiȪ4D@UUվ"IUHHs+bM*R{d>G-P}Cb%% =#r\fzOVĻ3x ~[yrR]׎@jV}LK9@(8ys'iDf!WI
(易aNwu\`*?oė{F.x#Gti0/j9:g|\Z.ƹ]84t´ԽTt|Awo5^WS";p5w.0[⎔|su'Au.y765Cix8QG	jdiA3AP_	#s}SןGi
e/O:#j7f:ЌXI.49[iINҿpx+?ݡ&eSeZrF~IJ(z%;^i@|,")"Bi6=іU#5c`TɧkOi]"ޢd0-x[8nց@1};
E?us)_oU/
fN_01-snvQ2J5@?v<3Όrǚ=pvLVC+XlJaaG[9iV%0kiHsVFb]wtG]=`w( PˎdR~JU.Jp UßM7kBe3t^r$o"MFW{A]hT(fh{9gS$|!l"w,?Z4#{icl`9lϘ3&Aeb!vw˖:>䡷5
}=Ş$jX[C+?\W lIu+AV}?E7w3|LP(ta
w0zb4ćyA(_w?^XkxŎqĀB+nk\<r^ aXL|qDxŜ&L8L
e|`_QHJ'(Hk*8D*eUrUfIB&#.}u1}>=4#ґ2vGژq0.^8|Y};s$z@ztZ^TN ֐}0
 ڤ=Br
.$Eektz^6,'s(TU bu'"OyI/U2bF#C#%|}W:t=Wbh VIl-$$h(;Qx<("U0Slbz5a B@j5c9xի7 ",J0uHE|eX-9:R-yӂW߄Ԏ}	ǳ.Qj9]dPT艷%S#)K0zP/LN3ϋj+{؀pNZ"	51F	rvd뻩_'NFgtύO]YP٬@5ϲ~`].{H<)FicKn1pvu6m9޹\}HƵO~ب؇xX$CE,:Ҩ Ly`=%q+&L6ϕ ^QM`ZjLdm]L=)j})@paj~BhC]dǪx%h C-Z^c<=B~yn$$nKY2;nZqKV|zO!=}$280ȹ;˯)9/W,K[OCA%=8d
|iE$yX_>cV02XhdTOoOoŲ8GUDNeVzv#5])@(A+
OOŗf83㮙ao?liE({A%NroЧl|'S'+wc9*tnp..:

>J_pAǪ?TwA窄݂6K:fCL,&J:.l% +bdyJts<%aFy 8۟1fF@#iNʰ@ַȺ4#1_La	9z>g.J/۵& kEk?܊
:@2K0obR@"\:IDHԇt@.]u~t$}X?1o=#{HgbftYh<Z^dS^!Ծf]߮
mac5nUT @z$ӿR=$|;[[s6?>2sZw%±ۼUb)kj@xC<F(ݑ{b6;OBm.+%7̫nNHH"mDSdˢ9[#:C?Ͱ~, +taƆ)ҲΑ,թBb%(PʔFPoA#uR=ۅaP)I\Ld*Fz{?}
jo'2L{GR[|	NW8>X͇y{|W[fk)O7ӷʞz[g錜vVE	;zK6 a5 *iZ`8|,얗-x^wB0e96a
d(pz4oKÞH:ky(HsE2h,՟>_y:Vxl3p#-ZRC]m&d@^]W4~qtFK&>v9@R33BF"q;Œ|~X~7iį2ڌ!1J;\
dɻrM6cu?e~n{{"Q#RVzL5fM,H(}eJ۷BQ]|Է8Ɩe6\/( e&%·A3jUv[04X[f@omC\c8|xAmCo9|;š(Lըrp|Zg#N[shO/v3,³}Ct]iW6&޺y[Yaka8Zrpu v0oX	)T,<Jn>2QCcțh}L&-Q'0ݟ_n
GN܉[h5p.4.m	%$=anOsDq`n`&R#s6ℬ(<l8LQ[O.o)M
Ҭth
+P莠z&iEGIj9GT7ط H nLILcȻP,^G g\eh/(@q"DXu譢%˴=~p&p؇t-07]3JdG)49+'ٽ?-L#NyoY+DJ|esx+*_5U<{#	S|xfyORfAJ&~Z%%UVpT8?!Sap1x%.l]Eqd-OB
lFRtk:i~44o=7
nZ;k_VF܁͒RIVrпOE3yz#q<hX!c!^`f`'jH_6*%?{Dִ	KAA7+T 'Z͞'{5B%Ć1l#j:sPA/6^`Z)i}?M65Ay!.K³+&p"Ut%]y*E6H3bY'=\M~\]#ȵ'dp}%\d	Sz8S/4x1RL:ũ7)w
;XC8::>\([`J33E_lw=vl`*,Fdh"c`N+|ڷ(Iu-w;2=l%Î"^Fh[zŘֶ~O^@hsù?gI x< 孡<ov7ynTȳw/|0ɥAN^VSFs,c\1QK ''DͧRoI}yDүRqN-h͔fVPq/01]AlYNYY}DZ
0Y?#܂m4S-{
Op -j|+S|Z5x,RլWa=>6yIpwaY~m*?5yolj$˻D6@WPw3_Ѓ{e]b.-qs{kE
Z@2	'`Vr9filZ|;QqCk
,4y| pvXE%X>y^\_qz뼼?PTt1;Q矺|"rf64czĮepOϿ?ݛЛ`:3OY63ڔ(WjdzUH/$ޱV$}GxJeU]Ev*Ft0)eoRww)uTfAu4}nȡOn:N=I2dCN)ֻ*^7YV^oW1LǟhI)G\1E>ɫ0>/?esrގ{]z3=)E~p#a]DN@w8coV̶oyw!^n@C=36U܈֖Adt1I/Qʾ3(@f-(H$>˶ʊsQ"[-{`G:k.M%&{\Y-a*$c]n<x?Èԑם* Wŋnu:{<So`6~=L*W6áb]Ӵz`o)^x9݇O~^dͳ}TCb=96G1{^"v|O7!iΪtp*hyL)rW6oW?,w֘~sy42p/U~_2OIbފRk
S1*{24V8
zQ4N̰P+25ڀPYF~(ܱ?RR~3^4{fNL 2[N#V
'V1*&&V:=PG-@%8~v9>ACĥuǅ٫<Ijv8#@:e]O~R0ih%[_w
 i&o_6xxVMAyRvl-s
^`Oq nv35FS904Hů
.я+4hdwN
pVVpgؾr]˫S}i0r	íg>$w2N[4O?:`Li0\a/;{Z"Q~6fE@\錯jڧ,[Z~p~Q^6ͪ|{)/a7c%s?~1
ʅ^}SG*RSpwr˞^
нRr*]c+u`TtNCaȈLj<}[UQoYc<g06ÿQC
{Rl*Rlv.Gi!niO
vl״O)oL|hvRB_ޯK@}(b|AH(pWQbo:kiB[?c} $:=7:Yú@q
Op/8?#
Mv@p<1Kh=vǎ$'=\ɩvjHeT@u/`Lw=8DDq5t%O,@mvu[YK.`U,b9'bLBRD+oG!ld)4@	[852*'"
yDnO6hjQ*RJj#i.aŲ,<"vNT-~]o^J)f!bA8̺YSgZ:"ٓ8P(ma}XH :(W}?uܖ"WŢq|;`*hXI~#fJJq<C=OXީTRk 8ZR֪zb5!PJ/Yk`v;98<d4x'/G,^)򰇈 OýoWOі+ _N`d+]K.b~;}m2o9eW?oj\OBA#r"14ZP'3Ni5/{R^3ӟGYyU!3ƽrqCU/x㺍_n95z<ԉ~dnΚ,z-:n8zf\~iGe)eY`ABkn5]^U9%4.LOE0n3;o)毎2TrOӡӔd$*8r#n"-75i0kT۝>ݱxSi%O(+2H:THe<Į܅֔د*@O2Kz~e<7+4	ޥT0D6jSA/y^YBcSB}1$~nOb%#kxHuh8x=c#e +vy|`Ayy2Q\>Jvǌ
NYG&g9xwY+[猘\/4֮X((^6<uslw	g>b٥ҁ5gka+C2޼Cs:Z\JF[:Nߪ}Fy=|0"5/+ڎMKv0}kgnHU3Ԅw;snR3\h[~=SRaxnJ;(q"urM8P-b?+sOhYVnXq*!۪h	xuT$yʎωJ]Q{8 9ͶE_Aӊ#PUO5~;uV`6
1+=|;ܦa1O+l]Bs/Sr!3zO	/5Ier`XiN	0u}
PIS uSN[
ʸ$Ty|?Ayp'fֿck~$ҨJBEڽz#>['S	/|#"ҶEZ7KTWvŹ:tӔE;e'pu٭yw]ťH^h;M?pWC,孬^eڪ
,L
`cJ[#rJn!nY!AV؏؂d	, Ky1*9]}\VȪ(Ͳ;k9á2O!{%"}M+Wh)s['ӴЕ-){sD|q~˯" b)@#ojIα
-pKCeE~>l2Gi BCt[mpT$7<dppؿP5-6Y|ʨjBI;[vogk%aJ])EXǿ?pWUӝr
	sfi4W 0Vu% ݒ!0עN7[A 7i7ꏽwƸnJpF"k&4Λ
29&pO'~K׿ko|wñ%ׇ#<5+"|Ňg-4~=*E>&fq׹@am
L#Kk|_j}
=:ȓ|C;x{ewOIA]6Y2m+H5 ۟=3RQ
aȩ\S3P&13ez~CcCoՏ{䥄dq*-
]ӠcJ\u+L 幏`4 ؔoN
9Z;Baٴ[t۴Y|GP}@McF|)8Mct/a!KpgsByER3uW=Tb%n/o=$3?K>D'Uc<I`wh`S
wK86jze=!Դ:nuk9,<rJq3ٶt|Xsx
+e̽T*`π/JjJtV3۬e,n8v)PQfİMF lۮzG 6p/V(ϦY+dd6~p|2Q
GwR/,{.H8q VĈyU˷a
ŀ_fmG
sKy'A[<id#w6||7GaR@Ry(ԦqBj_daYry+?k*m'm:1أ:fG4jx&{Tn?sOI.
ȍe蕩Q8ŅO"ZsA1m?橌Otv`rP6gy72:׹<z??#׽xړܦu a%o"SJTk[ݐ%l܏ZZ߄/{r:m{@xԄx=}d
N5vb͖DJŬ 96elW/[_gyTlE%f"~`mYQEN8aa85^8·"|9B+z
xYYl/p=7VD܅¦l$/QY{:͕+oJyci+d"{_u5Ã{Ìm0Ⱥ󾞕p:{ɐQzQtS7w
j|N܃)>okHi9c:
qªR!p@U|yci9;_W	|d&"SPE14uBIվ"!_P?ybi0rբ.W 2G\$oo
!9xNz,{7CvߎۍKwS>g8,oz8OG݄a"5!c:Uزvw{Ip@S1ч2cFZѳU' n*SurkX|vro-G謚7P@+ᄛõMA	8և*z?G!1UZX
:>
fmw=x]J풯&g^/dvܲLWյ#i~^[7o·%$MX<~}Vuo8Эa?&q$ȣ-F]vW>Aڮ+*/Lîi
]wNgrP}ZLx惿^g[{މTGZЎ=#jr|T8zx+?|*͹Y/^m-	t3z4k.Hw{CgF|X)Sif=IIԄv_g%>/,tbu/)D
(iVRǸ[~c<|x\&5R#]@VFFM52O§Q/JX3YcoN2^IP*&Ovl{sv쀹>mcNO"r*pXsE΃\<\1B>=BZ4=%̉\V^yJ>gd	h+{IbS r
mT8Wy{P"":)N0~+rPZq(Mxő~'{sI5yAPEvd2lubÎjm&COD	'HUEG 
4+UJb_h
3Ew/Dדpon<-
n輑Rԉr
TT2f_
d;|#*]oF
o͡WǧY۩IFJPo`SsU-C̒6+j{||{2P
 fh=u>q}wGTE8?ǳN$cŎOی}?l{BEniA+>JydDMrNc`}TGP%s/O3>DڶA5/m~-	<֒-jȉf3-Xh{s>@KԔW^e6aÜ)[UϏV0-WRI<՘$b
p~Oߒ1~swHo
8\>h0,~C%u~z
bϱ"C(-?nKGm.6dZp//cɈ|'ؒYs'rFm}eU=B		Sp)*NM$+w1喕& `*H=ZC6?6VbB3v8"~p,O!E޻-dP-:HYk+YP.^Јv1]q9\~7S>^)_Uڻ[haor^ݦOUA\R4omN'~z-\i5$	isSAl؞B)`S7z@ر-6u'N9f'B>wɼ-hY.ӡFls邶cl濟ntStޣHQe)Vpq]?^,IQ({T[vH=s4u`_|atnߜ1oKphuiH>]pwQklȚ.]~kUJ̽4E,r
NmujFc6p\_{_w?/lsѩqC:;,YͣhOl1yoYѩR1E"]|qPRFᤒ
ZXZY+y*&JS03famd:⯊3}x苠멥
f;,V5"5	Z%zE][]v4%GCt("Ezqɴ%u]_s`dx|ͳ On+L{'-9b;^hj_Ueapt&p>LoI*R	X'uOOVܟi_xYWO0ԯo7UC-NX(NWO
EB܂-u]Rrm{*0h Vj|tŗEĤsW#}m`.rK>L+
(92Xn(	Rˎ%(XAXvnt||';^qۊݞbi%1sQ. RF("i3?ĆWD	N@4xQpp#Jאr;9]ack
}RZAᢕt? 
:xvq}(ŝjϻq0v;#djHC6pH~k<1c/[]	vckՇeKS(d0̧K	%|WIH~4NܤpQۮ$fUjH`ƫpOA@'|4o|h5Pere6@G&,=>f_2zn؞
ie&dʵ	s ^4"Z*fC[/(@/GOMz&茎Hvf堌)Gћ3"<B[
y%$q?Tj31SdI+yʫaȦ56v~%YM6L+;Վ6D:
lPD=ruR"qp2 =3bt~qt|y*SU;d'wI̅\tLo<^oIN[ib_ZM_$uxa٘6hvG
+*CV
>Bj:, 7wI-$>S,di&3mH~LN >
A:Jړv7Pu(HJ6`nP<r(J-/Sa3<2$"tpSZEZŎ)ѐ~^iN.q9toŏU߄~&O`D@o^K@rȆ
ߘUXޤzGTSo-ODu&	D3 űQr%U\c Nqy
|oCF\xXeu&M英%@-ZGy{qEEt~;qm=ش~;Y:ѳL1-bրJ#{KBsW3k:_e`l`jLERi-oI#(W-2G	6rHzN{hfӛ_ӏ+fc>f3a+"Y0v^>p4ۙQC}(0cYBk5Ef&"a6
Iکgѩ!|(Y`N*Q
5QW.?3S^/*(M˕x@ُք2 ̞yI*`ǁv^lYIպOw~P	G~
YqOUiFmv74Mխ_V+	2*[?[n*xC{8qѶ1$epS|>5N3wYvo !ohپ]d,3$
vn" |KgvSxGDznQILQ^68sf6HW14[>:\w>4a#o^*ҝ&ǲc%I;,[bghM_YPel>O< إ2sP_A
l^pL{nެHXT@# 0l韞?v?I*1ZTmn`j/$<BC^]<>1ع;JdPj/xd*XFϦ}:K{p܎6{wEnp%US֣ٓe02˯ո
	BNᔛǝ{*UΊAicǙ~btĦd-=?A
 1*xa$[:`|Uww.=ic9}b|u0<p;GXV@:Oengh|;8R c5$|?&Z H0:
Ny*̝:]TN![3wm
s:z"BX`t`&jY#u};ϙzV--G|4eۯ~Q<IX֧*fOɂ޿L+A,oytqlMmQ0\%r_\C^$
a=o)L#qYJH A9U;$¸;nCKveRأ^fY.sŨQhr#Dߦ[+	)=y5zrϓCYIR¶ HC'ļ<QebTy2XYsI0/2[uxg:@ևجW6,*
<vb9J+{)<7;ZDǈ>rzBvxX0܋R*S?v@Ui.S CM  G]x}S=/;>Y?1_0-6\l_X)Tk 1nIbS/yv-4ۢ-H-O P)soe]#R'SJEN|Ǒu3\@d&<]L&>CxYSr*Y`*xJh(T
}	p_?zG?V
x5F>ҳ1=VrCN&&nasUQuq9T9(XaCϼ?Eig8xwprv/xq2z8Hz 6ձE/D&L	d{+L} 縙kÓtpd}]^*i3GF\rꅮZu7a88o/Nۃzk&*lklUn?&K!0-T?ļ|"8L=C򚆤(@^JV86YwO.vN Sڙ.W|yz̒5Mɵ3v!\;Rvf-xKFxE7?\.^OL'ǃ~uʔASc3
x8 
-nĽlO%Y!DH4ـ,|,nlLJt]6I|dtK-Y:پOƶݭbGmlvP6Nj$N@
Vk
'O{R4f{zpޫ.IAĀ(i\tbW
R#ݳgR$,\.՞A˅6h+E&vxDGUH姢I-Ͱу9\49vpPbЎG]5E|K!Ѽ{cG~t}pcɡzcbR𬞘̢e'9K
Qe=>wnahcG	ΖM!/o	wq/cv@#}zy=	Պ$L,KڇT̈́e'V֧GJ5 
+F%R_:04E0O
#%DhiYƨ<_El9:k'A,2itoNu>\Ўpt#,Y:a${6۩ paRkzxg0	(d!Z\70ܕҪ\:}݅YTo$k(N?,yCryEQtnFzV{Zr}6 {it:k<zR!E@h  ]٧Y1Vgc.U3;A(T,x~DAyO[ra:v
uˇE3c
O	mC]!mzCb15VT$)%P2p(UЬawt翧,<M
?H25ѳ&OshC`@K+t֏3Pa
=ہ9@E͕#N L+OI>Rp{Y[k^=05:J3h=niWh(Ƈ)ߝ	}XT,):Z{KŻSWjq27=/je&5:euwʷ%jBe6(@+.ot4]\/|o۪g"}Ks2i4fS_))^}^\D{H1l/K;xm,&PW=ç?wmćo	5b4k )aT5.ec=z4G9~+u^S)D>nZC<i}ZRDO_`jiuD"b4.DNUy
'ޙlJe2e8i]aR=حԾ*H',r?:Q}B$zrzxapXj'a$y*)UWj[*;G4e*dMiw2EHɆ&bїxX'h{Y¾?D;pg.w􌾽ٻoDQHi[~AX.KM_+
_*-MϽoO48@yz9 uORXK"<F:IIW+]$$waRތ2gYoioY'zGbÅ:4~N&;[FlW!6Wɿx|S~	g'ejk-f)[VKJ޴EB6x}o's*yàoF`Vzӫ}ɟ|?m~/M^lw}|Ez]z3{tvJkߝ^%>:Gpn	ixN
lE9CYNԬ"a}v{|=
ԥl,԰8<n2J}mx[V3F˻}pSz<W
A6_ظ	0Mޖ3FLo4et}+*Pxذ3i^3F!޾Ya·CNUآV
7jfN>ټ\qx:KXD5Ia{Es2f䧥>n.ԵG:ې|z;aٖ̫	#pȄ1&p]?=W9d")x| ѩlA
^h{~}&dEeG<NY[QEk^J_[iíX(1ײSX#ϻ֏}~Vȃqeѽmaixbp2<sck};A;#)S͵)WHa'W'MT<QxYwYNm~ZZCj8LTѮեO?^$vp%vnsj*H9~{I;cD^2\B F6 `FɻKc=v;OBG~X=zmY༸_SD&2=ӈVC{1Z!25jsWJ+o݇tsj\ڧ)m7#A{^g
>~eO2Vjd
e!wwȦoz*p~SuwJEk7T6ߘwGm`a
e^~{<
։(?9ˁIβ58O<^\KBJr2H3#g*N,䪽:MFIAdhmv]alM>&mi`c&`&o/BKo˫ojMe,TDDr\)K1P/QY]`|grJp^-3%Gg6$QR%dJ0
CwN
r.ac+yuM_|D+rn)~EmRU*L4x{1]ta"rޫS$b.M82 gێR3jho=mJfoir1HKcG$%{7SbK}7
rݬ|y.DJe_AmĽ~+_$]fshGk?F<!B재3fC>bagum¨10.̱V6inL}+DHF
[=( 1::kW {wv
S.}s9涀(һHv$)6`gN̐mww9]plðq-A) a0oѹrZ۪>O	]Hs&]?잺~}XutUnIPn;+r71 _&B\*ZYRFP&V[kvnE5欂g0Ёi	"9 ~\ %IGt_]^JTϠ[-.e9]&{>o3'|^:C`԰XYt.eOP.ߏne=ŭL
yA	DїywM`\4!sA$OΐaבH5<+c9s8`sYTզQB=/ÙopgҤ	BWf'dnNڎvڅI0fjtOQ~k=`z%}
Gm{Ket`V_*!]m=P1l֬.v9ԏ.;rțɿjz:~9<lC,̦^!3zS
ޖFU~UΦfEz@þy}ísU堧q\S2^'=^ߕ1&_ќ]u)dq9[
mKJkqbxfk;d~>ɪ"YAk%2)RMn]s;az߂]̀OahZp0[%6c]>(
BY'ͱMXF}P%/3Ƨ1S{ԹnEǓXHEaOi@lOǚĚ6U2_DǢ2e[Qc][H45vO"d"80{u?%>ZyCp
a^)ҞSlPavGᡄ7\փMLG9/&𠔪bEOM=.ӜMiAd[
D7ӝQyK1<ȦmΉHdDbp12tdl|4Dv%)T놄a)8.?xCyD}ɏO&o=Kb=lСm\|ő/
*Q?P.|=)GPKwSLcnYD9r6&)U
q pPB{.=P#i[	>J}U+Ry \g敌>p$K^YmCW`c"҇ IsΩ$*a/OBJ^3&qKF}wt>vM=㼎tA!c	
pU Is6Z@\;}PN@x}orߥ۬׾$wCN#oKA7W{M|+GADFˍZ᭴$ X ˕1|1ɝO0fl;ص^wLQ
RLC՗D󾬴a_k}O: .I`qs]e
}x-]
&W<Рm;'?,`MF߳bClz)ߢ YÔ?P4^ILtgX4Q|c#mEʾ8e/i%C
7x-icsdMWO(KLma" yI1n`<L2O?cꤟ,.5ut|T8*WYnlȨd$msBfѭKx{.MT/Xޝ͗TݓWwjz^Ҽ;r4ZE5Z ر'CJTLu<9mvk&
"|@[HE%3|D
W=}vX12 +9%咎! ~.V
 7Df̕Ӱ@Y;&v{x38UU>}wpXe*5y7c\;Yo?OZx򩑡w]âHz<oVV2}:-l6xw d<i8Van&7QpBa8K,içaO.[ޜ
S
1h0=GXnV"W?ׯx}	VeO8+\k$X<x?Kw62sCybN!Xy"
=U+q+qdp~QoVg%EpOH@@'Zp2TVqP],H|Pp#j<;kpy
numw[*.#?_
wLNV1tY?#j}|%SgASכH<P6jn`V旸#r.{s[ȷ-}R,\O5$Ƃ,[&yW!sʉuBDծz
8/+/nTtvGwZٯwzza#mm[l;q(^gML3(RWbw~7xOڷ-=w̜=pZ%;C2ɔ.sK@,Da̽NVĊ(3`{8LWu>s|+\o<8akks;ܜe~ԛ͒*,u
{U`7y}{0WڰPxz\"쫙o~a

XsyMԯwGjhv}68YG[Ҵ F$k̞j(LlL=p4vŇhчɬ<՞J^e;0۷K삠g6T /t&2k	.$+~瘡oK>ҦWe}h wrLuؖzMdp|xb*Q0J00V<&NQ2XE	Rx
xuӐVT,^
srvpP,~4ի}`S _9%/|R]ReqnGrHo1itj{oI`.lIC<8(! NMmm	(~ [96n{ǫ:r@l4vchFcOb@b?9i0+i/AvJiv؜+B1T_\dvcTG1\ 囻]3.)!2
g=`Lޮ'dA{wJ`oR}X1wg,3jC\t&A;mlGdCfD-Y:/Wwe;$3WA"H%p>9A%3NخN1\U
+lħg\΄-~#C?$p2"*v4Pb1Ih܆6=3
W&˿ n|h돆tɲ|݅fS9ݝaiMbDxEz:_E:;Qr-LIڍ*rAU]42CZPaJ֏#y(lc齜ǫ4ԕ841xȏ%?]'m!sOBҺo-M&G
Uo;rO 19nw
"CٱrVf_b}4wɀ'£L,@3+16PW'yߕg]F}
t&gBvXHscdl
^J:w'>oy}iظJʣs3g9Ǫ.ԀuJtFiGݛ$84f(>.b2ݴ3k5Ϗx\'U*y{G*SčBA)Zx9f.Rd'$RL:cSU3;<n??>?a%m)JTwʳ3{IO2*vNsҿPaeϚ`n*9m;v޴F Rvy3b񛫬!r@*&;Nܱщ{$'K~E*voTzRc[\D!≛*AߴL>[q[ꛠǇ%T䲜U4ɅN)f ]OʹNAӮV3=e9N`>']ӭGyC8	$~(OCRGDZ V/
Jt*}?a4X!/t?g:e=cmgRɸ_gH:>6z4Duf:s(^oXǉSKn&|o3pqp35Ⱥ:r,S0(­l!c|kZ>vo6Ƃ;uޝPX4nNo6\dSq\Q 2O@蟿muDYހ1^\Gnp-`Z}Io\>At5Z7҈KB4^7z48|x[?ǀ6u:oXR{κSH ~Ծ
E̓^+;'Ș8u,ڑO{	α>FHx:d1\C
hPd~E~
?~@Gp`g=bV/'lM;ق~نtGw1grEP~
n6%Kblx',쥼a-?"ƷyC=4J@ҙ5k/]aʦ$r64=g>
&/Mܾy&{m=L(l[ԚپJlsqrIm
 cdNz]OLn|܇C򒕖"F>Ĺ%Y yJWj}n]
Q=u촨M½$tIX?>ٜaѭXuQ~.0ԋJڞU~̻Sx
m5N"YvBn/F%pW% s K䑹Mbui
t=֌?]O[||xi,GcUX!OФ՟=@<zzrfSe#ǣ m)A㴳O6n1\g8pxAQ1eԦ}BcM<)WaSJ\͔@+/[hy2>խU[l
<N-5!Nr9h(ˆn	NX(J<Ua/}ߎml-XΪi^
*$} X,r2)
D;b(*}
SGw#T`SLWƁlYǯ޻r|Ckmu+-9wܠ"ʓz!O
`&>]n\ aD!}>kg򖸛Zv`c{(5K3.ТjZDf7}53"Ik#Tl5qvIHh)W7f2eΫhqE.m@^	
3>}SKivkC˽Bu~j9qn-爗UZ"o2Ub:cjwֈq;hZW>:a_4aUOJ[Xu38xmsíKkrŘ.?o_Ck|B
zdN.֥\4IOżwQ
?c`警BYf&ǆTc)ͧ~n?I!-X otj-UދOk#sU@u#W`^V 
fw+Ut%Paᐌi
:;N<goC$,L
t(ڄ]m.Y#<[p.gf%IK-7	Ih(~;W7A*n|_;#ʼͼ^S^)dշO[[$rSe>=*f7-Nxis3/T{$IEYmnwm^Vm#[X~H =eK y႞c28XR&sC\{R[i3TGrߟ߽==2~jah{=ˢ+4y	OnWb8zĞ	_|2TO0tfîvg-Gm;v?K{3S&Q3=,oCsvk
|K6pKǯx (KO򭍿q|Fc.|ᔮ@!ڴ	&|[sr\Inޫ\^IսǜNmwVf+ykRZr
EB*+ܻZ-)TqO>=x.{43۱:,U:JtjZ_kڨ,9=g
'fxM-䍬臇R[u! =<hS2`*u=, 'd}5}S6L@(:ܪm(pӜ\nիh=[u^+Ƨ[Ee:z{}&;L)OF=^;	YXV!΁Xx[oI}*x\:KtiyuҙU,lO+ti9Ha`jyX9۝mõ9AU]j~+-6zΛpκ8<H2	#^Z]?ft|uΣO|P-A lew3 $&*W	ۦx?a--
n&_KԾ(\E
8'Z+8-V?i`t6׀0'P*w O/<vB;yK]T2|LEogc*ϭ~3?lz5OqFP9"G4΃	3zO/$fiN_]sTa˶
 >瀮"(a`?134Hyr%;ctd@b|:NeDc_j,ڊtd]NG#PEw't`J1"B!v-d1wLvbzXuŎo 3Hw"wWpea
U<jV(:9dr"qef'Rf5FB,Y_gC?#jvTY:Ī	QqBtڗ:ҵPZO} s=DB95vN7q{ _»`\|z8q ܷi(I(]4~J⌫]2vy*lO'YՂ֤G$P̀oT4mBZivG<+w w/_P!\<ֈg9[&* #Y,Ow_sY_x
ShF1v$gN0.ณrmg80ye^GEzux"ߐ*I4#EE%9 )
Z/{
ɡcIX(fHB-5W0zy=o'#q	0S1ʡwpCS
?r*@G7Xbkã1`u^$Ih]r/&
/iS"m43s\F/T՗qa"NXL;}&U}oEʞ'
-	f)i2aaǈȍmrL&?Q<-r8Pw\LEj
L/{_wv4_ANj.b*;bTWAMTrcz+Sr^?UN~JZ'r\H?aP%<栛`f63sl
t#U$>魨D1pӰ<!;Xw6I8\Ewa^-"EAGl'4olgD`-:l5yY'<\2~cO~pyWRwN	^~vo![{Dz4y9QۈwemGn.RX	_T-(ޯt׬?҂32{( 1ME'ӈ{Sb}
r#Uˌ :^ܥrOdr=3X@^WH#;9Nzm̎zeu,Z:Ƿ<#Ü/1&u9mt{z*xrKK99qg+y6>]ό=7UiRr>7H9a#'gZGG ˗^%%c<9|ڈnoMI=sZT3D)~]KBM=P[jSh^+ &5z~~dh<OXøzqh7&fg_TUW?'<rROk2'Y>χMѮVI!9W[܇}/
2
QT+
LrքݎFو7vy?ۖ}~#j~RSoC`0!qwK!g<z1YA~ "{f)yT2/zY]2VW%L!dO,{g'z
xp%UVfkL1KxT|~l;^̱u!e-KǲEcN
҆jz:N}t{Eߝ͸q,^C]ܾw^p0I.{m{<k]55'Cϙ\\XK\g&CeSh2fAzAHI1՜Y[q
oXyH74Qy=	?vTn^ϻ`o
x*Ú}S򤯱t)/.)Z[S@nL$=o]Ӝvg_wNLIDܤع ]HT#VJG}og|G9#bSsP[!WɌ	ru~"yb_6[1Rb/K7c! %fVE×/w@:dL-`tBч-б{J.D#o{llZ&[`zu.Aehd	C%[`x;M0o޹P9
s4+i]G^_YQ7ݢvcݎ a8zZ,٧GLD rZRîLՅظO5q
g.^	ߑdfסQSfvDjn"qD`wӾo|!۴r6yí45p]lZQOY#gBw~kg{)ҹ9R̯W96'"CG.z1IHjw~6"&=ۙlaS=ͼ
~=
lEz=K.h+uE)]"gy,?0#3n΄fyi]5>YP.1纇vB'v{SU*Znk۽9Gd8$,9 ߒq%˞oWM k
O7ei
s'c"}VA3e jo:e"CjIUygY1sgM>to;u{BPrto^MJ )j@߱'![z2;
^g>ag,y,{r%W_Y;.
ŚRjHdCr$6}U}ý
"}XdOUd{=ք1!QvLz,G{+<}fK{X׻'Zk͠lq}E4sw{g|f!h_s@W7_힉;óP4Gyb)	7$ڃHg8NI~n!plUXcuF@K`vSdp_@]ڗYSolU0eaJ7D>[Vp@(٘S^3Eo5^w6.G^5ϺO"Ry\fv2a3	uo3\t_@:rlU`a-	nx1blH$c?)g<LU<`b玙ypRYU/zoBCt-xUP+ܓa6r/EN5A8d=]y[
ǢD8ׁ/]D	}*L觖ϳ
Ŏسu=Km9AM^͡.ٯ.$vLozA3Mvn+{a/F#`Ov0	TTӓ5CFG`~V<p2{TNcKSsgnBqp/zh74Eބbp:kqJoΨf͓&'dh%Rinqn_`]:.6_
 <tWfsm[^a$XpᰃDmp20$(|ɕh(7_=
WXXXtasm(-j|:oۯ5OnDut2ѹ?.ƭ*@^{ív6p]6:0D`yV$Ta/qqΥSh^ y}J2yQ|].N^eFr=cޗԸ)Cڿ_^jMΆ#]%`
Tw198O\AtXқ{B5!z<=_D}iP	ɱ(SpJ 7+]!\^]Dqh'8[-y=Z=u~
HȐk#>CSWLgg^1+vuH	}q4n[ɴC_h d>_\:@\CwiY$k̕0<MM	,.^O}5-g!hSiA!|YI%JPyBeqx{3uf"$7	&|i=;
oU$WF0tZD	^CDU2&ԧN!ˇkCԴAt$$H!: g5/2<G	(1iA\	^_0B.?3بư{KRuMX9eAsVy(4F+T*O9W}pvXgy(JV	6ÛE8;T'PPy}@ǥ<T)8x9ݮ+EmZTR
,ퟩQ-pېQvM8vn)$~z;#ر6 Хrcβ^	Kv<֧s zk_O`k`K)*C$gfړ颴hjоFӼ?սoߧ-z$呧i8;l=e$>l
4(H:#@VFݩJ.f3^_`1{@{;,KC:)ݯ{_<6	@3/cPeuO#:ָp꾪V+9
g[&Ĕ:+DG-DkTz7 T0gT3;"C|
ĳ)L
k(lHzu*oZ>7296rҸ&N"II̓#'H2ד],FZ
R/́O>|s^W}M`f[X5|o[u9}ĺ{E}
j.$FFH
I^n.

[QgfW:y~>`Z5O7OW`4$(G9qvIqvJzm<S A'H[gAcXwj#akB_r]+~Z4}3\H!͈a˔Ϛq/^Rnslo(~vٟVj.ꇴ$faBޠ&Hji6d?oO+>*]et#ϰH[emX=# Bz~VbyE{W0Qm6yÃ4EeZ|\Y@M5&3A?z+nfZ)<-{9-%]vxWю&r"iq	B/uhadˍ\o'D1A2poҺh\N55pd.~_lN}90iu	ͦnS&G[!DHxi`_\ }AXY3|,\EQuz1[܍=5KtUk'8Uö-QGEY5:I˦?E''R%N#GXmmG 6ʅqo	2>'$ґ"/;P <UN杋Qh(_׮8k\4.RdV3h8$,oif@ 
~?Yv;Cj(b7&^m&GnGTD.rmZ;Re7Djm#xKI-&={ùf?vvFӌMVA>(wU:&2c&N:AI|3%{i[2+oO[g%xc'1q/RB2@NO#rEz}<Vfe^]J? Z(k-ϑ]}ɟa!8=M\
%vP0s^Ka6>HygOEl55ֵ=tYj,P䑡D>=_.o[ʃw/jK!2Y68I
k
ER+6;<]|dnEս[g
ܧ3GTnI1%H՝Zw!9?hkA
r#PN!xۗ91cVw[l#/
@bN}XIw*LSA|418hĬ^{~{vWXHjMv[ݜ'z= _&j}89'm)+vٵ.݁к>1 _t~tgOܵhx?z-&Q<aٰ)(	TI+vӕZ ?T2ƛbVN cm<
rł[8az!=e_bZvtOiX^@*1\lց8qdlb,lXt%Dx?۬a&~=m[0r.uy^vޟI/(m%{5w)op);SX<}j^-Y/ٯE-N>1*<̢|E&YV~>(PçF
HhӼ}[y0AWTxo
p΋mΗ<J[LR//@~A\ʷcr)gzч# =itMG_TTs`sRN@b0~0rDMPJMq ؘsQ݇UO
zIpMY)ȵ3j5yۧ#a+,Aa=kW
P4ߴmlbSr-:bub;VO?1S^v@Rzݒ/aPHy7>G#;̔$q;`/5-3!PEӑt
C4</UOVx əړp쬈@>cRӓ 	^sO^[U
2^^74!ߵKªEaaQb)N[q,V3ﯯ
)y~|@= 0fUǣ貇ps4=LV2A7DS;qeXp".v*Ό*KhsWcwd%1e'8=O!x~<֝3$gх믕{|*<LGeOv ͓MX/oׂ;ipzEO:ywOkCέl(#v 9U0g~ZwfީQw|y7:^d+ndZ /<b5|eK@x>zC+?rU!((qb"-,!/M~>r|gBA<7o+)zU^9?đSBĶXa٦]w\#c^54^S3z8H;^n}"OplrA3^fؙmD
#
¤A&G^~
xg<.Ff^:a0 	y
uqtK3>Uw[4l+D"m,gI2{ǒx*Sq֓-pwx?VIe2GFp|5NJY]g;
(bkx kM|M1gi]˽+)
>C;vPMtfUѓ
[Hˇ;I:~Z	{Btt9w[x]gS=Bx _f2SQ[Vz#!	sl/.`OPmƓ{2F'WhhW>_0~Q4ꎏy֏.&L;-K}d\-?Em
:5`+tiodK.TkrK-F?%{{bΓ [ɄD\͇~81@eV%t47^qГ!qTMtb@[T|+xqM(s>M<g,E R?sK-Ue4iϧ fdl<!^@q ́dtۼ?:O)?۫u؞.MeYaGcdCW6Um2դngV?:c"yxfn^|*20	
/d|#O+Di:4~ێoF\{QAV$hᶂx9YuKg0BǑVm02-Y}u|n|"A4K_O_ޙwMrxߠ}ަ?7uKdޒcS	_#9ձw,cR({}@KE㜜K"aN	L;*n\V5_9B<@nk{!z({}Qqmp䫌J`.
鯩s['/f`݂P{%l,uA ڞ6UvV't:ЍU^+PJѵS82GKyF\cƃ.˛py
y^ЈO[WD-nU811_kRd/jv=~1-Aq}u=C
!Z!;ScO;	'g9;}6;>~{v
7w̩b^8E=6]Vuraʑ%6]p{ˊ!Y٧$@^]`_er<ߊm> ّ r΅/(`3ñjeُߒ n\N=6oyukjB٧=Jd'y.rUQp,'Ejt}fˡmt^]-mAʬ,RB{m<^=1NXD*yd8,{n#F4⷏xkWR	T]2Hg%L,o@&k6O	;cB:B
x'(WRs@-[a@BzJn8<aS+alY7RF>IЖ@lgZO1q@7?DK "qBg Ée񍐌LŽ~ys}z[<zis1!UN}(O v풄>E:d4'ho#@Di˭V:(]=^b`}~i)ng)
C3 a{^VexBWli$)Qy-<j[ssq?`uT$\ '5#{bZv]vQt6PO_ex뻒6su3OmvZ/mvSI0v	1q9}u:`" qWbۓw۷nʓyqэ,/~1uUr?RJ?c٧$H,sc\߈x* "GxXPG0]{_vD8KB :}PЇ$kA6['ǚӝ;-\' EEK-#VIvI>U"0۳ω>
*upuOVF ǻF]JמǴNyUmNzy5s)B8hKjltһ
"oOѕɲ5 y
Yct٩6	G,(IG$;,40M(wE[H{wo؊7n3
SX'
-K1a֎!EA"z} 2DmHH5oHM܎2qXm]ӓabeLs
qr׵Y$
O87_-tߓgkOBʼ,ҁ T"аSLC=տ^^ML-ctx`rA'؈Srk:azPb:S9A F\ |eWȅOo
ـcMz2psNqꨃDnj?$}{y-p0#
A=L"41
({8 K_Grw>s@}{śdyzҭ6ޡN,װgіq|"QZOcs[`w@(r`ک-q&n+ĻۍOL[vL!2(B5([tUD
Ǎ_@7WY7"2eqʓMUȆ4SKp=D>-c-->P
6AʲgK~  ${X=.4ǰ:M7uq:+8ftqc gVٛ*^S.y<Qh2[ 2[f^P%UR{%jSL\}	BҕTp:D2-9,>vhyܽ2oTE}s89~vq̶gqcY-Joj.	&!
<(q<IJu
0)R4(#pJҷm;{!o;4PcCp:ʊKCj.vt
jh{xU77<v`᎝y@eOv"}dBB&hX܄y$+=}FA;p-C֠_]x 
۹T:*hx>y'jʻ*3ᩱ[/j vߵS$*)bl"f$NyG~ky6ׂgGBՂyg D,u*1&-m޾<ͭΊ0FSe!z;覬L*LmǏ`f=͊ZU82TyPBH$I}TUퟟ6
NQ:2tHK*9J }odXeqB0J:D}X>%aUFѦ)ժ
ݎ}CnYZDnWz#.SN垭͜Hzliu?ʏ@I|!_?Wƞ EM^[ks94zj#Im@}&?`>%fsd@5	_e!=ڻy_vv?[>2bj,Č윾
oйܫ!&f2ow07<$8b&ϓсiΘ{d	1`J?v9y̸EWBEGY\2&$C[wE TQ?:A[כ;$@f4{M.ǐ̾a&I:LAVaS\#vUډK%u0ޯzMQ`9ZC|JZ%{`oDYM6}=pN!`c{Ƕp*Wï5ð0ngl,\Xr.+youq||tۛу'B!ل2!~M+-FGyTW'Uuրz}Xi=[6dcX}aYl߇'	$xiC0(33tsl{X-? Pi3X=VV̰+ɼ$cco	WG_?rx?ލonwKcCjjr4'@EpY{UylO+*WVN^3IE
P`
3"SW`V=#*F3'D<btoBZ((4twny(ӰL򈖊j?t,!΍Xȕy:la%G#6|}+-}{R'*-sl/)jadNDV smȵ[v8gb$Yf&\ጩ~ZMş	iu*e9+(c3gvǝ'v[qxDvxo,a{ņUU_ĉ$ED4Ғ~r*sF,;cj])ݩþ_%B!ѯBDnufl*خ1_*J]FU+~QeBMߑ3"Ӕ-G;1Dg堬oHnTWO9M}vݧ5EEi91=EY%nٳ<8d36eqkH!sn/woi_گl壋2:
 LIU9v*#q&g 0ÔЛ z}R=/5a	p׌9GPq1W;YZ:{%r/_Z+ɲEJ+a*i%v\C߷Գ9$';P8~i⻌ƣK:Y6L&wړcV>EE_Q5bbj;NA	7k=M2n_I?Edd!㕒zMyp	Elf۽^Q_d!=嗩CheP&
:3Kpݮ1(,_6)v!^N1,pK{샽(`
MDɽ|'χ.'
II:L̒ . #1/E߅svPd>2Qd݁P$*DT㫐t]hSn"/vGoiR$mVy|0#${$/\.iYWTzq%UfK~0lgFn_^f[B[NO<G7{^~Zvzx1$d8ȉV)I6jAkm.=yڲƉWnkFMJ	(egrog.oT
Ny{%xnA%HU,,G/MMl"M@&L_Qwk~qDt#l223`i]t6rwz|ų-=0G8][\I.On 4	~qX>!}Hx9YnnU,sQT26d~! *γu蚥e(8/jC
p~R&*P%7)]UC[}-`MR]soXY&SNVLh:<~ey~EGwrBkQ~9ܟOڄ@PEa%*z?H(%d3#Rz{6-
ŪK`dHL8ulv9P0o.l39koR%UK]<Mq8a|
Ės6].
) FXo۝ÞFj	7.y;98ې4
eN:fAcPySl
vAc'0w?܇#>FJZ)#!5܂,Ke/8loGSސ!<̶D¡^[xR^U\I:&GzݏdeVB=Cw/,]FDPa:KS
>3Z5WP]
-:\LY3g}Yz^b9wۥ704<p BA9.Rs6 0дlWÑ~u` z+&q^|fP)FxeBŷ0D[KM
CX#$
U\+:@af uuu͵uK-u.s~2^ݤUP[ZiYiV8{wB^AՍ aRBNS~02AX 27cU(/+F~Cs.)8* U \?7Swkvqo"erpɞ`'4¥"*bwq數G)kлhXxc%B28԰,MWGc_qƘkd
6P,OVdȀ~oԈ[+]Lڷf5;ip6b#2wƝU[hI7m|D\Ŷ-7bEi+bU5в\<FvVq}ic<0iӕݚaf{)r I55	}BߔK|F}?IzfXdTzĭi8Q
VU;'3zvǽ{*	\5vs؈ċOLQ7RfX}ޟkP@
 L-rv/F<R'[WzUyKX<江6W.ϓ+&p[Lʟ?!Ioaj4>28'~FVx@
u*ȷG`i>u@)otαMv=G(5qd;׾8[Ta%4ЯjۑY5[q~\Fo23D^{SLekfMFc$͟j*|pHmvnlu~(Jy9r|jR:迊fӉF}x|:1_2j7؀=7e0Z}Ȣ4fh_fgo䷤ةX0lKRѾvHřsχCCv71![rƂ? H#)c_mK{?NnDϸ<4kdZ+B5KL lg$!a>Lo	!I:YTtξg &(J3XMC6u(*_>eoUʧ|-8!L.N ͸/@6J/5=;_׬H/[ށ1n%u.RRr/MtRs=@XFSn$>Rn9q/!o#aa-h-pEM(-[ 2|mނݝćj;:Rn,jސ"T`rOׄS@޹,fYڬW~"I/_p~:wևΓ8d`:&?ޜ8"hDP`xHm)'@g|3['M@F9 }qw59jhݳӶ_R>Yצ^PᅤG8X=}o۽E]M뭮iw*?8plD|N ǅi65e݇s]@liCdmWs&ˊmPJ"cW;Hrcjcf<w2#Џ~&*:\~T+9v_q1}~x<\w['GEFVKt< Fä{PG/PJ܌
,j?V'/;~fk@W)^7YûZ9EZ"[BeGy <|j	~[QwFȓ}C".l05Cu.sx<bIA/zjx@/˛H) U4d
0ړ7]O.aagg>nu킯[[qDtE^wX>Wε>(ڌcպtl"ܮ7	n<JUK
ЏZ{jbk- o	AF{KjYB8hN5Q]L"n_oDQm2?ȵ>t6iÚoX=a qGfC 1x8t^,D%$f'ӆ l]/BZ%N= = }#~FelHh3tYL"Dr	T#j-EٟxW_nw-/xE,!=CJyi2?b346ԉέ[];W☎=`sqj|Y3]HJ+V6hQ*|[Fq!GO8Zn(d=Bmۮz&̈́u˅'p	7ψٌNoCuObr{sGWK<y>4c<ҰkUݑ8>
dFj-]Aǭش{okwxLB(#y}f46PvD-0A
d`Ug֒vO'!6yq4Yp4K=o vIrhiAS{{&QNiGOyXхv:Yxq/{з]Av̖ŖV\Vo򺙑Au'5@9G{_C`C\0aE$_nykQFs9dNvcI>f_?6|h/i-ʅ3/	v阱o'/lUXYOJwoז!Bqz=NXjekȹ~@7AeX!K
sݪPSfPEyDD	_B`^ROW;iפN=P:ce^q_0Yk d$6|s9||ghGiyelӸNWć6KT*ݨ]16xk4d6&㾨dG؇!7rKNJx&*\%*A96#cɶniS~q	^3Sl6pIFE$eB{9[`u`&<+8zc'OSѨVyk̹4^%!㹃#~/~H!|΍N^5זՋs2ZxHUmO~o:~G(?I`H{i3CA
oZV9~.1iG'Iԁth=]sJ vreM~l<ކ} 3(u?}L\H][ 29TU97ߟ:21<("iIx-#2 X1ΨmScf5XO!h ^4rT=/|AVH,۝/kB\h<a<T{?EN>ߒ]QuD1g&R046o1CJfg~C0J!n;0S Wx] iZ/	_jW\/r^R2@gY06g-ڵ 2
'lZ/RK(&̒N	t,Ϋǻetƹz!HuW=6jฺ[Z3.+T*7q>&C旪lLaw,O&:#]mW㽲ր@5|u/?3Ǹ$BxP6ZN^[w1,_~-N=yp+ؕ	}?{Hq] !+ѯ¶/.>\ABl"q@Fe_%BSn+afTtq חfwb#`:6]gx6Ie/*xLl<  >VoX$vυy vn]c3QWtۯF`[VvzPOS;F
\٘w5ìdP?vQ~zF	5lfx ]OoźA,wb~D/Ҵċ/#а͹) P	%hWڋֆWw8"VewL.#$7k;"wؼ*YėŰ;}0xI"0SѲΰRoIf}LY?Q'?A9d(3"KFTS+
%Alo(4gf#/!<M?X	 aTUmEyV'322*̼<CYEHsZ?rBc.5<Mvِ.:<[2$ҪB!'spZ?'
csxaECz@"FЛ`MTA;'S!Е !_4'Z7.<)4RO
qTjSt;Ne$;D	q}w
{TչA|Tj|rw8A˽z9]ē;G/>y/T97լ|srzU-E1B3~ƈ;
Wbü@
vmfkǽ4	wCk,4%-\.JVvpNVJs[.m3~'uC_18Vs5Of`LE#0W~R!߅rWCټ
qJ~D=\ԎYO{Z`e3U&Ijj3k-`UWNMU檖(ɔKç;-n3LdbYY^YE/!p%k3A9ph\3\訆LATk6>=xBG1]a9Sx
&G1Y>?7ړ2@I=P4w?ՂW6SNLdLynB4kVjE$g
uHlp{aoݰ	dq%m	17HOHSn#7oVP8^o}'E

ZHB!QCLX ^#|D8te#FĦV|G,hnPt9t@LDIAWE,&s.YNZjp6xn2 (gL[C-h
Rb*=Zr(n77nմ:xL[,KQ t
C3Ft:i@T׉uWS)5Lܞ؃cWp y)`r7Ѕ[rC:{(t^獽뾭61\sw-!G!խ`F_4`.J!xww4I󉾊'kqRFf<8OS
4ۙ|iI%}.k {B6.cƱWH^n+1<.%4?DY@FEHnXOe*_D
uw_P剚9pzZGM ˩j;V,R:(SB)v;ǯS#BjyCn;5P~nkwǖGiCs6I+̂^8FZp.d&]<ռpkA}ѭ~ާ,oÝ)eOszOrs?a~ iooü\@4 =1=޽F0bo<l9^u2YXhX
We(9VdL[cu5}0
N?u۝?l:+[e~xQ0%P[!v.C񿂍@
t<D '2KzђS5,Psg%Hs6+y3\jOë4o?J^x:OoK	Gس37Pz7a1Ęem1	4huJ
-hc=@lmD1@Tz׻Je__Vхe6K-!||¼\9$O
?_ؗ쯞6OoHM]QAe၆ l|z^jcα~ZٜQݝFݖvN96E-<bI\Golf6FIS6^h_툩AفTTfKsZ2espDDrʏnK=ļ?ktt6Tͫb29}
1?=^lT5ǰ`rH[z	|:k^u&v%⃲yA̐G`j'u_.QE;:^HV;E߫w|'c&NQV{:"/
\8'򫍍P7.~!K47Eݭz#FHq>|galX{%>=/JJsa1j[ 
ߗ;,gbfqrPFvZ#zHFF}uMsO5>UO|AZXkxj`Zr
QlQç~A,w,;wIHMwNk()ukDRh*BR:mq`XiPh![HW~l?E.횱)i踇	a6O܏mnu	_^&?dVjw*4 H#cQYD%%ѱyھӫl\&6gFQcdr`KcMȊpΧ8i)L&]ۀ9^p^X?sr?*57,j
"[b{@H.r4R+OA{!r\
8jV{7HyxII,-P3{QcMP.(/ ZZ=~mVrgp/VNfخ&7@L׉yo3JVn.ďep!dpqG	%QVAϏfr@Eܭ)36t ,rO[ʣUx[L"U5rv+VPE(kvp2{qET'@7%A|7)L4}X4CG˩Ԍ~4//RǞ.LLv H^DF$CePs%p4/2/iJwj0cFb\x4Ū6G_P?M-JdC+\ {E.[pVГ87p
6]"&ttO_$A- >ϋxoo7tmZG6SzL>k9;y>ׯ>}41+B*9F˭Xl}MnWIِI}λ1 f}:Xk$L
 ؆Z@O^<,ӡogʲ92/^૞ZB8B~a0[s_Y|th/*!P.' {Ӌ
	̞E;q\AIf]i%5o0:r3.3(QSMv%'H=}j:~!Uר'@H4nҏө"u%{NMyDၪf{K!+Io5k~ףΪb'@Gy2["SSdrOyZ2XBҖ"ɹ)s,îԭJ4<_E96NI~;I.էp(^Fyһ};*rU_dpW>t&
tO|_I7 VY-nv-U&,l/; ;d1|C	?5՟6K͛nOM(nLf7-x3U):1|z 0~vSt-phh2aP{xyD㏒|Ye~{,{if;B=_rs:J=Tm ;z=ǻ;=wePDem
kBLkP ]ޖi)B#h[-%u'T'7"^vmK*c0
X~whHGw횧SQU''1;ے
r`#WGlS>:+e4ۯYr3k Z]{6zAnϼW}Gߜmva/ͥJ	]!tq8E_=Яju/S/|dAeN!}(#mt\x0%92
B&}:TK;1@һ܎G/XB	Zv5j0B_g~YӠD&w@3JŁ}1C#
D;/0{]@786/6lOc8\^\E_]QvM[=Aמirj#{sf-(qY2-&>d+
iH*zaxsDKI׳`(ܺHx&|! ~!.@Ө$
 ӻ9	_BXa! B!eRLوK:S^`/3	9Δ]EaqMYX{:#7_/}p!C14b`REE^Qq8^b O}D MU1W:d_ӱf1s\
_B6kSRP{+?նqpG8c^r	%Ĩ
2wΒ{+Ya2o˲ǽL>Lo9*UnD/h6;@YwYE@4.\T}K/sEqĵTnO!:&QV.}>	Sj&zwW$ b'C]m?y7U-%Fw[saKVD Y(
v(ڀT6{iOSSm=F·>B[Sy*P}pJ^uz8h57;ĳ};@Dę\QTͫk_J ~h88~|:ŝa:6lK~ȴ.&n*"rdɋ'`?AV&6
U1=3MXFDEiA9_X>` 
VtE64

X`O-etAVҧʤwCpq~,9t3qrVШ?Rq.M?U{Zm
%4qR)G8G$vx5&垾Y1L!]yp{^y T":*rTj}{ǖM5(;ϩ|w5^K+?77;`ڔ(].hep5j=7r&#].mMX͵F
OC<SQ&	cAo
1-) dM;!;WA`o"\3$<+h2-OGP{׈@y"m}]D*jͨ=GJ?{p iu6k+{xlg&[Pc-LƕHJ7[I6=ԍB9"L4'_=W_ӬVdۧ #0riKQ{<?4C._﵍n*5PfEY~=m	;oQ_K82NcvM2eλ0ApΕO,uͪ)ܰ|d*wϰֱ2
Xjs4ߔRt0c'ܕ6|el#?XK7,Y*WbE"WtdsbG%ۢOO#}mN@uH|Brir?[ݰV"DLh$/FZ8  $-O>5R
v1TM5|V޿yP
p3uK>SjF`\ NRw&q/lZb_2ŇO1VomV6
4
ɾmdO'nG|7N^>t4<Z;LLvͳ:$!񅡌,h=?
c9J!RWa#59y<i&+L6kT%ܴK*xf:u\l]䑥$vA䄸a[TW	ψ.Hh|?O7ёϙ3LJ"tE6j"ia<u[J@Sߩ!>Q2:6 #U}1s2o[Cl>T97'=Md %ӈX,PB̆4%ʿ'p	?sT8G|Ɋci\gzqc#սJST=FHdZٽ{y	cT1ޓcE?&

G ZSsi! <>xħ@;)C5et҇G 
oV}ao}Ĺ\3$(ۦ;lpn4kB_p?#;j^Ս"%<4/z3wLp9HP>EzyOqߧB(C]za%~Kw:	ҧ9+eɐݶjWIjQ`'7[WO9dV(dφSUG5ϱv>`o.dT`;/yX1<ۘ#-*q=̳t$^xJOoFf)bMf{yB&I	m{ D1b3V^/bM|0l\s#`dF."^ǡq`>Q^!v(lä
jS|=Ek>@،F-έP{!wc6{7/AJ,	-m
0 ~,
Ui˯Eqa}mL
Ev/W8
#,60dah|=&a}l
`0)Uٲ{T>*xŭA6=#&A^)aW(A!<=|O{xx$;G貤~v!`0P@.z/PL#/[[Z28>+$X92x}+AKq6O:Lc_/)St&t&1-m.srOztM܀)<#,8[-6TɡE]-ǬV>W?$6?o斿,>9e*5^vES0sbf%@KXN$eI=:Ə"NPfLzKgM.D=B18F ˎqf}n#f4F񿼳?cV+A
mkn{ym);$Gt&|%|)cex2'(	*AN"T(CB1)Y@}uB6؋G/:+
notPd{XM#nA	X~nTE7IG/PrT[4de{Bhnӭmeo2cg-{OOa6!W#Xu_)lM#%V;uXi3i|)a#T=cP%C-/Rl$uܣQgmRfu`bf^6*9GGՇjq׎")@W4-6C?1|?y/tr͐w%JM2Wf>>ioe<}Qd#;m5T
oUU]h!|r"<fVԦ!N2Zӂ^[CU6Q fJt ~AC@J+X(%995Ml[#\LV_!$&
ObFvKEiy8f?8^*ꊚC..)\N"K߰e\c4IFVa~ib?$Iɽ![7nr4H
*,ӆ'ɇzseh)	9I6k!jC~-A g;]ǖ9ZAū#UzkUb	:_
;&m$F:??TIn*zt!?USaQIdq*
ֶg<(ZOnZ5#rwY
09μ[q^}>?L!! no{49/FME2KHxSg_i|e_[hZ'QO6EUi՟${>pQpl1LEpa<ZMmU'wusRd):NSved%;㿌9){Xjt͔ÙǬRqkCD
gF3nHą>mfRLb8sۤ5mv,vfr_eiEfjXۘAt\㾅=c]ڣ_Ԣٰ]9~X$jp&[|؍6{1|\C.@~h~CG;X3zMei1Ncg6~	UHwYwQuT
Ci=KHq{9;"ő<NrъpK{;̂_x<!#~|=u#f*QKIwVch:Ew]9vI[ 
޳**;Ta6nt0|V2pvpۆEOR<Ê(
D<NEƼ FO[q6uh{<7ũVa)EҢ:D)VMҊ;[np>K1.(!q1)
̊$tcWL^a CV޳Gyr4;gWf$o<l=h.mCj]ʞ>ס暦ϗt~kaޜ9+K!Ѕ%O?ݣȇN |vP:qzҭDCis&ƃ$˰Ѽ+9@/U~Ҳf\fرA~=jiVj#[I(ʀ>\l.ۀ>.Z\uJC7Ewc9UU"rrݝj]x^}ӥ'()ZW fLk=?a$f".>xlBLE'U9ZS^
Ow q!DqqxQ;vBL28`by|dzwB{~}iE708wXdH5M5d&D0b\-~{vđ}K'ܩe.aMZX挺u[r ?|ltDRTu(Χh6Z;*_O]>'CS0hYWH3/F2OǺTS
X6L\@fsy\o[$ sfb-q90!_;k1XR~)3Rry5GdB5n"xPΗEOHkNfZ1_{'o yw+u)r+ݡI%8rJ,cYfу'݀bFֵ>b]hCz*_ٶѦ%mYy%d9
~{+
Qr8$|Ah5E=Pݙ_?5 ޗNFog-!8L;T̯?h[u_7H>"lG{	0vDcpC
b"]o>>=g7v[}lZg>OI]z'R~_P?b
X[$XG_׼JvK_6|oRkqi~~ɤFpu㴃rdF^W(?P97|ufZ"oe}{e<.ˢ⇝s
jA|4'6*.=gfc@,D{t'4$}Ut
U)	"\@4~\s&<7pԮE4]p0SQ-l-Ll66s6gXhTwUJ6.ym2"(	W|jz_=C-  OWՍMrN!צ ~T,io܊xh]|Og[V*}(5e+
X.ΡDeu	<;4h q>ۯ/<劓qǀ@Z٠uu;&PH}6.Ǟ̂XlWZ&%mh_a3No"v^]Mqc2S;7sskN*whK?-G߄VRa7CR`%o#J O{m)vLt%kqF?o",
 
')< $tcb6A֭^4!8"ƨJ8\By؈18d ]B;_I{W<=H!wBJ@LK^.wo猵c+\SvE/atÆЛ"% OkLMq%գ,.7vXMlTk|i2)߅G?odwȢ9K4n,l
[zv&ʫ~ͥ	uy(͊
FO jHɒقE|Q3Gb΀{xy!Kr;ǟ=?N%ۑ==W=Vy+(ZPca ךrj=l}Q?F~h&l=sAi2BM]XkaPuup
h ``&\ATZvp3_m^+kCyv?C_xثP;0܆`D0Ǜx>AJwЧ=?r^Q=Ky+LѮ,U
1c*鯮̗"
]aQ
h7\}ϰ$/n/q
WVV,
rւC
;bfNTz=Ҋ<0bL虴&z%qK=*[Gɺv=|:Tbھ֏`kRRjtgaӤԄz@đt<|A}[&yw WU[]E
-.?ޯGҍY$v

bz+	x<)7wF!\ 	(Hu:cxZqQurU8C}m_λ:4`,ѳ{FMkbq;ThI/iYxWdseG'hH{W	Lh	!n5̧Aa%\P
O#u6Sp 	2_[s끣Nr5%&P*_f
YuP%Du\})NDj
3%'/tl3[ 7ST6(yf F}J066Id6i:PtPk6$)f=W[rN]	_KOf?Tyx@Q
L#ɹQ߂eY]ns}@ak
~*Lb~`Hp4tyX"^@([%WΎ7ZB#*ZN5CE}տć4#A=w!)E]A&kq-2hn&3kL/,ٴ_lh.W
7;:y]FՏf%.Ҏլ8XFHMU1?C{ࠏ>&ʆ7Z9Γy& *gX0wA*1TUGd#A	̛º1yD94hJ]҅64B*0\iP
F;*lժDGI:{]jeX&Ƚ>ʡqc][4٤I[ F=*
} ]t Q}bVG\HH3zؚs 
o'vS?]G43*&%A,AmPP;i#׎ODU lWzDD{j@xa>VN9fo	c-GcKA~Z{餍Ra_Y2&r"PIu*d]{N*
7ƳVδŚ:yF?"I%D|/
I<WۇBJvɧ6vJjё)z(iQ,
ܿQv\*5^8qo+; %Np܏wm	7
CSO] O=r5w5Ԍn'^q=T~$kx`.>	Vnj)~tzGJԮfz/@g|wVP/ Y珓;ˣiv0v^K9|UheNdLzں-\2!xfty]zuMj)}j0ߙđ5 ږKU.twEO9{"M7.6:CsMMS	ׇӶ́
-`U&A4Y X=5²yjۄ}BxOԧhU?4.0z~{iZ٧AkDä
{+<V)9p.
nG
i89Ks^h^Ul;wB&SkLH÷{#iZ2Σ#rHz+6>_[?~	y nӐ^SFEռلc8~jۇf jC9
]љ{Xh[-<v]3͓%7
SNc-'q.X@x+(	!9]IZ(,YsOZ9vR%~!1WCUoXpFϸ$!gf/wu4Y= xh6ŞP6%JN(WKzy!OW&7gϜ
bGTE;#H򆈸o㟃̤ИhtZg}-[l#_9Y*|4{X>R՝7^y@+h1̽4i?ne鄹^&
oHϮăK~`\w>X2zA`.D'hд4(}z(#?r\/&mAq-ysnT
LV֤I1A_jW15};{.%;r̅rJ})yg>zk{}EF@XX@bp:0Nƅ4yx:	U;K/<y]cPG#/_MPSޢ{Nxo{?͞c{=@_x.O6Jx6[uIU?hl*ox0g',k+6!Uxg{xth.Wˡ6oZD,J7īg,E a6BmÃܥ=}z(=<`lmN<]Єq)eC15\}*./O!ܲ%b~E<4S^Ӈy<Ӌ%axN+1K.-|lMzYrSyzlp_MAT0i~aOr9]!vFEp߃vǥ=z?)B'kZ)0kκ>Q#ޢ7c'c
6Sl0?_l^ʺdKoKWЋGzR5gs+&8jd]ho.0neE#FnQ8Q
1HG^lɼQ$~n!~6~nc';FB@ W2pSfb|V$@^ IO@S)XY#Y_V|ȕZ!S3l^&'&#F焹C"6ĉѾ˪=.?ݎX;Yez#/\g!2F]s#D8mr͙2WrBoxbX ʰ^O{Vq{SR<
qxgnt8+tZX}Qt߰ &vQ%NiNE;'8oD<N
v6ޙSGMeĆ"#<yޗE͆3"ה7x1`wzER
lv.xJ& E#a;P9p>!ǽyc}H+j_8^=ue#Q!vP	j!;_>^îj˕u=n虨}e?RIe5Q9M
،]qO<(K4}p[$4ڇ0``$noI*fB'('2(Q4N#_(
1?_S>W.{"K@2gg1dr+iaOo';R=) $ǋttP!A'IjRG$tYknk{?wfߎ Ig
=0Y,,Rx>*Opqs,fT&Rbl)at?2=W~VSeA{NFUT[cod[5ԝ%^IQ E6){Tq[TK}UvQWCmN__?$Wہ! w[?gkũ؎.X[뭯[,#6:yƽ˧')Q<?m10&ޝh
s˃$4I c:UlIמAHm,+dWxtS~x qvC`QcXxM4Dfo)9^ܓc7+xr徘/?>|>2mTcspr)oe	hbO %?_>V}rk&{m<g>΁Ѿ
= z{G|d	z
^(pJD8T۟18nuEˇ]_ w̵X#0~"Gn$ӛiͥ'%ߊmr6m.prp1Kcqwd.WQ:j(>?Jo0m7> BBWUI]&󦤰5Y?glݽK^yQW\&Ӣ׶5ٶ*G묜k3һR˿YT*
loHu&בS_da3?ھcmcke< D$rD"g`Y]˶ն	vE!_mec{O9-WФ r`Ui`[SWYuIq	A!Ҿ
Yeoġnw4rFamHH{Krjb\S!{`He0G~*^p7N@URp. IL/>-?2ވtAvvj%.%KQ\HHf"ߣ(2`\D5'>'+.;NqҫIݔg&sݓ\wkV_o3t!>UuBQf_Uǡ::n6riu֥|ͪYFѺPLT{eY	pVP9F+w%h$q@}TrvEk!+Z!Lm+oC/k]>!V{WLn|r	(M6\wjoJ&E|,pV5l2#̨/u5.yGG77zeisVZ+cv%!Ʋ#?*5Ur<p6!̃@FwEP"x3* CUeOnJn5=ѡFqS.|XZ%0盘A")HQ8`5tW0"^"辪IOv%4y^Mf@Cg=JQ>U5mow67dcSu:ƖO ,Kե5sOQO%\Vwv	:j6hR:"&?+e|X}4pbq+jGsa(#SY,$lS=-J
ٞxmCGoϤXnV'c])$gn7׉hpߟ+|uA`G'1A?{v):"1vW<3n͗vΏY_X%-c4kәunG'*ݞΏ$e9BL42;z" כj$tI`uZ6]XaK"suvRUs `ɫEh=
 \n:IU; ](,@iG%g~̙q)z?@YdJ9Њ
k_q::O5tMx1j\EI1sc2EJCʵޯOh~4"iAӠIuh?Hd9FE)C*5/z#[T99#{43|9Ϸ+[w9ϓ0tت5bnp s'f2R
mIx֋17-r4
֣ds~yW*O)5 BUjS9WYB&Gͺru}Ѯ0c/f[Aj97L5
L[ JazzC˘{FOfK5[z
6*s=U8}:ɠ芾DQ~垾0vGV-}{J.RW@rhݰ}7L%<z}&+m
=l775Dn[l!~s_gPh^>{ਓU#.
ʹ8xv,n6$fxR(_?zS1A#e=3ˮlJ`/A](y-S7DPf1V:
CG$:Soǩ`G"eq=t95Ke]%>	!1Q-VtC 6ۜ)Zi	Cx,]N|*;(Jc$i	g@`o)m-QQSXp2|>z<~7gI|`&	ȌI/
o+?ϽG
4řLO<)I;>vōB?i /\f\-9z\cDݰ{D飕=ڿ֏ʦ<[{s&0'״a(0e	RZbk)տYn٣z0kbeN-mY8f狳$-ܺGE%44nBwH:].2:YUt@O*o;)=ySM޽|؃ @z	'aªpVI 9^efS(? Mf(7Yc KtcV5Nr 	*>'{NY{}՞^tKi?bOF0>2O{EeCOHb"Kt?+1MJX%"KGp+q("`Ǟ/78
c߹討l>&M灲p?ڄ/x#X`&)$혛% \TE!PZwBT__v@zWH}G(I'=BB&U탖}Iw3Z9'YΑ=!JҚqfn
C
g|LD]~x9<<7C!J~dUJ{~ky7w-ewLO4^^0P?\n o|d%Ity_YV3pmP9(:E]}Qesw/DSc2Fbxev>ۄ|k
$wsۥNreE@p
>{>pL}"̀2U/e	\LJy3A2)k跠1+U1^ĺy::>f1=ѣ*2Q |Ec>#F?A=u
)nB>xU)~Y&kɜͿ03 hB~"tF0
փgx6L͘{5y~(}dzS99\fHUͿs,
n:wX@e(
}k%M/J̰%Q޵L$8{ h'dD#-{,̧XbVG=>z穭	HT:;S?.;/D,ށP"\k	$jXLEh/o]kW":	GtoP3Aq_X_
:v9~p)e\6{}'ۢvʸ]r{ΣUcjIKR@NfGM k?mcj>/
y~xA`/%j
#';wpŘ,	AY5G?m<j%/@&JPnpHovSӘ[0)?	gn!©rMiZ9=!'jzxOkCYO^̨\,Rg~$PYZJ,#vgD mDulqÓ#[<e|=wW̌
Ko'#=L\J
Uw	.[zb!SONiy E+g;qE,WvO#,J0GB텗tSCou}^dJY^?^}k?j
3ZO8(u&MBi{z5"ܚRw|Oo䧤y<5=yq4hr-k^W3|A]BcFgOOEhPrziܙ9ڰkRhAbLTTkLlF3F3{̄仰*&r47
/t=o;q%r
\8C{y<K
pM=D!<QR\{ag$wR{XLȿVU뷖}E(c@I3ĕXA NAuʏh캿~|!Ⱥ7*1г|L.	RuSb^*"GlaֺNBq\5<޷h5N̵~XPVؖB~=9l
/%'ag]zOKAzrSvLj2tw2lpS=^Ӕv6z߭
D,]uԄye9C')կ\gy$ FT-RH6;Sa|Hfˏ86SJjPz܆jIAp}D.6ѣ>2@){##z;ο,*E4|LԈlW"ojM8jGq<~{04mO'vdXwռɞڍ-X%C X=@ߏ|qVL vz<&q,GFs
$+VTiց= n_iq8bԧT4p{u k) /ӷCG7LTHѵ\r4743e؅R-}IU_!|[~-Ŀ6G$00qGb7}^ϰ^W>U/%*ޫ-NEYb,mEN'iG߿c_i!+''F;q9E}Rt{M(%[|ŸZa.b2d7MwGMJQt#oXK<ǽB@}-'/8˚#Qs
*|"S^ʳ>"=N!G]Smz [**^it=hi_7,8\"^J1O;6V)BmkjaH\RsG틟V\{WG28?B{+6PHs1Mw2$
,Vwi^9^d`epQOBJF)oqB?
i$
nj`	;@4@uQSk
9fFQ)*`$ vrX&n2-s25
б7qגc_&&%U^dr]yCbj#~U~uy|1{k5 JǓv)%\kWp=ӳl&r|Ů& p3=Mf2y-_;8:PQ@PjAOѨGrt?R:c{|̢_~B`$r𛜔):m#9h[<?M~=O\zP9˙#)?ʅb(/~3_-ccBd1=*j@fo
A%|W=9~qvtJ~,Ϊj'gvG?G>ܕW+
;m1aYI\CۮC

jg*vTINމ?tU}D_kPc7opk_l jQ3"t/+W?j#5\fާ95'5MLLzITrC_;o$mkt-JS_5C3*G
֛qzR-l-mE_ߋ݇>?Z/|*ͅJgrT>^?%:zEnCє:m<sV +r:#NaŜh_99/W
uϑ,`ܯp
SdXnEwu"]Y:rW@Y #[^oǁO9p=iRs=y;3@tJXQa%3UoA9~A@ZJ{_`p7(%Ds1cQ&/ilZ#2ytub7XZG4geK4NWv/T4"R}c.WSM$+;MQfG?EOOt劅mֺ	H@
A;&8D{NZ2M@掜>ɽ΄\QvmJ8Ldpe31nws2ivR١
9AST>STKQ߅j1td\ %tuWM$aSe$QZ#-_
jI#xtvs&piO4u~28e8]8=XNW/'RiyoVPO!s	$3u骒=海hyWB<ģ߂#k_BҪ|9Aap3a,p$wE!f~"}MܖaܸdY"M`>߿NSͣ7quOמ=db9=S;B3OAsh/yس@nHB|e{^8ݗ4pmP.e+72W
n8x_k'%1*:
;J.
Ne"_vCq<3RzjJ-CcV'.qc~)#u!X1.񿬚O"Я0ƹ?	}[1E֬ J
S%epi6V_66</<.x`7%]
VN[э%9JcC,YD=f{jLl)t7⣎ S|,G_DVgSnee-('4w3Xn8nIA|$t 6)i6^9	/)@4Y5hn|>o!v׋wp&Al4j}}qJ&䋄8(4~~qqK	rV-ro0Ro13چ4u:eAGS]zE4 *:*miF?| EhjuR1ğJ~\=B8Ucn"++!ŀ1yG_lS4So;=HIw/ob_hꂿ:y 
2=јfEj7kg8Ub\2E`R )>B!i+WE,)8W[>	JO8\ƾ&,jO*
&u'%r<@k@M`}9lt'Vzεsp4/T,$D[Q&Lpn޿x򑹿n8!~-ɖ8H iBGʅ(HVoB?⼲\DdC6MVΓT/5CcQz.
߬~cf}S">
'-!/4S6ciU$GBLfL^{@NKu3Iw8CLs1.]:x4PܘK!#`:kTz&l1=Z7U~^mg92Q0YX/dm/'
0
4˷0o-xWRQ®0B>YgNRDBCMӉ/	y<)^|*X u%A@!<,lĜ27X[Fᷳc 8C$N#nӥWQ]|	Xf~~)p}= ܈= 5BGe/FzqyY*X;/tPr09lo+[$8cH &:9Kt yXH<zjf/ !vf6J·gҽ;<,ڮvnŞCߘ&9-1_l3#3)ܜ=L5$C^KzgaxY&	z~?Wrl>xt 5:v,';EU^?J.{M)::&7͚*|_<
Ǳ(빡P|K^/<!ȵL|6%$7.:3)XL#)y`\[Svgp'ZB[z)xI.g+|6[1ӷBRqt{44;>r?ڏq;왍wF2%=N3?r	Siz?'in
жHF#%[4OxsD
/lLqN7v=P)wdĤ+4sSkW;QCɩ>esa=<><YstH8=nc_E&ss,'3ߐϏ+ˁc|2xmw*[{aN#hUۭD/kb.@Y=`s)%/	_+f'3NE\ZU$J	<ב'Ez'7w_#{qk%K,pr'i&XPQb`W?*{FĥiƖf|~2,5JRy~lWs:Av,FK_܎;ͱEYC8?
2_H~g_ nQ1	эMLw$\%9Ue\
r*Dk|]y}_E-Խ(lKd p
"a^C?s<f#e]YBW(!r%l4Gχ
5]ap4ts\.3]geh)8~Rw'_ZƖ.ܷ1G\b%Z Pn|I<?4`:c1-|ʀ+U%D]pJcYHX}yǖ7	b@}-u]Gr\{,(uw43.<ʄ**Jrfu*d|WKt;maL
'
Gŷ{Iɍ#=@n1@yzX;lJLh0!qEZٙc)yn@>T{Ӳ d+[obGY%}e9s>9K{;s9m52L8)w{RY3!>hV6,Yd
r2{ɶCR@n,BH1>k#Cy)w1/Y^N(_`w>g0.Zwмˀ8^Ջ/8;@~vqBBb% ,j]Lz),%@9I.5sŝy<׽kI95[KQ_߹/aW)M ĻIXVm"}${KބS7)#bz_U⬛惕HHs}we3i?X]5yZ)G96^T{tiDԪKvOb{U
m}<H<7vHjEHzOfu2Ѿ7yejw}ksKT?jv.'KY/N;#zpت!Ȕ6o#z+@'j"w-\u@RZ1ʑ].QAf{#_+>,Seh$)vܓ*?Qx+|VǏ33.A+PP`K-V
kJP<z~WUȎ	{!u@-+^YUpH	0k bd#2&XZ0{]YJJC=LIq>пDr^1#@^Q8P-!F8B%)dŉ
=#)mʼA~蒩ʩ7(O`c`e5-6':Į7כvte.(iQt]pyCSDI\)8h=GW3:|سǊ@9f;l܇Jܼb"{4~}m|r`|, U^ai^*h72@U?P~S0uER{GR;ÐM8=2kx=2?-@`"SI@i-[;+{Fg#M;#?t,}GD`7~r/sjbe-jJz9tC<nu<*i~ ^-EM"-UyEq% Kw
Pj~U
9+|GAEGy)Eġn`|-UBuB~95,I}4%%SYtҭ&UZ78Z
(\s,v/`W V5nmJ`k;s$C39	^%_[KvO|_ګp>")d9jd{ƻǫEາL|"?6{OvU"וM^vSe%jgj
 {o9ge}-+(jF?]|k	(*gQ:_Å>mbD.01a[;W!TLGH}6)PJ<	
6'/Фmx/k	ɸ30D&ݯ5;`eh{rs|T7mR[(E@2rr*2xKFӦb[?
TG4`m0P1K#jXN)^ڢG
̻>M}XBҌZ[OQqf#0N5xFJQi񽟬ozY3J0sRWPy\A/j\:I{?Bb8>DMTI=E;C,-ʉ@>;YS|z)`B~_T
af򅸽/T3j$syg}}PyP t8!fek[\4KOx8d(P:;"hB9HҦV'gkO7 C`FmviI(20z?_gv)&O=cPU9niݝː <G`q>B_5ETx^OΊ
W~ѥkSnnnj8Q(5?=xZRlN)TN[6m>ugt;ޮoeD? c`X: s,aBxƊ.['-?!~y4^^0ni
 P-4`fv'oM/Ϗt}~Y,cDp.p>}1UI7H-ȩ
ʏbvR/ӷyo(/*nz[3RL^;]r
g}!ab!eI1]),W`O+=Ǒߝ6nCMõ#u@Ic/өp{:Oԟq>@z|A~>*:w/0' j)b4Kjv>i(d!j89{>Ǽb /͵l3]?Ͳx~goK5]YsD=LCZ~y@o헔m=DMh)0E_nt;AEYi& {Rj/>eFFgvTuU;v<?1CCx-JY4

	ry|9bG*)\ݪn0))jpPd[Ϟ|) &PK'?cGV</@~u_؝^OıyRK	4vNCՒNl,m8v ^cuoc9FU|2.s\* ͈h!{ڢ<KWY.!-jWvTJp3>"׾?z77zH}!y'/(U,h Z8x)Ś^٥ҎbkܮW\NC>xcDsQ'vy9.z;Ѣ74ej5kN=ԧ.X|Dla\ji^>֭<j񛫧u'x=b>Vb1Yl`YopbJ.xկ~< }?UE
E(]foy3~XQL`c>ʛ*2r?|@rAb0)r
ta O{b qXwH$^?GM|i*,~A7&tȳSoP|i=ŉd"ƳMѹ35
x}:bg;јCa		*R=S%~THl{)Gh=ajp8 f@(v<d|*X(
}<3n㋭?vdT9,֎)IٶJ=Uv6,-1WkmIήzEW͝~:	<N/tOMB*ucj'| cNX"%.D4kk]&G
Dt4Z5q5Otfx~g )0*J>;zn\4r%a%;sՔ2!K5Hy|ux9Y`guo>OKL,L˒<I&Ӄ';CU8h.~yS((!	k	z@Rơ) Gw^>Tt\+vr@$?n|~IJѱ:B}=՝6]r7|e'Ap%E>M~I~+.iBkcSWGi'-?V[ѹ2 k$G΃OZj,ߺjc#jIf7KBL%Ջ8q%9%^SW#}wpqķw2=@fJXHZ=pW6׮¢iy,
i[sar^X4K38t2敶ܽPamj!9uKc鱛æ#* ~Qkśl=FXZeMQ$v
.J%>$迗XjYɦ1Hb#kHxU?N*~gg/sh+zйQSA;x]<$KKETe3U	؟j&hep`5Wq`$ҳ	q g{lsbm~IYr/B;q\#j슉ѯuh|5yȺ Wƃu*eIxAa}?o=xu˪xUod9Ai2a	+;	/Fvͻx
|ؤhkl6///6o<o p9TpQ/6%5MJ1zwv]`R^+n@3M2"v-,++gKxi4c}8vyQÓjF{]G"O|S$gafslj) CL\i[jWSY)96X!Gv<IV%3@əݗ+;UCeL`=f?r3`Ca(7k }M)r-LD')2BΫ_4^%O/. ωx[uN2z.BI5w!OMVևtr
M^B
؞I2{G:7}߾
o11yqYs*r>he
,P*yDo	7ҳ>1O=;xg='~>cȗsR[=
/W?eo>F!	ڗ7=_zƨԣd֖_F={FP6o,mSW_Cܫ!{$[t(qpC=D6DW)"Q
}WPfʟa2	g׉ZTH
Eq8
@$i^R*V~1cPR{LDl4P#H4_ޓΧ'-	n:Qd8XtG`
>y\[	/%m*>MJ{;0g
<df;<ج>WU<ἼOʿ3>=hoC}n}!W*%./MfwS+Xu0&nZ!:A
bx4|]毵k"Ӳlf+ Hѐ*/=H~3v>3}˳ǖack/_!]mĶ~?ĬGBAO[<4X4=8bnYAm!G=%jxa '.<͎J,%Jh
*/tg:сL	>
g'o5'WK (}̉WB訆ttǁDXgi6,{L7i 3%	rƧ"]CvW:֥-j]wOdNdmݬ:B<,x@3z>
zY"BElF5=FqT栱(d-gAH91[Y y@zDA 6K:}[ZKX[< EWNnyeKDp(=#|ǈ?5S?IE#"ܳ4ܟm!2+],Q}mQ]KAELv	)c+?Vi@wO^9/T-{F<L)aj83,~ݯ(p"8_bӼ &rEǺaO;[#]TQ͏K؍=앺^%݄hK"*_RE|oapOIg'@+/
D6Z4HBNϨQY*1-#dGGé+m)C`4#V<hcgEOk#ۥa`}vƱAH;LY
 {. U8gy27fWN'SKϥZW_֤-ԑFe(# ĥ'\l1Oyc|v~eyPx}Ma]r{ԗVRr_Ne&(Fg=m(s;NvofΨ @ 2LDdwiɲU3nBֻر  RE:K'`:wDlm]NuaRbQ״jyYSW/N/:rxGFqB#mErx`[i'^mD	trq"MSv`}yK:=Gή.
z$qgszywПy<RR6-quah6xCЉI>a{)o m4_\w{ne'{WjM-)a=櫚'nSҵϫq\v<kUy.Dba\_KӇDrӳ_ZP>'\)v%B|Q蚈'奡5](ՃZP=WI34VC (i]jvm2ky)K\eS@e2;|һ5~&SķiG>騔P)1a:FY{oʋs;M'Vy<JXxKKI
ϺBjҝШLII.ӦyP(P [$MWî?;6[,2`S'3%h0*Z}MF{O;%|rdZF7{[J4(9Su FPq٫ơs}Qٞܨ.g`lE4$R& b\Jڝ.چ;e|/owwo ٻn)
i eQzOa17xa?|epfuɋK. iMK/w'%RQqwmWFX5;V	>xbE%-nRk.e{,{xFbh33"XrgPX΂nTr dܨsᵄNb˚$-m̼U,Y9,p"v%țW|io"k3M4SA#I7PU~<o#A<FLmX풃$w d^R#2M|VvA"`b lFܣYYOk4F.r0;ZBG'稙g!7J߲L<I/ui؛Vry.S~S:=Y";-e(&6*
ζڵ,aEk][ޖ
>-VetkjJ5׷a.cvpE?<lwr$";#j˱hC\}(lrkKު<tpc65ߚHy,}GxK)ڸ'"op+#0=ˋ 7v),Gyῴx[>nR6b.&.΂)UW1_/6^<yڸVlMksK0i)T7I~,
`DOgm s.gXta޷Ǚ5'?">NFQe*vnE/\xoy%]}?6-ny~]nq%vVXFfy
P,.d{PC=pe"P$\)m<V=D[pP}5Ta	8;`pN{"3)9Q@t.97P ~m.ٿ{EO LLU3PnP؇{2Z8}
I<\D`ݶ_˖F|w:vzvM Î C㺅q"u W]rh^Z6MIqQ8)M`vra40FNė}
owCπ
3;P%V6ąָ zmLdy_@׌S+Y⻤mϷstW>`Or3^Ù&4\}}.3f
q]L$IRѩȕ/ch$^Ko$3S}:k8w8ޡbЎ^p4ke @u'c^~o
}4v$p8ALcL)+pܔ擐^0fOlO}4a<r9.9voɈk{2ܝB!}{<߶4)8c&Ύ63Ǖ\I\V_QAȾxIL~n ,H X.\^n	Ez?/S{}7tj`IU)Мʦ
iCA
?fO@XC$<˅tx::"*hG_C);9灈($hRN1׉zՇFc˗5Of1.Xqc/y)rŐH
g_l}[ꬿ[58'W! Ko`d Y*e#~mӽz0-Ӹ<f #+F-۹Q4br0*Ӑt9aMmUa"y/7B1;H%8=Q
G>&<;mBHQSeab,ce2|g"˹*8O<Ϣ'>S__An,];a7p02]LΖ'=miѽp'hs]?f؅o@hwMR0@sI-`=&$ EDVf&4=+p$!]՛/KOEo=d}?8Q JOQp{KbeX^~$-{lbe\>l$ec{,Ƶ4C%=~!Ωu4{&7\ƙ~ܙb=tyO!*"){rKjk8Ja\b H^Im`YgΕtW@
wGu!L~z<.];16d{Җ
b;nE0L².<U/lOI#0FPH\6+\`6`%<w#)ߧϺFiY2`8&z59LnWs&SG3 ʕn9|,A]̈)|A>p%A݄/-"MHY"'8vEM6_ǶT?Wf
.,l;!oM!\llXn?Y?y}3,EHD ˖m[bA>*F`9ٰ(r@5fe՗~40
_ӂov1 YNTZJjvӰzctKmGL~US'SbCd
9Pg9kK[>-}ACM⫭RM_>=\XL{[a.3+R+Y<`@K3髗Ǭ5UYp!{Kv[ЪZY;&cqU:T(n0ϋ3YoEB9HprY WB
Ĵﻬ<H@5}-l!4V
.Y\=68Jk2}4g&|Vj941LZraҼ{ZYG=m3-i[Y9᭙ݣfGxWt)bbΑ[J|8{ſ4_f9D8.xнRwaGqm|տGf-,|h7Z]"giD'@e*˺(7ܩv}Z>$۶Eiot"PCZ5Ed vF
u'w
dv=0!!nf:eRpUaX;}Q쯼+'x{#m
;a8`"|e^Fn{ߓgrEMHjWղ-D&>L8Uӧ2هs_?;o{3oB!zךL|skrˉ`&<,8OsITm<k:d6jN+c͟hP&k;NlEUl=\i/sLT%JrއKm$\Qk4#sE`l|)B5mUjIS!rם֢"f"qNz:V̎ljp[B^hd-Trݽ%jsR`~bVXB݉ngEDXyp};w1I]G,-}a!0[Tfwh1At'y	aXU1k<CѠlʖD%ջr1v-IePf_9ApO09H{UAa@VYA5RhWA/ֶSv?
i!%/Brؤ~[SñR^l[?i>)C1zLڪG' 󡹝;Û
~+]$QRdTNyQ1Q:ley&+`_\A?D邕B}mcuhpK@܀\
8H]?ݙ~ rt/I:x2O9dhkڠY4{Ѷ',STa2yƤXt1G"NCv$羯X<9T}o h`FY[-<t9^3Et[<fVѝ%>3cuM Ǘs.bn@9+o>j2=DThO#Bm)h'9"4˙4g\~Z듶Β#ȁO;7g7x3h:
'thSWπߺH?_C]DΗ_,-vdbRFNp	p%=L	;H\^&{{h[&<pCČ\_Y&]wSyʦӓ#;MHbZT:N_5Ϭ.Dy6?;[DFRhdW 
gUHb[3j;﷥ 3MOb:
Dss!pSʫ6(x%/{{N;)ȳ\v^MBu4MJQ+Ҿ1g:-U4tLZ}|%UC+ѭlɽ/uԁL,ڐ65]%ߟHKICQ8踳-0zgAZ}T. d>r@+ƀƖ+ISA/ԡT=d86yMW$m'
(?߲;YQƓ1'ah ]r<iU=ٕeym^!*e-PD
^zأ`>MӚ=Rv
CW!ğ ;/zh-EgP]IDy:@797%rPc2H)+;ndθ5
+b~e
9Li0<*SD}\u6J6xkHQ9z߁0p@璋=
 l^m7*lCl?#g@ jށ0ďH-&e.fAsP(n}(!jXLn'_q[dO_Ȱj,Gq^lR{j!tN5si`.s g<$$" ǹ4hVYόD(#6^r:lnXno:FWPc,z̃w<),3kXtĨ0![K/4nF?_~Ǿ'.C	SCBro/%X5
x5.KO?wS-J8񐠎^w%IC%>#5諽Nv*2o!F@Ca-n-21/c
,;=pGm
HCb[f_U|'ΐ L8-VJb 
m$]}JGH{;rgծ;{.J>1U][
TZ EG6SVzP5aS*ύ%`J+
.fy>
:EiU)=lv@vqt!nPBU*ͧA/:PԊrtBXC<G(p7He ֯ep? : qM(Y,жט9so|̚Go9}u "޹~҂NpxĂӫ;;^=+xGB9!"MV0'g,@NyyӋprn|5p?TWc*x+mKj#_+E; #,quL-\:V&but7xi~{xD8$d)	`URtV0SDyz~<ou %ߓR q6fy1499ÏVD`|(KR;sp<^Ux<mw=V8j> @-{Ќx0Y+b͟'%e/?ۣx@ܻc~lΏ\`&hņqGHL0lT@,RZL%zRf9e8F~_ԇe(\\$Vq:ř0D{Il~6/>Ov<JuB80Xx5<u$NRc~4Mxv:ߧXoO)ǃ&bs'[ daT~N
iͳy,y4EҐ1rR6Q:Bw޶ާ$ek±wXAU7zu':TzyA<
^Y?8wS8{	NOnkšȆza["fEEj];Rbg{AXO_~qPwǻI	(۽zǥv	26\=C-!}]W7 wğwsǘ xB=uA%ͱ<QN:t}>@SugJ
t5?텩͚WE$X1h` |#	*Nrt26?v_wMjlja;}z{dmJ~5m®50S]uOu5># iYqps:?N~Vc;W>o^;V	0LJbգ68f*N}+u0Z!%AO;DMO1hkѕ{8H19G18>Mw5>p%
]Sp5.MK-;є/._$	vH>T	H-sW;ZfWL^->1w+U;$aOj![8
>3%LvAO8D$nts+֮ҪZ[Jȳ*1>}HSd9:ҮcrhHƠpƊuVtf7wxܾG;eq@1)RέV=ӓ vU?i]vY<s9RY_plѮtIX[dO#Tq	?{zgT0BFmA,Ll;Rs@\PwW"ebڥQh>ZB!OzN݊
2ҠJ9[~O$Tv5<%#.Js pK>ˏ^; _4J(7>s)mM[bLfcDȑ?Ƅ	uUA1}'Y%Pu&4@pj<ꦿO %
<ܫ.}lC-ٞ
I\Ovcր gS=
]A&g4&2U`ms#t
G 
oڜC2\^PX"w}d3E^"Nܟٽ~Iӡ>Q$xNMN"BmnSD i廇T n#9:XU9%QG`eZCG.\Q_O[W2]q-́p\V#+φ:p>JoIP+APӎPHk6b" .,D![Yte!6̩6F~SU ۼ_ۜtxMv^IًfbU]&\@rW/[А餶w7~i"kyBy]z`
4.U+;	)Ӻiv;PMB(}!bl.Em-JM`__7JSܕwƝ=n(z
4N<%(rOCx.{H>~aoe	W`i_V U+0ZZФ_>QQYE=G[/h.cɐOYy?
;KE Xp.
(˨NF_zȆ.ؕ?$S{2$&*U
mJ{0dDmOB,XlԔ)88refR/FW9&{Gd-	7o)w<)6VjP38@x)A1|z^w{݋_N;!đ@t
FE.op3) ۼ0]6?-S	m u>@#H,+7~w;sADBv\.q)Τ3ZsX'96lgtvbSӧT:Wt!
~}BZ^`Kߙb"`ܹTLorkp4z+w>;4F>U"U喳}<:<EMc#m{c*J6f5{Ⱥ=!>\A7Z5$O9T/TkmK
iyfz*AzgYs>Ϩd#B^6sCuhZW-=
ڬ7#ҫss=	8DYBw_XЕJ.;J;[-bNsNd3t"dV19 m.ٟ><=MʿώO`fhmNюD`Nإ&4[G8oc7dX?Yvzv"<qdZZ:
¸-At
IXyP䴬AU5"Rׅ*`A\*'seHyr݇{u+Y'V6;yΫD²6x<Zm9Xb9Eb2*}6]}<NAax+U8{61cGJ$]+褷c]WΙ
f݊cGm($Zq,ͼ1꟟sW͈l(Kj΅xG'~"o6w[AP&ωn4,tW:ZsnmUǹcokv͋f͘PC"2Um MŖۇ.]ӻ;~z59J6O"U{d+Hd?hVyD8}&tZ!$FWc	)u#C:ccǜNklZdqh4pkдtx|J[f<a(m̭sgU^F706Jf]V?
B{nC.)>LK(̣)	
sSO44gpr;U1xˢ_}UF=ԝ%Ce=^,J:Q	;{i}%VU~^E͠$d>a#pݧ@jR~4
רBݲcvlF""y~߷/i?d$Ӳ~X{L8S9H%6>ck .FR(y"잲kW洧ȩ4Ta=1= ҞV]37wy96Ymg֤\)D(9^bw&c߄,~O6L^d8E0C$Z`bs+st}n*>y{ۿ4|sȐ"{Y܀h޹Ţ0U.N!_ē%}U_(w	۫[k]t=M1R5qj1SN7H^Xcj~iogaQ 99 !}\խafVjVw~ p\q9d3h3o 1ɗ\yb)s~]@5maEn@1`nmwil΄^ZݭU_ط RzޛROPr&b˄)p͖ظk|	kM${W`5x1H47]9x9feAy+}}f_J>3z,^'4۷tUFm lxv IK*E8tXiOR+nWP=,݌qZԮ-~Ƨbxz{	
M܁%3[ez(s+_z^گ9q>[ BoB|	Qf`Yo讆Dy ϧl`<i]q
'\G
(^SQGL
ٍ8[^DcX=N~U<>CzbLc ƧZ	hhzfӍٟKuǡy0y<I}d?V-"(_rEΫ׹oHPSzhuJAw}^\ڨŊlsUG*̍~G<a*T3X!L>7uXvA<>sb=՟hp"/5 ԝwrɇ:,j]NWYJm}!`zG*=a H)}
W
jpC7s[6Y>3jO\-
s4S{9ZHEmW.>;䧒6Z$Sn|tiVWjS0q
P>GJ
=?ۚ7l}ehk=qJ~
KBwuVpO<aOF o¡l{Ns;('A=sBҜS(vR92b};Gty6*eck#>ghos8[iS2D~{k3`|lNRj/XaaA!O{WxsE|*ν$ApNAI˂G@BeF`90+C/|p^~Auqnܒ1tx>1D[g
Ǝ-;A`s' #X놻GlW<\/=iTBdN/筦.X7ggB.Bڻr@~JdMϢ9ţ @;I]xإ$7ÿN[:)
֡O`Ȑ	9MXW?ACooE[wBǰh|=l nHOp!4xG_=LPI	BElmD/iJ5zYkjl-w/H99d×zm
%
_Ϋ95XK1Jrp2*ʇ
je\L]-o&&Z6=^1?Wagyv4F>D~5NvmUQ:2I
lcm\4g6	i&c{7L$?4WwS$\+(:ꥺ&"m^]6	lRX|Rv{l{˘zϬ 9hұ=NׯF<EGyw#b2GbMe);گ'W+>L X7+',|sdM¥l
*i]\KuItwNY\셈VGtB\i0e~Wcxd9)Bl2{iZ8)kgY۰۰g f*fFfz?i'4ԟ1~@B;DRͥ&(>ݲR'9;N^%4¡7~YDa)i2>AK/e EzgF08ck쉐"Udbr+aĤqR3.[>hk-~Qœ<Pcm)tpM8Ŗ
/jMǛum>8aG[ۚچEᙳtqÉb,m^@Plo[ӹ~n9K~>KxF\Zee -y6j<7p/ ߣgӦ'Lm`À6)3-;pኰ;N|k+޲!M==&c)ڹ#+8բQ(0C_zu NA0C[($qnӼoo$)g4T ^qZ4v͢+~rsmrl%=OjU&PݢlXNDNtlڗ_9"v}Lafn aIlz9ɣ	a)E̴(z<AS)\?o' ΂l}^fFn_q+!p\V֋^6cbWnODw	@)x2L+%
C,gOEFLy/{ {-SV5C:\ 
.&ZٞX80ܕO)T{'fub19?}3{r3+My􇨩v;PtBVyz>*ƸC0L4"GNLO\Xvqt1c5)5y_
+xT/*b/5";I?#ܝp
m2@M􊵮Ei/lDdF[㳁o8_#RM"73 ]Q6~[6XM;z~+:q\U^S]$=r\DBS*KhbmXan68^̽LGةu|Rۜ퇌028G+tGvL2f+n?baAu1EvUV^
G 8 2PzɂW@Jwmj߼39]RfC»b4hJ([$|7(g:l$bTѭ8@;UlH\Fːw
'WP.38LCFLlcmc YN/87OOk#Ga6tӶ<A㎕ɸ]a
<c1x-(
D*d	AhxoWe&wǂCΧ]a3"o&vFjʮj	|ОfyV
pet{K?d"9_*{]yqLA4IZD:yCE@/:yoQ~ -@[2׍HX? >CsD+
d^Tbl0G!HgsE1n"l?S Iu$T9`V=Q4HBv:_AJ?ʩ=Lz0)0^%۝ᭇ(R?&y>ς޶_p~muf]6ٓNxxjr>#ZÛxyeOt64Y*-7+	Gzc2M~F.%`xᗈb!W /5+ y2t3zɝ%It|hQSu \?ImxWPLѯsiisT7:d7=&ѸVD,eAr]=&Upey?ys'C4܅Sڽs	q {q5=Yp CG%?Ռ[QH?9_/=!8ȶQk ]]+Яd(|!
D 5{`-sF܋|93Ar
3IM@NlѵSJ(MnoSڻ=Ryʦq֦yb)8ChOsSG0*Vܖy?"xvz^0//ݓ.2Sx>J4	=N!ْ4]Bp-*N9;)럆>|a>gNs 09@L\k6)|(
jt6M+ x؜S{vdG]
;EF*97-cUIu
S^*2#E;9:
xia?;ρT].Z=_PS]	'݊\12QfdFQQJ<'J9APֺ[bg
X^2-ze/ݩ'P$"3'gvq;䵮9q0Q`9t
_7sz1@<n5Q_%É/V;(cO-<	*w|^sb߹;ks!fѾT0T=[8B'0蕏`ѫa
JK=vUaᱨoA~x^£Szz'`Wq%:8ƹ~u+jtmz9t|]n+nXu(t^jWcI7kl8g<+%6A\
!{pZPs>1=݉ZV<6[:-hK#")@}tۃ
}}+=}G͊>Hg̵Ӄ>Roc);(3l9oø
KzuFƟNDL.riOӾz%x+ވ6UrYI>q4Bhx=q<HC᭔ȳZ 1Qh0ʮm9BFs;Zp]L@T[*x/rLT*.[uD'1L
i|HZjɱl!ټ
hMqTc~؈+,އ'B΂D	shw[%n8gwML_t^]d*:C	%e[0^nNc	,S~ͺNRGH
pX0ɠ_A,v_wbt=|y;]B<@'=f%Ui! tWV&wXCRQ$*z!K(f ypP>Tĺ?iSRrCڣށڨi=|z)N>|?7l|\TB1B\9] kM,KN6l}Iwhퟩ}0{D'T$ˮ~eg0f}n%(hM̨ip?펱:=.OFMN{yIܥ{6+Tά{`X@VgP(kTC-SgiSG5ANRk%!6|n$BwVnB޵*[А,ПϵR>)<G%~B^ߑ枾0DF4>ίq
p\KZwm$ӍR4%uƑlDHwWY.tQOFrGJi>&(|ϝ61
uOLR,n~f]R5m澪S=Mf\<oV<}*T"}ޓq$"'9r"\*%
PK&lF}%yE>[Qt;wJhtykמN9{=5ٳPcahUz=&aGSGZF!meN)OQ=nt<&K33~
T5l$ 8P~[(?a}'
ڹC%oJsw4I#̖czJ{Z}~#UZK%v
A9IzW Q&<.4w~1㮏[y}~u;SzX:j[ݺ1[Į*8u_rwAha8n ~@P^G'dtVexdk *['xײ9+Qծ9MFBfEB|jasO
r5mdHp9ԍa@e :L'-fq\ʅ{0xt(b׍'QNSdV5AkeMTዓ.̻	JwiΪ?g0(yFj⯻e@O"N9bٯ߅}eE=ArE+V=i$H%[V{X *
}XdYg7R/:̈RA!,V(NގjtPVse	JW)Mܠ8x`Hq
WޥP tTN3xXyn¡ M!p"}5|1?S7x$n)
	S\]ұۿaL}m=L#Čwm!c϶ lDzUMiOӈ~rí~@yŃǼ%Ar40©,s:W/WmV<~q8N!ҷ>
ΘD쎞eO+S*E䨐Lm?J]O	}ʝr&ٽpQ3hnhzFB?/rZ7PPUY;ʮgnԪK8,!oU_(륳AeM{.Qr
En}'IX9p;]فhy6Zf۰8ܺ1x%x:K<J6$ϭp*^KWIܚaޖ߭Q%576oc7QS|e{Ʈ6UW~#HAm.CH3ǊUbdf)d};gG`yRJ	ņi2)ɏp<t";b 4/e:~,
=v˿Ѻ5\]50Tow
bfU=Ŧ'}}^ݲ|mŦH+^0=l1sp +uMqu]CM*0L*f61;jXxEPoR]RDm@sr굫B%b
Z3.4
~{L-7>Eh%t{쾓}/GFkPTGNrWwR/8K\M[Tx*
COBm].S iM&ZQ
@\k|2B"iX rqWO-±п{?VLEF|v1擾
zˤ?M=1<D&E
|yނ	h0pm.ŦχyfKITl4!&j ˶@r/Q#S?twPz;G;.Ky(/ ioYcg5XD6hY1Hu[ӵ6=)[R jT)~𸤒>@af+ר87/ؐ
 
 i`O@bt_MF-799έv32<-6kLN]saY%
;P1q,N5#OSvWN
enѴKjM)0 iȟf?ph=vvju{A#mA"psj  O}ήA=tu&[ܩIm089D\ˋ	a%GR~oQٴLlLU,fwܡql7|=DAkleV
oK˕g^a<8Ik iͥ٪w[.itŌJ>,*>?U]ʲ`SL7[8.k-s</A@qk5,&3|aCSqppq/t0i/t /67kj,0㬧a-wλ-Da?VI+>:z֤yWX!jJq<!ׇϸ@-r1SoKxY6լמl>ONK1-x7xLkr0S-T
z
#(W/Õ
W'pt`P\y;{xXяEBMel<nV@YN5.YeUj˴knR!rfvl|Tvΰ)r>/ؠOkph0˺zp
\* 	X)t6̎dWyOm=脊6MW`L"L+59GhpT"iq9zBL"K1}p>IiTQ&;wA$
쏞٨4nOt?ChwACؘsI^VvM
C\kKҳx6*Ku7R T)]6N=Dϱֿ3d|3*,s2VN\ZBp+9zxnkmSxgh馘.So+mignBFp/(<xխ{g*+nKKŎkJU*{N>)dd=͏ anph%4ۛ2na ΔSO,2xCvP}Աqn3okBy}f)p|V\vB%{3wֻ# X
r\x
/}NyO%.?⟤'i.U/$V:j,En
DtruůUzCzu",3Tf>M=,z9h<naBYF,L9\4Mu"
@k
IDK5NCt!<6>J=,:yM07S>=u]fG.a!BsUc3_NZVfEHBtlQ:,߮aH)v#L=aH-V'OV=ϸybՙm9),CHdypxZHV_Aw3h]|EUDfEמM1C2`L~Rqeb÷`>!R$"A	pzekH/oqLխHC~hTp4 yQEm33yEZ~4Y͌rq|@LrboUlN?^Q|~+\c%\CX'{IOxO=jێu%2IBuZPڍh4t}і=듌}<2~S8KnXao%CM/P{0w:M˹y|{5
bkg:B@+(g[CVf-eDʇP&8r^'rc flqqF]GDߞ	@}jXc[;y9V銖jmv7A@m},F^)"UWu+UXI5Mta
}uW
_}xJn!ڌ+ϦLE4#"s
瞕?/|o6[[tuÆaU)	\Q$tW~>-
&ת M2/wD2y=^n*:Zϫ<FE:M[1*AA<mUJ֣r&4Вqˢl*jwYS<CwFos(b,J;j7 rݒvDzs]HD
пXj]j]u^31^b07ytgv-dߢSnKpl'z:k}(T[rJ5qV:({N ;<.:ԦC9%(H}#hO*Yy
}SVJTtt{*PX \oj)
3'
iu2*'6(Q0bmgؘ
ܓJwB\[PC=p7VBQ`>'+=Eq=A{$wc[MVx
MB$35};1w5
3-˵, af-	Fҝќ@D(έ_va\
A+&$l,e#]@ѲXvѬa5K858q=䱩	T~UGݳnoeԽ?CK!I*j$^Ӽ^;2g&8+nW~>ZmTO)cg5⽳4ql[Un^hJOwPVG@ݏ9=?y̔­HPv%vި[rn+55$@|EZwG% <#
VPt:dvn0+\Wv4CcR T]Dl̓kef_BިWezJU]ct 3w[FP=oFӒf<n^K
ʞf2wTY+^??V2rM*wpQxO	xI+['i޿Ca,Zfz5i!eQ] 3=,5Ö$R8 I}Fa;b;N(-vݭ=MhjdWjT)o}۟z+8nD'+ũ9Rޒ!85(,=h)_iI)CfϮպ.p|۫d wj(U7E }ʻkE!$ɭ [pp׺\>9
ǴD²eOSbWdά)!"~~bbъ΀یRޘXM^5~ƻTyx%Lm1xe
0
`wvirN.Of!4O~_u]x)`IQp|
R َ!#yZ\CtBĶdX[$XBcst,>,m}lht+^7ҡLm2M^8I|(jׯVyzy2=|5yljQh A4Y^EZݲ~!F4!>R#[mc)/'ahN<p|sA?WS@Έpvә'z:	++},YT%zav`&ʕ[MXM:2/.={񝇧β0]xMFR
'yb;㬂A5EHY{lO><,, U3^lNxw4k|v5GbZ3Y;okfSF3 4H, yef|u}	g64;gdqS"q**Z{4@pYv!yͱMfa5NeISW/
ڑ=qΕz
p*ϼar/wIa͎L·#gBӰkI"FX@q<2BY/?JwrЇQI
&7.ha.9LeT(e9rp{.[P@{8iLA
p7ł eSQ.d:%ݩ'iνZxoX,7nXWUu*E{"ܓUPW0m&gjўĻu3=Rt~.W7A!vbTdL֮,	; o_ړ_L(|̢cU
@]tYឭVY-&P˃e=u >}w6ɖ
#N(zTfa_[c.=d..aL='ynEvw_ӽB	"P=08loaѺ:auu\!N,n8gI֐y}ܯ\ 'j:J/H

΍m[
auc^"!G'Jkv,fIDnh+t?IB=q"FM
u樔,d2ܹg,?AogྀA	"Y[PI(VI_6@:{|jgq=ώ` cWs۫c_H}^gW~nO'0~1C߻o'a
@uh`&oxSQK=Z{6L/Xo_=)p.rxC8eٿ$fLY
&s.b#W|f5)d}>WM#7˥ -;'N;Ƨ翦S׿C5&Ԍ3q%>ch
qiDUtExSV1fl~DOϾO
m8׀9tFO50wziT*8|"g0g-@$:79EM+xI䉝NFar
N<}vo:Cv%8&=tF<%Z}
&S;BF~w·g ٌhj;\
Mkne0mݴ{)شW(N~Qn7~&yȝe]ᔳAϢiz
WcrPTL܂7,o>%}	1vUgug[A5Ňcݢvex+y1f|DiԢ !.tvM/!ʖM(~IzsM ~>и90 };2q
}/i}v');离$GP#{Oԛ8!âĿW۷2yFX-õDl.eӲjLFwD)-`u u b:]L1?^r8OTNӊ	KcɇO`Ɗ^ эWK`Rg|ѽ2	Th'w~[3nm9xezwe'nN&(,.Sdu? ,Uts-K}5y_訐.J#vmTdP>)tC
àY,;vQ1vbJ/`ç'2Oyβ{"Gѻq[m1O`>N~b3!'=y8~|r\wZ<>WWIlSf+Qj ߭TV)jD3 e--YXЈ5n;`̵mzCX$yu큻GBMQktҲ2B|U<xg+eLp qʓ$2!{:t{>bp78\Ц/׿Gd7%͡5|B&	EY.b쿊
n句/2n:Za}2#'#r%]5bΖ7OF~h­	>e\X
~_7=%YB'
smݵC>5yF3c4=+ŉԶuI"L%UZQ1:׊S}`N*owZO+dOQsW/uSN?Z3suGw	G$i(=E~Vh
jZ6S:\\I#x1)h-a},_Ưv9fcy&l-6*8"hALW7~#szƻq+H2y(Z"d+i|!YC(bzAyַTǿ2oI
q#lk&!'Y:*ԿNY@_HwvoQI*~m%}T׋NY_f}f{3L\\B\p%_lBwXGkշ(91rCn39q;-l MӼIz(C1^=UlBSQ4)\
~D<KG[%j[e psgcGtqp
\cj$0;vitcxE>^`Gsqiujȥڛ1 ljF),8=%BZO|yr<!cxg=a.{O]q[9ЗFm.Z+63zF+-::R
w2L5BHJb>GsU@l:JN9n12*E&\?f~O ԝdぉ:¡;bzBWGK!y'/nL7lwqc-#73fu;J]haɪ@DάkȨ2(Jh8:rp_xU&m
=h"n:X!JŗC+rͺ3jR[sC0%!o6Ƒ\g.z||$xM@i#u4(]\0
0T`JO{<>i82t2[&]<	
̇Bl3Oli?膬6.x?@E+n#qk<}pw>8^'Gb
ǁg 
oVPDFp8-𾌦*j/
p{9BI
llVQK@tn;9?v)[TAl/О=A6skrMX%C<o0Z+HI<ڶJ5>X}'5})}5Kf0r;oOBGyzr3w[h]Y+ngev^##{~>W|؈E Ȱ=fNMk>k 8~_9\a\m4"V*gHm$tʻSmu̹禃Y%u>5ƙՊ~Pnn7]Q?4s+XFH!{EmӻQxHBhCYdEŃ"YlGPS6؈b&Ch۴^c
nݝ4n_AXQͪ@
W`Le:5Yfm	}]I=rP9AXO3'BP"0W7v8
t>ﲛu"a,Bix7$2dsBkOwADUX~ڊ>Ќ܆gQәZiivJΡPڟ^)EN[O-XiO܏'w>]@ΧX!aOVCиTG" Dʒ~FX5$wǷR72ሤ6l v{O0̫u*îoR O)&=lւ4@Es,SYi4P&{oSVF~J8t_GM/LWܩp 'WVfWVŖ>$c\nkMa5ќAg L>d[뮲z|
lCyj|-\0"^R1ԕNJh)
ugwG3	FDռOQYyLfMy{RPƿiK݇jw^Jμ`o䈺|q9&ʜAo7>A po6/xuAX-yujַˠSa%DZEN+kx>%ϿzW+ 4uaT&=.Xj'LN_lxO3Ҁ] ՠ)aҠE
*ցY=QWe\9px2TU}%jr94{./,)G4ŅCm/-wr^emjL>hW	0<&mR>x3cjB'LFIn0@7 q`'
dHi#`?X6	ct},bVxW˚V#wQUqoACeAO
#kj)&>jn^m[NyGϙP(Yp?5df{f:;fop+uu{4a
S<c8H
BO-Bp]NO.[?||x?kn:T.$̳;3zwm|/ej=(A:kd>=K]Y3$%A[_@ZqZ%_
26@%"]7鐬S], oQdz$}u?G'd R*GQrb["r:8,: o;H7q#X!Kp)f.`RW\WuT_KH<d"YCb8̕[iVYO)kmL=\QI~qx죲ֶ9$E6HDh1MVZl멚MV|]o*Ul{%;Wl1EP.0'"uo
=\LΈ%:dGv)T~zNzN a׍?/T8lb14-kO(b%SI"Q>qI0_m*$K'64bBDmH|,ɥKB0o?~}/1Iw,|ͦH6
kJaAo
3YZsPRT[WW) m`M"UXtCE0T7^1ǍTBex_J$>יQ^(%ܭog{%s
PU>gʃ}H?ɩ\lMR]}=.<̬KvގGKj}bn|rmU;eH&Id5k}#ڮFﻣ춶YKzrO@
ۛb*P>z%#_KI9H}= sÙȇwmh>ЊQiS%t'9)BʬR<\d~v9ѻawO:4-%UēWi%{R*l
SfcG?gyrC(Mq1Rt&(QM&9Pa_>iv1=6!=ẘdDIJSe6z6b(wd?xa0_dd핡
d᩠4Ukog8 猨F݃b#'9`ɸӷq@/'}*WƮ[v|@ީmוs6[ֳjK,e*]e[<|.20;Z\[gw+b@߿ o&-m=j`{fm4#f ;2wV²vP󑧡]BWCQOHަ(PHj.-cA	|zxԐQK\xjo\ѺXTF+u;j	>!T*/t-^Ӟ`iuS~%a'# g`uvx>9w^0Th!x&M2+&ИLd7wO^~c"ޱ;1c0ZZK?F]b1(hZlg6vt鮰ИEڴVLͰS>j[/}gՒ6U|e]N+[3wkM0~Br]_']hr
_U[Hv˳IbIf%7?.R 5žqWw[5#_N>+^F}{OU+jg=fky"&}Nėvڟ1`JI)kؐ
+Kbn-k=w<>ًrٻH9kxԌ0'1!x +" zXłGV7M"~oǶCld`Kۆ)Wñ|++::0eĊũs_\ gwS}to;B#uCpP{+j}ד|jwя;x*3h=a4j&b
\@r>{{}h1F~"$zU;E]#l>ρgI؜d)׷u3d %dIo!QoKQq!)'9_rX}?V7C^2WM,˯Fu⇛N/Oo"?/5fqLMǮwݏeyH݂+39{枸[ks BqþٓEN|8Cn,;if\IWl
R2}, PMNzm`?a/R94ZBjEW 4rXz~0}I:N!WfvK1y5IElM}w7|LVݰrrZ&qnjjq^ޣ [+ޒzm~r{n2(4qY/(c|<@	tA5L5x{|{PrvwQY <$$Ei鄞e Z"s9hXsBъJAۖY@`^ZA;m0vPUbO)c(>S$gOv#PҞ8#&Wna+d%b{VIOsx1Do])I4)Pdrr6	T yj_Ȱ#<Cj)$$F}D04%CRhք~mnAbUrqR>妡C_f^&ޮ~,pbs&M֨
bNP(p\8_<IǝyҢ(P9#sWlǫ렅4\N^kz+%#S>VlC8M~D׃բL<\?w3nD[x(*DnL}_RƲ{A`TNؕ4vlDװr6nqK=dD|1ĩS8"-FTrelSV~_ a`,9F
q=#eOӚ.y2#h*UrڒuiMvY]8{ꆞ,RCy}8b*%ih>`;OjOHa|N2DVm`d3rKS?r6CBRM.*	W;'}B8P
LWE_*ӕf=}}=!՘dul!Iʮ9C-WTv(MD}aZzgwm_4ߊQMFٚkDg _/,})|0)ɞҰeJ
k!F6ktV' ʲrW|~hߡ\;,<<؊z]!V]p^au㧣֕樊G LByLlx̘	8ʽ|ol+CFH4B8H։SE9CD2] CA'z&Un{Ɓtp/e-PvPYoG[}Ch|{	&\JFaMp^}mRvHK(~MWkQS$yX^jRѡSqSZU6	nO s;{sf:,7X;$D%7w]Vg aąp_?Wut$_b(Cݔ$ލN~,0x'8. h[/?{?UXΰ\Q'(pK%ﳪ-zϞD:Q^-W&^v]ڗĊBw;hCnBHxO1uPc%>P&͜j/{J]ZL'r*zvG%Y-H7jq:פ%%[mk2̖]\944?ݾB!;mCY󚹴D.>LfRnPU9Oxxg ̚s5C>KFfhax5|SP%nþeY=GbdhP79~v$c<FYdd:^+#qoKo=]YOb<"/8ѵ L9ZmmK.)ŝ]dX@ :,zw~Fe*  moת'ʟK-tuϚniok|4ypl #'5lei6V؀b8e'o19\!>T)p:F{VЎ
.+\٭<-QJ\zGˇ2"d%ڟ&I*[Y.R@?ZJladF~zg
ݞǓ=ݕ23JR>op[.mF8+R:} ,6}9 vb/IlWxz-yXskOg"E(lݖ*<Rfޛ;{-EIJ$5y2j{^0Ҫ~^ޣŵ-}ψKHp[Gy<#0-iF5C,xǲ^#BSVĉ~B~$sXOsVcwb|Ki9c3;bȯו#h_X4Ņ=uJvAi]MǏ:N[dKQbB(w[%Bt:sf$x>櫔ppuUPhn=_jG0o3u?f`f:63N?iZoo,qUiY V6= ǥK
BJB7r7M8b.cÏ{q83c!bgKcz%1:t7s\)s
{6j
'A;rC)tGX"w
;Ua6("A"MжgurmhHii-/sV4QjFtֳ$f}3x W5Cns~/v9x'd-/W~Փqvk?
e@.=KpإWw_1  	zRp+wdӊ*6 ^7Ty{:g		[.vVhC&u!p>I; UW4sV8WK&Nz.x]P U
BML"xIn#YxҏPA>^).,vOBB/GoΊf^FcU E!5䫀[/Y3^mS͑qoi=8?h_RϜd@g1};Kzes5q/ѣrքmAH+Ly3xR%EArKy4s_mn{A*0U1Ɯ>)SJlmaӊ2L[:Lkـ=*UۛcU#g(XMJuK3럂Y;)lQ \ǁ/^L+Vc<=f
N$~f{L>
wIZa |\02"K:p_äTj2cBxIfE5vrE܆,qU^י5]m>鼀bY80G	,T `jU=K$UlN}/k<Cml]qϓiZlgdAKuoeO~ю?9檢M9D@qBs2H"uy2fk
7Ӛ|];Fg*9:~ErF
~TsI71|&nvO?8#zN{S=wcb8H0ld?}a(R*j^NZ4ONćGCN<5dFnGj`$\Kyx1ݯ;wJ76Ux=դSG<x9INv>5}<bRe<'J`ʁ²DmQl~&u]|`V/
_J<N!DI7)L3
;$[0w|)+	pyMvoY\:n-LW
d͹^[(wc&8ČWܦzs.HJ
|=,x@M;_Oxcus.D@RѨY8fbg?VD7%A䨅|N\':G9iЩ<{_,&M@4vǘS?"mioJql211M;tK@ȡS<v='cgZf䕚]xMy3'B5܄܉&t3-rfį Ws/2w}/L)r"53ե^=?(ɃL+]	bVgy[Ȓ]Q$Y[\vsw'J%&D66EvKxs:Aqp쬞u
ۥh
mX
[[N&-򁪶Lv-lM㲅dA+9
}=M'@O3=yXɣ+ ~m0=n9Bd0f[O?۟tmC-
NP=vښ6;\7f~$W-%]I%;8SI,mjHqC|!(N|vqSD8<xh B_'ZpO`:W"=z¹s8|P=>6$<r6Qpl`5P=@rC
ЫhHbٷ;
^O"mw{vSmɽ[,xU{R1QK'dWM=4KS%,B@:]/OtPw~pgZWa/TNYstgsF_\jRD|r\	)GU\9]ԝx6;YjI&VD>:3 !t:#Q|x>?h@
K׭<l/߿h?Sf] ̀NLDkXn@"D?;aϐ?i=.S!bU"+Vnp[1맍)#qP
üBu8ɉx
-p-DYR߭<LvSY#BÌ,TZrBDt6y=ZPɴ$<w욞uKś*s}gkJF0'|M.朎G>F$CmCq֐LlEu~(=X%3\PvbK2-z+h'[|
ui-{4
R K Ӝx+7'U}165}c^8H߈&c=6	%bZS?h+嗲Jr|cQ Ur2#Xpa$B"i%Q"8Mi,'&mޕ&y?c$SS"_ʓ=WՋSBjҞwH`p j"2lF@US\eї!73^?w
Xmfx]>0v<"v2P
p,9PpMj"➚4bhuAPljs8F_ܾA+jN~Fo	2I#f2&9]TK~W&!豞.nԁɞm\L20}\)Q }aÙТ ]T~+9.&ph֠1|\fX"ףp	|At#Ɩc'4fR
ؕm5p_R-pJNr	v96[LQHBx<>}+sJ̓c12Zֺ^NU+m>g xn3kӄ 볅
#+~7
KaR0jyofpe
_3XqGV F62*o?!8]hF{'dg=MWWFb=wnЖ͎?;x&FW=6ev.r;:b{VCAS6k:;  r$
hoGTvj.X:{mewԨo=z辶伀Yd(FJMwnTѾ(}	2B⥣	2ʗƩ|8k/OkYf14^-*Pߙ~S_sgv3iaʍOV&m_q,SU>KqR>WɧJhGFb`
>֒S" !|yb9WakjFdk;M!V*1+2p*^xߔX&Q݅JrKAjKgDt)sg:p}Snm!}X.ubC]TF:hz$g8n!h:u+ :PKoi`*g$Ma7챴X;=Af,v\xΜٟ|HLH-	n
Ҫ=.n@3	oTe3qpi}Vbrba[T6i/wG?IY}b,k
3s
pg/$&َΗ#Pv,z$|PӽLm.(mU$b6K
taRm6}@
2f>A(rua&Da0qK%w0RI ^eg,d=1}=/_w5=5B@+6J+pڝTvu,L%-1
eCu$2mlD0(jsҟ|Qz_rۇ}D:9O+R> ^zs_~F6H?)tr#h o'J|`9^_˿OjZf@xZ- fV(Nl pRTs5cwޙp/\TrdANQ֏Py-B?čtb2'V$F:?ӴMBқ]ŇLg
H0MWЉxiab})uONn/j5Æ
#.Z̰y?"pȾm{
'rCly)?\3NG Sv2BƎ ?s_*tV	;00A5M-A6%Z
gMfhƼ~x7
7vmҒ]5o]N)խeǃs򢼦6=:=gt!PH}M#fufH =n<?2L|Rp}ʥGzpq
 H7/.B>>؎ëtȓ\NO@=
`A i˙"10,r]
ݩ՟ wbĪ}XntePdiԉzXCRD00}͛ƀp}<Zƹj89hd
jZ R
:Rnu^yTz΃G6d1?lǑaVYuLMFUa8<g/-ՊnQ>ԔGoT~E5|U
!ғV4977*}6	o,%t]vDPn)O9ӗQ/.C0 C(FnD>~&&%Zm	Xj)zl78ڟ9pP}DqӕS̯Ԙ$S.!פj.,u|`m(6Ѹ7UqU2uU oΙ_(<Bb̽K]ˆnu!M`J6}#
Bp7\%t#
Il"'`<G?jz'Fe[c8>뮀Q՟[mf_\?;$м5kDTjlSi
k%bJ}sNSr)@8-|dI<Rªrwt"{ q;, C\.ԨR32ؓ&:Mp}V{lLHL(7J,,0]Ma #iNiv*V[fg-&-}6cgesy{;~Qֿ5>L6SlH,pLU*@&^.٪9ŋJ	-;|غ ,֞5|Tԓ	K]8Խ^wB8x/,&/!nUa檔ւl
 !V甄zg=o~<IcA~xUmx}ANrXbЋO(cDd<`_&XK+#L2pl.@@n,HSԴ@r dnfn('ۛ2綼k?shU/k)A!)fQ&RGMgp?ŹEWh?OHKN*~o>,lf>֢MduҊEytהiᡵ0MlFlo?@tTeƎVMF,qsRB=
mvPeM:R	>d6,Kz5qy4ͼ/~xۖYaME1米X4#8՗%aorNwS1Ig:1zКL.T?Rn釠ory3
X揕<|	m.fNgT5QVu֬m3-+=)xksr2
cF0H&]զZ'$՘
:+UMl5O` ;=>QTj<4ǜԄft|ϊv׽{DSE9Wm+dlMC3{Wez>Ȭ-s^.pg۽kGsfn]ZVprY\5L2䩘ͬ;Y0#2p
׼%bO6b!">no J
b,BY{X:Ѵ~ VB7ٜql0s`aNMg8_^/>4amȔ8nIX1tOQB]ZK=y`Ñx`w6]ot!	N\G35k[I|?\eDFr+ʜe=ɪʰ;d!ЌR)S(݃?BohSg3/U6mָ̐􎹿Ԝeb^xqڞ
;'@z.!7sN
캣>u~!İ0Bt?"W Q62ƓFҧ;PD{b3#߹u7csDEZ[Kww{:݌5\b{W.\a	L2#|UKWHnM%@E/y)ۛ'1/g͗P
bt`
C1_)qfe⧥^1YaRQ4Q/^z>{XϣqJB8@E+NasRRvJ8m9>al-C_dQEʵ\WtMo>
*7o	![Dkj<x/#^u"9/fu@BL-?PrK5$X~u	p^iv*alDU+!w+adBPѹ6ͱfY9Or`L|QHyѾ\^x z"+IaU-l(]Ad;g-wP5NS{٘K		dU1Ji6vM1q<*,tȌ_߯X?<szoG[0r	M)5	GoV\AR>W{1TF⠤(	:įk&aZ'9@sj;xמ7uk@Q ;/ I5r5΄iz1]ONrޛN)}Z.ivaswZZh3i#uf";	qs|y\6wʜFӓc	<ވSS{cҦ>ڪ?dUbx>Z[TrS=N	7<JIG+@o !<s7sVhM#JLqkP5znȎ,
͇G3J|f/e9 Sl
7Z S tЗ'6l-[lP[iwU]뼄岀!$[6G we=3D-b2͒T(-[wE~8'84fFV5pG3 1Ў?K.W'A1gàeh@\C+!v$p
1G'Ov[((FLLeo+5˛5˽&gBPѤ(9IQ`]u3l!5@Z
h-\V/UDA jh>N
L"S՜^zj`s|Esy[\p᷈{{uv%KYVҳvZNh \I)d5BT9q*!?ZDXoZvNXѾ''DWOgŧ^O	 ;CbP;kګ$VG{n@A|egmOֹ.tݴ24#쵄ZjnB{8*y/C=StrGTJmC=#**niә1wiJz#3hfnz.IHuOƶJ|?|:GihOYͲsNY CHn4G$|aшJcWH9	fojL{7A!a=[f=5[ă{L6+e#*%K[GlXYO`80i⶘8+<UFo~bzM& "
"7Up8/!}ɺ?:cNA1puR̭xNqAk5YNZY'Ec@+9md;pJU{]KֲZ"io2.CA,-+=&SFdED1o_zo_kI%Û
ӐLcb(
6Q%ARl>OTowـ>(_tFĄAWvlձp\$w>%rxb)\:mJEmKEr>>kDa5Hرz.HXx2s{Uߚ1)l亡J8wl`\ d28@i_&|D>j5>%M&!YpK!6;^?:M=?Cz.ʝ^dA8grw~0WXG#ck$(wjOVm"S3K~"jzG;zʎ=qz:m3pb4CV90N*_h$]b#YzJbGgFG*
Y%c%rL(N={Gċ;=x?x|M(ϧ9ht7"6OkwRD}R#ˌ]>F2=)9_ΔO\!7"E-4?0yvߌ~)R[
}5)7qUIG֖Ӕ*d|2w^1?-e\Et:>oLX8H[M(<ŜL&afXNt<{-2\TO_ws]g9.9ܴʔ!}P>1&kT7Pc#ʰ<O𤍐,GOHt
K 6V9Uxπ~X{n԰5`Dȣ+VvM#s.2wקEPR|1NF[ś3u,}UƕWM==OS $,?nJ=\̗VvJdcP.07PFxc{3I$4b6cw?@̜AbQ;͢#(Q"wrػdySYEğ1w1uqz6J^e򀅻%+Z{;Xdm^T"E=:=ه:eQ
GS[>95?Ym-Znav8jg-'-`{Fn{0ozerOɵ)dO)vILg8<XC8KÔPx|BMq!T2Tt
%$K4N&ØD\|6}
$5$ܛuG3Ww]
:$)[6l[dǬ  }Gc`3xSjseeC=䚙%jܤ(~l/ʽG?7ǐlǥ
&3arp|q
h+U}ud^O<:7279]|W?'<b(=*nN㑆Aʯ Rl`AY+ͬl9z4_ChWY7P}LRƛqfWz	 yS;c@WW :	sF>PNW?ޙK|R_Xav=yҾӴ[dFlc^Syl:{3b2Z\|&\lFޖʼ$KN	_^p=֍X9fm/OW-gUxL/QzF|N	7P5éhHY |wvV>
	~y̨4})=aYqҘΘ.3k
+:}k|Lq"t&Tid䝥m;:_U\9Xd`?L
u0ۯTƹ)i{%45E*>y[JFz:ȂI"~\*U5:wg&kJ+
e͚n9}(.ӫ!uz>cXe>J"/Y˦=LaSxW*4sy,|zfu"Ͳ9dl^H|i%
/PhI{IڹLT2OW}ױ%g
vsO"j qvIb+_Xof4*voWqPQбqwx2E|꽫1ߓ=s%5a*zlp#t]pO{LLPIq{woD7W>+u~Õp1
p]2k|uq=}11
jmd]FFSPMlFm	ڪR2Í譚p{6~'=$o9\9s|˸{-h~ ) B:JY? =ESp=dLHY8`[7!c)kB/Ffُb6jvQ{$B<bMG叿)?	,:4 /{mI63	jɰ }`}ߪ/0L4XlA8JU4|6B&Q;U/Rַ9xڌآiqm =& s1u0A֭=h9CwʧiI\~ym(yl3kLOfowEMSڿl\f#gfW
v"l1*Ô2>Z2~z3<k؎F1dszk^r1;Sv;X&	Ѹn!@BɴF%T[(z~q:6zCO%Tbᴇ5la@*Xўk"`4oo)wg#^Åݸy!Jx͍^wL"Lz,6~=t<'V<Q"B4uw&>E4횸ߨ>fC՘:&QXd,OۓIetv<tO&t8*sB㴹 Ir?1kkV9d"{<;U
iP+;<OCC$8tLj"s
A\'ymPR2=lxV¸̝PeVpn`({x3ɼP?q 
(i(	?jШkhv&)?;C)c(_*BC{X^`
by[p-
'`
bxgpKf 1QỼTK<BvYy
0oNu@P7[#}'9C'ʷloՎg\ <LU1<ה{Z}ɔ&3'|h<vj{o]M0vt
<ܓ':|#Qi`YJs+|Yg&t~{_to=d؝r@guhE//Ɇϻ'oAQw*It$jk7nFr2M7Iǵ*'m鲋m-ɰ,"Vݕ~e*s|YMN-{=-$6~DIY79f_{9ÖC4=4fF:n8
rRO_Ԣ?M"Iz9fLYzn˚cUL>PjÕb]vѱ@qK|az.B]|{rGyH-X<\sgtuy29^	\sDo'"b:
g05pqH}YK~/Nc{k9Z2 5=2@&vr2u3Scprr$6&^l/zvG2V ")K>D;Đ쾅GJeU[ZŻw_2;$XX"$
fke@pBih<_m9e8iʭi2)ڑqG\6Zef3oblQ#q{K&=Ȩ)s<~Po4Z(E=Ga)EN]cqҔ=j>p5T@d,x5ī,nOƣ_mկff?)<*a5{` gaCxڰs,A:)|X/{Y
]鬭`78(Wz2{Zr+I}s!YTOKI3;8酦ug=">t32DyW?կ<ؚrZFIAB4s_}ys|:W4UR
9XK
0ak@'S//G94ᇸONne3l6\!86>l@RZxء$68Ǣ6d
8C5
EE[Dm6<y|O&^3q u#,
L	 %5)fqӲmh'*mc,a2&ӗ¾B |x㑆Ts80iw	i1KҸ[)Ax[KIዥ?Qr2w@yW#7־m5lPv
_"y3"8wt%}!t.N`!Oo4V _vFhK5#y|iyε~ hLK!OW{9;,]ؘq2.
G%06RXO8BpB/UI?DՎf">^oKL
p1'=erF"]e83lQ@"|eR$H!_D9LĶ]%N0ѹˤ	@(54tqW!Irڻ
1B8<uǧNA|4O՝yqCvrL/셏eك3t817yƋ߳!9e?0gб UȁQ|
υ5nO3rr¥w܇сp6U毀p\?[= :p`Mn"ЇS(\~qJNvB
Wޓ§o)G>W|Itaa.`Ǩwln28qT_Fn.W{*<<Up7xdF9\m(&)Pw5
{~-ˠHO*v̅n{=wӒEp.gY,[ohp3CKaREDF3U[4	͈Q\p |i0?Ny=ܜ`88:Gdg(: PZunė=ϟ*/"2փz'e6$y`c-6$zL`DN'jCkEk)Gt=bPp%nsm|eNB3 .F/ *&B"X4 9/ep|T}E5>
egxv@]'<[jr%Q3ĈO_s	ںȄ`nCX g_,./x"KoxP}<w-kctOXٍa{
SLxJ3Y}Wy7m~Kh=ɥu`TF"oE0İ?Y2"hE	9wHELsa*Φ)rBgvhӏ!rՇ}RbwrV8:1iOt~k!d4nok{0s:>fś@l\U,lT6J]a{{>d/FVyKFzwBn&p1%:gL?
;U{[zdRlT#CZˢeQ`]e4Q[gj?I`&nM.qag*\Q!n
=9ǁm_)rQ*Tm^ S׷f?yj0smڟ~rPyhBLBw	2,pP !nEӡ7ɥFRZTzs/di3!xbto4Ũc32j 8;+$
vFT`NywWQ*OǦ0awRSb;TfH1V$YɵLTĎn8 b!@Bc,Y4CknS0-hk.VYzw<o֧!>f)(gG*ڎ{'W7H&ɕe*oC7FWe}:WʗZ'-R܆U]}:~yU{	;*y\DkOC
#à?`/]&ˇ/0ht33Bcm٥<)$*\P1,~B
Ώ!u0(LSGy!,e!6綮euMSb?,-GMV|ߧ
/J4_[YɸXSTk7gCr(d?$I?ZթzVLao}
g(s\}5^~nz`dV1GrΥT)k?8Y]%v7Pղ
xmb$jy	9pU󓿁#>;V>\[P8nzE/dXd#tU+η5@k 9%R(#]`Q|>LYpsoѽ<.U%(\f_+u)K]AG>=Ot(-K2rʒzLZ̶s08MaBaY{O05D%Y-!Ak>C;t:(<>VWx
Oo0l5Za;N3`￤?
^}.q `x
\OuF7
vyj\3T
&Q \}ژ5^H)mdQ1#_~>YЪ
+TtUِQi'+ H$t."br e{n{4~WXqa)FutOوC2UX
nBMwmiY$m`-9=l)Ԫn]mlկy
>AHh90~4Ur~r.>'^?5}Yu%n*B[ҡzl
B3{(	
É~92ҟ8XWnu3bS=y[M;S؟wP$[% ۦ
\"imWύ֞s-O>M_$rw⴯sٔҴ9EFu	k񿢑?LMلWv=+W2Q};sE-n<ϧ(&ʋtCK
?׹`6X%YJ0s =1C侂un]0E.΀99
mT!),?9k8i7u4DTaoSH6$**9(_f?^)MUsR	Ly1M/O:׋Ӷfa:o}K(V|+7erHxGrAF&lkw̷GU=Кr(n#e	.*"Vo3iGT|UI!tx*CGUTItɵHtK8V	KS
sw_z"#`:MbL(>K[43w,=%2Ɨߘ0C5o_s_eA 4jCFy_Gm4ķj#d`Zˊ1]~pNiUY憺J^B'=
So;br1a!I@[	% Y׃@(c'9CxFshlB'[; "NTHz>l
7XUH,2|_pۇB!|R\+g<clQMS=Uݯ}loNOݩ򉮨n1kZxeftRyM+ڐG-\ϤaIˡqȷXZh%@A;nax&
/^[WI0PƮ;V,>p]p355$Rdj YpIT:^IS|^I8,AZEC.hbpv5*!Ҟ^oi+ypjH(Hm,sQܔ3/e
F Oxb m-¬i` jFc"It+{ϒՋ6bvxeAk%S}/7B?TEřRK0;LƲEpQkAJ^ hG;!cGcWպ/ %Z*`v~~Z`ra^[%îDÂn9P+[D |=J]&ԇҸazP\\	pPNe)9)ŜZII~{ı^]z:>>[bLyr{@S~5ٝ!n
Sv5ϸ}XBxjaIpu>~Srg)+eB/{j0<l{:'v`?z n2F^C8`*WvqmZ(i[	0Vz._,7z)]x15VT`;nuJdvT^޷']r_H,ghT\)<|ݥ>XJ*L=vw? =yy|tA: 6@;;EttҊDfF8IL'1e8O:T1^w&9@yu]K,CIk ᮳Qhɷwa}h{O ubNdU $9`YњӤ.! sZ *ھu-0c[Oaz.JbS5sk/+bmDK@{zʩ+h_eL9s_!
8?
VU!T)/hǾǯ⸃:-u=*:R(^O-ẦaR'POp4Fn7^+x?&ʬ<QϞxHH3T+t^m!9z0ޝr! s4 Oj>|}}ڼj.bŮ1[pQ ߾8Cj77&?*	]Q{#MzSmW@dEeѾwl g$<$f@j*A!zN<t^qGS\o5cSi:95w$lV`fȦCH-6Nb V!u>~x/?G~k]XsJҵkd#YGg`GZf{G*yIɧc|qN;~'OPItO%ևgвE, LE=[׸5
]+vY_-&mJ!w_f>m{߳cyB{68]4t)a#u9hAQU7g*7}dvg)]8lE0¶񖳩ah(ܿ2_k$	]|>Iح Z.Ñ:$Usly.Sy>w;Ԟv"	U(iG{$(+P&0ȥx.B,֞-1 j7
xIF9U=CaGأFG6xZ<@u#[]ruǭ3*
^p|9Ry/[ׁ3 
`ac+7,-zdP&H-J.P{~;|8Ďgklv̒70%l#kgKB0mDWyejBb2q_0k#hṔċ}+%..cҞƓsSRm[J[a9`ßv"X>'QZUUwOr*a<6"=#ЏJl:Y}Ry@V̭L̅гtL{9zƴL_7}wo<+'V[:Wt%'Wi5Ҝ	TVcD9;Y{ߊht{]_qC~Pg>6$bc͘㘿[\IܻxFƕhRVnCئ֖bLUT%BESz̷ď$0n!oC)&w7)<
细Mo]+Mfř՗,3{xLqD(	L#Q)2)aHFPt%%ڧk̽E;ŐzNBgi*dirTaJg_3/tĜ.)acC(IY.1HSŏA[ofOPaXjpBR%C
R3Z:1;hj)$$ҷ1[#;`_먴ȧo~=ٸP=!9dSFMl(Ƞa_oӓ!?pCOT1D倜	9ս&j)q2cA3zLBgk+]7Ж{},lr븼f#og.lB85
y.s[f$ ,	%~xې!XjR~v~BF&>DK}90:t%G-tC#"ɻҏ9Jo"s^52bO)a$:[o57|Rg8@+WeL?ٳ)JRC~R4xj^HףL[^kba-~-4a7"FjM[met1=űuٮLu~ċtx$!bs!HL+*`]F fzj'>jEP ]{-UTOɡx6~J#bY1~;v%MW
Bıӑn-1#vyZinF
o<t	駪Y%uƐĻtӪgޟW<5-{G!fcוѵgc_wABSŏ#_
[~8fQp1wP
Ȇ7 2j`sD%έ :_ӻlim*~_kʒ׵CwwpWվG!:0t$Ck흖@r^+4ɾVkߗ@;2j'pvcE=ag`>۫%ewx:u࿑zʣ9s^.;ʖ~'7H쇧'7S"$5JNP>*;!p[OS 0EDnQ<
o#Vf}ͬ>'eHCG++Hp0bw>{q5=&
``)鳚M$uDPV|czFJeM,XLAϻ`\WHs%	>*U/N>v֠
kP^73X퉨"~uWbH?L-32fvd$C>},G{>^Ӈ5ϛCzXhXWg>սKL#vƟ Ɏ;K颻o`4]k}=<+9䫟j6'ܖ,q	sAB AſU=쁰5.F-9}kUg^AR[z⋴0Im@x|ՇyO(ѵM631s';<:[?uEmk~m<l";<	!J탶
[j|G}W
_~6QC~?,`Cma	|ٴL5._>5-SM0OX![stXpT,UWnq췝<l9ثсđaȑ=8w3B:vO(v
5r^ܑ>0讼?*y
4	;hhx`"VFfw\KmN+R}; <>'݇GxRU	1 ۳mj0lEv|ԟǽ}mX4'&j
OˉS_nGv}?]h1OvWӗugfշT	q̺S:JLzEs\ ز@p\N"mVlU'l`5
xX7bOV̼*so"Oz%gWx?+eޱd$-veOߎ6~oHNOU#Ǹ!=IޗӁG lz)~[zLSiL 9ι̦h
G'zB;@MP֌º"3jTT@.%~5ہ
/Kn2N&X%ΚSG^̈́CbnyZ,$@O$
Coh*-<,H|D SӥP'dk')U5AeF]Np0K(8T\[Aq{%yNs{uk@ݾF?|,ڗ*ÅVkEDK$Zn[(%F'^0R(ᾴhM9Aھê鯿db^xf?Oa}I2ghPR#2Y{w؇*(u1|>Ov)L}/O0ІchBw0/'ޓCz!BsDXJyR,HN,M,?3IM!>Ɗ(I.K)xBnoty/b.G=^MByѣ'纎JRT0<>h|xG4{ADTSzRv&BlKz!`DH}w$gmXD{bfcX(AG˚G6\VlRkݺshFp)aI^\^\Fz^] pE@&5F
ħxJ^T|G=Gtn&e$0®<2a;K_8TG[hK&0}_b,P\0@,ly"_NNߒ_ld64;>f@Gm3,Gu
싋84~$Qm} 7"E}/kYnB.T.&98.QOJ$#ܴ딞]e$ZƾoLα;*~&%8=)*ajO:5J;J[ɥ>|D5~G?s=oх-uv' ڜVĊk]e¯o ky@/p2kNo\~BH逻l(P-+{ Sf9rt tO[FkYĶr+DE#z]A7.!vY1[0s.4YQ|@è;uW1adNe֪QLv{J=씿
!v9'>)Yl&nN{N),iͼJB0*!Uq@ʜuq[htA%Rڊ _z^d gl+ T"Y0;Iv	ϵjaQ$Jc%1<ʋCbnFob$}v70iMDR,
`b|`l=jou]~T=Or-)=hP rĞ[*z0"lXz ؉ (̌׺;/ᦙ:2VJL̻G!r盕+p9Ϛ@n+Ӑo[s<"[& ;U)gG13C3k	#uާ]~}Ԅ/JuaIm ^W4Q+ews[wyyB|L=*VΖpw }~#M?H<!x+,l96;Kk90P(dZ0
п3N9e`{zX uJa&2h<8t!)oyYr6/qR,,]5;4Q,*ʅkaTs_V{noB|20H>:Bīx9
ڦ>?J@0-wq;Zv\!Xd/5d/#i5EkNirtČ2DhъĞ?}5ݒ{l亷}JVk"=NAa3,]OkO:OYCB[bc`w}O)Zsϫ`snb/H4r$ѧ*\hk]O}-؟#bʽ*.*Ll@z6`Tbɦ;.y|326Pm\1&Յ,#Z<B~}.`B;TĶ<$@r$}GJ@	y*XviN3v1
`'w8I)GEbVG(w~Z&J	[YNlk		3l!JQOp|]PqmDvK Le*֒G`Au:e	!0K|MJf6H`t^Mc+4)i!>Oܲ?|句C.yj[v	+ʲ^;\eO9Z)'s6~7|'ۇzgb%&بh⅄a=?Nc-*
~_aF1A||9$"ܭG>à?
x=,hu`[#x|E[c1]4gI)=B֔X*ni^ϟqp?{X'ffOLfPCk%k,nBv.Ĝ	)]vB}ݪbޭIO2Pa dk%pҾe<
9]tgq=3Ro
\EjL
rޑ>O(թaԒz|lA{q0%L_@,h!
/dBP<XNɮ/;
sબbk !w|)6PL/u8@G&FӣHY\2:_˅_:`@|&}{jU?@WbxEf 4<RU;?iCV'MzL@*q ӂu2LFbܰm%#=uÊŧ0jFW0G3EAXnx}&(HYL;xAOnx!rZ;ǌG
2ȉcvK*L^sÇݲmCTIy @[)0)6WB7Z{VS4?r(pP"pU@9L>XWxK> :hF:8O>*u~ºJ]O?ctBwLS&j^yvwC
A$nm!S`52vz*6u5][WNdŁq#GgxO,x=t^I:¡sx.C=09U(NXEB9L %$=m0cœuL!%@Y c(lɢ.&/*l2J)};
uF
m33;! !p'g}J(,/a< q&juPPNT&SzIe(?$}UsW

.5<yU
{
.@)M	5ROsTCNxup- bS|]g@u`o6 M?6eMco÷I`'4[':m`Q[G+̙!K8Ⱥ}*|yO~^Ďv,CF0tvv	BVyGYi30DT&[^{z
 P=iIU
yMYi
f߲P)0vYpA	F˶)o	7c7{kGդug17x
&
w I48_Bfy|kX:8/ILAH2}W[8!ݎv:cnm)RK_n~F~e3g(YDAdj
*\~(so4f_N۪}r	

PEZ^KxM T	u+"YY_~JN=	줣wG?3q;!p`n	G¤ᤇ_1
,7_dQb
&H*T7rz>n3cYQ%U.FvRID8IBG!@7a-2^vxyyqXVM7
}2+ckZ s
+;)8ano/O=A]asw<|
ʱ6?b)t
:ᥛz7|Ֆ{^9;D)"uf&+lKBh?JXh&CQfG
rakmTG6#.Chӵ+F>7}(PVAA=SY8ȼ
/G@ȓ(Z+,E|G̻ےdV5d!k5|w(Gq',$R0jģ+kB#PйJ	$my uI[I8i^_DxG<c_?F/I=6hF+T[M桺\!ڽ;Bo|wEM"1Wޱƽ0X̥|$v#/ђ% F%
roLO̡
Hu{	ĶOdg\eU 9[:UB
OVj_/s:pMϸ41]jeS݅Ha®TC]l\Uͧov![(W
\$Ez
RFcy-{78":-4dVbue[=8<s<#6jK3^XtAMygvsX_T'g9'Mg-8m9ˆs^obŪ,dfv09ERuvaĐM4y>{i:_vڦ7NnaOǻln)БRΑi;fdX@<}󗧮7gw.OBd9c0:$xF]ξM'S_y{
K@PA(%+#.IeEDR75OoPa#K4
yjibp&HD9new7+za2 C2L	М|X7)]r_D,3lj1&S'܄mzQP	Rtje&PT:T+`NLJ#4Z !\{qWYeڝ6q{'ډ"LY3bfeϋ7pgHsHZ_+o$DT{p R;l+ i*7͘//>f%kiQ~ͷy?(eE/\%4H'bsr>Uf{]C(b
ܐS9cG^%t)t%S_j}R);bq1
вP0[s~ny.J ztUsk[eWX1lgAb}AEod`_Gwfm9;.oG
o&9OF:{
DtJ?E|-E4W'.qO1ߗE{>\?t|m-e״	2xWEOoUE/f~pw>+d'l,=n!`蠭2.t
"yPϼ"9n׀v^^1^^ݑ'N99I/i)2X68":^|z@aK:ꕙIɨ<P=ii¬,/P8SJx(RdUd1!*sл$wC
SϫL07\MB+_M^:!4jc4'Xv//GXMRGBK
΅?WkWwh}z>긽7U'xIߛ ;u[,$>qM}a#IvPx["lWi?G 0; [C:VGyҥ_@ۙ#m7V+;hҪOW.ߖk*]t"8@< üs[QU@& 뗊U+f{f\H	6KFA>=wVR<.߰ӼQ1;
%9+R'=J8}mai,i?},˻|Ø^`H瀨]1vD4I`n)᝾{>ShL´Lb,&>Fi"-N|<P@(D䈒ś1j`:G\9v,EBW(U]][lyF*[uqI֧~ի$9uh+P}mBXpveC@p<{(aOt<3)GBb\5VY_TB)+a ruI@(Tm6c]a)V墨{9>"B?0βdr/maF{\hMp4O"7,[]k(T@(^n}нR|g9-Cb1TvR(&;Y!	4n@2A3S֑m5^G~^l|G܇9b,!9W8pwWWRD<ZR0sqzGLepDMvõXe9>؄ܭ[M,fs>Rt`ldJ3IV=֚yFܫq+ۄ-v>ҖK:]\E/	Ƣ%pR83ØAq
l'L&n
L*y>F6VsN[w-<%Yp3QȵR -Ty}^ya</	w<&6nt|#4zϯ8nҽ3.vWT]MZ>%1nG*$Vu)M^{-g"3fc! Eg[5+qv+^}EgETt Tr'QGeˑ/'P{*#-`f"5ڥlW{Ew&̓oϴ9lI
Fl;jH-,`_`Y')s͏Qcvg`0Td34k'(9;qE"!{iB=l)7)D~t?W',c[LN*-]JxNCxtu$P8ɷNCL=C8LY!cL_	ֽZ
}3xEF.kd2S5<R>6yIY&Ɇ|L_&@@fVTID(Cو!ݺ5\R(2Z^KYdVĳ
~C*jCS
S|Ian(pY6Q^4oG!4ҙHn3eq<5.:
|O\:B5x^8%b<E9^RN8{eiSeT ];^[ΊGqYa@5=v=ʻb͕$պr.jƽzU칌͊/^?S. /_%iiv+vr	l-A1`kv+gr{BV$qu U(U5bY~f>'!1+>[	\qx#~
Xlp+$ckۋPGz;ȇ=[Ǎxeea؄HܠBj:O]׃qE.a5fN :5YEBzm>ybV Y䦪eWYs)>e}VmO׳Gs&MznM톧41uVΟؗƹM?Vi5ʳz]>Sz=
ދ}~kĻ1R#DصT8_[ юWnTʊ'P3eO_4Vtct1PmR.{wzf_Ժg&_k} bg%|.щ} 
.:Y cUI4c54m[y+-wJbhW_*Yw}7oүHIa{ZS ߝЂC( 帟	b~ڠ~q6{aLRRoI4H*:<XJvJ]sv5SqهT `5MhGr(Jxx8,u&6sBHnSd{. RaR]{p#hL>;wI?.?H0'l. d2QEK_@T_zߤDst lY[c:TM?{8t,i
½g'gnzP9O$qd.|=ٯ|rxg6M
喠cm5 o3C?iŦ+=%w{(T)s}W#+>D;P	<]ja4WGx;2vᛍh/JԻ.;Oфh\Xo::`dEdw-ޖtCI.I\*̞_F~jVs X+gLI'uMQ3zGL6niaX(>8q}9Z,Z,2:xIpE?sU=$炯N
lIڱ޼maBx`[:p0:LG:^X	ٚBy(3nfT5V$,ضQ[❇]O4tΚ;S!O]bYlzH2znd-brC~{BѼ]/Sə|.#;0"Z\l>꾍B̓?TeP7Wl>&xaW3/lL|	_iJ"sžVvb;RtNݱʴT;Ac.="ذvmZ>#iVF܍5Ltueıx:F}Ā\x#1~ubtOU8g/p_&y+	"% 7[]'{nsRXs(wo[!`kt|؟>4e=ѾAv{]:ؿ/Y>.pw-̜Q鐜"d( <Z_Sv{
k
O[b:orJ`/ 4H
HQs	YviS.@mm5).8lӇX8k"r+n;k N4Ke
n"ysP .qQY
J%d|!Oӏ8rkbn'xfs5iH_>Ģ9{SF~7F1EVB|cyiF!H;M2>9,f
آ%xP,Y"Vh{*g[M6{zxtk
)_ a!%=s~l7`CH:5\^Nq=ND;3}@N0%ٶXUSql^sWLqiv5V>)(Dh*kYC6ت$*5Hd"6Q){by䪘dUO¡:G2+Cq̧п'OtIlԍdOeRhh%_DĿiފ>'q kZtBiB_&a~!P$CgSٳmsANhDlslh&>}:B"K-:}$VUա&!*F/)q~N|8hr[8yD]8
gާpįѸԢ`:Ƒ]ld`9'ݮb`iI%}g-dP(yd(
A_h+m4?lxq6\#8:
ħ9,fR~"(" L2սǃy<{4r^Xk&CŞ|·2ېS!X۸h鐜>,M⌟tR̓Ym,Q4=?,Z5_	iC_+m=,	p)4v=ѷGe".sqgFp_ОRO!3$[As@6v_UƟƞщGGzzx+@4&p-Mk>VϞ1M{+lrOdìʈWkΎ.EduAlu[>ؽG5%oͳ}(ZU>GjXH9˧|fW(>ˣ>Qaԇ'?[5vۂ
9kE9(yʹD
jՁY~l!NFdg<\H~iu_ ՉZ:/
\1LuS-tDne;<%n`Sy)`ᄯԧ&N,*):G\pH2F1z-*,N!"cԝViNY~dԌکxeр!˩S 324wVnb͖
Rpdd,) BP/N41qo&1iV@`ϼCGp-@k=Jo#y"o~AMPFv85<+iСEoB;<:>߆atOxo[hH/-xz/RuGBsۻIGgMI9(B%%DvKҷerKqԙYizQv#*r8'{%)kd @P7:a_m@GN4<GtnLK5{5
3_[}[wOn_Yt~Hip5tOYEOC-\uu`u _BynOd/ICH'N>p~#W+roy'";c'04RVuƨ6
iB)uĽ,ޮ؎S=W5(AEB
9eXrGVyn6TC<ݯ+2xZRvJUv>l BӤ@zFeZ&LQ
wi'L`0ncۯ[;{h!%f}Cs^?Du>7FHiQĶNՑD`8'Ži/i<$cw߰o9h7Fk
^)9FGwxW8M5-8o쮖L
uu <{2[!pcK(yds^{ﮁYVMrz.ya8_` l1_Z
-Vc,-|PLjצB9T˒ R2vJƚ
xy盝O%Iʉ-XtTDP&-+kyLwWiFX(sWӄ	U+b/'zz#G@ ]dџ*DEw OW`QmW@iN]fGu<<[]QK%Bm0^bsp0ݩLJ7(:s$
E,Hs$*c,x|\~?l\Bt6%<:)ZHY
=U=v]"8.-^Bvcڼ>O[&-d^(G. iMYVs̩NNYe. F?GEy-fk{KVЂQTr*CXO^)!t{$jz)!C/y( 	 xK':m8_v9&1i<Buf*LRTL 𽘦̪ٚ!W=E>FY:=Lխ5_F8-:;J|@_ l揁Uz
p|Ӟ|s1s۬}XrIr/^dcjfո#KW|Dgǲ?@t"ոn+͵B=bɍt[M9o+}OJmxRpR:(Ĩ`;RJY)))s|1c[,T!8K=DHk+]1 mzfgzJomT-㨩-/z	YPj^>z}+_܅OlN:`ƖeԇDs\mTLE9_L'O&duX@#S j+={	ƶ9ѝk5λ2[s`p$	VvU9)p<:BbajĂP8GO7{~Lac4Ān)@2bqgBt 
O=oĩ߬atJLq T]tx\lDxblqk^ٗ*C0t@skZ9zj;4̫_o? >rTRޱsuih1pxn#q<MEÑ0J?ݪZWЌe2ϛɆ1F*Q\8@LJFscWVVsZG*FM4b4|Ƴ{";QIź ;0.n%>q.&1SHPu3v([^ZP4^ȥvϨ><ְşϓ.9߿PN~o߰q<fb%2z`D$]Пdd&_AfOQ6*ceS+uUBq܇MߣHFKvK5F;y޸|DW
p`B	_ҚDwɟ@>m/gFOvm%1J/Δի7vW/>yUbJ1$5ꮗoN@ySQP=d$-7&}4
h(a?)s+ inT/7-+<?O
.<⌮IuY1N D_o#<<R m%r`| * ̗̗Šs׬bUUow$pM><DQWS
ZEVz.<RdpB3OOTDrny
tԞOޑ=j`oqBeӉJ
v;K8w=ˇskp w\Y /^LǩX7*?ѷ:I+S1
3Qb)٬hMݞѧ/!R=|Sp
\6;NA#XLN&DK	򔁬	?G8zE_<
Ys:)8~*_?-> rq8; +K*I7fsGM]1pg&F\S:Rre([K"Asį]?:]ƦЖnAOuB6;UYAX6yY|Mp=˥Q^IER17 ɪV'tJо4.(j^PqS>_gN""4'qpkrզ+3#ނ*;-9hvnmؤpq96Ne,a?7&H[+>1څ/D#@j5FEǓ#iNc>t,|֡ʵŸgLS|uvZ0ճI+Aڞ| }n.VVNjv|'rˇ7ʤ}x1qhT[]	=N3C~Q۩g<)gPQjAfE[
Ox+e72ix ȇp\rX(xaw
n0N
/ƻ!hA]hXjpj
o/3VA Q@5%86"!󿎰o׆W̻hÌ`xXbmTxEQҊG2Ň/9*[97L]Uq_$]MA#%A;N
~Z1GS'o(#\`j9]
۞I%BH$Ax/QmvĶ$-xlw
3t0XχwpI	mkT#37b#!Usɮ%ARקL埁NVzOo-sY. C] !̯}7]Ѿ{@8->:übOQ6	bIc+T_CZZoHi#
RG>}jS
I;2;4ʔ
a$։[iH_q'θ~H=	5"7_R]iLMUqs~%wvNoVtbzd=an> |9T
yS6%5DeaCw$vz(~6ĆfEָjԃ	 Z٥+#)yq
PxF<PB]'hOnw敛y}XAߏgJXH4F'wD+}fM܊ɡc!gzBFLy<O&B'֙JN&dv.W.*븙A6Xqi͜2u%!vΘpbOL4-

Yu{=}>s./nr{rnP{hAʞj,JGklISq3gg}ʛ tJL|rӐ J %Ȃ`&-5q[eYj|P[/fO-!SWVdǂȧ'ۥK1G.:/P<1=6ffg5IvyuY
qc1V{ұ鍔0Hv^Yvjߗ]C;$>!UV3yv>N$
}U2F_SEt<Ͼg,/WM
pxYbg`gC8	I* j^l΀jO \J>D2
'XLǲ
`٥1`|vZz=~Q1pD[(݇jHשΌp<-_&}$n@ёQd"]-k(SM-;x["mlaǉ)-`:f'aPfu
Wd;<,1ǼdRU 6!;Ehr9Ѱkr$\L8[ϳ{Y^B0ʺŨ쥌S
e$OݧA;[Y19^5H9^(Y6[?Iz;lU:f
e/ZnۼNo_tqThIDTŢ@`CVo0:~#}`[ae9U>	&:Fހ1){#m=-+VN86 nYAGxދ{TV
H1>G_x9	ܷv[п#ҭAݣ,]2D8;`g48UtQ:'M~U[V.Oqzgΰ3AH	Tx/ +×]<LA-XNDth^ÌIҧ>?>RCT3ֵ^OelAr[aOAbG
/J޿Ӆ(S_E}9w=6r*xJYS?Mϡ81GƖlp)W"_Ay</	oDxuX(Z 5N{Ct*61{'|Óqk?EI'<fR&)B$-]ZO7~N5MvG]ƽJ.TEx+E/0	
{Ky98zUyum-'wO;"_+$?0`QR7TMm"E׎X;~N{8Rl8 "Q'r.TL.:@l\>sU.:` Gj(/Sa/ϗJq6/cw%-bm"\7FDMssR ۹W2guMdۯ'+ܸKAj\Kĭ}°VufE;lߧ|[IV=ߏ [s02[oаs/q<?s~sJ@ _6d<ك(нxFLXW[IV>Ӽ՜[3J㨏Cxϥk~?wrXΊc8aNGUﱒ[_
Էx>u{<y	PAfZ=)nfʾ"#}ߡoXV^Cbk~Nl^Y6ê˕F/`xM-1zۭʻ2(\{Hz1GV/皗|ӓ6q8`y3,2CnFwlA hoZ}pn*kyL\N
+z^vZgye,Mv\9`,Gnʺ~:svO|L_4$ktQeu/A77ynOoyosmI6=MK}Qmm`Kl޲+VV>NQÎeZ"u
Py8Buv>Y:R<` r@}hᖫb
,t磁5dIl$di4sFȓ]R#6.N2s/c4LK^83\W跺./cʉj-X!4<<ȼU]o%><٩oyK6ǣ60ӏ(~?\3oơe/0y;cSQyr
OW N]NI귪YE:j|X@,'rM8쩟IKPnO۟@Yt:$]6NW"Qg xt	k(\(e0OwM8owp&2/E׎ǙR;w qɆ[*Y fj@2i5Ƚ<MBʊ`"W`rfI5
IHv>Q-$dO7Xy֗d/-aO!Ʉ1Z˿*);dYk/(lWeKQ1z24
7
xe IۥA!'v_IU̼:{ߦ
,.3OMaN@krög,)@AlSB9.w<8Z)΢yՎ8d3m9hļJCAh	|}[\&?L(^eqXv]ȚՆu,V[Hlc$2H/Z]3PB/9ZPh\KY"zWxQE[
f=FO9{h'@=.&.ܠ&z.IM- .FI#<jKe'_w+Mϗklnn,E*a^N'$)+R:WH%#j1w+wY[(T[t E p	]Up@΂oS[Kootwɸˇ?[nm@e{To9*顲AS2jepo
fQhaKᲵ	z)p&Áv1Ի`Ï`×Xner kk5J
n9py(NqM
)<z\vQ{0&>fP0LLn)զL\:*&
+Ȯ?͞iWPE$QG<s7)+
#7N!JkJ+T967wp8^ O;> ¶tZ?O)6z.l͇H3W!޲ܞ4	ƥ]SN.Ğul.D"+᡾3{}*i,JY;Ϯ1p})To}އAV9}ӉJ$S3ǌc7"tEUmT<L]WW~"d?q"\#ɡ
ḳ_L9<!ygŅbvfuapQ",õI4vsDtHL3pIª}8I@`9½udB LD^
u@)LOk5@P,U18`>Jh4zOseWpbNVo'T=KI_ W܅4)gP{Z!BVwdxgru̞%^ζ©cǿy^h>L'0,ۭw*2R^t؉2&~(0C2ȃuvugQ`+i^X<jW'wn}
}k|(O!2n\7-%骲9OKG'tW]Ê`>Ek	W3d!Lܲ
|l("1#۸ܢˢToU#t֋&Ix
$[̣he$?TA7fXvYV0qJ@uYYF?XZ
wL]hRnL.5R\HG|hz.jg)I|91w;A,Hd{}Aɉ]x@}O`?f{M`	e'ALcI?v6R_`%;T:M}TN&)oN_3V?:n!4b
D<vE}_;#J'->@*\V6	U-
$cUU7?dVWDOWto]6Wc4n
g@Ш`=7}0 8jCÔrjToΘN[_jnÞn>m'II	#ode,<i٬PqO+دZxN,!LaWgKŬÙ+XTd1ۢ~o?vL:8r9';l	eWIWb/߈!uĐޞOΠ,c|yVlG`,ȫsuBpsrf;%ws9=-]c}W~I]w[U#"ff~B+Y5G;[zRVO|Uw_H/#8Oz%>kK,֘ymRT^[jOM]ֵ\HfLFp&j͉T?%)1Bm!e]v9*UDWm{|
"_SM1`"B\"AYGO`QO{di@($&rq7s7{ 7:˃vUk6ɚ+Tnʏs!N0dC&wvJqObu]Sj_?ݞMvˢAIv=5'ǟ$kߥuƑ13x?B{`Ӓ_'uE/xwq~EqE8,wX-(%^k VXu H޿uaԢW%LN-ɶ&4; ^,ޯr9>^e=gI-PuP2ݤ\6F OeYā;᠊b*ΩWj*m?bX{q?V}@A4e]s/59Mf.>I%"F u%Tc6'S^$4&!syD1ڪ3JD93'$0
&3,W»"Ԏwܣa9s\iXe*29|.v&c^G8d6}ː1]-?J]57p,c%3Uc{bT `fﲇ(9̑#_8X'y%m8%('!SݯD=?%.|˛|rgG˾46)ͮ@?PrhoD_5e*:)YS%8964Z&<MRދ*&3×<0.`Ƀ0n
4+RJVOK-o57-٭lڔ\$TjyI?Q4}|Iͩˇё+U-W4KӻjP{
=D<w,_3~_
$!^`ȟɣDSP m4M1ۨREѮ@w3唏rr]-صśD߁g^|k|N~k?3)e^vNXɻJސpK[
ϳ.*OS{y->lجQ-shlx@]:=8ukMw/]u{!4cRƪnAESk'HG{E[*[dV:Ðhq<Z=j~6>pՠg\K; we
smdIF۟m;t3 ը`pUݵPUc,u>iAmvd+ÜQA.u(}L"_OPݍ,}Q[ad)1<z;Eh~,a7Yه?j ւ0æ1qzj+	q<^e(/0v5_l<qUe!H+݊+Z8Ap.\J5{uA? u."g`$-jD!.W%ш{wKH%D %aN؊i!dt ̕=JLoCO_"faq :vjȄI53ᐚ}{,K,yӜx܀j-A
n,374l3,
r{N~~6n_`Dѷy8#Ѥ Nܨ.T1Wm_j5f!%qickrdBeB)˖umjEVE[ii.yX"j%q䱦	dgT9y&]Qy+VӋ[-I]2TYfC3Z_m<- @ЕR\2J6BךNg93*Q;իد[  dg-Bn
A_v6fO{U[	e3VςjCe1p\dQ|eN:&Q45(}nںNgW6(m}[7tXc,
؛O ;jg΁AY)w.@reZ:ԧM5mdkߋ<mᥠVs;+d!sڮ(L&dNߛ	
XO(Ň'8raD:-1Ue'OSލp>.^8#=XK`hA\@xT)V~:ZTԳdgG=A9Ќ]NCG-?h>)"YOUTG6JVAQwd|^8_j@iYròDؚ99Uw]d\@Z>AOP_*]/ \!=du,e<,!lJ~UO_,1Po4MF)Q=ee|IL#\!8*(O]2bGa-$w;g3,ş5Ǧ8)wh37ssM>b+|Q~L`2[y/({[qF6V(Ifc<Z"ۋ(-\xigSq%qf$P9iFgv*ϖ3؍-Bo5}bUo~<>
Yc⊪# Dld7OKڷm
 s.^_w1kޒ@.ֺ;i	9[/59ҞC+XڍDxA<{"Ghej-WNuY匧*@5QQvĈq] 3懺wYXK{"r-涶vC^~ ŝ(]=v{BŶ!@J{~ KU3/plTuKQn⪱'G.8[P3HNvӝX
<*eNZxp.EK'ԗ&KPOQ&zߊ"ߒ,REM9i!K ;[q{|{)Jm5ضj3:v
h]B`@{)z#^1IF$uq\RoBE6۳UüjYQy1rxXդ;M~#p?,qh'&{e+liMT'lsjDqgEw]5öƨiMPb]b_F`2quIR&YKREaUw%uD%?@k+$fvZd~ǩ{\M,ce>Z~tdҙ 7UF,\ H$0:/֧vG[zVDS
ӽ/-~K(Ӑ62ik~"vIy]o1X0f-EpsP(&ُ./jPEG!.a!H̕C}i_Ⱦp+<	Y6ZݖgL\ڑ[ݘpcPĽ"x>S3kLpF9e}/ظ"kwQOG&~[VS&j}Gh͙]w=sHmc+lnZBWa?ۜVO[^6 }/+1=ii%ɤeZ8i9pv3qv8[+msEʬ~P3H{WJe'$Di
w=EB/գUB?Kq6lتJsq$(6x,l]'6ۅiCmΚPݎ+2n[kbK:Ծ W>J'RUDp"2Cɍh-ﲕNh5zKhz9Ba[ :?LyL(2>
3݇<RÊ޸H8dᎼo霢F\Ra1	JBO\n,,T!b;c'@s^JG=?6aϹnԟۜ/	awK(B쭘>-`VYK_{j[R~U >Q
e91qrvf&w4+W:_?n:	rM=ZpN@:CI>CYDy	L|e%31:#H?˃m3aV	R;)? _=7njsf8{]G	PQGyE=L-찇VS{C奆obirV-uj9hV9݁D\xZ5iϰo'Ne("
2iB;u/+?q']htxdhL¦vs 3'C8vx0ٝpRaƎ4aA)0tK=Ix#-]\/XY
g"0sior&mNacYB`)iˤ =+ewb^YVKBa>fJ (,n EHg9UbfϞ+X.p	ٖ
MPthKS;ݫo엒yw.jP՞GzD #DFEjs:Oҍ{zl[gNt&=H$eF@ʐCb<r2⯶A߻o罁o<Hy&4kFe;[o)^+z4_DoQcyA_*
Wm!#d	˧ߖ%Itmž82m55gQ :@[K֎{,zz>	{KE>LvPy-G5̗o7郄=HY;4}g]&:Ϝ_OnFMa:	FWs$Г,:'K5Ea߷\(Io{sW=?a%>lKߔw=4Q~>lfd'4O[8h˼TZv]ғ
Hm&qeOڱdJ..D?:6#
k,5:zNAB<56x<rylޯ^o,vK9Fѐp{QEp50@eT&~nNqܿoɡ<0m`3(ZˀK:;Eux}9F5~EUD]#}h6 Pn';~`B(OQ^YͺmwZ	-t<kn3W8~)k'mQɇXWx.'?f۰pJ96Z:Kϙ`zBIZ[o2x)?,Pk{<vq.bĆk`}F' >-S͗K'/3ԏ*[	۲4W.bb
@VP-}'ɷl~#=/@*gE*\4+<7}קbs}f
f-=噥Nn}{
2JW [b0@#nOeιkJ%3
}-Va1TPK<wZOD;ۆ>5(8Fh>[GH?My㇨`(`"

q7 N.Y%v͗c{˷}v>'TCExĊMoۣWw
9W$woM~B<^4Qlno$'?Rg[h_>@P,>c7DՕ =m*@rXƼV 6/v(Nq'Da)ٺypV#Leɏ_wm~Ժ+TPo혫6uY,8X](ӧ#j
md99Rͮ;bK9e]!
uwdۓ w1a0;Ơ4vNqY@ҽ8"lϐ ~uERV4x,oL=ZsAeWr%UB`i8?ơ=Z>AGtےG&j _}9pȊp hO,#۹!ƔNFqM~+xYd7vd
Ԑ4iĪH|E|Z'vߕUH%	s
xѲR{N8yv\oz0ڤ1Έwo;{Cۋٯj̧D/?-+ߏ09J34e譙G
(	XqYN-9j}*s_nuX=lflZiXK͟6/$um]}ӊe23LiR򺼛]|s5wL'LyְߙmLfDQ\CfW[sB4~a9	 T
ydw)JlƠ]^Iesy~Pַ|INtb纑"Hẞ@04U/=g 6HL^S&1NFPKǅyP~ /3
;$cp
=շCvӚ;'(q݈w?>@{ۿޜޒwE\n,խ}6ƥ*|*x~l;[M6]w왤q-_m
GV5>,ڑmݲwzlP"vqԫc<Ax)V,z>F"%}R~,v@``6JsnNt$ODugVx`	۸P>}^gGqqpN` pSlI2XpJ&fϦas?CrIvTT2nJ?z$ښED]\ŷMtJ 5.DhFZ;)Mz(vUeA}c͐Ug#kbUlAaJM@A$
ȥMn#i,#:
ϕdyY`+M1wA ڌ}Gd\m9[V-6BFjyƒ6k9;OTTℝ!9I7%K}V8ԅ;q9IU):=i$)%̎	]a
^i|ñ:k~((dndT~]>ý"5ˮ{%1pɡsRT&uŤ#qNKK,\b$ǽ4`d@ZIN
ÃR:"^ Cj>3kա
(^ho?NOIO
(;X!yq$b1<@@i}&=h-ܧIKga ӔUWF1v,M24=IU0}kzu>p;h:u`6`+\{vW|u8|o菑!NpQY)N[% "I+8^}:NBM.s.%G!An9E%oR9|.{#aCoBӃk]ݴnXI#?l@;V{ؑK
G'tkv)F<;aX8>onv6uO;&a& [7[;r9nP+oaj/$to cIiQBu6L$al*kt{rMGXwC)`]i
89N@t+_;/i}49\6'
Dyg?S)+
(˦ｯ%}<8ۍdT^ۍ~qеy	ҟkg&o~uWВ-Wbc}͊_y1͕U6#;;HSF?]kP 9b$1Qx1d|R3根sbR(#9o
#YtUFw۴ǷJڥ$
xN^-E$VXi~3ޱx
!(6XKr+Mj)KHX K?%8k!iq`dc'W8bڼ3hIn@'?R~8U^Sw;}0)`^oIHC\)8^ﾷ[umL{b姀՚Le0eOqBϽ8$voN{f;HԅCT鰤y<HdDto)v-Q=WTo|ͽLՁ˜U}+$[ui;5y; boaWbh 'D6e-
C.S'q5̆F}e'v^l;$`v3z(&b,/b^/G";bW2oՌL8,@pj!3}||3Fm:l
pźK #ðJOTZwqg.2sr9__PfO﷽XK>:gm9؁\@CeYpA_2</ i EYL;i=>do-&}-'Dv|ԹnGjkU/}plRɁF;d|YgMhW	4{_D g')ϫEMR/<}٩ݞ]=
7B{FU)18(`x2e3럅!&)=[ywڧp͚υe
;[ö)_[i#r3GD@v¬v/		[L|rۆ		AԦw/:4;hPfeSY"T{a3 q%p3z!]z
a/rֽ~cT[ZeNnJ؝)H2]ʏ%ߓ~zb|kT=ҕȈixdjVʖk"qPwP铲wBpM|a9넚wH$)y7okx<,vĽf`縅ȵKlxƱX[%ز}cEȂY1aN2|qܯ>M
N ā>>eO=aCM	]]=]q>utpbNL2Q
s{@:PPeCh@ԅ"rs,E#)HSv/Wg}=ή֛]e25F 6/	`rh%6SIK}|2PСwItb#j$F@GM%-9ܡXi,*Sj}Qy#u{Zts!yݗ۸rҎGku7S
\		8ҋoZm{[μRO'_1劦tձ7-M-ɚt☌
1_DI|);y{ iplSiwݩu$!=G~n̓cv4#|3/#
sbj64BiɆ,/<{|{P ?uì
꼦S9 Jyfr)zF;*U&zxS3#ά{c- +;/]:[R>VGdMD6m^(4"A~:n If?{`Cywa!YNJY@vz^T
Oؖoكpbd'>clkۃTgvHR.p' $$TPCyZbrB~*y%(WZ-VWطR@1U˃?ż	't~Vqm+56Nk
-M!P' |,jQ_nKҭ~qy,s/Hp$~T! 쑴dVZQL{w]JeO))LF"'MWBYH(%97J5{{udw=ڹFdq6ujz(`M6pH|j*^ljs
CIj߆boC\rb#Loc	C"@G
>Tr&iD_t9ͼxwZG&+ic^:,1&juyPT&-Ȱo₿<JI4+3:P$2L 6>ǃ~}(2qt]hebbTt&zټ~>1LŵUϥN6ܺC6rzPI3G^c ' UWP܂r+&NePbIQKak>'}lqXIE
@Lh;eXuOvkO?1Tea:-S$9FM/l}'R:Ù˙>59|Cc89~sϯE`Bt[1kzG9>P
VmVsXoЫ{btR2<Z"j,#Wf[*0xATiHbzmȟ2Ea,Bx)gBui/<l0WUI?{F>ƕzl¥]MD8f[CUQ<@Ƈr%	7=OqGH}x2tk%Ȕg4A^̩Q|wN_"Qspa0&ĠIaFĔ9Y
|6υxqbSg,!=
h,`KgܹUd{9
ӾߣeX6h9|A-	G3@wg][С3|ɨjCN=z6ۨZql:wߪSk	XHDOug(rifg#9/5>y~3by=.о
ft;fAy!i:ϷsrSiqC}qkA0\ГBː-/]$(M#(f?} +X3Zu
Z:(^HI*,;<5<ȼ]#CyUSIҢDXUm;/YZ\hq1)b)|]n;0^K@Tg~Elf,WWVHn>4|įkՓMG tf̱ ~BgG x
Agu_$fc<2xjwv#wP<}.+5|?Xph.D%+r'J$2Cr6#0Kpv$gY-+vO8v?5nl-!Ix]FV69$8Q<E'eKwtAYj&mڕ u7c^aGX87^viP;Oo^KyX^,pQ@`E1F&	\ON0KusO_Vs
/kjQp\\&L_7d20(}"!kwW
	1![:qAk7qX:9
oRq3	{4= 3l:H$CSYfFDgHU򛄤;=vvVDiMJZڴT^sͩ:s9N8o~EZ'UŶcT5cksb<y囩~˩@+&Φ,gqB
U^ )6<>\K.v{Ul'$0 Mrη(Osx=I5Uzry3]T]jt\wB=L?>Up	6ՒiG(VcaM}
j>>޼a#uCwo_QpwSx%ys[}~uʋ{D2SlWI8#84fmY˯Gq@g%X.2 7pbr';GJ
Ϥ-Xneþ?pX
љ +/^:z)TV;NAڽҥh>0`[ފ^4'rMet7ŇE~v
syAd!dmN%~t$?I/A9qiU6˔ռ"͡Y2}Ry:|Ckq
pV^|+6'ǠL*[z5h`N5Qzn.ubQ/l{!>mEZSAoԁ>ա`EJųcق36cp{tջc>6dj$z,:qd@]Msd	sOlW:	*GieH4Bh֨v	;ys-vXk6hd9*-/jy+p9]wd׭۳/4imA#xǰ=jȴImYlkM,0PD{NgX%?Bs8J{]XN(}>tXK@=O|ʹ1\KNrr{
ԽB3
kϲR|ל=!M/R2"@;	ӆJCNy2"-Qǿ^i·[z/^$ӊ j2N  Yjjm>X>3{Q;$h*uoIȔ6!LG1LPԪpS =C#qLCS-qIga84unPyAV >jsWbzwlڞ	QpmC*aC.5<WvJcdy:񰰫]_秵nHNX;C+alL3R<` nTOMSXf=ȌLPq~d\М^C۷NW+Ȥ /2lxa``%bT{˥
M%x۷t#oL)sdl,wN"sZ҇|T'?I9٧|Da)-j.|ٺ)	Pa@
ftIt=^4Xy󤙣q/a6zF㒐-]|G9>酗`m Agrs/o'$a4`c80FpA>exre
P%T;D??֘3srEّн`
Vqe}~`
 K@V<88M~]>6?eweBL]TS
ɣe6M.GG/l	JGW
PސAvhl@VA@I #_xX_hl"t)H AUc#h-ϝ<}_k>#f9i"67zrl*W=vt\q3#A$(sAUտ,!^s첻Q;#*ޥuf>an(EL>*6
ll-*drl
p0g_\%у"˭ّIXBN4H M	.7A/PGʊ}6hźԧj@|WMu+Vv;*J
T.
וŅ^o~jvaS@Gw<zV{8<Q}a{IE"c.a{<=}/(&^̺8ئgPvߒ"-^hSDU@kX#{5КL}>7OӮU~/RᏯn9GM\Upd5)?K4Wc?K	8g,u6tl>7#tzɼY4ş%'<^lxܦyRvkn8gdѵ.1f/WkW?_v=W_i!X[.Tylx2\}IE02De3=1hakvK+J!uR{>Ah;3o}KhH;Fq/\?)V(j8bySR"ò-{?<*۽g[W.2.dB>6D,ZP-̔vxռfY{ŎՏ-:|Xh@"H0ոի:>0|kV
W
Cդs'qCŇÎuҬ`@t:eH(@q*˽~f{{'S}J'ICڟKvkGJ]x,9]=B2Z<C㇡"l$u5LoGAmM$Sg*/e/Excycyw3J(ky*;Z#a(M)g?lhLJ%^Ox+/[0MvNH6"r:/A.<{tpD'e֔ƻ9{je;rjp1eGt=cޗ,K^UXs0u.lp;fvJ:Dǘ
m8XKd6!ժ|&,.e:F0.e7Kt#J^1%hY@L̞RR\$N~$gH9r" \}wg
1dKNQ5FLU%֌[j,w{3%1C.]2a,C:P*ff<jؽ$H |Ϭ9EA3(|QuYh;v_a\v9\O24g?g7cGd/j/6qt&9z85zO
ʣ-%1ќ-d·sõ/f}ݬ2Kq=*0F/Jc9{1f],=5rkۨtbm=Z V[R&slW<iu
GEzTty̸)9.-@CC$&ņI5,LW^vhxsR.P	 g+dOACbn5-pY4ـZ2Q0SWo(OtOcDQhU@ZMáx3R w^cVTiL
{K,FSF/0`=#̣5:%nNUrz= s4Y/"/'<o\[ .HItSsd-W@eޜXLۙ}V CLL*BbR7E6yF3vlwlo;_L_QHIF'8|{?Ft$dkU렗3}(B3*ܻrp>=^#4 dcˢ@uArĝ	Óy! WHnBѴRf	6O_ft,ߏQUfhtiW!4-sfB4&/*'M Kutλl(4Ѻe]wEMOġ"?;ɱF鍍'W}tXJy
i&u^OtP11,I優+  ,M8ǖ`~UWi~K@ͱ/0ǧlV@
ёOFYw1]QEIڰ'=u"NsxQ4DY'#?'$-ɱ}c>!k]T4~渣yVvqf%k>cN!=K;.m>UΛbUH1$\WbįM;wI[M_O>N4D~2jGR"DR,lKv[:)Hɘ
v<<C6`N9arƌAl::&&/w{F;H.4=0FhJP}k64PꆘL]e".H֒4N\Kte;!#Gc/]({ըt|I85l/܍#ܞբ)g"S?ݩ:V]ǜ^e?O3Ħ65O}Dv)7U8qHηLOq$g]*q)YRGMB@i4
qž;^MfN$2C<ܦo^k䕖Bby&JbB0bu/#9!EZyD>
`<vqtp5Pj%(&#F26&+1fjx6#(}6&U v'/6:ɓ)%dN۫x^wډ,ѬRuߪWy9-9caaaT4Ԇ9k.b޵7[Ddڶ1$|k&%\*$ J-ZgƆou>PeV3 }Qծ.#|n9\vhq~=e=MxI7/"r!ETPLѺd4pC(~Vwyf
#n
{޹B><S0'S3-ݥ"?nam?Va]/m]X!|cV
?%8}@1d|"ay[fi5|^:OY^<4쭁30vZqBla{>cڶJ$l9R:=
XRHۙ HWv(>|V%IT4W*G7W'9? *赫DE77 ԇUI._7g3#_`qid6b`V[P:9ֳ8,b8I91dF2Z
 `3q̈C:N+Vzn_F(7}pKGPviӾKk
6e}yE<lB
/HdAܞCX鮑8irYor' X$($Ky'}ޙ\glyt=g^$ln$yc3_Zwtg֏C2[`
BImT$;JksezMWmY1a0dDj8戀(v
V v?-6e5S}e9<
ܧm`ʄ-	 qڰ7zI~\o)F1[JrcGԕ
ɿw寧casgl͔o8*݁8\fyi.	HdxC)%VBĄ7 vXh
ΰ-3"ekۓ}
H('=4t

DF$ZvNޘl4e$DjUJдaK_)C	M;Se&TQJ;'w(ow_5q([tX=YVYt'_hN)Y<IG(:pndtg/<DJ[b_)a@6<t~(|{9K~+0w<eڛ[2m!*x	/A}\~h~HK2E @~bXiOzov`xK,]sr@
@W,Q!.lVqӸ..·/Dɻ1$6USZYc"h[McX6Xrh~L
;h|wI\NR;sΕL$4h;*lQP
n|׃&A?4aek: p<zVhu;{X|x\/a:Syq?!z%8z)~vkQ'=VWeԃ%ֲ*փu>KTϬY(~)Td|}ؚ?,r}ɑ\5Y{Vƾxl!wvpprLmTЕ<b6@29TiȂu/;ڽ68-	'f)d.Ψw2_>}^n(	w9W~d|ڭNtnu<]ZK+"F3n%0:#4R);M:
Ftf]qݷL_T3u@ۓLIa37z%nrIBk:\v'?3$.~_0Atd`Q;[ ty1]>yL
b+)QsciA{"Ԉ
k~B%wy,%N,t%iB{To኱1 Ht 9y{S$~zhFpv9'ZS?ZW¿ZAa@@?`s)+#@Zktst/lW }I<?yͭQ$(}{'9tS%!13g1hd_52Hm<@sdhZU=B^ػ;\W>={Ţ"s% o!2nz'/t2l7g6?+-7(rM#W/cE=myп:%USCHKߞ/
Ly<t)eEyTe[;2,@UꏾD"-c
zqï0ő6BS_sM$ XiIy>?g~X^4z;5k;;X>tG\0;y);[TR.݉ J]@,/ː'RX?(!-P%mϞ6]Ӑ2B<Y~qJ83! }%={^;ȯB#)꒗fq]rd$9Ѷ/~[oCW-ۭzpo5rK߆?wMdP?s[2xzW&ϊKM^^Z?Wzz.]
V~hOtHs0b!ZӒ
NETͮkU"js3Ox	2-cjXG#4uroˏ1=V@hqDrRL7sO%Q	˟]ܘ||=	~罖[NQUI*4HU^RsH?nZe& g>V<W_ x|Oi7VSP,GZI4#F(vTA{3s5AOM ߅3<l`r70"$) ^eG0/|By$xIgNu«Cг>m->AS@C[_wŌլHAJyy\iۿv"uYs%Df*%Hٲ
@>ϯ?qV!iȞi(zor>p`
vNei;ua}
|-촢xa"` o`uo
~waɦYR3y`R)!6yޗ_?%z<
%0#=(

6Uvp/?{gl6*yjʆq_#s2ao!3|(Zm30P$LVZma/^e)zӗ>ψhśfх$1Iס1xQ;-ÚE_rx$K>-^Tow0eY9Lw࢝rftN
. ~OɎaVîKf`f03bkxA@pY`d!XbL򎅼;m?_(nآpXYpͼuF,:/sNۻ^ëĽʽ}{}xU|DNUcsD31!mǰK=|fC_-oNK
oks3[-[F5sQNtS)1QD9onH`i1ȵTn;nV<$/.vENJY:b<4wT̠vC8KkfcP᮷Qxp \P-!jr_CLI8]9#T75O+6ey.f^o^E?1YCAYЖDm[$2MpChپh:q
X{+꒡! ':q![ul9,۟3
ph <B{O>Qoz-DfdĎ{P/%tIKm+s(L}m?Ib.\?14[x;t*o$`K9wu߯P6Vs~ॐma 3tϜc9,z(~)L涎.MHdn_/#2M!Lz¸:٤!2ʘl:SQE1ҷ:6{z\]#Rvp9L]$oB@\7Dg_~*es/Ҙ	/iOQ Fy(WIc?o_>7̈?rK3Y	ޖ.3Ӕf)YhcR?O }#M!DJhŮ3w%rXhZ71Qv'd4T5u
EWKYnǛOau
}iG,'%\4
Ep;#\i}ڟlL{]ry~`3
 e|Ɇi~
~p5|߿nWjsܢ{}w]FֹTo @&.X:s~@xݣ69~}{^Bh*8dhL43}w?a3HltߣVN(q_>۷ZF:'[qeSfP'	upZDxFU@7S Q+UKFgƌZM[Ǯ2ގ Ϭ(N]_n,
utr%	tv49s粑;{[8ŇԏO*֫>Şe$-orfL'Yzdҧ_
/`V<8
!Yb'p5̤M_Uo^/7Ͻ$@
2ِ`V&o:[1o{LNW$K|dZ*-MRc<7aA0o\qA4Ie:ƹ.;X!gUUj|yO+|Rt_|0SelښׂHॹc)ٛ. $ΞE{DBs^jsLv5PdqCKueOX}X[;Pew)ܳEuL.AG'oYy{X56b%)s\vBqpشXƕsLPnO}cӥ;8eg{g"~s*Y&]Hz{>L`-ߞ"|6w`v|(*AQ½黔6~)wCټJ7\|:=s
 	+TGҚgA]GL{'")20@s;k8ĝxwV2Gozrh׫¹$9Fۀ+0?PiLz/1[l?oˍȟoWt_Vr9!x ^h]xFY<iլ3rV&/[J+%>4,|
p/gVMlO p?]p/?>"i>-ը`eK"UΛZ<Ow#`~}^S@ΰ1a	͡q0tЮD炠L$~`u5'i0B_j6#+Ձ>ny{ޏ0C5Ɋ>XuYEeXV&OF淅䍳ۣN_6>CÍcgph5Ɣq	ec=S¼WUL:&[&,RyJ:UAuuX@p;G:!	9+e=&I	WQ=5 Wll6-cg2o&3loUЈ|Cbܛ*%KbTQPY@O#y湥Qw@ʶm1M=>LKdհɄ\qoqÖuv?c[FKo_{>o^
N,鍟c~MXQG1(X ǈEҐ!rzFB=6Yɉ76GHn]4(m4JPsAG 1nC5ߗ:zkhS`:m\ox۟A+fUMhZVb7m_",5@[b_c{(ɀәo/Yv8m
*:@?[мUJ/(䊉zfdQ,<D|b~Qn)~f=R׉E	I8w_ hOê:s~f;VpG=8ځ{1|2M.o '$@nҠu^h22_bN{=h28y!-r:ǓtePIe>7[YU܋	/
Df+Wpsʸ	v;UWQ%KUȫp
Tyg1s׹S@fxR-xlK|:6Fǵ%O[SW !;М39FiHTe0v,dCz(\>5׌(`Pmゔ󶗐lTQ{lwiQrR4MhSޫYN\Sqvo*3M'sH/@.K5Xմ]XJ=x[)릉òt%mH	v[c;,UWYgl&!qc\ہL;JwgU@
JxF-/9z~a|1k.ۚF,6ظV=fꑿ~j
ț(|SҐզJ o38l:/d>o''v9Sl
,4L'TY}4ZSxb{z>~<pGH@tjvzsbQjJkrէYJ3o;.~85d@4Ka6ڧӋO!WacX#i
MPx Ϙ	e5</pe!lkbld2@D`c5UMTVks'Hw9zEt-hW0Ԫ2b_~)2wF\=D{{ʬcoKB#.\@?Qǰkxzo
L!IՁ	L>9`X)K2+o8TKKKI`{lƜQ v3]N~D(FA;Vw¬5&JƼk$T{߬$Vr!X<Q(,N
1rha	ON%|UYWB&tx@e*YA=7M+ˮ߂yAe݇)UCoQ=#Kٝ(srA_`Ũ|Ghw{iՔ@-۞c+C,Ħ!,r&@{\73wxn}V_O!gAea	|
ct_*gc:B2Te7ym3tTf,Ϝ7'V	IQ:&y+{ bɄxw)xU?Z^/)[@JG6	ԉNCXì/wO'x2)9;2}3=k 7wںZhziC;ܫ =^
4CiT({RX}򫁷؉#) {mqxbxQ Ieҳ$RGc,e	TXsZzK'RyzW:4O؎Rv*/, g_Pmğ"Wh>@~ OPcH\`s=ߕif8V@`}$䮷w) d}+
z}@˹0cQo"rQ5^IۛŶqTx<[צBn%sm:<t\f?1<͗~~
aCmD7~EHuQOuVc3ןE\Ӫ:iNܟAvg9`3i?^^ޫ|4fAp:m5=_s_/KV)=Izt (ۅ;`S@)҈.z-~ZhRR34fKcp#TL,;{yS[ݥݍ0?8
l8i=ut@Z[	k/i*2X%t Lnt-mƗNg8/Css&2=^x65 ZB2QDOO'%R,耫X(nR6KT`KB||]J"-&J3!P'	c=āp޾<>7lΩiآu<	&ϚfCEĶMU|@PҲ층hE?gL|M#7}V}VFoCA1,x'> uͲp;<$튦3FjгgX鉴ܟo\7k9ٗs?fCj$l>g,Y~6=!դE|l`l9|cJo3׿b j!
0geқ+<Ee/	>?u	U N&+Ҿ?YkkwEo(u_({Cs_A)UyʺWUӨ*։$뒬W61xBA<ӛh;c
dFJz%ieQWNWiFx^)KtyHۗ9PX^eGѱ2J,:e%aY? ?ؓbDc8LXAJ[`ׂd)=X\пdC05
w㾈aAYͶ0}x	pbm.-&@mU1ga
G ?CY0ؼc7v:0ÑU7{qriw_2:\$5֤>HndDmp/ӖX5]W^(axM(͹Y$)Cظl؁ׯ^SmB$жf\wb,3.	Yy`
O
!Dh&:*+u,f?|Z4N/_){mdɃ?q;lm8T1rv>t-YW_dapK`*#| <GXHmGj8J6<<hDfX]*t1-})*n7W$V	1CòF/kyB^{lVCr^܌Vaqh}Q֠B&siuSwUVs*<S+:&2\JL)lM'?BǊ=$i/Z4K˺Eye=ɌMlCm8araW Y+cͩߛd@;zr_֕tc<lB2L)ׂwp<,!	ʫ-ge%M긑(GKypD$jKӈZ/AWygyOD]#]?S^1%LWPaH;X"̎b΃$:& fh0}=	ѿk\䁘	~6$%cX7@Fs#cҗ^r蓺K!rٲZo1Mޜ;G;L}77[?95q֖qt82Eh·<z5=]PMڂ^Zp_mt?!jcId_G+	*f	Ⲥqj$O.}4(Dn
ܔeilѶm'w<UNf$"	UEF_Qβ4&[PK몬F 5 PK  Wz[               META-INF/BC2048KE.SFǮز-ڿ{ Ρ) AoDDSD'R_(JiPL9gD:.o7_@,oӤ[	C^79]C"8:`x2WϿBG9%O1,8X,Cxr.`u!Y)hc.	$ojKLfѻ|Z/j_G
6ߢʁt)6c-Qe,֏]3qҁ}LhorO.[6bKn!/gbDeȞ!~`N0X7Au,3&J)ni84@;ˤ'<(c9m'3!H3^EO,5X2f}0`C)|)ߗ)藪JcI6 T=h.hÚks)+ne@33XA<$k}!TiZy
YVuypjٱyiE U]_se>dXw[,C%h6rMPlhtt{07-Y:AKD
zI2*lw6l`6ⶁBTK_
q8!ďOC%hۼN
M#+	JJh]9Ys//H08cMY쑞쵱-sDI%bb9Z,y42)$Kj>VS+~BHpɅI4녭J6RO<?٦,:9/1'\tSVņ@IjX[Ou
"pNƹ096#b2	1@ (ռoO{ռok̀[
Se
'UfZnh8_4WIfIhS'OA55
=>.a0LZp^nb&5Zd5	歔R'"Or>\͛j;D_NI?Z{=e9[-g0M짔hށG,nJ/z":K
"0s9bp^!xSjHuJ!icyQ|c7#+OM9!9g{bj2r$ź6Y6B3)͐6&cͪ@,Q9BHV1Z]7B3ܗ/˭Ou+,Nxg-LL5pj0FEr=ͅi_Zy DhIZ1ɦ4sb9SRwktܵgOf?7B2@S08v[zC@Wy%٣	>'u={yjf4uF5(`q*epq s8e!
OecEghaQ|$pgfǉ&<1rj?F0BPJ vg.4fJLw5܎ƨ\A6^H$V={<e7ffD$;r(֬)GMZ*شWs';R%-m96S&h+zڢ/÷w+)򈿞Wpqu6~j-6,|}q"ow[fq>chL,ВRb9kȒMI22o&791K')%3{hqD;V㬫jvs~s]UyyEf,fHG5eoXa5t	Cc\Z6+< ?M5z.dS]`!h6E';Rjfo-9ٳ
[y}7OOfh8!B |hŃ2г/]''ǭTc9'_V0uT ΦF5 gvshXu8ΧeLX#	fqk$2y˂y#8H^)Vku`TP:k3VKc(/ϻ$/mkWu	=V	qCج+<͝L:DQPCv"E?MZ6eՌI?H<o[٢ECʵZtp?'8%H}Biӭ8ZdU7)D$j6#DZunRH+^Jf@V;&Zگ/\
V)MdƮzLȜj@N/x+^'$:\Y"l^wfSg&dGdEbBoR7>pR<
WLyd6odZ~X-4-]n}.ѩ^=s HZMką=\% 8b!%_Ѡo_8['5ZO7KhkRKmoInPVc{/M܌--ټİ.INy}ai/B6(w<>O;\ YxV7IHzTn1o9$0zq&K>f~ "<%c 2;+N_L82`~Hw=<)cLm?u,:g䪣Xߍ%_ysKPjطz75H	O
N
3r=[ifuyy̽!iߞ>"<+-B~b084pa{ y MlZ&Ś\Uu&e$RU<[ :/%NX]W{\j
_ GiDL3_/2UM:(Utba%&abw)CR^@??g2lUD 5j|-;:m{*lfAbmlR6HBBvdrsr%v6z#}N<43Ћ4ۙMB=,Fw*K
+j4 s YP|/Ce@
.Xsy=1{c**#b=x-# IAGCjn,W 8"
pͳY
ȀY5M2BaY=cK-}4M_];elʞI9t(y,^c@cETg7	YPC_|yx$wSZ(A)jr
 ^|h>c|9seՃb}]^tMr"Wjn+1Cɤ@ћu˿_M ɢX>
6)[9)FE!\yO;TA5hUq˔J6W0ԏξ\!*L	\@xAl[vV֌`T^碸)Y&<&#k:e ,xƟ=޾{9'<tp`:]s:2k~_O}O Id"ZCZaKx:^/k'EX@:
ܪiN:g8W`8cpdp7DK@o*
>[^
{?"?(<v
0<Dui{#`
驴E	
ASoo~;9y93YXx-)cTQ.?>}jMЮx
#C(6ZXktn.Y
WS_WVAB E Y4t:>"9MUkdS <'-Ad|'hNe>"|ҐJ'\-A:41XBLaG^f;t{Εk5w96$RL2#7{9ɾgG1=p?E+
%҂[99Oc[0h9tFdy8i3uc>H3nn=,,CG?jSǗWF[¿rJe;Z"O9~k\_SKL{,(Ʋ-ls,qɵIHQdO\)6Qr5ѥOC
Ptpo  n}	55-Ӡ
߸jOiAHaEUXcƚٷ7	s_?#?
Z~ʣ5|U!|b ;~\t4F[Bqaq V<7=Ut.⳯M&vqO5  (Es޼D97d#(!Rx &VC>@X9G*;Yz^bf̞fxw'[HrRŢ*<JuϞ@5oU:iۢ&:y=]דn\bw8ȄBh^-M
8_ㅗఃUCX̼Bx
sSag[`y	J:,u r&Qs5\[".a`צJ#'j_u
xǼm 0G8UY;\\p"C
,ޓ'.y6NyEV\ +uEGuio+ͦ`P#}}`xi+aL6᤽uϷ6ϸOgHl7
kҝݏDp/=Ի^./C;Q K%o[a'_Cxd;2?_WyNs4y묳`rK`cpI|}֛y|m/۹5K^"x999$櫫̈*̺-F'
>lV%!WvUOxCߩ{S?n;VD8٣rӋK|_z  w'Sf>urպ`Bߐͺ&SS2Y'jqֵYu/۰a:Ӌ1t//t{*fk
GDreVLҥfHd;+>6EUVvg .lƒk 
Ef}(}K3σ+pXew ?-[@kAFYhvg1~*T]j[$fjcVb-':`dEII\?e]Ʀ?eo'DVНU-0ǉ׃^ץyQ
|2Έ3R&Folksk3O!moh=9.,8W
F퓽D)Mv\n5l۔?a+)ٳ'T\TФK
;Y#~֛׽=j\aj
c-$F^6P[GAۏkK7)?]'WÓ@B-9E6:Yl r|@0PxMTEQ?$n`~៶
%<}{m&7'rD8*G5A9H%j:)Nl5	fsa3w\
)-B> !_OQٲ+^s|51Zia0$jHԷov'|O2|m-xM=W1vyPpAFGv|+sކ`U k}\n9eQZ}I^z^%ڦwG&MgK7`B [qEY稴/=U'-(g7<_`z4ܴϦ]Isx#<dJάHciTq@SQLCqn
Ycrc:.vOwP^-^J-ln$YTJۢEż?KJq==؂P.%Վ2hBQ\<V
E-lS2AߒNX,lwd0ᖱuyDgչuENyNtZקfF8'Q A'ROBrnO'1ʂs OH-2L<d'nvn#$=LKA,X=|1,VEϔ\ fͦ6\Kk퐂k#a0/J=,8*ޚҗ-I]ѵq|L`@}̹nPFxsRH1BZq_Ο	JOO+}z3>OYu(˸0KeLެc1UpU=
wGPwH:w>uS\dY'6ze)`J/4W|t"5ܬA?#{<X?zWg#v[ 1%Hˬm7'80lZ\8
X6l\l@.
F!oYA(C}VycJ&Q{оvMX؇~iyOߢ4l=W4QͥxÓ4l$R$2B)cb$6@_Ov7Uꎳ%ܦmcWqTet1EZ-YWk|'u>;72<\$5zo0i]6IٷBr^WHհ'xl)3ڻ=rĆkHy>H9$5Q\G
$GHYѮylObK{y 4v3pA>,x[z/kG
W	zt	wűЍD¾t((Z*<ԫ u)N{b>o`{B<&k@k}k~@G+I%S?XN|VU;_$j8\^=.jTCdq&_5~d[R)oH	[0k7^Ҫ/UkAq7w7g_՚N4fĹ5KjJu:_>7rbA]~7xKpY ˙K1nO~H@vaNh}Sgb%;e-^!N[UA<YYSwĶM[҇U.qEq\n\ .!I\<Lks,<#f+ٻOp,ɭ^wWip`N-|8t~PX[)[Iu@C KK9J+_q|{H>
ǎMgznZ{eעAͫx?S*s0Ո
d.(y
.u$>d th^/Ʊfݒw0AJoEr.$Uwh
?snȨڦχ.VߢӿLD-nY@ ׏&+Q0"
3!*	>dBO
1󢎃iaT'a
1wV~DLVw^C{9M?r˽d]$\W	b;cca:a#݋;+͋=-~y@_te9'=9.]d-8v.aCHxoJU3zn$Ucܦ
XMrJO:S{J@?0h!~ #'Uf.Vt~rd7^ع$H/lJ(SHoelټQ>t$heT9קl,HLuEC|Y4ػ%z R8
6 GV>yv=mq>yFsw;i:04_A
6N+~z]N |<g5Q/F(z˜?7E{oy{']5> tC~9nloT>K#֝R'D=Ay=3	m8
q@s,ֲ#wװ7AMPO#Th@k^zCI0qC4顅yL7/Pv
XNN0tcMxfʓj_|y[ls		,zT28",M~9-:Q)	`$EТ>LxF2,>Kt[w5c[Z*mlpx)p9ݬbŐ#K:Wp!ܡc\tP(848п}OIxVXxh b.~c=NVܻ˼wX&mxӊNȏ(ʾ~zK{>bj❁{|ѳa:'K267"Xד/WՃ,Ld6޸pO9s3:afq 4RzI';دwm(vičt=)JssykIM?
63ʒU{ &͞"x:yMyiN(bRZ٤~tLIe3`9 *U)KWtf9þ}nނ$XEDߛ|?e#ν\2vЬ|su;ô_ NAx2Mt]B>6ž
Հb9)sG]v˰{u	MT.bgOTt
:	ϥB.٢D_oᝩOc
\Qw%ѤUq9t۾'#>iaXb@BuJOz59fghʶǶL^6Ud4k*
[dm4G1l$~jrؓ=wQpG7Ф`@8ɮ	sGѺbR"'~{P+m,oncq*Wh쨞P54sm#r~a}t vpN=w$sW^kWvކׇ4A]xg4lźl\pف(@%꼼&?!7moO	3)$nĺ*U+H_CY7J)XGXCBt6%¦pW (L.{ܲ?-H~;	-ZrC[/-A'wAvAa;F´f#Ŏ[aw'[e5ѰP{HRfՊHS S-Jha^7;) mK@P8:&vy
w&?>g;}$ )#,H4=ޔnVN϶w5w#gӁ̠FXZK5{c^@_yL7]PDؼ	㫸܎92,l#C=3NmnA(?e6-zqkpML"3#d럭0qm
P{Hb#كlt,Pr2	x׻5lp=em4a=d8I	$9xC峇ZWUo[K
r{<s˧50OQߘQs-svc-bPLw?[V \ɠY8ӯG򤎿]	L. ٹ;;B[bo
T7l{ Kj~d0WcfM䅼̱+{swm0R}^w ۜ
HwMt@K(UnA8="M?uP~]_}(UW߀Zb[&U4Pi\`l|8?]XWk_쓽VB..9zl籸9`@|ѵ?evĠEKnpC:Pq>eH2q#rMS{yW[eū[1@t㗭{6Km 46 Kgh{]}5]WIڤu8j°U=GCKŬ!vxU)`;{$}#KAb.;!]uQdygk/Զ	6@ѤmH^ʿ&w/~k՞w%OMW=~%<v:K͌T/3s^cћ
8:Pqr׎k%{cYr4l^n`~99}Gy,%dYKܙʎFR01Q3=d>@^7-\qR|dШ
`~0r3#p<o[.^t_u*g6
rI+é*XG}^Ds!k1Z5tɘ(Ю:a2M9ȫh@"'7)BY|v_yagu
l17,	hvHcZ?='fZe۩%w)o?,bMk8,{!|'HE+t>q H)xZ!=ο'[=:Wm4i1-}TK0KE7#:.^TC{\!.qA[HXịAmfvHvևOtqCd#CvvT9lΗdָIIqL5Oy~Uy<
#T9t݋"u K:=e
O%xM:GPu6o]%Tgem=0 p(b+$̶Dҍm?.HWD9f)Xfn,_ᒼyg%
+h~[SWt2%cz6?HQ4q<hx}?0mqnHS#,p"EN}Jh6GjwѺ	M3
;meL}f.34 !v!d od=N|S-ۍQy{S?;NpfP5l)cf	o]ř>֎ޫy#> PS|G̅Ć5{fFD<B\_e	{$oXҮᰶ{tɒv{U)wM"U.h\n,Pp%ۑo6F'plc,ܷ[,I2ZU
<auY0aخS#ޯxPWuڮNLk~_hdL׻fq'Y:@@#e	Ȃ,ubh2r#IchҴo(%nƃ(!.S;PA[Dۧv+_vH	tm{6s4A1Uw0BlO
x¸xZK!m;yX[P.gqC#Re@-|U5
?/RͳL*T%z1E3y]̏uݗO*4bzF 3Z3lܽ}![^A<3ҏ߬dV<e&i]}YiUi)qO&y-\A}ɛsSGA8i!/aiGВ'G3ijKL!	"џ륧pʞǩQ\rgYTܾD_/
O~ꤑK8\Z:B[am׸eWHΣ9Yd/}U<-$ͽ)B&%Plb]!Z/CAST<1y_KپY>΃yH
 )2)ILlN[n*Avеg߾gdӹ"QRQwiT_DqqN3}8rM|5WѾxVתwI'1]QU )\8@tkȤ=V8X=55L
_|, YX!13nTƷ-'5.٨nIFH'3i$*uX]x&]5&"kG~((iS~`g >]
<#z^FߣMYziA߳tFSƩy"^`XͿՓyZ)eTz\oOE|uta:u5mG-8sQc$
alcϿ6"/:h|ivi&71FĤ] tt$c;(<POxEs{rܞȳ%^rفbɤI46uIL	 7ѢnDl\ݥTkLrROdqS7?N9^_- {t~X+yzly`lG:
Ѡݐԭ6bAUQ@0E?\GS9'Es.О,:`xQ-&#:e{C8'Eg/إgȓci|vھG4C}Տ?tC*@~E

 
$N;/{KZa}"vmއ' \_qEk(w1Wc  6LlF@l2!F6M;4ҐAIFqf|jʣFVR4H;dwKCᆜܠcDwfs"hvk$xc	/ma]
/jp0hwEڗjVW[d6m}
Ӿa8<7+Ժ͖o߂?0{RGo9Qg /x1ij,ivC?uC\[U.-7v"oEԆEznA"qP@_/Dp@T6^HiI{_ͫPbi!N4('=&Y)kaRD)6mUA:1x"+	^ͽ4rdC 猅բ)iKHo>	)k"Vg0M@vCtT.!(Z=ωC
p`(,BO򜚰#W3q<#V{(.-+g̷hi0.lhݶɌٶ{BBH\
1^O&\M^j|vǺ1=i0B<e	:]g9.m\k&̃x \rD ^ORaJ묮уtgGw$ܯyOE3ek(u)se)]ܕZw__4mx1QK#'"fOXp,)HvP-!Z7v5Hc-zԴEeHF9˸aY7׏g>%Tg/4'k%ܼjouS=gzSn&
& RDU "]a	<fkj.JSWw4VyGr_h6vli([b'3?O}/: 'Qe/
Rq\f""Fts?[ַ)%{ꖕ#SL#sK7IanMԷԕ<}rTkemˏi[=EP>'+7N0͇W^dhKٲqsFz+N.%*BR311Y*"H.6_
|yۻ27WםDѽ7jmf	`gX$bk?ɗM4L^>EbEzn8nwxKS.Uٛ&O-O"O
QBcұ6~iLRMuSvp}-={m9|F]Vft A h*b oe``Y_ratIHA&+泴mKuyfs]
U)Itx4r`sӪsq)9'#innɋxm&s6.}[_ߧ˼<w7)f{|:ގxheQ%PGJ?wu/
u?{0Knt:LWF/U Bdsv#mУGKY)?֘ZZ6%4OA`Z;'v*"|!^7n{͠T+&0;gK \@8<^-m;徭HK*/=WmAhS֔Nva(~a#)i/n^1/pNHx#!mbkN^	} ;
<
}Wҧ3LvRDJGP1
0S?~[}Iq7e^H6bݵWNg"TT]t<֧JO1Y14:0%6T
|RoXV
wC[ y{Ovٻ:tpl	+SY]"7CUk5?/z@^0JomņrHo|XZ\z GL⼓YG%Â#}f	1(Ȧeı}N%MO8,4%vgTJm,F#|9XM^'|)OFyVJ8k;o{lfC9?mk6LVPhCB-^:	}=~fy/A6ា׌{t9v-@k1 i̖Dj4:ٕ'bA|3oddwe}Q%I/F58RAf%ؒY\Ѯ!;o"y%l,hd~9p"r!GU|q6ޖ+vy?u~g|/]VZ?VKÔ0xY3|U[%ׂ)Yw޳"o- dzR`êC.bvT֜sfj61"m[1"tUrTXxG7V;jBzr\$1{5ڋm</)݋^ߺ钴ӎIv2J9e:n1YUۦ0scP8	ĭƄZ.GbKK8Q`V'B>!=~2gneLFp~av!1llEso7%[5Yf#QGssƎOAkp,l	>r^Cu;IU8;5R7vErrM8*)r^.$D:B=PQ]) z1IR0=#/Gq=͆(ضM2r:;XRqk}'|2qK,=`EUv7dV[*I
XADQ4݇mIʴ^?'{w
w8rcZ8ŐU9<7jݎv;{)h{	w_ϟ&
`.{h/nh- 9P4-쇯xBQa{c+II7#q2Jn2糫_W6NYQ3 lu#9
8Y*ʯ45!{}wq0vhFݗYwT@K2H$7H"[Um[0#|!i9dIa50@M>pU#}
B,^iIycxD>>04(1ڀn8O 8ݖJ4(;7Cn%Eѹg(;cEDpx
ԏ-ɇu)G٭EG.+qMţc7+.do0.M(j?!unC(X}&-
otrtjB/1GP
݃Eϋ@4F%<A]c#s8^/AM޵Y829ӡޅi9;ʛp%`[SmkQs	'vĬM/C3hWR)8|p!
I^
&8}+P]D{C
|g
 zRA?&UVRߚ͝BAA<}>~K\n?zi&^\MѦ6
dl]qE R}7穕hRw^?\;\H\uN[q~M=u̵ t,h3{zy{Q2ZiCU{q]K^ՀΤE 9,I%Uf((i^"V`[{%@迉%	OŢTa8WbAFKi4C}r{{7nrl;f,Q&:+)Lj|!X]-hR!CLN="Ca>ɇY/]ROSO	
wǣ|4- .]$dB<Z5]`{O) QC)7,ᳳ%*7jƝYzn鏡vQEc|svVFe`¨
ԜIs= 
vekQ.R^g9o__ #>娴[%^3@s3Js"qcB|+ҽo7(`j%N?yn	/o#9|d(,=yg<mz9/9-^3`"*ĝW"z?us:.?D))!+jTQ4VYPߙfϹ.~u2,B^Y	_
	U:Ƒ0h֟OwFs.{6U98bMU
M.g[f^{uLT<C֖3AcfK/}nr'bP1~silQ={ƝH"fjY\JjHe%aWO6]Y{7	D\5&UǍSxj#R`
V5)T\P)>Q_?\s_aх#Xzv0541cȲY	;ad{.xrq!n-P+S	&}<4	>
!SP3ėq">'Em7k?hw~-oB߉kj@vx; Ι˙yV+K"(2y/oS-ް
#KN˩1s#+8Sw5]Ʀ0b0dC-4g~	{gbg,"gdiU,}2z2/i䫸_.3&Xk驜Ǜ6ˮu`r&	A'޲bнە	 B	ЅҐtvlD]GkKE\"%\zWsjܛQ0{azOFlN-
39Ŵ}y趯ʆb_,坓=Z]QEz{Y8e̓'DÄ9=p.]MBN1(_<\qPV@.;B>cyKڣHrԆ,KD.Kv@+>:=ĒͰԁ;4vU]g6\)U[?*v@Y'd`T^s;SRay(Uv׽T`555w+;7_t7o4b(췛:X:tH|RZw)}ms&t﷦y]GX퓲sE׊<\"Ӷe-8ɪ]rv_46eQ!EqzD١N=hZXSuAҳ	jQ@DՎ]zi]ZN41@RC2E˵iy53=e[H5_.mā;m*{8m_#oFͶ(Nue4/c+=Zw'^)Rm m+2:!	7S<!Zk
u^5o~ze2Onw/
..awxگfLA]
1ݑhOe{@*kޟʝs;\(a@+b3(K{3֣N pguky8+)M[k}~J=&^6qbl(κL(Syvc8ѻpc{(<eРf)*ODI^w,~iy
~3rȧEa͛j!o\eߚ?"ջjYVveh:B6'G5]vWQS3LFHq4{(q.2I4[乔 ƈdy -nʈjeTp:wFZ¡u?7xy/U7Lu&t<BXxmj	CM8q~$OGߍ;zF2g}?/#t3|E9tĂ6@O94t$5J3ĖZ66B++Ϸ LusGv ƔΞz2rQʟ5MbD^M$˄v˓HCskwby$%s.m)Ɨ\cd}}^Q MMr7"5duEvoc4N'=-1;-dY.@^_ۭ6Q-^
D	>(X&qK}T;aKDS'"LP
[hmlj_jwM!m.j.zLV2`f%ܫ~?'!TQfNOo׆0q2e#;ڢw݇E
zPJ:Kَ`܌. h,]^5+8ojP9 Ŵ T=A[$%A3!j2k7%M-/X9Q$NF0Wp/HKWF{Cՙ SG tj!BTJye<CHf!Kw!Jc;
7$ݿ?߈B^{oK̀jCzB~I19?vsU[ܮȄ%h~	@,e~e:tIQzUL`Nk~1ԵX3OžAk]|MJqȆcO3[(hXam:7|sufGIfHnK^+R%ܜIqF_VNވh?D] Eu62vz5h pEtٌ˲v߲ M}(fUѬgf|oLN'g:@Әs
}?ޡ6]?`m2pax-=ۙUa\Dde#зqCil	tA229톤P=!6mjH?Ѩnbe2ajQ5eׁ/}i&.q7}6?D>52Aâ]Db2OVZHY+=&pzm ~'4,2=%DoĶ4:ffz%d@?b}e{|S(fDL5|'_pN=,c1}[,>y6 tqy@ UmEYHz%K':e?U
weT!.+S\Dh;5{|=C#b+iM3۴a+Ү(a4[lzN/o2ۭ/5mު
ʹYBJ&iuwmkaZm4"DAYd}(}߫_TOj>٪,Fт3}|eT%BSTr\jy?Qorwy2v۹{Fp;-#k*}|Mys]9*bTtJ8	p 4zR/ȝľjHhd~Fn)u$8{.෰Ht&%t}O
NHdP~u|EߜD_NA:/D9&F\`5|pܨ)zOTM}Mj&艝\:3Ċ͈@::mu.8xkQ1MzP];]D;G09(dt$WɟJq~qGۆUј(M _31kv{%n(ViG.5,lR⣢\,.q麃p~RJwi(d2f3 CIϷ3]U-t9<7<h7Tzɠ7ājgP61̬%ZRLW%-C{H'뻱!q+Qk35K<.ڟ#mmBK6I7|@p~HpQPn /n	D+@j*ON's
:;!drΝn+ vl ?m~/sH@ J{4w`#Bs@rU<]\柞_6m	w4rô)jLm|ML7X4q7tÿGi
$
xԱkoy,LcoROc͔Ýu>Z̘ʉ @@uWk	]L:,Uً`{2-I<ε
NAa
ix_y&!1S>%M7F'Z! 
"9yOowE}0oՅ˗^@خUWܞ(YDX~<Y=26Xw-NlL?ǳ	lT
!`ePLĴlui?:w@ԫ)S㧐3Yz&qhBG|J2)݂Bg@Ow^ $B;ygRN6TȾ}'P`nHS
#loړ,q6VZEsM8ej^%aQv-#5Gב&pNwrIi}k|DUֿsimއm([w,,3|1*T&@A|^OePa)kqѧrp/3@]iI(
܍Ü[󗛳߽FXZjbloٮ/!ЀX*Pc7tC3m~i<{055CƸ2":#gpF{H]!KGI6ǲ`}Gc3/xvw`d"3TS_|hߺwњAK-$ iEQz- ŖPWv"G-/jk[J\)Lrd:g4fCg>qxʗ[njdBKѨhq)Ou_{,9ՑLtA=k;B딀,uzJd§^7RY.P{\[v
ZE:q:9͂R{_#F
ڶByczb$s|Ư7m|,?$
aԞvVd#e<5ISC{E\r`?`0tvFQ4$%]"&uFϘ.?QcbI%9`mJDsr̂qt?N?C|oܞFD2E.-)A,OV*CutkF&*'cˮt|k5 'ѣiR][(?#M?v^F X쏅'B)[Z^Mч4uu

FRjYDgBƧBvxAUiس:7Áw@pR mW5i0;]G_mw"7TcCV'wϧW|=pK?K+yYlY*JѸ,Fw۽7t(Sm']`{t%)J0ĄSjF|εObM!BZ֦qQ)A~#e\it'*sŽ8ع=;4pE1ؿ:q5gP/S~:nNwZiD?d~韔$DDs[,|H,OS`Y|E"ѽ}Xݏm0R&cV/E7\O01(+:K;=M&>c9Pwq-pfQ(3!l/{2å%_?
HȸDx҃S̈^>uR;Lk=u'2 ׷v%WӼzwoH~y-Vf
C*ډ@Fj<kEl"<e^PDLN"Vs?J$nbd%=}4=a;vHǇ`,m8f891ĎÂ=vЯho[%Si艙KW
!)O~<{δ@Sy8|}ʿ_snבũߧij>>PKk]]ɿçM+SH}
FeBK$>w3K$skL1G'd	E >ILh֘'6;ȹ'A]V}I>0+wW7|0gj-$~t2})K'$/X8-dJ?)SOp%?>
ļa豄<3LZ:M

YKL
M4ʽ-٧|
_/BꉙylW'
QeQS+K*V~Mka#}3.	
ҙ $/iUKUMi\wc}rQ+": 2'`ȇ֩Wt:g;% ZE挡e&}eś+CA)7Be^lw۫1\#K	-d,]ڳz?Nw/P۳, qK缪X-.TK1)KgbU}?,Ӄpեڣ	zCt@$oW#g+gyph.%hjId͈ɉ^>fY~Cc6jQ{3OhA 0jBckގ%Q/WOٕM*;Ath &6CW߃]X2@ɵjy%`[A3O?_-k 7O@MHp'`oAi13<ZimĈXYq֤es.Xr|\_3YqN{ݶTbiҟw^
UAx u	wa+i{78O6#[?;m;Fnxe<Aa*pid<
֒<vB".Kso9K8<vQN4\_h "|sqB?gcdɟr;S0l@vIgu-]_z8?U*~HD_	 wp:CRtf$+}w_#JK8o[11(% mW0Cŧpߞ.j25O&."ȁ9H4ia|d[$ç7!֪ 
v{&W<46[~dj[Ǻ8F!фjCkeBuSvdtt'e!OQ`]Cձ_#/uLg	;/sx0}d./;%q$YwȎZg5
s~>Z0bD7ўԱAR`OK'5'[r]7c({1Rc;U}_<nu1Y{1sr禎^.Em;W?ޕuy=a-]&L\1ADq<o?|([I=
}+ѭZOiۓ	O֡1n0˰$`W˥	uCnˁz0PJ`ں'ey/8S@^	}%b"dBn~}TIm
=CP@#3o1arv)6.GꎣN}ɷ!jhKnX-BAE?5&x !+rC9AysN{oKG]q9Ȑ>Lvoç(`8qCgrb`V?)me;{bl[g~
(yҲj`!1x=֤BJrɎcw^ay{AE vGO%-N
/

J*r14ilX:=@E\Z
P=[-otV 
aXsy1ykTE",#\bNSm#%
?SC񲇰7Lc%ƫ3˾S쫞>U*2 axE2&OFyh5ϋj fYB!x&;IY6{u`Q.HlLz{A
},lGDEiV);`(4L|}a *\Fmt6nS;pFG!?r!LjXOAcL5ߡwzaK1X$mr!^P&Xc<@xay6Om]\k6v_RǦ? }a*\| &{1>-_aE$OrlT2I*婚;(|.}ov?|W^P@;:A4}ز;6m@s,Q<45XÑud~ww}#Q4SKXp/Uz]mEU69h!YunI%ur2-.ZP#ZV^MG|ጽ$m	uT8"Uoө`3^"5=z>'!8%Ɵs4_@RZM`kMiλ]I}\iZm7+g2xVtSƹ$21
%yWeI-!GRKa^/Ҥ]{[`^iUHS1+8OnK@(q{y '{R.pvn\#f&8.ᕲMJ	"VCY1ڮvS!dc!9y_i>7~coCُ\U0Xp zv5=PlL:/*5Qr?_bRW2 tiO%%~異^6:ηE%.Fvl/ĭ}&WDtn_6cG}ȟK6vRYJ(&4,\} >
9Md'i+-"oρn:T`T
^|P&c
_{~}7W֮I!ϖ	 WS/p[T@v38#V \fj\7)?3 r	)A-FGU	Tp]S΋mkO1uADBVP?{VoROqF¢ȅ&ziXUISeOԾ)L^ czpAh2hXg+I=,rs'Af3ga^'|+lsh")y=alY88Ke&{=5twOHsetr%jzԠ0:y@FSˏbwj7")c@dv,/Ɲ<3gqܨhf-e){=2p%t_tw h/m KabXeWʲ˽=ˢVM[*si~"N曒~F\i#zqlE^rMi)M#!2IKc)Ӳ>DVkWWn~hAR$s\m(JYlKb&M}!Gꛡ+CQ`.;sx/xbrS+:,IJ+ߗ s(D\
8+'LҒ/&Q7<g+<,g}C>PpdY	@Pd6]1I4GkHsdrN~sq4!`D-Q쀂9pC/	
SA+mu"`]eYT<8ƙ?81(BC/':FZ\Cex|2S'I,Y$cadRwvK Sm{2-3Vaon'"˦X;4H. Jy8vfhxQ 
}qܡkhyOMihɗ":;9WUC@'}>ߋ7_*¤{[ɼބ
&-o7<wUXϺy^@QOz["ĺv
6fr.y4Y})͐=IγKnaޡpP\-u2*Pr|gt~_Z؁n)9z%>OY?ҽv:a?*sHJ-bmϚrHˁ|+J<l*ف	
'lF95a6bu(vi>$OԾt]ʣ=LMWE4~V%&r2<Q<}%p(Kw@|1!:.$%'mjr{@\g5xG$.k¦j-ʕ2hP=l4Mñ
kj|+,^!w,߯>dA/#[% -4y=,
&T /2~2-;j[8:]{BDcW@4	HCLk<T4Hem%beuɩ>ͲiK֭7}~YmmEFwD4
}ja0	R
~I"xFxSchdχoyIw1-n>lC:߯FC:,.xwTULG4qpdc2;cEο`>eUn)gi$ܖPmSb<?_7t':1'G50 ytgޣ&F3}J=g`w(n{2óVCKQ2_p/;l.̄om·$dC£zK΋hOEZU]V:0uiP$OK.YPMgEj0'ۄ@0E&'
0XN<\|]6cp@=1$kk̟.p%֓92A,e3l Y4Eb-V8ջ]ļRVmR_ě'}sJJM{Kblt(rV[\x}ЗfԳh#=8(S("o;9	|4_C閮>`^VTX}}"z05).lړC]|#imK O)i(T+`wbud:g*}C§=ϕi|f6.2eDdRw? rA5L<WN8|pʅqxf"=acXE9K@jU|;^"n{-}f9Sƛ a󙹖!`Bu'_p'xz:?)qG og5*d;W\ɣ[\\g{.6mn8!	fL:8g6魶A=LE5ݾi;%M<[h]S-WӃ;5}g5sEA4ȗ{1(z8RJ)DݹZm,bF|w
p$ǜakj;){YneأN$A*y84!1Xؚ3zUJmk㭒9~`Ov0 4PS%M	e> WSP7&5-v1Wl2=Ԭ8H,QWBfR}?&fm1r+#$V_s8_k{+Qzo
xT.ז=cn<n:=|47N?	D=wcHۈW)F:dbOY-$_}@xnaLeQJ[C󝑓˻yoVGc0@eűuaѿ TZ{ɞNhZ{sV
uǐy+}~N3[/l4x?c4]-mQ^΍Ch4Ec'7]!+ι<10j>; \3"REÝ>x[AڳģEE?yBEY @4-<#d!i	RT_ڣvf;{Mm̥*|
bFzv\NvS^0dGbhJe̍UI5>l	d" :S.sˢH#<ыҵՂlfXqGPbԋSh=z8ݑΌ'ӕR0R|{/<AOpdKEB%	+ѿ+L}r/G_ƏD\ %[巋{<*Xt}هc1'9;> B!@(6o1D%}Z8h\nA3t,^%gzXi_/~YMQ<ݱ@_9h?ɼp(Կڈ|-Y03!t-z;R%Vk jdQMצYPᙑ.zs4",px{%,N(f#?mۧ
YI9A{xr)fh>U&yb϶^JbKzBPc9g$x1q@x/t{ڍʷF͟
ϭ|{Zl> \nDUm5YPWUM;MP
F~J=<ӑ`i
ʞ?VL?TWR)NyW8#KX⦞5O@ҧ{
pأ^DI<e
yzUfh'	i3{>\[ܺMPk>(NKhglnK".CC}跱O-)kZ-B,n1SZඬs2()"~1>4}˪²P#y=oԿnFdbedOOg7O|ʤAk!(cvOw-C;tmkkMX؏Q`^sMuAUCڹlPn~Hb3ߗ}ߢnah${P
;%M1*EuG?? N3gkKXf%XD)h"+ذU=(uHUZUZtu`4F8-߈O-T7:sn3}3J1iF12:c
aJRcՁ2X+s[e3@pFIfC_mƪlR^f(w#aB'`rۻ|UBgUu/$M:&pe7Rnbh`wh<|J2b=#K?sb[pAjT"s?%Sԯ$pܾ<*QaB,b)bk4\l_yd{'8yz*=,xh{^-Yq㐞
d02	1(w'
#QYNNxlw@Efu+tCsk&{mPxCBRBU[13_v椇:qɛt#=\OHs)VaU
s%|{\hŎZ(D>
k^x_~\UpD
J]Vyh4+'jX6,KO<Vά2}<Nĕ	xяnųAعʡ\X|G64twnSs$(+INE*ЀhG264;!qFUȷ9s|LQ]0ۿz(w9*k@&tCl\eo	CRw
bT;ayDl~L!2$b#y+"|U!ÝXSD
Xu[(گi[z>hХ+N(0rv"^~EbMitcM%l¯eJ[I6CA
vtc >(o73?lV+YTj:X-.հ!|]"iF~-̛ސ;i|DM 9hsH
L~_wqߓڝ|oRVn
-& l7`Tsӧz?q<~<i2W	I-k8mu;p!iz2ۧÔQunk̻4痵_۷twfxGfuW&K%#=)@Jfi;duP?o(ֵLq D9$ߒ]K=Fwd,k5Tfr_C	E{\&eZ"eZ]$.tLnܢ?Un37 hķS&
A/k\@b6.;Fy0⾹3ơv0qmy[^2li]F"e֫

W@&g9-f
r"Q+jl+֬=
l;g}Un-׶kQSCǙ"n*`/\͊>Jxi66?4x~y]IR~ 'X~.b$Lߕ˦WnΕWԿ؀0ް0釽c~L<!r|d{yZ,sp}l{:P t3pg'W/EJx&2kҧoNa=⾭!%jru9Y^b{ưL"k1eQOX6KѥTyÚir W߻*p4}BSVo7d2yJ|vTYST_U;O>ǻTC ~h  "]˪,!}2&?NۆߧQhs ŪQfW6~wʄtYeFmW*^Sŭz!FF
V=껆D@lg]2GじMM
!>`W!	6"(z5)!~g@~W~
gpGŃ!-N{}8%ɹ/2Jf>	;_)xp(0mDܙLp\ķQstcz
I4>jܞZ _zS2AU6}kb RĉnTܒadpy
"Hh[Ir;PRzwtU%|k<ʔat	r#蘌V;O}AjD:<j?f7(hϬ'`tZw0^A,{Gs- L>qf
i0et;ftTW).;GDHGC4&Wsq4tw̼}Dqa \,@_mbn,]&-^9M8a!DRȧ[X'ؿ)kX=*=Fv_5a`لyBkWmjQzpI[ku҇tV;|O/RqrA{;pn	Xdgo6=0觵Uߧͼ C'abJщ*(
4rom7Gf;e	V葠]2p;Jfu|wm]<W4-#H+ hO&
O')/J3)$"IޑHK
"cL׳,B?Rޚ~hE[QCT@q)pd鮔eGL̇wqЛn;ɔp" 1847|U_vt}qhǷʣVזi𗫴mR%Z|<8+$UmS#!!Zj9	zHѼ+rou6s$w\n
{Dr[4ˮ^@H
O=zSM2AN]wslpEpߦ~#L\Kvk^w:82bBk[טby@Sl~)G Nݟ2\\NX"h6pyjbV1;_~?=ӧʮUͿMtߤNu ӰKͬf_323A73,KvY^΃{VvzK]$_i<hxGtvxBBU4@_q|{O ;
Trt:?[ׁ7ȨHDT/ehO2-[3ڍ6z:flA?_ۅeS
Mp}Q-Ι\wuբDk!|]qNZIB{y!9̜ݥSh991xR=1)vRڤ͖JukDvO$#bM7\f"JoM$DMdW0a\:
UZPqp^`|򎆲uۯF;{b6[?
ΰiC}/J\ݱT63gUղp/U,~{o}ӚĞ\ؤGN@9VJV?"6{I'Q=o P:ߟ$4l	͈K4垼M7oIۈOPdZN$0:.+شpy݅;1bs`ׂT蚙cw<D0NSjH_|of/2R_ϭ57HRԎ!r~A"/&C0Q_+Xq٨obMΛ@ixp_2뺜 A^Nƃp,:Ҹ!A~H1sآ#ݎwj23s'~#:܃T	sLEFD˭|/H.-QI0XXpܞ(4Zyܻv3Q\?w[5K~.0
j\نK	^TNT~Fzgg~O+PvCdhG$qv=pI ޙ]x϶XK{6>}:k0,ҋҷt[+J	yBm];	ݧ5m݉RKvt\3$z\^nNy'Ɍxaۯ0fµ:P1,/)dG{4#Y_5 Ci>՜q7-~wA-ۆ	HxZBG
R4Yb6ܞ=j
y]x@h,w7ٗiFs!3 
P]L0PQDz_[q5e	^='n&11gd>'`dW
(*	\/{ P1rjyW{Z>;mS/<mŘv޻-7''_in'Gra٨Nfo\"M&[cyz?kV-w2m.Xȇhr5ϗWzWt|}n{\ߩǺ_kjaO]*tuHO캭Q~r+rXuXhTUwƨ2y5!Y 3҈2:O]4gк2$Vuj
Z}!~
p`q񐳔`k:ԗ6װy4xߜk⠴%NbQ	ęӉ-m
3?şXHvRѪ"0/ǎo~W1?^B4@FHѽ0d" Nee$D_SE]ٹ[EO_ڭt1Ny('֝x)'qAHs\6wVm'@^~#hLwذi?#.r>B7m Ae8]px%j8>p:-Rd<VT0T%|̇|jDb|تrE^}ZZ4=WmL)t˕tM{(ӜoJ[ oEr)
'Cwho{L_s+ߵ11Uئ	BGzwm@qXm'^->^ #[rY$`9`(rBs^޿CjC^^sOտӃB+'E]#>3vo%q.M5X Mj!:cFݫv:>o.pMxL4w<)9CGB	oª (@{r]X|\T [Z8øk9i}D!!uϧ?(;
k;K"8-2vƱɨһխ»-{hwxFT`&]VD鍕ǎzx#C꫌`*oΊ?ttr51[2,녞 u_,:4wp?wG=\ny[D\DB <0Z	Z_pݗ' 
ج'O9GS˾@5]&}<P8xz0
4L_33S)=rpz~SjzжvS~I?ZkKt/\BτZZ/ߏm	?0i=3K v3Ebkv&xy߄C>F|ƮW>Cdyn}U|Vv<>tJH[Σw;5:+btCJB>-}5	y&1AUfC4J>&r[V!iAиp/hF7{C]79
ldpPHm]
2J4
'v;K>EDlfM41	J]j?es/Ȭɕr!OҞ퓶:9O⡷g 5}IR=qR2-$-Ky*k&
>6,/]7Gz'q2Jl wIZ7U_@s{!<\RLoڈzg
oU*
!ȰIS}ޱ	~??J6hg5@W\u"xAۅ=_9W_H#{oR$9\얣<=D$&]ja9j)a!;G] 񲫱Hۻ_PbKw&cR`:㢣=-,#Ś#J$.|xQuO~0ݬs+Jnڡ_l[kaEڪVD]kw`8>`"񍦋(7.Gxi'c	YRĄe
d
^Q*{Hvϡ4ǻ lv,+avޥ"GAbC{y:.ϓyl/p|YioHlq[	xCzlӚ/;?VX%p|kh)eNSm^jNSӸ߹
A&=yKF<;wRY.?pJd{m㪇H5r\=Qm@FΤ_Zy[Ƽ/
AύI
pŧREBX8uW?iG7; ~s@!&$FH^#Bxl*Hغ?#c17Dd|y(N$b?zH|Zo̀JԨJSW.'bPBgp	qLA:+͡O9{SwÎK_=;jӉʲ;Z9ї5s)733v}V;>WirGjVbA4[8;;_z.[ڕ{4X	EcF^ʘxO?]Oպ1L+*X]y]¡zymvc{ou]𶂄ޒFB JZe|z4;wݗ\d+lmmA &A8F$ϧsy Wش̅
HCLmB*[p@*\CTzĎS^2 pK(FK>֒9hQ0&m4R {kFdj]aD_m;	A+n(<vh)bzkVnwG-!;\:\=gd.
a.(O~MFtOIܾ{=Qq5&Q
p-'狉JG
eXf}&!7+
[-r
k T&<jnn@_CdnGj;#.[
pD=$L?kYH~BPy#?["FLLG9=&`|.6d$  f
Tw:0h.h^}vҩOS2|O6_[~{RTI8AܛqeOܯH͹c+t3Nډ3YMu
`'A^:RZhxwZH{"܄ֽ#!^T48a%6vM=oZ=uο7{Fx@p<T~*bTM'[ȅ9吹dj.Y5<'.p_^.6$ISFʆ7(؉;$#~)+%bȃA6&S!CX̲쒷BB͸Jr#iC%>VH_?(<𶶶|XmL
vĐAJeN!3LϵCE;<t8x#Bty
qshTH@>wv)Fn\ udPRk7wMM4G("[sMCׯv7q:޿]k ip'7\ܿWVwc~$ e8
'4v]ncl-G|#%$hNtq`t`wӇdi>o7[&q__|Ҁer2	<9}9_Nle[=D̿I協mĭxQpop Ԙ jh
vۃ90M/0OluӺS赴`o
dҎ&h`,>+M[~U?%4mT4OJ5B(tKյ,h/1(wWPb=MO1t.V(E*|l172X?sxAEW>Vbʶuԡ{o@J/bd%Z}wR&;o	sԷK,P̬DbOzaFԚ3޳2nfN~+}߂yQec%̦car1LM̟m4
s+on["ǑbZO{$<9=6Ab9bQ#>-JF
~<nv^j~ ͼd@c޹pw:zSH	c^F6!LwXJ㮨ׯG?+ ζQiH~&Pn镑Z/ǽ^0=^U(e_W뚟os{s+=ẗԢU*w:zW<'~/v,,'VH='N0j28¾̴FͻOM~Ivӡsì9VeHOf?%wVgsyLOk6%SxPWY%,J!;Itc~Ҿ]5ݙG{ns$^⏶TW":|$˅r@"*^<yQ/-d@QD%txN?$"Mnl(Sz@Et`
1w3T_jJF
.~/2o&C[i+~90, \]
;)1L rwSizڷ诟z(`+bThIdS?*l#6{i*w4~UnX]
ԐJ!ʖ?ָ:Z++t=?HEy4Q
bNMk-	%I~} .a-<4'̫[jS"砊S/Iη}N4ȟb/ E`^A足«41[-d'9_(`jӭ|wi,BͺzMGlDK+{n<}mR+: (	ܸXTM81-{l}|~;~9-#0u6MCANrgҲqRL(QvR\.gNt!L2".)*yjũ~S<:E2<b*9_/q،_Ib)ց%-ihw8)ZbMq?@{E!!i}%a6dѭVoeg\vFKNf#鼣O;Q
#.(ɟLK@BJW\{vm[zYxͥ?x͸-b{%t1Wj~Q$qz\tohb%tKxA!{/>Nwf<#Y#m	Ǫ&=Πׁ7a1fUCE$,k7*м,kyzw0-;7>8o5*\:kW"CzK$b=e{;#h`[TWSS=uF	]Y1P0aݗ0f(ށmQ L:^0[Wg[J@$W;ac=0mӎbu؍D]e=_ez6w&TK_ޏm
lZEӒ0m.ISֻf3A]?wpl'YQmme*!r(NAG	QFJ-zͧS=_؏qk{  nK>bXm7kK*`yf=aH
c,nC^ډ?z#qSgZmL㔝v])ՙ!
`$\$ ƙ8Ex1c3MdK8>qGKz[`&3{U8質´4JDK} ݹWtڙ
f(
e01wc7wkHE	u0'SokIggyil$08Wo-YFĕ(Ez}k:WPuOjLdj( JN:GDɼ\2>,4OK"ZP.i_@
𐎱. dv*X.vtQRK<q6x]EsT>D	AV7B`IQr o m4_U/omF΢j.fcC^i2?ͳ~]l\-|jP4Ɠ!&G;\+H_i &k3C5ŁH;ۓM1Cr2(] kG8ےB7o`zu_0-`S4eǞ:]
.ٛ2Fu}Q<îZVW?݅?]Y$Zp3uVI\#;]WgvxSw.L3@"͙`H؉j(Xc>uܓM~*@6ޱ~XHtNtb9m-]]q'BS{6_Ki<~J[ICCw8*-
y&n2h)nݘ:ɴr"VQj4vW,a
tګMd3q	aQ| <7Q~0k L~1)?p2a iM<o08,#Ȣt$#+Gi𞊿MGhiD3q'NJ\S}}xvI:8`ghJigWqjq߮-M>d0 DFX7#
#X?I,iU'Qxz*;CA+q0=.ypqP (7C^}Dj
$9*qhru.JcI	pc_=`Dnǅk;NOe@%F?6R(|pHa٦U'T}B+AˠgTjp9kSn,t޸nU&
DHZh].eP'u)݇aBɩB(@285ٜĜ]+JYP,٧}ɞ@]̟W!A6ty̚xӘh#Is>lg</+.l*CJLL3a̆^:< }Qmk	ߝ csEڼ56ݭ.Q'O[h)m/һm?ޞjl"i<ayǨ 
1K jY,7bikw(HK'SdQ$ȖE@+ŕiZjޮWO
GbzڸSp=\xWS\2P~/??~V
OF4M  iLxP)ke֚m)>?GX'o/KcM~]sS|7OiqA\WC ֘nNE(Ͽ06z>U}'iZ$w(@bn:k8j!yN-U:񳤪
DIyT̩2]xU,rb.~
8?X`z0Բ尧9ផpc'=%>ɪ<:D|)t5WS\AUuhϺ/.wv Xѝ]dR;&I-#6{ks
g' pwp7f/A~{=oꃮiݥ)k`Lܑ¡wsݸ;F=6	4 7 x
$":111̘v#ciqOf8~m=nT^
:W+犑aSm=ӌFj?b0^:)/]*
q<%=錵@UXe8BV5
*3{{ŀ2B-GP{)7Jٞ<ds-hrӏٺ9]*ݐј?R{si3dc4Cǹ@v;HT'9AU7dMZa-ed=l9jtY~4*mڋ>yҗ<)M~Cr8}گ@ҕk끅?dy5v	`Q]bJ-
 1zUb)SEIrjm88
y|u$8[
ͥÅ;+Mh9b3ː="ɻcnn!7R#{Tn$\?Zo*&4>=UdUeW
!/6P	ӑY<"z$PF6o%O,KTTJê'09;7GrC39.5~jEG;tP=gIE
Ȑ:lB<7C$@>}#("%+Nk@NW;>eiDEO@G|إ9Ʊ3r
l&'z!-_P'?n^gNbE[8UXdj#f_Sꖅ^]^b5ޗ-nF([*pwZsPL+<u.mzy#uYiݎ7ɪł܇r[J^{NګjDʭ.X̐xnw˴N'HXo9Jn#,·N(W6!֋۫`O˰VAC*^HƤ4#_B5@h/}P`qt3^Qk~^w<l}^]wsJ΃CYWrxTc\;$MFQwoAB=S1)LY3n[p(%H[1Re/#UD~NG^,eٗAAk[Փef͟րo.}+bJJg><bn9*\Y4qbc>SN&s1Kr2+tր|fwCA(9s8q	&-8 <\HhgBO;îp2;G˳}> 	-79MGu4<%`2í[ykYl^"pi<;pHPp~ r+>=e( TE
BMe]9ƌ?(iRF#	,
{Fތn`mW89;ݼ2xpn3M̊ݶ0 I m{0 7~cdl9Qp**?(`5Pթ ]GIN3HͿGr&`=YuyJ.=LX2f,RHJ?a;.D\ UD>#d2eLWZߖ;W3c+wD	k6UťMeGn)	hFW['MoW>ˀ<,Bsjٷ2#OݞEЬYGw%%uT^bqs
%3T}a^ܠr@^:;FcҎ2&Y"WС4+Ex=.ALzEytIМFG}+mx
ݍf8X,}.83/6;{G9=SK0:>EXn	l^ALf!㬾/PH|?.E;&Qc̷?` ݠ	\Ǔ`Q<G\C.Ti $;ܮ8 }"WoM#p{'C@
gAeԤ]	(dňZyzď| {wkRPʖb'6awé1@U=%X1|0.$=HiTjW)?@>znS}GUe^'lf;P5D{D
y&X݈ҕ+NSxj<yQjKp0/7h@vʠX%	q0Ku
}&,ZkvzKm_
o<QY)@4hjW~H^z-è^[5_P6Y퉖E[̱#x{D8]l{?ysr桬_u2J^+|ɤ["<j ?)!sƢј?@짊c- +ݸ.;c_N~y HnwO</P\K7
C(iNQ-!A螼}ufxKUc^
RD+N* go⒆gN헻[г>)oɅK5+^sҨ@Z$
aqfsNr߿qMNQ+ltjdr8th)z6jb3X䟧s|'	JlA(\Cx+OW̏dn"4TC/=Z;P|_&1t1yx%ҽ3Dڿ/IQfy_19M-v%,-莨w_yۋQ(V4I٥5'~/G|
~$^Ec-283%iաeX.'Cя#lwFIA
]
.W-Si~'NgB(>g=I	(3ay[
%rҠ(⟦U%C\?AK(nP㩨%ߥ,
LRIWD?J|]Fj	"Kp֑cufsTsKQ?.	͗~)<qלҎ (trm\|V)O?},fjA,b<,qz="nw?7/-m:^TK&ÀioIy]{N=Zx<=j5J>uBZ]lGWJ_)W]mOi9B	w;Kͼ)~u6sO-=Y^S:s pjjZ3Չ>O>S=lWHBJj#e&4է& s@W7iPOKҨ+옐ab[Pt{!$r{3%k:~F'8d+_27{!80̎@ρ}S95 iKw~n9"vq;~ru96N=,L"'>ݗaUh{
TN'3pw`Pg䛧KZM2ӄ\E\8ɾ&L=I`i`>{eDS
{5%>&+eZ8zq5zNDd\yN2O)_4{;)fR$<Of1taEP!uc~`d*V.9m_Jq\\[64Ne9U}?;#WrBYkV˷DjB^2~~EΟr0٣q9ѰJUVz.{_2HvnZA[+
9J^ɶ+ܬhSCK+CW0mos6ia8s@F*og/ݥ`.=X[{Wu
~vR~גIo7G1/vl}zuhKߠlr X'( Wسߝ+~q2}QZ0(%mS{.T63-$⢏=EVdzHCyy.
c &s,Rh#vuCA8p;(Nȴ)~4xsA<rh_dppD߬k,'&[Exn3&&֕R1
6	dٱ憫v&UwӨ><Hgb-ή{u<ـUcMB\V|l}H~;UdRU$Mwtv8
o7P9|~#	L^^D:9F=szEGor,4|rha
x`1K6
p).GD	ڌpj.^vܞ6]4 =9F.XvA6s",R$!U$
lu6ˆ37=Nb6V}\bAx9ؓrlЯC@rJ'Y˚8v-řg	[b SnیcᵤP2{wh{%GѮif3"~C@ @	^WRj3U==a\2S-_yKz:VcĜQ{;L0YseEN~Z?<Z׼\*)/gR-"̰bP<
;rBC-QpVpZ~z2~A$gE9GWq_.zXbtNz~'Q{dg3/l.yˁWPy!|1Ȼ/1%1A e@^p{=+:	ּVv:%_ūe[dAy]	X/wћ޿|ס}wk~eXGJ%$c y6)/n_ۏn>~֞Fa-H	Q^/1nYhvUOVbXrcU[;aN$4sa'q~Hfv=:VAߠB{q$(+M
7
7qw/Ň$D:NYd;-\?:UҺ3L2j61T41.َwٲe̩7+p&26M+;޼BL%@M8%aQƂ<c\mD%Yt1eđ,,mu6NI'R^{MwdyN~J>70,M)^⃒ a/2v:@r5;5v~vE𓷖́ri<"?b2HYj7B4ވCt0@%e3K#qYSV;E*5q[|1
dGI~qkafOK0"h]׶coL\-D +;mrïiRy&᧗gg!NdDέMfx8fe1Bw}	e7z6g-$=FV]X$6Ilc-[模x&ҮTvqG\_>%
WsQy2c5OB5=Os!T9/6tk_4FGRR
i
J>4VS%J|'A]{AUTRݍSԚQ)\6(}]hEA]xik(;{t)xTf	!Xqgjţ<:ǍdDϊBI]Tyo_wџH͐jֺbm*-xEwQ	Dو!:$? ~Cv:BB
W8=u
!j0bP-MsPW1<8Q/?ZxHҷu
>"d@Ø`ФӥͧQv~GBN;r/ޣKŎEeUyxI9
)u
*Я/ɑ'?׋{5f{Ԓtt1|<m@w_N_Mۗ~pbQql<ԃIVTqjwY}~ѵ
v3	MQ1xX#hӬigDz<(Jby~kǣ2og2+y>-J+׻q^L@oO:]I&IMl[V6ea|й\*l
V^ 6>Cp]x01ϫf8Ȣ.9ci{u/1qNsW[-ƿ&`}(]LLv |H9Ƞ=
ɹi=uv|(qg;`*B
-+.p;z'/ϋN2	Wĝ%зX2t1/kt=&AD	[j=zN U8Hn5{vVޣEP]y2GhgR,#wyYߒ`:iX?|KG-BJt9|6iK7Vwx7Fm=i؟2<#iD5lQ㏳2d;	[B[\J5q9-hq;mZf@˧'?ɩ[wBup6GhVt̑p;ɀͭm\/fB<켶W)4-sJ]txK雖}C M7k=)~:e)0}62'_dpf,kE,]]22ȽOϰ;rL;`\p5+Tevd
܋͟o[
RX^]@1<S{ǦE?~<v˕')!.]eS{NQC5?ALdԫ>u3^}M'V"Q8lDpUݳu߯>mNPfǢg:z;gC-cow¾ܛ+ۯKΌo+G}E&69a
fh>,Mַ7mgõALq2x|2vZqaiP㮨-Wûw])`'+]<50 H~S]HiZ[mivsE#6;ZYA F+;CsrKEFJoǒ[ޕ1UjM.}蚌SОl\Hxne;TzTw?ܐr1-ڸh!?
~DU[pҏff
fvXL2K'BamѶ`A!Q\f-.+<CHx'jݓV+.ofL5cY<gcS9b2m~Ex?h~9^wa7.*wu,P;&a$m͆͞ܓ_~lֆ2ndUb9\*#.c;/q@0O?oyݔޒi:Ɋ
xi|acǴゖaې]oo(jzG|Dq|0r{3ܔsaXĽ __+,5; RIա$O
 YR߅ [|zIO;vf(Ngjq*}@|b31b4={~ԁ!muWsousq^.VA`KpH4-igྌ)H[UX
	WOd6 
uOCZ~<x"
#5nL#;w.պ
:k$XK$}pFx)m"QϝaXp/jt~
<hVae|i[ѺKH
,R=wǫ,cS'W{{K={lMFAgb4sb={-O[xsg{GON7mChy	_+q-:r\tPpa(Vlz,S:wqcmJE'>r.NիzI^(qq Uq+2x	MVs/@	c]@9Gڡ#79"(k%b)/I߾j\h6XE ]Rd
OQr;-ОMfb#`'x}K1dx9elT:t_])=rx,)MjR0rPT͔߂Fa_(w*,05c, Dn#
u6s5H{
>AFVĝ(zCTȧd։>I vǟ,8WLE)K.hqL}-1׌7H7,nmeanC8λ[:Ln@px3_1wCh!񞎊j3v8o˩a{}dP[
O] 'po0t=:`D57k$fEk<E$/v~EICx4>THGQi_
9UoƧB*] ԹƯ&'>[ap(C0Q&3sDPmQ5U|>ٝ*3	a<ʊݺOx#-q
mi<~XA^Ҹ҆!
EK]k'+!]	{wXKOiO@ԡp0ԵqԅBq.ۅ]'X!ͩU̢F6ercVOVX4Q#X,@L>4Zob~L\T՟?Yo,;sY,ԱSV		m}ra-&SÃkz_=ӣ_S$~L=iXݖ3Mib&NӸn{XCU{qvJ`;YEbHhYkޯ*dT8٫z{Oxwҥuݡ+RJJz#cN,s/߫p6YҺ޲tf-:mnu_?v?
?&¨⇑S@޿%N[RR_'XukpyN0wzk*R	[`$r\sZG#;j6m@Ug௺(=BqY{+:G8"!k6p:Ҽ9Ez"/UHEIݩ^=ТN08obHZHO%>5}N	z#rRU??!<Dn*Bt':R-:}%5b#؞22G^|)DAaÐNB8HW)x?Gj"1߫uN zR?$gRO!}a	aelLr;:MStMO!gɡ7>.AsRi`"XY(eW?jo,^Dta/>qk%5ʤsa~'(+ۧ947DW<[+]9FqW)#U	}M%{9@S"EItp5X[c!nW}X=ڬoSGwJu]7>;|ZKE<Ó9qꎁ&];	6D1
Y*(_Rz7-)O!F2c>!w,s*"]fb%EH0|J>ϝ欆F[[\!͊Y\Oo~|y0~ݺWѸ[2q˰rĨ-r`tD賿P~,Z:wŻyDM@W^()3/naN)ePl$WI()akc]氭-bJ;Lbp7,<
ܕDa94-?w[yb@	dJm)nyACWqSp׹OY',dp^UVsۋ{|q8^J"zz.̘Qk`S}ZIktzU.-V5sze{**HS<.
s;.<dDi]fS w@8pʞ0.!܁H|ն0t#$)[VeՇv;FVvuqJq?+u_soo@iQΧ&:0
{^n
G-鐀js=i
N_\üaT[n1jv!*7C>,ËONajAY,:yW^?ǆ{[݇mc#D!B*}wy.* =ZN6ƿ7],wB)<֭S;n3g
)4㡭#dXG@]Uk@{emG<g%C%n4iP>|S=~Q؅XۣԥA%s4͹ِ{krG}E&1ԍ ğZ9/&`	uyD?<h}+7:p
ۥY(UȂ X]f'"^&;Fqyǡ%u+C*P-(Tf
3x)7
8eɮEFvFp'܊qx^0MNv,QND.J.")7xN|=qh3?/mLDjkv@uF `	TcIw_
Ǐ#;pգw鄐gF61{'?Kn7wyƧf]r։jG<)# %KPMCv]9C#vqTǶd&۞!ť_;tqHqZKl
;j5Ars4jJG'{¥c`|)us7a(HEߌÞJn}{O-_igʑYTwTrc|ڰ돸1OXa/چcMTՉ;}0CugaPdȇ`N9gࠃ-$媵SYZZ}j oho6c{ab90ɧLimz\==#EۚHk$
'4PoDRHQ&rPGҠb|gf[
9z8
iXmDj?O55(p%oA)^fRKG 5jj{XJ0؊7,};اUߖ^}65))k]^C8:
e_DNz.[HiQPzl#E$nkH#s
RG,)Jwr(l(P1 ]Wr9<1[h+k3/N5)w##&Hu<K#/p; wnļMy~>IK)$@[i'UHik"SI/ծWvK"7Gt(dtG<\H%Vw,~w|\7S}/ x\rD3s#{̸]?zlD4HOsȴiNlBO8Z:ޚ2ynZo\rgӗG<W2VsWJbv2A'
׾[œrers^|皨{wk9QYg|˺v Oþ\wBNKܦU%0
W##3Uݻ0  (Ur\.;WKHBj1WPC-2~?]#bTg0yC-yQ#z$73;h
W{oL;_z$䗚ubp<<gwQ}1
/C"~8EI1cJ⦰2ĭP&l:O
dEcG[ߠv@_	WKqX\lA`?]ިvGMM,vIa#ϰ*ѧd͘BRK	eȿk=`ը<'VU2X[}
'M~=vLfmkOZlT\p'Bk?/m_ֳv/UUi[Sgv7׶8'{/o砓<8^06vƘ(X5AK;trT;xܕ%W>VA`X$[/6!@@U%E"Л@ĉ3GbWg-*]!Dч4*BFbW%Z6s(mC@};՟,bMEɃ4#*x&;vwZד#ex8bm3.iTN6̾qb|wQn%eUj̹ketaP n-W
P
VBSVYXl9;pXq똣ǜVtaEp֖"œL<;(UM+!NR܍b҆/RoW1I+uoO	`PwhgC#V.?3.@l6ő5>y֑k8e-) @V5pZyO'tOb0'|S7;bZs38~
UWz`z%[}I4 8(2}b8p6$vYDJڼmAbnqv/R2{hAKU'nq7ܰd;C$fowi`FEYڴp;qQOC/*=uV{;JdJ<8}qO|qESŲToLy1%ry3.DB }iv&z6MO?<@3ܝ,
}Y"@@2Ί8^Kcy^C޹ljԕ`KQC:7伯Q6Ib19$ׇTq0ҤkI݄i-~Vqc,d.btHML;/ireʎ^؟C֔t
;/N7+Ceyj7{t~
-hYIle;^A7pG?iGGӞ[i6Upy	rxr|8H}E~E::ǚ?y4Hz?0h.Z쾷	u-2(1]7A>sPv 4_o8nS§ M|bϽ!犽іu*H.~"Xt,*?G2ְIڐGI
	HIUTL$/p֛HX<x5w۳恄u9Ե˕
Y!ٟ>{s5۴wehf<v.DͮU`
;\ g$q:V
G J1[YVy)Mҗ}@(vkϦ
@ڞ='a"-{zXnPP~>dCѐ&3$@^{6D PD"(st/oB"?W*\reXIzpCeΐUNv<(y{6ިfG@j#v#G< tہF_&n9UfI{Z:L8ረ4nmYhqT	}aBʧa<:?&s7@tEA}݁<L'h=3,J;]?r/4Jcge?oFHh̀62/*V;q#N@yHNӀ~7ZMf4 }i[A#?
QP`:#D6-YEsٸ;q,5|AO-:47c)GarMdPWbC&nglxYY<;H`}KR8{vߒPR?W@u1N2 @HA{:є7D͔C=zۮ6`i.9yAчJ bp`mtXĿlT܎v6q{t 2tU-$JaZ=RccLR?C۪XNtw~rj͸Ť8!6fDzyr)prHQr Y7	ۗ0N>\Խ&;gꐏ:Ц/8 ]Q#$W2!0l|?M
efIEv|D+%'I;,ԩlMy><9?#4|5[Iݵ*w|=] wpRr.A[yElv

x;Sho:Ӊ/q|nQh"+R<S_o?ǽQlU'vg%"&.4J;=|W[r>vl#japI<.GynpȊШTn?S0<OvARଈ&6&`gRqi g?l8@?atw3!l:SٲQ%:1ߞA6	D*4|Ž6-'no7[ƹR;X[lr-12~JZ<РLD̳˥WO@7Zr6	m\N_ly_[ݷ}'{p"&Q5D-}L))W
7+<fTwG{X\`l` F5bi}8ox_{.r]҅dM(j0:¢/O<>.;t7}_ӛ,
;_ώv\sA:
!wZĬWa~r~_GPC{ l,}O	bq׵
Gπ3:ú/a_&Ml\9"2ʠN4z*[
d]z͚ӉOQii<M&@\h'HQmtX'O&h[hffI2	t:r<B(O&B'mOdi ^㶣^UeI1`+)QYhLb4
k:t9LNs"@Q QYkhjo9EtPH&@㤲?c4wq<{Ȇ
P
q,fWwӻhKBj@~2qc=mm"MgPɃsSm<UJ$[!= P_q@'ur'Drގ֛>vd'xl`3L%=}QF2݆)]JQ9l'oJvAv
Z1lXDȭOa7tUoE߾_wYlvwC~TMuCժG"po]1^`BJFp
kWU&$N7hUA0fkzP,$Vڕ|Yә5öW;+fs@ A|ZGo6, _?ַqe&{.tr݅m*noӦ"< ސO5g:P>ɋ"NZ3Ԯ҆E1ܸW 7|:c[`~(pVgh1TO-s
<&vz
.Bp0Uŝ#'	(-È<>eCTĜh`4[QFZJt,!؝=h_%?ثSD:
.5Y+Ӷ?~ПѬ>R]找Nl!2`stBp;Dg-&@ua1SӸv|~*2)x
&MP] c ʪպrڄyEO7;^Fv;ba`ťbI=O;|KJ#, llEM{THN^5]}S &	qRƥ[U~.u	A4K]fBR'}iWOKBh+UP&zm<ƣN2ʡ`1Le<?ׯJ*UVAҦOg_9dGA1[xnv8ĭo?Hr6,^(Qإ
|:s%S>C0}
LnFK}z_ n+NRC咧cZݾ	bqgᖡ?FzĲs畃*҈ր
+	~^allݼ*dW\{VJypo642?ׁj`&`d9"o[/&v>}z/
ہh^f^ ʳ}c3;V;*Cw@񱋐~<:1oxqX=jgTSv֓]f[ {lK4G?296B5h
;悧̖y2
S{f"d"XnM$h|en]<Jl֑HI5}zVcߣIà]y\zƵR//JO*3tr5uFqk-?aꡫսPo+5N_dBEvWd[Xf`a8b=;?8;$]YΘjq#m,):,sV.=7]a	`<E]SSAMl UDN%A*+;CÃxڣgOɮʓtRMbw9
] B+aT#?UZ}O?	Y^n	Y\[ɱPYn9oq3l=WxtIZSL]f=Z:*seՁ>OU|| smtq`#n%SzB/@k~w{?]Rh:':aCՔOjZ`R
ҩNv.w0<~W:'uŦDXI;
Tx= 1rgvź3thpAAD5nqX
.ʧo?w''ObW+.5?QkI!ЬNs 7P7I?9iIЩĤ3"Zsk3Xշg Ѝ)O͒XiFuVZ"S̭8HsH9Igfn`cU*STE{p'&ވ_ǿ7U_ַUo>vp~pl]dd4 @B@
D")ۆ?)b*񺐇	m"V"T|`s_,&BռFB3BUg,<c1lQ.PyWS!?>Wk%*x&=rݻ%(q"kXGAKz5L7A06% ܨ7Up'Pt1qv蒻9-x	ѬηCnuhO)f${lp𵳦ǩLJ0*^	|>XDVD-xx,V6K*+bNa'~g_Qwӿo_fPdՙΏR% )<Y6ks4<^R?Z5}^hCAKu
il'r/F?Z\pAw{z{tmXh~eI7ey1L!5K[_ɘuOp_a<Eŏ]iy~<RC:rVh઄̸͝[򾑟	BJ{Y(c/-Gsr0xK!@ca[P-%>hS2@\*vxḼ:;x
%4(?0}._ڪ*ńsf_Z:	S |:<?{g]DyH[̫jV4B1UCZwB^~L%hpn"!Gt{=vUm ;aò[S-^!>CUvh؅^q6ZC^VaLT/)|6x>\WFnf^ʊIT"fCɳlm&gE^7?	Mǁ30Km9S-(W+:0&[?`#V|
)cb>MQ?Wm;`n
9˘gӠAS@̣:O~b]	t+OIl=
U]O{@b [;ᶻ,@LQ.ϐhH.%J%54uUiP'ʅLkbO.~3."Tv}5*l<Aw<iaޏA+ogO0D)#\A"(Eڧz1W1{hHPS3cG!XdLY{vZ{m[*/~U
۞NQϥ/KIxLoeq !Isȃܖ#H<lE-icרt#jD6z
KJcL%>$;q!˰|7td(NԗJ+swQŝd)]kSP\1gKGxZW {"d|c['&NY>n/\6{T؜vN&lu˾Dp U{N>K\ngRpZOv6ڎg%kW}E_0~yNxxu4ߕ.V'R.2TQIW`oyz\71>E%{߽HW}}e񾯸ўzl:`ޓYg`LQ/hl͆![^D]ՑJ3q,qK[wn$TWD'k#Xmz²7I@;,*6!ޜypv9KW J&&a#}'|i#1hf15jNѯdxpΠ9LoWRϧ`Y4pI=F6Tj,f
^rT|ooIFF̅+}kCT	sbG4xYms%{R?4Fncmh2a,'Љ`oj2߈uJO LwBI6"2ځ9-`+	x8̐TDire
! /Uyhz%s_#dO)D#\P71m=X]-1s%{d/%ċ@1v\^W ,N^~ >Y=)sEmh9oe;|
ڜ0N⢤w|zLƳOW]a1-;i#+ޗ8I)&=LXW댤陧eφMc%>e!e>,Xw群h-Gٗt'nfAXay#δTfMwUWπ`2]uD%Zɚ
e/zd qDN U=nEڜmS)\d\
pJS^4)bqnnFFY+.A|3N7-<1;(߃~(u6\$W>%5V.,}.YږsT9Ķ;8`W^EZgS_(T1QEYc8Bmzic)z">0BO׋g푋_<Άx95vǒ?ʯ%),%deF1-i}{Hb(h>&"o4Aޘ
^{?)Kح|mZ4 ꘛ
JL>٩V	NoI@OY=`N:QɚL㹙Wz3:QAvOFGkiWxvuX
	6N{p&Zbͮ}AA0_(BS<7y>oVoDc7`#9V2BcU\Cmn!aO}j?3LHdx, n v^5u>}m1''Ɨ9
ځ^"J:vrIkg/	#8apH'pVqitD;
e iu,EJ>~etht4^tÚ݇2fi{/pq!5P)Wy]s q4L-Ae{ӬwOǜdLP #ڰK܂YSԶQzC6,|!f]C;WЌ]wm@s}'>ZNnϧ
!9
=~U,;X((Qf7H5"i
sޮ#KUW?RcG&k̕|~¯ZOnqKY9AVPMB
ٱ\fG"9IsG$CdԄPֶi ]Ohax
{A_!,!6ê[a,R"ɊOA_˱H]wBu/P&ĭWy-בAޝ𪑨tRÎzjyHz;?ʺVٛèP_US#<]Z^6	r()qH?av1lSN3KsCfuu#Z-uCsډ.?G"8p/:݆B3+. 1z?0kCXgl1s7_HMQNVUPu8:IʵleR83	ew1cob/6=a@qu]663IRD[k
MyZCւ9y!tş6$Om3P5ݮØK%Qf^PqɚF1u#|2J/{/>6gz;2FT#ڿ<޸Y
OxPQDxEΤX\H$|Mvv&_&%Pڸx\.XRWDCBaFd;!A_h\i}˲gfznO%]Z;AZNWToڱ	~=KBlAA\I\fkGQ825ʻއ]"
E7)^jvCCgKH; $?~XrJFA!-9wɼ5ލ=Ћ
T1᫥$/QGM'tZhɊµo|72Y"GR+U,9nc#eY1NvF x)4dyFk=vIfu BZF6ׁ;9/n<;pX+4U-祯^
u)i=knlImt:cE`g~;QA"7˙'`Sc2'Bi*5:xW,ZxO_~^!'¨ 8^K1Tj>!;`z OՁ~eB==lEul5cxRgv`Pn`{Nuw&P%;n>/|[!3z^"6e[ζT4G_PפuG#L	f3NjHGmD?9<VےO<[GB㱬?xJ[e3\kμx~wJŃ+B-O6
T'O^UhP=ȫ5g7~?$}Lz0~{J&Z3nM2_dʲ+G|	0}#Q0yH%SYx;WH^Ӏ7&Q9&QT	+KN=D Ak{/?klr'k;,sfh/d-LjIPBweX/AwmχgOUPE.
iI:y`U<.W\שE!L;^X+:iԥ._ϨyϘg{4$?ƂpbDcC{[ⵌF;5e%CFa]N<\DFn*qK%t"ذsY[{־4q\٭wVskٺmmT];:C=J[SvQYwbI V=Y!)&Wz7ܖkm#"VdcXupҎ_qֹ<t|bŕ>t<7ц&|d
;h$~o*|XAS[zwߔVxoB
dTSwI։`'8KAEZN~k!Kl78n(&ɷjOJYj\~O_w1ﴛv&=/6B(_2u}<Ю뼨m$`fjƏhf'Ə3>?ӚJ	@rRy-H#@Z	Ctd98~*i,suir2ιtutF)
G
Ή|[[SL|[> )i+;Y2.Xtɏ'ƋDN7_t:@15X${ƄԫBMP:$
+~
۩%8NEv|m3)Fg	"ujeחIhuoiG6!͎Tl&
¤2mWP&zӻ`Qx6'Bd38m$.G]yQ#wѳ|^z[X\]n,ޑD1UBaA	z`ٺN(h[~;Whgac黴ŝ̉SE*Ps+YaNrTE%NTg+U,[&k_"2:ETm~ӯ}Acz-lbj]~xex$$(g)H鞸b"$6CyS:Cz}a3PCdAFd%ξ?M|{?mT;Hzf]D*/lVȱbt7? .9TyOdp}d-fKqO
6(ǧ
GNU'a雂vdWymrCl!~ݽ_
qaV!b2>Q˴xL&MI
?;
6tdNࣿ7"A>摌
NLTW	|JWvC/O3j<l_K=ȬTr/E}+Q_v_%^
-XlFO!%QWZ`y\Ⴕ<g'Hg/ATwEWӷ9o&BoIzрɌS
B#xi_OGSa:p};P!p
K6ЮzE~]WlB[kivE<&Z=pf	z
Es+Jԫfu X3J+2.*zg
&%|GS9隨v__+.:HU.^`B#dfxWCyҘ)YGX(!5NT
ᅓ
ۊZ̹ڐ6@ B.k9b|ccIhxfG,e$^.>n9gL eO*4HKcm{6Q[mtrh:ۈON\:%b\e]OZo-au`3lLdMee8#9Wi}wC'n6$36נ W_9Yun[A>[S
uj<uxis)U-1w?O ;^6(z#Lڱ9I
ZyǗɠýYxO^W@!d1~␸r(t{mLֶ¨TqK	D/E
[;Ce㎷G6GJVDPe ȚUN<{:21W %tHDq\ۧӞb\Zt+k*KC_N_@tW}e6Rq.b4%-ڕe44~{
Tsq=%qہs_/4z8Qϑ9bi{#5Wy~Y濋b5{Y}u'&@6,@)v^Qp(K{L>uX)v.%0rRRtEK3H9G'u>7LJT/ԴVט)&}}{X: /1|pާ%^-ڞ+2.`(m:~^ntÕ")4(5&u Pr! p]˧(gPįe#>$:ŚDQ<
>|h_;^lTS:z@l$ }Վ:/).?/6CH\"lK幕<%M~ǯv%\]lE`}@^HU/Aνm%H;'W阴\k+ʣ+-wTݮaDNhW	GSาN4ԧڴ9irGh۷g*6hCyG"V"rHfD#X1\?ø}ulm曵oJwCcMnh>-ذɽr'l.uSӥy9jئi
ѠsJe@ U|D N
x2?Ш:B2D{'mS-)dSLq?2k==?H/
5B4a[IJ7  w>3{n_܏x TL徤.F}/4Qp;GKDJ@&,Inj@&ƾ۴YC"	uPXe^O9fn1c5Wn~4}wCOQoJVԊ zipi,|u:(@ULlFMl[?EbSTbTLB)wsTrb2<'4߀Ɩ;&3yS!fw'
oǀ~eY$Ʃ^h{E$b˸P eom>A OxޙQGMFpCgΣcKZx	|űSvнM?ovt>GnUPʬ6|<qGL	(s.4g
q]Թ副rYZN+Gcܦxv]O2x['LdG؀坜Th؏C7!gg}<Ds	kRR(Ū[I19̇n3iȚ.aTԊwvvy$iYx>e];D..wZ-ԳxXʽїxe,̶o=/98 xo<YNJWuex:{w"=4"o|}crw,ݓDEӁEz4X͐ڧ;82;{|Fߍf\T-$jeD!f"e$yHI;;9Ԟ
0Ii.wkfǑ}
46{0WD:6@L4B#S'?
3q^䨗%z
)nXG-bR䌷I3d,gC?	#uu$qiĒQZFC9c
{eǡ>Hٴ@H?9HGV6d{|̯	?rw+
lutYb6RpL6b"B+.ylQ$!IypUVi;G:|Nf}l
J':@g6&vt:Lģwʇwpʳ"҄Kt*igpx ;Ղ) Ə~]ǩ.t>jr;.
ie 0qo'B	Uύ1pKCqu6&@rڝ9 ڹmcG
*E/u\W\q.CcNzZ
u\mP=g{~ti

QNBMy'7J5eS5xs4BA
	?Ǣx<tR1r!JyIt=gz <ēQSlov~'MZV܈y攜ӯ+Y1ޗVQsbt;0bIDSHm8R*_2Na@4T|-9ZT[QaQnW$[(U۸6h?iﺰ
c.gTAZLh/򜾗_AO\dڧ 8h,
0Lgf.|TYz5ʜk\p.^[0X̍Qv?+}PĦ(q%xDRcSqjJ
ⶳ~zS^{O(t}[ \mJ;SnVT?
S,O/pw2fhF^e*rgH\?bF2zf'y4u 
vޫ7R9RĝC~CUtw2JGGxwq6((7DBn/̓P?R_L_u٢t)N+5aKQ+^>vm3]n[N<!KMH.mh[U_G!	ȋ<0)+w;S$Ros	eäÀP|L}h֧L%`rjϲkGv2c~N04 t&];1*ݞ IDOh)A6MOˏo-^|FF;FvKy]%l}?D~-;[
d^
,X(k&,!
%Cq
}$onAvO)_⛶ 3tw6ulbJ|7_kIC ~>M
ZZSޗx! &vn{X+͓Kc8X]4m6U)3@GʚM3fk˕5;U|{k
Spxb5'z	xF{]^&F{>AMC$Α.i^Һݟ3cTH ?}?wh'c9cA
:@\Le|Y nN
Qf
UKo;u[BYdG7!syNp@SBH1ORmKx,܏h>86?|'톖XNV^M vK c}ڰ7矿
Rl$^*qXH9@ʓ=>BJ8pWC,B#D9))7zns**kzɏ5u"o/n4We|>2׊`(StᢃelA64"$~HKByFǊ56KT4En|	
b:Tޯ6MM'Z1.1;])8yzש`:6gWFM$kD2#?/NS 6Ll<l̔ytq."Kp982m#=|rrPTy@hGe/P!dqa;Q/⋚.va$B=4!64cP⿤
KORVvP<fDYv
?%{i'}`z"6bmgFvez.ݑ0܁bi+[_b!KB!CUDdBgt)3k8&4.[/ 
;~D+P,V&&;٢FT[yWgW?ln; ?
! 1hzMd|a6vX5'~i:׳WFMv׃N
DKT:;ܭMZ"vuͰiN¾r:50OV7ZW`Zue?'tmЪ=y<ιO|g/XQ]@I*e趣inzb'5&}{_)B\/g,Npvq
I1rT4rv*X)hGFxi>t,[$ۇHmf
.i=~]L}393<Y	&tcpT]	7eglxUͣ)n?E4]G?ǃJq@Okvo=HpT]0r>SQOǵ9!$*_]oϷ=lzAFi⸽r,vQ-oXE~c/kw='z`{r>ۖW\k?d z*)|{_cF0^7 Zu7r˜o[5+?qGڗ
in^/c8(N=N;tW,R`!w\$Q@ûAv^oGA^Ms%Lz1qM!QV矞ooU~_?NAں]*_@۷]
DYZB	ZPMœ4kȻ[*NCoo{>cKE%򈫇i;0:(˻SX(w%:ouҊi:w2]jF]4yy~-Հ$e; {m|23ZZ 6Z+Jym"|豣B}4-꓾*&zQ?{?bMt:.z!F03Vb3ĸհMn;#NUpx;4j<#fg<*0|@e,/I7o?1<e -l-<x y
Ykf
D3owy_1
Mvc
.a_R_Yo^k|Sd.{V-<Ew%V|✻{1w;}O.Q72V`z^a ;6%o=IMEI^#/=F/=Q~t"B
օ%zVB-gqd%hKl0@o"Ez?z4$|~7c٭IjIMb:.G©
58q|}%u~yG	i
:R#K#Siwk?'P4^	@2
DHyܟ^l+Xsh2&G}'q<MJ,_${ds9h@KcUǇ
(;X|/<R]ϝLg8vYP-GJ/
P4ra,Dd'i!++_[:}
oY[l\nD2alx Ni6LqgbނS>o{ZqǓC
dC˰;"7EoW#|U*Q\ Y*bαr`'IiO I<VfFR鈲9kt@
ƐYD5LԘY_D3w*.D館&NUd^
؞Wd誹*G%#bQnX)&P*ۓXG831y3g&HnQ`$6j4'c_uyH^KNr_%|n#Fq.;Ss!D-CE/L-ϱ;@pqmY"	r){+zM~
>#
4H=/߫Jq	]EjYź0rAх=g}GyAAgiv<`s<ÁRSq~>Dr	N}x;|:JUU@TYR5(ha7j>L<]5wVOOad28C݄<;=
"~VE%wgo pF[x2h6RELDWx#Vm^(D8J]ҮQԜ+ՅƔUf~I|}x^9rï	/H/FEf
v41|2'iٕD=q<&IbFNVD7fz
ï䃗H͆8%*=x̃KWbG

~~Vb`[վ`L
v_.>fhE4Ex/_68 ~dy}~]%0Bv%֑(uL-IIP}4J8(
%~R[v-P:./kKe9?t/@Aa8zW6!VQ%PKK_`Fi}v*8 /]Б;yw!i[wNϸ@ѻ9=W6IEl=-:vҨ~ҥG.[|T9[.z!}eVJT4j
yv\jse^o8vm\v2щ`H,\m2hA"10Sx$1`}?;"
!b3/fņxǏJ9OHQM/K4j@QtKa^ᖩ?zЋJ(m;\n.IARݚrCˏ[~I6V370"%7llnePmU<YO-9
`<:N9ye cS:c\W%Lѩ4=v<H~teh8rUȹ.C{x!aZF2hdoUwn{cVex	MbE)X)n68&\A6Lu_۸˰]gv[,TwוY
n!րC1Թ=US!8s_S7WTYi鼿U+/-]S Ԕ/k +o|!KQ$- |LTȿS[Qu<_'$J#F D)비mM2؉~<@*fSu>~S=Dee_p֞Z{;ΐ<ȸҿ=U|C'If0Wl`1R$J1]f~'d&VlFK!I
 {@ۢ(sQD%]&v4(]ϣUMYJ?"Qbjdky9+4SسDP4MI.0ڌWXPzγp?M}RG@RXimC#w|˚eՁx	z_jw>tne)̽tAPqlYx
Q)OMYsj2COOVTPySl|1+x_*ֱGeqM0z巯~_[HQ ^]T%p'c61yTpiR{37I;$
8#$[4(&zjPMDBk{☊;@dԮ@]@hMqJhTiWD=Ugq0BC
/`'dx60{s/_p%ӓ⯌8$mVdbޫIj&5	lXaUº|Ο?@Ѳv
Ib ^]"y&|i5P5_Vn0H^`㇀:ɂr>Vg00dH7g)sNB+Vq++oW/ʆœmigj3>(%3z6>*3v&Qo[C mCڳo	"hBlcը\veZFiq*_Mio`t*ligfvѶˡ%!wN'۔oP<2t
SLkJ1N={4MsZ}ŷndp)*ja%u؟^l#- ǃ&3'Xl]υ)כďzkrOy9щ9xO=@v$I/^fX
bG.^}#Eğ6L4	%9.)h֌/Hg\̧mS}oA{TaA^\h

^tP`1Jzټڦχ{CuQ+[: #F]a]w)oAz]C5N;G$Dۭ	<X:e,wڢ+c}9{^4~o_sJ;i}D^7ge0B;6AN>_ķnKw?=	]DX2Lj#VFY12"T>ޑc?C|X;m *,U
D3!FyVQqdC)q,e`kQg ` xxgo 9@eKHG39:	6wHUX*{;qx'3쩝<)Te^
\mpT`;=3wYooexv/
j{θ*XsH}S+gOWIe_>Gn*>z{]
9<M2q%h:7bbt5Nsͅ%Z| kq^9G$aw ׄ>Nl^U FXǮi ~>as{6Q\g7\»!X	}57eG[u["v$Z4xzy"LǘJBjFKL^,7l#,}%Gp&nJ`nF0~J
H77jj(_eEɸr<8@/7OObZ
PQpܵqqZT.wl̲
d?|f+Wz쿒ے})3wp.<Tү[Cm_#93>v~/O;zgq%d@«RҵSHBCvtYSFw]Ӎ8잿7%^Dq#:G؍Ip<.H\q^yw@
:rՍ[& &@-{[-[ V\@{ş ,md1}F9bŌøsjQ
91A2{\w 42fwb[ Kc Ć7jr1sWڐL)lN:$%G^Pº?ݢUu7PqѭësT}
Խ3*$-م	cβxʿ x`'m_$!{J6qgF3э֗<`\l?~/g}]1g+`y*±N2,ϣTez/4+ilNg ;%q;+N8o*̧~-m^"u<xؠ4֋K\Y`~bc? W,+X8${@ZA0^F'`.m&t޼
i'-
(C@L
_r;bYϼWzAzfRδ |p[SM\l:j4CxW_Ώ%m~jiA
˓fWL?<zuyOaw<ۧw#DVkJd?̻zʡ|QJf%ЭvǙSnB?yZ>E{7읿Bt`Xdh^$o<MPn:NV5.2 E}}qW{Kw.6lyߘQm̗j}K 2ۆ5,S+O'fŭ~=J@!2h߂yQJ}uҏEJ0RH> 9M)ǂU_qG!Jv]=ܥzO`Ap1=iԧ}7~8Cj<v8:F%׿z>j?gfNj<DN]"^3Ltz& {oD++0(ՓrJ C8BJ47Zq̐\Kb)zN/U|iUPlʜ8*Gn#r
s6POEPA
wɌՄaUəQɺ
kƕ]l̐1U9_H8%NF͑jF{%rWMfi2Z$0\|UG/}~;/,O.zƽRn>,W04ǉv!Ԛn*H`<r|UyPӸ~	C.(˯e~C/^Z$CqL?ھkQ-keddQ IH"H+K3G彻k57Vm$`sVMrE&x3\^qօv# !ڕg|Yu2yt%<	NJ<W'x^-hujaIUYeQUyt[aۄ1Y 67TxP}bb+]FPKsBM:@{Xw'<ye6iSQ[g@\-Kйw},!al0|to屑U1ć	R.d/V{gňcz앮ٿU`
cxsU9IsfN+,:[TPsȹ BzyZ^HTŉf-@;DP]nό'~(m<Լ\fP7uv)e0}.tߓ~wR_fZt{NKŌm;'SwMD*s1
Q}r]w
q#N+АPg[8|TMVj_FDuؗ;m80.[<ksmj
QbWna{:}ɔo}_!6Z=t$'Byb	z4{@u?&TEҖY=:uXx1M,xb
b>#/_>Sf]ڡڂ-@E{j,{R,=T~pֺ,o?.n9n^MA
".smv$^CW$#ӗOS了KW>D;rQR|=uUu5" Ƹ~h?.<{δ\r2
cW`#I\,p (liY4wˣyD+#Nۦ3e;8U31E|ssy	YЧ\wi3)
Psܣ4gB~%y1$?$F~2=؞0G&%3tspF6z<<Z8Ƌ\KņO׺I6C}G_M̹y1 e}	-]HR*3v%ːmOzہ3m7Dz	d68Jn4rX442	}x]p~<.Z+K7x*IتvAIP[ǳs|Ʌ3#
wjZB1Cv:vH[M6qzv/Mfl5NZ}fh:JoIQ#3hҭv[[͢Tg K;7jC4r9b<T1VIQ}c4kW O
?G(rn=i:n|#	$y|[[f|Y_V<{5ݶs9vx;Kk{V=4w
AF۽	M?=gIuICӶQ֐NR;NkW	oZ; *Hx=9>^ʢg͒t#>j':.kx^?va-V.2<z:=L۾_=E\Y":&)S[S'Hh'R"O)5fE)%uʐJwсƱyK<e~#{S4!1nKv=Rj75z	B;v{pWP
|mò3v|l=Bf#Pn`)f FVPrri.~aʹl0:IH+`'}$ި~
{vwm'"=\	|F+sSծ6O%)bg%
=dw/~}4LQJFh,Rs`>t9yؕeez
xtx0M逮~qxRVZPDlFOa>F2v-v]g FHOˎqn{u'1
cnE/~Yzoɻ>r&2lDs\3%pΚC\ȳ/md*iv׸3{dpҼJ:B6@d<OjA10-9$B@-sД_Pׁ5Si9*ހ.NGZuK%)z$ʑU]bMXfdyQx;he-?nm
*Lwgk4fZ'V0pW#a@xNڣ{wy"&o8 ,BǇkDrMNb9J`{VCKAI((~bȇ؋)Yٯ;S*Jd'
'Oٲ&}~ݹ([zh+*F0QT?IO`t^|?x'lfʜCv⑤n`xox~~;|l%9$KQ [8)RgK)6K}ȏ'wT[J(Уi?,6avEPWڔuU.w-7	K4jn_!(kal^"-X^7aEއ#N׾ZȾ_UFf(a:h-bԉ*;8[kH!znVe/3A-_-̅L	 PnG	 71җ?61	HVb41ز=+R ,}9yo>;Hw,H۰=s^/OFԁ=ohlEh[(44.P.
y?^H|D3eP$H)`vk-W!v(Ŷi^E^9)+¿֕O?ʩ`DsC	rV8(>-WXl;jh++ǊNn0~[~OAE@JYh0E5|̳g9/Ѷ'o.qn񭨔\üZ;w=gM,
U)uM^vfO/0o>^QDP
=Exզb)lS<\^ȱ=c<{yg\ڶ{e0FHzj*g-F'68{8{+o7u~R~z]-v""&7S3\W'3DQ$~ߣÙ6<=x:Y'$#wz:i,
E;E`a~RH!_jL!(ֱ
\VVgOz޿WW'450̍ZL4:{i@KοwDk,q"V 
b9:r={e|w\$vIE*o&6$=wdܖb=I[7<Z2xG@,`Lm^uޕa9^sjb $'HR6
茜*	^T{Jܽ5<Iq6Xś|0*61uvŨI6Ȇ7;XX1|vjp1us{_K!Ah6l㤞#BDb笔{~$\zHzXl08-Fx82(Yw|M7G=%tX<说IUKr{p1efr.cpwL&-I '(ߜ}߸?T0|K|_%
vPRObybC۔t FvD.B?by2D>txM9+[cYp[) WSdAHY;}>}:*ZI;>掿{HZ$56gC*EhԥRV;Qi{ܟ]?ٳ!I2
LESS0J4?#|#o$6"*lV|ɉԶPZw4 ;CĵwI>Sy4m/٦lR>mлEGof uxSj&Iq=mC 3l&vF3ݕ Pf5HDa_4Lo/r%tLN-\`_xB|P󕕣Ue&1eor<?0&`1<$gVge[Q;Rga3JFPd:#Yex:=^@ç!^
*S?p՟⸮~6$Ćއ$Ϸ4ȩޥUH,xWutMs]?^2ro;0wxt暔l&`]ZeV1]<Wx?ȓ4~dexRx^ Jh1@ԩp|>lx'*`Jd!mܲ*pJtX7֛9Ӽ?%Gr{?D;xTe=kصPX_0ݦYqP4[Ydl
RO
8
^>ߢe2ZUڒ
az%Otڽ|?,5Kҕj[%J:L5c`L[1su2g%uG_u-o[\A:Ņq!oV:e$uiRp(wD&	S+pb.%'=b%A;OZet0{L#oyalqi@Wr/s<8\";<ڳ${)yiݮo)$Ԙm>c
sضWYa٭-ܗū~Bj٬yby:"g9,_FUP|ȸh3J>3NcmǨ89^.[&lDȕ3K0XXrTm 	C#O蚬 ytfF㿰O:m
DףCV⨣<Uo]J.%M *_?<&FȄgtVot	p^c.ń_P{oY<4J-ø#"`\Z[J!"~Z)/6s\py{ܜɞI@ZXӮK ?szDHdQ%	i ^_T6^]?N%wжL-'%Xh!?3tTHVEK.I&A_?@-8	I#̅Q5*<bHiN**藦2/C"茶*z{ㆎM˲k
	iSڇS3^O,f^j:b"Tįe"`T
?A(|۶!	iua%lo쪖uvkb|L.saȟocbQRƣW#
!-L~pݪ5uV+*l mo&uwG)YˀfNCK0[[{h1^Mf\G|~oBKX8/A\S9wN5\j#w0^3Xs#Cz+`i(h9
h͚'!uj{Z<@0yқ;WQf P@X4S+-fj_Sy0I!̽;5i,؉\kʹ9nxt50@r+zՑ_"NΆP%9}Nc)-m%lxUa?%) [YHuQ|
&wؖ🏯O]wjWc5Em8Р<uy뇜w;D39v"<-gK
/>u[jy43h0!wX9MubCH?湆#ԷI_v}<gsfہxY\~8Kɏgy0FXG|f:cnH+7b>7uՉЙgņvifP$:,țD˰rwg0Aiv$zHhL*"`"ԟo4η6H-}$`qeN[N[C[ep}+x_Ug*+c"
[ȀCrb.eKSu@Q{|hzksdoqg1~77xmZuϯp~m1BΡmH
uդE`Q۹%qG)8[º׈6؊^8J
x:9	g6~<ZN#NɚoWv%x9 qh8:	@ޫФAe{=P܍Z,z&*컈GxxW}NuC9nm^t\WWHJ-˗S:@<Yj=v]셞j8IJj7xѓWxFHJL4cYK=ZR:vfSM]<~LtuUnC{F&% .)rCFnV3I5aԕ=M2s%`xFdmM`Q+ WH[mؾ=rUܮwlCGr2E>J ]Oʈp=Am&D7#	_
2:]O9Od5z6ۇꙗÚ:#XS@RZ?d7nV}.u(Pzl CgD{-2=6%pC=*m><$:I6̗QSO,>e	).Z_JDQaZwM.tJg|"]QXEqx?-l dP\Nk}?"v&?N!3yC8X~O(`1u]Oiog>c0	28yW&
׊Ksp$&i	1\=9y&OYPg>eN-:LHWt;Wd-*ՙkƃXMB@O;Љ聯ʺ_r:;l
ΆzTm+JC[''k
RtK̧ȿɶ(i@ejN!kj/3u`<uyzN
_]+s;NzhKBV[ifϚ^6L:OӬM!$nd+Pݦɸ$oҐO3bXvٛQݫs[Hh98VD}NǞٷ]_k
*\&F(xTL4K2;0!ub4.@G/ވVDۈ[Uѿ<fHޫ4?\8A{)wU9͘,gY-xKłӋ+iTU`He >d0]Rn#dC='+!wۗ rknF9d- θꬫņjy+\}q!rS)/7!1{EVv=_
Y}5 З|G.jɃZ,eNqXe5kB{3aV^f(LW`'mɆA_F]=cQu7L_]cwNn[LpZ>n v>G|0(
lI˜ؗ`cX{J|X99Na]ޒ4ʰ2BJZ?xw˰5Ҿ|[GBC8cm
9D)K(?O.:n$W2h҆=TiF5^ſf;It҆ۅp+||8IpF/!.44{̅!h{d$ZAul,.x lhv|"秮O%L.aqۼ	麈<<N.k9NHJg`e=]qux'Oxol-nQfcシ4T-im$N@ߜu/}R^3Wd*wgyNLa\OQ)Q$:>Dr6Nn4m֖Z`j6 s
çR>>@#vpn,=d>EGcrH?3WrA9V+ 4Ljl0^t!d\Ro fǔ,)k_Wl]ل-J>s	Κ kI3&k%I4BEeCY[RcwjO#O-eMORta/CƯ}{&@h12 4Fpo.c.x10՗T11wZ`K}
+jp+> aiSUX^KП+u*'{Z\]'<KkpMXGݣ< N W#l<o0Y|53c7Ak=عcơvo݊y$췛nD<.
ȵkieCR$=i^o";B$:6HwOH$5R;AYD^MK8tqL9X*PBzxbh`@ȃ
sAe
*OiV9 DKuXMg#Om OHN7Q",'91Ȧ$.i7wKZPs-g[.{"VbZ>ʛ&[gq2\f txHy8i}*c,٫SïFDkꈢ9@Re@`nת+<p%`8j8{d(ʇ++/.等-l/p[nX+Xbâ`U$~_}:KEIN׃/^E\ăPs^>|p0p-f*_O\猂*p>G#&ƹXnl;cw'aɡHǽ̈|{ޡ߿,{@%|=<eb5z*Qpp`l#u|W5k(y{lɼ $,.Wc`G$&ۅ{u3hZſ~͸'I<DJcSZL\vn6ڏ*߷X=b-Ex9o,m*O$OyElxyzmfj,xiG\p.3rfH><]2k#D4#@oTKEoYuĮ؃#.Ae@n'1ok:X鉬+	8Ge\
WR?OB9=KpP}/H_)Dl93pCHaI#/
Pgݳ ,K<×w]p\qwIr@h̲%=n.KK

.3WiE?O·{}4 **ATU]R,VX*iN A2&oƸsNv-##+ôV0B4!UYj!M͒S熏KQerT*Ɨ=qzݙa%zZ2*zqӮֵ3d?Up]a⏼
]&
,.q9{a}uKo\FTHUx\v˽Ǆ$xR[LI3H.l3?	\r}3g Mq2y?ԷQ))/HAy֛pꃚK'DzldtD}.%60AJw!a˓GtA!|jeH8X8llkBu߮VT÷Y@s#N.Dg3wXAƲ=-?K컝G
lw˷^NK$(/myG yYꀩڠ8QRtPZ۱|?*4Srĉ G/G*,U%[:
n"Ɋ	KJ5|=Rmw+r'J\6ŽbԁJ?KުǗ4@a
LgEdsxJEoC\ߎqs 
<0;dǞk;M\u9Bh$DS(bí⣜xfvm%(8W'.w'ӱ'`P_C{q	dYYHKD-"ɦ])P&)OB{7.O-BlQUo-UIj>-
sx#&wA]λg6rןr@ZY1f~f	H*L]qIWʆ
=O?o|hrF&GHGv&tf4숿_P!?c$J)}Ę^v\k	e%5o~CN($孌
.E:wr[/ľǉۉY/<+7D+ې!ޖXgb0HꕉMޔ?x]JC+)uxkkI 
Ԟh>^a?f>zynuk:
rI279JXf)q_95DqݶeF
[
r^IU#kϯ9֥¬Mɐ\FW1ш
!rH~w&^O~utn^
AT&%0;ƃl pY4=RN/_(b"[:MݸvSf)_.{JpL3F8`<sofy7̤sh++zI3uuTڧM?N}H;bz;9Fk8{o,Ǧx*ɡȾd3CgJ^ U]
Q }+y6]zއQ vl/pz_SoH3kZ9=} ixjwBt=܍y[ˇ&?;0VνUOˎ*w@w>3G	_nVaWLQ\sF"I0<r6UpO?pOO#acĎq(.sT#M`, vXC3
[?ClǭO|JKNkxgB7
niaKb EVEũjĪ{rMH^ݑJRY0%_,G;ftaaX(@I=NAuW:uH-!e+44#٫4-|o/34BI 8aoCu$ t9wz{lwm7]K]tXƻ};ᒲX0e$z49rXz?il[);{VvZεJjsentqv25O9;T&y(&E
tE3E`Lc""YSnԀ̵iK(.tO1bLr 6,,Mby[eXDp{?b\y7'缧zv'$˕fD+a 套>kX[|<f&[3As:A1	g}>Rn?|sq}PJf{<q7ܳGC7ا,)at!wݶMV`^0S^Rrfb`s`/-C˰J{RL/gŽzcz~ۍ#Jڦ"7I#w2vs_[#Ծ/yJl}/8>ҴE*(HZ<Pȷ~~LC/#X%Պ.zH&9\]ʿ?9:zmwtv@]N|]5/k@PCY2ݷҿ%g RH|cJNq[
ɬt$?-54&Ӡ4|ЗL$ﮉʵ,!CYGu}9w`o:#9oɡ%Yg	B"CթU?K-ŔX'm}Xxw|?1 }u(M my4BJ9.oOx.BFaj7pi ƪ،BkuŊ̗dS`?B'Ái~q}o`HL^)Lj&2aQ|E{G56M}Dt&
a5GrLVׅgNT1KRg9H,kp-6QPx]L-yNgGH*p"SM9$yn{4,w+KjStw?ݐFo*u`1ꈻ$9C_Pn
=T0ޞUzG/ƟMw0z7@*q|R8B̄|Znܒsc:d*c7;e=otE3r؃)I|ܾ饄En=fyΉՂf9cwPKhpewG5}=7Z(:G:lc.rSQ4#[V޿̖6ps'=%+.{]@k)(qUz2Z
lנsiԹר)aH᪸Lwa
uԽ=dj7c%oc;qd!J%t쿱"t㝢2n#35hogzm&n7R-hS}󉉄6μSlٽ{m8wCRhH>ܗ[fɇ@ItNksP*)adѥU~j|Rr,}N5Th6
=9^DD-6ÊٮuKB/K<J'W7<fM􍋮
t6Uv#߂/ŻȢjZo?
ջ3/ߟaģIsy!
 PYl[/;GVҡy܉Cs9Y75NgBe.K{t"yNs4샰
5bPyq
u *ͻ>=Y#k`
i+1CdD>_~t@`r?7YRr1g%DPǿ ?h<{[⊃*=\W<MITvD)D`Bb'LCT soXN]zL%{*^{>7nb͠(Wẙ=d;[Ԩ׺L^a׌CyAw'.
dTYRaұVwg/i~0EZmz`pՇX<mc-+LM/p"fke"Էc6,Lg&X,WcHwڇ{aȞ\}a)a(/BJ1ٱCS˛2,
JW\ LBzޱH9p8JJwnrmނ.])@dQ%Mv7Kߪ;	0cZ[^j_M*S b+1 R]F\ HMyWo{A?
v[ )$EC-rGܝ/Pc[s͙^?r+uJͳ.W#g
NEbsVXo!3cp!AO}1^2{2PenwJ5Lնl4xgWFL1ػ"(QUt暤 	N O/<;/g2t-zlIá9#<<CDpvz<Lߴ՛H4[+;"x"c,ʱXqr7=}N}y0
p[txĕӣw{=-,z݂%lj=ɽ&/}dJ<[# #غU˚pKfOL*Л L|W}/L<桶? >Z7td(#{ۙTuҷ3$mQ%X&wm5?a	ZrmH{f# >Q@~222>>`(DApî+vy$|Hq0twMu2[>m[a%΃*CC2;\gbؼ=qsaƳ
l|ݸ[@䤻s
-!=0ls3HQgJUY%}.Ϙ.i_nϸȨuA-ñ'N+,"hTqFtDDů3x_~LfvFbizc.""%\xG}e .ݿ}O_iA`#hZɳ2x&R͜zlr0C7ruxz{~ܴMit s)mR 6>,uLrJL<A<Ied64#G@ պI9%rQvbj?w?w{k8Bکr\1V:yui}T8駯RBNtT*Ԁ֖ysw>)4_Ȉ]py? ^w yof،+KK'<&նo aNZ`u޸)d^#A>uN_sҧS[5*aX 1 1lԲkv{8T|6og#" Or)Xa=~to\"h;+cI4M65S!AoA qѲf _T]KZ#8"/Zvd~ BKg"V(=Z^+p"RrDi;ѩcjńͫ^?E6g ˪!lY][2K rÂ0W*m:{G糡|*.5#uT	?+=yeu}X
2 +\ZQn?%+äNF*Ld-wb٤+/d^oQO
IQvBNzCjMaQ+\L|.9c9]s%YƔ%<pbӐn6{9c1ͽM'>YA]7C		|A=?l;Ga0V&fv{e˭/#Oeá8uoq<3mAws+y<^{2y`1-=9%vY
$=|E|3.Vyi3U?ԥp [sf7]`?3
R
T48͜ʹIߵv҉( 0jo~?ߛSTRlȥ)i#X,]Rǳ2㴞&["N\֛5HߓM1< vN~s:[\ܭcYs"R33}h0d(ʊ2r{59-]fވ{#Bp/xp£_3-|7NQLuOk7{eʵAk<~yR?'2ڦ)j :f<9pY?;2Sc|]F!aw#j5(ABok3=P~c|.;⻗{[:Ybxdaj`fOldmtB#Z?Z1Q"֍Ș=̦`U)s# F-~زjAQwՂ?)%>U\ܢ
->$"GYNS3Wn"-n׾ά?_Oac&,sf0x]y
nUoۿ
VFG;j"ᆠz Ff		Ş?C[$r*aHI<'ty˚K̒+ۨ}:4qua.x}2Ea,3[Cc͢S
U_w1'}z3q7̒QZz^ܧŖ<qIkxZ(,+@!#;yt{Wp.ڝg7zEp;(}9lϴ_:[^SE(X!jؗ^Sj?L|yH*~g-Z93R«TK#uTaOo5%9}>aM< w'}ɱt@S7=@^n/O6%t$sKJ8+CEyb-0>a-H9WK}tK{9VJV.`YZ_wكň;w`rdyr	9;G< |?&xMN
6F!dS(2"NNPv}ǩ/U+௰{z1|Q0'pZ 7̜!s_q;	8x,`|b(oyHXpZ?=9m˖>تouӘV_+"a\⧎9YFhT
GޯfQ~S"
Q6N{falXz@>3KҽtriÃI\w-gK,{RvbIlm]`
8{Sik
g9w*K
Х4LcLVz7>\W~}7^x9ʷd ZH2\8f3H}2C8/ۢu#[n 'I}b)K1wc13cWj]\xco(m5.
o
`m>`st=>iİm'[.#7g.σ-@~=0MrXH
E}9tmb{79^jMiӽ.o?~c'~Ȏ8R0ˣ[$n!q_N@z{03Ff^QEbĖ(L
cvElaTUUnMB;7V9KCKNlWdjS͚U"wdo?gLD*PNvdtډ2x06}wF/a	7}Q8+лoid=wiˤ(V͝I'ifWAHC7Y
7PX};Q3ft$\F8`PXRYYw##(d,٫5g|ZcAۜN~c s<2{X{!Bx7q5E
b.r_<;(Fڏ
٠ǳ/	jG
-(Ocv"p=7yBlSZI"{X?IgD6ܕ,!l6qAFc~8Df'>|L.ms**;Dm2rU>znYWJm$sO4#4, qö]Y XЀDI\`J5ARA2!:h4E$/p?v\EU-Y-=?)LGHx%zw
yqo#B6`qHkʪ{7]_|znC: /˓x
r[.V
i-~g='g*wV
#%Bo،C['iLm]8^|gpobI{-(xp1	PS!1I ѣgO{A]upyr$8Yi{ܚ?"`,J@Hv9en_2ix[Sܤc5D6Ą}up5`F'MjxZal/&S<f͐yujF FM.n/"{}E~^cχȄ'^"-R6Z.k@p!< £w?Xk
V#̤#ڴr%:M6Cv/Ɉa %~ 쀺 $Q aSu8	Ah[{Rط]ƷߣCU(}vkFvB3
ɚ҃)m٫˄6apNH_1mwb{Qu_Ћ95pb\
bH4lIR,ubr9qNi	mA]4<ձEC^L4܅}zt5mr	t9rGR_I}F		
Uґ:8 P(A%i Ú]N^lqǦ߮[8?	-]mv]."8'+Jp"BzN(W}ߩR'K3=mnv<	w{C[N
؟d_4Ԣ)T)C݁/!,g(T|OqP?n?Bn{[gP$ 9dW2G7`;j;YnD<Hʺ|w:N_kcVXZq¶Ւ9{Ƚ|rÕVO}_M͞Sݥ
(CyWPrP%=503h^*5o)owN50 v	?ſ;GI<#Cx:D;
m0{TRHF>ÎDM#Hdhlm
Ϧ OdKW=EՃ~⾇=LRcԟ]C$;ҖcDDĐ+KI,UC(/MA%o;]!au7҈0Y[_Nh%Ad(%u\0MaԪ-23TkB<T>5BMz"QJZe_j8W>FS*пBi8ou;p)DקARvd(SOruT\soeKˇU8A줰dD=|>$2 ra-~Y}%ϋ/耧!5Tux^0w)&06хR +p/K Z2>T{t,-{'oNV':,<0
xqGa~Z_衸	_\ ZY"?\drV̹,ՇoߞXXRjh"fX;*Q%55FW7s%mAACT$z>&pA*Ni
Hz3ٷ%}v3Cu!wxԅ1v
D3(0Ɠ|(cݗ %,r*Ql8azDmK	_n?qۃ!KIgdόVE'9T2.@8Oj黉͌tT1J난29(
JNLM#};
vwW߷$;i9:ߚҽpʲFJr
ƛj^0'gUuxmKG^SfȒ|Rru!4R%*_픍HvBWoӺjްƫ|{0TUgsl 3I=|˛<]mwD=!av4$~:1HqF/%s|g꾕zH#OiIn\^ܮdk!s;vٲ6
Wv;. l4İ(6⌒ygޏN!|}5ٚ;ڛ[eOway8"&x[W
[ͩ}Gpemxv?m#-kJF9],DChP)bwam|ؓnypqڞhy\can7Nn71~3_jqu6}u=84ͲѩdE~)'F>'7(ZIR 2L4$DA^ð%pҨ6E+ U LԄSQ	diBo\3v˼CԷI'5l/U]m<3tgp	ǲ
~˿w7@0ѭgIIEIU5*	|	a|	}ۘr
V!7>kbDWd].f[ScJZ=8D0
DCuJQ;d3r=X2Ϣl,hWZq
I[VIqX|
ߥDgxPTɋ``n-<1g
Fz,<;PZ#u{t#>\ύN<zgXzZ|K9iy(yF6V?qa[h3n3L]LhPraض4&cT:G<d0!r~?͋}à<Քx&̎ņ0(^!ٮ@"3$6䧕?Fȿ1;Tc-baI;EeN.ޯ 1\d69X*@j:7Muuivv_m4w>@zI
<u˒43՘Qy9Wif$ \K_Y
m|=$ l/1Ыv$qYCaԭih	k`91E5d56|3K:i	8Xqx]2d컸Ӌ.Rk͜IP2h
ÉTBL66
YէY|n+LqBPp \H8׍+rQ!W}p&nϏ7bSl0
%a ϴ5Ԏ|ڲO?gǚ~6@zeT]u; HLW>٫vO,qgz%(J.ABzKAZA%}c$0(
E0%LҦ	NE1{j*+JW$C<u]]7@!6=ߕYƽ:cbZd{e2PIYȌkFtWs2<9;X'-<i}U1Ik,nO
vB>M}ʸ9%lU\TJs~^Ew뵅M'7^)ݷ;q<^.Y[D+/̜TV\(̳#F3=[
!=櫙3su	z=zj5XM/E88W9Z|iIƓ!,z0PrA
vT ΀\ځRNL
לMWfGQeD{XJ%e<rsf=5'pOur* ev4b<b;Ѩsxx$\'6J@礹n#$"=(>3ҵGmH6jF U_?>gy+-NxR5'~jްl9SH76I:M*f۔0Yk>(R/Tߵ`ȇd.'jw4VbTO{R,r"ϛ~R1SyQo^\8DJS" BKe͜}Y#&-wzu^,6ѵ/=nk*CuM3{3zyJ}v2Ŝj!DЕKÁ¢b;6asëBz;w߾	n?n4=vtpOG
IPx)X)IiDf
#mNbt(;׵ShCԓ$אSn	G'JF^Hw A En/!8>BD3q|O*CV5hϓ@^ɭE8Z);uD\5B'j4JTn[ӳ#ؓi#t"OsB1Omv4$VV9iSm\|C&ʵy&<
5`Gd׃ }JGrooHXFZV K`]0GÚz|;Ƞٻ
W̖--HsE2'1W_W{Fnn J[/!l,Ԑ-1Ko)c7.7HeGSYub
,+ܪb|{IkWymCN]nXGU9ɊwrL*2[C~JDaeq[.sr!(vrڂ8.@<0y!gX	ރ/*6S=tH$R:X5?%C/7`΄!w.kշ[8,x(Tg1r5H$bW HmM+Jly5nGSqa.ѱ:	pWr|b΂Wȡ=W+ʑ33OrfAQ97Xl7e4.+Umw!Dה>" rv:o2J>.j'e?W6¾z-~huBvlZsCf?F{KiI
4/~%̰/khUB;
?Hn4
cD#s\+2*(dn|iuN-doIRnDK$m1H~j㿹FwY8.`Yvw8`J? ^g7oT.FC_@:C+guA	=X8U @ަ~ӾBJ/`mӵ=CX\Ijdt21.f>oUu.=eT$s}CW>	%JTzY`?yƇc!Z8"UoN#wYMoR~^zoM]-CmjvOxvq(gܞ
%Ż ~m_s!1
|k۪H1j-wť!Γhl_p&HN<T/x63Ô3KZQܚJ1I*0ǲtS=	"Z=M\yKULil֧o/`K&V_,5NsU+R0C _KU?r^rAIs<:SIL0_3#<`zWoL?Lrj\dktnq(Jh"eeeaOhj藛Uh7jlw7ajcڥ|k]wyU>(a5L|q<ԣpLZJ41J(;I/+h~#
(h쪹w_<9 [; ЧCٟF_c?ʫ062pvO
?ly~Y`+tv:\A[j[%G=[\!9WC5{Wx'aj*kxbJ,$;e0܉~Zw'-۽\Iy:O])O8v]p{g2,%Y
ݧmؾB~ʦYuBxY/pKpE<g&m[vq)-qSL4i>:@v%}^|`^}6̆niHSkkgR jn;9y7/x&2 SAdQば`V-]{Fd8dF1W~n9'3KAӆvA!Q-F$}oyTq?-mCQ,=/ńI-i
*"0PqO?)oMH1sF
:,x3pֺ)NZ	<3ַ\]˘d[vs$Ͳ~Iu]\uIo}'֔;z]_JW+3t" %yE[Q6$AjH4Ò`\k/nO5S+Ҿvl5닳"^Nv6jӺ,(^@E
};u燀4vB#.:@QXoj@7	!M¹Ō(iFtEr9c6
ɞs]㒞MJKuVz(W?N7pX .l8;Ȓ-<|\̙߾iQ GM@)i1p쥝O\EdP4xteW%Un@5iÏ 5X,]{Jlce-KA0`Sh'b[T>ǀIP#!tl]Q_:dnYz_ 1޽"ԺL_t5mYꛡ,]I6J`NPzH`cO[Ŵ&RQnX(G݇]K[Ek.~(D8?`k
oI;6Jܓ;mЧY?;(E޹5?p))#,_2+JП oCpa!kN~Y$N4sa5Ȟb?gs,daNΉs5ηUp*%ĞCe/Vj覹{+e&iqsO	j.6u\OAl
JYUo#]֥TahI5#`2G_}>.ge@@)$#	~ +DL<wcʕV2,ˁBwkVfɅE;(Iisv.?zPej*;IK·>Ez8ZT6uZQ
;D.W1,Uv,qЪoH,-l"!I,bMqwedG_6W_5|=.a&ZEO,5O[[jfWULVtۤgZ_Xd߆P;*{xթ
!kppPaOebL+CX۩;SY?pJΙs;YSem:Wm|@60(u\Qx 6f͗W</Wy	B:,':Di
2LRI
Ӗ9?!T>8PL8J;!_95 Mۯ=	.K״.V{XcL dGA|YoQI}ccCoՏ{
o D-aPKe~%X^6ErTn-m#/t4
	^LwsFΛwLiBv}vyS:D@2ֲmW w<	O ?$%[+; 2٪
u(t
Cǣ#)iogVD͓ߌV'ְ\L"
kr5#xuƼQfZ.Q'i4]׽ԬDNM
7a>_V}jq]fPjJǚsh\jٓCjDl6L0Sm>msVqAT7pl
ofy)vSt{Q|w;!cg&"L&O+PrMp@r,*/[4Uj5P}4y]f	'}xJrICPf*R]DViaa%㗅X>"=.o{	ijmzt8n}ю8uy?T>sߣ$_%sP /G@Pdh[aju(>yjny,xw[c{m!w :ק̘D.,uO.UWrIAC'g^+&7!k>P\(89Kq炎)'U?㭘6R|ު[lg6$xJ2:=o9X.z|`ї6擃/TWrD=6vUwr]*	#C?IotuaqJ򊄗">pόz]
4~0Ѷlg$R7:rHYI!ϻ|kKOd]갆V_nN[A#*ʹlJ
A?隻(rigcPeÃ$e?yd~VHJ}c^2Om:q ڸ-?FVv{GH><ۭrtOd^#dTt`TK~N*̓ٹ4mQnBH$.͙\5lw BkG9?'C{R%ʒ+¢Hq*=L~դU)۪'F>ؑvƁ=M+RԵhʄ?#?ᐬ,
sokPiW=	zɨ%:_Z<[adqWxqt]ʏlz>%`ڇ~	ownh~(jOh&)-3ehJ]覎9ziy#;7PWHTс!xa7]13&|ۢO҄;nK;ߓ=4]~eR,Pn0byY|/0|z^	)
rr,83څ	5=M/dǷ״՘j070OG%78Lb8mHs+&2V<ₔ8-l.늢.hO-nFM?rI
QWoa@2N2q
Fe@>F='Yv<(\?YȾ0jz,=HQ<D[.6[vST:pf`
.a$i	K8V0w7\\K,1Mg9EE`p50ylɧhV0+:AwXT[`6xNOWq~Hҏt큭_=h2d YH=SJS]*mؙI'wheQI7g^6/wpi Op7|});G"9M*k	
oXR!}UcIAOɞ8%30rykJ9q̠0F)}6L|[^"?Ke$!a
`Rvb&!؎mn2[n3V鯊U:Xg%ˮAI8fGqD>^I'4?֧CFJ+)%uKx 4<?\EdC᧱0y(,N&07?r7\w u۱F\
S![	fc?|&"sYm"=O%~1Mdh|esP+zn+zۿ,CkImTL%#+hpmm'j @h?ٸ9͌D,pOa,qKZ1?Mޒ!yswJo
8\>h 5e+o{	xbzƀ.XfBM⭈zK菶q[g'i+HW`30!T9LѬ ?'rFSoY[}Li;Mk1vK]83vNq9w}n3e%C!i+dm$sDybC
t	M_݅$%sO!Eλ
ݗdQ*֧LN _Bkbr"@G>pt9s4J5ʢ^yksav"Ѣ2#>5kmuF/
O0ݾSD6hGjTð&$ʿJߓ)}%fv>CRļ[Ŀǟgi
B~N^)IFUrQ@A<OV|2mBҝ줮
k팣f@[5it;nߜ1>h}t2Jt'3(J`u(9{	>8R_^R*t(ȌEIpj^PtnpWjw=/x*3J<\,RXK7]`j<gvnuEs\5+bZ.6Z1o#z1'Kw=Ҏ	n͉'h]p[J"69ӇZt9^kϞbm
u<+SRi*?*v)ppyv'.=>`O&/Dށd|
f̦햬CXy
*xCI)SGuiboQ$YYi^]*X!wh`hgQFvW)6[*| 1U)mqybk5\lʊ+I9
ކA2xT_!v/e|*+D,a+`i9﹑`wK>L+iz#t`Hȸb'<^Sd=0ƈ}5|ongm,e=Rup;2sd4rv],QZպZYZ`q{)"O#eR ^W"T!N"1}PU{&Ο*Q<vAd0޻iXGTM$b-M.XyvBx}e7۽
>6
'nz3ϑyρ'IcYy7'AG=PԚeˊVVNy_wv?i6Ȟ^Թ67U6.JSṠ"c{dȰ}N^!p%zJ_A՞v
4Rd'x//GH/j?SWX[O۟r_>
qz'eI%eVS4̆OYY1,wMIxXڔ{/19%1dzk|)'VJEw?/ia=ouIk4Cˡ!ش\ru/ܣ$mB9*Fߞ${;Dl=
3 _Ur$_+4u
ܽ&}u5
knˡY	v)_LB[A7leܰ屢ɬ86s5]@?t](S18Im0z\! ݷHN'Ǫ߄~ħLbܞV0hM#[;yzNZI>QRKj4[jqE0tX,=>-F	|rs&$^>8ǆmpa"&tش-V2ys%2/*'Q0!Q¾Yjm#(_yHW%Dn7v=4+ͷٻyIhN=~uv&Wھ;kOoI!f:Ǔ)#@Y|t/0c,jW<jl)gjC]Ӛ9x;_^7B[ ZkXe':͉
2|r^+$ {Yr
窀$]eKڹP$eAt"ß\
; 0ً!PQiApwQ)_b4pHڤ	LNa$huNmWճw\EoC^Q͢q_vڜB?g=w,,p,+2DY.韰ҔĳeqbvE]q:tʛrWW5A6#"=jl56pUX]0RKiƨ8q#f3=;m^wI\IRm+,N[3689vܴn
D05u.}+6/~L"ߍ~\0*Y7mhWKnVLѴm%~aRyǺ[ki,Nƌގʝ{OQ+oJJshIܳ'/jmnvQ?sgj>3h
@ygG"";ζJOn0$RPb+OgMՁSHeK",k{AE&;PC>rCtwLbTngkr\=k8
BwH^X0Ӳ?MTvFKq`n~o
0O,̲>u_ "~h!ښm\_U>; 0f"͘nј$d[ɓTq(:/9wX~[_wQu޽%Mc"W{oUiDނ)?h.~TxiYV	ېXi)T*!-2KZ\>G\Zi c_yWtG2$(#v}
Q9ȭQ
Q* eMn׶(m1G(93*Aŵ=DnF9DPJiHC6،e
T G[
{̻]tɫЅ;J~w{P$č('{vCE`fFڗalZ*_.9_=s4kMa=ZT,;)Sb
ފlȽigRCwf;Mɰ[T
o(ҵ̜#<bp7[!TnzZRU|;b+yUng;L\bJO_цD},sHhp|,@q+kt:.Ip-޸ŬPAR0=
Ơ۬h0nݖOK;UAԦ=螽 sl<CHJՄ)pHwSyfk Æ=|WrML/ojֿ)K8nVEA){-
a6_|V
J\W|q݉pIHFiۨthQ^ןs?WLk_0
["9Eqy`XKwߗ/QȎn,y+]=	!fyjbe}jHL{	
zX#([jUXoz<V]x$vZCQ!N}?9'xa|Zo
Eu|Tygw@~ZaO#{,y~>2x	CYZZ7X3@
̰6 [@^P7R:a۰huʶen/,˔⏎`L mfm9npq}`[SFjب_&僶Lat4CqQŮqKcus!VcY"C$	
uqbHX je(>Q򢯛DQMd;/X_}plu8Smo$FBx'm|yd5<'V	)!fRM#GHc~63´drJ8a&,/湍hOqOn?6%'sF-w&`XnjT.7AF6&*2{vLD`%=&
-n&8!Ӹ1E埊Fw'87FJg}o',*`MBb@դ$zz(9S) NW	Wv9\t.|Zaܦ(=[h'ղNW]EvB|gX8\~'i´^c~ѓms+ɺ
unk}J8Hv3|t
/ή
Ćl)ه9q;QF+#la!8]0,!ȳ	TB@_7We"Ü4n\H'*k>)o?'5zڷyP'|d5)֑2fO6:a_a+REFC|QHN#ࠝj*뫞vˑOF׳en }N*垏&l@4#Ӡw"]ȼU sXߡ֦h?|tXSf	IMf*Q	iGD9\6ip޶8Lഄp(p
ap/
l."	_btȬk3g4io|N,>yrMӝ78d`_@WEL^|:^yЍwȥ۷~4A}+Xd覺pԚvF:ع.kc\  c 5/Eo\ߛ|~tVx
o% L7*?ϿOzR"xFP	DF/GR%7IR_
]HӹEF8Ѷĩ\ +O>*P)[}&\9*U`s2υ6Y@\}LV|#5wJ5oKi0);s|+R)l{8ȁFpiChR"
2?wmć+XPJzd]v
n/')Mka:CٷƇO& =-m""r)X^"FN0uo5b	.HHYBH\N5RX6iVj
|>!iawuƮ%
̕dsp;Wư+ܲ4~`OBn[#P\.[ ;"c
8HwK~y`SClD
H@D]$.Z_jN?`ݞC"& ʊe =;ޮZuIE+Q"IP5jƪH$ϡSTW9;:<=A
˩ƆsDTz']HxҝУ= _T٬RMлD."ʛ_[fQl0Ch!
e7
AԶApa %{_6qɺd4vCtRpGbjp&%j!rxqa
w$ӧE41M'eyy,jJ
n5ByڞՌ>ZiTfقȑ݈og
%Cڞ/8.;=?J|+to3
_7EE	m]g75zC	eVsr/ǵK˯
Y4@Iԡ-{ 1ǟ6)!fߖՌ'w>/2)"Gq{]_mO('.> <Bm9cTMWퟸoCn
0}
HiskbVxU0/ظ:HM%IGA%z=3Ao(ei>mV$JV_Z9wA'
E>ӕ[\!=5h8v뮤!>Dy^&QB><had@ot؇[";xYrh֏yڡ:bYqUnO'ߕƾޏ.V<j`~K.NlO*ߢg
1RP+mre6ZRwVFf:zv
)S$atWRvR%B %5-Q6mo=+ǁc4JWWldL,:XI};/6.yCޒo+>n[ɪ qՏ!FqzܣvEx§o}75wC29U1I(j_(ҏ2԰~QagNFk+,+"4.ѕy'v6~>,آ.	dWN]a:ᩗ(L$B}c4tCB89'.e^v#$Nen%y/'w{dq	VA!
mڔob)>KSYxcuT}pd_6/0nI⵲NT+$+_QK>^\׉Nz;VEE΅[BuzvxBA45ʇl>
46AP>. '"v!	 \s6fG,e:DBnn# IGev=Em(:5\?չCMg'KƨF_e;c,ضmWT>s8b>uM/KVWlOYJ!H1sЃCeR[DžW/S-+vq^_@ƽ%}Q#F2j~:_qC|6&ZcP$2ҥ$nQ2Mi"u#YݒCm}hn8~}-MJub巺xn=nԒ5d"hG!QRGަ8#4 ˑ2EJd|nJA.a;zK+JOm7|6AkMXT,䃸+fFfls.PI`|?s܅(r{fFnK -&n?3:!km\.8;ɖ/YM1w[y!3ҞYSpoI7Vi~&X# zf
o]gRO,}g_Fmab4X61`@ozKUGu	sr(/eb٭&Nc"Eɺ^zzka'^!]h	$Qz	vujl=8Fېŕ;]@sRxoz'ո*Nךћ&4",P_<{vO)[VDI)1'=A[sgAf
golקG"tC6̗;-k[F]u4Dnp=(ݙqBJ\1"Kde0ԋcπ?S[oNUWK|  ew]@̨ea-mj$0_ve0
,wdLѡ ڒWQ=߯ffPtMLcL蕻jc\!G 乵6O7+;p+.nXAKIFlGR -0QP|!O^HWg%glrќWt-҃dnq'7˒(
|[4?hMc1/xׇ*;y:8׋}8a&$Wkr`WP'\m;xs nۤ_בQ=%V􇉭YQ;v
R2(KRk
[!ćQ"޳Ӕ'1efl[o}2yܔvKb	"Y1wzc-<̂f 9/hh# Nvy[2\x;v]?ޣa<gts7wۺa$4(ؐ}~mL8fN9G
m0NTeNV.1՘+1`
{[c<UKυ5v{dQod[
5;	<kKcJ]y>;?q:P^I.^?gAk-z"iw~;<?f9J6f	!8
Ao~@ccfG~2{]y+Vxu`
BOеH:eo,3]>9PJ¿Yg~F`,b_$Ug蟻pTҰ0g5ӛClqi+P.UPGT3 #ʔ]8+ٽr+K/,<L_u
hs PJZa֎2mU	TԺ:ܺGѾC7wq^ك0uEVbІ3z]ӷ_}&]ZͺB
:<gvm۩
ĆbWg	y#0^
Q^Znyistg+\hISxp1;`b-SnNyVv~F"iž%
=4P(gp)	"ݸ#
>_(! $F^GpyG|~/pvW ?
Q[og\0"ޚa$C:NTWrL^5>=q@5(nߠ۹Ujeeff/(>G@.U\^M>/kzE)>$j|9fYZ=]a+0xe-gAѕ#S?\jt@Vp?E߾l}T1*
Ju{ϪiFQ3ICHn(74u#u(D9}A@X#!C`*K#k&5&NF,̍9]E}b9eu̱3`Tp)c:例%4?^oW**Cz+[2AAyloę<pM>«AKW{w5],uܣ;I)Po	PX^Yvoab͙>^'>F)6B:m?C/}saOM?Tǐ427"|i,Ft`)EUG7ʓR@)%d7SĘI.+h	ߧ7= _4X[_ÍV;nN<0hz~=]Eϧ>S,5
|e*l BwN.{=vy~~d^Pc
vL
ݠa.,
^zu
U5*2OU	|T]`a#9Jlq"TS̞6Ӣ}7"Wc6)<BYܫcCA1"갹R"+EB?mh^(;vLja{AeS&A\P]LfUesK8
0r	dn=m|sy =̡iP$<賵ڞdKwfF R#FKt
Atwutֻh"575)%-l7v2	P}v|R-243txN5Ÿ|u7xOڷ`rQT7 l"H:>	%(}sl6ډ qwq\)foISE-ewOo
J7 ,=/V.D<+R]+sǩqlf6u	`?<7y}{0W/m$!SZeD%;aFDjqw4WzKE=MA?@LAs?Sr6|~8kK)dϪ/:g'#oVYe;ͷo?A-\mkb ndՃ
1/y)}D1hLhH2olo	At6J1A㴆=:^1	<%zE/\V<	=xA:CyC.ADj̑7*[(Nra2aIIeKCMjU VSt͔/|uHtY<]!K=7(zU?[$m鳰$ÙmCVFZ}5-ѰSݾjb=׆}4V8Iט Eaӈ`P/6!❘&ONڃ٘We8G(ݤ+dy%Ho'GHw2*^Sl:}$tTEVm\[?Q%yB  Q5?칮GOj͞Z!=ty1o8;nΉ=MOO%cG8U˿
|@]%OxӺqϢZ
')9e-&{xgB[wiGF-~fǙGr85q醽Ew=NMc>"
0_+_uJTf=X#ƫdM.n.r,-llZ .ؤ0y
G,m8RdI|r$
Α2ޢ A5b5ǯ']'. Y"IoBy4*H"$ŽT{` Ȇ+$J!4]NKr=VDʽÉГ㙰
jw4ӮK	]qal)-#(D8>G>c%PQQ>/:ih~{$/?~ -/7Sd{҃닓d9:QI%7ؗdfRoSX d(NnrKyR&h[yݗ5Ϗ._qN5@3R	ն>q_=BEJ̰\Sj uڌR2OD_a%
/!TKol"%CiwGpP,=]FHyN͢l-]8יc6G[QCOĸ#93N
yH78na/[oHh_/7՞,1HurΛi/R$UBrheg}Ikmo/GKyZ]A\)}q6 [;v/w
v1Kl$~|&g{ze>r8i[qQRY6P+{>9	=KE8;SR:-|
kc^heƍF39rη|)cL-ewҏXg?Fr?Ӳ1wlN8.ٹef&[_Ki|?JFzV#ײp`Ni4;̄/tB	̷ofۚ^C m4:O5YzslE,|Udn)VLTi-Ue3Ua>\'mqU`9v=zɗLQeh,/ZO/&D.$Mk[ 	Opde/X~ai?l;#E}nw'ÜNihOd9GYT>g5Ǉ
MVLqMnAcn|~g)	!
#\F2e 9~\SR
gS=vR!'o3|r]LU7"apii&bڙ. J1^kYm4Ǉ`)AזjRްj0idC{ۼ!\
ř µ_ѦBsm`$7SR8쁬?4/]hgRlrs.bt3UZKp'*+~$yIMo}*/*I{%$)1ڝk;%x0~3>|;W Պc+#hG1%\	(>AtS41	<KS`,l|SEkRD۝9Y{SPjDJZb
}Z>-0<\2}%%uP[:Ѓ vC>DyO"Sv?	;ki)hy۳1U+UgqNSe#ǣd.B6wyG)Fo-b_gH;|ۖQ{
6uꗂQӃi9RF&=kz4~᯲ߺd;=у@̉x4Ssky^σEGTh?m
<(SG)Vѱ#-<BUpىv]Bl8HMgqNymR`,lɅ_@Bܠȝ5>fXI^[W׉xdޤM99P-lgS4U\Gei* @hB9|ΜXt@4򬛈B$^`q-bt'9"i2ǫXFYT5N$f+`s!hdr#87}ja;հ֍t6uFz(Oف~o	3a:]OA33s`t'̇ADd~t<L8$EvO]SÞGMU6W
`r˷`{"+$ĦC|pɖ9F A8'?eO.y]&&{&J16	L^[Y?M>n%ܻX?d4)'DntX.'	]QOC~n?I	Q]
Zz^6ZVueڔ, Z>a+~Zn+~r&]ŹRplWmjju;]/(3
ӓp@8s6nW}C*:@JSS3fv,|X*mM|v"}
biOK|GwxdT_kz	kz,+i@>vg"Й;1t; <M=Q]疂n+RaeI`o6$M+smF(n&|I @N;$nf^xA>3vOz3m.-ѷwo}9c4/)90DޮK6;d9R%-}
_|2d}^86H.׊5f>gOӇ%a^%dHKV5tnA#4ĺe:}Y(KO\q,E?D"h{kN-"<*w~.X^Z8AhVQ/LWT?oa5#H7;ŝÈJ>Y\:#	l#,[55/!%S3ƮUHb2^IՑZTdjӔߞC-4)rWfs% d"z3V)[%+F퇇R[u! =<k+	W%JW⸏8ɍ%>-VW0	{
Y
ٵKLB6qy C*b0tZVѾg޾xüF݊¬gq3`5mO&
:qXO,1}*ŧ@DM JͳsȚPLğv>4:Hkw	+])jsT{FP!K)z1ї57cS8XNnJAg	J/?{XٳXUM~:Ss bSp~	`wPmS06S!:u70wTEdvӬ&=8-V?iY(Grb3hlZ}0Rԏ<FU<wIi7QP%H1Nw
3_XԼ7V|~w<"*ά"/Ɓ}?9=JޞF9JEKbvhd`nHJOWh_o3H`cN-sT1:hg霍U}d}տc?]7`ZNCB7Q.j~{/K'tP
Q@@]P)GVDUgie4/h;`6G=qGVvT3<Љ-HZQnwǟl]l3)pl$>:hZՎS!>lH@wD.KC
RbIIl|![/R_EC~ s=DIg;*gbƉX0̾䥅7R@)!>%[4tCM,CK!~MH]wOʪv05>sOP	;c:<u%kef?B7{'	<=|rJ[ּcNwXRY#[7rg[Hj>|5TkUSCGCo1P.ZU3㪢ǅ*.wdk_o('
%%l+\:)4<jL)^n_tѦEOFpn\އ)t5GKzy=o'%]_Ȣqk;+rJ}/~@L}UؿI1MҲGغI}JC5c%|gtx]Xe=in+IAr{@qߞˆÙ)Md
ߎk5e"e2	T,޿AJ8X*GG>W .k
R|#eAos=`ʴ|\w6MU97/@Z𸝴d\DΠ!B.<+S
~?UN~JZ'r=\%T!lNrq̡]wg0Lk(x%aOoiNkX$d[NREb]pzat;58ޢGHsƆ\>92L9AC$f9[x)OPjtVPR;5%j) He<L9%`E۵c`R6W/W]t&Kj	6Nҟz(fԷ71?kD`+rHeS]
dF-ʊ*g!XCnTM+;LMRtLܕ@ܰ䟇ŝ{JrEQȭ[UN3
LNSNkڴkT8U]9V&Oݦ53 w%j*-uГ[`-dC+ iS ~9풒1JQGsnR^<HfÊ'DAOқWs~mڢ0Ʈln3PRmI:zmQ9brH{8gZYuN$*]0@frp_?'<vAaaU9">o@h2gHV,YZ?^kek32Y5ܨ
lRI^h@ӕm˾B5_"|/gvrd/ Y.h/IH_>A!3Mɺv.$PJjUbz )V>%.O,{"tp>m)dd`,4\Ao7WWsdjI=9[r=>Tn]m<ْ֜chAؗJGߝ|!lFcv<:Ⱈ6{"yM:ی=;&E7}՗eŬ0^U\NTR[-E1ߞB֦MvmO2k{*0/
)iXtNo5$E03?l'e.7
Dbp Yr4u[n@QyJL c͓8 SiKI*{:kg}4ZA`2}G1`v4=>E{;%# (++끎M;\YrK1<}=0es}knYaKScR*$5p<?pI@-B:vnM/+AQR\bp6|dE~..>!aVfNQPatm$ֈocQVlܯk^+=qw.*01<ittՕf6G	e>3r_SU,j9%	%fq:\T{D)CG#&"l yٍWH4-S;]<l$	kzIR:Y%?2$3|qޚ
5٪3Îa2`4(lSh@B;e4UKZ:GYM_$#]oD3O\ L-$h.8Kt0?yk;1IHhwkoy-N*ɧxI|BjsQǱ`?Gwn6ܢU{\Á:xa0h(ÁuQu뾨Dy<i݄yx`ځ=s=S09s^w	r>K&%Be$PU%WU*!*ruaifn¶O&R	;߿שm 0lt[K9-t]>~7T;ဢu#1jT\ j;DG*O,I&?zf[Kw>_ǥPv@s%OCGe,Fc#`TPKt&Jyzr  gF>gɒ&s,3EGhڏL.)6+şm<~Hca	Ne4,J圃}ɤGUF'Ţa+iΖyvLᮻS!BB@ajk&@Fgj@o	ߐh#]͒_1Q?gT8v5D_Oϑ4dKQt`p\|=ϯ1}!	YV9سepw)]7x=^: uP~	t\z[MK6<bd<BSbijP$v9ڧOZ^x`{.C9
I<c?)g<NtZNzaFzO*We)M# 5S48q'\noCiJ+W:?&(#>ݧd)V-zM])ʹKsKǴ}@ht>ϻɂ837Lj
_`eăh&H<'b~JݰzCU}UV-)xK1=L\%vGya5tFh]|V~3p{Gh[N(́f{}*qZL}{xpwOT"rz6
o7O,%-Yriz2VMS
r,MQ= RǼccpd\y4_Кs̎C|+&5:ׅ9~e(fd͓.ٞT"bmew+K?~&A3oml%6]{nk#%MFCl(-kA5[%СBT
˴]A0"<cI3j'T@(!`eɛIڸ(9^/ѱo^e|Qg헗Cnl}[Smaef*"6*?a}TԖ%@E
. N)?Ck-.+Of&ҡ18ņFKSO;aO&;BGMM	] }T>?[yEl/j@3?`2'/]xRX'CC"nӀ
TQ}a #bwSQ!X¹FC$`:aq" )Nf}6M)nO Pƶ7tVﭤ Z9{i6_'y	fes?ImMa2FCz
|KQ`gG.5s\f]{0g/2R(_́M3xJix;~˨^W^Xu/M"%HER(աRj8䛑:rjRGTr2qܸAx9R_}yxjlv$m5t}|vR֢I淊 ռ/
NrnEh{%GmfL#$qRUiT51ezȆd2vj3Q,	LŇMG
Tn@gՠt`ᆦtO{߈O[έΡ<cr5#CBg.GVFݩJ&٨TVhMŢ#5o(=͸ɠ0<M0Q igVeE5RNQw<=uxD[2Ӆ( 0uD=JJon:Lv|lɪo ۩Ϩ97=EV5FaQNR[hO!`&| y[7D.5H	
}r,BZ4<<g,4.-:=&	V^58%FJC[aGLms^Wn})ؙ,=MҪpXpnV|׼2l~+(wtcABD	h %ۥc"{R'rZ3l)8|ZZmCJ\/i"G'~
/fah^NJ@AZv1bӧhwT;xs<ӸJ!,ub<6P[	X_pm7s?r
?&%3q^V3hC"9ltwдh_w-ۏ<"ٴXov;f6Xp8=U,z34^?Õ(yviB)f,h޲%X餸+:r
=zL.N
xP8>YU5d-iAOr/ju/I$\u[=_ꒌq"`$1	QLE$̃ں!j렸s HWalt>BOQ:9$Mkdg%FLmj<q/~]5C2셫QN=H
c;f/bS*30nzjtT
ѡjUOgZԇ \ *RF)ۭu0iu[-~BWx78~6`:&;O:8n9;$U;/^}s˝&!-HXXe{1NH$3XD炿pl||Hcb%S) ^S"gZJʝ>]}SJ<OlQ&/[xκ`V4TXb|gҵ;"sa7+[YwktO] uBtqp~IP붣~8vO[:$K8KXr^1|
z1,brlAO__4
-}Y
=x(
# r3yh:4
pqЛ"/O ]0g`}	
K'
r؍7yE:Z!-C@^;[6!ZW5*c lnK<4'yVS1]^"ߵvok[!EɽIznJ"hm6WWv+Nt3
O;mTs6ǙڹCv㕬c':WxeyKo='wƧ|a' k?m2b#y{\C.ygQ0_Iߺ+i &J6L" NwC-zӸۣ7䏟0И?f;7Ɏw ǋ{O0^[F$Ww{0CF4]خa/>V"J9XAs@W*쉻vnAnM'FzSf%wz;Zcvx[O7S&	*3-#3m]x9y!|utpp
~$8cW7J46W=z!ؚd7ݘiDe ͼ
rHAj ;ڃif~&gTvgV/\4aؤ?~[윁O4'uoJ=\08 5~4WϋlK2|<x8݉"hmM"wJ#lsa:T%q+Q)κg:jOR]UD]<3юәhP\Q> Vs)F`?ܲ^.YOߺ8uM),9_QHC?=w-E	gsܛX6:{hoEt(
kaVtV=5W9
xڨ nևk;PW,w`ïJRtߓU[hS7-Ci	*w_Q٤5:/@"Kb05C3،}si!G#T/m7"u:ؒڀ!u$g]݇d@${/\O1Lc5_0w)I->n"l:l%,H꒭y]CYChC<0(iҶL1!>i堚W+6%?ߏmZBU3ŨHX'B,%)Rח*;?<oD p1=܊Ll;	+xAXZjA_u$m.;qa|¦$lLKfLNog
dIlVEd-ejr7lN%-3tODgk;wK諢Y}OQk70I74LuhH48G##BcTuwKb',19qY/9Oñvbj1	BͲGNO,
m)ЎFͩKIO GNQ6Qr]2.<SvុFru;LbP!Nr-QW~2h/%:L!:UggҐ?1S$/}i<LMZ]`ꢫ$?[2SuWyάy,%mgߜ v{XG
qDFN[<Ӱv-̴ЭIY4@Uy4)-)(V-/9 'qcE:'in0Xauú;P"<~îtvZi<R*LfV~ъ40G?zV޵`j^,q{ݡ'*)/MJI+G_ħފG6k[B$ajQV<pɂ'acat:oE_ĉv^3ۿrB7$m!e禭/=AiR8 nKG1yN]3ϙʓu?֩0louG<IHzאC8.-Ux%
`s 63;\eb7h
1;r
r9t)T~1@)$_XqTQ'hc.3\6zFWu'WKJH栖d
zb\ށgw_ʸC`CY^D6MCmr!G
6K<^39ln**S,*"#yHci@X6GAnhڀB,N4!"
kj㗵twhYO
i
Ny!կU$:ay$KZXhfgoC(542d%Ϭ6^f Xn4BEUU?u1"	ܸjsUQys  '-QnPA/>v&n>SݬJ NmEc:K_3uO;bVܽ3'UowÝ`2ap!Gr\!k._Di<icGM*i#q /a
š2TeGȐF$K|RsS4E i*
&<i4g=3{1/#+!(ѹРҠ|v+=7A2Z
Jn#*$bB^HHR!i6]J]AiGu+'
cnٍ,8|rl&|uiV]] ^ܳNC#и%ĸo8ǱTli<$Tv ?enr9NY1ܹ?'gkaO/jZlmEtw  `C*ųOK?y{ywX;n8ZgQH%őO#%`=`LXWj÷"'5<O/g^=:̕q5$pRv}"e㘏_uٶlbx.nOPjڋ>leqjeH?cnU}*j~ W`j+{JՀMpA6tREv3HviOŮ]1CiB&Ti8x-Џ̞boQ7*RO_"7n.6+"9\҈G-]/Z?OH[l-]#Mr`+ ]
+g:|-/JhZ{oOo/zI<qE}NLkk2{e赡VCpCcev
2ʕ1Pc2	}swɝ;ѪG1UxU*
S9n#* ^݁:s;Q?=UD{4ᕑ7P;	*F'.YΗh*zGk4Gʢ!4꽘]xn$mWr7ɫ	ė+{Tjy\ܝLopTJ"^QIz?kg@jg\@
qӈ4)ShjhLsw%χtM;+EG;U|+їcLc4v$UJ7e 0Zb"yf_D>֍=3y>kŶdG74
g$-c{-ltyLS@Z闒2yˎyw|gybi18U%ml bx7{:\w[O /nrf8aD9ޡe *nfrt{{9'lCPDNr\3!l{3r`-*>uP|p9O"$h	6ֶB}+
"UoOѕ:>5lEQ]k4lgӏ<e<B6aQRiE0
y<۳yUW__H{wo؊7n3!:\̕(XlАqB=eo{vӗY{
	bbyRہƩMGO+($^0PV_v6XʂS{!|1uK=]4eS.zIfڜM3}ҽGUD1m%}Pt	;\g`&Mˇf,S#'Ga
eP6V{'b<uiqB6l8=Y
]ko4{ռFE(geWY-p0#pIf2<čLEݰ~Z ]O?ä$p~kivKCBj#і=Cc
W~\)#oV7{ھ
|UZN =FLQ^J3VL8պϱTǨ'ZݴCgA"|Kp=Z:,2"%8K<vfݹ]:%9)>0|  $g8p2Xv:gA#?Bkq,6ycz% A=ʾn49(
d.fJr-e堷_'3y5Ar`LW(qV:ڑs!&ء!sZ{K$QA-5@&?20%glyVЖtՀm$tK޾Rs_0CRƞ<):hY$֔Gf@wt&xY;/?dFoӽF̡6W$C:|vWεn݈XWݽ\V-Swu!l2g
,~S+ ף˅rny}lo'rV!`ݿx82x)xs.iPR9'f0b{mKAʿCcԡ賺Ȟ?ڂ.3`L}^B2:tS١C'ϾǶ{lPx0z [w\ri8pFT$q1Wcu|4n
[
sc\/ocS|+tuuxyތҚB#6`=d0Lv4^/q$Y8xyVjۮ	goOXƓ ε2`e֟E L0IטN33V󙬨+CaUPg DpdW3"2TP?NkSQvԥ~r1r^T;A<hh<eAj/32_ܟ+c{Ms;vvϋq8X@G'xR"cɿt0AKW[2].Q8;t(
d~uю5W/{ 21<+a-wW1jCo.Zn5hߝiqQ[lcsSeV=yMd@v\-isr+Pa'3]2 w.%쭠卞5N_`Jގ #zg"GwE`84+2#tw6\2uRn|/s{Gʐ!搫hg[D%ݸ&想g)bx6S}HΦ| }rHB;ҳ~tG־cL ,2|>~n#d/p&n$X%ɥCwU?ewf+{bMaFvZQX堲T8@VBOA}Y~axO[uVfp٬VAtĎ ]bZwz#]#AK!W
DCm'oLW
"Q}yAid݇'	~
vļ^CHSjm`!ZIn+eU1ILI ʁ'XK9!۟bQn-7 G׻ѷm9g6;ljk0$8SrI+.҇9+_Urm-qߞ̙gs>MMƞ.;kQ&9>#c?]Ug.}vWTp"'&{y\.!"0B]3ӅJԥTA**?ZX[/jy)];"	JiښcnX}Mtv:*kF s|$J:JϋML:]H$瘧>w]!3?!7̞!>Pv(fU}6Ӹ夕OӌO4ڇMqbtɷx \[\k$CX9a/QiI?9I5(p#X}$Sgn Kt,+	;d۵.Ǒjy#I;\	J7BLOlF%s7#gE$ G7XxRg6cR_?|BO]4!pLaq:$g*+N@:N2`KsMOKM?og2-^k 8U	fvuӚQc(KI HVU
g/VnWrrz;
w<	An0GxvriM0eKiu~k<d7
ʝ}lē4MU:lA<73_gD7	qo![#Ï`RfM*4vaӮhd""kS矯rԯ`O(Pƞ=;sUwTM?WkOĳ[
wJSVh%Ȍ+2̞nY<)lψ$q\S|
T&@kY35Ǟ
5t["Q|$%R/Wwѣ|\60>?H+JkW@?at(We]i j'[LCv٨2Th.kuԟ}ʐ8	Py&G$EK9]KWU+·4)z6>3$.ܸuwUX{Em?<ESWǉ(.O5T)t")G4lX#V2/[*ar8ɔLȧ+J&XqRd`}`Cù[sWgq[W8=R68	ɇЖVji9_Jf_.Kq(Y7)myAPSZA)Pf7&c{XK肏51bGL8˽;hѴ,ؠPl^)Eӿ8Kհv\WmhT.XNy2n*=1~q>ɭN@"uB!S}EĬ4D b@6	[˦$vxϢROC惵Ry5fE'*΁b2EQ/>>{fLv<xGw2q	h{"~WY~EGJ`*)B4ֵ0
F*8:/C_(rbrLur6>yv5XUZƶݍE(ѡMɄ3J.tktUUOfiq!PWK0]<MqzSʍM
~W%qqSw#V^ .}X.<ׁu[;j$̈́D<p\+{1fB4,w@ߦ[m%Y/U5W6FvD2sWa>Z86 ªN Wm{-C$q/-c
>=taU!״}.PY Oɗء
lOz ?̧cpzD`JLYtk'VF""YfݓgQWD{┎,
	fzE<VC5`o!KoiEn} Ψۡ)$ ,s(sVCls+ʿ:{~=%h/Vz\xe#G2Dٓw{j?4UB<p:G.M*F&$ݳDsKjY>AB='U]`|=сD~jɻR;^nWhZ9XE++IDZrȫWt/y!Wl*Qx$tfr
KS{wiiAT{2?o6*WU!6:VȊEU

ORV)Ȥz@!,޾bT\U5NE{(]v5#-|.-E!c`6A)}Zi@9ۮmH;ǩ4}1fs|ǊimQG:[(pbrEĖ8wG4v*ϙo3ob5tkq>&;ԙ#m.桲(jaFOo'*\߱}6`x)D`Z
y6WkuiQD388z&Y0Q #s
̡(HBn#y_\b7IJ'AG^fIe'H>-F)2E>8Sv>ej	E5 e_TiF7۫\]ڀ@3ttb`-B`~ozlBˡ͒`!	$FjGU{,]Хɰpn	W񣥧gOq۠x
! 1,mT|-y*Q6d^nم^D*Tpnb	<
d~_aŏ#B*Xa/gG!78G_ĳlOwm/I-
,ꨱ:S~ n"՝Jb'6VLk?(>T((4ԢjMb{iZG6>{þm保o؇3m;Z.Ұj'Qd=
k;ΰSi75@i4M{+*xE6
~y^pB7\4[.	SƑ/%lY+b0-yۦD}roNk3	~XP(<SgL)'vÀw.ͼ_1ɎA[rc}BNg?'޺y9cG{ۍ6gPG).e%5̴ih?}JߪO]a$9z:$~vR|:9C\	I .ҳG	Gpb"\{wl̅W2_zs:4j>ύ~#<G3ny5mi)&4Ny@!T" 2'ڬ;%گ?d0*ՒɄ`D8FezNIgy7
NtYU6/i5O{~|k|Ik		2rxar12kۦ(s&S{pp/)
*Gvq P+tҠ|kyk~Ù
T_f0]kG	쮰PaxR2]M뭮inٴ%]6Q8tLzl6/
4@vUsդf{dŢJb=V:oֹs']L}&Vy<Pި^_1}~x<wG
5ddUp;pIRقC+pp_۾o. wg nMR'rcɮ(᛿ŋ7YC&kxW3@ː'lTl ۥVc:O?߿7Kk݊z3B漞C*IblՃxH#Ν8)4&9~8zLeg5nI]6hNVHt3g"QD*,&_-db/~ P>,Ҷf7IQ*"E!B=LL1ƍXE5$/^k~DQ{ѽLe72zݦd<4Ty+/W-)D>֒vX?ήXD-VD=sRgo
IW_r4 ih
~^=|գx3t,HԉJ)/;1:4;(_V.vIVз
|i@IUBo'??o-gŚUqcur;Q#`oiaF=X1/!]1<~K[^XB[n)5K`H:B"4˫FG
beNݹ"vET\!KPf^yI'YWvj)
0M[ÊOw=TzR
D8®
26ek5d]]qL;?{l#
=s)gA|=wXJ|(ǶyH/v7g0&bHs:5P-(-"Е_T
tʬ>A<4r	tԼxFwצ;a.'4SstMDnKܑ "ߛ3ikb<uKn'*F4
x=mXvL'tvXݥf
^d-QXac"N`p;m	xl#*p@+6&FrGa0g]?o')[jY8E9qj!Lg<{&mxŹ"+Ik6KDc4Ny<+q(nb*FA
oOLBUӽ|oO]  SyXvا]=&bROWB]"9@)$-eGNʀ.><U_|ʄBkW^\g7^۩tlшTvgX{)esn$'=0
婱H N8ܧ,^v:},
wTXM L"[ wʺ8~mmθ{ͽ:<Nķ$#p@8Wwd}~%}k/o	NhspzzV[@*vX7͠	_1x/~WvKbÎ숢l'{R![t3h!Djn߽~]R7#f	T26݅%!AI$7@xpLCdEeg=7~tT#2Fc}"S3xIO>MacBӴğ?oKÝyY+,B$"5z1
Q|".5@?h1zݽ̹e('oT\d<O]p%$T66_"؏[ͺd3ɮ>^۪{]}q[j7tE8	M(ЍA.i*Wɕ_w.|JSC[{9HJuGg!1ӆU/;7k;;eZG Dxex0|vU~Z_3v$K
oG/˗t8~_>s?3нۋ<n@KH>1e
(HV}QhY<ǺM̰^6+:-txU݁2
ڨ{ysePk]<6w#iFٺ9aiW2»
$;1ΕWsg~T>>Qf1Kwr4M/ 哙+Ny?=}?3l*4]bfuŬ"}U/Y˹]>Vz ߩ' 9pRo 8EO9l?4w`wh***탩	 W
sHmGLUSL<n</\x	]}K6]%v9g{I?H>l?śovn%%2|5]wrMMҳfAXW=9^K5!}"0MAybpLߨB&MEyKuf^O%į(>|iOw@]D._`x|MPjg_:JfORaՉH,DyhmQ`mgcz&{r.^WIwԊl-xm@El3C%mN݃h9Os#hlz\>ڮFh'/Ǝk=@W՛݁>Y~.>nWcg}篛Vu ]a1bL:RWݮuw8mS]˓bi>ml)tҫ+sMbk떻^}p2B,=rZH
Y)6_AO*xM ntEѵ"=Df.ʲލm>Tbݹ׼Wjꫡk6 )#~.;8A2^$oʛO6}}݄>,#ͲPLq۰B(bw:,Α-qD})sMP0<CjRTxw&ТF%|dkhS_WJ<Gyn쟘](?(;rC6m s]O2e_=ߺo5](pΤ,NP1,hy%m)3x\q)!0Y>d_LK6]n'48/6[3pJbɷe^!-~T6첩8M'qCd3VDMxfWߟ/!IS݋^]mf(W7襂$̾aRz{Zƴ~M	'{%:ǍJrڙ)F	0>j=HiIDW#u	=^d]}߄[c?o#-qnpSWX
>m#gW@J1 gga߅i"0Eӕ0	[gKRA8}~i>~|A4Z0J@;Vr@/5D3׾ "[ou2	L 8S#*Q:e$="T䩈E,1Dny<wK	T	k66HpTl*de2\"'gJs@#MLTQzkO.,`]ה	!l-ȃJ
6XHB\J[?Qܟ]}xH5MAV:]- \\Ĝ9t<W{~?>ߓ[ēr> 0L8ro
]y}{x]R`zxT0$2@6I]t߬OJ
A^P*v1=$<܋@H}g1TCӊgMEèiӯ;q\/R(xVBS("Q{ 4G0u&j{J;p{.)S+;oRlwqۙ2
ҭ } ˴:IrG'͎E磺n5xJgVъv i
8[睟!>G'
EWitta wO<h?ܮm{%
`&WX.XAޣK4~ho
lts*DELN0d%~R˕:ܤ;;}:<muV]
N淀
ПߝI.#`zj.hnr{_SQɒNaGd{=c┫>qm7Uk=w/x=X9dK@掔.#@+1[Rx	A#y<\֜Nڇ9^Y9dٲK#Wƞ?q^aR'\cr=-8,3ۓ%,ɓc~>4z;aa_DA^YmKMb\0ʉO|`~`o0z<H %i:Jd~/ڄC>Owtm3c@wDE#d;'ycYU6ng EW1Va[A!X^*tdR}A0w&
@\l/aӻ?(`C+(32T
LekK+=hݦKv=m97"\R_/63QZT9[13\)A;F/<p=:&KzA| dٕĈվb!#r
{AfE`vTCp>sƓZ%apz:]VXwWᷮ[.~YYR<.`tPPa8
#!ۃfr-Ŝ+iQB()ѬZüvcEݰص8Bv$3U%ؿfXܐtcC9f,ZVc:-i Or%UȯAAcsSTNd?PZ1\1pniiJ_CA'a,C:}E7~h9Ҩ4jxL#R{׆sDI%i2|Fjj]F;i_h܁Z+a-t ?`osҫ.mbN'I*JNcցK<_̯Bv[-
nD|~ص7Nʟ;=!
Ikb;=?fr,԰(?'6,us3m)=.Xx=0oDhMܯ~|zR8c8+
:/ $7kt-Ği/d%aW;.Z'H:[ㇼL쓧б9QeNIា`bnm-зf2\Z 6/_FJ86thͦpd9|2Vjf*#nFYn$d)	`Dlʔ{
KѼ<)BcȯX4'bs|~IG	'!KiO(^ J(D 
Dzz߅l 21{姜+(pJY3D]E"~/w.ג/m?af
RNڪCiM۪盚va=t"k{FR	< nx-4KgA$wdn_Ҕ=(vDs9CsHY808Hf9?Uа QetbЭLV#2x=du]݉{2G=	P+#uo"__[g:susN4kjTޏQD[zn{ٔ	mE(`)XfzS5c#$6ňSS$M:ebs':[ϸILy[AsU$21^EgdĈZ_
uov>Y6+ˋIagTv@o3i1m4su)y{9(xtsq/Lemd'(v}'n0߻V+8bHS
rG*aiPNή	зcMQO#mP]Cjכ
p
!cFKQyRĂ4;}6َѨǶ*;ʦ#,YwB	9~ep9/,P&$-k.I}u: :-^XX@qr91̓5m7[%}L̫ 49/2M^}uc eْr,̀w-@xh*cy'M܂˳
%lCG>p:8KЦ;,ZдA=ƛ]̌zɺUvDwK5\@MV_< &~68Y ,N%h~j1#&~Eݛz᏾`Oz܅;MMuZiO1:Jb8&ї
 +r@?PAS>.v+r&5P<zml;}"Gr|`[i]^Eod/<2(Bs6>p떄ߜ/3=~kB3ek<$"T9JӅM7`
b4</-YEK{7^zidpGk	x=/$,F
œcj9>vWyAUNՉѪau;D\ȶw:%[<I+[RPSV`M=,x,3н5C>Rwj<
>V `(ĮD3>$2Zz(;v幬MmFT [y̮I(ow?W<ӠuwpKNȒx\Tڇ^zZ ?
*cW	ݛd$hݮU@48g(4cR^6}Y 6v|9tyh]B.Ǉ
馣1q 5T}"aɝ׼[IOטV!>,F -|DuhO$1ND5(k[ GXS@=dذ	27:=/`/ܳ
s	tᕙ;yޅ-"6!'6\<3:B"-  "^e!urݷf?/LB[+-dPBFN0An3ɛj_}ɹL'h7^(n0·eZV&88G=
1/y5ӭ'-<͎z;.g``MLZfȢi qع+xdLhR4U0zS>%h>|'o"8E
g#PZU0\_cgqaϝ6We bP,xeR
ƾ^U49c1Aa;/ljdY4Hԃ9$e Ѯ1:IM(3Sńc1z2Bj2ARqMz^N"Ih0	4xI;-avm~6Pq|/owp&.Hg>	
偉D屗Rẛ{wkȜOq₼J7){!6$r6sP^WC;<1z ]#UP0Yw)]Pj+7V!țaY0뇗cq`KV_-]n,.q(,BZq!|:^VW}Im<Gs*;/:h
Y˒7):2~X ^68yF#T}vN=#Sxe"i@>=/_^WS弴s$`;KiYLf_!Lݞpi[ۭV{gT	
Fp{eX K]̛Su.7x`rOCrŜ	Qjjݶ-=0墌X}"x6zj1[B!H߿[H1o?D.~"0ȻDP	 7xQ2nm4vX>zWPx֒r2L%XH
~_ mabF^Oyu/*˷!'g
F5_q]i"QH/kgHGc?7рX6+>gv#n舗E_q|tO[腓V4@_Ce)	b7E]52
rga=P	o#RzhGoSggd"kZЬ|+mTJfs*V7u#~'n+ExO+R)oBLiƛa|1NǠ,ټ Sv.1=Wp:SatFZ_#(K 	 Tܞk	q4Vf9wC8e~	@w+[غM
wH9A@Zn D̸e7-1L&Azg56O;Ǎ ]0$Q09Ј&OrbVG]MvkRU:4 R܋v]n`&@CGw gK%eJc]/~@a3(d	Pa"^Rƥ<T|1b~)"
1< d6S;b*;9pkȅV22_~*DݞK%dgMj\)ȅ  J_G/<.lY76<!1A&URtO%N?=')!CJq_Neq
*vZʥd6eEϟ6ATV`wW񌪞)q3/0$L;=!ƈR1X㊁B6_XOw;%~ԷLȝ-yQy9Rm:`SYyOK,)<W3a&$KqncJğg
9HX=+Hx
KBl=C
 ̾XTwGۍZ_xJ0dꖍR3ԪMkױΘ}9e
-ڀTHWWʎ h
 w%9Odp{KO d?SDqlci}gRil~ßKаEuYs
Fivɱ	|$:kg0[>72jA
`IqOEi/ myR!p{[-I1ഩ٘Oр{jᕍq0HQN9B{G>aP'.,o!>!/RT?-9!e0sѩ<"IRrP6k50{7-ޗp;1mtg"|v8Drz5Ɣ_^o
~"7MşHlWiTWv[BBI§eLrgͬ+}hVRHuS;(9*R(憌6ZV	3aA!"uI?QO[x';yh`&"@UЊI+P1;
hDR><coU9iPpZN\F0WZrٗ[D4Әrg'n+]maYE8;aҁLrx蛍փeC`h__@a.çy2״Y@ٱukaaoSR{x[,>l&TSi	d*
* 
a=ޮg~0|{YOjcPLzKgN.yz=3$FgfzRlR@F?UH f1i{wS$*,I܃*GmSȿ5)ɞ+RdRŜ˸LA&r^ksx㗄lw:OR̻90BjhNm[z9$C'3ilߜtGkoQdYy8
/0QaH@iݭeߛ.
%֏aW* gtbS=u:aW|_(صhyTy[^1JX!0 *fP Jyy 7cXV·0_O^nxang16?Fɗ./u4~M7ҝsCBz
gn?mݥ'08Xݫ_{S`r۳y(ΑDmЩAɎ&t~@_Vm=0)
}[5h^yN!S@'71vxMBTێӀqX˔wq~_4'{>Sƫ^5ԑVJ1Y"ɟ᳾ XZt Uǡ*5[i,u)ם<ӑ6mmFe_6D[<[)Yc&Q#C.e@g7(˖SvdΫ#y/I̛I	b/D'ſP^BEKaƖ*)RG^3j*cEVd憵yN"\ 
c4k4cql$7S)ez͠r)\י`]:<q0i
yiTL:"	L6=9셳t}<ܱ{~7ϲ= n4<B]2~*y(AG`FyHpvt`G&,f]cB趼;1bIڹT|j?0NDz&@
TAZ$hAq#7o%ח_pnN+x]gsy"E>3a<W_ߪ]̛}*-uهf4ReT"Q%n+a Y7yɘZ~~ն X
D2EJ5=y[U1Ld?~rRjIkiu6vk8quB.~mAMc!wN܊B7emi:">8?t3a袬KX.H&<ߐC{gV͎瞶 c,,JK|tP ւuW;h1aAnصyga*7{3⻹2M|-D'!ǮIs5ӌ+"j/:+Jo
vĔwS'b>O2ptt-)[.m#"]6h 4-g5|RQ\+%4vkPVo2wWiHBѓy5x"9{oEu#YMG$ #<pv=lXKmEs\}*x{N
u&	ө	)Hld>fh]ަ[U4 Y)~%Ec̅%L3ևg|:=^:P9m?BԔI5i/e<%]sl$yAޢȧ,SDD^/EM}18Ab0٩}?nk4pc.Or<_[Ā-)STmؖ&YS|w*w]r4OihnB-MnBFs#<s@C[To?Ҷb`mk]ßk_(E>r{]G$QތIZ0=μURY00õG$ii`1$q9F6Ѵ\9p%blgB[~~}i|k :oہ"̄Ջq]ys7˟B-qdǇTڣ)aKHL.Y},ᓺ0Yd0m>MM
k"!1
"y=_1IWV?g
d<q6`I$2F Zku}fueR,{t9j?|9S89EptbO_
ߞΫ	-D O*Ԗ]@K5	Ǔ-t5Uq
I׿y{lZ+V0r=<;,]
0[cg.-y!:-;vj9(glE2>5J[>Ujqոq@3`g<vE6{AE5S6:4Vͧ%̰QޖN;F 7#^Y܍!,[f4+dzlOWLVXq:JgFPMH*ϥi枵?\6@⥔v1mFHK1Y)9&-FB~_܏Le]pow`ey;?95fO$2%+Y]G
ѹ6Jȳ8%q
4Yj+pc~~d{@8aY"`֖Ȳhm'h.XB]N/?Gۍ yp8+#M*
"S;:7EHзgx_0ՌS`x,S8j*)%?F8Fe2 n*jݢ(f̨p9B_d1`ܳ'	]}{8,=C},>!Whd։*A9*F)>.>~ƽeoҿԿOFvq& mi!pj#7B`;iXL~{
joĠ۪#ycg.lD^!M7C=kA/#E}ړuw\,v۠]nvي6NZnpupIt
QELct.)NG	
[A};qVʹ uH /00yk@>i:P`gkXyȶ Mt6s֜[`ij|8zz|tksi1g̨<Dܚx$}0doS]	$+ad\MgYzr2H|zX"V'dsQ)@0U[KRY=Mg
v] d>;c9'1 ܈x^r3"-JH;p⭳>GqKVy

Wg~qU9)
-_rQ|ku!MG4Rkk9`4I&8i-#` ^^@y쥑.uj|䝎(6\R/Ra{{$Iv gt\
SMЛDv GOGze5w37m|/
LeDaUgؐ_"?>yz>a?Wpu']4۠:)-F~.B 	zz=3\+z(J:rdg|<G;R.k}H*>#ַuwsXpWxNa̣O0D
.&v[\mwesV8O	>$l']!?//3f.׎tYeu!\:\\b
̗v?O<-MP@a㲋,YĬ Xg4Gs>3}=;վَD)I}=#)`hL.]:[o&kGZ2l?KŨUȈ3*zCE;Bq{j;BKW=s]ĝ6\#D&As[&y؅[CGtT
r{Ïtd?x?49ejȏk4w' 1.@d0M>3k =l`Tۡh{vCi2}<vř9e8S'6e
|,k2fdBMtxmMԌ:U/egoxkL$#4b@4/Wu/Ēxa*}W|	
IR5u[EuZP	$kWʫ hT?{{}ʵA!hS;<l.m씴aw֭tec-;I
mRHGB<lu	~Muk+;c̢rŢeN8s9fe >@t [0׆q2ћQ,֌>y}
|8lx;=Va,8%Mb
jRzҢ~h?UpXIJL>s,(ǏJzENryTE R	flmB.-ǘLvo3s%>>1C(Tݩq ,uȾ\1iZ\spbS0??_[̯g	d0
3Ԑ(Njsxt$Ӓ~j:1>UǉoT.'7PLR"]a3Lm{ZwFtF^ZOD#tZXqƖsu=WAB_H-Uxnʻ.KcL"/)p&0igZ3г4`.9EqT<pGͽ.*X0Hʧ`vb{oU. 5_0}O`V)[c:O+x$marz]/u<O^MܑO[T~`$)4@Agg:ͼc0vѤHH6*
'4aFvAw$3'SJ%'2w[tƐd=&0U)w< J?
Pfmy\(;voC׺ ~n<zlRɳSF&ɝtm
,ʖCjV3'V7/>{t{W(zh
伉kgIhMmf<a:+J|yoڂ"V0ЎA <Tznx[,Y}>qϛ(A`~)0Od<7~:%&C!Z2`<ϫVV6ǻ^ýp?]:|NMKM\ܕg)ղmGσ&-K_:IV	o{4%&_cRZI7NYת	۾Nݴ!=577m^?I&v8lV۳z$
y0ue$AFTO-x_;=߲ӽkҿ	cݿ$L=!nՔuP!<˸/pq}DPzcc%q#rطprOͷ)?^4k=٧Fde&:r8Vb>&ʫ~3}?(P\b'~$dYSX5#-gq	mI?@@?ğ)O5<G2ʊyD)
8R~u^gpo?L^s؛S9? >HǺt:	8o0RD7'+b;GT20>J߫%ċKo9]%b]Ysa쀃6 <=^Nc'/]AӾ_ I0g5Fmi؁yLA<
t=3 9T,ap~8 חBh7?QBD;aF<&ió%یHt)7Dﭷ}RnhNt!\|}/n#ke;fPؙ/-%Ԉx۫yQ<ݞ]jGkݣHAMFڋ^ߕ6
odGׄYa{`=A|-n\ľ+x/k<TAȻ-},CxnЄRtn/iw~SWtm'n;fPf0r{
dy ߵOсjL3r
!ow&0!՗7GYavmMIQ;N^QRTs0b_?zyvr'<_*O. Zʼ("tyr_ƽty<a%7eh
~tDBCUvU9%?ɡw5݊'tTtuP+_0jⷀ5uc.*IY*iI0)2n1{ЦVSoO_ 꽍84jMt<(0@ySeBfR);NFiknL(ମVCK%T=ɩ^9
zoL!2=!l3vDѐ߮A Tf	!onZnIC7k`yAN!O4H^!rlY@Jiù
`Q5٢6im;5qni]XIZP1b|/ǟAméc";eĉuWEtʢ+R,e٫#	yw+y-)2hX,Mm=;}u~vTT/AMimS
/f-/Cެ&I:8.241CJ~ϼc~>M[	;pQ'e;D+8[qRQi>yLUz#/X
@(7_!p:g$0 jGD$+woҌ~ᾟħNQ	D	iC0fQTp]_A(_T77_A} |RQ ]3 xn
:!77ldC~12cމ	rWC]qݒ?o|ޗE}@JESgFeNXx90(#K$$ME|A w1.0Ɵ㖫u:a"ts}JkF]WoCb^}=RpjH"@/^)/WySIe{x}${>.jQpGSpXyc(!gMh'5?::妝%+5H8MygwdO [UnF
%];u¹V!/үMzؠɝjv)8jzoS)rRݞ{$0+a鳜?t^)_=7Ζ0؛D+]:D#l"hGK!S@&gmON :3}C{5k%%5Zwiҟ&TzwG*سe	:L 7vFf;مkJ.3DJZy*斤!)XѨXѓ@qIWkp<2YѠK"HQ ET
qz	tؼr<w(0w;xK]0Ln,3lSx _gR/c(lK|HrW23
Go.(GF 0:oa}ҕ3eF]EJg`l<r+ewW-mA?9f1WRa*CF[dk1:]=rxw_oo>t9s<1?/k6&a['޾ַw j
v'`d9s	&sw[[{@navj>:] r]טפ٧eT_s|ǮtA{,>
=?bHl-^}~IYbxRlȥ';h).xǈCY~8)|}n7Ϻ9TF{Yn)4'%.ݫv781,{V<BT>~W){ W<0'
ݲ<E7i.c;O>k<9$`y.ܰT֑9wu4OIں~-9:6.fLJC]Zj,vd9]yu"hFG^0Bhx)3O\ö 7lMmwZ	nd½lE &L3>My鷇S^"=3|xJN˫q_[_rJHPwBo8
>#v9ԻLLL"O]OY
9~|Bz8ۜ1{n'W؁'}Kgf5֊l\ćtc/˵/(veݷw+Ŗmƚ~L|9S8cG큒`ϐUU22q
+1f!%n TAیgԇ4ZpWi<;&96N@DĤq/&ʻcY)v87@:7
bM=S
H#)q_N?}[{|_7f@-'O-|;Va^
 V#ƧIxsu~kD"!ݙLOO;F)T\T4_~8a^ޕ^LI3Vˮ|@"2QoOçU[f5?rehKC{$/J]}+][V5O脷hNsMmNy.49^`GcM6xĎxpAz;Փ#I窺-E<T) kxp7kjrP^u]S52pZٽO

	q;yOMscX~W/zض"1uylSw,O^ecZ9"O0n[	s8Z)[ QZ^yw0ѻ5Os@裪`؝6IĮx:W@|i]V8oĝ*.0n%՞al7UG8p-5"gyW*Cdo EE?Pɐ.coR]W@,	P`]Qo	0
&AtyB⬊s#uC.(pO-FǳI6:e>%[l00ōDX]%)<`oήIZOF-Ĉ/iW>q"&.|ْTYerӿȼy=cz(A{tK4ϊH0Ԋ^7~9#{4e%7ew-.Hz˥2/	E:_6xn&)#L۱Gfic%QerE<SbV"mV1huU>2rO=]CYƹjB"#0qAaF8Z7{"?2%lv蛜u9	!50smڶX6C¡̗/O[}ac>1	.Kj銂lKG{xGW%B(ABKC	0)5?cN捾 ÑRyly.٪w8ʦWU@$}1Dp.~&wJ!݃mkG}I"W=@dc.b?#G3l)mn|MV6}xxJ(rN4{hz~B ڹ?Z<	a1gKasw"A;!ϻOL_-h&7/wz.Ɉ$H7SD3ӿR۞:vn
y~!rd+:>:[̎b1'PYVz{ԊyzF83,p3*>%otL$-<IGj#]yԲ;)WVum!RT7Wx|yn&OE&h44X*çTwB,9دh."+bq&u7Сw.ټ+2\}1Ҿ5X<akvw\r="Yü؞kxP7ODXs#o+*Țl;~SfK_*t͋	 hۚv'M=Ysʶbk)r=[WLfnCً:U7WlyUDǓҽזow{#!뺋醙`H1[f}母>dr\dRʪ\D$
	#M@[Gp޾Gx:k+"5.*$@q<rY_Z- h-^]l+*v~zDAxks~:zJx[v/
We8I}1Bq+"@EDcnJۢᐳe末q$zrNƘ^/opJV^mCx6
	pg-
x6_!t
Bb?a9BF&󏞶:=mUF]8I3Kl6.i)O_d^v{k] rVOSAFBȒkݞw C2sdXv/v*#M{NR;'RSwld'G|j;4ʴZXG$o'4swE:J6`˴W	vnʗ;S~;T L2ho|dC8CZBevS,qVH'^J00}fh$J%].mƭ״̤\}5Oʌ_
5u;AT߂`4i!siO!e
~KUlz>859`+g:]Fqq2zظ揕xN矘fNS<]zۜg{V*v`V>諣m$tAA5mZ kWAT!]`pW
x)(H>C6'dds*&xi=C|БQiEќ4-'.¢)Y#TK3kɫ7L~0c:ȌgLw8,j&"M~t"so4B'rJ(PAG f	f9ЎsXQ9~Dg"ԸzL#Bw.@9AkǤNN2\,OƓ@UYj.qL=A#*	bg
XKO]51TX>늨J
hu*UFOA4}MD	:=#鞁'MRj0P?ܫkCXs,Ut_i̓[0{)?vmGI
*=iqڊgځٕW5^xn+xh9ee됵s7Ɖko	}eR릯Y&jU8Y6".Txq}_[W?q~_n17s/qW^!ہN+W/*
_{ ^Uf*v6
C<R}ڔ{>_>˷IϦpK*;sXw,Kt:@N?>ߋ˻o
GAubI%PwFrT{#)0
7i^WLK"y򴇠z0 &?طͯ"&BcFy?9Nt˶#]$HS&-$ 5924(EJXA<<^JG
zAٱPWT1IDӱB豞UƯRYtTiUi:#2'YS㥞}	%I_z>E q^ޥ))5y
2<1ŜS7"8HVKZqկ{ X^W}Ԫ[Yr}0.:fH5ًL#{.B6RPfvS~c;!9??d .G>8Ԑ7( TQjǜQ@UR<~g("
8OH$0f0uV3b=6*]e[i2)5+-;\1"1gk8gSgr $l!%"BJ.-
nC0^1OYLu呻鑙-A
2˔j0NLך1Sl艷"j7kcO(!4+7u,%PaNõϞCSr-X'3#!x6[߿͟,{}D@%;H71ŢC8ybn?Q2-aCyA'OUTH,:Ȟw]4>-M,g7-QyV"Aό2j$^R zl(,)6UO$Ec	~iXsNӽ( 22u:>1e{ô͞TurU!3r}qjms	 9/9ky=OQCKA͕_T>UrJj`mv6RH*.J :4_Ks]gp[n\ʺn+急H­a#RO}EQ=ӷ$+:va{ADЕ!g	-wzY-2#Уw9M.pvCS;yQ"$s8] |hH=O7_<^X
}C@"pp%Lb.zbZh79FhyT[ϥv0=D5w2`RUU?Yӿw3eC罘ŗb!27
*8Xӱn=F>taGO|o`+a?+ ,rJb!<dk
˅|In{GiBi3`@TB ?ߝ
*tA$=VFεf5R{`OAWJgu.φ`㫼w<yFBv	~>
Б[gmuAO,|W`M
z7~Q?m*b#|6wϠLZ4ލ+no/-aep?=s6y	vo3,+phCQvh+4ɫjW@ǙsHrt.aasﰇ6y/|?=v>aOȍ{!0s[+jGYe%pcB{ADRe_Dmn|Zt"S;Ħ{FIjF|v2G}!ibuv6AITfؠ"	|v^ss_i')3!|v׋E'U"Lue;tF-xPH7o:)R5u5_  /j#BQ};8nڷtEÀata'I^
Jrh0Vd}_kjMg ]r+&#Fg2gB֑YsO:BX~]xU!̸;ޑ_1斟c/31Q)`p""=mr@*8X2.L>YWЌJ=Qn3YI! N
tF79
)ט_݇D| 5OlvdͻncQx<|閈^mEKtF^af$NvY0ZC;\/?sr^lE?GD78
1|$&F4Tb4-zhLkPnFWﻡ{Ct0zS6'MEZfJHaSۓn}]R̅j;'ݟgj{2g'H(}f|\8D6Q?
9āk]&{x5rsJʉc;\Ah&"ܲ^hDvrTv՚bE>/)d>Df4G%\=M?sd(6Tw]/. ;/Yݿ(ciNoٌ{Bv'{	X'7^ȹҦEk
ܾ\#&}:Z(_.raI\uٹ&1kCO>ЏCϝf .J$ulTLpY@] sc-#`sG
"IaĽ ~~ߖ&'Vt39+nQ0m/-?e]L_kL-\ܘ%}3B~vsԳMC)@{Gʲpx#ߞB
Jf^?7xGFk화:y:O u72%5?[iyK&<fK"}M&y |.6Z	KkA-^UhQ@`Qvj:w;N5Ɪ=t	].HɚF+ZbPvAeL|eɠ2{-kb$ AMe{-	yJHI熃~7/5$h{vc+*Bx	p8$Q\$O1d!=Ɯ:,	l&6^$i S̓V#e{ܟr-?7×FQHteFK9\6]0IֳO_.x`BRc(n ō]Lr$I2˧z^a}jmeU>n`ў;>ہ4qPPqe&nلV6
xɗ
NrT8X?U,:~<v>DQeo'>3АԆjU[^uDy0b[nAsiit0~a3ng**"\w'%l08GڻD:JnshU$uχ{
f[éFn}>D^=F-ؗxUvr/&B2EpO/=<Zj	D=RiK|B@]}Cμb2Ofz.y<VR!6].a00{T f~"I	p~Q$4y55^$w<ųr)>fZfp>=|P?a l@@&ZFADa>p@eՈb~He5i̠6ޔrBTdyuT3W/8}HΔU_7Yȣ[^[FeϢ86Q*?oos8E7_n<_7l9#p	Xp^ڔS	TkoyCQN,eX1@
V+͠>'&)Zdw^sP`fǨtaġRHtϮE*yW'(H<kPk{F/MΛ{p[ZUpi
q	懘7	b|]mT&6b1p9YILz*	y9[[A:6xw(׎7'!.%S<}ۗo+a*$Z=~]e\N#U7$DȤm<\aPo:z	y<)^|jB$6hf6XY6ӷs2LQGox_,aEa!95|ۓ뫢0h=q@@3a4痢cQ.ϖLH,_F4|յYQnw %/mź߱OPyuQvk"u88qB0}f?xN4l^L;0 ;v@y輻.4J
t5*ݻn`DְܓTKpSt:*mqRY >Kx?2nj/En40}JosBOŉ.yO}Wx3Ίz~?\w7P^I~GZvklUQ|ف/:Q66)&v6%s&5tvWoEG	=C<\Tm*
RYH
@.؎AK5L3=$<׳6$}Si ű}/)_%`Ŭ<]!aZߔrqv|O?d^z}Ac08
FfPaN#K[ũ֬/Qj\}(xOp3.rLkB1@Ǥ!f]qgcd:9{b	ƬBv1p@@=L3#̶{y B}PrT]fLŞDcT1-=b_">A>?ϴw/
]#\b#[_EOb?Uokdّn!P3gYkQk0o̷dd%-9`!mfR2RKȬ<^ܚh4YB0؊[wC(!u
!zՉK!M?Q7ߺg4?pXAm~;бoxG1ysj,/ws-VzN'xQܳ;ߣ._$2/%Z="_5ݳ/QlVO'5IƵZyvy?rMvzu_G؋U渫a oUf<.
	jCQGfzJG$g\$Έ6;B	٢%ߏy_G,găs|Cye+3}Ue|V2/vy37{wũeQHگ<;E^xZ(f[o2&o*hhӀ]->Cr]Y sZk	
bkg;li}<	%YZv8{49,K=uwܷo_Nn^*ŚT:'T{2=}WKt;maXҩ	p|5oW'uɹ!l) H
&ye?+bZOӕ屛ofʯSQ$kR|}piQo^<=pB{dѪA4%7+wEMXn~'+hyD3E5^-f!k_TȸㆁƗč1a~Xc=
`aN<IˎB_0w}۹9wȢ2F3nk+\CRL=U@SSb)K	1LxhbxAlAʺJ$JVqu)0|zv{߄S7)#bz_r
թ$4ZR,`,oJ`wRzotX]5yZ^zVlˡ\0%8 /#0h[˅RἍvfVEr=A&s|"'dVfACxoma	5Sr?ZME<=y:;_g)l9|1}[q)zr/i,$>SKK;n^~@w=\(4= p:ݰKp%u+|B8DNQ**=_u@{0&ս`p ,mN$#t»j&7~Vy; V)݄UML	\:_W	oP<ۗ#/>UO'IGaR=¾!Dv(+E˂I7f7݃;=r8>$s	X^"z`e+$eSMnꖔC<!dR U8B3L;?_Ĭ6Bg0n;HLk\"b;/2SSo>fnP9qֱzCdvCnұG44oL}_˗Fo[b5_v#IڕV%ݷO]Pe3J]c(̋!|4L>>qQ)_OMsM
WE59!z{hn
|.9~U+<`̾8?{z̡bړNu(y.- o"Z槻gs=No^
Um$Wݐ`fGzWGgzɲtLwD.rHrc1=wFW}vz-f<:=*i~ ^F&s/öONF&w┶`}  U?*}5[yF+NG".%&+¦1<F	Iy1ܚvP"aï7У(M37ksc
@QNMp
e(g`2^'<E#cn)=<BgQbG*ϾV
8?GxK_'	i>oy<BTE#Y2IP,r#UfNoOOHO7
	C>7
%ND]`&79
ĢӲZʣ
}h=
fdM
4_:AQA(-)X>_.+#{7{cuppu
qʙiP L|y<f '(!!,\zϧ1u̳կj_?зͼikG:L&g} XB:@B@`687_j(Bjxk6Zlsy^f{5%qTY/$4a	I3jo=o\j:\v$Cg<xN7+[ି^laM÷vnZ.tᒽ{)$j!lMP!`GmO%Ԟv6KF0!sU_M-^%L_oq*^̊Tג_s7)w
Չ94v2)fjlqKG_{8xx])2!JE6|׵<)Du{.<F{,p$sFJ-<dAk{ZHv5^߉iSN/jaF
|f~l K)<ix_vvMZ81%w=a@`O
_`8rNVgw O+kD0K|]TT+ɡ1KD|h749}):8G\\(ƚ]NɹIp׏Σy:OSVf6ޥSG; &(S
k$0f!/?o0y5E6YڂyfZ"ۍMl3Cf,2}w*u^=.ՄN1WCAZ\v?jg_+: EUfXX94WK+ҳgآ<I?Еߝ{,Q=PQ:coq3Ttx ԟ=,U6Dr9]ïI/8
V[Az(/
Ӡ-GrA[⪞LvJx7tMx4Dw 6<8w4ZGLAJUhY)BfwHۻڄXH)M&8;FWIƼ쓀PQ}_E
[a^PV>6F pֿ^>i?^,&A~"&{ck(Dr>DbQ?^[UZ5&fܕiɡA~H2vX a&qԂ}C'/dC6Ǽ$0.ю8+x=vFUyYVc8v ^>S$L!5^sGi["MBqz<<O;;i|Ndfm-rٜmR+v ik@NF#b-ld}) Ih=z2-Q>1q@C&Uq-GYŁ4cm"!aYJ7jE@[cޘ$aArk$cj%F$BG~+:@q_^?ǯ{8$>Y7U
GNLu+bi0?	b0Q1S5JИ-8{%taw@
kL\|Lt{3T*z	Q*"*=7U"Fe&~<	%?a99iY`YViՠAFM|i*,~nYU*JIyw@bקؔ9O/g|7E/\OќYN@ғKBSW*5ZNÎqOa"R*^
TҘݙ0tEI%|p˭)a3
}-ڹ0ш+pUIԑj
S.?
ndaCDT%,osVc
ۿ>N/;LpX5d.l@Hՙ$9i­j?$|Pš~Nx
oOIQ"@L[j
Om$y#;IxbY';*\y.KDyzO0ђ]Fkڸ$m*4qf$Ͳ6_Я>O_zk2{8+WjtQj;ſՑPs_\zXusX42){x@X==|Lt5^Uy}d&=hJq]eMJ	req3ˋ$W|vn҇u6NNO ߳P>%]$}7W7
]ẃ3NJt2¨waZZEY"	O!6-ul
e@g{'w!z7qsײn?\7^b~?Ui;1z_1pέ{jArķwmŽ^`,|ǧH44?:>16xN\gQ_lf<yt۩I2敶ܽPasR;}bLhR."*
r
qE/h?yMPInoovCӎřX"sT9ϲ`K{/?=0%c{:2yD
%y4jCF TI+'	ؿJLR$PKb70"|ذ蒈VyOS<c.1woAϨ8Ј8xbMդj_|ph
D`T$I:Nt`q%>=?ܟ! )=ct/ɲXx`=#l8yXB]}Ed]]5bEĵ:w|9I0(]{|@z;1Gv]9ͧe9o(-L^{QЬ_
0c0<o4Ȯj3p/cds1RZW)eq`j"/ke_oaX	:o^umؗT\.
<s%iG
ٴ!ӼF3ַo0@یȟxI&5%
6ɹttN0yq5s)hmI0![3قdGbwT=<IG-(ޢCp% ^ŶJzTK }~ǮX{)Q
8cP,z:U|l(@e>svk(397X_||a\݋i670:::'B
'JlgvJQ(SN<"/-,r˩#0N; ͟o2oo}LL^`svkz ehCυņbBG?OG|HҘYqώo3?1t0>('H[*:NTRƢ#5Kc7eC~њ֓;pcN&qlS샆|l]L& Oc:`8)l3뚒>Xt1~ w@'n[,SCyw*SNAKv>_8 _ʟ!gC(_նE?v;|`LsEbVCW(i^~[)A!s)RlN9n^YUkQ"k26lUilX8as\-b8l0A>hӏ/TۖBcgnHᙁ4
cBGPM+=B{	jT!.+^ʋRQzZOMfwS
۵fG}6dhu[3& |y篵kJ6IpQ2l1K'NHe׫d+J's~d1!?R}no|;)dNBP1#yI@t4_r|?ĬGBɿ o[TQ44 K-.Wܢ[	 ~Y_vj~WAQGIt}-JՔl%	n:I0^Mx~wKr`$g f$9]$[ݴѱ~>F>D+!`X/ˆ5vE<pFݨ3%xws3%	+`|rĊ1"cAKER{J-BO;wr4yrCk`
m]6=,xxVPOm}B?rOr~xNikʇI}\Bj_7|5<DGmXAHȃ.*|$̨peX[&sYӔGD&;p,殑ƮI#z[BFU=c-poOtށ.n,'f
=h!u}V<gsӧ7?.ʏUZ`//i{(Z:@xj !	WO㸟!EIȖbydRe-9׎?sbLk쩺(A_G
]X]Ky\(Tu4gx<
=	wQnn8_KZ@"_ գ;sݠݧ>Fb#+	sGh6j0/#Yw\PHB跟0o?y/v"4v6szslހJdŎ| Xݫ؝9Dƭ	v`ĕC6[Iě/k{{UlM6Zu,2]KoX
zy
~
]?#8V-9X [i6z$/_K,ޤ_!4`_J1K"0b2"%-ʿF.Jt~zktlՔ^>UYX
~ QHb'Tch8<E;/9ĎDîcXJiM`[EŁ#xiS),-2@TXˎỏ5IdO <Vc~ȀsaxΔ@㲁HOXӟŶ㕅ؾHv8M`/*wc?/h A;ݽ#ڟº#f9,gŘ珴TOwi7p>Hoam#|Ev.ܮEǴ{ /ٛ's=9@X\
)ׁOb)A]e++FG"N{hҗҫ_ߟX[^;S϶*H`.B:ba8UegÀOM}nY9^k0
/m[[([nYsC%L
o47{T'np%Uw_ />!gS^xSU?/JU)u5\q+jkq|hǌkFqynWnz磍{Eq8RFi1~3(Y{VH}P01ѓy~$_$j*]Ȱg5C~Ys=7ۊhg'4ze#\lvlhFҗt^nP}A*87 هni/]D\<gv=Γqd]-z۲zZ!i?Ό
ݡ3`b<ĭ$69_c)т<`*6&qg
utn Ee2ts{`DA
>ȹmDi۲fh2cڴlbA2{mԉ]Q|!7Lg9ȊKW۔E}}	+U7>օE`'ghp0m>z
b}>}:g.f[ѡͱ
R)SSG!.ikM:IC
͈}EMMM=y3y
KyW@\ӇZKh8Aκ.X.$FWzp9HhFP}xO8Z':EU:)0QAl`@=q8a{+&kOwm6vI9n^ي$7FU5u[s{`Y/~Oު?ӭívc J?UVˮǽu 4kXHDT88 tJV*g[)⌥	ǶYM^}aY>ƹM2穻-%[$G&_JښzRU)<!xqm+SF3	ɊNpdbVt? 
W0|[IM	(¯UTѸ0`;;_JF`Ũ.2G?*n|` hr;z/Ք.s׋A͘*Vw7~npPBU7N=^_$UwbhEhF\^EմkloŲ$G:ȿ&qTkئflQ*N%։ϵ`:DFG[z{ьwΌ2IJbTtK{Y mTd&za}l.GEO]BO<L1SW`5˨W@>Lp MdvM1\5M-حwIq	R3Bq^?/ct`iGKY6]vX~1P 24,xvcv
!_#:rwWy#
xW珕mX-*h:КJ^AqFEE8M/_hFo9b}RבF1w}/MHxgitW̼U}=\3(%嶹9uJ 葈 3o߫~w2p}+:蹣0R`PK$+G%*(c_uQ
)R"p9ZMwhlW	*	wFQ2X3lꏳ^~o
xz}XL#B(Dz;Yc}NC  M8/L}/ZLV?޻;S/)!dp-e=->I!ttx23!D[ǜ$꺻P sR]?6vx=$,2&w|̶`kh}.!;}嗩=>Wc!(6sj$By]:sVjrB$y
!?fO@$ꓭѸ`l[ IDTX$͓(\Wϟ7	
.v
aHjg7TIsLGޟXr|/`Gvvq<l[^ap0[i<
]{biIN:0y0qJX%A N.USRhsi6f1@	nT)Ag<e	SLTo]H3_1WeJ2Ӛj{G
}=>;Dpm=/_G*qLN'c♢6#0gwۋ6+w׎-taEGC34
w"œjU6k	2cvM#}&,-je
"usw3@t,*rLCl첳;NC|&l2S2
:vl+Be{{~bk=!.3,<Y^w3D2c'ڃaS}Lh֨{6g;G	 %2(jy/9)>Zg/'lE:D-֘5Jn϶;ȶN54wht͐𯲥)uA@!):Boy:GҰAji.ʽ!v^>	\mݻw0C2p a
ÞxKj	4k3n(NuAn;i-e\V
A=F$ܼ|Yٖhpmr#pʓzq3	xߝ5 A
8kѕ`AWŉp`=\	sȣ3KOcOq;qlŞEq<<TUQY[*q"=nWQoYb5u 
<0Xrt苬CېP'?q,=oR3Ҍ-OEke.8y.[|]E(?xV65L ;q`;
eСvy
DS'yI/SeMhNmz(:$o{xj?~@C
6$j˿Oz1K~m96huKEcNѧ*_.*d?i{Od)J%9q+N䅰aB8_Þ/+
Eߙoxߎj*V,[$@=m6ŕ~m՟$?HZ!5/\	aIdoyH󋥢Aÿ( "Y7	[L!M0ቨ¶(W7A~ɟoQwOj|Fasf2]& 
)";9V|h!2<÷<Op)av+CjDl1E[whNG84S[N':aXQ}qA1b6֧9o$߶ŝ/L(d[ mՂt]/'\2Bjuӗ,Lz>0SCV\h3Y<c#=wg-#(`G
g[x6T['J2;AVr]+Xw}Ǚܤ^ /2)AHms>YpBf>_9esg: os`5Z>M7KT`޵@GkkWIP<Cr;&4Ǐ=DzTHw=5\#=A* (e?6V>Ѷouå[Ao<8,ς84F	^ӧI-hS_1wa*$j"[MA y46{HMe%>"nDS%|[^)ǹEo*X6݆%'U96aCpx	L]Ol_dߊK)X͝"8.ā8k[EznڂхAX}Ē	uD}H$˳X]la&l
ׯ׺C	N4{a#Ayns`2%W5"OA؜(3!$\%rL m
#Ec`!ǭ_m~=l_vX*Qj*>
\4?iOڼ&Ifجؑ|:hQ;ӎ[l(~awS?8M>TZ}J_ȡPf$HsO_d髕[4z-i]ϛ>6pzIS
_E:~U#{|Oʟ׹=P"3N&xfkǶ,r<ICmL)*0t:!Mu&

Lba.%rir_aX<%}pTtK=;b1U"*|)׬%|lֱ5~
<üLS0\-GbUxE8@uYjmgeThO.4VA];NFɠ<LSҖ>]_|VYrz6Bt0(%km(I2W)AgPj|B
;&rnG{F|j2NYă>G&Zy' Ev
;5-aSztưڦχ^*?=	ktO(X %mhme9\W/w̿6-NelZ<vb77j
صT]BR?L= V:Kex*EaW%ݣzSC;+g[GRKm:3ێJC;"khn-ʰ7D7n{_IyGπAN@8LvӦڣq6Bu6+HrAqcP^qpgb	ء	@CC0
eE*,&'u8er-u̙}SH
i]nYl(eI"	ռZ:uf`
~xѪeL4o_zXw۽1u!`r7n=!铅#׾˔I* "RNenw7Y s"d+q`#V6Oo-x]`3ge:n'ps;GQ'xbG;ۭu;
w;<phe/ۋ'Tӡ?L./?*E_6~@;FK.Ҍ^>_]d$;;j)v*V  6[y
cTF\:OMw T@eݡ|%nS0/eCTx^R\	?Hѿj,Ї7Ps<USL>8o(뾤%!nw\l&Yĺ'uJ1!` }2 dnrF orlb:Zi 	{U[WlǱPC8D
IMOvnNQPu8P.4(#Ђ".7lj/lD ^HL}F^@ Ld*⵿B$ځ6!ǷDѿy<"h
Dx=.4(p`ݲ02Ukz)˜wϰ(GrưRwb#IFOP6)}il9Rck{`іGSM쮄d:LlFzKӳO?zugOw~´E&RWLo:1՗1V?4@n!Rxz7Hs"zqZJ!FN'ދy䅢6v*m/X[1u_Cx9O+'ghDy}6U<·9ȵ4	V|HfX-"R{Q^.#Me&;ˉ[
P~1EWy`gO7q8I_yRqN6/d̌[qm-_uAyMއ^l}^]o~2&!qz
&?_ph Ƴ䱾 G8`Q;-
[P<*'_1*g?ae)E]\HĠ@TUߔ*=af5x]"3&:inj5rg%$r"~"6-06ؾ*Y:k) we}즷Q^~H%5DQ^EJ3ŢI@65Oޒ޼ޗz( .w:1;%>_o6'QY`V5*ur ORmc|W7VGSeo5uG:d:/T&S>TWT&қ%#ChURgĜo;;:';H9;Tg֑u4a`9r7ߞ*>zS~"m_x/2zKYr&.p1Kۢ	Zͧ3oc#:d
 +1!Tp`I7IM`wADfp藱lv"to1Ȯ0>7+׵W1hWp󽸥ܓ`zal ¹|U9|Cm	u\V;r!97-;=1MSN۬į"G[GbojX`/Wv7 wğwsǘ[>#.:궂6,}.@Gyu~#XlƔh܎)tOԤ"!>X(\>pnnK=KfNtԹ8Xn?l+`u,E΢瓾o
xY!&2>Һ8eo~c;n({\fz4U¢op<1UZՓJgR^|8KQ'Nv:)'<.Pv:ֽaNda"g^RO!oVݘ:^*V |}s|wD;}3Ⓤtb
vpY53ȝv
|QWM8wwÁǏMKv<mLHpo1d_]6ƛo1V4]x4C}#v;C'vs"3Y 6V.Ȟrrul1~/lM;t
qkI
"O8@ _B;ɕjL'G t?=|	7wxPG;eq@9(Glf(	rC(mz(~d#-īi BCޣlM.>h(i/㻧}F_G"n؊v	cs>1l\V@A!OmeVF>m R@}3yCM?caLݡ
7Ї1o=%ʌ ʥnے?QaNtS5*-`FC2x*mPXi?cO݆p rMh-YoN﹥N3K?1F6#pG#HH\1hI2Ws~CfbGqٞfs1J+H$9)-.ﷂ#8~&q$ݧiG,'vVvY]K:{jjlxUgmK|E?0jw!7}HꜸ(҂
|A(U(qRCwLG`Xgn/1"abu,qD2K=_pI>1[ԯa^ý, ĝީؔrNqkA
pw,rFoZ*mvw}J-PH6CJ&_#Ϸg
u2C׃e`sY&w޽"F;4c:iS<(ӗZRϐÊA|]'NUׯAɌ_?M ROn`s\="R:U(ְ6+T{θ|ҫOAzDҕ^3]C`|_|4PLIjn[;vL
TBB'+:$\L1}I@Mc0µ) HrV\z?`wG^<O9TzĐd.)ɬU(\JB[ /41L/^o=<Zȼ*m.z}]av
O^X>cvaɈ>[CވPwfIG~t+u=w{,OKkO5d&q$ܸM<]/FDr+8
P*G]Ǌלc闓p}q,L繵L:'<\Vo'
Ǐe~)*m>ezHiq0՝~Kz{|e˾se|V<CefWC
{
>Y?4%o_ar<BD#Jxkun7JÊ] Vb|gƚeVhjwpt~i⬋]z@*喳}<#
0sFRJ7xqwɲ<7tBpYs>czWܜV'=m(lP~8}i
/MQd*Y
FYܜ=^]>&>ɧ
7ã0@%PnX]OqYAe=:(XU?)ojx̶p՗Qm=mFW{T3z̗
V_Z4P3o\kDm^	 pˠ`qmp4o8fd$gX'45u~Е!}Cd۲_ʒyk׫z:kqu:pm+Eԩr<U'ㅸ@
PAV=XWWcwq|}ҏV?H?9U`a!!n"!AW"ObCU[rqeSێ psZ/>GrXx[`ԔqGﶎa1(v[W*p5n9rDI]p*>ï<|'qy!=af?nj{=%%"uxWEZr ynapᏯ^́:qkhs
m|D͒.5#[ootyO{w
/A՘oI842Xm8fO#7ӊx=Z382^`#ع &id`jxB_`e
]$eqgJY X95ŔjKV_ XkSh[ Cbw7˒
~2xu
іVL6<|N^Gy='b,HQq]6uؖzr$/gHLHU/G+}Ҁ]
#D9 gmŵVE!j(.{1	~=A}`Oc[x~5;**f2EXMV`Kp$=cf׮P1X"/e>t@%~Are ޲ٓۿ>Q]y7Ȧ˞Qъ؟²"5h9J^m"=XQS{TGeFj7Wyn+7I|ߚII7fN8Pû:/vq, ~0#(_oO#i>^d.;w¼<pӸp!2u8[kda	\Wʘ%-rji0JW͂_
B/LCM<;N})l=TMpVw~ p ̓P]
2tᦖČZ[.vWv=gEN@xշiKN6(݌	x!l_j]k RzޛRU4Ϡle{Kx<
y7=,T0~Wex1gv7ؕ2T$n9
ϴx%=׹a=ztUv.(Thٓ$!P̟i4sR+nW躲Y:o>j	HJHwWtSۣ2^=!jqSvt t  YҭVhF^/03Op*U^a fi@\6nM%S]_t5iYo讆g[D85<8̼:%8t3u[no}
#)i.|C9XyfI$㑛U`CrAϱг+VV/P|,<<nb38)Hh*ǨO~"/ֽ}H+F))Z2fe8n/.gǥߑ+I?\f@Ѽb)W27
=$yTX@P2+ML~Y/I;R53_DOKyǆ>S_%ԅUvoV*Bہ9>q'ޑ44R1
Wz{޲'=LiԸ[=DD""q25 7;䧒:Z8o>LZ*>BUO2>yIUzZ+M[j7pP̹a[u4Z;N]~Ƨ-̢?
MUuoHܓO:w$Np㩑:A~~E9.^od.A

x盉YRA˻#Dge[KeW54f*KtN{],HgstιVI]qAS^t8&2~̸Ԩ]aSKw69D$9SBnQapC.ů\b㑏 %r1Q0ˢ}r;WM09lu񊌪, HT|dX#)烾TP={[:˹C*sk!݊2D^fv}Np(x5	;*'R+JWp~Gqtw0xMخTrЀE$C5hOuJ_òۣaG{xy`l%z /	؟L}]Vykdֵ_3[D!@tC	LqEgӐx??!x%kp	An!Lm7*]/_e5{iki<$y(ofm6Mܧ/Krݮ],uĥc1"M6tkZO3)`Lg|ζaR-\9`şw̿hR|R思)x[Ψ\,2Z0<}^w#ۣdzNg~dqrj$m	g#X{H=â^]dOo;
 FD@y3i̱9|J/~$a9G<IK}]2GIg 6'h˖بV
DoEYJY},}XωSEe퉳N*8:bcl-qO~x;DRs]e^utc0$Sn_JEe&-uPV
݈'9[CDEigئ&<'h[tm"|g`3p+3Y_msaeC{򎑪(u+b2snTX茉IUvHxfd}ȱ  *5o%/oeD"R/p+*W˒&"U
ПZ'xL1-y+˧VߘcҘDxې5:ЂcFGB,܁
=Z<@|a1B<LQ
e{[d%qs oY&8X;V]H:b)
vL5W]vMV;@wYJIArNs  t-E[[V>9	H;{]}$85">_~B' V_CT
dr).?Fr1Ix&?
 av[0FPn9d	16Tk4Q-"!dޟJx<V𣃪I\3q	(<um3V6UnQ/v[D"͂4AϜ 戗9QTy n.'H^%xU8
Rmwizq]
]\o.y,>|r{:WnOaw3׍
.
*z~z5oʓνuyA+D "1)d웛	~rp?W|-4$.)U .s}f3/u+}_dψayX.=ڭ_FL ,c9z_zZ,?"In2~k?>¤-=-s_>[Z"0?JJm_7N?^w> 2ND;̭[ 6a78wħBxV)6s3/: RrR	-*061@%;zcUTl@S뚕G3 #
	b
T'RQn⼻B $I\Яs~W:I+m<aG
;ã!,Ѷ19}
96U|nPtjW ΧjBr:K@82J<Z|^˲[ ߎODϹ`-ҰZKp/M=SYNt_qhro<QVZ$_Nz+Ū{jevbfQV$z3wÇtskx=[tN]yC!_	*CItOoWwcA?cH1Q{pVy%jR)'V1~2w A=Ak{S_w	%^ |{Tco=%6N}\vhħn|Crio8W0AFs'-G*XE׬gި;5v&.ʠ#Gu'881DOm!%^٥=MbT=m5GEX]wiVCiFI/&;Σ{xʶ+atQRHe6aXGV^O:v!DF񸝺6)zy^E-7+	ǪwUbP-p,p1"A,VzBKaTn	op׈j`q<S~9ao#C,(%Po)g	؍'EYJI7y^{_3]T4K}l;PiT=vW	)`O,MݹГ!Gv߂MQkC+}@P%Cf#k$Ҝ&/ޭ	JqOaɍ@RA:Fͷ臧"i{kCZ˹+DI27
δoY@֦d'r	@BPC_/3Of2y܍ڻ=RyfX* UFk~O_7;-;͘˱G4PnmivOX( {ҀPpiep\td)GPx'P`dMרc4ekH,J%3!ҙ._>|a>5i!ͪ1R*+B-Cjj!
yKx Q(=x5<s/96yp94\m랱*nܤs	 ĸ&stV!qkƿSHavpgF뺈n!'i_tO7S'ßtvgx{#R\=鬴mڽ_7a͛/ݩ'
z;ķQPKϛt=~7zC{p=7&i29
Ekc[E/SGtB~pƫnG?m"z*4j2ILY\-e Rc<쟮lqv)kk՞rbYu2Fqіt'觨oA~x>tf3hXuZRUMH} dyl0_J.KlL[I65ujBR>0!;w ;B~&^?=-4?~:]:@{*!kkj`Zcy/N\OeAN@.V+c¨AK΂ǞC\̭h g3Wz:<ilitnm9mD۝lH1͸{6ashRVu680uI1Bk^[jfpf7
7oGV^,JvY=/
-W.h>6?zy6dZ'/@/s/HͣT_1T#@VCGDG5+௰Dpum8縙 nPCK3;k2=_ 0'8S_VOypent}!fdKC(:8bq'\*>ĳyǫW `f/.k8rRJi+x֞ߛubmVY?J%55s"|@mCAn}MLÇm*a3'lFB"缫_ս[W#\SpTUp
Rc?)N|J/TD;n~҆ݝ:QF˭nVNu:Ԏx]<M~<7Ǹ{\Aa+N׭,ې{6!<|8ϽTv?aWqtQ5(ŪqpČ]}}ed$x^0+!N3g;йqT3l;ij!ja#)쉜ZoA}},2j|ԑܤ^
u R}Y8sXd%[y C֟k-qf
ЍI\]I 66=iUò@-tNn	¤S4 h־o3"ۃ|^'>dK="KBgt9r/:^iV$rݚv_ԮoM[b=IpIYlHY&1 &ʂyC۝rI03okP7r4+
Xh)
dfꄆ n|*h
;$4bo#4x;_.2ڲ[չs2zȇ0hCkV؁"&[uq
"mLRTdW}o

Y8PA(	M (Z,IRJ~a}'x`DaoJmiC(UPew[>\{U
g9AEG ׺vg{>>@:k0B}V#n>ooCR{*=qd=4k@"vrXAu!{)wo6u<%<z3
L|UjOelfw;&C6LXCq<<Eթ4#N<COeȅȔyosfvx'}d5򰸇D['X%kC΋U'H`5Ye8?,&cmQ\PAkC1B-II+;Jn']*OL݊=?-~kPQdl8lxN j~.thM)[@{LpḲv,dOϻ$)ѕ֒}`m(ژm]Q!G-uizuΈ8ӣC)}
T^[uR='
CnVZqZz ̇R]NU
lgc'ȒxG^Sq(+bS7<5k{ia]x\9#!ϛYhALN[ ӦchB׎xnf\"mQk(e>o[G+N<xp#KSF_KXkO/EHQ8."o݉{BtaKCj<.cΉ" ~=MN%-Ǐ[G**n;7&mUjt._sqpt'frOWFG*jefLNq2m;8n
B,-24?GhU{9NR7 }l+^${q0xW2νz=$*ngeBJF8?'ǟk蹰岽		꺅*CC;Yi.^UDw?5Ez#e[<o@i(nɝˑ2G?y6¾5|2!xl\2%%k԰%$v\cЏ$TK&p:7mj]zc&U,M=vӿ~X/z
.:7F	æl
H(}X̀oS~1Z!Fs毛Hȴsw/y3ڙ]iy$9
шP-w7i՘y+~&	 Z'%E4?zN|сpnmFOgiHF"Ф"dW~K=r۵JxxxI2NM*ar?h}-DŊh'okӡTHQ*pfG_z^Ǖ"V;C>\GGз2y}RKR
@
7|y|Nx_xo쒄
?.~ەօ[DO`${5t[-:3) NtQrO<%\o8dSsǡ_tØ: ̘KxFVDͫlےem&	Z(2		c$u3DIdR{%dǜTC}
C'걀@3(r'AᴗTi2vu }=Ajg[#	THkx`ZD2(>WA!Q.0RMߒjj}'{ C/2qtz_oS$zoP}
rJTshgQ:X6슖Z[)B
+7O	-쪹6Ë&Y V 2<y[=K? ƛnzC	.ΰs{<[ U,|:K)dcp\|kxTeO+Kj}MlRg6O`i@Uuʭk<	:mfrJZ n㧠UҒc߿}KK8`eļ\i/ϻs%yH
eFԳry
MoCZkOod,BVg['ZկmI_}rj`˱v8,{_W1.V
aw`ɝ!ibG>U~ƶfp/ NL{W7J2稶}gނI|W&S
ġ[YRnEJŸ<}6	x?(ۏPUՇ[|8eyR2

k$4TyK4\b[o'FS>ym)"hf_iW(U"G:PߏqEL8{4mI;:,ZU
EBM^5˦|[M*Yx'a @KUOj7iY|e祦aI&Ѱo-k<uks>X58BT40ժXVlAŨǪ%
^KUgeܓzHqfr93z=DmQE%WU]Ѵ'L}հr7b#5kqcVR1j[$FKP>c
(Ymk3 PNnGMq[.6X.Y˾|=mYKkIO3ya4Ve=F
ƕ1D(Fa_<K>)r?!w5`Cϫj@slb ulIx?
PX~	?.H7*nd
n8g/ wx⸆i&ʟ"%*[!,3wCr@)h6dPHX9uz
KOsNWd2yb^Hb \)o/gVSAZ'Dn{n6}ז-e
کN(7|{+<<L?,eI#[
8N^KW۳,,&nF;C;tC)Iz:2?+˴e13g6p\dB^s
Bii{U|Aod>d$Z7N	WPt"6'%9R)
:nt*GmMM2V
ЂifՏW?$r
Vle[ʟ2ןj#u{}Q5wSpWGmlٞFD<]qa	v8H'A@&y5^;NXp uI2C!*V결wF .htjBh{s(Rڠk^|-/da?(=eN۷lD)EN4m<
G'Qb2wڋ((W	;z;L;PS;۝O\7 kֿ_AbR(!p'=J
P(
JeZkH'Tފ䱿TsEu3^ŷW8WW X¿DxQsB|e1^C#G4myy}e;6*S:l4Hqd?ӽrkCţYe#C+hw'vHeO[.͊>H?IS>F_-U
	Wm܃5r'4%Tz5-@elU+NbmFSǯueɿEvVBI˴IyBEOM>s99Agro_}a6E9Ѹ	$]K)`F3TqE?A m},sa4X6iǀZ	b ES[h 
s2 @Sռʈ R#pV͆v}v떟.S,7MkxCʌWN,WP__0aΚթM[m9voVJ7dnAbez^[X>=Sl_[m	Ҽs9c2A>
9W:]	lč)'u?[P=`:n9ioW2~}H]]moI/w{Vub:{c[[BE*=o'O߽CnzZ ě
],fY<csCNjƩڻJMumCU-qTU6>dԢRK[9S`G#
h PuJ1|}[/}/{
DK%=THce<)\rl؃ZCK#-)8gFiDDg1v#RpJaOÖ	'qϻ%rW[v6LEҏܓ-GeO9jL6᷷Dpl~:
={42i!W0"0
'nF{EH?n-#3P֯n4K5lpנňi>DC#p♞:߃0(fWz'QMn9REC#mGL6efsď23WF:x+1g:7S
|5X)Dd{ߥA;_C
0(:y{JW<3՚-[6f/nK㗓AK[cG@ݏ9~[sWQp-~Cũ5nu"K,-;UI`USW؎ 'Ѣ#vAņh~zr?bA=:&=t׋]qcR=Yh([=6?[5C8DqQ5w5վiQMq5|ln۾忌<tiomF^QAm%݅G"y54QsvL]Ѹ
%]dI6_ygXѧ*XB#m.X﬇wjV̶_S8 }Fv@s'$}-x`#?jDO ZR;.-UcB`U^NdRCXNc4;Ҳ=isk)Ojd|?
Q
:<-q!O'Vxd;cmJϏi#Ks	ɹ[\y8v.K'ִ=B	lx!Z̯pa(9}O¸tQXv\WG"mNXߟ.5C_(Ys[_%1Y')m{zᝐHL&<م.(};
;<VY6D];Z99I9 }lج2M~9L?[ X1D>
,CTU1ӀGDV}mo
)x+k`&舎nqb0۞@i`v+/YFWy"멵IWh]6v5Գr.Zt~aYFԑ0&'*e0F-	iG얏%ߖS1'g*#G܄1
{DYVNO݊1{#43׉zXc}|o(~|F7.9KH[jUs-$7Hg1NާĮot	4ڨ#j3uVTɮBZo[yY	 ƱաP6)(螓cIjs{g8(fA:rqr%NJYK_5n/ixks,ۍ%œnMuLAU$ROISWߧwo9:'{Yem~0Xi4wy؞^fmr7;25ƗG#}¶":d6PIjV9ﭧ<2bçf>$ࠗ<h$};ّCz-I[rչ=5j{K'#olNWr!cbHKHz,&x/mνZ{OGd"ݥ:|XwMƝqMPv6AXKOZQtEJa\T-~{ C|~:坆{ySoэRwaOHTF\+#Wa֟3IIܼF,OODYV$4pBvo
_p=F[2<`Wi	*UL⢝Ɓ'
jf=`|w/=dA469$ǝ:Lgԍn7\.)C߻;
ӌvhf)Z
YN! x(0;/swLrRʗINp0<wݭBuǥDD!bƦ)0޵cVeɢ
Á3SBo^,ʱ>JcȼeY	_$Vj1(;lx dⅭEF]j5RPV[m"|A9\o)+(?&5mS@Y&91 ^dT('I'˨_ۓ>Fn̿0/m`Cjn{׹m=m^zPzCߨo/ם b}$eVWp4ekBI*:!G/sMG#8-"(by@S::V~7:]caB"CteQd|C7J;\U5#*ߌO݃'cV?IN8P YbN<kZrA~Q݋<_wڻ7Y?E=0TKVg 0b`UIK}iW|I<;vo:CtމH7(Ҿ!R{jh%\ڇMd)}Bƽ~b_
φ,G>bWgxw~amaϱ7_[0y綾a.wt<rkn !Q9Fiǈ,3ʌ/y)*Q'HMM$w@S'%[Ә ]	b*,*n&ZXEkoO%6Oȋ^ܘ9ٗYzlF\[P}N0&Fn'>ve+,~ھqt/7VntWiS*GS[}lHt6K>6rʉqaaLhI}kr?;}866ZRM~nJ}Nñ}*+wl=&^N.;}m	ϛo\a
s XMхBc_ޕݲ^#p4hG@vuYu5T$H 
HR9%#jV$u\|\@]1tuILfdv|t|!ttp5hz@'^R<T9j쌝`oYƊK}KZG n~nI{o"]2oJo},!QQMeȀQP"!mv4gkJC6tνbz2$+o=xhSé!dY,=EZsBX/vJ:+GSdh""
N=K/`Rۉ&OV SM׶Cw.Urt.!o7D;˺η#HP5W8դs?h!~=Hɒ#h	D6ݝ~;b>EM6C6in
E
Quߤ:y]f6S;ٵf
c7߽>>%r=6dx(dr9ٍ{D^:l6]\fls
V*r4lS]@TF=`T_g3Qeec& FR418n O##ug3>udZ췡~nck\0FX)or[pW8<t='^ 
sy32Jz^qiAC?_7Sr@ Zn}nua9mwgT<J"Q0@bRQˑ^|+S㙂(D,=	;Q>M0һ%Bk]\jŏn0aa MfuC`Z~K˾ՐxkȒBr\K
99niޣ?2'(\S̼ϙ;n;W{NYhg# :
Bćfkc!	5螙`%m-9Z%\$8caE>ٰ0&{a<]S9Y_XZ
X<!Cf!O=_>y
[ATNz5.Z9T}
386"z2x/G&)}X3O/Ă9͕2a[r9];j9^8^uvD# pK/|Z'egN&
3W4uSrԛXKdʊX2mDp6)/y}7Ti4n;WMlaLп0/۳m)b}Đq Qv)ZZ4#M`P3F4N&)tB֑&/XR{!SRWZEV}%C^1获o,_9s	bđ\g.y;apm ;	>G^6ڭn\12LsgS,`uZ;mSjq[6rPKO:'{jt/Cąo?y}t
Ñ ХuɏI섳#}.fUR2j0|ڣ S0wM|'nvR6K\bsӺN]c
qkkLko9EH}c;>dy#onoVy<>]K6W6sǰin$_3;{s.k9UN Dۃւ'%Ga}qP3:wlm{}3;*rB;22)ʏ=?~+>lD@]I¤#qLfb*x[tY!HbT}4o|-Mc˲ݵɞV O%#	)KOg/o;הwϜ)yj:Ʉ6.qmӜ
&="rHf.pxD 'sg'`n.~jUek5EA.5CL\)8C@Ze62 ;%0 B+uwwȇ#.V.^lRaTeCkZm]R=~.-GȄE ?kLq=e%4dkZfȞte>6󿝡7L(;;;c41z;ۤ@9J$&Ypl$bYs;-WsT%GXA,)5_)Ne1~'!!bO	2:\Cn`X''U_ˮ܄NtTSqש6
ؿ]n1-?]ZEBTIj)|&+=Dmy@neUAXѾ?x@r\,un)|x
",Õ#CE="pw{%(	
ܗe5<cs65DgcIR+"!?e ź|-맡8.B0qʂ(fhhVOO11Û^d|Usaݥچ
ז|)sYK;V6 O&j3U&rG~γr6nlUA:SjoAWDɈ,cK~ep'.8Jy­bftq9MdA^4uHE:G+S{jRE2(wCk2+~O#VbuEC^-2ص]}6D,cQE\9pxZ`=m&TuxìXqC!ʽX}ǉ*;"
{'c盩8Ҧ:#] ޟB'H`6=k62&lXT{
J˗g"V^9,)D9O`mYsM8@'X,ckNi_gDffo}"Izۦ;`C	IM#Y~MSLy_Ls3Rg63ehvwY!y/:a*gØHQ^pKNJ4"m;@mvL-rӄY''߽,~XɒݭQvA=9dGnM Y_U/5H9^Sܚa-ywl8Xc"1EƟư~גH)x8OW>z\'Nt
#8wI3fZ8}z$о}uٿF'D9َy*Պf9g`DFqv3}h3
	1mNVdi=aTT{W@)PzV}Yא&W(]n0]^I)]Ra%h='{xvW&F#m?m̦ixT	 65,7#[ !$UVERJEwgv['Qi2/ByKSZ:0r+%3 P~g}IiT3ڍfJQ>h(ݙ`/G~=.	v_ܤ"|#DW.I'8;PpwƋB0o?~?}@>LLBk[,*Qˠ0Tq&_p酛1[5w<6ff/zശ&sru4#dmN^7*gժě=יZqyT~rOa`gQDf4ϗ#ß88֖EMN:YN:4UWkSp~Foa
!k$ iMU|^OPpNdl\WӉVCY6!oQ_Gu[ytIK=n9
HNZQ &
QN!bԒ6vMUU7'Cf%75r(XTЌB+VǏN\w#w3>>ktW/Bc&b6.jxcrӎ)/7ٿ!TyKP(AtܚB`?X>.D-|8C;qoCBYpח\d6"/ ~fGу`J8VQ:qy|4ʕ.50{ŝ$7X`/hDy x<E!6Q6~zOs'c?;0
Djn=t]vUU;>81R8~3TVJQ ФXݶr|*1[a~KZO "PDJ]
-R}m0Z}D+ԇC%w}tX48K
&e00@*nIr+a=?0v<FlQx0tRԯ.jEI>mj(0:fj[gh	v3%a`G'	or\PGkn?ytY^L2꼡i.Lku'AOyۑ%ݢ5*IPbBﭸ4|~-đW!xrpŏ~G"gwwc`v{ki_Ie;k6uo4E@6; Ե=ZOqnO K*:A0@iR:Yҳ4#Էf֚(aԅ]4dýjDNRpU9@|w~[	~l(iYx3_W&JG}NwW>2J>AsYZs]Ӻ6#!@lAů	YIixdwns465#6!ѥ贃 _՞ Ĥl[͘ͳnIby8WtVO
zmůs=̃LQ,/^f7bǝQS_?زE?d~MMjbrȸnfE\nGo~#ub5]٠)<s UC$?gm.q>ޭvqıZ@W|C)3rc;:WY4xv+Q)TPP+
aإw|
}CO23Up{sZsv2$N[sen"8(5)c7݉afLT*OSUn7Z4RJfD.x/q48au|qFu)QĴ	\vƨ;pqKܳ9_ݡ|3.Р
_Nr`QY!fjne=7Xp%go}D[.X{5(US'Apr06WP$P\m(fQIY(y
 |w.U!I3HVܷwc?[o5i^TGSl_6ʐVZѣxr{nuUS@RTxM9YJJr?b'y@i"$~霊؇e  6jw44HŠdɀ
ۀDiaO<e#J
9>
ҹp٧Qqf6E3اRݹ~ hn$v)k6ziroՙ)$d(.H?7JЛJSls.q[5L)OQlac2Cӹϵ.?p➄ޠ$+>͂9n?삃<8A}v㭉/H3\x1e
{tr9	ɾs.rqg.bd^Z!s+
eCuE>\ŗ;⯔N3{eJ=qsƐ>%M_*W5<>R|u&Y."7V>pQ:tfEEǳ?|23a uF!+`BlY"4fB.TIm*$f[$~Ff	21z:0	&6$PO
KS?=aC1
V`3PIGQJ׷8AzEdޱ V7S7ll)/-"_7-'
 xZ!y""6(bP1nնyjײ	/ӜE`=nmg A<	[_F?(BN&Z<bY^ŕLu8곱q戆)ii.CDu61
"; %(DѝP_Z&3
N26dQ *ꌣ;] _9}0Yw}E\>'3N] au/oّO5LʞZz)>5evآC5J\5Y@	<?wX_SӕC0q&ahS@Qa6լ诉
SCF)*7򵣙G:ܥ[v=?wۋ
헥X{q~:+qQQUf!EE
FxI1VHGsZp*ȷF9 ,9|IWӹZ)7\!Xӳmb$ܝT=vԚ/w,>εKnNi:6僝>&_0,օOÏEU(;'i5cL^Աv.å9tȎ lU"adqT*uEECdjUkEIr"-sdm7(:dX_Űx^u	DMJN(bJiO[/Q^^A#8vj]wOFQ'ln5/2Fw>0'z >xy}Iꋳy>"LRLۭ3QPEqhygap7gӈ!(+wb<b:呐Zhӗm8T>C݈'t⒱dz1Lr&A[PwU~D7tӫ
Z]iSZɆ1	!lގ$TAVv
G:C' 	ӂDKOgG]hÓ%n۶6uuh]B\UC1s9+"fQx?2UM(P[.?oz,F;yG Yl?%b}3
ϡuZ=5 ,&ˀ0F
Fj!|.I-0/ck+'UAu)EoӴ#f-~-=M|or].NK4;wKNȻCܘ
Y;J"rH4tb7ho3w5|{OxvF`]v,F'/rl,05?|Z`}	Х7t<`djLܺ`^<wi٘N}"M`oJ"s0U1bCY8t5
080932tHVDrABs9'q$mJ>:K5tƴ>4ڬju<8%H;m
BXNvҝ4J)J[JH:S9?sޯ\5^YpdaI U`dm-FhsÝ7Q<$&3{W&9u3/F-FVƋQ4W[@&wLeK(	DFb 2-#݄?9ud:sCj>IxJp=@	
n׼~mcYa#mٳ]rܒ*
:	I ڠV)w =A-ANzN+AthFwЁS9FT]\_p
)͠X
s=c&o([
	.5"T| M_T?/j1N/mq2ۏ`w]P^=|K-X53@頰觀OBuLj=`LAlxch5>
W	dJO]*Z0vbW'??a]o!tfPjўۖJhU
#ظ3cjD=|g6qxOАe
ꃟM?-VޜH]NuOo/7soǋl]}0fAJ49Xѝ_1 7OR+fPDFv3m>9]1HHMaE~)|KV,~]d=KU5FI'(,锅.j
n鞿M4^݃2oOɂCWțFl/8MF
/2{A.1pǶA@"B<oƞ`=mnU!Ƞu#++0FzTSg09U~݆ich&"Q2JQv$NN!4/gY7)_Yv0=VE{SulvA!En6~þiQ\yH4I[,45ږm/8ZDξws:kZ]_cY04tW>ړB(Ϣ{#`7PZ# p=71E;;y
D?~ec?-{KtkX,F4vMy 2`:=@DIi>G.;oTayH'BW	n}jB)%=w_ڿ~k!zD':;{4Ph!A2!1" iUAne:xz>
B;qM,\bUw6x
%̗·&!==?'wog:<W=$\KK8)J>Z
J->|萻l%75GX(tƷ`H|r3ʱQM=HHC_Gc*_̛idu5:
N]W]}1A!jw-qC?Һ^v$r4לӥvK*G7^p~Hm
28sۘ^{,fkG 	uz28ń}aϧw3;7fuuU\)9mRyDID_A2x`r-y0DI8;@q"ɴ&ut9?.J Hߤ>Y4tB-|d 1|aIn!AeGt`vk#eff)ｐ|OLU5tUtTdĉU,s@K=L>R['7^vFZ"(wi_kMS?Y֕# с
(%ڪw.G7gq^sηJ; "e(ʘ0y8%BՇ]>#T<"Dw
C9aT郍F5ytKvswWeڡA7THJ6dLȋH]
?VT#k?g*. br bB2IXWm}D`YuNkނ]Tq΁5q:9T	܇a+NwļƅIXvz@%.y}~3~Mz88gS{BD#\aqGbtJgzk'moJ*};pt*pZnTB/۷C<Y_[~|%M`].֪U}qWSS<Z)g͝{x)yϭҀFWFlNQY%h`'d'18T?ΥR筁L[`	$w!HOP'cJ;>4yXw4@լHX,Φb*gD*v)Tn5Ñqo	oa9hy>t5E577}tWZHYIf~
E,}UmY#.q`CS!?%0~)9GܒlKzNF@PFXׯFύN_C]-&Gb{rwoޔjXwWS5{L4zņmA<b,n"`ȹ'}^!T1S%&qf}&Ӕ?}cd{b@mSP%#DHꍣJոTtyhtNw	q;@`K=7m#[#p5c;޵9tQ~/ɎغJrthG/MO$O>68/F@ZЂ~{oa+zȻE*T$b.Ot鈟wYtYeJ Y:~T֩~[lɡraXhlhB	D;"Wa~z8ק)_AMh-P|079e"Fv8B֫t/V멙اE/*3};I9hv#/ 
wZJ&B	x{wqIeF?'G7+ԅ8Դ785lkw.BlY_.@3K.oރc~r*/=/@G43TF@eM$yQovD|}pB8ZR=2!_}JbeA易8]n.+v}&oi<7`z	C4?Dj g#jbTLgE:pJr6$[;OΆekKߨ/gF!\-LAgS8 %U9}@G0YU+e6A9lS+4F
,,'/*ܢpu"gSRfa
	=P2;FX
iYU}+r)5Gڬ4>ׯ;x@ LPv^9\I)481FGVteR?Mphou}EDǥa%\ޘ1X/ݢ^lpO`SO^NNQFuy3On|nrj2*sNFSUb<]GpGm^DE+p)ڰ}_h:Duցi0gzeٜU7rwBIX}i.5xhǰmyVIiWCTf<=~_nI9s#f/[eJQPRezs?M öfJa
DL$ O,O>H_4N_
oyg}azh=7,=ֻ4JF"m7,lAhM84;{[Y^.0m~m˽aF3;?aGxfH`
9T=:A
e{τMs~)Ǎ$jQ6άw%bM8Niվ.~oC0Kd(g+jcmR}ajzka(ʰ
72mʖ(U!W:uQ
KԽ/KoQZ;nD9EPdZ2QӺ{,3nPxM?7΃{ŐV4(o4I7)egڎ<=﫿!Zꓸ%\@z"<ݍ؏dxbYtv,ݏ[ vwtʉz2sʭkQqt#%q ?j !{indh'$'c^܇1iK}lfN7$qOC4vĥ1̫wp%^q
,Zvl{>uw#6q{@OLve)?tɗb뙛QjL,R[-F]o&x'D\JTn഍V~0+S
,V׏yYq y83_8	o]H(mP橳nlLjyZেpm

hR,<U/gHd=bWSs!6>|OCk1Qڟ+`:E7^zx;{xv*hU=1RR+Late72-+g&t$Dmvsٙ]2!g~Fv!%&]{:a-˻jxw'⭅Xs}XSQB}nq 0*pC5ٙhG?\~&կ^O.-f@q
Lwxe^eR.ʋɶqx[=O+]^]ϐzēœu_ߡ8u_S@#|PTКrCqj=\z܎ׯ*6t"q(y9M 	+!V5)Anzo!>}`PT8q>rtCZ
q
ix3xՙ4?m!Zٔ}w'N[n4Bv6ӚY]%"SS?HM¾ Å4R6i28I=D6<Gqز|n?!gdpM]L;ZݱCLh"*cGjB[\N]}ԼJKtr70boOZc{bJ)nl?*9{%h/`0oߤޟBXPI*dLMTp`7,+DĎceOˏup8q%A RA+\O6$XgbEpN`~q]{DA-wUrelb,/4`h5nq?" |xZSlNz)..&T1m?XaB]X祋ʄۚbKG=E.h+"l>h5 IQvƠRfwcvgɊRσFx5d6lY'>QGR(uNn/+z
퍮|Xj!	PT.y%1vj'%RTܔC*uj7ņKSա
V&q/Tb6{+tms9խFm'"Ծ0ɏS_էGOC[MyEVDEVa2:暁mS})4|
x¶{	Nb7-Ƣ~dҞaպ0qooOk]\JN*Y7^h[/ nl݊"-\?/hql"=ѩfk	A|LerK+Zuwֻ?£ށeǥ-%xҭyz2%1W)ISeʃ;gJJ\ftqWXW
<]鹲2Q&S3La_70?#wcC[G򂴸olI
4\;:I?Q#]wDO#Fd(ǋKwqH%^2 my4y|LBkyg{QfK'UB%y!ؒ8(Nqb5aw~߮^@s O-ŋ
rAmekvLzG:[{υ:PGz"^dg.(M%2y$IW!_naS:'=/rUR"*;@xe6Ǿ~[Ͱ9=~o<ʉ;(фu*sN-ndT@)Y(wEIV}qT7M?
ڞv@Y`V[-o_)[\BC97JAK(EU`N;ŗDڢŎ#Gn_*NAT{-jtvp`:1cFj
{Tϼ3*K;!,CBCYv=π64
ì?ǻ96L[N7zvqg 슸MK!oW߻Ƕネ9Ԏҝb]ȟl F4ɊJpxo@qZ𵥲!ՄۥsUйis+i9T[FHV#
om$櫉ڳFÐmWa-m{9d3ۄecyD
x孮6d p[3 P c<TA#X}K
1 w9&2TpGZ@3=TNw$M#u|dTWdw?Oi{HoǜEIcXcSXVf[w,*<tŧs8s6*HGr_CrmX]:6H	4IA8:'>~w~wvʀB*̅amصKRyg85_otTヲwjr]iu3eZ
r]c;˲qfڋ=}P<a]{PDꇆ,&A~Z'1wHwĲ;gmu~T
ZJyWK;P3>݌=lZ&XuVR,`(2PSw
V!/GJoM7(ΪqĂ6
07oo$b**y˥1\L=ufdQr;cEg?ĝ@CmE5Yq1{o/Trq6eI]
ra>ސte"v޸8-	9HÜ͗xm1?Ql:&<)%Cbc,k/rAeq]!/wPהX*f^)u{ "R*q<:1!;Ԡu՞}&-ib/l;yE
yZNU~uO-XBU}q&wF1f<Dyقi׆_DOyU&(@lKu<_>voU'c{#IOx-zC.qUO5	Y:`񢟖yFUs}/G|#~G`dk-Z
"H@Ck3bz={}{,/"Nyl0;K`GIfR
]cHTW1)Z`zw"}z!u]*.s?)B@uӗX0}^oN00˚'<֢l#:'hVCD/oJ\VqȌbhꀕ@I$8J)|:4ba%snos/O.*2V1OփZ;C$81}tʟC=b?!dB^O]M!ڪcf3|VxË~)/kK'xݤzV~*X~6Kt	Qp>XY;aWKkzq HԤo"b5$NJy;"Qqj`/G Ktz3fΰF^!R1=nqOq$b>=?!=p@aLϼ}9P꒸eM~})to\P'`e*:
pAQ<sA%!2]}>vZ˸|(_-	/,)QfzwG6˓ًgi1Pmd-X4=4d73pyd͂[QϷ'6ꊏ@lat~&N}{Ru=bQ8a}:irn`O wGoGPL=HT<u}BM5E(>OF_g-	&Nu=RCԾl/s"ƨ踜lz:B@Ԙ}[ݗdc!_Α6:y6Lgq.LC찕72
.Vr
5^
_k^O)g}(}l_Qedv{G哗d] s\WJ87޾J蛘YuaNH\M٪8pP&E !YM_{Ν;!7Dba\ z:
' ۤQڴ9L+,ޟ({Pa+лfm !KP1*Sy?nO>nI2ٽ<Sj!|Ǝxu<
c締g̇ӯgɰT*y!_bؒGηr<~qkWvA[_-B?='c켫A^AnWEbٗa՟sJ}_,׼riUUKsRLR),s)w?t~0ACuLv
x=TVEAdߒrZ?_y~;^g
}~b9Sx0O,V5m?G裃9.6O?6RF?X ]4E-E'ǽsB?:G#m g8W|%s!)(vg3~kxm`zB~6v
k7|\Z[2|(T|Tt̾Bb>؁}Z_~ɦ4s]no'RPd+ӷպNh`rR,3|pgآFҞD^\fYB̯
a(|hK|\(/6"bx%F*_zҒsZnS(p)FPqYy"ҹ#Unu!egHtsH%*&`h&QO
,:@ 1}54p_j)#<xi~ϕیݛm^3ҩYn9;6z.{ϜYwңbGŁOG_;u2=i*2k*UL6{]OffaΗ<*Bݗ{%#3D9v=K2',`,WӽU?i{'grNz&<+UD3|ЎyRP3i~CYwg5K0f ekmsH:VԀ%vBxXX'8Zr>DGI#<%4@Қuxgف?
vDсEUہJ"Sa"`I ighLPŞ;GBI!!BrL/vJ~ZOB/T7PZqژ>	e"gN[@K]B4M>q<ND']
m/A-//tu؈nwfOeaً>M>,cO^dF*lH<XIܜZq:wPQF˺xJV\,[2Fs-] kE
/KF/{~[AkP-Wߧ4h[т۫*CljF/s3LjW1,÷׽ty腣.L]PDpdŷЯ;okJeoCOHbfl9lD%+릧v ~d$5bpTY-+ϵW&RxŁ¡~'5_̋n1׸qar^jpzSܶ+BbH.`o;yǝ[AF9gڮbP(}fKجk%j]|XZ¸os"f;"6XYJ.e&2;~Lx{RuLz#,:FRLn742 {sF'ߓ`s1{+rK(m<.g5ΙX/??sDmhU-Mձ`ւr15 V^wNwߙK~`-`fPN۪i06F:4x7Ne|=|<\뭇 >Gʨ;A{Oi]\#:F}okp@s܏"Y;OX`g8JAa/`-|3jR0-O x0EP^:wAe[̌β'YҴY1N[ٸ.-`nt'Zwcb+2+Mkfd:]K׎};SoNPWo2j̅ !ͮ*5:kI+q	oV:N*0:z)M׵SR<
;ԏ,C=}BlA_	rS%&\S>\bIn`S(JYJQJjk"pW,Մ6n#3NEUԓ!?l&\QV]i7V9¶Hd8jl3[AױgyJb<' Smvwa
2avm6~&ۡ~Sy&,n;LvO۸V]M)CEOqc*^`%\HfI-ucZD[#';PI4w	<,^m*go0KG-Ƙj%?}8}bV;W`)C}8H[#\fpE0sdJT
q^!-oLeQlC^qoP@ɹ櫹W!aCaJS֌.?WPJS,2_I'
Zzx\w?;rH捺pؿ0QleS
z!¯ik	rب$BU'8zU{s&mBsvϤ^7K.SF!UHj3%zd<׼fsV;?͛0޴F].5IAz8ifS8y<|a`9b䳹-FDE+mQQ0Y\wW)Ϧ)?lXC[g[u@%I©：oBog#&
dn\S*l ~I\ϕ_u;
Yë4iQ]vzdn0NvS~CO%Et[,F:}#kOڰԠQ 䴦9//GMU?~ݤ2LaZv5
b2abDj6F(6HY}~]{ٞXpzgʙ8[B6ϒQb5y!ni6tI&I:t6.=bNp(d_%UڅJ["}M^,2Z$Èa8w&A	IxLmuߣًg9I՗Ȥ%:86lTÈۘуX3wtEш2?NfS"\Us:ĬSB.u?8ݻ
<5*QAc.
dP0)T1t=\n26X	[xd&6Ot]1^5Q4\~hv:N*SqJ)AkvXkw4%2%OS\᝗Os@Pv<Q+)k('},:_1E|e~[P&dJ/eX*ݮ4:0Qِ]q7FT\%m=u5 H5kn#
Xx[f'.6?Mʝ~C%5Zؙ |hay9̝'o{JW*,N춑'|MĞf+2]7KXUy@d[n]OX;G`	#G33b`ɍUnUWS˺]18m㏒SZm~gw0PKYXGܿUDEAPʉ<K"P~CBW,zY7NԺI润
9 NsW[J^Hs\<l-[\y%Z=i.8Bŷ!y=(dm\ws*f.8PiH#B0u(ftUϲ&N{%61B<O'/H]zG~ zo3<W4ws({vHD7g])(KU߷|l`P;Gf<S_,f13i n,T@>hݖޥ|(Ea	!([֜ @%b։;$u_L3@r͇"1@{Y
u16"pZ0~jBނQ]J쪢FeZ	 B#w=绡u]5O؜u͞\yUOj||!38c>$0+^	\S2E0
BRӊ\MLJϸt@H6OyǙVmnh
m
|/U|^}aa_֌n*ї;DO*@2SxO?_8:_
OlE&$y-X6a>:_{a^WxeVve+QuuCrnuʔ9eXWE#j>qCă(PJ趨Ћ$^o}yw~Cox|P@ua2B!@s_ҜY
iے,|Qc~ʙ(זMʐP4M.Zq?vB(U_IN098?uSӓNMsVqw{b}2L<
/KW'ؚ55eg
9GsB:f⇤U{UBCw:{7/u:s1faw<ŲdJFUA
zNU|-{^070(DG^pyzx2Dy3号LĐ^*!X@IxnR)̹7f~Oɦoǭ0G"Xmj  ;<WFڎ#2Q#茛w{soowRU.~1cRzC#|SiOq-gUD꘾T}8wǜ(sJh^>5撍ʓFe7N,y?&<$s"JH=悆< 3
}WY¢`Ńi0gh	/2*Uӥ?Cq#X-OU ݻ6E) +U#` Prj7u=q]zu*~(7F'm[0 j^vndUS_vAs2G,<̛X ~R|_4JY8vKɪEpz'N``@._-]}ȖB=+&OD1ڲ.yJ۶C)EȹcVz;=DSkq{18F5g-?/)uIz-}c/92N\5#
xdHrA&99 Pn9^>pﯿspFųѭ(o3T2tTV)2Vth4߲		CeL|k튱\j1JNk^Ov(w2ה!y=]?S
hJָKi~)@A53|'ֶa/s#(z,pbVHctis
nCCc,}Ty3T1sY?-	M:mZd,ɎŰ*ۮG
ɷ+s 9kC	UAb{,wPl/h/AxW5'A{'l]Ԩaeةc'w\7[y	.+,YՍ,Y6gb
A2/⭄t/#e#*6pn@-j XXr/9MD֐8x0s)!o&mKՅr VcݬLPKd9+YoL߼=n¯VxZ;E@GqU^CLL]$'<ׅJXqtPr6y̶Ah&z=N!BK+Z\=k1y&PwW#e9rit=Q:tdVn^*Aȟ!!ʔ9JΟ]xT0eKE"Ap{2C['æsTnGMECBUnYR is>U#s3H%='܌ _\t!TJ^B?EKͧہ(v#@9*ay|W8)Ϫ#|$1^caC0 }1,%|"&``cuYi^<G(Cؘ;fݏID6c'oU\8I^譆`nD?
Q$y.حdեLFzksc2Ew&ACy%Oz.z1nX^18D܄]oq ?FN~tcvhsmLTc?oo-4s &inXlJZhaZv0DN޾팎0wlo>;e4hpYL9Uc%W#A|m/ǽz?CףΆ;s=-1AI?thfWϐc_Aor9՝ xGAN읠n#D}}ċ@(7M1f;Tj^QOTcydiA nP<y
#cܵ߀̷yablBG}[?HxNT;s0
`ӗl =<z?$iXT;yta8pD'hB_\|#]%^tyV5ѝyDA# ѵk%οxug
ه9 $noJ܄.֊i`HJb I:=*j :*jO\QlXvsX9t6Vã5Pye_ >5hwsN ~e&EHS
ou]A>=Ot(IķuFIul:Rǒ`qdfdC\~us0.}C^	ʾ{~Ǳ7C4
5
.+dͷ!<:(<>T8</W"c5IhhV[9lSs,K=?L^_u.2EoYGB8`Y(!,ؔH8_j!>iw{0#>H57dYbD ^66=~,S4Ry':wZa؟/eеHABH)%6_5%Ai?YwZ	q^fdӓ%7v_ITGz>Һ
jSfHIɡj#
,|4 }ؤg?@K\ϊI14r9Aت_9dw<at8s%{·K{$Z+>D9 ?`qgGFۮbZӺ
^g|W/	yn<ܕߝ̷Wt-8vÃdKdYc0ɢ:Mt+Őo?hYOe`vF!RxL-@nx9^9WM4ɓI2o)nhz+?# F՟,tGff>:fUad9Q3saKdMյ!<N&Bn<1j7o_<W^ș/ov{a泩lH8-m0UH+(w4mcN	:QNZ$(Vy=AqL[ 9#jP+%k]zl,RoZ1qg/3KQ嚝(9/Fƕȩ0s~{;\kɎ_3J 2ɷ>
<</vJn\+4T0|\aS4iP$?1tKTGr=7zOc嶩fmVyom|Lw@QD2h.f:P\q%Ś>oS~3ak~˂Iw=Ǉi	#od.1ģ!8ne
UXCTSWs_+\lҋٲ˄d_#T]uz
11I@Q^;0z@",Fa	e!	Xi}I&q{F4htLT[bB}n&nf2
iHݐhNqa zq"4	Ia<(-	^9>m7yyw|+׊y
غ39ixSeܼw]Hf2~=#wI72)U]
H'`u;\y4HzW	snAXm?lE>XNe}Bm75ƍ-N 0_S47#և$VEpD1=c}۠[zbHytYH+<5G><P@>Vz]Lw9
kQzW
C&G?OX	o}n+%*6BԽMc+ikIs+'ϯeH-}
 &i'==SŇ݂
A#EGw\{tumgDC2 P܋3RU.-U&nAp>;\gu9cO(K+gawafޭV:;p(I_a/jfA?WFǗV>!8XvCm HMoǱTm +
@gM#~?m(S8ݯ}wiz.>pY!LLF`C^YGȌ_#<'zTXa1Eovϝf{h1ǲs moyZj1.R,H8ٴId⍳4<?9M([p3>؞6ߒ'j{{mq;
E3DvԁD½\½"3ҩw4&qIV.λpp]-õW^ĊcMv\xv:C?+E UXsq:me|[v2J!B6#AxXahΙg3OKspNJҼA^1AYw.LkM˅g2PBqBR(ڣW^4Zoޓ-y &},čbzqGZ^{]	5C|r+gn1B9ne%++s.7dR1_BwQ=6'O>=,uiz',"3ލ>)g-ǬLꤕJl$L,:/]54Nk0{ݯV}.3SHu'/:;"Qa92X+؍ӟRaxR;{"pm0g]q,WzG")![D CJC8.S菠n>"KbfTV<ҦʹPIhM;ƴGd
|H|'Mvb=!\vM+:
欷 p@Ga<9Sg_hO3/uXC$qdk]5G'Z[Q1i365EGSb̫wC|*7B]FZOX,Xk{s?$\ԲV)ȊdE>^%KvRshoC;#$s׬O8,Ǆɨp|΁-nWBȉ}bo:stc=Hhuъ ]+vY_S[X35|P]
ֆեLJ^z|7ah^zר

<RE's/]\kgoPwi#Ut:PC_<#Y+}_\no⃐ؔGy;l&݁pqw'_ooeQXC:;Ԟnw*_أ uNx3˳0M9-TړŲZUxV9A}k!s6H9067<>$*F:*K~2i1,̒=TP_3
8z7	g#%M7[;S}Ek6]6d>|{8/q4f\8PGӷ(ǥv;?~~o1mnsшcpd=u |MuG%?#?F?\'{Lb
0#!^9
v9(`nI.JlD:+̈́].ǃaĮxyW=SX]FB,dNLV'^1*5stJIfHuZ6NҜȺI1W(
""*·CΕNil,
0ȄM2ܸe|P/Zvܓ<zR]x
ŞN|_Y*es¼<;۷$2n!o
u 3~U⯱Y*1a"R,D ~[r~0ٟv}or_9tJ1)RV#ռ뗟suy0FY٫E
ž, `͖!?~|sNNuTyJ=E+y"$▄o'?x-n<Ė!Aq
{:' ELKwUZ!V	K%"O&6{>Q/{)LwD$3<ӻ"٬Ns'&S>#v)O'ZYGF!aN_8.a<MK
 2bm 
e'Rk|7has缾GME;qdѠb"|竩ЪwA%+0chOxzad{򀨶j1?aсoY86??Z"|<-G63&3e
*Qy?9iV?sE*O=Q	l\愱m|t/SzGE@tȖ:NVNAKEQ=W-_*eO|Zf)ĴĂjKNƷ꟯+ʠ_E6R+DbnۭH9\8k]r?5SBíBNFvu>6*
\eY9VмOڿuګuxKy_'pilM:CkĳQ>v'ΧMWʲ8⒳,uq n;omudZAm9@o1[Tn8c徼`CýiYN#]&M˄^036su 0g]r* 4B+o	{`1>6|Nϡ#ϑD\sC\+ss.ϗcMIkP)oǬ">kYD],\|Aˇf{`nGiNxL(r<j{nǾ+j'$#ưclG`
C+&R=)8cx_s:~G2or+:KiTУv˻
緲Z<sz3yeM<70G.*p_Q{Ī!ظQg%qd=<-k"0"a-OZ~u%ut
FH2+y}J<2+|Zn,Jf%mH` D~Lo,Oc+B|ݚv"W>oQ*jHE6Uy!Bŋ]!2uՀLeYѨ,*)HsdyjiᘸI	꾹l.tpC|<}&|}Crm< bLD}4Mc8^$H}ۦ)Z=٣/*V`</%I=MyY8J\𿄼5z_a:RtϲMTmkSlÖOɛե7Q5?
]}8Fʍo}}%@<.zlid LS_Ҁyn[3tA-"=tE n\
(?*@Ag@kҕaxgRP-p;NXY2DvMj\&WZk=6i(a%;}rTEtJw{Su	Xє'ō
pV$v*8VS^/Tqw||s/.
hP^J9JތӔ6O\tMhϡ^ADm4Zl{s8RiOlgs/>{5y1RgE-0~yH
M>_8!d3Z0u6Tp<2jJ̅fGwQE^L!$5׉Go_J(NbjP_[ǧkJEs?~+Vl=(ՄA[̋c5fwߴ"Ozrox4tYttz
e
~￑x?Q0st3rl

IXO4bcԃD{HT2m2
VI >+^Uְd{dJɏu~<P;g{epk@0.9!g{ouߝLCf^KٯFga JA"b7u
{ZD0 BĞ;<!Q@v%1 7 /%BC
VpBB?;%d˹"~twϝ|`Qp;N72o'}ro<|3ǾȻ̆o]v ^jy&7/TEe>^Ep% KzW,)< }ښ_A?$GjI^Dk`"]c)}v#
A-`Z4CbI"q\بԢT30Ko2i7<{ \N'\6O:6ECgI")49	~/~e-&YOvM
4h[lHglGRM$_iR濾](ם:6_Sق	ݧ2*V ?-:ޞ-'^[MttW'27<$1\ꨛ}|f|60=$v#sg
 ;	r(0"n(sֺά0J9FF
08/_+t@yg~}EGW\YC!mwVڹā*QȔԖ/m3QGQ-Kܵ4]*99!Q{[^O[U%[hɷ!0!)!Jaܣ|hJpW*nS;{wdc:SbseCnNޢ}5k~kg>ko[l9EKX'0/9J7.NA)0AEd'#<gu:<\E7%0	.pϤ	NO9 NjR6躂ZҗZf{>7
<ÇcD6ٓe)-?a$b=IoV
Q^#,d߂^mǃJχo{/.?O!ȭzu]>ث{EҤ#ei=wA|*|_qZng}ծtpz6wb§g1lxīxVK}ݳ%YX
RKj3}LM_tXv_a\2:ocYve:Lbbda0̫4}}ͅFǭn8v.QaH:UMP؟_='YpL^=nw.p;k-˭xim'=$`X{jaQ)b.؄@K7|%#gQZ-L_zcK8|>[mH<LZ"r?6S2nW	Lq+:n2LIwk;_F~ 
=l[.3λB-,ô[éXD/`/u6oCrhhf8nNqkkrEqM?
yL݇Goy|GU,C2IQrhlI%b _6xoQ
*{x/\j`}[kG4Q3f~_/e
W&gF)6(nr0WPQd\"K4{?푾<;2SP27=ҴDtXIN5<w(O[6?ö?JK'm*T`ֆs<͆Uޤ32uqD)},Kx~lBȡn6vRB=É~-?ї">Sx8ѮP:9t-509%dUXkvه'~3]G:OctVb 9UtxD]/#Aֵ84

HьQQG.ϗ?8s#O}b3%\Oa#m q|Z ]@w=iOՃQmޣW|P`	9x#p?Ut/cv8OA @gKvbޱ<=Z퀿shT1EZUp(B-GoܟpSwa)>Orâ1)>)(+T>"ciQkh:VD]8ϷBgTGo7ceϩ"tЄp$lvC;^,9U#!v51+)Û`Xf|^*OS\;es<C)r'PdbT1_Ө'2E~aʠZJ8V!)&⨃b0{=n-*~(l#YT?䟯(%MIRv>L;dp@-{񏥖TJ$`1{l~>ZDMM&2ZhIN8_V;7?~_aA
|P$Xl{;a=>Qx`G>{W3O([Hi^MC%Y*R4?TYmU"dⰮ[0W?C>[I*7_>g~(աG>%\G>ʈ-=/yEprƷo~+ݵPd3Uɲ#Nyz)}hG}{˚	D= K
hYUmy(q=];!+K(?oHyBAmQhd{E}[0V'c
9AO& tMPeZfY6N:+1F?qA߆ݢ
͡˗,;o'S 2HsYiOq;>t&w	&0cU~Qv-[To2+R{?&N/>m?`u* 5rR*3e:sku
υۄ ~	U81#? z?
z\ji	B]ũ!g0czK*Ӧ_sʼq($ByK(2"Pgs|[t<8;<n<Ǩfʢug|7~*u	aN%.dQ+ٺIp-\q)8n[mE+}?ϼmhܵ١Q	,k\:-5WL]W_ZcDe4ݿUC~&;/6 C{qt 6VYy}|"aFe%K`jAcIrqdҴV1)g,
f_,[_`î%d4%\=ՙ~pAs;cBm~ْ\Y
f=\piiУ
's0g`+7L_6>~:ÝaoiP~B99 wd
viHrpu9]ЪdN/w,Tۡp'<2PtFւӢvC
0/1?}DV{B־Eho.nlqS+HE>\ISjNM>E<*ˉ
a*l E{+)4=2幯oY,i3O.grSBZO}i6r+.SӚjhE4D^$ֱ-sh4usc׋=ѵ2A7)ut$=؇KŒ2{S۶0dS_Ym([Űvs^H|t;/(>9tQvG^84q& P\g0m/fO8*tDC,zrqnNߛQU䤃.2Um!dn4&0(d!R{~IN=	S6	j+V|n6l]c*x݋S kiFue$}D	fEm5,X|zq2s1eDslU-1p!r Y5-T>O`Pc9`]Ab{yF=y(3xhңtr%5oCKߠ)8^m` F(ջe﫴
ʊ"ǹ 8!϶K7o^LMJC~ʦ6/C#uuARh) (dL_4ROGbVX}l#}R;lWm^vrM>(#q6aZOul`_#MzͫdZtcm-sLRrv}	,)_g(u5QkkzQI@/cp59]ox9 =։8|"j_1|$bhmF^y1I(¥8GOZ{cY]|N3vnSB흀ڽ;Bpx'`X
. G[xn!a"
"sjg/'d)>|QzΎ<<HRsE<ؤłfZ"֗ѿ?_uo'3SZƄgw'<_нIU|NPa0!5=~nPz-Z:{3~paKI2V͞);Mml461 skh@oǖ&E]+.Y*O[  9Gcpfz4}L/h{SL&Q{<<f\gFv"͑t.NVCabhoVoGa􌐅.|jYl(Wg\dʥ=mA~<IOØ5 )x_\Y:1'RB]
A^6]8>ﲩO|m*3<3ˤ*!D!; W%\+q_޺ؗ p}"vGl晽Ggxgubl|7={Ww*#`a
v0L,s(uCm%Qƫ+#Ne/-ڨ}=RvvJu*޴ }X4}j7+z!J"Sm#ll=BK69lhcXK+j
[|;s<JliV1pN֐+ϴJ9n>lJ	AiC^se)lvh#s]ŧSv ШdvK4@O
nҨ.ml}IӴm.g	;$tҠpcsE'5^>|FOEyv"4 %i
C	uL6 
T2i3(%4H~O>}{]\-G>1yaRQ83Ly|ɢ-#IBb)%5dؼ#q@fYt]zO znMӾ.:dxFw)頢XoGS%Z\'V.<Vɮ	YWeK(]ot3@DKEu/@D֧HAeS'LR,?ދ>9(-GaK\.f `NdBzeQ_맑1a_ԿI}z_Ќӝx9yH.5O.#%'<0/+m|zc|#OYP<ļo8Eg
`m`Q]wl_k?_[O{?`yU
*6r{s)NS//9M!Jλ|Lpstwm&\1Bm׿<'.ЉyY[d~.ޱO0_qy_*;4Vǎ%"iCJYvov39/)Xkux̽	0~X:Kqɏ\&]xQD-	@Tp@ՠ>i9 "3RÅKO=KkcSo7x]zܟ)
?_]r꬏]=RqQaO	
!!Y[[}ώѨ{2 T 	n\}#1ʇ/`߰TsЙz  罞EH;)Ax旆go!f}y}Q
6qJcdgFacK="Sw8/[1kQ߸6
~E@W` %|țs?щ
jDuheH#K	{nH<X꼡W-wn;kJHg&aSFsMqfc0N4:4p#"`Qb
y~O՞jq6X`k=f0vQ;Ӌ1_c]8ڨlTd֡`<dӼ_AEɏk}CQp8Am0J\	n_8QY,?%,i^ݒ2_;\xlʔ46=L7I62!}ʁKo獞Usva1+&R9sYl^ȧW6
'[͒t|.Ssɵjp2
`䦳CE/mu2dC)^/O&8PB6:T2 u.jQY<Ɗ+jZDlE?JR4ZkgSDKzMc{:k9Pp/tA-~ϻN?8aokm!%NZT0@zh! MoDQ+eBʳLV{Q}UĝΥ䯬¥Yk tKT
hbj^ya</I UNEczqתR!tu*;lWզ;H!7!ɺ]ڊG))<St$מkID@!X.R9LаSP-p囧M_.noο=Vx5eJ&mp<9 w\E8-}T(p0.Fژ-Z}%uBV!l(K$9d]v`	$˽E%8@1j  Pi匡TGMo]OP8(9zUSsNIU?9#M(?F9{uEo?#eWe@Z_*8D98B47~z<lXUD) [Nx4mif-`/'ujb\5h%F&q<nF2;#벾ԼVK=ͳ#t݄=47 W$@jheq3yIY{d#du6F/
	 ՘hxcE;-;+Mb!#k'Q=wnɏ`(( d,AAf^9GڬM&]iۓ"lG_j5mp
$($3"F!܈uBCc\F<9Sx="e|2iDfS[hD`H4+{G9_f>1קMўщ-ko/eQvl{;/WCHߔ+˧\Pl؀8:-,(˒ G
,|(m@X{
} T\Ju3-ǁ	*NTJp@C #o<X2ZD	 9f'>N {-.zɻ-̆U,;l.u]s貎+~P<S6S
?򫱽Q!UsXo!N8=m[?צޕ2
'ءŶJj&m}C>XSpImrx
xeea0\oYC>Q_(:ݠGKi mW4kwmp?X{nowYpqZW|ݴɠOsVm/׳WgכO*GAQKؤ0#[^0Z^<{;Hy/s~!8]fL\X(~bP=/`w#Z*ْUNqꅉ@MnW 7cs{_63x*+sWc@/ŜOЉΑtZi0F^Zdǖrχ^ShA'EK|W/}ETACPۣj;L^s.2 	Ooۭ+A0&H$062:TӛzrnIF/}1?ymP?j)f{>tEb
lmQwEF$YOEkTǓ}H~o*)R+ƧIEB(.JŁQyCE^xAwO{+u"ϖvb9%d1%ޝx6!Ϳ<n)'u0YѤ[[{tr/(GNjK.IT/7 +f.
+xy-/N=)ivJ麜oM~Mx9=kHX~"Nf8MesR%$s׺JtaXim!Be1&' uMK
m	4_2O&2RrP}\sPF U
"sKr1aNUI{LXK_apX`{#\LL%Q|^rEZzno`RrL$c&dxG8'h%D5TШq&,TG_١[jCOrRm=h\zNhu%@w`[v:݇lEI~%gE`' <`'fCKh_ok's}2,9݂rhlx&Tsx1z5b\psujiǢ B;<33(d.Pl43;Rwyb'TfvoFlO&·t<C`i7pޢ<ps݇zDSܙҿ_o$hszHg`ba=vLf^t
Y	EvK?Y麗3	BA	!l*&!Eo+ft8aE7y0,	aOi$N9X9)|ҤdKC:x%㉜KEXGs{Y7>s`V!K#Pu#
f[
Џl`h7v`ܟ(l%_|J_nLfdPtM(73On3wp,z>̕Va/#Es$hdRQ٬,DU8ew-j
lڽdT{J&ԗA?̋{Ar?8.aU'n߁[Ό-"]!y[
6
1A
)rхɅ\NltLXV
q~oɗ#uL	mI;]qٻ}iaJ/G[D-jΚuXng;[T뮗(OʫIʓwd6+~Uq)$':(0Amg.-so\;ÿ W;mv!3!;](x݉w9y+Ml?/B~_]mNd;UG6j|u>{x%2f;0_å,Zۓ`x0]hyn{0b]̍(!g6.&m:.QAd?0!c6.(xSː߰1SG/ǟwއilIrkEHP 'ǟPH{?0}7ogB	v15*q=-`O5/Eg̠g0mbQ*j[DOlÜYp鄮D$(f`ddPڝ:	ҮR/
G"t:to8Z 
n@rAC,5P7C/f$0z}ƩB4}~8V0Ց*P?jP=as!qQ$v.v@\bcUxNR_"(.I֥mx0fE8%Ea!-m*:3Zg?!8!	
.ž>;٪$ۛYXFlTb?q=EE3#Du\(PAb|T"W"c]I>O!%$.#&&Zț!tr^d6/Es
*]IC)KXFrxRDFɦeFȰ>ʅY)CsƔqAXt*b>٫sOk3_b5gkw;.,quvx<Ж@_%$67d"گٗ\]ZV#C"D8ͥBpڻg
m=,	}I%/-<[2N5:P
>k#E)(KtO٭33x{xh4L*GW?ƞىGEzz|+e
uqKz8_a(~JU̷^I&ˇYUBc&F]l-<
K鷧 ZVI60qZrӤ2>
t(g^(.>Qawl6aZCswAgj/|r<10rQڀXxtpI@7dUD{:cts+O[<]Q9*ȧYM&B,Ǥ!X0AVn:1F
	H6grgQ^啿Ud"i6f^WX#/aK=NOY|dԕ.Gh4,Ֆ$p(~m!]tБ>G
oa<%O(hX\[4c]Ώg^L)tSp4' T:|"ypuH(h8R'!	ɫI(	+'rJުRM	y|I"_B;<:鳭+=g	wƋVBDj)Ow؂?
Au%#cssӖ}G $8~]꿬vKB2%FOVt$Nc^[fYrTJ9^/GNU:]; h,<&!h	1FKMszYw/n_W=6
5{ީ
$y72
9rT9^kx1|{{>}JbKڶᓙ=~D)"9#DRwn{,ux޿nu+^k1LF09AAqcHBTc@SlwY"Ĉ03'P)!ӗ3ai3֨G"<LL]6ƹptZ2$tTF
Drs`~{NJe9vQ\TW)	ۍ1ܴ`n>#Pc0J[$MG
Qj(j/^yLHfbSKqSp$C󐛌Feejna?~P! +jL 5]u@vX/KH{!<B[dKέ1'"0w6d#9K|w
L9s_Č^[bY̱ h`
<*o5Fo#[-Da9!?MnrX8;[
r +P"Upl;[r%rΊ5c޳vOwKn6adk7gH*xN/lI0~*%	I[^jH3UϜFt"~F\ˋ<F%Ǉ̰Wr(dsDn8$&dSQ=x-=Gylg`d<%(Pht>:iKۣư'n}U*@J*Jkk{';aCml{4Dޑ9mDX !??H<},/˛xM/{U#d7,juF3ڟS9?L~
EPĞײZ"&ŕq$~"ͶP
lőLS"䕎|l87/}?DSsdf?m*4VL;>ٵ>A~44WW6&aiItg^JI匌%@tz	]ӐǙ20[Wʰ_?'7ÉgN]70ɥ(Kl6g mO'*t|Í/q^-]#ٜ=~{hNޮL?(
 aVeD_UVHI~Am	RU\+ػ2@ϐFv9>!-ŔxME̵^B^	Wq&mm;hG}''HI'wVyb
"ȩ*vLI!w2Gst'BkWb*bQUt9.㸉FT~17N'P˶tF/ؒA3M&Ǖөޗ*ퟣݻ2DsC^f!SrG1H& |5EZ;wOGTWT2D!Xې!$mQKκ!&_¶~ւD]Ϯn1jG-ګ{'W+5"ZͽcyB<dt50^GEP$co0t6.%}vD>i|A
?(lJkUKD-,|rp6(9v4ItcqTCU6,2ϛ"$jxKZPG5ޢEK'}h&>~F[+Y槐:"&R	ô,W@ߔ:Btg!_!gVj|Cq*zf,$8}PJʑоP#5;ǸhZ﹒Q+UϨo@0.zS h)ar߾`ˡskW6St 
'0m8bZwǿZOkCVE,oo+ikqZ^a|sRCL뱎pFR/>IJ8~a܂Nfu:~9e~w_@>I44<Uu@ӳ)tjUċgsz.]Yp+ូvBfL(\	25bW5|2۲AB|oI_-uqw_H
[nrK.]D+r4sBdl53;\u1`nsH;ԕ9Pdꗯ߈="Ojqr
%mPdi̉÷#5vvԌՌxG"!ʓi|},@Ҍʈ!+fv-H~z("=0= {.#bAGH׎q"V^׉s׳|8;jD\D̊Η\2cxG'%ԺUB$r/S_Xhp>dŽuaE$MEKv8$flؒ!FT)H%}vEը$>L̮[Zcڰ<G~!uG/	ݽą_ZLop,tTc]}`Ԭ7PT&މ2hEU1p8[̀Q̃qYH/a3	X\ߝX<w}S^JKSoNZ쥌8>/jNfyI"
qcg
GkׯNN ENA%v\iv!f_i>I84!Mi0RLƮ,M:I9etW
8PJ5	/~觉?Xbb$e#In@ 0UT :}[MSwZs<zHWz˃48UC$؃;z9T Wv/5oۗAULF0%H6NMk']wuHsM%rn
*'G̀.q5WRȶGNO x0rAmJF47_=: 3b,4B|xQG(	ScP1kǔXlykeUp;Rcvjd#M+O'.Z"-NQ2qef;~U/s~A>II\pmuזbCQS	85.<eA6\tK.WF]e];5goߜC*Z0'9$HF 'QjwR	JjX bvG"R0P5ηuq"]|*Ϧ:&/,:fuξ/S~c7=wC$ ˏe|5W@, cA2]ۨS}`ǹ{W]Tda &{<j7[Om.nCw.R<LNj5l3㷩6>L(1v.h=wX+⬽]g,uzSd2=MA<[_`!]ؼ.7+ڠh`1kCס%>x+=u6;NCCZ.PP1	=7ATYQz?_}lK7+YCY2R*y![̩?oy"#Niǁsa!
C*x〳mɱ99Bb3Gz5lb\<8gΎ:'"öp(ey]}J*&ϔ4+Wi"sȑIQlVW,ߵFy=!*SHA֍[
W=c"ou9~4eϠ6Xy
^%G'g13ۑgꅩjpd)mns'W~`1M$sjEYS
$-
ܒjȗ_נ<qԑ9!T'|l2N# ijO4{n(S<(	Rr#3T>@%%wPIunn=Q3X!!kxx9prs/&qz>|T؍c	Tܿf:uMip8JrUXE,QԈ?p}u95gY:XwcfЖ$ZglcY
r[u{ea>//2_!6%q+ +9O ࣛ1艊܂̏~d,/WQZ0'ISpMt؀%"s̱Ж7~4T>"ն}҈VeG![CC>_?Y!x.	.1hx`3g
X~e;3w=~DN|`Ws5X}4ej,x_k%'q[FGc_wG]dRW=&MsL	Qv-i/H^|W~6mMR6Fۧu:<֠C&}CsʿCi\bs =*C;&pD8f(,$/_
{Y^E
R0t3O-z"ha+˗6uaj<"E䡪x&
©0OJyF!2Vyž_ov;}|AuԜQۥqR;oj=8oɗӟE++MOPVǪ+P(#2j* _~ f@_S\niԼLeyY
Ksb鷪v[
Hzٜr+r{[E7KT
&,[n-ynwTȥ1` <2d%;zN~Xa
jh頇sU8ΞO0|	bQ}jL,ire]ptB6J	;jKapM|}K`w_Xw\ǵDGqb0UmF 	ćtO}Gb.H֪=LW+jNYݮ.|sS4W[dwCsQ!d0ﶅ9_}OQ~{+?y{ӎ)jiAJ~c,=Ir\
5RiުΤC$bl"Mm)|K}jJL%n߶5x+pyUD+GңhC :?9Hw;U<|4q3N$FJ?	ZEg
a]Vź笕]9mxȕ3{C"Dݩ!<`͋s|c.TVΎ1,^H_tn?űhsVfL NrDÙLJ7y0(m~!32leu]P
aQ_DTnQb	nD=q>x{4k|Wle]3{#Es'@gIR>OfQ∽//+0%ê9r.7'N{ |2[]e9MLd_~??Wd؜0@6]]7i:e<z\3>)fB}8غҾt5
k]hg@DMi_?v$V2#qnakM/Z={7ao5i;nXܢed/Ǐ(^o}|ѓ6K: y6FUjdEd0ȻwitX8}c-߁5DnAP˃'3tM``/ށu*u8*jY|vO|L^:1  4 t@	QaS%*k1 Fwz/3)mt.U^(:U
WORNagK,qy҇Wjchz'^g	.$EZe\͕;a׍Ȱ,`Lj2[4O4!猰0*ā
 `ic1Ťxb-rK㸉2)SeNTr"#_\ة/yاY&!YR/RhH|L(b-rew~1k)!\k9Jyx.H$9kk6^˧ͯ.'lYA'D )mʀ`49ؓlM>>jIx(ԉga<V="&l1OSB	
 	x''GL' ]e̖`
.If.g#;Eћe5Ⱥ<M-`zu@Ź ymkiD@C3 貛
%\4>m 4c5 >vat a8AHzɕz5U](
 t
_/pbl=WDyދ`?SScVT{JuǮ
2QlWY*VUAh?wQ_~6ܲ9R%0Oir=s,^z˅}LVPgEK0!A~}y?џy yA0+ᚽ!pR&%:8Gž%.~&xztPבj+OT]u5u=Yw !VbF'`cC&@;JϤ303Y]yw
iY
QB]j-G7jkj	q%/y5~?O>ʜL.%MŅ7`5 (ӭs7&u8Ut
)rsvj:3T?dn)Q'A;oqh=0m <ʻx^}0mw|O/yds8W.x^m)̺9hMPfm&7~x(a՝6jk/xxV^.Fd*9wFR?<Ǹ&*x9!/㣞Nb. o}.ˎPpR6{;!ڪ	|ca*Ifº^OqWCƂO;UO@_zU:`_.g&ӶBF.'.D&/`u7^?=`@onj#b<m
</e4=$kG{8AvIBQ3Zƹz

Yk|}C+4PӠJ/BޓmœN^
Vmh<SN݅K,W)NPӃ`{Kc&'Q6v0gԟC`p=ݷ2@zRX.2WcӃܗfKr'ۼv% zl"GUZv  k(?g Ĕ@T1sV 96~ ̧Ԋ*Pw ~e0re*b6l<\/vzLt$zq&b|x{A>\07f%P؁)DԎ9:tkZk7+Gp	H5qX0ئT0zܛ!{X3y||[HOGcp
acL
Vѐ<ͳnJ~ܳXtZ)c<|͒4
itp	aqMv!\'egAfn征dLx|0_ϋ
Ї)ZۼقmS@mƩ	(8bi^1DQ OSvbG	C`ǝsq}* Wm2՟
&!4QkNJή{y OBwy劒h#7Bݿub[$"铪zr,h6^z"8mIhy2.0ea^#tgbe0Z㯆<]΍8Xٜ8:Vf/ŭ&*AQ]<*dW7 e;-]4AR٭䈲&L]hrmrsSicV X|g)/A>>W~?fGYl	`t@/$آZ	Q`Kw
߱)qoNRy:ƥh\,vivfa$}H6@n;nQ`8D4ݟiܺťct}sG!$%5ðbХ)u|f8gh.s c=ϗ>Kt'{Z>%=vA'cX56`&
Ej<zԓܾH	/}
3n1*:WceDM͵r㺙bϸZܾcO$[;s1Jpur=Scep~AWo$i>Opыl,f`
wPy#|ԅUsx86 <u8eY#b♀ڦN۷Pa%
v;{bE	@)[#y&=ݖwXwKzޅ1I\!v2Y:6cֺR\<6ݗsQo;AI׀ݱ9/l nN>vK{W=~ʕ2*=AZN{>Zп/gtkg*aˡD;2E
K6j[.t+v\;B+p[Le⢺]ax嗚?E0R02e(uhm)E +[vO(O8qܮJꃪr26_'ڌsj>$t^,꟡Yq}ۏqsUN_QxL-yٹکҜ|k354FǹYGKKNֺ_:w`?" KaoBbgbXٝ%"؏?d"+޿uءԢw%qp-;iРƻ*I+sK>C1yV[dUzD13/[ڲNĳHaw0w
C<;X=U _#﯑RxgNɸO!46A4U̍@)+j(cE:nZ]l/H!Z4J*bYWKqrV"l/إ=*=SD?3sC6xdZVG~qI}ܣa9sKld¦.inFAIV.UPGqrC$e,|}i]{cP!\o9}W[(n8y|g}Z2gӷ^ug{9O3Wus
TtE<XjQ&!vR'kMgS y$(0~un=d
]>oMq'|W˵EB75x`k6ۤm*1vC2~
үE.9KՙBNȫ4H[[*h4ENy޿ZXPI ֝r9
LYuBnE w{bwo4ۜ|x:y옔]0e<ÇMD`wp7Ԭtvq_:^j&&Q;ć/Mדv8i&T MZ.[2!}@y,HM	 G_rTFgo4ڜm"J<Z<sxn_ڏEi]v:6RXFxөS[t!yzF+}L}kɖ5 X;
cyc,4/=t{C$b<Ck܅֋hӱ0n%f*zS"_U[dv7&sxm ،	eߏ
ZO\^r.<j kkM
mTO+fTSDMtQ-q%aVȶG
u3ӓ+qڢ@'
%`$IY5}p"=NӖ0>&[dם>j\|]ecnQiꡬe ܚh5-xalC0Ȳ:l9~Ъ*r6͑̀B܏@4lt]+u+S4i&YhzJ
G?zgd]gs1Y!:B1a[ذGtVA()ؗ9?=ب%/Tu,H&YS뇸!l8d\wIpTu`P;J.=V3D%r'/y3+קY	 A(Nr}qRpςzTA
QkUY/>Ǹ
W
fHs	DuH
'peRG%m&×akHc9^ ws:uWCqORڲyg/wα_<ďIg4Qc\9DL
uwi^+e|/eXL~j#
UW?>~S{jWK.o`Kl,t<'l$nU3Vf01;::Tj'VMv8uiBZ53zȯUV?n5Η-QMxq(,uyKoƖ~[;{:,+QZn՚,Γv|b/DD:_t߻KUYlzSfkhF-8M"q{5E5SAZkqGF+TRFT
K'/Ү̇.`YbO&SZg+)yNL(	)S 0eۏoE}/Do( A%BCV~A"OZ,imhԙ [d$ܵ^)MD|%S/f?yVagD=!\c@^,%o)NV~9~.he0l.gNW9klR|N;֬sxblE\nSu8p4|h܊oEKcAɳ0?\qg$OHީ]lΥ1-,Ohق$Glkdϭ3aRp2\0TiJb%>8"y~oUQKW٩ufvs`!P[y;=Z)!H
Q5;tHhq+:q8'. =oOӽ| ̩y'%H|	8bN+cojV~С~)ZŜKޒ8\MLuv bTeOȗe
<cZ 9GJF'P\	IϜr3`W٧)cȑ\Or62Y=m)ym@f4a_|w,)Ci:T5n)08`0F\
0n] VOu7$rQ{`wBzY+Kt 	)t^ٿd{dK赩Zp!>k-y]|Z!Rm<VP~za[`'؈5屿).[?|f(LK">)'J"FFs(?-z2Yx1Zbɘ #讶ZMŖC0&bٺ,lVEe'Wy[1}LA`KþxaOB|8+ç̏ KdҔ2r3]üjRR;L/J.[JS/qCx$K{ƙy+ZgC:(ٙmQ|^AWgUhGjQ&%2V~ۣ-|<'K&l' D)RD^&(]QTx3]/o:OצԂǁRtW-ͻ#9[+ȳ}y~ZۺNow9}*U$Rg4[4|H\M)v4iKOR4&zf͸(IY/PX.wxYBX%MfNZiٕb2swd߿O~[8DeRo3JՋ-yX5#5c1b7O?6wU{E|Pe
fǱLovҥڍLVXm_
?M,!)2j6*}[hq+ϭQzapa7O~Wܟg6Ar{Ťn4}#
jJ5zZa1oan~p߾{rMǔ׈l| p
_WUfRx9оpCvJچM<~#RfG;S. te^D~19w\CwՒNDƔ90إY!n9
?x.ܓ
׿:ʮv[ ˃#Jf=YXExbB ~
O%[NFЈx&'&.@73N:눶>[G:1t>6xwF--qũɫT0ڙg'*0*gGmKM0784?C-	|a*bn'Ӳ-N}9) Ԡ\2R-W/%1^ڝ{ـgPICC~O0;_{jKR~Vd:Kl+|7)9}K]0\_	a>Zs
b vLra&*NHE8X;CP	V,f]FR Ywol	Heփefg:m
,x@Iz<7x;>26*drQ0H｠Rӛyۆ
	9R͈rLAHO޾"%Ni7BKePSIz{ۡD$$MIqF*ǍzK_vw.8-KZ~儈'a3'v*f-'<މ*|x:goB[|I2t:%:s}y vuUŵ$V#uH5ME:E~ƶn۴:cY=g7
Y-7LX&V_<O]ܜ(lA_I	wQagjX#,
A
/I*gIr
:ٌ*ӞLµsPJc@]D- kK!h(3oJ4O/ҍuHǹy,{@&&VH9x>mhϑLO6kW#7Pc>`'Qrrx;)eKtZbgYwYA/||J."w%;?[V-صO؉F$c˵bk%%+qֿ-ޗ?S#RG.4^=]9z>-}968
Neuu2Av՜\֚E?%cajSTJ-
Yl7bZEU-l\oBe%b~\/k{:6z"mwFP_K@A*;p٢SPxRTY1r/YofgEĭ.-Lg8Ph0ercIW^t9
uXPhlCkŅRNm.y+@rڀӖ?DTU?pރ6$לvoɦZ-/%\݆Qac7#&#Mӻy=!t>&
B{n89h%1V]5)*syDE3!HJdM3#OB=Q~[$wyuaHڄC~koҐYLs=t`P_A+w=4+[PC J
h\QఝX+tԡ1Qel]dw_y~2@H	Tw6z"ݴ%uLZN,g8m99,tq(X-
x.k)Ўʁ!'PwޗtzP}8awܧU9ӊZ^6>mv,OJ2~^=\QnH'@{%T윴׊ԩS)Kw Āng!XחY eSTMgZ37~
cbkGz.Z;^w3h}7xl^uc!+2qk Uפ"F$en~-[G3i6񚕾9+ɲ
RM3O¡[n*~EK %3vC9G?ߟY<0rS
!gGӤDr,Pw֢7fq^)!TB,fqRtR0=togғZW
7[0@TĹ@B{ceHzڽ(qtD{>oI ہT衙cL=/@9|nOL?a !YjDQ9\4GbB'yCIns='o  E6AQTXWR%f]6#gn:Dk{}*hE#MvvK:"oL[,NuZ酙~@ViZ 9Ftff-*;F^GFG1E'4fnK3]4cm|WyTZP[SWXYf#0z{}f\Xdv][:TbdTnqҬuqZ^J߸#>^=;ݲZrn|x@yGW=I-uP48ǣ;QxQO9-`a'K8\/yUkB"|xNc_h),U	ΨmҀ5~zD}d}&s(g_7Ahu2
O4f:9fOO1yx]ۍaa)Gsu)	ˑC1!y !5SFB:jiIڎU~+~=c ]Z1bX`x zhR=~P: <G#nCuBG3Q%3_J={s_OoN}o_L[yiRҹ!\ҍ i{\]P~w^T݀3I)=ON'HRqѾ|$G	Ы|`^
	$5k#gC $\LRXf;	1m_>EY)9;t_+h,
,\܀N}ئֵqh
EeHǖHx3
7	$6
GRe.)M3ή.EByL])`(3K=QIgSulWH4J]l=^r 
ZúQԙ5b5O@gF<kW8i~'GWFS'/',?X`ԃږt܋PYObt':ExvVDK[/N/CxWZՊx5ꫣW/mT; nUW>˺8
@[M~[܋=꙾uv^@7!UcGkOU?'8s9;/TTOvljt4K J{AKWEU<^4nf1$#~sq|yF|ZG<ho!%S
:"i*vP"5ˮ{]CZ-JwVS<x ђ̄7KjMro?_t.wl3Gnqr*ȗM7;IO* IuPж9fReAT#m=?syUӀs'p,S6q8&04=ǱT׳')[#o]k
gWj(
z:hgkUi5ȡk/hPֈ 2͏r3uU
QGU,Pg8R?zyx_@ԏ<Hnz0JR˼j:Yizمxt=&uK1)i?x& F9pޥX)C׼XCZ4>dEtF=Ju-7WAģoT8+h
6_8}N䑩l'-MuԐ' ,
N$l*kp{r_?wX:DtNB +T
lOd/s_3y/T>=ޛLWX,&'i 	f;A.h}%}>8\+ *IrK3'7%;VĹ8zpk ̄^7~
qb,b[M(\h7nCDW3j_wA"bPur+}jqi#:|M	xI-;ĉjMu А-I,6$Tߝi?3^$,5:I.ln]RG
oV׿e~2Ϥ{Tuv'j^3v$[+-"C8#3إ;㴿`U|@2JU9[%r=[2Wż ȧGo[{Ͽ5y>g+?e#no,MגR6YxHxZ+7I^LfG=]4bX+@W[%Lm,OO[#֩NF'Bi=^uŠh'J*ӄީ59+1؟xZॳf} Z8N\c0ppYWg"^~Nxh!S׸dh`0$*U=*xLv%|	A&xt6C얟?ڋ]3I!`g\*H$@~d&ΰ%<].0Kc+KWѪNw-syxgdq7/69Ol2r8S	t}U\cQJETMCX0 W1>j:՟)k;"}˭Š{AxE2չ@p#	*čjmB[,sXǪ&4; -~GDק9Z uzi\J_4S=tK7!6o5wM[#@Îd$!'i
4<HF-ǎ'`Ƥ-πnUv>1[Ӷ)5WD@Bpb\lVwi&ݯ9vN|m ǹq wC5pIR>1&4Ր)W&fɏmoW1j<ߠq\B:Pv6Ʊ:|7맭'UAf9욦EdY(Y;EY~V
wP^MnVWkHEGЍS߽9+k'.ʅ,zH$^&iqfp~<xmVz4Nn+yyO䣨>h,$g9菷>hez;
/2?I
gЉ"'lޮpd=C
W(u
47ڿwxO_ε9#ٻ^2m>XZ2:o¨@/Z#)[z_rϘVACP%{1~|O{Wĸ66ƿV)~!sÍ맠a4pe+G$qGw[1A5,A_TefzDJjvTJ݄[i )

1ɇK2[)3>e2@ı z/8I}z
򒝢(]Xiju%,ӎICYsxũw<"Xue#f2;@?6ƛ0zaa_iA3ۃ
q{83R[	,NjnaCz?Et+,	aEuC{hp gΌM}^.E9gXHOQh a)vL* DrW]^#j[8.(G9?~?]0U8
kq81<q*La";/R*1zv/ڕSvQ`&|Cu.6EZGANH2IRLK*+c
v	(x,_1aH`2;"ctҢI	.JaT0KVyt"^>Ngj2z
#->
>4X9JH]	IкfL^-ی`cQ>_7kܘuR\N؝.]KEiS'QyWk
jOӣnw0Qh}7
1FũVخeؙNH{H 	4h$ZKDmWx;[H V9PZ_y ?mǈÄvG a=YL)d	OcߤM\_3Dے|D/B=Ic)z$rձŀwä́j$L'Le{]ksBijetyaYB0_!8Ԛ6^Ktk[\*o?Oѐ1ǭc$Hs˫R;W=7z]Sdܿ[}Kp8X)ע"[0"X tvY)(\wOcm1"tT +1^ւFV[>i}8˥ߍid=/yt#p:&YmbYUueAu?0<cAˮGͦm`?79N!+|еNS>w"<%}ZoL;fT:AN5kXSkMjOWj&PpICĳq]ȼ.)gLYpf`,^Ln[=Uٵ~{`/
ۈxq!Wsj@]H\upXNR|J7ni3	Ȼw6鯅ؙcۮؠO<W`&s9#jf le~q
Eئ2=pףIw+.s/ΥUo9ʩB D3e-ڷSOk	zСnE=^xoQd:»;mLa4ld[@
h+J=1Ɨ)dª/ mq8$w:9=GPl^ad+cum|<b!z~Fݔ~B[,w^"nJ*Bk]&jBt;xz˲.E;iM@>ҔQ|dxXNؿfj H:؄U{oy&lњOW/
>ok@ތ}VA[c<Fm tmVG#M";m\/4_x{[uS%1*vTro];`\ ]V>~Ѕ~ԐNjpF6XM)LXVˆNܡ?7៧IUGjoBɡN>[\i;GY?RbIz;OM[S'[dOy`uSLu*E	/YyxGt\,vH55A(<3StFQv2A"[1ط^K}Sm%pM\=5-p?NpS
"YߣsO_
[MoR</(ӇIP{xЯus|~{twjjwqcW}ە"o"%l !%l
ā)՟7Lt︧[B<{>!AY CWzHHc!?sggTd: =VQKCo*d425}qU?"I!ɺ=D6ER ;,˨Yd!h[>R@=?\W[Nl)gEj	!J$k9V+Xٱ{,^hLwc "R:壭[`t}} ~xߟ÷I)z:g	˩T)] BR*+G"n@AO͙5|c}ˣ [Jj@#o)y!V_Q@o&8;t	?îp\eA
ŖMxA0'-@':tI+Dr9UR8o'jwb8[S`f--Ơ޵\I<t@TեV}sX]NQUFDS-fJPw{
,K23\h UO+=BHzt7ŧEJ:`Q9xJ=L'f}%mnZ7ۗ-蒠(oY	͸WJ>r÷ِraj
|C=iabgjD 9ݡ暓zJ9TScmw6V[yZe:/v9AIv9$ ^GM_<3t>nBk -	@ĵ/8QbuK_;ǾOwQ;}CV+*w
׬V;qǆ{B-]~l>*P)V@JvR)O5.`oNPb<=*YlW6 v	v  :jߗ-v4PI:jn;uZbv`r
PݵJ.%
	9$k	#xze:֫[aĺȩ^kHNVf)ѪHe!
U_X@YaE
RHFqv65s/z/ǻ^'ZaSr`uakI8;{@|,^0VhFYCN7 Z:`qWZTޛ Ts+G=
MY_{N73,D?e
o9Vs4(zBGf?hm7>5=EeG tƎ(ma\ҧ7du.4)J+\U?v>+Fe7fм>V>Y}(RSb3{'<`-SL,;4>+kZC6#YG<3	L9/"g@_߬~$Oo&k'
gUqb:zVCrQ`zHViџNִGv^M0ynVF"T<X[%%W|ڣS9q1[[гhKjr0#pWK~A|{BBmϜFgD-Ln/y`/xzRmCtTzNT#||:[-!&+i_}Gtbj[P-gwϻca=m՜0,1cČP,JH_0RKtVa
A|hR;/6dlXdI0\7~Hi_E!/6fE9)id]ԡ;Rj@LKu[sw7ȗ,r#!Hyhr.pKT)fv5<P=_F:jRӋXP:"W3^[I^&PܒCl588C3CgF^[d0=GL(4xmiul
tďlpֹ¿iya.Qp56hX!^[8'S<
s*?r\eB6?vޮ8zrz9 ]U	K|2W+
T!nXƔ 9&Ǔ%{
ys{ʵj
:FŤA5׋
	.s₆g
C~7Cݦ@ 9)59Urj:],TvGYA/`ߒuMߤ}[LoI9=?hSOפ*CKGWdNR+X@|ټ^	8r]>߭P7HE3|Y$>鬛VNdԑ
Nm=p{[DƓ9K4mvmT;Hg\3T.k`^
m^DX3<$Kڄc ۺ3
?CV}wk+/LYn݇"=7	}ʴW!:Ni
ۊ7]) -c301).q;
]򡓚>W!:j'ϟ~yV-ς.p˧e _Q-afY>x4T,-v+-?-K!fUՉks
C!2!{-(e
̘ϋ9J\	ۗj&a=&?2\_U^afqƐ>lL%tWXEKTq(˦VZ.i}S
#CjnsGj
}d7Tҽcِv@zt/6t&օ Q6ifU_v}b2])yV3ZYfD/4Ix<Xֳmh>:HH-͔`GON|jSzJj+ |o+<G7H,Ls"%^@k42ZmL
bڟ=;O8ދ2댗eE>]g3=;rGu+$,K>mNê4ضN<CH:t#Qg;ZUe&QN1fCTZ؀^	=E327~T"E$f/R3>j@DQMm7N[a)QGA1`yў5N,3_-Dl4=g&Lk İxE`z;=| $iQcGŕ:7sDt<ހ;[h]94/7~U8W.qE;{([PU^>B|}76zF}R.WE	nSA!rUЏ&Hh	rߏ
@j`j`6톳ͽ}8zY|Q|M2r(Icg\N:R-6Ε$}`X랭OFq8015ӳ\V@8G"ݭrP77gU
0aG]^,<e3lR'(AɎPdg71TO&<mrǜaSu\>Ps@aPD{[}"4d!)ߥ@谸{3	G#Ӊ	c$STyg'_h*w0O龾,hrrgT;P۫\hDZ~n7\eǮ.aX'R[kCĩj&Q"_>x$R&i*QA$V#,hG8Vī3n=dMf!~
pyo@7
WӒ쇻mדqM׼#}g sJ:ں6[ˊDw|JW9!Ҷ?轜&L ̍J%ϛ=7Iv̨M
DSe^dsVfxW uSKSWO).uMnM;hw-
rܰU400Ut(0Oտv?'.cr_tR1|,TtԝTd,ZhC/R]`[RG2h*GZ;%X
>B5e鶽_>'ܲmyT~֏J19[ڀ6	<O	}O.g$?p*nYN.𤐂Ԍ~Եk${Vؽ&$Q?$_DUIo "˰dAhe~mv>?=ɌFT/ 1,so*O3$<z9/}H'1u >j:F(nyc}I5Dob̛0AQg=973a8FCPhaHRo$~	2S0L4	@eї-	ݫxqN[FnoH|:Cmͳ
f*6)Yc:tKT~tW?D$^-m z-ciZ1j0+u~{
@,	B;`jà3Bhzmפq/3\wvmSxfH %uq'eU*[^GKKl>~eupQىsu8񐩨QwQk3cw2b'QJx*n#uywzPWYr~O	bG8B VJeʵe6Kor'z}M,Z iON@pD_/mC9kNMbؾ;aw_P'7*\OtsiUMIo2kg
9tRXC!YQ/o˯1S~\QNXs$ش2moSuV9-8 j1b%s4|\F;_jwuw
=v8ayZm!mÑsfΠ%9OGkM۽/劜^X=K,/td=YbOuiM@]I/Xru;į}^x##a {ײSl
~D'2_]e Ϗ>o
SHlvqhnpiɧ{
hf鵽Ǳ0Y"/Nd-PZyFWܨ+6T{AL//7KV|8h,&RKg}Qw_gLQn tE"YNԥ^zV?H5}:n1BH2O^NԽLH>~ YSKm#>|K3z}^Y|_`q	e@u]%py3ͬ]早wo%e0N>'Yq[:@Xw=8ru͞re/29{ ?P()lJ\zw$`+Q98M%.X_7y
)>z#qlG0FN_=0ߓG[P<_g`Ar21Ή4=j׶x~2,
nAVU3/O[ܕpŸQհYϳ!Oa3|[Vl60,N9e̛t4h~/+
۾`]۔L!O˨m[WRd<0balB1)vQ@|(zISU#H"XTLQhޅ>-]ڿwO˺;dpᎳ?LF]3&;xfg\׺͏w +)&yȡL1S}/dOkϫhk9L
G~K(=4D@{&{iPRkS^<f3P>d)..pNäqyZsbfX};E>"fOP_b?N}ԝ[tX ufN9xAcȈ-ES؂ɡ|A'c;{)y'ŋLylb)pesF]<$aE)?ߕD;Ey~Z|3ZӦ3,=#ϛKC"}a]WW8ٗ?hҼK&"^^	X L/Nˑ'` 7lC!>K3Xcii/wct+Ibm,˗Xڝ3ØQ{MSԿ~W|h|wI\NA^EpY(888owٲU@T2
Q08a+;'s!b};]D4{!]j[y{FIz~4<3L
`ziS`5@_JZ
]3Oޑz4(q\tb,1W<Jo&F 3-jr{=
Cz'Yl:na|G'8&S}
ftJŧ>A@=@geA5ɮ1\G:saa)"Ṟ{	dzJO*'1¿C^ }}gBj4'ZlAhj\c6+r5DzH[ϺfV'vnŗl?8;Z{ѰODVxH"'Ku@ehn
GWU0B7?54]+{o 7Ǉ.p}אH͏>>v^1<{KQM_CUeMY	㋶ז0B߲Կ-p#67Iqmz{	 £kؙ#a;Κ[R'y*] (6%v4=u4L^s+_yyFD?Fo4\.xutrH,뭿x;|$`$销m\TvEa\Qt/ X\d%YHk81HY@*Er<E]:O>]8wApѾѧo'Y _r[D~afSb~=w+w]gs!WWxFgHmu(JCvfYDO7^6yĻj݂ijہFQM^ӱa9=.;Y%v{귌uKHxm/+RLr^~z8o4Lp:hɭ˺ [蚙Ih{gT)ȑLKk@a1,?K8@t^ؑ~l@qb@-R
Ț
ȉIVGt䵻c?e_.cdnYMɽgʣJ7_.ٿ"F1#ǰmGxu2:
6)" l>An({5+VwYȋSDRO#U&t}:d
 #)y&,\G)XЍeGWVt`@}o}pWuJ
O͆ K\Y2c1%&L#T|u\LԌv:N$S,{mz21ij}|D>'O͊D_'E.|<__#7 RE2NP + ^+<Ts,Ajt];Ib* S3유!|͐D+q@Eo5E8V(hq@箆S8!/p
cdk{s$i'er*?@@vE-bMoOG+͢u^)-bTE9Ԏ`PVsmojUޞRWAX&2$X9&كm]ơiؗ۞?·<(Jlfu6lbO+0]hi;{S_@[Z#yt-,<|@{{[?lc,/֩w@̌ar9nKPw>Q=1#oo$.!
qTՑv5L8ރg~/ޟA_	hNRZkeUݙfFeDcPo-Y#zٔMeU70~@AAۘHzn+|("11M
7Yo]cߙ"u/?z_nt|儳~8WJYc/Z)sB_sZԟv!(u;]Iu?E$B
x7`* ϧ*t1]{ԿZ_fw88W͸X!`n].Ǉ~x8_qO#=o2_&
rB*JXֺΥ^dAuIQ[f?uY@8Ƴ芔}Qdt9y:{ _t{zNi0x)ѰLʷی=ZQ OFyj[lI$0<U m'Jѷtsmy`UW/ >UZZiKR;7KEX=r&jr_	vϭ/ɡn҉-d#G__?ESTo0s?#m~Q3ɝ#_9
z"L3~]7 TU`v::n5vWb+W[j4og^M^FL<&.{	W%Rv5^U|H=rn}*<{LEZKD[v(I3 4NM;XDͅ׹ǀ͜E<*K4>v-?fxt>~)~ >tx>O05A\W- bZB{~[OyJF3DHM1=p|#/~]>W;It6/S
omAgR\F¤H
ͶE萮jQ;y<7_-L B{$~vrٲ0)0E?_[I2&
{45c|EC_i'G*_`Y"W+0+%i,}x&}<d[ogRN۞-/
Ci"J5 F;.Lvf/ɝ.,-s~:^Xc'n}"8 cYd	+_V
lM&sX[=4b0e~@tl]a
#ԧ{mpe%_Ȯki18#mɑf00H쭑~$ *P@UL1e~0Yق|`W` v5C-슍^M=A]
ܫ;x pjܑ#xGSc>c0Ø|5϶'PUh-PxVcԤPk/#B'DWZDLCpbH
*+x'eAT*i`;sR\!?+,v װ"z9$-2Iذ(g!fK0qZ7՛@|k<uqoB6\Pm:sW:z-5FG-c}- }Fp$yi%.CaAh^O;tb=x ݐR0~ZJo+2z[fاM	خ1Nq*<e`_̌Y_h|uDqx݁e`rl7| 1RM1>}G<_Vyѡ3 ;;ɩ
4P8.jl۾=wAz1cG莼iiƒc|.'M̊2~zGٵݹ77!]N;;/rag Zp͠ a"ݬ7?78ڔ
5{<BF&
UAZasQ:쀭5@k*ۛ@݌24yV	vR}u/Un5ыٕ=x1/HK֬g\Q~ZߣX݈}h2{$/S0AeߋVٱCeɽoy=4trjxtnn9'GPFdkc#\zxQ&4)%Ad	e>D&
rnD΢vV\.YUz4&#Bj~el:pQRH
ynM؏Kw@wSHBY 3oC8Z~ݝ4mUO'e߭~MTv`I47z
\-
NX
[ȇh__)pWڞ&
%憇{]2#ot/N((+`e~UK0@uӮ6E֒[:p8IF6-`x+3CɭOOBOhkǽn_FOXKunW;BdiO)rf$B
<%%_ejqRlSGP[?kgyUc2}P2m'X{=z<z-
i#;"&wTkfiǯbD7`ܛ>J}qHieQǼ+y-Z[|v4p2֮;Uۣ!ؤ) u-럦8'ިIIFL"Zs5Mzig19Pxˊ7	F(]إi)қךoic"GvYia11FU3vme'|K25aEc1,lnMt9*gO,`Q7К136KColgHJ;?oSYPV4qQLl8KQnДן¯;Vw'`XaIzWNI}-,"+2nڒopWMAh]:
	Ӥƙ?̃1)ߑ4Em
{'J6Ӹ}mNqQڢ
VA_sLG	@c3!8AcZTm|9)z7/aߩEljqh{9*泹;V|Rhũ]`@0OjpZ{k1|*("Jg>u%
u+@[7ӟ^O/6wk%Bx᜗tT1

SVrQi{~\*?-g  <Vw"s3
FN4;O-A{"
	(0?Fn`	O5:t_ 4=U2Z/*G&4V
۲
nܐ
pe\RkJ9{ LȚMR8$ٲ>QI\P$w=lW;T΂t7юϰ|E潝&!]p/\J٩5PWĔV[O4~{,="XkBy*6ۊ؟Mxz^DwzW]s<&`)6IpHPh1v1bVҘ8s2[68PI* %Tz-N!r]:Gͷ'p5l1n&Lׯ1`nAL_d7MQkӠt0?Mb_"փ&v;$.UR9GsvclgNƜ~heyOUGhBj:j j/ji9" λ9K!Vs3$4W~;"K.#+lc4bE
,&M2[oK\_)~r7ܜeѳ)G?[5Fىg;G&QnƤ 3I'k\:pwb$_]&'t{6	ZOp*X˖"nxMy8뢭=\<
ﲖAi]7{Wd;I)iϽ*E@z0f2%f";t}8$B&ca5
0[qs6<46_|f?NۙCD@-.D#uua^}|xo]QWĝB-5߂;\e|[lg*YWQ6976٥V;B!'m&i&N?=^ 	1k!tԐhĀ0EiUW v0pwwԸ/e tz㊐ʲݱNTq^.qCk\7:<]ps:ru.X8c`4~'TkR6#THZG:|-2֩S%}o~.v=LC#*gd
>:	Skse(ajtWw
~1RIUȸ-DX	&;4ufQwK/OOFx^9,E9z%SϞ->9tuL/5uRc\%ZC)TâZWEޓ*m\XmBZ{@yEv.x/]rtlbSwHxMe%z;!\d%UDBd(34JeX^""6uKyHLuRl9{[S]YN85aY=|! Ck.:W|[,
oeGmoEnߐO/q&yGu{`ui1ﮑC>G2i'T^gS)sB[sde3H)$vÞT^$q}Yem&|[nkK~偞b+=axLGюTQXiG_ҝwGms^MV`;ɚ;; J^Ey
ԣŢ4>Fe80F9[ɻpވL }Х'xܥ|~;s,RcNV6j*ԿxS`a7ӱqpۅԕyjkqn1>E=inQipKv͞wp WNpQT"@4~su0i$X*?rC&E
|:z!])Xv'a]Oؖڂ"q̴@<J_H1pk@Z20;4I/R05ok}ƻ Edc?`YhO
]Hlmu`Z5/!xsjk240ƚr#L-[w}aZJ\+ ']4GDN^>
`{K\bX
L?(>f+ԅsȮέɵ+ YOfnfi?=Iz..^k]q_JHUGRnGx$"&Me~[}>:1F4뻧Ժj7@/@PڊgdHZCI|OJ=7ta[YpZXdkP/*	6ev]Vi0MSP삐%zbXF1~d 0]S bVnl@&^k^+In~W<fKC+|Y" 3"<7hϮNs+GoFw'ا -m`p^XFbL6Q$kaZ&nw;vUhvfAN]>xѹaٌa
tչІʉ{JX7) #{TG5e02	[[FIbOӿ 5|;cm<7(#]Yb>ʎ\ᅮ>Kۆ*g(~:	a*sz+JYwᙕ FUAI%'{FUDx~K
$+Y}<&+S*؉ux+c1W^:e+5k[oݑ8lpt1P60^Yub]Vǯw	秬X Q੡+˥<:}cdx7䞐mR|^.64Fλʕ~>'^jzQZ~YAw)3;PfH^hD֎鄀zd=N^bODw(t1-}ekT瞱	G"-;肙f+8C1r/B(?녲5(m6y^#T"b_y(Rxr(9+lRԎYú9=!Gq Z4K+4PĸϒeHSɀRQ:l*[
J1$?T:
LJ97tdnd
NGx4f+*"bﯱ`DmY̻%Ge!_E߳Ch-+5%(&O	>s<#]'Z>ᜠ+F\jd4E)	U~^1EI:zDj٥D7f`sgZbO9?Q޴[%9b[̧,{aƝNXFҸf/m'9ѯb˽8CVgw-^wcq\Q^7λ)+;]|^&?FzĀLKtP?~fap8Rg{ujLMy+_-6E6 6ok$zGH\ Y*IWDyk)4Mub;yM!WwЭ5\eڵ'9\*M➛:7PK[[S6 !^ PK  Wz[               META-INF/BC2048KE.DSAŘu\[Ǚ`!PAGJ)iSD$QnPPP@);X9[fgo}^ /\	a0`A,ρl!P0 !H0b `|{_ua"v@00-evtwCp lGDpw;ב-\0A)UQJ5Q -	BĄEH1-A >0 Zp"6]FeOL~De%z+kzxgiɉJ?c扳JpWBޚU u4T2+&f'}ޅF/gv
;RWrtfybx(yLN2}ig(Ieٌʲ~8mqxg߼z{u8%7n9gBtlH	Tg}TC$]/Ǧ_lxJۼA`g Ud&@A1ʩKZxM.p~Q3%t`/0`=zhBQ'(( B6@ʳepr焺}'R}])9.G89pAuMw-wO'/Vx<`\gVDŠYvW;A5iٖI&>QJ]<tv̴ъ:[rq_s㐵JAGJjio./zwU
85#pQ<A,:z峺y(<GL^<w7YqF|MY<K6ҧc>u-/&uI8B E U*
O'aEUVXTQ VX#Ipu[{l/`Wpq,aUܬL$axU7#~|/[<ۛlF&oG5j	xE5*l+wϷiʥ{gZZLdʮ|wyK1!)ڒ9wO]{Sj;J,QOoI9vr yz|3W>Da0S:5@iVkQU`pI oLkpɦ* LI'Z[É%-iN]$1*?앁,uU$*(p=w'Kf٥sxh{`ԧƠzH۽	ozc	Ga1dtˈUY)Ƃ[m9X$?Pyۺmu+rT)^#T})dIꍆ_45gH)5/<Mp
Fo۶-`Wd7HRj^Gq1G fI!΄+Ob^ܥcj۵G*}SJ+#ϐmǋ1L˯ɀ6UP7۲qd~	6[,K?lJ:~JHxˠ(
48GwmC{HC8_JsxliOrpFc9w:t.5
LXڥ
	m5vb
ˋ؇[(zk|:jDQ=*l^c4j~uJ΃C~;ϔ;,Q&xcJNC.jvA$N1|249Qˌ#'%pGX=@yɄN^p{U?efIc-;c.\yڔG\PbA  8lX>>opuK*/"=oº|T@=ޗȀfZ+27-[J0+Ǧndmh䅐<.E1<aC'dei+rX^2a(G}/2dƋbeJTk"1RcƠ~B%gh͑~6"lhmّDւ=GR{o|ˣ8]KZ;Nۢ,$*nn܋dM4+lb^YVGTnn퇨#0t. A?gϠUp+'i2lo~
?ly)t30\ތ7چ5-UyAa,TofY1Se.#qo9-	kN{s;
ܱK*@Nkw%6S㔃	Nhmt\1`r]ŗLʼECG&"b@	p/RX=BM`( l
|&'٠Sn-JF;͎"hS``=-@m)IQ^Sߐdm7~	utA[zm<뜓^7Hb G6M I@DXDTЕӀwWc3}\,_k06C':UZ7xuAW &<z-En.wۓF?йmAM3d/6oRebH1+|SE}w.CUQI4[rTfFJyp{"edd<l)Y;8r>G8K5l6U
(MRLpVG%"^۴h$1sM
CIڌTNky
l4l
s)WBȲM(vW$
2;F IfxJruss>sP|gn:rz=kI	>v0Ho/Ӄ[q49%2".j){D [DPl_[s*bWs0WHU/\jS6Z0ܧ	|#!5Rl;2;f8w\?Cqd{&([Cv}_`@W<@p!/k_>یD
ZF/Ʃ
wշaA=7?	^shq8?@ Hj
 
s@=ܭ=mJ@0eaemyOYqPwM+^Ak/4`~/+tss4/E> ? h|*1D#1U-_&hC0bO3Q(hp&Aer6?q+ШI|Kg7vtZKSf^GxlK[ym}2D6νP{f!Y*a7
#T1ٖ$=TK
kBG}^}6~M:=r1Z)
9iAS䚛XАxT@ҡBٳ̉+DjXMtdiݎ\rn2.Q?F]C'p@z2L|}կ@^+e<"C4_	nKkiƇYgd<M@%Kq}{pYEsKT~exGC>[ClEw^Ba-N}>gx^B]phNA\J%
&d"0`V5lufaҳX)gK&X}s&ij0.E~m_,z>Bvnթ,2  -]PN,;<`;eeX	2Pvl߄_HD?H' ȟ7B_1J&,g&O]Eu"$AzʵSk('8QZaόURޯrJ.
2HsOΝf_!2]ƅ1&ݍ߷| z43u S	i2_G15/Xkq_<jx&h_޷5@@7]Č"`h/94M;44Vk^Tw"Y(Xl{ȦCŞ'E0SIҸuKTܤ禜t+mj2K08X8Jgr`8Hedyͥ/f2趝&j׎
)gڻw)Cr08	ԢWO/VS
8,1D$݈Q?+FhG#]H`Ni+ٰǇ&
7{"cPA]K=Oލ1ڙ28%$̣
;ONĒ
nWƕf\u,
5V9soX_Yb8ڇ!Q'Vk:?ygB8V-`F<leU2i75|;c/Hgߘ4i@
AS-ځ}<
_OQ3QdHFk)zcYs֐S(N݊4㹸En?K6|M8~LV;+p}9m29˚1qcg
mLh"E-ڧOtgn^rf6s
Ѱ-4\pm-X0(Gݣ[
̟3?'UƠqmb*DvhNUBPp)¤#@H@3`m9&z3NG+Ps
jk1ٴ㭾, ЮܵjEUJ/ȋuxԺtVYGz׶[Jϖ|rC>]c2w	I"3v)k^yRʗ&ib*&͂_RVzw0sWET	pgdY.75Lz9A O@[Z2p2^MdX3.|j/;󅜬)G[dۥ=5Oo':S nf~XژќǗ3>~dܲr`_=佽}0QQ_T,@ $߁Ŭǋ7f_J쀣jK`7F-N꯼Jn2KЬw2U|ym>+MڑM]|ĀHCGKCt'oarEr9&^" 1:|l}R``Ⅾ]6
nUr@usvu
c4)Kf߈.!z/>OY{<frL<_r6yGF^ԛ-Ħ>T1󷛒B({X%e$E>OS
CNS8i2Ff
SϽy-tϬuFBTsJ\ko)?It]jS]fJnakq<㔼E=k:d_O!U6"^=[D^%1WT[,Vg6<FiTrD{
;\*y\^YxF˄yK.K;	ӷ_;
1lOT3a,), _ دc[ʝ[	VTQ[֦k_pM?d	~QEH(otRN3 O9X>#%:@O 0('Ο˷zGcޒyNQcGs#N],ahdߍ`pe_ˏs}@E($P'uҰkIuaovO@N9x+0J1Ŷ{&7KQ[lTQۏHHgDnU}~j_&Mu7r5e8vǈZ0!rR94Fz΃<e.[N'ux'F|56-k=ۻTr۠"|C	0zcEce ï" H~+5L"Ȏʃ &Q
}(+<P p
BECtSݍjBF/S4ƒȅeW,GB 4PjSLCM0Ι=e\o!?(S)C1`9OCת
C̵	n5VkPѶzAb$3P4Pީ@<>L:8tqYj3yO7ێ߼A?80Wҷ`lηi VThr)꤉Q3@kt:\/P7(s4sʘi>O~FDC@CVQP'GTdoum1hW#ExR-6|/Ԍ^YWzb@Tѯܲ~Մyo^Z-(]~2wƕA3f?
uGZX'g3{YōyӆmI9)
.)
zs>V'|laaT
.\x dدY$Ogy!Hg.'/҄KOz
NGCRkR/}^\RȻ)A7S>M՜V|j҄Asj١|wIL̟pcT\tPKLW  B"  PK
      A             	   META-INF/PK
      A                META-INF/services/PK    A             (   META-INF/services/java.security.Provider/JK/KLN,.IJN+(/LI-s8e\Z

qtk PK8C9   p   PK
      A                META-INF/versions/PK
      A                META-INF/versions/11/PK
      A                META-INF/versions/11/OSGI-INF/PK    A             )   META-INF/versions/11/OSGI-INF/MANIFEST.MFn0@HX0t	TuhJU+u?Kpq`;({ S$߻WP"G릟h*MlGe_Ci
[`B/Z-kLW~a850)B+D$L!0.< +P

{<flsYnpѴ6Q8H6VCF؄Cf|/ǠpK2ps!GC;~DuD<ͮrq$6	t]hy34@/ahsi@{;g8HR0]{_q􎛚>BK!)+M-C\BUh|7nײi2d|>(~PKf    PK
      A                META-INF/versions/11/org/PK
      A             &   META-INF/versions/11/org/bouncycastle/PK
      A             -   META-INF/versions/11/org/bouncycastle/jcajce/PK
      A             6   META-INF/versions/11/org/bouncycastle/jcajce/provider/PK
      A             A   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/PK
      A             F   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/PK    A             ]   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/BC11XDHPrivateKey.classTNA=SJ""
 CE$QHj_Plw-[Tbhbem&LgΜs KHF@N-;dU4P
/hB)֑J(\[JzcGoD!<uM+%RJEGI\l੺I
3̶᎙PJ4=oAø	YBnbH]#D⿐sk&`w|FnK1;~Ghe[w+S"jGd&t_ܕ1-.&V$0$r֨!(xQ0M^/Kk-5̨{Ma2ZD=yWR'j+&8"yn9D,	f$P𔡷Vv-k!Wf^UOxL<& 
I8DƑW떲0)ZxL,ޮFޢA|/чqvAeYvynU.R270k&w6yj{iu/b 9쬍hK ͡3ϨI"s~H#Hg4`y/BVO0X%+u>wuRjL4~"z{gxXmZNسzՆ	'OvDxI ցPK"3  :  PK    A             \   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/BC11XDHPublicKey.classSmkP~N[[eeʵ:DiAeKM)9ēmč%srɯ XD!2& Kx]+F=%{J?!qVB[ZFl׎^^N`Ge 'T\c:ri#6u6v#T'ЭQh
:=D	&(n66q1CJx>r\<e.ۮV_$Z	6
f:n{r(E }K!
kU2q;ȶj%wO.lwyd	~d{nh<A}JǶ+' B}W!I4yz|wOjER} Oh(@@>m)޳=W\<߼8?4߀Q^xA}}^1HUb7L;%<g4
PK    PK    A             b   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519.classOJ@}nQACePDQzPQu3
ɦ쮅|'G	xsgH×tr#Ŗ@F\%_7{|hXZ՚u+Sm-d-s6̗&_k5hTG.p5'κ	3p@(e7k1vsS`'bC$}`$`XHXPKD   B  PK    A             q   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519UwithSHA256CKDF.classJC1z.,Z7A(jTEqS,xLm+\)
>%WZ\̄7`/7
n+ōfa؈_{-)b .mr5I;~W%pSF{4Y
1 @&Ak;*ؕ`/E˹Y/	F6a0*J/,_
1 vP.iY.$gT#O))~;Ri)b.ڂ7x7h?;k
0P_wː}%S#̹Λ~J
c	SޙacYZD	30ns
s8yC'PKc&j  y  PK    A             p   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519UwithSHA256KDF.classMKBAQ>4},͐`FdEIj9ۈ+3qVЏƢUIfx9oϯ vAp]Tvkʕ㺇C%0C\g#PHZHؒ9~!8|QEVu
غReaXUIdCzO3JM3yY@[$@HsanVS$?h.SE[0
'h@Xu9Γ9:mbɐ:ZĐt]8u=?:2XE5fۓwqV0N@n3^y#&1)N`3`eIe PKe  m  PK    A             p   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256CKDF.classJC1OZkuѺ	JU7EeLkjXJQ|(1f&dp
&3H1L_KnkGbirrP
0glįͽk6i;EdZR8)={HpƆB 0B~jQBz0aJK~"|EnH#(vVna%V1 .;ŰhHѐtT,qjJr'C9BGu_YyW5a8Vː.*N3XU"):1ŬsA_k930^s
8C'PKFRi  w  PK    A             p   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256HKDF.classJ1OԱj뿂uvZ"XZQE1)LIbe˕PbJ7?}xy,RZ]Yֶg
Z~݇2.q㾍x@!ia#mx">-7<dsPUު.?Vҁ1CNj|0K/rG00Be6a+y<&#EGhڤ0qGV+ɩMQ\4QB+z#wEh@X
dl6PttŐ9Đp]hFƺnrG]aT0,]\r5P(ϲWo1'<),c+.NIaPK9M.c  m  PK    A             o   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256KDF.classMKBAQ>컠MP7CEfm4n#žY~@?*V%-s}/||F	Żb{cV).ϪRH!2q㎍x@!ia#mObK$<3Zg* cB:0fHMV.5eId2,
=bo}#aa.2 R4%zAd$%ŕ@)b䮚'xK;a zª(Av<,3/dHӨAkׄZdkEwƐ.\_=Wmd
L1P0ceIeXPKbzc  k  PK    A             p   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA384CKDF.classJC1z.,Z7*Z*UQE1mRrb<+EĴJ?^ l`&փrZa؈_{-)bW#.mpI;~WEpSF{4Y
у @&^K;U*ؕ`/Ei'F6~0(.B/,bFZ(*EUoXT\IN*ɩBPRvPiU4	ovgdU]`J[-C:`*
1dμG&vc7W8sƴ>N,}/W'>Sj!L֘z?PKxTij  w  PK    A             p   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA512CKDF.classJC1z.,Z7A(jTEqS]t<II+\U| JL+0	o
62H1\o
;WNͭQ9 Á5--)bW'.mt5H;P%pSF{4Y
1 @&aƵ#QBz0aJK~"\EH#(Vna-
1 S]vP&7i*Y. gT%()~;Ri*b&ڂׅx7h?k
0p_%뿭!_1L2ޅ;+ESxc;9k&7+7`^s
8EC'PK#Zi  w  PK    A             `   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448.classOJ@}nQACe

JQ(^
dSvB>˓Mx3~}afW9RdU{ʇeUY]1%;|߶ђK1lrmcMN&ϵ(([eTz	9~'&UJ&d/CxݢQ޳vcʡ(^"^H#cKIq0PK+H   >  PK    A             o   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448UwithSHA512CKDF.classJC1z.,n((jTEqS]t<IɉXӊ+-.L`fB~yxyRkkV+r]c#~mL]I."K ]Nd36D ,2wUD+!+-_sn"lbVZ_X"Fq@M$޴dFUS$?Hh	^:ߨ:ȪVǻlg)$,Yt.S2UbȜzMG/TqL10}i |y
-W'?vS?PK
i  u  PK    A             n   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448UwithSHA512KDF.classMKBAJ;hBIRPDVXx23g2
hLZhΙ9`ki$򷻻O>4/raG0C\g#PHZHؒ9y1	C:)qE35!3d&aidaPlG䁏$2`aP1l7>yy_@[$Q_HsanVS$S\
4QB)j};"x	`Ҫ/f"CN!Y(0LF-bH_\Dƺ_nnal`e3Xrq֑r' Wʳ7$^`zoq+1U}'I`PK:kb  i  PK    A             n   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA256CKDF.classJC1zwh	JJU7eLcjr˕PbZq%Ņ	L|? vA!w]*>*w_;-onmWΏhH&qi3\DE-#-2ڳ'
gl2Y"d(qɏUD
!+-ߊVA7"l`WZ_X*z/!ECo[Uu\IE*ɩNSRqVECto
o`dU]`_%ː*NKwLU")f-Ǽa_{C{S9~ϡoIaPK g  s  PK    A             n   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA384CKDF.classJC1SV/MTj xLm+\)
>%-0	oֲH1K'~R?0[e"EĥMpYiwbphϞ&+!0agԸGTELrҒ:TİY(^A4r9LaaPi
aū'-IkMO5r'9$&I^Hʅ	:
ߨ:Ȫg)"CJ/!](^1d*IKA;~*mcޖaNaeZǘ<{Gc/|9AŪϡoIaPK<#g  s  PK    A             n   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512CKDF.classJC1OZkZ7&(JUZD1mRrc>+EĴJÙw X Ő{TqVܪNFy2"vm&]g,Q[^1Z
GZ8egOIcdGP66?QŮ*~+bX+or?D,&10vr녿ef,/%EKZSM\IC*ɩI()8*r=BGu?\YxW5ghW2KiC{pfb?~oc9oK0'bWL)ސ~3&14hNaisX91),PK&Ag  s  PK    A             n   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512HKDF.classJ1q7&(XZQ.czSڙ<Cŕ&pN.w9

1njGeVcw{uq0ư%L0K\oQLZDSK< <X*"cB:0e&aFr9
&>Lca@2l*>PPy_@G$@Isa^VS$i6+F#wE	>i5V%q}fyq2˕kM+׃VbyvƐ6\[ܞƒqw{ECL
1%a+aeI29~PK\a  i  PK    A             m   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512KDF.classMKBA>O6BQ`DVQHZN6dܟ(1i%Ң8g>r}l`U*>6Y^=2q㞍x@!ia#mӖObKG
t3J<Yg* cB:0fHMVx5	UId2<CP1l>Kc@[$Q_HsanVS$h.SU[0M'dU_Xu9Γ:&CPe:ZĐv-hDƺ_nlabuesXuq61N@cH޿bz^~	E]tX&7PK)
a  g  PK    A             _   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$XDH.classOJ1}]u]=^'(x)1;,Yv~'Gix3~}q0z/JW(7ͽ[=hbǲժ,mL^0=Go䚵|=۸\XgVmm2)ls3]	m.)d"3W3x.DBh-YB+짐ۢ	t"K .O%sY&VPK;si   <  PK    A             [   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi.classY	`^l&!ل#1B8b $P['CX]wg^jk
*X[X%b9Z
-=]m[ڂ{7$`*Gy;Ox8eE2%dFqvBߥuRT?qSQ	
=US5!hfVٶW٧8-ZO}[ W߯jO=>mc}\X+*#2Nu.F?IyuBƮF+s/1	[;A
x~jTJ@::^bM@a{w.]xeXAJX{P|FY񨉄Ui|>[ѽeLBcY1fe_]݊	Y⭄Dj;Rf`tmlj]VB*t^1U%!틩#`4(}/fe8׫4x{|>Vl+jDBXF(L& Hͭ޼y7{U
¢^JUh(JԮt;[`b9*W˸kX{OHDpRN`ê MtFfgP
pؤvMxAU%%ԍk,6Bz-h%Lak{غኑQYttco$46>16Vl@MzZGS׫zW^if^'c+:LOu{
ZT+#/N+42Ŋmh;A"<\y漺۪a^#IaMQneEIPK.yNRA$ed&grʣ'5}c:<gōh`/*j=J9'Z^#Sl7h2|)jOs)V)+θH[^T@DIeD-.E4˸E8RdקBbpL'o&qJf=rICM!06o;+we vWckvng?D)zw=^7o0^nޫ2އaqkIt4ݢɈf 8jrV8}؀v+Ā TNF	!h߇{$<OL=[qMr1:8JI$-f)^>.xb$0Op*;-4[R4QCA
$J9nF,>n-c}LIe\d|^`ЄOkMY}qC3KFY2aP̔}0]cz!2ㄙ`;Q?JZ/vJ%3ƫ$ڨ==I2a~MLN4O1j=͠_M{v@ՒPipߒm|	"nS=FOO+o1=	ߗKq^
zz+#Nbci\t>i8
mgy$ImLxxϛ5NL+'pʂ_q1EinwxAe[E׀!b%ةЩ~.Wb4X.n_$Uw11/q"ΰ[0=fؠ>5Z/11oWYoB%V*sL8ٽ|IXQ ]0m"aŕqƩHDE,JҬ/㼅
ԝ15gDaٕAJ989`n_w2+ *C87r4C<[u+mJWh%ڔKgEŠ7;-{MG;qc&MjPoWJ|M	 t4.]wJ	5"xZbl05qy`=mun28O&y\&8$xЙ`KVԙ'q4x&hGpQw,$$	b-R		D	ͯUsWFO߮*]r+Ry;	ZMKv.vwO߯]s=j!LhsMʡk@5Q3<?q+U7>s:ť\	M[z`yקU(4|He-ã`jh*ʅ$]mc֥bbM2Hi0_=SrRkJYŨt=y9"99
D
Ҥ(QL93)C qrؠ$G5
'9q&AM h
/oq<i0:dd49e#_Uu
E(t8lC|0W,2DGPe7't5P=],dAa/(wV$c_µLO#h*2֝Ć!-'mۇqQ!ל5bKin\^>;"!a0X뱭bPyVG&n#7i䖝GCE~
EǡyEd3uY<*EzM'f_!7	_>@A[xCo<f7ljAl!kZ4qjϩVVZJjn;`xf04.kѨZ`FpgƇq9i,/L2~S5Y


-*~!"Z60A#<=V}!>q G&[!	?#82h6sm#;I0ԗfU٥C8*V\_Ⓝ&_O_OQC2I8(."
T,4O^BKȍJ@+/W,<>^}
+&>yzn \{Q|g{+?ulGeDXa_0=oxY-#=Jb.R")!Q:Ix,+~u|W2oO톈"D /F1F^L1y-2րvþzԺˑ9	>|a>穈FrWu0e6aqoZ>p^ S)}N	m	)W)ǐnIIE4tINs*TCiR-żc
_i7~^Mk]܎M֡<pfl7hq#sylcryq<nxǭ<.ⱃk9%<hq󸍶PK7
  #  PK    A             a   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed25519.classNMK@}D=Z/BQz)Ѓu3t7쮅,O?J33f||~aajZ7Z%YTJVEcͶ,
͆-xv.7]6eWMniR~J8=Ur+E-Z,}YW	2Ƅh4^)>yBКα.(dyN8{$t~/PK`a   E  PK    A             _   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed448.classNMK@}Ӥ&z<^RPPzERۺBB[wB~VO?J/813o7+%fƖ|h*|âVV,6l]J	.X'nƶM"&:a/G4m+?#kpD7*AFEoKƓ!	;h';cB&q.O]Ga7
PKӴ   A  PK    A             _   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$EdDSA.classJ@ƿIQAς=(i%Ѓu3t쮅<'C}g7
N3DC$Hf6|h5(|ϢSS,6lۚnXV	Ygզ%Zbɭԍ۷t ,p:!LWdnj&dqP.f;sp<<
(hХ	NُG PK6!   @  PK    A             `   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X25519.classNJ1=i3G-.t-h"tS*MIIba>˕	?_ p0ͨFIj"qvrBfTIk3>_N&b#AV'Jn)2^1bJ1'~W|fbHȇ{C0ܬޓ)X{wχ;T2>PK@]   C  PK    A             ^   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X448.classNJ@=M\nfSPP	EqS(n\BB:SfB>˕I~{߯o 8N0",}7ʇeUYn%;|pp\+V: &a?G4]m OSUT:AF('}٫:Z(lɄ}x>1VyD}PXAt,N'>$PK
   ?  PK    A             ]   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$XDH.classOJA]WA</s`D/ ae3f~'GPE7Ut7kHB9
Vw%Cﶦ^0:znzx*:?,705)|ɭX޶7*GEߙKǓ!Fg܅Hj?e:%+qXt[b.N)K?~E	ᘹbΞPKxވ   <  PK    A             Y   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi.classY	x\UO	IwBYLKlMM[tZ̼L_;μ
kP"j(4EPD\P}sdfL}3=ss'n!_CB"D!_O?	;lG>ӎ[_m}-F¼`h|;ff]dE,B~E"P:$EF8[>B٦ƀWDBM%(%Z]}-e:1'bf90LIJ~=a+{1ۊF\XH(=`zDEܘbWULէr	u[m[րa5yԍhX\G(Ɉn
b%	+1zx
27[5rXe`[wsFb\

:PM8kx2H 4=-ną|:jPK8wF"Rk\m7#vI1K$lCfiK~3`7Un:&ٺ^*48"6s&	bTk5	+_%`sBiXmyEKJЬlk-7A2hީ2M	Sf1;q/k54Ԯ dgu!QPvƥL&]؜+RL<ʀ72'Ѳ9
l
4Cr-+ܒw
݄W|7b	.30BdTZ~٭Fт	sGp
W=frLEB=jOz{Br&
=3&qQBA&ziaBޞ
LNc2!4u!BX2EBB>sˈ
FQ1㱳S>]q0<Im扩<B
qlaqb7BHBf i8cP`=ֹ`=~%)TW`*3znq(Eina3Ֆѡ:^'t3wO| %rqޤ"nԌ<UǍIEtȊ:'KԬ)Gdd4I`WC;.oFS"7Z᎜txJr,PxsK3͐YϬ('9PDh3nW[t|d3sRȤfl8?|ajMD3n4|\'rTüݯeK(42bXO抪̪ڲ3hFl.͸)ƝN4gϺU!qs;ieE]j
s@nBSᨎ{po* f5i2Fu'=C^7)BĘBtrRDhxprb\x/md/HE\2=
>
ޞ9k!
_=Y[Mʒ99݇WZM77ŀ"hL^bmߑ+/IyQbBI䠔 9=nWI~LX}V%:JOCz2GL³~G9i1&?M,Å0:wQŽg.^OxDC+azơb0 ~8i)Cp\>SL4]?*sF@ EHC_@SY?b
ɬAYd%Gu׻2S\N÷c?۱i)
98i04pDҩH]$6S^btuBѩDjPr
TFigNs-,OY]ˉGI~WVH93 Uu55
5kzV7_WS&-\Jvx·,vw]B	3&6qζo򶆼̱vMV#tO綑]ɹ9q[Y$<Wha7S|Ycap5MbV~OdO9==T	C(sX~{܈$\dj1Qcj@.M
]ҦV+όgxUg&RW̺InyǱzQ x̾u荄
/)kt)eb\i!/eJڕ:VBNL}6v\iK4j'2}`E;
6bǎ*_V6zEWpLjC+NZ3X2nM{4+SwD0SA)m	̦DGF$67EcM34av&̜?R"Zp۲M3an)(
U0bFߕzQ z';F<7q&cWy\fTf:](մjLjV9|ܯr._UY.e	Ֆc..Ngជ)vnUTU}ZՒc]u1u7䯀:(#1-HbqB2q3Zay[da,¦p>a+GP7Ս
F4KcXCQaFљĖc_9ٕĕǽe{+Y1Gσ+W>X	ºemY4Iư׿`I\kC;B27܇7:U$2*E6rQcɭ[&6
hc'РEbϘKgAڲCpx%Coۻm%cX>$=<ޟWU'14,S:#Vht(R>|ܾwu_nGYC#UwyK]Gp]Z8ּxX|&#8W]w`8a_~|	'; d\H1,Ɵcx1<?z6	~^9O
߁c|0ȇaH&5Y{դ׋1<gA?Ias&_$T?$_9}߯d!ߎwɒ\(ϞӸV4֣)4@C䞆^@y
u'P5DK='&=N4#=Q:IS"G%MMMO!7qPlrJ#ʼt3e)cY-<zzJK+}re+8vrFohO9ݓlɌ'OM9)I<"+QZz+r:_=<QN!|s0:..BSˣ],xIWX#4-2:˸5ⶇ- &¢PKG
  B   PK    A             g   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed25519.classOjA}YuZ7=h/BbK)OgC,OB ?4	$矯o \eH/LitVk׆λ+햣FqF-|?q^GwBRB`2,m츙wWb?s9گ]Bmtٟ #dr_$`Gk$<m8֌5JCPKu>   7  PK    A             e   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed448.classOjA}Yjo=^-A>
2;23<	=~Cx!79tTFc5zkX{Cs(.بwut~u]zHg["p1Zhck1?ZZ'`BC	E)N6r<  t$
ݧgN"u%PK   3  PK    A             e   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$EdDSA.classOMkA}Y֏zރ2ԋJl(##3bvCx!|	ap_qjgΰ:zmJpQ\QK7.h; "#dc["p1hcìn^	h+W0.DBoQx!p O:H2ŭ`G{$
=&'~En%cpPK]o   3  PK    A             f   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X25519.classOjAYuˠ A^DHFFtGf~VN(wn M	,O{tG/g\SUƽRFNϦ	j5L`֏1N3`cMI!ެUQyO}#awEMzy<P.Z%b
PK-k   5  PK    A             d   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X448.classOMk@}kW=xރz(^,hD(HP6hVvB~B($x<޼~ ` xK~RWZp YhUh'g&''G
hI9ij[QINOڈWS`b;>f@k{islɇA`]YP/Cpeq7B4A("d+G#PKS7   1  PK    A             c   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$XDH.classOj@}QkɻK%B#x]7lYY=zI3yy3wʺ<ُJZP,*4ɫ&''/
hI9iz{
f1zWS|8$dcv\e֩I%2h]4-Yb<#Ớ1C&Z>Yo|-f;PK   0  PK    A             _   META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi.classXxWo^Y3)lKZޡP%4%Tl'fff;	ZV⣢ШMJZk~ xlcݹs={ι'NXn!_BB	إt+if·^MlVZUWciĚ@rM5-pX[
F,k3`"͈TvU_4ftk!5SNՌiAR?1^
B٠#JL
	5NF	Jª*%F"	@Mɘp&D{$c22H
}݌zlg%SeclѡnQ)pM`3Fy52*q@q8e!ciVkv5G=ȘݨtkbFf%tVVgGִQjDe#P%0M\*i'FMݘ9e+PV@"]ꦝ3m4s)#+cuT:Tv@oqSx2gfen|v:I07X܀9f^3zv1=D`1QUR"5DMT4P/0+(0=A##"	K0!7fWtE[^]3z'Khш5KFH1Funr`H-8Ϭ7WmjhARF6H(c6ަM`&Zcip4-͔$GEmGMJLWY]6#nl7*EI'k}@Zգ[m
2nHPFg+X0sr&JjjtbVߩbJ[
bv[d@DBN緪f5֭5͘bG<h;f
IX}'x
-h7|>0no^TL&݈g7%l3s	5sX0|hA^;B*dKZ~[zKZnOmfU		oDqh
{Λ)_ζAƳM`I^F|+f$nb,{e@1纰|y9.%u#pb%|@htD(uvh5L ꦶS#3h+BwHuTkuS)c˟*PH @Ykbulq|H!u.hLɽIfNxN3iMT8.gx$\H
Vpxeͧ2>+p]mj"7pR)QrVô]~
6Ti߷eɟI7i_f24_$|]70?4FػL-BxoJ`L5"G`l;
ϧӵG?Q`ߘZ!
t8
vlP[yL@<ՁӶ-Wr2wz%-˥NF5nnP;(%R`ոV-WZ¯]u
$F`h6'f%*igyyj04ݠF(ja3^#\@eQN$RR7]?OyW%Hd&TGF8ƫ+Z?4A7q+s1
QW"fT)(N#J<RT'.U9:S,J[-t!ͣL4<R79[~.mjdCdFޟe2>IJ\Ku1BfQ?VTяc#zȓVGLP@doEWx+iwq)U?%97O[k1}w0Zם@-ߩyaQIH
~!d0ewROheC6?N#4^Y?LdKZ˖a)A=1M&ͧ@!ĢGiN%XfW: ֶ Z>:҇>lGw8w.gMȰp|9x%4UV(uП!c[ཊ*lpV}LQKsysdT/ Z!|*=zg^AJz[#e̵-mW
Q<
_sI1(s?0~uu ET6Qi@5 sЕ=}4:x 7x<%^x;<3wZJ<SG]^T39l2POw.y={"#H,t
\[$s'p CI| 
ze?/t~=O8a^b@nPs=.1zynN<k7&EnG7}I|4	% q2^ﭾ<d`=Q2R<-~J/P}~ꗨeTBTPPK@ޢ	    PK
      A                META-INF/versions/15/PK
      A                META-INF/versions/15/OSGI-INF/PK    A             )   META-INF/versions/15/OSGI-INF/MANIFEST.MFn0@HX0TuhJU+u?Kpq`;({ S$߻WP"G릟h*MlGe_Ci
[`B?Z΃>(Ap%	kaS<W(d%I<CBa(_]>2y WJxnk#.:"im	B949pi<mЍD}߱	+->_TAudt)œBE!·vy@5]oHtmDǇ0((gh؁`_[hûvμ=qr=|f1]{_q􎛚>BK!)+M-C|ȅLnܮe/d=ɲb2QPKf    PK
      A                META-INF/versions/15/org/PK
      A             &   META-INF/versions/15/org/bouncycastle/PK
      A             -   META-INF/versions/15/org/bouncycastle/jcajce/PK
      A             6   META-INF/versions/15/org/bouncycastle/jcajce/provider/PK
      A             A   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/PK
      A             F   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/PK    A             _   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/BC15EdDSAPrivateKey.classTmOP~.6]| N!11|k/Kh#/02va.s'A>Җ]RVw܊P/kB֑[NPBlak6+ވ:Cx0
wᥒħkUnCG
Ʉ+TWTa
w̄Z=yܷ d	20̐FJ䥤;]r$2vՖ D1170-	7gj.tKGqnɘmXqu+=>}]%uX/Sw]]J&kX@Cafn]uTwdrY\JfVƜCe$21boWOa$LaS!Ļ
DVRQ(*s`ظ
Y$<]ajkC24>io#aa'0,u{'0̥p&0XpvWb#drfy#h}/Iy{ܰkdjESPhxaX_a-)Fg`_DKzO
U5-StcE7F>c;)b0qܸMw#Kl um`\0J'w|!:&(h_@?|"?qKBѨpPK	  F  PK    A             ^   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/BC15EdDSAPublicKey.classTNQ]-=rSVB)`}v6_17J
39sgY{|ႛ@I,IE+ME슐ʊ\VT3
Sf*lSS$
EJm|2W/V4h2xW5]Y
&rՒ2B朘=quj1ĺȖv+R^,gC`Brb81 6ΰh34N늡jzR~ .aaX*R4o0-sYd"L,-
YR75)Y5*%7Z#lRZ)ۢ$L?&pűCi;0kN:xYQ7U&TՒ[$?i5[uaD8]yDjCOzfH82D
\ǣ+3waPv#Nl*ϟUDXbw
s; _T0ԭN}y[V^>k[r"8V\aiNLQ]`X5!
Gޣ}/m(M'ÑC	q"Cc+T[Ge#04^뽷w"lal{|}CWc#qQd
pީY"=@h 	
PKl	b  )  PK    A             a   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed25519.classNMK@}D=Z/BRX,Bݰ<	(qS{̛y`R7:%oXJ֊EkͶ*
͆xn!7[U7m~iJW~F8=r+E#u)V./:AFXϘkB<7gv8OȗZ79v0Lp0]?:{; ;$~/PKݲʢ   E  PK    A             _   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed448.classNN@H	5)&R
㼲l9wϢDQ]iF;?_ f8I0 ̍-śЪUEdXlU[!]ٰ\O>HmW*ELMAiJW~N?r'E#u)V.g:AFUoKƓ5!^	;h'K.;\bB&8qϮϢ}gGq7
PK٦   A  PK    A             _   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$EdDSA.classJ@ƿIUAς>@ mŢx	m!!-k!IP6|30y0ZW@Q)2Zwz%XJޚCS{(+Tؾ7] \M[yeu=̶)
kn	t%$KS1!{aFkN:ÓǠ)NNBu<8D1@NMpq<BPK
~{   @  PK    A             `   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X25519.classNJ1=i3G-.t-h.MX7"b2d&%,W?3'x/s~|~8Aaf])^Q>$*%+EbNfCi% %YHkV[3?_O&W7b#AVfgJ)*^1e9^''~|nbHȇ{C4ܼޓ9X󘝂wχ{T2>PK0;   C  PK    A             ^   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X448.classNJ@=M\nfӅP& Mqr		L,W?'ss~~,p`DXZW7nt-FF9KvRnj-d-W:X׭wu
A/maiaI>5jdL%&AF('}ݫ&Z(lɄ}x>1VyWD}PGX]@|,'>$PK)   ?  PK    A             ]   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$XDH.classOJA]WA</H%8;,lf$x(_覊0Y/*d81 ̜oś{jP2^NNingf7JF+jk[cM.OIKۊm;}]N9*\sp?	5P<.DBVy/CW(}wcƚsysNY JprKPK-   <  PK    A             Y   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi.classZ	`TIL$$܂$0j@	 22LfI Rk=V[X%ݣս{^e{s%}_o pkvC|Oh	E|ξ`31<1yLg8{͈ӈ#jno5<Pd;'̿n%UT+
:n8 /4P;8@(q2#sv%(F	=HY-Q=6=~G8
K	kdΎ{v1CAJÎptCGv,JQ5%ܧa5a&ΰ޾+2bn^c
3[F4ʼѨ4H8Ѱvzoioju7g*zThQj¢:c gڃ+*{[ō:POn#F4Xl6At1Cnʖjg!sU<nԱMJlsPQ1%QlM6[f>3c	+d9"y[DŅµE nЬgC-191:->N2
Bΰ1voCSS挃u3fF6lq(TAܮaNt劈$nUE^^e7ke/esڱ9t)\m>D(S;P5Ufiގ]ثc ӌF
)QY9=1[Gz	6n5%-`$t4釻qn)GyH=9%ҐȤ>RF
$^iw1z[4pz<G/KvC8!c Aªi/)|i3"fA=C>=696u$9Cҽ9ֱ`>DDq!pLǰ8tmr0_':jqnvd6GΙ~cF2<>|TptvŽiŅPN|'u|J0]!M!iΥ9B:jadID!|Vy+$嗦*iV#10KML쏲F`L3=Bᤎrƨd$tz+(O
daj~HV
v)g5sD/VWfPv4G|,IVKu}޻^#f8iyO(Yv<#dy
,&qR^-dM
[@*G(a\4;J	yxUYzmf,)wSkzוJKNs:cghVUk	,s*nvu\ůB:9+=[22^o;WkC|ICho۰&9з:'Vcv u~7NID;|PlUW}{j; t1pnicS`JEm̭s1SB?km._+5EsJFmnTg\||[ǏܺPcO89ސKZ%+:~aR4#L:AB;^qN)7m\IxG]
꜏agگ0#fruSͩ;q;_n͈:e̵bVr c-(_IEX9R'%_xVRKW*NrOߨh~Qެצ48ffbxFMKY/6FvwIoմ@R*x[B
wTStc*HKnbZ"/$AD:PXV.J6I!AK8iNZ˩gJ+&,S'Ш2yk@c5\r9,3^>h=79\x]nlTźzץ
HRj#(Q1fOF EA&HX6)jVK7鴙pWUs2{?,k!E[Zh5Vk6jv=dyZZMvJ*ÞhVRXt(ԡuv^ojد:+JE;5ڥӇh7jGkO
mN/*{4s/'%M$=!5h9uDT֩G](:SV;uKVmZt,b*'.G? N^D2)MOؼ-o}VJ f-09)mĥ|yc݆ƺu
}656nS)"Eez1R\C$ncӲyjB`LBlX_Wg!lcz&kg7Yg5{z&N"rs?9dFb⃅RHJƠ kqOWdU+&KApzykay7x=n୊'bT+]^8ɚs-ÝFxWL>hF2	OqrU;@X9s&ۮ(f9/t;"fl8oAuX9Чa<1=~5LW?0u7k_9'IN])t^Mm;_ ZBX41f`	`:NG#r#31G,'NAOL~0
49M;@/j-K7d*wCf2XLǲLkhP`5Ip
;{uJh5n;=<Ւ/oi(Pbr#ALnؗMkge"0hEX.WN^U(?4𸒎Ӈ>~GYx`]Kwd5a16'<s0?<.JBZuVŢ!):z)O`tY+1%}c4<)]5k~q>-C86n_?8n	?l)*+
:vvM`v{?;߬)=Ɉ8Zǟ7jj(qxli(#oN箕"['p"	ܛqE)	wW_}p?!q<\>aהPoa⸇7:.]q\3nk^{J	<.Z`#
E98	ȉMIQM	a;g~<=Ķqslװ4<V0aӰ^8]ʴAw3q瘡UqT3l8;kB[(w\@[*)
gqD5_yoƱ'7Aiݿe1wX,w
VVUߏ.<G1-Ei*5X}	e}=</F\Ăl=ȋ KG]dމ{,;cΪW9x
/Ԕ6N{h?3gLx1<cD	-1*di5w%.y;?YßVlbZTţ2?3<5E׎pq0)ܓEN%
k		͈%Qk^jt&J_5ɍ|I|d$#T0N>2mwSG^#Lo0q40cŋ}q,lȾ10a6AfCm7zpvM%M{GkU4"ʮ+⿋(w	
SaW8GRx	UsYnI0}1?,1ja.rK]),9Cƨ&	BA+4/gR~[mN|ܛaǌIS@&]3N}^|RS,eHѨҒKf{.H^,*yJ%7Y%O\6U~+8_EeUhP=, U$	zgk9m`4:Ʉ_F!y<<<<xL9_PK  '  PK    A             g   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed25519.classOjA}YuZ7=h/J+R(xΆ2;23
Y~Tiv'4{I?_ q!!<:>ܾ0!nX^V;6gt([9M[{.ZH	-l`2	/fߍǣ	1~r&_9g"(>8?F*HtHyz<q	.k7_/PK$mO   7  PK    A             e   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed448.classOjA}Yjo^-A>
2;23<	=~Cx!	79tTFc5zkX{Cs(.بwut~u]zHg["p1Zhck1?ZZ'`BC	E)N6r<  t$
ݧgN"u%PKB>   3  PK    A             e   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$EdDSA.classOMkA}Y֏zރ2\)jPFtGfY=	Q&B//w9OJSau[`\o\v@!EFƶEb&ǎY1ݼZV'`B{!]ޢdC@H9mud[tH>{LNh4KjS=
PKXAY   3  PK    A             f   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X25519.classOjAYuˠ!($"\'̌9QbvC5TWW_ M	,O{tG/g\SUƽRFNϦ	j5L`֏1Np@}C>Yګً<1F54x]2"Jd1WnPK>q   5  PK    A             d   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X448.classOMk@}kW=xރ<,^,hD(HP6hVvB~B($x<޼~ 1L	Y%?w+|8,*4ɓgW#gPSƭ$u'Ӄ m)MX01}@vOً@k{islɇA`]YP/Cpeq7B4A("d+G#PKY?K   1  PK    A             c   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$XDH.classOj@}QkɻKFn-z*G|Cg
xfO	"ugy$YhUhWg?MNN*__.ђrrCNN9_bz2ፉzqHc:ŁS@K>dѺbiZ*ɳxFw5!8cM|߾j%Zd+C#wPK~   0  PK    A             _   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi.classXxWo^Y3RH6%-P 
 [£dwlw'[UѪTԂZ|T5ԲIZ~[kϙ]6M|l;w9<sI 8F%(D]J⋫f&|fEUu5F9	-t\!_]R%e,`¾6K&J܌]AeWPEcFRc>%T͘!5H 
j0Ԑ[dT,RBkN-(Q	gbZO kJDW
I2&)͘vV2UF9	E4
9c]#)5
!&KDM÷*͇_l>GL"^FS]3:7+13.:P<JTS%b`}-Qlp*Un*4TI=A5jj̕P-^lR7SMmԠHy<qKҡ
= znƳ93s(sc6S	L5yAB,0.(0+IgzCv3U%,qQA QJTL5Mӎ
4b1(hN
+qjvE^t5w1X
X#dJcTgH+FNϙ$"<_1мjsW[D27AFYw 7mmKG0xK?laOm4Q=J%5-nMHKLWy]6&&#nl7*ى'l}@ZFn[úہ-գ֕a]v9%5Sx:q]1-BdJح{Rnt "Sc[Uւj|fL#l%MiSp7pI'1tEuKڍ(L.84wq7fM1y!EBƽx
m|׎پpᒡǖ^s}?YUB)U\m,fJmuxa<or$g/yB371aŲuw]OQV>WŜzwºSJ||{1> x4h:}JW"B:;y4!&RuS۩h;m$:5Uƺ쩔?K1O(T5:h8>A$ٌd:mp4W&$C<'O4&*nQgd<sE}.$+tx_S<SgK	6O58)(9Ge	ghaZ.?K|n4NJB[G/3@XY֍}xڍk.|{#]]!Q%0&*`H#06uRnw=_	[#(oM-TX:;6(ѭbi[+\J;ߒREbc77m~)j\D쀖+QH^-뮎u~#04ߌF~Kx4Z鳼ta|nPv#wS5t7[.Y2Gw))_.|@<ISɫt$L	G2#hZG~QUMn9+Hfr@'%W)*Jc*)G-LQ&qcL)a-j?6{2ߡv2]jh2Gz$u%S]L??ϸx !Ucl!1Bc!.`2$c14P=[Jwt`OI
~(nֵ'Pwj~?_\}ҤC(_!eٲ,T0S6ZyP!a98l*EYֲe}X~JPOazr)PH5Qj}	ٕN2&`+{mGS 2(_r^	Mv2JgDFXxrlUzw<Y/j˨=E=}JϼΙW>Hsv~K3UBϧBWfǜ~R<O9x]"|1MT%jcM>t%qO-y
wH
<:oI<9L]ƅTQDeՌr432K^Oi=iu<ҵ(k5W;D	HP;¢oO7D_taǓN؁kde k7{` i$^j<7ͳI|G$}vs__e7ABa8e /}x/%W{/!?X?_ԷT<OTE%{~$կP,?PKŦ	    PK    A             `   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$Ed25519.classJ@Ic7ƨxTAjB%tSv>'C833?_ &̐ļzG9RdijmkC˲Ѫ,7ۙT~^spFKXVrc'cMx&^SUem=r_;'!uWa@(ֲ{4x)p5>{?"	Ώ"<s_PKf   >  PK    A             ^   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$Ed448.classJ@InL" TAAz_7Cؐn$x|63 ,q!!>G@Fx]#?{|XZ;Skh5kYƪu\ma`	O[vJv6m@N(f80Wk&dKx])'cPLi"NHbs@,<Gs?PK(   :  PK    A             ^   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$EdDSA.classJ@Iу*H,X(^o7CؐmIP6?3
~}X@QqɺVl>,:%;bQ7ݎJpJԺ52{Mp3[w(E/M+ꈛv1ݸ[6a4o6LoB2]K9(fi"VױKѳ{}DAы8?^PKU   6  PK    A             X   META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi.classX	x~&L	 E@$D	HNvefvMm-އ=	6^I+`[֖Z=P)f|s< Ȫ(K[D!.bz*	M+E)blbp."J 2\"XB
$݈ʁ!@Hĵذ
ɆrXe.?k7Jj$Cj$%me"12"#=[vʣ݉bhkϴs
iq#K48FqQL6d-(ǰq֭hή{P Ϲ"L~ں\7
rXݖ䟍Kgug
y3O\İ86uX*abi!$
%zaABxL3?nʣ~c4.{yƭ`%GF+dpdZ,Z~YKEZxh".YUU2,K1,epNe3p =5$j'tnmɠPqF
Y549d1{M<$AJm:؄s'7Jİ-85;F~oh򠙡y#	M\&/j$J?w3)hvmPM:U&16PһH;ÊLY'dBʱ;)B@fvSBP.(ë#W.즎KBFѻ5YUa)X°B
0dЖTJ٢u^)B eL6'Qc"4Ͻ,'PZ
xyp@ V$ҳqB6*"8m(ZMaRz]oH`&B}̂$aGR070,;'Z/FpW(SxKgKBTc#ߙƃGʾQS:Mv!/b3,Ē%87xlU٥hz58_?Dϰ7{n~#̾wxnep/ueX>]>&f/cLm4fr=ypA2hC?ЬD(^>,#(|D2bgd6T9"ʰ擸CD|wR lvR*JIߥK[w-&Q$h+<D|"E{y[=ʯהM*4ytmjw*$XeW%(8Cr
7
R\c"qco7~}|AC80oH[bjH2&K7$ yW#pkKSE_󣴵ﺖ=^#|
z1j0]Yx/o_u<A`$aj~unMIj|jξ%x,pBg4]'o͋AߣuΡ;u]P$Oc9'"~g)x,2cFdWjYs'HGZRVyk2׋g܃_;ۦ!$LZbao&] 6nNgBcH)+
Di#úfsRpjspFghiwΦ1iﲓk#i%LqSNy{>go_iߎmf+][5\nrYPE'neQS){+`h=OK|EgVDR93tC2maÊ*'9j%}1ʋXT`erY9T e;DVR
1pzmBKvI
Ge}i{,6g̫^zkC7OhŐ)bJM%*L%LXIa[XLF_>]++UM0	x?[pH-S(Xy
c૜QsYu(yVz|K&D}q<:pspA?TOBZI?/y^ծΣvM^j_lg9ncu_kq.9nrj#[ArpYqT5&L􎖣|cJKSyiQV^k*ߚ˿%LgI@GNu%
':mtswc`X9ͻGv*WMc(#IDe
veo}
#cָObpMEʚ<rMK^mEnA(KppmYW#tCq**O٨%Z8*p3⨼P[@[-㛉iq<)#8ξ/ًPT~+p+=uie{	mOo37]w4N<Ǹ\k*p#!όt~rUSpw<U:L4g[W3p"MK}Y?<"yoZF~Tq<țeqOc}x<U2TK*3l
KxXp_-r$&*k<6zۙyb<G8~?:a~1k[Ctq3̥lq/<gW{~>_Ƞ7I.pj)+7YŃrg@p=[ EbX!;Ƽas,v3ZP梫tZ*\ԼPK_
    PK
      A                META-INF/versions/21/PK
      A                META-INF/versions/21/OSGI-INF/PK    A             )   META-INF/versions/21/OSGI-INF/MANIFEST.MFQk0Ň0RZ3Ӥ&]vkոB/ܥ/DM?XU,J7}^Z΃>(Ap%	kay.PJp?a	|u_R(m1c"p0'
1TE	BB72}&t0~Q=5[ӥO39R8!-#r0nv#ѵOBȣa}
CoEsEf9@Aʥ7T*X
IYim!"2Fq='(PK7Of    PK
      A                META-INF/versions/21/org/PK
      A             &   META-INF/versions/21/org/bouncycastle/PK
      A             -   META-INF/versions/21/org/bouncycastle/jcajce/PK
      A             6   META-INF/versions/21/org/bouncycastle/jcajce/provider/PK
      A             A   META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/PK    A             U   META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/MLKEM$Mappings.classWkSF=F)y5M`aJhZC 0К6Yr,AK+}MF4a?_:pfʌs@I8)mZ1kqn;Ж|).LZ"q{-NVkщh Q+N!#Z$1RVVw9ԝ5m2bm+NtY
2*66
ކƲH<hހG(IA3T	-3!oXC|Wx"pmbrfJfR|-Eۡ#/ԏ1ypjlE'"zN)x+fX3u&b3SK"%I]dmFj>m̓yd'CKxgҶaЊ)hC;å]'|Kg25"y]0U*"H-$̝)Jb5f&-rnUdBpS4XHdtU5M;MAse	Do%T5#20jeghwʸ0Y=f.KY\jj)5dg8J\^rR7õ-$2NtraXw+*I4Kt
@ia~L1&ʼzad&Ks*0UL`͔c~Tflً+ǫmh#9i33R0G}$Anq::]"o3#m8)nUQᥪYbk콝Quo*3?KKe[[} r0g/V񦄷m. rcEL%_}v}WwKeAǹs"N3cm+E%e}<w<ӣ}A3jٴ}MNgYQnX/_Ie
CK]\Ekp~/S-r3ae²W2۟j%g2bAφnۂ"o;_(Z_NmJ_W2}#'w S3ڎS`'z VfAz|oͻxZHԡv#0EumDϑ(^V_ȁ
]!;P?U'h9̓:]~Ӟox3MO{fsdhP}]}#gmZ[~[{H:zf-QIO;@]P)+]sQF7.S|KO;S1L?O4PKZN    PK    A             L   META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/MLKEM.classJQO7նr'PseAJbGE2̝2r%|(1VJݺIIBϯ دReTX/JI̡#T.#+BdJ8dBm]*u2r])<
U0qp3|&tG[ēLόuڸN\Ep./i©O()wl]sC@r%4pO,| 䆸wY{|zCKRn+VPPK8    PK
      A             G   META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/mlkem/PK    A             a   META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMDecapsulatorSpi.classVYSV=7("gnIb&&&`$[(/FXI8}c_4@LևtI2Ʉi=c-~[=O [{$ $-mʢ"Qg2\ͽOLE{Ab2<k
*syAUT.[-+NT⮭rI/<:2UrʺvD
CfdnSi񝚛~/Rl9E*cܝDn[c=PeծX̒k+*U&8"1waOlq^^j9"/0G%q
i
7J*.	/19iOĬxI)	q$}ޖ]MiSZ҄5|gD6FYc^0m͝/yHx2MAYiVaoіv01DHXf^$\**l
psֆnxfIgeNPMۦqb9ы>o=)U\p] JNc9FH37"2pS-dO`MFΖ&f81qpʖe.Ϗ[!7*ayI)IPS1=9bx ouuHmy@ޕ\
B#*qN^={EYfp9۾>'%Lub<PH3LJ}xCx\Cmm5T({tA;04:dFo;PJP_G? m+O5]I3)s(*"8=9A+w"pQIؘC
:yNԥ@ѡԽzwgXvs0IL2fpk:Ŧ.@NTCz@kUbM(:kf4]xfrw;a<by;1tc%Uc@>𑧪7ЌEȫB;amX0vK1:wGLXn70i4H+\NHY:SZW;>ր-%gJǞnJE0XhE]~Q餥kaա${ǒ+`ɞG5e\A:3(oߴ.L;&[ET4ITO{BDz#к2n#{Ru/ToFCkt
kC1NkBPӥfxSіULw]}tTVP/ha4:@KBCJpU<.֌3
{Q
,`+"4jS|޲_+|PK07K  a  PK    A             a   META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMEncapsulatorSpi.classWWW]X`U4j%,hnqfbbںt񜖇Vi!}K{I-mI~[_wЊX2TTP<҃{ѺeLBXr3YiSh\1+cӓQT7Jq5%eaj
ճ>[g(CuC{ҹ|'fĄ+dDC:*szkʢtt(aص}VS4'c{VjGWX-`]ð9r-^F~R5V*u"1ah^(?<2Lý><-c3j$lq?2Tr=ܥ(;+o%$ D.6f0jTc"UFSQёϦuZf/1/XN-$
;%4x 
C,ưj{3B!hChb|u-xP{oN8d		P55ET{L~L7mۖq[XI̎	b8CR8o(03$1\O59`hC̓vir\FV
Ȓy	٤Lٵ_S&aQ	d$0CG2oap1FI;ܘn=%FG<0]@I\5/u!XrQ(;9@l9N	'e28Ѻ`|Zh 蠌CSQOh$k?%5"X	͎N?I0TCfqq\Yv0
Pt0Ng0.V(Ļr(>7!eN21.bb$Aʧ%f0N!dɰE
g=U$0<ic8=-\YB:2xVd⶿ʒ$Ȥ"K>/shTu)[%yFԸ9g*7nLi5-J@^`e%LhM4[gQX(X,E/1tj=ݯg|R^,ިtCxQR[cZ^MJqJH+9kVNU#)^-,9cݖ5.gl^|H%]ȢM5>ㄓ0)qrDR-
7+(lT湛+%|p߽IecugpDDM?"ZT u}V;hqcm[wBy4*oc-&..R8~
3;~O>k
ױџ\~eZ?8 ៳@
D07Hk+Mc
]JJ~qbr&R%i$1<P"FJm_rj`jsaČfEȘvhRR^Sx{١)<O.hi<r4޽Y"/l	KjUV+"CdyE
*,\6ת?"a7+/W}iO\#ϸ|PKRD!R  
  PK    A             U   META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMSpi.class[OAcKK /x+(I[4v,fwB_lb'?JiÞ939gfǧ YPA'-U%yaKh.Cp^7uC PŰ`%`UMq5-MыVS+kZ6EY]He3jе)3xbЪUszK{ev![5jbٮ(ƶE-NK^x7qRRR1GTs/	R9[w"LAaD1 PZMl!#!ЮnYkD-.
CgAv2hkI1(0{dN%ڛ	M)cӸL
aംCx͢Uc\Vruq,8Ua$0%86~lO^s9~^l}S7ڏ٢ldn3OZ
m֠=UkR9:RVQ!̒n5\2o⾔5Ow3Gp
7Гsu^08|f17eG3
#&); * Sb=2(X>fOz脙+.ot>2u?/$it4>wi ﮣ76ӵRُ8SƍGe_k 
e+|3h7z8DGx|(dWc-fԮoNHڧZC0!
b0%+OPKR  +  PK
      A             *   META-INF/versions/21/org/bouncycastle/pqc/PK
      A             1   META-INF/versions/21/org/bouncycastle/pqc/jcajce/PK
      A             :   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/PK    A             L   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/HQC$Mappings.classW[WUN)!֖jVK%


B
V
If$V}oCkZ _?.\ W!Y+9g{o3'} I CiE`(l;*iYZfQ˨4v=Ar8$ϐ)8.%Uձ4%LKsVgCC9ZzzyL룲z|)R)BF|o-o%E~6sp"Ю!+rR
h9N|\%]6r,eh7dIlG3<A{NDc<a紻|6cxO0d/FTZTⲪ8pZ6BBv
Sj'w/)%΢5np^@zZ]i9Nc%2MZsI۶{4UDYY+Cnx<tcnIq+xCi~h1f%7޸K[PJ	7+iyF֬kZ2i=d`(GL1Qh{a'er-nOF,:h=T,p e0rs^74`o-ۻo0RZ~I
.5oF5,*΂R#Ec%r\D"_/g).1z3D{23mİV_䖛I,8jo$Koqx[:ޡN>CQt\O)[{t~O䪼RЊ$.if;U`[WZ
kS&y~J1Ӧm6Mv,9V%3cD{qf5O8H_S
}OcUk4W
_sy)Yg5G
:~Rl*o$9@QsMUv+5U`*hl<dRmFXlC-ćY_X<)8{..l"Jg}7 $
ūp9vʋ/dN8%Δ_<훞}Ӟ{-_-{xY^쳞g
r=-n&>*}AhJow>	XF/>sD=QzӘq~Ʃ PK8  m  PK    A             C   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/HQC.classOK@ߴiՓ7C!"HP,XB.5!nbv[cy<P)z2ޛ||8. -	LDLIKh:Ǆh<sFEb**dIIUJ窊ob|}{z6'/~wJЋmv&#e>pFpbKeT=&2.7eɫB0ZUq.QlupD av5qdP{
zM}YrPK)T    PK    A             M   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/NTRU$Mappings.classU]sD=['bR
ql'6!q4ky(%#ɞ?2(+K];ս{qVO %cHN]-KL5׵$:vۨ
G= 	LJR Af(8;<
ncn;w70Lf'eDfE.=Ce(y:*5xT0RR紺>f%W0au۪u]ZX<n6Lnյ2%i?7.}n8%Nj9^4e0Go3;`d	x!Dq2c!tcd;opWLC%\Sp7G rh](UNmU5C8.uN::#?:y^(fQ$ !`18fKH)()H#pO͟ν4g$<w(XoFU2&5`/ЌqͦWoעXŚΐ}{ ^&Cxb'=h`W~q#-fp(_
>.J.

6M鵕l7}o0e5vOoum]lz,dmYǰ<&"*4]zXpMC+\ov=
\͒+!Jd`Mg2Q}z?G6;Q|o$|CZjۧ"p^aa &p;}j5*xi3?~1EneyjEg+%r0tkZuʋ3،	9j;}h\x
Q?aZLjwAR}]JK]\~>
OlW@e5+rx/~}n_
Ĥ>~Y |ah!+/Tҭ4*KPK@]    PK    A             D   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/NTRU.classJ@ƿi&M[m'oC^-RxݤKI)X>%G/37~>jp:hIeb#\Uxg28U=#ԏaXUJal.SfؤKo}kuVnT(cC0bx0<[x.KIhϤSKm\	'h*k>:radm;8_hfWC}WWP
rtÀ_){h}PK@Do    PK    A             R   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/NTRUPrime$Mappings.classV[T~π5#:DSfnr26Cz(4钴y⿡y/MJRZ6;{?@
?Ep!nZy,ꎪ؎MUR-eV<䅕+KVQ#""R
,;.b;iifq_pxB349UQ|gZQډ3Ks)"49)ܸ4^s7\rím'̕.t'#"z!1L3
46eKYy1l)E (k0ȸ>Gq-)5
n)^]3dqe[#hGf.*ǼwwZ9(!	޴VQd={Ry'FDH<^\3熣mhܲ$r͋k#ldI{mG1b"Ñ](z/n0gi|$첈HmN=*UUBXC)#nJspӉ#,'[SR*_
vhjWv3ir[U=j9cäP*ܢ{^$/9p鴈ѤKO	GG\zNċ.Ӊ*%5W-w^j]]s'Uw]	[ٕօY]+lawZ:wvuaۧRQ\w@Q޺~m]vĮLٻi.bÝeޤv"rWm[(~ǖD~"j{l_+"vaźpr*K% <)tKepAX3k	i:c),w6ͼ-#: XtM3049Ϣ_D_1bs䉺X?_E0y.>WvJw	&Ҋ4ҜAw)+IׅGéu?0R$ѱg+KO42;np˛fс6bRhCLzP:c*}nlL:!=~\"
]x9
l =%Ue?+īZ-IyP3P@+eƤ7ͿCUʫ`݄>%ac|MD%zGPKǂ    PK    A             I   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/NTRUPrime.class=KAShe'Xni&vsYsw/ϲ,(qryߙaa>? \a*mTQ#tcV2Qf)=v_' uHR܄/r>2{e8diuV4LoO{o#<'tq^?SI$_`!-AolC ]05Ώj#֣2>Cc$9Ͷ?
 &ڬhF;\^bhc]Y5`oPKW7    PK
      A             >   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/hqc/PK    A             V   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/hqc/HQCDecapsulatorSpi.classV[WWGA!^hZP&AoX%J"hHo̌3J~m_ؗ>kU}C_ͅ@$Ьߙ{ -BZб /)M֋8mU]u0Sn=҆ULU])h<eWRУe,nJ4vvWdӮjcXySeMK]>k;ɒ[i7ݔ-N!6pi|jd2k󂴀-jbLXfdhlhɱdq Ѕ.>o%R;dDsXsP/Nċp9n=?,ʼBe3ىQ>aHxǈf\/:sN^}=vD+NH#鑱Z@FBC)q<lI#r\}{dhXSOIx)jqC'#ڦlOo;ӉFaaxi
I8VW8y-T:XCK
7]0.2tbXlɑ~ۛf8oqEb3	aOu,i@<5VY:׹*"0,ຄ5tߚ66B'M0pbcnWMӰ^0AP*BmlL8&\Yr)czYwYs	@O`HM@ޑ$>|4*RKeuGWIsJ4ޤ}Zp<IfDì$wHn;j)T(t^A;90H5
65  ^A˒kqb;1#Lg36PWH	1Dp\9E+#pYI٘	]Rri۴Ɲ<x$BY@`uaN{ nGz!uIyGVc9)iBmpl"9ƝQx@}
c*bl_>>+Oz7PẼd|u
{6*0ݐQ(W&bndMgt.U4RNvd涀/5		F-Ñ}c&Zg}xw:]VXt-I
X!ɇhOsoW}߽]/eV;
E899ٟѾk+W/r$k?-p~L-k4Fps>
n^o
!B-Zir;NEV1}xk3Q!ZA7Ez\UxOD]h#qntQ
oK^ _gQ˶
;DPK @  +  PK    A             V   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/hqc/HQCEncapsulatorSpi.classWSW]lB| 54 hK>\6XHvkk[mK_iT2CN;=w@ A39;{8
?z.	y2QP2\RELpf(8}>_7
%xdAfĈjBU,;BU&T%-M8:ޡJ̊G0cCa,>.`8ҽfQvv:*%1TtWRS-:w
dHSNMT3-]='Ma$̰ hq5njv/&h _('`'y0}]Fv˸>.2ݯ]控BB2RGERSdiDS/
U˰^G"Jd KƣB~>Tӑ/5z/14Έ@NmjX:ȃZP'I_ǸMAЖV6/wAr0T)	2pxI'		PJsV#V<3LbKwL<&&^ʵhe(*ݠ\IcYw,0<h" /6r^юd,KO5<_nk؉NÏrҁ[	\d'Âp"
e`,*|0Ä/[xJS8,<s@R|ɴ\<(ipVF?rՔ)$	e[y|^ƠZH4IbrXx*ʚT
s4'D`X-ŎN^#PfJ$F,7JprRJA>dWezN%%$IIgDLPyFDDJRO2$1dD$TTWLXlq\bhzhVE"3k̀BBe.qS)$D5;E%)ݸBQW[ő7I-$˰g塀We5k9iHH173⌡J%w3mEQbH-Ml%Að-Tb=77:**uî*:^6nS	9Cբf~ɘ)ݤSQ	k*3[@0y)!­nØr41|8GgѮD"	'9S]n()nD&D4.#¨-1	2]gع:)=Mu`
K+Ho9<=ZukfjjC9p5s(+ć}\O18f``
xΠ.69;(J.=ߗZ9shJ<D0c$7wy<B_i3j/}ԏM$R.=+Cs*wEl8&}@$LRS90"^L`phZ#:grC.'hoؠߺ@Z<]PQ}YṃZ*?⧤,_r[ABf)LRuV/%bŞ
E\Ѿ?
|Am_EUPK,%=  y
  PK    A             M   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/hqc/HQCKEMSpi.class[OACKKTm`@(x)!Xݺ~?&*O$~(㙕@Y Ra>ߜsf? b
)h	~&ͼ:)4?343<켚JVx1ZԨj[zN%&ߔ- CPZ֝dnsC&
n1\)R`َE>rI+]1fڱu3hk7[v:s% ft2(FTf>Ci).\Xsbԥ rǛ!mdwH]ka='FޢтEۈ͈eXĻhSpHZV;n欭  dH\8H|xX2cDq#cMw MirReַ#3VI^
IFPQI8굉<czȗWX$C4鮪cVNf^7Ūةu񓞨tpߛ3 L0}\558xtmrfD1Lz/Q)$IGszi	JCX('TD)jSɨl}"AIS\ڇU2->@wLGe
nϝןϑTq/SAlxf_`諫6M?ۻ-x8@#3x~(|T.ǃKqT1*H
Ə#ijb}{0G{`/PKvE    PK
      A             ?   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntru/PK    A             X   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntru/NTRUDecapsulatorSpi.classV[WWGA!^hZP&AoXܬRarC&3̄{_~Aۗ>Ze~g&m\wg_<~؃	!hbhYPՔ<{ɽcY>(,'JVT3x~4uAGZsISJߛ5vKYNdU2{Kw{Eb@C:j{p!qũKz%DMFsʶgmT44029F8(hs=%=zr	x>8[Q-ъp=?T1'bxg;P"N鸙Mý\8$RGէfӍ
5	mkA*[3Ǘ(x&Idbo#yѽpxFHєtZ(1\o~撚f7(s?7[¶P	:˥u644n0.3f9sɑn-e8k.U7p$p0 d:4p(+~7k20(ᖂ66B5-yWMܗ0pjcbtKm9ύ!6`cyQ-~(czr=\oueH )b@%7WE|=y.}JjqtT0שu@!g҉7NikkBMН:v0]8aj002tsoށ*aV>G-}e^Č0%N:IKc8^Cq?@P!%$b3VDCIؘ
S%pƆIw޼'jR v ;Bx$&BVj
&3!܉R@FT{\5ȅ\Uhi\=½y+:,LˋUOMx_PGBL3tndVW	5t:۬ajv[VdבN6c>SWlwѯFV8AdLjHܕ: Ioᄄ/N*	_3{)I:0F{`}NAƿ	K7¡KoIzǒ+`ɮG9e\A3x(oZGˈs*$Wqz+rֿ=?y
ӑWVpoh^Hz7Z R	Z+ѐ]Ýc+[ڟB?!p)&1mZtU#OGhh_F7ޭM@CJpZ<.V]Ee=X0G2>7
 /PK:WE  ;  PK    A             X   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntru/NTRUEncapsulatorSpi.classW[p-ke
 	&8`Kq4c
qv:זv%ͭ-͝ɥmLd&gҷ>Ӈ䵝[ڙvdK ;st9G'2*P)
~9ML\ݣMg@Y&(=23TMu^iFCۼ'5\;?}fTɤT״,Ltmgb÷.,/ĝ*l	6+؂ZK4w95zyGNoI1Ek340rb@.=M2fcbOFLr(Pp7y&!̘Lv)nr7ftQ6wXB4Hث^cze\=wC;YfzLI@Z5%D 1l62T1ɖٴx@Ai3GMcEPhf̵uc&ּIFKhQ -33ܥ@+(9Jۚ@ak2:pP!*	7!A)B25?*0ÁՅ3,vy%-1QA/Î:MiL#U
Joa~JF7~ B5(!-
d:Uh.j=]L$:8c+H;Na%BϱrʔK+!D2+(L.]jIDl٥ce˥Q&N+8OaIЬ55Oƅ
	ē c
~nVīg'_$Y/e*ǁ9'd?*V*>V$qfZٓTg(OMq*7q	DPHvc$PR)atN:5dLC0GFB)^)7d,T`:+TTX6	.PiҥEB[_@VE?%t}m")!
(?Wam`Vu8%y W훵փTxt+gVnoWToio(IqZy	3[rh\T&Dop//wM](xѽzZ~ӐQ|6?ZTX+Bί븶jpwL:IӐ4`nCZuŏ7e%\w;s]SFhS~n3;N 8l̭uYa,sѯRc	'%aPO)3bheb"vMI[2]lJo33ϡ!wBHfh
/D GupP^Fp:^/ >r~w]%켁{εo`YB8Ժ+
Ʀh<Qw/{05z8Dߟ!W飉Ԥ%,a+dHbKt쪿{HN,cz.@u
z0[Ãō@j1?W9WF<v)9PD~ziw}G"'<؆*{b0zңz}DuGBO{Tp$GU	ڣJDm.yTUSќJ}`?0SX^V~u1(uPo/ŊcqJBWi5@\oP{
I=9G|?PKD$%  8  PK    A             O   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKEMSpi.class[OAcKK\l\PPr		E9ݎua-O`
~
}MHP3@Y Ra̜33	`jgom[\f7
a4	_4av2zK`k	=7aPӱʹpt:y}jzymJ>eƂ(h2t5r;[64ygw
uM[!Д|6k;HG6E! fõ1huL+fSp`0
wpimZ9!cAqM)14[WSnЎ~X)4 ꋷB;)50\"Upa̜LZTW%7bpUpC9#^ ШCIjU.V}3_4x6kD*wwJW\:óaso̌fT`F%sRmd?f~av5<ehU
umfN:	̘R,B`d"'eӕ.)8CCϮE=įLu
"?StM[<DJ/tZ{F4:gGzF[	]Q>t3{zdEoP+irKZCv4Hk m%--tEq;ͥ}tu%[5xEDK%
se-\r
3Gv8\!@iX>(^)Iwz;(t3 fPKP    PK
      A             D   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntruprime/PK    A             c   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeDecapsulatorSpi.classV[sF8JI%uPlj(҄kq.
MG,	i~
m_ڇ>3%ɐxd83֮=osV!bD4kY_3n2WMڒbUh7YtQ3t_X<32ˆlsV"2gVx01}{fJNsCw+&J+ࣼpcl[e/i8.NW
q!GݾOtajA1-2+ys
SaQpTC^fȽ4	L=#-sAxEU|tLq jyagqH85"sdڼ
yͫ8ѐD;yUV\čT]`2ϧQ3dW-+[%3RE<
dH{U=AJWcOඕL4کXO*tlE
d=arNJO۪2[5+UkچyO'C*.c@ ÑdgUk
>z	'S;}E1̠6LCE#
nh|S
 t*:;
Fl	fl꺎'xq^ Auq
$+z;iݖgu}I-ijP<$tH]Ilj!bs
>0;k-ޝ: 3-rGW#|
3Ύ́!kdḵɻ)U:(%A%Up0[
NS(G;{hn+iXD*Ʋ\>JM1F%#TN5@ӷ6|I2D"f8Y50,(h	o#|b;ŒSXE	.;؁U5W,/0U2tf~^uM.ZsrmQ4mBibX)8Amj+ÖW
5`8=|pR#gRHPm{G_/HW&=#$oMO.u>@gzk8gpq}iBkHlo.7pv?v>ѹ?\Xv
Q gB"k<7qkc:^
v)o`:6;u{lGٓסLpt]QzJiJQy
fBsWhc?	PK  :  PK    A             c   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeEncapsulatorSpi.classVSeXX-Ѓ6Z&QTPh#C۰n:	tnH N	{n?Ȩ	
jPи.1C5ѹyuSzDSCYA+YyS+h<f_bұwbmGXjdb|rL,MMݼzuz;?g /0RnoK؆0vhdk'm\cTw>68+eKhfX,)؞URF
1@\;WĂfŋ0(8s$2*>.Vm8FafV79iuop?I'𐂇qɷ1F.qj\[p܄43|$hyF"sBDG,s. d[$9Gw8s:<C"p =J
#G`$Sy$C]8p^xTԄyҡ
EJxŤmr<Et_ָ-TqCKN]}7MTScɸgE6>
)	IDI2(E	f͸qQ\W$<E2[3-~opcn!Gr
|!RE7`Fbz.)mGՑh:!+H	DS cS{_փk#SXb*+K~cL'.i$eU̾^Q$A5vY*H:A#2i/e$=E~a9pרrHxż7ryT I'Ȼ)nq-S	K:4H~~ꣴ,<%,)xMX}Bd8fxf2
U	T'z)Bbh2MűXqiݩ1Oɔjê=$elmLXzjsoʸuxs#6-/S=m>#		Ced-P5ciʮwۇ,k1oWwb(ؼy)O5qIIԭuE&}Rh	|ECB1ߖpe8uOKIiT-LӺY4/[M5A_Wӷc-Hnao:f:WqA-)~imX5ln_?w͏౟q_|twGqaf6UM'wCbzFX@Z]DkvK똝YLH"2ooWuuњ7->d0r5pMcQӦ-"iޡuD>ŧ;JAg`_Ɨ;DPK.    PK    A             Z   META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeKEMSpi.class[S@BCKт(P"cMh?_'?;?@
8ZC^9gw a{1Б@'X#T|T\V@޲!Dҙe]i/E%*#MeXb%*oJsr*ɢ,Vmʚ8a)WVշ9քc7ڒ^`	¾T=YJ8bث6orVsl\gx2g2~']O0H%}ۊ#ZпLfY9b;[zF x,8A,Fv5"5I1]?_ݘafSP)W9TX&!5p0V^cJjgtb#<l36Ir^ea;Fu0o[ݹ,ζ/&!.^lnܴyn.jaJfs	u^_ArKOʶUkޤCkɂ?;غcsp
8Kz1/%Qt8+A$8[[B33O)GT*,OPR穡>pEGƷ^-_v^Ķ\!DnC;.|=
}u|>j8>76
Nqwt7pPGzLa+ѯc}SOvvcsO"v9q}^kqqS) +&1ȿ	G0ɮƐc PK7%  A  PK
      A                META-INF/versions/25/PK
      A                META-INF/versions/25/org/PK
      A             &   META-INF/versions/25/org/bouncycastle/PK
      A             -   META-INF/versions/25/org/bouncycastle/jcajce/PK
      A             6   META-INF/versions/25/org/bouncycastle/jcajce/provider/PK
      A             :   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/PK    A             M   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/HKDF$Mappings.classm/Pn橞1$D,C&"YVu]ڎX^	/| JNYmnyy}zy	M3[u;Mm&ʚ+{cǯ^<O-Z 3X
,m4fhݲ+f3g22CFaWNVdJR/%)U6tSBWP~-Ms䅚T=qn%0>*mᘼxcn	OY?Rd3@PoɿN^X1(F-ge7&I+u,*>Cs
|RhN?(~@=>p+
2ޘyx5N=u2Җk0Lc&zC̢WâңEр2E#X-<R,it9 PKZݚ    PK    A             D   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/HKDF.classN@E$&v^**

+јDD@ E{16fmy7,*$
>BL"(iy{
TPuᴰʥԱ*0щ=%T3L4iDQ$Rx٘onG=weB;ȵRۙC0`
g
'#Eh^)cyJK8SY|!&Z2Ȥ1So\@G
&ga7mv]uezC;.wcX;PK=    PK    A             R   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/PBEPBKDF2$Mappings.classV]sD=[n)6iZ6Pvc;
P ȲV$!.'
x33a%e;	3G{Ϲz7XŮ3t7]Uq=CU5vj˵j-,	J@HDﾧrXm6ԲnSKq8B	[:-Ґ[bIvS붞ktocF.,jm#(MC=Z{ܛ-w"ّ랣莟;3tŕ,5JP/R"e*?#W]su'F&LvOuzjWjiuq	VHO<?Wf㸅>L#$	.M@(F_h=X);7Z.ʮaʎQJΐ)!ztK}KJ%"gKRCDpcҁfFHCcM	d4d\X'˓2K,QO[L`>JqݑIzԢ
XZ&><lN4̵vӗkɚ={fd}fXgFf!is@pyL&A)+L5fdEmgXC:[Z*͎1n@jW\5׼ey(vE󶭖+:Af	Kw	mQ7VO1lkY.[*7247Y^3LrlWF],J9Cq]Z]@Ωl
q*we{VsCbkN%z+C+rsP.r~Q~g4Qr8Z66qE ư/]8쉲}=~µ PKs  g  PK    A             I   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/PBEPBKDF2.class=OAT@++Mh,0E/۽c%w{ۅğeebGGfw>2d>>kJ[:Z)*7a#G&vC b!liHYjD*̋lu!2b?zW\ŀe:eLK]C  Al	"uBe5yPCp[*,KhM(UjNk >h69+odfe]WN^A/zhc5._PKPmr    PK    A             O   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/SCRYPT$Mappings.classQJ@=&]\Z<	̋`J(.uiԘd*$QMUAāsg;VTjAv;)bټki0
\ˎ-"4&Td
P1lړD?K2uw.R^i1䎚HECIwn}ĭufB+tF5]^o1i3QbpcH=tAXg-x[2r}gIJ~yD!i#lQ9OdA;cyĒ:};2<6	jcmb1R`uvEBF8e0|rr]B	@VʖOT0HX%,edPKRͶg    PK    A             F   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/SCRYPT.classNAda/;
f	(Cnf5D[{rs?>磄J[ډ\IJDEPu.	㩇431˖:ZGҺT$IDnU<WF<$?x4_
	_ęX/	0I2]Z3>62Jq2CǕC|%4Z+Zim<@G>k=mv֢r
z.e._PK|8+o    PK
      A             ?   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/hkdf/PK    A             [   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/hkdf/HKDFSpi$HKDFwithSHA256.classQ]KA=VAjTP/F%j(I;.;I(fܹ{׷ UlyAzۖ=F`K:̈́Y+WBA,9	' ˷L$4`<]ڌ7sG;]V.>'85}WV`d(6~9%VX	MaG.;S[2ʷ_=Ց|=WX!0*=Ӻ;z)ڞ;Y qT<!	RueAg	A+-l+	QPZ]R&b 7D'0Ĭ1lX -XSV^]GPKf$X  @  PK    A             [   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/hkdf/HKDFSpi$HKDFwithSHA384.classQ]KA=VAj$Bc쌦?'Џf*
ss9s_ߞ^ Ta Bmz
\{l[B/=6Rftx|T	='pSh.2@Ҁc?vmk3ސ;,vYh,ZCk__[gXQSH#c`ASX$87mLl(RQF`VG6%\a``_è` rLqk{gEf0ĕRQ$H]%t&WDMCiUvIy.>LxjTr a ^ gFH`MY=xvwPKGVX  @  PK    A             [   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/hkdf/HKDFSpi$HKDFwithSHA512.classQ]KA=VAjdГQJ N:hz
hf-;w=3@
["^Се'%dQ;ң0!mţj 8A\DsL[$((ڳͨx#;wes\gg~mրIR73b%M!%Ma};SL'|[EsY̗s5C
À	m#ϝr);WJE p]TLd®ҙ^5
Um#n@r3Et
1L̪Sɫ! ȆxLz"
euM$PKh^X  @  PK    A             L   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/hkdf/HKDFSpi.classVkWWݗ<&AQV4hJ0\@37aB-]%Wz$F«uI=9wsyL#6w-nX-ꎾw0(Pb赝6c,c]Qڂ/\+:9mqvNDM?,+
XvA_W4Y-
[#{UkwZAZN8F
T8pdg?xմLqԁ
3튰wta;ZzUp+YMh^ae4dh=3%]u~wanMr\惺rКˍcU-rC(m:/U	ȑ?>VFLqbJ0N7p<6#misՋ9=WA'g9;i[!V{sTl]HGc{GC?ZnZ)wCSqsqehK]+	eMuQ%ppг_xmwp(HUC6|y.d,pC+9Vap
7U &!˰6'Fe$]TiΤe֜FH:d'>!>T1,iW̓GxF6Ԙ7J.S\侊04V{àL<`!Ic\.JOTLSbw!ЎU|!YGQ)UHBUfUWW;*%3M$[Œzpڬ.O%pisȿEYMD);\c8;pVSۧU}&*wiRݒ?gj\ɘ"U	XՋ0Fr[#o#뽠`mQ.^૷EGCX

Nh5
+2
ȩZ#J/0Ơڑ/8z
s#Q:Hx"~o-4MuogD~EC3غG+'p{mTOr'׫xACZ,b7ɹmhNh)5rv?ب:	0|?T@nR-MEg\7"gRۣ!s=ZѶB)E"mMFu4dililT܉$Dў{\W8G$˦D%
י
߈ltRhoJ*U$X㶻u(sXc|M妛Dhv[ڗI	IǏhLPK^  
  PK
      A             D   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PK    A             e   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2with8BIT.classR]KA=7ƬYU?j?DćQJ	ĸ̌%PgVRp`{{'BY.(6}5drm4kUw![$rܾ9 LlyL!-`BieJ.W+dU<*.q0H#T^ {8+v
vYh־~mł<8[hʿvUx#/U.b{p
ѕ0g{5a6Jmrur۸xlUvcJ!aߕ6?x"yZGRB"}kBoYXHVڞ6
?GڻbwK1ߘȕiO-7dG PK<DP    PK    A             i   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withGOST3411.class[KAi?EЃ4iE^*IL0ItwM?VOBAͮCR/
w;5lEv2F.dQ9Ҧ&o1!ߟf2Eߎ 3nqyNL4b !	rse;1u\{M':M4|-^e'HU:@NYzI\7	b΃I`IòBPD{=|
m2Xih0Gr	4*wѲ5лܼle{"4HUtcI/[s]]&hSGz)5AHi@"}0FpLRk~B;! i2Fgd ~6>v/PKʃd  ^  PK    A             g   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA224.class]KAQsM*.̂	(
%	A\w'eg4Y]	~T4J00=9g@"ߥwXSrO=Rwj|zbI!Niۀ#['($[fb1OGuQF6Kfroy&csC.od(4~#64l0iUaN3;m	]Չ<]Gh!dT0ks9ugl]t]$~:B$	2U:Q:WSʝ<A{	3jTv(2a #3$##
KSg!H|PKqc  X  PK    A             g   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA256.class]KAQsմ̾"B-(
%	A\w'[wgu%QZ^(EÜÜ眙w 5h9^vmL
]HQÛҡ&1!mKj%@Ib
Q&gsbkHwŕC3&H.s(V*Uomd}O~HEK!osĢM&M*?z?џtP1A61+c
;羌
f<.au%(?\$Yb#$Aa̫XLp_!Jsun)e 0vDo $ y2Cr92ݠD{?_v/PKc  X  PK    A             g   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA384.class]KAQsմ̾",.+$Arݝtl]vFӟՕPGEky
ssssf>>_T!Dpx]q11t!-F
oJ˄U+_^T/H+D5A8{N JPXJ79#n2>0<m]6r9MGD]4uO0<Qh<C,0)iXa˂ͬg.{9IwV*;&#HTs%wla̗Qnqhu$sA^uTs$HmyeK	"U1+^Iu
#, ;yy"<fԎ@d@4GH.FaG"PKuB)id  X  PK    A             i   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA3_224.classRMK1}i֪~ Z[EikŢHA<v7f,O_"&[Aы0oy3o&y}zPǪAIDm;p|Fh*A=fRIzqR=q9L"EWغ""(qhXDXjY==:/BNpX<8=%D_42"Y>MHcوƌY#&Op1#խõmoRϤ&<F]*.ia`Шd}Հ6sⷅo$cAhug'B*\#XT)$(
f%h;5K Wsx"91gSs "=2Jښa* PK ֦n  d  PK    A             i   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA3_256.classRMK1}jw]G7"x襢QiQP(xt7uwj?%&@7ɼ7= bɆEPmGwT^ҏUD}RIڬlHdwE(Ԟ>([.p8AGήǺqz_Ѹe86OOXϺK-W<~h11eLCڌ᲼CQsX(6f	6
J%Bi=@A'0ɐF)|ιIE!O&%w`L@ۼ5.m<\	`?GtLʙ@D}0Vq"PK:m  d  PK    A             i   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA3_384.classR]KA=cه
A==LXQJ" c3z
hf-zi`sw
@	"Y/hӖse
0jC_zm&Q1q&0(A\t%ӌ#yq}@ٵ̮Ũx}nwo1@/KUstkuQ7I|7cy-fK?#=ۣc?ej&fb+j\i/$ɄF0b5Y Qq]S&RAz05eQ8J&IFxcSjϪՐI9hFX%MeЕ0	PKo  d  PK    A             i   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA3_512.classRJ1=jAm]D+*J_ҢHA(LlSǙa\ ?JL¢លs7y}{zPǦ	]=-!]FpH:˄Q>E84f'suk)$4җs}ی?sK:
iRoUkgū.}	Q-+d(]CcIǂE-fbv?=="m50T}d@r&V5
fB.Ǵ
-;e+wF|KY <V]K&O@/C=m)l(T{ 6f՞Qgr  3ZT%ueЕ7|PK?im  d  PK    A             g   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA512.class]KAQsմ̾"B-2
BIB.Ieg4Y]	~T4J00=9g@
Bgף]gdSCbt{LHAEx	DXC zm.	\':Aq%猹<d>Rܮ2
UwB7@u=}$DäaӇI
s2@p']&TqLFMJB/#)mcf9I2ؽIl6*.e0cWH\[;DDY@*0Cx%̨Qہ -	h̐\a7(Þ:GPK0c  X  PK    A             k   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA512_224.classRJ1=i~AڊD}(^*E
$ݍ5ulbSA+1U39srׇ' ,q6L*S7F*hr$mm0
-1An[BBX`bȀ$	`[.kFqwIڱ_qOZ$v-aw\ta1kscY>rc9!3Qc	qdVޭPW}%.l{`OźV 8UsyDHIܽjaf'gAgnǡTjgRrI0E,k
L$+M턎vr>=i~*yL1\Zl:ĜI&c
PKc~˔q  k  PK    A             k   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA512_256.classR]KA=cf_f_DЃ1`/Ff$EAS3~@?*]^s=̙yy}|PêhfRu9<JҋrqRGQA<I$@L$
AlfS?un~S;mTjѱuYN4X,Fy̱ƌِAd6޽PVq`OKJs8A6JYJnYW8nq䳍`"n'TeRrI"6&ӏuv^Gkڏi;Wz'ab!Q{O& 2BkeKچ_$PKHup  k  PK    A             d   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSM3.classRMO@}ؖ
~ɘx<#F#F"]aMwAYH4ۢ$j&y7fv_ߞ^ ԰#A.CϞؖ.v8	OeB
ں>A*h	<%H&uQlb߶6A菸BzѠÂE,ךEpFYO*дBk$EڙR$&%ˑ?=?j=afml@r:	"\NhY.wݮ`^dN#0n8籰ZB0A
{j^IQ3+g)SqbNݔJ^	! "=3MeBPK_  O  PK    A             e   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withUTF8.classMO1'cPdPbHPn"ngy"2v%Q4;L׷ hdmK;2.QÝ:Ҧ&2!m
eߎ SnqyFLg1Db%7u\{M{:tbY,Ws-}}O>9TI|79bރI aŃY%zws]=!-VSMFLHn[B'#)[c} k+7\Y"Wj-$AnY-
t! H~¾8oչ]$ 3gĔ!_ gl-"RۈPKRc  R  PK    A             V   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi.classWwE
4݆P#J<kbB	mC5P6Y-i6>B=r99QM6MS񐜓|;3w7 G#G;d&(i#}>e$SFZm3m`H؄*ZB3^`tFaE5MB
$W)a%M@21ꆪɑ]Gc9%=E;"TDSzrF|.zVNM	z#pJcrN)3ܲ:ZVteZ%M鞒VeRzjר[;I5H$
G:J%uÑ+.6J؆5z>j(3nlXJ"&
]Kz\Є'9ejɷc"RjvePLMb$<<w}+k68GX̰_ڲO~8Hf%ACi	OյO19"9F2f{$&aq9DV#jB/[;vaG1Y@uČע)CK&xaNα#Ў煡̴EML5Ok< _?7K~'Q:POKACd,P.
1	A!#
RI+J"H#$ıP	:S6j^CB8A#xIA1X)ʁFq)WGtTUca)qEer1ņ^U}^7$()bZ\ue쳜Dg\4$*-_
$sڤ`ݒ=6"+ܰA1l^}5S9~Ga_!Q(D&L0Ԇ
%rnHI(q\lGb<Մ(NCy͑a>[94KzCmCpPBe2XoۙVǛljxN#;)gH[{k+ǻe2
ߧkM9Y9>('YKьGeeql<{)	zUW{a_`h(>œI
:Bfغ^u;-(N2M[)e/ t*P'nT'nqvШB=K`c|?A|Пvs۳F6t}NI#44E<Nc-x?=vB&<awM)&bZ߲ Wh	1g<_Ic莜uFՄ)F:|CD
tn*CX,ďq/Kߝ6Y7-`XL5V-`Nw&Wx*bvWfp;4$yFVMYL1~I&JU{+]?3\%\\5\
-|B2)cǧ{39	/~AxKK_^&
7W	%Fx:w7'I-;PKVw    PK
      A             A   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/scrypt/PK    A             _   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/scrypt/ScryptSpi$ScryptWithUTF8.classPJ@=icEAzP/fm7ٰ
g$Q&BWgf̙	`+X
XCp̈́=y.*$KOdѥJaTcƍEh\MK`MM>N{vMko~xJz:hpJ6DL8`VQbJ.x:[l#ouW:B<sizVZBR"yh::<z5[Y뾲mLDPK@:    PK    A             P   META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/scrypt/ScryptSpi.classVrF6#($$u!"hvL%	:RG"	im0t?O;Ӈj{V2N܄LZhܾ=gWg W0e+hҨz"4\Oa@>"H O/^õZ#u[iWE`֫0Rk˾Ͱ/v J
aX.&hF ϼ17cq&Z3̲l6
F4:a~%۵e]MVTC:`aH5s"bK`f(F`˖2gG2M*
.DYX7DKhe8*c.4!n&wv>/mMÕr1ʍƅwx˂CJ+qcLe0d;tab!uh:qp&ȏ0|UD6W)嬎&4Z.sGKtF$ҦR7`䜎
xVl?jm洞#Հ;pGQ5
7ݗ
E{7FhXF\gSa8(upgbqW(=6x]=mB]*rY,(	:p!vR6E<!g*Y\qV<MME
K:J+5ኀK/8R9AR}T
D*?:q6
i;l1)g,zUҘ=aFⒿ&6fgw=wvHrtt3>g8ݭZGS'V}|"섆UJQCU}Tu%%JQk1`<sly2\a
tl^hK"ԨD8NlNp5x<|MmEbEiEic׹[uD8yU*/vWL\]mWQlKA/EjKPJUé=I;j3àk/
$G)zBo"?̞)`wM!'K=O_F8B%)*mUGię',Sdw0>#]mC9u7/pѧ8KWX"Uoys:Am~*I9G[SR?bX&=Ʃ0s\܏`	Gd/eRC)>|[c/CߘB/55X`pdMijЕ6
lhaz)qF{!x PK o8  	  PK
      A             2   META-INF/versions/25/org/bouncycastle/jcajce/spec/PK    A             K   META-INF/versions/25/org/bouncycastle/jcajce/spec/PBKDF2ParameterSpec.classUMK1ߴUԓ,J/bu)Tܟi?%N؊;03_ $hK#`8-īxTkyVOñ)dnUno u1)hԨ;NMFͦ!'YJ./(4#*&8`NTrcr[5b){Y~V8.O7iR!E>jw~BO>.ώn#xd@ICPK!   T  PK    A             K   META-INF/versions/25/org/bouncycastle/jcajce/spec/ScryptParameterSpec.classO
@՘] yF.ϲ, ?J\svvf"2
xeZU|:T파h96=I~/<O(5ph.63e8cfEB3Rg%O6tW;mbfA
\x*Jݩ^+^PKqT      PK
      A                META-INF/versions/9/PK
      A                META-INF/versions/9/OSGI-INF/PK    A             (   META-INF/versions/9/OSGI-INF/MANIFEST.MFN0@Hj%jTHH$N44i2E{>y%rn
蹬q7+(0MaLAe<AT1Q2 P+f0?Fs]@V[3$#`|	Jaǌvz.6m8F0*CP&
y]@нbHÌET\nIN_<yH]th؏~TøV.6D?Nt|
#2x	%m΍y:{o)WOjgK+q]SG`!$e`\H4oZB;|<Mƛ,{LFqGPK9_e    PK
      A                META-INF/versions/9/org/PK
      A             %   META-INF/versions/9/org/bouncycastle/PK
      A             *   META-INF/versions/9/org/bouncycastle/asn1/PK    A             ?   META-INF/versions/9/org/bouncycastle/asn1/ASN1BMPString$1.classQN1=d`E|Ņgd1aj P"U*2$nԸ(cyh4mz4{n+}lA@,aq;|*U\*E=j/H|c.:$ٵ[ڧn@E-TJ\H"e0 qWL5UE aj 	*X@%,lOW7>U~ĨbwҦ	Urj {;@b9lkuv^}USJlٗ?ԙ	VU>Il!9aoƱ	 !%YxȚq=`]oS2cPK$BI  @  PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1BMPString.classWkwG~FծZv$/Բ!!qJB]wrBC).׶rk%4\%(=)|s?wvג_=yy;3wxa8SKWKzճ^f
yi%;3OYF 3xCOwh{%u`!2AUь N
.ڴ٭Vѯ V	m*`/>י]կdn~a}AZ].ytl	42ʺ5ksq
4<gKyklVۨ*>$þ9};vI0
ͪn{UGSwnL>PqbL0h[QHHE!рL]1Jy^6W<|LUdy-$^3ڨݼTqW؞r٘fMP ?r{}*>^C	StjV@hJdw#5uLW]g=U?=ɒnێ26y0q|Ss
)+z'{
*>/PM!.21̐ӭǝ3.O'5#<(s0\P1Ƌ3lVp*qMy˺k>]-6)%\'eW*xm<tS(H͛q}(L
v٫ѝZ'
	dkk]T*7\VQIL}5=0MkΘ1*,ApB*9*4}pPԠD(pQXZ]HB}訂E|kM454|åDب+lR?'(o󘧗f">>~nX8.F)OdqN\`hOUVC7b|C,Xf8Lh.#*Wd#u	ѰD;<cAA7Ƽ~%V>U» s
LWe81\q@I&K:~6Zb_~o2gO{\/yKm#C`9ݞ!Ǚoɶ?6'&yݲƨ)yj
0yuWJ}7VPX >
8I
="4V;
鿁hy20
7ph"y|-|qh3h.`8|"X#1i^ 
&(Ak=f3[XQn{x;cu%D
Q|:O4xgV0n<"qP$Mo֔{:)\
h;EL;I!'jbMn41CʱOZvW/.͵ۅ'>{={{'@oQ.B+7d"?3έ|UƟ!F_	o,yaΜ!FossuGmo׽!sq$n>tv;nx(DDo+VWQ/eC@t&1+˸ߑu%]i8RID|O"M4FSeIڅ&%gA jrd>HZ<\81M	W\/fHMB^sD[8]7OƉ2(iIbuEBo>u_T/ޣޣg+DWôj!-pǉa^Pt6g!?& ZV8+xOhz_'~m#x?_q,
CPK3    PK    A             ?   META-INF/versions/9/org/bouncycastle/asn1/ASN1BitString$1.classR]/A=CY]KUߟ[}SEK5eg*xA<~ts9gn;
,A>3aŹj{\}JfaL{*?}B
Őo{]Yq
T>71 ,߼;'G溤C!+
׍br0bF,1ʰ^^|ļ*4fH|z✉q$LXHbasMո=_L3vLe!WaP-Vo}	&sMcHtX#KNJmZ'+=?Pd<lWXh}RДaNctgks-83W=Xh!-D!ƚ=Dh%
 Sͺ/PKtdW  5  PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1BitString.classW}tMvvg$|dwqPB1` 	(,&
vE!Y̬HR~jPAњӖ Р~ssz_}of?BB9yf}޽ww>8;	`.LJ3kᄖz35n޹.l )n$̤֛+GY@elj eV׮鸲`rP|b,.`.=mtl8xJBXHry@dҷf0Z܋,دSfctWPBX)ӐD
֌h:iپݰ
r^P onu깜GTS)!zi$4뎔OVNu3w΢̋X`%V	𴦌Eo{%*X:jQdW~=a		{[ZˑӐd+	+hd'l]Dwjz5%24a=bM҇ק't[ȆrEkV+'{/6&	-Es$]k GhPoʅaVWeuҳ!_3BCf6pۯkYߢ`+c`'`Jh#s02S-bouR%"2׳&3
	Wh؁%t(NRFLVD"DtudP3>%hOJF +L6E7aFFwΚ>VCEl;Id,cqXۢ)E¦'/{,Z:xyesdjIh,l+ϚX%
J8@0/I=~0Ceݏ%nk;Fڶq4 Ō
)f-xPG/Ԭ~"@k)6Q	p͌BmJR4bI禙hS}P$uvGwC,;OS*ffx׾d ):gY	Syưk]̦}PʓήX]mX7ˆ/*x#v6tiIʡg}-~YWXɻjW$,ZtR/d.mk]^3,h)eų_akGxFVvfчnQԓ2FMBM(,Ks{I:]4Ҿ*,MveD- te{)jWQ'BTPt[&(JM;}cQPB\99qSl4KfYUqzQZg\egx"!мy2漚]4B S٣u;R G{}HVTLu}Z6b_f*I%.Y&"楷Kewؒ~r>[iFLYY-ө[f2'g}Z*M̡`׭`*/M䌽wd7e׻!RF$/4Cΰ/x
хCVhӒU=6`	=+Zm	FƋw~h_1iV-aY?YJGvHeUi̴ɦm{gmZ:ݝt5=˫N7?Sm*:R5(SDo;Ծ&ta*r$2=Fe<Puo@\:S4w"@skp訷h|+ODQɾwx8EC8GY؆vxWS!b|Uݫ%:c3WN*$ :#5LR.zZ=Oa]`55UIaQ(HԻpNP-al?H$Y!OHeEݗ Ucg9!\S#> 3Pj#7Oyӵ%?`M0t$vE>U0}aE-\H ; Ú	P!<,<urEURA}%ʦ(\J`1`z:zS1o3x	z~(ݶۘY
F :SSf[n=}2qF@]mcCH9oKVOO
MòaY\JZ: ށ{7l豳$|a_+
?sgaFLwN.a0Mw1f>=:۰|nz#vPwC2'GIN VWü2~8f1|9(=V^HSr n'_B5},\y=^H!6F*;N<7[٧ w*dC?! @Cї[4#͢';N
\@eMu$@#v^ūP'
h:QFDB:O*	4E0.!·G7
ZH	u҉}Gb(_$AtOFY-LⱂŎΊ"¼B2U9jݤK\{n⸝"ιœn.DOr"J30Oo7rvK6kXL0
7
}Cd,$
mOjZ*HVj6K
>$I2d_3<\>EMË&U+x2ӷoK92(/7	<lbbb2~wC$fWVp>1[\/&';!.,2OkP'?F0x7^Fw]ڞ뉻z'.{Ⲻ'zf%u#z#&V+F<uv+[{^F%n?$&8?.?._F	?/PKx    PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/ASN1BitStringParser.classuPNA'# 
>&'U
**RD."_N]vOD~kʞ=Nz܇J~Κ&Y>LoLvAa@͓эq.5ۤO_d_aߍswv aXq>͆p>^&Oᚐ͞-.*κF"Wĝ`&¬dE$'\HG}1|L#ACaFPK>z   Z  PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1Boolean$1.classQMO1}ta]E$6<1@jDpK]kl+	J/j<Q4iyo||8,b`OF{#!s%yZ"E~rA6_=Tn%JyµlprT/|tSG\ɀ"E,,9X
dye)CFAʏ<dTU.ԧB=ݩyWmÜdGF~B
{LOURH;&pjBh8nlFy3[/ O*	D+$
smA PKuJ  :  PK    A             ;   META-INF/versions/9/org/bouncycastle/asn1/ASN1Boolean.classV[WWN0QQZ5ئ
bCf03A{KC}Beۗ>'uj
f-8go_ 	VJfn.َmv$)2fJ1R5`V !O3Ĳϛ,/ښ147;eȨ(&
&tjbQ#ѱT%E}ZwHE+ڬЭD/}=gݢ"fHin:r2YleᶭȧXtYPRlm̜\НIَf:6jd4b]M9M9Ͱe-{%S
e+<0nC|d $DDOg߫MYxF`<`r#
:\2;89#ΐV(<CVOȋstct+8!Ր=O t\P6!
^TpI
hV3JtR2qVBZ9D^_]_ə)9TEMSiɡ,7dDYy,ifb	]kJ([~UA=TkE+T
C~FG=T,yq80Γ˩l:٫1U26uPMUw"i
[hDh1y)F{lĆj]\NfgX>#'|L?Q3`:RϔJDY"*mtT63\tnE	?/+lMWsDygy]X1bSwL\ɉ$%'2t ՒfCrƈ&I͞L#ojlz`i^E7Ѥȱ9(;Vȑ_ѻmrmSrpga`Ohc^ז/cN,TݻhT
T4
ʒT}5>>I>eh-ǤC.sZαt+~˚7ݚLd={m[VcQɘ&/m	_0ؐb]Yx	c/4,Pho IixeD.5"f9
AytArwy㿁ݦ}phEUjq4Z@}l8/`G;#;ŭK~B؊U"LB_ |)hݴc5w~wCD4_@j&*Yeϊ%J=,/E1Rr|/[~;F8CLd]'PֲUԞ,#6+&~S0wbuKOäS%ۭimΐ0W<,zZgpWE0!)i/U"XM3"UaBJ>"#=:s0KpQW>RQ-u/h20=s#CѮIȈvH"vjjx=,$KooYZ`d$B*bpw|J=Hǻ_ߓ% PKO?	    PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/ASN1Choice.class;o>SVv&FtҼ⒜T<C}`?CTvFĲDļt}6FFf(  PKQ   T   PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1Encodable.class;o>Svv&FtҼ⒜T<C}`?C׼ĤTvFĲDļt}F|̲̒TFu
MZ120203 #lV6 PKtw      PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/ASN1EncodableVector.classV]wUݷd0%4i| (U%!&*M6t:3.ʓ僸\P,O>3 ;6--d̽}g;g bUFC̨.&^\+r$7d*7=ыF/hjA-ZFIhY/[
>x*'61t<q}19p|\XAF^VEU2j*'D2Ҽekm R3nX5U^U}Pp@3
U-#B+eݩ C3STf:('8ncMX`=
B"WTq.S,F,	haYyDQcW4*k3jRigiڬQ-v R&EdC?$D|UkQ*O)8$JhSl
^2t
֒Z5ߌŻMvepV'JFTJiHUi/1ޝC[r1F$4S*_%L͚yr*[>Tp)b/iC'^% O4ևQQȘP.hܚi+\ dA%.z_dX2>1`
$+6[a8SPG:ؔDdF:5Jgsm-p]iD(m9x%/F
'q*;U5YXtS"XkQĠվ԰k.UH
6fl<hQs.aVWTk(^nv}а"C5.Ʋȴ	.$~]a=%44Ze|c~W3_߭n4]e9+Y]Wijʨ2o*U֎+v/Sbn#tiyInt
zG^y

-⺷GiO6nUur÷#08EH!~@s(sxE86@c#3z5h(e^HxLNyڕhL}bg4? "_o<\<L4g
-mEÉF	N6\`x
]ޱSKϬgix~Pû[qDa'Hl.$q;Hoא'YPE>Ixrx^CN;h%Z+sm/_Kt/KHH@C9F3`y=4AծcQ-~Añl#E|?B&=Sݤ w%읧H'vDQl	o:0o7iW,?8Y	ZbUM`]tg)al	JND]E	uidF
Yͭ	EQ:x軄<;PK5B    PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/ASN1Encoding.classM
@5ǘֵX<tTM
H"kЫuzhny}pvfhEm&Jou"%ɴ2n,֝|HK݊k52iV0lѣVIsZ|-<䀓ÙhM PKz      PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/ASN1Enumerated$1.classQMO@}+HVQQCS P#ANݒB¿ҋ q
h"d潝Ϸw 1YB隷aO8ǎM;euZ^/]ΐ:􄧎rƃݷMY(ksHk
`{R8sW-%=2]CPlWt,"a2V&jpi+a8Su.SThWniUiZeY
;4 w'àt}ԏ[iZM8~}Hf\?GA6Gi mTeh'b
bH-1$ؤS{vPKN  E  PK    A             >   META-INF/versions/9/org/bouncycastle/asn1/ASN1Enumerated.classWWF^!t CࠇI[4,7y8;Z ֬vjEL$m6I+i4IӇҞӿ)齻$Cu̝~5 c.Υ]jǐ)`F{f1/m͑
BjQ ,?np]ЌyA5
T+нu3_tdmk26ٿ3UP/tA[RfRY9薩Q`y"c2}vB6]uhV	kԱu3'{j6hksr2SL Pl-"h@ )~\7uZ{>((8]e2t@60wCVS8PhVNaG0b`tEgL<Z!WM<
e@0?Ҏ':%e14c9qͮ"y͙Mś6ɲE92#{ʗ^F:5UQšXk*_,+IE_R$2UT76Pd鴊AQEEFD#֘8Qc*)S4cƲ*n0Lׇe"*&бAэ)OUְL鱣7ThbHX5:h9(鏸1TB't9Sh2Wa*7l퐢gU {E(j~'/OyҎs$8IpOFf;jJ0<o*om
ۧijyQQT9#3i3kMFpr %@$O).Gx0
xO*~-Ӭ8WOUNcxV+.7-پ(MD5\\?QSBRf'wRC|Gʦ]=_r\z[^&NmQC2f܍9K,mfuܐ6?Mg3*om]<𫞭'vfJ_h\=bfcx8S%LHi

~PV*3R!+FHmC`uYȊ?n9|<kn}e9$6?$Yk
{&*m۲u,*tjDoۃV|{Mwr!5'޻P,Y6 oTVo|R3
Y|[v݋fɭZcĀfxj4~(phWTx`gS*8h39JZNJO|tz~ijo"@B$1 sp	7PEeT4't-D2\ơHxc݂.eF&4w[e'H]гUdE[;|
iLsL'*'na SݵLS$@>I)6b&īc}.BG(}&QI$C+C9*^]>.p
<:!J2zJqRХ(O+!nEBuDc0[UoIuXS;h7~	b
^-QB	]N@q|*דj̠к]1=uioWeƅ\[颌=BJ\ysviw=bqxf<%CnVdG}͖?*')ZԍQ}1+*^*-R>p5}٣_7ߢHAp.rv*k~eȭ,O/=q]iH74>9:|Z^~6ҳʋ(:]@>(#+MTիBk8\saEˮ7qt>>B PK_1y    PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1Exception.classmPMK@}6I?GY4QXzTxD޷q+aW(qCfgShORh+n/_5L	!&SkYmttCl]5˔hCKP,xۥgjLhM=qMڊhFhM*0ᐇm?QG{/q?>z<
O>T$vפ>{*o?PK
8   t  PK    A             >   META-INF/versions/9/org/bouncycastle/asn1/ASN1External$1.classQN1=dtn\CbCXјPb[n4qQoۦ9s> `2#8VޫG15VY;W[ɇL*nF}F;3bD4TDʝz! 8a&c'Y*}hX%GJ{>q<JKulCu]V<涡z[%(/(95Z׵	ά`)cKfUB3dz'38@
*4Qi62n^Il`s
H1urq۾'_PK%sf.    PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/ASN1External.classX	tƒ8`cdpIC`'@0f-]#86G4W6qZCl6igv%^ޫ|_S 6_.6~3iDFJӽ㈥
EfXΈQ_WKB	^rk;ڰfiTu6I1m-,ܽ{vt0pAQ|@*tP67[ZjK<%⾈aҨG"ꈥedg+F1jL[jX:Q+c9|1R	%F=V\3bMUĕ2^ ?aeHm3b֬AzKXa%sR\,c55CbŻˇX'! c=YԈ%m g!$lwZ>gA"neX XyRzXL2Mdj+̋\ߋe\>[W`&n0#]n-d\U$l Q&U#BD6&k
)mSuڀy6CTNu@+T_˰ja0-fk|PtΣA)s;׷CIU,e'v5k#gXS`X	dƍyfֵva/iH'e~]T/^p}r)H~ԯ~dJUT:.M&I~o-ateڡmTd#B.2FD&0*c 4U3k,950drZH~{XX4s$2ru6F_A_nQ;g2,$۞+.Vuᰌ#3?l`{fe܂W	5ک1ko}X+V*8&52nkfEI*dqR	y=eoD"gʥ"K,lކy޼V*HA,0hCw1Pgv?wvކKxw]\49G *	:̹g,
ciKGƻq/)q`Ry5->.~AVK>}U(Cy
/Jd	'LWɈZ6?/Q<P*Us%x@UˀI	d<	jMt6,N{y)yO8)r(#ѬV%E'#h,YZ2"='/oo0oO6#8Ǖ}yk2nm~&1T܅^|?ιGVWO>kҖbe^}|ܗM>xe✲bT.Unp7dKu)#ޅ4y6CѺ:g/DsЗR}(LI:+w7 j/qNᾈB=W۶-
mܟȯ+5mH:#s߬h5M6t֠MxsЀSI۟}[̋_RulQկj4㐢kQ˿eX^ʋ{?J?LM5T'k6%BۻV14͡H
c>\);OD=ڑaqjBiA:RaWQ#|b,хSt
#]H1{JL_wQ=-q(|s`ςӻkuzBb/@KFJ$r>yKR
i>LaM
iО#՗VWHy)KuE+:9dfy
͡:CT<]WpeshŒhD["ƙf]Q0IpOQw[&'ָS7&)NB?IlC,翨[KKW|f,z``$9۶q)I@.n]B<-
~D jKɇ7	oz:	i[CԺhURx	RxyL߄ Yƺ3mOpN	:A'ƛV.;zxpm"k
瘢P!&qFgwE4r"wzxYD=8<1P]\_y|\mPM_}E@5 7
}nX&d"qa+Gi*.8m9?̘hrtY>S~c9l/&r#/oaT{QݟE%el!0w81!8=!;իRoHU'I$ 'wS{Tnt[^-1!<;.>:O8/z!uWc Q=r'9kϊBLت?Aÿ(=U{'?g-&_oZ㟨PK'w	    PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/ASN1ExternalParser.classP;nB1!GH(,T((	NϬ@Qp*I$*gvf|g
!sйd8R4;l0:F ^Fld[y/ܰƭ9/EA_۩?-e%W׿2׬7{FqlPx"t<oodPEuךhcj	7PKs9   )  PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/ASN1GeneralString$1.classQN1=d`E|Ņp5DP#UX3tȴWQD	Ms=o ab1qHl\{T9Ts<)]
cE\pu@wG
ߩTJV2DʀiaAoޣj 35q*X@%,OwhŔ"F;x+-`n)	\Y|I˭m=%wZp?;I7W^J`6lX5%

`[hg1[hmAL/)n><b+XZ'/n z~PK<NmJ  L  PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/ASN1GeneralString.classV[WWN0PT-*jڔV*hK5-+m0W{I@_|7m_UV2o_ aQAfN6=',svG{h,[C5d	W#J
1Hyל59)\oc'`!4["ã{9hf7[sSE-k؊mejC̦ͤv]}BS彝a>'-&{|N`'þCڲxVl~ۢSр]/>6meYOyܣ0gxcd)-rwpbi؏V.6)R{GT!q
mH0Ԯ@'!yKQ{0(xPCR3Π}S4>Xұc~U,0Ɍium.2ޣ(CqP)%*
EKN	OjFayaZtjUR	ⴆ^%QCAVq5<KS
rlX)k{<%YFAe[32eRY\0KTm2syTZ䡏Y158
uxmi|z/PJr2gU؍Bn#R4]{9[<"42 %Sz'%	2:{a|T1	Sƴ/Xۈ
Զڡb;ge$mrW	aN$5CB7fa9[M֠!\8&CyHsdx5F|KƯ#a-Mq,.G8 pN$Ӄb\"e3(E3\.kvV0kS#H})'#Aw]m1햢8¢F(ӿZ/KQJ|3|y|кRH=`4KCzq@9X<833f}>^׹-kmR(NI*nP*<K8}NBu
.rd5z[
s*ğ`& IËhPc"jW-!&`hoc7˅,6(QykC"4ov4i	2_]P0UX[8+z~, l`͋P	zDBHΰov!]FOFhBO Q *HA\+ZQ PF`{j~.Ǽk񎯵7z%"Nyzog2k,Q!_<q|FA0#wJg§Żx@9!;M1u3 DzV۴ٟQO>!im&H/PK    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/ASN1GeneralizedTime$1.classN1OGQ 	WAbH@VuX3!3J7j\ >i=k;}lC@<b~е{jW<TEyZT/AO0!>]vaXLđ0`ZXŐ[zqh:ː
=|lb	IVʐw"+D%=L:Zғ\,Q2f(̜-tPM{5JGܔ?\XUT0X5EP#DFrF"4cX$!M$^xǉ(yl2)+5.PKlQ  R  PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/ASN1GeneralizedTime.classX	\[IK£
PZғB^VK- ڮԣbCɣ.usnQk7\B7{nӹMwo{!gyi v	y5Do`,t $Z$cKu-ݨԄT]~UU`ͱP<쎪 _L-{HDU5SC\-)YF!fXvt4É:0v"	n(!xN'o<	 lPKW*uQ%[׼?hxLBFK4*u~59kN-
2
j7yrP%0_٣B=[RSbZR`wĜ2`@H,:͉ŨQ+Ҿz5佪>$}8u 
Vu	oSU7.bp	b׺^5,3!!kq)s?+Jj6њiS!+-^Z\.
(P9%xVrM29K!I260`u6 RL!:DR͊hc8LPM&^rEJJ`Ndg 2
D)PtpxӦdځ&a7`@Un۵CJTJbݛۮ3I,
;WsIl'ji
smT;v	n'n&b۷2z@iY0)Pz扈뱇RG7BDHJ;\JqUR߬d_<2p9>lFRmT bPPBUHl
\1(q@Aoě\GX֧'@E[q#mLdI8Y%g`"]|=2ދֱg~ft3cm-\K?(yʈ
2 9-Q:h
F)^==nV;n;qpq'ǣMj25q/W&-> >4rxyc'Ӹ
`hOO,gd<%}Jr %کR
넌Yҁ`L͉G(d S{SuYt38A Ud;	SWn@vs2N	 L	q4SؾO< 0#oEcK2Ɨ)hrBZ
;nY"4f/<"g}]s<'9$w?tq-;i`$6=q*A7
'/	{f'$!rYQD
WM/~I]P%xP%5mMVړ8	~Fja_*J;Ly7%wJl$e dlġɉ38+ᜌX<>
jd U.ӭzUnчu2KS+Qv&5D)xFXead}f5mߛPS	=)$v+
X>b$f%*rOKtDamWj38t3bYmS(VM0,\|BplK6
fv>sms_؅Tn%3N旣V&AsMV$&IE*ǉ_I4~^h­`v״p4Lgv`s+kicOukI4%;m=D45k/7	E[1@PTM]5T3D"	-+VUQb5Vz:ZA-2KUaUdAm__.&#7mf7>x
6:N@Zt^NmhZ.:eQlY7P's[v昈6)pTM.lL߇3WN"^F;֑9Uy5)	, Q%fQ)
ḍ.y(=<z΁CTJ*as&{NSC8A!̦wc	MP@f2f0{= _
Rހ\"섭Z%SKVeJVfJ&32N|K&VaјjV'q٣XOm>O:vC";OyD훖EA39	9)tpoy]#Nu#PRd>Cr&b/C%@4jӨHLEt;ʚe!gӟ|zn'C4@,8X
i	x #XZa`6jbI}p
ovuAߒ>4w 'ӕ_A(k+]wQA]>_ǳ@萿"MI;C#ǌQg1[²9eQzV0Cx[m
4X=;P>X5p2`X=6ך>/vG	SCDz|೭͇VI%!|rWj)<C(8:kޮ0l	G,!6H0p8%B2؍7;;ȹCu5RvPk$9crKgFa,'ҰoyV]V|?qL%gЅ᫠)36zw k+)ż@%@Uދbյ8l矯aQ"QX0Mz(s(p[z+3?́XC#?Gt~q]DjTخr(1$~9o($goBcZ#LRxa=uS(`$ZEuՆo^2j.
pQ|\Dmtxgv)G%G-;BʼeM3j)$|0<8O Erqqyd(Z	u3~U[֔Oߍ
~/s-9rf݋c9a9C+]scW2K˷*_Ϣ@WJSoԓ;Ӈ;?ט,(?JS{6_WޛĘav<1js4uNxEzӕ2FK	>>zP%O>%?"'LbUkr.v,!gT"jKmP
NԛS)QzDYJv5P>	<%Wو0
N'.u3dq%/zz^u6F}mWq LCl]bfPK+w
    PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/ASN1GraphicString$1.classQN1=d`E|Ņp5DP#UP3tȴWQDMs=o/ ab1qHl\wxT9Ts<)]
gŠ\pu@뷴O
ߩTJV2DʀiaAwޣj 35q*X@%,Ow^{Li/bTw	vVP'k KP':_r+a[ODa_NSEUR4m&F0-df-6} `7@0N Y]-#gOHtk7uMʌ[? PKCK  L  PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/ASN1GraphicString.classVi[W~o0eqEFE	Dj[DMe{@&02
J}Whv+ϣ~菪=wf[|h'p{yz?w8
B͎M;ۘ1xRmӮ0AvVAanp2+FQjHـkN.ҳ"]KUAP"C#8o׭oWQZu`놡c:S;]W!fyogrE֓ng
c+ɰoI,խN7[(Tl.

hd
O>Vے^GuܣAvL铼˱
]\0n<ZT>
Paڦxa[)aѬ 5K+<E̽Cu<!)^%gPHOuT=hxGȗ4؂_Cz63
*|Zǥ
Pqul8
=oV@ܳb_bpUifCFFEkm;"6c6U>]8[)fh\C L+u,ḛ(9VE7*zЫOC?Q rA
)
JJb7'{g|4ݒVpawi[sM_sMQ?aYwyՂnIXģRD	=O=	*^`\Q,)[۽_
i9}nłTAV6ǄQY+;6`TUMZtb\T 
r[(l4	+h[5(tcW
50jor
ĩuj4@7YU$wTmIScCq\đzQ-d^ktP҂׌D1"b
-q?nيvVkR#(Az	'LVL;9XUl-)\8_04-5iO;<:qOng,oqB}]kc|.ݲiPmsכ.N*vF/&zF;/k&g*U)Dωֿ	6h`?{xe=	_3*I^1jyس#9n`{Ƀ9Ct"E9YEYeqHZiKڤOݓ롎Q{1@]"TMx%~@N=5{Po8sp>8i08KoIP<	/EӁ$,W!>\ @oȶS42A߽2I#^4Z^0xCBYzf$~,(ߔE앚<ncp.tjK#mS*!dFZ󸼈y0S scTq𞗷+%љ+|P/PKl(4  n  PK    A             ?   META-INF/versions/9/org/bouncycastle/asn1/ASN1IA5String$1.classQN1=d`E|ŅYLXcbP#8Աfi%tƅGCnۦ9s{?^ c1
qH쇑o]x\KVuRO#%H2Aиsܷj+W:Hi
, {\??$-1|*G ^0UKHkX6UJK%Eԕ,b]&iЮȶ,|IY®cGfaJm9U_uP&ap8ө2jf5O(oAL-@;(n?<bkX R'h/X|lW 6*3~PKu2J  @  PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1IA5String.classVWe~݅Y!䢂*ʲXHi`"rQ
22,JVZ7YvNvs~sW:fe=gwf\
`adɆA#rҔ976tw4F[vt['q#!jJ!ȗ Pl\e#)J2&"g R IBn`u1,N͔*M"(P*aʈ{HdRZLS'@dvW0:"
'ڎǕQK5t6$eLGDc*T3-	>Cm~TJ9\/F*GauH-eɺbZ32(ajU]d(ϵW
IC!0<-<X"U,k+npgurw#J)=O-nv
R[=r2$Bd9f5,6	sst؉]xmrzP ϻִؑ.C%LRX#\˺nXA%Xnl):PMerqCͼFꩠ]0>$rlH^Ia"Җ)5ȝŻϹĉ H8^DbɋkN!7VvQ%,xxDAꆥ֙F|"PXICLѓPa{=1+
H
+vJ&ŉKHb*ZJԐ<(G$CHɦv4-k\<!q?xHNQc'n	"LX[Їs؅hÏKǣ$oNuۛ=m2&
pK?'6 iq
Oݧ+Zg(DgK+sr\3[uzƤ&r߉gQ%Ǉ~o3%)WPRNRg(Qx(7$K'CI"ꯋR2e]@TGΝ\H5؅I&c81YJ<4;`CaX
y]DʏPifPՃYu+PsϰUOE\g>ER1cXq术{in&
)ud=)aGg~e1| W/R*kZ7
uŴK~E="SL.8rAoMܝ}4Էxϓwnzl/`ѻwk3bL`($ybl}SXsilS<+v B)YD^G@ymKe]$R5F)+RhqQ݄s[xw+k-ת'PVs|t/72L+~B%XY,J(	Nd'(a)_k	Z
eY8/DGDHyqq񫨋(qy~G\JnD 5qx']xÕUk<b~2üHdg/W*8l
%6}}ń
Z^TewnmT'31xȤ[ts](G}qlwuNw^7"7V9x{=?C"T_)TLP {	??VJkR_PK     PK    A             ?   META-INF/versions/9/org/bouncycastle/asn1/ASN1InputStream.classZ`T3;n`H2$ĀPI C2dnLm/
> kZZ$|nuvݵkvݵEs]{|9G'NXI?tal
*#bꝱh׾`"Ѫd\mI#p4'	ʚnVcՁh@-DP	K&ey8Bޚp4\G(Xp|Y/ǃҸ\(["8:ʷ
"iMEv=0N	{	\
0/`kc8Sfͧ"\p#]) U,%5u_`d Ըst(J
twkiTQKuhO7yaT'&^zhaM"q ǫ1κ@<`aذKOcQ'VqOv2򅣾p(|n_lZW҅M]`GЄ=rk	;[J3̐'kp*mtc7Xv]`OBLAEyxdR64lngA,11֊e$ѓRS+V5BY֣eʛT44'XvA56;#!_׻Ius 	Ǣd|+IAHh. )v[P:^u+R/4׫v=Zrd>[Y9I7	;,BScPrhhqS[u[Zg[6XVNBlMdnZ!	ӓT&%ov1!d
'^Ce}*q>q^s$Y-+HHb :gjr:y,gD|{E$֚JSq+>Eܥv^cdBjnԈWq]ۉ.j{5vߡXwUWs8K㻴S|P`fZ<W_k<}I]E0+9|}ylbHD	F{kJ
Q.;v1X<>/sO}!-{uT[47#$,LU=/{d%o
$,t %k)b>auS0<GdRff=tGTcRĬM(OyT̅mO8'	eYT26Pr/\>ћ.=*8.˚uHZ mP2Ty4KFileIɆTq9<`HPgEЭfhH/Q"yIA։]؞r5=B]8UIY6	N𭚂LK)'Er[J_t?TG*;	ZcNQ	&x(*K9F^?[
~<HP<v6HE L7:L}݋?i|#Io%YuN/roBWs!	.PD	*=GH"Sk͙ӏ	N/5Wwd0$rigi<}ÚҜS
N4|*>9~B]S-h*w)7pCvWȑ^֍NR!n&D8Y:)5WTz=:_T/|k|+B4	,3:o9˂־X"xg8pLΔcXjQYXEfZ"1tcq)2+e{T1yR,N*f.<x\,40G/S&$khJMi[i'y)QɦkdpsBlO)
]*ض$GW*ug\xs=ڌ,-U9OsVgMpwQU*T%h.ͽY1lꘗ.㓛`6`n'}V*J^· bJr#TP^5	$q^֐3kXGW*thXA(Xd
쬦6( js28_B>DB׈ks(
wMyF쬦Zj5rzi`4/ͩ"7SB"~KNTOT&#F+ԡvٴd2nܫu7F'>ʹ3VyP((#v\̩I;	Pz+Ӧ芇y$Ə`ea1Sa>
da:~0w(& ?SB}\DRGX0YU,l7kO
r2cE&pnw䌿U˧)VYS"s9M%ʈ≱8
`U_/*%QuWP^oBddЗWD%q5-^V5O~oA[%K'QϊI((:3l
'i<Y`烢\Vz\!4kD>l|0>5WJO毠TƧ.̺v5%:ƅ
}?3B1ӍBߓ_5빺$5}YKB\$/RSf,rRv|uv_[@99SZސ1|k	"2P:D [V@,.ϛ<:QzQ?q5|L0~'y0˃hX`KXl@mOkw*bF"m\@(;˜UWAa0">l6ʯ %D3ӱ DG71u+*F@P	,cVxfGQQ1'aFSwgc"UsWxl1n 3d*ـuO	ØkMEd2Y?c<~X/??[n?^i)n3鷍Bu>n`!wiy
[TW<Q(|WD;K!.m%_3XaJg`΍KGP?Mr؊-ub?mU)+a)wTW+3|muM|k:zlmǠ<Aƶ ܣvH{0z
"cmC	q۩J"kb.]E rEjH8[o^SJ
(C$Ӡt]ݟ_}%Rw_ގ¯؇q)92pt8(:UX(+1kRيC-qypذ<ݜf&6mu׍|J#֠ܿ߿Gt/Tc1X!fKtٮȇ0vz<}&{զ!z	5y+ٻk*|?_k1[b?ڎa OO৲uꀍ(_ֺR	:
<9g	gN睉༓N:32λ·dv8\cYp.BY6z1
254S޵)R~&x(Nwp<+yhzcrg`Y)Y(
Ng@*,*X̶tΎ
s6Iuʏ˦YzV>a̐XDyi)^u߾sDѥ7V{n;hq+{3EzDkyQ=l!f;U~${<˵ymGg^~v|LQ5)nk8:lDƪԐBulcsoqގuT(=coQ'	1Ңwl>s<1x=i%_y5pR'nN:XṬuLx^tvjlUq%7teTnN"q[}ak~A]ꈼt;_tKΣ4Ǆ
<lgGն-Rb`-^hkupb:Z՝g4~~wܝλ@uin^{AFʳ^D*˙8XaiŎң~j	A~IaL%_0]|*- _G(P8`l3t'l@aO[XtdwЀZ|qanb{L%
~h#s+_\RX>|]6~Fo?>
+Mc.N]#hb.!`EU
>B
&3F6:FhuM7d2;&dm13;n3gLymү92x*58(z;q`f:ĈN_+:}7?o-oN{:5oN?"Pʣ9:Kt.R\J^Euz5tmtNwPN{._pG>P-TpBP-TpBP-Tp3qBP-TpBP-TpB7j1#Wϥ(n?+h溦Y1c5>޽_`	Og}tiz^CPKn5  -  PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1Integer$1.classQMO1}ta]E$.rpD&Fuk%m%_E?X>b43M3͛Ϸw 41Y"tn_:eyZG~2Aޮ=߉|:ȗ&RH0-"({R8UM%	!UIEd,YX
dyW4 +z.X)-Y7e*Tk G;5Pq[3oE:݈Lذ'ݰo:WTAK
iPu	,s*=l&W	} c򄑭bmq IabqL}RYPK]J  :  PK    A             ;   META-INF/versions/9/org/bouncycastle/asn1/ASN1Integer.classWwFcduݘ"`Ci<G@il.钶/hߐƽwi-\~Α}7ou{3k>mfTTK[	YK-͝}-czJGuT(	xw4{Q#~VOԄ*JF`}(Mɮ)KL)R:ѵéx2nErgZsB3bݓQ}JH"ǴDg*IꆕQu*P-+7bB
=Ŏ\Zb=6$q}iD5뉸5FVZ`Gh"d~TNFl"wč@Ub*^<?}FZdyL'4_r[Hv`gْyiI_aܥmh"]LlRLZZ,>|1d}oWJHG+ީvQ`p[]
hGElRƚ1Z"
[jgT- A=VT4KU<$|HQhDOoE2{mQы>b{ĨJw>HfcG0`PQ[擌O46RPфiN2uW1aʀt<f~҃x|BͦEHd$NImiQ>{<JHQ1Q8ɂCLxIL'%6BTTmqdFKLajR\p:QSKPj+h'̴V`~X)MEW>_`sQ{$vTpA{gxƚXt-I{%'F6u=ar\]GҬ*>R&#4
8a>oLKSY)gHn[[:?>/(xF%5yR()ImdY0YThm[ۤ%湓#'sp_QU_+pʜSV\(IGݺGLbAo
r鴑˲O =v/Ї;; tj
pGvKkNKqHE{At?
@ucH,9rX֓,p)9"

<4WEy{R4ۇ\4~+tNtݎF*:3#Na-
n0X`JN+Orןk0ie(q9ҟ!3tZICdcˢƔ#.ӴDn#i~E5f1SԂ'(|5΅*hکU
w?<gq]֟szdp}0%1QIL//{-'U2ԈIԈa)u
_ߗ
FgPJ6-t"R+o|8Hh7zPɷW݃(B|	<~k"2A	{bqkoE.3<vdD]zl
"/ggPAY]+u$0FVZjΡ,$jEVg9[oK9%|Q2i
o,=%kJ3G &cRw5i_*iIuxY^-(4Z"Lu=E!OUtD1FVk/#1A7z	/KTc=#r
59hP<^^D{*Ŏ<Qj\.FU/^TKD^h
+~b7
'na\luhUlrg[+pv5Tyvw3X y&vZv.*s-b[&;
%l[¦\ %;\s?sղ[>4ØՍu^FS
w˩HuI7¬'Iu>cYLLex72~yPU|=%>뤴?s{rb(bDbx
lTF6OZw{#<Cu7RJڼUV[X'7HIBm6w{M5Oe/=YZO[u'<Ϗ`?@F+O]EY0|	QCw@C|#<#kÁps+(
\"D-^Gd`@wpeRxgWuǅ_oK
{3ɮ߱PK	    PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/ASN1Null$1.class}QN@=#HTQ,jL 400%@_F?2H;{'sϹϷw X@DC"b~Zw~OuBə儢d5Y:zeOx ecqGV;ahW:A7AruA%Mx%HL?lDBU*c ;Fs$m3Xd)jZŦ
#eu<z#80䶆m|P~K1StG=Kn;{^=t"(CRg,!=Wz%QЎWgLl{S@ZQJm!OSQ5O`_]]ӓ/PKBII|`  ^  PK    A             8   META-INF/versions/9/org/bouncycastle/asn1/ASN1Null.classURG=#+	|HGX	 ~VfKvG$/l
LU!JjT QjfgN9~/4nN=a,}W4EtfR.L3(Ccuu.ol;qYY
!z.z5DC?6ەbq.QsiHrAqK/vPxmiؖÈar)ssΩGb\eԅTtl^aճ	`1pɷD޶t.A3WrKwS-p nFqzf
ː_2\9vEe60)J"╬z]S-l̮],o,q&&ҐV1O2^C0^	UyT!kH.ѝyorsvTIavMZt|Gt74<|pBr:WΓɅ%q}Ɛ\8c
K:7|Λu
C/IH=8yRvMSߚUaG>IF.HuZ$:q+,FV8'k*AIy }H"q_UmKW:|{^Ȇ]sCX
%i-6ՏԐ_|d,EPAUò*~
ivk~cKۡFkpf
wd[?븧g唋<7͊!e'Z,xUa^PgmpzW&i2ǅf9" ' 	^Oѷ\GX1:Kp
85yI
!G>BFi
xyag*71AC=yoMG(v >7^FE;E=\ES\1S01Վ""7xpj"soNS|g tk]Z!fV,t_l/fxF<'kPKʶ  n  PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/ASN1NumericString$1.classQN@=#HVQ_qVbjLYQ7jvJ:	5. ?8<4(Nsyx}p-sHhHG`7}&qoBv/ǭf>\ u8Gvr߮Nݺ֑FFn`Aoޓř'lɘq S9IjWt,!a
VkB3)ԕ<f!J8ٮX38֌bYɭF5pGa=c_LSMոDB4:Fs;)g1[(mCB-@+m?<bkX [ҥ'h/X|lTn j
~PK4g}K  L  PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/ASN1NumericString.classWSW$ɲB@| w*ZUA[XFXN&kXYvqAZ}?DjKؙZ~5)=ww 2f治{^߷ ،<
3]s4Fj[64e{SMZOnԓFJ>)EP ?CepYگHUbzq` A0FZ`R+"Re|ƭNZ0i-4ARsr&Ɓg.`!ò	A\Ӕ՛inD"	1-q>C9mb3[[Fq\"=J'ekju[ƒu+ð*2ue2Lr`(Su0/vZ@DB	HJ"ӊՠR?w$ZI,O &W)/a|PFl"]-eji%!21sv10 }&nRIwo{aG(TLi<G%c_Y3aəp[6E	+b'v3,bTR5Zd9Y=?j@?MII@<ʯ&&=IinbV^m\)/<.a?OsgZD:tI8)ysUKN%Cvc"	+x&lX^
w+%DbvT-%F E;w"(n9CURƹPp=$MHVڮ;E􂚂!G&Xfj$sxF,	x|xUzfgI&<9jY+689R)8'|!<=(FqI%gsrZ'UKp\?Ւ={6~1?~m*|n3U&﻾>C3G%Yʎh'HR	7ξHgUL3܄wtgHF{cjě%v.4L4Dn,IFKqkpy/aXobu(yifX9-Pcа8URE\.C2Êzѣs]S
@ݲҔ̊adjftTxWB kZ+ ruŴM0ŰrV
NҙzطV/E ?Y ^$=E_ggww
{PAޟQvծ00ߣm,A-,n`/|":#݄z
iQP	XvڵlkĵT`>j8
^uQ;	
l	
&n`Y=7+J3
?!~P]AQT+	3a<26V83FR$0|ՓHV3JLIĊ	BQ.'MuE>G\z~
"]{͕YW6]*Vwn1[x$}PFu
1K.u"gQ3mǯt_,@>xC*/`s{(x
']F zš`"
)6:<o {(eE`wQ ?i뜳޺K8xhilufc9WNx\?q1o#꽁'/8:SI+e,Xv'~@Zl|FOpKTPKt    PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/ASN1Object.classMOAnٲ,ﴈPPؾȊ@RB"2)e)'OzA/%jb2>"`dwm~O,D5a؈oq/{9CIoZӄe6dP);A/yU˫j@=xì.\ϵzkF?o0ą_vF0l]Ú\U=RfkTJ/gba%KT㋜$jmcc]2h'Wؘ$Żǫ{/)ⰾ+&ʎERT٘,xW*ܨ-ivDaS^mЛQZPz_52ʱ!UIȐIbn7
Cq1tK^|7H/mrMcU+-#E-BZLu69z꧕˜}.Di6ݔܧ \(Nh13
Ź/`LSt'oNprA+y
Ni7I
*0G`JJ';+wid?#fԳgH}D,ZϞ"t
ܭB(ba>ftnÙ38П9]#zI`S?_PKSj
h    PK    A             F   META-INF/versions/9/org/bouncycastle/asn1/ASN1ObjectDescriptor$1.classKAƿIk˶{v==At%+q&Ygmf?*:kA(eg;s|yzswы>PW˰=
vJGs%6~pv_}[RI͐LT;|UoLpϐiv|Y
õP A!w~FRUgCK\T1kZ=\-kҒ0npz̭sQFQK_D.f005*cuH;YmC(.Du0Oݏm5KȇWԳAhP؛ܢRBVB`ʉ"F
6A苓Y_h=;h>?%[?)?a`#H41N`qH-#V|PKDf=    PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/ASN1ObjectDescriptor.classV[WV!(TQH
ZD
j2!I$қXehej_v$լ5$dko 	!egVf5q
T#=<qn*l=Z
{MʨAU
$D\KȆl=ghORvJBj0(
jbdtmG5FfSF=$4*،-d{zKͺ۶Y2Om3jRs74wu˔a'0T3LϪF-p2CN0YpQܢkf[S24ic^)zr\t՚kh{Pե{i-݋2MBLA;n"{:d~2Ͻd JxFARnA"A5 vD>9&[2]~QYaɍXɞ!K!*K
>k({t:]{>&Tj~J`E54-7:&8=+zC*-J'Y	i/-D-
3̺SԜ]kszS0$1LYf|%{\Q\u3+mXZTb.(KTOR^*aTX5u_,25O \Q
WL|}P*Vʽ
A+GXcaRAȔPgKU0(TKH0_
2rȋP][10f4QhHȣSKQAspN8îM}.?`
[͖(ҖկQo:8F5QT5܋tiF0Sq"x<u`>jyDL)*v_tQ-onFdPuUPGX'b}к_ݜy=
uFB >;5]w^C)z5||[Eѣ0M
6Mn{%	_0ېZ6ׂҰ1sxg=5NM
.-}W>rwۈݧmsWT2'|aB"NjR]Dx?Db0"xC;2}s
dU5-	M
w3wafgUM롎PL u<@mym|qݏ≟z)&F@wFOHfY7P^ ȚBP%G,@hϐ@@vaa%R/1(p#<[ &j	xOG
t>F_B<߁yN p}^\$1=*Dz孤,dG+B%Exz@ B&yFY4G
]/k!|@0!Z@9/PKO]    PK    A             F   META-INF/versions/9/org/bouncycastle/asn1/ASN1ObjectIdentifier$1.classMO0Ɵ
2STķx@ eO3&H@9QfVIVzQ2MoOykϷw ӱE$гZp.,	:k\7XQzg.<%Ș.P˧³J>"ձ2߾嫺+lȐ 19ވfYԱ5 ƫ̕6w8	RnȨd!q	lYU7q4l/
eN*].@ ?Q,"%1y	,G" 2ը*/쿀<aR[؞(H,<Cbq겣z\쪩PK ?OT  W  PK    A             N   META-INF/versions/9/org/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle.classQJP=Xִ~Ht*Ņ]ݦW
B?FP[?J[x2s93/ ְA.It.ŭp|.t#Bh`N3H!m"ca\8FS-W/fVVHHEXi$!Yl/ȡD<
?"T+rM;dpe\:l1ģ܆Sm-s(Ƹ"{>d,,sJVTj3a]we#^QBR2E<#BfJ/@A8xٜM1B
.=|D.=e29m)Lj3>gv?ӑ@CrPK-  D  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/ASN1ObjectIdentifier.classYtuvvg !,,iWB1&&HBZIEXR펤5]ew:[uR&ܨ۱X'vkK6'm݆b{gfe8:;37/]pUxhj:=3fh3ɝzw>fDpH񱸑V*O	=9ړJ*N'x4OD)3Jz%6DS<43
LH2n4A#xœqs? 'ۛ}`4&6tO'fA89s"lY;MфQJPuW[5Om t5aA&&IfNg)݇
q7}|tjit^uzo%T[Z}Ȫpw!PDIvr·-hЄ 7n#Y%qbx6khvIѕJFuxܜ໌3,C>lχإ^
lHUWBϰ[tYثĆ5	*Fه_Ň4@kq#W"#Fp56
.
EFzd90^S9![WMZGC*4a¶U裦an'Za+XQs{qVU ]8a &Tk]46tJE84xSe;KdֈQ!q	I*پj*wBIYOex1JkZZ/c0Ti-`ޓ0愅x1
 T3z"+BSbuHK%gg/_§qZBĪŷVReX0
jx
r0q<4~RI#\EFV-WL*~p48j$tQ/|PB~?ANVˇ*>MKMDUٙ}jH2Ujg_x-jH#_6F:SRܒ*KR\w0fQ%E|독Bڭn%
?zzشΈ,cpXϩy
W-}ԴCdavƬ;7*~PtYW*Ct4Ũ,Mu̱\y3
Oe2+aǆMЈ !]@B ^U\&j/{POokN_wp_2ڦR)V;"*4KjF2\u
o6UY856|}_2$-
aG;Kyr_O[&>}
?dh"d{GrRdR\tN1) Wqڍ__q6v-ޞ#+sp
5
&us3>fǥio缰ED/Wn.S̴qyU]73=juĎ&Op]
񿼫e&cc^QxOM)R^3eSA\9mkq[	
g uHƟS	TBTY4){L|*iQ9oEl.^{L+엜.Z*YE,0\ZT{Upō-J&:tM:kAZ	KDbHT(+
Y➻4@ጤ҆!Nڬ҃XUmtz<y8hQ& XE{Cw[Dfn`QsE=>7*Z>eA.\|݈t<rww؉ܔS=;J ?#F8|(}aP=|'	#cqѧ\鞹
~'MvS읯GOrD&&lnze$3|>H|sG<i>LHMZWS{	w0C:ÂHzO4Xг71<0}U|iє?~B'zMެùW&ҩmxE[g*eaNb/q=0)mR
B^`+ȣmq>ydjQ9Ef!c>@9^|˱CtB+
TM(:M-3\1B6;2[{RSS+1Zo}^%]z"qN&UAi>Ul-UurMsWb⻍t/}|_B{Aj=[(M,?[P%7kk|݀R93č4um
R/E'ϿLSl!<TSw~4ok|_9M|_	=!{2$lyL~23mC94\Bַd 8ss	y?[)S6Riiw.ub1a+_:gPϗ9#ͬ9T4g3Y^0,
̢OEop:@)uPCŢڛnyutYg/=˕~:
/c`9
ly|J,eqY|Ou
^ǧ^T*
[öF؄P;D]yݟ57?ruG{8{Y9k\s!~kT}C=|r.bxbn,rے#슙ޖ%|hSZEl[=8}
lPs厖lv=KTErϳI2rK u;ax,#ޖ{5Kiv(-Te弬
D:!t8b+@B%uWg"MpRhM~ᗬCH`'	GZg=mk9=q(w"9
!n˒akX/d^{3JgW^9
N~I0md+d0-H<9J\/ۅ 
WEZF:EKxsVU-.-Xos]thnYǁ-x| {جM_x+%^ςhex}:1yA+{?/	Jxu]/Yc,Ȋ 8gNřSeLuƪn\nTrO^O:򖢰_aW.zJ;MQ]{<5`J,<G
ŷ;jJ}j3x/<g#1ȿys(0/e~_Gk+(
dmJb/s6%}FGd2-kS$ײ8&ҵZ6]5F
P
U r7^+T}k{]5'/X3 ca"Q<0$I4ϑ;K^~;8
?]dBR,6qm#Y<3hXݵnuMVX|~|L?
l{V|ǅиR/9|V栕S\98z8B4_Am
ӖCߠ[޹PmJ;[Xα=5n
\7_DX*v=륣xQq@<H--1髠Gq~~iԚwM~!h&PPKcrx    PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/ASN1OctetString$1.classRMO@}W 'ADP#꽖ה]l^4G^Jdfwpm)
d,dc8T~PcN]'@eN	ǻ8CDHOJγ3qlϑ9AhWM,aـia^2nt	Ur5=9`VXj@an:CYzհ=yCJy&:C9T2`ILYg%]OZ'7pЫ0Xm)<.4Ii<@۠s1j;`od
YBְ0U{֩(glFNal%eRRQ/PK>Q    PK    A             ?   META-INF/versions/9/org/bouncycastle/asn1/ASN1OctetString.classVi[W~oX&AMTQPBbZ.Q҆Z;kf0}-XK<Qmϝ y 3 
xPTEYTxʚɅk#=21\nJ㉡C{lsSffy^T(𩨄жM=)kd
l
N\I9UCi}FnjYsl(в~LZڄ+Q:h`:۔j`{A(V{.imٮ}u9-[`d>gn
c8hLSѝNeg)8q@A0&<RO=峦tHa1Ѧ9YRgu1Ew"p8Q1]E!.
tG}(xD5 䏡e}ݺa<ਊGefx-;|8
:ep][ %Q5Ytu:_q/eI4-~><v٬*NJ;8s眧JԜfڌɀe?T4QCCw)@ <b#dzCYa	x$wmG8KB-#AU$!Ǥ:ckw22\0h|HχsxAy/B#nT'ȨdVIPCsW8>+r)з_v(.Did|<;cUqI'#kh[iO3TyGLRuIZ৓h0T-9ݯeؑCjj\3vR-us
o9y7TfJLK}Z66{1K̕/,Iq~JXZ\/"Jܬ,ABbʚx1悦|/,Rt6)6#i<	'N2ugW-;bnd>ªqه/񕂯R}9gMs=qJK
+MJ!i\wfN<lL~/
&z5Qi)yFuHKPUF	;-&jΖܻ.<mtl*@	.gޠD}"W2B0$?"HEHwѸ&<+h#pd	\"0O+Q^Y+hIhqwk
.ПZ'}'=7H昨4h?^`$?gR0W]J'Ѿte;]YΉ_뮸SO߾ʇzW[pxE[9]2_EY5Y~BZ>WJnBÆuyqA	7mEjv] {xE6*l{yc^|.G~SZ&Xoޛn>W/H#3|kC|+PKn    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/ASN1OctetStringParser.classu;
1'(a++	?,٬,<hi707`DM`j][}T&Rxg{w2\N!08ӅTF&UKFkF#%K̆s.l; O0rx lט:jhBw"v
/PK      PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/ASN1OutputStream.classVSSW^^^!	jZAT~Ԧbi $Ӻ`וK\:q3mlC;ƙZzMH !|=߯k N
l.MO&̌M,eG/]>>7昹h$n!A֠!џΦ	ĝD4Vb*֧&stv	U744hśIdI@j'2K|"tt4S*Z$Om8M:qVnt"VtnB	եa?PinmpX
Gmo-%-
i3P䗮HSKf:uȲLfR?e4)7tDYۛ|,L'׀xGI*W¡011$49^6whX(Zq]Hh6
phWS	pỉeMc1sf%BŊ!C`XYkp? 1jmm0to'FqRFLϥEbj]f8k8n2J>0)d[DfNo#|}E4|/e0Fv޼>:7/Z|IRVw <ZFqL$o^J,]rrԷάҞuf򏮟lu;c5E8:^\uW mzTRϐeũ4f.k%D/<PNb@5kX#ܵսc}VꫨʝY~L8@A>rf}N3Ҥg?
Al4DZ\4@{	/c<-ʾg4)⥑ޣMv=:[I%~%o˩)O]BmX/	I.)_Bl~~#85f=/'{7qµ#
47#-<'Ω=GnnE
Ծ"HPh{	t8|Խ6нl_=wSL>q;7{8Td؇_E"OQޑ͛f њLc#`on~?Cgxldm |Hu:e`7loHJ@9^(|XAjY;o>
<("uZSy%>LIN>G:>E̮3CmqUe5>;"8,Tg,Ot;5AEԿB@@˽6!¾%j!c8Va=]OШqrI./+>%G=A`bTSo!.> )~iRôqt[סo{zJ^n /5FU[*ȜH%S-O&VZ2v׿&W#$8+PUvϘl*9{_3Q>
XYLPK=  
  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/ASN1ParsingException.classmPMK1~G֍BSEAVzOWB"(u^޼7y'#h#@Ȱw'0jqnҤ^zuԽϝesſ8En8vF'B7F1w37S&Kort%v֬LKEk׷{3!|\LZɯ`ʰO77(FI=Auz_!?x{*m?XfHثx~O함O蹢PKǚ    PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1Primitive.classU]SF=kFB$ИBY2UiK۔4ukC&d	yZQj$*Sm_򐾐kS?J@'Xw9޳w7 ˸CY!3=ty$ᑿmm,m>dÐ5K9`TG}yБ[2|H\zJj'J>Պ`.0zR}OzOd$\40DD{5_m2{~lk-,<o2\\9pEmU!ѺʺYoC\'ti`ۘg6mxok:3L[۬>uŁ7fOeȋM.ifQJ*Ua|<:36
%z&;s.@C-ߋD1K<
]V}7h=+&dpNu|dcKwrX9XvJ$P^`t(
9XC~5@ivKr?xQa<Z+҂mkwqu}nF:&'=Yd2ǣDD
	 Î곸?	OVu	kj*P9Qd	sOmLY`?+MjyYeK;F|S5_1wR,!4Em_bZ|
ha54P
)u3
GȿË7^OՄXFQlz[#Ud5-cf`:]TSTJC3O8G(Xp~1>8-,VG+,f<eZNf-L3.Yv_B6R)Ŕ^|ӞmXϑ\_YךPü	_YG<ڑegEPKi[Sq  y  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/ASN1PrintableString$1.classQMO@}+HVQjL9Q/֚%J¿ҋ q0D"͛>>bGb#<Vy,I|-b\
!uK_3=p;ҳcnH#A77iUBTK!	5.IjWt a.AN n$T3fb5p4Jse]
4pz~(h3:Xn.2u)E4AC( mt!AJ/`O6<t+$[	M['TnPKhJK  R  PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/ASN1PrintableString.classV[WWN0@m6j[k	bM
b00	{kE{WKCm-Z]˶/}su3gyh֚>{߫lw<u3sFj(fm]Yc}m]Vư}fSZaf#epx)(V Pa.UjkuY}
`/],{leU}h@@*՘G8leǇlѲ!r5A5F:|8
Ӑa!ZZt_3	,VP 6EQ&'*Rw!İ_ӚL#{3v/=emհg  J↌b)4CjVPC`Һ)f7jW3Hn	(uVL3H4گUQ2ޫ>l _4lݮZî, V}jݯ	YB=OQì'wog![0Ce&;fqqKy
hjȆ2B5Tj)$+c%lWv0,V.-%6t=kt*x&Ъ`gvnb9qeov7Su`'tT;s~[s@ΦiO
%5#mw6!"ۖ]'%7f<gIHDCvS)ίZZssw]ܼ_AdUԀ=	
ֹĊeS E(֝u92JpxVx|D]Ckּ{dbNW]s>
Vq/pcS+;)_bL9RJG٪R\nޡgjEhVmPQFE[CSPk\W5[98%	KOҭ/Ua·<qd%|0~eXuB(ȘBarkVȓr;SoHM	QZ4q=,˴B#!ǧMxQ\RWad2Ơ٧egvUMSu"ѣkٕI
OLoBFѤzM<%a崚F>ϰjNJtv(N}hD׋`!  ?{	^+d=No'C#
z`={AC2*QX2?%ckXâX\Ʋ_@dubn@#*yQTKt"{͍l½Ԏa=+}&	h{Em##`pW4xU<4EB`^	LU˸r!JEo#Y-b$%+&<qѝG.!qz*,H
D omQ"<]|Lӯ_q;x,">g}J41<uAG'匹XerE\(-|Z'FDR`|i,MtE$̸
Lz̺jhj,`YRQv9&d{w!5w[k(85z+L܄na
(D}Nkx/ȝ*hgT_?TۃS<#*;69|o?PK
    PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/ASN1RelativeOID$1.classQMO@}+HVQ"&
O5&qhb@=i-k]S]IWzQ2.1q6;Ly3;:70Azm(ܾK#3F`5WXQe.<%ȘڣOg|Eֱ"߼JJ&2#HzLA̵:Ұb`k5ORXw)7dTw Ipd7RV-2waq:]\NSޞVUԘ#gVGBiSQ1 0
m`s\Q${ӘeK#7PK#P  H  PK    A             ?   META-INF/versions/9/org/bouncycastle/asn1/ASN1RelativeOID.classYyX\ݙ7f$!
fX*$('eILh<3#.ִW!֚+]6n|MmkM90{{{WNM BpJj{C6ZNmֱvW
} CȻYݧD_m[2'-pQfc(ߒj-
z2GdM4I	#&UՂ	b(uzB7mیk9 ~hJS
mKJA=mKBs&ɘrPb,"Fil#[",UP2{K|
Op*ƻj
>\e2
b@9=@~CkJd"PW
ГΩX-pq&Gx\SM+P!_fkG>Sf@Y5ԽZK2UOOiC%K>χTe
.'ßY%IqEr%qzCt;R[)Zא-V̠Ryn1Yn5L~^f%{6c	}fFlq6ψ;ĸ36(ոL)X%!ۢJqTSiՄ*w6P	}`nl=R
F7qɏkѽKnbw6;REr;WpTAs} .>m`7+؋8E9گKu	$e*$[6k[C5kpVJ(5KP0}9Qpım
3]H+We+Mvw 3Ci^E$(ɽ~5M#O]awQMiqkD&\n{̝!cp :@
e#hO2"}u5nJ+|nM6]LjȽ'֨j1-L٧Ny
pJưlcשX\R?V IJ+&CimzlWrxXG>lK)8>AI*=<}L=ǧ|I(O&9
<Ffzk85j<u׭)[v%.-	<)cT		ܖTrPKFNN:[STxY'}]Hh14'q~{KT-kŖj`3q|O*L'7z_BǭI i{h6Rv+
$sʟ7o
T
Df
`K{rkd[S}m#iej|x޳W!+WKԽ3ŋ]ɔfrST+ě㟉>_+
~Kfz mJ?tfũۯNf>f/s
͑+Ig6CJTm.X??
^H]]G"7gI۫-%&YB%p0CWK^o
YFk}-([&]~6wN|"7htîΎ֎mZ;6u]' "#'=##[m"^3Ikش-"mzC)
ߝ>0xGjlPiW9L'Xz6C%wBE@Ug*iߑ
75-T7E䩐9X1әᾒf\'-A{*	knk/A`zTn'7.fFĄmj(j
ų.d :خX#jz#Ǳ%8f{S켩>(<Uݺf.z"8
&ZꝢ.X6A٣@[\uJY\Eӫ&Lhxkg˺BnTF2E}|ڌHlK&
f|4/w*Zh*Fk-Hh)9iiY-	S.Z6e4l7˩~/c	AOKEȇ~zvz/^D"pRz_doR&.OYX"Jc)Uҙ)8,r.OTHCqZOr[-Q@B'Y\02z.8"Ԇ-b#"a"PE9SǱjkN!k(.E)4Xk:WcW	9RcVb+Π"%䫃>*:6i^4umK,AuTZ̀ɣ8k44ζDGQtC'DUОrLeaXǰ~;۫&PՓ
铃/X-b6˧?D6yg&]GznvB_k4IGPT7%kyw#=opKc[;çz^WH<+!^rK8ml{YEaL.&ڳ1+3`	݉Ͷd1ǒx1+<6qXa#<~.0\cvZej~Y=RMJlCIliH	smwNC?u~;.b5\0mUw`i
j[l8Da%y
1g^Q@fj cw	U'(U}dmVa*caC2"zҿIe0Qs1<>MHquePE.+8pC?纃12|i~>bId{(s=s#r:) k ,{e(K3;׏I@:
?^}^ϤsII=Y!ph(ᯖlI#@8NvxIKRYCtn3$ur} M
N0Y/ĎppmAw/זHRA/x^:heE%ԑbeJGz頛2w3YIMٗq`AW!,n[;JE#:(?lǋaՔ=Q䅩4ߍ ?<OOc3\[ƕ c@2^<ϰrdt=uRu@Zve׽d_~õIP52Rހſ3M;f{~90rBt2pGiOT&\ִWMΎɑ_0ۍ>J$g41ÇEΒ Ϯ)Z2Mpw
	yrO}0OD$Xe1^bTԛt'L((PK=v
    PK    A             >   META-INF/versions/9/org/bouncycastle/asn1/ASN1Sequence$1.classPJ@mc5"[{9x<UkƕnWz<~jw77_ NEm^5t.UlQcQx>$3m]AKnvg:AѽunSR1AD%*w{Zi9<6QX]ejxF[@LпP'>@R2jvvw7ͥz.%q
~ PK7    PK    A             >   META-INF/versions/9/org/bouncycastle/asn1/ASN1Sequence$2.classROQP+
m1Y!Tc0&5$K}[w_
[x	DGgۊd͛o͏_<F5)LauPy<@"VzKJaZwԳH#c!k#
GW~J0*սD58|13Ys6AX*!-ٗJ3ʫl(/v nGݰ5z1Mؓ*R'}䞰ZTVaNS^y!"їZF,q3d	!{dBNc=I"U;[g21c_uǅl`J=a0VJF[cc(
-w'^)-((NA3X5/HlSwEv<`,#L_'Hf7y5	r	rodi9|`P?>̕욼lPa/˗XPK  3  PK    A             >   META-INF/versions/9/org/bouncycastle/asn1/ASN1Sequence$3.classT]OA=[l"O@cBMJjHԘ8l'eq[wDj`dwtٹs9gݟ~H00Fg?{Wʗn۾\Y^!d_v9L1-d#dԁ0P9XțPMőp|tC2zx)T4%Z,b⪅kN(]H@ńC4nnYM3e9=2",U#p7^5q0;,\0ۚDX [Ö	QUphe;iVɲ: RɈmy@~˹Hߛ_:	-{&6޹0MNދ:͝B#f(rDiwT=trAA u_ı1o [4Ŕ\\gi˵P~5S"l
`' `3I54+ՎS0F6c~ΎYGLԿxΝMN1?PoFJ&&q?QMp7_M:#8yTʰ&H\APKJ    PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/ASN1Sequence.classXWYl&TޅCmg儔b,3X9&4M➄.n	8.i%~_7Hr~.P°^KƛI)]=һ-"IjLdذ4.ƴiX+@.*]cXBO& C%C`ETbs f(DpJɔL!7Q#VJ"E1TLjcܞLJ?QݫVJ	/|,&	Ml(oR9.)xzLV
E=;.=r*%ɦUyLP-Zoa͘4*wjjL%C%UO1lJ!sc
֋؀e-	51x[E4"P=>,tީH)RrGV׉h3Z4 |4&R\]\O81}@~ؘ Ӭ(&n.!Ő`9phGeSU4HjI]pOw B*0xna%+2ϱ[əM+J _&3B-_LRUM
>nzlȶz9\5m+"~:l̀o,nb;ED>G&'fvU"Žї%%Ta{qnN=b>-鋙DK]zKLԬ	O0̰q~qFx.m -b=C\!$	%`8;81T,Fi׺"pCRzۈ?DHSb#iII-C;_ð.?vwxmG1Mb^d7
x7o	y0bw@ێtBn.~9! hi|\V;s%aϓKJ1*\İJAޥk栀0l*T!I8q~J$/?\w$tSһ1F	3WZbd}1]ΨOpO2ޤ,R*m#;{iIKq
Sܿ_^ΛktwWY%Jv2MM25ň.F{g)* COqТ+\	
b}jŗtUR-)uF̈_X'-䟲q)i,C=oCf-
uB󦓠Qnz_cCЖ;6W$mL181%G¤)iqOOjXLiJX
ٍk$⪤T-yA-E֚[jی;ne.9͎55f92ق:_Ţɳ-1:(ErAz_>4+!m$J	E/SoCv
EZU{TfԊ6Y'7+?PjLg=;<д6IQnMMr K	\x<SRU9ORU9iJ2%Nq(k'	v}N
J G)6iz{ 6	W3D==;G)Cw9Il8
OŚh4.`e!0MhHMMx뤼eúoX֭4q%\ʉb)
u3z"T`7΢9t>A}Bqkzm_8/u4E,I*9D &!&Nv,{;cA`/أB
D58L
g,-j3h)X6-յ<ȆL8KEKT|ps)8plw+b,,UttE' j,D)GӔ氇L峐d`̆KΨ>2рw
YH4Wnij-[8ikHfV2{j1uzyEC}
cZMb=:5j](
7c>zEz?$ /GP8͋O-H7ǍNTx]췲ҺPoH\'lje(-+:JW(oq9uMʧQ1cv.gsƬS\e^4ww=%|ߢYayi{qpW	վ,Gg@Ozhhr
ۧ}'$ʦP4>oj`$W~L5pJv3^(v2,NgM#2t7
d꽈zm
SLc2BM78oC%JހH%ve| /F~^dzOCZִ~1)I;}PHV'1WqOuPK_o	    PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/ASN1SequenceParser.classP;n1	)G ¢HE''M({C!HT Qg̛]
ahVƶ0KX~Fq?k<;_%3ers:hQq
řYu{6@h9Va0͟O.Osbluӄ**xaPxVCU
 PKP   )  PK    A             9   META-INF/versions/9/org/bouncycastle/asn1/ASN1Set$1.class}QMK@}kcccw`j!OA`}Mֺ%٭MJ/
(qjfayc,fr:,D<)ٿ
\~2bs. hy!S?bwST,aq>{-dCAz^G6V+1Օyee\wP:/bk\X.f:!ꕈS0"[{.	Hf4KƴȚn5}yGkX6W02\ec ͒PK_mҳ'    PK    A             9   META-INF/versions/9/org/bouncycastle/asn1/ASN1Set$2.classROQP+"P-&+$j@BѤ}ioW7/^<h!QٶbP7y}ͼ%fa1Yruv8T{O:զْE=?.?Խ,X&8'p4S=󕯟J0rFaLna¼"n$e RiƮ#ځ[CX)j?p54SO,JI'Ԇe${j?è̝#yM{a畈D_jBO0+<cB)ZBNS=I"W{ׇZg2n/c_uǅl!ەz[av2
?KO%8N+>[8((6AX5Hl3|pkYiyX;Cp#,L3_$Hy!	r	r_di֎8|la[_ttW|h+5y^/S#
PK}    PK    A             9   META-INF/versions/9/org/bouncycastle/asn1/ASN1Set$3.classT]OA=[XZ`t	!<4)I
IY\v@Ϳ?&F_Mxg_&;sΝW (i#%a-"^ko-2G«8c2F՞U3H+e59(
H؞{vg_:<]`Tk㒅IQ%\1q5\'$Ƥ'"etEǓ&nIo,0c&fYq_	Z;7g[LX8'P1Q!ܾ'{UϹfm^aS˱@*r2muv6~$!Vy)ODg̷֑}~dj27g;|OV vBUW&0D`5}_랈"a+ ϸ BA?xGo*=;13ax>}7N`?cn	-pϤ
LRCg%SǌqGЀ'1?c+\n5c0u/KesƀA
fa~lbqbI<#gK%$m F?X6PK):N  p  PK    A             7   META-INF/versions/9/org/bouncycastle/asn1/ASN1Set.classXy|\Unͼk4t:	V$i$I	IuHLޤ3/Z RPejْH).EqGEqCݟkfMw|,߽w~	 2
*S遚]=?fVf5]4C$fqOZ!p)(2R<֙N%^M`]uq%9:^&˰\@	,*&3j{VE1Jd*X2<eפSCM
1VP_SW
Vݫ$R5-}qmHt7>PӒLjj1=02FNV+B;mZ&2.#J)~(8A!uPkNq؞0vSPu##pahyQZW}BO
nBRP@HǮk!&I5CWBnv(eBA
hθL!*ŊS3Ձ_3Dl,!V]o~Qd{\<d%Q._f$#T̓Fƥ
DٔGm#X[gwձX[bٷ
rn(=82ZqL*mh1{H($9KM7ZVU]O]ZP'i/Zp&+b-b`Pp%h5R&1j9R
۩YhPU~{Uk*tv(x	Zb'TAV1O݈H֘TA`v^GTMJ1JzݸF uXfT:圷[AKœ)]vS{KOL>wMa/sAݖ*C6},pYobV<Bv6-\`g{!׼śd4)x3"46JXxB5l]If83wPB敌EzǻX
y0xn\hh!r=-)x?>@{
OQfEmz4whI$>ࣸ6uxXӹB!{Vϸg!PZx	U4b
wѰ86R֠.X׶_y1`.ģ^܋Oq?P|,%$n|H|PCx:-%\h}Mn<*p1)Lփj?M`W[Ģؕ)>2&|v2mM5vNjiajxBI<IE(	xhR6X|	_BEݻU#m,yhtHYeUs8ᤅ#udEEi1Yqz۸`.\O1Q_5>ئw[/i,KLK6$p<l5INuk-Fв*錖>Ui
/ckZby|N
NR:$<[ӕUc$M!ܼP}^h ]x>'B5MAW4cw?oyHZz'ь ߖԷ6(xQ 8,eFT?k'M
j6qYw*]nYf2U'bXۚJ
g&q|j2EA~SZt]K$Q~1w9B-㟳R[yĉҽot,S?Ão$-z$7$!'!ҳ*k0cӸ<B񌣈['Q8*	wq8"JL_-GO&pJJLt߱ѭ)l&0l!I]jfKIF?xu!l~#h~[I?cKi܏eh)}ڞKt`-b
+P CR][#Q:[m;8r]0n>׏p5#*2;I2	.60MM4$ԱUf\wsm&o621\}ƨ1Fh'aȌp292EpNQ-X4JmTͳPB>Zۨz	^-bԴg1%>[4Ur3`	PNi'v>i9f6y&1CCGm候B2*!+@][`.8=ND{w89>9(W2MQ
ObOO80LVp_TusA1:Ǳw汩+yҍ3
`k &o}
*%oq'%$H<)$UP㜮
[W$a=֔wZ _Gl;hj0&6^{C*>z$JQ*/=|.k9P8k?cSiws+8^F^" ~@ہ+A=6df*$nmq|x!ʞ0C:De0\cX-8>6BxOi,gP,{	<-˓KĽLO`xPnfώE,̭XJNJLn+v_رچ



,QRNDN1$mr>>E5%:ăN
3ad[=o9B\*p|$B@q[I! (VH0U	`ر-,mhÉZ~_:/aW׺~WI$ш\+99GpSe9nsjvGyZ%[m4D1)Nڒ|CeŅB{eBc~oԳ w	<p@&FxOC.{#sF%FgiJ3XcI/skLkI)%(aYM[¤n.=v{/v7PKN    PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1SetParser.class;
B1Eo?KPVV?tyqx<y&DѭY %F+aޙr0@#269huVt/FyM~)#ˑchlQTX,-)Q2Qd}_=hoɑOlIn6Nw0`㓢Ov5+sbdQBh,2ȃ?pZ	0.jx PKj   $  PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/ASN1StreamParser.classX	xǒ&C)  [cB'(	A1FZ;"V)RZ()˴m" hKzE!@]ْ"vf7zO8QZ	X=EwDP=dTe#kP|<n,l]lWzwPKf=2 ,-vІ^kJ*VƵq@kia	r?0թ#ʍFx&ڶ3_fda/EFx*az<&eBƺ7nB莶zbX85<D'd𲄥;Sd,ũnc<9USi5P!]Kp+fb15-Ʉڶ`{S$~fV5[6:m3X!L}8<3mȌoa+5nP*ťn"i&gc5!d!U3
,*u3]Q5iuͅArhuOJ)]6f2Ԙ8]cY>t:H,[Zi
rج訤15f
7Bpj+:?ٞ.l1N(ɫAx4nѵD
5I@4׵e	BFuQy-eb@ VNWa\*21טjM"(s`.GEX\F,0*cֆf\Hl0٬qb]FWVL)QD	iS ,+2dH&z*[* i[
dWvbբ2)},;Nʛep nXўsk]m/qMp4%;zpcY$\	}xӻN,C#Ĵ.BL{eRpox˶nIv:ƥ{:aJeL2nƕmlb\7T4R%7nŹXY'U1{wHhyKr Ӄs
o؅	PmI3ißI蜏ն/Ze+%<R>8;muyn:gYoXIkq88pԠ%8o羋2Rmj#Ͽ	uLINeU?T&ҥs1PYZv
9JsJxkJ,i?rpn3x܅CT`5oj 1	謮hXySEK\̪g6:Am:vlR)5M*cf
x_5|Jk]S+V&Eqw\U>܀	ߕ=P)vRC/ Md0baR=U:y`S=d(mdB?ʓrB71N{V!?i2gIOEIbubHIWz,)36MJ
>LHQ/Ogv%3	J+	*f^oDW%MHaȃq5UP̫)_}s1MT;ح"wD-˝&^h^mdŬQ1# 	~bHQdjZPi5-tQ
LJh'R:NfaoRCe?lQ蘁(4M6Nf^ H4u<Y@(ۄAo94<ikQ]Ic8.бo?X5&>жһb2²Iy8@c'
Л.]j1ӘwWn/hy<{1iڋzu/$Cp:fpY`YDN㜃Y#968ϙ+)=KHZo\^hc<Y"-uill%2Ed2tО褆9ȤŖǗgdm˥,.SZ$>gu:0ܯ4%j$psz[ūX%!ȫ/N~<?[x
t3ܶ_?1wICOakK 1B*7>/KBimu୓ӏ̏mI5a7p=k'\4/~tzF6B|z747Fw qY1ݨ{!
Um4(K~w4HGfѷYG6.756mW{{EJv,tN~SX,楏[Kh)y;9f09\Az
]oH,~b_DU%Zލzєž 'ڙml>;{f ;'會_Ax_7C;Ӧ3V9|f#f.=ػQ-L26vn/gq8B<Ɨכ7t=wc~g!<"0o<ήmsbڳs(Z<B!I8|>	ϽDda׉)wႄ"-
?2Zx/R PK*/.
    PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/ASN1String.class;o>Svv&FtҼ⒜T<C}`?̼tvFĲDļt}F
F
M
5##30`e`1PKXJ;k      PK    A             ?   META-INF/versions/9/org/bouncycastle/asn1/ASN1T61String$1.classQN1=d`E|Ņgd1n0&,H@VPǚCҍ~e,&bMos}x}
3iE`7|:^s
ǍS璳4]J8d#Ys{ܷˁ+Dj]H"A70 I̓T6dĸO>iJ:ְh`	ۓ5/QWuT	,UjS;S XJ=wj0U愒.[p/ԩ
Fs
?
l!9AVn3#F1 %YxȚq5`]m]2#'PKA
J  @  PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1T61String.classV[WWN0% ZTlSZU-AiXA\@o~M⃽յl҇}fJHy(k%_߼
(;n.9lcI=ow'FGu״s
"d)"j
9o
s3wf6wR(PB0hpCdt C%muktiAAmh[P7:%\W_Vyog6/IKsɁ_c+ɰoݐ,ӭ>7W(T4cV1DDoW{){4܋vwlCL1CBE`|2T>
Pkڦ8\n8 	:dxj</":ܯ!)YAC<oi|PC8Bcs9e8Zecj(CqP#%
%KN1kCaaZtZTr	┆%QCAV(HkxO198UDZdJ2$r/S!$eʤ.*8a6e 
r穴C913<
u*CδrRyR(%yxR3x*k
^F!7t1)^NJ.X-iLyB

Y=Ou޾$N٨bY_Ή1jG9rsW.2olmHԒi
:R_ATj"u#B7Q9V+eҸ7܂!dGSLPpߒ8':$pZ#2cjq6M'.Z&rpFQ:ʆ╂ɟNAt
 xLˤTha8rA\8|RU۹:nivBmxو'*>g
>cڋƀǜ
4VY 	Ǚ+,l'mrEnY#4H<-mSοUҭSJu#{i*B)_TRLzEBoF!z$l`wx-;+2]+0,c%{
bvw&v\H
nR0(HMblgLQZW-c@5hZ#QuU<躁GAEl "Pm*AOHW BV0zq!@Md&~F
d|LT QE
.r`'0^lۃ8y	/W*Nj5I
&|	^O<J^	^c&
@]4CU,A?yZQ0#˻	G-*![OW1s= JWs,ִP+=BxKZk _\E?PK^    PK    A             7   META-INF/versions/9/org/bouncycastle/asn1/ASN1Tag.class}JP$MӫM֟MM"HWKM%BRP|(qb+nΝf̽_o NC!-4|e^$'t]ތ[ 444	Y:+.ZSLVI[{.4y?<`C`mQx<'_@&>2v	Htw3^nVlD~
ߺ9k[fQcz8kOB]p5tYA+/NuaX5{bPK    PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/ASN1TaggedObject.classZ	xSו-6 R[%1`Hl<[ KFzMЦӅiC;$t̒dޙi/9]==۲~{~=k^͙\+4	\sxZIȦjisU1<l<d-
v!c0i.C9*th	Xi^$FV)Լka"
euTZ`&=6n1.@[iԘrX1͡v\ظDr?d5ZخcqsJSV
\&Fj%LF535SG=Vhiu٬1L[A+2
uȠX'j8lSqú+a(k)+K.nY
؀*v&R	&b؄.фfmĶdoOYb_?Kr9Iت!#ʚY5uAߕ:1\-Bc
qYd9PR],|fq-I:nNb@_鬖K&6Ke`IhC;y<yl,',
N<fYӆS2%qq+Ž!ng "'L$fٛ>t	n2&o٦PHVhڏBl]:z2
%%2=LG#[JOsl /ߥnf>tҔ<4_{t3>|CH"5PP`:JچM,)cf}XdZ⺷u!,AOX4gbՐbUʛCpVpI(E&>NJWASod/Fkyg)tǓ^I:q!$hoHu(o7xj)ƛӼk
.<v9ʥ-&>#cvѨSI`ÿWxȳlr`K֒u| ~Csb[vC뽖a|Mv;{ 
]Z2Qgtćph݅#G:d94ő%e?'4|RS8E\¥v3Xl1^':&45D&ydzvwY
D]{7ǜe\"9${L)pmy$gR>*Fǟy-:DRԿ^?.
ѹgIfIuK(Kupe4Mj	.k̿oMm	G:H%wdME<n'^D	z6/_ZeBRl8g
^J9U<iR=v_7jŦu,4E_~ER_
N?FQ÷tLlOj~|	
6
܇~W}@+e/rT!~:~: TK;˙99-t?9x.jpRBIFd1	Z<%E7U£	.*FU{!j0qxƤ:R{s[sMGR5Q`͉#]Ti5Y;!LG߇DUQ.ZtE.AM4P(mWպUwvc}tp_G, ܀njz[utya
ȱ*j⇻>V]"q_zDbK!{'j}KX
BjI&]"ɥS. gbcC*:KSY5U5_xd)^}(A	90$bnb&8Fʒkyb+K8g8jz]ic(@>ܭ/?}u9V:__;xvZDc#f5ۂR
4ƺ%I'Z%DoDҡx7q<pώv*Tթ<H"rHN}	CBqrr@c~e:g9Fl.͍3zh_Ol?U.	ʍ	xdLnKJ$W^jy
)$H6Ug`K;QwnUn7RCI3+>+u,(,(F27aX*efd0$$Q5qbt.=LR
\ֈ8FUF2HSqTawe	 |4.@KV^<&Z@+gl5]gпu
  Lc9OaihC=I"P,ۭEh
$VAK`L2 \ydƍ3@fCL!7XGfYE7a<P/v+	HaEYF9]ŤvXsʪ1ج[ 
OOwTES3oč胸zX1
J%JFh 87ݬDwDTXynS.c5׽0$*WshrUv
`tҮU@u4Ixi<^X4VyAc*X
84FϓnEЃ8_jY!n\@V1F.<ӸNx_&Id]%.fxH[a<{Ag[~wZwYQMqEG{}~ɏvxs!C^oX1A60DG"ְȫ~M $ WQA7iʂ֮~yR/9Z|#wc('#L34쐮9&eҧdx0ި`˥`xqۓ^
[Dڊ٫(+
9JF(`QYVEPt&XGLFf#s9"D[1DbkIttˊvEg&&Pţ8	!)hd5Lҗ"1Z젥OĹP^[ފ*(늒$3G7"pTe{(N0gJ~]NhT㍒Gr+)nxRpa=')%@ :OI5<CI<<<D\6NIZ-}O^ݝXiT1&Qpv2zfyo\_Ѐ98VCk)T֐"*"[JN	0RuDɴbUK)$?77~~
5-Ƞ{8яhLW,3/^`";pV֫vF}m.hx{RV+e|?AxM,N-؅?KE0mcq=8v]wx?86O7(=kғOt7@sXOev~ffDboz	ʆRtkx,?ӧ2(N_&E=gv,.Gr<~F
ZvBVR=sOs'fК[M>;V]>.'YO%[PK3  %  PK    A             F   META-INF/versions/9/org/bouncycastle/asn1/ASN1TaggedObjectParser.classN1"0*^W.Ɉ+WJX4Q0^6ЌCv2	2v.!OG2g2p|f*ŔhZ׏s>Yx` KP1<&+
NH`+.AGcJ
JPHXG_jIID=I#`Ls&A)YՏja?w<٣%j"('6CW
e`7ƕ"8M{{Qk'沙=8-]D}:2[U"=)rnfz=mM؝#{؟#8N/PK U    PK    A             8   META-INF/versions/9/org/bouncycastle/asn1/ASN1Type.classePMK@MҦISMlD<%!"JOmⒶTK
J?%&
YXx7~}8ƾ	
@UsJ8n)2$d4Ԡ
a$O'8X4"4z烛p1cG4M	x	-0	jc=ˍ.Zvc,h7m櫳98Ust6~ĔC~s9x_;;uwv>C<M%b|uUy"/sǽIxP"
e.?PK@2.    PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/ASN1UTCTime$1.classQMO@}+HVQA#E
OA$FZֺݒv%_E?8|h0ly3[:70~M cGɒu:+]Iad{A3$!g6mytgGQ^֑DJn`Co幣jPH!r5fSѱe+Xe؝"]mۊ_$SSfRh̄5dfK$t9w~yGŦO
+SO5xAD&WwAKѸydhCz$H2ƶIB,>C{d|fl)+3~PK`J  :  PK    A             ;   META-INF/versions/9/org/bouncycastle/asn1/ASN1UTCTime.classWit%{dy
`@Z$&41AT^MtY i͈tImM%$=t-"ݒKڦ㴽XG}̼ww% o+ls&ciN̬X{w$V_]/3^T(Y
e餕<FRRS
UE-p	,;CYSKLN]^Pbk=5=ޝjd2Z^"vXLiDgߑ>a%FUŅH*'Tw6K EWфfe[d&!VTg*ҴvH521ڛʹe

,RR-U[M/bV	"1<OVoJ39IՎUb]@!-)+87K?bh
.[vkrnRU=ËآCuV()wW
Spn,)'(%`v}%ǃRTDv"fxr9eMw_ gK0ij	JEV(xEdz"3#,)Νi[Wأ`bT P>rQ#$EoN/ޞ
aEL(4_xvvlcFF%b̋;cH )kL*:0XbwvH8CXdZW&LKz&r2`F7P1(Is{2$`w0:RKҦ@l\j1-y#+M={#.#=ܣx@Kqex+^!bWO>Y̙-më_)`-T^93˖J2׏aTRRz&a֔oU6j7}},ߺ7<T!߇v])kEC{T{eN`^?<lyT3`ΚYkTQ
ylQJlpT9X=}lC*>P&-F!G1Wqg9Vi)C cx5nbkh[3C> -;߲ދ~>"{)FyR)0Ybꢔ>[ZP61W$ϙUh>.̛-GD7v}^])9bl1ڗ:MSeO/Ҫ}R2{wJS + q.F>URXʹzâk5nMCT}@f,kIl	GR4lȄ1N2sXK%8p\E8|[H({
(%C/lQ4E$f?~CB7w~#La!>/89cB/;1t#yA;*;L<-Q8X(|}nDJ
QH&ge릂S\
I̅Ema$L7
4zE/IZӢm4Qxڞ8CﮣXFﮋŐX}ϡ֫X6V>my#4=Gv7~A<Mq7(h}Le+Mygj^MjcAJGj\\6Bp%v=~v=4m9Sv9N.BBPУaWitֲv0Q0219-x[;Ehvl8(7mEv蘋q%q0:K'Qxgm!޸k
/7=9Y{p6\WqT5|K;AU&Y"FCyL	,IcLA3L[dY9d{}Pl;?uBe-=9_i8Cx'H[khf	x;.`=@
jW'qM86hO:_\<J.Fe˨Uv_aW(6hȕ1Ɠ4N
b; [5KM4?Q(SpN(/ocHS0H1u֖8VM"$R]}KY,/`62C4+1$.:<ŎΝv+$˃D2@RgEI1Edu38Sy5*-Ŀ-r,ǟr-⯄c/:a PKWA"	  
  PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/ASN1UTF8String$1.classQJ1=iѪm}E>C0"ZЪꦫ8cd)X_FŅGCQr9瞛`&f109 ^}J3JQK{,o`	Qۧ³>ҩL7`ZE[rq**#{L
$A4kL,"a`2V&5OdnȨb!p]䳭R6
1"ؙ)j堭7aЩv>wQPw޾YE~ 5m&BpLbI=A)7}K"`[ *ƀ>X	":G
MJPKTJ  C  PK    A             >   META-INF/versions/9/org/bouncycastle/asn1/ASN1UTF8String.classVi[W~od$5۔V[+V%kڰ(tkd}_I@+X|~sgMH<Or'pKLZES[ԂcZ0{}#=g8n$L5NA+fhr,!`+WHF(h&Pvl8Pjdx(%(،-ĽA=KO.8϶M$7V3꼚0T3H][{i9s<7NF+v*hC;Cر3l){-
Cö:-SS3MOG5ÁXfc2a}d?s8(!qdhrkyN~]uKx@AB9DjPw4>a&.a2~ɪbȌX#
|lx$*8vUX*:Ǩh"Z-IxRŝl\7~	nfוuV0&Y	iO)>uacZm@輰&bL#N=348*ĐUpAdW]T4ƈaZ-PN	Y6O].U	I<.y AU0	z`j*39CE~tWZJV2u2_9)Wlf$2CJ]7QS樌`<GFs.ӎ^+7%c}k3BvǂF>VnoS/b/s#sY1?xuAB$謱Z4k}5N5E;戁AII#QpIyYF/Hx{ЭDz$HemXk?IrL wBRp6;m[vnv%XtdTO$n[ou9je<^^U>sjNЙ\oXOѽ+ʷDj#Գ<%mvSfؿ!W%|KPm(Սɗ bҺ	8(t]  [D8\z:L'E	
$,IlfnaXv`=/{z{{}]+=]!fu
f׳g}ҶЭH	᣶(9}G8c	s"Hkk|}EȄ==Bݿ"#CJ`"L;_xho{pdnb,#(^#Fo(^K>"ỿS;oL
!WgFA)W|M@px6aM<yoB%Wۣ-7"Ko!wnfoaf,N0#R>0tUal n1?p?B{y?_\ǎPK@  j  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/ASN1UniversalString$1.classQN1=d`E|Ņgd1aj P#UX3tȴWQD
mӞ{i+}lC@<RQѝ>*d.NʗX,ix13\-P7"p!ҫ;W&0-,"({\;?S-sd i;튉%d
,[X*3O3Y{\;nW<Aif|EWTQꛂGo	?.i2uu,$vb.W~y$ְ>:*Ia<c~JsR{lijTnRPK>'F  R  PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/ASN1UniversalString.classV[]-h̀M%$8J%qNZ- \Ax,aFӺ)M}u%.Vv>yC>osgAC>~=wѝ{ ]]Lf~.Wٓ;Փ5K]э1.E	!ͼUA4 34;K%1w
o+AaL#`PU4aCh<wz0oz|{hhЪb'vQm14=o[9۶>G!S⾏a2ted0<"/F]rө)h>Q3ȎammNޯt0geuləN@|C*:dmN(8*`VTF_y3`
󿐻+G$<"%l^#g>[6>S,2~׋E^`8ߢ3wr{=xBċP<χcxJB(QߖGa݃qQxZ3*fh_gXuJFeeI
rOA΋ĩ>N
_ۘtd OHaP79ZuU>KLYtG?1L-(¨1!e3 $* zMj#ۢi9L24r1?I~IĎleg]SNWjSfy,yPmV-$,[l㲥*YIy_K_F"7<*LX;/TuC$Tؠzl$$U NY38xQGɮ	Aϩ<.KGf1Oݶ$Ebb|`HC=
eʚyꛄ2tlry5R{2W D\Mc^5&?sc}<AѼ
3x4u]%Y
+.x|]ꢷ͐
L((*ďʌ%%<t$"LE <s1}yÿce9T<iP&@nۖݱOu0oJam(k3?/$R\7pd^fO{eӅjY0xeeT˽fzؽŀnc4frj4*N=
ۂ*&ݥ[<Ѓ4>WknO}bSבk:i}~}4NJCȉ?Cfݾ0wHH
bs.vk{1`~ 65<\C<QJ&oRdPٷ|d{|dGĀ%֑`NNmE<h_}P1p,Q}+[F{A|ϡ!z>P!sqj$&ilx,z;B7v6ٍ%k;uM|hh3ZBOF09/w|._,o/$jDTn+x$^Cn%v]0}Ix+O@#2b4nX8G59j(wE\RVwE:"X]EZKkY[Yn6Mfaz`:"	-}yD>\EG5r_ߓb!wBW5W8?Vh#,/tTOGr	(|ix=4j\P{,i=\X{<kesv8#ٜ֠UҞU֞5UimҴ M	Zwh6kC0. 7-Zio?Wo;PKs"    PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/ASN1UniversalType.classUkSF=K!!4		!m]&m4)vH<4"o@H0Oδ$δ2+qe=qwop[:zЫ@?^=:}i<Lu~z!Y%3\HWܩK6BfUCjg٥e^u`¹3!	.z\Tq$1ay\`u6zűsUT\_40* lSqW4k_r$T.ll	S2kRFٶEUI7ECZ}\0en2$OaՅIϧ3=M ˠtUvdUzS/b>0!>bۢ:&,I+$';1Otd5Oڮ#mL5<kǒTpLFn3;aM噷<<B_h]HYgW}a<~IuBM+a涨PIG2fE
%1۵WeSWrRKw(n>.jG

k(OюIEV2<MuaOWGL	5Ye+5Ux8s{7U	M sg%O![c<c3<Ve=|5L|
+4%dXniX+ubdE%N,Gk}r躒2sBn5?Hm
\bgp
jS=w[S9qSB	Mܩnpzu0izi%nUKe^ ^Ae|p#6iTtR)MzPV1Q's^lXw5";'&`C0eh2Fss/s3y[o^!O6O`Ct[bhbhCWF>	K10I5iGaF0l5 R,xB陊==ģ։$kB`6wk!hL%hn`=*Ït}rVuX/PKR  	  PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/ASN1UniversalTypes.class;oP[B˝B@/ -B&4N0!NpN? 2T	$H$q!Gu|>~JPʪ*F6d <;Mr,1=Q%i>
Tͨ1&c.FF<`d``0:Jln8(ṉ1l})4(Iy#xIw3fT,$5*mækd/Oem[z)fԡqwuՒso!:B#<cVZ'CFwjrdk[zL.e5mphDNRN=odcrRbԠFGwQaM[&z%'"01ks/+3'L	zvV_"2rZ`gJ{HaݚG!G;\8wl&O32sVYqH_[s2q^[럒NĔyyL\Pdx0>+}*6Jp4$Gl1
ü>iuͨb(]YFcPIh&?]w]pC>.O
^7-x>[!}|+Tj{^6pAp')p1 rnsEKD PK	    PK    A             8   META-INF/versions/9/org/bouncycastle/asn1/ASN1Util.classX	\W?XeB@B$K²BH4bB*cXa݁5^ZmZ節Jm%@lwQYff_ۙy}#O,p9+ ^xa1qZlcRTf(n%bA/|kT":r\jӉ{i?(BPek=[ʱ8/:&Ei&@MQiDjW$Ҕ/볜+Sp}TZJMVDCnXg\LΕqjڶzQ'`
2lo2%ИV["*c=Tih@:N|;r*UL
yІȋFuבx\(K]ǣҤK&,4UԙLDEPL,&d
e[Jo}ck&𵶙ʆi[246{\&5!hc(Ue'p]hg(Wc
9J>?]LJ*;؅jPvF&lDӏ.x2L}XBRЇgS]kMiFD")`-\c#ûOcјL!{Ĵ}\uckk1 yqXu,嚊{Sp<õtvDz{|3uxaw 21C`ׁn
F*gjbgq
b6bS<I(D ~)H{i*NqiKԙLp^r8hnW3sF4^K2rxHAe\WQ5LX5jүㄷ0pKop+hUFM"DlZJEڬ4ؗMd+Dw7op_Z+_5op7Nlzْw֘68?W=|RCKsX^ჺnvs1iaN<0z}D\anGC@1eVu%q8F}S-2qm)Reɮ.v٥wƜٕ-aCt-.rI+LHQvZ_Wza7ZS<pI|Z[8Wp:ж7:_aE\Fαd,*}қGsWݝ&Zm{iv;Bgw-ÆM7:l[.a]v363ΣNƦ:9)%[#ǳIKר
fmV{TZQ_o|U}b_'rJ/cɑԣ4,YNk)9xɣ>*>:JtJӴ$J'`T)>AyfR";ڶmټ_ۚ6{CSN]3t/ӎTc*/ſAtb˔Xb:9.iLj1*'S3wP>11I &6!knRtxL"R:D	T2d*S7%\EӊPLЯ
p(|~gQ
WIO+	Wd<Jf
H\<iJp!>G =b(2
N"7k4c]Oxvzbӑ՞E3h>_k!XT1]15ZaɸOqy!\;OsEinq`WXtXµ &ݹy6_ė4+i=͋#-g|"bߑΠ<Q0yPPYFT_~JTsxR*v+Fl9$ؖlCYb\,L٧aܫ5+.v$}7}uq6^ƂҾоZLkO_E]oX`F
w,[QVubBאn͖6[-[kfPoI6I,ۊIJ?-Ж.[@#ȴBE?̗H	Ӌ>"#(F:dƀlt)VRN,v2CWASm^즔ҔG4QWQGMCn2l@9y|թ( Kt)b2Ts	se9j
r3n 	«n5U9J}
_`NTfA\!kنcAzvܙCt7-G7렻.g5oԧu껕:Ը\2`*

^]P*wq]aUYwY
q.
in{,ǝ,{U-{|IUZUSB/ ?440$4kVen`r*r9zΨ'	z0Q?!U<-i	+Ar&/}j|#S_)()?(?)׿??FPKc|	     PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/ASN1VideotexString$1.classQN1=d`E|ŅHp5D	eêkV"5. ?XMp4{`[&10nvNxJ3JQt'K,ԿA	2vSq>ҭ&H0-,"{\9?S
r!Ht]HkL,!i`
V	^Ȩbg!r٭R6+k M-j堭dà[|qc~ݞ2/is+[Lm*G0fm/6}J!` 'Öx	&$:G!ަFƭPKL  O  PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/ASN1VideotexString.classV[WWNdx-*jH)P[Xr 
F~Km_U	V2דsq| w|j)ƂSzJv9~}DWa8>6>e:QAAA8R6욳09xgFJ!4AP->I-OhDf
[|oRfq]}\'3彝a}^OYO]70[Nken,E	5!*?(oki
WChg1^6tqV-
╚U؁۴MqC8 	5nb~}̽Cu+8!%lx@Π>˛{e/iر-Ũp| Vzbs5#
'pRAZ{Q(kp\fVd*´R^Q5ؤY+[8D
8Tų8 9<O^PQTM
y1=tٛW*~vf0n+w90h\Sr3
!^#Fq8.Z-)̐xB/hqO$HU1$GjtdH
fE*xeq?wͦdU
?c
PbKEyib=+-^ah_QDT7yie13ύ
p
wrZډĩ}#H7Dʗ
Y*pd#M$
-(xuu	N*;TJZ(7$Y[TA/qKT+mXm8s\L;BS`ڹ:nivŇ2jVj*>
>
2yg gtC8.]|ߕ7` 	3SKWz\	&zuCӲ]o8UKkS6R>ڿ'c"g]rӳ1",w~9jOEDHEoaOd -O#yl	
;ƓKu{e]$pp	;x?#B?l򬢦.6cv4u	]_.PK(	gKbO&&oI[$F))1y 俠	sFOFhU{#\Ė 
d@IjT{gV1F?ƈ^K5Hoy􉐥¿ ݲdߣ&|Sm@j8Y
9&ù73ih-]
*!\ObAwi%kXAn5,Ϩ
]/o!|D95Y.
`׿PKp7{    PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/ASN1VisibleString$1.classQN1=t`E|Ņg$fA$F
2T:dZI+ݨqQhަ9Ӟ7 61y,QmTT{R?+\gՠ kWhP)0@ҀiaAo幯ABmY4X*%o)G*v.WZ8,:	<gFt¶nՏ5ѿ+?n1u	,$vc)^yy8ֱ1dt$O0^0!9 65*=nPK2]J  L  PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/ASN1VisibleString.classV[WWN0
\!hSZm-AiXA\@o~M⃽յl҇}f <	gg|rnpK
B7th9a񤞳;=ÃfΜpM; °spm8R(CL8v5La.p
oIإ@eMi}s}\iӭyޥu
5lG]fuRH!mF_Гng}W>/LVaߪ!mY<[=n6?mQh@f0Dϰt[vSh;Y؆..b~nƝ%؉}۴MqQqHA\C;nbs~":#
А猭3(P=2ixG)t؂_#z63e2|Z][ˡGe*Pq'tI˶BQRSx\zbؽac^V .Z8ET8OvIԐzPU<
-y)Na96Q=,dʠKT2b#
.hEuʋ9*-:ORRyR})%9xBóx*k
^F!7tQ)^NJ.ﻔ-iHy\

i=GDv;f>)kcƗt}Tj|mT1[zp3iC
j6Ag9Y+rV]_a#Oۭ&k\NH
˼roye'N%ב0ޞ&e8#qePS8{st顂P҃WFD1^.Hd2qOq?.
E
+ϵ)$>?ŴEU㶚vkQAheQ\%@X%>U>Wddh[-$^pfy0{nǥuOng,kw|F>(U\5LҶ]8%[;C|pd/MG]ԵrZ3*ȑUWm)D_P-!/~CCoUK^\쿍ch
.8[x_GEDy:Bc00detUt5n:V@AJFHTMb%:n 	`
ӳ,A%>C%9
*&]Z/,wU{;==_{>I&_D] Ɇ|s.Jig|D-R/@x%P;7qUF_ˈw|I1:}"
¿@&Yߣ"|]ǀyfa0G>ΤO'w^rC15`Fy0/vcis?g*!|Bl-_PK@    PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/BERBitString.classVsUnv-)$Bt_)ŶVhM4njffg'dzݜs?m8%/\d
ܐ+[iUwiUk`R`7+Eɕ
S7*kzPMmI*iF+S*4P),(EN_0eCW(-G9=Z"WM=-U;ӌ蜶G|>PA:_4f!I%;'}؇f-
Za_d3xJE[ΕFٛzLf1e8qxRh0= \]q0;-^";0^mMgw!}{QpJU/plqh2vA4AE\	o䎋6r6[en\%ud
q*ՂP501N㌌qvtbmu WW$|w;ާ wo4Sv<DZ\UP٠M3yABsʇޗ,Fڷ9mh;MF=7$F9e16
)ee0P袹|r-	P
ʘR0OwJ3yj⍢^q*|\Y,șUCsUh:w\zrnpeH2h+BGpGى#K׳VW3I2Zֈ0wI懃3vʢ_ꫝUTv'hmh^b<{	:'NMC˅hGFq~mǧ_`]qӾt3;Ǟ0q_z>!%$Ā^A\
|tw:~ݛb~&u[d[a&E7͙T{BLBVpB
x,7%/R@63	8J$K<3ZAYzN_Fƞᰌ"	28I~~1ZI>^ƅuX
p@&j(*{,<y:8 Z`fo1L"̈́YG&D@)ldh^Co=ɡb9qq+wIujگ7p8"\}Ep
b9ԇ|4mң.dqprB?GY=U+u
_7޽2H}R0k4w[{Ö{*y/L5	1L-N33}z4_[Ş"j:ݠ?[t*iƮ5s:>|;r
:q
*5d=f,x+v	)Hwq(.Z1
Nխb>妩@!ǃZa 6m!DM/}	nPK5  
  PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/BERBitStringParser.classUkSF=UB%$.}%SZƩ
Sc#iO#!i fQޕ)YJ{{vϿ
C2<pY50vmПHV.a>Ő^#S-֮q_9"}w>[Z٪<mr^y|'̐nVMzLcTraY^U]0ka<#HY~uLQP\oqR|dc``X0dN:'0BEwlc+{W2\
d`Lae鷚h*[nF#{3c!dHGI>oPXf1c2LmA׸znlj&o'zv	fb-q7[WMVL|/|i!~֖Jc\_t(m5x03q5,f!ٛ3,}qEUbyY~\欐T?yؠSPK[;>+#JPpYv75X4=A]u"l*{GTlߦEוG':tCGsR*:yYjK!pCtw +sq62eXՊa8m)%^Sk3ީ0uGE)[칒;n.	G!qʶČUp]7pBP
7%=ƸIWLЩ&,w, 3J'{,Ҏ&{FX `1
^91?ǫq9a
ݖQN-><1ن;]_0wH-{bT-zlɠ!	2"+

Uo1_P1wcߜÓaT<qӺH4*g<PK׭    PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/BERFactory.classRJP=TƴZj>|IT">mH$FA?/p
~%έCf̙`Ih:&Lh;*	*I'4ݢ@В:-0	)|h3׹pD/IKTk19cw 
%.^/ejQh3юB.KPB3Ξl2LE@'zd_4ʩELcSc3ABq(b4Vo;`NY
_֩D"_8$X}&a<)4jB#)OpSI&%]@=!b=VKw"r<w_s0o.27Ƹ
7	7AgFqjFw(T;PK  l  PK    A             >   META-INF/versions/9/org/bouncycastle/asn1/BEROctetString.classTKSG]i%yy#XR1i,91l"d%FEZuĊ;r) \pJrO'GzVk )C鯻^R	Q^J_[^F\Y͹mjZ%9^&>%d~.dfv?5g@3Z$hC;C]/V)٨*_VBemA sw=aK^.)֘iM)Ww2FQu
qE];eݶ
6Lb U3yCLb9~}2.gUò뉝r:Q)sմ
Ef*TF1eX%{A.4n`#.sGZ]bC&Z #	WebuЩZWMЊy4n7!c\ÓqS21x+a3cK~ㆄOdhQ:jZk,iޡ$G9Cp&y}V*IH'g)-eԦ+V-;
QN挭NkY}lH'oF
 섨HEc7c6I#֝N
J\?qz|	89(`U>Go_wk@MtqV?K'PcGpǲg#O m	D$a%7KY!!
	OP$}+=dG.%<D2ch	19z}YF t]Aʒ+jlUu$B )* qEqua _;HMQwѣ>y%nsEl:z:Ț#f{H&D8SZY!N$2"@uK&fN@y"dVƝ}n;RLAa\?/{+k桦6ER&Fexqy5ַ+j;k-*;Hp4(	QN3&6_
9 >'4xοPKp>(    PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/BEROctetStringParser.classTkOA=uDWQmQ+hEE!3l'eeivh?C#~GlW)XM&3=3瞙_ p/mBAM,gV
W30KGЁ#lG0dTPήtk./<9WOyzSWb󸩅#F=&gTD9Lġ뤗l:X>`hx2>~n!rId*]TDcS1oަ QN1FTvfn+*S}[ D9Hb&:"yGLv?N`'7\Z
.u0?I21nڔ"MBvd!0rm\%dq!_LU{ѯGbn\}QWVr镼4%atMAJ$1R$_ԥkj:4wgyeDǢ(a^U6ĒzuJJyA*؝WJYT)%]%7E\0*Z"Ƀ&YW;
6c㛧ԺzT"wJOUPcX'˒/RJ@
\UDJq˭qORƙR-<g=UEC魭1LEh1O-ݽhMZ~vf,3'-܎1hls9>(z(ޠAu7#HgM{@+?qzy+~y`bc?L	irnyi+׻rč}3	&O^s
h~h:Oh5PKG    PK    A             ;   META-INF/versions/9/org/bouncycastle/asn1/BERSequence.classUKSA<$ *jIhD0j45=6'zA,Rjd7KĤjv{)<.nxBlT1ZYyL+d?p#tC\t->P(ݞ45m) I*Bg+=12ϋiS%u!za@vc*aal{\NSn^ec	`U Ñ8}$wn.3
;k ~*c=\kincw(N)80V%P#(&H2QYarmW7
4C4KuZ6'v;%68O=b
\̗0+yS=3ɦvj&Gn̨8++j[ٱUqתvডIHbqq4G
HqY,FEbDh	\r$e:e]c:̚٦TMkLS{2Pfq2Ey\E?O@SZ邶d
?27N)2>ўk1KeaYbpZ!AoN#1~ۢP'vkI|[БG8ƨ>] 3Co2Z=*@}yHDPvնE@D'7}9i J=ruf(;	'nMG|==a{%^ػ?knѳ}7Irܦ=7кv!ړQ]'M[I)-f]5ԯ8DC=a"1
]8Wʿե*بZ@W\]qziPKdHT  g  PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/BERSequenceParser.classSkOA=זuRADGZ1AV5MdIݭ[
m$en2y;=;-<UBXADC1C~uM}~(!̴M9C8M!)KҎN6>-s./JU#lCq.=emW_+xSTq3
f5\Cj0?әm8
^őа$C4PX8$"`X԰k3Ms͖G:|;hc+:oǲD[Ub754T&=5AXzi7I
¸˰9)H3ɬwjfZ̝>.l0lf4P
O7͑rOn}!iP<{d4ya)D`Xؾ53t۶rUL1E1NˠɆ@;4K~j	cDbb>Cb8@<eTab<!aܛs.Orb?;"SFl<VRh
8ZxN:;2=Q PKD    PK    A             6   META-INF/versions/9/org/bouncycastle/asn1/BERSet.classoAǿ]XKa֚vaWDlp Ak/nWaP?K/^LL_gxaPȺ{ϼ7oϓ `3	(Tnn]fuDVəOse.mH6$0aF[{
I	/km;%iW6+9UqJ0ᢎKX`HO=*<W&aXaאБôpYn> ˚T*5\ӱc
m24/q.^3F5U԰:SVTveVm?ԋ%Q-ccʖaKr)$ѲjoX]D
k%lh{cXŝSq
WC.	' ?
LQojfFs Hwx#Hbt̿>ǠZ:9
 
	 a柀z8)xA w㟠iP[vbǛjr^%Hn|"ý@b1aGO&SPC	2Ȧoy&3k^RCPKC>    PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/BERSetParser.classSmOA~/\9A[+ZګpVėԘ6Ѥ	]s+L5wqZ)6ds<;̯ XD510nڬ	[2=u\G>cfsq$0A7pÂ7ڟlȦx튐[ϠmwʛBEz>E1a%\fȌƠӡR67$_ɵ:5%K e
*ë/Gai309dY7Kmіj`	A$q1naEt6D=8ELɋ;${e}˙jXbVo΀|_*#GӬ'~,+~++;8cXB!«S=$ѓa"~w+m_\:+:CI>QOM$3X"j8i*>d_7`f+PS3F7
J+FYZa!yܫdSfWGwp#0H*5ڏ4:%HM##dv)HF0<cPK>; D    PK    A             ?   META-INF/versions/9/org/bouncycastle/asn1/BERTaggedObject.classT]sD=[XQ$%i)Md;ƄI͇40MR45
mu)oyO/<ơtO!pWvwhRXsϹY}_ tF=7MwJ~6^O2n-_1dQ׮(wք3d)u&Uʯ7f,bG.{4J;Mi98\`c>Q)IK޲30ms?vtX4.[ʍ#JZl[<)檅wqaj)Z
=weՎ%tmV6Ų4R';=Y]>dB+uђ_tTy b%5ARM72$3P,|?u})Ʃc{Y|bTGY; òq%һn3\95ŪG:>S.18QV='%@}!~Pamw<QÖ,=DG w.컏ܼΗ+7s]QD|b(leN@qD/҅o 3+zޡEph4NdسCMsNcHl$!b$>D\WH^#oi%nJ#1c	2sG
jo3m^tש|PQBrw
Xbp"(
')hHH1Va2Lpsߦ-N
tˆۑ.!hn'0sa5\>(Yn*>,8}j4
Oϩg,gc1*̔J^_舵X=oW3T3i{	UCPKg~  q  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/BERTaggedObjectParser.classU[OAn)[h*-7hP7j$3XvjͿoP)&2VMZlfw3L
c0Dk*sZC`0
6/E
B*2XRjzeRf}JzXU[2>wximeU%*1Ġ<xDʽS+`aSHvc8qcfP/9esD6Z7㵾 'T)>QDGY|RVqFPK~lg2m91؋
D:	IhQ!2ui=p"hYYXȔ93t'G׻Lw\bmXj栠W2\a:PPYj5qJKK:0E{b(	BQڗ ^dIړ[
h.O-VH~9E4Y/M]bG:/WxeS4qQv1δnxf1(b3j[yYN=0&	2n
qZFiIc t#uc 6-7݉q#ɕ!ZPz$?;fc{wV&g(=R[sa^}<-cH:?(22Lxzh=
X[?#<+hKh{m LIQ1ZxLiz afAx2Yks/Ly^ՃUV<ӭX|)GZWcq8L+)YE:.r_qy{G]1% (_PKb_    PK    A             7   META-INF/versions/9/org/bouncycastle/asn1/BERTags.classeYo@]z}
=q8kC[,*UU*7>g>߄ixzf߾!6ǜ!ŧeqVje=_Hg՜hb,ϳi>8:;9I+G/TRj-IK,Q&"C)(:Rk"mR&Cv?<3b8(쒭S启UQ5Rup(#>5EUЅl5ݨO~RHS@CN:e땢7-REYZ)
T~$֪Df<1%u!EiP-&m&İwlVg*xh\oȘeIiǱPY,2mV'Q%GClBCnd;FbuEg9qBQ|->'hGd"jM͛Q
Ydvxhiu`BKRt髶='}7^bHUtȯ_C!;EbD}ii+=e_=ju+{\qH6x߭YnlObZtN(g~w3}p? <<3c8<<O3@s<ȼ/3kb
i]{}fs~y:)3xy~μ`~	b~
a~cކ-l3;01ayV̻{f.1pВ/dރ#	\n} PK>⩾  J  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/ConstructedBitStream.classUSUݰa!l(V@F@%XKAjAe[һdؙK_x3B-Ψ$Q
2hf=;ܳDB
ECMwu3ȗi{pUl-jP"C-ܒ6-x,+^dyr-,;dz
P7YYihB3JBcg38=D-39
-[t% `YܖV
ϣ~*
\!`KxpooxSeD=9ҎXk^qaTNt!C1(F8t)
aPhǦ:燲DV2z"mlYPgxCÛxbɥܢqn~GRgTd*vrdyqE:m
7qgqIn;ުߝx)VA(wbHZ'fkCM[Fߍ%JofX0VunP۴QQ▆,>`~~t;(6+u*&4Lb$V޺+eD% љ3	C/|EYîMӞil|Daue*8V]X9>r1}nc6ʃ`5$ք0\)%R5`*LI㘩#5^&Ҩiyna,
̷LaxcuJfa>~!\n8E
~
q煠ֹz)Mͷ]jUL`!%z_%Mba?C-	:dk1XRفA4Ach]I2$#۾EOHPE8#(AƾQ%OU}J]ѕv]wh=اJwԕK-ld=((C
=D:8|ȳlFmCCB ],9'%6i}MRĤ.^hpy#>IĿ! #k8CYT\xm,Z[h%B#{ _٣StnQQio|$_SO0>G:(He-3>u=`UPKV8  	  PK    A             F   META-INF/versions/9/org/bouncycastle/asn1/ConstructedOctetStream.classU]Se~d
ˆPp[F4_6E-*V

^eIw3,+8ƋvЯW+u2ywff:9y޳'XQ@P"0m}Cլ\l܊ksCxfdZ"蓡ʐܚ2MCw9+X-2Vole`_
12ȫMv͐,,M ˞e^+F˶F+H$q'*CtK܉KC\FeT1SK|)YNPތHxo0HS%TQ	^h}I)id&&#"`kArPLêk
fw,91-p`0whz$cZƻ*羪ɆhMJ;gF=CTy9ի[^LA!^/kTGka-*Q_ԛ+NʞDnp޲\"woYU'c-nZ_	=IrWg,Ǹ*$_dߧ[37:eo2|۝WЏ{E7
,j9l6y_`7j4
wd,3LONnJ
7FzG&!Ѳh
(i6J>~ 3[>1Eӱ0|DN2ߤR4#).x@KOg±$3'5Ƙ&UtHð&iӒ&ÄhiF$9p!q"Ǭ@PeX$=qژcx	y	Sr73?2]dv
mШg݁Q%>G)6D-F.R;%q(Tt +FC$F<Gbt	y1.6dXyW蹄%Z)4+TPK![R  c  PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/DERBMPString.class;o>S.&fvV6FtҼ⒜T<C}`?C'߀̼tF6̼;FQ
ĲDļt}fLNnXY3A	m.AH8秤2(2 fF[$?'iiog` @ɳ#ysAPK в     PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/DERBitString.class[S@۴l	X x Z/UBjZBk]P;
|qˌJ<PV;doNҟ~pUp5p̮USU~YbHuk$ucvj$kYQ3*C'r3ŧFY0Ǧk)5#f8;I|*8T
ڮ)&e{!Qn
="RuIYiհT2NE 8>~
 g튾d0t
{GmdPXpㄆjՏ&x2*S}MO-V5
q
 .JT)
q)ۖ0,Y}@8aN6Ϣ*VVe}!J*o6QzHQ49Z/jˤ)F7,dekqERWvg/w:

Y3huYжSΆyo.$Y3j4wc-LioFIMd)kßD܋"L۪sL286T[g"ƉUfCKRq;%3(46éV46<SDf^~6̹J7q^!dKɉAjV A;r	[VFk8'
=s'?@g8@_"ۀ$`6^H3Qb֕H~A#8]t@+(0(=4y^'#}OH~3Y/WlQFz̡h0XIC44nnxMGۢ-&:.CDCQGG97M[s3'o,*K~S[xw""H70
PKH:O    PK    A             ;   META-INF/versions/9/org/bouncycastle/asn1/DERExternal.classU[OA.,KC땋@/@EDԢPZ io,]no>Fy7L\)O6szfss~iT4>~2Vfyɋ/:ڂ;bU.
3+CKͯ>LYK發H)WcqMhVjh0PU"Y4#՜9k VGviaF '6Fk.]-MJJRcl&MGjCmcpQ
D)X㹜+]W{}oɺPᴂ C:SE%o(N7SM]pmajElRc	]0k: ^bD(BCuUhbKO|Q,B6)trb15LCű*)Q7&yUWQnim&!Sg9w5emmb:*pO6
He:{
Ԛ.-bsͺ4߂SEMwMs%RZi`z4-;ezS|NeOHܟ#\ux3&]#W
Sdc)`2BxH\}6G_JP>ADJ!V)
"Z+=OL#Q5zK< i$l,#>FZ p!ˇhJ".;\aÇK6qډ`jC{({Y:?:E1W	3hhPDv09"d.븟iA=~PKQ{    PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/DERExternalParser.classT[OALY(-"(x+U@,B,i'3l'ⲋ-DH"(Rdvf|\f~,^i##vu%G.̀}v`-.w Mok^585wX(+lw"ͣUxRvRl4\EG2ƠѦz~"n^U9ѯb!UbT/P<C`P
ddPDUHsŷ7ޒ9[}alX\.lr3=6C	"j	>`U'/AT0d4Ul4EMVr$|stcaq8N޷
N`H/e&T)UduQߣ6lp*O
>T.ka20OM|'J]<O)8*ђՄEOpkf̶ekJ5;Ӥ@J0hDAOO1<<HYeB}L]}:Q~1o	/hDI>DE;}ICߋ$S3SpNvɃ%CCa+ʈ8pqD!OXxe
0TxDL{wb5/PKl    PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/DERFactory.classRJP=TƴZj>|ID#>mH$FA?/p
~%έCf̙`Ih:&Lh;*	*I'4ݢ@В:-0	)|h3׹pD/IKTk19cw 
%.^/ejQh3юB.PB3Ξd2LE@'zd_4ʩELcSc3ABq(b4Vo;`NY
_֩D"_8$X}&a<)4jB#)OpSI&%]@=!b=VKw"r<w_s0o.27Ƹ
7	7AgFqjFw(T;PK:r  l  PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/DERGeneralString.class;o>S^.&fvV6FtҼ⒜T<C}`?CԼԢĜ̼tF6̼;FQ
ĲDļt}f\@NQa܌j-pq
B39?%Ad010$y<! $Φq# m30!vv PK      PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/DERGeneralizedTime.classSNQ]ضP]QZ1jؤEXW.iOzK/01J|@8gw&Ioof&QhCHf	Z,ujX&+"kpfbpDWg`/1۱8C{^.qW1MaL]ڕ"{n0x;̼N<"D}fejΎRHC۽\xz!fm.axE?8daXS^4ͅ-=[a!)Pcq	dш7G*-C_+mN8ԼK0ԗ)i~-iᜁ,$苧=qpz=˕'z |8`ڱ;UP;Q':.jQ~^Wd1jKLZ.r-Q{%TQBy_jnftd*Kt%Vn5Ӵ(l7x#3'v^*Nq?46S?ݯW7Y# PxōVx})DwثM4+K=yϦ/~
[(
6p{`GC&KjNmG7GulG%_U3_G#5D[ù5F̳s:dCڌf{][mÔտy
=fFS#5\87r(~hzFp_e_I4b
djoPK|    PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/DERGraphicString.class;o>S.&fvV6FtҼ⒜T<C} Ă̼tF6̼; C#)J3d'#:v#`jcd`qOIePr\@f`00kilg` @")`(U  PK`      PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/DERIA5String.class;o>S~.&fvV6FtҼ⒜T<C} OG̼tF6̼;F1
ĲDļt}ufLNFe9Y4Y#	h #(A,)@Gs0 3#P'/|& ͮͼq#X	Hf **  PK&   /  PK    A             7   META-INF/versions/9/org/bouncycastle/asn1/DERNull.class}Rn@=c'qbLK(Rl@S+&(qc^xJ(86BVc=;ǰt(P5TTQ#܌~g{
K{4d)F|BPMXG

+0/3yɑLQ _;O(8ص\
ο
ְh`	>pӍw"gR夛^1p77I(ş&46q͋kAͅ
lC6U%TzD"g8JeRLfȤ_0ǖ-҄G۹;	2d!
	K/מƶ;D=:{?lqa
ռ:Z{ɱ90_#(&nB	+[d\~Trn?	=g2/tf\l+ZO/z5[/PK    PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/DERNumericString.class;o>S~.&fvV6FtҼ⒜T<C} Ԣ̼tF6̼;F1
ĲDļt}uf\NFuF:	
rth'!XL8秤2( @@46vƍ`% lH
!
d3C0ƪ  PK{   7  PK    A             >   META-INF/versions/9/org/bouncycastle/asn1/DEROctetString.classSrP]P!B^pfqZ thҁCAg<(} bf&99{ړ~SsI+Gam[z:
[nte&?m۱lZA;
#YA
,E6zdX䮨j'6Ϩj韎y	 |H Lcnd}&SƙҽZIXWGabbrwz\ :nHR[3]a'QrW6w,R-i%	ɋ
Ń׆[
(޵mnHD#&+Pi0RI;bQ.:c`Yr}<t$0]Tu~{.FTp4C(K̐ee<|U	sW~l68]yٹ<n#qğD,"T@:s!w*	t;$b#]iހsVF#>zO7$]<hp&!	T=2)4z<$'# dq){&e<5zPK4A    PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/DEROctetStringParser.classTNA
K"EE((m)RC5lǲPfݡ710QH >l[(%dfg90Eu7m9.ѕ]ai9[z>N7	L?Zg('V*Z9宜.$V,-vl]+2jG}T
5s%RBfΒxHe83цv~t!zKO-ZŋZ|VD+=zB[p$~@V9Cl4alĪc.Cg	q[EV_,׶Ķd\MǠp`H.-#4A1Q}'JZ\\ͥvFBk^a 6
G}91Nx0V;+g2t	w3%{Π!q%Z]"u]sko7\H|AA CځHۮM1)SUX\öR病Q	ƫ
"h)Y&8.
jܦ:
rPg,"co{侥g˂R|/rK+jk5mr ;Rj ?{-7yqVr*&<['>	I
@aFX`^RYuzU
6j<q:u}f,27x
<ȴ<wg=8E'r1'J1s-[;koSl!x!`_%>{AFA>LNW<CklCIPK EL    PK    A             ?   META-INF/versions/9/org/bouncycastle/asn1/DEROutputStream.classS]o`~^ZBs_n4[bbǅ	toNh	L[qoq^XQaoҞ|<9i~ <F1(Tq$փuzmoZ_t.i3${'|9rl/E\Րԑΰ'
f3dD =/^yqb142u\.vUy]!u,a%JxA>1pacD3tH9b~<`N/"ܛ'x=Y7߱δ}쌤OV޺#iXeX<82F$4g)t]I,rUЧ*O|x%p+F'a<M>[0BJPA#k[_1``}}U2NON]%	{!
*2Ӓafa=~`XRXr[cvؿQ?PK    PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/DERPrintableString.class;o>S~.&fvV6FtҼ⒜T<C}נ̼Ĥ +&3/ĎAL'+,Q?'1/]"k2A~hp4_#	h#(A,)@p0 3#P'/|& ͮͼq#X	Hf **  PK-   ;  PK    A             ;   META-INF/versions/9/org/bouncycastle/asn1/DERSequence.classW[WUN.L
ҡM	*Ʉ6ڨ5J*
Q:L(x|r]KeϾ@U}f&d$MkI2߷/{ϛ?p_SK-stͬfFBv(r6ua(^+ٌЪFcjFg8%.EMזadb
外`h"v=jV/$~%8bDfr3:$7Gz{e?Ñ,E C(~rcrIS>QE* 
8$"ȫ	.=WS>ȼ
5" ЦrL
\!C眪V*TK9D<g(~GRQOyUYdȞigtH΍$D(!`wg[%eqgHyMW36y8ǜ9CJ{0g_<TWp!#!EDMf0بLk,S8_wZP 1cI".en|13[PۂRR)\qZ7-E;l"Uṫ$&xgMXtF,Corezf00`ΦlFh*kC6&upE&bWҷ`C^
ȕ.HǸK=uHTQn|^YMdMXPCudZΠe5OM?9Rz^YdL_|%.HyeYhHbt덀45|_=V:A#jGNYSib|jՆ<GyAՖ.HtOb[m7V\	@ӭBt#|r^na,p/rmnND9<Xm(Nlv
(׆r3u0nZߢkDiyI)ޞϿ%N~SkNv FoӳMt2F_pEޥz˭de!YFdv0iKz8q`ua$WG7FQ\7aA0ef9#-Ψ 	4h*o'%#{M /&iѻ8酣~%N?<O
v>RhIc}?\"|5k;oTHNP^XǘX1>ő
'H7*O 60ōMc
s|a׶
&VF4,XFPKՄ*    PK    A             6   META-INF/versions/9/org/bouncycastle/asn1/DERSet.classVMWU~n2Ʉ0(ÆRdB6*5J	Mv\´!Ij
馋MPՕ^=}>Nܙ~<}O;<p<2$>J137yjxB2sn1ZLjq>wb46{4abdz_$sdYT
?n
k-@FHA;:BylU墵҂wBcIfAϕXlYTA:ŐhL隕=#a-z)6MF^U1+/0Hl,+V#j98<CBsV\EQ1qMp-3t, 0qavS:(x0t5}ĩ$ī2^S:F)ۣoXVƪp}A%{;#\eEXZ=)A:ܯO(8c̲\W0CQbG6}ю	;o*xo3ȶ/]wA/CYn̋	UBL#=wM=QDTEt>u0d8٭Hu("zQ8#f+A,}Qt=3J-+4[K&me.1Ělkm#anKN{,
3o*h!Ki8:t4<NA>&=j`?@~h.1"ѢyBŜ&Ҫ<ʺ3 EKu<B}(z奵]FP/zܠ &)K}$-ƽɾ8'F C
ڨ.ݙGQ|lG]C1D{Juj۸؎l?N1кa"^õ9;ФT/k5IS0շ?D|/"wIYi&{@د@FvIߖL5GUӥw	E~{g /{ )t޳C_r9O<GA_h-
ƏG=iBni-<SAmuIWdgh7O,ֱ}a~PKVPg  	  PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/DERT61String.class;o>S~.&fvV6FtҼ⒜T<C}`?3̼tF6̼;FQ
ĲDļt}f';LnF%f!✟
cP  wI^ O(
g$ɳkilg`(` 9
I3Dv PKv     PK    A             ?   META-INF/versions/9/org/bouncycastle/asn1/DERTaggedObject.classUrE=m4ָ-'N&`$!$b!̢P8$ E!2-##(F!@ >ýH8sџxL!`@*VoVRzVdܪN٭rV~{yǮTt9W%W té9@<Zngejz.VJl}@h/`b^xL8pWZ=2U"¤s^Z׋$u&2f09+Lu޹t8vhqpTn,pE5.Y!z6%W"Ud˚#a`I!GR6nmjU_dl,5Cao
]]-[>ZksM]Wxy[ڭm[|C}PKOt\}I
M[-`x~ѺB"~WUûďv, 'خPoyCt
lPT.WWސtţ6yv6lk^nZ%ڥNwX̣nu}rlnp"0ŶS-Y`cTC5j\@QKZe0Fpɍc
ءhuq9t0b$&\1${=H$aNV`18^`W`_ z?3L*"5hb%R%"v/MvN=[,X@ȉ9'1F_Ж$Y^mGQi;Z1̤i\9LH+tbDRR|Ltf'ئ b	sD0_%?^[J5Ad!GqFz4};?PKGg  4  PK    A             =   META-INF/versions/9/org/bouncycastle/asn1/DERUTF8String.class;o>S^.&fvV6FtҼ⒜T<C}`?7̼tF6̼;FQ
ĲDļt}fP@NQa܌Mwq
B69?%Ad
010$y<! $Φq# 30!vv PKfmа      PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/DERUniversalString.class;o>S.&fvV6FtҼ⒜T<C}נм̲ԢĜ̼tF6̼; C#)J3d'#&vC1Lajcd`qOIePr\@f`00kilg` @'#)`(U  PKzŤ      PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/DERVideotexString.class;o>S.&fvV6FtҼ⒜T<C}נ̔Ԋ̼tF6̼; C#)J3d'#v3
acd`qOIePr\@f`00kilg` @#)`(U  PK H      PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/DERVisibleString.class;o>S^.&fvV6FtҼ⒜T<C}`?ð̤̼tF6̼;FQ
ĲDļt}f\@NQa܌j-pq
B39?%Ad010$y<! $Φq# m30!vv PK!      PK    A             ;   META-INF/versions/9/org/bouncycastle/asn1/DLBitString.classoSQƟ"fjh
Tj2e0-G_6ZG.ߩ5ӠЇj:wwArs~<>ϯ X
^&JjڰK%w͔Qөl^Yvh_ꖦ7OFP1L]\byc5QWmmD:Cbr퐛uA-M$CkFPGi=ʸ`]svZ6wM^gq"3j<6e/[R6LȘT0]FөdFq`v
r80-qPoSq	$R-|H)Ga.

32=057
T:Z6/&S$e<`]\K˭0*u!k7;TfK`Oω]E57,& +{MUL=@/%s[U.#0lUSza4kÐx͔]kDŸNcpZt8Stlc8H_}!& > CD/me 9; B SH/=`̓ODO?2%D'C&nKmTGVh\\#}rˍPF?cxu5JB Y7
\
yrH[*@RNFR65䬔{d΅}&2zPKp    PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/DLBitStringParser.classU[SVF\ &J6!6	B[qkJJX>
$?}C'}3
t`yotG4Ȓ~{vGb
hфf'|J.rO)Y%?bh'[тV
Qm9;grOD{xj>t-]OZI1щ.B+xa<,+;
LqzAXNehчwRo铡M:=)f]1DtxWWa0\9pZNXv%]o)c?t\ PYE_P5`X-3STs FU?!$u&CYQw<lϧ0z|[9#KɓV$ղXx_QId:Oy$wtDQp"yFÇWOM3(ҪUn4ӱRH0m;	C+r/Įhz.ȏ*1"߂9ju>#%7Ry۱G%#GԂ\!6&%0^b`Tu*SC9
x2o=uJ{Yz'8U9ڵ}2q'S:gHN]3yeMED8g[ٱUg*])˩
ӕvI[W,:yí2T#Xot
1el2*4"g-fivE$f|ŷNa4VuE`sS:.j9*I<v(2utpm"of!93!/VTU=c+qja|UʸFQ]	Y:]~7н3yl|-9CC:V1hN6¾DWCt-ьtWM?umt~KUR&IRM~#Ha9K,B+U!؂Fo
:홁ȯh?Fl^&ǪR/h:QH
$Ҟy%PGG"U(fĺk` V]9EɄ@}PK善    PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/DLExternal.classU[OA.,KC;TDD-HAU&6bȏ/j$MyiuΙ7 x^
1Zv.fv7N^x%RK<X.?kU(̬`X4|rZ:EZHx6:1WрF&h}86y7ksaR(̇*hQ*1Th$!
w2٤$ua:Ɔ!xltD:ml#*+k<zٱj	5Y*Vdd*,
%FkzТ6VĆ;vԥ
bp]gr#Fbh3̿FDCc:wx"!
Yئij	\0ձrE@T=)0Ti*Ϸ햆fhpc`IqWC\&"ܑ\$b
YGB/uPr2*P_`-[tYئz%RFi`z4-;eS|t͙ۑ?HqW
TF?&	#~+AtZ<^\#RIU*JH沆t9'FcAo	g >ty%tQc$]GHO֕."qMQIOdel~Ɇ1N=O )a0NY@@AvV)h FjED=2<JI]d/PKՁ\  u  PK    A             9   META-INF/versions/9/org/bouncycastle/asn1/DLFactory.classRJQ]۱Ffw
>dQ]ф8)*!裢},{)3gs^{X/ 4#h
턮q)pt|Bb-K-*!0*Vѻp+GTDX˹:ޑ(exBZ.aDѩD7zwY\
zE[Üoo؄V<#:" '[tfl41aBI0OϴF	?TALTp+u*RI'F|nBV͑lТSn
	1V Q\)w{	&&1NCkЃ7}Br0.27ָ8FnnD4Ԍ:k(TPKIcd  e  PK    A             >   META-INF/versions/9/org/bouncycastle/asn1/DLOutputStream.classSnP=7vbpݤ
-`HV+!!DB4@(+ǽ\;Jn
n¦ 
 :W>3s<쯿m)(TidD
BE^?v5m;
^!0Qa[CsMF.ЏV3D$罠]:	,"as予vk!_15ˊϚ=pa25??{n1hnJ{6Plb'3PnCx^xzϻ"¾
ӝ>O<TH11>{xV'%s|n7uPI2O`1>y\Yl!]IWM+fyERo@w[~!N*7$nŤDHGr1.*8A\J`c)LRO%PKd'H    PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/DLSequence.classV[Se~>IXNm9j M
rQJХɆǪx^uM/dF	?+S$Nf|< +/*B%CG2ZHfVBNJHNk뱉ޘr7h	rPT*
 *g702V$hzzLі,ʣ!2|cŃEyaU	g8N1Gz
pŲ,(	=g8{
͜(7o,cp+WByЎ"<CgZ=wn5UW7h/.{ 	lƽzrdlran=P\9}q?D~YчU+a.㊀~/ERx}="1Hdϴ3dj#c._<
`h;VdtjZ^Nsǃ"@mS{/JtST%eᘗD\GRdrLb
s+#"F2`x:}WED90٤*1R	 ł<҇ǄIdh4#2	]YcFb5Ħ0-
UwBu*Tv?}9KS71+1F7u%ɫ^'pvo1+$l.H`6hIem`v	nPR4ȡ8,u.ݫ<VPk"\$CKqt])qJ[Qr*?/4d
TQM4LfPLwis2zG7ʺixY7䐚E'OU*%^hA](y&7W$5#f<T d{)0xL>0
<妗&J_tWCC{43Z,X{;s0FU E) 1΢J:TPq6Zh*5OA>t9<@2Eж=@+GFz3F_pb=Zk<-$kh?2"?wCN.]\0wa{%g]7];]Kr>@sI.3
mC,q't
T:In,u7UJB;&Fm$e\3}c'J']e^‾r|D'aRٳOsl5}ܘ
b|;x[?gR"8ҳ,)v-H<7&ANM}hBg`expXEzPK6x9    PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/DLSequenceParser.classTmOP~6vG)/*
{ˌ	Fi's4ŮmG_ahQv0nYs ♂)SH3,c1zHCXdO#iET
3uC-5;em֐1|1w*_N<)ڱME9T\Ha3671|Up[iˈ,b]5Nnb㚊6JW"0Ds@([*paޔA-9<նXV82,Ea^ѐr{hl[nHlDĥrLxŰKchL=_i+nbS.IGYJx/:o xҠ[N`n8KĮre4DjE4awQhL!hyfxV,}caMҎќ)~a4B<|1`a%+}L]2cm$#b7Ok߱3~FnRjhM4X.Ǒ'pPKz^n3  {  PK    A             5   META-INF/versions/9/org/bouncycastle/asn1/DLSet.classUQWEeBXHme`=Z[@6}hĭIz</}s4Xϱ?W@?@=f_fvgooݟbP8T2Af/~k4qje~
)e.v#nWsgK!3Y
|QrvR
1fp98kn!7HnUR{Lr
˼ՑbD;!i'%m3^vJ:-S&bk,=83:p>ȕuo=Z1G	^#<!Ry.^W:rWWj.exG8&j9PjTKy}&ʛbcSTDu׊S^
f.EC֐S:A]Unqy[,J:5
	Rl.?w`fJPׂ2c2PIUHcE|B᧶TgjcNh3}$/aHloE8/;K}]u7
:by]M`=	q|O uMz`4ҕGO	zO83jYOw\9A NB	ASv u6eՆRBTzt/rJbhۄhb -4
=R˙}GxPJUݙR؃XCT21	e1TiMo7h~d(giJ}:kD%Ni
7Q5qe>4W[윌ČPԘZkd-?}UQdOu<Z*;mqf<ghXDPE04E	JM&K?Xz!Rk=ݫ9&i%oPK    PK    A             ;   META-INF/versions/9/org/bouncycastle/asn1/DLSetParser.classTOA}SJ=A[
U<"5!4^7k
-FeV"M7웙ogo? ≎&4
L"Ajem5vg|B)
)EoY
oϵlDjMm'hoUZU|):}0k".s#i὜/Wqm)m% @=2^>\:a<e^~@HٜLIVr4f:U:H⦁"̴z)ew:reYmB:*ǳ6*mUjC0Gp	^",#2M%	f2,6~Gb9a)9I);=`aQ%j,]:!k2W:"LהoNȇKI*#NzJBeOgSfɒܖ{<caqyN>[,^enh
;OBLwߤZӇA[' ;7N鯘;/1iȽ)pxq'\CN*b}}PK2    PK    A             >   META-INF/versions/9/org/bouncycastle/asn1/DLTaggedObject.classUmwE~&lLHv1/MKb|m@ŐPK_F",~o/~j!zgY9A9ݙy{s?G
]|c
\ 5UKNKjuڍڎUj/+.CݰuYOgej2U&U0Ch/ÛR<xE0Y2\y1+?3ng6vŦA漀4vW0W15y,0\0:jN˾oY1#
iKaYrN&۹_RuV*EriVʪZ&aZFhNGq
	1
qnKZYM=G{rTX[Aתm;񎠪%-W
׾g˖]xO&Qm
3,X]:|CPAܲ]yj]ժ*n
mzK,>bL)whz\x'@R^V^j E˧+ʟ:VĶ꧂7f3~&pWVHAV]65mKن9v+S]5}XMצPb8o=+-YP%3lqCj~*$%u"iQ
_5ij]m7*tsGdϯ=0
#zdÄXHB;pωr=HV'xjO}]>:YFbG0bOpOb@㿁~AsB	e@9iUև[*y6"}<	|{o8GXѰX!¼1&%MqUth.DvgXŶRXT*hGt#xfT0΍E']|wam3GzZBϡOr+3loYR$;=g~A)?D4PKs    PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/DLTaggedObjectParser.classTNQ]j)\EaZDVV Fx!3_1QH~qi>^{=?Luq^Q+[ǦIl'#mF#+Z:S\w6sE4%15HN]Zn99X
A_F#dXn;b`BIF3ZlFdaҫͶI8!"]2E+"='õ KK%`n͜qd8	_{2gh?rpZMP}HC<bhtTh,JMTS3ܕ
^W"qᔙ%,$cT*`Wu	Ș0"~2*yZP	L29ʇar=-~؟YCvE+؈<ixFVmGJ+͹!<3?̅SበXn2tIW;64%eZ)МNƋ٢_Yos۸Iᜭenr4$`f.I8(r3RغR4X	ڽ||tq&ѓD,S/<4{<ywH_ω-p
;BJt.zZj"Na}gCy_ QNҢ/h,>ݼ1Ph]P^CAoO^M/1y;v&6WE KvUa.Yu*F#2t	g.16/APePKbjC    PK    A             I   META-INF/versions/9/org/bouncycastle/asn1/DefiniteLengthInputStream.class[WU$LCiP(ijimA-J(-H
xHNLIwjw˂.g}&9}}w BDЀ[L9;㞴D{ԌY2grE.HWCir;>s?)IgKb*cYȭqX)	[Nei:vMk| KE#
nY"]10Dk|̴ÉZqV9mhgHȤ((j18O'<wSR$C0Xj"Q8кfѴUu2j[YuESc:.C`մBE`m
:AC	6BM
2t[MMԱ4#$)שInK3$0#5t\53V\%(<BCFq_W7JZͅ1`U
?Fٺ4
k>J7\җ"]FpS'u1AqqE]ڤ6]M:Ú1OfCJ)'L8yв yncEc2/RABա-+cK')ŸMUؕ|d6O5EY[GJ óiǑtyyVu'ASgvlH ڦa0n<?!TUּ鸞F7بZ
۷}:1ΆiK\skU[qJy:O۸Y'M'e^mNX󄧁3\~#T
9K7jL[ @IzmYA=j6I>CK,hمmkzSIƞC}ɖ3oBPC1~>G_9j][QY2W5lQ)y]\ҸC-=_&4
旟
ag'@+iިh;/sUX<~0^
!\e5 @mIVA>Vp;AwDwq3w0F>o9|_NVu|v[|h`Q:C`
kW
kS],x=CmJs}5?PK٨    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/InMemoryRepresentable.classm
@gRCTtX<tԡ`Ȋn֡"\y<ow k=RX6'!k	_0U{QN4ԩb0IF&|boXBYІ]c*23>xe!Co ..9PK)      PK    A             K   META-INF/versions/9/org/bouncycastle/asn1/IndefiniteLengthInputStream.classmSOP֮+s [[h:FD|]-
?X|a&DsӐ={}绷~ A1"&k+(;`S杚WO[n +%o{'
M<Nsv
rCn Cp>xɫUƒ[aI,It" .Ƌڌ76#)wAD!/8K0s.	"gr;p}OGוm^W
\uK:S~识z@9ޚ^9U\"cD`ZRDmy"Hk4wo3":gٞsV6it4L3Z*RV<1ۡЗ,,¶1]aT7Fqne
+zRiG>@3H}B;2oj`dmCn?4]ʸA3wC1+p9ʘnhYfJ3)h=Cĩ1Bsi
u:UBG媃((t(?R.>mfx>'lS]Ψ#&֬m2ޜm*L7gq}ӠVGIE]>C51L1f+M6ߚb}i"t$lLg$"PKƦ?  8  PK    A             K   META-INF/versions/9/org/bouncycastle/asn1/LazyConstructionEnumeration.classT[OA-]\QPD-"ދ
*$ELJ0Ӱvٝ"|#2i윙se??~i!
D,4!p-_){+Vqscp<`a@+%YdW/0`jzX8V6f2ʯʑ^֫HZrE!m҅,t$Ma'x"w8Դwt3XWgh?jh(M]̺$<]EY5уBfpXӥwJr_a8Wwdjfn5	oeG@q)?dHaq"GܟGfu`8_⫂*esQZ͸C`
cL\EJM
}/%WubKiVK,0D2 ڊ<h'kּ,/kP]ejJJE
˳Be!hF:eD=2Ec<102#xkrU4'0_6ͽ+XNJ9}bZ8W7'ᮛw8~A OUN6YP7F?h
:+0Fm:
>D'	܂8ĩiv#H&GDjFh%	mq
ѮEn-,n.D:vD[
6r[8Hҫv
Q6:5vIxPKb?k    PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/LazyEncodedSequence.classV[WWNDAxAcj k(mC2mپ kUpZ}f&!h0w> ¯^xFBZT3tF*4\R6M'ԗI(gsT{UM0G$0l;#ʡBL椮jbD'Kյx6uj}RlOʚ[JFh/$pa_JXZ4`F&l`v2._:&}\x9ZDkt#7qb3C]J&(Ibbxy5lCDF	-[͡)v2|vܴ\RrYŐţ!DI#n=d\%3>#ZR3"X Pt?Ia-&>usE>X-+b{c 2n8$<'4R3xT,opDh2Csc{
嬙EUY*$h)+=4e[9Ŝx8"',XܑW)'
5Zp98UawKTĘ?&	G)4sΠG$QDNED$)$'K]
+
ҌpN2Q-ON8aXD;$V$l8PR
+Am	$kBQ )(:*)R$˯ieHcZ.E^Mkơcʏ0#D)2qaAcp&5bqTfk,-yZfح{ED⾤ĭ%̰8T=*^aT0)_u	op;gLNEU4+$&tp6f)dquZ+;<>*pG󝭷>ayfX|4'7jjJA%U%HċEEP>iKїU&iޞCWHVî8TmVV ˢhÿR,tɌbtn&\Qfʹv)L&A%Ec4SԼrU+36*0:^	=rM?CXco
,o_4T;
_ cz	]U"]t@_B|K:`wn"L[/ahp;ӫ]FkacE&v/S<>/˶/F26B<Ʊqf 
o[8t^m[k+o/1J][ &	[^@|^,<ױFFgOY4H,z6iW$A4(!C]YVa?*zU8. ;@?g]n`.G.vī6еc3U^/=wi0	m|Za΃ϝ+[_PK
;    PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/LimitedInputStream.classm=OA߁Ã TK>JcCaCX,&hbaGwB6$Y!l°!s+3ٔF#_.WZ1D3a؄M(	feS9#_?LB[q	Il)Pw5&4[z0q17pR!O\QuE(j8	zp-P[\	v%*)ޔ{wW3ƾ"BV_gQT`UUNV@f4GWcJeҭğ+8/dG$tT#~PKwęU    PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/LocaleUtil.classT]sU~N>8v[ -mlGkRK?ֶPJ
O7Mf7&
^Kn̴΀#?ٴi u=>{<y
x9|*8л%EX5L*:Ht- G(PUtDք3(,蛢fRhMiWEB]d5am.UR2?S*p5MՄYfXvEUt*(.3-yn[MaMdUӉ8qFYc8cWĆ]:Uk|Q]3/92-]8UCkZ"1\l/ٔh#s(Nٖ10X-ʦ ])	'}|~iTVPGRGCD29N{]MgT2)/.?*LwS*fA)-5'6ŒBDŧsI5aMjhdɃK,wF^>ų(X$: )H#ñↄ69CaKZIPp^Y-kr7bFN*rX'$;/9jΓ{ڷ3+ǝkA'N[*u.f:ǱA*2	4mA'!0qC;l&3$w}eaE;G+./"YW놙
;8 
^΄cOF8c[ZWJ;f=^ pPt
Z&T\wz~C43=s]$|%p'f3z1>z=Lbd#.>3y)Qr&
CyYG4ПRG.yvU]KTe7îp3Gn PKZw  h  PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/OIDTokenizer.classmJPIRckzw6+/tpik$DQ_Fwn\T\ Rs9??3g
`	(Puhb"Nťj«ZҩS	]k5?q	=0~j|]AXs,xVϽq
az/^u5Jk)B*0c@?m]cvl;/#F1FK|gՈF!;کږ_quG29du/]q/J5sJ0fx
TxU0% s	TH>"Ӝ
.0F{'$[=4ARǠ<earĵT;r5{Y3µRՎS_x熸OPKɝV  o  PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/StreamUtil.class}RMoA~F(B[lQ*h&j&eĭ./^41j<x'F-$<3o nᎂSPU Dff2m6.Bw
30A=[%nt[5;
㬣BQJns1<G5YՓUKS^bP(iOakա^
hq,XtE$0Y	&v
O$"3ԷY7	uƒF)eiPSA`l`xýQ\ H׹f	&kvtm)!OQPQĕ)O0:O$'I)^\Ց7odO_-aɬ-?°Z-]Տ׷6XdQ#~*7)!w>|a?"(. CAd$ȧ1s.0`ޅ=%L:XB):8".Vryh\vp~ƽQfw$ïaϱ*O"sHQ߈V|;@BPKU[&  W  PK
      A             0   META-INF/versions/9/org/bouncycastle/asn1/anssi/PK    A             H   META-INF/versions/9/org/bouncycastle/asn1/anssi/ANSSINamedCurves$1.classU]o6=LUY$vEJWe(Mk9Iɶ	V`?`?j0${/? 8
aZBQ(5"cOm 7IH4/GiNp0[ՃS1|A#;_1,7ف8a$|VPcǾ+Amh6%N(Ɋbh{{:CqiQ)k%/a6\=3Hf4lge:Hi-"6):4az9N*VRPG,d>8pȋ"V
ܜ!p=8H)	#aXG7MP?NFGgKGo঎	&niߔbB~[4O+%}Fw_֧rn79\U:Pˢ׺MtJpmf<Mtb hwfزu_(ȎW0;͘
bnفˋX*#28|\-I'Ȣ<`LURU)Zҗz9!sN]K=ZOgv%:3fɀ
^ӄ`岠|Oح_MlT_%r_	+ga`tFE51>ԉ\?Ӵ5Mk2ƅ>ݴ|>>$hngYQRUQS/?lz&e䷉C翷ЮժNw[7zO5o,noP;'Xk<8A?TzMv^mI}KwgKN =FeYUˤ
PKRЭQ    PK    A             F   META-INF/versions/9/org/bouncycastle/asn1/anssi/ANSSINamedCurves.classVkSU~
aA.j -,EH

Vl6ai
zJgonq̇>y?7 #ɏ
QQJ)+lZ9UM}HuԤd2>/tXVMv3ZXPnn1(yڐTE٪cMy[rVAӳcJ%Ψxt:ȱǸ>3mې3a!hF)Yu!r޲Z6[jV-@+%cԦP5]&je]t*MQꊑVd{-Ur]^AGHz4uzD]_V^Roঀ~ι Cϙ
+rEpn9<!K^E#e?4R%-#O;٩
KN8%m#"}kީwJ M0ͳsrˏQ| `L81txA|*RDt85V!(b\S#|'*"f'AZ>-B>ägޤJ9iUf7E
">'_6G]9E͉5A\B~19kvKx  )!1ܪJRy!Og<JD!S;邻xR<׵\jN͓8EiW:UypH6#"
4`qx6WTh!ۈth0|Pj{K"f4myY5Uf Pnk{U4{%
IKV[%N88/θqCNNpUq`_V4C'|Wr/ulB+}L+Eǘ;Nc+Vm42CxǽXKc:WCC\>>9D_+OQ|W*5{Yu!+8]0&apșL#|ڈ"]Akhl'YnbvH9:O;᭽Dyh'Xڦ7վL<3ME;^
]uZܼrk%M%؄iI[ȮP-$lV^űC4+P:Lv򁧣SjCuvGH 
Fi@y6UMoCl9gѦ{PK6S6i    PK    A             L   META-INF/versions/9/org/bouncycastle/asn1/anssi/ANSSIObjectIdentifiers.classJ@1Ik*7hEHE
m-aɶcAm\av?^ D8tE8ɋNQL2QjΆ_21F+Yxya,ó,ApYVp/JLŦP:w5Ա.!@Tl8o]ؽ+N8}MBGk7Hoiӝ*\VɪkkMa-[`W]yj>PKc   i  PK
      A             -   META-INF/versions/9/org/bouncycastle/asn1/bc/PK    A             F   META-INF/versions/9/org/bouncycastle/asn1/bc/BCObjectIdentifiers.class[ŶN&ɉwlvvwV 4
+d+@pE.\.\\^ٙ^T)9U]S蟷iIӇ3uΟ=պ#3+9m-[iݖoמM癱ɪڪdU]_MM*U7xf&]zfsl޻yZGsis{ۻ5uaf1fg<vK
f7x/-GfugܙId&sO{Z2\8)\4B}	glMU&+,(Ԥf9԰
dV,RmKR*ZJ$Pc5TAM5$׌1ݳ/0ሡ)24X)F2M\=>
kY's;IdfR͙֖ք96lTɦFl6Ml6%Yn]hÚق56Vd+maݹdidvȥV_|.ډ\4gA{W+ksdv
}73cY)4=XiRMf qZyGf.ԬMd۷$,N2]Ѕ)l,&\uȤ)Y]Szzȸ쏕iBVc&sH>,n#k&0Y2) C&V8̉0:恛pJV)dY9놢M.e=ŕ=0d.`1زEd.fQpեd[\q9+[\yK+du-9ד:?"7fmg͝3n%sMt%ӳ2w"b5gm?lw&(d2mq1Qq ͞0pBiǱU+TH'4g
ճ92#un1u"˱Ϥ1KbBղJTu2oEJ3QWoyV׻dc)Qͽ> a|RM59_Rӗd*o|[^+{2?m|Od~WN N&}be)=<2<{y7LraAߣX7Soycu2|<M$oRuFM!o	<Fx;{:2	oЦ7^o-k3/j<V$o%Y
FbV(i
6YțF˕_y$[akɫ`UVFʌdif-C޺embqg,7Ef2ac6)o)!搷yq(
ehUؚm*XbmVȉaм6H]۵M,l؃2Q7EZFȇ=[XnCu2
VX66`O N~QLowO'|&dyq<Nx!A\֬/7KUNeHxGa&fafxN܌3Tbh'wJY0کq;=chJxga("vasvڻ;;tb.)ooܮI]Ned8*CkȻ]ﺒú˲jy%X#r}ꆚ
.(q..߂%v'-(x$1>Bޣ҂ƺ"sMs揗#%$)6_;xuϑO$_,1G{y!k%yoŃ{.KN6>>(+ЇOK҆J+f6a靳#y?U/d"o>4.Ĳsiw5q.E酙E\<<#c\<1ZGXhO$R8%ڋxX I.&ŵ<d/+H,GRNSEq|_::bWV*V#hE*W&>[M>n'i%.~kǩwBQ5foL!wy7?7+618뒿n7;Ң	F\OL7=@DPFF?SY&9eUߪH
sqʯvE&y;#.b޹H	+Icx1D=4eڤ)mEȟLb"#޸w7oQ#v]Evq8.:O_?!q99K"0:aboMjm&`s !6a)g>20&#5VaFqT?vpdy'x,B:XPO֊?j3EiqÔ;$ʙ%{'MgG[_s]8U!<o*ȔRmUc]uؠdMxk_D>AGM1_Z2/نJXWM6VJ%~-fzqYJ6S%C-ߊ;ӜaXTL֝%mԇYuO ȿг(J->L#1[фX%[lOdaT8.t%Cϒ\aTBC<D/ڛWCN2!U1-!͓߯h
-[H<fi܈*W{[z9Ν6sgHo5wn]%O<m6sn2ws%g_
wgdr?*yEM[Nͱ~%G#F)̟otIvh%O0c%8JxQdGҬXVīَ';afx&UrƋ.FvذGKTr.Ev2x9Ziʭ~<*%Zzۻz;mɼӕ*:匷]54vn8d׌2\rZEO6I&˼B/C^Utܯ'%;6Ut_ڱ\
֭
i>*I]!gݨƟj7!Cy [ΑdkGs_~-nw*ց2]ᱪ٭|RL7ׇv[S>g;P[eg'YD)c7-̾2AWC2lÿ
m+6t"W؎^@dY2v5wn@UΜN.&#KBY5ўi~/>56{=;@kݗ좘q]}uc2R?bR3>F~/Շ=PT3?qdOH7d7&j
я'{B\s'15PVU|Yo|73bvM
jwٳcvaU\$bt2Y[W瓽@~F8և_K#qkMȒ^-eP\{- njz7jn"{s\do+uTAΘ|d)q,cb~Ab@0=)u}M}R٧c<Kvk_ "Ru`p/=𨁒Ⱦ
Moɑ= 9ŉ<=uxOg'A0U
PX/GO~V(lH/эϢkCEߑPF*O0hQ/duw+~'Fq@NU49S\UA瓳*~6

A	rÐ;d
l
<nѱEp,b782J&X(lӥLn1Po}r riUR.T>r˒[mլ@~nOo{'[*HhmGz*9||0\S֌7c705jM$E>?aq>H)V^#ӺcMd]r_&6jC7$7+Rܘ&Rmp)͵rsr[D[:-n\rʁ$,v(5!Kv"sL.ݮpO:"t^|TrirsH(r"!7/Wk"ټn!9\z\!"ם/K0%'\s܍[DهV:p!"3pwv$ܡqUVNǚ;X
&wLcz\\V<Oڄ;X
O&wxCWMȝ^jx#fx\r8Y}]{7sptSt_BťNxz!R9keK+zr7;ODr*VrECҍڜ,T˻uzyCMB!hiZ>NsT˳䞋mȽXZ/{%<g˩7@26lHCAj}r8L.6#rQ?,)Lr_R_&?omw/~~$S$Jْ_:HNm
Q`ꈟFW#W.!ԪmayHPYO"m/Cht2%sZ~,)4|w|
PD4nWml˖Յ_e*ʜ%L`A}=`Z$nW=eoA-ueuCCpjH$(<!ڡdW}ݖ>%1Nfq{'cB8Eq*V)&Vf[(n;+bFqB.ŽV_#U<Q񟊧)x/PXW(^UAfTG~ŇW|Fyŗ_U|Cm?TDsůUAg?3mPER8Iq	eWR\Mqb(j>fy:'p@q?ŃP<FSOW(wu>6*>ǟqTo_(F Sx3xE/o WWzu>Ct7T띿 ? WPz)x'+zWu{o5^2.E]Vs/+z䷜uD	8`oupE/~WQ[ݏV燯[*uߒwWȗ@?v*jΧeW/~mu~on[olu[mu[nu[Ϸ5_Rk8|RQˀ_PsY!uwo|N/z>Nqz^p<pNdR@}~P *i~:}8}8G4sNi9?4sNi9?4sNi9?4sNi9?h_hzyhzh~zyuxA10=gq&\geͰqo4c3fŘ.eAg*LW]#kSiLk@f)-m`*ӳn:1 tCΚ0(lTf;
ct;fV֕yY3OuۙJiSftEL =顠3=
hǁ$Г9=5kN3g2sJJJKJ˘J+JkJ881kn03w1{J>('@bl<~_`*~_f*~_c*~d*f0T:SЧLC_0}TSiΏLLƳ='
>|d_|9W_|u5kS
_||o#ແ[烷wwJKao?E8a"	o"""¿D73E8D E"\
2pY׋p[D">AxB!<+^UwDx"|3AA!*U*(M0łG0łG1ł2ł'0gbSbK1łe_)?#khs1ҜB5wZ;և l,¦戰%E"av2",E͔GC"Pp@8N $)Ntgp6sE8"\"\*p7BY !(Ex
3"<E^oBx[ | >_-E	/"OcZ@H0H@'DEaI+BXYV
BR"4B.:ar~`y؍vcIy)Sݜ)Rn+ehghw4YKֶhiX
la.TRSg*!a*~c*d*9)=)=981kO'3SJәJ3JsJؙ^K˘L5LuLٍL0^TzqSŽLb[39> dH`9>s}	 *wJF־zt=ҩ'LS3N}T:-SBtڟ5oL%ğLyL90sC"΄̺̍a
gn<Sq68[8[xXn[^u+)]]b*~LoSlzMWg0LFLll7#̺-6LvLَqd.;Smf*mG {2NT)g*33ÙəLLprrr8S99S9TNTg*w&7Iɺsy1]Tw	SieLed*cx
SpTF23w1js2js0jsTW{=	jsσ^ǩ۽
S{n68N=p݇8uOqvǩ}Sn38N7pݟ8u8N݁ǩ;
Sw0y`8,K
o*8	5PK~  P  PK
      A             4   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/PK    A             T   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/CryptoProObjectIdentifiers.classwUǿCLXE)Jkd4mJm+8N&4Md(V\p\p\Ts (lR~?Iͽo? 15\8S<Up\yaTQk,3p+Xk`zX')/_lmuSȅӁ/z'B@͏KAq/L~&JBc	;5owkb#AM7܆e)3ݬ8w4\}X
e+Bh_7.:4&
b\KjY{PE~;a}[:;&QEʽܨ,`kD#܌rrtr혥	Du'R0|LḊyIyr]V+5JjB:P)5F5dگ8IT
5U>H4$0LFD:	*xX`
6:>*C.a3EzL`]uhȈ:+O',gUȐh"ʹi\yUγ?-0W<i;|Ad"X|ʝ?Y359_8[ÐCLFUsdl_yV%pS\.ȞTl]ev*P9<Wj:O子"sՍԐ/&kkdlYiBV~[~lgϝInro䋯Hk&-:[u٩GA):GuuN<33sNI:<΋:/鼬Ϋ:q-w^@_xCݯ:F}_pul%Ƹp']w3&pc#b&e| aAG!`$<8ᓌO,<cgO3.>Kg|
Ʒa|Ə?aƯ~
PK̛  [	  PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$1.classUmOP~6])UTw){þVֵJ2CD?ծ.mAW QB$)CM>眞~+ :I$8yYo-ڱL?ټ;"A_M;=k
	`8h,F8\EeGܾteEIe\[m5- l띹m=u:ܡj6FvjƇEQԛ JUڨFU-%&2ۢ>Gnf>gLf0AG0kI\p7	2sutJU|eY'nq_Wr㔊aJl$ziO4aqEOՖ	D;J{vhMU动jU՚u4AJɐh1I
4^jT4UT]5D]Czf9<LAiR1 _:uZ![$eTNr/;?|!Q9}kZ0cp3Du#F6
dl3?3CPTAis}Ԗ`mpc{Zƌ>h8A0OW)$&)2H	rGK`3>FZ1:/ ^H_:?jb1` V~8Q\>^-BR-vC#aQISMB51BÈPK)    PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$2.classUko0=Xy=E qc@	4PJ2%|`(ML:&رo{O}_ Kq	f%=O}dy',Vw 
^Gyfjk|`V_)LpǖP0R(=
ky&O.?|銼ĝ[(#0A	j7	0OqQ6nݏ2b0;S\S}K1RUP!͢u8qp2NqW\+k04]QՠZٲ;fibLw:-_<j{ǙΊ8տY9'zpy'8՛McXhAZ=YW
-]qWw`d)z	"jXժJPnEywiqŁ3VT]3昦-{T{*-7Ա
)k>ebggV
H=y(zDK^Iq(A!3	Р`0aL6i7kHq$ɋ ̓TBƷMg^}`&<0<	h^
Mc`ԏN/U~G)YVd	.eW~U`
	Cg
JiQ.nat8VNfNm&&> ܁M Yb12WmbfiٙPy7ׅxKypjb-? PKmR    PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$3.classUn@
$u
m}4GZrPqM6VTx(: V͎~0\D!&"~fPHSõ:$wWl'd	Jw
4QTTuӒ\f)MMTө!#A=2fUa%P{$kYĂk[|DV$q9bIÔ Lӊ(+~gI'jj;~*X(a*a| TڴMY$q<KW<ɦԠeE	z0`>ܬxk%wh	'	
TTƙ"8?GiGkxq%8%_IkKy>\qWHrR~ 3Up
׋QE@|vV T5xL<G%`0]UY$ڲmyNe-((h
dMc9lY%ë
AO"DY`jA^a&~`Jo^tnuǭhQ8 Nw	 Vm1o+, 	,
k|gA_JE0FA7NYxEabw4㐷IC0d	%	PRT1Q>ƦlSM\]6'7@Pg;aaOPYo56q{ܞe&`׾PK    PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$4.classUo4~ܖzvл%vHxLjWĠbWۡ.loVLεR8
4K~ [-,`%/V^QRV )3g|%cYR$*-O p}M^MO)-ҀeEDg[4*Vabuku;Ƹ}xd4J˲c6FwQ28HnULw2 vV6q8*Ey+S̳'h\ґyjfG69NQG0pIK(P11jɃRqOS!boAkpGR)EX(e #	(JEұa  e\
aME7󬬒2D//?'<VN-w	5k^-,\ŵ3E8"twA$֎Kޝ&6Mĥ3uYc*;}[RR.0JGzئJ!>յB ~[Q_H t	K.|OazFQl<ځD!Ҙɴ&g	^IV
`s汖Ɂ^Iv'-JrH:p\hF}n07s,}̅UqdeTIuY:Mbd֝X,-ARuB^ЇX3euY4ռ803Uӓzf%fhN7Xn_4SllWM-ct
Bp'=~{71>^mDSicSffՀi,GOPK'ma  J  PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$5.classUkoD=fRށ;c{6[Z񸩔UD٘mPjG^o$CQB\o""BRH3k_߹;sϿ Xoa

XkE9}U<z(џe r^f%{^uai}<GZk^d
UqP=om߹븂o]|Z`Fs7飴ޝˇAZE{y
3*~B(2ّK"7r0J2֡#
ٞlp/Ǉys19h3+t
k[r8Ѿc-DJ)/q踑oK7w_脼18<ՑK\8x6I@FA$wD=_О⳸xxa+Q	ez{0\v][0>N]ZxN-jA'A?ӥAK:2x%CsU7s?SbaӅć$!rF;*4NDB[4BNFZxϕKLAJLĞ4*N
#m;2:HB&vքs)vMxu%8M]UaWz
^ 1,um>p7asuAU-8Y'ߞs};3% s2KSfV&ir2}K&#jYuenyVt4{Tr*)c&5_04O,8vAgvKn>K~՟!:'4?P'X$:Bo){kO iWq88Lքf,[%;PK~=y|  S  PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$6.classUks4=ʆfch@)@̓lْI)Xv&f	>نI-?	d? o2daɶtu{/ lc&f<E9U<:(Vez?rt8J:AmEpeMm78x/=,Zع}gݶlDNl4Z+o҇i ͇U7z'S^_oU6ʍ.w(be^qXDr.(a2QrQJZ>U|ΌȤտ>>l6>\2-cZlO
Pɂ(QQpkhBh/\F\$,6RI#kjMDd|A%2&FH&Nh,HBjMMS7F
*̥4k^KD_4P;ۚd5zNfֹwqLдn'+sMx7젋WY5wqUkuw>i+ u"nĔ\N2Wx/u$Њ<ab?gF(׏kbkmh\.\IM;۫鮦iB;?~^m4"|HxqOBS\55ՐuAUmNO)}]YUYGeV٩[NΘ!X4n\U=Vg:HG̘C,ęAؾ-'gV@~Bw5ްicnsю[Opw}l< 
  ds1Jg:F	kkؾz' 3c;`#{s֍qPKPI ~  Q  PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$7.classVoTE?TvYV"QŝcHROZjns?I D (&XhwΝ9sߜ 	; GZ؅hx4wh6sǣjtjtg
8za{]_z|@ۅtSxڧ\Pr;嬀h<.geBH+oFwFÝdkx'[=ѭQ}s跷.MrpJ<!"plΒ
-	lN+(SV(CBgx-pOύ-ۆ,#<v5Z
#d6E>kHF)%DLe(!JF@6hI,TYqnufg,y2XyN^3!ʬd!srA*P6/55Lbx &0z6S2f7>̽dބgx0qjI=ԅ.|ɬMjb':Xr^@?x%bp!]x>B4mC"K:݂s]à ȶho|q6"bK8O)˘kgw	A#72kEHs%EG`jo	#$
A'v.HER+	
O$Hģ$Z}UKiZ[QI6BJLܰ>QX<q41E`eHØ`+NDL9DGIYc$7Iv }d$>DPa=[8w:Z`pqj5/>q7Z׻pQyѸV`~C
09O/:^aW.:7{Va\/Dw3Ltɤh6k
Bޅ3HhXm	E#Yŏ`C{\ mNx!,X=qX	^X>3?+H+`ZoٷxC`7ίޞsEJPYcȼPK     PK    A             O   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves.classWwU^'^QQQ@д%&)ڄնT-4
0Eq}]am%oy<73II;o}wy(	S9v'@XIqի47$DROxoشdצ`GM1TZO,گ%&1`0-y׫ɎeGWhfQUc:ߜݾ+J!G9d9,0u%xT "sT`ԣ'}5nEӢdNdTb*Y8rDoCN5L;fUL0LqWw8'H8cNbWAa]UND?y~6ȧ`SE՜0L6"#gX4nm՝3,(fpB3JU>B;FZ,.O;Z8QJ6QYBg	7Qw@ug9ՎKh)ѽ9B3ֶpTtEcgcì2T~?{4]C+W;+9V	wi)rǹaE7rjlh^p^r/Ǝ6
Q5#k9a=LVdw3m@B6STPtڕA 9,`aٔGMv\6C:PȞ	Q]J)	]t	[q!q\.58`zTůT]1b	`C'+/cf#pR426
P-z"`%Lڵ:Zc$'
D.(((A4Rm~=hA,2uB0dBuBIhoҀ2ڀr\66`=|Ҁd⸺4@5\.
x=ǡ fp%z}6hO.ўr܂[%&vbTԻ'zq$Ĵ(,1lN/FEsIâHQcJnZ	ct",x3j#,z,:'x/IxY40Y\RT]SvlD*e(ZD
>F\x(v@`8"tQAa
l].jsy#S5.]&?8Ĩ/*nCqEŭ(|*xjTj=kgVO`r˟(h0V%If8Dm{]'qinUaK'4Ӡ#oe%VS>o?N<V}7kJ*0οJip8hҡ{zCv!(
=ס,Z	&.=$ʈN±G nJ`vMAnmLÎ8]
kMCĻmZ33\wܘBA,2P[c3Kl?9p|DˈVZj?ĞT;5K(:i|Ŵ
k6>
h7h%_}銰L.7ڔ/䳅:B|[hsVlwfY"DBj	Tc.M#1?2<}s^f9ٓ^%WoX3رedM7]eTF{Hc"+38Hܵi\A=q7qs\CՍ&n6㎪{LgWxȄ&GL<<iig9/0뎅!o:ox~gW
#XV~HtѰTrnuPK/Z  y  PK    A             X   META-INF/versions/9/org/bouncycastle/asn1/cryptopro/GOST3410PublicKeyAlgParameters.classVmSU~nHP޴%l()bS@%%BոI֝mn,8S?;WtedF~799&a{s+	$!(#f9koղSjM$3G3W[ZuIeGuFk#-LoAVOGFg*0S$ood[\նE=hvY`5H}&'LNKQL9ΰM`*=/ͷpfth-nHx_n$ZkoȸKJmna0u{~Rt/
͞fge\agmCN2YI3eVLߛ2-<IJ Kn[5Wd0ć(-p'Va\0"#.T&=URPm'roԬF!&Uv܀ѱdSGe&u
Z,3muOƦOm6	x[ X6ܾHqAxyuw~K{gۍ$!	EMWI[$5ziQ5W&oʂ@8at$h5n,.;\"ex㾌ePPxő1^词_`C~$0Ґo/U g#12ke5ZZlKꎝ%~y?k&4ճu$vC̝n^ڛuCR/L!h@}xk_kr  !LzEg+Q^u >w	|B݁uCڭK2^EG775_CT[ݴ\cq'p.2Y% z@L;\iW8	3uoz>wڏ㽐XBo2 !,q:Ht48g5ս5}u_!כR{V{=H<ă>2GۂJXlPKp!B  z
  PK
      A             -   META-INF/versions/9/org/bouncycastle/asn1/gm/PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/gm/GMNamedCurves$1.classUoD\.k/&˝\;	b'zYPL[W"e8'*AFOww>swo \\GM
tv|'E9Jͤln~ce'iQ\?̆.>lA@N%55hXC^';?HiA%~Z-`.9MQ
̯|
vSqR>3aV4iZ4T^^ecqƔU#
|ISS=ɝ(
E1EY1
\ ߱h$бgN0G.-]-kx漴	$}`.U`,훱ߒ5C|gImػ,zŋKhw븧@X-1HɈe,~ubG=b'cjK0}E)8L	8Ipy8^qvidBxN|fYN$MBc:O@te<J6ؽO 
W`㲠xO[+_y:+UO~95X_A`t
ǿ	ۇ51>R4)YZקd1m>;?Lil|D?̲4(uI>ǆKdY5uW`WP=,g L)ڳ]4RiquyM
o(]K?tjk+3wg BSM6_insNj3L?]B8q)-Tk*˺*o*	PK0P/    PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/gm/GMNamedCurves$2.classU]o6=LUY^+'DJ,%]6RI:`@vOlWK~~0	0Խ$/=?AXb5KB(O'(I_BPEߥEzY1y8d|Xn,ZTOx\H"h̵1rYDq/cu&wgG088iM&-J)Szڣ4ߗ0lLiY*J(OsD"`:n!X0!8	Yx
4.x\*DdO$
TE1't](?	ck[IB=aL# s7ZwtYַU44O+|FPX_֧M|;ueU]ku/]bܭ	mk> +A˚6QE%=ʃXh~|OK8QWQ:R:1E$<`2.=GsX:ةbN9uW~ülb|!ux&|.YeЕfr*y/ǅ"yHpG'Er2;Ov,&͆qDi7+_Gy(Lp!y5TmQw`[#,' O5h襀ӬN󚖻Z5rfͥX}Vj'kW?dgZ):{AtWpt6Nuur2ҽ-1\PK˳;    PK    A             @   META-INF/versions/9/org/bouncycastle/asn1/gm/GMNamedCurves.classVkSW~B[k钴Z)H6ںI6a1٤
mkWg)3~LSn%4rΞ^y9o '/OB3~`8](edVSaTY1'KKK-PM7:b.jJYEeIs̒gJӕ~vh솰= p^md.^
RTȏ+A[֒e`DuSͪ%2ЁN	>8бw=Ci	'wOދ#pY<Q6BZ-5OS+v%1?Eg8GBIɪ
"\)pFpbG	%sb8԰l !x@XxE-TgZ*$i"t
b,J2'(^p^a8
(i5²ZQOP3̜K^U	p%KL _j@J~IǰHyNlBjQFKT+îIDvOe4)xo|Yθug#Jr2q	\&K(W?.
$ޔ0q6&ZrsmQ6L	t	wu|*<S=yZA')ޮވIt
f8X`h1b%`$,uvЅkRԊRDdނ	(3b{;RVZX5f4z]
Ba!@xdǇVGsn!:Q`p)S7oQtwQn3;L`4@V<cۇ0FzTJ5޾͏֏rλubDzG<4ן5Ɯq;?N>3@lD3ؽ`hxx
/7ȑ7#k
Vڬ5C^AV;b!r(\	ECk8SP(hO.bbڂGc>ҺbN>&a.&3_pמ$m\kQ=>LVʎv:B.\U+|]ol6VU(AKHh
o[|[+&/ZVRum|〠Znn 9P7c6Oc.fCbV[ǒ~9*xXJS?:q$a4{PK0A"  
  PK    A             F   META-INF/versions/9/org/bouncycastle/asn1/gm/GMObjectIdentifiers.classwTe}] KfgAi+(3oӜX6&b)bI\IИbM1SL1SL){gO9{9{={(jq
ɶxPcR:hnۺ/mNRj*(8t)nF;[v՝H&0Փc7MVѲ@p-&KT6jɮHꉙ&醖r2ӶiۉK
53E0v=UM54ަ&DmB,Z;VRLYRT}19quQOsV~wh#ϴ@%wnCW:Z!Lt	7`AS{%<
#V2R2aZYq3UGTֈ);ZNgP7"	+iHX5mLkO
~1ph(ױS=25r%{ՃJ`Z84cv9ptgJjŎQAt5ZG-y%>	r)ECLr%GԂJtMeeCS
yӵvK/a&ϒ}nx_tc53B=M5%{ObxUÑRѡ7
71RMq;{6[1{VzmՕrr$1Tc1.Ѻb&,D<l#Ĉ<)biDWL%}L.czL^pL'Ղþ\^CFgg(OOʋzh۪Y}~-~ɾ'yA02b!	Jv諆|_gzH|?DM;{me̼1|:jw@|i3*
3~#&1ӣH$`S8?gzL3pz^CLtSy#v?g'O卺CoLO-dngC_LψD`ri
Kc،t`%cL`S_eOLC8@Lbc_&u`r~f*ibJس;O-cpI~03kփkf0fffp,YB3&-`b3_ZOm2f6\6-x431gh4t/gBSWԴ\6vIwذT'򆍲ak{`4iġQҬenm0JSl(k.Q:\fFmGMerV^4]Nm`faTfizs=']fOi]˒]Q	rAR|A.P]L]5RuͪUUwS&UӪWVFZToTIf[ToUMv;TGTޣz>#>O>L AUYuL9UPTT{UשnTݢڧSu/Զg$cQ=u7=uhQj)wѴ4Cl3g	
<G\VAv'xM
 ^,x)pW `, KCa/BTW
Z(f[|ແ|?~T(ゟ 80>"#t+|Mo	~= $oO>%w?4*o2u`<d&y#faXY[8
^>	|1N PK/   E  PK
      A             /   META-INF/versions/9/org/bouncycastle/asn1/nist/PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/nist/NISTNamedCurves.classSUǿG7	m}!@ӄG
(
h(ժKЅlUBvMw4%19瞽7 zC uWш=U5Unc_A	!3#󹂑.Uj2Cd253hD\,J_JfmBV)z62Zlu>
Ќ}
s!X!
IMl9Pit	p	9qHfO%3O٦n,RkNMFɌfp#(Cz#]M򑆑T1N#⣉iդ2fZRq*7(2\Jٕf<q'9Vuרn[
m@;
:8:pwuMvb>	բI9Qu+\BS44\Ԍm;ZzE334,kEZơP{1jV4S!0H;{&9<`c#vz)Ikm}81ǩmA749U^H0&s:.$ǸXJ>3	01]'][3 @O9 1%`|q<_ȷLT	x"rX'^.R .\0E
 /Oa@ޘ- O>+ 	u	z&[%|xb2M 1	D1|q	 D.C8pV_{S^gĥ2KB#/_xojaPHۏO
!d076kZG|]ot]Aq
>o-dm!|>z&@	wl``GX<S*&`?"б?3-
bC
>/ծv;)R$5Եx5XHQ~0xfўM6pֽ|<5قD%@ߺߗjM/ƣ@)=[D	Ia'L
.	¾`^XK(`Uآ}¾]aw!YwPK@X  V
  PK    A             J   META-INF/versions/9/org/bouncycastle/asn1/nist/NISTObjectIdentifiers.classy|g
W r	Bݜ!!r%A@KɆ\
 (   ZB=a{V7vC79س2tӈƦꜥ+*VWcup!SR6+8{HEHCsMUM)@2C`v07߉:
SؚLYf,ԅsʚjAs:Pʔ|Xsάies+1uA9Z4rƅo`L3qI܂6*L-{-t	6cQXXFMey,@AqW4إ!xq`(@W`>ÄǏrW`r.\
Π"alqb
K#ZpĄn:O׽MC\5]hF\6h!o$4.WwR6vq3|ZąB0bBKt_KӲV
Etiuk-nu %njL5y:Ǆ[~~铴^+/]huRNw	tuk&Wh.#1}rIyPh/R:B|ٓ5g)#-Ǘ4t&"{" 8\p%f2DXHC>*tqqT[Y>xCcB'cq
mO_s`$,zF/	
=YWy8#(j|l(@_MBg}Aug>kqs]m8վ+ϡ>Z
sh~Boǀph~)VR
kXpz7ph(8BupMO|i	}Pz/\Ї+cUW&}z$D"ᴶ1bmb)X@8M@YX[>ra*-pfrMK8+ppz;C"*.cT[eSYl-{41Y^[]וW][pbu!v[{p.uZk8$>B_(Ůtk0 /Fqt~F
8dk'$(,H̘]ueuNEՅ[=qkS`)<+atHGAxN*P&<70Ox~*@x!Yȹm"8C(^aY*\Qꏏ&wbK^'\'\lS6&8iz^nfUbjdyw
i'%"y^'̪
ģޔ:K̼/
Y"cXks)eT6%ŗRo&=&Kz\xIIfzB :FyR0.[Oj}>%|4IPsP~:?^z?8o˱u#;myn!q??oQL0nmgZl:tsL.2]b1]fhltMMn3at>L3=azWL_5=koiۦkz54ӎb44˴i?ӁM:ti?^cL'N2j:tkM.6{E5jZodtzS<Tn7it~ӃMWuy[(]/L{.>E-48EY-GRwu 2!WG((ъc' K'*^8x\|[o+UQ`b=pbp*kw+ol? 6@o ?
6@oO 5<	ig) lQ8EO?2s_ ~I+)~- /R
w I/)5J~}1Z9NjP+]Z9qOV{m/PۆmxPۆ mx(Pۆmj
gm8Զ|=HyX%ʥkkd+O+@=V	7XyPorXgTRQUnP^S^|w)߭|F7c*mԶm@mԶ]@mԶ}
#@$?PK<1    PK
      A             /   META-INF/versions/9/org/bouncycastle/asn1/pkcs/PK    A             J   META-INF/versions/9/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.classYx\E3}=-iK[(
%-&дMݛd}um A_("(AQ6Z!TP! 3n?3=̙swJfFiPgK@)ogBKM۽x-e
ɞwXPBu
u+B榕uDj<\$k@Xq]r3K|2ӻjі	jTd5T}v"Z|tZ58λxcE8ADhrw[3@f5ۼ:ӉB_g4\;IwETEk"ݡ]sBk&n熪0e$\
6[;ʪhkp9	P5P9HF+QI#Ht5Es^f00('EUKh4Fu,)BX54/2
YoG)66D
͡jtiy:CC5'WTv7V]#=/{ն"U/=ow
7%Qm)
@7yiJUQgPe^i'<\ۣ[DI	
G
:#
`7=CC=̑
Du6g¡.>*
Fu>)&XXN:O,mGL2
asƓiT+-S8՛͛1KkmimKyTyTSۘ|Q_JJTWjDC^%TװseT׉)T7LWQ}Md<)x)
T7s<fn<[oߡ}f7Po`fAJ]TWmG|wߍuoMGQW$c#u<?Eu?&܂먟Ur̿@ I'ތh~YνQ=§奲G?
陙%f}ITOd}GxA#xj˷^,O/7e6BKT8{OWPJ9eI/=u{NdILk Ǌ7Pɇ|Y6p{4ia^h:M
ѕw7;챨]>+d}n*ezwg	ҽ}ͭ><  hR.=f|	/knL_F$j$Apo&"L6*?m&&d*YHNF,plJP;l{I3 -3HJ{Ce4)s%cv_CoG8 a.gq3!#_	`|!GU#-@X}~OV9p8y
Kӥ\{հ|Smf	˭fj\7Oc#-CSz
5qDkj.$ݮAJljlZ<ޓ̀a+p#\[+m)bl
\ZVW_',Cht6A)`yv?ێ`K8y6]c}g2Pjt:'>"X5s߆lj XO'6I|"6%h>dSjtuE2=Y9
!ƙh{t6]
LyM{zhf7+{K"p7wOMRk
!(m"imF[Q{inTUnvwtj%݃0JvGd&YSζ؆
w69E%s;д/#ow|ꅏ"p6SX*]J
>ARO"|!V[y>M[A8Xv#m6\~q8Y}"\6'\NUk
`$5]p-5ͲM1l\>ܳ9My|)1L=spjR]^~d_Ci7Fȓ7+3d"ٷnE{np]&޻!|wҝ̸{@3pQWECnpٯ3.~Rky!}t+=I')g8#	ܘraa`VMܫCӨ9Dx(-.BxRU9i~(WeW\uEx~xpR"ɸ>I[UdK'rO!<=L%f~3UQAi{ᅊ'aMIRd٨l)$3+7)j֒Ϫ 6,K"DExcXj2|-V!9_>Bxw`MUZ)#)PA"KvSBqxr*OD=b;$ly@eT'JLRfM;zU14z:tQS͡gS1	T. ґD=bTda'Cz~ԇVbDBVF$>uUvƲI~o=PPWP3I|݈)pXdɸe+,z\H_Iz.
QpǠXR#%/+}lhP?qJ8ikCݘV6n5Yh/nFadǋmK_'j&K^[<
PU|VM:#b'6#i/+NFڼ!ƘYIy埑ic#
U.n1T-7@S-u_]UU)ƤWg6	eri1ޒ)/1I*[ut3y7'q*fAǜf;WM,\da$ƛ(uR)uM`l \,X/,xт-m'
*-+]0+#xق
/1/DRF:oEpPpw	#x
>"S
(ૂ);
o~}`'N"X+8K|+wt3^Ns|Q*PA?m%c@2$c#ksw	%xyCxeW^-x7
$(9C 9D5㝂w+(9D-	>,UO>#K&ۂST0qyG[GY8jQ{2:uUuQHIp*ݴ;%w䮖ՒZrWK7Xѭ}]0VR5)55ߩ`۴1qjBQM^At9D2Gt>C.`uDCL.c*G=ZL#FOۘL468'qnNUZsDm>Q;]DmDmlgCvQG>ί$¢Pv?KԾ2WU\KND^u:Yd
[:&MVk`F́=&6'l>?g|"0Ӂ6~5?5+LYd-$&4U$4U&+*Pd c
dm	dXhZ}ٜ3ٜM3?AE84V YX0-b",.'4{	V0G1猅4J3Yc=㋀v?@WlV~pQTCNgg=W;g2DyON!@b7Q3!|()aaq0E/a9gɾ"\)Q;/AWNz&9Z[k5rQvd? 	('Sv3濠f;O$j|cD؃'9;9O2{2
EәMgdoך˼|
}2|-c'OÊܠ^Dss;z)Q^)^^EZGDyu+Q^!}z&/vζN"jJ:;u/Ӟ[PKe-  %  PK    A             C   META-INF/versions/9/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.classXWAMB[%l'uRݺ1"iwI{t
iIn@$Ӆ+uci=Güw{/^:	~llHMԼjo;O{)M1I#o[ORNk#=gxH' !Ȉ"U&SxoNRM64FϨSj<㴖*5wu[zvxUь	lmk+%
SKk95auNMuHR2d&L{.]\J4!tcJ#)-h6#צC:&VS24}fN7tYb@ۻ@=tsl"9B`Q]%Nvx$6v]`z.<t:ѼJ(a	Q@"܄nSSN`BN{i9ȈS;{$ܫ>W&HwڲlAp6l
8wJ8A<TS;<"6	N1P3]]JCƻ$qX@rNHA١nGqLIbصZ*J{W]2ؓ25ӎ{=8·~
>Z,*I28\05
oC~	DBݡO8{
ጞPnpZ*
65mB9;kg9KYc%Q0RԼٕѸ
4Uy&mZUiT= DgjځdLI8X	ܳ:	t|MqaoE$H2pT>	<ISG9IY**C>JQ\|\'ʔ
;@V7T3!:qf^>%l)oPd&d|N ýB;B9wԞP (K˞߽o7p*`ٳƊ|*x_z7@sPMNa٭isݷ|ߥYh46\Nbኹ.A{V5 "K62$'3eb:B4wj|9
px(bk4q	y*8+Bo<x}+gQ0M&>SMU'j1g2Π;%ںUl<ߌeze74gn!;!SM`v(]=RR{ňSH:ƴ=5kF[1eE<Tv1uv6ZM?P-ک/lle?@]c2zҴi=ih4ѳ
$ "к
ѶEEHs4:"~9ѫhZ<]RDӜ`=Eç4!cc^Nn.փmCn5Kh\VĦ+m]m	ҟ
2@&en!]PfyX^Cxk5+ZWjWpM¯.,`V
-N/V2.#1h/sDc8B=wyGwD&$1e	q׈ 	og,#@?
~w[/4zF)pz0LH|(>LlQ
FL)^#<.|4˷O4c<f_Ņ|l_}K}!SL}vZ?mVp5PORfQ,+{:_kO#pO'd_I BZhk'ɞ|Vr	,*'Jۿol)m9mlb"HFt(	9͎z#ѡFG1o?I6G|
^䟅|5>v
aR^/ 4&%+ӥFs>Au8xG'%2cK8XWoE^?^_¥X?-#mRu@F?PKAT    PK
      A             .   META-INF/versions/9/org/bouncycastle/asn1/sec/PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$1.classU]sF=84M9qJV&	a&Ǔ,ƌIIj_Guzd&1}vuu9^ϟ0#cj
pa-/AE9Z\՞asǯE)b+틜a:,7^u[=Ϗ,#옡e9ܶeȸ$AQ	>ePVD{t~pADEsΰ_Ň6Ӂ̇`u:._jpb :|<&YXFnխ0셎67|èe8,S
|.ᦂE|p}Z(a<:^0,?[w21#X`H3z#c	_U}͐ӝ_Z{(;7?/z\:>8Ls	=˵B˶7u4\޵
D.T	-+Xe}A9i"M2Rmmʾ|4M='ŮMNʛUM2D9Y14ՙaX]v踮kzfHRM3r#9n^D݀{F'!"6981XO91*Nɴx1ȆiIzuX5dll{:Q>)57LSW./Ug/rzU΂/Yo1".ɵNaX0n0\dDӎ(_f$4y0s,vPyTAIOWif~~zu24~2;46Ѹ^l}=k#|9'}K[hhm;1Fw=;Sasx8q",}\LڿPKiAB*    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$10.classU{sF]DFRڒJ(iq^zЇ%K%4š=I琎3Z f'x&tpBBoFj?^0°B	#%&=x/m
uSr<D*n;	V%pyz"l˴*TVP*!('ʚH?bqDTEכ̔~Ox;4l.La\bS$0s
Kx	^ 
RIg:GFT\K	&Pc"(:">&QۍYmx1	\-`
&	NܭXZl[.̖f!lYCt-6*M-D:Zfh,;~*O%R2U5iqW5jDFF4U84tGD!tPשaE0m+&Џj-mmW%hvԢ,6"ȶŎV<qKә-2ݠNK둥Ѫ΅1,M#lʩn9TLaERS!g-SEfE|p>	WfEeؙ) .H[$caz]գ^v˧m5|y&Mr27w#F%4=k8OˇGMؼ~dzR
n&q&.n4ʾW>"nIةQtuhqNj5˩`u̷L껖1N7XuèU٦܆%t	G]6LǗ|mV73ؗJX>`=[tAmkǜ*`Múorj$ʇLY-D*g_ߪ^$;-=*xXr:JOE?2$U`e8wv'Ӵ,҇ݘk^/C6&ev8:'$ 7/q>Wvqj9.{`ed
k#{Å\d9̙,仹+/@s5';`=ԚsOH
{,ͼ<7oVڜ{o6g\rj"X_PKbsp  
  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$11.classU[sF6qjR)vT%i:L㎑IIj_Gur2}w=>::|߷?`uT,(k?$.aEfho\G7UZy39lPn,;
4hЧC+u*>i=	}ǡ'IZ-`9>a'e>[Sӫ|A7+~o5pmvEit{}	ꉈ3:cBv`(pgں.&<kƌwgp"
e7=(O긥bܘVA8_,^Ѓ:>#^'nա?ir+z`_T, oOYu*v|6mTxGެ%3]+9'۠ٮpߎg\p7p=	>Wp::*ְNpG`Y2*)
zVۊIIpsOM`}^dKjU4`Jz"`"#jՅ<F@囆aT04mQ<M*Yf0jsO?c,R&RVUX4+04y5d$KpoMm|G:+?'gZz*DJE\VH<"s@P%;ebIezVֵyg$%1kzY2|9::Ͳ4qQTBƢCkyw]^IeY;}Pgo!]YryU{ro~$͚2ǛKt\[^1V;ݳXGP^6[c|[{^iyŦ߯?}|'A>)-+.z&PK49e  h  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$12.classVsElTT*ZTr;(+)n6NH:Ɂؑ??qwn_? `!1a
F0J0nVGi,ziKVDmTx^]Pۻi%K0zu~E0\Z/Hp-zc":Nk(&('Z(~Q"e7I)%./"JK7+kiw0z(ksM]810^;8G0
"AKE;U
U~tǄJt@{,Zj`|6h~ւЮFܭRB7Q74\$(Ir}imػOmGHa[NLMnryqrϱִ\ϳb옹YԐ2di)
bCW!˴M8VlRIl#u
fsKI	F]ö7iRNl4Ha|khvk+}Y&u1C8	q"];slVs$#T.sŝh4%"*aXXW̔gM󸙸E鎢i&QnA+$LGVi~`:|p3RAR>70Ժ˯,LF:eƙOݓqbt\+
 5YjzR>\>GUH:j5D%\
I7eoAQPhyeU<+]QGAg*k1Y^\
;r
skVkUavmY*fQTu\%;۵,nx^u7hnfr`a8fPC^_";[tA-+Ǭ:ncMÝú>G1on^ϗֻ%33u"N;]#*I?8*D	r:JʾXc(iը:=ee>$v[v?hUyXu꬚I#P}l\ũg8|`.p>~ille>V/K_;_,_%j;pG0_(Lvpubt_ޗ'ܗeNIRP%4.Yj}vn9Ul?jl> ʽbRۿPKIn  Q
  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$13.classU]sD=8
ښRGh]|!VII]H2әmf\#)~ ?ax&q;+z{ι `Gf%a3~dݟIQR#)2j	)KUZy59_n̶h<f5ϱӠJ>A{rDE5HaZhIEK9'Xnw~Lcd=I֫|i~o;+^o4p-h*/N(\D~0`Lr9r:42]n
0n.B2Ekڼgc9Nuɍ0
=ҷc
+V/j긥cܘ6A0_̷S:>!s1YŢ	dg5_踍;<v/.<]EasML;`n躞/)e{>
bO{hױc+ϸ?(#ͺCJi-	nNsa
_a0A	VUG2F/-GKV{ե_LԋhlIj	۲د(mƖ̋|jE3J/clKZܗғ=aƁU)pF)ܵMg;)V)
Yܛj:ֱu|Co^5+W*/n95*I=K{5تiR㴮N+(:i˸ApUfP0v$EQ55fP٬szjgс:
X1.wWռӼj^ip}jG}ma{B}4nu/;oڴaﾃtum-xrqr}FN45FS,(;PK7Ȁ    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$14.classU[s58ښR%)unx%Z-IIRf:uøvބxG1ht2C]b`igϞ篿U&(0s˽~}oNL]|*kI,^g7&;TK߰/7KyU\(V[x1Aj޳fkـZ`0,46Hf'^:,z換^{gZ7qNYeZa}%0<,J+JS<N}O$("&Bd,5N=fZF80m
XK\8NIG̗XCU1SWqqiOpeTZ	ig?`q5/xJlͰs*fQ	ޔNOj8ΒY;ܝRMuyX5J3iy=k_:)2kX"W{fmAm7+Z9QxUh,˾9TY><5
ZKa4cux6FPpX1B&#-TdSILsKXGI?/LUBf$U2JS,6L%2iL*M}a](ċ<z#pT>w{<=[VPCq
VզK#"5f;b5|A0{SǥnaU&/=J[y_D\P8Na4CP2αV?K$Kǧ8B4\V7peǽ]ǫn7N:DD(Ƥnw=I!Y8ePW'Pq p~~ѭ[nݮ֕RLťTa[8E.}Y;§ϱTgG_@_Z^z7\<9|wFnͺ̸o⼋g8PK  X  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$15.class͖[o7ǏC`a[`K))Pes~!@%$TiBeN(}j_HT~~M<TjZ=9:_ ̶(C2mvnz?q/x@M[7ŨxRVh|c(G]lU,kBOdZ3=q
viocY<bgYj5\]؛zRTnk*7jN?rMhב`A`It X
5Ԃ,ͭ96&GM BÌ `rD
˙sEP,Zz#	s.,b܄3̚XAJ3i4R:Ǆ먰")")zϕ
	0-96ps>3ӶAY.<B0׹}n.YS!ǧj>F0Lwo>XWI.¥MZӱh҄ˉ<Dk!i^*aTsk-έfp:
Xh",!j-a:Us*ge5aI'As&CC%0'tIiă	,x'%M8Ωk,:AIT('<gp'R!%1,Mzy`k<BE
x˥ĄhVicsqUN\nsn2)$DQB'AQcD"&NLX9V0ZZkJ)E&Z A"{pM;Zn
ApTp:|ړĝn;yP{-p^5e!~8
"ݿCpOԤzNV&2Mӗq0Mex9#/✉OBqr$CIOS@Lf+ C3vcOv}:l^=_Z^;:}݀_n§k/`y}Mw~	K;>['YjNfΧ-^)IPK 8M  0	  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$16.classToD~M3c,t22>ۮ8gvH*ƽeA-lo |(٩Te4.> lȘü,l@!=M_(/F\D^ڷ><1wɰ%WGu	RjR3ltng{
]2IPw	<֞Pvfg<'8yޢ?Fg6Ȇ`=1D;x]rY=C]=a\ìQ?Fxg.`2dn+hC^%΢)>zKhހ&`A{+4Ndn߫t>*	D=|z	^BWE*(J:eNWz0u<vt[kȺ]2@Vu{o?-#'q*k{%rc 5M*Ϻ26MN>[CP:
ԙ6	vEsMGwB2}
NCJ;p]n6BNI{IQL/tB>{mHx`_^YHnokGAty=}E++<3_*Y}DPD`qƣ_<9]"#5M%a&Βx悦^HI³`yEKP\ՒHůb'eB
_AE؝v61źUk(xo_cʝf\<GczoVFk^a`aatcsrsxT9
aY<cITPKH75    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$17.classTkoD=lkh%
eg6~&iO%I+U(3.vBWYQBm_߹s_' 2f0+`iWLO8ʋ!W<a+['Qgn:< ;au۔m3wtu]L2HP|	ړy>
qۑw@yRJ):aէE6H[qTTAϳ:l=vm570HFii	k6ޘxȸO$Tħ'J FAIEzL xU{,c	K&ÒwYKM'hgԣtӠA dAjaaLgx}I1<S!\#^nKUIRyXǗT`uZ!IP
S%AC5ttAwCw-fhmRn8gkBQ0$FW` [Lz:H
!P=A%<T/jj$7﨑ҫ-]^)aO_Dqf2,eELJyv	jP,xTǻd&d2[W$i/#^Fy^Y,<SY1E(RvM<Y92.j,!pи*ƵrFxs
-Zo֚s3|6ov;ǄX5Z#[yFw
gkk)׫gƿQDol%DNPKg87    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$18.classUkoD=]dKZeKy`NkT)C:v+N(CYQBFPd#;w9Ͽ~}	sPQG`}Xԗ<9MjIS~EᓤH*+ʝ0+[_m+")
4wuj&u؈c7-G\	.e|	gY>G8J)IӬ,ۚ({?&':H*yo3:JjUˊM<2:fTs]3=j;nu
h}ϦT7<=61isn7e)i'8{<@n߃b!cڱ~$a	q>'x6pq_O9wQ`vmώlvƎEsk:
LAБUF{@tY;0C"1M4	Z*C%XUmL6\e.
أq7\M-BR4l5<OsЎ7Ph!_
"QE8A9A:'?^ bRX)$lbK}x@|QP8rS@pJjXHp43\ds@PX`i%Uvv&ij&(OÒѴULۻy )K^Yq2Sܸ8ͳΊ:"Ϭ6P÷gLGV~c{AkMaKnEnk:
-ݺ}֪-%˿k
an=W{+oG0lm}-6Xf9<;;֛lfQb\޿PKY&Q    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$19.classUmoT~nęgX
Șv~6iR؇s,(u$-3(qRBhW>7<9 ``9`X=8K~NR\dƑwBIGipp~/AM;m;X^+F$[Xaiʃe18"MN<`$I#2Êc|K8IO˼6Q\~o7+^o6Pe{jnA~ّؑ8j>C1CwUMus;c2x'n
hSkNgNqC[|9bx!c:zc	U|}Bܥ1=v*p_TGEni.	
/s=034-ӶS1pU5ױB=VJD4K$BI0i7c_sPVgdGq/@qKk L3HzcȚi$T[6uئk3pB4	=U C	 "V? $ҥ)xlb}x|QR8rS@TQ]^rUÜYb{OĒ<Z92$ij&Õ0KÂhOCn?LJ7yAZE򬜂6P÷P>.uV~c{iZ6+i+]o4aҭkzSa׳;=_muFjo-ZwoVOO~> <="QG9OZPKģP    PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$2.classU]sF=8(iI)vշP@MtL'UƌIIj_Guzeg&}vu9^0/bjpasGGYk0"S䷎?y:-Ӽ
ӜA6(0,un嫮ji2
Tn{"D\ I2fHIѷ8-8IҢhr[Wq,/?)AjO^Kw2VW(&SQ)(F.w]72
W:da(A)bXܩc,43d؞Xc
\0m57"	_&xx`Xi=Hb@3''47"VV
Cޚ}>(-;g$)IQw^Dڹ&u%pZ*ceږa*blȽ@ƺ
	l2Q9iHejY()s.@B#	+ݦPdlugus5 mGP1u'ڦfd6噥[$_UqbIqV<YUa4J9ˇ@C	2|Rsn>2W_BPTA>z'(ETe̃/Yk0|i\׺2]!ð1K!a$/Y2DnZw,a\U\`0)PԩЃa̪ߧ;N_?BL!q׸Ln*{h֖qmϻKtR[Y1nv1~8~34i|;Fv;
}s=O;wO8A8=ĉH.{H7 PK9qoK    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$20.classTmOP~:J1!0ҍvVH׵3~0u+cfI[P@"?eݖ!3{9y˯?~(Ba@AC0\c
kϲF׆c/Nt"mm!(L}4
Njcyf3s JՇ	UO!9HbMRt1L2sx)~8
lG143t	X0]7I5S|ߝai[-{Ԟ,%u<wOPİ_Cu~",SI,JxR>D[REBpHAҵ\^Rr(bV5ՊZQE,%QZr^`5Ed4V|ގ@԰l{m˫0Xi,r$	rO+Y9*pFó	>p%sUS!nR 
4<s +]3CnXB0Y0މ$v,tԎ~/""@tҦu7IW⟤/AB`yp]1nOFd3ي1k!f=FXg0oW9_%HID/b@6홮Kn&~
L6stV/Q?
` F/ӓmRgPK|+    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$21.classUmoE~6q|iKMZťv^$
+IIRJqFY{𥱨G!HPxfggyf	ā9IX@acYK "SWy|i^iPgra=j؞Źn܈4CͰj"D\ Ix3t]4c4?K1N(ڊЍXYO~Z՝lK2VUR3Ws|Q#[w)hF@ף)t_UEo1'6>pGB1ܜ
pN'/ZY][QfBvX0٣1U}*>>C:WJ\i"fx],
-iJs(Zh"#+akrZr%C"m!羚ZV|IJH/kRu%ؙ:Ñb(8c9:wl;eg;XebfxFyÝT0CydT|\ 3%X/*ibJpƎ"bI+W5I|܆tQ=WWW^1|'0T2<Kfx^)$O2xdu4LOÍ0KÂ`:H˗c^?,B̞7yj_KYzؠ^|>$]#-΢`՚67*Uo.UJFxgwݪZj+]ޅoGDA=~F0߀?[XMO؉H7$MY&)ȍI/PK`g    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$22.classUmoT~nƙgXAcXڴ{h7Icq,(u$-1B\'
H99od,`QBE8:N_(/)S8wNeQR$Y3&AukmꁌH\BStGQZݴH+I4<N"h:ԭC5ʩkRP˳}|6<F
C˶t85:%4|($VSá$9q-Jb{
g}y
~ouzQ:t_Ӗ0	. #M*yMC{Wl(ZRW
2%a{2"Eហ6nxa`ɹ<)3C0t4Rmܽ$Gsu'yC&d-.n̢'u	
JЙPZI1
sDh!
<6]3ØitM
lMͤgMb.
ci\YI@qN/	~fU7h]	9'
e}M']KWK:Fe2Lxe?ϓ9/[= 8K"9>ݝgFݬꙝ. \дGw4a[BnGR=q,4)-k OT@={WvVa]̊<`kRI+ޡ+ͥf)5k9g5}qw[7;/7ks
wv&N+VCX'cg:@PK#9BH    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$23.classU]oD=l[אd)!Ғk$-fK"U(flmॉ+?
1DC7d#g<st=^ pautLa`}wYNRH@o<9J4/4'e1dkye/EK@PF%cc,fJc"jp]{x5ڇ"S$-Ib4MOIbk</^\>:JWF붳2fCOe,#'y!p3)6uSfuWΤ턌q2E:Ǆ;:1QOq`KNThIZGig?xwy"ZQ#[;yH<iPp^	y>s=R2$w#P!mSCXֱUfral	ZVGIea_a0A	Ve4i9\*Zc.IӈҔW*sd,I\YM
yvH+0mF-Υ-@!
cddFs䅒qA#ӭtux`ZߏAv2er@p̾a[u<_,^yfuuE-UY38L: #*G<NThyƕ"c<M"efGit7	fD
EnZ(,y?)NցEaTS"Y)KS߆jxz񙣁ln<jpc9\en3|1/O F*Kgbg
vך___!ߨT;PA
?PKi =y    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$24.classUoD~M,3
c,t@K9n}ЌCT1&>͂RG2+FLB+Te4}y_ ppP5t,``kgIn؈/=;Oo4:88%X'|yTF[mfҒ>asy4-)ByRӥ^PA75:1dqx*šXqFP8ROydg<~iNLQNǽ8)c
/<L7Cnuf0onжeqt`g,!B[JL\;:jִhp?9!5%
w	o@5bQmV~?!LͣOugW԰vcHU^)㾒(<.[aXn-vHC4:ֱAp
gy`Iw{K8.z9iz/4:(Ƭ6A㣢1S	)
!LI-<|WL3
Lڔ	ٖp
ھ0=Jҡ'|ڎJiP6@ V}N$WBw*:K낚$7;R.oOn>L+h!,*G<3_*y<"(	HX7<LkyrBFpøC$`)Xi$q*Qu^)ύ[׼UiE_6P`奇Um%n+Ŷpk>[U+jh_/s)w%߯G|66kmnm¶_m\@L>㱓ZQ,}PI?PK1t x    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$25.classTN@=R""tu;^,^zU	Q?R5K/O.	?\eLtz;| xCN 	JQ('!-5~^q0jm1r3lw	00́0֞zٵ(LR?Lܖd`jwXJ 8Qc1A0wiKU/C3ղZhgQQ=WLxLiy\$+0zO]{mcz$vq凍4n<@g8\9E즂'lk/ŕ[!'iFWO>9@ЫY%ji{d{l%"Q]ȖYU+jzT6<Y<*ULY*m8zQYcqmJ
KtSUt[uj;ѪZjdS*gY,@OĔ31z[>f8Tzw
.
`4:!؈MbZCg5HhǯQC,EKv16#2R?
iuV'ʰaea%,LkAm+avO[2,vZ3qfI3`b}ց9fqX{tugrp~i`W<t򃇸z,h%cY[kGg(l.-N>8m)tٜ`;3,PKY  x  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$26.classUnD=l5tm{-lHSJٸEd;TYQMx	x7R~t,bx3sO 6Q1y5
X$=q Փ"3&yri^iN=K@pOI%{L{$4{6m/}JǱ813tRd۞i0&0La< RQǲBОWvqx : Pn7-`=8HYoV
fw58iRfDCY(b9ހ<Dc-ahzݧ?;jEnk!2EHe.ܲ/$Mپ80,,Km2;X%?Ӭ;2-%vVӊnIpuϸul(tY2^ZLNRR~$BR߾08wm[±y|Cx9^]"mWsSl^l{KQ9ns\nL)fE*`>'լH~Reƻǰ
\;3>lk]P(oI}
_W&/W
'rpl
	~%3__}BPJ%n&ezV}2;4M68aZ|dY(7/ˉLuy!Tm^vy% or$)
5>sY9:{wWA9h7ZjXXGrqk5O]l֚S\	<8gHk59n
k7t5~ovFّ!W=\>ۿPK*Ik    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$27.classTR@=@
HEJ
(^m8\a?b	NIf~Xiwff}w C?¨^|w5/N~ы*>\؋=?a#FHaa/`A=/-Kiĉ$1Ad`rwൗ8Ju?*8sFa`"k;YQ3&鴦نUunPGw-*SbxL")Y\";k3.]gJmgyV8ǎ lzAD^˝nW*{<f0FKqe3R9n	A9%XWݔDyX XUb5d=6{XieeenaRJ*b뚦ɖ*Z*KTʊ,H2 IL5TMl(VllZY A>SI|ރBARX<s!E0RlD-)jYr
9,jIPp7{ozQ/&n3"#h{tKNY2975ØiOvma%68Nݢ1fYuf Ͼ؛3  ǿm\jc<w>[pf)3~&0aB6<s@
,Z[_<oP-!dOq63B\0jPKMs	  {  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$28.classURF=4@	ChIZǄ^:Ӥ(;Fm_#O"0L
3Eڝj_' UL`RAI	[!9;t,G0ig/aGyfQL^K0gPƌU,4꿰u=Iagpyԍ҆p]y,,DAE\T"##𛂉ڮn[MPA;T>QpSCe2?4aeY0u}l?yڋ?A+)tŗ;Vբwd᫵Â{*EZb)ܢb
ullKxyn_L%q+caa2jǛyf@fˣ	6y[*$`&6㹎O͖Y3,ycPM3}aRoK	bN <WX67G==9f:0-J6c_\`^
_A0qOzqP`GO:*Ai3GjCN9[2yv$U[O00FGߵjxr$QGi
fWHSpE',(h{qfY#cU[]Z8wr$o@@Ō̓9ewNsJCٞRqm{zsV\LbʍRe2]Q*3|v^/ %rC⋧;[oaɾqW'о XW!\YdtkPK܏'.    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$29.classUmoD~6o^pRRzy{.Mڻ$%i*U~@^]|	oKKQB"C+ǻ?3_' 9X 揃K'-~fEnBPߦ(+a;fC^+wf[OupEn*ғ<J˗&u2VG=~Al=\ݟԮ}]|4DnD206eL|qmʈEn`9Iy-aĤE

`5"ODHyxO@O;(V(k1~w'尗woK!C;Bjy.X(613>&Xy
GW$;͊[?ԘV"`V0ڿ
*5|H}8m
Ne`K{,q	8.tha[^@%pafìZVvJ~ucCæ/aOF+,$urTr":ԕ27H$!Vh;2}i"ĒHEq@S:RI@lב9c\/q8	eq-OJ2ۥ"I8
ʜeK",&lۀlVdOo8^^5L:Blih}ۗSx8jgQЕL^H;`,&yL|)\WݪWQ);)&MpMP4d<φq?-;ΪF~]]!՘US]" HۢY;}0t\Q2Z$۵umnxs{gи^	m	V7h>[y\sԚS,MK|}nڂϔ۸sX;h3Go=x@͝SD3瞚
T?TPK|64  3  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$3.classU]sF=8QJmS0ENe}%4H	a&SI(1c$FRRWB<0te{&8;+9^/ L수ü!X<;HwI\E)o]7y,/>	r`^nQ'XD'Hy(C˿OCVqhJ"w_Ň2Ӟio5z/NKcFOϋ^cK5Mݨcw\נ:
C3:.
Չ٦g滪xf\E ƃ F#7QHG47"C<=Wu̓VӲ缝Rmurв-ΕmF트Y@K
V	n~&Wql>4}=E E
pV6
zAS%_hE;㺾Tw,զSw,u(5za`{QqcJ`sW<iUM"%׭Kpgn"b"a:-1Q&P:UTO_<WA2E8J		_#Q.6Xdc]!X0n\dVӔtEC7XCe|^jgȡ&7Q简8m\Nwy&qe}3k#|?I-lObi~hsw#;>Dg3'G9<Ywqgd PK<W(    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$30.classU]oD=l14	!t)nelZjώ!(M-l-N¿ J An<tlHs;_ ,|b

*f0KL^4ҍb<[?{o=$.,"N?ya^aA%x֊-yE9A`u,nRĽ8kx7,jX28#,HsX!8v7n
]#`S
nZӱDpof`qi
KkX{
nj}xUs)cG4;jy^lGTQk=.~kFk/wD˸&;6K9>PÝ+zI0]$|{+hh&r\/.S)[}$L
m
M~ht*\Gəsn腶9M,_6	eR
2)a{ԢMa2ޑϐ!M
d
f%<K'/}&,<Kg,6d*̵2H-
UXi\h+0MXsTYluNB{
+NְSB.G"T0<(Og?Mt|4eq$⨈/i-fWȔelIw2LYzD&IAeTM
ʴz C$GRl>:y9Kםoe_[ەw.
nX{rfRΞ|%Z ~֔X9&{q>dۛ?u
!|
ٗʚpyfPK/g%XY    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$31.classUmo57\z]hrmul)RB\C;nO_&? )z%Wax<g_' Du
.T*L?~ieâٰG*NlE>n{ f)!j.=,\B-+ X);M+vyzu4v)m1DG8MKMdQZFHå0%S:Xei-6J%
4	DRGEXHCX#W9B=w`As|y+|]={88ʇjYcS0ݬNZ|J| )#:&2RQn&)!MT,oGEGjЀ%'>DCs{{</-I3p>9');y{,|SʱR&<C9(a	VS&<TPJm
wh[?,:0p+ mV8<W`
k|!IIv^>}͉@KcIXqƕ0
,sbkG$>+%E	qD"NX*J	-1IIGFqZƌ4!+&&!*N_ǎᾌ
w'07SɬĢ$CtNZ	2:;b
	b
Wa#MEN`Lo]V䕒
gYj Uj<I&&,=FPޱ ϊ<2;>V?iz=_g۽^>l8,{oSmS~'$oޯ,}P³c__<usۻ:2 yKh<~cQiL7f	|ۙ=_#ZůN`qg,?X/A<Y][}VA^[##sgK>4PK2    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$32.classUr4>ʟ7IHCHK ?VdKʦK!aLlmwxh2tlfr,˲d99; c00`WtN_vfIJEZ'Y{ݣ@0skPi\fC7|Mu/i^L<3_ X.=K[qg//NV\xn90#X	svOꍇkÑj'JD
IBjD"V*THq,2ARI1F@'skba\XAAߒǖ#}Ze77m~`1p擲8;0	6{7J⟸UCMc϶}u"VkIbؿV[\XkQ	_>Z'+/B1~hD OO)I41,RG6!8Y}&`DGQe ǁ	#Y6
TLTD%0QR8,֑_4D}L6WP(6TH86Z&(`ICbq2fK#ͪ2J)pG&*$*QB1X[,	1ӄQ#Zrt
>,Yzyr"XQ\MF
R堸;הb`R<mvz00
VkVu:2.̮ܚ̮%4Bpno(+_x{y[e[c25n5OӜQ~藁AWvܝkL>κįlO[p{Yմ
}wD}>Uwsx|@_nE_	=ڜ߼K`ooÃ1/>oWlk@}PKМ    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$33.classUrE&]UBtc/ӗ!* VQEb-UķQ,IR=ӽw  `3-.GϽb\n1m7ŨxZVh|k*G	]T,?H	88c>-']1zIY-=Nݹ9izObF
1Y.|`TY,
'MbtV#u^Z
,Fc!slPK%ce&zQ3c#!AgV՟)<lB>S	t&c5.{EY9N -zr<^"$9H_`{8q)AJlȵD[f\>wRI}ȹTe\[bY,|0g(RdOShùcer}<|ڂki
|lkx҄/D訸!sc3--'Qr)I"|рK-ro߭vr[Z[eݭѫ830l
ր-	K'..`HI$Y$yf,JG|F<w^)AZ2hB
GUWyJ-Iגf jFm >g*Р̝1OsLy#Q;WS*+CbY5Zp3:m:f"፶\pL'LGQ-hs&?R-@&7ِ;j*KGtrҀ\k	\xצrooubTu-Y<^SkUQ
l{OGA7xd$0PMި,0kdPB0NA?1)'-`P\kןFCZ+.X<6GV^B={R8͓SWg5ϧr&݃ƕمĕu8֣W~x3\n{ɯ#|u^^\X܃͕rgm
õk/@c)d7.HO6nq.PK/6  R  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$4.classU]sD=8
ں4@ .JJ%H0әL?f\#)+xi<tb=:<3]__{ιWǟ LX%\bSvƿQQ9*RU~O]Lb'%9åtP>dXl3"$|ZX$#8?I
1(0z?G'<Ҿi=zdoMˤu\KUu=/^hcv9Wh9(oyVt͠eҧ㊢X]}	Qq+>9`Xp
+$!K;56#?FίlgaE	M=#L['/4FQr-nٖcjj*-sƺ
	l2q9Ig$BI2HGIu47g	'B"@A'9+P'l͕)Y]Ҡcr\GVZhdVq@'M۪bQ
0*nl	3nsp3[d$n3ܛ|'Tg5 [sJK*W*賗Q\f-U|<̑^(8O2umr:CacRfH_i<
i/)_eG$4MrEL7X#
/"M aΪS'Ч??BL!p׸J^:nՖn-곍JmevFc0>?m|3B:
ck=u6;q
>zc'"{4tJ$2e4 PK,~sF    PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$5.classVRF2M%-\\KZْLzd9rIqJchӮd١Ȍ,hVi~LPdϐjϞ=o9
<"0, F	seXǗsό#ö=B/謴[u/ g淓Hd*7;,1. {
\ն6޺uzIDY\\5|Or^s,a))S\mYm2?;&eӘQ
A	C:63gg-IN7+%PLdq,T,t3_om?|'7ta:,9c8Nc(:)ɆҐ%y7FK
R2Zk$;LnuIe^ν
U<=Z,·^rAi8F
]U5I
Y]qF^'Kܔ)+h0L0=@^]R4Z=-6*"|Jqfwm
+&HAP\I;<-`y%\e_D_G"\Ͳ݉]
%'uFuYl_B"ʰTRȗksydNKJ>RSX6J%%U
[+P*j%_.e6MVŠy*땲e^RV$jێP]Ka'*;Au@=>Yiᲀ~\)mًAďtI}B-9]Eܰn?Nquݫ9-JX:wd
<z}&zdE`y_}kZ':AjjN'zm*1=sü?©I>3ސc>LG[{Sq7ҟrF1!r8rcLҷ&&_Lm5̅Y%RoWYiDxхڅV=FǏ$;3zo_}}rO|E^Z_Jcl֖K?-v;:=9E^.8qPK<(%  	  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$6.classU[sD6qjW54Kh]*'.IIVIqRdh$kƕ:ʿCg(<%3ٳ;ǟ ($,`%\"ȋS~IY}K^G t
mE{B@/g:Jp	Y{x_}rSqŹ8%)/ˎikJ8QGI6PW0luO^&5vxµc-<'bF t|7b׋]=Bi[M΋[̍=dC
:n&nX7f9L<NFGse;j;7Qɋ$m|V9A6>x!6!J"pK&#`ڞَ:֩Pb3vMӢAi+c
ϙ?#gi.x^;5|iM"9y		U]pb^^wlրWAG+fͲ|QLp-۶llnxɂaRjYNH1O740n:hFa9ʨz:V߯|U9	[2`"NS\ZwRm՗&Pϓ	.ºr"_ytLO8<4kb4n\t=^wle}.į*8ZE/Dيb$	>PvsUﵯ~7n.ʓrcyqOXmjkS[:+%ƻ_ޠkcXo>m`SoON/Ĉ$DkqE<PKJi?  	  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$7.classU[sVN #.P)r ]Օ)3.OB#1վOtd&>Jgj߷G_ L수ücXˋ<?ȒߒFW8c'UZEӂa66^M9k.BO)7e(Bi Ie[UUK|+8(b
6:ǪWqRJiĥShg\7=L'z뙶fjXndzM\XTNYn".<Õi3 }aQ|pM̨x?)[;z-b	_8Pӝ_ڧo%Sy`$ϊ=Ӥ[5^S_*M]CUU5˱B˶ziq&q2xA5)iRJ0HiITצ1!;	*8qbV^m &+<S:Ϫaj喙9D/n<2sOW#;NsC+Bf:4jUqzOv`]ceJ`bX=ic%fa=#bw|/a?0,qiCVETy!Y*0C{y=O"$Kǫ0Nc2n0\dNZY(.^c8=zӤ?m2YY9cb=M4Z$wZI>#ǸKOVkŅc_[>A)jݝnK}ޓZ-iz9ܟ8I>"Ayg2PK}ׄ:  	  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$8.classVksD=865(4:[rö&%RP'P˩WJhC! >VgR&vegV{w{޽5 rHe0q|;+8}ڝN GUoS?j!fЌ"-l&Ջ+Xƃ$L
An-Ԭ&UCCۮw:R]h^`oe'zjGO
Z{~2)\]L̟l`Jt";Ԏ`:+<f0>uA	Cuo5fs'D*V+F!jIMj&9k($?څLSqtE5C2]5\P(cN]Gn(#)
Y\1:Gg1q)<]n+{"y
bPIr[)e#:l5namՌıD0	j8&IԑCE!gH2*l{*FM"n!㪺^aZ#
ޓ]C摃3<>!H<n@M^R*߂m+κL񽝯(37y;11<ɠI
,7y9}X:W)jwRESNdYҸGP,ժ@
U4(|RIE,ɂYRL,X%4"K8iTUK.˂*,9-]db릡Xb0c3	bEX~ Zp0P0M0wS=ݛ
IڱGcѴC[؍cG*NýLGJc@&з#k7:a`iP$
VvL~dւ+-Ӊ>XHV~bk%dG XOp}0W7>~űcܨc95ŭybDkT2Zޘ?Ih5݅܅V?FM͎3;~ckoŗl,g׎1m(a5$E^.&IPK۸%:F  	  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$9.classUmoV~n`ctK6}uBZ&!U>ׄLF۱}ѐ*Іҽ=>>>ys?Ď9hHX(,-j*qq嵫OqL(~Z0\7̆&ükɠFg".	$|i<
]P%'IZmUUV/al<a6^*FW><OeWM;jhQݞgks\7qonFn>y{FiE\gnHXצ ƣsE{jíw0h
f;z%b	_*O:{
pNy5?/{\&n!ZYFkjN;\S^5Z).d	+XeNj8R,ɩJe+} ^R1\ǧ5|+@jgU{ehjch3լ3<S
8Aꩺꪑe^DzޣGQѢ]sM=h;NV~@k=2ٮp^sgJ`r=i]{!tMܝ{K䈻!=	^RMM<N ;)duf(Cch$FJ,)ҸJOʺr;Eauøp9̒Q^M;i"'ogYZ,3y.ze1O+6tee쏉C?<D\%qߺLN*Oh]oc|KWkŅcX[>A4nǸ_yNa쾅}u??~}'ADZle("3PKm<K  7  PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves.classXy|T=$c
D$3!TH
[AuHH&qf,j7\\\\OjkZmV[֪Z~}7c9{w}<@>=GtAȨV,kT5P,ȉ+r斖Ն+K+1BꪆhX_V>*Am(,뗖rE.Tϼ١(GcEG6nXHXq(	gu&塕P*gn<ZJֲU9goݶezz©hkѺUd!Kڠ,Wl0 }da0՛dyGHu$B׌>Euq0±FClE]%?U)JubQC1JMӉA\T9_gx!Tgqny![h,a!+,Zzparm%!B A#ښDǮkE>L ;7JYEUjCDg(,LƉD;'BX8,aaB$Vj@	dS0CE4=PBlQRS3L4'te8/-Y^V@w2=[-y_>̴0		[Y>)q̎$X+t#ɕ3,V^3-,Y|֬SS?Wsg*Ñxj*uw־ɒ&GZP;BKxji<f5aJJ}Xj
<&!C- /X]هp|DI~DPC1KOc+ -wwhfJǓaewk#]\ea5pkµ\#0J#
h(^]f/<d:?bLZ
ͥ`4@>\ƯpUƃ>\*Ϗu6Y'E>\j],ljgQ*ߏͮmYnbUV.w{v>;Yqb5ɏCvY{*ck=VAW'ujN3zD/O^\Yx+@'/\Z؟%q̓^nʛKO^^ZW~0 ^I;ox<'/\?Zxg<yqڿz6<ǿzyq\Oڼ
$>y_$zIɋK߶
<y1X{Q7yJ\5O=\/E=yq\<yrZԯ+'cO=y)dD/PO^4:Ƣa	^ױ&i5ʢm^tUt+âD/c\?e^-iS5D/k'
\,*jʟNy?bDh@vSpI*ҩ>[9NXn@y[9Nt*rexiuP}g)J>w4=DoM"ķI|"bEC9KDw4"=&UW@x^D-Eǋ"^D77EWwD\&EE㷃OD\˻/DYķ"uWH=EK~"6%b[y1LV^%Dq'Os"<#^h"E"Hă"͹*حR>蓩5D'g?>9΍*VϓO>R>$;@3rC]Mxи@8Z"涉@&<)+jWO,kM('!  H9i`p-ap=5_67
c
~bߺ(/~=
380
f1oTCÕjLɷe=̪+ރ{Vyn8ЅY8	#gmDz32>fBoSr;z{#waՈqد	ԈZJtܲ8rP[nXӦX'0-+/PycJGQS+%4]P"|t?|ܽE[z+mG}nڨ]s>v#*:֮tۖ/a`+ғ{ǽ~7?S(SJ3ju)GOPcG9YCK&1"5]o
5>jFOD-jͰ4AdӚ5SK<ݒ]I?~tڅM13Ƶ62ƍ63ƭ2Ɲ3ƽv2{ƃv3{ƣm<᠙S6=k9/0`s/9xٯluf񆃷eg9xl|#fOd&bSWz0K)!Yo8lM(vh86t(6q(X9,hSC&Tdf'trf6ylN*QtT֟f(pQV)ܨ|E<o|lE\E)<E
jVT	͗)Vp4_F9#^|EQ4+jPxURxC5*E.VxOK])\cͯTt_5NE]5^
R5I&E}4Y-j~-vEw(])݊Q4NPPTCv):4^1l[z
n6v;
66gbuo|?2/] # e0
2kdPK\[M  ?  PK    A             H   META-INF/versions/9/org/bouncycastle/asn1/sec/SECObjectIdentifiers.classw|SUmM2EQ,K 2, (ZEPiڦiI
8pJ+8py&)4s}%wZCD5RT:jY~_4
8}ѰY2XVƕ±`E0qPEV;r3IQS:9
a䎯5!_YÕCNΠLJ'fjG~h,]QEP.GUqP"eNY[UFVuemebV{.1H4#M7z5.,ySxҒd6=01O2]BN:r! L$S'iip,Gr601
O4QHE)V>bQͮSw\w,Ӹ1W
>iB|E2IpcJ]uv]2wv[pO+>iZ[
WFc*^ٹ\Tl<)pvRs\4#Q2z$]Epg94;=SnLsHµ47z]B2U R2˙'J24"q+iaq)Wfu3Ӣi}~+\L]d+iId!{/\LK݈P:-cj1y9ʛ&.	58fZ8N{L[{ūV'>7,zi-eEQU&ࠧ<9gaE>
&h|hV^ќ|N/0SR?	ɗ0mCRwb5;)7LX[H}ô	ܤFZm=;.~y?'L[ogv\i-z
q7LY3!qlu`/>C/L;Z7;$Pv!T(=)bCcCݻQrtڲJmyRa/G*UVvrt:n<t(;o9CLjnz@~UGMFSw0hltQF`ӌ42:hFktF]htF]jtF]gt
F7dt-FftFwڊK4hlQ}tLJu!JRR&55'u%mF鰂:6Q`7} <H`ࡂ}󀖠X(X"xpтG (x8'O< 5`x,g<xEK/^!x7E6whFZDʰai59Oʒ
>|Qeૂ|?~*9K
~QgூKc'VmӅ3Y2PKf@9  "
  PK
      A             4   META-INF/versions/9/org/bouncycastle/asn1/teletrust/PK    A             P   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$1.classUnF=B-%m&5hXJj/w3,[-6C"PUǛHM 1|9sgwϿ x0p`(/n>x9Ȫz,ͬmwf>bsY˲Ȓ̝Q>6`n`y,ᾕcvB=ab·Rn1
[u|k9u[mu[Ɋ@YU]˲V_g.Gpw(zx4r(u
qDpiwçWOe&vm\9D	b7	my;V'
RKp"'DP·(%,apײLm,
=Qǥc4"'$Oa4,	JcYKx/pv8GS!W-aGKdumP֓Aט6V	~h,/Jm_DnG4憜-bIھAdGTgI从6c'35E#/FyZpklm# X>R>,')qut|ݨ\l\Q<uQjp޻M	xY2YgN4`\TM~V\|UUXV=̫6ՓFo;ZhO6nh8K;ij|>`ՑoiXSXyfr7cpM\Վ,)&8,PKX@    PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$10.classUnE&	15
\S8xnKJagwF%m%_u\ZoO J< u".1F3g3o |XaWp`s\ߎF{٤l2bבIdE4/bxnFbWGA*|#"ЉZ&&6
mbc_e<<!72&Da1	<xXx@ζ̇yYL=g~rP/dRJ.;̺l~UQ}4+twTpWjh6:\uv
	| ^$SS:VXi#F*IL%Y7\U+N^F3"eRZNLXdr$P!caKж2΅V^	lw_{n4nUs<:Q
hM
A~^Nk9.c'*#kYMYlj
RE2jCPch8BPa0Xk
9nX\Pm@Tb5ډaL5U*N%Fa2cLG:I)ODf{  x4 Bx0*]x2[s? `<N_LsKs@'
Wpy<0sIH|{Kx=dWY>38ۍ[̨7OL;ydOи;E2&*q/gXu,>*q+'/KmTլwK;/6Wۮ,c|sħ6F ϱisf9ND
<&6ʊ5EiPKD~  z  PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$11.classU[o[EMB:kKunxRZv슢E"hyA]WDTG~bD.I8 
58`mX:
ݟ|4 Mky?)}>%svm:|3$hj2GɨArE"hT	.c$)cNU>2뤍ҩi(`.
h|
Mx^C{\*FUg+Ͷl^}A#vhc`}w*w#ѓzqz.¥:\Fpy&Wjhnɶ	~b|Z+/VN#%FEYE$#Va`ux+YQ3MdD`ϼXc6ZTiE!R!ਭp+0s2J}:]3NNdĜ+O*ɳgJ
4;FdaFd{B >==כ8,7N;-
>&a	/Hz&K3
qG,\hFj',%\Y
X6Ne.#8Dc0LfKkC@ʸ)Aq4Z.#`TR&\-y cc4Pr#фH*Yb:&|g hZ9T)So6hiNAy+.	UΏ>ʻհl [tg2)[F0;"ݲȫZV'A2øBtQiw4Eh4~fSjlj!RX| Ɇ9Kǿ9'ڭ!hfZS:w µ5|X73X\m->^93&
d!tPKM    PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$12.classU[oE>umM-הmIihHD-/,
rj	ॉ(Ĭ)$EJs3g9w  ߀\ހsFEhoAC9~zuVdO2/_;yܭnyl]:5)$QQw"Hϱ@8
;θ0		D/Q
6Bad	Q*3o@kl62e7.[qg[;vYKc;Ȇ7e;wf哮y?/p.ՠՄ2ӄ^1{/Tw\vbRxV+VF!NT#	.ђ)&hIdcKoyR^-[d$iiV8E3Z0e&MNY`#Dr'bɴz'qy40I|$|T1cE{z_vkMT<;U7lB:ɀ%By9Y"Xj: 3OԙT'Xu&<HM<!2)		HJLʄ3xXz,s
vN4!LGe%
!IAhtL+ДPE7犦TU 53 D+i⿫hwXt'n6 ViFA+֮&|^=zh [U|৳DJ|g:h':2+̏ݺx:iLu7#Lydyw8;!	`1&Tll!RQ| 跉܁oɁvv7pa,<lU~VVCXX×5A|zx
m,?!sX?::f{[+,DPL PK8$    PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$13.classV[oTU^TfF

^ALoξ_,1L$DiJ0Cfo$}F?ʸδ	[5d^{u? ̷8N`m4~7&AM~r7=xhY	=ܞ^#pt	M?{K]6d>] (niNZ7TJd2z5sYsȨ4,eԪ𮠬qrjׂl@
kMA5L87Ѷ͸3~\Mz~5,RJ	,w6=uVx{Gz؛>iU[p4`
Ygb"xT~V9T],p$g8h/,͚[J'ˣ[5UZY-	o
`6h*unT>r!cTNƐM"4
)Y;E<夒r%G
Ƙ£	.|ɘQo;˒""k㬤rQ--ipтs^Qwˢ[Sg6| 8.>G
҆,0% ܪ%.n
!sTZs5xNN#8;aA%AdAyE&ͥ'M&-\g*&jI#*k٤8S#b97)e$)!Q;}(EyIyzʥW&0ﱊDBB!x)KE*DX焘oU1LRx6|u!#pC6h0.ngok ׆Oj'kѸ)#oR۰t|m!'7:z+!`78haQM6	8zIP͕Gpr6|ȁ5Ԕ@~1g-9;Yh.]xmVV»p}	ߗ%o.,g@ﮮ>ͮ<sfZGlH9AMp-}PKlb^    PK    A             Q   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$14.classŖ[EO-+3

^AV9u*ѺF&"6˚a6Qӳc'uSΩ_~ sp]x	XOߌwFVr:bm+|XdxYM=ڮ8[ӆ6FoO6HE2i6Z/(N
iZ+*%
,JffFegQFVnq=v'[
yEu5δmlݾmjJStH)%|\he=m/
=,}u}TW[dL*%pEZNu>_ 'g˪A?QcgEzJZ]
1&͍a9̣Aōs*pdц7-hB-pCR/tb$122ꃗ0cEOA$>츠ZITym]bRΑR/*2TqU DԻ&_[D.sso0Ct}WЃ%?E&	z%;mX!dJ-i
$z:;LP:ƄDBQbPQLNZ\Q"j+2Ndr:S
w\[1JHUYL`,F2	ʬ/2Pc
T"$TZd p)s}Ĥְi+)luF5^DiƐqZ>sR_gt\9
Sj[ٝr*vFrP'p		|w8'Kw̇&rr0ʺ7^X9q4StӍ~0$н>U0,梚ˏ"41,xk:5iFy`>i	.©݅ױpy.\i_§%:`}l,?˻zлkOc1+Oa}93|,8rZ0{ PK$    PK    A             P   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$2.classUmoF~6I1BB	Z|_־%@km*"r\uv+DEGU]_"@b}̌? b
3m`N8A|;e5fZfx,~IdQdAp0VffM#,vOGqnE.6w)=5ho@q
__HVvYjV
[bؑ%,۔R%ct'5Gi60a6X=Ogf8*9Ū38@K9'8?IçX?}3cSɋ&.ЉzÙ<&M\^Z4qEIc^EA!nGA4dQ
fAaLvs>l_-ng%q8*>oS"m46L+uCrB:nŒ{n!eǒv^EoB_➕P&aϵ]}b1
`ex=IIJEEpsj 'X<Ψ}hr82Epk5Ӵ_;u%x9
S1{$rd_ȴn"C<)r&øJp:T4YE2YQZuI^`Q6 VgLꓥ]s.FkNWjۺT_a;{X|sGVjN֖ޢm-J-l{˻Xݿ:p@SPNN*?PKp0*    PK    A             P   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$3.classUmoD~6	ch{4҃6){mE"h^롫 
4(rR>p!kˌg3̎H,a֤O&AVΪ?wAy^ed|Q}`&S',rN$a2rOuPP)fjA<j{Oi@GyE`dA^U]J)CvnNYϳ:嶁BěNp}A(ܴ>RoS|`'jj7}ƍsa41SO	}^h-yz2b	MXx(giKUL	4qBO6ZbFy
y<TT@F%!(u\XME|HPZ{ME2n5yMyP;&,.'hzJt&*
^<+W44tRW	sX2ɀRQFGn*|J&0uy<J6m~Nws)LFEY{-&$<:a9m97s2G`jlPOJwjEX SG}59Ё<YXWO3d6U|	$`<tv_yYU5}q)}u]KhƲσ>];i8 NVziq+&;7]lW	YEKtw}꿄yS%DS^YIqYG0PK47    PK    A             P   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$4.classU[oF&IqlI K&o
 %PQTVl'վHM<iJkng7; .9̷#!X+ʡ
K3r|?Y˲WwdIp(wvm;M'9̣i(c{ -FE4,r,r-Rʗ[Ɋ@YU]˲V_g.Gpw(zx4r(u
qOq4%^6ޕ\6`DML'vӗm\:&
R.%~_|)Ɨ$~4LD̜Q4eTP?5,p/vÈ:q^&q*ϧho[@/2P֓Aטm<<4
Sqʜ4)g̋R/e4B_Pz)NZ4]1&n$[6t|?dݜ/
(m3V
X>iNBKƉWAbY6R[
oF	xY2QXwNct	Ή|0.*MY?/vy.K>ΪsK,+ϡi:;juAͤ1QX]^3'N g7|ǝնsaYX*Xyfr÷o@UV~xtĀFzGITRUL?PKv
I0    PK    A             P   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$5.classUmoD~6	sh5mz޵׻Z-JZ$O^]}	KQB/ks άg3 `,`q9p_٤n6)<g~&+gy{~^\3,]no&LBq?Rȓ J&'b"IL#QJ8XnxI<Tv-|Bd~>t(ke*`wr,ppA^n9+
[xW	"hfݯ_awnXwI7qpyI(ØA$*
Bi{V[(0Hi#RȒqƓ,JdLϢ@(a*yXmH
uj|R4xEqy<HIq)Oi`1Aٝ
uWWʍnY:iw<mq	>mv]N@Ք#toODQlthmSx"&ZH
B_{F41cI (i)󵈥6:4y([OECsj<ρ&2%9`<NXN[Ե+<jr_Kwy#Sǽ=%=޷,<Ӱ.pgϪ0n\2E44>A~QeI?Xz,iܵd䷩DTnsK;/e}o,czj+D6a_" k/hcKG/G:Q]@<5Uٶ'+6	.oPK
;.Y    PK    A             P   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$6.classUmoF~6Iq\	r-w[CWJRObCNUu}=+xf<_' ,d#ؘCd:ȪzYU01JY=뼬Q1,Z6sy;>w}?.uT%Q(_4{q2``Ļxy]WM> l0ȫK)%Xe=ΊC]f<hxa^nK-tLg	~	5Xj
y?v*vՋ6.&0HhhQ 0R^PPEkmn #3ʅT9KOE*Y**c
7I|X4Ci`6Ai͆>6rqo[Y[g/e7MXoS]=鉠k65qRs:RniTx;Hx	cAES'JBJ݀:ɌB:r5B%&94S,Lh0q)N9uD&ַܜp[LVrE]^{]D&jL.7<4@q	~9/S%X=̳:?	Y5Mi1O*~:#0E^qVUM\P/XS Kz'
gw=U:#2paVv>εfH/C|rN,|Kdk%_>o_3\?CBώJL?PK8Ǩ4    PK    A             P   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$7.classU]oE=ښZ>Sj8xwvfg;3jE"hyZz_/MD%~ ?
1D	H43ws?w kXh
\ XwQ~6)y/ޏ4^e^L;yAphC0lQ'HHUHCE~"}a ֡I*Id㛘Jb%
l|ޤmޖm=rb?xYO&-	VgYobw4XM=;x0*A^{+54xW	DPφ{gOT;7t[=ue_qlhdBe#Fԧ1AP:sVD_
n5աυ16<Y k*9Rud	S0Oe8+*
<fAD%V@Hi 6־P%|T)c=kigRЍ>l{,>.S|VíDE-APtDjuX41Jj%w|PH:YPGSLJCMÄ12&tL\iM1s*HTƃ&
gN/)gZPHi59z'
ߧwV$sJMsf'!X
峜:q1Miڧ/*ugY|ܮ%A7Vu	x]d_Y_YJ
:%3Gf^>4FydR9.P}ww\kI5r tsPh7kk,=iUV˿[dcZ!^]u%^=9ڕYrn0PKick    PK    A             P   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$8.classU[oD&	ݭvi҅==z(JZ$'qxKQB7, ,9Ι7 >,6+@9.モc?T&uP_fe4rxnau`kIp7RDGԘH)Hy*	y4
k_HLT B_F
ZxU(ʃIٮ޷a>!p~?L:u3wӬz^Q僼rpWh:\%D8F׻_DSoSxjj'}ĵacpJI汐y&4A[]hEJK%0H(8O<HTqc,٨?MQL{
ޫ>Aٝ
W3Fh̓}^<,/q!>jV]ah'$hj"to?y"&41Sh(׌GPQQba,1ӁdrOKqȸ*efPH!
21\%<&6a}XiSpe5wV&}f%5gur![V3$iI}iiP-|R\C7~q|?sO,}r̳*?uYL
%SG
N^=E^ƣl2B6PwwIvT`	wz,М^Ǹ<liu71V>pѩMؗˎ7stv6kظÍ͍`G: =U>mwVlP\L?PK=#O    PK    A             P   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$9.classUnE>umM-הj3CJM%m%_u\ZoO J< u".1H43~swo ߀9B^6FE`ACQw>̊Y^`//\?/ owvPG1Ṥ%`'J%xU!&QДQVzV&BùҀ,֠ل
|:2eq0.;qg;#={Pc1ad~7;'gYkeϋ\+5h5MCj W@[nXz;nLB8v>𠩉1J3oitPC1z*NDe3lDtI
J1kq<q,0cTJSaAx#Kh
V"Ti`RZ:D;{UP4.Ȗ::qTNBpuj-#ZL+T㩍"4i|P)CE{;/nMnT	ut|VAEh~^NVV3|k~Ɯ3i09eJk^%Ƥ#8Jzx$4qaǴ8!kUj8֌rRx,9;B$#B4MmZNp$Gh§=?xO.ja 5ck ^ф$HA1)گ,5t> ЎdrT4 *>G,&#5]v/+OudukӔ8ݍ.ao00m0/ =r̗9
܉+qDeЯp:ڭ1\jå헰v\Wݻ[[_8aS/ =E؀g
V[ǰ~%G/Ʀ֎`90FmlhYAup1`PK҂  y  PK    A             N   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves.classX	|gd6Ä(Զj7	$$
ELj8bRRU'df&NAVJY
XZ}}ߵ/
$۟{3/y*20CL
XnE;V1;bYaGbVZ7=F(7bAwE:=fZaZ֣ؔ]~#MzfŎڢd#7]5;jiȆ*0{Է)n
~Sx>4
9-tDc@qaG.@]ѴN#J yWPamiVͰJ`Faf_9yWcRY0VȈnZ`eR%N\\^/t
h3,Ұ/u&o^vGvܨ`)^I
6SV7\6,XTMA6_C-
z#\˰\A*6{J liD7N^9-
j5ĭsRAG\=ѫ'Eɏ8jX)g1~R!.Bjz
"zD;qI.5-=!ôa)2Ш6ث-žNr3BRN6Un
HM0I= pe	y6%
Z4ve-í4T$U?Ms
4܁-T(3&/耛(54:0}-zH2XPX4;#aˬ!( lEKߣo7E\]-S&-)Wэ|nS^6{-+,JfU(N^8}ñJ|+4^S%W\^U%sNR~>
&WT,_.x5Jߐ.
=7i82#s*zj8Α5]'<k89|YEG]S4NFߝ6:u^
g&WѩIzjp9N]k^YvŴѩM/xp).=+|'n:K;<<
W!#l) O/C?/g,~=,|N%>H8Wl"ೄ#,|{,|{,{,[3,+_q0o.Hxifhvr[1%4zpzQ/%!tE#T/쒜{)Qe-[5
z0hbKƄBYzzB1A5BfLUd	Ett=l[
72Ӄ>6~A7Cj&כ6>a@oϙ"G"-a۠M.H=3b7PA.JOȣ2>=􀤇$="qIOJzZ3:KzɥWҥIW4+@(%A4<rz1fby	R\2q!<KJIlgKw93~]NE[fX%VVBn&!T9XUR1kJJbƟgiXF4hYm*yB17_
O#Gր+Y7n&kJn¦dfnz>̢(͏LRiT-:O+lvҿK9
^:iPM(܅<_A 2Bc9#6,'/Wy>gtǪk\'jZyhҗ+:O{yDI`q8v7ww$qo{]'p7@G{K8Ax(SĽ3$=q<Yǹ}0.jp7rkFU;a|)v`3Ys/8{8ٯ9o9x8c~<</9f7;xXx^B%i7r:t{%/AIKzTtPҳ%1K\,/PKn 8  -  PK    A             T   META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTObjectIdentifiers.classySYOB-(:.ICbX\ wQ(M&M;qL*j>ݛ'PZ?>} I<
A66/
*
Μ0G;<2{u5F4Mh.p-}֔,?˄g;[рuXC	b!
I4TAAC$fv{|	
;~}NK5ԘQ&,
9h`vNþM;iUit&ƌT\G#/jNimul`;AF9LSډAdoىLwVX]ѢA	l7<%Cs)üzL 05kpۄ<H?s뻸un]ⵎMi]G`/9,zZ>k
_Y=AC]Eu|#Ѳydڽ`!O89
S|yxL^
dÕ^Y~H:}HRi2rIFR#Tő]
*#U*O`:BU2NAE$aƩJa̔ALgK>Tg?XIE&iTe@΄F^iX:e?[yuٞjZZ5͏98ॼ%HwFY6+ݪtҸҤ{(=Jf+QzA4tBiJ(}tUn^ԷGj@SA|Ă/>J5k	3Aqs	#1`	ʦ%#	˯@/+<V1'˯MX^m)3/2Zc	]+>$aHx&{>e|/+PK5h  b  PK
      A             /   META-INF/versions/9/org/bouncycastle/asn1/x509/PK    A             H   META-INF/versions/9/org/bouncycastle/asn1/x509/AlgorithmIdentifier.classVmSU~nl[}JCl--6jcC&3n݅)3g,aʌ/_fL^c9gXaЧ -ܴn;!1瓩z[%0Tnt\޸Ze;y"kD]|<rF
2!&Lej,LWJ6r,JgDˢ匌5pؒɰ2Ma\ǦBcWpVڟcv6BbDyA`G1v!O$/b5np0\e,YeivS*.-#e\j*1QFʮlWzyI\2G0gTg8W["m%>Dh'ΥPcǒsmݬ4RYh=0"^{ɧH[~=dy,0h+pl!YvqS
r%X7n T}\yu.T{ʣ
$e'^IǞ&VL奭U^Kvd7Җ' ̟ʢG}T*Tib*
JOLWMnk[^]}G1l,u\V*;!|0Qǯ,2\y| [1tts~z]ed@>7ˆp][lmNݚhhס-.0r+W3)G8
М)T3Lvҋc xohBJKD`X&A~$dȇ\CICH="uDcGAGOx]K,sL,hc-Ig$0hɵGb(/6P;'
Đ=r%|/Q!
Bd>GhZkd_<:^C8?b7	gҐ+]N1QG)j/DyxDu|&]PKhze  	  PK    A             I   META-INF/versions/9/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.classVmWG~
*PŚDjJ+F5"vHٍJlHɿTrN_CT;5`ri$;y<s׿ :Ю@'N;n>l9=i8K̝K$`=|dEn~h	!tkx}͉Lw|bۢWTd	qxQnJCaX>8uݴM1ùfUM:0ᘲ?nlT.vSa.3\rMB&MiSx[tb3妬r	[pFL^50Ψ1DINXMxO#
Q1gg!}bwjiynMR6(M>Be7pv,iS4R9.=H:/tEBԮW}h#\eЩj*E#4x&R.W|=dŦLYBma PbJCR%4Å#A^6Hᦆ[gZHC^pYn%xV
wG$qrSLV],K1庼UYׄKՔqaa!t,,0ZX,{on!Ii'$H]A
U_]^	)h:|uaT"3
,zĢ~ʶ5e}gCbU#E}~]OTU]N%w>þʥ2J_eחtI\sr^t$y.VZvtlRu؞ᬋ%WMKg`%-n,:zEQ\ո斕1nڶ;mqM[éPz1J ݀mO?7z覎 K4@w-?	 WN#Tw~D(B[?лRl6zcxHh3zi܏	*J6_b(v%F^4+16Nط&Qlm#RT
"1%5~6.JϘd':!/{h|=q>]DJO
ȭr{zXt;+w0U#IV=zCo[俲<;vYR{Pm|YA@!Bccf:EaPK0    PK
      A             -   META-INF/versions/9/org/bouncycastle/asn1/x9/PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/x9/ECNamedCurveTable.classV[WUNLåXQ )jIJiC(
T!	M&t2AR/~kԽgL,0烙|{3ϟ~0o؇&*EkU_׵n洙U#c){\)3D 
*ڠ
VN[.WL-W좡s@GN
&Vu"К3s5X8'e[37ړ\eݢP۰*At]+FFKţuACB֒S-A8[`qm
۪R9B[s#Yd*5%Q<qOÍc3Vm.Ye-I͝86ő b%Ok-W&h <+'J7kRbְ
&!8Nx!Vb~<OG3S1{H%]X)x0g9#aH  Yv#
^T13[&eƍ^$땹=KK
Ϊ9J&bźzZsIy5G56@LECt9zv=14ƞ{J$b
f
ۿ
j\|* %pi=i2gY,_TqكYVVq
;uufi֘fiVV`څ6O<e+,Xl^E05ёWGY-n&QR`(cm׃$֟sr$tl].x8].Q@({<1ϻPQs6BllMm`y2]|Ė8=*ذ=;|c|B-o7yh9Kl=s}Z_sLRYw_	I|k5!RVS  z/{zCI v	$xH%8";@3t(<1GcZ&fRфΉ~G|tGaw_/[">x|Ǘ>)VJpR!]7m(?`կv7y&% %$ABF_:W=+]s,,3t:z<?G(u>ZQfЩ\$
񟑽z+(4wi.Tv78m?#n
ܦzW`~w}iZ77PKl  R  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$1.classUmsF~.I^ZJS0ENteY8r@g:Y:3Fb$%~!2tx&3$̝>Ϯ> V1y)$d7~D!4{3o*RF26a(SS 0WwJ(1PFn1mx=gM*(49	MdƠ YV3,bOCt[Ճ7"e[q.2m
.2iFʞʧu\aEc3~{jkT~Pt"3=(rl
ӓ
/plH4'zM˲"sC)PcH_/;pq5\;z'pE7|vmˊh4n]oZl4T܅a+p 36{-ZP/Luakge{K}5>SuM
qzE]Ȏ".еU`yU`b,uC%9upw飢
~N
tOȺ9ZXӰ^<S:D'
Egfx^aXh( ".haXƌel1`dӶ_%!x+e,+f\-s(d}'@mI.ғ'`
3kpp~#Z^lжR[Ƿ#,1񰉭erePۮ'>>>V>>c'**"ib,PK!    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$10.classTmOP~.:J(+蔎me}Yѵ^LLSG3Mڂ{$ v#f<ɽ tP0ar5~K^(gKzcQy{~G񋰽GK,,r=OTQh(ru-CWp@3~thqeYW?z:ZAseyɮd+A7hq]5d/ik;3˿0M?zGoHwս,n1kj8F^^Su&˦aYi&5醭4tVږEJխbnkUR뚪6)Mxླྀ¨-lpΊprsxa^A_h0'M?\Ya>eQ$(ɪ[5mM.u՚RCW5]ԩ]w4ǐW~/^va+H>G]`2Iۈ:M=-VKThpk$aCR@مMn@F%iXYfzaw	hh1+ӚJ8E1:-lQ
e5Nr@w2xo(}PqY1&N05lnsV,1f*yک2fY]8D~[8FiV\:Vx<r3
[C PKxc    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$11.classTkoF=8.!۴@
{S%Ar7fjcK迢_HT ~pDfs}s@)L0#cVl&Q^b5M}-g"DYq?HGqp0wVuq.^
+#45g	᛺Mx7@7_d?Mf{q E~M9lE(J"&֡i'*^p fQ~aQOaq7Cm/Ə_0W~!d
]rjUwnN0t#0}W͞gp~WυiԹ:v <:~=w;n`viݮ庾zǝaKXŒK*21!ZIHltk^

ZI4 .%LpXmkiZvMCru
6yՅM6R]*&c ' `faR(R	]5dO!liS2q9WEI]jëI oQnkaK)~GE|12$q|GiN4mtA^O8FQi8ISUNwkfVZVfpnpzcX|x33{8OƯ4;p7GA9

4_f+o4Vyyg:uíSp YX)}PKP#K  %  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$12.classU]oF=c;5Mu㤟niX{]``ӤB:Tʇ@0l	%^5RUu`-!x4\f.s î,6$.leP}qTDTW_;c' )INp(w	^MK|Ѹێy2	.5  (Ӈa~RIQo
est(?(nw|za?-ao_t,HhVe|v4a%u.F~'z[_A93,[bv8cfSnj7 Rn5Yu*0Y2K5Ͳy-OlsLFa&!6|	kbKJ?;oU$~%nҢW<TMni▐ ]fR4{၀϶יn1FCj9ۦP&wq&D\;ky?r,9=$lTty)AsRHE+ijsCۥxfHgyTwnX!yZ"NɠO cV)dܞ{HƝqj
ݣn9ה3j**Q\f
_A`tKu<:{KP,ΓLNҺ2]"#$5Ka&8+MI*:i((Zօjꖷ(h)VĝTc
Kkf}jL<X	Vvb
ܺ.Oe{'X'.tj'znN`>|Iwߊ1ܯH@̖	jXi_PK<j>    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$13.classT]o0=Xls@t㤉jTm4!BuE]"%ـ/l	Q
+ƾ>o j`1p`)Nx'j}hi
 ?w}4H0aw:Q'G0U֋(PF|۴k3˧
T` U	$7NJjiZ	շnw?˒N^MA{J0Y>~SPUYA	
Aw'|I0=f	ʿ[t_b.7v$H5(c5ل9m7Ӷe2̱&5|E\-xqOx
jz6\g#hC0m&,N
33{൶28Vsk9-Mm(T$MG.Qp7
BC`qX
ާH"	e&#+q!ju̮lJp}k4aI- C0HOƸeRx!V	
QA{R}Vs۹ˉx3heqNA`*_yu1oȋL0k"#%5Ha\&V7N%Mkao+Q&i^Fec^vWjFe۔InYԯE
RaӘW̼S9i-bu1\,At9_!Q^Q}EuLvx=%i60.k PKN.1  3  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$14.classT[O@.^XQ+]Xli^"ĄƇe&mAW"D}G]\eL{:s !0"bcqҖ{QC+Hn(iDgAYV-wNB0,6((L8JڦEզ4Ujh^C `Q)&>o9{~AiUQyim jϳj=nN{5v,Tp)q`j~nJ಄o9EU_-"t0bT*iS021`?we\=mt|Kge{[nS7l45[wmԆ,Ӹ3{൴?6rǴМ_Z;	NӉKP#XT$UaV|r+c@U4xetcY&؞izn¢APs^ B?NqQ;V 
z	`z=MRܫ-^r":ZYP>A Qfm`ĉx"$(cd)?KgՍSNz[j
4ycvjy,V$In? T,Ԏ~(j!צp_19g+Zćb㑋hX|Fu^?DW(g[XmBp -ӜV<PKJt|  3  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$15.classTYo@$u
mCWu#>i9|բ !UȤ&d
$~ O":RHΎ3|3?~}@
%yL$RtN	ҬAK|fQIa&j
+'(2$KcZr5]EliL<͐
Ȋoy8L8_bЕ
)t:aV%I"wn +>͒^]
UAVtzݵ(a<ZPx9Qݠ>~CpAxtT}`vDbv	Tezf
TuZTq|TUe*vde0y֘ͼ(x\ǍCf_h%Xpm,4-zU0?+FKiPvl<FRڗە\jR0U꘮L=;C c 1oeL"☽ARB
84y>^
fr*;~t8pws.1ftjE7bLu0fCdFc4,iuqʴfo-~-iϛk_lhR`MY\S<0(uƣz1
g81t+]K}<86~_psYQ;ϛK/{Á=m*L3`0PKˇim  
  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$16.classUnF=vqG K&ڞ=6	^#T)*l̲Ɩl'?$
H,b{{Ι>F`
5̨8+Yӟgiu7.AEj</
~x')x
Z?	Vu5jۄZTȴ<[Ǆ8eq
fkPU9hDƲ{IAnRMyO8鿗y?F|wLzIz
6jWq?̏MPۋ_qY%%]=
17ݩQ4\L2r:zmGHEY䆔5͹ܩ=2\A(h0iFD09<0	f,(}70Qom}}|NommURqw2+qZ(jBC`yR4MKTRMpX
IG$ȾLvN$xd;0m'2c0׶iaȊB+@ q
?f4	Mx0X5*pœ4KWGSqr9[e+0V) 0Aߢп:- ۖv$.ô.fGHySxW	Giwͤ|mi .~MrEa9]dHɷ9$ei^mԇ٘m~³9ٸ,rXn|"Kl7~ƳJ>VGN3t1!-gd
PK)=  c  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$17.classUnD&I[f	7&<{CB{ԠEB(q6d;
nJ< / ƻr6YH39s9Ͽ Ga-,鸁e?'AZL2oD|qVgee%(	am]_lJ@VbKK;.s8c
+-:^޸HYEAVU]J)cz4_(~nF^^gìܹi[-xo&h3Ɨ0\e3a6q/\O>ws\ez\w\%Y+"YĄL
W#p1I$ Ұ@𽱷7;/6ɽCܿLդKסwqtlKY=Ys\Cʘ/:I#ύY6"/i[{4RሐQ o dï~(9-sr
6
뜚;+Gc5icrx@03A`pCzK8R,nOW(zblwn%`\T*MY8"<+8~-r
I9ZT]d(U5FyDa	wўuZ縹[X=xvsWI;aα녉/^؆|Ay㗠O`[gؙ]@41QQu7UPK  c  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$18.classUnD=ݭch),ԛlc	x,	) ~whcKOQex)?&[1sa-,鸆[y12aRVLʌp;.7IUZ_ô 3CEwF`p9#;Q-G<0XqAr7&qI6~r9IZhpeײ,
c$1'I62q6MMGIǣݬJGi}
ӡiVu	Z'8}+BpthJ܍6ީ0g,bgR!cšI{TByTuRx󁈅G-X'E4RJ#I#Ұjhή[{5u|.5]wZ+]4|OZx@`s^ti@Us3X-Ƿb&ydp@qxƑTWDREØt%ܮ)@ d/?88)9On`0>.pxr!kgɰ
vj%~N<Q(w@$CUH*=/%Y*
6M
'yhO!ei!&IYkQ+/4hQMՐ4VNj)@vB:ÍU<K=Y߷yW-SC|y-;g?z	I). lhjjveM*PK*x  c  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$19.classUoD~5
nZ%MJ?n|'
	b˂RGr|Y+&GR?,[3q|ݽ~yea5,ٸeq14>I9z$g_E;7ieeVL`0[:1eH{\E#
h_9LȀː̧\/X0b~)3Vjm7	ZMD8&VgIRJ9=I{4-a>ii/v2d5LۿxuoY	j'8{V뗸&AЧ۲~OiM͏x ,iĞ#7UI91axX7.MH&:洎<r
dE֎R'	dDaLڗ2tC<>4q֮iAEKYEn]!->5ܵB3LY92[s	r0RX FeF<	D< RQ&\K0ٶz
 f_qyidY,8pkl6
GŴtl˩
W.W*O~9.,Pܫ4yy#Qq`IM"+"K"%2Ff2*C~V>ػyrN&Ue[4FJh) x`H*)
K:ip}o7ΰjظḙ=gɗ.l%xm=Cs:Cs3p)vΏ. :]0
Cl&iPK<9    PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$2.classUmsF~.IjPoȉ,jJ	udxt;wHJJB<e??ӓifInϮ4eb,|Si6pN"</Fy9u;x_BeF:*#8ugv}
O=ޢxQD2L8c)># eg'U9ɅPy^s]`w3Ȇɠ]Wsgm8L
5PY97P9.\v0&l?xrL	ۙZ[Y%
+G?Ȣ-!()>m	W~@5Y
S/#ɚE|S[̞>o,j+nNW#=ΨRԥ,+=W-ύ]I=
M܂mna+3SGJD w6+KR,'
l*np,4kge{TH5{}Jq窥TV+d"VLHEYEBa.h3bZTaRJbf>&ڸc{wINC0Km,&ϔP1Ep. 0CRM./AXCdV1c:mD\iKSi$*x=vn%4gPy=,yR~w:@erccz'/X\._eXz}`a<?oTkc-AcQc"zXmwz9ܟ1UYԉᴎb2PKm!    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$20.classUko6=̣vmmlijz;5)t$QBS8A}4Gu=8 )/MQ('@>m\ 佺ë^7 ,ְd`W|9;J㢜$HY7
<>L$/e$'`ˇ~uǔQ81=IgZLSeJ1Ǌds'2a۶E9S
4Ra=O~KnәGqR40)`=%>8/q:Ev2%2QÚ!ڬxr<yNp
!kIOmɰӜ[yXGHQ%\ٮǘgPA($5<T0SJHKpZ`u|#Jvsm˧,p\z\ypX虎kQq	ˀU(ʴ4˦:>r~E"4j.S|53F;ZΡ>J&=Qyy\)F<'2(Y/}ŵU	")G3+G 9 u&~qZj93{sv,5peI$7*k*JEC<Y ŃJ_:s.,ف.de'qu-Y
60NBӴ/c'M<EQuE@0`ziUIe<sa	ߠshUfWkvWXJ-mo~/	>=Awd/w`%Z)z{@z/a)'>s]?
@Ϧkb"_PKaVE    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$21.classU]sD=ژ@Z>Sj8xҮc50f{FV+xi2tb3s^0\J
Wpag;?G_{ft2;ηD_yzY>j<<rAqa:A"|F:	DTgBx&c'`aZ
oMkrUez'لJ{l2ipݟғ3LG7E>w[3QZ<ިY{k*Xmð>ϛrn5"d7J}:&HQR)@I78R@n{vT^䒏$ [SpW*N 
䕄U)*ާ15юrOd>K*z؏ו>qZ璛#/|.[
|X#{{A)5|;T%I{D.>ܭkϊho.*	G0
'n t(؎0rĮ8ё
(67>QEH:C>C.Qt杝`T	V
d
eI@~OK+N^Uyr$e,ǽR_0lui#<K|[7fdH|44]f'D~V<2F,dRVe*4$}/M25>=J)S<@DuUZwϰOXF\E{mO6;%;Ywڏ^?i_@PO;[p>V'mazPK9]    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$22.classUo5~܏%K[C>|cpgDQ!!*6HoYQLɵ _Z?ЭAX}~y  jlsu
p0<tf㢟wu~֝3_d /a/\?/̶ڻUT	RFq8U<Q Q,F%TܙX2he4
tb#4ձ4S0MjLU
5,TP%LzA!#3|LP˺|<nRJ	V[?fGY
z/>5dNy/mcR~RCTTǫx`Dps\Vp'nǙI͔T:ZTKNT:T;˹NYe蔎㉐R+j#kX&<
yJDI<fajxƙ"ԏɍ
i,#g
N!(Pq $Rh3y#aY(R!DJ("kXۥ!Ũk{ǭ:{焳}^ N}|P:ZhM+&^^L~=)6b;<Jz5Ƹ0)UƌϫmU B#@ā&1i%	N9iJgaJci0i	Fs/{8`ݡ'g25:B(˂:hnsKJ%-GYjSjcA`w	pd;ʳ"?;ӿsd.R0n\sn84A}k0Ge	+^37@p-c&	g\֨`q,'s׿jY[?['XɧϜlBEWX=g7֟cto
oYZ\ PKa7|    PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$23.classUmo5~ܤHk
关k^EB(岽IwP~𥉨G!H@`3 HfkQ fu7*5_e /`/\_fڝ:Oh&`K"V
Hm 'jdưP0Qjh6
^%hw{(4^/)'QdEu9/SAV>VQ|yC-VB
	jG0v?\nj&>/;~PǛ<JJghʃ$D8E4&L,7.	5(kTT+EJDsibd"h;FCr%]oW'RtV0Pvȉ0&ձy&*扌T"|\04i6
,݊|ں/Vko_
OKUհDiɹz?/')cq9!l`dM}XBWQQ	SOH{)ņ42"u"+5<4<I* 7s yS xQŽ#XG5 A4!,])Fvz&>LUi>zp ݊4
So̚d7ʳ2?92b7	nEo04As(dqOg|{gIN@p?;$ Mf:g
V׷p;ϱpri붗19үg&>Grfbw3,﬷VO~9g~k<zzbWgK}Z-&oPK	m  !  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$3.classU[oJ-8s6N8\RZH	YoBPWBt~ ?H m#:3ޝ|Ś)L+p 	k,`YlBel<g){/rf+I?);%֫%.3Fm84t:c
n*TVi8xn@e,I0ޱMfY5^i/֫ۦ,k,q."8
NqM:ǻxRp/	n4P+J8+Y[?J8#?鼄#Ne3939׎\/<T2AOOY_W\pvju][+Knqql7m$6Z2l
*nBWP0{}C<]+B-sfI"n)04$k'e{&(uE>*D9KԤ~DC$s1l 0!Aiб+jjԂx=A-uC%Ź줐GEw.6t::xapy:0' h|	xT]'iHrx*X.Fiv!Xǌ0	5cO2Y5M"I8iϲS0'9;B	ȶN'),[ _f赃^V8R8gZ>WlP_}yXȃe 7ZP[ ^kp[[hl_UO*Kˬ,ldCPK̑    PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$4.classUmoE~6	{=hjZډBLBRRDO{{{{.+XD{v mF۹<+X0

Sy1PSzɭVsU,b\Yb`<J&eW\ď9
$mq81Vi]GxK4c;ى	!:`Yk Ҟc^9Q=3kMSY"nTP3>nܜfDP9cui<z
n{-ⱙVgj}E	vs=]ex!}ԥ1ߵ=/|:õ2pBx>e
(8g./D#iykX>0z!*>ځtX&68=Rq$v!lK{>/K5>i/.bLnt/CL3R*shB#FF4CF,acGal`LK?.Kr{,vK3VU!t ]c`kjOA1Suh21M)]7bD*N8>C}$NDQF")qa&8)qy2.zkOݧfs6oL|M˂ ۍ7
|gbty,0f_fNy<$XhdDZ.*C:%&000֔MSu"	>˚s(e^/G~ORjVNA~,Ze]c{gX::QSܩ}OZ8~;^l>쮼ת#ghZ^SlO>؉}jZ=UXPKov  k  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$5.classUmoE~6	{=hjZډ.	)$$I*!EssuKcBّ71infyf@f0[wp`u_=A:l>|s
unN0[Q&XcdHy(vscrF7JmjDy{&v(;K*R<NO<릝XR/ng'uGgqq$#ұ^[<pGfZ9QխWe%<?=Wxn0a6BGԧwE`^	<& <E}D0)o'.@4UGB8Nt;m!B!EKj0ULj(y)>AV\K~Pj!8g[0eֺ
1Ü+Mʨju#PWҏ9&/T$*RGnda	%4lKݞS7=6pkc	LB
φS
	NT9GW&Tgc4t=8B{U[%^,dj9O5+p6:+py6.z惡5GS9x\76UA˸[:YQH3m_NyQ? kTeҚ+C<%˸Jps3UNٓA1g^aw̚eH 1w̕Gsx1GyBRz)O1X*}S-7N8ăμ֙?h+mT!)V+7ڬ	Ư`w2YY0d$ PKQ/lw  k  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$6.classUmo6~djk5]׬uW;q&ꅔ8g/Y9I~$ʅdݿھ4G
 P> < cs`;B6zV8<N_#e<IluL>W V~/6*~2]&zXSGn乎qplU`x4
w/q8;Q9!HyRJ,O5iiݜ♵ꩬm`7*x7	nN;DP9cui<z
n{1Y[U&	s\:n lQSA\|΄0Gh%w|xr*+ >,`iZO.e"*>|HrμN(n̥vZ+#Q:'Xf2䱫,˻Ycz/aɫ)vɔF24s.=RECՏ}l$r=9y-<M|7K+Xeb
_}qX*rkG$0cUnKP4n+pLtZ?uNPb#7fY_ФJ(;CDIP"	)<✆a<RW8%.OfeZ}
it}VoI|S4dxƦLl&i&2*6/dY20CRn6	:hڱ(SPa-Nv!Xƒil\J000֔MSu2>˚s(e^"`W+)5+ ,Ze]c{gX::QSܩ}OZ8~;VlwPkFhvW^kG+|Ggۓs1GMk4#?PK.dtv  k  PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$7.classU]SF=4v!nH~҄4LJڒ
)SjY_/)3Qg	&3+yVsOL`)
R/o7AӪ_tMS3|-?˵S0yMLNpa'+*ӡyCK߲X*(A4QXjTs!uZAq擴C'p֦ߟJPEfWeOE󧮗x\7´M`7*7	n:DP9Tܩ? RxpZk*nP
{B>"dPy^ic422/B&Kq'3}v ]`o74]6J,_a)ŔdFqKUyHǞ!3;"fe]>l~TٜL7z}2.=REjW2a/+Ed(eҢT9Xb
KE4ٮ77k71$WF1|ՁZ!]1n7	j\}9xLEBSP_~ ҨyrK}!<&S^(H`$#K^r܌w^'+l>$x0sG<vV	f/K|02o/C+ZZ	}/UC)ny:G0ղbܨ˚>ݝ!C8J)a\&noi6ŋ^bee&ouU_W@iv6NJSx`8BuBV9-׷O0GGSkbcǸ0ʏF_G{_{p7hn7j1	K7֮O_ c;vլgƒPK~Tą    PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$8.classUnVN.x1n!۔@),ś[C[@JQ)?qV[>O_CVEHl#993}3 +b$,f^ga&e5JRfS~ǤHxŋr;a62,Zdq຺^h"D\ I 2aqK1IS^-L7_D%@*`=$vxXGV%|dt=g.IZg\TϭX?h:=nofHu\v4 ,WҜPCıR}] 4C;BZ<kKi{+	7p#9W[DP,V][
XvlױlRc"nCЖÍ3HYiKedyVWg/bP$y)r^Mvy
jN/='jg^fGj~%s^(*W>*p{6!bw|'.14iIo&j=	~mRyVy!EX@<#ROR@"҂'?	tw,NN(KGyI0EO2^,떸HDׅI[ITB+%`McxTi
c\+x,-_i4)=:c|>'FsbDFhluݦ>5+|K1?1"&I>.R PK@0    PK    A             D   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$9.classTNA-*PQ+h--vA{.&&DYRjn>/𡌳-	?P$3s̹| p8  !,QC/u/NZŁ$~67c"oO(~v`x4P!G@+ab;Tjij+њƁh<+J \[7 :cΫ8.PJGaw-/h4]Ѿf$~Ï$A0K {]_Lf1MP8zGͯՉ9LᑨnVG,LmcSG7(CHdTsꫪV\QtRT5Gq%K$ۮL9LnZ{U6zGVZ9RZWXVKU8<ģ,y(2F 5sbuCL+ʊU6l)JY$4Lղi<C<^NGzAx&<9TdQB#,.hQMOzj$59z$8P,{JH_,nZKd^⟦5=!CPŉ0.9AƬL~AGVˋe,@dd+l7VJAwQz϶166&O0=CoO|;m~;5S#`훭sdmr~	vy|MtZldK3 PK#5    PK    A             B   META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves.classXxTG=,
M-G^
		
	PRCiU7
OV
ZA+
ZanM"*P+hV|ַ<,K9Μ矹3y (xKD/hWmօD#~2e%F9ڈdp}s̨ƍh8XS͡1X3BYvA_C0R[#+u6;r!{sO3$2Ѷm)0&MʵE
)}<uhc@^N.ۏlp}U$a12B?%c@Vg5+Eהp$&#'wFShN|F$5bqkYkrR
byqvq7HQS H,t~t
#>c0փqo9#[a`}4*17cˡjREq<E?GI(EkVVRBtdrN0"i(D%J0I24MҮ!v滼;e;=#dT!{qn%13E}AL)S3uBX44XUkDẰiY\V}Mjc4esPE	\up:?MΉ6㜋jIj4x**ׯ;"MXDB>cS$J>P^/KF^άSz'5FkH޴>`9mp7xH$ލ@*cfhNn4+hĂp4BMdh5N+Mp/stzzD$Mn:^qDWxMZ'+PT{x{zd/xxd/xMbQ]KxsU6mP)R/)bO*bi^p].s(`weFkecE]&Q~ɕ>Y2?}M`L2?}]%ٌbʌ1$t,PX1{ƕQ[;{]Qp̞8lF1{ޕ-S$N'Q̾ʌVglRc#7fZH4+*f?ueF+cs,*'h\r~%qKJ+3ZWJ\"~'_
n`헙nO~NGZ.iL58:qvE]_}-	O$$H8Y,zWV }NFMb7lhIe17JYፎAFEmѐ8b$o$Ix8",B!qE!':,8QI\fQF*2NJJ	dfN*.ݏt]V677Y9
;qKgtЅ\Mwyָsa37
N*,2\VE"tnF#id>	5nԸYV5Ը[^5آOj</jCkTm̂S@ɤ=Zq!+_B:z0pi^~bļцuLuviy3Pw},.Mϳb#b9 79\aB^~KJR_h(StBN#&i#:\-1J>,iT{VgML==v^{6_uTқFG\xsd_場^2]NTf;DPo<dւw2ĬL6n=c#g^/BOӞri#E@5K[Qk°&D(Yh&Ză6,l![F&اL<jaϚxb_0}Ğ0ľj)&J&[8J&Y8A;&pwM`x9b?6~fe+W-	f^
F*40
1o(Wa-B(ӕ=Jd(<ls4ؼ1<K~
ټ %+<iJSxÕoW6ĝ
l>F
<G\lD6O%(lJ+bIJ*JYBTÔ5p~5nиI4иK4xHcƣOh<s/hoPK-*Ҙ  l  PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/x9/X962Parameters.classU]WW7HDQ@AbmIĚ6O5dPOJCZt?3Pbaf;}Ιs>Ͽ p[
b]q0/m3ٟ<sk{*|ŕUϪZ*hPXKTjj6@emTA0g[5X<`Hs)8p9;)jrIen/xzU8?4,}^c)(=)gT4\"crĒ%wp-lL(>
1v8.3\;ݝg!fT:+kBպ/m(Ĕi
p\8HQY>vKǨl.i
f2gÖv%7LPO%ЗJoR64|ϩyk7zM|ஆ9wb4QtDܮkn{PYS@R_۶V+vC-2\ܬ,߱}Л&]2䶥L,_1ٍ%DiBqJuÈ'R/PM/lu/=^[r-q,
JKWFII%-%.gX*WC0S$S=XΞ[,83)]OǑqdju+Zut"5j
|B[\mi=j^/B%)UOsCI`\!ߤ+zbi.YAP7`Ҿ `w4x4Cu5F7g^+\0g`HN;
b.́ra亂hF>Jc&Jz7^K6B["b8
YrM@HSa#l	a/XG7xheƍ0_"D	[G1 n1|x$
=KXoaOKoPKB  	  PK    A             :   META-INF/versions/9/org/bouncycastle/asn1/x9/X9Curve.classWiwe~fd2(
IS P )-bAi:$dк+ZT@I8II(rr:/Ͻۿ7 Q\2ҟ2#	մRZD5u׵
k{uC6,	mF:Z-io[{e .Zw?%,WOU+	f׵@|@3,~^zts<	'.7KE<nFaS\N1p*cpyBUm]mjڀ@WN\S:KB,Р`1hI:YYjڄ4rٜŖф)X@x&ڡ!5E5	U@.r[:q'BJ$ԥԴfi9a6UB%+V,\2nXZk
k:USCԶyzXuPӓEq2"P[%c=6HOFN-vMь	G`'>UnF"3m$]A6,	Kn$oqôTwK0ɈD˔X)+؂~΁ywQv8ϼ.EӍXCGVF'vnP(dP蟗$Q^9ݴ>Hf|A|x[v{<	}X-8GOdecώkxlWS߶uJ$S)-Zsɡ4MqpBZz agP7뭑V_V&kdz=MiQHq'u!Ġ4Li-&Bq8@-X2!K;IaGnSL02ojӋ$c+xNlҨG񔄧<g+u4d&[i:nvd¼_y/Wmgz	nZx2w87U*tTS<'7*]&M>NX* %r4f.,Uj|I9|',+sy#|LLs6=O|s:1te9I-Bq_(3q4͞oSinWT[fZud/+73X@u&nW=3\E4L
'	ZmФAt~J#
C˵TԨ&UY`mU~Œ.U|ٳtg'=~OosmI@
79E%|	PM0;"j/`>Q()q%PMϑ2<($I$`UQ}ەǽEE*Cg_
IotmQO&m/{A~kJfjy<bk=ۓ¾Qt1o浌vGL,p@	ycHb)*W` pY;QǢ5=c'6cԖsvC~=.#*	%Dz2@$ A+h&"B>HPf_ē'QSG=zlZY0=pˏhw=ٮm-b,ٵE	p(Pf?!Gv)sY\ටyxi[9^n>&
x;8YF
qr8.k
7Syt_S_׿hp(?B綠tM9APKfe|  P  PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/x9/X9ECParameters.classWw][8O"JbiDu$ieEQ'v1qqki#o"26}?5}B!k LӞÇ~_SZ:swr=='Hww7sgFWBhC
?R%,լlV#WDrd9#ki)DN+kt
1$sh&6\-meK9}`(E`WsɌeyBUl&^5GלV|<O뉂nBd%_+e,YAl1"FJӊ8+zѰ0ΠFWl04]c9B!lnO%̼@zQKn|B;ҙÉ6oUE/!P55d2|ULO~	|iMsr.3zj 4Kj;2*>ن=*trZe` ߜ+P<QG8睍&-xgTY|N(S"'(Rɴl6LEǩ"7H#q[E8r@UFmdTña6Y۰B'aך^UVܚuMX>9]-:s7S-g؇C"pk}ptN㌂/2z8kz7ͨ|<)LEt*yxd!_TXY=^vkGoYL0~mzk
l䊝>J5Q1Fxq-3RQB4a>Z*Z3a\(FM`9u,q	X#Q0Q|E`okjLd V*Q3kשD3ƠoQߦ>;#Va6LV.R&K7ٷbDrT\XވYΒVf}(g7>p*S>C?[3~g9h[pX4#iW@dH֎'+Fή!oTm9u<KN:s9^ZZ~b
.4]ms[/yࢊWJӼǌ'rOUF+|2L*Eb|RNטgϟo
,нvj±zcxڹcl"$vfH"J~CN:n1Ӗ]m֮!sUܻbcPIuH5+h,cu<-ȟ*Eo
/#Io6:%JRZ~$5Im*}D_E(5M2|4yb:n}W+g-`g|{IWG8i*_@C%p	;/Kg8x軆n\@"¤dEE1 g^vMABQcBy}+:h?w<H	;kCP[Fϼ6,gBN΋Цn~ZF x>!c eten%?N	:
[}:	BZGGe<8$7\Kҋefqp`#JXfW0-p$^Š8_Wb/`T$
7os__V߇TbKR[
m07+(+XOtu.[rNnv]xC"ÕJ+hMۃ4$hnzKUWm,y\10o]v^5=ÅH%<9%tMxzY4ŔG{uND?}}RhW*mҳ`2rjPKf7  n  PK    A             G   META-INF/versions/9/org/bouncycastle/asn1/x9/X9ECParametersHolder.classKAǿ3wFqЃBEAbrRUAkPF|v H5d_MJCٞ@Խc`pEQ1q{mfV=~ek*Sv}dޔօteKyힴU
W[?nMeeU1DJ nJz850ua!])t7WDvIeX5ƽԔ緬Y*ĥ'3ٹ&1!XxF;z !/
>-@<8)>CGX"1#lH,ci<Vb">ByPKYl    PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/x9/X9ECPoint.classTOP+C2X[{C!Rn-0a4Q&c<C_EQB#yhUlFՙWJw^Z__dʦZDH2+BLXpm-Ub*k]DNt16Vf^6_/)9k$1jɺ[~lg+Ҟݵvb-e;/|g;lrC2n`!alba,rAiI͘M)xELBaH]vY_<J*ͲĹZހId܆ΐJ:L" h6i7bz6ͭp"dP bHZy'6R63]+'g "8$ηZKazd?5vTӮo
ne߳U>ltD"h]^fó+os_&ݧzbi:} tUZQA3yz>
C	 UZ#a!,h 8c$L~ؿ\% H6Y,@s(2IJtGAR!IsDÓҔ*őPL;
7XKX9d)ִNߡGfb!QΓ"Ve.Ր3|gPK    PK    A             A   META-INF/versions/9/org/bouncycastle/asn1/x9/X9FieldElement.classRN@=Y
m6]ICQ&MH)T@<35[rUW"Џ:~s.:(4</pysx<AyKBƲ(h0LL$67GX(_ssű<LmB	W_LY20;yB\Bgq&X8&ԬkWo
,⾆&Jx6t&QI5EwZ{l	|CJV:m44'~L슘e)<%䬃UI37DmFGyvTUJ ̈H]{\N׽`^ً.yJ3BZ6/
gTJ/PK3+-I|9	WQK2r_QTs'B^`y6꘬c0L]`ngPPK4q{    PK    A             <   META-INF/versions/9/org/bouncycastle/asn1/x9/X9FieldID.classU[wUNnL&"-JKRVN'0NbrZ#U⵲]/?wfå!9g}>{ N@PC@j]nPdv<yq@:jF _!@V9:}ΑR~^Vw6WL[||I!zݽd`}}c{]%˲c/s$ҋ׭-+ak9T^5U6.P*rdN'ɰL8ȦM&r5MՃ@è.\Z+rR2#8~	䄳;oA8LU".)Q[ U,W*lUf
*M[֔Su;6(bݲ*#8In*}1pQTm"|wwaz/\.ȯ7kKSȱ=%cf3f1g3޲T^_*F6?:池ᜁp^=yV g:Asbx>԰h`	z_`@Uwn^;V8KS/.U"_aǽhpu:,z~&E\]fݓ	p@AY%vE92.]T;xVcu Wi
?E"Q9J'DF8ل0@~sL"cO}8d0Da_o:kM#M
'l&CX SfهM,O0ކJX<Io;$"zzvIr1UL)&\3Zh
4c3C9:,	ڈ5}+'EADo!j'v-qbUX-죝-͟ѿK,?e/IAN-XyPK	  j  PK    A             E   META-INF/versions/9/org/bouncycastle/asn1/x9/X9IntegerConverter.classROP=w(+APl|̤ɔ1!<ܵ7ص,1>/jd_a&rse PBY)c>vO2L=P>g(澆iTUh:f3$i`wz/#a<g[t !_"ۑXc/88GaTXU7P"$^
Uqui'X@32qRHS>dPPÒawؗP9KNhd\^r}وmU+"=E1r֍n.ã+ypd`ȤP/w!K1]ɽFBP:ppw%%:W@Ql~TW'|?%9 c~T|uޣ>Td~M)S;5Xԥ
tVQ5
7PK\  '  PK    A             F   META-INF/versions/9/org/bouncycastle/asn1/x9/X9ObjectIdentifiers.classw|SUm}-U"e)[&̓4	IRV-
*ĉE`~>;sϻﾬs SJHD.CL̪f)ԺV8sHĊgzJAAgvx\fUW
JJ:܎ۙ<iv9T*k3);0lȌ2(N}_w^rf`ǅ
Cz^0)P&UZzJRx8*?Ӧz#D;B;Xdzk"/B?2:%Svx좫q+ T(Rv:cD.wbˤ=QviCPN<`!lfbæ\l&sf.K+

}~2ZH:l3`\I
BnzP.f'Zمg
Bq9!lgj(usscƵ0Sc'!LnTivb1;¨Tea*Jp8%$ؤ3)Zv'u
:
0/r,¬08Pp4 k!ԋnl֮><aN6Q&ǀvk 4p\-
ۊp|3DE&dSEjpf~e'@UM6w\.|#",(u͏R򥑭lUm]5dsˮCXԦj7U~ܳn۞*/ٷM|io.k ,n3mOnK3Z t=,6nt=0=}0I0?	
?La'yaUa'yauO~QLmU.sSK5^m'}M[o)a~ ˗<5
{a#Z}Ǭit:DFYDd*'UH;c
4dƹmW(H4|>G{yJnk_#l3u.xSc"-|;ͣQL'{ȄE~>ԩ"ѩqkl,BIt|k]ʎp% l/𵝋QEBɪ#\4pyeV:QfGG:#4&q
n'Uj{CSzYw㭛5<_*ŃUJDhT/h_(w ACD]Qh@tHѢD'N&zLѣEgDE&ED=ELD/](Hf;D.}PtrEW>#JtZ7D]'^tD~//D;J'XDh=YQ;>T_PcPq#+AǥPC+?+vcܝpOƽ	2K3T2Y0e/EP-) Y!у	1NxBgމ4)2fVfAp${3C1Bhsӄ͌O`<T	b<</br+	fz	oaNƻ	e-C6!t6"t,ѯG+̯1vޖU#tVG	'*FB'ys6K:@$l%tjЩwB?	fѨrUJK0P+!* 
PK]  @  PK
      A             ,   META-INF/versions/9/org/bouncycastle/crypto/PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/AsymmetricCipherKeyPair.classRMO1}
.~#'n11xDeivn!_i1`<m!b\hӾn͛|~hG
+.2Jlu=Pgz*r.Hn4
I5~ 'd2r%E|fBQw 6lH8Z$BK*;<1i(X1SZ	ͥD	%Yҭ![Qn>W8	~r3
HDw0RL(L;W}N>Wm[5qLδVtԝdOEin
oꯪiOE_Px͆X,⌾mu
2TH33ǙԌoPKu  F  PK    A             R   META-INF/versions/9/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.classu=
@B!XX(~\AwdjC	5o{|XaR賿;
Hכ:nĚ.,{9Yٱc%@aV҃\MPXgL]XrjfXl~R鼓ᘍhk,M0n/PKA%     PK    A             =   META-INF/versions/9/org/bouncycastle/crypto/BlockCipher.classuPJ1Զkkժի]䩧V=,
=)
45Ml*OQbJ+HC`&
N"Tέ΍X^xMp۴xV\*C{_xxJ3TQ.&<r)"4֙$99+a/N.1tdnz2L?ToA'Y sgEЈYIbSUG"='oQA?3VYC=QKna=*ꨠup4PK_^!    PK    A             B   META-INF/versions/9/org/bouncycastle/crypto/CipherParameters.class;o>SVv&FtҼ⒜Tʂ|}̂ԢĢԒԢbvFĲDļt}6FFf(  PK <Y   \   PK    A             S   META-INF/versions/9/org/bouncycastle/crypto/CryptoServiceConstraintsException.class;o>S..&fvV6FĲDļtҼT׊Ԃ<F6̼;FQ
̼tk0vFtҼ⒜Tʂ|}g0ZTꜟW\RWRd>s~J*";M @WIN O(
g PK`      PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/CryptoServiceProperties.classM
0_W.]	BOD)T\x %U\9f{<ow K"4T&tg[%&M97"&'uUTi/0NwcL`Kl	N]H`:otdJ|sg<zUbuq/W	մB6:DCPKFuS   %  PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/CryptoServicePurpose.classSmOP=kM dOeT6(s.-iNι/,a#{ۯ˅]X=;Ubiv=TAtHPRټo	y̠Uϥr'*w3pc]n02levO̶獌婷ڝYyt:wa/1e6(_o3a<80):}r/b+A4"!L1D1#!X(UB$qdڱ]>m9yp?yЋ11Mqj	K][ˇx_dxGTqX.֖%GiDdU*`Q"'c@ưQ|=Ű4/HVY
s9P;+)nVm>vjKY<,۵Kg#=B+"W]\'9:==paG=
kHA[EщgܻG?<O԰4s+HMO;nK'̎\`o1 5=%f4$߀ߴ
l`iu4eZ4Ӓ5-~	H!P3#xJ%/ȓ !AQy!H CheAzIhM_`/qPe쥦6v9&H^! PKR  s  PK    A             K   META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesConstraints.class1
@EɶCE2 o!nawjCz? v03&xdi5꧳*`AXnpsǺVBWa:<KR/y( PK      PK    A             J   META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesPermission.classmSiOQ=Sv].hqeMbyep:3$4QO2xgZX&y˝w߹{?_R>%hG.	GSk./5;nEH2YIdtSB;	Hsg $]?D]eaβ+U3;}'D[
C⪠Н>G!c@ !\a_8\}"}$Z#2F1F*0&%\1F߁׸tɘuj릣Hy2Kxw&閌1e5O
(.c }kܒJ岫k})E	nMnԴ 2*qu/Wt.uر5^N[sʪ*]+\&GPֶyyn?!ye#[,𴮆#lCP;zfS3KК"eVDҫ{DCKD2|KRzaJЎ0$a{M}d?ni@}U4??8	X+7'9	r}>cXƭ>i@w3c8!ێ\Y?p^7%yi
:hF+lԘ
!Zw&Q#c>x>PK=ɽ    PK    A             K   META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$1.classJ1n][[}Z/'APtئ.IIbIPbԁd/Nd}t#Vjdl%+֑л1[Bg<	WrޭjbR::Y+^2!zϧXlC!/݂	]dF?ȳwkp;k9.B`Do-V!pDpI(NRfr	@	Ơ-JS1ܑ@NPKzR     PK    A             K   META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$2.classQJ@=Ӈ#D]tV!(R44bJi. ?Jɪ.,83{{?>a*.Xb8Q:j*YȍMٓU@,	81Vs9e2vZ#̈́g/\.p)\x"B˰t^2暯|UDB3t
1T* %fޢ\֕Se
"m{s26^K) CRe0"JhzkF
Y-.aW]{.h%l`[TDPK3.tG  $  PK    A             K   META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$3.classR]KA=7nWmoB!"PAPO&:v;+3@UBJÈBve9ݹ?~~
WQB9@%	2lhX
SK;>Y-HKUn&4F"rJaD,aeLD
ĽN>A*j\}GaJ0>b6\:"BwaLIOFB:C<a@<U?1֚whxBX X=ҩJ=?>{B
Ӊ~h.!{7[!>0obL3Mri6Z=c9R0cq|KP%W|fNhkg̿@SA/_ֱX
<ƂR/PKzģ  	  PK    A             R   META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$Property.classSmoP~.cku@}.niajt43P2>RKWH-4,2{ŠCc\>==9 <bQ09Go}{d0Fh`X:NpN0
xmD#x4:.?ay<B0|:QjN+XАD!5	xܚ\~Kΰ؍n,SY
xW7պ	 LRnZT-QHF%,m͆lnw-qͫ콮9Ik?>)I軡Зwkfmn,Co$W`sfl
z40[)Nޜp&WD}}'`#A
NśEF\#ʈqIKŞH}$	`((0Y8©BJt~!80MQcI7THV<OmiνEi]֯J뺴n鷥,%212 PKd%  i  PK    A             i   META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$ThreadLocalSecureRandomProvider.classRkP=_-kLt[ܜsnac/}"u|M13&Ja?&G_jC;/999?~~
`M&lLcp,ЩC58ӹT$őB++) EڑaO#E7*'T$K'fK*9}"{zK؂10w^a9KlXbXjnOXE9Di,0J6V񐵊RjxDx~9?j'3ao,kS<b̀;	XtS&I.I_eTT,L<#
6
&e524\9l&#kN\5W/P"QQVKԿ^>]e%VF7'2emT\+\ُnLy]`yC PK~    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar.classZ|yF}[26־wl`1̬| ߹wgIҒMi@B'mDЦw}mHiNI>6|=vW_Ƨ_ F9h-gAqLLɃZ-,wXAyZE+b4P$%y\jmB#0+ǊRWj"*6)Q-VʇUǊJ֑lĀ,0KQ+.ʁpN5Fnմц܅`md)5[i@]6GZ3;GDEԨYgc6آ
7+/9sb.a6欤Mt|KgEVb0<Oor3u5thi|}EWՌ%6.OWb	z!X6w/qLE[iS5Y¥=rd3rW ׀ctbEx m!kWdDKj7BӲѵmAF209]u`bYQ6E;iMwY⽹52Fn]| iq>SM{4Lۚ7&gm/ӕ
p[[i$G{-ngݲ7WX<zLFkbiyf4â;ip9f&70# Ow1
Emjn7vK[2
t7=GcCᝥ6a{XTJXB&{t?&凎i}o(M]d#,JHUPNiHY	dsrt^q@C90s5QAHܩ^ؠފCtJ#}!P+\U_2|,:Jr"&zd2v[	lU	i=J[L	Y&'%m\EF>$8iyrҮ	QBwד@TCq:{>skR-{;s],C( %L*\}ƾj>N{{ubCָâvh`gq|TYY }~B^IV$ڈ.e
p~u
mC=A70xҢ_Xt]?jчyݭG'&=VG>RCO)ةɖcb(
R!=MϚJw,:A9}o-@YJ?iOW[9"O?m}sssIT#27M!nG7yʣ<Xۋ3uvMhQY?i~$>P9zѢ_-hGWQBu6Uh.yAF@/M_^_B~բ__GpP'J%*OfCmiooÃP\#ue'̎aakff,ف;rG7dbQeaEJjY0A{cRh~^_XWh/MچL:sJFX
P Ew>Nh[ٌ/1=/+}nmyQMo;Sg{m:'#e|zߕ5=W曟<}cliX{uXl[>Ve2%i(KP\*>rgu7-45s3,
 [	H}	q[uTej@Y'R)ؕ:֎+E"PR:pCQ؁VZ&R9:kǩ':жzAG:Ti'ʎ97k<WH؊s'p%}Oȋj'BO\j<[ϨB.$qC[0	=ڋegì0IHpFC.ǏT.D~j|q=G],lN"'Uq;j{Aڑ^+[!"Nt})<C[ٝ@T5Jڋ̑Jzo.asR]ƶ{iKTGLҸɼwj}$ͮ0>ѻ+PyQsn "ɣ4y9
$
0nx&Z*;u+=Q6"i3C!"q7<
uNTE
 v KAvdnI|&X: B8АYT}SGHv"{qgٳP M_jWq%U!T 4̓6r|AJ۵yH7Q9ȍDر\*# kT΃D
}@8i(";SA:x)4py:	mr,uXu*H<!yGEJ}$Ծ'׸&s&!B(v 
bĈl
?4	O */m8Cdop9S!Hȓ&PO'Q4E,B'SSb/@Zz6= K!atBcW׵=@mpv t`((3+\8зPEAeFM@h/(်/}*ݔ/mQP	0zj$>wLyH`p 7k7f8Pd@Uȁ7 -(!䬛":!2v\߃}O pE{*N tS'a "!#S3>C Ԩ@1ר4:X^Q@!RYڈC D&RTmW(\GL $*K֨kAݓ).q"Q
!<E&nQ*rx̑6c3q0BAn!yJ
HJi&2
B$N8PN{\/#/ў0
`K`yEIH&rRa
3PK {X%&
d(`h(Q<ܖ;#vC'`T6BE
D6FA<iP홶T໾pL$bF;R@TC$4bF	lRHG16IksZ`	ZpAv'P>G>s(9H@
%1㡍:Qj@<υ$u*
4(,
\<>B`0;W#}!eEf.H8CaA	'jHa@+Q@ "~h@
}(߮0VفdCBo(IPmxTWMW<Y9v8Q)xb#q<3_!u\ԑp6ts`&b3Tdz,eXĹ@
-P1#3,%+EB)?	 j=P\dBQAa+#>\A-voi讑sh(b{.Phxҭwatmg=lb[5>ju\gQR'<~>qm.k^=ﮃg9OΏ=k6؅juMFFkB>7os.F^`~&etѢҨm鸞x^aonLˇ.1M?7{ҼRr4p׶[faއ~ou0|np-!}73n11-|h4/[.,da֌rw)p+ٷ-?/7xiE婍,h>	lPjjoh^\cs׷z5]q%޿7x4.h9FH'1#Z;M92?+e4n_MIʱIZ5Ewt.z6=O][Ӗ\z?F+fh	53vmO+kSGIb}Vclþԉ40<7'֯666.{+$c6f&Ϭ{h1璆5ssz'F{3߁&MuuWLc$~t홡[Uԗnuퟢ'2ّU;*,^1ku;y'ټ^U9z`>7TOS^q#cMrи~ˇEzt/"з`dҦw7MͶF׵u]_e$LfXy}gp%{38֮ǧ;74mH_۱c{o3|Cwrlٚkk<u
a"봬m2Eo<'C
!OѪX׏OG>}t>Ķ4jM^|$}[sk
{kcn3qai4=S4o<j[͈/
ɻFn{=`XKgH`sufstM[|QVι~zHkJy s';C
$C/3,NKc}__^u9VyޘSʢ{x4Cqiz|wE3S_OM?9`>j6DhظAϒ3OB'2xieWpncplMzuJتUP9.]p^]<{h°e8ܕ}kc]5Ms>=;Pvjv~Ev.cӌN0vYnM:fahiSd4iZf͚iU?_t~QK806y4{4W5M鼧iiv\}ڭMΝҽKQ9oZ=Mrѱѱec˷(&<;3lg["2yaQu^c=1O֌MmPA 0h%D{ZPKG_sF  %,  PK    A             E   META-INF/versions/9/org/bouncycastle/crypto/DataLengthException.class;o>S^.&fvV6FtҼ⒜Tʂ|ҼTg0ϵ"9$3?&3/ĎYC3d$NFQ
ĲDļt̼tk0vnFm\$$楗d ✟ʠ 2An<@ fҬZ79B@ mlZ! PK      PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/DefaultMultiBlockCipher.classuRMo@};^۸$	'|rh`)UA\dcǭ-{0g7¥ 
~BqZt7;o~=ܲрơ;h`X/4v'{2Tƽ8}؆	vp7Ұ
EE{ DЊ,ߎ,HcXXr¥JU,Q
bx7+͋,e9㦌'[͍C<gS*E:N?9J&8R"#1I(~2XeBL#5=ΰr9H<	H~WtjөEm?G=9oCj8} o>|ꛃˮ@s͏X65rFin5G<Ǜ-78ti_vیhXMrľ5PKF    PK    A             D   META-INF/versions/9/org/bouncycastle/crypto/DerivationFunction.classOJAw[F
VASX,f/, ?Jkbf`=
M]5:ǭ.u[m쓤zZ7q=5޾0cnkɉ7ڇ+a%JbYmVUӊ0|p#h7+/$z}?$FGsxL~_I GD?,Y-Q`KPKy9   5  PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/DerivationParameters.class;o>SVv&FtҼ⒜Tʂ|}Ԣ̲ĒĢԒԢbvFĲDļt}6FFf(  PKJLf]   `   PK    A             8   META-INF/versions/9/org/bouncycastle/crypto/Digest.classE1o0iHh!9<u"U0 ea2rB9G.RoywO;*~0+Q-yeJv bħhN"g)IZg0pGV7!u߯:!3VyɐdUQhֺcᡕ-cO
WL0
NG~PKBH      PK    A             B   META-INF/versions/9/org/bouncycastle/crypto/EncodableService.class10 %<#T 5EJdY62G|(a)fޟaEJ>GYnIfşC^tuh's0a)cK @qv/PKu   }   PK    A             @   META-INF/versions/9/org/bouncycastle/crypto/ExtendedDigest.class;o>SNv&FtҼ⒜Tʂ|}׊ԼvFĲDļt}d(#. :xSK*KR}RK254= fh6;  PK"      PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/KeyGenerationParameters.classQJ@=ڗo讍ܨBBt)m"iB(&Tq!q̹pι	H!m c":saO7ñt4!w [AyM`@0HQ{؝R=G=zVB*}̔	L	X4~=g$5TTMPOps%җJh/oS
9Zh'nb<琾%&L'IBG>h%".q8b)Y7o1
mͯhudXl5h<!ZjkĘQ~\{hA7b_PKyTB  :  PK    A             5   META-INF/versions/9/org/bouncycastle/crypto/Mac.classuPJ@=SDj}Bp Z(tjӑ$Lb4~%9sϹ~|~iYfe<̦&pZĩ.xch7knd4|cQTު}OhG{*r2S`;'ZuD/x)\G*7<C+z־6ٓҬQOw
1/I$pj[xOƋ^)4)G[QW
4t:|!:1
lEb5T!c1PKa0    PK    A             B   META-INF/versions/9/org/bouncycastle/crypto/MultiBlockCipher.classuP1RA9S_@`rF~ 1*)Bekj9ܺ,i>GY,@B0ItOo:=ڮYvHӕjz
ׄ|M|V:Kgrc9Ϊ
aI5mえe=Xn
uTFMw,
G31ǥT Isޒ
]"O]B;p`PK{   =  PK    A             G   META-INF/versions/9/org/bouncycastle/crypto/OutputLengthException.class;o>S..&fvV6FtҼ⒜Tʂ|}ĒDԼ׊Ԃ<F6̼;FQ
ĲDļt̼tk0vF]\&`✟ʠt0!i@ٴ30n`  PK|      PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/RuntimeCryptoException.class;o>S^.&fvV6FĲDļtҼT׊Ԃ<F6̼;Ff
0F.NFQ
̼tk0vnFtҼ⒜Tʂ|`%,) A4 	iF ͪq#XH*-TƦ"  PK"]      PK    A             ?   META-INF/versions/9/org/bouncycastle/crypto/SavableDigest.class;o>Snv&FtҼ⒜Tʂ|ĲĤTvF,~Nb^RVj2PA
%y))08qM)wKOAACSiIfojn>H%	@  PK@470      PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/SecureRandomProvider.class;o>Svv&FtҼ⒜Tʂ|ҢԠļ܀̔"vFĲDļt}FT )+i,D1Úư2 PKy      PK    A             @   META-INF/versions/9/org/bouncycastle/crypto/SkippingCipher.class-M
0D糵g)]eFA/Ӗ$4Q\x %&l}tXn֬w+)Bcxo>WspSIXd$!rBo*^\08K(WTS$sm~PK 	      PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/SkippingStreamCipher.class;o>SNv&FtҼ⒜Tʂ|̼̂\̂"vFĲDļt}v6F`dP#d#D-LFf&Vv0  PK?pu      PK    A             C   META-INF/versions/9/org/bouncycastle/crypto/StreamBlockCipher.classRAoA]va-bAvb8xz 1-Iv]/=hh![Jto}o)0ua^B*CzzC銚ү=]ri}"`P8#2̛V;8H1Xm@}b5
npivr)#)a54d3%o	'b ߋC,wnWew]#5{"۰
gѽ%paџ@W~ u,!E4&}6)r;;;\Y7k5b!<5|[nHlYMzm->r?z90ȲXƠݥHvy1X'D
Ms2YTY>pvB,EdZ5FGt	/{#͍a~A-eoQ<+UJkF7TC{BA1q:|t2!z@$lIXP(J4q~PK+
    PK    A             >   META-INF/versions/9/org/bouncycastle/crypto/StreamCipher.classuPJ@դZj@<$䩧F=
Bzچa
1փGK7x|}?&	NKۚ+'iẆlBe}W5%|FO$ Lpw<K'k$t~,>
lGp(rckJSmBie]Eev&q2ߌrʨ);֙#qdFzߓ%[|<3׻Ks4ʭ(C8Yp	yK!/b9\?PKIf	    PK    A             5   META-INF/versions/9/org/bouncycastle/crypto/Xof.class;o>S.v&FtҼ⒜Tʂ|4vFĲDļt}v6F5\\+JRRRS\2SKS2s,h'OOMOF|ҒA@
t2v  PK#f"      PK
      A             8   META-INF/versions/9/org/bouncycastle/crypto/constraints/PK    A             V   META-INF/versions/9/org/bouncycastle/crypto/constraints/DefaultServiceProperties.classT]OP~ln!@Эc?Ћ^,A0YY9b6B&oQۭ3a8oyӟ|g	aXALE#koug-t?MU!^7}
 ^$FPT1aΆ#8M[^F]OȖX9C-{Onsԫҷ\_?,VkDN0_
HCj	鶊IL1$m%5i3eH-U$3V	;*qzAo>Wl[fC8;CxrQ,1:r۴s+suq0gVxE:^

&۵lj䕿JCTUr+u{VmBS7ťxL1$WH:$?`op,,ӠFC&T]L(%
-B1htm018>]@9G.R,"ԈT8qE)BFo!Z+{b wm6y;D,o `T:SV3؈Ledgd?DQ81Ix>\PK^*T    PK
      A             4   META-INF/versions/9/org/bouncycastle/crypto/digests/PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/digests/EncodableDigest.class;o>SNv&FtҼ⒜Tʂ|b}׼ĤT ;#@VbY~Nb^RVj2PAQp#S2SSK)%%@
h'!@
t!#"v  PKۓI      PK    A             G   META-INF/versions/9/org/bouncycastle/crypto/digests/GeneralDigest.classUMWU~nf Ŧ5|B-&J,&E:iP"I2iLd!;\aƅzr<~?+G|d
9ży~ܛ@}@ aȴьY1լVz4kUKM8aQ6
Y}b̲ <[fN]5ނf$hp"rv9::M`O2
]nR!wmhѢfząPxGޒqq3^Ycuo*I$_эZ53gxCFnݬYv[xt6bE/+- ޕr*j|eiUA	e\=gIpG°(c](FKL!?m
6U1W*1:L#_%yd5SB,KqL0,3OL+WIܗ0%d$Y~N_6!Ҍ2	+fӌ8Wi#*m6)s1R2f\. ^4/y~2)m^0'ICR]CXT"e~tP0^M[7rz6=`8!e[k|9=,5=7~D%LlkGMbK9h@E95WY4ѹ,S=^m^'T)R
ٖ8^7:k*쩑̒n>裡i\>ӱYtu)zBx%i:ngήi(v@W1(6+?#d1@kk)ү{T"{.!xo).qJd']J୘|rYe(9s#D.:n+ "DX]a%JʭH*D].b
2%?vc,J4-pEqTS
h3z
`Gx
QN=Ǔx@Fv%Qg[立܁۔ĀwW(H](scӞ=;5>%{5HfZ
JcFI	#iM G;Nm[Ho1F(mѰۯZyqά|VuO"߶NЉt9q
yPKN  ^  PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/digests/KeccakDigest.classXpq#O#H914`BDe)Yv6bv( D
 "MʐS˭nƪSک黓t:Lv:LtN'}~@Ң\Sr{{w*
K!?5KBnH/gt%*sf"],6i3X\(L\H4pf^
(HʇΚr)q3Nâ$
E'oL-^RVԇSS\*?f]oB!
K.Septj3rh??T(.Ǳ
}4dV(::GRDm
zf5Kߠq>B(qC3gr1U?sfBl=vEoZ
61Nzi@Jlb1UI*Ţ>M&)vE+0$o(dfl4"[Od̽!3?[{'dtj4?B
M~h,o7zAtBw$r6H'%j9=dSÅC+=ԤAwДBC5csy0_$qal[
	i0S97x~>`23gSi.Kis-}D}vjf>]ȘDL	hZksGNC
$;-rFޜtLk4(.CuHOe\85ǘ,2MN6:iTҩU4)d¨kMdz]OxP<
aI̓4Nkg<Z.%;VhPOMYYNg-4+~J32>}uGk-+½*jzIg1vVțѸ64`x`QH(#ٌY
g駽B'%l^!|"y
gg$ھ.p1ڧh9[S|smۄy.3zѳ)pdWN}iy<g.xJdW(ye0fc+d_TKB*3LÔtM\d|>zA"iBE7+grVdFY+"mM:F]WMZޝ*![yN)B_g)Y_D@
+*`:~e9нp۽%![}}^?B
}ސ~
$IoH	c_v7a*7Ul>cBGVonsOYNc?T'09b1'V+=zZ`W=:[c	y@mZ+-\ECgvz95>/f<5*/? fOw6ʴi¼K;p8u<gzo'pDT$DnPD'5cBMf^Y\X7LN|:x~lZjA{O_jƷ's>B?6sL'y`~) 5z%cNjwM94Iў|wH/}RL,*N..]k^<\Y07a?˵"rlل+|,ȥJ%TR+%pVxfmk$яސ2_,rh,XO T"jJ7HLW:bp`j 3ERe'.SSLFE
Z;o./RG2u.Ѷ+t˚t,Qd ]1zt`;w0Ed<|^Qcil
2:*|*
WhHN<`QWU1bQWRzxz^|]PUAx5Yj뽅{دo4`!Yc>¦tѻDG%ooJ5q^+8B=:zHzv8T_>5L]AFf|ut}2D8IOu0yT_e=:p[=K4jy.A/K#](Wx9E/QڗwesӪ=nwZX~wKY7n^a(_B9:ao3v7b|z6>/6f!<oc;ez g9֢iO.d׃Sk'$@z³NV9Yc
׸]hIe'5HVJ+xŉõc)q@kg7KmL딣N{aW?)d_mg
3c3ǎp헩5fis~f!5n[˥򍞋3Gd>v̈+9Oф..%V˳twx9C796⭫ffF|a"a1l
?v,ް}
RߧaIޥ^us71͑#E';~ㆬ#Krf:w=ȱ
xHnoQ/+{/N:+$y][ι@8=gXxߣ㮽9,wnNİP_&Ϲ|d"Sw R	\cr5{|!z{V**M^~0e;>}gqϑWSgjn2o{3_</&HIA#
QO{A29e;}<e/~mMe܍[ޥs
qv7`5"ۑ]1G@d/6^{(Қd܈ޣF	%/#|+ro88NpzUinĄ.'Yw'I>ݛ0/a(
YW*vO!]
$	]WѡM	#	[W[jքѫѧ[FTWC	#U0t-a1ޥ4T
*bUcXȢ*ګ*UVEGUV@-|"X諊UcLD*"ZCUc\rE
Uc
j7SUcBcʨ8qvWb0ScU.MNP`$1A͉]5vFQ3CU3RE˨W01,bFǨO`U5`$f-bѐ{,լ+ !
@DP+b5Ĩ+ [A uoExXDW  <"n l!0
""v 
@vV n!0" {Aը AEzk`P
@D
@/E
'zՖ
 >Ѯ* # zz* hkc
xJrQe;<[gQeOҖ9VzN3' IF4[%YD"hQe΂Y	Ţ9ð@hv;,iâ"eN(y-E/s#e
Xkג#z-ϒ+,*9'vb-lC{9ӆ@A;`IaI;,jhS{2gYT|veq\^JT'.cݥ%uYI-<I~O^H>$ѢD3W(@ l퀊 lf
" TUE`>-"
1
1 &v Zs={$	&_^}Go]\q.;7
Ar9DO%;|%Ӈe.רq5E3ą#R/Lub]ԭM(].coIg.\W9aF+AIr؟&g!
ϓ3*{_CW@jT)DB %D?B5D G-!'}B8D$cBߡל)>\-#5[YZVimPK!;    PK    A             D   META-INF/versions/9/org/bouncycastle/crypto/digests/LongDigest.class{\וe2~eLFQ`FAd1%&q*M/y5iI&41Flb6iݤyXӍ!eϹc-=sν{d Xm,D z8D3t8V{}^O0sx}=!ZX{=jq+Ī4b  q
Aa`q{g/
:5Rf]`PM4! *M@]Yqty;M+V\4
ޕ97UIƀD].P ff,,pqJgҼ<B3M鐃1y=}׎os!#
̀WE0>ymfȥtkIp(0
ĭqI!l0l\=THs(Ԝ|)G(ךY9Nf5k^kΥBf15)Р5KX&ʸ~=;
hVnd7	
uv9;C-~ggGmw{7[YO]7)-ÝЅ)k\kjxj.ԓm
,z㘒Wve	`&}La))t(
:BM}S].y={!ئi[?00E6;B\y@ +
g{;j^
'(cviC\E]U`#u{PfVܭU畧hwR13^vѳG3ʝ8v")|mqΩ}O|R0c~(KxKi->ִl;͓/
OگrXmgl^|~÷t~gZjg_GN;Tďzsݝz_iyp8_=BOtV~3Ū/}q[|WŒ>]A~Ě]ΫVZ7xY;ƣO{"/#.m-ϰ2t8c?}KL}/.rwq/?to>~*Ml)*^`o%];?rQ,Ə/N~kYx$~}EnZ{)|1|gw,:sox?zyh2^9u/UƗ9ݴ{>W?;w~o˧^<47<W:W7<;NFŤެ\w!b_K'n@Ω?Lg<rϽGYvD e߫~+w釿0=332x;?ޱdḔSGy䎟QM
ᕟV<[7}o{p󮚴o,ӯUk7|vX!Yo߳g`s3}DjvR-5.kYyCK=]>6Ὤ{z4dXb?7zzZ/ʅ1_Hk=͝m=Sq$z%~܃X%LNelXz=@d0;77*eS+M<蘃ِbQ'^qďI=}$GX#>"~m!$O(
[2v>pFrmL65hLl1f=6]&qN8?b<eb!!{vN|?6TKIG ,'Ӥ0PH,
C$%0+PA
C&5ĺ0]ap!4f2<6?q$VFf aWc|(UIEv5SJj&TaWhR]-ӤZIuvA\vE-8<0L]]ƬZJQlpEX).CT6A@r7c~ZBѴ|S4m2M9E&NѴɼS4m2M=E&OѴS4(l2]w*gR1:Fu9y"'62zDEN\֊ެ_gP9$d
Z~qe
8ʈ>tGzσ:aH3g`t)˵
9doM5D鳒`p9oj:}<:m&-hVf5x^Q_Y(oX:t(7}3t-wl?X6xe2#t)#3U;hGH7nd[:Yзt4ݔFr:Sm
5X9栛/ B.
{(Vml7@.WEϒ/QmnZouK&XW90Ipl-J,h<U-PCLM!X'Ehjuۣ5T2'bN@Ŧ8
ML
LqnnnnRJ/*ٜ`3A?7ͦ!9)9KJ@"sx<	f9Sl!؎̇9b
҃|\˃&O1'raNX5&F''ra')<ͱ6+9kẔJD{#yĚ
X$1zABlx\	lbdȤmOVYXd
C{E?؄RA>/^0@C
?Jl(V`X	ڏb

pSC_V	y}Xvi=IX%pO\QdF#(,7C1rb&uE?m5[,H0GIT__=jQɲ}5EBaJ5
6NdWJdBKE)kvˎM}=r43[lb&j&I4\ZDG,0eNVMeՌ՝
Y ^j:[v[ܭn55FVv#!v+`/"N~QcE $qD?FF$
x$9D0BB7YT/"&	x	&"]ˈ 2DLp
%5	xap1E"
84BL"GoC	-&<.1SL|p1KEDKB!f1G_E@%XWy1|tR8L0\XD`FD`&U%"%#KA,
q`:&#
fAfEX$4D`9F#~w2/PK[x
    PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/digests/SHA256Digest.classX
|Tݻ\^&I$ B @	$Ϡ<bK**`(ZZk[_V_*5y%fgw?;;;g} &1IҕѶHp}0ji0>EKCMjBK̛9aRl `c`EBt&4`|AtVM_
hB-7)O"DK`DK`m44za)ojkU#ڜuA5P`Bd0dq?MV$2

0H%C60H<	*5Z<i*ic j2	e!hntAu@* _d{{If`-UXP(G"(>ő(|J,(~_5aIF0bcTL&',ԸR}gaN^9Ζ\
Ơ%jS(qJY
փ0N<g2CWFEAd0	>4Α\q`4!h|<_P72	],{ukeXjt'RwI=_z[FdNn;Ah@a4; 9֓<p5{gֱZEVH!kc
.
W3H[ji"Qo
/k옔bV"Ƕɰ"%Q<Yhp#eCWaM4p)\1Y
5xi:woI~nw3|8/N[rem╻xe"Wp5\6Z h)@kiZGCdNC4S~?ǘT6NC- ]2B	ƫ-d2DMѐ2FF)Ih87"^\n	^;K1fL̿Uv|"h?m1_h>|xǣ<x6>zd'|./;wpqE=7w%xƁom]h]#㮹W#7G|mӝ|;^k*1}~|?ٓ)mm&>c3/q
«[)\u$ja~cO|#oY?2xa{lIrKg=21.?o|ǛKqۂQu'|kW|=_k}*'85xW՞2:;wNM튪9~OMTnJDȫVO~e!sxT}ՁX-
Kpѣ4uJMEx*63㳥x
jBc?Lz:
piҚ)Oͧa1z,F1PX]F(uNGDF=!Ѣ{E0lkYѨF;VjƄ;'Z5gHTC¤<oU4ڴ<m}Lc66ːX&>A~Cժxwn E6S0d^ VUXy7ɀh +fap&eo3WMH,/i*1|(=(Cc(߿Ak|?|lR=lB
- EgQQW{8O{$_S	9#	!D2EZL	#nt]Q`0=G! :}` QF:xF7~0	a쐁qNs/7;iiގ=4@D)1
%ٞC0֣yN>lB`g!DNS8@n^j;EښwqCNXI3ghs{ʫTN6(:V(Y:v(nCK<C[|CkC{b[8khYJ]LtK
8۔u}7
![x9yl1;;ݭOZXI69EǏ|4SQn	ك¬
ucH J%mwΧ˄.;AS*k5iO*X /ٳ"`܊kMygrL~nǣFQ<%xA6zxNAWP&
LWR)bS\+\ۮA}þ]'C1(g_㍴Ї4Zmx^Q*\ʌ=Pubm,"54\:(8l,965Tf!Y7e6JD(d^p:nvVisJzg
evio(Cꄝ.wn'DÛSrZl!`))5LG9;bQ Kjs;m
v֊siVPa4ւ tZM[	l璦Fq-5t>Cqn3Z	!EJ?-E;
 l߷.^Wk
t[@0qdotБ#cHGxzϽ~0HŁW܏1xucM(MaRc8	4/`9KsݗA2^wҍ=2-je躍9J*26(s 󘰡9
rSe#'oP 	'I#mC/^(BtBd 0&1I*zf䚔"|aT{{.cb
2HB7))c4<lBxYj)Xq$`Fh$_FA/2T7| V
F,*4ԞmE{ϑI(B*>s#YCd ;
ؙܓhٵ!eT\-o6q/|~8TE'd Rxi8T#MF&G*QB<4C<4SS<t8txix
ixixK[<4W<tayyH@:RiQEKHǈ?#-/#- WאבAZ"@Z*txx7ߑ%tx$62]S{H-\|B4!#3Ǿz Iil~3²PK*
    PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/digests/SHA384Digest.classVSU]Ȳ._--mP*-W!EX,ɲl	qAWg_|Nut?-XJ[x9>n~
 ]U"pH(ahl=:gJJ9-WtIB6VNc(fhߋVo(QQiCrN.tC4>܆egL(؇GVVC1B]FDus29p!+M7rթ-8hB6LmQu		4*sqȫK('~f"8ej&/
}Vs@Shek	Guh@8 ӈ"yB)E9P4J?l1t)wLtRM-2Te()kЇʹ+463'/y;x'Ƅ2+)AO09Oun~埤Hs_iF[z.ǃ?+OKzv鳻c.\~>F|g4Rmկ%y٧.N/GJDIʮMaP㘇ΰ_לa3eۣqMs').
Y+ψke8#gٱ8¦liT3eppYF=y5q7l|˞׎
1NL]Ɍәͪ$ҺS.ݲ
gaiB]Zzvj4z4؆"k7r:'H]%G>#;[ז,u.;TQL8I} Õm;DWH*5pLI-1A{5VfBQ"kPVQZ">},NWOuD6X0YűmJTETZ/|ǿ|oy܉Nrutiz|/>G|燈<eiq#8aDhD
!2^@/LOBCD
H.`ao7[zi2Mzhy>畖5|>H!L:0cp\i 
T3^_ϕpoy(PK!o    PK    A             D   META-INF/versions/9/org/bouncycastle/crypto/digests/SHA3Digest.classUSU.7HJ-$-`Rhhl6fvoq>O&8P}Es7˯63gwws== wDõu]Y
WTcԮָ)74^eSGcM]9T1ezrj
!̧
p!aD#z
CAs-
ZeXv%[j0xV7\S5j9qtjfu]o.	g9
w->|>3I_/YjVPp-2VtQfE,3~%KkZg#z+LՍ53݊zmK/ODvc>' ~Zr,D!sPpY`ٚMՠ. ~4ɾj]5[_bD't3!y¦[{/dAo.gޓIަFep]!.Ԡa|_!\VkҘ3 .M*r+9$(	Yԇ.ax{WXnH@y3Í鄔nah&FZ;|F+LĎ˦Ӽ6Q)Y:P	H47t"gMFvYmp"~Ǳ.1$V	a
W?$}	0-pjժe^N,Yv<0 k
QcKc=ԣ*d'ل	&Q_Lj
,kV>Yg6OӥQS
YJ%op'%*מT:WKh?ߌU6IoHOH@ןt]r˺mp߻^w/v
8z6dhQwxm?im?$HFKP13rу(_p
u{"N182R M.?<m=ŃUI~04=Lǣ9o#̖əVdo,K%zm_ɼq(DCߢ=;_χ>;:؏00I9/oړCًɾU
R\1{d+;߇ᣃnp7d:G6`-d?%e!鉣PK8P    PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/digests/SHA512Digest.classVKPU=
 _ $$&|   28e{zP&JWnrr᧢ ebʭrҝ쭔UVYB̽z>N|R<cQ ٴȢ5	9cJ$am32䈘bi	e:k͌" `ꒀÜ)B ~1=%dRS:[ۆK@AfhvE(Hϊ9ag[p8̴bٚ0CԇxΏj
|fFQmɖDJI5æ<:ڔ4x_cG R2
9?t{{	x([,Rk04wYy4fefO
H4"ghF8/`$*Y
a𣓡{,i9"LfAM1lP`4_b8:nf/lA!EC5q	,ԉ˅
n\Ukܷ|OXտ7t%V:s{_O}zx폯yE+MC҅^7(	>	35°U@#FL*IvYq&)k9%i36buU.|vL47fz,dXpYNUQJʒ_׍'=rkGf'FFgh2fٰ/7D-NiivjuJ^*zv59ˆٖf3کå4/&kA>pbw˙IeՔuܝܧ[bBq*{اtDR!t.#NV.^}VhM ~sqD!HVH-H(FcZAK8yz:iM_oԞCCPIhMo
ԽxWiS8i|F)^}x =}~Ivtn;MR|iRrh!1C7zHG" 7r&f$aaK>Ɔ7w"_ /LJ͛H"3-LpR3T&fîs&{jL;PKIA>{    PK    A             G   META-INF/versions/9/org/bouncycastle/crypto/digests/SHA512tDigest.classW{p- lp!,	mn 4X&;MY:$aNH'w !i:L2<Z:4F
RL$}M7}ݙδݻ`o?~g/ h?'2NIxOiѭQ%kp45mVStdT]ˤ*yz	ǳj.L!aǒq5kdÝm͍urSP4%em\dL᭧Jjv]_ݷ_-	s6)J8hp$RJ9
bKTMI]sBBe_hWEM
_[vF9q%TGvH]pMUcY7KtJ}M.̤YCB_.(1e
UMW	aZ)Apq܅EGe1ՌTk5G_	Z]ƓY#d$x	5ߪk'5XwLB0_D#2 :;uLgFͪ¾7l{[,1d*ܡJ_J?,p/Ё3T
RJp2|aPI&uڞ7b@ZtRCϨ	s
fVx@
"ѯQ&%+XRѺ}J."G.C`50y4CTXEf!R{c;ӬzH`-:JJ$*ƺ0領dnts}6,&#>&PVG}>!0%E["Yxebg5*V7
-u!IMjJ`R-u16106(IJַ
lzS!L1ݖxMSOZ"SJiK_lxқ盧Z/uH=מּ47[/9<Z[=u<Ŀo.OmW=sk=Yٚ<
+.'1Z,Y+8N.+NП_e|C$Nъbw(.I17_]<Y£X]Ӣ|	42I:2i>H7NcxH`LYTOoh✄;Y15fhgrjI湾#pxRZOR5p̝E	|/{9m
'?#Eb$O7O鎺U"QwzىQ&y数S?K~7QJ礬E;t/ܜ31&
e-䬑+.#uA4W)@mOmܢrH豬J@GKS{7??K;URU;8kRT4)/HڣMb)5;]s%7f1{6Qc0]*TglFpkJfլn+TPR1f'^zO%<OM͖;mۖOI[>mgLF`>=FZJz03<Lal#R݁aLZct˽*+}fTiQb @&<f00J#HHY+$sP+8jP+akp#k(3T`#PO-Zxͯ1Ey̼.b,?e~i$lTX%"r*ItUGB$	>B!uɺL6,ĆL"fA}y,cC*A-h
%Yφ	[߆4XLP5U8:<CvV3k.u,䱁<XCe'˽yܗr{^)M
xgٱدϱ[/>^<; x:𥀧|6y|֙zg'vuXrBK	p np2>c!-,RcD{X籗>?/2J/qo.2]̯èv>U(XC>o_} tTK?wp3A'9:T8*p
]'\.=R5[w9a?}O4`΅_Ka!j9[8!jYLas2Q9tAz2K׎c>JuxBC8oz.
By[ڄ('91-c^;mSm+_$2`PK    PK    A             E   META-INF/versions/9/org/bouncycastle/crypto/digests/SHAKEDigest.classVSW&WHDAhb
FBmlaeٍ'mۙuڙtotE}irN|9׿80켦jSif;МK°FTahѦm隸h)BːHe;GcXž*jc5,Cǁc1ؤNleK5W<;%ag
FN:`QtC4od؟ʎarܙ5t~l	4H`C>Cp( Zl6-*ZY0l?}aﳥC;<N%BNq]צ}FINԚ!W3hni!%n:T0i(l#u:$)V2l*r{7dά\ߧ}°4f"W_TI-~8B8seԧ(^fu9A:LHWT~wm'Ote)e,/*qC*N5Jd}5deKpRb!Qahtۑ)"IJ)tH<9U㴊38K3J
|]ENH)\Tq	$=OjaTUOjeSu8v׃>?xJx5>Y㸊7pcB5[*&Mhʼ-
H*
T֐^D	RQ${WbZn泖ֵ\'t#G'YՃh2&SV:/݃kFqb,3rӔZ!qҮڬg凜-qO$|IQ>c˚d*E?m
G+r1e(g
Η$KZHRv/$'m'u6[T7e|mQ𑼯>fؽ̖a< ͿNh*盕7R 9YGl{\{ϗ*qTA4s$YΠ.w|FR|T|о>A50a؈D/ѯlwpSC=r"? /G[GMd-,,b/WpDѵ2>l
 j6E-BQByG0SHO4EJ.Ym}ҺQrb}]fsP"1y7  'tt]dAv+N
ڛ-!V=PKo)xR1iw	FV[D#xfD@uA6mP'07(LB"bp\OI
$BDx.Tx/^OBo$V&zt"ux&*S	rE1>1Jټj|kT{8ԇH:e;!<Gh|D\O_ZwVs "& q]BMwW`ZJ? {|)>ǗPKP    PK    A             Q   META-INF/versions/9/org/bouncycastle/crypto/digests/Utils$DefaultProperties.classn@O'4!PX ElM;5S9v43wbB\'HZ/{g'wwQ@ACkKq%X$Qp2%}P	v笂uT#OuINCal,PO6
U$5U?b۾NR[%
6T֜\d8N	j<*(eit,F8l`J M3qj#u2J8xDn۽ՁֹsF(us9H$mY6!/=wjKd#oElzI"u7H9孂&WFs*E4g<W̼M^_%֦ofgEy묔-l߀_rp}4ǵhZxp PKrU  J  PK    A             X   META-INF/versions/9/org/bouncycastle/crypto/digests/Utils$DefaultPropertiesWithPRF.classRMo@}:	N J? 1-	HFyn\Ƕv78 ?;nD=̎߯?~x2șczO'ϼ{f밈J&dkQ/lG#G+V{j𑯻2ԞP<}}:33Nܢbb1_?8[3Qu2ݐ>`Oc
7qF2
_6w;#S>YƊUkqyĴ6;tKbxtf4C\;<z;_
jkl4[MJĻc5C1sɇSm+%W2e:9 ȑkȵzG	A.uzO<Z&([T/FU讀VhXO(Щ|F8K`tV*Ʋ<Ӫ4lq~f;ϵ(PK^Q    PK    A             ?   META-INF/versions/9/org/bouncycastle/crypto/digests/Utils.class]K@c]1~jB\AZ1q$&e2NUQgZ]
$gȜgޙy|{ 6[Bw9ί3KB: }XQ\KKd_\Vd%2q$\xPD\aBrtDBz	Se=q_:k[Hc@0?s2d/.,	CzÄOiER2g	kF	t@іvM`LClPMDEh//m[BµݲycCM<SCXn1Q$Ѿ?*j1]IW/&("?K5ПzB'02=Rl-Ʃ}73/;d1d2
aV}TiCqAjf>PK[  
  PK
      A             /   META-INF/versions/9/org/bouncycastle/crypto/ec/PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$1.classTmOP~.tvUF_ؚd	TkZޡ| Q۲,sssN@	%\$A%=y7DGe'U!3l:}h
zL>] U,m^@;lO"lU!B@JDnb|
? 1-F'DuiE!xYl3 L\MD0#ۘ"*DP(*ּ4ԔMUo*n+mYYuKMC[tf[5s]mia&w٦mYF\9j1xm;s|O~®b~
>kx@4fxE	 YPgx&:KĘކϨGFT³2.,E,F8F~h	fdݐ:Ӛ>;3C2F }DLiih(|&w 27 4V0;TqX=s'
ʨ*||_$#Log`~;JVt: ˟2
 PKWJ    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$10.classUmo6>&i:^d]׽'[:o5I9wm-n:]hv=8V )]u;/M`Q(@V$YtG=; Ldp	.#X~VI:4UH~'m8y
C#|g0wLV
PD!lYQA{۽A:Qj&.B}O*uGk\<ivÌ8=.8TxDrL)w
J;4T~u3~m}i6w\GLk̵
VDc*.Pj_Q,z"a*]O.uG6j͝ =:"`
)%ա0I3].5Ø!p{y=%N޳f08yJszE(Ct/E Y1Pu<#, sIv~<miZJPOP!+|j=W&i]MiG$؍۷%R˰Vxo'2 zl6IH1Frz w9+%X[:Z \A"9,bߤjoSmM[n͖l_8cJ4}"[AçIECr٢p-A<)pꍺQQg-끛YAEA<1QwH0E`s8dT|*2FQZ+n|Uem#9kST|
:P2tF]S:HhfB]^~K[(LبԌӚ9ԎNI7c!aX6L,
G#C$&y[&L@J}@SxWr \M[83:d>y=LڍC?7_[[G,Ϗa} }bmuz5P{_
յ՗PC	xTmGW_PKQA  \  PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$11.classTkO@=hTA|E\di}dɶ;&F"vuҚ(~!Qiָ6ޓ;{@1KPpg	֒JcfyaSU_y=N}؋{#jm[$~
a/ߨ<R,OL,xLoXϩ2$˘"ἂ&ҏ KMJ0xU4M#
KoI\$6,q,fkkX-˲Fu˳6s5pYWq`~<A\>Jۭ<E9}øqYd\
	7<?T(%T#='ʹ<ji3nځb
h趭vۡzy%X1mu|ݵ̀іØ<eZ2j0|{ejc^РAH
qD`ZrPyNzqޔD<bXFUBM
V	@iY:sB2u9Y)xP@N%(ORhE
I?]M0ዌE)s~a6&4~	6x&x<aP|bViꢘIqr4k©i >62EQ~&ļ4;sۨ>wTvk/F}}V	2%^7PK(  [  PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$12.classT[oD=:8z
iٶǗhVJ/R'ENi4x;*E],gn |&Vj`{8G[S,^yΕ7c:?P;|_羙[豁uv o۪æFz9aB0jb,|30E辦7f^iRl$ҸwmC麾`#$I(
E ]Z'2殉O,\egVeQ5WQ[ϊpEnrjwr:=L\ŧ>9'2OU_	å%ԓ2d,JÈ.ȉf.2^:,$}qIi|I7}2'QL+}Oݐ3Pq7pxzR,`qHEe	Lda9IPHq*ǍFaLfY4tD¥s,h*ig]I]p_-+(8fe;1p]d6FC.R'|PwEEݲUSUO:]_w]jЮ_]`Y4zLĊZ:}օ,aOb^5:MT׽u,UQ
tVңzREN}[oN՗Sx?멑牑ךon^8k\7[`t;~[zw` A6ej PK[8    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$13.classTmoDMB/uچʕ%]!ykRZ**U~2{b#)/MD%~ ?
v"U(zޝݙG>3_ `V{ևݲE*Kfi]R<H oS
fŬp3i3?;a=#1Ջ܃z|؇zkS@w5/ͲcpIXӅLFvYK1VVJE!U.EQ3y1\'}W<~^dK\_"fYpy"i1b:=\O{Y>̀PӼLR!3
k,fhBXgPChdpb("LVX@&Ć"
$IM
!NRbsL*P<RETYhd&FDJ$dP(GK"DDZ8H+B3lk	MNhHGL*&Jby[i~Շ[Vh?/!Oz6?EVΊf҃[n/Y܆aF}؆["u"9It;'=-|Wu߶ʧi֔m ~[&K\w1ŻO5*˪<mk]<f"/N[dvt/oFE^yZy
[WVp-\sKnF?:5pj7@?S'qmpͷ6/kvo1lkƍ'+;
nxzwPK(*    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$14.classTmOP~.*/*/*:q2Cº. 1DScf~"?eH};'>O L#H	HKQU?h瞺NuO*mqE,7N^;Z#H{J}GNt(3Wva!2[juc&B@JD;b_"?J3	DuYE!hm%!.c$S6JzzEuC7
Msî5̆U+W+"ᾀ1Cߍyω
vB 5Y|܍L>;ǎqVpP1Ixy2XEɑ O	֔TꆪSjrLbp,4e]+R2fڶYSjv]|&aϯC|8hK~ۋ	T%$,c {SR=_g9IS"bA5F]2Ĵ79(?F	`AGxbn]=kwf`eJX%=ㇼL,:\כ!AmK$_IlY>8bzיK}ەSw#ũLm-av8ٝK3ࣸr>=CPs
 PK-    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$15.classTmOP~.*/*/*8da{n!Y. 1DScfCW$ #!fvΓs te!%!	V~w0Ս|W~!,փNï~r]	#k.?Pz݈j$;{Gۢ
	)((Q5/<NE*$>"]cQ4gT7` G5[kXT7
lhuAQ1Llթe}	Lb`|;*@@ixö	&s#W~K7V5oɘC	<,?dN0b<Yds])VhM7kFʹ]ӝ^luLY15ZJɩӆdknլ|`ϯC|8}h0ϫTE$,a`z4O'9k(xCfbڃOǃPFZ(A3迻ow	ҶPHz+f?UQ:A$ʴA}7X9!_Jh3]BH❥3C<AqnCvTDEHqabK*L<9{)^+,AH@2o
Lr?PKJ    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$16.classTmOP~.*/*/*8da{̘֗]H "v13ZvJ 2v$ls_P!bY	7p`5[Ǡ{'&OcS~o:7tYh=4YHpeoǯ2⮀Q>C7>'{(/w-! #"Im	w0FP/q )6OGy,4
L±ӐjzQLuM
+Qjn5j՚;k"➀0Mߍ^uvL 5Y݉öL6?Gqjq1Jx9S`tK/u'D(j
6
PU4LT-j膭9SS
[QhCWjqVЊ<*Ma"
?/m?
X$XR"PP:L?LsLvkÏYuU2|r8E$o|!;8Vq ksļ1xow J0^'xX|47|vǍ"axɗჷnW|&!sispK2`='[Hϋ\>Vi9/+N^$:"M-PKs+    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$17.classTmOP~.*/*/*8dan͌ɺvЈ!"jw35¿/@$	10{=ɹyO "Fp7	Vè-{{1RًU>xEe4nF7_v{E)whW</S_{1/NշZR2"rܖpc+0~t	P#⩴@|q^QfaI4Vej؎^wSvLt͊YjvY[Wqܗ0i+=4CN\,#E6:>#*l|=m91Zq1Jx9ɫ6e _O8JY
i8զִEWih[jۺi֫Y6ө
nt,W3
ǵ\[++ͤO%,eԤH( :%аE!,b	E	X!.>T34F4%^$050ql'GcZ%3+20eڤl?lq}]/iy$_n_M$SC:.yPr;{[g]8y;d89~ɍl&a~j(BLAr_CP	 PK    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$18.classSmoP~.1:):^mKǀ`L-qMS-Wִ~K(m!Y0&<_P""+X (^Oض|6;&k˳Q#Xxw9A4. -v(S[G>sϧ~nk/U}Q"\p0wq*0'-ۦVi)!"XpCM(V	=%A:3ǁqt-2UMWZU7JŨ42Yk[iVRTVS)Z*W*qOZU׍FC3j%s@wsdYrz>No|5wX]=9;JlHxGHM}m
9A~oaGzX 2\ѲXG&,yfof;1BG-Fe-MVgulc\_.en@q/ʍ?{,G ÀXWyRNA8)oӠӠ"1>nvK[X;AX8}n 	&zPKa8O    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$19.classTmOP~.*/*/*8daۭ1Y6 1DScf~"?eHays9O}ι?0x !/nQ[KE/dߛƋ(^-|	:+\azKE~/N1fm꿓[EA
I΀X(?&=ߧq\$-m3\MF1AP*n56LtUMVe6M٨:.q/`
W{I+qFMIg^ˠ]/Y<fC0G 3E$m$;KC=	H54uS3S
Sմl]L*Ti)UmV4̦*k;5ېLpu
<L&I@U
6I"Ґc	%eX!.>;0z3#^ڦQ=E]",?y~F<ҿ'|!;8{Vy o*dzA3:0fiڤ~b4^G~M7˧ 3<jPO3T]8{[g])dRl]?	f6+0unerL*+#2u&<4PKb %  /  PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$2.classTmOP~.*/*/*8dA_edm@H$!"jw35mI(mGBfMN9O}sϯ?~PaACVaKt}sCE7eߛu{
c0:Mn
AP0F!H=Fqp,FlG]Y1v7<<8dx p'>	J}0^x% ;a4w=FQ^$FaI4ZeXZ]5CW5YuUm\T#5 9<0>nF\$nSI^`=qŎdoU9<DS3y`EtE/uT5UŰӴGCt*jPkQ6U֨[rٖf7|>KAۏ1e8``ᶤzT
S2*S'cڢa5A]@O!<_a``U'Lp,1/nL5[0C:H)i}DL4>
LڛOCF$<0cQ$Ir=uȢ\%oNּzN2Y6.MM\bjkۥgXعBV:+fh)Huf<KOPK
+    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$20.classTmOP~.*/*/*8da߻53&k@#|ǔִ¿/@$	10ޗsΓssO :j<Fp7	Vè-~{{qҥxdM~EMhnAT0J\A8}ߋ@vdC}ؽQᶀ;#\/I4$ؙK|(&J5Qtutf(a7-YdíM1LȻᾀ)L,\%H?d="Z4=n'QOJCOzA[L/vg<?h&ّX*';&X
PjFCiU!,fVjHRS]6ܐ$Sslnɲے]5rZhrZCm =Wjذ$uKCv6%8,c`0b̌N{=HhFuU#I(BJߞLuHwpoAf]#%"A3:0feڤ~b4^G~9&lM`+IoOAgyPO3T]8{[g]ild6Rl]?	f6+0unerL*+#02Wj6PKv4m  /  PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$21.classTmOP~.C]Eڮ1Y6 1DS-13ZvJ 2ba6/'>Ϲ?h@N["X)I^PȔ?֋(^	;,"zk\%`r
Ke~7N9M濧萉$!(_/IOe7	DYE!pkL±zfa
6MkSaYԤ*"ᾀ&0I0w
;2+@ev3~B0Q\zrZrzK4
x$1faP-d[B?%S
u5jٚn0n7]m:nrujzESJf+PEhjnTTVlU
hRõK(a;RTgJD{u=AR0OgX@Q@I"foJ7Q<8Yn	k.KxBSy=OHDJl_aΠU"yUy	^ԛ:02d?,;^~9>x;&|5g,|b<ɃRs)nAvT33-`j<(l'xGyE $",PK!_(  ?  PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$22.classTmOP~.*/*/*8da{ۭ]3cu] 4bȧ]hM!+D?x[Ha{^sϯ?~*bY	0LmScύ.ȧ)0,fat[,$~;kL-`@p2dSS{ڽ$%(]/q )&Gy,4±SZfR7nnU
5*T3EfCiXJ{/IL_ŝ|/E*;"Z,naǋ	&CW~[N~VܭC$<,?U`J/S=(

j<aEkjC-éE˖Ή(˚
i]1lM)[j:Fim)Y1Z$UiRď]םj5vE%,a`.~cӝƘ;5?fm	/\R` EJuH6A]B23?5QA˴Yhw(bx!2|q>Mi$,|O
0{N:wa ~4*	waD}abK'(M<99;	^UZ>|>=ȡfR
 PK  ?  PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$23.classTmOP~.*/N`okfƤH4OњI(mYB3&9~	@cEp]}}*I(_L:ߥ)QCcO{a/}FPT8(vtG%i+&lI׊xPQ᪀k 	Oi99$eI?INҪ^c
`K|IPq|l(b[MMPe˓Sk
SU!۞&Y
lYm]VtInۚj]mʦmxifPMۓk#˒{[jV[nΙr&]bf0j-w	F:aQ<$Xi	^yα ]
Sڥq+C}$qYJ}4ỵ݋*Q}gWNa)1S:8La6\(aeZN!VÐNO`@fSl$<ܳ,)sNm1oꃠ:E6.CLצocn۵zWt:'9@Ef<=PK0o    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$24.classTmO@~b
/(wprƤF@#<s-M(㶐&ٙy23; 1+pi_;I!b (O}[QmBdt%2;_%7("hA؎׺x'/m=M?n##v
*)8$N4هEZІe	(E(  r4m2Yku6KC߰iYEVQl*N㌂<?Ep~O'жD)nY?.D>^^&NSq\pTֲzDZ}į|]0?Ldemn06clc=5]wmcԠ[FMmny,d)9wt\nH%AV
4,ob#;Gh괟7n*na+
ꀂYd%U'艬Sj]BNH35}F`xB0Nř
q́2+:lx;$i]-&'ȂA"Ǣ1߸\rDANy;)o@>W0p>/J7(p|C#KN#C	ߘ̯7cqjϚ/)Wse
dZ]T	uPKSּ  S  PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$25.classTmOP~.*/N`ofƤlh!jw35mAW Q۲fMN9ssnEr`FC'=&{q_mݤe	a"gݠ<'ȕ[s^#3_$ܕc>dM_t/g"D 	&:	*hsD4#ੴ3|L z⸨(
A$44Ĕnb@LFE $[KC|p3ߔf;[w,tlKoڦؖ-S3VTNk5J5JMWsa
5뺪XJjMf+TUtŲnC]4ZTW5zKNZj*!]{r:fu i$
:0/`AC<"(V%r̂ng5HXE')e!-Y01Rz/_Q``{EaGKXX3eu`1/:Kv6,=/Yy#H7k M;KG ?<1wpP.@>cATAU~|\ kKXL:	+!s+.a:Aen"<PKm    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$26.classTmOP~.)/N`}[k#CD?:fFkڂ7%$ ,!f{=<{YrE\eZu^^X˱_y~E^ Wl	'P!zɎ|ߋpWtS}AhQ@Q"azƏ>%a
dg@<N8.ɲLcg!."0-z70C OF% $S	J6,WYuYUMiLj(.5MGU6Սzfݰڒmi+njgאm)ԶmKv--]S1뎦۲cRS3,+mEѭ4;gDӔ#t$ada/H,؍"cAb`ᢤNK2Zx&1sjAº,jxBR<?	#(ByF8kUv)68vʰNc`	~2d'WEvߋcc߉1_2@gS|$!̳<(5N l1o*j|\$kˇ\N<	淫!q)a4tO2K\D3YPK.b    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$27.classTn0=n)iʾ`YGpby
M,@(VB:Dr\s .S0c`,|g4)42=iO"Y,hU{oau`ya`XKצLt5TdC+\/Iuа$Io&
{ʕƾ$Г4e٢:!Ƥ2mS4lvˋ"{, #q8\88vЯWÑ)4W+*壪ʛ]bl`֛٠yui
g9"b>@V͒՞>Qq17E=*ASNXL<p]_
{a@S@A".(ŨkSub˱B hDw\ˋc2ۥ"8
βc",;u\4p	nՂ?@1iWìkBpmªq
m
X"Xͩ-iM)T4>6 >*9Ef]6p_%i:ZuZ'`&TKTrZV"C4.ƇOpPd(/Lwe:_Ur'd%TML~Pj&ȗ0綏O(x;gط	6Qpdv4+61'vobwu_qU-)x
ɜzjTsPK>  k  PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$28.classT[O@=bwm=vv&#TK],iʿ |ְN23gf~	`54p
	ӬMh;
ahW}
<͸qۈ3IxD0<;Qva3,ޫqF[ynlO5}0F
g811(X%Vj}NQyRJ.SՒ!
&p
\%5C0ډKМ`Q\!E
J-P3L'0\ym5ǥ9ӨulS;gy;X6pᛞL1&|MӠ<.e]nԤ
a0֖e@
\a93-,e
WxRFn0rdc:.AcWGFiQ0jC)T{aQ׊tYWݤX̀Ѭk%>Iԁϲ	LJk+v$E܉^Kz
0*Lf6Gy}Ͻ$<H=Ⰸ5~;~D\ڴ
Ɠ$3<1-4,r@0/[&.ȷ
0\:"}wqfCPE6YJ=LcjM9X:A]̊fPK    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$29.classTkoD=:8Oʖ&<cǶ!yP+QTQuVNi|i"*BHʢ.s !0Uk9ݪOòxYM;Wvޔ~?im^Uus﫚Wr~M:=4Na8ۧ*i;ϕ	&6`x8O0>CS/n(k)C`Ef@)%Ȇ{)"{u\$j"Y0C	
ye;q&>%-\UgVeQ5WA[ϊpY<y9r:=񡁏,|		֧R/) HPH*	GPY<ʘ3
IY^S7ϋDcnFRP?.")L8zHE~:<M 
^˄AuQ3k]4c<cYq3NL"`+㻱OEbY$%fӜuWTEp{ɪ2qC#!zK~^cݲUSUO:]_v]*T?E[&]3_]`c9zH
Z:օݛ,aOb^5iknY:MlZA[tҫz&o=`
.njμƣ#{St;[~kƛckwǯ#'+=Ɇzzo?PKgU     PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$3.classUrD=6	m	\ʺReMa20VGHJi^9ʟCbX)	;$fV.s/ 5l+t3%\e(U =QIV_|O"ND_~z`[@!YUxUQ~g}8*@!3Ώ{60=Q".-5zϘkk5AjkJ+ѸFp<UwҸ[˻EsgoTumT,sQ),x?x?'!	٪0m麩qmQ{7mj̲%OjV2j-X& ଈ	'f">β,u]>DY"3I)D

,6_[\϶کAF{D;{υ2T\J	X#X4ʀ{HF)ZN^rSQ_>TThPfŞHs\9xEQ5tYb<}:Ui0ʌޮ5zl56jLM4fi!&ckSV+[։jQvO`%ô^*8m.*^	_&u,q~E.Ji'nQAfKKXVv{K0D$2łbDk;Q`uΙ,cZ+Q"i[""v<ID%=Ӳ_Kk^~IYwhozBWssCs#s{OOyp;{7ȏz'<^:G(wb5qGs\"WX^[`Q{|
u6WhNQPl3PKԣ    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$30.classTnF>l]
I--涩g<cόf
5/q6ve;
T> :v"!V,s9|m޼_ {0=XgpNYˣ"{u3.T<H0oUN
bD0江g~vT7_<91GՓ܃{ЇA8`LV=)[ sT:fY^kcvcI$3K܃/ ?u<GymmE5p%+JP%VLmFcL8Y&{`((2LR0,$uLIydB3N8$,U!y)[fY'T%CJX$FZ
&"5GP1\k
Nr$6:
DqD 3HlhFKW-K}x&g$'i16ոM+nC>cwxpV{pu :Տ:)UR]t;%=.|W-췥UfMYyp6D,7!X0sUyn?ٽi0=%E6)ky<@0]ye&i]5w]a`˭܌ړc@/:؆SgԊvNvܵho%;\\.w/{7ֶat~ 9NPKX/  o  PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$31.classTo4nˮ
0(+c'uvbmR7
MRs;tMP_֊IQ'4-~?? !pV`k}x. +SyT/nυHmcv9?̊Y-Qos??ЯCG3AV=؀~pL^)[ st5/s[13 RݹLFo6Y8&JxfP= >G}Wl?jfsy
Ws.6,o\=yVLvNFO|҇Om*36`T#$L0
DIqpBu!&$	DɱahXR%*IC*Bl
sJbB$
UE20<"UQ0iDqJ8iLce *J6Ƥ*I$HtB+%R*rq2\KH
rsEC1PHD3;|C}؆/_q	.N_9+In"J=)U:i_sTblzhVu_-ʟ)+>(2X",}Fi(X^٬gi]:]EJX\	i]]<-v<k[Ö
ϪﲛQs`
(8;W{|sԈ曛N`s%\;%|xS:
PK8    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$32.classTmOP~.*/N`nfLF@"vuliW~"?e-KasssN
a}tG@PP
um/Aɫbݰ$(T&K}/_4ꋝl++aCG	nbv	ŏ>Qc8[,vIR$l3]իMxLc-1K ODeU!i%(WFJZQlٕiCR*iaTjS5\G,uÐ,G6e
m۲US5ZiR[֚8aTuuMjцiڶ4S$eUGWdRKJqW=ܿ VΈ};COyaGInF_=uô9,	x'Wu^qޱyi	fT.iX@%*Q!?}gUw	vf8`a6&(aeM a=/IlƐ]&6V|
X@=ǜ2u	60>0/ulcj6s[gXثkxȤzs1<J)2tPKu    PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$4.classTNQ,nW\THRcn@H !"Ԕ]Ex+D2ݒCus/3̙ 1;&X	!I^-y4Qv4"~\a@p%G"E'wdCڕntByp(@pO}Tn$Lhc}EIͿQw3j&#'(ɒV3lneꆬ˦NCmX<!G&1E0;"
@hDm?!,m~N<-1Zc9<LQ#i$;K`WҴ5ptò
TK3Ͱ-۰\r[V]ZlXft溶HjkpT%xyS/9ՇNj*"JL0zԾ0ͨb̌vk#HhFuEj
YHK~$x!N&2?Ny dzXtrOc`0feڢQd4r;^s~9&l
g+Io.@eyVO1T]wp^ild6Ml]9*.1}AerWL*{C02Lx5iPKj  *  PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$5.classTmOP~.*/*/*8dA{n1ٺ6 Hȧ]hM!+D?xۑÌo'> X1;&X	!ޙFqnSԔߙ1Y&	_v S(!Po!<Fqp,G|ǼZQvU02"rܓp[0^x9 +4S@t=EQ^Q l+um2qB4_ᢩbFŬf+L2 <0)[ݸݑH^gR%۽8l{1da{oɡߪ"fX	O1K?#-;|a{?'UڰꊦV԰;uMqj
eW]sQmMyQԔckŵFC׸:	xy/ m?j5hqUE-bE	KX&WP=j߆KԦ1FvkÏYuEjKR|t8E$ώ|?>ABZc
3*?UQ:AӴ⣠K}Yhu(bxI!2\xo|5g,]|K
0{N:ww/!~6y3QM|^9J.1}AitW\J{C 9>\D5jPKᬛ  *  PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$6.classUrD6IkW1mJI@Ju]|۴N錙3HkƑ2RWxSw'bXɞ	$$fV:g9wv_' 
0]L	p`#?t(*^K6z+R'a b O0]^)H@!zQA{ۃ=Q?*@!{0}Qxom,3)3wLߦ{kFO4*k7xJ'aSļ[&gف%Q`4,á3ϰ)Z@}Vpoŝ =bX{cKӨQOUǊx憯|M4p!/43`$.LA:
[:E|$=Nt
I%'E+(l;ABojv'?#POIV)v1k/eL+(cְN~{i5r'r Os$*/˧pyYNulP@K`P	6/a$(EksWNSY[-F5,שYV6[-]Yf4Y5
Ֆ2N0UfٺL)ڦVk5n:fv6f	L,ߟ'Ǻ	| L|Ap-R=|YKgmjo⼯.TXjF9Mx
Ya~zvEY}e`,	vni\sC>yL"}0qc%H$gZ)/fVG 3xubWQJwavnnwrqn".t/!|z>ڍw.p|+p}_'{£7dۤ
kOt7_*Gmm8t
s|P$fnPK$    PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$7.classTmOP~.*/*/*8dA_֭mfL@"	Ti;_HGo;b6lr{=/Oyι? TACVaK<
wQܡxf
uC46N~;~C)9(}'n|,ROQ;QoW6w
O)9	qRLvX(?"]ϣQ$)l5L]jaPJݮ:*SUmEʺHvݖ٨Z#Ә!XH}/`E=#4aۋ	[SW~KL~V<lcO<<0Z4NoPy?'8TY׭.
,S̆2n:SI:Tw,]qYbdh
0WL*Vh+;ՙH3T]}~ww8,,<QPUգmYFucjh6hXKP'4G׋GRe/00D#,=l	&kHR77iMn4m+6&kMߧqFX`->˰& aIDr	-5ȢsJԹkp{덑ʆ[Hf%+Lm\`v4
;JxVib}$[<K5
PKw#  :  PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$8.classUnDm&-ks|mT
8*!9Ҽs?	kP廖֞

,`KLŽJŞt +~2+/nԏm8y
B\ŭ¶>HQ0<lo}#C4?/M['"JNWRpJIRGXeEk9g0ZBێ+uF;^e3^u}qY
2D h m)eWA:+ɤ&ep%Sn
Ǜ;~zqܲGt)%ǵx誓SՋxjaW72&nWޅmn0ӗzBۺSv,#SPJWϻ9|esq TUECf>#|bT{9qMh(rS԰I
e,T2VVxo'2zD9s@I`PJ|r znrVG۫x65T
%0.ÂCP4W#)̲<duFˤtۭ17&[5xӶhӳ=^cV7㶚
j&cck-a+5Sw[N=5,kxe7lfeKp3g<?2Aii/	sj
_|C87Um+ANgHXfh-
"["G
dZO803ݬX%A2myևC~O {&R><TԬL4=W#_q57e>tgfFx''g\ҟ̅sfg*npۿX;?<DgGBg/_o3WR;
+skXOvVVW^VmyƁ en)|PK5  '  PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$9.classTN@brQATq]XmfN
$D"qY-oHPi!!5Mv/gs 20(aH5\'X6>af]ir$8Oո;Q'{A0XH&0 فC5<JPMv[A_QreH1EM0JP&?dq@>%0iZ4/Չ[4*V8AynRj;gz.M9MVkM֙kɸ;*UyƂT]}fqv¨ݨ1Ӹ/၂!XfJpgŉTݏ	2[ki.jQ۾i覣165=ӪIMy5]Йg5^goϨkߪ5mߦvRYuqꖦ-D^Sx`w!a`ϤE,˩s_&E>J^2I#G]VC䡊a'2J	>@Ao"Aca_<ktRMc`8aA/Ja-xv4)fE 	ݸXI.Y<Z(0ʯG )/JT4s%]t!Obb}mT'bvrQ]:zn>Z2"f[Y@M7
PK+K  J  PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves.classYy|Tf2<EPd	I&$$(( 
H!$31 Z}
7PyUqplV[EsL y?[Λ{{ν{˦>vY>	D]<$MVF%D0	&UUҺEZBH">/VQWO8x"U|(+FE4^δ%ѱS5<Z2ZS;bE%lR
FxpJk<[^VɚX"x~pqIpfIYc[:SI!ӊq[_tA	sD#`x,95htzݷ|mԣ.u$y!㣋	VyTL!נ6{l =qx{a`+`ӥO?0".]A{E8|({`;̘w2GE8|nTka( W$ ٻGR~yP벣DMXmU Ad3?	ȳP"[(F	h+c"t&ӝ%ڋځȎ	'GX8"5p2NI6Fc]󭛻uLK Ccplc5 eѪlܞ橞	8·-L$As$vC211qF2Ls)8$i	9{E5>\;?[)TLd1=C>X8Ae#iSħD|ZBysi@?ՎZ8M7v8a8qs> ~1{ۇyCOV+&y-DD<(a 	yKˉK'l*'*噮B܇jN꩷R=/%=Uk!:>uh<nds2V3ur;yO81p!N$ߙ|;D8`-]քe9ysGx)j]eo\{2"
z"Xz;ٵHu~&߇˽p+wܵ^p+wĻp+wB>U(]-l+	Iz=VIy+AWQSr0qr%<Lyzy<=mam^a{zJuz81ֻz/Yؐ+(Y3c)PYS5W-[g=΍{5x߳'vW#;
t{}faW3=8=>wd&WߤIqoJ?{IYԦ^Gm=(YO
d=(YoX]uJxg uv[#MDY(@=],ݤW=г qo{g sh@JoXwg 
tX'U /@C]|B)0z*p[T'Y/W(FzU!{EW/qA68YtKޘ\Õn
jVtT^jm.iEFZ_fĒ|'Tgx)2ǒvt?.ͦtp*SԲp\e-ÏE`*t71I1Vo+X)cJJbj1#EkŘXĈs f1N_-b$cg+1}).1N/8o*1f^c\fڈq9bŸV1:q-b>-|"W8cwY Fws"^B1xSHQ=G8dZ~+WQ<vRuՄvc'q /jirLe,}̯ܓI=_~wi1MZM<W:J5^TwtP\<iKYS.1\ږ&ʣiqƵ>=OM#'\S G#|nv[_F zB8*Z<o'H$Z[?//O7BbGF*xkB<)֊@{$q˧f~yx
0*
>ipu7lpmweKn7`
58`b4/&5fpSn s`+[.g
:??E[d1rsVΐMʭG}ܴN}'#&vho~˼
czvd5ȯǰzӛVj,ݺ(06W3'x´ܴ?ۋ!9Ta\!FTWArӥ5R\Z܍ :k
*ۋ
δ=|+i+m4xZ$n!cS=-ٍ>T^Xhz2d<vZ*wҲ=ږaVD齟ǝ|~KWNMaKFlӨnxT7Դ=С睩ٍx5qj57'?"Z`6s6.qp+l\fٸMnqۙi.0dG<	Shp0{Ƴ3{Ƌ62{&1{ƛ2{ƻ3Ƈv2Ƨ>gG_8_l|[fƏ~bP֬5Φe3`Pgf]mPOfٴC}dcvMlM9
e)ϡf69TlM#Lev)vjNJ1;QYz^NMRDpp3TUSVK9NU_<\Ai>OQB1EռRQ'U+lҼFQ)Z-QP3):_k/T\;/Vt_24Bѕk~kY_zE4QME*:XnW_;ݥ(GQ}WT*E*[=֝lTXY5,WV%Mֳj&y	4y\Wy5yg{}6/D})/3xn|S
n4is_rfl>hp%.PKO  O"  PK
      A             4   META-INF/versions/9/org/bouncycastle/crypto/engines/PK    A             C   META-INF/versions/9/org/bouncycastle/crypto/engines/AESEngine.classw\UǷgfra*v+^;QP+{{n&hbzvZ3H}gמ={W=.٘,89h䌤1i)ɡΤ	IδF"C?0idۙ5->_:zPxxp8ۙ7̭yA]9s	>#̙̏*X,sp#9XJ?4<1?&QjAΤfb)	IgI違\Jha}*zXlN݄9?2=5!ԖbvȊ#:k
6V3_vĂ9+k 3C/1!%%$E%'uo=!vV^CZF.ɩqv*X&'H`rDdzLaOHLrqw;S2հ8!&'Rem:صΞmc844-:d$߄Ɖɱ$C

've %kYLKOIHJO{7ҙ:$!>59řL&6Qɩ	rr/(8;dY8ugx6?tVutOb[bzY6*_fcq})11Bq$ӑ3ݙ:(;:Ts7jgѬgVg3'_;μn8mgS%%Є<Ycc},qo3{4AYӨ`g$"v6s|h]Ftf' .6R,R)%Nl'CԔ4lHnE[|Be(g//UEM?{@pg/6v6,o׫)ecܱoMcPmJlX6Y&-WcniX'$6b:qƤwgqeJT|aw6S W/ׄĄ4gӻiLzL_cq&$dXzrr`Z|rj'mlg)bDF:ޙ+s>Gй&;.%l)RiVnXtMuivB_:l5enUֱ Qm^ 
iX6mQ+؋0qԨl`ȑ/<ބ=Cԅ}J} 87atHHg(ٗ4zu,
\SF~G~o-fO?=vh{o<]7|kW38reIsÆHXz>:OރԃeʴnaaШA1 wx	УZxmP~>5\/4p8ʁ:^%K6^έ+ŋk'X<<l6Rb8駟@o}ʖmo;dd|0/*.\
*ޤ;CnڵᏎ7@:u@͛}FP>`ĉ
~s=y\޳g8|߽A89`{ڵYpкVTU^6K᫮]wCޚ~mB&mCUIfͦ|kpƏ~j~-4[w]4|eKkC,+'npL3v̟ ZUZ֬.3|rx,9xp(dܾboϟ>]~
ڼxgJ;z>	,7m:j(P? ~ټdZԫ7]/{<
!
UEii_>}N;a;YЯD0\(xm:0aT/ڼLKn|A07çz"^^aȇ:w~TvkCQO|ax|tsCbR-~ٳk wO۷7M}-Ղ
U3|
hrQ#	
tfΚ!ƍ=p]pwp؟<y;~W(7o.*17zP]Gaa?Arҭ bP* &iStxq	k0꣏xb֭Ý'b`0it_rׯ?
80:|в\pp Y11gwa.;#G`3ˠl"e{@=x-[4c		!֭0mll^*\(Z.̟2_}|s
<i
j#>d#̙9u0n4(]n:_|>\lx"5j	-*t?_ߢpm$*j<vlΟ<[t66({
V~nvX N*yC^
ۈG]qM9Y}@x=Ca7g=Ad6!kIYps oG:;.
NO
	wá+a0l``G{'?AW`7GCVBfC@}и=0qcv3XƷLBÓ)/CFv尿֩eNϠk-۽ g&F/S*ލJ Gf!$0/_aݧ	']ݠXjgêȊ`m_C{]!?6@&x45{AtN/^}v-5\{ﹹsG>PB7&
շÉ_톩3٠fB_?\-<G}+E'>	y@C.["<~:לEoekU[P|Sxx'
]1i/,;1zh7_
 ϣ>˭=
ME
[;.l9X.o-&ec-k?=B~MژaHppbkpNANm
K,Qwq".j<w:UyCW_+u
ovf($ˎlG-A[O@?ʏ?έZ.gީy:¼[
o}}<b#}6l8_U<xV{ m>&
ΪYW?U~u.NF-x;VoAe/%$Ů
F!x+V0:	mW֊/aɭ=5Qa
rtաvjܻ`sUhgwc!y`ͶC@Tm'.gY
Sʟ^gҧ<C"A·נZ3c_#j|aZ]-PvPJ!{PwO N0|TKiFBmO{Cz
WAR5wìzH~8y?|K-xV=9b&^	)܀-qoGʸ{%9&1IUH~Q5i&Iޑݚ9;&qxwdzL1)Q1}6wy%9백xAjLIu>;B39;'%`FICظq&{08Llzp׸omL&<-#<8?SiN|{3OiLOKs'qׅظ-Ly(<J]
iCwVnⴧ8#92{%y3{+dvQcbӓSqS	-ci$'H{OO7F
Oqqyܛ!$&F&;EÓzWLKWM+ϗ\̊㎦NI_VGi=UҾ:7.sʀ,o}Tv@,q#VR{OK{K3?IĚX'
t
я'%3x	G
[0eXae/˹6Pr:namL Q\Geʹf]Up2KFf^u3_*HIu__>x?^l{>*	t6Nɗdv]AS'AX2]`|?NE\d<Hۘem<
*:*̥E9ϊ]`%DmW6
P\KfeC0+V-"FE]RaTvucNe*9<"\<3rxQ<e.q3ünL
6[&E2w;lpϤX=6VЋ,"{]¼)v\^}pxg8]yc|L>1}x/j\OGfgv
ʮqwRj>T^6٭ngn!W=/F4! Ta9TvsxG:s&}_4y>t畎npnn=)gv̗߄vÞgn.<mU=Ī
Xj9hg!fslY Va˶YXD{Bqru{sYCec&vqN~{bSB~cY$u	{3	Lu'i=O¼#V2C{a>1c<[8_ҿ!V?cdM8;ZfW>7_q0Aak]\ӬAu˘$df0f捅xSxPlz4G01Gqt֜ʠG@s"%X5%Kz۳OGO>rIL
9)em:rTȩm?/c\H@9m.T^flZoc~oQ|!l,aK)S,)!G' >Hw}Gv}0y"e3t7):L[3*nHV:<+)]2ʞ͊T嗍͊ٸ}t`r#W	;g`^yK"'g`^syx?l:DN0KO;?;o`?So?N8L߸9Gn&igμ{kj^k9߿EFJ<
Jh3[Pt՘49Wg?>UJcY55;AaIex:1+eSB,Fb2_/f'>S~+RNJ%<M7]fgw
سrYVٜ{e9YV:=rfuβrg,+βrYV{e&z?βr{Ö+g>{VNbʝ><Ğسr#'+wba}r!'+wb99öp	bſճSJt+LyJ=._
wRݙMvO9=/2rr!XS[txR܇{1wqG@3ww"GEEʡQnrdTM.FEK7jPe%TOK3To>|
WA*DT%G擏P25lZ@ZP@-$C-,ף]r%jLE-&OCSrjIYC--jr#j99jZA~ZQVF
J6jY<ZMD.ԐQkJPkqu䧨u巨dYr/jPz6PMdaԦLBm.kQ[ʎj+y܇Fr"j{AP"Q2|YA"vP5n$jwYlSA%ooQm1jlmQɪ$x5A>D2PEMQɺIr
j܂";Y!j.fUCdMԡwa8pyu:RG%%h2F:V^cd㥝,S*	;7$llJ6E *ϓMɦ1d3d=2lI6["#>dx2lCP [$ˑ-sɖȩdKese0
llEZzw*dem,IAmndd)Ͳyl|lNK]#!vdd{e>9lEv@ ;(ۑ[D#3Q1
q$;!G;NIw(9,MvNV$;/.Md~K"eUNvM#{]&{C {S {KN'{[#]ޕޓ-n) {_} cnde;r2Gǲ'r5]y|@\J#/>Ⱦɾɾ+ȾEɾSȾ_}'$^v"A(?!I$Y#EN#Uz&O. C6&SƓ=eddҗMTF=ȞQ=	=J0=55zNzt&YF
3^W͞5{kLfOf
ʓFj=5zh49F=4z4zFj,詢ѳIFOIz=?hYXF9vȞ=4{ii"E]gO 
>hIyOd
x
>5|٠Cu
>N
>5|5|R><>5}j|sD綦O/MOsM.>5}fi3WM
>5|S>GCla
}>4|4|)S%\iKq9ٳKDDt=
z420osǠ%=eAO=
zzl7I7)aA=z>5yhSà+ OzzZlSؠgAO`=z
z51fSРAA=
zZ\4n3ܠ'РgAχ=
z3yàAo=z>2bSՠgA͠AOe==A46)k3Π;=}z:5jУ?2nݤo5baOÞ
{F1Y`sŰgaϏ=k
{1ikسӰa=
{.|ks̰aÞHÞe=1={B4{l=cz5iSƠAOAO>XN=
z==qhpvqvE v#;2AijÅA EwQpdp;Z-*GzB#=Pq_y<p.õAA;A Z#	}omX삵`m.X*7k;uA=vR]k7CR-zo[!juZo[G1jE}+`[')junv[g9Ԣybu$Т(n]B-a]F-i]A-e]E-m]C-cZz5z5z6jjy:j]Ԋ
buu>j^UUj56juC0j
#ԚǨOPk[wQXPZֳ>CoGm`}%jc+&רMoPYߢ6Cma}5ܢw	3jԶ֯P#Q[v}J 5zɢzzzm=Cf=G8C8G멸@88|Gq2Fq72Bq{9D맸Zh{%(6@q_ڑ
RBKR\%+-Eq`*^ -MhBP0i
U< mEІ+^mF*NtF+^m%*^*8KWye'(D>Q`I#x˓OU4+OW<|g*^|Ug+^|*^|aA@EHCDKGLo@B+oDJoBFkoFNoAxK
oT&[oV
ےoU6#_S=v;P#N#w)E[N{LW.J_hw#?xwC ?xO#"?xoc!?x	T<qwQYS<	@~QO$ +'_U<)+>
ST<-V<Ň_W|(#O7A~S+>GR|mǒ8;'HL@*>?U|
gO%4N3ȿT|&W"Z(>[<OT|!O/"Y(Wŗ2_N+T|%W?T|5#א?V|-ב?U|=3ųȟ+)2oDL*tUi8Ҧ8]mJ	XGJDMO	^78'r(NU)'x)N'|*ŉ':'WZ@qbhA	'V08q4@qiŉE'SX8DNK*N<-8D2R*NL
R8Qŉ'VPZQqBkJ\++Nt8ᵪj`+N
S[CqblM	'V0[Gql]	'WP@qbmC	'6VpDqmS	'6WBqbnK	u[)Nm8q޶y)NP^qoŉ'F*ѫfk*C`a,!0XhpSWxi
>WWH_+,_4E>_5E_QPW5E4EQ_QLWj⚿(i+J҆(k+E(g+BEy_QWT4ᯨl+ᯨn+E
_QW2
E_QW3
E_W42
E_W43
E_WVhc+v"W7EG_i+E'_Wt1]
Ef+e+z>"W5"W8
E?_W_1W4bH2Ɇ"W6"W_1W5p_1W4h_1W5x_i+&bᯘl+bᯘn+fbᯘm+bᯘo+bXl+bXn+VbXm+bXo+YPS{B\|Ⲹ
PKX0&  "E  PK    A             ?   META-INF/versions/9/org/bouncycastle/crypto/engines/Utils.classP=OA}qWaeccXXi,<)Lv{rp-$ҘXQ]vL13y3|}|8J.VP&ԇ|YuP>Pֽ
lU$c1<Wd"*a޼e6	썳4%iwۇ!]/C>5k.YcAOIA˜ݩ0	%/y26<7[9!T
O܏$vQ_4a#kJ9x*bva`<CU#--KSPKzI    PK
      A             7   META-INF/versions/9/org/bouncycastle/crypto/generators/PK    A             O   META-INF/versions/9/org/bouncycastle/crypto/generators/MGF1BytesGenerator.classT[sDֲUZ7IT @S)m !e	(*du3<xOt!0)O
)U\'0}=s|xt,"@ڄC>-ђ^K]^F
dM0Fn}-^VȰ@D\Q\_Zi"&pkq!9G10c{HvTLCzcQ1p6#~]QlYS
r|_ܿMkDGza0)2ZϺ^$zY%ndQj	ߔs,&q)f0m.6Tiϙx/"NՆ2a-we+
8ta2LLZw}]DC+侟i5MMHBf)
Mԑr:mlgQ^QgMǫv\0{8{M\p_yd.x[F6{<xvzۣ*j
J yj<d8m?Mť5ay >Ox_	jt@b"]~Z	6
M$'^dC&
ӄCNҌS`h@#I^)ŷDҕ"]UZѓEcmJuF1-L܅0cj$OT7mTR-Mv#'܃c 87אNX5;7jb.^̍()j$.ɟ<aSwTnqBM:r!mТk3*2;|\g
6^RԲsi(UA
Ǵ4|@T^Ml|֟qg\ۿKw?b6*0h`X{#Gf^XPK9u  B  PK
      A             1   META-INF/versions/9/org/bouncycastle/crypto/macs/PK    A             ;   META-INF/versions/9/org/bouncycastle/crypto/macs/HMac.classVW=$3c18pe&q#h =0Όnif,$m,qss__~73-{|U *݆Ny=R-[єi>pˮ_T3f_03/ԑ%@aرy5eEjA֌ԜbhUOѼբC5c&lTPzudnZ0}<ghu5UDl3gh@&[qÖ
0bF
\)#	֎3ܔʰXxFL~YClWp+Ϋs|S=IvβUݶ3u-ة6b>ճv\D حX9fvבB]_JR+K馨]M'&DRS(U{Ɍ/c/R怂R=>>pC ]<f`Nޭ@Ք$8+==sT1hmBN
Qp0m-nKH2DS</0Fkd:A8*PT\0S0ҪMHx*
	:KG(Mᤄ|(s؂eyC5Mu!eHXB'*9є*Uut\+խSkI>oRA3ȒT7'"0@ȩ1qF \.
ߙ±t\83UPT{e򱑱}]]|ߖu*HtZ)P=o}_Á
q%#y[Ɠf~ϒgO&tuK&Hy=6ԿKˤvw2^ywst}ϔSb<95ah~в^8CßcqB_tZ'	$4C-E75TsnW6A8?S[FY/2
arneBfH(6%PJZw0nej.#mxᖼ>n+kϩۙKTlje,JXe:Z*d;q)0)(M,?i[
c.~wq|!+O8_=emNVMlIpM*T7&%ϹAm"Jg`~_WZU5ooџ⬇jJY9k@h[6AG]Ρ6
ÅK+eXĖU4G+h96`	;>,Ā7݈ϰ[QOzR<)p$"G7MhD9up2z([/#e;;|X./&mZwx#<yuAX@pѬ<Id]"Kv^	-n~?ĞL0)tǦNsضz~]}ubmۡϠĈVmwt>E*+8%\5K*6ٔ.9\AXf#?l':	yx@lz+XFhY7pHt#j~(z@F_D$qɳf5"U(%t#Hp?O"KAB5j,T.W\c[궵SuLY$,=<dp벿Ώm-TNXwy>nZ9m'{ZyM*`7ԒTNiKx]Hۗ"`z"xzzzzzzq+_+(I*t?wq)7D\EPK4ZVM    PK
      A             2   META-INF/versions/9/org/bouncycastle/crypto/modes/PK    A             E   META-INF/versions/9/org/bouncycastle/crypto/modes/CTRModeCipher.classuM
0'՟!(dʝZHPۦIISWs<y}oy 0 jX7V
M[YMKKDUwa<9{0*J9&~&l͎RcL	v}QUU*adf7>ÃKG0 cx8qf;/PK=j     PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/modes/SICBlockCipher.classWmT~~Ͳ]EY?H]*-1k"6eadl~Zc%mm5l6`;_ܟ&$6>cXOQSii5_ߙhov-;'۩隹[c)-Ѯ H(.iTe4!4%e)\(JF)6.G@WMkS;
k	6!(#E}s{کD=zxJ:^RδXkgаelj;oIx^~)cJNA%19֠VF1/xj=ml	u2iæo唑<2Nj{ڈY6
'SJ}FگdZsCn}-fMK	OeT!eSɦ,o*Ihǜ0Jb~´)cp\ µ%auBge"=|~{,UI/<ߞ<EW5"</bϡCi9:Hd嵋D.("5Ej
|^t9#m4
ZRH?RأJ@Hӳfo	51
#R2 hpL`R	Ĺ@qam:` 1^(p9R3/qJFS驜Hmk7OԀ 3T4p4S-8#p?b]` ͬSa K:62MDLnYqbLO3ra8Z&cWmkx]e|ߤ(b$oC.=edGbH:wRM-EHN6kT9|
QIĮ㼌pe+DԲ6 ~IcD`-^٧Ӛ'C﷝NDK30le4i+ttN)*2O%BU5S'i:2P<!Kk}U
a2T9TL0L
PIxH,"8dR"渶E:4UF^crYQ,*i33o0y?~)mFg9;""VΏ.GJ*5O+}MV}(i.~Tf,/))z*DCh򲢧3j~Sag[ƥ#Yu5](:`f09j=j^k,T	=RkӝBЭJ|t͡k5R⛉5sθ/C.gP1Dwl$G[LX]4bb!p	F9?ƚYxvVsƆ[KmHeK
$</nj.Dؖ;]Y8Ik([>	4=,7s=eJ=ױz/I4#3n}L_nY־CrHS.ULa(_ޥQl?Nt+i讴Ll`o84t9Mp	X<̾l	zQްzdwi0hEw]3/=dEQW8nL|
$6퍇$AoٱWOpg
]֖	fZ)vѝ`x7Zx#\HoUogF_Wu
oԪMFl#cDyK#kql[z4Rv&g|,l)ԉGt0Τ=I+yڪʳc7Y۵9蓮a
b^]|;J9\V-˶JҚʆғ<C )crw*G>+
,bɞ0':V"	e#;5hz;֓48ܷ
#1Ek^cX5;gwms3
^7T%ë0ze/=L`hN0)lF9rw8r7|4:[[MrRfh9@eV3n)sCm뛼!o9^p
F)(yG,PJ#M7'XP"sMmOkT=@>V(q'(b._Gӊ^D
R@iƧ?4ThVγXaU8Icb	J΁cO㡨?yGzyKT4NZwUw=Sk&v>KNwAuzߢ}cnP}a|o1DlnX(V}oмkKng]aJ@"윝pÓ_Yz8V8AY<H&%<
7]U]d?}?pY"CSD#׭SӍ/nYEwPPK(	    PK
      A             3   META-INF/versions/9/org/bouncycastle/crypto/params/PK    A             O   META-INF/versions/9/org/bouncycastle/crypto/params/AsymmetricKeyParameter.classuN=KAweDrVDJq\k 63z 0Ya#xvJnUw<ate	|LpD p0kZǦ+Voeq}]koMuEזv8&AۿkGt4o5!1nn%@8Ft1ssZWg"Lp3aqPKvD   8  PK    A             E   META-INF/versions/9/org/bouncycastle/crypto/params/DHParameters.classV[sF[* bGvbrv.B[boll$94N_e:KL0L//}oꔞiLf,={>~g? P!Yvrί
׳x:Vrb8Ʋ9)CXCϴM:h"de+bx;We75'|G V0_4SD+#0nͼ=3,`xfUQ>h9:|aK<1uC
f90,^E俕g81cYhXNmo<8paۚVknERiU\J]\z%]Z5Cw2A{PӞcE/˷eO[]WJ-סQbHPk{^mmOcXV|vE>_1|dV@#ztx&wZMwb;Y{K	wH뱴J.SjTTMZt
zf`EC9#`g+4dB{ K
>e҈,#v*w,]WpG/	m@ b+[D#;9њb8j^fF-|B#N0,N֙Lns
n'ƤƘp6`F<Z2Peiд!Rvс|.3#c37鼇ʶ7'0Dw+Bm3_ʌ`~ۢ2مEە{Jxf<}'`U2&~(<qYDǧLψ/{plH[_dbǊ<%-Mv<YSgLwhlƜ/UZm"_+p ~	 ǩ8d0cxoz/	!U7pXk8*#^C切(ɊU)ߣgttU%54p?&]T
)=Ys᢮J5\;"5\;o5"aL՗8
mKęjS
hSyZÜǑ&끹|aXlbo8:0J ֓
B5
m_dE+*ir_mR_8Jmv\fR	n6	[u?mѶ6^
\RrPKl?F  
  PK    A             O   META-INF/versions/9/org/bouncycastle/crypto/params/DHValidationParameters.classen@8q'4Bhq*y$"QTE8ŵ ec -τgbw4׾?=ί?߾؇S
gB3g(v
j6hēȟ2BM $Ƒ"9OU4p¢&+8Ly=}ޗa0YGKe*!*50rU	X>IL=uD={;!S(Bue6>A<JSj{>HeWp.)]GseFwLo

|Ǡ5A%yzhKn˟A"I+4Yv^)}*2`v;? 4@p8=xo1¨FPkNXwsnυ/PK7ſ    PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/params/DSAParameters.classTMo@}8nhJ6-_
	qREH
(UJEQQpڤ&V @"AoBYcBF
yΛ \bP8bCavE6v0u9C\4АTg]lzz]lGo+[,wl/'yǱ7ze[n]&>1#f9N־93E1\o]#g%es,bA-o!W+K4Ψ8q٨ ꒵ tƜc)x
>q_ZG;o;{zI[iR]KxdԞ(13=~)Dk@C
!M7}19>H3HQ\+^"k
axf1FmGFAtKƢ2\33K[_t1΄t9VC2Ds!MOp	K$Gh	d5z"Y)[9JR˷TϺJ4/XUݒ4Po?7(	
	KG~iPK
1    PK    A             P   META-INF/versions/9/org/bouncycastle/crypto/params/DSAValidationParameters.classmRnPcǎq)mCJ)O`
tqRcAd1Xx 1 Xy&87v2 |scߟ~p	%
e{q2p{(>OP~2f;	<<L$)CACyֱ	tp7};~PjJTu\CQ~1h~GȣuҩPVʠBfa'-
<ٿb!(E}V&jaS}Ф'-
y"0ߑ/$,4s '-ZY8Ix'
!Ui擿}iRfyȇG
"Uچ
fu}Mߢi(` /(]bTsvc5朰fAQeT53b܂pIcp+9^7(W~.nkvKu=尝dG3Ɍ~t*PӉ?PK    PK    A             K   META-INF/versions/9/org/bouncycastle/crypto/params/ECDomainParameters.classVSW]!
FG|PCZ*fY.n6؇}ߝ~oAvi{f!љ7w=9sC6
$eP)ϲS3iU:Pf{٣=#d4G&7<\Fq	MM\PPFB~[UnMǕeǆܐ"o0-.o~$mj$!EBhhjOO9Vb}VFͥ!M9.ꞖxwXy]

l^.,[vu@d(f*1Gf^BP0\{Eզ2T0(Z~`InԱu3uy,6a2xT`Z'C21My'G%
]u!Qѷ
2ڰ#ᄌ^.Va2*tݬ_ ʺ9]=SdcD`Wy krxrژb<\OcTbL gb5f✄l`|e^K;$z_+]!W42TqJ6cMjnm
0$N&QU1;*i91p%\ƸR,3(eu&,*Pw2(%KCK)Fe4YRTFnFq[ Ubd%bFZ#!\F+qBW$*52R;%:=3eَxM|TvpU2!=;`^<|
(B2e$=;}%j2#j1;[$Od'kdku)eꌒ44{_D(i*咲ɵ,ti*JCϞZLܝ=s;W%HFۊZ5
b
:i[?B"~X6>ys5gjHL̡)~F\-m]X%xϡZkx!09rNPcpZY	WwfAs #ozAW|dL2rMY"y\$Ln$r=Xi
\tX7'=<:Oy( {*iſG?
f"|nQ33H͠Ъg 7D_
N@gr::kHwgd@dM&k2rֳ𵧭6AD߆^6cLD|6{Rma|) Vh>NT[b˨gdbc6ޜL,Ƈe04TPK!    PK    A             H   META-INF/versions/9/org/bouncycastle/crypto/params/ECKeyParameters.classR]KA=WMSP{JEZ"%Cȷquvٝ"PPP&Iܹ{܏ϗ7 U j 	U/͎w%BJ
zL_aە:p#;I-tQ#ĊRaJ
6Oo\s6,kS3HGYR.tdA1 Y)Bx<dkʮZq!c`>,hoj		$9?QCa؞ WjQޥ$ZX'?WX%lilGj4.lbGSE/XJ:\9QW>f˕ge>3/p͑A}
_yqPK`    PK    A             P   META-INF/versions/9/org/bouncycastle/crypto/params/ECNamedDomainParameters.classVNA=#m*(nkQP,tibxڶK]M;%	~Ш5j7v	]wv朽޹w?`Z &#Cܮ՜]y7
5_.s[5VrKFAU*hËHWZ	uv)Xȭy>_0,nF%uTW&ڢ^!7ܨTvŕT=s	X]֜]Mkc t7eZ&fX9Qt.܎nH ".1btJd?iU)m4Cof]қYQ$">@)u]$E۴x֫r ,|!q</Z vJ51HuI-)c}IiaD7qk(x1q4yY\ʨ;اbaL]cha0
ք8kUbQ+39Vw'If(ѝK\o<΍aޜ|{F+̝RQW@É(l
G[?B/[HL3&i!=C;@H&R/XN_?/%Ls%Tbγ:z
^3.L8&.9Id{&*#>a`*m%7hܦ!4y]O- ۡEuedG4PKzo  Z  PK    A             O   META-INF/versions/9/org/bouncycastle/crypto/params/ECPrivateKeyParameters.classQMK@}~Tj/Z[b5]JȿR<Qi)¼7v~~ `Y9	!ROf,]OEK\cBDʜ7~"PQtp7DH9*aXh6܋D0w/B#}l`FAUBge'r&B#B}q`IK!ۋFOm,q}fSs,9lql^@mZW/(=3U
#1Z(=Ύ
PKsi7"  N  PK    A             N   META-INF/versions/9/org/bouncycastle/crypto/params/ECPublicKeyParameters.classRJ@=7iSƍ" (.*nnt7"PI&S!\~8Ts99y{yUtm$ALF|,7f)3sZsӌP=PRY|{sl&}ˢp$'(|&p3y@u)HN9,hhE-iǘ膰Qr3C`9aә!<UzMBk_U
վNk}ݭ'j+_̦BRh PK#A    PK    A             E   META-INF/versions/9/org/bouncycastle/crypto/params/KeyParameter.class]o0_iK
kGa-1F 	։jEC4iU,[D;_$P'=?
qf c׏_/S Y
90vA8ıG'Ȏkqcs/U;澤$ȐiHW4h(3dy %\Â*zH!Cюc;qzR;8hu25۾*n
~ETW°~>wm+vCo	/
%,d1~'b/p[r;XWqW1pq,<ڒ[1?}eIyE<9]"7KBrO+;ڳL\H׳zf.\q8s`\{ΪyTsߤQ
Y E̘	GOJAqј@5'2S\KR$M3&n~-|Fh\ 5I6ޡ|o3Y?;lx*3sR!4]MM"2WΠ4tLjmΙ	PKܦ!  ~  PK    A             F   META-INF/versions/9/org/bouncycastle/crypto/params/MGFParameters.class}OMK@}$MjA$'C(zi.%MBH?J
*μy31&
Pt4d|ʱ$e<Իˑ"IA3mkC[a({cHAAKW-aAM0z-lشNJ1a0x̏?iEtqv!`eߝid钼h PBj;A	tְCq^U43G'C*;6Jϰu	xAaˆ
|se|PKp;    PK    A             I   META-INF/versions/9/org/bouncycastle/crypto/params/ParametersWithIV.classRN@=C[
(|BҸpq+MLpJ6m%_i"Q;ߚ,}93O3 8T CT!!`zAx#;08~䙾X<DN^QbH#7:e8Қ]v[
RHP%l[uͳN߱#A[ibQ;]㾜U1({_cq
(P//0ri+k_\t-;ڢ<H	bݻr'5]cȐoEo4mWG+L(_.E
t\*)-9yAgdL!y15j'VT!/cy]J<f'r?0^ PK 
l    PK
      A             .   META-INF/versions/9/org/bouncycastle/internal/PK
      A             3   META-INF/versions/9/org/bouncycastle/internal/asn1/PK
      A             <   META-INF/versions/9/org/bouncycastle/internal/asn1/cryptlib/PK    A             [   META-INF/versions/9/org/bouncycastle/internal/asn1/cryptlib/CryptlibObjectIdentifiers.classQ[KAۮy++.V*^Q")zwV1UgPGE3:0yy}|PQx% :WFߤ.An1=#fs	2A~Tc0btBk>dh_jG]֍e:2BT+
PtR A+l닳:r I+H`b0^RSgrږ6ߓs	&d$	&fP%8mos`Whz_AFa:rXhU_s5:k=QB+"f"<9=8.s a'H׉"SDkXOlq7Czao7PKte  Q  PK
      A             9   META-INF/versions/9/org/bouncycastle/internal/asn1/isara/PK    A             U   META-INF/versions/9/org/bouncycastle/internal/asn1/isara/IsaraObjectIdentifiers.classPJ0=m aiZu!OO#kkRhgGI'(`KN+l%4<}rD£gr9
#!52;:p<!\tze4a"qi
u4XX'9BF`
YHןrg,gw\uMȣNɶ-퍥4!h}Z ]4D	m/yBu;*U~jZ7
PPKXHm    PK
      A             7   META-INF/versions/9/org/bouncycastle/internal/asn1/oiw/PK    A             Q   META-INF/versions/9/org/bouncycastle/internal/asn1/oiw/OIWObjectIdentifiers.classNA߱.e@DPb?`+ҖUb@<\kY5Uex^D/2|[O܃O7|fg~@/=uO tmx^2G'v7lY:o;0Z(|.C#Mdpa!b~0uzz'WL"84flxx;w>xCouƐ
kH-bA88^uw{G䒛KrIܲF]T]3Qoh֥cLjI!G$)	1*԰TQ"˱:{5CErT5e
LM1="upl]gQjY6hJwvw;ܞ%v5<cu3
߲T#.;GJ^;A)yؔ*T.\QUi,R٤g O?žWL_"L<O|8E|{īďu<qLA\%$7P-PK[    PK
      A             ?   META-INF/versions/9/org/bouncycastle/internal/asn1/rosstandart/PK    A             a   META-INF/versions/9/org/bouncycastle/internal/asn1/rosstandart/RosstandartObjectIdentifiers.class{SP("|%i[EADkhC	T(귲Pбsw7w q|@GOGֲo䇤2Nyfdt~Ɯ]tTwu|Uf
ĢjP:zn0$P6i#KGUFMR8NLz{vPrl?<c.¤.$Nbͷa]é
mM%cQ(ϢMt|N'\L3aZ	+?J+ͥq2pI-XolC_C!tCfRDЛu)bi?I{-oIϹio
6RnQɃu7$1\v
T
KLPT1l}R/NJL\jJ}nrR|ՊU#9J6t[n^ba_Q/J,g3>X-/5nJ(R./5a Gs$K@l6$uy$2Id˳ߨM`W({~_3cTb%wedFۊEl9&SߪހFZi6imڢSkָ~Z'Nj:uAUu֌֬րUmWAAr]AUUu'?;x"e«	[	Ä&cp6Xc{q6YmxLX0<!|ʸB1A5T)Kby_3x
PK\7iI    PK
      A             ,   META-INF/versions/9/org/bouncycastle/jcajce/PK
      A             7   META-INF/versions/9/org/bouncycastle/jcajce/interfaces/PK    A             B   META-INF/versions/9/org/bouncycastle/jcajce/interfaces/BCKey.class;o>SVv&FtҼ⒜TĬT̼Ԣb}'gJvFĲDļt}6FFf(  PK%Y   \   PK    A             E   META-INF/versions/9/org/bouncycastle/jcajce/interfaces/MLKEMKey.classu=
@g[bemO0%KLdw#jCV7 -,l{jAYj3D,l_d[{8<^8YX|(܅*Nґ]DNWa*WV<4P5FXoPK(      PK    A             L   META-INF/versions/9/org/bouncycastle/jcajce/interfaces/MLKEMPrivateKey.classPn@#	2`H(]*@ ёj},-HɿFPW	jG3;{S>6YMpnѱ؈R+ٚz:,ڲ
uigA,*<*4Sd-Ix	PTOz
	l/rBdEh_ӧ|"	uЀr
{g+Zlf]PKl@     PK    A             K   META-INF/versions/9/org/bouncycastle/jcajce/interfaces/MLKEMPublicKey.class=
@itA
bDzy<C@r5EKay [L
zMUg6R:jy鵾hcc|HmZkgol.3{J7Qiw@e=
B=`
CƘ7PKZ"      PK
      A             5   META-INF/versions/9/org/bouncycastle/jcajce/provider/PK
      A             @   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/PK
      A             F   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/PK    A             ]   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPrivateKey.classWw(k'v.$D 40!X"v;r$
1Cϖ3ui[z-m%d^{{?Ï BChb8x&ct=:X!d`=eOǬR2D|䓦m\6#8wyY3ϝx"{oΞ8!C<0]Fx֌TѵA*\a;]!`Zu
'[{>ZZ6c:k tbL",'M6-Lvа.\ϰk)`޵NNr(,'C:=l`n`XsuOڂqA
íNaxtOƭPD5t!j\g.	2Vr)'gzwZf6A}D)B$=ʈ)&$
܁$TZwObMp4m(|^Tx[T87]˦Ygڢ?5Yx9bga)Aߋn
	IcNQK8MqwkIE&GJNagpt6"=gK<GM&$~9$o24u4HkxI1ܾwIW]wҨ}<{UBt


3l|⩁(YC򥱜'tӗ</3lrQ[YC]O0>udji #[V
W*c"6$ö+0㖝T/Vo>#'퐗ĮTtHhdΒK37Q(B(^v#@I6\ B0ſQA >fkE^tW$
ķH NM@uߪ:KwXXa	*Q
OQǉx3ҠϪ0$<o)Z>W/Gt|5Lc8]~W8W7n*>b;y[SZnχ?cJ*C\P,.8DkFR}P-l')53zῥZqXv_%!g)[B»ԣJ=Jn"mJa
QD]{!]d$ݐ?5aUp扆"K$6vȽTYO(Og>wJ(7PSlq9+B9rL/>rS+L+)X.(X\39UD" ϑr!&!"TT*#*)AH[$Oɥdj#lӇXδce0Q a=_34bJTiN7ybs`Yh24`$V1p@ۛGAIYYuKhc@0=ZFO-EG(tAct/>N}Ӟy]<(RhgU=έ(VH@gMhW)e].I^L/0hri35xa##xsJUxҡY	bWMAmIoqT_elZ1o(cbgf*Fuږ
E]1m֗ݠ
P;G\G2m\wiY#tW/)^}u&9? gku5ޣboa_.g}y\h"a|B{Bݮ⤙~%e.wKPK
3&  q  PK    A             \   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPublicKey.classVsFm.4!@ʑ@K (P $'C8Rnd%q-#ɐ.=E>1@gJ)3To%ٹBg+{{?(C
bjܰ78kCվL.g(aYr(1VBN׸:QMWy!-٬XM'{t%vDg=5Us=-Newx%avul׶jVILV(hJҦd5ǴȔesGwrR[,ysV1߹(hnOþX`=60Tîp@FlF	܃{N DC0)rhn$܇VDr<1,3	
/ֈFel*aa7=dr<Vۤ@=ةP?xræqFA^
ahgɡ]9Li*p@L><(axamInPlXSAH*5!jqHBBa4]LJTM^md@(}Iwfpa&4=d\q2VԣeP.줂SLNODrFwCU)rmp8kGj&B5Hfh	Ρnѭ<92lO~qb(
C	
BΆp~yO`;Y
GBA\d,UwݲC[k{BtP`xOIxZ3b̮)\Ω/1ky*oc)
yxY+x%rssI^P0iI}gMM')qQ+xԻ8sΰ2H~	u}Rt{LC6bqwjںF?ŘJD;L%7]9(~ןRQ[EOKq>hU)#{ie9v͎1@*تHayAFg'
n۽&UȥK>c0fv
}]rRc
B>%Bϗ*5D 慏hj&ڣDGKԪO)FM4^HwI4Oc$L:v4E 7->ioFb"B!zdd.W2i=@;=q;'\1uu>E%Y㚯7h_ U[FVPLî|
zU`I}$//˻xH-
O@NL?+%OO'2(4-70tm
#8'rlyZڦa'ɚk~?xmw]F}6-~V8K9VEd}+g]J5&t=PKWC  
  PK    A             h   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM1024.classQMK@}kkӤۊABh^vɦlV!?K/?JܪxP/30o^^bj> zFŭgeS%KC  k)tIЖI̲Yg~o`o;isyhuh'8M9Ks]DhKU0Zrgv)㡨.7$hK%	*AG켷>uH(% ce)bXڲ"67w@lټ@PKB{    PK    A             g   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM512.classQMK@}kkQZ=U
M=Dz
f-M٬B~^ -zQ/30o_^`

MhjNgd5K*sTҧRTNzqK-nWAGq"x<N1pañzh#X1N|)W.
`NGW	ӥ h
)&AGZ+Aޔ9,SNRr5̓F@k0Z,ocmS''gX3]8PK5%    PK    A             g   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM768.classQMK@}kkQZ ECװݬek)UҋE/Epfaޛ+lzXBA=2qqxYi2AYTa\0[)tIВi²Igɝȓc<ćρtٔ:ŃLTU%yfwhпbgq*4gc:#h-;#zHA*%t/ce)bĚڲO"6O p?gZ66Q> PK<    PK    A             ^   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi.classX_hPԂ(FdYQ[:̾2mz'=靦wi]6Gۦ}#ygfwawA>>s/\{
@D	J%(:c93RˎL<0Y-̀bffmjj`&>g}'OqE
3Ih4O
j1aSߔ2D|2CfKWd:]Ĭ;oxF(lb4Q,5Mqq5nj]vqf[(+a3^G5ISS+H{1#|؂IMVԒOq"WViVȲ	]1PٝC6ǋq2vIo۞tƑ.)ܵaK8a7CrNpȳֵ
{eDHHJ5؇&2`S!qS0XB1(q@pHto@.ZhnZvSlE)dqk㹶t?dfȂq!ĵÆ8*쿛fw#|*h3Z	]]7_ 1)Rܕ_a!F"g2+B٫*q-C}A	[3tQ'e\f
g~0S^&P#d>AM"|pj{q$KS=-26L󰡫}V'igيn[y<"|AT~aK13~0
K=sN1>ԭd"a6Q﮳S	9DEU$pX],-q	 :VQ4LIu#kO-H2DQsT3wZn	KGDSc(mh`-wa9ւ^L̊_o"^kDÇ:	΅2M%EvԨ^.i3<dI%NkppLO8$IQ]Vnu3N%\碕>(L{՛VSޝ6o;(>׹I"]kr%c
f:HvJKO~{Vox!_>LAʳ!YٛICrcRbZW7B áH/P#DNgJHxf<qG&ixQ|RScg*|Vc2>ǋ$ ]@od(ĮbJ|bt&>Jmk=Ȱ-#z|_%_W,6IK%ř`Xh5B<=nd<)NKO[[bNw/rł 
zaOBd]#Rp\)+[QĐP%,0М5
+|Tt+CC1}t(ۖW>rbMŰR[Ncs3siD-[4U.ð-Tܞ4bV~̰tk5Wۓnܯ;']I4e:܇_~%&_3%ܻra:]z=>ØN&wrCw3EX#crNqSaV 퀼%vB1l%rwfEf+FaO+T"c'J
$h:}=	L1Z+]KCzp'ZkJc{^4Y%/'MϢj/fGb#yhzU.cOGYmuVφڲ4g	s*༿ӥ7tf2(Γ9YYA(8='zK5p
C `8J͐v{%TIlݵ}|-<:-(uM8"|M$\4^c[,=4y|#:ZubP?QO6)1veP 3Z+>4`pA hMuז_Gmm9+xEl]=[E:mJ_@DfK(,A$M9s1R )9=|gB<%Aw4H@Nz)Xw=[<W
͉#NfGB@\f#蠒x4'$>}/YgE'ܽ[$%xi	~C]$=h
PPKHҐ$O  Z  PK    A             Q   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/Utils.classSko0=^Ҧ)[`<vNꄄM i<$MHIWP$̏B\e#Jdks|	*`qS-/'MR2apnrpϲ k²P
&
:mٕ"N<[Ra{*"J"Wr{|4q
E$("e;
r8IS6
8Ő)JDx-:dkQCygZru$j?hl2q#fad1s&۸w&ġ&Y-W[,318v4iˣBz6n!پ k%7e
k5%$*+:q0~?#yR5@Qːِ^do@lu̠n	!4+4R: {dBw:,"?Ϙ~3H[;ڥ
8fOgRWq)ȭ!NHPKK|    PK
      A             E   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/util/PK    A             _   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/util/EC5Util$CustomCurves.classUSW]X*zZA ]E.& Avn{H_Wڙp3|w6@`;ӝ=g]Ͽ B	1
q8pfZʚ%qsDrQC3C{TkLYa)oUthhq
hUްP°
af5~y*Y
E\Rh۝HLdjYt|/݊vth8sr1.YaDe0}Y	хnVO<c<exEoႆ9.CPV
G]km"笯7DK5͘sV@RDq=z9*Гh`lɒJXƌ\)
}`=B`-#Ke	f˪.5\x~{馚V4Hp3n0CCF.[O}Tq"5p}/yU1Ym"br	
&n1\}E9Peۦd;tl"&'E1*1d9>C'r2*R58G8yHK,ܮpc^TǢ"U
'0$Q-x4|2dAf[k0*PԔejZ6wGbpg10?1G#-wӪ5,PfcÕ}РuUpp%Ed/W١l~A
yiُTfzX]UI?WY([nt0T`4e+ő
.i/tJO QJN+DjGWՏE1<s};8ô9\;c6OЙɻDہýg^>{tML2S[>n|k(!ihmB3
N#S;˱=E|p^MzI7$ OXPo)&v||/PKn  e  PK    A             R   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/util/EC5Util.classZ	\?XX;+*3Fc9a]v݁I4miӦGښ%0mڤi˦w6ffY]3ͻosO<`5D8T 0u[-{k>NzBvqɎ!_SETµhbo+ycFPih[k
_8ԡ*Z:+5p0;5>1{ZSuEaZqI)L+4ډɘ`iN(-8TYr͊VoZIz,IcкLL"Lb!1ԴkښFNл5g6
Q1W\cXtwZP<ݡ
XGڽz<Fҫ.<W@B1ͤGPX}gT,B{!Vxf*l"+(QB)ᚴz:نQga:뚴mO',~ctv}]{*P(kp0rPR*N65Ҕt0NA*TWSaWض&30?joZ!I,=sB>A[
Cy:HmPdF\3}쩫oRn6*K_K(OM,b1d6~ڊJhFV	Ǝ6`ff	f\Zhv#[|SEqG0حb^fU	@
^q{<C_$nM
nV]a^禖_}Av2wV]yjc(2$@RX>ũD1N.<`+*Ag2Mi53Xk憒HkVC
"afوA#oi%GqɞZ'|ЕNL)ZɷVpp;GEV-2߭E
Ivh4ѓ:	'ECŝxaqo	DS|RpW܆$5ԙorkinpoھaU^4_jJT"*x}i7&SJ:_12ɺ`"Y[V)ѰĜd&GQ: JC}?H̶*58 G.IwHn<>I
Ε>7xU>K,9"X`waWܿDR>+G	ӵDisV&^0'?3Z-B~Lq&̄1eW*>!Y#B~q0Ŕ9ݶKUݩqKbR=(Փ.Qv@nairx$Q_ĳJ56ZomC *(R$9<,6McTƨ	'U_׭f<	xAS3K7-V;FR:F8b"T|?!D]#IhNNޟ1)B)JTkc#5DpUYq4~ՉGQOQw0//
o;bu]1#94Ǻ28Y2hAr'`K*etظMopO6t팵tl]>\ZPSQEED*eQ6a	<Bn7)zL Ky?&9@!UI4dՄلD|=PJҌq(L]kKΑµ43"<slª$YB1ɳ.9*ͥ+ftzýJSɓ4+@ZK3C"XkT꤫hBKTZJE\fF2&Q×[!Fģ)Q%A;9q4w5i"kJrQk{_-1cEZ&*N9*huM;q|J
Ϡ
*kA~SStm	#<NGV:IZ~iG^|)wp
y!ڬ`-cpK1?
5[:_>lEQB*mۚg=*䶇'
ڭOL54uB=3эtB7䕯;Mpk~X\J~|$~yסRw6ŋ	Sh<I&^߁&o>(]w_SXTͷ>	6E&MrZy)zRPLkh+dverrG%x?777!{<b! ?AGKiDA ]k*B6'\Pͥ}ԋv^fqy| WB eBGKr
sLF+&q>mz3}}?{`]/2x[bҔ`ҋ>l}3Ŏ$Ņ>xD"ދ,
cQ'ۑP0O쳸Rwv(S0YI~	g[07fKAs'l2CN\J,b|u𵟯_Œ8a#uVOa.y+.u28fW9}˴|Una ^#.V;b:GpT.[o~{e'c[i{#ID=Ń8IA֜ A8>)RY>=$
P.O	^q}9
(6ͮ7!+YpSnhr>j"$'Ii`ÉsX&Y"Q͸X</!qcq?c~]+߾mëDR_7y.UAq
S?~8O6pJI#~.~\z{Q8<q-+'&8|wX159K83307{Yae&&)x(y[XZ8b N{\4OsX:@\2eO9qZb3/%Ӳ$lLfruL<vn
mbE{1Ufܕ~BgL$aqIminwѪ8]XʿTi=[j98mr>Z:#=8G~jbz[$*s͸=ЍY6|,-B)eQ'%P\}t=_;3m"\&vAAK{9xx}Q0x>D^CҭpoC PKWr  u#  PK    A             Q   META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/util/ECUtil.classZ	|ՙ88&@BlI@.;$j|@e,%F&mZ(t{inB쐖f{}o^{ۆ ak|[f}w{76zJp(C92J|83xB
Z\3Jo&\
EmMcj8V|=踷/DS^%&L҉4ԈdCaUCg@-2uzr882jDX
j8ޭH{:9Qm^ebAV
FXXLŃUX-2Á"&QA%5cBI-LZ_,FN!ഫ"
J*%۽(҆45"!Oz0!JaSxN)!2U7fEXAL1F@MNոb܃ѵamq-6Zx݄˳B7a۴PPyoQ/{Hd4a^Ue<XTlX»rytJ\%l;{4҆G~M'U,p(ja͈+&'mo`3Eز[PJMh\4-N<6Gx<؉6vBA{~xЁ8a<kּ DUSI-9<bՃ#nq4oЄJ8Y!^Z&7B6n[os6e[`+%2cPǄ[#M-c3v)	Ƽ
Kx;P5cċuLѐPȌC0!±_1!VGdhPT߷z0Qa3|YɈ֊: ";;;RªG҃auI;pL3ώXc\Fv!w8(,9;X3RfϹSGƽx7")acEï=+}x?a%۬O15ie	76,R
d|19h2G8Xܙ3Ȣ؛oEd(>&2>!f #NxX	̈́ǔaЂ|QڸUn!=h&UC1<.	ᘟ&mw{Ӧ
ŇtBR\yeXg%󄭎ZϙX9nd֠0:qss1XrA[2~_ V*7jq0 m752[sS&G	+B؃/BmV^eҳ2×٠bʨ	YX1nь'u!7NVqj։0>ӊ6I"t͌H+X8!} t𦣭}N9yNmG<dM{
*2%J9>
>e0M9/%owLtN.]==n?ҙe9D7M)X V$#?AOnSFp`a+|[BpX./vB&+8-TiZƏcB}[U.kAx֍q,?+a?K"t3N5S#fEg	*DR`!?Q_Ϲdϐ(yC֢K\``^jO:b*uoMānFOT+DR\"\EX6UŅOJ$3zҰ'f߰ضlGJmܺٳT-2aiwhj5R{VHR@"x*@9 ,J^FKT']3vJ4v^Ak%RDUV|0FH锡Q3eiK73AkZuZZoK*T$ѵ<`-Ez|e
X[D41jqW.lI69Udt@;FLAtи>&"V8ݺ
HY̕6ڥ"'cFޭhLSI$xD\,&c%\ z`72ag0H&LiΚ)6ǚBd:HxNCCcdE<шMXou%N"XCPĉ]pӍ합o&&q`A--HUhB,=u	J(k8.19.[1<11:(S8;`*
I4,i+)&xʪ	9;Ux
m?1嬉"锐Nl+Sܔm.>#@R峎[ktXHlA2]!%jX'_ε+.*HUwy@qϫ^C	v)	3WDIT[,)%^,=%<ϡ%'ѻ|=)eN$|R7Fx#+gвKQ+yXD.KӳY߰C_l鲔pJHdK<_o*.#)7=ĩѼo3lY9q8}B@Gx&Z|LUm^朂sG
aZR⑨ZߩD\*+FO;K+hf,29烼=RjJOfхX1.hhicW%˹*C97zp6{'ph{iR_馞xB:b
/ϵ3%>cʃf?2pL`HvUڝ2hb25\sY}.	ޱ,X}mJT;]	ljuk\ܽzn
SvF3J><mqa
y4=r緧yf=(xv|c9
<8'_oFww4]us8Fh.+k:[K4չa&kxboHȂŸŹj@0T.s%..;NKHvπϓA0|qm/})mqOM`?"}Ytb9CB6k'4
D܁i<U;&W{}xǟ%_X)ѽMS>q1,ǖD*yw4K$ps8c*3t͖vBniM#sB'|'+d
elp&d{ޒ_͒om~?gJHhy
D޹L{l9#,gsL=<m;BS/@⑳lU)^`w^Y.}3I_|٫f_GuG{7׺(9&T%1ZJ!Ak9QY04.6DQ(V4UTqL8)=bk	̽=Zmo>E^dv^C]!~1y1qqF^(΂x +}$;U̅~Z_tdMՓUAY".{6OijGM	XK3t}sY/C;niZA-+c vVus\:2Pw{hdnA]̛8[Fgf~f?G7L(lvçK>݁o,fx Ce~)jCM~NWqD]临tPW#~	C\)V5vl~+k~Vĉ~bK$kPs(y% sp|4(}|~&LDҧqPKʞ  '  PK
      A             <   META-INF/versions/9/org/bouncycastle/jcajce/provider/config/PK    A             V   META-INF/versions/9/org/bouncycastle/jcajce/provider/config/ConfigurableProvider.classU[OA>
E˵^P@M6<d]M[H4&t:NݭMM>QƳӦ۞w x/`A$}%!0
F-EKEaMDJ)I`Ah'gzv;LXe(﹖[>-[STR>+3$<VU]rZ"FV PAǢvmfm\*avޙ^7Q1suh<X@H`ndZ/o='-:-9ȽRxKs6Gin=9vHvJN%+i*´p+.Qc;
ѣ޼Rسbv-qD[Z8]~HU"9:7:T"#Mp0{ݶU*Q\^Ry{K_s1xD wܰ!nsgXu\y̸ٗ
%|F3iߧYznVKyn_I$@^
K`
dwYxqn /!^`UX9z:264cS=1'O^aG{PKZt[    PK    A             W   META-INF/versions/9/org/bouncycastle/jcajce/provider/config/ProviderConfiguration.classmJ@gնkoyI/d*^BB`:
$l6ż>%*R;7a; <E<&Ω!ffĲ4Z%l$RrakkVy\fF1O"c)1MWVnBpf;J&9hpŖMPcDXk|d߄hMx dTe
#mCndDĥŅgKڬQR[eo}<Io埰v?daGp	z>PKjH    PK    A             a   META-INF/versions/9/org/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission.class}USW,Pc
Ill륊k%m4DZ%6ǰlݍvӇvB7|g"Qfs~;ﯿ8
]AõU,7ZvOc̪W5iZzMXayg]ز7yaM0Vp !*3Z\ᶮ*3saxܬgK7S!0z
פO!TF0CsSk 
3Sa2z#eӸŎa0
ZnxJcM
#
ތ qѾQNظC`8~*00$?"8	`ۥ%hz`b'#H!c+dhJY
kcPaĻ
ދ}^xz.jq~xs˫Bs&opZh0|VjoN[|<>4t!FSx[Ovj#/a
.3ٍ`
ժօJct*+23;gvm[N#N4 #*˫ԅ3KA^Aad_("J!JQnT2SΫjq.lP/JqUt?m"7Z"@7Q3^ԓ<]{fUzRWjiAj;
l~^)e$ż+Rvj.WfQ|ٕ'(XiWT]Ugȫh+
~[teѷ
۽[pV͊80u[~wwh:] ӼeZ"FhN	?2Ë?O	/
焿@>AK>Mg	sO^ዄ5!>&lZ}kN&S[$c=OЛN?ORwG r^KnwԻ-h)ƖRPқx>e|p4;}.=*=[KDE3Dsx4$3Lm3Q%6L	ţMbz)n!{|MWwU0ƞ#d4:88]}pi/AZɟW:V<q!u*'t6ȥ6qpqHJ1X"<tG/gc?
>1EN97wϺ~?sL柹,=Q K?VonPK	ZD
    PK
      A             ?   META-INF/versions/9/org/bouncycastle/jcajce/provider/symmetric/PK
      A             D   META-INF/versions/9/org/bouncycastle/jcajce/provider/symmetric/util/PK    A             U   META-INF/versions/9/org/bouncycastle/jcajce/provider/symmetric/util/ClassUtil$1.classRn@=Ijڴ{H	U}@r )fe6u^G䯊M<|bl*}@s93sv~c<h+$
0c5W2c%JiH"O&ڦFܚHG2ޱyDhdQ啜hz03)"b1q7Uox=ke	g&69=<m*x.aDP<zr|{\y.6EhDl+rn6֓JOIbۥ#*O7HzB"q2b)4>3+Y_Na൓XEIھOFt8i<h+?y^1l<ޫ.,gP+(r6v,bohGO/8`lYe;UZ
AQ2?~PKBJ{    PK    A             S   META-INF/versions/9/org/bouncycastle/jcajce/provider/symmetric/util/ClassUtil.classR]kA=7i;ɺMZcU[muDFUA|av'NWw7ڏqޝs=w AE)Ә!u@;vW+Kyơ}L(zPp\\KӛLSBm脰mb
s.qp.P8{i$;3
KI:~c5T2Jv{Ã0׾l.g¿uޑ܇%\:	+9%ժv(Ӵib(LKA&*eCp5	uzsc{{Y@&ЄޙK	Vw-{)ۑ}bƅܐgqFc0{
l}9#ЇP[-!Dk[}F>b+Jr
VxUG-#/%u;;k
PK%yi&  5  PK
      A             :   META-INF/versions/9/org/bouncycastle/jcajce/provider/util/PK    A             Q   META-INF/versions/9/org/bouncycastle/jcajce/provider/util/AlgorithmProvider.classOA}s(DA$P˺'Y*(ԦfKu B
A:nϜi^dlR8Bc
`0Fh&f,1e!.,<9TZV:Bg*?lkB4$;`#gOyN۰ȧr<G7е{PKJ     PK    A             Z   META-INF/versions/9/org/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter.classuPJ@**'Ѓ䢈HiB`>t7nBk ?J\c-of7ϯ S&YWPn:%}J%KT;v]ѽV+N9w3jiv	l%UKVA`N~v t;&My6UGzVӡۑSZq5>jKV86hJ+l_M׼Ɵ3Cm(2c27PKF   z  PK
      A             1   META-INF/versions/9/org/bouncycastle/jcajce/spec/PK    A             L   META-INF/versions/9/org/bouncycastle/jcajce/spec/DHDomainParameterSpec.classTnQ, pj(^^`jkԪ-^ԤƄDtKEX>?4hPZh+n2;|so>}bxP$|^-m{ʭݦКF˨M^j(H6ƎfUmVVrf>fCXB
pZboxȆQ	x)h߼LJŔ/}WFljYan٫ϓUS%\Q%c2lQ?2GBAeL&_:ajfy)xHbRPHs@qo=:3<2ܱ	
9J dؼʻEkX]DgN
+]o
 E&*:Ʊ(-S >1hϑL7g"AKECFy=M&D:A]- 0 H$!!3$]wᷝ(TLVx9q01H{hũ?!oGu`SlHOlERtUJy5`CW3BZ}︇]nk;ǽuǝ	L空$\ᴾYI];PKZVt    PK    A             I   META-INF/versions/9/org/bouncycastle/jcajce/spec/MLKEMParameterSpec.classTmwE~&)vKP`ZjS$Jum690~g`S8xg74F9̝y>sϓ .ᎁLA?˳wٛaI۵Uԭ`ɐj5]e@:"cKdy]Hh%!Q8*Iv9
GNwW.]
i{c"eqd"R.
!r8p|0yq'ph*`Mi;"o$wLS"#^:>(wOyP^z>40ngꊀ

Wt]\%
gtWGTWutTI{-iH:Ib!C43kr	%G&8O{ug&꛴0Sx_</T/QӲ+n6s~}lb^8aa#2IF9u|frQ/<hs=T~-u,ux
m֪<
EЊR0mي[tYWQۢrӨPV56٣߫GGZܪ`91rd }(
m:ɦ[s{nեO~6=~MN{׫vQ^o/'F>`yf#w8:j_m<w-c.4TξV_/(uqz10RKgI;P8·	լi!Y'Ȋ)Tz,=ߡ>u3J#H! JXoo)f1rbxv1~tB/L?>&'8a7!_(ߦ>rB2|&_>r=| c:qu,
e}.:r.d w?3pXHPKjѿ  R  PK    A             J   META-INF/versions/9/org/bouncycastle/jcajce/spec/MLKEMPrivateKeySpec.classS]O`~^Q(	"lWW>
*D.53$UW^kg閷q?Eo^`H(*Ӥg;ysNv`*ZSא@+ChYgPv:ns
FNzw,oQ8]+om^ݒJ"pB&[&zS|(\ߙm)Ҹ0YY(U|j[Aqh[EAsY!_<ے`.eKX?`\r!!Tc@U
0x(U%|N
ѐ0C|
-ҫ+ϵ)~;C!	mD?+xYvd#GBֆ	&ir1
&F+
quFH~Rڡq$f*
W0`^PӚu&)D1(TN+f;\VbR8-n>´~d>#KOV}@`8 ;J=!t:x
h
=W\a`5|_z{
fHD+N6#FQMMŃ&F!	$|N7DeD%voVڑPK@'  1  PK    A             I   META-INF/versions/9/org/bouncycastle/jcajce/spec/MLKEMPublicKeySpec.classQMK@}ۯ1~U-Bы"XRbRDȿR((q-x=̰f޼Ǽ8Ķ21\~mCjJ1N߉NfW@
vA"|yvw#)n}ٽ#2x?̪^PXĒ2*_qxY|I~o)5XaGSM<~KC}|,E:Q2ZcȜ$4lϘ
;d.UumEyzRVfNY{/(NP}zh{˔ao<UuPKǹdW  [  PK
      A             1   META-INF/versions/9/org/bouncycastle/jcajce/util/PK    A             A   META-INF/versions/9/org/bouncycastle/jcajce/util/SpecUtil$1.classTkOP~
.E&7i7wQ	d(ɔ/&&ggѵK-0QD?QƷd4&ysrxE
i
#:a{ܓ"\ehKe"ǵ]%߲Q-vE :1J(ۢ/P^D{VȨ>v:[1QE*ɵ2jC'OWxV2">q<'zJHv1&2]Iì%`-)ƜW.jq		Kj!'TaXT*)|7%0\vq̿g׆CJ>4(B-u7PVk>YQ~&JeM*ª1aH-b o|9a0Rح;UkMqCfnFm8'^v:yNnDBnt<IY&xG";ggjX]T(B,̀pT(גoj<,+l#R'O5a{wsאNϠo#LLb W:QfۣR F8iy=$oPKVl<  I  PK    A             A   META-INF/versions/9/org/bouncycastle/jcajce/util/SpecUtil$2.classTmOA~E-T]\W1"ĤD*_HLe=wݶ"2
Vng}fٙO <L\A?a>\g;lPXiJєikw-%?QZ"v_jH'(Ropb%ۑQgwCo$DUk7P01 PL=}λ<a@U'"\W}ǄQˮw`-1B!ᄁV	\30i:n.T
 Tq\V1IT-L6q3	ynCxeoZoȳ'F%۸c.J]mN{7`Q&L/.:",[a^tZ݈+WȄCX.qMBjÂ

nGlgvWro]ދmkØ{pZO0=4op\Jk6T6SŘዘXL.#px5cʕ7<)d%<o]A6Ζc02zcܬWǘ;; SFGl><OL PKk(?  ?  PK    A             ?   META-INF/versions/9/org/bouncycastle/jcajce/util/SpecUtil.classKo@MLєW PҤ@"X@H}DTe\gd96'W@ 5?
1~@Iig1wF;wΜ_ <RH3dT!KX|K;Ʈyjp64ɵ/{814p-mxMTdWTP$k[kgtyP&]*a%F#:طũHL˓#.n7\u*nJMMAs9	pOo;Oꦰ=ݜU =ۮp/~
=BP''d:ހ-._ވRL7&,z"Kj*&(Fkj*[Ι͐Yd	-ILr]GyeiLU?%t\)êByUJ2s1>֒t(]ґDO
4gZލ,氎	X0 	o!f)$Vl!+g`2gmr.Z PK9    PK
      A             )   META-INF/versions/9/org/bouncycastle/jce/PK    A             H   META-INF/versions/9/org/bouncycastle/jce/ECGOST3410NamedCurveTable.classTmOP~(C 62uH\pxIF§]ktKwGS:į&(	f{sϽ?~~`*QC7!kc+LI螷][."=UjFySki4#tft;ZݫZecf63jj26dmEzkRpY}3[,+K5r
jG*\iq?B"su
H ҵ+?зDRA;82%j)Ү
F3Y5ި}^?+|n+.&.Ɠ!	xP9Ѩ1< DYwzveP#LV	ì$mJaq]}lJC<S!|LmUcov1ٝ3{x|{f4b]_g\ꑳ|v˭<	Sm_ƎjUfqpaݷc#Wa~X1Wސq?3
_n91@@/xyzp"Pʓߑ8AcZWN0LƙLG[l	!^ "xۥ`^!C]1pGN=ǃ1~PK#ox  3  PK
      A             4   META-INF/versions/9/org/bouncycastle/jce/interfaces/PK    A             ?   META-INF/versions/9/org/bouncycastle/jce/interfaces/ECKey.class;o>Svv&FtҼ⒜TT̼Ԣb}WgJvFĲDļt}FԒĢTbF]
M&
@h>+	 PKW^ށ      PK    A             F   META-INF/versions/9/org/bouncycastle/jce/interfaces/ECPrivateKey.classϽ
0Z?/ (wrrg}4\cBm!M}5CG;s|Xc"Jo(+BZU!grMi谻zۨ'n%RS\.c$NfP
-xpbyB~zHЇO8gqPK      PK    A             E   META-INF/versions/9/org/bouncycastle/jce/interfaces/ECPublicKey.class=PYD?DcD=c"!	W ꛙ   ,2樨siV.SNE9ɝg+Zvs,6!aڛ1TL	T2q
uB;ZwaϜ³kI @!lOxPK7n      PK
      A             2   META-INF/versions/9/org/bouncycastle/jce/provider/PK    A             N   META-INF/versions/9/org/bouncycastle/jce/provider/BouncyCastleProvider$1.classQMO@}WiRLx(`ݔ%5?Iƃ?eVO3;z p]9
lQb8UYI()ʽ̘~!C)H~|2L
lg=7OOdrΐoGVQ5XCh,srL=2PgjgJ&w\"Od1/hLb)N$BiF͈ڃWc-G`_GPZh`Xsty
jt۠"V
	pȀآ7(
UM@nb'FE7PK8S  F  PK    A             N   META-INF/versions/9/org/bouncycastle/jce/provider/BouncyCastleProvider$2.classVmSW~.Tm/E]@چB
j
VNXfvo2~Ϡ3`&QB@tܙg9/g/S"]fU\f@9ܰY]9[d떥P`
'je0Ua:-yn11z8z5@)j}S[Nppm1$kZG?bjcWeI8Nc!چ][M3t&+QcYsaQaY2c'&j
U 
ձfE^Uے(>6p.2:"&ݞJ$[Au}q5g*vQΜ@I)4Q^RjDn3dJ:aPDV:]=ZlLrlz%**PUXjB_6yC1s0OOS,ίGծڎ,lm:}+W-HO3OEWO澼V,֜
܎m:jε/Qr,.hrCpTYSEu]gXGXC`U$CLKy~W76nA<yJ?8|`BY8y[tו~(.Z"xp2n/Uc3X
!H, PPǓ^aNc<]]'HM]K]ہ J/7>n mRw`i]亃bj<lm8Kh1>z.D"tbUk| vyCLz<2ܡ3
<9,6C߅$ɮc|U:=ra,`zhcYƫQ/B`PKܿN  	  PK    A             ]   META-INF/versions/9/org/bouncycastle/jce/provider/BouncyCastleProvider$JcaCryptoService.classJAƿD׬kZ-I,z^
:
q7Ny'/T>%ݎ3soΜsws k!`bKao	A߄lrlp^n#~nKK^p,/%p/<.U/%!SgVAJ
&Q$O@	Tˣ`c6~j;N_acwՖ9>:R@Ƅ`q!E2}ؔڈ'.Wu䜡J P4~mP*-X?5nc[#dxKI9<O&?PuVuHd$NqDZę
%.1Hbh=Umco PK  K  PK    A             L   META-INF/versions/9/org/bouncycastle/jce/provider/BouncyCastleProvider.class\	`~IbKrw[Vb9 F׶bY2$ZAA4$'q9
-^(-m)W7ve)v/vw͛3ovg':jH@A>{C!oR%"ޮD|<ү%FRA-1	kVe[ilXV@~B#9c4v٫SVM* `.'{cp(j޽a;j6hMiKE^s3<$=b70JDb֬.aCh*,& 5m.tPB@SqsbV/7Fb&YLmbvAϧKy}V%Bϸl()PF=`5Ҷ!
T1˜ndO%(mJD#QmPGNElQBzͭ[7B+L+#Z2UGn-XG@il{<
6yD`If,2xO|ZFF4	4qoÏW[[}A޴A@WX{ꘆFSqO\ sTK"ZR֬=>]!VO됐#].}v7fuIAOfq(V߰v '4m'^.x3Nd=B.nhlG18{zc=\ڼ%Cc0'Y<.*(YW.(:w|=~	tv@]6ߢ㊣F !'3Z!TuUm=\FnF7R	*lnsgy.w?Y=v|w"	+,>m͍]*\Er9Ws
)NҮ%=im(:L,Q]gn`'֥F&DoKhPSn>ceErnއ|f47L"0om*|$zilw)fkdn[M'VGWGgf>~@˩7%Z)VJ.
Wd.-/}
C%`Kc3oRgmi}gG@eɧ\vFJQgϾ@$9ׇ/2|6ECIMlivؤ[|5
U*A`Mj
LǠMHp4!͖HsXqz
B]R3E P?sil՜^{TZC_vkUa1ViلocꓖЏ[ifsrB֣Lj.U)8c_i-*</'S~8aS\%`fF1
QvٹWq+'#aoB)~c)
RɌ\kj~o<7[ip3S6ib.Y?`7q
EbI;	T`|cj<пyCЙx*&g3xFFߍ	ܙ
Sd6I!LuC|f>Y1kUe35$-Õ,zv;p[((p#!Fc[VLum{ATm+mIBQKBm\%5#(NE\dB#RIIbhO=4U@H!݌x<4e 2+X .,RH1#|aou;DnUy[_:%8ӸRL!)!g⤛юL3SxJLBVX;m?vٌC\3KƬSN	.>hS
YE
B$D"!
2RI!e<:FjM`Zg4hw2Rs'W@:gd٨[%cU=aoO2ЯR#ɮS.U80zYxjJFQ7B\U¸"E΃RI##MćG@l <SG/m>nLJ~Fp./9nH%j8Q#DQ+#m8hX`37)BF9b;P(م0dajS.Fv$2%]%OPn*SVƧ
02x
2SZͯ7eEIdJ32z#T1Fso 3+8\ڗF5N{#WpҾk9mIȵ_3$8FNFu
a=ԣF>Fޟ6CPNF>8C-ܚSDO:Cm|*{8~͐yFS/&ΐFnտ`kΐ}'#9w
sPHp	Fe)2bJyXUEM:Ez>Fd8<|rpo(F˩*.]f(\Xh>3G[CF~R03mB~L`T rx;Z2D?#?#I_0#ܻ=8K+pSESwh$
lZ/O1pI)w;={2~F7<e϶I??+/7VfaǮV_0K5CȠB^ȶf:ry3}<7r\p,(_Οh%.
^
^"Uˌrpo{H-髫VkL/G#Qd3L|U(/CJ$V(3IsP7YL`Nԙ[iJp"1E.a\n\mELrO̫1i>AIy$vq1h1yRFGE8JK̩'hR	tVLZ)|6/EF:I:j̦UL*s6ՙMFDHXFVSP_k"yg:k3XwI5
TTcR6*I+܀KX{ߞȰՊ8NqoS5SN53ɟNV&Xu<.g:!Eηow1BK=ȤPI;x>GK`aWޙ3ةq.N+Ì>&]*)e"chr"i3ޖaSn"
׮MLڛj+7TWbMdrmI	^7:RLvɰ2[I-b.g[W2*F0魼0cZWWۗL+f:]v&c-9od;aH
:ɻ\$2}*L0S
3#of-H)c*jLO2鶩秙pӮsL|.CA&}Ѧf-Ԛ_fW6_e6&]!&ݙĐrIw)"ZWm
8ʤ,q&3x&|I1ǤmZjUU&=ɷx6|IIc.ieLAVGLz&&4'!LzܦSt0<'bүm-^
eS9i90wv-}Uu=#domƐfӲ	jc&3K/&&&*a=ٱ%u[w#?y5w∪"̖O!%N	&5~'?=HՃxdxB
wѨ6SfqC)t|Rt
eW0ѹR}X1\*6Op)Of:Y^.GЋ3'B1fA!*]J@
RB	.gjC3Zj,TٌCuj8;xF=
XEZj3$fC۟Gwq/Şj7
:36d{[,7opL@؞A-e	j2,J8zA	e{tJvdȩ2kظqz>)x\EcŻ{@[.a9]8[mKs#ś6Svv0gթ%"(+p`ur2MӉ3Vm8rA88=tt'_NIR4*\E/fG SOe;ξvCKFoKLKƫ*jpMR㌔f~@BPAtXEGZa6!-jjmRaV[}*8=mAlSeX{zTk"j7(H[ii+=PUSYҷG镌^EF>
diѨhZcVo@JG;}J߁ȇcFB*o`.X`g}C!OEQ~Ă֯設ꆪڵ*0e+?*3>(*@8ŏ"U	4.GnC֎6c*4?+
hE9XHKh2T]ү߬үj-1JP(;7
J
B7cS*=Jh'Q.JA)lQ}XSpwZ<K'R鷰9سmm}5*}Oڪ*wЎ]ca~9Wê _g{Wg0WPvw4<h<p02ZR?EgwıF?#D3KGsJī+\-RS8~^~}n
]E{D%0v@B/SF5VUOdOJT/ԅImLZ[؏6Q|E[5c10yoа*Z(Ԫr(ԩ㤥JФ@<+
+Uyys-X+qZq$eQdrM/u8źU>k*/u˱'*cSc(QU^ib_G϶@R5uB]-*cYḏ|[ZjcNМ\iQ(܎qw_GcoK3	#']]ƭ~NVtESj㳤t,Ҩpt&se?ܴٸEnt3E9Nl'n[[92Msʶs!p`%{&!~N(Kn+9z0㙚>TmHc:amueV$
tZ-BՕiPUw#~c_fHZh
ޮ7۽_5rM;ބS}ʎ3p캰)O#ȣZj(ޏS%n
ʗbkd%D	)y/KǴT$>{p$d%lWeLWCX<UNh8%lI|FZ
`?B8F1R9a@I)Y6Uy/[3Y5"%~teO?+!@pʲl	qc<a"֌?Q0^$~[B\:=F,OY_(
b!18b"vC4?INU@"WXϹ ˵x%r%(b0ˋ+~_v\oۄMNkZ];_hW^
F:[65wa%F[}ևEoe<'`&< +ðt,{'ܻa$-cPN !oMnʹx0O2ð,	~:E
Eaa!
EwB0eAw((sݗ酤{L/soq_vU/}^xF.{{tX/|}^z6gݟp!Xzw#^4kkº03^Gǃo>H3ꠈcdbc5' 岻`V|~%⼇w}f$Ose嫋	=)Y+(K1 Ws@>(&<țeP#gd`!ݴtAZzz%Ov@HD^s6z|MȽ^.y7pyaB[`>d.	މ>x\I3z&7^yeX2`0)8nVp,X(Yr?9(Yy˓1t >n@,08s6.Eݤt>0TŭJ~av;A?J6#jvt;Ph:E@{Hs!v]@)@;Еt́@7:л@sO:ЧstЁ@_uCtā$9!ɽ
=<IE}`<':$y:zҁ~;IA~@$#>I^Dogu#IrII˄+fBЪbT;!%܁rԁ'
D:rZZ@Ii3&h&6D:tn6)DKG
MJt4@{hāF'$1;Etw]t߁>@u[)}@;@hҁuo87azā@?t;K=@:sgzށ@/:Hd	o,˻1S˽嫏RX	kb_		U_k7󤆈&ICzTDz2"%;J[Ebs	t(A.	̬<Ɛ\MS	Zps\wD@En5RWYtpUhL'
H3n' -ҡY&==[H˨&@`	 N#:_8]Da
-vQ+
0%U.->dl.-4zv#g2 mZF8=@ǚ㴔-Є
5eL<O*<1vn>vy'h1xy$[l"NNqWaBWuzjm%B1j*3RW'\50	
bd8	
v7ex(9J|n+1V72ڎ-mC9T^v^ !{ھU(ġ;cu'깐
=5b:EV]
U(rr7;p($-;cn#ZݰƠ)p9N9(S0f'&o$yhv/+ lwek'ʻ$^.57;J{ыI,^{H/O0#ty n.{Ț^C^C{<4XW`ꡉl ݏ
sxE+D5D5QuEp(췛i6"ջ$A/x
GC?`Y ;Л-0CoЏ[-Iy,X㡟/X`~"[_B"[wX-zK//VzxQZy	,Я[Cz,Ci^YlAvXG _Š>&'HY1h&hO_
_>ܿ?>7}[z.\d0unYf27CfȪ0Cv	3d&̐3BafaH!/fK2a\"E>KDRĈ|Tą\us;
!+\d@vǎbCx
'_%_OoXjwPFqy(IigU~=r
*(?PKn   V  PK    A             Y   META-INF/versions/9/org/bouncycastle/jce/provider/BouncyCastleProviderConfiguration.classW[
X/`'N*!lZ
I6jaNZźZ)&iI6=#vNZz;8=6_~n7Bofvo=o^+ "P-%[fHəd`hjFU-ffh.mU9*rJZl$NB=1TQf9orz%T=g~	_P6sZKtвIU39Uas<(%Mr~:",awHhE$+3䩔:(D<öXz߄7 D"Nt0ȉUSа+.-`{poyCM3xWrFN:.o)*>^CƗ쯘|7:ڌ#J4Kifc"-m[.k$pANXePNp[Hx;AMFBP069ѡAg.0i-'.$I7Y\V3%^nyb9Fn"*ΟVQnUO{'!0}zGϦ[+Z"cDߊnX)qR{}[VgQ	xAآlQKQ	T򪱁[`WbzH0wu꒓	qRB)6wcf]Іi2,4~$L]pa7l@gsF:*_mRqr5<LSES)5)zV3F,/;xn홬!w唖@^Ʒ24iv%h'˭FB
Tf%7{؍,7#W.|Ѝ	Ta#U^y	ƺ"PWV8[^_R}刏Jx#&`8%#B.		)Г<зUZ"NI	O.6к/-Ӂ>-*/">OOӄ紉vJ3bj&iL7m>'S.d5E͏I-o貾
yj,Vphp,6:9	ޜUG</	((8:G9A^y_c٨$ۉΦe-S
ߤX	)_-_O86kmn,/I$puᘈcO"^辝U߸$%	/ca4s/¨MR!&qފFW1K
vJ
vv*Vjج?sMz_7^aWVRT y=MA
/vS-r9-OqdN/B0(]Mv'}N7A*&B t~#4z+R}'@~}CJ~gIL<y^t˭
y_e	j65lI̤ˤtA&Q7EHFQM#`_X
%.@,
hDp'
XŞ&=? v_¾Ez!t]u]s2te:?7cc
awr69||X|'Σ)Q&<_+4	`R{2AN[;03~2!fE-Ip<kmf_ v@zwU(55@*kQmb
^ݼhbkC`7H4-~gs`yE,npϡ=1ؽ,cϣ{~=$o]Wͮn>%|}_g
Ot/$];S֪^)O;<K[~?!qs	Ya
^Zw7G/GM~ğlDyp[1?o=ßhpki&eǷ/a=A{6fg9Kڳ9#l-̪xPKD    PK
      A             .   META-INF/versions/9/org/bouncycastle/jce/spec/PK    A             M   META-INF/versions/9/org/bouncycastle/jce/spec/ECNamedCurveParameterSpec.classSKAv44A7׊=DJ@DDiu:GEo=7|fy?>"Z:Vz]0'+pZ/[3/|Kr}&սgՆH8ʩwONw-DXV1a
9ENy$EŉHKnЗ=@>~aB""oV!(Ͼ2[Jӟ
Ϸ|LZaxB5Z*[pDӐe<N-ZKS+'6x	 w͘gcO1w!b4c^-2B%PKNs9\  l  PK    A             D   META-INF/versions/9/org/bouncycastle/jce/spec/ECNamedCurveSpec.classVmSe=OYXHZJ_D6Kp+BQB.t0'?9(/2?>eMvLf$s9uϿ~`NG}\ul\M=ս-_AvaB^+!x&~H(HBa6MirHDuwH@=1kf~2tu
NጂxAfEԲۼʝaHư0~B;
'pJ	x{Heo껨 uoN%*Q\Dms.+}wD22n珿:YN=x_pKv%0`ZT((Ԓ@1 ۥm)
3̀{OIL Et̲nvYtV-ο[r&q+iab/a4V;ħ%31Ð>1_\Z_fV	|2Pp4m.e볞g4Iӭ5?6jXGi|}^tm$T#.e
W>$>x<($
 <2
ֈN
ZncxX>S
9íMfeV-=*<lf.~JgKk0uZh?xU߈|0^'5kw㌟* ;àr\lSKBMepqިiٰCʹe:N/dԞk6vv|w+?HFYo)
~dBdFa[;d?#.NC@THk;`{Kty[:Jv2%MbtO3H=\HhPv1b'tJ7Ryw0p
]0P}W`E$c$QeI=,$i+oxK(J7#Vc"`Z<o9rqwk6vds5
w W#8eH˦38p#A:گxL9PKye  ,  PK    A             C   META-INF/versions/9/org/bouncycastle/jce/spec/ECParameterSpec.classUKOQn;ePgGљ)0"(Њ<Ba!q1k[NIp?&F&c<JFg1'g/ &^m{m9v6iIgnl@PEHC4#OZ;b6qí
<a-7켝.oKap(c)Kbtp^Ev\`o ȥd0gl'DttjB7[loH0.$н*%˓<Oᲊ+!v|9CX_13	ÔІ5\u.g;Q@JԠVQ4F2Wiev
zsz[
({[ӌRrA1)
0MB*rٔ
LCiaedT>țVaY	ݜ߽nd\9DcObSή1.}C]ghtċ5{p$yp){]XJZM)yf=G8PHF̏`f)s3	J0Y	@Wc#9x:ƪX~C
a`Z*$#3?@}W5B1wq<cjGXcXįCT6
7y_X3)?#t6ADGPPǒg- "0'<ђWd6S5%c~PKb7҇    PK
      A             *   META-INF/versions/9/org/bouncycastle/math/PK    A             8   META-INF/versions/9/org/bouncycastle/math/Primes$1.class;o>SNv&FtҼ⒜TĒbCvFĲDļt}F~׼̼tԒvvF|f12x9$(00203@ +da`@cIp  PK2$      PK    A             ?   META-INF/versions/9/org/bouncycastle/math/Primes$MROutput.classS]OP~ֱvl0̦W5.1!Y`Y=./L$M5G}
=y8w qGG$4	0Si]>y([RܶKӕ?qowЕ/#V/Y'-UA@:CqB+r[9G'u=)la ͐SS9E$d
00\al\෯#$.C.T¦~T\2Dg+b|,LwejJK;BFDcw'`Ⱥʼ~;/)x:mj:
T`l{j-"Lbao`H
{.a(A[CKEhP
qX]1p4ktbj}NQ
ΒļU<ây⧈pU2LXQ<7ps
x҇KCx/(f$'w]%#6R5!9.ENaz 6%AhHڶoPK;ke    PK    A             ?   META-INF/versions/9/org/bouncycastle/math/Primes$STOutput.class}RMO@ŶXEQjB<xx!1DÅSMbbă?e|[h顳y;l> 0*)ߩ^ka_Tz"(]\aH+=.kN#Z2ihU<!Umϩ^ދ.$+f[,"CH=J'tUYd e^#$:
IX!Qk$	"(A5GWc9݇`Ucbv\6Il_A S<F|*ʄt4$#ͫL1B1+;1o}@F0VaCzuBoa{
vfe;:ύ5q	 :JIPKW
     PK    A             6   META-INF/versions/9/org/bouncycastle/math/Primes.classXTy>ey.XHurqaw;wI8&8u4[%d'JCieA9Nyu۴MI==,w̽s;W^ &A^!-ٶԴtnl+pQ*SJnO1;Wu#iu
HøRo]/15OrqeDػ$k(jzi9Y%yv*4hĤ1b\OSTZDDldٶ¤J+%#MZmOL<\AW鮍M,"*!՘16P*1Whg
yswS85anӲjLI+iuhҠ{vPোfb\z	aC(=8[ͶEMAZ6jV-vn66Mŗ[҇M
UЄf	-he^LyL3zM/IІv7H؎_}J:J[l_'&	I dn	}~2-:I
ϰauqwJ؅[ԸqvV{$ts;W6	_ir(*<޷1kۄ$Oʳ[8LRޯKE]4ojq:C&%"/aCCU`H4f	E%5=YԌ!>%wߐϝMgoJ>9RTk39> >|!3P8p{{HP0F'\iYRmg>G<ơPyK)ѧJ.w-qrg(ƔjrЭK|5>1:ȇ4RN76,fxk&n[Ҳd!	qW^9bܫ4+n%VUV.z|P%CJnRuc&&>ips+unܞ}?{CùN7n>'{"~_\Huښi%ǧȺ24kN5弟$N]4=m?{)	OEzE7n2cCNpg%9"J&8@'si]k`Z?ɻ/1ԭNUÅB<SиrXmVrHX)gy@|@N'{W%tr]75	xACn+8+;U.Kq;$eB>-kpډ	$k߬fxM7X4T·8ܽ퐖Q̌ %cFw$|׬\ɜMxykv*poE7Ը,yO1sRM)-G:urlDM';	?Zp+9fGKǢ.TxsZ^3*!Aͨq&.gv&3	:2gRLFgRLjɝC}{z{߱gpo/5RN²2QIh)d誑sT˺2Br`21s7CT=f't3QW/k_Dbؼ$*EB+-ӕ!+I}
aN%k{ou{nx7!+{݅Q$8ѧL-U/ReVɪDVME.!^vJe)'.^6u]$<G>-NNѯ8<5B>JRDo$	=9T=>'6V~)Q,F.)2
I)-bIxxTml67`a^z^!M#	!qy3x5 qڑxe/CGըg~
ז\8i/R"2yl:KW
$^#4$*kovNem94z>q;pN"p;u6qOvϡC>Lze!;b3Ȟysg\EAskI|NrO;'IIv	P$ 	w8<6_HJ:2L26bߎH'ѿt@=%1ΎhYw\CyNHlhQ^

~M"c+q/W77.Z@.Z!ll$q4-w&qSL`kG8c{>^}UnYxe<0pfV VlUo]Kmf0oS!):ˮg5Z#W*{")Z\[d>	-"EY9>
~\K_-Č;r%UNu%9oy&N7|lEAb264TU4b'*IXLuSl3=bb괘vZL=6G3iQ,~zȦ#bQu֦~l9A:oQ?hQ?bSlu>BQ?FcS6Wp|8es<gsUU+8^9esnsiq`b`;6m/m0#hO\$.L|\t+$ňX3vN!nvr%e
	3BE7"%ཌXt&1bh /wvE3x̝j^uxÛh=yA0OӋwEǇp<y(
Q!sD8v,)N,">Zgٷ7Ϟ@8=Dv?i_y|مQO'?ֹ>KzþHE/oҟhx73iC_RaU98oӋN9|Z!ؾ(o
e|^&(%r9t3sQ3_E)RfcG;rH;q9,{Lg[TD9gtK<{q\$8h9_D cQ'|?菗1&_GQ8ͱ<7j8eR*iwwN*:ą@
,M
ш={X״p]AND=ahD+nkuimlS$Z6c#!"pSESMD$D3//fwr¿A?,u
2K4i78O}v{-qagObOas43~+>1
]R)7'a3x]dLGެ
??~.?U|iT4uꏄY3G8F),a+w``Dƿ
x#j9?F|0-7
}n!xZ.̠%iSnn2+H9}CQ=)Z񧬬]xm5(sXv, "}>&-Oyڻ^n9A3'߳be1jYm!mѸz},jXPK

    PK
      A             -   META-INF/versions/9/org/bouncycastle/math/ec/PK    A             H   META-INF/versions/9/org/bouncycastle/math/ec/AbstractECLookupTable.class;o>SA.&fvV6FĲDļt}F6̼;Ff
0.Nv.nFtҼ⒜TĒd}Ǥ⒢Wg҂ĤTa9`#Nݮy%|jx✟8!v%(,Hy@Hjmg` @3@ʙ46
`y PK(r#   6  PK    A             G   META-INF/versions/9/org/bouncycastle/math/ec/AbstractECMultiplier.classS]OP~֭+c*S j!DF/ztp㭷/&b|O5ysr}_ V@
i]{߶|;W.w%C\gHWpAa"a&iزm=^+=D2P)\d{v$}~箵	E@Zg:H(+p!q9Br[ҵf`%WM\ǴyR8?G$ba&ȰD;+j:L,baN${+}_/TfFB
C|g{k*&*l=[r5A2V(+ݽ<"W/p2{:x4G 6|/	P䓢'~t<
>?Q2Lmwڎϵy:to4t]h]UF5S
axHS+X`cL Oe:ƕaN'
U-142R&Fm0>IC~iMz5MG' &PKش@    PK    A             ?   META-INF/versions/9/org/bouncycastle/math/ec/ECAlgorithms.classZ	`ywgg=[^Z k0-M+i$-!vWئnBbNڴI+PI!MZЖh4mB+ߌH:<|S .n	
]{3Lasw]VEs}lp>~ @X+gʕՙT;m[CVe{
t9A&Yx!uD$(p"m
Kp,ϖwuo@ 0tH,2utټU(gR7Z.+hzpXlXF@(١BJ}J\KX(W2
ڵwnYцuXvH=2w1dO1wPg3mG*6
c\"JrFԨNKkurP&44J@VF*+n)fh0-grR4S*ehn gEB0Uq0WYb<
Ca?bUo9iRֳ'qk%CjqbGsH@}~,d56ޯhlY󑅌ywq%u%6aϷ-ȠNUbb :Q痭.xD7n
|42-X+)X|M;^ Hr`!fNl?xP'Nn4h,aw[eZ`{fZ&$6yp J8@	|fض\NIǏ^.CEž\rJOId3Wf@E~fuL>[*-eߓdA!&hz+A,(7.kxX.-W8lʰ-gVm}r/0"q(9BeJG-ru٧`}eˁEAKݔQ!{Re*f>m)p!%އṢ]RyCWaL⧹@e+;ֆ9^ʕYm/J|*/3O9;T3ѯH*y
+}Dؖly_&12tg%½":fxj4iUOZ573.JN.9`Uu&%~9ɔ*Tx1Nc"TbOJ|[S>B|FT<-ڔ))kT<:>+%.a)+(X%vN9DĄS|RhxZxAhR?0kSx1R"#SG>Fh{JbH]$ͼ?\̷gXjd*ĥ Gz	K_fKhWJuqS<XTp?ػ&%U?cO*__P]v/K_q豆k475Կ]ٺ
h^ĐB6g\}$)>uEd]?	mv|fĉ=Eln|x_Gi]r:
gO
Et1{H=;.,μ78վin#qg94x]*DT%\c<UuڭWиD04`(K]
1)O]j9p ;D@
)T
(VZ]:b@RD86gY*pu(52JM@-:A;aF (E\X]GG|W(GA(ؕ*E[%/1ŲuZcbXRHr
bё?WuqulYy*V(\mTnT.bh)bCuΞ %Ɂku)4NsS}Ku\Jؙ[:|$	R794:̅sH	\VzYǁLl$
!%k*Y~kWĩ4qҬ?ge
Nw<^PE]91Ż.x@7S0:2.zxn[w-L>>;ܖ,*5PO[="q3L{c'M-S=
J-She'5'vz!!5m1YbffgGcRlm΢РNS"-zؔ$`moO
+?MtCN5O٭5ILƔ{LiJIYyKM!-1~tOঔ'hjyĮIr[3W.z#K43hթ,aV1%鎓L=Le'pct8	ܩ$QrҼsFuҽxmj'ҦV>OLodxgp5Iz]J@Q
nr6&
۝EV]px"k{!`ο=bÌolJ1c!ˡ)̂b+Ү6	C#ͮ0݆]vc4=^VM<DOdzлR^z*ӣh=)x'iED7h[9Apn;R@81{{I~W]=fhy@+_w)(O'yY	9\L]"H=g3:EMJKms/"iU[f4%j>>y7T{&^6I0w<DJו+M=ݫO7S^ͪtħMt!jvK3nEJv-ҽ^{#&Ke&锯wR~SKLTRɪ!ĵߐA#Yv$dZ+U+!!#|(1ψvOƫ/;TmU
ñ:XVcdmn-IwbvOc[LyGLzM}^$MO5
}iI<Os?.C{ 	bv>Xa'	4Ot4IyRR;ഉ+P$Bcg,cWWRWWR
4=x-hMMfȌfl0&ַ"H*BlЅPM~~JAX#bFE4
Q?ؚt =Fid^ʵ?0u/S6\J.3ݫ+1'q3bn05Ȱr}Ӹ~6}Iց?o9hn<)S"{d:'s% axOI!)'PАFqGȐ'fw2lHRUQR>vC}A*MdxA3oFXExtCƱoX4g`L7#oˉ,tL9:a\o=Υ4S6AVؕT;,w/OG.e~Jӗ+Ǵ	
ڤ@з]EKtq.FU5wKK]<-V:nq쟴hBzbSGRw%uq!1!<Oi>(fڔ,ԱZȏ1>^)i2]I3Up⦏ozW0NN˟&կQQZ)&UsʃkYݢqё
ZcjCYw*V_(֨>z_,p>
e(dch] ;3 Sv-ƅ:_W*lH3
fDŹFcKMnt&S
iS7Fg׸0͠25x[.<U9HvS3]P&b흇6BV[hQ9<O:8W?
ul`	?tmKϦV*;8nPU;ª{{bm K -Sꗆϔ*Rk:R`JR8iG"DvRNXewK&aQX$z<OPRn5Wuq2u.>|Wx^̛zMe4"WhbLX"`+)nlqr"̱yvyFVFN;QϿrT-*t2+2U-U U5=MYɓ%6a8_ǽ)
>UψhSR&.cף$5B)yS6y=`\2h֔9L	-1)VQ'@l J6MF$>J6h4
$[=h\cɥF}fG3wc6&Zf2&7N$O^iBҰKs)[2JX㡱&2aW
-xTO~r$'լ]KΡImo AV~'K}PKb  )  PK    A             >   META-INF/versions/9/org/bouncycastle/math/ec/ECConstants.classuMO0Ɵp/3QPᴃD2c\BPoe	[ďe~ ?-Ii~_ Q+ 
"#=suf"E$C<_pQ%$|	@b Bϯd y"ֽ
V9Ofk?qd4X`)jFjk7Zo&EI#<iME$͋F.A$NO9nҕ'mv
AEUQʹzhlDK-ՙ{WZUS: oF,2,ʰnÖ1ۯ]~ PK-88    PK    A             <   META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$1.classT]OQ=Ҳb".K(X?P۔	(Bbjb/V]]0cE5⫿FŹhhzw̝sf~Ea
.-fEk%RܫD)f%}A[V%ltDa]Grw2rPC4x|BFꈣ!UBz8&4kHha3=p}湼岣3xo*\UC蝎Vmhg/{bܩa2Ln||a
G%2rDY1tฤIF^NjуS{e0:1ޕHUX9K,b,I:zaR 	~3%cq*2
}/"uf61Uq	F]YduYכ[3}80E71ͩsvrjU`븀mAT|Nq7H$m7kZMIMDr~MIK3Pi;ERj̎504UYC[CC!q{!EO$ [)4!6u$YX7N	sj2?ZB^q1n>PZq0yt[)݊ۖUJ1xf&qO=;l
!aƾ7x&.eElAͤt 1Uw*׿Ah3N5&!h4(\\qK[Ǳw8+2BOb-[PKL@N    PK    A             F   META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$AbstractF2m.classX{=kMBLG>rȲФǵ8:iZ^+-z'P
54nB	ޥ}}ٕc[ӯ}7o޼fϿ|Y Ok-;2`HFu\CkɫPi\m#QH
	MݽN MV}z.mZN[X= @4oef;@c"} 7le%XJOך1/*8a\&om|ٜWܚ?8kFѢ2V(Jn춭fDT+KG7T3ںkM7e"8gf҆TvhW*BVAj!23{qUӥ
ƹDQ+Xc<ke\`$GۃcuviT푎îf:7%JoieV^WגѨ &ho/ںǵՌ۹5O(FEK"Mu"z6ha/ȯؚK,xc_NUx@~s@|:`xl|"%Dwz(]l=jn qƙMX(Xe{* tԹ;^/]QbumW,IFK1Ϋ2-:tmJK8<֥܈.'Z[%jZjĬ@1E7vQ{EZ";5g+
fpn/61)qiޢ
l@b?x7Ĺg6-hἂl+T[bQyD.}>K9K7r
xnSp9ck-a^W}Gۙ+Rϙ<+;
\֌nf!>ְ;XP<z2#2ޢx>Ӱً`["2E[wGZzyPl-ٵ+W
RwpBew
 dH/#,|w{vn]Wй|pm,ek{jkW͕|L9;+]͡r
>'Zѝgt<cp3qTEhvbQ N'-GsOSS NKV{RAO/1|_XP=AtY,%N/=DYJ
I<%+
Ni3A:
fXrߜP0h,k6KN)8͒p$'gqF@j|Cvjjl[
٢(W-|%-mSl-Kz]5s[-&{t
8&5(gv.^1jm|;T/֙Ok/6˲t6hM}'%ыrOwn=BIò\d[sƯ.z8[E7n
񜖊e!62w?RtXuH+k{f⒢NМu]uXh{+pHAG<=v0zJ(ivCu.S9+MeU`wR=5seߑi_	IC5 @?6CG%C{j-'Q^V_{
1`
g:3@_Gmx?/4w3LxioO7Tӊ
hNj$^=%_u^wY,y娘(6!zjIع=X|c'+ћ6k1i{IoGQLDLIHnb=}KxW_Ѱ?ďJ.]MvMg#6R|2ٓO\DETZcded}$ӱ
&RC'q(%y/3_J@ 1]"%,󱸗=Lx/'@<PXpJbuCC%H8~6XhJox7s󠦿9>z)l̼aN7ENUY7ݟJpl#ǖКh7Aru
D <cKjI6`Q0{cB<AX76%£
4NHaWK3
5ja4Ƣd50{cJ,B0P»TS/VQWyagN=͠ևy1*Σ0x	"<E!<hF9	`
PfLxDy%4GkЋ%26R|Iɓr$(Oh)-[R8zz<3FQGoz\H
!$սdw%QqCp_yW~C_O%g)Bn
@?PK0zi	     PK    A             E   META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$AbstractFp.classV]SU~ٰd9PZj?BT-DhSI@fsnvᵎ/ꌓW{CC0d8'g~=n~ &@LG'C+WwM#rUSlsskK1COE߮0L`Ʈ\)*o攁.$tÇㄕ`輪o0dSm{]1Ћ:8>9?]
oZrEiGgR֍S14N3\jpM^v m49>pFYg,é.Q֫hAccDEq!ay՚e!ي%FjY4ݲW
uDUfUm[RsutZdًGckW=qe|0T2:^x	WZRՄ#iT뎴k&r+=6;N`xYy:)aRQNf?	suPc1x13ee)Vhq\Wi_(0rL+8δ_+sY&mۤa:vyٮVEc7PTC@DhoI[	;>Xd"3\zq',KHJ.{K|AG3F?*>%["
|u|a0d.m@#MH`L
G5iv<b4yL뷃?;%p/KҴڲYrBT~Ti_TfNŮ"vtC"/0_.C
KD:w%vteVFn3<EwDff~E2@es

ط!BÎ!Fә.6ƒZw};
:oj'~NNZ盧
1+1LNj
=;OCOqc7a0d<=6+MC{qOma^ch%`]^J*lFt"P;B">jǿUE/J#PK&w+  	  PK    A             A   META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$Config.classT[OAn)[("W[@oPKӇ&T%Mmَvݢ+&M$71Z*RfL|3	n0̛V%e6uWUlGT\MنãYxU<NUK3ݾE~meGIQI?Cl+9zb4 c^42ﰌ .1(5Ӫ% u3iDe2j
-T
'@g&eL
C[FFnZhp"ӺuW0\uG3
/fF#	[nFTy![=%,:fT2>/#8%x"0:qԑŝe9
";
aX#/bܯxʜ5˔eY^S,nA;oKv7d$ۡ8'ݳrH4?E+t疶Q-Nhtէl\OOz2j˼ap++ͩT~u5ukFmܲԄ@  nKo?҄_YO$`CH&&c&B kt>qFA$*Y)1!ڀt	H
_e>:A
xL}0
oO`n5)&o+	(|^)aX6b-SG=5)JeKcѯ0qh*Qљ{_H
|d]Ԍ~ PK)    PK    A             @   META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$F2m$1.classUQoVnbi0%ЖBIܴn0Y**L]u&-mbo쁗IdEC$^5CbݹvTX9Ͽ \F15(:T$ޚt6G<h6+%s73wp%c$u Uno.J:2ICWkT阎43$iݗ0	 CӄR
'qJÐa0Liv<nr^N+q嶂\~)Q|ጎ1e}w07<`Hڞ(^bPsVQMQ"<Ñȸn5jBϒ͵ZqĆp@
y&t0ɐ5mٙi:뼥d8wszfdI.Jj(qv2GF)my\	>ewI:^J=;P"G,nr{-=/f{u{|C£Dz(!=SKbyuwQ%1[Zt9d,s)/ŭ\'[@
p*$BC
z1NJHJ7ғa\}%ZH7ƌ0cR:HCjD6ѝ ?À{op2qLe<-9蚟!IGd֞|WE%^T3'QG)3{b!Ƥu*d`⇟&qwUEJ_6=
`	
1e' ,f}5`D.jm"(+	W]6	T^t
0I5Rߥϑ#Sw'10"Ub`rHŧab


{%Nk_C~k5?PKT   a  PK    A             >   META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$F2m.classWS]JbMA628&6bS1 I.YiN6IWv^Σ;#>>C-4=gOHfwy= 7dZvsʙu2zu΁x<g/!H(hیm{^@7&ٰZ(
p
L:-j%F:a:zZ{a.ln:7ul-帎ˮw=
9]ܮ`Gi˨a^(؅{=7Y[Ǭ5Kv-[ʙ}2L3,JTXJMLA;T
0gKWR@/c x@nֶד#CUv;@M`k*t0XrW?TW؟N}*%XQ<"2',bge	w{z\˝fsX19~W=E
c;R9z>e7V1T8)cH0N	4n56s	y\6!L;s2Lw&2=etS8p)/8e$KZ&&Qch+uު(Nsg" ]cmiJUQ.)rCmm)I<æw>"	div`tO^1`N+c0qJ5oh0れy+(i.󩥺U$<¢D&\DGA4nClD:K
uϯ뗌Pˬ2m
c?B>/йy!6HL$̬
e.ŭW__u	xt4g:Ƽ>adg̮]Zo[;X*XPIS$Д-,XumRѩID;mc0-k2\˺iLX껄ً-Mm
w`x͡k)adR$.v{RZjNf!˺+m$V1	%+1ݦWG{)	BJl[סC|W	YJ4u;ѲY}koe^`iVqzM/ iUKFNIdjq>LONmnF%!yZx(K~Y$eeɨ?XeΟ{6nq6xVmXImjs>uW5"ФFh*$UV~UWQ@'=ܧj}yLiom,gCy
{FD*'yҞ'yR'<	@-/oDkXC>PuyK4TGME5=]<|8,-[kr>M&b~!/S٣tXAa/mɆ"&Rk
'd@s`mi$ɦFWtv`Ɏ".ܺ_b{鴌(w8SV UWw+&U<E5 +'&-on䘮ѩAn@L~4clnGW7n*o_?\aGW?9WGw}xGK$xH(ZW$󰢁lDHzd޸+Aq?b9rDE<^}FBCхdH2>B
:>TW|K9R:߹tt
PK%    PK    A             =   META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$Fp.classW_g02$@ÕtrZ¦Dggeݙefw5GZ[Sk9ZlU֣?~3;
,O|y}煗z	eaNvŭ4qSzWZutk?k!P!R[3{
p	Dj#9dzR{_Ӷ17Vc̾[$le	j/l6VEZ˸cu<l̓g]#j4IBlV\M$|&)Lv5mQoj骆0eSzVM	̹m
<>kB;6v3
ܼIƘ""p#,$ԩkSɴ:7'(nD%@g8VF]C'T!Xhkfwm(=yR8kDB$^,VL
b7aLHېnZ:JI5g'it4=ML\V
[SaH[cMfEB;7HMUj*5HQjN1 aPƝK
˸VWt{tgTO֤t-k룪;"myQ>6\W=[e
!U#jN=䉊95z3ԸO=%@qCe;0IÜc c2b¦8&pwxPJACO%R:+Ҳ)JQ1YRjQ|Җ#!CiJx|_WzKAjy|ٛa(U%Ü⮒]Ī	R20LV0jJǲed̀	hI,zq1n	S^df !d'}HkvOw#2>1f6G8>AQ[%:O		j^
OYvvy8?Æ+0q|)~AK~s
/
,=y	DGeړ,)y8O8q9F
W,z%T
jLoK*xH^^̅mgXkfzsu<.=|_>eDsXqd`x@KNDq.ՙ.y,q.{V$'?	?4`
ߢiBF'gjӶeҘ&pd$ٶn-oD?0wGh'jcmQF.5Tƾ^@ ~=cϚYӥ;f8>ڰ+X0j<E-eN6.rG(	O!
$Z<?PC4[6;[ҹe8μ
lFjZoP@V{(nT9Gڷ	[Z5Tj(4+?}Tm~D2<G{OhO;?UWB蹅`?]#QRB,Q2VB0VK|	UyDE@!ZSK*O"OGo/]Ď"n:ʳ.P6/AAjz5+uK}6}2qq!cJtw+7IeqM, (8 KQ:Gi	,`ViX@NfgF$		݅h~	mBzfƷ %Zo,JA:XxIB	2<lWW<'
?O-}1Zƺ\wڏwΕ{Y Zx̧UIQ
zmuɅ|j};Q	sKy4>|[y菝Iv
&^VR5x"~m"\ɫ=Fɾ}_|f?ec	[ՀZu?37p_|S"Zq)E|ӳ/ܾ+yYķ(;xdΕwb,G?z2/sĲIA`~|	xV6^T=2U*0	T~F>lA PK-¶+  {  PK    A             :   META-INF/versions/9/org/bouncycastle/math/ec/ECCurve.classY|SyJJ2 @~'1O-`&k[A\隄4,Kl[!ۚ!ZA$ڬݣۺeug~xw,۲lgswW_ 3n`!p)Og&[ҳx,'>ժ[{f34臘NiDD21=NeH$qCK[ET#Sd,5{DνTBG5*j!t:3. "V:Pxz:JdZV̞"=i$MꉙdBl_OOW@P
DDBKۭ̞{dBW&Ӧtj"1F#,8'DQ!!6[U4a+Im2x\3T*ݘIjZJIdԧ2"UӵCDlP0d$ktyՕmn`FZeTqv7c9%S#2nز`dR%;2_ŵsmH0*aquc7bM~bh3$K{T>5+ 忇߫>tzScZ,*kTTXndt	4}C*G`ۊGzb~#*^ROM:\LP.VDD)ħIK	[˒hJbPq3+==s$6kȬHet^&QzLq+CNJr-6L3*-8!д"L"4ACR (b2TAX
IW,O8D@Q]_	"I
wDEp󈊓H
($T+56ʺi|6"qʝi0N|HEJe~}UpV)>J3x18]f
G$<߉'gsdz8m
KG7&)ߝ'r =*G	S$I)0#*g
JTvc*>iqD!+ڴ"۞ȦSioft MkH~Dŏ@qq?4E5bsyP񜊟OS@*s#9$iDt:O#;YtTG>@I7rƋTgV.#/3NT|Ty3ϫ*D,3l-T\6y[Q/*RݴjSp+BWOa^	+58S#.	ˡ7exڍxY+*U1d)^kɔ6yZ:2Nr
UƵ<%Vj/2~;1=+?G`d$8Ջj:D)RB*~+jOUKb:=I~]oM|S`})vlw&t3MIf.$~W}@mQ͛CfJ6((]Kc|w:vl*ӏQ3bR%ZTS/3WVߟN܎P={OT5H6#i/w*蘙Xdd6fG)WmOfuF?՜M&Ը?TZ|LMv<G\$,dHf?;i#PSo\@CvIhمn_t5
Yʵ
a^&!l+Αƒ%]R!҄
+O":9yUQ+U|Z]m(8B5,LQeEVCX+b*"qn!ȹ3i<OR+=pGood:P, O3aD{zGyCPfnvF:xd[pׁѡNF?tD5aQ[Ik#!cY`fc&6RFVB2r
Bb	Vp%/lցFMue=S[,U[q
a]z.~C(XtFg$ůHX~#A_N
P,tJK
R,UٙtF.5o@Q&`-pQQ'=^;e/G2GMI?fUb=mt	IЪxz+yOPfUd%pk|d_1LԬɬޣYϢ׼;˹XAx"r<ƑYɻ*q3	/>9h]a9"D;SMٴsN2tZLOǳ`Yc>|L8q#8Aexʆ"}R,׬z
SMkHԲM&\`GNh%Ob`A"Q#JƨԦD4#,F˽ʇ]dEvEҪc,n*bbfnzgdPmtʽ0E
!)AIf&J=2>hTh+Ѽh@Ƣ-4@OE-4hDEmP79k^?g5tuXo\b E($E谢D=N<G^0%Tb+F/tr~!q
/wfAD<>EX0fb<b)nPo>{
á%B}0_
>`R"w|#UxQ<o]b
;&ж}gFH
v5[FJ÷QX](#@sgQ}
qw|M2uQ0y&
"49c0#I$yQ⾈[3E:`5tҩ}W{"Wp)va
q'Y0t?Yd_r-w[	XqnC>sjws&_B3o7_G^\hw5"܍QgAIA/yvȰdN4ew²Toϓ;c\c@]NYp,K'k8:,_De9Ɯ4>}S|.dT9hh >HNc816E.⾘QC !D 2FE,vM8z>b>z4]4/X0n`a
"/Z>j)MkBf ,'}dϺE<h|6ū4=2%|sDϕE}.{?6szeѧ17|EN0U|@_`6W+4}bAnZ>K\t
!	Ytˢ
7'5p8nRR kH]0%Wax\gE5Kl**}.} Ov|Dx!oW7ca4 _WYA+.M	Mz<GVFQc=a6+}O8,kb{SץOZf6#69(w.W>KWq:|ؿCrx,^4 Ʃok9>?jaFM-9+Od<VT-y =W+Cd0<'cA=%F
k\7-
2A>ϲ]aB}U8lYJ[b5I^i1ze;OeSŧgT_z^iKx|unkpW|6OFɻE({
blbM"|#9K4bpVgk4pFʌfe<F4ߴcmx5ϡLlEk?xKGLjw6^(/|Z"Z55\ R4E҃EŘU~1!fy߶ZC9a71iM6B@]tڍZ@[b4k7`;{9'M5ƾN#ǁw^
IxP,82KuShsZ<I<.:j%bz=)sV e32|al&x\`{=ԺR#ꢶO(bZKκ&6qĐsT|f\4C$͠'yxҽ\BqS4>BbZPK"DZ  &  PK    A             M   META-INF/versions/9/org/bouncycastle/math/ec/ECFieldElement$AbstractF2m.classOAƟJiE@p+1b&INweu[C8qOpMɓW/:4j0</>|0"PT^U/u1\`S熾lq\y;A˜X/K x	
&ϘeV<f5ʃP]^0o)3̩%Uf,K
,׉`6+2Ϲ3yr^5\-6t2Ir$.EqYCR}UQ,[/9r'v2V++"\MBI5!,AZg>'3+ka@&z?A
Cϗ`DCeB60aL
:<k<N3mm&]}\tMήKM8o<öYkm)iJýE>xȏG/F]:D$"wn/1simv	:>#;ޟynsN⌚=DJMR}ޔz54T{oS-akJ}^{C=P~"IBK1"
MMrD*?-Bqf0Y	F4idv!7TMYQQX,pN!X<.ěBL(>EPKO  |  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/ECFieldElement$AbstractFp.classN
@/5ӼAEEt_׏t
w;X=@tmfy +D!zp|<	Ӧ=ysV"6ǵ0ǘe&YUV\2T|c@XlsmZ!Mv"IS0!)mR	Y_÷;}i5iɀBh5MnPK?      PK    A             E   META-INF/versions/9/org/bouncycastle/math/ec/ECFieldElement$F2m.classWSWmE*ՐZm*T4 bV]5n6Tmþ~~C;SvSn 4̴L6={
 qU!(vlHh/3ugH6\`7,Hӽs\״L)	hP*jj!$īZI+Ym\!t[,Z%ЀF	}
`
)_ܳϞ=`DuAW<3F67$(06IViohu,2</mKQp:M_o!.A8N3#kF[zz)YIVCdrAӹ<orm;:rH;nn	Lf`<'vF+2TC<?		hr8YE.ЁDwJVU%
O	<4J\"ڹ;c	b@3b1/NVN!89}v>SL;nV\a
a4?^L	(6(!*7A?q	۪tGȚ0lė1p18a	aŢnSX-8Cǧϩb+.0)x)#`rʽ>FL66\\	@m:qQB"!qAE~/+:f͍8Hr0vآȳbp;_	zY
xmT/v32/^I6[\vJ[G!=W4tEJ$i}iP̖Hcc) >3T#cXYgzp{yM+Q0J+G˕2=d	+41&.YE͹EIDk)J#;q7e]9P0ڊh}^ev^~ߨxy7=7CiEBqK6غiyjdeu4ch+;=4AVI*ir-sRy|5-3fvʍK|Db>bbG|?"x{"ؐX	C{_4V."]hVZ`oN.=q.TBKP촁
Fgϗ)wzj|
T˔nRZ,hAqB[m=7QZ#Yv-DʅpD?ME"a&0{*3h^ڏډ*Od2Wk:De_*'
6A Fʲ8[mOlU)x=ˀI"Yq>ǡYgەDT<>&SYOetKˋt--lOȺY9T§
.lJM5RUgU338?`S0II=ubeYH|Hn)vU Rw<S;NC!а})SSv{*<
SRFIliZ7XO_`]j2\/S-]Wo"^]*%v̓tgroǷ2ڏVPKҜb`  ]  PK    A             D   META-INF/versions/9/org/bouncycastle/math/ec/ECFieldElement$Fp.classW[wWi$y'f8gF[:TMӸv!Yȓ#GP­@\Hs	F"/} J*9%g%͜os~.N
)U|*y65t&Z>13f^Bhrq&$:VPEa	u2o[b)bVlIfkIY|B`f-X/A3]㹢JY5S]Xf6ݛ5'M80Ez%_~
*4v8:0O:<Q&IN> w.md6]W ;iٖF*>HgשbsPu{.TA*§$l]T'W
A4:KI%_D/8C޻22cL"/gUa4bS(J͑S{x'TcCӓ*b	aA-W1
.8rpV1!2ŔɣGT0g|d*Ƹ~+c'Y3*4d|ΥOP	U]픊4,8{-Lu< #
:3]CE۱&)sʱrv19m_0)8JhxN޲3^VPtFE|L>'F:+1qk~QY3dSfLqZ/iuV?WϚ
U/:Vk(iskh|ξb!+U">LNvq^Tñ*^P`2{#G[xDn
[QF2M2ȝ#
L0~*i&Ɩ;sQ[rLk*.KE?u$xp"YؗKShkRlM:Y|̪a':ݟIR@r͕5REEÄ$*TiU~.sTDk+'\yn%([~ mmfJ	:Q>n_9Un9(dm}d`5Plۓ~tF?;7#7	oR+Kvn\suܯo\;]-MΠn,>jHAtD-:#vLf}ӍУ7U݄7!ެ߆>'aVL7i_$V9N6 vׅ/Q11	6BdEUgOJxxT~]-o`g	(7p QkF<ĂX+/+n8rxZ_:LZa2Q~bT4Y0jMFξBDjUo7՘ ~G"m5m{]P9p	PY̫G*-%Lz1A
{'
.:XTQQqZ{cuֿF!pGshwI4UkJ[89ǩ?L&9reE5IcjNExGPQ#1s:Pg9*D\֣444$jV_y_)	FfIm<^oaTaZp_P.k!.GbPgMka_7:,w]S8Vw'PnXChG66SLx_2/5[eSz-oOC1f!KuEش[K`_I==5*SRL)8v> wBr/1wa
sCFK%2
~Ļ ANE1EYM.c$(2Dr5FK|ZYeAU}	]7#Klo?#}Z`xT֔@L	6(e|b,sqAdP`bAցRojl\FthGqj#*8wsӯ\>HkIٺѪftxPwšuƇ:T;I(^E=iAI-q꼇cM>&4ոmy5,m¯ 1[QEI4[i:^YB	cv#)!X'#_SUI60D7
AvAލ:Av5Ɵw"l&ꚢ{`Pzռ
Y	FQ~7_&V%5SW3ʋkhО!y?y9PK/(1	    PK    A             A   META-INF/versions/9/org/bouncycastle/math/ec/ECFieldElement.classU]SU~N$,Z|
FiK"h4)(&{&ݺxaozQobw=''ff=}>~pn1Mϐz8Y	ٍ^+q; &a1\l*'>q?+ٵ}w5)j!CI;]TȲ0FL,X7C"⾒UF븅	yՠQ00Pkb=3efUQSrE/͸r}eKN2YeWa3G"Qv
ޕ, QTV<*kk[}BV&+Ub-]kX2q
dc;@&CWСD؅eN夂7,)X@]sovw\1)׃H8(cvPMF]sK/^pC衂|]H9P2m	MvʾrvyXx+yA#nCϽwO먾m1Z-|Nw:іBz-âޏS֪chVQӰqM~:3CV}'xdsCί/ըi뽺#QV&fX9>Cl}Da̱9y0hc`E?iɟ@w+ۘW8SW5Ƽ$RsG	a¯` Lm恅&&k:׌+J80LƏ0G0y0bmyHbkxԱ^#C|exM<т^hJySċ6NuNǚv$N,+3?ast.f!'9FhNVuV2)&s&hQ&4%))T鶐-lkΤXĹ&yOjf
y/5N',(|M)=/3]$GWhV?PKi  C	  PK    A             @   META-INF/versions/9/org/bouncycastle/math/ec/ECLookupTable.class}0EOh`hHH4Ѹ?,&i~eܽ˙ι`0wk*uW|V3JWsj!aZM^j	h+IJmfqd[WT~I~V-hFѝ
{F/PKTI      PK    A             ?   META-INF/versions/9/org/bouncycastle/math/ec/ECMultiplier.class;o>Svv&FtҼ⒜TĒd}WgҜ̂"vFĲDļt}F\JF
<FgXM :e{敤Yk @2 PK>F2      PK    A             <   META-INF/versions/9/org/bouncycastle/math/ec/ECPoint$1.classS]OA=.C)PAb*҂
*I	&6vnIxL$}27-QLDdιss|;XG?f]Q5زA(JZN^`;]j{eU GTĔٔW88)ҳB-A\()E[8ZmK-Y<f2

n۪[n:j:1Ѧ
V)eUaIMVx;rUGT%t\U^""NJs\UrO]/IQGFS=:q䕈I
o7BWAXPܣ=ubȜdn$l&mEV[TҲn"<ђ|*pD6ڽZuyc%sc^HuY_MFVv}iTq<֐j۫~>JJZuluO>R#`	-W/	 =h64zvOD&r`\ FwP]:q/@fEF=`/HF-"\H<Dp=iq{."JWB{eɞGGOƖu$<ԒY$$B='2ȷ/?PK>'  w  PK    A             F   META-INF/versions/9/org/bouncycastle/math/ec/ECPoint$AbstractF2m.classWw1B&J-K8&$"P[5~ &!kimD䕣]L+M&@MTiO[~OiOٕǖ)fgΝ;71<ЀMBGX`W<1Z8zEcvع	,85*)Z=.կ,C0ި76iQb6;=F]l弞qS,5J#
k.Y4|@b;̵! ckM;,) v	\KrX=8z6@-ˬvK|{.=ChhCR`o;
IIBcxX4+xݗ+VfѣqR
ikF '1pHIrΚ:310zqHGhsOCGly|\O_jO+r)_aWq#a|D1+hzhԏGXGXǭG	}!gOzA@sq+gwd$,$A\pƩq8A윟ׯ'H<*?Ǩ4)>jxqL%h#>Nek=JYGa:aoZdg8_ض<QQTWLUnm2&1Ι+XT!2PxNg./1KE.k:m>GG<sk+N8GRq>Ye+)9T̔d5lKXvy _xb7?OI|Yl]DwVhVxKIJC~q|A&j@Ze0p0U۬UҥHm'M-"+l_.BoSX|S"9h	.q-10f+9#O2WzքoR~̎ ,~Fe#J9WpR挬JZFR<S5ϽgMF;_pm<2RgU-)LuXf.w-׵)f)qh/~Nm4Ҩ$SkJ5FX`tE&_LVM-}Ul}%|䃡⡃FI/1#Utf%KlX5cU<>kbnGXgV2Ҕ51#iSf5LTKy_܊xE>L?M>jZ,9EKxF(RlUO{x͢o}z}J1O'>>b/ z#Kh"h;G7\>>4oB0蝨tuO_NGPPVqF]ǄtrI
d7UQhԮB͑N%Sg^M.9<
1@Џ )һ6;M>SE%OS4Mhvvnj4zR 3ת, yXEf0ue1̰ih@pȌ*3xc~=r_):-2Ju8Iƾ;U̗dh]06_z@%3ķ FRh]{WV޾_;KC\~`5r#}}9X/\w62u۩dd*tPLQ?/\_DdGRB/BL_	N&Nk-[+s4aYwOR{*՚)z⧦Z^{,}$*!uɼE+E@PK!s    PK    A             E   META-INF/versions/9/org/bouncycastle/math/ec/ECPoint$AbstractFp.classT]sD=KlhJ64c(P|$i
(""KF.5
^xCaw~?+;	5Ox,]9WwϽw_\'6&`pH2,QPApEOQo^7So2|.w4
	YE[j|`|/9ON[x
gV$z]mÙP뇇^ a55?61ciY1,cTB
O(dHdis0'Ag9=Z=ϱEAaڸ8^ Guiy 制̑!96H
9	OEkL̏WTP_渊W&|5*@u(2]_yPnn0,s
Z)ʃ(/RC}nFJ4'2,X%M0:
"/h>2;lM8x)e~O4<|,m){@ӾűMٞtȽqތE_=|{aas!uwæN`(lw"!Vt䞗'd]aaJWٶ۩u_S[W@DeߕRhqcw00Çz5WjC1MmmB8c̝DуGCGv	G'o3v;{h-:1[`+_&ZL:>^lh9IcrL|q'Ek!n>];ZdR5@%fzȜ7o+cC5:\
c}_n!ia?D:Pe]"*Ҍ0sriL*-UPK7    PK    A             >   META-INF/versions/9/org/bouncycastle/math/ec/ECPoint$F2m.classW[S[:e$$JƎs8ZN8`B6nܤMn61$Ci@:<Lәto}n;Z{	d*йn[g zuY0HKӽŹBv>)yw&uǋ7QvK;{@@s9d\邳#;3N%v?Ⱦ\Cxk!bcS	0
ԣ@ôMM
Ωb4i UUh\i\i5_h1J
(+d\gt:j_gPX#bdv/XMQ%9&v\y0i4;-x%c|)YK)җ$NncvGl&83wsyOh,_S.
tמDlv?W>Vp͎&sr{@Y\<U
s,T2Ymuᜫ@wҖuY` <t8WuYыa&+BK[yQFi\vs;e+/`LTw~J`!	eJ,U&\2ly73"udJKɹ,%kϳϡ>TGr`'J
ՄpgPXs693D`Vq 3
8_0c^p|p-\{iPv3w老W32pnz:NI%kWMSꚁ=\xC[ίuIssHڽtP>Lg.3抅 gmP-\g=[*0x@L)uK´UQ[:OMa0xLL2Eޥ}C_tC:n&{@=7=BBْS.ӞOR=#F%*R>S.;D;JO&	їV0=%`N{nCt34o<&ai#O7!%jp]y#q`Go2
Ptl=JN/c5{z詓iی|oeY&?Mi.%]%nF7nn"&~힓>y28
n^U\黑}DQu]']B}O<KljT%|iLp'8jEo\~1
vٖFʀ!$jIR 9DvN.I2F4FdE¡2t@)8	u/J"Hׯ[mMۑdEɽaQb3^3djY/)&cflV츌CnZ,bi-M2kvB&1yF6y!)c2ɬZ:q-B"&X4U6*y[jLegt%i*?ykr5E^g7Ҹ)A[$S	D)[v
(skw	
v
-q#= j7"A[Q-o7#-NӦUrڴzj42_CH2J+0lﲙ%$}mBS[7"Vw$˦7ci
##(h^ ID:F`EV&/	Oxwo|]m
AB^C7 `Z
MHPlt*oc~1oCW[7&Y}NWЇh
F;=.o*}
$o+xׄ-4+tv!?Y#y?t)NTƲc%~yDOa5Y4
Tᑢcd#~Րh>z䎩yj;!U.K$UTi7\^D(ńjsW$c<*adQ0MG8C-jqc85Lv\{ c^U>yN0&3Zߘ"j|j+(%#5HI+Ve&m-zyCF h0鵞	cz~	{
QUElUc	='B[;j1λ|])-
a}@ЫFj2)RP`gV{ģ`._n!VU4sTmnTI>uZ$tHI'o3g:	i\G{4fHʗO	}VN@w, g>1TayTGPS;fkQ骢trUA5xI1sJ{Hz/kr ~zz[uC+,p1֐֚5P&خI&M*ՃzP6GZ'$wT5MrG_'{]MQ<Zk.h}_㠎$鬴W52=ՎF`ٞdt
2J7L$ԏ:&PK
o	    PK    A             =   META-INF/versions/9/org/bouncycastle/math/ec/ECPoint$Fp.classYs[]JWlYr|cNÑdR
pPcc	8Pl8
d
--}$@	i(PPR`δ~n0M'vsowG2>2фfR䆱B%?~l<S*
2
}
|yR/Oio5ZdaoxݼDMCnt{X þ@HWDʄnyټ@oP u_S;N\u%Xt:hML9V*44w`Nq;3^f;
Yw~ٵC 	Jw\],\li #񘨰Z2nqlg$R|#qWu@ACת(4Ǎ62mvAfs+op<$n[MlblӰniʘ݋š~~܊^w^X`t-|]"tjewSCvpKV2EiaKUrTrXICri˻oVӗ-KF쵰i.),<SݑWJ
xz ~\yU01q\r0s8!On9vek.#,Cn܊OfB9M,+9KAJK7@Ausrd&7R&eSl!VTTXv'U6GSy@#b6?)aG _@u9YxYgfoXxEJA$XY3ra{vr _v'"5q,=l,|?p&WqwRw/%4κׂc򐛟,`+~bE1N8ݽ,LRL;{-.XxUE95ɓ2EKk_iXuIl+NV8

u]|PsĉY.P
M[;TK+$|ɗ)wѾ%Y=5D򋖞.		-ghS?#3;3s
fܠxWR1;gWF
kP
h?1"TO㋤ρ~(y؛˔Jln7Oa%1zQ
(Twؓh1g~R
,Q-9^-g6-wmhtt'b\I:}˧gbZ4-FC;wtS3XCt2uZ6鞦t{}~KfXg'۾^ҩU5Um`
ǃHATG)}Ӷ<1msmں6ÓCАf4ot})d{6&cU=vD|<ca'l[vw(q??+yJW-vnaVճ'2QZ>6N-<}[vb|Rj2;-v̃N`Yfwahmᣱ'R*sϑyx`1x@vz\([JKZE~5hcvSxlYrfL\)抉eG	;\\~pZXOi&*Թ1Vu4w1^$=t:$xq^C[n+5v\m2X,_v[ݡa ΃,:h3L=e;|mwU9S߼PaNdq]I8W#2D)'Z	;^?hlԈ@{,z0`Xk Z$p,ӈBΣG
,g0h]XATv+S\k>g,A[_:]DXYDFՄ[M:)<|Lq53sy(moz3a%9+r%nrgI86ʅ(Fo)~{6I䷟ @TAqz ;ӗ
	q*i0AiLrxRCViN$F5()8(B\ޒ>ǒ*qtX8-02bxkԚ2w	A>IU̾w>3x86R{&$I*N(IxqǪFay۰]A/TEتvH!'qbU&21'Չ*aky@#O?j)BU΋*Ȉ<Ȣ
22˱y$aHs.;/K>0	w{ˮ3Rw]ɦYjBaoRO>X+*\Y$.Q?Z4NI_Lkּ.m	'p&=-ӿ&{d_!Z9nרXCFL2lJ(s$Z#JďĤHGQzHEuZ;Bu'ZURڣQ3!K54!Iv᭗!pZ{76xy&iOZ{<a=G䣡Q^¿.z-w˧R_9s<Ho@nQCגH/˪yՄ=(S^qD`S+#M~~"ְ_r{BQXºonhgpN*uzpagpp
0iI!grX?p=Tg[A{NPBPC]E5﫢e(NA*yv <G͛@)Ѩ	J}PA8	١qfγȥJ=H۸LtC)mH3I*,WZZJ
LHe<Ъ(ym0zϳHP](&Uz8*(Oǫ-ƈu&k\5舘\^@õP"Ik%*i.pjz
i.YE^	}]cޟ4 =R=7$ehidDj2/.,xMɓ$X*-d07Ox~ڑj*7[y
pq&RĩUsWrؤYӎf~8Q2̔Dg:tǃ;E{)B}G
'l]rHC;{,PI5zj8RR.0|th$5g 9\˾wXv$Z_EU^%3K*)D`2utDA6wQ)ۖj*bVozPg^{?a%Ũ	DkS^KsrCB֐wHEuy>gZ'ş?PKR|v
  G  PK    A             :   META-INF/versions/9/org/bouncycastle/math/ec/ECPoint.classY	|y?Id]!C"IVj"	Fծ٘$m$4	i$25b mH&}9JGJ418f%W4]_xSg=jrB6u2eN3.+5߿?n K8c9\~*5kXsZc0 BSͥ@``xt<yĘ@쮡uL[5ge @D#v'}.k;fֱIC#1cX^VpD36Oss9ڛ:*W,WHDNG_mە3;5X3f/?y'&^NdRmՑЊ;S7M;4{Pǜ|:;q8D[QFx̄B	Y~$
`?dqG ]5V/+Wbh(=VQs][:\/ Vnn~ܜXdsN:ui:<n7	R'mz$zW@'P=x-''q~!UaL99-Kxm4coE<3c_<rwD
C)+p1qu4igv84i+oeSBIgN
y]x =w#N#H
`vO%fE L~:G2%f嘩YH17fԱ")$9ɊGD8F!c`N"k\A37OrIlS\ch
"J2m3@>rEl̡XU̎YliKg\MSö0F!.Ld!%~CYMk7	$;O ?.uTn[I5(L.v;%~?)uT伓W͘?NYLv&v̢`afrt2ۊh0Ar^wI4Mi2*`xct=[
^>ܹÍp
J#ٟ/{g%~
)Jk+yW+V~Y6ռ)gm{bV%G$~~7\&>*l%<Q..񱊉b8%q_k?SJXa	+c2K<')3a
䟾DǄ%Tk	ţy+EBp.dޜO.g׆4,i*$aV9yWOe)v=nIof2fz-VΚA3qŋܳ+zg?QUA_, G]~ߣ2"W, #ŅUxUR
ğȯJuC_&#;=<`#K.Mirz
TfsSJ C5A+r!j,3j{	WKll[Y;Z5;M$0eP5Ih-Se)!~ "H6~?b/٤9eۦ$9x%öi(o3,O"*Γ E!([m)3˱4BB2眠#~)fN!ՊWBJQ']4GZ 
I2ev%qA|~K6/d\iO-[q%e҄VGW<"OnG<FB⣑.&zmm2	G6ˈ1D8t'G3]k:h$	0I 2NzβGs'٣ׯ]]&ɝټeF+HR`o*}C٬ϘmنZ\v'&5DzoVj}=Cqy~dуuzn+TWQ\V"Fo:_UK7pp=@}N!?HUר}X-È<Fc0VbÑ7#, s
=}\i$؊{IhW ᱕gКlziM`8+v]Z
HSa	S+cDg):J0?x
+pe1kcU%Vqssba}F]BK`5HؓS@o\O?v/>Fpx];URDBo:nS.-Md>6`0Q[WboEǬV\kglu\*F$z"Lq76{$Iϔ'KfRNTJysq:4]~n["Кg!#GWJ
iGyoMCMmY`ĆyHKhpOLvqi*qi6q)w&ꞁlZ8ϝ.	E+J]i}{#Df^Yw?t1 J0轋X'L}&#GhVZA)<6ޓ(FG'*FOdOiC%W\4'~i~>0<W|-o$tx=$hBXGJǱ(Elc bc<>qymW!ma42S֢uZyJ;ծt<E3}#d,]$U-9l7DV:D%lĖqŅVVt
6H$!,QգLBJ|qMbIX[Ub1!%ź*\q.M/1.1%t7DQ4uôx3
,
8%Ej/b%44Pˀb=xOY_Dmoer.\Fׅ
,[m_b(Z/P"*!'=A8S"Z?տ?]h4^A!}-t0\;wXt;#b[8NA7JXy߿(2_-ez۝],5s#dbdkk
F!WP -YPy ^'L+Sy)y7o;.lxC(}[Up")oɇj:xZY+06HvOKClpBgz2{xγJB=4U[|af2_q29Z]_YמnAtTb8!:wĮ#((0KBR*Ŕ4R`{U=FcX Ѫf%iGLxlKr6a_U?ZӉV%c<Y<]0z&%1ڡoqWs/sQGvŃPυFcT3&
fxNچs왁zQTԹNWbrw	âXXGH(& jc
HMiT=Ǌ11^v]#7PKm$  `   PK    A             =   META-INF/versions/9/org/bouncycastle/math/ec/ECPointMap.class;o>Svv&FtҼ⒜TĒd}W̼vFĲDļt}FF7
BfXkV 4ֱ2 PKl      PK    A             K   META-INF/versions/9/org/bouncycastle/math/ec/FixedPointCombMultiplier.classToTn:ck뚴M6fX2[ւ!:@<Nbږs_&^Hܛ kZ%kss?>0#iJwpػ[ݶx[>-6>"sc^	T(4icZmB/jA%X*7'$Qu±	kގ@>O@v{R`͗N*f(^$z`n{]3nW2j{]`RD07[5}Z&c@w:J$,ڢ`(
cm˷~QU=+-ڲBA
8/7GJCM{A.U-]
`DF'V
n#3脢CD2K'ȊF5 g}Qd]a/XݒsxO
鸌+EVD1Rػ'rLq$8zXݰ쳝8>*%,y[f5)nx]:jTy#xG-=m>ScU %].AMXC>ShFsHi8s~{m=n~vDuk:E`jbg
DVa?' ?4>Mf!oKCЍ>2<sLy(|zuiZbmZE2QP+CTj)234-j-41a~e:8FŕBԽ}gY啽ELVّ"T4S
Bn7XC}/NB!u$<
9*R1R/5"*޻DyB?p?PK Bo    PK    A             H   META-INF/versions/9/org/bouncycastle/math/ec/FixedPointPreCompInfo.classN@)bĮ\iMດ!Ʌ&>e<-JbN:|̼= EiDI&NKSwMW0	Z 1Y;³n,\[?7n[sm7kZ.8V˷IX=,G^蕗1	El62
|VF20͐rAfJJ|kX,&9vPڂmhuW㹕F'Gl4MlN36hCc)a	7$E2Eh֞4)\r=aqubXӋXӓ$&PLiۤ1.
UK|N5ntCGxPK٦  I  PK    A             C   META-INF/versions/9/org/bouncycastle/math/ec/FixedPointUtil$1.classV]SU~Na?rեDiK|@cc*PPPj[a]Bʲ$D'8M/
Vǎz?;{ǝ9gOΞx=o~9+DE AG	ZN[d|NR.'+5U\_q/1Lgpfꅠ\^]GCv [=T4SFG7"暙vL)>K>CՊ[ļ`j缕ռi.$KxB3˶OB6ù$$q
%<^p#-'xa850qgTbfO3| 0qZWMdKmI#!#ɑPk_,2p׫~ݡ8oÐyE"hZ(:WڦoLK\<o:g9ӎ|k6	ڳoMCY%U
-	Y\|(8a\T,Ah~;db_&& &9n]2v=)iܢd
"/c!BAqL)emTu;<9"#B~JkmjH]ݧZh:\-h?|O.LDl9=FwҴ/y3r?bλ]9ff0@A@$"@oԫ$N|HSmd)Xr)_C<DHnL fNzR?!-#to3b+(UKPrHm@hIL$Kl.I? 6"rrA*KgȺ"de^-<T%!KVCnC	leU]fF4IW׳a=:CpPt.2pA,sSBG^Q
u/h(CF5o.5>!]2;襙0KFjW4c`p޶8)@"D'S'jz&6 Kp_KO@\At{	M=Cˣ'=|L+
b	PK    PK    A             A   META-INF/versions/9/org/bouncycastle/math/ec/FixedPointUtil.classT]OP~JAȇ7Y7͌Qa8$z5P]3 /M^m,󞞾~ǯO_ 	IH*ԎghZ`x0S7ebL`
Cl;2ڮ!5ni%]{a4y0S+б˞6!뤂SbPHnѲNKQp&Ԙ0f:=[lKcXkk+ެ'jVe,଄s
B|`X/vR&.1,SḣXd4Vxh.3dVe,!
ãiDns
TV-^GP+GU1&{
5
e1&ǊX=)ZCo﵅MIo2LduA
t	7ocxCy<`2SH?h@wv4- Fo$Wi$L&H?}@ƠzM4sCHw(tH؇T8*4~"%!
v	TfA>RBbYՃekdnRȧҟ@NfLbhoPKO#c  -  PK    A             @   META-INF/versions/9/org/bouncycastle/math/ec/GLVMultiplier.classUmSW~naY
jPc_0-McT4 HG/es˾_SL3ڳFH:ܽ><9' 8bs$LahiG]EiZ:VڎVMGɀVyJcgs0LdtUTdHR_ꡥ\W):.({ҖAh]wig.ۮtwK6$Fgzҍ̆2vෛn20F7vu<[(s1qi]ݸ\[};}Vǩ^+>5>gͪW]?h6Te(v7 icxƐ71+OwC$}O!'L)\NDv9w[B"n`
M%Cj75\p:Xhh3$w/QT6\#E?wQ"U]_W"F,fA
s&~yp9]b"ܦ
Z+6~Z (rZz,\7*4g*MTqWuRsS+排Gq_gq%hᏞY3lxn VYfr_1DkmlWĚCS.-UXW~?%#]r
T]c{!pRPUjhqz6X9=Э8,_xT~!EjBß(GSbc 	,`q=%b1[?EZ=65c|C)NgJ}Db=ƷlB/J<!viG8zCPK.`*B    PK    A             <   META-INF/versions/9/org/bouncycastle/math/ec/LongArray.class{]?kgL'3dr&DABd"0B%2#B.$QTսN
UUԽUUEEUa~YgM"}}^_gsNWwB}Q*rBE(")#f3aszD.)qU`%"%9Qe"/m8t҅s͙k~gÂ]7tig¹M^F2oa)II^Q5wӖ-\ El5gQtf}6g05qRaEy1@"y܉:v.P̛p9]k;{~Kt.j9nNQ]-E-<fyu{ZPwؼuzig@Rd;kswq
΋-ĖRu-j^Y$F::/JavvM_ٱO¹]x,8tb*sbX^#dDJkcѐۉCu9c04iDܿyQҾ7p$cb'WHJXKNˋax[v}%]v["E>t/v-Deę`*cje${Ş`bb^L{;;c";kW`vG]$ٙHMt~byzs~&ebh::.y.3,5_Or:;jqg9u.RgN]`hV^F%rQ+#h7\ay1貚uyp.l~^,*;ggkGтR1o	eKhQ3KҜ8&/IQoWkܘ9-=yqXNHu9{,qT8.jȆ=9/Nhp /Z%*Լ.sKqog<˙ [~^%~@tu.E}wɋsafϋ8;8üHoć;%yqnNtKܝ޿"/;ucX<!',:v!޺&/IQ^:dE;moOzSbKg/p3ݐ7BTelMyf1K^ܺߖ*7]wmjRRyo/^mr1=]hi/ŃNܷe}Zf>ylmCuFw葼xߌn?͋713%މuO3apaMbR80b^پw6_ɋo{g!/^ڻ6\[e5EHބߢ9dV,Άw=>!隗Q/60JC.%A^|WZTX]
]NǦ%yauRS|ʋ_@Ti-x;	y/ϥc1T|)ʉ^MW5`,!wRe(*Y%}Ne%}QigMƿM9B>/e?Rk.\)0H1M0S;NS;Ns;s;<;ú<;ΣuCCC0`:u
)SXNa]u	%X`]u	%X`]U`]U`]U`]U`O?
4O?
4O?
4O?
4O?
4O?
4O?
4O?
$2AbNbNbNbH"%33334^{	%^{	%^{	%^{	%g`={3g`={3dO 1$0'1'1'1'1`.\ssss$O?	$O?	$O?	$O?	$O?	$O?	$O?	$O?	$O?	$O?	$O?	$O%/	K_𗀿%/	K_𗀿%/	K_𗀿%/	K_𗀿%/	K_𗀿%/	K_𗀿%/	K_𗀿%/	K_?3π?3π?3π?3π?3π?3π?3π?3π?3π?3π?3π?3π?3π?3π?3π?3π?*6uЍ
э
эn0Hc/K44'؋XI`%VXIȊ=RG4aƜƜƜJ̭J̭\71׍9
*ħB|
)ħB|
)ħB|
)ħ_________________3kF|͈5#f׌_3kF|͈5#f׌_3kF|͈5#f׌_3kF|͈5#f׌h%V?k
5uBV۩v꼝@)5x;>ǓxOI|<')b<8`?k
~M)5NSy;uNSy;>O=?'Ğ{~bO=?'ĞѢH5o۩v꼝:o۩vOI|<'$>ǓxOI|<'$>Ǔx<?>G>G>G>G>G>G>G>GGbV_y;uNSy;uNI|<'$>ǓxOI|<'$>Ǔx'Ğ{~bO=?'Ğ{~bO=?'Ğ{~bO=?'Ğ{~bO=?>x J_Sk:o۩v꼝:o۩v|<'$>ǓxOI|<'$>ǓxOĞ{~bO=?'Ğ{~bO=?'Ğ{~bO=?'Ğ{~bO=?}h?}h?}h?}h?}h?}h?}h?}h?}h?}h?}h?}h?}h?}h?}h?}h?~O\/vf:S?Hi&Eſ%EuO=ɳj?i:#DR"CgH[2=-9s1w~4!]|~A"Y`Cdngʊ?pA/X1}&H1?};ﲍ\HoWM1M	MǿWֲ>?ƿx_[n/ąt.^ҙ)3N20&%+~p9y$՘e$fe q3 E|ψ<0z:zyÏp_NZ;z5QPwY_}Om"w+jBqUeqU)5'LcCajJײa5v(	=GcPCD7q&%^phrZ6L(vH/w;D}D%&_kШ/%AnԵInVo볐#B&Q՘+g4Yn1+lQ'1t'6UY٩'KeO﫸,z+,T4,+Kb
'jw~et|:L޿W
+DIW2(e!J44uzQ*?C	\75to<'1+z%}qBʡXϰEܠ[ZjJL7^^Hsr)WZ49{s"R~Q:JNGV7qmqͬf,\=.wȸj5-{~Rgg.9`CHy)+}Fސp@/:~uWVbN"O>Lc!ɮh
ToMC`6WC̕gEsW9yX٠(۵&I7L_"Ia-bTOb:Ya&XeI-I`@GXUų׋
6V%b 셾5wIw.حImUMl0t(c)׊).A}T;xà1Jr,wVYj,X$1Y,nΑObq8]#;$뒬$)u⬄n.}:{,璆1./մf+Kmnۺd[v]!v[8AJ.'jr!֋*w$H%f?녖_
gb)/D=cBmG.CDT_f5+eɭ5c]+}!	uIn=OPY&HJMmv	(^KXY*s4V1s/U6qRN6'F#g%nv_zh^q׊qT<<8tU+
}!Pƽ'/Kg$Am(4n'\|CaL,Z+Z*s6*-ʢY5TVnat׋ۯPcfU_@pzJ]	%!voӲ17vS7M=M)zd_J?l^6Z{7¶7Q^_iETz1S3쳁RlcD@j](",=)XP=NêVYO7ozlo6,,Z-A'	2cs`n0gn(asC
f;
m7*Z7X܊,--Nņ+ݖaLT_+ZZ_w7s_/#j&bP+v겜>順Z{(>X:)X5`t6B=b[7QTJ5rS'q=BoTy@Vg%VtWSS۶lLX_];2FC-YbkuCpXFkqI#{ǔA.rTLQŷ*?&kEwDэo@fmWE$hks%;_3/(]Ű5cacy'FdFxA.1ݎfG%mX_%")c*J&Ud-,q*֊iJkF3א=객ɲ$tl>+~Uy'UYz?bhgilV{c)Y}%b 弸C27`8?wWU:՟"Op_؄c7IƊd4K/FٌUIftSqbce`@ɬ&G]ȪFegU=2tIV~@wc?U^!m:p|ʵ-z$7~6{"Wc{EH},>Lzl˕?צh)|.lCծŇw&*< Րb3)҆16K++Z6b-HVɉ6%@h~{YeV:"ʬcŢde=|1%')
bK''~>SutYL%&o)ۘO
I/+O
)'C4N$wx :+;rVAfffᅦ!6|)ӌҝ*u[Y1sWeA#َ$EdhPn
T	l { #¢+r
lS4V͚ʪӳkڋE%ޥjG΢,z]-UpY8'+#=u,I9_-g8cr:h-tG8LrOq`lF4gOEѿ:Kb斏t#,4\q ZnW%16l'I(Ď,_R_tDT٫#FTW쫆"âbɾ#몇5FxX?xZ,(/kroID˺DJ
gE3bGo-SQ21`-$WVi-)dT?[H-hb5+:jڈ׊!^zQUowޏƘlbH?1x6Îxk,J¬O̔t(;#j|Gc9s+ѿ*i*[tPkDnjB̝G]RRJY[8Fs{-|.?Qt^7jbDԬg^wO=om5Z(QC0 y^MmGcEEH뫉h$=vOﻸ]tɃu" ]hwY~XˢkPr3?u"\bUXE/g2q\c}-Cj詟9!U|=LmO\$~QN)gHRQntǽY|)=Wg4#g
^+.+&pUI9w3hE+p]c;׋x7s;q|I^獦ibD>>?&څ!PNtpx-r,֊Ds%@܇}UX/sQ"mAjJkP~kŏ[^}L>ɛfn_M|BLME/Ft)|F5jxTEn7J!Z=op<ц0%GalN񲼘/3wxY_Q?6cT5ܻ+R_0&ֽ
	02/?<0wdZ-GqϴPY(G{#kp46_l@UYYYBܸGgSƵŝEC;1ȊNjtz='<(V2zU_NXqʹP40-͒N9rq<-kVꤤ~Y;Ȗ\G}&|K}k.qtټ.7/n!^n2^6\}Pk[cõ_-mr~|⿾[reto-)^{b8LJVWt:,.*_(h'	d|Qy[}3hV0Qy}X7\X-zhj~5SV_Q>O7AIx7ο{EF5W;T<۠
߇xK_껱oV7/olݦwھ[gOEg:丕x"Ý`]F𛬼N	6ٲw7qix?vP4oO5s٥uTSNiT"-	亮*=]WEƖۚ-+ÛyX^UG2 =T謼cd>LgIWc5xp5Y)xJQUxkTB!Y;Mf<њ5UeiL7UIYYEcQWW<t̢PMcީ}ȡz0yg0]:lN%NibV@D?Fm24^ ճv5*dp^hB%_!}nYHm]v^-
ctMk*駌)rBG]e	]/ו=T_f@噟Sܧ q\Ņ'/U|nq{߯/֊O_Lv՛{wb=XGcTL.en#0R0vYUD{	K]_ІFx#g=fk==h$'fF{%\'K&K	4%-4V˓4KhLp HrFHA9'H`$4͌j#H85	w	uF`z%-mm!FPhf4
7F
#o;&Q&&L;McL;v6!5!bBgBoBՄ	`k2	5v7	M0gIỶ۶7dmcM6|5|Tӌ6co17;k74f11fC9_i,f,57GG󍅿Bcowhb_o)mǘ5g2[f2;dwooDI&#F4<$SUM!j
]SL!n
)L i
-B+,S
)6ib&ib&ib&C/2MG_l%_je_n_iUfL`c3_c&k{3_o&	gfL`7	fL`kLٴ[Lմ_iaiakMӴL۴{L״ugZ?`Z/M+д_Vie6acZ#?jZcִM+´'M+LeO3?kߙ93?oT_2Sf*Le7Sf*_3SMݴ?6ic6mM2mmb;մwMϴMic6?2taOtO3j33n/tLg_+3gJh$j$xJ{Lz[Bi
^SPo'%JF(:#E$F~FF<0SPwWa.<Q݅/Ұ
48TLΫ68TZS
yuO08	4[`T[lʌ`TVI HP*a܌:j!JjΓT".l:QL0:[-	vLVܚ`L*!)!cS9`TK0Nk*GʑT64r;TnO{*GLHhT@G*w$3{rTD0);ʱrɩGo*LI܍`j*A~RLЖ	rT=H9093S9TMpp*!N*'}	fr
TʩsRAG*tTN'ry<T	r&TD0,JwJ!GrT&XC	R9`i*;Ie'<T%X	O<RyTI"	NLRpʭR莒4Go?/^ⴗ8"3g֞{I*A{<
K^*C{\KRh/@{<Kq^*A{<K	^*C{\DV:w*nSwN{g8}iL;q;i<.pڻiN{9ibK.uڻir+tڻijN{?vڻiZz~wO~wލN{?wڻioN{8ۜnwڻioޝN{w9w޽N{sڻi_:=+~oq{i1:=ޓN{O9=޳N{s{iy^t{ieW~P[׀'SR:pU*NSSgwS&T<=oH_K;3SWS.TA*ʿIsS!T~<?^ʏE'Gxq*$/MRT^/W+U^SϛSϛ*&UTiu
=?IUx}O=oO=oJ7xcxSפ?T%[ReTRe*ޑJT
 ޙRU;UIU5T ץx_ORUeL_jKC
Tm
|8U mjT
>zoS5xH	|*U
STm|6UKhs|vF|)U;_NWR5T|5UHxkT|=EF=ozT5݁ojT NjO;)Z<ySxjT
|?U R/TM~VS5q#UӀ
TM~jg: yځ_@T~_``oCM{:kvWqhbO~4URn!*tB/Uޓ\]ɵWurUqUsùy\{\{Ց\{|j^kZĵWŵW͵W-ګpU]\{RX8j^u<^u^kZWȵWĵWګNګNګVqU\{թ\{wӸӹ3qUgrUګګ~W͵WõW˵WǵWϵW]W]ȵWkk^u1^u	^u)^u^u9^u^u%^u^u5^k1^u
^u-^u^õWkk)^3F\{M\{fV\{m\{\{\{ZN.n^j^u^u?^ ^KAW\{C\{կpUpUrUqUګګګګګګ!=FϏOЪg[#kmYBk{lK>^!W	h5^'(
2$[6AU]VOX#
>&HZ)AfgV}A0/	ZKPeI
j56Z\C2e۠	la`Kd[` 6"ڠ`
6'j6ؒ`
&nm	F`(H#hl@
'em#6C
v&h.cl0`'F
`w]lB0{D]m7n6LP&L%h4m0`
'hA;6I
&LlI6C
:	\6G
$b6XD0Gg%lL268` 8'dm`
N%8l3c3	Ylp6lKp
'c	:lpA
.&8̵Jy6H\K0=lp=B`
n$87m	V%6w,ncmp/q6`
 8`a6xD<Fp
o
OOSl,p
v6x	]<Ok3l:{6xx
~oϲ;]6xx
> kc6x
>^hπ?l%G6^l^bu x9V xj\mu
 
xk?zsV-?zk
Vo[=x#kn l[
z6wn.;\kn;nenc{\g)
ӀZ=+>du;V>lX}gz1;z.qHV/ >e"V
|%g^
zyO `
V|꓁/[
էoiW>fY?Z}6uoX}!V_|ꋁoY})m/+X}5V߳fπX}#Co~d[}+co;X}'V
{>gV? _XpWV?j_Je`5/пed5/sVC2%VCj_Y
˼п,eX
Kc5/+ej5/п̬eп`5/Z
*Br3Bچп!/kmA66e
9؆пп҆пʆпچпƆпֆпbC_!/ma6pBr
9҆пl!/!/!/GmlmFBr


9ֆпņпgC_!/w!/w!/6e
lC_nC_N!/[l=l=m˽lˉ6$BroBrBr

9ņпl!/l6Br
9Æп߆п<пl!/!/g߱!/!/gmCm96e
iC_fC_ε!/!/GGm6BBr
y
y
؆п\bC_vKmclcmle66	6rBr
y
y
Y+m?نSl_eC
Yڐ]O!tϰ!{6diCm?ˆؐ
Yؐ
Yِ
Yؐ
Y?!"dC6b_b#6b_f#6b_a#6b_e#6b6b_c#6b_g#X?zj#lFmX7وFmF[mXوXw؈F;mFmF{m_g#}6bo#6bFmXوk76b?b#6b?f#omF'lFlFglFوXۈX/ڈX/ۈXU`#k6bFmXo؈gߴ-߶/6bc#_mFlFوXڈXca#'6bFOmXوX_؈F/mF^=zx
:A֮u[{G.jk$WIC)2ya!i0*0,C%b°j5j1°9[[
8ǡ<8<q$
<n<q4;#<q'wq,8<n<c38qOq"xܛ}x<N᱕ǩ<4x y<Ǚ<<~Cxlq<vxsy<y<<qy\Q<bRXqxy\<pt;8wtg83|Y~l88ywpE~b8e.wp+\j5up?qp:nrnqp_8prp{`t_9x<7qp𤃧<:</:x^q{:
v𦃷/qW:x:|>qO:||+QzPK@Ph;  Oy  PK    A             B   META-INF/versions/9/org/bouncycastle/math/ec/PreCompCallback.class;o>Svv&FtҼ⒜TĒdTĜlvFĲDļt}FdҒTF?
By[k2 PK|      PK    A             >   META-INF/versions/9/org/bouncycastle/math/ec/PreCompInfo.class;o>SVv&FtҼ⒜TĒdTϼ|vFĲDļt}6FFf(  PKkU   X   PK    A             A   META-INF/versions/9/org/bouncycastle/math/ec/ScaleXPointMap.classQOO0}Q7MA&=yx!phbBH$|+Mx&m^>? APJ$~5PQh\e|'>JpVBrP(9NDe寒nI5*D=lbc;]ncCBKa6Cp-?R'?L+DY!-LEfVLvP3kݠٽ
^
ڒ㶂gWl<|PK1  :  PK    A             C   META-INF/versions/9/org/bouncycastle/math/ec/SimpleBigDecimal.classWSg}$a\(R
	-h -(Y&&km[h)^^?}wl9als~7Ͽ8o$TtTT%gZWJ]52vLOhR*xP)C_~ZU0ab%@ ԧ!mچVVAJtShl]kB
6JeM6PD䴦R,Ok۸;l1їMSi
^RM?\NU-Rf
Oja>U[9R@mP2LOڙ
lY={>&c>;C``4:SᜒNa/jnn%StF*\K)c IդΌ9A:[yo{Yb/Ze!Bb*MjEk2:IZR
=+AGO=qάu[AVßOZYExi=b*oXzƘC2be\/q}tt*di>kc~|4'V 9	ˈq\3~jK1ȉACؠħ9="EUߔNg9Qc8I*5y>v2NnĒ88J;gHA0ƾ*5Qf>R(2&Yeh"v!ꌆ޶MrhUarr 043a%q4*դ%~X<5$T~GSF\#gՏit7eTd43·bɳbee
d\w&8_Ӳbk
Sy\2&	ꗄflJkNutiR=f)̰9Lr79cCQ
DS@Ź~kH>ЯW>K=}YN>&'g"D O7MsqGCϖC"&HB;hv>k!SD!+ThԻdQ[".v[b@+Mq >۱|vW˪qhn͑/SNv325ͣP
҉n
ib%6

?GDt8PSpRS]K^2Reb0;{W?,X9Z*
47r(>w-J9<3_fSkԷE6wW^*X1%T8[RC8ms'^tS^dnTNV	QqGecXEAU_l
NNdvT\Cup S1Dm1]ɫxA:jCޠvϩ+~q?ru4вҎELH\
xt(;Y m4O)*5#+t.6ߣ8|kr#G
g>;-P--긾v{BIzKi)Qޞ˥
Zh.s\v
PKw'  
  PK    A             7   META-INF/versions/9/org/bouncycastle/math/ec/Tnaf.classX	xTu[f#FcFd{Ld "h41hFa8iqcĄ6Mvm7q.%816ݗ4IwKI}I0X9756|s=_p3 &4	@dG&;=Z0voS~?|H!6c#hP{`r/cYR!&jw+j'=1;5
TKTa@R|㓙bz"3%p[Ҋ5VJ%/I.VS~Q/y$q3
#|rh%2{,ΏM2 }Fb:-k'㓅btĎvFsh{g Ql*qStvlk lajh.@z|"cأdF]MWP\ZX͌j+O5CN180*>U%I%7GTwFSh6WI8ûXU\b+	y(%l-x@oZo~tD=˗H_oo.[(&-)vK9Hgg~;Lg5=k0<LJ$xFwyeE$]ERN%　y4fsv҇!e.~>{$K3Js_zHFL(څbOUt;piݺ2%X.ڗS>QHS?&Ɏ0YP;طO7! dp惼(1{>1;9;KOUG:[`%>F3v2O$>odpģ?@SM|rj47A۲%D
ۓ>*жLߗ#7tcC$5MTS?YQC;r#ta-}Q碮4:{M=mQGLp&rBz~LqF-к?;v&Uʯ &~B)ve
Q`Ӆv>cg%>8,{4	44$6*?%ӜFF.I8~Q;_}yt4]鬝vvh.bdK|V!68?e1`Aћ;LA٥_x͹1:2LR],q/:ZL:4,+̺53/ï	6llo097~KGfo>e+~Gw{tCJNLsǨ{GJ~tiiOb
z;
_bK{1h1	3ğp._gj_R(W@nז`rܕ]sҝ'5,Jj=Woڬ/
TI|
OC};gZWܛ)%(u|[sg>7@K>\ЗUW7f`"{84.O"iCoy7g	D*&^ad1YT/Ԏ*2옺K	JdfHr]C=4)Rh<IHC
SʗPЭMV4}v#Ww__%A\)
>j8MQ#qb킒N:@AjJG TTPykԾzs)ʒ@19=ɉ1X/"UV*ut{WL7Fe&)n%$tqtOեa{@J7XaOKߵë
U+ƶь?^2LP}yVE%PPǟ4l~2EVGcw%'zu5^Ku4@*2\; `9w=u3^::~6aq%D֬
/f!ՙkh3Qq3/nrnsok6ŵ6~m mqm4KAe?XΒ0pjsw&#̑)?e.]lih"-3};y{i[ii<Zzy-yrwhesLȵJgmw顄Ό; oXG(H 4"$Ko,UX1'Pg/ A'oULcMʒЯV
zgQwyռjOMXZ$,)JKT^*Ek!"=װVTQlTPc3!P^I!7)<!zG4߰1%EjV_Dc
x-
ZS<)ݱFo>KhdDw DA4YS>8ynLY{7=9<
=>E|q31Uq-3TX~gx[>^Aa&w\TPQ` NUv<rS.1s~^|1Xo2N`5n$b9aսV1gV`ƻ k&@-D%D6_GGo`<ve+"Ni.w38{vn,
 W]*ZrC^ء!Ԗ--KgOб>zfJ3Pq5OkZ̈Dͺ'?NcQoqMeTy4KXE=
}]$:-bk_|
<MvO;O!g0ߦugZ-bb 7[C1۴8f?],/bvAmbMjiYm/Ŵ:c>#:[7	2",CΰaS	@jo5L1*!T?omy-u\UzCg%_]rτ
RuǱj6!N%^xol "Ԩj'o2(UXCXi%H)5D;oeb@,~?$"%uAPJPY]!PB@^$t7]s/n\pR7"|p͛d1tDfܲYY?Wi._nMUCI
W3TN6'׼1튖
~[O袍9fF3D
ojQ|
fqH+,K?aMϽџ".-aa-L''MJ0^&W
=D5f7HT>EBpU2b
ԮavHߧ5#~/6bAջ]"IEx(!5z﷤ӼxrSGcH0
ESc]U(V9Q!,jiY!RutnYj{*Cs7*~TVV}3A_mcU5ՑjFYS]qzB\A#"j+mf{BU-WOn[nTPld%.لJ$-mװI^:UWMɏRN%|{ς.Oø <Wa˜emh
wD$q%ݴGZ#F%	3=5Nnbw/Юa
e}Qtl7mW@>m.}xUMPHw^~_&Z
\ZIb`H'ddBLu,l0lv>p׺RҐs^Zy
ʪDewYT;}nȫ
ҼC:KfAk.^M
{KcI<v,GbI<KXw!<GbߓKܡq
PKG  "  PK    A             F   META-INF/versions/9/org/bouncycastle/math/ec/ValidityPrecompInfo.classuQMK@}ۯXM퇵~kZ<)
ڢlmRl'/"xIX؝{ofg>? ck	$5ta(}vF',Ő9t\G1$wvBVô{-9pG/;kwlG=6=aɻS-I͝M 4#Yo(6;ulrO9yY7ۋ:Cl+9n!gJWU@Laʵa>Cʔ`vvO!uOKOE
̿`XbsDjLPPI$@SB
GZ^F~>>	L^uʵ7ZZp傫]$ӵhOazGej)\D߈"z5^oPK+-    PK    A             D   META-INF/versions/9/org/bouncycastle/math/ec/WNafL2RMultiplier.classT]oE=3z쬓d)-	mG
pJ 5),8iލލuTğ@BHJy!VcQ	j{Ͻs ^Î1sh1L0,ZqiEu/pWͯWZQөFv=d~0}#.`s7D^M$*~TZϲu1ad00fO"ΐym?pǠeΌSAӫvDlL̍b9hվ;;H.7"^c&3,CvD?u0\vL$𜪔'}˫y>#nX"p/0ּk:Q?n@p!kk{VsDd9E,1̝zݼGd_!r؏5]C%2)l*Jl7z:ix]
%tu'7 JKGR1&O	jv5JA[u]#ne(ؠ
UWzx_W[0,mi֓\+.maˏ|33v~"I~'r_n:;Qf<©0kc6pSw_,#[xK?@C	i;IK.Rk.ut!2s|˅b/v\Hǖ.u3=_2i-!S|mU+-'¤Lǎ4ɏ~¶1']ZpLkܣo)
͵i_X3検־Z!3CBBdƵR'M"g7hN[13a|dآG{t#gGc>HI!{tYPKm    PK    A             B   META-INF/versions/9/org/bouncycastle/math/ec/WNafPreCompInfo.classn@͹4I0&q s+,PER"QI];
{^l 3!cTR393 [xEq	I[]v_{96
!mٖ!2H## +"Aq}㼱wzSޑfkͦ3PYݤ^י/Xjñ{V;E,3ƫs6ێe{9Yl@}|Q%\fHz0S"b.9'pz.xD钏594mjAzgh_)e7z=TγfW~ R3+M3Ӭ0A?Ц &Zх=;OS~~3U9	QS;7	Jkt10\E
;aӧOҏDzC~\KїCui~S56|(/ְ
cկȩD)-~='`"_IrpְnJZs_P|5%D1XnGJ@P6BnFAn7m!EB.EQx%ķ"kF^_PK>[W  o  PK    A             =   META-INF/versions/9/org/bouncycastle/math/ec/WNafUtil$1.classSOP.L-LP؜"RyX"bi?_+&ZM79bIϹz=~`R@g	SȄ
T
wmEwJ;*9vibm>U,?kWS[$4Hg|+pKOێSFn=^mc;rjБ8~:<L>#1!Q+p'T^[@ asL9'q2jIƁqI@s9MS{Z̕,G%pQ}88׏W#W%άGG(tgm߳;k%\'nt7N*M>.|iYLn/U~Ae5ZR
ZkchWG+3ۦ0誢V}ͪTo)0wQ[a-"wsI9un]r8
ӷȉ0J
;4O
b="?C+G>B|~5#W oO~Wˢ}o:c>CvJ?q"Gb\f1>~*ƭOv ޅ$ncB	<CMPK-em  o  PK    A             =   META-INF/versions/9/org/bouncycastle/math/ec/WNafUtil$2.classW{wW]kWҠ4ǐ6N".vp
ISv"׎](j֮(gi˻q(д$R zmCG(MfVNL*syܹU *Ձo-/~X53͓M	z3SI
"s$!C-;U5B(ӌ!щ@QyWqÅ1vCLvVg	Ya~:aT]B)9nuSV9HovpX PS UjsEx]wnu&#F!msboq{$0bfȞ}9
˳V9l*0{w6pXЅ>~#UufXݫybTnddaPb?(Yߺ-+N0$eU+(x(|pć7pVe֑{rmi&?,a&OS
QQHYl	z[*0,q,R,-dG%:x@1ׂ6#H^f:>"	&Ԃٺe5gģLJ!>g(*>%8>MahQ`l.F21,Qtif_ΨcTJ&NJTvkj^bT9J)&|:B<m^$`؉.EY<*| Z#sAZtj̨hD'g%Pr*Rg9v䘵ݞ-]y|^@_0$e|n_m	9lif }Ui<˦c?IZ_)}S[6BIqdxN}qi[|8$c`KEۊS>o,?^oV/J/|=.I\"E~
Wd@Z3	ZVJ}͠83f4[
*UeuZksuLo[&v+\$
:*9LS2j^E
աͣ1Đ
ݗZcc%6z%Vh2KWOoцj/qw他\F*2y]YƖ
~O_v+xFm{(sWt-Bx&
Utba;^97
S+K!W@
oą*迄>Jl*64h!hsCd8a,xC\l(%e#Fb	I=qu(Me=UVA)ҒHfSCZV5pI҄ўU@+-zҐKS*e<ODB.1qɖUL/I^LE7jFtvd,ĬΈ	1C'!4:^|zGlH&]cYLvV)M)ή#`dS"^F&FQC]"U3o/z"ďhRC\qQ_!+@$2GTt>NlJўp
{kئbm<Np#oM$%zh$,u(}p//;"z򴾯{K؞Uɀ UrSbcG1ڻ<G[y΋EG[gDEZ`ӊm%e7PK_    PK    A             =   META-INF/versions/9/org/bouncycastle/math/ec/WNafUtil$3.classV]SU~N6PX-P
m0H-ՀFjSECMlm$K83Hud֟M,Lt'{y?ssNeE2|Kpb84ezӭndL#S\oV-vkSk]VfΩougVsP/mԶ*Y]J9"8	Xo2LJ6 	9135ݮfol˝gk@N1[*(/>r4B:Vv<q)m9uaweWSϗ%KcB9R1Y7mȩ;9rV{
"Α`KeGhkmzVY'&𖄋3MkMEy?!;YROt.Q@=O"iɹxiPHӟ9\H$py"N 3kKX<M|/ZD<R=ZBV szV֍;WuX#!
MG.XU[wV6A\,wz8b	C="%"@%C"~Nn8	_29:q'A=
Ӆtmljzi61NSQq
TtMwA-a!FYׇ!ZgT$}4OPRC} [Jv=7H u]FtgǿBs٠lCϷlȆzB?cڇ5;~/l?#2u~VeFRiϬp_fl-k>lcJ{FQM&aMVXU[X,Wo[dnR9
؂uq*{KTKǠ?vZ
D0RNY#.>I5~1p= ZOy5.{P= FR{E |W(SKgPK3    PK    A             ;   META-INF/versions/9/org/bouncycastle/math/ec/WNafUtil.classXw]WML%h
6(-ֲ@\i
RP>BR
myPZ>c~9wV'=ٙs߽ۧ=>RPA7Cu&hcgbFJ
5`ۍV2P5sɳfї2cK.ji$Vc !"@aP[:=p{W'Ë,W+a)!e
fbpNNU+g<=ENk3Ȗ"6TOEʗQwdfa#`{`5%e&̬R"H@L;)[aĺg`%V3xK꺓xt^sAIW
`m#`2 $+c;96%O5K<jG/x
[dEi:g`MKȚͤHeꈆF	6N̄ڗMie$fYLZZ喓[sVՀqʬ"S6Uv={ts46Y~Nw.HrPq@yyRtNU|@O[J.QЮ"3l?[rTt
F2Y?),3g5%|h sGUq%7I[_U$aͬa1i([N'րyYLWYfU05zWarCĀŇ*82#5l?$O~נ1-Ƨm&!_Q8hW&R1S49
4!˶+gU|ɶQ|K'H
;*.v,ZfoNX}]78ww;ܾ?>|+r@'[`|93,i;\w9dhXNjHxw*?`\Hlg1dI?%\Qq?YPj;,1YL,3t!0X3䧒q9ӾrL:՜I,!(mֶM
.
)bC_hi$I'YșCJ 
pcپH<e6.:Ҧs?4w`ض<$~QخMu|E`	Y2P
%*V5\sGGKkAwMknds,WXjmܢ|;r.j8M	ќ2r93'TӑRQgTjQs\T<ݾ]O2t7Z*(&n9qP)05,x½6PBT7=V1ϸ{	@ɶ#>u3'(	J$lj&K?!fӎ՚v
1Z$>gk
>Z	JVTZ.}i]B˺x{J]@Ux$6^T4AyuMѥ!$Ɍ7x#}

M!^w֭SQ9Ep7#սl'Kq2+$_i|u)u'~ On9n3A})&FTBpnɠN(pm80+py]%pat
.qRt 㦜B{utP9Bn V+g-U
X'2x뽄կk*j}</7SH
?9g]F]>J)IuMxKEu9]դѐglupPu
6骮q)+]Gytբb^.Ջ$57/8^F%aD ;^y|k4 ېkױ/J.T̿Nr҈V5>]1?SS <Ө2:o6e"L/OP*n)A :|LꦶwE$v8
!Qo Hm8<.wmynD.F%#x,,6OE.>"sq.r3ܓgwz26ψeJ,K_Xg!ihl?cۋU13)VT{LW[ΉN_$j+q]wEN3wfw@)/C5M]#W"-cW19&h^	co߰Y^⻏6oqT$SǸL{:GD)yבCq>`pS]"~t2!jWV{][uqLby)ZVw\3 =E~RƋq9_D`/NW)YUFkxVQ\uGSaݜg`#	%d`NRL8@ifvrVO	!w($,ٻk6DnP4o$*hDkN$*\t= z<@l{ )a;]rPKJ$	  5  PK    A             F   META-INF/versions/9/org/bouncycastle/math/ec/WTauNafMultiplier$1.classTmOA~/=wE^+'M0&"	
-׽nKO_`b41?ʸKhdgfvv￟A%"4pO\I;&:
dzϗ^x_!$?ĭնOf$CJgU;e!s@T5a!mඅ;fD<$L'⎁BxB^:
L6q
<#
Z倂_,jqo2phs0!HЀ|/ŤR^[0lvC*T1CY-̌ޖ*:6XW2k:#`Du0K?ic
@6agQ#
	!C,޳@xX6PՊjԗxY=.sAK"ZB^Vkbr_,Bb8wqTY=x"JQ$RPKFJ     PK    A             D   META-INF/versions/9/org/bouncycastle/math/ec/WTauNafMultiplier.classV]sU~NImkWYJ @Qlaa
r?3\x["Eq&tl̞=zg~c 'pWDz9	xJ1kUԣ%չյTTTI51ʦW
p0F8|czHra9#=MO8DC7[jTb4czQ5*ZImM/;m 1`ˑ-^jzVA
.Ϋu?^r+|AoǛs*UL.0W|EI*t4V%8e7m-[^p 
@Ѧ"#MYHJBxcXxpvc'brK=C!w$]1󫎾5ARa8F%a5yK]fP4m%AV]j>ړ&v.+Lv 2&9I8]I!Pj>.6c۶D;[?!|R8EV5գ$		.cg$|Tί0%3$Ǵ(n2i	gqQkSC[q%/鲐ѥ'>y\MWRkkiL0C䵫+u6B&lmuC\rER]	5wn)RM3j7`j-X6KdXp_PADh,v=JtnQ}4KXv{+:J7(.m⦟٧\7etvQl6wuf*f.|)۪:-
7Yή~ktl`!e7uSz_3D)
*>cYz%eժ^3
&CC64~EO=B{kh7~PӚRȟx
<	"j<!ދyaL~!<<pqGnUk/ %Eg^+V#:{d?q,q[ǔB1qQ}퐣G$oAtm)hp3؋dό0{)<j.=qoo˜~x;O%0?:"{ccqn"XLpQl,+Q3>r,:tSW͆5毲>
o{M+C"*ԧ~!c_t2?HpwzgPK->    PK    A             E   META-INF/versions/9/org/bouncycastle/math/ec/WTauNafPreCompInfo.classQOKA}?]vݲϩЩb)<:h
Cvp`͏{;l; `!OX{Beg MU_ZlE.F=	'*xD2Wbr!HhTݐ?ߜTtH1:dX"TfJX~x+	NOo~6g196m*%#(Xe<ZIIv[4ScJ`SՔ.W%ױ-PK2  d  PK    A             >   META-INF/versions/9/org/bouncycastle/math/ec/ZTauElement.classmPD׬baccaم[Y)+`X]%F
7e!CMs描9`V
.>P"4$E"u$

4ul&B*eUx^z&txI8H*_uPڋhqdu
KA߽V4*t%}+BYޚ}:/k#+yPKN     PK
      A             4   META-INF/versions/9/org/bouncycastle/math/ec/custom/PK
      A             8   META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/Curve25519$1.classT[OA햲.E@҄[|`؎5D!/>&"D $gwhJ39|s|n4 IÀdUxdp3EʽrVYcjt9[XuP.78=Ƞq+hq
H04_6Cd1RU4!+n <Z4*88N0d=~knxI~vH$6V*M޻IRpZ1t4ry:n8{#齋ԡ,14;vt}X=<B9ah"LTY7EUX^qA~R=
:!
Ct;t?iJVS#H9c+\nqF
vjB^.rW'zcEx""Տ#C^Ou04{x0U
12nV0ЩP7b^S0r6 )Z,LEuFKT7 KB`iGqȞHulИF[MQaCZ26up
o?#q$hLGR4/'KRI|EJR/p5TfAIJIe)=٘ŗ~/o*ޗMI۔i*FD.HOڣc
"LA~IvqQcP2L"ۮryOMO}bRH(8i]~GLIgdGtyߦ=Ro}#N_~c4K@$OPK*E  [  PK    A             H   META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/Curve25519.classVWW=L"UKk  eԈ-Na	t}o.~pC89_l(=J$99y}w{ϿG%̈?T,eQ"#p.3 .m˹ƒ~bC0heP43:HP$+5pX`X9&MJ&u{j$ʈisc(u26I֣Ν)5?P;wo
?TݍXŵZ0)dqmюY4Zepan), d[xPrzİl8Ch!0/1w#k):[NI(<列{@SG$	5D[Z큆@(;#n4Q@H̰sz*WTYR2Y>$8e\ϤdBr^ZRG|SiyDQ~9=v6;-C0?#"vaRJ甞awG\6L)e^#Fȅ1\NrEudJT}8	cQ\GӍ^,tg8wa$1kYISæ<{/1cR ,`Hg)7)H6Au34aTDo)0p88kna24H%Q"NS(/7WGN),V$I6ZU\?'Jqfjҋܘ3sGS"&\Z<+9u.
Z7B&^$.-M
HG}b'Hk%P$e͋R.
nImԬ.zr;Bf^@e3t`zy~^lTh yQNkbDUĄѳFT8yĸ.ǻR2Ç".z(fNӅefQ6X;Y]|qQq	.vKkL%yTKJTA<m/fηao*LoymdYfk`Br\Ř*pZfJ;:3;5ǀռ޽DoѼoӚ}eq+O0qb4vtK}sX16iThƃ|٘fk^E`-YF'L#zhVxYR*H.5{b/b%4V849`풱)#|l-3iɄ<Op:]i
tz],jq-JѥsM ~S|f-1Sss\-38W|iQq*ϐ$ueQ/v[t]u5c
;j^阅t#wu1o]}˷|%7Q&ca7mKd07|ZWݖYd{SyYі-Ll&'ɇw\@{k1g͎_Rƅ]+\<a75|q
+v2Ժ?PKk1=  B  PK    A             M   META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/Curve25519Field.classVkS~]ؕ8r1)8 $@bd˒#8M2NLn$i&q.mi.vt2m_D}߳
jΞ>y/_?_ 0jjQ`X[J$/8iWAH&qѾSaC(R.nI\DZMXaBY =3}S!4I)ЌI'ҥ/,&
+Ρ9qNUPsfih:
tittCXZ=Q_RPe[W8BA8:5U}=xr	Dx='A18L.]Hx@Ay,M\g)(茞inU/yx_ɔςtX0V ˙jn2rBH"a (t<*0{24tEǦmOVBٖtY6G8:	qcؒzex'
]JW+5$<#-^)v
yxT"&cA4Т.2zb7VfB9g͝\wI]|O"|L61k/*hf\::3Vn>O:3R JWue+Q,	,#qsG<F"(Ie,S\/Pylh\OO^"*Yb>/k!(US%ధW$\e{ud}\3õ4x@TZG7km'=ʫ
Z|KZfU%(MiZ)h8]+瞲%t1Iuzt0Rb\ețde[/[?W
s344suh6MJS-*7܂ų~k+׺}c$3x?[
ESwYpHn;&I3}*7'(Y	p2Zo׽)(9=U({  42MJ&{8DwN:p;L#//04?}a24+cdk
ALmV$P_x쏐`LԮ&C%Pjm1O2Z#ۼ!TI4ġlL3I_QG#b5f_].Hf=W>lg?
2>2&gb2NS[$}d C5իϳLyGvn'7{79_1*D3{?5cĩ~5Fg~veZ^$oWVf@{4h<';S0ǃ0\9c>8JY6'Ble9mm\ֺ5j}n]#׆5:һe|ܰFZJ.E+߃"5fF;561!TUtrg[uuo<lR ~(ǷU¯_pىfdJdn(aVMiifPU}~5˪imu<}m <- ^=E͕ΒF&smxzn81f}z'-Sie_y@;<%rFZزD;
liШ:
fSmhvSΠݼ9}ZwOBvOW%D!dfJuwB^+!b%Y3ixA5\jhZ&zbɢJdUUGKe,~3
gG=??ȏIi״PK$F?  
  PK    A             T   META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/Curve25519FieldElement.classVwe}I&4 EVՂ,B-mHI4,efR
+/>Уs<>z{Rk˩6=swn}-^A
D A]͍7[ʙ53W7ɜY
@ͬ
wqǵ{pJ jX^%:Aa
(@Icژ3rY5mRqjUT
aС!.qcYMi]\iG)f}ʰ#M=<>UаAVf4BfV~bo3sʵ6
gZDMk0#X͜=#m5}[ХaĭM	Y_+t̫w`;pFmA
i
,6N
wUbk
Ԝ~N.M'3jڔ@r{$壀&KvH}$p!Kat[R!PGv,I
5;h6$g_PC0W"C\<$0)BBSZr~%l*ƽ!a#=aUsx(31l5Y4*1扜S-jX=!$"sa2ʉs!1
<(ה8šSc=I	34yy5
u76-ת۶qƙu
SlS*)>'f\_>V2C5dm{x:hqCcfzkcT w\kmH	tc(F;瑋nj:K#UnþԪA'i31m
9e8hRkΒR?iV($OhwfYh4Lf8hxW`*\_J}F_
tm" 4(8KgmϦBd~BgKh=s_b
q_c}9_ŦҙYl>%9jӨOl}Ȳ *vzI_cyQD<Tf#h3=c:Pslŝ|Ľ+!z/ R~4	F(U?~Up >]}/%#Ğ×!5s|XHR)?C#=bD85bU70^e[KZ,
,Wdhë*-zuAZ5FTVGjRk7,>AtC	{鹈@w9M9Rv8M/z,v*	t5t5ffZӻYUfJz OMXPcZCXfJ=Rb)|DwLIz$գ,(KyG3d$d̷#1b3<~As+`\ie0\{5΋kB3ί7Z\L#K{7׫Yo\_mTxka6lV̞|ynLCxka",]Agh],	X$b9hZbX%N`bZL3L̯ym;PKV9(    PK    A             M   META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/Curve25519Point.classWW[]^/T		j'`:<.F=GӺ4iӤm&##U='GpӜsrN&\wfh,Rwgvgf׿!Ig>Dt9R23r%$ӕIP*#WʕR:S9{E p"WUN
\ʹq^rlgq6gκSp"2tK@k"$=3r>h'&'=nFXerzu5WpR,6g[ggE|Jc@Mg+taͭs'JbCc,6`8v<]XJ..8ax~qF$㈀r5qFSi 1Qt
}Uh8># 	&H'$;_gmR(Qｚ9%R\H|^		6f)6>ϛ)&ϥ+G)@+Ιk#6<!J<wFrsǢN,}ら/J|	s}ȴYjDkƖwA\++y*>K/7%A)E̕RP%MHdխWi!Joy7GbO(8ubNaM" |$X'lbem1:SE+x l5LPabށ(3V</I\98x

7-L:	'm܎EnHA7=Ճ~_U&dtbKE8?xîg>y
7cgWm߃n=Mk*µ3sSZ%¯4^ަHs4;EWo`ܪTT1K5:tfM <G+镼crZ:U%9](8|\vH[AY}?;@R xbl|p諂gOF-	ӵ1x6d!h !k5m*-&kxvľ{>D*ŧA9޿!x=5z<< yGiL$<`O>X$fWI[\Ta㙣
B*Ln㸒.'Mum
Z6R-̫fSrhz9T2x轍c*UA6iÎ%@T-,(v(+4(+4I5vW}ay@6ej)=j+<rsY<ԊZ,>@rQ7QJ)U@1rU ^tWH~locht6|94S3TaRFjw\EC
ϥp)ՁM|Uy5u눘M2qDr/LKUM_qWö,w!'v1o;O>l);kYRj|qWZ ݤ?5^']ڮZĩ^m^oB>d5pcX,یڌt\30Ҍė	`Nu`ǅXDdin=xɄ<Ck\Eݺ	g*?o݉yeD61ȷhΧh_Ni0e$>ZIcyqf.ъƈިn4OS7<F\
ޔc&7Mܶ#חJR̓|DX[l>̓6)K4WpK}.iG%OjGO]إj]ޤ
{a
S]5X~A.w KTdh<iOi)
{QdqW$4{#<
_4v/PKVrm    PK
      A             7   META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/PK    A             M   META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/SM2P256V1Curve$1.classT]OA=vKYd(* K?i i"H|`Xƶqkv<c_|LD& I 4;{ #ф
$2bWl_W,]*ya׳kr-?75434R,8E =XhB_)"b^PG96UCP[KpÛ(޶+\b׫Vջ8S
:T9|5?="A
Gpp$Ϊ8Ό]<]_(-Opx+f;Ua.O&,/.\ SH?^\VЧBG?fHp. Q~6~B=f$/qvlZWpC+ҿy*LiS«35	ǥ'R\uM5W2d9xXJBy0NXiUVq
tLxEnT yw҅KpjɲS4
24j3QM@B`	ЎL9ȞHKe7қhNm (L@A! mdz68A
û/Cl#S4)Z+&ҲֵVEJR0I*s$Kƞ>[zۺ4ydй	ғv(똂SP?#?qm j>
%Z"WvL'&/戔G_X|?Ȣ mI|a(:Nl{-\mG|@j#71J:	vPK0M  e  PK    A             K   META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/SM2P256V1Curve.classVWW=0! 

ZZC@!"Z%PԈa0D/P?!~/KD9=w}w{ ઀mZ.
<%Ky=x$}ԫh8\M(e!T 'C˲r!kc7[X,<dt(hVST";ϰ4!ܡL:JZu؀
V5sJfԌ8Cl\e hUwM&Ŝ6\qXV#X#b283uuyy)aBb=i.lǣ;g^Ea%R.0
_&\F)?,rlP7]F41ic0t-	J"hĕV~	
ƺ`$D[HVP8hvZ
uĂH$E-H
r~r}[#%Pl
F!3(b/F#x\aB^G?.ဈ..)k#TZ""XY#drsCvxⰈ'P6ѻ5{q=Iw!Tru}WR]yS8E<[QT'iE&O6W	1S\ sΈ04t
8]Ʃ픹q.Pq)8ijOl[\ACx!X$taܮȊJB)Ny9y諼kcۭWB7?>cӴ#	$UۤcJEe
J:iWQ1\!ex/
xIe~Xkj^T=OCZxGý}3`
{4.g5UƃYhBq-ȨIr*+cxIҘ%\B?&
e9^PG{>dd"Xg"MIhD//bp?PֲP@?ŌpXG4tkڹ<^&2kcZ"&Uf,`[ySQ^)%YVzpsBsQ1J.yε8Ҙd|1}mˈ^lx44{UJ,J8̡2alUӨв6exhf4Lc<e	բitx\~caxһlzsfnp0,.w*c~vXm-k-3xԼmVZA@PlTz[,p5F(^LZL\;Ei̛>6X8<Q=	>/&ߩrc'ak+*kJ5$E6R{cO]v89Uz}osIyj3˵(r1s|a9]ŹDc,40o^o_%`fJr⛅I1֛telƅLl7,r+2/PKW5Y*'    PK    A             K   META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/SM2P256V1Field.classWsW?]}8GcIZ{XIJ" k9T%L8Zʒ+
IZR->P%/<P`@0<o<PsVRPf=}VG O#!`W6Oxy=[*L\tgP'#`B؀`)TSkz95$RHU;~x@xr+pz"kne3pl+RAl6
(
\ΒC{,a/Zw45u),G'!S ߀1
$cQ 2m@NLXp^w	'GGa҂)pУZ}\fg0b9Oa,8G迂l뢪@t,t89T>aA>U(^qT.%ϒIR$*NO[0d5o/B+5Qj,-8g

Lfms<CzrUQ۵H,Qϙ()*Q]Vu%,ُaՀK\/aBe:k"_ݝE:x@5
uw~56Oֿ_5kpXCKEARErK,5yʰv,Zmi)u6HnE'))!`heM/uOC w/ZPXUA
u^L5(ywӎ/!e{nXuꪈdO)x=@JKuAa7+YtqzNW
b_+Ỏ6do!W
^"c+[*jexjeeh+̣^PP}e<bnӊm%VȽV3g%`Ճ6	@Wax57- e
: ]*'qe|,H6}̘n&C@0+
wXA$J1&bMmc7ހ1<Г+T-8>|NS1t1v1E\yA=2Lo	Pz@VLP>	"ַf0X阣Nk7߆tPE+a`SL(5bzqȫ0*Q3:E2~33	#Nl̝~#ڍ^U`?@SFP_vy8܀sٖ|òSI'dI{7b߁Aԝ31NbSBY}sIVjBefww{!D@'W?o)(ٚfN6WoeNia;?ca}rXw0ޑmwٺmO۶e=l3m.{cms;F~n[5P	ՎqYJiT\n/u3Mغ@k$wKm!!M-Ўr[|Z̎CX)xBݖbeK_XMig/Q4R<P2[`qD+g@zM;.3 hl[@*;F'>3:wr B i`_Vf5NB*pLtl;v+mrJْ+d@{tC?xQu&[InQTk+4S

aMzZ^q蜿ϟ˟K3_'m{9G̍6k"@rM[8HֻΌf
YF[f4;F<#t	Q|CcC4'7e?#jOnU+Vu|xx1za([`(Bڪ/^&0]%޼0{^In$: aǽy PK'!+  V  PK    A             R   META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/SM2P256V1FieldElement.classV[WdI#:Մԭ,BMeS(0f&v{ K&|Ss&4P{,lW UxeH
|tlrX*d3ed^z&o蹙i6?/?go46B A!uPiZYIMl=$bB)ch8el>9:1qN	KLv_
,󚩏hm|,-c!0t.g\->oB {bK-ZLlleý_5MDV'@x,7|fלr#8J\LCMF\A-=0!&Ќk. Ece8A'5i_t*g#a
tVpg	2'p:(J)9.>~#RWRP1	KA7epڰB֞P*8>*Em"$i%Nw'1/+r伀bH0
Xi=yIe/lc>1/_UpQ[ufM*rXBY+xo2krcL#C
f9͚-ΐ921$ddijVYg# خ?qPļ&HڶB4jRy-h7S=|gl(=ߢLXԏZ6?Mtg(M
ٺX=MujlH˓tcѻ
Q&Ƣۜm#'AgE#2Md-̣S嬪!5<}MϐKLJPޜfY%tB SVj9}<P[@+&Ph7KBDc>QV{A]Spgxde~W,*m
QW}Y࢚	T|#ht1DYS'^ñqr3DG:"zNI@]YH+۵?wUu;\{P]Ŋ[RDQ|Fw$ *+j/WM[I
8RkH3<>#F.oGjZֺT+R$Fm^Vշ>Q
pKh5
\\!z=v!"wk\n3m5֞h/SROJ	##~<Z+~fӒ#/%~̕	,3WJh j tDj rP
:TH`
!^0j2+LqTIՑ8Q{=t%x(Pp{`$1>quMsm'@.|(N?^}Լ͡ gכ woiE-{܇|>rk(i(|/PK    PK    A             K   META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/SM2P256V1Point.classW[wEiQf[;vX.ے&QXv 6!%#rcwYv ^998<sx&Q8O2]U]U]]u/|`[hC!DH [fjjLp+vnRњSuwib=(ϩ:ob8ڬmqȱ+{[W8ч9H7kꗚ
[M
9[܂D	ĜuZ^l9hiJ{ ?%`9Bu|F ?pBv+7	SNعyNGx-U L]+nlwJ܎;iD)̕nF"=Y%q'8B;8gW.-s[md'x<0_@}&,q?rͺ֋rG.m*k<
v_ ۇI}x@ (4ƫv$rixa1#㧥/4u?].p+xG%cfu+܈n)LJ<8'$c\:vF1
}OxJifQ2Ds:-P(s Y9Sr@͝]sϣB!rd=D
ͯu^!ryFIW#8%зEg9_]o׻-xY*cS(Qά%܇yG:x'l%-'G8KKbu۞t솅8G6
f~']>"C>wcV&Pv%*ulǊř
DDȣ&BU>Z)66}K];~K5>"IZދE_cA-P*LOǸAԷDfUt,kUyT~w8LKf+&"~Iqg\m?4
Rd"HDM
40^C>o(?$?b\H<_B
^|BxH^%Iek((%Ja\1Le*ZB.vծ:c;T5;أEsZGF@;UJ5LPiM43$9434zI\e}ThRug&]u3Ųg_̨nz#L8ߢoJVW*āH&;uXg;ތɎ|/*˗6~'(eq
NNTD5ڮzWqzYz~h$$LX&i}W}`b z3zE1C&|Z!kVvacT3T,a#<3>*U3h:2Qht&
QytP^TR LpTNQXH!V``
$qH	kZj*vW@LBy$7;֬lYIjf{qUVUZrb0p	O@jPL_X.6R=l-x1hiu-_%H`aWϰf^?

GF̤D/0DpecG
Þ7R^}o ;/I^X}pݐ _&%Bc]_PKa  H  PK
      A             8   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP128R1Curve$1.classT]OA=v,P>( m)-R45iH|`XFڰ5D1
Ë/h"b4)(E;;wsܙ?>|0!̡hPab٫ekq
zV_w\u;/ksu{C3
ad`EFC-޸+
Z]z40DRS9EMZʐ9ֲBw)Z[x7 ,e&C8\
g85ECl.-K8J"XRZ]<C]ʦːH,3,=O%4V
HӍ=-.1˩95$d9QҡMmJS''	/4E(UT=zjUl	/Jo&
nZHWUΗ_vE*#ïID5EP?
}mZe#`,` qЪ`B/y@u$N.\<N+p頇Gp,]1 Y|KyTj-м,
T.Xjp<5{Շ'1kDy`/r~FjȮG|L8sjܟٸTYuo"stϐǕ8_#=ƗF9{qe[V*Ckr@9G8B#G/#>ƾ1GT+`Kj.O=VRG|)#t)#I
vB$ĺ7M}wH
}:1I(|~PKCp  e  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP128R1Curve.classWWW=2a8((jiM"BeQTa0	[jCpJsQ73=B$=s8̼.;?
WD1ЍThDiʌ"g͌񐪄bHΘRQ,AaU~%5P>r4$0%c0'zcç<i53˨fvp#|Ab`td+JhRJAF	PP{?j:G!+f|xZK2TWPi[Q[X3.kfp+%lvOZ04.bUw:DT3l^	$O4a'vxHB
fu	93	F6tX |4bR8AZ*ĉZ#0CvsPb+0#ǃjQP2fK2tRs)5e4ExSc4ibͱh#$Qr#,wh3ng$rqq/ ()9Sx	?N.cT#	QH`2)=!?spDfnUK^BD/C[A2z1RLk[8!b@8ZER~yd_H.!<I)ư3dߐCI3>IJ$vaTwRPaióyb2[v	ШCMl="	YlShڨ>iĔ3krΜ[!=LSem$f$\}\zF³EvL]/^K"^pɗ5eRRV,]XDH__n+h4@P%Õ%^?lnrR7̬"ibɚL"p4&MY9#OG2<`S^dgE2}ء<tJf*o7f>Nd(.u]u .f#q5)ݺ~.>^m81-HRFp(o᭽/Ҹpx^Ⲣl
ݢu:
ٯdQJhjD2r6RKuK/>6^ņhMAKhS:΢a}peAP> -cF`{eFϦ͢5G,ݳX76׳ apk[xK"zWl+aʄKnM=F0W %ngi6Wr,5Ρca
7x;[gU[Gx-1}0U%i.1>q69渃P)>s/&jq=]psWUgJ6]B{O]rCT~
+9_z?r>gO$ұ{\:s=u9:xnVލ|o
v\$	Blo+]\
@Iބ뺣;!zPKm    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP128R1Field.classV]s~ֻ]/lS:4ipl@[8v
ZK-+VLBZI&M4mo"IgZM'ЋtI
VkCNkj|<H<_'Y"*8\t%[θy_:\6q
	v	re1PySKn/e+rv
>NZN !wj'4$%~kU|.[	7?M-|Ѹ&t
l	ҴS6֢J['$Sd.Δ%ĈϑHeA>vvUe%u1=L՘J	<>
l	LW&\aPBt|n8[w,V8L7 V-%(1Dux}IDB,4LeS8aL`d5Ϻ
J[z!#GQ]#%/aBY$&1E=Yqzi)uĲ	<OIҪ~ >'m)A	)
.G
KMXZ=xNcs/+[
hXȃb);J,}"
EǛ)S$$3(N,r%ZYr<(pg9Ѝa˃8e@RU 5EevJ{iNOжWl>]ƭZX'Fc;Iϳ6.{UYTsyWk"!)m:S&3B*M(|yLS:fZicM5]^^!j3$`9t,b{`"w>/&ZJ%	78t7x=0o3g\%J'%zǬ?C k=
L讛؞Q*W6waԱu
1wӧHI2A$:B
P=#ch!NJ5t|ޏ!݇	ULmpOf4ˮ#3Cّ{v hFPmA{:"mH;g~C^##8,yr&%-l(ڈfqpC
ڶtO#m.ImՇP(r yX~ngmҭ?+JH]~/2EwH0gQzQOOY@2|e(f(Qp2褰ٚ̉0	̤B'9)H2|FeZO?1
o[LoI;?׵d8}
(]aHbI[ZxJXzxb'-7L4!L%ML:C)$߅R̄)H	g|m93~lT誚JpW혩]7۪nת;0?PTzڵ]av8cA2X:vb)ˎE:QmQ#[7|5<(!tSzwPcSWQU(8J׽ T!5#n5n7ݜ-oG3ך`FfGw5dm]Qx'$2%0F/ݧעPG峧t^ovbvbXX'[]pYrj5JNXJj<cİ[q!Jb9wOq3rTr[n^'Fj3]!LtzT-7ws:	JqDSM{ E,JR$ho+oPK  W
  PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP128R1FieldElement.classV[WW&d0D@jkkR5V@(
!at2	{O&Yu^^jL"}=럟p_F_(#U̔fF^CUg>3CfZQ3}3cyghA@nBKh,V녜h"[/+#	2vMMmȗmTشcGzpdU:ˆ@pT\P-m$@5sv8YC+FU(mymKf{ėTu&Q}kdu52]'û?XYGnVI4 sV>{6sM2! t.82RHjl^όK)[hX*4ЉnOi:ŧG(ۣƜge)hNN8wee )=kTTGcpJFexFw5sd :KZpx3uƳ2b$4/@1"cU </,
G_0n0sB+OWe\r՚TdƬ).^,S2uo2YeRS8T3Sź]S&cͫ@iCpOˎnd,KaWUq6B>6y"(aA¢$|n̓9QɳoF1Ϯ9#K\ -:DU@毝S&CsΔ&Gتչ;I1qTn
En![5$DlxӴ7mdRiEV-GVjTCa
\d't2ox]Ιf
mkڦ",M-壟y 5{v#Tb
B'A
|;iu&۔5<k"Y?wpޭ=|U®{7iʬ;QA̓e[=T'؂J1
(k
%~
x!zj7눸gM#$~ѿR' _)Vԋ+>)~xo{v.dpw(|fib ?ѽs|G7D*迏dj
C5g']
rOns/RRiOJ^ҫ>kpMÄ=|"=wHΑ7)~v$HWZ:bZRD(bX:PĀ`V t,
*ֈd-y1YI	WbD\l6!R	%)lX	^V.0QJΓr-&ʅz7vJ-<*潽8E{<g97+Jm+{K1\7{cn_[.	(a(?;#4)kp~@smV|1/PK  y  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP128R1Point.classW[W
d
IZk$X*
hƪX[ݱC_C__9}sLDlE|jg& :~4J剞R;V3u&{\Ϯ%1Vqٜ{ZC`]G5ܻ@|ڶn*w)ܰ0gC~_rl
5>W8
CV-70GTCtrvE@TS:VG4,4"Ǐ*4k0J8>ūD@w	iX5);giX|OeV^Uv7DV^Ugn牓)5.!ZQ	lIݢ&Pw!r@qć` bxDQ<vƖzgZ8M+[YuѠwvf8p&:.߮I<Ee=x^}B-檜fs43`<jݐR)JuLdvU.QÀųx=Mó(ք6򜀏2d~\`f6Yr&K7
q(岕M[P|RVK<!PbK0V:U)
+Do y^xU7qxCMaXZU&qN!yEsxCKG+}>Qs
|-1ɲe
SVI=)^qy/%8yݝ#Nk>w}'@r9judٱDH
U*VyT,b+E/]
QMMd{<_f,Vdpmt|5jh_9% G2ոi_4jȢilj-D$g)9}Kt짱ƴNLa"@^_/F7~H<C#"9'g$;bUtL22L2EӁtC4nP
R"HQٲ#S6UL5m
2*0Di$H	fHrx	fht=c*$W4,k"BLlae/PfI-&J/cDF12!%ĉH..;l٦ܕը(4=iE7}[eVmb0!$֯O
PRV>ӳ
LCuL!j4 
37>kshӮa\CKqӖ[2SK6ƿg<XqZyIQSPSۛ6r{`wMg`.	H]ў($egFyY
`o?gAEAe!CF$

8Ja*hU]aʨg#qA
ԴO_L$qWT)Y/bCKeC]C8 1zXNb_hY

Bdv~0{J"~~_EĠDΛ&S^@aےK訋ӯRj[խ].$EF>h||WutPK?	  I  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160K1Curve$1.classTNA=vKY|PPARZ>|hbL
?6lw^?`"B4L| EŻHٹ3{|Aܭ@ A
!Z,\㶣L;2ڪ혥MYMf{V5ˠq]˻a0T_C`s*p!v{x̑QP3!/ڎ5g,7n+dBEcs4ಂFW0g&C$hf	O#VP{͢0|rmCbAQKc(	É7\-n2ͩt#wq"\ӄMC)(8Igčޥ"nK"3|HqʞX>26agsT9sԋN`.Ms#,ɲpf+<$CG"au22V#cqzt.~làUMV$LΏ?	@

CX9۶F#JwM0u,
<2:i^z|l}e,ٽ%ٵ}zUQm裯PC`o8r"a+MPf`Vyӷ17hF6*1%TLy&bB:z9w,p<7߶ȖLwTw<
^r!R`
2
`c}L\8K:Sk&F1ߣ4FQ{;`G;)4IfB]{}DrǓ6;azxPK7S  e  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160K1Curve.classWSWrWT.
*V-I@T&!($J
eYB4[{҇
aJL;DҙNwv~ﻟq_[|&8T,FN	NHxPhR*K[ C{Q\
m"cJ:ZjR0C`xVɍrʄ!N+bD43Ҕd#LB5yQ5֊Xjэ$I5eh[@@mӲE
sR}6iV܅
"6b'qc3).9Fl<"MTݐTCgp^]ăhbkf|YQH+hNDP{/F+(1.Gɴm`/|k[-/n芇#QztDv{	/!)\PQemT#9qT)#
*۟9I	"<)ݾPʎDy8]Z$򕨈.⑵1\8#5e	ӣ\1?Er$kt+j73/#ۗɋ>t;p)w.qJ@Z J7\(藦OE-7><))S`(!*(:F"F՟ABIj
D,2"9\$'GBSYx':KİQ$h"&AC- >?7[! b
um;Hb^RG5b.$79WE=2|֊gE<ǵ{-A=#Qv\;V]v/xHkW,>}b8Lwt]yxrPgiRw :rNS{87N/٤J/LNjyC7UөLp'1eHi4aLbiV.*+]v!L,9	K!p?P\FX	U1~ .|pTǕ4tkB-J		U[>%iݎ&r(%YVt+C52z9,(&TUGs+t.^65ӑDЩUGCIoi		@,VQ06humlC@-sh6֒vVC,PK{3\3]70Nm5DÙE⚉`xڈ]t{ͽ:sZ)۵`&I6,HI{h6 :ـ:8L5K7Ϣ#|lC6޽Vin!,>AK'Es:3Φ
B޾@x=񟽝NGs7^uBpp48\s8}cV/>l:kw]wo/h+|mBr4!ϽC[Mq3[|$Vb$ytA.צx&*ॴW(0p\_
)n</;+iPK  Z  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160K1Point.classW[SG
Ÿ́= ZkmRa@\$5$ܸ/اC__9}sވ؊,wΙ̙s~s&~?Yπ_"@<_85/RRɢd49ƋN!rOwgrgC+
g]+i=e+vM=$5辧~TtS]E"ѭ=[n9`!"Q*S71'BJޱSDrO#|J4Qr\Q
Q*ιLشrNGAAl0)B]ں
&8/h]Ceui$zrC^zHl-ϺIgm۱CbQ z@$v8}`-؅؃'YB\בCR;;v'탮B0
d9;D3Osm4pH0PxgJhnp G%1T)dݐ%kbi\729!]SdÀ^x=Cë,
s)]HI9 E)LRtzoޙN+vuvoCmq+xF+TsЗN`,t$J:"יsmDN׼jp	x]
)nEPn	ތC@7yz6xZ;Y{AH|%ɂmg종gO%(km2C|0_QfSnq7޿qPpi
m'Gh<}89=R$tk<-QB@.gb&ZhE/tQC[7❛!~h :@?;t֑:o<f캪hA3gsh""6_82KǮ?v~Rd"@DAu490e. d"ɏ2SA
\D
P}J&A^
Z+%۴.k53̮jة":ef{HuT-.i^ժ*U!
#JjefN n:0:K7z@˰}b=D1F{5*J͸j7=hu<JE8peN#45=V7[LѷNfܞ6jJ2:Rͪug5/-Lʀe@3v~!.bKDXvYDKoZW'[6S_1.:X4xi@~z
q <NNUЫhScʙ&2*VQM
D-SAW-=oap2#x]6	&c]*Kvň~W1Nw+dpUXI0e_hMn%o
ԥr./ܳ0ph)wg^^ۢ"r?"KMD#onZg+;rhxĖ񣢆~%QtT9c5hY~|gXAePK/R  
  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R1Curve$1.classTNA=vKY|PPARZ>|hbL0$0,#m"?!4Dh >$ww)sg=̝ CW 
$2BY2mGw
e51KsB֬uǠsC˻a0T_C`s*Pr
EBN\>hQ*SQl30յg|2Qt3qEAhfh?72S!\wG'JU5\g=3fpB>q~9o樂vK	(q]DІdԉ
Tđ`迼i¦M꥔SEy3FVBC,8ul'O`En<D\&)3%˦c".Oe{5/HNrb74ݴƊ[hU9*9	#/w
©yVN-l]F+ Kwg" Li;_"ېlKAIv2p^jUAeqCԒe.l[o ݯCbԦY)c-i9ڶ
JL	` SɯĤ^lM/n+ѷm)-S]2ճ]tD9,D#cAP-!jK e%/|(|?K	#ԝpN7q.
M+?q>n6E 
.}%:^ PKXOW  e  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R1Curve.classWWW=0IQAZ&
Av6dX%JEZqL@}V7SڞoЃt7s}wq_>ղ<'K#$c2X$gp	(!Д_fm*פ"
6L	X"D_lT!0S@y<bieJQ.nW:<ÖҌdqw&L(ze `M(gouьKf(ݟRSƣվ{K
\,GjxQ-ܨB^fu539"a;;sgNZɍ|<mb'v	xHDfصʔJU=<\`4lP&JKDՉ.p5Q`}n GCٸM-[Rt )E%t0E:ںcHKsw-;hs9-\OHFj\͑xGS[8	45":y!4`Hq *0qMĈ(b$VH0A8M=:aL{	}EJ^fǸ+Kq4㄀AOdFlVbH'#bDI
UQ0E4F!a4~]
Iijp"Ac"nmܐi	j-_u!/Ƒ1<Y yEtiܲHJ/d58/@Ql771%iS;ALY)ʀeҋ,UϢLcNEk	ͦ
gD<k^q<ϰ{E$eBCRU]Uk'zDt?1ࠡg/.5UhTeӚndI\PxdS1iH^i4:F}yzu&E:Pf.m_ޥ8v};B8"ɓJRWz4\6~_A-8
1HsrFVp`᭽/ Z</GJqILRjEu4)&TU#i)Q#'
?NX3>6^ņ蛆n6ZhS:}E)7Y*-rUr?x6ؓ#VٴV6w]8pͣ:`Z޴n&۸^C_396^ZKhWiäU8:rKhfxg7Nr*'}ػ@j3Tg3Ta,w~l?6V:k#u*L{p4gd
BUnS|fo_$M<~õINh-,k*K4u
m$C-9E<uTyR)ߗ0>v.`](ף9c EoX!ǳ9{߬X9,In|{7?w~O߄rpa7&yBON
7PK    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R1Field.classVsVҮ䋽F?b;%a`hb䂃cܤYK-W 0N£
i#I-
4}$i5=Jf2I&=jc=aCM uʔ,g>;i]StGc1	@(/W3s嚓_[Udg-w!S2-wێ*DYhU|&_LG$Avh
Q)
I,)q:f޵%@tAޯB@˕Tq2X\F}9m9H6+0<ld+Y6L	UAFE'?HfރJ{a|KAJyq8u\{ޮ(Ju	=qK`7FZ;HoQا@T'GKx鑁4h[ƣ_DDЙ_=
bîT&mHu=&m6F'$uV8ъ]@"=.pEjSO8y
Nx9l-1|O'B%$Z.2kcsǗ]*t't,HޟKI+JRѥWBrT*8-J\wdWSÉ8e0a0<V]G݃	*pwN`(h!)cņlKgjV@/
\Vk!ً2Ko+~$c)MB7?)/&izUQ3ﮬܦΟ1kk91T&&wNMdKOX=Gxsl]U:![쬧xLJ{/<)pd%i9̬ysD[x4+.YH$-F!.l!H.@>_vۦ4;z
Cy(
GQ~2Cδ>uVGUis4+>)z`Mc6c^F[60c8PǦy[nE6ɫh;[n1t	:*6ErF2U==mʋ6mKc":>9ZԛSܫ1i1mJCڅkh5*y1R=u5!F8
p
%nX4|}~uO*ں=CF.+֞.\
f3oGOϠ)'0	Azқud'S[JlJ`yķ):Oz?~j1}kYbQ̮/NXxT;IM1LOՔjQP
'ju W*ZE.􍕏xLQv>ZAzg.%͈֒/#I6DEE\pco-[ְHqq%fyiyq͊k
mI7XH$+nXqaYmYXD_er(6$B445`U}}WJcu'խ<Ϳ^N>YeϦSM+TFaRW`7W>s`5J}A˿*O**
&߅h#,u{|?`ߦnx^l3rϓ\/
9ydQB0]Ph3cViO=tvnƌO1
׀W^\8ch중`PK5'    PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R1FieldElement.classV[WW&d0Ĉ
0jrj*BjzqCL`fh}SIV]vڽID(
s{?(>QF AV13Uv-SRٌV1=`h%tNَ9S;
#!,!"	+ꂺO/LG+jzѬ\\Ql-NkCb;R&rT+;xj5z
kцvB4ZXYoO$׽4TVT^Xڜv
H,v,FEM鎙c{6qWcfc:e%e݀X\I7Ox
)|HJHHK@Gc,ZfXu]JiTG +qnt{B(ԁd.1WO8W15q'\Ԝ>R$p.*)S~#RةƄGF/exJw4re :MZ<D<ggdHh2^`X
ٕ)Ay^Y>g\g昌Y
/ɸ5Y2&]=_je+2^k
krVO@1eP5k2fЬjI,t	WU%Fײ*FԳʘ0/)
,=9Q
Td]pfPr}t2݉쳀QG-\=΍S掟	MfsѭT:EEQq4H\m*Ԩ~PcMNĦRN:G HYYў[>Q-i42uE+IЩx9go>F<@'|Px%
lF"wq2ohM݃Sߢu[e<s2U?`7p|D;Ae֝"ɲ-PlAE
J;k
%Ǿ*,y#!	ϚF8*~	IO X+)~oy-Lm6Rr\ͬx)~wQ|_-]E}D=w=N/mm$5JUcxj|d3[ȅHJݬKuyR,Pb4\G҆^]\6_	C=pF yuOp:U]iZ%)"|W6`L1Td.L@VREb.L`6H%\"+R6L0YSp6Db6)S^-!?/lpKx!=}k`$>|rSɯR"z[Ei.?:Hz&wVkݎ%o7W'CzqŨ\kSc-	> PKg?    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R1Point.classW[W
d
IWZk$XjJ-$L
	&.v7cۇԇٯsܙ؊,s~=wMl&3А*w\ɬ3m(EgݮS朽S;pc})kR{mS&|Ü}Sia5sG\&+DY{7ܨjnDDQ
㖳k|.ZGJrZѹ8R\aqu>~$VYiW2qY
c&$VjXs7p6UXsuK'TkZ
APnwCNA<A;au1Сa=uV8)R2x%+A`cM=7	l
u*G|D`+y"cGv;6==uh4UlekG9vUh{F~2XB$y{-}i1pB-檜fc43`<j
ݐR)JuLdvU.QÀųx=Mó(qU	9eqLP|~wə.ݒ*K'PV6PoA(WKY-@gj+.QXTUFn05/-9<9W3{EUyn
7UKbjUǝCSmeԊ.AVD,>[b:e'S8{SN3
{f'o_KqmڻF}z_)O^ds'SٱDH
U*VT,bͅ+E/]
QMMdk_f,Vdpmt|՞*h_9%g!C2ոi_4*E4,ZH$S?Sh}xIcZ'.&Dt3 UI#E/Sy<O!,zh؛ K&E:&
dl&]L<傎M:!4sx	[e$(lM)*͉6M43$9<34Eű}l+ho5sdn!A0̲(^Ҍz
%BLW>"#sLKry$R6lܕnQ#Q)izҊobDEʾT1[`"~SE_ũlJ1+e(0}G_C70Ӏ40jL@cK_Cv]:]Bh["(ޢ_Z
4=_Ɗ*.xO*@OM=K
Nqoo uq?]r^C2(C5ih'̋K#vF{"nKe)d	B 	[im25'Ms|m%
0SzS*.0	e3¸jZ'/jSx	ŸwŃQhEزE
P to3/,Mxv2bQ[;?G
cai?YH?!bMuMC)a/"0
EatW)]D5m ݄.|Hu}`]TM4J+:hC PKX  I  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R2Curve$1.classTNA=vKY|PPARZ>|hbL0$0,#m"?!4Dh >$ww)sg=̝ CW 
$2BY2mGw
e51KsB֬uǠsC˻a0T_C`s*Pr
EBN\>hQ*SQl30յg|2Qt3qEAhfh?72S!\wG'JU5\g=3fpB>q~9o樂vK	(q]DІdԉ
Tđ`迼i¦M꥔SEy3FVBC,8ul'O`En<D\&)3%˦c".Oe{5/HNrb74ݴƊ[hU9*9	#/w
©yVN-l]F+ Kwg" Li;_"ېlKAIv2p^jUAeqCԒe.l[o ݯCbԦY)c-i9ڶ
JL	` SɯĤ^lM/n+ѷm)-S]2ճ]tD9,D#cAP-!jK e%/|(|?K	#ԝpN7q.
M+?q>n6E 
.}%:^ PK{;  e  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R2Curve.classWWW=0I7V-!!MB,J0!fp2{k}[~Ni{zN?fGINf}wwOh%;5=r<+KY#&%c"ȁX4ӧp	(!Д_e
m2Ϥ"
54ʓE	㉾ȩ$xZɌ2ʤ!nW:<֞ҴdqGҩj()Eyle6<5tI6SjxʷA[EਖV
/ʱaWkӬКqY3c Jv`pq,CK~y		aزHn<~b'mobvxHD-f})9#	()z6pX )|4lP&Hj*j*T7{8>
/1 ~h`0kV3ż'"FJQa'h""-`sKws<tDƖp\OHNl\in
bm`G9"t.^H.M'X9RE e0-erJ8#u#%<&"%emG91*1+k$Kp fpxqDaEM^B@CgQD/z1oRfkh8!`P8YUGRidWLv┈a<I**ƈ3"$կK3> 6E-N$raL2RUQbió]bWDL㖝FF$TYW$!=tYvsSK6ɰnĔөrΜ!ː^Lsf2|e
".r^KPo.c=#Y;&y=k/%/OJ|MjdZ+X<|HK̃+8hhyKMU뽶p"Za!UԔY3E*$95ID)Ҙ4$\4u\QN<:d"`.m_ޥ8v}thpT'4hڹR}MdP(ĴB ԮʬYáHĽy9RKdt24P(B{I1H٬BU]9iq
>і*/6FkM轁:iu߀g(369TiY=,{`;ma1l,:pC:`Z޴n!۸^"C_396>zлrǏ^Vj1L.޳n3yԒcۻF@SPƳޡy_ ,ogLelJIof;K|OlͶ9.-T.m틤o=tm5@}uE陦.Jo轅!Gµ.\*CT~Ekv(?q_Kێ_q7,@%{߬X9,In|{7?qO߄rpa7&yBON
7PKQm    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R2Field.classVms~V+yWʍN&8XAJĎP#c۔6yUM[8$:w~f:8zݽ{9=9=~ nǻj
Р8f4ӞKffYYGAC;
ht5D@(.撳Ŋ]̚e`%Lg>Y2O%έ;n!/3SΤ7Qle[Q~ ora!Ќu
Q4"Њ
͜c)6lčѡ[$71(2@ZF 7q]
"J&q!ܬ@wzj@4J'0&GBAVn}I_td$3iom@UZo؁+h<Z*.ҶcY%mC2Յݽ.Y;va7a+'LG` w*Qgx;\:dhn`58ߑ"U%;oe[9zrĆU*[uJ=4-Ycmqԋ|D0.T
wT^8KV]Dթ Sc<iD쇢nN:f`{hATC&fPI'R;,J3Тc%+T|!9jf+h.o=QRfmF8uV<1oڜȂ"+F{J(R|(zB;F8E+hxXIKRAO:H'Ҩ&<*pV֧p,Y9a˩ˏggx3~)B΢35K3"y	>*ܦj[In0z54岯hvE&AIS)@rW̑֎;TĄ9[:R<T`>f<']R"uЕTf[sh
s4ҍ%Nm'è0PIaf=|4qN䞼fe(CΩ<?[H'j
uLqӒϨ|?8?{yp
!D3T}=_]PgO,B輈
T%y0
.]C3}b6APۈHN!a/jDKx=W"%4ʕUl~MFEՅrz,^ŭ{:(ܸnp.clwǪì1C7ixp^EIsP[bj_E41<'>h{xG{B
"p.8ɇZ)uCd_ӡXG߹es+9vٯWW|۪8JYr̳):%/njqibQxL_K.'5Xc'2Z>GbW*5fHkSE#XB\ߪ)4v Ÿj'饛GΎ`k;T:LĲ?Ĺ3޶&rjc(1;ο#INwMUIȐYʃqFRkFX}aHGd=
h'V)նX]
\u-*[vSz=y=X]խ}uN*wxT826_)gP 3@MFW] -H)d<e|[I߱ɍ=P{Bd_PK>|  )  PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R2FieldElement.classV[WWd&#":V&$1ޭZ"FV0ѐm?@҇{ӬV//}o{DEC}=/8/#hA@"DH`o.f&+rZpܒ5ܙY`ɜ5Iǵ{bN t*[Q@<q>
aVHKƼ*ʮY4mqb:bz^цBq+#f!s{Z% 
t5{
؈Np2;ghE@7'r*6l.KFɕJf(*6P0\RְE 5ofU&jMuMW쮦VF	[9O
l􏸶U.rKEv<ZRV@tڮ.
ĳI\hE@D
i&̰һ҂m)C73n`|"}*h9g&sJs.nE8e%zqD@="u͝@}<&\ $,Ó;dz@8)\!9S'}۽̼$q
Cd x5^oðV9IAyVǜ\kt/ _-S&%&<sJʬ$^"krOD2h^i5Ύ6c83)R6K%_W]m㚳z6~b /}EP+6Hoc;&՞2ȽP*l R33υO_NaF\p17jLLoEX+GҰ1KuR떠Fq&֌H:4e[iSd!j,Fg&/2)/si1\G?j<i!lJp?ё+%@=llkz5<3v|OxkhQUbt|ݛI *YwO
q_mQb"*n}LQ֤5#[G@$|k5T;(;
hcExw}oGڟ__n/U//:|@ sH(T
KǉSxߗӶ<rO.Y#?rn-RR7Ri_IzVW{5*|l9U#G2tn#Bd-{zΑ7c)^tNNY%+Е$SԕU=fו,1bb&my׃Ytj'j,k14
Zlf.my׵lDǎҖ7y=m#!iy5+uk%3&ˠHNXn*ʶ6r?[Xǁ%E:NmtQ(c8S7|9ɞoT$@6;\^]
$a{
;
tbj1ʟ) |/PK    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R2Point.classW[W
d
IWZk$XjJ-$L
	&.v7cۇԇٯsܙ؊,s~=wMl&3А*w\ɬ3m(EgݮS朽S;pc})kR{mS&|Ü}Sia5sG\&+DY{7Q57a""Pq5>n}R9O-\v).а8҈:?+Ь+8w_G1	+5L8N*wN9KúU~*5c evW_!]' ҠѰа:s?OHr<Ez &uΞ6cs
#>"܈<@tud۱;[Ξ:p*W猣Ap]?*M	=#],Z!<ɽy>M@sUNVe1iAdSnHkA:2NQPHr*(iaY	<@^
Nԇڦ^E븪v򜀏2d~\8&(l>LnIY%(Pe+_Yz(^vxR3j5ؕat*#7ڗޜA׫ý"Z
eo<^7xKê%DLΡݶC2jx WX+|p
|-1e
ۓV)=)K^q/%8y#Nk>w'@r9jud٩XZ@{"*BdEWV*K"_y
җlh&&i2յ~گp_t3z+h`6:jfYh4Ưђ͡qFj\W״/z[ȢiLj-D$g)Ye<h1a~"ä͢<isHc}i4IeMGe%l"q26.dtrAt&D|9Tyh2nAl&锍l`zDdʦyQ	dF"uB64
7K9H [ifYRidIb!&+h9LLHI9q<)fYIJը(4=iE7}k"eVb0)"֯ԈOP]Rʕmgf/DԀi@5~o~ױťU.s.U-O[oO-@/hci<'{ 罹l :8.U9!!4]4Eĥ@=QH 7H2τ-6BAғ>j
q)Zzcnc`2Ha\ve5S5){bջAUJ˨"lC"@(HVnⷙZC&X;1h쭝vFz#AqҰ,n1&&	n@n0:.6uk nBIQ>gѾb._%Bc]? PKA  I  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192K1Curve$1.classT]OA=EVu)"&!1aKv<C^|MD& I R;{|S*$
2^ǝ8o\0s;G	aw<.,KA]V%lVOhA&X%bSKP_*{m]r9qJi
g=ތ
Î3("!nO&Ј*4y|97}"AMWpp$}5\E3m0S+**Z%f,Q@.Z\a)gPU\Sq]vk̐)<:.:UzT;4dp2R!_Q5NՁS0nAzz̒zK8wyE	"¶+RYaO2\5i	#<jc5b$wlr=p|tn*	cƑEGH鴢m`qZru=xb 64 Kq9نtXsjcMԿGQ^!H0C Y?
w0@%q8Ax^dI9*-+y%W7Td)@MJIu:Tu5&ik2Mޤ3HI˓vjEEӟٟhdl}?C_dlJWJriq@ȄbtH{,!FOn딝tF k?q&.6Cvm~-Jt1HB~PK4/  j  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192K1Curve.classVWW]L#"[Қ4@h-D@(5`0h	v}o՗>7SڞӷG} H"9=7ݟ~W0lײSYҍ"#p.;	 x9DPǄ"55k2%0T&"aka#Fʣi%3(j8	53JSLblȋ2P.b=*d[]ǈnd%وN2մ8CoeUzOKImdڤZ_V
p֊؄:ƍah/"9&!yD
!ǽDcQP6&БE%ʣ"vG"1KEv#"F1SR&xLiIfăѕHsk9nmmkimvbhюLPQemT#yqT	#
*۫IM
:yRRʻ}N+GҲ$EtQhbTa!18|.GD/#i[QSƸp[,/	$ÕV߿7)I*v(_>\+
𔈧1L(H WVJ9U&Ab1Y&Ds6INYj$&/N0a^!ƙIDLF[*A&:}~nC@NݦOIbVRG5b.$=92UE3ܞT>kEǳ"ڽ\zAċ@;.e].oD?u{#5K㕚Fxf;ە|gё3#pzY&UznrRJN2Ƅ!zH2ƗIZdH_ʬ Rvم0U<,@q=c5אb&aIWҘҭir
RdP;(Z&0$&Taer,w;pEF).ɲu4!!s@'B1J6t]w؈4ʨpŏ	^ņ7&^t/=&%''psXX@e2gQ-wcUϣ|k"XCY29šfp"r<8޶TƳ gr&k#н54}kkk{:3oLlX!n+t_tpjJЗCuG؆l{1S@Y}bjȗN6ht>g6jM}4pZwmw:Z]Vw{UR>.
w0n㴣YǙK.7_oH'[ks8w/ע.|؟8D_k62\1aY"oc/[nY`aI{|ȯ7-:KIvPdaRxB_q(7PKO  a  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192K1Field.classV[wU&fP&Ւ&DPl)\4HIBmmm `2xע^Q^,wO|ԽOC@Kɚ9g}xs  <P5xjS5aMS{ʹכv5ܹ;?
ZDdgFΙiÞݽn5y@x<Τ:gROǋ4i-Y3	`t)PxƓL@PIT0cA,5Ь$713@Rf y+96k9	C6])\_ca*i`È@15;h]q@Y+oLƓj;ƛ^#7)SOd'mNmr{z:+d=],Ml!W0e@6(ũ{S5tȼQ?FlҰY`nG~Tgf!fhVB*)wt4lh#N9:]!;Y03Ka]N?31"pF#[3~M'?f{h	^ܧ~DX*dd`0Cm% G԰G`S7^Jv62rY^m2YSXj̶2ubqxʰx#u'6WͲg
(VHI$P.p*+JpVѦ|!#-I[51# "HjkY%`f
<ʇ1@,',?~8sgO8c<{Jiy2&~s,͠$LUM^85ƼU
mJ:Gʁ`w7OHz
~ mmgH8vTAc1gN=,&)#GY2'Ip+u$K5A(9VNKv\;?5,ߛƌ6HFPr;x	
^ϯT=JLFoB4*4Dx|+Txi\ZN>ؗXXY,}tNw
$ 
B0Ҙ^ˀa]dkh"Yɕse2B"N~ʗ$@`H͔ppWIE&Lׁc[#eܸ҄Pn~r
sMiuD.XH;r
^E˸*)/<:!"5g '|ͨ]jYM殣<ٹߛG6y3?scџ*ʟ vH@/2Zp,]!{Zg*ci
wcģp%{Cgre#qOL4+͞KZ4;Ҩ9.3s\RXFISZ~zj噽bs^a#X,S#ċ37&H#yN\q81#C|I䰔1eoutT#WE]HTuGqY'g]
NY4ػJoǪ`v:LSymԀtwQ5MQ~15ZI{R_Q{ly2 /YdA.E_;V_B?OG;*5_PK.b  <  PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192K1FieldElement.classV[WWL2I8Mz5!QZBMEB@/a!	ګڗ>/<؛dյzyCSWޓ	"
,goϾW 'Uu(I*TT.g59͞M@^;z,Բ_Q03< (
CHh-j#}F.]ne
9G%@;vQM}Ȗ,8ճc.[钄֡Zwvc-h5S+JP#Ѵ:yKy={\oXQ,GBtmQ˗6@Ԙn)m5brIhq/wڦQusMAA*)DBh,έ9$Yp"$n2D
bq$$vn&5fM]u	r$ZO
1:1	ݤP{#8G^),y^^ pNJc(%Ѝ	.>"2WQ~P9	Y^.a酜=˱8*Fm" yeyw'3\9Hhr^`X`MҔ ,$pΕ1_flC:fTd΢	IGd-ZYx(ǩr}A}aͯ	~.0jlqPp7$OKOlULq6=:π?D
LY˴uA1{"KZQ&i%"Lz/ze3.aֲ7.jcT^wЄz[*պ;IqsTNM
ks\EnjԸE6kwtH	AE#ࣲMl-­өֆ42u]ϒKO6z.t?Yn)Rm:!!buST?q2!-MZh7wBC(_!G5ި:ce^2a=>n,l˾PﻨVBA[P?i&ʖ?#+.f*5D2N@YY{ul6|k]"vO!&PqRխsD({)>*f/CWM[i
9Ze[%7^ry;ZZ״V;k=wnzuW]-m	
<DC=rA"]|<^35CxXM	**'fT9Uee74OToدXF,3՛RTOUX$:~3՗
!5RbɨTP
 Ke&Rj0ܤֳ^Uɨ)p*X*H*X*WpaDb^PUPDkuhRpGz,u|&+S7kNh[x݇׳jkO['~f1NcN;C!Lݮ
}Gˍ2
DCuR}h]9/PKi09    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192K1Point.classWWSG
Y^2a0Z[ RQkT[\"BԐ`"b/=z9,{QSw2w͝Ͽ@~0Q~X.?1+fsDX	{Jv?Kg};Hڇfٴ_`:9w=Ci+:qŶ}C
0h
:﨟,tGa+y|WO]:&L%Q!P1i}u?˧dm=UIT4=ÏDta ;𴶝61(n0a?[UgϦv:mb@"uS ϋVMUf=/8M;%$i*<$4$-wKA@م@tbKEց <"ޱl`¦Rɼmok 8~GhKd҅'6OF08*q=zVl1'pcc
Sx3]A7%ZP׍FFep(haYI<@^.NCTҡ^HYkRIH쩑ܪu^8RŤou7Ԃ,Rzg%Be)}H
B[#rh ZpxzW%^[0OH `@"doQq&K; \Ӟ[Hz*8|>PB)ֽ&>3e6w[לN?"+ʲI*px33#%NBP"%DdV?(,b[-uC/]ZxMX%_>t5h.pt[]-!h
sTD![*8j_HvBl
DD(E4-c+FcKL`ONO'F̳nˈe<C#EwGQ|Wp(^<T^FJe*1B$JbCꖌiM:."Uɮث`hLj6%b[9ZU*T2)I+U9934:Ij_Nժ:ZsYV
^QjUiFLeT0W*āH&;uY̵ё2ق֯eH%t2Pt`մ΍zTpծjTK8-=A(4*1-}`໛
:
8
:{м?ߚ_Rtq/~UN㘋QǨsTvpQ9U~+åc\\`_DZA
AJq_}eh&L6Z`apC4B#=m6	t'te,I]za=Qc0G2.dkPOp
N-o(-Ե0qh.wn_n2r
?"釷
kB6:iq]Ƌ*HDɾGwt`MXqj˧"ۗ5@pNc] PK.S  
  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192R1Curve$1.classT]OA=E
*ȶ& Hdw1}DhoD.!̽sg>ƭzW!i09bnY&|K/焙3W<ߩ<sj`dpz⮊u[]X1@PC}K0B'\)s&YI
-he
qg]ncqYZYQnV!nfh)5Y|-wD>HFji8
gʩ>a犩++*:F%݊Jc
O-.3Ȕ3WTh0b<	n£CcPG' {NDL=Q^5X;og'
N'_vJSUףk(]
{ۨIg|n.MEehM*b[
Ю	Y3&LGje.M@Jm[{IC&!Gт,hKd[}[Pӽ[hHo-_?8LA0A dY ~:pC{ġlu	y)a&rT;x^MLR} 5)%lRy>w+*{eC6dJg&$1'RՊS?#?w\F]$du,ԌL< &g|@)XY|ivIX|G/O^N: >A6.6Cv]~uJtGpf	PKmrQ  j  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192R1Curve.classVWW=LGDА@@kIH4ER+ 0	v}o_~pC89_lVtNNf}ww/ "m>r<#KY#'$c<x,ӧ/p	pa/粆6gJ"ᾐ),YD":bvQH+xFPT";ǰ4%YXR51EoXRV15tI6i5m<P鿿~
EఖV
ʰaڟkӬUj~aIENj
Ƀ?1cE3ҙڈg)COe9QkPy?؟:3Ē+žT-"JUa'=vMPÞP$'km4$:Z⑎hK8IģqʔPSs4
q}M"37AK#xhSg8hʈhtW>P=SR&8T{|Etp	YtND	&<$~*iKQǌqs/)!RP.ԇnwcG(	$of-R!)F4}<f\/$WqB NR`):0$	+ץ`dNYF&\pmLQ)	04<1\QD;-;	
d]Z$	EdaMLI.#vSN.9sgn[tc3M(qkYsGiϘ1\etx/
xI%~&_kj֐T#KUCZtaS8ut(IE~4JQ+&匦*_?lnrRӍ"ibLiL|[<*
gx(A
:T(BMyhT6/o|ֵp?P\@wYkA\<B8&JJU4ln1^&Z2qcZ&jWV,@[}_q^)%YVٚou ԳW3TUEelV-
4
9iK_2`x^5&Ms.=N5ZSam`eP> -[mF,v-Cˈ6٢͢5G,\^L^
dYs`k&ÛxM"zWl+7aʜWWۦ"0IN-J~]n+m$4pjC5Ͳ	.vīZbf pm]s8hGZo
B'޾HxNV]?ڜf]ݧmBp_}JgkO]r9Uz;+sv˵(1s|a.lw]<4y[4˕yă`
Ò7wt'aȟ-7p&Ο쀃)2p\Rx_vzi
0 PKR|    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192R1Field.classVWȒ%G0MK.a)ƤIKbF(,d['lrmd[eA֥={ͧ'}_졧)+YMug$J}|= q' d
 T	E법*XŵTfu$Sbޙ F6CBT^Kv֪8;a9멲:c9GIY
m=\ΦՊSHU<kg	baT.Bhiy	LnD̚cKЄѕ0	490?[X$>1A
8!	BB86[w68;̟0tWnt2c):
$$/#01)$fM;
<!OL<#v\ژɯ{.K苝1&Gd5&	R]=E~c<W*.;RJ0N9
'
\ߕ]dr9ʆ]
M!j*=͖m˱)m3lIިjβf*/
ݩpSsz/2%oe
6`a*IX-mnj^9N^h_qf"fzְNy+{IBG!У\*.Tjg8^^4pJeq*r (q^$'%H]h+wVfxTZ(<*l3ԫ9IkӜM}OnMXKk9(DXqdTab
1>N>QC6ݫ4))<xVnfavW5wՊ7ya̐nHtyã!rm{zS^۰N
ӧ%1LPU$ܤ 6˻>^yk/#tC4ft)һ\Wh=ﱟx"Y6=x]I},:vU%b@	>"0Τi~FI-3
ְaHftm3r˟0,a0It>nD
Մjw5񠫃U~h/v}"+ˉ0:OO	CS0;4ǔkNɤ:|]qF;f7D e/}naBıDI{?)OLOhݘ~ܯ\WݘWr+m>I r
xe7kxL<q"_QQֳwYDY~ċ=*S9F
2Ҝ}TR[#(3l~œ7rB6tuk{64
k6Yb.=-G)oWA欇7:Z6RJ=R!f#qJKHؚh(Ú0CNj+Y:4
L%f̶HfD'$
6s{Hjڄb (5Jv&I,%D/7)A4BanDFA
K>߷ ]e 'Q[~y
py=RWh^Ų	9z+%WQv7;N(>+lT	6|q[|vON?Iz/PPN&FIGxvnIݏxX(_y_`ez}=TUv|gS
5WWρ0[޾M|DTu<.QGXϪUآ&rK};<AƷa_ՇG-QuS |Nd)eΩDh;`B|AbөѽNҦnާk0_ZX=j{𬦳>CAqPK(k~  o  PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192R1FieldElement.classV_Wn	jkk6RX"Tjldf&vK&_>ovdcQ ΜsǟgW"Srlhj+j;HUg>-.!CڎjCn),~10D83]UԲ=1z,]LتcZNVB>mƏp6*vcљ26vt04ijîXc|<`'~Wif.1S~+W
-kbf˝KQI>9W:Fp,C.xl[Uז|zyθ
x	
.3f2đPHqz==:t.T@,^OsL&>-UOrnBJ8	΀N8w=ы)<kTD5藴lΈ0sμ iY\Q</;uƋg1BgPb>rIWauD
s\pƊNr(0%K[H)qEb*E/sW̲h:CBj\2q1'ϫ`aCWpUʯ1On-K]ˮd7 =<P ,rX g%LABʙЈ
ef@VZ/n0Ѥ'UvN]Tpi-%l[\Ԩ'
6Ԅ~PMޮM#K@h',l^E~HV^D	֠ڶ|ppA0D|yFG_E>쒷?==D{;hpezťk`і4'E=l1պk
H8
Vhm: cywgF;%<[;  ⢒Unx6ڥp{(Ъ8x{ѴJc/FZ'_Ktԋ;>qs|oxlE&)U:<@}<#+JTj
gg嵭F\2ms\،xխUg%XL^0Yl!|n.#=tzn#+h2Ju<.rwn$Sݮ%\hitjj5/=I˕ۈVFew@OlW7i>GҾTFe&CU)WLB:LsU&?J2w~\&ϺS*!wL0>N^rOZ58ߡ2Ɂ݇i_PKʕřG  8  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192R1Point.classW{SU&79چ⊶M"hT(PE(uK[z5MjrE}E|?s|qJQJy2=3sf̙9B& BjdQ)(n)vq`Sq7B=+۩8zb8ܨ۱˥]e{ƮkW{s&!ZQ+u:3P'r.<4fsbq$GlwԔS
Wo1DJOX˩+S\޾&p5n
N sv:$nMaP^u#dQ* =/&z2^immᐟ^%67^r*r.Y;waxDoZwG^w
\8-Uu0z&bNyz.QЩTI<De={Z UQ8މD/(#4ʮ3[&FtSaLV7&u#J8tZ&0SP4Juh^o0TlGQ(B$`,J;Xuxe
fE{!o͐
fvJcU*O
15g<`w/JwC[8WL*^ذ*(Wig=0q	aQ^doQDeG\˝3c-I>qH^B:O%>W曮ތ8/tލjB%-ԱQ[+Lt&"I/7(2_صr^\|+L_!Q0ML"^t3h2az:u4~5.2M.m^
Ϋ'-ƭ>`v>N"2qY;zGc ~&D0 f6mLYK?GLOЮg;P!g0d.LTr	yVR%9C0LSshĮZCܥb6f6hќQl<ŴѤ9vժ}	Ff*IC$/<žNuw(:سuӪ:`CQj&U'Ibo#L8g\1S*āH&;u:Xg=ތɎ|*˗ֵ~;w).#EqqGk4̀WJW݋8>
=B4\&,Ą>01wC =y11C*
+}!{Vv{'Y%G5G_gί}DUf00-Ѵu)eL5*ą3sg頼
1A7$20֍B2b^
$qH	Zj*vⳣ@LBy$7;ⱡ欶lYIjۼf{UVUZrt0p!5(& ,DR^V<T4nkvw/~{$0R>3,Ï°ѿ3.|ܧiؑFð+.i?
`Er"'U@e-_"4UPK4  K  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224K1Curve$1.classT[OAv,ET\41MM
]ȃ1}Dh_-QLGΞɜ3eΗ?ZPTfU6gp\CK]KK=*.H}nhh`loA!nC,!֨E;wŊ!KJUQVt}NDりf0N⸶\vʲOVȄ'fѽ#hEK*.`LHuݖ%%_G(Wp-#e}	.s%~Q!Kt#u/7BӋ79zUg:"BץCE2%)ҳ8Igާ"~JFqR^ŪƩڰzjUa7WEꉬUi]
s%Jۡg*݅.Omd=I\OJsU0И3urjŷqЭJB_%]slz' ɝ7Mig
8A=fMPӼK	jFҴ-}D>xou4U^h>1D_$`7naX8Ԑ,":Mk&QP7|4ԾέL8Q]'qxTT4|{ϙƗpҰ͛D {>?<刢sG@+c11?d;&K}B磾\d!? #UhFavPK(    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224K1Curve.classVWW]L#"[Қ4"ZF Qja0C3^ު/}n==obݙAD9=7ǝ~W0lrWYҍ"H>7	 x9DPǤ"555
*ш0{ÃIPw屌f	E5W
g)BwfqPJ.E	(cD7rl&3jxwU@Q
/*0+fI+b.	<u;\XDAs([MC"3HSuCR
9OxNl,M,9W(%İ/].
-` ǈAy%19&dF<j,|"}]MHKh_s#jmiub^b63ǰUF<cG4r٠t/[|'%괲	<.-GJDD_Uf.Da8.({D"P:15m{qVE:`;Ɠ8) %bCYmŴbK'#}><%iS`(!J(:F"FԟAIjx~	i㜿M.epZGD]ȋ<T$EbXPDqf4!sdN1vqӧ$1'1a9)v"҇nyYq^KPO>k Es2îF"^:QAu>>I$hڮ]q9wF;9=늧lR''Ϩn(q iL|G<.dy(Sk|ڥKy
 e]SE_NbHk1\g]X@?dy8"JRS5l~1^	_Qj@ބ*_nánG^(%YVt,C5U엳Pd%]WH]:@bM2*+:f*=mk8y
z#Sh$Io)		@P
06Yhum#@7BkH9+28,:YDg'۶*xL!~D0wmнf^syq|ϔ[Bbm9u
?Dޭwڽ66SMRsfېpw5{=KOlP
IwCrΧFP9/&S[˅qvhqW^-MBpN9jծy2WYf?2Z^˵(r_2'W&&WCoG,?H{-[,XrX<n>"k
<_R+M8/q8З4oPKm  k  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224K1Field.classV[pe6t Ŷ"%MBKm
L6@wVT@0eԌ#/>39?apl'wsX~jpxP@c7iÚL1{q?i,PВNG2y+10rvڌL4kvge$
|85(輺&9;3r%{nNX@U3%uXJamS&ôc9nP/ЀFMפIn10@\d8f`DI
$ܣlwSX[kVlUφ!0"
<d(fJْdJ{:MAlf?5ls*n
]j8@I3P%"=lƏSC@?YwIbL50LRf6gV]
gfEoYӰM*U1^ld\`GRgi?pI~Y3O\D%>.&{lHvY'XɋOx RdHolʞc6Jffel3'904L	$@y.y;
M6Yɔae,~Ld9vLsgi31,N$%{9uF֫*eVBXX]Y)-l@M4ܙ&%iq7/qt"*me9C?GFd<GU66\f^=!$'~iRIdoxE"ݱ$~\R/4 @نe鼩.6a,Ie$IzM2Siz(Uȋ乞1һY_ڗXZJ,sGĹر!$ߢrcde3G/T;k]TZJ|} v'r]EQHzFt/%(x.Bϯ^Z4t}ʗ?Mg*tަUX
0j]e;Aqjp&Gpo	Ā"z5l)`<B9M<jN۹V_UYN°Юkpk{qaq*oi:x=_*֭
QFB!f&wԺ)uR;GN(zγX"DZk=n,%:![FsHȉ-5aE8J[iԵ3m5v>R.>>rԛ}^E.(0|/7с^p(WSo)>QXn

n
~z':TbƩ©[J?bx:]t 8zޡP[LD԰k<DbwS}yyK='eDpn^Rl{qAIy&$^[s_`ܬ5nS8龺~TuRe #*nt'AV#3a/rWHHJSNB_]R@w
GGK{*̣|1u˾13GػBqG+ԕ`mI9؆) />-o$73]?~pG&<*hGiL԰*d}*En^]}"T3X`/0	_֭d4 PK%P  D  PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224K1FieldElement.classV[sUgGVL8	9ĎCDK&D6<'̌BeY׽Q>)*ĵU<VB#e$9O>=~`^U"@˩[f\tolުGV}fn59f;4'o7m%>D7@)`dȮURqZUıACB7H
ܼնyV<0Kw
l]iAvG"VctZ.j"_ZX[5~yUkγ[M[gΘg7I3}'[Nߊ^F8W
=n9;Чa.\VRV
@j,
9'WYbid4d%r[|(?fz/Xg	~^:\O+;i9Pj={y)d
7&",oȦT\L
/ ODV>*cp.ȴZ͚7˱8*Fs"!<q;gpໟ;$`$69/:()mO;%`]9'$b3
8mRyCS>nS2t}\(ia4LiT)E&9IN,.-_.=9"fhQ`)o{v=qs&n:>#c
pj$8Cwn=fsaTX<KSrٴM#*N
+{>_w_Qv==}Ws׉~7ktT&ظgV<jMuoeݞr/T*JSu9f6H\z%qabMF١f
dS0PUi\_a.lSV\u!ͦM׵(fND/껋^g
~h+;I{^|fcd~.s"9z@{{}4͕qW|c_=6רm[Ȳ )vf@}>6="GP|2dKz=k1:?/2ҁ7If(ا6TyBJƆʆo~
CI,d1Xxq )JBr(qy]BCG|3H[/iZ(2=^Z&Gorl=ZZ/,jZ;Yx.5Ou|֤W_\>R.O
$d(q}Q#NSӤ?K2~C%P,}(d=xa#6YpA3	$
PI_gP-D=ш0!r$5"e<(BMl6&#݌it'&ɨ$dTbF,cp dyh\Eň40^1{3*qa{lQx^^Wsad3o!~)jw
B^^	ۊk~sIPN=pue!&._^QyG,}(ɇK>R/U?*Z򏥊|TIL9[&.
P#?PKsH]    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224K1Point.classWWSG
Y^2a0ZZ RQkTZT"BԐ`b/=z9{aSw2w͝Ͽ@~0Q~X.?1+fsDX3	{JvΥvO$Yt6m8zlbճF_ʤg+ko^GЃ?/1EBOvn@䈕stι	arTTLYt:ٛSTֶM${ӞXGDbt?;𴶝21 N0a?M[MgK'-v:b@"uS 6K܏y@Z{^8*qvJ<INUxHbWiI:[؃.؋}S. [=ox'u&l8-[	:|𶶍Mq#_04I(Q$0xBo*)&uK<	;3ŌtZ\R8
	8g$Nb\|&85P4Du(^EoПt^zHq I)LSTPΞͭ	Y'%Py+ULZ;_dB[<#*K98J`,%:"Ǚs-D yUg"^1kx]`ءӓCi^ě-j9dipUߓxK`yMXgqGJ(%Poki2C|0?_PfNqwܹqP_q{{s),;Gh<=MLd(t5gٟZLP5W/Z|+@_!5QқfKy}jl!Gʻlsu*1]oj:e[i"ybE]~8Ѹ@{WphƸۙDN&gLx,GX.ϣV/^<T^>% NU._HVT2Ԫi
`UydWCeUx
f
{4IuT5hVU
U
#BJafN#NqjbߢjZsuY뉩VNQj&T=iFLeL0W*āH&;uX̵2ق֯eH%t2Pje:f{
g<q$ĀjWJ5%_` obL[>0ʇ z]}8
t8&ibuÿ> 	_LqQ
c.sTvpQ9U~+åc\\`_DZA
AJq>2^
4f&M~
-0K0!rrҞ\vVDJRCk.vaɰ~[y1Rw#bxTHI2u('xN-o(/Ե0qh.wn_n2r
?"釫5_H w&v{	av isEYNKdOwtyV)%i]~<繽XFW%oPKuR  
  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224R1Curve$1.classT]OA=v,T&MDHfw1}DhoD.!̽sg>zP4H08RnYǦ|K/礙3=ߩ<Hsjxxdz!"nK iG>Xł%bsKЈ&_x݃s'㘆V1d0b<\~t7"V+
7q8N3t;'t	G1JI*Ceh<SNc4W;b!br$!nUXdU~8hqAAM=ѫ@5fH
Ӕ S*=?5d0)2-VwEyaԌSs`j8P<)(8>!8%\Qt=&Kҟ<aە'zZq	1X1+\mZWvN ̲_7a8T(spz R:d-X.:5q],
<*Vd).G ^!ۖKlАFAqa
 ZȲ 6uFvωC{&h܉x^MNkʢ$y|# RR|>J<]_:g/w+M*M^3hI);Tu#8gD3c߈Gdljyq@Ȅb|HYDl4wf3	#:o\`3dߣқ1\B
,I Ѓ_PKs  j  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224R1Curve.classVWW=0!"
ZZCPjmV%D 0	t}o_~pC89_lM99yw߽?+.bؤ!dhdٟKR'\Ep3˥U`͔PM-h*ޟ<q4쭠<W
ɂ2F7#bDvam)iRcѴj(
P+bV3>ȷP%HM0T̫yqFXAr1Ly+ymճ,eQzl`p9pyeaO݃"xa=|6E^,8eAaWQ?'=-1#%Xˀъm+Ftm|hXRGRVbXI7X8	D;#x EcH-Gp,HtRX4¡`(Iba7,R}sCnt< h0ud[(v#x$\Vn^v.M8T'¤T()}#b?^\"\[F4"HXY#dj㱇C4a'P37zu33t-)s؃V<3\_rGTnfRa*F4u$nջਈA#`ƪ	8!	CeҔdP6A
;NraX˙	F􋥹̓9+`XVD-;qd]Ea,1%kBL%/,Jc$g*kQ&pNyc	ʔ
GϚA3l]$5x/	xYE~RkjѐTHU׷a"O$SýNt/c]A#M8f2\.hb͕тTKnɫI\P92閣1kH4qH*p(Ao^del<XaAMyhd6/oJup?PQwǆ8wh$)YiDմӥ9MdPĴ@ M%ԮV[5?=o}Ƌ{rdY)wQXPN`ϞbZU=^E3?h|0}+HU^lx44{uJ8,F]eSιYlc2sĶĐMkhyf3>4b ӂ7w
oÙA޶9vл
~4}:s)&pw}uSsG[g
{+6|6C=Zgwն|h-3պ5@u[9kmw
s۟3{iX+~t;.G{u}ﱫd[hn!27s4:]xˤP/V6Fr]娺Z3'v|i9]^=әmxxҜ_=Z77ÒƷwt+Ő?
8s9v/2p\p</9kh
0PKN    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.classWSvE,.H@1NL.pX(EZ2&quZ'N[6/}hNd%}ġ|Z!}9wg~; ;|U(:H0.t,-!0Q()	r|hQC!6bZz\+vrf.ZM^OWY}|^B(~~fT%>Xʥs]LWiyNtI$ϰ1: BjlK*h|HCɀҥ?ى>xJLx6b@cl2wPG؄%zBGT"̘БD ؚGt$\fWFucAh:cLBB9]X)֚U?#(hƇ`=YvzD	-:^`?_.MlN`0ӓNytlߝ[rV6|aU־e5%|Ns˴-
8Z>,k7kEN/bbkf҂:ĜPĒ/a$
Ҩ~^Ǘ_h*:LR@E8k%YXf)mU4kRqAIB1=g6$t6*fiLR;?v
{hUfQB]wp@+9(~u{[aUQ3+C^ұͭFV`;(^I::[T|rM\7DHt$dT͒hk'q"l
q%d9Os6fZ0WPBED[7D3\rrl;4KsGdQ-clt6K$ϱQbQ9=).viX
|]NbJbhЃoېpv>l.Zϸ|K-L7餓=?Az\8d(|,LաN]D:Ȳޢ
'd@04nT/CL7.>ghaAS=Cw5L2=j"Y>5ښlMoV>DOq!xm /%!}r:4D'n;>
Btpؤ	wӍTrY2dk}*Wz&z}w.za߅"IS)c/a}n:^<Hqfrm(9r>#{NlT$]c2c]tRحPu7"+w5/~l"G|%%'eC#Gw'w~kJ*~F@o{@"'s6dL_jz%ah#otcLhsVcJe A!s:ˈbj֘0>`	#X84fD/DLa^d%LN*FIİ [dhXE  
f$ Vj>GXWRtCg#䕃sIxO@ک*?胲'݄NmOwD9~V|;FX7
]&)ndcdJ&Ɔ<2I#yda:1vl	{$"OTr4%v])bipX
16K{HyTS-o3HL~]Sk
I;	s_5O,o\Yl~=#~VZ:)`Fj։RNDEΣV5O$hQ:7ݜk&Z`Xr,~E"?YtAsC9ඡ~-JvY~JW.64|/~&:1T?݂
Mc:(f1tT%~!Ț
ո@MSHp)PK6    PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224R1FieldElement.classWwi$LJI#0M5bm<C4uۤK/@q5$j99=!G4Wv]Ig{߽{wO aA#lSJ)73`;6s3ZfaL,%)ǵ{vVAUbaq٨+kMD+_H&vhh؉6䐫8nv6kF{{^J݃l3N.Vʕm++Z
{/F)
f(v3g]\
bxQ=VFkBi2{ݭ3.g]*9ѣfI0 
"rqmnLLq$4I`WÆKv)94\S0X΄iSL|8K~)<'%pt,JeTt\'~H]kr?&\ 'NqY,w,iqјȅH-9|3]fOb+b
~S
O	bZ9<'4QjKTdSrʹTj
'>)4s04L	@7PQ.q	@E<O^\	L]QJfyͱ
4isQp(_+UHmcΩj$|Nv\͕ge>-|@H72q*m,|_!;xEUwX9|U^7,>sfӳT4؏o
|ߦIۜ̇{9MbFl%UZq?#'YQl'I=/M~=(GNn1Mpq@&;(\]5r猩)	k:aOlf&r)6$@e^ ԹO
L[-@nRj*{8`R1uE3G(>wLdڧ㘎enaTwmt!ʧ-ݩӸT]NOI\2E;:Юc~oc=e^}oM+]ѶB4D4{iVh;QC̓e.z݄baқ7<L')xk8!lm ǦCS~㗭[
;<C@xEM
Zc(>Q|؆DhH0p26>zRuԠ!p}
|d+Fۊz5RZ&>W{5)||=³KMkh0t!LCUK9-|gJ5d*0s
R)Jʿ*݌t)\U,,{x4Tog$AnM#6.7W"B}ojiԥAyɆ9+ۢ]y^a~idN8NZ=ݮ>DUW4)=IyY95d. CKQ5
h !ǔ?짐VJ7tC?!nz1٩c	i];/UڥUuDzz_\Xgxϟ翭Ps=oډ
8&wB9KLh<r ~iג~گܧv3橹AJؙ°pH>uDHq@H;Ihj_+
MI	Aɯ6/CWdFLE]2oi+x*][̓[jjtޘp55PKJi    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224R1Point.classW[[Urܜl@
PWH(զn-ږ*Rn.uQ~_?O?s|̹7TKY33gI lwZ0aHVkG'JDPwLV۳s
EwϬ@.۷pvޱ.v_1>̡G_bhMD._l`Qxphh#[#!8b;}hZd}뎁=$ZW{מx.tXN=_
6Q+tKl5ASzT7)B]+zՍmMY@X^L	l\lg$zp#C~zn)ΖKlVu=}@;p%-lpl@RŚ]p]".vJb7iKfHŎ̓QًL؏W{(hBaM'
x3(lM1GB1!K~خU)haO	OJ<@^>NT՞(C%J@"d~J)BNU/
Y'YPkvQo"}zQYoyl`g4V+yL]'Zpy͓vKz7SxīuMkbrUvGgw9.?;-jAw(ޓxKb5sf캅8g#c=k^^YGG#g8M9.ze͈O*TBJٱdJ@g"rR!].uXkʥW+_$d6/BE7 k(cc+\l"
AcX" I"浪z-қhJsf$"3@q,kϜÍ 4R`"H !
1ifTx	rQ~H~Ĕmt|*x{r	!yە%IJ.!4J*2tftjmU2xh;;U,צ¬-:
W64ڮZUB/aHlR!csH3C7va\{NbZU'3,{u(Jͤ7Imt	"frJ8pcGNl$s=ћ#ّYeҺogtEZ:]Zc$ _$6~u3RU"k0}M#˘AeB0{&.|գB8-sa,WtOjק g|`h}g4 OE=Arm/: >
q&?:s~#*"\5iyh3H)3Fg"U!.>K%U	B t	GnKxY+!I$`ohY# N>ډώ^® 1UWxǆN]Rg%oӚGVYW	jUr`DΣ2Ԡ,.Q/-x1h_%H`a|gXDa!f]"Ow3#ύaWf-)]JWQ~7DODhl[#PK4}{  K  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256K1Curve$1.classT]OA=vKYt((K)- 441$6nwcCË?"]$BJ;{sܙo?ЏU @R!#g;y{2L-sFXv=ui:-"znb`1
	*`.UE
0ļbm릔c9ZT<CXp͏奇!H*ywzLAE42		n8{#լ.3T)dy>[-t_h>V0x*!0jZpL9ㆂv::zO1Cp鐺TIu3gTFÙP|uO7z8VN`:MD^ q)5Ytڮ@md=p]Ij=n<a+1fpv2L-YanC]	Q&L'jf.L S%]Whˡ[4Xz#ӨC4%S͛`M(MTp_7(R@Ѓ^ d>p}{!N8hNdI镴<Ţ9%hu(I)e&ִ~_5&R-4m$]: ψ/3Da`R(%ۤŋrqOMO}b\Hŏ,%͏A'O^vN: Q6Mvm}%Y " PKwQY  j  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256K1Curve.classVSWrWD.
*ZZVCH4
R,K]݀hު/}Q_lM$t'=;?

W0lղਖSYYҍ"#p.;	 x9dPǄ"m6%0T&"aka$"#C	pOѴdIE5:9	53zHӒJbleX'\zT04<ȶШnd%وN1մC@V
/*0+dIs~Y5?]X+b63x87v5P8𐀇El/dꆤ:s(2"A=CxV\v0C(JD쀏EbX.XE#v
%"&1bLNt9?mNEn̨mHW(GC=]]Ȟpwf/{Eta=t&6da8ׄM匤|QMuyR	}.+g ,I+a|#kT;q	&k${c<Gч8ChQԔ1ac[T&Xǋ8wRdgO⤀!nfQS1 ͜[nSxJPBSt$
EAɫ?+$N+kS0J}ñ,R"&8\$'5E=ewI1+qf4SQᖳdN1b{S1n@,uSes"ҏYnyYq^KPo.c Es2ÎUF7"^:}qN	4s.A޾Sw :rFS{dN/٤JMMiYC7VӉYP&c!Ҙ0$l4u\0PP4M+LA@.c(.g]p@>dy8,JBWz4ln)^q_Aj@+v
	UX>Ciݎ&ܽyQKz}SMFjE3	Q
g$]W`]>FbM2*+:l*=mk8y
zh$IoI	
@<Q069humlã@h0ߚ	֘tV.}p ॽ9t\s\7O6Nm5UD,G욉`xڈ]t/{ͽjsZ)r0$$[i
{=Wm 	m@5E'1p>!^kL44{Aؠ
9OZoqnfis|ao_ M<\=NGv]--BpN9jծ{V/t2PWkw}%wP.KZ
_D"P{!-&??|VV$;ȇ|Dtpa7
E&qK\!'eg)rPK<f  q  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256K1Field.classVsVk{`~vFMm< c][ R6$}E1IxA^d&tR'/×!qϹZЩ={s~#}o g!jP8n2YӞMRތqt5!\Nͥ̂⳦3ϛMgKV2id;jlYJSłhzJ
ͻ2V6D
zܧ@VLr2L;Ma-~Q	
Z~4Mr$e UA(\Jhx<Czzٮs6Jc}
#Q([rѺD;L&;Ǉ؊)=dcM[y}x=ezPEa26><@f2ǜ@q"KFl)ءa.<R3VꄕP:MlXU!
)쥷e:Fs$u
 3oKCNj%#S~ \>I_JpG5Z*$5g%Y[L;m30X6Ӱ4yƇ	ٌCviT,f[d-YP1m>ȬM-Y,@2)D?_Rh{ب(p
iGҒU9'҉4Iz6)<Q42Dof[y3Ƴ?Q^EWY9fHJIW[2(I{{.8팚٢.Wps7OHz
7I[siNA1h1)Ǔ!w}TA's2;U0LsiCb[$f
Wc
	U$KB*7.Vfl?ZwRI/N:y{sT83|TVl^|諈C4k%a"^4eZrՊk7ӛzz*D 5~3JZ.!fh]+Xu%ܿCWo1FP|wТ	Mn0$`u6l+a?G
MjNǍ6]YK7 %L@G%lLG݌8BȌ7x=)\&_<jX ^btpN#v/Tɵw:VE06C6hEV~V@8RKeXQ6^U555E)o566F듟yķ+HA㕭UQm-~ﺖk]K%k[R=T˨'Om,Eܗ$FW`$%Ԩj%h,+ sy 
WUP-rG,{K/C*D#R%j	'i3gϢֹR}7>0=76.=3F=#{I7PznbhEگq
h>tȈN
tV*鼲t	F{q}_YY
tX]n^qC|uD_KE{*@}Acmp[ٻB+`vDt|en?иZ'>47ƫGV_P2ɴ^F~Uɖ>ʶ<}A[CQ̓ࡆZIa<V́q ǎ~_PKʹ  
  PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256K1FieldElement.classV[W]2$&DtVfSK
ej*
݆0d3}{/}j_x՞{ R
|g~w=l?g E5P80|zTr9qFSi#3do(kqm=M3>'ΆDHE>/6Y5M*E
!:1-g8㖊ia#wVzN34ufpM\8HAOdUlg#7Og#|Y;3]d!1<FijN6/kz6.i;DwYEܷQR
C]*9.p?Gcφ@REmk`҃KRJsO,911æPĘzΐe0<Lv 	i(сc-}#2rQ ],CoXywJĺ8zI\̊?(:.3I&xCT)Oi3,9]Ǔ
F<?qN\C@crfT"p<+Zv<yA҄8*P]qyu CXķJH一{cfFc"dEK,8;S=Irc3*l;;Ue,l[wL<Qf^%̩縌9>۰rOT|rTWMkxK"/ˎw'n0hO`z>=O9(2^uʔr9I\
ְyX#MĦa&YSD @lYř]UAUVpVͷF\
Kg-˰{
m	;!PKxFk#}
}JOI^kr,R7~H;Dnb+Im^[=$S#~K|;t@Jlo'ˌV.l'+{"Xd9@L_cW/37T(Q:چ<F?R|m2U:w<Bu'g@QZZ+辅h"fO]OK[#iK
ZA!9S[jZ:6շߐ>t;UiւwuiiFOT]6d6M A4?=Mj$JIZ@dT-T	mRFՂ'YJfBZ0֤$NBXZ YJrVird)Z8õZR%D4"	G2Q-ۦE%U
LDxRZ]SP'E)ԉr'n䀹TևK^A*5B7D[5*˻Uvԝqdl-!"Y/texy"lRV0G:>S|ϕ?PKQxLq    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256K1Point.classWWSG
Y˄EdKJk\*Rlq"BhH0yo~ zo{(#%o{oek 5KHK'ǋB\&]vvTڙ3og@pGsv	`_)7gy{.8W<ޛzHŇ@XJ)Nu3{߬cnBDuu'lob"W,,޹jAbrQ2hrg/y܂BZ*ih:3WvTiK<
&yvO[7!(0gVqmpB">a$(9D[8W1Y7lEql9_H	'E<DW|~*b;v)O5LC2%;gsl!$}Z\F\y`hͳQهHġm
Z|.Qqcy%T=SS=ʈ^,Wa[xAF	6W>n8YqяE/IżR{\TW{U"q.'(6Fvd%lvG2Bb9S:St&GKvJ")rdg+{K!=4כ-Iyj<ّ"37 M*k[5/pZ,7)h_(J܄sdzOΡ7yz]x w<U?a9%Me3Jػ98MPd3n7@bSY
fm'x`zz$=S_Ay8_B.Muڥ=k?=4HvmZCLtF5X鴓*Q_紪躪>EKjF,ɹ<bD$ȏy끃+xOtƔDD=&oLH,~;%W2[E
\T
p	}*jPqA$mjgR9s%kkfѸ!KحjSMd&9L&RR1s;%z]09LEuEEU^bI)br٘-B)
XFf&zC'cT.ZZMoCS1=7Z+ZeDdIU؛u~ۢuѢXK[b(\&QjNsuU/ܜ}
X1w|a৥_**n=
t&B
NeUG#۫%QX${))I>]:*Iy"iz8hHY*՛
V<d0MA-WkJ.*c9,6x*)F\G#АKrmbZZ=SWr	1vUm&xT;|vb+t$ꑇawwQr9h	O>uD"f= m{ratٴ&Q@r
Sߦ`bʗ\[.ڷ\^B;"
4=?/PKH_g  &  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256R1Curve$1.classT]OA=vKY`
*K)- 41
$M
Hdw1}DhoD.!̽sg̷ߟ*DU c賝켽bzȖW
#k]κ4don'⬊eXGB_)"KUQZW,ݔr9P42dNx8z7m/,?
ĆJV{;fhyT\D3C#G81[HPYT\3i,Ag+
I0MQ@+Z\g)_
TpK޳k̐!\:n:4UzZG;UP*2EyWSq`*8{P<)6&0^p\&.=A̠'n4	CʹǍ1\c;uÖanZs@E1͟n~va R:`Yɛu65QM,
<2d(.K3?^"ۘڂBujuiDZ '|Gww"q$hGsR4''ML%uiAk}EsJRK''
PRR$c/'״}ߐ
&oSmHI{TuLA)џ_hbl?P2%ۢŋrqOMO}b\Hɇŏ,. GcN(;ǝ۸4B}ow+ѥ!% xPKڋ'  j  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256R1Curve.classVWW=0!"
nUKkh dH4ER+a'p^jCpJsQ73(=HzNOw~wӯ ¸*anz^S.(r̪qJ0.IycR"xZ
+sR-H_%*lP4HćN]E'2jv$UUFD,1:#O6w,NjVV`JaEs!+fb|OF˘O0,_R#pXhUXˍZ0/eVǒd~Z뱁FvQН<(H^<°?&{57X/ɇ&Quxa"f&T5EQ\zAQg42I‘ttG`̇Α`G	h@#ÊQC
CP.;ED+3,-pTmh(BX3nEbR$5IR8kJDB1)BΖHӮ׿Kzh]"HD$vF[[mXZdJK8eѣ{A#Lټ;+P%>J5(D*:	&.?k#x]K昵^RF/Xɋp)֥E8&_S8^[KV>yd_J.wㄈA$`	SpZ
y*#pOP&]r,A~50"AqN!+buPe.3=s9	VLI!k#8VSޠ9gmw؆tc3E) "u&GZ3l_"x/	xYe~XZΔ53GUCZs'ǺI}t/g]EMnZ5duMuhBr	0sVd4$u!gd	Ҙ2el<qTr(A^dgT"XaCMyd6/ob5p?P\BwY(v{C@?ގ$+cjJUtl~^Qm81-H
v,@[z_qcx^Ⲣ\ݲ:JݣdTLjjHY9S|W4w|@xq0ʋ
7M\A{tu
DP5`lӨ	ͳ2~;!ihf1}4b7 ˂7w
zAv8vҳ5~}X*55KnM=l%&%.ghj,5shAuòv̊WC#>GS
MOa1|OU9moϜKwrSw3o"图ކ[v~Cmj՞Y<}Ter90:T{\9cb!aYnhC0Vz5Y l\$/)|mKP
xI݂놣;~]ASPK,    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256R1Field.classWsW?]iWZN+˖^VmbqG&qmu-mlJ8nCB
|80΀^a/<✫Li2{u?2>PuLC@v_/sk@`X.
c+!0 CȄ0HTJ[rW:VPP 8v1Kǳ:8`;'knJ9'g/R!L}
(K
.fə	m]G]l3~!(n,eז+
QOA`Ha
"CP 4m;j6ɨ	mu ?ThɅ06U-T+W:,S&LZ-KڄK/gˮTu~u[98J|ҋ^p3!Rm/OW6E'CZ&&fE7N_rة֜Zn9ip
WU6&=Ƅgi'JD5{΄i칪S;LgLQ++dy9(.8v&^p^&\/bBE:բEV:gy@5
<e_5Zߗ[,xKENE^^`.SeLpFɩՖ7xY7atcD^6dS/@D#9%f+2\{Ϋ\3aJ
u*E	7a?o=7MEU\"^){RR[ʠ"S5ltds.n_]k%|6OHȕ]
^$ʵVū-Zv
");x:<""h<:+^YUN-
bY5%1"a:!
P0@(
7@p
A]sR}T9j'S
g'}oA׀v@GU`:>!EEo{D"
TDMIƾįqƐov1= ~NKitOAf$gb_RK߰gOwniIߣAY&| qDrI.=iͻЇh:z"vFaF2րOwŧ/5i?KA4$!s2'iu&ƌ@ߠ=}ǧkkP1ݼ==Xz{C},^f
?c''0eȶ7~/i> oA&D1Zz1;.cMݙ@~xXSՔTр/UvHD:ʮ	ӞKo5ݱRl2PA_lfL˷llIf!)l#EfC6땢i6%DJ\xfYXs2eX!B3Q˴<a+fs2`ftրc%Mve^5, n_B,nń޿[homq+%I`7H(܊$hd	ڛ
6#۳k "M woZEY_5k;,l"N\RMlH8L(4O{b;^3;&ht."ݮ2kG}V4?p 
Y;pk@578H`O%hA4]ic*9+`)o^A)aڏ	I)T*!X{xa<;0;6!}+v<wq@~7
_Zc}z	C#G ?c$?pz}CƷsq,hxJT΢쯐ˁ4gw,o,nRm7IA4{|
{pC|H"B+D!k ^aƻ/w^ˏW@͝2b
o/6<aw
~#D#$1$CI^ŷau\PK    PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256R1FieldElement.classVYWg~d$qukk0J]ؖE,*
aF' ~=W
vzN^_ؾd|
W e>eH
h`*XthjW4vΫLkAꝶK՜Y;33aV
CEu^-+s9nbɄzQpZv
M1:p^1SClvǚ!xm|"#c3NP\:c<V(
,h|f[mQmImPjz&lw9nEwMFxpMCU/OzqNxHM\`MeH )#m]!TRx,VD'Eħ2Iq(ۣ&;£qOR68pQЍS7"RW; {s"УW24;C93"
aȨf)s!R+><)*uݭS
N`$49 +Q0*T bfh8qEl+xZag]&bkRe")8'
*g{`5p^ lZyAT
. GU0E~+tqjM"e՞/dɍYɰľͰ>jHZz.u3={Ͼu:O ㊂xmnjesbb)K#^j>K/egVL`hsTҰ:;Nܽ&)˼CSrsD͓tsܻe1*CkkF2ݐu"0(=g9D8̰WoF.Q~G5{i(V6e|ΰ{NﾆN꣗1$n4[@WUZ:K`?ќ+4~@-lmlh-ߒ]5/Ɉ\
ͤѨ➬nJ(AEF5LL]%Y!*׫M@K8 }YO hPԍ7j+>|S&=PÍޡ[S4nۈLt,aڽԐ+UBFSk12H\)^UӓjRw%:uDϮՙQM
X	UJU.K[:D=7:ɛ%<;LzFꤸt3hƤNw$YdiYD!S=\-bR	3tR,ivQƇ%GWd)i1"7/p`nHAUo=\nE%'aaų6RS^T\
4BPKq~C    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256R1Point.classWSSG]rlHZ[Bb5>*Rl*hE
E!F|a/~b3Rg`oߤQ#&w=g.o ؄Lc@§!U*+U3L.Xݓ{v(]d]S|[ż]tb2)krV!7P&rCha5sGlb&+$Y=znP97a"$P1#R9G[\qhX4xï@3Z4`qwO	U܍&&Ўt>kiX|OEF~վ xiNkXy^$4lY'Rj3s#nz%PuΞ&
ug++'#>&86;G]Bt%[6x[Lwشp*[25p֠':GO`'AxR`iW <{4-}v{b߽Z U9Y͔ <؍ gZS"o5i:x		+Gr'/&(7Lr5H{Q+ehh0P '`q(cӚ2Β=1\Z>LRe+WZ{9uħZlY3DjK}<X8bsPt;\~g^xM7qoxS-}YfQ*qμMe
ǻHNg-2Q|$p7Ǵ'ʖ5*&q+S3
g_+qw?8oTz)G^egBCԞ؛ΌhB<PR*`hJ"ռu) 
ߒԛLuv·Iעd/&[H}c;vmB6z或'2Yeq^SWuɢiljq/Zgu<':QImZ'.$t࣡OF3^HM~#-W4g$W+>n'C4HQIރRhT엋Y-kAzl:7MC֧m 6lt8EdlCT3
De3+sx1Vu25-j:FK~(-ImQ25.)aY
,Y?bzl86%UC(8[kuFTK~R^[ؾ-V*mc
7K1=mCvf\\%[e<*2ʈ0
H:n?"ulskhծut;~}Hv%~@kUI@k-=n-m>K[^T'n1~o/?]0I6&un!/QaP&CJUI"9ޘ2@EP$^^W&dB=>F8&08PإRK#nPHFm\y3rUs"Zd"ZsgƥdXF\F=pq70"9GpC?ovbGv~8{9#&jh[B7k4u]y|ҷ1EȁQmM.Qs2oV7&99A$h|utYPK"    PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP384R1Curve$1.classNAv,UCPA P4 0$^0,#m\vuwȅ11x^`"B4|I@"49ߜsf
 nU!IC,fexip3Ev{0ƲKY3/;EG/XW<
q*`)UE
jb^vCCgq!sĝysm!LllQ=9y\PШ"Z/I^#Y/$8EE+.1TSSv٢^,7V(hg:U0f%ayq>yu⚂*t$n>qn¥Pzx9޻TPFdbVVA2O@<$T2Hy{Md/Lq/	O8.]E͔WDPt#3HN"adE,ԘCݘe[C*AQ3O]p2!Ar,K8ypNC&i!ЌLYdh]zzT&X{Jkթ-}롯&
c
j}z̗M}`C[b8Cn#1ќɉ`:r󪴠bќP4u(CP2ثc:?w?֤5:S-4o ]4  73>
7kjI.Qxz:X@@(I#"pd]z$YmpٷiFazq3PKU  p  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP384R1Curve.classW{U&aB@Ji&SK:H@Ttҙ:}Wy@=;3*49_s=sOtsu[Lk2:fV픦VEYXz! __ms:ZςMHɡ#.H&Q*0DFk(ҸRҧuFDf:}ɼa듺(b3to홱maY4Kak
;&D׎Yˎ˲;y[El&`јΞbH.-bIwz1l^h=J/GC؊[*1rXfV9K? |YfSy Tc2ʉdoh_#G:CNlgX3aWe,++J;EDE2,dqu_"2i%P$;է$rR<IlRrKbD,%IXBJwgTw*#eL\!l<#u˒&9QrܾH7D+SdV咉t<uKLW/2tF9֓ȲI';xL@q>YT'x~{EdfNP'"PHf`r)CxonahƤ=aYQ,,`7wy4　a`
Th=8(pH($`fF	8"cme'{TRj!*<ss=FLR[uaE15\RD/-;ik4KWm*|zDaqBJ"-7z=*5}Y!g׵d ܡ 2S"Ns!W@dsspa2mxJ"4ʶje*=T-W燬D<̛&j2uz2\+ ŅT+33e)JT)~i,تv|@ٯHj/ъܴsBQ(k\)_ӽW\c*]ʴ7 Vmt#,ڔ^P'~<^5i+:G-Einޭ1WiZV</GJqUr#GŝZyża\Re.tu.IOS5oڈgY^lxA%ݦ<Ñhe4DGZ"<_KUbl1R.mR$9	̡k@q#w`x	/{wһ-r}8&yyg#WwSUɯmvڽyFH>GMetcgxcvʉWvU<
ޢt<Vyx\<soR~ygHh[8>K|/\4Ch[K(o1k7ـҵkgٗt#V<.\jF3+d"~=c
tn_ɃDWT䟸,
.h>WV^ImKlGA<>.	B
|_{|F	@
48PK}Z  [  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP384R1Field.classW[Wޣi 2W"F4`l%% 
 GH4M:n$~ˋVV[Eߺ҇8t3gFWg}O eЀ:hQ_oٙ]ZdW;9WDTp'PSËD!	Zf\+6sv-:
]TۙK6ʪv>&>3:8yjU?KO\,8|3h6yBfȔD=k@3|@taR &ϔn-pwz6K}8bHA>P=EHf£),iTqBFj1]X)ΚSQ;53+<.PwI"ҫ(Kk/1`ª{|4]@1߷xu`p&2Ʃ#r8RuYFOD,)ƴUNk.2xT%WtFHa:'_9I_[31Y,T:?dprPE o`	@)fQRp7)j]ʗ78%;:U6M5;]g{-3v-Z.PxQ~_&K}MAjua.Ar)g[9N
#NDty`P>ެn0I߄ӧyw0oi۔PH7otRʥkEXC'pgF%P!]"+qno,+E:.^Dxl	WRx]u*-<-[Qs,##]YgT0
ϯs"pw)Ef(zŭTߚ3.PF'rEQ` HD&(6B
	G8Z"߁80?cؾ++؇9İN3`3+=
dG9FC@;g#e$}lu}d?$8O4uY'[<'EC'>
	#xCj? /0|kӁ&c5LTrچYsxO3g8DK?tQP>! {lӄm)K}-hcH?=0:ڐ됴-BtЯr%!S+	tgngăhnn-S_䧠)g1 ]Qxb\Ƕ17|&$IpW\UѻS|4'q1Ĭ	yIqf: ?it\Q*g۰; u)< :AqҹBdu).JO (w-Gw,4arx?$-ސ[yCӰ
gr:,f&L%LdXLq6KALCjneA|Glj5Bp1M	7B"b:f"݃$m4	GF\TTfv	P}&TK0G)kfa{th lulX]HxlȨPgcy8cIBcdna
g¬`86Ll{*&IJPkkzÇHeq+\즊ztK*~
˚dZک,K2%
m(wURP:%i?K	: M<^aÊU끲#£-ѓƷ_I%[zfů-J'w~{^uV5	T(_W!%=%,!"^>#!HվKJAHߣ
"{>k[~̎~1\ւe~p]"rZ~@7csW69TYV25
)GDAScY
e55o:"ש55M_WH5&	!Fq죴#*I\#q4Qv4osΟbJJڨiCԘtnێa#$J
mͳzTOfyyPKd-  l  PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP384R1FieldElement.classUWWd	qҚV,BMeQTR0I3=}Ѿ}nS҇M=߽3){绿w}_ a!) pd3r1S-2՞hLOwS=VЊI6՜;l׋4?	#a0_VTGIm-D|\l
"(#`NiCl٥BƢ퐖;ss[24vg7^40JԆKDVV=PL0jt2g>z6|jfH>|d6je㽓a{?dz1c2v+؃Kʚa\2K!߶")x)l	$e ͰsuLjf@sC M8쌂8DG5`<;M#
n
5.yB8Nfw\c|<MM
ΠإmVw**ȿcCA'/˚Iӊy{Ǻ[IP1S<D,)#مFYHhA{]P0Uh.<ʆ\8yO_Pp^-R)"kLE/rQ߽ĕ^dY0 rCvHaJ%yLSY2)\VpG'4Zݥ)Sx
ʶnd:MS]8@ٹ~='FYƜݳmZ1G~VF eJ㯼rTc
ux5J<dLЙcP;d+̰:ihbQ~l%4KQBPĮ˭[үj8޷ΑݖX7!/>5"+Y-yԨ
kŨ$O=g%[,jfZfa:"En[}|O
$>hdBWm ~kI.@}Pwvw8Z[_
~¾=ݣ|2"2Uj{ifFdT 54R\\
aKU10\W8$ľ
,kc{7Ǥ!KB/V
 7R}ⶫ:r1_w6p{(>v︀$%OkS?%"Tuі%zO]M`	^YNH-#[J{U^ux9C-5JA]Ix<jJph_T![PM[B߀xJp`*M^_He"I1)-61IbRb!MXP$

Q0ĥ30ӱ@EwXE/ʄBN{t'Ve=Y*D)"xŤ
X)ԅv[ F7=֊17:8#7'K%A@ZL-n]ozXW-D21*Db`ם
IXtQnk	?֛dAsPK?  ~  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP384R1Point.classW[WSGdB ,jVjiRQVC8HjH09KjԗkUW{Vħ&9g،,c+@T>=RsrيS'xw/:vTr64ߞ/杧K,W-Oۖ؛{
]tV.ypA?/1xhMS>W8
v-oP5`!,Pi56/C}Ry,ٹRLaae<4ŀx/$;[Xe``vڱڀ9-Sxk
(Boջ$u1y+3qJ _2xJ<!6Κ6a->)[. mnbSx@땳d\:!>rrBv	fE;H3졄X`5/P@gl5[&~r~8H(d@rj"/fJuDZ8FfvDLC6q\v9Qk^x'`>d&kd1b"'0ô[dJڍ`NcRώ.9G(^+YKRU3(Pe{72:ƻSӱU+Y2G'{;<TUڄs:V n {umas^gI)ަzUcy U.ֿ|d	\mmOSM)eo }BK|Ee^{Ӈ@
+v9ھ 3G#/5GP
U*/r_![4ܱtǟ =tG5K_MЕh&Gb	靃e]v0n6RD8D
l%׫)h/=EL*1z=?uD;f$ŌnfaL{f\ G&ciDD&ҜH<2&黎LTĮbgbҤIk{՘Qy_4
x4׳Fet;e}IXI[jKFxG;#z$2>CzL1٬<=85g(-ʯVMHIhWጤazTvBq,`<L:e&2d\ŁPRR	j%jU(J)M+J1Ίm6Weos}
Kaj#3.J9Qh
q	Q	ibD]?a@~;4-xp[4㽍оInKȿ~@kWrQJ̀+i/y,^~S&..bPpbRcel4E<t2B׬Ȅaxɰ4+(Y1Ajˠ	<xCԓX~~G͙5ZY4
E\-ށnԝQW)4g֕f5cN15>E
t-b5uF_ZFdEdlp	Ko!qrp?zF=bX;1u&1aZ)ZN!x@&>ESnrB0fZ[SKxQ?{oUn\N9CZ[Q|uME.+?PKK    PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP521R1Curve$1.classT]OA=v,EWPAPT45i"BqD1>&"D>s$Q%DHis'3w=s FqDH*dFw17,3{%r5Wr̙KrMg95:<4=TXr!)z-a3Rؤq``-UE+1Jws<
	m*N$C@[r/8Σdb׫vտ5qi*Π\}:k"dKu8s-)jaKR縂W$	ۏ=NnԇK
UH2]a87MQ)Ii#Y>{Ta8VWd/haƩ5kP<$T2Hg&_qkGdQ3]
+hHZg|n>"VVǘ.mZWU\g͊?`8Tz R8d-X844QM@:Ch
ЎL	d/G_"{2յʬCI
%k/$0Lc  G	~C>'n4/Eyi]|)-h+X4芖x<ȒK2c_NfiU*4yJg6й
(m
1 OFc[Iv	a
S{	wj\a˦uy<
{k!#lD$̖/?MD'B#BD-*,N p PKg.  v  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP521R1Curve.classW[FQR$licZ]!XԺ%B#Q[&Mwi׮/|HxvGHؓ?t; x[@1wێu2[^NrڶҺkv	! ΐّj<w%ݢǚmgiٗ_ӵpl5DFn,
{vq"!bD<53VKUǳx^}80q[^Ӵ<cTݩ{gJ>X茀C{x	aNVw]3p8#ȍƐYĎf8 'il|җxL"F3i۱J?m .5GY&BtҜ,Ω	q$%M:$ȹ)c8p`Cy|S?)"
d82<R^VY]U
rI5,JF)g䲤JL\UEQrȪ%5WR7dI|AVJ^ֵd\g4IdUUV
TV2Z6gȺF%WPR֐$nCNmɓr^.JRV52R(EC$9W2RW$DhbYWՂe]BNR8.EIZbnρzf6"
ό>8\E.R?q@'K*ϓx<I9gD|	=uove*4&o<gi?ƳϽq
e<hMW%RS8/b_PwQt.ࢀK"L3?XTӼ>mRMP_`,Q9"':e"qƑ]@C
YV6=:c(zhh滔D6Mg]ax4un9M{_Lbt(&E=l7<]·|Gu{S޻N3EE7uuެRэ.jSSXo1)F'cH<BZU;ڵg֕Is9 QJ1C+
wE"m8Ě1].:q[{h.|W;}L6<ֲ]3	׽ފT#@uNLE`P#cxc-sx^e٭ֈ$~"9{ӹxjXu5V˦Kܛib>Y`xKs KF).[Ϧ:Szt6zS8:"ۈِVh(_Ru>CAtvMQ$ݻ>xڀؗE?Oý`>oڒ3L@Q2(2 鹃ٱ
LYA5vu鵐i2=3[p~_\}!X}n-	_"M<~{c$NF#X==cG/eN
}Cm16뱾nGljx(w]Wo'4"#هz6qer&\$_8^ۂ h@Vɗ:r_{=v/Sj!nM?HV7PKKO    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP521R1Field.classV[wU4N(&"46PTzF)P(L
LŊU~͵\^|]K\,?¿Z>L\M̜3goog'/ yMP}xѬ@h\6REÚNe.9[A@*C
xx~|
P+SS[hf
{&U6d`<3)?Z>̥rՊ]MU9s`	N2i2álhF/+a:M"(X9!.E_Vv-تB4.Lg,ۜ6
"1IpMg=m۱CY.5p$KT *3+] FՑKGR9R"7f%3Ol>.j%h@/PiHC80;W\q_<)MWsd70 0}srFf78;(0P+թ Gi2b\ղy°Y2mV4e	YD.SFp`+_05fVER1,NIqN[eqxAAhu)p!ȅt8#0ɠ^RXW^x	(_Z9]**Sۨ}䂜|jM6Ry3iQPFpjK>f<}=lZdg%9Q4ӓ.3|@C2,#ETl)e+r>yҚ-Yh>::T*aFjLP)O
#ܘ1Uy3Q=1䡾LuTAL6Z8iRrHwɬ=W8wʸ.$rlp?W
|LJlvڄMܡ
E3W_0{?A
P?M9'ִд:C
6&6kZ{aXI
m-׆˲oh.z
SP0P
3CD	C-)!vI,96® =.}x|ᆹc>d|kv1g1-.e$:B-Μ-N;u0H"ڽ4pIGĳ\[xږߺA7(_T eL8uvO]5<рvsO{8*Q0eCρӷ"	9[l
jw#D 'kGNkxX<̪{krrơ0*
7\RYbqHxBE4-NQbQ-Hڭ+q~뫅~\aE}|ࠟsJ}%Drqz6.|b$WlwvSO*>Rw
ۮfڜk!>r6MLGXR1וWВ­Wy0>v9޶_? čӠN:6PF+=5v">u)[#%Yb):7cx؜w$2[=	¯zfλ\$UK+K|M	9lZF]K?>s۸)C&ڔ奫.]~4h<4C5<B<uHPKAp    PK    A             S   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP521R1FieldElement.classU[[W]'2!" xKk.`jb[rQVHoF' ؋۳O&҇~L&R/grZ{gx P8b)عTPE]s\S;zjp`)retwh!tҰ`,~10UD863\r~#\6Q#g%](6hhB35E-S=ўݫb`Z+k؊Vzl1Q`hUlc-KMS4e]̺F
c;C|c^3ðh4;.u
;޻ɽmX^t˱v(5a^Ւoόw q<C  $G'v_]Kj{H
X:^f8gJ$t(ΤSr	#rp,!gx
n!#2t܋t'[X^71OMNqI[g
wXX9wFj=qdFmOCɓ:#7Vك9b*$4UϠ*=N15<qMט52L#qk\!82ޔ3W$ʩ9^<5BIΠMs:VLIr3R)\Uayjʝ:k>~لAzp`
Ezv^m'uF?e:1/&-P6pCZS
㮦_f'){na+irClp/GmvT\]*ԸqP
^߽
#MT D6)8sʻ%$ȴ^:DO.i9pT|ppEPKz8@ 녞yѸXkAיXK=_!a=Gds2vHGw#QJA;NQ;TBgjzq5D<\at
#cE?@	|̑ژ
*&c%"XQ+7PK]!x^	tU+~xl0+[EJaq$ 4tY"JCg	\P%Y=^	iIH"m,D6;wKe
g3Q|vwG&{a|-*]`BB}su{Fx	%Ph/u+4FvmDe.Ddwl'T|
ShL|:e)wP\26o6L3Uw9+<w^zCVn,5]tI*avߣҴ>1OR7PK2j&F  u  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP521R1Point.classW[w[Gƺht-KhKdc6(mibbpRSpc[D\)\RpYf.ً.X<?!=s
uZ{fgϞo3,%B͵ɕF^Y.^͙(yNy|ZN^Xqfl
֫[C[!fNrl8uSr=*%ǈBL`56&]RO9a#.@R xVWugihVhr{JK=Xd;[_)ȝfC!caHфH@۪tH<"޷ښݍIBNܱv۞'K79M$Gi	K~z>)qkΖK<3=/=~J8g<^	1=#QI<fikJɣ/7GILP}D糼hAx0+y|ׁҜsRI\%WݬIc><mmCW(%Ulcb-\ά=>)cNp&'W87 &Q JBY`eam^u/Rv^i:Vٙzxu׫3,<\x}wso	XNJmܔxc{MYn82ɫ̡'#+x]*x˃NH|'x[
n&:V#>S7MrH	mtMgoqΚ.tB"\qRy] @biX\CQ}xZ.sNumkhn٠f])!Ur^wӵ!tY{ G19i1@z܅e0A'|(!E
I.v4T0
4M=
FShcN'z|r|Bb㬄Hd%LCS)VBERX,l#bFH#j㉳Lb*Ifz,E-R=̨4L%gNus+Պt&	v٫,*^S6j5
m	T{24Rjܷ,iLquV4Հ*ɚydqj3mVZ}c*/(踵b_5A9eC~,oLIlf8f\&?90;Vjx8tWJ
]Tv4IϿ D%$-%c|%cF6p6%x1<|}#`[OJ3M+_Ay].s~\wh]%ITGȰ leDd\'SYVTUim.2-)3iȄQüVQM*Lf1){׮P9F48AC=ԯ8S3U~܈27(:quyIS%} Kr-ז-S:=)duä 1gTB%}0omvA
Re0 wD!Mɋ79`%"1GF_v$ׂ_u	hF-ّq):?&4]j=QMf|owc^|ѷ`:[9Azxc7\ioM$d\+wz9}0?PK{p5  v  PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113Field.class}UwUG2yM҄/!P@EU(*tӤr+pƅQܸ_`9;N9yw~7 0e<D[
c~p re@fPal-k+yز*FɺkYxVY/sBްKc$2';\!a	=pZO -VžrBkAT=[ܮFJ̬Pҟz;kdJq(#hgornk;SJ6bpTתYg+ N[Tp2897R0
	`]L>ooXŊSޮNhtyap	tAFUWr'
1lVuf0Rum13, ܞLI02]cʛMI8@ZH\{YXݰb30L+\8RL>EX۾m&Ɩθ>q8ϳcp3\,+Vl6iMrqL|#ksܴK%+'f%k5oK`qE1Wck*=7_!tռ6V8ǻ
?2p#GrۏuAQ@] ܀QWGi$|3)^
Gn~ރ)A] NDC;L@HX'rcA'.P]`ihJ&|{JiJʎ{gm<tg5	!e[8p0;m Ï|]O/>ŕA'> XE! 4!99

RVi.a	S#F	uN͙
ƛjG.
(g9M3&Yܯdփv:ǳ^Aª =S	0_U_k4L^MqIQcHjQO!Z$*)뾘*7TY	Ԩ*oz_
$62btn*YÍ^:屄yH<pRAb򈿲bS >4gPVl~Eyc껜vϛ}D+>.;G9Gs#noPRƓ@_Evr>Xgw<
D;B\"}E4>	P%< n8TJ
*Y
U)|M
2P%5Ј26oh݈6pP
aFP{_25RkmBQFI	E'ID&Rw{|\_`aj||A0[8q#	)~MrdƝ6	y~<!LYH0rj"4	qC"~NXkVKPP{T$Se*)?
	}L`~7UU.U
QeTb[*TvWÆ<$?_4ckkPKm2,  d
  PK    A             Q   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113FieldElement.classWsemslBO$ JR[Mi҂UtlӅMnJ"}x_gD(y7!vF'3y{s毿|@\2x%X"&gij,X15T=գ5kmJ$-YHpO_Fa
3ʴRrXKǳV
R1t6U\e-:'4_ͦ	꺒M⺮Hy=3IurY%iVڤeiRM9iHM*<4r%4YMw7 (c#&lsɌ$Lږ;ven*<Ghb؊m֛%AP5v/KhZܞ
*V[~	*wwh!EY3fm'<<e2ĸ̧ۻ?lch.nq\oq>c؏/OB'/]G)R8 ?MuK;W{zyL^I}{}!>	cz<fR$cagހ8`W*5#1gbDX
NxFhJWiU6jaפ4i;s**>ˠ !\*vJ1<ӚfF]
RQǝ18ˠsMӹY&i\Isq,<tS%%|W Mf9N8T /ࢌ.ᲄw[2e$J9ѝK1ǛK'e\=d)ɳ䰒9OԲQI9E}luXXI%aCxSiղ* ˯2ԐvP>3/HRpd@˖7Mk<|o56u	VQiZwD%pquPM+ҳ-G.V:ν*9͊h⌚x6ݺb*ZoB/~n+=x__ph蟨CFKuw[h--+]ddz6I@;qӑPlT*^Z%_Gl)yN ^_
 (!"#9\_
=ܮ!jqKo-),wb@v;w*5SNLt)
au3%gۏ--콍H-t8&bDhm%k$~[9<ZN$v9ޕhe7}xZ-xAKQup񶊍\_}AP<//	H_??7<Qa)ckE"|2!!"[23@)@(tXN){Sveca]޲-<N6QKUlfdR=SIĔv:7Wj늩8S:t_nV?-/q<]]Dwrdח}/lID#7qE@<9^~D-vfN7>_*9yNpeiO+Ӵ~
PKLc  I  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R1Curve$1.classT]OA=vKY
U*m),(i0i֘|`XFڰ5F_4_|?OD."!;{gܯ>}0+
!@R!#0dڜdujܭhB%ǵjCӲrs%{Y$s270XCh@[w!B3%oKUф#Rur1b㨂c*Zз/ĵ9ǵN&-kqᝀLdjVݫTnqBA80?np77p!ۂ"? 3%֡404{VtRL)sLA!^!jtc9O2Er
Uf81¡CcReΘGEG=nGےNՍSc8
(_EOx5Oŧ[槹kCdA]kBX)_ .'LݰV1
TpWD?܄"©Ev#tՈS	^Ro-5ڑi4yL:XwJg
4}o00@o(Yfރ_0bh{0>"1EF8/rw[	4|r$GQ
}j#O_L]gwVWַIZin}0g'mQ! O#?qBbAܨ	pk\+|Ww֧g5b$І4	O
l;t7&Nygg=%Ȭچp]Y B~PKv.  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R1Curve.classV[WW\TZZBI	"XH[!	~
m_PԊJյ}&EbZ]93{og|F
Q0ҋyuYU3s.!YEN7\"0DWχzMkX$>40KR0ٛL+iPɬsڼ7{|
Q.f84ЭSYPT3gpn;䢞͛>a/ǰa_	j|4؏l~^ŶpMYTJ}TfD"zrԙ.INt$d-83"- f6>ЀvAg,dUaȲS!N&|h³<έ<j/0#q~3}1V^[?	TWՠ6d`
C;=8mEJNr]FX, BX:\{XD>A;	$YJw$!"N^^Ngp*}Qf`s"^6<>C8O~2d x<!/18R;!a 繲!n̍^R#/VѾQ7"pju¬f*KR;)"22jA&x/(KaŌDW1x)+92<7al'k3<-pxq97EyiV*=oJ4GeǓ_N^FFFi\*rPǹN3=Z+2z4g󊩥
S%S+d1m*2J9MgW4wRZ,rT,;j RS3)*ofT.kX1ic4Ӓ#W:$)꜖Vf!]^,t_Tڤ&:	>EU5hBw%  8ے終SCt1>jBG?
{"Bܠ}-EotFX7L5YEC>2ރqx
US!-V6 ݫx!XZE]k,
0`!YY|ǒ`(bі8Mk
MxZ	%KoMe{o%먿qVLH⊽ȴano"?Vj<zj"(-tj
nm=6g>wmkeU2'l6[-~X>y+^M-9O݂#t]oqpj~b>B!rp-[.ݟC[5hw6R5P's|lBJ=8J>f%YsO=\$jG_
^PK[6  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R1Point.classVYsF b !Nb;+Ҷ,ѤdVD9 `IC.)Kr_%UaR)*䷤H13Pt*UlO=}|zx	q81	۝VV
wY
MsmLj-n
⵼5+g7: ymnmW<vO/>soH
L~m)/?nFJ"au78Kv.P*;ݏx.b-/QQy^yxO	؞ZJ%)lcOĳ<MPyex^N1Xi8DqLb$޸,KT#}ɃW  q7-%/J|MսMrNH|S$)E7/D/qxEUMx"֌}ZboV	[w2=fN8ı U9`$3{eKImi,0?0F/- `[*ZoK\ǂ^Mg*KVӬ6.{GF6KI|S[=^fWY:بv\t]eQ;zӼ]	,4ъ-q7(ԃrnAP]G.	߭nVio}ng6kvsoNTnJƆӮoԈ/HߑSC6$d{|?>Om&K?z}l@57ۮLgnP]H]{K+ի
1;{`}Kֶj@BjF]'ӟ,~F$&K}?GBQq6k}čN?ǛΓ!;U1م}dV
Uý:W6D>DU4]L;QbT*<^liGdcq%v.rx*8_m ;/-V"ۗ]̐dG!<6҄,\̥3r£H;5LnonDsN
sz&VxN,iuH眄
TԱUI死+E$ %+NJŜt^RE M$)#jDW%rfeK:IT|'7
*
@;v]\OgTƀs%Uk]x\
h''+Ty^0mZ_dy%y'9<ȫ-46̫N"Uw0¦*1$_6QUpa&OFՈ^o!e%8Θzu88N_"K<D8sfݥmыĀ^W͠7m^>K͑;<L{&bkd	sEK"N܃ ,BF$8qJ8kZg.
eq)\l*)~qٌ46cCje2_6StPIFNĤJ%LAi2J
]>#/%󲍑P͹5q?Ql<12$]4懻HcfRʆ\5%8śPP(IQso;i=fBJY]31/L0nzF0)bxEp5K]dؖFΚ7FṾY3 *@困;5Ye-߱ScEg"_K>;hx鷱%ev?Cb|wk)S"#Gs7QPKTuV    PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R2Curve$1.classT]OA=vKY|TQTP&!1akvh1&"F?"]D$BJw:ssܹ_}`BXBFaвykq
U[քˎkU5%Hn$
a2UQCyC0fǽ-UE1DrIQȉ!&*Z{ čyǵ&,ki݀LjŬ©LqBA80?nq7!ۂ"? ҳ1J촊38PMYeHfg8V=Gt2Aa,*L7 SD/KE
ik.:>:,yX{zѻUdp,c?ڑufkVQ0B,zSER/>)ܲ0m^&-UT_SŚx5\/M3fh3ur*b[S	^%@sn.\<@
MS;pIW#N&{- KhGт^hKd[372=P2l_0,x!~z{ Mdy0WR|$[	
$BH8MD7&5rPR":<}1wM]]V%iUZ&۳uÐMIG<=	maq&˵(rY.%^]YJӈSBBhOaiN.
M?^&y6K#Y
2%Wpf1;
PKu  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R2Curve.classV[WWN22
*(X&A4D8Df& 7}C}P+*mW[Q_lLU$B,ș{};_tklGLpR+,FQ	IlPd\ZP<p)7CdKy\Pל"#Sþ\:Y!L3Pzj!0>XxEeNQ>/sAN>t[|R7Jld"s3`cp\hة'jxQ>E_-&mmAG8.ܵ%έUlN-ץ"(dUCQJnb8
E{bpO*NvT*$CxWWۋVq9Gq& eP*M)%=دb3J`4%u&ȉL<E3qn	~Q	vO'X▚8v\yT"qIi3Rt,K'cH;Ld:PE3õDMnt'h<;DDJSOwҁcQqgbYfh
8/%n-k.Z"HaY#9ˣ	y
eAm
rt[dnfO+q!'bkfQ'(ƈx%Yqo'ڏWE\ArCMeb70pJ既@*NH"&	Bع-셌iYREAV`8xpEDjꆤ:PɤJ3˃]U1Zv8'ӌ+5U][TV"Szy~^+*JnI7X/Js$߸(͏JE\aY1p\Rh+*/N-,a?0:`v}f>#QM~A,e3\$m}F6WtZBZ#J'J<iePn),6(NgWeEh]~imI̪RJ%]WA6ܩpZА<AItOw_QhC<[y8
4lP0=+hgs^{Cxj1h"
:y48WgE:z#!kH5%X$Nj&S>h5[Xփw,t]M*س|*Z%r cHI
,f"*ZBVqxǒcAq~Yf}l(Ty>eʼl[jou:fQ=lr~퇛"C\
0fopƩ6Qo;9hmV]O.ޅO[8LWU}̬JfvNI=˩/w/Հ޿<4oPK!   
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R2Point.classVYsF b !Nb;+Ҷ,ѤdVD9 `IC.)Kr_%UaR)*䷤H13Pt*UlO=}|zx	q81	۝VV
wY
MsmLj-n
⵼5+g7: ymnmW<vO/>soH
L~m)/Aa#%ưZ[ZvS(FHGZH<薗(਀x_мRI|F`OH<l_hq]1xFY&<iK<	Z4"X8&1f͍F]om%*۾+_8Λyٖ˒%&ަWw9r'$)՛yYyhq"*&N{	I<jk>-17hE`bpib3'lWX*l0Nx%y_q@ȗy\ȭagk%.cM3yIb%ViVm#uN#%$)t/U,olT;..(̂uk=i^{ZhіAi
#g
V7F㴷
u3F} N7'pɋy7%UF\c?i7jwl$Hѩ!
{=ߏe'6ݏ%~R=L>h6m]37֮	.M_vkuk{Ek[z5 \hl.ɓ}}i?QQr>ğa#!(8FO5T>F'PIBo>[ZUpur^+rt["ޅ]s"V*h~e.Ev1E*L/W4t#8;A9<Z6zNC+K.fH2{ģ|AdiFt.R9KQoJ[
&Hrj7L9'Z9=dq~DJ[y'q:RsNB
цOX**$]"IfT	֒'bN:/Y)"IfAӔ̓5]ɫa9
$_sr*eɓWBM;G.'hy3*c*C.<.u~</Sc6Eh/htqpB缓
lUEQ`;a/Ψ*8YTYlFjDe/~щlgLv:dv'/%`"936cb@/d	ëfPߌ6/ߥBcL5Lez"
%[jO'b؇WTQtXP	\JuF[%T5
3m.^qSlFJ1l!2/)n:M$#
bRʋH&e oJu4%.뗒yH(\Beğ(yzq.ZfHRL]$UL1JOeCa.O_qt|(dj(9ES׷KxO!,~.XTƘ&O=J#~R1"8%F.2lK#g#+,QDNMXX13V%J^TC4<ؒI2KѡM[1>Wlስ)_O#9_PK-y|Z    PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131Field.classVKo>#΋HԵhY2cَ#fbխm<F)62AZݤ."F-"ۢ;Ñ4ٔws_?
Q "tkUa~qyWTt;C&
X%KV{{jֻ`kϼ+յj
M P#YoA')Z*orPg9뭍.{8	tȢI8)ºWֽMٯe2k[OvdSa&.oե``yyIǊ6V"sנ
MUhAVntZ8\W!(1Aޒ7|NY4KXm4
?kaPh
@,z[Ř,Q12t
j5BǾ|Sxۍ0x"棭FY(-H]|4~FA#7o.}tW{e.gU+,`hAK}n+4kAmp|#h.ϝ]j͞>1U1ow
e#عNkvډ׋GJ-: ZN[!{΢keVPب7PGxp:TSz>
+KhǋR~kͧa-7e̨sf+"'zduvU̽XoȻ?{(E(Rh]h[
Y5hc)8]N9)MyZYuTUYs5HgzbYwtY2s}dTldq2T5ibx~/nphW]
aWCƯbD3 dИ?7,txObЧp
hdIBCQtgTqOUvLW1`9SHms~Oarŉ@@HjQd8lTmp\<z$*`$4ثylb|DS}nB'2j/23٪opS1d?saJ.t[n .:?l 9nz;Bѥw6=h:Τ/Pu&{2ʄ*kΤ=/n%eywr}n f._Eu0Lo.t_F95czB{/j#%OUʿ*6!@1x+z`&Oy| 9t0wmcwPKewdç4
FqT@|Fc/>9MĚO~)CWOn1 }[_8~1=?뤦g2Ar(=KۧؤþYټcczwy诈a3|i ]sqs;}Ɲgq]YɬaPlӲ"-ty=oGgD:ovf~Tb8okgG#c"-}1=&mn]auq8Aǲ~޶rM"&x<h2)jWzȋIۗ?-&$G{G:G̚gt~IȨK+N_(>l(ɲl҂QZQ{lۮdsUbd	W@SKv"")i2
|1$U$ىT8[ߕTR1$U$ىTrJŻu+*rRb+YTbɞNA_J>qg=vqP3|8lB盜uu6d6M3~7l}pe)RXKGZ:ҬH,>272=>d
K#)2,uPˑG~67Ƣ /5A.,./U=.,UUd&XCeIi.N\֫Ĥns8E?pT>Qs~Kh
PK  g  PK    A             Q   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131FieldElement.classWsemsl JKZjJ`lӅͦ@DhȌ?I}ͻhL7߆PvLb,Ss)ٴ4%Jtw֔[;LːSVOkVAHIXI@iyZ.XT3IR2A*Y[%TK1S5!R6[]L"iJF:L=R&-5P-`l㴬FUUM7!%5ܲ8*PnP[>dig!,b"`IM+M-v$`di7+QVlo8-¬~H؁ƻ3ĀloHl){wF
bUsPEho=(!dQaV"Vn>=b2,$<rR$uaei@;+]0)R8dGVMF2zXl^Imy}LBGyȥ)*®"X
_XAvq	XJ*p{ba	O2ʆ	<)⤄28ҧ!W"kԀYX(J8ebNeCa1	)PUVsCk2,ӪJ83 5$MAҙi'dm|m=0:|WL%b8vfל2,st/s9	YPisăBx/ "^yK!ϙDiB6'ri>dSR@x8,ˇ,9u_4>{gu}	Xg)թZ_R1&.FȌb,YqwJjH=KoORp_Ջ͟VU_;ϢMUÂUs34(
CB+)cʤ$ٵJg1Z𵕯tr%i%EMɕ]l
o _V
}JM?P[x崔Ww(UU7Qk4{~Be 2
"a hsudYUbb[6EQ1#u152K菨_D<GA"!^=ye--8bGxv;!qaz)NPtgriue9Z{
'7<QlE<"*a{V#A|^7/^xA$](Y
:ly6_o|#q-}a
âڂ@8!I8XG.ZN0_S䒛eQGvjt>SΏj./@v )fրCla"SqX|mrpJ5Q\B?{ W䪕r7m^w.YљYlfEx~w<_Yqީsd`WzE~pXĢ~G<<]:mtrhTy1EqkwOo^C_PKR+  k  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R1Curve$1.classT]OA=G)TҖR>6(2҆] QM& $ww)s=s~A\CQ
Àe<6BrC7]Ϯ.Mq7ן+,:K#Ǡ.q+1
u35CdoipAB>H	UqLCz1z7m/,>QVw!Jߋ8Nhpe}{+}1).),C}7iW,!.M8Z<GT3Ba΍*,/6 SD?SC
ik!\:^:,yPѻ4dp$_ޖufkVQ0@q,SE9R/1.=7^p\&<A
͠&.5j02V+bCe[A_
O?7V@ŃpZѲS0
t5kb KvdM!?fD9sz,ӽ5ӵh?r裷p,a3_0c`{b0?"9Nc"y9vRn}.%ڞRX2?=AMJ،~\yb2coHʊLlZAv%0yzqFM`k5T?\[\K:m<#y?}/Dpl/MIxj`ۡ;)4iVB]8,ُZm-х4@$oPKZE  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R1Curve.classV[WW\J$ap$D8Df& ^ھ>qk/L&Hе:rfgo>? ]ʍza.85eE
3ds>*dXXRk!KжJ0AUҘdi`؛HST*=20u)`<S3yuA>/sC?
t{|0bBS9-gOѰSO9{8˾J-}UWY>gY
Cd{ۺF+CyI.	'rsiTԂv⒔ǢhHD"Rw*NXgۋ6<Ƴ"xD僪3jfBN1-yYr6Lxтx)d?%_q>ݳ}^-l@D30
IdgWT$DO2zh;HBɲ0At	P+D#H?%"S/po=Y'JO
^S8MU$,Co/qED?Vt2M<)>LiokYl&F(7KUTq`̍q\|ZmH1cd) ^qY
5Wx͍EmlJ=!/E_\Fj}Ci+9!<7adS]B,Co,nz12>"4^JGSLztdH/O%GGit*OrPǹ$j^%k=+2z44T3+|i%1e9yq\ΫXfrՈԅJ[)Wva-Ul9*I
`5(D7挳t>gZ1i4􅜜Ӓg%{
+J	Jʼga]Z,tWTڢ;	^YQThB&  8훓4ˆRm_
/|}ӝ~]x47@_7@
4YGm` ch\CS>[phG5[A*	4zbk.
0`"7ـ]mK%[$55[|u+rܲ-5Mt:V
`@ݲ56S
f;1tۆ7mp,uVD:SD	eV:se?;T2]gwG;7y2<W&9<eGfRPxAM?
u5ھCͮˡ^w>{p
tˏQow%hk֡L.<D04x)>+w(ԃ7U!egg<wq;S_*/)l PK   
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R1Point.classVYsF b !Nb;+Ҷ,ѤdVD9 `IC.)Kr_%UaR)*䷤H13Pt*UlO=}|zx	q81	۝VV
wY
MsmLj-n
⵼5+g7: ymnmW<vO/>soH
L~m)?nFJ"au78Kv.P*;ݏx.b-/QQy^yxO	؞ZJ%)lcOĳ<MPyex^N1Xi8DqLb$޸,KT#}ɃW  q7-%/J|MսMrNH|S$)E7/D/qxEUMx"֌}ZboV	[w2=fN8ı U9`$3{eKImi,0?0F/- `[*ZoK\ǂ^Mg*KVӬ6.{GF6KI|S[=^fWY:بv\t]eQ;zӼ]	,4ъ-q7(ԃrnAP]G.	߭nVio}ng6kvsoNTnJƆӮoԈ/HߑSC6$d{|?>Om&K?z}l@57ۮLgnP]H]{K+ի
1;{`}Kֶj@BjF]'ӟ,~F$&K}?GBQq6k}čN?ǛΓ!;U1م}dV
Uý:W6D>DU4]L;QbT*<^liGdcq%v.rx*8_m ;/-V"ۗ]̐dG!<6҄,\̥3r£H;5LnonDsN
sz&VxN,iuH眄
TԱUI死+E$ %+NJŜt^RE M$)#jDW%rfeK:IT|'7
*
@;v]\OgTƀs%Uk]x\
h''+Ty^0mZ_dy%y'9<ȫ-46̫N"Uw0¦*1$_6QUpa&OFՈ^o!e%8Θzu88N_"K<D8sfݥmыĀ^W͠7m^>K͑;<L{&bkd	sEK"N܃ ,BF$8qJ8kZg.
eq)\l*)~qٌ46cCje2_6StPIFNĤJ%LAi2J
]>#/%󲍑P͹5q?Ql<12$]4懻HcfRʆ\5%8śPP(IQso;i=fBJY]31/L0nzF0)bxEp5K]dؖFΚ7FṾY3 *@困;5Ye-߱ScEg"_K>;hx鷱%ev?Cb|wk)S"#Gs7QPK9    PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R2Curve$1.classT]OA=G)TҖR>6(2҆] QM& $ww)s=s~A\CQ
Àe<6BrC7]Ϯ.Mq7ןWXtDGA]f),Vcg=>k
t44+nG/;|̑88☆&43qcnx1^X|t7$\X:C4qPѢ$N1rWb#'R*=]Sb5YpoҮXC*5].qxhg:7+5EUX^m8kqA~NqIE}ט!
CtHtLY,vwiȢH-T85;N`>EY􅧊(s^b\xe{n;*<tM7Uy"+RAM2\Lk0qcaeW,ĸQ0mb͇5:@e1n­ԁڅHᴢe	`r.j$D	 d74C~:|ls:X{jk
4%0Go(Yfރ
`+(>`~DrD4/Er2p_\K=y9DdLYE6{d5efgu%l}[&o3
-JZQa*0'$čj
*e͗xuf>+yF'F@^
-l^
HCwRhXm6pηY@.[Wi'HPKV1+  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R2Curve.classV[WW\#V-IPCܼ4	I	"XH[a3z~
m_PԊJյ}&UbZ]93{ogrVOkEU^%+ɘ+?HKJ-؝ppV^.ꆶ5P`,hj`ؓI&JX*IN]0&+OL2,(uN"vس@wĦu F*8Ssi'MwƝzr^˩
1aXTBoڿ<-"b+rV۫֝~'HKRI8K2\8p+zzz݉X*OTWw"FCxΉEaUfT33
l0:Du;w/XwP=ɸwM$(<m1^{-OD'10.
{h,MD"X;N$C=@O*
r]"iB殮?ho$B]x'wEDD`
3۽Ow֎Sã/$NQ/I2:>}#qF܆Kfu'E$0@eL4B'7S{շ5tn,W6m	w#\j?8W1DF8.T>a6S1ibNNv,冚frȍI"ԶҲD2*dmq%fL$b{`˚ O2fy*dq[[hUXT:jT֣#ISk ]J
Ues0	:r^SkuTNe-2!ΩdVtC%xKd1cHs4WJ91VB[)WVa-Ul9*I
`5(D7t>g1i4ӒgV:y%#*ÚvXN騧%t}$E!Mw:ܒ,+AMoAApR[7'1J!t]ranjC 5;#BkhnoAokMѵZ>Ѵf}f:<kǷ-X!kFCᴯѱ]s.
aX	"7ڀ]G)PĒ%qZ[|oZL>:nn˦ޚf:q+F0SV n[bq[(X\sc[[>:3"("޶Z	@h	_ǹ]KbGs}Yz]c+}Tyss&^z(>5X<[[U

/vǼ}>ۢG8yq9ls>_1x6nmz	-6 g}m:;I݅GhpF>g[blfa6+,P3?vrME/ZPKj&  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R2Point.classVYsF b !Nb;+Ҷ,ѤdVD9 `IC.)Kr_%UaR)*䷤H13Pt*UlO=}|zx	q81	۝VV
wY
MsmLj-n
⵼5+g7: ymnmW<vO/>soH
L~m)Aa#%ưZ[ZvS(FHGZH<薗(਀x_мRI|F`OH<l_hq]1xFY&<iK<	Z4"X8&1f͍F]om%*۾+_8Λyٖ˒%&ަWw9r'$)՛yYyhq"*&N{	I<jk>-17hE`bpib3'lWX*l0Nx%y_q@ȗy\ȭagk%.cM3yIb%ViVm#uN#%$)t/U,olT;..(̂uk=i^{ZhіAi
#g
V7F㴷
u3F} N7'pɋy7%UF\c?i7jwl$Hѩ!
{=ߏe'6ݏ%~R=L>h6m]37֮	.M_vkuk{Ek[z5 \hl.ɓ}}i?QQr>ğa#!(8FO5T>F'PIBo>[ZUpur^+rt["ޅ]s"V*h~e.Ev1E*L/W4t#8;A9<Z6zNC+K.fH2{ģ|AdiFt.R9KQoJ[
&Hrj7L9'Z9=dq~DJ[y'q:RsNB
цOX**$]"IfT	֒'bN:/Y)"IfAӔ̓5]ɫa9
$_sr*eɓWBM;G.'hy3*c*C.<.u~</Sc6Eh/htqpB缓
lUEQ`;a/Ψ*8YTYlFjDe/~щlgLv:dv'/%`"936cb@/d	ëfPߌ6/ߥBcL5Lez"
%[jO'b؇WTQtXP	\JuF[%T5
3m.^qSlFJ1l!2/)n:M$#
bRʋH&e oJu4%.뗒yH(\Beğ(yzq.ZfHRL]$UL1JOeCa.O_qt|(dj(9ES׷KxO!,~.XTƘ&O=J#~R1"8%F.2lK#g#+,QDNMXX13V%J^TC4<ؒI2KѡM[1>Wlስ)_O#9_PK    PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163Field.class}Vo++jeIcӔ,)bKyɍۍbbխ,ɚZr(R('*})zh! I[Z?P
Mߛ])7of/2=hR6i+<^=hlxKBfB=LJdٔ![fk{m:`]kyw:͍֭Jn%s7dy${`Qrlc
M}W.( ~}sQH Zscnuau?A9Nڔg!yݝvs֖ϗ/~o3)dmnm>
Z!;锌
vk5e4`mmtf27w&'!}(4yTJnmZl6,zRhu1E/qyvtP#b݁Uzdc`nۛBiY+6]a+U@Pr
-dEMnto7V=y^y
؟i]}VxE>AUޤQa-h٦=q?ޅ{mZ!8kK^<U*ғ/srgrVp,^ vh!K.Cn1E[j~|(tr
(/,#wa=4d6O5pjsr5Hi	kg.9QY
l
@[uACRj^AcπxX01+^r,v<YJSՒZT=We5ՀzJlx
KzQ\Q4<`dM5nȤ4r\vku.;0Vsz9	W\
?G[kb2>5'~P1_8Ţ{@#	h^rKtb穁OzM_QƠoǨ{_9e@/|As:")qW8߇Kzt(9~I_fD GHB͞v;EF>;նU`W{:|Exx0;w0;7,>mۙ`t1tua2ce{̝dPv٩i%,igEv0̔f43Mx4ʔV2#+xϺ)튬FRhI%(b^{ǻ9b*QhnIRG\`~݄wn|mz^VoRXFTQy֔~Z
U5t	#:\"}t&QMyH`[8XI]Lhy#>3мSD-\9RGPnpڱgQwC٧2|b'A!^CnqCjܐ|{inL159"FLh 2Dg 8'2S&^\EG?#<oמopv|
Nw.q\ bPZ"ϱ{&stuȱ^d:i9Z
	C
xZh]l?,"]a1sv!Ę 2<ξƺ89fH29iyS;R'DNNWʻHgr1%Έ19/Y1	Jd⌘ԇY Or0K$p},c4БB0z1$h*BqPN,/J?"$h*BqY@9	bW󥔘{dIGܮss~|a#yFC?ÙQAo4&iv
`c 3kòƃ0f&8^9;9,xpM2+"K`s,dQg5ዜ6+Weǥzt {:QUE.3ncg{$]L.ӏJ|͒榜":J?"~[D&?PK\3  0  PK    A             Q   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163FieldElement.classWsemslX%MRCiQ(Ք -H[E76]$("x~ddݼ
3:fs}7/  W'\j.%ĳ9WRޞ>UҽUrark
Ps Wd >E$$<#V3dT5+d-SY/a92椈Z-uMe	MS2֭g
,ٔ2ev6ZAiVs扼<F:v@
ٍևM]eXM$a3صlFRgm	X?d7qGYj#E4K؆%@P5+>	;м=]>Ͷ|)]Mc wd!"! Q5,'<2dK3O5=߱=lЎD/cz}+@*'ROO}!)~RgVX`B=$ Q;"ËT*ۺeHWB՗-h:1JH_@V0t!EeX{ZACJ
;kZ7ᨄcuM;ɓ	K
+DX	Nx\)Ҕ?+:mD8II	P邬+LIGwTPSZ^_<	PK!9j=g%hL?)k#t.+iNBS4.V$Dg8vtӺ)%|W M$3dAfp̅?.x^%\_Żu]3ҤlL|rgIrYWr<5"'5:euuNQaV/^"dF1-Cr6k5'($9TseM3*ߛkͤM]wUTX8(})"<LAbݜAz6HH_JǹW!QqUMQRܔ\))z&Buw蛮b ]qF{^\<!Z|-of~D'l޲}נoQ%"$Km/DZ%f;R=\]$P,:/iYE~"Z965!QxUv;<=,7&&
c߆ą5\lAѵȥaJ-A BĊ踍h:m1ʵ5րUă-8Fݶo5A<\ĻwK4ֺGlDA 1fͭvzb|m#;	
zx:A__c,,9??71򾓱
U[vzl>Qz-x/) ;A,YmF({9S񶙊eCn޺5<v6S&KUfڊTTR'knsN_WEFZtp߉k{dř5Gr#P3.1
xk5UMA~FU=kR.۾>wFp1CPKj"  M  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163K1Curve$1.classT[OAK)K-ť\VPCbaiv.}(
cxMD& ?Eų)Ξ|3ӏB"4PFlgY_W,]z{e]zvUwi:+\aY9uXGiC_)"%KЀCWr1'HQEf0Ң9&S}w͐rbUTz.Vhp=s}*rC1)/).
Gq>ܛ+ǐJ͗Ks,*z 0&MQG7NZd))Vѧ!45fs. S/?L5d1p(#ɋT85;N`8ŽOQHĴwxUxq,oPeW*4d8*īai\c;'-ô݊pUGxn,#	RjF.O@
-K8pCW#A&H- K!hGь3ȶd62P3lkA
Qq" CC26l#a#;iWy):''R1%%c:mԤ-ʣ3הյ{yMRdld[|p
)iEEÈwIF7j\b(ک_՗
hɻ|/RhGdMR4	O
l't&I}}%oyhYzKtqfq;	PK<&  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163K1Curve.classVSWdJTPPiҚ5AH0\A4b˲Kw7 b/~zyC}P+┶ә?w6`ЙNw g|/g?c8`ZQ3o(sl;ɸSdޚQ!  "(ADCbCs*nkVUZ4veSH{:O\2Ć{KOk>)pBB$a3ycɊNL1hc#zC"[䒩Nu0)Eۦ40:Q-a70i87mycCn^$GC-yF.&2NymF8Cm;ڻ8	xQd>nSG?ݴ$e&3la	hbw͍kDcSD1l<}:}D*qLBH;W
S-;~Q 3X0ec"7pw}qHfZp!`Zcu\ ϴI8ϔ)8is1RLbEgx:$? EЏW|<ޗmZT+Ntpr:!tkSiEQ/EĵWE\`vǄ\g%il%0$*Q@)|!\ǰ^ʷx4NP)\K3Cyd;C#nJz9W=
F(Rh-
Yj<I'o?帅"t	SKi؎l86@?BʈLۯ$.wҜV>觲2Iqꍹҡ,Ei9b͐5;g;*M*!^'YGVnӃN(JNu\r\)IjE@
uݕUdYXSĽ)YrrjBF7-TfT fGs]<T=樮9)#n=Hd5m4yk[i8-()+jVW{MvTO)*m",!YQTۮHWHtNtFѽ˖1JmTfd8H(D^ O3L7]3]7ZwFA_77Rlaq%Tb-bbS<8=ơBڜ3
hZ@s
X8i*I"m%E?p>ZkҪ]:5%wg\*:fqg-N.rüzߣʣV%tȦπ7ك xppzՐ:ޢ.இ wV=#4ヵ'Eڽ˴`2ңď!E#ΓWxz
'T
%XgWo&ZZ	~Gc\
ՁȚ{A,a41`9{J2·>_7/x_,A7(¯yA0ggԗnui޺?PK!mȤ  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163K1Point.classV[SZ{fA'`+v7X8&ȶ,aP )B΅ދ3HFN_?TjUT"tϮ+B*U`9;= xO"1fUAÝlVknmrvBk㧯AZ榚׼!ppf{ 9mgnmg<~O=RSmA9r٭~	$HcP`p
N{-Lݩk״5^Ħ!/QPYRI|KKn'$SIϟosl	Dǯ$1g,<+pHToY;WSV4!Xc8.1fF]ol1|W-_`
_8y˔$&uWw9rIJ;՛yUy`1&:MSxc5>#1訤[E`2b3I,K6NeKImi$0w`
!U`Y&*Wә,4
ޕ1{
?Yz?ULlV;b&Q":
kL}
&ZۃnAP!G/
ޫި3|+p7Iq]tv:M6/t4$-\ 18XNs
Rcf죱N6ӮܬܠZ&0L+ի
qh7w\ڭFd[F5 oL.S|[6UQr.ğ` (:Fs9T.,'8<I!*&fĐNn'
HxeZӯDۥȔU.&ʶV)yDv1ja'zȹ<Nv^^DW]$?A4u_";Hdi/SY
"冷MZޠ6QN/ᖈ4D+`=9AKĴ͇wb}ޱJ..8	O*$mUE"%+΀9d&64-ROgRCڕ4.3+گO#'r]\Y'N(*:є3FXǻ9jXg
jTs
OQ*nQ~$'S3.Nnk'G"ɋʱlY8RL![P19;UpW&PDՈ.~1`'9gM&S}⃏0wYDpQd@"^A3n#H䎮{CAjh
!e"0B-q2j7X>غA8 `cUX9rKpe
X)sF<qI`]gPqg1fҨ'|Զw7q_:4Ťh|KGw0DI෽#@A<c0|c𾍔vMzD0Dl9zDCR('cIz:OTh PO_' }L9uio6cXz5a}gDd'b	;n/=B
mxW\o6hľ#[(~mw0`Jsi>F_PK_M  z  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R1Curve$1.classT]OA=G)TҖR>6(2҆] QM& $ww)s=s~A\CQ
Àe<6BrC7]Ϯ.Mq7ￓ+,:K#Ǡ.q+1
u35CdoipAB>H	UqLCz1z7m/,>QVw!Jߋ8Nhpe}{+}1).),C}7iW,!.M8Z<GT3Ba΍*,/6 SD?SC
ik!\:^:,yPѻ4dp$_ޖufkVQ0@q,SE9R/1.=7^p\&<A
͠&.5j02V+bCe[A_
O?7V@ŃpZѲS0
t5kb KvdM!?fD9sz,ӽ5ӵh?r裷p,a3_0c`{b0?"9Nc"y9vRn}.%ڞRX2?=AMJ،~\yb2coHʊLlZAv%0yzqFM`k5T?\[\K:m<#y?}/Dpl/MIxj`ۡ;)4iVB]8,ُZm-х4@$oPKMr  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R1Curve.classV[WWdBTZ&A
	!$ %Ha 243/>"vuvYbZ]93{og?+^|%VMkȺW}1S_2/zpHd(tC[Qqgoj`؟I˄h*IN]0x'OL2.cDH`/'9֍L3giz<"vE-W0\h>~ew5M/jfAǣUdp
<*vg@D;C5yI.rs邡ΩE'@}P8GT4LEz{T8p2%}@4pOxZQc83%#EQoP ͨ3csp=lzs>N,
x&c.Nҝy&\$alQ[x7CR<5g+'PN'NYD<ǂh,@$S}=QJd8JDn	~Ҵ=|wOj'&5p$Ε}+!>V>x;O怄38Kݰ$K,C{ȳFn㜄
RKiENI#ALiJ"͛,зܚJq+.5ҏaۗ0&"#af{R̩Ƙ|9^q{7E<%\FfraxUk~Q^Ȇ?~SŕP=9ri^tOyt`8_Ukr'jO=#/bABvg
!zt$h%\4<>KHSes0q:\J^+De9,2)dCͬJCMp=WbƐqy:11VU*EVVa-Um9I
]`-.6Pӛs	@U6t>g9'`RsqeBNiI~k
X+ ee^ȳ갦]/U uW]k	mQHS(wvww}=4(yF%˺R4lw

!E>:}]~x47H_E8
6;GI\GwY/ch^C>۲¾Cpd5x*S[>(  kxXC90,-#܀]G)P%q:Z`ZM>5;nn˦޺:q+&0SVnY&cq[)[\s]m7,,
fFNRF	i	/%tj*q-fZ*wklG߫Uv~snn-i6L[U
/Ǽ}~BVGǷ8uq5/q7Ä]h?v^}z
(YoG&{P">aOkrS|%/&wa+gԉ7KY"6]\#3?v
GU/z7PK^+  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R1Point.classVYsV8qm36D EL-K40&)YQ!XRk㐰KR܇~K0TT[R(lL*bw>?mADT r>yѪݬUN6I697{WSSM񗼖bFqqٍΦ;3Hcst[]`e:&>WOnm玫۰Hcк\[ZvS7P*;ُx.b-/PQƻ+ʛx5"clIO	<՛_r;m^eg,UߟCk&LkͲ@_1po`	M<Le_e]ܴ8ERtzb??/
8L7^fd)/a:Lj`amاfmU\Z̴oC$+XRN*KKe3"8,rRYZMXpëL^XejwՆweco	|z=
|'lU
Kj@\EY.p'8ŋxG	B-mkNv:rfy@afUkZvfب/`@zn8YE*#}5oG6n#'=ߏd'&~_R=t>p6m]37֮H;Kk++
1:{`}Kֶj@BjF]'ӟ,F9DHLʕ{0G	F1zڬ!`j(a3wثD~RjZ'7剿"H%إ.1b2W\RdʉhRreKO<";51Fts<s켰Z|Bo__*w1CÌE4Ixm	kYӹ`0j
$W"Wh0EKe9ъ2X` [%RZ;pq>㘥Hgӆ-uli:ɼuyiH$eDIɘVJHix:C4e`X+WrHDάl)B''ɷuqiqFAehGSQy|qZ^chp̐|KA8y2F(M)3R]t]f?/9$GyŁƆxu)pT,`tA8˦3"N#,dV6ɑ?0p_tHYxi]o]
a6q/|2º}<]:FPoxC7v9rP`/X"=\-qr질X>1]X*N	I͝`e0T'ŉeBiU(ťhs$e3RRc،ak̗|YOq1jB)92W^D2)kyUB7(ITd|^6C6b{ebO&=Ҭ4-?AR3˯Tsa**Kp<7Qx(IQq;i5fBJZC31/3nzF4)bhEpK]dؖB7F̣Y #2@困;Ye-X13VoEJ^TC4<N2KßѡM[>Wlስ.O#9_PKBއ    PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R2Curve$1.classT]OA=G)ԏ

*J[gAԤŘqkvh1&"D?"]D$BJw:ssܹ_}`WATA0h;hOzЫ+ЍE׳Ka
/:EgXGiC_)"qKЀF+W^
9qq$pDQ
pҾ\WOGwB2XŪx8Ѣ℆80/Sg
2Hti<Ni83޴]<T4^Oc!x`>7*/*,/v8 SD?KC
ik!\:^:,yPѻ5dq/mK&U3N͎S(@q,SEyR/1)=?^p\&<A
͠&.5jpeW,ĸe[:@e1nԁڅHᴢe	'or.:j$D	 d744%3mk`55gFCx@Ї~z G26l5a ۯ$hNdྂ[I4hjXbɘl2v_'5)%czt5evgu9n}[e&l:Z-JZQa*r0-FM`k5T?\[\Km<#y?}/l^
HCwQhXqַY̻@.[?1	 7PKF  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R2Curve.classVSW]Ɇ
((jiM'ֆ %H,viv־G"Ni;Gb{f1tݽqwι>7 ZD
Q82ueEMek.*t*X\Rk!-#A!#hZ|ȤלEbQ[\:UژLf2CpbM-L꼪[}>P'B{N>ieD<g4]^fYz"v%C-걏۰a_zۊ10, 2x5}YŎPX[qHa	GtC^KblVYHQ[C00i𼄣8ưwhoUo/m"!-
'p;K%#H?D3D<EÝp?u΢BjWo1H*YEM8d}67پD?v'Lg'KJnMyM~=L:H'©H4XK'$tmyli7JO
9+e.U*7_D?)RREdyJiͫ]lk| ˕
r q^_C"÷K}Uߒ#$5	UvPfUkT^*Ÿÿ
಄qN!LU/ˡaيD	vgOfĤǼm)*dL,RﭐUio'O-4qSBCtݴd2	#'i I^LPDytQy;O)Lʩ,EGF2klRiH	l*dEyaL*؎U.,uX(Rbgi~0|:`vsN>#QeZͼ`L4kՎ9%F 5Ԗ4s:1ꖴy!Qg1*%(%+sjNQb9#LkJ%-
D|NÂG@AApF)87$)j1UMSr1>*a`HAt7w_Khm$
]/
z 6|u4)=BC<A"}/=͈/+؄^YÙ`g
M[(:6iX:RwmqZ[hӚm:8ߋޚ&X²# f
G3~j3k@&߱wnaa97xCqiaj![Z%:.x8\-4=!׸ʆ_э*H~)Iima6DLO*E#i3Wpu]]fOw8qs=+1;20jݏpw|jVaͬAcԋpɸW)^|c6D(¯ɻxcҜ	{S_>B޿ji(?PK|'|  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R2Point.classV[W[ƒ8: .i$4TR\j!.8X$:u^Ҥ?t~jW{ɐе
G3=6 N b!*C@ڜjTnW~Ps'[5?h+d]5o/9v{I{n:Wsn#8l~mcXk!)0-?h'|"WS\NO ~6`fckkf*Pȟ:
4$1|i]#ZĦ!+Iѡyyx$<r[ ?u%Q<k9y#|+n.^$r|3pg8׷jwvY('G |Ie>t/4\"MVW˞HR.ous`Q&:&zq<eMǕ5c[tT"0;LM;$IR(-I5-qܗ{FUޖ̺VV1pzG2?*:k̱V\]sYY'gCu"[>V3*jNsؔά(=2IV`
$gNF@<'[|]6gͅFniVKHmGk3xwKPn_m[V:ݣ	ğHOҝp?>#ik?9~A[1%㋟lYu{Ar]7VjvҬh5^m]".p71Bfkew<g=?7A(#:Fs%T,#8<M桿!.ې|\h`"
#K${HgwD/L˅ȤU6&HriG,"{0J=d'x&8i4Ӌbę=}D#wEv`FΓ{m'AqfpĚs%0ǖ';Z;}$}
6.:qGUI(If{ȪsI",%KN9d~f打2D$jPU$2fuG1qdT+<ɒ9U9BM:'6cmT!5d9j 78
/X^*˖~,ggh96^%Sj>EYxwɱGG:b?eV9'ޕ*mp]&xv!pZloBZHX8e|Dxcq؀}K:&FSn]>O9>L{ID
x
+k3kp{ec*݇DcF\QaǙqձJ{eq93:9TP͡8o
B>*{"i)-I*G]fd]c JY8EACָ!gj~-% "/}iGy-C/#Sڏ:EfZi61]T1ew
/Tʽ'jG7\W}@;OްcjHQͦ{z'A0Iu:X))]yؼ15̪2|8*+=uǇ=$A{OQf7߂ᝤFV"?[b.	{&~w4'{Q?PKT4    PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193Field.classVO>ac06,̒1;v`ˍLkBj;m=^βKJX!o[)_>DAi*?}߹3;K*'
sw{ι߽3&CNE*i9GQPRC"JZn\H0ɠNEdItVf)kT`'j<;jVs]68/T5@v.O]6ɦ~Doe[XTF|s+S)ɐE"Rm#t¢1?RPkv=/ǕMnQ=fS~It-.5\q8YtJd";:=/DJ%ގ*"R(ת&#i<|$8ϫX`/E4UjN63v+n)QNh%XJ
]
&]tz٢%&љo.z%Xk`k-O/P"CE-znTV&RYF"$XC%͠뵝ݨ@i78-ڠ7$zmvbT,
&HD2`kսFTmlDXĐKHzmy(PRU׏D'@z=*afPzk%]Wb$aV>|:b/ 6&h;QD6uD=	&._!6n<oI%Oi1^ PF;]=9堽VP<%TO
|-_աQlߕ{zl[9wqOk<5810k>3$x:i6t֗<W`pX
5G׌~:}r }QXBA;w@}+@S@N:^@ɮň'rÿjmiQWX΂};c%???ҹ۟_hze怂3GvvXGνA$#ȅlOA:(cNOv CJ]Xt<OiKدP^ˡ&TZv5v^jC5\[ivh&̹V;4]ŵDJ <#XL 7 P:w8MЎ3b9LHezs6ƴ{RL7f
3׼1Q#DoeuuѶQMc7ox>
 |@-_Fvc$Lt\ls)1)F&8STFYpc_L`%dT2	gd S|='$z"}BN!xzDs8P0wr
YG>PXLR( _ 2*{5
s^>AG'OL:L:-WuNo3ȞctTY.9WZnsNpO~8#
tK+-޴iv
WcKSCsjxG342:VjrzW[PG<:#z
O	
JԠ&O
<cQ>!0e7?%xLd.(<mA̤KfT`":	'L-xBkT3j樝dWŨ-"el> Q^&n?u9hhsC~IǿYFH|J{ܿCpv^iBaIZ" Y`Q 364	sfў[<cI\J<6s|?=lף*ok k쉋b]ح5
rTJ(Xvӷ1O|lֺ/2.PPK:}  R
  PK    A             Q   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193FieldElement.classWksU~l+6@CA4I
("Pj)mAZnmIMiQD~>~ђ/~Gٜ݆@;NfrN}^؃K[^z&rld\I{{TEKjJVəۺ)=+_ͩp |HXI@yF.Y9f9S(:j&WZ*	V:'Us@eIZꚜdd[X)eT9lmҢhU-yeXIܷ< jȮX>lj.oBP	I%3*f>7h[H	=-';BWx!l"a
ػZo aV@x 𐈇%lGX@lKl*í%	Qq4g<1&{DB|1N	E"?ݟ{HdXJx/4OB+~U)R8?L	ZWd{%X}قfSi㘞ORT+6Hd= &uJ8X<a B Nई%(M
>ͱ&^M!Pp
Ř.ȺKP[ztWe.Y];%(,൥Ӛ0	ڻ$FOcpV461B$1ENjMItVClgJ(0M1"QWzdNy@i6| \h66.xY%\Sݺ.DiR6&{i>ƉDkB@p$,M9uvPiZ2::M0fT~R	h
/qJ2!9KVldQVgI
~ѵfҦTܻa~ުy*M,XyGQH>_KWt nN =rd'_JǹW!QqUMQRܔ\))z&B5w蛮b ]qB{^W\<!'ZշQ3ZWw
GE<F5ATem7eVَ B	G' `Fxche|\D<GF "!\_
#ܮyU--8bGv!qa
)vPt-riueg9-":n#4NAr-h5`iG8Nxj-[IW!-	pcd5ztsxF,H/z"ޠhm(N$/#'F,`̆|dl-BUĖ^6Tf$9gK$x`4flnE,^Tdmb+n羛7'r.F*DyJ V[J9#dmwn늱ڈS:tVXnT?w;yl_,;sW35l{ͺled_+.1
x;]5o(fivqӹ%AQu/ZuÅ˶I>o~-PK[ė#  L  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R1Curve$1.classTmOP~֮e|TmA`2"@L~RlkM[$E7_`Hx""2ޞ{O{@?nT!IC,se<5B/sC7\..M1=;ٝ_rn	7[La1jB_)"31Xr[(#:'5iC!n͹
o$ǶOdb%d8
i8z9|Y^OA5=cR8%֨.2T{vRљ9!ǐvI#(ˋ	}-0ϩWiH!s|0KEǔ<b?!?z,:jC=&$oRTX9
/ʂ/<UDޞ'c+e	ǥk Ҋʮ@Uh5К*TīfX	Xq;'F,ôݒpU}xyn$	wSGjF.Mo 
%]Wh^M$Xj#8NiKdOg72P2l{.5Qy" C7zԑe>lzC/v_ChNd྆{I4hZy5Ԥ7T$:={9wM[]U۝o*d=DûCCID=Ymq&ǵ*
JQ.%^mـJՉP~9Dvp mIxj`(4iB훸,-|D]m-х0	vPKBDܺ  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R1Curve.classV[WW\#V-IPC t2IJF0
 7}C}P+*mW}&dе:rfg_G?_QpD/'*ׂs9`RZ58ppй`\Р׌b]#!KþLR.&T*=aV0id^
f^Ը!؃ZOsM4̢9\!gepܨm$\{|q|;|4؏\a^ŶxMYTJL`j3ZуCPGG(펦"ݡX2	"x#I$;bQIJP(;B^7qGmqjZAէn2S̘Ŝj2
ZL3}xcF	1/A1N3H1逈v``
wzpB/Hñx*#wIXJ$EP;#;݉hW(FCanCDȲ8A#DSp$˱Ύd\
Ǹn=08GcpTqtDE%
O3Om"Qij5ȉq2dX4YJĽK3DvQ繲A6}:ĥ_tGe1KOdmcf4sDY,0nRnǫn&uLlk,O{վ4PDLl{nO6:KTL,0V*5^o9;ħבwcNDv[Lzx(x%)<<<Q,<[Abd:j^/hlRXdX׋aA+(Y6LKŌ/(d^+
4[ѬF.Um\مXYȪ$YC_wу;qLoۧ$:g'9s#-ghrJNK"k YQg2
rJ}#,@םJBma|{ϿsiVMKL
ZQ+Ql(
/#y>pI@<[p[}ñ:а }6g='76D[E8ЈCl޵
50m"7Y]C%E[U65Y|u'vܶ,Ut&`@ݶ56X\s:kc7lp,5"'BoB@h\Årom[2kkmv{xN`cgsו6[M~X>y+
/Vs^t\L&^w.sM·r)p-[._CZ[5hw6UP's|6b%@=|ZBY~ls|(˙k"B5FPKОn  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R1Point.classV[s`^@KJ/ֶI$jBd+[CI[%؊k9&!	/6ɱ[M/}_2}_2ӡgi@K@z.HY:gs\ſ ^mBDT r6yުݬUN6I69;sWSsSMlFqaʙΆ;=Hcsنt[\`e>&POnmUAa#%Ɛ578܋3vnT<o)#0iE!\Ģ[^WJ/71[\)7
DG.Ó&xݧ	7ϿvڼY«)s7
LDsx7ye
f-+8ʛy˒&uoëc	Jѹꍋp%n/
İS^txښO	U*an10>tOc6N5C$-XRN*K%s3	yoo
yu)rq`~,T&/
j;jû岱idcwדf*pqzr.,XEN`5\PMV@u94kNu5Nyk]s;ln i7w,~u
@>Xv#	vUjf_OGx}s٧Ts3tU|wzmzA9vZ}ZYopږV
H([-3ӨK_x|E?|_((RrƟ#!(8FO5dL/F8i1х=d7
{i-mtt|v|XyLqhr2$Tx0TT=6FMel]ܯDhq9Nv^XD>o.&0w|FdiBt.̥3r#I;6	eLl"onDNsz&f6yN,c8f)Y'!c:4d޺YZ$IR2ZdI+XX$IZ4HR<!y0,+y9]"g7_[NN溸8yr @)<e8-1xFf48WBYfHڅǥ WxrROrߦ).:N.n]w̓@cC8*Bt0xl cCe'2
H[{/:M}<m⴮^0a8>xa]>6уo_l|F<ax4
qc;@(zlb,Qs
?asbqrɖZRıX>]X*N	I͝`e0T'ŉeBiU(ťhs$e3RRc،ak̗|YOq1jB)92S^D2)kyUB7(IWUd|NCb{e|JgK.wiDbb )cK}*0%8śPd<8IEQKxW!%-~!XTƘO=J#~RЃ1"8%F.2lK!g#K,i\NMXmmX13VoEJ^TC4<NKßѡM[>Wlᐵ.OC9_PK&N    PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R2Curve$1.classT]O@=nRtPPQe򹈠`D|`(#-}(
cxMD& 5(""4瞹s T!ŀÀ-c=\Ai-d4֝H2hn$n
q*y[0DfabAPG9GCV0)Rp!꜉'548&y|żɃny"7:gX8P]ޛtKNJ͎ώwX>0t)0f%q<JeNpQC:1C[z2aY3"w p_ّub+VQ0\>EYSER/1!0=$tME0]z"²+PaM2\H*U3p/^29%ge_Ms(}M:Tr R886	5DB,R#F=ϤWȞHl]No;ȧFMxA`E}%@-Y&a?1
:HNи)ќp;6?WO^Ţ9=kk${&9hI%ϙ
/&״U*Mә&߆mJ:!4e'N*l?5]>4
6kE×xe3Iu:gJRRRH~"ln?-
ml@)fֻ]8+mG@mpе(	wPK;  l  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R2Curve.classV[WW\#/ZZd %HE0
(7}C}P+*mW}&dе:rfg_G? c8gBIYRd(9٘?#IEN8D8bm),65*#Dx8dj`ؓHD2
f&.|5gjq*STԒ
N"vӜLNFYVlhqP*g=Q'wP2hnZޛ^n;mzGy>D>W4C[blbpz`h*/Ta&W2B(h2ǥ	gL;T %E)K$x $Rn3N<+00ԂQ(ՒMeߧdT7`0=*ʥ?'fz㤹q;)x;&(^q6z5G'̰.D*t'Bt$Hx<JBX2
l*ӑp0pAa3'?h2Ƃ@ 	%)dtk!`SOÎSq
K:4>y#qVċ܆KѦմ2'DHHaE#Fg)Û/An֍>w[dx bmۗ1D^.>ͶQa%qg'E݇WD\冚nߍqk"^Ė
l1?E_E=9!X9AFv>5:n(Ya詑-Uk
ǶO=Ĝ/ZtC.:`Kgɋ#pFݮ(o-uAcp+EZv*+a)}a~^+	q$j~I7Tv'L\;/ϏȓE3|aY5Q)rebf#de1|AnB0>o~N,esJ@jΓ>BM+E:-x.h!k%A̪yyZдkՔyjFXq;6( 	nYQT]C,w  8+ԲTu]ipnjCC|:}~x47L_7@&m54[E
Z}>&Wq_J<h
m_+gg|͎$sQ2J.r5c1%hIߛ6ON{۶
So]+%ko3)+Pl-tm\U߱[>c7-vEUN|5%bbGk޵؍VuayP}ٚ[&?[e!}b6ǡoq`J|>FmB!.߲ze}kP|:Uw֓u'.|6bl@]|BY~옍R?v
ME/z7PK|M  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R2Point.classVYsF b !Nb;6+Ҷ,ѤdVD9 `IC.)Kr_%UaR)*䷤H13Pt*UlO=}|zxq81	۝VV
wY
MsmLj-n
⵼5+g7: ymnmW<vO/>soH
L~m)ʋ'^:?nFJ"au78Kv.P*;ݏx.b-/QQy^yxO	؞ZJ%)lcOĳ<MPyex^N1Xi8DqLb$޸,KT#}ɃW  "o:g[.K^"{^HRWo^焄D/qxEUMx"֌}ZboV	[w2=f8ı U9`$3{eKImi,0?0F'y\ȭagk%.cM3yIb%ViVm#uN#%$)t/U,olT;..(̂uk=i^{ZhіAi
#g
V7F㴷
u3F} N7'pɋy7%UF\c?i7jwl$Hѩ!
{=ߏe'6ݏ%~R=L>h6m]37֮	.M_vkuk{Ek[z5 \hl.ɓ}}i?QQr>ğa#!(8FO5T>F'PIBo>[ZUpur^+rt["ޅ]s"V*h~e.Ev1E*L/W4t#8;A9<Z6zNC+K.fH2{ģ|AdiFt.R9KQoJ[
&Hrj7L9'Z9=dq~DJ[y'q:RsNB
ц[**$]"IfT	֒'bN:/Y)"IfAӔ̓5]ɫa9
$_sr*eɓWBM;G.'hy3*c*C.<.u~</Sc6Eh/htqpB缓
lUEQ`;a/Ψ*8YTYlFjDe/~щlgLv:dv'/%`"936cb@/d	ëfPߌ6/ߥBcL5Lez"
%[jOc؇WTQtXP	\JuF[%T5
3m.^qSlFJ1l!2/)n:M$#
bRʋH&e oJu4%.뗒yH(\Beğ(yzq.ZfHRL]$UL1JOeCa.O_qt|(dj(9ES׷KxO!,~.XTƘ&O=J#~R1"8%F.2lK#g#+,QDNMXX13V%J^TC4<ؒI2KѡM[1>Wlስ)_O#9_PKB    PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233Field.classVo+VRעeY.deǉ룵jGzMd9)S
:TCPТm?=9neovE1]Tgޛo}˗DtE	dR%7bM"fyvYMt0LF*
~e\Z)|/XkW+[W67
ZVsg%(\;YԧmR%Os9z0>1<"g/V<Mܙ3FGM7^CX;ʖFX\9saiM"csktnP
lĤbj[CxH	V*|&F;j@5:-RnԄMpY)tL_YmʤvgzäinkT.%xଉ{ZfPϛtכlBM*,"Ms]1*#kZ
!δ[y^
9r#b>VՊw&-">k<d2b 4I7LZHd1jek;(`Al-ޣUzCA;R91
	5pvZ"iN-(nݐg]W+kAPDG'^Y˃R
XًT(lKFu1F,?\a1d&Q*Μl">Zhp(kZpG;{;JItWhoBi^ 2n?Hqs?'OAꦟL<}lM^o.geW=%U|OaIuUS!P\jSc[/EVs5X]tlյ1o6 ֱ=aox+=h.{ݲ[-{MએMǋƽ]Cz2>@#z*N#/bv1F,!٧ۧП	/OG:v(1bt/
&ZE=Fp15N~N_~.YnlNә,Z
MvaLvJ`lNlȮu	pvvn-y^wȑ<D-f4Dob<G>#*orB-Τm7c@l7y1!6yQK`T-XXc8c
3S`c0dXF@ |8@FSQ>Ho>m&=
?UYwXeFv\v{,	&dw}{]^SԟՌi8 38UN	7C6^ƮաY[XMؙU]ZUl2O_~Fdu[(7Io=
 Sa	jgѨ£j<Zk4_mQ5#*(3բ_bĿ	{"ͯ|afC']/\"v# F^P
GDIOζyxn,s bcxpcĞqAz%Ȋ+\V
_n.QV}MbXV 
GYS!5n;˚aاY!N}5[t#B l	,>5ss诿QTTxfHLތt	k8*G4Bn 3..$/k.w/z9zic@I+S	?-'lbd?+GMJTR?%'F^ëi2-5@dFi
"[c&wTJLw-<y3[ћ̈Um5Vd_oiKJ |2mY<N?;&"Qg>0SOBiQ}u:M")$u?#ېe\G~!cYY`LdkBяsZ7fkO|tG,L;FSV|,FMjY/Ro[_vcrZ]Nb:P$+˒ȽvP&4'PKes   '  PK    A             Q   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233FieldElement.classWksU~lWlrQ$5BR[Mi҂UtlӅMnJ"^x(dd?	=hLɾ{y9?g u UppK+#g|!OɆ)lNŕT_Utd'i2۳{՜j>"n=~	k 	h<)%+L"g*E'C
YK%Tj$exR5\ƜQ'`ɹL<iJFzL7RM5AYY+(-jV52[Fh{GGyԢ]')<h}\ߌ6`Kf$U0|6nжܑI=-';BwĀ!+Eflg8- >K؎al)T:w	p[K"	UPyL8Tc\ÝA"?ݝHdXHxQ_iJه%nV<PH؇NH)" 3+`4<¶n]1ybeNk`?<z>]HQ<v0(aКR͙8$0c]kIG$f#F
V8c"pc4+O4ǊNhx5Q0jByZ	+c 
>+AFR@]m9?Tfu픖kJѕ5#a
*wI4L=Gidmre=Icƅ
ΔP`ncF7E
ɼ3x,(3l s"^pltTxQ|q"њ\<F.KSNGxZuN)cS1Y%TKR(E|XΒFY~mF3uA='Cj߼iuVe{st/vjJ'VQ峟0QGi]1H,2Hφ(cvqUȹfT\'57%WJrޫɆlm.k-D bW6ރe5%EnB
WQMKuշP;V_DE#6}o{kQ%~˶n&)b+B	G# `Fxcie|x})DxAD+C40+8t;]!3Ko⭻[q[~9b-Gww qa-)vPt-riu#eg9-":o!4.>qͼhM5hi0G:Nyj-_IVc6" jV<1X._}EAP<]//	H_NMq򁓱^-;l6HrxϖHo ;!,YmF({9S񶙊e/#n޴
<v6P&KUfڲTOVR'knsN_WEF_L²p߉c{tٙHqW4eW}Ϲl#XD#q/DC
<VF1+OsgM;:^}}LQ|c֯PKd	t#(  L  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233K1Curve$1.classTmOP~֮e|du(Y0+[Z|(
c?h"b4)(Koݽys=~`ATAFav{2LWW҅+gWtWXq>7;La1jC_)"sb^vR9GG4jhB3CϞW\7^n+gB2U.3DS8☂N$C^PA5=dR鹉8%֪N3ԇ{SvR9QjY㦨ˋ
g}-1ϩtiH!p0KKǔ<o:~n
YzUI^jƩٱvj5>.ʢ/<UD^$+ًS	ǥk$ʮHUh5Й*īa$X	X1anZ
ck}u2<7Jb܄}# ӊ%]Wh^M$Xj#hB4%͙MLnJ{-~K!
<N `C?}#dy*a P)>`Grƍh^dཱྀ[I剴h[{6դl` T$:=z:אַuI]i*mua(Nڦc
"LAF\ľcq&õ*o-JI.Ul@g%H(|M8"hM;$<5j.
M?N6K=:!:6_	vPKQ  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233K1Curve.classV[WWN2Ʉ0
*(jiM$D#mq20:Й	~m_PԊJյҟ}&`-%B,ș9r߾?+v|-py`(l;鸪{ɂ5V@@@DPCˆJv̙MYUiimov50$tfgZ!66P=:NWaT$lv#2;o;8iМb$COtTDV=hjFvrv1GYZѵi6xJ؍=!͘-0mbCw(+bh`!E61uJ(js^P'#}с1&K8'-sfӅv;FdIq%!:O/tJ'T[GO:ܝjO7hNaQ$qVMbNb&Tu,Mqv{ec*7XCS5KnЁӚHP|.%4	)$iͳ<)RLREp$?jrø^C`AwY]S0RHpb0z-穵A\C/E>ŭE\H ǔ\&4EܽpW	PJ5X_0&	
Ϸ촴wP)BGCEd/CE'Ky9<
0P9F:ˠ.2'4MƧ7pS.aCc1
ۑ
ǦZB[Yt偑ͭm%QTvA!I5VtPXʢ[t]5-vCflG%D2ktb֑순IR+NTk%Ik]EdpeEjEՄseK_Nrp*y3&VR3#p*4뚳ƜH i&Ԩi[["@IYV:`7h݀1S%EFtD7DAݻ|IP.۶JeV4TH~셁`0ˇYk'lCNȢkAz_FElUcرX%¥>'>B2I.3V\{Ł
wX
@-qGkݾ\ZK@;;WCcԞ",zմr|QQk)xȧ]ρ7ǲvUFEh-h<(6vxbPS"<vJ_֍H^hU⪠Dc|)(<ϕ#Ù-bÿ.#n; WeL]}|Q%S¹>bqb@Cb59D(`*߇F(gԗn}`x)PK  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233K1Point.classV[s{moV'(",`c	(dch;bvG6rB B_x\T'_!Y9{v%Qr!v>}zs"1Z^)7^/ǽMZJ03Q7\kީ^3Wyu\e?_(1yh-$&W6
/yŉ'ϟIwO^pveoxWVU?~ҐDj%m"65Y
nW*lcxT۳Fʺ@$<n	'y ^&&{*`?C$k%MVufQgnlY߾XrR"^oU37)>"IGz֕ ^x&LI<be5۞+UE`7LMIf%~fԞfz?yMu\)ae+7$.c-OKFU/;{S7|sg:ݓ-K\ciZq8ec-oJd7rsooƔ:Uu}%h
9^tzWcbm}լU?x1?woJ҉'	Ku]6~/zq?
Lc Z+"xp榛Uʕ}g|c|FffFkfciѯ+Ekj9 m4tn{$Oໝl	D$
=o` 8F*zщ8#
A?,MH
CzC
.PJa5;p
xsĊE/@ӅȄUMJ
m#jlc=b[wPpQ?J~D狛8ES_E4u "['[[HSK/)G9v2W +i0As%0ǑS 3RͻpqҾZ&.	
O*:rYai$I3HkɒۧbnVR$7~$) M9<T:0!Q0:0Hk72o,SY#	:en}RCzm!PTCd PGK<3J^eY{X
ۄ߰2Ir8<Ȫ^wsrf ͩTMsRJ\Cc*F"*}.kW
b;x҂cLW!qxOAtn/zAmbfx0#;TÛ^z#z2ee\2Ya2ѬM`ٍ`@iŀ
i޵
X6a;TԨYv=,HRIZ-ƕF.5ިٹ4^J
5ca^0H݌P(YIsa$S߻dL?Ɖҿie_,tY*,亶Ic2Gă+))hC@yM>A6Gtb#tNiw!E?[BSD CPA764cVT; H}Nub]9iB`|~7^pi>ݼsi6[3`i7_PKh    PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233R1Curve$1.classTmOP~֮e|TmPPd :bbre]kڢ/ſa_LD& ?EQ{< FpDHdmgA-]z{]zvMwiZHt
0(e
}DUC
L)[&43ļJ꧐7s<+86z7Bm?X|8]ZU*C4QSp\	1tI
Ta)))N4Cc7eW-!)͔{X
:F 0	ˋg}-1ϩhH!0xp0KOǔ<o:~^
Y14z揷%ynqcPܻ(Ty{KLbOqׄ'ɂէ"("U$CwXǍ<,c%b!0*XiUk!aU[xynTD܄}# ӊ%]W褫^M$Xj#hiKd[3'2}kP2kh̬;~MQy"  &|{!ooJs	ќ}ri>h,SlR~4Tߟ5evguIeo.ILLo ;i)09zqcwFM`k-T\ە\Kzm<#y?m7ln
HCPh	w{qƷYjm-х4@$/PK7]B  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233R1Curve.classV[WWdBTZ&$\jFlq{km_PԊJյҟ}&d-$Y3s콿}9<W =ZDQ8KȆYP9P@*(zppIfȯS_Up$240Ϧ卩t:3eOW9<W3j4$^2sp0by-oez|"v%=4ba?ò5W3o* 2,wm{g;Cam!%AC
yI.sT"EmI.YvoiLI٢UBN /20vI7N0hw,LEH8K&}H<EH$po(
zұdo/8.	'2m'|!j>y4ϬY+&; YMmn7t
Rz32a	i7z`'IźSpw0#d8$ҩ`2$g8姎˜p˸}H/W$"NT{{bpxyaE&nʃ42\ϴRf0R-n(.xMջU:s9&/_IcMqY^'l(&<᪈I	Ǝl{fNeĔۼei<!dpi:WAqGdϷ95ƧyqSBvg5Ô5Ӡn{2X"<ۤ* $<JAT{
vVeiX!kfWSA&x3tb֔qy1WU3ԅJXKU_jp.j(Y*By>]țV	P[j\nIBá2@	YW:7KHGU=,@WjL['xdEQ
ݡڃHRoQRFb JҰ宅c4<T`HNtw_]hm&
]y
oƟMC:h[GZ~#=sk8'R{N#xq{5D-'57p5}jYOuo@ȭ#q`0`hբS~]ֵPm&0W ؚdS[)F\sҹukw+6A8I'L6S"*L/Bŏl?@K.޳{mrbU`P})hMCGG~\vشU

ϣq9sC:QW;:Ň
wGr)7v}r.C	=FOo	}8u|>fe,ٜc|rG8N}I(	<PO#zPKW  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233R1Point.classVYsF X`8Il"Ц"%^ږ),
),qH%e)Qe%L*U%?Gbg!2Uޞ{ÿ)|1D,D%b(6[ךJjD\p+3^#r%5u[;g6[[T/9ϭUgknm<q͏/6{k-$&RO[Y<y	$/L{
wulU
$"i$^4d%r8. >8<4T_;o3SO79SnD'$0g-<'<xHom5y7%^WVz`Qg5f-nn1%|K_`/İy˜f}Uo˫I
ѥn|^p-t7W%^cdY/0n:,!0f3xJغZz)Vs:sx¼p;Ijc4i#E\ψCB,`YW*VZH\ǂ[^EGrUb9v٪k+#+~$Qdט,tT%\͢ItיgY=5ÿ
lѰД^i6(#frF⬷1
5J} VhM`:7nI| ʍ!sMbYݬP'{"!8S@0s_S=)fU+i~|c|Fn'^X%
wS7nkV}}x|M?Z J@|P,=}9c4'XBE22Q|$!hkb
IHokQV{m/,0H_Do|XqHK\L:QmcDJLL.5i"]=Cτ#1sj!޾Xlc8Sh. ";H45 uyr"W&׉&"nXNrqn@B|x'/8V!E'murY*<qH8KɒӯbN*+Yy""Ith)ĠԦdՀ1YvF~L;i?tdFNeUDqu<XgH
`΂"6<Nuċ$׳ʲ%#j&5.6ZN>WTO!"DVexoޝwrrl ΩlrUIwJC<5;F"* w	'F-3t$b,w!{X}f%67tûߔyQad!^t'޿2}"ZL9Nǲ`m"1#̸X%NY8*(FP7!~	=T}ZK$-e31im%,J"L#i"k3fuIΒ`9MGY~iGy-C/#Sڏ:EfZi61]T1ew
/Tʽ'jG7\W}@;OްjHQͦ{z'A0Iu_))]yؼ15̪2|0*ˈ]vÇ=$A{ORf7߂ᝤFV"?[b.1{&~w4{䓨PK0h    PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT239Field.classVs?z^ba2ޕYlW ҎlіE^,Y<ED4O}ogLfxCOI/}}HiZwee
zy7DtM"Y'"40(Q.vnR?/<6~$u2-!KrpQ)mz9
V>CuժWz
MrwYlɱ$OS'jQX.?ne,Q(M.^m>vk,2:h珿~6`䵨8uWDZÍ;բe-e.--V8oYtKdߌjU>D#>/rXV6JbYg~1bӼۄEg:n$MQ7%x`B==^3(;ӧ,:-6u.g-:,UtѢK9nZ9
E8Feƽ{#7;>}DO3j_0DW,cKE.?Y+K,jLؤk-O$t u~$~l
n-z#G~z:9u*VY,
(D,`zX_àK%f_W+`׃D{Xp|o9Qp.\[#Km(q{Nf99jcɹNU^^ā]_H!4^M?%~&/-;c8ޗ$CIT2}@xNBNWR=5U4O|
ԎsmD遯3exFL9` G@cû0(6dW\yZyd,LہǇ|F_G5Fh)YbvOzۤ @(wiP9O頟ۦ=9Ry!wlwuztZ^ah_ik3\?C=#7?m=(:HmbNL
&Mxtt̞Mcԡ9<%s&9/1ǁ=nߎd.Rlqfz8$3lAATW0lӬ`s~pY0\ThLb
2˵y2\[4W+l\ŵN
Kx%p83(ƛxS\a  UplrFj'TNq
0aN0e57|;p7aJ(a@{ZVw)ns.G1/oa}vyA:نG[d5j
4;0`c 
/ED̀yCv^8Ot*343NstL]xw342.bFa-,7RaRCa!i\x^>Fp}f+,zQ)ɟ*vchư6EN%lW ^	|҃łZ#\[;qA%/#sXyZ\	ȹ~/r\{\{=zEyȨssPbZa4\ݙfNa5n8s:891hnsH:}$s%98k*-E-6C͘Wŧ;
tkm6ۻZR4wzFhg|5NAFMpJSbN954p98#Oͥq[,z^.TBOղ6hF5)R۪Ɗp%4#2U=+
hrkjR3cǖq$ȃ
~uu4ĸM&RZ;=Ο=$!$@na
Y+/~3#|MlB>"F>ݸAҺ?0hOи_9=nΖōb2U+*mk֨\ŖSZiEn9i"';{I-z_DED:>ZO'>APK4#  ~  PK    A             Q   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT239FieldElement.classWkSW~\6rK֐FQUBV$KX$AV{Eme:33-fL/_=KD``罜/؍oK[^;z&rlx\IŻzTEKwkJVə[;)5+Oͩ~p |HXI@iyJ.Y9f9S(:j&WZ*	R%a-٧2済[,uMe	MS2֩g
,2auM7MZAiRs馱4Zw-<j404t^l}Ɍ

ږ;P5dsG<Gh[Y7NK0-b7xPC!,iq{|6> R"J.psBDB1jY"Oxyg2j(zm{CB+vu3?Ϗgza K	`/TI}XYB`ǃ
_v"4EJᇘ.CuG{/[LuBa^@:Q`Btcհۊ>	֔{dn	Gj`g:='10hDWq񔄓)]ҧ9VtDë:QV.3NYYW9	2jJ2k\U<	PK9j=g$hL?.kcCt.+iNB4.V$Dg8vt),%|W Mf$dAdp%h?	E\񒄋$`=;u]1Ҹlw|愀Rg	rYWrL<1$'5:euuNQaR/^"dF1-rk5#($9WseMS*ߛkͤMmwUTX8򎢐(=*"<LAbݜAzOsB5cUy$yZIQsSrD.]l
ZoB/vn3=x__pYX蟨AJZ*kw[--⾟Gޫ]DH/[v#YhHp]P,tp:B*`9Vf	h7B؈7D2DCW 5 ^;x#rv-|VsiE").Z7Rv+6Bñ[hm0̋@Z}V2x㤖gv >@7}X^9<n#bX1nno߈EnAOW@
"de|9ؐU*TDl٩el~$l{ fրm0ޖE˙T,}pӭ
oܴJ5V^R7 Ֆzz!Oq;7ڈ:\謰,X=]YLzݖ^׮˖][F=܀=fYXEY?ltphqgTe)Ep3ۏ)Z_PKIEK$  M  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT239K1Curve$1.classTmOP~֮ed:,Q\ʕ-viDh1~0!LIO[D4Bswssϗ?*DU ic距}^'w=SeuaƢeݥ0{/:KAYf),VU
U3T3Cdf4Ԡ!Kn[7;z8WpLq`t č9slLj*y8N│
0/1#'rR*=3Ě5Ypo.YC*53:3>8Ǒ|9aR,	s~eayq༯"9㢂
)z1Cp鐺防aY3GԐECm]+T8;VN`:EY^b\xE{~;,<tM7UZA
͠&SxLyx42V+bC݈e[@_5'FQL⯛p;uvaR8`YɛuV	5Do1 Y
F@;2D~:|LXkJsՙMԽQ%0>@=Yfރ_0wT[HӘhNNop')7=-+/cќT7&:9(I)'cO_LvYSfVWUv몤4Yd6Ѵpv(阂S8%m|'nCŐ͵I)]ī#Yɳ:1
ЀKain
M?~&6KvmY2%Wpfq;PK`|  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT239K1Curve.classVSWd*((jiM\Bj
YX
4oASNg}f+t=|.'?
_02SQЕE6鈪Dx!?CO_2JIiU<lk`ؓNċd25f
D"Ψ@ "$	;سneM+/+V2:t: SFETnד[nn[oˌQGPܵUlEp79(֭MtKR99WP'}H%aycfXpcЖN /20a{G%ml]&5~:ǻةDKXk p\		41yʎ"jތ\Po1H*L[yM:ToSnF'I`ju63ލcCL..STFopIb*FO3x,TFʈ\'9Kij>tо[O $KFy
r!oz^".IHcĽUH1Z"0w/F%\UR35xE«xm|dHmm1PK_щdc^6OBfC9,T"57UI$f8nI:nZnTCTkC']_ɵ<; ĩJUg5CYt2F2klRiv	Td<;"gsxWGJZkEdpE)jEՄs%/gq81|Jފ~%r79ZcN
ficFsԨiYJaLiyR0Rb]=,@w 7u
;EY@ӑ._փH3K9/)j>MS2XwIaE*$/Cy0,}œO6~u7hdu~zFU
weW+flUK[p8Pz2c4.y	-j":%_tN&ie+2ˈݳ9,zh=M p{z	y{H{}G%C g:Ts9?|)uq
_Uj<FZcza%kZ%2Jw*_!KwC=B]EFwJW#ġ-RTxՋӾ+:o3kףbÿ!.{cdn;m?Ẅ́eL[}<OKħseňT?l', S_Zb.PK!  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT239K1Point.classV[s{moV'(",`c	(dch;bvG6rB B_x\T'_!Y9{v%Qr!v>}zs<"1Z^)7^/ǽMZJ03Q7\kީ^3Wyu\e?_(1yh-$&W6
/yŉN?AD?VʊL7@!1!~KKElj9	4T?+#g+uHU#xOtAxWVL)<MUbϳHKD}7j͢D	;8'x1}9xտW=ܤ/$[WsR39(M^;3x#*k=%1Whd[Whohb7^/-J
{;m'.,I=/<q@'yMu\)ae+7$.c-OKFU/;{S7|sg:ݓ-K\ciZq8ec-oJd7rsooƔ:Uu}%h
9^tzWcbm}լU?x1?woJ҉'	Ku]6~/zq?
Lc Z+"xp榛Uʕ}g|c|FffFkfciѯ+Ekj9 m4tn{$Oໝl	D$
=o` 8F*zщ8#
A?,MH
CzC
.PJa5;p
xsĊE/@ӅȄUMJ
m#jlc=b[wPpQ?J~D招8ES_E4u "['[[HSK/)G9v2W +i0As%0ǑS 3RͻpqҾZ&.	
O*:rYai$I3HkɒۧbnVR$7~$) M9<T:0!Q0:0Hk72o,SY#	:en}RCzm!PTCd PGK<3J^eY{X
ۄ߰2Ir8<Ȫ^wsrf ͩTMsRJ\Cc*F"*}.kW
b;x҂cLW!qxOAtn/zAmbfx0#;TÛ^z#z2ee\2Ya2ѬM`ٍ`@iŀ
i޵
X6a;TԨYv=,HRIZ-ƕF.5ިٹ4^J
5ca^0H݌P(YIsa$S߻dL?Ɖҿie_,tY*,亶Ic2Gă+))hC@yM>A6Gtb#tNiw!E?[BSD CPA764cVT; H}Nub]9iB`|~7^pi>ݼsi6[3`i7_PK,8    PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283Field.classWS- w%lxHZ}
-$a|:N0.+'UC<TJT_b*LwOLt@D:A)t25jik=XN\ȼQA;)mQơ,9
vփr\ڭW+fvSz/X,AV<ةmX۪W+;.h?:28֮[g9:Ihdw*zE9M=*h8k
V`ίOREgYEv`JyyFwJ;V6Sܩiȡa&oCgimޭb=Qzzg+Vq90F
Is9e|LmUՆFi{",sr7]v
}\tŮ9t:B^phLxnIEaf;:"o?,>jmAnΟW4.8HK0X7wuˡe:ۥ5&quD{\c]*Vr`w>1$lbrD5(.,'.*3P t1D]e7϶
5g|b9S!80jLmk^ڪ)U*r+LmE|"K[@s_AN~k.U,ʐ@&.KK|cQe+aӜ*Fv\؉9ǖve\nGF=6:j3(hID):Ei"pd^м0¬a6/H59&)00O)7x *ΐg0dfYxD̷];l
 ,WE(a\>f=1XH
{l==]ncE%KD9/F= o3 = ɳ cj$z~_%o[z
:"}@w@]9=tb'i>FN:,@@ OgV?й|.>o䘏1@]0cE1częcofS;):x;N'^
]"WYV?ls$]G-֧Z^%0i8im\C΋yd`p9NPpҖbmD}57(e`l25&2Ҕ儒JNr&t
JN(9R9)r:tX.rJ.˙Ca1G9JQb谔%R`%{!dކT^Xjt\RG
H/m~;$31w!VoZ]YmTdi?8iqXt&ShCCO
44q8L8-ũ8¬oZ
H+ 27 ="^Rm~f}
}cvHZĈ]UD;	M"JӉ@OѓD)ܒr$SLʪ?:
@wѾapqp\YU8:Uqt"=njpX\A8	F ǘ	Дiq1̊l gCHƄ	mNѩPxSv	[6M٣+,-{T39iFpFV<qCJ3Ϙ` hJSZה((MFԶ~՘Rݰٴ.⻪A8g>:@uL#F
L+FMLaƸbUBK)L3
Wiv (TuYz~E+2z$;J*;ٌR&@̓*-2-Q'{~P/SXC r2F
@215S8!!H, pO!\,D a	茯3`ᰱ[#g9dg|6
ay.
=ߐ^Qʑ(3mhprLbi@;x5䢜00Y+k2עyߔc">-,L)(Ӏ 3E9:fAdn%9+_9<\Q3Q2z!}Abt^ -jޖQo׋ғ3Q(\rU|[+Ipd)rY犬((\뉹
T+Iu~t
ԧ@@sw8([&{dg4%qor\䄆1)F0ܱ(
ą$B_`G'k͋}F*}p^Ieʢ:?{u]S[27nP𦅧P9i%6}~FFVRyZ/y(:{X\1Y\T+^?PK?	    PK    A             Q   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283FieldElement.classWsemslJkA4i
\(jJ/iiQ&taiw7=PD> <hȌ?GϻywBigt2>=n_ŷ!#+֬eszr.)35WnUR]QtkGǘirnTuzD'x< "B6@PuFVn)i SM빌`*%lbj*zښQ.`z:4%-kF:BM*saZrJӪƳFÐn9Zxefd7.YUOkEB-
صbF9f&m	8nd3dpGEYho	h
_7NK0+d'_v""ay{<֖]IC-eHcBTBMDm/28dJ3Y@5G#o{[BZ]0WTH~xBNQ*>,hg;ȃC8LDh",0S#kl5#.	,@&Y6Ǽ>.!A-gT.IeX{zOD?ku+H<!KIþ#vZL8,IZBPB8D0Q5G4AXd=4+X'Y	P̩l(L8&!	;v(zm\B1]aZU	gpz?/꧆)H833ӡ@g
XnZS%bv.<'y';
txk!񒈋.e[2T-aI&ds33H4&W:X<tȒgayLc<#;wFX'ه
bZGT+K*<DV8V,x!UN)@
0scI
ΜzAStYNXjvF@;B|vf8_r2i(&evRYeW:
9̢{t`쌒J	]WNM6M`xg7y/vn}x__-?Q[x
ߡ6NVTBo"u?^20JDԋ􆁠mmאeVَ.>nL(AF\T,?nJf񖋈WdO<t!x
Dz]B>f;[u[~q&TqC2.R6CVNs4-bmԟl6!rmhդkk-a?pTTG޽ -Cy҇%ԼDE"!Z6/k3߈eEma_8?,-I>B	beP8@.9PudW3)dt$i@':}yMϹU,	>[Zu7R&
˕hdbctEu#:3ͬ
ï竫ݵ5sWsXF(9/gX|
g]&;Q/_r=9UZ}R\,PKF.  n  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283K1Curve$1.classTmOP~֮eEe:,QtWص-Q/~Dh0S$Q<mKoݽys=_~~`WATAFav9{2LWWօgWu¸;pqF~Y]"7La1jC_)"qKЀFW]}cƑ!Zp~Okspߴdb+VŻMg8#
419|I qV
GpOT8Ďk8ޔ]<T8^OX>Up R\4f8:pL✂n
)1Cp(,_{4dq/mK*U3N͎S(FwQ|"vKLlëKd^xӕe]jlPi'xXJpB04Yik>aձ(i@un.\؟.@
,K8ypIW#A&H- K!hGтȶfezנdzPYG;>
Qi" C?"|{~	4&9)kNϤRcŅX4&U5INJRJؓSٝ"Wdd{Ѿp(阂S8"M'nvVCŐ͵]-mī;Yɳ:1w
І4	O
l;t7&Nqg|%ȬFp]KL8DPK_  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283K1Curve.classVSWd
aTPPiҚ4$@P*D#mq,vivBﭽ/}jEv:ӷG}f :;]ΟO
@;b8fY+lZ95<+[3aU	'B~^ >JٰIiUiDw2NLH3(Ojjn2SgUÏJ=,+etzA	ޭ'
M~n@9m+vߎcZ	qSܵEElEp
5yxGN:)jrL1[1$K8{F݁w6w	x;yRB>!p%|8۝&z[:;:d#y=hEXk<DFÉM6,-VuŘTfzATgkp	MN֧|S
p`<Z){"b`I؃[Ճ#3]3>Ř0|e	p)Ȥ8=\c%
6F°<5TY\NS~G%]$FC?`'63Kps
3|λ2^qEB园]ӪuE^/MaL5\'@)\~W%׷՟ò$*b"0ޟ7%ǼmB#UN*GJgE$a8TnIX.uݴd2FXo"}upt">2r؞n*;/g+9CW!Xʢ[,y˴C鲥MK9&R1m!ynTH!%W:%S9$*YJkKRʋ	q'=˖ܿi8@.*y'&VRSkpUh怑i֒sW 1C$M3GiFMg:+
E2)u0nJ1(ac K/+j---f9%\ŤxN6MʬrÅ
i8`ЗsMP>DEoMx

cG|b*2!Vo5P=s8
K/W}F|D.3T]ŉ<LG[
YĵV!dV}`Pp8Nꢵȏ6֦S=={ޖ!䱀;dI"jZ9@str=b})uqM_Ujj30Ցtj%[>OjJC]Bʺ5DhVbDD:%
OߌgNcZo8t{3)֋1;᪻^<Aw'6cL^X5U">c/\s|!.6.Fԇ/RD+3nChs'8N}eWjkf PK<    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283K1Point.classV[s{moV'(",b`c	(dch;bvG6rB B_x\T'_!Y9{v%Qr!v>}zs<"1Z^)7^/ǽMZJ03Q7\kީ^3Wyu\e?_(1yh-$&W6
/yŉϝ?AD?VʊL7@!1!~KKElj9	4T?+#g+uHU#xOtAxWVL)<MUbϳHKD}7j͢D	;8'x1}9xտW=ܤ/$[W󂄻gsp#xQ%6v0&MgFTl{JbVɶ25n&_ZvN]X<R{s_yF&_5qIUސۏ>+K,V\o{M1[HwO,qkǉJx,┍U\Kw(2lr# F.,ͽ]Y6Sl#V)Qh)пjw{](!VV*PAC)qK'&,u@!P6xo0Q|Hh|NnV=&+/(W]Md=-ENmx倄rZӵr<vG'2?+K OP#Gk=XF'?|s4C$6!7x
*C*^;2sϓO)l+ni4JM"nTE71N*%L,6я"a#mC}GC3MF(y~.N7q$hADOX_0S)J"rdAVN`l$gys$:FKa#>Ag6
4wc}
M\t*NUu&d<IfT	֒%Od>Io4HR>rx0u(Y5`B`7t\anFe6quߺY
#*GhGQut;C^xfbѽʲ	-rSſae57}9e
34pxU^~O48R9AS1NrMJ6LT*/,ET=]g'Iv2p#B(>F62ݎ^,%!0#;TÛ^z#z2ee\2Ya2ѬM`ٍ`@iŀ
i޵
X6a;TԨYv=,HRIZ-ƕF.5ިٹ4^J
5ca^0H݌P(YIsa$S߻dL?Ɖҿie_,tY*,亶Ic2Gă+))hC@yM>A6Gtb#tNiw!E?[BSD CPA764cVT; H}Nub]9iB`|~7^pi>ݼsi6[3`i7_PKg    PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283R1Curve$1.classTmOP~֮e/STmD@`2"@H~RlkM[0E7_`Hx"*2ޞ{O{ U!IÀ,e<1B/sC7]..M17?՛_vVD{/vSX#g=`
ܸi	W,=cđ@:
h`|(čsoG3!h*ylpZA3hbh?뷹GU)Sb-Cu7i,!OX>QpR,	sqeayq₯E"9uN
)1Cpz(,yTwiȢD'T8;VN`>EYۋ^bBxE{q;,<tM7]ZA
͠&:RxL{x82V+bre[A_5'FQL⟛p'uvapZ7
mt5kb KvdL~:|lCe,ӽ%ӵ6NQ%0>@-Yfށm_0c`oTq;99nRn~.-&ZW_^EsjRUџMurPRROŞﯮ5)&d#Ffa0Nڥc
"LAF\v0QZC7f(l@g%H(|;H]4	O
l/t'&L՟zk}%`]Y "~PKt  f  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283R1Curve.classVSW]Ɇ
((jiMn[ 5R˲@4div־GZ[~=wAftrwys<O~
@߈a8jfBBQ[T*9՚
Zh ^(- ٖ_[0-c.dkVF#Hav ]ޘ%340q-rS}N/Z}>P'B{:gt<iZ%Ut2=1
䲑/Z>ca?Ò};oǌ1G8k۫
k+8,njY,-}F/Q><܊4	xQQc;]26+[v6w%	x;p'Ot"%rLܕpTI'cDLVxt M$!	8p+|!5cJ/miJY,N0
jq&73}"S+LόHG$Dm'qGs%&xXI'	9RܓPT4uHH 6JS[F2g$2^͘2J|U	2RH3HϽ`pyг݌
2\ۤAu6wθø,u	#VvRֈt5]q7գ1APF֌_!k"%۞_RBCԌx7CBNLH=p托I僊)"M*(nL6pbE7EܒP^-uiEˤny:NG)"{*c}<BZO+Eݙա,EGF2狪gMK'3ktbR[Qu1Wt3ԝNXU_jp.jp'&Q339@UjEcV0T7Gsy@ݒ6/v9kY UmVϪaZ@:aTcڤO=jn0y?  8ە)RNRc4|T.R`(^IH4;O_yx
ld
b:sAи`-*Ԛ57*&*N<8wߞoF9Lz!֐gs0SrGlөpu^4Q"0W :P)H\s:\s̻e 
DG')ӊBJ5\u[hyCqUVhCr>ޠ;4WX!~QSBQ4uR+nWig:4{nDzV~VW|gvx5lk֠@uj^gs
^|/6\zFFS`~tA~Y9\}>zZh? PK*h  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283R1Point.classVYsF X`8I|6cCtK2E
-EZ!%6	,%'s%+U%?Gbg!2Uޞ{烿I>cXJ'Pl6&67[܉z96V&fg.4F06}ZJ07Y{kx7=vlܩ^s[ܺ/xgm?_lxZH
L~|e	e2_NO ~6`z}k3f*Pȟ8
4$1|iM#ZĦ!+qyyxO	$<ΙrK ?q9Q<cYxC|n%<^ r|3pg87kwvY(n |Q%>t7\,VW˞;%]],\U	gB'pxMuMx*k>#1訄E`wjb58Yxz+aZ<B6RkZ/	?$<#q6u9b~h%>~,Ut$W%֘c7zvY{?0NpOG?pF,q}rKgLU,}Dg!qYQ{eޗ@3F
MAfʍ2;r~iV ~yl$xp[Sԗ)Zo5}jć2'P/
u;/?	;ထzF>Ӝƻ~!1~I[1%죋lYu{ArMWWkvҬ_o5k+^m]".p71|fjewg=}?7A(#:Fs%T>,#'8<I桿!&ې\h`
#$ͻHxsĊE_Bd҉h$RbbrA?1.F,#vD
5GcB%Xlc8Sh. ";H45 u9r"W&7&"nXNrqn@B|x';V!'lurY.*<qH8KɒӯbN*+Yy""Ith)ĠԦdՀ1YvF~B;i?tdFNeUDqu+<XgH
`΂"6<Nuċ$׳ʲ%#j&5.~Z-'}w+d*Yͧ`"27S ;9T9~UTGl9*ٻRS!k^݄ߎ?sΚ\MH	s0һx=r>j
o{xCG]SoͼG02G逐c/u:Sa_aaz>bt-prlbJ`6wWTqf\q,^YqqΌN#ws(l>HZFKQ떲Yט4a%dw5zߙC$i|KgIw0H㜦ˣ,F@#qWڑ)"L4HܻW
z
*^~^#I+>Nĝ'oXz	5fSC=f
ӓR :Osty<lÊfNQ>e.MXv;aᣞu]ӽ'W)NQ}uoNo#Kl+?[b.1{&~w4{wQ?PK2k    PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409Field.classWsHlK16처a$^6vqHH!cV,*Zj>pTQCR9jJraO9r(!T(<߯=ϗ!SԢJڤx\yZƚZ~~޾PbmLJdٔ"[fknT;V^7*G~\xjn\Y_[lkkVqAr;rwgl%Ym*hsrq&ڔ#Gix^mnv؀1ww{?Iy4&}Zկno[±3
Y[O+i?[[tEZeuuNetoݩADpAd|^UڈڳjmlX%،ˉRd2&iަr؟c68-cSž`E7zGLM 6=RA=kXMYoʼp#Z5*REW]]Bozg[>8̥#K5~0~Ӧ2g@VڳJctVEǗU"]rqۦ0jscRm#69;6ݥ{
ktqaybh*¦>Nh8K'N)J_m6ڕFv]Sg \e	~tRyIlȼH
.BUWZj͠
FX7ZܓQ/!=	w9zLpXv4-ObRBU]:_'4f5HV+KIzHp6	
	7{	\P]T4W=)}Ogp
32]L
D{\X*ąi~IiwM(`֤ȿhDyѓG2p8x8/>=oe*{S	]xNCCW=h=i 8VOx3Ap00qh;˜isLQ@p"DGף14/WўD#fv#_rdȿ)mPi:(%wo)'z/h=:r;^(=O}o0vUpyULÐc!f6UurPQq*>0 <]gYs_fctC2@reTTgd%.\RW~iܱqqS|Rθa`V (hJP*2n$@]R+L!P*Tdl,Tbd .eĬ 0+t9h
BC867ҥq/lғ.glgٮNuN%b
;hatGWnxTf;Y1u,-=m5Qs	4
	FJ5NfBG	clW&gC
@",, .͊.@i{(X$gs4iU'J<9"V CǇc^&^
!]vW{d*_(ĂW~czL	mM@_Nn'oaӨ4
 P+ܙw&R;3%;3-;sT1$rȎͻ"헦qz:(2!3:IYG rGʮ	=C!bӒ5@uĤdMPs]gBLH6	jDF]gHJ6u>%.JLݰ7Hcjmt98kvv^ù.v]XDs37I>]H!#G$;;ig1a9|npT=j,-Qs0^Ҿ6G!zޮ	X@Ifm||ܐr-XaD+\1+hŒ+`%rEKK`KY;	*	ʂeՀJL"	@B@AXGb=!Z
z6"4@DF6b-4F؈=d
vȎ9$BZh/b7KFaF\-鑥^ľXÌ47偆k$#0"<0b
+X13^IaC'	:C#}<o }+
_cʎGL8L6Lq8 'E#	3񉏗K&tb13tu|3"6_Fv3s_k9ܓn47mJR0;'3BTU"'T<^vMKOȩG?'PK1
	  m  PK    A             Q   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409FieldElement.classWwUML+6ւ(i(ek(Քn
Ң2Mt`2ig&]PD}_p\у_ђ#|z4Ӟ'{no?`
^	>x6'璲iiJ<#[q%Q-խ)Ev!'֌ ~UW<c!3\rXM'tKI+1մGHW>EO["*lk'4MIZ1gʤf lmҨ괪YqXImWxad7-jUOw0kQ'a#6	ؾlD9f&m
	(;md3d븡%Qh
h[Y5NK0+d7xPC!"y&> [mm{"[6HSACTBDm/24dK3Y@5G#=!;]ձsf.R1=bՅP84%n?wN	qʉ)yYfDVYMF2zLNImY}\BCZ2\tcCVFW,#]9xBQr}g*5ힵpDvpO8!ac«tS+mbPj,a]̕g%]1r0Ḅ$*
H!mkᲂwaU%Yh
 HFN'd
m=0M>6S	&X>ݴvkN9
j\xN8O)6
xwzp`^K".JlKuRxas&Q͉lx"є^n#p%'˓#x#;wFY%CL:K1êU%1eF!ӊe3A)Eafnܾ='^To:2:ym*ɽ䥚L="(=)<<LIb]AzOf_!㚹?$)RBKMS!غ;<Mw^ dL{^W <9zBT ^C)-Pz'*+oh,~B% 
"a hsݵYUby<ς|[6yQ1#u1մ2M菨ϣi#\ rQUቇ./_^ϼKȇCLxޚ{#<m}H\X΅^ݙ\{hDgb<vFÉ[hwt?'N٧xcE\#<(eӑƉG:!zݸxknYc""NCLgkm5󍿅o<ް/c(<j`̕pȗ\5a1<2#;b<YϏ*//@v I0Hbt1]oWo	Pl~UdbO)Wʭo^/zIFJDq
 V_gn۸q:;:Kͬ-_qWWkmz+ȾW\c,byc*|yVv8[7^_r
1UV=ʩ.\t}q|
bPK1  n  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409K1Curve$1.classT]O@=n`VPTPQʲXuQQdC
%mF_LM-(i3B;=3w> 8K
H Aѡ"Pyk[v{6BGX<Z¶ a,6XZA.w2DLh@A|QhB3C*ւ
9ثa2lGJct3&Xske;~ihq k9bA1{G3!q1ޛjn`ӣӣ8R<5t1B5̍8bQa8&8ΠRD	УD/k̐-::<StqlIf֍Sc8
;Pܾ(Rx7G"zs"~@d^}]ЉjYWS%8XX1}=#xA͝c `|%nWE݄ő;e~A t0$
C,R#FNE3鯐mZC1= MI0 {2	{
"
[kHS|}8dQIlH3:?J%lОϦo[elzڟzxZ^MgVU&s
tXS6)픆PohSW}!v~]5՟l;V(Kjf>.3RShGbDWŶPt6pT<ٷ~HW[i!DPK^04  k  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409K1Curve.classVSWdjTPҪ5	h$@Aj
[,X
Y݀hsھ>qJL;
0DL;{?`8gYTP0jpN6gLbZ.n	"j7+%Ue,zy͒77Hbr!09TyuN-xP'B;Zts_0b&ܧf RExky]+^E_5--zlߖq	F+iKElj	Dpr-ͤ
:kr|H%Q>Q@L-͍~AB3^d`28KYr]m?H#'CP(G"]H"ޑHt"p4#Lw"FX҃VqRB!cOh\2|P-(Z4Ҵ?fQSL}ra&73([;Om_j2ZΊNt14w{݅#p^	8O\"|E%ANo)(?1JPn14"KySkjу8"1tm#M7҃~p
ynO@9j@ӸފzQX90-B?%LR19eL"5Ey18"p7e/uj})+qU-XP-m\4yʣH-J7K$e8EK\-uaӠZBh\oDTltBf܎
xP'AQ3x^P\=e(4?MrVM5d*M9_Ӧ\lW*jNr\/IjՏ\#k+TF_MsjˉW
Ycoby06
Sfټf޴|NH0Iӌ1&Q`+
 deVM9uHׯ*1jaY-Um+E5PF^Ͽu':틚*b,/JeV:4<THN@gӗMWT>=DEo7	sU[e-X ੼D-+h[F8Pn.'u/@E}X=)YYA]`d#N꠵S{먧c7'Ɋ%ܴ^Z9B [Tr?v)u6޴!oWuZZC렷lP#i+*٠+6ޱQm]\{6yMvE߯jU8oqiNDqY}T1>i)<_zgnp[5MCl\vؽf?*&awp[Xg٣5b-ӏZIDa~LɃ|9l
A[?PK    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409K1Point.classV[s{moV'Xkw#[(dL.Z䁽ݑH~~x_xP\Ty˯,]IT"v>}zyx98Dqb:~֨Wq2~~Ro箷VL/
?8#p;?cZwƌժk^kW<~Op9D?_Ykx'N]8AD?VʊN7@!1!~KKElj94T?+cg+uH5#xSOstAx׼V?#,#{*`?C$k%MVufQ;8	߾XSEgnRg|D9%^x&LIY<f5۞ƫUE`7LMIu?ǅCIrxAjO|3=O)nސxl
ZXYJ-+Xpۯ蓼*l5ޑ#;YJɖ%4~8U	EQR|w%W曍vPnŅw˷Fc_mު:>
4WZ/:\]/1dvu־jV*TI;Hp$nÄ.qHw`_}q?
[LcZ+"zx榛Uʕ}o|s|Ffffkfciѯ+Ekj9 m4tn{$Oໝl	~O$
}'@qz5T>,p!9FYcV\j`s/9jIw674_~	7'&J'fưzĶC3MF(ya.^/n4IN+zW]Ãllm!M-`46#SE\aIHtލGN}<lHin7=Ik"&T6<i(Mf*y$ %KnYJ},̓i|4`P
PjD,n ?"nFe6qm_Y
#*GhGQut;C^xfbѽʲ	-rSů;2Ir8<Ȫ^wsrf ͩTMsRJ\Cc*F"*}>.b;x҂clW! xϚAtn/zAm'0tH3E7#;TÛ^z#z2ee\2Ya2ѬM`ٍ`@iÀ
i޵
X6a;TԨYv=,HRIZ-ƕF.5ިٹ4^J
g5{ca^0H݌P(YS,'Iwi&~2ӥITXT<̹Y*umd8yWRR$]3Z|l~(LG\:ÝRmHM{~`虅tݧ 36olV1iƬNV92a'2͟%8=(sdݻ*ST_]MKmxޤ{åtVL̥!8boπ/|OSI>PKwE    PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409R1Curve$1.classTN@=n@VTTPA˲XeQQd	(q2Kkڂ_LM  E;-"!Kܞ{;ϏrHjPtH1<\̓"-{)E+iEӅ7KKdЖ%bZG2
r=s`Ȟ-]GRatPȉ>
u̎Wv8ZKc2K5^aH738v
uauybA1{g3Gq1ޛjn`33;8Z<G4t1ApG(0NZdP)̩4a5fp S-tFd>y34z7%yn֍Sc8
Pܹ(Rx7O"zS"~@dAC]Љj,ūr$XXq-xA]cp|%nWE݄ő˻H
 jk![@zCdЎJgϢWȶ厬WVј[C[gFSxlD r0,}%>Lށ`8s)>~@vƵdQIlD7:>N%l^Ϧo[elz:ztϚn-ˍ+JJW|:D,
J;!4eĎ{fͶЪjuf#꒘:k)%/HlXGO]l3iNB ?VK'{	y*t/2vPK9K  k  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409R1Curve.classV[WWd 

*^ZLnv2 %":DCf?з/}jE\Z}?>Yе:rfξ}'? E1*1kl,ȴLEL#Sʜ ~	"uY۱#6Lc(ޕvrju㊢i+
kE4+f
"F-pyF+cS
Gǋ*1,ie'mm0ekE0c0GP_,OpX
k+a3\X8/;YYs`-,&$E	paDŚ^@	=[cns_Ўΰqzf꒣JB\.2	5I+D,SLJ&㲜ӢZ,Mh/)t6rJVJ4)[MDBQZKŢL4' :)2ZcS,E̲a;rʼ TðVI/OFfyc4S"<*d	17(cHpG]9YQdTbXW*KhJ<t+!kݱh2fclZTЍ4ߪ4|v>u\愄WLaMPyZRdXs8e9_M |5А8ׁ0~u78'
	(n&MgPVcLi8/a(7غѾ FpIĨxs+|ZÚYHB}y:qEUgވk1h4 t,驑uUio7qMu	%Zбʶ`=pd4|u``0Kٲ<ۯ*( *F*tmʪ[t=;3cU
q;favLB(qN,8q>3jN\Gś[yF$Qʕ/\-b?8x5)D-5XtcNH
Ƣ=D.%ꖴy:ꭲTƔY'~˺>ҁPM&*"	A0LnQBwPƃHQngR\6+jIm
qi |؃idP#}ӽ~%h47w7r}t[BC1[B"Z#~q(La+Z1w3ū{H[C"8n
,=w	xZԻ.
8FkZ]:8߳޺jü'
O3]<j+ňknxms	zǲ~~)Mi7"*yLGpzُ[xjle.[=rokZIa6kLhȏknvqty8G%d5{*mCڄV#\wwZ{;~Gۄ%wWuO$Sɦz|WM}+>B,O}LQ?wKN(WBDPK&  
  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409R1Point.classVYsF X`8Il"Pf,%Zږ)T,
),qH%e)QX/D/~`R)*=!?=HWR\|? Nw	CBT">b1q٨ܩN	21;s5~*Wɺ@k^_sfNZuFpxW8nbûGBR`K+~ЬOD.WOvz	K0 0^]i6[UBġm`!Hk"6
Y;W;ĳxN uΔ;	y/H/R_u[Mu2ᕫ䃕?#8k'$YMY;|̢D	8v?|0IW1ϿpMWYE_.{ķ8DBt|{3ξNF\?8Mg7FT֌}NboQ	[WX25jN'p߱0/]\0NiMHi$03Fgxx[2l2jXYJ+|Xp۫HJ1n4[rͻ벲w%ade%~>lY:s[ΘY:cC˼'fZ:7q+:͆evҬ@nVH6ᶦX/`S j	Lm@1dN~_j5_O3$g"q?Hw#|*9wLoŔO.~Jf
e_,\)_BI~lx5uho(Ĕۚ}%~r_gӏV K2?/K!GD	PчLB(,IĚoCo!ZTpeU2^24,W#Qhk!V.5F-"NTEۘ Km
+b(=bWOqP<FzN-Z"۷mLg|Dd)AFN@Q$o
ۄę^-k։[Ns4mHha3E*DڸUNBYN2kGV%'NIg)YrUIe%33O!RD$ɟ -%Tڔ0&1+ڮȏ='2m\]Nȩh9q~k!YPTCކixzVYdDۤf9?FI?=JV)2D$ȪT6N="U8d9c-[ΰ9iTitZDn7&b{xB.s##.^2DtO,Nb0k
MwxF0rN'y*~+,,SO'2\Tt,Vl&N3
;ΌkU+3.ΙɡbnymPqCէIKhIR9zR6#V2̢ā,4.];S{hV$o,)iyyN;kO}~ܑL/2ԚL骿.˽{mP}-ݠ%>5M<Q;2
>DyOΠSCj65$]c;=)
aOJ:Oq8L7H7捑M?aVݭtQYFNb؄e>Y]_%{r՗_7$6hĶݺtcp頽6;7i>F#PK=L    PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571Field.classX]p[>W7:8b;	ԑ$$R'ؤ1%Y2⒟Rk:􇶔NyC;̠i;}+SNޘP{%{={oٽ{:@5As@CTb+*k
bmTuh),`;	JwT/sRjYDrpPWwh8=[=g&lB@lV`:BVxR!	@{Lsę	݁^߻qB/-*"SGҬvq~4RZ ;xjav)UJNW(]솻JHǄ<n§oxT+M8|aVmTI9u~6=<0{o~T+.p
wb	tEx`>!IA@fuRmi|e~18j1b0i2=$RCqQv30I.[8Z%94Ƒ	I*L
'sXKSLc
ljX!fSaq	o_TR!w+T^[:T@<ܗ@x:54`yf]GO~q:pz><OX>Պ&&Bp	<-X P^Zr"<P+fOW;(j{nezpy~G>tpN{ѪKM.〻f]3<pHekrTDt2&%'sӹszT'(D:
l퉃r\`./ttgv1Vu[ǕǣjP؀iz2Vu8_/)mA4PC~G]+7A%BZaߣ&Y5&SI/V6IS&!t(HiH10?Ռ7cGT/6{p(ÄXPL(&dJ2o6̩(=aN2'jJiFS	pTi5zbT;PlDBf!}e*foN!>J A(ߖ X+TVWH$уkT[$z;nkI_W;Viw#4.D^'Lζw0Ηp̛0NLR=Z
0oP\̭kTmbb@H^v4d;]m]6ӚE^
J
KU~D*S4/|/IA\#k@p#kA/KpѳjL.HTGګYMji#pI=ۀusv(M<tawbo,ź65FBc#WV=o^YAKh2Mڼ-d
2VbOO-JȚ={} ;GHcY+aԬV^I::4&_V7+A7.io
/4AT/zcEK>$4
" &9
a&~U	j#ؐjFS3z\7_T\k׀YMܸ0א0"s~]ǳuLn4([ܷh]9I&K_/MWBGFF^<wmh+ou*07T6̍b[P1ܐXpљ
X@׵?e[Ln]cNzqôiqMԀ9|Ϳ*ָyc4WVhXk&ޒzfpX,n1[H`jY:-
nS`
S^,01aj&byQ[Z12R'R$	i
)#BdDN]Daz(V4v./N:\=Bkp&4g~5?C,ᇝk~3C.be2b0ӭRdaLfɸ:̓D@Xj)
kHܐ
y1IL1MdK r$r$F,Ԧ@6%rBv!	
d;fI۔fKmI+ iyz\{oj$V`3ea`<J,qK֗g?,6I
Li `*{qu'f̸a^JHܜb@:#Te>j)5 |r tk"9 T#їC[;z7
:&`2eO[I87sSxzƌdmԱU;2	x[:H2"%s#pV<J	ڕ]~hT3x;״+&xl=5=	wg'Iï!5.nB?k|{GFڵtoG,})Ejjjg$x#9v%F/3x3m?cv×D|şacbᜀPKr&[{
    PK    A             Q   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571FieldElement.classWSg-96rZJ(
`H
Zhm7V7	nmet>ؙ3uǗ~ojwv2>=n_ t *W%rllR6LMeds&$c4%d־arU WX >E$l$</P񬩤T5g,8S	VisFD햺&gӱ)iYyBR5\և:;Ze-YZTtNoSݻJ
&
ecfӽ,FE4I،-vd0sARG\lwT޶!?q	۰]@zqZSC~H؁3QKl*]{CmEa	Dq(k<I&{PB|1蹮=.	M2?އNR)n	a9E:4n/*ԣa?)R8?L
{֌d$X}fY		q	a='L\VKa= &u#I8XWR1 B ☈N`tIXi	'fLPp
Ř˺JPS|t[eY_;$(,btiMKJ]RQ18-AcYsYaOrqa'&$:~3%䙦ۘMg(kgmrV9<G96| ']8W /%\%[07U-֧Y(L.8otv#Ep)'OȳrBc<S˺Z&Y'Y,JO*N)B">*gj,6JPc9B|º I5[oޔ:YL{;[5Gk(
9Hbk(#ʬ$Ig#1Zk_8*\3ʮCSJ+ųYEdP}ӵL bWރe5
%oBk;TBDmMpOeF?BDH/[v#Yhpq]P,tp&B*`8Vf[h[WBۈ7D2DCbW ۵f?&޺7GlW[.$.B7eE.
Q]n0LK[hDms&6^
x#%'<0Uϖ%ʃxCN^ayDۗ𸍈;I`=lOo|#pt=A_AoP6O?xDgƗ0iC>t2VūPe'WS	!1QfadAoI3oX2>;ﭛal3jTnvAiJT9Oq;7uXdlĉU͕;˯
7:ؼV+wjzl;e>[v͑9c^.fH:<h
kߪQYsG&~DU>oR/ξtF(r1OPKP-(  M  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571K1Curve$1.classT]O@=nw"cB,]51LEKL>0XZh?"ENfn=̝ǇO q)*R?cMysAk5Kؖ=ެд*Rߵ?/:yt8e`֑A!#C>Ĉu4cC*Ճ^
y}10[{̖Wv8\ydRn=̐4ng4q
i<RbGt1xo̫!iNLtmp9PځWvĬp,pBjqA2NpZ.k̐-:^:]ѻuð+!aQ0\؆EYSEiRa͛>&3"DTvB'INj<.c-b1m3uw&	]U~OunjGlO@
W\WeNWà^4b "KvT{q,I|
|
hyhNOD>W&$l-~4ȍҸ,*ɢܗPͩOimy),si#B.}"-ғgc=kFfb\YTi*_YErb0OYSLC^FlPF
f Wm525AYR3uILII.D, $?,MSۈ~h%ȦhӽȾG;#8G_ny\Y ~PKw]!  k  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571K1Curve.classV[WWN2$aԨҪ55@i0\A4b0hD{_Bۗ>"vuvXծ΂gǓ~ІD8Є^+l954+3!U	%ba^BK[C˦J0ِAUik-{3xib'J%ǯdc6Oijn2SgռU"$	;n0̂Y)-/34="ۍ伮Mvaa/B[oˊ	xh4Jk8(riYLNMuZ-P\Qb5<M,	x^aa9Ug	<}QA /20a{+IX+'<2|<H9N;{dk,H:p#4':ZcɶD4';Éd-Jwxp'DB3
M-R>9&4όYa✜twX6B,biE;K/Lr=JtK8x},Rt2ENB Z)ZF<5X̙\NS>$q}rz=Ir*r!o*oޞ+".H`m1cZ5/%`ۡL/F%\eJ1*Uy!4$mQ6E[2xc}i+qM#ZP ~ci L@(UMMtkHgm1?^\
9	
JG7
v&#	;ʣuB8Srz^iCe(KaVFqnN/b-/jf0UB xv̘rcP'rdxRPI+ND5Jq[y5V2-:J	q<+RJ6(ˋѯO4sW 3dM3F賚&b ʌ]Q,pb%^UIin,>YQTh>J@֓H=蔒tR:Wl*ѬjGHN@gӗsMY==$E8d.߷opAƖ{	1j%
}H.+i|eFIp~ ެyV ds`0Q5N蠱ƒ@{λeQMc77ZOT"n~@޵t5<wY)}6ްU~\UYj:NZSzV%o%[2ʾmݶ/CT][;U+eٝՕ2WYF,pU˖9#|loSRx]{g\3?Wu	Ψu׸C5k-]bÿ!.:cd︼|v|7W0
	˘8/uyx g)|ZG""_0ur@#3?yߎ ×t(
PKj?I  I  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571K1Point.classVS[.z\]ixH4AKbpq 6q%#$[mw߸4}>ܖ`i3if/tk
{+:5I:}=o9?8 jP-,TY)R:[ْ]L푾
}\RblCkn#Y+YV޻b6?^pqi{~zdzK<o';aEzAjlޚ*
Dm`zH
<184h5gJ5s
li4?Ǟ	u<&6bKeK3Vx; T8w>jG@/XX+ef@Psk}ҙŒw%lb	:s<%`n\;xaCUOfmh.
k>)0giECĔ
9a N9cd׺z߱b /w==FvGOq1)<.h0Ȭ76)L=bjw"e=OG.Z)?x<dPAlis44^)Zq'Tӝ%,.SFYgqAJϙz9f2o3/P 
o(PbKٴEk,1B*a19J>Rޏ
|Tbg{Q,Ifqgt|Vs<yn.XȗTަ931!>v9u-hΏmk*B/	|_P;W,,02
oDa|o*ŉLqna[cZLf@<Ux^yYt+Tgrn[9~AUubl@($?xK(5p[
vcϕmC޲SK~a<ue25(g_U*el.cˆ
fy:;Fy8KJC۞g8~A?zAo@Wg+ՈSGu5w&\Q]:ZW~uh\SG!3;Q<NL
|k_b>+eJ7&z(g:ӶTEqWg-1wmsݻ
vM&S9 m'FIysIOQmz{x
l?Zwt-Ig֘V9妟㆞q[
4rBH_"$w
̰R׬:WUTivjbڌp7
)"ɺ7U*ڹ/1mD
M

AFd^zY+ܡba1:@{hp9y$,XbqÔR7[-a*[˸;)n#ԏ$yRRa6)OwOn72ʶ~
M=$eZjPuOKc_#@S}(k7ͲIi˺AuDWo6[HM(eV+R5Ce+e
 &ɸOhȦq5jh4wѩ㴎a|(x::NT;W?hraȑŕ͑mIG7P

~$,<ַƸm]o	vUFfQOyCٵ~JtaMtN~I4 ,3]b>W,iYPGQ{#WQ	9aRWx*pROVXy/a=d@gAHyZ:d@[.^\8pc8^D|ewV7̳a!*㛨j~JXPT.m8Q}?.'VjRçLzef\:g\pH:]A)xa't92+	槃W͈*1vʸTn?n&:=ǰhlEuqq\@m9J=ª[<N>b蘼eRuu~kw`s+zV{vlP5^\PKm  t  PK    A             N   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571R1Curve$1.classTN@=nw\EPAE)baWEM%5$n,iF^4a|11>h"b4I(j,Mw2s{g?>|0$ԠPbk[r6BGX<Y¶ Ua)
N
{{AǝnG":22dz[faHz=@!>hihъ<>ñUϻtFL&uKIw:8M!3tk<)Ҷ/x(;38MޤWwCӜ>Ǳr9)ԅ3?EYtJeN'qJCCט!m[tHtLs,3*(aO)3aQ0߁EYSEyRϘa͛>_&"֗ETvB'If!^Րw&x\Ztbi3smB[y_	]U~[u;jGL@
W\WeEWà^4b "KvT8M~ͤBv*XZoM5}hNDAW#$l-ث3~4Mи,*ɢܟS;+FR*YLF9-<KZRLo+ibˊҲeп(?eNiH0
Ez
[G6X3\Ŷ&eI,D%1u"R%/6$6HXԧ. ȦٷcȾG;_G'p
s@,$PKZ"   k  PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571R1Curve.classV[wu'!j@Ҍ.#)0Kı2.ix2Edь~zy.@B,]]oG}g42^+Y,[g_
@Q]t[֦e^ήJֶ7CAړZw=g5Ҵn[3EY}	XP6/\3d'z\n4ei-o,$ca3_zmi!zjx25FfcHԒFKq3\MblqdcP	<oiEiubxX#80avU˵g/mچ\G&DG᥶[~}͍a<L|J@#;/T*}2GYwry饒b0JYʹb*Ke)_.*kZEUD$jz%EJz9_J*z$rcQ`x>[׽F3k,ve/^ay'5roF4%2eV6_`","N2<<'y~&n9KNoVH(p7~![cf.ly`L\S_2}ők"cKkeۛ6v|<>HF^ņP7>y|{6f'M(8Y"`&k1-ԛՋ4,IXXQ\f8#{#8O?	\A3U-^qZg<`=5ǱdrK$RREE*y$ETdPeU7QJUeE+CVn(J>/UuYJrP*rQĈ^t9_*SI4EY/m.K}]+jjWE]8=p^
/M,SS5C]gyC	QLJCj:-;x/c'4t=ׇIezv}ljtmXLEsm\l\7~1Jrjt$Fτg3p~T'v^_Dý,650Hga61`3H5n.seҩtO;*У.c1^גeٮ;赙ٿ{SZv[mkSz1J$@pm6GIz
<J.!J3`2so,O%Ñc8L&y'[x<sOn!CCscOEv-38GL[x6nAoan=綡9~|#6)xF膿~˗7@?O)07LF$c2"KN6{?
X"G>zLztt	(LOob׎@Htɿ/*fܡEOwiۡ	hTK=$p$r:X|6*EB`#WwPx0rG|vGه=XsCm7wz}_ ;ϥx[u<w ϱ2A(W:m<I8I>#$ipPK2Zk    PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571R1Point.classW	W[Hzz	B.iXDkS\MRuedKo]}OW&mJ%+hܤi=
sN1˝;wnpã!OvMfd2.358p Z-}+LY{5xd3ζs`&]coƜJNfZ?c󬾗u74}_LMwhxLܵvet|T!!8iZ}ǎe\.ڶnXR@jI	%*
j"נӰ~ѼS
4YX&l8Rklm[tlx?#(2q3
dl0WajF@;㝞25cx\CŅG &/gM<!3g2i-#]$Eg[ bf<)[fXI54?(Yv >DW%*[4ZvNثazMXŇ}a]誮yV5c_܌	<5ָ֡a$tk|lhڹ\ʛI١vdrAQNOR2m)i4lۨ4OTnԈT2KTO}m D)%{قzSl|ͬ@/fyy:I|8#O'2L69lR>].g^`pz&Wyy/(!/:"U|m0DdL8г4쾿Ό^voxQZYd"L?:!2|"y&isg&9i{9Ѿ'}@Cձ|nzyMC_7m$'CE
zk1KU8U~!yճ9~!˩֗Nh~)+P)V.Z`yfz!/'{dsS G WxpM0uEGQ`6'=Cx^dG[eô?9<5ZqF,2lb,36uFC%ց
O֜$SIfTP0_C"4Fp/mu.@{C<.QgqhW߀/!/b84jaj#x"wl>FkK"Ntv+KhO[R}?9q/?osv;T^FbE
t\W˂C*uajk\tlw<Yw1ORA<QFrobpPwuK{ܡb?&`}YzhAEws#_/=E$ZiJEd@ELD<S
I^GRHn"94\WF='5<òFex'jY%kyB%
^ye&/ŊGel:\K
dxl,3𼥈ϱyd0&}N}ědϺwGb"9+kYYV5IQ)U4h
&S|o]I~T+Iz5jBVth)ݳ؄2l\Umh#QFWd,8Ph$#ќr2Ux6ѦcAw({:|:PO6DM(ZM[uL\PJ~AR,KC{
̕,0cJ?
k7B? 
p12up";H6d.)772¸ѥ^BX6+ѥ;7i'7 P8Ao!Pr|wlQ68>br͹"&"-:M0T	MZ9Tl<V+ N|S^JjA'RBgBVʟa)|jWvcg[$RɪHlJī]l|[eyY+gzݻzre]bgxЮPA	*EjMB پXQk0{&L\8 jiVͨ2a
eV|uap7ESˑS/G0Ovx:gzyD'"NEm}%.T\ROޙ̆ԥlӜzbW;%QQk-ՠ^J'$C҄/1r.a[;/cCͮ&:_waQz_ΛM͢#v|4AR*:W@2
_PKSU>	  A  PK
      A             2   META-INF/versions/9/org/bouncycastle/math/ec/endo/PK    A             F   META-INF/versions/9/org/bouncycastle/math/ec/endo/ECEndomorphism.class;o>SNv&FtҼ⒜TĒdԼ|}WgW _TY X\ZWXȠTWgBkFb״<$54`Z $ PKx      PK    A             G   META-INF/versions/9/org/bouncycastle/math/ec/endo/EndoPreCompInfo.classN@Bebtt
D#+PB;
&&>e<U .ɜsse@R!4Co=X|`y]~;dH_8^2$kz+dTd51ag?Vwǅͅבܤ
Cw'ʡs0
ErӔGLCE:wl¦bȎ`(vEhN>Y&`Z䬶b(W9L\0.<`(STMEnrX(ҪLE3a
/PF
lOPN׏^g,<PK̚F    PK    A             B   META-INF/versions/9/org/bouncycastle/math/ec/endo/EndoUtil$1.classT[OQݺno^R/mjBH.lwB0}ds4@-ٳs;gϏL2$"fU-;J\2ԺTCW
%O<J	MJݺlLN\^,/=
z$Da!JeǴB
2"
15mSS-ͮkN͚%SU	ZnEޘ_8AvV9zK/M3*ySGcNIYHP0I	hZԘT#lX.RpÄ.|ܺ:C#,Ĩ1--ߑcTxid	ǰF0
V	PR8v
WpQdU1ݮMn^QVNZ7S1+fּ&F9Kmn666\V8AdrK.^ͩvnz)}BORg2oFhik⩣pXLcW<Fq-n6(dw@B![@1R8yׅWķ~A-$Z2@{8@n[8O`EE>!t#3RBwLHH%mG(KN΃ q  e_/\
"N},1?a;;!Z/PK	M=    PK    A             @   META-INF/versions/9/org/bouncycastle/math/ec/endo/EndoUtil.classU_sUfMDK&"	EKIcZo6Ͷ
3|3>Fg?۔:c>{{׿p	thq$NG"
m4,S2$n:#o1[apL3\;{t\Gv2ss
S"ht]GE :A-Ytd('8NC$kK]ѱ+l+([:p9i' $f*2ÝVFBI<G
eycVqZZ50t\丄Đ\tWG`b7!qUh9ÑUdk@R-r\=ZT9\5O"gٔ>78>GKuYT1V!"MsGP5^Uy~
nN^ehG:0+)ÎtN)ݤ/u9nlt;ݞc Y?z
8=X=J$\)T+ޮ_QaX<>1pppYݮKG]MD^X
]1K+T3AKW+6}<mgWn:v9 Z^(
ZpY.mT;*ZӇۣk%EV~hLEq:t|RFaNvDwP)U(#
II=sW4]Jx\V]>A?#*&0ioihD_V8ig3~&{ nNLJ8]SۊkEBJ#"B>WCr>X*RƳA6Ahqz%;S+ۙs|GOܩ-Y}b~=ӷ=Yq>?tJ
	[^S)0><GSkd96J+Ic
PKD޸    PK    A             G   META-INF/versions/9/org/bouncycastle/math/ec/endo/GLVEndomorphism.class;o>SNv&FtҼ⒜TĒdԼ|}w0W _TY X\Ƞ WgdsSRsSs5|9e{敤YkFcĬ@0d1  PKȡ      PK    A             L   META-INF/versions/9/org/bouncycastle/math/ec/endo/GLVTypeBEndomorphism.classTkOA=R@*tE6Ov.W	M(B5+쇹;s瞙9'Mlf@RBJF]m_SMvv&?%$b{
1
x=uٳ]P-BWqԭf+j
XEȸYހhT%d	eۺfw-ǰ%\q9EW#H=ׄJԌ=U3k2ai"z}lsr6tq<?sC),a
d\ Ts
5-c	˄I7⍰qBo5{XC1Sۮi!}Lc%f!X7**Aʄx]o|$vX3C\B'
kuֿmDM6!Uw:l1uƜ0N/ĉ6htnF ^|2+v$g'xcӸϭʽ"'9.A!̼/W0{+Ǹy/>b_GeyNpK_!NV?G`#5ϑ8yI!ElN>9PK -  !  PK    A             J   META-INF/versions/9/org/bouncycastle/math/ec/endo/GLVTypeBParameters.classQMO@}
/EE
fx0&M4p߶ZRZRV& qZx7
@{eס(zKG1WNwTJ:*0Nvt:sGT D;..C7v>T21hTaJRB%=5$y1W:6*i4YxVgp;"Q+tOAs͖`(Je?)ŭRht9sd_䵒ѦIVŷޤ>5_thy@	ɡa{ned3%΄v3OPK<O    PK    A             M   META-INF/versions/9/org/bouncycastle/math/ec/endo/ScalarSplitParameters.classTnF=+K%#'H\VLNHMP"`MoiFR WB'}jH-QEg%
n&ȃxfhϿ_ 2!.=A==!ͧ+?$Ϛa\wE3.W?ꈬXqbi|<*!ob髾rN&f
|sW1Lʝ<2Zgd`
1\	#>=vya:kym<j_	%"*{$nChjZR	ODi汪pf(M|)aΰD/(&/<7Ml%/(k?մ[1Q~bƧ_wla۽A@U΂UPk=:rli$St#v-A lSY0TxPGa5{m{X]K0(rWEXܑ (<xnh&ig}9"ixoq=?`8;\"2)o/R_W$DAWU%cð^˰n)uh,:I{u$r[	&H3JH@jb
M%1gM9/1ce's~#!2+dJ.	g8SY*S	.X,U޺Uކsmk5{ZΝ`GA3ړ0g&ڄ2^_Tz{BJ[zWS_Ft3O鷇[|-| PKtNf   #  PK
      A             0   META-INF/versions/9/org/bouncycastle/math/field/PK    A             D   META-INF/versions/9/org/bouncycastle/math/field/ExtensionField.class;o>Snv&FtҼ⒜TĒԜ}׊Լ<7A +,Q?'1/]?)+5A)ny%`#SKK <m
M"Z32p220khz-2!&8@d0  PKn]      PK    A             A   META-INF/versions/9/org/bouncycastle/math/field/FiniteField.class1
@Dg&
yj++;@@!@Pb֩c}H)l鲻{ftk7s,N0UXatcӗ&+
kGrLoPσUؤo
/+,G-;0I"V!1C`PKИ      PK    A             B   META-INF/versions/9/org/bouncycastle/math/field/FiniteFields.classTAoG&q @R&ئ!bC@\q@Ͱ;펣Ο!=p@"HgT@vfg}{{oçw; q+>,3Ha1_E+xX8"b|BLרyL6}ܚ#VTi+0KMG6<a޺
|ɽȖʞJyoF^viEa!c"`-tP*'qaΞO[">@I{:Q:-f([lM;<Ҟ(\/I-tִPU5)Ő~1\/WUh"|a!OHq2kԍ3dn'|=A2N3훷alp,PV-Y֔R
rrj5A@#骦DatY!w	d3WR?aTE0 Zz_R:bnf>o",k.:]0pۂq	'~LNj» nK+T<\7~_c$=͝?+9YZM7KmߝŐ8^F}Fj[:J5b9f#ghufFsD
vиbSO1
kHj+NSl|iA|+"9?MpS,)̡!k-]3$q[.x+{Ҕ^7_6.]4tOc1$1'$Ic1¯oQ&kYy}-PKV/    PK    A             C   META-INF/versions/9/org/bouncycastle/math/field/GF2Polynomial.class}RKPnKj[nnac0ԍd҇6iRTS6=uعi'p}'6JI(P
hX`7]uϭCbJ=8:`XG=0t9
||<dlIVi%CXbCk;m?lw|@R^HJӒ6rXf@읎$J94!ۏ
]>mIf=8ԙD#]	a1ddA 	^Ņ4FO7`H>#r^І0<-GҢxF'ϩ*P_ހUkп"u
0,F}TmoN"^a9Һ#^amx-j:@ZlRmD$"[ǩ.qsọPK(    PK    A             U   META-INF/versions/9/org/bouncycastle/math/field/GenericPolynomialExtensionField.classT_OP=mlQ@MPcD1KF4]lŮȫB?AW?1nk6s9{?߾Xĝ4А4B?UIeKxC´c@C@C1lTJ
m7/:5gXOC;"hzazUZ哘**baN:$N㌆e V\w%ה0fZhIj)*ʘqc0hCYh=K
b7JTB(qJjq0bndzf~kY[
7̥a#`
2LҒčHJ.EYlRJRfd4\cX證iX;yg-?-~fcܕICrCvUr
+4=s,i̩PӨӝuޠ	u@i]hvaPSٍjd4h{fc(|1f:%fAvv=3K6OvXѥXĭPdո,nh? lBT}E"}xQQ.o-D;MOIM
S~_;%blm~xC_a_PK;z    PK    A             @   META-INF/versions/9/org/bouncycastle/math/field/Polynomial.class0ECNL;F~.7999B.~4g`Y*c{C@JꩤUS۳p8		HwԌ<'Ey3B,52,Y͂PK7`9      PK    A             N   META-INF/versions/9/org/bouncycastle/math/field/PolynomialExtensionField.class;o>SNv&FtҼ⒜TĒԜʼ׊Լ<7;#@VbY~Nb^RVjr	;#>PMadIO-MAX4CCӇ8gYmdd`bVbg  PKL9      PK    A             @   META-INF/versions/9/org/bouncycastle/math/field/PrimeField.class}Rn@}8:iIhPzA	qТHQ(68J>ST*ġ*~Tձr"VѾ73og5.BC΀n!5Be*Ns>U~\=*D@:,«Y9I螹"Vt8_|9,{IH(	WȏSJ~'nelXĒĄzk,>L, OfG27Ix?ս2#Z[f:`1#%YH((~o8x@xVKF̏O'O9j0/W 9ExSeOI}W?\`Mg:%߁>ܼss{v<M|09kPv}h{PKI4  u  PK
      A             .   META-INF/versions/9/org/bouncycastle/math/raw/PK    A             8   META-INF/versions/9/org/bouncycastle/math/raw/Bits.classU1O@߳-D5-
lɸE^ZRD?ewɽw=y~~ 8EH*:T#޳^4C<BgVm?G*fb'[1ȗ-ghd.@)Ne8tT/,/Fg^,=y{a S6u|ȌjL϶%Y/IUJͲ4q^)G5y6/_I,Qu#5$7ҧmIIuP6L~PK	Z  r  PK    A             >   META-INF/versions/9/org/bouncycastle/math/raw/Interleave.classR]OA=i.d-m*@yWEkK`ńOc.%bw;=̙ "%UGAdV.=n=r]҂{A'fVSPCMiP2JB, VEkh+/=ʕڼ>؂:N:KO*3:+9UTB9L~&˕\g+CA@OR|.Bxh#e(OI$ZEt/;0SN""2>ڪzlVˣ2-.**zQ(V/:5O"&2iFe\Zv;k+X6N0^Gs{ꪇr*+(_>ʺe%L-{أq:^;"v=W$Z}S
!nk&J)8ݘdp+01K`LY]_iOP~!溜eϥ5}(D3r45v^fdU{[@P&#JP !C>iUoZ}e4I"YQIci`	rѓ7me4Fc7v޻fzFd$6KBE$8%8
!xdGS{c~S%0,wߵ5oW}j&mEerþX^эxLG{b*Б:֝|AdP*IP%eD&ERRҦ3|Xhy{GnJ|zW;
~n2ww#(ӿmoPMԗPKϐfg  1  PK    A             7   META-INF/versions/9/org/bouncycastle/math/raw/Mod.classX[p׻hu r$Ա-9$dCnN b@B(	V$a+R`kCh@i=<)tLv3}l;Pzym_?lIt|s6D^T4t
(==˖FN*
vKjBjצc6dd;$GT2w<Yʝe'clu}oW(4^3DA! 4`Pj1wTpZ,L*ۙ/&:Kjga8Qݢ:tZ)Fvy
ZiZaǱle)mJPҠ6)P'|Jv+/M,T;TxRưXz:FB)WnFn
mt
aWRɞ͕OU{c^<v
14yɡn*z~n£y4>Rf(ϡtBh>6PF'OxEĀIv,-^fחykv9\0Ej>JxvxN.<xCAH+<1;Zrap/}ڠC
pw ՝Bi:Z>g0c
0Cyġ \-L8r3u4qN#FjCy={f:ޘu
)%)@/۔#qhp'W)`=D'xq3J*.]Vv4=[t\[lҤAgz
79ebIj.$CO1x@G+X=tH5٠~[*5^C}\:@)@t4Q͖ǲc0UܺEs?(ȍr8Aȑj6`1̭[kfj:d_>8^@Us><BAmb?)IEU}qn@51ҌZAwM!D_I#P{zޥñƯTIcWmmKւm8xmؐݦ'F׮_eVnWQrʜNi"ݐw5ESю1W7~f!KS,mY
	'a/RкAԉT/M]nHhU7"""<O	2	"e\G	#a&"rk%lsg#&vFן]D"
7-a ;y#݅VQOcjHA/yEYj/Dv``&PfBK,@
M쾇^GaVKD
t7_(86A8%:(b:
"0`-f'<zEz؍,~E%aߎ+BQ[^!EF/v[Is`'h	5q;5Z
׎ǣeG̕V'|'v_ӎaOA8&¥a:RG.XkEPQXU@;9j>^A v'L3W1q3Ar֤Ͽ.8M?
Fk:j2_eicb-VI^umspr`!x
u[`zI{^2d\t#$Cy ci5*PxmJ	#mpPW/~rMEzpw4s^"&/x
0ꍨԊrKEmQsZ?SCPWmz-ݽHK?dz5tӠWDWIB-dc7{POjy_T3
URюsR1aZ󦵔7jHWh#T|WoSm-?	I,
PU}@u
aRW4~"0=d
uazla}On!hBZSWf*e7_Ygfq+t+KL5Qvv%KS"M
Z\۵YGa,j.jΧyY`؎ u346CH@?^I11Mhi5ԅE:k8S+=)pK7~fUzTOb`RpP/Tu2@pҒn))ѽ80La0GqXжG6lLkS4&n0yV+[B-6(uJcv(HȪrzgMYYއɛVOʭmݸrV˲klD;(4e

>dGDBq:O%1AIgC
򩵚F7|&@OiLSTGg5$ϿS6}!d`^>"ωZzBS/r
ї@!5JUrx	8dsd43Ofgt?2	Cc9%9mHf 'NKٱ<fĞ'Z~혧ޣҦv_\3|N%òdȖ!pu6LѤhû8DTks3א-z8(!1k3'YGE`H۩I߯rR"߃׎u{R<jW[LCɉ":2Iy'u_a3ws`#dԅ^<wf[Qpom<[QՌHkHL⓶zY|aAǒpBHڽ("0'칢0Dp7`q0@k]a W;{V<DHnos;,wƢOWq
sLp.^.Ҏ@OJ
2<WŽ!Ox?8aewhS=7wOHiDŇ?
?{A8(:%A1`U4B@E"nzʁPk
i)#l\%&WI(sAyOl
yC
wJ<>+~
)O PKo  A  PK    A             7   META-INF/versions/9/org/bouncycastle/math/raw/Nat.classZ{xu?%3.%J6F-,HY2ldq͋IvI#i)ג>G_ig؞sSs9ڇϾ  "P	,4'{_c<;1w8AD.߭2`BXhǁ#ǆqP6?1cW6o a(?0!ZMoFbfs`ooK/=g
49Ȼ~	FL<!^cyVvj*{lx1
Zw[ae8I 	WyWOWƠ	V#4Ua	W`-4k#peF%đC\hu NLh`Oqw4;yj!w"{8@tH{xFso ~Ms;cCrˍj,wvTyAl
ЅtD	GnME(\<|-f
(3#ܸZiT*;pMw&q5K#A܊sS#Lw`k7 _$n#2t'{aK=r}cp׾=<
立Fd=wqqi pM8Q ^Y/ßРn$ƶ\vBxMpy*N
XˀNC2915GnEɎHZÙ{3{xo8N1qʆ
f)RHGfs$bXd~F#xkR+S49L cd=rH-;<֟#".&rl"%>4y_C"1"<VO37@q"MCSZN
QAJtDԸ{E.oC[Q.~)|Dg"Ju$'&FDTC0Sp(7-{u`0@ړ^^
 ֑EnU|5~`p2Opy,\4AE?qZY|-&'XXHQn,}d-hzU\1y-_&|Wq"q;mcF<&ExOlmZ>1odz/Laț	40z`p	p',^OHjk>ST~p||
V'3!;?K١O-롴f;Yr~կ|͆8p1 Ĵ1Z0
yr	@:	zj'!UG O'yPsv2̭~D?$P:i DpĈ5R2KqQǒ Ey\%w!T &tiJ3'ͼafFě6=)\̝l;L4>I-b\/W1Mo'l:M=cmwT¶\m6
;Tvr1$psBgq-~mJߏw#R
iZ|hpDzeŤ*	
.vƙL<,w5J1'!B9r(7Z2U1S+ #vÃ1doW^
kK0ΊUV>wW"W\="Ҝ$8I~գg@KlmJن2|CY]^+5~46-ɟ䇐<V3m"N@K7}nm>fM{*uav,
N3gvc31CgEa
b)OpO?"+bQ{^!z%b{XlI/앹zE@sOiVaCdY/lY%%ϕd_`L4VuJ
>$	P}s#;FevcmK3^8Q8,x{YEKn`V6%Nïx]xPL3CdӸxu
Y0pSS>~^ñHaDـ>Hw,RNepA<5q&f\zQ`i@Brŏ]qBP,;0},Xx!z=e jg+:şLi=>vIY~>'r<MrH*<<Z-{~m1G[zY3N ]O>Ǹ|Q"BZ]D[=cщdK7Np#މ t#1~*B__ߐסzW.K%jg#5_C0[P-%s0&Iq
4aFVlz$g46Wo\-%`\4Y
ASF&8ed	M閜JfZyZik9o-qnH,TÊ码TB
fIѦIEgQIׄdmfÌ',wg=݌DxJSL[L٬d7Iv<NNҶ,Dv#_I%ړ|Nfsq;qp+QuSWft\ޭKvmnNI[g^ƩiRADWsEUJ
'3Om(Y%!\yMrV]$pNv	3O	וDzNM-6&e*Po{1MpYOKq>;oWJC.8>
S+mOܕ-1?:̈́ byJ!VEq>!BvNߴ]	U=	34Gjى$Y/#i_qM8>UNz"jT9yȭA'$"Ww'@}~Xʡ<`Dw|W/s˅;y].A+S$'(hH
C&?L
I/N\jMkHMD$z&	bky(QB$#'3^.z/jE!݅mFhȟTIEcR^*rLE	<>BiIe*y-H
E~#UC=Yq
6S/u4-&HGj$u)$pSrCQܐ!w=Q[Uފ_	0> 76mU7XǛҷJ;	#ч&m826͡8G:;<,		cϋ,*F+v#f-?3DKEr] rjXOz+Cc6Z9%h`:P8)1'worXNIO(u1m]*g=VAN2}W:f\BzUЦc
+ly4^?SV<>#u#شwZI3XiV(FCkKxs%A+`x?aX{]5Ojp~vàa'Bq<J%BXD@0B|)9hvq_p$ήq$HD:UQL~]֗}Xz.N+>fN{#^eypmJ,1qByM>VqLuGO۬k/t،hINK@[K{VY3*椠it1YNSVsH=fKfj
<JNo8<v3PUx\*rIչLD^Ic7YIWnDf(P1JSCI3%9P!
I[$"$%܌g|"M^
7xXϘf6j2ap0q9mFBr,JLsD-HfiW.Yh%ǹU]-q"&nW+}4)br:]*&ɶ*+858w*pJ$8yߒ_2rV<]׵x|wEtGZi'̎5ûp/Aަ'*~m5%9f+Ye5%iTa&=G
|£lr_WގN:f򘃄H	RUՠs9x^YJn?W*NS.Ԛ-NO蝢ph<nPkwNKVUԅŋ]MD qv60^%qx4uZimAڱ<}_9{uxV_Fb&pcHz>V,Zk,|u"h+|-ƽ r2$Ι >Dg?\kuAa`L8UNsQ!?*F(WA4ڪXVE_3Q&-Ʒ(wJِrUlTC5*I3?˧%`TSڸkn^'nbD)79Fmʊ.Ｏf
o6%
	h08cG%6M~(0a[sWJx nٛ|>Khi@Y)6hc>B}xʖ>xO[2qq=.3z>^K)rug{򞢙=E=E^zbOL(()=EE߲(()zy"3ew1[^zJz|^e/S=EneB'dS\nS%=En*=EA=E.S{f=EnIOLyOQP	{>J䲧赅{˔)YzCMhzShzJ|!j@fU6|ryMp!dwm6Aew=uKu\{)15lM̿qboRCq61|ww3+~(߀7%@nt~8M%~~2?cZWߒvoJ˯^O߃{,k^ PK̞Ye  5  PK    A             :   META-INF/versions/9/org/bouncycastle/math/raw/Nat128.classY[l{;x6:/K!I!PM!5%%{c/8^C$0>P@QPU")ԋڗV<T[ժHE}T3w'9.sk ?JB$T`ȠH`>xQkg*Ï6:(;ZVg-*h/T/j,v暕leDF[oQ7$`twd!ťF$􀥂m5+Awk͌;͙:ؚi/q>_?ig:*$Ώk|n9Ә]Y:lwvjIC4`CS̆o0FRڝRd0l 8:y53m߲g=$%ʰ896&H]ŀ`n=Í&T&A6/qNBj*n	
W̏r=56LPswNvKR5WטzLƾݞn5el|$9?Fet7BGc4vp/'A7H{oBNC=?M7ʡ-#c
>SԤ#pl3K%U '= qD
'N8g'yO )ruH`puc0q2Yxd,
zũ:a)Ryy9,GIWfMaZOyqP}R#Cx0O?-qti.0Րa=n6JM\T	Hzx~a𸟵4GyOIA+-4KLESEs)eRcQH
Ew/s|8G/7Uxe!Kaa<1idC|tG!*c;.СϸH[	[xs#+/Jǆz@$FcZ'TSeA}SAU|QW
zGznο9Z:Wv2`Rbp>H!:Zb>5hI1DGKG
5֯-s5ٖCx>55zZe02YQeT<F%ĨPD(Plט.jH#X7>AqG@
w~F,"ߛK	zaK2VE`<I!U
cr'y :S0|C,jeYlCZs-xv&_ a]AsO*r<٬ʦ7[넊\/.@X+ff3].ݮ\`/1*<H);AO1?Rʏٕ3k2_>	%e>Cthaؑ>F*bRW^~︎nGLw߃MAY8>#ڏ.μ&\S#z|nK:I]FXV
M3E;30a)ٵ3h޵	;waQE*X~)G˫o4]wiy:5<_C.$Cm}lIFm*
{4boгK'I]UJY5o#ݸ~%[
C!5@Cד!1tNf##я	GrAG<u&8N.LڦbEiX[
>9M8vMbD
w<w[bC'³h:
̽C:53k?trZNV*'.)ZS4j|EU>,Gu>*uX5ez(Z)a7cvfUR]@
i0	ab1.0҉K	s)A.쫼ByA4\_p~ɓ$q	=kMwZk^xDgM[AL3 #*1C>f8IsI,FJ$9F2\$рX5ce0Y]%֍9z,z!-Fmݤi-Ƿ0%[a>9g|JOD+~
;hYw{ܖn尕~.%i+2h	On4)Tig
<-	O+aPqҘ곤x70oW_
z>~ ~~OTMD pL	)^yYQyYt<Kg9_"|ˊʋ*/+*/NsJ 3jD`pZ
F4l>'V_giO'ꯔ`N٪۩VPR7㞋(J4ITXDus&)9"% l&)%"3۠q}|NՖm!̻); A+̻1n9-8Vܗ{[Ecilp5i	A|ΖL760aT@I8%Ƒ%|5q(b
|Nm-V{
XSUPg 2sQ]ó83oq*z`T:]E#O{Xg0:hR@#QJ(%KӃM4 F2&{/u"E0;*JU3^mgliՌҊfbug6I:⫊o[$
$2?[cD$zNU֪y'$=Ha U,uK5*	ڨ%K-t=LdJwxHAIU^ƟjuTb\Im6%S=`=Ѓsdd[vl9Ƕip7c1&QzzhT4jFLuĶ	CDtg<5	Ѱ$){-E>AaY*$M
ɕw$Ax
+5+uҨp2Nḃv"Y>3,5kQs3|4NBoW	&@ժN1\
	

S8Ć!G~z{Y.gZ>*\'SQ}&IiNK-S.hΉDKd5jXD.	9aR5k	(q'rXG9mz:s\`q-6͘IC^tuYʲ`meAӿ__7[|ӿ__7;|=G薆/t*nXh$`yba-;aEY.eJfeo!`>\Л~poMCs<Ru[2RBuBԨu_(qa9|\ˤ99,h~4#5xJQ	3zA|^AEd	P7Ȯ+.|oa<JaԿMC*Js=P]>UͮjM(!KX~ZAp^GBy>[L$E2)	5PK2G]
  "  PK    A             :   META-INF/versions/9/org/bouncycastle/math/raw/Nat160.classYMp~홞ٟiʒ !"A
"Yv~Y2*$JEq!
NrJ@UB.@(.)
ʶ.bY~{~{zoXKC(,)`l=^^l?ٙ*u~RctFVV&/=1^.u&O'owonޤliBȾ(`G8BJH[[?@V8y&
(,~*B11ϴ0,tVQ5gayPNdaN`gyHaHf:ՅS3s]ge9
UHqF0
סNLƏ
_pYζ;|+YqkΉ":m^*F@1;z]	pSn*0~V@u禰Ǹ˄Ͼ{(4`-
$׻Gȣ
WPN{YRggMt
]gP
\Y^붥;WI|ƑyK<jZFZt|=.9D2r	u6DnA'yĉhA}ꢵڧ/}|aHΟX]9ΧQpNB;ZZkūc\Y;YES֗B*]S{Sܓ ݎWV(M.	$]ý0c*Hw=3rdMqK[{lf`yxF!{SuϮܝ'f(V`2^؇~73.Rv)b`^_prLI9Ё/CgZj0~Tm=HnF͑J$TPUIUP5IPҀJ}yRRqm7͌ƵӸ6opW(,Dej$zjd5HMeNj",Su5&2Uj",SuSCJJJSlߵ`US\Ɛn*1uT$ UFj@-@iH@fEG5d؄ϰV3Vc(zZ-]giw8CO/qA3wh7`FfB/NfoN0K[uU0Zuպ3+oǺy{JxS@I&JÄ6Bc_I0S,| D#S|I+OFm1t2MҞ$z
Bc6u-Xǿ6_TE)r`'W=Zu^}?$RO0qD*BEːy޺SK^E9*pfrn+y EzT
)B?-܁qay00\mU4ޏ&iL w4^(CRi!%b2uƻ!gpg\E+KG#<R&Y6hapXޣf&D'[|Nt=Hw'z-'ڇf+2q#{s"
(J/j#u	2#h]]y0 l[m--vưs.+:m;Htt2U0j|Z|8#ihi׬Tdyf:
+Z<(!%9aErE	QZ%PQ
fx?з
 O?\}>DPw`!߃/[|;,v6Xak.%aLN#MT
{$ = e= =
.HӴLbؘ)[fEVFe]M}OEVҊ;QIҎkC&pY5(Z0NZ&B)ȅ]<ރ,_t >tU0*"5jcV!
!#9+FQtVТd
+(*D1=D7lKh܆t\"^	:|jbv,+eḙ(\"2cD~e~p.]xe7Kʹ+Xai%
@D옾ߗiqİ逗U?6FisEB;	zaNi#q(*8,ǹӢ(+p.-ƥEhrÊƸh6o~'Ǡ-=_%װU9TFżnBsRE7VCh5Vh-֢h-!4?v~o1U1f60}uwdꃰٽ6~<9ƋpcPE߃~ yH&9Lڠ\a:CCjp4q
Am8yzQ>
}WYTn	?JIX_k(]=SÁߣw~FM/됧{8:J5c+JW
ijreJSYzxM]tw;)W ϗhNzwp|TѦnF7m]ǱMc2,>òS[ϴ!%O
-</lidı'4I=K[}u;ᖡMZ'%g,홖E65Ԅڶާ1TA,s1j\L^h|g|!Xl]Q޷5TŶ]a;EݔV*PA%>7;Z|nw.wg<$`_7#c2N`uv@l@p~nոR4TU"'ǾP1K?.Oc|L> Wp\H4&Xg1N6<rglC;>(OzߤR|?cZ4fz7xĜ:xl[cγ=f7"1~a-LZ!"5NdyiȜ׃/|ӊ iLj|	4WGo:*	g\ObL\^3V<,/y|{+!oJ2+KL!Ӄl&^\׸J0Jn?杜/&;i
^˴w+IUAŪTŹv%VфvRW;&ЮWxvs0!QOHfUaKH1և!$~^!2^=T#kF1ɋNp.kNp۲m,Kw܃׷<iXX>.4ރ84ރqhK7zJPG{^ye^:ݖyw[慱;mNze^`;WRzlqÂ3N\qj܌Sg%*	%6
Abvb;Ǎ1HNlݭIىm%PZŁF`YZ{C4aV`:9
iu^=sv[_#|=A2P
+
s?R(ݎUKZ5*jKSPK3'3
  #  PK    A             :   META-INF/versions/9/org/bouncycastle/math/raw/Nat192.classZ]pu>K/  vE 	RrB466-դ$dlCMT#I8i`,cL38LLdjNi_v4yL9gaK3(rq9w7 ßda26h+<Zhu<[(?*;j@}gwueg{텵`׺lvϷy4
/6䡀ܥe"JPFlA#r*p0ØEWqj+c
̆~-om6[W{ۃsz;YA0({m%չӗS6E`ߣO0m|A[>0$
Mn5:VH\ˆ=S[1^J7̫,76< S`^[ī9Gf~pֆ߆W(vСsJYZ>J/Q=9zyE'Pl
"Gv:9qfigyat5$5+
|lRDumqD
W.2gy]H,Et+g/tlW#HV{EtDݝZ
(,NP%ȉsȏâz0Foԧv{mSlLqY.vweoErM,{]CU]G"pvn9Z=*謎Wf(E2GDC̐Z9\>E0'{ʥku(K(	p8,,.#_eh,Xϸj/L	
^;M+0B`m-42ߨvK󙙣ΌS!U
j!U!U!!G7KO.Fa.ߙowy;gnߙVe]sԏ:udFj*M5rBj*M=r4Bj*M3F\RDf\15&29<i( ƀj@-Ԓ@= 1Ј$fhƁAp_y nW=c=WO%ahx<gPC9d.6$аy`$s3h{ihe4UNS.4uN4M`_Ň%EE`2'ia(Y:OV_u>?%Maôu^@
!#k#Os?dܔ
#Ȫ^NR/aCKsTv|k[7!]M(h\uP|:'r7_2w9GpY20nFmY[s27GJ
F9pEhcIDU#njZo"B%aƃ[x	G{jOS߄2gjC8Ѭ!dr??
@-@3| h6})
,o8zs>C=_-g+{D}Ƅ"B3Lr>&J}yVx't,MsUMviCS$%P)췠(>[FOuY[pOcV$ٸʏ:C"CRQ$E&Wtu(m:TVeCRcbWAuDbTCP<
Yn?PhceJU\Z"~.>aXv/֊x')c+܂,݆ɝo]o?oEK^+~q>qI/Ғ^YOcjr`Zrbzr:ǦtMy[*;
(,{WϻȷÆ2i5RS(PZP8JOr2(#ʌ(jgEGy;?C+_e`/	+D|3dp/cpWЏc/e2H$)RVɖ$=E*H"9dFI4p9j얩Njcez.z2*Ey$o>)SSl;i)qz
Ws8#s<qɸa:ӷTX+kP30(.%4U[y)2&O}^RtQ8*]%=J"yɈeI}^2XHsND_#a	s/8~'L**4˒TIz4o?.vŭP|["' O[O.2\\J	\\J	\\J	\\J	\\J\sE;Y;"ϸV00uPH7Od<\seZӜgxݮ1/dѬ3|uKMpqHĥ%8WPN%U{E\z+(Q5Je$8WP.r(q	.3ʅHKEID
O0Xkl{EݏXcZ8ZKZ4ڈ8Hڌ?$Hy͒t\eoic\߳^iX7F:؎N!	R*t2"|K9X*|'"멞bQꉑgƟEjq?GZAn"?M7MͰ#7݂[-Ue~^?),?vM֛^Y#CSqM>GJI+A^^2?SxKZ̴um:vjy,9=v:v-Wwy3ѫ>h}w^,1^j3eESWں|*KuR'ЁT]Cv\Ù~%ih܃=8Ġ$FK)0+<6]7.&\|PvݽtqpMG@
#x^El
^t֓.reM@%X=A!tUFyUF12
(#i0bUq̌
}28_@WK*Oc	jRjPk:YA3¬Wg:Z3EV
k&Mqc=i7*13ՙfѸ
=RTeө tʜ:ӳl:n:oZ2sަx(XbKӊ֊sc~
ܴB,oqB=˸F`xIkt?8~;QŦgX%Vv]4.[ղ~D~Զhw-thX

Y*|VNdElZk,R0ysEۖe[
~%,Rk6ƂRUe+Ydk? #J#&ȁ7&zk?yOMɞBUfޤ1댔u*VY7i1>_]$c%t(~MiSɦ:$2)oGj:Ң$VֹcҺ:&1v
{|4N:ǘ''#6	if9JNqB6I
%$\h0o;:'^xP}>^x,}>^x}9..dղhv(DpqH	UAjIhRB$4}(F>vP3
BC_X'_ ˠ7	zB 72	BzKD KwZ9B3&_X j&
_X j&}_X8p[LnY~H}ĝP$PZ%z c@=	4I Ќ|)22r3DpvMO6ںv&<Ȏ%]<6߁x2[`-?h6|G3R6lZK3tdiju?ʄq߅	wAc72NC_
u5̈{_PKI  K+  PK    A             :   META-INF/versions/9/org/bouncycastle/math/raw/Nat224.classZ]l\u>{w{g)rI-YE?um%eš#gȵդ\QWu(RƎSЗh_bUT ~h,4A\hڗ})>m>5lgܥD93ߜ9sfg?9 <	oa
e0}zqػj>|&ڊ4(tN֠xq{wkfx?cKc=am8?E\
T \X]'^:5E
BGիEhg)C5h0bhcukn;Hz{cU&0Ihp6\`J٤_Fsygcj58sc=6Ђ%.̢O925nG[ݐ
?[РxJtyh
:XgaנweE8	<ZcL2>uKe5D_K*6;u)oi`i~*;q^EAA_t]sz>
Kҿ'V;JVWm#ONVGjm}-Ag*C_
7c+SJ֙Rtr6^A_`__;׿Gbc^پXXr27JDgIG4-4ot]3J/\L| m,sOѯ?LZ&(U+os[,:HQ;K+焚U{ALJsoH%${Ț_+J8i,|=`,ov4o3g2gp<SX3(SçhvBȯP3@s/no7/BafomZ]hD'ZChDk$ZShDk&ZKhDk%Z[hDk'ZWvS;qi쳍	Lbv'k13
kļ#&ZP=
TWF5Bj*PSZ1R
c@m&\p"HAMEjhp@[8Z-5+q@<>"y8>|x|Xˣᣘ&E<1Os,,geоkcu䲯'\\D˒˾hsYrٷm.K.v%{H󿊕Zwy<].<
3i츅EOg5,-ǠÀC %8ty0hI]ZRC!l[H@'!.dr1W"0ԕL+j.er^P+u-
ZaW
C]伂V8\
Oa?8o{8{[8zN/
3_@*6lh?ϙ3XX9aޱ	f~?kc>;D]M/FNVXN.L݅ҒBhn/݆х,zOOp\B_KP l4~(9}ozbOU?F?9UqAx|?J?Gw³-z~uO`#7Rf}
紏6t^
-(߾3iv)IۧSAel'Pp_As4}`ocII|)@&4n`@z5tONzJ8d
/%[[%[m-:,Z:OW-$uv;y]6SK;UWb[O[`0"-\2#Dw|.ʵsE.!_ȥ.(e-+X05cFf~P[(&M
5*%bbC;Ll[Ķ*eb7meeWCiNPz5A1-xԢPgERGujNAYCYedQFPE9T,ʡ*egQv5JQҤi
v}=(a
ts"oXcc|=Yf3YA;YbdIju(;A#Y"1oI;Ӡi0-UzNU*#*KSUʩ\sTL
K
AsyМüԐl4~]ОGygGWpHoy
)+OxFU#e?	7)87RO𙂫GnɓL҃(o`<	6(T%?}`ԎY,,yctD1덥C曱P6XQo,*4ߌYT>i3|t|3feQ@f΢1O͘4Lj˩?z27MY(وl`9NQa	Õ7ӖH1ciӶ=l6.7mb*ܴmirӶ)Mۦ
.7mb*miB6HSL$<RP}>ʒџFLl k 	k" nH='&műP"q0 Y\,[qTXJDJ}+l8FYшTh-CedkVcjL5e)l8=Vˋe+ld4YfD<ZU9mOVܿuY㤷.q9BHFZn&r3-ۉNݔa'XpID^9+C1yt45dφ@@W#!kAd:*`9I(;V̡Ȣ<L,̣ʢ<N,Σ4Wr\IWQy
O88İ8{@:̩~m(]x$IM
˔z~}.w@}6'BOtbr=˝;{ڗ;KzHO//=~rV<NwWfN:N
62Yg;0)3ooU%ٔKѦz3ۚg^#!T"<ICyaʒVgQP
Rvg޺NHYIo._QPd8f RDX^2嫅wE(m7랥wzΒLhWAQy@ZrwP7.fL eU*3OnJ2S!M
S4x]%Uڶ"u޶\^.rl+`wWSb&w%	h	V))$9hˌTҷ	"TKZjM0b6i1EwBfYf6dqC*YAn%4'B9#͘|c>dV%f
|$2<eY-<St<S#9|^@x7&$9ލ9=,3ڳdQ4-ϓN`5fbG2qQ3qIw}rt_T'	@
'kK[mW#*"f"fŃx~+aNČUK
I,W|#L<:8YfYd+Y7I,=ӗK]<k;l;-3vǘ0P{eZڔjeh:㹤.T]fUXHv\Ff{2O"t9U%E#Qr\S4ICv&,qJyCULxqQvuRg;f#T}qJɻImZiPU\ˤ92Sf㢲,ۜdUv(gSl'x0Y(\R/&y\D.Ue0UtdYw8뎛%yLK'9msܦ$ZOsE޷\s\Q):\Q)\QV($]V$d%jG&{ܽ]0jv/W#L{aMްajG*_8wũ0wWjﰻRazaף܍nDKP{]
so:en:m'OJd0ãIȨ
<5/yv",hE\8<9pxŧ)qkCoϒc=ԪJϨVPrFc4UQPjO֮w{w{N8|O.[2Cewǁz3@]1 
h@34URv3@[InqWi=vk#¦ACQ3[iu['OM)%]x]BeJ.T)X\]x]B]
?&~,qo PK	!U  3  PK    A             :   META-INF/versions/9/org/bouncycastle/math/raw/Nat256.class[kluÝ8|.4ìv֤_&mʉ-Vj%)ҦXڎҵ@AQ7Vƨh@Wh?skfE*h(rv~sϽs}D9B~-OH!fX6d'g
bm5HqC\7l^8γvo;hm!")2mw
5NÏ#/!2(x^ɓQ8dc,V6k- wqTƋd3k2iȯZg}ik҅gOo67Fr^$dlv8|-Ϡq}~I6H_U+ς|'Ivxw6"
onFsrAbnp{!yH\|| XKpuj9Z$?A1xJvo}DS)oC6:q~^Ґt9V$_$_2 )g1)ݻqq#Aw9wg^@Y>&x4$eǼH)vSf:gϯnQL)+'c̓
nS
gy?A-Ϭ[x"ُ_ۆX>yΙuppjfX[@(?y!<u<I-4S`u{8"6V PBw&
ycv2*z@	>,^ď߾^jDsnn	Tʒ"b|c%k>fjXqT{V2AA?WTقa~z*no&^!ݲuxgB쳵 gz9
Eg 
(/A0߯ e\{x8Ol?t37(kM_Y/\3\+Z\;\':\7חm?fܗy?
ʰ3]mS9;5[SӶf`NS*5D-MEm%jk.(QGutQW_0_Gk0TT9IXVNei`:X޶fr9/T"b}'>n|DpÃgc1l8VɉXm7Ym_kR_Y:pS})4#n/VMЎھ:7UۗB7f%HvǂJQRc
^xY/^w;ם}fpY/̪"2ki-j1YxG-H?ӏ	f|iw`g&9Yx	fxi{weg;&dUпFA-
_&57S*;\Bf+Bf+XBf70:Wu`t
\:~
9BI:rRHʱP!VC*jhÈ_
٫#x$U:8"WU:PF?]˺WXYOqoyTYODs諈~B@xX"\8!'?qi2{~`͂|PS~u`EIa0,>|*lM6'm`_cU?c2ii*nrq߹6mo+wmg`@>&9#gYe6l44kamͷm96N	w6@F&%T=R!=}r5}5ߴ? s_0s}HC'rG

'=Prd;'=lIh 51&C<\K&K,wO^:
|x&t>JKT;ϻ*w|h.d`&=b<1>!/xnL΢o[X4e_~+YCdBKdBK7aK.oil#8^qb0wM`5'yY,Fz<#l#M0<Hsb{3<Z!Ur+\TxZ0!@lKYr,imKڎ\=j亪]RKZ,\:B^=FpzA*#[:cd['%Fvu #)+C7򙶹8@'{f0"t^+5F-hcM I)3%堔RRJI);%U@)')夤J(&ܔ JZ~!&5'ZEo`gĸｫrtӤ7?>2ey
CNOe^ێVpm7ZѺ]TrZjuP{8izm*Bm*)F5Xd)V^(YvU,'%M%O[UIFEOXLetV!ǘC{cLi[c"6\ma@irŞe1&ɕ{Ř&-1OMno@j=}aL:af4q<Fq!!#aF³jT*xSUMUQo&*x;_
𓐶.8\b[ & n ۔%{;0R邎XItmT(coNR*]7).ہ5119 Êcm	 
hyrK\ɰŒAl+ynT0;^U*9{"=UVoɥf4V3&٪bfR3[Ul\jfMKlU9i陭*g$U1Ei[ZuN2Т9O'8ϑEk4k;RTC=Y7f?*<LB: A0NXSVb*-t@Դ̤JA5أ%Բ4-+2si
 jٚR)<´FztMIj!0GGPմܤV4xƘX}
d4ЪLڣcLQ'plO}xK[l֩)'^%͈nVDt;qѝ8ݍn	K~T֋K"?+^LxUkZum/PHt>hH٧@@} d\
^PF5߻oEހyp}k["jUm[6V
@/9-vbVRJK1i;)mvnLMJii?װ/fh|@Ql3oO=%~CNc6ڧw-ٿ{
Iz{;]%EŠOD3T30Dȗ
gɎ<\_ڦٞjRVɗSRMJzj7N;v~|J^_B̯~ƇyCF:;d=2	y4Y&?*vnm* l5wso[*ފKOI"YYCRnEfryJ.;nDw2-/^yyh|@,ځ?{<ch_iG W̗mP盛<&J}r`8m@vyPTTe@\ p4cf-V]>-3p°,gMϞ!;͗`|.2mm0oۇgT^هEfXmsTdV8 D;5:jAGPJpPqm7bҚޠډ
}O`1:1F-QgZg:B`] 7R	jAbQgH^ACgt &l&3Ggc&1
:s s+zAnK܍Y̍(zs"Ч҆0k~Ix`2-`F-D8s/R&w&hr~5#a7;s.37Š,޷BTc RiRgdO'0r^'1rA'7[\\ȡ?8OFdGLw b_Ɇ&+Tm@
ĶMff?U	P݊=C)03@.-*7*7wC(&Tz&{j"yQ	_XQHCbE]pz<A	͏@Y8xؔng:,jyhBE}-vXD]ReڔC:(10})Nvt6=סQP+KtJUan3tN
@3QJdV8}Z8JN<	mJT)^?(Q(	,ZsQPO*#@Ai԰N sAbs*Nʦ, vS掟S?)s7Й?>u^*Z؁v 3MQJ|: VY:XPm5XOW9%iq?g-߬~5ng47[)!:3O1QH1QL19be O"dP`nal::З4~J?}\mUNJ?}\mUJ?}\mvc'I?u2t_N:MVuX:|z7u$בnzSϻwӇ?%
'srO&i7;K冟nvm?켕2	, e"w3Ymj?P%ww~=~76Wjy\=2rFCm'#WXtb{L s?gӑQg!ȨMEFGn*2>rSQg:܌Dg@:2dcqŮS炦4.h)A+!h邶.(A'!肮t.GmT~Լl }JW%\03良J̠'*!3zB03良J=zf/_[P$Wk5kG'"I!sɝ?>fq>!C~ɨ𓤿B[l;fmayϤ`0@rM\ni¯6:¯7> PK9  A  PK    A             :   META-INF/versions/9/org/bouncycastle/math/raw/Nat320.classR]O`~޵ݻul*Pk"~(
eR--n=?1F^0*v
3JbӼ9y~QLȈAӐg3c>pϬq۵R@CN#4þ|m\ߴ:4lm-#Π>`Ӧk9#i%1-ùZ+OU\Y2cpث[tkkFw̖Hi#CZ4|s,@Do}ȓsYi;!f˶yR*L#8q,8o;zŨg{]
+jZ,@+SJba^IX>sZ$IY OMEs>;a1b.սW-c!V-ݘq-JJ9a7̺)fwV(Ч!dSEFQR7ބIh`
bvHTAh*)q5N'W^i7`0	ze_L32)ÌSdEdP" &ާ^G4RVn:"xt{DԼ'O!	c/e8FNH1q\T7!C!c/zMD><=5;1rzgF	,N&\4g2ZQZ(^OOF~Ct
uTazrD#QгDq(ODiŁ)3b|m+j8ٶPKt    PK    A             :   META-INF/versions/9/org/bouncycastle/math/raw/Nat384.classR]OQ=m]mt+*m4>(HbvO1>ȳOn|ęn
hn̙sgo 	S-7]j^X0rs)$H)~?lo^i:l~?]b;Vx1P_+Ln67k^ۭ Ҫ6pA@jaW.S獠Ö Y+J3>pɘ.La%npś̝TOŜBiׯ?+(mA׺A!SQ)g^u@܉t.dSbayf~mfBxDNKV՜Fn?Z'+Z/	I>&$ǼW 9vQF-oln%Bdb5oeehpi42T)Z&PvR~oac'^n⤹PMZy"q l L
t|`Cz$Mv7E)g<QQ'(e2&^-tI ?CYLN'PKg3U    PK    A             :   META-INF/versions/9/org/bouncycastle/math/raw/Nat448.classUMsF~֒8J!NlJmmg\Z@b+[za8tL.´=gC Mߕ8дȚwzg__ A=$Y(~z%7z)ySnRft11h{}u۫݊U$[}K$4	ت:Wgfj5bצSfn |:8bm
ÁF[m%՜ A>wǏ1c{8-A
CHZ^Ykmkx⭪]r+U<Fgwd#8qH{xMޮQL?A2}A]+x!	\^hإWBKr>oFCmD8i\L8mݵW/I
g,őǧE),X]ypfc]9~,OQ]A9̊fٶg]ʹE\⸬aWܼ]':`A:S/v].ķ%%"G3#xlܸ-:^!lwss2Cero,ث5ݖƃݻ)(ۚdȪZvqWY8^d{tu5-Wx40qxV43	# eCqȾaS2ܼ)254rӨ*zi0(leҊ1$i$ٗ_%N%$՗tօ~+];
g=C׻]76T%x}2uF*gr?܅"=K~@j^@b}ϩlAac{襩zBoYi2gH7ӏ>w'664n'I@/ps$)0Tx*LHԐB،
rv0ܠ ~푭tA1Nkaf;6tn<': 
F>h!uʄ? e!%
Gpy4;8qBM*hRD~z"Ln ]MHң" osj2i_5M"?FWBV[EifOpc2eJfF>eIA ڗDJRNAVSnRO	ϭDO_E:"13uSgOM*Gou0wO^'Xva/' PK  \  PK    A             :   META-INF/versions/9/org/bouncycastle/math/raw/Nat512.classR[OAl[*"[]A[L<Hh"azv|'7>Q9D̙s7 %0CA0pwto_@bk#B	~^}CNp[JeBud~_a'lV?vmi)lntco=k1~V尌8'`Rc8y#h% [#OE\"C{쟵q.LaWrk̝Tǂ`Xl+ڸTCYcݴ%jzj_叨1B6"JN>7)P7^>ѯ6tR/0U(Ke@[.iiYy仏BB|,xXc'dq|p*٢AvYf43JeAkR7OP (e5݄kQlF}@q\SG;ԑ߮89.qhArK8?<, șsBe	u	/?"Hgxc6*442
2A5tK34@n1t~PK6T    PK    A             :   META-INF/versions/9/org/bouncycastle/math/raw/Nat576.classRoGck'@hPB].PhT*R%(l6]{݆;B/ąTP{C7
6RG{{3^'Y,APР3-g	w.oyA_ A*&9"
(2m7tj_:tQ#Ez,{lr2T᥎k{Q L(&p"qxnnz}{7=?`:xsTlH"&Q&anRiX8n$?&u>a+u8o>8Y)|P^ΊaDh#p#n5z|Ff՛*: az+޾%sh6d$ONą~K;IڢwC?&T;wщ2d
c!lcнSԬ>t{Xn
'))`VIYS*soMy=Mȣ,\[*TU[%Yr5lm!-h@iF&*ywfJY'5gefJ%H#H')2)2,q!D?C!sK}a4Zx?; |hvp:'
yb_,Tίw)n>0ÙtK(luY|43y]]
'vq8,EƫeO#L}{;]}0Q
9ThT]n$ݝ.LJd3T%ؾo2$i}/eq5g7OkӒjxMyCyO`\SdW$PKMAJB  V  PK
      A             )   META-INF/versions/9/org/bouncycastle/pqc/PK
      A             .   META-INF/versions/9/org/bouncycastle/pqc/asn1/PK    A             B   META-INF/versions/9/org/bouncycastle/pqc/asn1/CMCEPrivateKey.classU[WUNH2!
EFJKڴ$3VAbC5-
T0ӡ	VԟC@גZ^^_egfHՀIV߾=˯  <ჟ!Z,+ŊnJ2WX<5J*雊жuS&PY1tlt
^𴽒c7WV5bƲKqt3ZMp쪲
,3#Y*T4JoںEW1KZ,rO	̫G-Z%,؈_CH"p+nē]fFԨP4~Z*qgEbylw.E2.
zibmw!q)H6,jT)cr:DniS-CPxG">'cZZA+92fR=q $
c2t馕UR܉1,p9T-r!p<5 C:o䆈Y[	
b7 ?dnWڃxlXQjY:X
bY~>\Wf9b|`XVgֶ3酆zqwx/ۖ%[{K\pGx0Ahˏ.֩!q`|9;=bYkbMע%T#H 13:J9䚣HHhD"
%G&n1+dMMvT9;J L
O JozEls.ҘKG\Jە-qt@[
yC5A8# H{k=~FQ~H!0,$=>3DrbͿy:Mg!Cb	&B 6>Y.<,	KYdY2,Ɂf$WqG=53DoNU7DQ[
2UH=Hw]͖ZZD,ZZ7Xl,vuDFZpf}LxkO>o`lnf%\:ZRCrr
z{`=o]hx.?yDIϮ(vStPK@wx  
  PK    A             A   META-INF/versions/9/org/bouncycastle/pqc/asn1/CMCEPublicKey.classT]OP~+ 7mA*
1 F,\u]G	?1eD7^i ˼iyo#
1	*:gY}l[^vL͚=Es2CLs	HHPTtBe?8#ffmZ(;瘁0(FR-qafsXu<a,9<2&;o[lhNJAIUчMvjsgyzHmݫp+Ni{֑e-dF&R/Qx؃xWahtшA<0b#W(- 	a}ĵKc[hBQ$յKL@a	iO0CS`"2s2({τsn̋_0,g\򔕌BQH(Aw3UNέd3y>{c%w0)"
}GE!Q,'Ỳܲ?nZ;42}) :]Lz^1`WHzXXCSE5t	O
E	R,c!CWFW`mTL=:h3LEy	O1!4'r	A'O$rq:^X-[t$PK[Ӣ  L  PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/asn1/FalconPrivateKey.classU]SU~NHذ,"4ZMv(釥F#ںlq
S_U^$qMAٓs_ LaCFm
bhrRz٭8Ʀ}Leg"=xwiW,
%S!AV	E@羶nC:=kC榀azeuD㼢D 4[
N[%y^S0:*˶e!0T24'Oe!	
-3|+e=O,uL/4Z1%WDJ/1ȵd1L ljM9pmR$+>Y7KWϔuʾ佔̭z֝R^@a wqQrnW̹g:ӈؓ0Em^j:3\!q\HT4ܒc}mBȘ<Z\=)C%\	Ap7@-8g8崂;yd#D3&2"c-.@v";%O<Ev=9L3qC<4TXdbOF1Sy8gt | G	(HPSQpj|ɳ[	IH=_q~KQ<94ʍˊdj=߸G'e^@,ɓP&E_72ݾ˅Ejֆ
sӐB^|mpzb~ESz:\uU;+$~;Cj
B܆mKF:FBmG{>
=/Fk:86>56l\zh\B*fCu"TIݵ[sE)4Djwh t*FvVAe?G.&pWUL)CZޝVōV5)ۋ?ADB\Ä?%M~X7t.r]h.U<]5|"uaz>]*jxD]<.h5[DYJX$ňUG9[t"^PwP%^F"tPKCͼ:  c	  PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/asn1/FalconPublicKey.classTkOP~V
/ ȝ E%BwFO_D?i9{Ϸ ,
1	qH0A(U:
wmìx3F6v]q۶8Cb!jHIt@awZQ->``ڶdt!-ኂn\enn gUmϲ:6dɐia̢kgd\
	=
zqa^-nynu}7
Fd"JUhgH=
C\D!pW !3r5A`r}$ԭ%K狐'~ cD>0z1feuqD$,`J=LSHRhy	ʞ,aR2\Dȏ3y*ya)BS~RS{7-Tͪǝ;Tr<=JCBc#pvK+	x7;Й^ԗ2Iέ8N4>.eO~gXMw&H4p2(b<µC)B8>+A!"^4)1Rcl}!Wzz3
uD)jl9KۀOH?鿐>Fa5Vh$%
PKd  M  PK    A             H   META-INF/versions/9/org/bouncycastle/pqc/asn1/PQCObjectIdentifiers.classW|[.	C'	PI%[ӄqmBh؈'a K$gPv2
Ze厽{MK[-et%?߻{wϏ|{ ¢·1sRXj _w[dαn<&sc`1'?T|k\%vuW:쭏2^wըx0
F^ϗlJ%c5s1I@ZLՅ2N2'CBp4F<ݼ\_	1Cwb&l<
565ǄK~Tشa4KlCغ)2j'4pq,_XYpGRa()bIWv%Ssej?i	ύ~,BYQ[ѽu_aKB+sǲM	n>|YK}j'/+'iڍT8~ǫƞˇ	en/*d}^2Gp8j]'(C;cgebgdILԾƨu3Ag/YJ,$XHV֮4_i:9r嵄u#dU^^Aͳ\: 6F80al8p#Y<ph#?47Ǳ|""F)Sm2rSX8pYVqONcY,vG8y칈ph`O2	Y뗱~%bޢ+Yt-;#\?an"<(9븕phіpΡ&SJ7Ol$<TR?Bxb}	Oq>SQj׎Hw+7z?GxGN֞c%f:=V́?M
ynoo֛y=v/#e]m`?ޮe_	hk4A
YU29kNT*`Ǖbw'f
b{Bpp`O	d0H}RW2K꿄/F
2<j:-?Hey5Rb{ZR{^B7;x*xi*E*>]",jM/O8v,oC3T?<n:Ɲ#0c>R^֋%d2sr^*Oi^:,o/	
=vhkKU:ZL/b:k68
δ--nmbf-.vZX>EbU,x-e[<Ox-^lrWY\ozzMbr[Yβ=e*U-<QVyڎy/[|;?,~a<ig)jT`Lr%coأv@Zv
Pt31?cM\؈ |D|<3Glk"v00|Gax;Bb}%
1
+%PHJ2Yk!*!kHVw* {%G?)!q9*\ q%*\!g%QJ
7Jp!
Kp
J
K\ē
H<ċ
qjo5}?2o1eOf~f=PKY  h  PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/asn1/SPHINCS256KeyParams.classTOP=
u2EatP1d8H!=gq"L(} &fsw_{ιo Rx.!	acw;֩eV27̊3gsg[_ci]	AY%ɐ A2; $D\?GV%"'S{u&sO
n{o%^Vf[?fWrlA~g۸#aD]ccXaIRӲ6%o:[4<-F6`Yᒖ7OLl:%ny9Ifaݶ|,*bX˙0uN}`TKM $C,f(r-/d$,ҁt([ZN_H.t6v0͠}<;9uԺvCwE۞}`	WirJ?4EŽFk`zRa3(z@Ak
GD䇃l̽҄-Q@~;Ԫ:Ԃ~G5hUVѣDhja`տ Z
ayYDB
ӹ)1Jd!QB?PK'"|    PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/asn1/SPHINCSPLUSPrivateKey.classU[WUN\ZiL@mZ%i)X09a&L&}7&B\\,Y!;/Ͽ-@ -
*Z&s|l)i͘Qb}}q.\xJֆɇrK@ِnrlv	VKRTt*xCErRBlu@YplIHv^PqVUq	o
t$C\8]ux ycٖwWvXfgj+2(x
	2+Ϥ/Hh	Q0*	ei̹6fJ8GGPKئ3
#@SŘ:ɼtta
Ufw<"INF,F
]
^(ȼQq5i{MS=v)ۮ4mZ0i(Sky:qNczҫ	Ϙrr]UQrɘG
Gx&F0b1	(X'}"=<dqCq_0:*>EOՠ'G'
!4{o4QEKn]9kM,ξ
]XbTyUWg=_Z+UI@RO7up*ږnrP>seϝ)0W'E2/4~۾Yk2m,ض<4& :!]+fyֆdN!H1%W/a*ezAD_~|zF}"&{NDVg6=5v;=ۮI8GJt7I~:nK9.m`l\TO
5?)_`P؁vh;;9YE gNe{q֦\_sSVp7-w!bF]Z
<`?#4<?2̆/-6k)mQB}
.Dp`WtNYiӱzd(_cn|۳ϫ$[W߇V`n7lRtj(qP\@wG Eֶ8BvPKg  	  PK    A             H   META-INF/versions/9/org/bouncycastle/pqc/asn1/SPHINCSPLUSPublicKey.classT]OA=.[+(!YAPPmBxZfvJO_D(Q;k6眹y@.R^q*qde^05lh]E˶CgD@P
Adҫk˙LSʦcN
k
ޗ
	72AŴ
;orOkF"ki+qw$+03dym.sGwC]+v^D[7A)!؃VfEJx` +*hRI?.$NRI"dIS1!Z"0vyNjeIS} 
 M#P蹜p-Ԭ#WҞ,c	\[B\Ӯ3z*_dlf$y9eKsq7+6ͬUHp¶s˱о&s^G{ǆ!A.YM!	3^UZl	enӋDtՀp5^иDq!cHѩc>CD"}^r/NP;Op}'<ŰȊ}Ӏx鎯	4{/͌@$J6h/5E҈
ت!C5N0}y:fb5y@A
9ڡ'b@5:[S<yU]74 PK*    PK    A             A   META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSKeyParams.classTRA=]#Q.*
E.5BUPP)$cX,|?P(˞l$3ݧOϯ_r x%dt.=%FɊEW[<0tΛ<bᴄ.N</ ! Bt3
.Hʸvv.T%?\3vAŒi[C+
a.ɸ+&7T We\uS|5<&
yh:z[Τ ᦄ[2n`R|w[YНKfBnRI9cr!t5iue7G]x3Sv=1̠6
{<y`.Ss $DDaXj#3mz9(	V<'-t&Mi$	xgZfA#m"\$-%ߜ&D%4-aQIUo~[s$?r8%κHO"^ϤBq\m[(Am1u3y]cыxhF3AXL'lVӪ2
G##~yN3"Ԝ"c8Ap1
HGmI:$0P>KD
%AceVOGzvz
BjhX<縷\?~HTb"SJx4DUe"̻PPKۦ  |  PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSMTKeyParams.classT[OQ-,-[+Ee
r*E%DX.?D/>s-!vv\曙ofΟ D܋$e4ʦC֡<I9;CzEon4gR*i<pVVpK_m2!$(U~gtĳ92uȸ{7;}vF?!H@Fv9=Zl(I[YRܴ$C?C(IВvT-P%Rve<"flVf:TDW,&>ô7!Tq͋!KNC#q#fL90!raPBMz2E}?=1R5W[8^ػr`^$B	y`T4^{JQ-FyS%l=qM1xK*3t+s97~Dg=6(}nac	&^-ĻȎ׃FxI%Z
&٫H[<yjWmjwp_!ѐ%p9ÎeuAwQ?à6^Y&gШDKHf'|o/R1ZSvJ7bN
WPK$B
m_b鸽|
VKk9rfA'a6(?{W#y`EhPK=    PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSMTPrivateKey.classVSW]K\RR
1>+
mJT풬!6 ؗmw~K;32Ǘ~L[{C;
3{9w~sG {p͏2x$xP.\HN&5Q4vF[;Oד@	xBQ!`cIdW<דόk~\"8F1Ri;C)z
L6ښk&KfsNBmZ<"PiɼnQظ٬=ذIA
`6Eެ`\bVX!̸EqlUyC6=	Qb
ݬJ떓VJ~SS,Թv#KiYŏ]-a'аai=Dq5uƵhV3Q@B0v@m|H3lD'hwac٬ֲtaD7>jQExR`F-`\tArɶ	T[n	3
qN?cX6	+
7G۽f.@Ͱ>Y ٻS-pvfz<^Tqró9sKcm=t٪@)YLSP<Nl]*
IV|t8$h|P`8}Z:z^|21"cwN۸P:f !Lt74ک,ݵan3cAs(WȦzp^fՍ5m0@`Az@ZAg'*&<gˠ/
^KTZ*jE݊z97pbڲIw45~\2=AMb+)e;#EX~QMmɥJl$9ܥ1ݍeX~lweNIkh_>JU&;CziK>q*Hʌ\ۢclDW&hT^s[nteЕ[\͖"»=uC@:zf fPFnajZ=Sk}^-
jdu>MwO'r/-	GÞY4c]45Dա9Im"SfY~`V#.,NlC|']bM)_W#bMC")hD-gxk	9y%qΦY94MHA$O6a
lP3͑pSUA}&-`;"'4zQA}CvSzgCN9Nb /ʔ ?1a-IFC֭[4͕߹O4̟k^dMO-QWquIϗh(bI/Cy9:yCWAUx9br
{ZL]߮fq5MxZ3Ku
t!l/%<9Dsx(DrƗ^Hํsm$ PK^  B
  PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSMTPublicKey.classTV@S
ik(RZDէ5LSOѯZ^^|3Mź$Ϝ=_ \|hь+v7u<DJYXY2fX;eB (!$d3{ҋa&RmuӶ8ADOĞOF2!'y?Sչi3|!^yW91<N]ض	pJit3կK寋I֑<w*STg4Ot;<YH8'#^9iyxLij쪶%L'<Ƀ021x2Y$8?	&a6M̔/;Va[֚e")ǈ"RKw\`aHH$a_҂rKcHd*
J&:FbqHd@aB-6$&1q@d2ʐ	aMP?-}S2E-mȰ^k.huuf0/b* NgȩksdXꍅ$!RkFD%m-t-:+56hA
L:qCT.&
-"=ѮWRZ߁	ʅ@O:	o=Z̶GKP*qm\"ƛRfXgoOBX"sArZ%J;P!@[ᬲ%$.> *B'!|D+qoUbxoDGMDOD2Ƴ%ܝq6,!Iz
l;m3x	s( PKk>    PK    A             B   META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSPrivateKey.classVSg}$KXRт(mcUPl)@oKH@AV{>/}B2KA^0L|;g>T#5j6
gfb>筌Potp+F96	O3V|
2I8"P.=[yc^@5rtaF٠i3i	
P-t&ԛyIdA:n'$P79"QH
T9m
ZXCgY]tݦ`'lb.!'Q=
|yJ;%[A{vݨ1S0.eXN{)ہ@s`m~3MǇ}/)O@6a2RF6n=ꡌnBN =r؎)8#t	=3Rѩ3#gzsaZs	cڢ"q\`[4WMխ5{Yͻi(Nph4jf3a*iia\Ta~gYͧ2:i̗WsY3q*yĔ23$ku3a9'yLwqQ	#
^@L`j䘑{%%rck詔,{u;}I|C2EDWZKa)5m+{	8Gzj[Ur$75?-d긡6H2&S[qR`ϣ˕0%йP92p"9~SX(ғInGjFlUƚm"fELxu֚<D˽M
]y
X_$fA=dDa{kI&b)۽F#Hʙdќ؈3Tp4i?LsGYZYN1ҳߣ؃6**ƐjoS6mqtimA%:DV<m׺a"hA6kM^{Ѫ5UUkZ":<@2S6 7Je*~v;˳{Eiq4v{mZ"I^)ߵ3շȴ斫,ktymtlz-|)ꕜf-XӪ5H7F((ےǼMM7W0{mwFmj&p Ѣu9\^.9kYD>C{TIԖKU~{w(Âv7	gگ/Ck"b*OqED!}GKWwğ 7b[Ƨj4Wh|Fkj_^%r5zLs-/+"mu5#p~K֕[:^[;x\.57E^N tʃ[s%d#OPK.kP@  
  PK    A             A   META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSPublicKey.classTV@S
ik(E(
Z@D+5LSOѯZ^^|3MźWydsgΞO c9$e4!b;Ī]m]+&Ohk(RV׸24N04DcJ8?E0)Ѷi[ + hp\	2\'y/ϩbq4ڬ|Pwl
NK8#,:.^_cyz5h4=<m휶jd]p^F==-1UxGkږ05+$G]_ы>"I3	?iyL9ܩ:t
 Y-N>FBXBG\xcV:O
"!ከ`t^CE$S0,Ẍa+!(+>!In
ٷFmHLcz2b	bu+C2l'	4nO
B8	Lɸt\NX.z-Ki*CKS0y0XWq2H$H];GNmV]M_6HzpPH5xf0H_aBբclE$z>>)Eob:=,zC))=HЬTֶw@\R
)XNx.N-ޢlkW\*b/l%z$$%6$oUa"dv+_~Zg=a;`~dcTi={RÓ#j"2xZx@G N1-ll.`Vfm˘K@PKɃ;    PK
      A             0   META-INF/versions/9/org/bouncycastle/pqc/crypto/PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/ExhaustedPrivateKeyException.class;o>S..&fvV6FĲDļt}ϜĜĒT׊Ԃ<F6̼;FQ
̼tk0vFtҼ⒜Tdʂ|}׊Ԕ2ީHƳ8秤2(2@t򄀢 q6-* PK9U      PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/crypto/KEMParameters.class;o>Svv&FtҼ⒜Tdʂ|}oW߀ĢԒԢbvFĲDļt}v6F
C8gd! ed`bV0  PK;^n      PK
      A             5   META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEEngine.classY{xu湳#y )]}HE*?dɰ~`b)#'ٵv,-^
$8%J;I!6;`%%mKӖ4mQjsgfw#Զtswι30Dd=2Lac{#BUv0!0,	biHq089+ݎ{;KbǑ1;0+D^V	6kZH언r\Ό~Ff+~P/w]oa:P
ܥ,t\aF2Km֔GEB		OYDmr8fsCXy{z{balF-_RB;xfD:Н"&nƯ貰}_h?V$\3;)d#ݓewGAX*-mul]nëu[؉r$[ܕ+doږ2B
pX0(!}{oI-%ڋ}:nwHNLsKdG7|&h;QfB&p8`t((my䠅;qp,f]%i`n8LI+'Fv#I)Fh
`Ȓqn0LR ʹb6ζn1|1"3,BTL5QƸ,܏uҪ# mX/S`-0(9',|')}n_YEiYuLIX1Heo-G\Q<M3[wСe@J̹y<Bptʢ51У/ZƗ$4-ρXF${8'wXT0r7;~'a\y)ܬn߅/[8[Y̏vNnixȟU_MwᲟ)V.c|GS)o	o]|hKX10	Y&Xսk_f옛VZYw·$U\ޯyyDͦZWaZjlxFʒ{Un(,|Rғ)9)2	vRXJmw^=p^C)*rȔ2#.&7C;iƿ嗾moz_hF?REm^~-7k	GZ*w2PtGLxetBGbOAL0) MII<Rcf{ɾqWRTGtPR{`v5J(a)+*k0J+gˌg]An2:zs^.Ԫ\Kۗ
ox_
Bq/Ǣ󐢍УM6"Y,FEAhcDOk̢%6ыxq7"zG+g$%*k:'`d_2]DDL=4> 0$pSos.~ldt)qY99m]9lwԸ"aǝ$2#[@&;&S#l565GljM-!'zU/.Uo)&y6"GÞ];X/818:SDFt2F1ǘ8S+pǜ!4+eG٥U?CI>ɳjGmn#kn×(b8y䖀FF $,S+0+Op6cQt0Fb<&?!)4[`*/8K O*i!de)&D>l>ʀzw&q;
N@ԭp
![Ƙ0.u8CW{CuġG~ nJT2J[	GI AiX4D!.(]j4B3:M'-+㱤I)f<SB)i5ÿ2J2ds3hwtyzmhByihr^:_
"^!8o3D#n5,+ƃ9?\ɰnFZ+EMB6qpmM?425lO+~ǴÞ%˶KԬ ;%{=;̖Ɇ0$/mVFZ
LI/O{%@x9t1;,*<<]"c^yN¸&/$/NZKRSR%D׫7^$cF[~\VZׂɇ0`0PN+<q$ͫ祀D,d$^~ "Λ"Pwgtd6p=$|5/U#)Wcse$IzAlA]r|ˆ^KϪᓫlM9&f٦h+_JqCxωy̾Oꢻj9[e=:
Ꙁۉkjjސbi,?QM>:U
l9ܚw͑e,#_!k4w>H~}$7C55Ȇ)?Z+?^DzYϞԄeeYtqX
=|mp~?'@twKurѳIVm,fc*ۛӜ6$eTUJFU!RjںӡډtR
ۨMtU20i+q[K:b*Z)UYm`3;ZS*el\Q[h$pE_>[&ɑܞTD)٤l	NiGV2!И@eu9}3N+MSRVjJZۭUJUiH;C}[fTWm-)n\#*$@(ncxH,@X"Q=ePw,CY2`2H3o];H|= ?\-WD]2GO;Q4ϕRi9C21 ecD=ml֎+'J9Xs;Nl+:s"z[P2a#pi	iwy*(NӃ\+[viζgOɴk3(Sk(WշW;.k!,O' 
[
.Yv0V{Yqկ?⳶)]+31p+ɂ(س.DgX0uzҵ&$;KW`IҺU:z)p_fV9e-J8:jLL'#z'Llx!F3Jp1E:$&lSV8IBI]d_U7]ׯ-o$>/MIǰQ'`{|SV<Ò3"oʒsr9$V3hE:{лEIUXөPKPt
    PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#02S<]
,Ї(@ohDK3zTFdkhl"0$ d1٬@<֒}#X? T fҬZ[7 PK     PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEParameters.classOPǿh7:\c+ba2_Ĺ	ot.iO>7цD㛉I{o;|9si9 b=%$/uUmcT,bͬY7	|D%B"ͪVnJhfgjh3C[rܰfo%Axd5kfu'IyIWR$pbi	ܪ3댄$f9Os1Y	#6$cv߶To׭)^LSrffa"%P*6i	*&lL0Y<"&	̇4EL-ZpIL/A[hnluM1#"3s>}E	Y#_Bn/7i1Uzć)O 2ccβ,YȆ#):SY㝥-fDowcN>PThudP2ZZtmF9=+u~!0Fk`sH+Oo +,vOҹꀫ&]cm:NT#tEfEB{ 
AMڈ6dUۈJFBU6TE1*Quaů"ႍ'6	dj@/	@/Qa+*ֻAnH"zf8]|'xu}O<y<G<w:"V=p-b
AW澍}Ըw2t2gLsxU*%s8|Lb2FقNPK&r#    PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEPrivateKeyParameters.classQJP=7MFo1*B>J]BD(?QA	3Ù9s5HHu(H3lAݺ<q6[<nBߺt|\98ѩM'tCzpd$3RЇ
MG:C]6 #Z9Ը(\3!3l>pujBGrTǘГ1!J֛0<c,=NZ}/c6}tA>k$ԝlF,E>3aVRzqaJ_S:(1bQ`,UkԩΛֆ~s=sR#:!B&'?$BWz^J;47] [	q ژL>PK-H
rz    PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEPublicKeyParameters.classPMK@}4MSGՃ^QX*"ASlIŃ?%ERYvfvxޛ}{yǖMBMxRTE<әTpR<Io$/bJ-Ռy>eחLF.Zpl1at3,$Q?
{Q`+Vp|dS~w(d8Y14΋19t'RrAz>.5]KѠ:.a:?~Dm`إI
&PKhA    PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKERing.classW[pgV겖׎W-+vJ(,!rNbR9qlj'PF\YNõ
-Ӗhv6xa:tWZs]N2[{s޼/܉pB֠#A<k&rf~,10.IܝgKm'Ux%	R6Ϝ7'P! ME j%ct>=6J9+1x:.N
+ѓ:zl~L̝,SjmwR^-ޥr9k.MOXґ5Y~ٞB)A͖TJ1بIS")	kЊ=1+o͒u_չTmq0~ҏ`jtSByLP˖:dpXAdTOT_Jp#CCJ24;U&$bќM&g%DoԬ+
8`?BUڧv~'_
$vR,4@Qe~ܣ	]UTF^
	OV*_DC4'Fc~y*xT{">>m쵽T G5C?ӹRv2G'
Mm8&'4dda;N5<$HVf:m)'Ij)!rSfi<Q4%jƳK'&{kTMt*@ZCQLfi
c٫jY
qVZŉs&wp
`׹OB)*@7{\90%s-%g5NKQeSɮ 	s@ްw̢nݦoT|jcm]ÏE|ZTlt]Ktg4|T23
)Eb_U|I×=KňZ$?Kmjݾ{JW4e7]ȗl~Efl5<4ls4f6,SǏokx	hb2RjI3I1\mL^1xÇS=1<pd[OL'nJ!JPv,oDy{nw=-+2Pf*19.
d4=-YSbVAbN{kh&Sh z|&%	S=dUiرJb~cH4&$tQ\t@MvBw΅3׈sӖ/V$n)ԇ.÷
^__D
W*a[ŮhURW&^K"G]T$31VwR6dXF(n`YV*$un]Ct'tmrwGlXDG)D{(\D*>"`UXlncn$swЕSJ؟m
/'Q'IA?ᎹMά{{@=3;#ulu|xCS!~&폹;	ŧek2Z!PAZ}^({5P
%`/xmbm7I߱xlj2ok[vpwQ-dP&I5eˆWPQ&>C³cKrf!
ը4LWR^o^+v㣾VOF"Ǫ~Uyq#+
G;lP5xEȨ~(I
xؐ;NHQ+x
NjIjS\F!sQм<^qx`յ4(9T˰ؖ0}	Y?юfFm]hķ+lfw*7Ntv	;ՆG2ݑria\0[QKI%o~%p@v'C{BGI
EYǙBKܝTr:glhHVgK,4R&}d{NmEč@"	 ſJfhF@_F0u5dA#h,Vv40jK1b,YL9(k*+?5|}3oqqҾmMIHk%I/v\!jBxm1o^kuX\ÓC٠<BCwJj,zIf({Bz	TTAXKf;YgԉJ1_g;`4臖:>AX0`AXy-򂵶궨;HGhp>YϨ_~U4 Ѐ@*	TFj
4(Poh@M
]
F]~\'\]|c,1Rg$1<z{I(!H
#ޡ?:oX_ f>֗Ѐ-6]vzB[+?ȓB@-ڨ!m|!$D^rAjmN=˞KgJpiO2Yu+(75W\xM]x_dħ]BÂz1Wo0Wsu%\9!xTwr{w^gFo/gpi
u*bq}{h9 #CCEur1:	s,K?l"{CZkY3g4/e馍QҀo-B=F~E֫pjT@ K-
U*t,fL_z{ڂ..4.h7>w PK9Q1
    PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEUtils.classOAǿӝR˯CPZczĒ&4H0R]ڥ.Zc#QIڄ&$^^hwoRĄĸy;o> n`	7DߢT53_368l= f C^UEU3Sh+v^dmE[r֚ZD'$E3Z:Ϭ_|䎖Ybh6f̔4'N(&xTmڽp+<ɜ0Kz$Hܣ=Vģx2D{@H)w:&afu#p$	%mB
)m>OҶ7[ŢVJYLڔVRAqr5[YҟjH]NF GuEg'l&Eڅaa$&8M]lӿCs=%9gBťz}p^1.ʠJT-]
<Agy6
B*ʳW1T?ª[7Sۈ,I岛w`wA>1~>p 
uS,}诟
EM"U=&upAc=4V.AUbb;8tM<{PAR,S^&2Xqd1&{r.F.RyɍOΏPSBZUkWS9ڎOQZL_PK\    PK
      A             5   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/PK    A             @   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/BENES.classmS]OA=CݖB1J)`1 )
lJ.k ->џ/<+!5 _tٶ=ܹw=3 :!!B"ڰ_Ʀ]\3V7
N@\/צ|e?eP$VSwjm`_9Sk%r
E ZYke
AypOw=#=Ig sE@	µ]KJj|'5N$rr '?皷ZaoW*v)ēO_J7e^b ~e.Y+c&#7/>k
q5pkp.uDO <,=/ȞY5y`3&QrR[Y+8+7Ig;a5V;eVx(5nMYg@#BI]xl]
F+:WEN9
 2ƓU>B׍	AwRR<%k2&MdMORS|ycP`2JY n<*4y4yl/kڽK}T$
qyDaNz=2է~ڧI]낪4fbfR@y}nf,5BcmR5K">^|O{>W?./Ҹh)ZԄjBgzdrB.9puy;~wN'|1۸݀1H+r
.髚E1df(Y1fVbQY%QzPKA    PK    A             B   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/BENES12.classT]oE=]gqq %NڥpB( GB8XGg#ml%<@FߌP@BBU!Z /n$
9{0BP8TtZ㺳QQ-픊VuRcު9K^e[E2L&ÀqxjmUZVܜ4t&bp!xr.OQ*HaB诽άftt2j^k4W+A
-`>ҕO[3JqmݪK
?Y)٪599!f|>-'VrųKpzeg}#-Ude-Lz16]3VjqrB9y^5Zݪ+OK]RatOW)zwv#y>f1d#="_vJSiTB+tRphW,qu|2}l͉[oVٞk0M309<;aO,yI
l&/~7oHٲsQCd.xwsDRz[ʃBJwH#뉲Ie£F"XeBPyȧAQ3jR řwy|6zz+O\Oޞ
#`%^IG.tl99f!0v
$4Ď Î-B&'{ર-*%Ge{Шм4ᏼ	;8=)ten[[xu$]iv_O
h֦l~,_7?~>M(w0/v<.4%ߔYn"ͨۻ987'7wsm&g?B:2ۇv_
4}$<h=@F2`Q@yXPK@S    PK    A             B   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/BENES13.classT[oE=޴&vS
NnB\!rqVM"$hq'*!bU	!s_$ͬ8$jf9e0d(	
:ÅrVU*lzs+BuR/>e6K$-bL& GD&Cx<W'ٕE	NrX&q8ZިokP,g\:_A6N֫RRy+FbrXѷ5F1UW0>efIh}ĳxέUoFҤ3~27qAdBtf1cPrp111[۬Ww)X6ϊ.pq!T[+k^ɫIid71!e3/=l=_x|e1V8Ĝ&ڭJ\JRj6/q$8G&IzJ9~"
H#)ɨjN4jVxVUFzuoO!>j;:s?rooJ𒋣;^|}Ge{xmc5.Zxj!p=ZmkaA"u"Dޏ&^	}	Bڿj?ivv>
%A
)dhь~
+ ]CO$tE,
?EX6wk
B
aRVːfC'lh$4[HviO;a[
eW۰uNEcZ;HtB}V.GMbJp}'
H8"=Lm\oꅌٯ~}6-8zD0淒8`^;#ư iK {}N=I_ԎU14,#.fn&&N9ۚ(+#ᣚfbB<)}䩍SK}Yr=q>c}\K(ݔ%)oKdYRKrބ<]$jchӷˌQFqQ"|ʤ5Ҧap3=fAǏF*ve
PK<eR1  g  PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/CMCEEngine.class{`\u3͛if#?K_25eal]:vȚV>Vݦ| v[&@\i~gٴMhB
@ɏn7-F9f$Kw{ι{_ M|7@A ھ{vu?U5p+[zo-{̶ؼgזvXm0պcD!lwl
"`vgg&{ y|@%6rp綎_p6ļE68b=lT@U6,jяt?{~dn_z7qYj2$Q

Vz"lܶKCG
%Ù생Çewfd2piy
I1}V1>p
X68 ޳ @=Լ/-۷L`)ikkkN؂ڟ"Z0?E6Zpu¥E6DkvoqR
mhtwe-7>١uw)s	i3`\B͗>oeۖ;Ńt?E
({Ca|A|~tet$ 4f6n
]L]ݽ<h
a}Ch3P_gfzqY!k۾wDa]1n0Jg 0la3al΁Σ]}o5ާ1˧Ej$#6I!Tov ET.
pP@6Ϥ}ndN!ne86jao`(N`mwl(.]}C}w
>8ӟC[c{0Tbٮٛ#fm>:D
L>a97vMYBZEivǃ zSPgf>ȵ=3$tpVmg`gOs}f7>S,hK=69G{3fb|ކ/uv=ԁfE?+|bMt	vɆgYbl!;M%p?SvwnWkIH<6|E.߶;]"=DZ$?`G@vo%=ݽ	Dx~hÏeLH3|}V 
@63ܕ1::i, ?gsE
otD|F"=Lmg?*kW\\1Owl
n Bƭ:St*rzP;܎vȕ6XrA#(֭{GVd0G,)"s9 )Y)+Cf;<~%b!٬-RыA0bAQC$ßipnGC6[V"p
vjm^le;whwPHMя6ٌl-$'ٮi]*EhuII&TZ2h6fhQPgCv(+sVkw.Z-*j}T֭b[: /
H_jMTbZTϝbYa ;882Pzh5ЄDnAMQEi;
5+bNLhkTTmjcmP&bm	Tb(Z<vjv90Yȅlė=+\[
L/ s4Xt&	4^XE`16ŊZ;ϪᲃV:`w-aI0ۋZ1h(qgy'*σ:aU2Y<,aw9B|W28hx>$d<CYHa-=O
ė!"rn=~8`%BB%R,m$$ρM?Ej:7zs 4a1P}KciᰏvAFeP_H\J).۵ˡ=~szMXuem9`L_8+x'gRƗ}O1A'<&`?аH<tjp?erSRObG7qK1fd9ExyjYEf;r؃Zw;~f_܇k'W.MBSZtGwԒjDkd 1BmuR?AB*\ok<I/cA\k	'pN_\G$M@{1h
qeBgXgkB)&Fp<\,?AhTLp'HFjs¤3;>Z}TyQ-;N-g[O::sr|b@]͡@ꌤ8s	rJR1	ufWΨNrp
$|Q˦dWCp|W_MCP]>W3Z4v9xl'&p} MVSq+Cwt`=2.3%xe0qD	$_[RP XRċR?aKYoMw	F=hM*X@$yPe"ys07
b?|?zhDm	;B_CIԉ:nͻI܄H=%WntO@$SSžcŃ??
R;Q1ϵ=+PȜh,F&p=
t%n*<
]òe9YX^SWdtdTDebp0DnLJ"kOB]c:jIVOx@OBx{,htAk'a뇵H'ўt}Y"SUP<
7kTnOQKsS!TG}M?rjb<PZ:h=

Y^GO
'zTOVoDvAZZ#3.&RjL }5sh.
rp|ԟ)v`J1diVx=`uĺƍ:noeU"ZI2	ː D
(f{ŐLys0bM:%e0o O
DH$<8	Hl")01"oٿÍ'pf(фMQc]b7]:3M\&H)15Rm;@r@9	(Q(q/I-x(O^*߼\ťZpbNMc!ai(nU{?/ʲt`$DYu?)w6pb	&DTV,>bv$>TLdf&;9M*I~[y,wn܀k@f&<0	y6TWά 3k3
{bd90ZFgƶJY`t敥aRoyZp՗ _'GK^g'Rhc~i::4|1IE#8-
)V~ۥ-͓N@Dz}VRXHmgU"67
(ss肿D=k0a91@a y`DEU+nVPayC)R%NuFuڔWiTAݬ~u	YC6]Xk"/vfGG2>zN"|%An6A/·3&bmLABɋ.jyLudNcEH*pZۊTW<RBqxFp
MRE|XQF6"~Gρ|*hVX>!P4o&&U,60xIſ%>l/~bmNL7*?pKx|`7,-LQi׿wn0,Gg*YO2,WE௟r+27%x8Q]B<DB6[ђ%*t	l	9[φ@)N.OSZ<t<C\NHƵQ7$|otJKs-SJbIXADZZ
L49`m
qnda!Sׯx
wa^iR
ϧA8!,EC1
*1GT?'Ք:
ho($Ңٜf 1T3
+)O:+C*Dm)e0h)H`,oDs0q~q~%b}HT9~n(('Ji ڏ ,:(jbD鍢>&M8fb4MTZ&nwhq^!4B~,1'죴@]$RJrg (@0sR	 0H&ґ2j 1MCC8Vsi<YOQMpNf̖AFuo3YԤZTn Mej $enS,_¤9	i瘆țC:CLHE\bfbE8?\$x;Vd>gkK/{Rƙu}R?B-7['cVFƱⓧw
/$JG4,htA@,=@jap$lKt5tH,(^?ElH}Mgb%(J/zgҘUp$P5_ J_/0~a?a)Jך4TscE\?N@5?MO"EEu	ѿ*}
>%Gi:#n.O#;"hG<!ӰSGgf%z,A
ؚ%2P&[՛?u`2gay0t-P*MP6Z5P\kơ`.fa1߅7
0[_Jȷ`-X\kaݑ٨lN[OkG1
Qce0b6kK怸Px-1-٬놟Ŵ2'1O{QEGkbZ4HN,xҩ'f+D:I?YbrPD[|nUL}RQtq虖mGx%>XE(e&1D0UFOlPIs/-`@Y脨US"qmq7AujI6uJ%5FfLn`!P03jZD⸁'>{,_d^B`UY8&*wၹPQ#UZ=n5Z˘/u{6NG	qvVa)cZg<)'7q*Ӝ%&䜉iSL_޺!ϒ8:F9ãR;S}%e	Q5aoN3gTP{ȭqþkP"_\C`7Ebtj[i,=eW5%[ʝ**C*' \3,H4zl"`ab![܂aaS׈*}r]97fَ1טvB1{IFP:=tjTyLNTai1LywkRe9#)y*yJ$#o<x!踇$pGG3?ֺ4	I/ZXEo䊡a$%!BgTwV~LeOR<{X;\^+.>}#?wr
uNWb[VT탙zzy3Ga)+2X'"xD3/d;sbhxI{V*
e*V"6y+Qm/r3ul<ު
?,XV4*?LY!,QT[˵"x,vnrI-vAK[R|*8Drgf٨$00,.ruwn2Kb%Neu2||Qd=-=͓ӗ3	a]ҖbU:e0Md26HE\i")vB0RHԕ஦/e"v)H|tH})F	DRc~"dꄰ@YH
8;nO]4T0YAz3$Gd`ߊPl1kC-IġAU<jBukCA_wi	3Ӑ@w.lm}[1a!Z6yK*@F~3Q})c	|F4CeDe_8߱CR2H}zAz1u	!SG7.eꍫbh'	˂o EVj.D_g|\I}*_-8EܠgKyM?	$Gp^9fOc-~ЇyX;"(ِ| c> | NK9ʹG9òJrE&b`*H-Le<8Fܧ	3OAI)w0Y9rJhPH75=*<xLklןgɸSF^<{,J)i#mHIλMwȜ3~o?k{R^	LOJ`xެe&fd0VWˋQ^ڕK;7V?1TIqOr)77ZRpu׀S\v
ֺ>L(ڲW=
e` .xwv%Sw5.;*.Bf[X4sЌh!EbEf:jw
{j` s̶E]<- /mRi#zɴ53:{ߍ'oX$I_/oڨi\$8Ӫ*1ritb㘖$P?[;;]6L5^c!D9]v|GFhN{7 ge߯ޤ'|: Nkv]͊F_ZN4]`kfA4j0P!y<Uo^QڛuQ${JReK<PTG&FۈWVD[W)Js
B2i9..$rIhF&/Pg`y._RyKQU,x0*FsyUvg z,IAkzlf*5ujU'_?TU/moPZYYKڴi<uv'1A+A
Z欼H2yQcq_l-@k-mrCe9n,9:-Rh]I$hix
ӒUU8*3fFxSe
n^#:kFS欑ݎը7>:2*>5>&A#)	۷[;\4$lQJ~2(cJSgtqsxr4^Q5|K`#p$lL iB;x@;
Lrg䦔ѧrLiS׿"030F	+5\$`Dv]r|	b&̡͜Ud{g,vB<"TVX/:f<Fxarh_}<3x}y?&X5r'Hl'ٕqtsӵ]1Sk][z.[`mz[ma֭7ں5F;[u$ PKKXi  B  PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/CMCEKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#0sS}]
,Ї(@ohDK3zTFdkhl"0$ d1٬@<֒}#X? T fҬZ[7 PK     PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/CMCEParameters.classS[EǿKnrCЛRRk-B#V*!
rА@rRoK0cg(ǳ{7?n:-379gw?p
BOG1D٬+;0Js7:vAqΐ֊A:̺S{Vª9ՄkىY3wmǮ
d.ZR8N``Nt*b8#G1su{tXu(?[dcX۲̓dKmo1Қ+R<.y!4d62Ḅwxl9k$C!W-z6"Sia&8&Zf:=-ITۜIOGeN'g&}rɶlQ*=2=<:>QK1$_mK0
SLۢMQ%cDf"Sg].K5\Wr<5!!–{B!_vV,}:͒5]oo;븶crlz((:kQQL:([ֹQiZJGa.b[`d7{<}'r1:`Ӻ5Ͳ9#y^/U+S oQ=U|Joi*Ft=`إ^/:iHWJSJRzSiFiNi^wn*-*-K+J((uXYOħf'`PpxLk?4p6?pL1#
\|ǰ}4BHߡp
.8Xa+4AWć-|I>gFﱜ@ϋ)߿<d%!G]1.x#.fE/Rд߷u!^])_A0}3
	b/N0s̷$Kh#Q1N1KrKDkeIV<Ǹ0HDkHk
NlmHMbIbL7
%vܫ PK    PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/CMCEPrivateKeyParameters.class}OPƟn@ƋDެLB""?䏭v:}?CEb>xnەEMdiOwns鏟: C A	!aDMֵmpNWuݰMU\-,nZ3/x{Wd7|!pG1	qXeW
uݲ6euìsr0$!!c#Wj^7W+^I11`HjgjhnڼӄylPe9<庽iK,
Sfpj7qKBJ,>2YTEիp#ᮌ{b}2Wx[43FШꥷ]:Zɛ%!9J 0 s:JQj˸!Dżf*-=cRP4(k}IbQfi[-uJwŝUGϸaknME7<w_m{~aDtxHz(F3. }z1 P&L/`|~(w\')OR&)}Rn\E(yO˻Z^h!OUHr+=9ȑr_#@q8sslgݺcb@DJzC$(J(=ԲOQ5PJBq'+9_⹓HdY} PKN     PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/CMCEPublicKeyParameters.classQMKPm}F! TE'rG	IMC_x5R/3;vuh(PQ"HdtwI6NcGtMa d?L&}<%zme+0	i:IgLVEGPz75̡L颕kP7&x)׿΃(H/-zYNx
׉o)E+'gu_uĽl?^9z{z[9|A>b'CPK)    PK    A             =   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/GF.class=PN@#v 84W!$+
KiRD%rlǏ7
*$
>B-t~}L4e	xs2]JQ04x`hÑM4)cA^DkEMxLBɰ?MNf	\3)*ID[덽7UtjOk"rt}T
M-]עyK!4uו\װh/f@*	~}hDݧ"Us{{W@itHᑲ'<}h<řrPKt0    PK    A             ?   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/GF12.classUoE&;Iڸm^RI=H		Rn؎DdrK/pqr N!
5ofn@Z}˧ `	B0/m5nQ/wjmz׷[U-[w`6Ḉe6.-s%鼋I?o+ #д`SU<[ʕe.ݝ0?F3g]xH
n55U\
#DդBW\Iʨ!+48X@D΅EvYT>,zQ<B~Ҭ-7[5
"V〚-**O)pܭT?x~rww:ؤNaї4"ˤp\G>M~HZ1k5􎱑4𚶖,VRG8<5qB"\aEY l$CMEoHH>S^;ƬtyEa)(M~
g
Ңz/\R
0h~
sc'qJGL9.Rn`)7Ogդ5Γb
}(S¥LS,adKʴL$YJrKi2CVi*i,3$`-R.A]ҏ}B(}B^},MH~%@oǨXTIv[M<-8mZ{ХO~f:x2!0MXL=	f.潈&?h2(>"
lT`iSs(Β˦3dɁÃIa)V[HDQ0Ny+puI/]Q1+TԻMM{+^=\a^|0н8T/x_}a?x$?c6DWt	
PKXT7    PK    A             ?   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/GF13.classUoG~]o	vMB-
U(J[)5mHPG*	r[*qP.Ij+Uϕ4JqNA{{ovg?<<|bC4by\XnsR+(Ws0/7&h
&XlFO_0[m6L-H{vT'qTVUz-
g܁p$p޺3jg.$	҉	Tn5<^aw` t`
IZT!Y	^čRc.W/}+,6j6TKʨߨ>(P~J$J	B@!&Bzn9{pHaT FeLt
rU`Q5
N*S\\Bv@WQ*AibꂂߺYWp'K@!eJ
䑢>
np[m$KZ>Aig008JW69f|ۜmq	|6qچMSQ-~WLtFd75։Ǜ'nF0471`_5U_$gܺgdؿ_g]8DA?!dO{ oH ݅:`S>ُ?ׯ)[!702D)hH "a`Z.h!fgor3A˔2%-#dAZ'JZ`"O6)6A psmHLx6|6ǩRRzђ=չ*!*\}.Y?2\OI_Oq]_lbks*lhε|*	ِÐ&HDa9UK*+)"VU)0ki7Rxt&F\Bu?ʣ"0GeVK%Q" nuu!_U1&q7D5SFқ-_:|c(kr^N%S(f±7\0<%8?1{*@յ:@M5މqVxpYQ{o*yoiXkc?V֧,N5a̭ͯ1B
U*ӡ*#C	u,TM^86fيGu|Ͼ;쫞}է꟨T߳zՀTGvGw~!^@`E/PK$O    PK    A             @   META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/Utils.classmn@8i (I6F*H@,@,RQH
8&;$nEdX!U^uU@,x ԇrq0sf|g_߾z (5H-k2=[2ȷ]
0F*f4`þ
}{׶Fۡ뙏,Ü熔\oW{rYohCg(46?8y
(1O~aM /h::}JM{;~i;fJ1à`<?cPѭe9s7dj*q{"QF١DmD֠mu=U
|(Q#pVg_>'p1 (v,nVt5kOU\JgP* ,AO-EJdnq%Sm"ň*G_Dg(.fV3T	k}/)Ou<)՗q-]4tQ<K!z7eXbLxe%҄;X$6bsY>B5h|`Q~g'ցPK3}
p  Y  PK
      A             9   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/PK
      A             C   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumEngine.classZ	X\u/0 FÀ%[K@Vh#F3O0bͼmM%Mv[qui͈
N$m6wMm=*r
U8%s޳o\.E<
%j؟Mwx,xw<3\X*ߝHL0}ЦiM607d\g}{Y-D-m 3ZX|VK/Z^@20Z<dzsqٱAbc+$/d#$TF2ͭmܼIb37r1HQ
lV>rfvKz9`,*Yv:6mGbGydʜ18`Xx|*5-0sfxD3ԙN>}tB&gMX*5#чu~&6ܵ`rZWw	#=v!׏TpH0.cݩXz{E-N餾_qZ@-Qa>><7S)2@@n0CZVOf
pZ`M{ 3d(:E
3\6Fasyng5pNŏI^Y1K9d$΃R7K'2s$̹x!ǘN(e
LK̰G]6zN͑>h8QJKy֓sc/Rd3Lz:DPt-~$񀂌[J#1i\bo5YF~qIk0<.q|΅l" bGTMߌo!Dp2K9~|+MK|,H	6@fdwK|v9KgZDf<>"((Ӕc|a!0Ia$ek}{x?kuVG%~?N$ɼ6Iә9-G+PXCoKy<.iB\'%~d2=OڏgXS~RpX"a6VlR%t"!LY88س?k<vA~|)vtKy(g;gUl?jQkf-e]y6~(Pkď>%^§
Kykqm^ze,>G*=>6^ΐn<\k/s
EC79nkZ<3[!l3;x+1}'ss,:HL3f?cNՈ[DO9y(n\ǟKNtKk˵y<ɟw\I%shI$?V,/lQ_p^ƎE?	QZ۱%ent:T`}fAc_
'}kH<6O$RN.`s5(HJx5}œqd)r3Nբ<GyQ'$WI^Ї|"(EQ+ogn"X'֕xdrڡK^@IhA
Sy˛_"iinxZh)Oki-Gwrdn0k9,EDl;wo?f;*Q(I=,hdo?JN䉽S.fSǨp:*h@q}A_N1nr2G/JB}xLט9B	| 7~2m)9*w屲}8Y,h떿3I6ȁL,L.VrLWeV/+yP*nZQfnSZcJd@h<`4+=WBX
f.c++-գdiZ1|$Oibe~@NƧ*FAV,) tɎhL&)3ZdL|$#B6Z"r~!2`ybaiKWH(B8%蜼tAլ>02|}a1)Lf]nfZS:VcXRr0M:l~~f$(%TĬTA}[g2#*pjB??Tb;nD7qwP}~/swQ}{]wSU+{ k2d묲*UlVyUnvʻrUg{*x܈j/HӃT{
P}9! +Zp
mhE8lÃF~oEx
U[lx"цG*V᪊lXEÆG+]6|"m'*;mdEx
UxE׆O38cUף]щ0E쏶.S EX8 kQeYhEDc30wE/+[D]4O-"
M-"
E}DC^cQ!j
3QCqCSSe$CعhB.]^%lh0K>CVx'&Zcf3/m|eLN\!2QTv-b*N@Ra7C՝<{?#%*,`]ܿb3 6<ͼGb:aQE^%4j2]y2
0'ضRbV(Q*t= n`o`(IgqăPPO,MH߱P_O5=5]Fz<+ۣ,#TǷy.Ρ$i')bI^An.[ĕ3]ؗPDrJV]"OFypT%#ԡGպ"Ǩ_SL?M,gԺ~'jjvRT^U0~|O0|K596QQ5Txՠ
E
*TԠW
+Je sSCx<*PagjC5:TC5/:S/wLAmPu4AE>i,C1ӜmHgA|KUj(bJ2g`WM+kݰ
Z϶ZWį
nij	{^}RpPCj)zhw_z>F&UپlF6lTį3yZb38c+#K3reM݆~?TVRx/P-T_1jc7DWoUj3kcjoP~nfff8xՔKxxL|:L3^F+eKV¡ۿ۷ܤ|Bŭ	Iǩ4vahkU>,~'PNh	:TC8`GY5zi'P'_y;mBSk^BUQSu(3ܾ* X5X~PSݭح4֓w >ω>S,mRbUK8~)2pĢdWӶJFߤu.N4Oçu
vSEOmAA>G?Ϧh;^mjܴ̓g>#q]Wjl([wأwNBeyޢBOsy
/Ԣ|U."F2	(R"
PKh  O'  PK    A             _   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumKeyParameters.classQ=O0),LlI	 $:tU,%M!
"$~ ?
RĆ~~w 6<h$
3b.+Z)!MUBIs+.l-oTuW)yڝ$VvBQK3+:A/r1ZM&EFU;%\Gmcn{XL;Sn(ކy/pPG=[d$G3JaSdiPKD   	  PK    A             \   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumParameters.classRmkP~4fnnթMS511v
c
&5- xnR]ay!yι{y {հ+'l`sG0d])AENtWA8zw&	[儓$D"zxV!<>m!q+}-ySqEuQ]k->װ;Ch%DXm)SFQ}lG2úqV7oK*'b{]mTTT-{RQ&ܱ3NǾpFnㇾ[OY[h2A3{if	wVvSd'U~i!/UT%Z,JlJ1VH#Ř2<!L-
m&,30>bnNlAr{)R֑
ugX;2<ǋkfCI*v*%Wvp7a+ڃl=jr~PKx&    PK    A             f   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumPrivateKeyParameters.classU]WUݗd2! &B-j|P)Z;LFfdҵoZJYC30) kf3wϾsߗ pzcذݰݪguYsmuWֳjf$޲FsGs5:ClɴLw^V~qHp\g pjvq&/U2(A!sPE?ސ11!#ŗkl9zmF8F^-qϭ6Ǥ.7q'w}7
/#͑P2udczA{epL-	լ}t}^~^,DD?bnךSxG|jIUN`7!CeVآ3b}#>^߱
W'Ft~qT1%|*ccŮK8k$V{9hґ1$ñ
/iKb^g'Q>'bIxQQ~.iss|m?wW9}d&}^L_Fy1tEݫ\쇼R[j{aRAӈjnCGAmXybu^Z,\ӶIKҷ='b+pl_S:$IC#T)B9p_+d
YXNx!1I	@b(}DKFgg@:ᰪD=#*g(	U=cJU1ğPGLWaxv4(hgRJFcUI򙴪DO[ǋ1y4/+(Տ;S&AT@)/,ȋayJVF2d,ɘa&P7bcQ&.G	Ke Y*RY&(S3~
Naڽ10$wwHWiKQ3ldţ	_X*V;-w#C	1#c*XȘ1dPKu{  
  PK    A             e   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumPublicKeyParameters.classROP=x9mi|h1ƇT.6X.D3Q˾'b|=qϯ	wa"ǰ}H7TTK"S!owf, %ep?Iq2P¡@]+,:S/|T-!:db=^4}+j~ }X)V~og~JX
{u@<pň/#]/t:}+#It?%ls}_z~Dж^*uA>RlM;Ki<]`ڄ0G4'vk}C?5N;0an9OXN(Vxr5Q6&Ӹc{vHeg16hsA
oSsCTƨٝJ,J5ceTPKCϛ    PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Ntt.classy\UUa_DS(*N`zMMŁD 0̱Rs,F9qrr}?}}=w^gǫ)"J^Miy+weOIIiSs-eNLύKy(OV"fe&''fFgDNϱT䬁W;qTKy3ޡX*_8(9"9;`n('7)#'"%=#=_zހV%̴TO|
ʩ,_!ydHMbn=T9UޡU`bԔdf3 +37-k@jv~ɔ-mxwU36is_kgf mQVAµzB6G,p"i'GC
;SCkUv@m*jHm勳q6A,9ͦ
紹86EhUawV1
,lqT4{Hc9;_k^mm_fqBm)FMfllJ3.bԛe	hXǽj3Z+EZyMӪ|FDa#Va=*ͯ:lok.F0%PzsQZUEw]yZLյ-bRm;,lתu~Pʛ3ϴٻb.6Vp#OmnmxGK-\ٓ~T+OXdv_mv<"z]m,Z\ZUVZE|n`6L_Umn9U)Vn9m+G6hsGF$z62p?;3Cܘnsy˴uV7N>]UCӃ;ӝ17mql<`_0m2z*4}ZyD~f6<ܚ_1&.'VYnp.c;JƦUmv&s=>h0Cv͸	A+&|x7c)b#.dOT3h|!p|-6ewOsCU@0s~,{X|{;~-Jqk^b/-8%Ʋ~u"!Y]; Q:{vy=:_s_U܅RGα!Yݻl;ر3YS{1\~Kmhs%Vdk!9+cQ
n&.d3[Xfzyv|̎nmjwg%CWU6Od"Q6,vkK<ΎjTo&t?7t/5R9zG9
q㶃w-ILŚG`Zv`]loD|ZU^ˬ~:SZ;*97)I$Hu흞9r<:y,G'gQyȻдTepO,BY_VUǿVzP-]kJh}[13+:6RskUv^7em}TQ#E?qYM|,,4s×KVFUvdtz2%/fWa!%Zyd:iML.f	.N2CGzI6EكbC$恎QYq2饽uqQ\#4s_hl'57 Yo7
t4Cz0'(Q<e}LO=PKAqYO`VbIdkv%|SJ+JTv%Qt*gHOT#JBu5#ˠ&YHMuH'~ Q,dy4 АD#" DxVd%4!+)YȪ&AY
d(Y-0<ODKZ#k5Y/uц@<YmxlvdC'	xlNdt&/JƠds$ϡ=ыld+$qxl>H"۠/d-RJëd{Џt!Kx3]I,+0l29dR֞%{!d"^'_$%
2d
x|4Ed1?!_ûdFPHf=21l"s!d>"c:ƒC0xr(&o`"Ya|Jو)1Uŧ.*{)zFbч+y0_4DcP4Dh&R	&ah2`h*MעOh:w^Vfah6V`h.ֈah>~-:B(Zh16Ϣ/QDKY[D˱Uv7E-vC{.Jj>Z_Ep@#~AO8$ڀâqD6h3h+Nh;S8-*N9n^\ßK+.7\U!\u%:ۢ#:'E@tEgHtE`D睖_pZr鴴/e_rZN.NC|iy;-/
UJ|iyo9N*+|ӂr:-?#/~ʉ*F}PK2ǀ
    PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Packing.classWsUnwwkIm`# 
- VZR$Mi MB:y?#oZ%0/㌎834i
ΐ:N=|=|n6_}s pŋ&(4ߥ;h6KGG.Yɢv,`ׄ:%6ϥS\r1/fhJ2[,<h*g2ѓ٩\:ZVqv]fCbbњw6[
|?6Kl1LÏh>8a%6-͊\zWHpk^/ZU"`
hC[3H^P]^t`vرJ1fssd@Pp^Y]xVb=xN}ML6zI
?2}HH6=8O]+0
v隐hbGQH9+
m+\SJ]᥎%c
>1<RJSr3:fpl~q]`%S͆Nˀb6gq݌tx6&?0ɦ,6psu10ʀj]\U+qdJ'	\p[	P.j%VaME O{J".{\m:K%@`#瑏wOX:('ߦ\]#_w
zJYE;?r.OK\/I&<[5oMM&*IŅ9;UFj2t]Ҭ;6A A3?-lSH#.A:SJ_ݴ,c[_	O+8>C;h_R"H EWM`HD_I]<DrM:8wC*tMb71Nt4~>CH%4j.0]V^ǔniK8HNcL	/,)ԲPC}P;]N8^/A\۠=@H"Cs[O.J2n)}ƂtjRGַ$Y/=^>J߼!۫۔NϷV"mv
)Y05
Qwp~T)]3A&[cRmg'lE	ChJLs*,Tҧ%.޿*1BVbXo3=%_߆iKǗ<mL'>S{aЫ\&uOD␄_Bc&uY,+])|
G-T`q븪]H<S>j|]_bݭRJ[Z~ڇh7
x\7=v1:S5e|`g'1iً5e~QoHx
ԧzWBz.#j`s ,#m(l  PK-  l  PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Poly.class:kxuj-kj;
I <j v veF2InӗknHڎJWNSuӦyI&}I91313sϽ}/] p3@}ҝ`gL:ϕzZZ`1)
v)3t4vޟ̌M
*ln8WʍtW_򃹼E`Pst_&ͅ	ܷĀOǆzh
g
޽E59|
QXp/־`ULֆF}[:12r[Z/7{6fC2}+e3,2a
?F^q+Ȳk}k'Jn6|
7Q4̶|noald')FpZ!֛Nhٽvkv"YbC;t0XwIWpa`"mo/G`
ˠrAkZ.WIHz{uko.56,g7u3[.LXi*X͠n-QJ(%.RT[I_m&:?ԶKw;Zc0X!?qoF"p+lXqі>V4R~pP6tk	nFLIM6ft@`.TU(-Մv]kS	%/	mKۆEH-
+M m2epeg`qF
`aP VdA.[sɆ}&aӗ_)>sQU*Im@m\eIĂ
p?zh!/=+=}02I"&6(&k1G;}5٬(+lwP
&mx|V5~0Z->!ϷsЛ
)bu؆#Ī.Sgs۲ٻ"S	ӗo-H|`hAwxYA``7]7[l.]ͅw."M
?GlBY6YHz&?U
 ^̾]< 
k
&
Ak!9 !ʸ}Օ<ڪoإvl8On02Z(-zE0#6lmǲ͸u7sXg|A,KgsnTzmް"46EJxƆggy@n8'lx1>M8hچ30-FK^b|ʆ@z\Aeǧm]=d4ށ`㪳Q/1>C/Jޤj9cZջK4	Gduq[;NzOM_qQRuqHr[E,X|	wL-+l)4[׸46|
:.-VVG+d!kE$Ʀvk	U1=:3-jZbw+x55:/ޖɠ
K;~E)
%]>s1&k_Y$R
b6x6@
wlNV+R7*:O78A|83Ɔnf&%Rdb{Jci:p^m*II%a8[s{`i<nrx!}0B xauD=N$iKyi44%C_çgya[I'q5$Z(	hDDc{-)cj$E\-)@Bx9 :4:g}5Ŧh4%B$x5f3E5N=QMꡞxTk8Dl<=p8N#Du_Q=j	+e%TR;Y>,72˄	$0|2$g#Hx\hgHQ=6vڣauC`Ҍc?T
r7sD
5:"DA co{U9ļi%15kFA$297/MT{nٰ+AS0l쉣ORI"Y ]<'8M9}d~:ptC`xadlv8%mh+v:5nu(d2QswG-n
Gz|r"P6id#EHU>Iǣa
+ڰ
Kړ凣y<8
OᬶK?u}]t
``aBk1)	ؔpfiء"]H&@4>?s3^Z"5(&ԜߖRȊڢg!\+D[hc_njh!ZpFmR_}hȍS\m%EilQhMLl1K/&ܝ] g:xwMnahu єhB30AL2$,!K{~-O
Ȇ̖d_%G7%bdk:r	7!1@Ig$csx
>fņB)r#>:BG`5)ZCHP)BOuH jEa|+syܶg<lrr2"eHs*7,dx9>T>K}pIz*3'hbPAg(TPgMx,īa9blfbjBp8J=:ШiA XFlx`36=[ةl
>b3CP
eM▻Qn#mvӧS&i:"<epT9=}ݵ|OSq.O3T@^{yTl説 UEA߅(5!ǋYȕcr# B ȝ
HuH)DXcc\ZcsU8f c1!l(ZXW`l(Q6ج [
lUS8#fnzpNrnlg
K0.]ɹ>g]'}?dUyjɹ"+`:aS@*D
) 
b( X
b)Msy7Q?'Owr$wa?z)h0F:IIoR)G$F&0Ich	#'
XY|P<qաys&qI5nRUeEIq.!vj,4) 푏](*̾fMaeDI36iK]LD,ח+YT4@9()N@#+x8JYRqwp4kh$8v<+@j|^X-^I6u4#qbssT槁-WIJUƯ(Z˾+#Re\ZU1*e»-W=7c!5޷4!u>gm8
X~#A
K߾W45Ō_lcl߰,
:Vp>V}Pï F|\vnp
L1GFi抱廜?3H
bfӆhAAx^@)_=KuS%}.WN3 DUg8|-o/X
gR:<eoyųC	x<6.󎍭(8NGMCYGv:;2]>-9kdcPg]:}=h"&!QⲉZbuonSSxnY~u:dK\>4-%~)~ZޝCNDuݵ| j@ha@egV&LsVjrXS[719G-׹UXIͳd]"R.Of.8,^.ͨvX7`=؉;#=p}t!@9e ˘7:>6.	%]tL+^x
tT:O_C=D)\5ߐ:w`8
#/^	oJNz%Q-ZEhdxY	=o_jn-~tCwA
Nc5WM[\PZ3_?:g">JY #krq>+o,d]ӢVЙ<H\$C!DùH˻$Qhh vC'B.WYe-n
ãpW~	Ex9_!U!U)]F꾋Dvۃt)hnިL}$Ijp%.$%9p-Ɂ-Ɂ䥷גƅS]
.ɿiw?kk4Ch)jXÞeH[_Km
_A4|5,ބٍTDPK N  +  PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecK.classWYs̠
 P%hFXـȒ152 //RG&}$d!..8yTf4JU{;}aDT@ڔ֙Ӭ[NH6-&W#j	+
\k;cvgtrpRԝgzZ4̜M|琝9,BָiIĸ¯>jZkQ+sypq&mCg*A EmDF6| /oT%ka6dy*xCVAe񶪸
I?%ujơ"O^n+&nޣ˂gVɢHeHs@3ua1qLרT]5U*1v2!.i_ש؅ݔe^OM
VtuSHK^RMkm}*q`j"I>Z- jV~Qq3ZY 0x>b(!r<w!^[mHlWrT1E\^l}dOJoƓ.MaP7dh_GpT;pE}ey96
D<Aٓ0	\[1P"lMWrt,^F*t0<GW1	S*M(<b9*NĠ6)#?2TʕL6'U8\)y^DP) i=;РdBe7^~<yo[
E,UAә
2/ ?$Rg%_L"Gy)_V.	. 5_~Ӱj#-jCX.GkjKZԮdfGIY^V^,:C] F+xV 2G),ɍ7KW%|I6{|
jEɀ>^ZC1mϥNTބmqA)D-:DPZŝqǯvU w
~Ϻ8-6M_3{R&ߤq
S_-O0_t۲=Y,Txh +,]Qh_ѯræ'Y˒NNs]*%QUpF`KI"bPCPN\t菿Ǧp먅ъ8:JBIjxEͳhI>A:-}Ӱ3IE87q5
jp*b6M#WO
]1zABK+P%+h443]ŎõPBlg:hׄ6FFÞS 9PȿH .gQ'd+yS)1RMNso+4ľ%ٻ(JdD*i(
=wJ <Hs4GcХ։Ƴ%ԭ P4t}8~}+_?*IpUHsx>
=FR97=tta?t[tT5	t=SXS^!ҾPjۢeRk-<.6{Aqm^A{h^*2-uPEK!1ubC9 Y>fH=<LeURyVtC+ө9k~?}Zӿ<	_PK>    PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecL.classV]SW~N$!(R!`*hC( jJP+Ԗesd7$~zuzvLA;^]QifrN<>9{?? x$>ie^}2~z|&S5i.G ~elpMǍ9]-JLxvVB4D7t>Қ9egtaIBs}bB[Qj#	&N)nUoQRƚf	!;Dͫ%ExْbAصvA6 #D<WGWjC6!*c<naT55C P}i9QrJ<D+m5A3)(ꜮMLOPgdhϠ	ఌ#8PAM#S|p$Ѳam:e<.}"э']5ĄK\	+( 6,H%qRJr2M1eP2ex2 NYC͋Z9idx
"2
!Cd<a*KID<+cDxjNbjTsPNqud~><QiFbiYojzQrڌ2{
]UsĄ~1$)aD	g4ÞR.M8ZXlX*'8ڣb)zASQg2q=#󅬢XٖU#[XywnhktH}"fg?w69~m0fNpsHx%t¶vafIoi`.m;f[|x/y%-c;lcWěDr@Iڸ47'
cf.[$p%GwmXc3WI5Y|a=Qsƻ`xK Ӈ~o3I4o/k`XUK}wMK}<$ߠݡh]Cࢇ]ǐv+<OQ^Gi"uTﻆG+V%Hn\v
e01t"]ޮdmh*
c8%sHCnYFPbG8j$iRTD
(cl'qArhE	0c!lZm]E-9YA$hD9Ďa3pvm8uoa[pCj 4eIZI[QiTk#(6mnIv%UE-3VE@\ُ]ٷ[:[a;0u41rDݕԮHxW(g{
+j}A#iRwIlo,K[F
HZRk.#[Y)~
bWLȱ~̚}M;j7ŢE3.foX[V6>`PKJ  
  PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecMatrix.classVWE&	lXZH0Vچ,6
6LنnN*?GO_HzNzꃏ>'CO٤̝;w{666ePЇ~ЦvGKY]No:g3m3AHaީSNwt喑~N;brfi|ìWRIWiewK pDBHQc}Y5sA.=ϲ,yNQpB;0p<̨j؜-zJˈ .*C&qX}ԧE._ÄS
NLw$VGS%8NrM$TSxaѪc+5teebh~h:|PP
4^6o;ʢ[.5Y,i1LyNy\`h[FƱu `ȏ̙Dn[Tv9M	
Ҙcre8b5 >,E]@cAnt@+Z{aVKXR Ġq8%书o-kUmݢp*rX/U.={(BZtV]6Sr([soYY
cAܤAlm5f2;ҏ/d܂&a]dCgʹ8[FV}]D+<a+ke9٪W\ݩ]̋
,+or#Memۨe,u
WmS*T	lJE2F*GMGX|H
7cNs5
4.J'O|XRm@Šwq<ŘRT,aCDnJ=%p0I21hk/ q|xB5pRƦHo{|Oda
"`u;<~^ӄzV۱[_7`e|c'B
nV395ڤԖ.6q~-&%}$eHVu+>	Y6/Ғb("8R^.75q(z7~ꍟDV2I0PKO@n  :	  PK    A             O   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Reduce.classNAϸTeE0"M4TѨ6Fk2de0KcXX >ObAw9s/s@
A#D1oV`3ߺ=GQ"Ъ8-V3q<kxXN8
d$`d4G|.OОdnM4D8t?ܱDθ+Ep&|>jR	}tJg.3;8ukQ'"	2e́l/	jRs,Y*dI=0k_|;~OҪ&c[=?m#s%[UIFslQPKK
 @    PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Rounding.classR]O`~^ڮ0>/7FDLD	]YCYiVڹu
 .MمވQ
?@1[c{~=UN =ֲ.e[ۦ2nXdj]!K-i{p+fHxjFְ*[?vɲM/p -̥) r|iV\͚k9CAݱKwjU"ٓ=KǮu.-9NX1QdgN僈CcU!`S9
Sy~1h9O\ $O5WwiVPc޵lj2_RBl6z|*/"зAx|`p%˼c]@ gꅍ	+iNJ(iҼ2Rd(⨥lE:(Jbk1.V<+4ZT#dr15:*4yҪ!g|DdC?F
x%cFmp<i)6 Up]wɱy^Iư+wm!wbIli\鱽 6هuaT2Q[t%B1/RgUix)݆A@8_Jnygj8;D$Z&PK"92    PK    A             _   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric$AesSymmetric.classTNA=Ön)VhD~PV)c#CײL`ݖb)|(~A4
L9瞹s~	`聢§~Ų{UL^9t˭UgomЮ\Tk[e۱qHOEPC?4?-Qzn2;P*ǢT<эY-zZl}ڕCf*B2v#3gd񮙮&)omRB!!w5VxbZ'y.7K-1L܄ĠUܲŅXy\0kA#aeлTL,	]M1
*1!/1<96t.dvY$R>ٯ7אHkNb
?5g4J~E%(P,u@EMBs=GUΏyDgm-%^W䫎SL.;Raԋs_r2tφp7[4]50% A4zQ4
" V`SO,G<?QE`ɗOgvOmW(υ=ɧ}P$sX:4}
j?VUE 1,\x?@ : lK4мL#H,+ PK;    PK    A             a   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric$ShakeSymmetric.classSn@}8q⺥	&@B8EBT"8*B=gZMԻ>'\\  (lFz){fv߼yv
`HLf}}u
Nsߓ
Bm/41]_>eHYFeWGnLi|Qa@d0h1d19L#ǰҖ!Ci6~ma$>V.Y6(&QC.dHZ]u~uȝr%gЭ &nb2nA1[WoƓneL+x^$'dVТ J['
Z&n,L(ہw(&
0.ڮʹiӱD&K ^'eye#4])puh+>qV]~W*cDh\M<ҊZ|SԴ|dǮ%km:/j*I{X,IL]|@Ơ4fLT3T\T~
E
ʿ2PK~c    PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric.classRMO@}E8x .$D1=y ⩔
JŤ+ă?e-9L̛73HP4&(MWSwLw?;۵=AdAVEN4r2wXZI`t>O\9m9iugͺBACQo9mFc@%GBOoۗ|	T""[(}TEFhR瘌Qiק_'&QPqNe1m-~Ulb	ĩ$-0Z	TB`Ҭ6kk߅
pr[<B%cB(WVv/PK9wp\  u  PK
      A             7   META-INF/versions/9/org/bouncycastle/pqc/crypto/falcon/PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/crypto/falcon/FalconKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#0s@S!C֌Qd9?%7=Mdɠ&`32bYx$'	 ͭ%QKg+F~"A Y0o K3  PK0N     PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/falcon/FalconParameters.classR]O`~6hW&!?؊`WC4Y2	+ueXRT~^HtY"m	+4yzy M45$T1IB~g[]E9!arB\SV.Z\{ǌ>8l}B#}='3L|{ƸQ7l35
t@0[n_f
>w7+{iW0[u?pʝ3>	=f
:
Bzm{ϭ,8!%guƜ|%ERs;c
UZ\ڬ74xWDV+`Y
=f?fT05n^kl:2X 
LBZqW8{nh;ov+1\F<AqY(V܉NE
#jG<r:1u² BEX<,y#p!	!XQkBA)s*>"]k_H0\"k1?΄GQQ? JBmzZ ɂ7|F7c3/Y&檘Aw|yů0"~^PK,:    PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/crypto/falcon/FalconPrivateKeyParameters.class]/Aߩm5.W$#>.h"q՚fcJ_T?gFw9g2o/ VCGG	U?~nB6kAT}r%%vT!xNŰMX/щTi.p/J=t\s'6lX?-Ѓ$2}2lB8!AHVǰJ2Yv)CqA=ԡ|Km_A 	W$jB5]9s4CF4FAK) F@CVNAQV+MR*@'$m,+7
rF>=0&@F1A=pt~9Hy}::[m-ܗPKwf  '  PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/crypto/falcon/FalconPublicKeyParameters.classOK@OjzЋ4
9)E0zԃ9Z1[Cxı^,웁o~o vÂ	ASzTUZdSSxr'bQMVUƧ39e[ia?;'?D˃`aOJe">:y+
UJI?MZXDRet	Q_JAeiHpN5:ci8	[i_\Y\Xl>@'A'٣U}{ڌf́OPKH|g    PK
      A             6   META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoEngine.classWkt\U793gIrf4`ɍ!fLL )5mDP䙦 T\.kG3b-9g}?z( tmҠ=7ckn,;81R#vNrFs\&nndS``Je['
Z)21`eŎAMI1A:4 :qmc(q֫S
s2La~ZA3e[ĠErep!n	[O)N%΢HtIRލ$ne#)$Y$AgO&g*퐗;xCYg-o]Vfp)CRYepnI^'yX9S֜`#lB
szB4ٞcOHW涭)\5lOeNlj4Qȍ悸\B>1<2t[/@
W09S\(gpwsyOOkOmW` 3AScDG/
R'ܰljO`sAHV$wpBf	
F&.݆mGcW@vHېap5РO:6LpOCY2)Mxk`Ԇ<i}|!@GK_G>Se0v6bUP.xLEL"ۗMF=tfp#lov`XmX&7ch"neu֨1iQaM÷VdpxD=+<.򖳃xEYyMt.4e~?:z'WrDQlu?21ǰ)}ѥ\}`O>ʢ1	~ e)d=Pelc[IKQ8dc`hf&$cH;0J|jH"t@Ɖf&0r|!-'RXnXE;TP(EbW]HYivH:5ڇߛٙw߀
zS|&(5̵x%KC*D̹[@؋#}C)6BlkhGjx`Gjb$"N.gL
IO8x/{v#`!EyS㟝?W?uq\G=^fE*QT[*tEc+z=[s=WŞ*)6J
"~_BԌ=!YvA]TnAu~yAun+ ;Ypc-3̀Ģ38u4c3L劶)R3%u8䰋尛mr+p
ϔC;iIm"8πsݒ0M馣M)8*1a0gfGmktصoVn"NЀ5Nw1C(ZC27G4Mw~vSA1ʍSnS,nE,ݳ͍i8UB-㱶(loS~_åB6}PzNǍq_젥SWG{&7q6d"f$ͭ8Ms3/ǔ߷1o`yݰA>4Iώput/[y[ӰIB8CgN6Ya8b_Cܞ?DS/>z4s{車. ~媩.ƒN=;t1¢Jsc+J87#}yCs*{@9Q{Oɶk~ʹo<21': s^U:0 #70x 'zv\xȷ
${^\(0
ڸYM,<8wm qpn[{=p OlkX
@M`~A
m_?ڍeрUwSN.%a8nSƷ#Uu+  :p2
/aJ6i$Kw	ʟdªX#Z4Ojj!93G`_?c"T,buQIcʐIu,&ҟowاQGxZrMoVaѤz	Oq:Jݫ4t	iy}ܣ(Q
31qz<Su=-u]>8`a_
yMR1A< > 9~-FdK/@*4L@׹v r^xZ4KK;TAQx\07
&w'1aDg$QH?`5eLex՞IQnh!0Wy렉Ej}-Jx_F[?`Yݏ[S
Pz<u~gCVB~
ꨋ=.c22,l֮ZngLUc*ܒMǇ
j!fx!P@ ]A|0u29X|{RDH[uוH~}!,0[FR'a]Va%쐶;DX8N[?¿5qUJ*,$D\Z$Y4`.XQs2{ռZ%qxj`Vϥ	&HVk[D4BmTR;>Ky*k(bo}[7	{~\4M1D7:\JD.*"Ҭ
6DkJ~@Us.T ӂTF)ΰ'O8y8'TގgW"=0
9pꂋeR'D+4k×4LJ{Kh%f>nD|M$'n
!0L3KEPH:oWL4}}[I%p"^F^@Uj9Sr$7 އڲ9B08cꚮSz6#og7l	~ߑ&+CmͻUTgbcB'ìro~fzmG$iMU{J6h7DUD[MxA	d2dM3Ão& P,.*k^!u%WYҨ~o,ѳuO4	)~y:jla-?jfwa]voN*CD"U<\QOW7vח AP.Q?K4%N|^ghEʋ6QTg5f$Cy~hȞқUhUQ-}!r_V,-H[CQ/"_2w/-Sb.YN=fB'h5ixNsA|I=uj1_PKc$
    PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#	0ӊS@$@3!v22i B5#F4À~pOIedMO-Av&2(	،@@$<qP in-Z:[72053@	iF ͪ}X PKe     PK    A             f   META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator$Aes128MatrixGenerator.classRNAlˢ\څJИPII
醺[vDn
/\	| %Ƥr̙3;qL$ա"ƐUkp+;jW=U=뙔sv;oWv'Ot`Hh0S"hq\ZKf9pWWLqLMI%m8:.2oؾ&^P	tdYjCR:zYU֦FMPQY(֪?f)ѧ60tnNZ+kAEo	fƭ:6|􀎻Ǡ7|",@8eUtab,zEIN
X(ё]fݴWĴ*fۚH\dh/ߜXWc!Rs˝K-A Gy@|$
} q?~!a|.<楘~C.O)􎥡=\=ubŌ4A͈mg}PrͳyogU:KY%UЯ⥒-4k_6TT5>Pnݓ[\=#}0B2	94Qgf	!s&(A,#hPK}%g|    PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator$Shake128MatrixGenerator.classRNAebX?YADdp!Cn]1[ML ^<3(	r9sΙo__ V!9
*"%׫+SmUئܨU\}sk>'<}1=CX-s1Dk
nM99qIbHWBS׍/bD6[_5.E9N3> \{FIoˠdBiqk@H'ΐTy+ȬS]giԅAqpc]6l6k"0e6%d_pWWs,Ge2!_q
ɉ
JdΐaD6mgN7dn`6ւhVĊmr`-MsVv3}g=3C#&O:YIx`:F; !p<	D=HQ{tRU{ˤ#p:B]tCy 5S	t$iN:s
PiaO%%tй~Z#,U54v%GQZL)VInfj82@icQ.uqj46CPh
~\վI2NZ>PKbO^x    PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator.classQ=OA}s)XXX F1Q%~$4T˱"xمϲ & qVKa7;#Ԋp"G(q0%Nz2F<
>M<=i(4Rb<	EOǩqiL˕*	e[QT4!dAܖ+BaOVQ^4mhfiE2ITapsV{ap`|TzU{`aWgw>qO5;>[k˯al´UcoPK³$%    PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoParameters.classSUƟCHv	KM0*&m#@!Q0v.BMMҎ8Sx8EK̈UopAf@<9;|VGB/|yߌM;j+2xBa2$4Ba)ѥ=;6KA:.-Bʿ̢y*[CM2wJ9;c
20~|$O
SBq;-Ppee^<erY~'Ed2>vfgLz',*B1𴂗2b缈HU%YU6V_5wC
+ѭ7=mL$pB&JR45925>&"Ob/s(%\b8bΌX #~/VXӋ C!tj:z٭*=/-	GL]&Ϗv*=gN׃)<df(DpDns{Ak?I0S3h!C"e#-E) eJVh`Irݲh|iGI0&M͛/,CNf	0?|S݁|B	
*tIWg\wuAhzԘwRK#;:]KO2X{R&""hoU^M#h7NvA_PŞzaX
57C׾j|nm֜TT֪v2296Ugãt^WKOV
Y[R7T K"i&Y<"i*$ZeD*ѥ6
v9Ƨ]>?
vr?9洳$h]_svN8i8C3e#p^[WFаmm^7DpD5tL	TU}8+BT@J}SNMTCӼê*mzwoзk&U^YKEZ
]iPK;R  	  PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoPrivateKeyParameters.classQMK@mҦikxKE"Xыr`Oq@VȿRP ",^޼ZXlUzJgȤ緂]FkbO.2Lai12軨0a$)?:*H]$Cy,0̘GA%aϿ<u׽`h	-fXŔv--H.dlblZtY/b2M%2zbw2a"l36&?	PKN    PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoPublicKeyParameters.classQMK@}4IS-B."XыrM,4!J/<Q4RdavfߛǛϯ 4PlBp,,9Fi8=w̓T8wR¹G7G!rד0H9b0+CשCGL?YFι^N*D0hV7dest*Vt4Mʰ?_03Cfg'.>ٮ˘S3YءFBB5T'7@^1j`q
1HPf+{$X
PK"hc+    PK
      A             4   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/FastFourierTransform.classVoKreq܎MN$z0<>hE2SJTU @Q:Z[@S @O!襷h;C ߼y7.BȴIxdQ tݟk.ie^ut??\kmҍי[Yk5^s+@| ]dFTL^~A35H6V
Yga|'K7swX4C&pjI:i7仑[447ItʣT7(zo,\K{^RfB"[GgA7:-*[cߦgmGGnFAn:ۭA_+ǐQztz{H!E6(9{Znywىw0I^ݵp$dV'"K%|gkkd<K߳GW2	4[Aե0$PW{pgGׇLOJo˽M?4hADd|sd^5:Yz4V)_x0dx
|%I4*Dc+)˶Օ`QҐ]YyR쓫4"TUrFcf̤"+Lݣg++`7ܭ[]KVmrOP﷒*TTE3nb{/fl)Łƪ̠ ;+K8I}_q@wj5_"t0dcK
)iNLP@obΥG4'3b6TXX/46{	#`b)l Ah	n#GdC!:<^U܄Ɵ@_k9"?L`GGC_`$+zc3Љ2UrU	3EcV
@(,&Z6$CJ("p92(98pYHcrZ-sΐ+j8*9:GM:ar%~Np{Ʒ7fSXjXhk<֮E
KzQAZ+6deVZq3)˲P`(ߋ#%DiC뱌JX_j-)g3Q墝Ggモ&IhV2cTwyd
\;!*GHWW::1NHzkYU
}
%d[:l&5Yk1	YSqa4wkH'B1fF|/gfNrFʥ@ʘe9w{YΈdF󁲐X.5S1R,eLj!rp̖Bpfx,Q{;~E0.k|kOl;wUU^#*٭S,1DKz6ƴi^qzPsl 9]CfjC<SOMRIj_<đ5~Ʊz~G 9clP}T20| }A
rgtzƓz_z+g
_B !u?W.
fWO/VN&đ^Σ8n'n ]f.|9GbK]:Kv$gkӏю|KPKkM    PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/GF2PolynomialCalculator.classuTSU&Hvrӆ		t-mT
@b uȒBٲѩ<g|/eFON	ADlIs|9{_?*4D )
Dc;wW*
	iphIE̀a̯߱WfUq^bW꭭o{ﭻ޴U+Ϭ8Wج4`ͩKH!~sݕd<7EApnc'%a7pgzڬ(<Y-ω~Sp0SMSf?]<!R΅_1*^r+k|!,!EibkQG5"Ij1?x~
o; Qɞri*!뀔&necݺz5Cdy4ab")ϛ`DHxV<{X8D8p `0]qhX|'}\"h1/K҈$|T:|80{X	T(p
TV 9qJߏ*9:׭ɪ\Bm\,8&9O
s%n޶QnYcwodm->[\:I1sR^K"1esCh*EuZq֎r hZ=0ٟHa*+zc2}@ 8_p<Ai0`7V>I6bYߡX*pǸr;WVfRk&Nk(S'M!,n	)4)esUM.I@Cdx|BB !2e{:C,8yhaDq@`Z^ mg^Q/ Z*#.	̓(E<Hdd?Jexes{]O_$r'~n I}ǸΜhG׽l][GDS`W6Ʉu{]`X`_epquhJDRp]pZEPKE  S  PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/GFCalculator.classgxUe%b7HK*A%5$`H0T%(cc#bC. (6+"wpCn9wݍ,_-"=UԒd&_804'xLr*}cоTI:ɒ&u%-&m*JsVN(VTX//əxeQNQմʜquXW.+()8^~@u$]2EĤ^L:='hRya
T2ubLj&
TQ4!&L,N̘t7pBI'&M}*K	q$b26RrIsJ-\Z8DI/Il6&2l2IV'{DgvAduLvE{e^f-[r4cz|dK5conshrsxhqc<v:R/'XԂ4% Y5 EhL6HѦ:z2UȺ&4|@Gfh[yH3ux:	;@cۀ&ILefi2[#ItZ@ml [66:d.N{ xd-@Gu
ɏ@gW.&m<IAv55y=u0^:yr4-C6y5y裕Ⱦ&ۀMːgBdɫ&~<G/Ek%&&A<OO@t*2'``7&LV C
0&u&?/&Q:9ERyɗB瀱,2(VChKz6&`,Lx=yCl&*Yi0ZJmҾj7d0d0d0U{#dtLWfhwd^iV>Nk1KQu&uq'&O7i>1ڂE܌[qv$nӡ&Owĝ&s1W/$iy#<Eޭ،GO%*>&D.jA]C&!jzQN<5&O|M>e|d)H"1|g9L0_&_M>%`Kr"ǉ/hWEKd|YO!k3r%\=XJMWo-&^3y\;Edbk6"6DM[&o
EĻn&BLf8E%?49Dn5C~$?Ɲ%?Ou8.6#a_hb#vhkKO|EG>:e  >;=Ξ˜Q{!v"~K>A79L_pȃx_58=ZN+AeEs?<G;C1`ƒ1A$֦qדn̠ T'Tu3x0z0d2LCKG2)Ak
|Q{9s
i`LWGVbپ ̇ms*,H!rSú
זּu+Ё{		iER((Y.~.ATf Yx -W&=H
b?DX"tri?ڗӈ|54y|l9O
ucxPAQa Bf0=)xpn 244a>d(O)`K|Pф<#) kSG.5]\Ic&:kA+X
innCèSJntT$Pc^W&-:DpBLB\D	R:ßl3&k|]
&;BA7R`)1+i~{K5ؘ=Rk=8tE"dϪ^/(!{<M.z0X䡠#.dq	jB%
ǽ}>58|:")=Y k'0ʗx]ʎl<(-uEN7eQx%tYfUV쳖M
LކMע.|};6IaDE
~#4~dĕa+w
)LS͡l	e0`h9[Qd ;&[nQƎH G%{+ЅӿQوj.`o#%~8ύ'jB?Bs?F%l_Q:MV;߽8q:B$;KK~14{U|_fPKV٣F	  s  PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/HQCEngine.classWx';;;I CMEl,G J!;$+ݸHV/m-VJk.I}ۧmmڗs̆g9޹s{> )@:T 4k솴lX*U]ʤ
5!(PPu6le::^74\Бq
]\MTQd`e$&kTSŽsshW3e73<%Nn6>r	/MurYrWn]1zvv;<T'PCz;gwu:TWNmp2nLܤū5׸|ڭۚxhB9t/x;ݷ%YoR{/F<*^;g&?[h+0ڙlwN/}i΀f0.#ϫ7kbs_EA".V6lT090[SL[Wʦ
DݽNG_.4r`gn
>KD)YƚM:*@hw:s=;؂6؎I;Nց^a\ի_ZgJ-)*:-!-
=ZP`K4z=W#G<2'KFO5DkhV'L;˝Tg;[fZ;/0Tr-$dqk¦q$<4!L?ߋtxl>*܆L'?k2vExp#?זeɦ\	oq;g^Piα;Y]-bxnSܢ`RҩO 9ݳiHz 4^swx؂3us#qx`mp}P	QAoQu|Bl8IJX!fjI#t<,	{|Zgܽ
b\k6R%jg&'9O%#Nrm8aS;^θmniNOÕ12d<Wj+ݍ//
|	_VpKwWW5Na{O7Ivz$:~ek_OO6O$^>~@
Me7$ٜ܋Z9I:~x&$SNкjmwn 
<ƛד|?'xN7I_)*dve*cX%
i:I\펝tS.
5e);rurqA=宱{wrZx>\"SإT1'Ev9g9l0!	a׃U4i<[}o}NW)(k]mkk&oGNcG2g`ΔEb1kU)Ѯ ¾R
m%.`foO;`,[t*©b0IwXjMeKӗ}y/g^8ARs.h|~/r/Wz''=Oty1_ҵIJ,# ^@`tJ<=jyDM-H5CyLVaE-GEQ5y̌FF<j}w41O{X쒭e^f0#Kg~I7Gi%H::wO>IzE\BQ$HB5A6pxKݗ:K=Mǰex°jmMjKEF`[ai':.+8jY@ffniҔZx
FbM0vѬVtCGq-hi+FVhi&ɋ6[,4@EJODb{9*C.#i:aC""4I"U)hM,}q+Ga.R5Ƭ>Xk-ܒ`<SY(//_>cZ!Ǌg:#pFJ
YP%dFpd$w$7gZ0,ʂ%,o>N
;v{R	ABf=̌e/̓

	2g:PFb?T7~QQgUnK>맆J25႘YFfU,eѾ}06xkPrxqK\qp&p&X0K#2=/:,AOxG?-kIPC;-}>MV0ĝ#'dB%LHMP}Ŷ
cTy'/us)Byf2z#ĩ!5iF%^9ɏ1d|)OzOE_VS7&IKFλNrsPmM˷T!ghq-Mn65S=:0y(!M˴DON;;a|=
Áa~cQo"Ç2h3÷CL}HWкc}L!4FSH2Xaah9'Hy%b>	Qt%dCqC#xLfZ՚Z}Dnb9)cOʉCXSfbFzdܘVAw/ݿPtSLHN҆<J?fQ8xZY;oEcw=W'^cxds0~0H[(~q+
//0~Mw[Vq]n)hkf˦ii&or]TuK5U%oxf߳`~fTI31~o̢ ÇxυVsvez2=%q:*$D3ncrN 3T/-ٽq}(D:Oץu>hE}DhL2:e9z*e<P*(}t-@3ʓ3T:*O-,vo=PKxv    PK    A             J   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/HQCKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#03L@gd㊁Acd!B3B5#Fz4ÀvOIedMO-Av&1(=\F!,& HyZt2od` kg*Ҍ@Uk4 PK     PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/HQCParameters.class_lUǿn?A6Ɵc6(Sx48[\;(1T%j|胾smK&{=~ι~ϵ bʋ*LmTcΦΧ³L8ql&]4ٝe{
:B	Zzs3S\z!*g3s鹅s|::<K=)f
9~5Tq.lA?q9Q/gr9tlè6húsfB1S56UȤ2ŊZ]wqXn&xт6YvLgd\zl0Pcw&&D}.JOz9kHnm:W8E-s81##R9F<Sş2wKʑpdn{*4?J=_~7̉q|PLS{=cӉI9wp4W?)NDbScS˓G*D,q=]-S(d9nSه9)+h^4q$Z~m
Xӳ3D;
B~;YHu*Ii}YWAMj`߫0eǷky7=1Mqv?HhF3,j)Aw	
!.1JXdq;Վ1˩qNc7-u@b`ueTqƗD|UȼJᥠ`98HpQ#EyjZwE9
/%-\.{ bxbirwceݫ$<ĝEx:d`Ua\ VNa}$j&]L$K$^J$=TL$M+E$y(֤QVld~Yf
X4̶γm,[G/Y%6K#6aTZ546(pEĲ֝XD{جP'.v4YmB*_ԮH{T+DmRK3
uBTKTj4<-F}B
|Y_VIVIT=U?k%binꗨ?j?$VmάKVja۪@?m4 dv`LߠQo2|&E$_P*\WO?/iD {%7evn
NIn]&k|Q__+rC
U.|òNEMZOit&Mt	<"m.f
Q}ߢWe*KlSeWuh'me'1Ku]
PK)8+  a	  PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/HQCPrivateKeyParameters.classPMK@GjoI"xPSAzvVȿRP *7=fv;]Р[01l^ÜW<)U&=蜊<ɭPB4O!öwy6|6hXaX4L*2yV,8㨁Y4-9Gaos'J8A+oÎ(H=8Gڴ>9QzX}=Ck:zT4Ҭ6c,|-biLl2zHc|PK    PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/HQCPublicKeyParameters.classQN@#N̅4tA2#$$(I+bc]@%
>B,`	fvfuo/ vlBj@QaL'y,
Ᏺ(pYY\<>ř/ 䈡ave]N uz&09V,C)t%q@v<i4p4b؝<Gu^Q\90A6&3h1l[rHMۤG <y)T:.ҴBJakO`3/e,mzվGH%cih~3> PK'    PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/ReedMuller$Codeword.classO=O0}~8
({b
bԡBb`arภ,?zΝޝu~5DtS'ddJ-7ڬ-sq0@@ )abJ.m_iY?pm|^r*gԯ֕ZO<^xa΍nVэ)!!Ę5">7`=;9n8?@J!,xE808PK,x   I  PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/ReedMuller.classU_lSU?i7t&!ڹRdлB][N&!K|GcËDCg5y3>O[6AN{sU C5Ag_߳%|9ly>ʠ{`3&CR,y{^rw|mZċdqBzTrjFr~0m_ePé5{jԔ&PMx2щ!+J@UgMn.A \ϖk5{qA˗*eTp~{MPhjq1xmᙯTIe*%܏9᙭Mi^$k&L{eQAWJd>RI8CD))cm6r3<`fCDv[r31!rAi}VK.)23ӕJ4rGLՖ|C*;wDmε].LqDٞn-^3q3=g
5<Rk1hKKiǾ*N[@%rSu;5mW홒E>)8#*<1͐y.8 `0SS/4@4/Iکgb&rsZ
}z|$Eώdbik~VںҖ^dG@1U1[S`%jԗ#
JGqJI+PVgidcbLX=9[,kvA/N-4O(*Q%*!MNh8E_/[5GĐS,C.~Rcv]]ry<

NJ7?$tK"h鹋sDY:2:"Xo
q65hȑ;R T@R
ʰ2pqcFLsgiKii	n[0,V#J(
7,
*A[jh&5j565`l=BQc5I{]#YwK;P卨RE`5vj2+Yp}SRbpG-=TLp4SeP:ŬeԲA~Ko"쁾v8(GbOrAsTUG/GxRZ(eE?6:

R3*R,ag*nE"U$%!:I5J"tZp3w;CIx-/)yCPcd
Ř,T,dHT{e/Ǘs+(ԦxI3)л뾮+ѿw`PKEg  c	  PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/ReedSolomon.classy|]wybIʾWnKv֒HWfKn,رq 40--	KʒCN@0I)a`JÖ-ЖR(L0sιH__OG":~<}}{3}~w%ǽ0Ku_sؕݙ_z<pUǮ:9mik_yQ(^ꎟ7;|Cןh
'{ĉC7]O]<~dmxJ׽p7]wxK-W<~ѱ믺#_u$m}.{W*<o齇9|5N?ĵ7\Nm?UFG)>~My^Go{9~4׾]/f.:qڣ'>5Fy/W==~kskMǎ8~QUQsOڇڽ</R_;]+u{=y^=~:}W=qCǮ	U">H ǽ>k_國7
:r=ߙ9zr	#{g6v{{E7yZGޘ7go}ɸ9tu/9{0[.w7m2}X/7sqof||[@&-9^'+q/k#W{c-V:{EcqC}.pqg=yxʓߟ{_C{
nsFw` ^ozyކ_I=~W^=_|w畹_cH*ch)/2\%KŶ][]=H*vH#G.W.ܒ.N񪪣VNyeۋ}i~~^]u$Ul[ݮg}{Ց--]?c߼hkl?UC[:q>twzWۛwnz/~ѼQw^i??^}?t$^ǧ V:V]ʯ;坛..Oyx2s?)o%:zOyuwUosCDul+ydK:JU\PH%1Pa;R:%U`%g[8u!;j/fpw'%::ț8MlO?Ge/zWp?}oKY6vG-TAAKӅBGT%]Syn^-vj	/%sK1S^?s˖َ--[uVx)o1OunJǪo#wl.~ӡ=IREetIz
?j:R%t
.L}oE/-booIoKmg%RR[m6G?^^TAw M9G(KJ5KSI[RsnvE7R9iN<N)UNgG*֑*xT^NIg@wx%z,.V,dq禑qq^}uʼg^n	o->Pʧg\G~v#NR[ı';/ڵL՟z7nw
qcI$UpLET(m1N9bH^jܝyi8(FwJPuJ9Od:\tޙ]#Y|ڠ#aϷ:k|Ȼ(`;b8;T$
t;tI~zk[S%+[vCŷos[8IJ~CkOGsp9.;»W3?o}G*<Q\3v}֫z?6VdKڎ><8\^y89wK6~혒7.2SD%v|[ؒƖF~$Qf6
F$ѐو&3B[$}&עI5~'/oܷD5nK̻6-徖&^侖%oTG"Vpߪ
ݗ}IDZq_';'ܷ.!꾞Xt_Kz5&צ~9}kImI+[{֑xڙ}ۙd7&0)08

T]	G8(X鼊uBqΥߦ#'e|r}>=ObЉN9,Υs<2x/CN{t:I
йIz<_6xW:I󔃧@g
F!DlF!
QcŜx})o5=%QaséU$AΩ*
xdjs5*|>>O@Iug @I	!?AhJz?@g@
S)N	@>@	Ѧ l
*8*"">D
Ĵ gK魂`ж&9RvL{Xik_OQJhm{~AHoHH ) ](G Ҝ@x}Yi`z``aj0NZ(Rh42*#C
3Cĩ#tqMqkvQDZj ҕt3D
H R@_ "(qB}_ݩH0zVFT'H
DC(#,Xh#*~"%J	ARCF	*4	؟J!|@C񔶿"qxtqѣ贈]tL(f(%"Dۆ0iDD H_l;q/Y"@­MLy
ҥb݄eBMtv`jGCKɰL5P{p{(~NI?JI	10dP"H6Rk
y$.cKIFB /QXS(IKE8Q"\BmIJ2EHIILoL:PZ`PwP	j
4,"YqAЈ4ۛ-Vis"Bnj ކ
]Ƥ1&=f -HwQi`z`zB\\B!wpOdzq:Apzp85)~^-:3Hٶ~퐻ԃH.vzTlBk+|oCr
D
.2|N"K6NF(0\؊?QSPbxGeKH[Qm"LBZ(2RNԤ$Dp*q
Lj  CP<2.!/pse	Oh
Z}@.Pw;g}MAJ\zq Hҕr1(]D;w7%@G<z@sSb,pV+Ej:b;PWiϕǾ5B&9qX8r(#qG^	N;
 /SQi6ՂI0VĝN)+:Rw	ۄ7'RҔ+R`SAZIT/ґ¦V_4r;D١@'l si~ jP@P48.p:h8)So0#s+<Gب*<Aˉ9KHĔ@@>RT..=)>.Yag\^ +GX7
,(UIנԬ3T6k$e*3N]f0]
Mf_QԹH#E8[mRkN꣕ʍ
A	O
Ťow?JwT-,pe[KU*5[ 26·6tw&gǧ9>!K@@G)Bwx@M d7|R2R!ThJbj-URZNKmg,UR
,un>i[IK5kjRm,RZvRYg5zٴńٯIkĠ
D@hJA>6_HaBD"QF` $
:vpّX7"@+6G@tH}BXQA߀|a%!z1hAZBoAFU
M  M	%	7OFAFW77Ac-P
,4H@#4ifhZMkdRҧ.è0Z2`"}QadlaŲDzZ3&I7f\/pp9š/d@=li@3n :W }W!t< Fg|♰>zf裆0hEsBA!(_JqYU8lq&ɭ`F0]N
E=U?5ԛ:UFۿEQo6
&"9q@9 ]H@lg#;8/X&lڇG/	_Z'
݊E&cPӹ<qČ*hIr	)2\"PR]Z/ xm8,k#-
m?x!ݪtMyz;!$'mGnՆP!t4j@fQ"֎iCZq:mRCbaU*	r)9ut$8jFR-\4~ǢOgh4F_J_ VPZFғ
AsLfsA_Lg+S4$LE/ѰԖ93Z$)t"
HHv5 5Di5赽
&/>	#pqiR7+Z6eZґUYF6q>F
F1HD7U}IE>adQ`S>ĕ!(mx!ᓔ";e
r8\/TeV0VXƴӤ	utRd
0hsZM*욕h[Q6~;RA)umRw*MPG!ӓnt:-nT"v0H

3aÍt'":P
¦&JC]"G !17
LYuDim E)	#pQ٤`oF:Z=g[bҡ$ʃf[ rB5|F5
"t*B c*͋%qD7P9*UIѝ]!T
*bZvQ#ש4L%
 ?7*yn4-`۪"l:jj_
#SB[#fQG:]+/$A"O\gk})()8r,%PlU*!TNFZ_f}E8}R8=9= No "pJ+PG魙V7𷧉'HGjM)jjT!ںԓB33m_Ϝ9@E6\(
O%U%UV~UGt
7ί^Հ%#w		_8@
!ԭ4
N)t:6j}KOWkv`:{JRfEpbP\L*k
79E&*-,¦O}MQ@ l^F3zm`%.3ވB=mzsX[驶.82NNVCc]e
D[ &VI
b4Ez;%j^Zmdh|A(}.]&.NQZ!1c闐i85ӎaŜj~7*t[Vu_7b@d^vdsO86.
ZcJ;3^ɽ#9(eRrd>ElVhJbjR,URAMKճTK=aSnhtй@ Za{ЛH4h~d`s~G6]RGiI$P~MlN<fWeEϧRxjܯnKe.629+o;J/۾@6ӇOjo4+W!mF֣줗|%dJҖLg gيnLGUR/  MP@9~czaRمFv=b{DO׏uΗށƟ5e=^o{[fC&6'~66W
f{}I0O04B49B#D"i AzԵ:+*g|7s	ոW 67愽%N
bD6^h	N88=pْ%?Vig62/0ж](h7AzAgӇ`3J(oP=(?灲T10A}L+[iS6o
¶ݲ	a&,Lk+O;*159<\ |öTK{-}L}Xc`c`?f雩K<mR>)wa:{6~,~,^e[Gj{L7_$$OݢE[8#䊾yM027im`swNka\zH!zɲC˳k}R~Rt62?g|B ?GDȖT5Qk"ttsPʯWCahl\;*?G]xH_͎pWm*!&888X_
/&T93%
jp`s0&kRnNR^sh~#bg?KUBysyF

.|B %в?3(#l#8"j@@l +A63/0ʯ4(PB٠Y)tҺGևysg!Afκ1ݰGYS/?䓚؜̼4%H/!mz֭G9[+w]FG
5dld>H__R=,R~}XL~
&sO ~to5xOXqL\~'ExHNSZ.t;B+82*̱Z!k%unаՋ
(~8`~R0^\+p^qJ@C挾gY@G+'}~q]/'mpd9R [#/r%΄{ĠiIp)>^FzT.NQUPVTU4ZCtCg
;@@~-Qh%SjcS'M\
@li7j٣
K%D(OrlbXgc<y#1РҨ!dX"[겇ZrD*1n\^gb3!gu|NOQ8<yƢ$`I˲pExBIVIdN6~9~}vƯytlwHcj=؃Q4czL8
6!}J	t#ٝU1!T~qQfQ$\ 2YeDZUh-6_9_~ˡmŠj!m°ʾJ!kd1Ii}٦V3?gTch.,<Ȑ-Q,Y@ʪ0Y,CkXϺQĆ76,d#T9ܣndwT{7V ڤJS&<Sɖ+o"G.2.9e5%.66Ȝw
AQ`݂q8"G`	`{>8%qgq`(3"1/*׀q]WN>w6oy8K<``Oß[aYnv|uD:*GKǵ$W>Og䊳9p?qr -$k[fYlqgsؼ;RkbXn`9BfO0HNh_cM}ÔdqZgYP3- 
Ԛc_&XQ=E
"X(Oec>|?ƄAd`Hma~7GvP`,w
' $^J})i*`VS]_&ppgE}/t[!EU8F/k=qؼ}cICc60+&+ڃt'IY^n<o3`5p9/ae˨ي<,+Sk>qӬ{66):{9a0݂q0 (0` IW0SqgqV0	x q
ƌ`\˂qE0f1Wv}[jcn~IO8d<$/NL`Ϩ$by'$œnz6-Πɥ$c$_,ˑWsdܰhW[kJ=-^{2g^0GE"#7L8F9Fӣ1nј^O9Q4'(gems<XP(f%2FΒ/乫JHEmc6	Q8d{3v8dCvDi(<S7.˛PLg{%S񴪹cVuȜWrPYf$Kj]ˢaW<2wnm|BvxMr0MPt
;*FǸ&?A&gdG؇N)AxgЍY޶	=МZ[rYA,]ZV+Ì=uܝywY;8cK
j!fZjKhQ-5R,5R,7RS,5f,Ki,uK-jZbeZa,KWִzx=gK#) 0긛sb!ƲQ$c縬d]b8q5I9sN1.3HEf1\"\j
%ʜzU*Fqt3ͤgfRf[`P0le1-0&X`RZ`JLk-0s,?_yY?1h%X+,98M8dQvcFٳ{) ܐJaq蘥Z#RQqL2L(`MnX6O3(,*pL)}AĖT-DP|eUeү;pg`ApH>:)c4FT4*v9J'¡
)uubF4U1oc*5x r/?eR,!۫
5u*ycYRA`Â18
c8^(1 )`8sџ c20 cse0`\w0rgmǼsP2R5gcvuB3);6$SPyZÌfKSc(<ҿd@%ʲl}E	CVۗ,wMB(mM~nlGV2S6Ϩ3F0M|܇lldes7nU-iɒrEAV,	n
_skj[;76!A8ҡp~쵢џF1c+V'`ͤpäyJdVqۘ:۸Lnz;E/#_BIVY'fYtt:<P`c@"Aߐ<sIġCIcX8v9L\BEaVc$mQa.JVYe)0sUv
^7𬄍g%dγ9`FpG`q8p `38s1Y1`%`\qM0~&$$eW!l.,΍ɮǵ[$	U01,vO3,Y݁`,1!
:HZoKh2WVtwZVL֘\w	ϸ|E>i="^% ,mD6*%4j:5!S39-[faۜB$/cfQAe
E0+1K
V5e&Fޱ|zy39}^&I8Cf9H"+4X1.&5ELoS2iU3
YmN9rn̤}^WDEa`eءCH=
z:I2O'133Jh<ggGcj?	TnR}`C0\hAg93%SE?OT/HXUg
̲r5&,ƶB$cZD4ܕE]f̄cZjFYjLKk	d)(cKMke9-L2--RZRZj,ۗ-ִz4ͧ<M(ن02T*o#UM \CR)Ji*3Y9<$pqtI:؊Y(7PouwYxXrrȂIadIÊpU"3Ƭ8u4%p4y,!IUi&1e$ɋ2$\e؜	UڙWy|j5;;ΝCF+§oN-"zb*<Q2=<yK0aV$-WŒRThW"URjeW5Wdus0N?Xthwv5a6RvDҎNUP٫a
0²
cȊ~i@Ip VCeyjB1(3Or̘U2sDnU"EҒ4iY
U;*@^7d
kh#{%,=I#r(d(TƸRXM!<Dmm)aT&vkThJZFj:TkU10XZXUiv-С:Y@Se,ХYz@؇@?CZ`4U#Z`X`\LhIG:l)-0fcMX`Eh%-+Z 9VXwdyOL.3
ՠAágM,9MEpb	~Y-Q*f
NAV#)ܤͮDڪȓ(jUQY"3ǭ$:k7MW(Z)ԮkG:;h{n]4uR^QHn֏xU
(!8l0eqG0	`f0qZ0 ,0c 2q` 0.`
\#`\5@۸l9=y<w!@{L#HY(U,K,K!g:R\pKWSXVRYvk1:pn̼^N+	n>*
#`%ڮ6]ЁvbU>;xz̰
zk}~6
)2!,g3Hf1"cH	Ӥ?|$2L3J-f9,x Li_+3plI(ž5C""}F&@1?Al
ckdD3ǚŜJ/7NfI0!Jɮ5
uڃ*)CX-M::g}^,2Oxiuh4g6
T,\٫ gu=L*tv(dW>Ni|@}Abo4ur${8m٘2q$dݝT3  k@YՍsA~OoA\ԕB$.S+(Q3D^Dz\D7#Rs`co6)a66j<C>`.fQQ?nG	"\ FUT釕>v#|"O5|ˀeKBPGĪj¬Vԉ3JjՂV	4 iU D;A<M8]fM.@@
i+4QcB6$Sل"yJT;&I4a
~MCAifDȬ98
p`QM.\[!ҲK5Vg2ynD~}d2dREO4&N,ȟ-#4rR	{&Pcr*̮_i W'
Ly.|"T#$iqZF+^ۆ6K; o'(]Dd7zajdJAÐd}xFpI屮rxbI|0aÔ= J9L0\v=2]W/hL$1UgMVnrz)>kF:;B;
,E$f14㤞%vLYWyB)S~
JqQ-I֒)5M= uDۍpıQ[$jڴ@V6Bv(!픿e&a]Ju2=^~/ڼO	w?	8,y2`Q`c0Nc8a0N`Y`FL0$
0fcx`\kq;M[`]_<_F~>{>{݋XSƠQd5&(R.${Gs2\rhWYIHUqF՚!kuŬN6Δ4`aLth&:͘U
}ڔ6K;eR8Uf.L[J҃UAm>ڐR(6`7(ekb$(nZ{bB	|,MdV394)TTBU .sqEEs؇DHoՈ#fcW]Nm"gXD	l^%ld\G3gu|NeDOd1VݕBbQkZaYSeqch#Db$ěqU+&˭;NE0UDC ^,G	47 Qa>aL2|T56K#&d|xiXD i7`L {Z2%tڬ(*+	n`rW D4UZ*dbN KE}<FY+.!se+`0d
倕t])HRդ5 _ZN02bգ
dQ#DL'ZZmRvӁ~v2<J.=͢[<5^4,78AqdF95AqCL>KNy\whd!DGE iV8),[LЂE"\jIⲤfEaVUbbךϸ1u"/2h:"-Ex,f1,AV2.v3@[.VH+AJiE$FYKWgΐ{B?k!`$ZA{aP:&0vN锱cepF{ٽ20@43 THE \D!Q	Θ
qEфl@nbчaQF:KeNR#[xeYԊEnr^fYESְuUrG$z=Dw5,%47]1>e11ǚJpp
uhK^d\jB+XRKUT5KհT-Kձ?^RZ4ԡTjR-,RmZ:X2bnR,m>-կZjYjHK
?YR#,5Rc,5RZj4ԡԴR,5RHKͳK-TXjVTﲥVԚZOXs׹P-ό3733pԢHIuq_%
`c0ס /UD'%ݩ+*jjӐW8RO`	X#QDGmAP[m_;ց_u"9<%G({IÑ>|):hG\C
Qe6c4%	̤zkC:FE ӿir<wN>̒y.Zep%y2f1D2]_-꠬EҟFˌ?)_?kDE*0bXq?J&9$ꥲ2OE¬$R\9V:4|*
=0slTФ>rsܙw
w:wN*|"?={,+	ݍ'iUrA!0(Fcrq	Hu|Z2f($fswɲd邒EQ:c[!`*reUnnݦR<,	M\O\A̹vZŢaQXdl,B-cP&Ndhׂ2jC>^JrNT;JЫ$`Ք35P޹ qdDaH֤ʯjhڴ
eȝE8SvZ2t`ʪ^/lD~xZ?@0H5JoIrQ1r	EԤxtp)2+b
,^3,]dVݪ:e(x}MCѡ 6X,F`n12S%
dSR$dKbRhU)Up:u26@Iڸ&ĥ-*!lk':d؝
dyV-P%a=E#;Mp*bh"ֵ`LQ6Oh'pbv
'(fesHE2A-}J3%b_wd	\5ӢͲ;ΒxS8tUuA	zLw:"Y#XWDIsX
C,RRY*H~*AUB(dA[u{LH=esڑ^Y#֤[3"qZS9F0YfNM;"(no?
=
!8`cq\0N `̽b~4 38+17[f0˂q31q㺃1k..{aoD\HEM}
ڟ4+ʇ<vq.aå:\op:\Uv5:b7p0ˑipuE[npw?Kf8ܭ=:k~N;<!a,c1ocx>|Ó=OipxVt؟!^E;oW1OLv8kg+UJwMi7YJE"J×Y~XǅJj1nl
_fiEJm
\%i.=Zj:z8Af	i
7
eix˒fC	o'UGnzܱK)q7iMRsf}>$x,_gg#7^ͨ1U,Jڃ
3]f)pt)|$!2E;2K0e+9z7Lj{#-5I@mF>s?7fy{ZZ~]Sǒ٥J-,)[)C-5p^VS=!PyH9GrNKMf3Y)ERK퐯j$Pz
4-9lT_aҒgPVTcx~T9Qbdr- 
f52'އ%4g
E{OE kRPgEpxXٲ|hx@ŭ>Ѳ[(uQxjdE\אJt292+rɗR#DRn*J>n^Jqu$s!fGrXj҈4	f4-$k-FS5f8BfBUQ(#kGWfC01!4cP+-U,7ZRr(gsRp̈9OU Y$bZC!+oaƺU~k*׍"YnV^Ӡ+aН0lb!`bB+-
.,{,!nΜ1aSZɽR;RfXܱR^jii
HbuRp|Rze
:VۡAiksr1i<Y䒹YZ.%Gc{wYMg>D_	e)!`d`1R0Nc8a0]qF0
9>,	y`\eEqE0f1`*0z3ϥk isR]
B9`
z%5k'):.ɜ1a[*}cJqB_oFzSj`h,+ޘ5(rCFI'j:HwYK0:0Nt07V(XՍP|3~d&x%5}Hj.sc;vqeyԱhSEjHgIp jL=bq[T1x̲

,V,1=^S"R,7Hu>j3
q4⌄ﱼUĹBLKd?}*cܸvU=_e)/LI+J	h.KCmmd1cV=6N
ǜ	N6-2M}`;DNb.Ks.!wY*6wSӏC4b~C2a<(|EŰp=J&p`̙/|c4hy< C]Tr,`YG!Ш 1
slxCq<A*K](ظ2xd*;D!]YSU)^TUj:'CcY.&6L٭&tYuN0^eiAp$r/KT]n1:xe8aUX;Cl0^ccEP
]
:Kbv9g| YJ9=| YD^EO1S
Q!U<	88۔3^CˌT%Uo3Ȭ(cΔqV(T-뿿R]֪S@wpF=j5F:fن^k7:T`ffvd>"X; _77BzHepL8*%/ڎC		Ӥv/?Nz[Ϭ<s?v@j1ϞO!,3h
ϊX@]PH*\-Ug]hs1D]Fܾ9r4鰞KsD}D^B ]Q!5Ҩk[$ǩzSa;kt׫~x9
r)foҥW*myR֛WKnQ6zEK֎v51'ISGx*"U9c3	u2g1eǮ5	rt5%k$DnqǱ.3HzoΑA%Za	旎qfar<K]J3tY.q0qBmޟq	wF(^،^RwND.7a;]NFҍI`>ٌ73ΣI\G,KÓ_l;(pL1iuva9քs֋[:{.H:	LE]sDe>e/ܬF02sgNHo\ܛ9F%˖>oICڅËCˈh.,Isk#̹,DI%h.fZ蔌|ʅ-¸zytO8!R2'fNI,uTIT+)\cMޤ˩U&36͝5-r^a9S{rc'֒sjB0SwIFdR.9O
->d&2gy@I/כ;Ǽ9^39_2Y_7.(!G1*buʦJlE
	*)I.%'-+Wi"۬аBJ_xyHz=ƱAuٹxyY&LTEފVҼY'6;]nAw~Ώb}13N0ȵ!06[G+-YXߋe}VORo)|}Q8OPo ^?,\t32%沒`8QEʝVuMxJl])
X6v	.]FRbYAuêvPŒR"z)դVȪr\}QZnIN7()W(*&&^ Ryw$Ҏ[}=}M }xk#rK([2,_`.O~>G0ii9_ow>.i[}m|$C6N˹\(ݾQנ}ӻo~NOy%2Xi[W}{듁ߗX9P9a}I><AK.ӾE7 ;f1?G|~T.	^j؟ɻ;%CzwȲw3Au=Gl/d˾#Í	_
#[lǾ~
$stnyP+5f}#onedMi~'}?$OtZp<\_?57o?,r_9i+,j+w+y}?PK,RnK  )  PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/Shake256RandomGenerator.classSNQ=vel~A?MH #ĪFJwݽ5 b ƹmܙ;3̹3~9 '1$ht$wڼtNK0$
&CNvl
@jHFNɃ/iH+qX+mg-dqa/{ķEn}#B.t
1̭e%輅E7FuFTJN*Aಅi5=?(o
2ޕAW3ҸnX[ͳGR2x\\s˵HUh}DZQwĞRD*5YGQ'%ww%o
1"&^KcYCCL +R`?ª$*=L(>Q<O!<CaP!h@QD{sTMRFvdTusê!{W켷
hUs{3ͼ蔞Ț*LN%?CK PK    PK    A             ?   META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/Utils.classmSKoU=qɄĞӖ72U!HI	L\)[]E&X" @P:7vK׽ss9߹׿'ANB`ܺרKwjĠ4hAn'#!+H2dV7׎{?
WːjDTx
-_Y/s`$B%ݕN;^uao	Kq&x
GE/ڢ.	[dn_I;f+
e>$>hxc7UjӌBw(6a3L~
9Mj8߉'6V)f8Qp^sۨӦ8W/ִ ZwJPCCǂ6)

bktTG+o2ɜ`T8?^Z`D͏J+Ry
\z1XjZ߼N1ZT"\9zi I_`8C8?8 8s$ ?gYiζv1^]6}h]c-ZJ T-Z)weFw[Uos=ck~^oJcRd)6ruw2ehA\:dMk*j>N
'&iesv:	M0o6uʉ~oEkJ}f/_Ւ"TS5'pLuJ1܍]:sЀtlaԧ1#?!mWaZ]\p,^ff?|-y}摑|K#8bkX]-XoRO`9EG':Mܗ;Ky3Dw	ݤ>I'{6eNa]+*Pt33}/NBn|0D@)QW27DPK>    PK
      A             4   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/PK    A             B   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/Composer.classVMoU=38$uiҴc$ikhqԭTJVcwd8c)A,n	ʞ_ĆW7TQC-}o9s{o=p7pA pcWLSKZah(:v%x""TQj;uRnZU]B0d	#2FqA1E5o˅VJZTK5uܯ5J*y͞cR+5J&}YOW0W5,A$]h|BXBDƫRRhQR/[-{<48fH@Ks1|W,,K80^lzPdoZM+jPe{0r(igsH.0ĕfn}\5
b<_ QL{nEE2e$mf|=&9@Bf2@Mx1b^<%I}?_@
#7-INX	i`)oBE[T2t;Q<BU"2(ư׍y!GާS˛fwG0,]'.֢Zi@ŏ >/:+69G)9+
G_}5gqrB53S/m"Ԏ}A._ZǛH4sBR$Bʪ'1}5Z4p:wۉ&.$1+2[~0(@|
ƞ"0;bn:A\`"\7]%:s1coJlۜm8}W!S;4n;wּL9gRcM왒q>$=7¶\G"יIhBSD4
o*~[嚣X?eງL׻^+[pRrNbY:,cںNe^f=^q) jiem8+4G|Il@:G
 (tI1(PK>c^  P	  PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/DigestUtil$WrapperDigest.classTRA=	a"Dd JhSt%8PďA4Q)
"ItWKs##([|k-Q]mp:֍5u@gx5cٱ+
%槊Qq[MV3̚GiZu7w,&V:HWw^ы$YY®:+W5踆AYHZME渦7VyC03+'5Zs]0n05(:vu2'-=te6娎1;*to$]Ȭ	u2ɠ7
wKG
	l~G?<#Te*L)hqƙT[
nUq-i~sx
$
OP4SIiѩɂHORT"f.<9U_l ~yE:.	rZ@ rj	/8;|gRe7:Ò(r*RmhqW7
eLh(2L_JC\|0&B`
g*~f4k4xHsQͽ`{P?/ N<݇F	G"b੼|
U1Jp<DhQt#mw@ÈH(PntcuJ #=
]b[UpX
F?=
U}08XsH1XoKX_PK˘  t  PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/DigestUtil.classUmWW~. KF^Uh&1ZcEh-laewo8CrNlsw7wgy晹/ SaWASg~7fqVC2Ϙ)1Ka  b*UmiƦ=i	w.ͪyZPwyMHzjUY*<Y2܈`pNi
(*3Si?iCf#bU.Qx!qciZDp"b(N'ׁ}+N HunV=U|k%h2˸#d6=s T!uqk%l
1b
*֩R
nQ,f͔Hǟ:n(Tսx:vB-{lbp0R?mS/L.3~aBʤ$aޕ
|?3\ܮާ.썉e*2nQd4;Y)xK,tMʠlp!JA(T<B\z-˦\'Or[zZȠ'Vb8e:AϠw(3%
jDX/"_(#=IXrͩxXfа]a8UZ
Z Jn
<UԲ{B.Zzx
鸛_іatKxyYo
f]t0zt ܲtS
REٶp<Aw:pɮ+0htmJ)0Fwߩ=Н;mM|oZϓZMV5FVzs.eu}d5>,B,HO$Gdrr|l%}wEc
hZhEcN'^6)o#E;̔Gqok2ξAQ=g(ͬ/Y+#VQPKp    PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSS$PlaceholderLMSPrivateKey.classRKA}?LK@V C$Y--iZmkvGqNBAYC|{yi,  AIC3{ύ>pT竝]h	ɦ-qLTD)p%BDAjSn}.;SH\̫:P	
/k)]FBМ3]֦!.#(L\
̼]OH
eE"LR9Z6}+ ؊`eTV$'"VdmD99yO"[Kc
s1VĔPKIwd    PK    A             =   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSS.classX	`}:Z^cc(2!
	hBEZŲh`I)Jz4@A)Vv0G4w+LKu$FUmɻw73'NXႛ|C*[a\i
z9<2J 3≮Xx0FT+\Nh^:ZަԄbh%.XA)K4ak[hCBۡ*;6G9C
S*<1
kW5_jǘN3p2|ɰ mRaDg2௶c@Z>c,Tr̖1G@}'&yW`.C1
ܮ"qh6Yd懮1X7a4mL0
t;Ef@:,@=T
}28V{P70`Ab6
eކVш,BR)cuNY?mv<X8nq3oh[	e"VVM'.lM05A߄U'>Y#VseZ6\4IjQ&aAd,(ip0QZvd[k	6263<1	1xK&f|bŔ=&SWWZfpK/ªn_7Db.[Mu+f	=U@
>2pUJcftӝn(1C.d$XWSCD1!ɣQ@C!bo
0ąBPDU	{K"x#M"nk7L[,^o[dFZ\'`k7.yfʻ}2މwr]֦4g_3\kϣ<y}2ޏ}5UTmKok[΍PS6/x/BP5Z4u@A|aj,w֕
#,ǃ6\2lda!0lrơGQmP5雕1R>L߃CO1D=,l9i
6-֯_Qsch-]ZM/yA.#2	r:{nwO8#evyp_2qfR_D;Ԅm0&{Z>F+j6s<0ml_f3"]J4dPNlO2[ЦE.L"OEԘgiNw*["xDah됵A;m@R:"ӦC9O#T8~@{:B\BUcVsqaq^z[97FY8MٶqZ[egAB97t#Fw<KCeWY8VPTUjI'՗2ժ^e@תּ&j[<A$DN*q]3Q`u*a# z <ӂ@UyxO_exb`G|U-J4`1*䖨0}dH͖/aY¨7T21R3v(Ʒ5C	=kP*)TGC$^vRZGUW^~R
8œIzryW=}zXZFQ!Jb]t'qa\B(R5AFch{^m{ĆRwc(Ĵv7ѷx{-Gqp8qx
0S cM~'jFp+/[Oߐ36q&qG!Hmg91HoͫeE)z, "*A<fTGʾ=pn~Hۇઈ@F⌰Y+YYkWāWTH=oYV:$vU:J=/|\g}c?zY/(S3^I(OfϤR	.,Ժ#ƍ;qW)f4%xP2[p߻\{c%kƢ:;|+|n2a-$3"9|.$PLW_{xws:jO'C	,݅{̫Z8SX"df/9Juo}(S_"TJ))4@t2ϡ1m:f:#I<Da|h3¯)%t} >\#tOpV+&yT!+q4M"\&ITyC@"Nxn+Ăx=(u<I|74)wV6P?y<Bs!b*(ҍ
7_KQFp9~L|~GJSg?)"Rzǿ"|PK	    PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSSKeyGenerationParameters.classSak@~n4kV8VaEW-E/\)~BR/0Q8޻'sM(h(Vž3RM<HΜkXF&dGr*+c&|Gб'
츏iLC&Yte
FK8gGl	SDPt;C`Zt:	8Qv{@)N8g>wc?
zllbӘ<L!SCaL7Lonx@e欤<)~
,vc)9o`ך?A^4b6WR?C4iH~<@nAejŎe[0.)u	**x	j>v}	pu]|9֞ў~Gy?Z/XKmyBM
5\ 
2Uƿ
Z2 M\s PKR|Xf    PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSSPrivateKeyParameters.classZ|TLdrǈ$L&;()I@B@[.3dd2g >ꃖjbR֢F+`DZۺnmVnunwY%=;Ƀ2	2|;97晗_p}σ88UPH<OB=!-iD[C5DOv%k[ڮ{i	K7DP<gE7"P	EoM[ۺDdfȺ"@MBTLZ?L3UamV2"њhTxI$#nc͑A_ljnu'˨:Y^\;ڡ0	EzWc-0r\r>s#%*p<#]C/U%lafUT!@Гbod\tr\Όb]pd{D-UhbKPܡB:e\MRN-)R(6:mHhe4OLԩXXݙ+'KPՄ&x*c)HZX+Yn\KW#qm3Xbn|pI*#ѷ=u&nK>6ZVQ\#W\DM=UN&Zzg{x<k1w
&"L
7ʚ6]fQ<01e|\0x-%}9
}cHGL3R	a:v$+daeh]ojbU!liPpQzT]B`BJf'1
&	CAJNbzh<+؝`J!kb{T|Rm"
Ø4ޮi,4(rurzoj
4>Cec$i(YD",#]Hu1#gs
>"hvjєv;ҳ\{%F.m2iƈoFrm`0ґV0ê}P&_Q8`c5.I8xC.,ˋr'$R4[$ɉ1I7&!y&GT<8cM\zX-s}*fDۅU|/Y[dR`Y9!<쮟vrZ6t&$0Y<x3=$IԒ-ܒG&{>!*odq0'%ܯd
6c3";u7Zpg6%}	Kd5|T"Nж]VKBtIVRś"?Q9?VCYhY4?ß3Yqnk9[t>9_G
Jŏũk&hld5?U7JW)[Bpˤ\1yDA/eqsQ/E2O*Y{19=Ѧ:_
~_o(AczZ b4pp2y*3O"VŐsmͫtB?
N_|U _yANhG y{E%>rI&=T* DZݸ^jwTioJEa0JzJB*M#sMNҊ4ߐ	JqqN3RS໵~)ŭ"z].4X7|
㜷<tQb*	ytx6[fϥ*ͣKrRcyhN6hJBTw)0/P',Z9yD "6idB(R5]fd+(vCidm\NQhJK$mc0)ԮPq*@#9گfR.˃aIU)Hur$pTw,?UT*]C+F85:FjI#2:\zJ[?&=>62͇;rz3q̫UjV!dq`Zru*]ODRDIlPt[<'@@DIvR	qbֈ;FnJ{c<;dېJ(ĬŸatvդ`e]1'&J"Ѱ:Rydg~t*uKDf%(RvpʇMuG|BKo0S.#IB$/`@7ݮrB[Jwl,$0ogMK{J}yGK1:rvٚ_p~7_<'>]jO\^hK_Ǎ_<ކ>yxq:66Ä+gAKaSE9RnayzGLڰЄS A\o36SWWw2;*!kuXvh$,(th%m>F\W./9ӄ':D?f}溆_Ha7<iUQj]g
)Y~b%dK)\X/7R񄡇K=k<8-
lo
)ݢpMR~[K$ueO7A}Ɍ >RHx8	k#6L|5[T<y$lxYQ=99ߑW#&n~\+hsL`f:XbU.C9c.( CP0]j\J.p#\Sqr9Ⲝcwȃ\rB;_5iG1?c;b?E/@11zb+[~C\P-ĪͲ$
ǐu&[d\<enK+Lc	=n,Xp97 	Oz@`5~4:ܽp_{Ӹ%X>}u?֜ۖ[u+rzY[[8~T2/nGmQYQ!*4nxoKf~5w{W}eЅ^S qK;ُh?Uߪ7T2B:mo?:3cξ'[`^2 fj}d{ 8pw'v.cq_{Y}{Q^8Z>R;8X1{@
|JI!nwa姂Mf_AN}muXl
8}le?򿄒#̹G ۭ<kuI{+K|gCˏ`~7 sMAg` {i|UOm:X?2MҒV	
0
=rO*jy-ax4===7Y,vo>ogPՏ'L,A֚^!h
NiM[O
H>ȼVT:OY}<w"T
\bqv!:yA?Ssх(촉G~5,8bq0Rl,Qȁ*^ӟIoc.IRٴAߴǽh 򷷜,L|}_b{eyvwCQW[rfۙ7`TbmsgIH[8Ş8>hJ{=,=YNLgQ^;3r%9/a?wXEo*cr?5c
VLEd`՜ZWQ\QUH
<X_	){\7l^ᡷ*ql:ܟ#=}-t,fs5znq*~<my;isֺWQ[XV/zƿO;u~#w1]?>zK2f_-z&MNoę&Ŝ;kS\WWXV<6Bqaxs2NGTj3@z1[b5iebT(`DIYc,xو-	&NS DXqeԃX2!<OՙG\PB/dma\&<CHKц	l$4!LO>?k, y3ʏ!Ǚ)Tq/=g;}
 3QkX*- =O{?h	UTFUҠ4d[VRȕB1_`L`&RdG]-;Ǔ<b+hOilf+\ڪ&n۽O
`HW=
	4-Sp9Tq"b	iʂLeW汯Z5kJ6; 
pnKˑs+iSdgf3N.St-:*
V Mmf|
-^◭$iNSxwM6<E9g!.ShB7Flˈܣ+{APBbƳfZlbdUѼٗmRc7K39o{1SK#smoc.5AI *"x`s
Qp8j.CXZUҮvFy]eskSO4*n:9(X<u`o5qO6  4m;$[|xWJ(+[RJ[&hDeDj>ȱyyeV%~`8jVV@iIF~y^79zPKy8yc  +.  PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSSPublicKeyParameters.classWWH,k	M"&$'V,[9$IEeW]aӦNϴig+m}Ж?Ǯ^F4~ޙ.ajxTxQ+ϲI+cz(}&si
3N(i6̔1OD׸:]Y-dhf241cVzMYf|*L8@	"1NzѨIE3
X0
Km*|*|kP֔zDsθk3>)p"6]@W؇]حS]
O*[ؚݰ鸚"Q<W`(]5
rrXAb\mks7+niG895.#x		(xG2AɏHT&
CЇx 
l`@蹴 H!b`7!/hq !=^w+lzR3̌na#
Qq
4\A6}Y㴡 q|FG,3O)>I޹MʊպqʇŨ1@Qԑ#P@,xmG?~QtdMi1'tNंU<O
nōk&ی^<(5r)&	8s`RWo )P1<8=IvK~HS*R8M6NdlbFNfRFB"-cɈ6,CPEMRISs36#6R!AUD\	ly`N`U,>9|6è8ZZ/pćs6>(ড়ģ'.+jZc|QT|_mR&q@t.IһmU|[,K,N2[*4'uS1aqsSXvZU@zQ,])ȰN6McK5;G2eӟ,ڭU:Q}9~
o=Uegu;\YH%Rm.lTN+o#HXU(ƫ넂
<PȰqi,%ۻG6Q-}\4to{N=rMZ2NSg_UMY'2lY.O-)+O
q4-3َ){
sN1
_5WuS5cw-z6q̄;{"5Inl'x|.W~-#aRa]t_*
޽Vr5GPmo'75W-㿇Q+X@h_ֵ`%4{.-=!S_BaH}Ҏjp|1^mmYqgt%#WYA
ܷw	%F/.,,{(7OpWзr
Ck| GD	z z5unQ?Гk p}_8
j(8zoa)IUaekaa9&_j9߄׳@_YDO
xkTkrF*⟖,>Pb+<J&J:i`cqwT0';~j7BXƄS,YL(vstn:`.L"ZGWpn7O_yzh<z{W=Y\\D=:ipYB.CYn'`6}m
.]W2Nȶ\@q|sq!IDD>|9;5VodM~2PkvO{m,x.xzkh![.-"~qK
m˹+||k=PK%M    PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSSSignature.classWSg!.FEP"^IƢh
km(hKBd

Jo[{ۻKkLF~37AQn^{w7 {;r+"<S҈S$wJyQ5j<ʐrwÆ|v 2xxOKѰ
}h|ʐ;
d$2jBBE(fu#}GQ֥Mi.Tja5\$AZu&QwP2K!#.KCv8^D6'	J@@C<tE%%dHr&,ǌڰAL{rD83maG9<:/Gw-b6lCe+
UPuCRôj4+
kG5j9;.PardCjJidTvq))9:ݝvJ\+|_<26x"ͣK|i
VWo37ց|zĜ l?KKG(WP\8(E!ޗVgJM8*#"HO*7ɦIQGjQM7Cj̕'Eб&HJBn?ɰ=k.*Rj͝"45!iPkjX2 xE=ҍbA8yeQ]I']&	>)Wif
IIqe8!nWbl{qR@?W11$9ؑb㔈A1I'"ԹfFZfP#.@a Z*P1N's]K}+<-K
UZF,UG7L[԰ysWD\C"D,.`^Kp	MDJ].s3qt>Wl2A	QQ^}_"bٸ6K&)AKq2⹠R$e^}'i	LP7kAbA"

Òj3&uɊpю1|)+'f:/:hr68p1ӆaRaI(Uō~19y[,/)J(jpĀq	Kۖe6?)E!I'S9`x
(kKW9#6:h$zk<S`k<k(\CO#*fȣwo	;Cs$(D.`ݥPyTUa{^Rs
*jTu{Rz:uWԔYP˥׍gnS7GO6-I4L[2Mb􏡈xSN u_So[:t͑
z7ӏۨdwJ_T;pa޺K(Y8QKylH^B#¸0 qDC|$}1>IGx2^}IT 2p-4-scpp*Fd*,s* s>pi%7WxL:XSMf4yFFOb>75g:,2$23/Ss֮C,*dlc}FTrYs|C+;;e\APKGh&\  F  PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMOtsParameters$1.classR@ߥغ E*MZV T[3-&)xxQ̮I3ݟ PA7	$4$)Na`f2},}yLo$r7)FJC(=}<𣩛wt۝b.;>w=)όڎj|*cQK)943MybHP΍=Vy\pbs {zy!F`.ʷ#_㲆+WqMҘȊ2$#g>7Z(huAONT"͈)&Kq+bM;aW`
w"&̹Kq/b"E)bUr`Q܏qa1.LS<qac'?¼Mg1.ۦhŸ*AqAfڑ=V+Qi9uwh˶۴qN'DbËsD@lHcLcF<|ť,( AFK
,Iy(".!AEUIP!l(![,:6:M^3-
7~PK|N<  U  PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMOtsParameters.classkSU'M¡UC"v	h[SEA*Z%YB`٤ fP;8sv:0%9sy~%BXB"ZVnZSTQͩƾ{E}- tO"$E(heuykW/:يYqu>9.>*1yPtG(R"1^<ٕrAH8 H*ev;mkK9wRn:n"C$+bk5"vS1E6S,iFG>󦣗u@:ЌMГɏZ1Ӂg0*Y+P	:F`Sr]ήHk*%LPLrc͊KյDihSWl

|`*v)^4'7sRĞH1Rm)IN)Z4')n4I67N7[@B8+-dț|;ܵ96ܣ:U	pW)6ǻLx(ΰ%
=;LK%쳍nssIH-֭Ėtjڎf:.Y;9uu{9z3>nsPdZb%vDgc*,^r++Q&~ND@G-JfDp>b7v$bQᱱ1^
z|hxMS
ͶuCپ*blj,
Ydk.xzӛ.z麧t-OuOw<8%c
{y#Ӕxʞ%L;͐UrX4C4@
tf/6 gSgSzX}>:*
S4;Ne>(@$ ~/p3XtO~CH|Ss|KǗ.&߲|o"$dIZcL=4Q9US}0ALNKxZr\V"%?
ވ?丒17*l>xM I	I_yVJo,	h2 k$\ lwDl29wڈt2E^>m06a>@?_I/PK]pt  U
  PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMOtsPrivateKey.classT[OA,"HQK"PD)
}0K4%v!ȫMl!b'g^Be͙9|>ǯ<CohŃB(̜Z83Z._ג>QPϡqW?Ե^hۻ"m2OdYs.k
8u`j;Y6K+FP7ł8b醞0RTohB33R1ɺъ&b-vdSI6Cn+щs*BGN8C+g`X%2C5K
caEԇn(CAuJ'6#~ߎ UTlK)x1!~fQ2lZ'S{wI=lѨ,cN<Rv\J|Řq(&5K2`wSPjE $s9#2U|#iPɤƝKYTwКbrX0{9,`1o2 fdRT*V%2CUYZ>9׫cWT,. z!-IJư˼lQZBzvφOFZf۠Y.b:5˥hQڄm'F^!ڡN
UewmQֱactK

Ɵ<#uq	S<3yxt|,LbanS
<.E(@䜡{o`1sK+*
&Gi\"_"nh7/EaPK'  s  PK    A             H   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMOtsPublicKey.classWƖ=fc;1!G!E2q|Er)^ol]EJb zmܓ8%P(R]ɑ׵̛y޼p e'cvgtqM#;'Lε洓H(AQDXvJK5;a@cwʺꣻ5A:	Uz4YȠ<Z3cF)i5{S+N[oUm")P7K7؄
tUlH"pQNkr7
mZA؊mƓŘTM)X7M5z5nRq'9P0M!:ڻS Bd sG蚭&YD^[+θFO>ͬ ncSQ MUxU֑Iq5K'\"UUJeNx@␊7p@M1WOE?5Ysc7J
?+p۵@iLhfO~0mX3s IQBzŁ#]Yk̂1xpMdjc?Q<F>M}kYwf\,YCd8CjqLxB L35oVkIF%T<%6~d"'}gk1hclAm]N$*PqwxRsqx+&l"'ǎVLLKX*lj=£'u*]+r]|*YP؉S8M=qI]AzLZ3*sqhG6ϫxXE!kS'yPp_/+4g'=J٢FG!@f]en_)92^v1Bi	 Vħe|-d0.y{םL?RcNG947Ob6@R8*r4Wm!/KWU
ת [(ȕaw8+ڽ氥ژɀme}eU'/ɼ}Wo	G\;jB`_PN?<Gn
9H|^|ƸB5;X`Nkr<2A$J
R<O1շڶK'Q˥
wwXh5˲uQHtnNSFoMw<x}Ckָi8;S=Uu}> _5G?EQVѧf&,#]UG*OgzWo軍[ГH{oC\~fPo->_@Sc-K2b} ePiE#El)a{r8tGwŋ}9|0t$DKP[#Et,"K{\T{!IEW<pgL%<DK%<,Wq>K-D%%^'"
BUL3rB `O37˰nQ{MĹ-?a[svy4yWOhNͱ"VG_CC\fy{G60<%ZJxzQ%C[n=m_CVhv[oyƟd`rh-XߡXZC'CuZk(d.quT;QE]|ߣCTKȋi/^(Οyy	cEʺJe]=e]Vß;L
/JB7PKRH     PK    A             H   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMOtsSignature.classVWW=L*
jCkk
bb.>1D&3q}_{?sj_&	 FL{o]!CxTT9]]I3)0ZGEMP-;2ո#=>E4;VH9p	3xD6Md_|]'SmS:QQ:P6z
.+`37tF	[)EV41(ĘM(6lWhfl0.Ƅ.V=fx0kp2GUaz	.Jݟ1,CE`<:"*Z'}HHdp`ǣҪ:E,Yw6h;IO{d @JSF*aMit75©:	rYnTХiY
% 4rt☂nQP)#ͫ9z6{7Uǰs%a	ntۉLJ7EMOe+xmd+i&72Y=%YYO}<S|ZLI1E+	p+h0C/R*#r^8/dXmevJUb~>
gbVc>"_-ބ[xnuI\ńyw(I]OJ^h
j$U4CAcT69KpXs[7t'""<le~GТm=af(	jD]f1TdqQ$Ih_gh. }fM	Cl0C OK}m}(xou7.0XkS~(y"SJuQ0ObʚtFi4Vs
=5î$5j=F\Mu[;:ICwv-k:i(K۾`PR3Mv{N'ȿcؽPTya/k(G|ܩc6K7hB`*`*mW
S%$%!
;oOxi8.Z7"rhpqɚ=!ym[w4n[@Pћ)%]xhB7SOqAzs!E!%
q`'oPا,<K%)Ûz?t(&n"`
޺EIm	&?!-ɽK2ߡ̻x1|%<i/ʿ}Dǂ_QBs~AE? =ߤ#'ӗP{')6ՋTie@j(5_7[jKӻG?A wUtݜOyW]󶩠k\;SͶ(~$m:q6orp
"9AYJ3z>7[|?PKjQP}  3  PK    A             =   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMS.classW[W]0.ETUKmXl)T5(81IPV[]]l}`~O}IT]s'}sN
$9<bXyRV	N!!kѬ\#^d#G#5h<
)ة?dƬ_2-A-|@1!R
Vք{6Vz#R#־h4]ɱ
kA1	)Vf
̴E}ҖehpyX-l+(%ϰˁamXh@/dc,=-sC2(Ca5I'YEWD$=m#J$l،ʜRct:#BRI(@%Fx
P#gwdXqCMX؂y2lw89;Ω4J{.ݩF/jP+aǣ
ۼAYZfoGfO-ԷrWigXh@3c{MO9VtLAZXkBܓB*XTD3uͲuk Irt0CZhͫi(OڄeE'эߒCaKIלQK7*mSl{jZ6<qê
.33Q[Jxǰzk?so%f_"8Ti->r"t	<pD#Mbİk07衸-U4&xF(N;/p$ !;3L.9	g9	YgrA*KDq㼸޶o3-$0,NN2^[9q7MZD!ge;4 x7X*rob`t[ڤ#W]cc	@[!ZSKj8,LV-Y`Pt;8N{jLǧ%Oc\wק%\-"5tH̰(Ae(VȠbSU5XWMP",?WKA4?RjKGdmMJȊIBf%OGDX;FcjxZXDAA@jJ.&GJNrgR*;nRz.p#H4o3fhdbl_."Leȓ3e.c-uMw7܂UV#'uen_3*2:'XO{.H֊rW6TLw=5I0GUlz
BPj4'0֔c")ae8VQ9#e:zmL3ڤ95:֊	*+nOa&]ihdxM3g~ˮ9rKΞnJr^X56&[Kβƫ.ts%L"%ģbSb<\<awhYRƌmYZ:
sevluM2Oks	S,F%QBl&+	h$ጘuE+
$/~/PK@ZI]    PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSContext.classUkSQ~TὋ	fxkM?V5ZV~B94~T{L3yg_~,v%0tx/wM$Ղp8ɛpVOB-:X
gl:w%M=O<N=(s4|}%˚G"N&0~ڪv2/bp7UC=,TƤ8&:
UbnusqEjqч~o^5}<qCih/'WEްBp]rV5-|@PCaR=fD$X8`h%BYPXpgc3f.e9C7i
гi}<莝,cQ>E "<"U&gKg4sjUtD;y4Js*iFEkEf ^>4Mڞ1prIJEs^Y"gQ"q˺sg+TGժ H3b{r:OFpFCR'&ֳeikZVei7YVؓHĶL%+CEcE4E~o]WD̊ç_93%p9ǰLG˰C+YF'CW~QG@wϺ8<gk7bxYǅW/׻.2p
3lUxؽ`<¯TU]zڵCsA>_گOQa
NKN+Fd5%73rܺi@vfF]>a_PKNn    PK    A             O   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSContextBasedSigner.classO@=|E16VvH4VVfR)!Q-wsnrr^`N(/LQWEe,G%Uq=\f{+x7!8Ն u$32Z.+'\@R;,06wٮxOIh
hvE PK   )  PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSContextBasedVerifier.class0EoQA7W\j}X*_s(\799? 0̍`ZuJ6b/jg:76K\*>nmJևJ_N`$ݴ[/(Lv@~'q>5_oPK      PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSException.classN0ɍ@iB*$4	ĂTԡk␚K)R> itwe} .wÁM<7FsV'DA`_eE&	h0Վ}wh&ʊrCh#w[Jy4#mF@=
ffUJK2Oh)4^dxHp@]I:T% ;+^0x8@wWaW{KUWf
PKK
    PK    A             J   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSKeyParameters.classe?K@5x/-γYDPBT6ñdfOǲ, ~(q"(Uo7|~ a3GjES=vִdmCDLꓶ*n#Bzj	j~xap8j/H!'M͢+0eÙ/D)ǟ~T&:_lhv^_u2,Hŭ;oWJ77PK:   =  PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSParameters.classRMO@}m7@O/^k0NqCh_ibc2.&vfͼ;3o ΰCca8
YļɔлX\T:q^Dl?d<Jp6YXg"gIZѵA/J~7
Mt^o`XSy~*OnZ:W'K>©aY~|5,"ۯ(=*H-yگfCځ
rܣgT&J i?
PKYv    PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSPrivateKeyParameters$CacheKey.classQJA=wwk|G"M#"XM!7)vv6iEm(n-fs||64H;aݫuzK#_y+ɰߍ:^zr6EUX"|IF"$!PA
64&&̶ĵ|ԽZKɈmh`g-ԹPTCƨdju&,^;焩H˪螊cRi/[A/Vaogs)0'gSܙ*˼aV@P?ٱ&H#h03l8k0n|X|ۺeph$}N-,B6^@p PK] k  \  PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSPrivateKeyParameters.classY\[uB\`G`	9?
A1؎LsAAHDrqm[mݺukv뒥uIæxKvunڽ[;{ ajg>K߹*v 
*("4'SMCL"r:4X):=n$c馞PCZJ
=&1?p.+p(J;xRS/_2'8mBeXK(MCֻ	B:T1X
nQFB53F,޴7N3Fg$L,ΆNW5kIO;ƴeVɺ:TI[p;TԣдJ0aO(o
FZXȈ~XGS1]ݯGBڸ[,vr	Tv;،Pd	e=gLwc*ZF߈bz8Ǚ*&Wm
מw[@MQс{&_>D8"l]Px(	nOE7'0Dfg\K7=GϧO< z-7G.禩Zy	Lx1fhx3R6FT<(ƮD406-a-g0&"K&\8BUgcY_)[8cb/em
G厫ÄJV"TqҎ`^XAʽQ,OLQ],lN	LG]P6C/'ni1%|멤xTRŵu]V5TpIHbu<]DD3Ōi<sr1qst!`	tE
je󴡛<:OX~@z?H6#^Ӓ=
ޫ}B׭i$RƏpHZ9YXqփ{TxpfLOZs
~B𓄵UNi{peVA1^v$g+SX}#Z3dt1-f}p_iXJ!Alη	\#mLl*~ϱ9,Ko&K*^t$O'UçvP0rW!ׯ4γ՞%Flg"_Ukd+KhF&%o0r]yE!^VYS&ܖQ.bdyŘy`gqAEs!\\%"ɨ۔(^Uq	VCaZYC.:Wf+x咙T$Maf[Wَ(EoJs]2&#u1/%I7)݅b=-٢ѴϜJRWİ !w	yhr(|U8Liazbc1C?TGcΛE,.2_%t4L" ľ	rSB/Ubz)5Rׄ{)7oD4+b+*iF
I?_r.|aqݿwmnnn&tPH/a8sZ\<)u[*-aG.||G<mQCrrCcme"!otw%\
mi#E\dJ
]-ɾ|NȭR	V]VIr2-QLdX&v-ʩBu*URύa	'Yfˌ@(QiˊV/.UZ.XB[|TЭ*Fs*EԬ*+Yr9b\OtV-{,#z3~)(uYK/e@S&bshi`DubcҹS]yzWrlr4%bu9Ua/smU콍5+Il=*u_\6H{^:dYO}C>|CX<~˝N-G /L 7sX
2,>C2Ee/fU72_YMTD*S:[Bf*PSƽ1ľ-a{C^̦q,g+0Y/9Aꦟi#q%ymg s1ҍd4"/rVuG}"5vA9ҺRo&Dy>#ZٗΊGeE4)(_MiɢcSQݮgnj2|~di7ZѸܓLfۮ[R^a
KbRT	6"3JXpeH$g輨V䅻[9[QD
 \r[!Of[«ҖaxE0/<Gl;ŭ'> m17NAPꯙBE*j"sXw?eS5<)l7΢e
/&Jf؈(dTC6" -tՂ^V#xP'	0ԽSXna1FeY
0ey_`RQ?Ĩzo_,\5Y|iE+gpL"w\sVG1!kq"T)U
O9{cj\*QUq %eb!é0Ӗif߀dkq)Μ}fO9<f"~J%9Bx_6[[jyå
(xDAز o^yq,γǓy|j@SD]pr>'PfKs8Ry
u3hPp6lgbg*
BJ< 8!=pMj}r570A\cMزBgozc-?_ټ{wzfdZ*gTUrNO<<b3徧tn-C y#>3FckE)8CtĴ11"D/[ɋӘ1Ef%%+
yyVc%mub`l.fH٪v_(lc~_+á׽;=خ\ߔi鐏wrĥ5U~;pyqZqA)EUķ~ФF^WeV>_VX.h/W.,w-7PԞ-mt'}3][b{qwAQb*%|e"d8ʦjB3hfjUb˭qy6<Jn;9\	33I?wnoAa،,
GI_W
U̑=a4Xyp+ŭzW[/?qLZlKDA5phi-h5[Z3e4	eo.pk(,][2??sX6xk-N.ZO#ycphuJ1(ݢP=j(RP@ocs uf5;~I89a65po2#6̃Ǡ-c
TJE9漵PsK7f7đlTTYCWQS6Zӂ}n^K[,Vsp.̗Zkzu&"9~8qmDRLY.<g=ªyzmwӴ"1X=4[Z{nyq[^'葅w]KдrJ9
;8^96ZNs#{
ƾ%jے脩B:ɋwF))ip	4N)xPK$}/  #  PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSPublicKeyParameters.classXW>G*vM,Q-@TԮlRdj-+^*+7.G@\.G
p!]@?B:ezΛw+IO+t#KM%RXԜN;"RNdjY /2ul3, $WywR:b4S,a87AD#6Q+4pU@mxCyVV2i˪wɁnƅ"pK09S".Su}3fXV]#YRB1P\!\ D:"]..".ah(Ve<>{#
B7zrcvy2f
Ğ>0BDvS98CUpqqG9ϟl
79p8Ѧ9Kɲ&8M}z&=piQlĀA\pLKdްDLl4u\pHBwpð1M$5׋pL!
b!Ueh{g'<ᒊ[	UU2zrf>)+y+k!ygh ]Y-C_Ԃ2:pyM֯7S1)EsҌ2kdݐAuܕ5p7оa[%v\%)WK/3V¹K013"%@)jS fD9*e79
#gPɑn!U
x6Gx+O$"x"Y"ई9ܺVo *Hu8Wb/KiWPrsJfL˹YA5WBL^ZwW6;Zz!@sy\<.CyKě콉 7-"ފ=Mz)UjqNwcKQds'%<BVM^+}r3"&YxNch(bHBԤZb)')7z"E>\]G˅SGW`,D,!*)eH@l7q)|)UZ-A<%<*A6<0$u[Dª%pZW̰[da.ZyYYRJ:
XjRy}VCV0/0玄sYE|Iʹj!</	1K=Ј7٩e<b#5/L%}[+&C=1ZRJP}6sǧ
]f&`Bm/}tj9oW	tQTLT[JX c'vt6
N)?XzW
,{Y3ܚrRYc ?ԟvVj5$ɖnwW]WбZIKsXg
E򍪆	]e-0S_.d3t>(E4ꨜ~>VMgf~[XvDrt߯Өݴ>!s62Akn / ##}Ew#A"ۗs,#z}SӃ~h)bM	?M"mpWo{*:Oܾ%_e~Bw{~[,GI-:\\dtc+HKxY![lz[oA0oD	:4sfs|45d+=h7/PVۍGE4GstF*I=Ǘ$O9- ) mq$62K'\%?JɏS$h)}2@q,n"^tӸjc[p[icuB9
qPLiʮ\OGnߴ}:jK/^i!е8Xě]owzE{J?uU	I{@OXYIJ<NL<z K4?8,W>P],4u;E=OeXIvPvrHA~naʟf u6P[kBPKeq~  Y  PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSSignature.classVWTU:(dH_Y	=xaH
#{wPzZe&,KKk?G*`Lŝs>{u>.]p&<A.C.Ga9Z_1\5Q-jː(̃y	 1TP"#0U%"񑘩A#d3W}aQ a9V0Hid0li9`[D*br\TL%ΰu@'-aXH%ZqXǰ
IT5Ȧb	݌+>p60p"5
R?n$60T-'e}S"jOJuRA)nH(C!0"xH/ƖTHsn3G!Nll-*bCs+bܔPUJ3]W顔%RcdRj3Q7b*<2`=¬~4PoE8*u3홙nDEA̢QuCA<"$̨*dm1#ukUwwDatݍ*}ZK*x,̨y09:$<9ZiՄv4k\KTRO{TBSJEds_짙((ӘA;PMS%ZdYj"zA5RjCM{_F<G㈄XN	{z%֘B*t/B~htQb~٠*B&T%.&	.l
(1	#x!psZQ{{J7H;-W->%i<CQLlfUq	y
!Qoe
㄄H6ŶJ((+^R }MN7нDa)-a'U{9aؘX-w"snʑV9!k9NۂΎ~1<fwμa9
smLG-baؾ(}6K\e\*:f\*fk9CAD43Pl<1/EzTڰ>jn#MrtɬYzU(iDzaӸ8%YسBzYUۣͰ)q(q͋2;
J5g3S	c0

KnxY#=ƬR4.JIIXx<X1`$AcE? ݇K2.pQ=As(hK&846LgTrt9}+9D]p$p?.U\QsLN^52|]KBm)Fmk5$*&vs*5&Ɖh"^>`
Wɧ8Ns
==<iA8rDEh9p4rgH,FG`F$":H}txx,X~N8RL sZ_*1-?X>OE6h$2xE(F^xx^m?m-28J~ARbcqmG~вapCiצ:i:TS|]iAs:6C${X%IНaHzM#!JIێgxM+JdoLX:3gg]Y`N4n12JGY'R,9|eg&״|PKمӃ    PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSSignedPubKey.classTKOQn_ӎSJy*RL"`XHLN'epص½aT¸dsg 9s?"
I#п=TKU򦡻Y3Y! Q	HݨeY[渖ַuUoꮭZ[Z\ZY15Rj-Cl.?OBSo-S )ėeF$b!Z5yKsA9S<sRIpZe8Ihl753Epsǫgp
٘+w`;-2*a2?y{n;FA%Lt'"!H.tʨ3ks<q	*&k2\O#P8M	8K4I?(M״T/lQ-[2T[GLt)îᨴ+?]|AąQwMԴ_;^QF
A8?;?Eo)~M(%[]Lwdٰv#4u%nv}J,=f?#ġ1M6_"1)#
mv/B;w={^B1}Èh
<?NBO( k>g\F9F?𙸛X.rz!u>Pr0OдFg`8՘w$\i2mӪ`3(>PK    PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSigParameters$1.classV@HnE"PѴ"Z@(CZx,P>r&EVN߿Ο= :p
]im,^h*N1D≍nFw1QuKnXG67j,rj~հ<P\L<>w=Aw8Sr!UhL6&l#<C̴,ycda:vD>>G1@AtJFyCӮ|!
R	WpUR.R0>l3I4#94TR77匔Bt}	)3i1RKה,Ն$!.SPlp?\J_Ǆ'
-	[	P)pVAW-޶
sżuLB~12{],CϢcU┊/W(8ܝMFz<8%#"	۞6c=Fxk0#
j0
$4H(0i
d4(0Y
4)T
,hK
h@Qk)G)¶wgL4(oPKٸ~  e  PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSigParameters.classUkWUݗyp)ãJ*bV(N
PQC20	?ڵ\~G<X%Jas}Ͽ bhù9:`V%sR
ʎ`A,f~q-ݳ8U=8wG]Ǝ}`e+˛;N!`q=7e8Z=蓭m฀AX-9~پ6Vjx:՜H21Q}f-鞼tWܲhå^x-/pJN!r`k`7u%+!\rh	&뒛jbH`*$kb
R\?0ճs↿mgMʐIX"}Jqunx2Ytc?2rc9>w6c:%78nY!ő32mpYF104F
BUnqeq7TVrVl2==jvO~ȱ"Bu.#54':qoAcYxE'$8uv8vtP8fELx^'qT+Eg*LnZ樘W=BbUUԾ`,h-0\MLrii(t[jZVM3BT*%rA/:S(링[T˶;>.ӎF?U xCcN9okqQ5kиѸqW'1.0T
>dwx$iW0vQ)"$t&I^<K;yFrBj81#c-*uP.)-C܆&{Q|!#(`??Cz>Ǹ Nc܈שkSK⌁:bDԩIōH>~SRIw$uKGz_1wEJWyWǒSwE}.]1_J򮨂wEmIjHyW+a]QgS؏03*yPKWEP  *
  PK    A             @   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LM_OTS.classy|kHq6e+R4mCg--@1Аp&M)uzb
ACq
л-̮$;b?g;7ov;?,<E

d'\W[i0|0%KeR	`nxxj!$es#mىLb2ʹ6~u-7m|[w3ߧ14ry	a^jyQE
,pº6IE"k\!A	vbƍ%*$y/L&pWld.U7ƤAjFKXlEنc;X~Il-/fE$!F.n$r:M f	25C#Fȑ}T²7>`٣Eªf"0J¹/uiBtLxBj:S#F޼L%xQv_Bzh[)E/#p.-.;63+J¾Z5yւ	gIӠTYEWkA9;̼I愃*Ut
t*Έ
] p!`$c`U0Vsx"N֢	\9I_N$_xZC7dAIox1Mf	`x*WrJ<1w̖oK:%|c#%A/OI	\$xEl-c(
j	ǽ	
I[ h6gg;R#]dJϰ8yvX^ɒSbwrm5@դF293e30\IѴ^	4QrWs9TpʬI;X%!܉V`c 0sځ[
nR~u
^/M4>I|ٸDv˶ǎ!B_7YQ(_Jk`ykg+0X[mTN:Rf'riXX\+]w䬳9eWb
s^^foeSx['
$.n4	aU
ўQ]8ڍfڕ2&LEd!d)5t31=03$nRv
|%,2UOG17ӉUoD{YG>Q:RS((8 0]@nw9C`WVR5x 
-[+|9;.wr{H)v:|CY	WTKkYۉ|_,pΏgV|-G}Y|+FKH W𞗙7|GWa
9=8#`E{uL~TbuP_G:	}(0ySϘzzpA#b]ӈΖжaI6v
4"-wuum\۹'ήHgeC_ȃ{ӝ;ɨu$7Уi:9UB o(U#$aog9NUâ}9eӧ ;PS/77i[+hQC$(Qc^
~J/y_Q2v^wy/NHgP+$t }?8LBG1ܨrrh)7nWhjy~oQ :F:8ִDdYyq~(V-!kv}O~6+/wE=OJ
Oc%-ߊEomFZ9S!i Z[vV!EnVfgpVK"cG_EQ&kN<|=2yuTg'(0%#ನ[sӸA(`x׈xejU#"Tz15o4ydR_*hҎO`ݯ4š)y7D΁Kw$Q]DwhearnkGyv\f)\ΒF:ҳHO#4aߋ1EsSR8%Dl*aGFT])절QsSԵlEUh3\FBrMs5Ge2
l}PDhYd0ma^Fs|aTQZU	33n;iQeҍ`v~[T~"%]/U.Uy"4a0j-04VB29"ujF+X9nVoC2;uc'eU"XzS­r L1ne'o)|gsBc&F9B2mOA OQq`dJyg{;{6-|PK>BO'j29=|>/RHY?D:mXH"wK"wݗz),
?GZ" 9"Er8b*)3]C𭨗~Զ2lBjLSk64nKpi^BK-,U:M.E#P2أl9J=NLHZ1b>Blk>{!1?+"Vo!&lMvy
6IIRe
qs8IA*&5©`jce1l\W\!bPKޟ6
    PK    A             B   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LmsUtils.classS]OA=Ckl[l/BUݭu*/QJRmb|.eq[SC_ h&(e-͝sΝgo b	, Őr6_%Rϑ qjd6~߳IWV0J|آ.CR:aOԫnV[

3,۾I<߷DW:5mw-J<_ڢCEfP)ǳ79\W0;~NwOz9ƐcGIGȦE,)(eqK򩉴Pk9P(L72hH
;"4ޓòVxsnRCFoox|BY(Ȃ]
#g]umcآަmW;./E?Po)*q5È7hFy>?1P|QXkL]=dΔq|\ȌA3JҬV9}Řq%'rߑ;9yfnp{A4&&?PKM
'  I  PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/SeedDerive.classRKOQn[i)S-PF| _&C Ԕ@7dK]@"`5x̔*6:9|9y SX"`!v5lCy6GLЉ:È
 Uj^ٱK{%XR.)^թ(V]zy^:S8/ϏnQ^QE*Y6
Nť
n4Ћ.^~ a	bxFwUø0ZjYY5cgK%;cV#
m:ulћHd"_c,NʹlDة5	g9UqNN029P\
*WfQϪQ-1E.Wɭ%BbJ=Q]E\<sn'?hWZn^k*BottJZz-d](EߧDCd1$","&M"~ 1Lcď&x5}z}:Abifff̶It-ktq>,o`b_!&FqGvN- ~RgTxXn`2yߝgAwy?ZD#<8~ʏ+CG~OwJ]^>~PK    PK
      A             5   META-INF/versions/9/org/bouncycastle/pqc/crypto/mayo/PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/mayo/MayoKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#0s+}@!622
(ui]Zc
McP0@ d1٬@<֒}#X? T fҬZ[7 PK:     PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/mayo/MayoParameters.classU[sE=l:g! i%	$@$dh6ed/awoxG僷)'_'jwOdyqfOs9M7s' (&"QL)Sl@x\4N5B8A3TO-UnL^̥ndSZ*e6*)5fJzZ3)֫r~DDo!h5`1!ATJ9[k*岓RM]"6{``ӣI'U'-Xtf{	RJ#'u_zt`@H̀
A_;LpDhVOĵM8	)
y_|NKv%S(-ȝ%8+)cBm^.sM}kܲ-L:=^}1b2f䣷lς2,&2baNw3Ȼ ܁~`
#秼D]`ɯÈ3QBPmJVϔs,16dD|t&<2ei[zE~?EE
빆e@EidTbklV
yo"	Y=Xpzvs<aqۄ0(x}j$CXǳEN~kB|g} 1!FCb­
(ܡOnIP8#
)<?*>&9X\ m;%rmvd=.Zv6s".ڙun.3r˜&w9.C\gNsdNaPGca]	's]cb2*31ʾp#nJ@v-nv=@[vmhj@{7=ھhk@{_
S~-jv=7V}Rہgghݪ0|/qm;0#ru%rKՊ.O⎕
?Lé>D+6!|"4Dtm{i21e/RiG/0Hz>ʏX8M;i/pI=?eRLkzyA_ĳ<1a14˜:-RRLۡzIX_ڡ/L
Q3s^tU&em|ncD	PB:F5o2Ta"5I${oPKXk !  
  PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/crypto/mayo/MayoPrivateKeyParameters.classQJPGjЍ$BQ#T
]RBӤ
+EqQ]X7Ŝ97 ]lXPl1b<⨔Ƿj,UAWF\rQ2<G]|.oӀec6/L3X"1=ΊnXDe]$32(argNZ.Of;4i#d\0֩RֱBM&*妧uOh< _KX۔g?PK!    PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/mayo/MayoPublicKeyParameters.classPMK@GjoIF<SnHt9_)(?J|{켙yL5\0/3QxSɋBU$r~KZVX1Β,=f)`ࢎ
<_
NR~T\-<dGa
`:'ٗ4?`(2Q2k,uj.MW)AОǥΤM4y=|𵴉CG4t`l'PK4    PK
      A             6   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/MLDSAEngine.classY	xqbxZ&AДdKI٦HC)ҤX "A6m葴&&v4j][b,EN7uӦGmnnX],R~Wwy9orNZ:3L!EzRʞurY=ӕJѮgiMO4=ѻC{/+H$l:IONky]>P9%̶] |^o%UNz	=MQ0-0Lل>|eV۔TtӶKBʹ$ژiSڌ!2,QZX"ט)q;ӚS8RN&bڼma=x:q*4Kfb^܁;؋sѳѮd4=uxzN}tBO>@@Ohy=5zh	8Y$G/6?=޳䭊q(8 tzl]@2IvLRZZ?x.eD&@qHb ohIt,OףiL-	%hgz8!0st_%#-uLbcth:I	X!F3ӍKLVȸ;I&%Ď50QvG򠯿ƼӢ):NZ@Q%+DJ
ze"IτlC&BxqC
N	t}kE]GIs^hJn[E*zz!/0 HaD6W!u}*L,0,N9qNbALt4ix|x'W|^<h.ei9pM_2e{%ޅwS,e	ljimf{%O`F%"2=2$ޏya,C)\qX͚#ē1a6H%p&dRZ{b

U>(㬔+10OD,8a}GxiɵbZY%ct<E.?ʴJ6}ƽ.(sX4uY	FoA+\D)4X
n֑ԝS@_%L'XH/囆ص]+#(G";lY_'%^%YLn_?dʌ65J1`FKk9]k\O,|V X5IGuʪU
d2Eՙۋ8_Sy_oP_jAO$s[a)+Iq%}_]ˤ~O$A8K`Z&+0{#?tFJh<ƑJmD9Wv(5G9<ŏNHe;bGȌf
;Vog\4fd7$
z7/Ñ2[`##?Ո;WBz,>u%q5j1*B紃g

u+jCN)j}-!wf(5jڪn)<@<3Һ3{kO)OBo^_)AaFӗ}hf@93f[X/T{e5o`-F)Z9ySvR"f"7	ᯋmcrq"n
J$9<	K!"KL$-a݃
h9 %+((g;@/GJj)O9Y{Kcҥ2zFcFP
8AM/j[
.n('g䚭^yӵi9zK{-2d9Oyn+1NDj7Mr+&P-i3:u8N'i)wYmHmYUej< |űQ\4yaEy]r68[	.5>夲?,KƩW82+`o/TId5}6ϻEY-"D"JgPfrMχ˓-.q+fĬ"bN`R$/Ϝ֬0Z]2\}b4u9DXHjCBg^jUOh_)Jф@֟h卜"%;V"7fdF>A	
|G _RNx!ԯ]4Y6Ee;h|gxe{hܽ޳l|/+ONzgmuVZmnڭVj۬jo)epQ{f}4
i
"_4T!+[Uu%d@UrD~*D>TR"T%o(7Pm%`U%PUr{<\)G,2&Y|Npd"v/ɠEt/ލx@``'fh
.%ml
7_@(зm.@	ԅ'Bhr(E!ߐuu))<2H8fa2[!lp0K^CVNn|2*gd"h;"Y0C9NnP0´v!Iz
f{8qzt]C`~u|pra"⯾-s3װ Y#AUlֹ
/#ewݵFu	$c[9%ݗ^k$5pBEdFy7[c$E|g$Rk^{Ru:M"ޣzUÿ,l<Daz;OuE|	oOs">օ>օPW,UC+:;U*i/sSxaҡG'IMꯥƥ](_ƭ\Jh)f,}NOk7$,%U [};J1K@j%G	6E,qP˶l,b%wB<d'{M̙otqDSNl
obh%|mƧ8/(5H㈂Qt$-1)%rg-ޞG+kfK_V=|2t>.Ӗnji`wD]FJgMΚ3Z-c[g{>Rov/h^%ƽu7ـlV	js+М例uۡ_n:ó[Nd`--AnO659O>P43Njd AQdt:/E,Ehk٥qJ=C?Q4E}WK+i?^=ׅkGF-|Mmd-'*~6ndFf+qS,n}9|X!z^4*/p]^a@@5U~	sTk
4R7U|V8!OmTsDc(žvg>΂BlBBN@	Jd%]2]<j;B?h%(0UWGn>F3>{s3u<o#,RT"EQaPᢨ/YᱝzdS]$g]7܈4J^F.c4{9x3=q5"1$E2p$cRT`Iu2ޗlCHҹ8:b6h|px-5I콙= v0=_:MO7k?&NsWFH-R"#@&PKXJ  %%  PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/MLDSAKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#	0ssR}}\,	؇H5Чs~J*#ozj	{L540ALfdd2I> O@[Kz;V`
PE@Hjma` f  PKѧ     PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/MLDSAParameters.classSkOA=lJ}XG_RDTA
$YM)]4)AD?xgMvs;{? ^daW߫JM5*ʛ}]<sUj38#-$0hUơ5մj|)ZݴJkriԺn-eА!-UZUɯȸ~v@oe@rCK0:X`7uUJums-	7|Z$I?mdkG#^(gs[ƅLr20ߧp[>ɸߛ:钲NɈ		F^SSS\Ș䂡
9l3$LwyqR&ө?ř89/~,cW􊩅b\\ӿ_j֖Z;ԝd]Ф V$ܵ%wfѶ[b,U;XSNފnmX/?qiٵ^ׇ"ыa洚eqP+}#~jsOৄi4s[NLu⬈A~D+F(b'`1cbÞ(b0^'GD_7}|G1Q/:a*"M@>wꮠ,^{YKj^V26O!mn	n~-xl4!FQ]=hcҒ)7PKɻn  C  PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/MLDSAPrivateKeyParameters.classVS]I:qDH9v\HlEId:kZljD}~?&3|pf0$i?4ɿ.x4SLsO NIDUӠ .0i;UmU;U6dy:k??7SZp+gegp5J%޴L۫{>Ծ0YPG9p/|agsiy.syް	vF~qYQ
ےTy<C8Q:+@|LC?oUp0Ƕƙ'}SǘѐY<aXKo5ø@klgpl)xV	
'F.ݢU79WF%mt;2/%êk#{ͼnRŗL0y|YѺ=Sah^Y/h8)v3\S 	BJ#9fP8@Θ
]1ksTH_"ˏvSt*kWU
TͲ伆'5I,V}\%e
GZ<`#̈4m\r59vȉ**7(WR!Fcʩפ_ʦkV(4VKҦnzNWe']e+mnnWhs.
+}A;yʮcZnpT'2{nx&0+KnZ8hi4a͆qA'q%U֪efynq ޯ.didI.u
Z^ZUYjGm
79XV횬qۼwzw{C,QM/H81J/n(3W/UxChŗ.lۋڟuYO`aX*xu\zH^aݾ8dJ{netKǑm1ڜ
zrFҵ/-FslEdpR[˽3dMc 5eI: _ zH%~)<Р !0Ɓ^TZр>'G{X@I$TpL!F&;{YO scuUOX	$eIXn.cճz[du[fꪷ	o="GFo#gLˈ|%$UDTWawP#!'Go"MNl0 =6	B8F]/x*jPI2`I6=dGNJ:;ڧ)+ގ~o猿3pS960_VN}q_z˓
KK!CaAqk`8 PѲ:ŶNqSL:70ǁ
b#Vfl[XJ7$u-`@	JS6(._6A-SqS6`pg.QBtBtBtBtB4q
?C%BtBz2=xaBVz0?dU]D*M4CS_<JJ|;^@y+QU%>3PĹhu+W\weQv(o+BD?\_k7ww;*PN4Qfm}Wù?@fc(]\ƶM|^*?u箈/]C!_"CŮL񷮈PKT  ;  PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/MLDSAPublicKeyParameters.classSoO@~nEJ,cDP+Tuv7㾊B
&%fHw{_b1
*dB׬
n7m.|l7jzۖp8)R'*4RVVaIma&s߭[ͥNs
}G8!'{OW8
C.s㎌Qчl|zn;
F
U\E5g1*nHƘ()0zo>ɛ+︖}S^SŐuzDh icTÀ!!0YxN5<Z8h
}tn-Il?uI9*d_]G,K.C)UyL²߮Y-;
fJͥDy9'6:ŤnCl
J)^Zgh'M5Ii?@vi%DL~5&[` jC<ho!8)#>y (3ZW(da4_?Ɏ@;LG
93

OP>Q(4;;wT<rfZ0t1 bǔ8q&BCQUmtP9(9E,?C7PKyH    PK    A             ?   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Ntt.classy\UUa_DS(*N`zMMŁD 0̱Rs,FLEM3rqB}}_}gٗmVSJEZeVn)IC"22"\}&Xk)VPJ)oKgeELKN";;)oJ%g
sډӥZ#g|||͞URuqAys"dNh߮Uqi险G:SY*o=2srz$1^*P*PUTؿO)5%7Itֶf*{Oݴ㯵3[isJ6fiXMZ=s>\{K97BiɣaZUIݵ*;k6ib6g҅YZոOc{ fS\w[S+RVMmV֐ZսQUMڜZ6_اUu86i&i/lJ3޼1ą͊mY
39q/w"<iUf>qg+VftWWm6Oks˷):L	ޜVU"853W6;;EY͖qǙmZ5OjUysc6{V^j
hs3{th	rYD+\<q#RKXQ*]J9
lF뵪̓cZ2[?yhvc[^mNGOa[t'^sf(u\S><M/a [fuӪ䃬߅Z54=2sw֪j}&:*MBCg՘G\mmfiye2yb?ce,}GicvqKUfW[@0A7oMi
Z7	ÓK1)vyW&}ZE~O<5ʶ֔=#ONz%zfc3]\؜mQK{{/ >(159ҙ\<cs|С}VNqJ>"cuob<Ό`OHs CK͉|aCC>$G66Gc_`|nL0`1Ck>itv6F=;	˟a_U>tdFe8չ33ըސM~o_jhs(ۍv &0kzs;#;iفubG9rkUn{-RL^ѹ[t眤'
7#![wz]sNQ=*s+wi yd}eȗX2Rk*_=@ZֺNGbgWtl(תl^7em}TQ#E?>*YM|,,4s×KVFUv_KRQF2x2`=SᷭQ0ӐZyd:IML.f	.I2CGrtmņI!uI*Ӕ'%Eqh澞96O|Z@^观d]|&U/0O!COddz^
z2d=
f*>m!⒖R{W֮omW;B\	vTt%8Pɕʮ;T%=jBRNzYad$ˢpID]?P,d hDV@$(2ϒ!Jј&de4%Y3!!Es:#kɚhIB+2qdm&.ڐ'-Y/
Ўld#t #"Б|/щldSt!e2]t#cѝl9 ['<z-ћlD2ч|Id%LE
"Rvxl4.џ|	Av 2ɗEv@ݑM&`0w'r^%{cW0<2	ȾxLF>d*$_2
o6{T>w.r 
LGf}r FQ`|H`4!CP#0	Hcr8>!$r&7bmLiw E!z3E3H}٢Q#sE1O`h,ah<>MbD|!_>$,M2,MWiZ)MǷN4ߋ>
,*<X'ZE^9~-Y%6`h)6H[D_akl}_Db;
.*>UE?7z
8$Eh6㨨D[p\'Dm)Q1Nvh'Ίvh7΋h/__qQD wMQmq]':Sx :3x$:#:純ӲO9-r_rZve_qZNS|iy;RN[|irZeķVY#|Si:-#UNlVy7m PKDz
    PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Packing.classWMP[U.>G>i(PkH)U(X(բ6!y@ڐDt;ݸdbgtFSҍ+:::3KϹ/@U=w{㻿p9I6+wl27⦊L.S<%|P-ᳱ@K~r,6ΥfRɩb֍IR3b>6MO%c=g29Wv-vl&δ)E[mlcd3Dla)8_?rS[ɮ\}O jC)Q]7h('SWPp
hm	{z`fNT'''3|PNu=$-هl3H.f3Mu}牄aۉբF~!WP
ihD1Qqg+g"gIVΣv7x8A.
]Mgx
8	~i!e9SA8F'xyl%/핦:3ٴ˸.2θ_e@*\ZS}691P7%zeȻ!aڲZa	4dxH%м[&7Fku.+GVrh`r+%ڨ@M#YRm:N0ܾYa/WhMMEm,}uZ>}KPaD>?
wVer$mBiӓ-j+>nV%&35@m(8Jpt4FJ]W;@5h7/i-slHF"lD>TL&ʨܣ(#AOp{K)֟ëU0
LU2(@PQAg:~c<cp{8k?P̓SC^^@|RY</A"T
qdȾEcAKG}Gɶt/NJJ)rWV0ZmW)ZQZs72&YWp,{hJG-%Zp15%NYv>5y(1ڠ-JhRC,9 	G~8V+K8f1(hRUO{PjZ!aܧ[YLx7tȝ8I-+zrUR=k	޽fuZG23BB(kN	*ßQ%/zH Kԭ
MdhwǼ&jxAVOO-^/1n*OZ}Tc.]RغDGْ8&/	K$Zc}\P|YFv_10;
PKbz  l
  PK    A             @   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Poly.class9kxTujܹ-li$@<k+e#DEZ#FrI
imJm%PM['M&}q[qӦuݺ693s+E39ssfڕ/ k¡Fbn4.ZsCR@~8ۺ}ۖ{E7:0L
g[֝tse
;
BSHS^1
nJQeAC&{5=]-8]!ۮIu1`,-pCjj3:z
%IK,5H_Z
6r6]&Lu?Bh=A6ep3[,h*.Ovh(;+
jj6ݻfu52i

|(eM=vKVV*
$+Ӏ#vV7>J
V6O(rkc
|[#[֑ny3YW1ր5ɍ5XoA'{BWZΊ"m`XmMG[4!=#raz8	?oTm7"1wQ^uim^]'m>̌{	Â!"ʺҦBUfO4h f>,eH,á>HbУ2V;Jo"  jtuq#9,@X-
CHozo@P$\]H~P;s3^7My!ʥ!bUSH!m`T()}%5=gϕN<ByRΓm$Ϩc(s6ѵ[po	ۣ|~7I8fqFP|íD& V+Jl|4|Xss=c&KCm_.
\~A0n,mKhh/}gv` jG82)fs/2c4',$
/9D *x&W*&i(-8=;6үY4Ln40Xv)(#~8v)pyu]߷u
JɜK,8K5g.>opC!_9R)D~ނպ;;@ՠ
.[_BFC](F-5ջXe]rϰbEAL}]ٚW9o)ݡ̄9C?e#dty/f;fu5HP=MSl7U%I'VLx|w`!\*lvs)npD#2#nw{{v;{mBΊNQzq:t=s2TwZm^TaHGAI],G(%a{D+ܣ3fs%sj%gCVpeGv!z&/,!ȁPtq?3K6Ј5Otep4KJ^+S;+x3on8~!-:6(:u"z
.Am*}ғ\@XjU%Q-zYN{$F"]DʉtqE"s
B/2_SOvIQiSV(`P͇O"J1X梹.
x1&%E4pǘq6=avHgaD$
哙cm0
q#epK=%X9z^tgMWv09D9AP>X~t?⼃BdQqr;<4Gl	wϧH/Omag|UbPsM{>xТtCFW2'$4?7MqAى./%Bx:æ`WgRUQ(HL&^S0A霨|3J`Wg`_4rߚkCCy-L~$3z}έpt#&Nq>u^ǴMY/;f3&0̓͉"UexWtDh6h'*9"8YE+	V{.X1@&2tkZDƀTzL^v
'^c:1.('-I%Ixr[;eO8\m)Nxe[.@t?y[ґI8~&!3)#njiCR
$[~:ޓ(U1Vގ{QkORdHB'pnC%#w,l<0$GTx
,ƞǦ'C>1~j{.[״GބRT_Fǒy6\4
xLE2Ӡ%2v`zfcjgZᣒemx,=
#zQ{<@,<TH?lMJw{Wy^ir&%IEB[A!HBeB8>&Ւ*:#B9vO(wsgZahmm
n>ڠG4eITc&A`0`#6|06`U\쀍]F/ɠ1-"h=Ch]'4o1mPA1&h\y%8vR9+d:6X`t")$!Ƕq<~H:q*rz*,]3hh*& EԬNPX|QEba<eLgEʨFB`yqzdF&<aB؜|ҫۂ3r2!D
@U`YF{`^6=Y}.v5cDx32()ڱ!"@V,8Sz"`'s+aUӦET߿QO*J0Smyc'= ̃ ܃pbzӃ2_gw&:"QLjEⱦf2<QɣHEo1$!&v7?H4T
j&~hhuIbbfG5_b_+"Sl˟_\c(Ew̛v2],# L)\:,2@q8~_ZM*V{ktZ(|hX*]:N÷z5h!:r*^">Z\#2
۪^gfBH]zWSj.6m+4)#
,^Q80bu2VN
ՉyZzt]~vfcUPlUit]q~Y54z/̓+~e}"Sv

ڦmG^W*ơsīӲaW̽^2a+ *iǳ^id\kA#xJ$'c0C	J|;?G3YmNښ	dO%*Ri!yW'/"q!`k;Iט'j{ڿݭnɪ{rw9E7<w$@Y:IGkӮ1q_^ůuž3)867=SCCߔ	xj"L[bN%NOAFt]'bqjI1<߰JA"ݛTwߵ~4y86j~!
^Kdo:㶉"~V.y6;ti#mI5'>E1.O¢F:(x,dh2bx챂{3iւY  ,`P0Yh%Ox+qžqSL|;$Bq}%<Pݼv	nFO1~ςuM~5o(F;H'tI
K<aG"rD {L8z I4i:E|tS^~>juKO"r)o%wd#dZ'Twy0M9}0c'C>(0^f* '<<L!Cdtԟ:W9,LKMk]8KR?GA!VϜYtWo:.*Gbw{TJIǩ%qʎ&B}@bZH>ǱYuH>qH$dBrmuPd9Oya01,1?jpi7gpP<b=B-(|kU-BX[֖e!mE7{1qi]:g/AnW`lڃ5ťOW_xiyt&Ђ"i$>	O@,MғJp	eTPKlg4  )  PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/PolyVecK.classW]SW~NQ@%Q!R*55*ղ.a%ٍ
~uݛ7^LgЛt3m־gw%)]f*3{y}{ߋ|C=CUiNJ%=<3uU-ÚYChXA4hȰ(SFYeɴjxMNʥe$yŔ#c٣M9:5kF+Nِi;謑o@+	hbV25oBhB/aՊHRM$b3Be]6JDzF'|[d!QJC<]m"/JYVGn5}e#n]"e$E ܛW_NXq	"YKrEZ;O
E!>ܶO
*a<^qVdep{J[1u{i!G
uTy9(צ̰(h$aqR*Ϟ<`_iS二HI\,gE`hVF2	>xA)*Z%M1lf±QK(&:Ke-'Ӓtd8}veYSM|
5(5pڅ61S8Pc'8ڸF(F4f
NDS-FU%>n7,v+jhϖkc;9?(Ml>?c'>u0,ZBqDfbn%BAcxf-x?@<u?bbSc7fUׅSj'$a_pw+ylX#m|Q1}"q!RR>,*HLZJ%TM0DUg[VJ g2}ԏY?}ɢSt@@whE7-t1~?跻6jn@@ c6>箃8PW8ȹ6PC=hOHd㌟)XG]!@{O=D_Uq!@Tѡ/1D20~2p]N\u
t/0 ߟK //
1ͅ8?v!:b>8;|k
.LتT^e*\*]U*mξW*`LU`~3+3&kJ"T?3YA;g~y
OxɐG*uMeu"W"bKa
ba2<xt  ,tVqh}mrs%RABrJmG#}-ϑlYqE멊=0/s^̪iNg6bp͆g퉇cx8B(7hI/;ˮzG1\qu
&!Nhjپ^|lʰO96PKX    PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/PolyVecL.classVMsV=V"G( Vp	%|PHցPHiQdے@6
t53aJ733mA-Ovh3z={qܕBX }U5SVbm]s:'
pN1E	tdlpزenjkZszzGhZձ2rfrggf͢aE9k
gŨWr.dVDk]vQ;!^Ԣ\Ɛ\ʵ4!ADQ:H.ͰE=M:eFc^
[U[nK؅!o/C"׊;a'8݈؏7ɺiܲtJ5taXd!uǲfAǐNd}BF\i#8L)5`qvQ22bd86*Ϋz9.cU0FMLhUt{!v׫q^lTœ2xZ(pn{Wii녺sӴeVtt:bcIK邌,c87;N}jN.2VԒ>c\uDO5G5 dt0/J^PH\mp" -8"g*"ZiN.ezy6Iy2:_<Bzo4aSJgrj7P_j_N~ߴe95Vsbjiv|N%{qgܢH؍nl<z;QP)Ren%"1[%wjs;ze\PBY
,TL.U OW$C̨rpt҆0SVk5&pREnJ'5h̏zꥋ\<=t?zn@J)ߠkO
)_`0zZ	_t?q'B/W'"A;>.	J"3zxu-	o+/iEE:6o?kS2G
s|*IRP@ۿt!eLhaRC
1C.ޏ-B8=`ɇVücwe4
觀!1)0~
szi3MYq:C ~2[q𱁷|q=ֶb.	 Iq}-R
Eqq&\t;ڲ:})O)tK!3Cx<$!̑6Hz>2ˡڑ:>Rz&^Kq3Wҩ`||~ҩX RP"Wuw,;n6b_PK5  y  PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/PolyVecMatrix.classU]sT=v"Gȉ`	$NKM!(pU˒k]?G/}pgiO e,~pxjٽgw}BXBD7z֝ZnmipcEpffCF#d@as[ܖvCm暷ir7װ+i+NrLX+mVC%2dkl68IH(8q%m:P#*a2bxM40sG0%uIr`ih#S5)s5S0w
%S&b81TӵKA:6mV!`
b8NRôX]Q2F3Vba͂:FEuɌe*S}/Dܜw.C=-xm3/H*K.ai)ȋDGj@Dl-C	)XA!Rpb$\7%o}xޫ7bn7uQ:-Y2
E	!f+ݳNt%
!XJarW|lsOI:0e|
	3Lc9ݺ뢋8:wϖ&0%tMoZsz٧举4Wz (]'⊎c
y'p|T%l2wSj1o!5sI	,T&9B}0i!|/w1	c]W0}=%܈(c.&io Ec'Ť`>BSO"E8@NB2@KΫxt;!P8n hXj,=b{]B$jȣ!	.Qj:dDIFU.1/HI<d]U-뚿^uI_+PK	x.    PK    A             B   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Reduce.classJAϴ~UftA,]TFt3l+댭kMtUES$ь
.G$(bzǾ-u0'$<ZzG`K:{>U㘻gQYL&_DÁLC'%Dw]ep6T`VIS%iGpꅞߠeD[ #]F*QHt!AMjż7Y,zL/ߏŗ)ʔ_ɘRKϏjfHZUi##3) PKR};    PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Rounding.classSn@=_iCS4qJҖ!Ȃ *E&nlCbąEATR7Y س(!=G3ι"AAaݶru˫J7J v=7(0̂ߪrbkު*5v];?n֫#@؆Q2v1$vj]Y̮Vf!v{VaEzr7;\:Yp+¢T`{0 W[wյR"	SF{aߦPԦZTFo;ԟtY*2ߦi&RqY GUyj^뎌pҰn:]}SbW=PN1S~'hG~Xxpe5n8%Ŧnr{y1W󢐗)qCeC6x9(nUZ6s4AJlksX Èlӡ2cP#	xD85ym:6hYZ6-dz&ɾ_	(!E}5XKBJL	nE!UZf
8FUR5#=Ugb}|ny"	g&D;E~UF$	
QFDsb1SOgp^&B;D34=F&6![$؀MڝBI5^_PK=    PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Symmetric$ShakeSymmetric.classSnP;㾖@@
uT
 $Rj!UO%jsHO/"A"QF咃y3c v!ȊEc	z^[:Vs(hgn+zΐ5lz@0>EVsW/B-V^`
bcK
p,;4͏Ήg|*p	9zOqZ<ekQ<
*o B1HF0~~&dH9`PFlFT8ncA@8,c6Lr:oQMlpH|1[VHOLX Ӿgݓp 
nw"k;a(\6kn>
R6RѕE)ۆLQ+KG`PiwbH*+cDhC\Rw,UJ\YV̺Tdg)	 cU"(.jK1O(AEyJTλKTm&JBoCwb__PKg
v    PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Symmetric.classQNA=*(,, $cT[YX
}`1(B6hg1sn='%d5aX!O`3a<$͂'ȶڣ"
((Y؃EpFS:ׁLHʥn/eH}o"ƾe4s	jBFWݛ~,  Xj-ۻZp	ʩnMzufo(Vk_x"M)(<xL.Lcڋ[+ƹ:nw,[o@a.y6RXto0;7_pZ[<B=cJD%\PKIc@>    PK
      A             6   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/PK    A             ?   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/CBD.classSAOA]nCTCFWA%X$J	.ۥ.҅ИHL01<@腃EI3m
{{o'U@!F !LQ7beݶ<ÚS	XB&nWwǱ궱2
{(?+9՚cPGR?!nή回׼%Q:vpY|a>FP1``|nI߰Y^]-8{@JJ\Ӓ&OK,U"n&}Zw4ůWb<([JݦH9>D6Y@0̬(	G2@NI#KcBNmlXW־C'c?)ťoK][ȩJ[KZXWׄ2Dh	9CYQ]-T+G_1p[eO''z£D7:H 9gS~:~{Pcm*Ebc[t@=4a̴كGSeMd_VuOY7s*34EͻÙ!ؚ|}kⳫO^hP PKyjU  $  PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMEngine.classWy|:V6kaE\,٨&vB
!6uj6AvjEPJzmZғ6-@i_C-AAv{7o޼}W܉D4TtZ+RB)Y͟HDz)oh\v墣#CCj*FpK+P嘡ge~'M`&f8;e- @q-IB3Zki*Ng3aV2*	*8K̨VX-a
WXa)T֙åi/+ s5Bv	8.xLMZ~qVM6s-V*a!^)!eKZ.B%+Ja	5yWb7WIjvqFSoPv4qGs:TYEMEǦA$ɨc Ws;G½<4ؼ!Ͳݣ9C,oj=bP@kNaP3F
SPsdYQM7a78F-9!~}[iPi6a?wM8Q저2XN"{Ha<@!ϘDƢ`q	95lT`1J8a(uqD^/ǳ{"3Z-z9O5xHQ	
ݜ)%Pp<!h&%0#Sl(#)ښU%KNSS{*%dpт/@9ZYD4x`0NFu%ڮyhmXg PIHSZѴRH?rlN'sIě%ikL6SǎQ\SrF,'ފ3
ߒL3rov	;ClN,RRZ%
u[{^g)kI>K >}s3'wxa>"<bFד>yfx}RSկ]39vژ:ts&$<49<O5٩}J\ 3=Lf)ۇ3I7u4[])gnDP:3,i^YY9ua,
eUB6hr1꼭[}S<TbD\:znrh@OjdM UUذK,[{)9(Vk5]it^|#Y7J~\Ҫ@Эnh#t-ŕv-Ɛ}n)#V\cN	0}K^M3
G֒~# 4BPՌ`kc̢
-xwM= '.	fZ}Jt:O>OlE,+lѴbs3RQ=:k]*l<c0RLe*A|?-:m.Vg)#HS;VI_3hWe\jUN틋Wg-Ca]`ˍlmmΖkle-my-ΌK=I <g׈gQ&H\
\
\|.U^W-|.ցׅ[pׅ;p%,߮oqԅpօ;{u.~]8?84"|wlfzPPwo"-'܂22a
{nFi=Z\ ھ9>KxWO<ZFZFQGF[[Gy鿅ZX2Vp1|
'/#V^LRFd3v؊tBGGG3?ЮyÑ2`MEf+Ñ+x)p.T{ 
	~jt~^(G.3q^IMH8F<(}}nwKvx
f>.ȞnWk'x˛+qEsxxwy0y[Z-zʞEE;?mvQj$01{2.MNnТDdmd?({sx_~r",f<D'}D_6׈u@u!LcWHr?k?3('dQDˌf)Zc">֝/%.ai*5Xj_iR<;_H
x;ac$
xw<#h8sz^2	
$&rL8}T<$C]3]k{g>&gh{lד_Q_;	PK7/.	    PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMIndCpa.classXwwLv籛o^@FhqɲUҒA4J$;	}(*j[*T·VEQs<{gf9;s\܆QEBԑT|,:he{&wHDZ!",P!!+ćrYsL1+?lTYݻ=tW>EXVv$$w/P3(l
*dvЈe
ct1	XN>R7[I`*{'2.ksʶJ`5k.8Ǫ`5be~ˬ Z`-#7K˚n*bm>EXo<]|*t"&!o(h
ldU~@mPK3NBxp-1)Mulvd:Nl(;p;vmЕP7˙*gxtt
)Id#ZTF	ݎ0[¦"u[E@/HX
	;3Y(T|ʦ%ց0w#.s߂*USoh[㔗hd1[a@x r/z:c$Da縉,kt/
K`SsK=i62E<]ǭAazmƑ:2YideܸU S)E+:M\UH|梀	*T:mB޸|@`҉gJO3UPõ!aO*#ZXp;CãZeh02Z|Q~3]f&Uq}BnH'G.4rAzuɩ3Ǉpʫc^q7'XfH)ctW.r,\8Qܼa?))|:ڕɏZ}$[ܳ-
sNPMbp$#^&>/~'/5m45
-q<uo0ˊg.$̰x3YY|v9Tq84wx²Z㊕n&K2Y*[nBl}_!5CѲ*cO^ep.	?'WŽpH/~_W7jc7!2V8ͲsZ8ؕKS
5/927)jxQO*/54f܀eeMEvmSZDŢa	~vjhģ<š5FF_
HB=)65VB2]1Lgt3mA;61m[Ml=ztl\Ɵ\҃P(C$ճ{6q^Аۈ,śJBrP-gȍ->+\@#H0N0BzgXX:9"60k_I1Ij{	F|\qrcS;;1CV	9Gru
0QB|ET;m9ԪT՚,܏][6JJ߼D<OuHt$P1WͿ|j[{xg/Q됍z:{,gVVe%f֐NV*h:VkURR﯒2iNb**k®l2T/5U*[%CF]	FQ+JxH=baQם':99{RyߤsE~mXGJW׻[(Ajy"@,@v~ﳁ/wmN9XCHP+DEu_q}%m.n%|mg_<:_zq{qG_<=囸{o-@yMDy`l̦c/UWSCV:15*	
@Beg%.OP:&wC=pS(1h	/M$mTS:@I,.&T]	dOhԈkRXHҺ2y1%׎y2[i¨+=K	SdBiu
zJ9K%CFEϐʌ9*,9rVyxRِ|cC&/3TF!O
'o	eP>G77a'Gc<	E6hS=$T߮"ryQ6I']˃:u(llq]cqs\%
L/wщY/dDU5j
,~5?~<ݏF<TZ*&^oPK`"U	  r  PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#	0ssSs}}]},	؇H5Чs~J*#ozj	{L540ALf lV^ 䉃b HskIog`A HH3iV- PK      PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMParameters.classS[OQ^v.HKൻ.-7CC&MHx"z,l]MoAMI(mP1FNvf9|`[YL!!i 4ayؾt']/gD<@GFC@;qm\>{n88zv?]krB+"	ɀ	EvzAgG1p
:!5sR3Š/xȢyy0t,f)Z=$a0_\`1m+Xe׮9ؕ޼r3vtܽ(`{~_ZGiY*yRJ0Uǟx{:"zR,M0aD:Swϳ}j]WUFI67${ N!o9)䱱cVXJ2ȪYKCL[C?Ag$clPfCLpcZ_?(+ruΡJ<aqKwjPK`0J    PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMPrivateKeyParameters.classVSW$ˆjH]ARmÒ4*Xk^5ʒ,!eDot(0eڙK=w	Rs{o a xE$hc6||ɬjV[z|/ZղmKUL%fºf):YZIukR(ؗ"{ݨ|xal> ?Ex`qDt!rkpqHa	At0ڣbQҪEMC#X;
	b`4H8Mޕ*׏I`FVN8l)N:xkNqݷ9nxKۈ0ʖ|մJMkRm{^TY*)^KxgμvyNH^-CpI8f:|]3O&Dk x_uCPr/XIB7"qZx	qzRJUtZZZdЫcU[$JkoTځcE$OC	אd̚ƚ\Zz^g"2)"&jZH'E=G|vAV/ca9`(eǵW)i+Ԫ\EuX)fy~qw˃9|p1%M*CxWNijJ(a
?x
aEmH-3Y?n3yPC'ratŕ:řZEiN#K8>AΕ %BׁsvfNպ˃Z?O51</&O'wf'3	20'qʎv;$SZySpvQWH$j!CoNwnYz/BЛAsfS
K@UenV{k|I ]sU\^C0""pstI/~I٤A9Ǖ'\yҕOӃ5I!"@4&dAnc`nN:6!-HRcVe3UYpª,:>wv;w޸~
| jq j6EGaREAegA%.	0ÓA'<AEt|Nldc<ԨWmBkGY.,3Ho ʢ3~((ZwYdW7[#:Hi?6R&f^4'D1|:20^61"&Dz7p{/	k4*<uH
+T
\,<Ed//0/n^V2υdgxnCG'=?C63[^mx2j&>}_vR x/nDy|N_w,f
3>D:×ә6HBNoA{nEcNׇ#/["&W
QJ#$;ނ^G}o\B,qT6&2*qSGoPGkw-&-MZ"PK    PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMPublicKeyParameters.classTRP=-A#
MKkDAځ*(<FBRCʘwAg~7(:@nvϞ{nR0\!%Dd4qښS
з<kϴ)-fñ
6]Qu5MfcIBLF3d@ʯ
phs3Y뮾=x=6	;1!Ǔ1Y	2ΡaMEEӦ
O!v	2.!sl8׸;X27ǉSXM$\d{o뚥E-gY[Snmo˞Qt3t$Rҷ-X.z+Zt];[\.Q\aL%ʸ~rF58 MH@ qY1`Ch2##
C %nlBŪPF 0CTe]7-^PWeRJ*e+eWЁ(2$m8_Ҍ˸glmFr`Fx cRLY,8eiz32Cˢ zyI_$4=@ėzK,Ja	WhQh*LO;dO("$=?Rӷx
BAX$]{|E˶K*u">c 	l+hjQDǠ4/"
$$$0ǉxh'>=MW3;/NtHWe:*D/"Q!Cvj4:I6FVPtn'=>Qzē##"PK]    PK    A             ?   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/Ntt.class}l[W}6>k-nIZ[ڤk$MWofI6i;K:F	)Ln*uuIH!$@Qh8,wO~w/@y`
) r w(,Jޡ|E2Vt0㉬Ghr<]sSb!9p>ŃdOwWgOgitT_AXJa\3?J'.D 2X.qY|R_Yp#|<y_t\v<Idt ut
R n[0</(Bzk)>mM B#h3  @4Xx]"uT\Iu^L"K(fIE2Tr=sCłi˱ҡxCՇ_~Ζ|J꟏FDIEB#$
=2_.˗hC<.Mf|q\+e#<O^VOsP٢-RVj

QbmsMIҥ-*g4ǃc8=qzl:~zT7)$]A

6[i4"XNu"ju&c(ՌE\˘Fe}
ՔNyNs	
A,T>_+OXWj\:L5hu׾p?TgWYJWs:S7{J+hY?,4p`=AEUT.bQF)TUam,DTo
FZՁj+,=%t3y7gglg$>[>}bA!Ap0\4Je#'hFXN/a)/"h	7pP%,GuBs(_%܈^		hOC7z4	1Wd_%Ġ
o	7C-h<EXޯkмL_	hwhX	%a:GkW=C؈ipARxMKS܉#6[ёѥچh4vEN43RG#ctŋ4zg	] tփ~a'ʵ^ӄ]PDCS?n>M`[~tFx |}Q>4
a C=(NB&Š@؇nA47rh!4y4h7
AAual'a0C8nǃtaAwP	2O&0*ED$LYG'LAu/fpKGh^$<8ں#ܓT/hTݡsWk܆P?*Rd5l9Y#YW>lu퓏})/hdls}z?alSdg>Eϙcܟj"],<s,g,X(_sN|F?˧R,|0wDˇecSl5'~	]V?~.;_eOs~X?<3YWX?og%X?gٗX?.?e.B?`D/~n/dgY?3~BFgh:Og%l}F>NOaMadlg|'>SlO}l^gT'gY>w+t}mϛeоM}gۧZ>]O}{l}
_PK}4Y    PK    A             @   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/Poly.classWw}^$)D&6dmBkT
S;iê$M@$emt]ٺ9a݋s2^;L~qsvuggia~'笅}zӿ|~@1ZРeOf;'ǏٹX*CLD29^)rjm>UkΩTDdm,p[(OΑ\>z*26:h%-
t~"~h!;&q¶SZ󩹚]6cq4k[F8Pd-DYXrv1={]n1sdnjʮU9rc
.7zY	+6$>?iNtEm1p?֊kTSJ?Ï]za6
h|}o,<թWLf[HEX:I*:dghCccP@J[lb׼>!![x\ZsZ{`A#\&y?o$xjLRv!!\aOr6Q+sg8bsRX+Kɑ']+[~pT+N9{MPnb5Z]z Z%yV?2y6P&z"^PC	qN
<~GFMNTkq;jNFk6@terPA?ʘ6pBTHOPTrlKRz'
|,TGH^5w,/5S?PLS
Avz.婷oH^V*&6)o 5~m;x<^k崼d4P/
vP9?39Suz)-е ]=;l9Ohh3e#ҥvja<D}A9R˒hv|ZjskN]eyo׌%Q{
g۫#:e5~CSki¦XQ+oh<Zn&w6\.Vm9SRޥwt3AӦV1Ouאl :}Wڵ.WzfuJo@h=\SYOW"D,(pwXpxmb+z	L6kyee*h՘
{
,crtOQpt2:WнiANr9P+	Uڋ((6pG-ֶ<E!ίM)Cv-W"6ÇeWʔJI/{1#RRË;OF2=+ev-hFRZ<-*t>q'.]TʞtqK,!,-_׹+PrC7TA-]XpXO񪣧%Fxx)`^26]2wJR<1xDPsm0G!tc6]?[-0)e|ROCQֻՐdJwB6fΌ2A$$hѝ0=݉5Uz7 <{v#4=Ax*uh^QT] j=a\Nu@%fBн+CzEȿY}[Ѣ85*m%I4H}4\v$g}T ϝJi-+}4d9q8J&bu`)NfƨsKj%fJ\4N/?5%Q2R^Sh5q6lkZI^qĬ9{a6ݭsg6TN܆k
N싊$Ր3\ZH"dL'*
籮Yn~
ǠR(Gy()c;MB[q;
'!Aա/Xdy>~<d{ܭIqiN
oL$`C#n]7BesG^7=KG=G#2}w9Lj
?\:tPczt	u2ƉFPIT`(3DHUFi4N{7=B3Bz>󁻟Otwig\ p1ьO*}м\]?.#y 	DpD_sWDI-U/,&w[ddkFf=qH8Yc>qqՑ o%
ƤJ^b	}DPtU7Z>⍦?,\=V-_/-OZi
yYWthj5_g>io~YP{.:<߹V_$}=_(6=R(^{8G N[ju!II{4!cߝrr:?*(PK٬	    PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/PolyVec.classW[s[Wtnc'NP,%
-uͭк4.i,JdI8@1e(~3"g@; 3 3?Ƭv:HomosOC1BΤ&S\*?86zN;ھl>wu` #h@w4-TtD\:.MBb"w֞H/䦆4ɱcټ-]G
uX&.vlԨ]:*)3&:l:M~	!V3oʱ˼DŦ	,$jb3>IL[GVJ~Aӧzщ:>-#vO*ْ]ORc؂8*59䔲1$6M$*y)@^)ovzMbl-cITidawX#&Ӆ|&lR3ͽ&q47.D9`1h8ee/=ĿPv_~COlh8D%d'&vEnX4ogqP4us8ZqoO}9AęÐ,q(/vq"xpb=*ۃ^+Lإ)+(5n<k*9ML$9mFMr
ҩ NcLǸ,,j{CSeǞ`;JTP$Ě{9Lț((^fX6>ABS]#}$djӥgJ\xQ`ҚdsI
\6_4%\"E;Ovr^yduNx_&;IEٵ|^3Q_%ϳiu7sB#)wST2!'Eөhzuwo+^֑WV:fɤ!g@[^JXeP:M[Twqtq'g5(ܷ+ejY{=i(E>З;A>ϰ|#~_8y86_Wzk:6bƚ r<zzl
DT|Յ:cX%Z5n ck-ڻ{[voItӗ:N)鬹\*m.:]#bUlAa4N}ݿs6XkȸCD0@~NŪM"*2]7bm~+Gm'Zp 	YGU쿼[_[)~š<p;<n=DWfgd[!C'Cᵓ<R2.W=?jFګP-)j4WC$U72Gs."SfbFNbhsxRRE[<Ox]<Gr1
I^hp٠Ŏޱx.cdfFI9I	H[zQ&%I|Mj?6gW. 
Mp^WePb=LԱ:/U%&U?<HI`8^NŪSߥ.wzz*VH;mX@oJR[ᐦ40Uo^{Zp@d_Pɖ٣G;(GͿpUČBYGۏyU|Ym]U*J̕j+!\gRZYoZmu2
6Q0W5m+No`sVM7o4a7H
x-	ѢRjPKoB
$-+fAݐXFSLt/&
ŤsL!+hmcXx5HkD%jx!
j < 2b2*Wx;HGl5S?70\mC4D9XH9} |lG+8_7E;´?BueB60];/{J
MnUmbz7`K7:xrqOtw]f>VUR߻E=
:OBS71yjSU\|nbW%%d~`+HKoh~V?@I6Q7oCZA~ʎ]JCCG8qp~=E]`|wPK+    PK    A             B   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/Reduce.class=KPkOZMk5q 
t1
"тͥM4A7\]iC|~||8R
RYHE!ƣ9׮!AF=;8#H5[wYLztJI0m@5O\g\{uM$sdQ"Y	eVHt-d{A̟.;NGP4
g_W(,;g8м0:r+tɂY8S	*BE&qem䱎jލmTt\"]Q-]噮FD
ġ#>WEQEѨb}dej%,7;^PM(6^C[	^xf/PKYFi    PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/Symmetric$ShakeSymmetric.classS]SP=-A(Z`XT@ÃmhK?RԱ>s|uFN?qo ݻ= )l1 A(#AŴZln;UCk絼j8VVmjckzYg=	ÅrѰ[˾|!AaaWpa%b>ۗаŇlN%$\cH\i̘
Q%SEd-)c?bיq34f;Og
xrVQ`**xv>}O}aM,%HPe,CHkU^IێQc閥fE#ovrGFY͜rHˢ$s4NO+*SZ2`IKK'W׍si
eolyѴP4{4OFj+6ذd.F( guڪmʿ	3t4en_kuavtH)X'w#|	z<	=o&=yEoW*Sm~?J^g	Eǯbǧ e۸t+"DA||LT:|v9к|hr_+s2I*㹏Z&U"T^NʩL"1kQdz\u|	MZd
PKC    PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/Symmetric.classKO@BqpѕcL,\aa2PN1CHtlw{?>\㼎
2*d͌g݌r;jc:U'^En",]M$0yh0Y:wb7fQgcvشz
1hFWΚ+_kӒ)JN7['ԮtA<E<\h8eHC	zA*Ѣ¨T&@MJþ>2(ᘪ6y;XUv0C/PK6*@    PK
      A             8   META-INF/versions/9/org/bouncycastle/pqc/crypto/newhope/PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/newhope/NHPrivateKeyParameters.classeJ@ĤicZVq.Yu#"]]85?'JJAQ\ >xS,̽w,l}8h1
=w<I.MKEVqUg2:ת4w(:KĜ3pꡍ&|5ӹIR>Z#"W0:aE6vNזGJTj0*v+%/V!L)EqO@oLqLp~ੳwK瀦C^h'p};{
2]=/PK#٥O  x  PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/crypto/newhope/NHPublicKeyParameters.classeAK@ߦIƴV
[Z9 A$iHqAŃ?%N=H/;3o/ 3:0бaeIcYIJgOTSj\UB4M	-C<-R}`zw6[p7Lkf\)TVB(cm#;e8X.uB<=RagC]לesBk'6cF-:z{ti:}N;`o }T=PKg  w  PK
      A             5   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntru/PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntru/NTRUKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#0JJBB
,Ї(@ohDK3zTFdkhl"0 
 ceY⠐Zt2od` kg*Ҍ mZ[7 PKIX     PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntru/NTRUParameters.classTRA=#zCxY@bwUW,Ze^C>$U*JgX4T4U4>g>(GB42G3immwL9l>L3x|CM$AQA+XimpOəZcJKYEP[Jq`:e3'wRHwl>ԭ*Π+)IWH,_s`8E]-Hqx*:Ж6dovw-ដ2LNE5!Lg<9vL[}W+n.q#Wq dv(M&%<aIV0/s1>u߿6-_ WS]aqODZL

Ű@80"

TqԿ}5)t+q.1,$,ێo&nH딪`LN^Pǣ"7
*0,!0X[Z7=Z7X<]4+C'_VpLe3v24lZ P7m;[g?HĖD?ݵkd{xӚm#lصqθvAX/_$+ӿ>ɶç#h
~6dwH_P>pTܛu][wN܈"Nl_Dt \L9H{4Am%;wϾaH@#%PP@%LPL@S%$K.a9|	-h\3PKg    PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntru/NTRUPrivateKeyParameters.classQJ@=6M;&v.B@ `ĕ"EPiS!~%^TM}{=94M(1l^$`bfW<S(9tONϏDdJCi7J"в/'"iv8ʨ&`2a(vr8Mھ
Q5P3Qd2eg6{&0`jmfز헮A%h.HNOa}x@zZ@'n%:slPd,݌KcD}Н~PKp*=+    PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntru/NTRUPublicKeyParameters.classQJ@=4MSj}qF! TE0J"څYPiREJ. ?Jj:{׷ mP(YPfNYsekrd&RdIwC1Cy?J"yжN"lﵺ&*0tf`1adB9i<NDmkYt-40ǰ;|֋#˅12(gqA(;i&af.}r`q)cT5,ѻL*Śn>9[OQ>ؤ(V;T	tS V~9PK!+*    PK
      A             :   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#-0JJ2sSBB}LdC,gd!$1֌Qs~J*#ozj	44)1A`Ladd2I> OK@[Kz;V`
PE@Hjma` f  PKR;     PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeParameters.class]OU}a9P
KK˂`Q^J@[2,Ͳ5xF/ ~ 51C(hQ93/d?ϙ c0bhBHA#(CȔV}h3DJ}!
b-WVf[)]63bhjb[5mfVn-VĲ`XƶiV!\KoV5)ц_^f9NinNs$e4˶!3OptL6ve,GDOy?1*92iinJudgl.-:ǐv7ʥ⢹w,Q(6aZa>R1+׬ј֌3ҏ*i4
(&k&UL#7ViIL>"Wr<1-s71+CGY9$Z<Fr~91'i)I2ew:҃WLNslUȜ6kbrWJ4n'Z/&ZN!)+cdլKՊxa8:U,)Q&0,OpuYO<]t]SWer&=~O<M{:eO),讈Z}0}ȁw;=H:t-KעGT}\е\ҵgMx_"LhDʧ^Z [||;wN q_
}>~9@<W%/CN#
I#p5jzDq_R!X?
=S#纯RD?'HX/(FV=庯Qh:2Ē0a9
M)﹟q3NOl$V()2@yڞ{u?Gߨ;ľDo)E>ϞybN&f(دt#?Rc/PKd    PK    A             ^   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimePrivateKeyParameters.classSn@=;qbRjZ7i1
DDPya$mbgS
~ u6y)%3;;ptdhP
dcxF-w=^nzQh؏:=} |GN+j-k:(h
pHl(:]IfnjVf)0mJώſũ~qHi)oI9*Q;YW|)py\`(|1b9)pYWqK1K§b57`i
80Lomvyr
\v1co7}O,&j87W*O
x4Jhh6dU[4v8b0#.A8EwPQSCVI68́DHߥ)lG sw}GYJp1(;f61̯M,!#;P$җqk"cfq{"<Ƹ3a13"*K'g;+_;R*]\JI3
Ce ]0/ȯ)+PK}W    PK    A             ]   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimePublicKeyParameters.classS[o`~>Z(tE0u8=l"q]R>Ih+Mtc(،fҋ>{_ߧ ≊$42σgwƮ3~pm7Q`Q8ހۯߴ߶ۤ:pĐy^B׺(юq"U
4Ƒ׷kaĔw
8CV?7Q=KC;}Gyy!5΅}5QvOe"G%-
͐O]Xfb*bCAY=l2l?CQhG|n4U<C40
GxM`0{cF;s\M㐡/<
8FХY7)4dѲNc^A%4E֚)84J(HA7 YUȐHMfVW͊ie1{Ҩ̡I-\j"OUlELPO}nxufx|ަԢ-7OpG%x$KJIVb	UyPK6)  ^  PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#-0JJ2sSBB@LdC,gd!$1֌Qs~J*#ozj	44)1A`Ladd2I> OK@[Kz;V`
PE@Hjma` f  PKT#Q:     PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeParameters.classoGƟ?vL c'4%Y.88mi8nU0rlg8
VJ= j{z@ՙ4eCG<_ r=rgtS۴/p>C|Rg"S_'`"a pmZUv~յe~ݮNëlW*ǒ9[zMhM<2V޽s*͢|g`
[+)-ǠnhGVFmVUq-mJzcXAOlurI˞zR^v[]tD{t|	us7:DSU`6K
甬02.ѮGG00[4awwPyg8lLu\ A#'ANs(HPdH̱ENs%YxGT6pa|f8W`lj>a(^\jrUDNO4\}l"X>ai^sJ&U;4Uu5pP|wEfቻVZZԺ4%oRJjj:	b.΋輈B` 5	@V& mebL<~+c2fq+pGp$	Yag<}R(";x9tJ(xWCiu)~zavcRR]Joq{? pTY>7DR6E^9SFi",~+g㙶PY<}?C_)6!gmSSĞR*žsb[[EҨdɹ|n
PKE:  /  PK    A             ^   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimePrivateKeyParameters.classSRP=i6+ߚ`Eюώe@aBlmRӴ3yEqx qo!#ܳ{d޻ Xm		"2RH3s30߶{S7뻺{gw,}ūK|nKgt,z黶cAs%Z,J +Bq2Cq_ogolEjQbGE8<ãWpCb|Rq9ٴ'NȘDݓ2+x-d̄kIDqrMˏQQK7	pQ%2Ty^ET"RPK5	"fe
104[b݀AS{k/FP*CM=?/ϕ|[E@`{J=ۤ!\n3jDcǤשKc~<&!NE8L"(9tZW@0%m_BДdh4%Ca($!#h_#ѧHq}b"1RQ)F*HE1H7o탶[8#S5e6J@z܌Bzˉ(UZHPKW@    PK    A             ]   META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimePublicKeyParameters.classMK@m~^UɓAPу=ۥ$n7+EG(詸}ge?>cB	݆"Q,G N#qB&2KTFJ½ȺB	9a(QNEY?fB	e%`
B-\q$h}eTMبYxt7]Dю=u!l:uC쐑C=BFUTmQQ+gT1;kX7(2F	Ȱ-7r)1PK,  (  PK
      A             7   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/KMatrices.classmN@ϔB-(@cҕ;7QMذkR4L.41qP;
M:|w7S4u(HiP
a0G7WD3sT! `拹hړGap>{	BOS?^̑YvdSi`4k`ej3(=!r紻dw`?6;]TtNUg/X9hy
]J+"U0Ri>uL~j}YU1L(C>T{
4m}@{])Rbp^~S_Fl!6[PK	bW    PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/KMatricesWithPointer.classQNP=BxQ|2m5i\7ic\U6xhD'7&>~eVBb\39pVh9{awnq &wFdBg$E sT$3.V3-7s5!N`E`<Rxc	߯KU5,32!osn+X5Ʊ<K_Kuw@C)q3a<Gg(_rʚd-0*7ۡ$|}0(wTlg ߄>/?M-lO*	&ݜPK>=    PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/LowmcConstants.classU[WWN2d8`0EVK1+jBz^8 ꋯv->ϮZpRe=>w^8*|+p4 dV2YCw'MtO3bT4"@hgꅛvj)+_t'\r
trm)-ؤ ъm޶kfc74
MÕ%}]2ִ2=.mhWc+>`8h;]ܬ֓Sʻv2oꖩ';9߶
f#gv.zS}*a(G'v0YcX6BrИ'҆>/.VC|İ~1MК5]r
XiS&mOK&K)й}_5zG+	
iWE	qgD$>!>9JEO93;8Feb*Up;ЈF\tptglr
Gqykx#YzQB-5a5_.>/BY8bHޘgi I!pLP,q^Fc8RDkr+Jrn`H$I6_u=	IQU\Yfb8.
BV17N~oZ	79'2м]I݆iK2T)xS7U^*,"-[5 nJLvLM.ȰyV`9)N9xS?Ļy¥0'鬡:0yפ
JhyYUkZ5{֎a+Ahǐ{~<ާ@G):Tu8!*7W`^a0[t@Vڜ{7-m^:N+ސVJ?zo@Wd~4EȊ_B&^>B8ч>߉0Gef{%-W'|{	%tD_'GK%v42WGC7
W(1)^hQw	:!9{//cQ	;t?F	x»[A?
^*_Q>1g%nJ /'s;JyN,'8{2gg>gZq1g2O}oc줫;߬P*E5"D2Z.jWsTh
mxM)Hqm)CZ)֓~%AZ6:bhu8hk`mzYGLYt.:z_PK϶    PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL1.classoWGƟ
(?m&Aj[cmE#K@H6cX쮻jEA_*=rN9d̽>;?/pu4x]~X-uޱE\YE;	_s?۲}/RSCus
\~@x*_%({A]-P-&p,֕t兖)ipNaM;x##k8+jqd*բzh˩!ftj)oo%wD7u%N厜_1a`)6.{xafM0tSTACE+ݔ2wOpNНؒq6CGHK8k&wik>j}Z5q{[E{	98?d=}qh,m[=W5Lj"Q
ΐ?縁/Ȏ[&)-}GmX[Mp!Jc77wJוU.)dS`wDĺ+vQ>*Vo`AYC:W.c_1V<uaz%d8Hokı$_Sг/$a`ЂG?fsؚ.!5W4ǨvmN˺d񛾯"`N
pi9Jv!t-zir6uyw&V7<8#ljdb#]U\Z_zmN ւ7(I/{cUF0{ yTzc4&c:aBG,qSۃLGb`'88x!x)/'Xc/K\}Wa3}(]}Jhcؙd$&11s؅}.ۘVZR	kSLDFINAICǿt*"\=N%{L<MC*|2_
PKŗN    PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL3.classUmSW~.R6,WomPQDKk[cPX^6װd]woK3U:2&$HLrsg_ >GD ]WRXkcH<v(8eO^"I#܊MTpK(QZR[L)-;J-.)p.aM;x##3qi8+Jau2PjQF~-TTOȐZ:^-.ƠqSC]r+&8>3Lج	nX
CCS/w`hZ
sAu<)9AwbK:	٘rqTOU44i|=5E5q&ZI{+j.} qBIzn{qj_m[=W5LZ"QܛN
㖨JbuQ-=hLLᦁi[͐yc۱RʊpPI0;`ĺ+ۺ(hwlc&fPǐʖJRnE÷n3[,p|'[X֘ئIV9hA$a0{ ql{:vu1tNeQ]7IH"j/G)l0y(?Yo<$]˰.lG[Weg_[Ő8֫^ٕѨZP|fwyZ4)m&$Ŵp%GIzxd22;j?vWzcԝ1B0l.&%
w`{5ݑy	+?'N>PbG;'Rb/'v7%}w~3+vq9f:ogb
1};x9TZv6K1S=^f"4NzJq in.AӤ4Ǆw[OW&BPKC_2    PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL5.classUmSW~nlX|k
!	JEBbZ{\ÒewݽQ/?TL?&$HLrsg﫿 Lf":8>@'U/7kY"TOV=߱f=7TU!C
۵4ÉLv@̶x&򶗿-(~M@&PD֔݇ť$8iG(MMlx-C=5яCon%?눐:H,CXr&'dfJn-5Zl]0хA=Sg3ǺdL4q|>f|ﱕ(cy&Mܑ.*wzە"Xt'NO9.D|@}4ucTSU׈x#G4$'8m%mr|ԑ19'F
|ADswv-+sM\WQ`0i2EE2fo.8Ec7I;*%[mHw
-q!ƶ#57;ħlǑ(d`Ldu+MGuQ<.W]K M̡}!)Gc2ua>:wQ:Umz\xakjj&D,9EGs̷lrX]nWCǬW&ќiZqoy
U rÅҎ'ӇG4Ķ*H;ZpQ?^UƫkpNXUc=<ZoL[/qh7b+I/cU2\|V
ϿݕugӦF_z-4>t8}.ęplGb;\l/Jl'C4_
o`no}{::@G"t1툰[0#p,oDl܈x9LFfAO#:$ͭt&\=!<IM
<2韏 
PK%ܿ    PK    A             @   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Msg.classPMO1}ee(~p2zѓăD.lJL$&yGM'K4*(qQXC6
1L(S%Sҵ6:apZ2<up-B1Ff2Hҙri$b-bí	QUAHJ؝شz<0GY[d:u=`ǾMy&!Ǒw('uKʨ	E\dы&
M,>
jaiPZ)g:Ti;yKQB¶p5/PK7$    PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicEngine.classŽx\U8>̙I2y&0PҙIJS64wBK[&&6/IiTA^{EZ4V^(
("^^oyL!/9gZ{k9 8G[ig0g]}ͻ34unklkF<vnŏnvݺkWoiXZniK7.ظ^AB^k.[E="XR=܆Bm{g&ד]ܞk
C1PjAitnz9:rhULlﺦ72b3_7hnAd:lO/Ub}=m+;6ÂӨ 
mfĨ-8Cpc嚺uHMh8ӂ*1D6ڲ%aAZBҰkƩe\ATKloN`ޝ#Yph9΄4<ַgglvjvں:KPγ|L"3
mV+<`
p\@x!>{W4`?KLnZh;O-0%_o
C=τK-X+TMbu/˵#A`J6+wkd:[ض΂j(îrA[1ІD-B,\'ٻj`NbjW_/Xy}&0Hず9
_bQC3l%. 6O 7yy6\4˂nA}9k2-UK;[2]y6/Ar&YaP11==ݸdݫCZٛ\޲3Ӷm7n]D	\^>`
pcFiݛvd!UrOP#nb0EfZtmmY\-?l$w1O&n->	npemnh=Uu~-@R1nm"2(
IF,#6ؿY	+V_"(k;uٞA$K{zz]}-g>z⮍WΞ)>mgHLGpp4\za:a81Z0 ᮞ99ÃEgL3-2|a=Y.D>o޼y	_o0{&>gI!8}
[@F,x=ܚAKJl+N*q	G,:|ۧ+3V.FqȄ@;	3ݸXOm&<5۲ׄI߶ҍlΡ]fs ~M.1GOn%&3Ȝ|G\^~2efo
܉"I\Mb,vvr!x~bO-xQ{5%<?uutKb$L_5p-ڂPMN7OB'oFV[U |͂ /-|oh͐V	,xfeWWϖ\kO"Re_8d9*l,>K{
N^KVa^ݗSңCF}8pZ$
V9a(9*ZwW/ebi4
b.wqzIfX,@u:E7apBo,b!\C:5
Ȍ 2(qDw3elK<ߎnp4)=
ǫ|:22}w|+"AeeٞI*,t~b3C˦[UЎ-sNJ)&	tS-g3emo+_ʹ
|f$zg ;Ul,{#5楨{Pw1$H^rtub, ̪YX,6-?	'L.C.  g9($gpWHɹ;uh׾k۶,>Ckb0tL&r,-VK:7ז#w솪 2*b+$Oe娺tB8<Pr>]JC額bjjܟz:(dAWZlkPMRrֳ
(b*Uo6899e'[BmWZ*zUImNŶO3]ܪM\%[]Z,8~BD^ΜWMEKB&2_un]mO8j83?m:",vb3.*%U+Vn@W+3;LV`=fMbVn7IzhzvFt^:M[-/0Q,a2㡶tq;uQG,vH+ %jnؿE}ԓڼ9Gz]#l'[d;e:{]Db`wJ"&r
.g½gqC|bw%k6|=;?5T9CQK\Q+!63,EGqwžLz/'CNrrO-6Hm]-4?gb#Tc}.ʄNJWK,=fP燾Yvq.Uʅd_7Q]PŞdJj 6b=1[6-EXTfu{>?"dKA('؏,cP% b?YGv<s*s_X열.V%AeWoɹnCÄK	2늚FiK@CIB?PK3Yxrh7؟GۋPJފ^iA}g7q мQ._ESV(@e2۳=4T
vbc{=EȃK3NXlTic-[CX
\|
S3Adt[++Wt3[B7gnƭW(fDEhz^h"r=z;v(eLm/-o\:k	gSl
N&kZKq tKG'a)TTV*IsWӡD}fX4>-5:;q$K-ͮr#ʽMj4LWȧrhK+	rgHj9g/oZ& 9WjH^c4?llIk(ϧY͗!Z3z~/$N]O_88bplQ*ѾKxrDY#6%AÑ&,.ŕ\bE
l:	6<JtK7+T,*W{Ԧ0,xaJL
9FwONTvPi'AAɩ*27Fw~%[,1.G[pe)E4Ƶ6o5mŲ,tpaN͖emvm	K^.}ɯQBm
7`-~-NG.?)~Ra[|/
1IE'FDuXUՙΖu]]"RPŐX~bfdVS'ksT xfkWO̔j?oG=e"WA;,o7~?IJgI(.5gڷwm
3NNAB
m0spne"%9+Ӎ\vu_K8AYĠؠ/Y~e$]Y'+!wo%E8xamo->D!L7ho]9d
*8zG,u_?U5iYR&
vg4~vPAm?ÿGolTF'G7xGT?Gn8UWZ戻-*iy??E \cC(f_?c0-ON!r@čz	r/mo;g/= Ћ05_QpW'DgP
 <b=<=oT
'i?OHmӓfyP#teȼey?GWO4R(7!GMŏ[]{WfVVe:PUMGv
SuJ^3|ZO_PŻ_Ug đ/rq%K4oZJՋPnXbQeI}#zIe+VoXYz74.n\*pWM#h8x՗.(@`J^IGV */\>#H[U/ȡKVT-^հl[Ww:C>{u/^Q15>
^O6wiv7
]:Oe!n3YU&R}1NNՍ6{=2!iޱ2ݘڞGs4Bt[	4aNg`j\O?)BS,x?1龐75jZOV]i:9GJlCӝi-4)tzs=\kWKoP;+z
]t݋,1Bbív/T<;ۜCek҅4<gz/{co|[WOnRgΞw .`0'EN1$Oǫ$cvQ@[kKL΂5{ڑU*LU\iu_ɩqڳ׽`.Gw}bǃ"Uٙ:\d{
LgLvSлwE3Q	tO*4`0Pr `^{X|B_+G\<~\2__y*P,xYLi٠sznQϭyzU^=~!_ONWE4s>T*fH~6G+tJ\9>MlOor:TL8@6#%Zl\$!H
A(_$-aP}Vϩ"g ?/&2Q7B? JDÃ0;-T"9	mjh
1Տrr7dc1Cccyc();JCcc"#4t`ecIG97f7_7A]
Z$}i,q>JNvФF\20?P=l$x_WBv?Yw;jD-Y8x'"Qj"Z/*EŢD4#*%r NT~\VΤD|㗊u㯿P^?~<3%$S~فVNAXE5q6A[R7hIoaQWY9C+(3,bݤDFB!
Wg-^I_MDJo7cм+!;P,+Ȋ:~
F+Øsk2?[+|5h>J4&>禴hO)LiF:fl}vvC?e&أRQ	L
NoVن
$bF,}#H?:Lj[O1_A;x|(sc+
N
?h|7c|#:(\
!d.@
p	hR_I;p\,y
fINqS6L{x~HKHTr2=o=Oд9$bKQ*b
c$}!V+$bA;ZKT_|ǎƬX|oѳGKX>?$ axiyIPUV+MTwPZԦNc/'$1H~$/q=DvtzJv	"F97@RH$b%N?

5Jl>ΤTp"T6߱P,v.a;	20Ga!%}(&R(<aj3#cp1*coz,~ ?T ERV}""~PGٳ/Josʫ!??	c-f9 Z0G)[b,:]'bp?.0	x?Ko,87-7ZZ'Nf-vCAWa=>s;X(3R1P8aXi c}MbRCb>]]	E<\fG;J"U Hꛝӵ~Da$P
1c;0N×)	m"
kIbGb)biΩb1뤭z߃$dj-T0!D@F}R_zkPd@Я;K.l8l1Y5;
+oC[ϩG
ЗI_A
WXK[%ݜC.C԰h5A+Hj2F؊ը
UYe)S 0ñ 

ɚ["V%i[>R!!ARPo5:hemjc6)]vg
z,0
AzJ_zȑ;KA
;F6I>|^ņaMQ{V%t8oY՚v؎݇mVԴbpVsSVx!t"k;JA2Znw)eim0Vii6mĒ4]Qʦ}M߫8,\Ȏ
奥!Rkb$Yi@߀@D;Tvmk:dOS*&;Ԕ;-L6u-MxAz<ʚ?(c6IلբZ:bG+TkG{haG#|[4uENmq"
QjvY q]i~LmN[c^KlK? (DWИOI{osN-ޒ b 3#Ufmi#F4p(A;+XZDrQ<[e%]ji4amDb5d&
4={oHu_);:сo0ZV(%v j6EiSg$iv`]t|:@ūu?-7(' V1kp. M*=+ Ipo|;g5-m;
DWhEo)>A*g%EHL&$D]eL
coL8mCE葆eGdԳ VZ|ބs+Z»H~t]$%v0~8+EC|r z&AaNGu4tűb2hj	w<{ݷ/9%:GW/Bx	[E 2%b,,؉0TR-+F7|X(fl=KT+K$$ d/AzOĢb0տH'vŢj  Il0#j%Z.%sQr NSpJRR[xhQ8COphά5_
k#a*iZo'J*RG2"upȜ͵DUL ȱZAR	9Ğui_G%T5^=A_qj敎 bAbtP$110{9=ŞQ<tJf
@ZXI?Xے.f_:.*[C}-&-{ۭK!q0J~0arTYMA]'|>E"%/d?]/3Mm6cذ<JڵI;݊dqX
jBQr:q{5 8B9jơDǡyLoKemFWtJFmE
\
zTz?^ $<4Nk#C`l:Pkjk:^A 
sG[b[8t_hO:y:m>+ODl.; mHwe|
!ywUچR%IAvdMun,Щ[MM1`bDc%xY,A]= {%Ys5:U({W-zzHRn涳9Q8k kJ8nLt9Ї|gɴp>s rJp=	⌒׫d'[{1\t[S4q"WU!
tghiI[	.J(Me"'l%48"zޅW+WSc|x"⁳@;u
FXR
\FbTrcԔҒfH^l 	+**?u1k=m
dZbBc@5;#ich^E;dD8mlGlG4Xz Cn9!Sr7
X 8	]JvNyD,RM9!>OƄlkwy@"':~O.P@7Dw7g)q1@1,<UU|Zp"̉V!ᆰcӵM5PapdmQ6q	1sJMiSĤ)Ɍʄ*_41)t6)7醥1aiXzFR⦪[A[@[X5:m^K!0,=U1;PMfeA\Bq8Bʣ0؏ϸ%v #|<Z+
lcu\vϚ(^
Jq*5W6QίiߎNNEJZObcFSR )*~g6Rֿԓ;@ϽĞS'җ ({,bŜg}VsXa,[Z:kϽg&N xmg)$3kt)^>7`y{)u[7x/TQqC-ƅI"/(kI+eTj=~B=+ėc_XypT[!5:;.lvcknEQ/ (Xh(Ё8cE@EnP$[FFCt6cqr
0)JrFGd*1jѥ:V4<i_43J;ԛAo2__FY5n%'HXVCRv׮vn
nv%ĘB
	cbT!B6p|X iEŲ

󵞘2kuѰ( l o$4Þ>(\+?/y1!0BuHǎtyB.l8d?	5]z3ʡprxh8'Ǆm~sؙ~R ࿷Ք#T$ٙ֕%}eZ7< @yk1&si!&3UqҝRn3U	Ԙ!ԄtJ$z,P!链<yā<7(3ޯjvpZh޼yҋXQϭbC	V~
iwy"0EovYc!X4H>· "YRЏTPvD0SaA9aaBUߞ<UUҬnJbM@JuA~ޢ5ji%aՂH$WePDZK}/rFeQp:"&g*văC'Gx7}IA=J-8v6 e:t|P9QF-q
sm+ZbFO2ѻ69@8 ˡCbTin޲{LDh8{K(1h
90vQJmVj_[szҨh҉%MYTgԠ8}:\mRkНL%;L?MTt¿^	EhXm/J;pQd1?N<[ZkD_FZS¹0־ 
ĭç/hv@Cg*pL.ypuȀ{! 4:I:
J;Ի :!ێnzB^lH\Tz=
;dϕ܍CaiLWb(zF+5r`Ճt+Qx
m@eWL
WfkpiK[I00Peq3Ò73Haǽ!w][>:A%f{5C% M.H?
y?_ɰ;t7]/dr.dpUW%^!ohZRI5{zMJٻt-cuN
>*S٨68
FKEQJޭ{U2*CVqP&2*[ӆidXH[W:tAiW<6Qz	[֣b&6ֈ]ܘHVLԆ&:Vt94q^
h6N~{RJDc,i*j,I ʉ	LSO7\yC#hCMk;czE1esŠ%//FpKxzx8ي;	=$#@"ZA"dmۘ(}W3TJSҸ hF5	ܱJl8:9ts[\wٌAv븃 FE2bᴼ= OX.pc]J
qpSa t.a6$}}JP }Wp"ZblwKvg-'^:ē%Q:?"$UBbdG~4ngL984Ţsp<[@)D4VԆQ.sru$ `< .|&%RW*h$"et-
+*^/Cp?wxY+C4!/1
k}A +ItXILV:រ	ѕMq(nmǦ7<UdoŜVq
A1 Mn Ydhi40({ȭ{iQarMLȎլVjԢW{ݎ/)1 KnQLռ׌;s""da46pw>=]('Hܢj&v&}Pf*L9(Jd_aI#=p̅`9<:EY6gLBAngKJa4maCP8FJyZ{SSWz/x<J;'	8b?Xd~
2Xb+2ș3u{9wi2@48#n)L a2L}
i%'}74V?z|ϐ&c$["GYU`KybVۆZ,]Qr!j.˂y߳}bZF8(h*FwW4ډITL_]7ݏ+_!W~:|Zyw\[ǀ)TbLٜG0N,zG=?Ng&l6瀰W
sbH܏:t9:\#9;8qYZgs̊U mk&vTmZ>U5W;9yDY#'6P
z+y+3vjD$/iST~~M&2jq]%T[2VǸO:ݦ* 5u.Ψ>҆5^BfD
SYV*Ҧ83	oJKq&caÔ0X 
JS	:E+0
'hY
!A,8	p}x4y#((qP4Qr
%Gm-b6XĂ?\x IghfU	ǇaGW-S*qJ9eyy7t}bpHOMfMf20|'@9'_pwմBM:/S]~t?@w#0>1>l{+Q)"t08^̢P߸0ٲGH=>1b>o(Ya)ݺܥ cE>8";&mbϤ)zM0kґƿg!>RvDU$6UE!
a,B>R[xmK:t@mG]m7ц	b@ת5:G
%&wC|
Z+fiiPJ-2T*uJi'(hzM݁o/Lے&kD_7yGQ6b:ErOr>z
t )ܧ2B^m#|k
͹($op"j*m3862Omir[:'+SHj
4)Grµd^#<U:D6l(Sz6	!+hQ!	(LwqyJڛSS
"kJg\K''|%°TCIOlе=
y!aEUu**-/UK[]&w*\ɿS)Dge g)u9<jh ʣ%@+ą9Yj
E	Ow-.|0;y _C٨˟7eֈHvވn)IUTSϘpn'OOM^-nHIث]<~^ <&C#&yFR>)D=P=30>#II6jaJ̠{a
Yp*MaQ-ߠpdPRαiK]])s	F%|R.'<7(EtJHMA8iAMO7iV8cMBX
id4$X_Iq^qXW閩)7֛gEbE,8o0Y\kakPʙ"L`YfN'U[vLN4u+AK_M?NKQ\F˱OT1s[4=
Ѹ!wu#ιeWhoz@,	Q.'0qvaS^4";|7
5p7☽KVA"W/#űϭ&inc:?u?E?pL+S¥b6lLp*aC#pڦZ-<}>W|/5K.C2EBr}
?PKHHVN5  x  PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#p32Ō\HSAa`EN0oSRxSKeIa<# (h,& Hy Zt2od` kj(Ҍ@Uk4 PKm     PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L1Constants.classPJAkUۣeAC`E8a3J>K< ?J)8
S=EU?hbGEeT"/.zJLNkUQE/3ju*\&F2q0TQfٸC X!.ӝCWr^a%T۝˫NtNhPuL(E٭fJ|mctZm=l,fPBK*vzWNؙ;NUFb,NA*7@fO5} ؄PK    PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L3Constants.classPJAkUۣeKNE%dl|x(~؉Sp{~{~*!Cy/E&@Z9BW(/5QҺL].Ʃ2I0Rqn$@ReN͡'9Nv/~X	NZ?T*q~/a]ęV[+]^vf9+qιjS#f0ao1:6 PKy    PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L5Constants.classPJAkUۣeaOE%dl|x(~؉Sp{~{~aG	eU͡"f CNM	+uB+/5QҺL].Ʃ2I0Rqn$@ReN͡'9Nv/~X	N8Vٗϰc.LZJ~I.[/	;38xirH)S|^]OxƷ`? PKf|    PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicParameters.classkS@Bv)jbJѢCA03 3g7-13ɛwsn6o? dPajpxiMfqC\fؚGluw9v#\1ZP5kǯ8椔Inϻ[o0D|ze.4z/gEG'
ߍ5؉]ÛUF`U'JSW&rot6.a0Y_]ղ,ŢtG42n8kN1H?^ 8
&nJj$]i:&d8,A[H8Ǡ &Ʉs.qdn!+Â! 9Z%@cLǸ E'm`&V]`MYa3!nkն*n}M;US;n0!COi@oS!(BG)Wڔ=Q}Tsyw9n4\)׏e-'h[ 	cEmWAYJsJǔ+-*-)-TjLg?"Gtr2X%t|EHR_-")
C:/C@fQwQO=W߿kFm]lڽk!a٢LcSG%	zE*mJׇgEҜj4gڥ9+9M\ԥ&u#yCFTtFLIq馤gpCazh%%=L:PKH)    PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicPrivateKeyParameters.classQMK@MZoi'񤇞z0]BLVȿPQ<Q3^,>͛ǾǦ5u\m>D)I%/Ƃ]&_,NzP?Q2g&?ǽ.<KLJII晤A⨉e]XEtZ'FZ+V1Z
|HY4 >Z@C-
grbqktw鵅ڻO`3Gf@մ/a69Z$z PK*t    PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicPublicKeyParameters.classQJ@MZoi,IA-OzsJK	$n7gP<Rdag1o<	]0m4<Xh2j'yJsJ^<
.TUG5jAja%̿[?vтcpťIʯ+h4$
6ѱa]ISV(d8E34)%ugRdj>6#߹-ݣL:@'0_+g@ݴa%$zPK}    PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Signature$Proof.classSn@M8IR IKM!B@D
NgI$k]
	U< g"n`3ߧoǃ
r(}L/{2GJ+a)
<8C%`:؉wa&FAB =RZ2,)}AgV-N3#FZ4+$0(u!Mqg)+[ypXa%ߍ/q\qjcH
uq.M%et\갭!
-rՆj$xNھ7;έTjK&*_$?Uvܥw9<ŰUv6vhH>K13j-D#-4.=KnߜƊX|*%Cw.G!sO{%.rzͯ`/KX8fg;" vmG aJMs6i#m<T=No9ⰊMPK_Q  0  PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Signature.classR]OA=mv*"+n&F hDbc4ea]w&}³	?AO>sLgΝF)w_|A"TR3L*/,myӑc)
AY2g:
XX^(VaM\gx6A У<d"!N6\fhvsp36pb{'T['XV^go6HPEa'օϯ"GcdgfNΛ39k?	Xkm#.h!6E%	弧TwQƊZُ4Xp#f%{-C-3~F{7j{0mһe)
}#~ra_Z?}K:6l`xJWG?PK    PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Signature2$Proof2.classR]KA=c>vLMZkhMk.HK*yi,ٸ3)MUAĹi,,sg;wW7 >cKxrgo݁,CHie2z E8ç$n2$e8(lTUX;NA4Mou?aX:o2GΉ]3xxαJw::VZ2{*ƞ_9ak=k&K^6VXHc9GcK7$BIqTITإ:U;Yz}Jz'x[ki<34

oy
ȻMgXsܚ]\ZwU˹ϗ,`SxAf'<xAl+bcόC{PKF꓏    PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Signature2.classn@MK\-I)
@E\$B"RQ#"W]۩
	B:VwKfl}3;3?}{`,T\0tdP}04[.:83qGȑY)?(}<-~&F1,O3Uz.α[thD>L6ü<QLމ섡rرK7(um~
>P ?帇ޔյ[#	ߝ2VioLOФ'6Dyu?]W
z8
2D瓸;1N2n뀚ۍ*n$̎:)
S̥fJmQP4BKIBES:D`/p.ƘoVm7ƝZXcs%#]j
PK[W`    PK    A             A   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Tape.classU]sU~N+IOCh"MZg@Z PijݬBMiqzpnz3T?_=ۅ-}s缟gG ^4
Tuc(V
gxqez0Gq
	Npnc8mMj7͢h=XM6F"˙z88q:Ƒ
)nd(nSiGƍg[M9҂Ne¾m۞9:5Uf8vYȅ@z9BG
^!d%W9^PW3<'=
7J̹DW	Ч!Q@?Cn]*YCn[E ib,!ddU!,(G	}7']>os 1T[5su{o%8a
pSTf`H3;ܶ˪o+ռj{xVi
g8YcC	,6<AMWxi)/MG[㸀>]kUID/%+pI$.3y-aޠ;j{q*T.HUq
P~$8>.ƴhma٧²hT		`rT`m&MϪn6C>7nPȏDsōѢK8~+KbPpp*6F:Cw
]$>GAP:%{]v2yV 5yĭP}tBXZƌ1[4|1UtkgpM]ӝ
 ӟnPݛן;ft
Z4.#?VХ/ձ=>)ebH5I&rRd@z>I%5OXO2?Vg
%aTBHbn3 OdLNɸa[ 9NTĘ.쏊?5\.7}q$x:.UCFɨb8¯ؙQ a<KǾϰcѳ4V&O£M*-34 eGkYƾ|h=TEqhj(͈]_gKs~:qt
_l؟4P1ћ-*.)(Hi8{BnRxzJOAE*ԧaB4DvQSJҾ%Y#=	\rP7 % bȑX +r*T# Ԑ" TI툐x$#$"]"<BxtFHW$"$""5
,'{;c7PK(  
  PK    A             A   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Tree.classWmT[{sp)HP*,@J
V[JH.$6M0	X|ܦ{׽i^pLv>va_sv~V?!T-_{xT	nfsc#ىL|*vxnjmO3x`ζl+PzXǄ>ĉΒD%/xiώMyPm`*~ 6kO2c#ML7f!z\Evf,w}D+tA4*h)Ҥ7nٱZsEu&VKO$|vaDH
yע擤<Fk(L>.ah7qv+~ i%M*m4N档і>?<C7'еS}xv|JAr?tG7:7df6ǳ''
Xn哤Nstٶ-K	ht(2D܏^=2o	xT˅;p
x,<8ˀsCyDhGy&8dѓg1qmKt*38}lz+b1 O.31*Iݩda_2Nʈ&'2:MtO:9&Rxߦ`@7d>j\<5]M9	;_h暘M
IE=27 r
$[&*Bt;O)2']pN4Єke'S	]#Q2i!Dj\kS&Nar)B}
<G
<fq|VA%DjEG?禅{N<//I2='Τ2l_@D*4Ba_1U|$'2t0M|K$|e/p*
jln:f0kYyꚳcyQx]s}}/EEm+"<p}z{=sdwȰ/bXz&$ehC^'jUit4oD*4b$ r؁`l$L͜4TAʾlz\=iRSgmrFH=5*j%6eLR¤Ū2b0DnPT<#VjKtJTe-tg,QcvQKqk8&E`)P*PF{)瑤iQ䩌A sD}~@*HsŅUJң 4?"s4L²B硼"j1~"/h٠OEb^!rNۡEl
..\B6!m=%D%N\@EqB,-p-@Q#3e<ָ֔vz-i)㎶]	v!Ғ":fQ-:f 4mpZ[[TmgUJBvXA%t*[X<^6x\{Tu6sb6,zۖp=5;y`ꐥZD RQ	%
Q%
:hn,95Q .]	"S;gY:_[Cmf
 פvRh˾.߫֠߻OvHUAsmgp塛c_"<}aB%gU	<%UCp!-"n5;Ms9 +pSKaƬ1\m}]zXkj/Vۖ=]nP0S<*mKJO{_+%hZE%h"f0`Vw汻oեR [-w[)J#ctXPBgwxfPnann~n$43xXx-/O=mpalވ-"w>=D'6M#F|s3i/xFk:ZF߽f`:Uv*}d*U\A=3]^"3a'9ԛ?pBh'S)F$	/RVFz/:~EcX_OKW%P@3]%\2iqΧ<v&6)2/kx]z^qiݯ9"c[g* 9[)C%%/".16FIᵋ7,w8g
x߾Bհ\RpTt[SnB*7me(	Rcfp89Z[(IqO2(Qa1e_Ȭ!s+sHULN?%Eo%XL.xqU!ٜbϑovDOy*ieZԓII=T)Jux:flRvaT־F\WZ*m/@EaWYH^T9Bo?˸r=ƐAhL=#V+
YrE8">p̉?qj2Cύuw9q3@}JýDƭCxRj6kK1x3K;O7Kl|V1IԙTGdatslt3Xۖ.bXVMKnov9
a
Bn+ZF:c-Lmm0lYI;pWXws`-%f)(T(,ބzG(}]D;rmX<[ߙ%,ܑ]\E!Bt:+:&NNyR'hlP{J=,-G^3ro8ݪtgCVʀ>QAitb<.+a FeePe0,+R.V:YTm|@A&˧yls)(G-ug|wgO"nӯb1PKs  $  PK    A             B   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Utils.classuTMoFˏȴ#'?DLkThaKAdAu-P!0)C19/9?& HJKE	.gޛfw |	Q ^q5D y/.X>̃
k  nq5ly$/-{I(h9'AGv@%XVjP`EW)%~Ǐ6dpy,\נ' M*]ם̒LVSi` 0:?Xu@ݶQc]ⵞ=z^3Ե?XA24PvqS7ı77qJtZ!20D~[ N$il2;
?^(k6Ox

,b«	@Ce$tAtҦjHcPIfA($n"yl~8%)2<'{:hP:9
,Cg=O%|N7F=c.IyE.--͵6-H2~j(|m2E^-_-_8kdX^/v0+| a^Jv/e9qɶq7k[e-yT3Re\kDҳnPM!!RDHJ%"l.g`.иyKk3ǛuCe6u];5qTqʶ&nOmW2wg c`j:oW7>W͎+z=ֹGZLRAIvB|67et|%Xɨe7^@Ś׭8ukFk|UÖ HPK3vq    PK    A             A   META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/View.classPJ1=ik:_.l"]).*.
B.\M3q&%X)~%&Эf{o89{.
(:(Q̡LG}5d׃|&f_EU.E

T=p,!$W\Th_|a$[E<E,/+U޽]׊[Xʨi
4y8:R'k")V@-L/q&O[}Eڂ	Ϛ3gU䵑& wo W83wy-*Sm ?PK%02    PK
      A             8   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/ComputeInField.classW]o=#r$Mٲuat8virĲTQeG$4UyEn$ᮜPp_T/E^b6EEPE @~E_ XVY.I1D̝{9O?A)DtDSd_veyKN.UJ@$;0#N|IБJ;=YHص^p~|]حcO
+`%wRX/؞_v
Re}w%\bql>?@0	=)O`xtWk3]	|&5ϛ*k,KY}M*~iՙzT[ss+Nfk2%/SqLrũs,Jٱ='SXq]zش2n9D?2CFryUY>D:<Eɩ8Ь@
0ke^Ygr-3VKI6<W]cPI
p<j_v&
^Whve)cTwX,=7~.5ђCeBdA`KXvA`ǷUU|7VdL`vmn!8^ aIf;
DIH:=|řzgM2eo.9v@2ULn窊 +n_] @WA&Q{M^)Cy'mH&'s)滋ѢGb8UNnw+g@%:+nыg֎+;ee,#̮Jbu\vKGuE*T%PzѮˎw^^zNqn<|.7I\Η|@jRqjeOi7cYM)cdtuAp)zMOAOm-i pO0FwͺUizg;fhdT34~C
GreFwUmDFbUM`5G[(
27zsV$	xA
H@KG]Ǵ=R> /aLwM	ؓ5ERF(7(/uvױ
-OEsQ䖫rFdc}?Z7g$n7BHvߧ8{%6еEyIZ=mvU%J_(H89"83bC mT7tV:i]}F2:aj5œJ
m0ͫGf
͈]CNR%f6fD:b&CߒB%+e+#b
<MH½$Q)RO,.A¦o?`9aH3rJcTR#E\#-U)Eӷ$}y؈C1UT.UPЩ|*lb@!(YK?9fm
`4~7˟ &Rc+@L
>
vdx9@P[y!xatU(VSZR7hjo!#Il{!k)`7Fqc2|~O&f6C
S?l6#|ହ])h+ԯZ
gR_2-B۽MЃ
 H_1[ܦбG	^ܽä2b OP_&MlR(
;3 f5Zن=Nj'D\_ITZ&:*\+~EpA6SMnE87'y^i"!6mQk8S`_c8vڵ?me|n1( ,dy.j+M$$n6$Y=Im&#
9'w(0S
G\027L̍&"3fa#AhWi~o-HDD\b*
dSޗRj/If}:{~z6N{ޤ
Q
zPK0F9  `  PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/GF2Field.classmU_SW?ܻ	$&낊`єmCS8K	b0$~}pSS}hCgG[@XzB;ܻιߏ?L{c'Qpˉe	t/g$+J_Z[N,֋ͬ\XJ>&kRbK_%.<_* @X&$P_Y/JzgfuH,K;+\!f)~hlth$ATa;KFK<]t'3"<ƓBSsbaI>РNKerj&hBa"<0RǢibo '	|H[|$yD Y/hpa)<%ba1_bpUBj0'ܾ
y
nx{ kpkY^\+2g 
d56xԭ5'{_B<W/c;E酉y܊+㳗$$h>W*>*;SX_
-CRnur!V(ca+׬>X/={S}9ق>ͳezYu ؊ fB\uù2H /'Zg,~ {%6m6Ҧ"J%m"ZOjixyeT~:k -al{e4f d[#~N!@Ao!o!rSX$EY
r<iVbnEyere7FԖEUhҐ/,c83Gc5hP&7Yb>KRzŌđi&qAQ`ш7A7n.(
]h]hoB~.t?Oԁ8!HsߧGx04F31\K(IrDcI4IՌ (nݺ~<wJeW_
o؎PBM:PEJpV
N9V}
f#C_H"[v
_^]po6Ym;)3mVuƞT됴O9 ۴w0کz0Iɺ. |؁IQ$=$6%vvR7*-u?6ߴ64=k;e~9_I]	])fkǏ`<]>PP	T0AxbPubeMye]ePY[e)nY3X5),[Ac`YQY3zJ,|17QMrqkidH̃#ϛ
k;LD-WX3I}
=mp{oa
5Es趺;>6HNvřx{nvƞ{ r,4;!0
ҷKG)߀ɤ7̤ohzIPK&0  
  PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowDRBG.classVoG
:B6\_))$@	$Іf]wwXzr[%/Tg[zPk5%f߼7o\P d踦3.7+gƄGuk־<jZw!OL4!&aP2Q6t+L##c8ggݴf웙Ѻ<1= 2

*Z1
[/m*L&6Dh$C	1߮b30hN-M0>Yu`m*cKgi/*MeÈ
TNm	58zeh6l=nCPSD=*

1JHQ`Ei]gz AOo)د ?/V>3Vv=NܤTfHƇfqZcgG8o=}4[K$1!*渕7-fgqD;WtGfyq;aŻ3qɊ1_zR;}u'Aū஛-\=!A!
}S)rgv6E׋c2p%ϴ01,љ7B[ymS<ccZ6jHs=W{i\TMt9)) a'Yd=el̍q@YSeems=G/p`Ϻ!|2cWuH7Z Hg#>Ӻaq?:''uó*_L74Ha۞/+p/SIb5DN/LQM
YwrEuy?dԄBԹI['HM%ubAХEzO]CA=YK$ӋXle>P^۟wPoВ*"t^#v
0Y=F%ǊmM{	K-HKZK !Z	=_cC}"0^A[]|@rMJegw\U"-"@j{zy	 ^YBD$	HI[G<G)ƞ"b@޳1%<G&땣G'SU{@O0L/-Q9	vEH*+VdT~8D*O@A?VHС[
#ui?%?ϴǡ^) )"TW$ౙF
/tWTҴ\ dVY>#b5@ڣ`=EoQ)&XWK
!LdLMh|Qʂ~"$iTJjǡE:!Q(؝zD^wp FaҮk	PK{Q  *	  PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowKeyComputation.classW	`E&GNՖ9\@[,4@J+!
4n@5\
P)T*vJoQ<EoD@73amfo|?c#>`G}((-V f#3hz@~ɼV
T%@g;
Zt,]D iE㝉KuM]pC>! }.qX0UZՀV:	8q"G(f6N*Ϥp:L)̙;)\I+Jl8Q2v'@3w«"?fHb+ӭS1	3A>N8^FDp@!Tu(<R6-(MW{%(QUA*1_$N"ܵ#hIRz8Ӈ$3_ᤕwvTKjCüffs9'r)Q'Ѡi%Z2XfGV\HUv$&j5΀rZSE鐸(NfMXbϚQGS~DMݱt+di%Ć8hlb"+6H鸜q؂KD<$z顤]J\f҇zV_
GY> A|2kÌ^%qzk%s4*Klu4*hjXM%sč̡(mfcma:qAf~BJ\V,zUϯ/ʦ
SxL)d7E!) w:.{|V^'x'q?o鴅F?>d$0,p̡+k{a:
KkmW՞dJ<$9Jb	Jtv4Nd;/[K'ױW5z:V"pܘVOģdyeǺ$><-xXü)|w=\ם
Jz)GM=j+*~RQL5I؛.i<X]nNFXE/
%ao^ϲayykvw"!O?ï9ÿP2W'i\˿8s"ޜ(fsG}	8'LmXP2֏g^_MzePhj55^z7l2v'ZI?^ߙ?6ifwE7ܿ$^]^N>++Ns'?Yo ȣ&nےUTZ*Hrv8ӛVpcbu(/.JEX?D	.&ݛ.z<3Dp*ś93ݭ)P7z]Ƨp<$}Ǔz˵#I`%O7.J6hr#SFҕI+ȫȭFn75F6N#6#/6#F32jJW!
i?P_:Qz(_Z.-ݏCLni{Jx2~Yȉ/FᓿҊS_&Ù^RZFfԪ}ԩ繬S:z|(&	z(S> VdВW6ζlR˵Yj%V,lcV@OV~jRkF1!f{SԼ+$`ӖHg݊qy}gh$7̩^Uߜ*vLNs>|w W+~{p۸ۮHLwk
t"D~߯wc٘2Fu*iZab|tq!\X@38aDȁ&Vm3s5	{oY2ZuEmW:<07&qR.$!YUx
WV*GzdDSMleז-b3.;GV-Qb8_]Y0>Zkݐۍpw֞_S8PߠqcfɵjLfbT\/_rFTXfd6j.e(]1ƽ҄4BC*!2'c#UN<2Dk;pmzYjOCB*5O9#8Ň鏫tgngR<uCܪg{tn	rnwkTnf<%uYhRsrk({ăY
u@A7n~gR{JeA3z)T(uF 5T! ]Giwn7i|Sg(;Ve^lkxWe
@Z65iY>N*|`:C')[@t+h5w=4e龶AX]=0i,-Ɨs]zr]r]v""]4늴_R:jZmk)uWmq*.:կԃ^uYx&z}h<9)wWqUM:Լ&:K; yӡn?d}װ~?tx]Oqqfy]1.5Ba=wq.6SGm~޶1y'
wSAp,r8^a8&?=kr#.s;\ZQ,Y}:4! KBx|ըn
dW(hyPKV
  k  PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowKeyParameters.classJ@ƿiTm
-	JE+zKӥLR;yP
| J~;a@;2PTdu'èowûM\'7vd C{D'qBF{.MHG^cBPPXN8n	8rW#[bEG	yAPc
B/t["k5	
3gfMNÞ k0tfMrgPN;çrZ}oPV+Ȫ
Z<!]-l?X5g=C}L
WPK#z:    PK    A             O   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowParameters.classUmWE~.JֲET(j1DËR*]6ivR9r~;ISrNg{ܹ3{~		AW֮sfy!00-B
Ba*Ėorz$UʎhEs:LU!h+C4S.Tf~OЦa$K󡨂1d%9˥cn0_amNdgݙ,()Z
]ԌŠf^ujM$n1Ֆ6=3~I79-SF?䢥hFq[=r舺l蚭eX&wT;aXTIu|X66õupPA̭
2QJ)K!~D
v}5C7Ov1ׂ{xW¤)A)Tf&MB{|t>S
Tnq+OR'0s
JnLo)W-^I=Xؘ[LdxJinԥt_FL|T趭o؋
xPjiaye.q?SvŭX!V7k
rvO]4$˹EB#U<j uXƝU,vgeeX.2tsg6Ck2mG35U,dA4"}M
5hmҙA:yY
s`ȠzdsCp'ENl)B8_kp}mq^D
]XdqHW}NuMqsPGaBۢv-pÇ>PWvypT`	tzo9^E+@SHaUr_ HC,6tOD! 13gǈ£茝	#c"]z)nG8b/"0P#褑!>H,~sa]~%&Q@oo&,oUBƳ/pe<i '}';
/7;} 

|/?k(Uݓa?be|fO,hףͿ		>/_<+\7R7iPK@{  	  PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowPrivateKeyParameters.classVSU-y,lՂM,@(%5-PX
hŔ4IChW}U/љN3깏-;;wϹ7U QC
\:x5tSl.=N͔vp2N
|&#Rv.h2X`lpisĂuE0
V9*+X۞P2}s=l&
t65l
NTn*<<qNb<ŝw탁{t˰
« }bOPH&AzR1܏-D~MK`*6>ȰM\
2RBEkPZW3<ɶ%.;:*t2lrEdxb4v1XWtװcu֗?Q-J|·=x7[do78S=ư6N9HmMnc>aX1!zK-N٥QBhA1в}'{4XZ>ƐSꩀA;7^S
|8qGRаܳ4%a1kJ[LK@0dL3-˖aa9X":hTdASPǔ
1)FLdYsLyG)H$|;Ve:^bwri=rw^g87dUi#diĘ{\P|SPc1|SАz}Xvi筧_ORD֖(2y#\۔PoQyzT^Ew:0;50f'4"lWCZ6r۔4KA%+٭JVOȍ&YVw=B";pt\fjMc"_ÆMk	w/44Gf
0
}	-h5Z"Q'@4|tbF =!<x_!yN{+ػn<ݜy4
$y4"VA@DP$	t	b"HBH5}u%ŖEqH99IF(ǜ'<!ӚG(HbJ,UTREXK`
,YO,18L>{#_k%l"GD3ᆆ(y<W"SvD9.;JJ\q)_+{/}z+P#9p6ݨnToT[I-]=ߵ[W,y
ˢg>O?j}!~O$9>Hj$kyKxinh+G|Z5YՈ#͎/eVrWU#"U#Ft9"sD|[5"jDO%B7F$?1|yוw	g.q9"_kdɁCoˡD.'TΰR\g+tS-foxe+y6}P PK    PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowPublicKeyParameters.classUsSEmqpۦWZ654PDJ1l!PQڛӤ7!Sߜq(3>>7dݳ_	pV6&|0SizVYKjr5V*-S<kSj}V*˪VWGZA2D|mi\p)%bDaU}n'>g92 BB!qJi</bOxO4J)'0,E/q,kR!n=/cWDK5%XR|0U_eR*lRg}̒#.Ps?|"dV8e-5arOnL3\8q!&Cp	%cg@߬dX!^F[i|AqLp䨈c-$̑Do!91e"!B\1t|>Ly	F`QIecU4Q3"fqatkXT*10Mϲthr<"%ULBhR".	COx⼝rxFsqf:yuYiJNhrN͑fp2DMJj^)Ūڲ'ndՊN9@kZE+#mGT]Pp?ty* 
"P4Oӈhވ"Eh(iYEW5jfb鸟߱%)f位柣WibJJxZS2%gwCi;ݹKTYϸ9

Gѓ
Ȑ<֐rʐ6UpƻI˖`}w2Ԟ'x-5i	{$Էi $yBm
=K}R?֮EMUڶN[O3v8t^C+tO.mu=fQ+ی/f^g7[3VӌJ<e~g;\~J?K~5*`KaR_{Ax	px'{!0E!l|dT1Ea+&O;b<xG쿇<=L^16cvc15]._%$ZL[uwBÒUo]%,H%,a^a(#$C`N  `VmlAUyU~}NCX(sW_N~)0&Llk̋41wMnad0'(<>Xl蓤[;{t=֩DP.y&\$6WxC$_<ﴨk
:pi7fԈ0>q<C

eڡD:-NKrN+#PK&]  .  PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowUtil.classVKlE&ڡM	8mKKx]`ii
B]
k/qp'TJ!qEł= H X51nV;;~iŀaZ>:yYbW82?cdhN5f륹RqUR/RtjsRKzazqC=巏5^-fB[\Ch@6BǠ#Q|,V5v7cPvD2lL huʛzɰrcwaN-Or3rX^I\<g!@oiyϓpPjL17.ۡ&]*ҹ#4$.13x!+^DR^"u)ڤrEpcCd+6T^xrCH{/s-OL zP2.|LykzuoU,=Hqt\>Y"gIpAXzK.c bKK|Jq"Ӻb^[}apN^z)?.3VfӄĂHa[6Le/rgODDY:ʔmQȟZX7nYBQ@?`eC9 
^CBN}9t\kهΫoa_K4~Fг@?Au4
㲹U`qZ	/SRtۉ;Д1ǝ1dH C]:6t;Wۡ0d=$UcDeHj"ބU:/"%gFN@> ;cA;g_M_$KPy5
ԀzhCmWIP*^e}Li]!u۠.xQՅ0Tgkl&Dvp+dpT. <\esTwjXzN*E%y-gfLnP׻^ӝOԅsO#,<1;Wqh&7$u 8Jjb{G?%}jnTld;}/E5Qvλ8 &8͏Q"Ui^|8xUIIBoGU<a&;TT[a]DLOd`I
jٕ	71_bgTU2PvZk
IY=pt*5~^ e0!:}\í~=#Ծշmu*mIr*BCP^$M1ۡ=J&C$E+qDɄyt.zy[A_D,jp܊ܘ7ت0Ifޢ!~5ku2pQ @7'B>p<9ө=M:'dTL%Jij.\Hy߯_jAMCWOmSt&(cq2Nݐ)^Iadb#d7&R5yH:(t&e+dLFʼIO}VBϊF`̏1Ķq	T(DQG]iLKҺӕeT&72ovpҌH)!Jp*,D(i nF\[I?$]$U9Su"u,Y{"eTKX١LIz5 PK  [  PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/Version.classRoP.-+D6_Byً9RI$}*].?IYfQsKUФ9;o Pc(x~_y#:a0fg'wZ`U1 ͚a4tbs
H9ǂZ/뻍kM~uMʯۯF/$ntj̓Pz5%$U,&CxͰ5SSn_kl+ l$,Xmc*kT>0T|W8Aȿ2U	3Nq޿ʏU<&oEXƐ+!܌ɖL<
3Ȇw`䓄uhUk_}Τ])S722IY
B)&sOcn\!!ewQJ/`
.ރ 4A!|@VV/7V!9Ť1f澂u1+!1Lb$J(}!|pB:RCG9''PKt!    PK
      A             6   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/PK    A             @   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/Poly.classWMp[W>z?,=ɾ-K;lŭ۴S7U[!J\Z%%R"[-vp?`0,J)Xb``)3as}WHg-sw=|_}= x\:(J`\2gRيbI	\}<^Axvh<]f*PvquRZNK$?8`>46~rx>k`h޳
fsI"ТZGJRVL
R4I:ws,C0erxN'gcա 7dE!+Ғ}&qۯ begtx8O{#xVb V5q,F)N'=>4|8g0draKk<F/9=&>=tO"<CLZK%LIR%p&Kg~*^OdcW^ϔ's,;Å7\D:((iȔ%ʙLXA\13tO3;I(ugKNA>v|{c_iY
PC|f1SYZ,Jy^$Bm.0R.d3Yi'nXxP-f2,%*gf&
<t*}z*TǨpPOx{#
G\e+<inJW2SR^+4L9|v1_ku'5X':>pˋ%,/X,74Ȗ1H@,C$x	T&ԃt"q%da!xtsJ})UlMo-6Mh߁6ye:\ڄX\A5VsMv5	."ơ58nAp=I;|<d&DQyg-xr]nn-d
S/اei/"/+NXT{=	{dw_8G	fB2x7RoJ&hL)2nh?^Q^Srקݲ@Ym6>f61Ԛͺu)֫ET4H7h<Fj~8 W*2Ug ,pꫣ
Z7́_;7jo1KmIC,:&>Ё͂nkey\4uBL|my5'Sv1]I
*We1+{tUԃ'5LeNP	kRCTDTDTBUL*c0[Vc|a7c`q3v;:gX'EĲUइ?}R#c71v#Qg	7`OB[`̨3 3
y[/_#!hrkx-ZZZZHZݗ}hoGQIZ	~@Des6AkmiRi
-zEF6*OSsYn6
[̝ԲV#)1TtRB	W%-
 $, ?+cLę`N9:)߶4n)s!Wq3RR1HTA[;cvM krbɶhfSub:͂a[>LMMM0)h\UЪD>'a*Nxs#ݼu7>sE79o\c9?71:}{l!ߩy?	[k	y&s#S#7NЃu8ylp6ӥl]	7! >i^ц#|{u[G%s[th	#WF!u!	2 dPf![PvdB#dmBzY/ـ+CJPea[1(;Yu"nu˺REwW?;c*QVl!#LL7vRfp
WE/{qU<ǭcc`'4DF"!p	ˡFcAǾc~''}_=#qS3}&ۂ3qm<a\k45l6۸dC!͙$"a!1[IDMDl#il!R]a|5Ss<ƺuk
"#"9a]9"4A)wJfrA;YձpaEFbE-Nʅ~a/%IA^BLABb;݁H@Hd'tD9+P]zv~'}9tZ$6<x]u#bSWSق}ـ^BԖ{qTʵu;k_D*!^ĳ)y-(3ex ^}|B*È@zt;@7|1%\9<2vB7@>JlޯU%֗^ 6,:_7PK
  k  PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/SABEREngine.classW{|U/Io[~[+֥*h׮i+k5KmڴKҹN@CTc>PAI7QQ|(EEsdD(m;<wvSG\fuB:Lds3fdk28k&xO8:MOҦ.5RWcGr%Z@p%3nju#шc:m
JfZȥf>ٴgog&LnO~Y%(F"={wD#$p6תhýȮhq[bFCIV 5NL$S69
STb
#/$
l*=SFYq@+Rf_"x/p
8;k29=ff|hG/2r
lAE ׶.]:_H ~$N+.),(O`4kC Ve`xEzzvE`e۽#2S}mWg6.0dm:F4lY!}=ښVRY:cLy?k`nfчQ\J`/ƩO̓TJV}4ill,cpN&AHj
ȚɅL*9HO\x1gҩw50Yi9kh~X3c1v6@t(
,
/ckp
Ck͹Lˑz`yZz
>B'@[8.}Ɏ}GK,7:nx\OٜJd2<({fU4hxv۩Dr>w9KD*aXTUw;M'{Ֆr[.xnqkoռI=eZN(̱0y	Tj >Dff 3G`nRW)	|l)zqJ1$H9dW$fgIOӅ憭}F$}f:)["w
|_(Ș]2bi/ح%4#p/Tꄙ,@ܗRLjrXk&u<@49;wS\:Ks#}]M,
xTuYjţE%m-Ҟ'SI|SfN͖o TTފs{̇6g_^(2aRj\2ca}13[orKܰuinZFfSsiudi$X7J
dR9ӖM(W&K$%fLwX`{BLSK]BsBArhRIdW-}*|obSw2/4ˬ^EDQjEÊFݩ.Ew+z*z^萢t^-ZTJJ>x?$/4p;OÏlju}#meRwQPZ/ZQmꚂ/*Կ|8wMA(~]A={-Ro{f
~[CAXE՛ ~gÄW)cC!`Kplt݆ڠߗǚ;$"t)Zp})lϣ$VI܅Q<.
Yn@rf/Y.t5Zvd$027!-4G#^^l&=K&Jd=H{C{eh<+NseC?:յ5\xw:SQ%- N$:]xSOOЗ`
?dx,U%unހ@"'4o[v2:kn9N.?rK-k	_lp͜ZC4n($2ᣔxB~&u$t$%gPm7eFÓtZu`sKp8I7CGՓa{b	7tBi-R8a8@ٓuT=CT%ީ*^E4xfS襌z;85!ZUB-"Q(HՁjH" T@u[@(RHBP$Gx(r\.e|KxU<n+2| }^z&
˨QXakYsbOýCXURrcW>K\cMo[ʬ>3waKF7H>AjAM4 hI;&9v1o9|
[fihm)X٣P`A?To-^y綈.0
a
yNRB:K	x,t@vC
a ;;UDfT-cJVK&xZmi7&[v@>aC-~
wo<xH5ʮ.*^Mh187}.˴ET Ǯcq,OLls4Y,k֛~>?{T
;:\W=MGn>|EyjӂkÛn,.ArjiD(-cu8ˆ8<^pvv#ǆ,o^m*D PKI
    PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/SABERKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#	0R\,	؇H5Чs~J*#ozj	{L540ALf lV^ 䉃b HskIog`A HH3iV- PKu     PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/SABERParameters.classmOAv 
EX[EhTEe[[F	$(BmB}{gڹ 6*!('׌^4$f\eԲ-w ^j@
*)KNAϖ*vn;gݢon5==>\7ctMLٿ-~Xva?AьRPrrb;cnv쟴m6
FT*6t:NM#gHنV+us#7yKX%\8.5#y5tDcnPh<WI[	nVܡA/1J1c)Ƹ9QU b,{GS<1}9K1͹y9XdcQ9R,rxb["JX,;w"<zQѥboGj&pNV ӝc=,JH}HUp40g5o£wp,BO	hդIMH:,uL)R.J]"5+5/_B٥%U*P*ll:pUzvj;h:wжl__El#L	Ӑ
gi(ձ>I{ٷԱ^0b&l-> ݪOzeOD$_'
E9Ȉ wd\ɤ IT#I)>',^AA҂<S|\e'/y-zy ⓜ ꓂PKnC    PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/SABERPrivateKeyParameters.classQJ@=GЍ$Q*B#](taVi:@Ld*ŅGRTtaq3˹ü= Ǧ	͂^.0dqGL_\~,B~
/AWHDW\rQ2Ԏ,ٜ_w`,_~W";=N󌓭n4%Xa{Hn"D11?"a$ѝ7Yq&{YLv(B_BTTXE*aڏ`wg!#{t;cl;PKB     PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/SABERPublicKeyParameters.classQJ@=4MSkk}qFa6"4ҕ.BvLH:I+_(тnsϹy}{~uhtvc5~<D&$
%_.T6NcxTv.d7T	C8a߾:b(b0a$
BVHNaInV0u4g=`⇁22IMKXf2NE{pȅIHP>gf((ױB*UTkk<G\;s`"XvP%MXAs<`kwPK(SI,    PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/Symmetric$AesSymmetric.classTmOP~(UEEyYIa:D/x@bA>խqf[bL~?x:Ό%99yz9 ؔpWlfW2gC5Zիo:jV.c%˶BXɉ1o歂z]Oˍ7	"^AqU5\gX鶩ݢ0y-I7_ߔ1a_@kK-|Rm#.1(M`٦V+
6hAoґyYRE!x b>Oʕ<qfL[0v#S;Ig=~-rh^G2&0If4:z[#bZF
TG{iMSr|3*#ǴZ^"U4~1Ǡv^vշܘ;WԨkz0k8	q$)f{D۹M\A$h')C-5h}l>k)իN0]7]LAjTQGʞuMX+GQu>2Hlt2%uyn}1Fq. o_Rǐ
П20dț#$#;EN!{~r19ƭcb+2V㔎'|bGnt*B?gК5jIlƄ:_H	
|e$(	^LY^
~PK    PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/Symmetric$ShakeSymmetric.classRmoP~.-J7guNThݘ7gl	JFb}č~?x.-/3ڤ=9{|t
-DY ;9|N8ƁnhGnzC{#VH)?z=7#'SC-25)`)8%Kݷߺs#H
1/U%o/A.+T,5[ƙ~'kq+
V~!jn4xU5\Q
v2HmŃ7&SϷѺU-ܖpGA_nϐ
ȍyY8;A*vgS|]0$Bpg`G1,VXdhT"]Zd36>C[1
P*q$V̔h8eC0NOpz՗3:6BWtaf_'|d@UZ2RA.Nu](h"lt$HPK[cf    PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/Symmetric.classN0ƿ#%Z-*!hNt@1IJ8 屘x 
q	 ;`66>6"-ԋJCy,.	8k<yV2ȞS]ieIK]TyISi\5g1]D|4 x l4I$MM1N
k?1v2QplG7g=\Q[xe9{nNrcۇ#xPK˖n    PK    A             A   META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/Utils.classVoU>;3wvwJ/.,n--,.Z)Pi>۲ZYLHx01kbҘ
A^|Bc|X{̲Eޙ3|ss< 8D t ~p/Ld,`4 8b.$5`䙑ىÅbfpf̅tax&ӷ7;(){^wV@5J1`6iH=Bo!.@ʽ\_t%rMh\?\XKg$u.'{XXb^vb˞Q+.l*{O/4]L+[)dE#Z\hm$NMN+,L{,ϻǟ\Xy%ۇ݃}Ӆ]q<B2!dB67e@KC3	agE/TO,LƋ@ny8]z#b"@ZDTci,
#$g,>:'&]0a5Q!Is:ՙVVubckw݈FxӷH7 Ut> \ t-:7.@M%t^]@CF`|Um7&Tqg|Nswi7&|49iGmʷ%WFk$W[k&|YLYye)8Krs4s浥^bϮ;Iݲ1W{K,r@8Far^U@{<k/顑lc\.W	!q<:E|nUSY{I+Vsn@0,g|/٪ZM+켶 mLmŠjWHhtgHPjPEp+? B5P/YWyBA|@N|%,ج9Вl
2'e%>ťݓA$#eھ6
z4˃&ycw
&le	k׵xΔR~h일2Q<Ɖ)(+w}52(H9ǴgByeB	r	TW
yevTGS!W*%,V/}
q0x!bP<xjy(IX<'4N-wM~1Aclpx"<.]%%V%8/,Ji*L
 F,ӍI/ȡ]6`=sV]o ԍe9!,{Qصu%O2"JNbH-ZAu[:R.IR<R)}h_~,drpMxB5QiϧejaX_"ľCC[v2_"-cK}-PWهJie\bo2hg
Z5kMta9rSfJ絥>#۷"gW DK#3S`aMDA̮{exQo{4ըyy$݊ߟۈ&y"!8>@4ʷw<d;jNM囒fk
7܀BKc	`1X [¶&~M#T%ئHl=.EM$(&4OäPKl    PK
      A             7   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/PK    A             A   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/ADRS.classTksT=7vQ&M
	Z)WyȯZ-܆~(U,|`L=g]>pߧ1D
IX`PXO-ͳ|Gk?{]w{ng	XJ!`
í`h0lN@A?4j3?Saq!U*XkZGadİd
֨}!cFWR`[ϙ;\OkZV]?2k D\GHǓ>EsyS6vּwfjS;ĒT0qR)E!b:GȐ<E^kv;4
ݭ*3VFut G1y!#U.WvwH7Ij5.mU8'<N1-ҨTe[׏-e =&Ya'RQ3AJ-<S(Vu0N%Avv{GQC!{Έl^	*Cۖ5_ufD	zv-"_: wcNl=2{Z|i>GM}jy>=Vp0
pr}s|nڼW$%%	;gL3_I.ᢄK3*3_q,PQJ/HgUAۣ3۶LDVƅj*qazL<sExXk
78
$ߊmQDX'=|;!,~MP2RV"/vJͩMͅB*	Ň>G}weUy2RF"=aFrUCPKc  c  PK    A             J   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/IndexedDigest.class-ON@#N]hEq4)0,;|DQuV3̎f n /!Z)rYy0:Y;M{b!ᶬR1/W(Y܈,m)MR$6kVh8Dr#_YHZ8	Nޝ:1!Nx4%x6fÿN̢6o|H>gn3/P| /^OlPKp     PK    A             ?   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/PK.classN1n@5ĀM&"
q>#AYVy Be̮fw-?D!:*r;]Cqd@/B»-rgυjUչo-uy=VVWV)Yʘॉ{01t~i-ItˋOt",rzFnD1{u(5AzPK~r      PK    A             ?   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SK.class@$jɽF[AlR$
>>%:03yO 6avPqQEYX&[X*	>ٗ{8Z5PGAE.a[NO(YQ	_2E
)sB:"Xa`hm;7ga0Z15K#>'<w'B]$gmw?'7\PKt
      PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine$Sha2Engine.classW_:VZF6Iǭ%``REZ9B"&w۴MI#uZs'?Rݕ Xh5f},;% 88%\pDrTd6M,'B1cDNDb.R%z$>:28M/M
x1TdKISFXGNvGLJ!4
8I/ЬEVDu<> ,8:$Do#M>$RFњ&#Kyp@ o=([/,VGMռ(DF􄊇q=%>b0XYԫ (н۹5z1/D.w
. DpΧnv	UzYc]8I/NTis`UAc=.e|@OH5Ymp~K`jq!)J`z$3TqYz	XLg"c|NFL".ecNO0.+FܮecK\
s卂QdAO T>5OaJ9_#90t5.y;Ki9[08K
:T" )aꩽ|^_.4?ܼgS##$fzJ"cRJLj%&5ʋX2Eg~D	gݖX36]OY$^K[H|P4)ʄh[FD%/	q=AhZfөdZNFsTٽ]K8NǲԪ.> Md^7s}bA7ķ:w+="qE˫xN`\ߓ>~@WPEK/B%{T$?'$KzfP=:m5vo5b~-еGG7%e߇>H3!af$*?
$g8R?1l&\~"3v¬,E'rIxRjL_*f;!̪8u<6k5?vStQ78ƯBYAcnv0_?d,KQ:ѩ;
Rh1m|cӬOs4݉
|1(!Ŏ~_zRh\8\{
c+w!7&YG|7[oS6GVpVՕtvWygh-wWL^1Z12㫈23LWMV E(h_fAmd$!cA>!s.i4>,sʐYr*Wq1T54	Zd!O7NYv=86)C_~Vú)rxR
ar]UglW^޾Zޱx(.'D[s>eDDӳ*<Քdԣ)W3UskM6j[-=Mu"c>Me:Cur>jKoy45xXNj9/5OO(tdyD۴QmxePM[7T=&ۿVn[s^3ʵ.o(يP)3iۣ#w5;޵UM6T2V{hfm!6A*~t͜l3r"H͑nmv.y?vY<!S&|OIBN~ev1*my.MɶbdֵP)^UKŞ¥3g1eMA~'K*i)TZ~gY?*lvj;w&RE%+_PK}@  K  PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine$Shake256Engine.classT]SF=$c܈ڴ1I1-46&A|46 [Lm	3xjfҁ6??]Y&fLx,Yw9Ͽ5 a_A
	>dVJvhԝ<,֎j^1F20ͥgRٶ|wvٙbtZg@Prɪ;dn6=?u
2AB Ad\QF%U
v=X%RqjbXxINW7{e|WŻx}Cލkѯb 3tx`)cFxHdqبPW>|bkVmrʠsqî4*>synT1Zܺs*Ha\*Cxxl$+]JꎵO;mjQzp-rxPصΤ~1keS$ÕB4ce^.Te54'.U1{6ovZκYHnlUe,Xt:<un,튿|F},Ȝ"cUϫ8sX+=VֶVoQaA~щD-sHbܙ62Jߝ~~eMҲ|x:T5C9I`ΡX4VBŒV6e/KsɴN=Uל(~iBm6]1uAG5HmDxCoVx<Y)c2M$wy1@=cEy}<#lzS
XLLgOHVƟ3| WCQQm$D%2?~hF=p$%	
,?%,DC孰򑑤V%%OM6S~MfR4ҔTMN9ZD eBT/5ԔE	&CHj~_C2+)e-`j&TN!K9o|'Џf `/2}JFɣY%zvc'`o$z(&Ů4ᷔi:#jX &.z
Ok=ҙHc'xVHuXN4˓v6^rUJ4NC{^g]PK]q  	  PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine.classS]SP=W
IK,~ @@B+5jHc6Ap|g0qFg_P^3`2wݓ칛͏__IBHA3ZόnNE_}f>C˭S'0d%DBazE_u7ixmn_|W쵲gř|9c19Z.s\	^_*fW8Sо
s6-C^۶*W6-mVͯ37Mq\_-]mZ\xX+>u몣W-[tJLѱ7t!;׫Ne<,MJyt~YSIx<q̋
8%
9ɲK*Є^JpOW0$<
F'K)QWr!4喩mE0%c&?ĻМx<bi?sfq
{<0r 9_Z*	NeՊ4K%bH7@)8U'j:qY+-?~`d	4nEx" @CA}U @$bjht+@Oȴ
DߣUknr"wiL]0+:߻6r>N	]i
]^KZTZ"hqJml3aȿ©X8:@x7a\-8wpW`Bxl;50KeGkVPKG
n
    PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngineProvider.class;o>SNv&FtҼ⒜Tdʂ|✌D``G׼̼Ԁ̔"vFĲDļt}F?Ff
MO 	02khh5P;0-be 
 iv PK4L      PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAKeyParameters.class;o>SA.&fvV6FtҼ⒜Tʂ|Ģb}Ԓd XjIj#Mf^f#Ff'';7#0s2R}<\
-fd*@mkFK(tj}㜟Z.s
MdP0@Ad11 C(䉃bHskIog`A HH3iV- PKW9o     PK    A             `   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters$Sha2EngineProvider.classR]kA=7_ĩi&XkMՁ*T@@͐ݺmAGwօ
p AP@Q$QFP?2FOL0o*8yN(vU̠*PIxFC}odb_qx2Fw޼3yokzǁ݋F
=~U⚳3$8 e8u]b)S!H`䟓GZ&T;tV	tv8LCf͂ݙ)AF6P 4}2v6 mTx~*l
7׌9{9/̸u{b.@BVYRyS,*b3!n^?Lec{&uohO:cXOye'Z.66e0PKR˳  P  PK    A             d   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters$Shake256EngineProvider.classR]kA=7_iMS7&ը&cuR}P
R#!IwZAGwQ|093gη؂@I
~dN`_Y?!TOIM(v{U̡*P IxF#}
37$t<>:xo"&6csl7<FGdh#;aA⢳wN-J425tꒄ)eL;uE*aGڸCv <Ov¡ed/>,md?l35qlc>1BSK3", uTxt5܌3n弜s+"xj}:V
)jJ)WNT^%GEXíyyrگ'yFh2VqC͂;p/f0PKPѸ  `  PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters.classV_Uz4 M0EE%1̢auwY4졕=a{he{JS"ӹg.3`/g>νޝ3{o EB\q<jf&3rJ4oJeRB
QAT`!u|26$]H[ܑD,1;=>jx_OW|k7[+okgQCu_1YOe~04,2TgF}'ej;Q2zL{+lڞֻ+:%Xa<оVa7׉=X4i*UC]*qymˆӰ}%QD<)CC/Tl=
sg'\&X4,M;<)-X3usI[$UCY<$vzTG"fI-mEH:yH%#4ԡj1CȲ`{P/S	쒩\\l{yOhE۠~/7䥱S4r{ƥYCsm\b/|,Uo68$0!6,Ca.gr>]1mGLWL<bT<%p'fŲRNŒ)$ꊗUOX47NK}]Lk]j~[zC^oc=Ss~3w<P_y-VEE*U20=ܿoo75l. BALl󔓚oUNy&wvSd7ajmQjyP;T伙9e;]J/]fnICߔHћXδi},T]j}tVP+5TN=/G'B˞4EKdئb*vKŽ*W񠊦c*NSqR*P񔊧U<YϩxAŋGH_C#;j߸neSiִz5ӨlZ6p︢U5#rEW4 %.\(7X`f\uũWJ<"K.3iZfG`"TI~PrȐZXilFƛ]<bcc0^zݧ.!uGM ʨ0V]..pNƷBOw8Nw~3gܷ~cIwׯ?͸o
f|+|d@ÌO3	mƏc;k/g
{0?a|@sƿ=B>q PK\%L  &  PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAPrivateKeyParameters.classTkS@=K%(/EJʧR	ILc
΀02wz71{/ !-(oZ{VԲkF5b\6eUV留^ɩSf̒;0|a,C=8b!1< C+d*q絺ʆjaE՘q{.t-Yf=Ni_uĎ^IfJf1Qr´Įj	(&
$΂(CT
 5dc5N	q_N{nɐgGPeWV(PܘdR1#.2iqc6ހ9z$6DpEbCf8?G!.rMI e!	w!S˺^ !GKxͰL*JRaXc
?$	cY 0IOrS#=LW%8dYOuoa4y+ ZFEiR\UYVArVb]"NT:NzEi!lQeo(i}\n0H:1.k*Pmgt#WfqY.1Й4{G0g)o@	򭗏mt(~x$M7E}4D4o"hl8	z)mEOD`DEwFX/s!9-jPEd|hYq ]HGG@xr?sIZ}v7vB|ȯBɇT|gQQH9oQPK&S#  (  PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAPublicKeyParameters.classSO@~mtAAn" I@I\J!ALѝcR݌4~MP$J},`4&izw>4@LC@3~X4^w@vݩԹ].=y\^Z5=!EXg\y50g,MrPnHKn9XU!1ĬlQѷ=]U*wjcOxr#Y$.1Lm昻i
+5jV|Q7=_{\:;fp#*YCU:(ːɌ>6,ǀ:?A
Ys0M2AuRIkkXn-EFe4Ġrv&F44_vjҹe`.DU@!ḾG:)Y_6`GKk"Ϟå=0[:k8$ȯ],/+4ѶY1-Ge[NtZ(*vEeH*A8M_i&&B['2;:Bj3} лeq%4`?G34Bq
YDjZJ'J|+\aYEv1Cd?@& -ȷ[L;'XPK]j    PK
      A             6   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/GF16Utils.classV[oE>k{2mskiMW<:RBHQcZɲO< _b	!"!
xE!(Ҫ9gw}%̙=dw NI/x@P@AqA)S-V3o-_乵Za64:@g7V3ZFѬV2͵j3-_߬2fsx:`jƹF}esy|9!?q^CO _VΔ76뙍ZEdp[|zl>gQ楅d0kRXnV .,	Uje,T|R2_RBiJ+cIzQ-lV
`a2\1#iݿ6X
n
}BG(;a4gז힃&8[oWil<r?xs<pQ#:&8Õ(B82ZI|&KaD;bS1SB$KĲ	.f[;:"4Ŷ	hM5Ac,#$LymLt]NRlP@i!t{qUظ38c,k+X>ҹk`fE^+ă7a@ޱ (-DC9,#J/b
iP0΃)F1Xt7@	8}3%}	ȵ[w~IQYXҴ2Lxӆ^-A!ywmay/=H}$aaj? &a>ϻCߋ%K,\څK͎J"[\6#td.-|Zaktt;f!*.9%:.v!MedHp)ͪ _+ZRt>l=<UH\#rK١;N֯N|_NL;N$N`DNپK١Ln61鸑rx17Ms~ ߏZSV<n\#9S1<eHv$Ţ%w{w!!Ns	_p	GuVN8Ka"JHjڝn	Ephg2tqqޱel*EQ&t֎A3p ~D0gۦt=Q[ϘpMvGBkϙ2%ȭ-{g
NDB^1Q6<v;/X\#[R+-Tؖmo8/PKm<  	  PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/MapGroup1.classT]sU~lvp@4[	Ұ֖@RZtL42q-7x`"w:M139>Ͼ_?p
%1@C7ܛn72K@֫^NA,u|%HP`7ZRc^)mV4ʙrk52z.-wUZmF[jyV;(K1-%&^0 bּ2+LjD[:+onI:F^cBݴ)mkYoqqCH327NHԣ2'ҷ$%cd&#\6A)o^)7+
Dju./sÒx
.[B[uZ 3}VQ|Y8'p)8]J7uji*/}𾎼\Tpn{Zfavh?`k_.qeϫ23AfqEǇ+f,&\HѤbҩ:߃8ޫzNVs5ט8PgQ9}=F}tt!J
,miOd`' u	1Y'{+3>ӴrQi}ihU	jFIC#gfRQ`ED?] QfV,}rTC(\'fO)6.tʧ߉xZOS}'쀸ʉ)XU$yo5Ɯ0)m܈gM_
Ǟ݋Ѕ<=ӁHHTQ&6Jg Z
f<b~Yn3
M]Sr42ws2{Ǜ!	>
}K%dni<9kR p6f}.sKOv wϪγԛ3vv:{7Ũ(Y34;dkhi){zPuQ?d_1H	L=s/PK,P  b  PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/MapGroup2.classQMO@

jAԄCSĘ@ 1i`[b&yG63z{pHjP8T#(p;VĐ:èŐT, !ñ`zck,Fc'a3?FbO dP;nmcEZI9q΅9t)Hh
-yѰˑb4_oP{Ӕ{ExC}oJw<)wgD	z$r2#r򴸗h8 <$֓@
VvF"6µZ

[Dte
7PKw>    PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaEngine.class9{|u{qmˆ[ -?j0؁I KdIދ$vI,u˲ul]-t=-Yӥk{?sw?IoH:=s={x.62PP9h3<=mKECm?17$\q4
AKftpxz`4KF

eڲ-d:F,9s7MNT@UP͠%0Pb'a|&,`R
Z^c1-#&%=F,u%%
)D^aMZšAOC&"rVA}ډ@rwj$%EBRv9R4a#Ǵ8rp\2AKpdINClƉhx|;1"Y:ݰ6`0à3\4nd`6e S<?wr8~(FMz={>؋:O	Dp dP,H{h8ѿ%AAqlL>V$"s$Y4:Y$fFͱ9q3D%9<GQs\EJ
sHeYF8#󖍉aC4vIc݇8ٷsC={\0'
xO7}dz
՞8FߣsY]Z<gsٶm۷l<e̽qItX4ğ3𳈋e&T1$<e>
cp&X|0Cю4-%>`P;=OGsItXЍ7H!%P<ݽRLW9<9%ݙf =y	?Sm=.5x_0	e{ݣѓ#TJgoE	/${3ݍhtC16ѫ=G}QX/s8C2*b rM 4٤cf֌1UKT*>MP-c\2v+^{xNk
=='	:a(qW8p`4X~	?=wݣ#tW'|ar;DAGIݿM;9z	U
b	MZ
b|Ɨ;Ƣۉ]kу{wm6ϐm*X8- ?49Wl.>ƌR渳s	Wǰk'ȍl(pXy7[=l
]GDӱqQ%pVƙ['x7W2̎d	[ұd4M=98sRV7LP&.f`UJC㢚ʶuo+w:p:qxs}%')sɞTfHsUjͣU[MFT2A-W*]Xb7ۋ`XʴjUC}\"`w$,@
\-1,J*R!7[
l{(0>jҚAkÁ_Zrg+}}ɇDh଑5!ad43f$w5cc-2mpa6aRq gl5E}qVP*{?g	evmlc	.h`1Cus6f|r@d[V6r=%svHζT}x,۝!IO#-]l7ns8Jxm4);ֹ>/~#C^-MwIPhrvPtwFt 
ALG[4@{ *(Ch(N+oF6Otu2Xuw&bvو]Idr,<Qx1;op11qV`)pn;^plmSםVb"09c+ÎRII+2`07:y|VX@K%lUCY X:vPviXS`
9(yk`!A\6+	6NA3)\3@gY78[Yx]:l/-zv65+AE]Mjpj1fSUcACВo\e(Ef%ɛ-hjc5!wŤT<WԳB4YC^Sj*ݏNA0k=\,PhDn'H]mzL5
9zxdizu*^s>ǟ58]S^u(h*r+!M76+
<TiǬ &`oNL/LOD<:JK@|Y8-b+YIۊL=L'HH|2x0^2s#h80`*,~
*,
X7Gp!*1\fөV|CTp]Fgڒ@8|XH"t/c~W<8Zj.TW*p(B$@T;rqߏJl(e=Pb
Jْƺ@e+|!]	Ja5^tq!"!djȰjl:>ӈs:Su4`0cAњxb׸C5s?Ej1OPSDD8MJ+W4
NZtu~܉}ͫ*3𙢅V#uӁAaEq|V@ՒG0C'#[v-?ن"4|πx&`b᷊q^qy7k\Q*vRjtϋ 6L JwyI[οt^?
XX m(LaU([ft>5M8СZ~9c8RG>.T	5	u	
	:%t!4L7.fKx6)qO/ ʱ*Exn	VHX)G*TYnVfahmGUbLmTZ<SbSG+#ӜO(eEC6mՔ3pM-u$Q@	7YmualΓp$VB{p-CFI]mcSeyFb 9#FΒ%$f)KevPMf4E^`.;ZiK,:K6i{ŽXpn+^Fh Rh-vrۖmsKٳWZ/pInR5,XmR3]TJ٥.7Kel%]*3]ٗKe-n
9Ʊa
 . >oPGbC7晪<:'<G#;LCXk1V,VUdb2>љ(A]WJ*RWhJ]Po§VLeQcOq0	#2Rǳ`*)Mf	*kPyz7*jԎ=cyʠ8z7=0n|VYdXYhmTg`G@<v%y7f#ѰE@-X*V^-.~,82R~1IJHEHzGKfj<nW+' cGDvR@4CAZzӃ6 4 tCV=a3".נ_F[d7Co·
5N)o6	mZ:1)@fP	Mm~ 7N_:ZԣbF~
0dJTbA/NؖKVo	İ4UB.Qƶtao#j85VָOfҲ2h^t<H+p"1ыex9*&/n
wOƪӆ	&#^̳^S܅q`)nw1cyg#F,'vH．r#<ed_jD}"-4WoVEk{5ūOWҭt
jWh˲ْ&a:d6#
<iq-QQc#y
.ǣb_V(hml>/wx~lKLȳ>݉ز(rF$9hYCN]%<D@q~8RۄF9=$1t>۽niׅ=LFq tVgg p2%Aꗜ&tWt-^D&C/fkyچz/է٢Nq-g@GEHLGZLyJ}B1B	Xa188$@VU}^U/ԇ{O˫LB3^}cP}>>:[u8CM+jpMOu'	e *VωIxXB@J_!E.QHqv>wZ{
X	RKJJ:Snǁ:<\*]}, t<
yXw<Yl%SX6ToF+rHIf*L0X^I
eסٗX2he?10K+Mv[Yzϱ=p
2,2`&Dk{`4;y-<EOD1PKs  %  PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaKeyElements.class]O`ڭ[WȦ([7+8&(1L $f1:b{x[QSe`-?
 @F QA!-㵡ʆe.Chz2Ԋ0"dQ(Y읊Y7[궩NZb
([
]
\풂\=.ݼBm[B/C>όީfeϐK.\0Z` W%*#SU/Ye1F50zz^uY,8
7yAXn]t*w$:/e0.c^s2Cpn:\SJH*1F_[g|\!U Gб+"Z6JxGi:W9O~3Q -.9)yzA0.d)H0?B!1K3'_"}>xLk>>1BCa660)Ę&tGD]HO!f:+~
dߓ?-	v0;Bao7Nv$ތ'M( :B<y
p3'ș_iN<{CB_V=rX߃6(jca	ɃyӏPQ  ΄PK&n[Ú    PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaKeyGenerationParameters.classQJA}vmݪQoUTŃ=HPV:;,(?EQEJ y!{!y}{~C !ҺK
CR2V^PyF5ʩ9yr@$3wNɂe
HϓIhFhD,0!OXWwJI5D~j$ОjAXحn(`~=؀8= ңGDK`5G1LݯxPKEd     PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaKeyPairGenerator.classVwSEMR BmAԴiM `hSJt@ą5y4}I_^ ݠ=gs<G^ڦ,ғ̽{Νߗ.،i'J``(E|Dd-?
ml^	i=Oj\\)ŗz.c}Y-MݭMeCMk=.+g gL(fO]G緅ʱK%8aKzdUsLdkF%ok71]{em =pd5GubX&UXMc-͸B*c ;(HmZB'j^A
^+q; S*XQ: RJBNE
Pڎƕ#hWwoK퐒&fOVKqFaڝnOǼ쨡Z; FlbX}}ӡjQ#3
RO,,vEV_0ڟR;#i^n!xXGsJh"*ݣ躜#5t&=H$h>%1/m)eX;މ]Hc7:h.k(cP/T3J.5pk
8ðSBEhP,,Ϋhb$2cXXp?äPJOFDL!"L,C2-&1	(9dBlqCt=X!E5VshH38lt(*"Q#^;Eo Q\#;"G8ή1%xT ZR,|8dx ]IcrG"bsϛ[礼񒀤Wo;B[ox^&RUY|(I|T][Zhҩ	%S*-cJWj)jU$=Iؼ4
8#2g[oqNؽsyYq	*_1\J^PR	!,3Kwc6>i-kȚ+FcMC3D
Epz{+uct}\#P%OkamkL:>D	eܟ,t$:J5H%H -#{BOO9BFkrgQ_Z?	va ~
aqcM4jP9u0+c;QIEZ$*[F~q58:]靀OG5
86k
ۛ^{YJ#mgsY`L;a	.111'\N:?LP٠	X.v$ 1:I3{4
h6t;g yͧW// ,"^7;y )56^v5
87Ӧ_&4ΚI|1/ϛ:EzتqHH PK -  +
  PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaParameters.class[Seϕ&E%:0PAM
q
ab5\l27ԲREiieeieeeܻ|{>{n= rdY" r4ЗVa_к4OhS347?ؠr Ai4h;x"pt,;ΎDDe6beD ԥFyP
JqS `9Q+0x7T@1e~xw}),-{%g5;|%=`1Tǧr:}Xm ј
74N.:^ǝ+k0l\v\jg0&jPVk<nL-6(`H͛%"PTef
D,2]@gs,3>gTmf\jrf9SeF|n7sEIM\"g-ũYS}\b{{ֹ'uj
% T[fBڐj7gU)c=ڳD7kY! Ԫgu
XZ
M;وJZ8ZؠAQ `b8fd+--Mhn	ͽ NSf̄#`b[8~[fsVܟlC`{/ 3!}=O؁>0N{ZNv*&yK'~<
؅^ ' 3!}=I㴗t!v(5[L}_8^ '&GS)(b8;aLYzO	N8C'8e2S2'Dֶ@>j$'&:]AI<#%ЬA^(ޘ~:*v<M#VqEk8a] Җj0Xh/Hs^Pry/0j5D>Z?R.wy"ʫb<HX+YXgaeu6zX.fYXYqUkY׳n`Ⱥu3֭X`ɺu~.CGXc=zi|#]X`SI$_m@/\i.`H@$-I,ZI(@Q%	Ii/IB>|	_qfTMjlM\6c9(<(?d(4?f,}Ì/fyK,uOSXֵMM !d5aAN _[;Bb}T~3'_8N5x=?rt]m'[\kmQ9PՒrC'K9șLrr*QrI9@s'g61ry\#,Nj$bEd5)JYլsE]FdqVYRKȺRQ
T&+BguSjLRQZMigs:&!:EɺQQʺ[R}_u;YuYw)J5MֽR}d=Oыu=Hdq#d=(8YO*JYO^⬽d=(x:g|dq֫d(Yo)JYou\w%3Kdqd}(1Y*JYEPK<t    PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaPrivateKeyParameters.classMK@ߍicxKЊ'=)K	IlW
Ń?%Nh,agwwf@G:hP
~ƾN$vE"ţsoyI|\rzbP͇zWG
5c
N1asa^ulh4PB>"?8}2w7q$ʢz8w3(U[N25.%¨.5:SFդ6r.!hm%	ծЫ+('U9iY
ءyvɗ [70Eted+D>D
)QJ1~ PK29hVV    PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaPublicKeyParameters.classMK@MӦ-BROz(=S.%&q
W
Ń?%Nhagwwf@{*$d14|10{ȳc
#7KXlp#<n'>q;w<'`zGE%hqͦV2dm8лzU2Vj(p:SU?Xm2G=*J]^ia
j03}0CmT6QGS$WMD 3Rz}[q@KI_iUN@V=6hޤ~Vq
eq8F	`v
W2yE"SbOݔ(D_PK'IW    PK
      A             8   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincs/PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincs/SPHINCSKeyParameters.classeQMK@ITm_xb%"(B"Hi
W
_Bfgޛ`c
Xb,pW(=܍H<*St*u2oR˘a|}Ph[L-T`1-FUίμb(X3ߓJ3/ēxܡΠgwo!CJ@d&M2TgA5:/FP?I}=7KZcQyl
˄rX!\uM(16ߠZi＃` =4 UF~PK2>    PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincs/SPHINCSPrivateKeyParameters.classAK@6Ijom$bAHЃ=qјͶ((qZD{3f}{y96Lۉ
y2$WP'<^^Ȭ+Z!ơc5NXHiN
\?N#F@)6ˏXk"Qbp,־١Ђ!7nbg0IzH5
-GPΠUR'ɞZϰQC'9V2JM	| PK,0    PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincs/SPHINCSPublicKeyParameters.classKAƿq]W5LtSv(yavmv*(Q
t>ͼ,Y6r(D2"1ɥN&"dNҞZ~P\[Cot{<
\68MLEJlƑa1l%(37ֹR0!3ledZ#9	L{4[dؤhL4u6V謐Z'=/5-z=0>9`/BQ7P$nFPKQ;</    PK
      A             <   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/ADRS.classTksT=7vQMm 
WJ帱Eta ~^YvofJg٣+_g 4H!)aS㙡g+㧖2,u<'ǐv!1rx4еObGWA`Zj0*R%ҹQZ?2,á12!^v;idp9+6ɰÓqaxcH'XdK5dt<8G㜷$lca={F6UzG»xXR
&R4nf
9	3d_Y;˰knFU]e`Jwn("58de~JN	F17Iƥ
1JwQŰC.HO-nkbŰvX*?扬P}ԌtqUKf+v%hEJ\uuu-º1j7>%4U*Ї%kjĉ^{U˱YR5gL>}4TWt-cȐ68(}`պb{Ažxq;c{E>|@Xo#w)9/%~wg=5aUEg+eF5X:]ߕ`yy?
<1m|l"mwyOgX2hŅW
")ޘpP9cK1/1!c6ȋxs@skp5|3YțE@jO]lSdmd}Fz}Eey"RF =aFp<ѫ PKjdi  m  PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/HarakaS256Digest.class]S@ߥ-%WDѴ (At{t[iC=^z!3|:xr<ixC&3'sr= SX	(
"hfr`W-sO"ӳ[s-=Ǭzg;|m{yްR1 E\A+_%e>~s1\m3$QlA;Ck3;tr%JrQ\fyV93MQ[V%mAjXNU:,[VlWr[ZIу>~nm/~MUmACPBT.CS~)a\ↂdHZ0ĸn;5i¶\?R.?~.!#Z~ⶂQ=6O\

q'MQe<wH5ាr v.Yr,ۮ!*BR:o-5l]3>zS䒆am&$wsgLZJ*O
R9Ty%RUbQ/M#tf$?T3femPGs0yN&OYJ'I#9rIHo: }{|Xgp8V3LESǸVg3n|G0CNe5=z[!'cd҇fN~WD]llʍe
PK0O    PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/HarakaS512Digest.classS@ƿ֖J

/hZ,TP :SymXJ Mbu>
G9QA|!d=C K	q%j5y7+nV?y3wM۔zf	I4%Ra&&#<kkOp60>%(Ͳe͑#9`+@'p60+$p6e2r"l`4;]:[iUܶVq<-nkcZ&B.2tEvy*,\F~chXO2$pU 1G|)*MxpC(Yi[rYIQA]AYq}m>ㆂȞ]'MzFa#A=tpc'):Q0OCl٠SBYe3VeWH3'E@&W
.)6]ye^HN]׆дEk-SF;o ]D	qJ@1!	3nGZ(2mh&TFT,(0C:Zm$eWI[X{ș8ĉQ
9}H!p)dcNl,:-}0jrWM`0vywj(
0IgswNhluKPKk    PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/HarakaSBase.classmX|].&Br &{;]@Hx%<IwVXjAkS+Vk-ZJQP**E?d~71PʃRKFa$	H]]6Tۼ2RUC@Ǝ2
HPJ<cJKM}̕ϴt>=Ų)w8W6G޼qCᅸݷw#^܌/l:V>s|k?F'&{G/v!~I}?僷us6^7VWMTܝY7Ȑ7҂{Ň/-<W?*%)/s{1tq!Sw 1hN|nFDi},8ܰG=7,=yeoZ~ףrYqw,^$2>ƃZwvE;VURnxj/}8z`|Dzӈ'=7:qmy[x]Ќ/5uK{zxŮ_8w}w]_uǶG/(z"-{]ğJ|y[o$Z8nRRJчo9}/FRDٿz\ۗjD0Vw3SnٛN5n8uoo=_ZΜwӫ#3|>;w]٥{z~w{{ӂt=^zgkW}zgMɥ+.v<5vOmq[n:oޏ{/9wetœ[;wN;?x_|pC'u>k=ETҶ2R\]_i>Rio]\^Vvnym{T:*ŕ2ϙ
6^~R1!/zV\r̋ -+VH1=E/;;"jja0\hK#FPz]
SK3輸h'/:k>C]îkhpqe@?{>ӻcUw/z%E gog,;ڛֵty9ݾqEǜLgZƮ-MkM/z-@h21C7F}c7FDh}ː}վBXE[}[ ~Oث:;"U@yL+`Jq排ӷx7p3w'z/D$^!/7
^!KPڷ"f٬0k\\"\..
+.D0~𼸺E[.aߐ_BN_@d@sz& B+bȯQB;̈́W)b+JaznLF]r*\\9.q.s_r.1dk28sL9|pmO\	'fE@&,ⶆȞkfնΫk}&6PQ[m
V@%c*(T]-Pp0 ><:!H r=rC)
Z?48]r4CXCjCijɇ2bղeƪʎU"@@7(6ZLs`8p(^Ɓ6rx qXāA,Xj
 JIX	8'm4 I`YXŁp\8^@%	x.Z
6p% _9r
G#md\ϐvsFđ	F!!Gđ7s9Ff#ʐ$Ñwr9K+/6HU~rԉGC:HKIҸ];FGn)tk ¥cCzѤ FCX.Ł5%ҕf0jW֓\@\.cSRS&|g˄gʙΔ#Ug~w@ET<XdNgk~wFΔZ!Fׇ3HEfKcdwi UӏNVqXT*nalSF)P(D$ˡrߎ[+2~'08kS~g!Q$,daV(qH!"ahnWzѳ.]&2EEL
k^eZ1u?."Dm2p{1#-{'t3^Bvoa&#JÄ궹mg±}PlͿ|mӶ7zliKΟB}ժڋ"}d!'Є,uEe<Gf
GKhe'!cdH/_·`0AXΆvÀjH.1Oa<[$ףÂkx,%TƯl	
A|qhH\19qqin\qvaa>t*!-bYry(pKv!þ9HeAhBAH*YH(jHHHNEj6@٠Ɂpg i@_-&b04abV[A.fŬ8B*jSʜ9禩4s'\`8>BNqqqq8888@S~bA\q`.vPeA^SxMWiJLúIak8Ke"iM3FL}$ISw73x	!}ĝg$S	&>SEF1 2o~2Ӂ4,'Mm$@ Ӏz G(I%q&^RR$cbX!q}Ǥ+I&Ɏ	%U*2ˈJ2IhRf꓈N&z9ˤJ&M!<դ#O%	eBrM}:L5
 z%N*M} 3L2fid&STq=FbLy
خ19d#s>7#Sy"0浦,$M Xd/&0Tud	2l( Xd1e (
  :I5 O "<-!gbӸ#M}))$Eא+Hג|zS'!zN.7$L"hW:`dYjed!KI7#krԛI-#-sԯ'CI5tU94
41f#i%כz;i m3E1e7ֳNd%ig:K
6J*M"]U&UH6Ti.9/C
5*t,q0*?[ZU( {".s\QĪuVԾǾs:Ia
6#9p
J^ttb,^
Z  A(Jg'~8J[&x&]
2*q3̠ͅFI<懦_̪X6!X55Q^G'q&m9$AkΓPJXM&@Ҡ(ICrmrUYjXUv.t-	\a`HH ܨ2iSܙ$sГ<qw)#O;¼J-(~!K6G96XVFqz.6VN#y?=u 8u8u:DDDѤѤdFnp3IlAq`>-aX&ep%l pj,qH
-(2ooE+4\^8_MvCv2wotOoa̐!>a"ʙ0a*@p38Hp	?;!r¿	Tr>%.".ekx6DP..
	g1 ޕ   LtE*k|nZ>U,cX>SJQCkjY4rFCQH-: \
Zhu@DCRc:2FP!t8#Q  aF#-c\>kGBN)-c͡jXMW3OCVh2ڨII0:"at&
tO'83i3]E{,äMtelmLc6j1#ꖱHYGteȎ,c7	ݝ0n32vMwӻlqȽ 7aGXF(ﳌ	!!O>x 8de<J{0=H#0xbV6D(R9!JS 
 tzť>2	c6i<'a0<7a, /a,ࡄ	c)]DXQs,JXq:,t"gOjOJ:2ieie<GХ<G[I=a/)e98M-z2^guy2ӳ5x-mzѓ50ݲOq~F7-]zmѧ@1}<}f?EEߏA,(ӏbA^1W,(OcA,J|+\=<֋f?	|Pf&T:YK
IO`d`O:ڐ5{	l|rvaa@+aOb@d@bEAa
׌tV>5_U7#&C qR	
r	.R/\t&saUr!B	Yԟ,_XhA|X0)8m9r6)~PzLC@ ch[M	^y3TM[t-C8sDB{Z`D``0c$`$ȌQQ"ATnTUe+L8|6"S@iy+33N*cpOc)zp	2x<ql
>#>#I5|d.ُV+G))@
eFޚPfEPKq      PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/HarakaSXof.classSKkQnf&ƩNkS_$Ml|TV# +Nh:'S1	vRn\(*".7QwXϝp=|;߹_0"ǹǯ(d(*TDrWΌ3հxݯڙ
+cyf굩ckՙz_u!|T)<E+Th:!I"MpDiPhMkëKт]* X5צ¡]٫b](
}o#CyB
5#Sq|۫}u>w\6-Q*P`+C y"@r!AIjL
)IcF
d\T"bFgЯ<SN9Sl}pxrk
3qrpfmÅ,ګagmA/j*i>MѓH_Sf,ܺ~񪭊F▉O~xUdY=t'Hj&rLI0R#:|-K#ŠicM[0&wSSbse؋""b~	=nzHTAtcWbJ,<bIbM%.c/0p%M=87I(I.`)Qw1Wec@㡶#1D6"i)|
˼XtwN!ˍ0*ŕp<C?A|㯰7/s_G
`P\tIC7z{PKMCW    PK    A             O   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/IndexedDigest.class-ON@#NU"@4tiR 0,J>BJQuV3̎fv? ƸÂp!3ie2&t&Iԏ{8EC_0X.u*CIUn:Ud*u%LIl*&zZhf?X[\BNŔ
gb:\ܳlm1f~G>g$^+ft7(k
PKU   $  PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/PK.classN1n@51`hi(A.JaJ
h\Y>3H<EJ=VZj43? +LphCN5ERfb{8):_y7߄|Pי8K)o21MDuBַTǼ*.F6(8.C#kZs78Z֩%Wt(f3o/g?/\>0=/PKk      PK    A             D   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SK.classn@DgmLlPtU())(h\ #˾HR|@>*bV3+=/7ǀ^ӯTiqUɚ0xϊ ~'=|:Cs%ju]
/Y!#vB(u$8IlS}6Չ-8{Qa΄
0e7YVPK|H      PK    A             a   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$HarakaSEngine.classUVW3$RhGֶ!Fk"E@BEV&!&1k^~kR`UW3t{29{ׯu AG
^r,UZ*WXN:.ՊB\\r1_-ǒ4/9;+=szp!\4zv:nU+ypK9
xChC 7n-J3鉽s=:GrrE!~7󎄉#+jӗr{nzrޕ85-A;8C@d@#3IVJв8<%BWBzgG%>A
*ܷnH|d)l+OVٝG3g/j%
*2W(|<s؟Ir:!
#(е3`d՛.kSd91kHH\em[r,Y+Wk~}O 6JΦ+T	ۆ+`\e*y@sS(qqe5peN$_H\s1uyGҢ
Gg+4BJCZ"j쑝k6mqG*|,{0Qy{1ZN6]@m	;lAZ]gy".(%)PRKɎ
aehKVW⬕g5>Sgyo~AV9]#Ve&UVq+)F
JKQ˄mgKy\^[mӗv-uVz'+$uG? :j/h\U}Pp!i`>r0x95@kGz'p_%cgx_[}ARD~BïOTu֣^%U~F;ц>Y!mS='?qUCM'
w/V'Z7Q&F	:HEL:&lYA.)xC9ԭ7x:w2J@[ޏ{h@/q`x3q6S|K,6
Ҡ@զ+	ȭ
<[M,C n.Z>i;R0]3|d0:ZǉGX?$
dx6;Oaxqwι%WC(trz
USݪ#<vQ]Ծ2Xt{ĎE
|o]QI"7_s$֞G">'0S
չH=lqіGPKw  ,  PK    A             ^   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$Sha2Engine.classV_[WI8KԥekU
$1$];^
uKr	iC%uSk7ߏ:ucj%@8ϩ>KB$n{{~<-=M]L.̧c1-_H쓱p,-dl2gSPt|҉dZpv'Q\L*p	7	Ɠ	=_ aC@-n4Q	MY5ODGDVL8]؅
{>.А|<ne|{Omj;ǟxms&njNC#Z̃8ȾzH!;Yb\bݒKA@VzZiL.9>ַP< J!\bMjŢ>,цvtJ@D|Ҭ}=wXFrXADK%PxGyMD8?z$zGY5k
?\UpV>ѦSz=8X& p߲SULKF$Fqt:P3c9=XЄ,cf*@c,3y=;pz\FmQbfy	rZ.3=ϕ#ypS
4iP^6׆ߛiyX&#w
H6c%fXg:Yv,ۚ]+՞id\Ha\&e,4`dN͜	Eބ(`-}I+Fn2ħ$SOK\3!A
ϲYX5K|_P/jpLpk53ZÕ
/BW%_W|UknbdێdX:L:Kķ٧vGSlGt\K|NDɻt|_ UCj9m.>/L/Ԥ^,&EpsďcD>B[dvVϕL=s%͍jr!8ԼW۴8"f+^hsZ!I	~Nю=ja	
V$bU`_W2I(I=8h[&8SxkDNp]R
DHk9F)GM؇.PkjYRUvѭ`ui˜w 	IFF]\upD<?v)lt#>EjX7F	FzE}{^U ZW]{
v
q_DW{3M%<C⯬."Ъ,"|GôQ3*>kk³a Gh.~Nݨ{	4wePݴNhB"kJ+x&6BO\1!Eo9eЦJ.Y7H\]0ӭ%Lvi5/"⣖0W36<dUz
g)[\oa7?[H^!$
7L$r66"t6tye#jtWvoFF[K_Mb?]pYUR]J3ùu#i}uyk\wMyS׳ߐVFf+v9O.3"w֫.:|
{˸k-K47Í
mUy+xJi6թȮ"MxFoHm+vYv}f-V2	B`)bߔ١̓ՙ&7zS{bV&-U'IGy⥳%WdyEl5爭1&,IhKE:=Cwp<U]AZ'vUwQ)#nMvZ2;,-ҚXūEIoK2u{;X
(5Ę!qReRgz0U7NϾA^?LgڿPK
    PK    A             b   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$Shake256Engine.classVkSV=K,ڦyn$@<
Imaɱ4L_3Τ	m:IL]Y3jsv
 èkhCHCFX[-rno孚WSTUTQrJ^K--LsK>K-+9%eW5> P*533Ab!D1:bxC`^ڰg;z5jMVٗᮏ:NmӪk..o-$ni4}RG7z\Jv?Kg&FW+Yx[)f;{
NxtB8ɪW
G*DoL_A	E*	m%2>ґ^pJU~Acrp
_>#Ǟa뼎5֨1ߚf뢎}kBCY:&0)k=Re)j)Uk+Vv5i
L1#pr_PuTN-XywGTt
%Yvg]H_	.Fױ/xl*6ySڅtt 븁=p"j휌E6˸հ>_qm/T*Xa!w[MC2W_]|yqw4'qu	vjN	D<JlʶV^ݬQN3	FdiT J;78<Gݭ&J-oJIn:]/[g&>ڷmԉ:ШApK:Y04kHl
)3(7)=EW{_мP> v>|#c?P	:"Ө	l=Ƈ!~NťP\j1P\&3)z\~ܸKO9+Gc8"Vhƥ'd$쓆Cpgd(yd=,I&ͦF&\htۈ)k1f#tVN#\H+F8JkFd-پ?ЮJx{ =r\F`Dq)1u.=%C)|ùBJ*;y.3bm>3,12m,?ŭGqE%qD4̔Ԛb'lR3NsE%kckŖ7B}%$VlL6lv+α7`1 
ߒ~}6͚pjAfAPK [  _
  PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine.classU]sD=[HvNqP bbMJ42"G"I0<3SOg`Cw7
N)agG{Ͻڕ~_,`;3I+H ɐ}j|m헶vZfȐgvx!V(vRVp
]vk>7 t+dW
kgf7i\sk1M<<WKmo6gs
&9ξ -Kpc\wqTprځi
Bse\fX2
Bu[?7?#~z0{MyFQߦ1|1znؑ&åg^tFP:$	UyIP,iNG5p@|ogK`8)*S0+
W0'@[Tp{Rl56j`Ih3#z[C7;Ue
&-{L
G
ъףC0mt!Qxg4^3Te}pQhJ
gXݷkwꛭh-(QD%4\W:HV aaԷmnƞݽ	_B~zq}س;IHGWXY~[h%!a^|NDVE8ʔ'Ӯ Me/I#dK]!˝j.8I
g$<_L\z+MуhyX\	&8)>ҦFxK<nhWGx[˓JQS䌖JZ)SS-Op'Z:_]d	2;l@.ɥRqpU	|5o.7rMOt6YPK*     PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngineProvider.classM;0 }E<L1&$6-$\x(cox&CBp4NOjr7`iS_џTZΌ.\`۱ўiIom'x H"/1~!Ha=W?PKLh3      PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusKeyParameters.class?K@ƟicTNZ(
&9C"8o*bN Fp
AaT9EfBrke+2M]\:mjJ=ܞ3,?@z?`RX>IIJqo|J.n2$lKF4&Ճd̥muF[qLt 9pɡU(;l\#G``O+CCRFډ_=oPK     PK    A             m   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$HarakaSEngineProvider.classRmkA~ּl7ڤֶ5jV*B/ A@~\.TQP@
~>;33׷ YאPd;v]{#Xy	Ck\_F	eu~A8
ύ'gE$ɑxd<~o{t{ŭ]:T/
(c1f:
#9.0on>jf	,6af
N4-fw3
qWPi:fu939zPTgNU~/*8V1c_eS';3+e^	K.2G]"
s]O3\ΰ6+nK0FlI+bAZK*XOdQj )sK<[(w;	jddKd+dKl|~oZ#У(PK}    PK    A             j   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$Sha2EngineProvider.classRmkA~ּlڤֶ5jVV(@A~\jwJ<

 8T[\xggwf kGQ2w/o'Oς0H_0:**r.C0Q<,|/I'ʞ~m?>LA',stv{R'{PqtULh0K(.;\"蛆%bPkkFyZm4zuM7^͑\J-ԥk3:ǎYC/pQb/*JLI0<t)pPŽ$*OiRM/|R+4Gax)畜rni@Y!Uw9e3ÂleKaYZ*gX:^Č$bSnwQ5wle*a:IY'w6bPKگ    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$Shake256EngineProvider.classRmkA~ּlI{m[5jVV*/ A@`].KrmwJ<

 8⧸0쳳;03|`+G^"ұ{7ٯKOO1ڝ2J(sT.B0=gwq2Qg{4	x:/Nf;~=7rߪDEq?vOރT/
O(ef1fG:%,}SX675
5,fن@ðͮl6ʰ?_Z^*#Ǭ!Ms']|7*JL#ډ0<mw^Ν1p@E݉*Kwã2,*^eG3\˰~CW"ܖ`r#*|iRJb]Z<EbhE2[vAٸ[_pJBJN<ǵm#YzvOPK&n?    PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters.class
tUo7N6/il-mҴH?b7qݦۤawSRETDŪZNZQQQX{LvLxsz};;or' ,mAH%]XqCߎD<'PҒL%s+M0P@PR`y:ؗNwc`qxc<{(nmO١lcs}{>w2\"%
TuvrDL@QxJ
2T*%P-0!O]DF}y,nk2`r S$jQ'6)Dn*f'>Ubtn8Ur̔suoޮm
璃bC\\<~@kT`^x^
RS&
gqQ s!+F2NфKTb1ԍ)ZgW,>@Ndd,Ew6lY"e<f,^x;>5c`G߰M&)tdǚ.jZma&7&5ant7Jh盒J_թ~6q__)0.Ʊ76NW
\^+'3zYKծY;2eM4&͚5_4W|zb5-^듈;>|%i>=v˧	cCJ"͆V0Ihdɜİ2I5{c0&k52IUzF9&qTsR]n%9u&)qCU&H5%nu4OPo6ps=7@6>(q/
;/J}an~T.39p~^ݩ73Sy}nyg qt5vc8vj1mWul9&q-AR5Y_xrKp~a#:-U~[Q7}/ώ%X}?Y5%t4[gtxN7s5kOY-K_ʬvܼu-II<1<Ls. ?_]&=$^T$ډ:&OKnύ_IY#Q׫{oɝC	2")TUf 7(EǛռ~CL񆤨py[SR[#dW[l:OeT)^MxK1S`;[9h܀`[v:c\*R4 :}:1IcSnN;d`-Jbd:Exhh?
gm#>0:j̳"R j>nr볚R.t<WmajMQL;SʴCEa:ө%>h_GstbwoZZ;ٙJ%2탱l6A{Ԧ(|_ek3B:ӧZ>*lնmMښukmm;lֽgOJOzϧ:.T#ϜsspΑ9{UZfkmfuKދO4FA+JPMZJ{G/PD^LͤߊH#G "!Yp呅PjQk -DkX,M˭aΰ4\qY3<Rfji̔99>mKy^ap*qXj;60"kVC,SJ~=#h)
OM$4+ߚPZ9P $CB+G
PԂ}+z(@T83mQ굠UJCsBG2p f	BVv;`_(
bdU.`Aۭ73dw;,@v{tC7;'[;ۼ{ݮ1aggAw*c}܂\Y
Cv|vt>,ȕSzYCf_(
aKW-@v+}Ӂ<ٝTw1:''~:{=_3ggA{`A,Y8P>;z^Ag΂^Tп峳3U	U%c	(,`EI[DTX,lj-ll¦+l3Fܞ#b},~ў"=&	E{ў]IBײ$tq7IH&DwL0q7DL#0aT8JReII&8IRc1& biZHL<KRoy&^$ftSIfd)&2$٦'cY+-{QoZGYpL\u9/;S4ѵG+=Vpc_C"2PK-b	    PK    A             a   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusPrivateKeyParameters.classTiSP=.JPVZD-P@)eʧB$)cΠ02wz_
2Lz{w CEP GPBaq)ȫV*Zr
]hTlגKFJQ.Jn&0h+9QtWwJᑢYt&@w5X
	F,C p\`ZVeC5r0jL8no5vYf)n+1ԬYYz)fZnlKu]sAZmC'!!yd#e.	Wp?ehV蘍eWחȥP_Ig2t툊3pZ\I'C7M	=,WJ@v)4ɑ&#\
HT%]_#S'J!ͰL1Lz`HCa_4O$<XrQy05Ǥ5,P-3LyiDV)Ik5)mΫKuՠ٫dӤU+^FqO0-uDʫFQeAP13Dh:-.@NjtSCZfqh,Jv0I3~9>Σд|]H=
Dp)
E7ŵϸAu߾O0MmoDqs<cV@dSS
`WUBxGNQ
0^nLR{f=8#@k&jjB
;BA
J>自C>DO PKi-    PK    A             `   META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusPublicKeyParameters.classSmOP~.(/An^ĸ0CtQ)mm5MI?J=,`4&izsss>1LhCBARC
3~X37g7l+.7i@fl:n=2+姥JE([#Is4ürbMWUѡ@	aT5.FeW3Kk;m807\ַxCWW}/mK؛zpȣ"X:⨈,=S^Tы>5\e<q0TeW3R)>9 BsR0
2<94A[P<vˋu
7`P"ΫD܋R{TP;NH!}!5X϶= axlr&jD8W)p",{6\Th2f4
 ǕW1Dn;ϐ&+Ev
hWtӒ#M/PdY˞m׊..s&?cS>]`?CR `1ۃS SrQK,`pvM4h4@uKP{ _PKr    PK
      A             5   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PrivateKeyFactory.class\`T>g6M!"*`P	PA$
`7KdqwDk}RKZJKkVM$ڇOk>@sn@wfΙ3y̝%3 A\C(v܁.纎m'w7@o dzOrC]}~={#` 3{CVl
tG%P_적n'"L-kHtEB@WU|0kT&7o0Eb	gT.gG/tծE!n&n
5!ה7dAZep	gDhM	;SFХG;!.3؀j4,ؑ 3aH(O{#Ag_3ѯr{"
ҍ"β1tn!h^w;~NzI3=Ty\틐uB)[gưd ܨLB9ESYgf/(N0aJ1ۜ$8a!4[rվ`vseDNV/`pIX#,9$YL,H;LSiP)
.mF7I&ýހ'x	>,=a\ank>l4Mif
V@MzfX%
X0:'[e2'qXk5hxјy"z}Uc#U$4zpUG唕װ$&aƻ6ip%KچP1q@#+Fk8j	-gi>;i
`O_okHMhhJQ~b.C-9u Ldaػ:%ZZ@߱:ثk@ʬL7jM
Mp&x%l	!Ȝ]v
~*[bzZ
B,t}mŧy;}][->xK;v3I;bfcrA(2gBzh(J1̧>
7R,v_O$EdroͰN[N/p+O]!8Dy<u[[ȔVIOw5Kҙɹex^c9ɎAa#xN	6vx5VhB}}a.p7AAgZK7(ix7@{90}F½pFA״:NI*ޡ(m4մ~_`Od
\f;ȞʦAcpQQ44/#\q2 ZxtuK.WvxJ43(+
1O	N{B`W9DX3JBod0gV:[N4𜄯7Ha_wgL2EFwox$ ߦR_ 
V/d[<yհz:% ^^!\x<hFnR+z
~<{.
3ddP(2y'B/9z=o	q!nw6'Ge@(W3"4q,5Fh-~`_jؿ*ePX[g+YSt	B8SҤi8C6D0˲T_	ؕ/#BZ.x[;+DUzD[M\=):x%'5pD&TQsU
pRdi
8YKGSS
;#4] TCHwkZR:;Bf:KЬYKGDlFH
DB}y`).8}.ܝM-Rй ',9ƪw

HtYሳj[}
%3E3\k/k.Z"Z%2
cw)V]7.kUr;VI~IrDw66k4o2\j5Xpy
6<Gq56)xnyޕFejSd{A]af`+
c{ͩs}FZl0^5FQ}ӴFhڬ14I\)N,T
/Un[E@u~i^{˰َp$^m)ڸ;b'n
 K
ݣyܑMHwmL4br$+fV}:꡹v?m\V]؍0-;ǷsW]-nh%8fvE۽R[A)	'̐0mOK銥`nLK0p'Il)uڎK|7/'}37M*眰ߜƆkj߫᭜sw98rNb%Ƹ$c%2v2vg^Ƙ1	d;8(cd#?Nm(`{c?Z|!%KdH܋B(N5xyCR|ag/ʔ^v|~F{9M܇0;ņzSIPuY=@dק$wŉg19e~7^o~v|ghΘCV<'K@8y7cl"_ozO`TAjz8!&_`3a\LGFJsŴbYfYܳe\|c>~|1z{d.*|muh֬VTorXZpm
]-Uȼx7GrPs%~@-CӷkafML/$ J6T⥫_"T}*Ɏh[2~Fiڎ/ٔv20Α$lJA_T+׹j-ސ]oTC?_E\pv~m]J7GJg6뷔-|O#Vtjfx\yzkŊ@)n9eb\c"7I8."GhG(=.'CDإǄ@Gp1QB1f.TDqD$ցQDH3Bg \%1Z*I1g8KgSz3.=\r6ۖ17Wq8A>Uۥ#v1[X9i_y1SyJO::$sjN=1&Ƥ_+<O~ꎰ	WH@8R S5ܘ ?bb7gjN5Q*.b%blqKyrVJQ%4vФH"bZR\ktOHP[Z}t){!XBL2ܲeX-E=P"-J{qћXdLf-KD§@yy>77
gMR\ٍ$3-x\۾	M]-ŻXSy$+fkpsLPvEMx#Y]lD;<h$|T:zy]IZ;z2 CH|ֵ:">*F/(E6*zp&f1>X*RDD-:c)p dM*֙1_xmQ]vRqQy;'ۼIܬ[87̘kl5,Aw=.vk6iOFr H?PJtVYkfFt?WUq8BiY}Vic)>u0.ث:aq5YZoz>x<:f>~\ˏs Wq|bpԽˮcV[-
.^xT<Ρ	NCdSŒrB.%h aēJqPM~>#Y5J\p"fa\J<'>z/%Hn8fH#w ƃ8JtG,qyQĸ0AK	ޣyV2јzEcn_+ob%@IkĒB'y&2HgR\*O
e0Ӆv+)~5(F.~+^^ƼCj7BEuN;tuߎԗMj:id)SV4bbB+ BŰZY~w"M-Lg5r$Dh_I.CHś&Psޚ8ؑڋjh-ܽz;Gɐ/ҙ7![/Awzi98¬@O #3̷!i&=4${/RC4l6-ǖ$^ehaW%أ^]?_m\t#Ul4^ݢyլn*>C
=zo(<dU8
iIQE3T۔<ClgL4+iid\R83l	
?et͝;jP %O T
겹aڦ{,TCP4ӆ` EgQX(^Sw׿ĸΊq2QspARHtEe
v#	YΣP0/
?Da8gjۨnD-Ca65ʣZ9[M{|\TT)|v6UPue=2ב{(T9ཎ!@q>|>'Kw{e=V8r}{`#g>\ʼaxGyQxCAxz1'᐀=PJì#$n2g^a',ϕ$Dd↯9r*Ohnwn&70cQA!*,xP"nUlj:h5[c\nuѪ[ZtPxR1LXYCPPj=0mW2g`
uUJ7l)9zCJ͑|7h",pDё?{a*[(p3 [`T.ޢ{.v:b%Hv\Kb0lZ7Fn𺸭н
ݛMJE+mVnF	33a&`3Zƈpwe!k{
?}MC
M;_ nJmaas Q\}^3L8EY,>UĀioFr4y^yx0!ۊYF|.!z=Ty5ccc!UM
d6WvsI^E졂c5kplmbX $QHQ+Q`Jr"n5U
l@%!q&1J'uC2wX
ڨ»?()b_G|]WuMT49*\Ctqyk6͖CPŢcHt>#:ȝrb[T6QfV6y@\o7n%7ط~ľ}8&Q)~&*gs||T|_/?xX>}X<D4)W"Dr`sG^f<goZ6zhar[xePiy/jZخݐ_ .,|,`ŬcPM͇A5&~*J<s4Mq6]y\}̃Õ iwb#0(4+BC;4Hr]'7R<geT9MَަysMaG
CD)<<PCq>&Kc#*(.-5MNM1r:8w4ӦCϡo`nrZmH_XcfʟĘ6ƘMF3$sI`QDNH|fpmt=`既f̝=$~Vc^hL%YPYcT}[_~1e[* ]'B(ڊ@M櫭66PK   K  PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PrivateKeyInfoFactory.classZ	|TW?e5,Ya)A6+HB`R ^f^2CfIg^TE]
V[KfijkZZbEsޛKl|{9sO^|4 VXA<,CBylɁ>=KE("WlB!``HP'8p
S7Ѐ^#+fe
6.5B
)lE8X:16 d^5uP)(&uUNEH?
kbSKXx
Lȏ',B	
J]^p+UBE0
0CRL!tlmЭ#XcZaYF˒ʳ/(Ǖ[a2̖`Eܧ!Ei)a	?r}VD(`!\$@ʖЪ5=G#BczR:԰1K/]|9Bg*ySӔm
nǧP"T"Td",CXd^i:Wla%9ِ eUFWt[
V^k˻Y
X)_;sf*km߀P;>Op@<E5rhem(fD:^:Ir*IN+4BlAPv#L{!3U))jczoBXNo
mÍZMv	@By& VBTKܤ뤐
IN ׬ܑ#v	vN!Ufb$ɭ%fVpM	v!Hd̎6e>H_[2^2]W4wɾ]pxU#=aow^>an/7lqLK?bU#dCd<0o\J0&MA(%W}|8)Co֧2螪d
[%Fo8u%ur#՜j:d$x{|V|Mqsl"aC<lw4:)=w0"DH{$x/J̕92up 	RL/ug{
x]fNana(s̜Kp|8ey*9O2Gl֧Sw)&sk{5!@F#|F}S&Wq)Ifؕf9@!,Mа#1+	ȣɌ
(tIjH$ Ǩd%8ɘ4B5*>UįH'D		񄍜q:߀G("e{>ϜԉkwϹS9pIqJZٝ'ٽ^f$]xҷ(PD4(>M	~ȫ,0nh'LO.w\~&Y
ĸmoqj6/}HkT1	!@ͪT?\v_7f+HC:<,c-l=Z/aU,daWhԳ
_9.exaWWͬݟMbdgxo(ڛj><mZf%0E+4'	1GqVܣκm4\d.@4`^f4`(
Zi0G̍,0Mn0%,DIyO)(҂dj(ެ9U#Yp6zT917Cpn9aBeFD4Dt])Uxz/YK$\jjQ+Q8ct3}WMm&lb{ne4*	WZ컹9bnR`<M=ҫB9˪o@XrSS:(#HX6IZk:N<TW$
^jkkVcD6x:u̓J7!4f0B^
nL	ncyVlMnSCed6	qBvӲ!݆F*6m;m))"=v#{k7µY0M	wuO+{2isd)4V܍.F"{EVd6ެǊ
z$i͜//n^NʗNlP.vKjnh_jkM&	(#oV|62f9p-_jD!Gh(ʾѢ;7Ɵ:`މМi&wIn|McEheطɮy<Z:'OI^oo9=v0Al?!+zf9<cߙ9N M|OPr4&XO=zl`Qk-3h1~"HMUGYe8>6nNqEr3q	X$2d͑Lʗ3<Ŝ17$DD%*>Ldr$L[^9f,v#
ލv#Ls-AoҴߥ`0_*/2ާxo~A(5;xi4>#a<pI(V>@J#qE9>>D`zo_EwQa*4xÎ[ٿ]y|űF"\hSd_]oO%K"eA,[sŧ$
>0CٯdZϭSPoQw5;3^F' JX	y(K	,f?GQl1ݬ"Y¿9/ۦr2
 _o2Lܯ4iq?f%&
sx^¿'q~"#Wֹ_^G(N۫/<ڍ(K '}3,{(XecVJʴ %'ċP$
ִ;;㷖B jM	7Q(JMɌ!&Or_i\[[9dbOt2pQESO0Av\|[am	Å.9VJ5eX(,D3>#n>*P\ \e	Ea	ua)ub3H3v6^+7E}Jx>NI;G
JrJH)(T",Ϊa~zaX  =(LEE0IMw- la:],ԗ %`
[LQ(:	SGafײEa^QZ>
U<"p	\7N\\kکu5tTaM~^uAi6KiZ[~iA'

}^'`ð`mQlyt'^ߨXwS5eg0nb<Ip#=FDJ`nw0$ܽ$?
oaɺ%~0&sh̡;1zU>(H{Gp'7ɢ52֤|e
C*
ߕGo'e;z=kܖ<3Մy&foݾGGc.,
?K
$y6&Qx%?O^)8Qx=
u$A%j2X2ָ̤(NI#3mZHfZjř8_Ep>oX>b aUűGqޓjݰP'\ו{羂h \*nux]1U6U6bsW[ki|ݮƚ7&31WíT2>#0
-b8MJ<ŷx͜Fo|x>8ʃ*EX՛>^y$.(D?$ʽv+2G2wG1Ree>/dL%sR9J#1T2tSqQ|,&MSQ|k:~+O>B3
3/A9P*
3EX'B(DaM{ÜK4C
z&h ;֔ 5kizHnk0.-i_,f
%MV>Op	ͱ#tk%
xXm[?`n80QmWj%.2ϒfz(f?
8AX	!P	SAO:]Zb)OsQݣx>Y3M?=`bm%#e~WJI666VeF'gD	x N14lI"ak .:.
/N_L;=0Qf7g߫zQtP/+1Cy(aCUȆz~D6TϵJ%g\Bs	c

F"2!0Ą0-vbml;bBnIy<WRkPY
JX PKv  x7  PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$1.classA
0_*='+P[BRT\x %F<f6x	`	ǀae]-*$}Jt7bCŹtCwuqYrdE+RhijqZEa5oL}Tj/a7F+_,0o345
EPKa      PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$BIKEConverter.classUmS@~EQPbˋ*345&52t_
3 &@[-`>>{g~ЀF&43,NZMy(+2\}1T)䄭慙Qin)˶uE2kpd'xn=OpC	k߮@ogT"kG;
dPx]+LΫB`KBpj,Xr3YSG\weSЃClpL+Ж"aBΠ7#]VZW)CV\)ٍ{ySOR2i1,Ti*Y&%};dx&nwٽ/
cDFXAR
t`<ۺg
>>U!Vm*QV@yUL|Nu5ω7;u 00[#;2e<'L0f(1Ā.h7,{9="vO%b9d~HnT"i_,!:5ЍwzPR\K4m5UP%,;u9nWOe1LGWD?-FZ{ yuю<N ٷ ~+cE(*&-'>SE.HMASH,|$բ
i^&u@s	Yhoh/2G()UOlPKs\    PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$CMCEConverter.classUkS@=@	X(
BB(!Ўf@f>8iXj Mje?J 3 
H|޽wQ$C@
ECf]/ܜcM6׳_LY9az.e[{_2LzJb1:cK0TF[!ԠVEHfcX{\jhO:sY=TF#~%;1pthB/E!kx>/z#ѫ\,suX:Ѣ⾆V<8Y ui./ӑ=mIkx	$4By7DeY:4<Ssv,90\v}Ak<s]2a7)ڒ}	*"cQ3dE&_7<#/~.𩄶ʃ)1ya$'q/I:۸1(ϕ0v)(=Rch>Wɳr
0&aܤyKlrҴ1bBäY-bj	o\(	wzۡ6~CsZl }gѻgbd7M<C*Jkzr8C*8K؆s[`
#ݎk/JFD'5_% CFM4bVcQ0Mv9|#h'h:U>>B	^L*?M87i>ؤr*pjSGDW	7#QR*fM9HmU}`jo"Ô[9PK%    PK    A             ^   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$DilithiumConverter.classVmSW~D.KE|-U5 66!F^5u,ٍ7_迠_ t_Mzv1LHJܛ<sͻ0gz+q}e/k^ŵ(GWaղ򌊲cּ3-Ց|e텴Tc<nx)}%}B۵τ[DAC?h:N@'-(f&37nq!ENmD'Z|h̭KWSI)dwyC[Rr9"i8n' ]6mWJ+o{Y)oo M	FÖgUr؃T/u\WAֿLhGA2+v3oq	gP\SN5KEuC}(>C}:apYeKIŞՌDG.ޔ
+eJ}߬L6+UE0)LN0xTO^nѨ'A¶ F []X'Vx<׉Ҝky#9))k5^S]jд929&aϰ$Gr V37rG(J8ז,+s	D3y[8r#
a#u(w])GH[O@`i3rMi\4ˏx@||
\W?"$.'\[+5a>	^~7p:qoG۾1s<_6ahijz+Zo1eEr
0'Fkn>5Fwl׻v0uC_pF-oŴ@=NG`EpA'?|xP,y<EPKP8  	  PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$FalconConverter.classTOP=
 EAP_lPED_bigFhhCo;dmlw9ί?N,ⵆ6Ptt!z%V30
_ڂtyEZ6ߨؖN)]/_5luV\@xRx˖cW䖆Th!~7CuΞ0x)^$ZLeBe7pSE8zx;)~8I`Dm!
D^M\O,)=)e4㖊:pa9]W0>Hn
uNYz𤩐]Hh	4ྊ!(\kpeh/=qd!~UWm}u?Wf&hN@*>_j4?"|̿Q0uba+3yF@vn9(NI0۹|>:)̇)ŐUKnQ<pk6ӦW"g&ż鍶L\9:@}b.g(Ku|#l}qb/h]!ղ0yȕm?ld1O;#U/FsC곀4Χheŉ#G[x'xV~b2̞ y-J^BbŎc*y("EK %,+^PKReN  .  PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$FrodoConverter.classTkO@=
R("]GѸI6HbTʰw۵%l/@4W]`ǝ{Ι;w_~ K
hԡhB3Ď_c*/E#\T()7/6J;yy+˫<@ɀмzzEhL$Uov*o<|b~̔)vMt .ءSB{BYY$&(F\H@7kõ}jS#x=Gھ}`D6g]E*kBHn/Gq7	&C0]q*;3S+zAO#!d}peLO}n:&#\'܋xBKE]%j3Wy+ɹZ:o'dĵ_×]V j>Fy&G]rxsȢr}/1K莱]_djdPyBobeѱD.-Z#0ų.ct+N[
Ӽ'n`p	p0pE;jǘ{1DƎA$aQâf-PKg%  3  PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$HQCConverter.classUmS@~R%@E(o-	R@;"ũ20~HC(6)ɕ3(R72B͇>{{7Y"	>41,[vZNYyS+h3;d.%繑򩌡-0c,fǺui0

oь~y+C~|@xI7
F>#YEtHAEü|2; C{N$d	y&7#[5q+~t㞈zaMB:Or0iM3(X3^|J-
W^ A	xB^=AwVܼIxmF3i6~a44㻺ɍ=C	p2LgN5sz~+p(L?:yjٰ|
{CH\ tbx0wKzÄ[O2Lm_Y	o0tٳv9nX{f0/\+F^/10pu]%FT"CfV*rڸHRλw9h_Wڒ\?Oj*CqKrD̤aDiJ'n˨
C>E^־P:tCk=`XUMPHB ]`u]E<ܤ"0(ؗ0~|EB)!Q$͖\THW4H\IcSп;D1OkvPK}.    PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$LMSConverter.class]S@߅@ - W[PaV;LqӤ&[/?x2\lݳ̞sןoЁN.t3{~(y5ת[<0-U5i;vQ-¦=K3t?][3t5W1/nJkq[ʄd⦎3*<pS~zqh+S/sYHgJemiJvtCVqKn3L]aC/-)d;Y
SqW=3^zhͽUAd/b-=QqaaaY=1i!B/T:mr{jT\bNE\GIRLi6jGPy7ܵC!^{p[6Q3õPrRiV/m\ZFPڞMɭObc'ˠܷDUڞXEg=9<-3݃rU1,Gc]q`AcN#_xa\
B?1Ě2DrT9$"* 2<!1w1f"f`MyL58NZH6EjPK}0    PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MLDSAConverter.classV]OG=8K
iiӄ Ch8mci`MӰ&;FԿJV58Fzq޹ 2> aWu-]Rfm~=V(9SU{"mqZٺ9sVV>a:+rt 

A0M>0q!E3;U0He2\l9OqF3m
MfjD(pe\!>VFʥ@I_e{Sd;[nCVoLdDqt
\GaԒ0-;na3ޓ%"֒zd~鞆]<'ob\ۘ <AYvpJ_Dr=GwLa+ʚl+Ж52/kdb=-dͭipJK*Vq e`ss9ZxT^mi[4N#lz􂇔0p3H1XrmoSn,G_q}嘅1:ZG[6G&㸇LXiy=.0!ұL 
{٪%'No|Q0?u*OyD3D2[OMʁ+gV[\eYx	{(_( Pl1(ma+#a-ex?§3Fy=oh<)׹q{..]:>މ.c<\q@7H̯rrp_Oǚ=<ޙjtaa'uC_,sXZᱫs0>5D4_c`y,B}xePK'{  E	  PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MLKEMConverter.classVmSW~D.EZ-kj5AlSFq?-%$q13ڙ%0LgzL^Hfoy]b 0D{~\]@Yyg_(Ϭ*dVK$kO-[y~FVڪ9u7ݖ>a:^ld*0ND
A0[PM޹oB0RKEwԛ2a.oUrܙݐr6駢8sZvlБ2]XICG.S­cX%˫oe۪VVwfn#Wo斗s!)zOe
aSRak2*(q/0)kNރ
4m%G/D1eulŶ댮f0UʪlKȦ35%ӾoCui	MygAJזQ$p@s3x
om,YnlERhALiȯn$_7 iEŲ]۰K<R]U'j?s>%2)'uL{L\	,eE9+@xi5X|sD]<~h!5S=oOj%)f:?JY6~|s0ޢzzofeF
ʲrV幮S<!ٷR>}+1(mp1+0phaKAO	<Y4~Gzy^O!L]W	};!4Ce/ay~uSٿ
S0C`Hso?6{4Q.j1$xnb^ ?0 "!% >:y5PKdt  B	  PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MayoConverter.classTkOA=ʢEy Ǣ&@I$fY)?J 2]:<s9sЀF&4^z~VxE.VrR>K剢rrbs7ڲ׬W'4/:^ɭZЪ#2owiw"\b~̔F֎:n X3Rdy0H^%BY\OmNQ΁4c-
taOVRm*qTi7PkKXݷ,ܬD/@E=B+F%a^<Cƥ\!Oz(M]*gϑ>S=! a>wvs_ƈ$F	[y[`>UBBtvN!Y	z^&G%j?J-oͷ\Z

Z<[,<3MBա-@+v<Δ-ѴJ%g}sTWYvt,m# Lg}(CӖ	h;q#]#`hAw=1ƿDi4tp}1蔄(Y#,سXb0Cs7PKT  *  PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NHConverter.classSmkA~yx=mj֗kThВ͹+^K
 w-iKC0.<3s;Ϗ_ Q61WAe` 	1/*`m
¸تPJK_5!c;m\1`&ܳܭAg_xjˏ9iJؘ+ŗOA_ֈ`@h-,`.HV
6B+\o5۹\LʳjTjЗ]
,inC!k;{UVkC{UZAYɄc{r>?e5SSmFV/ʻ'dd!a1VoUR"*SwaBOߝ؅hC+ YZK͗i;N=_m~z׎q}oiت~:AԝRk;m<0T'H	;PKT  $  PK    A             _   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NTRULPrimeConverter.classTO@~^(F@(E`0Bbc^o%~(&~ ?
g{>'*
mh'{{%*[f -e_xzI؎Ywl+5-&,ǌ	k7Dr7t]|ۥ#f|=-%rcPt!~ܔ~0ג@M$a"%BIoo4>fF}⾆~< ߓۂnU`"t-F0#-Hш
T$`@ :%jJ"eH<%h2v
"a4UWf+CqI#*

sZ95qLHhHb0~5vd#O
^rɛ&7A>|Q
{է
aQ{uƤCBiKEa
3	I{k]iw /P^^㟼{я~Eȯ|a{nba۞W#Ye<A%B!kV5J*a?e@/YA^9"ٷOo<)0>EFN7SclEF;HėqeG-o<UHd;Y2꾈%#; PKҐ  ]  PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NtruConverter.classU[S@% AAɭJ(E-tĖÃP%ɖ3(}IǓ)EJa7ٜ}ߞs?~ k\hш&5Hi#+ExVrI19nHye|:)o¦p,%jrdhZt24x}{4EFoeH֏ʧTQݪ3]dnȖgj:2ҺeI'JOqS3aP@^<bC%rG=C'"baqإsiTIv%1-K3.g"F1O;mٔOT#2$v
UUWlZ'.)n
aIxDfSOfoMl?PujIh~LـAɡf$_$b!C{Ƭ-8>˪`w
Uɻo=żjj=:1@e<r:Oe)+js-E	1m).+o܎ΪV\Qƙf薀5nS3x1ʖnr<P
dG/0f؏/Fs!|EYh k`<p]/?1X hOdȰLc+o
*Ka0\2КB?Ӊ}*⹍D=߾.;iv/t2A=ۃ
ǽ/PK<  A  PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$PicnicConverter.classTkOA=
SQPGPy,I#M$O2vN	MQ& qv+B[=̝;?,ᕉYhC;!9[v@9+~v뗋c%%,[/u\pp7=y}}BB&&:iwJGU<ķLڡ;6c}v	d,ͯZExu0OvY_61Y}D}Q9BW#]N[Gα̱LnD*0da	5X<ec<!Xژ<_BFaLpġྦz1Bq\sڡaL+F7)q	L&OeqByJE[#Syϲ4\o`xNXE]B\ac'bo#o;Љ5
Kp}#RB\{
_	d``0a3Uش;AB@QF!Cak#]A׳~=#ݷOo$zhCLfNa)F1C3~<ӈ/zV,}o}BBxÑe",XCsoPKD  <  PK    A             \   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$RainbowConverter.classTO@~^(J"@8"?$@4Y$@$1Օcv^o?D?xpMg<=;E0ЂV66}e9%d9T>+J7vW#}Q۳]/S.$5s:580ЁNFHEH7O_̜pGVSޱ_Ŷn3in[m1
;lqnՒ@."Ad<qSKnޕ)ᎎ&q0^?'H.p,+e9`ŷOSl/ґ>}T$` :jZ<qːG&*23u=\($#6iy&0#n")_F}Dƻ/sZvErp`xJXo&lxa/p3qL)ADToS^럜z% Jy([@Ǣ:Y*](<\[&$6԰X#,G=*VS9׫HStOj<BSs=}xKj0v@(sAB|CXXzTۢڶP\}#9KXAXȗpPK.<  E  PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SABERConverter.classUmOP~+Fl @QH	#.>u2[;;~D?x&}9ܞ{/ K
vtm'fe
y
pEn%nR6oYyC72xC¶ÙCX3-! :%#wҷ/ek)k߾l3yG]!+(kE㥹BOQw\V$L#W(Vt1&7D?ɸ` m2,s,H@?ռnԴ/Nk}S*£*d6	pB2== DSOaMgcZ9֢>娂#ty5 #qϏ
&&(b1َ?
⻵3,nTS!̶f.ށ/ѩU0ĵWxz9ۺMR*:И\>GOD%M@xek㶾xdG=a ήCBG4fFwLZj-s^#+rӶ\"
ئҵqUSŜD^w]&іA'RFp|Q&:ᵀ1#}@j[&W
#@d}
q϶xS̮J?iP9o>x$:pMS'*xWo֑x-:PKy-O    PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SLHDSAConverter.classUkS@=@	oE(P
2VqP%ɖ3(RoRh@#wϹݿ~ƺ5Qzi3k9")甆Z0fv'kZn´rB25cP?PlyрF	^! ΁z3fcCNdh*
5nAdzbV)l0\E	'7~XyщG{DRXbhJi"f؂1WH)	7P52(7 n<ch$Tf3xS^A&c82-]1LVL-S3B5^╄~pa~iC՚B7a	~0*;7ŏif3
ҪL}Ced|,.FC^3}J^C0!#IkXna9JI53gR
ܟ>7NN3UJlG[1ttxj#Ys1y,po뜈^{$wtܥ4K!3+}N]wQ+'%l玈ѺJOhN
8z/+J,QPSCin0}2^;{S8jGWLft̀#}u~B	aZwYOh:xAӞ<08o>Ϙ4v~SLt3yy\:p[En}4B"vkh9+ȰDn7eoXxPK6?x	  [  PK    A             _   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SNTRUPrimeConverter.classTO@~^(F@8"?&cd0"Bbckmo%~(&~ ?Zp@؆Iz=so{^ЄfV]?vݒ˶g~ٓ.+I6J~o-[~yxs
)+/Oh]v#Ю#rtr(p[Vb߽ĶXk3eS]qt5+)v47ȪI tz$a,%BIo499f=㾁^< ޓ%wDБ2+i	ځuh%,3_#BBbAK$wV¼xCӅ;S0SQ*+{\Hgᾢz!CaTcՆ9=;QHHb0z5TN闼o5\UUK
vqo"6:^2
R
/#_$$-2r\2C6Z9yyF/!,ѿJobG6@'v\U"Y!)XAպBạV5J2aE
@!|՗* LQ[w=)̨0>M&acbdI}	&E;gի)ėqeKMo?^?3E}KZfPK  ]  PK    A             \   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SPHINCSConverter.classTmOP= EQZPlb\$@2%1|elKQ& isfs0w9y sxCZDT!zy#UL_:(|+kŜc[oyiI+fd6ٴ+'оl[0jNQP:APrKVgľ[Ŷm4H;
:V[XQNmz'v?[+RэE8Y4^dڌBf"eˬlOp
T=+0D/Ughn*H`@ T[sg˃#q!}{$<T#ͅ3tըR3s'S0B0Ua\sH4D4ơyl)Vشd I$(R1
a	}O7R2P9pݏ;s*&$T֜*ԨH,C=l="쭞|'TrI
|c//}!~b]+X`	mlUvh3Bp/혾%v
Bk
n%)Xexz
O0qJȐA@MO	v+.g-ᾆE ߡ~<Sܦ1z3|	c!q~\6:.
Y2_H+v<PKb\  C  PK    A             `   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SPHINCSPlusConverter.classU[SP%(7Aւ
@Җ[cC%&19e?J_~?qrùv7		QJ	UfiMqWdu)S䅑URͬ-y	)SZ"݄e4Px=Jz u7wuMUs*Af$yVGh@#r
w͈r01:\#;^<d[")ףA4Ehc+'	]c.Tthhes%͌_bw]F1ԒU_2B፸.A&a,C觩n0
!x%30rtƜ}	B2d迕_i\{05ףr;<X^f]ï8[xbRR;>Nlv^RlX#P$ʈ`U?1@fمg&WU
Cxͥv{twԝ;t[nJ4
ĻbD\ۊ+n\p=%P鹃:q>amQ.3(v
,iO6%r\LԧVof`1_L&[4u'宫"CMucG0nzj}7	iD;Fs ;'ܓf5KCtk<D10=0,
c?=!f%jUZU{[Z=lv	Zlރva#4W
:HULcTxA,{↚PK    PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SnovaConverter.classTkO@=
R("]GD%HbTʰw۵ݰ?J 2\AvyM=̝;?⥁4L4rb/yNűCNP)*_뼓2{e(\U䦁0"6B=zO'֮"eЮ㶉t9;RbvjAԒ@h/A(De9܂ܲt㎎&zp0\'(*p-'U9`%-Xu)X@>< 2jl	Z"ť#<&l\UTݙޑrw]0x&gF0#a"1ȥ|0J
;*	v̪\C)^d$s7t<#,^o00eKAm[+MU3/	K@}֕rDZ1X+f[;#P,;v}T-iϓjC	k~ˏ%
 j<ϺxF7!o8n)LzdƻG:u><ЫMbk9ßƈ;UNo;^/3D{+2wPKJ  3  PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SubjectPublicKeyInfoConverter.classRMK@}Ӧ֪z<xhE
JDP, kIIwc>J)O?J܄R{yü7;;/O Z)!lF9	=PEҎm`ޝl?BŢqY?}%KnʏX[Vr*P#7%9S\.GH'Bz[w<M6kemXݯ*V;u^" hEE(]lᅎAj(-2%M:¦)vy-Q%4LE?
ѡdM/HtTў<
`e
ai
2J4PvSm,PKG>=V    PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$XMSSConverter.classV]SF=F$iӒ6HIb:&$`>5iLP%ˋؒϴ/MNʮ"{sϿ LGDTDcx%ln(scj[
G	
e|)>r)u]
2Ħ,q`PA\zb=_+lqSu{9v?ػtFF6s
Q11/g3Zbp'<ɁLmamXq*xO%p7sa`p
'*<C/m)2'Q\V𡊏pB	줴  P=a&gxX2v
l%-P		 Y'*>˅Y%	IU)I%5A0:k*ùz-IV֮'q7%=_H!6(0-*w@l*vX2ziK-{n6EPz_+U<$9!EYZH 
SrGy0O.k=`^
#AYkU] @"C$\J_	%+*3yЃA^~B 9K*%sEŷx-Hk?e
^ȊZ1ME^]bȜ5T
(Q
~R3~a|Ws7m`eثnSH]&
Pqkl=OKanRPQ
(lYHvNuɜV`fzݣ
7/%*ɫrlOp1MϵGme8aH|n
W
jwp+xEw&>Y꣫|鋮J`ؤǨ}(Xآ~9͌QsӇB,t>>PXk^C[h}dh4cǼlu>r7m>^NFh9?IʰMXTh/_z+#SGmt|Wirp!qUx8PKn=  H
  PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$XMSSMTConverter.classVmWG~6,EQ[[lmEMqbHjҷfnܝ i+Kȩzzzgd';s}<e4^1ARWnͱ2׫/,U5alPǼȴ'/rKY}۱`$,aK
yYsݍ,f<)=)5~;q}{=ZTzX0܊Dzk#i#5{0=k8nOa<ȚYDpr|ޱܢY(si]	Z-01Jӱ8↹ee)陀dzT% ]⾐\x黭>VpEU\c8U5=wwEYϮޒE1⺤R뿧= N@IG=C_BoW|cGm7&5\䞊xp_2P<]ZA%r펆ޭ-@*Ck)Vpv!meB7_3\aĐw&ߴ2M"%[<|IWb!$
{K*uDjN"Kw9
y<e6L8=X%Q'"'<)1$V0ݔ5$+3*X05`1\8`u(&`杢m:yp((v\Ѳn֪zƘ	b`kؐQۍ3YH|'oW<Gp5hzʯW$wsZ2yyz0-^*^0lW72:
l}Nr~f8}zq@6TƐ8ySgѽ
uCSlk2*4/J@zZgp9s>iೄBMD7B+qMO(MRXb{jB`?7QJRzJޥ/f׷68@chjޗIx >j>[J/0%cPK-  y
  PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory.class|TlCb@@@ $II !ňn67ɒmn>{g{ٻι{ws<?%䛙̩{Ss? B9B`Z:_q(^ںV'hgr@=N
:!=XGH 
һ`2`/kN
`(z(.0#Fh;FbŭdAkbP X3jzb0c"8G 1(c6KF5%[tu艆p<E!ڮ[QQ&:`"=_uGd",Ά/聁K1X;}+ j6E}1_(^\t12I2=Ǫ#&b"P!LrLc0@XSE:MG3
֖;Mߺ-YbsM̳D6'..fpwV
Vu.R(cb:;"@3ĠԶFaYφ6Ѫ@{@
r#xBt?^D8銍	苊Uel[Dk̃;B
Ԋ%k)Fl?'9`>ۼ,PYB{0FTʎT
FfX`R>8I}ioO;2,6ːK}bĿ䆓ev|TX`xO❢a%hv}`_j2Ⱦ5iY]؊:
@/u{ږy />eS}ÒfeOZT
~#'ib4RyUsTh'B@v#Dut1uK[R4s-v!"m<n.WcڃѴt!i-3z
E?r)TaS&AM̺A6/uJCJ#Hp4Г37-k&1:EwCqoX9@e0oeqN9NtI'
gk7\{M2X$%NIvqJ"oWuVƽ2t69NyK9N]*u!E^K.^TN1Q|WQ
jJ3Z"\gQF{nF+6{@&tbhݍpSF^lW@x+0#v+b!<ދ[FIJIA]z?^ۭ"<g
{~vf/(ޯ"֋woJo#c.=Cx_zWt#{COm#+47ڻ*#@瑽-=~B6i2"#a%z.]sT?s<sJ
O@idC~=zYye\LЧ烺ƺ=y"+yFXK!2=%U:0Kpښ	lTVcG###s̙q[ë<%.Wi9>J1_zOB6n3SM!H[KyK|zvbBttD2LbL)il
(AJ,q+CV.C3FWYyAVajFV!`31RZ)>5vrlwΒDZjե+<d
Jzd
VٌedKeŲN![nZV ['F1LInڸ758(i"̗_gUI<m#kԙ#ȫ3k
 [k,$D2fb2A5*J1dqi.?jK(٧W&CAJTڀے" dX  ;Ԃއ#;BQȎȎx`]D5zddX[Ӑ.)f%JÙR
e9U
|dNĒxiIy.tNeI<t+USyI葫]cLe*-]oL+Jd3]eFGނVc,}A$uJ>MʍVމ.&3\ȶMۼ=d)cdKW7P+VTin\hAڇ@=xITᩔ'O#L<xƮnEq^YdX2!za:ȌB9h72XЇٻbXWJzt@cLJ1C,Gi+eO}j92!x`\FӾSӚerEi Vb{d?(lO~Vٮ_iiPl!d19h8=71=y?srx@^cUB䃤)\4@S>U+<#ByzܹÐ<++,p|UmR`+	|<	,rȝV,?fȋ&sw2ȧYMi:ybkKOes>ej)o#|1=UFfx["*txWNaYt	"Af#1b@5}xu}:_RJMy%Y Ob|A7 xAEBQ\ۤbƖqY)ZZ"o2΋k^ț(ũ'X1+2Ċ;Ւ=pݼ޺I]#A]vr/ yІ\'ЁPX8~:d[GyЈ"?lHyX|=iJ7m=S3agETDġ5=7G!rv飑kD{nqȏ0r"ND~Ry9NA~NDd3!n*NG~FAAg!? һ:y]^,
%fe/ACMV+;5ȯj{o#&7giz+|<YXܫǻH݅|S~xK F#K
v.M?|(rO Ty
j
[F3y/Q\LWzz:7f[VM]ٹ* PIQV!J,|Q/\Lc<d]\Ҍwȿ'fֱ9V_jcw%Ky"c5@)YRCْm jՌE+YZPԆ:#Pd񔈗dF6Pgj
ۡ3,˝mj	;~ƪְjm}Lde=c19Ռ-Aͥgj
e"m:jV c09w5+|AVZgz\kj#D<EDg-^ʠܗU/EQӨK.
GE1C.El mBmwơ",͔k1Hn^HJeV<Odc:˩ۂz|H+οd;kzcJ@B]
;
gWDw^Krhp ڏ!:ܮJěuCX~'׭?e)]hX{G٨w^MP|V?EXD7s1oƢ̜Bayғm<\9ţVMM`ba8X o- gnv?H 7@3g>Sh1p3z`1ö-FJi2D4ŠP2U'#R0E$	vkhB:j5*[Frf>9i_9v(	*]9<uKf?g	lLA}m=&Ͱl:vp@ꔼ.>og)XٲVJ~-l375Xm,P
O:6(;;<HvO)	v%`J]C	vn%`["{`	=Eg<^"+{`o]}@	 `?Rgˈ73x9V@ABE@0'cMlfl	VJ07*SZ]6`5O='	Df"X!`	I.	v@%$[;` a;`xDS	v&y)vd+]Nv-n )Qv6nݛblf(|D>z*=G/+:"ػ`B5#؏`͜ h`>|44HUи|]>&)h)g)l6JV*VE-k%'"-!2HՒ(loK	'X;,B@v'Q;`'dF3	v'E4ů*]Mv#nI$Cawl3!}{`q`"s{`&k{`}}DO	}Eo	~&	g'Xll8Fl,&I"HiAY+&XOV-. ^	PNmA?{Nm!j{V| ڞ Kϩ-iNm1sj o;% ; oe;&Wj2>r"Z3NmWו 9U j9PG{3wi /85 ok8}@թNm?QWi~?PK9   @  PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/SubjectPublicKeyInfoFactory.classY	|?H"Ѡ"&nhNf7	ـ0ٝ$Cvw
xV{ػ^}Zj6[{лwko[{;..3w٧t@,P"RJP
)]4A񝄅=v!e
j,Ԕa⏎EaLu;}ݣAߡuQ5ŵhLq5ޤٮ4Z8Z2H8WRg%$5tj6=)j\k㍾MgK8P^*N8d	2.
!-մ}H	6˝9}w"THX)b\BXѸTvb.*aFؒ`BhqηS#\ǖaeb+8P5,97%yaPZ=:/hRlÃg
p[ԸJ(qVor`-+	uEǼ&lϗİvt؈hJgZWdpK.Ld-;Y[dlM+Lr"le0S<^% jl"FLW
C
^+M!nŅjH-2ZF(kby-L.+B7]:0eGWF'g:o/;}kWCñX0?ƆcN^zd+*^ԃ'|{ogdlY׊}{Fp8Shqȸ1]h/ T	mrYn~
]j]	~z)@ic"Fs۬nI 4Bh%lB20f3$
K60|!4{[-0CęQ34,2A,e!kPZ!	RY$7Pp,){98nq%  >8~"'={RLeZ<zXhAi=&)nZsR-}J:[Z{q-n3܍Wl:zޢ7ޜFM
C&=c2[j_hs),	];d'<Ld]Ӈy,}Թ#gJ?@t? J-;%}}XH9K}Dl>,㸕/w%Y oIF݅؇e|29uP\§fd88	̮:3r~	fȘ4{ԱT"͏I&S_lR75Wԝ|O3_4S]vssά߰a!hQcIf$,|ǞLu,|OBR8dᇄ59O;<~̅qw>fWbO/l,Zo[1=§\J$w6@8U:{{v[q8?2ߤeDe@ᓐ"M-AVڒ<<|:ja:k_ʳ)yQ&ȥ(b"ȴ7gaМ=PJiDL,륡o,BbRQuoDD\&tmq-2c,C-x=^䑃\ѹ}2SSV<O&!IkEɁ]@h['Ғ#ZQ.3EIagylr.T
&_y鲂Y%{J4KUt92ftLi`)6>,R%#3*֬)=(>}4Y+(Ou6aeRp,403E.D'/Ͷ_x=9[Q-1W[iGsJ#َFٶ#+EP,\m3R#|B
Z&~SMCL-*F
>RX+r]guX|ml|FsXg|ZUv^: ߘ?{O}QUG2nz9݄62dK}bH2s[oY
!uPb>fcl/9e<2
_,fw
bՒ a&@/,.,?,,kH'WP]Z$tp6:2zu؈j~c(k)&'\`؜`?PY٦FTL%F@dj?q
j=ɷYJcl,$f'1VEīFz.-"ge]7ǰF g[EsToĩG|VMJa?.+4UO@La3e}WNbyN)NcmKܺb

	V	WJb6b0&mLyyMH'TR	
|v)FoTG`'QM	CAFzyȈ02F829>#9[r{ܹd5S=s>\nz~Qzw_E^5>h>~4e+oǻx'U=||w	llc?Cx-ONcOd9`SS|ʍn`7K	|e*6JY''Edow3QJi,-~i3Yi?$yI|v	䳌Gckcօ$^8xOkaEIk&A%IML)"U=A-X<+OFC$H2G4Xk.ę*AՙlJyRkjӸ-	ږOtR;35	j:Nj3mlO#	CvAu3'%hOX@Z%0,0J!Ki
-Eݒh\\aeZT%KtxA.K??m5
556TVB^PKn  &  PK    A             @   META-INF/versions/9/org/bouncycastle/pqc/crypto/util/Utils.class||E%$%EDE TT	BN$k+
({ｋ+ٝ{B}~gygwg7Ԧc0,fXbE3k,4:mۍ31d.,ub9rpcsEMuXeY]Q]몖hh'YN<Xψ#>bOeX,X笫.`;ۨ,֋@XxSIؚ%>mFZՀ FN3í,ge簋jNP36EZѰ?g
[Mu񢚙Yf8ˮ<lxiyEۆ
bێmhbȲpTNh*ZTxjL,/*[mk\֨l6\^^RZ0`;+v+YlζKVEcc[/Eщ+"-m|b`%KK"㛛ms=Mmp2ݔÆ˓b#9+4G+ENI*βGj؞v$L"ll3S&V*D`˲{d]lJϮilzl&ۛ)fϭ$qHdBtq$G[鐡-Vfg}as9ۥsxa^ڧ a{y0ِ!,gFFۢ#xtk`8añȌ4,cx(vM1&K6ĝ;3,a0Х[o!^jtf4EPGվXlĐ-qĚ(\GlI6\)]eM휙C5f![lOG0`,uptaòPԑ&<f1'E3禘PQ(vt;ر8	gMoaʲ;}DζI3yk'!L܉MuE1,9dT:BT`iV*39+TJl-_Vi˟\"(V].Unf=.b`<^m/l\4[=yY9ؕ|iX4Rq=_
p^ni]hn v\z-5nu]YI&6hg9Ë";i;[]':pbjƎ8.`w+h]Sr{L:ͮ;X9좙	#у5cuMG=j;r]GwaMJyRnjkmw<Yۻjt<+nٳ;xK,-,u=U{^V̋M.6ui~'o{KuUAE˫wka^}vh<=3g}d'O}z~?b5v6[~NMP V˿0jY>moU~ hvo~Rug2ZW4/,&4< .E%^R]TܢqS$΁J+q{se۴<J<H-xx9TMW xW;uҝLN4h1ϷS4=^{۩RJq.rʷ965/wˍo
|sfUm::*rQgm9^3Fƭjmm
njioc$4̐
Zv!۷9Y!a|gZ<5ٶzF}ڡ.\FcjJ2t
gj/2WߕlH{+j&.٨-ݲ*=2U
GlZq||ML3,ԻLFw!R}2-|V4x{B >
tջ5L\%L[ruk϶x kqօ]K.UXوʊX%d^x-*EuEƧXCm-e"u\wx -z |k2x}ԋq(D(plw]yNm
<j^m*qEEe%9?g{aWR=1(.)r~߷ӫO~߷ӭ}
4oݭ ~weIU7[js󭻵_v_/%}hYC"]}P\^I_	*%݃Hwӊv
v:_jdFH7bC->-$yZaCT.l-v9)VeyjwaƢ{EVQ~RE?q8\q IuxO&EU9v/ 弌=U7S<k;w!S8Op>^%GϫC;F)Zn;۩G+9߁cUq!|ct9jU"0Fga#[zj`0*f ;v9<01>}n<VҀ'򌅞[noUm!lvP֠Yc06;GpbCΔP(Q(fPF"tqe_N`N`/W D^vc1E;J5{QJKe:3(ܥQlc,
u/-QY^\2'{碜#<#G* FWUTڹcC^RIiib5`j#X65Yl,v& QR6ҞPǌV0FWu;v6#UJ8WPw(oX}m½:#UWwe׌88Vkj@u"|I G.y&48YQNFvk`ruBl0~8CXKkE9^FGwXq!xϸK
X.fpWRBe]WcC(ܮ!͊	%%6Vlw(u5خwXgu*`YE
`CuV0$:c(~'
UfYlvσ%͊xWmpWwgjvuƛ KΓSNꤢ\$h|G^9R?$h|Y"֨o\W`|Li#޴֦an4c#ժ(ORi%37?3ժ+JfjƟ_8޳E<M|E#U9jl~TA	m0AX~,lO5,h{&&vtK,SE'P*U&^ z{M/9[zCT0<$&1|ڡlb'v$ vp;U ع69CAڷ~igmuuum],Gnbg.xح{91ҴO툋A(|~uK4c}}qDZ *@TZ}|ZK[p+**^D 3Wc Puob, qL1I	Z":1L1Ui{nV !fsrcey_sƎF=i5ڇ'b]2ļtf
l?Ҹ2; Dmj3P  lo "loA4&̰moX! |fҙ ڔY@gjXbbC@x8#NQ Ncy,@x2S@ ✴@{{]B)U`45/qEF͆dͫ@\M41IUq-2h,

 ni6$k▌
ɚXTӓ)AI(wXĹ]5qn q,H+E_@ܯdMcT _!G3+
 tJ*`x
әSgA<Wn* 2Woz=@A9Qx[~1Fx|YJ\2Sa$2 eZ5oR326.-ď%^3_Sl@'Sl@lJC2<=ؗLӴ0okv3/H:Z:Y`foR3\_
:niB0B9$$zKIlzִF05h[/`P%a(m5h>\M;f0ws(ɣ:7%0̝&
YS)(40iA2]Q
(
cp̱T:9	iSa{&3Q
^]Sȣ}M`3S!
)朴
n9d1)?MIYנa\^ÍM{rZfcTsI=Kl`zos2ϧG[<%6hlS*ۦ?0]6-sEX[AbyOLU_Bp0H+*;
̣hdǂy\N D*fFBd0OI''Ib43<+XRdx2ô޹xK읏w[,r.{IgR=t.ٻo᜽qx݈AQr&e60W6L{>(핉smzrz0Jx{rttA$G|4uIE|"-7I)0NDPY0KO)1_ E%,MDzUc>k`?*ob6x}y8}קch~
gm3挭-Q[^;fJ?xH;D;/J娇Mq%%7`~7fG0R}7;T0uֳ>hG:_`NEǲ	ɣ(QX,#yڿee-VXAKǧVnr[]yoVҩ(z+X}(k+k(өo
ր
Xv`mO#>w kGL?Tt9e(j+_V)ө <h=2h}
(I?h3`Mքt*:I`IFQ6S4(t?iAKyX3,jHO:}C"w=ּt*:? jJR2
#^A=XbSjDMK,{7;BXH`,kˈڒĉ`X:C:4~8XG~hX#{iN Ĵ:::%4N'c)Pg
,2W?Ia)lyKIw"*NX*kK'1-)lZV`!{~ik-NH6uOZ}`ORQ[R8.!:ݫcxGSjD
[)~i9^L#yWx^u2H(Ko۫cxwSjA
[#>&{~i>3L#o`<#USpV⍋-nT;kL3L<{#Ǳzllq&B'Yךpݒi}#zO)Oti!RYő6թuP\AWϫ3=:9@zߥvKfiNmkۙ"a{nNLSE龘A<try%L~PS^=oo`S/A[[x	Jk^k%(] -r߂wvŐũSU :9Tk!lᑛ'=r#7u?/wz>kNO"SE!c"|t"RH$!ￛS[ĳ)븵%ؖ8͎LeٖEgzq-<ӧ{g/gTr'F\22NLaV9q]F22/;9؞/do>T,`ɕ-,T#l'_p9~қ\MF2MF q-xȄp[a/[62w,v`"g٣bӱ=57Z-"mdl7-ij^45|pA<;gڛZ#u͋Euߠ
<YC9Yfq68h%ڴOloN
׵5|L'c`gFդ3%_毉hX&ڦR
MMH<+g;lQY
L, ά@}9
^hvޫ7-z+NRog-coY}Ho۷]Ho?So~6GojKz~mvz[o {[Xq[cÖuw{+U»XW=zִ.hi1aӆo
eI6xua+1ݏ\n
5_k+̯twE1.8L@y	1+
sµlak,]^4&y=/3fY&n-V"ֱūmY-KUKm[6/UrșjGjǱ*8^XO/aUjIvdGccO9ͧcvjh1Qy8/),fֱ-	<D 5S48iP~D
CcHNR8V*kSC,Hȥ]i!2˓B"diWk]
iԲBAM.V% H[ֺnAZP mKϥj=C]c.wOD@o H{ڥ=Ҷ
^m^siB7jۄio\ڶ킴jۇi\/j;i_.mh0H>6,sKե
P+
iM.$TqP+҄K+Ui -UҪBi=jBZ6&[VP=GUrԷ5mMnWoLØa˘e,nf9O>؀,>=464NjYBQu9FTƇ&hڮұ+EŎTy9l+ITbWnoQ8/fqs=?26Pmƈ[cl#{"-}'ەY.u2Dw-L[;־BjBa0kkB&LprTo3{a뽽
Mjoowwwwgy{xOx{O{{x{{{ox{o{{x{{{{{?y{{{y0oOx{^gTzx{=o?^%Wa0"y#K$o"pm 8OO,ϑ|^!a`6b`6a`a`xFq``x>%HB	VI[	\-|yx5xx+	\.DwK~H0JOI,KH:oJI!K_H5J=?JI'K9
.
4+nFObÄ0&'0!>	!%LcB|B?Ä5&1!	!OL1!	h`B	!'&ą[[_	$	AC,pQJi$J	Mc	/INIc7`61lǰ	a8&&p$Mh60l`İ]4fIcJc?Hc!!p4$0&f>(N~(NB'062iBީaB!Cq4#DiB/#|Bߐ9Ҹq)K*([M҅o,x)xx=x(Q܅Hi'niKxG8OJƋ.eQ{QPQgPQ܅_H3:oI]1	L_4#GixgQ	|	H> K';'w]I
BH6B&Pg!/)%yG&	C>}!ǐ
O@)%p{)vt!C&	|bCF`KQI()v#pS\8(Nn(N'p/w%4)&ps	/JQG`QcR4*E;+8ä8c8838s+른[;XGRKR<LcR<I3R<OKRJRޘdL5s1.TX&0&SM`;1&xL5b	<SMj/Tx
0ގ&p{1>&IL5c	|SMۘjo{b=H 'b=N Wb=K b=D b=A b=oN@Ӑf.K3, 444	.bˤYA`4G48Q	"-Ε|Hs!ul 0*l%]+	<Xx4!xiD<}a
<_mjüW%0/Նy6̫|a^
:_m7@a~a=&'tM'8(?A+F_	L614CX4X`I8KXbIX%M`4	%Md,icI8KX.Ē&K47fм74͠ي+p po~ͻ}k_D1x(o|o>}쟄!ga!!2J
ߒ/͏\
ќ7Мwќ܅Xcx,|AHߤ'H%%"'
/n+$BK2iUX%.qNdHk:{Kk6s5ZH`J+F`Z	lJa)c<^Z'x liKҺˤu%Hzo֭.;\'	WZ#Ii=CzWoK=?'~.-"%,	˒?,bX,	,K,	TeI@,KcYXeI`1%XƲ$p%,	eIl,KcY˒,KcXbY˒ð,	<˒,	<˒s,	˒+,	˒[,	˒,	| ˒ǰ,	|˒,	|˒,	˒,M{1xhOj)w١9}VPKpx&  }  PK
      A             5   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/PK    A             >   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/BDS.classZ	`T}ɛy@C<i5j")I8@U^2dd&[k-ڵ5@ҪbL
R[-mmwkާKA{s䰙vљ;~''~Y W/C
ENB]8]vwXШ뿽+?Fnjik[G>#fDn#e]{`j+*%(]
&05F'FȯɘHэbb"\4-U׷@Z|G%_o'^
d^Ya!gaQӶeʱ)z0 \]mնUӋҬѣ=+6VniX(	XX ZzX
Rz]Pu׭5UPKY]Xڽ iX" cð6O/ptSz¢`փ+#>._$wjBy-۩Fَp?ilen\ѬhNmEnFHr,s VF"@42TpiXU}vWszjTq=afmXmQ{5E3(D&p#wbzZުaֳE95Oi¼QC<ӄ-.#b&Ohю-Mll؊m*ޫfB1 6eI[EtA@5~]ʬȍNv3^KIFn';'o5wSñBbko4
nG[:v%F"vK8a
6Eɐd؆cF{pix?\
>z,bg3AwkCLBP{h+3llj0	ݳ3-CG^c}(ft>3nj*z`N5['5|J$rt!C|FÃ,3LKD1+w<,l>O,F	_\1!>Hzp9تqP>y{
kף%u+ZXvIۀ_U!8,܇l<LIi[p$ƶ)cie!hPi7N/ZFčèpc*Fʘu6f}{ꨆ1ƩdW ֓9Hmvd"3siFgk6^`T=gƇ񢆗pS:tb/se>.;Kd7'0*_׋*~JQ9hi1N'E"ITsD#^ڢeY|L+\õH&OWF69~pP*uE~'ˊ67v[hzS?:zQ2hWC1H?m
r?zj:?46@,D9IFJghxgAc6deS8AQ^rSU:$E#ɡjE<F(97D7TL4S'˦M9&\j>m6xM54RI
gorqB4Z(-}hTfgѫҢln*4D~ߔuQ;UhTI\<Q#&K	fi)ljy[CJq±Qʼ
 	RvFW~k4j >&E?nw״R
S⨜kt-઎}w*<	<;⃤gĵtF7H=ǣ=*p:DcF,#>하ez0ber&4`8+(Q7:k6fkVTк`W<2q>_O]M<*gz> Mu|l4Ġi^ٺjA˨}tF-MRTkd32}-E7qNn,MY"yo
G6[%{;5#>:f!V1!?绩vvG@)
D{*;QLQ_LF]
$O
}MI \>ҺuI9ؼJIwŧI&ộ\l{5,#VnuoneZn̝#m6eyGlƛˑ}P}JΉ^Өaۑ|!>]1z=mp`
hyA3hH4zHzUUz8yg}2"uCQ>d&lzwWL ܴQFEy]eHZbK%IQc}Y\ߔ+;fDLL`17'Z6aX@wH#	WrLsIBl<eKn|ӵQB(gYdԈc gfF#*'^~E1b*=MBerJ1VȗE |?d'J9O9-p
D7?HTY=[[ʉ?,VL9\ɄiU--#q}ېKܮÓOn-dIevq3U2ƝQNrNA=m
ǚ$G1zɀk2BBFĤf}:S駄+Mg;NJ,A1sr9"̣~M==ns
xkב'I[~0+3RO:Oo<BϻGS~
oܪ
?˫ )\8U1j0JaΜ%H-u1i"/jj.H/N~6Lj̲;.gYSf?wep(VҨ!Mgi1Sx>\5KQ-Uy[ϥypB!ʎFpsUcX1ky0hIOؐ_8,`7Qta^:4[ERSLT\Ai\JXSrRY)>*4CgGFưG4:QKYCy7S!pqg(ؓFR3¥ܸpҦZV;k_(>-ξ	ZxjKےwmCMȒ<P;tצl|A`f ٲ?D]..?jnCX6F?7
Vu,,Ym~O
P MqDW!*6t4NSg{iԘ^(6MVY)|ǰfm[kmŗԦULt]ejt_Xkce4K#[n!$i8ۘ(iE`VI0au:MsVh#.;S[%z3E)*9QCqGUu
#f˓?fK-R{L%9?7ì7jfG0Qn%8ޠOyŚ8aM>x(^kp;=Nںy$/GqZ:<~¯Hy0:!nPmiJ,qK^}		ʗ3AT^hpy	mi'MS9Mмu24Z]u~0Ob^e~T0,5-H:G"1vyY̓]LN&30~#Nu8ajӼz:Fue[2'yݶݛ<~-;"$%	Z*+#U[P]Py]^]FivlOrۡua&$WoCg4w(i_3UFgJGU*?eTxOa-.lGawGZ<ޑ0c:fњZ+=Mߘ_wZbT{;Q1}Ha{(ƭQmGʭ
k{ӣ?"ۻ⮎:RjQ?-g:vXDu0Vg_61\2L3g[@#h-)@WIحP)`+v



rjIpȯwy\ z\1Bsla A[m]9i&Ǜ<?M-b欽..${zW" 
eSlw{vmAǝ{GMSEU#^,#Z޽*9YaD:Ϙ94Vr[w	6b)8p@i>V2˯ocf?@aKEeؙq˓?x\rjToLﭬAxw1j}9`|ߏ󸹓;!COTN4휷OBnOa)'OroMǒb-R=w=-=R={nM|
,}h09aIΒE~:zC7O1{~^bexRWǿƟ[ko3P<[g}g'd:>Oڷ/O9<;9|kaj==g.d>?9kFvEߧWmu<Em`ǟOsNg;ąn_?
AMW GޜEnzl H?E1/I$GM0(Lf??JMqz~F+Np"wĐ<PK=V`  /  PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/BDSStateMap.classW	wW4ȣN*9]B+6ָBNf4R&X˓ȒvK-ЖM4,f@#1P ?PsȖiϩͼ|w
nE~GgsZ"r3zb4
u/?1*#b-#Ht}HV ߈
MX%ƋBf.V^OL?IdJsV11;eéY Cp<k+Wл0±HlJUY}
FDf ʰNR:1I!lV8cG4,YCNWuv!;10ȓ9ZvN	8b`
۫kYMX-XzN/f%"+	]Ms";cYǳ.D+1*=nLYǝG r|DTj(}L+iS:dhFnɺw>ч~Py:KsYZɁ;FGp<
Z{טVpT2$ާOcP0FtOW8=TCl@8#0k=f$:}lI7͝e#K
9NaM
 Á؀vx04	am˟0NYvy-kʛRzs- S4!5l<J!/C<z!B1hj;]HL`(&&%&ڜKiY~\L/_q,>G9-_G&Aw'E~m-m"3XmxX׳:q(@}vrs|Em֤^f1͚tTĔ*f%摩ikNS8/ileSpYg M͝>-AhϤ0*m>lt}zkfaw/5bԬH΄A9s\],nYjvU5"|KVy븮eBe6Hky]<}5\f]轌!Ǐzo#eFXN+U1\3:kTM	qܴTe	0Q҆g/[2r*Hovp{I*blv樞BKYZE@20N͞x:rV|C
Rrj&Ird6O4eP^7UՑ72fh[M꡼fE>]0gVϰcZؾZ(%ۚNLvǓ?1 M
/gM:[OG+~Mt:tȧ/~c?s1@o~Ewk8 _|rWw\A-kWIxtx[Pq;"Zz6FWpކ8IEuӾ[}k{qc~Cѥ6~A
ҵwmJg,6"/bs3Jц
>	(ZO`~_Zz['	$Q%gwBA15橯

tL
/	c%	h$XuJ+x:2"Y){
_/j
-`q0&aN^Kq1t97㺞E*@_@ʻ5 b|a
	旵|w#[Q&1`SԶ;nRəwD*Jm=P_ϕFer	-WdrotPrEUJ|\[^jjv9iqڈ^J پ/!tR0hpADHvIUXT&-v^oRt>\%>)ҲC/]@SP#oA	kt %>O[QSSʌT@I0MU}g#PK  @  PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/BDSTreeHash.classW{WdٝEhlilBZB6TI4@t!4d`2ζ>EVQm?FK*ZjU|>9eIعw<~{ν>p|
hXyĸψX=7vD%>6;CРK4A
t2㑱TNL%cHX"LTd6ߟQjhfMaR1ַB+<J$V1/*WKcTR	t
.k={qfu@k
zzq'f'q
l(GdoβR	v̔k֤,{=̨lc۶xul؍CeEq'ca
7\_&,KV1UXW@G*a`	7jc(tcδ*#z=hEux@F]-4TR&ƺ7Kʵ)7,[C
lXAМgȻOb(y[yOQRW?K/aIbq\LnYcQHe97
h=x35jjcdT\b?bҰA#0Ɩ-Q
n[Vdb::;$(עej=f*QroSM
4+eY^%SbpT$-Q1I`[U(k&ҴzБHp@)ᇬG;Y-7h
Z6~t*G#.w=rcp1jG\^\	h,xK| UVCcZTmO0hFY\[T9>C#7`H%4;'ΔbJ|
JC;:W6,|,co9݆@G
~l$>_"nQ8%,I,$=!f0Ăqv+_ewө4%31djBtڮwi9ե4%m|::հa(}!]GZ(VxBI<izy,Z+-jUY:1i9.alU!W3.Um،1KiXUe@gX@l»)'Rv1B|P'
!*NR)x)U
Awڷa2օc@h_SJ#*Ѹ9nN.C=2jȻ;/w+PhYn,=UtV֤ٻ; ߤRo2Цj1W9.5P+soʉ|d|ٶXF6
|5UsDiѝǸg4Em|]u]뽑nG{ i:\@{x"nZ~h}+K%N{}X̐Heuaߕb?/A'..yF:fqo=S΢#6)[yDiJx.cy/G0R3y<F<5oiAGqx=މy(פiH<RZwwcyk;{A<
t)@G1'zƳ/TT(M?S g8},cy&r8i
y|70wo,\w4Ι|%p0@{ٽk
\RLk./i4q*'%0e9s9@Ekk8j
	
)
kt%.6noB-=󊪛FAn9DcY=[BnJd'Y~?x[jj9Qh٥z4,%%Od7غUfb^2ǵd,Ldtoha]Ho4eO7+Zi/PKF  6  PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/DefaultXMSSMTOid.classVWW%3 @K1(jBԶtcfbfbm圶Q=fIgᐙy{;E%4ЌrA,N^CdX7u Cc<q2Z$DchE!m
YlZx1ʗh۩yl8g'sɩo6j
CtpJ+4[3-Oyΰ9>^6n:Zir^+et1tF*quQ;p$jXj]Gx}x_6:aY:khIyS%_TGזv
BDx+a+1Z*h+$8%uGqw?-ky9C6НcKH2t<E2v3Hûe(3~fhO]i~1}1:a$X&	C	$JP>x;_v(c	G|P
2'G#>rR
p,r /cT䥇<!R!"ur\CNy):ButAtWGgE3(HsPP0kV @AB$^LS(ӃBT G(Ӄ.	ezeLzQ,(^+^
^ auZA?B6huzթ/^S5`opu^0U\j{zu:3q's0Д(~j;/@%<q5"TOqr,

y#hr;I͙l2տ>|)+Ͱ5-wcjޱJԥUFUs~ĩ&BȪVmkԱevO[ⓑ> H
Z>_ڀ77
]#4J
oSD׎2Xho㝀M%BtN5Onnn[k]nkG})wuJLgx;ڜ
O.>ঽ$w^$ߥ)U߁<^ƞ[ۈ3+`)#8^ᏊlgD"H +Wb̳+#!EP*((|\HFI!jOI!!tČ
jLAP: }Xß]|F.tsU@MX"<`ׄyaA?
P/=zE!!aEЈͼ,$Nl/U+Rȸ~z
6c0|Fz5|_PKeX    PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/DefaultXMSSOid.classUmWE~@vXVmEKk(j۔J6XUq,aaM?~ǻ/!$jdfsg{^`
$Эqu?Yە֮iC,^(YVn9u[?й+,#[}gAU8el%/JfH=~P\Q3]Z3\\͠-5Ŕ|bӼR;i6X7BCܪ85S}ctnn&$q;iHu;FIիk|2uaZe^'x!.E!A]O܋K
peVŠr/|Ӥэ 9c\Sh
nWBawwh$҈gJ7sS2
޵m%99IVē^ sRŨz'@Ԛ&:ɟJ1ӪazWq57XgCS9tf;o aq~27#6E8FCB9YpA?tPw;(ɜpO:SJ7XN64j4Ֆg	_2:Q2+6Z+lg,f_3t2-$/e+	ذTwAJtk	6^bխM7GPGeC8eW߁8v؃%a߫VtcMF~!qP.O8tXv2ܱ]#"kU#gHQU2AWm
w]C˯$UУ\:gLRbԢIu.|{#\)4J}<5G@,3RS7gha2Ɍ0cB~BnIEdc9Pm1VxFFcO7H?
t#'>, >~g`!qw3UuTUՂ$G71ǰD>@B4}tͫUuSK\OnmUI䪬}'	x]Ԗc^m5
?Wϛ3~ř _I
zJҬPK6G  	  PK    A             E   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/DigestUtil.classV]WUݗP&	W!P6`iUL.a`2fn?7/kO>\.d&H@=޳>Lww (фfй7yf!Y^dhM]N0/B" *ÐeVԶ4HCĹcMݑT6a.l!痜U>2:p'~2;7|4F;:tB!vzSAlAޣ\zQHTCjVIZ^tٙI
d"э*qG::<l{WU[#1tn~9xSŭC(ÍH(pc.ך(I2ÈaPwJ[7&7"p+>TQDqH0F.N25.tJ+GrS:G|`aƇnP>%ch҆VĽL>A|ΚEᡗi#>KV|	xICt
BN|Ut\S*]!|欌нR0ua;%@Mp꒚U11(N)|\j JQ_*Uw(L.6)s8M59,H4@<}w9ijJUayQ;Po!|e%։o/mߙN.u2 62gpB5#в#m^r;A.M[hVԿ>o},cUW.7w{t`-u
|0Mk]qy#פeo1Xc=ͼ!eK
8VI48C$adu)LSI;pl0<U4|>wahڄ;?hH$߯?I	 iiEv~ol/Ŷ7hCDUM/i.+M-v\w5JWۋ08Hz9C$W>	"ֿ[7O҃`
#HAЭ+%|c%|HVkvvZ@@S__x	e-,<e@zF:rDJIt!2_#]<#9O
ׄez1Hjh'LlHPK1m\  
  PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/HashTreeAddress$1.classA
0_j5U{t!n@LCkI͏bx(1	|0x	`>G0wGwUѢ(|'g"Tˢh2HZޤ0Җb
Uɖ;*Wppíگ$Ҕo	)zYd< PKF}      PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/HashTreeAddress$Builder.classT]k@=v61nVm$BׂևӖi2lb|PP
 x'IЂ&&073s?~+
$z{i?0=&[)@vR!GQ*41cŰV4G"e02ZH20_.(QS!["2mt8.Zb_ý΄Im0`SWu+X똷pPd;X2m~"RuH0tY+U?{
OIUt9Zz9U%fadӔ6/^~6T'H7ǁðR%G%RWР`s"tghvٮ<jaAX$F˵ .*҇p|pK<T,	.OUF}I؝-W
E;k9L.<$ -Opme݂[PK!*J  e  PK    A             J   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/HashTreeAddress.classTmOP~t/ ۊCQ5&h,>f4.a@GY"_zι<>繧?ᅊ
81`a|Qc8a0QdA-亡"ů^v/^,+|]E

TIda[wNb? ;JsL`A9]R1Ӹɰ~TqiɒdoqHjL%;kĒkcVV4MY}c^Vjwű.=gr;0C~Y"<XF!V5|bƶzO^mJGuIUUK[[ֻ72VW񆈫}EhZw{qkhyydqS-aiGSz)x*#`al`Had$	YBxe ~nrpvkG(K=U>hق~Shd7ya삖
'X-|57k3_{p2كD~饋3nZr<imʆw$fi}kxF"ŧ PK3O    PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/KeyedHashFunctions.classT]sV=ג-Q5q[;@
֖(4! Ic<}P"P$#)ާ>k;S&xL+[GG=gϮgm8$2H1do?c
Rgl2e	i
ǹn;-mM#ðǴ-ْK1H#ҀkT.gY	aC-up[W۷ZjCO|70Y<+7FNs^Qоnsfp73<>OQ`zE#XSPԏzhJnL~`P
.g`z$ᐌ8PyˍF?:!4ZpMpIR^ij8/$|)
}w#F4B#GQe{w}
eJ ӫۮz2=I"_Ep`Dt:}W+V&ZZSaoov;y8Yjm˚zSkjԍ4ay`5WgRFѺl0V.aAp*	uDSEK%s2,.K1A%T'Ѭ*S}94t%e/Ft-7GJ!<Ph ?pusPc_=E_?Q|"-FPȬ	1.?d|7c(m&}dIaH<OIy,Ɋ
=VݎEN]˝ĩGӑKMLE$1ĮQŵ.<snvtYkXx-vՔ-tҥvѓ^ PK͹F    PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/LTreeAddress$1.classA
0_*=\x ZbRث JxlxX`# dVZq0$ڷMp~fۃ'Z'<E"ꦤQ&k㓭vL
:m%28@:E'GgalPKZk1      PK    A             O   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/LTreeAddress$Builder.classT]o@6אZ+P 1)NV<<%1uNE? P	$~ ?
8!R#[xο~	`
9 9wONsu(wQCu":$,
lZ|
*0c6:M$αK1$
E, QEG,VL
;ŻzY= ʂV3NqEb
FO	<T3 Udj/*/kO[$4I$2W?fBڏS.).g:h`!O̖;0m
2]r(½A'5H0ji1@^e:Ekh񅤷Q4Fr	W]Y⊭⼭}A~t\Ǎ^"za3SB9`N	mJ	af\-N2K8ɍ_`	^=̅Lf}k\
.e PKRj
    PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/LTreeAddress.classTQOA-lTPJEAzWjLhC%5!i4<MP&6(Ifgvݟ J
D8gxzmueAGh,z}}k<Wcvծi	Rl@RAJJfX9o])#yӘQ0ˑDRe
]
F-y,0H!XB/u]rrw%'@ϱ|=zccEF'eęl#U1Ln=3{B9JPr
vhZ'34ܪwZ0(jtV>C:~`:AtEfVs[a-qhqU5gN&mrE
^c 0/6'DژRӯLPbaK^ϐD묜Ю6N(]q+!\Rϡ>cI{}a!h[+a
Y5cZ-*fi~u
sd)<7n.7ΐ!OTZ7GiBMNOPK`#>  
  PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/OTSHashAddress$1.classA
0_j5U{C@DЅtHZbRث JxlxXb1dDVJ7Z%T׷މHVR*N-2!mM
#m%36VG'[]ğӝ[I)a"c$4
iPKbz՜      PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/OTSHashAddress$Builder.classT]o@v4%@WcND <4T<X
vk;'@*G!v'H`[xgο~	1*rV`;ǎC:<r,'<>û(^uwh(ҐGAŒe')o?yÞ
Nº
Jg`{IЃ8J:JXSq^ZțW*Z;yS!eFoMv%6%xoQ_F5sQ'k
{񀨳X=QڝcnHi%sp^&SkM'yuoǣ{Vvȥvj5T<)Gi>Б-ѿDA':|˸B**M3'2sUsmF,&(3MJ4oMq)a)RdNn[K
&2n֦V0G(nR$}DPK    PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/OTSHashAddress.classTmOP~61.P&(DAm	[HldˢS횭qvO~?xV$:t9yyo<A9SH2hz]Yfvl䃥Y~$@{U0~As\'|ΰW8V:헋4Ri0l/kQzp!,$sX`عbiӲAk1MƱ%QX,`8n
ڦFcescUϴ'!pc
dJ/}1$
JPPP2(:ȴ19nX*Nm: Ql]7GU
B
fkiAXkڄ3<^(dUGQra7~bb,~cM	Hu2l]e)%<c(Mtj@Xf>$-GȈ]sFl@dPz䩑#
y1'A;Jx)*_QeU)tR?GthCIFrJ0?Ep~|)2)؊D&6̝ѯQFءm;~PK5W>    PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlus.classX	|cfA`n%M5`DafvgVU{XE-$h޷=}P73{%k6d|{٧_z s)^T!@ݵV-%cm#{Y<7.p45o ZZM$֧ICO_=TRWfDKk$x!AajSwAA'c
ԢNL%МJRdd4e6%IÙLu}yh8SNng^#aSXz:ft/+1=cwfº$̯D]eW'1^5*8.Q.yjZ&wb4zWrO8i:',\(8gR@C+p¬IA3OFuzu=*P-
Zy;H#'
D<WRVDBit,;LR3?_*I~}KVKuN4jfۋ	 <P@~eShz&ldj\*Rf9)#tDiRPhD)JCe]jjf
VD"zrY֎[ї2Fluuֈ'ں#<kpn=XKJH7Ad%*kp^vM&7h^`CK$\WU&W^N	8Zȯ.E~?^\MXLz4c#yieJYAtHuz38kIb5]kh#A$HQEnL*Hqn+H		isOUQ),QN8bm
iegQ=ma;ōMj"4&yfOSob^-Q|7a'yŖK$oZ_~9?ĔXoRV\b-eEZ0k~YZ<7Żq&ϙ9(
ޗH#2C|
`8J>.|P5^&w+{fGdt'X^GN#fܘ\0ipyo<Ԍld/q1pqY#EgerjT
̰#F9	x*jJd~clf}P;
+RɈFcJƴ%RҸcgxB 88{R 8mz2f<ROXZu1%g|+
_UgV%d|<EdOC2AJeV5#Eg`lˋL-4w$ZaIU=|&l=qN2~B>ēQ})uD?_
S*r)J<}TIʋ,JLpy'!((TkhmOHH*@~KlĈtclPyg?Vԑ4*K	ȡA!`gee*:9s䘛<N
Nj[8)SBփХJR2/%4\IŤYT|tL2CfRA3EmLE3p&F1O
fL[^^I̠"'t{XXce1Ri
b-a gtRCّԩrFG2eXuZ"7t++Z&3؏`8d%Q/2-pFE	Ĝ/`ʉRcXZ*N*tUoV񛸹k
k8D)TO@Tǌ'	amq@c~,t\wYqVI-~mKCd-,b+QCVvݳ6/Oda20RM Ck,o%[)d.q\r:B.eڃ3U-匶GUCX7WE	9wϪ:e``<rNݸq6Nkns: ē>s?x6Z7Hɪmkxbزi1c=-t1\o][TyowVZ3iswB'*cUkǇzwmػ-q|t_6HKIX#,:ax5҇?	_mԞLNL0lg!΃0(sR];3Qt'յKuEQ9}eGȣz0^oؚ5c
`l`lZLO%(ⰋG[M= :x R0!<F8[䛈.b^mrovV]b`}}1L;
䣺׮C|Fkwۉe%vfN-_rny4;_Gqr۹O>.MK+ZeqWu<Gܪw)]z-};|'x-|sZ3q<RPVٿ&T%XMLߏhi%ЗTK1.׎_47PurL :M0ev:YuFC*݉V+ҎgڧJ,QْV>yTb8ƑGQ-U	w
=::1Glș
Xp3[ב2gp;Q3{l,҅wl-NTzeIiͪ,sNű2ۧ_"63iNxY`An
[9C
X6q`w*	`2Dp.Ĥ3[4,%뼝y{P0P0PB)hQpu4<4Aߕ㶖juU"KTj(V5NE߿PK%  v  PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlusOid.classU]sU~NR۰mbLbkhPl'*j=ҥݘ=a3 ^x?=$mPH&{Ξy~篿`vD58Cswk{۵%h:s:5
05jMZ#r﬜حK/`sW*1xJe|ٰMQo_KsŶ% Q`2m/7gճ])s,QW:1Nkrkgl%hIPn$D0})obaL]f}o:a(hJ-z!N3-~!b!ӃT*e980O	N0%#EϵPhKJ_C!پe[tSDu3h+ɩ( }tWĔ;ÉtWcyQo=x%t|ܲkr" 3v@٥JTt4
ԕNh PmЧz7_oQ,RݴW,8WڪV%s]2CRNٮ\6T7f'aupWDsg{Y3uYrklQ:L &AGbrZ(q$^_r˫:`w(ojM6E6ܒ^zN_[yVᏆ#/Q\ۭ;]-"w-yo\W4}AL<Jju
^PJFEjG+4R"XF=M5i)u?!nۈu(y-;>nNue>{8gGNyO	İF( jĶ8ƉAqws(g PeZIZiH7h?1Tpxa ֱN>2{xo!k%RDHC_77s{xdD"_H?1nO«Tsm|+Fe`%⴫.pPK6g    PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlusParameters.classU[SFG\HK&؆14ᒖ i@kBKyHKxLևvdyL?Ȳ1%Hg9ߞ?ykphA63n<iq\Zdh6mS`hWt0o-n[ֲcRQcw /]!͂63dՏ0K7dkڅJ'zЫOE?N3;n!lƎ=id4ܝtJ\]emo$mFfM=;.
yaKsTTpV80rl iZ!Qc6~Ը$G
Qq2ďu7Qeǂb{*."%3`1.UNx?>Ҙ8)q=Q$2t7pY$#Ch#cLŸ#b	;/Ceۆ8o
1bJŴ?Jp+D,nRzTYฦ,i/gb%<R)nSu@<ua.3,T!
S?S9Ҵi8ށ_b(tnͺU~31|pķĜc\RhInKvK_*CcHsIWVrc+9n	wi'D5&Fc'u#U}.@0Hգ}JA	XЕԕ08/MǑty9#d{ H
nێ6L;-چjAkQݓiG!"L>[CML%lt\7vPVSGNYK&:TPusܲUmY󄧀2DPhaDg`s-
Px4ʚuIwD
́EV?%F^=z{3hoV%z{+Jv$~VܥPw*FTJDʟ4_W[U|$rL&F-靬bF>Cf-0y%`P_OA#75|UYIF'{:D\Wj
UO6߅S
PDfXQw[`Ԩcؠ74*PKDA^H  O	  PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlusPrivateKeyParameters.classn@$iNICKi!!KlB*"c{RּJl؂.x!u($@X\|2BXAD[|k
m%t0|մM
[-ZwL[
Ǝ.\i:v11{gMkbPql_*=6Jzgns)nvq$V1IZiz[羴>5kv]VoK" $+ܽ(RRy|@u3
8_UժV_lRI"^V`_,apk3ZMaˁdz9@|xM.cHC
N8Di_Vͧ"9Ybb)0홧{WqC߽tSSPVaUxJ:*eU̑mf=!z!B;m2)Ebw
e#9^W4֋# qnJo$3S`<9=yzi@<fh$ͿABPK́J    PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlusPublicKeyParameters.classS[OAv)[
(Hk[[- @iҊ"Ou\T	H|U	<3ƈg/7ٝ=̜23_~p@LC@'6Snܳꦰ$C׌9r!˯i2I[O%CoC^Y$PIrAYgOtaUױnFka?R Cm=aHX6[(2ﭔwG<jGJr:1
)<y0F4004_AV%hA`B.ےc-K+l·v&<)gy.P8XSJ(
,\k\*
gHXyAoBo7&pAi".1Cvݿ	ԝa:>N+vkE`H%«/)-$a6Rrq:~h16S;+F#^$8RTvc{tq2*>,S1z[ޣ2}ݽ	
E$R?w"U\; ;@#Q/PKDzS    PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlusSignature.classS]OA=Cݖ-B-(HkůW!dE.nwT	H|UIy4g34%K|Ѹ{ι3+B
a`?}\n	[2p}W1$u
:C>Nooۢ.בbעl4
#0T\X2t}g`:>Pp@C tj#	6Y]"eݕG?RR\(=qa,F6(0tNCaV֬U*т"Bs\~oN2ǲ=O8ܛFMPN1dbB1pVk\GDҢ(k\>1J1n
ILE\bgC2	0S\(N7T*mIn?Y5^`έ#I DЪt3Md.W@$wѷW9'8ێGQF\z|%7Te^:ksLc>2Mj"=	FQ!ѬCyPK
Q    PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSAddress$Builder.classQOPwkWV((""U4%$[]w3
m;i?xN7Ƃ{dIϽ?sݽ
H!A1"#4z=	;]
zmzۃjudzNx" J2e:
"0R	d.6c fd0u᪆k ?v>8vt#̎{Ѯ@,Ĺa`7jG񟛅J=R~!G/:'MlkN
!NF3\6~<f9qc_CjMTsrbLctڸ|dd'ڋdKG[7J/2԰!~8!^Y+;GP/=đJxgKEH,Z?1kY>t	kcq@Sts\{V"wȻ#o~]a9=MB>V~`a~
&
RU;r9dFrj$_l4DY2]<qPK     PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSAddress.classSkOP~(&"ΡxAЄ?lB4>d)v	M\\)uE<</ cCH)Hsd0̐;4ߚcmB
۵')RE#
TQpUo^׵"BG7aQ'wxj"Ϡ%ZaM.1 ǑGa_0pǌ?pYCm2nt
rë00Bkq37-j&GI(F!y8n孜8%O=Ѧ1#*
:Zڎ´m7v۲MAe
w9'mjƬC-%*^=
Ŧ~fEпנ)wVE
7i!&z6Ђr DWҳ$=4
! /)R8LLRq\3XUCaL$^(qG դ|<Y+}nW?aLOq)]c'!Kz?i'd8I?Azhz4q~tn|fXJ%6'PK52  ?  PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSKeyParameters.classeQKPMfKo*p`E 	_bXvѾUACEg`}sι~|~cVd5gsߎlK)0@Y	} "2t<d+OIg\4c/	\f`(ʐSB2T/'KZw|pkؚι~Ldbc&`PC":C=Yn=~שjβm9&Jq%UZ7)nm$j_Gm}uޡ">h-D,%IPK0L    PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTKeyParameters.classePJ@=ƦZ]ra6v;-)E!D3jA\~xS
s>lxpe:s!k)+.u]ْWBS繲:תmz*=ˊ̞3tY4a=~>i$_sc8IƓuJ[U*cvoŋsQ<!"=egv4%bNH¨#r7HKC-XlcoiH
b5/PK9   f  PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTParameters.classV[WW&䢀j(JEВ6!$&{շ>`m,k}>3C8dm쳿}g?ǏA:3
bd$WJh7sq-M@Z5Gt촒UBɫʲ#MHEFw_Kn-.  L|ThJшEGӱūjҌTԮhji_B@FZbT"15{^)@S-5C3GP<0c|hC>z'epKMf
(=2MeT-!Źy^ˬ++ C*
[
x
x14s|0u)x3	=HgXF|ܿ54%.GjVüxv5p䈌Z\HBZys1J8ęJsw<1)DT
nzR75ΌOaD2NaW(%ݴgFK9Jy
E
 C<c2qD8_þ`⺮}.eiFHyS^:͜v:R.`̇8ǋeb.Y͔Ԡ:\Ԭ)yvAu8]PQC,C#yDE"!Ext[f5Õ_1~:e
nZV]*:N`_tJӛHJHPqRWq՝eE/3DnP&᪌%Pmr
G5DZ)<j;MRaB)fȋY7
2Lh+gЊft:ݞ2Ҡ.3&\u7Bz%3XAOU
We%8
p2Fۺm}	*X\1/\4Rf#VmUBKY*P̻
_]sweŽE@3KQ M	SI.QNUʭhwIk5۽Vdvj_n˧Wu}"TMޑ"pRhOjmŗ9>|Vަ龕o֕xk]mtz?tcX_0' YvEW;ҳ{H"!:tO>ӶW,Xs;XW/hم։5<WWw'y~=?;pˊs+~ _ЭLg頭	"c-Gח+|]v`́65QqA6f-Tf>}|)d~6
ROC4;|_.u(h^NY;FBړ.!w.!muwZGveߴ|lwe{eOnj8
n!ie CE!" JD%EDE)"wIKR^VQ@(E]RDC".)"%EDR.QtRDG"{]RDW"}.)"tIu.]PK  5  PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters$1.class1
0FhU{$N R,5?MjPb#{GaMS}Sºx}\v+k)J;_B4Be$tdmE}?&;lJa-p>~aðs10 PKe|C      PK    A             ]   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters$Builder.classVRV.4mRr&H($`'4Jo|jDM%@_vN3C̈<Տ:wVϿ ̠G
:5t[`j҅^Ŭez;3mڵ]q|~ymŶ^|$k+mHWxf*-гcg+E/ rGC*wi'{<hpFӮV]fW4򪺻W([f^"/0˚#M[t!4@_['b򮆋x"ɓ5sz)daH`4^at;O7Nɯ	I
:R#]6*¶4)K7H$׻/iL(0idSVay϶'63͌J4ຆʣ-Iw9ҙS1
ni;#'%i\2q2S֊/\gE5<CA~9K$[.KxT,"gz$cg:ݝ?|r]`y%\΅j:C{a)k2'l jnS7ᥕKQ;UyꂚkBۥĸf2X`_;{tH
)g|bbBTo󚢔LllfSL1ӬcM:rukLf'덓<iۓƗ.bEhJEeq$urgUPuvH}Cbx˷3aϷ1N?$d!?qfA0C=~0@ #<C/
<\SO|ʳDAVGWa%Abw8GXU
}֎}3.z<=
?klTw\zk<]/(3;Ia1?qT?Y?f(X!@ Yb 
_G
B `p,Ͽb$H[FCm$H7`EJ oG*/>q{(;s?PKG0    PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters.classX	|f@5KLP J$$@ 2ٝ$#3AbūV[M/[le+kOk-73.7~Mx V(@>F#Wc%QմZhrx2jfmwkggk֤OKjR,-i
	Z'zKPiHǴdc (R(h5LsI]]UjZ&m`JID PҧY]IM۠i%0f>6&j;#;Q`xyy9swf{5PPTRYd}P0_`ABP<ܸ?
ZLڵP"\.rH,Y3$SJ(pUK UiMlbJ1q`V 9d9r(U5
`5/q.6KS{-2&MHMNꉘ_@$.zM7#L߮	UGZjv)hXs$dЀe,[oBFo4a!,AMJQ}]o
sw;Em4qMjSȧURfI֎MbF`p'G%&odO0,;V߬6m촨 {[2R8ZRq3/#9fc6(\E-WcUQ) pvuTĪmÑHթa&ы>+uG{Wg.1/*^#W@{=1fE 5YݨOv^ qJS+ڧq%({HEOW=qK@褒&n,ø*12LBna:'ϫu&u ٔ	%3d-]1Ci]kV7f\*X}J4Yl-ҢyK$nw>{ʴ(r^).;.˶;' w{ꗿ
ҲiwsM{쾻o%nan.AŃ8O;ŏ;	\
n'(I7NO!$>Ie0tO&ad/>JHͬnRM5sl j|JsOEV[gp)
T!ZQ#696I
yʞ79t?" ;՚m];M2YE.cHrbO5xGF"l_+@My$ȋ#ߏsݧ_i`40E}},v
D7j
ɐ2ٗP]h6lߒ6ZNnc6;b}!ۋ
g,~ Cڋ-wN;D8y2l'?eKeS,^2`gNB~%kfA(Jfg;in<ɩ9y6ZY/+ݷؿ4??6}Jx=L(]Z TF<Nl?X<}LjF0&n*ڼwZFR㛆{^5)x'7pmLDCSl(FRF^)[P)dT7}}zw'+ALj`ŭhuS'<+8'24:WՓF4D3|JgN48*bu6\YWէpRFJ.\?=7ddjV3b}k$ozYRW,(yg(X)gܽ䬴MR$~0{j"%[c`aOykxP!;r?UEwFDBKtꬸIVD(q|D+bҼVĒ)H%J*,NrJQy{vlvo(Lg)iZXÞcPR(Ŭ0?ƼJjgQƙ_ֶ8NDmFbUS)Uz_U_TXTxpa4TxHanaM;7b810.4II&mR?IE6i?(+VbDl(wanRxU
ɮe
>0".]IOs󃞣Uwq\qr}pՃ~z"7x^fdz)Iv/#{#`'e;H
JPaY%#vG
mRvB_ʡ_\qEJ޺/cAN`٠/{g/fsс[QJ
}ԁO
E78],0Ay'N`)
<'V3*@k OVHPbzNY
xeX8}6) lY޹p
w-?vuD bc}:CLЯv#qo%H Σnw9S=454%<
{h`qE`̧r/q	KiOSiJGKSç)n1gj Oǂ%Amb<DqCyCL!'9YSbP0"[}9T.,F6rw\Q߸P7Sd3>J8r @stϦM9cxc]hϒ9%:$JrJl!J'S &SПVP&f`KL;CObHbJZ&rjbĀoǮʃT)V2۰.̹K0P	gÅ,/9D-j12C}:֐W;<7UzrA6l}:rnG6;Zcv>qUR%GonשmHO)7eA#F&Z!pwűcqv
nO'>%^<gQʨbU[N_x(}vln *\y HO(gP_,RPKq    PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters$1.class1
0 E*={pp7q)P[Ҥ&ث9x %V[_#؜eѢy%Y}Lض+)N4*^	^Z7_PQo)svJ)<t2y,Ŝ)('Nki7;']4A0`9w|C~ PK<zB'      PK    A             \   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters$Builder.classTnQ=CR)j*jPi}iD,7u..*hbSGR|0w̹w~SaAA\Cue#{K^'OGAk4^ջ-Ƕ^#
?]ivކmBiI
)Y {^(
g4hҐDuIYd7 TOhH"s
kB`/Z
9aPWq	
.kT_;O}qB(6
OUpCR_#|.L
͒R+Ocڂh^r	;+Z箥G!$ZK*R+e ȗeBo.M8"Idg>D(-r3ϣ2SP%lrW(Βb@k}<dyWcZ:rHARcB~<COCV!2 sg"1S@qc~"D'd(a}Yf-17#=V#n%rc+P8
PK17!  	  PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters.classV]sU~NɆtPUh@HK+)/iX
4(w^:xwU3=8t{ξ<{vG uȐbrhW-kgt冞֝Zų+ˮ>?S(U9і!4fX7p21qrU,qg4AdDtBaȽ|Pu2Cvh
vaG`*soQǰ;Ҧf12ٍ=_I\|>tra'`z'ۣ/0
[TMs6,RN,jMqb&*Q̹Oxa3+9C %$jcPԫǥax2FQeQpme:&!W<Gӽ\7r"@8q)7e$ǶIQ(H/y)qLx_d\Uʙ4QJfyDd^qCM5s)Wmp!Vϭ^5檷*.Ab'fŸ'|zӘqF!:
)x3d2a2&U^R@EUT=[mK>Ds
6;*gȶ[8\eNO:V# ϰH@ѳ3o瞢 '4ԝ]mᒂ2Ri[Os	)km׊&-^㺗s[m%Z
qpF쳘r&d+Ρ]>
;mj8\<;[<c/A1'-4?yN(M)q 5ko:5%3g!7ytr2(yqSs]Nȍ2b{$&uHo寣*%}a`ߓG֑TtaWJlcog]!~{B o3O𭜕`<
dG`4R}r4}bVE!_4irH#?2;}b
>^ŝze'`O(*~=T7&=pVH$JH*0L;	Ƃ6زn7lL,]n
u3o6H-)BmáO	*>jGk0 Bn%С0|hi jLJl$?`w0<XPh(
	iP/|/6;CKvhZnދ+%ں{ߢ}sͅEuz+[Zovâ5 W|Pwr>տvECPKOM    PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSNode.classQJ@=$}Xߋ6;l]A]iiJLj7P(. ?Jigf{~}8
	!p㾣3,1Y@E t~0ţسѣ[tCwםMpov	2#QYRQBApoLtRPŲWbyo!RFd3@ء==VW#7uPl~s?6$%ib{ner1bVu1́a
6ANj9lO$B"M;t'BX>v4C-
+P!d>2yv PKi    PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSNodeUtil.classWwU=KôX$BXX!HK-IjI2mӤ$% +R70~x~f!)bIdޝy䗿rralv(К-6ܩLeu45|uNzSL=qמ>nF1'\㩠
mVo r #`&іA'ᄞL*1WZ'FT,iIЛwBo3L6m@٨nk	m;|u%ft)|,X^r!cvP%Uxq%=Z,zoOz["vKq֞@7]E5a	,euK{*jPFg$rD	\v4S>5#ś|]%ͽk\R SPP6*VOX|*Z;k;UE[)J%Y{дu*:XrEޚ
zt4b2NDW,a.<ϓ۩Gf)'̶XGKb>[U0@d\KJ"/"U%^ң<b	anSq_f۱CBSD,W=f a	-E7hIRͻDg$+kGUD5I)c#fe;kS p[@b@u!z]jFLhPD277#aJzRIԽF*ơx@Ńؓ
vgt=Pǽ!J- VΔrKL%L-cj%SۘEy@5-,=z>lf<΢M'"f}tw/I0sU&#xioԗ7w
8}4yB-N\}wDG{GŻIq12c
y~<.Ϩb Bz-h'L`p;yW,'Z2S(d.$Xv%h;F?z		*id$WNkzFȡeCC[uk-{öBq+ts{njl[i-8Mh:ZZ#KXXcN]6вB/Y,{׌*q49tˋeKd=F}GsiܟE|1n?yG^%Qps<1rhMi;l"|!!]QVQ~ %*%$GSDu9H'v<gy(ԳY//:%~6FƎ񡹉I?4^#ꏢ09;=2I6W6l	l" iD>YeqO})I3³K-hG*JCdڧC*JCdڧA#yTRC*H!yTRE̖N/p]n	)s(vz{i`+j>vhȝE~(rx,QpFz\(
%ЇyUӿ4fg&=L/|2rTjH$v!ZPܓ}/
xPK&    PK    A             B   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSOid.class;o>SNv&FtҼ⒜Tdʂ|b`vFĲDļt}F4#'#GI~pIQf^:#B=DԚ21fg 	 PKG      PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSParameters.classVWG
ayDk|jVjL[kdMVML6 ڷ_)XΩso驽!̽3{߽3˯ }
P.`
T2l'xZχpr>JTN
QYWfF6tNEA=hP-!"îpL*e8+*HFh`ᐧm QJiH99"+g9Iԡ^@F8:sj8t<]N*{M2bmfMob.f(Ma{NPU9*hz\	]kUp14d%3ܝlnc+b"nJoN1Vձm"F}}n8
[)؁<𸶉bCmjFaE;n+ηiN=":I3lrR+18,g	,p?9[kpͷ?2tʦN@t=@l\'"cr5SDBս c#ef|9&A
YT|qC|cm4Drq1w79"NpJ5qRI*\RZyՎ*Qt!P)=#"cD87]#Y
;Kl+'(X<Fܚ<+'1)vNc0C[u`
2YE8V/LD(8GH$2b;.MTf|ԶRbF&"DX D*JjZ%[<{Y[KzjDJ."Y*<s
b{͒H:EᘔsX_'񔀧E<%))?K:J9Iωx/nĿ\n]2ɥxKkLy_Fr--= r!Ü~t6yxn=+۶bN^&$dH>K+bnÄʰn !/jd਀OVKg<VhAQ!c=YG*6Š6{i49_)CZ1[y\{=a
ƃ.:z ěާY>JclFwqԚӝmkN7uՈ#PN@ưa7?|Z*4*v	CM|;m9^=Z̓[?./%|Z?`?l\fa81}7뺎	[t,qgE ZHE2*\.1Ý?p:< 25EOv/mFFcwpzuKyݭn3fK]e#0T8_Y
0 d|oo6qW-f7W7Dt"o|~C	T\۵{%ԅ7qwϖc[7+<`y1'
vMnǱ˫m8vÆM^cñEM7D,EPKh
  Z  PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters$1.class10F"
9{`1DR Zl+9x ex
xXachLߔ줰"\%kZ~41E+K592v3Dh1+I:NJB1>1LJVZaǨw3( PKGʥ      PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters$Builder.classU]S@=[
5`)b*|c`R)M3X,mM³?qoHBuRH7g A f0,h|PRY7j^*q(Gu=z3IkCP㴬jHP̫C|*#"V>o.P"Dh\^\atҡ8."V.l"(%y
襰v"n v["ΕyR;bhФu)Q܏a'b{-ʥVnOUdZ

$ "2Q(ܕb.k|ECD8ec1|cιRW;SfqͻR}(oBMR̈n:Lu1n4d꼮)vN ?b6?D։{WёkL9~cX]a .EqFee,E6q!;A3YLU;9lr#
bY:ِSs*J%U[)ʺ;XWP0įa({y2mea^vY6`Yv;5Lv{K<vB:]9)&HM;5~j)?>ƟK~df	!a"X`st;xMN,;E*'ۄ5E,;/{#3@+X8YA^S߆p
6pnXw6MX80;nAsaǐoPKwg'  
  PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters.classY`S~-B؂C

[[ih)mrۆInSpt=CLH;q
7mNro{ιE֒wx	 υi(`aCWFBJBCWCȐ;HT_ަEv+z:ҦhʠZBqi$
lm~j7GaU_\2J 4N
⚚gugֻ0efȘrӜ/Pڧ	]`o]n:u-Uf-aurJ@vLUR#TṖXdkO	dGmH
Cz$s\5k1q٭En_>2`#WEeAN.egdF6blD1Q.TFBR)K
hu {"}cchogcM_:	ɸ,+mW@$SFv_pӲepFjm՘5"<ֽ^//NB2H5%7jAۛP~'$l8X
	5:خd4sx ᶭx2y54xw6-%F`Ҹnсm%a5j|26+J"Q]h[zv!

e\qvR
|%8w
:eLH/=~%ݣc}^hxn(3ryKp<$$b
0E2dC2 '۷t#Oȏ|G 	'6[,H:%0(#,"XZ>q*~{J!X{J[N552w얱';.qbD.AIko$zۣzի7%6gl+YVOQIP7xKUZ)L
oe[!"%Wehc?mȜUl{e܀e8;\6*pXc.܈9?`lVAC=,#Pj:FEL%U(2=~g#i.YdQ^_64O _\SÚ?)u	`l'>M?hQbϚ%ޣļ	.>4o?wʸw&={])6ᰌ#<mbP+]{EpT1$ʬi_(mY$xctV)1FIx{W&X7ow@I8m̉BwX֛8D'8N?f$LAWo=K4gmy8Y*k<hmiR塇e|<;M|idϙD&6|Gw=;Vpm`wg/ uZ^1G>.Pn|yÜM@ft%,Oe?ť#ޘ:H ;į(GC<od:M=tH=2#[`tYN?,0wP _b!EN'N.PnO1oxZew184Ԙ	-ƿe<gCx,E|1zWP\9*!UtoX(9M05e%lDUK:ͳ)Ǖ a ih˔|Yi*C<V:#k`fUs"SoNẲ.%{5dn|*R-\ʬoV\hl@E-ma#aqEṢiꏒK7sxECRgfbVјv߸FA5,AsJ,U7Cƒ3cdH#3_LUѤD]xXLՌYkA,Eg $,)kI,2((q)Z:]̦sxWQvvn1FR[F34O`(jRc?y8*;Io]qOUu6^Y稬*뜕uEun.+q%ưj?+
t_:n]1WC?$R]Nk?~6[q
Sg@mcz?$:%x򝣸b)5ݽ2c=%<zxC7;f4yl'1c;Qyi/ȍCp+s^{,kȾєiY{Mq##VSAe7u#})KqkI˶;N$di8جb[Ncv7v$ny(>lXK뱅M$@OoC74ܛ'R6~m<B	mRt2rhs'$%F拐DлIJҩ&A2"ϣng8rRСެ"*]<'񙰭{_]-UWܘCbs1ZrIz5|Za|3I|jpF%4VB[$G#a f!x2H᝖ϏDHsFllfsl݁N\i(zLǋ5@,ْe9kXa+e¢L})h%T**c
A+GzjyboǑp^{SӜė$%8I|Â超J >v&XwHA!`XD:84
/`/3Qa<f&:({2)axgQ4[<%5ZKk+l)u{[3;;&|O1OܮDʞb;$zS=TϦT#b@	ï%07 S]H^_=Ş1r$PZ5)'Mކ{p915E$
fd8#&Q[H.'hceN;aRuDuؒW9K,Ħ,y%Z3dM-M)%fgϠᶆ-RrF!ӧ	&5'g8N7Ry!68O,PK} Q    PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters$1.class1
0 Ej5U{ 8]\jK${5Ċ7{xXaLl-XnZ-:W5Woؽv,K\ [^K/[,)B7;`BW"b`t[ŝ.`{z&}#GPKSWL      PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters$Builder.classTmoP~jt*)*6#Q,1j$
J]ۢˌ& \F\?{s~p[$0 !yc?7[~׳{F0;mz7?EQ\~&zu+E$X:n[6h͚֐#8AL'
;7$TOg("
i8eB`/[|a喝4\>Uב<mē zLZjfMUYPERsiʩOފGؚVheYroB{Mؕ!,H?+;
p
!ՒXvi~Gl[a\.Ӫ'"E잆fmĺ!YhO=O;2(SIx8Q<6I|/!_O
lo&Wc,tEF5֏
=)Yp;.Ȋ/̭bnOĨCL	?DAǸ0>,
8}wǤ8}olZ4l}TxA7NPKcB    PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters.classV]sU~NɆtPʂUl-4P4JJKfsaw
^:xwU3=D8t{ξ<{vG FU]Ȑb8j;tѮZzM\
=;gWW\7}~PMC?k󚣭p;.Ca$tbE䪆Yxr10Ɉ(pdh]w 0T_FhzGء`'zSނI]aw"9sMM*cXeʲQ{2(˿ܓl6KL>aO=⟩mX^y3l+9ԉ	"8 :MlU7&`D2/PDEaAS/rbHmg%F93qXÐ(90	c9jweĥ\>HU.2Hm.S0._pRbLUʙ4QJf-yDd^	M5s)WW!8VzUs[mU !'ĸ%:|z3qF!:
+30
[ej/bJ"Wf%\"9`-Ep۳S.S,P,عh1ȉ@jQ@
unWj[piTn\r&DG-xõ׸C\qy|t$|vG*B,,&z4Yʠ3hOGN:+5OV-X዆kP)˲=͏@]YIRҳ3%&~Hm;~	G΋GA[wNrjDnĕ%؋01x7]CBxkGG8N,W,+ <´gRb{{S?aoC},:3Y)
Ƴ@Vz
FCK?"
`j(*GHǈ-ee_Ek!Hj(cG&SrrzO5ܩWI5?4[CدjbǤGΊ DiIiGcXP[m~=)EOgވ]nb
a3%ҟm8X2AE Gh
]
$:tхo-2W@'&R "8_> $/eCkobB;"tZ4O:_0b͎еI;&itn޷fzsarm5nXD}t^-ҧ5?oht!PPK8>{K    PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSStoreableObjectInterface.classEMjANMJhUH	s}RQ5)f߯o Sst>LOζb56zs>hVoEQe-^:e+9z=LW?oUf!pK'9a"M*:G;s+k]$[)#:~bpPK_$
R      PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSUtil$CheckingStream.classTmwE~)m ,$-"/VRTTL)aӥݰ;iUQڃQlhG9}v<gz"}h7q'-nT{(ڲ*C3YYA2a2Laîmqx$=a9d`o7ȾXޖ7>!Mo:ؚy0F=E	
;^*⨆c&㝞Rg!d7ñ|+	tBE:0| 0ᴉAWx8
p(4|p:mzڶ#Z
|3d۾n}9g OԜ0L{Y$ɛ(`8An8nSØY
	[6.GJ/L|f(Z,zZ^*KEb6(\U9͐Vt\YZX-wėl:7S9_u\L)Y5:0N괺i:DR5w40;e7:a(g%JP:t$ͥʮ)IŎܒΦ}
u5 z9-#/UKuQ5jL
J!!jn?ҫP\j<a!w S%9
vHy/AgK$\S0D'zW=dpJ'BYu)ѻOvH}ИX=R+fB+N>P=,٠/VOhQ(]S1Gjy/W`B-=dz&oa5&9(ᇸ{Tߏ&3䗘s\Xå?0AY_<CM)K^O~r
+).'0i}z 5PK[3    PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSUtil.classWsJ2eY!ml`Kb0)rC1NS,wv6h$MKBMKILLo30zj-'-3x}s% W*!HpL9f-:8~LM{Zjj>,.
3CzZ3܁鄚5Ӻ恏NY>8~5Ctx̥TG]ð"ɨ)%ӝKTt 2ltSV5=Perrʌ5({:AFl*lh0)u*gg"Nb;lśB͐\u\kb5{"њdMuz0Z
=k35H%it4|ԃ-k)zoL,1T<8Wd='ۄf	Q0VɓnQryhMO0MmmTv=O*r[QL*LuvhI@zP[UNB敚)t#˦nF2$}4xMF.QO	C5yl*픷{pgT-eNQ6ʓ!WY%eF6'M6ҧU2a5 Oa8C
]v:ZB7|mT3WtȐIϰ)%2tLIՇ^H"!%)*|C"%<+h:ERLJϥɩeJ%6REv?s`GnbTs>Ci<2&r[kIKH PM
(y֨`hXNlTN̛ټ-!T>ҔerIgcS
&|(LB#K;EQ窱X9	LޘdN#EBShLZN\sNۊ9|zl8NX;/rh9؟Q	+1+%	_XybtG#ry`_U^c/Lg*kt4+;:jRN*"OPIYF
&>\koJչpf5T?	nb;)~%~Ŝ$fSh===T4.SmfJvڧ #NВiEIoB3Ħ]԰~-7R	:J."nQ._Q{EܒC[;㗫EU͜0W"xiV2$P;3L0SUb}2&kϏu,+jW88^$hZGti"<L(D>C~X[[4ic@=Wـ&dqmw_$f:a]MHbˆR\ԜRj;iSa}>!.j,ݲo!~,ڳI8=qYƮ?O2~
VMk.l[Bw<!!.7_=g
?׶E 	ݣ/~lW-zH-K
Iߪ	>uMK0o/-ݴl*-+i)"-7ZKK?8dn/nCPQ ?OlꃴWI϶HuotׇƮaC3	wṗ^ͺ)hQD"
r.,E\QWd6R]`5l牛"Qh,`}PdHP$
wjj@s"|E1g&OW;uǸKz&U]s
skX=
K t8fA'x:Jبv$9poלZB%ǩ.n@IxX[tyW7m9ǸK[VrmZC
cцó.5ՁB$uD޶	#B)/sY$4_;SCx;o#uБ0F<V~ҿol.Ą!{;[;M3#
!8J:Wu0z?QgВ;4C_4y\A_>o5G9gk# hcFz¡37xovxþЌO=q6yD0< , շɑD12y7wŋdC(Z8;mYmShIHz7Q)ԍMk[|T|i/䮲WKK?8dvuaݦ¹4t^kS.QdGzލaeBh'*珀)aUgF߽!PK:6	  &  PK
      A             0   META-INF/versions/9/org/bouncycastle/pqc/jcajce/PK
      A             ;   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/PK    A             H   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/BIKEKey.class}=
@Fg[86vDPa$n\x(qHgc10? l`fa``]Ӻc
lɱ`QEC"aIU	G[_V2x!O7GFv:szOnC7ZT7PKo      PK    A             H   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/CMCEKey.class}=0F<X1[5*mIR^p(Սe{/ 9u[qb)c3b	A:#sGϩ&5*d.BnruJN:c-onPKT      PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/DilithiumKey.class};
A3F;V)j[;O
qa_
{5`#6| u
̛)R2z&ςNqJ.v[{TxȽp01Lp\Qa%IG
T^;jO*3j5O,L7PKx՝      PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/DilithiumPrivateKey.class=
@ƟWXzN\a3qf7Yx %.6?
1"mi3TrICK]8E\ɃεjK#71sj%sUd&c(h5	fP`K|kjruwQġ
>c&|PK      PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/DilithiumPublicKey.class;0q-=\^-I$_p(D)4oޟKFaǖl_:lRB;gYuYٰ$ڻŕ Uca(Yc$\˕~ 
4AcPKu      PK    A             J   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/FalconKey.class}=
AF3vzb#6

 8
{5 66^=_ `bg`Y
1+cr,X,L,	;,L=Ffinc;TXR"]DOabϚ~670j oXkoPK      PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/FalconPrivateKey.classM
0_O[tF^!RMBx(1|o|a.K`YiC
4qNRR_4:[F+]a
cUwj_V3mH	,riق\Yc 2 S/PK'     PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/FalconPublicKey.class;0q#P6%eHP(-S>i޼?=!T}	Jb|eў$KmsSѹ*bi^fWQVr5`/PK΅      PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/HQCKey.class}=
@g[ZT,mO0%KLF,<G;u @=:8)R2z&ςE$%Jga``FXRp{dad`upԡJ:I
t95b2*)y[ijӍn0PKOj_C      PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/KyberKey.class}=0F&O#	$NZjԦ%Ir5L,,}~u F93WFXIX"PH01tt#lWx,p03\Qa%+I'
Ԋ~:v4*j00֙j}-,u7PKkXc      PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/KyberPrivateKey.classM
0_AWRP^!ƒPZMBx(1|o|8``p]AyVX7?,kBn42g:%`Tꪠkn}¶6­3>?3W!yRX6/
ir0S$?X`'|PKy     PK    A             O   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/KyberPublicKey.class;0qr
jlYQp R2|q9Md%Lg!a44+Rmp<H*y
&N4Z/\4
u5G9(?EZ6调PKU+      PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/LMSKey.classM
0'bŅ'HRmBx(bc}QY]\jSX2՗Y&&Qtӵ	beYx2R(1wj
>0:eVPKxi!N      PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/LMSPrivateKey.classKNBAEo(~Fۚ࢈-1ajUR{nN}?>@p
LV/pL5k1p)jOf,yܖ* ܔe`oˤTIN	@MB *Re5SV.y-Zw)9L	~oǬP	zm?oPK֪   I  PK    A             H   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/MayoKey.class}=0F< 	\TJS)Wc 
aucadYޟ 6000w
gjVMp%G~/уSᄓE]RF,%)Mѥ6]Q۩Pg卖0
PK 
[      PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/NHKey.classA
0Elk=
abIr.z4m{ <`-*KiRZV!'DiIËE#uMlpu3MzN%YF-)SK48/8PKAp   y   PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/NHPrivateKey.class;
@EAt	
,AV/gLٚpQV<_ viD
e&;b6ɲnRӈZ29Vk6zXasj3?<;{$H0?TH`PK      PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/NHPublicKey.class=
@itA

 c
YBF,<v3ͼޏ'5ª(:FM٩8ޖQ[aw,սm"]8<cz>a7SY7&ߺ/h8oE=!F!PK      PK    A             H   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/NTRUKey.class}9@E=l\A@XXNQH)W 
adYL,,+aR5%L!19(>%麕у2C℣Yw
c
+I<s-l`=_9R'QP-aa|PK3J      PK    A             J   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/PicnicKey.class}M
1FS;F< 2vƶ#\x %qE | YX7²L)ׂ3yt!K<KqpӍP3M]tG$"z
.W֤SX}T;xPK)      PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/SPHINCSKey.class1
PDkB"j]֐OH4r5b1<|_o +=z˪ZtM, D)/7m(=Mz#q~2\ft1tFؑL#;$emC2<FFPK@ L      PK    A             O   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusKey.class}
@s;-tI\E}bQzwj>%']!|ɗu @=Is<mS`setL*?K,l,-۰э*	G#4*d.1%O{Y#l`5_Rҟz/PK*Z      PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusPrivateKey.class=
@ƟZmJFQ4	6v	&@f<[f޼ b,"Qq^eԐ.]z#eI[be2Emw9J2*L﹑
LJuSlD_`^K0Qߚ@
LvQu=_<XzN }'§b'PKk3g   &  PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusPublicKey.class;
@Ehg2^F4Lϐa|l(1=ZPϞ619۝ɲ,$jX"xו˱ʍ$\acÐ3KcRa;Q8.
:*P`/PKʘ      PK    A             I   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/SnovaKey.class}=0F&O#ROZjTz5L,,}~u F0
yRncr,X,B,	z:`ab`'lWx*p03\p<JV*h
֛?iR	``3F[XoPKwO      PK    A             H   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/XMSSKey.classE90Da	)(8D+*Z
 P:؊pRF8©j4zX"K,jNuJfY%b2.H-e.P`fSR-ceYLsذyFrkt8<z%qx1 PKMQ      PK    A             J   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/XMSSMTKey.classE10E
"!1pv
+VF&$RHR8"Hx	 +0`lu{3|Cr\Ԃ2	9~,ʲ0d0xGޠPkA"oIs(v_%ǎc0\Ycf?V3OJF0,	$PKw4V      PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/XMSSMTPrivateKey.classMNA_:XqX/J4&nl{
v7-1qJ򾗯6 .qZAk&Z8ŻJ5'
/,,GVV{Wlf쭹T*OEXQe\oe5
TׄfCSdQy-L))_9L	׽a~,>fmG?'-PK}:   R  PK    A             O   META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/XMSSPrivateKey.classKNBAEoO#&D	Ӣ(~ۚࢌ-1aJrͩO \h`dR4S\+Q|Ƣь%
'}к@ЩxfޚI
n HmU{mi觺%4{{B7/FW[nS`I9Rsn{D.CG(YU> PKT}   L  PK
      A             9   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider$1.classQ=OA}qʉgb,( 
B/{XrAbODieK37of}}|8a	d-Q`zME$7I({*uTyJSSB2SѡMuVumQ`;(ap|ɽGSz2"K=ϐm66Q:Bm!
萐As=%QH*yFZ-U(2DCΏIJd2V&Rԯ5[e\D"eIipL
+2TP^!vHq πGwGqES&;6S`b|(`HPKvX  n  PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider$2.classRn@=l$ƽ4}/*AT	Y/&U$*>|bF
< =gg|w OЪ@%T	N:V2'T8Vr:;K"Wozy2iK2^ɏ˙Sip]bnK	,# 4ףVPKL	QWhUBcA2κGj;?넵EX#I*dZM]ÁKfIc=S97#Bg#6Lb#1.)7KPNQƁQuڿ6aGxVFs//hWd:=ޚ%f3^_˸My=uA|A~n̀{o6s.Ǣt>p	,*଄UC<|~PKZoQ    PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider.classYxGwҞl5$mb{uZ|'Ib;N !&^^83WtN L§ovy͛7~ҋ<4u@`@Ќ;a6z[vOϘbJA	tlnH-'pWl+$GG!S;:۷:oikm0Zfm،X(һ`3yr4<w(:fb@XQ^6	97ئaYe^'+o02
jJ	ֺ`ЊafCaXZyu҃uA'dGTd١{txpb&^C5I5i57t,޺-ͭ;WV
T
LfO]&}>ʁQ`VX}^vW1#VˁR˰\Plq^
.b%pJ`q)k_Z3sCj J8pmƤpȮPo"fͱIچ,9nG6ZQS隑ıb3ӈ&
tlD@X
hf8a|1r̀seDlsR~d$ԡUn6Y9`Cft25moY'm޴I3fV vƭ:a;7YcMÀv\e~f^3pLȀ7K=o/d.JF0ͤM8cvZɅݖP=:,Ӻ3
&!va !t'kфjQLQm idcrMN3YV[h[\Ǌ8]!b61Z^kσb>$p~.lԀ߯c s]"/qY$>gzpRt/e$tRE/5ܡx%	LU2j?Oxx-^`n3fwTyCx74뎰ۀ&}^o6o;jsrKo
$:4tVx.'`d$BqwJ
0ʜ(=:}8	&FAC=x?gkE?Z&b3{>RGi␆t|En`\Fqy	6җQAnƉP1vfXU
1BZXHǕ!N;k,_)">Yh8~r/Ъ@6Y=Ƀe#uqgD_Y e4zYU+<8[F}jSHh6㻙083/3Lf[CǙ7ZZsym| {6%N=2Z<*m=_@]}Sd6#ߦlۖέ|pP4m<!+PJycJyINo`~Aڝ<} F庩]B9Ge[:6ml5M&+2i,%{i-B{^3%E!oJ䀆*,*aʿ:aǘ"uaV}@BQ5ddSeG?+`68풎?BTN^)3'g>YGLkBKo]oόpg:8T-]E`8A޶3{T<!d$1eЌDl,XJ]S]eYe˄G3YAܢ5uQ]{QE¤=S\TGe4cJ)Ӡi7JyRT\J 7Wj+@W#0Pkؤ-nJ0if3Zl{o"z樉[V9Rx3^XGXsbx0/UM?)M(#,))y-K^9@ǧO^+/8{8sDΓS|/!+@)G0uE'QU991oa@!g+x+Gpפe*P9MuՏ܋&#t0]C}+NcXsVD]G0`r8taBRE5	sٙ!OC?	g1Zݟ`w=!xWOPo*S8<Ϥy;WwZ_'?t
}5ʪacrMnhCpȀuF7^S8+R8+ԜNi"1ܢĠ7JT(s
VV-9ޤ*?[)}),RpcoF	Ǘ(k8:M?bBѾ, ,$M"SDw\"?(Ƕչɒ'p`'EK)"OP8}y,`*^B~H W&|+YP^*ж^%xլ;'6vWx##$җ|ƛRWJt
4p3;&#ife 7ûMρ@-@iUg[TRƙY9¼pI$͂BŮHc8R8`7(9ӾBzMʃs@}`G.呟BBxj~4GObj'Nc`Ta>K3ba9-.BORL23/dz7V;QL59s(Ot=hь2>r
']@R
[[
Ʒzﰝb|nTGl?a;)"l_5_ba*-Vi>]T[ZC3U[9+"u>X\#*/PK<83r    PK
      A             >   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/bike/PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/bike/BCBIKEPrivateKey.classVYWV ,4
MШYYRiCkbF2LM?'9
Gt`!37?k%$4c/q2Qr[5.CS,oE2 32̒R0ZSeRYT9ϩhKZQJAJ:ΎMňp|bH¨fbIP´RQ
萌`hveۉ-RW-e%x>.-Geh/	{жMP%z07~)'q'
gbIpZecU[+7a᭪)6/+ʠU[XwnFч~<ETQE*t,>"$Np0hFF) Ŧ3x[Bg8u|_qW2oFp%́I5u|(ᆌŠО 鍡oiXKw$ܕq1
fS&6ۘT!FF}Cxp =Q>>MZr_mm&:YG5CNPE=J1݆~VE[_fLc+p MEH&wF9<0%#,ix<W6|(fxl?Od|g4qf=JCș.|!K|EEm-*ex/`(@P!dz&3QyjjH'~cV9'(]%*	W42Uarm%L4FS!-Rey*݀QӆvY޺4-.ySs6Wx	/{ !W.D,Ѹ>ܻk@"mF} 
N9u[Wg7YȔeMU/Icy;Lc
ahB/THeK3_:'>ea*u-h
X"^NItޠY4Iz}N$W5:s#|B2ɿuD@ZŹﶆMn5*$g_Pޖ0x܉opWyJVqm
?{:}|Hck>^e+.B=ܷo^nxa_krş/ahIC=:k|KZHmZ!Dg`;db3(mPKOd    PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/bike/BCBIKEPublicKey.classVYWV.`dKBn6 [CX 8
I۵|!I&KE@x約Ӈт͢8cmwf;ҿ7{%JA=C΍e6&T~P34g66 	1MkEəEC-vt6TeMk*]Z榖^	etl439>W:)J[_NVa9O8²b9hasd8	mOٺۯ=Vel$1ἄ2qZBEGӕ2W":
%#<jkgG/2b։u.1<8kc@\G[θyb&K1\U	d\ODJ1bYDmrKo %FF.2n&-r{u"̸2H14QJVw!tXLBS֔1\0OE7V6H+Ӷ^
ߘsP	f$`hP ߫0-%%fS).3vÈK")]%0ʤJfv|KG3(HG/{1qLHRdnWIvAG>OOH˖Ih>XObJ´wvj(|5/yQw	]9_mL443ԸvY/Gj
X'NzXo]Jf!NmRQ]dp(וEhuxPPL_	=՚ԏe
k7[lai\Ү')-d34L^NEcC![od?bexzwj./[+&a@Ω|-g/Օ9A9zTJ@1L^bV)m{$bE#_0G8L
T:ƱU0hWezNuy [TOHm'Z	y&ƠY>ZNк2fŞD!`t7D >ө? ?kvKnÃ Ό΍Oȭsѭ]P};k\{Gkϧһڙb;&H=ش9(Aڶ"6x'qصv_X
*}=\;eNuaH~#ρkgФ&r:wx?PK9  '  PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyFactorySpi.classVk[G~*PBEMz0%m z[!,	qwP+<|OꇶgM07Z3g==U|M*qĚ5Wrڄȍg;xd8p˴L6Cc 8p\MCoZ,@p(*Z2(	R@p108hGIhKv2rz)uY߿<gfá^<18z!Xca鰂Ntqia5j({Z+6C+aZ[AOVBZZ7\B
s'8^VqVښYsY8ڒZ8:1Zq6m	a	NxnOLxaVVO/+8~gqųcZ	@},! Id
T˃saりzj7:HJw]
[~]ƫG*1p
(#V5
_u7pغ2tқdV+FV=1pF^YiCP#Zm<Z<a:2GfxK̫0걳*91#"2vMLpTL>%TK;fҗRbʏnC{U90.y=,K9]]x\zRNWv7K؂w	firoRz\Z(X@@8>(u*#s
faȥTݯ3,[r/2F$)
ǡ!ix#_1*zn$'$Ga1LD
>mľATƤf5!Q;薛*eP9dTipض=sVeOp#e[䬕V=kWJ3e	wSL+kSJk*}W,[)l;IWzgT
Žo"RqtLj"&OT_¿Aުt+(S* }qRH	j<
a&Kqhvw
~Ɂg8Gp|/l6*C?c.=5@Β6y+FIWGPN&ǂXq\#C#C[5@N??%4|=|p
xy{R:TPI`ߛ2A6ɮ2D\%@cD#yYxgjBaV@L};];m<	=髕gRrIj.!$Bo_| PKUS    PK
      A             >   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/cmce/PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/cmce/BCCMCEPrivateKey.classV[WWN Lj5/TBJo03A{}⁮UՇ.= BYk콿/gϿ \/Q QFM|++SBnjffhsG	Q͐s^5ʺZQeRZVE/h+Z^Ztz"=:mj+DKE!5mxmCaJE)2	Rl7ZJ
%x.v!'ehmlH_,@V)2ugb)J8-2\ޏbU0#)ݺ+ʰU)RALMNJ»7wqyETꪑy*t,>3Eq		I3ƥa4ypS.yA͌̌ğ9 d(ZH:C+ꕹÕ2&UߧPu70ĠҞ &鍡4K$ܖq1)Zm<)!^12Fqa=Q;>9MZ@mk&:Y%dk}z0.aB$BY%n/b~N3Wȱ@!QdX9gwo^*J"C[^r~$x;Ɵh;{33BƗ4[6UNl1UB^pٞTٮ˦橩b+;24,RtkBΠrhGtPdPKN'~5t*WVݶ05^$S=e`i
*;enx6ˢ֥oț*ޒ4KlA>
ryX [뗡҃{$ºgEn{noxQp1"b8[c!]5iP4e=_%0=G8tJD*%р(ag=tN|$æez;ZD5߽ VABW#iXUݑH5
*v͎9^r~1
߈&"? \wՆU7ȊzY>Tݛ[ﯺ
|_騧4kHӁ]Cztum`xRxm;Pr߾wyjD|5O%z^'EHomj"1j}n?2:1RPK=    PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/cmce/BCCMCEPublicKey.classVRW=#`6(KZb,b1."͈FY^<@L!E^Q,m,cTn>̿7{9&4Kh@+C7RZ^[)
bh+hk9˶!6	!Ft#UMܴJBJQE.
}n*$SՕRA}&j[/g|QTVt',a!J県NZ4FOqSV6
(UU+꣱l8/ႌ\dnP*:4W- :m!%j3pËI4kebm-KZz.3Ji9*f4<\pMu|pDk 7DjKRtyjy*d|,n7גXڎCbdp'S_N0O$P0Ġ?eMI
Zo㎄2mp	+a$I7'}c<2F10Ni.Ɉ+I?Jq>yC@Dg~Mi*aSRX]"I:z5H!0-sOfh$=!qzN?(~	dgմVZ/x+'Vyd=<.2sژFqiOi`h72^ԜLk*JEOzKX𕌯mJ!NFX_,2嘕@Y0Z%0ب9Ua:-rsFIJ)
RUøV9*aꎽP]4Z=*ͷ^l,~|$/[N:aFӺQThcayPc>`Q!Y9׌qÂ#zKk	*#c
jbdkPc.:@(,n&L+>6oho!GYY.[<gQ2|+
?HbLH;pOjr[w~Ã3s{|-'rLyFktkǚ><;vLb3liHΝUEiڇbQ
]g&5׽PfO?L|`GZJf9~\&uۗǻPK}E  '  PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyFactorySpi.classVk[G~*PBEMz
JRDj 
,CXM4~oA鯠_?ڞI6ܨ4ϳ9̼_\
Ѣ9]suL/ۺN>1nZw9hc8SfMߍƯY,Ap(*ڡ2(	R@p1 :8D)IhKv2z)uQ߻8i3sc#yO:g#(FK*dQNe1a}r=2@~JҚ0F# }880RcyhhkfЫcehFѱHK80`r'w#w2{lg+Cu0aYTqg<;9`[, A@<8׎9Ω8 E}tץD*&)EKp:bj_wkuQy]Uq
ږ{Mo$<Y))u|pJCQp79nI2hi𘌵xtv)ee
U&YPa5bgc5-IiraxEv-利=**/Lwǘ/mj?5d
.c
5Tv¸ClYGv)wqqZ9-"@e؝r,b#𳖛dlI`P祉)!M_{LAUvƮz-F|:-HJT[9A8tD,y+aZb;^w!=qO7zfF#дD>-lľC"Τf-!wU;薛*QpȖ&K@#g&j/mxLܬ&c*η	Y+iُF*3֣vç
>_%΢VN
2|9Ewtk9%m'p@Q_]DT*nzII.7ῠr|pbwU. 4ҥI#uhg*LRBCOq)oƽm̟ĩ-M~S\x+%VD75׋蓮}!$ɿ"MǂXq\!u&^/xc: 
o?{wI??4|}]|xN1Ig4\F,mpX [|xO"iO"	J1tk,ww +YnmχF%e:kgRrrMj"Bo_[|PKaq\Q    PK
      A             C   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/PK    A             ^   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/BCDilithiumPrivateKey.classWWW=aADAEjPS. 5"Fbn L?`)i鱟zN73!FŜ3y/s߽./  *P)JF5jNiӸ>RtVg*CtlQ0'bcFAWfnٚPbS
Rhkٌj2Y-kOfX<]in}C]է3yes*m<ڪiu-#֕HvJa{bJ֣A6pd-;im&T!'y=Syfr3GS' "a^'T&c[B>n-;Mt\{eCC]O "'lA4i!]J$^?kDq1U2Hu~14R(	Ge<c{Vtre&m1ϫf[PhBtN8$6a3'Nq2芑Q3ABx.q$v2M>CXT{nFAGGF/^$$&ᤀq}DTaBP!c@ !\bXWStP

ʰ:ǵ?7`)W0LN*5Ѹ
uqMFD]	Y8Y$WH{ahSGhKRZASx)zMY4n9}Kj`r/:p2Id%Lɸ.|c&kx=6S9\}F;K9:(}KOS⩥N\]!υV<ͼ qS-3~2G<GR'QLMYzϰXZSk@VpsE&],r-MI5d7@!a81\+p?칥y`X>bV^rpB	nh=""#=esz?_c\㥮-8ÙGUZQ,wRG[6QVeЄ!㶋4Kt
t!#`hBWpNȰ-k =Sv4{W)w҃6N`xz^KyUh4ÜnRn!jOЯ$)6 H)JLuDLM
˴.χT=.qTnD!عw8(iCk$:;4""'riF~FulO1<Nӳৎ
i{񙧤VFk pw:f9bGQx(F⑏An%u?=8".?X@M_z
vy
~GKxh+|1x@Lnh^+}lPx[|~\A{ڼnOУ=D?Ҿμh#I+PK3    PK    A             ]   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/BCDilithiumPublicKey.classVYSV.k mFMJ)4-6:@C )tȒdK?'L!L:3Q-64g{ss\ (C
bhXk\ѹL/a͹P랉"j	Q5R̛CPBɯʲʗUZ暖tY
9%.'󺦎
 d^(jm]l!`9s=gmWY}_*x`Ƃ4Iha=˽J	`iQlժ%#8on2do(`h.2=G:vx*·͐y	e\UEFc!La]xQK2^5C2H8143EI1+IG	^ʄVR&뱓!6**8/ch
s'^u(y>bfVd	cs(7$x,AF%FV\'bsɹd0 coxK)Bg$qwub5L1vS0"chǊ4W	$;W/eŢA1U1%#гG7dCYQy=&r,3T&?	e<r}OC6i̊^Нg}9|Dc{)M(>gyPT~ӴA]hDH줕*cF! aQƒKAQ
&
!R?"	2V@%W9CK{DV4UaG:mai\Ytzݥ2=bD%>;.:C3\(ƙ(I۾)ϒ)+u}dQqby}mۑx С^`< 's7)=D0KpзCt~rVJMw{+
IZkI2;tJeFO'~N:$	թu
tUIkJmOa%̣E:xbm..swSevmIkW"*+"3d⻸Cnmoy/~,.~_ ʹ2Z#qO-L#ĵ@1Ш:t_ڶOv|9Xm*aM_@\"A/~Ble4F7$t4pg={HHm
~^mQKe.CЎ'PKzQ    PK    A             e   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2.classJ@k?ҤQZ

Bͪn<^>%NE=3>6B,&nixZ΍pP\8"͕L/!t{;<ZD1ڈN~[s)rI-t,Ə?N&3<F#5i\=NnoPOL1#cM
"320F*uF cfbDyA#|PK!"/B    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2_AES.classQJ@֦Ic}C+O
E@eYuCݭҋ
hEpf_^aj! &R3csAQ}p:I&BYy-6T`΄+.o0=!Z	?{N32B]<ThHϾQ3n]I8JS6ݙ6_81#8&u3zT (%t3c{+Q	q¦[.s"7@=~b
X;? PK`]	    PK    A             e   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3.classJ@k?ҤQZ"
Bͪn<^>%NE=3>6B,&nixZ΍pP\8"͕L/!t{;<ZD1ڈN~[s)rI-t,Ə?N&3<F#5i\=NnoPOL1#cM
"320F*uF cfbDyA#|PKr    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3_AES.classQJ@֦Ic}C+O
E@eYuCݭҋ
hEpf_^aj! &R3csAQ}p:I&BYy-6T`΄+.o0=!Z	?{N32B]<ThHϾQ3n]I8JS6ݙ6_81#8&u3zT (%t3c{+Q	q¦[.s"7@=~b
X;? PK{Ko	    PK    A             e   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5.classJ@k?Ҥ<",=mT(=zlV7uw+EPTԃz1^^b 
4J{rnd%O%&iex}uQoO`rFh!h#f8$ϥ%יk?ƪ:җ4CHx/trP8Ez:)C=)3Q6)sk`y7ۡ0ʭGM%
PKYe    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5_AES.classQJ@֦Ic}C+,B+f
qSwBK/7=?ofy{y0
<ClA+
M%g24t͒Lp;MZ
mک̥	W]`_O4{BL~Pfe܅xt=}E<g1JS6ݹ6_83#$&uszT *%t3c{kQ	q¶;.;p"7@=~bv
X{? PKBC	    PK    A             _   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi.classVWW.
qERV4<*HmIDQ-]6dٍ~/RQ=ymi9~wfro p5P'
ÖV欜h\^ՔEM]hi[zJJ7twA-)1rF\^Ifu)W&ðm|Q]VJ0Bh2C_z+`uSwO1D0]SIlcPpT<%[;⦫ܦ3 D"[	;x9\ٺ8Y)cæfxH%c7s.C5JPYwGOŋn+[(W><ΰiuѮx`Bn5UH<px%h]\V
=;|]YWL=2z$C^,kGk9a(8,ሌ>E{ҵu3MK9>1OVʭ_%҈XDt4î%5%"VS,Y%XQpږ$dh/gHNh:lֲ]jlsW<Aq`8f4G)9oyݵbzWI<
p6_^ӞUj0F;Pj90!g4QU1.e؂$&%\1K[˦R/+"iWDE/zV+BTLwV0My1_n&Ƥn'F88ѐ>fZ7wc/_:Wbx6bPIW2iDLt=">褭WCl% Ms۴1^
yEТ9&AϬ[D!k:W;*VzРf?zqrV縻`D;«{/Ӻfzqt4(uᲭޔho3tOT7&?c8YU͔q䲱#A')*3AjIĘ<j҉x	1Ll-C\Hfr7dSJ |6"OxRW?/M
CO-&þ҅wF;]Cto`hoiVH_?zI:F2}lOnG<jH6tboߎEdH+7PKo5;oax
{heXENzp
;ko}i."+z֣v,ѲTQȄdtn#Ct*-CM+OW8-A54O^>lEn~|9볞+\*F+\֗K3%Kj:5z6| {xt' %h$?"1OI~F_7$#=~-PKyI  
  PK
      A             @   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/BCFalconPrivateKey.classWSW]^êBE̓b!BȣFBkl.qwb_־}?k?ΔԙԙQ!,9wߟ8_(C
bS<q},72*6CɌO1AABPF5dS91r2pXPB1Iflk:]MڭN3Tl:Y,7&TmմK͹޶j7	֛g)VG
ǴuȨV1+aS^VY[ӓ3G]6(A4IS2v`'Cxͤ6v&R#9[ZB>~,9
t>dFCZ^OcONA4!]_
"c~^Ege@c`0HD~1B(`ц8#;KpU&jfU3-B*CxҚkc'.$^C%杺b4}(<i(!.	dɧkj( хH<έ3T842Ρؘ1}{+OF?^fh[SsPʰ5UZ '*]+.0|<R4jnzMǁm5ߝH=.ңFnDs"&3\{[iJW1*&!%ʉBi`3~4LJebB7:ǒ1Գ9GTiu4ӮX_a*(h.>^>ܧ44Eӟq7=Ples]8*5XM n
	oxKѴԏ]H%-jޓ[xGmKn3l#6(=իeZFrEJFY Ag9		=ȵZ	:
&<Hmm`Λi_Kg[J-JT
")+zx"T-&|еk4U40'-
huӿe%h=3/^JɗvиeNNO}r%)j Mx$e{
Yi>9+кt+1}B<X$!)m&PjU(]yltu>4zQ{Y.!sؾFhhm΢9ŞCdh39晴D#b&7P}@Od'ZZKg2iw+VFk hq׈yFeﱠ
O|8q3{j^YOp"nooy}cW^j^0*G\~=0w:^'?Qdt>i]@nIT]D߷geF2	PK  #  PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/BCFalconPublicKey.classVYSGF V$#$50#`r
ˮ]a;yTC<*?*CĂcՌ{BB0:W4/*B3z`uDAw
sQ7rWekBɮʲʗUښz&-Lek+C#f27e"P@3$cT3ӓuqF e;T΍hB3CI쌦 Fj&S
l>=:ZJʯR$c6xcxDт2.CEX?ى%!M\f~
_M~O"x1	]2H0\8bMLh51
s[x%v02BڢafU w"3Da]5"MRߒ+60v6i<OF)r\#bss]@~%!L⮔{2!IB&B!ܗ0,c,SdVuC_@~yIEbrb`=Jm&%|(hljy1M;bf4V
Li`)ӘDSg,)=ɀT5
isH'vʘT4fuy{oi~$K2A!)/9
()ݲñVxx<B`A¢%L4<NEe{ lI蔝
|ѽi	3õ1CNg`4{k9aԾ^E7T%bJW8]k,2Ƴ&ܛ: SRӥ~*'
Ndo7_Tb^j4@*ՏTiܲ
/w`'ðJdiF
Ħs!~JZ	Co~nh9X<o^I$:NJ\'iMIזR<_o'vO.:
/ڽ=Z;_J/hJ!2ŵnz
U5Ѿ_ M2Z#qW-Le_GbXqYI<7im-`pΛ>. k%:a|}Hy [=q&榟Nf1=ᓱxw^^O6?t,pE<PKmY    PK    A             d   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon1024.classJ1ƿ_@ЊW(P
J6J%Uҋ"f`I3|y}{~5shyhGGm
K͝eUHKT*ͥԕ(iKB80:s2D[rsJkU&-kƱzEel=*BPiUX/{	gټ5Fz1L&/K,쐋K./ۺrz={Yq9p:VPKS    PK    A             c   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon512.classJ@ƿi<",zR
BleCحTcCV<q]߾c!"R3բ
x#
vߥUI]$c^щco~/w4@ D!:y,<IeҲ46Xʵ\TÉ"ΔV9uGoasmC$!L6.xYJgՇl8\t!9gڅPK'    PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi.classV{WGMxlD(UiP@ã.Xi  fKݸ;Aw)j?*紧C@}{wo }4)hW:eۨ',چouM3]mM֦eWuC8n%W2",y܆keaZZ(b
8gH+WvZxq6C"Yf`I:j^3hɹ}~t&s7FV7!yns.*80qҙ g<n]ST4
l&wq6<ϓ\h*:qIײte,#;LôZ|u3SuT&ÑZ"МXIHG"CKr%-cJW-? ;c#GY{S٩G/	ӱeCqm(u49Fq5~N]r%eFՠ2R-8{EqlCMN;Oꌅ
H2Cg#\aًP
*0Q\e{RqwS/vJ%HKgs/jRZ)g5^LIi/R}Dǫ>rb
(S~^ӽujV3.24%b
qćÍTtKAE=O6䰨VKphD|v
y92޶0ёb9ٵr꨽Cj M[35T.6"l
tVOs
+AnҢ2dDtm
ʂ!mIV6wI1,+U_;:6-PԯDW(z;\J*:nX#8^b{QА>Ѩ/wsQ8nEyhyt4E(t)rT9j}5ML
v^ߜ˥Y"E˧eh"[Vgm:9%lڋ/qĪ{_|	b2~(ca=,J.yu"
i@#5:lOEP"AZ[p(GTMC1_p1Xz.-t?!nܳr>FR
2sqDT@C-h:}:mVaP<2.яP-Ce|91kigU;˃v:C;mt,SOwsp^8*/
ncfyٟg(N HvZKd66e!+QD%_|PKg    PK
      A             =   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/BCHQCPrivateKey.classV[WWNL\*
j.hEZ JoL>@תC}!Pf2{o߾/!P!RF:縶_P=ju" 	!uc1>4pʉx~M/+|YGC_W/ѻLrP׹%D`&Ýq_(-ݱg9m	Kf"DQJ;HhzŌ=ɄЄeCĶu,C/X
Gp=M+a63xwp.ʸNի`XGbF1n鳧*a]ϕY\RޝnֆЅn

=)zVdPaD$DepT 7ZP
p]FxKIBg"q$e!#tC_}R*-ܖ/2\;5ELL/fr7iH'ᾌÿ2Zl>/$7	J0!$%<1[`M]>d<14GM5-!pI_㩩ᗊ[0q	2&1E8nyizA$[0U|~jD3Dǒ!T¬vpWxJ,$*CcV,Bz"xƟi֌냌sXg	__)ʹPN׌y(2Ld
VY6M^6mc,PLѽ2E@#0R bYX&kQ["LQΒm0\Ƙ84zFIND?03'<#Z
XK^-g4.mqeepNx>r:UajP]:e,B5rA!&NYg%y:JqӜ)-U0l#:
VQvȃa:WG=x$Ec	o7~w{O:
$y:WgJ%i}Inƶ6AW	{ώ^zܳ~5
U'@NE* us_{Ptgt\p<7=3RCӻYʇj8hsm:
;S
6#9wyzRD^E7?GO	lWW.z-`n"ڳF
B?{m^udc-,la`PKٛ@    PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/BCHQCPublicKey.classVRW=W FlQ$`$1`f1."͈Y0R`*)JgAlTn>̿7E
e+VPJBZzАHAwu,趦TnZeTUJRCYg#g/3B5BrWL{QZq0(rFFbN+}eTj`2EJ8'JǶe0UK7Ljn	X9yERZX{K0(Ýӕ/.e|тF5Uϋ<2.K"*>fx [a5jabte)1?2?s >q
iyKBgr2NH"Jw'hzqS-
nț2&ޑ[+g\m6JxƄbժ02$뉃1ᾄ210A.Ƹ' `uKk]x/Jf8떩+٩UUTE!
EQbLSϐ=lȬmECxبc0!cҙYժEWbeyoqhK=!lGx>rV3-Dj4q4müd|P4e[8uEKl `|'cr|cN
.wM+a]Q?*LCT(r<h6=rY9^Eޏ1㽖9޴օKI8<2cq	^}}ݒejpS
t;NG֋MR|p!@/HnodSLNl-_/0F8fзK*(`	E_%|еL(ӱBw] zJ	wd hl47cZm[_Tz[c3<t|#
Ƶ?xz66ѳְ&BÇ3sKj57r;LFqgtcgϚ^c9v;qzhuy84MHUGiنrT
O]ovMÚ_~:)Dw{ZDf9~]&ۗPKB2    PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC128.classJ@kkӤ<","j@,"7U7vXz< >8QOEg``k!Ќ1öu<FVR~(M3OҫPreʕLv<^&߹m?TBBRLqϮsU
魫MwAo`ߓ7qx14S+x`rXل
,ŵ0.SNg[`OzVFkj;PKJ#     PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC192.classJ@kkӤQZRԀXE
o6n(fXz< >8QOEg``!ЌÎu7<wFVR~(M3ɏˬPҏreʕ۹Lĝ/~6 Qbt6:{s8MW陪NU㙦~{٠?	p[T8OC<2Ft*Rl&Zi+dm#UZCPKZ     PK    A             Z   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC256.classJ@kkӤ<",Z(zlVP6ZcEPD=b~6B,c
7.O%?I\I?̔F+w3w;x<~D1Zәs)i?NUy*/l9jZ@x/t=y
ڝ1C=)2Q6T&la.BvM=#y{BճF6"_QPK֍     PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi.classWWW^X¨5tPYQ0`H34v}{P9˯C&`6*z{{w]^o vr%<(P*9*
	]I*eT)~Vy\iLhՔhh谚<(+a&qA~-b1,'d)ak1)m^TRWDDqvwȖSޮ隽ڟ@9ߓ#[z5Qu[T
XʰѱhJdUE:r8n#FKּFD-1xGUە2C^,G"VNi13MFLLGV)'<'l%jwXxT$4!ܣPEܻu˖u(wQ)塶b
#"Q
$tuB=1'nfhyEۚ04n}Bi{"6¶
nHx`meXϗ
)v1,%@hPL(UjМEkA="ET%
؂wǯ}8UC	 1>Y
xrD	ƋNph%f08Op9pLS2aڹ,j	{EFLx:*=ŢMK3t=QEs/>ap)'F(*4+hYڨ.ԃT;xRTNFItNb(H:}n~jr59`am6\*fҰT7kV"7L[>NU/dH^ascزB4(Î[_ƙۜ&%[chv%@%LXl	L04;tm-o!
pAxGV'$Zr$Sys}L㜫޺/=)ҶT*<I{ovm_}mCTjz(7{<lJW %'o&ǵ9n^l&)LQ55r>DzӤ3e݊/d9P5n!ug\@-]&_aؖm^3"VާD@Ό.سm$êzT7T>`+\y1>)E1G'T{r}odW1EK#1ժ1h"ޖ߬m<F
N]!9kJ7&vTTd8pozZpR<5횣No/T婉π0_즔G=X439]~VjiXpleEW!
3X?i(A)5	$oս
MWqU5uS}nFpc/W֧%d_a@~Lƿ!e>UǘcNb-N#gH87ol5_ j_4Ls>~F8S$=ͥt,Sot}P_m"dJVZ
2J|ͭ..k$yZ:g,cGq,sT΢o`d	[ai*WL94_p΃O ]'K!{|_$YG_W_-?gLaPKr    PK
      A             ?   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/BCKyberPrivateKey.classVYsVn69F$}	)K jة7nnMđ$v@}C:SBNϕ2$f+s?	4~
	
ZTs/pim,;+tB;#щvЮ bT5e͒un;ڬguz̅|NX\9Kǭwİ(t[|fҭr1FC#Uq*aى06cN]fH,i~Dm\I=ئ`пa/2ciZa7(ثb3[0mr̛Ţ&#z5d0mZygf;Ȝ8#-2aGѯt[2Dt"
b*8]ɖAUȌgzv\¼F9aIT*3'X7U[r1-JvmzY)<OcڬvsNyLWCnD"Nq\RqWgҀe2[`T+4=$3t4U5)pfIWIH[ĹQEf9#[ݺțZjl.N45InlYk*#ð]vDm6UO.&.P~$Yoං;*&&gnyV 2h2
lV5۴'3υ.
]n|*󶽔Q,9rb
us޴T*0Me^۪	y&Yh̩(07Q SpC.uZ@EwUXҙO;3VrjE\T1(aWϰ-Ȱ	UAOq]Zݮi+-T7S5uLBI»Õc J)ujQRŴ	>!2Fx{I1rnjmA2oTx&ړWg(i!5
'L B?0r,p5ɞ[
kajp)=i}J&|Ji3dZ!=?C$DcXX|غ]dqv_#i<AOc[H2MW}G8	6˕bA_
	zVi~Akb/~FO	B#e=J
͋]&e'C#1sv]D+ֻ;ON4c+JgKi*vD7
~}/|=䅔Fo{?ƍR_+_poZnU^x/֒(tun#ޡ;3#+}*m$,G_uDq2ĿPKuzQ  H
  PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/BCKyberPublicKey.classVYSV.`dK mF		hֆ@Rv/`%#wKK?'L!>tSg:=Zl6
t%ssw =)2KB%C
_%eraE6CeZO¨Q
0#y[&욪|EGXOu֩܂VGEfQ|6*2xi7yF´<.82	ޭlܺLܘJ0I}p ᢌF41tMNkJ	`aR(U)-ܰVZlO%{gkцW(Ϟ)qEU\cY'	;dgd'A"G&荡\/i"T_"o *SFq+,I	6fYaqoDp~SM(T,\[2̴ahr'no6C<U#%R/Dm	2]&ϓan׈|b>9 ǻ$^3Hܙtܼ/=P8#2H1OJw}~0A]@$sS$e<(ŢjN1U:1'oOoRE0)	xiۧEaex3hh>1)sRg0+ቌ nuaӆ?z6gT3)sH'v6ɘT2fz3|.X E&\&uJ4G[	)%m)8h9xB}$$XZMA:ͤr);\r쪳,͗$04{k9cԻ^E7Ti%bɒV8-k:γ&ܣ9 SNGKfuGWŽ'M3
ճSl?rr%zAs2<оÐ-k rz k׎¡s$Lv2#@(=e0hwHk
 ݦf-5{`ҩ%IN4IZ]nX=40=hc⻸n젫v֎x*"3{vqlopMI_ 2Z1Wޖk_ắQkbk/_m$bKv]0VD}a/ [|`'.i'ç|LG{d<UWIj磆CHM PK,	I  p  PK    A             a   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber1024.classQJ@=ckӤUE+´RW>@
JE0etRgҍĉu#> .PsPA/S緊"էJ2N/DB^K
A[&˦<fb{px>Z	.n8M9KUu~'鬌-*"e#dqB@;;qJp;ﮏ:	A}'z1c=m+"[Xn-besğE*

PKw3    PK    A             e   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber1024_AES.classQJ@=ckӤ|hFԠP"l6l,B>K_ ?J܈^^83s8Ùקg Xu1yt\բR,(:Os)q&u.4%!Si­.<<?J=]<=ٍ`๰)T&
{dqO
S'3E+C!F8!	$c,/XG`}hlhqNk1dkwcg٢gkZPKap    PK    A             `   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber512.classQJ@=ckh|TE+X+ BE0etR3ҍIэs}{y0544Ep\3WiʴS%0N2M
e&4f,^\,A:Ѥĩ?@gjY<Tt^%5E5be-%AL*i.h/S6	F~rNa
 TJÜi-ܯ0cn_Ɩmkٷ+'g81uPKuK;
    PK    A             d   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber512_AES.classQMK@}kkӤ? xhDI+ԠP#z**˦B~^ 8Q/y3\,c-~noxYIQSEaH~^&8UZقeP4;CG>u6<"|SejTu*d*i֡6<bݿ\ћ8Xe8ni$fht{f,l8EQ[]Vȅ:ek4mW#
BjڄPKɃ    PK    A             `   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber768.classQJ@=ckh|TE+؅UR(J]D
X&M'53
,. ?Jݨ^8}߷W GzU4bJ^3m2AV]6t<oTp3L2VBdlͳh&q:ĩ?@)g)j?DtVGD9`E.$AL*i.h/St&	꾷t-OPkw&~`(Zؓ_aŚݾ"b
ڱo!VO p?cZ}+-xPKF(f7    PK    A             d   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber768_AES.classQJ@=kkӤ>RX@
5fƲUgGQE3303yy}z3hxhE_+FVRn(̀Fie8}-*Uv{kB(Ӈ;{7@ D!F\\Rk;)x\cc!]adZ{hw70p/ӆQͨY42Fh"ʲ(5̑u0iZ0Gx;K՚
PK,    PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi.classVyWW=IEJ
:`-hA
H[:<a&L}Mm?*紧C$Ȼ{޽w_@~
dTe'1:MYEPZVR8bUs-;KRg'P?.J
%h%dl}(CA%fjuSwO1#%f::aALl:f2;;_;ফܦ7!/m}Yu3|ru78i)ǇbǆMJňBS.즌yL*CPtgq
>b[K;ĢQ<&axqyJr׷P!V'#"g↮ygh/㥱UBCg1sY55]2E]2$CӴ=ұ!)!(+LcI*U2t]9UEXcD4,:Feعej{Qws\te2B	rG`pu}֒SHL OSi\0L:m.OP4Ch06p~-NiVcu>#w]x+@|EzMzZuQCw21Y0)<c)oW97*]J|Sܒ1Ks}7Ô2qv`!/DrYx?#pďG	2^znoϡAe	.r\v+"E;rGJBOA󌤌²0cb¸_?N7SQ,CnL&~Rt,(3
|6Z꬚Z(p蔭+bH9Voܦ~0nWJ24<n)c
FaMVj9ϥ+-u\[MpxaWq5=̔i]5=jy!$-;mk7V-7+o8Í6s^V̈́	Jeэ~2!0b)cI7#w$0EmvQ
K闋>b.٢$*fٚPQ	mZȣn=Vn1}(oshy}NP]!NOZSDA4F0ylπwD$*tv6o%
uTuhŎ^Ex.Vr==UDĮ7 ?#Ds5jT*"Eȣ4?f-rJL
YST:VO?\E?p>/oW7
ϖ
p9Obtfcw|.z"|׊
di#:]x 	~L"
o	~OďPK	  
  PK
      A             =   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/lms/PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/lms/BCLMSPrivateKey.classWWW]A6qk@
.aXAVv\BpHtvѾ/x=k_OCw'I؇ɽ{~І(A2b<d<?:!4aD2ac(3Lh*f5nZf̦TH4C#1-+f'%Sw^T@UQ5qa11c
˥j5e!ǅ9(&91OM=^(X+g8O==
4b&뱁PQ	Oh45RӉ0lήEpaJ8-&%"Tl"q3'pr,b+)خbv2V,PI,#1,#zzOTXoϩ#["E3Z<b7B'9*c%'fj9ǞIuTȅ:I

Ӯ`CTZ~rJú.\ZD{Fi+J 'fyƴD̋}8$s0C?d܎vYErV-+瘊xJXyDǹc81~"
\VTo\%+̱^Stry6~ȋVяϐS2-ܼZͫq+Jr5V,seq,UkwRKt*fs$
^#*^j0,p97DTs3p3$.|VʗXʘ	͔\(4x1c(#@4ݘոet2̗)S#b\6Yb*&ekʙmbd:cQ
>Pc<[ǲR8")ᾦґ!R]%#һӸİnHœQ?\67migkjk	Ki{*.}bw)`ȱ~e/Bːl-?%c\KNRHp}*k(|QVvlY\ψwUbMJ:}<}VOreigPe)2q|ri:I
(˸B7[uBqaNYU1-͎bkG&/ϡKy:EL3ɘ Ka
p(uW+ tczK_*Z~?SFHp,Mx@C9O
cc_@]4BN<BJ4*t0a?;*-ToެlpxhnvwkŮ`=աQ(d_t[q*cڶ#+&̱vvm<Ji^sAָ UyyR0	q_8V>;0:_)|U_+RX*},sRI=7B>s'bdxw8xh	e9JƛI'Aq%;s0&P:Gu7ѷ#l_472{dJ
C˨٬qT tC0\I`iJ
|`8^)9|hq inx
c4w2v"' F_E
[hJi}g.rPKME  
  PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/lms/BCLMSPublicKey.classVVFc0!b ͅIA$
IӤi4NL,@,9LE~}j	m"O]'?҇307纼fٳ9g`2BhЪ 6"_ɭeunkCU2k-XNB;EYV튥U5ziT˞%Wު,6WoqtOw\	k3|eHP.TPr[B^fFjtGLdx _^&2SЏV`у0ܵΩ.يdc8peD*a
iy#h=WU|=~x	Z"d\paM׎ST4+=pFo`f6̓ZC\BB2o /ޔ@'%smjjn걦=öq!|od@\K>b8v`o?ëTѧU EB'>0l㋦.D5|J@+]Ia"C@8
&$$'´jp[QOrzCOA_ӻB}Y8T04Ñh,Qi2"|$e4b:=6پr
慤*.MymQ;XPǗ۝Ef0/V!NO
ٗDâ^⚾}4N&CWY?f7xvQ-ԋ+qaJt6
R,M6Z).Ұ<;jvJܫ{Y(.Vrp_Vi}U6'fEg$M61XH:\av
E~5]^!xѽBsa,u>DpX<H
&:gzJ6+t=}0xn AM}Z\8+Yjh`8{P@BFFcKoD
h`ph눮ٚ2d6C%XbO;(hV('8N!d:Ώԇ
|Xm0NS9
7/5
ͨ&6p^"Q{$1 `+7!Z#-`
3')Ic:Sd#ۓ62K<*`.r&븷PK9!l  
  PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/lms/LMSKeyFactorySpi.classVi[W~/(PkBVI

Ev.aH2g&}_@鯠_kR?=7Qi$so GuhhMu
7[Zv620L}hb8W滑N
GFMZ Jp(>4ǠĄIh8C+N[vL]Ҧ5MUsH)Hl+ʺbĶ,C?
D^tPA;:8^:ɰM*;*e4W.%:AGrOhfL\X;XBw8^8N0\L=][ֶ2ƢDQ#Ѳ̴Ą)l-pۿ$HiŃ9D)װLSU?ffQH}Q_I,14VԵ
3b-E~I -ᯔx3l[4#>>\U P*	qhw%r/	eWpP9NL%*< F 1IjqL]s2IRN3ϲFen0tT3B=[%W/]+/!(
F˲xAΞ'dFӹMN^,=CM7ma8XduN!RԵUP |0sexCqL07
XD11bd-Xd<hF
4CkEsF>Cr9GЅ}dڨS e)]tۄ	ztҩeb;.n6%<emH=:όY,IS+#
j7+#v:dIA%RڏM(L%A$̘a
uOv4'ԴK|Fa1Du=m"{nʝIJ:"C[ﴭN"G5Ia:6YY븶4f9$cɠIV׻&|p<mMYKjҖ}LK٠b8Xq5|F/O;S̃	ᜉXV<uN*EXK$+(M1˨p8-=ÉU(W)E]a+"Zػ!K#4ױo6qxGmg:N_!+z6q^6p99m(:]0$a'G:vq9L0 R$m =1< dh:s@nc $Y
sw pz N WY[y{R:PQ`μw۾@6Did<DO]$n*ۀuYCaٿr4((?JY,ʕ됥vR?I7?PKIg    PK
      A             >   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/BCMayoPrivateKey.classVYSVYdK $4
MШhRp8ӆn[2LM?'LC>tkTGƀ PW9;9?pDBZughY\s}A[PO5{&6 	2gtr*K*_R4V0/PjiS[e.r,x jIv-L+!NhFCc(~<nהj);(i}HƲᤄv8;,CӂmJ GTf&etwZt1Dx腷Fp$qlm+Hy}U^
A\ZwFЍ2B=FN(PQ$e$pv707JPpUȭ39vt_q74Xp#(́NUi>p[eP)OVNw4CQ%ȸGc&Fۘ)!^121wtʨR^W%y2{KԓA	i_hk%LȘAMO?(Iy(x
Aa<q:=\AO$:̶8OŒM/0</ǂ<#O:ά[s[jBN'_+*,*Ӵn\WRKT	9qk3S%ʛ6ߛfmwq0ehX":Jq%XB-@,	:mr锖y
͔;m[,aj<N2I?``i7TvKޏ1Wb,KқeJRgYMo\]'|./܅O ;K.`P )-+龃UKFmOͶdcglP>UWws˚4Ț^#a
aԠ`X4`D/OL:_S$'^C+ i!J 4y<t(Q+}xbOl-tWwoIHD7ծ%FWt%izcWj\#.TH:G
:dt6Ʒ_s5|ӵ
Drwչqrq"oL=#}ᶦ+5|5m~}bOs@<rO~Իuezىx&>ߕzbR,=;Db<f
PK>a    PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/BCMayoPublicKey.classVRW=W,#`6(KZblفlEHf,/@x U	"Tz$Qfݧt3 h,Jk9e~ Tu,	h,ӆ $dCfэW4r*
*T4|VJWue*BeW*ᖹK&Y_ը-u>`	Kh9'af;MѓpԆ{C#baUJikh,B7K %TE0UK7Njn	Z9eR&jXGK0*Ã0^Dd|5Uϊ,3[

J&:>d|"SIUjcbzRteje*l|,n:7דB˱;*#8CŮgp'S_N0O$P0Ġ?eMI
_Tt-GqG]}~jƄnK0$ěѓ1`DCc{TdĕFO8μC!L "34v0p)S^WR[([y]"I:z5H!LcF2 pH2B=EzB\3'zPb2w)\^CWVJz.x]d|1tx722^ԜLk*:K#"+_۔"G)WC=N/%H1J9/2嘑@Y0Z!j}JXclԜFX099l
#ϋ$cPRweex"ZøV9*aꎽPM4Z=*ͷ^l-~|(/[Ns:aF3QThcaxPc>`QՋ,rӜӉXEjp8a5
ArXC@؟,t-ӳX'v	ӊt6v֬/yr<}0:^o%⿡y;"G0.6O7`xPtftn8|D!(snXӧgg<¶>Mb|g82:v"`iɹjQ:(MSl6J^c˳Zl;w9@3UW)aHZ~#Okפr27x?PKl0G  '  PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo1.classJ@c?Ҥ<",9x5 
o6lu<^>%Nԓzg?30?!C.k;j%j,m"2%NˬЪVh_:7v	csEE!#&~[%
%ũw&^4ĔLקRU׳!t51Ap`0pNh.ׄxbBnу]͍{\cog5P[PKy,n     PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo2.classJ@c?Ҥ<",<UV7U6ݺI<^>%Nԓzg?30?C6UE9Bv R%N4תgږh_Zr]΍0Ba(F1a])++N7$&,:t.}l)O k?fM>oo3B3q&ckO(tboػXgjO;'_=ǚBPK᳟6     PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo3.classJ@c?Ҥ<",E<UV7U6ݺI<^>%Nԓzg?30?C6UE9Bv R%N4תgږh_Zr]΍0Ba(F1a])++N7$&,:t.}l)O k?fM>oo3B3q&ckO(tboػXgjO;'_=ǚBPKi9x     PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo5.classJ@c?Ҥ<",=Tj@(Z=zlVPw&Xz< >8QOE׷ CXC#@3Fm7"u+*%r,@J&WiU9ɴ-͵Ѿ ne册]΍g(Ba(F1a])++N7$,:t-
}l)O ?fL?oosB3q&kO(tcoػdjO;'_=۬ǚAPKY)     PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi.classVWG

q**hxVڒbDqwƾ~+=T9=?wvBz;{νw篿`?4
Tԣ!Ym)F=aq-V
}ՠ묙j2ŋuC8n17/ΚyzU_ӵ0--E"DUf|
3
msxyiIZif;=/.rCLf-e$g 9k>*pF5EQ.Mҧm	ERp@A|Rng{<3kK?:=i<ఊ#xuyrZg,&Sf9bR0Kic#wSACoI{MM[ӱe}*<C	/޳#%Qh8`@ (ezZ2%>L5AE$j$1+*^9rlCWLB;O*UEǈj"10+8й=CKTm;Q(F1EX!3<\ƓwQK&zWK̕!Tf=
zAVIRCmg3`V%_ВA%WٳzY$V߃4\V1+{
Jd*f6IoT\%
o0CwJaƴleQp9Skt7KP5m>E-944^M99zh|ιYA0ī"q4.	0PZ&'ЈMG-yT2(J˛T
*2jX'%8bxPVk3D×ܴ}<:j/din(nfm9e*i99Ύ`,JVpxuA3'W'v	ΑU=FC)ݲҦ1uҦˑ{
>`7}'n(T7'n0T7'n T7<.W3:bCKPhOӛV0	FzCrĈ`Co:Vd	+QK?-ww0B}3.QJjw@=
[/o8 @HlHߵeZQ{p#T<ZztK~B40]GVFbrYQjXI(=ȅzB=hYo2[pv2̯T2G/e}gXX/`>^u~q`D
nDpT*z)GC4# -ǡ PKd=4  O  PK
      A             A   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/newhope/PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/newhope/BCNHPrivateKey.classV[SF=12BK &д/4*IHSM@q&NzE^l&5
y3	aСQ~dc$k=9(M)hFC&z[y}y}SeܴL
C(˶"V6hIv2ʢK;iMk愣[y.	}*4☻\yGK.B<Wv->xŋR8nR%Hh@'CflBZ#zip,ikNƲ*qIA^\fw,C{^I)s,U2dfi$#dcC
`Py]w\p
FYY:ܐCIg}|
IwoqL^O*p"3撓ZFE1q
	3\9NI{Dp;bf̋Jt-z	nj%-`9CҜ;UpWWp{?~m{qrFl$w4$1<cDDΧyJK`zzyCi[|Kxe>~OR
5xU*ˌ$rb9aiZߩLy:ݒhS͓0kSE
KXfh#i˕2HѳQ!)hx3p岬;cJQ-'1/S
={~ldm.`i~v1y1KTyf`9
#2ˋeazGÍei_Em:_-;\9"/=EQPHokżMO+N$V>IfmgKR#p{
nԃRf bhՊ,%cD"w%\|jߧC,Bw-*B?M//{FlapzӷDO$t>=9A֎`O5C|tZ8) $޿/>"!z8Bd1
!>YAAX+Mu}42U/^VVBf8GR7;5𔁞C^:_`NJ6 h{Tm6H~7cO` sSvx=D

H%Lb|'Ti!	~ ?(V<9@ PKp\  	  PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/newhope/BCNHPublicKey.classU[WUN LJڋV;PA JB@!8̤33
<Z|p({.	"Ykd_η=ǟ ˈCB(k	W
nVB&4kN7uw#(v#n	(]QKVv5P5FD/[5ӪUj&(vOR:Ð^iFwՊ>
WNZ&@o)C?Ca*~>wIČjʛV:Q1K25\P[	Z6ӭق¯v#gwOSpaqA"w9Oled\u	7ĻWms`|q[7 ŷ2[Ħܩf`9!Y[DJ¸pa#XC;¼my2&0)ᎂ=rȑ35",aߜge)6e1Y	is^+6FΛ5;e{_r`|/i_7P<rv(Йːpzmt\nj$p.~>".#/ᮂ{^IcK*45
5}chäcMA鱑aƢw^5t6ׄhunHEv7kEn4D1̷9o<EjѠi^:/nl\y!gPHb?՝źYIӈ#%^o0,X0/Mx-׫>QõmRaq(kpYL,g~63Byh5ǰ䈠_=+_-]&[V9,oO6>/lISdky_	dGi<gw!YMߐS!+{#V!`t<XΞ{?O <#ށd=BЩcN_qVy({wJofR+Ph>P=B#4D͐a]aa59~)9m
t/RWVzVPK.!  5	  PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/newhope/NHKeyFactorySpi.classVk[G~*PBEMz
V%)5\ 
,CXf&{W/`yzڟm&`n4ϳ9y_ \
ѤNY]sM7{Zv.62fh8ZΕ;iah#Ұ29ӜEE+T%!\_.FF`8c	mH#g莛p|mVlk=sŰm9``1!xI1tamtp42ꮠ,Jǥ w|)]&5aC pG@zpe'qVeA5IxJmrbqB
QF /xn#OvMKr0P2F8Zq6e3|Y*N+]jyp!r\PqCO
> FMCEORx5WpHe4N	e
QWu]
d8'EԒ>0Uz(:ΊUOq1ënVn0qGa6
S,LD}P<*=*z﯊E)U:оvQ$:9to>GL&iGUЄa:Îc&ybSpP8bhj^/{Ğahu9q<nNeXd+!KYdivroRz\Z(X@@(>`HL_L}vʮLiNn}]6)
Ǧ%Jڇ	Sx#3jt]HN	)n[:+Ŀ%RcT:4WD[N#CJG!S<LK* G,u\[OOwZvZYI:bR{$p/؂'geRZe=kד'
>g{Mݢ2k%\}?I~xq?c\N	?fYLzK3!P5>G|Q=eR%1)x$ToNJ2=E`Fid46lǰ
=qhvw
~g8Gp|sr}pfC?c.=5%mň
k
'R{8BI0B:IH	ǱF8#-x} nN??4t=|pbMzpAz~_~mؼ2A6ɮ2D6%@cG(!06uԄìg~|?w0:y]z謯V*NRs%Iz
;PKxJR    PK
      A             >   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/ntru/PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/ntru/BCNTRUPrivateKey.classVYWV@44B&8a
B|1[2LME@x4Ӈт1`W|3̽?p?@jA04MdQׄj3<tdDjB:QUnY7TeMk*ݚƦfA1MnqQ$<7ybHLTQb6<ö3i%
hdve9-WɯrWDt!f\"ge{ȶMm`J+=Pj7%e`2o1
J&::nXֲeq6L"V5>st\wP9*IHx.n]'Q]5"MDÈ *!&#+ܸ4&/!nэ2HpKIʭBg86q".I3y-G{
8oi:R}薐`οf(їۚ;e1G^NX°1ʠӞ
HALqJvqg<'GYyOy>D8!SA!LҦ73>q?iHx&cvi6ݤ/JCSZB֞<9X0Kὥ!!K3e,s:b0[6UQK|%kIp2,f?ftBv02V(BJ-HXe
,ȠX5:NSYV*,Rh	Sj2jcz~px ~aR'\5jR	y/R8)<?Ǘ=se3J47ϩ}']Kaf۞<(Ɓ3%
9V|?2t05eP4=]"ϣ0=G8;'4TȂ!Ge@+c_922ɂ=]r-p
X,^N#I*AcUM$m(iw-^-;{*a1XHo5Zoc!X_Ch2]ܪr,P*+he
>r=7F}_wOb_x!ն;σ	5XA
3}z_bxw1
aLl-M0x TwRdSt|2ֳը䛶	֓w-PKnOK  J  PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/ntru/BCNTRUPublicKey.classVRW=W FlQ&q0cbla\F,͈Y0z_J0yGҳ 2AU>D%$4!V[\)rm]]-bhky)CC"mF2Z 3ƺۚZQiRT*]V>'E[Y_Wynd2<
DQJҽcsNaG)K2chtdx8
M_Rl*VF[Ӈ(:pY_/!*$W-ݠrUCpK.=&eԬj81<(Qt!.\gkBSX7qKmw)STnMXr\]|A
nn:CL	ZI,zd|^`U'DO29@(E*>ew󺒙VEZޛ^
tJ#1r5M'
숣4	Od<ųǓ1\kQ($x	zYqzB-f%oKQt]PYvV-Оk.Z<<%c34>FI
4s!g0/c-ZF3-TDtE/))~Y:RS_k#oâ";x(5#CgPY	?1tS6Tj{Uz5ct%r7ј)</f2Kjq-~Ih=VmNQS7	gC3ϨzYnjQLuaHnI(q/vtV~xָ\o:(Ǒs} 7U=	En3:fk*gNm8¡wI9BqȁA!gÂeztwՍ `~d'Y|>)п<V{˩>UŬ3CD{ԯ7FL~ﴏ;
;nr%*$ݠ|.:3:>qWngSqo/ҾN1aɩ)huwVoܻr CM1/y=}|동	kgFh& ө}|{L&rbitj{X9)
PK0  
  PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyFactorySpi.classVk[G~*PBEMz
V%)"5\j z[!,	qwP+<|OꇶgM07*lfwΙs3sϿ
2~PЀF&plU+cz9
vrɰiM@pL6u/6bX"qShʠ$Kh8l'-륄Em8>qq1L
ˎybqC0	^b鐂Ntqia5j({mV>fnV ?[	mrqUP=5xUq`Z~dhjЫcg%hd3gӖpȺa4,XI8zD:iϴ-j0`)x%}'ѯ40xvsL+Yڛ>$)]jyp!rSqCO
> FMKyOx
pP7Ne21W3Yӓ"j[=0z
cȪ8N+3-EM->̠զZ32)(|d̮k&見0pDϼ
C;۫hQJp.C(iCtoGL8&(*XB0a5wHV)8ߊ)(0WSY	ͲdQegǥ*	}nwұ-xXn&O,&E˥yCRg822`\J8cʲU*")mͭ	Jzʭxj-QJ*JcrH'Fr\OOK"p"JKdܖN+Je-RiLjVr7ӎnBZ+
CL[,mضzފ	qtlRqU^vOXI~lS}m>U>B/w6ŴvRP>+խpc̤kt]7S	:&u"&OTAt+(S* }qRH	j<3a&Kqhfu~g87qtcb}s6qjg_0
 gfMau+jG#	q/X#iicq8:Gx78D;/kaS|O#]GO:Fe 錔ҳ6y\,d3O*C] <
4HD?A)nw&4d%;Էٿѹ>ȓCZyF*/V*7 K	}?+(58/PK#U^S    PK
      A             @   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/picnic/PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/picnic/BCPicnicPrivateKey.classVYWVYd@44B 'nbF2Lni_?'9
Gt8` >Gf373Wǟ P-5ŕ,3PmCUBQa03ʲՂ-;+ܦ|M[Trk2:6̛Ŕ(70<]ѕjrQp~10D;'aj'`>*uR$#]%h[24d=bۦ%Hj7%섃E`2ӫp	%\qNB-okٲX'j&^H@L -ҨX
"rve_Ѕn}U#-Dv$4BQ	1q0\:ňia,Y].:nPpīZ#5$&EBH+-+
tħqXe%$λ@3sUl"eaثUcY.oJ '8c)J	Ib;irY9qdX1
oMI fK]ax"8N깼M	Д+<	ĎcO@]b^{Km)Cf,XbRlpJK|%kIdvY6~6OMtv|ePt[pXB͓A,,	k7ObIӉ
ʝaK.PQ<I>``cyQF+4(QXMPk3c_R6Wgx1_
N2*.\kӪ6a6*fBQi$Tኟi.p	yX[֬At	::Z)?C-H_Cd
XGDh :^:<t9iIVo^ IRA5<j icInw
mGWۏdz<+j!:~k=޲UnyU@L
|Wm2ZcEݝRTܻL/+%AjiÝi㚅ـA-C}zw΋.>Dqo*16ǉ'Дއˇ"+3=|G6_GߴO̾v0=PK$:  p  PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/picnic/BCPicnicPublicKey.classVYSf=	!YۦB#HB%	[Cдȑ%>@gZC_:ZlPg{O AfQ0$|Kפ"-êڣMt1
h0bkҊrE断)RyC2/tijA1*,O,xΊϕ
.s,љPOY)FVSZDt  [5XZtjr1х.erlUjl&*
9rhA%YUm`Hb=HWk=FA)xqCM1ՆHc+Dg5!<<^r|*6>#:';C\)j?82
9R4I0p~!,kH
`h*>Eo.UCOnJV
=A]2t{(3wuVB=/AS2stpҨ/ET_c0!&ifOZ'VYiHϨVMGN59SRn_k9f2Ŝ^vl
CgAYfPx3"f1GdJûq/D,%C!-25j:OZߺ%%4j
jzmR-*;o=.d1/GO`)C=N|rYŚSZzU֟0<<%
B,t֠nQ%gSehs,/+Cs"q;:AJSYb>@J(˧gZ!80\

7PLhܲ*5nusebetLBF
*~r??ZgQQ˞| d  I:E7=vԴb&}|A2q|'_dvovpmiK乊6U2UOȝ0$P;M>zCz&igx&"ڽ-`wWqzf L~r_=<	΂uzQWGh):))?lo⥅ao̴٫lfKX>J
PK.^  
  PK    A             Y   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/picnic/PicnicKeyFactorySpi.classVk[G~*PBEMzEIH
6-uwP+<|Oꇶg7@n3{̟U 
2qĪUGh[wsjipnC}(<pT߱L=%n$@$pH2!3HIRPx!*0Z8hEN*friqYNL\5ճвmEsm5-DtPB;:8^q+9
-ʪ(ƌeAU#L.
9҅8SdbXSV5uUWKV,]3tJ?OKR&#>㥻#f8SMXn1UaUz E}	+,14fµu#
e~ӃG0CGRmFd\UG ҪP %Irvs!
2))\&W
|mTbeMckjJLCS݇Bo\X!)AU|tj$aw8z,fP)-V?bڧT#`wM3>c2"=}x-vֶWтp>~
)˗%q㘠*c
qCwGObZܣ6PfLAxz1q{k]OgnBOx^ۨS2zJ]e$0c82mW,uDYB<BFTev2+a:k	U݊uȸzZvrkkj,+(5a$uCwxαW[c(Zj\=2ptKi/N,t-ZnӬ$^vmpB,!d18jڪ5.siSf9<8NMV
tMxprHI[S	s/V%CNRt#kDb98O~]ҁb}XJ7n5X٫k-&PU>M15N讠mbp0TNJ2]EcF Zid46mǰ=z48|7qp9=MߘF܅M߼/cxK/p
ffwC*D?I.G
_FǀX	p\#!㸽h{[)ǁg俞Fobl#^AO:@Qp#ͣ 7syll	X QdG	"NᩣCyk{wj@aV3OR;l
e:+g<r:d齝>'_D-PKT    PK
      A             ?   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/BCSnovaPrivateKey.classV[WWN L\**j.)*j
Dv` ̄	ޫt>t"[&gfٗo3ǟ sTID
C_JܒPm~MUh!J˨oʜQբ-;',|I[XӲT, СdYMmbL	:Mb1WRb6|=ӎi%)
hdveُ-W/D4F3NKhъ3c2/{жMm`
+=`doZ	'ge!L/a9tJ8/.2\;,g[˕:U0)嵪)vҟ=Q[yET
$$ː
2eJ%{XWR#١0"JɈܾD&/RCëc"CCgU
> "$q4}Mu
C_BV9Wo▄2>#$=1
C?$ܕq:+gS&:ۘ煙!^0!S-ԫ
<َh:ߝ-!p
_3Umø	b~BS4"͛ƊWTżDhN%ӗn	322po	)=_i/Wbrc1X'xF}g^eSӏ\EDMuBouA!`:f`EGlNƢ
K]!Ck%2hRuPdP,sKΠV$MsUX^ܱh	S531i&=4\+ c_Np:F34*.F8: t*z}?s9
s"e|*zu`<t8؈apg'am,0ìԯ.&"5i?=[{aʙG8tb*e
0*2 /'$¦=q-p
X,oH$tޠY4GIPҾkhzX|lk/|OBZc"X_Fh";M\-\YZw,P|Ch܄qWNyJBbÏ_F)ңmGlEh$QߙG
=l;;}W׫j{|a?YJ=6f'b=[rՐ(Q!@'ߴx<M,PK]1    PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/BCSnovaPublicKey.classVRW=W FlQ$&
l@"1FY^<@L!E^Q,H,بJ}o C9$4!V\p.j15ДH[A6úQTt[Sk*7PkRVyYKC_/N㙜s*%r|d
QZ}saG)s2:chvRe8
MmPlY+-|]8/ႌn\d<)%*U:$W- B!%\r3pÏJ3k8Xa	Q .=\f5zAxWpU5>#qbQ+#k60HI+\:CY'vBF)vȊa(PcXC?>p[S@S"3tpRhl^+RqG]6'}	UadI7Gc|S00lV)
bq	wt0p-SIWZ%] CZzud|,ÝY)tWg[uTSe8Sw7cZն_U΂Xvz.x[vd|=0xr(2^)Lk*њH:K+(+_;)>N]>F{";X_7rK.Bɡ֘d;%Uaz=rtFWIM')͢-~QnyU2OS՛ѺiFgf_|rW|"ܗ1I\ƎU:UbJʩԓ)$Ga02h}Z
7Z^6aˎpT:Q
JkQ*]t=h
X*'߽ޓMVlޠݳLin}ɷStٰgQ3x|V:͛."ө? m;oiMnͅ
I}t}CgFԞnN96(-5}v#Tzؖ-$6-wV=Jk|I)<klv]رC4k~̞vT:rMj'/өm|ow	PK   9  PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_ESK.classQMK@}kkӤQ<",ԠP*!klVX6u7"xčzg̼޼a>"8*-M+L95),/'PBQŒ%da,(2xhu'814,6RfBϝ4q*+BWBN9~` (o).)A׏	A	#jV۱
Fmz[ڳ"6@<~l[lv~ PKVy
    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SHAKE_ESK.classQMK@ih»a'? %"fդeS?%nD/ڋfvagc+Mfnc
,Q yə*f2%{4ܝD(Hn+]% ME(T\-7rqϱ&Ll_=)g)<[$ggW"K4Ng)uuǓĿta8=Z,HJ3R\.t2U}ZhkЯ3yϦFKsڂPK{    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SHAKE_SSK.classQMK@i-K=1(H{X5l6&-,(q#z^ķ0;_^ec	5uhd-%Ju1kգg8J(TEr\hyxa?w|"C'jF>G-4a[h9h!8%

sͳy˜~vB_\Y^YB8NTR_V	}Ɓt1u/%3TJޔk-LUĜ6׶1yg`pڄPKr    PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SSK.classQMK@}kkӤQ<",ԀP*a!װ٬Xvk6-gEGK"y3y{y0¾
44}lEp;জKʍDЫ`RT2daFO([),3yhu'1x4<6-*KeA?wRVTV\"#hg*+/	h/W#ῶp`lJ#fSIOE0Zvb˪QŮ쇈'g8_===PK    PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_ESK.classQMK@}kkӦQ<",{jP(ȵl6l,n,gEGK"y3y{y0nkyXGH;Kl1Yէ)$/FPXUzɦ'Ӂsa82hF@pct4,.5z)3aNW856e<3dqA@x$ &[xLPz3A&1kEj;Ԩ8ocaU{C3ǯmZPK?6ѐ    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SHAKE_ESK.classQMK@i-KŞ*H{6UMݍ,(q#z^`fv-_^ec	5uh%g
ʴјsogD"I;ZsE}MD$\-6rQqMZpNIgfeU>OdT"We0K	'L3/UMF$tA4|ZԽ<PJ)ZT).a+&6۶1yf`pڄPKq    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SHAKE_SSK.classQMK@i-K=1(H{X5l6&-,(q#z^`fv-_^ec	5uhd-%Ju1kգg8J(TEr\hyxPZlQQMZpN~Igl2)ЗEl4_tF]yȘOPtŒ*%soʵUEŊI*b5mvF7@a=~02\6a PK    PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SSK.classQMK@}kkӤQ<",{j@(klVXvk6"xčzg̼޼b!"82-M̓ගKʭThRLR(YXfg'sk#VN{Bt]f2Yϝ8)*P3UyA@{x$d-cF4#Ip,9VʭcNڈv]>D\l><{vXO PKò    PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_ESK.classQMK@}kkӤQ<",U
PB@aYec٭Xҋ7E730fx
`m+h8hXE@4Wr&(3j@SN/i^3Jy#EaFKqrsgE`CG>ُ=9g9i2I'bE%AT*Y_	mߋi<24zLcD̘1VnXjFwak!bc{	WϦEzjPK$
    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SHAKE_ESK.classQMK@i-K-bHaY5il,gEGы"]ؙ
-KXF oi=H^rL.8=wQ*x1,D`Gl~xBu&"j}9BF6/Ӕk͓X3+Dyx?K'L3*q|_: A	n{()SJT).a+:>-i\ׯm3φFKsڄPKb0x    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SHAKE_SSK.classQMK@i-KĠX"a%װ٬lj6"xčE{.{{{yFY;XD`/oi=(Q
\=FQ*E1*D`Kl~xe\7rٰF-6_齠0<%gg*eyE%&D%)en`a_wp߁K?	jn@PX8dMֲJqX2TEicym'gX_چ+:ZPK.Ӎ    PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SSK.classQMK@}kkӤQ<",U
PB\fJbm?%nD/Ջ8of`.p.h7LRnԀ&^$Rm&C5J/y|<Oؘ{p;ňU3m<?FAssaB/Ts'e5NduE3yrE?rIk[
&^?"h:X)Y3n[m>6lYj~>|yճmѳځPK)s
    PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_ESK.classQMK@}kkӤQ<",*PB@aYec٭Xҋ7E730fx
`m+h8hXE@4Wr&(3j@SN/i^3Jy#EaFKdsgE`CG>ُ=9g9i2I'bE%AT*Y_	mߋi<24zLcD̘1VnXjFwak!bc{	WϦEzjPK<+H
    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SHAKE_ESK.classQMK@i-KbHaY5il,gEGы"]ؙ
-KXF oi=H^rL.8=wQ*x1,D`GlãBu&"j}9BF6/Ӕk͓X3+Dyx?K'L3*q|_: A	n{()SJT).a+:>-i\ׯm3φFKsڄPK;	    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SHAKE_SSK.classQMK@i-K
ĠX"a%װ٬lj6"xčE{.{{{yFY;XD`/oi=(Q
\=FQ*E1*D`Kl e\7rٰF-6_齠0<%gg*eyE%&D%)en`a_wp߁K?	jn@PX8dMֲJqX2TEicym'gX_چ+:ZPKJ'    PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SSK.classQMK@}kkӤQ<",*PB@aY%춻?%nD/Ջ8of`.pw4UWr&(3r@SNiZ^3!6tTK&'012N1*Ù6\|gV<~QQ]3^*]Eu˼$\яl~x-EM~LT&B3f[m>6lYj~>|yճmѳځPK
    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_ESK.classQMK@}kkӤ<",Q?Ri\fֲ?%nD<X/7ÛW vU
}KA3SeF4"(7RhC5Xh0R\1'Om<gK{NMMus)kU<SdyN@{8X'}/D[xLfX)%t8cƈZ~bQM['O pz=-PK&    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SHAKE_ESK.classQJ@=ckӤ-\"H> %.نdԤeR3ҍĉ3sν &P3P^_(LSA]qzꎣTbY$Wٜ~a
5F?;9BF67Ӕk͓X5+Dyx?KGL2忺q|&; A	n{()SJT96t6U}ZXѸ_zmDssǟ5J
PK%&    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SHAKE_SSK.classQJ1=iǷZpъH>`K]g4%S0G>
@ιs_^cJQ!I5wZRlEDHɬ3T:Ke,L6o.7bcgtSzF5T{# 8&J:b$դd}oMY]	&gӄr$;&Lь=,\3vvO9c]RtDa*rEM,l"Աpٽڈ#?+k*7PK{6    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SSK.classQMK@}kkӦ<",Q?RifĲiwc!?K/?J܈x^x33o7o/ N"8*M%*M9DЫ Lr)q*UfRQŒ'Ǳ1w?)\qz#X/υMuRRjꚋgLe%A` 6
ѷMADTxcfYkҏ}lX=j#ֻزm=$bc	WOϢkc=PK91J    PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_ESK.classQMK@}kkӤQ<",EEATC װ٬Xvn,gEGK"y3y{ypMKh8hXF`O[+L99)$-/Ge~mF9K 2\N1"É6\|{N
nSy&4IǢbTf9A4yyN@{;X%}'
'[hLcf2A:2cDb;bըX`bV[C3ǯuPKj>
    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SHAKE_ESK.classQMK@i-KPDC$װ٬lj6"xčE{.{{{yp
XD`/oi=H^rL.8=wGQ*x1,D`Kl(ꎍE(X\7raϱ&Ll_=)g)<%ggW"K4Ng):euĿt~=Z,@JR/6t2U}ZXѸ_zgDss	ן5JPKP    PK    A             n   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SHAKE_SSK.classQMK@i-KQQbP,klVMZ65Yz<QFoafv=潽ǚ9,]̣A4(XRUF(RM"sMU6Axd\6ؠAE./^TTkMX3eeyE%$D%)meN`a_ݷ`x߁K2';AbI?Z*"lb$S1%nvF7@a=~Y1T? PK8    PK    A             h   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SSK.classQMK@}kkӤQ<",EETC װ٬Xҋ7E730fx
.Vp.h83TPfԀ^4eBVt$Qb̽ebe3m<?FgsNsrnB/d&
F5Eux*IֹT$\яھx-E	~Lt&RQ+܎]Y5j#;ذصՎgӢgc=PKe!
    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_ESK.classQMK@}kkӤ<",A=PB4@aYekٴ?%nD<X/7ÛW vU
}GA3SNeF420RhC5X$
0R1OSm<K9&ܦX\h5DuxY*I֙T \ODھdU<"h	A3,rA:2cDR?vfX`⦭v쓈'g8_=]PKczj    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SHAKE_ESK.classQJ@=ckӤ-\"A]b`a25iL,t#(q"Bs/羼>=ǚ944ṃE4$8SDPCcNOQ	^!*"P2h rh7R7l,"g'7:_-alt`No98˸,MDA[ӠF_TgyQӔuʴ<!ݿL
,\V0g"~4 R0D/*lbAgSѧ%F4@aYhiU0 PK
ґ    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SHAKE_SSK.classQJ1=iǷZpъB|@-e]
i&%S0G>
@ιs_^aJQ!I5wZRl:CIO:Hɬ+%W2`t&xk!Fv.~vj^蠆*| uGߤ[IGRt֔L,59&D'1me"忺o^LSXDPj4N+2V9&\6EwXr^nmquǟ5ǅjPKC    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SSK.classQMK@}kkӤ<",A=PB4\fJbXҋ7"q̛+clXAA*:iD-fr
zFi!E5Τ\jC7\$	01R\1b'ũ.\|.y&5\JYY_qQfs \1DھǦQ<ւ	Ak0	aI#5Gcz7mcDl?<y[ll~ PKt    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_ESK.classQMK@}kkӤ<",-ԋPB4@aY%Xҋ7"q̛+v]c-#oi$83\Pf䀦^aZ^N2!&tTK(&Y9lCG>ӂTe	M?ҨƩ/EN:e^_6	m?fa<24zL)Qkҏ}lX=j#;زm=$bc	WOעgc=PK.    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SHAKE_ESK.classQJ@=ckӤ-\"-CRild2j2XgFpQDąxΙ9^}y}z`j6 8kewb&(SK#NOI
^c!*"Q2[='ME(T]WCM,-ߤ[NSRyHbԯp$3Ƌ,/yB8JdR_V	.}O3
?";AbA`7cJ*_TŊΦ*Okk[hn?<¸\6aPKy    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SHAKE_SSK.classQJ1=\.ZBԢXFEېQgZ~n~%fD\X7pN9^}y}zaC,Dg5;-RlpItTɬ;R:Kef&x[oqw#Ɗ;7F?;Y蠊2*!j	IR_%#e{krL9&D'1e 2忺^LSXLP7Ŏ)pN96|6yjX_~msyǟ5UϹj7PK$Z    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SSK.classQMK@}kkӤ<",-?Ri\fJb٭П?%nD<X/7ÛW ]lc-oi$_qf8BVM!!,
F0H1wwq<8ІсOp66jYBϥ4q*VWWJEA:+dQ]_'	m?gQ2"^?!h*DJ93Fڭ[Vڈv,>>~yӵXO PKF    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_ESK.classQMK@}kkӦ<"lATC װ٬Xvn,gEG֋8of`;XAA*ZJT=H^qfʙH^aZ^3!&T&Y9FIq⢍CӂTE	M?ҨƉ/yN:e^_	mߋa<24Lxc)fQkԏ]Y=j#ֻذi$bc{	WOϢkc=PKi    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SHAKE_ESK.classQJ@=ckӤ-\"LՍb`a25iL,t#(q"Bs/羼>=ǆm,A4$/9STPdF(BU"rEd6gA7u~nDBMN?}5:ЄiтMpM:4,g$9}oM
=Q1^dyQ"℀2E'0Lp;h87GPkwłJ)rwʔU%MUDV4צ^} yqgMR|PKQw    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SHAKE_SSK.classQJ1=NǷZpъP2.݆L&LKNB?K7?3".|,8's/羼>=Zs8zG`'˯ii9cE>$=	Qdы.D`l*~͍)n]e}с:\MxGߤ[IS)Riy6Mb֔ٙE$!&:)	h/S	.}g"rBJ=$Y*U
XٔEib}۵G8V,K*oPKw*    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SSK.classQMK@}kkӤ<"lTBaY%lXҋ7"q̛+XCA:ZGID%)grzFI.E9J*LjC5Xt86R1d'ř6\|B\\T,~.Ʊ(]yF:TV^_OlD~&tccF?%hE*	RR3n[>6lYܶ՞}}kѳځPK'    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_ESK.classQMK@}kkӤ<",EڋPB4@aYecXҋ7"q̛+!v]c-BҴxP̔sAQrzi.x9Ʉ*t*,09N׿s'ŉ6\|=9g9.2~.QSQ]1^u*,	h/WcῶD0kqM	~LLQkҏ}lX=j#;زm=$bc	WOעgc=PK.
    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SHAKE_ESK.classQJ@=ckӦׂV!H1T,v6L&&-|n~%ND\Xwsܗקg }le4Fٝ%g	ʔi;RQ,d\%"WJfBuæ"j.~vrD-6,o-)g)<[${kW"K4')zUuǓL?wa8=Z,HJ3rEl"Ѹ_[zmDssǟuJPKPx    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SHAKE_SSK.classQJ1=\.Z E`!:mId,t#(1#Bs9r366jX@C"*{&r.'
Kz#%^t^*[V|1Vڱ3)dAU<}4}No%I1YHτM6gӔr4?&ͿLzX&WDyr"R5$(wM*N)Utk# ?9;.T먽PKc    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SSK.classQMK@}kkӦ<",AڋPB4\fƲٴ?%nD<X/7ÛW CwMN&RJpS%F4*LrJ][%C3:_x4a|so)n~E.<ŃiT*̋-A\iU^_D	m?b0kؔD O%7Z#kq-Gmz;wmu`Dll?<yYtm PK?v    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_ESK.classQMK@}kkӦ<",~@
fĲB~^ `3ffo_^j 8R&A3SeFi$8n3
AHd0X{Kq;(RhІGp2:_pssjRRV85e8g̊&A4FZ\Z}
o,#*V
Gez[mgDll><yXtmv PKkY3m    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SHAKE_ESK.classQJ@=ckӤ-\"> %.نdԤeR3ҍĉ3sν
XD`/˯iI^rL.8=uQ*x1,D`Kl~a
5F?;9BF67Ӕk͓X5+Dyx?KGL2忺q|&; A	n{()SJT96t6U}ZXѸ_zmDssǟ5J
PKSwFZ    PK    A             o   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SHAKE_SSK.classQJ1=NG\.ZB-ŅElL&LK&cG>
@ιs_^t^JQ!5;%悛|")7M#AO("RU"!4*pv:^hnXƌN=6l5:pQÉtz+h*x*Ug$@_ϸ3=gӄr$?&ͿL
,\6g"矆f+ (XxO1d)SG}mص՝G8V-joPK    PK    A             i   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SSK.classQMK@}kkӤ<",~@
r
*˦fc!?K/?J܈x^x33o7o/ Fuu&জKʍD L2)I*un,A|Q<Ǳ1ww1
~Rzhu'8_]		RK)q*+.ʼBΔV~` 6M	~DTe̹1nذzFweqV{I3ǯEzjPKCN    PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi.classZ\W?TvFcQPMPLQ4faa]wӮ^c~g]r\_{.w̾}3wO}η?r Mr`sPʰ;%ǍdT3NGhtr"aHNha~'jQ+TSqeLL[DXխP QԋhJFP]SDS;`ͳY3kz]<i4Ճ
}Cz?䫠2jTP:>Y.,`ԣ56Sz4|SeD1=Fv*,XeT1+΄fR
+fiƇ
m(M'O2,	ZkU`Pcd*'6аn	v5;BNW1̩9ag60D<$aGG[s_5
j6ywZ":SV<iyql2JHiAM(!QcS%zJǍa:D1v5͜V9bƣھ16w&f[#$fXfQ0,ŰeM
v3)P8j:
s<J-=jk2І*au2lnDҹMkeehs=C
NrAP?{"K_3G袆q{f *86{
E[811iE_
s܂ڠ){L8fp9f+oV.. {I?e#ZLє9Ns#^#g"I)3=#V
Oc\.<egLD-|sV
q<^.<e'r<DDy
S%;hYs<íx<)?y~&"8^hTLvDe%Z{9[W8^k#⼒UKcK!^Z}=9_yoxVI,Mi
Hsxsǔ\i<|=<~_Y#
M^|#Z1>I_Xv|/>y"Ǘ9_y_nɗpdu]'yJCQ''tuc8ntKL_ZcX #bPEh~{,Wu?f"e-fht
=MͰEAV?QǓܮHG>C03gTY[4!ʎd2:[#ɘY_0,xvf[+1#yp4v34mMޞ.Ѹ1,1@fv_3b	\כLZCc?"DHqKn:GTguStETٖhmFHU_R&'C_NU5H 3b%1K93B:TlhwҚ*&R=UF]FaU3B:."tAk
[0Ad<2fGw\R՗tu@%͆{')lmDцʘK!U}IL7TlhwҚDNF*cw.fT%u2PIIk
k
H r2? 
Gdy- )*/XMds]@ߕ{VP؁T(,TLYY~Iaj4f f_YBa3AQ:YT13z[RX$XMd3T3{H0}&(U?J'ˑ\гܒƂQ4N6Fz+vj&(]=+xYA3<;,gyv6k9ưMJ3X`Xn	¯o%:+Cߠ6] rxU`&MuSWEhC<՛sF`E)>Oڵv}FqsڍQc~lFBkfڷufZ!q6-Ў~/wt7B9u6Xg
F<F?DE"N4*)NYϏZb24[)JVLc`JpđJqIY5II$JIINI)<)ɷII~$?M)ϑK$|$B_-ɯ7J[$.I %yZ$CQI~X?%ɟ/H3r梕g:tt~;-+	A/GPBw1YtY)BXN"s	VV. \Dp)2W"p
Un$!DXGp+a=avFf-w^Mx
aa'a^݄=	'0£Dx3-a0Fxp0N8J <I$L	Mq	3Vv;PKxȟ	  u&  PK
      A             A   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincs/PK    A             ]   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincs/BCSphincs256PrivateKey.classWSW]n"IFT|_FA aw7 }W־l;}VێlGSf:K?O8m<02rws />TGF1T*J8AZjfg(E"I?ܛLꨪVSj$87fj@U39owvڰb|g7k$w)6S7Ǝ9q[Zƍg$)PLƩ*MYXH,Csf.U=4RXJTK6|#ɨru*hY֛8!%1nYX)Q\*(PmJc?ihöi_ߺ',(Qc26O|96͘]Mƕ'AJ،-sODV'Qݴ]mfh(c&62DEP9mx>[fvJ%8\3?miRT+iPvc|NL*r1hQ
M-l	<dp %4hB!8ѴJ.\G^4K
>ECx*FPK	4	Geav
C%^- ii]FbDqnݨKe$zEtuS('=)PE37F%=xJOs`(t)US&KE8+"<`BM	ŸXTq7M:V8*N;Ė SQ 4;Ȱ}:iG߀ЧQ9'߳.	T
e[N㼀bĳ5Kfsp FFd\6eXb_K-TG#}x/IxY+Sws"tPyNX'w%5rl~q^!
1qYHoěݞ2-}xJxOᷧ]
<#G2c!#E]>eXf/\Mh,	3tt>EYno3&74%EG5:mf`Gh$Ri^1xЀ8#ؗc9MNڔT 1DCIcH*"Zj8V.Ok"	4%yZYpB:z[3xW+\~z( 2|Mokc`;;)"	V]>Gpo(.Ip
\q2gMxλ؛q_m:<7k*ޅ-xR_%'QAsyUH,isN vp:rDAʍgo QpݮBz
'o!.^ݎSaxk8N@6tvWt|c86tWy):r9|ݲ}DkvJkaD")Fq-YY\.	,ِBr.cr	./ֺ\J!@Żx-ǛjݯgWƥT]>PKF-J  (  PK    A             \   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincs/BCSphincs256PublicKey.classVWf}%HZً.ZVtEjk~@`I$bޞ[>hO]8҇I=%aAX*M;f73~ЄeXB@A	60j,ñQ9<P\+Ed0plڤN2Wبjhz[1;3k'MGzi];'d>mXfRXKCHqчtn54lF9̨:n3XnAҬɌc${N%<q;ܲeEVT2DWuh,um%!9'$<`;jbs%=lZ32p>ɨv*؅w,daߊD}LiN~'SV=ׁ1_r&Q
3; LD!DPyʉEDU[F?РW]ӱ|}U1-~fqn-?!bOS9,0s'2i	(8gkO5+UTbz,}\w	$)8D2T:>4*Z$*$C2n[,K$Am T?:*Ap#=7Sy	aa(!P"N⨟3[8@$&CRBc8Pv45i
B,Z'V.WpIX˧K%{Ɨ u A/Ѡ\˚P:\g
VB#R&Χz{M[C0CӺ\yyJQx6݌%ۮk<AdxlK-ym?#u\SCj6jYF~KYe	D"эxEW64
	o*xKQ`YgQ[(.P"|A;
n]jkBB$ϰ\ҁɅ.ÕTC36t5G
@u:iNNstc#r}>!Noy2+dN:6֩fzi7Mk\uE;=Zhzf[p0=b[v/`U2yH3Zjf1W5=|b#|O(E7k.=t/#Y	>mxw,X8rR8ze?{#JRծ@gQ|A itk^;kGra/{8`"҇vهv<	%N!r𯐢ɡi
;[YQ6 n#P<]<]7! G	+mJU9b"Ȱk|oxVbʴޯz|t[:fL\7iFן$p6\~(Y<λg;(y#3luN`Q\uQ	QP"_ 9>xd/fv
Q<
_D@o<q
|WE!qzg8:0gatϝ2:Z$^JPKVC  
  PK    A             ^   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincs/Sphincs256KeyFactorySpi.classVk[G~*PBEMj* mY$I4~oA鯠_?ڞM6bg3sΜ393W CAA9T4cñ5=k0Ҏ)=vɰ
2
@pL6}/6fX&1ShʠąMbXAqRюSזed
ݕIuQݿ843cR:eX:]8nZX{M*a-RP֊J',WAnצք!GAaǫ*Gfk:v\xմV,?^RImqa	{ oiI<pCi[1ԠѓfE}'ѯ40H;&ӊ3t/$4?KICcg+P-ε"As*Cc詁@h#Iu)2oIrv8^WqC*1p
(-V5w
_UpȺ2tQI
UOq0á+Knqˣ(VOhKBN/%MH=P#*nc`9h=vַWтp.CdOxoGT$SeUЅbk-}))PCH\ŪB+p^`>51s_ȆGz<e@ق(YMR#roBd{e6%, `zpu{j,s
faxK_~]PݪZW4ڨ]_T6TmA8tDP+nZb_^D$J1I=51#аC^bMg_mDÂAYltJcf53wБ;薛ePH&) aۖtԤۂ'Jyp%e[V=kדç
>_xMKRRL+c'l}?Y~|}<nԶHu׮p@P_\MDd2fJAۤNXĤ܎
_P9c8*]tPatqHqj<
3*LR)4?7|'3;?S8p9 ,l.Ltw`X#{h>Hq*IDZ}X}>+cx}cxopp
9w^O7rݻoF
?>
{N1&Ig=p^zvEM?7ye`lF]e>OPCeam_2Ԅhgv|;w0>9%=tW+zK
{'}BߏsG$
}o=PK+M2W    PK
      A             E   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincsplus/PK    A             b   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincsplus/BCSPHINCSPlusPrivateKey.classVSW=YAoE4qDF4F`pvfݤris|@Ū?*cfHjLwO g:hЈ&>eSČ8Mݚ96İM(5Ӛ'LPJ
]yF3
Y-Z].-eǮeF藞,m;Z"7En͐UR1W`E"y0ZvHn
^'kѹm[^FfW"';쒰{ehRXڄ먔Vg<Qu:;r*:]$GȫLPpHaa8Up1-bR7EZUPP9m
TKS%eSEt☄W*QGWTxbWD	I	)`8ƩOJڲx؎qKrA&y '%xܞ#tF'21a)gpV9	o<ùM£R]A=VwՓlPތ)	bO͔3h!V]7>	ݏ_e4Iae%/؜t܀YӉ~	^Jz9 p͛+۔7I ֍`T"C$2|d5)nI.0vQU"dI@{o2ZO5*46ؗ=z^;xW{NɌQtC[^Ty>{\(^Ѫ^MNf#R
vLIL|fBV(H0d:V&3:Uٴܱ4G-1TBQ|*.{Rie+jn/ji\Q$n3}]1mmD59:lcAB"I']-Y+yU	FHZ2W5}Nzo
2$wx˄\<bPH]fG#ܶGL5Z5j5LuM݆`#!J>cK{74Z[Hֈz[br,z
ᷠH$:h	t>oi^$鎊P{W2؛L-`/1|Hz=S_0_Бzpw8z"Xp|~U'2P{ie6'nJ;BSatg*I}.!Z	bA
!B{Kg,WquˎסYGP}KȖ|8w-6z fa:CwSB9K\Q&RO2I%`.PK]f`?  
  PK    A             a   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincsplus/BCSPHINCSPlusPublicKey.classVYwVn69B,^
Đ%nX,	I{龽OyHiC=?%EHIW3|3W c
h$-|+:7-4Cs/24&SV*!.
2eӞWfͲVTP;8VQ3Tˎ2MНަʳ^bqѱH]\s(CS
SdtɃp6Yo;޹鲏j+g̙|-apfʮ+U6kUm]]A;BAҔ!R"HpIg=Hx1T 
djf8CpX<pΧ!*qbNRrfxf8u3pT1'q;,Ygh&q*NH!N7bJFdgkyҏNPpa?Y#D16ic̓񂄳25ߋ3(6׼aYr,OM󞃞_YP{Ss)råzA*Å:U'GD3~[S:%!$$3(rvL%79rOFN8FpEU1j9P#)2MmLFuǶ)0%
oc
yΰ.yUs/boAmnW~4`n24x?7e1Idm#]y!ML!uP1$<(BQ1%3lU͠qUDN:Lak\\ "aMzY4#1/x4NZ7v'`MM\]u>1T!}ޤ)ŭJJS:kq'm7B2$YEa g8"b_o`q&LS6
T1=ne~~;Mu\[-'O)!Iтq|/$|Mn8֌%sQ
8:bd]8GLsl
O'm^DLT{֙r]3:	G·Ƕ6[?ew)(B5IqL5DwtwHmE:$y@Ǥ4$jtf
]S`N%M/hnZHd!6
*z.7.پ 	MГѳ-es\B݁҉UPg%`%N_k)ᕱ*^[c+	>/q+W]uGM/n(L]q\^	=TBP
tмH8]!?_íMuj!,>{[{JӶ2UU֗cZh]kPKT  
  PK    A             c   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyFactorySpi.classVi[F~#K&$6&9!M]nH^B,FH$;qzJix_Ȗ
hi<43̾3g W:s4h!SkjFUm*E[:á[9&%4e~$~ceLM$2/eh㘌V13턲d
-i[_]=#z8Vb8K%%'IТ
"j̈́=j8jhN ?	ejiMhp-U.xYiaViʚi4͌,lJnhJ;J|z<:OӼlZ6]2,+]0G7ݸGhrux
FFM*%Eq֍C{ '<:\3B$c 
CW> FICx}$g*k2*ñroJU
Tkb.n2XW"b>Uy|r2c*?q3ë7n۸qROhOBN/t𼦙#2("=s*Zm)e:8K*ST&sdL`ʫ3q=aK)qZ
j1
-֊VuɸFQA!oO	Zd)[2m»ʬ-˴]ܝn7k		Hfa@-fN,4o)WSvV+LSʈ]_T@TwAtEd#bsjwZ%RqWՒ5т#P3^N{_$młA<Jz瑡-owV
'!Pr.D) atV	ᮚN7IWtjj
4)Y#iZ*1tV'm9O$<çysݤFL
;2|}<qXN	7fɴ5\ٿk-!PU?a|5뮠m1)pXToJw2]EmF>Zid46mǰ
=z4x;zCoD_sy[89K[8xOcxx_fw[D_J.GNǀXq\#C!C[U@.;J??%4jl]m
{N1&Ig=P^zqCEM?7y_Kو3;Jp|D.CeamkuGY=ttv`l>7s$((-RyS^*WC1?gsH4_[PK`#`    PK
      A             >   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/util/PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi.classVYwF1(8@PDqi
!n<q+dх{᱿StyCRޑxISc͌f7g?8oK_:gؽUZݒr.k٥t^gXV7uw+ހnl!fYe*ZISJ,jF]*n+W7f9^J#;c+"D>s;& lыRقЛ\pxe`NkձqS2<Cx.-藱
YVfl<S.!j>9ʔUW0-20W55p>ThfV)w O r}zZP'wO;V6$48(aP!fZv4 ꈠq8C20lkb*<-qCĈ,7M	r'kN$O}u!҆[	zVw5wu˔pa~	YHd(a(SuT&w5KCޤ][75DfjOK1lO48:s2Fn*oJE]mDEݘ:Tu[W`^K,ኌ^f܌Ty*ж%MVR&v,9>f POԗ4)Cm!7C
qMuQDU#]B*VS5}G31cFhPYFS#!ى-0:Ky'$2@" IjلV+d*%Ջ<GWSJXca
i'j骺4q[-KNii5 F
zT݂Mexnsv-4BjD&qai7/7kީPs-&rv(-7毩sPdIjRBBÓks[cEܲ\ǵwӍw_7B>oѹdt=Tp	nϰ3;f%0ЩmrTM0lG|>)`eYr&e!|0|HrWT3cpg0iYB>*K6^+y峫gĘjiW9ay	_T5ߠJaKˋI|9zo4/z`Ҙ~[.O<ǐ"Wz!Sbm`T,.DÖ-:q)vLF.c2?~/?AIdmpVD?#3<3\[ߋAdkCt].y7Mӧv
`ᤄ3R6*?V
y	yjzoԑlD^|ׄokgl3M?Mto<L1mqew^wp
oS<}Hw{> >Ǘ;PKrz    PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/util/KeyUtil.classU]S@=HJJ?(SH&52__eFQwЂ؇fsνw cSфf-#gm8Yrur,1Rb]//%,FQ\7Έ~l.U`e2PG^Gf@'Ym~&aX܋7؟HύL;1mRюc
k@a/TᝩL#gs׬lX\JH	0' L<TU7vr	BaA
pL٧,1u'#uiHrWя
.jTW.W//b9焖chf^i7
zYNxR
!.TܿB3*
1"Np
10
>Ja
+3'MA\G`
fQM>۸p p
E[ZH#6UBpB$7nbt4j >E_	
Kv6<T03[kEO[=<KsѰA0< dhO\Mj#F>j&_L~426>W6gd{-hcblhmSl(h'͞ҜzgA}tKjYqPvof}$唸-,vn #A5R=8])쇚ɿ8Q76p7EQ5]ga;T{DMQjqch:0%䉌PKNF    PK
      A             >   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/PK    A             V   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSMTPrivateKey.classWwU^2i-YT@E,j@K@*5&afRwq7\NQHBsf{~{{ߛO uWQрyF%y*0SO@#hTS1*CgڈٔӸi%E(sBh|DW#=Ǆ5Pw}hߡ>-W|!N=.L[TG+%)Kօ~,P~nQa[%H3r+82
[UX0>BmQjnekfI
Á:T,
u,CZ!"QaA^
BTW]EQzZİ̖\Jӆn%F6ִ?yÝdYV|kܪb;!(a݌!ؕ1>d76*njQ-f>L4; U\g;AE\̡"ehnW	TRϸ
w(S]Sf"|ғeD5+mP5j(alNuMe(е
+ڔ]t1PzPrTN{K$"ΓQvk"c(93VϚЍ{daI9TܮNQWڔq9]~b2(y4ВJעZʓk20~Gċ}ޞwpGx ́~AE
:Y1*-VU#lx*%n4hmPH,U$3g+
8IGrL~>&wU$tw]s>VQq|}[y!vI{[X*7=x"{\NQH\t1g\\9S
V1gf{OXYI$9svx/*xIxa-N>Lch&<iGeyϥ"Ň7T)_ruSE6<
s*S8LTc
gPzRNcTJV-Ѷ'
!/V\n@7	ShYRȕ֙25\
ο0t PEd`{hIgk'ac#8+6c7>9$'tH\ݣdq;mr9Piګ[B=z&!+027jfau	'Ms_̦b=)C'S/}k|V;|蓥?o?Lo$X"`E4$ ڦ #8fG,]E-.l0ؖǒXIUy<@_=P)l΢
9Nti9/)Yݟ^^wORu֏]մN?=BR\G$s7+Pa*I!Mn[%>]+p/Es윭BP+λ.|D(H;}
4x&6]O<b(v,FڝFOA|ODD1QEv5uE4
I<<w+=W
?SΝ<s3,u3
t+SxޱUG@%7JK(%GWz
a_7Wu&R;Ft,ϧSPK,e  9  PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSMTPublicKey.classVsU6Z( -`d[
6m%%`+vslMiQwї3R:>88MKTv69w~߹w w!4YB@FZ:ꂪU#L0
9dDv	)fЪj;EojJAS}=-edT:umWB9=mJۄF2$p9[	AcdhIRK6 fUˎD@w؉nx}'tUJsf"	a7HxF^0oEEp^ӢδiWv6GnAZG[ӷ0^q :rܙZؚҔQ9	8Ǘ{ S*D@xs:iHʈ!}P~IF&&-;ODEӎPCUZJ+GfBx	/K8.Ӵ°o+!7URxfhfH񚌓8Ej,w9)Or$xj8AIq#4[zZIǓt=,6ZƳ\qIt\yxڵHm#FMJcM7ȢˎnASG#2eo&֦DӶ~	WŚnE\z.7eL$tL|oɸ@&l0{y;7JcgjX\qȓ%ʟsj\j3`.c9Z
x=MMght2 v)i؎jhTHxsDYM(ђ&*κv5]tEQ[֚aW=	4Y{\͵
TN	1maNF斮3K$a혓QӝH焎dhSPm͙&iGSjyJ-r,LSiT3HMOrX/繵~@=
5EնMJ^1BlY!I/]40|HrMK}-^辍l->oӯ^G`}H}t'A8vS !<O
(Ywּ=
v=D/aFcϮX'u'u&-E_!)t-ㅻ _{߅%܊`OSDLu1_<]Jo,$p}t;{D'owQuXXl{nNA,%>/o-z5Z{|s~b%izkNj,}h
f\M~!uvQuЕ}|*_AQ(|eAaF,{F%_PK]`h<e    PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSPrivateKey.classWWW'ġu&qFA(.aHCg&}vѶv[l5p9f$B@hs̛̻w{??`#=(B`(Q@\IDm]=\5fl(<2fBfؚԣd:ay uZ
JJzOp=kƦp)&<.-
R2Δb$
uv$OZPPz+k0@LaMA٬1U.b5	JR@J(ѝ:<yX)2E`֕69-d7	anZ, J((Xsm.x4kfa݄7JăX%!%즧nCKI!hNɈ׏	2R+ KO~_,3a(aJB۽-c,@acVke	PBe-`Y/c62"9LqlEV)EQ=mj<VT3Sɕ:-ȴ=^q4:]S*(a;Ö\(wʨGC%wPԃW
MDWB>P<ΣJ<l~L-pRCb))i{{?LHDކ2m%-!1Sd ,o3)za74ܐ"C= SS_ Gk
qtJxL	<ΰi&wį4
Ec<)CAuTJb8u6JGd Ԗ%݈Jz\~:ĩy'/٫Ze g72A)	e {YbҴ[yp y;;neYT)F/ihO3/Կ
2-9	8+<O2kuxA/%
S?؝0!PA~P?jW%&uqZ0JG7J$*"[I̓\BMom⡞}Mߣ$\d(l$vNm/>.˸"_xomi3/J'#qRDU|JD=jG9|kj%2%݊67:\הxphKAS%%}c҃T}ĉveZ!q蠃~&MIW"S[iR1!qѤM qTVZn3,ͅWcL'"Yhk&%dΛn(g.,W#qNF:XA2W-Uh܆䯽?!XEBp
؂èeE*Jor5̹jdbVm	_5#t۲s w";J/]A45ݿo,ЅVѽl6=gEPBm˶p׎AGb)-T,HJ!Gzn8ҳh+N~_`$m*ak!hjaCZ9Gu2dc5k~2܅U^KW2Ş$.Cr]xx0pINeq\ )2lN
#_ᬼD
9?iiYo陶'3xf˂[LJ#8g)Ce>s՗z.!ƍ{;TܢUdNrHG|<PKo    PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSPublicKey.classV[wUNtt*HAs@AzH7	
H0&tfROK%>'?|q\33M/Iڮəo>g_ B3C{^]Vjd<泺;o2th
ielhMWJKԼFgm[1J͖
vW"=mr20YƠ2If:E؃vۼ2Zjf8S"ѬJ1(q[p ;et!(e8!㧕Tٍ4X:'y0ʎ^Pj U1-Kfqn򻈡Wrˤڕ"emm-v[pPF?1esmSo
Zȳ$,RHA&WLHQz̬0cq$$xo#5^t7ZSj;#8ɠ<=
-|P1	3teM%93񒣛FB7Xg@;+h#?}GhKe@iݬuG_ñbqLݦZZ!j	AΏ͏	3xK%$IS8%nI}E&)ARo0-c7DA*Rɘd{D(K\1he;Vhz#3M<À4y+=d:|[TvHEj\j[2T,훆(Dk4^ErJe3͘q[BAFQԻ5)N?yd,8zgC(ƴs6dP8$,3{EUӣ斮9CDqӭVe1{jdП
?lci;qԶGYrQeRݞRKԅ8}Ѵ^8͘ʸ^qk:p{}phrIAL-0C88LieЋ;XCȚ!/'hm#Y'>hO<x b7)Ž )>B	]A"iWMO13	mxa
v|C~P{he:_yB/<NnpkM&V<d\t6%O5~Ãv^|_
:P8xYHt}y5܇@u:P
T	KaH;GixP'&yȹ?~$}9w:鿮P6 `ϲØZU?Z}^CګFm_->3CoF3
+]7~md'0Van'PKJZ  V  PK    A             [   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/DigestUtil$DoubleDigest.classS[S@M)""RdX<-N&52/G 3ZgxOHGLf'|;;e!GEQɭj!t]1,C2ә^Ы *Cvjڎݶ}Z띮5tt=*}uu&\Ffrnw50]lߒ#\Yx1AC*.a!w\fMȂYC֛/yS0$ҙ+1Q2S_1>#9J$`k]Q-˷DK+%]t7sjS*1C[U.LOz-Ef^+<_	/T
T
	E*2F
 0sV,/t-ZfѮj^L^mJ^YnI3(Ʊe<3$O0={Wjnp]>ǳ:@}[USɲm[niK|o|MbHgPK%]W
1,OkP!O{VP:Y;!0diV{Ј&y%xX6y`Rg@ߟ.GC!ƀA
ZvD{`t`2@C/ArS\=p+ M$Lvp)\foM1M>Sx@!]*bPK}7k  J  PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/DigestUtil.classUkWW`fXԢ&A;BZU%WZz\d&LSFBW?gᕘZs9 $ &EYmm*3B
fe	HHH*hpvJ])TZe:]BBQXfeHwc56h>vtH8)R
bMʞ4I9e3E>$NųբQ2XIG碂|qJ$\:zBO\ZCM?p_BpOjhWqͿZ2+q*av%n9j{gV9I6>?5VAfU̬1Ll|v|~0\,ҹ`xr=ny	d$n_ ÅFGe|I$IT_W~_=8^$aNW$AېfT
41*µf,I+)%.Mjp![00P[
oBu+BW_Li,wxYx#c0®]TcFQ8ꫲFğ{Qj9qPt)l}1}$q}sWIɔd3Q'
(0t >nդ"zqWvy:i:Aבm^޺]tepj9BKI1Nz$xf2V^G$$[sֶ)ԍsݳ_*&U4;iۛJ۩7M),K8#&w]Jd?
;jWj5%XO%

zP0i<]s61GNz2ߓ-O+!Ek..!OwC}Ӿe#N߹?݃
r|7`X8ZR]]D#K\[
ȼɥ5G52kFojCyEAЗ<ikԕ{?\_&bX{HxEXHOMO
O=:"z\@V;=uY	~9ȷAiHeBPK4  ^	  PK    A             U   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/XMSSKeyFactorySpi.classVk[G~*PBEMz
JRDj 
,CXM$~oA鯠_?ڞI6ܨ4ϳ9gy{Ι?~+AA9ZTbñU=k0嵻"[7<3&þMn04mg*݌01˰ӜEE;T%!<_.DD!b8e;	mZF]/%4ݵ.j{3mzfN0Xvt$QB${#
#襅dѢ	bZ	zeX!n%Uax# 1G@peqafe摡A3]W{8WMGBX!c'#g8ؚ!2i[0aSf
NbPiahV;|n7HRzl;B8<4:8| -]V$g*k*.2ájoʊeb|CEuU5\g8֓"j[=0z*cj8FN	׫3-E
%>ʠէ-BŔiy>f74SwTśc8XgA!ֈp$fq!I4!p#b(XB0Q5H֐)8ߎi(o3t֔SY	3dQegإǥ.*	nwұmxg-7؎'"3B<
D3SUp\J8cʲ[5")mͧӂr+'(ZK҂%ƫ@qحR{33)uY7eJrYT#CW[n#CjC-5&[@#g&b/mX#nVN1M**η	񬕴V#zWJ;Ss/d	apgSL+g'_ZU?>ξbZJ	w0flfF7Z8C/E|Q=cR',bRDM!TNJ725>".NC[`?CV`gЌo _`wM~OqxG7mc`&Nmo=3\,쐷")0^4CtEq$8Ni =lǊ
cp7zQ9t-߻N	o ÛX6ww6Hz_JEm<fMW'T r.&$]\׻[xPyzf\hlHPRN_|_*/V+7!Gݤ	}?.+(58/PK
 S    PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTKeyFactorySpi.classVk[G~*PBEMzo$E
@o2%nDb/~~+~h{&sbg3sΜ37 4r4h#+zV\adiwEnxM=Ln043-ݴ0ؕQ˰"ќEE+T%.<_·G`8a;qmXF]/)4ݵk#{3ezfV0[rT8s|8}
:C覅פѢ	bZZ	zeh>nŵɅax 0G@zpuGqz#C[1^;k.
G[Mp"8C}7c]	Fr[<pp;UC=Ӷ8`q+'G8118Cg Nfiw2tV0qFYh=5p \$.R-?IMT\E8K^첊+p('DĶ{`z&9ƊUOq3ËV7pVXe!LeQb.]Locayh=vַWѢv2k/FH!刪=J
3Lwu͸/$m*AUt
εb

ǻU%UVØd4C,[TKg_x1~y1s
:m<C_,c> ͤӶބzP01|,qgwUJf܇!R
L;Bvj]nd<3TJPS~ePPjPVܴXe֯;Dj@1O7zzZR#0V^Kg_wr_ѠW*mJcR;yd(؝vtMbdԲ\i 2adipض=sEJI8IV
-xp4c%,UOSZҶ=\S|,_1ooiek2W,[IGm;IWz	T
;o"'1tLELʟp9-6=ñU~WPCUAP4ՐN#y`2LR4DПkϰn-͞M]~ 3{K%mnD׍.=!"E&ǂXq\"Ck#Cq} o.wN??!4l
=|pkN2:IKPAzzC%uo{3[&gٌcG9p}DO=P
CenM|m	
Y=t?tvnal6$(*{PV/*NRsO5IzPKNV    PK
      A             5   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/BIKEParameterSpec.classS[oQ.,Z/h(K4i˲\EÿRbmb|G%"-1ܾ݇3̏_<
&0io55Rm|Yo3c^$
PT*%Իֶzm٦Z6ԍ6i0lj3He~BL,^m[f9CSB
0tjeda4~d<8 jʉպXkdFTg10wR6;*hmzx!v1q%\Pp#D!,g"#XrE<a{*ʐ*s<w1
qL"/$I :=u갓4Mq[{o(ܻmI	tx֮2VbWp|[bwuķ	qlzǪ]z$8%-e6#+Tڧ ]5:
2gA	RW@22hUQ.@X?/&HN$>"^}́{VTzN|}̹A'ҋDVp{H85,9JZ(i!Ϲvv9PKRc    PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/CMCEParameterSpec.classUwEӔ6m
`m6P0Vm)ZvMll?Zs8qp޹{ff?_<Jb 	0D0^w8ViUCV-Bdד01l I1J`A-wu:aó]
ۡoM׳*˕[N4:Fo2Dp$] ֪#1HL_w:Ki{=!lُPw	T5&vZZv3IIP1o!VʬL>KC/8f|6sC0I"*`'-z4̮c38ˮ{^hۥbP /=H!߉,A1:?s)AJe_UѢ{37MQ~c=,W^(iS,MePIrŬ()xbNsT,W^\SJyMXNN~Eȥ4.S]˥|,(VuWr7:ņhݤNs=ŖXKqOsUrݦp5״iq,8=7I a<oE?NjwY'}:?9&M0e5 +p_Ufh;ns7r
.=XY!F5()6	=f$
*Ω8⢊*n+bO|B8Ȝؘ`nŪFs sde,b}LTG8=DJ43Jr	{9RN'I y	\ %*@E/! +|-m	?<v0:]{68jDǨbZ.ȏPQ;ݏ u"܉QH=PK"o    PK    A             Q   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/DilithiumParameterSpec.classTmOP~6֭|6*87`04CMR.em_P?SkQ9ssso>("eH4׊l(͚d.C7uw!ͭ!.@0aѴkj;⸆&[TYw,qÑtCwzk[^TmlAicBlzXkڜcDaȖ`6,K+Cǳ	Έ#NH8S@Z
UiX@dG$|i	g0 ZGUp%2UOfpQ%	qagC]`߮+N2^E)R%iLưs}y2Lp)a4O~ep[B7f[0ǐ<ԩ"f!E+HE#b(>C[t4ep}X1hc/msۿUwo[H˪=	5MM
iЛmlѳ"y)~FhMz@hPl"O|y1t#dف{XʑD|9F&}~dF|/hc.&}p>(xtٍʻPԝ6&1sۘ>D6J>wPKLO y  g  PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/FalconParameterSpec.classTmoP~`Jt	Lx&3d1
JgܖH4sss??~(`M|&`ՏPjkCX3j*/DH(!!gUelZGS[NCW1ת6uG[BUw^b]3+"`Z@DB13NO&c,.-bO8#gp#u5JҵA7\%\,h>U{YTO0ẀnԩdX_BԴHR1^W2YBeQ2aXNE5)K9a++#!e2<uECغjki}A?r#MnpW$ܵڎm;GGyEJI7kmt<YF$+cM寮9cFE^j,~y7Us(||)Lj:e?!4Khb$K-|o1>3W|vC(	""Nd/3g3sJ!];Da{{[l.rj_PKe    PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/HQCParameterSpec.classS[oQN,,Z/h(u^}[4e\,.T29"-1s73?~~ mpIp+!TjjMkԧUC<Jbep{2I0,VI=0
k-f7[mey^xYZݰ
 	i3xq֮mUALI)#^յn1KwCGF(8r󯢦ض]fNyD%\Pps*mh3֢b_ѩpYWq!0TQM<r17h&7cEjqPAұ1{E^Caet&z@FC)ɝ+
2*wrSRu𷣵ġ5D_fX]EF}pmUVdVȂ2oܑI#м^IkKfآF輣<!3B|IFytS
"j@ K,~	?Ư&HN&>"^}x}u1sGwH/ӏ,%l/z7p%,;JZ(cqi"q/@EќPKt_    PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/KyberParameterSpec.classTkOA=CݶRU-E\
 iՄ!1!˺n+-* ?xg<엛s9ܙ}B.trt!TZIEp3JPW3$-'mZQ7[25Nv-\6Z.{;ztMʠM!H,m:J~&3UCa5PjZе^ڶ,U8;Y~DpV90VEЋUmVꛦG*:+RD}0IRANWP>xB
np-#cZ=hmmtri<H%HuͣG0,FC:v5ќFmWyTb7A?,n2=%Hq[{Ȥ){lrc<Ñd$V5?YTh¡xDv5cd%\F)uO|)o*
ֱuZn;i+%yIg'zTFFTVƌ1>Q?hFeB:(`P >&^&"ؕrُX9TH,&0TEw̽>@d]$v0⁤` 뻘AJ40y^	D=n`CPKR$}  K  PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/MayoParameterSpec.classTmSQ~*g
JEbb
uXZ>
+3g>ν4;s{sݟ}}HW pIkeZr%pRjYb#
d$(*2h]6Fhz)ZvXZEoZ
^1Ӯ3HY%0d;vZHa#2{dZfi*TiGUCnl)Tp!	T8ı2DJ郎M;i{upQ%qR:vW{Gm:&\C,{ЩA0̅ON2w_{'qK9GS4ͪf6_y_|eZ]z}VG}t>*@EIZğ!?CڸYZ7]t*r"U9:5Mƶ*
Z9h!;4$0< Bqka~m%O4="]Hc!z >"vjF_qf})ct##ֶȷpu7vuMf\ ;,#Fi{H{G-tѓ]E'oPK  [  PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/NTRUParameterSpec.classTkS@=K@
iKK["<)C$G9AEd?qwS<:~s={w )lvttշRQEeik6ATZspd^	>
?(bEeۨW=M슮hflCf]Y\[Y_VMuWu"A_8Rh~m6KAtIA ReMW_e+UjGq	|cUuܺ](jm҇p*ϔ!*N7><>GKAq'*`f::rBeܡ0A}f%bL*%;~a>d##Q&z_MO>x:͵<5Icd,;I9i)C央cx"I9iYyE3F|,=)ybTüaC,0wkunEFRFVFNF^AD,]%{mLh0{WlRצC1)"6Ai`oN?wNd#f1׈y}/L
$S[6H#ijzX$,vD?!Af#= F!A)%:Cx#>}D]pO\`SL`F#m`~SC<`E&ZrjeMt8uPKd    PK    A             N   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/PicnicParameterSpec.classkWWCCږVk[M"v!(VvtȄTG-Ur?3tZ"gws-&ЂVShc*1Y-mX.Tz9q
	vpMV,;Qٳ;Q)Ze,,kWe
?'/F\b0G80te,ۨVc#,CkFi^4>`HTթ5fe<ЯcOp챉SUfU|1u|&mǧ83CGĞz:Za(.K(FmfNpNbId_FR'*^}IiJq9e<YyH!1\onWac*0rLru&wpSpcZʐudR~c!y]ņ|N(9Vd{5Ǒ5 CzKLgޒ;X21A4owԆfuGb[ Q/9+5ZX'va1cRG^ǴY:Vt05<fHwU۪yE@uɔSpꁹ
E	ˡPդx7	-~يá:j>PgC]u%PM҄|PhYI1Ze.%:A|C[P&T:~tOk>Cfćp!:~CrQ7H8#2or
%S0ApM
V%	V< Plb9zzz
2Ê$'`DrEQ%܎0Q5RD~Ոj6"HPK<T<]    PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/SPHINCSPlusParameterSpec.classVwE
(
*k$`-bR*hMӴM&!ADADEQDR(ZQDEy2~98=ܻwΜp'Ӄd%
5j{HwrMc0н8	%h͛
7]@h(5d$ 776'mAUe*J*I7x!+"4V˪D</2\$4xb])CCϔ7"t\Ba9!g$yxߐ9\)	\zF '>pJMܸBN+GkF#*si{AѬ_-p
Uj3^k(* td6ȷ54TC7OG
}u,rEtd.7	E.#"#yVļr[r1	Dq;32pδI>i*LRuc23QL]&L4TݘLT6t)i_oSwzr#C|u5
VȾ(xf❢1{O#!d!ʘCft?(t{is!nWrMG,Z 
6Z!qU{\`&=u-'60[j<mTiv7C߹PjsR#`|Q`/l/ܟk6?n_Ǿ
쳍&y8cc?,au6?թn&+GHs<{_-fb:ʊ}$p}x7VSS<FWdž8uusKS2 Q"ipm}rcSAG$wXRϳ=م_4lx( eyn)q'$q{,^өd@	@3Wp
(,UXp)
+ЯNa¤
(\pµ
7(ܬp
w*ܭp
;QxL	!GFy8%gN*ɫӕ-+NyzK$vok/o]@ՂлdȱSN7@3odR_pL|\C⣈LX%O|+W">ⳈKx
ZC#7%>"⋉/%
+&:o$3ķ6/AU⻈A|ۈx'w%?&~gOw6|=Z̿gb:)2H1e)RLJ1SJH)axR3e")RIJ%S2)HV>'zW^ԥ)2%DJ)R"L1H12LYLb,#eSV)kHYÔg&R6YOї
^__kx]}#ق-eS){HÔVRZLE.ΔNR:rL9Nq$$SNr:PKD

  [  PK    A             M   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/SnovaParameterSpec.class	t/	Kx	 
`IH&!XhMiaBB	lmq\pA-bJXm-Ŷ`+.hm-ھwKrIfz9o997;?}Y !qzr@B/]
6E냳4ciғrK@"?>PT}pA9<mI7Ńɥ`,<N[W</.@}<=Ӑ]ө	(B ) '4Ƣx%u; l>kdn?H((H:5MN(1
bs麚_NLO\OF[#{Z8	
'$#&07ܩnC9(<SF`yᙳL"px?2(*
J=N5Z ~t]c=kJxm_nVPiG^~iSMrUHPM'X&u Hڙ
=5m-vB]CGyUH0#;ϲ
+""=/E(nl/)Gn|/[(Dɾs*$j"U]s-֨-E
I~LYBk6w*$/WX6UkH7V|o"iVXŎ*$_:;_kWXcryudlGmf|[mYoH~|;C
ھ!;
5J6f|*y+lbw>jW؜X'BUO*yO+g|*y?TNguSslHyY[%W
2x߯m*fw:dAaOV~:dP)u*yo*~UVOg}:dp {hpPmԊwoJ?e|*yV8Ng:fYm[Zgt@2wuіEf(yȕav
DcdY,eX,UC"(Q)Q#1IVNbl%%K$%Z%VHX%ZbZu%6Hl$YbDv;%vI#Wb~%IB8%kM5arS}Т%%f-S%nqC<i;1D;Y>-D5`z̒=Ԯ'>k|NY}9gB}&}\sU>W\su>sM>7v;|n{|~|yae7Y`x?
&̝75do
tVDf/awZCd'P8x1٧iҧ0d,rۙyo#~J;i܆SieTw0	rp6Tf:8 B|b.!w@䠙`eJp\[W8&[Fpqp xC8x@;x6g<K<g/8%~C9x-&x{8GN|?DNț&zo@
mBb.(cXbX1a_3,5219=pEҸ`h3<ZPXXӸp+q
5n`x-OԸI0<Y~h<p#Gjhj1,xasK5g8J5^dxKh02kp+4>bX1Ð'qzPKg+   <  PK    A             L   META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/XMSSParameterSpec.classS]OA=W2RET@Qڂ.]iAѤYҦ.&$4ڐhG^d+I{{3w~@O@g]HV]ukb@g\++N/,p
ޫռcmUeV<e7g~^*t
TDj>uED?FWMJόF/ZHQmikT7-_JϋC%`XOWfvT`v]/v#"
ߐ=;fmy%1UٍNܑ&Hd#6sݓ۾9	,g%{,-̝H,%vx(n1<Și*Q
^ubFb^kn-qGJk Ud<әg.K-."}ԒW5q50L$ ">c"@Ɗއ<e`d2ڌcqqq`J.t3hmu 6,a";B,;B3#, ٯH|l#htχ$㩁\!Ò̮6:+ʐfeҬ2.+C6ʐgeyVl![	7 PKBh    PK
      A             .   META-INF/versions/9/org/bouncycastle/pqc/math/PK
      A             3   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/PK    A             J   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/HPS4096Polynomial.classoPƟӞR`1 F%%#3S.nB%#C,K4o]b1?I3|OMy9|
4aHUp
^V[1aNEonMop!`5-Y7z1dX6liO=%owRk0u4ͩ[3h=9D1jCG1LD	
qne4őOi83_̥%JyLh9޴Od.7c-j޳&Cl5Ϙ*e"y67ca.Iq:l.eSE
e&*@zض`+~
ߌ
Χ?BAdNq>,+wX&I:xga,xmv4oqYe惇{]k1HL"5:仉ϽLxC=QaE(VѷY)º![`y^!H?!c
PK;(    PK    A             F   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/HPSPolynomial.classVKoU=%7iMH(5&4 K-
XLɣ?h`-*DT uݿ
Ό=.H)!,sι~w%	HY]p6kNծShz5k]Nmz	V2Yֲ;vNVwעǲ-gIHj0R@!fo]s'aRMa
gѲklw@dK|R,ݚlmte	xt
yX6t69<E 7ͷ	L=8fi<T
b^?u]( HڝݫA.sa$qũy˥߁J*|
dY/Vmzg3`Uw#mWbsb["unU썺E^k5mqEUbU>sh^Sr`Y	G3CiWsoAn
;x! EMUs[n7Ȳ$TLZus;3eN?'~LNӉJ+9" Y TK+I}OCF8	T}:"TC^E5X5'<떀4h&!CfrF7enǰx&2_V da4_%@uzD~/6ړ\+ϑ%Zؕ/EׁP?⼞a`A'
^b0#(? oeGeB_b8KlX-K^}dz'Y`w|k^>ؚxg]`W#ly5P+z+VZ
Nd>hICmT+Nˁ#0RkV5Nuk^'(&f2nB#$aBbKBVcc8+G<nfMzs8SP~aDS}2#^aw{?oa^_;8~PK3  	  PK    A             K   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/HRSS1373Polynomial.classTKkQnf45YmZc
Q	VQfI&)X(n
" +n#㹓񁁙;wɻoH .`s*Yg]ZU7oJl`[YݘN㷝r),ZTpM@avKE
oJKV*خ]nzJm(e0ttB'a^ei]n0\w)rVfPIiw0ݬc͑LJ
sDA-+ڧԂhRҎ8ъtMҕd5Ut3V~&EnRb>-nҚpr䦣ZN;ˮ]t3㤐rUJ[y[ &iZ^q
3Y 9RU1h NP|R<䋣TCaBzSy9ay=k)q+W_%v+԰*60a{DBX5=kMځgTAYŌp%эFm=WZ2ܔ_52BD	&dD&R0me=vS%dHxvȃ/R̛(ݯ78-Gy^`t@̃
<G$3hV.fc1G\js]4WU5i:U/-6kf&V7BJnS*UAרVjf;#Ykhmh_wM馹a5doLy&
PKw"    PK    A             G   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/HRSSPolynomial.classUoE~㝙]2
54&B& D$ZƸa]{SG8qbAіC\ \"JUUUq#jz׀~$7} `61t&0rNjםv%QnRX/	oUn7l//l\)uH!bo^Z^C;i$1ApFu)rםkM!esGMHnᬭae
ד&ʰd;124ѨMes	*ڦܝ09x4rۉd*;!L/Qy&`gjU%i:e4fw	,ٮ
vШbbc~qs+XbjYy]0~;+V"GϕOQ@15D%'&^<*G a܏2|f6w`H}h
cihz\Zȓ|8)Qr4;4ܛEPc7ͨ%txCl	+H$,1>Y-
o1lEeW#[İ-}n(LH7,qå!=n+LGwm	[l@+"!=Pt܍xݛ=<X_Lטa<臾LZ3\b=uS F'\M˸^DL:D:~T"&{d淴دit>e/98gsckrRɟzs#vJQvgMS{]:3;jf.wvԎ#O~,þx_@_f߰Ե
O8`	߃ĀDLAb/{:∑ȄOX'*=NZVt!F.|ׅ5oȗQ#p|1UXކڤ\,b՚|VRfwJE=S$˷1PNI+p~>3=UK3V3*aSF)p}u~U]
^rfW-U+Z E:MrԼYm<1*Rdx_Jԏ_}طq=_:WP=	PKt    PK    A             C   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/Polynomial.classWo;ڦdmd8~(V6Բ`k)$DZ-"v`U
R jC$Q!A"r%@QoZ)
%(0g7 )(:PTntɫ)vz2c
P9?x߀ dzejaаfKTr`~=9_JVH]|aĞfKHL*3ヽOmN  ΑB:7SEۦ+W< B+Foo)`cÏtA pF<JרUjT3˃l13ꜳ~yPGYkKRm6 
1Fj)v,S^fHyfI	$׆c\.u?(څ0π'lF	^H=
1'
S"b<(h1`(~`Yʛ
VɝDwt1
xaq8 R"]ȀiId؀a;Yå5s4Th\cYB%лx	^0 4<cՋ)?aMsu`׊Kd-엡Xarz-{}nT:@4m#:vr{\{oLP_ǅ>zWEّc2눽$_mߛ'";+S%AD6$%L)j
YEHP]yJa"W@<D
؏V΄C+p{'!Dru-yȭD	
 C~1ꞭԏmbK}'փ= l/\hii*_rb=83]wϰiQ)aIt[6)h'lztc'(pǶu)%]r -VMդ5U%bLkbJT+ui@4i@tx#kj7yӗ7%UFVl2Mh֗
ܠaSgMݵO/muB?]uHe;$P"JT;q
5IJ>0mrwsW|r+IxVXY)"D1?8x˿3KSnf1jީ#6-hWT~ϩ*ݑ[ra	'q-'d{V-#.gsZɢJʊHzX*7Y4Go(
)!߯6jm
"_c$<	Ir)p}Sq,J%#,aT
EH3:M7[j2oJ <vV."cK?FŹWp<5$a9SCES]sv2ߍYwT<ƳGc:USXǛ
4c8hjԋ<(\L-fKx?!1V>%5*c-:)r[q@QrGY-Yx#
d}bso1ґkf@JaYMLcK'f@17HP
%9LTߴ%H<&ov?vEMt3K^rk7+"er'1gf5txz`!58'yB]Gփwh'K-%aOE) ^ߐ%DA%dI?s'd;i,'gIAcoitPxhִ^l.JMTU^?c;wW9=9ұa[6|.{U-w<"
!6l;t]gE<	u_cɱdy`6ޕضu8EoZ/KmZ/{)9Wns.ּ߰y/6޻;=oPK7    PK
      A             >   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS2048509.class;o>Sn.&fvV6FtҼ⒜TdĒRĢԒԢb}P Hpj	#Mf^f#'h3p02Xl%#f#s~J*";й @ȓa`
p(vƍ` PKe      PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS2048677.class;o>Sn.&fvV6FtҼ⒜TdĒRĢԒԢb}P Hpj	#Mf^f#'h3p02Xl9#f#s~J*";й @ȓa`
p(vƍ` PKޓu      PK    A             S   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS40961229.classAK0oVv7zk9T(SzQ)Nc
Zhe+=
ILBI>^cC؝4c6zJY#+U5a#^B(QY2H~OBì1.X׍OKYd<3N˄_V}#Bbv{`ѐ`{AJp%涄0Z$9؆T_5=m; L@/5oF܀U7Z5oPKh#     PK    A             R   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS4096821.classAK0oVv7zk)N&SzQ)Nc
Zhe+=
(1)ʎC>Û'z ź Kp	R={9)i:l'Vj5a#x!Pcvus}{ߓ(+3}BhD⡇ wOKYd<N˄_V}+B9:v	N	3 ab.K؉Esmm@摫f]3&\vAe{zXs3Z?lûk||PKDM     PK    A             W   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHPSParameterSet.classKPչ隦fAo{%H5^t])E??*Յ=}p
!veD (A$8r~猇IEuwm
!ƺkxM|ݼn|e94)A\:+2/cMm	2/FPS/V'}kT:2HIXWF_y)߰]^m¨OU:߱ d@{K
8@FӣG
Fڪx uBߴC/S?`^ >APT!Pb+br#NH
xtS!"EdB$sDL)6nC#KǭXoPK\Z    PK    A             P   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSS1373.class;o>Sn.&fvV6FtҼ⒜TdĒRĢԒԢb}P Ppj	#Mf^f#'h3p02n1#f#s~J*";е @ȓa`Yc@p;FZ PK<3eة      PK    A             O   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSS701.class;o>Sn.&fvV6FtҼ⒜TdĒRĢԒԢb}P Ppj	#Mf^f#'h3p02n!#f#s~J*";б @ȓa`

(vƍ` PK:<      PK    A             X   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSSParameterSet.classR[KA=nynfЛ
HCA%TC:[/=KBA?چ҅f|ps|3-!@ #Bx]mcd7^EyO7]Qq
Yl2N}^%UhUCAoꇍf	BMA^,osd;V*bH/MRh)Hl")$,hXgP5Yq6 #HM;SS)Bkrj\SM!{NAݰ&.R/Il@$В@qkj.#e1GUFX ` %)_\#yqDݤ++N́"A
-I "L6p}OPKa<t    PK    A             T   META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUParameterSet.class]S@O %] OE(/PqUfI6&!
'n:?xNMLsg 
s020~̿p^zt,HgDT0
Y
rxM?;+Ķ<jY^Zy[D"Xw?pO`F(NuHvhEC|~z-z~AN!Q5KPV pKR#`Np?t<g3 X=|	;(ŠXV`R_ Ϻ7p/:㑨nwتT\ס)ہ+jN#Yia rD"$rx-nv$/rO} q	Z"D7Uu1Z?|+MǵT#OGwp5'(R4܇si}(Fq<y
p87H"OXSw0v.1%.ŋ߽:]mH0t}e`iڡ>%s`$jI&J.fdгܒ
:5rFd3u'DcP*pLc1IG)^Lrդm9PK lq  7  PK
      A             *   META-INF/versions/9/org/bouncycastle/util/PK    A             ?   META-INF/versions/9/org/bouncycastle/util/Arrays$Iterator.classT[OQN[m-
誨mQB#	C+y`a9g{Jh|M $?8g[.Hde曙ofv= 0BQ4g\rTYXUul	$-84
/T]V7<Ю(Ե&|oSZ\+!юl8F:5yg8??wCoU^]tŚzSUxkrJ=k|Urt
4:`NE(kߑKAsn)ɠyע6!K\Jm_ua]{Wk6vp
p͐9dɲ$!6_z'T(7KX<x+>i˚WWp\Pʮl!C[6Ƌ73LVFZcLF9|Ͻ7B/Z]J}mxP`fqOZxdzyȑjU4h+^8}>޾&55WJֽbkeX	]hA٧~A OY9,Д^>J]mq0+f4*
RsdmNA#
nm'0A7qVc &a7ѾVb$eچH8o)И
}A.͙7I>>?]F|Ht&=Ksm\G;=A{p'yO1$xPK9  >  PK    A             6   META-INF/versions/9/org/bouncycastle/util/Arrays.classY
|Su?IO%aXO2LK
vHI:ZVV%WYچѦ˚MBtkİuM辻v]۴M6^w}֓t={>}/^n v>I.p3XsoD3̎w-2pKgR{d*C=-b:y O,dJ{b81&դe^Sd.KF\'tSd?oʚIdiOZ&i&)GheV>2ܙKgF}T1z`3d6+3ZhM@m/1^̧7E<,-T `mg2x2s ?>=ide3Glؖ1KP>a`KT6e70]MgS2q%ƶHftTX.Z2Fci#Պ'|m"c5n6mV	t]#kQ#C<d0~0l@;@#<(u!^o)Ds^]~Laz}.w.Ը(NApws~StD\_ׅIxvtLn.2a9z5cd69 u.8rc'GbXda/2U:g6ǧw(ϕ
 O2;aR/,kAr~J{L.\#&>Nnfs:}>8CSqRu>x:?`I5`DK}}M1y>_O,)񓅢1M$:Ŧ>Is3,W0q4<JcqDs3NIq?<A7x_çWpF_.;,ޝ.ǳb2KYGZYb׉SfFhS'03Y1Sl|Kg	lHBsmǦǖW 0LyӮ;rvd8aOX,"dɩDŃt8*i0=i()Iu?uFsSl!=5RPYLgVjڰU4la+ׇyq KIy!4/$5Ƴ<tb8ÑI1JDȃ]DP)U'k t>7_ƄXG[q;1ӫS7'~.۰N>yͳ0Yh9U9@2"4z5q׈vl8h&_dY4hy̋թ!F`us!ӳwfF)x6yC17$ݰ}"W-(/-SœXSvq1Y&9EyMeG8Me\P'ŉ\a2[Vfo+sQ%@Jnl?Q7k1Sa?f/RYoMsy\'O
h=MeBۡ\C(T3<9e8;m}%D_2_f|_&Y(|J76/I\Tִ@-;b
ʰ:i|W.Y`Os/\} 2@#u˪@XHשY]XA@.߫@^Ff<ft墘4=1>|[(v.UNu+[UtQ=APezYll *cC.	8XcPo78ǃNMF5>}\8& J@-$Bta<pESwF8QPÚ*wEgF{!"F { ^FN^O;4 8"P9Ð٪AgaauBk?]	EShYqE;D;I$u$yB+Rݦ1s5&WK
6^6 sWp|{ywrVT8#H'qf]X厗O!)`]NQ=2
(
v=Lf_r
8kʃ dp;gzѵ8nTWgN?;29)*aikM^+Vˈ}AoDtCȵ"1Q	c]ka}rT49ҧd2+!/kD95z*.5ʢkث2 
MX-|PGmY^?Cqu]5BIu5B|I@tclF?
Z}nm+1,?NcwM4z98Czxт<lktBowFָ	AǏ8#5rBak]BVyx=>\BpDl{N=>c~uZEs^E8&4nتia_P? ZJkf?W/HkfLh.n8fzH<+-U&8Z0GU|a۪ (z_h7	iρGa]0y`y]yS|;
w]ہ-+hn:;ji}Y'o-߅tùŁĴs˦uvvOEkZdS&k[qu MG$mw6#m}Dlw@TKH@/;	@
߬eړW,i}W䥒u[8>vs_0Sa7W
g*ps+U8[aw=vrdW
g[1
No"ǲK]hKѨBd<V
[ٮ[쒶<3!@hui0EbZrGV@@:@l(!,֤-$7*=UY쪪Je_U**R[U;BU(7_]xn^7Cey/M2¦Yl}gefZ|+]v?f]av-}PGZ;DZ4SC!@I lo7a=kYmfU|sT
bn#=G4CB>;윒9ʿ9xeB9|Ň(e	^Bu/?zTp8R5m0UaO*(}_5GJ3_`d11ey9TX(@5~V;=78W31jFg#R;w=^$(	b$cI8_;O|G&D;F-Bi,u4	_MV.brIE\1.I:c$VzIinfkxx,;+TŗXlTy9;	llV>u\:xB-|gJFxW_=eSZ{[(jl8dk{axl3Ozi!ZfC砡oxqDgǍg>W->P?oXeP[S{է`m4©A䕧aɽ^a yF
т9؈=Z3Ba\74 ~o	FTV9ج0Tۭެ6c12an任w;"#	<uX,]hkt=ӞWRQ	Π6+iK^mfv]Ul}630J*8ug}F곊Hc.f)bL<Ϸx𧻓nfLü¬(BG)͡TxVSJ|?i R.*NLqOMBTPyh0|G;؎Һz3֗P{)*bcfC§Ty)r`L`+OV:^& }7k%ic0BH#Z&h_PK|  +)  PK    A             A   META-INF/versions/9/org/bouncycastle/util/BigIntegers$Cache.classS]O`~([oAS,&.Θ877PH7h\1y%6iO<_b>:IHnmu[>Y۔V@ۮ,.`]b7Zq04t8tիdתuڱ8hWn +
ڐ-	=#vfi%W"8
`U/mf~Qj)axsGb8ႁ1z:X:RKtL`R%SL>QVVKo'}ڥا
&V
Ϣ
ezU3'ۯe8rg
̨I,Λ+ǘϷodrS+NIM/
l[Xi,5JߗVvq~q:/:ELn)|
y3
'#혹2@{x	3hC	?7qJ/m~B"p1>=)tT1;ۢfE{
U%h&bfko2\GCH*;J7D~WI3O[CC?PK`/0f  =  PK    A             ;   META-INF/versions/9/org/bouncycastle/util/BigIntegers.classW{x[e$'
5cI[hiݍT22؊4&%9V**PQ
&LtU(^PQ/oI}&MЭOsw^xy ~Â
"0qY+uLc(vW962)u+CkN̨`qD
uDRhFUJyj62*=4ɁomXjDԢnɼsy<;A,@6EWيQ4VR',+o\PSٌ.JYɎIcYlαWJ걁yZcXͥ2Mh,\ȡ)KvĲL|2.մQPS<YH̭h4RE".F29rHM׵ڢf\acx*&)dNT%PǤe\DhE~F-pJ.rtphu%C֯)肗bjNbrZf% E;(Bh֤a϶W\Jfĵ!1H m!g5U]rʪ5:aˡe=$ll\QSXTG6HeTG9ɂ60W|,GYrǲ9t8x3Ԏ>Sg:I.*5Z;qc%װ]"vc*y5RY6[(y-f$b`ʧ¸1nxV.y-'ګE(Z$D܌[ȯgdcP"Dam\;eEd@j*#ĎnEN@^YdeUtHTg$u4R^vflѩXZaqn R]$D*04vw.2E +`v3qEM{RF_0ߛȥDh zp?T@p78*u!RtlvtY>""fYf_[ a(Us!5\7({7\|Lcx\1sM=8~\A۽i@0-CW^;b	R7j"d5Soec|;gLx3S7*"l>f|jłT~sʬ#h6,GIgqdjq(5kd3q\
)!3Ox%IGu&do_&|{;rOD(Ir(MH._\Rx(
H+W:b7H_RB?˾J(ࡳp0$=a%	oKzq+=p"F;=ʉxx('dG}R"/Ab!)&tZ)wvd']	YMU+ePSby36\՛Ͱ{K3ȯR3z)muLE.q£7J[_ǡퟥi"F݃UP*JYԵ-b;.͵sQ3.:v;3+_וd
9>ʡMN*j/zr{ZoBUBwEZ/%e.@[Z:xZMKB,r%R|dmp ғ
@m=vɵx
/>uZtFG-z<	ij+m|G?FT9eN5?
+ʧ.mpϡ=&Bߥ_3(EMuaM/"ayQn&̈́
qf9[y1T=]u֓89)sl3ڌV^f,U
ui뾇ti3Cy?|y=MOc/j&yfI&0]jbC: 2H6
}萎g;nw?[]%Ls^F06:s60'^}7uwq6#{&r<w|eyj"ʠNc5Fwٿ[x	?ԡeYw*ۦTy	?iO)T69Eu)󠳱4#v!ΣǗc]T;y4Gv]yozzrI OUYW֟a㪬d:ŪYw#OdUK24)=7hōEYEֱh3MPbg/[sH6跛o9MvoĜ8DYlo)XW[k\o`A8?hg	d9x(2UFu`s8 Vyaѽn]d
޽RJ)TkPtk-M#/x|j\ţJbRRQi>,U#1ՄH[U~6iuo':ݗn|L7Z7E{>LiGԺkԛrԣ൚<8bco{>pAx9}Wg瑩6BɃB(^i"sGYaqsg*˦lgTiHXX&qwi_]VeD&3d=tBP1[Xu5&Q+Gl U/)'tJk9|m9Ѐ/jS
xN{8Y嚚	kiYtg;*PKd
    PK    A             5   META-INF/versions/9/org/bouncycastle/util/Bytes.classkA6inU+C0 
)=A<$q&.%uٕf#*x$xfQ`d߾y;7w nsP ,OF&Gi`A:p@X]?&l j=%fzrdp:GY506܈ si2$8D:Y飈g	T㩝,<>_)뢩A/N皬|MnJX8C|~.~ABw("L?e~}GV8Gy
k_oA\-KYXQf_t'Y#oWՌʙی8lf<Rr"ɯN
Ql>.baEQcW\lU1f=3[Ͻ]8hI%٫0JrHO36
ֽmX1}bcj=l_
`gǆygrk%a'PK0#    PK    A             9   META-INF/versions/9/org/bouncycastle/util/Encodable.class=L
0&TH@+@JAlrdو8V` B\s|8IcXD:mKº7Ng	<#|,^s|>AbEL3ԩ'0TEKPK0s      PK    A             :   META-INF/versions/9/org/bouncycastle/util/Exceptions.classMO@ߑJAD=qB<䩆ǥn꒥5e_D?ʸ(%hԸ3LM!a C
iBǮ%Zn;P
Bsf`=RrɃn~0`YB֚$tT <׎^
JnbǴs0
lǢ0Z"lku9l$JH'T7mN~S	eUKԙEI7(==O[XK$(\}/k-i@Aq0|q^!s?fVPerbmGLPK99    PK    A             ;   META-INF/versions/9/org/bouncycastle/util/Fingerprint.classTSU\ذl`PlKh,BBҀn6ud?ɾ:'9;҂3f&9{/G FP_B@A
r!+Vmc+UǴwM˥i;
m:o&J,Q,L41ۅb17?&P>4-jΰ[K5UA.14ERNd~G{wߝ2!"eׅNV!hXEK2tf䐛BjZy^хn2	Ukx<}&{y֒"qhan<)9䧅>
=6v_ BN_I+DQe>iUݠ
qLzClLMP6-aƩɴenMMn;E;Kwt]p6ՊN;1Kףc2xKh-Kfε(ob"oxũ$fg)
w1))HR'x
pEq)HKپK
ΉαE
1'C,Sk/_pw@Bp=We],%yܠtuWTmf$m]4X}L]O$)2!\0BKÝY%ZL&YvmbimeUk?aƸ֊o	HJ?=Hq-gH+pwFkD"ۄNЧhۗ[lCOOG51k݅`xaJ0?A]/ -a#x#|o km7jxeE1qT[>Z
ݓ
YBՔ!EwvF|dЎV8/N֎`x-O>A6 Z<#@55TF l= l+fzQ
o:]
VNsiz޽&<b{Z*ahAװ[|;CXww,˩a0W3ـ:LAd%u8
#ڠ[$CFu$IE5H<flQ3?"Vg*PKgyc  k  PK    A             4   META-INF/versions/9/org/bouncycastle/util/GF16.classT]kAM6TݪI֯ՠѼXFP֯.MPi*5*"Rb}PD>3MSDq={};":E0Hm`$oWWrJs>wevbdכ#-$KPئٌKfArը[FF|;Yd)Mq.O,q3d6ڎ
ܧŌtlVH)uenJBK!K
ssXBz>.E3jU?jg3RfQtUޙ*
FKz	]o6kKW疕0Ն/G!QB5]B#ĔI}Ee0
ru	\?1R'[0b\``T+:E2x*qtNtA+Xе	;tdmβnyO͓x[~IԼ/~Q1	5

c(dNph3h3et#~U#3	ǲTNJAJ<	ꟃXj_
Vw岎{b9j#SQsPt>DRQ/0>G	:_\}ZСko|KO|- t;L}Dt?[qulH++F҆2k""-
K@eD`m(lLZK1Ex:'?wN;y̯C{jMpae,?	}=_|P*xM;ϸIXKAl48.:SPK1H  f  PK    A             8   META-INF/versions/9/org/bouncycastle/util/Integers.classmN@B)wJq/UXX 12cɞXEUQik/<sk;x PBe\FE%3j@C>-103t7+Z^3	ǂa!WhC*UCx},sXV㫁d%FcjVp |s4DƉ4ʹ4׹2sl`ƈ#-
Ply	9v?i{-Dc1нKf3D 
v30ՍTҧ<U{gGNnt.}2a
xE=KG;2:o|q7S-fEkxLbq#Y,&oJY7le9mPKcx  P  PK    A             8   META-INF/versions/9/org/bouncycastle/util/Iterable.class;o>Sv&FtҼ⒜TҒ}ϒԢĤTvFĲDļt}v6F!(L5#G&Y_ V0(nXRZT/UMHPMvB>nt'#3;	11pY PK     PK    A             5   META-INF/versions/9/org/bouncycastle/util/Longs.classmn@ㄦ{SHBK$-7E"QP"e$.F$5<	6 gɶ33?gΜ ŝ4b(,G=湽0HqqaeG1ۮ0R+88ā;}Uwe&aX-U`cJ:pbahKޭIo]{Qe9.难H8r/Kđ
GJ,Sᾧ5٥jb2*"Ǫ#nT{
Cd0Gf%:{V+GZe;ew
Vmyn_	WtR'm=~H-o_ҞמbeR67<$^6EۑXAԋ5Sׂͯ[Pd͵/0>C?cpcC<'"L!^&?%!T!_+'c_⛸Maq̚&泧z[Cv;%/PK5$    PK    A             8   META-INF/versions/9/org/bouncycastle/util/Memoable.class;o>SNv&FtҼ⒜TҒ}ĤTvFĲDļt}FJF%
MX32(kR L@Y@.`g 	 PK8]}      PK    A             F   META-INF/versions/9/org/bouncycastle/util/MemoableResetException.class;o>S..&fvV6FĲDļt}b׊Ԃ<F6̼;FQ
̼tk0vFtҼdTҒ}ĤԠTd#YSR؁F :HryB@Q8vƍ` PKן      PK    A             7   META-INF/versions/9/org/bouncycastle/util/Objects.classuNAe?(,0[Qi	 Xh,f	?n@a1Q| wpS;sn@yd $YP? ֣^pMhDyeyZymQGEBƬ\eB}<x6#=Mb̒AszbNlaMκdB"홾alٰ]xI{~ 
*܉{V^WMl6ZsHQ%Tk	,U.Ď8&(Z챁M(zHƯ&aPK5     PK    A             4   META-INF/versions/9/org/bouncycastle/util/Pack.classVmSW>7MV\`b	b"	ښ_jRB[	X8[Ѫ3qƯ/~T/:㴝N@JܽI nssy/o~~ 	X   v-]>//.^+,Ux&b%=84
B
{Ae/X/o6kBf_Abqli/!
ΧCiR4)*rvdLh92Pkʘ3lYU
af˥;N
T!轊."fD0y"?<8ʠwXX٫,90&k2["+' BKָ
]FA'ɊFT8AqT1bbVT *5'Cl9fзTXS*jDozȰ4S^.`
	UlcЙ`'_WѻfJ[Fy0=4@+,fl-k2+c4XЮ37
KJa7KⷅZ3.ʕ|X.!+;Ssʎsŕ<Q, y4嘵Sˊw[Y00|'çllrQn>nAS'
X)߄CoJMI5mдMJ;qHw'Wa4h^bIU7{% ms.Y1 |Ge]֥
BGF?Ǐn0QTf<	^#81\bKE,6,0^UdRH$jp.gjἠ@|f H8DT,N'̀wI~G;|px.UX.xk858gpl6¦.F0{ͫ˞{)3B28R9AQ QaN/ DC.Mc=iJCԱ 7IĨ	&[MbT%gCd	g|XeQ].s!M=Ul
̃`>?`s[Q#t\k{8"g`Ωu<c^;ovn<8tJ?%:uRI&j^r
t1H۹܍1Fwxqԥ&cՑ$D3\@t#^|v>e{kߵWܞ
醹)\r	zW%:{"-k)$czc-B5VcG:^%*N&ZUU$h֫vz5V&Τ<Z#\r]d^o_xyN`HoLF=@}Uo,pCՃo6 	 쌀nO/DuZ@N]yvYqRSh$n'4%\,)1Ú
G,8IRے:XbSp3:v;)n'3ig)PK7
  -  PK    A             <   META-INF/versions/9/org/bouncycastle/util/Properties$1.classQJ1=VծZ]iO 
}۰F֬dQlTdf29g&'`r;(8a=6:"S"7X%ykI>GB~Ý2(9(eJ0{|+cU)L#x"(;J>m~7nN9V<7j"~`U	
q5*¦IPk}!kP=A'L?2;X&4YpRni-A$D&hĊ ̀</2ǻYuL <¹CFHX`ak}sz"crPKug  ;  PK    A             <   META-INF/versions/9/org/bouncycastle/util/Properties$2.classQJ@=VKԪ~+R'E
}_%l
+EI({sf켽G
6&0IBϹb&/(߹
QcP	1L%b 	sgb$_hPi"J6*YM!L*!lʘƌYwIݲ;eFґtPݨ'ǮQ&,UG(t>+uCâZsק̉v b47A:ߟ,	?f2"d:Ϫ<ZM#`qE4Sn>Oiv+|#1gLeV,`
J+1'PKx˝
e  5  PK    A             :   META-INF/versions/9/org/bouncycastle/util/Properties.classV[WU&f*$EUbԒ:MNôLxVPע/7tg!Ě9g9' pfCDETC=:OSJ#DSkXKAs4U54ASvJ#v*Lt3EffcO
3KKGu,ё[
39UٹıZ4bF^ajC*
WʎMg
Y?Qa[wu7.MWylSqFZYC6qqGn93nUEmhWE@
vT*kSV"RA}R
V/8؆ԐD:1t)z$fGMh]=,
&vuƪx*wjC
TퟘeA3?̱ã*Ҽzi(kM_NV`ǱʤG
(ث"aC[,O 6;:b%\.LxQ~nőQVJ4<S
6.}\XK%*^%F9yֿu\wmGbBXkG4P6	O\^aOਆo
4&`LVG#z[Ť,ܒMB=Mj-[v8jGL![-[YFwֻp?qBŴq՘\ZSI	K}:U?vxP;LojxoS=*y[x]
}Z(N	rE$V搲Dt=ç
n%jݕԺD=m;z 44xz8]YyΓUJP'Ujuwpަ;Ϳ:eQw~as2K YgiY1+eƅFF{e1w];ɵZb3%,n>Sw]Ru% #(X>}7-D=Q>y/O#l)]S<hEf~0s=*=1 k8miv0HcbV9֣2T\Cu47z4b-}	}7c
Zcj
}F4 q˟hl;xۇ5$NϢ>}wF0i~B	*گA8nT#סO=!\"R[?3MxPi4]iyFPƯ GD1
NQ<]r̶-cP|-p݄b2i>:'甹	{Idwyt4sc	==D"?wR4H0v?XuWI!5D,)(AnpRcDdPc6M"5容d>fRXG/c3(v@j.Lu*uaOonɋsx#vdd:z%<&g}3&yfMr3$xMFfЖTy&&g3Pg(
?GZcqZ9晏d3ɬr<|B>
54!a:1`d҆l7l1g;A.IPK[  1
  PK    A             :   META-INF/versions/9/org/bouncycastle/util/StringList.class;o>S!v&FtҼ⒜TҒ̼tvFĲDļt}d(#v%EI9̉))>5% YOMLyF*%	ǢJ&hl5<=pg%tA~`ig
Pbg` 'fӼ|P@A PK3     PK    A             9   META-INF/versions/9/org/bouncycastle/util/Strings$1.class}QMK1}ikݮQ"ՃO-B)
Bł=nÚ&d+xiA̼7
>2zA2<LË끈C%tUD*q`7iGC`s?$.։[R,\;aܐaFqF7]QjNU4uS'	|&UZe+H7{FDĢߎԚ&CRƊt_5=1OThKp7aaߧ2gJ	Ib"}heSd3#F98_^P|6+SO(a_%)A~'be'PK@]  [  PK    A             F   META-INF/versions/9/org/bouncycastle/util/Strings$StringListImpl.classTN@=8C@*iqh!!VV]9٦]?XvÂnTD_P;Mms;/??^xb$$ǰpjrخT׫cϪJc57Eã:Cߺe[&C\ϩ#r;		mTZquî̊k&kz6eH1r>gd5p7zkztnV$La5q9nGdFlb#ns[nf{Wm7$lkV1<nf<z8za릈ej$pBhjTqhzv
ͪoȐ,Y5ֻ7zRs/J@mt뚮S=b,XgR7@th0Ƅքb|#اH[qRZf9os̅#VE,->`^'JcyES.!һ{[wCo	H([	v.A㲒nfUN}iYPN1$&-n.Esϧ!*t%rғBe0t&q`!:
p<:u4[p% } {-'Ha_oPK?ר    PK    A             7   META-INF/versions/9/org/bouncycastle/util/Strings.classW[pJ˂%D*rQuZ)6kim+eLꦔې^i.z3&$}c3Li_ǆVc￞gD20OjLuO2O7tO$2CGޜٌZrZG,S7͓f~{0Mu%NR~	$/5#jfaT"_86DldR3)50f5<
7İ!eVsz6D0]{CQ$l@M+^K9rBDCQ+oHhC 	04ZDDG<dl&+*h\(̅"2n:)2aSU< >:-!
W~+w<TQZ)k;QL
W%bÓk:b"R2aP9]M	>%pj{eC>$]A-/^<GԧN3"^$$
yݰBaˤ"lM%TPu3BJ!(Cpv.&$|	bX/3niv	$+%pW$Qs1e-7Fe	ZxDRP>-c/P:"IR%L$9Am7%y	EPndÓeX`FFW(gaS͚Ɣ$5iVIy/GqG2<BQ?e9	kcBCh[>t!'CWM>(d|_`X?:2ı0QHyj+/U_q_alClw"ъŁay7A揚iO28!j6ޑ쫕W<eߔ-|*k2oN}u`NJy]&Qry]QcXG$a0N4'6PgIdTUǊ".s=h
9ʎzPLE^,J42dR
kTq
<RﬣQ45:~pb!Su`W|7(u6
o^=6TSABޅFۗ9
r0(L9XԨ}?yM@N[3i] KF3ި+zgͪHmh{k"uK0PĻKhr)7m2(>"GCTM2<\֊I:Y8 ؤ.!:C^a	όzkI*^4!]/
*pfL3.mR,_E;>Πˑ	.yHW5o{{W{炇EEl54
)I^\CYm{4Z]J	VX[uRĸW ϊ'xy?k|/
n}[Z>*>0KU(?ϕI=詷p.Ok\V
4u
.=)˷E{ѷb=0߇ޅl?uJk)AW/î؝+:z_UhShb
e׏_p/C[h <qnl?Lmf"WMK63
!ׁ`'YwKy8RpJ;$Gא6Fv8hZ+m~V6.]N⃦ڢ@hqwgP7A
2 .8”DuXe3"wmW?J~46d_;2"
x=rnq">Exu(jxF4c<UK<>yJuDZBgm6G힛bɨqP	?Fѝ,-16wˇiu'Zwcg6BVwU<!HACxuN4_84a
1ӕKGoG:-z8A3^!?9";̖z(5;hX7wP;p˖
a+˼75"2EBmG Yd7ߩ PK)Hٖ  ;  PK
      A             3   META-INF/versions/9/org/bouncycastle/util/encoders/PK    A             I   META-INF/versions/9/org/bouncycastle/util/encoders/DecoderException.classm=O0_G:"& yb*R؊d,%
$?$:d{}}|8xbtD	ܪ{%rF^XKFeP5݅;i0؟^ȝ&!0r+*%YJr_SQ3j?Ҫ*?@m5]	tL
_dqȋw&#Ϊ"lI}(Σ";~C439z,{EܴPKDČ   l  PK    A             @   META-INF/versions/9/org/bouncycastle/util/encoders/Encoder.classuN0E!iQ+[X*%J&h5
>BLO	=#3KeR8l
FSpqȐ(Ս
^9+UABsp"da7X42x7Q={lx>o˰/MS~U4.s'O1D p]w+|*4'xPK'&   V  PK    A             I   META-INF/versions/9/org/bouncycastle/util/encoders/EncoderException.classm=O0+Mӏ :"& yb*b: uwe,%
$*$~ ?
qi={O>Z؋NC8RX錸ViA=V!:%hro^"wf.{` |aWN(YEr+SVo?R*5w7w+Fk$gL't-v<I8[|ȫrj\ ; egkof?ӈ3c;MPKŇ   l  PK    A             <   META-INF/versions/9/org/bouncycastle/util/encoders/Hex.classU[SF=kdwKjl6i)HpjC[h({cBX"
/}0a&}jbL3Hks]{}TRфf=5^yl`bYa(h0jVK(4y.in"Z6nWF?f's5!ggNPPюtz;AEpcabh{Q52G6TjG}@SA?qe3ʡMDEbT1auǐ]oYG&?$'sdV8CwePp!}+`	H2DJsJTDuQMm/FA7.,[3l
?;
2$dcj|Ntd.<}*fdWp+N
9
<Q_^%^.0LE;hQ-Qs\ir
h	VdU<WuN΍+'1+*VƠ:NLliwF$ӋrLlghXm*"
c*dj?-	]w5( tґ1M۲Z%]h3C{,qz:[d6xpIPE$f37%ΔZe㥹lJ=E{.1E[9?̽nUxvWsmNf
WuͲ8UhaBUp@i}?W^Ho	]_tgtoJ	Bߎ>wANoΠE"Dw598t3tzv|ۘp)&=Gtտ0@';bsLlB'5R@,t?1M!j(z~l0ۄ.cR%ÉIE*Rd1mQ%pZ2|*yvg|=awI?5C#߱(Qq
nQA=pjd;CZ}y!5%	"R~j;Ɏ'-zPē2KnzID$ţU?LNN&dh͓d[sѰGA*=iTOUTDeXTsPl[A_UCv"ڃPKCy  	  PK    A             C   META-INF/versions/9/org/bouncycastle/util/encoders/HexEncoder.classoWǿΌgdmo2mCc
zI$I.x)Z؞cc*ʃ_PM*/Au*gx@d9wfkysss>;'<~d
jC0\--7~+i$j¸VFs={f!=Ej_n}7Æ)]Mf9r60o	~9uer
kOI}7Vx-<rYpa򦟬(f&+7jc,k\B?i?<H+jd)u(<ݘEy7"yV&sL2<s襲x}n$Q3600۔OMYWcQh7f$o2Ʌ^$8%9E;:D6x5e4)sū6.52Ȉ&2Լ3Ol+uAx·\zwmp~7w9tcZi
f8^蹨AC簸2GZG\gx0J+L\?JM7mmh%
s1pﮅ;>n7"u׷Zo
Ø"Z_79K?Mu>Rr4ME&ن`s(}ʇ,7{BZ{'襩
I/*P0k'md?>a39*>f
#*Tٵd~C>?P.Mh9韕z<V0UtKrg6zgv-Agv=agF*WQ8$_k0H?
%hLvFMq^TjMsf5)WkyZ3՚;I\ i84$-',:ɜpBJ!yh|Aet]>*EcѸ0w=.4{BYy۞Wk /W)~ZpK'cq*';0
C:InP]4Yr߹xM+xb9'/ǧ5 yȫ$Hg
볨V>%Nd ̨c݃ur08`:>TRrZۉa0~V#6پR<
3XԠ/¯ܵT^~
#Eџ.%,HRҤ\ZMw>F
O=@qɄwaUyѧB-
uma͔0ཤw`1~>ɒqdww묠%d;{ƺT	6pؖP _"?+׉| /Sw1ZB!S>Q^4	2rBOSBRR$J<t{&Fn:Ep\!ߐȇa`fO~M|nG-=g%l|%w5CͿ@6>a_Ԇ WGȍK3i
_{7+7%
U5NBC%(璉sO;ȁE Yy]lLM7y=y0&˔3Ѷ#PKZnB  
  PK    A             =   META-INF/versions/9/org/bouncycastle/util/encoders/UTF8.classeOGx?fwmfhq!M?@
iB4nAB8SǦxR	MM\$9$jUrh7Y^{>o/G 0	E"PPcNvu2uq+j%O5w20l&+Q8ܼYon5*U[fZ=SmT7RyLn:0h	Ba5?X01cgtެm%,WrUE+o)q֚y(^O;<HPou,\&
"#Бo6ZpVC~aL 	`\@$ EBq|NCVؔh Ät3nf BX\xK<	ű.0d4 Yb| Iǃn,NFYMCEɩJ]N6G0A7vRعwD?g
9B>!y ă!xgGC<<,D'|?_@)OC<<Y!zq1Cb
AGy)w"g@	 <i\}iJ{*~,'1Ʊ~DsP!i%}4, \bIb(%{˶U?X	dm8õApmO#_^=NٽI3m-Ȉ7LE]|	nq onk$BE!#ꍐ3[K̈́=NpQkCRnT;xp)P(U׎x1S`SH4W4cOJ?ѥ2J
8|;x6a-fJ˒'b\,	,86X_`WYX]a'_%t=4Vp(+,^ZaTJQʢ-&.UDg2~V~_.]WSއNjvֆf8y)1.wXSyzg"?PK03J"    PK
      A             -   META-INF/versions/9/org/bouncycastle/util/io/PK    A             J   META-INF/versions/9/org/bouncycastle/util/io/StreamOverflowException.class;o>S..&fvV6FĲD|}O׊Ԃ<F6̼;FQ
ļt̼tk0vFtҼ⒜TҒQ@ueEi9HƲ8秤2(2 @t򄀢 q6-* PKH      PK    A             :   META-INF/versions/9/org/bouncycastle/util/io/Streams.classT]Sg~^wa,D%K$1-ma`ڈiHԩYae6];soҙQɤ
M֞wYVma:傳{s}_ 3"!Dxk;Zly^Fݰ>dU?|K8aѪe7zem[m[5k[_
_~Rfἄa#eۄP7V7A$Seb1E9>\ BL!,Isu-VCT%1\y2,^00}w֦x}EoZF$Cfi x&nMF6ǩbZB힮/.GˑbD$1Mj$y2YӸr.[$HuK8{2cZh&1F=ޗq)_xfZ;iT5K_k[z =Ȼ
hrF40ֿ6\wZan3з%|rz	U6:c(WKv|p'MZ6WDks
$|Ŵ\I}B^'Bm,#Qď!/JjZH8@pWOlܼ2t[A,ҫH93pp6_MR.<O>ىs5#d8ZNC( 8a9HGcg0kq07#[ϊv/7j+D]liS#Hx3F/o\ڬ`E_Fğ\?'X(:dyϐX;$d/u|ZVNup멾Qr{jӼ:xq'dor"DBM^\MΣxѸTDs/'] #^ieĜ-SIu"F*2swa0BoPKfy  6  PK
    z[               META-INF/versions/25/OSGI-INF/PK  z[            )   META-INF/versions/25/OSGI-INF/MANIFEST.MFQk0Ň0RZ3Ӥ&]vkոB/ܥ/DM?XUܱY=6n
|
l	0h3]/}P*8Jjx\$rV
C0Pڰcw;=E^vaMk#OʡɁcHil<nd M^i1$azk.$K/<gr.
q:C[TG0a*xGk@':>܅GA<Cފ6F<Խs큌K'57T*X
IYim!"2Fq='(PK͛:f    PK    A             %   META-INF/versions/9/module-info.classyEKB6!	۹A$@ @d 	"^(


rz&Ld{z}h_BF~R9^gLЖ+kaTʁA+0
2mY3xm+4_ݥV4B
4Zo<ӕ/4FfیzLSECǠLeDR+-GΠu(Me/02hzr
ͬ[^.ZAYה`nDvɎ#-ۃJZ\gU{AKf/τQZĶF5inLw,9yʺC4a@iaU0cvmO&XLW,3KsyO%
	LsI-uHiD
0
Lts[朂*)'Om0g9uiϲ=Й&1rIԥ*_4`{v`F~ 
4Vw=5hh(\SL*E
LtIqǲ"t6沙Xiz}U`hB[Mst6RdrAVd]
&J
ڊ:;KW&JNATv*cgP2yفA{MORt._uYf%LȸiI-uep$~dDj~Dq3ʠښi$iL27ajoRT1uMvO7$;jiysO*j~u,7-L+Y*)}k;&WQxSG3MWkлb&.,uirqkStd;,?F}Pw F0ӢDi
e|8,/>fBVRm;dZXOT_ϤXY^KyRtn{²Cou?QȒ}Qve#Ǘ
AVܿ_֝lȳ2Q+$1k;ѡ~]f$;7uU\-XrL+kзuO.I q
&lj o^rA?LPi_!.n=ki'4r
S祟VkunzsyU\J7CLQ_',Wݾ*4`B~%'t*vםԩHHa1}dyd(sBsWf.:TKy	蚽G{;}Jh΋9}G ʁJMcy*?ꆛŗ/'phf%0%;O.k<HKIMC:{D6,aUJFrR!n<Zv.^<iV>puhf6uʑ*xbT1TK<YwթF9O՝2<ia*{b/>;m*aܴc-L;R/(uY]jvᶴSZq /O;igx۠FIqXVc%Q^;;^TQIGQwʭfʲI%PDç躇Pl/T`>]>D!-|x:U'lbr(لC3ONU?kS<MhPAVvjHY:T9OөΔ'7jbuz?za%7X$U] 񥺭0mntB7撻num]
㻒uP,@%S/'|g.ȹ˙i'\>	yOwJ^gyiꄈ/O8^p٫~HNõh0ѐ4
R:px+XN 'Sip8. Ke` WZpx<nO[mY\p'x
`t">
`+U5kk7o 
|?x;!'Ow > ~	|*0
[cwO?>|
;YOs_/_(ggggggg&pysI	9LUj
⭼%أ{%#L0N2$i$I/^&!Vu$^7In"qMqN]w%,WQʗx
NwżM;\d}+ewK/1uu=J\/1s&-IL{wH,%
#~O|!GǏ>!~}R|i{ϋ;߽ ~{Q|?-<x,8x
O<"x	/w
^ūy-Q
|"oy3*PK^P
  #  PK
      A                org/PK
      A                org/bouncycastle/PK    A                org/bouncycastle/LICENSE.classmUoT>ޣq
ʀtxIƫ'q+\;vc$\;og1P@B8ΖumT]{߹wnϿ!0UUp]*T


*| H<V`h8XVq}mmFM>
5IbȆ%Ak#!F1N"z
WQ[mC7"oOwO2w掇ɶgѳdJttcv
եd&502\;:tcSwxj2ieǖm
%	A6Ω_c%lshѡJ-kh;̕:M
lA5vCQ1{Lx}ގӳɥ[mbV!pc۰l4vinW7ASpjٽ}mu=f gP<rqࡆs9`gCHOq̳\/|)}覔w`t ~i1bŞc6qE+Z_j3IGf549G)vdF[S yѸI*IXb<6#?1Jx.xib}yD>aLx"|!AQL55yWBĖW!FbNf<YHԤ!;728VҒKtoC,/jA-1OB%{9WG#-YIB~Ss)i
Wa<C0tA\:*<(m(ȸɰa@(pc,:Xs!ώ%TaPEz~拔
ЕT&=17ߜZҕ}"4Q<ksH4N3ǉYTK>1K%)LqNAQAoHK
|T
T
|56X6VWkNz~
NfcجB
TcxXnUrmfE6><^:l.A\KhB4pRd%i2}Z-',|ЏYp5?#^Vl^+ssinV慹ŋs1uns<?7rolPKł    PK
      A                org/bouncycastle/asn1/PK    A             &   org/bouncycastle/asn1/ASN1Absent.classMK@mU۪?.m"CAPm.6&Cz"?JMvfvɾ?
C<_4M-TĮյ[1FAVo*=gzGp,-aPqO|K6C*̵s.;$^>횵%vUwpn\߱n,ɮ0U/ܨo[p$
):&,1l|eCjXC
$tdElidr2Ѩ1_Y[[]53E:bJ2KgGOXx 4$Uy"*?_kHV[Qn#*E+:>ڬ7е;h&ò:6Meބ
">Ŀ }G̅ PKMSK    PK    A             +   org/bouncycastle/asn1/ASN1BMPString$1.classN@ƿP*DoA$DuMْv5ƃCB&bdv&|3 	\pyDsF%|%`ś4C;\OL9ɐ`\ڿȡMCQZӕ.TB7wRb4T3&OdI
I
Zlj{TvݣaXmZW٫Y9&_j`@Yqt0c~_kCfM!XBl#<5h\Em&(8.ITd=tun(~PK~/J  @  PK    A             )   org/bouncycastle/asn1/ASN1BMPString.classVwUm.6-A4#RPDiZ%ڗlmnfTQoG?>LzP9M
|2=;3sg?ЍeeDdddئdu*8q#byhWʥ\:&@vNr:1:Rt,q~sF<U$=qϒ${y2{|ALgFÚ ntMыW.
hچ9m:1V0AB'$urMVΙ]S	"miEr5vGhǤ]u}R"dO"s`9q'r}nH#~A*iBH:+~)8t獜ƏY
)=f!85f`Qe\m^r	?ߵUM
ncU"sirj@U0
hc5p0yrU}%3?az~`OQ6k`f7| X*`U6X՛2}<OMغ2j̔x
}zUw53YUɿseAE=!gmJOCM,,z;Kqt\R4;i3`aM730p+.{t
^{i]&Z2d9rxVIf.6ymU;茮xW8*uZۯTTe&Z^mmFW;>gՊ
*!dCQчz[FEpC}B#_6kUl|ȨN4؋U\#*Z؄	QL dR](*؏){ALqRP0'%Nf(`&'G9yir	NTFru'3,)K?=jʲ۽g-pCL^uhEG¼.a3>HدPb@:93/H9G1ƯpeɕHe0Mue/ibe0S?Zl' ʨGuDE;ܜ~9<~kom%
>jjoX3M<)F?-^B
ф:Q=O
9/?[M<	ץ2M"?m[H	'yjgX>
⑝X<y탧%⟱|: V.`pÀ7M9OOo+tS_
ľS8UU7G5(ge ~ ;wn)
"]`uo9B=3!umSʷëT;"퍷;x-.MJXQvp'IZ3?Ԥ	%C$Q9--b@cat(j3I}EP9cZWZpPS|Mi\:Nnr]<A#v*)8M;̈́%j.MOij#|6h*?xdP"6˪cZ@:Ctyp;:zV?
4Iy5N|MUu?PK2a  g
  PK    A             +   org/bouncycastle/asn1/ASN1BitString$1.classN1:8w.&$0&.F
qX3ttZL|+ݨqP@"&i?>lcN3};B
Bj~3L݄A9W't6JOk֝'hŰ%*Hs*r
ǩ
YbXZK1t
¥G7:Cϟ\?8o͉@@ >s]weR\ɣ.NfHL,C?߻"|'*tgB,Yb fM1cb&F0E/\2乾
UY9)yX"WXU[:afc16oAb1w=7L4KD|UdMBq?PKĹ纇  5  PK    A             )   org/bouncycastle/asn1/ASN1BitString.classWw~&;3LXnX@ݘ@P	Q&$Y̮HRh[IVJ[DMР~zN_=hzGT{~O^ X%F*c&-2qeHH#!1L0
f349%`eD:-אLm)j<(@ll:#C1~ӨZR㡞C+G%e:Uw:JSF즳.g
-sL.L2ezR~3GCD-P+9-Ս 7y4@LhT7CFh$LZiԨ'CH.3Bc{n'
JdS{Giƨ.&5S̥Sf0l':L,-)3oэ'HfHZDFTpČt"aq9
O{^4ʻBױ#kD%«
~5l]oZ˓N%_mҌi:ǋ8ƼMhF/KFmk6{qvo_SY8vu<ztZg,*cűSy@KOxC8L"k<M+*83" vXkMeZqى"5utodBϚAANӔV'K'Q8KkT8eU%Āy/>̤PKBB֗LI=G=WdrT{7z+G{ڋ$ຫ@].*pZ.Wl6W\((aq0eqZuYㆮ*xm2d #Me#w++0e	3njX祡>j\ӌvV(M-joh2fHٜnHiG|&(Uf8۝vlf
$4Clb:a=!<	{$E+p		I-Omnp;%%_^	>/ab$p/HSA_evP46;YSДN}%h;$;4.;]ѕM\!lKU!%|ÊbQK.7rNbc.l+7q\'˱xl>qfs
Ŕ.V	
a-+N-YPAڨ
+#}TXd؄
e)"PЊ'yk٧tJT,ەxBǏ,b?bW)^<ȫ4Nx1,^`qϼd;,f^xƋ^"&"?0~q8M&_7&5=g=w-
7<*`"ӯ:=UND'+
m~ӐAYZgu-I@VY9ON^%Hry<aV|x,ᵋZg,Ζ Dj;vR"oD
*1PACvu5tC0,~*)WB_DqUsPSrsxiTyiۋX<5uuPM届řŏ'vwxY#,G3dؾK-O 
B1KDH4pS2N@r]JLG|v,&ɴg1arOyH.X z<vE9[taǠ[BR\Zpۀ*x՜Z/}Acq{/V4_EKB pخ߱r⻛?`k]sxbxVSm'
;pya5)/Cnt>AN9q:Wk%w[<8I>-rRAUzq)%\a.˸\[CzeTL(큵oeł/	s;mcM?yC]DIHP>!<j=WEB1NSM8ge`SF-o.J?eoM5^8H8)F(=J{_Yw2zE
8
Ac#	I _O]X]̺MXwuNxbw0p
A?rPLM>ey8) /Gw~h[S@|;l::"lV9X*c)]Zm8y}!Ùe@$B54
"KLWbRi1B8%Ћ5Z<.hg J7wVFtmwlVjZuً»h^yE|vg1C~ʐ/W<>)U0,ϔ8z|?q0 !qز .'YsS=W|->cHBbZ|^$$`eJ|~Yd#++y{$5ݟJv*}ǎ-p_QJ<l
"`_v 
Wsv_U֘o3Zs]jɎ`?p/ˑEe%,['TD> 6G,
@fF3w_ǫzwmCqQmc(.[Ⲻm(zNHRWEJ!$$W}$kۆ^+9uW^zvPK>X
  Q  PK    A             /   org/bouncycastle/asn1/ASN1BitStringParser.classuAJAE91Q	sŀ:S&ݡ#j.<TTf֦?>T|{psB6qI,	CM܁%.뢜Z^;muY-&BC+vvcML-kX͞WOMW{'Z&\*#/}<*pdvn}R8P8$\tZx]ؗg{8P~HSH>Q=!/R[PKǌ   Z  PK    A             )   org/bouncycastle/asn1/ASN1Boolean$1.classJAƿQsuݴRGEBk^,BwAVduմN:+[ME=@DA3}||8&A,wkC.<"9%2m.ܧ]&dHu?gPz̢Zǝj=F\T%؛M]	Ի
oquՑMCJCZbZUh25rkn6AۜS~CБa`E"4J#0B FFW,,)D*k0Y	,MT(<NE#JW
]QIPKaoI  :  PK    A             '   org/bouncycastle/asn1/ASN1Boolean.classUsemͦ--)ȥH6MP@QZiql-ݲoExM;Ènqܙ=|g?13*aD0N
{.t 1/M,qW;I7BZ@wzt4IĖUJV(e-]qnt<^N3".1]8q̬#!!uiI3PKfVY5JZ:ژ/ꎾN3Vݞ0d%.l[<]!Eg^@Z!X|,CS؜m-\?#[^imuPԜ!C-Qm,Zq&b#EH%\ʋ9:tx)G~X+"$Z$5TuWKCnEahEՈY%J9҄]&h&u+kKn-Wkf1g~zSvNY[
4FޤwlFtY7
-eV̯ՒchIdj|?ZbiƶGC5uYu$]R%BFRJcUnrZ{A>			}K8!e	I	NI8-e{n4
P%l{7eI72Gz&WVexw<(ZtIy< V?ӜjOۍQ Fk@ {mgTQ!z7o;HMֺ,DqY&/M+E3KcP1ź.%&2i;
:qE~+8IݘlF1yi2CqHaIIQ&5&eLnȸĸ3-E5I%ݪJ45=`-[5sX]Pg

g  9Z[3pۈGЌ ]Z}
|@N*z@*N<{ž
>f:O#5;*V$VAi
Km"u[X5 =D}RM	$@0YY:0!7s"! %jUh?u#@\|ELmQn<>jrQrb
%:~.F1]~-
I1x#&"
]E""1!;%]nG/ɠ;0Ɍ}4ߠ)x
M-Ӷ{&ONMIPIv
|cE·Yl-
|}oم{h6Y))	#3[]74x,~1n:#rBڃu:ְ\	:`"׋tO:SѐۏA2,\Ѩ<D^ PK#Qb    PK    A             &   org/bouncycastle/asn1/ASN1Choice.class;o>VFĲDļt}FtҼ⒜T<C}`?CTvFv&6Ff(  PK~hScQ   T   PK    A             )   org/bouncycastle/asn1/ASN1Encodable.class;o>vFĲDļt}FtҼ⒜T<C}`?C׼ĤTF|H@QfnfIfY*;#;#nʭXX@
 PKgx      PK    A             /   org/bouncycastle/asn1/ASN1EncodableVector.classT]we~d7鶔І4>nXj_R,6Yv&wzn #3m3|3_Y_F@FEFvb49ӧn}тf]Уf0+%imE+վrbG7@fY^ppƨBtݾM˿:{bYGR9,X6Jy`pIq)32>3NMٙ9홉陹xf"39 pj>nV,m	b$RɁYڂStX$SR+]VejWVt~\V*X0,8
9e^-lE+P~)7,gQ'EvWKHqԬYMU[ɣX+N7Yà4R*m7@$@C1I0mL[/oh nJ咹xZ2zy8ZecY'H 	,`Q@Y*hQRObkw<l[<<	!	}b%NH8)!!]]TH!Xa1SЦ_=mA5ٷn2l`
[a(؇c,bЩ .(˝bEǘ*8ˬ؏`1bt \
,s	`o$eŵ ~"buڐUߩeVlʹg59[+ܙVf,"0-=\#n-9nsRl'Or!@vj0!Pk~8;驡R
O)ϐW=pͧMaxޠ-StaJ瓥Dn<YE:BGlA(b>7a1eH
A!UfTA5
'?]p{Hjyq<?r=X;[x\I%ӹ_OF!>uz1(r7
;WĺŃCA'6A_>$	A_᛿i[z{!\+%!Iȸ{qqa|c/pfFjX)6辆O֬4<~<^Csȣ\ >+8{9ķEQxofڥA_"2+zm`suF}no8,?G1!!a
TjHt7f}eD1Rt״K]/]@];)HL{]#y(ϘPKdǋ+  
  PK    A             (   org/bouncycastle/asn1/ASN1Encoding.classMν
0$Ɵz椶[QR,%65/d8|ADʒ]FJԎm%ЪsM)UgbˏqjL%@L'w?5S]Tӗacs/Л,i_PK+f      PK    A             ,   org/bouncycastle/asn1/ASN1Enumerated$1.classN@R*pAȢ!qWc"ȂԈU-cNt tƅCB.0̙L|~ 86A,wk#ƙ<&Ȼ:^0Ɇx/ }2=QyJ*#R(<.pw:DjtΪ
>P=yR`6xUu9ըOgV>m\ƽu`Ӑ֠iXԐQGgX=;Qd77[-&h3ȿiX 1@@y:
:XzSH鶩|J&TSȪ%bρ`C
J4vPyEKay
<NT^|Te3tun)~PKL  E  PK    A             *   org/bouncycastle/asn1/ASN1Enumerated.classVW	Ff-/	B2q1Nljp"hbcfh,֭=K85m$^bOIKsN&8$a9}3}"P9CzdJDړvLB0>.1v"8ƸXL~+#䓾_ӆ*# )6qh1PiӰ1Z=vt<NXh>n؞
v4+KhN'IOkcMʸ$IMH`ǓnMR65SN1Α洖ٛE>-W\Zڔvtp1k*Jۓ4
zm+:4	P&|)ܰ2aqlnvhVZ9ÖmuXzF[JˬrlϬw;6K2rTC}2,-4D
N%|M*(>e	QM|L3\*opW}a$¹Bt[a┖vI)rI-n`TZq
ےptnpk7ԗ"ehғd[-y$4BîCHh+Y͝$<#٥#K7*advJϦkqn8xgvz`;XX`ޝɻt"]Jص:VGZpr92;Cֻy0]Y77b0f9'%8k7k{ŧ>=
48E,Q?M~]2xTc28$[a	??A/ԺKBe'l}]AN]:߆
XIGff-MX[y)W]#u1^oD@a$DւQh/˺:V*]!&nfGZޫէ\8K5QчVMNBŽT!G4ZE?6؋M*Vجq6MSUBo±{TѨ<MaRE'tl0AdTbZX*V TCF&椂aV)yx$*x
lγcsl^f6Wl~`V0lΰyU<ͤ?͟<ؼW)oԤexuHZD63M:vPX[4OAA̫$\9QA^J?a5Iӡ.s&n<.
+-r3)_pZPFuY
J[mBճU*o)sN
VE}QDQ"jXe]D[.޿ףxj ݦRUȐ%	
r؊|o]<:g1*?jxp >HOU2<gNLG^ߖIjG%!:eަbȓ;D*:DT*^ǥ?ub	HI#4'{%AR\T$At':KOp_~*PGM1
?[M!VuE7oS B3
OD{(
'RZDc	s?LZ*ZkO'Yw sic^@er:w\-;œ7bCQғg!GAQ9mv]wV,ۧm7?(Ru@ǷQ1>><ql#oDEڗK ob,U'*:ެU:޸W\Xc^EPKxd  |  PK    A             )   org/bouncycastle/asn1/ASN1Exception.classuJ@ϵMҴZE7M Ņ t?C	3KC$:03||~ 8FhSyDJG)ϱz(5%bf&~e^JjKyhzp{TDeIR5b'6(F
6
@}xpIh>;.aU||Y>F+l-PB4:e-]H$NkPK~R   t  PK    A             *   org/bouncycastle/asn1/ASN1External$1.classN1ƿʟuыc6$֘^5m!VzăCċ6|;Cl2da61`d,]hQDa$ƌt<uJFx=oH4WP1WW<ЕcX.'C"!!!!Pv~Tڨ]fث:F9ܯh^D#Q  U>|n=ұ2Vpw<hk-ob9kDYRn%hA}π"ӒLŧYrb$OPK,,T+    PK    A             (   org/bouncycastle/asn1/ASN1External.classXyxMLIB".`Z,VrnB&(e;Y6awCOhc0D
k[{߇m}iixl^3ڇu>Z}hOF@cX݂Ky,EiX7K(ks$֓[Z,Gz&fo~(}LGtRGz`L[	Ocú먥'M-N{vtI(Nƴa݌ZR:fM9%a@ڈGw9$D둃	ҏZZ#&]f$5X)%BhݒfixZS1l%G$Sԓ2C@R"d_dݺS zΉ2	b>ۑf)HV?&Cc-~2vnM&cd"[NܕKFXV͂ٱU3ZjRvQsd3lV`,MmS)-F6=ڐn+$R`VLRղzz(%o!js1Jӧԡp.3ᴕeGג1[tXQÜQQk-F%hDIUܸfZjs¶[eXeM<ΗBM$c-t%#"q/O]=
D8
5lzaX'ƾd^RAs]ec.mQ;P׆\Ӷ#iq=mvir6
o7^2{iJX傴5ڙ/9#LUgw^9405'eMn/Xa%^֒Bg%U[WsP?_𙗗tI	52nqWʸEV2:dtɸUƫdZFXkdVFm2zdlCm2vE}}nn䂚ݬ_%p.A%YC9LΟ=loZVpYM=}P̑8X\ܐL7H$l,6$M7|hh7/aMqȟg=Ū]@v<]B,vS|F;6KT8_3+MƝWFcnk">rm:>
_b5^+TY|4 JxuptEآ)h hַ
9b
TIR&KVvLzTBQQUj,RяTlaaQ☊ML^ǤwThT\X**ᄊ67|*ZN&QUQWь*^d9gCCra&aQ&c21Tp'>.<`/>}840yJ!}
{)&O+Q:TH鄂grgCLarɨx
I&0V0sL>$<OMiSr?;S
9:g`Enӆ{+ó6 Q?XJ+uX~ʩ<(P/x1zA==<ҐOc3sx {2󻧱o&BuIe<-|m_9_(-%v0f<ڌNtQM%ܪ@YWƝv^R7l^DYN}9sPӄzp?))T?4_j08%Ru	\(<`cR/{=Ezc6C8\)|ky
ߛ䕝
q@KkT@>rˁ4r l"OBoG2Z8k=˽SNV3}BhQBNZZ9ToS6* x*x%-*T_G|&D-sƽO89:N>$^ԟS܌ΩM(Z'g>Dq>\G~_UOV=c=g/IxKGmc{M_FfimdMڝHp#=)͵J]7P^5RSxeyP.E󣎸y^嗲7/bNMX_ |uǰpxieug僥V^GhrrcJ" DwcXCc9^2t}PԺQV~ƂS+~W0i^MoNuΈ[Iz_\3Xd>bx/TMŤ>o/-FWsgCAףPK0P%	    PK    A             .   org/bouncycastle/asn1/ASN1ExternalParser.classPKjA'!G"#.]VYoǠ 
iqUTQU{0F/k.%jŶb#&/u
X`Gs1XV\TBoQ}O^N\?d%^](BM)4/`vGה14C5MgPFhĲ
PKq   )  PK    A             /   org/bouncycastle/asn1/ASN1GeneralString$1.classQJA=iG]&miVduմN:+;[ME=@?DA|
9gΙ|{Miu FJv=_FP^|ח?gdR섑g߄TȀT}>0"esYTC$hp9+/ÉMCJCZ2t@rϮTa]왝՜ӥC2ܙ1d
đӡ#E,徭]7Wn
b.
|s0mdiTqgAvy%WS-oI%4QRg8Ytn*3~PK\I  L  PK    A             -   org/bouncycastle/asn1/ASN1GeneralString.classWWǿK7,|h#}	>MJZkX]vfwm/}[α/T=0wvsΝ;{᯿('^i	D_֓<9-!0͞Hb:ˣLLHFlIV#B6M2p~jbTB7E+5G+e͔h%Knږ n[\2\1k\%&a)2l[%)뮠ȭm.';/anXpۉV ,,]ӌYtŐh6MDkXLyP-u%tқ`cͤSj']__Jޖ)
g/	mKU-mu]]öJԬB:}KRYJCN@b5hKC¶Alsv
Yl鋺VrMMM{fMWa	G3W~	gnI5V|}j5
qޢ NI3Enn#lfF:]l>\{6Z\]{ukZ萑'#)#%㐌2qDF'd<)㨌d<-:C0ї[ӕdL<`%_Z<2WL_O"\Jl w׀w	&6
^=
(p
?r{QE0-y3x7چQ%VС91DTE(*EETv؊*v,؇qXcÄ]8Yge[=Qf«,^Sp'a(8K
 d:7`
o*8XY\Qh,fY)xY-]qaRnPUN~VK˟3hv.j؆f1E/;n$%D#t% }|.!9#?D
>`cnVZRi`qW69Y
@RfDZ=y'w{9O9oq*]:iZQZx?OsA!;=g	
7G8~ƽhOB2JHOWH[ih&sIJܛ۾!7pvNl

|]An~.]ev Oaoj'aK
SwB3k'7ͷnqۜ噇?UYR3mv>ӉRՔ ;-ӆHtO
F:Be#Jw~D_PK}  J  PK    A             1   org/bouncycastle/asn1/ASN1GeneralizedTime$1.classQJA=iG]yAix5M$SME=@?DA|
9gΙyx}MXV	\pu@qCF;2u
qo>SbJAw;\**E9l`!=uy2}z@~G'.*o n00ъ[:GEߩyTJþ$pݪݜgU_o[ b!(2&LdMXX1eigu[L=!I&&+24.Ezg1fcJf"
ݦFOPK%N  R  PK    A             /   org/bouncycastle/asn1/ASN1GeneralizedTime.classX	X\/7#3@H&IH*$j^f0:tZV[5%SmmFb[k}ծֶvILy3+_8s{ιg<c ؀wu****TPѨlTVqM*x+T\*nP.V7xxͤL+`kh}ڬ噣*{ummFE跁~
5b
uh$Ipצ+!=jn
45;j.6bFBFȠQL%"T<^'RdbwϖMTlo!А6=alzX
dl9N
pTO>:I.lKtx,eR$A.$"TdiB0
Jxl2ۍXj@`9D<Q6ڡBƚJGI^aӐpI=)cC"!0mՓ
ޝYB,>.GF>%!*PYf6I#[ۭF2N}F.կ8E\:2W
ɋz(hA^
nbwDb)CN&WTl4DF#dOrtyJqHUHkH,lGvpM'E%lG輾+]zc$ضy1'0Q=(rrp6
AʵPIo$(Yf\SX7ϝjDü\iܢ'F٥P-kp*x.eΨ%Dp,''SQqCWJ3gGM@KW
,y854"i
ͩQ[cH$h!BGntƉjC+P5b:eӺcMp(13T`a*T+zL|Pt љ2ɨ$,NSD$eL-{解#jImo-u|T;5sr9\l%S&;{&fNӜLb 
U+ة  PЧ_+\  `H


R
Rp
ݞ-*+
RaWW>n)|+kb/"
)-/mօ3Y{YA>?
Ϥ|gmdN1%yltirL푐u,<?;
<eu?Hpg|au/|Kg4eþtv|nkfV,{t;.W)Ne&6[?appih4taA&+PeF&=Lc4\v`-XXNkx阆q
_\d+k\Ohxk'ya)}ZEሆ6<<<aЎ5i
װG5qL&qx~^n<B5.܃a܍wn|rkL;L~L~L^p6<9&`O7nǳncy&/31߸O31yɟdי|7|LOLn܉qnVߘ+nq/~B܁wk=2{]kQVPԕCWuCz"|7]
'y8;.l!4v $G@1y4Qq@{ZśF NMiah-=g\zbN SIm\bbӢ W Pąh&pګܼK
L5_Il$Jp.KN4E?pT4=dڒư#fYL$
%(,MT+BLuHua	?㢴#8E?HeFAJi&)vR$a2MAiecAi|2`FP鷛_a~N9# P[7K]d6/LW?GL<fb<)h!lpZ=X$e*붂rg@W{U	$u#`<IURʹCsS%Gg>ȲvzU==R('$	QTqV"G-UlL%3^[Q1!-ʛe;QwS<De2g +0hsGMXN)x0O1δ>VQ,_fdtZbA--#Pchv&#DXM}diuBy
X!)VI^Aޕ!^AAU ҽ%2IZfycԼqijUgx-"UexȜT$0X^4/DyJ$ )힦2=slbԳJmiIgddU:i}Nn<s$1gpx<ιU,t?IRU48-bn&X5"ΛʣBd S&bώj/t;^J\8VX]ފ/YJ]:ɶR+Sa{*7]Ђ)𐘚N7ڼ=7I<MlQ'H
yn	Q*JhvtY,jt`2vD^򯠪UƭEmm]%;TlϊQVzPWAPN?o;<iW̨Lk$i|T=y'y"s`	T373Or:ye1*Zx{IZB<8iy0iRV.-oL27ETy*u-?y>m=
GԵD5H0CeKcH$^,LVEDI\_xDBPB*(=j%pB>j3)]PK{Ed  %  PK    A             )   org/bouncycastle/asn1/ASN1Generator.class;o>AFf
0F6̼;FFԒrҒҒ\FĲDļt}d:tҼ⒜T<C}`?CԼԢĒ"vVv6F1|}dc$44qIIj`a`fa`b`d`b`g:9?%E( Rd17 Āl& ͥ_K{+F  PKbX   !  PK    A             /   org/bouncycastle/asn1/ASN1GraphicString$1.classQJA=iG]&AYx5:VuSECE*QP|pΙsf>>c aZA.	rNdpA6?.gd2$׾3rh(=fPTi$>w:2%D*3UԻ
Ep"!AӐҐV}Gk=զuMgvkVkNUY߯Z5 b 8r:tuXѱe]uP鶙=),624XY]^v[/(>aR	,M5ǔT(<NE#
պBe&/PKaT+I  L  PK    A             -   org/bouncycastle/asn1/ASN1GraphicString.classV[WW0/bTB&HK0Tm13q2Q~j/}CT>3"P\Vٳw>_v1|Fca3<%O-[n/keʦ)!x'%ȱ)1LOcl:#FFŔ@5h$KR(H!ayE')ZȭYjO_+kDJ֠hݴ-N*s	m5O:Ƃ-ݞ%Wl:eշfUp$
c;QÊQqűR.um&hPnN+DvЛĕt,!I j"Oa|3<ƼgCwv]Kv23kUɳUHܷ,u5k_i)uhe6N RLx<%쪙SeÜ厄SHeK_ԵkW2mƤ6Fv✡W+׿EA	7NbYl6%YyэQUvqޢ NI3sE!skyXv
3+mlq\{Ma׮n..C'C!0pI$QA1<,s3pv$Ť-c5JGqt^SMM898m!m|8YP\>
)8?Q'YD~OZeTtSvL Sq-*N@UC&m*v""IC8bXL؇!&VTR3d\M/P0y)\U0&IB
NcNЄQ3(
qMA\YB
qE8Ww^tՌeq;=^[\MzV+
+'Hx
6U>"<4p_mB6x+'O-S	لLΑ%%T0fWʯ _bGC$*(P˸"s5 1:FLO7IAcܓc8pލYwWXi=uk2B4/)q+wH˸ ޳%q~9zHe
1݃3=$ǪWЎ'V'l"A8@l
;o/UlD>J~ޫbq<~βt	XP_OH/~^b&iCw3<Y9҉it>0έO8=8!d2>bL7aӶ9ҵwBK^Ht̼PK[G  !  PK    A             +   org/bouncycastle/asn1/ASN1IA5String$1.classN@ƿP*D=՘ r 5^8ղ֚%ݕҋ>e\
1aٙl~;l$t[#Hy9'707s<>Rq*8NMcsSbV;f#BsP
l!@P<i\DM$$(
R
ruomӷk}si\zf"h3ߍ_Ұ !8r*TUhXQeE'w5\궩zZ1F;PmddbgA&˨엷^P|X%3V_QxG*
骤2/PKJ  @  PK    A             )   org/bouncycastle/asn1/ASN1IA5String.classVWW
I0E5iFPA`!atD}voOl9G/9W;39??__"1MAl[@]cֶ4#N+aA5lt]4lE3aMՌÊm
E=Hv^M0 H*z$Y+`f5"1$#SִOv
(q(1D@R;O[RFSt+86uP	ɨM*ki#!
HCTLiP
r)(weC]lpTjY֌pFtB108a#cfY&}dwYݯd2lഀڹ':=G6$QFQJ\BTss6JvIi\j.nM3rFkf<<VGm4fTWLdU^R۔&\mV&7B/ σzhzM
b By@҉&\uE9MR-jiefHqx[_OS\ePWDf2P[Zl[٣9n,`6Ë"k\r #VVFئG
m5=35~]q{m.H6omy8kisu""vhq;DKĝ"G^"/hԵ
쥹4u-fDn&I	ƽI^TNYm19?d[X˯c1MbHat}6F2<P2YpȩWf+-"~w!}).6KྣŁd"2֡NF-q2jP*Fщ
h@%kd*[퀌ˈ29˸
26qH3X2BV N29%~CxBa&]IĐЃ&cL9&OJ	d2*qsL.H8c8bbKxO1yI<C_k&%襑ZmUi[g+Sh??B!.b2vOB7H_G0?S]1WǱ;\")®J͠'5ת|Sx#6hxFO^y EmԒq_RLT2Cz'a/91~
w𯔚yhP}Ѻ#:b|SU4^055C2Jūtƍ%OD@D T;<=;aQ)+nVBbfI>/(qrGٮR~kMOq"@~UW	e
LT{C&=F{ZJ+,fIv/B»W'K~-<q\ky&Muf'˓5A(t,7t=>F+˨xu_C0{eOދʿN|~Ǚ4oR0Ao*UO_8t_PK    PK    A             +   org/bouncycastle/asn1/ASN1InputStream.classY	`ב(@l!q(W%>6$	 ,Ȓ#\MihwJ $l&$iw춻tttK2bϼ?of޼yʻ׾s n7$'An	I		Kik2
"=x #J˼*@Ҳjf^~V3ߨ6r-j[_PS0quXW0
+_#[%j'ǂ+pz&GBpGazrhgg I.if"Q.pm
cوfkE[If6_,
Tb+T f6דPS+7Sþ'D±xN9"a:ڨۮ3ж@8
SF{id|]
WgS5nlxG䁠yQDzW6?fxC/H0*jx eͫ&hk`<#@0gU:PS84xy{lD)Rk:}@@ܥ%jׄ|ԧԬb˺@v	e>}![&P/PSjm9CjD$"Zbxo2F}	2#$cC@w<	}1mJ1mLMT{CpG7
tB+=]p)Sg jSS-9Jȷgw-oxA(Y[	E|~ڽJ._m	)fe),ĀpKT$
Y%ղ!BY
2lXTc)~&&Y!cYTԑ=s+]jlޕw[R7C 3czB7yʻ
jZEݪ{ɂAV2˂·,KIY\Gp+S|,ѻYf捵hEgӒx}s~YvՋraZg4
TD]4KlƂ)9:v]JTa&hZdt!3jl2jT6@Ό rs,E<fd@֭q܍ʄH
 Xi)f3(s2ZFDCAzOr
Eft*jf+C!J᪂j ^MI2R}1vx~!4%!B>)zSg'9FGŻ4*GG"iH6z:vpnWxOx{83ѯ|q%mUmv556uQkkS*T.	z#Qr$,	J0MJP&'$`0],T2%`[W=P'^@Fk'`& ~hQ@<$`	*M_@@@	. $K@X@D@p-J0M-\7LCt>ih޴cY7̃4әiUG;24ޘejkW]lQiY]Vo)dIi÷{oxo9M++m)v6
c
[ro.zqN"YŹc
jbrUhN@~EiNBG=/'Y8d'%Fv3儯
o|!@eᄜ \jZ9NcG4eXnY:%!Oοi ^7>Hź	3CLE#.4|,3rKDT4	9qmfcF!PO9L-c麤\3ԬH=\m$۩R1aNrz0uh4,SL3؛$8uk؍7",ͤsPQ|C6SBQ6	\{3fL)9$-jU]JYx3?Zq͒_@
EE8LaRx
5A9L
@
?O1x[3&ß)P>&3
_0K+n
'C{owL?0G&#&fLɿS`?3o2_&\V6B^cr
f!~l4)A{Т@Z`"1g"3<$V|xL`bˇDi22Szd8se8P[XͤI#CΓ,f2T&L-M,86poECJN*b2t&3d&YL0J&2c}L1if^HShg	^2KdHp_pmU2LVЏ2`5&qow0^=22
2\2]|@a?2YɃ2pLaR%ۼw)Cy`Cmu7 ~DaH8=#>ibf<o0	!x3>4D -O%?Ցt8Li):bXu,Obqo|Bq:a3uNmnY|<vYܬi=>T͜ ofڌMpЭ71y^?[
p< Q:%MMI\lq;Xl6L_=:7*kA`6UYGn/$/ӗ4}s`g3=O,~\b7N:nInmiWė[$dbAo яm 
g
p
L82xeY)WR̉us	WҒ#PTr}r1.ǖ`w8o)4낉{LhCv[iƞmQf .hα-VZ!-u#MA|!J_R	Ъ*`=fx",(y"mGOU/CR|.8NǇ߄zrg9*/l7BAn~Nl6eAεHI7y&<qR>'^ ^rK+vz4N+vzbR6.bߺQofVNm]Ep+y
սAA`_=H)QѢ˻9<CqB%X/'#xK'@(NO`0ĜZ=WZ<Z?я@&)sH*g%{9l32i8B"M""Ge&1/aEG#_MZ	N`A#X­$K;՞?>(rMNxX'I	'5N&?yD+"(I[LYF:<)MI.iWu,,
!(KɝEe^
EYjPKϠ2't&T0bM8HY5ZcWu!9GG9n㸭"8֦wE?V #F'8&^=;/*gJ{{e?ZXB,m9i&UL6NWkXIohB2l^HV߻N٢ZZRͪuۄѿdޏ=qp3%&grϮ/,J;)[I+]|;{a%u\Hٟ!35/딚L[.Axt'iڮ98M=fIJχRd<yUéAHz:cħE
5ߥ=js=w'b$Ag1Ⓝح5̃#Av|?Gt%˃:Z!>uC| <1yt\"m}ܴfx=s+0:7&ė~1t'a4}@忀U+H忆UkhaV)8]3|.ީExWߍ*_ܬ-ءN|IzQUo7s֛9͜fz3gYo7s֛7s֛9͜fz3gYo7s֛97]cBHd!lLuR9)G PKP  _,  PK    A             )   org/bouncycastle/asn1/ASN1Integer$1.classJAƿQsuݴRGEBk^,BwAVduնN:+3[ME=@DA3}||8&A,wkC rHz/!%(G+;!#2#X:VLRrݹLJ7bʗ'
oquՑgMCJCZbcza7ʭmsO
m b#CG^XVS{j\A(nʻG`4<
l#+EkWqO@AqIW"}C̤PK1I  :  PK    A             '   org/bouncycastle/asn1/ASN1Integer.classVW>fBl ̈́&((	b]Ija3TԂַP}DCjC?xGH~>{~{ι{Y QSAM
6+ة`~9î<	Hnn<
FQƭDOt3(9k\##.Jփ#FE0/S'*YXL>]};)ǈvqF34z*nHhXRiEĄ6Q%N:ɝC*}9]`hxGwJ0Rn=Of􄄐Ntiǩ)6Fnm1`I0R1k:^砕J;v&D[F{Tc6hضez*fid:al̶d˶)z*kQL&!=gCE4iRHߧ'
b@ȐT9:6&ʸ.t7`&F\O4ZN1gTSrXc^bLctcgRQcР5ziE{&cƄcZ)	\m6ᘱ¼ޚz[㙤r@#:糢w!tl
|wLLuqQw.xIe2.vo?OJ,;zʤbS1=$VV=Ν̤q2dۊmnӵ3ǖl)aQg"Ц
=@t!촞 d2d1m頬6<=`[|f<'*=d
1'TS\xU|1Z|(&"ty/hqHFOxLƧdDei2e8*㘌8.!wAiI[YDUd_kxFhDSj=4[yMw5#X,< V\y<_C-ᑕ¶L%^)[߾mP1-*ZФb;Tq %*PT*vc/Z^ԨfрZݨSxzGzؠGôQqdT|EΪ8s*:0RюUDpA=x
.!Fq9WBaχ0`9WX<xwXL~wY|ŋ,~g!CH,BSa2!Xa)}xoPkNR^
|
:z}bH?0'
B:lH}8ImE'PI~g0J4zB.B;PhoCy4}PVclx,nUMK&_Wwgֲ/
 2ZKnI-A4@׫+«:]T6lp/y}R6/jmok
sfm\q<)HLZ[V
ာf1E. v+aneU
~!-l_"COHyVQN	˦Np}oӑq2CCub@u=nekU96<9@{;o%D{+QruELw^VAEAu@,\ǶbW(_Puߚ^eOlui6s핸p%jl?ws3X$2|c]y+%V	>Ϸm]C D*;9mP5>7N{Jۛ!vMa!iŗi1"-AFeq;
џK#VS;?56"f-t!]Fp׼[0ӱ ^I+x_;y(r>J`x¾yt
hՁRu`˨V(8aW⿫J k%I
7q/SP/γT3_5[Kk$)PO
!qh½ঐ@}oS3(OA^j("B`toZ8WrQn,'\/dIF
Ŀ83\g7J;'3PKSh/G  o  PK    A             &   org/bouncycastle/asn1/ASN1Null$1.class}Q]KA=ֺfef&Bk>,BoAZdӺ(ꥤ~@?*U{y^z ~pGiǪ"h0n.Awzp s{z:S6Tnmp:V \fXgV5p]b@Bp8råX/#kWw`YUAB7ek9Ɂ^j,$hs0EgjP@4Ś%а-ȨH!-us8u@*4z9'k $%)t{J:*rTνbSccR쎑ci''cLKW%09ePKb_  ^  PK    A             $   org/bouncycastle/asn1/ASN1Null.classT]sF=Hv(44NIPq[	td7@\IfOi_ tƞif}?]YI<@<y{ۿ^XE]YsZ؟%Ĵpʚnߑ0rVW%BUV*-"vM		+_;$L{\Rtl۾WI]|-7r	̴x3;)ݱ=~JIN+_n$@auپ)3Sc*ubNP=)8){+:MJO?fOYt3}ӱ%YFlY`V5:-2 擴DwM(tL]	Zur[w>P-ת+ՎeIH
\_JCatCǬ~F[R|UƸeȸ,Wdd\1/!]9c)ذ$!.h.ZrU>+0+ڰZ6s#m1%POCAc3toX#${tdT"T1*LVG0qƪ	|<n[qMv6EM`I
9aO 2")Senp8aGO6Xv,Ju2J$QZ(s"Fw3 ߈=/N]TEr!Fd{]|Oz09#F
}sAr
ʩrӮ:F	h:G^"?aE0)Tt$r.\(0LH v,G!iH'ChRwV9\xSљ?0~F2Ï_MҒs<\2, b/Q:"TeЉoF2PG'H?j_PK  %  PK    A             /   org/bouncycastle/asn1/ASN1NumericString$1.classQN@P*Vbo5&H NuM%B[E2.M%~;#$uW#H3	A	-E|&؈o9L8ϸT;`?]6rgؑiGjv;Ч!s"d%0DsUFw5H/忑gTRAJ  #c{d]Qd5CW3Z?ߗ[4_Ұa	9
	U(аbkA_7mSq	&4s{JҤ΁`S
R4!rP}A	Jbu(9+xEq&TnV%*;~PK(犄J  L  PK    A             -   org/bouncycastle/asn1/ASN1NumericString.classVsUmvM< $BGQi-ئt!ݔͦ(oтQ88#>Z3_gdnPZ3s=={7lg^
pCQh O0thn<4ndp^3Ӷ|y#3݌uxR5a;k ET^*r<$HJZ4`x2tSMҕ
U16)U=%fRz42qS%E7	_*k鉀j)#遄jFigGL0M&>f9aSI$~an=8cT)( BT0
MooRZ%jBIR=Gո#-ݖP
->m2DT$2WM-Β&=q)djfQw ͂ڭMd1%{U,ǚ2z|$ͤ>4tYSzTZ$rmuc3`FU2
󣦣[ :1JsdP7s̘Z2b.j{7khz:0o|Skʾ!fj:f/RFDDDlQ'~[D< !DlCN"v"[dvRC9M](Qw)s遫%-zzXd~Cppv~2>sd8Y nUD@]xmy/\(
uvߋȨF
+'2@}(YFE2>KP*xuxRFI#rt؀n
8,c5(eGF2֠OF} _c0%Ɛ=8!!
C^hLI؇LhGɰV%!d@B;L^`rZJ$丄N09YWNk#Gu]5KҲTZNxVvЁ\>Z\E/i+Bh>R7xF
ϷFO, Vk+ke(6o;,MbO$uM2aՎEu8<qn@mSi:bWwؽҊYub^
.{
C7uL(75	EE
qEm
q:|	"<"
EcJ&4OF5E{l#bH>#pucf
370j#pk;RG}V/onl+!:br_st l]%yxsϐ.J_6[ixREF^>8]xyk܃`LU
;8Q=.xz뫯`w˻W٘oK}ۯ|1Ʀ̚.Cmm
[nQ
^Tx)Ew}u5ihlqud3Y#6\_8rBsXg M@W}/&J&UM8{O*ЋgPK6y  Z
  PK    A             &   org/bouncycastle/asn1/ASN1Object.classR]OA=nٺ,B_Gn?d1I&Ӵlb٭O'R&^Q;-)	;;sϽ3 CȔ<[eP̛
'c[Nݵ*.w]0h
Klz]=7ިf"9a~rv͍#ah+Z]#?`KۛVKخ0yi۵}.RnaܮS?hZ&8s}E&-^Bm!%Z
iqu"b\bBu*TDfGQwc:/f^3GKvEF|Fq%T]R:40
:f1:CŒ.k4w4$,n %]ii2H"M:(lNh'v⭊eR$ 50OvvZ1 &"h
HR{>d>qh8G":LzOثcdC	r_G|/['V!?y-Jfo6,}~UǤ!s))
r'HC{'PdoiVSD? =A4:	J5@SY_PK[^SZ    PK    A             2   org/bouncycastle/asn1/ASN1ObjectDescriptor$1.classKK@۪1>}* HUc\׺nR

%N=t`g6_f;W kcZJ
إ*J5\|5n7ZVu偱fi?%*3dׂ-aUilK'tjǷUAA7nKA=@|+.ХIu ;𒸩	Eޓfٶ
GOyHC_=$1)0Ű؍n&]#Ch^RB7%C|lIZT48'L˨70Kšg[yROfIdsv/L#`A}PK=E}    PK    A             0   org/bouncycastle/asn1/ASN1ObjectDescriptor.classUksU~6ItP 4)VѴZn6nlzCQ𒪝oMBk13y9yso N DXF#] ;Z~Ч\ǰr]a],
gD*;YWvFB 2îL!4,=+aې7	L'|#yae%(ZK(jfAB%\1ktVXI{e2j[) /VΝprN3L
vX_Å̂!+
c]	9b8kab-G[3'ܑڂ5Iom;r,%D$]Y:Uh5.
-G"͚iv 8Gˡ6LS4sMaX7xB.a[Ԭ\vIV8\qQXnݱC5x6(V\(+chYH8j;x.Z\SĹᩉWG˘buinRBϋI8 ^tEDmaPu !fN/	Ά\{,qi-
RkkW[d
h]K28*㘌e%#"#*#&G		ݩL`c3qvG;Ȼ+Y~1|]ex,=3V{__ST`3a^!H#_ϑ]O{=?W?]mIlyaGE;ΩhئBbU
E>oTE'TdFEyx["ΦMR*`\E+&TEp\b3зzFkUpy)8lg3`lGl2lt6Y>P07pUY&xM|])O}QԤe	LZL~}\O{
^N:8k4nG3$ܥwx/,#}#,K	Xe3ƛO'=rٟZ*ΤWJNC	7V~Oh	v	f
@1X=¶P7-ԡIO^˺Up;|=LE%qx/Ϥ}?!zq iOF@{/xihlr
Ao{?e]$%4QAGi!Iou%|e2+Y/0KC>@htl?FPp)FZnu{\py\qb`sW}&Cqf)/=!qIÜH"[Vz<YWyƨ*30F {eYTU;m
>/qRPK    PK    A             2   org/bouncycastle/asn1/ASN1ObjectIdentifier$1.classOKAƟQksݴ2GBB ÂfduӺ6$RѡЇU ޙa=;{	*,0)A
#eL%u`sqQp!AzFuBQ	i5/FO]aw(h@p87	7\&	Bǻey*=
+
r8wF9gT<'-pK`]xR~_KȨPUaC*U9SҷNŽ!liBC %EE<ei\JIx"Ie'TV%j PK:S  W  PK    A             :   org/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle.classQJ@=ڦ
m"h,]T\j&B?F(.D~xv!q`93=wf>^ la!^ԣxƐ(_쇫i;gHvc)w|҉pH5~
+Ѻf@vme]hivM0/7@X}iaRö2/9	l<d+*`(~w]90E$b45H#0̨aVEsag\\K)}_ГilSrL~$FBG8$FBl0?cQ`	EG<iz0=azcXjUc<{^/E-*Q0I!
PK&Eo  D  PK    A             0   org/bouncycastle/asn1/ASN1ObjectIdentifier.classXxS&7mӔ
TC&)D*&-Bsx^hHjMݦ~~Tq>`9+lKt7}9?9k_HlvՁsс&Bt8CF%ݚ:-uwV	TĢI=LԺ{(w`$"P]?uS0&n<uW!Pjxt6ϖ 2W
ƀ5f$#ˑibΊi	o:y\	Gf̚ 	(5[PS"r֎ζ΍[mk:
T26pՁ
Y|p_TKuk}@,z{I60Giz۵F<Aq-O~-ޒ$=z5V܃z/Ie68E'bJQF5WI-M\ Nd:"ўX/M	L$=I-1qzt\XwvGX۴pH10cW4Ž-ޑԯMx-FFn^ا+aH#hD)ߐz4HPJZtlkcѾUAJCz"Lvm;͊hA`#x^ү%ru(;cQuкՈKyHD"وDyq$a
L	G]N	6,8[ZNkL&7&Sem߁d8FlD5X!L'Z}IQ[ypXunNrg <f1SOFGzYcEn?^P"Zae/k\=Gqr5;]Ki  Gf)rmp9a3 )5t=;zD27Aв}QSe=I~	ϞxE բlqe6w*s`aݠG4&2	Ԛ]	m	/xBt ճƧ$uF7rgBdщV%͹.3s(VdL.b1d)`omh:Kd\cʒVd,d|j:~9h2Az6p}<O82
- B`~<zƌ-2dl)2dlq.[d\!]2n[e\%CMFe\##"c
'MsgnT"elyoIp55)=	uTO:s
x76i	R>;m\OVs{jALJ+i=úAx{DUt
w{N73QYwdyu!=lI)Y@,[&аYE=	ugp5_ZT@OzgK8sUq}TWޤDl(Wtdi+ĽcW~-Ǡ;NEWqP

*fLE Ng*ˠ.Qb*U܂sT\6MťRUPjT\sUPO1'U,~+)mV3f>I|Z >T,`OH="xy֖bpP
HT\T,T,ƨEfğgU^QF|EZEP5_g:o(b}w
>?*SaEGW>F&(l;gfB0(P9vmG	]̻~Mg2cQ~`~a||?bcG3o0x[A@*xf]U8"{b@O/ˑR!W#ǁMn"
IQ=n7tdcR빆^Oˇ}dLʦtYbZ[s0;X?	71qRZѣU8{%#UpPs+bA)%V|b{
	n
!8/B9@!̠!^ 37}9%?#JΔha|pt`gA1eO|)QNCJTweB{SbjJr6eb؋ξ\,C
ұz7|$ݘCCjhX!?XE6:%V!Y!Q-VDudQ[[wVBLoZ07Z$:=(9HNi-yNL6s5Dė^CѴxϋby>mTVm13EHwi'I'6R("rm6EESoI&f&7-a Ms(s>-!
E]zʱK2(q(U"	x1Lq'9Ge
J#('sBF]DكZ
##^?XVJP/ KÐ
ge8j+XR2[JJS`"L!c<j#4iqaf	*4ȗ3YJ,6%6e!
j+dN9Ld$%bU3'`
1`$ U ƹRcڮt}\tlܽOgd+Z3֍-'HٍgEyV"̆Ҋ.YK.R'Ѹ=3=]Cψ!^ F{ mKw[tUYk
]̔GH\,1jDs9+~hVH`%^=r.vE΅--$̣^Y8Uxm<[x%\"\p+1mE[FIZl+\l{GJi잂;v>Rv|mZK\[nڍJ;真36C	Ss.`-pzKb9>wJl."NyUbVT%jisYtKdD2
<Us7k,]ҭv1<6\B^GN.AA;1U-(EG8JE341(etO\D[ZLqzy~PpjnCRK17]]|`kL'grY5VeX|UT+֢8-{qܙ	`qd쥪cEPm'LGtStP[|
]/P=]<@>-W$}6X44+'d\in%
l,x(E7,7:C].i?(<+JG E~ĺE .5?{PKޓn9
  b  PK    A             -   org/bouncycastle/asn1/ASN1OctetString$1.classQN1}E`u]ADăc46$0&9AuX-$^4QAWCL 4͛!6GB
s̐U6a7͐D.CF8Þ
;K{,'e	0-3LgSKϔXz#fƨE,-$,$-XBxnɎ[
<+-CPls0teDI9Mv5Yw>=+52jp5JZEԥ6Z #!tXW?i5"((J!aK^E8l?y_PK?\J    PK    A             +   org/bouncycastle/asn1/ASN1OctetString.classVYsVǑ($$a)$ `R
$'qcC1)PE@$I+ uhG=WH~g|% 
->BxGæ۱48 )a4JFY9"є+rhDgF9#3L鮤nc+x<QE&\X.˒\>.ɥjlkem{Cbf,m^sbhjArLI1
J8DSe˜fuC;qĲ%YT1]Mۚ.:9XT)vRȬl(䬓NiS.+PPm[.aR:M)d|C=+>EgCCs=7]u(z4Cj%wE^%2Jמ*J.*jLZ]6	?uMs9b4\V'MldL*e5jy6UYwF˚^P-L5ˆȶ	Hvr0Z+T=gUKF94=!3#[D0O~ eznDk3O$Johzm0mػڹ6=28.Tsl}HbB:C1=<zxc<gyyM7Y!H4]tSEL
U{O>k}#{u!M&э'ިuHSDFGЍfUU*I&P#ߛ4$o|F3zUDGLtcJD"vB(،NVt"#+BbE&gD9;/3"pQn\#KLƄ,TqE
ż1&N`N@LL\)`C_B		[if/E0Lr;N¤eGLjJ/#+W'R[w8Brr_ͬ@`JA?.+
VG,ĶVp\v~V?^Y?e]!;71&O@O/9g8D
``>
exT2޸߈:V[,	!jEZ
m}-9ǷÏ2>[XgoGǰށLC8V~By{E^YheXY>d.|ۇ(=5CO=y<na
Mւ	n/}ⳛ\)0mܪ*xo{7O*h,=>+Jq2VwdZpֿ7v,oa"ьO
A~B88&Z2/PK%3G    PK    A             1   org/bouncycastle/asn1/ASN1OctetStringParser.classu;
@  6|aNYBB6,<hi77`>ak>UAfdL"q%2gZU>g*eWFۓs&S$*vraȥ㊍w4@0L7xy/ڄh@[@	/PK^B      PK    A             ,   org/bouncycastle/asn1/ASN1OutputStream.classWSSW佼$$BjZA(mF@?!AGӺ`וK\:q3mlC;ƙZz{DsO~w~u 'nrg$zMIDB;%2em.ZGX2=X-ʴPI5 B0ga	I#7+
ɊO2r	2+K[k"oTNBۼaxiv$E	lIVdHyԪ''2Fee	RRl!6l!/aud.`˜KcFڬ1s+X}äH8XXJthx??7~阕hj6G=9U+./gfnֲjKVY^dUkv-m4g,RW
֒XbY6[j¶*vاb*8∊*"*::(;>ךjѩ:=z$w0h㛴ct4sl߫)qG#W+
|Mu[@;A^_[=odNnSlzi'%\iBE7a(>C?cpha[=X
Ѕ|}BAy1ϼx*I/N`Kq,d1s3^/ΰmS-8/{+,
q3q14'};eH۴$
<K?$ 	⠵?!q}g8XqñifKq5$e8:i	NcB/OH=J<1iy*#m#X|uX5f8NE^)00|/E-cY/#>\=۸^K>oo>o D9ٽ:BHnG
TFD(q!Z`7p}o}oŹޟ_lݷȖ4	/LpKIE۪#WJ=5fp@&X(\5T=:ևC茅[si"V^8^B(ۮtmư`l׃2%S7gm"kM8WB#Vxl.QS,GMfWxdS<5fz7k&mM4E3Cò}0TuS\nii
¿9*qeԝ9FZW	tyZw2|! 5@CPu%\ݧe@W
M	
ԯ5ݍ?- 
Mܗ6(*].0{_ЃP}DU~NC=)] t_~G[2 njz%2CO*<+|TsJ^:I6GDpB ;?ca&8>K"7#^6PK9I"  
  PK    A             0   org/bouncycastle/asn1/ASN1ParsingException.classuKK1OLckRu
Z).atq$$2W
/c},rO]
>Ѥ?`sCS+?WF
#(-MWGwܕZQBVv$љ,8F#FȰu{trnԘ %ua0Lih:KfV16"34BaC44ڬ} /=5YJڝ:{~CK_W?PPK/     PK    A             )   org/bouncycastle/asn1/ASN1Primitive.classT[sFV"G!D-)Mb\p06pD)Hk ?%?%2S'.gW=oe` C,TUΠg_US|WpyG"tC2#[ ̽h@C	`!iUwhDw}'hd88m!xڨ~Slʸ$sAmV}>oul-w)ilhR<*K^PV:a\Y[o-Ee#A,mmqrKrߥ,)άkɾyI](mqDKeBoc rc_>rZߠUm1${aqJigt1cY
M|z؉M7Z
Wn
Y3f`S!QP荪
(׬-t;@
b{^E"EZ'%dKs|9	|H
	KX0`[|'G	X:i@_-7^^uXηkM݄|џ*Cf42E/l{i헨֋=\+BS*r3A/ʬ
D Fq)	I+ܣZ=T]^a	˯jR@@U>1zGӉrx#(&
XR4NYoӞbzcDa7wkCK?Sݑ,2t1Q(MXe'-X:K$DbDJZv\H(	J1e=G&;41GOP>v;M^G2=PKoW  y  PK    A             1   org/bouncycastle/asn1/ASN1PrintableString$1.classQMO@}HTPT
A$FlIw%_E?ʸ4$3ټ#fA>'O
NȨd77a0Gcs<>2yH&53u>uw^W.g=:4R'8XG(=+?ge,!AӐѐUU;tB-rjTmX~,&VQ6b $
:tuбui`6.BvFsF0}i( R]Q&Uk{(?#怒3J7"JWJ]r1PK="J  R  PK    A             /   org/bouncycastle/asn1/ASN1PrintableString.classV[wU&I;tڦW.

\PP@oЂxCH'e2n/kxZ/>|o ˺̤M۴ԵZg}>g㟟 ؆/XFЍ""<b~.h3w@w(G??d)'Q(wc4n6ڊMÜ ]m;V$%5z !Eo2hh"&5CEuU1n=>7Yj )ҒR*-QbU-f	XgZ̧zR5_L5"4CѢ8'G
IוQZ-	%Ek{Xe&g^%9TZXPk;0!H"j{0RRC-	5$|ɁjC<\h2P*+p<t#F<QLkBba{?\ݬ5bޤÔgeRcY1Ԝ'U-aȆ$Zt4J7t6}	ش8+m92d	,вGg/9==$zGG??дO^m&]||ϔeoB3Xl$so);
u
Y*AC"xDģ"];E4EԾLR7Y~-ᶕya>5l[z斸޿TrfN
<Lr?6@iƖ|Z`w/Ez*2L{r)ؓ&oU2*+aȨ@(2!D*LF
<20x OɨgĢOO329^Qu#ZIhCJ^%)	O⤄Xqi/Ih			p`qZB't	x,^pI	0Bc1"gX 7'Л#G4MͫҰP':^Ξk=]pP(}\}6`Wi
!_)\p;c~¸Ζqlߒ%6Oa_M
!C\.&/^\Y 1FLyqPPػڜWiry>":P͠@UpFI}]pyQV8V,s7	e@spo>+bV1H!%
pyМ pLS$+}Y
L}sڱ[8wY)&#.[@6aR-_
qI<mx,y!a{D]H_a;yKgn69^1'"N EGl#mDX
[nAWܯkO7vy=b6{s:
'pd
מp9b]棶ژ=r}5_`k6+PtpBiis܅pRF-vip/H;7%eSpy*'8>+*PPK~y  S
  PK    A             -   org/bouncycastle/asn1/ASN1RelativeOID$1.classN@ R)TĿpICD~M@Ye5eJڑҍ>e
1(&wd3||86AB/v+c k
v}WCF
x)-	1nnl
4esVn3-F?W($/Ăz7Y:"p @Q %GtH
rǨz4MxEpw+\MM,55,h!!
9VU,aETqun{~(}L=,.R4Xl]NeUJ;/?a	,OǒTW=N]6#LLUPKX,yM  H  PK    A             +   org/bouncycastle/asn1/ASN1RelativeOID.classWy|T̛Y^2@HB5LpA%`p D0dd2'E(
֊bmi"C44ji{RH9o^2H4?8s{ιg=7
Ŋl+rp[Ȋ:+V[b7
#Ѹ[uoSZ;qm[[N@4Fa`{˵hZ0v\Qzn**7-Wِq>e7-cF1IKGIzӵ,f,5\k-,6&vK~_U
-ͭͭ6Wp1׷xƵ|:-Q}1
ڶQ&Ԟ`쪱`M}*ĮF^خH(E	$ХD+`D~s}1vP*?Io&ukT4KMHo<cĢ7xs $Ƙpwu;j:U-Lx)c7vƢѲ>Sw(nu
V+цK'OY|sU
c|4:x$H:V3t6HhR@`o"Lff6(R{`ktk0B6j#f2B_vGo9;>U׫>YEm.w:MZo˶`,FsO"dfFuZEkGC鋯SһF侖FcO\FH
PYi/uXelIHH`FL
&J
2v8Ӏ=FcXjZ֧;x[w.B>b<µ\}9Z0:]EjR{F51PeRE8QSjڣ}kkp8}`sTL#0Z֯k^*LJ(3\8xNֱJtylSq[̝(e3Q~A9&E^!XW
!۳G=M-s@znv/^cq-ȽףzNיTK=(.N*j>_h!ELLG<qYёc;VǑIWy>t
-0N2iAoIo52V:2^hQ&[d2edt%Cq@?w&r$&nIvegRbvkn53
**gݣUqSApV~>=uWx_j=si*	7^Rp㮮cEwʪ*&KxfZ6h+J=X{lf6-xyLU{], Nx4	TL Lԣ8ᤑLRݸ,ԍݽsL
.GST_A
r\z&Ty
z`>
,@L0E͘`1HA3+
(a\*Pp	C
'z|Rr&Ln`gҍGrPEL0SЂC
q~m<d@AO*a
Vg,,,=iv㨂Wᘂ8f2yv܊|W|ˎvƫv܁q'3{xɯɟَ{E&L^e[&1q/+؋WL~L~L~WL/v܏ ~oLn~GLȍkLL;v<9!с:=gRl_3D/	luq5˭Lo=AdL"tlQEsnuy9띴
] 97Ea	>O;sC-t}#
G/|ɡmː0=LGh~_?Jh~߳#^
E$o{%MC6=mǑJ*Ӑ8wϔ$p:tT+"S!!d삐q)1hcDBxb;mn"TYP-F]1J]<YڏA1sm^qQtDMr*Ly2/%;(\JST1c[-1
F@Q$SM.[
9;ꢃ((uڻz{RsP¾5뛫y7OEy'!
DVS)7EHXF^gpĻPNcq&ߔUt<ީd͓A1Ȝ1OU5vҊwZS;f6"՝g ,A5ˌxE:u~ a&Zkw83.C	^2b=Z"a2|&RxKK\=Z)_cm2tY#eʍnϟN8|7SʣM^nzܺEٯv_)"ݮiks
}{=ƕ!mnzoU=+*M6WKj}kpӍ4(@1̔WÙ@ITO"L9³Q326(* <ciyIg1T'ܙ]Y/w< Y"̋w@t8!301-*q
Yd(wiy	nsQT)B%9km.y%J[Ս9%Wh y|]RڹB@4BH L.ow(s\'mb$-f<ÏǕd.c%;?%vYa3/u$u'i~ mnk}T$T"!EsQTDEh@^2HrźHڝELw3$
EٗAp,ls
S+ǌm­xVSUBafs5eϙ9AាBTtӾvŵ'VOLݧ0ezE7'\KfuTk-+?2wKIPvkH!:W50ABna6:_ۣ`YY[rxI8< %'(%RBfPv,tgUsmͻ-ɁkEbGOd.0iLAgWN]
>Nßz?(½mǅro_;Q75^|XԒSW PKBp    PK    A             *   org/bouncycastle/asn1/ASN1Sequence$1.classJ@mcWkl/D

"*Bq%mBJO'vv`ٝϯ 'fh*ca8e*Q.2ںL2"
Le"d DK[
FGcwZ-daEvI&Ǳư?2 ʄa<gW@7ʕ6ֱEfJ^$3VJ'C{ceiq N|
I[TI7@
kCwei_N.PKb    PK    A             *   org/bouncycastle/asn1/ASN1Sequence$2.classROP.-+DDtTo!{ ah2Bxl|o4hQn`$G{ss~;/ `~Ȑ{@?a`+/vT*[:ސv(1LP1C+ӏbMe9orUJtz
Eu$CZ4}1LJqG0ҟŶDH_0T]T 7t/,-,LZpH2S\=/s3Sn?}E6r
̆y`>2nP@	E\@vBTޖRD[!ch?-"Z|NuKJ IuЕ25Gx(kXtϰ|Fg;&e=('Z<0`+mEQ&i= |I6>}E.e=
M2V(*POPKڹ^  3  PK    A             *   org/bouncycastle/asn1/ASN1Sequence$3.classSMo@}/7ӸPJ -4pRU_R $6*uq`o"7+	!nI,yvvy?߾xGR9CX)3$V	W6n1?ܗ0Ԍam1o1ÜEG8gȴwyKWOykԏޛ+-a¨͝q	\CxItPq4v=_xD>ѽ F.ɐ+'_$q|pYKZ}"shRY`NARAJUAZɄ\r	l3j2rL,N,S9H*@\ ;IdQL
YF
9bnΐ[N@EcHZwmsQ!GtCr>D-&D
WJ,Fo)I^|bI_WF_qOxFHFZXaF<`GR!ψ9!
[~|g?m|;1C)DӿQPp}[!k*E6hH+5TjOJGP+`WPKN)K    PK    A             (   org/bouncycastle/asn1/ASN1Sequence.classWi{~G=x/ FQB˲/vT*IPL<#G$]h!t7҂[!9M](گy3wĶ,p{yϹs\r	ىj'9Qz'ˉQ6	uFoTѴWZ&`vu,5[jTO }.MѤ+q֐! [+Mĵ#GF#GhX+iI <'`@2kOf騒jvvk5A-P*}Q]s쬪M*x"$yphjnX2kjRKһI%P'z\ªTr;~ZW鹿UyM{S)4qT?{#s ŪT)}TŘKU"Bh6J&"M
M9#JM,.甒MOQ60fjJrRi'CSQuV'55jBb|+DB)T,Â\Zs$T60]p{~P_&Pɵȵ\	h-eeedI#L\$˛WGy	ز6hˎ`v
hY_#Si%1zz۴2r_`eO^)-\63 aW*4 G:~沮Lt=yK3WBS@̅\	"QG!bғ*+%
XhZQ͛4t^MaWD;DxD4S.q"O^"D_ćE/bP1E'O]7QErPёtuց[z}C^[;J
7"|4y,6cA!(uNB^RJſZ˽p׀]P)eYZKXC|wY>`V2Vw2K?>[.}Y#y \
p_-h~l9Ql#F%6	ݷB+i	}+WQ+ol)h-r@Nqڞ%9{>C0&(6xdlbb#fdVGpNV$h2AJimLpCьΰe	w⬌-x}3L|QF+$Ëd
還o1m	@!</a/JxxV1xJ8I%D&xY"JsTX$~"!y&~	S8}	^%2q!MSSb϶갮DQM`F6
1G'm^0!߂4MHh|l4>*`T1<v~Kٟ""8Y,e=BY\<ڍ}	'U*GmTD~O2.]tC9XP6ʿ_/qՋ
PB˨^#za856Hh}=Ltvz,1:!`M{g8Y#+q+< V-VßTsfFvd&e:dCDv6B8?G[G_-A
h=`Sν8pXFr:`SMNr\cj"9; !^65¿ZdY;0Op E ̔PzK%\;9vCq>+,yCSc Lu7Ffǻx>A'l7!	9g'YQ?
yVփl3=Mϳ50nicoEpVPPj#\g;pz:+=؄]7(	NEŀi*Q:V-؟.uqx~1ISf#ҌfaEXKx8WT֋xԎex`֛:v"*Q\=8@aP^BZZG
TvQ:W]h33gep;dn5\A{O܁&ӹ˸&P
7fj*+(YD^]ۗpl6-
7NAwSs?6\PK8}Ԗ  ?  PK    A             .   org/bouncycastle/asn1/ASN1SequenceParser.classPJ@lU~BxXzC@[_<BBܭփGO
af>>O pEXMb4)Smٲ	KjYVX*o2ydѶReǄo׎_6[/yسǪ@$p&L!gO1gPLH028  PKN   )  PK    A             %   org/bouncycastle/asn1/ASN1Set$1.class}J1qZ(^lbp7"Hq1XEXSIn\ >xjg$';)gRI{ΰQ4'2$pӁ'*Dܨ=2*ye{%"5<W,AAAA	Wpc¨plusۇW\d0m*GҠσUXw*C4|Rŉ6R
}^HD"T[ڀsAkPsRjPl\BE/PKJ%    PK    A             %   org/bouncycastle/asn1/ASN1Set$2.classRQOP.-++Dɀ[14C@d|يݽK{g/>h!Qnb$ܛwϹ?~~ uV?#PaX{VCx#Dn[{
oG	ÔD_H0]_E~z<iX4.1ˮ?b(ePߐþdTk*@F%R1Pٖҵ&`cN¤BނmaĿ$@}wCRnL9L:pqˁ<氘G	wYmQf0UG hJJBm
SgGJoG<ID:Ǽ/	iii~:]THz71A/9\7AU
ୟa;Ǌg$޻5Eu,<"䝢BkK`a(PK(nѥ1s7s~zo(cup|Bxkٔ,efPK t    PK    A             %   org/bouncycastle/asn1/ASN1Set$3.classSnA=BХPҪ/5&Mj`LԘ8,u݁蛿ᛟ	~1],odܙ{3xȠ+Y%3Ceu.`|tv侴}n췞--z>C+d9n	S2\=CnX8>|g\!%1jZQxi7!NuKOy='O-MH7ĳzD/9vɤRżE!<'ɷʕK6'9cEZ$B	^,e#]gZiBѰ9$4\s;<JI@!0Ia)䰕h!~vHI`t<u;ԜNi
ށ}_2;RxnIn9ؠb+`	HU 
؆3q7#m6ȧ(	zuwue303z@2|ȆF +$1CS?הpYG,T#w{#Z9QuDIMAIBAE,PqlPtfFs"3
3
P3Q`WPKuK  p  PK    A             #   org/bouncycastle/asn1/ASN1Set.classWUNvvgw2iҴKMYB7CSh5M#IX55/4u[ll؝@
>PTGABn
R|ϙͫ`>ɹ{ιN^{s ?ݨtCqʍUn\F+ݸڍ~	7XYKknl&U]a-ODZd@n,dɌn);B&0 gyRh}9Ѡ wK2SF W=qIXw_XW;Fu՘jD_Tf+mLCI5gF5oill̈:v0z/YQ'&4}D̘mj:'*Dõ`fVBPFF&	N1fCL*-ZqRבsFv2ihdj*miMfg3C6SvZe!R;i5GjkxJ(k"E<-eZ$S,Q˩hѣk<vaТ`=:Hթ\%7a\"ehYJH[T7v0M.U}>І3Ft[vt8gۊ[5ƨbKܗIQHsvԔ Y)F6O#Zzo,
*)XFm	/e]e5eS)#u;i4*I\VieMEl҈:ͩCo`i$.SxJ7OqrMz[4irMg[̥6d
9WP̹FfAv$X%Ӫp(ғ=s^,(\栄upmKxHhSBJh.Cb'> j2=p^ϸc1h^0[jdnUk'7ɯyh+"4YXhZzu,Vd
+1өmQ5R1++)	BrPs·֗	 C9k)..;Ʋ<zcsh
2+|ݰZ{f6^ylld!uX~e;AOR-Sauٷ\J!;%|8_F&L|UPA&^T+hJ;P`3Wγ&L(6
LL*#
CA>&!UЅ)
>d=>|biVp(
2>!ܯZ2d&_@Ã25{2x\ 1ĳ+2a&`$2LJbr1&ߗqa&O0Lbe&Ǚ|L%CWe;28!c09Y|J~1GeH%a=hS׵ jCk*nD?Wx)8G(rNi h+h'
ː>$A_tE,aSNGpdw`~MLZw?<
yKsb8% 97"FrJ1PAYo9tB[ay?*KXD\6*H#3838s>d;4u-DF4^|),}	G$@u7U K_K]GUƮj+XmP$<jp\JO%NAvoî Q@/1Qeol!mL?n{xa{9?}tx"/Bbx&Eu=dr*.cW7۫AAc([Ũi1bYlT)1UdεsmOIg;զۉ>=0i8f5yf0 Nڐw
0KH\
 j6Fb-_m,4ᢻֽ;$a4~_ n)j4oyX?5;[vN;pI7*.Ru4mk%Y=m>*֚ 1@b&idQ!-@ME][W'XMF>Fgx7Gt6go{yyhbԞ8\^W14Ә6K>ܥ'O<~n?f_KX"Vq	4M؄v*BR鉴eeZI_vGkxy5ʑk{;:QPWf/K]	WMѢNq+IvKXjg]vtUׄ:xjŹs+.E0K'%.[W⭻vF5@ZH"^ڹȹ8M9Nx
ask+bō^[X/7H1B4]A%BVfn	5TzgfgKj
ͮhsR=$E'כSq[=n6#s$oMO񹛝SmjIDh(0ÞYqzqYɬWi
QHSoD<_idc.3w/
*g8iZEU=OD\r?:+;Ӹ}1icu<PKxD
    PK    A             )   org/bouncycastle/asn1/ASN1SetParser.classPJ@/YZ|xX<C1O|[vW1փCxf:?pUJVUyzkW?L'f:uoFZ0Tr]?ѶUjyv<u{6a<wک 	$'CLpg?PJ0aYQ PK]   $  PK    A             ,   org/bouncycastle/asn1/ASN1StreamParser.classWyx%{F*[)`C,@^	iIWz$mZ2MjIJ6=?.tfw%KB2>͛{f͛~ 6ذʆ6<ۆfذφ;mpP[X;x6<wX%m1үӣAfCADO7QTbj|h4+E˯hd}Дaɧ&m]Ê9ή}{iQMP5ixLqՀ.(;7ljumlnX/t0{PlE3
f^OQz1%i 'Ii
)j@;护ےJqVao(wUEcސK\j|h@8{-pKǘFcj$SIJMw)-V3Z]򪁖PH	xC;jK+3@d@
R.Sy
#,(K}@8Oq IruSAJ%bu8h 7ƴ⍩m-;uq!:pt~sZ5qD@#
6.[ѵ#gBPWNƩXvd͆|A؜nryoSs]
VgOnj7'_-fGV	Hm[
G)l\Bh\whZ_r:wIgMfHfԥbGH<nB
P9jcYc6z<NBWxp*`	7ȴHG|pZ?(Zofjp.e(`zp]Wш~*`Pf4jxDueLu,H(y
S #b[EVDzn
"ZDhNsD\D<OFD,b"x"vSD</fzNK)`?
Ѻ<V&/%u='EWM[kٌ3|iZe$!B{M߸77}Y_=ÙX7a.@`:=4{@OH3r3KuywC/A<<9O%34}Ǣtx
%uX}XnM../d,EX"c2\(&e܁r؋
/bR	g2vnarJ2^.xx%Q{et12VF/^'^F'+-Ll>!vS
KJ=LNK8K8%2|Tg$#L>dJu~ɧ$(BE	 3yL"LbrǙ|'L0$ad	1)!&*f.L,Ƙh !ɇ$,|(.0Ӈΰq)5no+RG:{"Eo$-%da
N;:!OCW.g1	hQv78e?(p(Ҹĝ
0v^ewLl5bt#E:QL[gP,LބX$[IwF*CÆyi-	|
9VfwY2NqN}N{8JvYsZm+aw:${IxRfS5")bG%fNm(T6$TOu8O;'$⺑?[-کN	,kŞ6 &."[ce5ED@P$p.[FJLkYԊvF<d5+2rIЦ	$~~<,Mxir9MZ2g~2N&+uxĬQ<$AGfr_~IP&/9Ę
1Qf~MIbI<Ay&>YBc㿬Pn[p(熖p2BIG)31PJo>ӡԘHS#=Kcό؏ԯ/G_ ~UU1$a/
U"Ndo
ߚՕBSߘ&_年u/=AF rnJ`엇a_V%q4^+w_sinu
icN/gjngV,UZ1r6˝ntg ٭V3[-NQŜ 8g^BY,n{/þC$ݺަ+>ōM3
Ρ"
ϖ3מlYT,"|*%j0ߖl
FNcQ#gjPKVK>	    PK    A             &   org/bouncycastle/asn1/ASN1String.class;o>vFԒ̼tFĲDļt}FtҼ⒜T<C}`?C.v&vfF
Mv5#+00202 PK,	l      PK    A             +   org/bouncycastle/asn1/ASN1T61String$1.classMO@P*_`"VMD	©֔-$+GM0L6ϼ3 	TG>1A΍#E|(A6
{^?]_O{T
NFy>0w:\t8̓֙>Z"G;UfsWL}9Cov9l" @QR{g<8u;1Ǆ6ASnl
1d5đS"BÊE,/]k RI]%hFF,6,dqOXKS $U~+
S1sC*̤PK	K  @  PK    A             )   org/bouncycastle/asn1/ASN1T61String.classV[{e~It4CQM
mM.v7l6@=Y.CyPoG3_iμ7_za|@2J|y^ILxiaT$A+Y6HV#B6-6JPJhhaPsժfIP=J[m_wlϰ=2u鮡yƤkΛy[wfI(c]ܪ3
I鿛v)nM;^2l8\g>-PnYZrXe&7V*qz-4q)+SI>	Ga}s	+1sZen?NӲfŝˆvMKN:7etlo475,M
k.4ꖪT&PiH0'TMkp%qRzƩU<HMNf,:QU\Z :jk*wX6Qr+UX(ݭ<z;`7	y kzF7etHq@AH8$cXƓ2xJOKʯǩC:G9=B+ZyHj@b
}wdZ6N8[_;[U\r0NX'ݣ4B،nWCD.8E~tʎN=xLq1b/c,bTq/؎s*A*6;QTv*@II
NᲂQ
2xQpoxSA!)8K
͢⪂t/@c1bVh@?J}^<Psm2s+groxBsh.7jڅv1M/;	L	%B&GcJ/\B>8S9C?B>`c~p[T
UZjXXµߚmdNp F*HGx Ey99;ifŵaTgr	&Spa6N>l`
Ao}pJƃh{@B2HHy@-PP=JF?@l;6lǄ-t[>q>߿W0[1ERapjj ð	J%)ҳDaքo0yHrmmn?vf!H~EQrPa,#WLBD`	O2C%#*wEqK+? PKSB  2  PK    A             #   org/bouncycastle/asn1/ASN1Tag.class}OJ@m4Iӿ֟KK,xS q	-1d+N,M'q30~~} 8.6Nrabt#S`GB^h,cp
5]D^<B`FlJǐg2ϒQp~5Qeif8TOAGA&
:6pmW%irU
Z`!Wm;{@F7]SbOTvPK\    PK    A             ,   org/bouncycastle/asn1/ASN1TaggedObject.classX	x-yy}'N+eY\pBEEv8)PY8JdRHh!(g@qJRJښȆ$
}@:zֶ,GE3;s/?4ՆJmpjla
C6zyZX"zg0D>I}/M}`BWO[uMj.|noaBOjHцP$(Pojo~_8H	ZlssWdz$+CCZ_i%d=0YJ;n_d85@z0ATcZ FI5Ƶ6QF7Bxh-S֮Khw(
j~g<-pF=pE}d-[	o0EjG`q`SF~l	k(-ņ961S=ܑn)&~8da\;afǋy<aeGLAQдBR4E#[kK:)mj1aiEũFZz;[)tB=pG9JOM1 @lhE}5pV
"rE_8
ͱn)8QEt҉
1<Hznv;EZpTX"35N3$4NYXfΛ0Gc}D$/H'059nl\pNj
q!S9&T	V-˻h:VK@y3Eӣ%eA>lCKѨ)"=BI$y]h<vZڻ..v2%qm]jt3M"c
,A7BT90VsU3UzWƴ>>^,65BZC74x6wZ|gɷTUeJ@x_e7G$e褳PΤ?-MoVU"%Ddw$z}$N
E#%"Éhtwu7Ii&g!ݻ,,6$,P+)x+t(RAn=
(تu
RЫ`
^j(V)*W@/(MeWFgOMkbk(x 5/-c`jnxas=jpm0	m$o$RM4egNM].S@R
.&x~%3Hw^<Vz7	4wƜ3X!`&i|[(y=.s''uZo6&$	eJ6;`c:'S^0
9ٸ8L\3!ؔ/mq9ƙyIWqsi0+HM32msgBk>3a5P[PdWlgU4`(NRт2,\E;*TFfTybV
QqT"b#ːapD
|b58RqUc*V☊O|TŨ0xIHXq<ɺOℊ)X)}FX3:gU/½"/2qgǛ};Gv v܂YŏYv܊V|O.|,~mvZ,,g,~,~,,o,,,C>v_Yݎw;މ/,^b2svK;vϭw;S+M%D6D[?񟝻Pg<2.
6<	_KCk
0߈rNbjsϨ|R6ӃY
q)BZݧqlSwڷA۟jyjr9OZq^q\,Q	=[zDI%)*'B(Ng4N
5)lY TedS1-\N7ii2
b(CNJH5
_vd1N!X|>CS iKg$f.!,l{c.
&A	$p?8[)DIck<=)-OKFigyJ<I`VQqU
+Z*VrJ̤#m٬m!]U%HZbx3:DKH#Ze\k+2a	@VzVkGX(51lQZ$P	}$˃,׸\QcycnrF1(w)e25ӸMZQ{\ǅŽะqQ92JA吏nevtr} -}f>`-<zwԴPr'SH(V_zH?֝teǭc<Zz8E5֚qX,)C{2ǵʬ&}	wmtx9}%*= 8ЊvxM:eGQTdL2+GA8BՆuNmeczЧDikz֧aa$խ
]p.9eʘ6rL7앇k#l]9RnT͡*K8)ݧkt4ǘc":NOL#(`G%:S{}w[pQVp;HiM'Sc*i[i&Ym(tk$m]NZ_yE73Ip9AVkzNV
fӤM2eԻ|1V֒gQ5RtC*:O*gޤrXu_(OI·Vsє`yxŨ}<"'ҙv!jd"-WR4zOn
{
ws%Jj
cK)8eTf؁R`zu:dr9^#k2~mޭIQ9J;bhʐ~ޓGYTXb-A'ZtFx%[<0\2'$J^|ݻ|T],_/},OC`H;{yp-S7`894.NiDy2#
b5I-));S6cRk
,jGsx¤ME(42.6H3RE*gQ-:۰AE:A!
LaɿoL&V+G>S2lUxV PKN  1$  PK    A             2   org/bouncycastle/asn1/ASN1TaggedObjectParser.classRN@=#""\DqJ	I
LjIi:(c@
n{=w<?^ \ chvưl.R4kI3S
)">ΓGφM͑Ãȓ>еE8c6Sn_=M*{i;*\N-p|σ+.y9mL'
yOPM(=ǋbq:񼒎0U`V17Q0jhbت,pKա֞u<~_/Pտ*ohNjs0\Օmhhf{3LPK1-Q    PK    A             $   org/bouncycastle/asn1/ASN1Type.classmPMO@}Khk=㩔CC
c44~ m릀MA
?8-$nvf۷{<-Cx

dÄADzx7	]`0F!	?ePG1px3'i(\DmwB@e0/4yg5{$K!李2t%0
**04h03 /P>B!PFset$lҠm@s;XoȖ"<#_taihWEi=C_ KݬL2t9~PKZ+.    PK    A             )   org/bouncycastle/asn1/ASN1UTCTime$1.classN@ƿP*A# [ P#Zֺݒv5ƃCB&
dofv?>` QC.<"?0M{-ori3[2c^4.3i(jqvkݹLF7oR7*I"+.
I
Zܾtp̆KjUTr^iϝ"~f}e`@Yqt0cs@mk
Ca-!XmBl#<5h\Em&(8.IUTd=tun(~PK>]I  :  PK    A             '   org/bouncycastle/asn1/ASN1UTCTime.classW_0aY0+,P 1UQSIvSQMq;(;}$}?җֶƤim&YTZJE??mϙR({|Ϲ{^ 
+hUAFlVVЮ C6*OALQ)2$1Wr帄p}b*yUw2G٦*LcLxH?Ȥ
Jqhww/k+zvfReW"mZsĤzpx6
eWtpt`96TͶ&C~bԧ+I^t<T=gG&J"k9吮.ac͌
Jd4&YAԵ.73)aڭ՚2YVm%Y;ڣv6?}ϐg%sDBXRH9
4S3RL*ϲTjZyS2H?drzuvRM3?p=&Dl6i#[9:%ArQe'	L.dJ'GR5dk"LivFO&)Z"W֭TʒƇXƼT>C5%ЈqŪN65گ9G}{i뀙J\{E'xvyLMNxKڔS]ټI9'mtq'wqKO}樑3w(bC,Kk
7Gb/$0{$-ȗӣ3SZ)GZ@ܹ:`mmX_5šKztu.?Q:'(5NwU'[솺[U7334Lۗrmmt\N1$cXƈ2zd8$㰌7qDeIƛ%RSB{Mؕ;D%?!lc81oL9bHnZZcFXyw#L7g8˥xm(r% 4mGK3Q.D%^:mme`K;SeIqKn-&s?Ha|kS$p':5m"xXЃ
ШhҰk0Ьa-Y4;xN
;.
},Yedy{4$^
;>
ނG5LWcv1
x!|1ϪxU.,N<3,b
Y<Y
Y<99|ME_d%lX<,*NI'q,+*YT_g8DEzȨ_h,h12l3hY{Si2MoWkC WUk)H+B%a#/A)(HsܹHGͨ4O2ѾYXCflSc^|?wkI)UPD[$A1lIzEM1k쿹߳wO5f?̣$$$2GWpB86D)E+QZV;\wwQ`wsBu17u!7I?tP~Esi>O
WK%Kqw.\yH{sӆd(g!0_BMb[qzJ6i.&Q QQx٫跒8tDZ-y~U^zqyWx4Yw 
F^֜ZQh ]s(biG;v0Y4
N<ᖠzۋ;%_$:jVW`Y
CvAZ$%ZB
즾\s
i/,&S9۸@(.?PO7Jo+P AKoZ\o~ky|Wqt+ϣ2paawc`F_7J{
캹1[]Mkі`#
٥]t	NďiT.?nWl _Az
<U"Tk?^99EWvVp>"93rn'B`,~ߎϩD_PKw1    PK    A             ,   org/bouncycastle/asn1/ASN1UTF8String$1.classQKAZ릕:HzXFf hEZO:mLU]*:GEQoc}7	;1Щ,3	A
#UzL%݇Ae}£ҕT
|z]ݡSl.7s\>|V6԰AאPGgX=;B-AT
EF	g{c@D2EZ:V~tղw@(&AsNT`IEEd)l.Djr/DS@V%^z;S1JWJ]PKvG  C  PK    A             *   org/bouncycastle/asn1/ASN1UTF8String.classV_W67,G	(x%^*!F[ZZXӆ`o˲e7n6*`gۗ>􏪝]!93ߙ9'_ 8c᠌'/zrZB$9ͦhr:ǣL,IɲY_fL
hqf"@&F$%j[T}zE5%(j:eD3mK'f[ndj]u	ǘ7\97fϒ+CUvyoVѝ
v(nVHЊ+=]pAQ(*/oh͐OUfw-"QB'ǯ)MdS	BڤWܐw^4j&왫A{U1Ln|䖦\ö([Tb&໵ni[sNN2O)o qul0guG~)ff슥-hj56389v˂:cҹ
EW盆khXE^5!V+h)G7nfk<*j*'1^MUv1\ޖ2eH藑qHa8"	O8&)OKo0{$kgcߑmBgX
ZίLPkE:l½w/쬵Sdu ?MF>V:1ו8/){Bx?|b
t] ؋	<E[Y`<؇1,hø؍s`R:@/.	q+
04cV ^e1R0X`a̰(*8]ga()8`,"JA,KwtjFR^oF:sh܂$0Ei-"ER#=E$=>OtXđؘ_eN-fTB
*n-[7DT7(%0KٕqRmdq81gwW>PCݩeP]JI޹WÈ 3F0%YB؏C$33ܧۇCrX?zdBBUboQ1	S Dn&û"NBwqA4|k8CޚBwbSxK>^	r-w!?w}ف6鞸`Xo'v\Ōx)8;z|9FL0^qf#K#{AZG}PK
'v    PK    A             1   org/bouncycastle/asn1/ASN1UniversalString$1.classN1OFP3Ø 5nXա5CL+	o5.| Xb4QMno|6	RoꀠE*v!W|Q8lGv:S	#߽
7Ts5w\$
z*'Vj;s瓑;y:ZH0ddhv疎P̀JYo;o8t?szۺ	-$Q0ahE,Ok=q% ڷM8 B(Il#E35+jӤnu	L#PS>bzLzij*7~ PKK<;F  R  PK    A             /   org/bouncycastle/asn1/ASN1UniversalString.classV[wUtrK"i ʽm)Mh)*L!
2 ՊxE_A^x)
R3ӴֵZ>{gfI~yC k|J%0T.bx/1KＡ.[+z
)ϱґG_]26ֹؑhoPGS"Zn[39-#@[HLɞnX*Off/mϑX7;Bc\s;_hSZo.X{u#e
M3kVt+F4#$)3~MSޘ(-ENաRti:K;'L)]1iFeDVNFUp,L8x_6hW2)-S>'ʴ15sZ4ښ.$~+56[	$	m̉Tor}T&	R%*\:ӣdT;3ImQ~5vGյnfV[q_toVwrfxf
rbhqnkkc=ȴӨ9+3Niʎ(?o-}b%,IBHU6	%쐰Sn	u@ovUMj2rMSڗТt]-|wXpq-Ӷ۾ևf+i
o*U6/)B'6<qt}ĝ[yѩ#sLz'X^,QP#
ARR*)h<Q
,O(o;WagXNKqLA%Qaųlx^:P'J !#	2q2ΐb0,AOC/CZF3De1ъ6\`xEx00"wMa-;ji3-Z_2*-PaCJݵIb}ND?Cqo|xH>>\]c06E7+`>bQ(7DK&[=q9'Q-=귀/('R1!
;gy)U9+ߟ5CaJQCOnBC#dpRY1G(9	$(rK>b./
q^=?{rWZ"*Xty70{z#5B͹]HEǄ?
	z:uG5u1/r>O:+s\Fk[
ŵ-.q/e]=5YY~v'`Zoجai?3v~9ux=xZd[=Jǖ󱓎A<WHY}'Q|,-r%4_cv|3[U8KǼǥ(	:{k\:o}`6VBt#	g<j1O_D5!QY5@Tx..o£n'D&buK<!OO6BINSw;	eTm TF2u?<\=\ cPK);    PK    A             -   org/bouncycastle/asn1/ASN1UniversalType.classySF!-GpJp8M8
$uBru>JE:ӚLI][xzϾjof_D0U!#HAM˱-R;CϺb6+t̼eeAq&< s$#9wP-$R^t[G=+RȰ2r+3[ALrKQ
dZe4zdUUԆ5ec1^rkK&/	uլ6s)%gۼ켠ZD7)	MS^xST,=GӮWL<2)w6OZ̯.dabL8QVhNHm	ҵp+0*?,qY:f6wA;[3硥	i[@䍘!*FTLŘq*&U\V1TT,1hϙ7d1wg9w^K:#eZ9K}O3 4Ad=i#45w7gLN'~hvy$Thcޤwڕ|hAmrw6hFh;O&s|#WA|#t\Mס]47:zp[.##"{fq_%
qܕMN6+x!e
ױa?k4wUC

Y@G8_aMkp9.^9T+ЗHy"4O_WTYq0YEOt$_`vc<UMؤ^O.!(=tq!Ԥ%W7~:QLTF$3Lwt%oSŋ5?L2-_pl2^	HT1#7s݉i?P?MJF}PKC4q  n  PK    A             .   org/bouncycastle/asn1/ASN1UniversalTypes.class;SQߕDI@4FQAnK$(Z-c\9a?3h!bhaqHuwy͙f?y@j(4YNk(g#4!9c$
;&=jN9l*kKQI02v00N#ʱ{RTK*JJR<3bgc([Tұ1iT7iݒqݚ:FezX@U	J&W<3M:ɫRœk{>,3cUťkdKTRyX0%1˜2i(kAN]!"ofm5{]	zد>#.]G{=DԦҜz=d̸FcV\\,71+c	2r!P!P)P%QZF`fZ:-[	l!S`nz={|qyW
*шJ4Y-VVjgu:YXYVuufNN
ءT:&Ƅֹi^cC蜡Pֱ/r
omX?͍$G&!x>>#篙*xK#OgF|
Wp8KL!b@NLa"q$1FDbDQ̲J߸SR PK    PK    A             $   org/bouncycastle/asn1/ASN1Util.classWtW]FȖ$xزH,DDZVde^
ȱbHŴK(
E%8TCB	NB={3f̲蜹3Ճ~ 7X
7*ݨrڍnԸQFnsz	#wmn۲yG3c[f	^M	yf4Lt+n񾱣jP
*hLL$"ɯ㰄F>	ō~#
k$v:}	`ȠS$vT$kA(
%y6ᝉxpPj'T&ɡ{@gI~U_x֟z.oM7 ELMqGpB
E56pi#]%ևuF(LC[Cqu:P*iHHYVWMF32HMOR49٬j=]Vh\SAK_ddMd_6H:T*c$ Ǚ1uZx5h9tlB.5GJk8>Tp,*
}4DCHD
)̤ՒH2HI#@S]3Ѐ6MM{&Tbӡ1cA%EV%9ت'֐nG	͹8wiaj)fue>h߱ͮg3-fէXl֑`*v[bbbPh'؝kQt]6&TMSC.dӉo}kM]FtM8.\څvv³\5.\B'M=t'dvkf?!s?vBiȽcXD%fS>
YU ?keL>iܬW)gS\kҶ3vڮlv\0mEZ+K[
4κ1_᜕GV}?䫝tOݑÖY.k^ wtٛS!YGy^eJC6ݜG`އeC`p.]c,;˹e	-q65X)X%cVx.T[qDv:!
e<Ge1M؄I>De &S2xnI'fXfCqB |{^&S,B7044;"0l~=ïgKdah0F,rhge75`8pdx-;<Pp;=1p']o`x#Ûy0W1ocx;dxû^1dCfGe>IyE%3|ApÝw1ofxظ*cPF*Se/ZO@>"'DbW'q%Nj%8]G,ʭL"(NLY	K ؃"ӽWS;a{M"-Eq`<.3*
ǪMX]B~/oHv'堃4X%Eto簕J^F ]nqޡK+'}5KkĿ$PV/ů9rh>}weqpp.P?Hhğqtq7dVOIS%|0.04X#,!sDp-kmzk麒t5 ]MEssDPnE_%vEEv+dE2F\!ϊ\6t\:QSiƂ͙R'd(K7ԨOua),x7?ġϙ#(I(D,bKs
J;ˣ0C(B[nhvSJiJS?2s'&ŗtVRrƩjPyI	X]ʨZ
͡j2/0#I,RM@%[MWMfX*'ZT[_=VZCB1%YcJ/,a>d"G,-0'LiGe6Hƺr>K0HYA.Y=~Nحof(kLEnq>\+$r|3&Ȫ{~cf$OmA]ny	(Y̤Zܓ=9/?eY$]R]8{CȚ`tI9m6spܡ
I
z{ PKzd:+    PK    A             0   org/bouncycastle/asn1/ASN1VideotexString$1.classJAƿQsuݴRG]
-BwF慠Yx6$VuSECE*Q3g~wf||86A,jCƙ<"8%=؀I64C9L8OT9JAusgBzԲXǝWt lr<T*s>e}KБ.AiQP!(
4.;NA
q
zٺGܵ-DY웽Zh*AۜC^{UK "H"Cǚ:~ 3
xPm*o>C.D$46.LjrOF+3 D(?cǙfHԺRW1~PKpL  O  PK    A             .   org/bouncycastle/asn1/ASN1VideotexString.classUYWVMdf	R06CK@I1ĭY&0"2ni/оt1i9'm_tFa+=:7s诿}߄B)WNrV@09a="sIFUFi$1,{DRF9B}O>_	NΌpC\N3byD5,S#jf:dUmMqq[ꎾBcZyʠe:eli8KwD4۶nF2TXlrl[Y?h(y;*3Yu&LWEh7oa4JU5.	&o-)A60bDeMu۰(	JƆWU-I]rbf>wdMy3
ؙBZ]
@c.
'J&dA74[$歂J1/hb`b2oP]
N}єʶ@`v;L+ZEFNE˿4vT
ܝuFݐgw{|DkWB;Zis)"&".K%E$D\-Y="t^uH֦coƧpfzB|VGvH%.t->?(~c$];ɦs9??0pڕW	˨2¨qU2Bюj͐Q#eE_GdǨY1&eMh6ܒnU!Ys^&!#U6E%JbkXfaJ	7HH=ﳘ:NL[ \tij{v4zp5x
A0*pA0wT!} a?!@`< =S'q,[6M8B+"PDao
2Ǌ+Qu,I5qPYl<s>I1go)CThŽQ	ZuR>0ãҁ'GW 	wB H@c(L4>"Z}ČK-ncNMx5]r5İ"V/L}o3W{[T6x9G8NUTNfrytp/WphNtndSJB~jp}>n?3:8PKi  
  PK    A             /   org/bouncycastle/asn1/ASN1VisibleString$1.class]KAQkuݴR.vX A+j]mbI_ME~T4%8s9Ϸw G!HVJ|8'Y7!0Fp`3)WR)г{wǮ#OmG}>/pEC:0z>mːqZ,	g)aY!!2ȱ}{vw4٭ZkWZ?y[X1C@Y:uӱ5]smQy	4{0Tbg@n9%WQ;( %:*NRgl8ي:2_PKH  L  PK    A             -   org/bouncycastle/asn1/ASN1VisibleString.classV[WW$N	((%^*!FZ{SLkTma0'lm}?}A{	eۗ>G=3$kugo9߿> p߄ƀ'b^t`lRi΄bE/Hm<2iΈPjGTC7u$eG|'O4SbQ3g	ZjY1HJv-Q^LG3
8ڤ/~4Sfi1,9vYu4fYpYjmQ݌4'C3SՎEieZH-:ڨm+6DkGe&7R(p:[ir_L$@f&o)&)1wKahňZ34c^$u+HP[&F
,$};j:Z44j$u(RM4쪅ʺ1Xv!9cMuQUJ%&GƇ]EuhcD)YMYش\]D7F
<1IEbڦȋzI'5<8Ϥϯ)ڷXvt#v#}=l>FǪogZ];ZOEt1$ⰈE$E1,	GE<%iϐ -z06]ӕ팭fcG(WL_O*
6^߃Km ^jSfk@]r[+{_toȺl	?mf?E')rG؅ʈ $ce$ZdtAD.c/브q16Lx/؃2E2vUxf%DA)Nc^(4	)FgcI87ټ%!͉`)*Q9	gqYBa3+%\ac`tq? RAΘfL)GQS9h4<&f迄Ec4e$p+',!-_lK&G*xί _ƍi`q~6Q8^
%)S$PK/'^%nsy
n৙>F(bGuQeOǧ?þWqhta}Kz{>c<4+ ψ <>	_{'O3#}D4K n`#w\/~W@UL7(it/'"=]O/7HNI_no
93\ܩjL9i=:a"JrEH+e|tǴ!cz	O
;e{_%t PK  J  PK    A             (   org/bouncycastle/asn1/BERBitString.classU]Sg~de.6&A)]kI65fI
,{ƖQn{߫Xy7K+̞sysa)<hu|{+2 D5۝ddUO3=7´qƙ+듉cKSSɱM8mTJF/[#ޑ5ifnW/Lqi'S4-ôdcb
3S|\,[ed94U|ٔa(qT )gX
CMgcMGmoA7sd`p)@+eX-`Tc4ȝ
筲=y8^ҳYrp8쉲+ԐF/[Kˌ\/m;;j$1QYTF.9ֻl5R"ldyB<?*" "("$∈GEI2[b}7?۠ݑPFˈW$v'/}`{9=	9#Uid..JAhq>
Ze/	px
n&Dx؀D#21?a21D\Fޕэ20Eya¶F%%	QLK4zĘ>\`}&HǸDa	&.2b2HxI&&lD/V7_}5[Jt5MZz֘4
:~<u -Phe"5+&}mÅF?[g~4;xfx~=Bv1ATE`Eӏ89ڰC~זMojІ	~B~a+=n^qM	1yO`'Tcc~/$WQ6SxC$?!s9㞳;CMW	~gIxfQXᢪ xT
|r1qp;1jAl W4:!>lz0 m@:4eiiv'ȫjv
	;5TM,aZXj`ӯv (:>mÜߠ 
kՕs?ȟeh:NRE._0DSE"p_ 3B}:G\èZ{
+ve"d`H`&/Peh!i$=%'qhh<Ug
~ZD_U*hXn3SGl9y͇ס;И^Gf
겞C㶋<:J1R&܊{`khB6!)mZX܇P{qJDcqPKZjm  
  PK    A             .   org/bouncycastle/asn1/BERBitStringParser.classT]OA=-*[ZPZ>b>i;eNQHK$wζF(f{̹? ZCo1>ē20\N|͈]̸Ζ̢4k0iAd>WBA8Y#'deY]No$,bZ,g8ī
CQۍ6hdy}uxgid3("ʋdtnui+X!dC^SwDJmy\v^Uڵ:;S+ٛ(nUN
].jpICz51]Od8RVQMMǥGP8u{PGC=.m#	=(!#gHBgFWQqG..7x>y_ٕ76A2ahC20`9DT`@nY0&c u\ǔy̌OtN<1{L븉y7KU;ZtߖiowvѦb9+y-v~UE^XSuI
ПodʑF6S4E^VsVdP?D"
3HxFcub
^쎏]'@zv6EQ
҆2jj5FDl/]%l-A>ݨUƋ>}Wfe,DxFC
} V$+4oKh
>׎PYR=^$dlC+x,*+FPK    PK    A             &   org/bouncycastle/asn1/BERFactory.classRJQ]KtQ̴fDeM)!,)$}Ti=]3ދ:{͜`Iwrn%R2CRۻa;02kUQӬ
8;)*8n;caRiήE2/M^s*B5kA_f˴KXybUx{%!ё(
yj+@UЭ@S0iw,6'LnۖNZ~0,È>DUcTEP T$
a]S:<99qэt!"G)=Bʌ7UGr`NhSHx!v`7`}D:I/:!rFIUS7PKh
  l  PK    A             (   org/bouncycastle/asn1/BERGenerator.classuRn@=
&ऐw4V@	RH"4rKmd&T_m#FOwɣ"|̽=3_RA/UŞ:#3*}ɺӭuNÑ{=X]־`AK4f[BӃdMd{?qA!:\q-빍
ޕmac
W\z>Cae(z;R)Wqx'xS,7>aX.J&gԙfUG&M51{Uae
*)XUp?y%Mt1&m8qu]oy?i}t""od8FH
P#Ik[6ԣDPIUY!Vn¨a9I3
-*Swl*NOZV.U W.7xFTZ._de	Αɦ_r!+E`zDX7~yx5ڒjLfu
эPK %    PK    A             *   org/bouncycastle/asn1/BEROctetString.classTRG=͌4<Q 91'X2a4qĈ;*MJXH@R|@x}R~h$eSR՜{O֯~E!'cz|·bu&u1˶qtL~9ɦg=tv>gyn*kZd-eʕjy.lS2FNLf
䜊e2J.7f0mJKv\4Tٮ:-J-24cŌi9wKTqHX>`n:Vfhq%^Kd
vmWsabC[`;lnqiP7'ӷS-䪹ƛ6,VˡƵV/źk#`7 <,!,ᬄs%05h5|=8_zi2pW*^Xͭ3Ψ,eˡ
-2Cw '~AH4]ސv\q2Z1D?>"pp.0"B*Q!8sT\0A&S;mv_a;Fiơ7GO9fX-$+Ny 5}tݓMvD$jm,ͬ}=?Ʈ*<ƣGT(VRO/,|5_C|ڕH)!@z&_B`otBPE=cX<a%Tv\2J(]T)11y3v[1H$ۦjȨpS>Czk`ףl7GܷZ I;)>K^*܉k;JA4DE"r<7^La{
\I)O
:{y2Hdۑ> }\ᒦcVk7z*[4n1_PkғDۄ+;*ޑ/
PKXV	    PK    A             J   org/bouncycastle/asn1/BEROctetStringGenerator$BufferedBEROctetStream.classSNQNҺhZE)RZ`BQ
4!&,S(]Uy/1$Is ^ə7?;!A3STA(5/H+<R(+0䲴R-R3U_ N$xknYCȪ8'n[NRlYahZ7_F1
3,%ͪ?`IbګszwXqe_F~sYWrWK%_454jke/Oz})]TqNELyT4hV3L6acz:ISgҟC36x{dԫu1/UMYY?\8"iPE\Ѐ0
g$
Hj8A]BH=Qa J.}Q\AW+A_(rc
656^1=klkN~g}z>mnΙ+v*WYџ8e$ݑa(	={LM.n~r;H@"1q=|t\zw]P!YE+"^]mGIp_I{%SSP24([̅z=♸LMPbe		QN0!zhY^פ+TPBsC\^ezxY^QB~~Q*jMNߝ}C$HsuHw\31Lj#LR
~PKoa	    PK    A             3   org/bouncycastle/asn1/BEROctetStringGenerator.classJ@icScK.]	BwAPUL%RI&^J7- >O!	V0rf>_? ԰ΠsԮ:baŉ-Ȅ.g-uogNm~'ey텮d[q
qpz][cup?_ny{$My{ĭ6U(*&TTEcxuE<XRFKU#l8k::בӑ@F$r+Aì4s0#ͼB܁(MK=+x
*A>
J
Iz:B%Wc%VɈ%)Juyeb\FdeF2V'}#Z2?Fޠ_I̚42?PKȠty    PK    A             0   org/bouncycastle/asn1/BEROctetStringParser.classTkOA=S[! PY
PIკXv_a-~Gl[(t9GϏ ֏.`h+xW{e[raVKFfƱ+-;g+)3}"],ڇw%
^(;П2nEF2d"	>le%!?Qˉ6fyn
%UϪENΜdxQEhlB#J
B&ӭNs[˰uǦ2T 
$X
Q>z]v=r#KZK&C

^
}5haPH'=+dt#h0<o](3!O :37^5u̒?
kGȵ%^vU@}Ĉ=d:y:/<Ki<9+q@'|j0pz0c`T-~<PY20p cQ-DuLb^'܂Zc&2t;Ybr۠li}hQ1v$zw%|=U% nק.f4Bvzw,}PLܯcA'b*
^QTzPtS(BU
EcASNcBՔpk*&RU*x1X2#h;I"yCnF7v=nɔ'T!VY5*PKe]V    PK    A             +   org/bouncycastle/asn1/BEROutputStream.class;o>.F6̼;FtҼ⒜T<C}`?CҒҒ\FU
\ձ303032Hjd%%g#K[k0 mb`a`gd`qOIeP``rAـb`B6-* PK2      PK    A             '   org/bouncycastle/asn1/BERSequence.class]S@ߵ@("
ZD@!m'
V/ꍡd0
		oq379ihhc=Ͼ{/ &P{Q4lKN?:rj)WEc])cO]OEgX\1'Zsմ:M6yh4,,rֱץ[*JsiƒyZ2ٿݕ#Ssv=1)IerEsMZ-0@`@}*Wk%^4VC]kՒsOg%J>4]MYp](@]^,;_Jӵi[+#UQ5^e-
U:'f/\K9X&@UЦ@SЮCNt*-0C7U
2H\Y522mgzCch-4nv8^xG~ëZ@(I1sC	Q

vhhkt
VMͨ=8)Ӱ5`8Ui8f4l.I8*0Ҵ3lα沊!L!Y.yz%MݞF霱v"A_gE}uz-)QF[ݻ9,z?HqK ['Q7'ާCy*2+}ѷNϠz:mnڣ{o\*IƢ;c_8-u7pTa?o+C
*#O
FĝoԍX*_'|ha˸c PKbq75  D  PK    A             0   org/bouncycastle/asn1/BERSequenceGenerator.classN@ǄC8ǾpzGԢ"!H7hcQ屐C&V(,zVOpv!cWFڡL&!ǃZ>~C6à|oxoJR-ŕ
eİ*s.ȿyS5ǛіvUR^oW8UxCJokxOD"JN_&]<;P	QPxDl`@΀i ob<xjDT,6Ì;uOr}'kڴKMmQX:a,1i&)Cas&D,t6BX٥`0'eJ,JMOk6ڜC+CHt!_p{Sdە;
lXiab*rn_xVm9-lPKE\  _  PK    A             -   org/bouncycastle/asn1/BERSequenceParser.classkOA)m@+UaЛ	b?Bi'3N6ٺ%0Qj$(㙖Rµ3ϼs杝~Wc|!ڑNA~ |I[7Es#ALUCjrKCǓs˥m[y(SCb|lxi}x,E_9|[H2d/ej) -1CuzʭSElN	]!AӐ0ApEN}a;2SAGڔɝΪ~vYZ^7\A
-xQ'K9򎤋#t|f
DpSE\mw
D1g`q\}x#G:RxcՑFN'$^Tst;٭;CJM]>UyLjU3]Qf4.(~z
(FfMsG<45YO<=N_{*Rk'Xګ MXӈRjK`ez	Z7hIIEyנ9PKt>>    PK    A             "   org/bouncycastle/asn1/BERSet.classOAǿn;mR`[Qn+kh"BTC*Leviw	^x114zl+4e'yfyͯ? a@ѳ;^͖K/^fz`[m^gvʓBѵ=k	"m1qF9{ekk2,m۬%X@r>C=m9
;"\|8AlQ/'_ĻÙ_JeE"F1JQ	t=fsRWY"U	Z1xz޺T
hHf,MZD1&C1L4פ.
iF1e;+ܲ> "NA~DV!ZA&|]g$FDFIK9;XK H廸~b	rX>
e莚V?c^v2q^(=Ra?_n;5#J-6dUBCnVz\z #"+jPKbrW(    PK    A             (   org/bouncycastle/asn1/BERSetParser.classSkoA=C>PZ}bb+5&UI4̰Lp+iU-&e@!m!l2wΜ{
`
/FҙC:@U!v@ؒA'dS
?Y_lѐ2LhUez~*{恬	n(nvV{B8%}]Rctш
!$mڔ(T##!AӐ0ApE*tV4|as)*p~z-QCjKȻW p̖5yW9IgtE=GzTwK!f`
DpU601]70QI,¼$2:z-HaI'JZL;9CW:uQrm'yl(i7i̒h>hEԝъ!k(W7X6?0eNGe3&Ȟ:OiE	E~/Eq[W	S	N'&V"QJyNq,.Z.v,)q><j"w`OBYKrPKV>    PK    A             +   org/bouncycastle/asn1/BERTaggedObject.classrDƿVV*O@Қ&cP\J`hL} ۪Qp-c˥傗p_7\ơtH{:	C<gO9:Z?
`%J夜-2bVى+~
^ՠ	6f'lwW>\myz=j56NG{_Nk}k~0 ݬdbQk~Ф:ʮ@2h׳۬Ru;a˺zzigJ*[9*vV7,m}0vvwzݫ+^*SZCfNeNzͷJoNWo{[f循4	f??Lz

4k8yrg,Oz
8eZب͛5*.˗_R#˳1}#;[8j
f-,3xi!
ġŒbImmM!,,,xX>ѱY>fL\fɳ\qt3XHr3:AAt)t?n$]AVIo$i[O#aB%""GHL"Ij@,ɉHCpNcW5|lD# c13M>T~r߉嚈Zb"rQ,[Zr2CWriBM6>'My 	
BZP5$E4]В$6]=ȽGk1
spJkr)CDO^Nr%}LC^_dlM[a$O0ͧ*g`%*/%D]xo}7 KLϑG|΀}	PKb\  N  PK    A             1   org/bouncycastle/asn1/BERTaggedObjectParser.classT[OA
e"v)`
*V%&BvS..HI$wm M̙9w7gϏ &VJINu=Ssi
ԍQp
Wq5gi[d斑qigp34bjVk~/yr}ޡN-'H-%3Ǝkږ+(U$x9#J+ۅ\b޵23qFB8xbveq|cZSn^q^;0r>+)oec=nɛ`/i)ڮPq5`)}\I7K(/Z][v`n.UѮCE.*zuvJAXJU
v^mNZ;+6e۾$tH_4bȬƎ=6]+S QA{q
}p#im
a$8::6lяAĽ  A<dl	<͆$Xм̇ʗB2bΨE%Ӄbr&47 UZ 5Y<rx#}
&=.3~jxn%-^8F8bv>}@-15-3$|RH54I=R%!r=(QkibrħFRÒV;mU(])QyR|sLjEe'ip~W2F>Cc^\27I+"wYE<,xuJl>ZN[Dqt%5g"^O06\1d eT%
PK<aB    PK    A             #   org/bouncycastle/asn1/BERTags.classeN@1	IHBӝ6Jw{b:q)+ PPgT=UJ~?=ygc!ĺdL|ٲqMsՠt]i790YZچ(BZcV -UQ!!kUyƎ[e,m[q`qEUX3]CV\өa}GzC̸^p3y:>C:2yWweStl˚@awLx7?XB.c?{WpfٕgPjgẆŦe+IE35Iܿد"Q)YֹOJCޮ6U"k ygp䅒@_3uHW:߿-ꪦk_F
1{ttq<zhOJVsTnCIP^Jd(},%GS)J2HSF(18e2ILSf(9<eHY,SV(۔oi$-J.vٮ7/OR8*&ER
Ck5xd^F7qMxgނg_9Wp5
<g~/"6tˣ&<\-xن%ȼ?fV .|مU8w}8}{s1[c~
^a-O3~oPK
  J  PK    A             0   org/bouncycastle/asn1/ConstructedBitStream.classTSe=%KJ+.`D[U@ԴESP5\k6eKK?q	S;/'9{y1T3}v}?yl	O^	>v$  6Nrٲu\[/	Q(W\pɺP,m+'JbP2Y*Y6E/X%s20=C \z7ӛfu5odT4+$L檵fyŠyǌxbmy;k܂cwzR]sM;OyTbKxOwoZ:tu۪i7;ΑC`)"{/K7+t|!:ݘZlg)Zg5h3N\rlb[wQ"EZܢݺN@j߶x1">U۵VnVA/xQƐa-yvbg	eGORǴoEKy6[>_I$x:46E`No_8eN>6T']ΝLyWq
!*TYtcBCs x [A}Tя):^@\E^U1i/5>gqQ̰xEoe1`K
-X`Q,x,>Pp)[YӍq,k_rrSRrtNLT{>4m4i:>'k~ҧ}|hH5\65$X
F+?5!2~Db
^$Uc$K.oϠ5cs@
IĨXD5)WG3-~M[3&
Mk6xf*I}'_z${8ĸ0hO;
&5?cHCD^6cqXt[mcܥu|`+;#l<>R}O]u\/A1vMxaq$+t=gu\kT!L:oPK4߅    PK    A             2   org/bouncycastle/asn1/ConstructedOctetStream.classTOPn׮P)
cE'(Q@)?LPV`K)>_|AQ<h܎!`hsnιw' ~_'[rX2ɿ+0;s㘖;:fgK	s9ɛ\δ<C
egRYӲh<4;XN97c[Q+WbۼhְXcL6vB|.X)#f͸⣳}VNYAUDE+TvF	Um+:*ޤX$GMR_4SĀkg(XKȊ\$53=(I{e4hAܦ_	4-ڳCʌxo_)oSLZtknbB-Der&j*ed%WW_:RAP!GVQNm8'hE
*pArsLA
q87'(Sܜ欂8P@=:paytr5RKSF:"N?9k	\I
y^	Q0\QFb*c*ƕ4PLilC!7'Ġ}xV19^{aMLq~@ҤhDM7 jb%kb?_c+kH|2T|*DS	+ F~P`F]Z
-O,kڤeRQW"
^@
yu(UJS<z%45R?,nzTV3/^ÅfV8PXk\]B_:kPK4@  ,  PK    A             (   org/bouncycastle/asn1/DERBMPString.class;o>FVh'00l22KK+KrR|K2rq
+bg`ag`edJ,KIKׇHYk0030&	"@7#s~J*";@ u@b`B6-|j 䙰BPK6     PK    A             (   org/bouncycastle/asn1/DERBitString.class[S@KRRB
EH^
b)F!aʂo/>3~(&-B\ݳ/; ^3ȠG9k%@=2~.-t0JڪҘp=OQ͙<C-w<Fp@+e+0}oWK)3Ăr*	C㪿R_U׫PΊs/C9u2''U|,)0ѸLN9W8=O
;iQrV{'j%{%{/;i{M_[3JjhB2mo[:݄[t앦e
*{K:ǴvR\zt
5ynW5j8ሆi8CY=]J:(w4ѰFnd2M%7&WQ٦=g]j` 86CЅhј6pcNa
#8#BL
1%5)dtY!&tf\BL#K0-?OU[v٬zOxbhCphr׿ad(h!%S|jH`ӻ@/ E.}aX~RP`!֕L}C7m+dx>@8e
-0֋h%JT^A#/e?_OI:U'ϴ/^hָR2	CGG&n}-XyD5hfo5ݫ?7.(O$T}C7- PKI*    PK    A             '   org/bouncycastle/asn1/DERExternal.classT[OQN[,f+/\TE)EU	&v=4e["?F`bGMFJmm3s3gf?`)O8I3xpXu#S4x[fV0zu4Œ(dmcױlNݰEY[®ZIXahSsme:t
CĲsU4Y^p"T|aԲ3y&ypn,U1c;kiyi.g˄n.grB٦1;N5TEQ)PSЩKA@jxإRU UIjENoԩkƖQ6ՕxpYGrɦɓMŭLJa,i2PCi#2d3<yxdt&2oBgب5_ҝRЎZqMT	.0
Րa
Q	!
^UXB
}JI0!aRq	7U0-aF=q[%AUя[*0E/EKZ3׊T6
ɂiZw,+}7/ Q GÍi"}r	K_ʤd%)D(zNhGB_@'8*"{Ij[JX@7đ'eTJOE"qxHbVԹc:wEĎ0&G(O<(	nrP9Z~O}.7A+fwBSJPMGRZ\у.PK!Rr    PK    A             -   org/bouncycastle/asn1/DERExternalParser.classmOPwE F'TAp*/C#${e.M-[aH"PsceM ,e7ҳˎ+þJ2`eEQ7wv2hdِ%C8k_-:0Y]J[.I/zjP_o(4E[0uͨPpߝ7
q<tc8RU\
^{1~M\EInA'26M}UЏ8{N;XĎ+SzH[ʏvrpG'qCC͵%lVDzI$ȳF\k)o&".ts)"יϭN5ke8#}9Au%ʅsKhztđцÄ~L*Rեub#04]
h}
ê9kS
X0!/y)>m-u<ӞA0ܢSN6LSJ$c4jFO,~zNo3@+Fc#<=dORS]evdSG#,1\c
#$N!Kb*Ɉq$p$T&$dU{Ə1Z8X?`*P!sISuWjzPK\    PK    A             &   org/bouncycastle/asn1/DERFactory.classRJQ]KtQ̴fQDeM)!,)$}Ti=]3ދ:{͜`Iwrn%R2CRۻa;02UQӬ
8;)*8n;caRiήE2/M^s*B5kA_f˴KXybUx{%!ё(
yj+@UЭ@S0iw,6'LnۖNZ~0,È>DUcTEP T$
a]S:<99qэt!"G)=Bʌ7UGr`NhSHx!v`7`}D:I/:!rFIUS7PKq$  l  PK    A             ,   org/bouncycastle/asn1/DERGeneralString.class;o>^F6h(0 &3/ĎA=(]?)4/29$'U?8P1=5/(1'(3/A
J ,>Ye9y)k0&F"8XSR؀\ )<@ٴ3pod`30!v. PKuj      PK    A             .   org/bouncycastle/asn1/DERGeneralizedTime.classSNA=CKV@D_ThA/ iRXEe;ղ%T׾^Ԩ߷ոM̜sәo_p
3qtšDdI j%oOPJ:RGۓ[̄=w=W].^[Nm%wjjIzN,I 'W9.0ww}W*߳궣ܚgWr=zM%oκl~n#P U۫dKZ]5=
UYf'Gg'v}"k*)jockS,% Tm7_Q}(:1
ꮒM0aA
5`R{?he)[Iߞ
׉\Ǭ?7܇2'ں`|*e>D3d؁^f`,Hw2:ᬎ!1b80FNd9p!0(Nӿ+X|C.hՋ T.[M}>t1Dzs]|Jŕ8sxgt$4|XH:$ĤWjb}U֪FgT9YAS/!qbY?91)!c&JUs+]肯1ߡk	h0s;zDWQ;7vN7S0<ۑ$=Gޛd[\
z<M_A!f(Rak PK48  s  PK    A             (   org/bouncycastle/asn1/DERGenerator.classuR]OA=miHXbnkE~jC $bLMYn"<L|i|53D~'bP3M;9sg~`\ɑbrd!ǩ#w)bcl@<Ѩ+FѰmѬm4m2x/3_ikZ03
[,mcfWjm^ɯmeA*eZQԪѪ^-6-柟)#:[˰u2_.ܿL咽AW< A'Cx""ɋ>K4gy.S%#Ë622`2 A⹘2q͋^$8s0CCpnAG	MwrmUY[+~U^hKOzg.a2K,Av_QwqGq 
BQ0ĽE!ہ	yISǯȉ㱬mb-kVh\\d]j,$-iq>a'g,p@bAA=J$Ӑl
n
515]QggF
:JD*w:NTF@q SYs<M5qW!fHHMܢh 񡎠#ĩ1[?= ,^{PKyEb  N  PK    A             ,   org/bouncycastle/asn1/DERGraphicString.class;o>FVh'0F6 fde12'%W&'';%dd&e32aW9?%Aac &FF Aʁ46vVSQ   PKj      PK    A             (   org/bouncycastle/asn1/DERIA5String.class;o>~F6h(0 &3/ĎA9(]?)4/29$'U?8P14(3/A	* "vfvFQ
ĲDļt}5F1,@0010.VN✟ʠ2 3#P;|& ͮͼw#X	Hf< **  PK<   /  PK    A             #   org/bouncycastle/asn1/DERNull.class}Q]K@=MnZ]WmW!)PZ.)c7RI&oE]o>eY7Csa' Xe˕vRn.waWTCZݶc/dPηV T8C.j/1XɝΐszHN0~l0
5O:7.,natZ`0`Xy_i :	Ch̳3Q{nBp_QJZm1ߑk[1:0HC:)̆eNC
(e^#@oV.]{.}%̄4͆ӄ;e墉XF
$GZNpcg||5:PIHKZAAK
)` ȋ=>bA~ToQJB PK:%    PK    A             ,   org/bouncycastle/asn1/DERNumericString.class;o>~F6h(0 &3/ĎA=(]?)4/29$'U?8P1Я47(39(3/A
J ,>Ye9y)kbXāNa`b`\ 9?%Aae fF:v 	L@]Ky;F$2x 
@aU
U  PK}   7  PK    A             *   org/bouncycastle/asn1/DEROctetString.classR[oQe[Z*T.`Ll	cӲlqA q.PEKz6;3g&s 4CXZj.Dx_{Ðz]Q5Ş9ßSa5Cx|kya90<wCine6.]@w:nrj^fess6~h{C`޳
sVG/+~QQMj>0l
P ml.sph)f*$'S4'5&Ի	IX,!-aE-	3ݮU5<ڸuNݛ'{jsrӨ*BVBDB!)XĺUm2bGUM=ȣL}o<]) q`$=饯xGyE<_K!Fx4E>?BipAEҌt(Y*A,;s<cIbs̹J5SK5tQ?Kݹ6')MQAr!2K#Z]uPK&?   \  PK    A             0   org/bouncycastle/asn1/DEROctetStringParser.classSkOA=SJ򒇠ViR J?1@H۱,fw06Dw- &l2sϽ3`+]1t$Sdj?ЙϪclq0jt<7a{?JH/Q8"},$ȑW*-2KB=^¡%NȆ^}tشa C~-ǳ2h%f"_Ғ:Ҟ_
^յOlȲxfV*~lE!fk7ƼLk	n O"/ܒ<Xw+ł&.P99zH/KXU}`^#
^
}5hd_qMT|as)-uh2?%p0gO[E<ա456dBYPpCHDt]@7QS0Oq3:F1TMtL1	S'ެH[|E[p~+#iZu]Ow[r(xHqpFD	щ)Bh7BxVݬ㹙oP$gV;m?Q'gSA\
31L.9Ti73La|200zD ˴4:E&y PK6o    PK    A             +   org/bouncycastle/asn1/DEROutputStream.classMoAvY.lM&Q&hM1iY'V%0'ū'ėg`P-vg^~y>p~
Mx8CzG՝zQհ4^ܮhr΃ͪrM>z[Z7E6{gN.jXZ$D(Î/x[<]`='7:41q+|QS
/
K̀OA'w%~'_K798Y%T9&,AƄYܔCHb
}I.\\p.NWh6G
xlt(*YtC(.e_rG,3vQ;ŭ
{ 1
XF)&GU%iK
4$nDȂej%gcmٿca\7PKj    PK    A             .   org/bouncycastle/asn1/DERPrintableString.class;o>~F6h(0 &3/ĎA3(]?)4/29$'U?8P10(3$1)'5Jgd5M);3;#OVbY~Nb^>DdqxA+'b`cbd`qOIePrX@Hy@>ffI3DvuXpC  PK   ;  PK    A             '   org/bouncycastle/asn1/DERSequence.classSuǿ&ݖP)BmlrF) (!,tiа^7q/}hg}]}Wl6a6s~{~s~w~緛wxc	jmLX"=c4]3DMg#s鬞H&VI]=O̥'mY35iPucuTD2COM<EI[PƅT A͈M_$ɲ'
uڼCi}d>ow8\:Uט,ɱl#ajbYBYr\kG֓ꊡujX+YCb)O՛Y*lyhpdX0GBҕ5\,4n=*JU~ɽ:aF*ufٶQܘ7$hΤ:o)d1HssKj%z-<2r՛<"ZDhgD<+]"8&D pMۣkn
*#Ok
f*p1+c7穊Lg[h98+\
w:ΚCĹ_vGcxKv#\YU01x{+WZH2Q# p8Fxd4+#*YdOa\d !,FX\ &	/h+2g1Q>LKxS,`1B,X\p"bE9{CBoIxspKz0#WXmqݠg/ ˉ+\{Y#uQmsz:@Z m᝟w0i*E4G!r}ԃ"3h1q	sXMXP3P3wQjc48
kaFqH2u/oQR;8m3[0z<~gknZ)({33dܻhot HSZ*[m#}SZc5pk-psL4ɧ-)o
s-W*;hgL_uvF=?LO;**";uN➓_~_\}M	)^*@XkZMLwWat|{GBG]iy:O:{c:VFei֏;[/ZBbz秩 H /YHmn>,!\@jD~ç^
Vg]#W0wPKpa    PK    A             0   org/bouncycastle/asn1/DERSequenceGenerator.classS[oA\.kҖֶj]uĐ4b1>emn]V&
Q?xfATؗ3]\w 08CD/bC\:\#z#FZ?19C{/}L#gQO'mU
~v_<T~&\cU;uhqn{EXzdSWڞ̢=lTR_EH
t?/Wp҆g
+
,*H)H3l|}0A9}2"nm
Vy#Q]?ӆF?DijN9`e{Mv\Il
40!e^2A<Vb	7pS
9AW	2
TO;QEpW(N1%*E@0oXz0?aQ\EC&Eiza&?̰Nl
5CMҜAO5i1aJn^0R{ÝPK#  E  PK    A             "   org/bouncycastle/asn1/DERSet.classSUǿ7dC(ݶ
dMV@P6d	ۆIj+:Ա䃯?ک9%D`ٽs=sw7O\D;Mں, Eu16O$WҬw,֌i
Ec(YpuQ̇=~55f)\-W,#.WFE@Ps7RJ!-orsz*qZ_J/-r弞-^ken2ȭi{%`\8Q*X2
lK*C~*܁4ƛȦ	4R]Zs6K@}SxriӜni{
dhb-l$Té
k}Kp	Nѹ
x*0z,4jad5{ȑR{/i\) iTd8)㔌2dx(/:%J3}jLkp4:f>RTrŎ?#Gy4uD[C=DQIPMt ,RAH
QW	
ǳY,XY.*8WP06u	I?1G3,Xdy
,ﰼG,,,oBby#;g/ݖvV^ׯQB
x9w5Mo
>?`1`T	8ALm|BI;Ib\dZl^vS!EI۸q{!iew^d;|2ME%R#A){k׸%PݞrQP|dg%
½.!3		:I4w,5dgS8cٝX_X
Wc5DR=m*uv~DpŝUzT!(-C0*}mNȪN#yU9K~³%ϚTx}~{( |a@ƈxN?k1D?@9Ѩӈ⏐es2]L-踹z:sCvSȞ-Xg0i>PKh0<    PK    A             (   org/bouncycastle/asn1/DERT61String.class;o>~FVh'0F6 fde12('%W&'';e32(aWW ᓕXa`f`\l 9?%Aac fF: 	10!v``5ya@]Ke;/DX@f;7T PKT0R     PK    A             +   org/bouncycastle/asn1/DERTaggedObject.classUmsU~nXd4mڭƼMX Դ5AŒPK
Nōta#~jgI=g8Pfx=g}9wW
2hQ@1aáY,f<tvloM@pU:e"N.]5ZeOVJN:U]>9Jo#s*
T9$n<[g?eC@]뱕d6yRuv%niWۨ&Kn)R^M&QZͰ7T#˃YWoy]Cn5Gg?.mU/29_"DԢ@q,Z ׬$gUkw>H-&>$(uI˔:*UVqF⬊znf6/f9j5͑q~qqt01]dzČfaz|pS;7߇a<۽{:&xaL:q:4(:##(
Cᒎq$u=:ޟ@>dH1\p021|">ba!a	n0|a5R$2w{3.xVMͳ"їEeg @q<̮3ÌXa H`s}|sD'">O$a% E3JOA.\WXw=WC(qkuF1_ġ߽Ɋk+m|R6CyRg)'rr,׎X@ ȋT~1~G%"$;.ZTQw.R"T24Oӌ󿦂q6ez<666%MA9@z
-|7 ٢NN|iV;%闈_α}tt;1ź_PK7ٙ    PK    A             &   org/bouncycastle/asn1/DERUTCTime.class;o>FVh'0F6̼;FtҼ⒜T<C}`?TFj\\JXD5|sK2ҭA	CKK2s]KR<L Dpp12p.✟ʠ 3u !?%d3i6-<*A`Cȳc3  PKƐ_   )  PK    A             )   org/bouncycastle/asn1/DERUTF8String.class;o>^F6h(0 &3/ĎA%(]?)4/29$'U?8P104"(3/A2 *vfvFQ
ĲDļt}f#`b`e ,)l@. Հ I OflZ720@]K[f;T PKơ>r      PK    A             .   org/bouncycastle/asn1/DERUniversalString.class;o>FVh'0F6 fde12h'%W&'';e'e32h`W9?%Aac &FF Aʁ46vVSQ   PKOZ      PK    A             -   org/bouncycastle/asn1/DERVideotexString.class;o>FVh'0F6 fde12h'%W&'';e旤Ve32cW9?%Aac &FF Aʁ46vVSQ   PK0No¢      PK    A             ,   org/bouncycastle/asn1/DERVisibleString.class;o>^F6h(0 &3/ĎA=(]?)4/29$'U?8P10,83)'5(3/A
J ,>Ye9y)k0&F"8XSR؀\ )<@ٴ3pod`30!v. PK0M      PK    A             '   org/bouncycastle/asn1/DLBitString.classQS@!mRB*AH[ TQ"Jh8)i(q
C9% `dw\~u`b)@Q0ӛ"6g>*~V!ol42xGfXIӠˎ.?cUe˚ݪW6YUevM@<l>Q]f!Nd$h0 ZjÕvKw<,T}xIQ׷[=ZMkVsTԪ+YۻSov׵zss@&
sgޅ*yRy{Ǯ2Jn8>;c22R2eܑqWVOfrz7M+]cygDx-\dFKwY^ TCT1aH*n#>zQH*FVqР+7K<U0G,r'
fL!8Cn o[ s+}Edh"z˙x}9@dg@%
P"IHo,CI@&o
mԤ7B鼮_	Pu
 
{įa.9
d'xy!jD@_6%qE7\,
rX##DgFR4;a\l>X\"PK#W0    PK    A             -   org/bouncycastle/asn1/DLBitStringParser.classTkSU~NlKV=Xk6KӀR))XcCA(KOӰ5f6'~~82~or߳vg>9{}CD0hc=+	CJln8n10$3+KO
ݕr*_<S{8tWPRUyAx^rSQ{cbPrwvJ+IE<e.(n5z5+&,IEϹ@6뉢,C<˲Z%mV4M&ךTp)K|-ʔ˲$9E ƻXוIלrQ<SVL;ZݛkHIԪ>!^MȬtKj;VjRj[*|^4F݋0i*/Ƞ;1#K-c(]OWEГ Җeഁ3x)o8p:m٢@oX:09c?*t}gl}:/9oKX[_#ƭ!;- Zrxxǳ{E,G;3q
C&a]DL7qQa\1aCpq|t0.676KQX$iv,j6(fp'$ұ6G-m>f&Wv6WFZUΎp%ъǦ㲨|)ˤB%M_ 1EIhX=?	ZC@_&o' }'1Ժ89hO[WR[DVx:W.ɶD>EoHnl	VL˴Ա6Ƌ9䁖d.ggB7lޜ
XV^M}]6JWܙl yǍ[vM;HՑ#m
ӇA-
=y]P1PKnW    PK    A             &   org/bouncycastle/asn1/DLExternal.classŔ[OAӖ.,K(^JTE(HAU|vfvKh|L5ȃɈgBM>̙33gfϯ )'b.,2:CK*od
:/̴`mQԹ÷x6/"}ǲZuig]5tРxet0楀qDSVLyɊ(ϙѥ+2OejC/lcpvT<YI_
Yr95T6R
䙌R7ձɒ@SТUAv]~YnfqOUcd
'a5Q*͛錌kU$.^_L޺penx{Q׹њdz89yY	EnvoketuܔX+j[Yjh[C3jh5
kP4x/[R5tbHF5x1*[cRBM	)*0%%[RHUэ*!3*zq[E *p^˖N/3T=e%Ki91,3G
_=a!?^0t<?]d/=.j_!+2
G
_x7dSR+3KVh(AșR'V
)#c\ٝ+S;CꉜoMP<)P* MX9*	,~WAmp)!nF^E/^
W_PKgn  u  PK    A             %   org/bouncycastle/asn1/DLFactory.classRJQ]ǱFRb|hz3	
BztKfJ>/	}@c.fky|{ 4]o2C`Ѫ욻й
Bf~W4w!V(Qj8>%Vpz)7ܮʁ44F937ݺ0xӞ7m9Reb:
3ϰ7s"BSѥBW0i,CKoʳ/Iс>'Ca0#z1!"Q	
QHY8t!E[y~TÑ"i>Bq90M(LQȴ\xmg۱-P1zy.'.0CQĽuIEnNy3FH
F$_PKHxX  e  PK    A             *   org/bouncycastle/asn1/DLOutputStream.classOAǿmZ
kp mb*$5]'dm)ݿW`? &xSڪT&y3>}o/} kǐ|Є~3wب{ppc rnV-(dX:;n#{&wn>?_J%$S= :A+-ڨeDACD5v/Ro;&oPtƃt$t$u:0yQF#
/
%j3`1m?a%ĥ'}aoP2AǄYW5a k\m9䧐Š=|;cERuoyTX4-Aߥ4+dE3଩4YFV)~}SW&N#~#XGXd8BQ;}`rFw$;h~hDUI:R"Fnzj%ocɯ0;PK
d    PK    A             &   org/bouncycastle/asn1/DLSequence.class[WU&NU4h
մriFME
aCaBÄzA?O]՗>Z,|O~ uUt$L;{93 3<hc?-3Ώq[Et͸,@ g>,Y=Jnj8Gz*\XU^hkm2XJ놪1U_6n	(Ubi\ZM4kL3FFӗ	nlZUc<o,ZX<Y&bQjrMB`|\<͝Q*+dXKɭnhi]@wYc=k;+W@Wy*R]CcJp,d\YlY"*LnjFO: k+4`9X0Iߚf+tuRr$zчd'b5E݌f|P^tNnZJ~E"Eh&]DD</┈N]".\iytݴAed`~~">A\e^8{qe<WQ3q;gkSvmg
{gguZS(q?NAkWZ[fSrfMUv+<Z2j!ɨCjd E,>Mш\fYFYXe<Wd<WeETF8#S,x	q`yeEeY0,.˻,`rKχ9	/bABoKw$\²DdegIJ{58}]/nwjmHnO%ׯsIs. zuԧj~AN=@
	<bN㢶&c4mAp<Ɵj4$ȰA]<6'x׈Ph=v]c|. ;'#;n)|hfY=Ayh,L-<+bVzfS!=m&ҖOC7[U<ǜ-,RwoČ'V#"2kz}-UK(wG/<x`>(L[J7|k_xJ:,8Gc	A4}l7mT}\
y|g0a
Չ}\J|TDz0i!mR;ty|Px[uy/ϊx+hPK&8u    PK    A             ,   org/bouncycastle/asn1/DLSequenceParser.classYo@Ϥ!n]w!)eeiPL^*J.8#ű=*wZRbɞ;ߜg'x0/4R\ߕw]F"dXCh=ۂa
x[}aK""Cݙ}~M70w굏J7rqcxpאzX#|:f+#	G~n*fq*@g
VܖAx8QjS'FS(
Z"BJ@h4jӠk`hX`ZcU
MKҮqk:;^NP;^ɟ
$|vͷ6oy#+S>^
"KSSϣO1)U`@@
WTE\3.$na:.ⶎ4U
YuB6/6|}8>/ݎhKn~@з@~˻o
d&Tt?&HjY'ԋ_qX')ԣ5Q9[B[G1(bd)Cvu`ŗ	LRӧ}<8~ R$IZxBXMVF!1\PKmF-  {  PK    A             !   org/bouncycastle/asn1/DLSet.classQSU7ˆe	 n4DKf`@[5j:}
a˄;ç3}h'}NEϹIL,9s9G?> p	7;_zS@KemZd?Zdq9llk^P^ۍ<LW+A=\myoxoT="/v^}&m6g['Ȧ-ĥȶTUWrV6di~TU]s-U{;}Q[Shg/zr	:d^$ydP3p\Yɭ#;:
KZ::K)l;m+qxOubO*&'l	GLZE;Cȟ)(fAs~qo &L0#a,)&FȠ/r%o
&,c01IvL#*k,Ey2g<fX^gyMYeEat>sOFj;7!ʗ(@ Π=D!:%wduQr yj͜&&AS8=݆@C\.<*wQQvQ2U jJ͑2	1pki`NW;8?3q]fձ6%{*i
F"*>"JOmkg֟V~=YY7<
N5zPnb;+Т*۰o8[o+E,N2gi}
.6QlR-		OM,=ZZ:).j:Xu^4yX;|ty
StC/8'àdG0,HԺ})Z	&o[WPKu    PK    A             '   org/bouncycastle/asn1/DLSetParser.classO@ǿWJd:_8Q:N7"3!,uYzK{W0{(s`8\w}=_ 'c|!||a$B
DE(Pe뢾]E,l(
]艶e0G<h'YnMޡ#.^yUܡm10vze.C)r:
n_pO!;"~*t:HG|q)	ILߖ
GM1ʣ9!r.?B8
/QxF)dךȮ*Z&0
9>"B!.Y/ϓaƇfcs60I\qmLᆍm$p;Yd-\ܱƒ+,dYdH<uc^oTzH{kŽ[ K3cЕҿ-iAo9F)|AŴZьfw>#QLZ,1m؉.+ܳ4W(O;<<*GMp?ci4NLxKvc
PKmR+    PK    A             *   org/bouncycastle/asn1/DLTaggedObject.class_sUƟ6,Iv1IMCh*[XjPg\7];FtH3~ ?,8?99{:O @ȌW/7(bV
8rvl// xV:5.w6\㵻5Ostw|j5sd#0ӐfܭOlfQlhvg+po=2)d˳][XqۍL:jVkʌq3;[ͪ6)zlZ]oݶ쇣vFCK}YRI]*y]=94זծݬ֖U
LzVciqqf=?5,=۶'yf8bNU*.xI`8FsIP(iK/ YMĕԨç/Wa|͌[ccz[G(81CΨ'F-?9Pu²rk: t̲D1c2B:4(: #%ɒbI5Xbѱ>dKVkx]{,[Vp&,"r嶆U,i
 7P\?E˞U~jV3
4 "L(C|g01C !7!T@\"0K\ǳr~0OQ{=|C Я_-~C-/~zfD
Po.Иs'k8!J		~ES
\"\Rti.BpNUFeÆZk>s6T0aP'
Nc'lPD=e1ŢJ?^~J?2גڹ.,rC|gLMPK|h    PK    A             0   org/bouncycastle/asn1/DLTaggedObjectParser.classT[SPT%oBDPHARZt&(	
_qF?q7Xhe~~gOr~@jQ-P3kZ;'dLtWK;*;ۖfuH)c2E&B"A% o1-Ymʷ|h?bqDSp2R;
jGZԴnmQ6tH-%l:cZG]s܌k<:2t;dݬՎ'.\V`˳ȭ^G4xkGF2]f,sIzzx˝\˚K:=Gn*>Z_H%4Jh,E@MV5]iFQVz&N`X
ݐ)&*ԭ7l1j"U9&RJܴ+Ք~ijgZd1	*ܑуpC2fэpqa!#1?z10!aڏ><yaJh_5Z;ۇB>ze4HY|nc8~=2O!=O͐͞ac'Șj-XM8yxB5)}F}~:}IHwC˲mgn+gxZܥRnF>+n=Gf RY\ףjQ#:	
l~rS( PKHM    PK    A             5   org/bouncycastle/asn1/DefiniteLengthInputStream.classTmSU~.IMXZַRl4T$7e7_GGw)چtwr&$ 8?s}s~; pE
UEXŀA2!;;</tV!xAmN{Ɔ7X:-غbI:L
k>[.Ե+LfRj:dgߦi3l:Y2mxMo.QK\vAUEuSmW/`H׭%pNUNQ9UP9*.UBȘ[`\iǸk$L'ZZH}ea:ȝ^jUpZ]J-k-U-i%-dմ
ܥymyEm$̻A°,KNcJ8n)!FEX<aT</ʧk_ፅNR´$zFք4jβҶpۂϹeplrNqZGZp3PQ
^RpA
^Ss\c8kH
xJFv?6;uio[t~]l]S5CCDY!a)z
4
薾黪a<j8x')I!\!Kq	R<^ƍ&R,IDSE76{U/򚑳8tBX>H:d%A#i~<YG`D=tc"CI_Cܔber׷ojW0c!K`e
iDmJ &#бCZ
M>.f1FWgYçᎺBv
',iTbQ$ID1$GXK<#ux*	<;HH+HDc84= X>ʾ#?6=տasF?!&@O=vc9xg&֠>̝2F:\W~}}Z1~.6)FMuI
 qjsbu;PK8     PK    A             1   org/bouncycastle/asn1/InMemoryRepresentable.classmM
@-kKAQauAUuȂ:5037x p&)Ȅ0(L6R(#pwh'ͥNpeTD6IZ{{*L՞&meG0|*U
m~=d
u0:;t: ^PK*6'      PK    A             7   org/bouncycastle/asn1/IndefiniteLengthInputStream.classmR]OQ=ݲe([ETlwR4QKRt@vIFϼM4wQg6m)iz9s'i< W\PRkwy>+e@PEx
pJ .EwrR i;[er8^%mLs=*o޾W+*:Ȍ]uTSLS.HwߺГܳPޥ҅Rת5].^H_:*zU\Qѧ_ Ё#Tǃ|zEG7TCQ:C:q	aWp.¹d7qMQ
aj0!a)ZW^K@ϒo;ۯe#1B=	z
B̐,Ql,#g[E~iuL	,:E5o0?#oˬ#BEa*ef2
٘K(zJ_aFXGHI0DjaS\ubBK76D|Mv}񖑬1!bg2"dtY%-k<p2?\f9&5+91=!fa%YY֥ŊK+OTx8hCTePKT~}  8  PK    A             7   org/bouncycastle/asn1/LazyConstructionEnumeration.classS[Oa=.,@_-ʥa-
D&%$fLMl"o>m;̙3g??~ūF2>n34/,LqX0-]>_(Ţr{j;"a%}~uWӇ(Mm~5ϭ]}}g_.CE):py=myHfg=c/ziO{?NAokS(C%݀ʠȌ<0ήc{qd:/Y)R+VsɕĿyS"n'ge*gHRiO,];UAMA{
"
:t2D2ׯ90!fg,~r̓ԥp̂7%_:?w?qRecϱ?񝼘ojh}
¨Р#@>=ЈQ	c;ބaLHE\E_
IA$$Lc&e;'Z.7>(5{Џ:IgCTq4POT0bp+	TY8A䇡	(EF%_PB_	Ida$} õ**x~z.Ai\ MMN1wbh>2%xZƓd;.*/PKEEm  z  PK    A             /   org/bouncycastle/asn1/LazyEncodedSequence.classV[WWAj#V	Q[/۴Z!h2~wl_|jU>'uu=3	,;ٗߟ /A4_73VV2iZ"4R>/9<t@x`z)<4N~KW8L!JhM9S%[:SX%33ъ"Ǵ9I'm&I67YR[E:zA7E\}	,91K.Xvm9]L즕˘3ɔ˚gĈVt$8gO8ւmMX+Z̰bɉĵ>'˔͑53 2l6,&%#IagA˓=H>DxH#/١ܤ9WdN
DI#Ӛ]$6
0PzYir2HǓRycQإL'1(>pbYBV(I
풞WاQCIڕ$Q:MLd^#N%$ܶyWϒflN&θF*U]Uqզr[.RelMS2蕱C2v/#,a]x ƨÏJO7U%acu13KzOZԈw	=N6ZOjhEg1)rMp#j]'ŝqj=B7dRq9K[;G-+7GïN2jG['(G*a.tA@EAENJE7dTZ0{6ʳ*6㤊-H)Q<b70&<b ICxA.b-R*`L^UiVR+Ff8 4qM9
AW+o0
U(
esf2Y9Y
&8^WȫI)zϔR{-kO-siL;G? siEŒ?ilTK80%UPEq9|_ϒg>5!k\OXBT(ly=Ս!%EoC]h-蓅 I\.n%[|x3A]l%S׋vp">jR|j*i4nkI!͞2޿;ak?4ne]0e2]dm-e|GX~}[±2>OKJ%}]%Q9}"Mחrӥ3Qnm9));qj	I*x+-12߅HT!4#K88Y2iZW+x"fSGm8$js󵅍{WPK]6k8    PK    A             .   org/bouncycastle/asn1/LimitedInputStream.classmPMO@}B-TA0XʡxxQ$M0,X-ğb"x0zGw	yolv>fߪss_|.K?ArD7{H]?p;|=`tFwѥ2.y[jFllY豷shCj,W"5]0JL0OH0t[>xLPF߄dMh0Oay
2(P:F {:2P2r1Iqy5@P&b9:5*N}+H
pP~	I
iM$gdU{Ǿ#IPKboM    PK    A             &   org/bouncycastle/asn1/LocaleUtil.classT]sU~9lI`km#)ЪiMi

M%U	lKl'x+/E;Ch3:3cYH9<{?yȻ]P]xYe"vu6zn&ht.epgbh.0w6䃸"R7zM^cieV1Nf2hօ^/UmIֹmTWJ^#(bKڞj
ڶC\u'sNtD!+$B9O֎5{Y-J-_Jw20I5f䎨ִYb
h+JK][vèyI3vUQ+$D #bRGK"[ [6^,Igpƨ#[F}5S"Vu%wc*<YQ+uJ8~DO"˭J1q	S~8Nq8.({#G31bO+"z,pۗ<7@^8=*ׂ)s{Q'JCTUC	n8%x*.H䮪aW(U#簠<>q2%\WĲVq[EI %	7D4[
ޔWK%K>/KF&L9|hS~C|"6LhU4J+lhw|YWG	; 漶l&6ӾWBKR7~`7J=f&N pawT"~E4~E*0[6`rpo1&>o"3w )g"kǽ&c|Lt$ase#D9>rF("P"J<CሽG#CFvĀqL1 jawmV[
.4%$}D3{~PKƷ~  h  PK    A             (   org/bouncycastle/asn1/OIDTokenizer.classmQJP=7IGVEThq᪷FK"MgtE[?)NPsϙɼ? XH<dl;o3m8l10*D;O"ǭK]C_p݆UZ*-m0D]q&4s^aUsvU~UhJs-Zdϫl##ca:X.ߋN|*ކl#40P
a,da"8&cH`*ڎW/K26d"zh
EApi f2E%C#f4^	#PmZ+0e,➴"ڔe+afTH}ق7b`dFCх:PKi  o  PK    A             &   org/bouncycastle/asn1/StreamUtil.classuRMoQ=PSZ`K*ʇ:u1B	DW)nib\醍Ѹ0qO2f*f2ss?MLnSwB%\τ٨	&3APG=-'5aiKWvϮZgSso_m[X&lj;=riR5iG
vnC-[VO:MnLmpu͂V=,L59=7BSܻW wa
b"B1O@HDLT'8Rtk%3~`coE̨OŊPp^EpQA9(X%
`iI0[VCn}f36k?vNO঴$ (6@<7$}E#؈]?DVҸ+w(y׏XƙRJGW?AspnU!HɃ,]<9ς<4#N("\w7PKf  @  PK
      A                org/bouncycastle/asn1/anssi/PK    A             4   org/bouncycastle/asn1/anssi/ANSSINamedCurves$1.classTkoD=N6]hhx4)M=PK%iH-.z//MD%~ ?
1-ݪ#;? 	MXM\je`/epŒyDXP׋pOT!qBđRtT#:4&DnH<ɥ='ԑR'\1am)ԍsA>M(厣q")#	-K!=%Qw?R!n d%u3/H"OxR(tV29^AByJB2Sԏy ߗYYvƥ~UƏ3AZϲ*+JMd?Iո00ӏ׾OSYZ=pW٠vn|e5̉e9}}8I	==&7fd~5MZ\ַ%?(zq::?1L|h⺉EmX~ʻu6cGݙW=K7J}P|
T3e}<д0Ϡ4}
ӽ߲Xt$WąCk5|[-\EXm
jz
=±pn
^
enbgSmaq^V=hyVQZYtxօ@	mBh5_oOn"mkkio/hlX7^`zoc8SĿkLm7ݵ뵍SlF9{{wB&74rڳ.
PK=e6    PK    A             2   org/bouncycastle/asn1/anssi/ANSSINamedCurves.classWRV]&[J !!mJ$"4$(nqBh
Y6[L _)t֙~S}$P,=as־/]߿=@c-J)I}&=%0`qV +jYh"vb]t*%S˖ih͡([*PjqbdՌmj
[jN˨ZPnϙFqNݦ*$;iH_쐙sO˪{ӥk4rBf~evmմ\̢[@Ǻ%KYK-p*IVɡ.ZA5[^-PͺX]OfI	f^Z5JȖ]P%ct&sc&-1`Y,MNg2IV]6z=k
NDQǥ'39g@(TEZJ˹GW0\	Z~sUg,5-ɥfq6RsLy-WxͣG?wyA!C<.|0A#MN KO!YtR'9;1:ӌ^*lkNF:1Cf&ܧ̀#3RrxL.v6[C['&Toq|<|]Ou!E;uR%9_2_l
=.m6MNSuE{i
e?>!D/0тI&hF"pW'SloZeEH8"1#9Hhż"ڱ,L<`"ģ }<0$,	2-e&>eB92L(Ld1pᩀ[XaL8>>phJЋ><NlYۖeec^|#w#%ք kiX{U^g :E{:G+Gksx_~;'vr8r>7/=<÷{3jwCY!妰Kwak,d.	md.HU"Lqs
I0Jkde"~O9X?x<nu>zYi|eY_tRuTcW]@^_\l3uv{ˁ < :+:q2
m:)֎F*r&Lqcy/^aQҌWXhkMvQsGwPK_#    PK    A             8   org/bouncycastle/asn1/anssi/ANSSIObjectIdentifiers.classPJ@55I֪H5"A(*
>^3\	HB? (~x >/3;3..,L	ǁakwwRI}IĽ5؍_rrBĚp	e*^żЩ`PF+29!;UQH6DLq:(N'?F:*wl<b
hJW\dImvzߤg4JPK1   i  PK
      A                org/bouncycastle/asn1/bc/PK    A             2   org/bouncycastle/asn1/bc/BCObjectIdentifiers.class|Tgr70B/R, b*@AQlkBid{קϺ˳gޞ?sn3s̽wR͌nF5ި݌ݨFaԞFeTQFfFaFg%F]jeF]nZ96^[	h峴f&Xׄ5H]NPS&\)ZS)P8ap '4a?d,?phZ]~e׶U:`N$	DrDH_D9FrDrDrDr勄r"H$'RɺhΜ9s93XNXNXN]u n7u뼮Ω&ya5$doO7^'70(`wݜ@b}Z;o?T7XKwaGn-Z@`I52T1\1RXcXcP]5>X7+fbELLLPpHւ8VlEĊX+"bVD؊[1^vS=+	`sPP6w ;`sGWqUW)**
!\UTWB*dHkD+LklmioR>D44jշ1Xl㤺Y,OlHh՟E<\oXcre4ވq
EWe !} =~fc=-#=݂=2r0rs#O,{iYcDѝioKc_WYF۾zLt[0"^_YcD%vekģ[$Ng}SSIzTyԱjIKW"Yߐ貫rW0;cȉjU.huP_Gt,N]>
H>+=k4)ümNfZptjnngumLƹ,
E\g.p4Bf"3skihE.wBaumP1mKE֑Rdn5ZV4'i}6M'M!>lY޷efV{=\V~jk}ҩ;5,K4:oy_Ud4XC>]YH4b%jmYܝAيޠ*YhnYXmw~MV0~A
"}-D0FBq7Hm>ZOG-#h]cZ]ޮO0'kE[kSNZ8i?{˾t$Cg2"t%9I$~VR`b"6)G8]
-K	tJssĪ(]=͝4pm/R	`WD8`S+cvjv
 r	{׉]bV|"&wt-޸>ݚZlOpG?o9MvlDVSwnh:cfvo3+R<
qGcJ2uPa
$R-mBLz:f(ò˦/g-G[$\vsܶjC*;	/|+=ӔQTrvxcp=3'{}Ζ{"wKq#cO=]6`	C:A/+Lrp!ZKxViގAwǰc1+8NѶZ]:"JH<
5ەOںfTˤO+Oɓt]g.Λn/f_ϱϙc;&N$ʊ̱2Q^m}qiXe4E[{&_W{[I,¡hG[='1E9\M<]1WJ4VjS]<gE]s|pi,ܧwM'Dԛ"@Vu:UdUg?'Tqpm0<":-tt(MwlRq{I.K/ؐD7IN({yPpao(ƃ9'!OO(dϗCy$Puq]<\ƢYNBs4I+<˝%_w̞C>t,7%_w,RkO2mɗ_giɗ`3Irs{[Xԝvݏ:s#h:qwTD:4u<1cKyv{Y%C4QCic#]^~y}<] AX:Z07+Apct,@ו1ݧ;i1hCֽqllPy&$MN\GR&M<Ikޤg~ycxfV@n7iޙfVEޤ!'Fo
#oPd/-|yӫ _ެe?oB//<y3k!OŐ?ofCc'H?!r7Ѐ>{;mI;0+\^g,.,'j^huY~vȺPӗ"mDef>@ow@wHbhv(}#rTe2w4(٨QF6jQ5֨qFM0j}60jC62jQبFmb65ƨF7*`TШQa"F5*ffFmn40jK2jk5èFmc,5j;f5Ǩ퍚k<v0jGv2jQ;FbԮF-2jo1*nԾFdT¨%F-5NQˌZnTQmFaTQ+2*iTQ=F4jQZcZ3j0@2`1P4(6587N4$N1TN3t0L2l1\7.4".'k5e[OZڗn%k7 77)fV6vN.n^>~A!aQ1q	_S3 / /// o ooo   _ __ ? ??? ~ 
@	 >(@0 U À`$0

`}``C`#`"0l
 SZ @@ll	ll
Lf 3mYvl`=0 v ]]Enb``O`/`o` 
@#$%RhˁV
h:N`$nX	Vk~A!aQ1q	I)iY9yE%eU jFӨuNi:ZQ4jFӨuNi:ZQ4jFӨuNi:ZQ 
F(xOi<Q4
F(xOi<Q4
F(xOi<Q4
F(xOi<Q4
F(xOi<Q4
F(xOiT=Q4FӨzUOiT=Q4FӨzUOiTTTTTT=uU!ꁒCTrp8pp$pp4pp,pp<pp"pp2p
p*pp:pp&pp6pp.pp>pp!pp1p	p)pp9pp%pju
M@

x xxxxxxxx$4,o?sK+k[;{G'gW7wO/o߁??-hp P
r T*`P
 Cap`0 cqx`>!0lL6 5T 0(66[ [[[ӁL``-0l; ;;󁝁B``W`;@4	`	hZerhځXtIV`-?p p pp0p9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃ9ꟃQVr&VM>ږҋ}׊N-b{؛Ŧ^/NAbo{!Zk_K-yq  $Wߊ^bWbbYG⿋S^"VI>bb[/Al&	pl#7ľ*Vޓ牃٧ž'mM?>/}Hb7ž&V֋u3%gľ/Wb_؏>,A}Tbľ(}Kb?ةb;֊]!6"6,v[['6*v+[.v؝@3n#v,v[(v#dOf{Vo%AzPUz]ֈm[)v
Ė
,vjUb&vءb|d)Y_J}d)YoJ֛d(YJ}d"BbhfKŶ].vVjGXJ~~u4]KWOlbwqd+_Jꆒ}tS[|*_J/Vg\)sOgV;>'-Yy_݆jk/@k' ]HĎ;Vh]$漣漣RUUb v}P8-VZZZZ%ZQ!%3*||y%}%}%u%%w% H|"Y9GDǏd{C&PG=BQb{c'X'=AIbO{3Ğ%L=EibO{sĞ'\@Eb/{K^&RrOjd{X9tI?ZutiLgccK\<w{i)A)}@䷐H~YI\)d%
$GH9*!CcR/×+H5ɾO9RD~I|B$	Rt|t<-]BR҉U$'C"9In9ƐCINCryJ5<p-$w@aHxSHx*$C<p``J;9;Y)tNs$=ٗ䙐Y>K>Cr_!*  /!|C
iH!_|CՐ|C!y:BtGBYY]5Jz]#除'
?H7t@z	RH7t)!^N[IWn>ߑn'
cHw.%H]Nҵ?&vzu0lu'vF_v#Ov)UL agr9٘rvSN
9ة%g;r3fPHr.eg49
!2vƒxr>9lHN';idg93&v6!
v6%,cO
vtaO|I%RU"
s $oă y#PHNv8$m_7$oH0a|@97a:[-Y y:kp4=J'GK99{SATRrvSN9{3Kة&G3VL#k(;eN)9Ӈ
}/;ar.bg93ٞmؙKtv3ٚ9KّDv擳;;3mٖ:rَy&g{v3T٦{SdgrF'G6b43FrBPvv%g;neg19كIg|g˒?9σx$!y^uI9H˜wSλɇ?с9樂1)1"#<:HNl4H.[@o	a+C)h$.Bɸ	)	l$';8lcHNv$'A]L$E)$փV:ZhH:6sj+CcH9t,i:MDOLNoZH!|S䛺oH0=6;V	Xɗ͇! ˣS%l#HN6m&Br{|w$;.;N"Hλ$.伻@r]/;);I!9CHN$'{'yDw$o!y~J+ y<p%joMSMo
$
}k!y~3Q3vbfٜ8;	9	v$'Vaz-O|)m<!yzBngx$?!E	ɏH~ZAø@n{wVwۃi ͧ'Iq|i>u?ANݾHө0i>u?JOݏSY|~4}ϐSi|~4MNݾHөtLNݾH%|~tI$
U_#א~Zoޏ['M?PKѴs2P  P  PK    A             7   org/bouncycastle/asn1/bc/EncryptedObjectStoreData.classT]OA=CK|Bid)Rh!5֘۱.]D~&b$F_|GtK	{3ٿ~0UP<%*sX]Z/[%Vh,:6g_slmS[;S,8%>j+ؾvشK°M^)2Dq܂sm4Jud'Le1L@LEV]`eC^=}1h}%Q_؅T1&guoq!Ɯϩ%f[eB8VQϸq\b
Gڵ-aq
n)*TХ[AֵlL3 $J<'?+r&A˕LbMW+KW3/{kAe]r-KǷ#C/vA>\!ËP )@@p`24EЂP'c2LD2$&Ô^LÜ;exU dV]̫C󚓧ߑq8x+o륟le)4uQ8f4Q*xM`A;C)U>A+Pk(yw,bE2::hDc߈}A3vS<i	(mҸ#5.RETz #7^8߾MNxۃ6(wa`GBJPK{    PK    A             6   org/bouncycastle/asn1/bc/EncryptedPrivateKeyData.classUKOQn[(E^J)XZiec#q:8PupmMn\C.s8Sh29ν 8HryAT}!b%
2{\VR^ǔn+QV)
r&[`kGW1M4#63=[OV&mtJIj[%|oKR8-i[d!+I,%OVF!Ib81ŗ0昔6&.ÔIvGΛUJXcy-=Ó!]UW..	)K@7CĢ%J
)s[
տH>zgD9;%99\ѿRʔE&[	jk%pL׫Y4`j=Ds* I+^ZU:悀.4Bv\hv	c|u's1΅\I'zq	7B\}s1$܄81iܱ].;R9>6th̓##@>)(;!y1x1T̆gC#}2Jj&2N==:ª:
}˹;;x3Hv<07JuU=G(
ƠhSu<pȊgD[0ZeQ6FP⊑iH,
Y"ͽ6f2cF]19gKSb PK m  n  PK    A             5   org/bouncycastle/asn1/bc/EncryptedSecretKeyData.classT]OA=CK.CA  vA,@5֘۵.]EMI2@;w;gf?!RjbgYYeDd1YЊYprLt+np+oVppLREK5:BliGZ&OqLn"C^ ez=t̒iyҍ32g|%!FqUmzz%@؅~=&ku3U򝜺e~zI{n-!~p킞<DƸ+vֳmnYHIh!SB1o$t 2IF>l"YH x~Iqg5<$񿧭Fm]F T7w#C/N^o|Eko[P4B'[(hÐf0
( VD1.*E"Lc1%^̈0/~<	7+c Oeb57Gr[ޖq^	Cj:ES4R^PQ\ja(j,iXз=y
V
P5JM|J˧H	D:NiQ%j91ʃoĿExY)Wʄ#&c41ZS,X,Wz{j˭pgsP7Fj8
P WG?PKs:    PK    A             ,   org/bouncycastle/asn1/bc/ExternalValue.classWUǿKl"XjA)$ bhk(ئRZF
l²K7g7_I8/>G3l9s~f̽{?`!\D5& /
菬/:#?X0,ý%
{O-nBSYSMrS)xԴUtUK[S]ö<H]Uw=m뚛rY\ݥ7V=jxeb[Wjir
]r4}2/N!KBSբ5OeVg
7:EeKjh#`=%"Jhe%V6.No5]}3Xb|f;SkgN`pWtG5]q5f<8z,?\K1v
ا'o+8+✈wE'}E| ₈"DqI@bli:Chdqn$NFy9CC$6i
]bV$ ַ[l[t6j?1Bw[[}65٣ma&=Z7.`|2_C7.tf<qje"$d2.OY	<HncOX,m}*4R,Yan	cfq_$I$Dg1~s_Jªiqd$rD0/YX!}Ist(u3<P8PWDҢi6Tà+, HRl6V6kGP/>o#Eqbe~}%(c>-r+D^bT͏9OמV1*+DrBHp9%9s+$^"ġHdc

wAC4-YJ=Hʯ,֒	}̄|NM~"6)Ri넌)<D*LUQ^AiИ" ֥cӾRswMPKXEv  p
  PK    A             0   org/bouncycastle/asn1/bc/LinkedCertificate.classU]Se~,,YX@l6Z5R

YօKVgOxe/Ȍ7'u:svmLs9{>wϿ`% F>Q۱봪$clz9A6mY
O{Sڶ̜G$Ƌ<)qj)̏´2QpmqycʚixcH9ݚrxFwx"1-=36LǛ|`nZw131zN
M:W2<iUWen Y2k2*(tLպ'&gz+rkiy+F<i;fmTo=_`.Qhb]J8n|}M1z&쯍HFߓCrզiܖ:]nuپ"tf&-UNKh3ޒ.ᬄs:$MY%kH~+Mj5fI^DHMMY/k;Kgcך#q"jBfŚtw;B>/tY拭TcL:x;5WJۑje9V	]K
~$1]/ǎ[-#'F$eZ7SՖT$_ɹWR.WkM
9ȼFȸ 	
NNA'C=B"ÐaK`Ç7ƙ2In2|"d p[y|&>ebыÜ>ܑяi|gR2"\yQ|!c w/hMN9Q*"Z9]rdɆ!P4k<L(PȵY-]bQŒł.b9a#`#îQoBt+`ZƝh:ۃ+ݏb>mk>aNR_cca
)Uyަ?Ї)t>SOh=AԔts-EjkZP8E߰Sg3>(TVpBq	#e_.zRR_%fDet )1ĳ<	֗!gR<è{!	=g PKC    PK    A             )   org/bouncycastle/asn1/bc/ObjectData.classV[WUBzZbX҂ZBш4Hfh2Ի?B|ג%k&upeo}>	` ?JtO8/!^c3Q]dam-o[K&)mː t;1,Gg
1mkBs(Jj&ANx@i KʄKl"o*I4id%4rl҉NѴsf$^5s--3J7p;Y'kZ)Uד7ȕ}g,kZ,YXPԒ.:ΦbKoL1-gFgOZԖ<i
ji󙑜33ogy)Vx<k
Jpy5s"inYfGPWDw,g2%=u3E5LFYm(:6_~̘D	t.pF
o
8/pA@[$M!	'Ō<)DtDKKcR:GW

;"3\VqW#e t

1HD޵HT]J*J4"w$\fb0q:U*wᆪ<8@UV^[*K3_2Z<p0V(qM)4bHi7D )Qp4 8nr8$F{aTA;c	
Z=0<`eу4Hç1x2<я1d'2.cQ
	W$*>i{] >/⸝cӬ+3;t#F7hސƍr-ɵ}Kre!9E?b@WXSyll#5rïrj
n!FÁQ?߂F%Z"$m55qA͐Ⱦ lw}wtִˉfMw C@n?
@ъD7?^M%wOxV[3MJwS 5LHt{*OFJ[yR VL> ݍ[~zDvq=ptt}	fc«.|f|KW/M+hҿn?PK+k  4  PK    A             1   org/bouncycastle/asn1/bc/ObjectDataSequence.classT]OP~6VC@N(*8@'`?	+RɼOx奷3Q xGx!g[m6{iy=	9<d˱T9>gh_4-]fͬ`ZY5/XzQ7gcͪ5Kok$Ͷ+2Hۚ҉#k)qIfݤ4]ܼеkjNj.D.7FyCjZ]{V4QFWR!9.fNMrCf'SUFʀO|ECsOmst}C@ I@t+"٤<93[e>ykvޜ}r{Q#&є!˩X-[kf^oFnZ.M>rq3Q*yRu8x9>_X3UUzV%Cs%hp	L>%0gS<HhGLBq5%bEAE㦈1Y:7+m:7Rʲ{%9A2X;yiW_<6AC۶ZMGrJ3>b>W>`?9{Tr6z9HxYO;y~>F,^;(wnD1'	
)W+戟cD/o#aKT%aa cx˥/hPfno6EBbPKt    PK    A             *   org/bouncycastle/asn1/bc/ObjectStore.classSRAƟÇGJ~d&0L"5QkiDG`:_Wu-ͤ89SyERTcBŻ}w݁>0Gh`񹀺nlV@C\ca#C4WLu3RS7
躦`Uڼݿl+bDB+P:Z62JE*bՖHhjPwT%_(X0TL&L*#[28~*(ɴXTC+Bxj
cg/͒ߐ-SqoԙDE4pph,%⊀ncZxZuY.KF|?aHOVhy
x.NTWY	LdxqKx*o.tJg/\t__^v2V*fÎVaC-0a~;Du<vX1̃QܸC@B;%tk6:qGBJMHƔP#-s4Fn(EadWF3/F?%Zua)pO!(0&~"0qzqh_s	9~Zk
\"c./|x:S!`>}>^`X0X
&nzc8F;-ҹmloqR[>{7w8^?-[N4pQF`?a&[W=laE|k*9HPKOm  P  PK    A             .   org/bouncycastle/asn1/bc/ObjectStoreData.classV[SVE)4\#J-)	iLha#4MA_:}[_LL/yo4ݕeɃow~gjuw XϬ"Y16qZibf
 r= )cS%_3qY;vNrLt7'Cr%+zޝsi+KFʝpEzxnx9h=L;#EZZ4ryD@i˪kngR|mx9bZjksJqrmYS)MۃDre,RʽaFN'FzRpnSbTp6twpS`̝VOʮgB97UYK)-h0BJ,L}|iV48 u;Ѽ7v̚A+2k.Cī"E!M'DqJD4UgrTxTCzBaMXO:cW9^<ZWf_Su״4~S]iUzU~7Gz("g?{}jU|bC1ϔkBsЈ*pm#/WjP#uD55{(_d`Ua{wA(.xe"e᪌3dDPP/#hsxqk2
`saFwfn2gՄ!fxCaᮄ>Ѓ{$(HIPqc^| 2dX	%C	(Dg+w3hSksYM^R-q+<Id/O@91O-YGI^V
P]8XUmdo_lc<R"*]
0긇~PO6˧.wF<ή6xzђn)OyuDB-~'?#";xFxu/pu"D@EyMt9ȋT@'~DhPRf_o	[-xIoĈ$ghP~uF1^+F.h~ْcՒ,}wOCz-=IfUr͗/$FQea ekƼHoPK:G$>t  p  PK    A             8   org/bouncycastle/asn1/bc/ObjectStoreIntegrityCheck.classTRG=+ر,!W|$dC,*j^#vȱ>EA
|TB
)gt_;l
"2]C_rGnڎ-okH5[]z?ɯ">媈K7^^]mG
˳e3n>N"$Y?:	Sӄ9
C{n)ExSKZ6mu;pE.c

#)pW40m5k3gl7S(0EMڮ!kܱ2jUXƮp	RLm8fuY^w2SVLtӭttt6={זsr*/Tw,Q9ĥwy7N[FIllWNe]
JpDI.aIq9Q1.0|p#qK3\fB\,X&lZToh&Ya~~L:9KV=iǵYTy>Ν;-n}SNzy>}dAuKאQK+h~n:UD1L+sJ܈bQ|(<a|7McH"@VG
wt|:t̢@Ӟw+4Cy)GP:mY52r1?B΃'0n@Qu	Zaw6D0`pzf>e_~<^3PLb'\oa{Fj3R-a_kc0=/LJ~Ti) v9U v9}8DA
m'Zr6XkM7D,@, paB<EyoV~W%(Y 	Ꙃ*-KTݶZ_^"/PKč    PK    A             4   org/bouncycastle/asn1/bc/PbkdMacIntegrityCheck.classUkSZ]FBU|]BU	xWjy(PvFJ큑8/?qTmfާgu/_ IIv9u'_Ocwב,hުx-[eέIӵhтi	ă [){UG]	OlKf@,i˚a˥V)j(zka5Y
Jfb/W
eqḼ~4=l@(HkL2IԜ+2dcm-&.[5cޘκ)}@Pfs%ەǦ^&V
ھ{f8YQЯਂc
+8ंRpZ`h@C+%h!V$Iy|聀|F
OJˢ# N9k6-$ߙQ1ݲܶLjo;]'@&sVض6s'.!!
gp)
1
}(&5h5(HlF4`56l ln<n)qʹU1JI02DҴ|[ A ~Λ~.TyIٗ481Ӈ0bpuKu<O_M
]S/';xtԏJۏ7%z!1N_?$>
Mw(;X#)6	!l
#Y[ܦ_0ZLMv0}1K@jtQ'5\!Vǣ4/9
O]u<4PKDض0  L  PK    A             ,   org/bouncycastle/asn1/bc/SecretKeyData.class]SPCKCCGXEAH\0:q*
(fSuF(#3xrӔ2(Tz{6no fғozr3Юofe^>;#h.z.g,pꖄ(z˙b~7ا'ٲ zlh;g:v9C_0ޞkm$ܴJn^)w>XXF.r5<z>ةL6skS\NUyń'k|;p+
b
(UpU5.?4D3["u}5^qmo9z3*Rz+|N4=1)c3w/IE}mڷ̢̠tI*q͵ݘ|i
nkv0
hTpLq
&ѥIF4S*pWM̨Ǵ4UBJG*`J}GܒE?^WNXκ|&n6h+#{Cv1"oTؘ<q#dxv@Mj$)|"H	pm=HR{F=mAa|GbD
Ud*B20
0F((
"M5VjM:S	=پvtv1ZU,$ PK٫!  D  PK    A             -   org/bouncycastle/asn1/bc/SignatureCheck.classV[WU	LrmR&H AAMM-m(m¤L蓏}ŵde_ZK{'CI99?!<xjxi8ե)xu;MmKsY'[mcsnƌ9{ t46m:bk=P02YhO3֦@3/mYm$N;E+q;afLÝtd)%Bu7d&u,wuCJ0&Nu,;Mfm#җ3""\疎*OIOf1k=6Scmf.=vr;[6bOƺ@JO6Wt|~B'y&Gߢw*tyqQH0g}OC;ֆRJhpV9	%-ႄw$+!$=	%/%WOjwBHG
xvjV51EP՚a8ɍdt
Q.m1U3qSʱA_U7gW0kj=:o걌nc;<Vk׌ԩ{T=ƐD'^ҟCJꉢB_Zs+( S@e)Pp
N#RQ&$aicgiBA;&f>kA_0nȸ/n1ܗуd)#9ÒfFy2z>,d4)#oeがܡz:5M~8JN Mѓɩ(A'	&") vGE%{/`cXsOo4v7[@@
ΡṽQRC' M^"Τ~hŽL}{X#\:*n<v5F W-T9ň_",vMFAζ.RӴ|Þ.Zc8x4,`o{z=~o$~݆O;^.ih,bW&Bڋq^b)\7AYyOEBh*<	4R}$
04>.V+ї'bYzj<>B7TZPK~iCB  6  PK
      A                 org/bouncycastle/asn1/cryptopro/PK    A             @   org/bouncycastle/asn1/cryptopro/CryptoProObjectIdentifiers.classWU[\ڴEZ`ZIf&IIZP@	e'!ai+ڪuG9zi"{sdQ~洋nNszNr!NqaN8=©SSIdpprq:ȩS!Nݜz8=ʨc
Z:uZQftPa@,!:FFCs"J#[(3Ũ_ŘP=&`xb{S3jQɌgyQʹc2\(1KMbDpV-Յ mեl]ZJn)[L2YٗSlJ?.֕PJnmoN7Q+meX0-F+GM\]Ulv^oqO1K_$%6\XjcCҤk.2[{f.{v.9ve97Bh$7g[%ʕ;֒ey;d-ԛxř2:taK͢[
-k ~f7-mg<xvuR@pA000'1 '	`Sip8<F3AB3i(s< 8@	X\xypx
X^ ^^^.W֓Ed)o71QΉ?vjֆ/s\9gT&TU9rZ)ULT9ʴ*UUyB>GUTyLʔLF>?5?ɚne7ʯtuoMNC~
H}^w
R~(k&@ހ!
v_@ϡR?n.E{;m.BtԏH}zԷ[mz
MuNWR_PK  [	  PK    A             =   org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$1.classTRP" %Jo$MFiD#+)I'	(o Ff| q2hEv=?} Cb(XQpMKŊ*rAjTd%gHB>HlH!\Y!`pԃE}<]$EQ(* JQ˂JrQ@qTThCZ_L˲}#v<lm۳g؁ف7DC
ujөz;wױ-v1kymznVמoɢFq+vf_v/Fklgm\L' `4
M7YL6;,`|價gzm	3H$
)㬄;`D\tjٍ;3;0){.u'hӷj	z|n&/q˟Inrp8F0TMsC& cD.Tr1LAaJaBxЅ*
#c5\U;veǱ=aSOz2Yc3 I8G0a6>pu%OzV:!3G*!JGxf:j3ucLoe2X,}m>h-IZq:B[x
~PK#    PK    A             =   org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$2.classio@mNSC!@i@ӋķMz '6׿>
$~ ?
1N hIJW;ή>}/A*Th	k3nh
]q\t\CئZMךnc9h&)*tsW k+pLnxT{*oX
np6fC,]ݴ._pB؍]4G8!,
!TuuRLv{v~aH ,ᗣ3QGe*b8i"ʣ4#A+y4$e(^O[WӵFOq6Ճ,Vav=OӤwiX!Z@l*֙o׿0VE?G!Ó8˃8'Կd:ORJ8&ḄNJ8%4U{8ZQp6M
WRWRQfk:AܪvZܶQh5iօn}?|w@He2@w}4s_~\!cø(c0GP10[8b0sThc1	)eEhF)
a'k)qI2z{Y ߎ( ˢ')hԩ&0x4:HwF=+AJ݄&˟Q}8Wa {d&.8 |ُ\+CŕϘz807_`9CIBIZPK,    PK    A             =   org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$3.classio@mN-4A\PEqM
ve_h?'ҕvγ3|[ee)R>zc*{4CUYMpWSdrTWuJ]'8n0LId9K٦fʒa;65OwT-n+,{;K-_u2-Srk MUL0-I]Ű,7Kj\@G8{tN~a_۴Q ,IӑuZ/L e0i<ʣ4#A;y$$e(^_[,ӵv$m7'/Mdy7jY,7zI7WTYZ"Z@lj
֙?7VRC<ȟ6IAv_
8!ऀSN8#଀s/oyԎyB3WR׶RVɦAnNܞk~}{@ MI'.tGN9yILw6VDE#bq01i0SDgET1W.*V0fP+Qy*R$Y}8&GQ4YcoqneQFqJ/0M*ѕuw=A	VP%LUlBu'LTK}˥
;? `p}UFY	si:3aޤYq$# PKť    PK    A             =   org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$4.classms5v\C[<'Ilw$R*N3IPPxu8kƽ]V&Cg |(=;3t %.ՌVZ?ރ
h4`k+
xՁn7dVjq(FP&}Ob	r$\VH2"OҞr)gB2.k	
#W3<*KBM	%$b{J0ah:(3ǔe,04pM!
ߧE7qhu$%K0AlUx6I'udqj=,O
/TY_Hbu)SV2(ՄpqJ"˴PbE5,hEߎC*(O21Gq?H$/P0NJ},wQysm5\eY>~=LGGqQNa\p?>(<Fޝ/ﹷ?# ɑ?22濵l:/?LFҢ%?I:o:Sw^ޯ\!~z28ɷ=ok՝eiw|힎\ Rk6I=y[]]n"' W2KӁ"З_wa-t[p2oBamT[-x
>fۄU`	*#~ oU!&d+4+Mپ[ifER i
ësB]Ln2uoSh6g`{v)liA3>9k?ހ1I5{N	\kU#Sro5x<O%fU{W`ֱPKaK  J  PK    A             =   org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$5.classTmDKKmC)W{!wJ֫t/VܜIRd~'z'*QqR
\!<3~W a:,ԡQuh:0vOY#Hx<2^ĩr2ÕaЋT4J.ՖrK!qz:`GXE>5 Yz2#&B%Ku#߁SW鰼ZP.#LmZ+*5pY*IPsyA(a<$#EpBBற4"iH`Oy!Cؓ0N8	/=Ii3"%)'
 DK+80c1و(ڄ?V~eN/<~I^ `*&Y@&꺛%eY>(GI/.Rl?zF]߽y)A1r}WQ/_Ƴ{IŨ,-8-v`qݯ]wjn
ޫ5[Ə	^72$;ݗV15嬈n>t&Fq:,a:x9rMAt̬0-7zti:qd,Ӂ*'~ݽ݄&LN5MXn[ &&*քW
*Cp	XexeDoe!׀%S~gLeGIy?sy#M\H
$YjFa9<<W i7,!*Xnխ,tg5ᓹЇC9A
}$pVgh9Xuv;kkO@ᖫ`[YZ_? PK|d  S  PK    A             =   org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$6.classT[D>]0
xeYwf/N:[\Dӝnj/VASXC7nI?ey2C);]_t;_g? (\oۀFl)滽D"i@'	8gM@P0!OexkikĖFAH"+Rңc̢1cPzBzPb,2aqmegDPhsB#KJP&,cE(OF1йfRClFB3B=B8Zޫ\z-FhB}Y(*ciI\xD3kFA^8ye}lx]`eN
4R}x:pf}ɽJ	ôwɠu4b/]lp8'eF~yk7o;(7Q@mByl3_F?cF|<K?{IuЌγJ
e6}At]xǅw]xυ]8} hx#aZl:p{xWdwbVr$oV(n>Ӂ/9Sf:(66z7WT~~M׽-x>jZpoJޮZpV[pa^}_ׄj5&,mEM	k:?i
y}Vw=Z7,-8)˴D%L<N4\ŧ2!,{r@c^8+[ۏaZ{9_ᓅӟ	ݿ\QZ}m#y`!\yo?SS9pqg	c,PKH(d  Q  PK    A             =   org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$7.classUYEΆQ`Těcp>\<D"8QBm5͟> ! a<XUY_fǯ]vׅ]w.X`M	%r8w6gI`Rt6iu)+!e3a<^o4/H|PeVTS
ٕKst,Lb.&M(Mmd<cFxsKM,}&IN:Qe'T4FKaӌeG>kHF)%DLe(!JF@6h4C$gVRnc+*c}(!i90>&HeL[⵳=5"$Gwi8"c-<z%Aeo.\ڹ }N$TeHD#Nk!3rlJ2͵RbXDMbQ_Ϣ1Wre`DG'묋1[	A0}YVr4yB_}asxTWeS;ݪ3Ӳ.oWMUO^5am9j&u֛azS9ׇLGF٬tLV3٪'.^9\Em)n+=svMId]?ְ0Or tf7|kxotՁ;N/W-gx~iTUZŧ]-kENC,f9^^oS)=Rdcܬ,tӯ}%3HeP/<~xG\Aa'Z*,,a +>ﵻ!҃ [Zczp
DN=xXkx΂_0Yï4mN\[tZMc?NDõmK9t
>˃Gp`?nЬ=.X|L 1ᕕ\w C#8}s}8hF6I ONl¡?PK׵~    PK    A             ;   org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves.classWwUmaX@7@.4aR)V0M!Nd}}Ph[ۿoμ9d؞~λ߽ͻ{I 
TP`
)8J
Q0_*8Nʪ%̨l̎&q[#)kZ]mm2d76$?f+i8?qk$C
uVӸked_u3בϠuHDO֎>"4zSoRz2nXfC]̈kgDx4%AdTxgF޸Qާ^3ٷQKD,'llVAJ=w斵nЗ}L̣£3ȥ[@tbYEY"Młł,1BT|q<a^.L*	i`|RIB֎E"M|Ҙk'њfhf{v묞!0Ӭ]xŰnJXD`ei=	tC!ٳ%JNuҌzFd0RF0tl<qڛqZo&&K3Տ.asVl4$I-	N:nҙ'bҙltJ	xg]Z.KdnL&,Dúih	m&S)K3i\XP9Jz]\ҋƤtiZst~3p/K2ΐqddNzdl"lhIF2e+c	Z=NveeƠ8ۧj]f+ִM͊'
JX{ie!yN%./ƪ!	gyT{
wRi<(ٝ|+rz/W}Q9g߫	yD{Dz/G[ޣE7=hv?NZШ$VE*3`gh`Xp*kHpns`J)	F9,KЧd*jTXE%LReDE
U,¥*2KqŸӮ,:n`p0p0peM73p+m3yxN<C{]xqg}T	'bx^BNΰ!̰Acat<CC蓐qi1%TݕwXZMZVF|P').A6
Ʊǰ{M
[H+=IV";z)#"W]l?Gsz0~<(TA%MH"6
q<i#e4 hJq6TNk]U^Ň:P="T֚!K ׌A*r]#BU;^Q&M{d:=
bn:"hmIoGoGgt%ugI~
I]Yҩ0iCd"
}0[6
be':,>19{2e_d{DNo9a.ƗivJvu3M2I޷ih}F:O{/9՜BFylT/84/t6޴q]ڧ!APl
e6Fg-6oHx\W~#\
ng;
SXMPKʛڊ  y  PK    A             B   org/bouncycastle/asn1/cryptopro/ECGOST3410ParamSetParameters.classURF6\d(@J/\ȀBCz	:nJ1UDddC-LcL>Tg%)3G߹w=ge C3CC|h1
c)'-zS!\ߣڽރ>)ryv))iY
ϝ`PZ,*iK{"°e)܂[bE0Cn1('eg'"[C	Ha-gY9SoFҡL:OBfr=uN8-^pƌXɺ9kuRܔSVϩny>%-"lZs3ŜwݼWqTN-gyzh+k/{~0*$=
+RЭ7(xWAk'o+ްO?Wf'ƌe_"za_/9Ҍ^^ խq:	ɼXAΑZs"yk4E.e=j$^RRͷyZ^T;A]
%IpKBIhШAØX[a@B5RDC;>g\LjhZ``ZY	sRUƢ;x"G$|BVU$$aYŰ`EºQUʷ&VusӖyϯfzH*T#9[yq@O_9	2QH0
U30NHy
#eTp;SA<Sd%d~,{J-?)!&|!]!a$22<Fz&G}3{c+0~._3RQ,(aoA
.K$d#Skl[vqZ]$ec,<2j26jx1Tr:~n>HnFr+ۑ!Y&PK?a  3	  PK    A             9   org/bouncycastle/asn1/cryptopro/GOST28147Parameters.classTmOP~e]q "le0SP(qbٮKqkg) ܮ(P!nɹ<=?} <k oxsM|偦M׬GI	2+݂j(O%U/Z&D6K[E>-
qm;jdiXR/噩rNG+cys0-wjʱZxZ/Rw3ejzV@Pb
ZH\	{F4bxbҞ:I9k.
X׾fjyv"D\qMDD/>iCnA=Y=X]oF)w)5q7~ȵI}hY.9Wܐu+Ǧ/|SӣsS]#`MʺͲC悌Kzso!2dܖ ÏhB+!a"(2|&͈!ĸpq	AK{恄LHŔDIn%!G'vkޒϕ!"OiU>FM^ |JwsU<-8dā$У|G#P Yxdi{10RCkR#=U,V0Jt3
|JNydɊg^-NurɭP
RF+Gz98LkN'$xLk PK)#    PK    A             =   org/bouncycastle/asn1/cryptopro/GOST3410NamedParameters.classkogx׮I\{Om_bJ$!nͥ1!8IKƘeJ|֑@*RW}яOPUͳ^ml\f?s_E$y#ȋ9ޑ9ّ:r#y#V+Zcjդћ3"V%).r}P6r!j.~6]Ւk
XJp]	ՄևlՕTL.&+񳈅}Tg6KcC4kpx|!Cޔ6ww`81z`.+OL
)L5΂.Xl"`s
GH%p4Z
DKjW0U\
dp:kpfs*m*<Zkbުx,Pb7&1FcO9s`5N^a	C
r.FA
堝ޗH6Y3Dy9&!|L(ExT2`F	}ɶB%7,VhX.A'xphGB I,x$`Urbja,NW<(GOnQ-bLU- >pVXRwT475EJ<kX%U(3- 
OUh4y .@%`PBST3S.I
/44L,1G
H	
$	rZtE%bZm'%ĩ<憜xc)҈x\ Daށ	Jn(=-TsbSFiR7!E?&@(
rjdL9iR?$g=@
xjD3$`E{& hb6UJiU+KjSg- Ya2
dk(jJkS_*mZ4"Z[@Jt0`BL<qrJrϕڳo:.U-O	ck?G jѲxSXp
&@Q)6
3+t +s[i`Iڿo
u[ڊqҤQt/d*j~z(9(LO^9}S^@ST@Mגd((61hߢt

x}f{%j?xKxF(聆6@&kQ9Iv؃#/q_Ph5W|d}iC&[Ui-_^_
.ds5hsqckŃ.n/Eqby_.W{3^zt{ܻén>]wj{
x^ݙnuҽ2l\Z[zlg>>;./zh׍{s+Lll,m</?Z>fv5;gn}_x̮M۔\_++7[|^;lzc`rx-?oT[r-hL[LKNlKޚvt?8$ya_?6輹Wg7Z~Ɵ/aC7<.}zFޟ߯fgw֤'-?Io𚜟uxCrL_N0)?_M˺d@9~=.E}u:!^Mu	@B80.qyS@~?c\NlP;74V=D~g8/_5ٖ37\:وcHrqG aZIg./`іjؑ?6Zy盞l/p4kV'rK;[ܝ}T#TCOͤ=</哽rGFǝdl$^H3ݖcYY|-.nmgh>·PK1:~,    PK    A             @   org/bouncycastle/asn1/cryptopro/GOST3410ParamSetParameters.classU]SF=
!Є Mcˀ6:É)!]"e:i=Ӧ/}$	6S{t޻g]ݽ LoEx"X<´ܵ˟ /3[ɮޞ0r{`$yZ
 frFB+9iv>s.A!?Z?pj-xHZ_3-k.p桄Hmt9ma$mn2{3KS/PR[µP,ǜ-Yv{zoz!%"N~l.HHo%84XѷΊΘ>]K9g[6_.i4"cS|ăhk>3Ycx-xJod阎{J/ڣC]9YRnXTd\+-}2ޕ~2eܐpc_k2%xb񵳧h+Ѱ:gN(?Oc.賖y7^F,=^zкxuE 3r!j@[)L	9&4L(zDHy<Uf<yAB&~$-H{7yLt>/Ě!hm)M\Rт&1*:0|*>RqK@>Vэ;b.LP0%ܻU3񹀙6c^@J{
XV@FEIJ0XU0/<P# "+kcR!5vasn^|y9}W:>3vXaUt:,FGȶV!{G^.џ派_=teD%ڟP?0Kx):ϑ?ZsTE"WE2W02+U"a3c]`.J4EZZskU*q0ƛ78?;BӑR!,cgI}25_(r6O;5+AUD1gX)"R'QF$zN4M2ES.c|1d'jbK?V`anFxcd&PK  )	  PK    A             D   org/bouncycastle/asn1/cryptopro/GOST3410PublicKeyAlgParameters.classTkSe~6$,	Kkۀ
JbS@Q7ζa7nN+u2fF/.	4Mq2y=<>LB@h
	X۳U	]e{U팰%[K"oB6#9QseaOykdQmŲ^M/$BNҧyJ+{2IVwrE=$vk.z!k'Y'ǯe'7%lt\3y"SjhT(4müpz0jZZ"gݼZ"D2sgFc\QlP%!r; 	ʫ(׿~99C{jgf2+uRusɢ,O¢۱x*nPn$,u(X=߳/Q=ɭZn2^7d)㬌s͏qq,][uƶtC+FWH0)"Gս3C*sCu~*F
WɩqʹFN[r-XNJUM/V[(m_62aecgx<|agэ0ڡ#&3L;q	20p3H-AX`Xm2f!CC7gוe?BO>9_n@BAX;#|8$ãLR0SDCy=D7#l=$|Ms ^hs@9ħJ|>iN>fO`밯T>Ǯ8?l3v˿6l BV	K?cGwUG8
8ރP7CizNc]H^TFiOycp=o*uKp]s|W<sƛtCdqNsu,.b$V0?nPK  z
  PK    A             =   org/bouncycastle/asn1/cryptopro/Gost2814789EncryptedKey.classU]Se~lBڏQkCX6taM7*g]oM3%Bbyl?`^/
)ь+Jtmߺi>{dHBM<eڦwK@sBZ.G:P0lu˱
aN3r}yÛmҜ M.z=ByM-/imA(D[g,kV͗
ۛA7
<״%.U빢o8%[ѵgqhKǩv'mX
Upkn\PZAHkޒdҚFęŦ#-i9[4@攓Gv
Dr|b2yy	y<ӊ]Wۡ'>>OH9FΕ-.u[3"q^Ġ!D+L#".xO{}IRN+KEn
;X#jcw+y)f!Ə9v-ȯU]U
LދjjA,iStm*Q1#K	g1\B	!fGYȸ	>qI`0֏d[3fHGY	
K.<Td>c(>eXaR>axkJ3	ױ$acX>/'G'<Mߚ
˼!FCaϣϳً.\DjX"Be{xX/͚5Uxgx>=OqVhv]uFPUD|/q2+
9'Hx
DH_Ba:hg輠D' B_

~@j^#Y".cRch'ψ(
,LL͎՚Iz`/WD
d70d50.#0L}*lOs*YYUα_<iǳPuZ]l탉ќƤH PKy6  n	  PK    A             B   org/bouncycastle/asn1/cryptopro/Gost2814789KeyWrapParameters.classT]WWC&cS"ZDc,-h(*%Mא\0N&/ͷZ5a5kCSWsj	)ys_`
a'r-\'Vx._㵟WϚ]ǻQ*ΨTMBh9vݪxc/;菑>gW=.ں(zY
	JYH~)HY]N,K
+k/Vt	#vyfZ%JH8n9VѨzHU;數<dYb;čm)A?JDL=хmKŷ5:ΤK;j35,:[Nջ4|Gl=tJk.f{3Tu-2$9kn4a٭2Pў,aWb2N1,-#2ޖqR;2NqZBrH'{IH=?0JſTgnVz$"'p$jݪp
n9E'1ٵafmqӠL:3=VgzVRG{cPqTA0*d)ЯB"o/87qIY70pWTDae:$>b>Q09[9
&pᎂ:Eq`TAYK
4+бPлpJ{FqQYA-&)*Ї(wJRۦU&U
	i#z߄bLu;95=ؒ
>k,ek\B+Qs
<%`"7'#)S8uj_$gHm"M$x-ma|G8A/YӥgF0hDc5{HLmr>wV.'mmo9O1vbgObP/UvyބV`"izÐĤL PK!p
    PK    A             ;   org/bouncycastle/asn1/cryptopro/GostR3410KeyTransport.classU]SQ~V#?KKDLS3[atvWg/h&ŉn75MYcdiU.<Ͼ_Ϸ xosplh唜1OR&á=+qE7$%-Ww䴱hpUR(i8oș5|IW5cCҤِ5_ղ]PI%ؗw!RP3Ma[vð5$)<MGA[R6+g.Լ+b#Z83Ij^SnLEB\mf07áIW!fW2zB
iC%۸CţnwytrK0QVAzBL- "o'n<aK&aj) xѳfRNl"KIGRp_R%6
=55^D_n'k7ֻriI-ר5ܺoi]xB L-r	/[3cόx<`&(!faR=L13+>"1#` aL<mIXGҐ֥w&|Ys#o
2iES,aQ14gX=A؏O.Sg
l`ƇOx>UOA<OJ<b\uR41ZQ褑)4_-T<iXq7TfT	"^$L@	)XS".}j~ꃿPKz&^  c  PK    A             B   org/bouncycastle/asn1/cryptopro/GostR3410TransportParameters.classV[WU AA
ҀkKJ
ː0N&>'|$,YKM.uII<|g߾}&߿
`7?p^B?8Kw
	^yeyaM	u$tZXА0mKHhVJm莾.+b]89]2=%3%dO^Q+VBvK"᎓M3p3=?\[paUCnBQ)wRua	EuDa&BKvJl%k¡؃0m'%SS|幅$%hG&)3cؗ*BTby^L<
UIsz*%)^,M39{"h_YQ2dȱ<o*cw62st+כ
:T|sdz(bNPZ%Ⱥw}gg~ks{fcp
4A,OWwZVoXt)rWF7etxKFe#㜌2ޑA>$LU?ee&`CNNi)_4KAf~VWq3<jUDUTp5R.
cV \/HYo)U8[Fk,~VGVa$LWBjLD	5W"ƫWYuJN}Y>x*ZwQ	>oUU\5^Wq7T(c7Y{[E0L2|pcfDpô?)SyP!ư |`_)8ΰ !)㱂XT(
}%!
ݶs}==o4-Hn>*:BOo6=hGB=]ZŲ66ow!~#Ems4@!z	y$rGLm|p)Sۇ?@<]d/9尚omCM9G!ZLz!z^ѤȎĵ=dzG9tG%Oexg&^wS imrg,_D	u@AꎢԂqE4ziC7>H9X%:x3`(ؤ>`[G<LPKP*y    PK
      A                org/bouncycastle/asn1/gm/PK    A             .   org/bouncycastle/asn1/gm/GMNamedCurves$1.classT]oD=N65,Х$؞;IIk=PHH-Ofnmld;^EDTETeCsf3;ǟ!nBoلĥ&L
˝~%1txq+9r9˘a(%<;q9L	ɤ\<DS/8q\	lD%l
wI?21tcX*Bz_RՖ%'Q0b8cN5\=FծҒS9F#<%KUoG.s]@ogBX԰$`$AZmqwH\iR8I5\z_&ErViQ*0D8TyY{Sn_*z$*y1͏OƩc
TÉYv4ܚO[_X<_xoAxڿҁY7^Fi7$coxG5:5\lͻ
/RH/hiq
b
wέ@v^.PGͫGYXD|0?MX9GL\oconױa26M\V3!Ak`5@3>1pV
6|

r
y~Z=5,-8)˴T"kxmj !T7ԬyeN
̶wTTVZ
%e
gh?V+Sge­Vumo)nw[vaa}j:ŧӣK
#5Z*PKp"$    PK    A             .   org/bouncycastle/asn1/gm/GMNamedCurves$2.classTnE=8]wkh1P:w	ٺF7
4x 
q׎DnkJsfsϽwf5 <::uXu\a`cy"XXDw ցؓ^訐lh stsbO%ㅼ'<%\%sX:1x{RX\:\NTȄdZŜžuYX&+na>,w)VP:L܍{B* H$QW!":<4EXDE#
?/^BN*:T	ږ}'XiM&-p*R2SIf:-ң̊	YO~9.+kƭÌWOOR(-r8٠r8O'(I%8*Qb]حԟ"H.ȼ3MXPַ:o(͓ttb]fb&>0k퍽yc`}{[`GncXmgFi>)a>yiIe}м^x$"(?d`64px6NfWnMl4p
\VTе1p+*-'
0-TSC/?O.@ngI6!5
eTHZEA)vjloNTi!k.75up{9Z:Jۿk5q\l`|qXvK_lYT:aLI5̾PKS!    PK    A             ,   org/bouncycastle/asn1/gm/GMNamedCurves.classVkSg~
BKCnBEDlQfMp[{_mAt3MNDJ|x9_~p
?p2XqZ©[	B#Z0
jnݱX&vϛ.hf\&ּN^5^mrF׊}ʱm=kUVHt'fbaL_Ts:[	Kjh59>X"3w?Hiل|\բSGlsŻ@:*y)s#	T箒0r)s%`{\v2wu6Ol7ٹTH)Ų-iuE͸raj"LeF`=\A<$#vۄ>YJx0}qH14\[
2Ǌ|{GHntMPר1q܆yzlśRg.NSMۜb[IzHP?k$KF"xQ!GE$[1="'`w:`)'
jM{C?{+!`wMNf[cM2@>'W5tp{Gu}Fu[Omcw5[X-B7GƱֽex--ܸɬ6j/50NG00
g)R[/v\qI$d'd@62:pQF'Fe%>,yhCJF^u;0.c?&d{S2Nઌp-n00fx&-$Wݑ0 frD=<CP0fC#$EApY	⮄PlK7ܤL,yնK>ڽqtT3!I!.ݵW;U`S,I\_}ʹYٙHt>ŗ}j_=TNkTuT~_
̶Gq|ZrCD&+Oc˵;1hm>LG(rPFӟhq:)bw~l=B4P֏Y/z?6Mol2mt;a=\t'uuqyH;<g/WI0v@$2s	!x\aUZZUT.ʁ#i-v	UW1@һO`פ5j`
>j`
+pHC~~C7PK  
  PK    A             2   org/bouncycastle/asn1/gm/GMObjectIdentifiers.classxe!@^B0P*"bJDA*bC-❽*X{`;UfNw7<
ޙow۞ u2`
2L&1Mf4 iLәftӡL3f14p9Ls1gZ#1t4ӱLKc:Nbjb2s2Ř<8oQٸ-l:;Xg*5:-ֳϜWJGHwt)5Cj@P,m.j/ڨ֌3uf[jW!a0,
8,,UMW
Gtu!BZA#taPbAA(^k"O5+5(l4嵘dk%q#+b	oneѕh~Al-6+R^[h.eO_4.̎|biZ4dyݻsfrIɋyfVbKc*;amv8~˶gdGw4e}/L_F~^9j\0.
#whhK[bbd0>w5{5!ʆvȵD^Mq;}{p;9CLe?v$tբ[嵘anJ[ދK4,sz\ΑR-KM,JjϫGU6k1KiU(aà<wy+t?JMC;nHiV~{9fHa6Sݟ> P/)P,9nR	Ng*s*h3.S4\-X4MhxҪ|m[\˜*;
O^<Nh_mL8SCKnnѬ@9#uL0-ejfjaJ0-cZʔdJ12L?`2tJ9~d~oIr/El"<	zKW*zځSӀӁ33ssbR`-
Xl 6 7 777 w www  `30
<<
l+Jj6s/_~| {?wC#cS3s?/kA1>@ @T!@5PÁ+PkD-3?gP-޳Zl5oѼILS5<]434|XsV-hޯy&{4ּW>4|HCs惚7h^y:ͳ5ܮ9j^yj5k^yZ4׼@]v4oռ^s浚WknмFsFͫ4ӼBJIcA+!j"*CeF}N-:q5ÚYoufk:Arу,:
:@t4Btw@ѽD"'JX`ѣCD@ECkD=:Ltt,nCt6t螢sEC=:\ttW#GBG.N
=@Ԇ։:-:Z/z2yǉ?SmI1@#::Vtt_N= :^tth=tѱFk	}ş̹~,OJg?#>ÚO0RϊON<$xX_oI<"xP⯊?l"-PKgk  E  PK
      A                org/bouncycastle/asn1/nist/PK    A             8   org/bouncycastle/asn1/nist/KMACwithSHAKE128_params.classTMWe~&&ChQր$ ERH	%F8cf0ySt?pƅɣ;3@kY<{_ .KF%4D+|dXjdV&[|4F<Oƍe[e2}s5Zg򫹥ܔ0?ئNRΦPcDɲ
Hh!E.6LO_k")$4dS%"*"k!ղŲ^A==^B<S,,*-
sJ:B|ͩC/p<Nۆe
$,	p
߉y96ѤIhFVYgfo-NΤGVIc}ɨ"b<Y*H:/GfP2uabC#JP6-a3#WEd!#,OFἽ)`ꩈuTToq\IY`	i>?_]KJ1g|nzIK>IP&ΩhEPqAhP!|Qqox,p]y1~30
L)"ɐQCI+"0>bfS08n)jaF0nҾu֔~9_[KD#}ҭ*bPtV"]	
.'@gVçZSk?a)n1ɧ^"bRbLIQbJl=6BD[Cymwjw7P?5G8mb1Z;w_a@|T1gkpϪ{=A
rϠmf^OpMk	}_w /N4K1$PU߫NFKKoSwh^܌:rYvD|XZjXb}mZ_=jX=ly3_FVBqeHnx9[g,xPKW
  9  PK    A             8   org/bouncycastle/asn1/nist/KMACwithSHAKE256_params.classT[WU&&ChQր$ ҋ!.%F8cf09m<ه҄e\h_|7Խgh- 9ow~0B(!f\\.a)Yo&>3m6_lzvrqJ_̯2$
`àFc:JY8#]X%.H*"u,t0=ini̒!LQجiĺVKzbxQLhbTlH?0M*!
Ub
,f\/dnv8mΚZ4(Sw47c`'|4ǫC¥c(\^'o*۠&/:"u9c[eIzn*9zmeS/4W**ƓԪ҈z~pzd%Sf),u;<Bȯ4Zp%k}3 M2zd8/れdep.=Wv9B۞=L=-k09.R<7-K+q\I)F┖/Y8~Naz%T3*ZѦ
T\bhAPE'Tt1@fhG3FTû*^(W81ߌ!1|pSA
H2dha! ƊH1(f" 
gV0[)g5<ErN3"/"Ftst놊3gPtV"]	
'@gVçZ3i?a1ɧ^ bP/`uLIQbJl=BD[Cymwkзm7P?5K8-b	Z;~w_c@|T1gkpϪ{=E
rϡmf^OqEk|OA^h) cH"i%딿WK;܍F7W!Rߡh>\wi^܌:rYvD|XZjXb}nZ_=jX9hy3_FVBqeHnx9[g{PK%  9  PK    A             0   org/bouncycastle/asn1/nist/NISTNamedCurves.classUkSe~Kw	[- Vk[/mHi )
MhhiUdIML6TzwgǯPFg?sv_"q̇9{{ޓ;nE
Z<ࠂ6V𐂇Q
)8.~I2ao@Ý.C]{]>pL8*tQ
]TB79
uq}HטȚf^>gz_ԩ۔nIh .Mh_cM+y	~#ӣ@%@F3Sy=amrŭa$8edZấf(_]Z/QzSΏ%elh&J	`eV0DЭ1M˘3b(X47t@=D6IO*p/po$2)(;f|#$R\oZѦ¦mmښMn[
v>$lβ첞5.i{첟9fVetqJFHFna=2D:b{_zc[WC
F₞,#kR̉J1][l
Ao5]Bf1T!EU}_*ضL{QkOvkOۦ4UEg1<000a80438Q\RqYy'
/^VeH4`
Ia!p`gH3dL,CP PdXdxCn0<M<UzDI~--r'㤽@j{ 	驉X"ç??
Y|}hq_W36>6\q5!uL
:i'TQdxO]ň
Vϗm.I5nHIk!"x<kn_1v\BV Qt]Ì8DVŊ]-;ؕ{*[K6:3̒=6>anbf*{yw3m6bVmLgy]PKk,  V
  PK    A             6   org/bouncycastle/asn1/nist/NISTObjectIdentifiers.classw`EC(E1ɖDP	JS *.K$!
{7	

;ދ<3/_9x~ϼ|߾T;UWiVݵzXTҴJ*UPVa2ԪVYZekV=գZ=ZjVCp)*OZ=HFiVzSt)/zt`-B 2@&@YeSY@j =JeEld [
Uld+fXbUU![cUU!VXbUU\*̪0¬

*̪0¬2uϔ=SL35+1O5%R?hy~ZģUExQ4+5*s2x(/)-4{7)..xWv62eV
NUs9"a<4ǿp6H02:4-*;?c1N<eƾc1|2c;yrcq±8X8Xvx,
b;Ղ;-FJ#%H k/QizSmkB۲IʴPme{O{}dkt4p\33띯^	<O
4/;8Ney:gدKy%1
̍:5KbxjS}7өv˳ljҹYkUmfך7
M'3Gf8$?L	D2j~n:#l=&hl&]I꼂ݨ;3]	HkLEJc	Om]۪֧9y9l6y9l1yn/a֓wIZ7[MNFӆ˯Ta4//W?F**MOy[EeaڸXZ4^Hp+ʫ*=|2[
7
zŅUV}ժV j5H'H}D#IOuRC4ː뷛WUY\^ؓq{'?[7Scך` ƃBPPJA(`"*AT`

`	f``X`	X
`X	V`
Xց`6`
`	v` 88
8	N8^@58^"x.uo;]qxA}zQ}&6.>!1	)9%5
-=#3+;'7|d`
<P
-!h4hhZh
R@6 w.p7:3x <xtTA AA=@x<AN?VzǾHuouK	ɓ/I<'Y-yJɳ%_#Wr~ɗ%/H,,I,,, Y!Y*Y,9QLJrTɸ4ɒ%HΖ!9Or|93%HΕ|OrdDrdTrRe%WH\%Zra#G%I<(yHr:J^$뒗%H!䛒H-QrfM[%Hn&Srn]J.\,Цz^uQwFT}SS
]VNi~;u;QHiv;}T
JC]u=z-hknEﷺ
luՍV7nF[ݎ6"h#KPmu)]hSCV->:wwܷ+n~n~nI3QwQw#Qwy;s;(1hh/m>,jV;E:huzBn=VVNVc<3HNV{'{Gݴ{rQPQ*P&MB]Tmk*ԵJԵ*ԵjԵԵ2ԵrԵ
mԧOSTڃu7}{[m=u?C{[m=}OY?f}Gt럷>ϴE3l_>rm3um3um3um3umumpjC	PKk    PK
      A                org/bouncycastle/asn1/ocsp/PK    A             2   org/bouncycastle/asn1/ocsp/BasicOCSPResponse.classVmSU~.IdKk!-]JZM 5DUgYVKG'~!8K?:s6!PM9{i|'I\,o;#ҮY
,.}x͖sk̻4]njےY)Vrj)d<f7j^ݑ?<Պb4Ƽz-S\冝1}w*--M-W5+ùb)%-;~$jjvVr,ɺBIr^L8ޙYf&gU+-h<љəL{DJ{ǦN;L3;-)O4)=>Б#[)+H*xCi
(8`PW
l806B{L;
;rI{RoԞzgDOqo&pMw+='*y+0Fqg;z(nGfftk擛b#NPLOAwNZ͟rΓbv5cD[pi
ocL9
Q1D4$k`uä8n0d0@
0UqY9K!1'*b*y|ĐWq=U}$MEss?䓢rZqI=LboHz+%}|Es~ojSAt bu_
9\@.JqF7w{Xk0	/OAJC*xoq~Ĕ-4$H^F7'HmOGbJ9z+i!fO{Ls|-}
7Ųr*v9bK.d8kcW!aF PK0x  =
  PK    A             '   org/bouncycastle/asn1/ocsp/CertID.classWSgZPjh64V.xa?b?w/|N;ɗdS <ow  
ZrQ41
Pxa"4 Er\7'T0W@ˬ;j`2cjɨnLVO?Է)\(;F9a
h"mNKӔ6D(ӄX=T2JF&d	dLlڶmj[Q}4RI|tjSЕJT6ݎj3Lr?
TL$("K:+cIS%U)gA1=i]5fH\VcMCD~&l'_52p_㷔3'&L1񹴱nƦ.]y	Ix_	%\pY	J&z>}fFVA+*!V@*F
Jw%vi.-
4R=5Ck'IP_~nUvԚӏ9x;fUCWښRsnZn `-c5Fd}g8TJ*8o+>dE1(
C2eQdbX92peHьe4ᦌzlHFzq7&YLą>LGŧ,qs, K7uCaUaU;,b񵛂~F?j2o</X|ۈX|F/LFSԢg~(I^^zr CEֶJ")bH끃\T{*=D=hV~|\DҁGc ߳sA+5ER8Bv
\ʥ` d2
v(/A]%Z_RGzW`??ZUp-wW;MNQ;}_nshn,k֊14t_^5ΙS_g*]u鳗<~FS}G>&rt#.Bfi휚<;Os3bNQf
ܠgHY]HktJf^B7	7WIQI*K4<6(.ܽ*)K֞h?6ZqCdؿR!פpXH~4N>H};Wlgv(jDgcxc9:DشjSUj_R1PKS?    PK    A             +   org/bouncycastle/asn1/ocsp/CertStatus.class]SF_aٲRM 1iBm9%M?-uC&ZEUǖi7z_ЙN/H1LM/ڞ1{<ڣG{ή߿
"LJ%S>pjδMw^DHX*/sy	WMNHp[wz+AZU
,hHiq2u]d
^f	`7\f\LwEE(J.s
?EGO+!ml#d|)X7P7[ܦ:cK8s[utUrm,6MNȮ':kϲ=](gr:};RlZV#~V]M,W|1W>?Z6tQq+|ՂA~#ޯ[knS#W]X3V'#aډ
NXmf5!21*Ud&㼌2d˘%,w/Vl[|V¥.\P3"&S/m6K hW7OP*YQZpo	̊έBp:/+Dt_3=쓚1}R3Nӭ*Pof;euxO*.┊xSqT1Bu񖊄0a]1[*`NEU}a(2X&u|
>Qp) 
R§!/̲4
qG wTA+sN~xNSUͻV'D@%XQӂr D㐶/(3@gt=tP#;`
	Z
I -[@]׵th_PpӛWtrW*2,0ohhamg
#C]ШXlCm=,iB@)"\{>2';(-<8F(68% H4BXlzNPS}1D~F+xǫo_{..c!PKf0  :	  PK    A             &   org/bouncycastle/asn1/ocsp/CrlID.classVmSW~D6l Bx	hU!ڴ m\c`ٍ
}q_fNKb?ԞZHa8{9y=_+9rޑ/d}Z*EK-+IKW$ȤeVkc(WweRzl?-cF֌pn-.sfm+c%HqSB=-7mZ"a0쒶tHb.Қ>n쌮%EΘKz=SxvFE
47o5~Jͼ|r.BZgᨑ4Sڢ.U{Sy$Rnmkc@[9TڐYq?/&Q"헟@;;w\6Dw*6I63Vf%cgVge|`tZZ(˝2d.㤌7e%C)eA.getK:pg(:j]vP;dk>}4{\!m?'$Pg``!v`xݡs萇iP_]GVTz+d`e4zkr1N|#<!̫!ޝ[QV;u1wEV["!Bw7Pp^T4㈊xTQoࢊ\RâYPWTǻ*d\e{,cxE,>l48[
 >b1"KA̲T R0;,4CXT0!,H*0>Q0g
G?nψ	3/IDR};4ZryZܢb[ă#\Ҏp]'U2i$|C__`@H:,RP\st_{C'nAl
9JKHqE*`9X* SDύ?LL#y:GFDFH2F~8	T9*t)">Cs	D	"nJUr/ݏf_
Jn?O^wm7RB8LO;|>xZ2u[0َӓrf٭bb݊	Sۘ,W܅")ZJ8zxUZ+L_{yUvg^hb;I*<vPKUZ1l  
  PK    A             6   org/bouncycastle/asn1/ocsp/OCSPObjectIdentifiers.classmoPQuaNȐ97LHߚ
)i;?-(yj-jMi~^l kX2p@
Rյ멮}]M@rCŮϕ0d`̐Սș¯MbL%Bc%F<pRS.C1%T-_NdXN+O<%|s˞8}a%1`@ΞHi.W};"dΔ x䁪ǝ7S^RNϑz}ϓ0y;"i4k$)In
vN~-W섾lMEX%HX'l6	[l;Ǆ'P!T	=BPOG<xڞ->X_B]!8qnYs5έ87,D	,}ں5s4r^^I:sH.DR"="5"=$MGPK:    PK    A             ,   org/bouncycastle/asn1/ocsp/OCSPRequest.classUmOP~ʆR
C@^ *:D^`lRY!7L-Q/]Ftɞ{ssN۟}0. ڄa$jɤn̴	0ll	{³m۰Lm+jL!R#-6ҫ]=M&"g֮H`:42o&QkG@3E@3%6I1-ғ'j=WO9gZv 2].e,qqL$N.e_vyxgƞ.A,Qu7D4)10Xxj
uLԪܰ<\nJK<T>iy!3WڞTJKD*y/ozW0sa7tR-вU'jʢȐ-=2Z p%CDZiC?àkPCè6<bx"cn!c Ä<ЉqN<cx.f$xm9CcTCBt:ѣf11cK@
ߢH\ 
D^D|k?Yiw9,%
Ԉt#pJ[v:p&)CEhR	uCxjx2x\IBP~t!:tq{daGb&g2-Ct.e@z>*PKV+s+  '  PK    A             -   org/bouncycastle/asn1/ocsp/OCSPResponse.classUSQ=OESBL-uY
P
C11gpҷIar/~oj37s=ﾻ?`L3
Ct"giUZHft5
ֶ}:C;ִn*t-qa)9S鸲KFjF5(g1Mԭm$Sicn!/Ð1%}FGIj<JjՉkbÆZyhfW	ë0,Py[B˜I|$6=ūNO}M(EU@66:`PW2ekE\LdZπKԺei3P7y.BFZerf
bCMBkTzJ
n&JqRuOwNř+~}GdױU7\
55RsÊ.XщA+0
CVXpOq0jE#d.nf80!9<ыI#^"x"S"E<0#"ZHw:1H^5П|: }0hX]GG}4SKDbt9,uEgt.39*	
h"uI6^<̧w2I8>I>P>Ë,^r>~14B\"\!CU})n8q%gr/b6YK~{ĕES/8iPK!ҫ  f  PK    A             3   org/bouncycastle/asn1/ocsp/OCSPResponseStatus.classR]OA=C)`QDV\Q|cRˢw[BetDI2޻&`6{f3w枹?}
`"`a:cAQXbf6J榾c+UP,iS_HZ|^JA Q6;%!]Lv`~ ݚ۲"'֝8U^z-&akwWU\ցݔ'0_Vݷ9jeȠoj:NݢG|	0a2p!.
,s5t/v NuIL|I)(Mias^Cuڿulc	)P0Q\ټ7Ha!bXbH3Ib1I5q{ag6S{)ra:gqbFQe>I|_!S=|~~ۀ֨${ĦFGTg|FLveXTqW~DI70)0~G-7 UU?Cm$-Bse0@[? 	߅g6lŝvWq(ƻ(+:aPKWfZ  h  PK    A             (   org/bouncycastle/asn1/ocsp/Request.classU]OQ="" H!nEj|H	Iy[MS-v	5HbQgEX,&=7s3gζ~
`lnO0vw0iWj
SգZ>ZҢ) SRQNmv5웚n$!I}U
s[>
/
h2nnk뤚L	tXs)aNkMZSq-VT뼜8X=䔥;>Sp}SeI_igTZۍ{Lr+ě$j%8$I!^M	
n	tZ_ςMbi, G-ê7e͏a@*˧}>\%]fz,y{;m{o[$r~jH`*㥣(SqfΗ|2J_SxDKQg݁Ft8ЄN!怄.*}>0x|5paaDFebT<`xgĤvLȸ2{0-\2F?7uaS^TwB'1Z!)rFk=O\E@4䉶C<%T~D1Y,$VXܨ"0Xm&U֭QYb1K͔eRZ]7>Z9+Bi>C9QMI

B3Rx.y<[||!Gi:c	Ghme@GpF<UCGoPKmΉ    PK    A             ,   org/bouncycastle/asn1/ocsp/ResponderID.classTkO`~^ꐋ )M" FS)ojk)ɟ0uD$cqaSÒ==9}ާoח FX*hո@X}>k2b2Iy~dEFFƶ˷7#nrUٔT<{rn4|3TO9;P){*7u﵀Bɬr-Es/}O%ݜuz3miX\KKV2dƷ\G fĊL3[+Caa~rLҼ''XhJ^& ljRdƍ}}%g[TZ5NY
4*hRpNyͤu]Wl9zpMҢ/S4ɽX-IYut0sC3EF3ZJ@1_(N,c=nvTO鄩wCԟΟ^Q0.raTQ0 Q7CO
z9cQpj-0T\Đv3RсÈN\Ww&maK_	w^E_7>3K|qh!F
VIdbC8MY+jy⟐ 1'N-@(,k{BŗPe/1-hv?a=~<yL:oRunODt YE"@EK;uI1MmL8Ka-oڴH}
Uω(*zJ8&Ema
[_hKָPy,t
PKh  a  PK    A             .   org/bouncycastle/asn1/ocsp/ResponseBytes.classmOAaRxZ8!!AECrXjo!-j"Hb/P^i%Գ&gW <fjm%ӵxXn5)muXn޾kZ/0}7o,_oH]qxa.eQw\a\Vҽ.f<˯g>;gwM!!<y˺W(R0 `Dʐ[E0;	"5	W]˫UNF"pP3=|Gng}ARo;LB}.hk{iTM6b8:]2lմe6_\|ICW%\U1k*"`*b.IiTDqKiH4wHb.++MF=qhqKe=*C-znֶ#GI׋Зd0:&vGiMM,#>"6!LM`3SI>k;iÄζR-:'?FAm@>uZH5H ^L1<"CDM?m1Z	^8' <I2<TX PK(X  ?  PK    A             -   org/bouncycastle/asn1/ocsp/ResponseData.classVSU-	,,KmRhK[
aE[B R\ch͂~Tm?_ȌCg>'| Iww=_w+3J/ K,j"w.HUӽ20QDJB}L8!+VDڕ9q	
bDDYCH-$CA	M^vRZOj-Sfl,)A崰'+iǌ1SNBf5&zH2j&4ŒrG%l3)SyXinrDL LRDbIrLDJ;;YWKԂA%Dt̒W/=}(lP0ve"PgIht\q;>wK#/eGb'3a928 IƓ2qPFC2Zd8,Ax2%(fXeXn-PD,AV_vJOVDO	UL>U_efzBمe>taQiA{;rYdJw``t\2ic(T֓]TP+O,vLVo7=bnwΙxv:o.W!lr
>0-i8ZGЫB*GqFEΪx5b1UxVEc
y5/2\d230bu00paU	I)N 0.@4,CDt-=xS)D`x_i6Q%ł-"#GväcF]6%Ǡ@:%U1#=jT׌f$d$Niݴ_CMKcIWкWai=ӚךWǖdGi]Mr#{<\9W˚=ׄ92G16ჟ[}wїYnBYÇpD Zvn_TIC+Hɯ4NO8üjsYu%o)75W	_/ÐI2uOi*MVENkYu|I)#%,<݇q&7`uH֊OyGPĊW=xȱ=nE{q|CET6[
tkX%^rԚ58p@@O4>^uC'I%|?k.a=URet5TSn@3Hk_PK%W%    PK    A             ,   org/bouncycastle/asn1/ocsp/RevokedInfo.classTrP]ԈZՊ*xVZD-D!302~
m)ur^gk HpˁhS<r&TfV(Yťe=cM[i͌fM#k%04_{.kFMF+Y=Pp:04kd̬TSjv⮭EҳABmw60֙_v&%\N6NL;#v#gVf2u^ѳQٱp\ǚ[lk`q[<%* ernռ_EH"v#bPO^C"ƺnJ0eLթ]yykt#\p^v
9GE@lc]S֓Npso4iNɱem]4#oV=*Kq`t=zښeH
81/!x။텈^o2cPyA!L	WJ8	G0%(nKu	p&4	%&$;00+$wqwqO2+$d ?Rth A)& *P6anZ}J1E2ũ[iAtoanbCg_pS*Rg,IDEEudKAgHHޙ)a.:|/oO+U,V(?n($
V+uX8K5NUp/&j
'7*y
ib@@oPKu3  	  PK    A             /   org/bouncycastle/asn1/ocsp/ServiceLocator.classTMSP=`
R?6J,YtDp2%;wnqF(#3nX~12m)r;n &E\eh:k]=eh0yn&CPD7]C[oOqҰ)W!wC[wkϙZ*<hNV_ϙ.w0֧dyv6SN_mkݱZPm`Y"D]֌kݴqtn9v0Lϣ{GJqGTµ,n	.II%!0Ԅ$ÃFv(3JP'[+R"kZbHjـXs4϶oNG6]VdZ/ZcTƛW8[6l7㦂`
ZWD n_V
" UF7Fh2zpWU	'2&d\}1Iӂ#us},~>3z
sh<!E
j3j!a3jxS_Ц2ZRNa>	,p*S$qFkO=#DC0jg!z0TVU(oHv*tP..v@~qsi?F(<BZGV_	PKϓZ  I  PK    A             *   org/bouncycastle/asn1/ocsp/Signature.classT[SPB/ikbA.%AJ(^
-Zq-Fkmp	uF(#3orݴMؙ~v=  G`0n g =yު WR˙yfΔcțJZҌ$Z%9rvT/#t6
즑|TfFy#$bF2R72*z)	f	'鴖ChlyZ7fN7mIl9egaצVfOi?57|<_cy5Z,Oa1?M&B,⨈D8.MD;)mĆfP9?!"{9o<P$WO2<POCSluc<0X}3NtP}E
f|`ѶF&C6_\3lߛ2Ǝ7z$tp'B?/!^1p10LЉq0M]y\Q
i1Cřl>	SM>Wm&rZ[ b1BU',n\D\V0+m!
`h'la|qJJIȎ؎m2)Nzslde;|9V)hI*RFU^vTd0%Tlȟ/{hمM\PǻJ5qZrT|E5})+%.N5pmf#q{hWvq~U~]kJ{ |CHӄPK!<  <	  PK    A             /   org/bouncycastle/asn1/ocsp/SingleResponse.classVSU6	,YBmkhWEQ~TB,ɚ.
4 柡ϝ/8#$#3N}Czn6
%&/&3߹{&~p;h%HMU4k4M;1%@A-K@8ۓeǱ<aZft;7i]'l'h4LVޱu2r&EhE-3s/5,odVŊ
znL},;5O$FT.g%:)W˽zAEcs$[S?i/ڹĩg}9
ʥ|ܓ'VI4ʶ[y?Kãjq;#z,=ikW	aO7
Ʀaۺ"^qBID!ⴈ3"D)[:Ӱcz}U"Xn0k 1#IrujCD~nJaώa(R/˯0f*s6жxV33qqk+Kj~V|*}0jrxd+7_vVlF?aFځ)[x}Z{]}yOßbn*HF'TgZ!bH[ 52f!!#.<ax	01\e8Ǽc2(>a)CBBf%CaQyHs7$3	B nHė"%Qe%(Xa^&si~=Eo yIݛgDGFDPn
RY*ͺiW+E
uZJ(l;IBǜcouw֔=*]=VZΟ/3%@
9Q[q©Ȉ0}t>@+sza>@cq')V3˩	 H)zE6Iʉ2dJw	%ujcxr*ȞU@G)U e[9/i~9qEwvmr
{5ܫ>+5ܚ~r[$8׿r"gTNr)keJ?I ˡ ϊt׵zg"F)FEPKiO  
  PK    A             +   org/bouncycastle/asn1/ocsp/TBSRequest.classVWUM2e`2C>l)$J҂5JԖI20C'Ү]u+wnQ9?QL>(L9fݏ䏿1XIa<猜}]@Ӹ;@dh]Yݎ[3zi6Z-fDԺit@iŵerLKsZ6n
i8[l, lZh\5OZQ`G')#mfT^MK@77fzV'9oN))	I|ЛDidLٛGPSUg<xfpK[rj1I8ۺ[Zԝ`WVmK[$lKr-Hk(ސpBBNI8-ጄ7%tI?֎	PU.6тCP=fMJP"TCɗ[,@^պ*}UjUbNkUg=]lZz!^ѱ*:^ִh^3Q״rM,5^#t:!ti∜?Yk
?1d<6OosѬ@>^\RЃpYA;gc3
+h<}aDxtUA 3``p*>dC210+1|e.'202ygX_ȸ/cxЧOW,=:jMZ]me_e*JRʀ}8H*#п3L5$EQȩ-h
[H [Ouеloumb@-;~nVEznN"UV9 ER#N]h
X'B?(A0(H,D7D*tNRr>-jw`m:3K{P7Ь>@.Ԥ|7"6w롃${8>ۇ6N1zZ+[!TY}^4wџLsTmd7`]UElCP^E#DI蝭K]"j9BghJqB~yÿPKe7Ua    PK
      A                org/bouncycastle/asn1/pkcs/PK    A             *   org/bouncycastle/asn1/pkcs/Attribute.classTkOQ=K[Rˣ[U"]e[¿DD/~Gv,ɽ3g̝9{#,+	hM~I43# l;H\cFQ+hjv4zhE[g
VpffJ"ylWsmMlm3q7/\C҆egiZ-S@[SV+3;SԍU4}lC9O,NV(5o^rU"щs9?4-^v9궾&$gt!!hg3dU&
fhߟ
!"(MD"Dt)GJzBΡNwG/6<NJatԉδ#	Raz
{eAϚd N)p-qѫ:;S q?Fܓф>4Ȑ!#&_|PdƨVq7.ÏIn=hFDBKGB]<0|+	!B%Dig#Wl,*	@?jbQhF=$"yԊ@D x:2ѿ~2t%SJH0KV	o˘Iu,_=(Ƶ_)#Jx#$Q:WRÇnZ/%h:i?v(b%iT!y_'<S
7c
w ʸ	
vu~g10PKS    PK    A             2   org/bouncycastle/asn1/pkcs/AuthenticatedSafe.classTKOa=_0DTa:ShZEPc	vOr&F6.!J%
${s=   G9iٖ7^1D_;5mٱަ=mo6؞i{i{I0lVv_Z.? VHۮۆY:=[^7
/QU4Yeh_wumS״L-ZR%ڐv,{QԨdձ&㽡-C̕Jы9IF;<~,5E$"$]D":d9H<}6}yӤʵ<\LT# UTF)VS`N)C"]*U=ka@$FI[؀5FJЊ&	W$IxЌkèc!
*  xw`f}YYoxo/0!䣏w$fڑ0<NwI>& "0Q>#^nF&0ycO*	z)3<	) a/F\5Т|C8|G%̳^HaKU+!H.[\@	/B|2tjzAbBp|J?Hd{\sRa}}PK"  '  PK    A             '   org/bouncycastle/asn1/pkcs/CRLBag.classTmOP~6(2+LAA& $|tץ0;
џ⿘0"/~Gm; f%9yz
@KQ=>o;f<Cm^<va iAѶlwW=a>+T\X?2aCr-:GWܢ0yř27_MӍQry[[7C0֘NruBl!'U1k+wK7eGBK[5qשZVE1ǐn{uDS!u=s_7ҴcAkam{&oތy1Vٷ])쒾ǏYN6f[8_|Ji!{4![!wetOA%ЁiFD4)0T#71!͔><汊~*V<˖tto_[rHKjԊQ_۽gI0,)MhQc"zS<=FƘy<;gO'u:df(4~ 	w$Oϐ1N1[Ë*al-Nq;^o@ܯ-K,f|A=
ڻgߑ
g؉Jn
5PKڭg    PK    A             (   org/bouncycastle/asn1/pkcs/CertBag.classT]OQ=-,]+(PbRY(|؇&/kP]EM}en2w=gf~+VzbwvlwKL!,m^8煻kCôM/lvxEOr]Y%lXΛ`[&8sj\3%kEa59+OTkEY:od-9joUL95gEU~kP*W)PpIADeѺcs| mxώzĺ锚31o+Rv@뢱i{6Cncq[]+?f;yӟ`[2=tY!k! !һAbLhC\IiB&b+*fS1W1S(*gB.7yiK1x颵;avIB5<0fxtGH3!rGyIHFя3!Z5~ RGt8B
OJgdChgi"ڲhCnAZe3RU|ĸi1#31jXlD7PKBeh    PK    A             5   org/bouncycastle/asn1/pkcs/CertificationRequest.classU[OA,T@-jve_D)(R5vkr̞;33;|`i_8knW5c5{Cl}OϪn[VƞAѴQU#Uf/v$e'{~&
yׇ+扑}UvASԢ1$2gRF̩mRà7.ð7$Õ;B=@ֺnglK7C_ژlQ5&>OfY^QL45`ij	hH;u[?:H:\p]@wC͊1,xFiWiDG#]Z=_! !S
A+g!\:c\z2|9JA5JUʐj꩝G&r;~5t#1 IA	>0nZ$fLB"DhGS(L,7"0#Yя "`Y]ӱao(&#Kz5tfl5{L=zoGdBHǓlԓ"
vs$(!:YZ YΪdD[.>!MaE+|:ǈIe5ɾ3<:Gq4j'nVbV#b%7܎pp*V^
`
/`3ʗ9qׯ@NJPKP|  ;  PK    A             9   org/bouncycastle/asn1/pkcs/CertificationRequestInfo.classWSW-	,,+>  XEDEm!5
Kr	a
U~+v2/8GMB|(3n4V!
!py,gno/s|(8yR@[wѨgTêOz5
M
k!bv53<8%j8,@RM3
%LfFH,#G5kxس|MgDg<j4&F8VNvIzQFvQ0U=RCY0dH-	k%`[vѓj6JX wFW,ڣl\Jeu\GU=5$aD[JZ߮a\MlLp(b	=4R
3[z(VTc"0{Z@L|sy /+ໝ@yp4϶_*Ŭ?7nJ/׎]sh$;,Gtd]rܦ]ܴA|RRG0(Iz:RJJVO\Lmj-PO]EK"v#b
"/JExE"G:׬fQ'^8&!l+Cz{\lHGއv>=;|u /n_]kTuk%7խ,*ٜ:rd#r,cU>UVLK	i[Ǽi/sN<v0o
ek$iV}cIJzsR}-2pF68+2j\2
ᖱ
|V(c'gd<8'CBK&Q%x]Q?zeyN.r\ЂANTN8	$^PdT/	G$<sd\1<+\p1	%'&'78IpSp%j1c^X^W,3`FsITCWԱ^_QA"Ч)NkZ#Ř"rx ~hQD
hUP~e%0K?XRSBȷ6+I,(7pCpӷJQ߿YH?jÔR=i@oE[DS"NB2+|	y+ܤIۖ[4'=m-2E)><޽FsӜq|k2S}Kv-C}77w02n,AazYz ,c[ѝ6F|.i\q9rOg#u-I_B
8~1;}܊yǩ8M#_"].Jc_~_ek}4tc$~Қ(<!m=o++04Ϻ/xuo`;->aaȖPK    PK    A             ,   org/bouncycastle/asn1/pkcs/ContentInfo.classUmSQ~.WUWD{|)!*_
rFg.O_LJL_ojsa˹<ܻ׷ `
I4iF1J1p2mݴ/3HiݎTRGr[C3찚VtMpP<flr&}欬C&#ֳD~TC	Eu=چeo!`eӡUkԶ55gg3B3Y)u5/Q){kc+J 5BampB%tZOUJG_
U'Sumr!Rc[apq68>q%[m|9ptq8qEK9Pg.raw;ʨf:TPR%|yQ7_5iKJv= EzK:ʣ+iMCᙍz⫚&cBM282Z2:hGPF3n؈0!mm2@B&y$:Jô0O$#,a 3X|&_=a9u#)D}E77\B*!JMڌVRsP߅<G9o->|y"|xgyB0&롦EM9*ܴN)P<0;EaxF+F0J tS@oǩ[P\)]-2LlE%9NZE{Mg<;V~ZI_-'5\DrSA;X-v,E,1$ţ/PK־*    PK    A             ,   org/bouncycastle/asn1/pkcs/DHParameter.classTRP=
TT@H" Z"P>)66e|uF(ʌpgrݤ[~ws_ `YT^qOOfS>b(-"J+Qә"3eÊ3, _4#N-ԲS1'c4k6Ԭ4Cq3aZm4v=a8X,:e9fL
4!+0-'e趓Q}N[#MHYzpi?dEuc-n.+x,Ӧۘ"&BHJx`$(Msl%ܖJP+^BF	W$\pM=}SaEuoov>s&Ԥ^tv(NU?$7MQtn|yLܜ}EY>5Կ{yӦ]02T`g԰	
 \B	J|
.
Щ
]
ʡ!wz+GC?]͸0"1<qdbᩌ6<)la
71^(:=.Kٚ5OR)g\+AE=ԲѲq;6ޝ7ޣBd?PaJ~>	~	7'@y+*
&rE
.%8?U ,3"裮נ{k13|L?&Aۖu{#]ϺGPnTX@AGhY]}>&3n+*
20<3Ǩ#7rTOסbfUBͫYLP1w+t6>Ӝ?JtPKg/    PK    A             .   org/bouncycastle/asn1/pkcs/EncryptedData.classVmSW=ˆ\XiQUnV	F@E],sD?δifZ>f	L&޻soG=xWr!K%swyu=7#aY2CH8yX۶%уE,me_r[NF+gڵ'dIQ^7;qksŢl"gJw<s4ANeo:ߛ},$6ȷc'ќS3)A%gGzc-f`zۜݱT]lNZ3Ƕ-6XgyY+y<oYNG嵭&>:u=]cvʑ]T&w?9-N
	%pF`Xmw$\Xz}23KGVC{=IBVEdU=k<ٖn,-ɹQkw%^N妚ͺKwi$e:j+K?F	֡K%up7 	,t Т߷J+eTQыR! 3Tgq	'qIE&yfRq
*!530`
2R0
ㆂcE{
.⾂qaDAһ@Ga^E/Ѿ|`O55$R|>d'ýs~@ھ
s|Q/
6aӏ.7RX!	OS>	<}U
VS1#_ ))&0&/|B4ΰzBLl8:pl ᤊdA/U
-*ñ
b4ϐY94~Rq8VͺyRp. #:F';<RJ~Bc)giJM)$(B4b[:KTu>PKgר  	  PK    A             8   org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.classTmOA~
GÂ"
=j*Pc	q]AB/j"/JbQٶ \m23<ݟ "Cu$!2DVgeX+LNێ-RfiVu8Ҧ03\$<=_Hl׉g3g[TH:9a:	Y1e`	.-i;k$-R,`v8־eDf5ףEU
l'KO;nĻsZ=31ۛV(g/2_Nڛ23Ni6=HgӔCl
n(hTФং[
(hU0tQF|~}9]*yt2F(~&PmjT@V IL^1_
Orris-cWIX+M^]5.8I_CwЫ4Ԁih@\UkPB
27 I3D4#*`T]I3yUtaR%c݈x=1A97MyCJ油^$Tџ+W򵴢nhj}"}1^`<?}-(%[tʔ mA2NFKg?:AxE?y/< M4DkByPLSQ,T>3tKҕtH	>|PKv[    PK    A             1   org/bouncycastle/asn1/pkcs/EncryptionScheme.class_OAϴmW %D1iԇ&$%&<NCYhwv Q5QK$1xgԘ}9373gm[gQ/F\ydHQYڒ{`HSRme?Us.ޖ
ae*TO#V#LPiۯ<'hI*αh]L\|jk+Sjm=4
	
I
:Cqw<ln"%kDF&cmg?t{x}X)Ivsݳ4ҁ
ycㆁ)L*g
0f7-%IdpG:Xթ\a➒E%KJ+YQa_S"s[X=`FP
i|@"8mun]<wa}G Z6K,N_t>S؅!ģ>$MLY[?2%va0MJY
aF吰>ar(6y0&RDGPK    PK    A             6   org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.classaO@eB)!CA@"]A!($Ad8ceWY::o1aDo|2>ZI{=/ sx& X2-^kgUS/mV0Td*MCMΜUu`Dme掿.0^D-g0YBn_
f׬,X0	Fs9bmI_5-WYuw/`*˩K
M,DtDtE!"Fbnۢ ʗqke=7
/P\*d5˨lTVZS2<f.i	h2D`#lU
^]1k[E=^a:+
>P$l2"-2 p3$CQne778T	}HIin4	x(%]m:=y[7v7wHGwh C8.j;6B-`T7t'H4?#q
A%Q1R=)YF&!提=:	|wLza
IE;uL|Q^T<*q>jƇy7ɀww]نbwMÄrw1ǚxPK{c    PK    A             2   org/bouncycastle/asn1/pkcs/KeyDerivationFunc.class]oA@UGm`MjT	j^ˈ.uwJO_`(㙅r#ًwl3gv~1ċ7G3m՚%զGk3RXB%<[2d)hK%aZV?c[ʕukjuc_ڊ0G2򭌆z!dtr|9!ZkM)#ui;Ht~UbiL̳hՉdJSXV)N"vmEGXZVߦ:aOOH&c#s10$s$01E-3J9,dq5,2.f5-׵rS2Cצ}Ra8]CFTVh=OZh*=gp<E~\OOL76`FlKAL[?SNu*	x4.Rgb`zdgr4QPKs@     PK    A             (   org/bouncycastle/asn1/pkcs/MacData.classU[WU&	a:mJR[3@hk[*!QSԦ!:Lt`#7_B\⃿ɥ=&9g۷s& n♀)rN@BTJQyI|.=:,3E16ǍZLs-bͮEֳ5i
8Q
$@|aNzkOP:6:d-HDZ
N%Zq/놾bO<[u! 5AK7>Q-W3kz]Ƅ%\ƕVгk
Ň/qEN=xfS߈L[7n5p|'
9,hPqU|Wy"^qV9E\qQ%E&⊈!SMvL@zHr@
9í2Ϊ(s.-tTzIytz$ 
qVe;b7pf"9v|$u?<P1vL
y9nC;f*dU0$T:b
^AW	=
$[
pSub
ංۻ,9{,c>|/rdQ`Qd70bVFY<b#J,dd!OX|&cAY&G2t|.1p5shFs)L@i\D;Hmh!\Eۂ݆!lBjSRq3:#]ڨixOZ6[nmZ'-Yi7i8b"r"5I:n'fb&H_cr0v-|١b>b	Hs=گx1c\!iA队psH$x2H-|piX-S-|=ΐMe[mcmcy0.RD
m,H@_0PK)    PK    A             -   org/bouncycastle/asn1/pkcs/PBEParameter.classR@ƿBJ?QTP(ZW!@be||>z6-Tڙs6o= Q$آ[JXM3~1x Wg1	bYN)=^%.1'i,Vg$A:k4DբIBq\37M5=ȸ.M7Yy+mJ@h˴2KeYFdhfE	ә7	ua8ˋgӹ,{Yf Nf::aGR#'3VXH̢g\2X%ReW#rGYd\BɅwddh!㬌N]28/!:ש&[AeMZCFʱ5-2CG'C#6'H@%>4#a?Z	aư

*TDQ*`DE4EhƕfDqMCAẂ~*wংA+q.LanpkB(5
%g2G	zF(z{mwhEOC`򳾋\m$`jECm~Q$K:]M>FB$/Aь1jR}D"#Exќ
[֡ M<LB'e?`b[4&_w"E2]%zHWm	JhU0[%PK鷪    PK    A             0   org/bouncycastle/asn1/pkcs/PBES2Parameters.classURQ=7	dM¢DEYdI	bLJ^Wd*_|Ծ UҧOw{g? ?
a[M\FbM3F<eI#mjڝ0ҦjiUIIm7"V(.kqsd/VD^N"=UꎪlzB	ۛZʢpChϠdjMYNn\M	MQF2+r*iʏfhQQsnP(<wiύڈuؠsh'XOTMH6[0WB99ˈ4B뫺ENg;I.R4oꦾ	(pKW@rTPEO0.3sIN;5E)ZB5֔L]忾Xb=_Olm!/Ĵ6k?V%/g>#r5mWe7݇:0R@h>a*F-2YJrCS\x%hPV	.ܓ  'H(Ab%A{entJpCᦋnzK#nsDDDԣnFD4่шanDhBȃ<ϸn,B?Ҙ7խy~Lu
qt6htSn<$k-uh·b}-ǘ<BtaKs4w蕏Bn?qJJd(%l?t	P{yJ6tWOs`
)it1^a|Gceqc:3Sf5KO@@^zi0oPȹ9n^
Î0APKRç#B    PK    A             -   org/bouncycastle/asn1/pkcs/PBKDF2Params.classV[WW&	M1"*rU 6aHF&L,n[{m%ե/<'uu=3I*T}Y߿$MYxCvsYTobǬXK㚪y:
;g$`3<3#`%ԙ[ɔN
ҺBʝeT'sDϘ^!jZLguSD{☢'̤ -LV&Y{y7֫H0f)YRFҦd-Krf<m(ÚRtmHNR3Cʬl?Low&뉐&k+kZhXϦ>%6W̸ZWL'.QЖ6i_SSBrFG#z<=#OkI@in*	8Ks)C.R^p4/JSYlNj%_U4CnΙgBC&dCNP;1Gv'Ffhꬪdr|s3~-6~7X7yԙinׄTSW>DqDQ""DDE.⸀Cc9^ʰWJrL.1:J0JLmc no'jgdh@Mޕ?Zљ_oWߠeJqK[fͭ.:-]%}ieoՎÝbc8Y
gг_ޢemt#CC[/T	-蓰a%Ā	0$!P
AnTHx
.^*$Cd+ %4](	$bO/31D&$lW&8a\cbxM/ẏn1$}ƻ)N-z`}8ه^>rg0y(Cڇ1]x܃zk'Paa
TR-mFYgY5֟4`o9K!XC*±S|21|G^ב^
㡑\$=`+0(;7I/1Z(R"%AJ}>l,_dhkiۭ{xH]'>*$ڄT]NAI^B^|2r
_gnJo,aތ?GڟJ0\?Dg߾Z&~E58{$kʄ
k
;-℈.]'H9$yՁ_YGeq0?!ҝg4GF15˛]ȷetY5Գxs `\WccĉYosrerRH:&Iڪ 911ƂvA']zg1,7^1=t}Vzq5|1>|_ӾLPK&8ݔS  b  PK    A             -   org/bouncycastle/asn1/pkcs/PBMAC1Params.classUkSQ~]45B+v."`bL4ؗf]6܄ɯA_МiKQ{M<휳ח "
11LþGuU-ZUSct{޴lt~Z^1U(sogtRzj7_y3/+u]UQTRfW$77vHL/W
rmheuE̘-RVΫE
y;\wJםB:'mxgڪf)ڲjE-YbfX9L'r"㥡WHr͵[JX(W{V[	e^ubXpD@@QpB@?Cd_mǘBлEPx
E,(
=ڻ~0ܢ}sH
͇]ݽ0D1w{0]k1_TW.gܷ3'ߞ۷ۛc?a{ W"} zҺ53	"JaL 	$xq^B.H8Nss%`C>1!aJ08np#bEH["`=?qՏ!\p
rsfԵ^`T`8M=<ixx4R=uxi#C7kv\aՈJͽ4:fO#8AM[
9'N|F"Fa`Qg$?6<Ĩ3Kh꘧ [xr|8'f#͓F>AY{jsF^z35']FNxL4R-|t#K1`PK$    PK    A             0   org/bouncycastle/asn1/pkcs/PKCS12PBEParams.classTNQ]"WNձX-"y6֐4<
ä)?/j"Hb?ʸw[(Fd޻g}˙7 	|ztUGRl^pԮvMלYs?:zeiy#őtJt^~z}ӱrdKGIUK"=hs^UǴ^\Ⱦ=䝒ŜzEn#+Ku:'=_zGZ'Z3q>gg.d&J6-$$Hnst+
z]Β-Xg f]޴,sے̔o&tE%.nX魘3՘-'K\il/,/o֯NUE\Ry:%݋.j: 4t=_!
*9e8Ý "*zq>ä>*Sq&C"JiX,n𫞕bMbSFuQs=U<60UtSx皾{o袤ܑ.;@?̩,H3N4d	Z|B8Fb@q*UD~b zrLWj5jo0nbS^ft!cboPK
D    PK    A             6   org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.classxGgb/Ħc!RlK(	)61r ]Ʈlpz{rޓK]z7-s'}<]1|ZΦlmu6f:\g3t6Sg[lK5̣3|:lfllG-.:[u^1s)gOniyDjh[icTr6g&qRiotc鴯t_:=r6eh3/Y(US(7nP;4%X4p6Ӏ<^@|u?Y !96 ʋ^ۋKb/.b/.FF\܈QlE|+}яw\9Bǭٞyd;MmD3inHcbvFrq*lt&M;3߈r6
qԅȈ18NQfL$fi&d+j:@<L,+dƌ4*ͤWQlV}f<v[V$1%(&cmr=$R`%Zh` r
UԐ'4Z9UpɍNḛxTK%Vi[7K%2m1eb2#-OMQ.ߜIENǴԈ{LPHXTRMufOn8f	v8f]VBLHM
Kx/V8-62M.USpIQ)21Z&qӢ;f_JA5)JEǊvVXPÊ|Ҵ]t^Df%T"mJ<)5K8Q%:ͰiŲmi
{Z.42J3j'VRޕ17{CKKUb\S	ZM1Cm46D=\miJ#I֥\Ky8((Xjki׃^CQle'Z!G?kJ0?InqBNL<5GovWVx+]ɞ8Tlfb\'ZO>tJg͗ɼDv*ճ'ψ,6&sbgݯ6ۊZI*uX򲠙FxG-zAƋpPN.ݠ\!T|"#F2.f׎9QKL"!o~'`i3Z-b1ĮmW_&'!S^^	a&S¤mnHY\+I[ƸFQ7%+䷧l/?#ģcvʢO}~Y(nݩd?l8Yo8IO} أPj(82w5_32m@2"ۡ8OK4v`aA\)H{s[\qRɢEoH|pl+7s+nXEmQ_C፫K|\S)٩ވi-RlHʈRIl8nF]35TeBF&m%
?>]rT1#7Qp);W~{݃S+	Ê"uo^PX)Nmuf2#$xB\|2} 'cDM+^Bf3Fz̙<.mŭOW{N
cZ"YRat?'#>*|k;//(;uI#X'XE?F97^VOäio3F}0qLUP{%7IDWjG{S0:@ՎJ]&%hanˌ->p_U:Pg[lk^g:mtζ:AgYΚu֢:Igu֪u֦v-uSgAulW-n	_fSl-2IFErE@41kH݌_G;颂l9
`=@X	āR@X؀d^X
}CCÀÁ##ccSSӀӁ33ssKKˀˁ++kk[,0 
n ^ ^^^^^^	
| |||||
||||	||
||	
[30}U3֣ f9\``[`=# M@3, v@hK`]R`;'7
`=@X	āR@X؀d^X
}CCÀÁ##ccSSӀӁ33ssKKˀˁ++kk[,0 
n  <<<<<
<<xxxj4ߌ?
<<ȦTD|+ŏ!'zR[m_RurHNnhԇI%}'xelFz'C鯤L;oZo>IӤϐ>Ki4E4A#
~K!GH#&қIo!͒J6i/$韤+I~H5~A{_~D9Ǥ_M	駴fieEZpk~CMw%2KI JҿIvPH&\H"LI/ *H'ҫI!͐Kzi?	@zBz4顤ǒCzaIz0QDz ǓGaWfS8l>^4H%}t9郤IMI'}WH_"}yҗI_Y8l}58>A]K
hYy_$FFak5`Hv*,v=v3a0xi#5a톝(mlQ9r;edzL/jfφU4V
~.
۶rl]X96Onn_3ȟUwS6_i`U/X,z[FMs
u
swMpMpÑa(ʰܭZ22Vc2Vߐn+vk"[h펨ƍMv.Dn7Z(7Uj7D@]U.&2DnxnV;e֠fMJKYRYrd+v	Y٘BG~]yWޘ*UP&*(fYmKzg` jai|D<	}gEޮVоީrXBh:ahXҭpaxc#}.ҫTJ3cR隬VCO;V=zjS`ՃOU=OU=Ԣ3V
5j!8^g':꾀	
Vu#dI?iup|ê
<w:997_WwQzuWGؿW{'UJYz?H/'#zίKȿ~}~?~~f/u $д,qV+PhᶆUdoj-U|,êMj/ªV>7aAV[@v;XY Vm`զVu6VucοPK~ޔ	  %  PK    A             $   org/bouncycastle/asn1/pkcs/Pfx.classT]SP=)!XQ((h-P4RէK`IM'OmKAvJ27{< 2좀fEYe{q˶	°dR@خirKn$ﾈYt;2 O"oe孅ep# [d<-50;332l:B놹Z-@\pВ7˹3rp(?
'ɖ2"eqzjcu!m&XSK
kC櫼Y*F]L՗F.452Վ^ݛIbR	ZOޒЀbYkr5z:	l064~EhqDQ"8.℈":(sWZi )swUh~k03'amYgpA0GOSɹOw9	^9=9vj1Oq_
b#|T8U)4Y!xMFeqC\ъ+܌psk-Ppq[B7Ѓ	nnqpz&͌>LI8;qW"iL9I:mq/#>DM-72hɣy
D&f5ۈp=ڊN
U՚K{е-<}@@ռwO(#	xF(^("zEDP*yG(@k;oP6$m<*醰Q%lYh!HupUF)an󪟠oTe\g{vg4BR6``WܜVDOgX¼Yi?YrKh<-DPK@0R    PK    A             /   org/bouncycastle/asn1/pkcs/PrivateKeyInfo.classWWF#
IlKyEHe;:r8
bcHFڸM%mҴIW7]Jbn@$ӅӖ;3Z*zS{}w{o47_=h`{<}XB=u#Y-f|3j:%uaN_2K(wFL6qTy=<6t8ASa⌆p0ߩHkcYChH'{;VhWua=WI&=c(zLΩ1x^}7&-C!غfޝ'Ӛ19-`˚M,-$W1
)SIˏa+udXIdI%ӟL:L9rN
Ub(	mܗLdFI&451t_r7t6] 7Au[OrNQBZ2TӰ4P$PJ;ϲe4-
5MjuI+QWg
;Vxh,cs1%c$ԐOьA2k%(uݎbA# if(YtU"K{S?UvYUIk⫒N+JSSLt"f̝=zPFƩ4:#nvhqzH)Z~l$#)V*Tl$U@Vғΰh]7)" b"8(␈"nqDQD!Nw[DtU:]T:"vu`u1o&*jU&g_:ĭ2V_9]VwOk6xo﯋Ȯk].z`o-L/Κ׶K|OX[_ur;jZwjU95Zh5X?Nrf'G6Jv6mܠvnL,QنFP7ެկl]5\?}
n'Q\W8+&n|PF/>$|X|Dƽ[ ʸa7C<2v+
OdA(4&c+b4.=Pel$O5s2v !$Y
yY91Q~I>>Y1<ç%܏$3ߑЇ/1|]B?b*w%yg'453@ a_0/Kxaߔ0!"K?m}CG߿U΃WRC\CГbT&sJ#x)K?Ѭ%΃r[oa"<y#~ʼzBCne-Nx[iwe'/E8MMȐ奛L}WL/l&&9[J.Ux&|uQf"檢k$c<菶Vཊ94\ŏxm/DEؿWm!
9Vo- w\ n#"""IJޯ[vE|@*<YS0D*!rPLp?P2 `	kxy	9QQ&SXc.^E\1xͽZZ]/ڍFjm8jmdlzLKFʡs[Y`ekm2nV+ep<貃PDD DPĠ7ATL#XE,x"]aRar}4"
{bXe>vf3m3KX_ץ
MDϭ@trN1]G2Dq5.5S{j-VLTH(,,̢./J_<^G
*'|-e<u:yǯ-y(w̒/c8W%O|UGx6PKN#  u  PK    A             0   org/bouncycastle/asn1/pkcs/RC2CBCParameter.classTNQ]" r)0"DA.-E@4I.Sl}#|ג561dԽg	Tl}g}Ygg~j$YS\Y^{3-'Aa']ūu+eFʞ*
;'@࢞wȮٜϿm] D+L6[Y)=go1=g
ĦfTfC_6V({&+q16iF L
2mΚVZbܲjp	Y+4v>fw+x$)e|C;,f6#rK*ᚄz	%4Hh$@?u-:!ܦvte,nO4e^؁^
ȃ);5[-WřJ";2'ur8ۺ#8Z.K,0dTMt+Cf!Tϻ 
6Z*P*D}
_0ъ{lh}62nᮌv 6dt⁌.Md6h@m=5W"d" >SL6DT!9#Ц}EB1yjjgy'< ZC{jϋ>Z5qqhCL8NFѶ	,jy5bqE8nONh999WAZ~>	aB#KC+KR}wE7GH@UҶQSq{=ˎ|]]z3'y]`snK*=-&APKE4    PK    A             0   org/bouncycastle/asn1/pkcs/RSAESOAEPparams.classV]Se~6 VZ(4$@~H[I!XH
P5]%,ldS=^ɌW-GNzZΘ<yyϞs>sW4q^dur\Suո*rE92&d?5
F&W
~Fl"]E᐀ULL
͎;:!)(9;YؗTI9גj,VPWմOM(K7F3#e
݈e.xD&CD5K'Hk%-+e*d=j5.YH+W)z3o1Srׇ|~)4㙄)w&'ۚ[~8JÚ"Q
F=$*@RITu'fCMp!9UO
8aI%Ŕx7scL*	*<w&G3eV?0sr/jm
/U7.keόok_v*FfԴjwi̪mTDWVd8*☈"-℈"^qJi}S4E[I負WfaR>twKhk/SDBp=-n)Z;]7UzLZ:ҝn=WbWJ_1#d_YE.E0ЂK.8NC=6;Caq-Qkpafb>+n0L5c!0;R3.m'Xp7sN`'gNG6"ݨcݟ!Sr6/&4p	Hk*ǔ\)S6WӔNZa>1l=ck8<O0m%G=aq]X'O	T6Eӏ#Љᨧ;
$a#H=L*hŧ|$>^c~-7,fnyJwp۱B(`hYPLn~nO1>Hk8]SkhZKFE} =a]l"E?à_KKS4?E#^x%$B^)ƾT|Y=54wQ%=axAꛋT7_Ch%EL+y~CE6+&ۭvޫY5:r̼l-l[V:N؞ገNئXο%n DdyP~z^*a(jQ]s[-PKM    PK    A             .   org/bouncycastle/asn1/pkcs/RSAPrivateKey.class͖SWǿM65`U"ƨX+V+Jlٍ
B?t}Nes@bvR>~9ܻp_qP@c7UDb)ͧpOӬNk>=mhnBBζh0>"564\()<L2e]tQ;]05D%
cZQϫgΓ)47o	%mF͏ڎ4,V-UL.;ΫqS2ir2N.hz-,eUw&~Ȥ,W莀t5xҢ5ZS-}6k;]EMͻWV">4~14;NUĦݛVnS.-=!^j&{O^^Տi!K"vgtÔ5mSs^sl[61Ogqc<;}ñLiۉq^蜾(""b"xXDTD"c^kQXgwdN]
cXA~vn]W)#~{Hb-rJiWhvоtm#淪DbnˆFm5^k8̽%ߏT7w܆l 1$ƃF؇GeDf4x 5x'x0Nʐ-6F;b(edl2Dfy1$gCS)0c1ʸc\Џ		ø$$e*.K8)4##7:-Qg1&3^`x3fcq>4.67;n
;BHhjҨ]1xvgx6YɳARCȶIT7
)W*>^qy/iQ~MXRm
*^_GK91@-oq32S3
^U"%
J_r_DEdHSi.bVE)`ƭ^⻔}xmTm$./@WKoвa-*%m\ktF[5zFh'nb[qVz$b@QqF|E;pҫE;YnS=(Umκ^m|\=[|wݽxsk8<MZAao
I
1_xZ~X-?UjVY	;%c}+xsE
B_SPKR&    PK    A             7   org/bouncycastle/asn1/pkcs/RSAPrivateKeyStructure.classVsemvt۴/)[J(*-"ڂEEm4
ɦ4
*7f|r|(I(8>#l&M*3؇9s4O u'taվ`C9<)2q
 pI4ztUK@63
R8#?$Y]#!Rf=ѠC
d4ID"Cʤm>:zZS-29'%:UjShfcr46n6DvO!=$͸jHG5F>20>L)bDm7.ZѨQHӪrv4lu#/GZ\@kΓ?`P/"NޥЦ-If<5RJu+Q-DgTrlаSh~caLRˍYc&Ԅp=#Z(Z8Mk\4Lzژ
yV+݃X-:OQaeG!`CҘ0̳ث10K*lLٸiD6q/ONh)hQ}"YODYD5O*ָ-`3%YWY[fߗ̭VfXW_ޝWiBZSϷµ66Wf;έ0n嚝fR+U>D"Z؞ɕ]2哬G*ｭ|wkmIN~	
:21l>	Z	wZQ%܏ZG%4᠄fk1x3l`p␄5Jp0#1$a2CN0<bxIO1<]؉1pAcHЍ.d{qaʅHhaAg80ed0,؍gTZ,LsaRԉA%v?h=cƅ*iU<fK-;mՖ
ldK F
AZ^ENpĵ9CBpɿoNH{}#{tn;Gk$-B/eR/L5|E@B3Q|9d!+rurG-i\;Ә=4.ʞ4.ɞ41ǙFFs:hWjԐcjGon^hu\C]5-Uܬb3x#K\gJ~+KxgfѴ[Xx'Wn=4?q"_$ϰFE2s{}YS=Sp-Xp+Tp7u+[ʺMeݩWZo=╁y+]^>%t~RL?*<Dw#wFpE%_PKpT    PK    A             -   org/bouncycastle/asn1/pkcs/RSAPublicKey.classTmSW~.jDE&KMkH$žͲ]d?pFZf~CTݍdtLf=g_ 3}ى|+.ڮ_?ou )u/y!MnZnY`В~ޭydrX\'MdD`ͱzsg<4tp-=82Tȗ[7eշ=W6lךl,ká'mGϹV3jjЕ~Α\ƫY#Өԍ;ϕnN]_Z3ݙMG]wb:ֺ[̩7Ri.R|$r	^@lfWB}/RI`=
S_#nSxYىmqۮt=mwH6ΏwFaZfwpV؇릸qu;qBfbk1a3;Me,C'*t%^XsG8߹l鲭O|'b!
˒8ݏxiPwԞVE
U0DzU	8)pZE?U$Ȫ&2ŧ/U(bf8;fI0.$1s12'qg1|o~`1DW"e9qW%02DPB4nx	
kFp Ml
)gcz^!Kd6Hm!mvw7	N MStNLaJ35M>5m9OR=fL|g
 ë[[m>MoB_\ЦƯb=;5Gkr\~<i"!~w>D"FoDU(Gĝ(oPKd    PK    A             0   org/bouncycastle/asn1/pkcs/RSASSAPSSparams.classVSg-DP+
Z%1Q
!P6bm钬f[{CоiPK┙־3$iwf|s|g/˯ ZP88!	ya5ʶ|1)984:h.FdԐ?45x1l) 
l-̆@?>5(m PVb\V͔fIÞU+Q"!z3:}Uڲ-FjAJG㰪YM%
͌
3Of1bʰ#@4bSq
i{T-0MMWM9eG9HX3H$ut"mEoDՔmj>5ed%㷢:mjDR@[yn5]#NkyNʭ9_DӵX!ZKi<6Ͳ&j}e9O.͛|c/W-I}2Ȋ")ʜTD>X|hwxfHZLRkЕ2nRw,i
ۘDK֧Y+`ڪI;E%bVm"+eD.`o'@ 2\Ue'8uL>5Imӑ3U{wWZ1."'z&&\WC8{*-[*k^ZxʦpdJu.T)ڗCdÉR8/\K_(
gce}'1ᆄSn3x:nqQ"KMrAD5a/,kp΍w<gd0knlDaaGq'0Q^0Π0^c0L2\C.JaZB74	=x!00+ޔpo0L^p"Q<CIW՟bu.ڈ{^ⲐVŕq$Uґl:./|#%߈|VP}%h\Ao{gْD_I?E9B7wa/cDz$斑$qm;w]ɕg;Nv<n]*T}.>/]靝|;32信tAQeo>nSEEs)"zj
+E6YV;:1ZDTGq{Hۦ>7$pg/봩y`ނsysS\Kd[K2Rk^2WPy3{4uxUsY|ۼZ$Fdњ3ZkṜu"Y|sp=BjbN zWp2r{s-WiBW$Gk/PKo  
  PK    A             (   org/bouncycastle/asn1/pkcs/SafeBag.classTmSQ~u
-2|E%,D+
_f f+J`8?[?fiMMuKJ3{ys{]68nSsjs9=9ѴjJ1ɧBUЛW(bncibhffUV̖TXbV1vF&B@eJbmVh%$WP$^)fK99SPR-9xc[ RMU!>_{pBy]UtCV 8>y%גFrh;I6wPBTh"4(=ZI(TMUxxxq<x\qXisf[:,1# .$XxGѰy{6D_v8ri9ZG,9i%q_g-yWb>dvZߎLh_R"ܸ!ǨD\'3v0!	?Dմ3w+`pp9f	Ƣ /@'C&gW$Ny1 vؘ<Z٘VݓRnY$F;/K=,I{H~}q
zEeg#]{}j<MgXq5:Y?^adx߃z:+t:`O\N=|cz+xx'4Kg"',wctBt)33sM]
,ǃL+&F;cm NFpnҶ	o:~ #oPK_6}  %  PK    A             +   org/bouncycastle/asn1/pkcs/SignedData.classV[SV
Y	R )`$:B15
Y,Ҧi//d`ZfZgڦ{$mH{׳u\C wKg8qv)MݹMR9tv9]5!XNܜV
VtMM;fٺ3D"^SQ:U!g䠛s$9"DҸvdSQ9t?*!kj3$('[pZӺeRy9=fjP(!9jȦƠe2ˎkVJ8njCH6&F4f-{!S]u(-[ZSyiPr&ƻcbYCR,Ti,jcaW
C&l}IwbsaTB}QV_*PT~a_./*a*7Sd@#IR0Ԉ3WXG[X޸pɘltdqE62j#-Ŋ7<xͣy\2FM<y\.'H?EPl@!Ak;ثǥ?"Df9oG׉Z(C;F3SʯA%y
,RbU*|UnOA9-V9ȁ7#OojdX%8ܜR>-"*0 "ĈH#QexAv*nhv@D9E`Ha&a$L{OD5Fcd}IFL1)#:>gKFf$% Fʹ
#@2szp[pIFa+Eg,SlDnpx.aS\^C>os@j'O 9P.oCz%m<
n
Rs+\	Cy扷JYdMKX"XꃛХM,He0/jo,%;2&u9u_3e9pXg<kP#7^[\`:{u43H2ۂz-,gaq2_?~כF<x\+P
|	Cj,RWoB<z1<꥜l^k=>WS˫6r0>ODUeYG;X[p_qj;vp3[{=y<93F#%F PK-    PK    A             +   org/bouncycastle/asn1/pkcs/SignerInfo.classV[WWXEHb@"%(muHa$dAz_+]!K33	 ke}3_;c6ĸウk%Ҫ,Ӊٯ)[ZRX*bY6XVґL05kjF>zҜ4C_chd4Z
[Oƫ5Kl3ϚpʊٸOt}RI& 3#z*LM͌f&)@$Ө:C wY:9螓1ffjwJ͎&fܢUNxWSUO݆jbK0|٭
hZ9%T2)Ŷ,-T 
:[nO9=9TVլG{hFJȰ1dPvolLXgmƔJ>
{9fԑj 
r~[MYxeP֍,ghlgSvWN'amĵ̘>i8U>.?Xfoe4樋z(5yo>6M&UmZ朥qP!E*MD"8.℈":DDE(
oH:\![ iYq}%5lr{ڤْ
r7-Z4UFP~v%02Ԗ:
V={UͶU7yvUc:KsSumN{UYPKߠrlܨOz9
o>k(Ӻ#ym"#FSwB6nfl58&#\Q2Bʐ8CO.\<^/1{q]aNF8yE;2vcW9y[;LHƔܕp ɉɬ^0N2qC%)a $\."f$\BVx˰s]5R+nu6O> jPb4.\fh![@H@$GpYyE+O0D|"W0 VГXD4HYxe|X{P?ѝ4_}vM@RħJg9y%T++`A(`NtKnO<J2>Q~w;-<W<tIR8h)Ѫ1k`Ф\rs*o,b9#f&;8 ߿OĠ>gEZA>}uM'|rKn͈W0ϗ2nU0/
%snT0ϕ̍J斊%s'nj^AoI,N2>{>'vbKE|s8
.$:b<"z; PK5N    PK
      A                org/bouncycastle/asn1/sec/PK    A             ,   org/bouncycastle/asn1/sec/ECPrivateKey.classV[WW\EQ눶
ހQRQldFJ~>w_ZmbjԵڽg&AФy|g>'?u&wJx e0s3<B7-ӎJh=>=Ю.Z3c؜m	2=)-c1`\Y#_г6*~s:kLg5#eKXCUu+e;sڥ"%zF\Q3)y3G>eb]!*`g͓za0gM۱Jp.oĳƔaY=<ۓᘙI5c))G=cpܚ2m,"Sn	;sLx"7cRza`Fzc=fM+SR>usJ۪s]U#Ѽ9evTg7f
T'et9]&_ZJmg4e
F*DgupaN,`ܠ~s+$F`V	l!S`n={B@@7b+Gr6[7իz6^"jNq!{iKC=_5;P"rlZrn캗ٰfv#J̭B]JW򪗻VZ|NT끺K'ulw,%U.Xcl]h(;W(I-hPPA	F&Obg
qJVЎg(H
0`z+؇8ǫc
.5!eGe>^d822ÔxA0^a!#1X20-8&e2bΐe1
2N 0AY4ȧ鼑1[O]֧/p682Ҭfi&i#I
4Z	i]?k/zCxR<%D{h]D4[%| -8^%!\Fl^|"fJ|@7&5fmEN%-/S{%|P'>.W{6!xSܸgymMZGLdʸGA
Ȯ
>Xġ(HP
(&}I5@俇vVO}Is<U9P%%}+,@T/p@@Xb!ψFU	7pth~%.xx(nȚ<e]r8ZqkaE)y=[B5-W#"BQ7Fz~q&_IX_Ed_B$PE=[~@(6d5RĻ@F޿q9-pOCgdQqĿPKZ:pF  
  PK    A             5   org/bouncycastle/asn1/sec/ECPrivateKeyStructure.classVSU-ei-CK%l*(bhj5,M6 >7_+3'9s7 ̹;{vO L`WB :GW%ѵ82BfRsFbe[.F]
6ϧ\>8ƞwӻ[E˴ܔQ7?!&Ht{_4]
N<$F%[vxKƎwCOYw(WO]u%U)Eﺾegub'饅dr\ǲmQi,"0jj/Sv
4?"Z(zk߮rۤoQ<߈:t:p6D58fs2~:M==X;iT(tt?-7#Bm),j$/%˵v86EK0\ex]kn013ܤ̿hRT
K#ņH^ju'H/ 9ƞQp6ڃvkL౎_+`muͦoBs܄BG%Tq_cOxR:b".PYAAB0AUD0BŇ*aJY|6%Ȍ^̪"-|"tA¸
4|`|@#UCaE/c^5蒂XkwSAQ> A{WKgy(|&}hy.,kl-1HַhIӂ
 .L|t]t*Z
\/ }Cav۹C9!&rP:ao3bᶎs>{ !r`$t SLHJ>lRŏUrk(ItB
!C!0yXD"Ox*`Ch99vok0o2@hFo@#C|HH~%FɿBRi l%h1?GGH,$~s\Ma|RPjpF0/AkWI͒F7Cl\6S9GH%(B52ǿPK97  	  PK    A             0   org/bouncycastle/asn1/sec/SECNamedCurves$1.classTmoV=no@nlh
Nk'~kYع^2		8v;/4~~Դi'5@Yyy ƾE9MG
>Hl0;qϵ6]Y۵\-f~svuێЊu<?v'"B;dgQ6c;#/v7λMeV`YaCnV'l8(ӵ98:׍:C'	j$"kL|۰J|av$$\<~(DK""&g:Z_G2.pbPq60$΋0<5\$}PT6n&>߮esNx4-dZeӲ>DqrcW ţCq\u_RW2V%\{֎t`'O胸{-aEε
6gK]WDkJ]D%xYy0-HyP݅'Ayoe4
bCõFSç"
4TadTaWoTD[-8%*t쨨nJH<MFNe_}yTd(scn|iPp.,Ѽ8mJ>]ށe"AupN6+1v'zuZ&м^&5^#oV&`Qsӈ6=پ"k=Upԉ87PKJ    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$10.classVrFD1.$)687.+%@kB	MqhiWuH[V-?H }>A+93	ݙ={.ߞ=W Dyx/3yc$<8Gy\R0PZWpi.Ytj3KT7`wH<H<߮U|lëPZNjU&FU3Luǩ:	],jXw|jVP2Z.G}b;_[
bW{fI9KܚRo54UMV1t&Јfizȝ	#HģFnPXBQdi!t6P׉!!j
&
B#3jrvL9E2C# [VrSFlI*8l+mVәx-Tz*Lц,i,N,HWHD##n"lJ֩9榦kiVmPovH
76dޖMxI JcRv	=3{OXnm.ƉLեV{vbNe։rG̗pIMjo3Éy2|e%=w'Qny
2^%U~pe&km7ûԧ#VAU|⊊IBU%S*_i(u-MoגV>GJSmDOB6#Ⱦlnmŉt8OzzfRh^-}TzcIJf3NrC7=}
oza>N)1,)n!nq_1R\5%nJԆ/nNe,d9%+|]o
 (_)Y,Ľ,@qW~V$~̛"yܒ8m:ё(rءInTJLo q
gX~K/|{veT
܇UǵXadd3v?<)LVeҕs3~_i?ì΍sx4>rrzYY~[هV}~fݭfʒr9ǤͦlPKxT  
  PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$11.classTmoV~ܦM0ـ1BSpnY_hYZ&!<ǄLlcjB!GM;N+
fQ>>9/W 8k pz
EXBqai	+2Cg&j}fv=C
qfؚu܆.|fum3
]2]~sߴuǱMM%,bG-fj.xTsEhrf8|K-\s f!gqSN2mᙔ%|]4k,Й7M焒g
٢KX Gqy\ۆQ,;̎	O,zIKxO0.?H
o<q&VZ'ìQ"ne
ƇiK(Q<<Gw@S.Jڞԩ۳ѯ{'nfsNx4d+*#N^;,o;b8Rm+	գht<|^JVYWE_VU)lGQ:P+IۭgBu՛5m	+ʃ36HݜWۘUYse}:ѬxD<s0͞l31}`O[븀jckhqT7Щܩ2:@b2nRmꮌ&Z-p-%C}xp)H8[O>=={id($*qB)DHx@_Whh_8FPGszi7|k,o,>hTHoU	m-\,U;)Ulr锴Bzcqkx48x'kܧោ/)y8&q	PKgyS  h  PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$12.classVrF>"NBR+87]XPBSZڵ}$C<@ӕbB5s~ӹHWBbé<Xa<y 0TZ7ԲUFJ"xQ)$MECˀnc8qFq撚Qsy *jjۄW-rjUcDU5l*Q8kHQB'1
%CM[
EV3;L#'4lFsBG`iG7H	:HQP:bEaufqKF4-d!0IL?I1"jpQX&4DWF*ZԢq&0i28,ĖC"l02`V\\Vn=rݠF/8N1:	8<6 Y5 Pu%78vLT3ֳnˎ|yrnMxvǀ|j(Su)E>G2yXq6DmrYiPvn+]V|oEge\:BKiN9{/rțVVI-|VNvMdhzx
D8jWn,}XKYeKvQSzVлL.	M(	_pɄ	S&LpvPFӒfe-lś\yjPdv)it?հ>I`|8e?noŉ&v㞂~	Qpҹ?(8}ov~}=<>soz>Qd*"|E8X(pZ&"|S\5n*TF F*nKXNJ|S @PZnb jl9^;/~]}UP\cZU]D5o; vF^ սp
L݁<;x^;s96
w3udOj{(s2Z=YFڷ?=ta.dC˟]`ٹpnLj2+4˳'v]ٹٗن^	hd-C}k{73=0PK:m  Q
  PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$13.classT[sF8nRkJc]Vׄh׻M	0xRma1rGRR_ԾOtxLw83{V;߹ǟ lWPB+VA*Xj.5),nZ̶lOq;.	mk攐vhv~3+pmmqKp3D@}=NcZs)18Ե
')wD!	=J8mGR:fpC!\RP2-mM,$|GM\Cqϰ↮ܔ5K0|3VLŘ8%DCۂЀZq̳q
{
`A@8amXqQ(Vpz8LAwGQ㜍G|*Ih {(_F{I6JäK7aGYbYqv 3&\2is^h$
nF
nfsNh8d~ҕ,ikԋӸquzM3}7~|
X)2>+2(2*cU530Jzq$IL~׵FgԷh}הasDЧYEWM9W֧sͪ
\<L0r>m<BEQ54^Ѫܮ2* ["*nWBmꎊ:FM*n-BÎu_bPp'(/F=y%IaeqUu,%K{/m>nO_e[1vjKR>*c|ړfksT:oS؜r2iI1:[5ezOZN.<F$|'$kRwIO'I\ PKEn    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$14.classU[oG6qbc.ה8LB6N
uؕIj_HT>?TLqTHsfΙos <P*\*%S»KzJ	3.LH4'&fUC"TP
_#b]S?
cߧ2Lo
9d@؏"%4T"HFTHE<#~B
\͂AdĕYK([^'tPWHE"
s<a=:R3B7Í'0łFDA"۠!es}|?`RDBQcUD3*czQ4	{(}AԳQ+&8%=%/3CFM?:('V:?yՠq5H,cd<Mt0tPK[n62o?NZYࠔ[O^jH${;^sw?h7Z?aMɰGôոk7AW&ֈx3Nj1k"Q%GU4>{mZ>kNAO<.bOyWQoIGko,=\/5u}\V	[bѵqSZ$ߔA\;DQL@4./eI'`߅އa2>XW9+x\JWs9V+ 7+FVP4Wke,`=WUF
E|Quxe@+^Fe,wPppZNe'͞Ovt7!-u2mMn%;vY>u(=<D	v#|լXSzZzP>3/P6W)bX;"6hթ#l7CV#/xum9+^9Dt|
ߌHnUn;qPK  X  PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$15.classU[oG>Nl[~vfv@P		x:Kpeޤ?}!Q:)CG3{f; f
j58Qz
N֠Q8^Oq9V<vࠉ6dyoHj$VkK1*˔0s5{'bC6b\4(ES(qHрP)7c%TVf*H
OQÝ*JwLoVb1U!x2BCPlFyRwVKn#	0Ո`9AeGXJSkf{)}kǩDkRO)S:0-;M@+[R!ĸSˈ)*pƘRGIBaiM$EJ/<v#H
L9u)a$0ICCob=v[^)*NpNH,D1cJ`$p,|@=v>/:tNvGyVnw'p:eO"hlv~E>ʺp@wFy=]udNv:wٸl<qn+޸=ኗ
ma觺`fD',DexwAZe5.-zN>(s;wnOeΣ*,T*|PQ>'UXL\{c~6%\_zh8^ژ	,oJ<6cJ"5
h#lyW)StA|YЖ95-6]Xn9Xi|

x64tpPK0)
PuJs47]KY.uhz ~NA?Ǫlv5#|2xQ"$p;>k׹}L x^Ǖ4+Fx$ڭhUоPY0?q#./Rs nm,?ڜ; ._][}_V!=<~\v#fihLPK~Q"  0	  PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$16.classTmoT~&uVBvesM3iĘ`,(u1B,cAXssr} G55jXAᒀEX
M353l-l;
݈92-r' Y{ИYto_Czmg	,M;NdڑtKsa;Fkm35u}c̳:۬cR$GkB:0u<vt[' 0/`io}.2NHq<oRVQO3.`*^, x2GE6H
yI1Jbk9}8yWb$.M/(ߍN$΋!W<՜'#SބnmԤ;/|k='`4T~RiwAUr SY߂E\k"T
WIqWIJpVw4o]ۤms6YMYI-Hy7\QhV^^hDή{Gy#iz,Cƒ!c23lweUeh2V`$N)vK'	_:%܆%RܓЂ-/2K(8Qޛn,ys]XA)B}@Z ]8et9 VՅ1HTꋥbmw^AyrvҨ6q0F)_S>*1/m+cǯdk{%ms}_NHn<Q'Osz{XPKKq5"    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$17.classTmoV~&ujxY)8}vꗸ-eC|0%FCG!HT#LtϹ>wj5 pìzẢR;㻦ۊ^*Y,ݷlw-m9+:m҂*g?UjaEST[7m6ںjhe*a{؎z$UqQuP:LcꆪNйA<w(}AeYhgvaR=JS0
YҌcQctMQjuO{/P>3w}irGGaf*g,+iMt{2%J;dXf	̊q/Ae;n|;CEqLe9V7[y4x|
<ᒴWVy}hNj=v8\Z{š!*m8nNB#oL
sҗ):)&'8''R;9-W?ENs"ET&"
PD,@-Bl,V!4a	XƎ[܆QSZ9T\9\hdԀ}?Ozt㘥02anwah5itu%B;e6^n/߭s#xP!Y~؜{ѕJژ;c:|*UH/׫#tV_WFpbD#X=w}?$7IѨ9U<? PKnI%    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$18.classTnF=NvcǸ%leQ؀7o'!M $$TʏVd;)jU }3JRHs3~g~ X8 J$,J%\0
X
F1C?r"z1-Aa0}|˱BH8#a$$g'~D<bZcz9:I\3!	8cb<~:Ĳ,%$^dخzTN츎mھg3A'0!K΍
_Xf-/mܸ4htRRKHiERҥٰKTE?Gh"ͪa!@VR]>=MzA^wâ}7<ɳTK˜h%ʹ'qE쎹XЍY-t{:}l͈ƕW҈IݭAZX}vRysRۧ>zQ񩈫"">qMu7D|.z8 {?~
G@S޵
m0tku3$ߗA~r@4-/+Fz?U?̒S
|uPp/2(,p)cb]-2ְ',pPqWFZ|<KvGz9 i
Ҳ%V׭mg%gjyg|LnޒmW9eko\5ؔͅΰ?B󄺁	5l`Qp57X{_ls}$7<d<%WYc>PKRz6<    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$19.classT[oF㖰
-Fa\_@HHròhcKUuTZUGs||swx?~
C,9b	Y
׶	,ߍ|/#-_U,Ӱ4O@ɺ㹎1(H3HC70
5P5P<O3MזMݎd3Meנ	UB'T]lRnA9~ѝ
8؆hnแi[eXƠ3L.8Rq*2
2%9K'(#R` I2&%Hg/r\em>}BKX:W7%Tn1qE9"R\TDzh~&]U8wN_ȽlTWIOAq| ;.#UsB#o'<|٘cq_,bpI<<ӁTN:=\{͠#:6cs(;
)lmɏ1O)Mgô_tL{Y},a]J|
q[,`JV+X*]]8<V&t`V!
·i2
z|鋳$GqQ46I)=uj)_j@:oOcj~ii.rf͌qwnT՞1A|zN{c?OB9	6nF{~;>xoOm:
*lSOwrEژϰ'PKO^;    PK    A             0   org/bouncycastle/asn1/sec/SECNamedCurves$2.classUmoT=n:B+([:ic̯kG"M8^vWeG!'XƂtsruoh8i.6 6>UĘjꦣ(a芩=081Mss\=llgjZ=_3BݲԠgj=#u&=ㄾZۦ(LW4u>z^O,7MˆQ2arH	
cATQ:*w渡A9aX4UfQGBIQcZ<;gַQ=O$/8$Ƀ2%IeOrʚm>OABH~dw4<LdX,gis8"U"wLS-
YR9l/&{%xZiQE˾.J:oNXNҪy!$/8g49yZWcS&Rqh~	5_}ж%{C"?&ZgQo -TK-FiI?-#.,>q,˞}~(=">DWU슸VRG`".Cq&zY@-ܮ
}ZC@V
5.KAN()ez4ɽqTIMҒd}B3Gss{n> /EkDsm߬5kU½:nL_hQۨq:乚Bak4o5	w^"86W&_aQw4vζh*ExLI[ޡ^\ PKsQ:    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$20.classSmOP~
:J1A:e6[F/&$D]3Mڂ{$ t["!3{Ϲ99';ja2MwdĒxY$ Vk**ؐeZ+]KZ(*bXוBjbQ
.6jYKVE*QFijQ*h]P0UEijņ ҶҤCn&opѐ|cpL3#dY/uG?4=q	2=
v}N${Xu@[g|wvZ;2>uLAw*[TEUB5菲JVC"۝n'KnWDCU}'$gΑDOFXDXLb4fRA[fK.KaCF 	Iut%xNj-_@K]rH4۷ۖGߦI^\zzG<n`ǄH1<aǥ|py|%!'PpUCb7Oѱ]Me]t	p_Fi10X$)v#ٿ c?j$aJKE3)ft bl,|3,~g9l`Ȝu\>wZSȽ<&Њ'	_PK
/    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$21.classTmoV~&qjQȀm׵$j瘐)u$ؾhHQӮHC#L=>?w h6Ԅ%RCO Zz[U4C-JmjQq
P&ԴJڡMlM˱LCQ|Ђ	]j^{De[{﹆Sr}O֝	}ZYjD1#24aM4'8HڮqT÷XElRMWX84ve	BIwEP6ҸgIT$ivpXDYtIsI<'Ol?H
o"qơYZ[Y?aޕH>;E2(8ߏO8ʋQ"GyyOEW\,Ўr7{9{QU;*FM|ҩ;b8ln{+Y4:Mb,um&[<>pM:<ҁ\N:>g=mm{ٶ9НY`YI/P0\QhV^^x;i5oKq}vEh=+Xq_`CU1dXZRnRlbG@Tv܅!R$<Ѕɡ汛rƣqΎ0)^쏳I换<Or2kXd9sVsޟ.Ax]Z6W[b-T
V'rҳ7o]Fo7ϱ7˔)
Z>A5Í=x_l_l3}GXPK>4|S    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$22.classToFMx
#&($i}mf_쵬IHՀqLȔ:v?B!5FZȴ'{}sｳ?oT!VQbIbu$R5U⨖g3ИKtQ
B˶tըj:4-˷TFSMg&@=6]5,Uꎣۚ]3E\Uu5t#LeciTm`Iɺ*10骾h.5mA2wy= QgY'Cwh\8cvϽ4<8Ƚ8'y:r9
|
b8<Cx*aZ$E9JIY>0Kőg	?tc^hRf8/fsNh8*Ϧu7>iLc$8)f^FxOǯ8WD\k""q]
W.ä[=ךYPo>6gs819=+e4?N9ש ׿?$9'2-^I\˹Ͻ֑	e+hʨ%cP7і:2dle|
 "npvBmIX%v$4@%܅^(C:%3K.I4e
_$S6,8(d"
د@	љ.r
~ީ<X.fIV&U-F\ŗEO߸yT/+u^=C0WL1&ܭa8׏f-|>gη/`Br|xdm\_PK19    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$23.classUmoT~&Mڅ26kfҤ1$n:R1	(u,K<o lVQZŕ*jU\U*0
Pi{>usB4
FyOH$hhIDh. N2a&w""6<bAĸbTXv@'l
M+86l#!s!'av,C껦cQ3.Ә|_aQb2&,
H*B#d58	
GFKQ;r}PR*pa
i?('(I) ofa\팒8O,Qra}$OFtI>wr%9ǝ|8RP-HY=i
6iNDYџpv$3v'\2Цi)7׿9{9dMnҜl`y'i1Q'/Tik*QA+Y
>S׵ɔqӋI{硂Z`w4G>۔asG[6fyYB{7\YhV];ݞߏ?G%T%`C*6U\/gR!xe*V@
YjBb&񰆻k
jhAl%&{<܀$1󦝦Ɉ
,K2IoaQ.Y"<wפV.o21HMue/Rꋅ*bmw^C{vv(7α?F󔰎)!t%11£X
_%6]/	)KOsakr_PKah    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$24.classU]oD=n6v!JCDu̬`$%I*Uq6^iॉ+?
qDEt^gc ثZC5kb`\~bfLaoȍ)vr2<r.]&q6^!c"WkߏQpb<He+
BHuK)-8d.c
qRRmp7D ЂS,f\iuO0HE䫀ELrmUVPLB~_h!E[Q퀋8bQ`ۜeu0ԓN'{_Jg&E'09JthA:iI
yjyhxRt$;Yv˰9vYNJ[yڱkO+hI-5pw<o}k	ۃH**CݭwAZ4+;̭I?NNTGU\bQ*>SQIֵɺռn.[Rڄ!tk	2ȷU列ho' W׿ȿ3wv+q',\~@3
||>Ľއ,Xs%.S-븍lf:;pQYu,݊:ANtdY:T$ug-LѠa!]%o^9ePcWod7*K>ߘy鍛酙Sl!BNtK3쮼[kVӵFz<&KIŇmR; PKFDh    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$25.classTN@
tUa* *岶exU1
F"ԥk6i^JD7%].IΙ93e2Ǘ / W@A0HDeԪz
O=O!jUS!-kJb溞hD$XjUw\ۭ=]TU55Vdݬَayfa+لH普fVפf8eDlG\"zD1Xl-ē䞻OWp~$I2QCΌS8ގwC[A	4Ԏ6z
f˕x##o_עl,iȶ(n'i+$$bU^!6\4lв2~g>}G䃨ծ]Mõ(LR?L)IN{Nd m;~k;X̣3r,YYc1<,.£nm^`pI>$<<l.wCVp-?lif	)urQ3L)Kai{<o{IL%kzGeq7xe<B1ifxlTep(dcP2fJ0*q:LdGauz+J<~)nI$uJ6a:3tާc>a|_zx3enb>#\2Z)J},~<d;C
hfw}^>.,*v\	ƨዞ-`1PK"  x  PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$26.classUoD~ܦMֆ26e]ҦnϾnҤ1q,(u$-O |FbbI~{y}~`^
5TkpAbX!m8
Z0]3M#~Xn;f01s׷=]'61HHp?BP?p
(u,3n[40<԰]FxhY.->q}SaXv\fRFEHBNaDPi%3<ΉmjjFH0MQH`HXh׏%Q'ychzi\$*$;M$[,:N$%($GE6'E0z(P+レiGsݴH54)bQjj#	5/nFo<^pR7D,|997`'`&i,W$yl	c\'U\QŧU\⚄˭IQWITVpVw%4Zo]l@7gUmJm)DzwAZZ
~'92/qc2R|M@`R
Mu2n-WpdĞ&t`]!nJ {	XG8I|M7M,Fy}]pcQL"$싧U%6:Tp	2mϽ;www*R-sY~'Wm7*_2[֔Olo+c|}N}q^v%t'$7<.<zCt".
PKw `]    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$27.classTn@L5h)p@G_m9E"*
IMJmv0<V  o'@ VY7 
C(rW9Q*ڶ:;8횶Yi5U3YʘƘiinԘeb+պFjLUtv|K7TefuKg^WaQS[k9uLQD\smE[Q+FԵ
GBhiZ&FY6Ѯv/H0 0c񳠑	\bϕd=$؋`+7쵚KQ6s'Mi5^74krF
ϖ)z-k˽ѯ_;w4|(͂(#sٗ);opYU1c1c<qIwzyIizt{ϻYr=.BVfnv5YҊ{fPNWG}kViiwo=/IL%cozU"1 0.8.8I0Eq9n.ag	8j.\&-dB0i0Q wyA\0a MÔ\'hk6e58Kt#8W?Yv0?_=NgL>S)J6]
<ݙkwF\]ɵGxm\!8KN{,#=E=1PK  {  PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$28.classTnF=Cv1%Ie	{9NB츤R	r7fY%I5$mH< :ލj7a+4wΜ9ͼ} RC`B_zDpפGMMa黾oyn;0p
ӣz6(cmQ;o:cvHvQ
)cumޖesz~zjLn5	,f{&ݴRv`+ױP0_8.7&lCG}ݶ,7 %bKZ{'5t<o>VdqT|?;	QEЍ>:Eh-;n,gGόVqӬk'(/	5c<L;YVƅ6,Fps4E`1wyEiTBR~󴊡U(U9\TK:
KIKuV1G*Ia~tEK'*SDt^~K
I-mt
>[P#'ϭGjhhĄ5LaIe
gRVK6븥
,pJS [U0`tT"|5tW>"\^xhIgy˭6!TȞȾ|o>hЏRdg\ެݞV5zYrue_a5_2R'Jv~?1ɽWغ:{ǫkВr;íg ҇ʙ(OC?PKR]x    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$29.classTnD=Η7ɒ.iQn|;I{$-RlWP^'?͊J< o"Q-YHs̹ޱ?jAVüV=B=$|;Nh $D=v,oھ
LyAHSQYE@ p]"ÀÈMC/"E<?8"18 ,[G(1ufaD>Tb|	be&%Rz؂S۴͈IwcQlt'LK<øoT
Z)#Έ-q0"eZ2ی+erW6YcZE$o;rt4)$?M,{_'yri^(Џ(}RN)ݴ/N9*|k8?Jet41zLU5ȻS')~j$EfE1x4I'6ix&lNG~?JE q;){}#ͪ慱R&Y)T\W**>Q⦂뭃QI5ɺLV`\4Zn]n9G6NevqA/+%w}9$'_>g:4XDKGmK5aCM3¨2p5܁_2[Vi
MP
`WѰm
a)䗯*:A!0-_䍳eiHɾ"91-y˧E*r];C0ظx}(r
ڃuwAwg!l֕!vSբ.*Z{g7o]i6jv1\P/`ڄ*}^}f/^#<ܨOţ7lcs5)HHPκ\䫲1W0PK
k1  3  PK    A             0   org/bouncycastle/asn1/sec/SECNamedCurves$3.classTmoV~nx2^3-~kY}mei|Kv;/4~~Դ$h5ӎt9y Q:.qx`Un?$UU
ՠXZئmFjO(M@c6LccETOw s;tT4Cv pTah6bCאPmzhi&J'	+Gv7r.&9KFOSFpy}sV ,A㇬8)^y|xi<g?%Va9ˇIE9fJ\RDycq0I;B[|_nHegIA66|?mWyۛAZexuR
Kr^*`C>|.Mkr:qF^Op]n
}`Cνm~lɑptkrXgQ ϧ\*%g?/C),>,˙}~(A Ct$\ö]	ᶄP$\*2D܀#bګ-"𕈛艸R"UR&rgـ<ir:hrd/^"+n:gj c[6F*Ǎuwkww^A~٨mp0*v\OZvA&8w^u+ǯ}o̎)&}<Ld>K7PK(    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$30.classUnD=nv54ICBdi7ˎIaώ!MV*flmlixDT!w#Q&lHsw̹ь XtTL5V)Y9,bv^df",n0d,@("?r\!Fp5K9m1Iq-At|fx h}_q='1m8e@"v@ť/l=ǔڞdsBnMڑgmɀ5!Fv۶lҔ
mA
cZD
ziGŌdWw:Ic;ƛ/A8%
Fx$E2	M
ǝ"()%4m|e+u"Ӎlm}:q^VF+O:RP!EYZ7I֗ooN,3?̊dH!4/ ڛF9ԇdwQWⲊE喝}W\y8̛
6VZ5>?smMXBǡVp8^<SAoʉhziA_7ggIOm~<1iLx+M
u\BC,VthXqk%n4Y'k4vi
K05܀&Z>+a.=L"ۣqI~<Jٞ};Myuz٦:(h<
c<ytYqQ˟˼w`cpE|PӯkZVMC`Swp甭I\o)W_ޣww^+ԃcm 9$N6@3K7zJb/PKޱ<B    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$31.classUnE>8PZPssۙ$-!.iTP*~,1rlބ(i"* gHTԥi9wn  ̖XR	.x0]_y!j2qb[aB|nJ")u<Bu:#-S6С2L1'm+Zs]w4fZ3Iebi,aL|P)lUjFI~$I"Qd!V)/$BPB;Ddu."<d)
O}IDƨ0Z"Ng8DQ ɥ	hDW0HxSō0	1Pe@-hHꂄN[f1$cf;NvءJ}u M
SV_%0Ѓ~紐A!f,ie|uv4|8OѺCr4a:f/K۹zZ0릍dأaj<zqӵI5N==<l|d6&DLea< Q;^en#;sI(}lT>,"|T+EX,EZk\MzFޜ^{k)W+b؄Atm_y#lu\oN9o' 2$l[I wԬ<@f*0
TaV+Wx>$AsY%Pe	e+-˰[e
x[,\{n
xf}o^:d8LȾƉ!;4C=z `| PyO^;TfS4nξ'Wm,ggO翜9E[)|){	7ogv4G$7PYEwոPKT     PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$32.classTn5d3B.4Gbgl'iKAThtv'ނG~4x 
F$,z}ڲ *LTxs?	2b!cb"K(ppLDQ40mLƎn#(&y$DH<\[J-s0r>)֒R8D(21e$&jJ%XI"V	eDK53QȉDXsBDH4G,aRidbRD$6ZX:jP
&4.^$Z!RK$+"JvcjLX3I<-w6`bǃ m/鄥s"̃yO""mbߝnfM~Zlv^drwZtPtV:qk[O~Rp,+B$EKaFD~T*'hEE\TB'݃lEmf}xχ9pՇ}ՇgmךK-՛][qa#nC7B$[nuӼzRƹ
l)G|t]\~o//mήϖ/wAZzZ*4j0	5x>tiq
.CST kp	VJji֦|uZ4q @<
6 Ivոlv7pG(+^v=myt0.tԁq|@
)7n͌mlVVx'gcXҭg^2Q'~z6:}|[Whuv>~
7\9{10'Zg^tԟPK\޸֔    PK    A             1   org/bouncycastle/asn1/sec/SECNamedCurves$33.classUnG>1n()PA\sY P)?TƖ
oGi@T>@Y'RQ	U;\7997 6 m@8^zOŌc4\rE*r/YN\v!F꼴
,Fc!slPK%2=(1xn3!5ҪڵPL:$.Pt,D'R-5Z3JCν*暅ZBddP3dtT:3J	bZF4Pkt[e x.H4.T,Mp-i)Ǽh͜L!8iN)1o$&SzjVarӉUD-8
He[c6B$jhG9dZ8ibF*{LM?R&΍ʹ$JJ2JF.)I`v0g	4n	!MƑ,	۳*ų*ZewY>
[eOn5&Шpϋγzڱ[ܪۃVNcUS3*Cc.t2)t~w΃{S	oǪ0u/8.[j)urES2{m*)JN0')Il,V.Nkm1ޘ|;	ŃӍ僂|W~ʉ~3AqvBow&	Xva0ӂn,D=|-h| C`R	A6zZ@5"\o"&\D.Z o~GCw`8~9tb4*GȾu;Cn8	3˯2LQX8:>v}F汦nk3s.ܼ6;7UO	mˏΜ=wrz~f~v>o|V)h\ޅ/6_:whn{
^]}	_yvI.x,1/GPK!  R  PK    A             0   org/bouncycastle/asn1/sec/SECNamedCurves$4.classUmoT~&2V^HW'M[;o#m&Mld,(s1B'Xʂ=sco0q"@pI(ಀwaUn= ڞَ:YcizƪaZDnlrUn
]+sȎ}C:Af:<(r4Վ#W0}H6x6Gښ[] VEq5\5TuO@lr}]ra0wڪyjqǖmc2w+$MYQ4UU[^WJ,)Yp1WgڷI<g%R>{Pô$i㜃Pi$3%|aVAe@~|?IQ,UD1yOi{Yh`{1|E.<l&EQD</iVq
i9),J{?KFiQC'<>M޴ƣ$(d
[T}vڒ!tsi(ȋ"S.Dì$!_iq[Շ-˝o}z(A/}t$\Ǯ_J $\.D4'b+U%}۸+B-6؁áP3peh\ЫٸO,cy0J$.y 4)Dp9uAxU~Q'yԨ<nܫݽ+tv7j9O2g[2gm֭77KDG+l?v^9MIHlּT+PKJ@3    PK    A             0   org/bouncycastle/asn1/sec/SECNamedCurves$5.classUrFDH1.$nIPq,ie]eBs1MqҮn#gl%fPdϐ6vH|7 >pIed|(O89\Y2TH$ vd(9EI<^-IjZ*%qeL8l
)+&e"Z$rI%T"TRѬr Y5HHzbZlʺLbHLjY,3IMɒ˞6cH۞F]Q4pŢ!rb"%U9æشَmت2!De*{j%rS=}Y)BuCb䐢uYƷ|\ 0QbJTWD6/B~x4+r/=N^h}!؈NFh)
jzHkw8
[^vB27n?+4ˮp3Ȱ/y݊ɞE,,lݐ!{4X;7FSGmm?|畏DNw9E;V3<־'_<<qGW<1#cGյa3]a\ҢAP;͠=3Q>#mSb0:`!I`'u,?-v&оǽZ8;<yZxr9x9_vg~;11i\VӘ4fMWH9"fD* RBkYF
"KA)Ȩ؏^DVS(b+)hx:fee+pZ.^rH1[,=X@7v|Ā>
.g!^>Cˉ㗓GPGY=<ԀL㱲VOח1|)~Y?B4M&zx<;~G/|[ZX%	_P__̌Ǎ#HťW}?-w ;P`a_i\d PKqBb  	  PK    A             0   org/bouncycastle/asn1/sec/SECNamedCurves$6.classTnF=k&ðM\rBr(I;uJ.؉
PEB$վBQER ;Ù=svf?w &E"ΉD񑈏	cVG-6{GA}u!cgQl9mڞ.5 41uumݵ,C]tB)4cꆥS+@:AԩfgGcekXFiUP9ASBwizfh!l++A6(wxN|8SCR(|`;^9Ӝ%%#8K5+Y^=zQҒIZrüxQNWj0e%Wae,9MrԤ4`(ބښڰ	n'^DesNh8id~"'miTqUUu!!{RO|&s_RWV	)hIWuٝ5m6xڜ#,?֬"?TAM9ש U׿?d%'i9fOavyP_rYhɸ
+52>mʸ:
Wʐp5lUjRw$4IX7npv	
v$4 (K>+_z2aR*纉J%>-vu	˸}1֗ޯ׸>jwAy\,Վ;	lpi1;?mo_1iLHָUI\ PK|ey-  	  PK    A             0   org/bouncycastle/asn1/sec/SECNamedCurves$7.classTksF=8jRg ȎzZ	M+	uB0>b1rGRR/$Sf:r2Sp;޳wϞXY ,Q\Pxôy]nlNnF/t2<r7ǜz&0rzqqiHwyFHn2ia(;j`Eܴzf^t?]õ<rg]rWTϫ~:M0#puϷzr\ksoQ~SM'9ISQM?0*|a~$.Z&yL"/H'qGiI(ɓ$-'9CNV D{O`4J1$j?L4)ʱВ"Z!R~PT6]={/
_esNd<-d5("
^{Y]Xhjm^h9tŽ'V$|,	JLpEO[;NVH6n=wj6Êz{tlΖ9j֞2wKBz{QVϡ4>j=P CR!
`C
#RpK4+Q):2ְUve4XǗ2nqN;2Zj!.DY:t+|:Зg/DVIHR]zD+u})pl{u,j4OuDX$<h0­|^B}\,Վ{3<Fzv~NcK?lv^xf*Fا OCN\PK^)  	  PK    A             0   org/bouncycastle/asn1/sec/SECNamedCurves$8.classVksU~M
%s- JZE'l:ɶ¿R>~9tj{s뙳 𞀋.	0)}>1ܒ+]I&<œ\]UKd,W*&Q4(٢Z&ED,*)-Sd,,VĊjzIeERuUe[bb	PQԫ:>ˁzρH.Eգ(uWRɣbIr0'.0QnIq%"Q30kpm2aųLjȪZdˮX5|		%HeCj~!x^	!o Qg,	ՠd0ᱺt+kN<@Eq%.K'ru'
̽~a/w: 
:]hٮ;^pb͎0/ξS|DOfc5F.;ӍZA醴
b67X?Ţ̟9\~fy<3"[I!(m9a^9
εAPT❵wӷT=tft|zgU#_Σc<kf儍b54j|
-mgCYow9YaĜ?;AO6/xJ<ǅϣM֯8OrsoVg111Y\VWYu+Ť3&8$ˠd#o26W<@fevVˎz=irv5rݠ#Qr&ʱ5=	 Y:2El}1%`kX<wS<S,2_NBFm*31ÄMZ-ɣ2(T"q}}_#t<{iyJmaq)ʥS=<΍oG|G,JRlʭͿDm}qj o_GvAQ/aQ(>?PK8 &  	  PK    A             0   org/bouncycastle/asn1/sec/SECNamedCurves$9.classTksF=JHydAz$4&fax|b#))W)3Q^ٙ)]ݻ眽_ ,K$ KP$|&sjenq[3	|fk:bL53t3}X@Dǵ[5M+öbt(xkԖn;M4mEڦ\ҋ:aezPR:Nu|4-XaaپA:(vNFm%% o鶌PNF|:	X`$y^u?x1Klavz,~OF=~IA>/ѳ8)F n">q\2tt&%q^穡<G؛hѡy5OWЋkٜ;N
Y}?)Ĵ쵏Aje\{uXOf_	!LĊ/E|%k߈Vw"V\Q㴯7O|WzwVӷO ڜ-!tmj	֘i0sxYy} -HyP݅'~^fpq\FCl(ZTn*8M
0JYkpea4ۥ%O:~qKP#z+d8Vy|ԣg/My<9VI:ʱHRuV֥1?&
.$,jV[]"_]${Pݪc꣍Jeer1:h]扖AVh].mF߬
co|icSLDviV)Rtԉs8/PK9  7  PK    A             .   org/bouncycastle/asn1/sec/SECNamedCurves.classw|GߣZrcؒlc1T1Me[.r=BB͂m؄$^z_rjTe~47;޹ P"ΞaXvE])m-DgQe^d'?R?S?xC/l4u	_;B`ad3|F_0ި
E
~__
|4c B(Dc8Ծ&`t"o;F$|Mb.
#>hZag7LQ8,nTo^7ؔﻰ6!ڽ@SE0oX͝@[o9o
C-
drBᦼPgзDyHЕ7j+vΊ >xf
e3nh!w|[i{cm=҅ElmK,n[WwZxwZxwZxu=ck=3;B;";ivv´7_4AO;l,[YR^i~4Mx>@'d=62[aHV0d"orz"
<z=/-pGs ҎpmNS<uwp$//,.;Jw''ڋ[]INL;)Ivd{aQkO{B+.{OJ|JpOdJRKnO/pҗ$ۋ=>)Of'ZS<_G/\PeN^h5X2
4`+4`ҠN`4XWz
|4h@5hҠY-jЦAA
BthA> :\/ K
n0Y@)r
*&7/%-#@@"(pf)`[0G@2s'`*&v
X$`1iS#L)_PqٕߥO+E=%`g?BAKx"JgKN(69ҩ華O?]֞H.zXO~c-)}zWo4gz"/M}6nSeOeoŚpKS{gkyYf;A_tԻK=dOY"
[Ցf}ͥjW
:ؾԶȗ	#NȘX
o:aQXXad2V1kk^F=h`&F3#ha2 #`l`,4H4H4H4H4H4H4H4H4H4H4H4H4H4H4H4H@ '\qhx	Wg0>>/:_r"'dN
q
'\rp]',9a|	Na?bec`8NHeQьLXq+W23b\͸q-37dS?gKƯf[gGƟfW;1㟌1x{%A!xot8m)|FfxBFtl[;;{{GG''3N30݌Y989x2nvkx^\4|;r0aHB-=?~z}6K[K dcr-RZtJkTZt:QV:z+)mPWڨIiҀJ۔+
*
)P+yt҉f&}͎thN7}
_}uxE3ڜ<׍r.{{I=DGďM0tlN6
{ӴCxHP;$:=eSy\5oj$͉SĦcW>
ͥdҸU	=g@tq waW+rz?yMnޏ${w᩾ϫsNz_A},
ΟTӣ]R|Qz{1wY[*4Ɗ 
u}V`Fkv[%R??,wX&c]ǏkOox0Z1`Km7>lۢNۯc]Xf@7:51
8K8G
0ȝq[=c=ml'ܳ:Vs:.4`u\dnr/؀=6Ā^qȽ2۪cmӱڀC܀v#vXcQrt\i1ru58=:2:p>W q::54C:3:7`3{u5f&ܬ18%α}K-e(/q7IlXn$6IgJl8"*6Tb-1+-qA-ĐEGbŖWK,İĥ_bD2? Ye%4-Dr?,HiXQ4͕L"MKiiuR"Ms埒H\c%4Z4uV"Ms=Ά
!6-۪tJw(ݩtJ(ݫtJ(=J(=JO(=RTWzZ]J(=RC2 PKo[A
  ?  PK    A             4   org/bouncycastle/asn1/sec/SECObjectIdentifiers.classw|SUB{Z*CpQ{DhU$mӦII
FvJ96?yϽIKwݾZWAtA SCSKPbAnA'	'
t	:UPA	&h!h34JhAg	:[Ps+h4N.t],L%ekiZ\mz<xG|_sXN3^px/x/WP$'m#8PnE,pzLa]&veb]rQk\Dɹ
B 27KyVi*
*ўhxcae*a8j|eQoU`fAթjh̗j<Z);@+\m`.GujO*ʫޘFj7ӜRCZRNf]J9Nd=~OLSh)O߿rH<\Nztґz%b?QArﵗ)IG5~};M=.nAo0.gT&-t݈7(NΥ'=':n#q'ɹ|;,w!NCo-hvґ=':nܝfrHyiDQHO̝Ez#D`AC6, QɿXD~`b`u.\@%Pj! b@=0L Sit`0 sy|`X, Kˁer`X kuz`	
4M=V`<  v / /// o ooodӵt/p_mwIdjoIy/>2kT.RXdSTP9]<UUNKUPR*UNU9MLTQ9WUWAFTV9_$U**U֨PY222^eHeXe$4MrF;h<6SnyVs
ڃ5JB{'{h}Ym-ߡ54
3k.+=ƚ	Κ=U@c͆OzO#Yh?ǰ	XֽmǳڡQD7jyM7bi=yvC3Y?f~
AY߇~ m!4#h;֯Yv`ڑ;h'ϥv+ؿ`KؿBPKbSE  "
  PK
      A                 org/bouncycastle/asn1/teletrust/PK    A             <   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$1.classTkoF=N^[`K['ԯc
cJj#T'wcNhUB"GUM%nF{{ djNup]z_eEMP0ߵeLAĂ@,";
p0,`Dw[aK/Qq9.ei9IH=&x!,҉ВqKߎ$
@i \Rp57(GrOK7<JRs;apfq[1TD	b7	m{;V`!}@{V[o~qZʳ&{~&'yW5y#G٠)+֛r[^SO~f>ɚf<.|؆YY
˽b qnfuaM>ΛjnvڹKv'T]ֵى?s{.ūMmɼU'
.?i6RQzx/H*>TqAET|cխYgqصuJ#bfYr5ըnx\U!4k_~9*6JOav9Uy:4>~sax:`MY~>2Xe8Vk/4\ق@(w?#.q@]y%Y]5,Sz;iƠ &zX;e$.oi_{bD#.)l@%XQ^vbK<o_k74ub"p0٥2GmSPK&;    PK    A             =   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$10.classTmoD'iZޚЃ^7{פx׻(i#U|2zC>'&?E+=^,xgg晵o? lM8	`~σYm43"V"	)Q$2hi-*RP98H6
Yu0)EN&Zsb5+aCMLR0!SjX"[J1,MZED
jD1iS&M$I'*	4VZ8cȽ
4
DuB$ X(
]qI#(K8KbT*(a1tqENq11r[0i2SJ7YO&B}as_Y(q^2Y4kow˃ΎqV=
ppAr|5>,I5ʃlRРGyUN`wۿXQ48gUm-t<*\~6֜ڋ ZG07\nـ;g=Ĵ!3fѝe *`)`y}񰨐E`?/u7.$GkAζUxۂa`ajû@}
66|XȇCAPCgb_E4]գEfM&IV1~qac+}fn4`{z,Z't''vB~,CrxІ[@`x7v{m<׭cxfJpmU=PKxh  z  PK    A             =   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$11.classToTE?vYV
he˝":3w&bZ0!_n/f5U+BIG(m	Y&sfΙ篿؄FM8ۄVe0]DМ%Q&$!Sr):P7Fhǣ1Q"ϽNH)&"Ⴋ\	\LF{йpF|$2xVKxfSA%"HYfH˨֖J`a8S7D8t3"*R
ByD!X4H$+K0+symUI"B
&PIC\DH`>:fH1m4*w&KqN*\Dto]qnT'$Q,iJl̥sRQ`0opd8 N	qFXD(䋇&{;j56R]ȹZijЄP4Ngpp}/'!o>Z9EU^#b\<,r<AvY_4k[oJ^+zAlVvmvSTWLWN&6ymbD_:Sv珶ɪVD~6V8aeq?>ҩ+
xo4R.7Հ3]\?k\~̻et"DwNB?,Gpe5n=3}>TQMAtR^^hgX!ӐOtrN~">zoNp
mxm6m8Km 5n-xh l<,j{aB̆q&8z0ʠ}s8,aPL&Iѽfpab+g^ڇf=<t]oxsQ)+ࣟ1*4PX֗ n=++S\,G \AC<},%8PKz    PK    A             =   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$12.classTmoEKu
-@[P'q޾RWQHD-_8|	KQ|G!HTRԕvvg癙;+ Puա^3uhl;	(+iqF@tNAH
&8R,<x('Z,
+lFtHk"DZ´A+N\dgXcLupD0]rAEP)թ25\Q$C&<B33I	|-kqb$hN(HKME>g9`mƂqg=v	K整Dz'PKSC>JHkĘHAx<H)eܤ8`="' lHu)p#M1RWrKPLv+ںTke,B8j[^D{FYO&m_~!s_Y OyVd2/&0K;q@vo0+UAc?üMFWü,'eo'vmV۝FE_ژ$pmvɮ6D~:N;\~my{2ςR;Ȇ5xob
.UYݚ5.u>{6gGݞ[9fA
6ZA<r.{sͪH<s0͞W{wЄMxkkyo4eXm9XkyXpl4]
ieheX4`x
ʠA$dǻ?Gxv^>&м9fI>$1Zq o3穵CӄNkVchmnk2ѬwA?0	Ԣl=VrF|q)h]ܭYՎmgPK`    PK    A             =   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$13.classUmoTUvYV
Qd{_1L$Du{)5ˮٽEO/HG$-R%93gff_@@jC
6k6t/*9"u)	a)Z%c3lA9ˍDsh
K)H5)gi&H0QHrouY6QN&e1b}6t	D,@ـ	NjO#)14Jg1$,^gJccZq"
yDbڄHECec(qQSĜ3LrRo]0^guADs"IikkK2Ff!Te8
'sj"gb3"tMjG/m˘s1M`rIy9<'x=ꑑs6	MIA2EF)J.P=P]K2"e_<֓fʔ2)k'p2Jؑmr8fܟ
}Zar|8ʺ
;U'iy[U&wa=n}ls1ݬzA9_~{긮L_OvUr6UtgVn&n^p{Q/|iSxC"?*\~j8_{״T7т-8ӂ7[V.tAy3ϞynѽIa+pr5n.>3>塢9AysqL֯<[o|^zgV:p]x]8.]8+]8	
nxhohՁA#HzXMi<Mf؋7,{u<aTfIнqabP+Yy,Z@{ϡZgc^<|#P-<a.<aX k+b?s'>] Eq-e	PK=|    PK    A             =   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$14.classU[U^fF(7/.1\L$Dm5ÌE}'l$ջHtUTW__@@jC
6tp
nJic4QTNibL6z)y'2Dϓ:QYY;̉LH*;KNzɅ,]&ٱ`,Z#\H{8kRN%CB9rF)eF̢(DU{Fkl<笀uއl!;Uƒ$1"Y@|*qPVKO)CDݜ$+!	11)JjŕԐ(-O5ު/b
(B<JG?2Rxi@,)2E"R")ziU@-!ʾb}P
?Bt_q\1chcXPF2"RIÝ0xs:pXf=Bȟ}asb8ʺ
ӇUiU&a=n=l9ݨ0za9xP~k긮6L7_OUr6Ut{VnnrXQ\<8{;ҦtWkD~:v7np<.<kmW7т3-8ۂ7[V.LA\/lg`!;Bt _"lWnT7_ӭ3)U!O5wC0<_y[or^<zwvñ.
wƼt42,u$,w4Ƭu]811:pTރ;p!.`>L6?dwqO6
^iY5CELo#Pq
|]~c,_8Zg'лp̡݅YYn>ia.3A}ŵGpB7;k\WV{sv	Ρ0{O~	PKk~    PK    A             <   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$2.classTkoF=hy$-NǏwc[P%PˢŮl'mUDEHvSHs;;w!iAkՂysԋl#ۍxzI*lEaQ
,M7qv/
D l)܎zyn86sOhAȘq0EA$vq!`,u{a>o)NY,
܀2)SbQ{'>M@EƜEnS
0CSg=eUu(iRf;$8=셬eY)@֢x$h5۸mgg"Ypp7I{E9~*voGʪܶj9uS֖򶔷uO몊ukӉr!OćM͈S
.
?nVD\ՏA:ͫhhGs
g5p^p1.	Λh3vНiVVIQr=Aj~\rgvne쓨9ᨁOs_8I,8ຍYq	p5Xc	+FUX::DSIzMY?+	y.K1ʪJVJdQћ1:"}V#+{֘`7}6_}D)]C(q@a
%76m{}oռXಲmYdtT'pPKy    PK    A             <   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$3.classTsD~r(x"hᔴM$d8-8C+\q̑8IZ[?#3~ ?㛻ѫ}wwy Ng:8ہ`X1㒅Lp/	H\'b#]!#N]}q<7#0_0(Mofv"<IAE~z`2tbV8O9DD!/IE+0,3ODV+N c/|WZ2Lg+g
N&ql!.4HDFZBC))SpOĉ<K
l0GuX:vTy:zfU<o&0od$4ezSl;[,;YԌFE0/<(?
fV㼩ܣP.es\O10|_IOf"gqu^{+a6>>QqQ*.H%c}gYn+l|s&нym`48+潦w\(/GEC?,"S.j/7>ZCiSc|oc]9l8o͖O`i55U 4\l
5+ܧ\ReMw7O}+9:Idm[NfШxj7 V(h̖9:]9F})r˭Y"_9Bx/~)tq}|`Mxr;/<SD
٘z"	PKI7$!    PK    A             <   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$4.classTnD=NzZ-_MBdCJVIDTL6 oJ< F
݂ss;c 
فAy4%HD$c<g2LYA)3QG>%BA	b8Rz^DP 7A:`YKF,%2ʄI0H Y¢%PSeOy@ 42q]5YOR?J0ʄ!KGpR+U]<+_HV*o8諼ʟFUT#)+6a[^twa>͛'n2.5jӴF4fܼ.|QTuioO{{wvS]#/>?r.ŋMm-UN
?mV
])N V|r=6wL\6qĻ&3μ6pŹsڦ-ؑFVm8&y1rnq1>yB>\@h^]~9.-"(?o1W6ᬍ7񱍷Z>q	ױn6l\ff-\EښUk`>§mg֬r_d1]<)
طBUb׵Ȫ߲0H
=8_tN):S]>߱>GA+Yfr|-:֌gؾk[gR/61mGWgV1zpOPKGJ    PK    A             <   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$5.classTmo5Mu{rhykB%^RZW%mF-z躇v7|i"*Q]$*Xxf<xǯ i=X?DTkncRB$JpRmIĩ,6qbrDj()i"Z)2C8(x p,Pʈ֩4"Bp#DJb¤%3fpLQPeX+-ӑR
Dsc86X D]ukʃ7FŨ4JaF	ca	pcD
E,4aD+b%髩'H\rLcn(uԥ{l0ȫ+^pyV<=8?ee4ra^lPOJZM46r?weY4hxar~;9(?
aVQX.:sޞrS]WZ7|2ZZbS["
?m6V\ǕAͫ ؇w}xχ>\}>C.wz_toȡ;mfY1niU}мsɨ/4gI?޿mtކmx16\^ބ66oV Ce X >OacP ]ɾb0T-vd߃K=Ϊ*Ȫ7cMw0 q[nzjn2ddBkJuVA vCa;ˍYrfr>DOw1n;1lyk[g6u	Tಳ͎ˬlt]o?PKT٠A    PK    A             <   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$6.classTnD=NzZZ-u
=EI[j/q^d;
4x 
1ލDv)#͝{s :X63P&)|DJ<ǲH(2X "
L?bY,|d$dZQdhB2a#&dfʋhB"2I3P&O4
<		\8}cTZCס>K/d~K(D$*4LKC)T$~$QT*#$V$
8	F(T]uI`{|AUM!Yt7'ESTFLfRۺwBg/~y즣᭲)mM<f\y]R)ESԍ=b:^h|O{?Mm-j26/bf:
k_<ŝG&1K&.x&>0pYߙw.;_poSH{8m8r4ըnyBU. 4\/o2*-"(Ϳo/}~qlݚ񉍋plua<6[\5[>p~kXk,!1>pnk"+bsY9OjExoUE%y]Yv,ҫSG6CgJpǈwcg=aw5KlW_N~S7v]۷aA_>Q Wzvufm3PKl    PK    A             <   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$7.classTmoT>n9aZXڦؾח171nHTLeAlW~|Y+&Q4<N~_iۂV.b,8c@IjPƕ$JkUJZ)!܄&BbHR2	$b*ҩVnij%ᜲ0"0TU؀BpX+beM8QHcGV1LYlDX*UX%fi 8(`s4V&ҧrQ1oV*d\44&RE&TB'QyH4$1cE$Dp8gKiciHB0ICqX:eA^U t8eչ:(s.ϼϳ2{yY!aj8ԓҁV͸y1z0f_w:6a:)דb qgUu>=ڻX1/i]0šd~:O\:l>:YǍ(歸 ؅]xÅ.\sMrmwrہkN}iN<_EFoVnCS;%hy}QQw/4_ϲ}
oë~^k
W׆a
`
a]=Q* =Ѓ7xͭ>~L1O*|yd@nQgUW(͵$Z#󔰂c
iBrb;d9tvΡYn`	ar1|ӉBn(l>n;1l{k[gp'G,u	T:*̮.\PKB<Q    PK    A             <   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$8.classTmoD'i}uZ-oMA/^RzkQHD-Ž//MD%~ ?
1DWrPK3Z lZ|,;1jR0Qe PqS8ՆPT@2K9	R\@&ajB
!hhFrBX(fQ:p[Jf$5$62BxBt(uSŭ6"NY*dlZ&7FŨZJu&:ƘQIģ$
[e*B-SP8<]Iu*O&a#&46xy	b)/B2k2gY=뼬0k3y
I@ffy{0dc_w:6n1)7b qgUA:uyPpwOu1?aȁPWʚZd<mpi8F6f#t-.pŅ]xǅw[ߙw\}½M[#dwV,6zt_nwBY. 4o2*j~|׺y,yym8g:|؆7x>j%UXohElx<xW7 <XH>=~ă.[b&_`<.vd߁K3Ϊ*PdÛoh\#˔ɶ4Y>C:g4_9>DOE`x
7v>S|:]3gf_~	PKl8    PK    A             <   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$9.class{oE璴v]C)jB
u^uKJa(i+Uu8W7ȵ}	uOQB9Nٝٙ<t˯ !ԡVz|	,vV%c9^m+U:UƐE&=IMdYJ@
NO=Ӂ!GS!8f(%"'DE1@4Ƹ8陠\xi]KTƦQ)\gEf2H&"X2`S%b4:rM#hUvHASh}qDR&i0˵qWɪ\8,Db7.i2$G+$CUt
jd**`!,NhF,f>D5J(^zNhUe4PB6FI;M?B+|o\eƇEO8\xtyWډou3+z0>G]߿5,~eq`OA'C-AQ&ewOxڽ\̘NuK׳Mmh0mpof^7q\{Kz+|pPyXkF
.J
ެ[5x;˝YJJޭc؜w{_EIA>w(s+#`ЬDw ͞lW;&[kB6Ux	U	ӄa	`	aۨfҀ*+!+5=נ[m͒!{NQ>%м5c7'beE\X$`
	g֎S%4vN9ԧ11о:jk(7G?Zp	5V'pcgrcs	|#$tpB2<ml%8PKY   y  PK    A             :   org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves.classW	T3ȃy816B
d&vBjZi3H#y4`;ڦ{{^gbitM{}6]Ӥi)pߝ{{7M,QB*֪@:UlPQbzTlVѠ"QEPaXhB:{hPwFq3n_LHH[ZZfZ~CJfC7Sdb♇֎cx:Åp&n<BM{Gfkp<)l/<15H-KOdܴM;ǭ	-6-EH2jV<BQc8nU0&2l%vic	kNHV;kNPXy_凜>OU2J]M4'<ua=~oKF	=XhШOތ	*tuQXkPW<kFrq;#>Ur`ɡ(`ҊfDDO	#ЮhzJ8l+-i-mk<m
GFtVO#3\vֲ#]p[
,{vv
\8SI竡tЕ=g_;[ܝslC(wt	-n&*K(n|[w=Ʃ;A|ɾ1w]vK`\)
.QЭR=
.ST*x+SG^Wp@3+Pp+TpA}%}s?IE>P@c_Obo.]Aqr31KIZ7lE3"uCX/a}:՗;#%t΄m>{ih,vZj/)U2Ŗ95u/o|%ۋ摢n=s2ug|/C=;zNXzvhӞ厲-x]]k\
0cXϰa#C=&
F Zd8Kd8Kd8Kd8Kd8Kd8Kd8*,cXYx'4Z
Eb
;
Mx0^*uЊ4tU
xf^!ACo7V3dG>qO0|Sf8pÐ1\vw0]fx{~0|C><A`afY"nb:×U1
9,0ge8`c0)Ca7p.}8/p_IkAiRo#{ &!*1&gI^
IQzi7IYi6J'qiwR;Q+٪iKF6סȮtql04%B<)jSI""o
m)պr.Ɠ\RDrFMAg7lūe`e NO}M@'4M܉	5T<ZQ6E?Z:z̕~t&zR(o:2z,,3&Nٖ5RHKNxɮ΋Z)Z 
&^((O(B<_+&5yCOʿ<~A0_ҚLt*O'%*uEe7?zetv_k/WMKheŁ\A=]$=.fq.IbY"ElA8J2{]XĪEXuQdbAqbeQbaG=#."~mivƿ7>+|L|L|]Li׾n9i;ǔg9:R=CL;.q3-:bҎHvT#&֔6)mJڣZҦ=oPK	ɛ  b  PK    A             @   org/bouncycastle/asn1/teletrust/TeleTrusTObjectIdentifiers.classsUC=-bEA &ͥI[JC
ŦnnfS\Ȍ?xޓeV>wn;ٟ7$6KJ-$K+K@C>{$>H>- ,ier\1XaaW}.eg,ͶGB]X]):GUT׀X+xDcȺz=8e#+Y)ۉG${
dOJ\KU=+gUaOϭP`C[ܔ-̪7 vZs5^|1_}w-y%'8a-;93ﹱzTԛ{uqeFhe+ՓVe|cEnf#N+V6;KSWY7j8<7#ziq<s盪z.l{QVGн6āNuމ6M,jamW=d~"l"GQ$Q&!b1B'F
q8L!181A >TQ)L3gYsq@\$$bpY#.5by+" wc+^P+<^P!GLN7y1L79brd	Y&-ɜɼɂɢ%e&t/*b_b)&ϦWA]OcܡvkM]'[xZQ{ޥzk^ozZhAm
li-Zxd45bj{&
KԴo~K}SeFW)QWjJUjkN?PKu_J  b  PK
      A                org/bouncycastle/asn1/ua/PK    A             2   org/bouncycastle/asn1/ua/DSTU4145BinaryField.classSMOa~,-E_`lR?BUhǥi]n<pR#ŃIl@L!fywo|_/8V&|l:F4CKDUv٪QTIѝkϻv{bl	aͰ͚fkOŌEZҼyU*躨zΪaUĢӣӳ t΍,VMDe!ӪfͺQy^Qk.RjHrQ1Y]Pss-89k)%.1mk2`lϩGt¸fi==-m28"㨌>2S-ٖfT8m~j2uWD>쮨
8;ظ\;[Stμ5ewnz\ʍJ!"0A}	/Af8^!8Cd8@)siA "p5(.1\b  qz'
REWOsvl.>mRa <,<_±
;6@I{~'ZōO(#dƖqM.aq?NQInS-ᨒo	s^Ér$A4~x<2b2?1 ]8*ΐ^qbKT[Qg
B2"lH	OKsO8E=ܹnc,2#m,{٬GCmctwh+m:Jwf:L({
[Cq)o\5D&kYn"ϝ_`zJrx8tr)M9.x~aXF'&PKFA<Q     PK    A             /   org/bouncycastle/asn1/ua/DSTU4145ECBinary.classV	wƖ=xRC!Q&ˎf5Km	
c"']FD03SZ-KW%	[,t5K)-flD|;oww{Y O+FhKB^Bі}=HH.R&aYϒ
o2,ûEB
I)ER9HKhHٜö-sHd9ѓòfFl'-O)5\	!۰<r^/(0^*A><pR<w]홽1~'\
&M5+uPOrz3@f5s6|AgvWiO\?Ұǽ
2 jYx4fv;|;sa[ e5@$,O
"mGtǱIڶHʰ4g<2fg5Ên$g2)jd);oӚz\sxwrCF䖝̝$R3Px<ڐʼ~O^XDom}P#cV(8CΎkzDcyЊz_o a\q^@m8vsiѲnw!^smfldr-
ETgYq>`gRu^ﰧ[.`Wg388<:C5<SW=ɇOKXFVq[dt*2:e\#Zɸ^
2n%&7˸Eƭ2#uu9bm*nbW`I2,?/nghK;kGEgJsWUS/^c/ȯW
Mj)ύ{GRg^[b_Z_.׎6PYZ]5еhpqmc>K|TcFݳ"וui=7Hz.´`͜u]*.T1,U,c?P!B(UbUAahdPU,~uTlbe؆ːf혊U\0P?Tq%*Z`h
5ȩX{Tj*"m@1~3D<6
9
vWcxAxPA?~p\ ~A<#
;/^R(Y{8(؋#
Sp'~kh#Fp#F<}%IOK=JR@=S4!BR;lĺmI>Gu$?Za
˭km
ÒiYZ[ğn+n>O%'n5GslGCu͡P{oMJq
Pz"S  ^I7|XęI Z3A8#߄W!%
J=2m32o@
[3E]uUoQ g08Q%Y81SS(odp4[QHM,JV|Z=P[R
|I
$_POhtR5ձsHE86D}4M#9doOHs>CQy5<\J=+bx Z^ä>A20VFb*Sx%n֔usz~i$F./X_^Ӹc$Tˣ
"x@
@RW14Zě[_PKX    PK    A             2   org/bouncycastle/asn1/ua/DSTU4145NamedCurves.classWUf^xϊF@LdVOm]e;t$xAC4$33O&%^1;k-Ė@ql/K>~1HI:}Sz忾2)׌2莌2bDF2#QΨȨdtgFwetwF=}kFdd3rBFUF1o3Z/PF3:wd2E#S=8Y&0U2N<Ah$Ӿ+W{g^)5U|(`-ZcW)â+:Ī2«hT
Rh2ZZ[*Tȍ^kg}.㥭DoZ׊yeb\y./|,*.䪊yҕIW*WAxU~\!U"V!cBRc,
J):U8.ẑhLs`8\kge^h_1*\:DQFttJps(q"EW:|QXĘ{1rZ8[`J.9[U0+ULq%bq xQ*(c59K2&V%}nTChCܺ6wJEM%M.
EpLIGhܔXIUrk#NƃQgyd9B+%%}vx,C F! */}^G6J*8(@oU"L	GDO,rteeaag(R34rB
k[4/2/g:g%RxpHF	rL(E0̓3:ZLdpbZT8<q|eJisp!LHMEKlʟsYbX$q6Vk+V"E+f4cA^\B8
LJiY
+-'#+8"QH吪\UThϐ=,g!if"QB)WEwRƇXJde@H\ͣ }LV95E3oC"Qq8Jr~wpt!)Nt*W_@EEp(c@aDc	T0TtEoY JPݞBJeUC@/P<ѭ<X]M_3^2i,W$	U	
+Œ:A9W2-@<X5*Z(x4+UP=W	sPQȋxQEa*Ei(ǼRh(6G0I:|w~r˵C3	
xJ$2A*"0KI_fy]ReB%%GمtVA*FIy
-l͡1(D
,N@	0G=U0)2G%KǨ}ln)8)&
FKdIBL#¡
(lT8r 1MDpE];7sd9ZVcsyuBFKHy픷R"% eDC`,W(*ab T8ȓ"!80B
ÅAtPA(:<DߦCxe@hKF	| }*'F|CW<?.!|bQ ](:|<
t"ȊCMAJx@s*4U|Py' o
hO9 ]b$r.mI-^^[]_EcwoF8!4-xXodoȂ[=>oޅlz扅cח_m
u`/W5]kӛo@#zNWZgycӛ}J-qy4iBX#{""LtpŃ\G[?0EݝgM\`su;߻pq
-?r8\X]Iy7.(w-{K,o]
~8uO
6N6{'p(adouH;oa7W4<ۮyP}5K,7[:/GZ4u0v뭝>>Jv@:ޡzC:١mtTCs$A"J6w}v)k^;5W_ݟi.wxXKN_wL][jSEq/{ؽ;2;?ekh*w]u{XaINI:$Ct~zIzf'i~fOGg'1xZ$}}2}j>=IK?7IO_/_Nïis#i4z~#
9N?JM&[v~7
/LГٓ4Mù	zΤ&i4<?S/N3	gB`~~ouL.7=:Vg7-
z>;uoZnBG
nMDDN}S,Vb?cv3t<O؇˷qifváOװqZaz~qzFFp-f=C_:Giqs޽3g/nexڭ[`Zo3$;D=5<PM_>K/Oԗ/3gY"=y<Cxs^p,})Azȋ=v鯖flp6ZϦzo8Գ[gi}u{:^OLk̎CDKѽM}u/-vwVǇwig!gLu;gڍňq4nPuǶ!@b
?.͍6ϷGgi@bv3րζG/ٱi0ېw64{e
ڝPeb6ktZ?76.65v-9f۶qرZklmtmalhmA}=v6xm,QcGFDQ\^[oϵw,h;X|M;˝N|,gsYm 7 ^0 20 ; Af`Dx'.7Rbs~u8b?}.@^>G	Q8Oۼ.~uiC?Pk4tCUb _j-mA?FPKLU  F  PK    A             -   org/bouncycastle/asn1/ua/DSTU4145Params.classMpSUI䕞|Zhi~i@B<bhƪuV7Tceʕ3nܫ80羗~(If?{NN4HyچM7yQ61 a1L\b\wY쎥ó݅{(|HЩ2`SqSS2ʤ5O3Zl*V9ӯRtj.enÃYCM4K;h~CfOO]bF!BX1C3dvp5HD`8j_Of~%LZ+ƣ&cmU֨zFЖL.Y#l:ӱL\JiKhKk%x&sɫI㵬#7d:[-׮4ECTRDMrj`h<r3yh4[='9#
:lU^Ȉ}ѓ3I#yCC.e4hG^2Zd*?EI<#UĐP_묻턄"gZca,>
O
yX7릵rO{Ie(YbrJ
mfXpݵA{Ȯp-^/ugC
T*؉C
jpXe
ܰ)
NU[ѥ`
@@z
U'8)0/è~r/#\yQ`̅ ".EG9'pi3?3wgPcӣlD(4ŞW&vli6ݐVl5x<c..y}wq3/H[Xhv^"l=%t;'lI凐a}b3(s	Ez{LֲҚ\v%NRT֜dNlE aBEV_paN^utcw/lH<@M/#j5Cy̌p><~b9{޽[\7Z#qkjBsxQQ%}z
9]q':xi*&hކ[t'+jfV%j|K8#y$yn	/k+K`{,9NaY+JoB&}HNG%-p$*o#Q*YLo1a^c*YIhYE2~gVfNs3gf=1Ps+u14A2wR1ws7ma6&t^d6Cf1f+czlw^v>d(<`̃H$?a<B1yzhEf7<N2{h+GuPKpE5  |  PK    A             3   org/bouncycastle/asn1/ua/DSTU4145PointEncoder.class]sUnveK_"y!
h
h[R	-Ђ6
vwKU/D/Ҏ?_@Fϳӂ3&</s }ET@s'|)b )8VX1ZީetϺtg:i*wvL@l
S,y7ٰfYm6*8AwdzdZyzjd®_!'Ja˴qkJS5=J:L^32y6K=*e	rEs6l[qb)ЦTփ˙e=+egD;fkbIK.)z̴[q׊fFLE8w0ԨE0Y䆆\t' !sxUʼgPm k`ULE7<=9:Ϻf?ǂK>Y<ʪj"-=F4c32[dlMv;d]2ޤ@x}<,|sgPZk]|ٳ%)
LavBn~}/ejX7S/ĺaûO?=/"GB/=^C z1V*ThVATI*?Y)
GUt0^albt2630nSюwUl	nHxS#
2xQPc
zya?>d|Y9c183N2Fg3.0.2.1>Pp	$2ū#>mʝ"X6u(5-6DDA<5Q
:5|BM''/*CqPxDgL@)sIK 0*d\lCR>MvJZd%ʩd6*u:%{(UDMQM+ADni^5mOND$[ W}zIelOT^+idA70Lb|~i{#0m/>k%X5F{*@4.oܚƬoMV
jG2YG߂FHJ$8 ^r	3,e(\I0-p~JC[ibթR7-Է̇rEZd	W&=vM0I/+y\`YF}1Sv,_vDc]?I|l}_PKL{  r	  PK    A             0   org/bouncycastle/asn1/ua/DSTU4145PublicKey.class]kA$fq]Mi[d	īh\UB8ĭlI&E%ł(
^w3~*C.X{P7LyD?fJN(M][gvQ8;2=U^^RІDh[6xn`<VkMVmf~IsyB3tjtD'ƌ
Ƭ
=X
2LKks;$[#{HA:
1:\טdOco90,cE׋qA	\¢\]07J-ŇheZ,`uTpb2prxooK`>sHobĞXbe̏zT)B!Av  PK	DIe    PK    A             2   org/bouncycastle/asn1/ua/UAObjectIdentifiers.class{Sec:Z`mz4JZ2IMHFE{{{"xy7_/'\s{Glgl
:^P zA   CO_PFA'j,DA4GPtS*4A'Ag
jt-A
jרf4]NڿU(ըTz=&/<7QnQnQfʌW*32c(32Sf|ʌO+3~eƯ4(3
L2PfL@iTfF̸t|Wrר7}Yk+컊f+K24*n2lGX)3aEJg
EܾEobp:Ko(,}}ϴy
/5ʖcXAKr8>8Ʊtnٍcnx2м_^~x\&|8g7[ayH4[h)<d!MT5%?acL|ɉ1eҎ-4[hx,Lg_bWLG*}0q3q{VFTL'aLgaNzvd^(ĺcF7-*=g?E"]lߠ?I5'nϤbHO]n]NrZt `),L X@@1@ r`@A`V`-Xl 6ty9OWХt%pp5p
p-pp=pp#pp3pp+pp;pp'pp7pp/pp?  0(8$4,F-RD/ /j4en2.Tk[5^+gE2\"s.d.BfJf̨̤̘̄̈22MAa+e/3$3,[jkd9 sP̅27 suS:f}7]㴩꘭kFh-(a}	z6ᬯ@`}z$kУX_tϡE_@~	@KX?~-c-g}'iB+X?V~݋Mh[нY߆t:}Yt֯լ@`}z ЃX߃3_
-;{:>BRwΪ!~L_PK5o    PK
      A                org/bouncycastle/asn1/util/PK    A             )   org/bouncycastle/asn1/util/ASN1Dump.classXi`Tnf/ !&CL&hHBP!yƧ8A[ZﶶmmZ(EE֮v{7˛̓8swι{Ν}k~ Z		Z%,&l	$,.	J8OBVJ8_.JBDB.p+aK%l'a	Ix%lb Cŧ]'gp:)	;͛@4*X3	UBĽRI(
Ԕ0[pT!:uXo27*Cǆ		]o`R8˱
#uNwblDN
NHHll*S.AտAFN	lp;1"1)WT"qj9Anĕ~eD&gVb*0'ڹ<ǘMY	US$Cz&Mjmp9=RFd*ϋ	UF5	ƶԻATFy]4BӊN:WE7u|z<m9Lߕl	V(CrRs%`W0T^5462ڙ6tbrbƠ3=]JNӰFbj,0mXVñ\{a!"|*ɳGNגnb0+.81ɞ

*n1Coٌi0$r1'\΍y>6D5mf7((/8bBy1$th\TH­S[u]Xk<n]jlLŬ)Hq%!ɣ1"h%0/nݒKnոK'Z;zr^JmuQ-l57aT0i#5CsiF#WHl#)%sJNTi	J|N)/ilU9QMQDZQ崵l*%_]g	*2B)HgasB256䋻Aڨ*t
ۂ+%CAKoQKCZ"8u?{"2crĩAPW:$ms}]UN[rIS&\\?̵M	Rߑ_:*bKX(aN	a	]HUcF8n清丕]xm帝} 9>ap|c'9>qǧ9>q'g9>y	8E/qqǗ9SWfV왁azV[-5Ngڪl/%uB&;
3;5gZ-$8`'YHztށr
 %!%XdZ\hoƠeYZĝ$N"+6ˁoDHNVB~i/A₌M؋ZH!/d+xq-~EBQA ^W^\_o/{q~
^"{!^^r WU/H/BkՋl;h>be8q	R'HMvK7<Sn+B [G'lG1V&y8{pOCw&¸G=%VDǃgﻬփg9A^dNAd?	~Xv*]gX"kO
^66/
EPYK`}hpNSK3F_Wp. H)
jle-Bu3,I?<[	T$FbHgOn	wbLaXC\;]q
M
k)vMxyҽ1_V7Ψ͙ShN6Ql޵V@ɛΨ˙gp\SlK+e&,[*\t-##O`I(#^7D;K Dt}׽pd i|5iq7!3>-lD'GB;\4y^EZMFk[PQbytH	IW ~46	OtN}Βؒ_Xr	KDڛ=Su?btchEY3fę]h ģfDxTcOI-D@̈9a3@<3)B<eFa 
k*B5#|b[#1@<NK{Os
 !ㄘY$4E ʜ7	u`:GX[(0xoIZWRB!I=X]d^x2[B,CT(qEodtYEmQdDt:z@qΌ	j4dOpa1ygUF)0118fstÒ2+{#	VϢ|%uztLCzfG;{i @E1<v45һsA
RE_kl"zਮ?Mӓ.c2,mpnGDoFbӹq;}Ζ۰e9jS
˂->=ֈ}ƿ
z|]&ZPח
5|OY"+o!;iglဋKcMgt}p}E68wLh?PKg
    PK    A             (   org/bouncycastle/asn1/util/DERDump.classKO@KB)"÷"/c#D/
YSZRZ^5[h0*03;#"m	5sJ^6h965O3wP̮<ut`]c*ee`VZ0UKS:rjL:Fp7P±KC,yıMyDxDyiv<Kci	8\unE^KJ'j-"NR"H!# 'rn،asKc,kȳűI
NdYIp!TaiD:q3oߌLTcY?Pz>S͉ PKfrg    PK
      A                org/bouncycastle/asn1/x500/PK    A             6   org/bouncycastle/asn1/x500/AttributeTypeAndValue.classTmOP~.tx:PTɈɢ,5n!ǮKn⿘8#?v%2lsO{s_~OBe=MXy7ӫe`PxT!IҾ2tU=8Vprjbдjv9<o:N%36_Pq^nG
s.9/HB[۪}Z[z9HuHWz
W[&(
{+)+SQ0zVceR>@ubk
$WrWĀ[:>:C^$]iO/oLLo=2lG_i6I܊`#`H {#bi1<f9)10fJcZ0fn"<bu<sX*h:еd3ҧy5-$(٤&s}@H;EDO0Ub'$ %?@꺕=-@.iSt4N8I>a+5:Gq^ j8lIVvPKUy^    PK    A             0   org/bouncycastle/asn1/x500/DirectoryString.class]SGA5jqw~1eBH4k>{ٙ͘[rC67^,OAsӵo/	SHAghd2tv<'CQ*IopBY4Ah!\vBwE Kd8 `\LL@?vȐ&}BْlIiIx~ueA%g4dMOSa+XznTQe)t|h9YvpuYf+ox-Еqkjei|zq8-Мg"BUكerB-"	Vը*{769Oe9ns+SϮYN*ăЏ脴.uoR]G89r8q$)q8Kݷo1d-'̇zLRAܬhKX|MZ{O67[&ێD{(J0?Ou!fTQέsю6:4\ёV_v|
7T¤àR	w4p.ஆ|
.0iU9Pa^/UJ4yYL3VBa(J=h
E~_(Mf)?w2W
45H`m|X9<VR.e*)i.T.ץ|4X7[;8@=jnmܧ6V*X~INt{"ƇF[.U4o|UKo;B ]JG3ў῰ԧ-0-07[`&0LuX̜bEFs<j@-kXt'^Go.1ӥWzPKZ1{    PK    A             $   org/bouncycastle/asn1/x500/RDN.classUsUnvm)J@BEI@ZVh)LmfmG|?/0҇2Mǎ̠{M%[y8{νw9c%)zg
t]۝dިVNAl5+g6WCC6UZzp*8;fm뵚Uv_ozkN
:rլj3v
[t-?Z\q
hks:՚k{qEԫoP(-ك ŊgHv,"Kzj=t؂
RnO-MkE:հ]{+ECXCT5-
G:4W^:N3i\+5˃,4VAґұ>(g_Jߖ8.@2pAO|'Gә.v2:ĥCh$=w\3s5ө|?$fɬV{0!$$X"HP6[0A"zql#q4t\`c3ԃFt1.8<16lH}6HC6l;2}++fyi3Nr!VK^yV)z=lײ(<zHڰ䡐 ٟ>Ct6fZ)r-E5>8$$va:
8Ar8q%%]'zez.Z=]i
=
[R>loF(zUP@=YG=T?kC #%qaɾmNI"+Soz.HF20~cF>Gi=$A4Ͻ»t(yQN*cjLM> /TRHO-̖Ub=[{qH#s/]{'dpj5p!ƺBܿ)r/ЅxNT&=I/Kf6z7PK  	  PK    A             )   org/bouncycastle/asn1/x500/X500Name.classW[Wts9Ɓb$"L1-0h"/xc#FX&M^&N7:$d-k}c=3h}Ͼ| Vt/%-QKIFq&z@lpg%;LF9#1вfJhYPd ;tb0a&/$	MWEFbj}RNKI2m6PR\J3cZvj0=Kx FlkΦF3hRdNAt*Eaf&93=k
SK6$_3eBRfSt,}28դu
"MȚpVvmA+JSvMOiٵ0!aEIiddJB1iCumjq24L=PfM}ZBc6NvsqȰHOhj	Gv)SԓtL^S.StMACãY4pDL&72P7JA-NG\`f P%4ae7M&5fzSfڦ@O`CM4#-@2/ru7ԏnZߗ:-׹h7Vmp;pGoX0m)<IK.Zu$[EsJƳ$`l8)ȁ,ͷ\,E˃֕C#vh)Zg͑-2̰6+6ORm&'	2=>tʤX<2NulX{[SKxP6
\֝nE|pgˑRy^ONMNfn
^a*hO],XDP
옂 <:WPSPqŨ+PpJA;ĺ
gyyNN|_QWYw*$x9Q~\`1bEœ,Rx}E#C'f|=C/Y\bMЇopw"dm9ͱ:+,f,ﲸUB
e
a=d
3=a7ē#GǵJkXcX#F?QYhE^u?QCxI
q]ۖҎ[
G:U^/WB9r-Ѹ_U?Dj_,$̓*5:,a,wnrU_Kĥ|.'bvb9@Af\K\~gWȝw7@{^ϻ=
^~9 -Ȯg:ewD[u~yjxN0frjl}{@~^I
ޣ{7MM
Ijf)
9@ڨ̇~֨mcEx}rځ4SCCut/w{hdTvh7耞cZq /ڻ}y	s{\N	ݧnu'owVպNݐG{O
kN$9ғ(3꣣V_CuCK>ppǯt?«7-]y$I
GR-!I 5N;y#b9nڿV]}=@}}ͫ"Wiz7+,}>"QhZ9nH%Ro-ݽpvW^?cu]7nMcy(=ý8U
YzbҶyT¡ުڋ(p@A']_:씖?ċnL`̱lQ!V>5ww9=C?PKw<    PK    A             0   org/bouncycastle/asn1/x500/X500NameBuilder.classV]Sg=KKZkD,ݤ(D
M&e.&t7?M22^/:lVIZɾ; .bI/6rqQ@%6+zSl.0.Bj׊ZűUcj2%]+XƔ͈LI)cV/jV-et}2VG嘮NMsEwjZѠ'=gM4{Y/3[SUǴE(Rh	DZkKKVHFn5
ku8Q+j)GuB>W(+y9{ceCD"8*☈>"8!"$?V8CHzٺ{g'b'M\x>6NhimgpV5s6"tjG(Oulz۲v<xN[t:[l?t_ֽE.	j:MbM[z mۙ:{%q^)$%ABLB/Fx(3(	T	Id C >AT|^]b ADqktj202\?sFOOVs
hLI4:^=Q
:nH?
YyA\ฬOqS?]jX#o'<r#y%^B
mQ{}mq븽W6zHo@7I<N?Z_xkYIpgUPB[D|"I[ꓞDW]UH}z70^|CL>MXnxq@T޺L}lp
s/>"ll^GvzSPKK  s
  PK    A             .   org/bouncycastle/asn1/x500/X500NameStyle.classPN@=?tc#$ $Bեdh;5k. ?8L\Ŝ͹1o q`Q{		
)
i'r2=^"HkH*
CmI/d
hbH[(3u:chhadzkb%Mqض_;}5VkXMD-%7%`i 3\Eu&
apILi\dLmWW5m&1/mwn큁|{'}	qX}wP7XA,f"R/PK8^7  8  PK
      A             !   org/bouncycastle/asn1/x500/style/PK    A             <   org/bouncycastle/asn1/x500/style/AbstractX500NameStyle.classVSW-䆰TFQX
!1EDDJ%h?P]V&f7lk[ߟV73t[fD;*=wB{9;ߟzNuP[f	OmU{UM5	q=SZd8"FL	ʺ-8&dI'e(]	Ic)^ƜVZ:H!'JRJ	"r,rHQE@_bFdmQT"VƓq5Z!`5:)2&C@a$~whEF.KGò'fwIvQFqȭ5g3	+e=ǔE3f
U=KK.ȃrPێ"JP㚀4&k}#=heERj,$͝Ƃ!-5$ߒ99$^T)JGL"@S+zinؖ-JzjΡ|TNS̮:vu-kkq
X2=T8E!2:aNamUzt#)Gya[8e2dK(!ɖTjs+QW/*M!zGtjͷ՚R2BdXϰa#[U>j?Ca+CP*oU/'OvB)Z7l%ϟ8izRrkN~)Gj䛚E}춻UKW.aӋLl.tY&*!nG~o{V_U*.QsN8K2yO/d޸2Yһ̄+dKr y^ః6	k!JXa6MB)^Pasv	
pDjP%qL%aNHx'%㔄qZ6C	J9	E8B=".ūd.7rt/`px݅l?9$\hEph -P8\t!qp.Bk
QEӐ#rB7U=c>D&*Qě?Jt[ۇ!L{x/	j|/:~~X=AJ{BF}ǳa9.FF4Ӈ#[:?ь+4nvjEZ-nOQ4df_mcAjCZ~668?ư<cz}NoV`iy||68%0a7|yN
;q
{⬋n(mi.~nMtL{

b!G4qm*X|;a_5m|;Agyervn})Y4O@NXӘow`Dfhl:GL <xD}|L:N5>=vnw=$>s|VNϐ!󿇳L` <BP
nQl0n'J}L&fB8>"NM5l
T@Z)y*8ݎj=T2PK6  
  PK    A             4   org/bouncycastle/asn1/x500/style/BCStrictStyle.classRNP+-E(
* >@.(0.,1SJCJK
7.ݰ1&h~j9;w:6UĞGZ*3m\{ߖ9~QN͚z*QR^[N]ө]iJC]5*Pz3lHʅưdҍ;YhTTC6C_,QmqzV0(-Ð;Z/eFE6D֥֪/JDa@"D
q74!&2a
?B4lDsʆ(yX%$iLz2&SeT+f K* ]>#jf<wLIĦ68:$J#x̽)'ײ<笏qf/J<,A+MPKI    PK    A             .   org/bouncycastle/asn1/x500/style/BCStyle.class|SmKsE8t
$@IJFe1M^˃4	hq'-ZP{^s{)~~=wskg } 8a69TrP͡C-#89qCf-Z90Cys8QfP\Y͠foljn757追[0t`o7ihf/q+:4{kQkƱplj)6F-#֑$KͲyd摡FFmnT4ʑI[[dY9QVΕ6.mGa4Ѹв#Pua#^`Pޞh	5qFj_2=ݝ^8}!oп";=AJ7`j^^D6=ujYmȬRjbj"b].up=]A箥ױM67,tx~rz۵tv5Frlg26N480ߓgpW8X,ƃYh(+~>mBO۫[PM4ptD1t
O\{.z;Wt24"u`m>2aG<of<G1/tx=+
tA|!?̉]>\bgraxp
υu!ϻb)IW<;Ʈd&9"dL~5K&q~_'hc񆖶$@vc2ݵu>j\MN&To8qae!햇ں$j9+D&E.ϯՏu֪d1:dq.I4ԝR__wy#Fw"l&}Ҟt$*1NtDqv&S"HOg/A7:n=zHb8Ę8=ShZKedAaϦ4gqٴsREhWK)3ɴؾ7;oqAXP}>5Gāj"!nbH6L0.AΏ49sb}*H/&[%j'/_YG}u*\՞bيhex+KYKk03ĵ,VOίd1t;
-8@ } +x2
,Nj`R,*\Z&QU8oB8&a,oؾ5j4;h1rL.tlvMf꺖8; {nrZw ;zDf ՎNus!L̘;E6Zv[3ՠ5%sJn?Ґ+l(ܮ-E
.MHO|J:GOEjSQk01OAGQN2jop¸Ez2ءW;ɥ&³Is✆wyN|%E)]791RБ r8!a!EsXa)?nrXx'rpqXa-8~	)89d88p239lr8.p	K9\rp
np;;8.wsrq	Osxó"8rx9]qxX`nmx[l绳_1>ątw{E穕U;X=rZ2ҹunvmZY|s^__ʪ=dv	WZ`feɱwC*4FXcVk+&LiPL.\-؃-=S^r)xv݋ߵ³Pi8P8{pq5LAk2H.&qf8I\$nb%$$^?I$H"&YNdq$Ǔ@&!HT^>$$	$IdI$C%YOr I6l"I$O`-6X M֊%66J63<ؑ68-aW1
Ncn\:lp![hآ2v@r
ɩeyH,!$YJ%t,#H$!ncI YI8IN 	H!!HT^>$$q~I$E$M!ɒHN+cl=I$'Xt3HβJJvɅVVδj]&9+Z;;[ĊNr5H.&2LouJk	&vi$%~,] v,R%1f2,0uFm°6eشa
ܰ!Þd%uϰ^î6la=U
4۰
װF
0oņ]oؕ=ΰA]VB;a/C	6<ϑ"`]_=Ȯ>z]DGš2\ ]3nfom	X	KլيU̪*z5XYX,Jӱnk-u}wku
⬌}jqSke,l_KZ[cښaslV|
iWY
]}lc|j\
)KiMv&;h_GTֹb{qiѸ6;`ck+Jkog;m3id3[P-nmaaKq8k<!(`+Lfoq&>$Ǜx)&>&ѭC1^@N0NMK$XnoMNĭ'Y48A6ؤft;~&H4Ӥb"s@[CAo=7dٕCAv{
/:*!b7'uD:|,`	gļ|e]-KW+gc</%lW/RWnPs	*3	+G	C
Am
PM
|%I&aX?Iئ%ܩ%ܥO%ܡ$ܬ$*{	O)lv
]f/Q~'~#~~!FQ/%ܮO$<%lR*[	)'V.nJآ0.YtJ7Y6	.a)p_pbÀKP񒰯x
*
[Z؁f] abL97
e:C0$  L9Se샩 a*
ט
 ݊0$(
?iLT-T-0$LTP&>T`T 8Ğѿ?PKq    PK    A             0   org/bouncycastle/asn1/x500/style/IETFUtils.classY|Sy^]IƲ eP0JƦ`'~$Hl]
Fr$`1e+mv5M	^[=)mnm=nk.n5wt%[66s}{𥛟}f@(u`@/I3Oh2
E3lU%xP@K<ȯCsz B{]4Mj{
$=o&C?~3x}1I'FH?RP@ɡ'X_uG*Anj'Cp25`V{:m\#f,퍚	o>[6nnH9<h6"YU:%+\Hi<Fuh d&'ZzA3p'r8=)G Lq@~8u!a6=5w#RDG6Dtxb؟P$'Ǣ=kGϮDO${O8@wKΛ}{f"yB`Ydg5XJBOɟN3m(lCh,aO;&SfC"3鼋)*Č>DIZWiLKik;i4}U,Z2ƺf!Eck,ղZ5c^?KEHh̲;hrF(dFM'zT4X3d@CoE Z=#N3(ۻgKCfB`
ȝTt)Fz%i%p)W@L?jX_"8fHe_ҢttZ^#h*zXXn$b$NK-'8"<oBl";R\&s>r;yzm3ܥߩ2s Jɽ~+jYۦ2JґKAm
z9۝I3bEE`s,e&bpOp;SOSYѓj?m&v\,S\Hų7vZΙJ\C13JU:d=tɧbvJNKv(q@LG

+5ܥQ.
54iأ
jh𐆇5<Q
{5th԰O~
]p@A
48U[f z&=^mBgY+soZ.%~fc{\]96H>:؜s ;ԘS2j欧6r.WI{DaA-¬EUU"d\*`ӷj59G%~ARŝ*su*WZeSOyrBR<9yulbncٙ*Gj/t H}2b3tgNaKن_mKTcf-3o'ZP~mf6NϓPḠX{ˬw$	%O#wtX>zg/s_$M{"?#x S
r@jI'G2-Q~Zw6gNo
n8u@uT@,cBa6|H2|DVv(Q~eձ:B#xAG/X/x^Q:Z㢎mxYO1::j):%tTu01cxu+:,7~6u~\guTrn:`U.oN]8?dS?cKa6w\Y|aʅ|438gO[O{)`s?.</1|pkp&ÿŅ[/?p*Å?]x/	D>?bcI7	`gNC2B1|Ms?>gn>ޅ0|-#|<~o`H{;CO?}їQ5W$)-!v,Q]6܇ǅy5r⠭muk8}鮈l5a݇c<
%TL_U]Vcha&%I ]Qi<egAՏa8q]1#hfRjc`>QH;,hig(8'ĮQ<(V<ڄhtyȇlI1x<Ya#16_Q?)+.]&Gs幪7Ù?$JENaվAnI,uo2w8=ｈBwJ{.XUUϷܢhqeqIˈ8J#$"b{p:r ,SyE%ZO,AF5<wBl5@x[[ {8;Ee+X']ʐ;@1x s+kB<:6#mcS_%$O꠹/wi|B_D5@zE_γpr
"BJf^ū^uv2!q5-I(T`V|"^*!,x"vVx^m\d*ca31tr|mk"Y^E^5Sڙ#^J[z:,[Ɍ6)A@>M:bv"o{I\=4r̥?S-z_sXquɣ~`pixZ\
bGUnvg;3?3#zm(V4;,0.6N@2otעQ=qrO!?s^clki]Po@du݀Nqω ~R,Ij=Vg#?Qr_Ù"6]6&fvc$no(_WU$vd)d)"⸂<i%\"A&\/;ZIO=t	lvp_d
EX$܏߱n62e(Pצ(rx֣I/,]Fȣn"Q$Tiy
yc:E`b
BeyRX/+}>O}%b߶ *z-ĬB|Ho˟^^ͼ4-I&2_Jxm1oP!|>	|Zhڄ1+[/Qlb:*.J,ڬ>.cmW k(ஐU@	b˄8hYIioUm(
yPxF#r9DiR|A1QPǠ5n:kx@y	R㢲ZRdPɃGUb5
%4S%ƁC̣G(iFkDz+ 
A0'-GTBD/gx\Gco:	'7Uf<|
#/UtZA 㭇<̴ueK˔_KXW6}'ɣU^MqQE
%VnM}q8=
,0|DH,ixਜ[܀*Xte˭A''LAX-ܴ
oD&T-L,|EIP5]'kՓW(SyT6גPirc3<
2VvyzNMzAF]$ʨ:O$=ގYzS$ضsPm裮U\hգpi=ʦgygD!UPE?X`.-Ғ:HOO@U.	e8ϥ,{k[*}g5*+*kr5.VWR$Sou~nB~ PK8T  *$  PK    A             3   org/bouncycastle/asn1/x500/style/RFC4519Style.class	`TǿI6!p="scpEB8n6/f߲6$*' """!GRzm={ޗV}f-Ah}3oo潼' =rWpU
9q(P¡P8Ts0p#8p5Q>ak8Pa<:8Lpz3,,ɠld_V9_QQUQQVI*_Àjʪ1ຕw*׭vݔp#w{no~no~nUnUnU)jtnmmm:;jwGܪ5zTa=wp4la=Z:yufK 'Y֢1=%7v7[>TT0~&Yf+
v	;bΚu
@,fFCz8Fmf5Ad"5l]) `Z@s`Kz̠2keX+tLB$7d&p[h?$;
GCa׊>0[Dr:<5PtZ2	͸.14F;DX0mh5xd8Mh61Ȁ@0nG&3bڬِlo>"[EeтQ˕hVĭvgHXՌq1YDSfjژ\83ꬌ;+ҫJ&N$ᔌa1p6?Gt759ZNj:@\Mqp$$%Jv8RNe;"8viLYMV8dþD.E]δӟƆ)͠
\7az}m}ab1dUMlgR+aw!6'x hg)S4q.7.Ϭ<}ʑ+ ZkJԙ̳xהptƯCFŬguJDjC8<xoL]80:M7SKcqŌ͐dnB%jD$33gb!7[b1	=/nE)`2-%ě0Hr|	3'P1`e$$n6nI'}+"dtS_ٲ,>ȥNծC,;lSJpR+!'Is<5⌦%V<$11_W[^~3Dcaw.0CrFsZ7pa&Yfsapph`rha!E,r!ɡC'.K9,㰜
8氆rXa=9<a8<a#9l䰅Srx69ఓ.9<ag9小~pA80#^[pn^X酻p½^3ȟυn(ݙXl \HX_aѤoOAϬ/Xv^c-,<K}a*Wsa9|Z
Iᨢ3Cƞ3Fvjϯy]VK&LQ7i46ݞvդkveD]9}y^~AҮ3&<1sݎ	a,rF}&kkoLa|0&If|&C2d>fI+B(I& $YJd9
U$I֐%YGdFM$Il%FdN${H#y !$>h>xG
A#+6avA>|0aG>+}Ć]YcE=IJHJITTIHIjH'A2jQ$I>G2$$HƓԑL Hr-u$$ד@2d2I$H44 I2d6ɜ#) I0؍$7ay=Iz9UZrX_"1IZIr$ǋmE13> PP~
;GyΗv҆mvQivH)RiI\Үvk]'ziJAڍnv[*6iKCڝv{'HwS-ӂ],,!`9+!.>vdY ɑ4C& a[78˛Sz=CQ=[%Coz'=mq	9fAq!.
!f"%GYbTngZVۥ`uSU].Lf-))>L.=Ր9̓)=.:D'	{+=lcB//>
`xM]*[e;re'{\_)egm!m9f.=6*-giY'w|㏻]I^fxYo/k /[=Ym@x3ߜGٖ#C]%
{+21T8HaB@&*Xp
;^K )U
oGR(\&0Cr
Wv9
UR Wx
K#Px,	~)\%0_jB^V/)~+^q~Qz)~ᣊrv%G>,B:
,Q^`𪆘iXl|UC74|CCҀoi0;=
@C?pojՀh̀4,5m
xGrհ4n0gVK
w+
w
w{{

U]j>԰ƀ4<`O
DzA>'5<l0а`1Gãv lW0c4"C^ŌxiIx3F0c4|3F7L·1c4|3F1c43FÏ1c4᧘16fw0c4=
ch9f_ch
fbhf?`hf`hf׾1c4|c
Ῐ1>Ōp3Fc121c4dahbg3b97?PKs:    PK    A             8   org/bouncycastle/asn1/x500/style/X500NameTokenizer.classmSOAwrY)
,U4H|h"h!B|pۮpܑ땀_D H$G{g˯\r|3ݏ A  "J"\D&9P7R#N,FpX芜;14,ҔYgY%΋u_iۅtƲD[n"lzNzEf M-S=i+4s&v[dbݫ*apB:F<KyOK;WN_!ꊒphX.crRd:x~9{v5nF
W4jhb?WCDps"4IW|I|29
긁a(:4:Q:br)!D;nI-+!nm#!!!"J>I'/g<[⫳<k	tR7mK!d}RYLK8L&b̔ѽG2⧌7P>2џ0j#5^l -a>҇fjftfjGhJo=;	À]C9𳘏
$EJl~Aԟګ^|_x\^4짚meD19_5'{7F7PF+F|FۻӽG*nD]]DkTMD٥vm
rhzhIZG1~dLOkPK]h  W  PK
      A                org/bouncycastle/asn1/x509/PK    A             2   org/bouncycastle/asn1/x509/AccessDescription.classUkwU7i!L	`"dRZZV-,u:t&L'~/ԅ6,/~GL4il=s}<_\2d'edxK JiD>{5{=F\6+yE@^-6['`-utu83%G8-S%	^7l
k_8wr{Ai<ţ'|ZeV7ꦮ=a@qt.0D{,ͮ劖e4ۆ<Ӎz{}RwM0
$rye4
|(*f>6YoprazWsfzs^uT]6\ZӶIw3!;\=6})ediF`ױkIeIqҰ4(5	^ޔpAE*t-gSTwTSˊ;UmblG}t0<W=TG/.2ݕ
ot+cG"qA1%:X:,Wxد]vPǌWFN㒂$N(P )xY
r
2GW,G
9'bm[0&Q`p7)2C1n30CH2^'w*<ʾ1bLѧj lQvÑLgJ-JpAߡ"ނZQ_Qbl%By%.>C-LTMMDwQyLg#J
}&i(zy5LKȇKidsO({z}ozWdϴӚdICPi̼dd+vE	A2NAx+hϱđ ^k{¿PK6`*    PK    A             4   org/bouncycastle/asn1/x509/AlgorithmIdentifier.classT[SI$Nx5[2A*EAhIq4dܭ#[eX%	e}a9ʤs>O?  v	T
/.Y원pxlY#\~7.+s9v7>]P0l2j&7tL%Wivu@'dQ.Q,	</e"/m3
SEsyɰWYZ-vmN,[Q9E3,߲捄,#dȴurr1o,PjQR9zbqiO<Hc
PcΫsnά6)g+ZKk$Kuj)ح `
SЭGL	6}/ѻ=ѭV~-)ZQ*%"7>eޅfU4+,>hkB6=OwQ-}us0c;C 0۬yiFňS;(f<ym]C/4qL~ipywBC;Njՠ 6a	
a8paC.3LE+*&Uyq)ia\U)TM:9L2,+Ba6R/5Fk9dSc z
ÔQ2
#?	3BUD2+x"#B?} ^^/W0Wqm-s=N1|9*׉mG2F׈Tq(SE_]l/c[>q_5ܥQl
u&Fn)($=GEܫd/,L@+^G8} N{IjUџ	Tpg&qʘegW:V+XP8

PK Fp    PK    A             6   org/bouncycastle/asn1/x509/AltSignatureAlgorithm.classTkOA=S
B)*hR(>1!		*I4~˺@⿨Fm#/~GZikؤ=sfg/_q'coٖxEq-0ʋ"c6GqquJ['°˖cT1Z˻-=^<2Tٶ˂yZM;#;&ˢhl̓ܡK!'ka2\

̶h`kFtZ%KXǆUA?ο|_Z'GMZx'#_'ZԽJSdA5푢hݲNf|smS?YV4GGlp٘6btm
?FT`TL b**Lō 0B7CĬ2,dNy!Cc?t
=J!D>ӌI]ݹMQ&jHՐ@$d҃QҾ#"k5,WRa!w(S#ЋCLz>`&yJBZ'$1cfH%Yq0ES{(bp?X~W<lTի}Dz>^y+d3
PK7ͦm    PK    A             2   org/bouncycastle/asn1/x509/AltSignatureValue.classoOPƟR*CLȌ	ӽ A%`Gk;~4-}?\h&m)M99?}
`>À*/눇I^Ev>-;*

lKjʶVhѬ-ưYnmf<pVi6fN=+Zy\x~Ag3tin[R]+rZԝt;Gp-qa99wޞ
|WtDa][]&n;5湽\TCq۶˨KOHjwQ/zV*/׬4pUC?}2\נ32j|),1EIȠÒq,zKIG^NHQ'̈͞y"G(Rnz#GMN	
čpyId6D֥UgHǐ
SJF6X,Ք ̅
SB*½v>Y{MNT	|FdBfFӘ<cN1^4vµM(siW0}PKޝtF    PK    A             .   org/bouncycastle/asn1/x509/AttCertIssuer.classU[WWA&c RKKKKR/AZ8:c®U	Z^^|Gw2! $w|{s&>y4F+I
^];,hyn,<Uqd(MӉǶ`\y_Y@;'b ]K3Œ4OEv<dڑn>F[&G3Kʥ3,Ul['N멛oǂ㞟O/x%zab਴,p@cʄky9ਦjZSiIU
hLբ
nM<q{#/5cAQZMW|p0gO^Ejb꛾h3-x&'*2CZ翸ЮаG7jا!SCn
5hJ0֌4#^gjhꋛG֮
jdNmI}{䶨vijGM5 njwDSzⱭ>C1(͗i732v*lC?,W(hCv4.8b@Q1Dp!m@	0˓ഁ(0e8p
	\`=Fu:~%p'+:x9q2UI#I_qŞl 'ea_m%(}i(%"lEkD2?B7? 4O-c9seƦd2f44Yݐ_wc*έo2n˸4[ƭ2ߑQbc?Bhd8_VR\O1ȚG^ikqOYs8:$[wX\$neYԆ>`TA`6PK(k]    PK    A             6   org/bouncycastle/asn1/x509/AttCertValidityPeriod.class[OAC[b
/-XPP(lHqb@o_&IR99gv #A=+4(M2n>R<5{{2\$e'Vm0wm%-yS"&v=ѭt$𴞉9]nm1tC1t|aPrE!IG}+uҳ"#zWǖ=#2Jl:[JW&[Y/!X_xsΌVf'F"1!#6en)ָcڲnlIn1wMaHGإ(hR*)hQЪMA;CxM2t/w[;CWWe!
W_RoeHx$T`M?Exz&jF*UYZ;w-g/tћu%Y+
PnٝaKQWqLTRqwiPр
/=>٠
!2Z#&3EƼF(d&g^P<!3Ezq1]7BO]6yɿk.
ha0,/\O??vs,'	WҺe>,A>9iy?"x	̴<fɟǋ<]yLka|ә/4)+`r1TVz.HQ&6^l#W}tTO;qn9A_v PK$a    PK    A             *   org/bouncycastle/asn1/x509/Attribute.classUisP=PCcn utvSjS
I!8'B/~G@3'/{ϻ% \B:V:eڷ&llVXzhXYnۥ! rYWaO4SܻFӽ7W*R0uJVIй[XY52T Y_걼nb|RfXvU(f8MJQJJbe3z1l&R󣎆?J2Kj3EMN	{H1{~:pW_5w_,kmDRI_)%tH%[B##{ .0Aѭ}&QwFS;R?LXBV_u*ue3MLO3Oyv7<Rv`O$/}Zwm-	\w){6
0mH8 !GѢ`㴂88T1̱UL!geІ.3\ы>\cc0.cg1dpaZF2MߓB?)[<ӋKP>B
,CW	mKx\_
о""7Ik
A'~r#HhZCctjV-Зn>ǫWE;Kyה	B	F]^1(7qF
3
3#Q\
. TMW&4SEqetVf4u}=No!\WbZ
&~PK)
%    PK    A             5   org/bouncycastle/asn1/x509/AttributeCertificate.classVmsW~n dݚ&&/6_mkKh(/Jnv)\OK?G=gDǰfϽ{s{^2/xq	DɜEh"5۵ucF%ְmZi
vzdT*XY.m&#Ϲ
iP`)_~d2#f`W]C6VƩzu[~#0h8M<xlíscU
'S6w,WfVMڞ+p9 []oNŪtkwѐ6r:Sn.Y ʺW1ʎU=RsRBKޤޜ'+K郾*HܔֆUgiH:9Ӎ;xivQ0ҷ-d^
&`Jc
f*xMq`~kK!NQJߐ)n&zy6qʯ	zyIaHm,4=9ŁݻO`~i}w׼g~#(|FgF/ڠS2dA_6ӧ2=:G:C'aW4dQÛHhxI
t
oaD("Q
o#Ż&ACZ8ضp4e+k]縉æ0l0dnᶊy3Pq)>[*ঊTN9ܥ_
Ba~sǨ=෕$ DK?TRu
O B;`N1'&;gv.1L(g(0BV`Fo={=l{;
5V5TJ,Q--<hoz*g`t*Rn?TBc)ZQ)Q	XOBDKcm|cZ(yZ;8SJEWPK8Ul  	  PK    A             9   org/bouncycastle/asn1/x509/AttributeCertificateInfo.classWiWg~! [P
"ƲYcq(-vcH0&Lڽu[k-hiӜ/~Ox1}޹̿@~+@U~{]pWmq>w\X.+bʩzViH9$'yxXh\h{T3!u +1RӺԈFʐe*lv ])FA%B!ZL<lY<>T>8pB	P~I3 H4YG)Hjc](cTiUE꜓֜GڰjmP|HJʰn\1C㪙xm$ĵJӶֶڮ꦳W0U[W/$BVfk*2cq)Y]g|9-DU}pU.)@יn6A:ۜCLr Uuů!*b|bͰw'ZpE!UWGh@،FL:(*T
X#`u `*j
c+ysGOnu2
B!',g6:ӡ)$Usj.?)=b=5:ʖݤ8Q5+G.oKVXXe/l3^j"3t'!cCVX6{=qρtͩ5[6-0v;2N?"BJJx,ˌ(Ɓ3â=O`O(ۏrv?օ;X	So	eh	2H萰VKB!H(^	[#A@.[J*_B'AċaA6I(1W^cx
7d C!AI0Ðz"!c3mfxKDN1D#10ъE"vC:X8G[:"ARԣˁ#@%Or6kHj!7Yvj!if@rb .J2US~
?㨅Kri<
w{IS9w]8\LIibfW#xXn߂d,<wPD}_&ikaM$>&wCzM{8{hL)3̿$p~C)+ڏ	\&-Nt4n%pS~_9s5^龇1z
}
_$p~y
YCm\ c,G @$A(r=D/P:38dMa1IB\4Dwx%m^iWl
Icl=m^4櫶Ә/Nc>oKrmK:'WBTD<Q	|%X%/X%/RMuRGIMf?P^DCh-PK!  e  PK    A             ;   org/bouncycastle/asn1/x509/AuthorityInformationAccess.classV]SU~6	ݰ,R(5 Ɇ4`˦esKݸ4Ox7RGLx?8=%PI"asy03cAG5&@8v]7t禀PlƆiUG71۾Z3aGEC+iX\+q;l32:URKY(	8	rf=_x0vYD޺~;$MrUlYSsE&N_vTCcne}iN0>U9Ɠ˪-Ay%cFv2pIvX
ܸvV_d7tb98ž*ZR#A14Ul+x0®'Gݐ%ʫa:ubCCXcjZz^w	:(D8-bHgE8'⼈D,MQ7hÑHff#Hٽ{i/[6bKzji1RL5cobL7-L#`C܂\K6P%98֨{Tޭ,.7 oUz̵aڴۮHۍvM߄ZLpaܲwQo'
2dLAQdqS2Ƹ1-c Ռ"D Ẍ~⦌nW8dNFnw"N\¼q|$pc	*!u|(A\➄(%L`k-s}.>zozS=YRy!D~Li%?J<ΡNKzԯVEtAgp^oT~Al[
;*
63d >zgR~@\O\7>^XI~R*2Z;O+UOx17bPeW'|@NODL/8KCu J9yQCz!rhw
b
؜;C<eȢd+pqӗ%ȓ m6;9&CMz\HWW.}2>sPK=b5  
  PK    A             7   org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.classW_[W~.	ps)-ҲڵچnBam6JiBKr6ܰ
U7n~l~oҺ%̮Ӊ:{sHb:{؇ztz#8fd??,kg?Y΃0tC/cM5s6k5w;O؊KIIlQ*Icit'<IkbɔQԽ&%l8c&-H)#MFU
 ;[W/D4SWÙ	^r	-mE䭃%#cj2C+^Z	iK5b4HUlY-::qNYbfs
$4Y`##R1TazVMI`R$ՓI-&[jBs5TD(\ScڔEI2)bAzE=,I:a,l3
T[WnЦ-'ZjA#ޚ2TƈԴBj	E{uSgm֠KՉ6F{"7;jsK!o)VnW
ڼHF[fwm6ŋ^oN<^FD+ q*]TM߱P^3L[tjPISwH3$Pf$cgT:<amk4b̔
@-B&C}=E5dLSIWk{Yt6MJqGL}R|X)Z)cæT\4M@@ox>;).;/p@n{->~t/9~ zrsM*Fk%˛koj
7h篾|EWV~71:ҥf;M.K[nȕū^mfbkڬj٭yN#7uTTQp\yWrs_qQ]	G'`0N$:ItOSu]Wu8HwnW7-PЎ
6CS64*Њ&~[Q6V43
:UpѢ`/(8Up/t{p܊]Te))܂g e0W
iFe8'1ɸ_1O3|;2I#7dW.1<#8#,dk2|_d2N[27ero3|aG2N9C2fS2T|ŋa<E/NO3|?ҿd6MZɢ/ՖQFhAwhrnD3mc7F=[F7/jL{ԡ#=^C<kj-g%QڀȱAn؂7p?^o7!͑7=/rXH/yYrkp	'i'	6ܝūϑ(4Y:		t';e s:˙msWg\Je]@T`TPA&BxiEq6zAIחPn#wxO3U%<^Ͻ?KxHI66ܾ&"M]'yE}9ƶV6q,ڝCnn6] q!SGNUc[Ju-
HvtDҪMZv?Pe{%ll=[Hzr{,}T)Ji!ñu8D3n@WT.D'iSE<DD,^^y`xpqtʆ<|+*/oʮ8W8EA4c$ڔËCpۃy<ux/x}ns%9G6Wq"e2\obHGI@=fǰzS,Cyok
+mA˖~?PK6  b  PK    A             1   org/bouncycastle/asn1/x509/BasicConstraints.classVkSW~67	U(Z
%[HmRc[%Yjdm OK?NM2e_LS}w$e{y缗sϯ8o}A·BQ-%lnG}$8wT}3fZt3x>(`9MDV2Z92#JDܜ0(7y5mN+:eS㦀;icvtTF>QR5	%QZǝ-2D24ؘ&մ :^Jܥe<>pOW")EOFTRCdvV):gRlj4i5=9R	V0Ȍq%cԈ"C
#*ݽ=gT	e&NSz^1b؞2>ȪVa'5gd@dApЅ]lJh$r$(ltmR7
{"j6O3>Ӱ(aГpPӃqK".EEt8 SA]"8,E,:²Mh9=ltKh,?%شer۳6KŌkR\س4CޢVD{*ڗr
EQ+xf,qX{-ݴne?U\ԯ9;,vo=hE0֌)%T-SA0[~qGkKc^Tx'Se/&
qNj	%
}1%y.Hh^Ơ0$1«.1u(S.3\cl]e0.7$ÔF =x'dx6p'^cHЇ[3[2
84p~ 'n7 Nc6hGkHПIS߿MqA~ha
|Mb0/i_ZT;K"蕟>=:
_CL.<>_XI7ըIVڕEk1Wŝ==-y<
Xx
]wh`۞Xt*wMeH+hi܇tʿ@toqik5yxOv/RWOK8^q
kkOP1yNEZ>G8o^p,$QЗKjgȟ.C[cY<-݃ANs}rt8܋QǧfNe7w
}<jv`^p2Ҏ~x}u4A(;kH7Q`6	dYjö_Yf	PKHzG  O
  PK    A             -   org/bouncycastle/asn1/x509/CRLDistPoint.classU]SW~NH-T/۴ᣄb풬qz蕗M;5dd7腿־o$Lsr:g^0=@`>~%eVSئ^Iم\|.Z3捸X']3`n]Ӷ;$omVV ٕz/吕#}#狆@$-խ7[|`dWV.&I+GBME35
n޴tצ`dgKSƣQ
i>i~amR]k#M{B6|xG^%iP9SJ*\td	.UBPQ	$'Ḅ$/ᤄ(Vdְ\i訍4WgWb'̊5X2vV̳BLit
eUU&Vg	%=ls-h\W݊'ϻ>|fZs9#	nQq`Jڿ#'Hl+vswY;׸;(#UF?48q!qe8'CƄN|0%.0\d"ND1݉Q\
afn2|0>5YO!`.D{>>AA*npӯ;5Nd
Q.A
"T+UÔe
S%wP+XFIN%'I=>r
]Xޞ#{mUFSHoyLza@q#6ǧx4UbkL?=͞O(
ďo_k|dF
^O{h:xsL[vmmlc9U׋Z[Z%@$09Nk6	LGzXt	Q	C9<
_PKk2  	  PK    A             *   org/bouncycastle/asn1/x509/CRLNumber.classS]SQ~~,I*dZ"bѨDwlk.~J7j
㦋~TD2An=}y3ylF7CG8rнb&_e)zaYaLǚef*vݬ,+Vsۉg{$ed\^+l輩ItMEMC*qH;֢fѤef%
F)|$?}^0mcdZY;P4"nI0wۍ!`DNμhEnQhǢX\MNiO9Y[5[ֹʊ}Of汘wN+ᚄ>	|nH`jdG.ÑVXvު4n$I^>fa|QcVEYWs/<.C:!cIEH,qamwd`ʃ Tn"3^0-஀{{19/F0Ũ1+ FpOԻϵm--!rҋgpEgpnk 0VLW5S>W_Xx[WxBJrIJT0S
~2B}2Pw(	$*XqD,bD\HJhVz
bR!n+e;|5SGU2+7KPKf    PK    A             *   org/bouncycastle/asn1/x509/CRLReason.classT[WW 3	QkCk12fmFLLS/]-Mm>h7>>	|%`v#`8,ऀ!٥x8ʡSa጑l=ǡLe3p:52x_T#Jj(]Y8ڪ9!G>%3$%dU-/KeRr#dԋQP{{VYHwv܈eG:><šq@V6VF|QΌ)#oJ˃Q9Gf!^UpeH,c-ד7Y=lLu 3/83V 铓V]˱SdiNP|޴i Zf#V,ũT,xC
plW9Oɚ.i]tu WQ=WbC^Wn*gGGQr93liƴ]y0m7l̚*9qBM0VofFwblG'\+׋S>cNg;ll)ƼݜӋX\:*3ee9d
	N9֘yV/Rk֢c;5QoҪ@D[\M`8f_hN*'orp\kuV<%{v
%7
jolƼMM螃ǠAA-:A!1Gxqq'x<<9lNS'jɍH!Fٵ[e^Q٣u%hQV3M],ȍ;zq8Z/5R垐}7x͑NxCqD<"d</i48Ġ6":0%x.LSD"`*
Cb#
r!2m/3e0f8\s!\ev4i(p
&	$]y2Cf`'%1=GXc-J7g!vsvp_GjOm>U}ꥪӧTխ>5YUO;|jK*W=6~|\!/?x~$~Ǉxn15Yy}yd#!D`>'{.%{%Q#6+ڊsL>˸I5Kx2ƴKx'ܹ[ujxh'RW|]#O=]ǋxlǷv4GP? x:%1-U[鿈E؆?䞫{:hjyP}Z+?"_
!ŦE(OeLovh|[ߠiKhgf9(;yi$:R
@RJAUT^U5^UMxUk	y)L(H
A)D}Z(%}s PK%,o  
  PK    A             -   org/bouncycastle/asn1/x509/CertPolicyId.classJ1bzת+(.*JWoP\XuF qC'm{9''<]%)-I+2U\RTSO<]xsZ~snp ]`&վӅE'+헕{fIh uZbgYe!Z?UᔅWr:P^N?sa{^Mpl2? >]_#vG&KpD
k~j}_woknQ(KLЦE>aRpTU_}X
+\Vu75k3{-o0RcK
:o
!n_bC#ΦEcoPK*[    PK    A             ,   org/bouncycastle/asn1/x509/Certificate.classsF?%N4)Z0DNp¥`@nm] IqH	ʶ"z/_o}KLsf/LsdNYud诿|FCaa.蚡EKf0hZ\N@gs(n_otjQl8=IGzh<}*٬cFvh-[5
ilv(؊&n
E,QwR55cZR-]ɍi#o6+w1[RtҘ,sz机4fMJ_fKO
xYJ}ZY^(M9Zl}ה9%S-TM
YZ1dhFa;vWqϤj:MK͢Y(;ƕ1J䀥Ԙ1J:NL+Zp
WIdS
sПut /3%Od6@ubwM]7eZVUNI)C
!&ѢMklŤu[SEDEOD"D-GD/|"?<%l
VU.{W_=5n '&?XZ΀t4Ǟ쐵(,2} ~d\sCAdfJ<jî^ϫV;wXK7ZM]s&*<hu^1&	͆Y__O3MjöS-/?|մ]z%$		qa	Y%rFB+J0$H	meOI:f1\Ђq	IgY.L5!iX.D0"8rF"_dIGp/D8gQXLC& ,V'peWX,*rEgr%ǒgЈC\ܘ{)Q
rtd$IDkLAjGM9(#][CZVW2޽'88)I-*FP)O2"/u9bl	o4~Y/|y9r~YĜkp~^W18Zƭ?يdnHvSKw)zj<eOqh~V-Nn^iUi\ƫ'B!JP*tPRz*imGڧ!'"]Lݏ✛6z
Ϙ/9.u0w/csOKU?G':E]hF|;GЩ'>m8O|;z]g)ۜ^bmu`̧X?PKQ%.    PK    A             0   org/bouncycastle/asn1/x509/CertificateList.classV[WUҡZX%X* X6JJ6IdBg&>Kp-,Yˋ(u$a|gϿ 7A=\yh3-ӽ&A"LR=nwzc-G1Z-խ+)Ȝ"s.*R+!Ly_Ia抙"ִU	[wɶU)BiX[pWr<km$	֝1BtJuzQl!dL$m/MlצsdܪkY2x6+=;nEIbyВJ鎛XxbvptmZhmִʧdV,Ra6]6%!WꤩCNu敁xBp:
5,bSu#\{KB~h-#옏Dx%oDcRP<\V7z9{m3g憐n/8#%/8+a=.4PQ	5x2L*z* jWdG=hwGEA5Zř#>5{:rzԆ[Ca;\Zba<#slr=fF+^Us.P$zAvZ30PG*xՌ6+G-WC\-!Ҿ-N:U~T3{[
cGuF!+e񚂋Rp
M
.0!pEq\UЎaA7Û
+P09&fowea0B!DQ*wC6|=E.^HC*1aXf>2_B%P|7P%ɬ8BҞp-}}/']ЏP
鍔\oLvPrB		_ҊK_M=g=*Sn!48[ߠm ڒ{I0@ T
߂ ɤڼ.[ƚw`w`7/ Z~IiXަMcM24N.K8'hd[ԟ`c!|)_d.>-13JVeLI܉׫z'>ڷ:Q5su%RYA:>_= R3"7c
pi)dm7:UkB
P33\Wj6+hsPK  E  PK    A             0   org/bouncycastle/asn1/x509/CertificatePair.classUSU-ٰaٚJkmkJ,@k|I.en6>K8I53~<$M43s=@
_8ʥ\ h3,ý-{Bȭ,|*g#\>9-RU9ܝ2Y A%NIF*	O[nfgډɝY~Ζ|
&_@^1LgC:@d\c,f2+$N([YE6@^Z7\)1d0sܑS)KPo<Nod%Dl'E+m\XMFVαɗ(Mz:}!ID=\htbAsEЭw\c2A-QDb f][1klQqmfW
PpQeo* WA-!<sFGf^%=:"wO+^K5Ƌ]<b	'[pha­mk5ʱKcir-9Q=c;3NSUq
Edm'8
j8w5qBЃv)^{.}
gpSCX ni@]:q[h
1!v4ƴI|BGJ ČB,
bsB|"&vT!/TJ?/UbNw"Y!S2eq*Y(o*WvtPABIPF@]҇ &{
t22]^++JȖ#%釯SԞZ)LzJ0'%r5Zfc	۸G
}J/xpOmD.0
?w/m

 +_HF JHh
@N^~+JXƃF'2ݲ0<we'ځ=#:G &k*n/(wkytmPK4ޔ(  _	  PK    A             4   org/bouncycastle/asn1/x509/CertificatePolicies.classV]wU7S:tJ-$!(B#VR[ӂ0LÔd&$S?kkqie]Ks'dL<{>{s; .~0p܉ CU4z6V
M9+ch^\f`rbY
n`CKyUfh|x5oeںY0,&Һ]ϩZP3:C͂;]Y5{&19"nrY=г7kZj'IOhF5ф7ĺI#V6
%LV>]MmCSvF3O܎}0(oL}p;U
yzh]cHl#0~g\KxFt/.od
xB3~*o"zEq\["E8!⤈Sdbޏ1DkPxsCӡP<!=mjVJ]
ꉾHȋFA<u7/qRh :~cpcuF#I	۹r5<\|p7xXx/o^1z%\jq	3'Dߍy'=ޛ8h]<M?h7(>kGdDTFZdA!o㼌.pTF7ޕq=m"CWety	혒q((nH<|MpJx/ì<0g¸%<|.aI	ø"}&}=yTB rRk#df,!کEN	jd589ʏP6ѱ
%cm:b9-Ç.Qbt	k>p6,[XQZxR$*=J;H	0M ]Gʰ"RDJH @-"E%/}W
+*TQ觥
Е<RT&]
2-(A;/8EdОC*7Z|.5V9[&o#[xXQ3\LnLW8C%H+bEïnFV	zK"سOH"Y.=PKа4M    PK    A             -   org/bouncycastle/asn1/x509/DSAParameter.classTkWU(lM2(E[k,@05yIө$M&]?e-_U=gf ,,5><y IDü@<fX]3KguUf}nE+K%"JE94&9ʽ/!qj$@fk[OUѭ)6ZU^uL>eʖض2X5q;EUq#pEʹU1]RUQoZv*[UGi[@\5S[S(kR̦sgN\[SeR829j;ǯNk9:svL-*Y
=Ϩ|bneֶw[ۧᔆ50aTj8aL`j?; 0ONůmُFˣUrKnԶ$dc;:v{A~x/'s啨bA,0=͙NѲcU7yZr6iR #W7Fd]nqVyCxa<t@?À3H I!Lx
3<CGJ<ex)s:"gpbX`p'F1,1,3<c3|06/.}Ua\F&L1E0E+;s27/mH觇j;nBkgAP2GbOľG]/#V0U]~& 5x'p+P	ύ}LM|3ֽ738D;!K$bLbaBEx|7f_ӿ8ܑщϞ244j>/LYnE	
<E#pGF-0Q|&ԑ`$xY/s+|
PKx  w  PK    A             ;   org/bouncycastle/asn1/x509/DeltaCertificateDescriptor.classXyt-VksB6WC$`9M4%H+
GZt )
Ӗ4}M>㑺3+	I -?{}73|5~GO 0CѮЀhbU?`RѨ%
Is0R	7MklHa;55ۍmqWc;/<͘imP$"A!loIrǰE2bDV#ap2Zd8a[2II	;O݉P[wЈ	:K
עew(4"%JȆIU22;-	sh,Hpe0R	
Yg2er)X"=`W<:[Ț''1d,0mCì1/jb-]fq3fa~ 	meF[b!bbiz׸!x*>%JֵlvbZA+abx$44UKe,-N֗eLJ{nK4d{+MUHu[YVV_vmKAWh)est00=C^pաFW8+2+VK:ǝ׻)S@2+C=Dϖ`=%_J#vP<d,(f8;a,rz+pٗI`*&M  ,Z`@ZuW\#pzg
\'p]Y^;-w'i5;h[{΋8Nzkd9ip:'is,,|!M֜ m/l<EV͙9EIV6WAl;U+Rش]+n{`Xx<p.t"?*Gn{DS>s9f97v(Mjg2Ux٢:P *u<'ٰ}{gN6ht:E*%d9n}/	Y2'/ES:UV^,\TmMn"4*{+}Ks?m8:/\ Q9Fp'lCE"]qĚzl.q9C
<W
Ɲ
y
n]
ZRB^SYAE0\
T*P&^WnCWp1<(ABeH*a1,H)Xʰyv^0E
>/S/W`!W10o`x=x6CMxXF;.	fxNd.2v=2nAC2vl'{>A1|ac1|Q	#2Fn;>pa\F/GՋ2|2nØ>>G>.}i?0]kk<cj5`DBM

pwG	R
 /3h6cD({$
5aH<q|tO/4kM!xH;9k8sH:DMB2,ǋʶc~m]FIJq6/xrw6h$-IU]ADuM˺Ol7#~ЏF?FGݣXjO{Fq=.FzGg@]69y}Ƴ_ɾj'O	T$.zO|NkcTNhg4UaZSc81Li<G&v3X	@PS`$pN[	3.Yi(Ocm
-D})G>38j&?_gOܲ^zs*^jA3_`ˎmvޢWzX[a0U5jkIzS6y4rVaLfH#qs*!>S+!>#FTR0:3JʪR+ai:g91⩜zj	ɜw	ќx+2zF&x2l}hUKvu:+Ɵ\$V,qi|͖I#ݣzX!ɟ-{PKI;~{	Ez
I׺ܜϹ|Fg0]6*i<A6FgR}^֜jMLg!ZoGgrFt.sZTQ%k8~Ww4dy*|b3ϦhI
T|:NciT[Ip<T1<pӸ{`uWq|5S:vmΞѩ*&?;wv1c-1{=8M̔}FQښĎ8!PK	  t  PK    A             +   org/bouncycastle/asn1/x509/DigestInfo.classTkSP=@DaۀEЪU^RShCD۔Uf4Eڡc;ٓsoo &'~͡6Z
m-elnV7u{CV-&2,SlZԬ͡ISY~>ڈfVZUSv[M*w}Eٺ!ܞQl2T측&ZM޶rf0dmC9&G+cEV YI;!:\
s05:#wt5Sv(nܱ8t_9*F3各m-6ZFm}_̣G+<xţmKu
/9gg(&O;KrAʕWSYX6xY
O/[S|A+7SVZ6ȵ@/,a%]>b38VdC45&cf*L5\x#zǺH*:<ExhB
<"Q+D4bDbf̌0#30!D43<ǔ<Ћ9*fy"pӽhҘԻeT
5PCۉu<EΞVI]<+` "/@#I?|T<^qZҥb/.!* 
|yiO6b'\laN_`C/l;"\]#7@t<uRBt➋'=~xGX?PK֦  D  PK    A             ,   org/bouncycastle/asn1/x509/DisplayText.classVmSU~ 7-	4EE)P4	Iݚ@$	qְl"PLg:XPGY]6̞Ϲyι/gxF]n<-$qZ34sF@Wx~.KeRD$'yILtXLE'*3,I9T&oD,Τ"˩L<,㙤 P]Jkr-JnI[)eUI-ZN3=Tyx͹a+6*0a])Ѱ;4솚3)Q2#GМE&%mt]+T$͐Q t|}g$:/oQ]ݜZ4!RUI]
5}MݦU#oW)%SWJsc m!6+lBĶڎzP%ڔuմkӖ
bldIDrVVcĪ*qwV*^Jݥ-i*%;k6mNWQ663C:QɤNܡ梯n7n10pAbpa> 0Ʈ:)Cñ"o9)kHkM߿ΡkNNwCW'w\7t|Z5U_
O^VæV/DDmԋhDLDd܌rS>ц8͋hABD;hBInR8#|XfՃ	,qMƃi?89,7no1pa%\>撢9NJn3S
5R4L8i\- a	79aOف? KYFsIg[#:qEC㾞Pz^X8q~/=1zwpzKdc,pX!,u᭏]`o
CT`t
o_Uz.)^Ga^t]z@[jy/._G:еu˴@>?_}4[1Ie6Z6:KߎahiMttViig}11i+;7<1&GXo;Ć!r4:mSo%Zvh*iB+
G0gvЛW+<>nftg儃 PK'  /
  PK    A             2   org/bouncycastle/asn1/x509/DistributionPoint.classWSW	lXBE+֠U&Eh]m6lK/~ڗm0O8S[{NvCx$8an7 {9ځ5X@# 9ry*jfP׭%62>t}J>Ĵmsz6[n	5t7Sa#P(HTUi=
U`2RD/FjwcJ2I\N@5zP*@^2~sNbITd\OAh\@YeBi)zZfsԨLDScnLq^Y<)E!ҨG4,wuXUtuHWx"2Ji
_+I#(I}WKP.k.C(1upDwqnN!|J&t[q0.lSabw`>֢|yvh)P;nVSPbLLM@iVToLq
"-NDIi5Ɓ6yFܤhY*bf"ZDKn7mTS&-q=rAԵeWuKV]YW#=VXwӳd#y8R	4ÖM='ˏUN)
kcf	bfc-dAyKO[VRriҢ2Pj8m'K/_J=pp񦬹.YD@}L/|n$wU4+Uo(¼VaWXL\+>W+oC9'I'tbrj'`P#xډsb8D=:ģ`'00N:шS1f8W!'q	pNB4aaRA\ЎCLK	K#NLHB!%^ax]B7Gƫzkzy	G0Fցx~k%|2>^4CZn/e\f[J,*걊*y>×3Y*SXSt˷!"pfyByͣ-5=w4L
x+S?VVmwQZhvjokoMLzpgúw+}~in42w4 i7-WW	Z	=T&" qqW`[&Q:ނ%9~ZVV4O{
\7!T`Jnx=-0<އpDshUncw]!w2,6L{|nEL<:C>YH]E74%:2csgeeyMI.u9NF_*NY^4!U3˪o~mVυNRKJj[]Bkw=W	?UƗEk$Ci_PKL    PK    A             6   org/bouncycastle/asn1/x509/DistributionPointName.classUVF&B)`$uHIIsi1@j(Д
8JZ2H /} k5zyC3|Ia9{9gf_?, 
xB@>$<o>H92#(}5C/s,m4aO+k*
dryzt*NZ$gT<9Iŗ33˱Tr9NSĸA)jrʝj ,zy=!1],MYrF[U*ZQ[(iXf
bt9?X7VlIi-ŊMӉ̡網DtE,	]Ws>ZTÎod<KF)M5H|qբ
C5敂b4>XRuՌINXVM\d,ͬbٺQ,Ld4=}]ǚSF\UVtPe')i'nN5ƄxQӍyN49'[LP
8j]݊6YښB6+%α;yNTT(]p0x<N8##gyDxqs<ql8Gk<b-O^+{ONFLU.OnBB(؂Xp3//(%x}[n*/^&ߣje[WeqH-gv{ڱIxFatK$(K8CdL3Ui	1+ISgE	~,I0]
oK)2VD\TwDp8("q /bD11xKDkXU荙K]i[ޙRvqa^ڴDi<P7@^J},ov_h8j!ʿaWLnQ?~=\qOvqiaWJ)oc}6QBJNx>gw!z;;t=Dz*c%tI~B\۲!
r!Ub%j	qpRP&Q6)fZi׽Nci'6ޥPBmGyC}yl8#v~-o:<&y:X&9),ľ]L,x6X%|T	K-P;/SaŶ91dӿÐ1%>fma_gmbު,O2+!Jn4GmE;C)}NvToU!PK8\     PK    A             1   org/bouncycastle/asn1/x509/ExtendedKeyUsage.classV[WW&	xC
^\[TjE{C&03QU{Oؗ>vUe]}opuI	CY+{{2g}`~h,v\9+j'tSwNH88h"㤲t1]XvX3-
f893+gE[ˉ.	y+tFC$4NL{8A5E*{k٬&aqoKX#Xzʏl=oƟM$˫CefHvRhffAb ffiًVHlf)9rLNeĄC%IVZ__Y?m >k*D*oaJQ=}\gKf:@^[U]JPVdAy:<_Dkt֒]hMz`T=u)5DR$(~<;d㺣>+0wM26hQ&m26"cvd/#,Cv*B/GlZQM	Atu-Vӎ|"/E:QTB.,QQF֓S;WrhŖ36d~8q~.l~v9VPU`]=3X+\Nd=Wط2UqZp͚UNs>Ҹ^"YƴcV+o=8aSA{8#qL8E#>P'yԧ`>R,ΰHW
V\3z1fщKADqEŗ,Ax-At"A$a-\aY,b4A@\`1܂8>oũ|ń%2#[*hڄ@HGG"Bq	$|KVB09e7peHʃ샟F>@S9zE^"4ޑ
EL?XO$TYPpֳ\ϸ6nbS;RGtO0FÞh c,/=v}\4Osh~I=	w%<G\)Ix?b<:GIE迳x,^2BEr(I$a*%T5}VĀD{Obҍǝ_fv1E+6·@D.McBuzWs?	3ѻ	w2obmP[jp	{\bMڮi/!ek@gaAlI&k񡧕*CZYؿ@xiɷFI3D+5ߗTȽfZv#; &5=txzPKc߹*    PK    A             *   org/bouncycastle/asn1/x509/Extension.classWXG8	T*p'Q%dYG|
PYXEw{D(q\bqziD"[$lqz;3oa	/͛yo޼x $&6EB(-GP*@ TR*%@ 0AJQ~ҥn FY5WA<]\7x8*+5uUFromi]91Hw[iEm\mƵqmmf-m-k6W_iUeWSm[[m|vH!EUX; ADQY䂈rR^a$ <1w+AUԣa
jaE[NaYEKh@Y}Q}V'Ir$`E59`YQFMaQQu]үhCV$ےZWiP?Y%j^ iFЖ%
I.#(tZH=J!Mr?Y{㙥\	OkC< tկțWMrWi1JX]CE
c9YhT~Lt@Xݰ\2ֆFuvgP֛UIõ"|e cE,I)Kq)#r/`#]*ү>uTݏi$U#bH"m2T"KS"=aW*QWFvq+IyxT|BiC`?bFlF+fѭl* Upl:BHj=8Tq3ԩj]oDTp_Ҩ$F\&FԊ2_w{EdCnqqb/ Rmu_7'003$aeH{U7A67jjE:Q]aIʌgDrبYWԵaݠ"o8`-[S+:بD]DB/5[H[F[>33M-G}eeI{96KC2umε	fe=u kX'
^
lFZ&v!&hvq8%8QtK2ဗ;x^`k«Aa"A˼֙wnzoܢֹ
`9GT>~S͛
m)+N% hE즟7ZQą.ȐQ Svj"̳3QGuS8]ˌ!C1}$/ma"V32WQIK`_Bp"WƹźuW&KIo?	jEsl_9c0-Ó۱C.C'KBJFNA !>!%"P	 JpN&^^Cp?k	 x|&h.8+]"
V @ 	ָ]zx1Ä$xMLvt).!ڏ||YOs.O}>.	@E/|+_%	AMo|;%	~@C'?%	~AK_7%	@G?/uY/"0F`B`IN8WXo<s8	9M\ r,	, 	(KuA6A K@;9_1W Ppːa.>.l岃{(Tǥe;]\e<.\~.#\qy7~.\>er=\2d=lCb0$>=?ݎl@۳5J&-rufe=SHo$ue-@d`{ܞ+l;
s\au:Aar\u![g1}fq#qΠw|<i%byb;4lt{cgRd
I1sMvid7i+Rm+O)xwݘc>c7	):cY"l$\rcx~mQ61Oåqi}`;<.<cyyƙλȧƙV09ozQ靘i.vء1Acm(zcSS^k{2u}ѭ{0BjE
\2LcE>
s<=ӯB&} >҂1:*\oknPbl7g2<))QN	vp
`WIh+4>ɺ[Eg.^!Fޜ3mȇOwRHL	揱YAE4ɢ[
lQAS,ZcT
f5uXtAV4ݢEuZؠ]oPE#,
]jRfZtAYY0hEW́wXcd-xhU&Lf-7[-^iY|m2Mo4{-^m_nY|ߎ2`6VPKNP
  >  PK    A             +   org/bouncycastle/asn1/x509/Extensions.classWkw~V$qbL0",K&!5v1!IK"JY\%)MzL
ML$'nKԝ]I$Ѧ9fwg.3_U g7ֻvANgĔGL9!fnUS=Dx2b19c$z}c=#'+W<v?sgE˨)c /Ɂr\PT9V46R!Z2-X>uʓY9I/-)9iP
1|Ӿi)7l2K>tژf|8
ܧ\G"訨pظ\5*%~DNf/?uKEE߅F!k1ڵn8N6fmVn=!g
[6Q4+zzL(Q͌L)ƕ1]')9D8L*	9٧'l9p&
(%3tUKͪɸ`d
5ȓ.[N֗	CL*צ9N)enШE
RjNA(|f*v	nLWҊl(cɰmuhTJT!W͆H@98f(Ukj1dC%LyelJ+*<,UesA\'xQRnMF/4S5O\0RV9DxDxElCDN;EGĽ"vOćE|D" U$IIPzW+(woݫ܍pSГM7ǯp:ڄr"uA*Z	;o[?q&*MXd,̠YՐeWu~-p]،ɞY]7$tUK>`*Q}2[IVa9PÉ:=B2/pS5tZguz1O}WRGZpHB7$Kk$܅pCa	MxT#1	x3d\ݘpJ Ѐ3pLB+d	[0ɺ
8!*6ᔄ=HJ،ڡHHK؈'yK(ΰb/>|ދ~cqŷY|ǋ8gX|ŷX؋A>A|,"ϰi_d?b_bfe_c
3^,,,.ó
S,>K{q̐cr0S[	1'sEg<TOAuM$^(KR/Rrq
dS5UX
U;2hǕy0!
';`t^\:0:y5')\|&o?W<-iy
^T
?
y,^]9:l]K~f!~Ov1ڼ`:bmp.L8Em,b?Ք~Cw9FЊyؗZ㶳Ww4%-=eYqav韥mk^~}E
tqГ[f96g'Lm#Zm~H~y
#lTa\o;z$a	E
c
*͇Hby3ȸuW/U6Vp@+M+ɕ٥,`x<GnEQD']3*v'~yRx5h?sxgT EAV|r٬
xЈ;f6w;oZ<jwǹͮ$Wm9:Ye!?5Kߜp.!A=qwvwߦzԹ"īv
;Hۋxy'Ek d_܊{'e~l#RrQK=ȡcN>JrPK'T    PK    A             4   org/bouncycastle/asn1/x509/ExtensionsGenerator.classW	xג؀-(PҀ
4D`ƦIYˋX^)
pzMiz'-m=HL JoһMMIJdHWgow? 2J] 3d-C
А2$@jCFC8DhlƦgkm@SuX/l=ptv"Zww"A`(FrW:zV{U%.`Tn됡Q5&ҔW')('ÊNf[ȆFcJ醬^EjYP,дANb s!'2DT=H()S
s]-r:B7aYɄՙ'/DB[)k1⫠_P,-J4*`'`(<U4(vIZ	kY+ꌅɄQ
&@T]#a"V1%ˆz@*GO
=]J0RMփ>)AYcJR's&D`CLՆ8u杘j!V2]:Y3'7}Y2ChRSzb̄xNOW䢩,  vde+pӒn#Q4{QGTN8uj^bJt|dwjW>6H6Yyqcﲈ2WZt!TF(aMdJ%egT8fGcfF'5<F1bàH
<2B9pT$bHhKJXDj3EREqAjkDX+b"^(F"6(SDD՝i褮jt6	[{R66u
$R~d)?rRO@O'!i|yAv,MGbWNҰ7>qǴ.jg^M؃umLөTeZ!_/^E1yjiy3$EBӝИs4M:nvWD7yPTKU}eVWALNm/}QA*H]B=B ,:m[!JKB3%,g147*$v	0Q	50$e0abna	⠄F(ex%P˰p3^-wIfhkX射:-g3QB/$a)VGopYa}g8R
bx7{'؅Oя{Sgκ_tVq`CGaGescf|ɍ!sC973nym1|Ս},×Py7A3bqAݴ0$N3$+|#x)>
ȈӫF*/N1/zUkȁ[v>(
pˌF%\dtG\X-#M	|ۛm	.p
z
 	ؒ^^4gx3Jhi)]y8~|mNaz^q.0$&V%Lpऩl܄2^${3L{m24IIdT>IOb6g߳<^#8&,rrn;65D2lNp etű~A˙chiY!j+78t?ؕ'K(y%#$-$q8gO~,2ݝ|rTeD4TLf;kS!<:uK2Bhe)7)
~MĽ(w.c$em'N^g'V}<U*RFjibq,<uq25xݎuisPJI戮WI)_B<' 
/&:%"9OQ@*G87\Y@kǟ2ǶVƲ$`)#ؓDq3#Y +OUTx+'$5=sjGL/76WJ7=<{q/ys3k ^ΣNAvAp\(!
諦g'ŉ3:[)J?=q}4zzkh߿ZsPKX~  <  PK    A             ,   org/bouncycastle/asn1/x509/GeneralName.classWxU';lM`.Iͣ6P*I[pK&RVdwv3Ά@[OHWQ@Q߂ EQ->Li5sϹ9sϽw扉F(rԍ8
Kܨpҍ7vK#2b& #+7Zqw6r;31MF@AM-5QZ隱4dዴbN4*	-F̝p)==NB%Rɞ~K~I%lf4=ؓL%nRR
ѮUv3i#ЩԾՌD?*ywnHf[PRjH-٣ƴV%eآKݟQdQ'n7UccBISW5#zP(YH$YԲ¶J9IdJmOSu2/ZԾ=TK_y(Gڮ]ͪѭhuy*Jl=,4	ESYD	5$RL9f%9$PjJ7kK	SMfatUcFKĦٷi!MU6Lv酺g2Uis@2LfhTI	VI65_,N٬G1317+Ұvr&s79DbWmZ19jdhZSZfh4eڨUPϟnɉmm9	Y>+)/YI1ggUj!v,S ֺ+T]M)	XyѬHv&.5eo%VW<j>nnjIqj8"ȩ=ыW]3i;:hi39i!Fr*5`$Yj,9?ktbvoSL*V\eFߧ'I3t.r1>`'[Էf*;aM 008D'AbpKK8Gj	IX#a:	pu%\*aJLBF	%lY:		[$\IE4|	zMӎ8MK;;meڤGf/
Ff8]d,;x|ü͗a3>iP
+)aajC!K<,ļ`.:f(5We	΋3nm2Gm-1/
m.o^y^s8cۙ|u*OwՅw˟Ճc&B(`<QR,Y Ǜ=XxV2\p
C;6Z6{5x.d؎w{ЂxpC+VA3CǶG>
|ȃr|śrc2|6c3	O>{1$cFd$0n|Q;>%{ga*2zp\~|1|S`h}~|W2|OLwɸ_qG;Ⱥ>d2|!Gee(0!{w#DыƤdTdyC_mݷUiP?W"\Kr[F͑wY!yYIy9r9rY%y[~TfJ^s>A"i)YCQ|
IɻN( O(-Zytx4"V1,v8DD攉ǰye^Kd2RO2dLݖ2/)WHf
#]<}A,eaɎ<[Ưˆa<ǽ fܧ(	(tXpYX*!~砐5-a_
z=CC>0;})<_Z~'/j]fݜEc8Qvo#8W'ْsi9S)(:*CMfܙkWHvat?mM 1hv■H<b{\%A͔}ʮ*J[ՑXh.aAGmYB_{]v0okz{RMavC.iVYZ&Ӗ>mA}jtٚoKSbj\XAE\vnE'YRRLQ-`T%2=ao0~vi{C׋!X!o:hu.wN[O>nÂiRQd6OZlD#:О+#	ϝTM#Eo8b59<U=A^00߈q	]ۤSQ@[yX,D٭K/Ӣh/HfjL{Nt9}N+*NTu蕸;|S<lvH'Q('-kz;¥#xN~3%U>'oi탧^vB9{vL:YKɓruO8*&vՈޅx[UلQL!W J
}2=: tvUvSw[J{:u!
 ar22Մ8mul)ԋa0ӡ햻rYe&]~W)Q>
NchDe˭XJIel<6x!$)Y&[</R^E@mZXau.kRyrqQ^5XyqirOWI[BUz5>h/L-;|M%ѶpcGs>PKVA]
    PK    A             -   org/bouncycastle/asn1/x509/GeneralNames.classMsV_YI
41)!0HSGqjbWԑ\If]6̴fM
?+)N?fjϜ{{Α_`˩gW84LÝM*ښ\琺rzժ=9xKhժn8D5֋Vuñ6MǰL@Yw%vҊVNt\,,B3/cq^tg\jtE3kf4.ݬn;F'׫!=eygsg#yl
ݞǌtdFI2D\ÎŎdkk<bq-+O	o	pJio0ġ_ND6=<͚EVXCv::xTڈ?nm<MU>LtX=l-qEޗK3KY_h7"x82P-H*N_eRq!pfz/7S+'{t-k<0!}?7^ID$$p=HxP3%,!pWy$UvuMB(dLH33|̜.8ifn213Y#%<ETn3)39)|H[V^ת,-*DRP-A^ew^啝:'B	tQ"7߆\P긻/7
ϙF6
1:`$LIU:_\j
{JB/jW,<o
ZCIb<x69O
3(`aHJOCϯ}8	^ Y9VA?,}CQ.ĩ 6F
Ba
8da:WBsWcNw!q:'.o ySG%1N
^P?PK  
  PK    A             4   org/bouncycastle/asn1/x509/GeneralNamesBuilder.classSMo@}kubMRphKqlSZ	Br(IVQA#W 8O8u%\fw~>pkUی.nЍ6j^5{5՝]DHcyG"4ZH!T!Ts91= b#sᐿσy(Z?hu}o^D1{%`tD\M|(!hL}#4d4`h8ႆLcrp:YkL1G-8YߵRiUC$
qE0*9e:Ha:cK2ղuqCG6PoxX""EQ(z2f}ٽO~ .
	s7ԍ{E#na
(ia?Q"lW2+uMrn%$m2S)%gcJαBOPsFXϏ灿PK=A:~  O  PK    A             /   org/bouncycastle/asn1/x509/GeneralSubtree.classV[wUI;d
łiҐZ*{A
L!IH&YK_Z,o/.4
dbQ2go_$_~`z@`p)agpez8"e6q_^Z'k}Xk	^HGb&It!L Zs㧧)35lVIpGռ&@LhƘ)yI
yCH4+ś^bƨA{51Y5U k%5o;/j(P8jj4(5_iY#tTI3F.'
T\	h7WҪq)4LuCKZLWrӕz3D()k15oB3Sz,W)mΐ}3w%ϙc6L{+`3*oI?]uۑS!CԔ8S9n>NT.NyFO_MD"|"EK"v#G"щzk;D,Łu6ڮNHYyPW+$-ofU9`
GT80oiߵDWk&]_=JW03+g|u^tyQҫ\:T?:۴JaL?8y8:;/#0+R5XC2pX2z$02GF #<}RF؊2Fet`LqqL>)2L0L2L1L3t+0p,ì ^/2$$~1$<K*%		<eH2\%	I8HI"kenPcW&A7-,7FRWteIo.]n"\q5P_B@Nzvs~
M}E4#YNNmdoỊ22FJo$_질BF	*ls>XUfk(@LAdnHM"D"bANt:>Vqު4Y`H(Lg;Gm>("D_5@[f9f+c(߶Kpqvʦ
Rǹ]h?a&yC2޲i	hdop
@08j/+&ZޅExr`WVmDXpM+~<mdbl&R8(@bM	[̝3K_Hq[(&-+u|
PKv0WA3  
  PK    A             '   org/bouncycastle/asn1/x509/Holder.classVkSe~6lB)J	 PW%Ji-MK[]lK__Ψ!b9MHHHLa<}^? <=/8+fhIF?^OFLQ gDNEFfW&Nϳ@EK)4hSRꘚZLȸ I5,ͺ5,5Zi"syHY
]ScֈEq-w!댒DY5LCkʒ#躚Pd"@7ce7HVR3iMI;ͲLf23FVLIYRRPhdzj(l̸2ƤH֔iߚDE'x>ZWe"F-9z*n<:jRR[ffn'ERi59&5E,?x7f84K["2sIݛ6
ᷔ_3yMRM\tAv"+SK"^.&kܚcNjͥ-;uɼ;PneiY54MIH䁚.{AOB7cfbc1on*v9N fSUSB~-&T]L~l#׫4b~kǷUVQm)lq;M8Ë8C\> 7C8£>@Zq/N$Û#a	&C&0L1cx800HET	}2\p᪄f!\p KTac1%$5zՍqz55iO[Jl8GtѲ~z5@74CRѼ_}vFF*,G	zC
t}x0q>W1,O
[Y~[z:fOD(j]Y,eWp[Ͱ%Ac|ǟ/CUֺ,?eEyTH
S*NİHV0(n/VpGtqUY,
+H}\4l+IOYIG5C; ʻqNy=uçl=)Րe X czkh\-qvjH;WlQLp~rO[x9H
N'-w!˿aBپM/ր^bs'6TYǽcz޽
n#~
o9H5*
YX	ڂ\<9MYnv}`fr[ίس|[i+}
6PKItJC    PK    A             /   org/bouncycastle/asn1/x509/IetfAttrSyntax.classVSg-IZx\h[HM	hMKհ[{}}t[3>?it,=gsbB/9}?5v!	AM</
P}\T㄀9iLO(NEqUK817TxZ3)9;N9USҵʢ_Ұ?t.pto$	ɋ>\!=-6FRi:xz3qE3QUIu
pmȏ6RQ6r""a S4JXɭi	jiCbJN4GQ"b	gg1=RsW#TQ_?&(}I}IYKɤT"TL0T]d242~ӊ~SLoM($)CwQQWќ7LJW
u*]VdsI9PBVrgT,m%2 J8;ht@C825zlM(zC_ZUNڔz*M"6hSĳ""v#b}"ZEpph!b]MW]?V8q]uM.`Z~uoa_W~8F+u+brHb~6FO?.qӧRs<Rj [KlTyIv?iZk/jAHJv$<j^vaHBHh+;+a+Fu$l0^eJ؆3Q\dxAvB!0Ơ2\v/y}H238	xiAG8z1z^^羢$
9vyPY(PMEC$?J>Lr*EB`
WS
&16mZ;=10gs_@s׳rN7	?u2Ah%dۓzLz cZ}f1׋Xs"_f;mѐg9md1\D_6}43nF,zffjvt$+K9{4(&}:wfoXl4Nڸ:ǗKDo]j҆8fssp>%̙Λ'"nx69yL{y[XIz{=an9`[_reC__$;
#48*<DC(HQDc|A7` eQ[/Ż`B}S"`nnli/D]gTK˕TaYv#l%=WPK/Vl    PK    A             -   org/bouncycastle/asn1/x509/IssuerSerial.class[WW%cZj34`*jSAjltP[?FGkլˋL]mL$MVa?g}ggKxD@@&<]Ч$xܰl˝p"g"hi#X"Az>o40
7a;N?9N(5pesHn
LKϒ/˷Y
|tKcY6cl0|,n6򮕳j@I`fhe3j,W0c~7ktǞ'g[E;Yc"ΑǑlv
OfjS^_g-,>h0͙ӳ;m첾MdgӞ9B@qֶZ;ts*8*☈"N8)bPĻ"NxOig/up[Rp%LIE]zhyP9a{Nfۺ4zLl:,>Ў@>BGh=7>6`[Ew8{D6迮ۧڠuv&wQ^;;+]6`qX:M0̭id|;x`Roo~gtح04CxS2#,}2<."Ƴi2.!?^bre9rǼvg,q,!˧ង>cYbYfY0/$.ưH#r1˗&@$V%(xDg$YR,_w\$]=잞_7W7RH%ozi~oPKkPS>
ܒP"B.i6yX=~6>vJa=\Th*x-#*\HB)#]-c{h>o
Gh_Dy="zD"(~8
^}*:{2y*RSX_yIMWU6n\բ\%\c4ro&4^o|Ts)ǔ
5q2W'z PKb@#  o  PK    A             9   org/bouncycastle/asn1/x509/IssuingDistributionPoint.classWW-z"`dRO8MlW	SpfʱGGI8i6M[S?{cꁑdҚs{g~3wܙ 㖄6	%tHn	J#!*!&W	q	/HO36N"'T7t똀l6A=keiS7Ypՙ2R4&3M[ڦL3Ƹ9F>	WYMfmM@FRiY9I䕑:fj5 j*i[7fFlѳ_ώgrtOF*HϤra2q0VH[t<gm
mLS3eZ5)ʰiha|a2V6NLV˔ęu~IfӪ}lP]̻̤SfΘ:fWơxXq*%,0u*+ⴅsK5>eLWD[ 'F+u6ʣo:Ki`Rζr.dZM%vo [dKd)6賺_&dq0_0
F^"qP!xDaD<.	}"3tK%uh3LFFFU"HNPdPd&?Rouc.CD#b}+Ħ6d`Q:; <\g"xaԶtRp[R6܏O7:wrqkJ@>,WgrMYVя̺MjXf^7|=bm?ufэ-QI{CF Q|FF7Fe1&c7x!v6
e|!gdtϞge<	dY>'L1eaAc8ϐb2v"݌$faC!q|1A\fx Nk_az p|	^b7x
÷x0fvvë3 F2/pW3?`g~˘N_VI$ic@DgfMs{uGJ=q1wk
͔GZHDcseStr*Cr	W$h[CrBYϋv'In9 D*EݽC4YB0_5JE|/Jto)!
敐J
tzWp}
&q`	'ZDǐ#x#H}i6b|Xr%T+kxzS,W+vhv""AĈ@9?1BvwnKcx"~wӾ&y/l-#ɮh?}D
*~-ڦx
7	/FK'
;^*~T
JtU<9G&XT2]B*|]U˅{|5	;g+مcƇ8*⩖`kh?qtON#ןO7߳DŒzoM|I^(?PwA^Rùk%5w_͡5NXSEyW*q%
"~yX6((]G,^,>dGP&ϻb8VJo߈1n7=IZi
}h6!f)
ފqp},y'=F-yJ<06\PKԟg    PK    A             -   org/bouncycastle/asn1/x509/KeyPurposeId.class[W"Eljk+DEZӈ D*jKGIPj}_pj~C֧Lb[ͼp{_.h%7
X)pnU`@@@P`ZBa@T &hhhhX'^CeSn
Z~DCP[(*c1
jxtD
H(ߨSΥ#ʈ1<he1ԖFeP-%½D/E1.QĩT4J4xe[&
s7ȋE=y5팙1=kHIC洱vg4
VX𑢆^'ө-;ᚲ3QHL{R49˴ĨKϓ*ӕrg$/ە4
_2cn1ԛJFK
iVPV1N;w\3?{:6<10jfR
:f_8Ld:4y'ݕ3-&͒H5\"9c]ʕ~ibF)ʼ^r
eZy3+
lx0j93;v4HEGiWIwzZΪ+k{o꫔ы-/i[R%+on{1[]ոոGoʧB
Mͽ1=l8Ʀ?BM3M>C/i4Me{b,~l¡ ;`dlat22݌F/cH1v2v1Ҍ c7cc/cqсe܁a،B QAjp1Q18>2b<x(1'O2b<x,9/2^b\^W1^gxJ0'IGqd^Gr&V`/R>	Z>[en'_Nd#s!;d+s̔-2;en-K~i2׍Lg[LwI
9'_5tʚT<' ";u
O8MP_sP)yРþ0rA>sb\!p;WQQ*s~$Ο	ޮ=iS6'+9Be>PQOV/N/Y,UeW27(2|Pej9L2+3Oϔ	(3|e~TeRNY,R#eX|;*:-OURjR^/5PKvs6    PK    A             )   org/bouncycastle/asn1/x509/KeyUsage.classU]SW~6	lCjW͇6PJDDh~dq%f6'N;zvZ`ʌ7o}&N&Ϟg85,QL
.*%SQpY!@A-4m
i^h*%[
Run
"eCmUjeX2	6eV#nrSt֬¨դIMȲmN7e6\ۂ$
;Ssnp}՚䤏f
fC0B,JlyCQk8yH_)<cek̬fUnwnrQ匶Us7>n1b{x|L˜n0AQ+8oljv5DgYNfFEM-?Z;S>?f;TpYt'瘰dsj쏰NPaa NEB@BHBXq	kkPUqJ**Ϊ8⼊*.R.:!:Zh,&`2U|sSt^{Lv<rNKUI?׻9<bd;sPo좮ܭwaCl\c4-
'A

I|nK>Lh8I
S|A_Dq3QpO\qWBA´!%7Qb(J;z$OZ=sc2p%
:2Q PaxiB|/3}<M<)1?Qh|4Τ_#WȭBl[W=.C<I,=-K':-
Oo6n.
m?d=)ۑFiz=MK
<z:jWwBA >NRc<A(Na@O89xS^^*%G12m\[7G
,eWl=!gr dkNԸQ	0-KPKq  d  PK    A             8   org/bouncycastle/asn1/x509/NameConstraintValidator.classQJ@}1jksDpUPz" ijj)𣤻As)㽙p ;R*SNfze+ĦȬq-3h+mQ۰ZOdNz"k,D&eBQesT9>*ԕ5Bǔg)7xfRG"lG8e͆r7:OϪA/k::U(gϱS6W=G<7t^PK:G     PK    A             A   org/bouncycastle/asn1/x509/NameConstraintValidatorException.classEM
0hm8)>?CtKqg[J&F$8 >;7xgpB
bB<'u'#d^e|0yʩS^'c*YMBrQPPg
6Bf0jÞp18JRѰVѵjYApG;*PKz      PK    A             0   org/bouncycastle/asn1/x509/NameConstraints.classV]SU~ m-6GmmSk/	E~-iXv͆BV\8MPFԛ^[*g@
	$39=yIm  q9(_4uM@}I7=az3Yja$K%Ԭo3-X&c!2&YdN&4յY '4CgU@sd VZ."agNҨT=ɅE ioEVZL1s9mY$QS =5;n,e3g5z*4RMreh',3nZZJvֲ[frVZFtdE%:[|SMFIuAcAFz*sS)1v?ԝLXrW[oys9/hP٨Am`irMRS[g2x0Sf6+$q[Fb""NhEt-u="zE&Z"tP\I6a)`t8]C:vlUtMRsѪ>o_V\^Byq'|=VpeDkWGTrGżɣB.X*5KF\xTOWW7WCkT>_nQkF|!qC+d.mᢌėoʐ,\ф|#ahFoh(["ޑqex	xØ/f$0!O%(DB pHBc,9|s	AsP%`üA%aA"CsHpH6Ï)Iz,54ff[^ߠ:Rq{tS-x&ht+a	ʟPḲl_l
a=C(SHVO# ßx$	t<<r?ؾ?^ (}MX|ctѻo|xNy,q}y,. O<F1,_$D=#V#䉋6Wd^	#{jX+Ng)w]
l@+sc߹Q/$8EkGV~]aV8kcɳ9@1N0w05m;lo߄tӥw`nfiU)cooBvW?PKD    PK    A             0   org/bouncycastle/asn1/x509/NoticeReference.classV[WW&O
RB TJ[4KmH0fp2h/'ykĖժ/}h=Bawo}! z>	EQ.7pgtCIVcMIfJ3ZSR
4I8z#lZд2jNh!5i&{F
[kiRVc1R56eQX,{Jڦ%%ͰJ=j$mHӸiQm<0Y.ydUCںieVM6)
{JMHeN]RC	ՈF	-&xy#Qm1Pٲ%Lᔞ1yڳa=QSr37.Жm.+hGSچRGBb[vL3k#9Nk~r_E=Po]%({#1hVVU6_/'mrW-}A%l3+jZ:^8"@@@4{LFm4]h۫#ju=}v&og#;sHn۶Qt\7"mHe2Z#vDh/+;B:]5t3_hL[~xgIc-	"-yR݇_}v"+ܧ疷>\~ݷ}Nh	GqRF<2^c(q^3qdaV3;+dT?6p)MQ2.31W`>v paڏ&Sуwcqݎ38>`O~|t?TbL)6û~٤Fk<.h&1	?4gG7Hk	O%Bwt^:F2TV{|#aVxtj=`yV2++sic~THGzoKׂkIQ]O*lx
!7|DxME`C GrT	fEGr.*V0O" sYgǈi|R|\::2󐔆4n#%XƧ%3W<[y946~A=7b/'zDy_S@:#
Ie՚FO&ATbU1^A9a
ezEg}}ɻi_[&e![+.ʍ́+J98dp'PK9    PK    A             1   org/bouncycastle/asn1/x509/ObjectDigestInfo.classVmSW~.I\5l P+ڦXAj/.ݘl(bDi )ifMN9W0Id{y=?$m\pz<]ͺ.p<D꣤jծXdW c%!}4G׬M֌D̯akq'0Z3Gyar#ɃFR(,(^~hc.3=ʖ#Ux4vXYi,fDIMqy(93I#V1Z=Ь@_y֬6#ʊ.WVRq"UY_`Vjl˒ff-,h4g{thܟ*=h-fNr{!\ѵMuG)=ƉN2wڦfi[$Rt $4Hh.ᤄ7$pZBN	g$:24*
[G;M2r'6o#AvR褿W4#Df[u%*M
VEH[1CH-э;Y;[v#e}V@fVx1?j:QߨѸDѯ"_]J]XTܝ5J35$S+`-E5@50UkG)]{pW<h¸=G`p2<u̓F\7<pcewX#>M9[4`wяe7!7>qcvc#>fPVL1Oݸb<dXKjڌЕ4m"kIѓ<_-%d&0]Qt%!_XҼhGLHkiTR{J6Џ@گI}g0?1+?Gsc! O	ԙfY ],hSLNc(ԑBrgtR]
r_1O@i$		#.K٫gCH!J8o;hON?@(Uۇϱآlgh}N[M=4|hp>Wv?i/	]1&661ͳ®KJL	FN-sV]B0U/PSiCR
9gOEhϩ^<ҔG=;j41UaІ{.PK    PK    A             *   org/bouncycastle/asn1/x509/OtherName.class[SP-

/%J@@E3\0oX%60QuF(#3rܓ Bkgnrί_"CPbh۝ghKwh?c[ή\&zp.w,Qz*E(H,3=pc݌0y36ʪDJ89x *CINTy랛7bZ}7sG^Eݬu޳]4D
h
ܢ2V+7XɈYxq>(ZQC	]_
J%H
X]#uyVͽ']fE}ur3ÝOM)q1&:S>F>SG5n㞆 <C
AtIG^
!I/@1hFUŰ4c*D*a@\%x!*ܼrO/
 K*뢵o$2~ 	a;b'mg*E`X B@c_>AZF	&	?Ԯ	]x~gy)/2J#?VYd?p~a/ympPPE1[JPKh:gu    PK    A             <   org/bouncycastle/asn1/x509/PKIXNameConstraintValidator.class[y|T?&//$d2@A0o@AаGC@bmH0&!3QnUn[tѢu\hVvVֶӪvSh s͛-	mS>˹,s}3<s 0C [9e`/n=j&5)eQUgR	ǹE*rrR9b<7	Z4-޺4)
mmlh
5F;C!>^DZc-Ծ9%ّ'Ytʆd[9n)
658910f t,&.m7T1	qTE}+CҤ045p#݈x3`l-\C@U+jZzA2#ͻ*)zu4l.
E[;"P{]o 9{]-Hsy}՝k;XB[ZbaPYp$DtmmpCtqHN=m7nW067731O/cPR̓Y`XR1SM
#4fI24	Eq'	YR0Ó,ҤLq7[#[7AW
[D#E=V'k"m!43Dc(^i1p*'y;u
mӦ }Ӧ:4HclIk4zՊZ#Dchu#`tS»hͤ8`i!<.VۣHb
6M4b6}]X"X#5jP,
4`s]>t嶶N@:`K`F,mEcՑ*i
m]chnB74L3Ĭmihm3]td
LHPh6Yk6ϘiAmM81nWKFOI߂ptU{8٥8_0ڎTfnMӘDڪA5[cXB1B5pDIMƪOmniJ_-mfPě:br:z25G
x\6ȅyF>НT@*%Egnl	EcM]̢OnJFsbvN+͸4nkI[BhdZyu}4m-~j6NMM0~B?Ƥ^F
_f'=ujyu(1C8ϐY#葖2*ۆ+	HbgOUO<eU8AWkѥ<0lflSF77Y{|?-Y\Uⴁ<4ʹz	J2䃼?7hFVC-_1~R2͋2v1,Yl02bt<:(/Kbh=ձy=sNJڣkp2G%ܕcQ@p(Wx6cYmn
gqT$XkJ2ȍ=j'SD	ͧ0NA$6!j>|%JWaGEK+@rAn``.b`Ƹc]pƹ`&`&>Lq.GMadFOpp7p&naE$×eMeCU&e;d)7eߖ;2)]2|W]nmƄ $wڴ];ʬHl҅=ܼx7ۑm掤E+ؾ:KZbn^Fř$f:ep26̆&uWT҄zp=[4I8 HYFtJf0bPdY'~^C҉/?I[7Ϋ3o2-M=e0"GepL)f}k24r2gB/Sȕe ?9[IH3tJ#3gqQT';wΐK`PKd,%{9,&hVƩqp⁣gh㢁C+qhe//Ak`\iP0%'GUg6r?@OH_o`%h9N4Y9lVPAd8+<(5_YF,<mErMttH&PK`rGp/A>	 >spTl$4	<`W	*D	րS*6AA
3@U!Fy*|s>*<rTXpX#NPCp	>CMQ)J8K3Y<@P"xE0UģT6Lp*f^DH#"Y.e*Y
	:hj
Rf*GB*6Q$+SaSa1T 1A#PYl
Us'&X@SUXȦV~6]l$9$l&Ra7lsU8Qa>l
TWa>	eT*BSJM	Z	*`ma@/a[L	j	,#XNp
`1dx&J*6ak.#
Ap5Vk>qq&8NgܫW>ޣuQvBE.%xPK]L9
|>KyNP	%=
d<?C
b+	>iv UeG,~5464l$\Ip-
	n!	Lp_#:$	Cp']%Ep7=#O}=#O	 x?!)"xZa6$hTmRE	0'..&)Drft`s.|Hu1O_ح([1F5<o	F!ǂV2	}Di KųN</e\<'g\<~F>IkV6,u
]{3ⳉsDC@e@"+	;N  qg~Vن}GK8-)]Ҵ8#>KuIeqXDâ>)>uJ#PFGE8K̤s@14??/Hh#ss2*yN7A(󬨏OR+y^N*2mlXz/82y>cpwJJ'cP'>*imnvNJ*^{@ctK~GipcQxEk'CGZ)6HKHkz`i? =r*^txdXl"\.ڷmy=済Ko#֎s#qwvJ񂵣j/{!֎q;^v^Ø}f>89^:ٻG'c'C{NSȘNAexc2\$c~Q'q1˻_]tGbrυA<ӑg4TSv<֬I$jhD
'jTG%Nhkj75f:itT>X7CooF&ԾY<?}ЫD|zy@|zm`C=C{Zȏ1EơΧǤN>"ǥ~̑qjR$3e8qGG-B-|ꒊkc!Q8lQv'n![(ϵ'LZL\Mgum>/R.*VoXm!]l.<VWPVSVgPE]NQ])KjXqv[N/엙t>.R1*LTmW]02LsW㋥
Eț?:]ܰXh2'Y_S.yzG#utKp!gs쯍9YhƇ~YK{WӋ)׉p4Rt':=;s"]Pi<~}hsAbWtwz(NQ\:LUQOCYNNcH/Hbf vo`xnF9Y=
7;&M*ߋ|^Ǡ
/wIMqTp8
zyD,D*~`?rBCtv$vWx]9NJ户-/`ͅo\[MsJiO)ʁF*: mʹ!a.0.SL0JBfLB[pتh{2w]`e9SP ÇOnOB	h(kx
{OCۣu&Cm-UZ6W/ĳ
]uuF[o0SohC'n5dI4뚬M]ܔ1"e m9F!#%͋esO}Vƛw"~$cSbDq

bL6јS迨>bl"R"y6KjKV[]K2gj'sKݓRdx'RXE?CHSw0Ϣ,gc2*EΛM;=(tmV;5?{$uXӌ54ֱ*9ࣈHy&޷#*e8flnl]lřnid.i!ѫY
G)/0`/cbF8OĜu?<|ޠEH~|OClx'
+PdGE3 f畻*eR~uٰʐoWrq?3&
r[P^Kf'@탋Z$\QHу^
M4Ԅ1ځ%]UvJ{~,Pk0GH0Gk%^/P@	%^Xo@7NYXwv iN2G[Q<](Gʖ*tӍ(x*Z+x6_$YeE'Va2H}0&i%U NE׷ذQ.0N-Cqv)5<v'!
t[3h 1WOۍ_!&#.۹&uܬXSҋ)LdU2ʂǼrIkzkz ÊκC6V/^"\Bď9Nn73[Kvd#=2C5K}~UX[/^
`$hcA9ፌ_XUO9n˥8
,f ,85N{^eNg%%6޾ۏL:E}/;Ci*Ki/FXd}^v@N
tK1EOqk?p~bSS"bq㑥t&8pO;kxAbnюb7Ӗ(pB!Jx
F\Jkf|mV'VN\,$/^BDKhLZ@yR@xVC@pCIBI}|}쯚4;aaOd9I7AQKUIH&&g=J͘i?ITd	ُMq".!4i&>d/KXɾf<3Yf/xk a)O9IY&/Vڴ׷{ltхxS̗q*T܅B~B:d>?;tyi|6;^rr_\v_|Rx70ޔPKG{G{]*o<Ke]=<u|fz#m2"mČ`&dnI61"#Vsmy9,0&QhN~^&Fn16&.5YO3ŗ4p#F[DK0&a&)6eR	Ü0<j-[.iƙzV@ﷶ/2_}17S-n[nNs;=EPtbω/#>_AaZ\w7C5QvDt5^doju5\_6NOeNtnt=+Yk80.Wt]
Q'YgS[\x~r?ov	jor)+Mk-;ߩ<] i*4ħ컥(y8VS8q~)Jk%-=H(Uc'ar\aGտ._wY'Z?ǺW̉Cn1]~ž	<.f\>	2)Ml^W{
d? 0sS4XZlU[rx{b<1^錃3oNռYfm,q$kXF.370?kh?тݔM^M0syqY%13	rI8@ٯWe|j4+.ܸuǞ4%>ptTd8Ά"`˗Oy"ì0EҌ)ɮ%g)B᷼3I|(.O
)/w`m zBdFV}--2B>ڳRd,7	pj-2k7NB.
Ot#y[ZD<u3vu!a}4~JxU5jV1;΃FaKyyTt<j|)<+`SYzK%Kx
i)?cYsV
S,[)L=P)49d%HhtHHK_7p5yرu)| 9sPK
M4  J  PK    A             2   org/bouncycastle/asn1/x509/PolicyConstraints.classT]SW~ЕuMTc.*MڤjhKK5~.plą.kjr?޴wN&IL,a)3y~~pzx٨|J/Kiطf;s1ff,[ -pv*DlfY03OhV6.[}#c؉B>u,%[3y-2]b"C5M7Z^5@{򚩇<ӵ0βMA-Xz(Cfeg!d.S el+XݹQΈ3Ω'JqSR=s*3N,wHXlʕsRk5oڕf]Nh>Z%miiوv|%10	1l!'_k"΋ b@Ġ!E.bX@̙;Z1Ft:[CĎ,e[V?!e톋JkwSQ	9aNUUe31y#pfv!76ģqu4C.5r\clqنk;fNz"<+poH[=LOSӼΦ^9e\09g1ʡ^>2XB2d\!bok2znpxWK~(x79ܒ0Ʊ#	pCLX0er#a
sKf0DzpK_B\gRݦϏ.PIЏtsVE6!0{i
lCԹC$JA|B49,
E_*e#}LSO'8SX_`'a!N%t@7"T"6"J_PG')5i/+Mi57@
=7)CЫOT;prbA꣕_:2K-#e
nަ<&jOwU2O1a&0'|VVi}
sia:<"b|PK3  	  PK    A             2   org/bouncycastle/asn1/x509/PolicyInformation.classT]SU~	lXR)j#MI釶bRMYҰ&zop:gl?nzᵿ㴾fIipW q? zp$7|hU$KG,,uŴLgV^˄ƃҍpڸL;g¦a5Ǵ-6;wL4|ްhӓ5Ut4o3>ba9i7vk,
niZ<Yx"3Zn٦,I)`Z3aѮaeM]KkE'gĵ5K]^t;UϦ"Q+}59uY`9iqfkyx̥p^KuL35/Bױm:.Y]mA	$𦄷$0$aXTDwhh򿯀̃V~CxWCavb\j[Dt-jzhҬxɖWԆK-
lDǗk¦V{[tcTojSC!%:!j9ȿ>23A 
8a!1xqޝ	(l8ǶqaJ}xaa*d!!c2|	u2&CR$")#%OR2,$zMF`gw$he-q"Ikv:L:Og %kT0`<]F:Q=pXMQ}%d~Sv#WQxIV`@U0|2r8f	Ȝ|qNGkoļ;nG<K4Aw{i2+#WˌӾ>Z9S	<p{u=<ΥD+HweReb3j-t@IelS	@D<oIOoI5D]]xep{LJ1XHpHx69_j55hq'c9PKL`  	  PK    A             /   org/bouncycastle/asn1/x509/PolicyMappings.classTRA=M&4
*Qa EFD㣢!iq4`2Xڵ{V.b*J,B݉A X9}s;~~\piћxG=H?gmFI0r|*zy`ɣC1^&ݼObFpd9CULxEmV4o9ѴWiܚ|4ٮðsmU|YSyJ<ϼJZdGq'DקK"Ge6|idFtv\#Bv5;K-#"B(E=WT,3g?*UUlQMv;TTKEpIƺMM,Frc	v8Ic$kS_T']r-Y~ńg#=9M٧TcVf&yͧaGA5Ѹ|?8 18c7?th	Kaaѱ2tт>ah@+8	ЉSbㄆ8 .h°k{
pRi:cnN6g<ky.-i>&Ĭ),L9F l&Iygb~Bx2=%٢pP!4	e_&{Q3BA~kL냪2:3%\,!ul&0DuO;DBƅ[FWf2!+QBr	^~1U)i{PѩgFa"$>ٌrŮL&KNJCWB&|Yy~'룧^~E7	K!I@ZV1@~PKRmD\    PK    A             2   org/bouncycastle/asn1/x509/PolicyQualifierId.class]KAs5MZ.m+HJ>ddd-w6gEBA?ͮ]739=/;

Rzc@P0#D7<!AWG7Ni[.L\?dQd{h=rtl[3usӸ_ףcp3%_.~n7ˬm@Hܵ$ȥ'P{D
Sz?nr\k䐅JePzYPJ$:-xurXG@-V7Bsؒ@70b^J樾b#Xě|PKJ    PK    A             4   org/bouncycastle/asn1/x509/PolicyQualifierInfo.classTRA=M*xG(l75r	^"lOZXˋ~ڝ,A!T>}zv~!#N7V|}!LtӒ3le7Enu,S}'YS΂XH-6Δ쬫Q`yu{陡QiBdrW3d}]ϴZT$fYFJTat#횎-p`w3˙VBN&YrrZײeD=gY	ĒtZWmp&h|b..'(YNWjԅH	7}hv.p6c0]%ySCB$쓰_	%pX{Z$%265e6wj
!>e?v%(
;Il[KaAV~VukwTx߂D5eƖ@|=MmvmRT 0Z_v8UF2I;dCexyClyyV.gs!6!D'e3f x8nqW\czp#H,\sǍt5נgWZz{A|
>S%EZ!jq5)o?{h$(p[-;.?g1<6CgDfZ}y̱?<n0U
7q<HsY`M$(%<* /ziQ5;ߠ?\P?~WJR=I=Tٞ\ioy{O=	f`X5$ݠJRYJ<|$SfPKpFc    PK    A             >   org/bouncycastle/asn1/x509/PrivateKeyPossessionStatement.classUwtdmIe
v6EiCF&C&I'ƛY9<iN=~os?g?08- W|. ql-onFnu	M[Q*inHvvr{㡡{e¥f-Y6ؚeڬ'I_ךzmkjSMl,N˰ǺY- Mu]sj=kՙe[wFXqOc+g?@yCjƣ8jwez.wy<W,]{>ֶ	b<Ys\p]dͣ-

fw*9\y,ڦ鎽i;?7%cٙ>Eq\;"NxWIWVZ~I@.Dnu@5mfT.74Gegv -=^>Å\Tt#qcφrFe.,@/&ZTj-.AB9¡X@a0U?w\#FN`DC:V={#Rq
d(=H "bZ[E^1(|W!keHamVF
s,>fI
Y\e3Xp(K8%|	X|K	&a
7X|%<X,HDu%AeoҶϑD`k!mˡS\Ro1ҀsKdARy
u9j]|#Bw$ԍ4R#btVŝST
]}gϰ+lK<Hm}XgBq#""J!b4i?|Gzgssj9N'(;9+C+{a`^
l=ŭR
B=L]4;	dDPK3     PK    A             4   org/bouncycastle/asn1/x509/PrivateKeyStatement.classU]we~H61~I
,5Kj(MRPZCfYqxI%zm<ǆ9՛^<̲	8<3|"㬄`"dIB(c|BoJޚVӕ W-w&H	5iI㴬frkeYEh5mVhշآ]I/gzU=WYUmV[uKLkǵBBѬ[0,pĂ-օ٨[5D
=3UepLk8hoY^C7{`ζeEV]`)}M1?ئRM{@âK'w9 6"mޥ7s--?WEl@,Qʘ1-58!㤌SN{S]v[H?n7)1~D6mQZN$_*ptZ!/=	p11*^s#q#q/9r.KFx1hi.QQȗg:p+#}9pպFfh;.1\GN`tlӸBƜ3CEEB+Hb)~wYYU(ڒe>sPy>R&>P2,O`U,>fSX`B[mTSzw3-ud;6}Y!T8&LssVb34M4MLIGp
_aOv/kOp=BHd?}YjG8(>Ii="~[*_zΕ6n>q
kqNF0,3}.ˤ30;-SBml<'=icc7 s}ߟdcm)[	~c3Tb2-S x8Y/PKY5*  !	  PK    A             6   org/bouncycastle/asn1/x509/PrivateKeyUsagePeriod.classT[OA-,]ZDTv,\
" 	$,Pˮ	>+&JQ/$liBHowΙ3|Ѕ)?0n㼍.0tC/\xA!l&9ѵX4έq#eiFg]X2OVxJ11ŧMK-5EHrC+Wu-fPX[IM
af2Z2׌fTKY	RFghpv3bD͘Lq$<6R
|)/9?:XVlHXS^Zg6;zC3I}]||'uFLQEWuK_<*$\pEWB$\cN&^`ҞeB3Lκ1rs
7Mn?nڨȋR]Y]|!柃/^s)aG?bT 	(SPKpKA9n)PФ"/ Vmn!]ɨEX
ܖQdԣSFze4GKqwtWo،ѿlҢs1G2~T+"JF;&Ov@
-÷a$G;l.jCZʉB\iw1<eBm3~mwm=~6z%>!c*)'NVq&	?Q N)'+h1 
lI9݊֡},`RG)4vP]ѰLcpQBMPK?\    PK    A             6   org/bouncycastle/asn1/x509/RSAPublicKeyStructure.classUmSU~6ۦ6P+B]Pj-V^R%Dizn7iPI?p&(3~?J=wi,y{γ9+E1,?#aXm	gWX1QO|<Q		3>bb+eO^7<0Y̝ɽUUbdfHJB[mB2m6X)tomrn}lL];gSSM<&+_"verRo%\h8c]	A,[O;Ta
<C^楠Ibwz6YՙחLt4NɇSk-u\w}v{ȟX`24dmK2FdqNexCƸAK{Xf؉%g)kFO܍M{eHf`鱋Mƒ#Bu;AMS^5.` 6t=wjI;[d/+лl^٫mf=%Z&H/Qh*&~U⚊"xGETSxWXr]X7T(@MCHᖀ$`k
+#`U@ZX@Fe|*`SAY
D=2:Vݢxrp*1,+o+CH/u!&U(XvƏ!GPCCiC~CKɞ~1Rxxc\٭cg]jȓUul 	aD~h*5HyslT$!	U$9Agj

_yiuVJ85<_!Eꓑi"M7#L?LhHD	[%5KHRWE
u<M:XbPK,3  _  PK    A             ,   org/bouncycastle/asn1/x509/ReasonFlags.class]S@Rh1ъ-_*㘦)XNR8\tv[v,I'IUKި?xedyywd 7	L̷LGиzT+5uka[c*fjMӪV3ʘ/tnSךFj0s>ͪa
m̼5]ܦa-fCY-!F 9FY?8HRMNwF M{=>4䞫SϺ\vАU:,s5d$0ga4dnevK<DNW<_xihS/''|ylRh睭݂h๕c?Cw}	Vv8u|䎰
 B&L
2'$+䍐33H,%6UǱ^[I	$	7`BT1QM%qyx(PT`
B^AHݰE#J
}&KrҐk	x.aēGTZDHt5s]hR*\Dg%DՈCJSd-H~
Wߕ
E/.;ϢOK^A'M>wCXOq|/E?ͯ( PK1g  n  PK    A             +   org/bouncycastle/asn1/x509/RoleSyntax.classVkSW~66 ]JZxh	hv!k
&h[z߰/>ԠejLHCpPqs{}/yfz} ;qˁ\pЁ(r` ȕ~l$xB#{ξ(SRR=߯jݪ^RZkԢvG_$]HQMjࠦ+䠳rA)Z:'Z/)Twn%j%mصuoUSJתLS5P2J,) /-+ V 93)ǺΩz.VODA%Mtgy+hjK̜ö)
3b15j^U>=(X3TՄUl֠uJŴuĈGiqnZ1*cqJ%dڼ8LZgmZ3"AEC-dt	8U%J`E&}hᴵ?JLno
HqsiNz<Fz<U"V(DlQ!#RW,'J"
d/+&3->"eUʅ^=6='Қs v`
b5ιRlY9{#5yKV~x`a	bjgV,g@κ599D=j%cB휍F-o5z<Qv,$ڲ6_!,'˧_^~](A	G]X,:<ϻM.A1qh C	EB)^b82o+hDC{9QNqAc31:w*C3D8݉zգ<kN4"N
e1\``x=ГC8G?\aeJwO/ҨR ,G3җ<Ru
}n0>I4yq4z`!]|2GQMB,HJcwAea
pp)5q
cx|W;˴"X	V"DR`!3X(zy?0&vPG}0G0ѿ3dUKHkq@+e/,8f$ƫ\Ƕ3s}ۖlOf26\GP.K]|R§2vHVY;Rj*]|C:s"LݞkSXA|j䏈ڼ	NBaFe+Oۗ3t
u4rnNwlxKw^óƑ\f)|$ߧU@|vYQ+/eZ)H~Ő7ӡ@p7].jLǱ?dM#q8dj_aٸau!jgbRLbH7_(ȡ0LB`t;f!_vivZ\ؙ»>v6Hbm0J#"Ija.QĲLdPK;y/    PK    A             8   org/bouncycastle/asn1/x509/SubjectAltPublicKeyInfo.classUmSW~.	.Y/@-5lk% (,˺I?/NLiK?G=w$N'Yvv{ss_`p!(v5˱)6ݚ?d-;:[u|r2cogf2=5wx ~M5Bۖ<^]:g'O|1SnavmtT7vpBl1msS5.+nOyλ5S[w뎱mosMiP3}+~rLLwT6RyxgBns3fԜүT6
-.āќf"pt.9.vxп"=uHfXw嚵i.ḄA	'$pJi	C%P׋1<0k-9MBr5r(h1ܪnH[
l7W#5XMt?2e2cj$<JYMWC1PLoK0_qPp(x"(H"!̄~>\V cJlgCaf"G
RKSag2Â.}|*LA/RFE%<)0%07cpӭ`Ƴ%b
C+~Sn(@Щ:Jk;@ C,Ϊo}kdw?GvMm;Lѝ $ j0B)C3n7pGʔFT{(wuI;.6
Kj>_aV4FD$CQN`Wd2n8
2 .+ZUNxd=̚`=|DPKqG-c  c
  PK    A             ;   org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.classTRP]i4Xr)(m
(UT6h2⌶hgxP'P.e +Zs	9ؽe,|]f9My*0T7UdLi9ԩ0
UsbIe=m*z\,=mqFuUa#mʖ"gL-)̦RL94(Hnj|Fj]=WfR>./DVǃzH(ZTJ0PQ?dTk/瓖/9s'fr8L^@dUNesi#L<mjţG3<x\: VN*\ۼgVtϩRCI2ʤ%΢^Z=DT(*KgiiNג$sBA+WM~i"/D4FㆈzbzH"3 3c0`Rz0`V@/! Pgp񢑠k1%;J(6V2j.'F(b]v!<ٓ~'*#Ó=nR:h.Ң}ސSRR]bΟRxU܅O9ުs#xOG?[`;B+<<<zxΑѭQ=klf*]A-uW4xU4e:Ya!TVx!yM"lM6D͢IYk*K?PKV;  H  PK    A             5   org/bouncycastle/asn1/x509/SubjectKeyIdentifier.classTR@=4`A*
hQ3/!
@I$e_GiGf}r[bA{wϞs~3f2CHNQ$𰙏|yҴLol`hp̮gXi[.C<oxxAs\#DάzSF43,0
!LKgx$2J汽^ɫvKzC\kLξ_4ta0UcZy?gCP;
RxbH:Q̂:8Z?y6x1M1
	hpIeW3GiE-ͯ̐`3#ٴ<hjAm:q'Š|\ 3Wϒ?q)%
KszHKYBz$4IAġ	}nrƭ0A#!q$EtbaTDFDtH;D\mz9zYOӷ^joxR#F^Izxz4O <h+U<bqJOIf@whQ QV!vĊRŃ
Yf2McЂA_!N\!ǽ*mO3*+U<^m;>W0+Ej&N#kQ> E:gt%IZQ`␅PKW]  V  PK    A             5   org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.classVkWe~BX
 "XJ	PAKդĚ
ĦT꒼l6f?c	9~?J,!m.';<̕M fp
YBcp,u	MFՖy2ܻ.G`V	+)Ə 4Se2¢CǶc#;v Aх6u1i	JUvlu5b mykG$ݬ6V3ӬL#PkW巣ia~Rd\ö${fj4aGϥ喀z@q1,=3̔p$t{kj"7G+xȻa-FMَn9+yԲ)T-kM%VGIi5]QqRUAՒΈnTNͩ%3FwOymZdEɠx$t;v!wd\qEFdx_Fȸ*C	=g3^G$5WHYcdV=\	D-L;X~X9_Pr;e{wI6Jk VNi[MZ+NhNWЋjF_է4ӘO<>wusK_S}9;X
	˵\t]|'u2.#=/M#<VWЃi`
ZШM|jVЋ\
9<>WЁ/XiEŗ,AEŃ Fu ױb*ob 7!8',6#kL"
<
:1egk?}[Ѭba˲]ͷu]-exC1*%4/u;QɅw+HpI@[1CC4	Oh
0':O&Bš~I6L:܂O!CMfhB18L'HLaBH뇨.4O(?3N08D%)?B[y|įn#CEe,6A*k!Ȕlg~mg~
+
^ߡ6 s]o^)Eܪi_0x$@	&\HPK\E    PK    A             .   org/bouncycastle/asn1/x509/TBSCertList$1.class;o>NFĲDļt}FtҼ⒜T<C
SK`ԢbB
30303032%gd02x9$(010@ ;da`@ PKik      PK    A             5   org/bouncycastle/asn1/x509/TBSCertList$CRLEntry.classTmSW~n^XXF"VۂH򒶩~[6eCw/[q_g48e/?J=gBFH{}sy nt	s	=KGj&KϖM^в&@ݢJzST~/%/PQ4+f@?yrn["DbK_9?9v
ZIO߷6ky|uerghk[1]PEW[wܪ~-R_쇶(WVO<%kɴ4*C*hLominirv82XGTg!$R-UG9VRhאpTÀc>p\`a=
gSgHcQ^|t攖=^V\.q4	]n#nGyq{v~zu|+yc搙-pԽBC!CN`@7|$>h7ݳ3c͗lb3݃,fs^ 
:pE6|$8̰ͬa{Y|Jo(y}U]+$+ʲf-,1S3CV
%!bf-'|^cxZio[_sPG{4d5j!}p|6_ i6s­MFU)a"b8Au2a>Bqu3싴@~?T"D-CU#T1{i03[e
S|DIzGT}s9Uӿ_;IRW69:YF=oPKd\    PK    A             =   org/bouncycastle/asn1/x509/TBSCertList$EmptyEnumeration.classQJ@=ӇiTXPD*.,]UAwiڔtR2iɍ(q#֮:0ws=sϯw GI!I׫wa| X8-	rP+Mg
e=_m:t@Z|2
d]ӧ (/l\ïݶo"ȢIё`=g2parV3FǇEA=Ѳ	wk'sJW(H)XTVQDPԫ}
mfzzk:>bA(ȢBêHHdz
rT<959jinMyɓ3?%'xDg#:8ň[	U>O&X$Zʔ},ߖ1/Ⴄa>LK}PK|
i    PK    A             K   org/bouncycastle/asn1/x509/TBSCertList$RevokedCertificatesEnumeration.classKK#Ac&MI|o$FA
sFT<3qt鎘?J;;..~ c7as(BEpAwR1pBɝ8^ϸPP:a̍_'<Pj?Uaz{ؤBJrtvA/`REeR/{-(?t.v}OGި)?4(-X-6	zs:<Y۫-iu  C8a 9f1%LM_&5Њ:B1)~ә9 eSFȼ>Ր|l\c;"S3CSw!\!e&R%b*/t%uI"aPK    PK    A             ,   org/bouncycastle/asn1/x509/TBSCertList.classWwUPb@DVT.L!Lj]qgǭV
~sO{g&$-IL=}w޽rr\-8EZNqk5]30I	UC	UUq툺J@ݞh,&7"GK=KV{ڛjh^݈nP<+ݪN`,5T=E8ê9Os7ZX@	mj;y@
 ތTd=8$m$RcA	(J![~-+F"ZUy57'mN3JM7:HB*Akf?ңx""5Dca
HVT$pSB\3^6{mKz0R:#jmE4Ii?"PE~ss}9kUsSvM	XԮj(-OP;ۛݑ^&'gzr.6W\#hL3wB^*-޷˛
c_F gTgm+`eޮnhϏ)l[O7O.#'Q.1K3zRlDf X,BQ!bJD1GDjsE1_D"pETD9NʌVq~VpVM$;%,g.KbV=53֑'=)n*s>Ȭ"-ahOFqn3:oG$u
bZn..jѦA3_YwMf!k91sXm~aE(Wjf˝N2/Hv5/Vyue&4U8Ks懭awW"2:\%0Z7Êhh3Yz ҭ.fn[d,ƣ2Bʐ&c&X0cd,a"eΣd`2y.c"vCF1.=O3S CAefϠ1d]:CC!.aKX^#JXg^Q	
[ó3xI oHhD𶄍xG&"a31)/Hhe_dN}d]tJ<Unoi&?ն([ԙeʙJXJ/ @iC@k5\M*S4E4fnŮhw!\p!3jd")ߖJ >w22"0$ޛ,CVAĻsWM4✿p2#x NeLɌw8[/bsa=ap3,0ƅ)F]9ݽ<?ۨ(	"RaaSb80uoc
c{(I%4m5$[eV,S)u)Ȣ>ROE}6U}&*ԓm<
akѺJ䇕㧽|wJ zOTI(9
6$怵gI\I"z
,p:
umQ}sD*P&&|Vrα<e˓<KĦ'	kz!Pē$.!<x8U&#.w~ԂHzʊPK=+ԇ    PK    A             /   org/bouncycastle/asn1/x509/TBSCertificate.classW`@
, @R ! @6=+M6mӻni:m,8宓}ҙծ%ے~r޼ys<i_ 6~~Tȏ*?X2?~?qaiji%ɚ~%I%Ɏ@!-
d3R*5J̜ZI5W9Ӯ
CrR晹:wcS.x۝XݭjӅ5~Jr"h1=JJT-dt"cr<NAErT4C5biݲPBr!aZ,YuaM=VYvn5!fV娞RN+6-$uA%e镓i"TTw^V<آ)̬xw6ڔ0#.49O4#':_v2F{?-8.Ɇoci]T!%RJBOCH!9D=Tr%H(>+r.]fJi5
z*O;
34޼~kLkX~#Fwa#lh"-ZU3kڅ6ܟTz):[qn;">s:휮,NV(VM)N'cS[]3VQGtd(kk%Syl=NiW"[2RW	dZڽ
|Y}Up[#F&#vO
6Եƌ0r
1ԇikݞt39])u@5!27uTC^
CN/7O
X!Sr(.2n^P%ZЬcRbzBS
%.`KVlpv
G+hKnm^IN+X`9-3x
7-i($WPYK;+\66}ut]Y-8O3yƾKykdCeܮ,"-5Mn.nz.y\͕tZrʓ.nsvn,,VM(;JsҫzdfBZוEpW"n+w^\^)u45OWΗƗ<[2=
|h.̯/dS<sߣK9O)ֲJ3ܴ	/ڸJmq"31b8.b/C;NI0 0jDga)^P+":~Z":?
؀"nAJ*"Hb"nã"V2܎70"VM1-oexgx@axcx?>!33
 >@/xSer  8H }('>0L cc*8a|>#x6 c#@rD 
480|vq~ݦW؉`ic`!S?HkcDkZ#e2q=R	kPA}'\IuX@@t~>?ZT<aS6MO
2KP5xTQs,(Cւk^4>"Rx~zD/g?7Fxi}ъq&;[<ҳ4
&΢r5͋RxYIެ1\&ɗ~=f
YcFZwj1\
g{[ua,7MOIkIm/Xŕ4f)sOc8?iar-uz:Rr1\JL82x(oe1tz$T@Ar?ukt]WCjſ(i.J$֓Uyy7Z`S9]uD%c#zYS#X}i-gn',D(ROa/)H.*ܙeoP/gP,	8hS4"ޠ-c,6j{#O[y8ms/sFm~9)uյ0ca4n
:Z*txmG݁3YW0:jBӣL">9$G=nǯ2nSd=^KxF>Ӕm>u+μRv~Ee歂o:V.]
PKZ  X  PK    A             8   org/bouncycastle/asn1/x509/TBSCertificateStructure.classWsv1
!hSH	@0Gs#IrD#p`iB҃LL2e/})ݕ8I%5?oU$o؊jj&
tAeP4]Mk:I(gc9쨦'-]*Sׇ5lV&,ugh0X!YV2(Z-
bJFS~[SldYn18Xtde4
,*0eL[I)5V^%g`)Jǈ/Pg:IY->u#e]k:ZU:GFՒV$9*wMWk%12{]DH*	;ZpL\whYhBu@vd[}}A<HlvU5[RtF5N

{88{GOkMp8M &=pa6j=TtwK	%Yr}-P߯hu{%g{.wgAP)H`xX5"X.b"JjkDTX+b"6XwpzM*{v#Θ0ջg\\;ȐK7shHvzI;x:!y-4{1s?_c/[\zWգ*Mu۫|Gu<-ᔬ%yu$ST]'iw̌M4>{ۋubøb<,)ߦءȺϸ;4JPg%40ԠEBZ%ldM&KGyxNbbc'ꀄ 1"C0C/KG2c82+e$CgH0(ISj[ш3
ҏ !Őffx5&f	bFhƹ v bx=]8ːax#xS	~?oW2
@=~<O%&(lZkm~:+U\1oS̕Zf+5eT-YKhZB&$7,9lB t$>[	{\A\+PG[#roG-,
{9\Ce]4-wPrI&nɚgYpR,+dM7
LqWZ~	|_$=+nɮOw'f>,74I1TM 19ܼ{4_*S#rFOxFM T&Kc~)7~ť	L~!Tj.kGMW}ͦpЁbK@߰Ӌt	|m+J_يJ"t:m:6#}E@ߴ0;Зm;^PKTz  a  PK    A             '   org/bouncycastle/asn1/x509/Target.classT]WWݗ&L50@#-Vň4#H>]ttɚX}I(9	ĒP:Y9|9g=w78!3&r]x" (%K%+
$lKe]Y.$ye%U/J{
݀RWJ=;Iч̸ҳ39׵l.veⓂUR	xhT^g_8n
~`g6WxZeZYf2o4l ^[9M'^,YH>r݊H[Yj]5ܧ|~;p6<槤rClҿʂsizd\:Fl
4Яa@a
G4
acbyi'G>֙Rz؛#:l3AM6XEkLgf{Da$>Sv}[(8vw{{Y}ěn>wl|Ķp)c#B')$`0IR0l2lf87\
.#+:FpI(\f=,k:Nsas:gS_7'L&
y%n*/`PSKuF/^苦$i4\s7Eu||[[=C6ujXFz}54 X1Uq57l'b #)ДZ1k5YِW 9Xz9FwxSr4?:F2y*6"sknc|}h;!	PO+4_VTN,/5q6*_)\>Y5
87hzbPKZ\  r  PK    A             2   org/bouncycastle/asn1/x509/TargetInformation.classT]S@=B!XQZi))ʇt,ʊ6&eg:etnBQr6{s{ <?6C1fpn2<N[um*ٗYvr\m3mMNkza;vvt3d[YfhG܏UsSDB#btǰL6z63YJTS2E{&M=8U{FCm"iɩ%/y16F	EB32׹ڪcCi9\*pt#2֚I1$S_BR0Oⷢyf?,~'4bkZ}=2?d^9\T>+hA	]"-G@
pcHHLWʈB0ւTq;Mpkѳb<K?9a	g KPd}ftF]DV\/cJ-BQSO!L;ZƄoBPZwψ͵eF(hGf2o~d{IhgBz&%hmsMc%^TGxVE-Yƍ*<.y4A1e=PK.|    PK    A             (   org/bouncycastle/asn1/x509/Targets.classTMSP=_4XQZiDڦbZ83eAWiySmmʠkmQ2:q/7@K*F
roO=~9>Ch0
:ăe^JV,?-
5a삶+3X2n9L&/
7qqDU^㦨D7-]kFU+ahmc=\čjm0ROQ6v8V16`h@xF|}0m	9wFͰ-.!(AHpBBDIQTz1͵?=ҩn)fKU$؃ys2>>%
|o%c1^]qzw"*SOA/
R aXFDUy&zR2 )BFK2qQFL0Hݴ6h^~?^1g	!\UOO	hCb]Ls-rqC2FNͼF%`{t;=gژ@{H- +d`=knryu-v=1vq/$pQ	LB9p:
PKDb    PK    A             %   org/bouncycastle/asn1/x509/Time.classUisF~(&!@8B(wJ4-,z}
|Lg[im)K?G+GH&>g}w @  !HE㪮Z'4N^	YS4!g2+qPZJZJLKS$e1	Җ$KNٴl	hI)`rJrDȴ&$@Ȱ& F]ި+<$ٹy%AM%	b4PLSN)Ǔr9aU_55)%IU2Jb^^cbȸ))Y̦riE'	%c.{
i"
F[CZƊۨlS6TCC9UK73hYrM)5Snɜj1'exː#6k4%Tl鉥lZM}lpjr]zSN+,YQr.UK] Yv'^v\EjsFF?ZRCq}L%TؿH̽~T=TS΁49ӭes[,*;(VTWN7tɰ"tUNXFv_-UJRɱѼD?X:m:61t1lf°AbưaN]0Dz{xޔ#:#=[Kh*9xM|}dZ?H
|NPPޫ1NPٞI".$灴E"Dt^Vj
a׵
Zc6RI|9?(/ȱهш c2 X8DC<a<'OyB͸D1<D3|  <D;4)5"'pMa"pcPDu4'a'1,9nBZT^1ʿ8
S18,!6ZrfZlQ?PlvȄ|C^x@X3^;zf|Ka>f(ez_K"-c3l8KOO"\Ќ'$
fB߰T}{xw'f
x7x;$P㭣Nz@GGW0>-s3:h|ƾ<^/U6๏6db`8N)li-_v-BK-O:al[+ygg_g_-[K`EσU_qmp)=o!eB
34++u6V^%gCK6yC!s淪/.EM{fޣtSn+q!YY
z eW"2mΊ
3>Yw6׸/qJ*O3PK=Li    PK    A             +   org/bouncycastle/asn1/x509/UserNotice.classWfǿ)4R:Ւ"
6Ym"iӮM=D_ηxn=g_7l7	T䔼soݿ
`j/ILf! rdZ뺥鱚~9FZ,V*EYߪf- R4adZ
M_u/ol5;C=2Uʚ^RLT[R+Q]5b0zU@v<QR庥=Ԛm)fͦ2eK+Mڠ=v0f@2
--sK%V1Շnqpzok@sVefոoe"EDD1 "*℈">1(─D=)~"1; >دYw
%pЮ@~tW;W_
H3̏S9g&Lې^so.tO.ϻ\گnpsl5z"}XO=-dy# #Agݤ^(2")C.8iޥSa̱ggq\bqY0WX\eQ|bQBoǐfaq\0FY|+e0FDk"mUZY`S I#$3CkDib]I@NzgO<4ׅ~%DaB?\q3&z%K|Ag) 'o0ѱ)rO1q9zXC)[4pM\QDE0U)^2s@GU^#ExAy;M-l:ezBs䶽JpsM]3-BM[6g3B&#C1PKݢ    PK    A             :   org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.classVRV=
BB -	`L!m)i>	!4&4N
,_Y`/ҿL;e	4MwC*aY]s{ .)1"9qM
2ܛda5WH)	K<kh/	7k9f4j5gK7m-ejV)5MQ̜K̎.6]bI36J*n\3xY[w0Nnܰ+8ͯ˪Д*T,}W)ͱҩb:kg.k(+۹>1zL)񆬩ԌY؆-
ӏD[(OF0VG87
Lh,ATG؆f.nB	Z&F;BUQ4wl r[fK[ݬ^#O}1sb(uBe:
wɒm
ئCUy[uE*Ci2d-gfǶഄw
GڐxyH!騐bS@TdEsϹaI&d#JQ+#%NPp&'F"NJDI։hyΫjG^o%GMFF&5JȅD9͉}׌Gza##sOIS<Q[)"R5\tɛ:
ob6C9L6|"\Wph)&>W1i=QqA<0|0|͐epa>"x`K
r
FX((G
VU07\xb|Ҋ:Py_\滎2#a F1,Y*g)]RmmSuOCVh4D*Dr|s>*֫(_X	}c){1Go+XVX/ôV1/.Ii-`^~:O:R\͏V
f@(bT5֎Vbx5K[q
i
d0Ff!2k!SVFk5(dF>R?1XuX䀯}YŪ(+Ii?{6Z7t$
1}2Fp߲OO#PK#{    PK    A             D   org/bouncycastle/asn1/x509/V2AttributeCertificateInfoGenerator.classVkWUij*} <VTJki=$pa23~ ]KLYKŵ]3dsܹlf?UpGtFɮw@TRy\zBfD@ViŖ',Wm']'eֲPYxyHٽ+Yu}KnTE~VUcȚUMS
sjXXMUQ,KVlg;,YrJ.N%;=ct	fv%j"kdd*%ct"sOv-OvΜ%aÈgsw5oP0:7q!K/,IopMc?az?LLLVEHcxS_sp~dZ]aW+Kv$ǋn7Bre;7{+,[WuDJM(6{6#+ғn
HŀAϨxVQϩx^1/xQK*T 3o!ĳ(ݓAS1P:݁EJ*D@temGz+	cS!p9k@:k}[4O}pLxr>p6.!S#1]r;|l\sH9k,>뱩2d/~;2R=E>]oUP<ۼmDoF=O)O~/oiP`oikt]A#:Rl㢎4 tt
.Û:M76o\1Gѡ]6wx
lf{l)yl>ԐF񑆱|fI8>ѐetE
04LAhƲFaEyǿ]ub;OTq햱~5t(
{?<S|OM=	AᦑV)CtT(+P݁	G0f.W1ɟHYtl!Sv>_Y31&
'81B9vg~v?k?_SxnExhc!~<;XriWk#u7C/}S
%1r
sиLR;y Q\
ۡ71U\/neFcwe
iI!NF+L>W?Wl?z&bLT?/PK$A  M
  PK    A             '   org/bouncycastle/asn1/x509/V2Form.classV[Sg~>ٰrJ-Jr b"(-'5A|E{pLg
Δ)3majw94Lm2ynϿ
9|K
8+xd5$p|D{AJ!IGؼLȡtN_Z&]I9*`tK#%qLZ:y8ƻd2%zLfS2d
[n̈$[H:G&R5m]nFhTFp"I_%ˈi+a
eODzғVT7C>t&N=Ź(\:(o[k)Lk(g¼g.JS&(8YmLzTW"ٳWM+@jL12eųTp\A74*xK	o+hRpR)
ޡNp&LܞR܃)5qpI͗]zn<Mn|阗eM-N5\lroYvw}[*2q{m6|r4H}g
*NJUtapL>'qP+g{Bx	)*n)
,sۥӛ|M	|?tp~7
s7<p2qg]7Tsݨ{,08FF0\c*C	*NcZEn2faSю[*:Xۉ);3|I{*pWTn|#Ƞ3?h<ooӖC_:ZHA/QYRq]׶@ִxjSr-G9G~zWMTo7c)G	|CD+q)ge4|=Gѽq5!1dAL!u!Af/gf0+BN7 R'XdyF_dϑFPBhvɡSL|laryFjN:XVo?lK)u\Am֮;%nfBAB-4-u(6DKJN
ҭxD\ܸ\@V`Zn[p1Q]6{QiD&}Ђ2HerG]V/kwT8ePK*f  Q
  PK    A             7   org/bouncycastle/asn1/x509/V2TBSCertListGenerator.classWWHZiYl`7H`$q&(0
uEkĊVԤMwwZĀ
{MOQ^woNˇ|݇>
.ԴLszrG߱xJTIHPK;<Ч,	iE渮Ȇf䔚P`(ZFMk.4XaEΤ}1ҥ**CO'T-Mє5&MIi]Utc@.l61l
M*F[SfiC$ڢjkruA۵-
;Q]ssdg䨚Ɔ.ĕiüns7%kh,RdGOf(%F3F8[[tS
cOVM%o*Nӵ5
h6Br*5I볡T%Ȅ2RXGhmCv@Ӥ*NW8ښ֓щtV匑RrF;<l<RJ/=ajL)Qu.27FoPQ*f
-O:7<7ÊnE{D+W3*'J"x{.uP~AycRZEL+)
Qw)ND;0:J(Ktrh:ЈVaRI X򽎲.~Ze`IAHQlS3y?S)Csl*rP_nJXr(ѼHs)PghgY&(:;/`]v#E@6

8$ఀwS]^Gk+Ӻ'ˉ."UW#8#VJXJ
:ļ
5EBCyT2ƹ5.p:Rbrbr綖ց͘ZnݼXkK72UTM=X~y>pnUD!y^Ƌ"wTZ8HU2YgF{tcǧZ+nms-$++WM:j.DbZ:'W&F^TjʁsҷwҙUd}Y65ҮWvv]<\p%2WTduUZm3^Kk	[	qVB3*xx{	
x}%t3^	u$㙟AdЋ	%uHJ9p^B=&ya/%tAV0.^aH؎Q?F~f12|a(D܋ψ8pYi2|"q`xRě	A|J>ED܇of0*bqOE<×5o2|w'~|/[Bp8K?"SʘQ!uk*ևn<%Or.Rui͑#9RиF8Fxh^OLصyE\szҿFo8(&[.#K2^\W+J^1e˃p:hl<ïq5Or-eY+QSV^8Onl?|
r7lv
MF4/E]5"2/hI~O׏zm~
;Vp
bV
KX![?\rn=k //A
z[ݫzed|CABLho3+6Ͽ̛^0 &/6^
Iƃ칗=wӅ6Uv2E,wE>nOfL}
v@ͺ,%4_AqS	5r2my7):P̭b3
WV)pEԭx=xcgƩï
~R>7iވ>[AK
(1IiQ5qSA哴7` ;4RkNKUK`%"#v^g*^JL*}]-7MgQxd2~9ӣ"Se@9B]Cp;/rK6OG67Rx	?-
Yc3`f ce@8uRPm'=z Ϟ0 /P T<PK^u׀V  v  PK    A             :   org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.classWWGFa!A\.aUѨI@Ed9a}ߗFܗo!/?*jّD뫚zf?l/XRjy@Bm"͓.V7g
n`}$haib_QX´\wQf^qL\EZ'ݢhɃ}lvDM,׭ueDQe`?\	kGC3iy)xﱬ8b;aCE֖ifaiv8?#g-au3>1N{g(VB̎d56Df:6BN2 =mձiyQCtJUU1Z>/rVm^nV	몢tt~h8y+#e.g¬:E,
i6E 7Ό3HcuM3nD-.%f.ʨkZc4O{THk3©M.7!OK^[ɾҐgo#i`ABs`	Ƭ!WnkĭC)!IHǬ`kk72lQQ2bњF]NQo͓XF2qd\-deX.c2VQnw_;;%@mt
WVS)oE:lzGrU䌞&ЮĬ%(dXO[n.$ܢHWZ"m@9){;F9d;/r >=*6t;iq9:Lehxc2xS$8RmmUC^J呏ʹʫfIc&ezxKyg\+Qsb miu{qչtT-9q?ҹH-q/taPU\=*Oō,bثTlfqPqTqU4`@?$n~Qq9jy4E
 wn[pUvkY4CWф<z!zq$4L(X,J,x1#,e[𴂭x\6<.^s
vYxEG>V5;B^d
nSq(s
}hvd_Zh#Ԁ+ZӉhw4qhbD_G7xzg8`CGS}[ q^HH&I|.!摮Km߾Z]߾h<{,IS`X~
8ٯ>41I![=3t -EjHNLj_O;k, EևPċ&Sact&c%@o_n?;
	vf(5Ր^΁Kqe9/)qC},dIFFD?MR2pKy$.ce%5~MNXKH5SG¶$>M{g8OzzxAve}{Q0zCwe&	ϳ"Mx-)l'*yVY_㙻>BVԦ
u=I钒H.礷uܽb-Dc{;߹v_;3S؞iA$>Fr[W2].5_|<K4QWt=wCfj|h:Of9C$+
_ʚJxPK9    PK    A             )   org/bouncycastle/asn1/x509/Validity.classUkOQ=["/_h-U)["ZZQ)1ߖvmVnO_D)MQnKQjLw;n bAt)00"75#ZhK&-pk)S6ьbI˽&П2Z|Z5e*KFeceŔE%ȊkPt~q~Ypc㙑
YJdl,v\.M?/+HH4G%& -YJU-AS6EhNXr`T\L9H}mlwHΠ&fpg3Ekm-@;.:![-zF'AVЭGA
(8äs"Fg~Ķeӵw0-NXx$
9ll8sȧvP#U^?xSQ`ET2?jbz7%Ml7^
Ґ7~mUsA(*NaD>89){qCÙNDqDaLpC9\pLSs0d\?iH|W5
OfE~@&ɴc*$!g!}!"gD_!BtU
D:fk*V	!؎6pahn]_<r+,@kJn|
;^#p~|
kȄpg
kQ:0ԛM1=?0MxAǌq+<k!q	83Һm?00h@*u!^K+3vo1K˩Far=s0#PKjK?    PK    A             9   org/bouncycastle/asn1/x509/X509AttributeIdentifiers.classNApiZ&r҂" *e6SBɿDM| xt`&=s̙d
  E
.iЬAD4
ԏm2`6CԧtCO
#u1L3$N%dF	}lG)Φpn*ڎ-	mE8<h3kϚW
r;إe
uAvM`;[j;VJgVK*Ad"7ْgJFcE:tW鵝uiA#RYqAzjF	3ZfMsu&UmQO믉Vp`ifh:Zn[9XEGM1̪QMޱ`dl&#sek/a:~na"^ӵx,mg
eQ0K7zUHM! ap0LA!Hima0GK'#,REC£&}qbLx aՎF77myq\!/`X.f = .##Jǔ+Rڣ[i>ה*W:Ǖd~e.feǯێN1ِ/K}"MnMA:¤]% SAiV>#[~f7J!}3'0PKp    PK    A             9   org/bouncycastle/asn1/x509/X509CertificateStructure.classV[WU  K&m¥H6B
bU;?7_|ZRd ךa>{{I R\9	LoKHk3/$M|i;kiYnݟ%Ү"\S*4lor;ek-~<>JtYjT-S;e{ݑGJInGhY3fzcKОhKBٲYSѨ۟}-? 
:Q:
[5ϷDATeadڤ]6$dY)h֦Jfrr
	ע]^/N=0olX}hr"Iyb[°ג$F3uhdwSIwR嚄vfJ)Ku7d,㢌~ȸ$Ux?E'%%fC
'tJ_߫)KfIY[wjZÆm_A-ɇu$`FH"UqAs$fcNQyHo8uc
o7bN5yyFsԾe0DpgΐLB;5L|g
w+RG_#xW[xOAMH1taDA7Fy;@u=/}P0
:1pC1F%4PNc4p7a|)2i\JY|0paaa3LSytۗ=[`	7epChwD&)$O`E' avFkz!݀ʔ;-8RDaߑ]v?UػIp	I^z&[ECJQ{XQP|j!{xۃ=gX ?sm&ddR_Bydt6kx:Z-s!~j1hLah2hVȠqfl8FqȠf!nD 4Q0+0m^PK҇  w  PK    A             :   org/bouncycastle/asn1/x509/X509DefaultEntryConverter.classoSWƟ˿
PiQ$!PUj,mH0	5]6v٥
&"8eFKMHu ({vW [
tF=1#mvpG@d *\%m]Yl`)3HS}ôTz%hr4gzN_/J[377[`XUett2QϮFf=1T <wK]Ria:]&A^Vy	^2
?5L4o[r3=W|KuLn`oݚQ)ݰ	G@kښpˬ̺;JSiQ7vZ*ٜՋ+}ӱ2%pDiwzd5G'Zs7>VvhΔx>zS[!dp
)-HYޤC9R_o;A
(8_(8/|ࢂГ̝|f⹣gNYz?:U~blKGa?1-ouSsN@~cScGE4
#g0TRыnG0&U\f\'UuV1~$=&cqCW
acd¸4c.1z16	8cøI׆~_072Qs_O|L~ew7?23\Ov7`p9dOv{(
&ƛX
ʆ=G?W_ a)zuVwI2R[K-~| w1/tСRT+@hEsáPKw>a[D  ]  PK    A             .   org/bouncycastle/asn1/x509/X509Extension.classyXǿ#XWbi
`pDEI:;;,n!mMbkazgz4llsNLF@|}9 lƿTxBBR^AQaF&fM
-

)
m
[*\Mjv
TFY
*t(t*t)6P= z@ipʖTӖ6l%o1P5/`uR6(o%no_mܺ)-NE8HHHTf*R3HTdSgm"im[9ukm`1g'cXea'q˲.{<ؾ8Vo:nHӎ7bcqnڝt>t<w+S??25օ,-~m7ܫ	(D	<篊c96U\0sy{۝>b[!EعfGcy3G+;CsY! .4!7iʳv
m
<Ji6./CXN	;q7UY-^b
-9e&h ]3s(sAV;]3t
v9BK9yNv,͎ܳ{ǘer͙n'fGh#II{lh=v\GYB(JwY^Q0Xg^޵-3sv-[:=/g4G=W.V+.7;#/Ycm5Hc1=o+>xP
TNw
ؾэLRןȷ`d	2y{~nv|R{R7Fojs+Cӧ˙Yyz+':LC1dc0è
EK$ʬN=s:Y; MQ
?rky3B1y"sy"3GNfW<ܹ0f
l\h歂s󧇷H~bWX=7N_$Nz$,XzYXYX`&YnaIX,,,X|%dɳX22r+pgAm;>LxzKe	+؏W%p#^ux
k؋ח$F7-,Xfy+Xw.w,cy?˽,` ˇX>2|4},g8\a2ۋ ,qqS^3,`T/Cq*0IG/gGF/GzOg~O2rˋZvCE
Q
@{A{Z.o~AGiߣ׾S1ߠ&=Ǵ;{گ~T N'ב]%(!j¯'3xa<qWܵ:w䮝H'X'VKcO͇ygf(F5
xuоĄti	qS`c8y7L4>}kO=ɵA^[6>T^R"XOgӽp9~p
Z7v/	ĩu2bĥ;n/۸C
#'V=m
?	\X	[\q/pBs˅(B+.\!
J/W	Kx«+\-5_D
VF	ExW"5aC3K&\"R/p/S1}?PKjb_  p  PK    A             /   org/bouncycastle/asn1/x509/X509Extensions.classW	\02 bHbXXr@Y%v'0ɲ{`[k[{S[Ix-QC=llݝe̳o> l`!E(a"\ BBbV^"d`+)pǱCdIUEMƊZ߄*3tIIf'$m`Yr*\k7M&yIޒכ*\cMkU|V|V|֘|֘|TdS5kLkm0kMԚ֢hWjx;aO	0w$<QhnW	ŵ{aѼAk#J땺bmpPVaApP_-M*}:4.m>rQ	B^9xB_ФWUp֒&q'!
-7	+Ð~A֮PBaDO`@S0/P/EԨpBOWFM$G`@6yW3º'"[~{xE4R#G֩vU?d1XZ!\	A0[C	ticWSC"}oxFˍ&5a=^acK
ݴwwmr_2-_٧Ea
J9twU=#0b'b(M6d*QS(`q|Cfa8bð#O}Y/Sb$bc+c=M8$P\=dEO:D0-$	7!_GB8,OGgPTP~_kܼX
֧PC5A\F쏐#^eH߷	X%T]&<  z
Caϯ\s>v@a*I 7-vMQ1 .1X9{+5h_qm^G1Ė-_9e&7neܬn-+XT3lȎԮRl:(%)#,iJo(BJؑalP6>w0(,5N"d#RrEaDX-E"aD(Te"BJ0(@@ M! (u`Xx o ;Qwa3$Z[-*W݌D݁9%-N-jZ4TXrL-%Nwt7\`]r!ം$0y-!s8d:'CZ1'ScOiE%tnKz;4u,kmJzhKYK9~<2aI]$o1Y?5bt<ݺƦؔ4޹\;93I/9~okM	\уM
Y;Gے>`fllgtcuJv˕q-ә
t	j>	6l"L`+6;v			v\LCp	V6vK	%EXCհD~	A	CBTLH>j8+e=!%	£dWI	n5	׉>#AM	"4I!./Hn~&?̄~Dcg?'/	~EkeW~G{W	@	Dgo'?	Eo9fs,7X9f' X;?8p'$!XQQ|D`by8o ,M&w%2 'H ($EI8IsOy`1rf		r		.̂c_)|?M~};~.ox!烈&X ԕص@ԙ&la{,-lYX-¶YX[¶Z%Vkana;,lmea-j,luXn>C&q|Y.,<ˮ9IdarعuΧ|N|NA,=OL:9d@s	xEeiIgL]㌲(k@).`ҌHϲg ȈeT9`9'Nt!Q;bp+[f818ˮnsE|t٢I8㲣pu	6emӏjͰG~n9!	ӠyQgⳣs|_<"H` '<p(+:yΓF9`;"8Y;t22xҸI4
)4dGYK8X6Q<Q^+2۔X'T]:U^1b"Bmۨw%fѦFH=Mm}ze0V^!_J!g2(l|ysv{,Q)ǣ#Ʈ,E)K1,dao6V-ӫX83mޑI8ޣj`{[Ni+f׷ !.ц(#pϊ@lqM0/S'a;ylo2co.	puX_O+_twQvI8
S%=6~02eͷKSs\].هI&--*M
mkic{V"c;B9IEE֒cA&?7ٰs-:O&cA7ʸ[Q;
KˋʊxÎuq'I}<
m+dv$dgMv.3.r7p:.۹\rrYr)E.or&s*s#䣜c8ur'ur+'%:8'e:'[tIN6N6StiN*tN*u~N.8١99YqRsZ'sI'#{Z:PK r    PK    A             8   org/bouncycastle/asn1/x509/X509ExtensionsGenerator.classU[sF" \J	C(%\ZPhB\Hq0&`יLLΏbzVVHOj͜=w7oMlkԠk8ᜂ3	URfr3%֪
q<G%x-TNԌw'r'Ww|V}O0ǫ?
&xA{_qjb
 B3?8+Ъ*H:NMPlYo2{60!2j.2w%6dH#G\yT2ՆRqqJ]&98U7<{furսk%x!Lc؃$pvJ<Ƒ[<))k
`ֳ*I~'m*&U|₊U\T1⒊OT|"bZx6
Fݝ'pvtYXvMJ7q*5~xx:{K˥J^VG
cR'8211yt3O*vg=ZvLˎ n`7qR㦁3e3|!/
rd
i|%]3p+U)ŷ:LHvĺ9)HI,R<Ց42R<1G:6t;f9+Oo%kpPz7O`l
nC}TgQAnS-lH[z<iR|wF3do_GHK}M&o^hcF̟7Q0D-< t4t}W/ehu#'&3ݒQ5QaڸVk܂2dL7M*(21M:iߣNĘ|$cd0-TPKYך    PK    A             )   org/bouncycastle/asn1/x509/X509Name.classY`?ݦ_i!R-CJ[ ڦCkڤmh$EuC;u: hq:tN{!9%-{<s"c,pm)F/38/7?Hn -]X+6Al:SLĵ700XFw^xb-m\>sre=kᬹEsgY8wٳg͡ga0L}s1Ț3pVaX)b0x1v9ii+LӖn>\Szn"YMVSdZhԊd5E 9kQ1Aq^ј\xј\~Q[CP|)jg^뫨m(+XY]AX(`K$ |&Uj7Th(y7TjWyW3QSQ-UPs+nn.CWñP'qFsM0
MhkY[S
,UM5_iU6r_ÚJ
/ugNV'jWF"m`v{Gc=yՊ4lWVbueOn:o5һ§mȺ28>P4,*J'3ʤ4o{/ǣƮx09͍4n6sC|8_5HWVWݘյu

MPV]X][Q_^[__oJՑXܟ" \fEٜH
s+4ڊ_}rA^#+R[_]JagN]EeUվ溚zή;[#ᠯT-GkyW4鶑Sm
z	#W]>G]`8Nj7.6aeI XAa5Vg'jDw᜹@vR{@({חˣ[Ɲh"1|Ft!<a}F6/7q{<ꓰ&<h?s١VsjUlCMv\ ꏖxS	koiț67D5\=#eIa^z0((ʌ.](mG
;'cA-]~X	P^;4e5G#&JQ?ފE6x(KZX2	XB. D˓*L1];f0@=5Bnv?Vu#-u6l*ڃJT
m&Fonƙ(YC*+җ)7uNP[])ة]X,׌d=؂%Eӧ<48."HXLJS^'oZLǞxzG]ZCtCaW v=XSOR[p;ővG42vL*n!*0pEBXV9inGW,̍\m\L{1"#OD[
5mo,<7GZJ(̲w}Ha4­igW#	GzDF	%i秗Ŝ )#flkvux_͞]p(y@eI~ɵasF!5|f(H{ǰ=i.tˇhxMHkQ"+X܆%҅~a!yoj+]F0)}vkj'eS{ٓlBVFg22uvdE-yVXpΉtXw`2db2XX gↂdtvJ:aKwE&՘'XWT#o:ȰQVQd2?%"nf,Hh+0R7u0b.LNDdZJL*g
gh	%giUs
jjT9&	,`p\&`\("3	)%-# _,f#`B,PbK\,`rT
ZuA@+4

h* $M@X@Dp	[|Am(Nw	[nxLS	8.%c?+Gg		8!#'[J^+GS_
<s
(*M^SuxC7o)]V
|_?TGӲE+_lW9<cr/A<Qb#xA5>of\Γ=CIv☐]c!흞[O?N?됿cyi;	7i伲۵{yGv&gx
(yaVH?daytȵiY7Af䍴ë.G7팑5mt\ әÌ4i\	StӺ XfO!9G>!;ݺf,bF2<uV5g3귵,MU<Yrjg9E[[p'H	q#]f%0B(Yo&>0jHűg>t2/oh)Z>Og(tgγY9OF|SοaT>SN>]z9#VekU
TT8Dp	۩BA^		e7
 A1VaBEK	.&(%(#XE%`5Zu6l"
 A3AA+A BI#<Ip'?%oTݨ0F	@0UrT!x0Va
_;W=0jUI/U>½[UnSa_ıv;%T7.*\Qiv
Tx`?_4Aj{UQC*<p{X	I!}$Ck<NWITǞV?
wCD{	<CpDkس*=l@4c/v<mc"72N
	^!xN-oA&w".|]G?!)~N_!-~O?%0]AOkbncAf?Icc-D[	(c	LVne'H9NI|pzC|AQ[BpAgTS[kcu,;s	
mlOp>4|Q>`*<bQGb|m̱մ:~A.t	."#I"p&("X@`,kb
"l;>gg`B&>F"uLc4;&_qj*gu8! $
菓a
0
a0tlˠ^e^Jb\/
\R,EzYT/F/CN[czJ//ˈ,3(IqLl
26,/% K~kc,ɵ9EX,n>iGr19؎] \َX߾lzxQt?Ȗ:g4!?BI='s]a;·X~:Y]VdE$5Y`$._<˿0.ʻg}bÜ퇿;}Wz5e/᫝S({Ti}wA]i=(Nnșin^ߍ3JԂ\N8뉣~\Eզa|UX{J6?8eA"0)l¢
p
*O[NA@a
k9֘SX b!iY 
kDNuS'Ҕv2PR)bO41.g]wrc|rhl78͔+i]%fY.8WYؐ=?Ry
YgCUAK(Lf`9i:ֵF7 E7~®w.'u	$pT
uƥ]io:yQ~e-X8ۻƋ^W&͸?xΠǟA(s :	͟BvzyE/}mAuY~-Y	YO?p/pb&'ʹGuɉ8LM2?ͤ颓ѨI45ٓohf8W-tMx7Uͦq:ֹލGWЃeU-iE#tFm`:$Ъ.0v6=db9G`ǻi"h{2-E`IVb1[=M`\Ds괌}ubT,G^qdܽ`5+XO
ݠ{K@;֙bA$m^Jb4>ƾL=۝wN0n1hй7q)_|ɨY9N39_͓(J~ǐ>	̾q' >f4{~uM,ޡӌbhu`-oRHA=t$BU<_*gxKdՄzX%QMwa]6 8f!V4͑9r
)\c$'@a(Ac6md֜
]S	͐9%`EE1`QY(Z
s%L$>@pcjg܏ u9cM	?lEc
ORR7vzvVBS뱺T۫%MJ|Eݕb7yL`"4n}ɥԵViZ2h7UhΝn)r
膧ए~Ҥk_'SImWN9Ѷ˩c:wZfW4-#7L+C{MG<m9o$\ɂqg{ғpWm>TU74[+%sƃ
ZԼdkwu}Ϗ@AIEh3`LLm*'amx	({toj^^:=v=7~_nɸKWJ	:jc&-ĭ`;Fa
V=RASqbxl̖aյAbIjs937!3-o"T5}¶RXpODF)X7iʿNq/+C^~xidC,'k;rf^xʵIl|^)a.Y"556'{J-ݢk.I>I7UOn|sR5
(0?o.>=z)^)Cll[yܡ[1(Hf̔
5Y~X!9pEe#K0ƙ#uOC.Felk3Qwg=&ĕ=qi
X9n+S,`<?LMl`|3(yy??JZ	]f!X1hϿ=b|sAPb'sn¸}̇ad3|`?/Ag)A
2JPi_G~<\Z|akO|&~A XvHR7t2QQLvSI\N^`dߤV`3o5*[rv3r3%s?ɯ-S))9,<9,K|3$\JhSC<$FF8<2]nrSt:wOֹsBnJ(n]QhLIFhcrn~u)밷[[t(#0PtlRu=Im'g\!F zEzX/RDi{O:;ɄIpeSec=d-nRՕK$fsX1w(F^aPI4uxz;-[=0W_EfB;F\@;\.t-/O!F0rrQ
b k?ȅRf}|+g8	*F1SO54nvZ*;>R!RZ8^0 >7,RK~ϒnӧ}
__~Qg,_?Xc&a^!I@#5b$1i!IF&KZS652IvdKH$
+ɕ'KH$5ɒU#%٠s$	i$:%iֈE5b^#$k5%i҈*IF&Ho;;{Uyc//=7<˗^0ߨ
`reIֆVe*U|_˽9>ϦxUT5Jvuc$hgs
ⷳiB\lro-v vVd3H]d+, Wم&rDlA64lAZ Mv6HgvklAlAtlt|4ڙK#UJOUJRURTT^oURPheꢕV.Zheꢕzl1n 2 uAjRJq)
R`|[ p
 +
rA
 
 hdh /7 
 
rAkWPKy  >  PK    A             7   org/bouncycastle/asn1/x509/X509NameEntryConverter.classRn@=Ic0#胇,L$X@RSER"U*S33Ɠ('G!C*^;s}ιs̯?~x-B"*oa6d?(!5$P
SJ烶ӈG'@+j̉JJ\xtȒ^.#+ќ'c)3_~LTjdwNyZ[I'fbd8YL6탽iZM{Fj^xǺ-^zT8=-SogpǂcayU<q˘q[7d&%sZc|LA	SncAXX66lÚe;fdu7+r5]L&Oo}4j^5sZԢK.X5ũ\>³υ ?PKt  a  PK    A             2   org/bouncycastle/asn1/x509/X509NameTokenizer.classmRNQ]32Z(RZPSPƄ->xZPM;%ț?!//}-&~3yX{o9?~0i%s/\<0ysVΞe`1*bQXTPY{6
%TXV&C`op3ϭ8&2)j.,CY~eeEh~^XY{kM0\(etbedxQss<9i>#x_7toYyۅo7G؅<_4\?+jPJXyV)R5耦ÏC`:<ph#NJO^D0 ኄ}a\[݈K0$.AO!UXXn}3y~7%u"KKR
T\&
e#>=OV5+TM5jHL#Q
4
Uu#ZȞ3bp#Ҧhh&cEiGc_0اq0i-Pix]Do'5~9n+cմ2̒T4%H7'ԐA_6RT!%{O&9ɪĆC*#;T/[#RsT&=>VzAo1:`j1ܑWPKVt  <  PK    A             6   org/bouncycastle/asn1/x509/X509ObjectIdentifiers.classSG_@5`L0ew!劋4#lffUs}GU*STc!Bi^ϲDA?K$VII,vIwHS]t{%'ER-U$%$KJJJIJK) &ٖnKv0Rm.A1t]m)N&*V)Φz T*[E4jHSë:mj9$19[FYyu>Qa;О^,ڼ0+ך`yNgW[^
ŊkeA0n^NPͫ eTܠ
ܸx>e
G+f-5%gEAq\2ΜoN܀vԄYWkSxr3*t<w4s;/h}e9vqsRayzV[e@	ڀ*{	:a'S+/:y赼P̩J;rsR].*5ͮ]0]AMJ;]-p,Y*.0_@b/ZT
db 34z*+o>ޓ8ĸ/?%|VbBm	\mU~?pٞs.peB.şW⃼/30Zbs]О|Z6Ѿ:_G蠠cBⴌs
s7z}Wjt=-bM1z !`'0v#(0	L`8 #Q=L]Oq`
x@x p83S3sYyzR@Yzx	xYЪ!//_NEZ/ԌsԌk51z!3Fw6G5:jtF'Nct!;7:`t>#F"A?~ۃ,QN3_2+ӹvܫp7E3#
\m侀ܗpȽ.rom;0Uaж:_i*_k:k[v.b\pez^*ӥZ~Q"loD[h֬Ïިå2-D.2}^>a>{e6APK~=j|    PK
      A             %   org/bouncycastle/asn1/x509/qualified/PK    A             8   org/bouncycastle/asn1/x509/qualified/BiometricData.classV[SVQ%mӐc
-h1LӋr&}tJg$e䡿vW`RM{.vt@ .rM><˓Ke:whUKM{pmFm
t
VZd&mgMg7Ҭs4K7d-o+X'|V7ã)qvivrD ȫJtxq*@˦T1,߼y:[S-wLlY1mRgN&tl[s]9#嬡dbah픶1 vV-%^JU^99uo$o${ŧV$ithͳXfn1x2l)hM5oΝnf*d1:8	m:$tJ,K»ޓ-ኄ%|@}>v#AK/2	r;J
}vn]WKg
aӗ8ɴp\@ŭ"{-kcX!n!O\{?ߺ`,|	j%vT^]T ~u3u"WU^5/D%^~KfU|KWЊ
>z-Q@A;b
1!24b1 	Ab1⾌|bQu̱x(fd|^,X¼><#Ȉ`	0kzzݳS>YC^	Gӷ%8R Ѩj:2ėryW#o1~-Z&#/~}O8c>i }?r#@ۗH`<1,O~<*UXoL# A+S{!
@
DX&t}0w^7uFT@xFj~ql'K>Zn܅fVo+^#ڏJDLl=+x*>+n'fuǎѓ\wǬEJo-d}RY?1(QPK=Mr  <  PK    A             B   org/bouncycastle/asn1/x509/qualified/ETSIQCObjectIdentifiers.class[SPױ؆ZT1iK[f:
aƧNaBM?RftFg(ǳq÷V{?;v44Ч_ÀA
i
w40,2es+s 
A!A)<e`r͙U,G"XgWftnSoıt8}ZuxKez'-凃G{ϐ$:Kx[xvW}n:W2ђ_&yf鶌#n^e4k[80}7gl_~4mUc:Tf;jk?	<H!Rߧ2׃p[eW:Q,0F'L&	Sia0Gb
#x܋O: d	9BL(ỊDw<dHII/(mt:P'B
u6ԙPBS*o<m1s
_7_Q>=W|Yk>zMnM*x_PK  6  PK    A             >   org/bouncycastle/asn1/x509/qualified/Iso4217CurrencyCode.classT]WU7I3a21)Xiuh	0
Ҕ~Q	`$&}G>kQY/>G/&6vsg1?<0{1p.Ը6gaDRwpǿ0+.n{e~die}1JO¶nV-ߩ16x7yb*57#n1۴
fgPFosCSwMnZ6~afm_amA]հW`PW&}S3kfg\ɯ{)^̪KѣY-۪+va|Ǐ,R*&:{Mur5hx3ә|^(ꛎ<$&G\ڗVh䣺m|k=ET^U7`^b8:%sLMe03&?0(ᔄޕ0"ጄޓ>Åh`j̐Tu@ƈ~l::-;l0)t|{Ȉ+P$
Q0$'Hb
N"#ަ cVYWe!'#k2ҘpS@^˘n˘<7p~Z)Mu~d}`ZE( }^8~	pDJ!!
($>"
YkCcQ'Ĵw=!7,ӿ+gZX;;Ţpʻ'bax0YT@B9hj-
Zdj'-? 6v#]~-SmBt2Ӂ
"mCew?@bn
I_ Qmʪ#1H+R~<v]+0F\0b*~DhP@w,3t_PK2Z  $  PK    A             8   org/bouncycastle/asn1/x509/qualified/MonetaryValue.classTRA=KEDA.J K{C`XTqIƸBTYeٳTst__Ŧ o`[.5jftC(%ji3gX<\&Ì-i0[d֢r	ģP	ǣ4#Hm첸%5
TwMYzJ
4hn6ءJ5`f?kY+T-kŭ@Ȉ	m'ŶI.
K2xc
E
)b9fwU欕Ы՘ñ)u?7:K9:(sLu"jni#g
ɋi"/ID"
82 ro bf$li֬꒞8NP绦E;=TpglB?[Qf#9SV͗;v~]aRoAh/ʨA7"zd!pSōK]ʸ>x,Ox2yP-&͈6r3%cLp3#$tbY	]sтuh8Ͻ~k~7MoPūUۋZTV@(=V~ޘrpc6Hsf)r(yb5~FT^`<?`#`˺wizn}\Js9cXlt[VOX<vҵsMNCS+-9q{ Uc)燝b_P=qVoPKy  N  PK    A             6   org/bouncycastle/asn1/x509/qualified/QCStatement.classU]SP=!P@P
"mZ0o
,)?Qg8Q|aswܳgޤ|`ǻ0wjuCUqM
)K5bH--fɉZmk&lӥa2>E3 jRwU%m	%djAmϲafrSY7FsLMY	MQSư2}32bf\]OoUk&o;b	Iks38ܼAstqФV^\	DK2hCem_
a-ɢEvbNueQKۺj4h$Y@[Z1E8)	Uox#PM%pY=\?o`Y]7RQSTkx^tˍ&8W*RQf=OLTHQha7wSWm< $IHB5<<f@B
ncnFDt	7"cTL7DtHzcq8}iHKi@nbB7zȂJ0^-:pV>;#u|P/2,CdԚX	a<=,1(!pfhaMvR l?:gDϛpqzG2	@e
l'oZCt,}$A*xѱVly1nctX8]-ot PKv}    PK    A             E   org/bouncycastle/asn1/x509/qualified/RFC3739QCObjectIdentifiers.classQ]KA=W]Mˬ,h,B>X)Jdlms]EV=GE3C5瞹!TB@@yplf{pՙqKlvgy!FO_h~TƉGg
޴rJe;c)zqLINMymn\s<3W,]h_$LH0Eج}2(Wqsm(cCD0#EZ(Di-
$Hvq?=1_[@"$ꃯ;PK2L  M  PK    A             ?   org/bouncycastle/asn1/x509/qualified/SemanticsInformation.classV]SU~IXXRJQTa	M~Q6F~tIaqK7xg,Ap_8SY %D2y9=9?ue,C@e<9A5#ͣe7blVn5\'5\ri8y[	GAZuWs*3ms݌Uru+zh%S`\Gw
JE1\c>9sn%LgiEr\)4.a/qiIKо%4u̘&/f)1+é}ЮCjE*L[D{fnn_qq,;j5~ւ}X팧Ci+gyMG`g2j[t'=?Y0>.8X>Y;SgJ X2'kcs"	pZB3:%)Ky	ޒ1^+Wjl!uD=ͺaFĥڃCG{WyD@1w}b/v
N\#]z.:8j#oZrM=*U`J7HQh[k$~Cl(
企RN6pgD;T &(8E1K*xcHA,u 6
7ȸՊ>ⶌ>dd{2qW1HP1%Cø22)t'B|Jm;Od{sߍ~`D?ϛQ4ү
)0,z=$Тĺs&U_g`0H)Ca⢐}
5V'u)ڷ7*/(0L6ckhb;&A+HD!H[?yg̊U$o7b^Szn$$$$^Bp#0bo4}#?(@cA#3ZbRxث>)ǲCHL IøcO(f}a[Dı51%*C-υ*L;hqtķ͉y:i*^~[R$?BK'QotjT1-hۛ? N?PK򺈘F  
  PK    A             >   org/bouncycastle/asn1/x509/qualified/TypeOfBiometricData.classT]WU"N)րF2E[[J[Bl!E_\dwbT_DhysϽq;+XB:	H f{l麩nX\en!S|)' X-KV.VhN~TSyE	f$u&k5JJGePs[	XjW`l]>n u S7|J~5R|AZ&e]רpu] *jXץ%+7Y.Lg
.ekx#!OsΫ(^
TkM޺zy.]nnB\bMmH=QR׏uMꘛIH	\hqt*lR:uf;i 5o`H_}DH˻<#4/oܦH{L}>g0~bj8!kس'jOy9(B#8kD8b]8`}^MYHe󲅳fl\11&,mi\e2;&]cE\6,k
zr^dY-R$5B&i;6g)B*РNȒɿ<	{qgp~[{WF6ɧyޜlFWz:/|F؅X"6G5ޠdI}^g
q0@G.rgϡotÀ-nƙj(8$ɲ#ZΌ<ޟjh3Hl3G/NAqLa2WZPK&EX    PK
      A                 org/bouncycastle/asn1/x509/sigi/PK    A             5   org/bouncycastle/asn1/x509/sigi/NameOrPseudonym.classV[WUNHBiKh0;Q%VMm6$cf^	ҵ$ֽ	dZ9go{f`5
8+
^0Lù)p~ZKu=t3neMGĵ@+2,Pxe'UbƷZI骖1ԭAuְ)eo0)NfB!;3)-i{EmCq8T/M9a9gQŲYx1Y\2GSnF*'T҆:o\655I]Y݊iǰL2(S\TtH%t[:FJ֊AbB+=[Y֥(3JZSbԌS@WelN9r	P#i%44{-
U4Ab˶a84(4U%/ᜄ%\pQޔ)!$KBK.\M^pkG3v|-|/~Gx(Hz$_=Ơ'\yP8%dUcV)=WJ&"EV}+Vy?^XC;Qq['Tkѓ.xWe0
	u2P/C5 ^7d2HMfܒ;}6ߓq
s4bK~D}G?b~C{3|2
͏1|8CU?E Tab=k9Zт.C`^x(TZw
N|+/WإXQ~f[l)c$vѷ<oJk9|IHI%/kiUM~Dyh+yJd@A*fN$'tNdlᑛ3BJs(ȮgZ KW
Ft%+=ğhox$LH+#bUN%dM>W"y8TEKH$/eu̸ӴrK_uݭz݄Y$>Zyd^mE::=~~OdAx^M"$p^ KYĩȔy!PKyy  
  PK    A             2   org/bouncycastle/asn1/x509/sigi/PersonalData.classWWW&#"UkU ZQӲ)
]d-n[.v9xNIlsNk
=GϱM,VΙo޻{w}/o3ފ++q(t{L4qa6UW\VNEݧeC9rGF~?6l(]j!qJ5s(aBLhÆLQ94GiTuaC5<+P_X('AhҧɾpLZR%Ơ9Le-BFpw05eTљ)YPvU/2SvB>-;5Y8[0/$V=S5y.8̋4]U3DUs&JHN83U/͔MWƍ8Cp0&|r[=-nÚ2H|TJQTVܶP=M*	yBQNF/U
m=aSn#jOEvd7tcd:wcNav;jȬD*3.gX
Όco+P8V8[|,슠3ɂz$V#vyyc<<yH<x4hⱅG3[w-VQq@HuӝI֍9[rg2rw-HZHx8w#SnUYCLnU Sa2WȮa^kS˖7ȓaC6rS~גH.6O7i0usX-ZM"Om`CM]x.q#(cWp/Xp'?zrGm掜XF-']m"Jq;p
"}"܉"b+DE1"+b#DTᰈZw1~"DQ6@pL
#"*!3fcg08^T'd1e0q1xN<%`/3xx\c$gxZA,^6! BA?֯7dnyl:ԑ~ߣ,4*`97ߔvM7Tݜ([Ni+<SJk
eqx4wLqzcx0(^UEfB~8|GXBBR9*
TDߥ>l%-ȑ&⭤;}-5o8\WH0~ťۇğ:zi=Ǥ« fqvtjqHj\,O͔GFSJuaz1bBϳῒNF7 :*xV\Vj
؊d%Rxzob	hRѓjHb""Zs+*Y$3Iu5fQM˩s)u
ʢ>RWpdJ:)N<T_,8xˋcxm"w9i〷0}^&L͡:YZ~>%9MMZb<^ǳYB3(>ԬPK
"  
  PK    A             ;   org/bouncycastle/asn1/x509/sigi/SigIObjectIdentifiers.class_OPƟp=!sLP@7nh!!zHUsJs`XI |(y5y~O[ 89JeI'SF󈁻vn2~2@1Fk?kZjC%^"CWfy #u#Mgo OWFZ#PɃwIHPt|g0lFqGʿEG$u_-@D1shG/Ã%Z1lv]fi,Um12HIHI*$K$3X3<'yAFNAU	u4Ge4\3_|޸7@t}A,h3mMEöǆ_;x PKԄ    PK
      A                org/bouncycastle/asn1/x9/PK    A             1   org/bouncycastle/asn1/x9/DHDomainParameters.classVSWml,(jZmkX@}-MH61Ӿؙ+VؙMm9
Af>fօD\.lraH'Fj#1Q8_nv-:m +
}aOJOkFHkZGΠQz3<:1&՘fjpjf D"y<R'R U%-k
H:5;L;yNӦM3"F!/xRj1$asjF
DU#q)YѨQHSF!-4
LSfR7"Ci=֒Yj^鑠aj6Z洩G#-TF)`o<	Fh!̨PS#QjK:	fS==CșRLw@	PjD<O(gxI=z,.3^8,rf{D'DtC{hO{DUN[]cL'Yg-F'2z˭|w}.Kiv3kWzpr)шA_Whaf}zY3nVY^*=RCOuVΪ]Up_7-=j6
xWu8x2[H2Z0$c7LLq(	]p$؊a0"
xIN؂Q2qRF3guLALtCNxgdbY&瘼Ј\`rɋL^bDVCHx!	*KL.3K,+3p
9&I	$$%aG2	у=`DRFoJMS2&mGe7z8o$9|ͩe4N!+Z ިXGlsvE8I;	r$<fH_'yhm%sFRo.ߨo,ung)M8o/-@GWkqp	ZkJ}3KxZϒӖ%;-%OPv5AĀg|&
quē|hڝѷ[aPoX0r{~@3pRٞ[v}\xURkoN}7Ѭ-{h'
d;
k'0*∈fH|m Γզs4KmZPJv;^WcK>{GEw~;StdBM1;Dc·j4f9<m,q.ΎyA]R8Ɠqp"z7k^PK\"Y  
  PK    A             *   org/bouncycastle/asn1/x9/DHPublicKey.classTkOA=C)ۖB)"<e+VSmD@HͺlvKO_`-/;ByM쇻wΜ{;g x˃@	ܲ2v8i2c[-se؏.7txz!es8&f5+5{<C+	+osK$Z)[
նY $-=hՑij:7rzaG=UF":ej[Sm:aK_,fZ1;;~_4ek39=,mjq&kǜpcQߑ){Q3vcٙQV&v	:%Ws3:zfOnwEϣ{gfE%ыwDh,
b3GC/rxrnkY亮k52Μ46<}Tݜєэ7ex0(Ç!WEpcXF+FDvCQ2A"> C/&|[>a\"wD+}n"<u)7m<SA?&aEZuDOwC,@Eq(oL|O><W(߇Pe,TЛ/Y\GJ	%LSV2fT<膫9@iNi^z2c?&L)z\
*h:2WȄ.?+c*,cQSޣ|T	k0܂QPK?r    PK    A             0   org/bouncycastle/asn1/x9/DHValidationParms.classTSW=7(5@Ą
RX+*QP4fgƱO)3􏪽w$FΞ{y 0gq苣_A"]X{𼲟ܒI
F5)hf2M'n;Q0 dMKϔɚ󓼕cQHRpҖ~ޫNsiSZBT(RkKsg+mWWNSp*Uǳk1Q\s[DkhʜyӹouFILΘ 3ұhy5[Zc	 5sZ`[W0藹{l;*qܜZŠ*ΨR1⬊L`yF#U~Q|xXzSae,[b˕J{Cd=^iCf7_^-Y릪eHO ~ZZN>覤%.q:/@z7!¶>1ĴAՖY'<&t|:Pu\eޥuhapzӫ:N"pH"nq5F1s,jHf9aY84b÷Z,[Җd*Ml5QාK)X'i_AFo\r= J;`7DjH=Q9O)iǗ!Cf
0Di(@Apfd_1+
#CHU)d⎴.1>.?w>T{.u@$:Oa2xVv
 x3L	ǧ1^b5PKPFd5j    PK    A             /   org/bouncycastle/asn1/x9/DomainParameters.classVkSg~^lHQ.Um%,ĠZ*
bi%ٮ\6fogJg*2iR[{28-\=9g/AQD@cIe;i-bMRFgucIolԞ6,9#4&#9-׬w$tZH:sA Lb9*=%Ę6H2=%w:.3cVTͼwN<FRuWjnQ;
ZJ8?ΪqSijjg<Zl_'M8YԲIJun}r4-;f|ȢlYK:~VvB9Wsx!+a'i.ձ	$uƦ綕)ZLM)OgZYC9ej)f9Z6Wq"M
7F\xH tloR'τK-aIh_	/JxIA	4)2U91J^7l7kNll%FKpBس[Kqhf-Ц޾k#=
ι9cesKT+LL*]eO'R{3r/W*ﺪZOxc>G1%y0k*9K+w˼,wetL؊S2v1t0(pZF'2d؉ka,#3lрs2-8/cхWXa͸$FFЇk^e!Bo2^v`axfǙ|1LH(Ơ3
$0`09I/_?ᨉ[j:Whu
Vs]+T/PZ§KrÔ1҃jҀcCPyye
+R">'a Ur2dNYćOPTc"u,V`UT"<]r[hrc=
I!2?5OV$.;	Rռ~P?/f6pS50pd}<t-k%|b#ݵ/b{c"1oEb|2ᨯNAv)r{pY	GMxuanWqWG8 )Jj9G	|~tT~޲l+H1vdMk>c1'T::R[qя5SHI^+
.N
s^rQ4klf|3C
zy#?[U[BPK  {  PK    A             0   org/bouncycastle/asn1/x9/ECNamedCurveTable.classU[WUpi-z$؂4!&:Ith2	z/@k_.fL		.X.}߹M~_ d	{CN,aV,zE7m	=1ljln#ccq	]NU#1F]+,FF}n6(/qӛ=-AEi2u\؎{MU-=WҷijY3K|~E/MCY2̒~gnei}(jQզnZ%5_FAe]jf\flxƲSp{fj:fgy=$o*>֞^vuժ|6ǚ+Uԙ&6śFV3\9Ԟ\j6lt?lN9B9B>nim9D^?>Ҥ;/Tf-bFv<[-{8*mJZ42B7L3-y5遭W&_ƃ2xH2d<.	O8*)OxFƳ2Q_[

ZGv'GWEZSݔp(mƏ
n_&v!rc(q޹rTeR+yG!Up
Al'N*8 &t`RxQAts>
N)EtHlaFap.a0%Y "L0%.p!ˁ(QDeJUeJ)*STLQl'b<O87Rn)qęgJ)qę2 K0/K0/Hwag8Hؗ7kksڪQ :!Pz;vߛBj'iz7P]^@M؍?#c4?r3NI<-
}d}J>2[zeury~痡ODo`	 W(
pA_[˛{ ;KrGt=eoWϐBnM-
e;P@/9JI 	 T6;O_sROM}#G|Tm1F&L9KwtR?ͪۼ6Mmn6ps̓t#^~WnѱZ.w PK!u  R  PK    A             .   org/bouncycastle/asn1/x9/KeySpecificInfo.classNAƿҲX"`maA_jHHXCv;v)G-j"2nKn2g|眙m
1t'OUU.UG0h[WkBOIKؼ)(q[FˬKlfE«t\AK?2p!j,}d[5YUZrӉY$+gQ2/(1wu3s1}u$.fQ~T)v]t˪Sqs55k5h!a!u3 e"G-Pʖ(M+z=zYHڕI/x & [gQr.
-Z2\
R~A~_ue8yAa
K;Ìnᦎ.0Lä
0CÝ0bWjHG0Tב`E)eYaa颛2zO^0zEDFF0U2+1GqX)b;g,~5`xHc]zK?;,T',0a=Y1>b˽@^lC˓TO1v{MPKm]Y    PK    A             (   org/bouncycastle/asn1/x9/OtherInfo.classUmSW~n,(Pm͆JiAlesa7&_'~řBlЙ&1{yyO !E=J琖d$_l˝#2焛*-r%H.CSv5lS0($)>MªQt}crZ҂cb]3raHŦGS#Qv|"i7Ep-fkl]uĆSm(y0JTb><M'kl:eckN4.U-mK'e5|cUZԑ;dF}iq[3	Y LelPAW܇Xp@J'vYjڴ\s81)1D[, nӢ
;@5lQ-$ř_G8m
{uأYy&yiN6Yw Ww,Xspc\tK~	8ZEU|MŠ$ 
LETэ^*ĤnRE;tAGBTсiI.w"+H!|+5ØU0%A$`
&0<~TZpU菱d3ԝv
QX
&̛NY=(D0C
n{ztR_U?:CDv _`l!W"P+~[bX^'=Xt<r<}>e6OsM={ȃ QN-khcp*@N\fK\Ԧ^]:5ZלT|J?P[1fK`"BiR{̗0Up縧`^%CPKh7  T  PK    A             /   org/bouncycastle/asn1/x9/ValidationParams.classVmsU~.!YB7%+iMh4*1/X(o\n'BV?J=gd{}93 sxׇa!Rvd%*]rByk%0JY<D.nx#ѝ/x5LtΥb*I CU;y3$#z,ϐN#g(LUG'vkߕg8KL׷8'JU1mݪ	RY2/pyW'-6i˒n-UڞYv̒-pK:6R5*RH^u,ԫlr)12Y`?+M
V
j#)voCD
E{s'fQd(mc8%v{hNeDY/+8Wࢂ\Y;A{h
xk2] )=9g3IO.ttA2e݋"|P*yK5<@L5UЀJ[ WG;>USz6}O #)q6/9#[ab[	oL_')lOUבT1*q4Wqoq4"UL⚊	q]]WnvcXE3,1e~qaÏVV2~D!1'w?CW˥"Ʋ^x$xKUL6LM`Tx?LYlS0DpI
~Eb_&9 }v	Ui+l`4ױ?0LnsX.ր|-#
|~:z? 
U,3ڱN7J>ƨ4zuUCӬ\Nquuyn
pA<nki?c<`ܫ2i3Msi1PK
k2  6	  PK    A             0   org/bouncycastle/asn1/x9/X962NamedCurves$1.classToF\1ހ1׎)>;cMZ¤IhO2{ݎW/4QӞHC%-{>>wpBUqABWqUŇF1[Er[	My1qqlqf0Zion9Nmiy̓-i3pױ-޶|Cڤcёtl!?/2-Q2*QmlN&z?3h"e8֛]LBvCp8^d,d3HPdvS#{-Tٶײ(<P4afj7X~>"I٫?Cass{4K
9,F
Az"/yb/}GߵhEBkm,MS!+o᧢dhݙwAj|uPƦLrsWdP@>PO|3+B
5?=ڱHfyplQ;MƃS֩l#!tmZ55yZ=ݔty}-?%LOa~ve٧:.B:a]}pG0u\qV	KpU|UPa
_kGmh0pOCW0\
pt+xF%̺c2
qBi4E0<+435>T(yg@s|&f5'
[&ެawfUl,ڪBZui~*`k=in4_>v˗ݔd|F25AÅ PK    PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$10.classTmOP~
R&*S6
mw12fFI(D"f<=<<7m
pl,F
ʒ")V
p4CIv8nRkjkVk͠(U\Ceì4R5ݕmlB*5"[ȪʲdL)Wjh$iXDt[fLWcyI@Iz{G>Nҋ=?~;^=	#4`Ǎhۧށ'yɮh7+A7ҴF
}?׽8i_N[lhRP*h✞~OV?o"qA
g־AXL,XL`J_u}瞕hY(V:Z^_%Q3h,;+\NW7}ba3H(;aZo
MY[{~	<q-uG<*J)w!sA%uj4y(fapGCLġ nӗ~VӋ_p~䴼8cJ
E>MН{xom t
MJcs	
[2h>7@]|vI1%Y Kc`Y-bic~٭BzZ:N 65r4~|#PKX    PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$11.classTn@=K[\m(w-p^;|YdR7
Jmv
$>I%b̞93ge @RL0?"SRf[vwͶX`uusjܰ܀`@|ñ,9EiBx:ܱh2#*LWP8vM][njp8}S0
{I)ɭ3kSXbPfٞ0jz%$N'{e0⨈l;&F,ڌ8~u4#[>bymGfTlh^qLi^[IM'ʋ~EykY=bm%4Ftqw@/qOwo_`}M$H8.ᄄNI8-)u~e["8YCMk[]?J"%ݥN^RXklx5#/}yi\VptgqEA
%Y˸Vҵe1[E,ʸtTF
(O:4$q<sA2+5&LO<M}qwlC4dlev~D4ގOL5"_܁koHpud9R],'ͅ{vUEfv
ɗ0C PKgt  %  PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$12.classToD/sօ26^-ݜ&}1fĘ`[:_5b|BHL,݂t=/?w 6h4рE	ZbVϏ=XĠ10sb,(3-7&gFOA<J
K]Pԋ8vdjĥYWKd;QflGc[=ؔN/2|(.qgĈZ̠n1+;4
}&m(sj:8$&.=Qwٸ+#	J(Z|Y!r1yR8?6ϴ<9%	ꐧ!i)#^'IZNs	J;s!֭D?Jʧz0*6G,9MrLӿe5Y2[AG-<NJ_UTyݭ7AZq\v\':Ϫ~IO1dgߊd\qM2>񡌏d|,6<I^N6o?$\ڃEߗpMw^G-n-Bn]yڛ)Dz}qV
~qZ=_?-C*.x*Qq]V6t`؄YI%,)O+_;
Z`
vpWM
nVU3mm-KQN8C^>{2(xmub!X]$SDր5a=vШ͵la{_@{tln4W*D{_M)LBv3vy>ǗbĝSWUMrCȁMaiͯ&6PK޲,    PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$13.classTmOV~\-ݪluH.qT&^&Mƪ~	-نHiIVm(v{Ϲy΋|?opR		qe}Gxn6[nqq5.\:bosg+Z0&Ln2B(`4qzm]n]1)brH;mӶerܱfF{q/ߠHv:QU(;x1I0qzIXZixQ"9;yJ([y'~懺ny-Zv?fy?,6gJ?,Is@_ڄIGAWQGĨU`I?vf0iK2>/eܒq[Wniխq[p[ҳM+MUm]<K+hkWSN	^3mss|[C^LRO
fT,;k|MXUqW/Ԛo`(PV
Q-(PLAi'?ĝ~ط0ٗnq~eQF$^-*|z[]}f桍(
sx[KswE0[&oZszD#5d+)n9w.W_'Zjgqz
b@ptV<ˣZ0/PK~  3  PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$14.classTn@=@A
:7MK!"!!.$&d
^hQu	XkgwfϜO txP(`ÌTyAU46]Tw=]ur=G	5
4̖ˁ&(b0jfKZK1(TMC,AaPRQڢ?wlBϊ:S˴<M֛okj|Lm0qA:0Mˊ|wȏ;;IdG޽ 	v,LR腙?:Yp(onȢ/@	ﵣ,a)Nzx7i6 ڒZzXڴ299?vߘy;~UsƺpFc2<N843<r8-U6']3ҝߞXڔ<	SVFAԓgI?_;TUOA4?ˏQȟJd!i~N@9K"xn᪈"$"*"*(j9 .BˍT+. ːs(0] NٵoًAlGQ8 MÔXz>fdvKl:Wƻ!` (*C6q G-BqEh1"V
V{oՋ~ʣzؼYǍQ!8C̺lY4@La,|PKE%  3  PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$15.classTiOP=*`duaft\`P1C_ /"ΐHq/w羴v+ n\(@_NH$;oie(uW3UdV+F=4٠GKiPvl=VY%v%T1L:+SO5&ԊZC5u٢ٺBuFLeYEǷMUUob}OoQWvӴ$I@>(ypA^H0܍Ifa2@3x;hdqBPȣ.6HB}NVs%f.IS|F ڡ,~[.֥+$ks砩{ZBݙd7|g!Rd s{A{7Dg/s(ra59pfy~[$+?Y8CB"*nv5gYҊTNSח=V1Ξ}/{/}_9ppwn%ØcNEqUy܆cryL@1	j<{<f{ШюSvka6"V(LvaJ'嫟i탕,} p	':T(nB_;?bqUkxt	e=XjejžCXGܬ-ك};;̊,3FPK(  
  PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$16.classTnD=nz,hҺԛ`{$PS%-REl-N?MD%
׻+Q4]ԑ;{? 6. jᒄH3a^"4ߍx9}aq"b'qBqc:\{bߊ$l3ܑؑ͒$l
uضsfZSбe1n3=t&	OGx1^
҅oڦ8oZ,I8$OXxEGޡHء%҈:L&-ìʊ ìg.J	ƛb qjs?u6lzQ| qfUn?wPI-ҝ5RWoΉW'J^OTe#gA({l	ӱ(cUƇ2ʸ&㺌2>p]u}[nx֥9Z;Чi>4Q>z#D{ɹ~?Gx/5ݣ?y}<R`I
13m*TtT
zT),7c7Q`B-|6Ƙ
4C[`\TtY8yV㴪Qz3h1HnV֥6}}v5I/['_B{EۋdYeܝ؄L>.m~-bK?m^k_uO4Id#mF/?PK鵊  c  PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$17.classTnD\u
M - c/$G%-REA0whcKN?MD%
ǻ+Q4]Hsf9Eco𐵰ڂB
6cR"۶H,S#	 #y`GٶDl`W-W!g<R<XJsm	ā8#Cr?JwO=:n,{9Ͻ¹YLBJ[!KpI!%!'cvXĞ(Xz!ى-ĠA8*QnE^t|V(Xi_ գ_WcFaqA֍:V2u1hf5XWe~>GOJ)|vRO(KwQ
^ĳ,M;|?[mbL篞֪
xCś*n-eUpⅾ.-*`,(/WxXv_X4_NPo ۯeMߙw?E_ۤ@@kxhԡlxkĎwh^#M0
[44eQӓQ5X~PXɤ&7k6	T\>S2n9ZӀN
s)sh/L;G|Sb*r{Gr{O{h='kS;$Sml?PPK3  c  PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$18.classTnD$54YB/hҺԛ`/c	xJZ$RٸE[ oJ< / ƻ+Q4]ԑ9g ApV,G
max>
JcJA((eTаq#DDvBm/vB=J˅vĂ.s"wY(`9M~~s'vb'I$,(̿-Lrhs}X''6
DA"]<=! g+=GF* *ö
4AuƏL&-ìJY͋g.Jƚb :LV4u6lfQ| qfUN`%t$TpV9'^1t~U6m
bL%LbUŇ*⺊*>Rp5-7oʰ9{h,ʖ
snCۺí7Vo+sUOݳ;xwoi}uаcwt|Ј6L:::ÆmpFljDMkXa[\mX5
yq E%Ǿϋng%UUdM7kyXHVV^8o"]hM:SU|rp%+kh+^;A_:X&TilN%6{/_uO4ঔmY}2.PK]1u  c  PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$19.classTnE=| - P:gf?fHHHhqM?MD%: m{̹^ j5\v| a1ۀ{o#%R+-xCX&JE1eYnBX&B΢$NIdA ԉaTR
/2vdlg,K9=i:H%Q &i#uǱoɘJ-8$XluG>hyI`؏IҾIS!M$/#A>cOXI6a1,R8tP|:m1v󎨜+I>Vμ/IvdJA^_'jw^Lr}gì|KݢU=zߍOlZ^6-xGJ>8qQμWnmD~>*Y~VU}^wU֬q6:<^lbś.rk.xEqp}{:6gmn]lmҍb)DzyaQ]՝<_~l>lVq7*.>lv
l6x
׭vq^euCԱYUB`Q裿jh<nQ=ʦ|J$t4I貦UZZNp`W>ߖt);EGJ\xsL{|N$p6m^:gx>g4?g7Ȧ4Y?I䛸PK$s/!    PK    A             0   org/bouncycastle/asn1/x9/X962NamedCurves$2.classTmsF~.1HPRk Ȏ,
m\:Й0|:ߝ#w$%B<e??ӓiw3ws{ c4qYM\4q`ѩ?"^}Y;iBj#&ڔˈEI{A	*E={y~Řē"Goaq<YG?X\55
ZH&}'Ӗ
u2
bO,QK
ΊLBuv=Epg*TRT?PdVyR^QX?>#Y
T'\,L*q%/vZAvwSy1R.S},t]rʥKkQ';6'rk<~ZnsX +j\zE`Ѯzj0%NoOny`lSj:U{:lΖhtmH֘ql:隆ԧsô?C>.>(߿/1Ȇ4l\ƪ+qpm|9%*pe|URݶP-@h&R-8cAsTƹU<Km:#*ǒ溁R)^}gS}t*yp;9
p&gMpw
'EmVOj	C_UJua^5:;*`<i5_ |OIQ՞87PKg}    PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$20.classTaoT=^9KkC naKty{~c`٢SMB|@^eA#n_֊I ~uR	-hOz׾{9N^' Q
k0kTò#g\!k~ͬXǵ8k_*q	
0{n\"K{Elnlqh׷@2B[PUK:ZR'uoIxw
{ύ`TT#r='X\@a'VeÂƚi|U,#Ŕ]+ei1	y+PQ7PO(ZjbUr?O2
4{QZyAAZIjU6VÔk?%'I()`7+AUnA8Or"_whᄋt慒j߀Woωf<8Y~*wm4Oq&k&G&fcWۛ{ߎk=PۜݚlmFI6}[lZqsM~Yl<J"KkwV߬?3`Q5,5
VMh`Tn밫TAԱ
u:nWVGb8>?(=|6>4Ͳ4GIQS{h0n]Nq	`>?vQ4t5|zǫ[\ZYn.R@=/~;'Ysms6/a6w5:rz:EMIKJoKPKb3],    PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$21.classTkoE=$]541Z@4C!YHH-aqcK&/MD%~ ?
q׶DikHsg3{ǟ@VpJW4[<d^@EqƤQ(*0<,62JVkX-RaAGesgBke&aMZ
=[Oala.&VQ'6sD^Č&\hny<ca|թTDHϗIBȀɄb_H
9g*`LTPIqb/

gNPRQRHjE!S$$3IBx*4PJR~`4(CHji1=ҹڛY'2dyOE<~Ar{orSt4gn4_IdMaͦ#~mK)f\,=^wD~>*~VUxQweƬi6<=Z|t7\⺋.rp:}{n4xY-Y!`;ya6w*&Q
)p	t`Tw+_2P_~PZ
J6>f
5jx;5vfwUq~iDid[UlCW>}tKêh@9XG_p<hOa6S"٢XI k;gkh.%*ssw>E_Oiw_븵؅K><N9>n	>i̯^B<#I6YmPWq/PKCvA    PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$22.classTo5.YX
lXK>|c}ZvCBLl Б޲4k
~Y+&Gt[y}>/o 8\竨TqZk< EeV+J8ʪXk	!sFj	a"R%6N':JiH2q"*!X8&cj1.4TSMa)1LD<2"	7Iu%9db2qF)a	
#- o
v2 J0r17pRiXPDщTcZHXW)MRCC."vؐZ$4!^o(uȝ$+*5{O9iJ.He^>4	!;Y8ϊ 'g8ϋ|<~^ìWw-wǻ.fxM["h~7:~ebwɐvT/UZK{Vh _vY3"oS%+OU彮3/4r
0>`+x7+\

p}mҺܳOQG7BN
ay17 mL]P,^/?-??Y*YWGu,:^+ZuԱV+XUK\45ZU5հ
Y{k薆D`ތvK
{_N^<o
$"+>s~zbݒ_./S<.uz,Q&129FK/s>ޘ9>G?Y"xX
ןNqwb~gI#+'|3PKc    PK    A             1   org/bouncycastle/asn1/x9/X962NamedCurves$23.classToT^%kC
kYIZvCB	zYԑOVLi%& ߵys?~
 "pUXJUB}?0ʈ7ЈXIi2c]9Q̓F.QIgJ0bÝwRPP/RbXkbqB<&aN^iNx"cjHl yC#i4%VHV(<
Tkcϣk0֠|db86Z0a#ǉJC))m,L&$F#Mq*aX+S(O"aBJx(f0&R2EBpMK$F2V o)cR .J~66	!%$KN O/IzdAVô_'T[ޛgX]}xN^dOǇy~:-FY/DBY/ҙda /A;<9ǣg~ϙ3WA3+G0p	fwXxoWjU ڻٷ֝>9!yo:7JAb2/d[n9ԯht9__!?3ݾ_,a>ex>CZuCf^Nau`
X
!q
n@M,>䯸?Ox4Č4b5^n^6/3"\cنv	Uxg|N	|Ye8kփͧpsN`3X>q}9OO^ 3kp߀pOPK/7j  !  PK    A             0   org/bouncycastle/asn1/x9/X962NamedCurves$3.classTmoV~l7X`FGSp+cY0		
ts}2{ݎ584TҒiG?yε	ÞM9
5\pYÇ
cfa0ϝ;aNGQ"$G}KIƢŁ1`ns\
!b/l&^?*9{gʻT}u',m@BȢhضo*0AyȾFaǎdcΤ"G</d)BH%QDIN,]GDc7<[
=dfX,,;ـ2hUt`u0O$e/ϭp7-JY>~*~(EX/c8`HW2"iE
Rqp6Dd㩐SQRXL j-V֎|@=}p⚊U|S\u+
h<Zչ-Wfo7\3xo	5ɓ:6MS.@4g$_!_igmU/5?؀%\mᶁ`xp*0"rXq[*0qWGZgʞ,g	vT1/
Y`neZ"ܧhWh?:D)F۳iY?37=}^|R_~rK۵CLpC3U}^`z^L5֞7گC|{T${iLo?PKYL    PK    A             0   org/bouncycastle/asn1/x9/X962NamedCurves$4.classTnG=lm(3$l;=Ӥi4NT	5kvvָ2jI[HH}>TY;Q1U4w=̽s	j5\j
f
f'ԥi*xD
ƜPJy1}7VIi X-u4/d̅)ZSŉL}'Iu("rOb7(q/x@w%:=J'*P\4H84NuC8	/L.	|<c5~ĵcQ@z1xGa#7pC7PҐsqkWlL`)p'[WeDڇ">\Pʇf Q?yO8CҘQ)13}I:qh*ڃTbh|J'J7G~!F[ 0J1,̱_rG{dkNKmAlo{eJ?jd
)%YQ`r
V/	G*VQWIVYW1Gpꌮ/]/뮖_I
;Rg0V	ZnYMyUݘ-hZsRo`˺XrSN!4w?ee)&dF9/9}{i&MFĝÊaj:7dtyJU
4j`_q1_	LC=]U<蟑e*opZQڬ^Xz'z<#BugjV}qSX?_:Ʒ3-*;S _8O4_akU'';Ak
Y>wD׫f;xWPKdTc  k  PK    A             0   org/bouncycastle/asn1/x9/X962NamedCurves$5.classUoD~fsml|vmiwhҎ4e2+e8V{}O >QJFW0븥aZza)a	E$p\"q tCH D4QL="#
k<Q(8I@RLxsB<*"./P*<J'8%9HҀ^%*M%aRwSM`:##s|?
j݈~@hHBBƨ4\^gr].,wʹ*rK9̏cyL&2R%i	OXOp/Xq:ɲ3L(zR=T͟_dU5{v<<į@ڼ%dKZ*ִfWdnB윕.Jò?eVM!/mR~r?qWG:>Ou|ssnYqk<jݞ?pZNƪ֣[VaSJꂢ&%wKNu)&uq~V*_Bir&6ӥ'&ރ^X6qmw*s+&>mpL܀[VKXWY7ĪE|m>@+XA
631j>|>LNɼ3E!)֬*YhUO7ԩRۿ	54`ڍ1	4.Ƭ3,k~|/Tu]M#tWm76Nx^i#wi"PHR=xWPKb:b  k  PK    A             0   org/bouncycastle/asn1/x9/X962NamedCurves$6.classTn6=LUڮg88')qɲ-nsEIIɺ4P(;@m< /u=_' quuG0k.=!X=PP:aq7NԶi}.![2fGQR?rbNmJNKi<
fN8
]j;<'Hx$*"x|i*=?p"f#1p?)4Ut\qe;'M؋}u|F]Fsaxq	]zrLa~(\r27OY\'@q,2v[9W\Rv#նcYʼ 0CR{SÜ^ys?OBo$Bϭ~o'+ea޳aHKc֏{*c2RI[R;țLF̽%cksVEfuoYڼKH~ᮆ4|
jLnQk"YՍdݞ? c.u']*][UؔR$hI|	̋%t
Izw~V*_Bir&6ѧKO2-l6TV|un1Ѐ[:*UʬhbU"qT:L|c	A^	,u?|>LԿi'd}TcVMuX쪯j%j:#B
:Qt	6vOabq6.)1rvO3LQjj]l̞mnANwŃJ|3,(fC!Mzp
WPKVsa  k  PK    A             0   org/bouncycastle/asn1/x9/X962NamedCurves$7.classTn6=JUڮg88)Jt]/ibiQzpAV?M {=01"uZ /u=	 *U\­jת`[|`0P,04a,N&L!!iL$)2Fi,cH`HȀ2E<c.ErʐHsF$TFcQF"E1Q"9;(ŔdF$$IEKM4hJxBXB2lL34$L\u6~v*` ׃<ʔ#H(WP۰%NDLe&:708z=Vza
R;-e###X)zTa2D
U9CA9vzdV6E)]s2:m|Sc~RZ+LL{'UA5R?Jھ!m}iRhC8zuEW&DnFf2_oڞQ~=soN7i^:*U|R|V|QPڮW;xc\ٚXup{telB,1}F[Wylx列hק;2	LU}Vx5?tI
Q)R
bhptRGkxAk҅.Ky+ץUD.".t။E>Ӳ|vL?VgVW
fYuMa;_X:CM1cc?~}/|}ں?wXrBv3v^c{{6vu'Xo4_[Gxx|
CyLY
jPK(Zr    PK    A             0   org/bouncycastle/asn1/x9/X962NamedCurves$8.classTnF^[6k^ﷆҮv R%TʏV[>O_CVEoV*jت#͙9ge. ,4 6h|RUH@GӘon9mXZh86=ZЉ_@O35;i1c4<OM3"O3YPs[٦G33tF^~ԏ^]82môaDkǖi0ϧ0
nquGLvs0()f߉\);ۢ|cP)/򏢿r!-xRqvTsäHyŋR<i>T8?˟&iv>(?&ǉzT`<*>J^,9Mjդt~;}8qβЖ'{5%{d,)z5;kg`GxmQ{ 8OqVD| ⊈">񑈏E|"Sȓ$dW`Qw\UvKۖ,[ʛ`EA.Xy;R^[hQ\oN?gS[O˄DH:26ѕq'}ܒ.T؀^Zpb%K	7`I	_Hhe$/x,҇e`,y-1{
)DKK4
4wN6|م4mN`[S|yKem}\#{S `os&v$:Dҁ^seKl?^kqܛ\'9$Kk*;87PKR     PK    A             0   org/bouncycastle/asn1/x9/X962NamedCurves$9.classTmOP~
R&*)"oË	`Vh~"?eݖHmƓ{}ss? (p΂"AɠH$4K1ӽc
HfU%r&3(
!"8fU"Mj؆l)JY$4Lղ)w=mK(qU٦DjZ
VUf9fE躥MPKZmW&ZA+Y"\y~	!d h=ķ}x7zEޮQLM?mluv#j4;]/Vs%Hf¨)'m_@?kCiFv)/ ;D>!Q~]te|}olgе,&),n1
g"iŹg%Z֧6Οkl
+
vm/h4ϝ.>Κba+H(;a?,>3~K߷fa	<q-uGWPqWN8̠:%uU9Ap8܇:!6K?vӋ_󓝰_	?^1%
E&蓡L:!AkrG0V'q1[2
QW*v_{$,10ǬV
aqs[t'Xmr43HT(F~PKŇ"    PK    A             .   org/bouncycastle/asn1/x9/X962NamedCurves.classwxߑ:VBHH 
T- F(	EIN8NI z	(l8Չ{=1Ngt'|;._@UztlԱI 8eK}'
FбEʸ|~ [YY9ҨJmxꨪV6<
oQW#T֧4<#
oeuJ6 
U/kxRDmqÓHƼ5)joUPW{ hE}PT 7yy <g_g`}4SpBg+Jp_N:MlZs9I5DK`׶,16~FfO8|a:
#̺}_۽c[C<PdP/n	E݁@}x qEF}=4!*2.fױLY_7}hO틄֯n ]>٬nUKKW>p=^GjGGZG:GzG'v{-{"kk뜄띄i,FxEsqz:4+_x4٣6wumQMG>'qW8jߵdÓ&dImjj9?h_kߎ@>:9:ruLԑc|:&(Qc:uL1]G:5ThXF
n
^
j4jPAM5,ҰX
7kXa&
kXa[4ТV
Ъa5jX^%PؚSHk:W_e#Q+?[KJS"4u*sc,D%É~\?w$jkp5x[]L܄ч|H;Dk]&^/MіX`t>r23+ǰ{k4q?͝rr/pΗ~4
[T1<o5eLd1&1ɌBFc
c*11hgqqqqqqqqqqq$o:@%2Pw(;

l{f#nG
\ǲ`|5`|q?[o3`|]gCƏ?fS?gKƯ|igeeÐ9Ì/0.0,_b2>W_uvƅ00~3_._c?fǅ6bbfaecg`dbfaecg`dbf]`х7O.	q-L??P~"2g}߾׿ОҥΛ֍J7)mSYiRCi\NVZHi)J*-V:IiiJNu*?RZek?#jM Wv^̼ݮNA2I,^V>,VM+Ήaâj9zԹbX=kV<Sb%TKΐx&q,n,`h6nTJ:4ƝZ~?4q74< D@%hЯS=?}3ԛiz}N,M/{
2r}8sV]Th
M+\$[b|DwP4윸/JlaqC+ȩ$NOH|ߎ_J%\l{yQha(3jLGd
aFSdX8Nn)2- YN[bqNN[jM<ja
YIn-3vsxnr&\,%1}&.YO5CL`0zOY8Bearיx(LB"EI~S L)J!fIQ,EH1MLJ1],ۇ!8ۿZv)hk%kȖxRЮz)&J<c.)$pI<nn)&I<gRK<olvxۤ,RH<eRJ\&XE@y A;T:tJ(ݫtJ(=J(=JO(=qy	PK`Tz  l  PK    A             -   org/bouncycastle/asn1/x9/X962Parameters.classrFQZA(e@ڮۺMBYHkH^>L0-7CuzV(7sw{t c=4.a2gsCCY~cJ0H5aڮMG7$m)aȷ&!+	V⑸_{*l0LIۂA'kEDw!c!#Q76*7Zz>'S<;ʖ-
|#oýbm#h]ZW!N|{DGBP+0Ymy^W2XCu}⪜f;kpq3_?.޸~JL5A1+-5ʵ|^)ɷu.mjȋ- t}_9
S2Nk0ጆ>s&g{(x6|==Ud6EW|L͑.)t;|Wv>h.ԫN'!2p%I:vW)~WG8+R00OL!a,kʼn@gҸi!q[=sXR]5u+3aL%z4&bSi߹!uy'gPnA~i/wid\;XH\ӯ<>i}|hѹ?ędhsZLrʣ?/㙊
wim|?(-SNQ
XbbQ2k4
a)\MɄkc~ا.7043oAeBu".bPnPKlf    PK    A             &   org/bouncycastle/asn1/x9/X9Curve.classVwUMd2)A-Plf$(P,IL+uЦ='/Gw&4Mr<;w{o??`-\<	@K½g;+`nިuRZ=$++!gP7͑֘96	IgF}(҆
HhFie56:@ӅA5&L-8`8k)r%R#"jʐ0"ȚN̰=e#fӨ^KRӆXKaSWiz=FNZкW0^55LbP5laY7(KPJM'CTJKp.9)HhYSϤ%[!Edҗd[2d?3N$TLi!H
{w?X2]R;e2Nl.B9=TR54HcwE)K$RP(OlݻP*.*2%U!MϚQ.mVD(
n)
4Fiit	,6T(˩#|"
t9}H|u"qb
$9p{HM7uv\1[-AV6
V
X-F`mSֻޫTəiI RCx^sa% ݷU<:uND~sڇP͋2h0U.T4//cq:o2;
VwmU^AfJNyg$*5KW^ڗJR=ӯ|ow)'x)C]s|4U)ZVAz\ǰNzQ3T|yv% 7q/,>7c;p&P
`!
#0à۠3f8bbH3ddlIa1eDexy20-8Ë2d8!#Gdl0<-c;gxNF7exLN<]xY=xIn,.'&O\4#5đjvߓm䛄p@kXHC><@#XL@[qp@hmx?(`N&paHEQ)i+Ii^KHR_^v$}Nӑ(V u^!Inh[1(MbȦ'Ib[δ.uGu~qoXZ~z{L^:/}%4Y\y(j'reC
Q{
om-I,N<>
2FRp	l[uoI &I"KD]H=A!ۨ?5TjTb*(زom+.8xiq/؝O#usk]_)jˌdf49
ےW61.ŧ$"}q]گ+['q|ǗyS"aJ8v\1wM:{I'k禼QH{I~"ICw/ zPK&j:  P  PK    A             -   org/bouncycastle/asn1/x9/X9ECParameters.classWwƖ;!	-T!GNT$#%N0&i$B[֖)!,aJ0~awfdű8=s.O|pN|Ǉ>l/&d43P0l6DQGmK'~QQV ]C0jOIgOa&H0SS+gD 3=XrIB\k	_3%z.od̀aj9-[HfȟcJDJnhy=bZ)	ki;N[F5gХ_Id6c'lC$4ѽsHDͼq2f)0i-5IM9pq=nuf>OpD⨖*-iZUUFoG&Yw6SGS)=sBY*Lr|!f{dԴ#ݞ%cky+91㙄6GHչK69%oAZ#\ey#}NHF˜*>M
M[
"UT5HN	JAP=van[UM.}ع:bdM׾'o<@5[N`Ha	\)] ,c7Q&n%[K`	D6W*.QʂH[jt_&htʼMj^k*kd*N-.V`-/R/6T,u[kɻ_\Unr1HO՛%CUi+:Վ_I/%{lj5xngyjRH2xŻ.eWy{p	N^˱DARɰGl\_(Afx
Sp
yMVB5w+G^\1iᘂ8U)"m!ڬ͸!	1I)~+_؇dDGße`xBF?qa?eI-fx_2Y~9x2FãO0L˸eQ	?M87!}o&_G,-~A-{\CR(!ۧoKʈ-))tlœvjy:{y,`_l]}X
	G3Ssx!47Z3X|PC3`/ip/P{p2j"0s
~6NcV1OwY	nB÷TuCƭ_G
hI$Uch>uCgh^PLxV]ALfXdIY
ul"N9sqH61YNpI_RI~ȱ7.@(Cᣰ~Dܑ{$qBz
S\F]DlXpKQRF_vϳs)}3huV:$/$'uDI9;Q/"5Ō	m/i$9'>7nHU`c؂.ch*[+OU?%Y2~d#NF%3%u/tW=ɅH쏵xx?|uIWΰdġ?vvWO8x\pχ+KA=gxީi|PKi\  n  PK    A             3   org/bouncycastle/asn1/x9/X9ECParametersHolder.classQ]KA=هiKЋ,BEA`ں+Կ*Hz
Q̺b=ܽsΝ G(D+[I)r]1] fNZ6CVZӔl
n1_6	7m>-3>]aLd9Vb}YT$T$Uh9-	v~s{̿׹7x__YS21d)" 
rQ)'E
(4	,
b8-y>3.X5-Eg%LL"֖@ ^ (^QDVcsϢN-b$#dj6++yPV71%"Cf?PKBf    PK    A             (   org/bouncycastle/asn1/x9/X9ECPoint.classOPƟC"Z"acw(DQ*֒QF.5o2l-ys{ןo' &Q`ҙu1n0ҙC</$	YXEϵ۶m۫K3aPvg6CMVP᭧mLJ+v,Ԯ̢cs,E0d|emϰbR`mMx-䣓T*KöB>L\RU^E7.CKN	}[Fk2h!SFnaNXMK$4\YhA^izBÐ~#quqf]!MVу2+T4#Ƨq
K$&6PЋ
nb\A&Z` $}yz}fnm"hC]$*JјYqb^^f{*X8#LqY:
#&dݡYyX$ (>V1OVZNjRiP@h!4%pZ#h'4HPP/`)jBu
nYui"
ȱI|~OFJZAo`4kǹ_PK'.C    PK    A             -   org/bouncycastle/asn1/x9/X9FieldElement.classmKPZccu>u::9W1+io570a`jx*b6fB9;I~k3V!mV.|0TI1s<	йgaL{<*0F}봥ml[;GܕKvî+ܗ<d˦iq-P?zO_n}[<kתPދDKHѡu
VԠk`h0ưx7C>Y
Ӧ8u:NA[ZL'ݨO1߰U4Ƥ!LS&e	
d0c@2s:19尨̒gx0X
9/^ԗ"]
!OyAvNDTjxzc&KO.5Nc6NXeE\X5
o0qP?Ӂc' PKE    PK    A             (   org/bouncycastle/asn1/x9/X9FieldID.classUmsU~6ۭhcK
)AER[(+Qn7kXH71UgZ!H/~n&3Ϲ<{^&>$^($ǗY6j2۰
&لN;#,Z7̪iIԤc+;vlW:QUǾ[kٞwimiqHh&"k	ȭ
nMsLLΖJv,MWkDm]bzZ?YfMYs'ӹs$[0WKxeʱLf]iƑXƛ(=kO?ۍVIlv<쬂HFs*-ʌIVΚ}d]=G:S`^}#@YS;ЛO'^$sr_쨿fϴq|dUwE)$1+Nl_Fuζë!2ORYB[_0u0c8=!Đb8C18nZGC}d(>f80p!pZ05ì1eph880.h)g}ya?W.kٟukѬ\ѐbd>T&Spid{i \!tu,p>-Su|qK?#"P 6b@PTǾ$|+ԨC?qr_}JF{DG1~C8*{ΛECqɋ]zđ|"h8*9~
#B}	$j/3Sh~)jrQu* Kg*H?fGtEN=`!i-$C븾l6𾯰,+Xя/mǛǱl=\>+0=&PK4  j  PK    A             1   org/bouncycastle/asn1/x9/X9IntegerConverter.class_OPƟuV
:6D1qLLY{R):K/F1 ~&c<63myӷ׷c	f	f4	f"
YUfq7:O}..|yJp#{ci]I/z@c}GYqw_QҗGK=&Of;{QB26G`djEbc7q
k[x	vL.`N+xEb XAHP5;n86ofZP}wӉm8S$~b`@9
P40eӱMqwu#-u&I{ΏY7-Ih Y/wT2Q?	\glS1Q(h*UJߣZ>D^E+[JXR*J=kbآY~PKKs9  '  PK    A             2   org/bouncycastle/asn1/x9/X9ObjectIdentifiers.classwxSUB{(-8p#ͽ7
ep涹&!I[{ｂ{{ŭw6PP'ɹ'e+'DҖFHJ֒$4Jv%$HK2$,IIFK1JUnG'H4𙾺g,AcAAՆp{|"	XP@R+Um&VdbbFA	_ۅ[X;&ݜz,ed
fATEI4Iq5jdm¢0PޕjZmFaaVW1:f
fwaE--g,,k3
jjQE{n{5j#s2n6\{*:X|b:bhƍJ:v}˷dsfvI}M*3!GűpV5X1mG\DPPX<Mv%d2;\<01:`3s6c̪W׻I$ܴZcisrHͪW͍UJO<jjȱgOs:FynGJ^W1׫,otD^{H[&I6̊.r유^-Kp5p;4DSIÎds	&M5g|SbN2MiKC5Cv])My1B~/
:η0`wH_]t̹X~hUFNRzO[ҩZTJھ^JKO5FРӻ1Q0?66.tR9L &@0
L3,`6'0h{󀽁`!/? "@ M@3\`H -@Hi`	r@+t  G ˀ#ccqtr9)}D:8
888888888 
	
ˁ;;]=J`p/pp?  0(8$xxxxxxxNկQ}*5|Q=
lZ28Lrڜt9s6pN9s6瞜s8'pN9s/I9gp9so#8<`C8<pŜ	c9sqr\ȹ?>rʙ<4>N[ÈR/W	z%,WjU
1ty!X@&Okk:D7TAjaVf3^yыGA Gz+k
17GZW<[Po^;Powh֏õ~Lk͵Z߃)LgоZ?k}ZMh?Ck Z BjEe^TzZՏ)B(PT?诏X_{i[{)\΋?BD}+yzZwT|4?Aپz}w4BꭹF7Wqzb o̠ZvPKRJ  @  PK
      A                org/bouncycastle/crypto/PK    A             ,   org/bouncycastle/crypto/AlphabetMapper.class=10 E5111nL4 !mS*9x e,p 4)dI칒0(jaoznmhdMe+%8*SR=%8m'(7;ݰRZa( b9n kx}PKx      PK    A             3   org/bouncycastle/crypto/AsymmetricBlockCipher.classuJ1׵[kS4 <! Tx45u,It}4} JL"xa>~s
,~6-8ϧT	EeD(yM&@RJgs%cta]f1J1:XvBeǹr]}nүޓZTuRyߑRR)aozN/73a=\pMi؋dӊ:~ PKPJ   Q  PK    A             5   org/bouncycastle/crypto/AsymmetricCipherKeyPair.classN@NA(bhҍ	$@[ہoąqCOF\13'|}p*C3Υ-1W!&XZ{>#zp/,`:8S
,0-/pc`2ʓVGw»AKdrOFhM(A\]rJgi$Hf(w3^
!iw}<7fo+ű|zX<2#X9lfǀ]D҅1PJND_r0mvWұ}5襞:h x>eU5(7(=!|Baʡ	K;Z}$h{@_
 BS##l>Z.-PK>T
oq  F  PK    A             >   org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.class=0Se b` NS	jr5`eeu X`0)ٱPǜ(Aaz\řMk-Wg&TKzĺ lem?h/)z)
lRXd?Km;bI%4q0 v9PK6     PK    A             ,   org/bouncycastle/crypto/BasicAgreement.classOj@5T#$9^zd
 X(x͆F6A?~@?ze`{3?_ ,ZUUKvA`9ç@jKM'}*Rko{Ί`Y*>Vw10H`o3c<5wb'P>k(T4zk	n
@LnPK 7     PK    A             )   org/bouncycastle/crypto/BlockCipher.classuPJ1}ۮUV^[Oz(
%;y(qC{<=*IgcdZFS,Mf7rLWO#0%|Ii#]/LgttNgD#(Z+xo>c?BɂNUXeKOt8[$:34c̃W(+Ab16cc4bl	pgDf+p<׹}ǹOE:_&ʪF5!p(Lqٛ(j>vPK    PK    A             ;   org/bouncycastle/crypto/BufferedAsymmetricBlockCipher.classT]Se~
!(ѥYBK,~@Q::CeyY]v37LBgz̈:qs6B5$s{>l~~ȤV錮Yd9Jtع)?МG%w-PyRda@nǲFՆZmW#GmS 
={3mׯnح75M6Fe )]onaTM_锃}r[$PqConWY
d*A@cWVUfէ\K+p#zT݆+k:P%7nTuT5}7auvjCөPƒT\:/\H6DJ#M™@ѱU[ND+V5-bᲅW--\PJgIgmI~o:gƚpXƝG^GRPlg|&+f}ed,.bE7,XHFf
,bq+k0
LenEnx{,̹h69^1wIKǲ,A׌ɑe2S9I:z%DBHї}pwo?yjw0
{h/9F_?l@X3گ==L&(A2,8(RlG`9]lq79"6)I εrѕ\óoŕ\j󿱧BG/Ц.**A_-|8Vrbgێ?v%џPN:NNKt%L0aΗy.7 X5Wal{~C8sS7c7?/,-ſPKd    PK    A             1   org/bouncycastle/crypto/BufferedBlockCipher.classT[s	SY"j:N"4q4Z3BזnSB$D )>(q;Oz&4c7/} U]3&gw~9' oZL`$Wx!/yANݘ*C<>)$_Y˱i3M㖙120|Z34	F&re:߼HQd"7ȯyFmm2y'YY據jhɽgli[S<j8f\Y1lCˮ7Լo@
׳ƪɠj;L>r~!U|:B>B+N
iL9	m3{E
%/qi2&liLmyUgkf'@}r܃GTn5QfUm\4UM}X)R']19msBNF:|_C:Ή9+ex]0{)3گf'SA~x4V;n<$i7]*Bg&l8exe"ʊA7 jgZ-ϭأ]{"CcZ8mR>l_ cH2^1Y22
2NxIƄe|3-r!x(;>&}RЗ
#?O^6T@ v9M-rL+T*b@(:xaxUÜ
s*pqx)߄C*Ҙ縷UEEI\Rr3X
WX⺂LCeSh*{wY.L<np5.\4R7.\,#8֩f3kstczj+Fk?Lt!qJh&qHX#%ӡ51'+{?FCDlDv.
'.lBps>/>MlcuC9qEag󅁉j)`T&dilfTNA=oH^Ar1#`%{GR>t}6SH	D6nǍ(v-JopWxA95uk^QYI&
4ı4Z]X^pi3M]R]<h-Bc6a=Qwվ(	~ɐiѢs-uJm1Ebz%ME	pߦ7s.24{K
Ac~QǼW56b\`l?"8Ϣ^LZHa|%Ok$&Ft>ft20I#U*zݙEESn&ppK-Q}_A暢śŔꥴNne]{cɧ6?q]sp{?QЮs{8?&L.>|:_T"W"ڰe.wOǊvxȧ1S}3M.2m|-EŌb%]e3XdXZb]HSXZGd#}vqPNH`OND^9NN^%~#'#f3GlGx}PTK
'dtOv,zvTpgq4!c[{TnOOϩ?PKM  
  PK    A             1   org/bouncycastle/crypto/CharToByteConverter.class;o>NF6hgh'FԢ +=$ A +,Q?'1/]?)+5(__\X\\TYPXTY1(ADCaRpIQf^5"6`bad`f`` L ! PK      PK    A             0   org/bouncycastle/crypto/CipherKeyGenerator.classRn@=@R;u@	UDjHH/$h_D)Q$U9s?~VE[Ƿ9vȻM,2/W:&)P~l%2*N"M\@'hE2]na$Y$8
^ #BZoUG~$t!RI7G?J2A{j4Љߊ]R!,C4)=(6YĘ	ǉT'MڙgC0i}Hܧ,S,\pB²	Ti홥lw,Ʈnm1smGFwmQLsu;pqP@Aym8Xm%)&p*ڸG6PqLpmT突r*?rFĘ0M8UQ0s<	\bxiM
P7藭bOT-uBfD`F}fsq)PK¾O  |  PK    A             .   org/bouncycastle/crypto/CipherParameters.class;o>VFĲDļt}FtҼ⒜Tʂ|}̂ԢĢԒԢbvFv&6Ff(  PK6nY   \   PK    A             (   org/bouncycastle/crypto/Commitment.classmOn0=&4کS;P#bСRL W_QG!? `Ef4H'J41=.BO*B\vIKQK{'㋬l.Y/L}Wb%^H.՗Vz<-p:|h3s=zT}J</M#@>zE܍
u0)>bF܊/s31PK   I  PK    A             '   org/bouncycastle/crypto/Committer.class;o>NFFԲĜFĲDļt}db~Q~R~i^rerbqIN~rQeAI3؀"vfvFM
jsSJ44441ـNe`e & AB PKjh      PK    A             -   org/bouncycastle/crypto/CryptoException.classuN0E<4@Y$oرu+Ev@JJ](cE33? 8$hFe/	\3AʄN=2Z0ѫg.:WDfV4cnK&z˸e.Qaӑ؉MC4@^ U8 pRu'plʾbXM[*MV-
jotd/9]ڱ@ߐΟXPK-     PK    A             ?   org/bouncycastle/crypto/CryptoServiceConstraintsException.class;o>.F6̼;FĲDļtҼT׊Ԃ<FtҼ⒜Tʂ|}g0ZTꜟW\RWR ჰ (3/Z3.vFTEV 
9<!& d`` PKܪ      PK    A             5   org/bouncycastle/crypto/CryptoServiceProperties.class=n@߀C@)QREBWW8bm|zw]bLIn36
;-	6r3SӃ>kueM (']]h4Upjɳ}'b	}A0/֯Ӗ8b"⟈[}9om$		N|wǰPKF   %  PK    A             2   org/bouncycastle/crypto/CryptoServicePurpose.classSkO`=U@nu27 XH4Tco&lel&==OOOi_ 0(/! !(aHBH°	cE< N{Vfc8Ñ}R\֫ O^ȩlIӶ.RC@jowt.(Zdmϖfd5Z8=OeBRjn;MKo_+2d.
n7AS/VfEͳv#[j*v'.u
82OhͬWZs,` jOf=7#"﷣df+GY6CkUݬ+{H߃[%,otlbḢALg`d0 `1|w!fdx1`33X`KL╂),3xPmkt㐾ujhͦylf+@ק&GY AC6<ns1m3V(
BP
_i8lw+x{-F>408=@$gf'.ʽ`~vNUa3[)ŭU	bE7\]$tŪnxX
nH]uCRjDTL]^C{O?(/8/y...\\rpƅ$rBHsT{8W3s%=g+*sD|PK͂b  s  PK    A             7   org/bouncycastle/crypto/CryptoServicesConstraints.class;o>vFlFĲDļt}FtҼ⒜Tʂ|}g0ZTZ윟W\RWR`CހԢbk06cX@
 PK
G      PK    A             6   org/bouncycastle/crypto/CryptoServicesPermission.classmS[OA=[*   X/[RI/}!R;%xD!hb՟dm"43sΜ9};?0E`,CǼab!犥+WԗfA-]$*CgѨZ\Ri.mf5aؖK'JЈpLUM*]K֖Qwun9\Յz&+WMS{hiB+Q5
ܽ;|+&JQ8Ea_rub_y;5u)_T(T]}ێ+[k~A!DB
/	%I,a?s=3%=̟ߵ@X/蚘a/:挽zxS
q#jҶiњNܐ&#0n1!#ى(øTI5@ =fߕ>5n
n=^\{%^6u
R"Ўt:`xOoocZ".&W?3Rb^4%xx	M`.WDsWiL%#zDOsho;9B <sT0&!}$mF6'ѣQ磂`4kF3 <a8lvC^yPKKCc>    PK    A             7   org/bouncycastle/crypto/CryptoServicesRegistrar$1.classJA][[}Z/C7APZzNv2SfB˓Z<oB/||~p4	[mt#dj0X˭4.֬al]%ͨ>,me#/Z/Im'v3WzWq4G#'L6̜ݰh^ uq!-	{j뵩8P<îq8O8LX7]{oFqh bNmHD_PKvlq     PK    A             7   org/bouncycastle/crypto/CryptoServicesRegistrar$2.classQMK1}kۭݪz衭¢xS{֔5$]RP ͩ,03{o&v	ޘ`n.	*#jfY*a Ҍ)Ix7BTI83#MH͟.x%\E?3:XdR{%33{DC33vaŃa`	*{N-t񽱏*>
 >*hVPz5l2ܸQ*5-32&`jRơM`
$j
ΚֶmcTGoh~A>NE,!>6(_zv/&v2VPw~ PK.D  $  PK    A             7   org/bouncycastle/crypto/CryptoServicesRegistrar$3.classR]KA=I7&~Mh>$QX>@	-">Nu:f&+Їmh5=ý眙;;~	 oW#0*܍d(3)HsUf(1"/՗bdsCi6Қ*.bHE2f2tqM/X	iPYg8YO>hFҘG;{ͬ&	yXyXgwPtמ{u8KǊ5[ݓٟ9V}d|"eJB",Ɛƃ|"tg4݈[+-+xȔˉ9@H3|IAa޽
ظB2)W:DPI3@}Mko.-9t
ۄ,PKܧ  	  PK    A             >   org/bouncycastle/crypto/CryptoServicesRegistrar$Property.classSkkP~vKŵz[ovt:NVhSܧrkF$_):
 CeNı=9'?~~`
kR*.⚂XFxFmVz鴬mV`֔3iwVnwR`0WTNUa$k;X?np-rzFHKCfz)78&a|iˆ<552`4-̓C=7(xV0 )(t(hֶ&G++mMǣѐ0T\VqNqyl3:	_;
\GΧ-ej.S8e+/ϩxfq7u$pKǂ ]<T=9,XI`	
t
KP>䬜F-*-я7KzԝV'yA!L1#ԡP-pqxX:BX>BO|wǉibEq^ĝSEF:?&Y!kČ1*PZ1+f9i=#P*a8K>BPK  i  PK    A             U   org/bouncycastle/crypto/CryptoServicesRegistrar$ThreadLocalSecureRandomProvider.classRmKA~6Qlmmpb1"n{={M ʂU ~QԈd}f5Nal3J"PhFaU[
b vx?3
by1OBwu(|RK}3LmԂ
2t[i;>T,\_vT6z)d'E'(SK!=Vvy"Nb婈P^(0
4`1L{>X=Ѝ-{ԼCpy/ܙ9E0QL[L%1QD-d%TFi@gm'go*G̌HъvgZis"ӅHHތ]?b_7g'&t\NK=W(:\?$Q.2WH]IrPKͭ    PK    A             5   org/bouncycastle/crypto/CryptoServicesRegistrar.classY	xTu>WhŊW!z{0Am&{[hрӴn.I6Mn;6ޒbтZM۸M$ݷIn͌ĀSywϹl9#~<V,ugR=Yҷg}S&vH~Fmkn3Û}pۀaZ^h	vWREvXʎm'BBXs?%D(\[9TmvYcGZ_E҉cr <?$baEr,ȕ<~WОr/$xkuM|;ZscpHJڊB ]hx?8=!ߵJb
;GTX'~ƖXܷ6'2'<
e'vCr'qKőϕ}^܅^b\щšsb+-mFV~TrNp0*=KJH#(AppOJ؞ǅ(PVpa;bǉB*m"&#I<pፃ$pB_A(<d;~ #PY˓ ^"e'G6N -O1r}a(wlGr	Gjh*t|KĜs;I`",ZG^E)>
2	ͽz6<.}mrǃ}Ṟ
<##`W5Z1Sv-:.8)K	@p1%Ǩ;O!`J$RAWp Tkm:H8H!G
xR!9
×8
gl-G(eB焉	m3'9޳eDRyqTIAmDq D#S#V$$
mqJF
őDs={P5 K	v$r5 iixTY`)?l;
G1O$,q,\\e2uT
D @["\R"˃r)$pp}[W.KXV̗QvIPH$Dhj(ܒN`#ƨW@Eo)*q'I@@%2@.zpLbjp+*(F lRRG:$a;PA7[(rzb@d#G8HHϊQ *5jg2
U;:toیhaPނXMRq\ǻѣk\LLhŨcűrIDK*:GG{cx%-T}sǎvrk]ۿkѢC0[wƨ}02&GKg_}blow|MrBJ=1qmYǼ\G]bW.

FzYK
#Ыd.V,lE<F,G$ K$bRjt>L"c=(@xb 1R" tʃzl|yX-L3" eѥ#Bq,T,N⃺xt7_,G(6ZhCRh̑1v,%?3Fd歌2yeQr ujԭȭ\x/
emHKT8V#&jE!J`cőv|\Ҍ1}$fosQDQKdYh#.֑{<1'T#u Ǳ<K*cC%蝁Zm!r9*C(@6P ô+ӏ܇qK> pƘ'L>E$=it@h4 4|%[7#6I'1ġp/&;D?dkL@=h	µN1>v˼Ďq54$B@cBy.DqCS1>O0'yAoߚf|43&
PUڥb EGQE". "H1f`\
m>)ƿ:F R朸0S׃c|(
6q#:hHKad Q8vhЩȶb	zV4Fim!pFDl(>:`K`>\eFI/A |q,m0,	@<ᘫ06I8HU@
ؾX	z&*&!.dpX 8y8q00b*2*xȂnE ښ%ljwH
6
1X1[3X!= a	ã&+9]bLԔ
iKUX-`u-k-(Q%\f`s~$Ei0[8m&M񨾵dn60aR]PoTU_][hi=V!D u97l:>^(Y,Jܽ:}
#YaMʞ*O'L/$6t03Î}~iuN1qx%OG
?}ՉW"Ow"
0o:7pKOxD(>ptaT+6PwK#b<.DyTohhCs#wro{h4}'W9XMz2dːG*SKmȺil|
L3[nOԴP୷7?q[PK};C(Oy{F-#JuiĹE`bvX6S҉x6l,8>&ce`QJ1R;v#=(Jc,-RGeiqҒ,-Ҳ,-,diS6g,m;3tCeЁ;C;C3tO}:dHdp
z C:34R:c`~M3)`pZ~𺮾	b;x)u.8@xy%K1xeܵysn|KރO*7>p?{e4ML
3yldS?[ks3w5x{u9̵wfNY}.׸)jVP3kD4U31Ki!#˧5n2w>?5ӢM^(fߍ
"3>R1'_6[(blSAMKluG`⮷^Mf	ݬ"njy-xUYoq,)Jkhz=oڛCԕc
@ۅ!d=kZ{<^hia[W]\4Ku7K^&X}
?0pj3Ӄt}^*jCr!wҩ<q<=lȵ3yJtLaHDSyyyfH'4HGWy꧟^l<m5yt;}.Okf/;
_S@7_<fȀ!׍ӻ/i}1OK~'O7}ㆸyH(OI_Γ2F#y6<B_!Kv!o?!lȿCjȿ[>L7@XK>Zs(!`,G놼?@X&G?ɖ	&G7[}O9k3=c4g@<CА冬0Ӑt,*Gϱ9z-6dU^`9jg\OrcYC
Ȑks)OC)6'G'y$#C6d!GOEǏEgؘ.M6* i(ٰQ"2Cbi<}^S}>WUbt-*Q9C)OTH+xGQ/rP1v?8s/sԚ:'Y/d}َXf^_fF'k2dZRY3>uz6Ǝfe}2/Te6Q[*s$b=u`}RMW,EB]UY="T%%wїrl]jӆ/VZX2;Bھ~>lIvcl{p](u-;Gi>4&-dfH;ì4g!\47g?ճL]Los%Ϡ+!4Tz-lѱz(-d=Wmûu'Г8r]_9$Luc}{6UU3ϒQk]}O3Qmݲz+u}cۊiy4wEo~T&tϐUdΖi
Vn٪ќE?KG+ulf!N(?K^03=U_L몪95/d75;*	9-3*L{j6.\t>>|m.2{:ޗH+xif\V#54y{
2Us0ZTU3ZB&ild]^Vy5ܜ3]Z
TP
uro7>ywrf$xbQZWg^2۷K2(ihJ>n^9v
ݍY'
=ǡ3w~w֜z*WmAOlhOّEuOuޖtv=LGm^b`5,]X6`^YLð1<_[=ͼ)v),=3hv)vSΤ-]wt}YzSjp;O02m)wN),=U)2uYz|x1}h3S]
br{0qw{]@D? ea7A{*۰G _1``ghwhxκ둁bK;L=c.}]o.0nGG=Diʴbsx>Km%ڊd:?VUcEPKf-  %,  PK    A             !   org/bouncycastle/crypto/DSA.classuλ
@лPk4.FXa\Wt#*, ?JL,t;>_
mÎ<q
%WhFHqu1z\]tGֱgjм]fnD~̜g2Tu?vb{%	س\ZqiUTO1S@
y/gQOoPK,6!     PK    A             $   org/bouncycastle/crypto/DSAExt.class;o>NF"FĲDļt}FtҼ⒜Tʂ|}`GF9<%L,>`sK22=JRSX؀bb  PKp      PK    A             1   org/bouncycastle/crypto/DataLengthException.classu@i)$lMuEIԌ˪PbZb&s| TaD`MzF,ku5fGrg׃Vt4LvqA%	F˓bσ2lTmncgFS&ҙdQ)v`QH
 u1r	&uKԽέ,s-pPK@E      PK    A             8   org/bouncycastle/crypto/DefaultBufferedBlockCipher.classTms~eIkI,D&DMV;(#
jhSx/K?g:a/|(314͗~sE@=J ͜sy9{ 8&&0X$*C47Y:S{)'T<S|Q7I	Ӗc%㳆3gu3kda--gmic\Jtν}
ɮ0DP\NmuhecEj5Man+[[˶)m5N6ÁUכsj^[003v,n2(dA.P]ܰ}vl
S7=c9ٰ&amQaf?VxBK"׍)pSe&3^cct53c>C#.uiߴjJt>zwéujF۷)A;%E6VWMϬ?-jڂ2mԈ'Tvܒy ~w
Z%ޘz7aWgWĝfMףxaI8snz2<2lQme͠o$jfQZ[3mqFSۿmE
tw>g8mJ}JؾLߋxAƋ2&dd22
2NxIƔe|suAzO<\ԓY=nIze&(ӕ=g{)we 63<zp|k5*?T0B7׸ňg=XPAVM.AB).!9.^GZ(( 9]QQp<%..s.B	f
oj
gL-(9~0\ŏ0R(LcWxu.igC.V虜u4G^ڢZ]k22$$ΐDDč'CkB+"k$HwX"{~Mhz8
W?{d<-茛ЦGax_t&]x-H)	RMuik[8#bC"{1/`'M"8	}6fCAG
Źǈ_Chx?۸7^xX41>a0ni4!Jyf	dU9K(#Z=X^hheh=҈RyG{٦)[t.HiF}Y~(1Z~ɐYEנ/J1ĝEaNt*G"oq
84"8{X!Jlb\YQU&Uc\pl>"9^Ljj7a|&QiK1/>O,I|Tt4&1I؝uؽŔ3j{}*rWSjYLkj^ʨ^D0!|8	gCa"YMs"WxpCE%RxVDyzp\\.t_m~q
tG@#?hu>2bfy3.2]f,ƴ^1j,_-)<-U#i	><,`aPU
rgjY'pI'BP狱Ce="4lKGPTH'tτDz<1c[{vܟ2?"¾vPKY  $
  PK    A             5   org/bouncycastle/crypto/DefaultMultiBlockCipher.classuQn@=;۸A
ڂT
EKM&fpܺeOaM7l
B+
VES#ͽs=s̷_=q>
eUlm<X="RY>ep",<Ư%"D3ʾx)D$D2TB'B8K}pZ*yϊgGi8
E4WX(1i&3=K .|"e;:y,kanq?T瀃9h`7l,enpq
9%Y
vDTr	5UWB)3G?fM^,Yyz4rN&mʻoT
w\>~KebZz'tMͷ\[t	VFvh1w)C;:c'QkDt2YoPKf8    PK    A             0   org/bouncycastle/crypto/DerivationFunction.class1NAEò @bDGEV
3&MfY'bFp(l4_-.f:IEyXe֩ּg8z[ }D}xsպis&ylvu[
b]9+/$z]:p'-s=eAi`7gNM^mI8)#Yܣ<-PKW   5  PK    A             2   org/bouncycastle/crypto/DerivationParameters.class;o>VFĲDļt}FtҼ⒜Tʂ|}Ԣ̲ĒĢԒԢbvFv&6Ff(  PKF]   `   PK    A             $   org/bouncycastle/crypto/Digest.classEn0+)䅍Uʀԥ	(1H:PUPt?_ H	,/NU >VEqyՍ	Vjy|GIHZk%[W^F#̍U|oMٕuN[0|:'cb	,ܯՍZ23b
Ss?=Ox?PK=5>      PK    A             6   org/bouncycastle/crypto/DigestDerivationFunction.class;o>NFFĲDļt}dV~Q~R~i^rerbqIN~rQeAIKjQfYbIf~PD32T S;;3;#~ll@302p Y PK0B      PK    A             9   org/bouncycastle/crypto/EncapsulatedSecretExtractor.classE
0/:N>C;e'(tNiWs|(w X,(dUW@,3ĥӪz݉Q%rF`d{:$uZ.R,S$
)&E	0z1E?PKjJ4      PK    A             9   org/bouncycastle/crypto/EncapsulatedSecretGenerator.classu1@EgZmDa v0,<2J(W/?yޏ' !FgXHy,M[~0+N$cZṲu6Xjdc%Ϳyf+~K0d$T5fӄb9%Yz%?."L .! L; PKJl      PK    A             .   org/bouncycastle/crypto/EncodableService.class10FQ, #ZUԠT8 B[z8\{	vwƦ3c
8-5X,e
R?9fwQk
vX#G؀V PK*v   }   PK    A             .   org/bouncycastle/crypto/EphemeralKeyPair.classN@b*񎨠RM1QJYWLH[RIJ𡌇MܾLs>? c!,t{0wsoqjjV7Ӡott풻>BNMm~!VT- ܏AŲ[Jꛚ=v\k{Ik)HQ%ڙ ;R$W<aa/P3݅#4C_T]V'wҌRonAˏ(Eİ(bYa0EDCke=$6H!@4@$n^yԆ,o"E9ʇɦWl0|hα43d٨%_{aT"/yC!7PKr  J  PK    A             ,   org/bouncycastle/crypto/ExtendedDigest.class;o>NFf
MOFʒTԼFĲDļt}FtҼ⒜Tʂ|}b5\
\+JRRRS 
XX8؁nadad`  PK,      PK    A             8   org/bouncycastle/crypto/InvalidCipherTextException.class;o>Ff
0F6̼;FtҼ⒜Tʂ|}g0ZZP`Kg^YbNfsfAFjQHjE	\;3;#OVbY~Nb^~pIQf^5ZXđDB2rRyA;b`e\ 9?%A
fF ,V<
@Pi! 	HiiogEs@允1iv-m| PKȱ   V  PK    A             .   org/bouncycastle/crypto/KeyEncapsulation.class
@Eh|~FR*(DA+qb$nfk~%Vieb]ʔu'Nz'LIr?r03gJEMYVJ&\εdL2M#
:eS MwI`X)9Y>4h=/	8Ъ"y^PK6A   9  PK    A             (   org/bouncycastle/crypto/KeyEncoder.classu
0EڀSN
N
;#X$Qȯ9~hpL=	`AN{}aѫrFڞu",}07V1
,ucЬΣ
FZNᪿ8NeWfP@ PK)Չ      PK    A             5   org/bouncycastle/crypto/KeyGenerationParameters.class}QMK@}۴M?R[W譍\<xA҂mĔv#m!ɃEGA<d;73<v?>Ig(^ח'i`S>R_3Z	ƌ3sn'3j'P3	ҍ\p\=$0j"	*ZDWB
ŵ;BhBR70bdlйILm_G_^?ਗ:,ɜoBB
r*8TPnc15Y.5%M 4@Cb^]
¦}kćʹ6FFX_~Ne3!˭DPKr@  :  PK    A             '   org/bouncycastle/crypto/KeyParser.classu1
@DkL4	.T?l݈P`o73f%_XZlT+tC~܊\RIGkLw%[W)!M:-v?"9EDд;9eeõk׵r~LBo/"( 0x/PK&u      PK    A             !   org/bouncycastle/crypto/Mac.classuKK1OtUp!"2w]>`>U:
iJ24 b+,rr8ϯ 8&EK=Oo()ණDfOٔ4c@9H--لX1-D).QN7)ϭ4?2͹a8K>όYY
xYnYZB2nx]fX#1Ebbbb	H-:QY<26c):~{߁`{k8S;P8A괯M+hU,^m׹
PK]y0    PK    A             3   org/bouncycastle/crypto/MacDerivationFunction.class;o>NFdFĲDļt}FtҼ⒜Tʂ|}Ԣ̲Ē<7$fdťh:zv&vfvFy
M<zXNb  PK)a      PK    A             7   org/bouncycastle/crypto/MaxBytesExceededException.classuK@j)$MIl$nāq!q_YaWj>x([K<_jN;\x#!UЍ:(Q8]$8D<|BI޿$i~ٞoٙ	]Td(Xx(Y(SsP4֞OP5+ع!߸atPxPK     PK    A             .   org/bouncycastle/crypto/MultiBlockCipher.classuPANAp\|aIgXlv#>̓QD¡ՕJuw~}xH
|1+
0į,D0Ywk)B oÜ-󇣚X)N+Lc2n+s6q ]zE%ՓeBٚtndh\idZ+?LPXZIE0464@PK6%'   =  PK    A             3   org/bouncycastle/crypto/OutputLengthException.class;o>.F6̼;FtҼ⒜Tʂ|}ĒDԼ׊Ԃ<F]\KK
JKԳ303032jd%%$e[k0 ✟ʠ
 #1''lZ86U0  PKVJ      PK    A             4   org/bouncycastle/crypto/PBEParametersGenerator.classNQƿK(Xpөڨ(&iؤMm)L/&.}^@n\`"ҥGpMsՂ9~߹L$LdA34ntV)mf;s3ksxḛ'ݔSDpc
FEԄ˥'\{Wlr¥>Oo"dV*vjg&¤c.ϫkv_}tT*GmQ&VR%2oȪHf]:\z7AqOؑv5]^i
fDv] A	"83XDƮo	q`"9`cFY1 \$)򒗟zB)/vTG/aZQ{0$h7JQ[q=C_JڶA娕<u +GhPXSc{wj^=Bw3VP_De,^
'}7ҢH?םdG;"1nxdZ'( [BV5nX-mÿfe6i&+cv[Wl
PK٭Y    PK    A             1   org/bouncycastle/crypto/PasswordConverter$1.classQMK@}֦VFAO
E
-%VblJ 8I*f޼Yf_^aJkj'`Ng#˶kt<t^X"CKE8Zp}!=Jn:h9tn2<sm{Dog阾xHyuYۘ0X?1&e)#UJ(ΐČT/BҽZv@|Ҋ7uP!eTE
LaÞxL8[bБ5qC<%!ҽI+-SgdsMB(? PKV  @  PK    A             1   org/bouncycastle/crypto/PasswordConverter$2.classRMK@}h?~=4PPXKO1]jff_IGD]}̛7̾8f
I2
rNX2;Vc{ރÞ7|=D3hpg\*F\)grd^{Sn:ҟ*av͎-;ι˥d0,lEM8qn>АҐ֐ѰP[{f]%P>[=ckF_G1q2б4iKi٦LG\݈!riք{ȒDpyEDR;-S KǀB K{GH+J	VteauEArPK{Za  |  PK    A             1   org/bouncycastle/crypto/PasswordConverter$3.classRMO@}ˇJbEa!INlSdbWzxCkAMdyyf3o NAa:a$sΥݫ3ca /ZsCKEhU>Bkqxs
-OΧJXNҽ\JHςvv܄o~})UR޺3`lC31omi$t$QAFk(1l1EHW\݈	hOZUG0Hbq&RQ$sPcϨ<El#2(9B#.ҊTt8ݩ6Y""c=PK	[  {  PK    A             /   org/bouncycastle/crypto/PasswordConverter.classTmOP~uV
΁mԽ e(҉`dq%OechMaO-qD?xnð6=<繧 ebC!rۅNFhr'SBrf֜M7lkj>O;U.sk;-]`UjӲt\O?9\ԛϖ]Q-İVܰL'ͪc9dnbQt{z}<R@+spW1r~ {SܧTl,Rnn
ǒWc̪g{j1lwÔA]eQR	zEf&	wPBã0x<f	3IfR"&13OEeY1FqffsZ:@R4
qYn-f'a
$S)&A89Bo,F]bXWw7y|{=zUGLo.V	nNGrIEk<|ƢVXJ6dͭa^+_Z
-x
qӥ(yM⥨bs̔@/:lI~ f}PK}    PK    A             *   org/bouncycastle/crypto/RawAgreement.class;o>nFf
MOFĜҜĒTԼF878*%3/$XR/JO/KLN,.IO.,(J,ȠKsfAFjQ@bQbnjIjQf#	꣝<5Àvp03 3@L31p PKwկ     PK    A             4   org/bouncycastle/crypto/RuntimeCryptoException.classEL@"&il&􈄜;ϲ"(はMvv&3`b;%C/
Ym
&1^]83)oQxiEy	(T݊dZ 5&4k>Ci0@s+&PHޒWw'o/PK4p      PK    A             +   org/bouncycastle/crypto/SavableDigest.classu̻
0c1	蠽
#Q0c_E"Q0 C!B$$$Sy {֕*t+Q`盂r:ieMw[dgʂCc斿Ɯ@io~_ґkaBb"HL%f)H,İ7PK\      PK    A             5   org/bouncycastle/crypto/SecretWithEncapsulation.classU=0R`0 (ꏢJ_PTLL>Kߟ+r֍jUy'bt0^Y:׽m&:N"t4#Tm PI!~׎ۿIRb.QUy(f#k1)PKk+      PK    A             2   org/bouncycastle/crypto/SecureRandomProvider.class;o>vFFĲDļt}dN~Q~R~i^rerbqIN~rQeAI~pjriQjPb^J~n@Q~YfJj;;3#بb̒Jl, b PKKn|      PK    A             $   org/bouncycastle/crypto/Signer.classuN0iCiJ"$*U	pI]'ry5B\Gb]>3|?_ nq!ЋW Gh3ɜL|2ɐU^tn-qYF+QZ<yZ(誰y(j5ܚ6+یJ#p|PNMn}VdYRE,
7d{ؗ8H
Di.dUVwL
b?a<F! p[a	vw_PKslk     PK    A             0   org/bouncycastle/crypto/SignerWithRecovery.class}J@M̓ˀ+
4;i&0ͫy|(q	^TwCU}~ !͋՜\sxbz\.mfi%GaZ<7y-֮jP
5&8`{Y4gކ&g	F[^M~)e?!$C !a:Zh'1@8$il"ΈL)my|PK0   D  PK    A             ,   org/bouncycastle/crypto/SkippingCipher.class-̻
0sqHx4LB
Ҁ8֕qٖm0"8W|_o Gl>4nf'w]Jyn;֙?Jy`ކ`9pH(ssJ²$<Q*, PK      PK    A             2   org/bouncycastle/crypto/SkippingStreamCipher.class;o>NFĲDļt}FtҼ⒜Tʂ|̼̂t̂"FB
KRsaUp*GR  PK@}u      PK    A             -   org/bouncycastle/crypto/StagedAgreement.classu;01)TnRJ@e'A(8 Btxy/ ;L9:JEaӃtAUI.VIuRwLtlqjDJ<\[/CBCLxs*.BJqblYۮd|/FB)Z
3PK5
     PK    A             /   org/bouncycastle/crypto/StreamBlockCipher.classRn@}:$@:@
-@qH)B-*.ݸԵ#gȽ_ 	·qH
ٝy3ovv}=C5aPb0vn3\ߕRRq2BE]1]j7DXAPrca
";|$=pP'\r#
|\ȓ$ns"E*ߒr{L.\~!3GFqGP(㓆+2vU:iu^׼qAo?e_2e]
hdF*2РZ)"
m`fqi#اA14nݒ9mLEPHqv$JDU:0jܩ?ǐ&G;#kP0u(2sg)sD}R?/W'nM|j&+{%'&{ZnljfEjuS=Rb~GxJFkJp4c{dk+(JƸ_PK? G    PK    A             *   org/bouncycastle/crypto/StreamCipher.classuPMK@}kF\Ԩ@QAm)&N(q`{Ǜyo{	C^(qd
Q幼$W814YkYiKVwVښ4*2;dZ8S!sW3l(-Zn;zBlc63;m))l<W;gWlA0n=aLdWiH:~l3zNhu?oqU3(K
TɊ_P/(PKgE*    PK    A             %   org/bouncycastle/crypto/Wrapper.classuN1E
ᕂvKEJDD*Xm:!5
>BxU9yܹ	gn1VU9FǛxqMȬ1ur%E-ӹVtو_:Q7!zQۭ
3OzJh#\ZzafBgS.ȑ8!cd̀pYvZKND͠|&4Ih#8I	a[vA[扄v* PKU   ?  PK    A             !   org/bouncycastle/crypto/Xof.class;o>.Fvh'OOMO +%-3/1#%߿A +,Q?'1/]?)+5(__\X\\TYPZQ⒙ZT(KaD~;;+;#';RXl  PK34      PK
      A             "   org/bouncycastle/crypto/agreement/PK    A             9   org/bouncycastle/crypto/agreement/BasicRawAgreement.classS]oA=G./PڪTPh]}QIi4!ڈeeP7bj&(*Ig=sgful&aX.4xG:[n(DKs*9yZO&nI_iywfVq-=qbPº|-,Jݕk°_pk'+rD['Ac_8TsxGyv^[v/kqćڵq43P>^OUWIϮJF#"L60c`Cqd+g;*[[\iWyV{hxlp%P:}Sɑ.g``$L
q4,Z9I\$2X6%i\4)̙G>3XpY*ݿIpo?
O`
ҠgN(Fq')(".VH=MQxKhg~A=uleID$KP(b#]I4䐔jj!9	d<Dp3[ϖ>*~PK&    PK    A             3   org/bouncycastle/crypto/agreement/DHAgreement.classVWW&CE\J$ԂUHRARqe2LF&3q2AvoYhkm	zNŗ>o=$HI"9~۽?Ѝ^4z!yًԵw=;4(DEfLu2и(;r㊭쌀pDYhFJ1lU4JѶL͟^"2C'S)ѨMIf	wIU6g=ZTP3ٌh^RLFW%:=hVtӡpU+EѰeH]*
idv)MQcNM)Y4(+B3>q++fJN	fmV$	
+3JPL-<lLS[l*K;e
?	Y4?fRN*8a]61J
MTq"U)EiVVTsqV\ڱ\*`ꠞN2{x`qGUb(V#CemomykV,ܲ3u1#%]{3eɗ_
k\_E?ԨSI-`]eu'Y:r)hzo&S))~;Ev""":ED="9i7Mwr+Gˡ*L~:sS{l8L?A'cRNUV^ejt*7:
"ּU ̵hK멒LջNksݕUj\wmUF\jպɮpUj;~eZ0h28t㈌
ex c#1#&cǈ؂1[9l¸V$c=&d	>V4Nh㰗gd<Ir#^9pxk^zHE!pCZ琒p%
10|HHpABShזA+A&zQG	%n0{-jh
+*ƮK֓60nǋ˳=Do`Kp@(p8431i|y7t&[㍻EJ ;.|Om
B	u;cCͤiFE#s,I.<H3Y搣GqV1u8[ڰU}wRunЮQZy6WOhyBXy8!b*sWڼ}lǛw;EM|yOn-`<^6ս.qao-PKDqb?    PK    A             8   org/bouncycastle/crypto/agreement/DHBasicAgreement.classU[WU&AZ֦UKK**\"Lt2EIu-\`e&tJogs}s?"AhA񖂦x7K»e:hJMO(JMO٦y?*r+RiW3_i[RʊinYfǊ%߈Y)ul3V|Чl}A)<syΟ2Ų<֯5+Yn^^A`Qظr^ට l乱6%eg_r(\-AY4h7+lyi)rn2k @imR$Aoe2
έu[6&],	N=2x2Rc޷XȮR-*0/Os]J"*8Py5S
<놻Q}Q-/2]/-rS|N`{FjtY}TKJ+fTzhv>v۾Ms
Ԫrr.3VTV3*b*WUWѥ"[E^'gQH!"ώ}@J<:HGW;|Fu	Znb/1N_Z28¾?T|7V^2:[$UgR>ލ(cDkxphEC+T
,Gjgޖ$5(&5D0%GW4$spW[n&aV\}"]GXK!ᶄ/C[!\W!JA,0$F#IɤcmX D'1<I1/)b4Ov"=>|TuZBs1'z126.`mo9rl$1zz~ý
째Qx[OMJ!4A@ť0iNmJV**0pJ8?DEr[&i	Dt4T="@]- ݢ]:?mri{mEHȣx$TӿuGo/|-_qg7PKVN  	  PK    A             8   org/bouncycastle/crypto/agreement/DHStandardGroups.class铝GuZ5D@@HX`0[L,ő,Yɾ'{VȾ(PG*Ek?KbLv<sNۿ!x|K/ߵ%^%^%{K//߳%wK|ߖ8rSguf!n?u]evls_C=7~l謋Ybsy꼖:fP-T]4f|r9ueUzk(&6G
Mn<\GUX.j
6ToѼJUnH{19gZo*Sʸʥh+.%d=XӰz0\kFC
TmG)s;)/[7vLmTEe-ԥ{JcMGc*R)1bCi{:*lp_QVOl1QKe)tĢMhصf+^3F_6+5*dScƕR
jD*U|X?jjd BI5t^7+#ٽ2IY,-S5!YZK
o!e
Qg@wե:L*TdDB2Rjmx&}p3.;k.P
Oqt5=u].k M@d'읛6<WݨZ	5`8b7UJ K1ַB*7)MI1<a2-(&Ms)	]0­
^j9%֭L0uZZxfǳ}DfM֦dky8ӳoYжFZ\AUIdk1j\.ZGABKQـ ciR ,k[N}K
Jzt4"p4Ll̡%.P~V !pY:C2|ALJk㣖FX&IA{i%^4gۭF8>l`&
?sJC8A빲\?H/Q6ͱ܊>TX*v4Vv[PA`\Dխv٨v͘r2@;(*

⍚KHu#)OW$IJUC")B!&FZH]Qk|Vex8وR)tM7\)hl~كQ2tB Rf"`0ʹ!vM	:'9Qb &Ɔ@fz,Cso	=%7QcMlÒm<3Z'!\FAqAIVvX@3X`l'o!W/h!AB'=
A>E!	Cz$"Nz %a	pX Hn=L)0<'R ,>oHC	8W	
H	 fŪ)qg*Pz졺5Y]eN,cHN\&VLm&)
.ІvCA;I|ͩ-;	s@-hJ?|L)rɜB?Чs1?%{DJ>Ie[+[oԴ-	Z5G܈M3BK<0=_=BR{$97JQ0Ě._&#}% "Z#*Ӈta#"HEG#ٓsQb)\ǝb1ő=H傎dj~EL*RKdA(7 .!${{j$*=u\>NPd23;`tQnH)
0%
JT#v/\lfh8B@)d\ӡƞq{1f-Y	jÂR&
ư[ŕ&iR2)&8#Q>"J`|=[!N
͚{D";dr[wN.YQN~8xu7,h\`(C	0PJ ֊t9'%144vcԼyF!K: S*m*mWqc6\{G	p&GQʽ0ĥy^CU
TK܊m_:̓O$t/d,[)]x +íd6 k7q]D.3PSASZe:
[NʉVK	Me$Za$0I}[rlr8@_ahjҽpZwqp+2y (7=uqU-r'3AH중ZF^[vT#\y:n7bưm=qܭG	n2ɎĭM"lZĲ[h]I$&W`TcK0h'ΡG%jMըĲ7T	 4XC F=Rn\0?"7 4PN:Qemf76AlH5RG	`5'!#GUlHb\L&ӆQsrLq:%KWOcހ8Q`$Ur( ;ՄWoH@쉽4?^ru'Fu̆'2)6Ly*ԍt@4k)|QRPk" !rk~X %a	pX<JZHSa
8L!%P@d
l~?S=	<X蝉j? byř8wܿ흽^8G]r޽/w|`/^>/q?7~ç˅g.߻ʗvY@_z<zG^ۿwՏ<{{.nmCWz+>rm!^tٽ{3<]m<.#]vzyj+Ӄ(p惏,OtεA匿1[/>c}\͛&,;'l4aٱ>moi6oXǯMJ[͛&,;V~;h.]:]Jr8Tzܹ޻}OȓpቍO87<zbosy
ۜo'66?;{^wǮ=|[/xݻ!7o7rTQCGbo{j^TfU=΅Nm.׻B<u殧{Sڱj{8?)8LzϤ]l#^-4i{y4c37ӼuUӜFO㦉ӼzL)i4}{y4o-?"szx8-~R<-{ܶx8?g8ͥi.OseGiNsmi|hOi~ni~i_4:ͯM1ⷎw<&-~{ߝ14xLW1[]rkI1nk~XxX&ĝkbկ-K~ϝ^=gמ;F4r<?_oNYz5k~j59˿y׭ͿXׯJjƏоo5o}jM񷭍/hu5miibǯ-j$w~C?}u_=|}qq_Fo_j[,ȿ_ ~q;w>./l/~q⛼⿏z\ucc?98q|!yށO/\vbg@|bg:x߲;G'~|1S8_.r x]|@|/׶ħV>s̲oֶٝ#]vn9[vV>8_vPKn8  <  PK    A             :   org/bouncycastle/crypto/agreement/DHUnifiedAgreement.classYSA	"%ނJz^$rIU/˸]6	U|*Z~(5R_gzsQu$5g|KtYC^ O,֔}sI9]w9-:+S슰_^|.=hu*Z̇<Ysw葠=R[K#I))|#4$haW>yIq%xMfDX0rc/6z#
W+'#|
Vwjݳl(WXVSU+W-EȰ|""FˬtҎpt7Pٓ/Xa;ce%]p+ZȀ;zmg?sWwM0NX0S#FEPːb8p!pqTd?/34塥WdZFŽ?ѽ4Ǣpa["4񈷠4)՛%K9UMDCH1	A\2MtB	5pi\7p
~"g
g7p{2	C2_]fdi1I	H'0\)YHec#
Z

,cf6ID#Hӯfb/tmq	(ʦtv~AOkȟ8ő
,6p,NΓ5 ܑmubW}LOw[G)L){2/PK0  T  PK    A             :   org/bouncycastle/crypto/agreement/ECDHBasicAgreement.classVmwE~MZ[$(iK	h[5i6
_fnlw?z49gMJB馠9'ݽܗsgf.twAS]P%tƆ3>^Ȕii	tjQ!by2umW<+i7]6S`
nIɌU,iiL0jp9/peWk2idw.-%̦_	{<S]\ˣt^vL17"n{39
ʯJ"MV8M$slyˮSgr2=@3&iˏu'k<
//A_1o7QҲRW,J!R6>OBԁ6K5phUXbX7Ѽӷt^LǦy7Kk\'||42
R񨖄GL@S3)m-PEG׈:e[Y<բgY["|݊nb=(xŃވ5f<S ߡ%Oh*9^mLo-fG1d0ckzg~kh~~|MJk'wB.q:_x=4{L!AGe1,cDƨ2dqR)	{kԤӺ@l~~Hs!ҦMSo_l8(X`)nK`j
uS4l2xΥ􆶳۲DmOk큝}@X'eD`HM\+xXmf51|[&cRуØSa]8YE/~b^
O㜊>̫x*x*갬b U*`R7^E_)
&qU@Ne SAR$q]`
o	`
Upk
fY\Z,=txZ谢(}a
CHGG8$#bX}ϰ6mI}.A5|}K
B8vj(Aoqۉ9#8k/$x4\IDPxIq3[5Hhd	k1e
_$Sxk?	5㰌iΘ1{O\pPKV||  
  PK    A             ;   org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.classUkWG~VH6l/ZKPB,T@jͰ$wОSW=w +%gvy #xAGFoe`jhGx'җ'
B>?;a@Kު֋u޴ʬf=|ϱJ~	ϪUAM𼷪,4-Q<_Zj0W,W'վέU?""I'4Fﲙk]&M
2W$)v9}A$=p9Jݼ%
AkhY
j᫬@
NI|UpTp#KsȲs|E<n\4tҲ+ߠE%NV4Xc
s];]mͫRe͸^\6YD&˹{;<R+JB	K*TcY?prEMդsvЬJ?7j8DG
浛}4I4䢦tnRv'1)ѐK@4x37^4;μuۤ0:~ dB<k^k>_6%>{k'Eq8㴎3:8#OG:t0
8'sr'խ|ERM;hoa&SC(ZA̱25?>/|6JQxwO
MtQ_v>{k9&L225B2 JnTR5w|g5R4a኉Ld6>t~jmLxWQ97ыY](8&3*896sݸf:0Ep0|c;c
w
o&Lbe10e|[LY+%>	R'|D#TS~fZ'q~@O_.77PހEXAE
pC?xo~BtZ'-`?½Oa9bmP	J|\W7`"՛
!hi+To{!t-:%I=D(fxs1c9Fu\1 PKbX  	  PK    A             <   org/bouncycastle/crypto/agreement/ECDHCStagedAgreement.classV[T~)1tk
sJ'8`llgH/i M[o+0G{ {ss97?'QCkJ/ĠJhNx	+c"tzjZPV(ږmӋuL-u
g^QȌ&<T49.tVVM<s/1m45-QKZ4D4t(:g;>y/0n2	'36ҮSE)`Ű(_m0XRuY%L^ZrJBؚ^-F2_~lpc29	(p6=Kha!NaEHjwR%̺^֓fn&9<4X[Cc\]gyMy璓9pf2jO)&̻byڐU^*!L\uKQ1"Y*&ȼemfZ"\-_lxob6Mүa%w%
:R7oQ9*SoJX7X7>Y_'f`6]<:Ce΂CrwWds22e1$cXyIoI4\	LINݔx:=c_xvJj8Q3U1/p5Z#(cw0ݾzm>-\N|qrYˉq,'
r:Q={hCVٟ((xʹ!+w_p4CG.Ԡ%&{-xx1DUYE'&nU0"$2*^u]x_ŋV*fT	x8+ 9q57UՊK>TpwZ`(
ͮ)x˸'`YOcI'
R𹀬+)x
#pWgt fih16C/xΤtF:wtAlbW?*T0݋&cwXoP؂C?H@?xk*U*%lCiMsOZ
T<$mHz(!ؕUu_nSD!Di,燉?	.,w6mb*mB<[G*1PU<o*ƣf6{?O0%Sq_PK}  f  PK    A             =   org/bouncycastle/crypto/agreement/ECDHCUnifiedAgreement.classTmSI~&`Ԩx!ixDEc4lIN~}He~Y$ޗ~{}	9d
|f`EFq
DQn+"MvZA
<Z ^򎯗T-"nR
%%W)}A%6:˾tc8J7*~\Exiد?nZ.qWѺnh۫cyُ_	\vKyrk./lWuvbUjU"|"<qn")P)NȺ~oa\r/\gvqgXkOsiq'ípݴK^N|!Z^lS8o0ư!p !a#GifyM:QV9]6#魨T(Ŀ(H H_87S^d	{/k
ŠϰtGM+w{stX8'ZY8g!¶,싄F"1K.[0135qLȚ\$&^5[&NH6qwL
E\11: IJ
%+C6I)FHw
ġ|=I҇Jg?c-F,t`qwAOI$],u$a:	0&>&o=.uQ2_-d0r
˳lcn.W*lB˳/fPKSF4    PK    A             ;   org/bouncycastle/crypto/agreement/ECMQVBasicAgreement.classVsFL
I	
&!@ (ymȒ#ˆ@޴fh:пI`M߮޾ow+aa,C
& Wzx#ToM@/eoTɬkc+	=,Z6?Bk(W4+Lf:9%r¶̔2n*YV3av.X=JA5􄢦l23%iيH@ ÑcfITC:'4]JuZiݖslr!OD`9d|U)t&Ev۲l&Iw. 4@#XRΐme茨IܓME[5l@^au^<RЙ1<7{LJfj~ʷ8PCPI`xo 
4;kDS<=7U
m	6hqqLz
TozNj,I94"5zc]ztXٔÙYELPYv}ʛڸ3ݯB +I#VcźԜ:VI]5R:lC%Ƶy?ҪyJ^oh^fW8S).u͛,R9ht~^)k<XRҊ$XFu)֝tϢu2ZsgfjJg̿,f)˱һ@R#Cu9]",Ih.L?aI51V	hZ@{Nz6(^lEV*H17θN>tumor_Ҽkrsoŵ~wt%r ShȻRro|x:ŝ٭D]^:Iuvڟ{SI|*FRXi|;zǭr+F 2OQW`jU><7˛[TUlVO<"-aK$ԡZ"$@XB%!	KpXq
G$ϡKP[񨄻8܆pIXUC-4	-Z9` RHG#.YȈ؎Q'8<Yω؁"^ϋ!ݰ9SD_E/!b/"$Ecnk{UW$v'9@M9Ř{zZ.՟^Cr,`IKg_p'xgoO2g,7\|⼋/UU/4&yda]|nmmEՏç\~]9Crד9Kq%%ZW*_nώ}tx*߿x?.ȂׂBx)xEY.>4sF^Xt!H^$G\ʵ|u[t.EJP4zudIn&i_\rPK  +  PK    A             6   org/bouncycastle/crypto/agreement/ECVKOAgreement.classViwFB4M(,*KqB
:)4+q@ ,)D%#}?sCRzFVȡ9wf̛7#7 taY" lxxc~n$u2\%Nse<4pxtNU
)ДVQrjQ9ؖdjXJAu<sS-cMs(**RVM#XY.2m;\ M]:zZT]7S2-Ǵ*ɥHTk6|4kH1kj,&̽j84Pr
SwP@+oشZ2	.05is]J44;˲V``fv|{1KwsG5{k'2i1O4sZVSj驌i2]5']i\öhwN0<zR\3jNi#<m(d[NَKVԢkT
I
0BN)D]?)~Cz[ӫ"y*>L8F<*u^uϓߗ1ܜWxg4gC<VZoD/Ҫ{(%Jnq
Vő~/cMFPi&O[*d)[""EtH*bE<![v;D񤈧D,[H{hc+(;)
mɱץ?w']t<W$ۃIS(sWy-ϟ{
6xh+i^x9Y0((hjb$]q
J$L8)[|EOc'c3&dFDZK	a\H2zDÐeY.+Sx2導zъ#wTJelЉet6 ^rg$!ǡጄ~aXNrp8%ACIH
NI@P,^01Ls08q`. 43 D4z`SL_dmf\-TLF!Rgk)F@o)#FDqotls	x|N/iBn|*>=Wp:i,7lqg,ޙb֢	ϣ]ƹk$9K*>B_x?pQn	]xcіxϮ*'*ޮ>?t:H,>OG*\$U|Sh"Z7f*J	ƎX[,b'ĶX[<˶gq6oXKD5RHBO^rBNĈ['b&PK2'@    PK    A             9   org/bouncycastle/crypto/agreement/MQVBasicAgreement.classV[WU&&J)6BRK˵ZV!̤I(ow|kooRL)'3g=7 =21)d1oUjٮ%4Ҫq1E.َ:1C4,0P9w
[SvN3,59Z);j%Ψ
iHsyۢ٪c[']QQB-]4qfeܬf]3fڶȑjI2}eض
C!\5Z2aKZt;`D#z4%fN;F^ekZwl2fg{L@NRuApYWs
u6+nyZxYifrk]2IS9&̘s9@8mRsT	#oRSI.EK_ӵk];9 aeNY ,&[5AtTj_ݟ}T{ʪNn{*TR|4QO-QՉPES"N)"!⌈.tS~oޤl[Y1L?z;PcOٻ~ؠ;ݩJy~$e~1KQcTH{n_'ǅڕ
,A
d$ s)֘ נVsõ*2bx[k(YeD (ѰvxË^Ĩ$e(ъ+2pWe8U'1)S2`:pMzq]Bf9qxtiÒs@"mVB
	M@%\.]7%bm	o5׻2k&qz좎J?ĩJ
G}Ύ*\oF_x}ޙ?c',{X6+dU<<\10Q|5"LTT3>𙇏AW7ֱ{Vv."ls#:JJ*%Ofn"+Rx+)Mp?AS"f_o `JçJԃNJRB*%C(tRJNC'8)'d4VS1%دclEDPKcC    PK    A             6   org/bouncycastle/crypto/agreement/SM2KeyExchange.classWxje˲ep*I@
ᄰ[)J%&A'bL
${dfw:I$ޛ73o̼y{0̓y,C_1
pWjg<?a	aۿݔFsGJVI#I@@M\FO"}Lקz&hIk4lƗH%;_IFb
b1لz"֙dVKd6e1hjh@CTKDs	-GI=E(E:,*^id:R~#=eTR@..$ɦ5#Ԛr4k)}Se|Y-424lDKfwz[Z>%(3dlN]d$y]F=]Kk䂢
P8Z<Мt{v׳m?&FR#J96E)"nqlZ.ݞN
鬡u61n$ih*<)6QoKQd}V[۰S[d?OZ>ѳz:c/K'K鈖Pw,Ten@2'z.:,Iui+؎TLDJˮӆ7E	=%|
Q}*̥_LbVI[R՗ӣ	>HG7Yt&0qrj70I3Ha%(hd0OM}\27e	);M5utyv5I6zr=n#_Lپ7ilMa.?qrUvfj*If#k2/oSg xlQTzg+xUJmAcbhmg˷<X7L$}\(-OQi69%OthHJ_L5֗ gVخEwӣc(IҺX܄fk.]lb2foؓ궮˕lʻsC1M9}5ǃK"!"	J-ap$JZ.	/R	Hxk%h$D%$Ȩk*nJ)oi3V;E&kvjwlV,Z_ULvɔk!2Ymk%&zqn-+AY?|y/}hj˧VV(0M(+MQNV;MJ'3N/Vf6Z(`,ſ "f	-dtBkˉ2@Ͳ>ZZ#X毐o͔kJ:\!fg6U钞l4TUmkUg5>Mg)L[֥"PKz[[Y[* zhTp=+8oT
oR]
v3f	up*8a6\
.[YgheG6xlg3PW,6kpRު:4Qp>ަw}
TyRVpC3ޣBո_A(3pޫ`#&6xx|@Qp>`!e3C

KQk1E$z1|32eabxLƍ_a*o~{?0I+uf,7K?2/e%UyW_d>Oe0|K-[qk2nfO~.v|{2^2[(~,xK2~od܉xI~#O:Uݭ
7nRiTUnRlR]4hS}ҽ0i+BKB\@pP1hLyv
Q90&(^(lƽ}dA ּXyuqQ?G0;hryhřxǘ58F"8t(ҋy4/\	gl6YAY~%Q`1n{ K!šo
mq.<r[@'ĂQ 3	E`n@T>}Lm񌠞neUK<n;vBPh@/w1	
`}I{3\r5Ya޻,愞Fݣmp	<1HnH.Y:P|(e?zy%o2ht&-jmh\s/ofL'\#P=2z:<oenha~Okb7µd+N
fostKjA cWh7kiЊٸoAkjX<0s[FP9IGiJ^x*_JİK+GuOdysqqv^44of
?vlz#:rHlhvIqQCntK{4=|b3tc0cÇyN$&GūzZdGsm#S>٪WM5SKhUݎqqfC*
huF艍GB\Uj4*fȉ!U*UFZQW̽6ּH5j޸$(&übYWҠh.Y'"9&fA"5h~FPu:TT]v\k.6l
q!lE^V%1jstMWp8
ɾwjM2.i^dkn- I_t4NEze֬]uA7?a=s|E$ PK\K>/  :  PK    A             -   org/bouncycastle/crypto/agreement/Utils.classmoPP;{ѩmb*%ԳZr8%OR?E_b<mCKs?9ǯ@x,^0kZ&{( \Ekъ%;d'62S$fxG4ʊԮL0AZ0BtPkjJUerHt&`ݦRKoZUVي
%BN
oOUkOVQʹXCQqSo=uou|z;zթ uNݳkc/d)Y!8'B1-⼈"""]VV|,^c[x^±34-L6s+89r.[\N(5-#\IdoreG{jG{4B޷LjHͦȿ[8tz(1/{׉e㪌12D,ʘ5!\w7dLbɝJnq	k."&2cC,	sHJG\HuyVK{M'E&	Brgyc|wdm?V#2m; ;@9\Q)PKGQ    PK    A             7   org/bouncycastle/crypto/agreement/X25519Agreement.class]OAߡu-E(@"Ilh4&^M26iMycx24&Mvg̏_X8FRNL`쮎ǝ76J9%C!:
d8jX#ud"2,2hGHU%<=Wڊd&FINeKIm	Z܌T[Ɇ
W]_*Vإ@'+1È]f`dZJ'+pԥP1zLJ2Lwlj֏x:8tu0 '+Yu}̀:9LNp;At8vRv_SS9\Fʃ+qՃ	\Ă<up㗄8H;}v8
/X8˽F8NWcrKX9D/`IW>sKe&0כiāf>5/PK#  z  PK    A             5   org/bouncycastle/crypto/agreement/X448Agreement.classSOAγZTPT-ӤQDĆFcE`|2Ε6&mKnnO UlLcR S*tחST̶@U)Pdi豯)4yow(L*4@Χ4iJ1>JC} "[
L]G1i4#d[}y<vf
'Nl"5
mQGJ++{Fd0*HƔ0@~0K-.U{:I4?V3P?D;>ѳX8o!gaB3V%p4\S>!t:BwOd'TPz06Lۣi[;*ܩ8"5Ӹƍ\Ʋ"nژ-pVԢ7{(B"
_,7V|g9\텗6v_Z/X=B>|!ٞZ&R/ils-n,}CXPKW|D  l  PK    A             9   org/bouncycastle/crypto/agreement/XDHBasicAgreement.classT[OA=CۖEH)Xri,PX"HxqYn/I$
b,6
f;g|s~RxW-Fo,Z-10ʅ
Qipس'k7{{R<#;|6wL=kkIw(yVahot]P{z2'L]QaƬr-Tjz!L3]S,9FeVJ^Qe0ڈM7m~N_BCfP<zo	Fwy/+\x&*krLxr+.НZt2EZ*<UAk
:t*KA
n.s$iАI.\w2pDVϟ#Uȝ*hQ`TuQь1"x1h&"A?&#5VbJ4=ڕݶǍU^z7mahkOI#<!\^3Z3N9;l@>#Ыǈ#^!f?"N~j$5D?vNVEꇖC$/MA0u"#nE魙3Nm0~Re[h՟u"ptXNT1ٗ/PK wl  Q  PK    A             ;   org/bouncycastle/crypto/agreement/XDHUnifiedAgreement.classSmkP=7]uvӽ/3SaNӡ"x]4-i:/gܘsro q!c#|0z>CD(W끔
umdKL 'ǆ2tjD$ۡ]'١TWP=/lOuImO:D6]kv|vI	i?J~s}ʝo9h#S<bd(6آ.E"B%c7
4pilp;Uɸh:\ABn_=XWRJ{*kvA
p9	Lqqdq(p81iC	cY\4e9\U0g"Y%3
\kH̐)(R_4՚N|S'^hT`df.ʕ*!*=Z+LQJ5:hX#R]}XUyA?DZaIǟm͛H{ PKIz  R  PK
      A             *   org/bouncycastle/crypto/agreement/ecjpake/PK    A             <   org/bouncycastle/crypto/agreement/ecjpake/ECJPAKECurve.classUkse~MtKP.msi@"Җ )
PPtf7l
ŻWuH`dFl,дf1yξyw_ W

lRYT)إ`g>4|QB`(=<'iQ	NieJZRЊYN%]Qqfh+5sDhrf iQ9^҈pܜp5#+^ANb;
^J}WȮK 餁UVB[
㜦־(u$tCVDeS>.Sjf\B	g^7<Ǖ5sfkVs/H1YKdj^ԗdڲD^| l/uEtl	f A-$|Dk-⅊Ef(Ybˆ^,4$+J
c_dft>ف/x%A{,oTDG˖=gtϺlf
_7MQ(/ޔ9+UY-3GδMW,qLN Ӻ"f;Pm1"#)c28(98$ajwkTBb{-6
M=yϥ7}Ci7oupZBʵ6ul툕k*
4ZpnL./$k)e"-5B}?l?[qZNLpFEzT$ЫILrFSȨ20⬊qN8b.`x/؆Ucx(TeJj)\ex-qB"G`018ER!)y<P`pCHa<N{5mrYЗYbUS
a¬$
瀴
{.{x?	c
@MGXe]7辏Ka.n*]ok |{xQ|_םm*{H_H B	>h',E:#rh&	_!Eb(2R2?}?7jN6
y*n-_h[s1[OGV"~_w*
d-uwGWa6HH 
? IJtjƸ`Ě1>1Bvc$HwUӰU1W8vopbofFI|қpPK(Y    PK    A             =   org/bouncycastle/crypto/agreement/ecjpake/ECJPAKECurves.classSkOA=C[PP-hj1D?2n;4&B41~Gוּ)a?sg93o 
(USa0DR]uܖx01pobi诮~1cW8a#&vSn}(Omvli>o#<i6};v :ܴ7g/UnJp?`(0i7}λ&w=7لTrJ~ t}~޵[IZ^(F |{
L++ಂ+
26O!Ji`<\Ay6+'O>ON?p/RcgVO5UMID
\-1o<p
IicK:f&#eYבaЏ{ay{t;-ձX I#`%k&d!t $lW$^g?#sC~*bÄa:*gG(|J|"{H"t%RsRTPKF`  p  PK    A             B   org/bouncycastle/crypto/agreement/ecjpake/ECJPAKEParticipant.classXyxg޵Nŗ`H6J$@bl'qqBIFQ"k:[
-9JRHhKZ(mX%4)wKBY+Eiof̛czGO 6yXᡃsy'.zx<$:V5`P
7;}Eԍj-fbTЬ=(F3QQBݲbgX>kJDڧg}JՌ+Ue{=&B^{\bxH(ߨTlÈ?0kԳv2*&e%5t\rmlv6)plK
c,4`
Zxi 0;޿?w1hN
O!-mGvOO>;<%wxKNg-ǲ!J5
*j7W֢b<.BآSeИe6s0,aJ5` d+<8?g"Q)FYލ6k#]wSF-	倄'I}(*N/)#	H#bCXI
yÒ'#hfA̍'- I~pBX6${t/%bXwbɨ`$.T(-S$ aҘ*3<L#z4j߃ŏ Ũ((ũ,+Q1vJxfZ9J)6W
yKU)\4$E$AEYw~c	U1NY	$A1F%wPۧ5r cR8P](Ouİ"Ittn)7.z]XF,3ޙS>66ڀf
=cv~W}Yp@&"uكѪETVNQ)Ձ8%E3藻WQل4qQ)?	IV0 9Ǘ7O]"=x,v
e^4?0"#340dVMXܿdyU4&)T(F-/ȍ^854kyj{MC0.9Ivp+9x1/@` !$vs`r(਱
vH/j%)T),)(X2Tz>T~E%U]trr$F4;V@xh3Xߩў1T|jQs[
%R 7ѭl2ڠws\亲]	dE18.6-wd3ZҟӠ5*hIFA\%-*Y_0ajefnՎxE dJZ>{ r^?MsYnLliچcҠ(WQt*[-yZ7բ;+lB$$ςFEY*Uj/D(UCUnJUPՁUT8LEMcTfɼ?|W>k/ͻ
Y'}V>2!
ndx q	Sk%H]\w-FG 7+ecq-`RX(E,Gx k~6l#	`<$`+`|H>~  ),p1GHݣ>B	VI<ࣴ ctq	.O
>% /4[ x#<H%/|_#:7I-o|7p#M]3ܜfx3O	~NV~B4f
~HkOIo	~OQp;/%3"7sjj	Lufxwow?Q="OI|:!Fg7$c1IED~
lOa1>N	 ˠD^ȟ_9_5;r"2X{.Vjbiq]mQl6N*bsiVcz@:ݮSNő
C"
BNWÌc7"MQ]gԣ<N[:V{\׻-#9ǖR.|nh3YY-$9q;4&slI+ή)9yIIBtY	D'YI6i3%iK$+F{[9x#spoMۗmP|Q]OI[wpqyrc5ccO:mkAmHX.Ik6#xe%C9r^maŌgpnWBkL-N"LA߻"4G:ƜIH;ډ^d6$a'HwaB)֧غXKQ!1a,Z3f^-xxW3Rl'OS!L6RlgE6SAv9-Zzh鱙lus{*1&<#y<g椞44VIZ{80aJ'ɚnU:wۋ)}FY͏#/?Z0y	z:nŌraBEjSlh}Q(+)v0IX*N8{x4Gz
m0SoFc&rtsV/Gz.^WaXch<~!z73TEťJ؜Bqvr
}zKlHq+Ŷv#
q7L4 PK&  $  PK    A             D   org/bouncycastle/crypto/agreement/ecjpake/ECJPAKERound1Payload.classS]o@p&nB'(@U QoWp\W x~b/$B#h0ٓ}߾6n((((kj;2(k\nmM[*#&]EouIpY,/H>f*ǎw'5,'$d}Mľ+#o2R8̏9?t}l?q7QqA(r Ԑ~#]&[a|fί3n8U
w;1"/..M0GT TTjI(}biG]Eh_NRG<i_m@UE3PRyYd9%W,+Cs8
uXthK0fqihdtСf(<?Y7ӟpajMs2g]²C
fWC
.'5ֻR\src"p1AMSSPKC.c    PK    A             D   org/bouncycastle/crypto/agreement/ecjpake/ECJPAKERound2Payload.classR]KA=cbqYZB "
m]*ҷqwn\g8ZZ0U[-E s93U,+`QLϐ{l00ΐ
d֔k,PxZ/;Jj06u4o1-|P>Jo(T]Xvry8Ҹowpy44<ލW6hascg<nĮ2qG1+:{FG2\gXk'x?JM~174Nr/_ZzYEQ~^oa,l!0!c:)3I-"l<R@{@7;qɎz즨xdg~bafTWRrUgw$\ǩ39]y<M&RKPKp~N    PK    A             D   org/bouncycastle/crypto/agreement/ecjpake/ECJPAKERound3Payload.classmMMO@}k@A4
!Q?"Q}Y6kn4xӀ0o}|}|8h'	l!Nh2}@07"j,phDadTG;Q\&F\DP˕Anzѽ!/HbYr[F3d(=?tXUBB\r`9pMY.(Jyxht9OF0bKwlWEP\+0㿡lks?PK H+    PK    A             ;   org/bouncycastle/crypto/agreement/ecjpake/ECJPAKEUtil.classXy|Iޕ\k,d(IB1a,^bvMzgzٻݐ	zM}gz_i}o>$ovf|ͮyO X#ʘ!cse,X4xe,BFXFDFTFL-:Zr%m.rq@mŕ5
mW6pa;h(k-=rڼ+wXm
e'^Jimdof5ad0Vq3빬Z.mg+ʗēft.#W.4[q>7Ǧ5Z[tnhoBd-V)б[3Q6$-e%rIKKS8ok$akz[I3;zu3g7lײNFf,;:6D5fY4W3(agRXQybltܲ)=.p^ör\-jMڶA-=%^j*s?3c>M9!Z=E?
)8j5=І\M0Yp4	iJ	HƸq虌Yzvg:kDclm<d<i@<7(ԻBolb'{(pNɨ"wГmTK3$I7B"KRY_7R$,ۢsmvPT[>
Fm[	NwGdٯ7)g:yUbl{Z,*#=TJy8i+Q
3~*465,iO5:!fYz,IGƍ'_`mtg2Q3NlnPcSj(Y㇚sf2ao*XF}<knT.阙$L[vTɧ[n}V.Y'iPƱb-n3J0R+P(VlHi'fdF̻Lw:&e³Y麟{;WZSJ6J=;p8k7Fvn)p2ķDkdL0QHbNJ=ٜ[ަ F֠jɥH&~Y{cXE	Nwݛ.%\8
Rx(jBmKǓ1
+Xs1ͻ%K6~},(t~f7ӭ|Og]CMJ萰Mv	#a]vK#G^	WJJs%<O>	WKn-W{4l_ivÊy7JsˍӼ"ĭՆ-+?_hxƆo3C'zɺ/l_kSTY9yv̖z|Vpy\O2*o)nuuTB5Sф!}B5O.J*,l풖K.2ܦ#BAW7UpuViqUBm=\t3*MՔa5R)h֠guYY|WM>V7Z'A~ṩ<
Ugș2ݙJRd*:ؤ?郝{ʝtǫz9?Cl&+'_,ntՓiۥ`^a#f*gP`?C;f)؂<6GA+9
.<AUЏz}`=^/c+\J*
{fNAfܬa=^RA[`87+-V;p.Eٻ\xy;;٘ܭ`
ާ`H/=!d|4Np_}#3dg-o0TFU1|g!Ï~ŧý>g7^/B|:g8f~nı^~qᓵ1gx9+QV`jvn ucy<!X\BL	ja_.oz|S;^<&ۢ1Ϙ):2Qza!_;y6L=:y8B,!!"	b1ʠKyG90	Ӗtwc,s3	GbVѿx7?fٿώobgM_Yu}o5Q^"B3"$UV4aUnTD1\ۣʪU%Gha(FJ>&bT,PGG\8yzqP\vsV0X$c^Fy1#=1|QЏp=>E}#b[+K(EU
"+|`=L7	}M*stj)So3C3UɋynGk/w@d]Ǔ{LӘI
͋wcfSafJdDLڻ]!΋:Bt6'BX
ty9!:g5&OlKyc83xh -VaUb챮vYoCt4k":H@j}
o֣b1d.(j,"X{kE@6zEzN'Xn9/E<눡Cj*&Qal
RJw=ްjLq1:B5lt@	Bڭ,kB
^|+|\"nFߑ+hG$gx$>er &9?B6'Sǟ͐{.{칵+ٹzwtѸgسxYst,D;˘Sɜ><FcX:.g̻g]L/q+f`zp#=_PKg(ׄ=    PK    A             <   org/bouncycastle/crypto/agreement/ecjpake/ECSchnorrZKP.classPMK@556IFa/A,Xz]4ݔu,?J|Y={3oϷw Gbp|؞20*#e0D<
>:WDIp-gR۱̦6"2JM\d*?^ˑNSqQv2l؉#~GڪH^GxnRi-o$#Z=U<K`TQϾFtnz9J[]S_
h>#{ dB.amPK<,[    PK
      A             (   org/bouncycastle/crypto/agreement/jpake/PK    A             >   org/bouncycastle/crypto/agreement/jpake/JPAKEParticipant.classXy|6d3@dq.BDCH&
.lv	V{CmkU[𨭭Gdzjk/{ߵ}_}ovvٝ ~G~~ѣTth1_hqE2ΔX_FseG^#2-&nj;i3i-بyո1oXG㪡EW`=Icw
.X3HHz`h"ԱxRͻ}j<)ujm9Zr^r٬z$;4k#)c\Ŧ}G4]xM+eJ
[?}GvGҦ5R:3f
w
޳F>g-}-kvv7o%7kX,!PEhuD!E0G$Ҳִ'e*r#RZ"B#KS.;@iܬ[&0 Wj鐀R`.
i
vMOnL$ǵHT۬')p25\!3bYp
Y&ĢZp)pFsp
;]9l/H>M쥼,PIR8<^krO,PDՍX8RFo$'ȐյA5IȼcPtKG9b !RkSZTj=ZH=>5W@oNKh	HIJv746ڣ!CӰo#u|SbX476D2lN.*vx,c)#6IQP54}_,h,m*djԨi|l=)uذkcOQ:OTht:u4)OŜm	ٗIO8T08!-Fdҁ]e5]8I}t]TgFtX뙧6r jѭLWœӮSi
O<Af7(t;%v[P^s(%}0>-b#M˽\|+z&SɰVB@V	/pmK!E^,aHP%I-!*2	1>&}[^X&-$X|Q7B*U3䠾\sZ&wzCi6p˦Kj%pW\;vRS"=sr!O1`q˽[WtsJl/+3e\,qh:r2ǔVeK?	dN3p*il×<"%*EFVOhΉnpHt)w)Mo
CwOy
tzi
3ER=9	-<2)qڈO$)ki˹N<] y
FP)3t
.faaaaC
+]*CBSA\9
V`x~nNkz2l`c`Xgeq4&GqQ|@>ܧ`?|!~zP|Wt!`5R+8YA< İ(x) QU`p51|dç>Y1|Qg<0\/y<KW=x7~gn}n0/қM1΃yf|W?f	~_3d_w0_m_VVݝI?:V5>J	WSEKoqsğSĿ"ķ"W+_C|[Zku&10)Iؤ..^aWZZtȢ(
+QwPD7c_!LOfSAKg>HI:YqAVOczޭ䩊h7!ff_7nan&ʺ:
3mu	1㈯->pV_ḧ*3Bb:/#IFԐ*2xbUI^%N
,fqlJA<}J?<'X\mmr\ԑ(q1{B<
OVrȈjfOПK2UUmnUX;be~
њ}6j=t&p6K*@* )x\fC2{q-<taFD	`}Vʊ6
2+Zmѻ,гbMV^,/2/.R:qUǩp~fM4iYVUF͌OҝK&G
>
ڟh@+n+ҊJ_mY*5+'Yㆫl
t*нf-̔e&9e	eϵ<3C?|eĳm' kQ^-%2))2i*OfA[Z|Z-'QqhZ%'69`\1nJd~Ҡ	Sjr).CV̷XUf0=cbvS;G/ErzMv37=C<9ʗaF]ڢ1(+FI>X?;F
霓*4klYǾ8re3Y@9?-+:y
ڮ|UAI?PK:Sv
     PK    A             B   org/bouncycastle/crypto/agreement/jpake/JPAKEPrimeOrderGroup.classSrH=C.p ܕe#²%	!6$U=hdI@ ^"U3#lAT
|ZszLw¢2Td1Г,0Eq۵Ėf.nbUh_nNYVo6B5i~~nVjG1(	Z<jrdH؍rŮˁ]#Ki8kELVݰ\J%^
RU7˶UtCn񀊡T(s²a,5jl7ziS%|̍BR)`*>oC͢,]0uk+uVb7ljVYՖ)#F9b:v6:L"KmGH8HgS胦g~ꘘ0]kLP:MjozΞLX:~Jcv	آLaK2])ߠYP `@@R!#`7
8.#U')؏Ŗ18'`Lx9p64.ő8 ࢀ	\P0ة8]{~ū̅f
ӟW2I*R7Uddd(jֽdcY=Y7|!11/wS%¼{[ϵ03-cuO;llmEQ#͸ГJߩ>A~dAe55Lgk&
`Gp}t	ÀTlHUiK
'6*Idߢ**ngGwkm7PKKL  $  PK    A             C   org/bouncycastle/crypto/agreement/jpake/JPAKEPrimeOrderGroups.classWێGc;pB0pejWծ-"(d^>݃=&|  ,x2}tשڗu_J)@}@]9P_?P8P/ԷԷwv+n\r1M'u[mSK!6'煴V!RU6lkrZ.Ts=h].V+'$6CRM)S$)Z=yxkMJ$zlEg{{]:UR]-5SkJ1tDgiHETL@YSiKh!Rl8VauE5Jqkok0	E$1dS%|4cwJ*ޖTZG%fbccjHI=W#!m:
6*+%vk#ؖaAإTZP
E_KXg־8lbD2P"m&{|
B+,MƖ*
USL
H'#AJ7bm 'ɘrMᒚDf{ElDksҋJ uDFp:ZԫBco%h+,z/Z:nJ؍rH5:@1< ^tʴvɄL퀅8Z"jH=(tS6/NeՂY#&`<'$CbGZԐ ?"Xʕۚ	9 mF{g@v8p@2k;HnF8	N49ņǥ6R@b/1#{J[,#D)E[L/
?I
i$TP5M*4=z
fJ@8 AGb#]n
FK%<hHI(רbPBpCz;*mx!1Ivl/:ES`P0*tlĸ%0~֠JrPANEALA)!R ʞE ,q\tݩf7B,33
Yga4N\6ީ[˃{Nکo}vsN%ACqb
ꛄ{ҩx{.TȪC9%\t"	E@ Jn-4OP.tb@_@P:zĵup6 k+pn÷ jtHjPC%QpW v^G
e ڱ=Au=P%/ dՖ46V	Q fMQ`-c "v]L67p Yh^IXp:`y61ٱiY\cNW,XɂCE
	$
]@Li^.ik;GD@`uQ@j%|ML;gɏɄ*4{<2YE/0"@BC%-PSapPY>zH
،a|fu\vBI	(>y݃56TXoP;,*kNmC!_
;<;~I^8$+H&jF85
O/1B=`@yxhUʘjRL
Ȑ`(	DLP$pÀkTS	٠,-`n'aא0zS)Æ*0.̘	ajw`:tw~׀ϟ[N]w]]?vj+M(luey~1^im:E	Hh8g|ycs=4
r5;7fW2vnaٴ@%N~%`gdĽjN
s27m7aBϜNnarMpO+˦A8tרlbm]6'f%؇mX*
6Mu]V
.֋nH7"ɼ#0 MdYp_]5ۆ{=?xrɶYC'Ax+iޢ9P<8즱$´.V^:i"?pC	7iũhK"=_MKةLrS/=}p:awtt=ZOv֣'p9d]ǧO^~?r~=ɣԯ?]T߽wQ}zlvs^YwNOݼUߋy\Q/7q.Gԏ'U5uz]ة~Uoݫ6ݵϗ~S1^ϽDjo>{7|T_tn^x~lgΟ>o>[{lųPKuc	    PK    A             @   org/bouncycastle/crypto/agreement/jpake/JPAKERound1Payload.classS]OP~ؘōU6JcFdE#!jK9C4qxG3Xy~s_X
9ss(0ǐ2+;Ͻ/>6	dF +5
i>o8#cLf~E(7hI(HBGk{]FqUMB%gy{-Jq
b,\{/~K_ߕH#Hv!9J =aa,G~{=xaV':\Pn|?,fEAo^/']ˬY3xɋfߣ_/L(Hc	ܕ
s[
t4d1a4L㡂G

*yj1_?e u KWM\`j5Ґ''y+U=s5	B#e4UnXؖ6gX`22FvA=Wq1SSZQz!q'F^Wbe{$ksP&yY-5(l:6Q2 PKK^%    PK    A             @   org/bouncycastle/crypto/agreement/jpake/JPAKERound2Payload.classRaO@~
:f'L`"*41&h2Y`HLtG(0WHG>>{+ (@+T@!gZGsς(PV>tz;g\}t)dq2NOP-RGS(<_t)O^9"1]
bGq#9<	W1TN'?~.?Wp$tq&"b~*7$v<
%e
B>VS>+q A?5njXа`tJȧ-OkkŴ&WUӚzI5ow6^S,#eа90`=QqX#zv/'A=Ց͌pI#{yº
f]jbӘhشl%j_}7P	G<nO"*ftZ6u~PK5    PK    A             @   org/bouncycastle/crypto/agreement/jpake/JPAKERound3Payload.classmMMKQ=IMSGU;UEP>H*_kL+_$A~@?*F={?>aCi4ЄH @%6m3!-{Xf(Ѳ=`У*$FtH+1=(y98acCaD|C&w&)9"{/OB6ViPk47D1Xmv]`E%<
(R@iWF^K#%u޶xvK;Ug+c(ΌFP}ȵPKW(    PK    A             7   org/bouncycastle/crypto/agreement/jpake/JPAKEUtil.classW{
df7Cd$˒_EIB %A
df3;Zi}ڇ}k־_mbmm־?sfgݰۯ|ܹ;ޙ}GO X)`MA,WBB)D
p+\ݲ]}DV1%4ڻ4Pj<znomyrEZwm)azFZu.`CcfA?fC"MkLyrKB7e(j	WNeMtS(Wkl .FnJT[6&{wJh98P$J@&9;]q	o~Ți5mK5,thL8bvD&o
l'7ttfFXXNGu1S-J75FJ()ܴRCpm5gv	oه(ꤐI#=,2
;DkIT1kЀJgsmﰄ+& ؽ*>1N)'4ZWfH]1BzW2(Atn,HXVN9Hٴϔ#ðvע6#&H Ш(s^u/l|:(W7gJu׭U3R5M|(qN
=GLW?Lθnd"瑌2`M:;f+AfMk%aiCvU3,)FwʀM N<K!a#k]6CY9U4+	z3Tc.3KnG ;`ӛ+f]3,IXe;Ĉ]R)fE"];5U1.B	>:f#DNXnb_/5dVB:7:5r~.+rI"yJxy*sM)a.)eQ$G^(IU\shӕUUŢZuJeib(U\4)lХR^KYm{͝_QnY>Zʳ.
&bkd\+c.2+c>[e&c	K֫unyVֵڶu	G8yNvn9\8Z8poxt<?+U_<]/UZUG
`}e\]g:*Ez=iȿ8IA	}M^uիDzqpX7-[NIS"}'&5fM/|B՝gep


ޗMփ/[xϚt8(Oy<{f%*V"b60_lv9Tz݅lX*;qp@xUE!0x-CnQqnSq#aQq)^b#ޠbA6	θ;wޤ"7[ToW;T]a{ټ/|<>AD Icl(>le O$Oe3AI6cy6_`0G|WL9lc6 sH>f*e`3~6w0q?pcv;"E1RG?jFj2F `)'rƩ]SLo;ZI8
Ux?
QaoζX<:?<䃓nϝp}
M%+}:7PG	>cxf/T&cL dH
걯GFr1sM;~\]
n-"_w˻iÝ>x3qqk*DKDWip-ecjgx؃F̣vGcM*d8Z;ZDIdsLkfԸ֨5MɹҠҚ6 uQJ"||_}LhcTT=y6>%Wpn
.q(ob71qPyGxF[]e{.	vjLZ(ԙTb\+L|>\Hģ,hٝǵ07~B5&U\|yCTpM\1X\y	zNF؃YOT\m~n\!LCOi쉅
d&Dj	fouރX5kȢ:L
﨡
nzO?)S{RZDAOq+Q4S{@kYRaMoa-<_RYFvX{^HQ<,OpܳZ4Lw^UG*UwJQ\NK]H>1p|5k}-][\FQ)Uu׻."Zߟio5N_Bv_/'[^u\=:?#W5p]$SE6{#2<N_/+pC˂54jYƖ
M-w
Ҩ`Y奺̫h:)|xtPK9
    PK
      A             &   org/bouncycastle/crypto/agreement/kdf/PK    A             E   org/bouncycastle/crypto/agreement/kdf/ConcatenationKDFGenerator.classTSUn~솰-6(
28N&qc|Ng|Έ:T_:c=g@GS_L&߹{?p1!ypf-HftcF@6fxe6f
/W
])
97o6lϮK%=ͪ'HV'b.VmBZ";_u@O/gZJDH5fO@rKmbQ<It([};_JPɊ]Uu럔dCU]&H+weI=*|%$UYoܔ9&uJ~m:VUMK^lrQQTlUL\DXiFSCJ']+og]Dp;ۅ:U牽zx{ږ^rN)s%=S<IAilɀ^/HqFY!:F̥Д@2tʫ:){;q$<KYm\¿3ps5
C^3D@7^fxS=
#f 8S.H.-KSp=,a>1c&	\e֍<f00Gլ[/~x=Ee-ۍ5{&1Dux2ϵ#=(-Q<ib{;Xx6*
oXr?8`[k_GA.dZEp@,'^3sTg_"Dc4qRa
|]vEhQLn{	~<3c]~]Ȥi^|Jj]@4<~03EN-"=q~$k-ܙԓj<2_5ˤ#C{t OnMS@PK܂@    PK    A             ;   org/bouncycastle/crypto/agreement/kdf/DHKDFParameters.classR[OA=++^(-`[eOmԔTú
f|h	߬k؇ssIfP*XP	Nvb=S)
7:kZ\++~=`\%=~~T4ΑMwsNspz.z:_TyK5SK8e!6W^rɛB	bx?;wM+Vw_{XĤ)tZx/:Gߊ7Ԩɫ{B~`FlGWNvCF
阅ZGI"ǲ	UV}v@Y0.${C֐C";1Zz'-K*EuQ㍽Ê!coL1#ڷX1'ͧrf [{F
Ӊg샌?PK    PK    A             :   org/bouncycastle/crypto/agreement/kdf/DHKEKGenerator.classV[WWIdXEł׆X*%h
F{9#a&N&Hl[{WZta_Їg&
s>I<}ƚ0ֆ/]D"vIu5Ɍd)7i|ٴLBO202n,p]ێc*6u!qayJ](R7
Qti.5-gwEWEnR
{*N!2ͬ8ml]_zux}[(/Dz48CBnaivi-|L;LOD5mnynL>/tҸHkH#Do\R
i]%3!P
ګ2&1R#vʕsETo|$/N6ھ227sO˰eUڐXVݱ*gvռsNp{$WeǜKFyUrvFtWsBf05zp=__2\3:scT
D#QxMTynEA[
bJ9ąWZ&9ũJrnvlS];<IARA]
v+أ y-
*xaW@Fp(MvcZyԭL"-v#8yb'w\šR
3,k&ٺ$9i?z9gVPyrkH)
NC8AHf	QTkhEC\V!a#T
/A,Nh8 !W44आZᰄW5㔆h؀u	oHxS[ΩCWq9>%*PT-uݰU༊4,	UÈ!aTb F
2t	MIͼx=rxaX(B1:%*yd$'{2H(ҨU$,I6OCNW8{ 
$wiLJym%)?%)?Ă&V_G%EiPX2y
N|p9fɝƫ6dhn@$PjoߩƪrU_kUɿHU1^
HoCwv,hY'ga6l,r_# R:[*5'7HTuWdU%?oPZ6\X}4Puۼ͡u683LrM{.m|XDX-Ox )<u#i"lJe7Wt-DyXʛ{/Ցڻd)~2I.
sEAG)/;\PKq$N  E
  PK    A             <   org/bouncycastle/crypto/agreement/kdf/ECDHKEKGenerator.classU[WURAhSJ5 &$)WDU{H0&߯7uI"fgE>I(qs>p_{zy#-Y	|HB?Z!aIG&!2ab#%H4Nf#	^ɒI	5mpVR)nNwC.OKPuq54:OX	;ɓߌ[84i)+	˝C$[fL3l-:Hkdm-XMfZ4̠gV M-,oa題a&C1$)M+{l][3Vb3Ү5z`l[0,r4;1M	me.w;p,,2Jж0]@muMRECqp6SƹKR]](~;:Q)}(Lw8ӨZXxt9lܡy2^d{U)IkVo:RbW5g\ԦYbθ[,.rڶ/DOx]{MKt!0iܒqZFd\*㪌6d<'y~22:dtʸ./6ٯe.&DaTH>td?lSQvq'Ǆw">]'[<%BKl+m/cUXElr|Epu2A:s\Bw<:8,"*NaTT\GE-T4ZųЫjğW-D-*@*cRET\_J
e!fxU>,(9	_T0"!Ģ!pw`*ܻ1/ e#xCAj"^bIz
ܻMt]LԌ*HA"oM,hJ&i(Z_Ш rpy9|!>I
pw"ЙŇH	6,?؆ˣx
%Jgs	?0T0)0j4<x-W<9lx=y܉OX,6i(c@LXrxjy`ѓRo>wh j_<[D27pHgCܲO= &l	_vQYJFP$SIK膩[7PK<  	  PK    A             <   org/bouncycastle/crypto/agreement/kdf/GSKKDFParameters.classuKO@ eƸ2.hP֔M$$.(㝂s~N7 (1˕frSc;tjFznO30C;By-dےݻRN2}>րu[2h<%ޞ|$²ɝ{c.{{}>op_pu{}c[>b!=:2H!#$-<V)YO"$Mw-KM+S,̜Tk4"BC]\jܬlgGڂ(!D[fu
4(S%1T|'b3]	PK!X    PK    A             ;   org/bouncycastle/crypto/agreement/kdf/GSKKFDGenerator.classTSU6dCؔJ*!ۺ-jUB[)ಹ[榚g83ۡS㹛5űw=wO= 6Sx=xnMjnb +Gr IeI&79#+Pa},XmhmrP<IK7~ csLB[&\#LO9g:@jM@ͭ6	'Vcyuy
tge6sg=13;0M~`tնXSܴvCf	V->yH;yeD.]ΩBp.2|maXZf#X*w'SsGkȑo/3kKi%-;Ƀls4{Zޖm̊v&l5t-랆
jxUCV9
ck5]VRrh"p<{Z^7sGzaXn<qGRսuq
dtKKĔ!u,H
:NBR:&.8>kޗp]>L"nq	i4LDABQ\^4ԏ˘zYNsK>!XEXa.9:HPTN1YN(PGPߏ_j1C]|7:XQ?9ދOTH&;X9>w
!ݔ;&x
VKiHA'd`l?~}&3H}'$]7~a꠲2/%sTntVeXPvi18n12T^,h0%-I_PKjt  '  PK
      A             &   org/bouncycastle/crypto/agreement/srp/PK    A             6   org/bouncycastle/crypto/agreement/srp/SRP6Client.classVkSW~RjֶB0bVQ zq9 f[AiٙNY "^`=9I~--hmAR hoX@@1$pz؞gLe'zBS=,բkJlUR/vY/IqeŰOja[gr@ʙsPf(VNYE"]⬚x
:{\? 4F#OC=Xئk/MCZQ.sH.:Px+ԭ^B6=!J&\
_.%Q`hGJ]%i1aWRw,썻F̔f'^њ!1|]*ZԬRdQGCFieIZ&՚	ir`cR;m-؁2ogCsdF@_#OJY&YuS{jv=|Ȥo^yԵgҗ.I<i
*X	V4(A4iKK.IK;t=	d6چ'5l'T$mH/tF`eKAVٜnLWjN-u~j(pUH=H#@k|VV>m>#YfWV%?%u_%J
6jU(h>	
Cc11fn~kW$^㠂3bX!;RYVϰlī
:QO#
:q\&o^`e11dgxCaaatެ$2pAc(0I$9gxR/ .2W$^o]䷉şAi~%9B{qVfq8"DdwG/U"ٵ	-$wZOV]k?KmoG9=ULAtW%#05О÷4ǧp(r<@q Mn*9|T;
wp2ʷ\1DqTl_:3Or
k_TQIWt#FБF3.
733/kqM|#b!zy|6JBcz19MGzj[4}w$ޏ֙eWc<Iqw]H2tv1ph
~
Z'KᕨX䍑=TYV,Su.C
]ߌ\DOHЇv"\t{9=.ˉRϫif7&PK;qy:   f
  PK    A             6   org/bouncycastle/crypto/agreement/srp/SRP6Server.classVkSg~$$*K7
^ZRAT*QjDe,fM{~iigov9!Sq̼y/H?`?~hEk+ZHz/	Xe+<& N<xnXӶTCW5\ǫR=+HRu,R+uupF/[	TדZn9Ps`aW`j}υ's|Zu}^->)HĐA!9ZEK%Md
6*ʳʁ6-j;ry 
_VX*ɲ!2tS
l]@qud2 giyl
t̉Iߪ׳t]%Vd2ex.(ύYmlOJ+Gg#9^)}*R҄MVbgS{\O1oAh˼{-Cz}4uӗҡP&x|вx;Ayw+$e(}Mڧqs@TUZUVU2m[F>E4t8W3x-\h	lX;4*狼YhhBH;7ޫ
Чax!,/n[3g'lM)_%x*44fԏ-~)owyTpwClzЃ
uFAo*0lbPca!Џla-H)؁aQ
G/3e؂
^gðo+Љ
2QpR+SЅS
q
p8;g&
3L2p.fgCKR.3\e(eq>fp=Cx
}%.7w@{1ԍ] E*kJ3XR=#I%d:e&K%,;:u$[	.sCZ_
_RjVFbdε|K=|ƪS 9M]Ok(k}tscq7V~_@5~av3bq3őbƚ}S[g"iTOjpƩ{>*aHaе:lZ"%xcHFڽ
-/dR8'Q$$ϰ#,YOW:qƴXa_Ȁ8CoЯ$K~"Q:

lw"n ],Sn[CֳLV+{א-F2"SE;9	PKAJ    PK    A             >   org/bouncycastle/crypto/agreement/srp/SRP6StandardGroups.class[sUۖ('D)E>},h:LhC,Ӧ4uΏPǷiKIfZLMao⡥R|a)^/-#KR<_^,ϾgϿNQfcj}GI&rQC
نRJ+٩6lJe-*jv:ҺSdK^r.&iJMh
'xJIY[mCCՇGXRH1)s-Go
FU+ak
v3lqԲR.L%XvqJ$cס=-AwkB5X:Gܣ	U{ɩYteu
sώUsN(r^ll#xM7R)|k_"J/~qJqUFۜy(qnW&&>]0^zaTNִt2`t,S-dXc}
_9msE$qƌ?GM,(THYy^eF!9%n<$Tq!qgM19̭/#`\jҪ1=tTL9b
.%J$5zIFeA-ft1Z^Hx`s9 .!{Y]G1|R$펨1#MOsk(آΧ8LMVuPd',Ń ZLip5um<n,0i	zcZ|Hd
6d(ؚOxjDG׺q{[T#}6\|Řh
3DfvqL];FMe$
rFrkP^)j34qC*x oH|#Sa'w 2IMc"㟒FDuTً#~jeCyf,低dH6Զ䛖MQSS!B,XiGNbj3d*F"o()8 $h\^>_8,&螸!t|$DPFz7ѓ.ǔFvR0սMz2Ў+U-%,'ʐ.Ŗa;spMbbSLh6f\ k	 5$I8P$P3#HVgɱRS<UƚUXEKuf0n7C
6}"ur{aӰ!y0ѯh.'H_$G+|F0v,ȁ=TFB##:(q]<C҆%`6:fc+p<j%ZL
˾C&5<Vd2w"Al"*JVeX)"ymaU~(
^;T3 câxYJV\FbҖZ+A
/kݷ7WTh
[s%J#,UT΍D^ymmUVk@'T,N[xD3r+$|SÃ1wECT	&%)Ⱥ"G	,h@41Jh8ϴȯ#E ` HbDj(&ۢSLT#-	nXZ&WnJ	##ٙޠТ!V)hԌHD+Jl_9͓iRx[	%RM:|uTh Xj)	mISgI
j:x'h-Z"kԓ(DɥM7hhDgpD! rpL%ú+ [Qd
y舻PX(\SɜLƌ1ϢljC1y<#nV8af{?*t7LBttr$EO l
DC
J	vmSR $:S'DC)!dvmT4\
_;!SZ'rpw<BNkF(L8jIϟI)t uu
dkP18gXؐ@AʔAE9&hH@M#hh *ob uPYJ|]8)OOdAVN6dؚt%B+%%egT_'qԘ;
Oj־SqPŜ/O+y @5eRv\I	pR '%I	_J
{$̉H|6$C|
8}B' §kbWw/\rܼzB<wms#;.^?=Xx`ow|xe+:w{cwpo/_9z[Bvvn^Y}}ww=^?_tp{{̓8
.׻z|`o}3~}
M]Vzm~vڰX`޵a5Sc]V~ݤٽkj`oC<!!!![%3^X{鿏*;aϾS&./9eg?:Gmo7ӳyf6flllf)?OfG(llllll.^|N9?Ή$.??Y3T,Cmw;'ģxA,og{(;kgغ֝_=ss?źG뾿6 c?ZƗuh]ߠYgV0FhhߡE~//,4W˅x:scG?-#G˞d)~?HoW#֧+.	qqc뿈W}[N~[ˣ[[W_bOPK}
    PK    A             4   org/bouncycastle/crypto/agreement/srp/SRP6Util.classUYsVK,H@n8	 [-eGFӚL&}otzNwN[{;{Y{$ϛ .KĒ#V9.eqc<i-6ba&{ݠkq+X}.WRe~fz?гЮ9rMTb\-b7yhhYؾSF~թڅsC鄌VsvVdQn>5^Um"h,$[%q7%Ȣ[^U鳶2WeTfm/6̇^g9WOy3S6ﱯm)`NÔU"B4L+t"V"/XgKa1S(Uؕg'Rf!&rX9Jg39ŐDJXf"h;UwJ&*]%P*Bڼxt5!7ƨEܘ%e8#]PYI#MEU^y˞B/(^'nݮ{ɽwFuٴ%Z{߹nyvˁ}ONt	av?	Mk9Ћj<_^SW;g_7CbEz9G	*bLއո2)q۲Ps5

wpK)Lh8;	3V1IPE0a<8<V雜W_pxcx )>OxɥRko>Svy.g((}{#bV*d/NaDZ?IdaB$W@1R)1LtxM3qGqO
U77Pae7.teӥflti\|$:ܭCJ{
IRkp$cx: R5xٸ.q*%2JQzHHkXE\ztXXǋ_RUBbuUZdDNAH
rtK[	ߑ훱Z^yYqmλn(JrvL2$8nJY1=u+rLJLWvU0Ď
gTB2Qh<nq(b+L&w$
ͧQG0en}ʴKYG!=eoXN*
5f8
<PK  |  PK    A             A   org/bouncycastle/crypto/agreement/srp/SRP6VerifierGenerator.classS]o0=iBF`m@,!E<I*>O^jB4~ ?
qCBksl?~~8Ck0TFI1N `-_Se2T	LTH*+jew$$G2|j$;O-CC $8Dcu<)r$35ϟ
QwoS)-b,U:Xj2l6.ظhPߛ^adkޛ
y2`כ9b3/w뢄	e\uqYX2<e4Liº6\mqlpt(AIz31j4=AG7f5Z~{ߙbNA^!7	Y\'0ocuNrf[&6OyPKl  5  PK
      A             $   org/bouncycastle/crypto/commitments/PK    A             >   org/bouncycastle/crypto/commitments/GeneralHashCommitter.classT]sD=qdRJQ
-T\
jb$R%f^x̐ӎyG1+bq??-t32r-Ż2e&K͑1Ig)Cs
~[4)D)BW!f"X*3aK$a̶PՑMiQ+%=Ui(6=%E%fWz*YWn'Jm*@G97
%BR,׾bԓCN[R-s<*jZ(nюdG>"p}4Eľ:
v
)jP(/'.EqiF"Qtܸ{"gt'g5X8BAkG<T~j8=ӕq#%COzo#4826Dr0)(?pXti4x8\УqAK:^aXqI+:^q'^`n(s96T쇭*_rilUפķ5guVk<e
^707<y"^!g"t!S
a,ߜwn0[@	7(*xJ6nV5NcUqыyt}
%ܯ6hTZoo^RKz	Qt+'bVz:z>x{XrկGޛ8ޓ&y#yʞ]||ghsHo@xRYݷak0Rq$EN}W|Ө<5C#mL
O[[çYp`g쑠?_Ň@PKrN    PK    A             7   org/bouncycastle/crypto/commitments/HashCommitter.classT[sF=qP*R 斋B qkiqDe)Hk}3
!
cQL]bz8~j?m SXpGRb|@r3.ERV'ٵ~bv,Oa`ĺ,ׅՓF,HHA]nĆA(0e>(,׫X%WkIQI9w>b66D iWNĒrkH_4O^Bu!gz+U~WhG^*^
s>sPTA4#O2*
)lP 7¨nfK_Nڔݻ񃋤~5s\N-GlJ/|+
/+t>6yѳ34Q[4LT9k8ጆ`hpN7%JQRhUyAB/wpJWs~:AuŰ	\qu@JI::Ā1_!cȪ젎cCʽ2rRyɡ[
n+\Jfs13+&q~0Ke*2\5_`XPD
#jQ$+5Ak:7CTwphnchʰr_P#TLBn<=OF`
mmvy5Pxb-s+;J~ Ly
WJjYm5?+߻,WqVx0fh]{$HfafWm.VP.䫤kPK2    PK
      A             $   org/bouncycastle/crypto/constraints/PK    A             B   org/bouncycastle/crypto/constraints/BitsOfSecurityConstraint.classT[O@]^
rsx,` lH$%Yb֑v?WF(g&	wΜ˜ߟ LY
-!#6"B!u!a!i(Qͷ
FtYT=[BN$;WaR_nyڝw!G2w_($+O=j齽k[UW]	CSµJrGDs~X;.H*ŢYD\ǫY]RpV</9*`-Qi7FC&B^Yjk>:dGK#]Qt)B<D
4\֐УWCC@\3c'syڪ>3{9i#1WZ*d9㔹V(nt!fNs{яБԡ]GWhэ:fq4a,<&Up_ae{/a<b
&
]β5;ذ\=~HKpVytbjwLq[T	IR6w9 |^40=Z<a(|X<@~s3改#HｸkPKHjyl    PK    A             9   org/bouncycastle/crypto/constraints/ConstraintUtils.classQAkA&&4k)Ă,R

QoI!W
B.ҖĳI7k
o޼gǰ~/;7bG%J0TFJdN|PLi/oz=/d?T_$CP IeE-#IrO,
F$	u,0uiLDAV8gxpa۝dGAŁcXkuyf{?1y<P`E
+.na.h<>M6"J߈Q,N̲y[sV*X,&ݘ[X5Jviqj
Fh]b}
2N4}!9P8O}nQ\m{ps*mPKi  w  PK    A             B   org/bouncycastle/crypto/constraints/DefaultServiceProperties.classSNA=c[PiDn) 1!	IM˰,nw7S"? ƆD~z]T`Mν9wowCR]&99+pm?t^ahs!u	hG9}IbRѐc
Ѧ̾8+<\s]iw%;m驗o-(F6[RZ
:`mgZ"R40PKV2T.vd-ߋT(OE+:JpTrwܝrK=y?q99F8rr1f3Ԝ_̓҅J5It|r_RBMsɉ*IZg͋Q/7A (Fydp3qHPa6IT=@jEr(Q9ǐ^w?n(ay%עJ!$VNQw/}//eN4`xL<dԦGԏtӤ1~4\3Ȩu`Lw1oԻ01_P.c<fLX<I<H"(qZFq%6(gOv!sIO,n%foPKdp>    PK    A             J   org/bouncycastle/crypto/constraints/LegacyBitsOfSecurityConstraint$1.classn@m8	.MPNH*pBJY4ITEQ6%qz5$P+B>xf? xOaNO#1<6tr:RO!zb0_2䞉0T[]Bwv>
߫b>Ůz0wD56!nKubdدk4CqKa,AC{4GWPQl4"rt'0quGP"6Cvñ-,hἅ%gޱA`ck6X1g<.R"\NJ((5WUD4Cէ
Hj/q,cŎ
eq\Ǌd$̓&zF@n|+|N)$\&av7?P<VeEq13Tr,柂9UY!-]Urs?PKfh  J  PK    A             H   org/bouncycastle/crypto/constraints/LegacyBitsOfSecurityConstraint.classU]sD=vi*`Qڄ6!qbp>C!-4(ZVH$}ewa+;Mtj=W}9#qy=)keǶ검⏦WjqSyŒ[N2E:[UcBT>JJ>L{geC@4Y̭^~%'@}rMK!y@V]0s^-;SxmQ6mbd3LN+M/Ϊ5cږEڮZmE5mcfZ%
<5ߴԬcYLjo_-
Cv%\<Xbg5ecՈ[2mbܤƫG,e⻚iGSO]s*s}Q-)ԋCYa ɫ&L g/f%yruvfClOu
WV~ʚe8# bBDB{"h:)}HP)2%Sw/h.;%2U8~<v8a
Vɣ(ݬq1l	_N9e?:CտeÔ,lbz23ڳ.bXG	s3.a7$`@%11/AM	c	q㶄wϣH#*rq"kC
+5G1dPmx#r9<aBEFNn)oZjk6}͍Iǭ2>S7~3 D@LMZxhp!.O5𸅝l/)q8w`6 l\04/X"(>k!ԕp4=T,70?y!X?CO~ha+&JqD5P3"
|ׄAVMf=!̓%ckA"PK󗸺
    PK    A             ;   org/bouncycastle/crypto/constraints/LoggingConstraint.classTmOP~tu8uay/ ()DuyaM{G$~|Qxnl~0)h)3tCCb.!1gh3ɥՅ""Cϑ	:KBFuPmVw72.jaGD$pI"@
ߣY~┪pxӖ*s5Q-(SjVN)[ CV~X1K~s]'Unv }CqkP
1L4p}/#<5?!ɳ/:^)RKCKz4jc賚,C\2JntT}

r>C1
6qTj9nX?q1lu"8n3qKܥI1hjב
сV)8[:.+:С:.bP9بi\Fcp_
Lgp
g7u<j5S@:LGÖ$fnu%T.% 64ݘF@GC-1Աf,7c6RGWȲāRyϏWʛY/KB'l7PK a~    PK    A             <   org/bouncycastle/crypto/constraints/ServicesConstraint.classTRA=@dTD 	H
&V0Ljg/\X/
o[{OߵoO'xq{i@xX*%}efMPܗԻT"MɱĤLVA6;ˠX.,9aR	f3a$ji,H2BN0HLa8ɭ|^[bRЊ363oڣiei\ PRV =nQ&#JﶝLl^+
ˈJNرg
7NuFP9='QOi'ZJtv-Pp4ѣ=NQQQQQqEGI24$O:+l9hޗ,n7{o?YU#C%:|7y>!<+k̜BC(ǥk7t8#!fTpUT""$HE#U⚊2	⒄*TGEn(ǝ p7^	}
.#)hǀ((Đ+.E%<,E$<0(@ܞT~D˥4SVwG5RdC)$p~_4?SMul%'E?7$W1)'68_1tncB6F"I
ƷƔ;R
a=;qjUAsqTYz7WY71>ZkRLvW,ϽVSCl[x#PKT*    PK    A             /   org/bouncycastle/crypto/constraints/Utils.class]J@I/IԶ-B6ݵ[E0^4
ajd*Q|׮.| J<3(H3?|}|AA3B
5a(No.DM"\y38a*?s?2g(TuVJ$~ѹf?KW2\<WIzR\r;6j6\uNryd~H?t
T&d<EZ.hUG_p@/o,p&	hjQfKwtߌAtn
<k/h<WtMmkk#3amPK{}>    PK
      A                 org/bouncycastle/crypto/digests/PK    A             <   org/bouncycastle/crypto/digests/AsconBaseDigest$Friend.classJAEo<5N"qY!Fą"t0aQ_X ?JL7T[.	fvT8?%T;pwARF&D$E"X\'Zfc1L*iDMTⱶ]Rs&>/>t4.XǁK8Z.pl-kQF`͇T#{H~'	ai!N؝G02zA@e".+\w'@p?"->&PKZ{    PK    A             5   org/bouncycastle/crypto/digests/AsconBaseDigest.classU]se~,`>hC6m!ZcG,$i	$&..N7+ft?H=gYhfRryx
2Z!| a$ڔLS KNs4OMYxnwVk0
wAxS[X]*IW2~"KFM8nא(W8llSv4]d2fmQjWn]k#[D\%b.a&ܬ[fQͶeR~:eSXknXZ%
G©N]=Yeem
k+¬hu҃+^N+*9ۻF$z
dvrk!m
j}EQɗw6p(4oPx&ߕӖx;n8qײNݲ'EB5+ٲce6oTm!ddd񮌸dq^FB+Y5	N85\YK\[L
WI^l*±KJ<x`D
^gga	g0
|C\QB@A#lèӐ"

>S0۸-#n2dKa#%Em<C
]2(F0/#t/OPP/$D?U3{J4_JZZ!q❣? }h8A#I4%쑕iyw|
=AU*XW!Q;D [j4~Y<aOT}$ۗO	[[t=< Nށ姸7qgq(7;S.P)Ņ>)_|AY:
~M*3Hf6Q6vl\ΑJ[ez`3KZ} sb)H~+WģfəG&'ZMRϑwv 9سG_PKLc  	  PK    A             2   org/bouncycastle/crypto/digests/AsconCXof128.class]lU]g]Q[B)
Bq?vfvA/"h	6J}L4!3;mA
1M{{ܻ??c o>p _,YRFX;ؔbɉIS:Q1&v;Ԥ55Z7j[ִZ@2OoJ.k=0ETD6lSӳuUgF]гvht%Ge/jT*jO_KkntOP5TfU]B4UF-Zv, i؊Mv8vNݤg4Eft8ir,9	h0l(b#6بJyMCi5okLqNZwNIŢ/Xy39+V}2%fR360熕
Kt+tt9
m([LKe}tLR|VШ|9R2Fc9PdGEvQlOz~h&r:kR?ZqyEzUKhvB$S:2*c?}E[ٟ"V}O틾>'HKB	wK.Ge)z65RSaiH~-c73e$KMf
J*F5zd,65ʨeT'g4Bd$~u02,c.Bl.c6c.f2dD9Ύln#G1g( !N.Ì :D$a1lF!.2g8AZTc	Ae:c-7^u_)t]5[seT#ӭ ٪IS!z`{;6/b>eEﶈ0Ya>_+~|ķh4˱`{5jx
Tc$Qb<,p(Pų* :w=c8%Ϗx%]h	E|t	G%VAEBCnFa7`M'N>Ch
xc?$/D	b\AF"yվq62NVtD_TϤ6DmZjGj9ߍ4)=Z-"HF.!/;#}l`59xv?zbzǕ(Ζ(sBSզbFl$e1|?v2|ZZFAo-=}+#
 >_5cxi*D\)2DTN5K;Vnsf"GMi'&LM>{!kBVtPK"&  	  PK    A             A   org/bouncycastle/crypto/digests/AsconDigest$AsconParameters.classS]oP~N+uc((D@K\d+ti˒%nhv2Qwch<y?9?}df)2(nր[ǖ;qBf2dZ;Qaj7}0h.-#ϊ&~󃑹O<ĶuL;8p<r(4֗©
XGNa!mGDֱe72C?xsTA迧(,*Xbx1gZs񵉱P3f8QX`썚p;5cSzs1'YM
UI.OCEQE
븥#4:B*w!{
p@XK܄Ԧ?ۨo{#8с?<%=0S5e^)CIOb^ I*|RJsch#@RjϓI+j8hAQ%*j|8I)T !ST{)qC7h!sL>CUH)ᬝq8Ǽ
"q:PKLzr}    PK    A             1   org/bouncycastle/crypto/digests/AsconDigest.classTKlT=N㙉'N4	MC;PE%дL#?(3v7=NH
쐊 	X%H%P#
eAWVb(y<IIRRK>s_^Њ!	:Cy<pC -D?P=lG,ͼi0rI?ycPNOuqde퓝[&rlJSA9U&Gu]Ԝs94Y
8RrthgZ׺MEqk25QztS684;@K:;S\wc://iC6t0TM626?nb^-er(,AIǭl
oJ1ڲ5oj:o/\+xwԬ8G}-;q7ojnjͻ2;x¡9lp`GyW7#r~R dJ*)V'#_>]U=o_7~k]{'7O(>\/_jcB Εny[^e
48$ఀG8Tle̵I'9Bc)OVbM|.=1)""j"ē"  AUE@H3EDRD`]f0)d!GЉ1&<1bb<Ѝzq&><,~iJlvB?HZ<*LS;
q<c;c)w$A0.O*N#G/0J*.j	(q"=ZZCSO[拹ޏLUL'Uѐe~u:kszAt	TVC2RUH8k.*KW4BID)1j؀ed
(70_"$	<Z؀Ɉ}da~N15YTxO^7vUGvUB	OH8.^Z.Z%<,	%ac<[jkbV
[:;L5
aJ{Or츬!7cne!Z^rt
Nd:f\xΧUFvHyՐ~WLLlȞ~$ޅ:G=x PK/    PK    A             2   org/bouncycastle/crypto/digests/AsconHash256.classSKoWnf\u6&l.3d& *uKZ5M	scb$}Ë Fp=:	Ŧ)
27%<ZNe!jr@zүE/;1Jki]
/eE!5wr-`S2M[ŵ@USsV]um;5K:nuIە5Y@[D|$0]nrWZUDUom%pZxo)w	v'2,GEY-2\gڳSm>rj`欬.	5O
17Mdyw_KK#t)Ľ7.<.z8p:vحcʢ-M[:us.,>.P|"\~p㨁>3E.4:
0G^
ΐ0A@)m,1$1p"Ce8pa4IbDO&~f8=򭣊M5zFq7eKdfTfG@y>%5L7ziՋ
\(d3Lcf=-fiA6Y3⻑jt(C}
\E|1P_G4ݱH8+f4?R]TS
9!e&yls+7]/m8<TqլFzNkIV@;(qz7PD$͆`\FEEzEӃ];o7&c PK
$    PK    A             >   org/bouncycastle/crypto/digests/AsconXof$AsconParameters.classS]OP~NVۜn:
hb$[$SL	īZRZv$t$B4Qt#ȅa'uo?<cUBAow{o7LnZD md!r7`'|Ϡ]M
d9w0rpG'c$4Il+ĉCÀXfC56ϯf`HraH$Hex1M_ņW'[#ޘ we}"j&M~/T4&	}+[e8e
*h
YT5a^.pqWETPJ~f=ӿmEא$_`	%
/ rh'K`X%L/uxpW!Eyl	N)5I	/)8(Q*˫|8R@? CK(Ώch;!L<A2tc,7A$"naPK1K  w  PK    A             .   org/bouncycastle/crypto/digests/AsconXof.classTsUm&馄5H+
ZHASK[H@Qfoݸo83(؏}g?7͆b[$3;s9~ p¶hLN
$s%J?S<B$?ׅaNt翪{LlolxҙS̃r9*L@~Sys^5t-^Qmu̎;uug,;ƇT, %(QZ+LSUsEYfUJ+17__Q:-l%\%渵X.jPR&oYTc;p*naC1	+WBlJҲKij,S*ѼW#OJMdT2|Qtn2>칪|mOgX,`OUW72jqB]]QBf#0^2V+2˟/y(qqő_6-?ۛQ[OMKYy=ر§,F.,|qg]mHxFBB>	J/!)edM
M]+}C2?V|)f&7>|S2UaFdᔌFeB@n]betsxAa;$22:8w0 p(ppd(EH$G09p0͡ȁq`oDpA{G.}Fg;PΛ&qxN1li;\jSjeB6Ubb[H4"
ONBKK^vO2PNK|mm{oi\܏e=[-Co aP9 ҐPv@jRp8v#xE[@Oj!J#U\_7m
*uwZō: >AОU\I5*ޭqj>gM^)&lN[ڤ\=7<WA˸z5Q/(xQ
2XD[k,Ҕ
(%GF2z1F4]8oğLw]3JCSK
k1rM|+"I{Su5
&o~}F4yD_PKȲ  #	  PK    A             1   org/bouncycastle/crypto/digests/AsconXof128.classS[oXƱ[.)׭ M)Z
4nE&5vd x@#^ Q	hH	$jg\Zj͜o߿`/X)-[p\B4Sޒ5S[LRȚh˰RJL|mc:~u'FvQ-&SutG5Ku0-]|1j!nQN;m8cnuju09gMBrܦS>9rUo!ܜsA]0|*iԂX!bySMau<rL	-kK25]UM	RBàe-{[??jZ0
aɯ~xyu_7<S~?m'<|{OW49Z:t+@/0nr³	$3KА
WNhӰD5lALZ(UkBv
).hLа؉G !(I ip,8p!pE]VtKIĤkV|jc'%JH#E:!Y)9/P	QlSt%ұOB$JJ9BjFI*}0"lt:$M94PCFc$0>ϑx]!g;ڃ~3ѱMG:2/0%@u5צfYTi/A-%((	|ЅE m0lzCd)ң<eނBg1XS<Yj=X:Wq4p0˺l/}o vPK{M  `  PK    A             2   org/bouncycastle/crypto/digests/AsconXofBase.classTmoT~nia^fPFn-tڦ,ۺHߦR;
i6&9$H{{Ϲ폟/o(r0xc6ON-/ێ\+U+ݫUrӭߩw i<Sw[3fȃV
ܬY]znʬe[ʻӠ=j=	:
U])J;ht'R/&GU
am}ӐʾL62MifS6f50M]uF53 Q46R(ܶSM?hBp(<oղBɯNB!p_)(8ϣKa;2oHM	SKXo©ZZ˴Jտ"j4O[Y+*^UqZEFk*&UdU0Vc	WxtIsJs3\43L00jxokBDSo"4bt5U/!
f.{3\`PL,II0D>`e$,GW>f$:yעfǑ|}G@Κٺf֚RR<E3'OcAc*J,`,Z>$ \xGE5bcK4Ǽtϟ2!w37E$KpUex|ϊq2VLZ?j~z:$T1~I=4[V1+GNT]|Y>J9{{DC.FW~쥱C8,'ȋ9r:Όkՠ5JWRO=C,3,ETROCŐ8U
Xn!zp
"$CLJ85!ׁzm249ПPK"/    PK    A             3   org/bouncycastle/crypto/digests/Blake2bDigest.classWxTq^@k##ubW0Ėd[jaUv?y5M$NL
Jl4?FDm6qmNtw%ag|q>9̜9w_?LD
oP tAzA
,!@JK' Ԗ
tww?-:}:1 uz.z@@FauzLkSu)*ƲlP*ym?v0EgOuٺQ"W;U71PpEwG0w6na$ʃ+v)(DخSICv)񺅋4g͊Z}M;3Q[J[b!W{i8o)TܒD[b؜4:gX	p:9>5ׯ^	Pr[<a+{4[M΢]hmR-72028Tx7-WyGv.n#N쐓ݴ\^uYod]x%SeK5C2ȁ9
%1^Xȑڥ("kvJڼQ^uMW:6צRv*nzf+__&ަ:*qPP*9kP9Z8"\Uwu9Ǔl]ʧE'o;*N]5-KњN=mo:Z$5a`m2Xpݢ+إ2vZO"P1m] J>=P)eG|VFrz>uzG**7̫k|=tv:qG~ճ{UMwz]wEn؍"݁[ygV#^;,'Ix+ˉ_a:njӥ_gjghb _v׊Cm#2Zvm!?TZg2CǌFsq9]\Α#]:|k]yoԻ_޵=KS?;&pM3n}J}S[Gu?|qζGՍ:]ӵ:uV>u^tKJN]s.M=3.[)oy*BSl[unaܹomoZtÝ"ɦLyoҮ3,ֳ{)5O\.?72W V zK"Ť4-0p#QҤUK)eҟѻL@3L l ӤPԤ5To2JeiIiIm0wރ{ߤVIW߇  G G	8 |
ig { |yô
-0moV:XE_+}1}o 9Loot pu=az
;i?ીC'nUQb\gKMo큢C[(@;.@q %cFB-(:H.}e%w^җR"UWJdr/Fc9cnc|gSGD:G>D?+o1"QX^lgSCI@2xNqXR9HAzG ݓ'-A:I<
x,:@0dy0<&K0|  'D;q<
G,/OO^|j|nXY]4kef/9c'Y_DhZcCQ~8NquUhK|:
MN*ixUP;cj:K\` uغS~VJ0%&Oz&/dԏX35S2͒+6'4h2֨H~6yfW5_*NYZr35q(mvز>kt0=o;ކ!{8ӉFA@5*5q]3&A)"h^aR>9[*tovMrWv8nUUmVZ1
|f㭖]oVjG֬vg|gMɐ7$p~m2$}`MY>hY[Yo͕wwn)7Wyb
--C74xh8],BcF[)\Of&5=31Mby>tkTwe~Z-RQrp0nC sd<"'(Q9Pc|ދ1
/m~Wroxʦ;E?@6m\C1y=4S
W6ޙ>G7H,qeL·ڟ5՛ eop۩ZnWwSw" =4\&~{igoX7b)lXոT\e'Iݾ#<_LWs5L=G}U)ﭦo4ڙ~t_J)Pq]~wy'Bcݼ\>E6)d94FWK>Kpt;QZ*/N8LJ@WO݉<w׫5޼&ye
oi4_uo잿>w9Fm;zm}?,
Ҟa'5:ӊa>5ӪYa~ҦjnELc 
&8MG?{eNDU?mt>Bܩ;IH	m32`Ó9uty<Gu?u/1nEУ|[޳aWckO{-
+wXs6ǅga{mNul>0[;D5^Nq|WvwYy#<ZIP_5|M_ӶOyn=.,wtOyx֋ӷ8c|374P76ۛhcoFo-z3/UX2拏3AEϨjF3ޟ1~c񌛘X	Y!ưfXF2VުgYQcE$8tPlË=ABrP1U:j^UKM:OUcBĭ	5HCt|jԼ (6;"g!B
_09&	1ZUaj l3qXc4C$;"̦I>^(SMQM"ꈐc.%pc1:&[uZFWAPǐzpE%nDo[nIk$8JFSxQA$`gׂ Ft6$nի+VAG+ђp7
yT.!*'狡|@WԨ%J=t9&9uHd+);S}O\_PKI
  =  PK    A             4   org/bouncycastle/crypto/digests/Blake2bpDigest.classU]sU~6McJJEl7@0` J%4PUal@
Roa1QuFꍗ>|
TL}9O`>
 Rb_4җHgy$M8?Dd9AA֍H{QJfЕΥ3tndh8=>n3Fykha5F3Г3ٰZ^5zL+jq_j*䲣{<?dZUmz7VAN֧*>F˖i=- T(3"O\˔=Vݦ*jɞ٫Pr;Tf+;uFKX#%4t+dcVde#cJ)~BuϖFQ/aڙy*dQP^Q#o4ڨip̠[M`LMXgUInyF%FŶ♓aۃ
U1#1ي+?vO!=`>=NWujVNWRղjzlZR$@diRmC!12~,S\:+S^l/]
4SsN֮RdVi-Wck&z!3%0D4Zt0$f<]! `x1CxJ+aBx
A{aw+0܆1a0°c2bxa%	^	bA Rb0 fd [ Niȹ?CYu><+cdJ4c-X?8qcRaaa-?q]|Y/Y4ͻ͟yYl!(giv|>bC74UMCMjB6k'Z'N5QMu4Q֤k&Nl-vs'YobX=g电`]OAܫ 9wrLsXǻ?(GIJTU3d|ClURxSLU9z6O-Ow;DTv.I&H2#4TH֊wPw~vּF)R*-JiDG.;
~HA6AX@o&|-,?njY8pǀoSTAF|oRHJDઓӄ
$iϺ<N/Zk/'wY<vʶX63|nG࿍%
a Z!O't3nw/K-qJڔow6[	wP	jZ 1&񪞍$bw>Z{/tT[_A5woD	;$hǮZ-vocwbW?E}Chr֍M(o}<C>N	LwK.wΒlwhШ}7Csey,1Y9RSI.{bZD[ZG[ZZW3[쪍 PKut5  
  PK    A             3   org/bouncycastle/crypto/digests/Blake2sDigest.classW{x[yU7TME)9,C)
)M`Za:XǲY2qӮRnҥk;V.!^8$$B׮k={#&d%#y~;_~k_?~%_kckKYQoju/;?[iJ-rVY(vE!zg?,k``vj}>oP_o x  F}QK&u
o1 :wa~]iB^
k~k߰iUU-(+䝪QpEwS;,nacR.^*|ɺN%gKUWVo 6m<t}M
);[,j|+玩Bɭ_Z[Zq3]_ӮSg+NMN+S(ͩT%fݛu=wdG4,雷nd.
,uVP&$Y0Tӣibvz{?g;RT,156T7VfxP%[Gǝ]ʥ[UѢp|LiX.9.OLV*k9gW(s@B8#+ؓl<4X;vqJؚ`/q5|3o'[@BQ
1
]R%˽PP*9t<Ppݢ+dKL[X|*Xdr'ܙݝ)fKbg+	n39sH
Ψhip:\]Xƚ7AXݵ
+؉^ƪo$˕|ώTitz}-:=IܳAĠS]uMU&U-W;sشuJ9'Bs))3^'U{F_ovEnxg=oͷ0y
-sm]be	&ݥ[.ǫpM.~Lֲ]AB2:k{!?kPKŅqqa&s$Xgҕ&]eҠIC&lm&}2vFLʚäQ(
Og\ws^u+RcgU-[5[}~
W׾9|!8ɒ|ۂOy9>5S``:f@>	0´zô-1NtUnV7#a.%a
maX00]OÔ0v.Ӎ%P
P}4L}
pcazNn
nz$@{ |I |Y > _ !/#C*=$)	ҝd|p 
c OA)k?|3HMW_q~6_ْtt׍ɡ쎢C+%P+-Ga[j<n2?7K1_~/Kn!/D_$5D	_nu"[k,gn8RRyDJ,Q	!	tc&DUTK<ei}/aґzM($DB;H cx"p^91{	لm3X99DS4E/Op.t#0Oc<Y΃<%0<)Ó>XF,#/ !4vӓ_	kGhIj%x{4+EdmUBQC`\BM]W1!ffFU>~mkζuyYF]ݭ}i`BѮ=Bv;_T[uD~}ע-G$g\;?"ql=̱Y,?wAK3oAjJ"L^/8#+hk_!aCn_iZ_9Fy^q~?0O.hQxT{qza1H腙$a*`ҶxvGa5i7pҎ<f[5ZҶUhe^֪yÅ
O?0D/$u-v{n{Ot!~",k=ѭY6"j3C6OjGGsgl{=wݵ/
=~^֠w\/޿Z:tVS1S7xfbPx@zlޮɻfJTk6zYBC]5@pT,
˶0d<]\@Y@2	jFo
~%=Dk35ᗭ߿{kc4l,읱ÌKJ;8/(Q/:/xV?wXq6u#~=O?k#	-oEOE
W,6a*u*_$Nt?s?kv<H㪴TZŴf !-oSkiq 78:|qc^[mǴzL)l}݁׿c1,1=Wcf,^
ʲeQDQo6oQ͇ۻprr3-CGMx  %jC_U3,V]a|XRZjie&Prw;R:Qxd$BWzAbV.?(+~{i<yj=_jk<[X^gSK[ߋ~-_e;=Vy3C~Lt?Aߎiޔ?zSi[6?߯]7Yv,5VoJ
;h7/ضͪm!;Pj(غgEB.'eL .ޣ)~ߒ
y{ڛ?b'mky_DkbRE|_\ko3\`3<Lyl{=L
pÀuLVv;CEx_ׂ%EՖ7%^MR߮6
/Er_jO5Fݥ<|oQWiC#Q~/Q_
z
2jh-j:ҔΘ-F:c(mhf~I#tGFgeTu(iC]P425'lq;+;!;Ì;l73F`F󨱢A]g&(,Da҄dA캐4~`jݧWu2KG0õ!~B
҈&n#ԆOmWuV548a	7X@PVXUaJB,6}jfxO428(QqM8mH>`S[됐)6pc:*԰۬	uZFWC5PGfp0oxom
$5%#RFig<qif=i	kAHOTᆳ!S-jͺpu1aʂ>z$
B;\HI|QTyEAZ8c+hPI{7,Fա'[PK,    PK    A             4   org/bouncycastle/crypto/digests/Blake2spDigest.classUo(1nH6M%Q4,GmT+<wKhȤBR^躺[
l}	!@_a&'Xl[_з}C$9$IsϏ{νԿ&Mj'> Y(b5y|ѷDY.	
+ zF=Ӵޤbej?[Nyqpijh&-@c͘]7=~2^z63m^۶u:qnTRO=^ztDɴ_15ݥR:˦C@]ֲ-dl{+fti5xgѢeò;50Vv)cT2x}gN~90Դ,9a+[;W+Mk%4,{kFeXl2FkitVM+]QM/fΛ5K뙫 :0nusvy5)1idUJ֜n۳KizЃ+0 [3n?[	:^ѐjQ@kAʎw%95Z$6V(uNM2yZ4NnxH#Ɛf(
F<1+W_d<! [ZNlPd{Էۃq&z	bg;FfH20G171!y'\N$@)}&v!n$4
x38
ISs/0fg2p%2,0|aeq8
ASXcg1L8eXb [	8Aiڿ?Ӷz1Z^{tO21Fi(bQe*{Be&Į/B_$}y8B9a#+Zض6Yl[y%A+|5X{Xej쯘a]z~ȰBM]MpCKnD&kX5l\_4C$йb:eϰ
OCݻ!RW0 /YKT&&)M~L\&iuDGvq]|_T-M샤&;JI1/3J2b~9:m;e?6Pw>ߓ/emthHW~MD.&AmD;O=8Sp芒Sd_\L+z^$pZK~r{5xM
cjcl$):/xM3])[и[΄vpaټ&~*>O++G
8VUZ}R7bŌH"hwd.#.}nc
?G5ֿ{chɉܼGM~uTpla8r
?_s).`#8҃Kyk\fU@(fuWvHS"tߠ0 ~C4R/ݳܞ:3x. s2#?L^6~K?~9PKI  
  PK    A             4   org/bouncycastle/crypto/digests/Blake2xsDigest.classUkse~6nJZYP$C[A@R0M@E-d&1@S(~}2ΈcZF?%"J}sy9oxz[X h	` o5na=Gqfԑ
RN
S=R۱"+K5>ܛճ>ҝ>9]r:J9)ˤko4]U=-w>ݱs[c}CÏ(@X=}r,12wlg`pR@:͗ltu9#5U	SlCeP6Pq&88:G*Jr~ ZS9C(ӔHZHkC%\KZa	#ae\i`VWs.m؉S&9	e4;1Ys2Pq%m5]W>`yKfg|
G)8S\gr;9TKo>Uc9U⹜QsL9ftJ+YCj4-EIzYb%wo7ظQSZ2sZ,UL#kV<MiGłQd݉n~IV;Oͮv)֓SΒ].f|AbŢZN3챣!Њiri(Xpo/jVʅjjBCEt%bE[P˩3h!hb˓f1gh1z.:F;˷.ߴ3jQM/ZI،&	0leAM(!Ј!	2l	[ Jhgp?dh@}@⽕=$D!,a?0Caax= N22<pIf8͠q L#D?/bH3L2dtgLA2Π1L0L2C9rydǅ>r^2U<ʼNjjjP-99H)	8	Mk!뗬uwMҩXr#7;[IMKwEj-+T·8{mq5N'"B_p8W"tʡwHJ]-q4^Gx,"TqQ	?%YŴbF|#aVaITQQ*.(M*.)?``4$ok)BUq
ܢI1(s㰪ԀNjWxSSھCФ_^/lIꬥβ:$g|npI<osHs9ӥ+sq{9y<2v!k,_zvN鍮54#xzơzH`J[s<^uIj;ݺNC]u;7׊;s5R!5BŻ;}<nV)v%mMVhnW"Fb"+'8|XHi9kbMjkBzSgd}k|I#EsQ!v/787$g7=krF Ԑvm͍>fw
CamOl\A;jSN"?G]H7ܢ+Jd}mR7Oo@w֞.PK7  ?  PK    A             2   org/bouncycastle/crypto/digests/Blake3Digest.classW	x\U>Wfޛѓ$YvbEޤfI8D(N$=3`7)iI8@ĴP4ZRN0.PB
],(e1vf,NUߧsws?E".5*רUw
rU% `SL +jA1Rb02#ln?{w0hkZAl6vcXf7wٌ?"=2c+3L&NGo{Ow:zC=ڃ|ov-~:չo+ʨ>H34ޖe\jKłP~z-k,|84۾wH@k$6IlEhLd*Ϙʔ9E	N^B}Cxp߁`\{2
qH'C}1C{U;2tNf][CQRれIshg2ΤIh܌$M&L1NiLdَx=d=D4n*g8:4ɃX#ƄiO$STt

0ԁ$6
2˘`B9gRi3i˦+6abwr$h_Z(6*/L$8
>(əQ{
<LFٽʒWbs{Rɩ\Rn쳍gqZ@4(
'{cLh]3b3$Q#Ghb1x{jbs>6jNgbIXnN	ۛ1}Q.<:|\34t<1F94STw,$r9]S1Ubp/Nk:%SGihM$;%2S3dӃD1r#c31fYgEP|#訨F'o1.5[70T &YȍkkV
}T2z8-uuy0YͿ0z$d5H4
y<1_S33w
]iJ%!cNgω2=!wLReO%&&!L&y3fL:%6)TS1Ts*z,2I!Eu+
Y*Ikd?UCݓO>N=#CAap3xTcg

J6B
]\>:ϯw~g½dtJm*ViT1LUPiRJIU)R*Uʨ4#*JTDzL޷>`wen8Q~ͪ_a-&^I6jqzI~7h Ҭ
y7Zv%UW^-GKt>:ghNw=:<SMԦӓcx?i_t+N?0Dn֓Gvn"dxagpqSf&UH)̰|:PNO0%]@P~*ҩQNzD>gTiCkuz?1:Et/E/tI~E:u_4H_ҧ^D_c+f3-1|b63w_GbG|IG@@e6]}:]c>ÿ3'?
UAaP4/C>PPP`0g(gJy>#c(a(ψb5t NM*h|eًat;}Ԉ@%!{Dx-Н-'yC
: W;38!tȿrC+搟aEowȿ
jE>79_yE=WBCk!G :Yȍ S[h	7-IgOMoӧl=t0IO?I%}Ʀ{%->g	}!go@< 5vL恮
ſM,n_	~P^g=B/N0h`A#`]D].66iMB>p.D9ۑyсLEtQļxx9/١v?iWF
#pum/ٓ!ɒۓC9b{@-z=4^
XIsQPd:עoP K9)P謹8/5/>6%]I:Uz
i@+4$,y&PdNnQyZǹxw9ֱghyA/)r[Y`8QF0FyWi2h8|µrV>GFLU)S*^lĊEqY!c.O)<6%\^1bz˔VwsU-sCmveV#ҤLɆa1WIlJB`}0W9ό RÁdR9
J --S}9AOBy
gH yg *ǝET{O?O*`?)AExU)on52ŮV]{W#\6#'s7]UW<a_ʕS'OIZUb'xm:6j2d|cR_Q3'jV͉*Nh5raeNlayNlitp6,GXG@[]uUqA:-
s^s`vu@mRU:%_XнRpȸ6t)<d5<~*v@Y[ۍUgH۵
aߑ+1Amk13%{wcUV)ͪ,\Y򂸗cnPEVs\gp]!b܁,&{pK"ncA}"wyE3Թkoj='sG]z㴺
u4wv7$6{]L1^]Ɩ:y)
ye4<b:KErE3Fn1|F!FKðd5*qFGP̬όOզE1i%\8QjA^v!65Hbh#
'CYV61"eoqLYj{ 5ӓr݊}[c]c4)~=g1٠˭*__9-
##2KRa,	kF,1gV`zVs7e*kfw!ۅV^Q8v,0~e]K]qPuyW=MٴCRˢVҖoeďE,fѹ!61<Wk̹]w
͡薾Pϧ#V[klY5jfC,QQ--Zd7NeH9z[r!UG#X\=-
V.{<@Xl
(r #ڛl*FQq.bWv2شhs,^=;S4[ OTn[B܁aa
GX4橜:CTzwN)dn,Vn`7[n~?`Fy薜W}D\p9qM<Q
5\F] t,0
F(*sRJKc~9QKB~) xJ~PKYT ,    PK    A             8   org/bouncycastle/crypto/digests/BufferBaseDigest$1.classA
0D'*=QU.3ol	$Ы Jz[0	`)CщZ/UG20S>h
`y*ort6/M!0bXַF)\m0?Cn%&H#Ab)PKn8Ƙ      PK    A             H   org/bouncycastle/crypto/digests/BufferBaseDigest$BufferedProcessor.classS]OP~ڭ(ZP6T	ݦ^iXqP#\YwJqM$2Dx?99ob_0-]ڬʻsϮBcA}'X!g3hK#D;Κ/ݸGxwm#nyXϚIuf&DAرAwbOXN8Łr;"#"y$${RJ4{lҰ Z0pD!?A,h]TZkXhpAE
)ָmp76FZ:2tLJ#
:`:ʨ,JsM9a1S&9Ǥn-zE(6E
ZuCP>F̝mۑW2y0ÐkWFJ.mfɧ+TNa~J$p ,?Oz+Ǹ5t(h-+_QrrXw7T,Hz=d0¼%PO>@S?AU>Fzn^8r?o`a3)*2![MJyVF6 PKa%4    PK    A             I   org/bouncycastle/crypto/digests/BufferBaseDigest$ImmediateProcessor.classSMo@}'q`-mpցVDJ`lNE5J(Ĭ!0v쏟߾uT~/%JUeHLK	1͞g4wY=![ݧom!ZU|]<N7{16}~ȍw;Ƴ澰CRn׽a;FAg0M'Q%EBm"ߧP}ASeR,;8dBA
HREj*fTSq^wkZKWqpn:iiHB0+iHi".Q>y\4XRsr7hk^-{ui
A [o}
_Fm>ؑÌ%"MһJ &GJy1J@~w$Tp(,?7*GX=ͱ[HP1V{$p(KA!=& X&Lj?l|z8ҧ?%(L	?Y2>-m9/PGncpY/PK0=p9    PK    A             G   org/bouncycastle/crypto/digests/BufferBaseDigest$ProcessingBuffer.classAK@4ųxОփQAmyM.)֟7/|
'kyx"Lex!k϶	7\kU+΄_FNj#+ëN϶r'ՖU \U[WB}ZQ}kv|;&+UuDj84C!#䥵n}q&	DOp0dQg~g8IPKgi   I  PK    A             K   org/bouncycastle/crypto/digests/BufferBaseDigest$ProcessingBufferType.classQn@=kZ)W,TT(R3 #F&JHGUaE7Xss̯w ȶ;S\T{ɩ@spٙ3rMjD	֭^'P^Ki2\؟ΗKH2<ZƓ:	śU3tjv=Glf <6P2Dǝp|hZ`XcBCC*jazA/9faDTk-7U<JKDQy}uR].SM7=vVGo	e([6yw_.ĳN`w4xLRٴ㣔D[ona.R>Z=dUrrPKuά    PK    A             6   org/bouncycastle/crypto/digests/BufferBaseDigest.classUmSU~,YBJ
@k%@5-lM-ݸa3Af:X
>0<{^^
l5	D_ǇDI}"{tD3,hGᅿ
6-И.4F"ú4!\_B^ێg"i5ꎣWTFAEwMK/H[v|ye4LayT
ҋW:[jJ]ВѰʹxbZXyo5ko79P۳nwv<	L=7șV}#dZYЗb$nY7TA5axG+'T3
+s+!i;Բ]^ARԤ<Ӷ$\9M{'p4Ši!nդw@BF96M?qf'b.TD3{scTp>*%c~ʞYH QtֶZ
\rϓncp˥^
S*

h
59(|'%/mw!8T(?t/gզLh-_<{ѳ';@5S-=x[E+c* H1^Ea]hGbŧ*Z0"	f'1)1|ΐa Gp""0i/dgX`_G00\FaaVB	/<ahl'͵,Ltyh9>m'a?r7e8 >a\R\_Ra}S>2UiՄ4YsPmϴZ-<Ib%0%]PVv/BϛoZe(BoBC
<KxTeگ?)q㟫K'bj"͉7i
u<PTIZ2޵<bnPf+Oi	˺veyM11y4mcwPd.KLrc/x
a8A=#R*mg衊-|9
l4[UKT.[3Gź.T&A>e]K?nft	UDIjαѺ,523Ey}CхQ۔0ou5%Qٶ4PKN7  b
  PK    A             2   org/bouncycastle/crypto/digests/CSHAKEDigest.classUkSg~6w,jivـA5
ew	ѐƊ_?~h-08s].
s{9]{KQAzZBHkr9>*Zn{ٰ竼:,!w" FNX(.3{fH(tNB}2ƫNeByLw\KQӦS2͢S%4N4\Dt=OID'jvuVabBBqʖMc5\s%vt,{حJy	˶)Rޝ yNNN
SzGkl9o\2EO{keW}fStۢ=Khs*S+ӦQuvڬL]'#Ȱ]T0J٩UU+NRO2Z{Yg[(ҐLkHgybˆe*A])\X+$x0
W6*taѾ0EF2^*C&]\FB:HrHO=]"~%<ܫ=ogOmƅ>Oy4jCc=nY#6JV4yt35DӮUY[Ѥbؤ"Ul@@v-а硨DTlFT^4CeXen^I
ȱ]_V3021c8p"f0G
QҞd8pw,a"Nb806ɐgDхzI5 C.@:C6A}&N[m7q}/z|#y|~J{67""A~Cy;ubJ)9DH
fp%222^_ *o{I<@QO+=u|Cі}SͲgTIS&::;'~6uGiAޟ".\d#A*@
UUxa}"ru˩OOX]ɛX: d#dṼ4IJUc$IPVz~h*6EKѴMg6UڄĦR 2߉~q	Z802FijspgAУHwH"z0<i=Hs0yOMX.>FQ~x67!tr?Qu`G\lI$f_\}܃&V^W7Dz r*tsR #R}mBrM"
bgPK|   1
  PK    A             4   org/bouncycastle/crypto/digests/DSTU7564Digest.class	\Te7{`6/FD5Q\-FE`P1M
-[Rˬ2r)7Բ,],Ԭ-gF-<9|-JY0֩आuJ.%!)#aN2g
mA48tȠDb mgj{e6,dsO&.JiSzJFK<vOsGyMJR-Ztj),]y:f}lִ9ɈS	-XOTP(SQC\Ů\oQN+F+;' w;wTg/6) xqKStt!.aT2
uFnqY]<Ɠ*}7niv
p,{=FqpQz]SQ8=UZz(ڬ']ⓆGdԗN
#^ݵ0&tq9\Όw 8_q"ǋ\>w-}tn[Կ:YPoa>-f̣S489[Z[*=2ηtiq6/ZSw]֩&aoP_v`gR\LW'yuohkX9drG锵؋.k/"H%nlK-O	CJFxy%_"+%EizhVuof%EEb;;--,(-*v]ޱnÍEya0>p
0Ln*G7M4Apވ'nOДA;'yd+dPڡiBL?C'aϤژT[jgRM*ݤ:TjRLI0)|5_nHjثʽ+]J;CGkw5Ooݑ>wx;[Q}:Trա]ی;,b*jCGڪTMJhLJч:U%RԥGѐ"KeU(SԋVՓ"Z elUw,VQZU#e*ܪ2U5"NFїF*ҪtЗz٪O
kVJ-
QϪ!jzb17(RI2+(VRM*5ТfP<ZLˢS;,vEzJQlJ}(vR|LEQZj#-j@.&|#U*(y|*ʦK 5KXj**Aj ת2	U*H%yIZm>Zūk?*^;\KDj=5
bsq 57/
u2ٱA^X^O ]SvEPPPשT*d*	˱d-VpQ؍V
JuBK7VどhB =jU4ko3Ikw
v$Z>۠~&M*"h4¡SUVDzU%2N~/Ua9A[i*2 8KUd0󬅆`G1잖uǾҪf_CzE&`3-BBCq]5OL5:UZOS2B[i3[nyջQ.V&V6.Cj%A}hZt-wW~:<U#~숛k^}35қ?NtT=\Ǐya^['Zz˭tIq
6<K֎Ԇ Lk^G>/R5ypқ\v JO+?e,K5y[ܴR]]L IXҖi{V|߅u&E*6:i>h}NGdjy7/SkJF9Fo:]BXU5u8aOמR	tԐJuB7yv(no2ϥ|qo#R]N5L
6S_x1f(z!?TOlPW9J%{˞r+)Bo(u66FxMvnOEmܴCATmSU'Jҧx1|x/s^WA*L' >p/9ٓΥ3{t.Rܡ
.jT
kІ@,	lĄ($}A41JyPM(O 6=tdB<h3F&ʨFٟp+=mF\rY]3ii=ceh8GRt!*zx_,;vl,}g1LǳZ@X.6%x4s4ޙwFљjvٙju ·; `,QjH-<fL6+.~d$f1HKpJl\fZThp	63._^>mov+?
@;O0JC'Wh'')`{/,fr&%aYp,m&d-
>$!(X6:Sc`u: ̙pgj9SԷ(5dRjݖ䱋d";Jن+h<BA+̴`ʕ4.TbqxZHD8*q8J	b2%8O%͎+@Kp].	Nh瑋J'6J'@NhN#u";FH넍;FHDwϡuBkYtBkY։@'l=Nh-n|Nh-NZNq'xNh7	Ɂ&0NX+NhM4k Љ(
Zm܉U<Љ8
ZBt_ߘx"1ClQ
3ib0Ŭfg[H|bEtcOpWm֯O3=P_רцu)5PdּFYfC֨#83E%Dˢ͔`79: ,3nrkCatXcatX#6<:k
6,pp>mFi`/"5`'qA5D[!9F_8I
82.ԱM?
KO%6юcM Г9QdW^<m6Û9z蜝cs`13f
0Mi0C+L<
cZf0A&h	S(3zcڠf
x30kט0/f<LnL;t_`&u/f=XYc/a6p$b&C4Na6p 	t̦0c6-c\
?c0m0f[Xl1;&̎f'3
.bC9fgH]4f7cW033LX21{LPǄ`fA{{~
f
/` @y/800s9cjC`3AH
-1]s\̅
y0
1|9̑0s,֘aB؎"H|Z`C=HA
f)k0B[qf1˘ 
s",;sΉPe*SG/*0TBePyQ<<	u<<
̀ZT'|~L2<TfC*s`>( PDEȧ2:Qy	*_Ry2RY QY
㨼T)_,\#/RY
Ry>rAe9TVB(aw`UjBe
졲ޣަRg'lfT*!ʻp&Ge3̡,~
Tއ_| ?POSZQHQ	|ר|bS<Ke7ةT£TT9*B Q9P9R9YTB,c!`rr*||è|	R
>5r
Q|@4rST~H*g!sp]*?^*/0ʯ0ȦrQ}\.T~Td*4*W>p5E:Lrr&gU!z6=?=sDϧLOu},ӆ9az0=2=5?t'czLO3|azRLe^'4cz~gzLoLO"ӳ)ezyl`yV<_<Y73幋iYY.,Og!|d<cy6<,(\bycyZ<Y,~egӇ山<Ї>HLO/'y|czj2=1=Sa8ezRL.{`zn0=/0=]LO1=eLwLLLϷLi|l`z
Lez1=ØLY,azʙd	,<",y<[EȳW	y,"?f#Y9z!zj	=	=
=݅1'T)zF
=&]g#4gz轑#{	M݆iG[$l||>+SO7g |N	>ϛׂU+|O=,\{
Ş9bO#v)ӗ73MF'\M,g}|Og}}}Z>_>Eڢ<gR)}>_>DE-#~$`|bOKsR{֋==zWgs6z=uIBϓBOgгMi(EzM'z^"z*D+sdzyj`y<<<9,O&Sq<<sXXM,,04s<6˓cy<X!,,Jgӟl2L8Fj[M["=o1L8gӳ	az2=LOӋY<gz0=G#A3<&,gx&2<2<`x3<}Oo-g ó<0<sO
sdx0<3g+ϻ7
q2<bgsi$0<9D;N3ݹfwcw;;;-ĝŝO#b*<g/x~x<Og3OySx	<O='Ii*</x:<NOV<
<'<)lx-ϗB,y~y<DȳKi#Ċ<D0}/sQ<</<JDO?gcz.	=o=[BBOs.gsN)	=SogsY)ze^yP)yrEZ"O]3BIy""s"
x<	<E$7YgK$nBO'⢼\~;/{a|)W5y.7/A&~9U zf=DO	ӓ$3=~L}d=	lOM6CxEnLO{1ӓgzʙLϓL0S)cz.3=1=1=NޥX,=,'t`y<<Yӎ<<X,O'3g31<{XX
s9|T<Yzvf#+܍:՝RՃ93XL~dQ{z#
ic{=QllllO Ӕy=ٞCSta{o}=[؞ٞellt۳<G+lUg(sb~+)3>v$3Ib|`|V0>#>O÷tY+{=
ĞgسPY/{==?=ĞbSbbOABBgDSq==B?pDsZ9.+yE"OZ,<#xu^H9!tw:;HF/,wv;ŝjEvFq;/;;q;Hq'6wwwV;;qH<,_G!<%ug)C/$(gȳQ$LyƉ<""Ϸ"J'(yRDr]*_=9B[BO/3IyNz>zzj	=_=.E PK|Q  ,3  PK    A             5   org/bouncycastle/crypto/digests/EncodableDigest.classu10P3B&/@PS(QrD(x BXijy TTyr>5b	N6su{!iƥGl0%Ŵ皇6Ц
<SˠPEIV|PKȞ      PK    A             4   org/bouncycastle/crypto/digests/GOST3411Digest.classWktTWܙ\)2GÝ)1	AIHihx`erLfҙBZ+RUZ}*B<H(j}Tե?\>L^$WY̷ggsn^ V*0 P@-_ poy-|ssmsf3mu20'g/%i\uXO&R	g=Z'eeakqu
<uU$n76lmߺ)v
דMۢՕ$*w7鷅~%'NvЏ"+7/c*oe2VO<CǮKwFÎKNJ,eOtu*P<NT9wZaffchG:b@xIG=3NG$mTlضh
t&ttn:)lRF;<7mVwҙ6&M<@40\*Vb۞v|*ړul\-=nL8NҮO&L{*Q'nei]XEm2MdU7
ݙt&=v{wiFNڭɰUd+&pUrIlqmo
ftY3[qݳ9Viv5Wd+6pSʋbw=IʰdzV|+MȊ/cgm7+гݝܤ"*5uwW吙g?zv&fB4PaiؠVC5ܩa44hجkhʵ3Mז4a^	$RJ'+g ߴ}|O	ՔҵbBW_%&qk&+&\Nf8g*f8]1&4}4'۰+s➺چiTe;8s2Y=:vTG!&3,a(ca)2+Lm1{P#P:V!cP5[B぀[3E*1aNG%
uTбI۩cR:q3XwC!Ѻuq۱ g
` C2<a>G2|ãg'>iьǂ Ľx.H1|3|	/3|_c:ó3|[A #oъ/a d8<SMYn_|X)gf9НqS-ڃ`Jݦb6
zD%ITR}AcRLPjAłIP#A($].
AKq.\H<;`;9l@`4sx4q\ғI:`jF+Yʙo8'U'L#t4tPSa7O#Yq99M
qsAY}o|-bb-fX,IFHr]ȄGk\mV.y'K	՜ko>p!QnFH헃w;u(;.nQjh^zJlޖa]#QV^xMfriTɆ͏a^AT }=1Vˇ<!uC"s B+-5"?i(b\Z3 2ȝU)5HOh䆫pK|Kϕw,S#Y? (vXب<0ɰ%4kIl>xu:E&@)WLu.nߓf	}嶔_I9ْH?!r(dA]]s%~k>S<(yrx

\ƹ*^u{apLc+CFY/C<Sr39P?$ү
o9ػ>1;-b*cUîΆao>WS;ES?Iӆ}dÔiI@Ri:sذ?<~qa?-j0^>p'eD\|MD(bop
qs]BV.J5c/]&(ʱyؕ zRaI'#2/bOmAu<%tG$!:G,onk>HEcS-za0])TRrOzhcc1Աo`xw묯J%vUЩ6L&'cؙAooWkcD^`P>vIKi-^-{C5^%ϛrj
Q)!N9?
KbY$:-F@] $0<Sx4pEWNN#]:#촜FӲp1D<2Rv'=p&|`9XM}?kni/_ŌU?A"CFdG,Ԉۯ5}R3PnJy]?w_aֹO11G'zL|,",9G~V&9cIQ@/4j5jDD
?1ƜX279]\!s8bg,0,b(e]a1K<Sx]!PK`?3
    PK    A             9   org/bouncycastle/crypto/digests/GOST3411_2012Digest.classuTQ=ĔIIiQDAVCBPZEJiAA@~߹1k5uH!f!Po"вV_B_/&Urpuqs:ϣ/4ſ		]}?l%+':/7d%$=<ܯy3]пx:\ᒓUw7O/{7/8kٻ+\tqkKU=NWRrqrsDs57\<ܯ9yx8yL??)ebnb.;9x=S1wg7=\<yO2vi߭x͡~!bgM%$IKH\|\^.S/G?=,3tC$v㚻?'O}x8to5G{=:0q'{=-|(
ۄSLƋl_t;sϽ߭)2@.|ux1al^ޓz_3<WV|cwHDIljZ'[So
QslwRY3&tH ?K[̏,wE*
w\͢$~͍.Qe}R6 Ыqbq5gF?~
/yhS8U8WjOFkK9"oJfiFoܨP}uÂ]NU R2O#;W$~g3䖀@G#J~P<EA`q~PA`ճI|GWYLA$Ix
Dz0GLAz n=5O/1a2횎AД#!]=.Xe6#R}xt%#5V<:*s]L.ߤGnTr즸Nƫx2s254μ2q.x|Ɩs*p-<!._wM~:<sN=kK3Һ0"[Mw|n7f\D-AϷ*X#/;-!"kn >]g:B.qP#25B{}
Dȝ)O_FRpY!_Ҙ|?)\8JlL89ʏʼm8[Q,ШD 4cHe={T
l#t*nE?qپ@A\0cvXzaE՟Hf2"a4k􀔉*?ϼăp]r<xH ]&S]8w |@/7>Z%r14i!|XDoꚟ2yջjRʷay-;"-9E#?@9"Y4Q}!CEDlV6!.nK%5)9Yt{D6%m) Ml4m}ȥ&￣Q6%+`̍N~ƫz[OQ{ҝDԛބZ(}BvkTs9d)͏mBmt'Sp Z#>mD{ӾBͻ%A8}7͖V@ouNYl!FW\Ęoi?߇W
SL#bx|N]BL\Ci̽\]كM/K}q\g,ؒ V%<b/Zx4#/*wO}y"hcb;ZNDMAa+'"NY7qMyO<DqAU-=<5şȽd	e,j2n#^:v
⯍ru@|ǟwOk?V"M<
;ը5qg幁&	B;H`z}L&mB	/|O^
D@_ґw|	C4!aȫ{bH$\ruDa^@O)6M${0w6}|֑;ԅ$Ue	OEʹND3-DYOg& ɧڭYN"Ur{&Ze	/Ő4SxQTIM	uw0\y|QO\v$',+$$8
<[4Ǔ2
<`ưd\'Cɧ:ꐬr{/:jlј=FGg]RyVH0DeyrJ]/?ѯF+zLIj RR~ҼCJc.v6,Y>CY/J43v{ U"τk+R3&Cj'	kH<r>R{L㔪"a2woIhyѳ|B4 +H;._rpiK1H5ɯ>ԅIE)G};O-b}4Sk<{512XE؃[񴳃<-<^I(RI?"d76e!~"]S]
);ud9`[nHۧREzdP9#Cĩj	/txRy	TyZ^&
#r!m@6;)2H:)o3Lbݞ=<s-gvųow+&YɼU;xa9ΞSޟ?mEyӳqmj<|]|,_O-Tk5H<5rT}#DǑ= R:2]toFf5ɔCln@6 o^~5]4:%Fo/O!|Z	X[^@@	)qc~d>sBIB#:Q!kv\籐ZdS-lCtm,q\2BvXoU2Av*_Gd9z*.3# XNuՒYx \Y&N'DV
Ür«nDNlwp}`UF䒑X@.ﻉ&?ǔeЅ\oပs
ksGnCL_WpQ7g'FnSѾqygNz!8?<Rݮ#ŷuۣAk|[HuR)rex">`w$rR7
$~>!
aE?ȏ	/L!ztSvC4䙟Oגeuxqz~*/\|"EFM$88^TV=,yZQl( |Fy
b-WQ^!iMF5($)Q'
f9\Dށ{(=g~

)RCUt8ZJaq9d~ZEa.({̧#	7P8%"Xѷ9(_x|}f:irPdxFa瀢RSoVhx͜E_٤YBߡ1oRǹwҡ̀7qF[>֩`Au[sy(R[EqՏR(N]N4F	aqn0J)XУDxQrobRuS9%)ߐLo%C*Y(Y
-=ĎR3(Zl2
WGmQ6=(-SԶGi4xqzʨ6&䣌#?ʤ#4xL&ܻ#ejSy(}y\eUo9=GI9(F{
碶б\D*8ywƽ{ID+ݷ(`j7JE~˨%d:
)JWT(_-GŻ^(,JVBv;dxI)trO&c
\Àxҫ^2۴%{eܣ7OeU _m'Eٝ*btwwnRn</T3uiB{ao?w+BeڛߓM5N?:v0W8O>ESr
/tQm]Tў#L@U5gGPU㣯r8U]eώ
t(OF3MXwIhInªp-F_b-73/<wrPF/[%j,DΠF%eCh5'}̽S)1(GͲh߂8%Rr<>g?Zy,Z&G5c=O'ګG[
jorחo@mcר1~`c:j8\}!#$Qw,}mн)s#C9ICrQn/.ԵrV?w裞H
O'5󗍨2/mS8;.2n~"kT*I1JRH+r9r7^fN9Mv 2˵B*Oa0'S^
m_g7ūs#Nъx*A{
L2^{)=
R|_<ECk*?	?nסSmYv
~8s=Lrk'Vix}É(B^gthuK=I~K1L׃?rӹ 4jip<A͟h@}{4&x<r ,G٫ׇ9qV\$|Kc[h"?X*MT*GOգؘЗOdhq-XIMaO.I).fDwTETG,\ȸfBz;gXL@yۜ ͩn[Kh~"u4	5MD+GwK<*q
-D
iѢ?l<\1v
Rh	6NS:Μ'A-OLzҋ@
*sGo3RGh5V;FbwFLgߢӹ12\;[Rfx
!A7^%9d7r3z4FXފ
<94onډo&(%7b%wM_UJhcs'`]q*=5"ct.ö́}]m!;2Kb_Q
o_~L幏cdê+x{w
MJx`ҊJaxW4˻x[є!wMNJDA{SrsnfJz?`)пǻ;xCV 4NSh>Hvǲ~$j՗hwwf,QC{k%O>{h3[GRq^w{踠Yc;h譟xt0E8cXnr1kM
;e,i*ρx;~栗'KLqܳg[bw>^;82WY|7Hf7.Hܢ=G3v@us<@4M#)+`Q|HJC@Ĕq>DyZG}䭯\ڬE'ےɱYYmt
^hNfgSWG:뿨QR<+:ȈGʣH#rmɬ(՗k_C<׻GU:Xk7Cկcl=L|T<o`w]LT)s)".B׿e)Q.~7<3뀮w{t+0^FΧr6
jeE a}LJAAIt;+jWءSԹOhM2=5UsJw[\jOsgĭEx|J
=9wG6r')W"8Th	C	,Xpz_7ܣDnMЍ4}Y?Og)G^"WFs}al'Xd
W{Q37jPto=`^RgWؠ_YЪj!<Xoq^oNdߣXu01tRϣjDYmf}smɬ*h82ˋ's0"4>)W>=ʕ	|"~u||8̂O^MZ?'wo^]6RZ,F*)>^sמ_S1Hh,gxOWƠuίEw.cm^/'m._|jfNM;Ǎ1D@t.0QM!
~ȇl
f*<FκIahV|&}'`tjEN,F1"@u+kg+>A*|!
y#;vg/-gSc`5w)r|*ON]+[aG!Gbpi9BT1<;-o?
Ff}H,c
_XiN|o%~)>$I/9Oge~|A;FĈy;ouL
#7i$ȃgd	'vH)K5Q˓w1*ip{9C&ձ71?p Fshrb47!.6JuIё<?,Way{x1Zzj	%uc實UTybG˥ncs?ial0ۇXz0.*vT3
'a\ݫb(M
nR<ޥfr+2vqLArL1RbDHΤ?+^9b"}1V&J?4c=T
&~\'I?7Nbyj[GnPbR`,v׹YWcҋ:Ob&oؚ/&Y[8S>l~kv1@|gȮ1FSõ7:*bj|)*Gb\͞R\9+0-ȘD=mj)}{K31qkluX+?(p3'dAHRbFFO[xfNOtc#y#̔7Z_`}ʝC%O>Vi(աH.|pדd_}:'5q|R輈3bOFϧ߮	yY~W=zf{QQcCҬ-][+*mm|9.ZyDao*aĜiz==:v PO;\f0WCsx4pMsX_<z㸼?EċSa^޼JU̟ݧį'Oa>!/>GtB\;uJ1?ˇoZ	urwM'u|YߜO>+tb-D4lߚ_X_-5X`rrE#$X>JW,<S=͚Q, յ]X(O
S<U.aa(_,zE	^cLx?C+,t*eŃǤX,N#:bHѽU K7:1`I`3b\Kfʛ\s,9Q6XKjY/}~渏eGuzߔ,3(/eòOn	XTe`Kme_vݺXw+H;r&WXIdd?턕ITc%ߙs)^U;
ڱ>q?5V	(*~8UmX=/Eb͊UXѢ;#ejX;0GKvR
a-A<ryHOZE`֮zVukKG/b퇡}+)(GÎa]uYNZ7`=lVke(Eru^$29^n2=lZ_l:c=ؐxP	<q{0e^el= #5v?avFY|oJA4F>[+xWz[<XUK6%/s[z>A+x#rW?d>;"bjj?$"snTah~|ּcDd"SGW{*M~y`%7beOh}Rp-~(TO(uu9ގWtO=ů+;z+_{l	~}S&_㵱ɔrMl2Dw_M&Ǳ|*rCc6c3@l&eXu.f_A%Tqfj{ws9L~B57Uv! ~K~'ߞM"0i/N^bN?jb7vǩsB0+g?kzQfRgɺx[.5v/Ⱅ305>i֐lуFlse)bwTvlt]vL6絙p?l+|bj3}B^asW׫=^td ;ǪRMHk}O	v)-`k荳Mᾰp,;<Rmع5Rႝ5z]E
.e?bSkq#RNop/a׭jv'UhnnL:v
˷ccYqM{W׆=Z^n16φ;z{n0aO$O٩˴]kR=\]}yɩbb/2ow|bm<`r-N\_3/a傔QkUԑ6/5J{~-W2vVw6úL e&Ɇ7A೜\ A]/Gsp/w??=:. X`^B
_N=	*ꖃJ4@xc?4٣0!V V(7pn̹ArD$ZsՁ-J %js'6D'\uIQ"~*	V.9Z2>}q΢\ (9bD#doT4k9karv9GxqHzN+[n2섋mZfU"[_/xV zcfJ")\@[u5<>ef;_>/	G1QR)m=Z}mKV5j i |챚 QK':-9BWd_ؾJSWƀAX"HZZ)k0 :RL bhKAhu;&W9fAuدd?%=>T̢5x
|YsG@Y<2FM/A7j&8Y[ rO 7=(?r-#<opfi,RD<ѳŠ1_)פ%|z7(M1)E93,PYgQBr]e7PH: 
TP^w,L̠;պ΋
v^fdE((/q1OFLm{
W?*v. *hzTI۲#拫Uq>Px+^Jn
ŵo@\bɒ@_q
QB3r.|aA!Z8xk%㈝~>yIk,?`^ƱM핫z"b6ԯ[ tW*5;k_m,@V Q;oA#yѠQ}>nN;ߥ@xޥc7(4oM%+@X̵* o?s@{P|R6hi4V7^z'K!ݩ3@ʘgF2t&ɩAiP޽$Y0C	Vš'B{Nӽ8TBL*DQ_<9qh˙#1~ڀ|x:Q *Iiׇ	?7&Q}t':ك.G6SږAhE z'ם@o\-zBGA`s7A_ɬ>Z}$f>`+xFi`C?q_RPb\ez
,oуaKSޛ`$=!R{(i_֙d93-+6FxG*.	JTCg`>"PLG(B]$t, L'&7DZnMŨbo{.LYt.iPY3F|<Mve{8,:*X5wx$q8tC."N)b#_x	G=?f+,F`>6pXJu&3H`V%Jf 0K޾yߥo[m|[YXSiݗqF}$S7{>M\Z<X:Z
Uƃeo`%f$X)4#Vv5k'j}j8V	<
Sɛj{O%\k7 `2203܍2`h,%-[NKf
9Hv|i}ͩcwF I+ju`?<c4=vc$~&k܀df;`$!?`_o.vAIkH
iGؽ#oK 8IB/lv맺Rp,EƧ_Qk<)x;8h4FyN#88#y-nL<*t~|AS
I!-;"-].?=6W嚼Ax
\9oyV֏$IΟ[q|>vpn].u;2pFKĿ_wu
˻ڋ]YcMj0pV=
6+ﱨpY>t7>'zڈ)x2K|St4 <=d|l|3GH
Dw>∢3L։PC1eR&cׯI8\XmxG^_hcƑÊ˴~Q;b&+g&xoݶ8"xsh3-}u<ҙo?sOO&Hzf8ąJR592^[4'ˇw|UO_C5=wGod6r_s0Sxޗ Nl9&Ѻ-8J~@EG6OIQi0>AM6rG>1hq'/vl\X'4! P)RzZoj/@btnI߂7acoj_WLjxEɧ		VxAP.O
jN@yiF1"hӣ,$p05=פW4!1=!3!>wBY
GJ TsV6[IBdmkg55jx6IS<^=ac6!jG?
jN+$BC)Ww@xTDHdZA+F^D\S:+]# #DWYJJCݿs6D~^?7Do
eO@s6D%Z]mMuƹUEdC4ލZ;w^ey%89n3R^cFmli-a9=-jʞ򌟫cWf_eB$q(|	1AΛ;T0rb:X%=
}n
%&u<m#YnC_MF
W!n5DDmVk5=uRsxo 
:+N7.		>֐'cZ0A"[O>$*ZEyAT^brLYT8֨r =>$|QF{="Lx2CQ7$.R$?ԡ[N|ݐҍ2&ეɻ_6 u݊&HԞۃ|p]<Q4 iՐh=P;	^k[QNtҹ)ߒ,Tg$F
s8m*'aqt/8+Q9_齲wx]{Wq/G[o.drAϖ90;jf KX(Z8d(LW}:d>Һ߂,i\vP2}]
YGm GϡX \UoH!;Yv:rSWyC﫠3!ǒaP9/ANd+_>
93Ik]!ge2vc |,ȟq"&y^KjwQcIy	\?Y'!3yMBFo_ʏz
J{^] >5
:6gb̠aZ@qp
:K$)P蹠/-P~#|'B3(rsjlߚY/Pt>p* r07A1ɝP,@
W4'l^l>$jPjVlHDnGH4mvLE(͸f'L}	VN*8!|RHN8%_ǉs38>'jfI.\ǉn;a-84'{d!W,tq+ N\*Wl耓_(#Gpr4׻p{o93N1Z]5<$Sv'_Z+: Ny]Y;x=rW<N8T6$Nm㹝ql$?,],+
5$8(P}Ӵ##|}i3p::q:ofǭ8Yo}^?q$.%CYM*OJ,;K#C>SJE\NőtWA
*ͫuPs-
fxG*z*7TqACH"\*ɧO5k?2C?7*KQRO#OjsC#P0>QhW(@OXІ T?2'K@MqqAF-ԬeK{=@Y:-󗾩j-߱Cq)RBxp!HQzy_\;^K
vBuu3GNxlB&j)34=_ltB~@>,Q7#FyJuxҚ$~sCk~(,p)eG)WoqF*"Wy03ϹɎLIEObμ#l$wI,'6i\ h^^=V hvt>zGQ}OfJQG^/׮I@˖4ײ(<n=<7p	Zw_qz<ۮBkH4D>۱tLY(e]e? Fwଳ)8oiSu#D'q]$YקgW=DIC9	h۝|w'vigM'/v}Ѵ(IRhϾ
=9%ESsl߸t_Cyg4t:J'sA͜&tӬ\@篙TShQZW^pj}۫ӣduFIUE
.5/
B7/[yYuA2 9z̡&B4=gpm%6]Y2]}:	ȿJ{75\6JC/T,MH)_ieB+п*¶1okHfCk؍Gd~
NG2=۶:܉, 8D2?1Qџ ѮnWd%߉#ro\0$9$/]MቛUzba)\1}4vPWQ(FT{<0&&|F#nqezb:T#u·/`c|Ѯ;L}0F⸁y:XCL c̴;98/9)pxøZQߗ0ɑ̢Ϝ%
01һ
Ç[
`rUvLLOR+
g¤=n/&=eaҫ/gS2S1~`*fǪ0yr̍w`jJCH s탶0408~CRِtׄA1P5=32gy
uZ
9Po.`)u[0{rK^
fm;of񋘻`~Rڋ`MR4un	=Oe/?Wy΅^)`^VImynfǺt|/=531aqZbKH,tͧ;^E8_IsX]'>Aϒ)߂װ!6#4=%pB?<1^F˓%	<jXڻ2EGw9(?ۦ߄nw`u|ԓZV
s㯟'GӜO`eݙ
V!'`زn*~X06
פx5EhkA]7Xr|M
-
JG`34?NsSrla}f2Lj?j^_YM#`lCkrx`bUw6c_6gXK2uS=[CO2
k1emz8oZw
l\&cۏ(/(v&P _+WL
.vHeՖ3r	
&`7{_b'vf^%9wDeq ǥzfhf͒aYsIҒafaČ$G$	Ir$9Br$	9$IG$I$_]}n}.>{??y7וO#.YTz[Ywxn'/t}Lِ2G>Oַʿ~f]]޽uޏ6\}ַ)rWYTg}OY\{Yukjֆ\u_ܶ<o'͓Xn'f<˝]G,wnuS^d,)a}pgxO~ȬT2=ӷΜ֬_%XOeEC֯_?8S"oKʓdJY5
kб,WƲGN>qgyOEڥ9_>by}]C4bykvOgyꔽYw=H yrsÚ4T؃_r?7&ʽY_)9>VeyݿUVױ=hpЫاtv؀_5|w>r
8xK#lu]Wc6w%x3ƭZ
;CW&C+zl߾2ȿ
ۜ*ꂍ?Ng3DiBzˏ//J,!mn/agNaI˟_ݩ=Y\T~;lP>~lPq?WlP75-ؠgyH6hI3>":맱AgA߾l F&ۚ԰䋎XS5XӋ~gh`%V{:w=xiYe/;>68cn+smz{9lp/mZmlpA?clƮώ.ISXwaxoVexW;²pM>l)V|2nS
<7q`.lv&!sKly+j\
g>
ifxv6־lHot6dZY>2o;Y'
|lh_rM&:E5wO/npUWV⥧;H=i~zl{kN_we=[a.H`U;3lX3!\͆ذ#4v_Olq.Ŋ?{>=7ahW>o.VZ'޽+D>IfE\.}SXq[S{&|hD>~k/~=
_N%.
bĪ%ዳ
mu67Zz
s6|݋iI6|Kˈ|GW۳|kVQk篬#ndkx;βI4Yt|OXug#Z&0W؈Ο-b#[SuF|ec?F|x&K؈MWݥe.i62[goъ4S.>FnI%/o`wG}sCW6➫[n[%کNk٨/߮>a?{we{7g{ꇛFmکOb6oe16OsvAVR7;J2?nXI-oͫS+)r%?~J԰ޟ뱒O{]+|>я\:kθJl脻[l-6^u^Fm3d]{T
6&Tg?z'v6/;1]s6޶fϟ8=ST,igcd?_|/f˫,_wQ{3/ݱgϿoy*_V|2KCg+M;DmجC{6>r6;6w7\N˳Oܜnl|Ol&w7~{~7l\SZqMz1'u
~ٸwn+ظ7ĕ]lu?k]}(sYi,]7V)cɠ¢Y]GsVgMtjޭMXw'tKifeW/\Aia+aXR,}7?y}6~Ư*25~Fkj%~~+\zmXYS+5ceu۬>ͬ_쿓
b刷VVt(w`V6qcK[=+;_w|MnnMoe	o/Yhtm6aǹjfg9	_^M]7?e]pgoR]-CKdO6l&t'/g<P26qOhm
!U3zfH
!R#CjlHRYjx%C:(Kxw]gF(]}kB)KU&uz@|Vh(QX^*]*eG$SoO+Ր\TՕE$REdQR_LQ|W,%ҭaSW#ɮI+erRsIsPb*T]2])lQTL$Ǖnos+[Za㰕(٢(mEi'Q:Q:r6ÆauD,ݢ#ʽt(=DOvxK6	aYkܼۨιûik)}HJ(̈}%$EzBzX뙱9DL~H
nAG	IrptQIjG~\>zXy/znׇ_槩օa|܏>WͰTpI'K7Gh?(ѽ_iT+Ddqx[Ң-IwDY? {tEFGwS
a]]LñQe|Yjb|tGaRER|Sɛ)WI
[/:U>)JWG8&h?/K}֔>wGdQ=l-vڿTKIKq5y	}&/f'׺?']M$Ş]]uRhny"Dq7¾b\(9tҪS>oChI"9TYk.,zpX>0zMJ	bMc
w[_vGvػbW~u;/vƢ˽b
2*=4v:[mS5NH+F_+\]qWU"ckOR]Q_M4SvR*nZi;VhѮN۹vUN͊۹v*i;v뷓Uq;M*n'vR+n'vvoEZq;+n禊۩^q;Oq+n(ߎqvZVNF4ZTq;	ڎWq;v}ӰvnSO+n'cZWv
eVPz
ծ

WFץ>>{ݔ>2S: F|T0YԔRARBZ{mйZh_[.X/X|yV*_0|bk/T`|jVłXv7/X|L-_f)ވM`z
lP`W``9|Ŧ+fxkMW|+6WlUb[UbxX|9~lq-N̰uZ1
1!vviѩziajyIg"$"nDv)jtzYni%)IU^#4ҿ^5Jk[R<Nl3r\P]Iq>:''nl}2)-!A0E&Ӱ%Twe)tUMk|mO.˗MΊ'CI/I		Z tz1%ډaK]	aZ*^DuM-4簰W={ct	q94SQ5QQ^E	'E
ߍj&G5}Qj|.<lՄ}T+GJX9UV
[QMgFzXդpjTkۣNQM#pvTo
j0?7QENRTmZ/4QmjpTÄ676ƾo	GEI4F54
;G53Lmᑨ6jsdDEST[DsvhteN׋/DG?@zG#o#TğC 2+А~c<_ B_	=E!ÈF8=ODn߇AcESĿ og/G&Ot];!?DS9E/ d?C%#5.R_## B_"]ȿ9D}?[=&C!q0o#8 .` 6 ވpV YZ1o 0'%/1E7P| <L &` M01@T Va 00 X c b g t/A#
?7As8*+CK-DM"wۈ
?!QF,N"D*G#l_S⟈uğ+#D@#_5oA{үÿ9⿀""~@=o@6~e?o>
C~__ߏ H7c."]H?IG~oCYHo!w~?oG~W鿌 H"C#q?G{ĿWG#
q?l 1) ~ a 1q@
 g1b@e1^v`c]1001-M	ta017L`&؏	tZaM0j8L`&01L&(&PtL&P	L`k8I7#KȿG#ǐ}ȿ3o9_?>ۊ; ]_:?p]?AmH#~Sү#uHv;#8|#4BHҟӐ>vȿ)
3!D!O8Z2_)%@]_YDp?B  c e@s L b 7a -0C@`/ ,`
`c c px?@<
`` /` 1 
x؍$c 0 L@*& &pXLM`;b_	"&=5 0{10z	/y<0h f '0Ϩ!'"oœK֑bZF	!oh/9+߇~oC:_F!Fo//,?+"H2Ay;EH%7~.ҿQ!G~
H
,'!bgw/# E@{/C0
s]_?G!  I<oE~ω+## A2ooAo#?	Aj
xo1$d|7O;pS&F7㍂ RaWi0>l/8_p4-@	^ߊo/L߆7ókSYX6h{tv
 3a-ǢzψX\ť-QlQQ\Q<Q|QQBQD$J(\Q*RETQE.J(5DIFQRD)J(7RKE-JQB(
EI(EE&*J(ME6Q\,QZRVd׆}CssX?G+Ѹ=Ƶ-;rOc\pO*7D]5fs|ϋ˝IQx >Μ\IZȥsQ
Z%^Z<gDsV;j	UꞨUᒸKU̎Z5
LX:7ĭfQ}#j~#D-ӣVQ)<j&\Yܩ:ܒVK}V;Ҹw6jy7j
46j
9kt.͊Z#֘vNF	FVn53")wEf۸#nk
]s%D-;ւ֒єV\lnMrg[nlZ;n]W犘>_1j9Kˢ։;ʻ_3j]\{W-j]%jreԺqUܝޡmYOno͈Z/=Qͽ=]q0ᶈ/4s!jxp<jy͉Zpmqr[%b]fFm0r{eԆp93jC%utD.yDK,HZQøpcFsCgr0w
6+6b\NxG(vML<܉'='qsr9SEO^qӸ=[ǹ!tW	}{W}&W$
Ee<S/}6Es.3ܝ.\q7+]DD͍?ϵN/J/psQME<X&b`[S/Q_~їY΢/A*VYe<"J.5ήeΥ6$΍âFopk{Yu,}=דDۻE\~o%o9f蛹GKλ\+Vn`
q?WmŴs]M5;LgggEHs70K=|5<߽(\_#>n_nrG3βE?M<[,!n.|ѿZGx<яrXWǿ?έɢ̓"OpopGI觸;n40zB3a,<h&9nŉ7v8~/p"p_~:2g7.cW΃n_l=rkjtᯱF+z>,JᯚWKV]~k,5᯲ڛ௺𗭀Տ 
dkz
SW;	v׷yW<\n__k
w,6_Ֆ`55_O_=Uk]Sᯖ3IBw*
ˎ_i
._s2:_6r᯷]W:YGnW~5_9J#*2௚
W	YW*?Y)璿EkfWikta6V_U_3f_׃Q+-fۓuj!
߫8
W䯶_w瑿^78L_s/k.&]uV^!k- d^Ks_i+M"4,E_i!kN)"Y1rkdZ"k!-䯿e׼|V_2/&j6W:HK_ok撿l׮B: u{9WM#<Ն%W!o:J* __(kO"W=I_++'s䯼*o<G_FmL*_ckY=A-_3+7!oЎenOKҌe/A:'_'DKWCc_('oXUfzםO䯷uNW@9䯲u;_v_wWm"5roᯑ,_4uw__u.-ՋKoWi78	7	>WΆ_-u/s௾:?z]<J+l+w#_ǁR/_{
_o!_k2oh`U_^h	R6_?Jo*{[]W.n&3MloP/$;߀_=j᯼+o
k_5_%௙>W~6uz_c5
uG=ZU_
_u_6uߡWY;:Wwr௶
௺Z YWHzӄ|7'W9BNߝoP7uא&#]
֐fϘ_3
NH*c_?+!K䯟D:c_=&%׼B_s%Γ7JZˮW?C_u5 ~]N{_d߉䯷7o7'6[A䯲6l˒_o3+'/F:c$Yn&+oH_65J-WM_eˎ"ҀպjשEzs_}kM$䯕F^^?NWC[_{!zuϐ43_/gz˺W:Ns_gk䯝N*_k䒿jW;F_ "sUzW+&c5i_W׿<᯼*]o0;dφ+ςv3 _FW+,/௲:௾z௪_oU_g
*W/*+mj_gecᯱo1Uᯗ]akg_w_v+~uN_9:;*g7Pgߠ7
_\+7qi+a셿럀FkRV_s
u
$I솿&Mnkz2u_z
ߵ̆E7
௹᯷௹W]T므q_K2\kJ:U_7e䯷J_;WVm"~՗ؘtUړC_
el1l"r_V5ZH:I׃Ukn$lWC]0u߰&Fk䯕G_ %䯻N,uJ
䯲U_
<׵_#|/"߁5_
&7Αn	^%8׭Kjy;y("#ڋu7Nk-!*䯜O_wk%YZ5I1~>טAJE֞
V;G_m+-&e~
>WL_8$䯶U琿R7!M
U8G=
cv&Fj_כ(U_u'ծ_g1_k1Ucשl_5N_3jsF?_75W_6s:]7Y& u,M%:_$w__je K
%w_+
_.5kf'+L	k/*6_6 :Y	xlVkQ+A/kւ*tL퀿)׳u_e+/ NנZW-Cᯱ)9 W]W[OIR௜v(Yf_%JW:Ny>Mڵ]௿zWKJKkN!מFs:ד~Wo@)Յ5vJWA-@
_wH_f:k#䯼
,7LIن/#*yU~טIZ_J_w&k!]݆J_J_%5as_ik's/Gڳ_?e_ok5&_'ۑW7_
,-o
䒿EטLz_J3_|bw3=CJ=_œ^	"X +Ǔ!U!^䯿zכCj_}6+O%ߛ.^WJ_m+$RWC݀uJ_uj_M`1+%,#_); ?o:Z}<	D?2]/߿_˃F*U@<k,\_,j;)~{R+sv*ߥʅR>u].kO^ckoj
5_'*8BNAMZ5Z௞7L՗_g:Z_;g௙_meu#W.Ɇ5_w!uTJkf_m/_%ʇbw/Z돁F5._g5_w-U<̀jvA1_j_i5ϒ{௺S;*}=௺W_e'맑r3[J*k. msr_}'vےgANhCc_k9!䯵l䒿jWK_֞5c?unWCZM_4&|׉_4O#>1_=˚L&䯾7AWHc_e&Ww_m+ =Fm_u>+~JK_+WMjYzfvE7UL+"W >䯟@*W_l+kVV<WBe߃uNr_mY,ןHʛc{Ub&֘_s+]N:{_7Sb!$/[H䯼UNLkC#_koGt =pD +n a l~  8P  6 `e| G o z!  `k! 
 /`i N`c	 f 
- XF- l `  l_AG8 A /`D lU XZ ] X6   i ؙ K# `4 6v`, V;`  ` 6.`  f `e1  	i l$ ^; lt e /\x: v`s `s$ 6`( 67` ;F z s 0v `i `( O`^  ؓ X[ X= v K ̖ : r l D  X
mh v` fm  +`3lVW%dK 	`(#\?B '`7 ,A,!9pP v
O {+	`$P*"
 W$.#8XI ;i iI ]	`"u v J k]	`+ V	` V.v>$ vR	`e2,$YI ,pKX=L 	`m",r5>M I 1gRl"< VOAOJ 	`3 ֎f",, VNLX!pH k`e%M'ݍ? /L&ZI +b W!-EX:L +#	`%+ UؙO `e & 	 #tX_F ;y0K m`9 VZ;* .e	`e # ?  { 	y X XR:`l v ` `# | Om q I V , `e  `, v; 0 X1 ށ`k( `y 60; 	8 f5 mN5 llY % Ny  lo@kg	 ^
 Xb uy n" V`ށf% 
 Xj < \ ,] ! vA K p
  N l`7 - j la V ,u* ^0f ,  V+ ظs 8f _ X-L O ZJ : ;V"e)XN 1 6{v*d 6;*#+`;Xz*lJ `}]&	`g&$5&{ S	` 6TXM k=	`,tXF +`o=m"4 f=	bU	ࠄ 	`'q ZX+%I 	`ul#61kzؙL 	`#܍ vzrhv Vt8D [`1̈| NjoJ {	`k$qX)!C nXC b %8؜N `n$A0G s`w6l7& V	`3 b@;	`e,VG~H#C -	`w,u${,"t[G(?PK֧u  S  PK    A             =   org/bouncycastle/crypto/digests/GOST3411_2012_256Digest.classYOQwhF){Yޅ2eQ(`4M`.P&uHiIM^(1j(yC^l2__ XEW4=eK[[b,4\ЋAf5JWRdzm]BGN8ڑWMSmzSUyOzMH˚])nժ&[=Z*oE_>S/TJٰ%,+'y,
)%Ye׮
yWfhOmy6Zu,n}[޹Eȋ>/%,sM	ލ7LVéh{13c*{Ny{8?-ԪzR%gvSţ7^bL+Y;r h < A"DƬa̐ `d! ITxwS
)	A|0-zpC%+( ;#&Z!vb%ⷂ&	'O	K"*uhƜ^Q3OzLMʑwΤx	gr
}xuI9#_$c>7+-}"s?)o焴ìES(^Q|vOI7!D&!G $Cd0%cdLI2E"d̐Y2GY$Q#q K$IBVHI5N6<"$K-}ַoPKJͦ    PK    A             =   org/bouncycastle/crypto/digests/GOST3411_2012_512Digest.classkOAw(eR`r)\ *DM]Sv!E#?xmJL?3gvΙ9__ XE" MOy)ŲUMl#m"/^3Rz%^ZKxGhWnKco
B<zn̚zvJƩ}Q)^5lEƮ7L*/]}gޙ5	۪_RmVmw̚jЭGay7e(*%#:V$S{ďwZ|ZµK.#cnN( at?1DÈ`4^yB&BM)v3S蓯VaIIǠU?|h9Fl//A/:r;IÍ9Ϙ7S;1H푙zՇfXjԷ76Cm~C4\>f@bV[y0./C&# CBJA"$LH7!:^GA2D%cd< dLi#3d̑y'	$d,eb"i!d<$yL
%O&y;X7PKBUO    PK    A             3   org/bouncycastle/crypto/digests/GeneralDigest.classT]Se~6dIX ŦX(EˆKU(HCÇ&Re,1m$y?K:p:@xyASaF=<99Z[
,A"<Z4AEF9v6W
xUjs BY+L-V$4GV3b3$"KsF$B(|YBk2YJQˑF f['ˎ9mˬ%#U(;n6)s`͂5Y<TsKt"DVơ}krv&OƦV&<o0"pXL>7SNC(^.:eƖA	')T9enHTESBY-Ǵf~6c)gPϚY0r5KN677l#;O,jy;_wHP;e]9lk\?i|:O,ܰR>-tF"u[\_wӈN)[U
\Sbyq	gXyodlΩ$]=SB#.BV|BglVd]UEETW1f71δ	L$bsʹØcg~-`ͧll,Y#<`3!
ǴaicX2
iS/|'X%pA'u$>*^Z, cäE+<	ǈ*.WBW~m#=eݽ	N܀2SBX;4U)sToPd^QCn}9:ĊRP}$jT¤˩\ըP!Q'K<U*yy
kJP .xP=W5U=	jUG}Ǔ1xP]	۲6*U^x.'(=;hF۲{9Srr9kRs
^h[ifz{s/H*pFJP]lDt/qOtA};-ITɉToTeׇhگJqn49+6^~C$O
'.>aĿPKD13k  ^  PK    A             5   org/bouncycastle/crypto/digests/Haraka256Digest.classTwEnJ++M R
h[@Z
d3Mnvfi|<GlzE_|/xg-mRIssoOŷ[([РV(LK+Tӟ\g
?(tϨH)
cF{Nѧ(ghsX١c5h;pm$&E>$a]?nuY,,D78Gm m*9K#NABJs1$e֤.rI8q;
4"UoQ#f-*wEuLծVYT/WY8;MsK>o 4{!iV0e83fmtfj
8q'>kqyFY<|~65^dCAT{K54xU
:(O+A/Oӈ;BKınĉ܄<xZZZmR&mNެ}Ev3N+,Z7NF,ŉ=&5&
&LML2qXዯ3I]Qܻ/z#;Zkw^Ʒ
KzV\W~zb|)e5 6F.챱P
mKq17x;d޴0#6y>C)*R|.,f'sYWY
\R\_gq
8[YR\\L\KxjȩI :|d
ÒΒVd(^jPld;VP;8VX*ƱKsPoP UuW,38IcjrI8#.-#>Y t1F2hȼ32*qs&r\6r\vlss
o	^Kc+As)9=qjlZ#my1Z4Dp-W|a=5Q\
s)t!]	&}gM'Ny<JH6R*dz^9
O# ξ2=#o{ޠ6xgx҇;VTU\V瘤@1lK	/$<#Aҝ,=+>9UnP]Fu=\c600'{|mn#r.;z PKiЁ  x
  PK    A             5   org/bouncycastle/crypto/digests/Haraka512Digest.classU[sF>$K1
,NA`h	 %-Pڐ^Ȋc%,3{;>Pd<o+Z;a!3%9{}{ 5a	&PR@-=T@+_[%OӸ48scs
=1|@_
5}wQ-7rg&'P6u
K|o<$qxaɕ&>*7k[WUx^
Zָ6pZkRvl7ڭ^mzǾp^~Kcݧn\WtTm7 ͸
yh!vcGۮXbuc5\]UFJ_N3˳|X5ϟoGͰ(V^UV*:O(?ČK#oZ<MǏ2qfa;Snyv{~oW݊-38ݺ܈AF[I<`<02`Ȁ#5'
8ei

>:`aˊZPP,}[0wr{poSsH#8d-8>!td΂aALC Tw̔> W\!s5238e``:[d|Jv&a6&O2pn`
+xZ'wwQLbgR!K;@/E1K[1
w
⼂鼀9ULQHل%vsk/ڒڗpq߂oA
 StX*RqN0N|QԓQZD(TK 7D%Aa.bf)2
񈣺[ŏ#٪#{?u4T0Ӵ^`4ii 0/sub\@0Dc]icqoHxS³Dr&,Ι٣9q	Wǥ'\{$5̒~Y^YϾ0Y~YOV3 zz琬''9,zQYϑزc㲞So
l}"S&y
"L$0Ch|yfס`Y(u4%!6ƴGjjVELL^®E}]sYm^cjY#m[̛2yYp<y+o0G8NQ$/.#Bw7w"tDx1!Mxj
*JG6+ί0ǬAj ~ۿNPK\m    PK    A             0   org/bouncycastle/crypto/digests/HarakaBase.class}y|EL$)@L Au$$$$HȲDE@P.Y! x Q<pUPQDޛt\tkhy`<no،pgg*?bu`qeyUyJ@]7tH1 oĘR*8^3XRUl%%pA]%6!fWJƗm;.vBUH5lBm(P]S]T][U\_+Kk'#Y6qP`M")4v
WfԇK@rl*+=<z-:kj:.-\Kq>'|[D+a$lEOhM{6"MtZWl.¦;6dzEڔ[=N5<>*VoVpD#XTYI&v*<«TKcDUT=
TG}Z}_-TiSÿQX'ύXSY-įS\IS>wU=һn*UUm[#~{M돍T~G;#HE:R)]~nl]WW2NW}~xLDLTNvքr;>X8# f8F4:KuLl*=UUWEJ6PĨ"=Ve"`47)Q8uKοI\<\mzc=\,U7*zEk,NS)uL)6/rݼzyWYcl~WZ:U=QƎEmtҩyyvwTsnU?jgLۖڇ&m <.jԇ7 ND2yt6cU]kcȌEjA
y>56d|Bǘ^ƃLpc0
r"Fq FJ I p@DTxi3	|B`	VCS?
w0~?ctd;O;uz=BğGoeO3gϙ@\`" l
`	&0@
aXK`?=
pk@5%֍YB7aFaC̯bIcW̟e)JA}A)\MS
(C(RKa'R
qvAS)PJEa/&
k(pBW
OI%Bha.(pT
3,w)\GaV-px@>	G`N`;Rx#g l>(gvwa~f~#㘿;0@O 
 n:'كPC&
PXF9 >
@K 8G @K~T"]@c֫x[ Ђ!
}(B(wXL
,p
 V0q1=fpd: һ#340lB6=Mu H
	!{1?Gn?2%h
`2$=K($QXk͂
sKBK-	@8 <
;)G@o$0@ Zir x  _O`
e*(t0£P6@p(6S5FYK)̧haN>BWAPD5
(p@
3(| ED
G)OaaO\2E@&G_+ p=dzZ7	e>!)NCy= 
#	`t(ERB!B{-<F/r8C[._XAr*$k  @~<hN H4	 R4$ 3 lB!BaELC(taT-
$k <B%
+)0'Sr)TP8!M; tpyAZB!WD~pr
0A! al3)҅o ؙ_|O2;O/E~1	l!p/U|PXLi
( 4AaPL
1x"@'
  @/ + l3	XJ a>Zn$pB[sF
/PXM]|ˡ0B!Y+EG λ3@; o%p)1{\M`$3誁: <.,,#u<a	 p i 2 TxUg)|L!Be h^nZ! aaT)6y$ZX«C8E|ǻ2TQMNZyҺn.sI`󽹬&*X*GqλtVѹӲlnB4Fd3GPbsAKsɳR5^,78`n  Gip#p16م]
N70%[Kk׌"n ~@~2S̱:SF!$l- aG7OG/_g6l/T2G1u| n^	gPdujN%ley* s̏4§KV/щGK19e]5
	 c <J`0$Xn.J}	k^5p_!taP8Ia%@Bѕ-vRx³(̣w
G)[_@x%&@
SxB%)@+
%ۺrEٓ!-k0"fYW!\	_n0,
s0A
)2 @'+O 1 - )<Ha
Ё_((doC+x!|N!B)<N'D0" PKI9    PK    A             7   org/bouncycastle/crypto/digests/ISAPDigest$Friend.classR]o0=ےf-ͶA#@>">^:!2JLjG5YFfW♏JL	'Ǻc>=m,#K;9<F;P<;xŽk+&(J81TlC_%##1aЛ񾌄G:=ox3<̈2	6eT,F
vIF}~En?wy͹².-"X/H!W;/ZW+a%,ZnQ-vm`#G۔BS"(5e_c{MPK
2"ndbbc/Hmͼ죐H'ϙMKŵaa#gXmfAX>A`߰ۘྉ\Ś9y4PK    PK    A             0   org/bouncycastle/crypto/digests/ISAPDigest.classTMlEzmwBd4?8j8MZI1$ amo6ڻfw] r\ʥJTHppBB7ko$Q	%fo+ A`/ddIN\;'I_H5L;n4ٙ\IYr
:rC-4IiMjIl],Vd՜7q(5e:,Z(nkGN2s]kX&yLզ4Sw\VƏ)@,oYe멼U5%-UkJ=ON*S]XhuJIl70jV{wĄmhfQ80ԜԿ{O?bboTuR*.У`zoEuhTnpRW`)-^6us< |񝫷ϋ|r;"w}aSon8io?,Q	z$𘄄CZΫTI5Ԍk

QSSvWO{$};%{*y&
FY},v04G8c?CZd2đaxc0tpH"Ƞ "CBADvC303b ND1($,S89LpsqxËpxYb 0b1p^2}Th*HaeY챒8|ӚhsMNWH4NY5_Cᡡ")F2CХ]ړr#븠lsy%޽וaҲ7!z>8"e+(wn~o~gk|[ p}mZ<
7Cs}͸]pK\hd@rPò׊>A(Ց^R	^MXNde<!I8WS|?,<R+y#$s7ߢ4@ܚkރwX"4}) JV:֡M)B"D*xnǎjW\>GEv*razYU_PKQ0    PK    A             ;   org/bouncycastle/crypto/digests/Kangaroo$KangarooBase.classVwҮ5p,;v
C$`l*R ZZd*`h6M$-iBMi~4pǞӏ{Jݕ,ܹwfǝe [pC*T|CeST~	r˦CLzD&{H
9EXBV愶ڕȤi{it`O2tYsNgS;7vF{KȠI$3k)cdSm$i\Bɯ'F>rrfK9Jݲ鄙Ь۶q,g7f>7ɦSє`Փt&9jXy3g$SFhۖy:%[9L>'͝i!&
Hvm>o{2se#֟Ny;>ePP/vR8;2z6dRcF80r_ٺmIYh#F¾k*6hQdf9&[mj4tB-aMlOaOS4Βj'm#4N4$ԯ&xФtv2M	[UtCqЫ-aS$loX̦hߍK;_+B[:-W,_u7(<wʤKQVUi;1
b9LLhJqظ+Ӷ)T.WaQ)
q!_Rs#RrI*YaO)hSЮi(تC6T
:t)Q`Y9ɽoK˪FkE{,X93oWNz n?耫^|m"pZRgk紒}[NӰaC5ְa=#3Dv;2BW÷zOG_eJ
¯U6@8hxiha؁A a#^ЀI.RBC3C#exW RSi#G2&Ceˏ(÷qʏ}g~D'N2|?`!Ï^ecc~S7dxˏC/z"D/뙂8Yc'jww55_&鹸>1&:>TG5e aU`x3rZA\RR*!a#*+4(	:vK?+#MuFn`|>+y?R=53iK aɵ:M6eZ
3orw%f8B3ZxMuU<Zµy_/٠/!=
ࠂa>C|&9F-QJ?XJ|_\,TQ`3tW*VGZv{ϹbtG,X멏Gيlt*YGT:ZU$AjWJBB$ęk޾Rb.b]g
WJ@aKF{lEanm+qG-;kU5iN%Ya<0qlgVrMhp.
y>:Yl1نyy?:y!/2zY)/ӆ/I~!!UDH)i+BG7{JZSݧ`66J
TR7uuTҟx&ye8v"PwuNL:aU㡏
}nU<uxS'FȳRsw _gV<S	(9M<W_3qזYYOʳ&H"%.NG>坸Β}f˖Pt#^n_e*,Ot'ћvo7{LQ_
*UCRNN~c&O:%WoCm/zTԔ\yI F
rPpV𼏇1>oGS3|49|)	w
ohz`QV:@\IPK:
    PK    A             I   org/bouncycastle/crypto/digests/Kangaroo$KangarooParameters$Builder.classRMO1}	l( mF(TE$TEj
qr6VaY#Aʿ
J=TU̦^C왱ߛg̏__hcaŭdXuϺ.9(0RqdsZZ`C~(#P+<ycW7ȟ\Px^
F{o͕	WB4Co	vC(_Y&&#DZ"Ȉ&C|CY9Э/}]*A~e-jqi+`,d826me{۶'֟ڦ{rHCH^ȵqI̵o>v)}Ɠf0'H-Lk`]C%-En4;YYFi'(q;4c{g9F{'ebPKu(rPK׆  P  PK    A             A   org/bouncycastle/crypto/digests/Kangaroo$KangarooParameters.classKK1+}ڇZzXo`{=yS܆v˺$*(?JDDhB&3?||8@!\1$ܝCʽi 
1CleKcj{{I?Td(ڨH6PC+]vo\ޭE~Ɔu*wZIK?-5VY9Z-*(=މ֢OEr#đr89yj=K9X@AG<Vc5%1fMբWsNHf(c7UPɧ"47)*< Y#!MqzqNןP~Ee0Hay(0F;^?< )Q"J@PKl    PK    A             =   org/bouncycastle/crypto/digests/Kangaroo$KangarooSponge.classVms>k^,:Q#EhhັyiUI)%(dȦr@L;ig(dP9+-qtf<9{> C5
?Q0yСSKKoó//?~\|Z.7?04?RmU7N{sU1fhT綺zHV}ժ?nuVOj4Ԓl:jN'{pv(v"Up46mt3v@3FVqaQl6:˭o5Ϯ7)hUfVmDrwf<ZHq|mTg4J4׻fV}:>і
% C8s\{sZE!kNUt6mt; Ԭo٦?Vwi-JYqn=\ٍj}U?zvT_ʙjqƠ1Kr&%Rӟ=Mo7!ưo_7<сMۃ_ooW<!4߈g`\	Lt	Ӿ0´?Ly;2/ws>wvG+'3Ÿ3\4#K`V %bT1јK@(,bpQA^ѨX:;Luj
h	6،38m:MTNVb]-^^R^kv]}jl>Ьv:Ge
ӤVBj5?**zN֗`7J^5r^ˏCO_Kފ\W1z]>$ه x6|~~5p~\^EA
ɯMgV
z/^yY5罐7~HCE̒o螼N1u
߯~OLy7oDw2x_X ێl\_ G(4
iSw!WQ!W%ҼJJB	insןoNI}+J_q>!NtHwr
;F7fGd?IߍW;;wHijǰA.r0fӖoO%=r)zMCӨ!)d*eH@Ao(^>fZ4u͠e̐eG̰eG͈eL7T$L5lنͦ씩b=iQN*nS쌩eOjܲJX&,;g*òJZvTlESYS,] T/
'}UW.g\λvurykq˓.g].p3.Ϻ<Gpy%^9ṡ.k#PGD]{E͹  k?ey>"ǀvYY|vBylsɵW8R<-4vkcB'&9+P<H(i4,;HR))	$Tb[W^rU:p 8՗.`# vC91!p(;ϓt Inbs*  <@"p/DK* JQ..%N(CxZp 	HCLsD@"3* Lg՘81)u e,+r G R̰Y}9tPv!OEzx*ړpTT'gx#zONH:%9*S	/℧tA
Ozr<ٖ9y'h)Tڋ6iOM<)IL1{*Փ)eu=o֋6YOxѲ<\Ozrs<as?tZ8Csh.zj֋VYOzڳ\T']\⼧
=i2k.dJHJ>mk3:3ȡW0G+fc8  F#x8i`cJ4p '848Lr\Y`K;/4t0M~I!3W8X^q/l:8w3R7ݴ%N0<oߧS[#+heJР\++aNUVp)(;1аA'@)OF4hԠC \ИAs \2hܠ0h	dWH4zG@QpjE
PKh
	    PK    A             =   org/bouncycastle/crypto/digests/Kangaroo$KangarooTwelve.classS]OA=K?-,(KAVDc҈H11>dYSv)A</M|m56=wv99 kI!!f.VC,rH%yqy-s6I
4=|'Y=Ĭ/\ϮjHUuU+
#Uc
VT=9P)6>u|ZCUV98)mCeyPj~H*,Zհ~U|kQfϺ;#+6zVd(i"zb+cXGVǈQ4,2M
GĶ:T9fJj/VkvkpTB A	1!&0@?I0] n1[0p]a!ϰȰİ4w
ݤ(yvvJ_N1^IuW[9g _Cpƚ+ 7fjyŜو3 CL-5͚X飘JzȽbY+BԞQ2o`<JXE8}LϚ՟y#Q7?EH4BħIZ[ħd{2M$Ra%S
<hKZD%E>@%SvY4gl9Li<E6D,?EqPK%E~    PK    A             B   org/bouncycastle/crypto/digests/Kangaroo$MarsupilamiFourteen.classS]OA=C?-,(KAV"CHBbb|Zɲ6$x_G-K56=wv99 %leHHeic»/8z$};[O]?
kuLFG:>9O mϔܓ/߸ՑI%ɏYU]Zଡ|kdpVa4Tf7zU:ڞc/vSբlsuv@GV26n8T CIcIGa
y
#F5Xe^gԶ:R9]2+Jo!V5[57*#10q$u#Ő֡3CӑYf1{90pCaȰȰİ4wHxvvJcKu[g CpZ+ W4fjEŜ٘3 8LxfŬQQPkup;fQ^9c;n8*6ziTz\}qz<jq#Q7?EX4BħHD]]wn{2M,SaSM<iKR"yT_t);p<`z6t&*!L"GoPKN߄  	  PK    A             .   org/bouncycastle/crypto/digests/Kangaroo.classQN1=G+.\ ƅąL 4!CKąGF$,tqi﹏ϯ 8`Hj{\7n}5wB"Һ"Ñd(= FǑR1b$rN_v-CYGѱꎻPzh<4xgM+ahu"iedV7Z?ʉ{չ3lNПrpÑXp9r.XC{)WXl[1qj0FY	
`AImbKS~&E7a 豀dE=8(#5u4oPKLCC    PK    A             2   org/bouncycastle/crypto/digests/KeccakDigest.classX	tu}C0 8$I 3b(
@E%SRmĔr[AĈ4*BjR N|zz|8VRV(N,9to5]bɲ%]-73 IJs޷{[o~m4?^?%~槛tD]gKə~ҳytҋoKݔ0b{%c29۷ak4!>w;LM3®f_#?3CYwp2wp :px.ϖv2&ľmmHuӅaqR1=^ّSVqr.eyL>.iEx]uyicavgƗb1]/L%Z.ɩg1?p4g,DWɖLFY	0$2Y=#VO
Ӱn<؛d<ܴLSoCewVG!oM[z `+[!^깪FqBƏZY;i>qIm/JQx<;n)XZ0	dҥ]/d~3W[)+O0uL:?lr	+sLij]JùB)%=	
P.I=+BNƓ#\iyF;ay(*	dt
@ZvW@P6<fЊ%Ki+}<̡9#5
'f&'ƭ)Lq=2%vhYR3\*0-Ol.[*嬕ӔY&G1s2T
ŌoBq"y=6^OO0THr]H-۬,W4?z8C"qq:Uu?R1z$`$WJI`v*gwVJgQGFgIhnZEEkBs@Xvx#vf2gW$9*s<2'몌L䇫GlA9IU_eNyݟם_e2q**Te.\Ab
mP'QhBVhB7+4nW
O+wv"ompcjj&۬^`3Įyǲ)൦a^(uLlچ8]xδaR
#엜)]= 7k5J[hJC?p֫b*:}V;vSJ1T1d)85t#5&EJfn]JPJVۦOSJU)E*mϩt>Ω/dU/'T_Vi#=&_Qi_g=paaak_gx.H_=O9A4]/0|o(u^M_e5_g
d-f=?bc?a+0mY ÷pc[p>1~ԁEkIo&OwѦiWN{o-.r)~$IZ>,_Kާ~54F
+Lˮfx@_u՟r<q^9ɳ@)y9;0WeOYs5Yö%/^<Ox^\5
k٫ټ B2j $Ֆ.h'N@-]847RARs${&'IMuTHȣc
}L`)HR~].,7iA<C
'B<KC$-R[՝F}ν:ccxk_
6︻yis<c!<?MsFeGP@;nD\-ҧ{9wqqm)p0.[=ZSkrkOמ<hǜ$U-'ZnIva\Nѫ'4^O׹'="?JxGD724;Vu 4\5]Rmu|9D뾽	y)O].uxvDf8Vai
\̜?Jp
SʍP<CNם%i4:]'[]Upq#فd9T$Oz).t#=F_YgF1VWq
}##Qs܎fo'͊=oe t΋9eF̠#;KQWT!3peU%;4B(A8	^D9%0:m#~NX[aM$u_'MxpZt推8Y:$z9zB\r="56`CkwnyN<t$/ǦZrmK=;l!NϠR'bD3R}%u?-,/F`L%#!VR\ߙ]򊫠ds?WI}
pΐֆ݁U4Lاv^c޿VxPN.:
/\M>p(@Vj
oD?mz-~i)dk^:5^>wAIdYZn"v,9Y 9HuoPoW>ֲy	ܳ[(|\GH8[y~Ó6)ޤ3|Io(I3hjh

Р	Z i
-4'VCSf5$ͨ5&NCkJiIКffI1C'͸EfD5ghI3%Ek=+7BQzE+怐EcEVDWE$*)|B讈ފME"S}spEtVD"+00=%*.
6*i;Kf# 
bX^1oŮʰP*!Xg"$0+&be(Z.&]"$TLDmLD7nˤ[1"&!e=LzD>力E2	N&"$&ڮ{O!]ZCEX	W*^x֗Aq-TB>mgYM3ʀjו!/B>mkhص2`]ke@?Hx"/BY $DX!$TB~-ZtCPE)~ѭ5 V-XB+*x
29LugKY K,UP2IF4Jv(4[
ٮ4,WAHmI
Ֆgyo.%Dm6[DԖ:gӖ,M:%25j]tn[趥[豥,dp5˕6
4	q赥>[賥Y.>oKY~, 4{)%Y>E:
2d!=e("2BM@Eh@0 z
TEAD$TDYtCFĀaFD(D/E[EjpNG?*>!_72uZ8⫊?*$_c?k8U'+sȸ;7P	
WK72bGXF;`<U[m7"ݴҊo5v_=C~Ak}~L>E;CScJL~>5Au/t(	{>L V(HC hi0Mᎁ4i
s k3C$Lwgږ0LsmPK`
  "  PK    A             0   org/bouncycastle/crypto/digests/LongDigest.classV{|U?M<_۔>hHiRR)MRhV݊4bIJ
]?]53κ~@G@(>PF
*3,cfjK8e=s={/Ǿ~v f{qkh"qQh*nbMM4!	)K=M4Ƅ ݡ *_Ow;\UQASpcs߄`A9t3	*np?-Dm]e1hW#v-.\@A7ww5:`c  @o0rh0Hz6n5~Kч2f+T7|Ng[uۃXJ-^W7jY_66 {0J.r7{.5DWez}oֆq^w7w]IS*dN=oYPc9q-
O+z}7c{=TL(So(yz:1:6{+	9ż{;]ӲbZO?'4n㷽s,_h_յb{B#q񙝳˱k7<DF6~wd0sZ;VonHLv4_t[{μx=ϔ+|OwOj$խ_jy/8h|O{:9xv!FwwnWToz]%t#eXQͯPΏoۋd<IЖ
{uWVolݥۺ-a䝇O~~d*[
Ngnv|eݹ|,c%k6GBg7W'wpeϓkjG0?S6.e
.^A|g6L͞s=Kqkl|ӎ_ytO<;yт5{yѰaUoF5i7;q4Vy}B^~lϭsg<y mvY٦_9zϺOD*y##燮?'w]17G??7j<U׽/#M~o4W_:1uG/ofۏ?ׂ{fx
}w<{Txϼ;S:_ힷ%u!ɭy
n8w߲\՚-_m!_>ݵLzzЃ[zJ3t{i2PjۇL+e{;	gz2AA*d@X	&dd8 y
|jZ$3A!A\hL0
&7A.A5Lz̀x`b0LsMPJ>>?|ApKQ&C/'##h	8  gXβl
F @!H&H!H%iY%X	&a'v`/
[EvZhm9 !KYX=8

+-e<x|$;%k\%(E(OrF3~l%K%k1"Il0z
@3jP#91JJs8+q8#lCaV>V~QҨqϰdǪc%[Kͨ8H\diMf'.b)6a6%΋<'.+$."کv*a9uT{	t@jddf%$ՠdw*b"TiSV%SW\RJyNe*;*U*p*TЩ4RSiWr=ΦNȤ]NeY2TǆNSCLQ/Vu$$㟋ue&ld):YsʦNVuld):Y{ʦNVlP*rlpo%t)ֿPg5tLQYFQyzZTiaUP:2L=ɑ !및Q:
^,ĥПS:6Gc-T3{>6ߤ`γpY:Y#flh	Y*Q:0\/n`.GC
)Cc9}K^!+hw.܋H@wjʒ8KӾi}D9bbIVBxi3G6
:"5~
IG/?1JidBel*h]+<;<\Lp<1=v~^LczKvk}0@#}~{StJUr2f4Ţ#~@S,eT9$N0)EEJM:DN桦pzj6j4n#5;ISHIKQ;R-IK0s#Z0˜i.KZdzI%FpXY'faKzq%fnNId.ܡNNhR6Kftz0Z6r`#WOZsQD{#yP$X;E/k!kV1^r&v[,,Zxܱ&tۨbC{U&OlB{JzUs7bRGfRG)æΏbZ?XP(PG?Exk.!/.œ];wnj6ct/YF\?743]V:mu]$F2jF*oߨX=ު䠐;~U@]Dv娔Hv(HtagˏM*V-Ur4[Lb*jZZZ-LdOٶ uhڡ^ko	ڡ\kG
N-A9/NCJ
 a$בL~d0)QHInFRGJ}?AJ0$<&%$Hi2܈)%)[jnEp^x&i\G/?
RF"mH;܀
)D THnGr	)R!M\fLG*[;HN!!lXT%ZR]HHs#	X^HlAjpUE/`O 5
 5	xiH^AZ$
~"ZfN2?PKRh?/
    PK    A             /   org/bouncycastle/crypto/digests/MD2Digest.classXWϰb`X躬
dw1Cz5[)&QԨ1Mh73s{;m*"'0Ė^d̐<*&tQ;x).[#4cLpb1uAѸR	\5)XR0HJ<C=k0޹>` 	yHXDbRxjtp/2:GNtZՑO}MdR(XEp˰/)ag'Μ8{9RiC8JjGUg
^O8R"|S7>Tk4<<WCs;
F|*_UK醤n`9 ;;5t9h\2K|A}G](j$Z\zmnǄ|a[_WA<%.]..=.
P|$k^Ŋj<8?&ڷ/FrwY砕0o%{z"cʙV;Ww+:§?;!mҕ ZI;$ID["A8$C	D;8/,NpH8K EK&yD>Q@M2.AȤɒ6("#'J	ɖ1V@SS҈;SIwD@K'i-mĐj}>>ymZ{b::jy'6)Y{8:AfppkDRg97HY[reΌ&茍(3FXL=2%S|%aJX)1fz$xuLgM2UUH9#{#&q)cloIJV~&JTK+b6 
vX+caUx54:9ڼRTWc+'O׋,Gӿ) h\eD푶Kdp[eui~r:3eh0j	[-2+X/v_$vص7iXDBkͲ8ӭ=KbWe)Vʰv`%!usfdQFyU
IH1BK1K(jyۿ?{NNU!lsmtҗӳIEFjvʢ$i>={by9;Ѧ{c+Lt}_b-7iӹrz4KtwyZ6+e
Y+;$Gqd+7E;ݔYIԵ}aQZWn^dg_ރ+lG2ȭw{.#!4ѷ&JqkFKZ8
.w41wcmJ;;]nT=Z\e<*R
_+[{e*N	V&am~R6e2+BX+;:ѸR	xC-T+`+VvCewܠreO({a7^Uʾ8Jje:NA9 (3Vʁǔx]9o*`r(UCr8+GO1E9*sYL(|<'+GUA$+N9v8ExDy<(JY	I8S9g(`+]˕e,G_e(F4<gxH9)Oʙ\YQ
VFҋUV4)r.v(8A9W(éje-ʔܩ	e&*OFeÕae=nQ.iʓ^
ح<C婸Qy"3˝$g:7QPG
7Ո*HЍ:R/PG]OKПSŐ3+ЛwSWjԵ)~Fnhj)N!Z
Vffn;ԭL݆{U8Rw`:u'jl=}5GE)9TҨh6 ڈW	Q3cq%CBm<aM=aԣxz5xzwQ۱z4NA,sxzkp"R/|e\MWځZj'3ԛxzQoc$|{A!6P
1P/RcsF}/Է8	HGL~ϸP+:Q-,vOdSڃ$/M5>h$PK6_P
    PK    A             /   org/bouncycastle/crypto/digests/MD4Digest.classWsU?MIiR <*B)%R$Q@6݆@mַ'u?pea3wϹ٤ipw=߽ޓ] 
kw|Wy);ʟ':8>ǽo\l
3<Ɓ#̉#@0쁃484Ҵ&Ic7spWgLPW/ʶ!'}(f!->!1}[[2ԧ0[ue,
q ϪZ:cJ2mdpGYp>6lhQUMú6FREOa@۟L+)tfbjI%4=i:Ԡj:`/	5cDmja@RAj2SJ:euRZ8mpY~m$+Kv,Y>e)D#j"IU9b16	viUWRpqx9
=j$SXՏ!xX@5\rfoJלFtS05} m8W	fT\GP# Nzy;	KPE ,w<4? vv ;%@+M9]xe"Got-~L{Q[ODOfbB1%o
jz|P.C:))*aCK}((sO95n
PmzOYp{
""$XEAM",c"<nˡBZ 
*Eh>$8)8Eid8#BbY7D N0@$x28)`ăs	RCi` %x0FpGu|  ^:qLI<jԭu=8*2W*sbW ~(?S0?yE
(/wP0lQ"7Ԡ% o.>q > ~qޑ%<\m,-F6fT#,
Qcbʏ6cfp,Ryqb&hIa
KL@Ya:f8nfW7MctSqgB	Nc
rZq{2,FPm6RJkj{JTN\Yrԁy)vLpci!0bYq/Ly
ex^
r	'S^jUF<ZF[}Ȼ_Dq=kqn
}|Zlژu+|>i`|yN+Ŏf'>5yH>/{U㌼>LLHr;vLa8qRڨhZO\M1*ע_SۛbzGϟ38Pݲ_4މo+//9-$Arܖ+
+тkQiQl$E,ŵf6yI%LE[nI*C.C&sXi[yʰUZ9[U)9ƙX@7?Rg[<6U`sXyʰ2[UZ٭e\eؼlNkr+W˪B:n5 &1j(MǨ4UK,ց

bC >v^5Zjq:~hn;ka˶_!-ovCqٟfPKTP  s  PK    A             /   org/bouncycastle/crypto/digests/MD5Digest.classWxTg7,KrF 	H 	G!OVAKrݰPb!B
ZDD+Z@Q,X+^>jABZ˫ęw"}̙9矙3> ?ol+s٢ǎֳgnb-yϰ%Ə^`wVlM,FUsl]6l7gulËIkb*g{=lo12;c>;"NdGVˎ;sC?|_7ݶMvnUӇK]إ[/`gEmbW<]9\bWk؍e+9/	}V3_KY~hd0SgϺ:~}ԡ{	W1vLK,{B`j;_\FGbr,;I`en1昳M}>:M{͞1XrW1heKh3W.mE6ô蒋2h
K}_;o:r lOe-&?fXOT4tǻxzDV/Ă=9rLNS~*Oi|?4~:O'qHKk7ثUDNreJvW
 Of]^V`-|a\{ʽ3Q,e!ĝpٝ\婘ޡ2<m},@,neɥJ7pkvǓz]"x^܉x
y))URPUᕧ3CSBLrW/%4+=
"'W<*9rg[³Orʾxn're;]]|7^~hHe/oU.t(/c,1gy̋MJbѱZ<r1<n'O.EE;3PK##DZ	"	DhX8&\z\=zzxZw/0 [9k^Hy=WnO)x*=їO=DMgRϴbP
?Rx1n݇$9;6רDgǒ9Ac0`,!n#<+9cC,&xlF(PH0`7lQ0	H#<E?af#x	FʡU`[`N]X

~`-G!_	|BO!x=`~2zބB(e!?vwYI:~RBGj-C;x&|??
kpySʊ%\oC/Ceԟ_E]
=D_EԋC娗E]џG4D5e&+Pw/>%D	!+;C Q㞀k-8Z<6)li(2lSqu;{;|m炧F(CN}8epu+4˥c(ǥ(t\:-pr܏)UdOЖ?O#m:4M0u:$(!4(6ҙ`Hu/~
.)yCZ
<Z8c<Z8rQ%YNb̄QRYLf$47Fn³bLT$bG	Z	9XkT&Q\	z|0g0#-D+\j/v0Z8F*7etS;<@\Aլ|qYW(-OPrh[oQcScT혞b_"&?Ov647 IoBdi;Kf٨<>~袥yd6ij>!>Z'ڜ	ĠF>a&sMB^*wMxÜ/W$\#ڗTށTATTZbN?$|ݥfi%QF$hhMfUtIFkVl1[^hIliP3V=X_U[ҊtuHwU##ЪUg6:s+43Uf#Z3T[:s$
Qhp'#&Ix/)JbDszIbds1KblT85Zd:-JK/Na/1FQN?U^zA
/tQOKbIͻb0b$j{1(6,E[䥮P|Ӓ:-F-/so^U^zXuZ2PO@KݜJLN@F$1oc}%М1~%19ocqĸyyJՈTaTyqU^*K5aU
W%3HjY~S"U	R<$ј1D
J$WP:G2锩%8-:[Ǜ X
xKhg'ҿSbx;0h|CuapS)d؉&AҮ<w·9/iF|Q2hT'$/7ӻ˾9jזmB@F܄\i^B%!&:.PKNW
    PK    A             7   org/bouncycastle/crypto/digests/NonMemoableDigest.classoAƿRXl TZb4&EkBB4N[Y7yA=Go6{37oo? <V9}!i4:kEszK_`Hwx_=WP;,A@_k_rZ-{Bm^갻ǻ!KP:'Gofۑ7
vS~(z9Ygwt@N49VB="}{/N0B$brsX2l*պrV5V/=JzKHhDDV-א0Ƃ^%Md7QZ9I#[\ǺZZ6ljr~~)a:aihmDvO
PªB;rV)տrB5z%d;f`PC&6 F1]6g`Еgjav2)p/B'(f5T_[Ab8XhNg'wUgNEΫgPKf+    PK    A             2   org/bouncycastle/crypto/digests/NullDigest$1.classA
0Dk5U{D7P.3i-!T\x %10z? Fݕt[y)#aZ+ykjk8<w@`HvkoO&^CE7)fcd1H0JS&PKF˔      PK    A             J   org/bouncycastle/crypto/digests/NullDigest$OpenByteArrayOutputStream.classQJ@=Ӈ5j}S!U؅4%;iEA➙sϽ=TN#y뢮qS:CGOܰPA+<bk~/tZ܌U'Vg*}D*AFmƁ\*_8ntT\zm!tNc?NoT!ovD6|'UJA$ s9	CLF(1T箚kZA3GĘdM/`EL`Q"&R$qX&G`0A #K)as+T<S`m'ݧӳIu]lT@ZT0K8J~fD1eZ?mcqg0NePK\    PK    A             0   org/bouncycastle/crypto/digests/NullDigest.classokPƟiuu-sSldn
}13Ҥ$JLp(PM:A80{/{_~ "YٙCNo'#MAdPDN{x8 %3O?'gCG1gXбcP:\9[ky!YSo
PDfq0ٛwxp|?^;060Spk̐xJ-?.eUN>CMovlgSߤAkyb* ȫPH(KXf
l.C)3GRKiG֠v<G<dh\{%lRћ3ϫO3>yq	
D+-lYfs\I&4c~JY}Iԉ͐-Ib5Ӌ+"Α]ΚZD!hv	8iWWk'/H4FKCk2\)PK,
    PK    A             2   org/bouncycastle/crypto/digests/ParallelHash.classVk{~׺,/XqPGvp.feGis-^I+iZV$MI@K/)m$7POwc3g;s̜s @O$xkb{dڒz{n~%Xq#%NFpU<I	Jm;6؟=6kf9sD:"A,
z>-1i8z>lWҴRӝE%Jf3wfm]stiG5YdjJF%R9=5=`勎yH;Kfiu=elHSj	A͟*iֳF^3;m+9#)cE>
eu'af-pr3cym"S7JA=Lgܶ
zF4zљJv\;M-P=Lǰ:֐&2%^-%)gi±|VզaAS8C$=3I*P~*)PegIS)z<e+> Ąn0Rx.XE_HZ<Ǡh/
٢"^2_p/&{nI_yct.oţ\]jj&	fi:t4Xϩ\GAnbd=.MG\DzNK4HR^62Ge<&c2vxJ7e<-comHxxN_^ȡ{CO0=ZMg=;?pOtoGnng!>mx}>pnɝn몠a(Ó	n|C=hS~]]Tx0` 0|
FWZ٠Ѥ`IhV6؍`;;C8ƾS
I
EFAF<40rqia!`1l""Qcx1}x3qï؏8,Ï^e?gx'HAO0dex1x7IAq.q	.>H_jZဖ4uaʶq \jjJꯐ	Wr˿_O>bZN.HѽKrF|u_\1GrմK'Val=-
U|MF*.q6\п\P#eF8!y*08F8Rrd`}^mq^~V+"aH7)%Ò$4u7ͷi
$_4E"/qhxA/y<ũ<i<Nyγzs#y,ʘcyӪJsxtQbt\dH.V𧐿hX'c+Ivȿ2zw1ԧzS%xzЀm4}N|x(2f㍏ STj
}%èr]p|`D>/G"~bѱjX{WzZ~N`>F)Tq5̋t߂y/RM!{S~ܚu
p64kcr%.]G+5̳
>=Ynw>G֍8F|V;QR^_@eo$ȱ2!{<=7j]
<UM>nv<xg!btLՊ^^yE8bNsOڈTOPwU@8 =nZ[jAgy?THXU{݀?VDPʣ"'V͜uD7nH=VXthl/~PKXv    PK    A             ?   org/bouncycastle/crypto/digests/PhotonBeetleDigest$Friend.classJ@c/jSNu nUШP*(t2Ԕ0LV^Oc} ufw X'TڝkiP.	Z  x!HX#+1.R|rWd~.q:{S4O

LB)]~*\K6,4lf$}dRc, ,Y>5KjS4aq.{T=dǼ<[)_,q;\Wa}PK#    PK    A             8   org/bouncycastle/crypto/digests/PhotonBeetleDigest.classVSU-dIhhmhkR(jh,Pڤ|dn8D|/}F;u:s=;pv3Zb$/Xf9I?Pl9yLd##1R;;$Y1[Yk$kfiEȄ^lǓ	mntLFRӜ{_7td=Ijf6Kg4-'ɃZ(hݗH$iMêeY:g2kCYIP+tВ^%Td9V9g+Ywi(;tM+5^Qr<[m[@p{uViHV9Nj^uxueǽ$U[HIߜer5tr*%8*?^ѽF}H
m	~ɨ8_!կ/UfmMC\-`A(^V-DpǴrf&!*]e	W%+ᚄ>	%'}jSXTSoSGQ7̻.e3l{Aةc>\
H!#*mwz] yܖтOetIF ʸ CH%H2.]qwdt஌Fe\007qa!ɐb`H3LFpO"}g21<bx0|\c6O00CO,2
KÙW+5nΣQ3Yj0sEOYh<-YG-lͨ՜^pe#(l݄8:>6CBK}ʏPRXTK>V6a+},=܈glԗ4M
;b(3t,{`ޛ._ <!Pͣdv~E2$|]nh]%OeY5{7Vc9O_uT݅$AܞF)5WpRaH|A J%!!? wy="de6 GyHuɊo^RPxFp6>MAw(L=(>?6h	Q! '&AWv3fVZ9 OxHLOFGg0D%=Z4rPK9  f	  PK    A             -   org/bouncycastle/crypto/digests/Prehash.classSkO`~[Q]nJA*(㢋(&Su[K׉g|DFDE@ss)#! ,f=|+ "g|egͲ.hϖuqMWUKШYE1kmpV8ݮmڔ*oe(βY4.^k$ok5E5kYFQ6\5V>F52%9g綩3-͒cj9RE-s$o՜]+{Vu-C՝kgm\G{]%f5-մ5e3BpcT
JU4wivCDm"EtH:f8'@^DmG&_"xf]KkysЀ!	MIheb#,!n	1>n6;0'0D$
$0002cd߀~(-yt&")5G)yp#]%
a:cwP!H2
+0``exvC/Rf<|A'LO-*x]+`Fw(b@ rdSzzX:#5"єQJ~/h<AVJ8ƣS?1zg#,"^AȄ2O
xN("Թ.NoWLPKw,    PK    A             5   org/bouncycastle/crypto/digests/RIPEMD128Digest.class]pSՕ+⠐ )LsMdlCq6v!1-,Lp`[Ж4m~yh:uI3L;Ӈ<v&}tзz_gs~{G_ _o>T_/ovy}7_d>ۤS]]?<޼#TlY'@7S<5F3=V;4ҙ+*];ptDPOp}Gsd7<DLw3qϑ]$pFK
c}8"vNLŤf4GdGuJ)+T41I44Z`8-UrY4ǊrL8?Nc`8|טV'\dV8ԓL+
&PU4ۀ
rJ>[e0l|5)L͔+I4XS;h|nKS2z_cىeSwc(L.+گת8^1k]v8:=5U*b"=c_0Qi/KcxS,00>wcn?	L4a	]&<AA2߁}5gY)
8מv~D~gGϜΟmvbtT-iʾT!VwWDzg: 1X[86&^'قaЂn9/A؂VX-xd3I$N ydӰC80dA-	ǩwz(;`Ă/ISxN^":7H^&IdHFop>}0N
Ʌ ΎdII&HΐHΒ#ɓLH$S$$)I^!!y5G5׃0 i.1,6!)TNd<T՟ߏM4>yaEMMcbm/{oBFװ;bXX m N2%l
|#`p%ܶ;-o+	g{{Hws4=B.,sKS[]*6uzV;4si	.Ƶ&lizcdXm&pS'bL+D+9#Ioh8xɶ}"
)QP:`'C}@H;e#2"[쭯_HthIxHK&R `g%nyw%nE}V7ѷ*ő=,Oo)ߍvs%3FAzljceMG IU&sC,~!fo68V}2j'/F,^MTWw?cjmf:xS]`}6[L91'ztԗUG׬5u!;lÏCPv'A=7La=7 7^ztx0:|bt;L'&+Ia~DM!oQ,Ac1<+m$mǺjhfүIۯl4Um&퀂@ADlAKD+i*1$aLHDy_%l20|J@/Ud{xgQ;@p_|uP$^ߜA?_h05	d\Gb`-g {d`mD*ʑDd):8::C
0Dk`yy~7g1Z @4(l׻V~n&-hX$+]|
.xbx5usњf!3)R7;ko-T)˨
mBeJDʫ
J`yW*T^U(jfݐ&pQ#4(S}C¥@yeUrP^\(_
5"֗뗊j@UzEV$n-JP^']
JL^j&d]ႊjPEU)X^rU,+jׁc")r!mArdۂ-JJ5N@y[pm墚uv/~*TjX$R<Nvf:;>Tc(]a6M
)nN7
FxU
U#\	xWҠ^s.V|/]<rgwvݬ[bKۜPK/"    PK    A             5   org/bouncycastle/crypto/digests/RIPEMD160Digest.classY]l\G>wݽkozMHֹNKnȟlci{l5kN4P.POT!@+REH! oH}	U$*h8޹wƎwfcg|9;w揟 7S|?9ӯuhbQ/,DqϏC{4}n_?~}n@ݗuy
B,=t*Yj
>KE^QTqSC/
==qFI$qaG4PI\vlha
rZj~y25u0ud\Wrq[TdtMUBu8UVztb9_B34Mb'P2]ƁfJX<w6?WР_*JuQk^gx:v&*zT*O8'J~1?PʗgƗkJb-5_\,5lpDi:_H-k
E2WUzL;jB5_rHFӼ{U=Kh{p009_k'JzLBy+igPP+K33:Fg.d"<FsxJ8v7,^-ga|ݚ&`#݉`جϡ}uI2&wwG
sr67cH+X{ҕT6|lv4}ǄniBDDI' y`0HOl0~H82	HgM&t/.8G5s&Qx,<O$.HE_"RPDbDD%<K$HL(!1K2$H̓JZ EW0NOV1lN:ϗzcO:@dqx m
~O8hmbe=|hw<<w.P~y
`
A}.!b/"X>dmM۲>oᛷ_]α..[7>r3!j_~@:,RymQKT.2/6	ݹ
Ruqa#cIT_CMV;NcIe=4=\pm(nY?	ݨieǜmp;Jmg'|muyhizuutVAiE$*Y|+}Hέ^K[/ade[N](򋨚qހy#D>:d Z`}-L飷4B࿰O0gu1Tz)eJOr,0
0P>+=+^{ X*}#Xc:H+7 s#XZ-AO"nxdг\{`%OC&3L8"WLfL0evI
FY9+'A;bX~I"CFHU8v2T
!@r@qPaDғsqD6*`-
"[n*C9wF&oVT9{`RLߊ"."`<=J
$9TژAڷAN$Ṫ#v2"v2f	!i\:0rjrA;i >6"`ùa(G0b=9úJIM3M|QLKa]qloV\*h%)r%錴*
VVeU
65Tbh.4
-/V2Yc!U*5i[dH*!ޫo)]MǱ:)壻8SM'1R6!nI8ܨc7m1Jk|(I2k65QEYe5QnRVNtD{5ZN0!@.SP+%<nWV+(,9`حk+d&2ћ`t7	o'I5L]oI{5>Aٮ&)È*::M\坄<;dޔ7x #oaGŸ<wc\h<(,(ɸ*/
agiA
H-'6Sr\W$|!<l驈VW|Wyy'oH%CgeM1R暿I	MIPM?&DEFQ~CM~ l34.oZ-M%DZcpR6V؟M/-lx	;քr(||$J(:'RB?TNaÞP&C)Z_JY\	IdZtPd{c] JZ1aaɽ&,-x]Ioz0KI6X9.
Xb%b.q)}
-ߟ[qR:AP&')%c&h	lѥlܐ
UIp?n#ĚpZ+MUd._2#VH(p/D+4Cqi2-xCWp8.
@-h\@tÆOKP]r*%zX-iХs'4֝`ɸ>z+}#~
s`F ?8JM#|ۻ&=]=dGUnAǴwM+;*?PKԱr
  %  PK    A             5   org/bouncycastle/crypto/digests/RIPEMD256Digest.classXkpS>WZ!DRp0sMl0`0X)Ix4e!%W	!NB͛%}Qچ4a3џwd:ݵ׼:Sf=ߞ߹{[`%LǮ}z*;wկvL{yUiȨFkAu'Tw~B5Ѡ#Vc`_P$nWݘHГ[f֘ص>A\/SiĴA=m|܎tPvcbsGo][6u*Pi9A+
8su"2\k:C'9tC'XE'x^ܖѽuunWE#b15:PU؛ؿ/l\DD^ёr7]<Ho-Fr63¦l>C!ib0&]ڋkduL-ޒN+P]Cr5a-ug3R7Nr.ݑ̦0c_`%gZzGK0NU+$e=сT	G[x-lG
%\呦3Yکc%PjٜΧ+Lϯ5alw)Ǽ8в55_}XKsz]|+ 
:2b\zT|?
z
6hQ
6iY5XK,vGczl|l'z7?|Z3G``v=9ȆY9De5VvϞ},]"cn;
a%XLH"h"&he:<50GN.f<|K/H:bO''x`AK`
tu}BX)la M0D!K%G G0LPw'~1?A]8:B}"ALp AC7	"8L6?"Qc~xІ J;ʗr蹷g\wj#X

	j`GHϊvhEDhDҲ=G{A_k}?k7ьbPq@j,?	[sHMMg͌kmp[h5}?yZ%ܻ@xͼ4KqjOqjOL	jONIjOM)jOOijLjNYlW-n߄ȹI87w+
QáO`;A:t\1צVv;]I\)zn`94ܮ_`(%O60!x;_=oaF[G{$Z40W02H+@>ExSTKrDS
$ںOm4u>>vX y!%͚V8@
]_X%ira7VH5p9-Bj#j{2q_3Y?FL\
O)\{ =1ꣃo.O11)O.l=Xllz|ue	q$z8R3;\x2NF5cGfX^bq	hflN1E׈͊Xј隂;izӳc
bhv';< C00١x	Â&E8؂;F/I;q7q^.]=TqnScGKߵYFj6؅4)>w><Yy{
ګشflxdzjv6Ck6|6:5FYb%FkE8c#3x6Vt;յeUWqiWxeBU"K`'
^	ay"ZIy6R!acc' i$ri,rilYZI-~G;s	ug*K/\%E]WSևKpEh#"HyvRTdjc
ibcc\%V=j,3]gы`~FsqxZ07G&=z*ݳiL(Ojc/Đ<7Ogr}.KpuB)xgA*R
<O-N2쨤YHyȤl9ZtcyznOO\.?_PL@	RmvCNdBz^^>G"O%c5l?B<>7FO܄}X	Ys߄H:8EA)OFE4'ħ:~VmEYbS\kX^eGtBx,I+No]ayԒtBT4IW-Nt3=MӓKgMorM?-w9Ԛ~|k!AR
ŏqtWu$+~_k+w[K+p*YY9PK}$0	  F  PK    A             5   org/bouncycastle/crypto/digests/RIPEMD320Digest.classYkp>ҮV+yem,H8$$PPHL8qGRlؒ+))K΃CGi)Ld:t:әӡ3ǴսN{Eg{Vsw=g.vݏ?Φ?D;w/wCßO=}ɥsZhyf<1|soڞWǷq6ڻ<OlVohsnsUΣ ҙѓD;s{Q 5F'=~)KͨCؚ;0T_m mDn'z"A$KN"jݾu:|SVCCClkjTLǠ&WCɉzeX=X*V&zpe'_*p2s!3G4A8h~hZQ/`18R80V'hV(=bоJ_^+K4~p=V(vLq$+r=+}ɡB
{}P[a;Ppk%[5k Ժja#!oD/R5ziѽ0Lj
7V{+G6h:QkEAdDÜ\aQ'
F(l(F2@>!j<?ǟ[X88jCDyx{Ø4f]1$IarJa9rː*SvCsէ2r_qCL_R`KLdDVYI"$Gd5A"_ǂmD"Yp\oAȝD6fak8qOXZ["b
`)!2Jd?<Cd828섗 Ԉ@P{IJFN DEY"D^ "qx|'sD5eKeKL{G
cyk{ab,{HVA~Oa؎_ڛYY+Y{koem'k1\^=/ƹ2 }{
#`/^&
4p.]0>pEE[x{

[v} ߽j?MtF?oT#cԞԞN44g6h.._Q98c$%iun|8|!iֹ1лe9	y+s~я?!;e*Vo@[ Riߴvx{Hd/}x<M	d75M^"*19B]hguelǑy'_io`)3?RƟA~B	ZdKIMSS9QS1q*BN-Tb2))\Zg\?!_ڴr(p o
Sbf\Ӗ<f?[X͘P
tltfc*6COgS:l,f2f::̵lLKǡLGxkKТZPT ~M۸t KJ@og#lQ@7Q$:0kP&-wnqy/_'qG917rR$ͣOjDQ.EP(IB<H'ʡX e=yoBUN,͛ؓ4PjMTe*miƨx'cJmKaC
*GxVB)C ܡB"G\8ׂPژd<u_p!@%Q/fW(
٨ kqg<Qҏ(Hj7ԻdohLޛ֗5%-jD|TtF[Bepa*
j2*`hW\Tb`Yq
t-mw/KZ=7"fɳ<延io˒[Kb"- ӘTtJhKl)
M{hgaT14n1*|I6B`lt<1b2gjVKfyn$XQ2HQyّPVY`y)DULpYZ)0%\1[.]X.rXQud}F8Xc6$gxlߎ8Ãfh3
̵M2q˖xg"edR'")À*8Q.WE'J3N?H}[N|F	QLʋ	:o0&)Ǔ"ɒY	L*IV lCTr#/;./IE#ɖ
ʶ<A]Po=?ϒB, R#bjikuX]^ a?MP.UEx/46*{2L
ɰ%Sa658ҝK`%8&(Ec
#h"|]M)7'IʛiO⛔8T%%$)e1>R4AuPyّOUh%ת@啛PKvaD(TSHD~K
?Mҙ!MҐ{yK8qbKW켄wMė}
2_Wi縥ptPFJؾ˥/0D.pN[|<B	ɏbQ8s6N(G㰾ZE5P8E񹴰U	[p8ڮ8urG;te1\toqC<dOftܴCWĞBk>.=iٸZE\~
QXZV+˽4,Q	 {7g̡R
v/CTF0vW:
=
zu[|=_PKu  '  PK    A             :   org/bouncycastle/crypto/digests/RomulusDigest$Friend.classJ@ϘզwB/ZAҋ"EP
*v))q#D[sQP|(q]9\'.	F}Gz"UjX <'8Rf!)
HDpf`JLED">i0R:NgHK߼bF&j&LrcQCdŚuNH~$ZjcvLV97xjTgh0PbK
$s?ϰWuPKFw    PK    A             3   org/bouncycastle/crypto/digests/RomulusDigest.classTmSW~l^%`
aMDX h*"(.dnfwәC??P;2t: Tl6:vss^9'_0j
+g+!SϗY$ۡLiA;*/U*\i-
(\6ҕfSV-# ]umO42)}T*)5YAn4 mx1V22mixZaS5&Qlhu,dʝ@I4[Y^ay/w-KQ
^lRݽv
WPrzqm;f4EX
crV^e?5\G[e~]~zοfճS0TPˑf+ /~;
&ZpOHMxҗ\ݪҔT1⤊/T|bF)jڡfbQRH4VE/tDZn?3i![DB`(>89J8/F3AL 8H81	dpA@ü@Fߥq_3,0|-"f}:0\eưİpaFp3Pɠ2
=n&29eQq-ۆiepG/E =ښ?|tz1G(u*\.is
8[ttM3;\׵}Ye?qjd?y z_+r=P͈z8֦b=<aM<b'_or$"pcM=
~@"w׻-{xF$Bĭ1y8;U/亸"G_zf>MIğI?ŃQ<2ʒ$wH'IB4QcQ	J~E[c!*cDh2LxPKNq=  \  PK    A             0   org/bouncycastle/crypto/digests/SHA1Digest.classV]p>]ieb%]X'n6(ĸiֲ@*5u[?JK䡓v812Lۼe&/Lg:>Ӧ}͐sd	{={~VO 7?k'#;ŧ/g*o񹾝o_C>Ҟ`x!>Á/H$hU${γ4x#=4"
ҕ7v7Z:rrG_N<6x xxك܋8D!"qgMeiYp<ټf	@ΌQ--o%tۡhH<*EЭoEݲ:2ŬL
(*b41nNr..Q}T/ˍl|N/	my1zvl\f36hTixA3rJ/;umZ9nd*dCwE(V,N<ZE#")YHAwB`ZtCB][%Z|0muq܈kXY/`ݴKEĨK=vIX
:XMK:$S<ZE)"|C'ExJE8(B8HV3'޶FY}{u n%_5kwo S0|B`al`v%LE#9g색KS׻:sHl&BF%
H=A= IM^,A~IVhQJ%xN p$]P	p`[/|e4H x 52H`<AH
@,N0J##Ep1 'vK[,YV93OhAa}8x(G>|3y;nq6wT3ƣlۖq}ټ	/cׂ<r+^}^]GDc3D?7`-vUuUHwϗtZ\7^:Y (2f&M2iLB&ML,#8ƽԼÝc x)EHfKcReqFcPf,@ ̓d~,zO$ݺ3^U~&|0pޔ[ea'qFI'Q1JG*:>o@\p)Xwoʴ{GLӗRL޴Rj( XKK/*
e*
*q"~WDYr)e&WU
FӔEn4
Q<՟w)AQSK76s_bcPrzp(:x 5u.<WovmHd-5+L%
?{?dKA7ԗ`v9RsMQ:DU(Y'P(״;A&;JlbH!/+25U!a~&k!߼Htӫ[˪wjPHy吗5܈-(V݅,026`whxL_;l<Gi@G.]PT?L0л#{^Ĕ;蟮PmZ#zjAױWzu'+T5gt{]GowkVZXWuUZX_UZz|YIS#D4NSCDi2$+8k%נ bk$YjOtxlÏ"ѽqhE8i!W.EžIw$ODw/%#altvRx$=.z&8
=ˆ	U#Ջ	WUIτw:j!%dq;WckI<Oz+])n)ڂ>ހ_8PK7Q  <  PK    A             2   org/bouncycastle/crypto/digests/SHA224Digest.class
tS?KӴ}@$|ۦR(hAcQ4
ILR,kqO6Pc
|ppdNw;#ݽ//N9r7 Tl_)c}9*{{<<c')]϶,^¶Ŷl銞Vl+c񃟿ƺ?)>^qi;m;cf=	
,A;kCvJܽw{3'gf:LY̲=äOQ`9>P6|R@
OcY[Xa~=w4L&w=̶Ȧ
/)7ʷylAiy~rpy.k|y]̫6'zc6eҬM,}c6v|Vg?kA .s Zv"k	y$4E$E4nO*8AǪX@5EY9npN\[A$L T&lI
a>Z^ϝ1mmiZ1#JR5b4w$^	l
!{0&izVE1lTK`'&{#H(^6fʶbSZf,?5K>olFc-ݭ^rph]%>o4V
Ͳyvj61B1JjwyׯƼB(ҔH4=k<h,-OP>+uE¡(/N%^z?Mrr9{7Q c7荸Io,!iKWB|췙/E"gNC8n`
uޠ/<_}DQ/nw473<̚O"&Znaw!@YݕLT\MEu,XnRK؉}wuS&ot5|ۇ[:!Ook'>f_P֢KZXM2$ߜ
vsc '
pp#&^
Xe ?a '| 
I@4|u p`),6݄VXb[`x aRx B 7jx"
6si$l' $<Eai3݄g	?B¯~ExMxpP$!%<Ox"!NxE8@&"Ï7z1#
?Ol<'-sϪp&AM`|ܨO	܇8k~"\7*&EެH"qeyKr~c)G~O9^@>킿#hBg-SV8n}	@EG|r]p	͹ oYK^8C/ɾ8<#$Oh<c$8י@Z>9]|Eo^$ʩH9HHfYÄ)IIIEiIvvM3c'b,S%gBC@5Elj*dIdܾG)V9zd|PN	:QUn4%	\̇0"%JB eL8PH)s4
Y߹HFaɧӈF,*%fѕPJ̒NяnP~%E?zC=Wq& |?IKoNZyM6@+hh`>&4ӄ2jU8H$M)~t4P]y0bO3+$U;`oi*?˪$6R
J<H8ثԮjj諡:bR/l"Mli̦7%vڨ5]pi.yx͘V&˦3F.8m5-]Wzљ&EQ-PSA!Ku&s"HV[(ZQ뚆v %Lf1dԸьCw-Hk_MUIT5;mTM;u:)
 3JYG-OS}B6UIVu;nPN'$t&UXZ@=:ѹS/s=&-|z.ZY\P;.@;I[գ8'P=KPR;C^dvȖ/||qg0RxԩE.-;därxR6l|vQц6ŤYk3Ii_aG-֜r*nM/엇x/WG%kS-)GIF,J%}E<`Cg?lq䭰SLaL:hKԝ,@;)FN&G*:zR|8ݘ8nLt7&fɜ<nLt7&eI;.ߍgˇƳ_R7XRҭnWoP'BtE,j
u|\@蠟 Nmt85\r8|)W;k"Dz^LS>d&OCfq#RÑ|$!ˑF>	9 9\Cd>B"-܄#xr$/C㑣d~5_˯E^UB."Y
H+,yR2>
YίB
nEVq	YūOCN3l>y5gȩ\4|x-PKfp    PK    A             2   org/bouncycastle/crypto/digests/SHA256Digest.class|Si^6@Kڴ<J) @!@+X^Ҕ4i
Sa	t(>hiV' s:̹MEtNdv{h'~߹=|ˁ_nB{vǞي
}	F@[9f\F&;k6[;h:$83p5=e]0=5do-{~{l5l
߰]Dٞi[d{?M:fm`9۴z2{aCy-l7;qm]쫔+wK^&<fJXY#}ϰ'dlcZVAB,g$+ܲ_`dVrwZ65b3W{`T6+e2V629]g^*8|䀋U~VL6ՕYVxn1q5eOE5lѷ>b
Mސa~! q*#.;'NE%NUa*

4	8c,At,k?B	$OtNTV~s˧!aBpBaa !LCW=5OٔG
]Y}`u@Gj9pFPJ	'U$z"bo(X~ߤ`,9Q$o]8!F<`Azx#PY3#eB */0g'G|?Z];S+cpjBS(Nx$Ӵ'EE*>O
zCUrUYgTo)dy$*xy
@[oǌ3}VF'5xpB3C,}S%@Xyq]T )(Īy^J`PJ-H^(+z{=uр\V`EŬCuh_pEue6
CՕZHtP1A]U)
ub]f~v0bE4ez`ǻ$
v0#!,G]I VK/M=M	Ǫ<("{e"9.E $kA(Ya9\'cFGt
YvOKEX&rQDDwpsKL_ -;fpڒ},SP֍0GbCLˑlrG+Kk:NRt6D1a4:q|r\57:ɔr
l/N2aݞ+.kϱ:]U/fGpf!'<DZ3,$\Oa
a%a.L7"	>p'*`dEfefr34f6ᗄnyV36!h6Ca1Ok/vv~Gh#"BMCx{^~q	3	6w	&$	]'N8@x&-oHx.#A7Ol?K>
ʯO0:g<{jl6pxA`O_{E7jMx6ѣ;AR{R{hD~+q|JgM-оEy"M#9pI*)*aHU4_e<RCgc/:^	l=rtdv
dFH"<֎(S*l"D5Z>R&c|lk<i@
*K#;kvsv
!df[3I#Mr[dU9>M9 zEM;r_Cpp#pƣpcpppƓpϙ@R[+ޜjSai+?_hsaJR )1H銄QH=	슄HYH		$JcN=R]v;׊aS-Ov<M"dbf-T|w6(R:H|QN.rTs߀aJ 
`E`X+@ lT
ȥ[ZʥȩaU<%cpPy@CO*
s[%&E٬P48|垚|e"c
"ЩPSv^Bhy!m8Ohy"m2w󱴹Fٶ=6Z!~:h~:uԥ[6@~
oKRMF+
UA%*߭J4$Vz
WLECKu*QT"rtHzYQ"+2YLqhѷ
:b-z4.BZfg
F^(XDNLzFEvX$czeqȃM5왴|'zE.Vb䁖'[=БNɣSLӢS֓V2֡q&yҩ\nf*9T
EK;iy\n)gi5A1hh#'X[b6J#bjEа
WM>dsS[tFH08ǰn(SxZœ
WHZݔXLb鎾ǴPHL&9m:זAvNնԚh_ڨ~&1uV[1%hqUUհ*%ְ*uGɄR̬:nzY%*Y.	bx?n_
Av3[,2R7TL%4L1"B79v?/j*=4$⏎鎼+O`/]RzT*!{.C@;P=T`;T_×@;0UdL̏߀ۦW_loVn!
"m-ZA̎nEsbpڐF+	
=
rU|ȋ]"FȯBx2FDd2)܄Lݑ 9Lt^"dw>كOFFdOEZy7[vvd/ٛDf|d>ٗ@W#kȫxr <	S˭<nC|Y l!!B>9D1|<r$ŧ 9\ȱ<9t VPKy'2_  t  PK    A             2   org/bouncycastle/crypto/digests/SHA384Digest.classSuǿ,R-6l(MJB0PlR,XdYݸAtzuFOxP0gg:xw>Oo﷛a
@7>	Q@y-^PDLyCMVxt/H=#jD@jP@`#fdbf P(a2%{Gϐ.={mհ<I%J&n	hJ;KYNj΢F;9RK5I<CO׼SÛ]Q4
էͨ9{ع
]sqdJ-Tv<LSvRdeێsVz)EGz7sK"ے48<2NH+v?Քt
t%/{I.G"jz9U-5+:Qg;%Aj4fݡOg4֋ǅߛ_}97&߈?k8l]mʩJ={Ka	K8"ᨄcB:;9stmBm9uQGcX:mGi{{yuv_;k|WToWГFW;ڂN\'ެPN'p
;>h!3j:F=c7
2A8؏raseRF;c/d<A͌ 2Zq
/JbeʸH2Rˌ1k yL0A z0ɸ04LW)0 z1D^u/}/|U㷙zQ,>bُW:h\5QNvhO P
^Եh%Ez%ew6	_חְtɗn*}1~e^8VeS.NdBu~?xmbTb.ܲi1nL&Eڦu72ׇ/
D#s.y2]ydN@|H6ydɜRM6a!6N?yė4(}Ć(yH!	 vԏӛeSb
~
|f?	WqPK:4/F    PK    A             0   org/bouncycastle/crypto/digests/SHA3Digest.classTSU6d󋅆H
`%lJ*Ԧ
КڊXe{Ilfg<$8/:ـwfs=9i%TBC!.a8QDY[#ĺe'23DT&uvL3Dbp%0k	"V+T#	=\gwd޳7<p!tkftS޹	-ɴǙVoI+5,$!.y^5CB^FmDD`Ik4fMJX7thY8sղeNesIۤP-CEGsheDVIlZe:g,l: ۬sMj[Bڲْլۺp"uλ('.6ՠjG/RRU0ˢGZ%4wk]":B,ۢ!6:
hnSAZx= .^EUOt͎x<u)b2r58ݘctw#H#!MǬfŦz?&a'sT8@ŐWpQA!È(8^k
pB2(Ha
2CWq-x7ipҸAsy;w#Mn1#cgP`XbX<}7}9:!Mlf4F?zNo
˵O;Gvv^Ef1_+#-|h6>ZvscACqǽ6LDZa&Q2QDf=Ib!NǉQPG+?a󏓗;*'!>Bz|ЭNySem{CFr"q4}|5>2l Ơlaq9lVhgpQ"-	ѴSW=K=ߋ*d{kQeM^9T`VmچR&qu}n罩_1[0:zoPK 2    PK    A             2   org/bouncycastle/crypto/digests/SHA512Digest.classOPuǿ,	RPJXvi#*m `P,e7lPJ[O^֎W;7O;gq{ɆX|oßh'~Pl8.$<N#< 'lK<@ӆeg){xB@yo/66P48hc3:''JbG;ZI_OjJjXn۩%MPwRӜE#8vJs\C#/a3,$,՗NR>]sMv70.hjhWU3xp9vcU>+n'DU]~bәaCJl'/vЌKq5Z(_{g2NNSЖQM7= yDn%P˯)ih
ϓ_t
)]>F<u5e2&7+C_XM#um (]T͌.%~!&?UΚM~u_m7})6]O[v^䟿W_=$Ε!^/pćcM'`stN]TCj願Nm4LgڃJsunu*/	m*{n+sY˝!mVgL.3opͧ&l	;P#Ab3v2**.F$Ȍ(pQ*Q~	/`@QD$1x]BÏF/kxa0.0F1"cc"@x ]	SC-یKiH0fz =HЋw瑮}W-wo3)L	z,@5ٛǨ]-xFjhL k(Zh$E*YY{
!CGҨ',]dĜlWQ$ڎsje>Ԁs^PY.xp/W]x}ti:~ܒ}G)
kNμP&@~[|/*SWU793*bL[dNfaib+YXdBYd:Hr%ҖFxR|k}aORK-P~AxHnYG<M(D2Ix?QWJv ٘O^Ë*_$*PK[XV    PK    A             3   org/bouncycastle/crypto/digests/SHA512tDigest.classV{p-8Hll%'nBhlĢء,3*HLIM_4郒iii@JIMi5wg:fBwSbnvߝp`58P'W6p E
a6}6qnV63$K|lNDEUugNYZj6`6jMjnfuB@RwgkmS]}"GIY	(PjL=ZX%cո>FTUӽћI^ru9B+3zX7QXګk9$t%ڠtEv"Q-9JYESI]S{+%售d)ŔX;{Iy18DtV^MS԰v/}KPA@6ޚk)E&F(0mDVRZwQ-&Ǻu#Ӯ֣M[H(Qp"!#T<3"z#Q9+2Ru9p]>[O)j-$bl49QGBQK
T<4eh4rȬu}N3Sޓy9p;)vJvPfAΘ&K_w;u%G@B~@N˳^1Ht
@RKfWbr8݊msҞb4$u-5g{)c}$cW7ivWA}{+WO_ݽ"qS~ѾA14{[vzp~c)<cػZ+:jz嚃G^qDlqVm"El!^	ظc!3q_͎Gh=7.6u$oo`u/¶pЭ;oc506xsvsmU|ĭ\hQ	~	nax2+**V2T1T3b2fXð(pC9D	
b0ISX 1,cN$`LNhIvq	!$:s62a4*aIh'!//03<Igf82|I3|_b8D:q'd|ӉA|Ï	'='i0t0|)
f8w}2ȉ=8DbzO{"^j0E"C.
KVZʒ,ڒk
@wV<yi_\$c#byb$y\Rr$[ ʄǏ[D~2IdqƟ￀3.P%q#	Q|1,TXOr@/f@oPbY~\頳6乞U#V_O[Y&5I${Z.3p<O~:fmfm+#l:ޠ)2j^!+ٰߑt91:Gˤ\u&ܢrDyMkQ|&峨	6&"ŤZZ6;qz,Ac7lϱb,αfqe>ˋYXNf1RSfC2Ax=1v׍حanDةӍ^rwuVk
l2zC	TC&Bsp:'&u/78,ǲgy.,/de"ϲEYLQ_<AjVAxlG}`Vkxj7#J5uK'ul44خylGPrxlf{`_?s۳3+zPMZ<rp/
̟Ǯ
Nyw,r{o]x4F,qa,\à1jyAc&Y^SCwPA7N+԰T)G?,/ =,D\zylg:O~Mظ7MKPKھ    PK    A             1   org/bouncycastle/crypto/digests/SHAKEDigest.classUsUmdmCR4M
"
	\Rnti]6"bQ8o򠎓2E}@v|{w?{?>" A89$lIT
;QsLӰlQJLV"|䈄nmKTtBB,[*Yݮ'f(^M"aiղHL<pEBSr 	Dc/JuՆye6.1',RԕVpU>LqOKHk.K	"ja$<]^uKd9O^rU	Ek޴Eq2LA}#Zl#AczUP
%c-a>'J[},Jٰt{z6KuTLiN^龙yZ}Z4J5v_ծk
"TDY[egVT푹0mI4_Z:z$,	UZ/j5"2^#TXQh}kP^]22'E4Ewg`b}+ZlDM\mz55ۻ_DƠ2v-c2I5JO>>#VO憐	?S2G[KG&sK3ٓ_mV; g۬8պ3cbJEQڹ2kg'ή{
Et*x]
^BU/ ͈*Ѓ
PxYVԪ >lR
*x#L9yRᤂ1ʊ
p&8Egd3cACaa&aCa:F.3L0paAc(0:.BzK83xFa:^
1n	$|No$	8g.*tu{ph|v[w;&P`AogGh'&ڈE,a	ɍeFz/S}ミ1ˬL&Zc.kΨi#?)H-[W5I^F;ԅ/RG?t}M$r'aO蠦qRT7p'uo8zh(H`c2qɂ_S/rn;^soi^MZGu{ZlzT*y>oDh-oSCq{41ikjh.Xoua(!YОR_qGnVWi},UrE1%I
eӋKGkr4EU[Yci2()[qa<2Mp2L&/v0t ;Zħ
~Z``dRu|PK&zt!  
  PK    A             /   org/bouncycastle/crypto/digests/SM3Digest.classVsӝt|ϊ\';Qb[$v [t@։ә!B
%Iδ$L2hRNLL?e&@ʔ;CՌ>}I >
)WCOwon.jR<ã<
B|)BeORp&>oUa4
h8ё+'rS~Qp~LOŹR1>q]_}Ϊje˨ˁ\:mΎڵVm><|\wi9o#]72S,ۇQEyL4ULPb;{zaX09©1sXc4mŬ;m]@v\}iVM)|8odF^nmkpf23z_Nn y
paes#3nLǨz[w+lN|_w*;_~h1Jg9ꎍ)7F6
cp¬U\lD?>%Z[:f<A&H{E'"dE9'މ
rV8hL';.YSٴ,H:h,`fe`=4lcJ%ܵ	>D7Թ0w,LgDYn#S;	vl$$
1	^$"K`;tH P	B,s
LLJKiZF``uGT0
QY
i+.'NIP!8Cp6
a!
P")e15Q]|ҨPϱp9\@2<	=8
AwoX_+.6NPP*@=uCnBm
޽!	`I÷_9MI64y.݂(޺G1Sd}
(@GsAƱ8k-,LЌS`Ry%헏]4ʩ}c
Q#qm
~Պ#K3dokߟ!7^o{O6DoB\d21Lqp<Ȥ"߰>WI*OܗWG
p ~0y*jǱ'"RЯi-["`}@n'dmbp!RI$5HloHczJ+{xj ?g1ξ*GT{euH;QXYV͞A۱YLzvn"lgb8}ĺISR՞I-Xm>KXuN'p_8s*@9^qN4v
*CIiv:̦XY
 KWVAųeS"e\`ӛAءٙևؑևىFnvuF{.gCމֳwlFmCU]ET*M+mS(6HJQhͶ+*fCS=kE%VT:YYSJHנTTڋΞă2)"fJH~b	!JU:b6x)ek,wTYOfu=5zӂzfuETՠQ
5wu%ܼxp@=1wY"hO/o',JZ'[p{fKz<bO̔|vP$褨 V<&	Dyep	petr>WRuۀ`r=vPKW~>  B  PK    A             5   org/bouncycastle/crypto/digests/ShortenedDigest.classS[S@=	%(T.*E(^Ar*2:Oi$n3(6\Dqvٳdǧ/ UEnq3D\3Y9/9*r'zr,1G:j3<;%vZjQ勖ɫax+tf>q<70I&>1E2*˖cAżm%ʕ5:_	r؆cfrMÞ͠]䞰\|E-^J-]o|*xs뛙8ZѨ
g~nfi[PxQ	K
A5/Ss|UN*fB6J
WpAE	e2У.^OVS6MwKL/TC<tjU
h'Aᒄ$T
.W1
=5\a\4ń\Mc$db½q#&ܕp_lW0ӁQ\0%ᦄi	$ܖp$_o^WalNcdHAeЬ!MJ
Di S}<JC6}<HmȵH.\*;ta#`L(.?H`dscaqF@ă.x{ȾФfi*dyߨu"9B :(Yˑ_(FkC7|Vz2Z(^LF	G,̆B&k:<aGQz
:YfhPKǬT  o  PK    A             1   org/bouncycastle/crypto/digests/SkeinDigest.classUmSU~B7IK-ְ!,[*XesI6#~A:2xfԆ<s?0?DCw$y҅{,LQ.,>X+l>IH4B{~&Gq#a,K0V<ݴ`81XrnYeD.`*;Tz\
cd8T$*l{+~jöj[GOu(r]3rfZ%ItlCQxOMCl<i	CQ64nk?TKQjd$!ӍX
	v7ZԂ[~U^&
Qu}dYO6ÒRknID?@GcAƸ2ޑqMu7dܔ[{l׀$=;.Gү\K6K8jbZSHT޺WmݠLPnv~RF?upT^ksOǂQ+0ƐDL{`lqGEU0xvaC)؏mа@kIdQHb[_&1ϓD!CQ)g66`;IAiv[5뤙[<y߀Bl/_')g*[Mq@ߓuzTRaƯ?,FZ5Fkc>Þ}ǪTP:J9K]R1TY>P&PzYɌ73\1&I}EKDhL"K~(q',FS7}u|CJOmSJB#4P<18h2V(>YdС$2V٦#(q7χ밚$2cTQcPKF    PK    A             ?   org/bouncycastle/crypto/digests/SkeinEngine$Configuration.classN@ƿZpAЃ^L!&j ^86ִ	oFcCw'=y7o&;fhά`kU8.d)2t^лX 	Q,Q|ΥXOL/$&BOU孌)Y*So8g\D#8G^77<\$T3<.`nhałkB	QEAk*XWSuI闻%OS?N&*n
@6mOQHӠgMz@2ZF;?դ6l-Ehr]EGbp PKTP    PK    A             ;   org/bouncycastle/crypto/digests/SkeinEngine$Parameter.classP=O0}Nچ@Z#CZ1d	ԥZQJpĭ ?
[~w{|ϯ LV8dQᇣ~yo\&*W$FIY˙dؠl(9X
TF4c>*ZFЩQOXw2Q*N\C}r+r(̩_]R_}XhZش8B6,u6)a	{T5&TJ|c46YUQ4AFx@7Mn[}AhBt~*+:Okڮ5}HؤFGPK
*    PK    A             5   org/bouncycastle/crypto/digests/SkeinEngine$UBI.classTrTdŖ*	-e64:M!!MbbJHJ_
L3S;xeWXg9!qt殄t2ǢpPxYe4]UX+BGY?V+L%ϱ]b
K֘?rӴMJD|ʨ3(:雎My5ZU"j0mc	juu--a\5ԜY6,J\<J8e3t˰7$$
[˴|#a2}3v43uʳ#<ϨSAuܺV]5.<ӗiuqa$藖OĮoZ-.ju4ބ]I)zSZMJ7:F`AdY3|
R
.*
o*ULgBBniR`_0jgOD9&OiT)/#5,>Pq7TUCRëx	
uH#"pU
b*F/U&T1Lyiq,1qwd"N,'2Jq#"RױHwǴSk`to8;.|:FdlX|/62.RActi!a iAϒ+&n*~eۨhZ0XRmj#&mOP@ˏD3IȔSDHopUR`ih
2ځF{G\r11WR<6X@h2߃s栐\B2)gP8:S
rٯvrl*f'|%97p2ka0%#>i/[8'ѿUM3)C]ySݑx`kYLe#MlLI~9\29J|ne24z	)Euei601I#5:*.q PK&
)    PK    A             :   org/bouncycastle/crypto/digests/SkeinEngine$UbiTweak.classTSUfHHBmC2C[I
I̖&TI}_x3:cST}ЇsnB+~s_>|`%<>tEM˞
378n	cl0b/7	6*n_ zj",eVSٶ/wjj\mfP$^׌ TM|̑+]hiGf,[dԭ%V+Q[{C&QIoh%2
^-k5,RZvUKFݮ%zEl+tcѨ謬Z_jꮀn{^MLSmPYU#tqDގlukNbm83[r3jv-GFHFDư32ސqV@86f'!'X֫/Ʋg6;Ys)x}
#` (Ax1x~(%a\f0 |E,0@
Uk,2C[Z{jeVHW2Uղ4=y[-Z3oN%Q~vCx
=CZ}C}N#=>A/ue
?#mǥqk?;"PޔCOIGأ<D{=[DZ<Ď-\ouy$$¹aě0i<<:syz~p#߹x]<z4r'_#ח&O!@%ud'n]Dxs(<0/^>O_}Ou&I^Z#!xw$<d(̻\Bt`KDҞ)_J<C#~)	Gr#DO-	G~	!m$2LH県h@Mq91y{ >ŬiQgY8
{k޹G y៴p5$Iv.G"B;Z0"PKX_  P  PK    A             1   org/bouncycastle/crypto/digests/SkeinEngine.classWxSU^I ii%-˂-By4MN4$`aTDu" u0҇(::;o!"л>'mwkol	`	&0HN30fNt3f8N')e	ۊ9ԋpVs9ӅI9i6:'z&"dgDŶbN}:'vs92q<[U{v+}{(\*^{ij|e
jAW5TW+a/bWA{6Vg
Pau#Պ!,ƞ_`>^S#yJ-/s,Q<osnE
nd/(+YP\:9oܱCM7?nt.7"#_ANEi*uJcݯ?:W>:
z%uBJV᰻5yjݾ V9є?P0G4Xjj:j#	+nUi*1]ۏY]tSWG:%;W{aG;M%Q.kr}jݑ`XD5#Fqas&_ ½ҝwj~Rkh{=JHلnJUQ]cEn5P\Bw
a_fz%v7ƈ3HC
ϟ]ݚ]ݑZՍ]@ i(D<`OUJAsRz:rڙYpMvU!i`
lO1(TTkq3}Fn`-hTjng0Ⱦނx
%FlCZFjÊRF1fqv|vqz`z\Hjy4gޛ}uWmr(QH]tpR(0lZ0a#ڍZR12UZ ʇ8?~ET1J#a)>!.TX+aLńU?@`$!h,|c}æ?G'L㏿h~\/S#?>ߖxx@CP#Ǐ_opmj#;eWryϟ;hE_[_t`^9<c>m}ữ{+/7&hu>ʎG_k+%_m>&~(ǟ;u&yeWN]5&<ĩo[	MǷ9?M?9j&n)
W3_;`^'g/i{뙏'>;=6គpׅ'Y͓Cm+v/|@g'JcV5>]I9#пlŋ.ɾw-^uj3ٲocx71x_'D|cm˝t}^:kѺy٦}-÷}okV^W}>ֽ},g{j*I Kn	
$),	fK`s%(`I@r	JH%`K<
{'1PQx[RGBN?|7LRFq?b'n\Gﯣzڍ;j
_FR2z {9r2(}=)vcoɢ9o`
0#:oԡ)Yz*EgC"Y=Ώ̄>>%Z`9Ydx	apa7~t-PØ&@&L!A@@8A40Y`"Y `*
IOPE{SVjbH2H@=$$[`4xOTX`{[3n6l<fdvehwjv=(L4VK,`   `  ;`!f8ff82pNYN23/+5×4%C0`b#2
fkZ<J0`$L $C0`<I	f#(!(76`.9w%B03\\f-&k+l*]fM75_,7#y{Qݝ?,@@	#zyu{t"wL{s}`8g]w 4`@<wW M<v(&GPZ¾D*:zxR	zu(Z8V6O^1fJv|һ5l o6@f_GX1SIpYXƶ:Oi .V\ 2lojf4)
Ӯ}pʔDCMka5-ʨof}pekeY%/dy/laZl9m@dAdcXt)fhaVZvuc1T:Ã[&B܁-dl=ӌ=+PbP\ƞjP\7cť(.h$u1Jdp|88fGܾpP686stki.KԗI}q`<<2U<|Í޸z$2qz|4qsl8\om},5~9OjteeFeAFqCX'dQfպK៷JٚO[%ūYu'a{$탯06Ϙ&`,6o<H-+/zUρENM681`)YKj~v g +EY~%Cr1:4H)a<\O/$
AgׁBb&~ttoۻ0{mr.'rlS_xt7](ajSǧrzfzƚ:tNίbKxLYAixdq^!^"Y!aH3-;xMp,o5F@VSY\ZXZ-l
cÔ4WM˝G݈Fnhe*H t}*=3t7IJ5N[Y,j+E7APj#ӐN3{|tvƑ=UH
Jh=W~"i֋HE1jPchH$V&=zS
Az"EGĵU};s@54);dVڕ)և@6L	6=7(`#8Dǔ"SiJ7?hϓyqda2O1X9op\5wz_xz,xîC_ưxPw=Lxlbس"
Iu~8۞*9ǓՄ;Ŭo2KK6b	,jN6[M;l3h	1"bd3p}zdׁo8x
0M_«~ٮoq>>_ŷ
$aMǻIz˘%.ob॒6Fu	#BBNvJ<(taNY<#t)tbh?zI(#>JJ\R4LIpešacvwF!AQ_j=QC_U?iGtֹ')A(MG17>A '7$dIe{_Ec_/aSl_PK    PK    A             :   org/bouncycastle/crypto/digests/SparkleDigest$Friend.classJPϘզ;VdQD
RFoϢP479g1_ :%$NP.)0	D< 8N,GY>c*gR"Qg"FXBuQοͫ<VD̈́i"_pJ8iWz`lp`0	()ۯTQ"V,؄EE-%9/-T\.byysl/#xr݆PK~p    PK    A             E   org/bouncycastle/crypto/digests/SparkleDigest$SparkleParameters.classSOPѵV/ nC?lX"$
$ħZ,-i;t$B4v}Ú{ws|`OӐҐEdzoѱ̀Aw-ñ];\cju>_}^Za4rpo<Rkz:j'Gm@ՎtcnDa5u_?4C)\">Џu]KCfx}M-TeԒԂQsD("EbX@ZrkskV?0Y-mjnި'qn;W':q h^r'
$$(
()H 	f͜<(C*3$;^n麦I$?z3(л%.	 /s)sa`xLQ<!_X"1%9F'> T+<yX9CkH	gdޞX,	_60DUK!t9V~2Ǆ34NQD2
αtQDm2Dm_PK!	    PK    A             3   org/bouncycastle/crypto/digests/SparkleDigest.classVsUmdm@DJ[" дDRMynmݍMUo>qWgCfl_Pepؙs{Ϟ{I~_ `v6 #`uk"hHl<)!HՆυ1gS",)"$EڜBƧMYNbΜ0+U6\HndT| ͒5:m=sν$H=[f1^4yYӱp8:ӽqӮx]|zԉ\_glz OR	slWB}.ȭlUBT6wttHhЭq}-۰i*#u.%7Tj3]Fj4wYF.-a}LotԞ,[n:j^r(sZw2G8:0T,ϩP[ḥ!jz\xsڋ"J{RzŨ(!}.\gڥ)?^vureݽhaSi;7_]:)p+(i+*6~3Ni
˛鬌دyyB^(A-ג)"\CQ1(WoFHkptB&SVEK (cv2!c]2v#Q<مy.~	={RҪ6hJ>-X,^x΁,ub)*Vb&1<*"b*VW*mQqQCQ*a/V`3cTlEq\E'T<'U@E7GF)f8p,9)*3:0`1
yJ
QЃAGQfxVA&O"w.Grx'ua6.KTi7U˷eICΣܫeP;B3a-$|@ZSHቱ7Q%n9I
oj4^io|
~΋k:zd,8Z|
^R0PMj.]G[2A* 4XxL~K?+S!Lr$Gch^MwdkM" ' AV>&xDx-V7yib	Nv5/f|޺[Ƭ Afs@nm{Ҵ/pp^c3xsiD[mױqRׅ)D&ήqgCjHNӁޮeOF7=yR$UHrS)<9WDBMbsmdN4NI5E|-DZx&MɤEkbĈE޶^kr'e=%:V,h2u"SΔ}5TYfNsL2
gGEIbJbqTaxI1QOM篢b⯟yüSww+\7.!ɧR[nѩ0nbY93e/+a3}d7OÏP7bkPKBٯ    PK    A             1   org/bouncycastle/crypto/digests/TigerDigest.classy\?kyզ$IM$I$!JMҪE$IJ$IlIl	!!$[$ٷ9z^s~>833gΜsfU+O&bLD(c$Ak[hOChOskBmb2O5*&9;:^\,f6SIBf_$/u	~$!pnE^^1>a1ܶ77FoR;&*4*$;Cr>|BC""ýB"#T%P'>~a~~\7tJ@W7ܨ#qEZD.

e]l_$ׄ'-
{g|4""s-Zeo`'b""	qĝ7( 22:7+9tFh?noHbxh77}?&ulj1?_?Vΰ^JzSC_  ?5_]"k0joHat",BM;(%v

垂?~~ E\VVV#i/FsPTW${q*Žrb]>iJgSlZ/X5攞*X՘|OH(=]6lL!$;$<Ko{$r5p59zKYz[`pfH0O{͐hphH,ю7i-$t-䔳7qSok8YK~lXs{d>`TXsJm$Y4\ܺd$myLDf)τڿmk>־+Q}0h$kk*=҃1/-.'j^	_*"͚&?h˧n&uXmQ#>hX>!:1R_)Vx}> )M3ks(uvnTT,'kSڮ|z|ֿZ]A߿8Y Jo'b>;]Rb
d(lppP
bjKȅ
[?Tˬ
c Ii9
>CY!GN_g>`!])<0\ﾥZt{H5qJRdmґoտ=[/-^>?2*߰-Qg[[xoК%aSbbRظߩqԼ))y8us
dks
2'}nȜchr16I9cGl
W4\t
6e\S`pdd5{ qIua\ 3uC@BY6_s,첄wfjc8Q{d"Y]x}dzߔ,)0lJ'[.nzv@lyWivzѺ֠UsEknц7p;[WL<ݰu7SU"P"Dr/.5ma6= 9M.:`R<6mmc6VmsZɓ]m[ZρmgkG~F@÷$;6A^Vz毛M5v+ڝF}U>t,lĪ-JnsHȷrɐR-qb4 UCUءuj31o֨NÎ ռ5BqځUPcn5,59g[l?n٥39L9Y1!\//;wrr}Գ>Ype{CW]M^Ԍ7ރ]7>۟Y|)usZkyMv
oXd:
􂢈T;=ٕ8ݖ_]7߽wv3.s
vw2~sY׹A&ך_WBXWPgéaOأ
faOLuK	nOUo׭dմrҠ$tsƹz(9PCY6\YVػ}P{n5;JeH7eD d:.<Z=.\1#ڗs.췞R"70/ψztDk^O?rZԟ߲9u'S'mG3}jpcQppdBҖvN=>\]jMPRw_~<V`۹{ӡڒ!YfL}rp#3UTj=<
e6
yem6yCwI7'_&J%-sN#-XC۰^P}GnMï{e
5*vVpdodD8t"I]nG}s*F?cTgZxTlY䜀ڂklt>G"*&8:ĤyOv5߮J99{|E_t!G
-e71<h](Z>p֜`f.xoP%_0T1mUUew?2Jn:JEzi8\yp"fTk<3 ՞o;?[6Pj8
'lfoHl__8
N<(\{4
N||5e-N2ޫ_
'GW'x'Z[P"x[{)EϽԞ-ν GK/APNé#Xxs>=qATl9-9NN]sy'týepm;
5|g
r˻KÙ˰\-p'I+n,J)osN~p.fZ{C\|[voyEfR>GXځzAקN1Zǒ~k/Ȕ@m莂.^svihOԶ5	\Vo>7.TYiދP3j\8.*ru=|='KQuM&`Tp`,\<.HT׎i̽y`1\mj.8u~x^:.m.<J;\k\ioP@
.dwO:.\9Q[Po\p6su/O.[?+kgxxyk#͚{GspUSWnZ
{3CN9Xb\a%ѱ*\[ku]f/\k?o>k)4X;Otz-
[
YYprR̂릦'S}"χ/,Fuc
ONU]_Rkl(+QӔAAI/ra2Q<Ңpcq
*Oƹ-C֥{
) 7ppCC*	W-ͶcX-er#(iѐpȆĮ{QcMƚtc"CڸLЬkl֐x?v'pߦ &5~9	Xxt̀IpgfqUNwgLpPໟ],O76
w/=3.J	}Juu©<`Y:>Ϡo
Мtоеӡ9kf.'Uzet7wG}poq=wfýGݭТ[1spYhUjhh)Z>nQraꂧ_g<y-3cjZ(2vÃY=y拏o_VP>	{%vGʪ6£IgPJg0%cMLY?xQSi\x<nz-7AHXXh͌}{|Ηк	\?nxvRݓ<q1wxrf]cjKC**T&x&<}duFx^Cfx<voFRx6g+g~#gϏ.ԱֶsWo7sC?	C؁hj	/?-Rw필3W^_m{Mr|Sh{89dxq(x{c	YGgP>^e}o+;6~*&xݥje	{UсOΓMEB_N
=Mvj0hW?Vhϑ:jp+7Te&<xs9,޾7'.,M;t6}z
ke\e%ˡC/ۙTX짥6 ƌm|oc?ʁGȺkޛT=atZsh݊%ǩقS:N(rVX?eAΌ=f {)j9Xfj<ZZ:-]_JVJD@WOٮC{rծ_x?H4ra1R|,&-=	odZ[^V@wYF5tױ8 HQU:6}	>_߱@Ep>[$pϭI,eG>vʓN!K=lЙ]=9|;Ay@\sh|H=ӤK:)frۖ^sGڲ:|-<Q;|1z&][<r_;&_<m>_/3G7o _oQI|
q|i1SBYyUpceC]fN ??fysÏTi-c$ri6.:?bis^-x~𻭾vd&;ï5}MׅA6=2'mzǯt/zfe}~ =fʶ
	T_mbe=ºļG~7[:ޡ>F-y
yon,vf~#@T$
yM"Z-q〘؏:4ck~̺H&lь!԰O9κ!W/L[;VM}N	h`App1a@y)PK8To\TK3od qÖszʭuqWԃN[.(mad3hAM頟G 'ؗS ֻ߬:eA ,YQ?7Vn
>}-䋄[3p)&s"0c
e39:{2ѺGSWHoƅ1[sGuuu	{1X3H^G	v
	z9A"N `3=$54e׀Oe>Idݎ+1Aj*_Nz\RV:K:}.mu?q!7*S?͚ү.(m ő=S3~~޲ lCxt8 1>3>B}̷\9|*i_d+2<Ȇz1d7([cn=;r~
?OՁܡ:\Uh?@o_b
J_R׉ڮۂ|S탾cf)_	}u(;	}e߂*.8c5~KPPɊ[
Cd%׎Xi
^z\kum=_5Tҗwt|"(ִHwb@Ѝ\:?(V|^P|;SQ-9~:WG	uGBj&A+_%JqKdtokJm.CmVY)6}Md]m(/bGg벝ɠqf'|SLiA?3`-FVsA=0`\GP1$fL*VïM_kn>;{k*Eyga`j'P7^	٬͊FV5aB$Rahvl10ȃ\0q[t>j2s=)ڙtPqιK`e	ryF0رݞ{ÿ^4؆[^7{,A=}P<~/4oϾ1jր!K&ܽ> r5E㧽yx#0ٜiđg޴E7n9+Use>o>Q0tzrK{WǬ5J+Ӻ܇_Uj	Mri_@s`w?d[/f
x='%2Uu-`XAdx:V49$?}~,K%]c]
5BofiЊ+qUeT^3 pnx3J'A[r}ՠêkXyt?~:J/oz+þX@w}sIv;m,lu8tqq0-ܪq6W]p<zMۙwJ~;sWԘs!746<o[0ЗמׯW[t7;eZ?Y&E!z0BT]0bgw.[#~@/ B[N,>l|n
#]ϕ7K-	#>p)Fv߹sx6ZI6J[W(؁a*U`6n50Ĕzv0ꐩRdm/,Fj-#H4
cg}FN.ͅJ7N;y蝍H]t1D3u&{ƁDNY	>iQ300LZ'g~LFL6!x	yW2L4㺢or}y> nc0vzSbv1FLW-1.yL7M
rLw ,8`0|:`\Aøcw>]) lg~
f/T;fw_y>NJy?{~_2O%0>,nS
ߑQ̍N]Jy C}NOwg|37a:0u?2tqe9T"=L
Ðx W!$d<++-O
ljtV'(׌~~5N&D!.IE%Ϳnu?tuŚTɊ׏/}Ӌu$wryz,mQ)>0$8XɴV04F`V
w9
&J
&۞q&_`r<`=#s
`}i fZ#~=ڊ`s0^]#K`_SMxGg	)O6Z-ec]5yOgYkTl.[Lrʁ-05`As\``#}Z~KֻI>QSTٽۃm9^i#ۏܲi~~{-ʾZӾkzYL_|?czn&L>\ZjGw)WGy܁griP`+̴Vv|;kaVؽ$,tm'|a\Y>B=yg7}6x}?Voyg}q4vècg
F%7'cøH}xg+8jlcٮ"qEѫ;,+'΃YALD!0+c%e`]1?GmA#OӚ2VgSAE߾!Iu
bq༱뮷ywB:7ځ0\*?: .k
zTHRX0V̽5Z0ɽ`_j//n/5V׃=p=hMpmf}}Cp8weV`ΩϏsV=ܲ՗%mwp.N^T
^{܋w5"#3`y9Hmc^%Lnp iب.Ph[y#pwc7;F0o{F}<󒋛>LyW}uz	J&ŏԖ׀TM7xۜ'umJ&M9se{!S&j
ߘfP;$x:j<GGgL	юѰ֋`ٟ
u6%&^CH/+y=YJ}&b:xH?w@&x'S|}w7Z)x
z|<1|w><yG|2|3*q|jWޛ_||nM,	6 ~ow\~u]ذKeSfXГFdnf8,1k~հw͂o?TlݬH0o^ym1?_X1opX4aQL`[W`Q'7AJm `9i0{v0>LFųLt<e&,:`/X1ۼaqdN4c_GQ\t
6| 
nz1ܙ'A߮'uN`g{V&|}|u]/>~};^Ev0OY`緣 B.\!mB{CC(?xuqye3#oK#qNmxdS4cJa>Om%Q<!	ط=1CCqJS=!;Z}!̝_M!0ewp
{1M!
g=
"-Mm{"wz{"N{+\(O=@TR5([ZH=x
K
z2P,xWZ?!#x)DR5 Gh8{`D,sk`
R>,jUOw
ˮnc,LSLʱ1Amk
D7 1?m7UWox?1,w0>ASY[ V3K{WQ7i2w]+gv(^xIXz(_XuwpGib臊iXqp:a!NTW;)[gio .c3A
͇2[FT֬<9nV6#IXع·v{B|Ƚl3GB*
U QOrbCh1Cg}1!IbČ˗H֙񷯦EswhIW
G͟3>|2_-㦠_g+]م!xtWYP&䥉I|я+MVG(Jf|1/b"_͗&B	uQ|1/&4aD4aB|a#MhBRP-&TE^\W"o:IJPU)!+Z|/"/"/B"/E8_DEETR4[NR4GF"/E,_8X|/"/E]")B}/ozD
ⷝ"|Pu!"7<B[iYB EAKn[v>_yi.N 7չ8SE=EyQ!Aw rIͺGDD{ߜI&[q-\VʉN*ET(ߐm76Urtq?;(QQ;&!"Oqg?n/yX|P??
gP|pL=ݣݎ6̥px\t۹?pz'pG/O=&5Ћ{Oʐ;)-Hwr=IJo!U)GPR>>i..r	%@c5r
[ZUNTHrPP,mw^쿜k

{kŗ=FH:{ڨX)Ҏ6qٸN]ipDo#hF;FW)J;JsD/|j;tivpKG}prϥ>!sHu799{iC?v#?`ϥ>!sHP|sH=-l??sc¿n\%jrK&&Mm
&wmBTOMF|\x/:W)N|d?ggl^ן
3^a&k^K{pYQIq&Ò9L@W
u,KH"]<5cLfrh'W*f17
ݟ>oN4(jf7G;'_|?@o,o5Qd<,Vj/G #K4 }F_^ 	|}_,Oj|MI0f.HR\Zh'o._4݇{s
k\<??zDp}#WCu?lG<q/ܠy\t_$ȯK:Uk#ǧ
4$4P|0S|0SrrH B>Ah' _J'Esݸ`}7Y(^zgEstsOt~.\n&3sNG6p33,kaτ+fu_6ED~$F(ppYrLe81MĊH79!K6r.D,˅+BBY2 >,Yc\r,rї%p
`Y"KTrяePb\gEPfh.s.TXƑ,*
b\`6B$s1%"`InrCY,0bP.Y :,Ʌ.+B
g\`d$l
Y1X?݈r1u0f).ưD&,/XVHqa
]
0c9\g!sV/Md.&dK~ąKq1sf*\La)vذs.4 ,47ʹԹc~3Y?{Zp`).YFY,7qbI~,̅+fo]Y9,˅2%wg);.PƅKYq1e+x^.d!^Гo
eӏX
>Y"\`i,p
5bB~BX"kƒ\,a	~,E+H3'r)K}"%ݹXƒE+b9K*%weKc)~AVg}'VU>Xs5KU
|a	k>Xϵ,]g2+sK|g>SYs+p3Lg~|f|ndIG>3YsK3e>%f|na>sXA7[Yj2	|ncIy>X@ΒJ|¯|`,`|d)4BAb3|Ʒ%,f|a|4ʽ,>V~>ydi>KYڋC,Y|fhKY2<ʒ|V"X*68+H䳚<
}<ɊXFVsQgX&ϳ,9y>kY,֯%MQ|^bEh\Y@g'*+D׻q|6W|^g	,Q
AMFoO>X=_YAwX.+@]|c	ty|
K|

|Ē|>fh,AퟲnX9+@}6%Ku{Z,g;+B
K㳃s<峓Kub=Y?ݬH,d>|b|~fT>N>_X@wVˠ'KKua)t~$/K:T6Ew#XXLyH`A/X6GSFH`	,H`Z	L%!),H`	6H`	L[#X`&		L!$0!3H`z	9jDݑt3X"D$ 	L4!I'$	LDC/8	L EX<$	h!:$	CNH`&	H`܊fT/X`2X;H`aA3QH`>X$&H`aB-$P	Ly"L7X&"
	L"$0s		,G!iH`5ES:,>,XAӦH`	Lc#M$0h &,	AH`*	x!EH`	Lg qH`GڑBH`X	,BC'X ,+$0&,0QfB,0bb;",0fܱ*,0&J,0ٌ&t%ձt,XX|CX`e,0L2X`X`R,p h	X`&La){,0i$8`iUMX`JLb!FX`,3X`\hVVX`aXX`Lt`U,LaI{,0cERX`,P,0̐X`cic,0$`,0a!
̴bIu,0Y2j}[D+ӊX`X`O,zX`L$bb˰,TcX,0\X`L`X`t,0LaGX`aX`X,0T`b, Lc{,0c>pLaX`g,0rg%p/0Jj$/04"X`3$AڐD5f&[%$0Q& 6$0܍&UH`	L!L$0Ys$0Uf	GH`J	 $$0mf@!
,pXЈd`c	L#H`S$0&BE$0&ːX$`	$&Bk,`3,=l#H`a&CX%H`"	,H`@^H`@C-@:X&B\',p2B;H`RCCCH`	L$ H`R
	L"8,pX&ݐ"C$H	LcPfXXVCT(F3w`a#VA$J,"t019X`X`E,,tL><X`Z
,H(X`.C4,,Pc,,RӮX`*La!,x,@L\+, ,2$ˋ`X`
L`X`f<wcIa,,0L4b3X`O,Lf`)
LyX`A9-I,0cZX`UX`FX`a(ܰD.1X`V,0&u"e,0 LU`EjX`2,iSb۰B3,|_tq3b_&SX`a9hjX`Lc,0da%b7b=,`"{~fqo#0d&+t"/0L8"H`	,E«H`-.E9|G3H`:	L#ENH`t iC$0`N$0d"WH`&	,4GSH`
	L#EFH`AX"!	,p!E:H`A5*B
DSX3H`2܅#EH`ܑ A	H`R	L"@,p	,REH`*)AT;JFO$0\BH`R$,pJ
	,f($@	,L;!H`2	L",$0	,TEvX`=$P	LE#EH`	DXD>CIH`A11qC*l&+f
D(DC7(!H`		L3uX`LVC	ϱT3X(,,%X`;H\&_a;X`LcidcX`M&S9X`9b̨absX`
̔cZ,3]X`LSX`a<Sb+"F,g,0,t)X`&fڰX`R,,OtXX`LcL`,0c4,0-#>4bX`LuasX`&Lk`X`ZLG`X`X &`	,LtcX`Xb,L`E6X`A&{b=bD\&),0&kb(,0b,C,pXx,,xqgH&?PKo@'<  S  PK    A             /   org/bouncycastle/crypto/digests/TupleHash.classUiWg~&$abV5$Ժ/BX+V'FLLT,]vol+S{8U{$#swe θB=lzx&c
<f\dyٛM;d=!ęMNgٝNfTM5('87:vr\H h!QM\*ZJ@]BMj)UFf=6^Եl(\I=;Kl9<%ki)y1
႑-Gђzfk&\(&J
;s15sBZ
JcjZ#q@j0ZjƨS:r,C{3%-gLf夒5Tpₒ4VFlX)sXB/h٤72J,zl+V '2u<MёޒXz60fur,Mo>}RNNh>i-%Kp甼B'ɩ)ԳB"oйUũ
T9O!2{s)'gǲnX^EDDDElCDLS"vxZ.EW>;	hum
77Z9t|;C26v<<\p36[CʌmI[쨢R۫侐xIQVO`&l8NJz8%`KB<>	aK8$	P+a$3t^f8
a8ScsG$<p /Hhg`x%8ُ^~ׇ<?cH0$.0df4EY?gH0(.1ʐc:+~@aڏa}|'^V-} CrvF74@w ~q'vmBdC'5S?SE|Ę9{lgwq|<Exw̅7">[%l,E|
αyV {uWWT$[
DSwEYRKL-{)YZ<Ԯ]B=CĀdc?|}:dٿWy]rS}9
5!/u"nMENEyNe'6DE~
6MtaNQ5
%|=*QgtyZ~.J8j&Ipsm	78lq9u#^0ш#\5쬸- ՛	Sk}Z楷`wq*ג~6X>UHn\k"Q{[,oYLnf9ŬPkܝ3-G	|Y{,;^s	sI"9рڂң]^>]NF+bNqᴽ~ݗeZ8G@_YYf̷NXEPKfO    PK    A             =   org/bouncycastle/crypto/digests/Utils$DefaultProperties.classRMO@} &Ƅ
-6bH=."@}cwcG'EjT~ ?1PAΛfPl40}4R<
%͏!rO}t#R(1Wt=TD
u!1:܏xGs?QKq0
65oe!d Z|zJq*CQݗgF`ln]d~e<CT[xߥ4ڏ^f<q0x"
%XMa-uKx0JNV\ӎcZZhHrS{<7EjBq"VӮBVU~歏m}c
CJ鷺˜.zgNz떶.[#M% PKA5]  J  PK    A             D   org/bouncycastle/crypto/digests/Utils$DefaultPropertiesWithPRF.classRMo@}u	(Ob@=@h@9o܍qqlk?ĩ@DH(ĬPRkg>??x]tNaxjP5Cn(=qCxΈc+TK>rz=QJ	y9b*]9'yc(;G3vx|a;rn%4we	<A[\M17QsEb|jwK1#_@ITŹԆLy(zJzq:Fr9?Pj[]KЄ
mbk&HeQvᮆ{PL+<s\|f;l<w>;W	7!&'tKL'arC@uil6髆E
kk;AZLP
9;4IÈwԿg,ѪzJP9Mjw`˴ac&+&
 վ̺ft}^,]Sl{D#^-XPK9    PK    A             +   org/bouncycastle/crypto/digests/Utils.classRJ@]Ӫmo"P*DE82
vTT(q'm悝C5ΐP
u~\rrm3櫲\*#-<!Z¹r,	<k䂻a2uu"s˕UZ
|+iB%|ʵ)^*׿<4
4ik%EL~i@+rMVÈw4$_1Š7G3a]0i!bӯFud1ҍ&V
OisRՖ0vpY(K	/!#l_cBD;_~=E8|-&s):5/g#5uL4}:Cu nПPKPڞ  
  PK    A             5   org/bouncycastle/crypto/digests/WhirlpoolDigest.classx^,^ `"J$!@bH"	h6&Y
ET[ZkPT{گn7[ZmR4w'D
>{̙}҇ ƛȒ3&LZY (H=KנboRsV0S
Xl0Zvi,n%%Va4lu-H81\ݰUhxAqUaKk*W!ꪢҢEUMd.&2]R"3Efs-(^TTY&J+*^D&l!siтeUe5eKKRD ʂkMqMS8`fIyeH5W`dFMm8Qm$0KMmKmohLЭh4MxMN`")X.aƢH}8F#&⺦P]sa4OĂHXSDi(Ҙp$
 1oiֲ`+SAG"?8B
DE,%¡xmA1OToXÑX5$5@K0(];TOZl*Zп/DނO\]G]0h	bmh@e(6\hEX9KCar?FK"L4
x`Y"?O~fY#1U _^8&s%hvۡ"(Ul#	](ζX	jp~\Rz3-hQ\l7R4tO[tW}zom4FWڨF6Z`"-"-OS
sQ9J?RlX8̜O8+O:L/cγԃ1l?k6Ɵc3}d*_N0WWGW)s3)4Ib'	NʢN!2Rdh[##2I/2U$ 2Md]$0:iH.9"y"W")I92;N8Ii:i]/D2KZ'ͥ2nϠfZ'!rM"En Qϊl,%9[EnDzAM
mt!%D|Yn#UlyP!н"|AO\ԅz0~|`K<W&p,	UI%"
͈LajspK&z
LW9#K<W<WK͑4Gk4ݚM	8L
 XhighNkN3I)"D-!.:'ɻa>tHi<\vptxZGs::]љeQ@Z3vչߘ$D(MۏsO{R&|}QCG|<YzhgQۥ[!ÚI_X2*yvlv{M馝@&Um]^j4k7vvnoWK{7]I{&UK{{pVxZbٴv|G鸿{.t8PW5?tn0	!uf/$G#*@`Ԧ
3ҝ;<ӝ)CwC<?%^z=%k.]RJQK/>(dKAC5r7y}:1TKAOc̟gk75f8\7۷xY-Bux&7sl7-(46P	ѓQa`U &<zmoSԷ!9п跦ݿOKݿOOgݿ跥Gݿ跧F?g;H9V##?hȉ^J2y
7Lc2cK^ sd.y%/2@\{?sIC$sRmܫrQFF]:;uEj@Sd6	pŞ"Iq4R'[f}n/Gw|Հu
}nN<DNqѳ8'!yO2-/>a<@S%Ϭl_oxb{fsξ7vrHS%XLn>gQz9lw[]Ğec*ne7.Aäq
YξS
=~5hCOǖ^qKqJ'Hg q[_N0r4+wcϤ7p\\<RA$ydelmcSbld}}!%r[bha7D[gen' f*wT[xTyǗW)z:]˫mn-+-t+P;φf(zp(0H'w@s:D`(/2*Eǁa +Tb'tɳ藀KOz*Ech6gA/2xE.V 0A_\DO:Iы'ANVt!`*7Ci g2Cq>f*z˸:Gov WN oStpWC@ћ@.EEh'-UX+e:r:i |=J2
]kV{@ +x%tۀU>EՊ<Z

PR
3ڄS
FEw\mlh+7A#F %
St7qC8],/FE 7)zX͊6(y-~"IkN6ZA:SgGyE_5۹BE.ܡo;yKW
2mޭO¯pHpǄ_^EO	#_xN
nltOnÊ~/Cy`
Q}ᣊv	w".EVpOj>Kc| 
uüNsG%aR,-<cSMH(|s	EO(:%|&_-%|[`>xyX	_ReVU
_2V?˹QW
G?fopxpH?'TSEF/NdWHع7\)-FǃG-?t[I?慂zj3`-_y]B&;^HLȥ_\ 8(<9xCpˏ>73]5hܧ_yzr\zkjßx7Ͷzњv:]nםedҷ+J?mLv<i2L{]z1L\[ʴL\1̈́2-GӳDPKG
    PK    A             .   org/bouncycastle/crypto/digests/XofUtils.classQk`~ˏ̺U]/	FLVQaiBRL(*xx&zu,2WoP&{{y޼߷_ &X{ 7쵶FޞiUC?0fE7
]'Bl8=v>eQsyXZ;=M%[y}uFIYn<&(YϣF/{q쌩\ ו1}4y0$pdKctq=]*~q9Ö	<m)R-z-f6`sF(.y5A7ޣ(OS\%ⷕ">RJDY^+GE>!!/cAEBlls%eQd/q&c.7e㡱,ÜOJkJsQ%[30:LɳZ\`$PKo    PK    A             :   org/bouncycastle/crypto/digests/XoodyakDigest$Friend.classJPϘզ;VtQD
RRRCRrзgQP|(q{a朳O ]lV`dqqB`7)NCIHGpdA8Q0S9B
d>Y#eY4gHK߼cF&j&LrcQCdŚuNYnJOSZicvLV97xjTgh0PbK
$s?ϰWuPKORx    PK    A             3   org/bouncycastle/crypto/digests/XoodyakDigest.classTrTd2U@q ֦MέIH'ֱD$Ø)/^?Z <î,<S;{vݳ߿	`FJ
2n/Tx+%B(%Z\W.n`^*-
2V]AעPtlJ鍆Cd|Ed[եuڎq0uS
-VOEYa]
ud>ySu[3e6-kMZF2^AY2;\N=ht}(©6;~ 
{{횂pp}JtMr.^綝j*inB]I-
5dzsSNmuZx=gI|Bj~R*ϿXvěF}Kж`'}IE& <46v$M0^Ol
RNNxԬy+/4VeoJ<D\{z!C#+5/=<!h}Y
+CL!C
02hx	j!a<^CB8hGҘ05
⺆Wqp3M
Caaaaa%p'0|paa6ç,ɰXb!|!C	&=ٻXZq`ɠ£W*Ɔ_f k%l7t1R=FxPz?5?dȖJ$B(g_G!0#k*
G/[!/+v?18wcbPl
|B?Fg?F?PЗ?$vR/Jг7)t1&UUAgXMl[vZ-7FWVć94Rl惰П'{?ȟq' j/Fi$:$#T$5ͮh$hDNiCk<
ZQz\c"PK    PK
      A                org/bouncycastle/crypto/ec/PK    A             4   org/bouncycastle/crypto/ec/CustomNamedCurves$1.classn@Ei]C()4I}s@HmD !U\gHS%6'ETT(	H,͙9sޞ3~eEjX^iJVZ֔jۊj[fV*zRuж-ݪebպarY6mk2{L :K0(DPQR~	e49Ф8.(YР|w3	YN{C~in1ɧ~;v.np2ue2H~_Jtv9sƎrHYTR
	0'``%=qNjx6i Kc	3?Ṉ'ٿScèY(:[1iՎ}]HH`BHHFAĪ)ܔ0[QdD,bMFឈe;QHHa a
ڞCe~@<m'i4/"z&jτS=<	XS1$/:ph7P|^'X8,~_:`G,|PK:    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$10.classSr5>$]6
{BƹVJ6)	tY+foޔ/?y 42 <v^|9ڿO ^b&P*R*
̮Jad 
J"j}~B4aV(+cĉdQM(D"2GՐTUdBRPW  G3Vк@5z!cKѠDbTD1Z109t˘Rݎ-fGǄ`Ĕtl*sgAXx|jA5"B`)Sc mcDܶ-Q8 D䊴2(Nm#>Rä̈́Lc_rMD%C.=Jk3a
z`Tj0u`=UeR31_j{aNvL%md@!Jf׃Xmv;kt2|2xdw=a{/EG(.vxF{0M،8gj{^s,#?עɩV0)a1%SL?NovMx7lhS^7=r>t#>v>uaƅY>sFϫo#tյ쓿Y^h4Ul3蹓i}W>uYDn?_EqOn)7j6Nx">F-<>l,\,5x+%xVJ~&nWi@%xp%3Apx^n+"EY2EXȢpKQj{^u>ObJkD=5!2!eف_c=:x/p.܇[iwjj呺Ԝcs<wn4s9s}r!W9V>,4k~q|>q\ NcTח/>5W_Aݮ<8HwlUePKs>g  \  PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$11.class[O@+eE b;m`Li $5Kkڂ' P>63s朶~	@5 n8ԬQOeTuuU7=q*VuSMS̚Es4xzj^Y媶{LUzVMv,LUU<QCrV1
G2q]1,t
*a3}MPtueTt[3aZk=
O9E
b=8Hc<N
uDu |n(&̼Nj|׹]!:O$-{Y|Gr5jW >F2d0IMQo_IQJ0s%O3B"A[RNr[jxKIWfKa8Wqy1X'ȗ[~ؐ6VJ{dԉw0
,Pu_e+L$kjBK/=(]wN_Pff
Y͐Ʊ$as&Q̢)%<ċ,H΢0OsA0 %<ݏ\C-?Ix0C3vϰ
p[LA;o]H.DE91ϏC__<Q#7/0[^.B.ICRS PKu,  [  PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$12.class[oFNR68K&6@dSό/3#PM qH˓N6ve;UB"PHTl-\~s; bK8eaj)%x"	ii{ABc7LG"1
',e~d񀨐q)EA2"L%,LE8z<Jd\JOI("BT@LG*c<ؑ$"Z8u{\-HŸ1!B*U0(Vw-Y"Y+5:گhfޣtBwr48o?MTMYYXnYik>DoyU<v[<IO9;d<8ջѹMT-y[Y<V5[>eSI6?r]=Vߌ'.ڳj~upB_ZX1{99[(F/C,3}|8-=-;&5z$_c,}KB'qC=92?3,v.>o3좃+],j\ز~m۸pnڸf/㺅|&E>)ksunQ*dukluעYXuܭ6}_N|^4=wA6=`ܯ.»`:֞v̢;LE6ͲiPK.    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$13.classmoDIm$<һ"$zVjKJUK_r=t[&X_"HPvvg7 @*\`y0|!b.ci{**KќbQ3B1tLp&L2SXJS$
a3+bEdfqj0	ɲDR&55X<j:S
K!6)cIQ<R%TXldg#RSd3T,?X$N ZR% J6c3di0͒	iL@'DCR[WY9Q  )RVJF˘*nXPEdI4L'yQAY+j] NyM +{Ӣĵ1/ڪ`NRwU=~e7EyS腊+k- y͕Gg~s[EaV|x~$/
i g2Y[sZ(_KF_>t}Ӥkg,reۺn=؃K=܃|Ѓ{Q ;?h
`k0<_e&-YOGle7S	}95jZ^EP:>G}xμ}}Xke&섰p!|_uFW'p=G mY̪kUc[.KWY4m	ݳ?	e?6V]7ai^{
W==B¾?___:vg{ah
xF'K"[
?B/uePK)l    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$14.classmOPʃʃ8da{Cº. 1DUcf"ehd{==?}@E&!|a`M\5U5Ui)&ЍM%KUJY-Ǳ*UTUjYA*YRQ64,S7N9U+ZyL075<E9EQ84qF11#x=b1#μvŜo>^&Wa lznF>Oc-'RO?ǁ<nGqp3鑸|<G5+Gn|-_K%/wR
&_Ij͖a$opW=	&[cWn~CNno*B'll1kp`,sX-=՗>z|MEAӏ~P޻aJ#	Kۘ ੄,䙈I,BN4
Y1xEI!26>Fk6:-7}vˍ"a+L!y'W|&|Z:ʷ;)KC]Hē.Dy>/L\@Z:] w.1_\)]>G> #CR3iPKų~    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$15.classmOPʃʃ8da{n]H "v13Z!|+}D?x-={~{m@4Rifs{ZQݬ*vEwjzfW5f4kREJkampnU
dfk5ꦡԨԊU,0(Auj~|@v=EQFӴ?/d.gv;<fcG0"PlM|t=Wa lzn[Lu#'e]ٱ_Zr
y2OvDF=9WogN0w%1BEDRryo)]}S&_IjfKe~0R7؉Q	c%LH+ង٭O\Ʒ7rt6׉$ME
:ӋlղS}	CGT4}.Ŀ#އR=r{
1`(xNlncN
Ҙg2&,c
fI2yleчX H u|Dیu[n>E,PB!N]L<to	-wSH#?^|B2t!*
Hyabŭ3h	ru
bs;0iaM1d!5DPKU    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$16.classmOPʃʃ8da{׭]H "v13ZvJ 2nK42lrϽs?}PE&|aUʊbPԭvYqMT-j膭9SU
[QvUv\ӡ _ihfV^1US5Z8VM)>o>㜢(:c~ļLtW^E1Tg~XgI7Xb<?	#luS˨r5a;O}/NZL't?$7VGxOI(3_qzH\^<G5+G^r+OH1_2
UkKZN-ioX`'L0%඀;L>zǞ򂆜BX/XB7yll	kh`,s昛H B}j$\ (om'a@n&$x,!y"b"f1BjVD!/fY|%Ϳq'[a͒ð `X
3Ha>I@PI>>ckǻuc?zg_zG=2|^@ykvq\@޹~qxtn,:"DPK+P    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$17.classmOPʃʃ8da5aЈ!"jw35m
I ~(mD#3&{9w y!.&NM]Rc芣.[jdhպd8UbjRMg*k)T'(UrԚc1L5*F.W"[Z3+J04$v#%Dǔ`"&4	M0I;IS._F
vè);{qҦxboMS|m@r#lg+~JB݉he4#1y\!Xq%)ڽB"~&)lK7*VzIW:I- m8	8p]G^[`XF[f&	VYh2ЏlՋS	@OTD| {`bXPĂ 䱘"OxLc
<fQJ
9y,ODA0~;Yir6o4^La3;	td3a9־f@7
`(]b~}A< c3H)rq6sC02Yf+lLj.PK}L    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$18.classO@ǿbQtöƶhL[&Eڝcf=PޕD_/[fM{|~<133
7ru۴Q*7
TbXjvި/m.R(QYzPrf=Gh8U*V0q])0~%fp`f/9R!-!q0EYσ?hoC=vPv*6m}@߉x78 }]:?Cf|$O%GG{rW/
h
*`B)tfstvkӓ%GkTbN:5a@F0vq+gGG~ۓdq_m7LCCC`^xT,hM
UoH"b*fp7
TbYu܉9,2$ߤe܎RBMmD;NK$FӠ~ZMhY=Ń/1^y.s"{=h7z:	4/dIv9{	h~W:EJ6q?PKgA    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$19.classmOPeʃʃ8da9k	CD^:fFk[ PnFfMιο?~~@G.Ry`OTDY3MLf)aay
Li":uK:n͵aUu\ۑmC4
U$5TU,ݒd6jRLtUMR%ݺXU&}
Z}EQRjwcJ0э^ywDM0I;IӨ[n_F
.QSxvM/$ޚڀFΔ+Wx?:'hdGbE$XRq%)ؽFDLRvo$M~-uV[A:(6	q&9Lqӥޱ')o!h,RoAB4Z'Xe'b?斮z7P(l	< JGU+`A<,Vnb c1E*y̢s(񸇧[1fc g`	v9l0lr3hd81k;	Td+a9־f@7M`(K]b~}A< 5c3ە)ra̤sTC2Yuf<2PK|^  /  PK    A             4   org/bouncycastle/crypto/ec/CustomNamedCurves$2.classOPǿC!>l0c+@H$!"?:fFk_Hehd{=?~~
#\#>AQ$Wrfjkj*dRVGhI`IUYu]U0MKq$[14IkbufSjuג+85TuQ!W4ߎ:~Dڝw]/iB@hP?lн$j	4A>uԠlw)g'm*zq t?W$7v\٧$/ڝ8	wXF#__K8w^??Scܣo^µNj4H[=0aI8`;Ķ4%ҡE0S,u#V$Iu.*a@BS
 a@kZ}0,`x"nj`^ gXH<c3(f,<Ejx̥GX$ sƬ49
m/iy0f*[Myd_3 1G0wp%־ O{
ȱyq\|i<9t	q
S96C2fu6x&5EPK;G    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$20.classmOPʃʃ8da5k	CD^:fFk[ PnFfM;sn 4T1B0\,IcdC5WdlTijZq:!Iu]v-۰+rMLͭ)vk%˶nKvŬŪ(:]5Ű떬HVt]uͺZS*VJ^8.HۑSg̏PSʋ#(&t7Z~&M'aDOnj|5(]>I^)5Oɍ)~t)	Ev'N£Ȏ
k#/9Ly3I1f]꿑
KZIZmioXܠ'9Lp06;L>zǞB\/XR7j576iNBvх~_e3-^O
$n >5_SQ
&yU0acx @CRs8<b<1U3(E)5+<PqOSc>Af0f}ئa`fn{qLc,00$ j̈́#+X9`x7<,<vsxxԃdV@KSCжV mĝKLgPؐWQDf3,_PKH  /  PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$21.classmOPeʃʃ8da{۵]1Y6 1DU.cf"eݖhd{==?~~J,F],S\VU\vݚ-W+j(-ۚCeY4]ŔU*Nt*֨Z*2kd@eխ:Q^14jpm͢&u\U&4,,vhfcF0^{w::Ip;<$MM:KaԐ>?8i1ɋ*;ӱ_\[ޏN?%|nIx3#qyB	dya;vP埈ߑba[joh/iJR;i$bi0.`B;
G0U{RRzAcoHV$5*cnzj fpσԿwn70(ãns$,R䩈)F^Y1x%si	26>Ɯo1K:-7Evˋcc+L#}'W|&|Y>MwG/1wϿ {d89t$}j
tn"DPK}5>  ?  PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$22.classmOPeʃʃ8da{ۮ]16 1DU.cf"ehd{=?~~@E5L#.JRݨiz-)nU%Q]-VJE2M[|ϑeT4II5-ٰeJԩcȺ,Vݶ"(RԺfhkU
չ0?ФS,SJpEo/	X$IBǌ`vC,

-/|Vpzq,_
w)~:wQfT<1wm): SO?Ł<Dqp3镸?xA	daVPJ_0-57r/iJR'nE'
#qd1xYLfq'Y#*n~t]M1y~s_#)ZǬ5.*cNzj sσԿwk<n`8Q<#GyN-œ<rXH"`3(%fY,Yb%X$X }D[,>}Zm7Xy039V@79
Oc(
^bnA yqr$}j2tnTd[KͦPK2@Z  ?  PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$23.class}OPƟ X)ۮI۵h!:fFkڂHCo%0lrϽ/_ ap\m52\C%GSϫU#趧V1zVC'.Fu:1m3dO4K7bXua[mښ!{[*ч> A@$τdxS?a|D9Lvg~Д	Z4u7~F1,iܤlw%[0?I;THL:H>:sH&itH^+*^P~ƻNQH[J	[๢OH.!
	<8,+o#ۭ0-?J^K?N0oj u;aKIvg[GQ;LApw_ٕ]Y(bEFV)`%3X0Y#`VġDMLaЉM&q#it$	L<f`)6slY=Ž9P ^y>szO=hz:ؼmUP>^uz56VNq+`E
 PKt`    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$24.classn0_ok8ߩ@HqI @_!5KPU6pQbEH>y/ pP1jm5)hrykhcf4ƘcY<|q6w0p4޴,QRۣgj
j7\KwYQpڎa;͝J)Z:A1VspѤ0MSOo2j6E}N(a,[rR{`f=
pW"*-%-$O;Q.UIJ0Uxb0m	meҋQ]Y
Y#_t#|'TIʫ/&⑌0]?,T+%L.naҍ#IUE\6be̔q2Ζqs7^vø^0jm鿞uq."C&CcvVK?ʖKB#jGEI'ΥqPѻ/Xm㘬`W*j
sq)(
氦`K
P+̪*[YQp^2Aɗ I&%IKq,RfȰ(Q<rȓ3r&r>zO}1Oťq)64Y@I˳07W?ng!_1S_.v }v_dAZGEJ]GPK,  S  PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$25.classO@ǿb[Al0]6"CD9fFkڂHE0lrs=/_T@G0H0X,|v[u,tlK٦NmrjVe
cc9U0T[̪RVV3*RUe*թeLP\4LW5G)z2`a+h%dy(?5MF{	g'dϼ;	b4y7Hut4jpFMuxǾ'mxq*l]cI>ۙsGP$<Fv$a^/O63K%?t$%\pEq	s[Vs#HxGVEϋtǩV/eF^Tv4{YQ
a>z_mWni7򸄹<F c>!\c7M(ȘiN3XqҰ(c96ć2Vvx6A#X)Ϡ?XMyh>g@F1w?u\BkB\9Ai<IP>^y|U1VVOq#`ZDEYd PKx]    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$26.class}OPƟ`X"
n1wm$`_њ|
?D?x-g{===_0`P`+jkDwR%5}Ks	iꬮY錘VF,ZlL10akTTXS%vtBf]:YCa2աMEb[nnbj^4Ӗ0GdyUU4#%FG\x'{EOx$$YMOwè/V^mOqΜ+x?:~
v'P4-	{fIX8wXQY*XpxyOH&ʣ<1xJͷޑQA<z aU<A{Z`nT_F/0tDVh{}^- .a4Ș/`ƍzS$2 cpGd\ŭ4,ʘłCsƢ-
	 k{qc,
kP|B&,yh>g@yw˳cv3,B#օք '%isʤt9&*kz g"*bf&PK>/q    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$27.classN@m"\bFc´hh/jw\,ik$$>ehd̙;s~ 8F1J0\?#D-jMl/n40zK9
B3!fs϶]7}
O!~9`6鸎g[`a>Wp3P-pХ̴N=渮3Pc\xB溂q.֜ ÂԱܳ I:]-c狔_Q:q&Bَ$8GY%ՖӖ(N\(-?}E^?\>ZRL:Nq]Gyb_v{ʍ#|}|Wu;/ҭu]I/2`HVTleE➤册2|b&];]tLf~O~`LU0]
Vp`m(i[Hڷ8\ޏm&XQ;?VXX75P@ןU1*&p*.Wq4'PEWǵa+fa,kGMy(M
E, IMsՇL[근$2QJa3	lR3QVPx?<^x ^ǭχ+
Q>˻df^4V`j+{hӇDuД|/PKgǻ  k  PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$28.classmO@ǧppXNyDESs4&6M0DUǙ5mAV$~ _ӻK| 3_ @2V;|#:!&ᛆSݺzRmu׈lQelM1t =aR)S=0t|Y95!,ss:ZqeSQmF
4],BX#)waPosquj[Q+{$H2!䧣h  9wgAL$)MMfq"Hu|4i<]:>£0HP4RW>q\;Ǉѻ,VD40)	Ԗ`\~<gF_#s8ONRJE\+E+x&$T7A7k5ףL4E@U0H/1o/}u;kQSΒVԼHV~Pi/>}UwJP\FÍ<zSI(02Lܑad
r(,,HP`q?187E7$(GHX;HS"&OA>q?&ppZ9{:@0v@3=),A#paB%icI*[g0[[*ΕMi
Nef:PKC    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$29.classooF'K@
I(Mi(w-J^H@+@WƷ=]ld;UyC".R&Y@_2NX	XX9"EIҖLŉSy<b<M
<đ/sܕ	PI ǘG)ET⦎Tzc$ HDn詘~LPs1?u|q*HmsHG*dDzrCzi ;1D$TD%[6gŸހ幮-?oY6pnUٞntUu^
#D/Yޔ֛e5E:f.*~
sTypϫ/ҹMw2#-;0y,c/k|jɧVM:Ht%]=ߌ'.VuKl:8jupzwg/3k#bt.wןEW#]4C9;KI&,}K9N#!_C֞Duq].O[s]tu˸"ߘXÎul@5&.gs|ۚ&.+f`)٤'eM}g~EhյI
hEtpiufS}3	: !nvTV!l;X5a{ǃ[4ȩYIR
PKd    PK    A             4   org/bouncycastle/crypto/ec/CustomNamedCurves$3.classSrVr!
4b;rd]
e0u'SIGH
%s?i}>TGgNIgO :
X@T
X0[nDW{J,zu.[E'
!TmmSWT5
ͦ4F&ӲIVMhfa␖B庼Ҟejii(lIlKM*XbYdפ躀Q=ZgٞakQ<jLa|PAzWD}%IIUcCˌUؾPb^RtꁢʼE?f4e~7pd=1e)ԉzOX@!$.D_PyƠW/{~4ILI/m{uNY?#A4&~|F2eg?I<#;/ծL$qN9p<RIʩI,"~{练=8y5S:>Ҹ7Y">OE|&s_Xq]ė4˝4Z.W!Cg\GsCVH4SN,ƴsx錧߇
'q"LԊE|eE,B)YTɄ.	%ܕpu	U&6$P	KB%ᎄ*0D,/?zmy(n!!M`DwsM`~mrB%/XFwQ\X^j;gs|trK8Ngs}B^Fx>D;8=^q
\kܮ-μA!Jz5Z9Jm~$NGPK'x    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$30.classn0OhaJ:P(K^@)c'BX Vb
iM
n(L%"(>?>Vۧ/ @McksQ䇱bB(}EHS`a?
""rdo)֒R8D(C"IձB\+a%2%8WaF#-9,
|N$#BE9beXF1QZ`Eױ &jql4BaĥEDIMիX)%c#B)%SI%HԄv՘`$q`^ޫo8&iU<BGd2-f9ph=Hd#@7u<It`Ɇl_g镢zϊ<}&UϼʱFxDv[YΝ?|.,fUb}%k>Ols(6EzQH:*\҇÷@Ԃv`Zp]X2Jj묛XѿbfHFOF0vOZ/G1iSֆqӆ0ۆ&p
{Tzƅiwu(\hEyù&̹0gźP<nV(h
4ט`:lg{0-8S a6t>w;؁V`;K`ng>J,۱
=pu`pFT;PKN  o  PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$31.classSo4~vr=V?ұJ؎m
!NMMc&(Ibp*hюD~_<&~ 
bVVB  A##Ppΐ$I$J h#H,HzR1V[*""b"VM`(Oqy,HS%X"µ8Qb"ucM5'I,.Ll"4Z@V0BdSbAiDRJH(ƽ%4Xhc`qF6{Ɗ
o`GJ!&,'
(ME1F"Q  YEb-\8sTp\ɪ5\^ܣǏ]c) V՜NT#wo8<*WyV7Sfu×2V"oә>^ԔCsT7}͎%83ìySsj4OH>k?}ǌstL+Vux۽\w|Ё1{Ӭ[(Ʒw+NѸnKv֣wC˶Q	}9⨜yoI.r׆waރUi!wa	]؂Ap]h.\kÍ V>}y9坢pfuj
^~@ Ϯ|a~V7aiV^{מ9/9uSV|tk@	5D~cKD|~tYPK܃p$    PK    A             5   org/bouncycastle/crypto/ec/CustomNamedCurves$32.classmOPʠX"
}]zh#	 		TcZ"D?x-g9i}eCʕ}Cרp4**(a
PBmfZk:uZnfCs
״,BkޠI4o(
R,JMaXh95MՉ4#OZa+}*@|%IIQ%c~̼ѣ	f^uXKi(0e]6[>Dq Bd/	U_> ,jKK#2=JҨ?xI,]Rt0kT+rБ]fFDQ5E1)`\z{]
6Ô,~,`<N4򿩁^`텁ƭ0g[GQ+LApw_ٕ"
RU1	EV#UHBI4%^KŲ%	sXPQ'N跣wè),m/IX%.Fv
?$>(@B<P=ʧ4=h
|^VOQٮN	(\`꠺^=kgxЕ^`G PKe    PK    A             4   org/bouncycastle/crypto/ec/CustomNamedCurves$4.classmOPʃʃ8dA1H 	$DUcf"ehd{==?~~@G.!b`OҴuptò5TK3Ͱ-۰\r[V]ZlXfVt⺶Hj^sT(KVZŰa.:5fj5>$I9uFz	u)%x^ЄF1P~XI7h<?	#|uR囨Nb5a;}/NZT@l]u_[rG矒P$<aHL~F0w#KSvT>weCړI7I% mm(1&8CG[^Kk#`XD;fY2ЋlՊS}	CGͷT6Gޭ{cPTŜ 1"/xLb
<QJy<,M@sA0Z
V>l8r3h䶼81g
vl5f桥K|̀0@%+~B<u!cH	rq6K;02ifM6x&5EPK~  *  PK    A             4   org/bouncycastle/crypto/ec/CustomNamedCurves$5.classSmOP~.L;Kq]K1ٺ6 Hȧ]hM!+D?xۑhd{yoX#mbi`G+jݮ)ZZRӡ45e5c]꺎:F]2ŤnU5aۯZA+yMPYVz+4UsT^7xa+fŠjV(>ア(C~ļٝtm/X¢@j0?l$j	7Yb<?	#|uK훨xv>'m&{q@K~k9K}2v\OI(3_;qmFv$.?B`ZtǾS'owM
eG*VIZmhX^c'0&ྀ7>zǞZ:LK]${|\d*",gzjͬ!ԣ:
[A?#އRJ{naPHT½Ō%1R^Ǣ	DLS(x11GA0~;6Yr6_,^3\a5ȍ+I3Xr]x<tshXrEDy9΍
\@X8Y#.1_^*AFQD&7\j*CPK,  *  PK    A             4   org/bouncycastle/crypto/ec/CustomNamedCurves$6.classTnT%xakXMF8[Y:&UIHIڕx Y&*x nvw ceTx+e\-2IJh@		93iLB@F]o6)\bXSTNQmRFh:j1]զ4k]l] Ԩ{:ZͶM!
A)pҐttn̴@%-j2ZB&hZ@}&DH!	yR	i$Јf0 q&֑p^/e%>c<M(!'cfEA`Cj1E8f`&:0@3:1Uep?AK93w|ŉr.cs$B{snE8*A|CY+~Q奣|x$D>E3xgYDxE"݋L	gsc!)utD:(oyhwa~OvīK>.>-a%|&zUG]e'KzQws++Qܔ&L\@/Bg]ͨe"6F%?WX=1ڷfFGx~|]E?V0wr^بFNT0RhnUsDq%ܗq;<'2Ȩʉ-c%➌5|!aʍCY^"֏Szmy,~(ӔXan#&AW$j)ehW0!>­\yff;5dӿyPNʝT!I)Ct_:\*Y5 ZGXip5_5^a(	)V_>7'GXjoBSom/]'pGЖ8\XPK!q    PK    A             4   org/bouncycastle/crypto/ec/CustomNamedCurves$7.classmOPeʃʃ8dA֭m0&[@"	yUi;ooHCO70swoh0H101ʚb!U(S֭+eGsqYQe]1ժYru\]Ůfj%蘺^-EaeT˔Sl̒jԊ[Q\+1j5z,˿%qF1	gz;nCνw7xl\/BtuS困iw1a3ύWSSzg֟+}A\{٧8'Y()9ɯn$Qu?(E[:iFR;n$'
#i
0&`\x0螸RRr	~c-Pe廑Ɔ)gc*0'w;՗>z|KEAӏIs?}(nm݃j~/af0'd4{< y!b"1|bD '^&fQl}Eè{ >l(_<Zns0A'CV43.pnx
f/PkHĳkHR4/L\B\:U`0_X)C,_M@#2MV!L'_PKߚ)\  :  PK    A             4   org/bouncycastle/crypto/ec/CustomNamedCurves$8.classUnD>Υ^MB)ZHiln3ؤ^o)"JHxhcGSWxӭx 1vVJ &4g;geF 5j0Uz
ޭ\{5xcqKâa)&ȍ]nc)!4eyVnQ7aMb
EjMBg{I,qA&&tLZamSykYn kyeliɤ`&D԰
r7b.
86xdpCBa!bnQdbWpL6h#":svшpF-8E#7)\)#
8b(p~?"
ih,K`w)ض(DcCB"LmElDe2B!-'
"seS=Qixf
J&^`6+^WҬn8ˋYKW
(TloHuu7/'#2]>_CU|T"d7j1rB:$Jovw5lM,C/>RcnpSOTT9nj\"'^o,vNtII5P¾ou<7%ByI+jSo1ߵr\?4E}Zx|9Uix$+u VaI^@u%%![yx4dMp5h -bi],
Li$ 4kCS'sÜso\.(f}ri*\}d.Øއ>֦eNR*fw}?'#;a}::}7qT)R:K2;'0]Y]ym!|u: w%ȥ0PKHb"  '  PK    A             4   org/bouncycastle/crypto/ec/CustomNamedCurves$9.classkO@XV\".,6n1iHBD>YZv~"?ehd
k93ss9m EyC$b2KsKQYk2VT\,9A
%M3[טkX%\fgǨW-9.5,ۢVReͶ˦ZUlAfPjٶk:5i{VJc~$WUF6A;vv;~	AƃwӸԉ>ACٮ-_5.Q\WG08
$mrOBM9vS|Gr=j >F
ѶȨ$W	f%aW:"A[QIr;NhWIsגZi0km(DQ	c%ܓp_GW~XW
`*_DڏgF:E
zW7S=	AK7T5TE=`n?a<!'9 YCː2&,c2P̒ie<ċ,ʘɢ@0`(}aTFiI
IdW$ 0jL$,ckmwk/1_ O M0 ͥ3[qreŕt1s;}(EĐt;_PKSa3  J  PK    A             2   org/bouncycastle/crypto/ec/CustomNamedCurves.classw|G PB&el I1%6%@iB,I{R/8lIr\ܽ7^>ogߛy;;V| }^!> eZ͖VվRsebWU\'+)՜\y'\n'ꑙpx<!OU=T&XXFQNoZBt6gNNJԪ#{(	nUgm j{壆D)eXP;UI׌Z
23FstÖde03ְ'ƌF)i./s<e.ߘ0]xQSt%
&M&4:Ȧ
]|XlG MPӔ=UG˶
 zii`cRuBa
ƌ̊V6f;q2U:83&yxv)*L3yBMa_)WڪpAVJR9I/=sXKȴa}l}-gXȵrF|pZ^$Nˋi*ˋiy8-/EⴼH"<ٖIEz}&XMȵjBك%Џ'wI2(T&eF}T<dQo[zFHBECv#]o1iAU":ʽJ%]Kt{J,{<5myͬHAg;bW$܊os:YY٧ygg'ĐfWd5`'7?K>}<*|*<_OJ'4:*(	LiCsZRM]Tl:CkpmuhC{.ae:a:tC@*!CXj0]juLf0[9:auXBkGk4phA4 _k5 
jpkp4(РPi0D`7jPA#4(
Fkp7k0Fܢ8
kp4Mܮܩ]ܭKI5(ETdߟ\JScFIӷ8KYѩWəsb{{bŽz'Z䯮]Cӹ&@=EN5kN:| v9FW'Mgfq
IF>?[IƲ%R]47-l8MT7}	O?e҄'Ist$
3ic^YyFm>4Oo^'lՏ|p[SU/fߩk;d3r;\dFeLaT0|J`T12#̨fLcLg0j33ssAp}/E"\_p}/E"\_p}/E"\_p}/E)v{;tåG>';\C_p%Kv
U;b;,B/)v)
[l
az*|m0213:0:2:1:3.d\ĸq	ReW00213d`\Ÿѓыћ
_#чq
dd1lF_F#яg\ȸq= F1QθQ
_uXbOǸ+p`JmUx3c:1qc".
Vskk[[;;{{GG''_|71n/|w8CeK>璘+v+FO/9`eJ˕zNQZԧR_i@iҩJJCJJNS:]iZ3T:KlsU:O|.TXEڕ4GiRz vH[-wNwلUr\:"ь*%*YZIԹvLC&|K-cuxGu?GNѝ.bT<T@JTEi*pazÂhUFbW~T]
Q]epj7"c2nr|{9zAZCGVe*>3iZrSQ4|4㣥L;4Zk>RlzYK(
GPQ`etRj>(7q5PQZu>Dq)⥘^Ɲ-vV
ߩ2@Vʀ:tYNw/4_oK^c;ŗicYl,Rf.1acAr;ׄx	5~g& M8IpA6a
>bZrg>fzr	}a&l$'MDnOܗ>mr
|Ƅ	ɭ39v[o&$LEn/&_2al^r[|ń}	m35n&"7L8Lnopn2Sr8?¸[d
r<-gc]xF[=?+T?'#>8Yҿ Lҿ(\ҿ$+!_8Eҿ"B#ҿ*'Q_X)1_o|B7V	|RNT|Pҿ-0$
	&y8] FkVK(pHLHT,JLlI/ߐc)''	|K{z^Tgiyry.PZiyjQTH8i9Ipi&}"~EѯjQV:nPQ&nQU6ەPS.QW>PzP!QzT1ǕPzR) PKq  O"  PK    A             ,   org/bouncycastle/crypto/ec/ECDecryptor.classu0T7`1q16Pj«9 >p˟\^K~Uvcu*N:Pf"5ZvZW*1FPR3a9Mb&dRN6
/i~,HH(g*r0vQ`A^?0a1XPKr0      PK    A             3   org/bouncycastle/crypto/ec/ECElGamalDecryptor.classTkOA=-뢀gE@R%8,㲰ݭ)B-FO&(.ؤns3W <F\U-dʛiM
[neT ~z垛}t7bkKJlKuΕb5=	/%#T2'7C=N2TR:P
/ôLIBM$f<O8N.-|zcBOcEESBT K7yxXq҈mt+AηlUH.%H%=c>xcS%LIv+7p&V2㥹Z@j-M)ds+Jr[l@Z\7Pgz7iaF.*ΰ>up0ԄJ8B;~bYP-5@R?xT8g
Vl(^}E>O(EKhTМB
X(Cq&-\D
tYmR:\A[k@oqDM4Є>-xC1h"h#maX*]t<W<AͤE"n.B_ՔoC.co9A{/hX)nG7>btZH!yJe:>`&7.װ<Յ<cR*gRwOx
PK]  d  PK    A             3   org/bouncycastle/crypto/ec/ECElGamalEncryptor.classVmSW~$,VZ %*hm!Dz.6fC3523IN&Іiv望ssyw
%|ӎP;4"4]k8JigNʵFdR"iH#Y$sbIIIH?&C^u!<w6b925,3wϒ|yE2_r|Qp\nVCdIs
AZNWقNbP[9/8*I#	(Usp9.맞Z3
O1Bt"ρ5AAyt=I	z%ڰXwxZx\-dTf܊7N@k|ľFa
;ELui_=M}e4BU+&ۓ͓p\m[=˭\ՎBcv S)UPI/MVRqBGu=t㴎3::uqNyth85Wբ:߈>W5d/k_U`UQiR3m.Y0ChzJDa098ZvK?Bְz7wY
DSMQ\{r<whtt|VMi5M'A:|VZR`#cA7q5='|jg&:0a&CILRMJ6c7;0YED``P(
p ]#o >-E(r(Ҋ,H`Q%A3_CF/
\Q\WOz9;Umͳu8i(z(a":'$9eODkCMXϡ~z˱H|DCe1:{UW}Gj?\a#vD;K]?unbm 2
fzMd_*Ak*Z?܂-Cb,fug3*.	El^2=RBe1}`b	MUiu־+MUJ PK(  ~
  PK    A             ,   org/bouncycastle/crypto/ec/ECEncryptor.classu0T7`1b"O@	T^ r˽?\3v5=H4dJq-j%ho])
{7rF
%Ef3:Gp<\*rr*\7~K'"r.vIaIx# ta3E_PK]W      PK    A             1   org/bouncycastle/crypto/ec/ECFixedTransform.classV{SW]ذ.P>G*`m!Rc\nl'gLԤʴus7d 	i2ss~gw xA(0C Xg4mӻKϛOD~veqK1bhrˬ<tLp'J"GUy6e:8yW
Kp;㘶5\=1+,W-,[p"ᥫcBcYa0H^ܪ6n,YZd#gc[.苖%
ܚqՒ'({c3> Z6^nKyWWg¢퉂mSbd!
"Fl*AXCqzΩƎ+%t){.}0DgI/ma/ws)K+v)qn?C}:
ùn>y~m3VqMX"\9#BUPͩ<Hk>*ra&];
P0}(Pi1
(HYF:M4õ7!OėZs깦]x[hE]w-$mmK.W)l'}gLDoX@"7ƻԍ;ݹۻ0Lu};qZ8Bq(޼ba_8.j8kHq]@V75
pK[RbP(>p
erNCHaA;*.sq)XTĚJc/R|bwX
KRdT\BVe/XWK`& _i'OOz˼s(H?I_}gZCc]@Mm2A0S?]\U2x{Ii{3M&`/:y%5jȯ$k~*Hkn*
WhVj¬ZP
Mci
KE4\.Ʋp`"Na<_۸,U^1ɐ,OCPNA<L$Hsd:J
PK(<]  	  PK    A             8   org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.classVkSF="4ypc*iB `&}FdYˀ~MfC˴I>u?m0-x2g{޳we/v?e9w[D3ḛ"ם344t*;=ؼ/h:ggϋgY"5k
P[e%e,)tg޵OBLظ^`\m1.d:#d^ט?MCRB'
tXoAwnN	Ql#@iDέkz36m1ns&6,בp (Qj]uă
3G
PjQ4URdc-!r3qQ2gKyύ%*C5`fZ47`FQJk4[D92#Ϣڮ4iw閳sHJ>"]&x *{lWkfT;UBm2imlpsA^+c8)W2>2>qFY>dqAE$oA\+ߘQ	gl(7<[)[9*AՅJ}9xdB.5Jf 
_f_)[GԮ5oؽυ,oєv إa{ػ裍c$?<$B4QkoPOVlO[I[nJ_mE`00-]LE0q[;*aLEUH8!L0!Uq
*dL	{*L} fSЏ
"DT0+BZ|\0YRǢ0_(CaR
|TpOy&p@㻓ʍ9=gl>,
wF}tzj:'?@v~u(lHxזq)#}ṁ2Et?ӶuD8 
1Ϳ#G56eeNO?uaLrA،-}-e8"ds?H>}+#~ƺexbGX/	
G(XFaCP-X/$ٺI=Zr'IW_n"!PKhs,E  
  PK    A             9   org/bouncycastle/crypto/ec/ECNewRandomnessTransform.classV[SV/E$@4nVc.$֤) !\B0I/|"dɑd?kC˴I:ӟt6x2[#돿
U|_3<%kcsl}A1SVdh+в3Ar+|.i4+a.bt2h'twhs%EBj0ŜtPmlLqX33\=kТ1Ь17ט /=N̜V2tJ;ŵn,9Ԝv=+uI1re{% kpnEYS"bj)`bZ.Lw|CeYWLgHqh0n'WJʞU3eJuK6)'jc6j"EVT*q
Q|ֵ"3{MW4ݡ^SۮZHYwռC9Zvòw]Jsuw(aӛ
wYwӻrjUFqӥF
Ͳ!`^yxIzRSݶ]ʄREV$rI-{RI8%-gD)✈".(⒈EDt	89Snc6eLcӥ#/f^hL][7a;ꪕʙPdzPj4Boq6Om|ͱ}.?SDʑ.Y]
?KY{W8ϯ'ȣ*F&j5jSokFzʗi7pMF/<>ъm(8ܐq2Z0!CƤc^piܔ&n1ͥfdH9͸݂˘pÂ,JЇ%
ܗЏ9|Ap)>r	HpH8ܓJxJBᐔ0)RdZ3@]UJ` ` 4NЗYoKR(N!k'+poxS?z"VCv%@кDGV7ǍM*ZwQ޿oП8vݘ*#twgjaϹ53.z{ɗކ~E4	x)~WУ]|OxK_r0玀&'~@£'{S+y;0RgО{V'e PKEjh  I  PK    A             '   org/bouncycastle/crypto/ec/ECPair.classRM/Q=jZd66BD""BB+cҖџ_`cAB%֏i%:;s=/o>^ ,@eM˕ZYĺTßp_}j1D
7V2vg0z(5iS޼tl2]^38){R#vK)_ƀ Cf뿡%hp0vOwr9˞z,!*P`
)SЇacDh!)0)`*L[<`h6Ū4BO)	Y&^ghH>B|LxC>	3^;g;ۦkyEZ㣘htȷ*KU֭dޝRV+3L\@#Fk0ʮ)1K
{}h^|r7PKʮ  D  PK    A             6   org/bouncycastle/crypto/ec/ECPairFactorTransform.class
0M7A](~bliISPbpv|?%VW&r~,yLsaἑjWRJn7'UpU+-,
/9:3{~A:E0	_PK
      PK    A             0   org/bouncycastle/crypto/ec/ECPairTransform.class
@g4o=Fn%!.)+[uzHux"KS:eEw5BJ-27zETܷJ.ͨ.}s/L`:L
e{՜S.0!0ň>PKJ      PK    A             '   org/bouncycastle/crypto/ec/ECUtil.classRMsA}C
d`B$	hTb*CPUIm6Y;X_!Iѫe@E8U鮹sy%3̔+~dHr0;{mT-l}L#aIkyU:vSiiK鐻mOw[.WHTck^|zC%FڕGYRX{qD2@sIRCu
0
dTI3˭#+dFrH1=ngʴ^oh8M$L fbyI,0C b-4Ь

'2Ow]"rD	O.)E9|z0V;߬[</7j}gAMFPK    PK
      A             "   org/bouncycastle/crypto/encodings/PK    A             9   org/bouncycastle/crypto/encodings/ISO9796d1Encoding.classUs>kqQiʲbbS?[%XyH"Yy%)%63_f2/| Ph'~Й{ΕbH3sy{ιwo ^UR-}*|%ȑCL
DgQ#gIR #d]	
ajtHhb-[ds<Soq4?YHؗ+Nśy7*eo-Cvr%*ri帛V
Tpf.ղŪʨ+%WBk.d:NZFiQśY{qHdgϩzrmR/ByکP:lXôS.^6SݤP
\*%?t!;n>,|8Xf9sFSE49_	mB4cC|<7S)Z
zK|lTssl+:1QRl:?CǮr8kg=}~]ʙۼNNTj,99q豄7}W;Rm4杂7}:%:wx|ÙT``+S6nTkE[W3\*H^tհ[4J:JDl}	RYt8Z*Ye+
!j͙8GXcL
^VmQQЭGA
b4nM UhzNVd:| ?"];%E^Q?F<}E}$.IT7q8r7mF$;d{64xa?L/wvZ#{7` `(4
e8B87|,4po&~l`7N¤&5 0ːf8pᜎ2:^ÌAǐeb8P`pJ:c9ႎQ\1 >Ca~\'Tv9FhkTA]\<:WRЗm*
J/+
~30A;ZuhK!D}^gVKTðD+5TtK!y	c0e%|Q]^E|&bPC
:$h$kl:c	ǉ܂!gŻw# `/os'_;luBmwQٽT>E8{/x66dKxn4=o&>W7m܂U&k1c(JTO~ʙ3i/Z|1&VaJ!^5oRlz,>PV c[
6.>&RmI@3-><Kk5j\+ZR36-.g-
֓@ y*HML}	RMd߹8ԫWӊ|NIe!%xhY726J4#
/I$jfoSh+Ф
I-i_5ns*H/	>`rK}Ԗ-!_]@oKHYu9[XwSR|녣r;
Ill;Q!B]QӨrMu_BA+ĿvV9Gτ<lq-6bn6)~^%36n-un벥~/aXF(	~˘􌜉n꿣_ކJ
I
`O}מ)Ejc
.ݾmMT'n׳Lw^T~y:)(qA~DG̶`jDM]Hj*0	SKU%6~l!T}LA I>a]2
9 ^#4EbDD.*GYE]"ơ9{zjCPKY5J    PK    A             4   org/bouncycastle/crypto/encodings/OAEPEncoding.classVW
H8#06D`Ii[	Xbr['M5q-]hK59=Kڦ[]{ гDP`Ɠ#LGr2s33gp\'k8a"uS@3e/P8z)kORɎVtWoxƱ<挬3:v"3Nqn0MɰeY1鲲Ni5my,Fq|EwȼBn;i&\ϟݭ}v1aOO[Qԭ=! Nr]43Bɴqá@Fh
^m7L;|3u~Io)VWvlL`d-SCkֵT1Rָj&e8k;SVkELZzRЄID-WТfɷɿՋnhntKYVk'}e8DR!ùdf⠑7yc9Ta]Fp,E{gCC ]]z[.XsmP9'la)wt
t#m&hŖڝ6FyMf!H[!;}`:Rrp_Oo~@7v{ΗXtlfqN;Aa(Tcij	/ΰ-ZA)2d&񨌏xLF#2e|)1б빧#M
e=DKlDak7yѴ^9GPlYMa"[@PVrxPmpTͅ#moU{NſKgwE4a_ræ ۪hة~TUጊC8b/DX4"N"	YqDT"b	Tb7*UԲfT19*4x p*v!#0g1),.ȢbS
N$ 
z
xN Sx,YX|ŷ
()x
(8K1<Y8,x>>LpY\aa08F!^}rRB5ן~Vs<M=4ut76ҕP|=G4/O4jHO#eVg!d"1 Jq	X0!ґTcVD>@hy76 d aݩE|'8Sx%ռT2~+<;	o7%PB\YƬ_p=߇pqJ2.oA|6}'i.S8^,_8tT[l~ޗBq~0Rux(߄ށ&#$J"iA
3B.W1-W"P'8+ٺJA='ɯIuib$MD-R{9_hn{)_OD Zi^oM-ok83V=ܸ'NWsKn`9qsGz=MN/%|/!&iؤx^Z	܉ӹE$޹5w^ѐ1#bnkj-	^KX(R
')p<y&=#s`oe/krNRh	mJ$JKnCImPF۞0I*RЙDraMnۉիq5*'$M֢WG5<'DL"m!2&NcEG3ۄ<GflB%LA]JKbM	.0=~-Lhh(hh:ŨiU+^zpH{Uj$qRS_CFS)B"JQdY0yH2%eKZ~IhrfuaC>_㶔ohY(܆Ƌu*}vxoSUۓAFOKPKz    PK    A             5   org/bouncycastle/crypto/encodings/PKCS1Encoding.classVWΰ;#bk%-
	 D
+%.فm	51&o)4ښs/''SC{gEԢ?_>yoAFA[d+cܵۻl OmW<'ND[BE>#eXJt<lL	pOt?uڻ;vEib%ijtfB@P2;6Ri1K8qVcú)26Neww`H%v?@qz;LѮR("cgæ#S	#EZ298l$IV͉eS}ik~PH&t+l#vPV2K٫ڨnfEe?hݯL}SI#)r69AvΏդ\l0,-lf&BMӈM
#J>kI-J&l3cz<ӝiֈg]"VD+:b_҆dqr\5Q2@vLg	KHJ5K&bZJ2\]5L^Ef|'5L׷e'F$eg9wؤ_7ǍHa5Ը4⹛TQW5;=џotOfCo0Wţ5\ZcoѦ~k3i\F1ӭSJLSyG9K?QFl쏤aZSɉ0Vؙ0eDEXVw
\_5⦧'a	HxJBIh*i	Hh.C~^RHC}??a7	<
.6>Rky\GQ=K=|^]aQ
:NR96(,óx^gelghf@)b<
(*؊5-S
5_d؊|W<A;:t0 D	0`0b8͐deH1}8W|8qz&ÄQ 02|>1|>Y)N`ڏ~d^dx[ tGTRրo?Mߢ/!-f|2?'oi]bJ\zX_ٔ
km}ΡTuRmiU!Ю.M|7Zx3B\xbN'ZqGQ(:-/pq:4N #/fqWxݴ$At&Oۯ<C֑ǚ7;Q+:Ǘ;ѩ?6}cb$ ӫ9lc~:5"C{uk7"|"ۘpG^;A"?:"o|?
M|wA(po%T!u|})ކͿV@Dt}5'8oԮdmja:#;B7qzz^
H#]oi/
##Sk3x" ŨQ=q:.Ư, WG[Z9\>mE%S_H;BΦǞm_(Vr}r_uB*I[ē}q-&iUlU1xU{Zo>U=r6RHI;9TS4嚞j='RUKSE1դ6U(d%\K4~8@Nn;
9)}IOulw`S3cg-o
U-cW>H\BjcMpO"wEtG+אVʍ7xxtoq?oFɍl*RoڍPǹAjxI`LK*],*Jhzs
=DEU7&EUT*BR>UyQRUԥ9G@g|͸HFpBw=%4H@庻v o竓?sZYr]Y~._/$D\څٓYyYr-x2&Yv*#peTu['[
HU8Pxώf#SI\ÇMs|%UK#oq!Ktr~5g$|(/PKnN_  W  PK
      A                 org/bouncycastle/crypto/engines/PK    A             6   org/bouncycastle/crypto/engines/AEADBaseEngine$1.classA
0D'*=FTx4~jK&
Ġ'<yO VߵkuZ2A`ZUƦ7Kt58E\7L^ejO;,B"J6#;L|>)~$)Y"< PKUHw      PK    A             @   org/bouncycastle/crypto/engines/AEADBaseEngine$AADOperator.classO1N@%$(LklRtiR]N+Ⱥn$(]J팴?_ ^Ḧ́GBV#T7ͨb>k|a	Z}HX0kvcծFx7j{9޲H2!!y`ᨐ+([ꪡh<58YFX`aln&Ez?cPK:
   @  PK    A             D   org/bouncycastle/crypto/engines/AEADBaseEngine$AADOperatorType.class_kPƟӴMYιmu@o1I@gaf,;,)I*;y#*?J|Ћy~9y/9v^Da%Qq PߟS:M
	а뽱DMWr]Dr	<Ȕ2Uw	'i2[sRfgi6NipʼfIZ*G-۳2W^kh2YY0(,¢XֱcUj_
8&X2QmMR`4,X6YXǖA@`8YIIq")eO9scf_Kxʗkes!ߤ/5ʴsܛA/B'DkDrcp`;7+䂼6<M[A~Qv~^D+1VK2J|X/a
5;̿PKS[  N  PK    A             H   org/bouncycastle/crypto/engines/AEADBaseEngine$AADProcessingBuffer.classN0C@)m
12YxfT
`rk9QTGcx(Ƃtuϯ 8e|'Ӥ:$>1ed˥4mYۅz#senIgvJ3/~GeJG[r(td#"̅y!i*Ӣֲ؜BY5-B40g]UH2]^b;ə.Gh;>}	&ZSucxh_ !:G9qu8o
PKU    PK    A             I   org/bouncycastle/crypto/engines/AEADBaseEngine$BufferedAADProcessor.classT[OAn,X-x
 AHoj$Dxa;en	kL4.?xfw|&{3|̙_ Pd$3(ɬ5p!,^㖤$s(24oО䳍]Q_3>F,CX}?UFpj
Ǔ{IeR8҅(f9[}ojrp*9FTZ4ݱyrz;5't6qCR;]"t?b0cNUqͱTa
;)>-
aC:պۖG1C$^(]'(KG;Oxrڮ(WpL=/t؉q*TSSWGǳ\sfcd#'&h
m4HsGnk"`"hpa91F#ҌJT1iaa<<1&"MJ3%Nӧsct|J*ѽhE\۶.bVyGԉj_skzAhT*Zdd4%l!F1) ($̕o Sg?K^|ALzh6ptWY	H|"2.axG6 $t%fi ᘛ73iK7秛q{jjg<Th-Jߪ"I[P|}rRJnQ:I|E1Dԯ
|ƷPKs	g    PK    A             G   org/bouncycastle/crypto/engines/AEADBaseEngine$CounterAADOperator.classSMo@}IL$p 8!RQ{BB\:4U#)U?uHξ7;3; pĐX~`Xt*M{;;Fީ
󄔵AI澈byͿrgsvq-a?Ep{ch(/~O.$^34j-	)H<
B79<T\^
rNCHn#ڢA2fφB
*]
d#qOǪ5*i0',+9zUbּKEbf<[2PĶ,RLV5G9C(G	Od{6Q׳pK;*	zebt}_!Ru^DWA VC))h4U5P$* o7nQ`idYLc*C
^#M+	[X	odudf]24bFuhlW1hLFg6ޠ3X$49&t߸Ë{Eݧܤԍ"ƃ?PKT$    PK    A             H   org/bouncycastle/crypto/engines/AEADBaseEngine$CounterDataOperator.classSn@}m	HhӔǤ14RTꥎqlK$Ҩ=QUgҊyowv[2Tl nL g_9_kurvݘX<ǥ =,݉D[n8ǁ}o;=ۉx_bV2B`'t:0pI웋&OҥИ='vN<t‒%L/;7'1 E9n|R!8&FU
]#l;b%,;\Jsh$]ZDTmёEFSl(`SG+: c
,xE/P¶FsuNxP\znpN,./p<z?T_N\sFآJ`byqfH*Behfy[
44&HVBTOS4/whSSn~`_7I'Q7В$ ɩ-8ZE)\PT3ʚ
l,E:s䈶b(`<OI9MvTӦ_gDEʰ(J̳PK^-$    PK    A             I   org/bouncycastle/crypto/engines/AEADBaseEngine$DataLimitAADOperator.classT]S@=K?Ҧ"TRji`Й:%]J0Ipg?n:S%&sr !V\k;xTJ}9{c\3ܲ
o=;N <%X	' 3Gg¢T睶3^8&oq?8/Nvof}q83T
Ul].Tn{tk''0$QiB9_?
C#Z?jNPC'|AJ_(L)V+`F,u-]FDmU%3*!bw5Ddd$I(汢a4!	
)I+.jHF(J}<QJ[Cexal<goxРeoi՚#9}9[6xOey0])2ܣ	jl}J0`Lt/KWؼ5C
&"1D"N7hXKiK_|XCJ+|X@*|chb2R/F$KPڳԨ!9&erxMeа8KPK~d    PK    A             E   org/bouncycastle/crypto/engines/AEADBaseEngine$DataLimitCounter.classR]OA=SZڮB2ȇXEFS>j >@Lxd;i?@G"wP7sܹsgϯ ,I}xȘde[rWr<VPo8
Ya*VMWFٝ0D"x7WJOzySv/}BjI1ܰ"dSj?I&GB5ZȆ
"l%~/2KE$QV~ɈSIeap"NQT
_ةnTWE,75+Y7kz8<XBveq=yq3aayYjT]߳Rok(Џ[j,aJ=50i]0>Z
^=2fuDkG)"ڇD^FJ-	%CVk#Z
e:jb#NJnSb]>e1^yβ +*x}̝at㻧X(eN	#x0[Ne)sOyZIt{ӗ^!w\tIE"
 [m,PKf5X    PK    A             J   org/bouncycastle/crypto/engines/AEADBaseEngine$DataLimitDataOperator.classT[S@IrQ.TĒ"Oa[Ф??x6
 >f='M1K~d'.pXHǤmuF@;Bk8a!i}2y!;XƉ嶍1)|nZ
/`X$o[Ax
wCnqy`kiad53!\6|AmjvToN
9r
=ٺ{;t?a͵܎8((GN*cXƈ{2d<'Kq&!L9.F1i=YIS]QBV*&XEOTHR3*ƑOs3aSa
&| ]eV1/@ҕn^T.+'V{}wذ|I'<0	90MEje}Gh!
6N!~42 @Vl_D`J?rN/M_#:29=W9^	4SLgαyp"8厇`HiDjx)ORRtק1uNIPJESآҼM9K*#PKrc    PK    A             A   org/bouncycastle/crypto/engines/AEADBaseEngine$DataOperator.classON@%C?0MIG"KCu9,"κ=k| 8[P<;+
IPx"z$7ftk\HXuFbچ^k^GOx_`3;&@w[~Bopd$Rqd#OA#q.R3[,PK[   B  PK    A             E   org/bouncycastle/crypto/engines/AEADBaseEngine$DataOperatorType.classokPƟMۥ[7uڭVV]Pp(10Yٺ]vYRTw ~(/d$望~Of@ tي[^~R5twqXXZv~TS?UA"Rná{5{i䩀q? =O%IY#P=phNGE(>،yD_M<2x2J#SC?Tiu-LT77XQ<Fc`cXr:t\qY]pNEZe(ກKee%2WB7Ynf(cwD7cbŎ$az 1꿛qab;I4yP$pr~&P6fUʕ|>ktQS5n3/N2bzv2U0V3<l}>jUܘ>D.o̷-[NVx6͘˰ɘ>c!zlC?5<PK    PK    A             M   org/bouncycastle/crypto/engines/AEADBaseEngine$DecryptionFailureCounter.classRMo@};vcHJJ[lE
pl!)(ЍY"l8' r˅K%
9c"nh/i>vv޼__ \
QxW{f̜HFUaHp$3݇Q3"&ⱐM1!1&O8i L[0rIf:Oźn_J[|47x:4ʢ8h&	D"8j㘍",s]\*,J-:ǒC޲[z4܎"i<M-xߺYWɑPw&	 9CQY{@	v>#0Tf\ ƥKN1|op}eQ_]8Γv`Qa?#&
V_xFjcC.U_yoᩤ_6&L;X0lT
ȦjYc̺..aAS
383qڨPKjc    PK    A             G   org/bouncycastle/crypto/engines/AEADBaseEngine$DefaultAADOperator.classSKo@6/&m7  !RQsCu6iԎ'.HE ~b6NrΎ)NJ{*0$ʎVFi8#L8/ԅ;C˛;*5ݎ/ocϝ\`2R-n7[|3ԣJ
)fr$Nn;^OPf -Z($?
Ҧ3Qԉ
jff@HANہ,
dV
R+/5wY9Q٠
Md2]H"fB\[&<͠-3,6"K,/sF~w_[:Q3K3PX6)fDp6Rꩰ>uw;<B@‒ma̲tUW$#~R}D;wB+ 1}33<oc)O6Ji\mo'jsA+S(M+<ZZ@:XT
שf!eޢmSE49PK&    PK    A             H   org/bouncycastle/crypto/engines/AEADBaseEngine$DefaultDataOperator.classSMo@}ˇ
i(hӔ14cH©*,^*z6jQUg#5Yy3of
 Tl
$@y?`WWǜ9<]qW0䮿2]N(ft\&&Sf߳-'3t]+!׳0zk1$al>v30HaRe-5BQ#K1{x1/Jv6!+r6;*r*4
gd0	)Ka=YIv)<[(#Mu<FFFU<yPF|Y6^0ޫ̩!OQ^ }y<89a(OKb5<G*`+b{DG4hZ0Zw8|2hLFVב[0nvE$@+%Rhޔzc'S@Qr܊*{2ZylDF$H4*SZjߡ}SdI6FѨ*L:];xPK̓A    PK    A             I   org/bouncycastle/crypto/engines/AEADBaseEngine$ErasableOutputStream.classPJ@}{3^\NE<$l6q{n X~&X(83f0~ pC0_0ۄacYʝ3:ͽϕ.8|ORTZ$^5nոkgH>2hS\7hi]M0iAYgE"-e=fHG8ʌ2ac"R}72KȤ,N=/B'nשG>Fo
+}+vFsla_PKs   q  PK    A             J   org/bouncycastle/crypto/engines/AEADBaseEngine$ImmediateAADProcessor.classTMSA}C>! AA!!QSUpfHTvCFxB?ʲg78$UtO)|xZOs9Ip[s(38o=ʤ뻻n|T-;i^~;(j;bT'0N){Q0bl^2e8%Lpe^:;OYLpĠ]=;G.YK.ER
?djdުm,zXI0LeiYaCZ҅mѸ3f4HRVh;rh?ZvIS3B WХ[=Q}4c7#oh:I}lhG;F^i!".*:xVbfTҌIaaY1&nR)i):Mεd zn8^5gT-k+)Y5^QWxuCU0irKP"'^pb>O7p勉S̟⥄:Ltãg<x5s#,lqKLS	?a՞ca˟kԚukzFϱxvp5
?2މ`#>@Qa[w}::K}01rI,E!K'2PKOe    PK    A             I   org/bouncycastle/crypto/engines/AEADBaseEngine$ProcessingBufferType.classQMO@MNB8@H!1Vz\%22ku @HEGUgrK%7oyfW _7w
MKq?BcR<<;:NJT_@%S2UeLnt#+d''"`HF
MJB:Ci{39FOG7*O
aa´'(	|k~Ў`J\	U,2,1,ۨf[?؍nM*uz.!J4FIZjXt0K}L="^\T8x&7-Q[Xo՟P罗0PzD*v&	,+/XeZZG[BJIPKkŔ    PK    A             :   org/bouncycastle/crypto/engines/AEADBaseEngine$State.classmOPCu&(
R_&02?$J4Y	+c& Oϒ~/si񋈺	27}j/8Ti1]q\΁#@C7acl
Wfa?eܔN{tO'\bݓEdd{
_P|g\o1K-'#7G'aیddd%qp4B;};G8Lms=ʂam&K'@ 32PLj,hk?O۶h,ѺEu`9`h@0S6m px l6x<=uw'|I~Cr8'Hi
*c
Y7nqivf!_(/Mj!p.mΕB,U|'K Ut׵kM׺6!TOE6;YNO3"_߅hszv%e/PSiZUWl)ϗ<Sy@PڦPK"  0  PK    A             F   org/bouncycastle/crypto/engines/AEADBaseEngine$StreamAADOperator.class[kAlvsY{I[Zk&v}IE̦y Ou[nTgAASP3K3ߙsa~<fD_3Xo:8x0
rB9㌵PiLD{nR$}`pxcOD0k>W.plvBrKւm
Dw#JK1\4o塌͒VJІ,~ V2Aсe+03eXs`EHZ&n=#o䎑#ws#[
Qyn'l
Rfv	mKMz6,&EҩyjG98#:%7(glg]"[[d9MИAdMŜ&}?=E<QH7>N
UڦVmVG4c7PK    PK    A             I   org/bouncycastle/crypto/engines/AEADBaseEngine$StreamCipherOperator.classTmSU~.dei)e[/4`kRм`E:\BdtpNiKVsw7 ȗ$Ϲ{s~u|JL=\gP\QJDѓ*IZmʍM)TBDn֬;h#?(7rdmwV=Q~T.'ppZjڏCܪ0xB,<eU8hPMu2xޥ\<thX폚v5l[N;n]v6ª,ᤳB;b{saVfY8Nͪڻf1rKmwGkZ{>_[R_[~~q^Kw\jBU##
acayݫ9*T\V1M**Loxbo2zt9Qk^(X<;ݳs(ﶉ赴JJ~`@ftct\
uH x1JpM\!>0CJ\C0X$+!'!]A4ǇƹWF7+rN_hY׹I\^m(hNw4G_џʮЗ5BUK-iW<@Kq7_?mfBI|X(Ѥr;S^E7Bk)Q$|/(mp5P.)#,15
qDn*ۇEPj[1D?AHF_17h{}8>W%
t~hֈդ(F4uA3j(
v~PK~;~l?ܪJFVGaQLZFP3QP+qZΥ⧛iR?Gtp kc	"$Sp[рyaxtzQ'&S/QznAzDM;icʋPK$    PK    A             G   org/bouncycastle/crypto/engines/AEADBaseEngine$StreamDataOperator.classS[OAn[V-pۢ,7-	`Pn33?I$Q3ۚHdsη9s_~ XD!+0ĝQS+Uw*m~7kx#"yQb|(Hy{5gjJQ>>kBIhܦ2G=w<[#i6C̈́Vfx\p=yС+ōW˽%LBrJ˒+^n4+-?f(Xw=WDSB	T\рispBjj,3n2Cǔ#:Ngwl"mcm`6Raab6oc 	Y)rg~ȧ+Ici<4L}3iB׹Rf/B\c$*r0>d̀L\t)BQ1
X(|s<>)~|Pk͢Eʋu
_1kk㴰Hf~g&4~Kg}1\GSad*Lv!m/ŕXSv]䴣X#&hidWi9EPK7ٜe    PK    A             4   org/bouncycastle/crypto/engines/AEADBaseEngine.classX	|յ?73e !	{ DS$̗d`23ĪZ*u)qIU(ۊRwm=}
-ݙ&x}ss=sϽw~gNrSdPdȔ!K\e(ade0yT{{#sy#nͮh}m_tٻA;)ξ{nvN"!ͥ4+{>n-Zwo$ٽ^4G;4fI6&^ewq$ޫ]=}yTRx(P]aoj1.prtA{:jJc.lO/u*mt%k%H+k#n"XqTz^(K.&V>mtui&#y=zҠjU52Sz#75|X#9wjr52(vcvĈWtSm=CW[[ga=vZx
[f\7Z6wE|.Tl%-CѲMQU/UK,^ʒTv-3VVP%SvpOf	 5|8H}. \{rx!'oҝYjZ96ˍ8_=sa#}?
;ⳙ%M~`/=Nw&ˣN_ r|HmxQoF:<gl+KeH\F6µͥPaͽ];PX<ip5l0kTn+>3WX
F;be?zP vc^6zѣED6<C+b>7FEG3C^WLpF(=n늣;_>ӫ5T>«+^֍f#d/)v0mȊslRØs
[:wk.pxn
/sS_(I޻K$sMބ7H}
л+kbu}=A,sW@4BŤ4i}"۴ne[d&t2nju(^B'q k&wWE֥Fa1AJa>X48iF<Ԑ&0JU"l9҅Qr;Rq$#
	Oid	\uZb\åjHKPsyHjO5Bƾ:./BjN"q\ڛ:{{loR5fWiyZcgmb4I~]~<ĵeh{~I7"Sw3T/~3Zp5ӕ$"8ZWy&e'X|vbCТEKh_bfqGLj=WT!t	m[klWH{*ҺڲOz oOnz;x<eȑ!O2\-W%  ^	$K	n+&W%];$SIu	!7%wIm	;|WI}	~ =P{%>	~,< !	~"<8.E/ހ
 >>렚TՌ?"QG0Lř$LUϡ(XP *J'!ťΉ⅁b^}QigᗗNo|/\lIiEJh۲ɇJR>ҊFէ*9BjHYKW!e5NvjUʪ$T],'"D%w^Ov&i0RT羄lGL"@F
T$"OGpM_&hj@H U
<
F{6?(Q{T,&XB`r5_" zO!
4%E*8LW!@7C>(\Nf*Y
4l`O\FSO|R#
hRYF4W6+A@?
?(>#)Γ؟2,ci&3A:@"	2(Y9y6+3}f%Jp4BE%3,kISlNYVxNuXl~6Xyb>CɊ&C0`A%
UU	T%%#'lVxmkA&&[l[
c6U!x=
T}
ɜV$(%(#bO
l9VN<r)
 XJl
	,$
		' 9z|
44Ix)HOJĿFlס$Vs&1m_/zkG|&y+P勵 {<OQמMj`;
/M.H$Λ5,60SB@SV
Z%MbFAO>_2A
ٚSLݜb6ȑ00vK!
(r}qX
nЏQ^BX#t1ޅ>ؽsPt_{G[iIըozw&M;up4|\e)̈́?b}RBm
-wm=ϵy0&
av`N٤\aٯxؤ~0e΀yizPYnb--f>~>>ƢF	!:X|2'ɳ`afI׺5TGIrgrt]r'IV0h=<ne7:!(; ©0ǻ5hh#sȁc3 j"oR12b+d_ %:(|"	0kL/H9cfւ
ے Gi"EZGb{!OI{3'DXKCzL˦g iPVvmmX9<sx= >2^gGeo `X:rNƖ}Oc.IcOC!J+șiR	 n)em\_^bao8`#C=s<Xl
1Gl:Lo%~ӈ}	yB-os-?bؖYI܎&0b\ȴpX؂s;w7)j'E(u
7usᖶD{>j4XE6'}z=_Ȳg+
f+,6n"pehmqo/cOA4W
W0.ũdKe%%HTfC|)pLF:{h!_S]iF.MeW2ʾhAx͌=6sG5ʹk|;&<Ǝh,6v%jC\CfҸbqqf{ZދwE+ AЎ_Nf>4o|<{uox.*AٍC[H9d06,H?9MtZs#砑ĢThK	et%H;*-6K9JJbqKdimmm3
r1v$
*3lA*%]);0li]f
͇aFq	d'!䄼\\TMZ|oxIBB&ҏn'r4`b$݀ዦTF7REWGa}TW.ZAmrL]	in:lɃb{yd^Ƀ"xD*ݴ5ѩDg0ݢsdK,F;@9<F+LJV~`]Q+Vs<kW vlHEs[:*x6CuδTtqZ.kUIvn4y<|
UlUwp x;e 8ƺ𱻇}0N;ptTx H83m港KA>Ә<`݌
z0-Oީ=Ż9zU)&~Dg;W:(cD0Rp_mݬg,3~j4\ѤLi˔WL3a0aDVWo7`H_βn
pavqC\!fMmk@sn~ۄ%/ډw|_.~;b0R6uN%=$Jf^_-~W&0.O%i<xY](䄱p.(.(;mpa_>pCGk.&<=3n(5eԄt*߼I$
&:q[kş+r:z6lG]cqq-;b7KrA>HaT!ZLj';3eiKl5\c0J|5&AOmLSylA3S造O}G}%-W6.7#[N~x_7jQec+HXyvǉY#=
49/PoWHF<ҿ@>Ez!}	G
CaGH_8PK^a  E/  PK    A             /   org/bouncycastle/crypto/engines/AESEngine.classwXUǷg PQbł;QQ+{{=ILݨ1FM{ך9#wsyy3gg'?+aAC{#}	Sw
C%1!4%'gCdpR4"(2lbbٳޮ]ssC۷'ZM͛ýիÃkoaaڵUq˖[ҥE&eK%KZEځ/ 87ɓfx+x>}Ç_oA~;
3~~P׷{6ͯ7?_J6[~PĉQPRP	P\rhXH{h|4hRhI288Z80Z(><ϟ.\
\jB~a'D S..^\

5AA` ,ڕuwel+ʖqj+mƙS`VUjSs`mڭ֦.+@sǱqܪ-aGDGD%V;;J&c:EbbdTxtT=3Bmפvxc͚ݒ[`sA18k; E.\LJtJL(w6iڠ:>֤slRtd@=>=1=Ι$
%v;4*{Q1xkK<K=7?zgvzуB:6G$G%"=kؘϱF#{%VE{Eώ5tMTlgf'{=><y[JtX|Vn
»QTR!D+E's]Pe};5LM8gb:$uÒ96O`CcE%&FkDFc\qu,/xs>1Ryw	^8:<SaGrUS;:)<J|n"Ȟ&8]+$ UMcۣ?kvhlѭ(I1$%HJrcY_XxLK`l|bb"zG'`b7
ʚ{DE;Etv멹Y1~u{R/_tGHR"4O(OG5?=ѝq(;@]8jCrw6MNCYBaҩ34W'aU{c0O7%)V
J:S/.6#h	v<iQ'tǖB1WU/ ?	E}B`An0dHnIs6z73_FD_
#{FeQo0jx0FXv.cz~
c/̆qw~U9L;`[ab\MxY$Lqj$L><L1^S055L6%$܃is'`zۼeaƯ{L5`Y`θ07aΩv]`nb}{gEפP	?iQ
`QpX4cFIX~Ϩ9LV_[	upL~g|bҤ2bvXY\,}eXX=qb9Xyd'W<uz$ߴ(l5+l~M
3`K3aKtE:.tl͙Swvvd/pvt=??/\ JI
kÞyrao`_.?AmR`c	prAp㢒pp۶pҗWd#c߭#[vouT6V:+kP{۲%̖oNd
N֬9N^-z|aC_8U(8UH8ցj

~߹3
`O!$d>jm`.x#cGW-TL8kW,mwן

\,п\pi/Ҿ}rXipy~;\]{2\y|7\ݻ7-\[w:\3/\Sg*\luN={"fȍpsp]}p6pۨ۶?XQ~|Ӻ3ljUܻo~ifn-6'¯UՂl6	Z߂yW'	YS
hpԘ,[,O/o
ϊl
5Z3ek
«uS}MfkG.4tp7޷>,:9>,^>Mn?g?`$>phkapzv8x\͑bNҽ-Xϟw{r[<
O7/澽<'j^
Ogރ/ͧQ׿w6)z^^`Qo0Z绁|7`fno>Li? unD@5&o?Ǐwodz`f3!{vn]ޡݻ!P#{cYΐ3[3ZǄՐo+ۙY w=~;3~eț5kY[`0^Eݬ
?>W7ʒ7
4x '(T-~0~9)" L]z檔޻w~	ś_ĀyL(A"sG(*/P֭KP&SBP(1c([(+(7kq(w(!C XTp6**%<m
sΐPeGZb?|P1PfP|^PPc`PsPoA-~V
}ҥGAŠvˍס3#L'PAB2e⡞%i=;}z0{5hPl"4o
!
?oD^hth|dhb2 B:MM	fŊEBü?C#G@_AgAXR1v\hfh};h)9CCRe
A%@ʋAоx>۾СPȑ*D<"ϝ3t̙:t\p:
=Qu{.%A׊-fA
7AW_}
;Ξ1sC̏?ܹ@O.N9ti%t+@|B!p֌8
$._^I\=U=\Y=l	=_BC32CחCRƍww+oQڵ:`@0U0&zu~6&Ydbas,lͳba,l-0x-Ž~vqPGL.k3Vn>2Sow*R_{Qu[#;S orLi!x}䳪]gY
a,$U$=X_+IgeX[+YHbXŒ'YCuq,H+V6ud0blkeH֒t1H[@#FVAu=݌F/$}H#O2d  w1hgLq7ړ$If4w#NDG:dL%$%F2dH$HƓLt7FcnDHx	.k><&Yxt}Dr88)&1YTBTh{XHo+FՈBˁϴ#ʽ/3<צ_i,q fͰ<2噟τYg:Y'Uvt,hi^`~1+skF4dK8k6kZ8*kfPߩ_r?~RzW1[O0;
v/'t9>$T}Rµ U'>̺Nd4-)0WU*B&=<w̰Y;9	[Y[1emN(,Dq+r9'y`7%<dN6KH
`W*;\l]ln!N6wᾘQald,;EJ<)]EYl.j$St,Sx5cu?.\nߵ2^` )Ob4udy|39+`?թ=T
ܒ5;|Q/!"}F
lVṐ,q4aF7OLe V*cOeO*<CmN6o7v_{}y/EǽtKxSYK7'bYlRŘ?6ڇ-Kf]l. ,Ep)f8cSP{g,pr0FenY%n1|dl1ZsN{?bpcYju;d"CH}O8S{1y7,l#ɑ3|	f
i@]ב.o7V[Na;|8naبRAP\0x7fx(_e?Fm.vo1o10vo5-gXXW Zz4F8}zNcgیExXFy6]93(	;GDgm<)嬣d/3z;<Q^iBM}BD.0vc~SԺafxYL/hs ۍm˱[)3Z+VxVoCWӧ3GC{%-/\Ց+YՑM'B^tQй)tS+rɘos' #EQؒLUVDi*S4qyg{i
N0j
'm0<	F*Dj0<
6ԓ^~U`_
?
+m06߇+m0G߄psMtvɸλO{^]ٮsQU|*}
&(
E7oA}ePݩ/chN^x|zN/H&&kJ{l<#W<R	v͍)٘0#kL3SBkd>85u$>S~+RjJW%<uש]:J),%lNIRҝ͎uR攴,%i %:KI78YJ:KIRҮ2PϏYJjbOw$tӧ#&3aK'}~J)=%-rR&6߇-
rR&:lߏ	?pfϲ#UNw~,!ݤ~ˠ'i:o
og/sz.> "Hc>at`,Ӧ?N;
sBÜE074"aEĢZ7!P%VzBDɨ8*E
MfP3?P3YObX/fKPx j؎CG)yPE%<OԼj(O,E/'DwԂ"j!QP\a"3jI15ZZeZVB-'nVyQ+MDjeZEA*
VՅj
ZSD%~-Pufz"j}3jQ5DEm(6?6&j@m*ޡ6QV-D0-jK(ZAm#꡶-PۉPۋQ*5RTCEqNbjgQ5JFUD
Q1"5V@PŨ2j(&&y=DiԞj/؆G\F+r2@<C(ΆA4`a%KlxH6T#&f
FLd#Qb9h1l@6VDmƋ,dDDўlL6YMWɦdD~b"1lI6K<&-vdD[,E\![ n-d;Qlp![&"[.ZVV5dE5bZ1lC^& ~!(m6nd[86рlXICDvd=NW!'֑d.!(DvD}#[Ȏd}IHNvJ%;-cȾɾqd?dgVEGdp/./"(IvY4'"v]ɮdEVb>MqxEv[$YQdw%{b</b*}1WA8CH4%{,~7cɞdO(gOB#{)):U^YdoDA@^}>9ӘFB9G)B	VYSZg?Gew<h={)\PyOgŞ2=Ɋ=s{(Of4zF(PSMB
=*|WgBO1e
=zr)TPySOgBBOU7
=zzh#{
),TsCIO+E
>|)QA'O+
>
>|:+Tɨ
>|(|)LVV#@4TyHgeE>6E>}+S3TgEErDX=
>?*+s Ugf
>.
>+P|N*TR&8+TYسCQ>?3ZFOYI=>=U4zB4z:i\y3CFw=g4z٢so虮ѳF'Q'F/=k5zJj蹭ZF}$=1=4zhjtɪѓOQ==5z:hxiɬѳOOFO3=u5zj3[F=4zNkyѓ]F
=#5z,=4zjl15zFOFO^A=5zii3PgFd<:O{5bfOA͞=}4{R4{h왫f͞=4{kɯBgfq͞4{vkDgfOfO&͞ F ]==5zk蹥ѓA'BFOFOD\m{8999[B;!	!TFB
!wC;Ѩ8h9:Sgz
zڢwbOĹVѧd}tÄ́-3PT_?N'C6~;`[bb,fAi.&uA=0R@)fSYo֥|ӍoVzjI٨fjDM7SM_35J63RͯP.Zfff1Ԝj.!WfMfE<f^Լf@k|ff) 3jߟ(h6F-dVG-lC-b@-jVC-fC-nF-a@-izPKPKQ˘Q˚2Ԋ/j%YiEj6Afn[aJԚ&MZfnԯ\MTu:uMSPfYf#ghhDmd66&C¦Ek&9
Bsɻ;Lh-%!k%
z%m$m+y$Z;iгK.h$o!:Hɩvi$;JI:KN%b.OE*hкI-FrrB'ZwGKN(AhFKF4prOB%9
VoiHWI~[H m4ʇ$
"Og!_$*ysa#.y? )
?Q'Nc%|K~|eL=od'K^|4ZOFQihA>]3$J>S YG>[rկ9A>WIޒ|;SQ|俓/FfE$_,.%J>|4ʒ/
i|ERWIKZk$SX+ٯ$|d7H~|7I#fȷHJnhi"&y7#!3N|nO^Ɏ~7AIi-
U>,G$?J	G%K~L&qUNHCdȿ )COK^d;ɿL%<9+y%{F5I>/Hdj</I#e_$Uΐ_FV뒫ݐ\盒rK%%I~GrҨJ~OH}]<MruCiHQ䏥рwi4!C2HޟdɟIu_Hj)ji#+wy^!$W(C|-II%G^Hv)9!Sxbd/Q.tF&¦}&pJ~)PBD/(]zKv)
'§4(AR-'J*}D̒F!d}%"JN<Tr[6L%G4'4S9A%"sKNy94y%J*Y~iM$Od6%Fl|;UDWiV_)&n!JFAe%N|qV+Z~#JHk%&J8XYrN(JUɻp%CĕP\CrbkMiUKD]nv%Mܕ:W4$֗9Wi_i^	?%JV"0wlT	|L].	\_ئjW4&pGM`ڌD/ۢk/{kxi&+Y4w+SFa߃5i2߅e5o*ފoIߵs4)7|\_iEz)@_]pwtw/38qQ߂}i5y?:[_W_CwF_vAnq/q7/o	Ok򓚿/okF/Ϫ횿Fn_LFS__C?e5
FX_D(k9;pkib/;{+{쑃]k8WhK5M7q𷵃5Zj5j:{ApW:{Xehh_Ds_5yg_#/_v9g'_#Qy쐃/5j/Ni5*F-_!S+dPK#%  C  PK    A             3   org/bouncycastle/crypto/engines/AESFastEngine.classtYUO!;:w!@ $}pw{iޑW;w}wZYsNuwթsٿr֝6-{
zwA=z|Ĉnb\w012&0SgڱL;1f3KYя0g|X|KZ<ƚX~
N͆m\֭a驱ػiS4YGʖkuzΝ-qBxlYe<Z4׫OV(
lĳFx[|?>͞ _mݻ7apx1\ |v7b|
?x?~	~c ɗ/H	O ;2?}Y'΋FB^'
߹sE޽^oF92ŋGBcFb\`G?UgoM@9cP?o04ؽ{
훁)RCЅ
IZ;~iBӥiVBlåK9s]tː:zdTEmn[W6m䶭0lH
=}%D1GZ]7(Q^wŐv3nvg`BaQEB(^aKD"$ehxHfhPXhͯD(_4XL谺Ӱ<u!]RQ	r1[9̓7EШYꁵ5ZED5O1$2EːB"CY#{ޑ׮&4%OSAڅsr5B#Ci+UHp"Bã:pjGviU","
!jYw$4"ܰyZDEqZ<eѪm?SʮݒaAx='[.6|cjtde
[vQ)EhɈHѡUD$߈a׌R:yhG4ifұEj]P$O/uC)dE)0l[u2HAa#[F
	*98$Ո|l:$QѡaC"y;aim19[LÖ:"ef]:kDdS]2]+9e)cbxGҡzHP<FJ0YӧBlR!-âjdDȨАqlt2|׊

idџUt4Ojlc\w2#Ȑ!|ѡUhCt3=nn7Gz7OޥEѻѬei=dH]xWBO'ЧW>Zu},<>_FxOo}7G۳g3w_f>(~Dؙ7w<8&-~;eA5?s$_f,QuBGa@?b@0 :P).aa@40`С10֓@:0M6,Nv ,WKu A>K*$A<AǠ08fܺRb98~<lt<KW`k0{R17ѭ1xbyCc)|LINCF90Tu~5p<|Ja3İ.]^@{`8F
S1M1e`1ܣaD7Fp7F\#U2#㾯Ȯ]_H4s^&:
~)Q(fp15ۀѹRvna4vsTFZ}n1Ř`p^ccxc%1FX[tX~*vc\˃"Z<nEs+rٿLVbwo+X3?`|E1\~g̎L0!ַ☐cL`r	:<1aX/&\Wcb91:&6NW `1M;&>[TTg$L*3b&U;x檆I<I츀09QiLN&gZ7<>&T	S2)u6Eb
pALn	<vSm?S`ֺS/VOM༎,a4Lcӎ7ii?li?owMz7`zTC'.L?S
[	cQcH4f>3
d5&}b6Le&frE1M)03/섙w7Y?lYiwh^j؉Y<Y;{7¬Gb`v1֫lnt7f39'}?#f?Zs2j9cNYS~:氉9wB`nkAgwme.r03/{tW}U5:>=
z]w0oobi/̏hXkяb>}aE1I=ł7bA͛`v^zx,b!6l5ۏc_hXx,dEEX
,",cժbqWY`៱s͚X,a,r>KZ%._%'KEX7,eK׬6-_4ojaY6XV2,"#˘ccX=GZ`y_cy懱]dXb9>=?֮EOV`EǫW1+	V+޶툕"ױ2NXY8y,J$MPV~
**$(VE_cjX:Vg[aX&V(O_KVƚ]aM籦?t9,c͍VXJk{X^br^{kY	by~8ua]-8B$8.a}C73a$6d^l`
o l`X᧙w_9Ϸ;iFld,F6)69M,ڰm+w61^
#}؜<l~q[:mnfZl>]6_5l-鮷ǖ"[a>l	=\SQ[C&Fߊʀci?cύa[ݰ-49}^؆mLMl;0])ݧJT>lMlӸ1ljfcGе~,v&*N<vMDvn+ߡrev=s}zܵ-ms`71fn4fn mas4t:}{=ra{~2o4L7`/(2ta/{>3:%}ٞ<3ǯ>jcjKohƝ`X$)3$a?ǁ[8q- 8pXFL}]dd .A6q6830Cmd{8DO!6\}LpBp}>2$GRmʃ#-eqM0EU``]8TGpM"~2`Ͳ`>ǘLc!`J8KANqf8l7q}9-N}'zT	&8AĻp2n.87NX_ '䒖-qM0/=ơ abBS#8EO)wf08݉a8Ӵ8}wO'Yn}Йp	`?q'Zhgпqgm82.wgYgp
giqig'L9=8 s;[96q>?|Ē,8ncNgy^g@yIgLhGB[U nM\`s<x CSq.2Z"t>.K{S`DaKƸ&.k?޾
43	Q\e6X	'Jȉ׸B
*0*
;\-xXڱm[Ap^*񇫴p9ZֆcpA¬"wD\o%3UC6\gV&	k
nt]7
Xnp3nDa,|n'bpa7>n*Tg	X	0[Cܢ$_s'n6mRfmN%nIpǬ	@Lθqqw8ܡ? ܭ3*92˙]҂$ڌ{##q*N=`>D߾~Oxtϊ>ӂXeлzŃoK{_$uٵ(4Lϴj0LX-CF#</Kt/և%WmM0IQxxfEG1z),<b v1W<fƂǌPxLoG5T9Iu=LO<x>iaxxʔOI/po)`:gS:u`2AwglWǏ`f)W֑ ~%m+	݃Rsx
ϟ/]syg$ǋ
xQg@B`R\ox
^_xvA%md
X%^^w5>W)#^xK z	ꅃ"j,~y;	&=0ohvގ
oY(+Gwzhgmޱ;gȸ`	w,{.?ӂ̒WДE52>0|l@Srr|5聏K?ǧcS=->M|+ܷgO|f}ϬGNlS
_JJVKk0zO/lk}i7_Y+4|eJKڟ[)ZqfYb-ˀ(pG
OSӴ;0pu̶d_ND'g:`I,Ma=7{`Н_@N/68r
@+h=CGd{wE|9d}
~'q + rZWUk!p
9/AJ 6`1 nppa#'1bČ6b	=db9q~kZw=?5~#Č/)bƊ 6b"f'1X`ݴ!'_`ߏX_ka5sUb$C,.?x.p1PD/0xto /#vdqWl0 صEluXVܸ+|G5XKbٿ O8qRBdہ8`q8L;Olƀ'ID$<+u0
By*jTm`/Ԥ q9O7}!0<	κ؋2&2F\F
x//G;v x'L/Q/^ȓ\`/EKx,b 9?k~Oo>'${?1?f@0?'BH {z 	*kpq0aLHd	'郄+2#!8xjBDDHTlp ~J|$N7Jă[WBi{#1Ӑ5({$ɏiW0|Ef`fpx`U\&-|%EҊf"iutf~\'6q,YT+X 1EERfLB}"9$'̐)5)HJ)ݎ<!R,E>),R.l
)Y#TJ 1{/ej*TD1R.E3 *wR>"5|Z:4,IS.tS97Ț<i*.`BC7`Ϳ?nd9HRkHKS+H˒
8HJ(ϒ
Llҁ932s&1EU;#}@#򅐞/\Ȑz7d(9#Ȁ#)Su)2 +CȘfOd̑(Q`/#&GeZ1B>LDE&z
2e̓Lo2<3׍Bi~R<,?."K%o`#X2CӦ!˖fmg@ּi
;->O]~d#w-[+LZ6Llhdc:o a܇	={Ӫ+;XWDGn)p2"Gf5W?arZ;,SEp&DΜkw	lDNs `wq@L\5EC\-j!WIMLNUfps'BܭS"7kZ]"}yn p̝4	yv<G6!/WVpr 1
I^|CsoĉȷJdwς!"	iʁ)`G8 vm	/t`GVDb"/&x6JC=֣`QE` 
NY~,CA֑`eyӃ'
QPRO6
К]Q
3$peWa^9nNGa`|J"E@Sڀ"(0q&%,RhўQZ`(ߵEWD c)F1r$Ŗ߬(^>Y#lo(d
.y,Jp0(QA4R
*,PFɒUƯ`$3)(8P^R*58
SEUW
lRDCOtFi0G\J?Z
e?
(ӳf3U-<TeF̛2;TFY=`
rQ#(۵QĹBYw(GBr/4
ʵ
ʁ9Gpkk[(ϵEc
t
+'OByVPa
0  4`X(@y#Pԩ ~(K'^S[;ֻࡊJ?GT"IQs`NVi^%T:qX+?@S/rFeT^z&%QeBFUL?tY?UmUA9wB8'[<l"s#Y}TeD`*.z]
PiXKWRmrjv$T{`W$B~UGMﻡcQ5j,|JB=^
6{GM+X|F~BfezȈc6 D-F<}	%PEe`j$E- S0j3YhlG	FK{%}:EqH	ٿ(Fݺnr@dtP]ݳg
MPxWoc05K ^=Իyf:D}&?_3	êDzcyx}08VРƧD_hil4lJ
Eˊ}=7Do"@F[FY;{Fhw,r5W4b-,|И7~_64ah̊&04i6v~{MܹhJ )htl*6VAA{!n69
Bũtm0KzJ

j́f/D
恍ffƱfCp0l#~qo3Ӝhrj[^s4?~
XZ\*%k.^
!!GW!$| ʮ]`+:]-&ABǗ<by#`Zsв%hie0M
Z;ekzT]ιѪh~
XხQ
=
ǝF-[^(|e@khͰ;Z>	k6$ڴm<6D΢ml+:ˁt ",z-k(m{ev\md8wE3gvm7ۂ@>sA~m-8!`g!pp{ClȊyqc
"d9vDߺ<v,lG0CvFݒ)[nchwP;0Qȏў^C-鮣
^{p4s`謂HnDFޛVi0^EC!jGtX,:w_ R(vFpH	NlD!#*~4ѫ*w&D_
<o#3k0A)LPx|tzux#'ꃘNetl
`-iƍtP'tfF`Rѹekإ^gtrxEcף5kz2\}v]nX~[Lx
+]@כ7ƨntV*8ݎ^
CEнO~:t~} ,{уegF'u``TiD/z>ysP_3k0*5Ekע׵kC\~. m6eMs٦l\.m˶e[-qٖl\MP#a7ao=*Xq5}Jrϟ&k9SLw3rlMV,Fn.a~bzzY%mm-6YD1kŬ&fmClmCr7pƈY'`wKX71*Zp7v&p1bډi/&]]]KLmw3]=@m({!~<A1tYL1]SL/1}M܃M~ w71c{6{Ɉ!-OAaƥBEEɿpǪܦrPABl)y6]`K$`Q{~WN^ߵwid۴C)ۇ?'`%6Y+A_3fdydxm'mwO8s6dA$4ic\ݭĭ㳝lz~V~OSsD='Ib޷p$}}+ͮ6Qĉ-f<f$-$%JmqB,w,{DVykǱ}KL!+^zE'Nb;NjY{{V̌)w],;͆kvجVy6[m<v%up(yg
׻ڛ^R9-r{Otٽ,39ufrI%]IlY^^7ҏ!}7F=gk썡gw{Zhy־yczޘ}^?}v+gg_Nu{]}1rvE,2g2,~1yyc*<_nؽ11qX}xc;{݃?O{x<B9 7F߼~ߏx)'_?M$ʑ?Ok͹Ȩ}4߇M,K_f5@O"Xwzc:ckycc-ӭӍn;Xm1xrO\ ?7׿ =\sѷܵyorߕd-=딽7ז	y]^k-	u}s{g:Vsnklq>1؊.wob.wcaClo?e}հ˧>lֿ;ANN6hK!^$'θ=!=fQ݋MSgƹ[|Rͩ#s{Mزg̘yFěy7<<̌׋7g$msש=b{r-nc$%br+_96{2\xVH[~Ӳs-9fACʹdiYˡ<!SwyY~;ְ&]ް)61S,^d{"|߅}cwq<*?G鎥Gך`{5+&S4՛:Sn2:f_bx}{>D~Q۷ٔ0mtxci4^X*{޸8BEף*Wk\Ww{דUMiބe&X7&ORߕǯ$ϓ]wWiqx2?ߕb?}];'TRZ/UJKRlߕm}oo,=JqǕ>UzDD}ݜqmEt-]VVvYY[@.r閛-
ѥ.]oZ6C6&`{oaߙ{a[tڇo};;Οb_ݏ...bߟ|ǿ~cL?Ř7~115n+1&Οb_o|RU$Rm)xՄ俿T>7k_kW=⟀2⟀2⟀2/ ]UgiUGuU߈"vc{o?d?l|v˥r5ww^ǟbܶam`׬g׬:լ紺լ^֬Ԭg9ZumeaZƴ2[_icYieu6՗cUVڸGZU6U666u65665656IMDBGJKKU66u666u66՞6u66aiem%cMgMђ<޴;ǴtEEhbVV?VfڒV"RVbV8m>mYk6m9:my mmEkm%+me.m+m՟Umu԰ִRֲ>ֱֶֵZֳַv66*6*66N6NY6[h[%iCʴ-\-Ҵ6V/0*m[m56ZLΪFޚGi`F[3h;Z?vvv6vvRv,&MOm/Lzql"},g=o5`Mhdlb-jfn5a5i%eum5ckRL2LFLLʈLL6LLn̰̴b̶̲ṉr̵
̳D[EXNVEVC^%YreV3=UV"k"k|"묶"""*"%"0-Vmkm#VNk.-*,AdUdD䀵P䠵^uPPu]%rJ.rܪ(r!r&r*rj'UD䌵ABUN伞[V%+H䲕GUG䪵E5P亵G䆕T5Su[^5YG*rߺ,)5^5M+#kc'IV-gVz_"ϭ"/9"/!"X"]"o"o"V"")","""_"_m"߬x5׹==1====y5zhѳKУ#
1eȞ>=4{.j|sW'fO_͞i='=4zrk)SJgF
_4zi3^'FB=5z
k<詤3A'FO	=4zzɞ=s4{Zh,쑍K@gOy
>4|~A'R罆[
>5|ZiLsNgOC
>4|B4|6j	i'ATTgMƚ>^M2>u4}i_g%MI93\gY
?
w>>bm>5|iqjɬ9ST'ǡٳGgfaI=,DP6>g=q|)CO=-}C#z&҇S>=}y'Lg=Q>gzVГǇ>=|yCOz}CO=e}yCO"zГԇ>g=>l򡧙=>,'=;}ICgzjSć>=]|ICTzгۇ>t=}yCOrzг؇\>C!zrгƇ==|ICOozć>T󡧗=K|Iy.H&cO{ǞY>爏=}Ǟ>򱧠=}YcOF{سǞ><g=|cO
{cO|{2i|CVz:s>'ԇ>Sˇ>Ӄa%WzvG`=+q;V "PSō(I((	ə7<i?==iЉ=,.RXSN
	ʧ5m|!%=6P ԃ6o3DIBw$\n{b<&;=''o[x<U<<Y<܁܀GFSK!{b=d=eT2vJ|Ov'SGF$q{˰=hy=UiSxҦMCS6'Oiڴ̴<h{f)Bɓ6ge4U)Aݓ6mNOm\괹=hxhzrĥ#SǏG'?maO="$E=hy{iKxі-)D[ڣhx~-H[Γ<mOMڊ<&=ixzVUO:jRA[#mmO":4u=hy$m)GГEJEi\lAqLa?%X9>Vse(ȜP.ʐR
UVke_Kilr0eo)ʌD(G)E{eETLJeF)S\ Z(s	tVO̥mtS(JwxI=rNﭜD(GѾʙPr<0[t2TgA`J!:DlD)<tPItrLt2:UH#:NE+P	]\t2!:I&+/:U!4&:]SPX":S9RS_gr)ѹyQtr)@O.TM.VKRe%LD+
eW*g6U]n59Xtre]L=?OtrݨAt4,)EٛnU=۔cve&ݡ=;RʈQע{K>/_9&PyUr=E(w>ѣ!zL9x+=],zJ8N+#Oʩ?LgVB}ʾT􂲏[rZ*^SFaʕNrp[ʩ}[9Qf1ѻ'zO]E+5Mge}L}_c#e}=E(ʮqEUnϕUk}lzR=/ڊQNC2~}`,AiE?*wLOa_=LBo)iؔr=TnKʝEԮ2oCV:KRV71}r_e+Kh2e\FlvZ|!GzHT)Wٛz+h</_e_	M'2&V%#2F&UqdhreJ|2R(hJeu6R)hjX,F9%?(gKѴ^I4)^9e=8+Qh&eO.YnfQcdUF6hdW9)eT=\[9QW%^!Q_!q(l[D*^V~E)nU/Ŕhqe2J(yђʡﳔr-\z}(X!ZN9WrVTkrQrH6hU㨦^T0ǨFM,ZKمFmef\%Qr*Fʩrm@^ eD)CvE+g^B9,T6sh7%(0hg5EÕ@4B)篢!2"SA%(eHt61E)Jḱ]])ʮGD	}^
u
Bgڛ)|\DI@nRܢ=DD*D?mW.AQTtrQ6X):NA1^98 :Q9UtE
#Eg(DWcY
:V):G9ߑD)^ʹN P9&.R.m+sɆj˔(׉Ra*n[LV9.X\DI}mTˢ!56+6-%ަDtr
ݡ:T]ʾWt2<Q{c>d!e)SG
E(݌ʥrP2Kёl8\z)ߤtQ_Eerz>(׿lD+s(鯣Meme2D*=i@}}ߤGʦXA'Blѧ%يL9tUA&BڿH]ǍFAǯCr3Z2~TMO.ٓAu\_7`$%~Q_hj9DIG񙤿I5L_c&/٢I%%̯ɞL_I|ol$eIK2IjM_IKbL_IK5cDI=^_I%e__y3IɪL?TS_$%^_he$ŏL_"J%&_TaB]?0I&GDϑ]ZQ_YT&/~e'DI&/YIu#%{2Is&Q_&%?'ZUloPгKKNfEI^m_%N׳GKhC4&WʙF&鯽^m_jL_I.3I	DI]mP$F0Iun$,L_j@/!JzH}d'&/$%
?Q_Cه=&/Q$>&鯽׫JAK-lEIIKiBmJҿ(鯽$}zw#d!&ם׻$%1I}_m>HL_>_^L]FK4IIK7I=>_{'/$uM__#J 8H$EG_P!R"$HIo3&GhHo&:'_$%6I}_~1II&/5IHH2L_FOK-dzHII}?3Q_f$:zH}ާϤd&鯣//_~;1I}IqL__b$%0I-$I}=_j%Z0I_HM'_ߜL_L$J'%7I)$JKg7DIIM_~2IM_ؔ)`*B_GPNRTWp+P	')}"rI6	L&S$KCulBG(e ^eJvxJ@唬	)<@"j$X9eސD9dTVG2ɕ!q)K8
"r#r
FA%!J\GȠH %#ȢL}!Jo .PTKȩ|!UH}<)H)3Q_(~(prJC~PTAŔCWq%K~@ID)
D(hY2<Wn}
QQSC[ (*ƌʐjnA5)9j*Z
j+nQf]Ѻ
*!?+%9?*Cjb4RD{4VDA4Q6%hL}WAʔhf)
\"(C~B-C{e+eH͉P %Qv=-TEr#S~;eH-ʥW%R$Ce J9D+֎%L׳YwQnJU[)PݕCCAzRl}C	%O%+SPN=MZ_`eHC]~0喨c2%HԻ`L0F9XeHT8eH͈)5 &(DcLTN}I.de(3ER`rI-_ʸ%:CBATmf)SlsK\C|eH6_grݼH
a2z.QKST`2+J+C0`]E/dXkKhu
BWv%ǽQ}ar۬ c2/H]BIPvS9M:V.>G%^nro4د-r	pP!eoc8L
G8z\Ǖ!	~|R~:%ംß[pVAjSd3 I'C)\R4\o(Sǁ%T5Ը$n(ʡGKց
:Q=d˸ 82}?Pv~VN=C/ʩ#tzLDy*C~324u+%6^*`xK߮V8x +GCp|T.=_C"|Vn~_U$1p{ɜŮ$C@Nep^Xs7]:iCreȓYb_COؔyRQ<MP\R\reDsy\'#sG>yhL_<6W<ANL+ʓs)Iv2-ϕs<=W.ʝ@+JyW+S;rʔCjgP2*<|ΤH"ҕM!eS<Yͮ\x?r,T6'+D]9&#uEL]!99~T+C~e%Օ!~*<YWv9gaeʓtp]
oHqe.DPR23},a(!-Hh	%b졢ی$*U98$[wecKvJ
IØ~_߫|<sz+;%mڷ#ъAק\vͶ ԍؘ:'`;.lJo">9}V w,bgtgԝzKZPl]cs3)^{+{流G`E=%g$y_y]El1C/^ykr#sE2#''E1K-+^y/7"mȻ!n[OAsDLFJCЇ "2ϤļbfXKN%$J$|85l4#"Ȯz=*"}4EDp8rg:w\70̞Dq<};BHbqNN?""&-;pJt.5n:ur-{&{!E"FLwx$_.%]dwt+1Ǥ+J6a.!{ 1uk瓻ےoڿ)(FM-H7S`ZbM%w_C~߯0ewzu*vjܾ$бt'Mwc	SrU==\iuW`=H=;^]׍WwJ42B#t=o]78Y$	%wI	1/g7_ձoYF[rUR9&ݷݷ /T/&_z|w^JVݾFy6ޠ(&Y?rjjޡ>2#\v6rW.ʘ.yP&60e{]w;\dv08~w!V[[*R&& #-/DawQ"Ȼ!eEv5/#&8#|]wc?s3ݷX%zRч11QoA?J\ǘej}_ˑŀ}G.bSPV`THZ"ָ25F^'0=4Obb1N\$)r̕ӌ8/yM˷kab.QymgQGsXA`ץNy]Yy5Kޘ&Ըń6oFUB_ k_%M%5]2Ex+t%?moKsގT1hO?Db]u:vWֻ!22ډUڙ"25U.pUϮ4}7nTv'i

Xܹew"n{еkIS~b/ĕ? ""'+rtɼ7MDwUUEg_FMղ?5T!{ܽTDgbfwq[?(9qID4XWh"EǭFvQ4펻oU4%1}k׎zN`h}+aq]U[p
92ϢğJO#kN(A9>.(EVչ;[\<L|4}ETŘ IᢳN4uhvISS^I)M91Z:r"7QI꯺v鿕w{6No_b'w"࿦9}+	r;%ntu#wz^wߪ1u{RRե
GR7wz*):ѕPpWa΅oG(ꊏ2U׏3y䈻oSt}4ug0Q?K;9t\Ub/0/R;}}/a|/uԿBJۆYj:Ux\L-m,n!w1Xeem&Tbw"T1A=~$V1/E$]P5scHu㙏!1?&ϘXg*F Md~!=d*W'[[,PB`qJL1Ac*An*tHb鹖fD6WVWnZeq_ZHqn%+=[.f%ΣȤdJUhb`Jr\
Nw`kܹ+iӚ4g(bk11Wo[!F>·}\.v^hbLQ<䘖m$qg3u&ӢOy+ތ.69%P#I":c_QmAڒ,Ve,?sWmEݚtg/&
-mQmǤzߞӌ@*c;DJYu_Lk;b>_DT]NW|^_TSvchw,]D_$;?f.9fDۓ,BM/2UYqg?iWX`Z!eR~b? jHٝISw89<ȏ0T?&bڱzT#i:?!)q4)f<;;d;zЮO)<""5TNOfOk]9.b}SNQjxp;I,LUw]U~.S܅y$v>d% +p]$_v6#.+^J_lWWmcZhJ$dk:e?#yƝDwi"(a7c顢mZ̽{RwY	_u}r9Ýd力CV,_IW"
Ia߽LA՝[>N?AVw~u}xCɓѴE]ե@y~&_?QDy*u}ՋXLCJ^!Ȼ5KoPxe¤zoշ\o`%Ep3X{qTzhcb.V/f5&v3/)/t1"Dku]nzT]Y"<w10\J|EXǲ(9ֹ,FQB_8]LX b"4Q>D#\]_*?Ͳ4G\)/CcCrYLLɽXrTر{"+#!TVMD#[BJYswDe5Ч|}ЯI~籬EQ\X.6Y_oܺ{bSCН!5tlD:6(?OWbSQĘ7G?* q/lے}
Yn+ [c1oCl}lGVmϤDT14Or;ҕ+p/S\{W흨Z"U]"®ZoE+_ӱ9Q٤|I"a(C_RDRD+/=jt}H!{3D*g`1}}}"YW FXP_z=t9w]JҺF<"Bx?S(GSu
aitq1,DO.YN"kNf(p
MDIdڽ{^AE$ϢMy>>$tr>#mz!YuMbNl&0D/e^F:+ꯪn1tEu/b{5E9kHQB˵duhZJ܀H鸉nvM$[1J&%U½yy>nFIt'Mqnz=ҽAc-ѵ^cR՝j?CU_[LGڇG)zDΓu(Ṃ׹v=ϒp|?1o3_(9"___eLW(`+ҔpW|SaqWǽrcRx;nrtէPKA!W    PK    A             4   org/bouncycastle/crypto/engines/AESLightEngine.classy|SEOMzZ,m]JR@B0Em $5M`Yh\D"
 93iIK>O?~3sgνs|x{w0خ_AO?=pf8Su-:CYJ͘S"\)5r@M\xy,LՊ\P4(^Џ-.A}`(~O_ԁe\k9e%4pą)dP:
[PH0pD
;4rk	t3}P}-վ O7
/)&VB
OA/&bh6*yFoϻ`|(X	{H
/&VUpl:Ȭ}aOėH86P{,YHRQ_BU3U<ut?(
JSõ:8:Gꫪ(PQW
ӅzP?	~=\4g7 *қtz<Bk龾J:HY)xGs$U{c}Hqau*P>zy}^z"a۸zfR*	RCX
YcNs
W:] ^P@d|#tKvښxA]^_4_lOS*zBFuU|P{܂	*O} P/h:;.p]RuMXuLu3k
h]NzSXCbIZQ;rJa_jUJ]<ڃĚa,
S`(0R"F)0Z

(p(U`SpKNni-1R]۵Qsp+ݒsvpNE]"Ұ'/^S/&3(djoY?#$K;cP0 8BS4B_B.*t
`S!U`)fRQT!0e0h**`*AH%"תr[8%Rϲ4̂,p2\`SXf̑r>%YW+Y|p!˥
e)2,+X`Yr,Z.@
n?DYLC{e|U N'wdOmg^S٠BgL'[8[ЋM,P7P}\B$OP}BB]OzLR8fq~3!,e+hb$@jVvcVvaF?xEGiXfh-Ck}m}s/L2cCQVfʲQv1:*nl͍mF 虅(+;:ʎH쨽ַ
62CgegQ|[dn&CDE٭㧷FyRYPyI[
+D&alIK/n w:nK/T8ٝ4ջ{<̀`Uݰ0Wy*R1j8@3}OHOoNSOP\
W4ŕϩ4sݨr=&-epZ4ZnZbܲ,QgfҢ\蚢^3kJSk9ѩWZtM6\{|~|ʞfpR4KZKKkf:mlr*OJRYp@hQ%B[iJP/nn!>>"5kԤ;14GhCݞFHgkY\WNODu;׭\7iVi385kӣNi4}ӷum&nӶ4BK1-o&kVT]USbR̦;wVﶯNf⽷NESu`BMZ؏WH_iDPH7C^Kct
T짣=M*:7`x)aJvPo1`/OgA#L6BИҎcRIt{0҃NmyaMn\|p5k[pG$pd^f;ܕ)F^6,1@:lu0dZu-:WQy;\'c[v	?èH(wCW);H"Kb=|+sI,]LmvkAmm̴fq7l5t˷noL&o,]cFfnpem}wL}Udʷ]oWDAɷYTRE)U~0rËc[u*9ɝN* S.e'!L$ϯvr}1#}h-baqEUEHՒ,*']i5#YTKiɢrjPiՒ,jZj+:e`k8=Y`RkqEZ[gMq9dQ;Kzpjmɢ'ڦ}cp/ܶ٪mKrȖl[F͇lK:	|o*)d87i\S|6X%3NnI:3!F~0rpֆ
Q{XBC	bXۃd l:
{0nƒX븮7$X=Kv^ĒXbC[1dE,u</6=uNRd:k
cx'R&伈%ۉZ&92b6c#ڧi߄.Cpm:k:d+[rVkk![_Ԩ'j"jHMR2tP47lLf(n;n=zl,wr	O/w+cیhHTI0TſH
o'MEOf`4 KIR
ݤ8=i'LH.R;^Kד0ax?I}}rҾ؟t174i#śI|t J:_'CHP#=R!b_ҡ0A:$uI5#
ґ!i~E:
-cXL%gÁ1tfct"V7HKp$	*$JZ#)X@SD|t!-GtK:7Y'|R7>EZHgѤ'	`)l<t>G:'w6R/IZI}8
VY5XL?HIr N%]EA4≤Ma</!ex"AzBڀ;Iv%&x8i#"er|ܝ+3Peb3k8,lvvg;f;el("<bv	ֱ]sVlr|-}خ<+R\q"jm
]]ٮwٮlc
ۍ>Z,d[ǰ݄Xv36lMx2- ۭmvǶW݁W݉݅6glq-xV\v7^Ķ
_aێSؚV݃3şvl;v.aۅwF3x/ c{=vGpۣx7c(9ۓa{
c{'====l/hqKX2H+khc{=lop7q&[xx6; ۻ؋=}C#`lllas%~5>
Ngsؾؾ~l?yl?g~+c
k~Ǳlj=8OLgۋa9_m?v+
g'3
HFSf==$S!3E9C'{iHh`5=|NvK9Gg@=z&<,@=O	.) @O_Q=

\!Г&3Ng@C=S=ʉ={
T	K"Hg:> O',ϯ>>g\-Me>'<-sOge>ZoTA}>#lAMgLA&A}Y)s>ëPgK>|>f-0l)1	</3Pw|#1
< s`}ߓ2Y=,9FgDODXDOD=_J\%Ds=J|/sDϧsDFDO$z.sDχ=H%D]^=Dq=?HdI*K'W$zB==$zl=I%ѓ-ѳWgDhI=J(ѳX!ѳF-%ziyFBg$zޑEgDϹ=Dc=C$z6KdJD[gD
%zH̕9QgDϭ=K+Gw5fUgd'=K${n\	ɞk%{Q}ɞ=%{ɓEgd=_I)9SLgdGdO`"ѳL^$z^/D_DWgD=DRBO{ﴸ`tcvvEq;ǒ*Q]̝lsbH(dvg2)n^b=IGNKڅYW[.pOڝ!YZ.R,Y6eNˉ`VBPKbu  +  PK    A             3   org/bouncycastle/crypto/engines/AESWrapEngine.class;o>QFf
0F(fYbZW\Ƞ__\X\\TYPZ
f226( ސ 7gccKvVv6vvF

\ڝr򓳝32RA^$N)8t44q*-)D
"xxXx8@?0hSR8\`b :32 y"`>Bj@**DlN
% PK|yy     PK    A             6   org/bouncycastle/crypto/engines/AESWrapPadEngine.class;o>AFf
0F6̼;FrϼļTFtҼ⒜Tʂ|Լ̼b}G`W0E)0-9XA33312hhYZd
򝎆&N9%xxx8xXSR8\`B&0) 䉀Z;3oa  PK5E{   h  PK    A             0   org/bouncycastle/crypto/engines/ARIAEngine.class`S'4iPJ%JS!Ȕ@mhiJe[Q܊ ānK{뾮>#rOy{NޜΉO  ǭB++B[!
0

mdM+RЍ5kԴi5^L㕦,mQxkKV]^q3-ikfܾ~nI_O_/wi07WWy^(\?ORO@`i@SB]Pt0y`a
wQTҸdBU̪p4|`V0f3
GMN[
5@9}J8Z.z{r<}%hMO:D45%OSC455'J҆|D业}*:${/-k#(5<F|h

=PzzyzۧW`?~?F#! I*:
WN˂!eaz|yj*+
ChJC+}5vfzItzjBm:\CF>hfԖ#p8<Y2}:Jki uʔw# )|s}9؛whjUY,UVEc:F}_z`S%|LZ75a*+
US:D
X+o"P[I41\ap,^he0Gv8GPu99LÄsƮR
!fb,g<L[E}cLqk=379Âhlp"`$
qis|krD.
<)/Xδ:kOR.ֻvSPv8`_GA[$wTGuMsf$XHp.m{"|k+}rt0?L3QhG@Oms,0ja8#-0Y`X`Y`&X|6?.hyJ/5;ʳwӵu2̚:=-zg_OsH6͚P'ZN$>ߚbS|wsz83GWn9r6|p8$9G,bHvpHqnl 8p-s\t[1_E@z\<^1!Xcb%Kphpfp̄XqJ`pJKG9qr\q9Wr\q55r\q=
vPvv
7'B VhC'5E]_Ut;9D+|%AhO	uwDq[vծMj:I<BT,NZG_/qZ Fz Ay{7jnxlh 3l2X]}+n{R{a속z7 vb7iݻ`C]uOk
5~x2nx^<!P!'&l/s%Bh`	ǽ6<
I`Fq>}1JS-
!ɶT[<xq);e7	^398Nz2qӼl4¾Sna{mڐiwӏ'LS[if0tCeYJWN~IW)W2NǶ9է	yƼAnS`9kt[&5>Ҳō`u#hh&11p#ϛƤ<o)nL;itꝖziw&;SWNsoNw"7c띎fsZ6wbI˨6iMu;7{[InHwK|/'ۭi}^ll
s|G''fcNHϐ,{椴`$ۍ9_w»1Bkk8v1l:tz_C_3kkreQf<CͲJG\%b^j>ݼgxg=M$/r=Y$	.^Uو.k; '=I%%eT]KekǞJH+k/HLp9b+.3opi:2L3I$LpaɮcF8J6zh-=[l۴nh֍bK*d͆M-uRn[rv>Zr&c#Pcn.ɺyKFhG)XԽ̦k ӕg3i=4w%;ShJjXb痮'g`:?
  SřuDï6!v@~"`yטAgׄV)5w1\$xN+zifLYklN;mNӢe^Ӟʊz}e,8҄M4$5P7 1SsffN4M>)2.7һn-h 7ZwiQo;ĮN>]NSdϺSP=&wQi
'/aMڄF#ih]41JHF%鉢Z}+h_F97>aeq;wć3>]M4M4]M4M4]M4'?ܒ!|Ϧhi?`'W)FrossXtAqmM-mC)pTC#+,66jJ5si	/*6⢢b+*6¢b~[TlŊb4c҂)؋fce"fS:$|2LOP6zT|.lR:KlP%ʶ2
L)3p#Yl)3=No](;3MOQfaonҍRf7qe|'R栓"`G<<FP)Vr|L(3Aؕr0n<k)A SŶ0r8VQ]#q"(@yB9wPncqC9SNByʉ	efRNq8r
΢,')AiOy!GyS(g೔39J~EYQ7 XṚ,K)q8ee8r6µaϧ(#xe
^G(kʹ؏r@9SnBlOrq3%R|.!|R-\sY3\pqY\s7sp
q\\..a
q&x1p<\Va.7x=[r..K.kmؒ6;p:;1Z|].usـv.qMhr7v/rr/>~,Wry o CXe+~e>e;gsىpم/sٍ4\e/~e~r9B+ø(vr{ryӹǻ<;<py?8	ryqy
Gsypy,^9<"ry	GryY+#W1k:^Mx1;x'w=.\[|͹C\>׹|rWqo)_g)._$._b._\u\+|I\C\~\~r.?.j.b.a
XOlU>3)bzN0=ByBSBO	#"{f=#ĞbX*yg{{v==Şlg3OS,z23Dz&	=_=/vzz>z1=	BOS*&,di/_dO&{{RĞ/{>{z=KŞŞnbYgs3_yLIE{{{b'2§ss|s7FQFg*j3=+Ğd'W=Ş)bH(\DDسMi{{bϫbbd@"XĞ[Şbbkv§sⓩ\P|R|W|>gQFLP{ک=-Ԟ==՞;՞ԞԞcjB'{LJuJ`sTzRz~WzZ+=*=5Jғ)=(=s;Jf=9\VISzz+=2ﱪ<T+UU:2s3Z9y<?<}TT*JWyf<o<<*z+÷LOҳVH	+=˔Qz)=)=JJO3MSz+=SJwJOYlUz^QzVz)=/JϻJ&gA١\Qz*=)={]JD8=3yxMBO?sгASXNyUMY$| =BmBO<+D"ϵ"<B<,-|*<)	=UBG[9*tz	=_
=cD@U9&czd=e=bOI.{=ŞQbl*y{~{~{bebOsJyI(\(<%\$Şb
bOS-{&==_={Ğ7ĞbS!\ l{{{j&_kO{{=/=vG@C,1*4=;ĞbYyN.Usê3	=GLeQi!\)T(<
Osg3^)Sxz'~>
]|<|Ty>RybO=7<[TAXy@\/WDIWzjw*\3GPz)=Ǖ+Ӡ(=J}JOғPz&+=J#JJOғx{Ym¼Oۯ4N~Di= ӹa}`<Q'W٦==]՞ejjgsڳTWq=ԞԞ$ڳ@Yܨ<ܮ|ܥP{ƪ==ngڳO\=Z{,Jg3OyE􄔞J_除WzJb8=rg5ӓ`z=텞B'_ySyO=6D(z=Ӆko̞6rW̤RTt8NL!̹w|=O=w=ĞGĞĞbdsV+{bO <&ĞYbOsOUq=ߋ==_=KŞb\!-ؓ(L{ĞsL#8sssTHDN"OsS*%|(/<<(<#,y>yX8'<Ӗʽ@T.Ϻ!q`T!9[~W¢z4G"<=bOOx8_',"X,-_*1fӪ$2ǫT}|Dggꓬԫ>#UFyW9W=\,hŧT|.fmŧ{yUY|U|.R|;!g3@S|F(>ي	3'T|P|)>ՊTgⓣQ|.Q|Z)>tԪܤD՞{՞#j4<RgB=՞qjpgړ<=w=՞՞zgS\S{~Q{z=ߪ=B	J*ҳVyNܮT)=YJJ2kgYoU{}Q)Io~_~i-	ҳ^٢$zoPKs  .  PK    A             4   org/bouncycastle/crypto/engines/ARIAWrapEngine.class;o>aFf
0F(fYbȠ__\X\\TYPZ
f328(  7gccKvvVv6F

\ڝr򓳝32RA$N)< Dps13p1p2>`8秤2(2p  B@=r;v`u ULPU`6/LvA2 PK     PK    A             7   org/bouncycastle/crypto/engines/ARIAWrapPadEngine.class
` O2M]$  h$j
z*Rฃ^>00[h,
#^,ItaL/ioU	F\o^[1/#h(wDәhTі @BO1XJt^¡\{ PKn'   1  PK    A             2   org/bouncycastle/crypto/engines/AsconAEAD128.classV	|OeKLRPhl$
E7vC.!YVCkoz=V(Plj
޷bifHoͩ'P'9]X[eU@`{eU#7<+,WfV!f+k]gemvZYMr=a=Gt-#7,R*X"onLڥ}:;,J㱵

M5wjmh f-5S#me-z;ZH?jjD~ma=lk鳔\&[q"`\C5JUvm@!OM<фǶHJײ"9Z]<-9ıf.$WӓMlqВfr6m4oI3jNgHSW'y-nu6k6F`*Ō&"rRAty%aD?oDjHx
4E<5	耪襈+Nzrt iW8ն^MobQ2[kwDp4&Vx/Zlllځ55Cޣn6#bǴd-oF5IXљtՈ=	"b30L2̺ԥǃZ2
un,ƩyQ3>ْS;'qN]MG=}4\3}ZBu]StAaqHȖs0a(n	bZ`͘r%o̩BG6Tkg1mʷ9еFM0CK@,Zt'U@*V{֯W#\c?̟bmd\&rM2e***c62:dt蒱JT[u:mMl;MRL?1͏9f92_B'x6ΗG3D\K+
u;f]ļ5TlHr\VynѰ#-ݭͪz/UpJ5/cȰ*a5^:a'C!İ
OA^oprWPp%ëq@%)c(]A?åp(SA/dRP
xؖXPBHfM*ԢD5X`=nb1fMnp	|
u#;rV[nexmogx;n0b>^dx>A89vn44pCK_ O0|nb4g>p_d8p<ý8p8833oA{S<ĒCޙ_7g\d?QQI1:Ջ+tjGCn\HKi9${/h2~׻#yF-`J48ESZO4Wc8~;z7ㇾo?J㩣bi;hkQ9GF䴓"X^]~g䯃bɗ҈nZV]f?fVeCێ"r{<JϷyo8"2q8:ciY֧d韶2wT;ղQI8~Fi1u}}Y(-ZȓАfjJjL/q'9&Ia;3h/(fQnj(gV3C竽.z+Kc[0ǧKe{]בֿxԑ筧xƴ[̔FrP6Wb)e9,af	97N>~\mR;aSl;DL)WDYޓ֔<IBkV-M~|}f׮qoEO쟱3y6Ut4`B7EmrxW^-cOU'L\j?x;y*R2Ji:4fI9<i<[Rn_!Hӳ7Ys
a^R\"
l?rI
LEUPJUO.GDعβFؼ *B+szyd"+
ۦGpΜ<fCa#"LY֋qm֫)Ĳ	5G5%qT̛/_uſʈg7Q/O\Nَ!]&=KnjGd6Iڽ؃3pPKd"  L  PK    A             5   org/bouncycastle/crypto/engines/AsconBaseEngine.classTmsU~pIIK0Qʋ
M*%[FhBį~[?3yљ%s.+V59{^YS pujZVo2_G MO4̆{[A(W]])<ߴ*{O@}2\#Xai$eT,$QeomrT),{ެ؇ma
.
7׬[vm#%Cp(VIEbU*פXVqK)[B6]U0nl7+M#+ZYì7Lssyr`;4|-5nSȂ0L*^Tӣѻۂ|ڶU1'_|xjΐA^T{^h){5r{u]}ڮǀm8qЛu	
ix_4|H]]:RPx뵕|œm
-vìflѧ
:baxaaQ>a0&븄:ax7u\-a(:
UGq!1|S99YE{KaLcaaN7e02g(2<`*Bh,_Yu֪ףLӰgqx2ԩ޲h?&dQrx!CPc$@T9czn -$OKHS+*>O2R2uWr\ZH3S,P:3|޺H+Ȝ>.١y18Bx1ߤ3(q
l7:H=e̤MBO'0	CAc_0әXhdsZIy<jqW]ψQ1ا*D4=׸(aJ:&.uJ
x"xteHewOzJXKҼƷcWA(Rn6 ~zts)wKEvK/@?ˢ/FSSaH	ӝI4(),PKדT  M  PK    A             A   org/bouncycastle/crypto/engines/AsconEngine$AsconParameters.classSOP=ݺu+ݘ)*SM)CL4$O9RZl;t$B4߽+qD^q{~	`)()dRJ{۝mE'3qUjXMFA5áohx~_ujAغnkv`yn'e6}m?S
6*4T+{hc}TB1/ԇq$HI%=v1_Umh[!
ԉQ#n˶jn)9Or8fo*r{u
n+0e&XRI^"fX<i#	q;캮sy^/U#;Ud +疘FB$H<JP@=^b3Ӥ.b&Qr^\%1c@ Z6>G>N^TKxet}9u*BK`b^|#F/1ª1W&&}'|>?4D<<Y~XO,RTWG"[?PK{ki-    PK    A             1   org/bouncycastle/crypto/engines/AsconEngine.classW|S&M[Ky2*&@vPbhWЕKrF$Kn:p{{ֽ)nБ&soݜܔ{[76InT;s:ssK=V(܎
;ڱڎ ʯ&VwՖx$4kuguzGl{tu,K,t:x/rj_%٢Q*
|M
}J=S|7tIf/E/5dxJ[!l7l5)5n/9&
L^%Uh=2,c!͝h|l`
,Q.#X"n{N	J"I(]"9D5GihG%B`L*q
p7&{dU
)oͤM4o80*I=>%DX(DiاTo)8fU_;!GxzIEUPew,QeH[ruD#DW%jΛ Ԯ&YFsֆC=HLj+EkHǓ4JIгv2ַH]Jv(&hK,xcPX_40d:jNH
=&_k&Qk{Doɔz8$9
rcƸXc N^xSЖd^ t+SҮj|44+ З{_vX+Qڎ׽:ŅdOԧ#mr`;;**8iq=+\8%	"%(
t3*2CSm	*0m>ѨhUzi!XrA?~.*Z`TH#l]JS?ߠkEԋX'b"6(M"(]DDнTڒOjJ-v Ʉo&r h|,5V/V*_f'RMĽy"mv(nEBģS>o/u^$aKx
*J	ex˰Aaf10XP}wJXIK:jCx:J0o]B')a%$bx$- cFHhK2\&*Ja(pfHX$\%H=s؅ann}2|ac8'>Y`8$çc*D:q;d6<0)Q3|o2|I1|N4:V<pk37ӥd}xYcAuM|8xB	ɤϙyIr#r2ɗUQ{bADe1t[x-Bcvi(学}>~6j ~rmN);oql:jWY
Ox\!RK
F3Yx.x*3nx+>
:_xq}vW0l,S=~#?"Axi"cwS$2$\u[@1ԅJIB}oC/ygX࿇
{PDn B$NRFp
a:t)Mi.i/J1$lgs<F^{SsM%᧩5ءuPori=N3e'b:]%CRqerF.-t*W!
z͘{&{}e+li3mighǝ3mDg+x1h(>Ue$BLsg&;=1ø9:)kьOS9#xl9 uR|o!->[FDeb3yHnJL0vAvFC/w#hY*2l];ϓ3FyTv6ǴNf䌱ct"\ahrU9]w<Nq*:19JKs^mVg@.*6\nEUEAK)(^w5x'Q4L+f`36Xjܢ`ӊ@wjT"a)ĸ|.1}|:|AdbUEG^1hӍ(oMD[5=G1tgHw5ۡϰ͍L0ŵʵShL%G_Ƃz(	J?dU2QښޗE!#53,eXhȚ8zq1t饚ߦ3AV%NV
@?]۩z'{CAAePKvt	    PK    A             M   org/bouncycastle/crypto/engines/AsconPermutationFriend$AsconPermutation.classn@Ϥq0*
51BK.V
  $ع\]%.7`
Rv,yހ' Ι%Dw̙33~} `Z{ ]]jgavQh~b0nn/]=׍,nݮ;nE=?ȍ0X^`&7̠tl;w 7ĺ~0+zKL̐̒̑+GMn'ib$ub$}b51#1?UȨUA7 d@R$f	3 i
f`d2I=\ɢYwXowC,0r[\`T:Fe	NX(&:K8o⤌ʗÌCOYiujf\W_W-ƔFҨuE|?N#:mdhd+q=?̶Xl\YK1GusJDu)
x.-9sH[ґxͬɛLo▩edܑJ!ݒi]K`qQ&1(w`a炌H%&%J%N!+
Sgݩ#'2",_B"g`APKһ]  z  PK    A             <   org/bouncycastle/crypto/engines/AsconPermutationFriend.classRIK16}e TqCp)T41)TşYO7U)([	fzЙ?fYJ53iKat%IȭVny)aKuk-KIDu˭Ԋa_q/*aXRYm]h+§L^Eו𹱡QګJsۑʰSPTx__W^	I}*6*(ǹy1촘B':bK"$J"!:swm誠ԮR"10˖v+,(]::D'HgĻM޷ 	tcý@=
H?"ucM<?"{,C9Jr)~L"PKe^    PK    A             4   org/bouncycastle/crypto/engines/BlowfishEngine.class\?93(qUDVP,LZJ@BQnNյ{^;'Fw}f9sfyowk歟01bB<ƤvĄk0Ѕ˘u3{
掚Z*]v#cURXbjz_^͓cr7XWkaI~UEyny{TA8#P\qO!-ip}?hDF<m7/2uëgԺ@br#Xw`iOOOeŌFM<%\LC.VϯIW&5XjOl:2.dϥ}4&탻rf:6nOx!VduaΗaGKɩ)7hb[l[2g".X:Ǟꄤ	9R;]y%NhcZj-ILK-hpLD]*tLpi֬K3ou[f.]|E + :aq)>:"oK-z6G)U%D$|"VǦs|B":$.:9"\%nP+λlװmP@fyï_
ҘS--+ZYV/Y\o( H*8@_N=[3T,;7IL
IJ
IKHL'Z15Ԥ.,*",aB|rJRHtMxDXRzb
ҰXތ{hFgHi3իuH~8%
Ǜ0.$k7[D1-:ؚo&%&$.VhSSCS###S*FkN?MGщ3lcBxƅ4&P="z5H+">ůoXxSBR"v_GD׮$4qI䔈^DsHw+5_js?&¹o!*34!5>,=,$9%.S~\щQb:JcxPI}"~=Og4
I	i)/oOGߎOǇ{6IKq-I	I)Oq#=<G~&{ A?<6I	||f8>YRDr?<X%$-C!11dzv!;bȽ&"nkS4kX`4C{CcߚȈ)'1!ش FsNƈZcd9KRp6F
l	ڏQFՄOb^1u{KKKdaoqOƸ#`|iO ?V	uxbB\L)&,}7m?0٦HL|w3&Y*&̹I}`J0:+Vԓ1ͫI2EWƴcڝ}1}V-'Lϝ94WZaك0vfdO^70I͘YƯ1f/3n̻i'v=`ι1*׻9x9#?/ǜc[izEm?s9ٞ(m]Wc୘:o	%vG3٨2v܁{*bA^XqjXXb1,,
X},]6N>Ys:!kk[dg;"#zr^E8!ӅX4e,ZgiūV?ƒ
$Yǒ`iq/ubH6e^}JcYXn>תu+Lׂ" eንBceUX`bVno;;UձtXݦbޟV[mzb/a^!ּfmWcm6~}u.ټ-u5úIga4G
HX-lu:6i0
}!?`gI)~nl3#L<56ط[R_ǖ]v
R";$de!',$r[F>9qf r>E urA8XNi ͰBl˷6|k8/"v0Qv쨕xqyssvb1s˩y;|]וaw:vu^{y:&;`O&#{Ǝ=3KUĞVO;fV=#yV`ߑoy[_+cm_*m^_w4ǁ>^p`8$^EʕAUp091ߏC#:8t;
l8ܿO9#8b;x8#o|q[_"n}qhcx¸83Xnĉ)8}_A89ԯNksd0NJ>pjrӡgp:~aSNNx6NK<~Ձp8CLhkY"y2!o<͘yWn#Ξ˫8uxcף&Mhù+.|Oq~X8?c!zgeH+5p~|\]pa޳V?vEێpѽ \lx{<}Ya\|r#~$~o9^}X\*KuǥvQmL\yr<K.9bmrWF聫ڸU;j|l~\Mj偫׾Npͪ.\+WZv=qaޥTGF_q#fnsJ/Wqb*>n;:*[	pk5+[ĭp{__NSqckc=ݝ~q|q-({-^G+ug#p7<:z`<8%v.A0<.Z;/.ǣqx4kg<SݿqIxx|D$ߝ	%lē]3$q4'ɗYxi-<]57=⃧כY},5=M4kIJɑ;R[(V	^8CE̎lxX-^Zm+sb%t,7^/l#B#x3^zgx=i,^7/׿.Oƣ;ޤ7VvyZ߃w5Jl]D{x==wK{fƧ}W~FFxGBBd|
؁O'鏩!l5>X|}Uג÷kQZ_CbBO!7g!2߽<i(vxܡwZ>Sr ;hAƶ	ǶCx+<
tdvg"^Akf.,.g"0,>{Mf
/KaeQ2V]hFº+n .	o#(`ڲgC+W7lP w_9rk?DSY_GDO;MSj˓0ejgjnzVu~\Q	K`8
%s\SqE#Q(cߊ2
EYWk(ϋ(b3TKQf9[i+Ĕ	C]/`^(kWEGu@I趺N(xSTR6Z[8v_n&upfo|t{vuQ;xJE+&DX#J,({>{o`8Ǐ󖎉pY%LCɬI~(y8(	AP^bJ+(^m.2B&k_l(;_'--r,FP>ks7.}K'з,\ڤ%U4\}?
!PsUT
/;5`nKU-4	_^.p?{<5#wxz*Oc(~
EGP^-U7zyկ5B7136$o}cxkΫsPɭ.9jQ-%AQ}~PT^5*]wfu]\OVQ+jJAըu >jP6e򅢶SQ}7j?.:Zc_6nٌ:nΤPgfႨ	u.2Qwhh |cQ>U'.0>_C==!ʺ^Qݬ9_ԯOX~%B^#^/G@/aU=*i_n;E20\4|
_k ~GSlw;~q|4c 
M2~͇&|E}F7٫s|²h%;-z 2-{CG ^fNBˀIh&ZZ-ZF#Ah^>ZMVkm_ڠu]Ohnl
f"Z'7o[DB_"f	}ῶBZzw'(z>imJG.kˠh[z%F-D^
m?<G^zTj"0npקgLk8MI%оlU&;}]hNZ:C
I0etNpAt,z+::>*5Ϳc՞8]tzk=:XN])tz,BeY_}\7slt%:rwD[w~{fre躡g&5ݻfG7}Fp+Zq9Y`<*B\gV"tϬ¬F"lأ{1!{-C>z|CDG_	J@Du@U"/ȅ~<䃞6Bг	J:z.(
Q.ATv9W@zEԵѶ!K
s~/#DĘ|#ƽT߂6![IB{;Bnqj_E\VzV^;+ח6%_LďA|qH0gz!7?p$~MfSzPoARې
X^)GU
Hr)+3ч}j_|!H[#v܍Yi$>YǫbilA&ﾆc<\ЯS{R.\A+Ϙ?-}tw)`JwpPQ=3Ϯ0ء^+ojMЦXhS-itm6BmͱZh,ZB[H4o-kTh/{l|˿ZP?'/q=yWJ|ㅻ}ӵ]:Ӆ.wټiAm:hA6rm[b%,J(%]~e(=t(׺hZWmFKкh6Zl-Bl8-Fh#EUghDY&J>@6Zg5^
ӇhCaí$}(Ebe(D-Q~e(D/Q&Z1k=VϲDOUY(2k=A_j'닭qH(}E,Le(3E%lQ2WydZOϧMoA߀BS:ĥv`JHXlD+j2?FDN+*ST(Fjd_-soS:֞k&q7%qe7r}dR䏐zſW'[Aۚ5Wl}+׸muƖ?6r\L"7'ys[=5&背a4sM|\qwVQTq7G?-sݢՏwA;\}S6r\շ#xF3kn[ajA^[?LQdꐫoS2m+%1W߻Aվ S\}~ٚ[1w=W?\}riYhf&fSYsu~,˿Zu"n ?oYѮ n}G0oe;Y0qT?]Moj:99苴G~&xW3w0[suÆut-=u2=uw0+ϋ(Zu2!.,'Vώ숏)"KvmWC~l)HM:5 *7Es(9?k![nt~M|% bVβSHC9aN!W@`6?C{Bvvkaa,wCwy[[lc?kiim!_5B>ť-n|--yg~O`e`fjfz5q+;:7Ym3#!9\igIsS	efvvbÍ	~[=OMJyq:t+&}݊jۮbfFR4Ucȏ7HYyv̂ǵ;;?<7gf[PF,ӼFls^Yr-j[F/|M?{mTx3zڤؠgVU5M
?{=ZI|++x}y%ZqoALtLA&W S> K"Zjeū0L5y15ɉ:ښv&s^Mf}DVRf!F!Fs9њ
*hnr4*G󓣵\hr4^Mּ2ᵠ)WSQ^xT¦b1yZTWGSA^xu25䵸%%L:JZLmx-mkSi^˚ZԀ&ZTWWW7MּaԘJV6e*k%ަV5൚-MUxakMSs^kymjkS#^*cᵞɗr60՗QqI
ՈA=Σ	rx4e4cDqs[ӂqzK~Z1:GkgDA Ńӆ/<29@FԎi5Iё<:1"9LDmѕigxtc̣;#x`̨8/i;x2pG8摌~ѓa,( ьèy1G/ FH`tDFƮ7#bIL{#<R#a>x1G_^d׏Q1=y`x02ϲ6Q"2ZX0DgF&0EHFH"eȱDczQ/r.ȨIDNft)ENeO4*rq3RDbDw6#"0V\Fǈ"3iD.dzY\hѳ"2*j\"W2%r#EfX&r
."2"]t]zFΈhȍEnbDfj"0lFZa\W"1 r;΋4N]QλvHa}L/!r?#WD`ȃ>"12\aF<´"2ZU1Fugy"O1:Yi<MyyiEc=.ۊF3:Q%Fۈt9F^ʈ\ku!Dd#|Nn3.\EczG0`+D>dfNE>fTaȧ|n"3U}"_12@k2M^Fw|pC;FDg99"?3Ty2RC7FuYPF1c3mc7ǒaPŒQڳbx[3.(edѧS
0" eTk0@ [&{
RUʈ Ӂ0*Z*M\aiY/.2*iN}	W.,pHH/A,#2YGevA0p]8ˈg
F]&eD!QhPRp˨#L2A.@̛A\XUNB]FvxKd^Fuu201H kU
QSWI
KR`2H
LHIg)0WIQW
J`%pXR`'JR`L
LKi%p#)0eR`KJ*R`ӫR`W
LOKJR`I
L>J~ R`0%X#.)0KR`lX"V)*HkM	KimR!P%0
0nJ`R.Q9J`2B	)ug%0nl/J`A	oJ`zQZ!J`PJ`C	L6Χ&)K%0)F!LP3%O	=SxX{!1%0٤^)J`UJ`b
)qX}%0Z+,%0bF	L+6[*J`A	LCc?)J`FUNRJ`!l[	L+M%0*qO	LSC"-Y%0S	{+NC%09&!pC%WW%J`<2^alo<W	Lg(QC`k%0=֋(!r%^_	$%0S;J`wCZJ`j^C`H=k-֛+JC)0/Fs%x)0vJa.R`2V	N
Hu%x%)%FC)Z
R`
)0'&JR`^
;JQ^	+
$T
wUב[R`rB
R`Jig)0¥(--R`ZP
SoqR`U
IJd)0)t\T_bR`W
}w%p%{)v]	<S	Q
UokOxxncCx+Fc)0y&R`Y	I	\\	l>"+_
L)ݥh!FvkۥQהJR`Z
L}8#KIH)Q	"iR`RE
LJJR`j^%ֽ(+&%pR`X/&Q	L+Iz%B	J%0MUNJ`R	LWz%031^j7%0z+t!7CJ`F	LuCJ`=0QW
)-J`S	L*dgW%06+iQkO(fCnJ`T]IC\%vx!X;&J`&}Xo&1J`ZZ	3%0Y*iLT'C`w%03&%ء.%0&P%J	LW%0
(%0
+qJ	Lf)I?%vC	LV뵔XFWC%W	7TJ`rW	L;*N%0z%0,QUz]%0&o+J`oL
M	|[
}R?R`J
LJIXwSߒR`F	\@
#R`̐JUR`TR`P	!&XM
L&J1N
L\$X˖+)vY
LRcHz%p)0ҥzX['J	R`b'F
)0]!^Jb)0,փϥx*%4H
L}R`:Z
w4C	))0]/R`@	/HIU)0"8]	\F
7@%:)vL
R`2]	\_	O

JJR`6SOcXW{Kl)0JuK)0)+R`xtVJ?Фx-ߤdX,#&z#)0#dP-tXot2FYJ`Z^	=2U0^d\N	u$M	VJ`RT	J`3E	Ld!p8+;%0y&+#%0]&9%0-#
]dUJ`:V	LN)%0&J`ZQ	LdSӇJ`TTӲJ`rO	UOJ`,VeJ`2_	LR	L))C`o%00g<M	mS!}C	5&x֫+5C`ZT	mPcXo`\S	J`LUJ`֡&}h)I%0i|P	J`!p%0J(Io%0(Q@	TkǕzgC5J`\	LW+R%0yn*!p?%0f&Ǖmިm[PKmW+  B  PK    A             1   org/bouncycastle/crypto/engines/CAST5Engine.classwXZ7di 8ة 
@A+HEPbDT,{E콃P]
(]y>=xm~$̇i*]F!Z{[[
Wb[X,g_ŪrXn;VypGq22e
ǆSi5^{g>}o@Co{g5C	vȹr/2TϗҪ3q7]gf+~(G0/Z/cPZ'4Fxi^@>jjo>J
wҙ:M@~p
Mݪ}c*,:z]'ki:q`5SxYç n=" 5ĸKL 13Ybdcag2&1d5, <,:8e`iN/pVYFtwwWB?we%w[sVST_Rv7PFzM`zvʶ68ys7OsXLCHhіGD/}"Sy'ofv5u1$8l5lݰKO?/wOeMjiajsus8e,FD	RATҰSA=={ytVVzvVA-ML-ji9*k`P*.7(8"0*~DLXD2䃢"c#")+0bDpr˫
Q^1	8%2":&* 6(9<2p?~$48)<4Ri>dr&weURV]WΫ,PYpmfJa#bc,ǆ(Ci=$2Jyxh@\}x@D;<8"ut`2,S=Ls@\slXx:5DFV60>0 :&<؞H=hO{ʦrqWQqaF{t0.*}O-:tO{{(?4Sv-Q#b?vN9OXDp=yb]aoE+*71tL%툨HeӘ
V6*)In;jߎ9Iɍ,1E{^G`q\RjWBt$ۄL6%HoMQH{'FEӢ|$
Dچؤ	Llg0&𿆉~D[c1q8%ĳc+c:RODJͩHb):m):7)wo¤nd&հIʶ&j`RҤhLZn6YFa҃U1cvs1<ۉ)ƘҥbLIsS:
"2k#D,DYHS+LufWbjƘ:uWL:Sԯ`0͵L;Vniy0ݼaL4J)`qo0}/*gF`F͓1&3u[1cSf,
3VMHŌύCftd2Ҫ~a#6u]Θ濑.Ҟ,AZb̦6G1w9,_Y:먔K1|Zjr*fΈ{0+`x!f}='쑑]1sjD/Ŝ;cN71g"-	sS2s{xa0wYsG\W?i7nXs{F3<1i79.<7H̛|%1ow/y/Zb2,I|1s5`Lb兩Xt,p*`AUw",cn
=Pf2~ڵ *l>E[8`ѺņXM)~lbGk,v蕀Ş;,,;WJD,/%^ǒbIʘX2y@G,qz'l%`kciOXza(-,+Re?1>Xv,oԗIX>om/faͱrAV,R
+-k27VNVfy|UMSm{
jUc{`9X%V|sea|TvBzJt3COGz];/O}c}
ǅH/rLGz$cu]RX]V7'X^t37*K7J>`uQX]ں&2J6Q2DG"#~kd\/EƕyÐqs%d<m_NcTk*.5V{cMsX4k65wbͷ.X[mܿֆ;W
'97e~XK-Z몭uSa!gX3|&=4+`}~h
GEϴkCNbsl0|e
rKlh:_Ɔ)>(Ql[
Gb#Nlxy6:)Ԁ.ؘ[=M{MxtMMQʗll:֘fݓl;
f	c21f9ܻ5ͣ}{ynrl>3
=c}^lv&x-'{cˤe[byOly[aڲ!v-֥bqf"~x¶
f'`NضV)m(Ƕna[%x>aų
&;FÎQcLpXx;V+~c
1yA|Ѭ.vagiz2o]v%i]ޮkH~]x2
N؟Ů+-`ӉWIQNb"`'װf=f6`{.\|#-X6ށh<0Nٍ/`o^g{%Y}qW3՞b9}/
ž'"Sjyݑ9(2GJ>2Ff|52?M-@~MDoPUd$@VR,dk7X)~J/jsa1;m!9I?4`9?+;utu-F@8B_3Z-p s
kq8C[`8ᑋo_s8@
>]pͶ8T15:CQ
ep誗;/Í"n^k[|osOqI>UǑ9:ˑ-j]uEɩȞٻ Ь#=/.xS9MBW 'B!r
G*UAnF]&HobenT]8z\"T1SW+kk97ƱW[XYycng:]ː'v7PʩA[=B{d;i"` >=u⸻[%0ǷqB2'~6DjKX]'NIn8Y5'm>\əN(5}K<|N>^MSr8e_ũU{z99NzS?ƟiiO6Cpzmz[qg|qa:Ɖ8oxgÙӭqYV1sXLמǹV8- :s}pnu/oEv&7q>1ϋ7~I`N^톸|.o3]J㢥C\l0SJqqk%.n>nH\|4񫊸T.|K#q<\:w7&r.xi}pyE.on/~U-\\~պP+uJς>2eB\V+g5Õ;Nϛ1ȯ[~;Ks"r G_7vvaj%	WGYꘓpu܏m~TٶoKS\-kµ:n#p=rqgS֯_,kזĜEvc\0
Za\+Y4}/c=qŸ~j&{
qՅ~7b/887.[E_fi1>7TML`/nUJfqkqnpTz
RqzCwn?hφ;2wN38ξkp^geUd1[o9nqw{g
qpF^Gf2Mn{SO]';^Ӹ/}j?ܯQ)[a[q?	_,cAj*P00%
(XZ>_<-DA
$bPDao(b6F^Q赈Nx`xZi.Њxw<|3|V5
ax&m"zvCZZ<{
x2F᳅xo*UjdG
!qy;G^9uhEJy<5ލǵ\+qԙxl*x2x`,9'zgW~IQI?<)>4O^n'iQx*>]I{
x<f73SBr<-eg|fxfgm?3Ex6YY^e%QOr"#(QqQԱ5>U8|~c<79#y%x^)tv+%smx><	O^^xk4^[3Sb-7m
P,Xc8#SQ<#D,FX`OUBP\k_-1C!,^J2dD^V>\׸?^^++&*?**lWVNw*GJUWo«K]*ZbWkJ_>bzp/t|i|"8YM
fgYd7ܫ	1xsFyb%T4j%MGGIե(by%ϣd~G?o%G/CI^w\%"PV
onxow=eqoUZ㝏w*!wOƧzxoÎ!>4 gSx %*i⃝a=|hʞćʶ	a֗&s><x|ϽGX=>6:=##q	|N_TޚOYӁ<|xͪ׷wgSrlb-_%m|9Xr_ΊRph<\_ˏZ~!|0ξp_wIQz1Lג>Ͱ|;oR1AR|+WI1e^kH?VogN7-K/~~_5~9UMνmk :k_OwKOpi~Oug^sP:wJu`FRV-&`*6`] u0
fgna`xqk< Zb-S:;jU!~sq6
{nـ=nFXCASmd4Cp4^9	{	ͨ	qМwsJ.Mѕмmtjd9xnfpU+Kվ7Wc/p뎥{4nN#ͳWfkq:Lo[
Q৸PJ)zi !RBܚ-LrDa]R}PkLXˬ.D vqb̤J;
RCK R!Ɛ43;E!ِV/gH@gҏwaP`P=G4fa0N.FH CCm-j`8;Ragu^lY$!LW@MQ.Y
UޔzC7VZrzX
mߡx	ڸXyնО˯}	ڧ^A:2I0302F~W`T7Fh
Vf[:(_vEG|A[?aNq[`ܻ'$lP8Q)mǶ0LӲ`2jj6LR͇ɤ&0\e;LGFyPd*Th.*DNTػ`:*dx
%iksg'@;tnJyZ5s}	ЭY_AWp;dk=M99fe(WowpT3L+%۴M09[		'4wnӝ`Lf郛PU1*}F.Tz<7WJDeT+rsTNIQyٛ1)CScQη5Tl1UFAx6ܻ;UΫ*Tms;Nh1-P a;1Q
B͝Q!jaEQme;eߏjPQiT{fg8YaF
fkN`4
	
.|do47`FgT4/1QcT9Փ\BPjO㧔IPc޳QjJ5|Ԝ"j.ʝK?DZ|QYi?QIjޙwj"vB
,f
yX`S&ϔX'FRx]a" 2Zm?V"Q뭋6j|Gz|[\D5,P=jh_5p	jg/mD[vQVk5nU7QwfVzuԽul%EƢ||@KԶER'0Pyuk<zQUh?EC}-91<?	Y'-T_ģ{h08
.[/=uXaY1q,+QY%~,͗²ێ4,7&eaUUwXaV+a5;VdX-.`u5
^v:X%F:-XO+eBX_}a_N%rfxZ:lVy^͕abZuؖ
*ak>>l8ۈUmf3es/aWuoص7a{:n-o
ٰ+®x#446
GUHC%m0l9'ĵ+)}s/ϊ9k:~3ШFgh<~F+{Q4:>Gqq4$/46M<nڣI/h214956BLL/9pػ^whʊUT4z߫_@SW43fLFhuW4JCh6=MofuAuhVRFK±"s5aQ8.+qՓp<i?\He/꠹M4[͇X?Ѽp
܇buͮ3ha-'CI:l9h;-}h;@l't7ZwIB˱o嬗rNhyog|I_'U~s\RFV?C;nUzZrVuLICA7Km$$ͺ09<y
m?B/Wh[b$61->}AokKhi9m/Emh`=m/A]9k>?/Dݲ -N\G{o2=ݪOAI'Eh3h>7,{Vʏ#EЬ_p'2}@/GT89^pڴL%8\Ngϸ*pkup[i9Zʏ|8_*b}.I^2M˂d-(rs_t4𜄎rx:6'|E'n87:t@WtkWeʯRz\9tjh6fyMGuйQYX|
|
/w\Q!pkim˘[ڥzpm#v	ہnlܻ̀{c^	#O:sv߿~wK_F.]!E{? ]<EKҀ4t. ]cq{tmYlGĎn-6ۻ8Ot1~=DfUxtwb=Ȫ{G5e=G5Gma{<:Mۗzc
J1KZ5UJ(O˔8xˈj\+g9<3z2<]^qUz?x?	vے൷d8n/u'u?)Sf%hTkzr܍kGAѣP܎oOk7Ӿtz$g^3*9z&w*B]gyz&
ޚ;iK:{W#w᝛
?<O4wnR)J	[j;@k%蕺|>z]eK=vnٱỴ%Λߧ}bGfbsz78ꦔs=:zG,zOj՘ޫ~c-]>S_<DWgʴdɓ\>oG"WB&yٸlnܑG[wjy},/~G}_;:_m~BN?~-;OAYɇhm0Ārގ-Fc@0`HZpq00VN[0sa`\F|d a:6cPyo\B0Nkr3d1hq({4\ÿ{O+w+	?bIO>eϿ۳B.! e_6Rwy#`͙82=>#(9}Wl}&cp\>V_w
B`S;6DL}ד n1A-P)r]An"(R1"hQ.X7Ak>+nAG8!eAwGMw!8kBrJ28!+^;#d5^ol[x6Fhnza/Z!)0L!;:`ȹv1RZ#ag!^˟+ ,i%\߁_cV_JP6~0T-y:h8|r`Xs(;.nj	oHÏ <jZ)?O1s`y{DTu1 "F߄Iba_O Q!FbĬYM1"[k}0GyG鿮%F8)aFʶG1GkY:/(/Q=>!j\qD+mUXQ_: C)R5D/8hףdxtND?:TR*#1#W fԓi1bGL-?u |:"6&9!vn퉈=dؓmW5q-zb 2UDܹ7xBĽݮAܗm1Jr)RuǨI1j,ZcF+èfF[*c0z@L >ت&##>sD8<+">9:WFw89c-bLZ0FJ1_|1Yc:؈㚆c\KwvƝz DJf1B#Ư&#A	>G`9	.08$L	g0H49r@b$ZīH,jLĈI"3MdI"3Kdf+2Df>4O(5ȖV3VufSUJf;ᆖ}s*ɑZ/_"fw6zT]cVZf4eF1QZ&2C-3L-jDeZF%V-qj#
2j	PXIRKoIfk	TKZ2ZfZ2^ZC,fzjh0)\$JõD,QKo)B-Zf4RˤHJH)HJVDHaRZ2J-1jqj$%I-"CiPi@b0eRjZHKղP9$LVTLStPKZfeZfeZeZeZJCrRe8Ƞ`/?

U׽cu08<4gXi0cTSo.(9L}Fs>G4g0ʱ.*n8eoeS'Mf$FR{J2:W5geVIG,iIÆf}kvdqHg)$eIKLF7.aCJC3sꁬJk3eRN{V)gII~Y]Li:γLCYΔfI;sԳK
mtD+kAS˅TW0ޜbjN+Gtؑ77m2F?],)+ǔSm~:,ir5K#ks;S.S:l?5`z?*ljџ{aDz
\՘H[ɋg+ע-?&ۤ\c`mUnajTk)iu&xh
vȔN;Jvv&`,hՅrniQÆɻv&da2YjgRl,8r֦r<SC-h;[dVBYkComۊjrj#QD7Jf`v8Ԁ3,kgogRND* uhm*ڪWܰmi_ۊemi/6Teg#
N{OZFcglș"ٿ~;KK%%PP4%z%/W
v>ʴ15#'7G,k#c}J9fjhGH53(QfIY:6-g)˿&QلD
:(kPqY'4.\IEmBD]ֿ]H#iMo_611O$/k`\
\VmrQ=5eo%cQc_ۊemo{JʗϤ\
I;G݄4(o`/IsB	0o5 5&&~F?O#i󿏦:j?#@?Oe	?@OfןM2ZHD(WcOL8']7哹da+^)P愍.)`*V3Uy4$)sOQsߎZQvMTzts3GΔ>ڔ34.Q딕*ԏ WVL2r56rdѿ33u33_ΐ0g`EF`m79sGQ0w9GTRfZ&TPN,:򦼣`*mVۯbx(?C7˦<&h*5T'u߾M^3(Hv0=8So3&#2ƌ2YVجa~0AffU+\Q&4(x㲒7c¤mP<aϔtCi8(3(C?(sSmuߌ|Ie[73eSVLVSs~΅0Gj?٘7Tw22Ɯ&lyt%]	ܗ`uII]R)J[ߺVBoq{GDQJYSoEXIڪ.fHCj[N1E7ssho[Z~G6z OsA9()Ke_LKi}6􃮱3u=tkTQW]R
tR
uZN'*UT#R̔jSR+*UTYԊJ5Rj%ZYUj]9V5Qj5][鬕jWjuRklZSgT];+R)NPj=]3׵TjTKRtJ9)FZ:Vv:^
uJURj#RZ(RtTWQtu)R[*R[̕ZJmt5VgvJm:Rt
,pOJtE6ʚJt5=,kԱr5@˚JtJtydQxY	YJxm%dWX2C	oYRGo*K5Ô-W#5+3yJJu2T2OA2{C		9JYu`eA,K	%BeQ!V0YPYR0YT \׆S%"d!AHYPYHY<D,7 Z:bd5%beAqdeA^񲠎SX=8YPzmT"AfQJ~+
Ԝ scL5Ԝ(k"K՜$e6O)2kf,^Us?Vs9]69C\LGjΔ 5g=5g˚jΑjΕ5ɚ3jΗ@2\(cdg̶Vs~Rsj.Yr}e+d~+ed^2̐y5BkedneE57ȚWjn5$W,s"Zͭ2&M2.j5|;edCݲȨG4Rsj5jfa5de!^8K̓2<$m<,ajjf|927U\YQY1]̓A\'d'eQ,uWyFɳ29]yuռ &j^Ŧj^ٝj^E2?2enWe5YS,yzC֤ySDyKfԼ-MԼ#sjޕwjޓ%5"_2Y(3| |(BG2cY ̽QSH:\B,!Ry_ɜeod%2C;{ ~j~1_ϲ_dW7[w%YXOY/YojbiOWz(UEedY*s(**{(K~P!"UR*dW-پ*n*2DTYVER!Pߔ*WQ9վJ&@eUdUVYSe9/Vݭ*sT\elPu*2Y|
wTUG~֕YՏz__ʼ*2JV+̩GŅ*2UVՃ˚55UqevEA]YPp26ʢ:.-eh`^+z[Uk'ꀴ5Ue^5I9;"0;O$D`t#@"C"`EfD`+A"0CEF5/Q"0M"TΦ'cx6{MN'XӐ,D`%D` Xӌ$ՉBw"GRӉ".8"kr"0,D`X
C惨|]@fC^QT`kX|BY*06XRXJ$*0;
WT`ь
)RGXs
YJ7SezwR^/d*wR7*0
RY#*0QT`өBy*oDx*0D*0PC*0
^XIxPzDNP5l*&Z/*0
l܉
S
gS5XGT`XHs.T`^`
 *0ߚ
̎|
9@}Ge*0
,XR5z/QO/(*0oCf+REK*0
̜3^wS*0\Rb*0
̯
SrT`n F~PMT`6
,T`aXs=*
,	T`f?XتL`V
USU`T͈{"0I$7
X@LFNuD`.B_*M"3
6D`ޜ%3T`*7#ψ@"XrD`|%KD`Xt"5"0@fy"QŕTD`v2Xy@t"7N"0/
"؛P[D`XL$?
"0/D`q(!8,D`N"D`#XEq,|%Ո|:=G|"0HfkD`ns'/Z*r"0s,".D`֎̱TD`6_Df%7"0C~Mq
YOB4"8M %sx"0_,,c\.kzPY7*0
T`1
7*0_
,FR1
,Q5XMۨ\_*
{R\*0Q/*0xo|M*0_
l5נ@
8AS5T`'+1s>T`^UT`."N:*0ۂ
,ܛ
,SGT`
T`aIF[*LQR*0
DPT`v^`?*0;
v5T`
>\
,bK*0׃
RT`,XEw*
,S_T`k>O*Q5zQ52XD|7<
,PT`
<Өo*Mf{Q	T`4C;x^`ը@*0ׁ
,Ln*0L*0nPYxÉUcD`c"UU`qE<D`2XjNōD`Ϡ ߩK"07ND`|%XB~GE"0̬ ,}IQ'kO"5kBb"MD`g/D`
QW!߈\'"0[Dk"؁D`9"x
|D`ɗ
|
N/Mfc'E+-E|w"0gwD`XcCEHy"0ߐqD`>
̍&s8"02o"E;"0LD`FF1EfEG"x,$ϩcD`,##k:_D`~
X̆PٻD`!sD`>
,T`A:*Ђ
9DFwͩ\*hJ@~PT`|T`XӞ
P9*0
̷c^T`X/\*
Y/*0**0O>RťT`q^T`+NQ5T`4szQz?K|kQT`m*0
̥P57Õ
צT`у
IQ9{*0xNM8*f9}ORT`:X3ET`ԧs%T`4sT`ɖ
X*0?G/+*&Xӝ
T`lkSV/0Cn@Fs*Ѓ
'Qy/*&
̞|
,T`=
c}| kIR*0s
qK
T`a^zT`X@3l7*0oEF
*0
SX&ԓ
Qָ#"0ߖ̝'CK]"Б̾!8DLGD`7! XOJ"0, D`~-)%Ӊ|o"f0XNf5iD`3x;XxBjţD`'X@fD^eD`nXZGD`=_JFS"0F%#**pM"X9MH"8̅'D`n'B~QM́D`v?',	TD`D'TD`[N^5D`:x+F"9x:؍}!
*r"W#o@梈\?"0Z5yD`iMK"0
܎̵"k~D`\"05Mb_"0s
/$kD`;NfRa@欨^IzQy*|
.T`PT*0@9*0PřT`^fT`uT`n+X\G6ΤkfPųT`XK9*p
,ՠsyT`XXKx*fyKܩ|}*0
FfoS*ԙ
;?*
,Q*Ƃ
,>)T`A/fD3*0X/pkMQT`
,PMT`1D/@*dJ{s{KJ45e$StW[7S*'EE1c~ɽ1KEҨ0hBH	;V5d~緿qޯlSخ@.["pz8mD`_!p~e:"pO*CJZC+#8LD+K8@4NUCG`k~$\|e]8	}m*k,{]%#kv'Hߌ%p#0=pHTA"c	K`/%py4!|vJvJR8f	~N?J%!	H`Kಎc$C8ou	"mK|F/%?J68q_>Eǥ8
ivk%k),	:J`w{ICH`WH`g"=
5	쿑`	/	[H`NOK`\8,DvAw$)"	vHL	Navx%pLI`NS%pH`NOH`$pyv$p$p<\[K	^K>R[	K"na%pK. [gOy
 pq8_6}8U)-B0?]	<
.Ε#pv+߀!p48~=8Eb*_D`m(5l8?U	8w"p:.\B0K\A p<㛕؟~_!"v]8BS@`7x
9E`kJ=n8""p؎@wE`I%87C\Gp<4"@`çCx#
v7"pc[V	|
)lz pކ
\,FggXQ#5k^~WimnZ	'J`$өo5/w!-h	Jtz!p}	JD85Ne}	cOiovN%3$pD8lB8'k	n/v.vJ	l/H`[ 	\K`.}'	l%p\#=8*K'}=	H`I`/J`+r	I`)_ <	\&c=	\LC`'Ç8u 	3	H
%p%pA8!}	O^	H`,C	\%<	I`O'RNc$p,(L/$_+!8}.n%_" 	*	\A*_!pj.~@< J1#plneEC%A2 pD%WO|6xFf p=gތyv#p:C#TRN#8\]	SO"pjy>o* ;SwΧ 1>~B84F`w7Y pYm-wG#m+?@`j%#]AA`~>&!psJ#_	|l{#uGx>8@hv8Cs{o!=5l"~m	:\)#p
cJv"O8W#zЭj.k?J8K8̕avx.H`_K[7	IZ+$pGH`H8M.y%y.H`FgXnv+%p>H#$pQS	ov'Hb.?/=p7H`?E$p~\8OC	l}%p)N	\&	(*	zK`7Txν%
u$p.ݓΗZ#h	^	l$p|J%pV$p#%JUy	[<\o!Oa$py}%p.c/	\,yv'Kxg~@.	n_.<	lx$I
c}#p*a!p5%#86@tnw #G*C`Z#pk.U7C`Xe3FO#p۩-B`3N"pv, p#p<Dvu8C`@*8BpzWG|83ܧz* p(8l."G4 S} D`
.F`%vv7#pn]	\kv!på.V"pvwUilw"CT ųD8>q7/8D-OA!#psF>Y<+PKgkN    PK    A             1   org/bouncycastle/crypto/engines/CAST6Engine.classUKoU>yܱ346MyLj$4Ft gdqƑ=-2B]TQ%~dÆ  *Xb(sgƶAE<wk7 `om~$?
 bb( J"ɐ!%!'Kd6\iFNC%Еي[ײK̍z11 d61ri1Ors)VN=W:F0N0!@	ξCF\X's=z{N-:Mڮf=/]wtNS/9bTW ]|5WyM}NUm5)kRjv-6vë:)rRu)jmjɶB\w#b/"~Q@gp^d ¼:>#fn:Eo&.\
	bq	458A/0
U3F 	cSQx0VF0M0C0K0'TvP܆guzgw{y{Gp+>@u`C].2eu2{]kh͠_@2S=~	bwCeUK~< H?_ne6ǲO?$x(Z}\_׼~֒^K-P,Z`z NlB,Г=5$C.X>>}þpN+,6,(RЋbPPYֲ*n'h"3T1uݤDHҊ2!*bK
HrHO
c!uԐvV>3.VJ=IC

:>
Or#::}rӧ!+a8|mIi;0R߆_E=@D8 ?s}(^g;x	B(:-1pHc*WUR5FLC14d19bHD*&C& KXm?<dM-ǯEBME?v6+[J4$M1]@Ai>f}IB'hnЌ+r܌Y4/)Rp<C]ٵVrzӋ;?;r0C!qLm>~ߠJaok3ϷFԻ
x=vOr{PKƧ  g  PK    A             4   org/bouncycastle/crypto/engines/CamelliaEngine.classՙg`UEۮ{%; 5PAAzS!@ $DED"(ҤHS^{ǆ+(瞙__~|?Qs=3kϚ={칞"2؉Yf	fϞ-3g`ܹ/^,Xl`傕+W
VZ%X{+qFM~`۶m۷vv!عs&>}O;سg`޽|PC	y?.x۳C	ys='x^曂wyG޸Zx~O>>|XE/G|WZ
;/ѣGJ)A\\SN$%%	ʗ//8Sg0ժUT^]PV-i&HIIԩSGP^=g!hܸ --M.hڴYf-[
<L9#h̒8m۶tAХK/ٳ'qG.KлwoAff/?o#(4h`С.HpF!3F0aA^^`ĉI&	\r`ƌ+B"AnJ[d]yiب@%AF:*kحimXnDl%a}̆l!VNh8aBl&VH3S
&f)9?67?'%8ޓ[3Zbq:q6{1spJM7oѢiJ-[6m{u;W3TS1!gZ9JN[\9_NiX5/fWٱu囜RZY$=.'{B,6楄9مy'mI,?K~vIŹwlNq|q{W%I1 {U<=r8DL)TPīv?iJqʨ)c+(drUsauIVMP8vĜ.Ssb:gi="sltqE)Y9)yRjҼeS2lKyr-6װ(w⤼~>Yb~{hVplQSeg4qYMWIr
49YN.)$7;o\xG98'c2<d3sѾgX1M:ɚW\I9Źyev=)jRJnPW_|Iv}
JOoWҤg{J*6k/k]9yAa3[XScpaq!.I8/}⋦L93Ib**\EW	fɬYrո$elPfc̙C̕sDkkp
I\#'aI\+^kIZuru$Oe|JUc,X$@P.BX(X$aI,ebjXc,Y%$DT.RXJI˲e4,rY^דpI Qn7čbV
MrM$neJ_VbZ@VffL7n[n-$q`^$Zpz+n%[kd!5L'dZ%un֑:zYIb`l؀
$Apvn#eFf&d&'	efl&͂-e&/r`v!w܁;Hr睸$l[$
]$qٶ)lvپylٱyNٹɐ.ٵHb"n&Hr7{=$q`ލ$[p{/%{{d&R{e^fS}>Op?'x@O>LL|<?~9p H 5y!fl$08yfqGţ$1y1<F1Ǔg'	y	<AO'ē$)y)<EO	$<$Q:LQygų$,Gy9$y@/0_d)/%y%D/	^_$yB0%W_e^*5y5&^_$
y
Ao0u7d*o-y-Eo	ޖ$6[yޕwŻ$.3^y=G	ޗg,|@0?dR,##|D	>?$1Sf	L0>O?ŧ$33|F	>?$93m|A_/d-_9[++f._|C0-oen.;;&$@?~ď$''D?	~$B~_ů$77F	~$Aѣ<6Qcp$	?ğ$//E	8NK<x@	 s$>>D 			rA!<@x@RBH4N+VQbTT	\2J*UBx Qf͚i k׆\s
nݺn ׇ4h rCxց4lҨQ#Hjj*G>} &M@x0!0h!HV guφt9s![is$Hv ۷ر#SNΝ;CxtS.t
ҽ{wH= <YAxP
ҧOOV}B߿?d <hA2dG.Ȱa Çdȑ,ȨQ ِѣGCx*T;v,dܸq\!<AxRχ@xfL<RXX)**2e
8ȥ^
:u*dڴiӧC.2x/S+S`bt3g6`s
k:00e!,`LK20Y ׃
`q#d Sb%Kӈ0eX
&
0)X`=
o&PAo%~;;@k	z+h@/oP;A{7({@{/=Q2T8 u䃠V< !P{ޣ8'@=	)P`O:(g@O=9PLσ:zЋ^2W@ü
5+6ytț>6w@K=2 Tap?pܲWF5G߂w~= ?;O>3;o;kGm9	nq𜭠Hhn$7E$="D<HēD o"$布I$r/E"I$
NᮊSH$qkE_Qĩdq*
iQ$*s%"w_T$0B1IA%n˨DܠLɂܪQ$*pF"UI7rT#Q9-5H&7w$ZQDmMqi$R#DC.%$QWP:@='DN'g8DCj
IF$HJ $R)4&F D:tt2H"CЄAh"hJ)fhN9I4Ђ$ZZJhIL	ghE?IES,8Kp6Il9!q.sI\AkI
6$FpHЖD;H=$^ЁC@t$N!:D'AgzI
.$RJ]S8&. Ot#n4)DwA:=H'튞$zQE7=$2)[dCI\HB})`%~T1D?AJI` $1@0@hk"1`,BycI10Hb`8$1\pH\Lb#hz 1H)ȢEYQL0$F	 $`4I0A@10X
Kc4`I2}@.I
3x/H1@L.0D>3D
H@0Y&IbI
IPPtE$Q$(fbbS`
IL\<
.%KS`*ILLci$1M0teLjpI\&3H\+
W2$qD䚈̋Ȫ[">""r[D6FdSD6GdKDnWRa'~W\?jήo߹3yݯ?Z6<y?R֬Fwb~n=n
Lk$Y*sdU2/IfY\m1bj5w[\'2$Ka$nRdLI%;,vZKd\$[eje@%BeAFYd'ɢ 'Inr8\,,&Z[XLlQf',ŉ`nb0V[\̱EX\j1bt,fX\nqŕ3-equb0"&1LQt*
Y򦰞Xr_W=W֤Yr,*"EӧOť^]fm>L=|\51xU,ΎYxɒh${*SטQ=Rcԑ[h?Muf65Z)Ǹ0ƨ92C433{=\2x'۲{LۛEvzb32wƆ3$Ì?0qa0N30qb߆tc\
'2:6e92/ŕʽ2/ŗ~nRp]ow!ǟ|8zYv
r=E+6j	S'#ղ^;gJRH
v03Ki%]UMhFYciфm\O,cSp9	##
Ffj
'v<w.WJoWJ+ug_E#+x%+yHɑY8br|4aop?6qĸd},,yr!sm]8r3ʙi?p?Px7	
%ӓ\K|	{G%XYħ\NwO"K_U_
#5
{E\!.5-J)Jh|z4aͲ?+%TɕU$CbfU}Ѿ^7KC{>S$Gғ#pidΎhj5%|-%
mYI#G%htn^c2iAzqqOwO<7X$[V-jƊRwc؍UVRbZǰ<A,ĺa+-EIH,FRZ|PJyݒZͽ6qevK$dJcs§^fRlkKgړ%6+ED$ZtVJ%R:/:21U&&RR)3>{lJNfdqUjܩ%+c?jCZRU|Hbej~}ՍU;nj]	hB.+ۥD7x{f%w6d~ƕڸUWjGF'1۰Y+o]I;,]LJ|mɤ%W2k-yZwbve=tKS}rrwgXIEJ,/<t-4~
'.RḴH$XE`@LQJҷ16}9&IUFGUQjFMKH΢#՜`-_?>qMVƍVmoovbD}9|y)[^r9Lhr#eW-Ӥfr
˜n!qHL_IpJ4ՂX6LO =9IOH_DbՒl-=&0sͩIt&Oknߩ}2m)?2j3{S=Oܗ;XjShK.zop޲'X7X5%7E31)XbIMLRk=7غ'-5oScwp]>j
*Y(|eAVlXs)_8~Gl eҿgx'DB1d w!=
jF#^6$t&#C=>/\lZR|b%
?o=,al+nX+I{+~%K	ϐ Kn˺AxJ 9$.9$>9$eƇCH؂L[3İ"yJywSIٞڞ؞*ٞ:R]Op=
s= t|x6yjX!a'b،Q	JdrxY9L"ɪaSZx.Y=D5vdp$Y;Ȕ0 UɺaƓqd0<=lO!d25<l &E6	ےMd<Ik-za_UxyV؛<;l@I'[6`p(6&ۅa!<&,sؒ]Ð<?< Cvې.d3lN

;dfX6$/}~a
؝ñ䠰98M	CSaa7rxXvD#aMWne6]"ΐc`}Tc
촍3!>F	gh`TQ2?h'Ph5EF%^l}Sp9G/51T.4~GӍz2a&kJ3TFaUF]g,lmmTyƹ&#?8#586.0V<.6.2Qm\bƥFMq,<jF%xQx	ζqQm64p\efnWiFmq/m\kIjz#m`FyQlh𴍛|`f6n1Ao7ܧӨOlj<wیFgwliOwƻ
lc%66{du65ψMq96>h0!\MG:GjcFO5'mSE6>mσFb!gV6>gT{7L/qdPƗMPWzW
sy6nT04g[F6c䠍7l|ߨmMmРƏ
Qn6}[>5ʽgl`_q~iT+6Xi7FgFU;m6~oF-Gt'ܺ٨i6bpmolݨ}6a<Gc&8?r/#FSb4g-0NI;n1`QYSe7c^+g+D-2M2KN5oiUǬ3ehWc`u^`Q[q4ҩjW5<ZaiէQ?
5xV/)F^5򇕨QzFY75YVFmMj!RvZu"kSXunFYeM
V`Q۬U
l`VYUV)5(k&Fjc`uQOYۙ퍲`)VFYu2ogk.6jִ&-/0H7ݍd]k4򼵭QXXfu'q<hkUֹF.FYS4zzQ6}l`vQVCbkTξ޾g;	ξꐳ} g_:}rU}v޾}w
Ҝ}ξ<+;M}UOo}Ӝ}S}W{Z}۷og_+/&z}o_,޾b틋}क़}Ow+:޿WMEO_uybS̿J_|7z+cV1Ug{o޿xWx}Q)1c9#޿E/Ez̿q~̿#W:zG1֌3b6^޿L̿?xG_W{E޿j/ۘ7{;_Sb}W}oߘzʱ{↘/y޿"ߎ޿oPWފxj_7޿*3߱1b̿[-Ob}uoM1V7 ߩ1U*7]\_.oGZuu/;q:B_Nq9ο:_WsM2_};ꏝu}_W;:ꗜuW';iοz>w]F_=Ws;'cοz8οW;껝ο_=_9ο_}Wwէ9ο<_>9\_=Wgkt3X_puEg`X?:5z3XCg`3Xs㝁3:=3g8qg`X::X;8z3>X{:#X/q֛Dg`X9c3:7g`303~Xoy۽u7o`ho`Xx볼o`Xw-1G.o`X/uM޿:Wu-_}~W?{޿Q_WWy
޿:v-޿x׼޿[_)x_}~Wo}޿^/7x+)޿L_Wgx9޿9_=WՃu_}$߫u_=Wz)޿z/'{o޿_]W_{/޿zGx޿y?W޿Wտ{1fy޿Wý޿zx<_=Woy+޿z{uWWxr޿ĿXοۭ78ǝZʧοWd8οrE/>wUοWupU::{ο/:Zοs79οxW{Z&{nvU;;οAE_vEWߠjοj<οxW+9ճο8fο*pU/:=ο7Rq/:ο*WuοWy|[QW8oWvN_uzοov_qUg_W-wՓο/οiοt
Nwל)_:<QWsοA_4w
.tο1_|v;οq/οAK_|L_޿7W_5Wzbb_4_57hqoP5{?Uo_/=޿A3ߠU_/UcqEzczx6޿޿'_uvx1W
NY޿A
"޿Jy޿8Uռ/yWU_Usq/_Wy_Wk_|{b/Ey_,Uy"Wuo޿Au_W޿7Uoexݽ޿Ue_޿>޿{_޿8WU޿A_UW;޿&ߠW޿x]G/PKAˋ(  K  PK    A             9   org/bouncycastle/crypto/engines/CamelliaLightEngine.class՘	|SuOz{CrZEmӦEA+ -H i$łU)
Ό,/:83㬂~ޛ۰y^!_8JD鰲soyYK)W?OyQe[Gߌ(*c^vj[bRsz;iF;i8i¢Jsmd/,Z0FIEY)cJ]VZ8$Ða8ôRαHK$9cM5*0yS09,FB6OHKz?FVldfL~!zR`0KfL|e.2/
,SI&x$a֭H呖$77F=FUF\_:9֒HCpF!\EoʌU`fX|jK}|Ek2kܦprb)6/UmFפh~0qo%kbSv7ږֵ56d,M4p끨hPY4TVBщe3d8̓<uKJR6&O
ﰑe*ʽzy5#:;$LDdYk4ŶgHJ	*L7ZWԇhLOhLOHks8n&R/ԇM98(nƔP2TniJ6eߝw-c8lw]S6%j&fcx2"Vt\'NnHSsrisYsh*(K?
[<K[1$5z7㴳N鹨</1'Rq>U
rv@D]=m0o5VT0dI4i4V5TitFjTeMר
UuUuu2iic3{i,cp~Uʄki
}ɉc{N{uS1
uS"yT񂉂KYnInD}4i
dqlu0sSZP#GnSM4Mek,,uMEHqAB	v"EEut ].8\+X-NFp`:7n*Mp5=.jxO5ӄZsC6]3q/<քa5jF!rQZCaMA>7 n,u088]':^<9_]q\\;Gvx_$?.93uUtL*9wl{mRP[^l7a՚.vߑ~ѯүJW5J,L,sɥ=f0nT	a:TT´fV3ep`F4!kHMrXACJڐj[w
W2[~݇v}/r<̐ǣ%!8e$'(?;ۋVE&\];nqR6zAsg>|,ghR)A4
ksX}X`<'Nҿ%v`w1lzO޾@~\˱tdÑ<<歞G_Ԓx޶ذIRZ-];˶s'==RV֍T'O1 sVY(ᰆGjٚ/a%3ǺdCC".K1ZTxwim<u3.'
C4URn	Kǈ\#Y[hl\cdT"iNH-7cyx5u/ #h!P}%Gн%G~G'Ez+v+t+ana!vwY,ȿ@San9aeJ3btPk99)bvPô(9lyڳ5V
˵
ޔc8.Ӈ"O2o(l&ůİ;C!@һ<1m3UebQiNIox͹J݈a=nّk7Sszpg9kJ	6#Us}pUpvEom0;]J3zZRdmVVʶnb1"V"i
k`++<J{_LjsYsJn"iؘ*\G&vjn^T/UY~s,,Տl^Um ߨfc>㔺^	2nnd[쩟K,ĪF:uXU밪![ ;jHhI찍謁iI*&(bڞʙ-4RY2h<mP/dJjLRf?5cRNR+c\fKy;2f%
;6z)ihhFWZNwf=NP 7q[q[?mq0|UW\h	5hݤȗ<_\G].xwvye7aoǾT;ͅ.w-='ͥ F*ꅄL`Uo͖8xO|'' S54iz--殗iL;kr8JbOI4J44Hmwni)~q>y:@|xAA':i!zxeɟuzCe5k98>hD&RwIyy]5?hd+/Ej>H;9Rtf4ne_Z9H⋃s:c̵Gw'=zLkF_Cǎ!Bԏa+*3=}<<lb|.2|GtKd%CN:f#=NhFPA:<@P5#tz@U<N˓(}!FGA[kv^[tpIMP?5Wt5X_5~t|#+<t^<dfG}>0ٜ`?\> 308W@/C`
<?ǁE|_ż,E_K'Xy48
E`#p$_	Ev`4|9x1q3	|;8{Ap27S88_nrdxV og\o2X9+<^ςx ~"
X?k9<G-0`#gM\ 6s9~\}(W8l῀1U<wUy%x5y(e++}~\ŵ|\:U̤5MzZ"r_+oDn"pȭ@6 r;? rJ] r7_f5{}|
&.o٬
wE⟉<=D"/EE"B''§"[2y"r6vDd?"y߈"{!}|~%r_1"zy9EpQ\/rKE^D^"/sWc"pȫ|D|7H7_""sȷ3~rP{.o>&/'C&#JO"?sE~E~ΓD~yy?E~͚oy?E?;Dc<R=D>f?X?"E>DD>B"5""o'_'g+)99W|_׈Gk PK]t  !  PK    A             8   org/bouncycastle/crypto/engines/CamelliaWrapEngine.class=PjbZd뺩T
~IBQm"&$y<w }	v	E2&hاkyىy$ŧ(:ޞ9t/i1szAPt:5Ov<ڮHVe%TTGn8SB+]K% uzwxPKa   6  PK    A             6   org/bouncycastle/crypto/engines/ChaCha7539Engine.classS[OG_qb\ڔ%
))))8575\USeQTR~@_JR*@A"o}oz]Z9sc o^(E/+zvfV2#vѼc|^yQ<7ZV&*-*#Xb3Mo)牚ݘWWp9aKj.3\RjMMphK=tvjqHb6/縂ᜰ+-KU-\rWnQR*C"Uq\SnWyh1
hH0mᬚRZb.f3+e
J*l5i:D:CDu0.$δ+
*+
}VG
'oK)ǭdHk-1ݚt23cX"oJ>_"<;7iercοFf7
nѬT9+̎mu:v WCusi]!~EG0\`$k9G"u6ngBiCB ^0 7ѭbG8U0 5$qxG[1LNd񮂜e,qߎaFegz9LCY
e	ӄ58dnШ,#;G{)q~$~A\Ft2'*9dCqCgGo&X~1+>kd2x=Iu<ix+l-&C#%hU2xTx".)Ocd3~D[~c'ݫOHױ%wƗFK(%&_b/)g0R'jҤ
{>%^bdҿv8#Lm!y}`X=@XXc=P^$=	VDAh~jץ@xʤ(65PK6    PK    A             2   org/bouncycastle/crypto/engines/ChaChaEngine.classTsU>d&٤V
/I%)Xjh!hZmra3#3/pgxґx&Mir~ 0x"*j_*<TlauǽfsOu%,
|*r "Ϻ.&?C#='B<]WitfW
raVmŴUj5ZS5u|yEu^4ga0M^afivK,ZtAj<_V#슫~gAج+us6lfݴН7m4j(e>S-7Z;o&Rxn/5*]5ꥊDn\72U^dUlTXVͬs7fӮ44rXt!vȦR/ϴ*Ւsh뼥Fns0ްʙU\/bU3S֛v#㖸q[=88EfLN{-Rfٴ8~1QahJ-L΂d5U,-'vm	*2g	0"*>pPC`jtn‥WI{P};^1ȋ^Aɐ&(d8 ,~ʰ2!2)2Cp$3M-	&m2Y	O,y	qd!:At8#0#	#.>F	9*,^;g4	0J1G)8r8c[|жm' [I{.=-0ۄc&,mN@ ^qNUqQԯnM;ŐsJr:Y9y׹fB00 ܻpm|O`sj	휁B>w%Y
#~wdLu
Bc	JJ{y ǖ-G@)P+z1]9+$ǅ9ە_*?3n9])u5& ԙ$~ v{݅~'TPq%|.w߃C̃c8pQ{(w!z=eOrc1.AmGcC߄K<A؆(94w(~OHH
mͿ
W\!zn12{unAxton-L.'[󧧵@Zh<_&uAӺ)8i
.H+aM	uYSєpZjpbބhJ45% 㻒dBaŒ7ezY70^"L)2%{Pb?JpQ<t劳+ԃQ
2Y\	eez؏rrII$?NA"HMJ܁݃ TϊYPJG	H)F:'~@=w:ǻzPb?U÷O=uܟDr@	3eNQL@9#2%d!5H,L
'7d9
(	\HFB'7rc,A?ac3 'Qr KPKiӦ  }  PK    A             ;   org/bouncycastle/crypto/engines/CramerShoupCiphertext.classTmoT~n؎㕮[d2g ZXJB:nhꗸI=Z;J|?O  HEE+	q_Z|{?m<!ʐd (vCF-ri^VAқ[&wdGQ& J븎B߷5X3l;Xt}r{6G~j<Zp1tS7Zau`{7׷]y̵W9{;з.}5)+dxo3wg{klzߵ.LFg[0dOXoia80|M>&^mA&qgcH(X-KH$h%* Ẅ$p4m^lika譗e
RY<LtTx?
oKXPq"73UkPkNE*pAXT1;*^A%w7sSfI
JqXUP27pC{

7ґz;6nRXjGx)bxd7"!#hqÈ26Jo>D(nh!4H55?rMzT8ʳP*wNUU \6DNI8GL1
?GM9ڃ˯$dy#_Ncdy=_M7姳mJbN8Bo_Ml#e![Of!"KO_Q_tr[rX.O*BX]hIE&M*r-N^lw4%=gYk0_Ty+\^HAxjCZ/Z
i9e5%
 PK5ro  X  PK    A             Z   org/bouncycastle/crypto/engines/CramerShoupCoreEngine$CramerShoupCiphertextException.classON@$Nh((xn8)f2w%?/P!( 
IC:$H;\i/ĥN>ȸ:GJ856oLE&/(&&+M.N';LYOs*Yd6>?NBlhlL~zt~vFZh#PO-$F;/OeQ|4֚lRHam^޻ 5BNspt3ی[h PK4R`    PK    A             ;   org/bouncycastle/crypto/engines/CramerShoupCoreEngine.classW	xVJ6	(7
(qII)Y{YV&-.-Ҧm$CRzЖM[J>Rҙݵ%'y3̛sX!DPAu	H.nuq@0t{@8־vfΤȪT̘%4Taw[,ܰV`IeÉF_wSf߰ch3QhH9
+m[NYaz#R?׹Hm^g5~#[73NDR`V͖2Cj{&*agqsR;&=k
g3HHY5mvѾ{ufFO<idJ'U+wZZoʴ2aO*_6-36YCRܘ}F2o0<29.D\|9w'DѼ}qqlTxVx4lVc+o-r^㏯۷T1
ot,1}F#˙F7iYF9D2s[ar:f@[Ξ7}JH]9Ǡ溤Aoi53gP,p9?ZZ(2(BiǠXKB)`u=`>4Xv_KϤSzI-n
X-mneCfm2LPѽT_'ei,5cHDK|lqLU'#ةF=l, ˉfƠŠmRβ.Y`)-֊.y!.(Ǘ5e%K.wRNXY(	eʗ/^m:'IɁ%'47Lfö,P&paǸ*VeK(r*C|׭b
;eX%bȸT:˸BF+e\%cdt(26蒱Y+'+/_Ph8$;/J)tk+N?cK˙Ůan~	,(7-	.0PxŶ<;;jE<i.;WlylvMnXobpƧɑiHml5}-+rn)#PF
wgx!)^ WN]Nmkfr>rF53ʶNSyNCwYyFE#jT\ZUpT40lcp-VUƐX̰!Π""k 0b!*^Ei{TtcXYAŋ0pCe8a/ax9^b^4ex^ܤb>nVьײUTM*Z2\ͰoVт[T\X8`.(L}gb 2+؁xXA`ee893|0<eaLA?dpZw2aW`+Hc\ >pTA2|3)p?2H"3|Dۍ+
9|;{>Bڬ^z,z2٧wڞmi=}evuzOڠ
rzRu[nBTh>J|ߍx>xS	Ajoƛ|=bZ!0v`Q(v'q-X<+o؇x# c]'T*c5Qfe#"ped΢oť U4zl5H:{߻wR_Π')QV1tVv:^+f?5cp=<Nůiwaoiqj^D܆#di}7%Ԃa2J|R-Zhuu]9=%qod)|gS?`-!B:NK{D6$R8YӼߛ˹)y<1ޛY~:]
ch&F,<{jWo+w$1adGbEvCsAɠw2uS'M쯿E(ߒ-E(Al2'&]r3iRKViQPZҪ%zBSVCIi*jV+i}&YG3uVsWm~H"]Ǒ$$,[[줕avkQMTb( ؄
SF_8nC]"ny_
iRЭxn$oRmhtLh^$QEH&"`(cO)VaI{"*U4y[q%o=QJZzhQt ߢj?(?SO8o9S& hhKMO.&x;]*	jڭ5]Z.9v9:ǩHJܤomtv/WD
ybLD>Oq	n܇Tz!t9Vc(1$DqK2#[i[s2?'FԺ%ՈPK^c	  )  PK    A             9   org/bouncycastle/crypto/engines/CryptoProWrapEngine.classSMWW~.qt:JcQ65!
4)1$cl?Mu4EW=jI:s{yqg2lEF0p+FhYXbV-a25rSp&_-Bɻ|owݴ@'\)m䣍I_L{;of4,Cq%o=n89l꒗u)n+m&ֽGn~7+7( akzVJt`dH+ť+FǯesV}Fem{"'s+.xeE	jb}oaь>oes0^Y^9ww
ȠK^.vqhg98>8artsp|`Y*8IqVml#Iz_n<Kփ]q
LG':t",t,\ttaXF4\!j%
5ĤH
qMRb\ R1a,
1!Q	9]dz׋>\[/شI|2`Ci J/LtT?:!kdRfch}`SJK7Tѿj*$ˌ)E)Ŕ_/SZErwELsU؇ʱIP$Bq!4qM*ͿKSOIIYJ*RR5T'bʷjýcZu"l6I4CHyR!Tü*T|jSUSrZ<'RZŭ
2&I1VC4p>GCm|'K	c`/7v7&B4wu=;?YBW] PKxZz    PK    A             -   org/bouncycastle/crypto/engines/DESBase.classXis\7#yӾ}FH:6``,ZG26qq!	,CHrRWC~F5szR*۷=}OfgRj@m[[2[mLæaӰi]?KEEKO1e-<0faY@J
)Rl	0d-@̶`R!@l	b~;j
0!&Äp0rB+a0ax	+Lm0S~@3)x(x(NYG`(F	$$PJ/Vπ}`m
)ɼ}&ܶST쁐r`IA,VյՍ	ObSwO=GKLb>K#4q8R)aڽmiu~-~`mCa2f2,¶|k!,-X~`k+OKյԵ@!j>ut~m%5h]?ZX Ol]N-?}lc=|"oϓGS[%ʑ)siW=3λꛅ[tzIL:8 <xp
	jZSsjP}M=U/ ~ǀ ~
_ . ^uL}_xY`wk3GO
9=ǲG;_JVj]|
oJy%(ss|.?>̯Ϗ'F~<ʏOSm)|+\h"߀
ΪrQJ҉{U{&F8zJ^QNڭ+p3WԻʵ/#"{	]٤/W]PcJ{T.
%ϞKG;ZV:tE5Įf.JhHntR|Lr}yf\QJt~Aע1_xfߜ9Zdi9~ϦvNnϛ:vj+`	MΙin`SԚG1HF'|inHRW;Dz!]W}W;-v] vLݲhqr>QP(}7[Cx= k+U?crmy5Wي'u|~j9Ls9MQ
s0{.\,qQ9xGaуO9^47.jϬڐIn#>}<+
ڻ5<UguDL^Q>o`}512PXl}ߺ9ڛ7G{h^3\#_W/hg/Au~xDȍswpͺ~hs?\.{kaPxW*>`)G{{ВW=~2^hΊ|kEtb&'Tfrrgr;NDgջj,gm9oEts_9iqギKcxF'05¸aWư;PaBHZbK'2{z[#%/gᬜ'+ghY9Cy6'Vt-O^n,BpQ"[@,e#.
Yp/Xcer=*X+u`n5:-XuE0ku`-ب&=.ج[t`nl5:л;q.=&حK0{t`.Ӆłi] 8d+Zrl[qQGuP.z,dB,$	muQP]JC3tˉ0z#Gc2x)EUJ.U*Ju*S%p/Ru*R&NJRUJPUJ=T*
Qz4@^'oZo]7oDҤtUag
KgYh]h=h!4.~Wk1I[TKS.;ʶQ :XFK-XVhvD%:fIW=4 c#5a3]ZgsW9t2KYF${ɡ:]PC9lL{x(18SN0)Lky<<ڨ@
Ayy|9C	l>T[(E! wqk)@
@b1ֿ5?TZ,?W?ұc5@5ӱZvR NiI3E~=L}Ofd9Y|XIvG`Ip	'q[nwK- bKX;Y{>/]=cJoG@N_dKX,1!jքcs@&uw7s[q6.,'-JpqJp;%2$410ϴFQ:m=)۶
≳"xuRvO@KJ(DHA:%,
&.͇k<!y4e@
l4*6Qj@LZYL뙰dAb/tQ	Fmf)D7@t)ózM>86L:h&!F6=&9c&8M&̤Vo_lϤ1[˒ϱ1ԣzRE62QQE=#_Cij+VQvV%HrXbOTQJ

l#[Jmd.vIHqzi`A*,P%D{bSP;b̋  ?X2Ke|79ֿobdY `Xfo+-T R)
d*a6pW-MuL`zFhF4t3)ͭdFS;u0DYr7%# 9,*4L9hN=i<S(B3E8""!	n
d>`5O
Y`DK0[ C	)A=$=
SX*̯J)hL(AF	n{  HL$M=K}dOLi cmbY}q83NӤPVotgϠPhʨav%(g|T@+4]!jp@)BER(7˦̃(KTPRJ &}4ss1ҷ1ڹEn3x)Ǣ34`i:q{x9ИbY&ﶺlVPKS
    PK    A             /   org/bouncycastle/crypto/engines/DESEngine.classX	xTu>o̼a<	?}IH66%41:9E&M}!m%uF1`CIiuVC|===oko"U<ULLLLi$*$*D&g3|d3d:eP<6$I4h$G>[f6FE6JaTf<[*O1x"DcٛN!e3e9Ca>هO|9'$S|8+dL_2EfɌk`K]l-u.3(+R
))èbדxROjI
zg;*Jc"٘XfӲMO.~Ҧ#m
DdEw%+wX>VFEē<vX]H=vщ]{wrwNT%RTKh&ɥĜAux0q˦B:5yKsLfgKĞ.`7 fA>ٞO7!`|q1g;Ssxj2+ݳ@ʌ$R6O5Xc95kPtfgj6sx1LrD&M<LIfmL2{⏳0ҳ'O͗;K;SXd7.{c
lrf1~)Ar֛Y޿?A)^O.Ӡd	ϰ,/r[y8d*x,Dc!VsEka!1_-3x"yh6+A
JY.UhLd3\\"cPm:31/e(mڑ\< Z[ii=6wRD"Dr6tb>)[Y5WmVY&[^9_'ǗdҋL6)]x+s]lsb,.hԠMlra雔GiOsߠn:gH>79l<I3;K`ߠ@&`ùnɦ4BpR^+;,ZtԢYE?kYA>d[-Ed/[tҠhzaРk:!r,7@SoW+f]ѽMP\x3m7
\6yh|lvFT
ӯ0=-10=)n#Xx~]{X~ӏB~P*LM0}}G~>ӏ	ka^08n~OdG|FH>+'*g.)W-7!:K?B9;HO+,!
\^}A6'_ѱ#=ݟG[</,5߮g_,$]})sSaa>z3/syy,
c|)tn<[27;7ɍɍ+qcr&E|uW|5[Xi#_
1FYA?A9FAyTq%zQS9z>?cЅ2Nqqz'A1|΁ӆyРӴӆ)%O6ΈY.»3L.Ǯ_TGsJGy/tBI1ʞny[semZRI1bRraAg 3r^.v>]S^}+Q}j0nP
Sy7o`k]KY+}+wcAg:A+;Na7?o*ps2wmt^kyq?T	sCfb,Q%7!ɓW.T\zMxw`o>AKn8)N!n}u<6Oس}mnbOt!׊BV][$#<(xduꮨ0X\@3xu*"ˢWEgNMd iI{E||F[bEF}C|B7f ko7gTͶwpQ{>f(>Zqp
kZ&k[G\s
3e"r֡r bEf@V>E[m	:fcEeUPYud8@޵j:6tl?S	#.ǔMy9W-nun?<EJS5	uDW+Ղ/`eW~կkg97}o\s
|+r*-Ւ\cyɷ?(puߜѱEGvh|t^w>l}zXwb@9Yvd]u>>vk|
5"-9őg/+ɷNg9h=r=uј\|J>3#:WX@yS1Ne*Ƨx*f[S10X5z[m>NxԎNx,蔍,d<f;D-'vByQ!dQ2##>
"!F1*XlFb(0lћ\c=tNoy2ƍ<Y)2l1Ou1TUV%*¸Q16)tOJ.͓KͤR*X76AXZT-cX+U;cj`T%c*fQkUN
3֫>بI*Ev֪T/cjePuK1v0cЫT!c%8FWJJ^1(u!Q|XHV(d,D!]r
YBJb:AT`eŖx/wgyy1;p.R	XRX
^R!X7R**RXj
R+XRXjK`,mK`,	{-8i8um8CUqiFY[Li|ii~i,9AJ_}=n+NtXN(`S t>i)&xld,qKesvB{DZU!jR#kCب"&X5#Dimt J'<w!nj/tBP݂Z{܇b!`3Y/B@077~|` &(`U +Tr 
M@C%@Q	Rjb_l#^% LT_k	!P=`ԈHQHj3lFZ
vhv N邇nxAfȲ"@[M^pl	nGV\/G|=\}SN.wjjjAw.=|rwJp$*"߅ߍw8_$pQ8E|{Zy
ա`]d(ۉj&6_V[6nA] 
vEF}Ⱥni+T!0̶WrD`biP3
O5yNhBD&Lф&+~p5BB~kכ"*%bX%epXTHb
JG^5Huz^j0-`^`Ռh-~
"]:NEGgӋ}zHm<hVk9 C0D۵\B^ΐܓ-^Ry1x|mQ4F1>JC苭BݔYt6p1MiZ䘉`b=Q
"J@ĮBrfQڌX-p݊6.:܉{ >,<map )`tx	Z#&JC{l+<(<_?7$_?OH#bLԿw"a69KĪQʜ*`U	QxY
5NG
ڸF!jY3\V,>:LA(&0٧w-Т6l0\	P7r$T		cQd\25`8T	&(.0-0
j@>5 )܆<0 R}!dS-@0(jPP
FA((C6@Az
߁@vQu!nd҃{R7A կAEmPoeÈ]F85#`\ϼst}0o5M``~P]mA!=+$)F
锰PHk,ԅB8?܌jRThU4E5.jVQ_C5jvfj6lN;PNB$m>[Du [mA!=v/
PKӨ  "  PK    A             2   org/bouncycastle/crypto/engines/DESedeEngine.classUmsU~nt!P @6-"Z
iUئn
q#_3ҠuZ3#YBܳ<{_*#*「Wd$eHy8LNfdu܍]Ҕ-OddFF]M ˧9þDfA7jZ*ff`M045[Rjl[Ra˔:3Y/ۺKh~,qmM7]v;͝gh3oWJn7ef
5
-^ЊY\e[ddC4VI4#4+%!#(bةNgf:MnSjIiK%DR}D
52lkiC3i/z4.tn_
K5aZed]Ȕuc$ƚHqyA!!b١yTl[`8`مEW<in=ҬȝǪƞ*BuR!y=ϝN\mΝ]#@{҃?Q_mt?ʆon̶JvuN6ҁlFLb8_ˮn8׆NZzE~jSaUJE;sex}DWsյ:H]A	$*MB	i	J%ሄn֑gފ뼵%+3#11MeNfu&&Zsa`bk7=:uݞM\^!*zJ>"=+x1o`z삤hTq(
^y{qA*f
SE`ø"m9T0ixG@^A`&A=#,	0&' -s(D0wЏktY}|4׌ϝJ)ӎ)#CBTl
8Aƛ$hKB~FV4% P`.l.;# Oުg]SF0rq*\v, '|ʰ p(-|r!};hCXxrCE_T k8%vB!?xR>HET4ᧉǼdGNG[~_"||B:%3	d.4'DԂCO뿕F ƾ=uE\$4~-*Cx:kQZҷ5$_;\QҞm{IFe4B߾vQkpkۮ -1	҂jJ%BE߱M!{-  PKRg  
  PK    A             6   org/bouncycastle/crypto/engines/DESedeWrapEngine.classV{)v,QIc .5N%]`ub74pJruݭRJY.l݅]
Zr'l_=a
{Z9s`r;X 0$^T	%tH蔰If\@DێhN`6+&j"or,KeޮP cWL%̓~֫NL3KFJ7+tu(	8,?5Q|b)t۟7J0ƞQ-]:㚚e>oR7U*]Wz=e9ٔee\:{XUe
CUJU
7y+J):Ք7TRWTZJS睞)@N5jS	Xk^4<Ҩ-"'~w	5?[,q5Gd
Kfy5mBY-Q6~츦?>1MBGQФ!6GsJ%?%rZCW]c$
I[hZr6gYFYru°t⛎-`*OH,k>u壼RAU*m҆4M=_٦|*:n9{ʩzM<2[Nv0X;iw(jmS#}>j'ijK%(P+!idn6ˆg}0uvh0S"`Tt5RxYuq!Y,67ȪVG4w\~4A$FzĪzRq	/ C}1I99c^J4=}hIy[D<,c"zD|\'bGD<*1/b@Ġ}"8  uS'`GC74KCIҿdӞv{LS~us6-zE'ta+kP P[.<g{^ww}p6zY\(xo
UЅ
آ d7'+ȠS0<
# ;(E>O0ن5
PC~ere6WpFN&IUŻ	`+x8gRe29&x
/qI|wx߉c/1Qdwc8Ny&_du&ߊce
&ߌc_eBoq
/2r>3]A?oK}zĴқO?{HS-/ ao&F:X	`F+
"&X/j
iR/ڞ3s:2wiz-L_3Jf'8^fi\Ʀ@1U3!qo)ɐ3^:^.l'~B~GgYv_َNێI7dW߾&3ZyYHH~Oۢd]%ڊ1,a7E"WP(#<ZZq<K7:ߕz]j49gT
f56/,F5ʹe|gpGTcI2Uwc,HIR5Fgˑz+ JAh*GC/<k#mx d*/EK[8bETKFl-M"}I[npp:"#F3鰽! "6i?]3%6d5rG3!Q_3Ff{Ir0J:,BVjѱʭ1jq	DԸ HBb4c	I#ۻzЋ]WtUZXѰ$#ʜBo<hd$<
nxIF,~q0SK!a[R7q,jf JE=ץnD,gtR+ҵGyoG0l̺ëuıxNz3БоzI<Q(F/oDw(&jw%8>_PKS3  8  PK    A             4   org/bouncycastle/crypto/engines/DSTU7624Engine.classxT7=LfLN%"!!fH^RS(
ED]қ
`Ob{~5k}'yk7c9Scb=1
<fu];3v+K]uɝuP;Iܥ̲r]Enl5<;+'*7_ZjfSxcΨ̸܂8=*+#;+?s8]r
+923/ 77.tn^43^7&sRܸrĸ|9W]ZäϨԫW֧WiܤyJKSKW.ma6XVJHm-]6qLTvfΨR
}rA1bD2'˘4<w,3i_S/Fdϛ4]v1\MΑY127#wfȑ2f*=ԙxeNu*.#Lz͗NV_\Bf^NFv߂=7+g|Y#NKa&dZ3gdgJ钝9*#mި±9'\P?aK56_9a

3;I힛3J7J2zfMl]8V%ҒKV#JW90i\;7oT0yh'
ȗSP˹)YFgI#5<3O,}rFҟ! ;QIp|?;~xiK920 pqred#mggK&9Lݿ;_AVv_5)"{.bRF
zݽ3G>./Wj<Ig^f~4\60.t)[CJ)Ջc%v/iXUN-,O-rs'W5EZ222s'hg٬ߝ材7Bk>ʘQX)]8q\FΈ3yD~stFGO+`+LCh״?.\0FdA,
dţ\L|W`q]j6
&mڸM[i6ݦpnmzUnmMH߽LR'7a|	ܪ6LOޗ4|,Ϗ/
~pZ㄁^3˖].	
^w
{ Sk24Ӑfi5u5\
5$jHpIF^s	*&kZkBCg
]4pZ46^sQ1^s54tMCGcf\Tӽ~`*y
Z!ii&hcӰ@аPÓiX)
K4,g4<0sffiüf4oafnGý09y
/jxIiXaVkX
k5Ӱ^
5lѰU
;50sfUa~=34lְMëbd҇F`S?#PU~3egx)eM>}vi@6,	yrU9q86ZkYϒe֯A)|iu@	\?9	9V0A`)٘(3mr&&6*HR:shjX2yy'1qyg}Jr"18.ȅN|92!-yx-fC],z`3ycT~ω˪.Y'BlZ`>]=ʕ$?z'^>_{6m$ڰuYk̹:F0vL;Ds3s9
G7.4~X;=ıgzZ'o9C&ߏS'9X)-B6gJ~GM铩l¢Λ6J5bϙʎ3ZrI9^+ؒ
vڏvVJӝn0'ի٩>k@tjjRA
MڸH7热zπhO7ɹ{}|
>Ĥj>I6oS]r_WtҊ܄,1D4\CS5%fLGe>+~Zb~N>|.?_Lw]*iʾ+(JM
?gɢH<ҙ:&<|Ҕ
C5xAjGvrvuy6ܺBsNiP=%`in_6	̈́LiUUy[ިU^ߖ'<G3)O][3pvTZn]ׯP7U71'WqTz,кޓoq%>dK%}lS,{p⃫HwGgGmѸWUZYgUɗ~DJT]jpDq
s)A@+ǘBS=>Oq=x<)6\eVŵ{e8X{-9̃xtpFZR]MD>
8'۩]y_ݓI-435,
b/9BBJaR#Kη-m%C?ܢ6
ӱLU6H5*Yw;3)ҋIYqvTDt M6L±+5AKsehw3$$U[0ij3TZz~W4]%)na~sZjr]3S.7efwc%r92nnZa9\aYըe戬V45WAF8%+KѶiZl$OFFb#QWƔ+)֏b#}3bLT_74~LD(>^}-sW-x^_˫wOha%ϳyOս}~k.ݒy	 )-68exDa}oz~^Z6gfk(֌4w?o{˴}i{˴}I;[+oM;[+oPS+NitJƔ2'*q6ƹ8-(mǃ	;zŦC#sBn%uֺuԭG։
n%u)PԭSu0-URl*)֫źPl/ņ-)6bszOwyac+mm,Sq2q|m._G16V	%/
Y]E#=c<
&)m49SՌ/17LMsKhj-&WJ9$%ͭ'КТ6~4W-['xYowV7>-PqH85pl]!~w%g4S0򤤅k#^.<?J.<T^nl*[e?\JDb^e&d-%tjRRzPp_HtȱŅ,V2XRzx@遲"P:v>uգfxo֬?r^!xBi7gͼG1oh
kD mvz$Q5~4rŋ5֘Bdk?D7ۄ8FH^u.LJ3`h|v4v*Bheohg=4Y+^EJZm;07{arEi}IHEH9+(?[kҢ~-R
r~D?]1R?,Y_SCW\_W<^cfLuN4fuO1Y	0px-9!<\VJVϽFF4o
]BkVRj[ok@ɛIwh[]:\.%KrJ 86"08ex,1?$};IrH)2I	n]t|ϕxEJ*<I$*$i%PL'BE>Bd;kQ\Bɵز@e/uϚngáRgPIpìK8m.;$}@
Icxla b% {P0{p{D$1~/1XJv({Zb.}Cb}]
$V/Jl'Ib?X> 1&͕XvXvX^&1ζoJeXXǮX׮x}Hb=)1֔Xnh}.
}Sm&1Mmf]Si[/U$%Klex]$]'
6}m)l6MbNbG+;&;G$v%vJfJngKas$tKeImJ~.Db_;Pb'KokK&In8fJhGJd+HlK>-:IVPLb,q='q]-q^b)q],q+q, c{mscMs6qlSy| J,;%$N-%NwKd'HѮxQd#q] Qf+~4[lwMPM`M3M5f4Ӿv;E,;k{tMsllMs5ͳ{5=`izЎ4߶]aG쵚4=fմq;Q6JB'qM5.5=eԴ>i}U.ا4=k4=g5=o5`jzю]eQ2vM+헚VYVƚj^_kZkOjZgkZoj`ѴiDfiNVmNM^
ѸӴN=u]v7uv{4i4e/U;gM0M{m}fM/ޚڪ[#jM5޷44}`iо#mMYSlEM[/l/m}M'Uhھ{@ӷ6_w.M[4N͚No4`{jv]g;Cӯ33Mg.MdM;45]җSzRz(='7@OEг|	zZgz=@/g=@L
zTгz=@]1	 =׀@yO]e!y!O3\yB!\y:@֐g䉁<A O:䱐YyB1'< OS,9yޅ<Cѐ'CGt=Aݠg
zZ*	szn=AO.I=CA.9I=Aogz΁'DI8	z8zVl=W@>3$г,=EgI$=GH'LyR~g剢<)#mIy(!UF%=IvӉ􄒞p3<Jz'=n
y<Hz*&GǍjO7.{+ϧ=D|gg"A|$>ӈO
Ӝ|L|#%>xS%>u=9g.I=".EK}fPOOs>ύ'Pg9ɠ>/R˨ϥ&I}S'4>G;6곑\G}>@K7|BhO3sG{ОUg+qI@M9zFx3"=HNҳ'=}ܧVzRzV*=*=@OGs=׃]gy\y@I<[!\Yy< ϧȳ	yA?t< fs<C!h7Dhn*S0iRi zcg<zV'=-z> =@=.Yz*=!'J	< OC3|xzh(x <x^1<
xsx <{O*t<-g6 xvG +YxR ,< <
;1p'dÝHy;C΋p:ӔFw^;q1]!
g&ṋ$<?K5L#<	O=6OxބI#<uOiDx'<{Ok3!<Eg9"<WMxYg=#<=˳:rQy<RƔg!ɧ<R]JyRʳ<g()ʓKy6Py&*=}H*!=Ig#Bzn'=MH%%st#=#Hr!=?I}N3R'Ԧ<Sє'dR/(ϽsOEs
9Ix:03`%8Cd'\Iz:v G~gD4WvqHqH_rJ]J.ғt==AO"zk{aO
SԄ=WT\zAOWgY
zgl =׀Уc.
<y )<Aw!<#!8s-9
y:B6g7̅<!yBg|yVBG̎J7U1EQYĞ&g>i{b`[{F	3=/Þʰg;i {n=yNz`F3<{=3a!lzs='`N0*V,>Ok3
d | ӌL|,9I|n">p⃯Ly=hO<D{ўPڳ,=hASl=_ўʹgI{t-gy4$=L)$=p)OӔ|JySW(;Iy)Z-&<w\_W9ΫtDw;oҝ,|Bwn;Ksݩ@wN}gt'̣;OҝjtEs=݉.etsݹ`vl G4_d~ʳ,&<4y\CySg By&Rps?9Fy<AӒR`{CS:(3@z&=IO%3Kz֐Iդ'|Dz2,Rz*=O+=*==LH9yn< <<  ȣs(h+b0a8U1{j)W^DoP<'j>.zKz2>zD:K;P'RC~=aϣg5{n=CavS {ÞlS{&a['	{Þ!G{N#zn=ׁ t=A-z~ =As|zFg*9zV
zAti)<M!Qs)<!σg1y7	< < xorU;/IpqS\	wspvDv';ovd^MvСd};;Y%WFw;Nw<Fwѝtg=	;t*y;Нit3Ủ8_qO3_Y:Tx.'<#	ƯK`s-@xOK³T"<m`uWpT⻳|
֯ڵter{om#FohV[9wouX,%=)|HzbHYSt!=3I254#=ɤgAzZoH''=3HӆēIO(BzHOHz$=gHUg+YIz%=WHiғFzҳ%=Q9鹉l$='HϰrJzf=)RzN)=JWJϗJ!xFC*?*WJ~]^r3=!2{ÞH8{9{Þ}ؓ{~=g# {Þg9{14={K=qyװ0
{=+`!
{Þ~nؓ{Þa(أo{쀷[+1_tؿz0Tv=0	zafЮ۰>p/zt Wk@ ^Y߹M>Ag
Ԃ>1gSt>΁`v1XLs[\3
:,~>?
r
170L$y#7ɘM[ΛTv]% L^%@oЧO	;&C_	?ҟA&П(NПY!S4/gI&ӟ)hKz #@WЇ%:H#@I( '@	P! UQj\A:П6qӟY3T?'9ӂJ
I'?`s9F}:S/E}&R۩F)Ok3B|%>7OӀ!>+nC|1y3 >\#EzӤg3y'=uIO5Oz
EӉ|CzF>sJ>'\iTz@7g
z@
7г
 =ޠz>=gz@@г =@b3=OG_@Ðy<Bِ}
yC̇</@ T+y< O.,<Axs<yf@ OK=y<![s<qBݐI<]!O3DB͐'yCg!9y*@!ϣ)<7Cg2
T<!ϛ(߈
<' O(y<O!Yx'xx.<{ O" xgMx2Ex	4³<Ex_mY3\Axkav_0!<
Ճn3N]IvdKvNdESddGvsdg4ٹl';S.s#iMv';a:[N*ɢ:#:u}=IF66sHnkۨv^eWd5:	š
o}92xw9O)^xr}9$<94 <	'$giJxOoN<aW|U5_~_Y~K {2|#S,+=HyBzV7Dz֐?^Rzj+=QJg&y<z.=Av=@O{г
zꁞ7AOeszAϠg0=-KzyD
gyV-ŵ1%,Şad3aNs쉁=Oxs5
{zaϴYwgi{ކ=`Ϸ!{Þ{^=`OFz韸EÞW`O?سL(%=B OyVB'!$B䉃<?@g*9yC$3A'|x<*(3:<'%s<+KmQpk;wNu	L;7-p9DwНJFw:ѝt'&<U|9rdgyJv>tg}<xA!~&p~(*}O\H˞KE|ۿo<d	KiZg9~v^d;2CU4t5_(ڶ]:!zN
6Hg7Yγ6Yׅn'}Ӛ9P<QK):ӂ<Srӟx(O,Jy<aA}<Q]2繂'=IFs<Cz:ғJz:qg@zꐞCӄt$=5H"ҳ,$=W9Jz}Q PKV|(  Y  PK    A             8   org/bouncycastle/crypto/engines/DSTU7624WrapEngine.classVms~zl6$imaoUZBiqZZK]e@ӦiM3|Mfj9S2|t!Sz^-s=s+( 	xL*`\#
Xs
xړ9l)OHISTfN3|j29nX{G.C\vjYfNOp\}!zj6{sVSgU) +
[+uAsWIh]q̗If͛Wf:9IoYVAٰMQwj'͢niLn2RMɍВ;YcUbuiIwT׶JvhA0,QDjNP'fJFj(Z
WkZԬb"mzQ3O:nS7z5lÞYWsǹ+zj6ͺfAwgkjf;Wƨ[VtW%Pժu΅yvZ5Dީ];qJs-u|wq(t'肢_tv<|T64[з}{T"#nso8:Y2nM.;v^T<']3W._Q\uikM]T">S\>@Pnyq!y|Gǳ<<xqJf=!|ݤ{9CٽaeHwEa_>۽&cww}|S0yзxO!&cvDI&deE_GDF'bP>|Mw0$ce<9ø$r岌^1x?dEL(03$y"4/$!2$3l&,&l	69Ʉ+QfP0oI~&mj{Q34Z]AzyWrV[4u<U,N"t7pOO'休xc'#L{I'|IKK=
7k	uTXÍMjW)Lnofg>Ic4`wYEd3q{:>d*u.\4=v4yFm4r45<iqC:i,\_kFW1~= ?uXQu_>]w,G&
2K(b.A%,KPӺp,o$~@d#fo[BoIAW-.caE=YbT/3"fIõ@RTD%t*+Jdo7ߢ۹"ȴXہH<EIM_:뷳oH݇N
F%QwUH+CM?M%H;5yD(H/_cZ<퇶?"DyLq_ KWxfOp+x$e.u?206ot54Zj]$Z?m(:a;%BNI<v
yTc'?-;*="ڌ(##=x0FvKX#D
dⱼ_tW_F!ANAN3G/-4IVX*	\pfR)Cfg|ᨧa@&/}E?H OO_
6iAOfPK6a    PK    A             3   org/bouncycastle/crypto/engines/ElGamalEngine.classVW4@b=0^
QRN"ܴ+b63(%}Op[A;?	[|; ldrwۻm Ŀ|և:}PꈺxN'1'NF]D4҆,OvNiўvVidEB%aۘqFu[O	Gvx)g">m	ǰZsMF"])q9CgGF{	4FFuq+РgY##zYCS3H93dGW q١Qنβ%3">oi'Kq+<,	ⶠGtJhIA~^A7ɺXM
E$>ӊ'P,da
dM쌕%?
)H#ޭ@I8E2AWQ!'ow,p{q#3#nE6t25M^;K3J\JѨCM)lXM]qgh4u%R3.oeլ%JY뼄˴gS912&iXv2<e|\:ݶ½|eqnU]2*9#.#"iJ'uG/bVoƎw''uRLTw)a1D!M(lPc/UoǷU٦׍g
7lڡWVo)-HYw޵KlnVON*9̉jv%㈌naxBqOxZ32"2zdiANS"[
+N~MyOG>(tߟ=Jjmᇮ*EoTow(}s.PegTnObkc9*T:ֹFE9JͮrBч-@E&ӟbnQku9hG $SxQT*9}b?Tb`d8HheⓘVbxI-0T|y8b7LGRqa
i>-(8^bCaegAegCx+_e÷S1
>3PwW
͑gxU9HyX:7L
bI|
~A0Vʈ>g)SP)U	Ð(/Ki\JEWȥmpiuo(HT"Zݹ72}`I><ں`lV.3EwvD+I:.Λ\nN.፽[[83Q__.&Pv&=AV7]e}NxdD2rl#7QC
O"3V3/?su=YsOV
<@#Pvd(T8s}2~s
6yD}2BԫyZ|oȇ[4o]];̮^*M-Mx42~yy?GT4%Y#;+絖[VٝfXp[6WqU7q+x2Pn`/AS8(	2{]{RP(Ӯ~jQsQvUVWЦz; 'pѭhV[b5I"[k,f"~.:X.}42bq5pA㤔$b8X.A8Ct!
y%9yx?PKsx   b  PK    A             6   org/bouncycastle/crypto/engines/ElephantEngine$1.classA
0D'*=FH.3񓶄DWs<>0	@VNU#~76!:RfmX}f/!$2b|hٞ)6*<1pt:
3A&&)&PKnI      PK    A             =   org/bouncycastle/crypto/engines/ElephantEngine$Delirium.classUOGYiIIu
G
	mLhk5ȈX ^Y[ޥ"UC?NJ)zCުRU/=VUU{C$5ޛｙ7Ï/ -h:31x;Mqǌg\)ewA0]o?0dv~d
d*ZݵY-U:5BDXڎkW7.3N`Y(X3<Jr&O:9R.Z{XV2q*ʦSq
bj}+Nnt܊,jҲʶ$*VZ|f۔\*zyw\nj3訝dTvSnDgVG^p_7ګ5mWC2վ}Yj[&xw g44iA@AذpANatDR'&&	NM0N$Ep2+諯zHضU_cae-U+fܱ\&|5f-gnT,x B?DAE6Q b-15ms7
F`"Hh'aV?:<Uˋ|?W,
:W1e9*M 1E:xQ#6{x)#p	´͋bټd
*.V!;H"CB
L'\R#dѣX/&>G@'1#1""~H t'<N=; /R2x1!7zzkc}"~lN0	_"!?kPIXOIB\}ckFBG#j`WǁOu]G՚+h+d/|f6̸fxV=>}I'5zk)=}//j/$(KrT,Pg`O0kkC;}t{ϟ|awS	O7	aV>33}	*11D1V+^S1OO)cӔCwFư@loq5Vei\y ֽy8we؏!|18WPK3Km    PK    A             :   org/bouncycastle/crypto/engines/ElephantEngine$Dumbo.classR]KA=|fV-yHShR
҇X,j_P4YΆ	PP>Ի1E|܁;;w@ooy^;͊BH#8~HG;>}t{@M$Ar7qCnnlDrB+e2ʶJejӂm0AhnfkZ˪ImeW}oȣpØ"*.,TlLbfΞלf	FfR2Y|&ΖȄK27, !ҙ	ʌK^0]wzbFl =X}9hYU/0.<y/reܝ#^ra
brT9>=yLP؋%yPKg5    PK    A             G   org/bouncycastle/crypto/engines/ElephantEngine$ElephantParameters.classSOP=]u6'Sڡ놈[̄dS)u	oI:!
Qv5d/Ƶsޟ $f$ 7;{m{`xElvͨ=a}zځ;psL4p5ڶuzd8A;?'V`y~Cܴ]V4Z_chFcclimgp¡o>8lq*WXTQDED5unn9
ҝS1݃cwzv^+t~	+SQ~1eߘz6dඌYHː(#;2(ɘŽgYx$aK
(D29[!S#8M˽#/U']TUd ʙ(gY-2Ĉ9F@=/Xhw8%]Cq35"Y<eR#}0IؗX"+K,$CC,]aEƇPњIzh«hBCB@vO,rTjʏ[PKg1    PK    A             :   org/bouncycastle/crypto/engines/ElephantEngine$Jumbo.classR]OA=~,]ZDTjJIlM|&k41bxlv2	?ށ|]&{Ϲ3w{r@	iA[T~ؼ$T$$FԺݾ$'K*g}FOlJwT$e#JV/aL;[)yN(UWkx|:n~G*2PD4
PF̓c$f+`e4o-knI(}/PJfkIԄҸ4ô.midG
*xHxp}f(1j͕,4%Ħb7.z-t{:UsGk>:GXr?uoqڗp?PKZ
  /  PK    A             @   org/bouncycastle/crypto/engines/ElephantEngine$Permutation.classK?@}ć0d$LLȹ6wWf|(qz| Zm*sG誃5;"LJS}YK*W
I(>00\NS	bbcDt5ֲO$Ab?EӓgiPKꬷ     PK    A             =   org/bouncycastle/crypto/engines/ElephantEngine$Spongent.classwtSe%mOa5ۄX%QeH#ZJچILRlu:pԁ[*{{[A(>9'ϛ77i[Ed3RX4V8S;L
Gé)e|
6`"l
.G"`qpY	F|jRhLBKO#iD{,L&hY8	3:7VMLEYQD55d*$㩘/GCIߌH((M|mȄsB`*2~"օ<H˃)SLqݔ\SzOa/DL9؝-SSlb8%SNɐ/5A!WfJ?)eZ^)?
%GdW<WשuHkHZ5!n>WPzdf5g<Nڍ:ql<e'ǐ-J	TZu҆/v4aҁ#ķgl>f펯fx;l.b{y^d]x퍗>x~x<ºxWle>v0eNv(ba;-FY6^#q[-(g}tg"-0l>Vd#:8؉I`'N3C;i(fe= Ac뇇=Ɩ,agc8;ÐE[䲇#^>,:{bЏ=ndEovfAdq([l-q ["ĆqK0.E9t68:㰛Mw6~`=?wc+ۈrƞ&`O.6%P#H+'De%NPNF\iAB9)"8^9˕3Ѡzl4*I9I<,SJ+nS.-ʅFmXu%Ckpr9nTʕI
*WZe5nP,Z4+ar=NRn@)74&܌ӕ[pr+Pn8Y*weV|e=(0Wia(q	G((e3TT*Jي
~SʃJyW(|\<V1\<Dy+p.Ve3Ry*a<U^3ʋxJy	(/!<G:W6M<GV{xLyS0Y||qʧ_1A*_b+|I7(QEX%ʏXjg_PX"w]+Q:P@x=Rq㲶O^}KQ8=ddƳ1RjuY9.j3^KU{ekYkඥ
n3mgH[M mW	}Ss+p[0՝	n+ҭ-6MoΑT%vb&e)]UYJM	G`.-ڊ]6{SUe\e6Y.t>ַ5EI[ڎ:X	뗌6Lc쒨S Y7C>#$b
CFwBtFg#OZ3 PKw  
  PK    A             4   org/bouncycastle/crypto/engines/ElephantEngine.classW	xTu>WFof$3$H D쒐c`K'ilyMufiw&@ b1EL{{iI&"4]ι{9}׿BD[>GhP(jRi'4lxΎFِf'2N<X~I&ڹ\so1;rPN:cE1;'fbQێ2+4HGr'mAG+ 
o	LJ$BT	|8HiШ<YɌ;mbs7bLL'+ -|f`PwEZX6pl^L|Ld%ݎ>o3;Z@HY.!wdJdR--vR+VR'Gޅ]lK&zwzbz`^˱\<$̘rB;C={gm3='PA΢=zI;ǽ	Zכ:뉅2VJ1'IsH	uv+V[U|5۟yp.d.]pv؊^l*lN##sVb4;c9T2;=Yk"L`px|d
cR$]GI*%Lf3r܅[#}"cbvl𘍽xx@nLn(0hOIt>C]TN4%#Ǧ`ϊbqA'ťW⩜cYujKXѶD$lЃ]>gQ%++,gLТ ^5O>%39NƝxoF'FrALgpA\&Ԗ4${||	X#5<w;'S2XWؒΎ
uF'VIm~md-9ߦVZ´FLOٹ6~]V}A*cX
*z[g`
;q
nw
%pS-~ꮔ-JwhOlf]M;R^ꍂVȲNĳ;ᴠ
|{ݭoc;`gM*5T&95ᔁIL.}<ϩXsGQiTaArRRy+8/YCHDêaQ	M
_:7k(@ͦyRvN˫瞰2}8;cv>OG|>
U:QN:)SRNi2:GN9u::iB'uޫ">lc߭D
vDR1ïtTF
9ʑq]Í1];Eb`wo`̻ynQqoM+T}lJ$v?nGer1gHU&Uz_aʾۍLVjg̰a7a8~0hm5h/=1X1Q11<	NAwkK?c`F6h-]4hCa=(!1A1aqUdt6!3|PA1|z?3C4ȦzLfàhA0%KK&~nZJ%>ɰ.ntŠ屯M?oPwѠ_gtOK7wM?M/3
ï2|[;{G`c?aS?c`V "o>Eü ЧQ> <:EOf270Acz#};e7g/ P͠30蜨
Ы/bM߫3L}6
Y|hiWd?s|ݫrvщ!+qUtvұRYSbe\=gei!Z"ZG
ldKwՎʶClV-75$B~%ѷ"3bO$"AcZ4\#{mFwX$pZ4FйC`=2-Di<R_5-'@$x`L&-\.xPD̈r&W+zxe0j]j)PkԆy?/\^B8但\ӤPhGDrMCK#\נhOמ
})e
AaR&岈"_4@b$ȵ$VXރ%:-Z%SaX&/XI!")	zA
)-ii\oj0oj⠩&U◨֥^&=rQ, f U'iq^ڼl,c%ޗ9# rihjzZ
(
yAyݑ		h-m-$vrwWsăʮk]7A=&/LoS/:}|ogZLweyѯ4PӮdQ
ݼm%5%]&Ǿn~p>B
J7O>bŦbX:IL/]6}b%2/԰ԴXWSbHY/ekFini4ukjMfxHVzcd!°\ݙz

kG>x-jɆ-~5i:<;ar|RH6F(UA
}Ќ"/mpQŁ3
C;Ħ<-S2.01U8N;ļ`AAoSD7hzjxPїfЋ-ZAy8r.y:M2Vn*|Q7-DTBr4-V%]{*	hXtD+uh*UiЪx(0#z];dt
 t?Kr.=1kE3GӳpxٲenZtlXזz⼧)m
P88{7MDqTv!A|eW]%{W7!5Yuŉ%%5
DyBe$Kz`!bkZ<kiD$ 1C45<(c	14IvRJT_`r#CMCrRnQ]m.@-Uz_vֶ-oWZQHd[3GYcjgDW t
	ЎH7&p@XӀ4pIÂ|4vYs> !g)F-:jZS?AV tuYwE/R&iYw	Nf]<EELߙbE]#%Uɳ5bD̚Y%2ަ3LcJD*mJIoxav
hC3gh)G7Vy湁g51y]P^%6;4KZ,jqWe7慣ŷ]AM\̈{8}F<{ɯD-rsKo91";4vK߲LV2I$EPK?ZH2xxqr%וZgĽEQ
⺾=H5ewMӻR^WsQw^I_-ɾ=~</tJb)ag,ڗЎ}qФxrϡ=U=Kh
m/}Ou6^PK  P$  PK    A             L   org/bouncycastle/crypto/engines/EthereumIESEngine$HandshakeKDFFunction.classTSU]d)
H5$tR)-Z>bcA(VU.%lYv|jgK}/>N3I:.139ܻ	X
&x=xOJgiAg3K%#]da#kX;|Cxqcd8"[XAX0TqV.n19dQJGEFAy;mXd)-O]dUSѳ'
gV"Qd-Faܢ֌M;|LnRn^q

aySD3lbfW/WvCv
]n+]U$
ڑgeb¤pM.krPq)%X8>
K)oM8N.ʭa+Odg(i2g'fjNVJys7iFLɝ8Gr?dyjil~*jUPqFY1*T[9x!6/<O31¨s+sqx~NW㙓HVh_Wb4:hC\#j		8%ᴄV:M.Õ00.aB¤)
}Џ49
FpM(#%\0#z&<}Sr'hb?zƢWi+zr3WLNCA1MCܪ/i߾lB$d?@.\O`䏡cemIb:F-3FfciY)6z(< )<eѷvG~uAXٶ0MxTI&CmV)f(6O:eƪ]EE&6`Yi/*/7+=	jSh$s%x[RkǧZ`0DՇ\)~eҤ6 
ȼ[B=|͎hkl&erǶ򶄃ϖDïwѝaA04+iƿЩ}\DDŐc
c$}=?(W(!HG;@̐'K#9D9PKuO    PK    A             7   org/bouncycastle/crypto/engines/EthereumIESEngine.classX	xTofy	2DpI&	#Q2H̼LF&3q0Vk]]]l6݋$DhZvmmkw9I&~ɗs=sp8Ås]8߅.[MmXz{Mf.ܧԜ9\:dW=*5t5jTh.5#ώ'sD#B9X0wwɨ[OHG`8ǒF'k,fl	=AbS#z"K4zdtEݝFTWW*Zx#dxI	TR+Փx5Z.	IYqItOw9lESIFxg\MZ=we|tId4rzHE]j-"__i_IrZfuִ^gcF&kQJE\{"!QZHo<[o6ǍDԔqPC%Ye$cV=FϬW1E
#cֲkr4nKY#1kVh~Af'7x4zRCT($˦
{pxM2ٛ	#'c9"RE2#BS(td\<P4ғeWkg:Jۥg;CX85b,o -LӞgxRv3LZ:qd+ڍ y3Y(vIMГ 9u{BB`J"h֖d4m]|ZNM[#P*rHODdFH:g*$E瓎Gg)$L<Rru%#Mˡ25&]xXNX,ce[h.:D~JQæKm/r٥V|f)RQLh݊%hRtr+L|'m-ZdI˜</өo2V.[^0٥F=3ưEqPr2hbOh|}%lXzyhO<BGi')]̋|[5F"'B2es!9\,9a|Zo#L7ZvSօo;nJ;Qyy8F seSfb%9@ڈ6Sz2F7- 嶦 e\w?M,QЬ`e
Z,WFZ*H:
.V^%
ޡ`KlTNRnQЦ@WЮ aͪcKTJSǦ*KG{KǦ+-IbUdQƠsKKy%$PYSjI&Y^5X>I^L4Wh~qOa&COy5Nn((v='h׳&V;c2%r"	kN8r;Z[K~4ych8;ix.p5#[}L6͍M3߀R$d1_IƂw&8΋뭰ΤszULg0fp|TE<|LEW
PTaS*aWbXp&Yp0N1gXEJVq<*jUq2Tu@$\LQq)TT1M"|ZEUTv3*s*NUP;/NK**f*N@/D|Ue[0˰aa }0|׃4~A ː=lÃ+w0/1k{yp9~_2Ƀ7{~-lg>2<=O2ۋgcxGz<ãO
ؗ:zW飆_Kz&/hߺ,Wݭ|ko%#ߕO`WYʒYX%,eJmYN2vxYR/UВMqΤ~~0>lÁ`àE^GNJm)98?6%H9ZJupff
/6~qoYbIN?hg: CYt9+E2;~ʨ_w?mǬ`>lZ'M}8ԋ
6tB;YKqT:;kk;%QA=(J4EC49E{\MN*\	j)sHSڨ^614(Nj?;SohA*5ĨՋ<8y"Oe5;e^xm7ESՍ^~1\Ա/%њ޸}7m؍[7hq<f!~sZAډ_8]"MnL
j~Q.,n&USũjA;7|AQkf? %
P-7EyvEfSsTi<dv{l IXsEʼ4}:uMJsۦd?f-H,];0e"|ߪr!# 0fzYp/EХPV*5voݸvԲk&''Ep.Tχl3(ڶ1D/x3"Mn3Drthn+,d6vc3F0>31EHUu[-H)P9PN>r|$hp8hʵ)fͨEkA>+8wo<P<ЩwN#d,B<01/ M^Ghp3^!<La3V] SN<x~A(@>DJtTa0;X 6~T.#<;qp?_L%g/|sM~/n +qn7Parfue&nl0 0LsBhZ1n~mt몪6:0~t줷N8(JK2y~P!L|<9vYMN]JslfT2_֜EE/<fm
e SeU]{ɾ͸rAqXD]$siJCÔM#L Ӯ ;GBA
F[#Y \Qtv豞*erFkku~LZT;.Kmb!I>bPK83    PK    A             5   org/bouncycastle/crypto/engines/GOST28147Engine.classYy|Tu>,h$=b1Ђ,0A 6a4,c4i`3#cvv[w'iuKuŸi6u'NtM=׮]zY ~?{߽|y}yg*y{]Gu5:e-lYbK-
4dR[Vr-wٲ֖
m[zl9d)xt=_ݒíuvb˪<ډm%u-PI+;t
UVw]x{}2J6jzwjնhwooڬ{MюwGR̢lcμWJFۮy<;k-
3
uvuGWYjG"y$LT:AX2xe$ѓD;G/˚񳑤,`-d#t/Y"w64EVKΝeb'gGuH]wkp&}:1$0bT${$l5Rf5=tl6їGrgٵy<zelZfvn[j IVZSxJ;NĒz3pt"y:CmT6ѫ˪0<cLG?sv8HSL,?ΜHҪ @Q99$rC'wNzRk2;qNm=lKƲ)c-rxF]B857s6eUŲzZ83A8H
"}#ǎ3zґP:!=hEF靋knz%ioY:;kNR+t&XrsfpIw;^w<ޟa;ћ7/$G3K$;RJSb١\LeD^K`s_Zĳl.o>ͼm!8ۺrgN'ٽ
hb;\ywT$iv]7=p<KtLu6,nd紩l>QŻx#k[b(͙LBxhLyE'xZ@f-U&ϢtJKgv%\KӺi)9ے͖Zrؒ{-9b}ג%}-9fɠ%C$,9n	K$eI9PdMNa<{,uU<Oh5{
O`CD39^}'SݗHjUKðu'O涨2=Z4E5} G	29~O&KS6elKL320+`V¬YfTZ2"?2=,dFXdfXaVa9(²]j²MjòEfC"aia-Oe@~$,;Gò4|1KdXbXetXτe|2,gɰ˧ESA0?0`~`~W`U_!y@̃lH>d0Gp|5χCaD|
30\Y߀͐d,$s0qBC;e|2>yQeh؁RĮpI*GBjdk-$gOz91q;62w\+q;ֹbwTiX3ԷI:74\??i?d-DՏ{׏[^_,cW/nkO7"_mM_f*'Eyjʸ3}WZ]UV_?keq[$En6޸S,ڋq㪩囍/,')Iqq7{vߓE<nɹeޤtC*uVuxLyӱq732<^m3SU>.rc6\}K|ڧkMf#=UW/#7.oL~N}+2	Ͼ汶~zU'
>RhŇiVXy.]vӳrN{O,KbҼ$V3wf5oSywwXrZˬYHcU.Y^VpZq=Twyjro3]Q<\Ը5f)US}gҜ稞WV}c^V/f~Q-`)Ym	U)TZj:PZ:.~%PmX~Ѡ7a7X~.Iߌz'PYlP`M:U>.KҼIϙm|?.ߩ0Yl*%SEĻbD濍+ed>w%zGjAɕ-@jiU
5~*ކuR5	-=et\X8D֯33lf=5OLP<܍^ʹn,vMlx}n&iU|0lQE\C
4+eΆ?=rQ<rMڥ;wrE7>{7H䀨x^g˼?'C/=^+sB)؎q^5SvjNڐOMVv4)w*V nC&ӹ
S<w1d:p~6 ?'\z̓|- B ,Bb 1%'Ey.r Jߝ$lj!]YKudXO
߈J6 áh[Ⱥ,pv"] M.p=<ˈnxEɱAtT0̽8c.GI˘ Dvуi|	$u\)$&0N#C,sai"tg|`<`n"?'o(A+GlSπ
)D˩gW0J(:LE#*&? S	V
iM;`fHa6) 6=WĜO7&bBׁj	APh[
*:HEce%BVTt%Հ\Z#znF<7AmhgD=x)hm#D'N$؉dvh$Ӆ={(f? 	z~\ziwHZTthB{=FA Y]"idQѡ?LS $FT4y^gy|<mtx|QQ5
EMWPӕ4+RȡI2Ɍf
HnFyYĬaD㣢7ע<O=\N=@nBT40`hF3|cVHOE{EAiMvLf,Jmj4з0pF@Lv1̭{t.AF 2Ǧa,>R%rf2@8	oCI8<N8IГJ149?E]hwd)<{\`Z/>EZ aK#풞6 d
1ktA%st9U~!Sh tB [+zY&f<',Hю4M$mE]Vxr8wҷw9_ޢF&hl&|+NhBm%6_AHcvn7	hS1맠1`~%
_X+ipR(0{ab~?!Q@PЬ0z-6T]T46OY30\c$@AczL	hr](voDA|FAwWӈA)iCb6G6hSyVA~*hw)_t( F08nˁ%L G#|QQ:{FMρb&F%:HE]AIWR`˛(lAU4m:vM+hF>0h/%>+Z(ҦuA>yr9F>ztqB[qx`.IQa*ôF҈5t#~
Xg0ʸ?磢˨r*]D]Ǘ5Hl
F_X൙G a]FEba23bQȯO#i.Xc(qK4IȺt!j%mSҀkb&w3XdS9B4Zt9%Nu xCFFnF/4:qC&+jiQBjj7k4 a2tH	]L[grfȠzF\	fZ6o t1cN}5h;Zh:h?]J^|QCna
S)i^nT飢M#
gw`FhHC|Chr,SЕ43zo`mb2Kh3qy9V iES_͈5KEpcƮnfhQсhNAUHH#.fǼmFFڼ 1zH Zh@/c\0;HxDnQ^TtfEArg1
D?G|}U_׻}rk#whSG9ܮKAdpm
 hNȹrF[fh>uԐLys΢=>bs me>u&Rb63eF!
s0;HSоY	n665V
!Yh7CF#]$
.8q
; A7C*Y?vs9(Qtō6:EEr(-|pL]YT4J14	YfCBݯwFlu@_xQ?}NQ?Vɛ1F{L/cW0VW1}c?PK3  ,  PK    A             9   org/bouncycastle/crypto/engines/GOST28147WrapEngine.classT[sT!nH!&	i՗5%vݘ$\r"kJr'tu:)?î4fR3~g~}
`zjL+%DҙXz+_`Tf;ƻ#8l3sŴ઄r:qnBP7Fxh&Otw
O~ j6eX;Ldn$+d$ȸ)<ϧd߾Q:,B
e4U	D`>
70=;w=TiѤ4.A%yiM8-[o,Cӽ8Z/,ҭj<q\n6ðmv	/$QaQT@H+z&kwP*Ǚ^qKu|XQݛ<
LK[qP]
[~eX˭$Ф-#!u2R2&eLxSƴ32xK2ޑ0vYs=ά
`v(3>,}o {Fif/c3@7G
.^ +$>T.xa 4*N!dbDE
^R1*^WXH	\y|Y| hibMYY|b
qC

=+,H iV:T?{=<ݢpb2psn!DT=!.(Tm!L0}h{<F9RkQ~~PDh4'~@b,f;Hb)	26}oI_a͇݄;$}V>PxTOFy679oad*Zv* I8}P/k{DE2?/RE=p**0%FUoT,ǞV*=?"hh7'a|?PKeC    PK    A             9   org/bouncycastle/crypto/engines/GOST3412_2015Engine.class\SWߐ@BF'&A+JQG!@Zk*V[aj_ޭ]_ޭu|ik{9{ι	Ϝx 
` iLLр6y`ptgj SssJSI#(@/"P
Ƞ+wg{j56+t`-7`V4yoM.rV6x0
=VxV/h^j\B1gT[-h	%9k`wC]Bj[1e^"`
enkz>趦XӆeXjIIIW!aaL
Mn5S_u_4-{
],YT@+/,YPgwֺ4H/|{.?]ɕ4>__y5] V=U>Mz$LT/YB:T9TeOrIy|%AWveun?MЬYk]~'HWk
3{9P?iO=uH=ϵЕqyRC}qW<Uu`rwhzU(HuZ
<Ucr<w9=LSEEA*SQ>t/@%2Ej"ZfZQg<PUe>{@N%ʲVsWKU>ԡ搜q]O{Ĕ=.HyVޱ@/0&ThY5ѼdhiZ+wTOխj\zo%D=`z\=aP0AzIz.oeqF./ܠYviԦ,8G|`Su׳B;8	3@	&ȀHFLN&&($Agec2Y(FD`0	!	zCW$3laPiPe';T`3A
̏r00q17,Xaٌ94\+ph_-cB"bF=c	ƥW03W1f\øPg7\ƸuIU.opSGƎ76m}Ot:CK[NI5D+EiГqLr?В9Amhq{l2[jC<h(:gpY,b>,A
|)F.Fqؙ;h
l=*
mVɶl;3ftlfY	tAC6"f[B%Ҹ6;4-'j_Oc(=7tn4?lmN"!+	F$4&0X7fxL	TݒƬD]icN-:i4=A--Bjvk觚/"n]54J8347G	Zx*®6l'U| pc?r7^
n9c:HCRj0$|n?ī	X-`C#-$y9MjZ#YD:!j:Yg7g;\)j\ܠU=2Fźs6C-NsQܑ;"Fi|zlL(ҕv6SS]	N#=Jߪ0օB#v4:m6ت6yB5i`;:6zC>8~3.N`?S.cڠ~hcumYGe)86
8l[h~c6&ln_Ш[r%/F-qMi|4&ʪD6Ӫiqt8=W32\-.cd=rd`$7xfg4;rP3-;c&G
!^-Uc݉z~@:8u=ɖBFsؚ#V=:BMDI5C{tGbFgfSccF5S<z#d+%=t[vZ6hNW/K2{Yz!z0	1pr&u%.]KЙ7]Oz?7hlˍіl֮hvtn]JeF۵NήJM~#gc
ЗzmD4䐖;AK;if0BqzBO /Ecﳧc/i"Ƣ]Gbbw}O,jHDKkfDM v'a1$&ybO,!GV=M샳}cb?C`1 DцYD;x1TLl bZ8!'a8 #[b&Bˉ1_%^khJE1/$XOO/jl&qDI/'s)JkS3ȏ5
M鸐8c30Y؅8mĹFKb).X7q B~b%J§3p1q> 7ÝZL#^uD?Mpq!^O\Kq%$\F#^br,`+rq%р9WWc54ǵ&uXq=qƱ/{s"CFXp#p	zCq3h/8nd
86q;slD#&lohR؂=9jwaG9}p967qlhx?N؅c9v=8/؋80c؏9ĭ2XqsLQxws<s<Ws<8Dw`q838Y/sx-69ǋxK˘
^*p(77[x#X.xx8ꉁb_La$8|K_q|r|q*X#9~W8~8~_8~=k1'Vr8?bq'pr׹ִg+'ՓY,!yX|&(9O3M߀,FqO'B3C3Kcz$Q_seQ@Qϓ-QE=D=7zL增D=E={D=zE=OE=,ހ?D&tN׍S'<-WsL3QsXc>
b>}>W}Z>;>>>c>}6}}^D}n}6}>ߋ}ԋ}}>} #\OsاUS,@sgاOb>>>ψ}|υ"D>",pdb<ububgg'Kede}^QsDqee}^TYP٧ bS[駫zCJ?eJ?w*d*tSTRgҏGgJ?Õ~\J?~+|"|PJJw)<C']M?>ϣ?)4)UGgOw~.SFgJ?~RT'R'JgOO5J?)|3Y'QG^ke?}~VQVyHzek}Wy^٧Oe[>J>k|)VyIɧP%g|UE%&%Ts%"rOXx==*\srS=o(X{=qVPM gPK    PK    A             4   org/bouncycastle/crypto/engines/GiftCofbEngine.classWy|T>/oKr $afH$*&!T"i0I^L:3RR[-ttqRkkVߥ;o@(M/{{}oÏU/yLtAK$ˣ6vIh塕gzuGkW=(QL5%ÃtZ5S/X4"/X\Ҏ/H%razKTlj2}[=m8V?̷GS9+jM
GL\^
ͱm[7.nioل%f켥M"	Ѯўvؾ#;Z\R#QlGAƓL"74|s|g28
ŷXx.7'RDޤs(YAq igZ82^
ȌDbʵLwZ	Vu<geTq5^b# FFs̷ dk&r+W]^HuT)Jhw|o)O
6EIk0A}"-Jtgs0*L86ΰmYm>3?=0>6b\jKnڄ#PI('M'm!+r%JSD6qƳV=h.{u4iZ]wڎYZؖIYl"5GU}Z-=땻\"dw=fd(gcĉ/qvS5Ir8w
Gr6=<,eo.:_Xv[*̣鰆{,U2
yw^:-)SX:]STWtN[tfMWtD5[J'LIta0[}wch:vgke(
.ZtmtϲŸ6E`Cr3W4c..zwTpW02lbXMA.&-cp=CCfndPƤE5r&5ШIפKv33!ŤfjI56kH3)FIdt-LZ:K&d`J*v140i;՘CsLZGL&>LZO&}&7ha:Gi>72`xÛ2[vw0]f=w2~/i7}CG2|c8'>0Y1gF?pýg×S>]NI0sްJ[oNq_kq[2/+7/U_8}{:#8>pQۧ רT7=.s
x=.^XOwOm$ѪP?!z!<<'?Ej)V$NoOz;a5Y8FV@9_9]c͚Tvilci|W!]<s4W	S+IK4Nl̏~ڿViZVj:s@,+%&ªC 5Z)a keVzAZ
 .|%fQDDʓ#NwwJ{D+Ո^`E)F=E)[fqd*+Uފܬ<&eQ[xQ
͙޺8sV[I[UktegI;U T@e^*y	3WC@Ùk!VÇ)]B%A5
+B/,!$=p6 xS96qw	sGa]rl]x[<h(C4;VȜXplbI&
&5&1\GаI[%-sdϦaM;L3ar5]
v+mbpDl/3d4S]"zIڋ{nT0q} ol1Zn7|e,ܠD&ɸTaγ2V4">zq=ނE.(RhZp*Hd:'x40ⴁ+QG	DlBUc`Ew=jq&?E f#`pZ+0PAM@6Ϣ-"t"r}i	BDj5b^sI}:{Z*
TZ9zpy5ϟ//bY0O9o+v|yIt$=GH'Ipz0|ET8JA=y*j^*ҜFhǊ2A)<Rc,L^e>I}nsEC7^)
D,py(2ESpO&{n)zSPgܖ<o66}^
ґbE0vLן;ueyre@ֺZ+Xy4Vxu9œBr
X/]Y]^s2!C	ؔ<-\<lw=D/ٸ~lv/7<p
e9_ݞpmO	Xa{5ٞ>n;E,DpvYGG %l=_빺=.tj ^?-PP![=zLkj.ĹP]!O?L|v;$O?9QH%RJ?,t[^_*ȿm
~EES
3}5vg/縻<we`agqTyA!B nYu+Z[z[Un],ubc[hbP뀆M@X.Mq-BVe*Q	X-kŕb	V,4 uX/D#Q\$.+KR񋥢x^.Weba~z{Cxq'1߇1`Lc| PKF    PK    A             8   org/bouncycastle/crypto/engines/Grain128AEADEngine.classWyx\U?/f%yfB3YhtI@T"U$Nf:U5TK:k]pCQpw?>
}w,#m{=ʣgJzKBuQ
2iVߺ5ʣj}Yx0N!x_Gr;=Px6V*OYD
\޲]!hm0bVƆnogKd=-=ΤlkD!abvJ2^.Q;ee诰T_5X܎%SNk&}V*e'G5n!> Vm #2-0_P`δ̵]F{<
J#N`;UԒz:tZpk,3:
|ǎJ;mIf#yt@l28|t-U:X&D]ߺj[h<nY؈ȴG3$&Y0;s%3錍X4b_/ד&k&ĄH25ܗK[iLmOf͜PfІs͎&n'z샥7Kc	;̙j%ڸ4ȡbm=QXߴD$u o[]dNCcrRhےhـsH^8p*BcX
ŇwYPF>s; =NDӵNnO|0E{	ե=$NiDNu#}v
pl#D!S	yQCH`w|H΅M"6iY-jԦv5ڡ^F7htFujSrIA&6w焅-KUQzt r!҇XAOmłTҹJ7:$Fn<OY	חշl.%^//Ңa_׫
Z*"2a-2-ШN[t
QJQZ:贒tj2.gpÕ괞:GHdC^ө:tv1L:]GU:ua7贑u)Lut+GCtbhoc`0&0p;n?Wd>a{>qO0)O3|s2|OqJA#bd_`2W)I_,AT9VՂ'ږ hK&+c\^wAYEo[鴸:prxQ&+ptZ=V_m	ܶHCi9)'!cWNYA[$]+e,2Z7
hG8G
(3H8}
3t,P!a7
kc*0 X7h=
]':
izYVJZQWZ}PTzז{.um\<MF$	kI]S.W=U|u)<0@TL%Z9u*mS^̺6;ē0VUdMUY-ٚIveJvUIvuK65˙UެK65+$
*e &5kV;'k859\ ̚drfU
eՒՠdd&.h'IcդQ72j&&ubp`Qԍ
`.3V 5;aƄJc0BQe\N8`7H@[SyE9gժd'4Tx6ixJll(/g{YUN"eUnGwI;-':Is2\NrN0rS$A]Hf/B#>J|1QLKWoh$RdGxSq!"p`
NUD[6ξG6=lH4Pugm#sg G:&ZPNy Op0G\KfgsY9I@Pmtt|ye[T'xiT
s`O0Cw_qpJ<q&Gbz
XV,^
ʋtYtZyQ^
o>ƙf8Cg\(~Pj
NLvqtNf1LRΘ+:m5,>ys󄃧GqF*W˜qvNY]^
J*c%J~^C?׆1H?==FSNi`53ꀩ6jHσtUS
)UC5Gz7L410B>S}nY\4ػ0BלtO;zȭi<2}Wn1<l+]Oz)H'6s)g) YuP(d+@y9s7`~׺RN3堷!Vxt25o^3|[5|p~9Pl>ZgW|!O^FYTWVD_T<Js1E"|&.==ץv.Za._4%9A;~n:~NrP~p@EBWrR{)<:dV!s~qÝ/A'ZL'7lwSS'o
8<@Kd݂(}(R-/9
ذLFj*1ؐ'nX|u~Xk*o͋jeoȏA!ga?APKGZ    PK    A             4   org/bouncycastle/crypto/engines/Grain128Engine.classVw+v^^l#+Ԗ(ZNl
vx-Y+V+bS6.}$B	)9&Ҟ?=YLS;7wf{gFϟ `/|x~ uAP%Ah	Bkzp%7턑7lCE}G瀃iOqwtNcb ƏDT&[trB?w+fw"]v"fis[\H.dri=S̍g'쨙L	ҧș,5+K?W2,経[@Ԃ98FCoGa9{
=
i-dzdffhBvneM˰gp-]Q.مA>ȉPU?^

zLz*EZO7 K u2㌉̌n%lLgMl?zsZ>ۛ;deKsz0q'FlY(53zgnQo#(i`<Pu)bwD'״S,d{3B6{;bDxBl֎=ͬYN߹FaؿYV:G[fAlC$l61zI2Vs
8i3㜾b/i؞|f]XT~jZ0Yq7ԝ\L[qN$2Ti풕')(3Ą;i-*6q,n^a{ExQ_"E_砩zIn.4ߴ(tqsokV/ΰk@@ߒPiZixb'?LyJlad8q^%x+}@y%&` ha'+(vi&mIdH퐡:A` 8Cp '|GapN]@$	x[dr4|O±sy@`	l	$E	P"WasTy}J˕Pw0^뙳Ǵ¨6qoIVM<`>8Fi!&1c348WG-<!
?Lw߁@?P?:MMD&C>E]P]~ԵkvƽQ}~UXSoHX.6K]{*\K;5$O;PqUH^nO`ŏ܃[Үqj8n;#b3"Y	6Ʊ	0hb|(cJ$1?I\**@YQ\*o)`kde>zY.\oB7\O*w6BHQK/RqAƅ=q~gd#02H
"#c"dA(-Hxu18hJQڑgkp9ڐSzM)#adpm5T֕hYm,
/Հ* U1JaQQ#[ιѥ"fM~W(s`:j:?[QsRGd#aOeG˪Pj
DQ.xY}n~Փ"{\S<.
g
Yw#z
%\{WBHzY	Q^ZX	UcdGʬ-yq6FkUqF
*HZ!XOҦ"T[`5;:ىw
jIS|pO)QhN}F3F
o ?u)oK	4F)񪓥@UG&`Df |Է<(=x4L{vԆlq7t/x]t
2G wqSށY}x}lޡ.#܅wWⓩlECj >ÝJ>A7 L!k:g2vEk7X}c>&*gm}Us,׫'pKFIa/Z	BoϋxOˠpju"{݅Oo&+7Ao${6L/PK  `  PK    A             3   org/bouncycastle/crypto/engines/Grainv1Engine.classVw_Z0Yk;[2v(ġ`h0T	`Lx-eUV+bc6M~#-K9%$/y?=tfJ2>3s̝ (pC:,ul%:%EOy?oegRB{0逎JO2`:M +Nw&L`%/zv8CB&g%Jg832-T&8=v1Ե8ԘpILrsxΫάs݉9TM#F2;L?\.")f{=uKo<;dte@!zyz/A!OP4Ca{<r*|Pļx%勓,G~tO711Qrﺉ39`s}Bم^2óY]aU'K75 ww\w(#raL;r1`[tNN~&He_p\wlNsI8!۷8Ŝ?*kiܯZamK|ŁԲ;Lٕ/psK#pE܎R¶ʏM}ԣ^{Dv-OQsG]ni)vfslA~L
+^QrSG)OhWzD%5L4hЧ
;4|MN
iحhثa@>
5|C]GoսQ~=fOov=:յoK`kqc-ݛ~?,@⍓ч?s$L`&G4Bg<&`*l@&L1ي_a֛x&ഉo2ـwM$nēl0a2$dI&g
1B1y0o00*#LF`m"ɫL<&e&瘼d*3>Mփ$eQPQm
igK#D$H%D_6D,鏲i
gJ<)8xbLv%aRu}
#q5:m^)|yPs]B-ʹ*xvg;Gn@S?k?Gf%װϐ٣)7M]5+5}_ǅp1j\RI*.'com*.FɄV0I{oMKׂ&(`1
Gb`B2)ԓ9Mi?h1:$-~E|)[%V.)-/Ң$JR!oD
O>D
=>#;x
޸6O`-Sfhم~9 RzM))@֯@* L1.4P%,Z i0Cؘ3"0
߬'02eTXҫVԪT;l5niD"M1oH,uRY%6Or}Sْ-&v[7-62BViDxxOͰBfIx%J[,j
Q&CR,ʴTKR.`ɜJʪ՛%
h4TRHJ
jVF5Lm4(J5hH^IUYӥlW	9V˗&Z0EߤRQ,3(5S3gkTg&Aq,WI*۪L;I%z2MɽC)9UR*Q5:RW}m/0##=Xd$C.?/[ArW.`uSIĝqw~kV/F#2͙c rm͘D\)(x±-,=7~k
h?9Zz8Ӫ/ۖ9N38F2ev_l-RSDv yEGL(oCRߨᇌW^oD'i^~>?""( 9wո:pl>%1Ha'ac%=}tmdOP	Q!8|&Y?9d1y;q/PKFo    PK    A             1   org/bouncycastle/crypto/engines/HC128Engine.classVSgN椇I!0i&؜0@^049MMslYE|)NeNeaoůZ~IRu?\ܯ'?
9
`u `k OEJ1JmdFEIF;{KE;"GMє~bDR_hwͧigS$vJ\2[Ыی#p%>Z#hbGv%R4Ky	|</u.
JמN\K\sƲ2Y<N
U)ق3K%BْM3Fp<򺽫7-.@$ȤiU_2Eܧ;,VjI U6+t)Kzk(	+*TRaJmJ1NIXq2s*,fJ̆&U,Lq%{XV/ۆY!;cZqp褞W7TGl({F1[Wl5s=l
U-\n$DM+2x6Sz2km3g0w%BѭSFVט/ucwKy 6!ƥ=3 aRlLh1̲nن^yDQ+I1O{F¦>fGY[IRS̻FQQXm-ҶRzlT
O9#L3dKVə12-<民/GmFTwы2B2OxJgd|V32>'c^}2v#2WBks]yREWL":l[tio4|_]tG[laoO-J݋! 1ٯ"6`hWǐ`;RSPT|TBUЉ*bBc	$롩8pa#*61DS8tqVхu0Tt㤊ȧH`2^f*6CUQ|G1|OA?SePq@	.(d×0|,+_c8u`&÷d!|EAaAioIvLhfS䷄/! VpE	Ir+Buo%١/
fXЃ414.ہiK7.ka-BK&fBx.:wmmׂ*R#{-\z"H4hj& ti	
AokP6{H6Cb3D=IO2#.&CA;+M;͛tkrkW׮.vM	rw.v.5js~VnN/g)f"1v^>߉DLHzԗ&gAwb8:8v&v&v&vؙy[/s=gp[Ǡ4{WhڛX~Zf㻤@:u&ޝaMx	vJx+WJgc{e]XB\@Z\տƵ@\SӫSHt/oɌKIox"v%N=YRF<%D[Q\Ʌ"Ơl72Hy4<D<֑X5ݠoPܙܑ
mՆ߀_L+]";54.;ݢ\14x`fW_KDWhӳqx/-='ah=7E}x2:(4
E
#og
;YJإkxSSW!-pZ(|*T]ח|iYP hO8*)ee5Z
EpG:~-剁,~q#^h	⭻'m)t5R:wy?;NhlK- 	x=
GPKBטA    PK    A             1   org/bouncycastle/crypto/engines/HC256Engine.classVsn+KX($A1%
61PP؀
ԐZKkiUV+6zɥ3L6-$/}Й/k떞۵{ss~sOO/~hS-VT/ꖮ5wq OZc]⍥R&ŮuRN$	[_=&@ ms8Fnђj$+Qˈ&t5*i ESҢ-h*GڏGt-Ŝ7M ɞdVa\,d5Z*iEljD(MPfCaJ?2#Fl^d-24T!gꚰH]D$D>oh6$rعb2zv*ʲP/R2S,ÈI0>&`uuLMb.pI
ZN-2sQhh%K7o [B(5Du-Cl-S/*z!keKFX1%J13dƜ(YF[/5su=[B91=/j9uiR{bʯJu+t_Ţo
Okꨝέ`%Okj`997fZV&
G/j$_3@KЗ,Wx$J鷩u
?FlJiPl;(mS+kdLͪE{oL
E='.|D"UDWDqTī""""^kYݽFk'u0Q޷ѹ%7m_m_=9׎ĮnךBWhkMT)A,=9	~_͗eDP/0#1(#FqF0r{d|!u2^f d2 /ኌ/1rߔq2¸&	o؇o؋o3wv"Ҍ1a$ˈ0#9	΢,#)\MLF%Jx	LH ψ#EFJ1&a .U"FFZyhvÝyS-
CҿHQ8?\Tsb
9Ցé̜a/?
.X|ߋ<x"ͣ,󘌋Ox7W7C%nɀt'<!_iN񘇟jLlmDNУ4Mm&r[:gcÙH $rIOC@@;(U5nGS
͞2@g:c:Muά	huC
V7:z4%:!k	O%`No>7*OhKʧg뽋xI7<ξѢD{ѝps#ge團MMtW+:S)gY4,>j}"L7?ΏWnL9rz3_D\am'aeW:G 5046RSf&fZp=3=4Ӷ%c]nwJ&s
}ڭY>\i\ڏgb//El`	Lu׻~ϗQ_3--]썷|K9ٖ>)f+=9xgXXǸ0_O[BE޿lDE|޽X,<jICu]Rxp"Ijt.{8*ޑw!;!ZWx+|]G'ۛF5^\I*]ۤ=xsɲPr#_-gAo$cE|}E	z>"";|4Ԃm
4߿R^ʣpF˺SwS2!N#vMYUPK>]Zh  J  PK    A             0   org/bouncycastle/crypto/engines/IDEAEngine.classWsҮ5,8+<Iql146mZZKeZLC7m4_@fƴ%bMf{9{y^_6 t`lz.i"^1H;tgKɼѴ
tt4|&A$L;Vb\1uE9F\KOц#8>5AeKD/挢)v3Qֳ;C)-
-MS*E5Җ2fiܘ]y޴H#gzf~,mK3vV̞	6gZŌT
!Ӌ:79$t3-/h:D33?f\HہV&>bS15pdJ1CP94V6H9oZEJD6R,2dDwYE1db"n.{I[:Z1t!I
zN+Yʂ^dt7@c6%	!7x!-JX(du	R*JQzϙVs֤T,e];:NbRىSCav
u1Z42z
=gn Nlm7ş
=Zݻ3v<i:w2KTGCpb
KsxF?"vzIR*DCoJ%ˤ\Zae"4f?F[EDa|]@J+N8)[@^-}hG;>'9xBZJt=Lw;/ֱm6RWtw|s5{9:
&tmNw9$w|ȝT2>SFr>wLHx!		
bhpo0*$=^^	Cp$8 ⌜fD0#!M³A)~\\ Cb #"0 J dȵ Y1<#F)2b2RbMFLb))[1!~|9?AZў
53?ƵقN\ 8/B8iR
IP-?ش`/oHr<qb%}8?[ozO> {ȄSa'u|0*~IFbaRrC	~W}O*
q3|ao*?tn=QKb'u=y,qtm/忣>F&*~0$3?1ѹɠ>Tx%kɠXŻc`<T*~S}Jlo-}-w]U^qY&?s|6ghj|"4Kxx"Ϩ7viN\d2	#=lm$B2>`rOXulH]VIшyxMp(&{D6۹7){hX"\ůR>Z3N$N9ߓjSdq
_\V%XHͤE hD"2SM
(bU
ſBod &Fc[1%a^!7V"0J	6n
5Ӎƅ3LѸǑ	~lZ6){(6ǾC>J?n 0ߐ5HܓLn7{x'9
Hc7O]P4Eteٷ#0JZWX݈^k5;4;;O݊cD(`=v1Z0~HuB{DJ)WU[HDKݡgX(^tD	ۛ'%jMW/Գ-ljh ]ld( ܕʝ<qE\YSίgM|oªo;Z:3Qϊ{]{c۝	׾LڅF؀
SLgeEǄU-c*nލ9Knأ*PKĪ  m  PK    A             /   org/bouncycastle/crypto/engines/IESEngine.classW	|T^oDȂO`հ	FŦeCF@P"鑗ݗeaEb=ޭ֦w
P[l]{D{U.I6?m|?f{ gkp7N0ClS.voÆ6.}\2+%CJe:vTYe6w,T&e# JJ36F=T&W"ł6#ɼiXf>bm42fdՒ#ĳݩAPxc F.gf7`F_<i.RIrk%Ì-F*mtmFHǋit	53Ŋrͼ@0ĩ/CUՙXfE#-I=$嬶t6.Oeʎs7#ohzRibd61P
fkƪ$Mk3R}ٷ6u%ѧiOm18l&(t6a&ө8QiZcT&n.OKM0J1Ryco`lQsJiݮhb.Zv'e"LM^#NV9bS	@&T,	:ݱ}kt9OZӴQ鴙4K"yLZݽɌг&VL2=},
-M+lIkamlnK%;2dvjϳ78Ki4=$;מI#l+s6l3QfPyIrOKⰷjmF!8
UŞ3O<&ÆjlPjԲfS'US^YQ;l3Ws9(jzЭUhh_.qc_
i4UsɫGLt/MY'bJzUe*mu<9'xTYd[(ˇ8'LYc#ˑu-rRӾbCTIoe;T[XHތgwHN^:b.A?]9
UZK)X`v+Rp
(H
*Tpu
.U:\`+x7҄VݱoXP:?Z?^XDnJx~rUzx+\Eϩ4ǎ^5d saMs:VNhyy
7i
IrAuMM`"o?'Oo؆8eyj5A>i
ES0wjT)
1IL	&2>_9ɓEXvwr
\ȯg۱(`rjnL|L֏ڝR<Ս͓co0kA0a	xnЅi3,5wh pޥMxѰLW1t443p"(:gJ@P54 hQ4$Nt
`8{ya.fjx5ޣd{5>
q>4|Pb:|kf(>h4Ǚ	
'5pg>y/0|K_f
Wv0ܩb3p4!!Yk9JETQff>7*p^Pq
v1ܭZܥ:|GQ
~So>o1]7*n׃~q Ap?Z^J?t
=TkZ]e:f-R |qdIҒ%iOFYHeIre)I-y.V,IIz
v1ZgC)!98GMx"` l=.*2<q?|
?GA}}ar(}q:[#{SѦ#M
OC?Z.M~lێmPЄr}f O"PB	=p̉nQKPģ;)'>Ùq۵
KuyD+b>S8ҽ%QA]*{BuȰRj?<)7׽T>7Qss{%"qB@B
,vs
?xߏa>\;(~G.| =mn\^
	NCCBQt;]dcCxs>{܃w?g?uIzbSTz`e#Xr'
{hz fH[l6n]-A8lPߥev4nu-BsH&mGI"8{MB8L }}1<Ŀt7R͂Yxl=[4cK5ѷ~s{mes%R%lj^-o\[2l>Џ{^:vQ7k!`{8cJᮖ`c(X
w	-freRI(825f,1XҺHB;Q3J_HUJR}v~'>lGJyN߬H4	cIo`e.ĳ}q<wcz҆MY.W1/'x7$AAU)y'Z;郿
R%x|XtAaq%˃¢8KݻKLA_^ڪu	<pOa)+5Q~vy:v eGT{)m
zf>#(D+V <JwAV;Y|yy.PprBNvbc=/<pֿǿ 7X&lmSY~C;PK_Tpr9  E  PK    A             1   org/bouncycastle/crypto/engines/ISAACEngine.classVsiĒ@PrАʒmBIʫ
4jr!Fky+u"848n@_4}iJ3LiSfA?k1e➳3{{ιy|"]x[|w5kI&-r-l	b )u.Zԩ~FZs]9!frNsiR>

?&O[N*$fTMWc+:H'@ŮanM.Y9I%+*NN5	(5U}${*1iSh#[ydO)bպ9c:IRI&+=BT!{2l]}&UáK\i%&{|e0(9#[6R6pv[ɕf(9iͪkUGW	yX!nJϚEhu,$`P*O΃35לL3$eGʖM?J&EILURvR3EF2٢3Su+:i:C˹Pz˰霳fYUf=kRK+rгtRMW?}
=h1e7aȩTMǵ'wt-!o#`>ZO5c-KHUu22S/=k^u*TZˑȎY3	ViX		9[wl>c'׬A7i0!4TC/V)HAGJ#BYELEn=*zUdUTKUV񔊧U|I{U)5lԿXj5ʏXojlӶ+ʞn#5)7|N5 5Y+UP0dk|:c":Lڙlc2 ǱIǓج0b:a#Q;t|ut:L1	::P(D+NdrI$Y&SLLL*!<09jC>ywB.0!q&&:!!	\&6^
FwϰF{zSG1^6)\&_g飔z3Jx`bx`
J6$DO<y8n鈀[^ZL[d+L	wI,C9+ȴkxG`ht?ʷwqu?7qiou\Z'CUXo?= 1.*N
*SaK~B~Pj,C(Ymg&!JIU+~vv^TK)??5!l! 6V(-*oƫYNGJɈ,gGx#QÎFy➸[)qxmORLɅÙ(윽:spcΦll#tHCD1*%mڪFe> Hgnй+Dga+&4!Z8FIlЪs̢rpW#gĸ,f:Yˋ+	B\N,M"v7G!vmq%|Syп	tzn b+fJL:ݛXnI	D[km]`^_9Qw^E`cm!#
f>T_aaKmN9%*4ըHD 3#;T}|[((?!LI+=z"H.b(>'wr$kI~;HRxyx	)|h{MM'˅.nxd<W#/l~N=ݬW}lGF#m/L
)Q)k-$x7#7gEuUFn2:T=Adb&XU[`jh󙰲V&rX]Vb3ae	+YzWpV6!7 PK    PK    A             ;   org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_A.classVSWmv%qѨE-mC
/Vj
MEq164	6PDVԾ]/2mǯ~N#{?J}u_.l}ven]BXE"C73d[m}-e;h=&	e"D
іE&IHjx >Ivlo-ʑ
%88mmXrl+ePh+a£F.W[__Th\4*Jvngz2f2Mys)|VJ8GY
=׃iLǎqZLdԟi/QT:GC*6vD
<ǩX}d`,3fz|&hɔi䂡\<cFX^ϧ2fW6ee3U-7ONKzk
uvECieC	շS`xޠZnjD;#RFf&U,jĥōeW@+4E7nmA@B5R.dNX?
*TTQAE&?s]Z.mݷ<5"]qzrɉxF.ӂb/ςGLhvkXU2T21аa
C3;eJاa+vPIpN	85<
ǡj؄2M:D4gxiD67e(a!F22b3$Ë/1GGRtᘇ
H3d<8ëqmf1<0F^a})-Y^2`iَDDD#FȒ/OWciCD9tA^A3W-RW]m5%f^/$|CN? .w><,}z51_g*ޙÅEe{ $x?9&-:~\\kWo+0S|PԜwDg9EE[$zn;]<
T+,3s`WǻV4K*LW7^:*iIƟmhuqG)iCک"n8C
_
gs,|vHD*L2xhJ%VxJdbN3e*:W)90)u'K[
 S v.U 7^2*Mn<rUt,"R5DuqyթĤ2UVYiSI4P-=Y`
%-׋һ@lT,=k-]6:B6XbѓYVTLF[ñNY=9hGJ[d'hwvFԗ%8xہOE0wn|
a|8hL1PK\ĺ  \  PK    A             ?   org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_A_128.classR]KA=wqڥJX&kR".~oa>ֿԇ(GIDEk	̹wνs?XAUuB߆/x_9rkJX]~y;R˄ <q~yL8"!O|)"Ǎ2b?{/dٷznVz*;
{R[Qv)IԞIHH7|PsPuﱥo8^M$gBWT&A&4L0i3
2
f40Gx`S|Z"ϼ(4hռ;#d8{,UHUĻ^}m.hnaey6m,Z$,$K)!P"F2{o\>FEQl_PK쨫    PK    A             @   org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_A_128A.classSOPN0T]vZ6`!b
bdm
4[Җx$<GPQФN{O khjUaGM$-a%F7k
Vc?iv ~rrž{XvDrxYI$vqNj9'O.(l{zHmfQZY10>dچLXKN&a:V?!oowmZ׆ˆTpOl̂l8ltLs/ǒ"ʨ#׷x}B7nK)0ME>E:aL$)y2G5Ǭ R}AC:s
Qwsn	!jr;GηA bsM2<<ˑVAj)gx5R#~7ϸ25y.PKˮ    PK    A             ;   org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_K.classXsW?k|%{GVL#`;n+nuYjƑ(uiڴ<
)%1fWi8])&~s;c9K ~8	-! x`IF|YPI	t ܗnIMuУS';=ӹz9aec[qg}/`V,k8PH#OVH674>:u0mkm磍|?5>16sS(VNpcmv)Α;v/+͍K՚SU%h/T:|AKx^ӒA0A 9rebY%Ks0N>_V7
m4НJYʗp٥Za/Wj+XcUgqrUӿ>\Ljp۶P
Sg33xM&lI>Gf&8yQ\9?/*ݟ,-bP?yuFv`5ljٱZqbkw(Jaѩ&5bL-yyn,J7q7c*jìW5ۺ
3V|;-ᎆN>jR&{R'AFϗǋ#lH{mN>|
)p
p
wp
Y>/AjǏ]k^UfVУ%Y{C5Ąu҄
	n"DI|R&|
&6\Op6-&%z4a&$!f.h5aڨn§2a:ig˄=mp	}	!KfMs&B20Aa#G	J:< eE/T5c|828 'o|Y|`$c_#x	'	"x*)W%*Vuu̖JȂS.}|ynܩ8GBM\
>gq](@!tL
Q&R-죢(^х@ZW8'פ}J^/y:ks$k
cSrB
')%!M	clJC;S
6Ed&g8<M,!&B,тIl0b8/'Yy8-ڳ}5Q߰:smzHY>Ͽ	K<߇
{$x~tI^Έa3./ŤI!_@$yT~c8th~A|O,&~^+]o,δu~R_u9L֍{sφܩ5>d*Vϛyӓezټ,ڛEPk'lJ&yy"鮸[U	|е:#/̸olyE9~|um$}/a/THLtgJ8!_h$l.5|~n-*G'[uchcO[ֺyhP^<wqLҕLt̝WyK~vJG9tsۯq}r
SOoC3DCSd.]~,e\gY
H:E`
)V`o8"dV<~T0u> we7/~G."!f4Ţ8OTrK[)YwD2&?_Κ6}#O-<J[a`2<('\wzY!Mih{+3Г$:%_MxnD^ݽ%x/i>[dRS~R6o"L=r;$Ӽ5Y"v%'v3LoM%YZ=,qϒ>mkx շS!;̪V7%rf
"⮰FJ N]o%Htrj#h#ʈ&R`'Yp
s'Vb[;W7ޕVl-d,gյ0>2=BN4(A%g	F$=
MO)@G3q`$L̰YKUsFhJƮ5ǥCaEZV-se=[I䛖e'"Lt2(bII+VԊLjZbkJ)>:
>zFzW2"@:˰HXZĬ!`Z<R'ԡ:Q\đZr
:\{} jV0Eȍf.i0/Ah3aW.3KωE.`uEX1}Uq	FDF2rAh*vA@MXuś荻D	Do[|a0Z@X0Or,eLXQrkVwl7Q(\WGNDq]Pu<X~X~'d/y*zii6<<a󂧸VEl^T*
i󂧹FES!K$Rcm[r*\ה"BӽيG!oÕFFQؐ6$z
yw;rVzXcժ*RV#ꄜATꄤy^uB>QB#FFұҪWat[0Gz)y^AʝΠ̶6rf㍜8S*ւC*cAL*[zUi[Dˏt{#kuG#F])ǣ_.- VPKb@  !  PK    A             ?   org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_K_128.classRn@=8qlۤ$$vZ7 nB
QAd2ɪڑ}P(lR*Q3sfήώǗo ְʐvz9FueG 3|6oޘwE'foOV^Q٠c0x~GK䎰HFP$z8gvqEws͇XXu6Ѥ<?5AE$~
~Љ=+ f
1_/ÑF#Pp88q(*q1ಂ+
Pƍe
)`AoGC"c;9;	Cw$	Cᵐ~4z+,fe7YQ)7`toZmZq4f{"E^r"nNک[vv#eӓf ґE,)3ɌNqŴ?j:Ż^1}3|Lɖ:r)SLb/
Hu]ᕰ'PKP    PK    A             @   org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_K_128A.classTmoP~n)X7{TP%3&8lF2L#
@K;+~cQsِ鈙ssssϹ_Oa!*Zfh2#oimgVTYvVoluewFퟞ<Q*e~G;8nӬ7CJN :ܬL6.LYfX8-NEm
d=oZ\8+l&5Ꜯ
؂Wnoږ'lhI
S׷`fE/'ndF}xb㲲0&tD$hn`^u0)(:!cZ[:t܎aH+a1x,DI/၄45hCJ\n.;NN+.Z^NXgɤ,Lb62r'0g
[JgvUMv5bIIE	
pf
g?B^@E!D%b扩NOxl򴬜]gu_%ڜ͝r>O w BAQUg3XPKdH1  6  PK    A             :   org/bouncycastle/crypto/engines/ISAPEngine$ISAP_AEAD.classN0F?4K_i*KXVٕj< p^ڟ_ O|]tf9k^ZmZUhB0k.jU᪢r'SwTԯJm#0}TU#{}&X^|gxo8у>kV	JIlct+q̳<_:݇=ub8PKHŤ     PK    A             9   org/bouncycastle/crypto/engines/ISAPEngine$IsapType.classSmOP~.:t*ΗɋڡÑ@CdѤ	SclI[La2͖-~ޏZv屢asνy9(ɈPee$$LHj}`ޅ[ȕVcwmH%pQ=<6J۠ok|k?؊m}"pܶ~֠ez~[;e;,t3{=L Mg慩wM9A6'8O#hF4	I	S	km26UdǴNάOg2cvv.Nz	{4jǵv;U"T<Ă
*$,x'Qx^(KsXaU
Ax9WmryYIȷ??9k[z;9Gߗb&lYmUʘbK MzSX_x=,#pB$5
7G7Ln|%!pR.pW_9I9x%4+(%0.J?!6!F3<Ěd'i{AZJ+l\"σpk< "r<"<X%G%"Ț"RIPK?J    PK    A             0   org/bouncycastle/crypto/engines/ISAPEngine.classV{,i%Sq)Md1!!4-E]kYF*+G}Ӧn(qhm;?aI|T߷yo̼y{܀ɇn6ŇJh	&NIp{Řĸ'cb	u2|oa
!I
1pBVT"[2u@Bk4:+iD.cY=unCz1oi9$Hd=1ݱkpoO4p1nr391''iJ7nTr"1'6Q-rnc"
CKY=,SP
5	o}#񣎆o,:4%2(oPgLݘ5Wz^6;F@M4600PtvUrUͦu#c gY]LCQ(/5Pn&9݈SbyRZk+1[4ޘvbhU/qu2GEP
?RUsݼ.'O'Y-M0ŜRеuB(Z\r8Gt\7)s;_(P$tc֎Dng(R)մZX?ZꨖO[U/%ȟT١La^3&S.４Y5S.Z\%hNamfnL.&
ZZj¸seiVnhҊJ	˩+k/tQ	7_^ʅ}WBGᑫpxqXKfL`L[$.kt4QBkXÚ5	Jl1R3+SzC($XWsj;chF^&yr3aO~1C2ee*2nq2d!㰌qϔ1ZApCWWHDYlěѨ/kQ"b((<z.Fv/9]K)](t3ʕe7T4@s,iNE6R>G`|dRЉ.00<a0:zOg8pa'La)x
⤂'
=ٽ
0DBnf8p#|
g#&S8hUЋ6hW<<E8Ŗ]
vnHA/co#713b^W3cx= T|2 
ocx;;N3cx?>!2|çd> t 9`p'nf>AAgyR֔-R?Xp
~tmAonfud(&_cʕӬy}R"6~R]J#Eu&K}S^M]k|)EC)vpD!	=N\D"+R$	Lq~tg|#пOF."w"e|FY`-73$[3ql֋PvxV#y]s9|>{;KJ'aҁrX)7
'.s(}#}xL>H8+V[dO%Dz
Km^Zy7Av!*
6,ep#$G6_wKS!T;:ݫs6+x򚎐{r$VX9.CxW\W[T+IH̙^7ԉJ0ٗG˂__dѽE@(6+xt^0YwKHB^}t;)U1ꝞzO;B$&to߲52RNYpE<YcgKSQZQ)Gx9k;YsX{
S1&pt50st96~dpa6C^Ru\T-9N|ex;^`bap2~
𯈦<=Awn]w=y#y$NO/3;Wv/(PKO7    PK    A             /   org/bouncycastle/crypto/engines/LEAEngine.classW}tWMfvfFGlHMHmBI 7he6vw	"HEVXiEm)VR?w99ϞRwf9}{{o. XKF@Ķ%=wTz}?>':QDbuMͭ,lcAFGuP՛['%^nreakfC:Ir?7WStRo ֖
]m4YkgduGwƷwhtvP
nݪz&drzHX*rNX>eu~=
h4S,52;֤ޝܥwi]x{ay?7.k䔇-gg׆"9A)hm1h^dP&Di}<vK,yٽLd唻^%%y73ʱlVKSc\l8S	}h#܆:X2Z<7[S>3ӪZ^Kz˷fr%IZ.k!B2SlYf͝T"K;42^>:EB9&
]IvQk`.ɓ"q:O3)=ݟQ 3vStޚlaND,ՒKzP\vHmZf[0ud::L{`ڰU!r+e'Nd2D}#>婷yHdv'eM)~Z!d\˯I<8݈3͖r:~Pm`J[d(:ɴn4n
z2)_O6Qױiu1dsf:DhW]db`bLjI!s,6qi;jYDz; 00AfPenY
V(X`lTIlVUp)آ OA\k:N
:XM?쭾IF+zzbkA>>G|Ex
0Mu&>7Nb皍*R P>Ta;Va*"0`$Ý^-x՘T|aQSщϫXǰ/hŗT|x?_ᎇKq_e#p/ra/v>ua	'θ)v8< F]4Qo0cxqo2g÷FN0<gu>2|URn<1d[64,YDtbu6=GzH{H:mNkm -ZoMO~Mϐ~Mϒ~KWm7T4"E,'}M"}M&}MTp6*~CRI/'i.TPλNc$ߤd]/Z# 9:[Ʊ7:}Q<qj5gCjspY:?t]h4vgcWr8yOqvFg;u1~Bn8ix!`B)NSnP7D)%zԧεQv:5̵:[(v>ceC{3HQ2B9ڿ:1%5EbMZ,p^8;[O׍OЫ&1$U+":+UGQO(~LN@S:/7N-5
!T	1w'⠏1X)lc?F	^5gQ0Cx+[՚!Шk-Jj?ix*UB=T"W$DtNO'ݥc1ůࢉQq<Bv~	Vl,I#V^:rwlʕfnVZ43S3.!e+22\Je`<=U.P6L+1tWǌr|m&_F:G%D/ r> '-=%q>xAIwu:G=9xKd_oFdBSPIEz-o.Zw\\3k8hb~IUmfLC0s
lk1!PdC
J,AԔ:h}'-*cLx2Wjt2'9-҄ljsYY4 rb7L)ﮉBrJl2"fPUneONeWQn&y+}啬0}g,pz\y&(FT 0
	t
$AxSPg
.z|***{OXg:9iAHNxj4]Q#D:<HT(#Q$uPHS8g^"/PK*Z	    PK    A             9   org/bouncycastle/crypto/engines/NaccacheSternEngine.classX|S&齹}6@hk*5hM䶽&YrԩsN{(i'Zpo^ݛ#_9ǹGFdTʨQ-cZu2e, 48CJo(Lg8[F@jȸ@;eȸBfEޞ퍥aD"8ت'
oѢ}FW3hhIWOQݦ$_VSb
MMdQӲZoQc-y65&--&|7mIŽF'yɉNxx6'Fy{\Z{YաՍsՙIٚ
F>ѵHܦH,ղ
Ǵ73!ށX8I%	=
CZ}%ސ_F,}it`8z,ڞhHB훸y%yexG4nXN?/_qFdk0
x9c&h)9z^&VK7G@qx%$eS^rXj&=ѓH3pvNFKlؼCSFRXiV!VsDТ?kQRtXОӣɎ.-J@UfZ/ۤD
OK [[:+jOzg.eCh5& Ij5r,oB3R(-DV9T(ɤעc2S܎H)T##Ukf4+I^+hfҖ}q!F&\.ƶi.o 'fU;bbvd^WD-T"K^	-(1L;z)N!>? LBtepkA5БQHh&75D"Z_0e
y{HˀT6s%.0oEPDRzČrr`
Ea&)C4lM9Km[4
iU6Emn%4m{
"(jۼEULD_C,4
&`<ְ&98@I!3dkMj[
lȫj]ZbNY^ӹhs_>wVw{E>mJbmctF>dM6L%9]eXzt^X\K:'lCfl"M)*i_
輷bKŰ}y/bRRzez+3'6Rܔ\~
hf.gHfyAioIvIXg5:{3EFb2Lg!mo>2Vh&#&Γ#!$!,A+OBJHHHJ0$$lMv	>	WS;j}:[y|S
';dimގLL.ʧϴm,ozc<2?L<5lv	; 
OOmdfɫ3
+k6&aN'ih=[,qk7	WlQ~b/mV̌LN^
\sZhj7hǹ*\OX*JܫB`
L.cdA&~xU\dr	e*TTt3*ލϪX!V&r>z%uE2CO_Ż%*qP&<!&ik0&&Q&QqG>'w0G29(|`=&?Tp3~<V|ɏ7
v	&d4g<OL`dg|w|
Rp;=BN~י|/E]5&?f{yךs

Yl%A[1}2XL{PK)Ḵ+:ȎB,U%	K:q?褣hT*EwG/-CxaIo.%գ^:=-ǰβ5:s=v#-(qQ"W܎=,]jAuF5qv߮4pKi'ԃx9 n[ڏNi{a(
IPQVD[pgv8cO7H#_9"
9#1b)'1TI+a8$AagPB'3
pci&.
Cn}*L2wrh~LeLcl[6yduY]JsK9YQ@R^Jf6y
Ňqs|<R].̻۵`XRm`wKGY݇GW۪Gp|0vv=a3CP{iBm]X(OdR& er5*nx̭8݊x<١	h><k͞YZK,i L(L*[[p6 fGEQcosW?&*#+VY\4dԋا;ǲ5K&QIds(jzΌ~.aD.7E
x$sD
(R@6Cٜβ(pqS*"ںxʖ	\C,Qc892(qJli(Sei*N哅淍&V0^oGGV ^LrO@6^Dn4*H"7$RxɪEQ*{Ԛ;wS暐d*Ҕ5磒k7g~.>{=^>Q9%gKH$fTqD>1Vt4l
_nz=91\kƋ:AIBJz'9k&aεW8[JVqd>GZA|rH\TNϟo*b\O-mmn{f̭4-*CdomgDs(?lHO#J9nntaey9>iR4vwݎl.=cKi=;b2z+P\|)!0,%1UǠY*LVɉr<@oƫov 2[ҼzBnS;z>Gޜ8	y{$.zDrv	~~-
Fa\ǸAxUԼh7Jb/Y?PKrB`    PK    A             3   org/bouncycastle/crypto/engines/NoekeonEngine.classTQsW֒vWttv!El(m(Ďۈ8Uhƛ]uwe!	+ÐaaLbiyd {weq\
Àvtι~{w?!
E>a/J`k؁Ւ(ׄ,*jܩkk|B.r\inĶ&ZM ԓM}'cC"ЁcpY}vQiZ<֝-L~AB@y^XI_6G>qt,ݞt[ֽ)Vses7m7(eD\rڞo˗K!%fip1J%I5f~h仔vaad
DvT{{PU:T1}JC+Y-*5FrUnomOqKNմځ`ۈŋV5N*QoWۼ4б*^Em,sdq/T흙R*ԜM+xjۜYJ^+Svpt/L7$vOonV崵dv0ܬu,?cul
*1b(ؿ¿N1T9*.tTXmQ'
5<A|RX|Ք[ݧ-qMq
UbQ4R(`
|Fq(xV	)*|N=on/ƊS/E͹Ϳ;^\A{}ԞwHGkS_m8u<_Gt (4/_G!dtBVa.tP). ^$c
[Hc_u
5ƊI.^
D"/pNqqF-.,.5Y05E.\,6=^._ץcz+N\t,|/C$dzhL!;K$|T4
&쀐IKJFIFPJƛ$^#͡|O2~<4I?aӍ;xu={|_:Bqy{#:y!y0!c?GGd;	e`:9VNU屪je6c&:@jdC]j}є֛(J[^ʆG*V4R3bEC2ΔoSJR\&6pe@T臢p1`V}'"mS7oL
sRRfTM^|rߺg$G|Soߣ\"W*zz[R:ߗ?iVd<w,&&`&WM7!*,,]XjX:fLՌ
|# \4}QQYJGDiQQ:3r墰lh^HFoaՐ!<ǤV
֦r'
rj[kc q8-;$z@ɈM\7dҼ
,QM^m;z
$}ء-~37cSy`d~"L	;7arTwB"]`W$7RZo̩7zCe7ΑT
*LIj.~$?̰̲HE[%?PKD  
  PK    A             0   org/bouncycastle/crypto/engines/NullEngine.classuR[OA-TZV)XZKQ1R
&Ee.,Ԉ>+|4&&?ٖ6sfw.3= 0{A	b 75Qt
/U+|H	.2D
枕KKZ÷0tInjɓ%7FêWOb,[EuBa
͟0|<C?21ݬ7DvRXVҩY6FjPM-W4Ɯ5v)
/.td:C*USReWIek0{UUrny^6CkAj"jd;;OwarE3pݶq6wң`

b
\PpQ%qDd"eav!:f2VTikPOUZpۡa;8F(Ҥ0410*wcҌ#K#omR=ytjhwxlt՝'j}YI^xd^j=)v!"B1*,}Eci_>C$t7}8Lrmicߡ#VVzlԖ釿
AreY^1@~੷Ո	y`#s^GW#&>7mEV#̡wu!L?QfdD~"vZFiW'i_PKϾ    PK    A             2   org/bouncycastle/crypto/engines/OldIESEngine.classMO1+_"o1!h©,eiXd)&0po29N2<3Ӽ/s #0[/:n.	b:KL6M}ܯF
'zt,xt$CGpN֪-B_u'
&	,4VMv{~dJmR{N}ްG?&@)66]FɖT6M!'ϫ,C`3l?-MDk [oP%sfZy)?. Ț/PK^    PK    A             O   org/bouncycastle/crypto/engines/PhotonBeetleEngine$PhotonBeetleParameters.classSQoAg(تXZgQH6<6!mcJi{h76MQh	};7 ^Y8R*^+g=R3=aNA_=g$3|{6@p=r|GZA45]1v]<6OM6Eh	CYsFʆ+Fu
ʴ2)
M&۹cz-s̾EN[>shw_oˎx_T+im,uH"#%M#
:iIs_C4dQfUXQ6!uRNYn-'KWi$|RTAH ǴʑCc;]!5X'H]DBL$@iiz	F_@ 0QKxB^n,_-'AD@~)M(BXr=QNP$2Q.P=Z``Q9'䑐6kP`4 PK    PK    A             8   org/bouncycastle/crypto/engines/PhotonBeetleEngine.classW` $nѢn6@4QI6	B66lCٍM0үc[kiklM[ABPS+XmگڟJzOܠF{{{{C'9 ]sU +9n@Wn
R7WB7oƎM\?Uj]ݦio+dow(~׮pkN˟#֜zVRuŢhz-s*`֭V5B`,u]W+$
xJ
 4c;ZۛUW79͹k[C645uCVjm
NK}Dp:@^ߓH'YM8Ь
PSkekV	PPO4Uk{
%dEʪmhJHF17Ⱥ>+N'pp;{z׆{/d2<ؕGpNEpWS=4u-[E6JS+9ؗ&V~ (jL[)^$
JXqB^Om9ؾgK%5.0GQۗE}Epu,nŬp>kM]33ZHQhpFN?[RY9Td@cr}"E[K.{iboIX"}^HvWwbvv
vSjDu#	՝dñh!c%C@Ex&ˮgn4U2jNfˉƭT5`8e5 Kff02+޼qhG_:C)So!dJnYϐHY~3j|p
W-|\hxqV'l>tShf8A@+"j_-v9<l2b>J&'/WI+e!I$z0STgo%eŬ.bws<n%[N9eE̒C	p\`%zA
V3XàZgv21F`N[xkŻ
l͛:h)gbL)wן3rL_9M^3'>sTuj)^Xwk_
o{@gu^bi4"|xS6Lou(3t8L&xyMtXAPt8`eA|Xޫ"ءCO`'ޯ>Å po#]K@֡:T4K+@!
nda+^jaa!uA:,u8>C7A.`>Fq>AIO|3%'	n!_&E|`T>*I7 	$M.w  w!=O}4vG0A
0m0Д"5$"Xxq;X?]XS(FC>Q2/7G
p*ůE]==^2ă'Hו-P3m( 7Q^cR8e/gӆeSӡKAƔNiq{v7 W@ @ `p?U?w [ę2FŊYQpςXݾ<(7eIÁ^8$
Ñ-uRx8*"@D#8Px`p<M#
'qJ\Gp1pͅ"pLpX`8<N H;f9>8[n?iUevjzG,PUQ3)r?݈^Ƈov`
(~f7_rv,Pss㦐B/m%<{7W^0qgGn&$f	J@24
`ECA1A$̖)Y
#2IJ[}wC@,4%C1xW-Ioՙ	G+O?MY>j@<8|UCA_)i\zB4%{b8>'B3u,{mJ7L GL>6Lw.Oſ<!i .óCjv8]te;p2,y>=ރN.xѦ
&y;sqYձ:@&+ڎrT4u[|gJC5>Sm`r!;|Sh N>auX2]KGSC>47g|5vR+O6OJ+ *-f6T_Z":0vFAT]ՔֹKY9V6u\Ў:ͮyuW7T)Ɔܦ^0;L4PB}035gigBRZ[_.aA5<"g)mql`;1Ne0wOo'%ez"j9?4kNeo3K˷ P;|2<r;HQL⛲@](5+1u8FxʻF@ư&cT/3e56>payq
D1eld&NG.*Uxx>KCvCR+
SFhbYESu~Fp8An*C\U
N
>,n,Kmj]4
3AvhDf

752˦W4Ʋ v"sl
J
:ږJ<"M9cC*DpJPԀoAa:*MWL&/K.0jz92o;N\a9ѷ`84ww:tR3t_4msnNoRb~TdAM4j($%&,Ԧš6fxBm=3tDp!dMEpZMID$D!/DqI<L]Ī1NF&A	d>qY(*r
"uIDƉ H$."шVHIX5sx9'LcC)]|Y[E8BِWD89hbnFf1"	)h$Z=}Wqj<nE,nbSp-T#BU,gEP]L&YLȻ2GH9uiU
nю(qE3eWNnYd-DD7rbQ5
=\r9P}b3fhN\MFʮTsaN/tӆV[˝{g)yII@bWOFA#<g ~ZPtĒޱb)b{KU]Y
WCPK0 E
  9  PK    A             /   org/bouncycastle/crypto/engines/RC2Engine.classݗw|SUǟ4QX(RAM(dV
E(`\@HbԊXuo{½/ܤPǏ|>|<9ssnZ#"6d[e[J_asCysʫР7"[N6'GFprC醧|ҁ+fOtC=|'!sh]8jFc\#+Ĵ餷w3eVX!xCVmbi<Y.`׊vzp!YuVJ֬Xb#d%S-^!{2vG
Y6'Λg&Ë,N/#2H]D<S^h1;H&c܆XCE\x(7Lpvq
1)WwI:`I$+I?рMHĪF'Z%:Iӓ܆ؔQ5w>ޛBӓ	nWYc8Kԕ̍5FkXixfm++0}\D6SmMµV4.//֌	dUﰺmeW5&JMW2l$75[dr5=U
%|CYd8lLC	o:O wއWFP1r%	]dD*yr!XS#nS|2e)y7BSL)6Ĕ3e'Sv6e)WnV
mRqʿZyX^=mX81q3m홷gn%r;{^+=2B|^-+W+;HWF+9++}+dW(F)>^N{eT{L$*'/G2#R)=^:Z[_q@EbG*#e?Lي:׷<bv5`Q.5N38d8ţ#v'ٝ1v[Ew7\f:hU7؉9v1*]wY~g3sHze;v.mMU.GKۺ5:K4gx-F(t{~UKȁYc,+u1?ɐ*f&̜dӲRRvJ
qhUSb
~UF[K;ǧ72JMmdl9]>8%gM1KjM.l&!q5ecdq3MS&2wMyEz~O:yeZ-\mv.)+e{eHߟ\%%b̛Rr7y4M]je|`LAYUPxUUhղwJ'CmwH捫HFQ
2adT8Dk*#M-
}=]voz0]}M"HRhk
\YVi\s2VUVY比n"no{{YꆩUՃ줟sxY}srB˖_>z23)=+ТˍÎԔ
rQctfAC<=(e~g\V4h7&2k%n?
vì&~3^=ï|k'Lpk9Җc>S]γf;]#ur
医zpj5N6^f]e76ڃ&nh}T.;{M,mM
]<2d0~+4twn|C&jFmB37;oܱWCW@%AtjA陷sZؤu
iC;nw UXRpꀁ&nUI_,2H~#;c)d\Lvūd7\@DfaG=Q@doDnd6*>}q	d?Onq)8 9?;hrn%dd>&~,$p"YL8,NPCNG8d)&G3+!wÙH@ r4#wrcjr<^&`8ɉ!-!BY޸d%Z8o*INEixd5F3Yxe$9J1< 1Ab-9]ZNi!L΃IaY!dߑя\&2r2fqBd
L_0\O%YK /<bلJu[u8>Ug#UGb(|:?AX\:	NuvQɪ0_u2SpTQU :>YPLREs<:T^TrEBu1W]wUb2DU
죺OZ*쨺k1Uu.Q]T7 nJ8DuFnő0Pu;PmV,S݁
;]ʻPZ91HuflZS݋"}_u?֫9!z
GQ=|IԩBD4R=Ts<z^q^E5RT7-zǪժwEvUW!U}UwR~TbjR}swͪkCo;{~Gq'UW#W/ԫ6wo8L;S[eA?zoPK	Kj    PK    A             3   org/bouncycastle/crypto/engines/RC2WrapEngine.classVwMv3;$Kdź֐6$d%]LvYdm}ﯶ*Ԗ$`<Ҟo9s7xz3M Gs2}~>? 3WF`
:lTpC&Iue<$!:2(9ud1Ja2+Y^SBW.a	RvYSt(ĮrФm,WXv
a9IӁ
J)-Srm;nHb</gxV`e:Fv	sLy.=x7K%8Q[^lk'I	kxl«R\[FsfyY!9*FyҫYR*U,$R(/Y"8nYRUZtkcvulXպ,9gOVLWj6yd6*8v1:S%Pzv0NxLN3i+5B5%4KDhB-Y,xS;#UEKBvNI|<ef\8ɺ=aDe.O[v)pVF:2Db	mQK
V`7G	Stj|E`5dϟȌ{Ur˯/3$?Xv=ߤ66xև )n!9ayI9)!f3DݵoXi
$	33uFjLOبt#Jีz1nmX}f]	1p+eK+,GL.OttH/xF0<c,VY0ƙ9FYxY)s[d|N}2>/c2vx@ƃ2 c@Ơ!-ce<Bۘ;{RUe6êd[CN
|VzoɜLhC*_q1ZR
s\~ުb}fG^?R?;l]K/\jܙI|Ϸޮ
a>ahfb,k؋	
[1Q8NjEѮ$4`/CcX!.p=Nj>Li{fmE
VY<!
_çQfp1TXb,,f_e59|_,Y/*~qMQ1gX|ŏYL	Ys*
n[,`.}yz
җ:9lrkcmu8-FbzB:n:#n1W(h\ë+x{҉*3x5hFƅ<X~O9i{iWKoś3x/B࿣)Ai	ctm<lM4iҞF<,$WG./ZЕN(Y^-%iIg9\=/S#j{i)iD:j%8;&1"9|G^y3:MFJi	^wzs\9yhVbzl"z3E#3:E}Lx]^#Bt0ˤk<S8k&|~tեI%2]?B4#ZRKpwR9Ls#d+?xc&]o=.RcوEw4E5N5ߖl#t5ғmѱB_LbԴm"9M֞lO1N\B$ךL#k8뭗uՇХkt4H$)%h>@:ky
d)EƦa]ek?xv4ߡ{cϯ:"MmifkR*t2KR?	ͥK#4'e~DibTyE"I9ḽXTDǄ|	;K(LB|]yD5fOeAaAH<_FS>^^+I}\dԲsz;:,NUW,z\z%JO*xΛ_ý[B-BZk-z<DA%eUku0!{z!^uXuRy(< GXvқ7BcO;L%9^(xBϋ`T={WekЌnz\`mpxY>x4&7'.DO./'_.%6[x!bPKP    PK    A             /   org/bouncycastle/crypto/engines/RC4Engine.classUsUf
EG@h"A%֔*%T
T*Mom}qfi:O8-6
Bfs{so||nQQ-4C(bR!Ҥ©!*K1DzuS
B`~ųs41 h%^\Ls4\FntOzv/ZΨYtmOL
(qo(Y-^V%Jа!<_gɨ*dMri 	t.{"we%%ˡ㺹Bh֦9%)Ov&,kkZR6H
3^ҌAT^7zȷל./"Mznʺ唲V,53x֯%Llqͳu]}5ɝ5˼J"F4O3YR٣R>?ȵj܊ȎElxAes9e^m!7KG6ⷄ.<C+cQݡuOP
;+ʎ)PjW7h(嬐}!:q	o8$#)㰌#2ޔqT1o8.#ВJ?ӜgZV7#8z{8ٶWN7kuf/XܔLN<׋vJrzhTF]B5أ"+}DTEhŠBB*0u|b/
.aL8/ĸ0}EI\TSy!Ŕ3
NqYA?*F?͚MiFYY.\6opؓԜgAF#ٟҟHޡm*
p*ib.$mDT0awq-Y!&z30VK2;CW7lL]|Vh
rDtx/6P {h!0=`҂}k,J&<\Fkɑйmo
\.em_}C(B{*(=R;=,U0E+QsR,cx!7#'_$noRs#45Aۍߵuh7-pM!M]Bh?f~RǅdBǉE;H1ɟiKrϹ?jX8vMֻg;=Z#qPK^ m  	  PK    A             1   org/bouncycastle/crypto/engines/RC532Engine.classUkOW~fwfβuA^`z^*+;:; XkKMm&jh4iaG+}pJ$^ss=~Zp<PnhS+ѦNRYg'X'r(U
ϖیF<å<u¨ 7F߅AB&bQ/dT8zi:g2y=s*[3
!gNie.ֺ5]V6Nl_>]i\q ]V$<ЭɨdOEDN9˄E~aMFaJ3lٴmJ%=qF#6\ԦrIsa&/{:/_a7~QЩWCmrm;-;'VrL=J72y BB]5SFF/
96o[oEfc6i:~*ct`|z!gRҭj*Y0kWo$}@5RE5(y3(zI.mW <yrɛ  !Y|62lb6C!gH0430$21d
h
UDG{_w(NjkeMs8 _}?M

P@&;!) Ч5JA
A[P`\4aP\ԠGVT
6BL$6xAW.2At@ r19.>bQ.Ƹ8cCA Cxeeeո_]k$-sVM.ED	>^u!
pÍϋHv
T?PrzL]?Cn ͑:^-\2NH&~ۈ$~blktן5QCaoc3a<5m#>Rƥ:J\N<uȓ X=L<DHlWC|>˰p9 =#czxr؏
xC*15eٞ_نzָIU
YI	M`_E9GSp|4&<ҍP ̊t-08&]L-du>S-6]',f[oݟE=b}ȷS?%S?ϩrZT1JiX_JL,F?/$*IŴk1%LL'`tj!7
O)6j}
&,|V1tQx`Vғ/3Ԁ2-D.K{bDTvS7yIeyw*MUZ|-FUnm+]I5|ϰX>_:WɥxuNL<
,g}ا[linw/oɮ9.-.VHGc8I7oLׇ"\g{zhe
M7iog
焸#{ΖՍm6IJJt}(p[Y!גBVmPK  ^  PK    A             1   org/bouncycastle/crypto/engines/RC564Engine.classTsUmV4(A455UZQZV*&diRQǌ3Ȍ"LgpF_|r|gzhFݙ=|=Ꮿ m;C &:Harbxj` _C	Sn!b:2
\pX@WL$pdXclP#QJA>]wX-,̰kNXɗX~fЪ0+%UglgdFe<UE)-tJeE/9X6jO:5V"Nr(xհ)a6i++N90qHJ1pg\fE.ggy5c,O_u5f80kpe1_5n/AZD3Ȯ(Be'<ψ?,#vGQcY۪21}Y:
ݮu
;
cj=7hmѮjTI61f[vgY?;
5=RO{S5;HRbaoSQiMHȊ[e!N	22ddt˸KFZ6&:Gn>zMo]#uJ܄Ds|㨬+q?&zא8w翹;A|IQ:bVlq;:u!!$>(:6Aձ6.:0:q"	A)1<}Ta.xF05Ì!<aǸh؏40"EQ.J8arq$Vg(r{131]f qd[/t ٷ6KMsuj[pZVK:QkIIVFMF˨&˰/WE-hs?x7#~p'|өo1>}b"Nl,!`5prשo0z v'0OhyA1Y\WqPrm"J)%,/Q~-NB]|=DhO~úd({<=ݳڪ7Hכ C/$z
ֵs|-?޵~&~z,zD!Zp~ǤDbt-Lm'ωKWhV?\ħRK󴺎R+`F	f`Fj0cQ%-hBF+YKe{TTMc"	/*bέ[(QU̥HQ5bZwA-2c
l%daRqP^EA^Կy&D%:Ev6z%2#JŌJLcdLgb2q)ܤĤ*Þ#)n9ol;u-X69%NM>8SĈ@1i(O^i^]>*=o׬9.K~N:bV*;;Ev{U<n}nBhݡD>m7%/.!ζoܯG׋WyrRTu}g#힗~Y5'PK!n`    PK    A             /   org/bouncycastle/crypto/engines/RC6Engine.classVsWut:7KXJM,6Z4vLƉu
Dg,]%%ufH;tZ-83ßP\̾wgK$6gow{ _?iE*2**Is:'@L,LGن^af
ڊ2&N,ęD>EӣCDSvTSűN.む.vr"4C\nVjVnN_ZƔ]t=c\u)^+n{SQ/EoTZؽzcqklesU<HŭgITIZ
gUX#n	"+PVo|M5*GO8kT~)U<iNV?K	wٺfV>֌Wv٪ͫv[)a5c4[ao[L.]jZyTK'+痨!բv9<N¬{YS۵R=M2c{לݘk(q	-Q]n/ɦO-^DOVMyn|ǦrrfqVcEߩ6K|fyDw./lYKP6¹<aZ\62	@vF8*u/5A~zaDF$FzI)xHAA9C

IO)8)0<_?=0qל R{uJ/L rc;hdza>r=.w_s:ࠎC(TqDu<MIt32]7Э+x@G
tf1\	Fc$ycQG֑wQ#
㸪22%
Rc0lw44)1b3H
##jx0bG
j7X5Ϊ6Lo`9>k-Um*jp*Ar
.
pIr<Jr_<F?Cߡgڞ>|HtȧG t>wH:m-jF͏whVfID~nRތoX7]Ȑh]mo儼냟qu|s3}ϭgL13Y[F\}'Gğ d=3b2CS?6'(ʝ!0Յ+wt@7=PZxľL63o?sz&
'v &pbl	Ff7R=|x2ĒRL;Kha:Or2WWxAlR\>k&>Fc5F]"bM$H(+M>.6*H\C|Ĕ"1F̨5ěALV\[8iJ9C/`G6MPEnkQJn[q&lIlB 4
l"zxuRZ<T
UsV5x%2V$VYv"f̐XZTU2TeŨfJk)$dD+V2#vUc
!n2P
tHC P<|yQ|2̆YX^,*YkNk6gڐKXAa%S0T쀪R
k/\b3H9v:kZ.Ms/!} \"TV}ɕ[0u2Y1bh2?G"rF/C
m{;G
]_@ZX
c=CXI_l_\~h_(6(PKND<  
  PK    A             7   org/bouncycastle/crypto/engines/RFC3211WrapEngine.classUmSW~dey.Uh4mA$/}aIְm-Z~#Ng:c;W)`KǗOo
j݄"{sΞs/?VD:%boq&<yr1ƴH:hdKe 92uQ2֙5ǸR0#閖XU,R@+E!uыI;W/&3СaMP}vXi9ԧ
7ӝֳ̞ɩa:mkh{Vw5<n,:ZɂcX圕2LܤA:84VjB&cgCkkGhEנu%kZ~vke}Zdt+Id2FZ:BְܾkI#皶aа:De#I]L%<\̻UZ-FYv2R,Zk=L+YLy7cDN1	+F*6i3i䇌wJ	kZϘRJ|=atTB,~3^'k#o|dmGilz%UpLj$9Ӆ96QravtvD"[.QI)^s6e8k44-`* ,M@
8$<s=
Qѡ䳵uׄJF+{^_WJz?61li}?`kQHХ`˅ͻ0z~JMO%xLǩG6'!CIx_ke"(c+$,c;ead4ᴌLf;+Cl5$#a[0"xeC&$tCQ\p$ƙ,8L	c	HJ1\.0	)&&&%i	`jt4׉d
ɩSznDhC~T12qD)<Zi<"7ֶ} 1&wc)f03O5KkZ|yXsؿcR!}{}[05R@Vjb96J#k	Bv8,mH, \ƛ.9rqb@$]KS^=cEY(/J(F!a\Pԯb7?fϘ -Pm3~@};#m;U^=DA E'QV>'x!ugD],/*_־B,3g;EXQEPQaşUA
.=-'p$˨bQ"#7 -3B≅{(6_ĵ!Ɖg3N|Z^ӷ7TjЗſrARhM뢡A8!#,<'αu	ǶTU"K
"^"FRM85
ޖCR(lQ1k=<e4qM[]?S[NPWlG}5':|M~PK{    PK    A             7   org/bouncycastle/crypto/engines/RFC3394WrapEngine.classUsҮVkXb
?$(b@d0CpI֊Պ3}h;~Cg>̄_I[ǡ8K@sv[`ܸs9տ
#P`(ا``XX&{I@d	(cR0MlI@ձzHFKhGp}ӾݶwAYse9'\˷ZYUw@om|Ogg:nT
[ u.{VYoTyk qRq4gymEqB+Xj8vr^=k7vӯ
@}˷;:ݙvNuq۳-7)rZ𽝆u~׫gv<WZc\wc[uެٞf3oMPZGCK;S^'폟+fsolj/==<|o4&ʿcϭ&:×kQq
~Uyfe
ȆB7g-ߜM9~ئ{1g||XuVuա-;o:6ſƠsnŖSOdaxEe*㐌'Љo{	d':~&GmOj#Q˷R&8
c)!nS(2Wgtx%R&;5h8q
ۑc^a5q
?eQҰ?Їw4b"S8<wY}T_aqU5<T1⊊1q)eW_OS?ſvcPuYujNZ3WQDF7}Lg$oj'bd!mn J`1e9]ZYtN,a&'-\="><p"y]8S2jAUү)hBjot/p;>Rb8hr~+rtLWčE"{q#d.?nҊGWxkG,Micz:޽O_FQF1UUpSDzWAT!BhS
>2#-MףS=2v
!J~dޙhϡLAA+@_:Э?`o'=ш"ʚD {RA1C3>axbg:NBBd5C.$j$𪑼[HE[rmHԕ_X\;O't%:&X+h$tO<6H8#w8c*9]LA#atx)X('z˨mq6<Yk@E+\юDA=CѤr0{VE^Cd$}4;.<qIR*f$TH*S-hH1US2U|
c/R'GA!yUo^!Y#Evhm9߼blCr҆6W`n%)_wݑIG^DOآZ.p!;eZU{ߌw;<:
xGN@6$$37TL""BfЃΊzxPK;>քi    PK    A             7   org/bouncycastle/crypto/engines/RFC5649WrapEngine.classVwҽZl
Ie@%56ƨ₁ki-wi
8IR6}09mJڂCk_';Ss̝̽D%G"-qX" (5=peDHXK_	E)M!iᶥg#hOˤ}VJp<mmc'/|@.\+s)Rλ
A
wZ^*%]3Wޤ_98__\H))+^=`ל1I)Js$fڥ]VnٯU)$q{FT;ik8:PF<KK5;^9[p]lõc7N5suF[㭙N1xNt~8
1ju'HQQEZ]}~RѮ-֖
T眚׷*xlRjM:7+i+lv{`+fks'GdV^P6[T}Z#dvhFx/sWUqzi	8O#YKMFHx9^E^HCQ-2y8%;МMdvjafܠRu?z#58ثtm)ԁ3=	xEU2{	
|]ۤߗ85~R~ʃUtjS֞7hӓI/	d|*6у`CLvM>uRNu삦c	ۡ8N@uCGg,t0*1I&\drw5CIq&e
BE'ɜFc2aW2)k8Żf4|o3~Øbb3)2K"hk
j'=3vuҞqJwP0(Fз	C! +H$}M_Ȼp3]x.fb3?iEi2;Hipjũ{''1nD|met{XʫAUV?̐?%0.ppK[1Ъ}|NXAEKgc7dD'yu0Bq)drID($;kyhPE$HBl'2zK;>իА?,BpUIKa~A2Vt1+0o1O+Ĺ	278iKlDk>~A$'XA.nJK4>NY9SOdJ3>Wi;pbUV0`D=\6ָkP{VqBS1u@RA D(7JF)iH7!dL ~c?saiQKC$FD3Vt
(q13B$njӹ8#BJ5nЦ F;nh3ݛOZr7cyA(gxaKQN89~KeN7uCrfv~X$N7R2'fׯ'`	A
dV7y#N#ι~a==]GglWWGY[=D{VхʏgM	?A}tS؅Qp 馫?hapgϱ!)At:o
~S9i_}S5hҜE:3*Tn2v(=djv3^w8.<氰_ޔD?bMmUH7\	(cac%=|5AS6109SSQ&1b惍 PK'=  <
  PK    A             6   org/bouncycastle/crypto/engines/RSABlindedEngine.classUmWW~lX
T苆ZADh_\6Mw7?/~жN=/9K&ZW{̝y޽˯ N$SCHHMrC&hxڴ-
JHn
SS1 /Zm(A5]& T4_
yt=!a	#St9dK7ajM:t3njW}	{hҌ͢sgE <ed[ԭ ]s3	]4.MM+7۔mQ2B@yO2E%\,K7IqzBUV	sQ}ouWEb1T`sMjIjV&+Kn1M^	\}ܯ	2C&
oGO e
^,?x#ʣy_S0A'(SImsoڏFW+X٤*mrQԷS5vo5m%D25m]J<W[>"rͰ",ce엡8,c@ƠWd*58"aNԘ3EB#="%(sJc/ٟ[K]\;zJSo|mnH"oBxU+XꋛsǢ8zVϩf#raw}EwTᔊ]Ȫ8 uMECU3*v3
9{0*z0Ub8ʐbH3Ŕ^8Ƞ
2S0c(0,2\ePp*d1g
F10ːgp#k
=Wć
u%z&"x3F咱dR1Ȣǽ
%Jd0¯i:V1]'1[-'yF<ĉ5fD65XIїia9&CirŻaoi>:ͩMzHr:I?芲6-RzM4Jy?y=:JpXZY<JM1"!No
JfI[2vJ |#dEA89C}1;;.v6#L,*#h9bZ|_fe-1*kodd7ul.	+$VrqHLt/l	fPK<w  
  PK    A             7   org/bouncycastle/crypto/engines/RSABlindingEngine.classT]sD=E(JHKZ&B?9jHh-qId4KF<T/<3S^M{]sܻ WB&+	!a(],rE	$H[umIDk}wťF{a%E,;aDh5pV셁#
7.>iVj]YCgLYTZz'm	G)
;nFD8Nȳ.Lmmv0+ۮCKbi;fkm)˲L3SnJ^ڴ Ժf^'f>f-Lgϱ۱\n5T9i|7hx67ˇ}ZK٣OB]?/[ܨ_nzΦæ7|N_1"=[QKRc
L+8-o+xG:KtHTEJq9ͥ8}ӴM3ӽ[s1zy:ɟ^\ZEie\MR
#xMs0I8
kexa#X5qAÛ'N3E
8!GK*`IY|PbXWç2KEU9\Uk*fqaY5zV:ivv-uݮ.f(H8ǅqpb.ZBB<fIp(Ff~/ߑu[< $BML_1D.+ȓr<^!G!*Sk}j>6xv"op!+TghB̀!N_zV_20cJd1;}Ls.I _{K+ٺo1?g݀^8CN5kаzU7ܴ _^"6wGfˬ(ZAγj9oPKSe    PK    A             3   org/bouncycastle/crypto/engines/RSACoreEngine.classU[[g\r	[Sŭ 	qk.ź.+J	U%[.f77ӹ6N77UR5ງ7󜛔J*!==p7M^D W;ःPP k=_34 `">65:IHՄP";1*?MA'DT#jלRRWVXFȑV3 R)X^'RdS,K)e|Y
yFjhiviQfy57m)a%c.K7XR-;i䋶@U)ڎQ-*:si%pT{pJh$7
 fYHkϫT6
٢^-$Ta!B(H
`Y]6;:+o~$i,&)t٦٥+V`Z]ܖW>J+Щ--UiQK[Rlz𼲤DuE=mBBF֠f12{x*]*ꢀVG-4l5R{\*5ѵhR[=s4(Z^æ5FQ
Y0gt^a:M2qUkI˨۵ɼ04ޅ1Je wH=Lm5x
=}"Ӽj*GW_!JMp{$+DkfϏ)F\G^isrq[][ZEO@]/﬊Ljea4ۖHyY*+OlmlՉ+Ug%<*1	G$<!!&ᘄ~	_p\$<)ᄄ	qC;޶I;&o~fP}5%~wՓPn7v_zkXw$7L[֭4qҾGC{l8n٥
]TIޡ^Uj}ܥ$ygq!cJF(e<G34##
I)xY8 Ne+2U]O1<p!^}3DVF7TbNFr2>yI1ϻi>cAgXd0|yӏ$J~<]?g(2,1\`2u?RxՏ5oq?Sg,H?a3|~L/08bxe?&y,糢YufaXɏ+Je .*2v9<~, @ݳ_F|DOo!@#S24~o<~o~w_m_cMj:Yױ+ל-wrx{ndCxe,m$kbj>=Dj_xgJ52-v{nbdŵ~X]B+_ٹԱ_gEv~Aչ_u"Avzgg{m;xZ -h )UҼHiD_-cerDud-)f?b٤T"kwdKHd3
Wלfż6PԲm{obhaJBZ 2V2-֗:)Dbn¿<k1FMrt(1}AAo,/:\_?pPPktjiX>k>y]k'>	׿	jx<FlEqcՊsK鑫@GvێeH*D#ݝroZa~v?OҴcAPK<b&  Z  PK    A             /   org/bouncycastle/crypto/engines/RSAEngine.classR]OP~t٘cm*݌-\4`1ArR
]۴gDD4Gvfyy>:߾x05=waKk-k7
w-IۆcA5=Bw`%~_Dvΐxh9yڱ?W .]!9qfhZ820`r_؞˰pp.myukL#`O	mFڶ̃ZCnSPXg0*)WpC<_7{wj*%|Z˶tWpc^`hTO#k#0q<`IUⶊ,TIFJT(XVY,q/"ֲXªȼ/၄Ѱ#uf<}eoñFњ)ШOәnI>Bc26	S_,YB;<!$:Rb=#C?%&)6Ɗ҉%frX<(?$1^!C<bՄPKo    PK    A             4   org/bouncycastle/crypto/engines/RijndaelEngine.class	\UU{>*88VZpE2S	,lҴLSs6s(m&Sy3zﳗgs>>}=o2ƴ7yM\5xMOI񚫽&Lpl˾d\-GH2;_ߖȄ"X\8r$Fnlv_T'ǸP7ݲrsK.cA=ۊIIbIOui_7)
J'!glԘ<~Nɸv%Mh91!1}Bb1%mȄs՞ٹ%|{`ϫB9M6wlxHAٙ<2M6c~Q!73/؟M-Z0!-[V:$ToL#oHPS9&Ϸ,,gFTiܘ	),dl8ք^%Erȗ*ZX"xןn؂>ze*(]W)(-7qPDni7w{eBxgyxC+ҢbqI/,-S:v( x\A͟ĽSYgpi!_؟͕bY.:L22s
hvH߼<Nf^Ϣ҉>SlJi%gհgj=s({'47/_ϟwM,k;%j#jsƘ
>yAQNY%ytrqr
z{!UErC92V:wfI |IguON--.T?`MYWhࢂBQIͅN8jd>	JrSc'PVx¢(K52
X\h`+WvGQ/182J'LΏg_̟fg5%lrw|
ӁntHUQU@ei1	czyLo1{1=f4Ia3c"S;ЮdsTG󨐡Mӑ^ibG/8kF>mL"uM'R_HCNĚ>'NJD2EF6>sI"~gL4H	&g 2PdH5&gL
iijLHgc}&8>-dSg:t3}g.#en639vg)3w-rȽ"sE_d"<$|GDyLq'Dɦ2L1/"7af:a&>̐ҙ"a|"DyZ
gEY"Re"/(\dJU"Eֆ͆0Snf
1
y֋ 3Kg>S-ktwu?M$o_|}@bl "^)d$"pClo<b@l<RdlA2?^+}cF7uVݶJ':1o4x)5P$W}f|(>6ub[!9F?j"D)5ʀS.
ROI+1?ɠpʑ??)ݍXm'ܼlm.&ݲ]wćF|ށK56!ܡjhzfS쩳8,P'@.\Wn&..J4do۱w{l i"]dFZ7Vǌ1otvdY]!ފFUH	ۄ脹_6l4IhsSXT5;
R/͍6Q=:GN,&=&{>K^DȰJQ\dx9R+(
:GSRJ#"ΔDQ(+?SAG))r_k"T#-	t/9yxL1'6]^&[PkDa>&m 0@Aᑾ@_dD ܂@G7+Cw~\^;pǴXjSuG1-jT~-QVX}sjz罞f	ڕ.Rݪ6;P!(<·'7YdiJؚfRPOy4$3/_G(Hߕ"/KZʁVDl0S2jQyss'M6d8MrK@p+C"C=,yr/%RREfx#>}kt"<|<Lb}OȰQ	|05ᥴpa|KRƗl)-JMhn^CW6.T6Ww~HVz-U6\ϻtqZݦMmkeAp7+<WӪMT791{W%i3xy<{L	%)IƸ\n4OQ2:vM&wa
TUA>?a'Mފ?ift+{'L<s nqTՌ)s*>
ocfVO7RS2*᳾77,M|s܆8lc֘q+k^/*q6VkjjFqm5
5U5ZcH55Bjh8CkTh
<2E1[Lm4gA?fN	KF|IlŔ5?k]i\c_`feĭ5߷)U:C`ywxQiީ^kzDfyךҢddS^W?vzd*0UN
vILͨ\iPO)9<#Ҽ98Z̨RiG_oVe<Pik'}Uas3gUqU=D#$JpK_hxi\|#0Nd>LykDÁÁ;]<|f\!cL	`<?WFsM䧒Ґ	Rݴ> ״9sӫv[;֘{,nAu'Vo\el]y{+<*uʃxFx9OW~y
Kw8|W';{'zGU*:]qH2Y5BoU8d6z33\3B\ugۀc_avkf
X}65~Zabm6aeֶ5X.(;Z^zY
l.kcېc6XF֋쟬-KKX/Yc@֖8k-bmeammw	v
k[gmgXIҨ)k[5ch/bdkv?ve]mnkw{?}ݬ=샬==)^e6=z}
;J[Ͼ:`h/gdofMX۱Ca֡o4ۖ5nff

w^eǰ^mWrǱXsXsYu5泎Wfv1߮ekqk:ƲNyD;5vg-Ym<v*k
c-%QRuu:bjf.ef?e:d+Xgث3E	n%_$̶_Ip-0ǦJ; v;;K~&nL=	VC7Hg
U6C|W#:	Ix>'	;DPB;C'aMb[ )[Wvgl_		w%<g{IXbHx޶>%a$;MRrO
AJ{Uv/	kh	k
		lW	/١'%ly6%^$l-%lKbծ*aW)a$]WF	$%f/)a}C&
Y\[mO	Eډ+$kHxIx>!{p	O>oI8bpp:>I8nߓm.S#3F6	_7JʮX7vo|	OKHV#	؝~$fOI֓͒p)/;SIEw	l֓qtzx.r"Gk )zzz zdgbϵ0UG7çy y
]{B01,{>{ڃ=O`O5s13==σ==4Wa 4IbfO=o=u`[`O>سy
 
=ρ=G`@3y=Xg
3yy	9 L {^{>{f=U``O_gس\	X-3	{==` ؓ	,{N=xg:s+sسI {{{^ {{b`Be_ʞ(eOe eϛʞʞJe6e5ʞϕ=ʞʞʞHeeʞʞʞk=+{+{PVPlQT|i)9==+{J===({=K=+{=7){ʔ=+{6*{({nPܭM3SggjeʞEeWʞʞe
eϫʞ^ʞʞteIeOeOSeOie/'Ti왬왯Y٫\ٳGGٳ_Oge-ʞʞg=Ǖ=*{R=({({~VPR$+{F({STLSܥSsvele<eO'eO簲FeO!e"eʞʞ=yʞʞ]ʞ?ܰ	%h@ǡ``\H8($H#qRǡ0CHW' r(BP
AC59%r6,# r(E!%sַhkC#
j$Dr1$j"Lr(FPSCK5G^C!6bwP,r%jjG:EPkY % RsJDIIHy=#DRG	IuZ9Y
uEDXuGfG"5˄Yh9
 ^-z#>B..GMWRP_C,}d04@ @!Ca
|*s(M8P̡aH/i8mJX32f9469t
hVu4F#%Lx#Xs(KP!?<
9@n
/xshrqʃH)_P8*9tPΡ"CH9'$,shΡB;ni0Ct#RlnhG3<QG7yTl nV  ytGytGwytGwytGy4ȣ<ȣy@= у@=@ 1 	  yȣ'<Zb i ȣg<zȣ%@=R yG/yȣ@hG<ZZ *<ZK@hG<zȣM@mhG[<v v yȣW<ѫ@hG{<k@~  yGoyGoyG<:ѻ@@} ч@#  ytȣc@}q >S >s  K k [ { ~ G ~g ~W ~w  O N yG'<ȣS.v[}\ry ΋<DF{g%Yt++!a&p*
5W0\?pI\< ;z
kW%p\q]Ǖup\q=
)׏p\qKz`di3Q>v\qLp=5ca.9ppp
W4W>0\CapZ8WW9W[ooZ5~k<^M[o
ߺ~k?ᷖo~k Vl>[ƻafn
 vYح![aznu[`~v}ح[bm+5SwfJX4v[X*ٚ]ޢk.jV:Gnv(wkS]jEmI:n\s	z5-؞u!춐<]yTdqupO
$$a;Hbd춰4Hv[H+ۂ|N/{-eJHv[~PRV_]~`Zji+u}r/_]iZ^VIW7#Mc-CNw춐Rk:j'mݫmZא±ۂyگ倮SvM$f$f%yyPM!5M{la$l`3-A`%͖$l	96[XLjP%<-,~ dقAڏՏnW]MHla-O'foǧt
4z̮*
zz$=O="3Afp,%LOTӐ1{=2QGɨ V=s7
 z>zz=@4gГ<lz=݁@@O8Г z=E[f"3j\ߘ:) Θɻ ]NM@O
|n|>>QۀS(gs
|>>y,h*k&tzH4Wad #H¯3k1_"i&=)GV0s'y	|~|d=v< 6|V>}  
i|| >>kd7سy쑅ir%O[XDFOE\EIU(z>T|yHguEՊAσEO3E犞eي=*z:*zP4T*z(z=W(z~T4P\ii٩MSTQP,QSlRD+zN*z+z?2WyS3UyDg產g5EE/&Êg=I9gg*z2=(zf*zQ\虡yNу$A]<:5 f
ʞʞ==){W,TUtUTSYyUgfeOg'SSWx=7)z+z&+z*z.VS*z(z==M=>EtFϫư`Wj˝2v؉I`*܉N$
wXùg9xl
y#UГ*蹖A*bcCR>RgC=
q8DsqhÉC#SW׼/`Od	42\*p_ 
bs^A@*mW}6ThmCKJAlUYmT]6/PK]/a  _;  PK    A             5   org/bouncycastle/crypto/engines/RomulusEngine$1.classA
0D'*=tBo[4Ы Jz̃a~<l1([uW[:֭Q`;KYZnEOm&_{ׇ[j#!$2b|hL|lS!P.1Adrqr2Hk,>PKdx      PK    A             <   org/bouncycastle/crypto/engines/RomulusEngine$Instance.classJ16nGPx
{*SKkLJ+< >	ԛc&;[\0f׏|TV!BHW)4XmjQG%}I(w<4VwXۗV~w꿪oQ`qpVeݒԂO$'3ROSj<58ä2ܽޓg~oāgNqt`#"*;8ǔ PK8^k     PK    A             <   org/bouncycastle/crypto/engines/RomulusEngine$RomulusM.classVsgONJlK9Ҽ6o86!8gd+u֥M	Ki(o64)ĸ3uG<}lINB> C	rjWN%DRKPRܙ~Ϫ
hh."'db-\FP\Njc*%/;cgm	
L&hyҙ/{äY$,02g۞׽o9Pd*Lڕ0痜
`w()f2_ɽ/Q`VHT.9飠m=ʑml9g=eeVe:3l3`dꜝDcoRdNNf)Iʜ:xB45_"B$Zy	*qB+!/QQXl:kNgJ~!oy~Έ,].Ul/77oy%jΠov]4l&|׶f}~6;W|oްߝwr[9cuEۥ
H E0aKhŏ*VYطK;rmC;л6gJ^7,JyqT|YC*R*8⠊xDţ*8,hAϴo(YK5ioF<4kt	s8wfqCC/>ax!m:v3a0ed WC8AH:膬aDt<!c'T#H:_@㴎$vх3q;e$Őg(0%sqY)"4y
98Y
OT42bxaY0<C<a.asO`N>p
4,!*([Ǐ:V*ư8Q˵fmvI:[ܸ5U-w=IK7E8	:(hWZP3`\BcdgIM~-DJƫ?⵴a)vWӆJ_KGnޣ"	4ŅG%
:Q{,}Kw4:#xXUB
Y%,gr6֙JV5#Kh7#л؋׏U[Ht)Br_(xTa*I00IG(XS:'8C
~M(dUޖffb?g2]L+e*T]YfL8Ze	[5
MWΗ{~+}鸀,3jG^
_JN{e]
&fi_9rc#kwvF7MiSLªr:=lfťR̨;Vktf*,,ג\]3l\=;mƹZ+^]gJF|2/MEoE~'<k4'U|]C.јah)TmkUL9lULtֻ
\^:F/=Auq۪a{5|-=ݤFNt=}oOo^=\FHRэ^>ڸAiD&jD$,v]_xˋ޲h+YEצB
#H*^f;"ۓOP<ka\hU	_AD/k	X[K*$| Fd }ҵk)ע	^o܆Ό!ҵɝ_|Z$+ĤA7X)`u.a<8~O  B_QTVPK'
VP  }  PK    A             <   org/bouncycastle/crypto/engines/RomulusEngine$RomulusN.classU[wUN&I)L+ABK	PH\+BA4iL UE.}<|kZ\.*Z>Pˮ̷o>{N gJ|{ZY5NO_Hя}a}U2D2JK\&HE^1*pKHM2:/#
$ϤǆH=mϖe8ER9yd9g;XٻkW7v{'
vff</MYTB,>izfr[vg"5'/ILs7ljڼb&
f11)811me<L!:~ZevӖ<i5QJIRfcVi;Ą].f2$c'b._Dr(92]kHKL&k=d`Cz]9*L],fOOĲ/$cQ7<>,>QrlT9נ%<LXhd~{'cIcXEo+ΔMsOˇIzW.k3jkаIóikخKCz484gf맂Oo8.7G_I|n6=JN
hױ9txOᘎxY>c#6tl gұ!舡U::UQO$10p)g^g8ۂdex#C0G(8%a!0`1d#ěVs8st%7${TŢL/*\˛'O9kyCѶ31KD]tpct0dioC&k Ɏpe߇72zT!id2C/]pa-_, [#`/,%+e/Q*/%-Y ?fpZ((1
.j3K<(ƚrE*KM"Bcb!(4>oj'
Ґ$	zV@]\{8.~U-<E<Jh7˸mLdµT{@. EFc

B($!>>o<r<Sy(݆[A}=e=/spylW)[ֺF˸^gBMߑB^H#"yF5_5džwў
^sVʹB#5-G;
Nrf0*U?O9TۤlgFc󻂕*nAn#7%!"t+&a PK]p	    PK    A             E   org/bouncycastle/crypto/engines/RomulusEngine$RomulusParameters.class]KAɇ&In.zP؋QqBdM!7J@Uzβ`+=ϻ3c+Z\ Spȵ<wV#?>ퟝ\v`O)8}<eLl
nORëE4I^laϽ
zDrpxҽVM
ΛWw$Cy"4-,%ea;KثH`Yy|t`Ld XRyQagY`lEh\Ӟځ6ѹ䝎*lecKL M1?K>7Ӭ7qIMSQ(EnXx=I!;Eb˿Z|%.	=|+W1ť)kR,jPKj$    PK    A             <   org/bouncycastle/crypto/engines/RomulusEngine$RomulusT.classVsUm^[TkEV	hKAI[4j٦6fV[(B(-U*{8/Et|{$%13;{ν'۟?H'|P?H08Aŕ.+8?4 $YE8
(U#Mۻh!kRٛ~Z'<ۺI%9@oPOA:+&Act<3n^z?NkPϘnjaGZ2[VCƍyi)d63S64&)-@2=692kD!RLKfG6iNi#K>
Súݩ33"f$m>i4mnhhf.5/<'"Qee&e)6)/=`Xhp<刈:"猪dL7wpt&'egճnEcT$;^¶l/S(-!j
$ZMe+۶*q;ƸT7^O:֏k,efl26Am}J,wHHԮ;^/VP-{Y-,8ח:-v쑴@;a2n^FDFf-26hEV&aGov^b~Q%I)\
沕xNHs$ٞ(!ru3ްWPU
1l`2܎:ոQA
C-
u
w2p7FU8`-zO((ΰ	^1A@A#m*؁
R@PpRp+@'13<FG2d*a!0Ġ3FC؋'BF3L0L2<,sχHm)C8 `UbEsfS筒fu-YO`~ܩ]=bLmTCU<ڥiCKFHբo.W'h5 h-SU:BqD=D˘\[U)xgt:LOE5LOAu'!N[:U)]&9y\P}{yN7U]~蔗eX=[W|Zh_huK)<mo*P+.9!v1ߐwaP.g⻸׼֋Ё^NYzf:)e
cs.`u)Kرylq?	s<1Ye' ?'g/;[T":+GU	UUeP)WWu}ȩ[)///s)zmTDϲK8,!S$qu]wԠkuA.%	_J}J!P{$L1T`ScMv辋B>xEWJC;OJkQ+SC\΢mr|"ΥZg{6U&gY*"E)DO9;*P[Ge(ܺN`Ԍq?RHxx2\ML\|R|D}RB6S:8!#NpWaĞ_\Z2"LL4O8M	Lp5qiqɔK
n'q
2-nKLO篛SSjܭʬk
'|DxTCDb/#>$0O7~NA''.^oPK5S    PK    A             3   org/bouncycastle/crypto/engines/RomulusEngine.classX|S?/ISz(T@)IKŊHRZB@$UŽ8@KA{D=4
>sקܳFj{8(ACup,C+Ț;tVPYjUd˭43ݖ;KsM5,QP%*)5*N.*nšJDeV_mc(x3%%-C5,))4fR	%c<FP
aY&1HK8jaz匚3+`Tb4;Jbڴ2M44RʓSa"`	VC+JB`!RR$ؚ3/is`,Ĉd-6R
cÇOV
S+EhDCɁ&,3Zk#ͭι5Y?.2>4yFs(րӎ84*µx(ƐGhxɶurFik<37@-0%7z~Hs60UFbԯpbWv$Z
8*PT66%`8^6h{J.E[R*oh`rKcHH^'A
mq^,ZS?OFki
Ann//#\ZjY#x`R0\oH^3QP]Jpa4wfT^`8KGC0㰝ap0VPR+T]]379
#Qk3Ez(뢇ш\PC.NS}IX.=-Eea2>;^vj85E
ۮ`5H_Ks [Ze2@Mq4T칍<F،'ĪwJ-Oh{DHh0L5Q'A͍,4WhUiZޱpUEբQ#k:5p֩P"F4I*&4E:0u,ftNGT:թV:$OJ	(nMo .Jb ]YHQ?M|"{rwʻlX̝vjb0.wcRކŮ~UO6fUE]6ȮZ.ur)skc*;]ꌻ8jHOvy;5x3t@7.0H`OJhrMC
Fӹnڃa|7
HG)OlnKv7Ɠzrn:\n 0E#)MS77(Mb7nj,7ͧnZ 0zzz.~/vAteRM{nCJutj'Lkr)t@7(R&nU`m!pZ'E\vq.:#p}x@AxLI^xŅxNy^xU-ALuMoz*N
	<.3`kYQQI$>#؂:uu| /wz5b1yi8@RϬw"@Э]Ph6BǦ02<&Gi(pQΒkc&<D`pzH&DwxWcF!~Q}e}>o:Nƿ4Q7KkovF߮ެ4Cx]Jϛe!+4]57ڼ5\C$z

wJVsFw6 x9ⶦL٠=ŵl+F|VYNKSR%X&hr?JӪ­&vY&zvǞZucϷԘ[ɷuZ[,t]5z污0@\{lkkPԝ../CeR2h
}I/KIȮD6PR]Xq.Fg#GƈQXbUJT>:} 1	/Ȝba[Tl8싋lW=z?e =%DfWҥ!Rݠ(1eZpⶨؙi]؝,8Y_d]t-Ov(ʶE|҅	m5
OUY~pb(%}rHD'Ɏ
;ivE?4
gU%*Y<NOtjȭٕ.rO<񳩒
?*nbVMyƩuTݒ۷kؐ6yd~EL-KӵIm1
Xq&mLce>w+b[NGujTBhUMis+{ﱕl۵Ru.mviKMt>v`\Ƨwb%#b5OA	o#"aIzylM~
oT2g6c^G?[aXWP~EF	S
Ÿ+R2_(m3uӴh8jQ=}~6
Ѻ/[gjo
]ټwӧx29f<Eٺ!W뜤x%"yl%Mp13z4h6s=9lrl=0/ɁD(qe}u[c>C \?*uϑh8[0rݬBnO}~lrYܚ*U-)~kb$^VSd17Ӑi?1RL.Ჵ6KnaIbcǢZe|FQE_N69Gv,^6Yջ'gb[iKM|ɪѼ7Rƽt\u~ߗi-ebxPFlUGd[-j`^L,`2XɭpgCs1X}
-Hv9o2yrz|vwˠ-4Ѹ^Axq:1JW^_}Ay ܜVnjbVH2UݸhB	-|ZxDh׺i:{.S/Yv(¶z:R1+4u42}oc D͕2*h 6̌EuB窛:Qŧ&Yjsi󪎽ñtsiQӶj|p<vښt y2?'ԭ`o^v37lN8iӖS^>v\?&qȆo[/mSrkZ67tGwi+yٱUfsEͿ$52;ܡn2ѼO_%GuYy_*KkҌמjHF<_mj;uvp\y tL`:tt`ǀx02
gx4ɧ=\' {`{wK} |)p 9)p~8 Ip/~ 8+o }0_ a&#oqp$ p8ؗۀ<q!Ky?`,糀<8x9+98/ V`d8Sy.`>8ӹ*!\C	xOVs8gg"l8>X ˫q`z
`x5p>xQ40g #|?O 
0Ə,?ŏ oE`+<+b~x<oWB'BKxIDh)!t2:O:Z	{	Η	BgBgq|9<T\''
Bs\)t!	]!KxХ|e|P
*t%7]BWs5|е
E:.t=g	,oB7Z[!t+#"x%t;;{τVsBk+!i6Xh-?,_ׄoB[B_BegI! .zOzzzOzzzzz	==C㫅8 "OzB/xWxЫ\/(:G##BBBq|BC#.1}+>BB_X5B_q7y7}Bq|ЏO/ЯoП_&"7.mM߅<N<yy2$$tSǭ2DLEUDtn	s*pkZXǙx8KqAJ+rU$#)C{]%,zTSv)Mr/3443ΖA&CO	
	M ?Hh8HhI
R!qJ8{JBB>a.&˝I鴔NzY{27pLk/#^ggA;gikTn	e PK͸  '  PK    A             0   org/bouncycastle/crypto/engines/SEEDEngine.class	xU73=ɽInaK"!lYؔ-{ ZM$(f}ekTP}Z۪EAk[V;3G}<9sfΙ;9?_zq!LSCC-wo+\qf"bq]#"އH"rI}#"ه҆FNC%:eGBL31+ZYc+BUu+Ѧm~NڮiX#YPiO'0v

*SX հj
C܂_>?x
tv0p:ѱ!tNos'M	V]B.Wp=uA)iѭV{N6U]$&"1g I$%")I;6ǞϠgNIz6lހ^nb/-I{-lɦ-}=`b26<ﲍO䒹b3?=
Ϡ3c`1pr<ԶgZ:ycfVV"2=UHydTW"c18[qU5d?[9;>r!FLfX}'FUޅQS߅Q¨}1m3Fb̚΃A硠Ӡ"g`r߉&^%7u:MOI}'3:M҇{Da>&骢'}#KՌfɑ7Nvp87
ǎNN+MWQ/.+./.{.,L51t3X˵E?3kQMiys.[ZrKNżꚪy5PUiqMU͛3tot!O\l%JU֔UsJkTT̽uj	PvyE-ewHi懂U<Nyjg-ҪĚU<ۊϛ3hbyy9n-W3vaIx(TXNJϺ5wtQb5o-l41-}x21ٺӳjΠY,*))/dbyʹU}rL*,zz2㼢][\SǱG}԰+_![zS
**KjC|vVr,W֔W_ASiˬ[\]S\^?8CUj34*.1UzFT3_]:uu?AZn#jM]Z0j7lH׮T:11b1ꚢne*ԭmC
IڒzVzF7F.A}Srԯl=pIm-|
ֿR44Ŭ@ʶk@_VDj
h䭢vhܰpٌ X!X
`:`-}v̵Ձw[J\A
Բs8A:(Ų;/r>!{3oz:˷7$-$` :3'm }aec]@Kceˮϱz]j3}V;oVAagb]AbǺW1h69n-uh&Pւ>PJpZ>2UՃ|`ch k)@+ր55ˮO+nkZ^,lx-X:xbآ!v6$m2
jx6JpZՁe`P=8K_vjp4`gk ^,	<xXFM``;75m/݌hI߆෠j\hk%8Zzp-rpV3jK5`M-[[nnǏ] kk
V
~;v}2Nk+Zh{I C}>
B1:Jh=>yv3b}(0v= =Tv_8={g_9}{9n
=pФٽf;PQ=$]T{LOpT+n=`ٽ[žSoþ3za/p[n#]f{xe8p4&Fp4
|-g/yЩ:Йq6:
ܗv>.^nq䵷:gQ>V
쇣_k+i>^p±Sow}Hgς;ٮ8(`/nq w1|qN~
)nqqVrl8l>a ,GNñ쪃;	t
4X5`ŧN}lXiK_;~\Vw87p3=[+8?1pnu?9Σ= ;#'pG'^pP~얓`ug/x<yX{eςk}ҳ9q>mvΊC~onpap쎃3~8S8v'ٽyq`uK/e?O~~xg`΃_ ks1p/	pB"|rRSSdffׂC+A|t܈`TD(6".0%AZpidKҁt##!ѐ6mBGbe&2;;KԂO+
@om>*gbO #5|._z`^Wv;Z/7>D."Ń/o6x"foʑڵGd^!2}PDEՂ;i%!0>gfo|57|RidSGpBpyGﳝQi/GĬ		|_o;#Gr
Ӈ_IE11=!&cpU:!F ;\q?B#G"Wy#I 6m(p:ݷ_/&}hn<EmY-Xq|_ǀ1ÜuVq"aOz)pt\[F34%щ &
Xp	N$-&vVp``Āl"V^'ݸ\ Ci3~t~܂0po/@ؘVqB5b:Mv
Ay\OvD%׶
ޣޏ06u_MD'!AbHBb=I삳'[l nĉ-m JUĉǮ
zd*be=헇7 NpڂD$`gBCųex.7k6`C%=IGdpM<I{%#l2|$WTSYpc=A%H傅TFTi"
2\!2~yD*\	~iv\σKH
~ڀVjV p߾pڷ7x-El6=
>,_c59pA,1,0>\.No/
tpo\/Ǉ[bqŤo'E
1{RM(y59	gZuM܅1w|LLL.DN2y!Af		! ̢DdVV"!Yc5!j"b kZAOC6E΍	ѓf*xLtuhNn`<r&LFN^|(DNuexS`Y`u`V[0rfBne`pM'{op$:geWU3\_88#6|Lo%\$cB0xn_p.WhL~MgK̧k0dn?L^8L4\C+E鏼ʻFb
;S]w6
SgGv4Y2
x
(˚/{:
TN!8`W2l,,Ƃ2ll
8:`WeTp$r>d|i`Bi`;`(1EIY(⚆9%G1	`?䁓)ű`7Oa
8qQv$$`7O!,;<YV\T^:,[SV\4Dejf%*2=
9 e4 S8ٳY6qNlp$p8ei0|J`*d5=^	V7
[YVR
'Γ癀lYp繀|y!8;.o޿~!,*7gpEw`yk9үX_8sYZ}?//<1񿫶U!gsxyy2<#:<c:Yrv!%)伬zgY,9[txYr^a2lpVgu{#kqBFwV[^pstC7phJrovqvg?:hСR:TPCtMuX"vS1T8Gy5W/ї~[W(U^$^O)??*dT~G0Y69B:kzuq]?޻U!x'n#MaNߟ$<֦ouox}tf>O>]]n*qЁ-`u(ͶK	??嬱7""wSstb_vp^{e>4sW]jckgz
;ܕ낢")4agFGÛa#Rt#Qs~->]0,>zXDcxꛓO9K_\SߜNHHݴgc	yN7_:+i_#'3+?4C,Ox?dL~p))NIi`uCL^?4CcctW?">fnJ| >h[3pwu9gEx|LD#Ng]gO9	~^׿R$9q8C{}p?ÙK'eҔf{3~lt)}2{8K۳2}>{8{xue^efEpdL$sl6;Xg.Eq7,.n~GvN+_hVi+nrLEI@|ppMkgmTYϠn_(~G%s6>AmnCB8x\mL/8!Z})#يIҽ94"ihdJ|DB|dn@|_kニÉ۹^4"Wǁv))	]ƻQϦo[R>l]OY|]tt+u"+MLx3g^ToPH/%f?3ʟn`xh(ec,Ɛ׃1[k֛b󂌞7Qycy<^ћcwcWc72,D&$#cnƞՌL˼}[zSx~^co$ rƁ<3y#ӽ[3^"PfaP/d+cE0`dxc71Kb2x3zzl^7	^Do8$/qWØ2Nz1Nf3{ӼH<BO2z3^-bxז/q7Zy?oo&1yw2{olocׁ&+:ƹd2f/-^cw
8
O1Vz0Jrj/køxw^B/qWxמNo]^{kUp%g\pJsOܨt^Pe:/U5y:/WcW(\J>:R*W+dFչYyBu^}
|A
RIu~Tt~LIsߏ+dAa|FMJyB[
u#%u~Za?VW(7@gPg?S<ϕ4[VU
:oSM
):?:?!_P:Pyt~Q:鯗:Kɷt(_QK_UsBλyW[uާ~:PA%MC
u>Ф%:U{La:T:R0qZ5T_WXJ~/B7οRO:`
:F!K*im2Q
u:Q{
u~_ag9
tPοWVa:QaR:KOg%_S%::uBQHJ7tߕJuJ:0D*%ݭTJ*u8BkuD1/ɠ;^JhWhe5Fg
[5=T^7*W+VI\z
zVJh9)hX{%ZA	`uTF%!<qTR]QZ!-$]\TB/ǽ@3ďJP*NVbRaR(_i-5
K%RB:ML% CA^(dSI-p%TT~3RAo/F)hG+1;L5P%Ԇ*ֈ*X+\Xj)ԬNTBc1I95JSUsSШ+/P#MhS[B%
P+{Têk'L%4~*^O4J׾*V9*a+RRK[\?VRopJ&{JZtެZ[%u-
z*ުWz3P\J|%J	=;w~zvrbzH_%tܩZܥл{,>;{r_V`
,b؝dvbXZݰ/p/o+ȴѾUV`s+0FXV`XdY݀/p+<oYY_qV`wͱV`jvnX
f[?v_Y\_V`9x/1_XYB_౾y)nX\ovlv>ΗV`1
,J/~+;
,.V`X_Ϭn
쎵
,J++0x/[e_7S^_wW:_WNkìn:Xd]믛g[}?;|`u/_Zeݭj{~W|ců>[վb9g_Y'_+O߿eW<fjE뭿_2v_+g3:YLX`g_[qwWY/Xlk7y_y7+O_lGbwW7"dWwbW+3q_\0BL0덿fų_Qc?Q;[`^exhsxˍioWgnV|/6ʑF_07+X}}V|nF_b}MF_qշW7:3V+Wg5R/}F_Wl[ӬiObWY}ou[}Td/Y}nV_K/Y}1+Y}/~s+=s7b[};+߰V_甯0WoV_V_+G[}Ӭn7Xf?WVY}_[}׷WX}vV_q+&X}17|}V_Lbo3fXk|}[}C/j
V_UV_7+Z}]M-_Z1_1+.__V미+X믌
/򭿲hu믌ʁ_q9d_Wv
VZqW3_y{MmJW>Ey}_+~gucx+^>oşo&S_뜷>auZ4:_+E;\f/k7_wW#_h_y+_v6:4ʇ+^4WΧ߳_/^5
\m!/6bWGb-_*㯈+:_{7`w_Wouh~/Xl|]g[F`#s,\#sF`,o?gF`nvް?`V,ˌ6#0,WI#hoF`<i]b'?avů"5#XmvNcXn|߲x_$+/[V`kv~kv^V`Yc{{"
,<+X>X}oݭx
,6XXV`/V`Y|
|wY/pXN
+0vXqy+0vo;[1+|
V+|
,޳cX^
,kXδf+bƇV`+0^'V`_;BG[cV`/)+W+X
i7Y}
V`
,0X_zWm/~d+Zxw/[_W8cx+&ߛ8ewY_qg_Xw_S_"]l/k~ɚ_
;
Wy_wWFZ~5W
MPKkv:&  \>  PK    A             4   org/bouncycastle/crypto/engines/SEEDWrapEngine.class;o>~Ff
0F6̼;FtҼ⒜Tʂ|Լ̼b 7gccKW#!=.0z(FȠKSN~rsfAFjf#b`cb`gbd`qOIePd  #2I> Ob`w;F: PKig   .  PK    A             4   org/bouncycastle/crypto/engines/SM2Engine$Mode.classRQoP.: 
n*MtO<,̤qɲݚR͟,qFgAls=;νo?VJ\{{׵Dtj{cw U=t|n3,fl8h
~q菹sأs
'8CFa-jSl>0|| 3|mih4H<MƢ;[w]}{^m"Wc	)]d0AkGOyN,٣Q&ҠA&	MmאFQC
%
KXV aE<RcyYU)W	CҌR
"	fn?zkBsNUyzR(T U3%vRϢg*:W<BsVH$DRR)h@Qkϑ˵TD[FI?JY![J/MPYq4dϧwBft9*"k8z<1m
i"pFPKy  ,  PK    A             /   org/bouncycastle/crypto/engines/SM2Engine.classW	`1Xdp݄ݚpT@Lv'f'nV)G+P[[Vl&
C[{"73n %]y K|P}(a|܇Q^e(OyʣV+GEyYzSy:o:@{.of1Rg/7FDEGNud`Zm_F&mi.L˔V=Oz2#R);fvd-16ڒz;B=ٖi'Oimc])L	L뱭3Τ4#IKRS 31-'G
;N:-5+1:Nkd3ڢɌt>J ̸NQz޸Ѧ)s=vNZ-u7ti	r	k5Sa&emzfE+9P&bx&gG3VPw%IRɸeTR4ȏ`$ۆLcvږ+HeSi{]N3h@G IQڪ2Yn7S0$'FO6۴/շthv][F)ndF::<uMJhɶh"i.1qQc'&ִ\2#bMuGU~[vhۙ$A^'s)iɤIe764P:#e=I2JrZLudN2p$RUfJƺcZ:Ы,Y&=͈zǂXe4;yNQdB
dRBLʝZjJ)SOebjzȪX7.;ʀgbp]TiJ?}
ϰkS6-93_WKV0[{ieqYM6N?dMss?֦N?=BCUv=n"fGKtQK4s\i!LIݕюڨwZK\u耵Zl+UΔI#]0yM9!N&+3y:օn6KJx+%4HhpM6K"Z	IxIhIhKh&]!z	[%$$tHHJ ɝti4VlS텴Me
c1_21&,~D%XpUf#2)KnZB*)d1$+P6nF-,|pjIya|e"z%j!fI\]U gkn+owJ$Q:-.dcs̊ZE`⬀F7H>4A2+3&ϛI7!@8Y\m~6Ŗj
6J@˂*i(Xi
q|DA
(GL0YǤ
{,̄B&LfO+XL(؆q
.x1AA%&*$a+8U`.(X{Y\O(Xb&d>sIuKq >sQP*)X,e2,#
V0$+/(H。rdQ)4Wjdy~'<L2yɗx78,c;~$_g򬌛o2ށ/3!_x'^q3w0y~'c'-Vw|ɋLL_2m2ދ0)222/JU&~\.|ɷKL2f>o3L>7e||w<]O &oɈ%!SѻO&z*i~폍qMz5j
R	Ŝ+Lj)_j)٭"Mƀ:[7}bTBQ;n!t`P N<@VEmiO+ؾ'đPBxل2NqIpDeq<j	ⵒ=XWqwUfŬ'Bq"+f8⎬(87+µn՝8x,E{f/^߇ӥӳbv/^=3/ƕO!:;%z2مȰ"ˊpP99< ҽ͛]}B>B2_ۃ@(<OL<`ǋZI]L'&A\LCZy7>ø]qBqr=F>W]{_xBY1Cq-%q!+B~ʊ\T$1UR}✐JbĤê^>}b*R78uH,qj&}KԱTSbU9c5U:.<q)="!(Ouhsj=CϫzoǦ>8bnϊxP#xP[!b!LR3Yx}('gl/yT8ϯ~g!W%ϵ<׺j+\5`@܇AYՎF;j䞀7>T怳F i}#`2iE]QnQ\BDPv@T`ITQcUtuFna'/9$3]5;L
NAws}I7:(2>c斂jEj+j%Q?{0'pq(vJtH\@<V܏VUzЁ*stUiqɊ ݕAo_PWe/AƻopO\͇gʬrs&]Jv+ű{/$+Kz8⠠* |bxw z!# H
@*9_TW*t.
G,L/PK]*t    PK    A             /   org/bouncycastle/crypto/engines/SM4Engine.class	xT	r!l	0`	*aH hbp@%d8   ";
,BEkjkU[TL|;s2عGDAcu5oan5ݴUcSw9coo'|ٗG~vgo!f,z7d3Pdd98|$c2cĸӌ)啳ƌٵa!3%F[2-7"K/7◬X)瑙ipWf!ܼ٥2rleK˴̝54o6c\
^2up4t[Z^1aʲYnTb@ `|(slӆ:3ƒ~}^8	7SMD<_Neml1Ub(|N=`<)k
`*VM:uBu&ĢD0M6r`~>
HC,N[8=0CX݂RV=N͢d!eiFS"kdũrHp4ޔ6͝Jq^,|Ue9-]dzo
ճ_>_wHEH0PL߶HY$jF'IBd89.2L@[FEP٭-TL
MH}(~DCIm)Z.ؘJKX&4+dY-s$JNj2X5j'11
yG̮dMIqO_׶J&"f$bP"q:y'$-d8L3%ܐ_&>dFn6f;Ou}#b]o"{<4#l;
SRfLelS.0BS.2e)5M5ΔzSB%W~̞.GES`8+bŹfw{#w\ۢ;Dc>.>Z̯>A~Ysoy>(S|2B|2Fqbb)8)əIɊbZdT3dOF*F)F+fJL}rbbIIrƮj/j5k)WWI+M)<x+a,֥Ke}oRܬEq6;w+*Qܫ+rܡ\".)Ͱ9du0Ҥ}e˴n`*X	)|dRHSX(\{Jcs]Uֺ3}LۻU6l4,1Db9e+Np	)Lp՛lt_)WQh0Fڪt_X2	j}ߙ-N9ld4Ut7uKܮzeGlkK崛(1E¿;b(4=B3Up*Ӓ{
foFnuji\5]sܬe"٩ūQj<'5UENm6Ȱ-.m&m)rڭV6E\v;hseD*rY,t3?嬷d<p˱E_ǌ}6z[#'5t6mq葭ÿW_|=k蓥Iom;ur8baJ̔89̃rt\N?;j\+Cӏ;ԕޠ޴lI'߲[[rx9s~AD_'3mn=#Oυa1Nub1Oec꘎wH\^n(|QV}b4hdD:YoP,ewISYCɓ,o4\&2eeavyY.6.OC}'#N$d:z1VWH@˴ɐԴ%$	tk@<7)سNCKVnl5EҀ[x^`EgAYRqZskFQ{+<Ͳ;#<BG]ޓza8nsnv- SkaWuSe\VC2̵͏?	6eK y&8btnOϫN\pOU7~
x*opci+H/C.Ɏ($;yDi3]Ofa$a?O=0d69(#{J7d%<d_ kTB_<
K\!PEY	d!>'cO%% l!#'ȡx<:a#9w#<#q;9
ߑDMX#qLE~R''9_HNF7,$
l&YOiXCNGY
#\\NVb3YPOVL\Go LB'r6 N^j"Od
zAJ֢#Yzԑ!Od!?F_r>088b1Ud?#/6&I& لpy	%\aRq)>%!r9^&W52<PTcjU]wTqj
Uت?UzKu	nG[V\
T^=Uw<xF`սߨI >V=^#Qa1U=Qm>S=~idAYLW=j#Um¯T1\T7jnT5DݭNUPB`j/Q
z	ϩVإzVݪL2U}A\zUoG-R~mzT?ժ1ջTzET?Q
lWPϫ>FGF[U]q;UէX#B?a3|3ګWT#ժKMw,W}H7@LS~շXP}91VuPo~ØR;QUpZ]+.gEm֩eT2I@zd{+ZYdzV?ՎdIX^2 -dgNfY9dW/r-'jO|dՉ̱:ndo+c+=~-S?PK{U9    PK    A             3   org/bouncycastle/crypto/engines/Salsa20Engine.classW|]6Ȇ"I.\HC$DMXݒ\λ=$b>*DڦHR}O߭ڇ~?D| ||3̷<Σ,NLUr	K>	*$!A
,QgKpm/tKEkEL-'!4)m(2P<fꑘkuM&bhTۄ1?̙\I$ÆǴ'
r,njFNHËt3q kæ⛘e0sE:DƦ~45-
fcOتAͼd<Y)P^3hbzHr਩mgaÍ5}-4Բh=Ěv!ѬYEh!־YPͦW!P	Ȳ3r
,lt--+@hW0gl
F/Z؀:krxe(|9exe;/sڕ]h]Fe6Z
':vYW6tKkQ
Z@a([XhEm&݄SO$iC	S3xteLxUF2{
mXafPhmnRfLqPh"1M	=YX6cd,ʩKFHNL.3iC6`сx2bjR?	
Ք2N1]lDb!UIbd"n9O(H,ƛIoڄ3q-5O"[);1ͨGtT;r}|hhF=ڜH1
S*a]}
g',a"ԒD\XfG,P96~lh8)5Boh$d~deC	
JbnP`SqѷPx'3*δwwSwm$H+v,=+&=5m%̈:uV-nc$sߍNWܛ͝
XpTX3OH
0 K3CX7DEqv7UqtdWd`HN$R)vX8'1JAɞ]+Nt7.1DD؄ڜVIuƓL8XMFHY6)LlƆaIcs2#U`W(Ձ
A oǟKEX&BDX^6pA_a60  .c\VSqrXʁZs*=}哭R)[v3A}x{mɮjo*bb5Oc	VGOӸ3	{yfFm+`-	`}TadXI`
Tɰ
2,2K'H\A$eX
a6͑3dgp#5$~PGP/V/z#2\MCpS2=2½2O>b>K9Q|_"Op~/&x[nNp3X4	wp+Fp;7jyA	!8H0F0N0Ap1G'xk$x
;{nu.
w	>	_'n
`h#}=1G4I#]_"|Cn?j,<f`CWa,ΣAsU%d%KPB6BlJ36bαql-l@!zy@ JE	 _}^Qyg)$BNp" 3ܵUNã8:lcm3,:guB<>kuʊǤ2mT\PtnH#uEq"b1P xOZq럀]#0[z18: qصv
0rn/̟DND1@wST~##u\J9
*'X!<w%κ
'<wh"
WN[	q9kpu<1r
"c \؋K* -:i}5V?ZOQRf&|E702hFp`E),Ka/NS8>Z^ƿV^:Am48j
JA=.5DAVW+ۗWo=Pү*K`'J`M.|Sv{Gp/B(rLA,@BY:G n'6ߏSȳSPpP$9JQ)f)fT>9I5-y"O|υ\s縘ٞ/#ZGuܛp^`x(9gkʪlʄ\Uyѱz<#
b}{=7GL)
^uB0>Y\xݎw\ncN,ᶝzvj-ZU8X+G5\@2bq4ڞgHFBguzR%*q-ʅY;3,I/WaKe_T} 3G7AEzUn׷u1t橴b{2A0ƳY5~`ʭcXZ*!%L(p~A\{Id"VAI3lx4=	7+^A;icv3⓻;=YI47&JP%Dѫs͋czv!lKq
8U
=h)~fbI^sLp.D2K-GqB"\Ux>}i%˧GЇ}()@OR(>()%gF`:m*zՒ"NZtPq1P-!:1KtP\U	;-(
-d$$Ob$T-R]RUh!#"VllvZunZȺbZzTKmtT'Iu.t@WW*BFR$ܙPDm
i!a22fCiIWQB맽3Vb;y4
J8ތQ1p"Nܢ)B	FSI-,K)hV(hPTVK(hZ*~4-VK)iP"?@().9_eH߈ G7*)Ҟ%xy~6BqQ]#,܈#PCsznUzQ+~9(yѸTϱU_.'ՕA&ƻS)4e] ڣLpaxSCO	dyPKx
EB
    PK    A             3   org/bouncycastle/crypto/engines/SerpentEngine.class[S[NA[F \` $1ix=㧘yי)3s|y;/)e֪c%tv'U_O?K4؄=кhJ n
ۄLaXh]	.*zU	r-L1H%181 lE4L&<[z<t|O>S=23{33m&23	HSD4%?-:Գ9>e7z
%P8w2HK4M4yAtT^%D&>,o9Ipʰ螾%R;Ӻu;ٝP,}ќ|{u!=Hм1DhNߘ#EᎺi#j3zy{s͙7gޜy{s͙7LRyUԫ¯fU؄70CnGbz	cIUQ)qA8<'hGxDGAGB8
8qEK!@ Z! !*EGT
%"(f"$f 0(517 !& &!nBLA܂
q"qb-ŀ[CN_7NUl4%u)q%;Y|GGG
M)NuB.!\hOY}akP7~/^;؎;>Kh^* *˵'~ՈwW=\Wմbëʿk+(dg!jmGGZ'q?N}kObUދ!ӫt#zZGK?q?
S\xT|NFLwP[sYNsZPSR3YR5XVڍh*jR2*ըO8%uQנE}`g Je^gP%Dyڇy4@4B4I	˨P7n"BaΚu3e+ikQ_B}`Z! ڭyPnCNtN DȚwNA!tC@ZBݍu/}`! yG=z` !Fy_E=zѣ`AA\=1׉fbbҚ
'PO}-ּoB}m	C܅}u]Dπ=z=܇x 1o{}P !"Ē5Q/^"e+ּ^F
ѫ` !6y^CzM0QDܚ&(8ClCXBFC0	]=kOP'P#:	f"D::MtS,DΚwSY9
0ϬyP~Fs0y/y?GGK_y
5W_~mQ׈ߛyd˗
!bȷ->&2f+j\Ũxb25yJ2T.r
~Sp)zupk.)=uOi'=x8
(KyP#!(XN-:WA\cHպDέ*b=v[bk=vz=CYQn#hc@l#Mhm&ߞ.6K^&Jm%  "b{K̷~b,1߫;LH{1b
bǉ v|o;E-bob%v|g%#>/1bHR>"vĮ*kĮQbF/1-bub)1'&%v|"6]bb%6Wb|'/K}C|S $*mk	Q\r ?< ?:$Xtg
׃/QȥՠuGO6)ֳ73ml(uYb:X!|v|bgu>eY֙;sؙd3:w.;e{w>,vnNunΝ;3:c3~|'ٟsu΍#ֹ:Ε|:YRsugX|suβ{3R:ì..{dS]:Y,{ksu^/{^eCsu?Xg?`e.:{Xgouv ?uEyu^fWޟ~:[X煲g=l`yuXg<_<:<[Xg
eޟY:YɲuVN7,wQ߻|0o%zk=PK'	     PK    A             7   org/bouncycastle/crypto/engines/SerpentEngineBase.classWks>VKRX542!DbCr1qbkyeI`(UT5m^t&_0h?u?]IlB{ٳy
2:`5lB(_*,B[Q|`pR\
,.`d9v\{	><==#s|*7qɋ`b9;q~~dnӝE'wM][33܋gfczՊWqLFs+T~˯NK5J~-F֒^r~K]PZ˞\iw̓;upKˉ[ùIlb6^kX>#gجc5ѾB/_UrRS(]E+nh>V@[ҘcZX+Uw薖B:;ŢOWנٍ˥=iw}/xxyz5W!zU˪w})YsWU<ɞ*W[ޘ$<&RO*+|n^LK **j!s3kwҲit7ܺn?ScgzoR-W_3BɫsV.Kk@R^1-0\;U!U-'<l2Δwd8_X^*^ƨIcԤ1j5i4FMƍa !RYkRluzNNtN_N'u:WtNuiB31L=Jў	{?ö=}};˽;j\N::)hv|1ѝbٶ:vq9Rڢ=YdǦL>OI'ˢI6ǩۢ~ EOѲE_`sM)X$Z4@E>KkWJk*ZTfS1%I/ӛ&ͳHIIwLO]6`fu67d4i֓*}%>Q^B{v7-snq׸/bSⵋWH#E/?3RXSU/9AbQga?q-m#pЕ(m:2tCz{_Iݤ}H2VFp7|=zy-oOM9;a|Lh~&l~@
XS$9ыywBSc5	E*#Z:x[ZlZ~I.
;uߣK}`o4s-mvFme~YDN}{,A<R#waL?~2Ml.{;py'18jbkͬfְYfIZMD2n'9zW6M;l>HPtښ7 C|>3m̀gj6FN+&g
	vm+
8	̱5 \Z0 י
!Kgzi4CtL4 I@	!DHv3k*i[f1kt ڐ+ EJ9suŅ|.HdVL< $+2`dEpu0@m
c+A-m'⠎6d ą-=I@md{cJԪ݃âC|P
J
ar5YZ`87Dl7
̀F]8t(6?w= 8H0NGR** U()*"MPsRwa0fPB{1.-r9\o!qiGµx7
Gaa&Rm7=c{wSuَjR\6	Za9}O]GBϵᯅvU\
@r*&QHIsƗ 4z*dIF4ȴIȯF4H3S	ic'BA$F" JOO#v*3ԫa%~i@|H#%~NU3L.FV_
GEt"anjglyi`[/Hq[a޹:o78(W]D򦀃)4j]IK{Tnjr}G.z]>)
< "\n]ҁ:hMNj2|0fMTz$'l YW~{4DH7m!gRM2;ݐ{^ɤfj` fV䝓bVx)ƺ*JF=)'FiV (]ƃ\]ʺwyH'fse]ޝWU.=GOZkDPKJi	    PK    A             3   org/bouncycastle/crypto/engines/Shacal2Engine.class{PT˹,r9
/D
.ò{YVEEļ/IŘVg	vFS3a'f:3Mi2v2Z+νM2e||{72 ɾvΏZƓ']rdyG79O.۴C?=I7NL/#g5w$ȜH-9NRղCrmG˗ڟSnM|j%7{%?fE>%9 4" yoIx|
Ggg{`:?$Y擿!ɜv9}$\83/ YdaR(Yv%s
]G*f-~E<o7os|BdS48d$F%kM;@ZNP%"ԋa'Ğ]ޞ]Ś^SdK9	{Mi&!
2KܽيpW[6Tp T4x}P-66
cFSmu-Ȗg+*յr
q&#!٦`jX-I54_cRVc )A5R15Mf싶FTmrxZDW떠
2PAiIhҼ+Q5Z&b`66G#J<	pj6UQl%&L*3{wz]!o8*
72hnd#NWGyH#O}TF S¡V[,ZoF,ӓ["H;9D:9kycjHvi-Q\Z᫂9ʁ},/axg,56TѝA,Q掱VxUo
jݬxX*xm*93	+qWk*G˘kWKъ{2G
38Նl
]J*/`
<T @P4
$@X E ;
@b,Gqګ˿y}hF,^
/+\K~mP1CTa7Fx>(5C+36(7ó5[^x9bg53uNo	L~lL} 4ߏ2cx8Ûo%8aCCV)~<څ
UP3h*^;H.$tcp<`2+Odv$.r
5Take1-zrH/tp}-Î)l[b*
G6Es:Xd{/1)ëM#VCo@e롫tN&KEZqń~.r.{yqIl(/AOEx§s#9@%^3絀<0"'@ Zc3z`^YJT%^囎1:ҊS@qNB
bXUZAL>8'IK]6di0Rz۰EK1bGK{ǰbjeI;ku)
Bۈ|'Qm4c[Gb;;ƥ |Rpo^?7 p%i!a5day?'EF 8%c6mi]f	V]kBD&$*{:jq)Q/E3k.nF-gNP"N`5lFbdhcpLZ:(L^$]`1UqFlc5Y>8?A3$ {w۾ränBizP&gR"M4qdChdݳ~C
iV,4'&wжWH/v<r޸v-gIZGxhIoі^5}psdiA! !fPQ
 ~$qȘu`1Hb̵S:	77HZF)RK(M;
x#'C=u8d \7]ASŻu|
)-#r.Im+G4M1C[{ýOx}b@%H=u="-r{$#5":)Ld24Q;2Cd*h22f %LSNGf9ԁ| 9.GN"JSi2RdBȩԆFg!m49"gLZE"ge'hrvjBfS32G:Dd.̣N:
3O|f#<d!u"ѹ":9.B.K
"J)\B
ȥ4#Sҿ_PK7/	  H  PK    A             4   org/bouncycastle/crypto/engines/SkipjackEngine.class	xSUO^T-P(mKVŀJ

ILBQAkWܗAgqEVqqAt|}M>{޽s'/<wP4I<fȜ7"&M^Rj"k^EyKJ+O`8	%6;30TL()\ZWe|+j1)&uJ*M4w6"͡Dno(%FlXl!r!K*D@,fDp-F,I$P$0;bp4؊8udH3nӔ4
<n6%h<lY^XԾ*LuLbð0Azڶx,F"ɈѨ;Ba(Ҏݱ@wHj77WmO8id1?R́pImI1A}-KƀܿaFqԪ-n4H蘒41DfOC-ɰI:Iհ,k;nUzAmo1`nPgCA_<hI,17T!-
U5mIX<hݭgh'{sGcF<2}(	O]k(,l-OK6Kxа}ՅԩwјX<:%2_kH(ax4QFjT4k4Cy5O5:@LoayvxD">®QyEB.-vԝfLmċvˠPʱjvNʥN*NL*2F:)j4TE9i<NڛNWd94Zd:i,	"sD@I{ёNڇ=iĎT/|,Y"r1":9*K
*OKHAq<Z)REEs"HHHH$j
fa$oh#c٩ߚ@$Yo`@l x%
A
uB.KQ=Npj<^z>fȂ+Vo*_~7͵=ty3DiafWd#+LT}%MDMT59n::Dt<tRsGFmqg"Õvhi,Z;bX]؊L]ZDm.ik,DidMMVj@-((26dFIv
ɑGݤr>Ibeo2_ΐ:qs.<_Nٌtҗcvq~A.꦳əҏL_#6̎A}Fg./mBe.vЏ2Z6*E]9sL*$ kMHE^M"T?uzuJ-ޢd4 쟎U)Zkl1[A1 m kQ쵛úfo+uTҽN#ټZBeO\6ebԕ&yjH'lfM]wYQ͵1`X.[oІqj>頎qj\zoYZ\@tei4_Tmmn!h!u^wA^u{׺xy=k#ukk5{5ի_:kfۺ;ݻɆnv5O^lo慔+m!ߐ~7Rr=Ćdrje)a>Dw}fE,^Y^):ާ)ާ>F; o ]-AfJS@=U#Asx>tኞ \\`$Cн]R0r5tݛBr8Eo 㭐	}}	Ld?t@8:YQϫ
})
APA(ƭP4E_39*؏'@Pt#pwYf+8G@2E@)-й]d0
=\g@[y<
Z#Jѓ|Ekj@k#,P2PT`!=K6	ŋ t%z47A,豊^* Lh@s@{@#Ol6mˡ!3dVy9tˁ(Cc.S
+$$m +zXnJEo>}8^;	^Nàyt
!k.SapDSy4EO2<Ipg&8[ѳs.<Wy,8\}µ^SX&DуKOx녗+zHx'W*zUxcWT]'c?u\˅N'둲/\++$
ƍx|FM|`̕+[=%MnEۅ=<KpǄw(Ix'lcw)zO#6#=8ޔ1.'!x(BO<G8Z~䄏c_>NS>>C
Yn<Q!|Q'\2F
7^Es	_C'
_g᛬Y	A	{}/	>d#c$%DOP0]+Â ¯y^$|d`G4p+("-v	~|>Z?3PK!N
    PK    A             E   org/bouncycastle/crypto/engines/SparkleEngine$SparkleParameters.classSOP]MFtق̹(L0:#]GDFó޻>Ű&;~9X0&A1E vvǺ7{tf@V኷joUfK?K/R,a"Zmn1	^otƉ\T
fOՎteֹ򼷺aum*;ЏuZ&xqZ>б
*"."!b:V+7\SOwk4\NtvyW(55K}$
0@aecF\XP bQ-܍@=<`bPɘLcKZw2eӶM[iC4qXH2jU<c6>JfLD0EzAwX3_A8KNs. 9LJS@'
R+fsgxsHω+#.yd'Vp

rZ+<@^~YI^k/f%HSdqg;;9ɟ)V%"oĚxPKsU  )  PK    A             3   org/bouncycastle/crypto/engines/SparkleEngine.classY|[Wyu+֕oR:7BVeSqR8
Iq+(Q$#mYQ`aeFGFӺhׄݣ`/
砌&m;JdY~?w:;ι3~)"YZ}m\.9ǾK^xiձ_䎕zѳrhU:!r-BWP _;WRc,(nM%|6DCwɃ0ݓʌhH޵{p;lIOXxߎI=ItCx*9>8.t{``mw
'ӹ|<=ַ
J>&o2^{ؿ{8.(PtkslX?Ⱥ[dx?woѷpom5? QcmEzСdh"(3*NMd'sSTbKr<Cq&72x#dCGwƏ~ĳhfb
QlM)&ң٩<o|0!w+Ѱۀ)YD{F'r0=1`d >
s bɼX<pʼr2HD_z,MkSx<՝<H&IU
!qMYbd*+WC@+N؂#R1LtsvW&'LChŐ(_NOL^dc^dLGF9^+bY%HZ}nz١1g4,4&r+vA|E+f4YL
H}(}La26

pH[BD.L[Ͳh"ƾ8˝'gqJP|2Tg#Byu]Q	+8|%L#VDi7%!p.@(a@ure	A爸p4\Me3
`?NdGϰGuTG7;Ƕ]OGWv=/k+v=+^
T(.ަ>PzBQ(FS(A:f6HMݺNLt_	6F;+IcX>BasǢ&aaqZg^-U@t1vpb4ʐXxU7js*]p=
+LU1p3-61lfdx;fhJ{6aa~]uQQJ1eh#U,C?5FP
V9
4@M,t+54pCKUP-WiB*p1
>.Siݯ-BW)O>HS>:M	3dx>0i0<ex,ã10<0pO>@OL=t_`"0-ó__1#?13ÿ0y?}O3~51×qT<]I/p	y+U\Nx.'.ۛMU
((GC)ȸE8EiTghwh8EGDִ[f]mFdS;$Imp'|DCZ$}j_8ׄ%d4CA:u3x ]A:#2C65}lt%+QQ|z! ]`X-{a"d7I.^:z*d}B	{=K7
=փ0wc?f{/ۋhyyGCzM1hx"ǦIoZwM|t;7=O"Rzi.L~s}}3z\Z/I7 ;GTigVQ$G49F0&;
v8/!.*9)K x$]Jw{鷭tB	5\2$"N㤐~ ǥϣAG~4?(Ĭ tEeCf3b!MA;aȞcNNWʶ#,0i_!7dh[]y$ʞ.!çEQ\4w+N;u*#Qe"~|?m둂=BJa
T\,2MݶKjQÄRpxUT$B{!!5IAWWE/֗psIr>'Hk0DZII$,bHzꙸD+/ВRse0$wDJLGHD&ً]˅&=qlުPX94rNj*Bl^!'vbe~:|{lƷr0|TgM}
N2{bhsEbŔ+#D۞Ǧvj(sFiX/3<y>+l
Bѷl/?ƺF2тŹ?y_V_~)h3qA݋0$#3CUp^ZX=ͭpmjZ#]܄""_lUqt8/,ZĴ[
Fk1N!EFpqo 2Gjcܸ6.oN.3\DMbrԈ筱uV[s.״sҲMm)mw136C86~x3[Im4Tg*^+{}tE:M[{(|x95N_l"Q+7gn~M9)t!{#H>ڰpHkQ
NAi'RðVoُr-82& ;`+EN[bCQǆw7{qAGv]U*8ylxw;(k{R^:
vVPq}IZ>ǄU6Q}
 fBTE=a~~Z442@#l}/Mrtbs%LĐuX9Q>˵KuoE^Ykyz)͋7k>_7|$[ϸ"KX@|T@E{E=P;|@|,({Fj{`|wfûFjK;`+EN[bCQǆw/{WۻGT:
vVPC5ʧ<Gi-ć<3ބAב582kP.	EaR\.DqP0@#疰?hrQ~#*~Ϩ
Xo48EE/Ub&o]4$S&,͝_Z<JsWҸO҄\m155m4l5F"Ѡoj=#TTRj*U ZҫW +^@z
׮@H]RkT v@z
*^+hkW TH]E+^
ר@z
/Z7=(\{P,(A;X.r*[<6׌^"eb``iTlq(jvE岫%e!.Fݥ89-H[<I!QG#PU[YB4pFVr|phFmn.ch<= u=ߩ&i᫭ԨyF# 

0
~-W}WTp>k?N?6\ro2i-wDWUQ͢=\.!e竳>noEtP gK.;0m2@óRLkaZb/J#%W(%Z<eR?71	*v,$AۖAl]=+ʦܟm*la}[Uv]>V(1pMi)"PDoּO]MRlXn
ذG_
+:;6DlXq4{OQI{$6Ah?
h?L7޺~O"]GPKkgW  v(  PK    A             /   org/bouncycastle/crypto/engines/TEAEngine.classUSWmBK\`]!\R/V- (

Rd,a%즻k*t:Sh?>~g@c5w;|} !٫yJl$Y@+I
[t֔fipCv|8>g_x0]%#\:-[eU[T}IͶZ{g
q0AAȨav)s:gkAY_T@2kGX(L۪ouKClStۢ#V~Us;j֦DU/KnfS&(@$s	vd\[DD͜aSQsyG~tT5e0dk0IW'SLm6G4/fCEeRf=ucXĳY5dL~BΩ6p>[iŢ'yQMQVVD}M&&N)UN댨Ӟ-7Ƭ嬊KRѲҧZJΩ(9o,b+ݪJk.gݓHطOLT:䳶\iTT*v3tHeg̌[(YsAT-~\,[,wC/=/F-<<^ᱏ~x*C<xG97t?1$ݰJZIPx?-,gpyZ9Ag۾Psn,sʹi9b~*}4DlBPD-0CHD=(U"K"ZH"v1؋"v\50hcPEfw*q2xA2=8Hp zYګ2ea0@c0@r#q^#MyPy3?dVv{ _{I%qwo/韊ءkunqWj9:SWmt| HW"X]jZ7UğPJlW9?*h;ocpj<5=ė1M<py1Rw"Ho?i|y|V0sω
.B7/E~ml_@|)4Cޥ,KBZ@`_G
5eAw47*
.%\vXc-wӯ`vWu䡵$aN7"nއEP6QyF95nr+^\8棕O0ޘ$C|Г!_OQV"!pX;q=#]h	2dZdZ}s$sz2	`fQ̰4<xc?aG7󙵙U*?4UDe'blۜR?BZg=vHUI)9̜;~l+i묗jwIiVqPK  |  PK    A             I   org/bouncycastle/crypto/engines/ThreefishEngine$Threefish1024Cipher.classX[wW>%n"ϑ'"dEdI'$mjIMhqK4qN7ddMMＲϰXYVx}h[G9T/o#ooͷϏ	! Y,WH\pysc ZygsgO <O\}q{
6eڒi[veړ#Ҧ۔unSmʺMY)6eݖےu[nKmɺ-Y%dݶۖu۲n[m˺mY-eݎۑu;nGȺY#vdݮەunWʺ]Y+veݞۓu{nOɺ=Y'd]Gud]Gud]Gud]GuPw|a<FcNH7h6P6ʫ=p{`ޝpr.;쏆p G=pޮ{80{:fý!;o{e֥i @?_o6Z[l Oߣx#hd`wG㫣xf B!E!$t!p!@2ISy
BpPC8`#4mBA8pA#ȳyN#W4/%el<" 	p,&6B>·cMy|!ߋX?G7
N;!Cvsx>&Birh$L.wG1x\yu	6
_
i_׀
o_[ ?|?Y?)׀~)O	 1e>N/	%g~2^Y/ (kM{*O]#g
p[ɯ|MRG[y_+!RsNJ=~ '(=|O)(W?w]gz.)s%
g8mZ{|.:^y2="?<?6
%7_|VqDEѪAۉVCmGjFl'U5̪LՈڎU5bqU䫆n;qvU#i;%mhk!Ʃ^Uɺ$M#pMtij
|bLGjAu,di⮓:NꐂM)bRAdEZCJS
VUcZ!sllRQcBK
Bc@)#B!W$1aSiԂO@`9#E!Sd1RHyh(QE`3a!GlΓ$V+AbM5=Yj9'd@6ɦR0iJ4R^)
:B^+ZTKPJT*rTsj/2h)Y,JKFK<Q,//A5FTTuOU-27fyfelCr?Y3[HllL?Gp?Z>֟>џ>xܬx1$!KmTTGUTU'T۪kO>7T>?\SmUmڼ<2W|n>?<|MyMނbjjjjjj%ѧVͭ[][=2:u]ۓ<npW-RmѭZƷjao4ܪEhjfi| S8`Z1 y@ " xq %vyFk7c# !
C~[#Ooq5
.l+El"6w]1ELp\1ELp\Ďp;E"8mG'%kڟabMHv(F,lTpڢbִG1VŪM{v)FLlVd:m[|8'$ӨS+uū(bE>yJ3Xi^,֕9htǉ8q>q8NO\=bYY>"XD"Z:/+ee"#F4q8N/s|$WOz/t+/"EdRcyXVo|6>ͷL>0aL>0aml>I_>|}PP@A
V|mP_|mpi_|mmx 냎}} _|}@}}Pc!XfB6;ٱyBw,dޱyBw,dұIBן
cn°rE~ENpu0_PKYI x	    PK    A             H   org/bouncycastle/crypto/engines/ThreefishEngine$Threefish256Cipher.classmoTǏ'N͈؎&6M0@F@Aڼ҆J\>o&V
#Es0I(ۿs|ޓ?ϟ@	Z3K$3KL\jJ2fIuH a^ݹ]]bQĢ7[fWUov͛]fKlɛ]f׽ٲ7[f+l!ZP$fu:|0X(
A@;GV"r[K_YXfϲFfkn;:6[	Lou΃5p{8&6{}ο	ህ^wx_d;Eo:n?
!QIItd$M2G2OH!Y!)TIjf\d1WM$THCHWI.AX
l@r*>$bPMԝ{Zݱe1ڰmޯ0kuoXG{/[фoR8CQ<%pYx9.2*	<-
rB,.pyFrRw/K)sȆxۂd`=Ư0>y =.WGRɧ]hLW~P1|GZ>06+,+%1+lԬhˇM%/iתּb nh(>D*'~IGRePi[_T)|5]7p0P'	~co`>$wpI5)=2
`|\SJ1S,U	5{k)LzTGtuQ1a"tr΅
ɆEx+57P ?1`.|Ks\I?Sm^{ѓ?{rI}ZMIzp64=B[A90NFiT|>5|MM˃M˽MǿS
L!(|>a8qㄏٿ:Z%<zxݕcPK	  	  PK    A             H   org/bouncycastle/crypto/engines/ThreefishEngine$Threefish512Cipher.classVsU>i6Mq	%?tMjE*`@,t	4&$(8CGg͒{w|ινW=Eh 8=s# Z k3`[[&|z= Ol\<vʝ;*-TmIՖTmIՖUmYՖUmY.UjT]TvQ.%UjTmEVTmEVTmUVUmUVI;D`h7@̩y+HHt7Z})Ӊwp;Zwƹoy{QtZM̰} V{Ǿzج?;n۽8-7wco9ٽȽK.oF`Vqn;*B%A"d	 ' 8E#$"%Je
2)lJ	, J,A	AzEan|
kp+-1_cXmr諭f47C䉵fWN;Zש_v6
|=rT5wapI8dC/ JC1_Dy	EKyR+SYψ/!OK|; 7%~%G=2?<+U$1/#W◑x	}Og=뛐S_B''=} h-q>lS 	E. /fo YJpyƭgGV{h>hWY^|Ȯa]M#vȧ)0-VNYѢϨ/b,2|&-u.bK[f1EsL2jF~dC\%
#kESsfpnW!1Y4[F*maHҀaI#@L1+1(1\Yf11+uPZG%+uLaZMK($JhQQAJh˘Vw蹙nff&ݷ̄/lf-I1? Ny?u~|uu>u::S^痽[~{C{Ld#//_4+Z+xZYZ!bB*lԞ%^ca6|!}j[5<ԑ/_ oz}S4A@)X|>s2p͡=C#&mZIoЈA{
548IŜ4I
,0+.8qqĜ$I$)NZ&Q.&(Z̉Ӝ8"N$Ҕ+-4">hD|Јqo#G4"iDmJD}*쫄DWSJ*1İJ*U"ĤZ'~yW2˘/c޿y2e̕˘1:vzNEFg&~=:>?PK    PK    A             E   org/bouncycastle/crypto/engines/ThreefishEngine$ThreefishCipher.classPN0=	

)PC	H^HDdaA,$i#P!1|Bl,ecɟ_ q@pF'oIlUe{I$1ALT,uUg3Ji*չOUrkBuqERrժyEciU@gGP
Z_`C-~SjJQt":-VC;0:vr
tlW.[^̕=FM7PK<	    PK    A             5   org/bouncycastle/crypto/engines/ThreefishEngine.classW	xT_23o200`H'DMBZ',IK2d7}~"u,TbZVmA%b%**.i9Yʗz=s}C %'$'JĥNs"eN,tbX"@uJ\:bz6uWI"L"t#4`M]]ͦud-aۙ7vII-,x,ӯWX-#6.[(4[xj\p I$Ӻ;۫h>]U}~UExWՊ/7RJoGL7|e>Z+S5)̤IY):-S)DW'j!%̵~涖ukWSkZV	و^fE&Y*`fKZ/Ix+?.K2̸;64կl}jCKnnr.ʠo[:Ea)mLR7CB(.!:q^ufΧtmPĕYuYٓQ%`P/I%A(5MAl4!xyJk"-گDDJXO%MMkx{6̊J"_,U&SS4qTnZJ( N%!1NuEKJEbLgqi-,W#TD|lḜ[si"'뵾6igT<v]֕<wΣ{fTK5cPs`JWqt=4%zbrC]&XI<9VӉ`TN!lP
jN?КiW16/GNL4b˫y	MmWL\x+\&M)ڎySk2_爹YN&
oxjWo~jsI|ÓdffXtC&6W*9P0­\ʝj.vMI)tEMUZݑ:3m
y8č;JmjAqVLEnZ	蛁6+xgX*bv"։X/b"%"#b-"d""zD("zEU@7yLW>v8qR{k>γX͌o0sϘobnưZs PlaC
''l#TG\P.LvY^BHhdh[%Tc C
CX.!v*
S$[;0]B6aE(2t\ *xX"kpU2TcކKhZ	^)6|]f|G>pÝg8q҅kv3\]c_sz|Յ7ߍ7.1p!bȅ}n0È#.=.Ľ|q&x>7zTJ/$9i:Y$5%J
>wgH"hSJс5r[!ク)L95`:j_ea$ʓI$O͓$:<y;Α;H#[5pq6hE-7hE
hE
J4Z
?8d㹀I'p6PvOt  Ncl|*`g߶+Qc:,᷁	ľN4g'Q,%<
Жĵ0=u?*6Hʹ-!C+A"|2.ه!z-3Yf;d?pS~
+'swO
mDXf9Bc"4Y:<~<Y=x(32Pf2ۨ}e	{Qf+.sO^N^* X1_
#~.#e鯀]
xM7a98G^S.
Tc18a8Lh/䦶h)ZcoYû+1}QnqM}bƶ#jp{꯷	G_}1_+sѶq6	W	/%(mJ\[3jϤwugk<Y[d:l{ThZsCpK<V-ϤeO$A>13(OcbKa*eLK	V-5woSFOo	;=aT
>EŔC!m=uרN
;Ο3g.v^lwG7Oe*#/`N	"ˣ2/9E9.+"Q>pG52WKa5wܜf4GviJ}Y{RYJr.㮚g}r݆ۉl݇3,公OdW>^Y1+4=~<IS2x9a(^^L)aLydK\.e̥+&I1Ko?UG_D7[PKĞg
    PK    A             3   org/bouncycastle/crypto/engines/TnepresEngine.class[SSYFr	x;rD\ J!&4^i?</vWMLW|y`uٳYfбNv'>W!ĀH[)"CE(TVPx.WuQ!>a-˦崶r)TDH>[Du4Io%"L([{KeT2ۓO4}5}2dNj!ND{5~#4ra_'>Բ9
in0LF`(d6~Ә'27-s=-Kt_TEURO'5_f7uݫS=m5K㳚{3x09HHNOjAWt<r%-m<oGƼc
_@O$lFڜ-o5gǜqs}1gǜqs}}="jѢ"*"[ICzVc
[ZL}eI+p[\vhN.hJ8Qq q"" nK.'nDuɵ1	+W!&! !A@\q"qbbbb"bⲼә-9O}(wTՒ.8_DjK]'Gv,dANI/ט/[x&ڄ"+ST׼u:dUٚhAx<76Kg~cmh6W걩ηmwowX{x3dq:TQT(?չ2䃣`u##X	Q,~g:X.4yoňQa>~]PQ:RZqދ-U\*6x{;<:#6"?B.&M40j
DQX6Zڅh7*j#
u5U0u'ށeԵP $)z㰌ڃzOB4@zQ{Q7>Ct#&f5XF݄u>0mgsV}[Q>K90!.@\,L[=</iۏuNtC 漻Pwߜw^} 311l{  !D_31
1fԣǈsb9qԗQOBU0S漯D=zk`f C0}
o}LĬ9Co%z<D؜yD/
qbɜ"ۨ^"z]Us˨^AJ=0k!yC>u7<xȜ~D&D"f{uuuhC !漷PkQǉ؅3罃:zI0)4DƜwu
uu}0!9s΢98xb[G}C<xn)<gKWy@+ԯV|##/\dVȗDh:~4F)-	ζ=ⓨG1(E8(Cpr:a!v ٨l.mӼkqwYܑ5pa.1n/\ʣ8BbtJ9"UeI8z g"m[7UV[v[Zb=V$bO[vzm 86Lln}ĶFٯOyb/{|ĶAlgvMl`Kl%;@ C%bG%v|ǉLWJ*N;]b׈!:7J&!bo;[bs@l|MbJwػĮZb]#>%Ab|7%6Vb[jn/1bWbIbSĦ͔>+1_b}RbO%ؗľ"uq)(,./msB_7Fq'*E':<'8gXlpT k6P<-?
Gpn/ _
3*Ŧ\wh34gg^jbS֙gX;;uy:Y;;Yc֙e;7I֙bi֙9sع:suyع:5ֹ:w;7YguFYgN?7Xu>*{ck>\/{.λsu?Ymyu.?X<\`MbXlaY獲U9:Xtsu^fJas9:Y.{^:ޟ]uXgguv?ϱXV:ϖ?Yglf-eӬ:X癲IaXg}Seu({Ygf5eO'`.YYTh5:Xa	^rKUWPK~	  ^   PK    A             3   org/bouncycastle/crypto/engines/TwofishEngine.class	\Tǟ;sg0: I:%Jh#034ffdfeB{Y*.^־<0п9=s9ݴ +WG
iPx
\hjӆ6tV![1ҊҊgs΂U
ePOb)A]z;:xb),);xfu<>?ƻ󪆅N)i
')`
Uy!=B}Z&W:O,v):ɽ(ԧz}ܼSrrOˡRg{M%+-3jRQAs8ljiKiN+)jrհarI˗6\XLɕ)2%Wʔ<'SdJLɓ)2%_˔|O)mǋBz.~U4qUE_뮘TUXY:YM-wȳ
G;cJm}s<M
Wq5xܵ4@3񇥛ş,>5^ƒ˒B5yc}ަԺk
y%zuF蹆=7yAg(зYW<>j܁1
u>'P?5JE
b7'c\MlSNd&7}M
66Rg7ϙ|Ԧz*O .z\^2<4\.?+3w-]Xn75+Us]\9
.o]N74\
cu@QKGTp(=]Cw/\T 6{j~yc@
s`.g[D9rĘ4si=eɄɡ'1UXۿSnWCgt8WU"G)9@Kkm8WsC xsF?q7Kwԏn	"*0W<
MjʡsT8Kv35Co]'F}`	]<t[>zMiTl+qϡ NS=uJw)3J_ϣ3*ʀEaQY43dYKpR1Dn1A	M0
&o	|&h4&4+'mhID@ߨRyTlKZ <rA촙%-
O9?r
2qYn̡Bdu0]O!KbגQ:
HBL0
(B%4,3X,'V
gC
XRYc9e,%,,e,,C,f
z[<@+̅+L>VrnpaYb;Yd
U
^.7,<,<
[jxװ\OX`WX޴
Vr,7k,oY5,O<Ͳezv
,Y6lfyes,/n7,
,[Y%BXwy\
oj敺
nȥzd@~}4yBPQ:RggY11qNL87&?/>?&?"&'ħĴwjL<2&TLr"K(N/ "E/ؘ;1"^FiS<6"Q<&"& AaDJ-AAw}FimN+y?j#Čz0|tz;|_'(4)]ݜvvl/i/7gg,%tQlY
>lXjW36<SnS{.*ϒ"d5"Yd52YHN_jvZ˲,2ֿeWՙzQe3ХY.Wj}v:K^zAii
bN:5Mp	TKj[:l1W|VI<`zFݱGx;@_,c0ۤ+\7
7D};|5>R26`s
~_×lv8Ѵ>Xz|8P8Eg>Hk>Gor	}QBb>-tr;5DC;|5:c}\ҙhlϷT*˒e7:vb+]*蝞ů6@|L`HH쓨Q}:qkȽqyY`}8OBnȳMqQFH5xB_:j(ٍQڌPy83U Z62.~_V]iw5muvC:}|H'Jul&6~:1LT4CXSVیhn!鷄VX=@g۵m7P
v ՘mKOPޣ
yirVq҇iX@'8(QyNo8F/PZRćS~HI'풋ApҾ$vˤ_(M9_n"on6^}^qmZ:TmZk٦>ܦEeG̝ϑ34M3?E/GȦlqSK#ͷ09F\IVKM~	;EB蠅c{:yy4y[톌d19V)6f$*0P
#hzfE\
hzvKVoq6bؼܬdWW7r|bGh6SMcTS;V][KM٭n6CMŒD<AX{P^#`x r>/~4SeM1#Ŏ4IPXcAJ1CM_ױ6v׎Qv7?=Vce=tt?;i]Fғhm)`ٮ#B4#hhd2	L"EO1{KHG~窖\#Lb
#@
:^
}"ڴmL\˲
-ˆfljjQ
hEsgpfbw?6iz`E߄ǎ^jwp!`?&xTxɎ\C)ⷍ>iʭT%EK.inZMv`JRZ{w 0(AH8F6jRew]%a%|%-	l*0'(m[ Y]Rx@+K<͛-)oIҚ~$SӾP[F8BuH'&x#>uImrш	6q\gSMJ2,N2D6!pfL{ƴ7K't67ؼēwHg`F/mkt^Ig^K/4K"SʺKRGL%Sy7۩YG5:{h;d.S,ŀ'{ElJT^GoxA?֣g
֜z|T4s8M&S#'^R. VR3^OjeqBjůHc^7BO/&>xi_OjHHaiK: IɤIx"i2$M>JA84'=!=$HOCAz"~Jz&MCqi:FNL4'դ9J:kHsU<4I#p
o#=?IGxih%-/IOGt^EZ#I_㰉3I	G:7cx9$GZ8גos)
T|Hi%I:
דN93
R'H:H2HdsX*KZH]lבn|tn%MSI
O:_%lRKڈHh&mHxi3I .H[kEbHz.qF/! u8ia{.V|"m9.FK)K]pxx7ەv]ϳ]']+V`*u7Xvu%v#vaad[݊Sn$۱N݅ݍױ݃b{q}v?=ײ(qCx)8(a{GX$؞ٞxm̶^cmlQx&Ͷ=؞^l[m+dۆila_tp(ۋxK8e,an`}7OJ7q[xx>;8mng{fۉ]ζ_dۃwE?{}}ǳ}l	b}^q2	ۗXپgؾپl+ll?`ۏxOxm;'df{gݏ>xABx&<(>ց9*j=͌?=/3zhI2h<={^9Sg`7={{Ng`<{,s`o=-س_'IR=F{$`,+=zgz/@^=zyWg@݌<>=}{	W)&`=`S{yVg`ajق=7	4
#؃=K{{NJ`ύ=l9Ag`(F{3y". 
>|H'Kg`=z@OG*s@Ϸ==_,
<,*3Fg@=zU>z
| гXD=HH&D'=OKI%z$z%z~!S!S sDODω=+yY ٓ.S,sde=${yQgdϏ=K$sd*ɞ7%{ɕRG/3XcA=e=Y=$z&JK.FEGu\ry'Zkɞ[${KI.m$zj%z詑Y/sT/vAd%dOd8ɞ${J%{Jx${JdK<*cqJ<(cS+3ASɞ=#${J-d=JlMrɞ]=?K<"ٓ(ٳZ'^gdfDODC={%z\=J$#vN~V3zH\"3MR,ѳE:G_PKBҋ;  )  PK    A             +   org/bouncycastle/crypto/engines/Utils.classNJ@=&pFlE*.][M!$$B?/p. ?J"n\^s__ :!(wi7堯^OK5IIƄ8y䳁7Bũϼx
%<Q1s7,w2HfVaFaRP**'j3Jps0@,بnBƏHqt͓1B=i:0uKG"*|+t}/0h
F
>:~ PK
    PK    A             0   org/bouncycastle/crypto/engines/VMPCEngine.classUS[U=!R+6_4  QȧBZ^|yqqUgMvFch7.\}	h8ι߹=~}668@5ht (>|?W~RN|4J?*@"c=a	F'\J19
3WrYtnɊVO(d!
EN5XVnM]hVM2%TkNXby@ײ%W}nfjePN.b'=KA
ę9#g	-:Wer[ZbբٔnrW	-,dniW	1U]zAwX<4
UKRG	ӍdxAiՄ5,0V3P3)f.	$3	*! X*cP1%TQͥ9z
R)<cJR
ْKa2b}T:j,645dOh50AOh|}xI34|teW钲|iJi3sƽ4R7iJn𦄷$\$m	$\+|j}-{_zঢ়Dop4xzoJk͝PבKb9 ݶ2\sq\E.H.Å:.P.\@p7T|G\|EO	'Z1D;n8N.0D7&b܉^:߰}jTˣJfJYH3\$l+rg9Kbi.K.%V@m`f*Gt賤9~(@!v*X@;T=Yms;爌5o@~9z 7p3#n:u56<,d<+P/n" g9d3t6]:*j<BevB
OOqUx05 !ފ=P.G.y9жG];tE|8jdJAmE|j]&<m	553q(4?Uly'39n컨B.RJAQ8gajNUn[1.g;ro^:g-ޱ=v<<B<b
E_jKyLt$Ql1OF|ESzVt.N͸}|ЈJs(#ߓfIvW/y}HJH^t74[{lPKe  
  PK    A             4   org/bouncycastle/crypto/engines/VMPCKSA3Engine.classQM/Q=L(m)5Hڰh"fvHX	llI4?}G؈{={g<<`aY#Ӆl!+sYeZ֖WssBSɸcs%ǯط.=v+xZQTm+r[縞]&~,F4vB2=+Uc傊9Q!E͈Dqt%C1tyQ[*䣁c?W	Fb7R
|7r]:R:Z$ĸnju.RG6kpzy^8kt(i
S|RJO(9jޗ3Uæת[q1cwwRb"
	A|PK^z    PK    A             4   org/bouncycastle/crypto/engines/XSalsa20Engine.classQ[O@- E",th1FE%OewR+]YI1h2δ%$@bs˜99%<QUSE,7n.7>w=gBxuCb	Ods8!Pxe뢬@.S4l/zAt&(2q}6ga|sPseJVX,;myXucN|SubKSw]B~c~۵s3k/Ö	jXhC;W^;g[H7PU$+PpK
	s/n`|?FYQB"#Pu4Qч⾆1T4cZ9&$&,d(kFl{äpL@>YuWQl rT.rf -=ݏU|MEqD$rhߘ<wOPcDcX'0UϩFSϥR?<U+!b˲:mAYx$sdگdΙjMńH	0E*A&UJzMiI	U<I9QzPKe^Ɉ  @  PK    A             0   org/bouncycastle/crypto/engines/XTEAEngine.classUSW-YQV
VЖ[B$KXqwCRڙv/>ԙJtt:}3~g\hm2ߟ1|Q~}F  (`*ordݰeMlMIk	Wu87\5wt0/<°?d.obNs{N-*Od-[V庣'aͶj)fP0@=f03f

Zى#.tJ& KƘi[zݦjb-T4ݶ(hRu20
TӶBbU_/RݜNfN\P&(H"GmM+IҜΚ"K3YDvdD5e0dk0IqX'ɤQLIjds>rTP<L*bnktZM)f3Pu}*ܷVluf5<&kTKVK'ULņN(Vc茘3V-3ʬ[Y
Wz&b[:G5'j]TS;H
^Gb+Guʺ+kӑlo>I6uDɦmnȨ)V쒭._v어;t,\)tɲӠYZ+oJbIl-wstɳzFIӕ|}|G5Q<b<qG=c<8v:_ZF;_8(eNmUq8~rVzE-ռA"ľʨ;E2!{ˀ(DP$ECJ^{"㢈Cf@BpIaP2dq`> ڠ;(3y0@:w19d<& b@a`IF`!:^V#IySYӖ?dzJMuQzg!PB]Z_o&^^ǿM?Cq^pC%x(9&#D$+.6#0}86m׵0s߹R0z]\3"85Oq,0){=Bj~BHtr]xds%){k9|W9>gE<R߄}T.}%5C	+YK0T[-\<ᓥdѼ3sYX(TGCnC\o<\E`pG,L9z\Ur4ZLa	A'~T9 9Sᳮn_JԑJy3_rĚP*q:
+㩧*Ww'(g0?(,kcS!0s#b5C
$Hc
SyDB>gf#!?,TU!^;nUc6͝lo^m7//JErjr:IvjiRT(5I]	sهГƩ`[pbÕI3z]RZ#,כ_#PK]  N  PK    A             3   org/bouncycastle/crypto/engines/XoodyakEngine.classW|[Uns޴]G,V`mecʤ봽Mn۰$&XQʌ(f Q0(0Q ķηEe~߹IW_w^/} N8!(Ϳ>q }6I~N?B(\?/%GX#KP!1ܖpoKӟ"suHtMSl+b1pm|xXO_fx(c©	ܠ-aDkR1i:am<EddȞN$z,eQZ؁wtYKήp{5bEZfݡO1{Fa\BtLKhg|I=;j|ĄoH3ohwa&}=A)w`${}~4;1hb-I;im"jΥ=5b<'Ʋ<<0ԓ'q}8@1033&wr߄^0NS7n!uDφ;.é1\tiQ4Lxvl<k.c1LxHWx*kg	3x_kIhH"hpzd<i"]YS$QVҲ5&.O$z8KZ5I2Q_Ia ~$,N{SH-I%hXLb	4#-CXщA-<FKv꩑hQ4,'IX{|lTOӲa9/L˂Z<wE붧z
q95D<gZt +SX=C tZIQ=FdZY6aXUy2fy._Ex%LM ne~&З^G4
.-УEa-Qs3f&Z|Q3AT͛6N[-i@)e
x+gxpzFGSrڠTԇqPSTJOw!e{%صm&숽
oQ JZ$ AtJ]%\".	z%TF$`T,#4f|q' MWjb@+)@;UKݾѿgYfx`?peԙ6=+~r6t7R8CS+gy%knZNWC#h"XG*#8x%A#lP B`zبYpk:6
l[AT``+ 1h\.aHTM(7(S 
BJ8Aީ6x

I8₫.8qAn x	>@AHp!(n"|"UpWWe8 ߐ*,|_$vcw'8ApW&f%:7ex3#50M%wV"2EW_Av#8ݭ%q.;cѡޞ2~twq`WZv㹌zbp nOi7rϥhɵqZeE1crkS<\Er_2Oσ<2q"#%0
*KG@@ULC|/VOy
P:cc௷-j@V ˮ4)t
EԠ
AxU 	܉^<0g|8Z+ 0'
ޒ]vɲ	DYׂlG)=v#H#਀3p
'ggs<m38<FAkJNw9	2iLͼYIDuԅ+
GF_aryz8yd
0IkI[cFHI|')#edaִ4i"QvϜLa{sk*Dvckwfr
MocEňӏ؊ĉV*EՈ6E{
КwP˴:S밪QMP>gᔗ<CB>[HV/ZO?RȆ
*p=nQha}4޺f<r3KEuHo%
bϷ%ĐTDAU!*Q)Vuj!*UҠ(ZufeP9+W[gLʱ\He"s昒U`\9΅*9Vb0Uj\|Zc*f|\ixYUI!)E,BDL!չ@Dƚ\c!"2"eP5C5ePC&Z\zV됏)&&LUYfMb5̋l$W"8I1ձz&)!_=Ik&ikY#|=kBnbj=XAދ|kdȯE5:obHJɩ8u1S5cLFa>q)\8Ku4D*Yf4fi9y!2/Y&Befiy!Ͳ2^H6PyM먜'RBYtTb8-:0γMH
߃LܻI3CVdf'qvAniIi4]<+T
Ժy+ uPQj4CPE(>Pq_i]@p%sYKm
zk0s':ϩ-SU `_.em[>7:_#ݞ"EYzhaB%=LzK2>-K$5O%n+,4,s-쨵e-K,ǺX^(U9.˺D>{>*_wSS 6#:+l*BIZ}<m^}A w:ᙹHU
雐ڑހPKh\'    PK    A             6   org/bouncycastle/crypto/engines/Zuc128CoreEngine.classݗw\ϲee(be1(*Q $
+.YC1W5D;`4Mz{Ӹw0<ߙ3;3<{`e6ѽVB0
pN4 y|*S
e0qQhyȆ) ܜZ ZjAyTl!;R.+rdjyAxۚ[Y'07gz[RS&LNY6S^oiFUU!7ȘW< <_V{՞/s?ؽh?o)/ft'0&RK
)OYT.
kUI+1/	=[4TdaS]^*6/gPq@J}SeMJ'Ii*tSR}:<oKVM2cģ#ߠr>BOCOW	=-:oè1F"uWҩfO\WP
ͨ"xd~[)4Av*J=AjOEo
MeM˗{)!ƚ@\Yɪ
՞z?\mP7iaJBOmQl2tH$	3࿖|uUࡍ[Cz3ZtzO-Owxq>cTZXYMʖJOcΛUlifj귩D7W]l4ҼgjSz̢4Z5~tt5@n*{^,rOS](|@7yiםN6fѪE?3K\vO~cݱ_Uo{)?M!_]V>YVG'08 3vunן<~5ѣ6zlzCMA?W
(5T-Wyif߇y yi@g
&j0C<
fj0K|
fkp4A4(`'hPAɜȩou6O S\>S4Lfߜǟ7gQJ{o.C1چr1ZpX7H{XI)VLZh;32as #`R#'é|niFDa8#11b8	bh'800
bd0x;a0c@0!d`%﮲lEbɰ9phpHkg02dcX8q
6`x"T*l*p
jQw٨2.f\¸q9
ƕW3a\ĸq=ƍ3A=l.cBZ)4-4ڤ;WG+  6Z,efQz"s}/IZ`x2n'n4slwj(av*o6u+j M 4ʕ)&sC2e^bx}HGՑWݰjj绠lƕ"w=}I_uav97'7VE:*0it釷FlM^696}6IяGqm2H*s:#nLv%%W7'WЬH玳u}ɖxK8o7W8-IptŰ䶞)ycagW('~U_#N+.SDKXjeh~ͭn4cBkw(w>x^htzRY4=T([fڲʖ"aCZ~{'P_eLbR8dZnm=LcpxbUZjܦGoC0xw3@k'<3ݙOKIā)-ZD_k۷>dd2$fmfXԶElkڶz#V7CizCT-#H՞ME	]"-b+S{IE;^c|u
Ǩ)3ӜI4}fo)<=l)M=`Ƕl3"֘krm&$ج-ƶfzZ{ZԬ3ct頟`g,Hz4~P&'$;u	hSbG؞nN۰^22F K4#н4'Jb$ٰ6M
L?,]2u̊\+sY1MUe.3MO[vM՜l~;xi)d5CGd|eܷWbx>OQk{͉|ct`@Bs/+\ڋxg;\{_3-\E24dTWϟ5SNfvf0,.,9Ҹdh=55kNJo5HC`hu4'҅RzdoBmT֣\%(G.KNu{o=څRzto=ƅ1RzLo=օRz{L(*IO}wz	63e>xG^gTX)ӓoD#o2vSݛ?ƣ?AhHߚ"?a
0vs͂'jtŦ
knS'\?xCmҟoGvA?N&^X
kA\</0PV38^)J\)&:$q`mnKf,/u[pN['KV|ԍ#AlU#DDZ#x?1뉱4qo H[xq ;C83	;1Ih%&c	q0/#`!q. Q8?&gc
8@LwiNttKtL#fmq>D"f0$l$Ldģq7|8 NcXI)2X<x$Ӊy87gs|8cĹ ]㱋8b!,Exq!~D<%b	N bD<XvIMt:b<Xēq)|O".$bO 2|XUxыhb5'ED_aNuI71p*TGFMW&|%Mf؂Wkp
O q
fKX9](h8Gr8T||r\p\Ws\eƱq\k8r\QWa:x
5Xq-pl:p\wr܀9nD	p܂c9nū8n8n8mwm7p?8c~цp܋p܇_plS8m؉9van<сnN88.c89=p~xxp<{9E'cf Vs<r<8[9:ag
g&;gWq2K"˸xox
qro4U8wQwC0}<C\r|c8>2?c9>C;8Kl
;8p|s|ws|^81|G<'3/7rqp$n(	s"aVO%TVTVVv
OMO'Ms*E"D>W|";E>	",#q]A➠8qkH`8W,XOjϙ"7D>""l#cD>3E>||v|D>N~Og'*)Y.'y[%UܳL3W'EX==O{<'Y3NS,=?{^+9Cܳ^3_zq"q="q&q{?={.|%I{^,E3P3XgG,B[
ɧ#FgF@>fx}:>
bc>P%bbO>>W}."yKsϽ>)ܧ쓩O>?*d(V+$+\>_(*sOe}nT٢Ne}}WyF٧@GLxIɧ]A%|F+ܪTh%f%J>J>),TTJCA砒ϳJ>_+*R	(ܬ󴒏ظˬsrOr#=*ܦrϗ='(`SJoaKg/J>!%ճ=#{+P)U3Cgr=9=*d+h=6{((LR9Ogrϵ==?{>SsϓJ>/)W#FSIUR٫sru=Y=n{^S٦3FMgr|GaQP{R}{"FǬ&=encYm̭9_:r>,#8N͡[)fHG 
Q(GwvǒюBG&XǜSPK
7  #  PK    A             2   org/bouncycastle/crypto/engines/Zuc128Engine.class;o>!Ff
0F6̼;FJFtҼ⒜Tʂ|Լ̼bdC#TW#qZ XXL5|H^Cb!QTZj"8@'7b`gs~J*!  @(	YZ60JylZ!gʋc`	4B`X	 PK[17     PK    A             6   org/bouncycastle/crypto/engines/Zuc256CoreEngine.classT[oG>m/-_mw
&mHܖڴRC"Q?T/HU>yH/rԇ̎R*H盳\vf`
*0B}	dIP{^|elX
{Cߺpbo}f}ݸe5FQ+^O`Գ	.2-˙똕lF8k++ve%gu{vcxӴ8
>U<nۦEv_V7\4*C+GTFJ0YJYBi+\;4-{jI%]Ӱ^Y3;,:~gUJnj߶[ia4numμ[kw~ΪL<yn9M!&äSҒlAx| "m:)Oz^6F3]4[Mͽ"Jej5 C0#	@ \+x5 c$o iЉ3TH[i%ed	V	`yNpCC
xη[5vXih4!B /De0_b
E㪁f 	v)ַ֟@?R)B\*
hq9-4fL_CM%ѻŽ3-\	lN	>/T[]0xC\2$AUUh)
QK){'p<aOxTahHDSHE<^C6~+;:rt<EQuTg*&h9A6"p9 ]D.uw6l:EcGpڃZء^"}!u	mءe]洌ڈC+SRm><~+:a3̇0
`#Q2|!P(:SUq%3QȎ
d
Y(4CP0vQD>&¯c:.d"	
I@ǔ\	=$$A\D6Ȑ"ª3YKT!
鸇B\%:Ƈ).yq}]qXm]Fe*+u؆D{)*x7-=GlTte󥲏Je
*aTG?  q1[*}o(0M9P
Op9PK /  {	  PK    A             2   org/bouncycastle/crypto/engines/Zuc256Engine.classPj@1֪ԛh[KE"
U7]	Y!eO~TUAbvfe~ d(	PsA$CTsF"uJ.l(.e5Ocyb967YvrECoR=wiSS!j6eEP&<\\y(i]cW׍jfןF@ztw:9j;ޢ.Gq&
(4PK*{e     PK
      A             !   org/bouncycastle/crypto/examples/PK    A             1   org/bouncycastle/crypto/examples/DESExample.classWyxTWr'JCI퐢$E@>fn#3ƙ7Yp.նZVZZfhCZZ[K>fˆ~~w=}<G.@ V@c xN M+A39hexxXf斝Pmn9N@B_N<'ITgZwIެ`MǂId4=M+a tTж.m&cA+Fc;D+ɂ;\goต
&2؟MD*.2ie;=moMߝh?cH1b(pK(7C~;m&6HLԒތG⒄Q3uThʰb4Qc2C)Y̤'LzAMiF9E"i+zn0-3V6Ec&QdR)]rNlHڝ̸ӮJ^Dy34O3~8kL"G`i;2-că4
k˦J#,/)ILٱZgKL(XQ%%UzYZyL):>+]mIERtc2jORJJԙ5ӫ3G_22Mx'rYzZ+=>BDǣFƎ˰S<VeIݭclt[!3)32&us|3nw`\ҥ+Y+ۓ	wuvuƭpWE2OB&&2V)sfb2\/Wϰf<kfã.`AJt+_rKшKQ$tf]~:!8+^q/. =ΙGжJ")W $!pf
H`@@Vnmv-G%{.\yP]5C_}ɠgJt}Es,MajJ,[Rѹ
(m0KH˯Rdlr~,kǬbnnj>شМY?8Ͻmqk-b$"/C-4"a'Vkx>^a^
հ<נc0d`5g؈EX:4g8p3C3hXR
QX\!`3-}I^Ơ^ЌVixpvQWݵ;p'ûޣ"21Ux'&>B!ϨGLS*0>"OH}Ta*RL4*Eu4Ҹ_s*qÇ>QVU!b0|GWqx>pg	v9QkV#MC
j2jF?jb
Fi1Pz>%
]ݏ
'LN"EՉ}9|'oѴN!9|{?%_ސw}q
#[Vmwet_?=MOTw)`|G+HM[2D+4
.spã);\vJM%ѽW;ID&18.y2)SOS'yhky|'֙xP&&29urn?∟vm'aŸ3$F6uH%S͍%ţHk=zSO0|aL	kn*ñFBSO<~B9?Q(I̾i&jC7`M
!{]it)YenZ srп,CM̦២tW	|fkl*(L:q|ǏM2:' 	+NF9.@T{Pbzizu؁]<k]'Rd
	c72e[8K_uK9aQF5:o#Oqj`3u6zq-8\=E'
;[MHԈ)Nap
Cd9CS18P5M4(EM>
}~_&
P(wq*b'!
0y|#'{Q*̭W"'I_:	2EIRd)*(<VᔔTOUJ"OL V.[qQD-2uL]+I-jRdfuc
cPKNz    PK    A             5   org/bouncycastle/crypto/examples/ECJPAKEExample.classVX["㕇G-^	&u&}H![)Ol^{lǩҕLJwӞH{Ϲ眻s@JK$:$:%6K薸QWb^>$$KYĐ#%n8"1,qTģ$-qm%QĘDT"&%&$&%^'w
@@j#Q;ʴ)pZMEk<>uM@oY%diD/+
ns$J|G߱nvUJm{VǢu͙5jf!5rX}cӺ5Z~:ڳd*nլ]pҝQ
%]4w3B'ZSgځ~s4IGg֙6[٧鑴QȭlԸݵK/LOLЂk')m\ZS2bu)I#NiRݤ[ڭ'
-aF㶶G	ԑ6; g)3YͶ	dl9)e;3	qTet2Nn\!Xc!۴1ήg|uK9i3i\q`#9ۙ)n%Ia.ܪce=N;dNVr}Cnl"Ce:6#3+w265bav'F2nNj4clbфMSs&fGhUJh&MdZM<AFHZPt!
=FΈ9B' B1Jq_:EyhA}*fC'[G1KWENCF2I	H6wG<;t/0ur8b]nC]57F#F\=4̰v9{(nNg:W5qdGA4Gw֑B
2ϯHRmIn$~m#=fn8g%Ps\QO$nTq#q#d爈EkFQuODcT\T6e#-<Fa
G4hE)wdS<Gtɾx㼭6V?B
I;fCT6=N{*d$P9Dsw0ƍ7B	s`Ws]l:CZWl9[t2	=Np9AǴ+*Ph.h@k!ðI.3/D7N㉘m0g!b{7G<A3'eSnmO6OB9
k˲)g3[鑴̡+Hc!:n,A#d],oZg%z$%I8,1"RTpg)x(x(x)x(x)xW(xW)x,s'6puǍLk}M/+/ϕlX~Ū|ҷ![~G&R-"n<|rVՇ?%x%BK>ǝg;Ghm<c/(ipST#)Sc=W{ڥ@/JTkIa|J	lQ1Ű[UئMخ4vb
T7x3>p??8>bWq$'3<
TEoŗT+*WU<	OT<$c2<8v|S-	|Ne #_y~Ѓ'/~M =3gxpyc=D@0og(eP?E >3׃|&E|zp(OP9.?g}(З72D#lW!ѨFڒnPX`9Xa?`1`	`)᪠/;'ʼ2%Tn涗>/*Rۚ5)Q]NJT2W-V
%YԆZVD2hx	]yF0%:R={?Mk9z&f[n`Up"צiH^o1ʸW2mpAKH`%\P~^l
g
jJ\\PM%O[ޛ;}sKS·P[MdimRyҲ<mƂ2Eܚ\۲fߘE.}b_`fߠ2IauZ4*myZ,xK``5K=WE&ze]EnΓj9Z\5Ջcm`A'ZVJ\rkXDQ4BQ.ѧDy>XP2uA
wUw]n)J4 9uμvkQǱNyvbz眾%oednq֠v_EY^E-mEŖ"FwPKjb	  '  PK    A             3   org/bouncycastle/crypto/examples/JPAKEExample.classWxV(Glgq85:@v$Q,Kp!$vVwt{ܮ A'qzsދCi6I0{'[Qtߧf_fN=i bDeK\!Aq}%6KlVb@:A!$KK\/CbDb
7J$q.Kx%nx!'JX9HTex%$ %(kt#TiQ	#-.(Pi
37=gA+	L꣓zo&0]?}hUEvjأ]Z{3	3@6L᤭^َYbucUoHS:W,X<1f&C]Sq}yVթ̺}%FbJ=na=߂5pL[gNU
胔kG,uαV>Hj󙣈lbMh3[Q8L1a:ww+BޒsD@-&9=횡tϦtS˝b_l $lם13o&8t653Mh:m#;oQʑ.P7juL&Ew!cx6r9;dfS]QkP$&2q
Տ-[JwHF\?ut]stIr~1m E$,Hzj)}J91Ŧg]ӳnULWi;#æ'B%PgqBe\Nu0c&Sp޲l7w)bEyMu%]/7\/д8`DVt8:#fJ3F6>L8%"bQ'(\QD:C,%OڎI.]h_:5u3WbLLdt'zc-7Y*<
C8l͚cd쬵(5Ζa;3O+%?1G(ьuE ʛ渙u{s>3zpa#霑%
fOT-|!zcNm}9/bۃnGȵ./#n2slVt|	Us\Yköy7阽1ǌU9~(.,%Ea&LzNs3e6~qOV0)
nSTOStVU<W/T"w(x2W}C9u924% @|0-.#!+-
O ]Ճ%Z{E,ƞp~)Blv
@cE>]7OŻ> %30Ew}g_ܥP.ULÝ8VWCWj3lU^J5
Y֣a/\xW0L԰fp&&3a84d8,Ұjx->!^iHz|D>';Iog.<-<;/1|g*Ƨ>y/3*a{51'?e%ï~w]&÷}~=Cx;>/ϟ~+I-oxSARK D3ҊEUq~PqKX]u,cP[ATo%PT+CxUoCJ1x
GwǟC76/R$d3\H]T@FuA3*2*xVͳi!=Do\½B0Oma%,x+|,pMk*~PiZ[2p3>&qP+bEN(u3'֖1
2.1Rgml-vGyb7}hgM8/}i*ƣ[~QigiMrruBQ7kK
ZUꬉ

y*H:RurW<opեr¬n.14Ch(xoI3RW
;m*gb	w--(z3_
M+X13.8zQI/۠IVI:zֶbr[[{E铢m'E7ݻ:=PKeD    PK
      A                org/bouncycastle/crypto/fpe/PK    A             +   org/bouncycastle/crypto/fpe/FPEEngine.classTMoU=ĉSN3)1۔/8fóbO;iÂ]%$$6l 	0޵?Tྱ%<}9s{M5aQCBCRÊSj|+Ho&uKN!MNT:l9}#X⺂nw
L[̶>u]	HhunrO\j䝺Ŝ}t=`=:q.7tm[V	faTsuf<Xz@w9ۭݧ;=f,בqZ\pC\l
׳DKi!7KXFguxæjQcIvx	c,k3-6mmqGH,ƈ]*Qɵ}
07U˸^#[uN:Yn&UK>E>
	ixj&$M+,;[b%g]?*=;Qg
7Gsyb8S~bNżs*VU*TWWU\ i
xT8nDYxӠt"5G/_B$t#uw*v;%$}Eǖe#UG
Du,aVYibx'˸"UiE(6Jsף$Mi.c[\07yʎ[fhnko><F%
bQJ!/$u+U#/wEKD>23?"=Oa]zدبĕ>|%J<Sh!=~rodR%rrL|3f&J/1-2¡;~MHQP*2aIB&i&͟Q:"|!87? 47`~ؚO4fJ63&t#"#B
^{ :x֐]+7PKk:η  >  PK    A             .   org/bouncycastle/crypto/fpe/FPEFF1Engine.classUSU6	ِ,Z?lhZ
K0`,B[ݸ{b_|q/>ؙ:c}ornI-8ɷs{ݻo >w@{ o_7˸x	hl5%]MVU	Ad2DU뺩q
p0̜].r2#yѲK(GDjsV,!
fGLN[,
D:wL	JS"_tK.1k"5ʬl[baقfkی3t0
94&Vdɼh9΃e0½4]Z3O^[3}Jw,dDæJf*즶%
,$3
1aJ)﨓Բٶ%)Iv353GKB"kQrNsԕDm7iߎsS%HI-n64ڌU%4CdNr"ݡ͸$39>5-_	9?.^0ЌVKqDEE^n$l(!nʜM
Dה)}eDeȸ$#!#)cPƐa3'؊1	S@W46pM'Ίky	)ѕ7`$6-\c&Ћ~X5V|	PD
Mc#2B_IXMܽH*8]H)ŤwWpgѪ

}mH+8)1Vp*!]|=TƌSU#4Vc^σA`-kbt+ApG +\7
X$_1FqK*V6kY(>9NrB&.xhl|rcƸ/q+}l??W\]{QxU p=ka>dvz1.PzYrxy)~	q	dCUs{Q<k
TA1&J}VXoX]C5'\Vp:%h]nQk1*+?D޾
BFOj[=2>$AׯQ`@PKT  }	  PK    A             0   org/bouncycastle/crypto/fpe/FPEFF3_1Engine.classUSU6	bAc[l ᇭB0`Z(U6,,qH/8-δ>79s7I	{9=?1m /p"o$v+|jR?4H/U+q	MT8;Z`9	ebfZ)kJa^Xgvd,焹ΰH8s	ʔˠ9K4IרbkCaf`W$vNU\e
4[b$$g|[׷2MwyѲ4]	men3UHO4j<Em=TF)Yrt3s6]4Qg7m-ahf>6׌I;_b&OfYUyhζ$\w-NPHJnlM̩bpҒ,;XTn8u%^U	('Y	+]4bUM623ILԔ;ӈKtj< _DVFGf$5b~YG<[u#`[_\gP{2h,q6)^*:Rioi.YYFNW/6oʸ #"WF~q	2ec$kM8Sni'wGyӍKH4 Hb	sE[xm>b/o|feXWZ}+	Iq^UgRp)]V
zPp
.!"x_y誂s YcN
NaAAӸUhn
P,qA"Ę]Z E s9L %
D@&)hA-ǒr\niEq	*'~~P2dF@ VU<c{zK~@ov__|'<c=l=&0SjGƄLF~jf5MɽyXH>Fx!筘wGʋYzkBQ4RiI;BøCnT럠X]]%˕j;m~Dd_gUe2t݇ND3N#?((9
PKтwZw  	  PK    A             *   org/bouncycastle/crypto/fpe/SP80038G.classX|S?涹i{$X
hIZ-dIiaBеi47Knyܘ9CD=SMù={;Ah7uWEL`| 	p :A726v,`alcdBc=\$Aknm<UT
+[Kꡠ9 #UL-[Z1IYJեD<חxYۻW^
ndIVh4:KcW
z6utgTuYx{e8I=6KGbn	G8JŒX𮈖@M8!&c]zlIv&pGC.׻bA}p"2^\qi-aciǺ܈6"n=m\ц#Cȶv2󒎰K+Gd)kRև⢱I0**Dwt^l(ZbU6q,KF%G"uTDņA]Q:
[ց	Him3Ѣ 6cz{Bl/ǝ
\wƇS8NaLNYOF(x6gX6Pp䤺gNIGkϻ
&-D"6N]GcIsg$*Z&kŎbdY
i|H<%(ڕcNu5R$4<Y38`X"$x*A:?Ix:[K.F]pFObL?֨-q }.i)bb5ʍBк%gݶd5rFxZr{,{hcposǸʌSK.ن'vSi-dCAwIpX0.gFt܄5RWM׊ׄ׵PAS`"IDcpapb$֍;tId|οجXoUÙ<C#x&.a3[x! <2&5FSu+{)1AN\6^PVV8x2BL$Oq>	sj)'llƭ1Nfӟ` |ӛ`>EStS5켰9lrsz߲ESK
W[D2_mWzZ25}oJ	A	/A Hp$J
D	.9 I4JpHd	SA5AP+A	0C4̔`fIp. "$IG$%hJ.j7KHp!*n`1N1	pP|I Kp);	4G$XJN`!ZuASn6x/E)|U}pp	WF>My|?"1OD <Dp/|#x	<I~N43"5s"\!&wDx #"_D_(v&~Ԣ+-3z8o퐎O5T=_
 Ü
؍9%w΀l7cM|E7Ts*Cc x$,zY(4+b2VΚ
Q@>0QSj^_
PզY,Sqg9i	cˎp(	["RmT/唪KաŖ!Rȉ_TDO۱=QlYW@R@Z[RXCeE{Q+*/;*Efw}*?TpRW5*U 8Z8Qf>y=*yisb3TC'8yx0{?c𰟇0h̓`ԈMcpාਖ਼V0:x,['qcG8O$=IW?5)In4]7uKݶ:9T7;ߘZy,%~˗[|*远xZkj혦nM}1wkMŕ媞7$]/WR)b.+MuY~5}UX x5
-	t'^yh%0^	d`aؿ%P3li
]VQgRSЀdrm@&Z_POVe-lʲV+8_'PG(sHqc7vK	KeX**lB⵴X/hZ9/w^;(s^G9yn|丙\|
=*,6Ֆe<Q}l.;rҎ
wRYT)wU@PSű(RHP*n
-Tyd$ب,'!CXVZiQ,YSq*ðTq0!Sq$Ȋsђ( 3
9.?T,c)Pm=w:Ƹ{r{rBW0DlX1ܸh^*K9*efm $EYkYj7xHܹN
MsMyd`*WO&>zdʲAf.%8on
	npVR,쥰a^G-fvSq2cb>+"S 2sNV|Ih"|x9''7H:&{ 6С9]׸jኛn3Xb,/hYCݞ#0FTmxFQ3M+/C@GS0JQmFz7jfS$
&^z]Eޭap*vFvmf|+sN,o$`o|ZkeY&bx1"րS+1W*vaZ2_U(;0KTCU_GKuMgR4X ^ҷ&ZH`BIy,X	BLm!tY@px:&&L7&L>&j|=]
_y04߅afrz?(^BJ1YN\lN,(B
a#>LԌoX3%O*ȯB%$~ΊWSc #-lnYWL/LTO5aɳ\|	[nH4!1oh,Ʉ{Ѕ)|K7!`F-h +p95PKŔkL
  .  PK
      A             #   org/bouncycastle/crypto/generators/PK    A             ?   org/bouncycastle/crypto/generators/Argon2BytesGenerator$1.classM
!r9BRѲ"EtDC-j-:@xO s	u+a5?6p^ݬLRh>]ZYEt>)ɔ
aҸpٝýÍ!PC/XU L]} PK,Vm1      PK    A             C   org/bouncycastle/crypto/generators/Argon2BytesGenerator$Block.classV]Se~d
!iITAb6$ i)-
D(L7v	[NU%So8?l6%*V'8c&sΞ|&??	،L	"%1⵭:?F[z]3mS.QdY Ut𼉙ix ]*^au4TnK:,G혖E[jKȚv%sޮJ]mg~fʖf7526Z{-FS-0ttk?6ڞ4Җ)e,wMtVJb$.;nlkʺnJ0lդze*ñg&nts}"'f
%M ucNKl
t}tp*яLPŠWTQU1U*rJ:kڍy>XOڼREtBp!cXS$׎P-$:!("	F4PY7)y&)\J`+(Jy\csqNtsLdRob>22Fo۰ܥ:'5[֬ɉMeV-%7$]Um[rrn\c Hs/|$j,$$X[r!?~|2PBgOR
!=>.|V%Ax.'x"9T:Pϲ_UFh&JG.e#J&Zb˨zNVU/)nRp+JF3(wʥYa=C2~n;#nK8Km)4t˿dҘ
rOX)<j	|Ry:/7Ő?f)|EWUFG}ԺGovCOQ{Sw~x|.[t/:PKNp&  *	  PK    A             G   org/bouncycastle/crypto/generators/Argon2BytesGenerator$FillBlock.classU[OQN/]X.*-" !h=u)k)l_>J@41>O2Di15!333{9O_ Lᶀwt@B.6@5MI3vfάۙcGvw3s{QJځ.z3gC9fbs¡]^h1Cgc;z1؎yϔ2ez,S,l3zQ͢Kf~"UuNW3:BU@k m%ui^`iyTΰǇh|| [ge/.WIfR<2<PepE2Ԃz0tiiXB'F$taLB7FLQqBF3En0{ͷj;};]^ϓUC,hok
@1tS~'3
(ەUvVHi
yIN1'7?".{eOz[NSぷޅ^%һҪ?6@Z
U,LA"4dBВ>+!|T*
O 		
!I"#	@x~^+X-7w3ZIݸkTN~r3ԮhU@#'(b"(p(;N8Ԕ>{T[W'V~
Uvp$:~jDoՈ Y%iH"P "nePwшI\)PKy4  ?	  PK    A             F   org/bouncycastle/crypto/generators/Argon2BytesGenerator$Position.classJ1ƿm׵U^D'=yOcXR$Q$x|(c/Po~07+	ŋ`t˷YN]FZ=md/+VMktʍU&Tm:}|hM_݁΋\vsNI0L3@Q)Q*rj^5-
"t*Lc؝v'밖
G?PKb   L  PK    A             =   org/bouncycastle/crypto/generators/Argon2BytesGenerator.classXxq%p x$J	"aAQАh	)?$hL)-y"N$,bIc7t>yYFÎ[ymHJiӦMIHGhInXfgd|
E3;37;;;/ El0??h8#umS^BۦĉG1-ιR[@ĶDh`PǇf+U	jN3EBjaO<nj9nϤi4pEv%:FCd2v%zcqr4cjbݣ]h_l`nk'cʠm_bC@rdgt0N2`;'(7t1h1:~h%>"Fa&#yPb{d8uA6>;6o7[kmD$AKg=i	2jh63`VgtK8.J*=#r;Y-38dvE[(2p_fʬzb%)=C#
zV/h^h*69nދtϤVΑ@^0$*:ӲdÉ]`A?8t㷛.өܐM0 2SYI)&I-c6xlohϦLᙼnE
bR+NbCJM&請xi-~ΉaJùadX6ОhZ^ȁ-L;r5Jb 2cRv0X{vTgD8Zf豻'XHS7^J
㺱ʺ=[spDrBEMo&.z@3m
5Hc6S.}Yrl(=D`n:;>3&3zx07rE욥{оWvX8X\J	B1-L|K*sܸLkect;q[6v,`6S%VЦD|-Ә6ҙ0!]FrG<	ld|CkEl#%KaĄrQ_юJOL"PѝEsF
E,_,fTzUWLggso^gG5>Olxi`w# S;x ,~	H	~U_LJN	K`J9	nڎ9qMlYI:J[_MGv6-im6gIso7oM-{[sџ/;at o;CWj%[rNw˫bg?WN|~riU0m]RNUk<auJJ3}8|*ūJ
i|?jO*Dcсa60FP$`z	'd&HI
az!C`' A`-8e`\2`˰dkaed8
nvG2V2IJZA.V~z2DcD>,Íq
dGe8<&x\_Oʰ>%íivgdȠl'dB0O%(9A8Gp	<IY߂/=p}Ļ/	B+'/	_5sCG5''o|[&W|~@.x D_'g!'u'!pF8߆	>Gpg	];.Wz |/Fɥ^ހâeZfigHg1{2uT5
?ܯ凵ރs7F`l]]HnAzC
Nk@Z򛠭Biv[xcmn)R[Q-O/ik|><6wV<
}#R	~yd?~jAV,-kSĹoVf	%Xu:ss;H~rfU9Iyb!$?n#'O*jVb6vz4Sƶ!64{.͌]V~ciN-؀n+S/gO:g3Vb	_Gw_3{U~%Ei2R![kdVY2{PƎ6Eʱ)6qtO*B#A+1I-CK8S
`컐oE1`Ŋj[:Y1pL}f;Ր
:WGU24IΎ])ح}ࡑ1Yw
zCs-")m)9x(!E</b\JyVįoV@|/^
	!
4_#.=3zl:>	4w TCs!boQ`eʩ1>TE*1q("eY/ -|B{)d)T"SpT\>AA[Y%4!W蛏$VbH#E]qtt5QQ&Ʊ.7:<&cל
V"Yͺ0@o)q;;%8nFIe\D6W"Ì	XYCLG[KJe)4v#xc& y /TxZ)ՃT婙T_LZ/>,tyY<eEvm`h ^}R
%bzLU;ʤdmueb'F{L'^
b"ꢈ~GЭ;*lG3:[w0WIZ^O;cBLՖfܽx7ZտY.*wY^W;*c)ҙw-a6avBkGy+w#"=bH'x6'*.8Ɩ,޸,Zk1*9̴plؼHզ61PΪTg]8͆WЊOHs:Z1G/3U6ʩ1n%/Kt:]Hݫ5icvu.ฌ76hJZOALG1Ul7ѥe($!%
b
9E'Zjڱ}lK~69@ঝ	But7c@'D"Dw(l (1YW$~/W}R4;!y4<˅eaŎ66Qb&G\HcVsp1{;Sz1"+R(#52C~2_r$6PlTc
eIpmU$i	/A<Vi?c4Fô{(TiUo#IWx_MVܜhAzߊBG
"Z"m*eͺ/mR[Z)(s̥bWSޭ+0*&E+pÝNV¬WM>6)zq]0NU9XXVA$l5?Yr]b#U#PHt	0&qaXKoB½|v]X8%&CoV(EمXq<ۤ<.
:͡b@˹r3} dkw`FwW)B݋Pvު
yExu`5틌	}jAR_tn/rLV\ܓZLr_]1<혩.]XQi@:mv?h>,zM_[qzg@l+4?PK  ="  PK    A             /   org/bouncycastle/crypto/generators/BCrypt.class\V.<a_+"EP((*.PD2U"=[q{ֽugw][Mސ_hQ(Jum9va/1hT#&|-,/`>tq/G:bBRṴ[掙Iwvc-1wTRm䖞ymFCޛxg,U}_9VFU-ª_cհ l^s擝cKc_5?]
{ðc`ڬ"
t;+cߊЭߡ	έ/cnx`v	Pg&8[v>U-f>?LYpw\{z7*Sq'%
+nɈ
x4[&Νx7 |x|#><I/eVLRBki`IރW,1vRCӠy Pp 0%Fٍv1
ܣFY4Yx
Q+uW-:?Io,s<Gy:KP{]
?,˹K6"hZe"8ef4:
!oE+cQqv"K\&bDEMpؔ]Mn#.>-Anen3/	G_7EbA3jyl}ʟ鄤\۱H~U$	)12Ǟj	[!DE61 TYr x̲T[*K,
Ker(pԖ({AB*=$c_o1cx̝h$XWlȷ;6Exmߕ/1V׉MJHN`1^5HNpMIp"&޵[ZJ/^^ժAjtzzVJZ?թZ5&;#>(ңMUZ1	m҈eg=:I-:6#%ϵkjU]fyD'%'s+y;YfῊ*Gd5شlҠkx!-صypm9iخk6D˰
oiiOXZXlZFl&]x`6]C:EA7c_n%;2_-#8vҢcSRb=89.!:MJHr;lvbۥ5g۰9O|,'o=!6<#-!;;n	IIlil~3kۄ6)AC}{(0{fྱ	)l#7
Id?Vgg"gJZwdvIRFgD7O}VmmxJZMmgd%aѱ=ߔž}iaw'Դ61Ilڊ#ݞlߩY!ɩ;3!-][6j_)rT7C\ƐYf	C0a=,>P0`xPj7zrmr&?bĉ-1Ҷ5Fhq#HQ]ƨM
1j~$t>~ځ1ߺuv`Z:co`\hD:]?uP : tƄi0sLX&6y0nL*&Ub_6i[tS&w~Sby2.QSO4阖P:
=1=7LgjׯaƖ0j?̸u;3U܄afŒ1~,|6lknf߽^
9az1'Ńl,us|Ws_W6E1w;䆹0Ib̳ߔy:¼Q0}אHVc&rBnȝݱ2旞9Fa q%lǂ>}&)<ӜvyY {KpDXVzř.X|bP5,qJ,Z'K-`GӶXӧv Ke.7|AXg
aE²X1bVhv{+,jbiX?&VU'[u>zzXzh֘^5M~ǚXk$ֺ
Iga,'ºnVo!'l\6jjYlLP$cS*ǱiZ4Ʀ`sl^z[jMؒic-*52غϢ83 [?#e;nE8ȟ煛ak^d]l:vrMWĎzN=/;b牗mkZr6v= م]Ƭîͧ.aבs]O/~<
lBA
:,A'Qp=v&쩓{yEcgfس9{߆'GbwEop>[_cܻؿxuT|sp 9rM8tP}Uq|?hC]q`x6DOaÓ}>qD9GFWp$]	z#K_M2ptK8jc+ÿxʸ8j	,ˌ(T~,I894!Nktd0NJ><qj3nct&8^Gh6Nb<p8CLL[8;Y1^u&8w&27qF8_km>5˯BͮqaX+.,e޸{..TzZ0w\
Zҭqis[V=ez\ \t]<0.?~=?$(cOuHO\qŕ.M3qy2,qu*{<\kv\skF.qݧ'\O
5zrϢ~gZy5q}s!nXٍ׆ƙz^q
kf>kcy\87[՚~í4q5#f
n*ۿ$\ǋpqC)utTZwVܰ
samyl5wܽXj{w}Dޠ>
Ã~xЬq"U6.8iE75xl<<|d7ޟGi$MwފG'߿U<˿ǣ֌+xRC<i6pLOUiIẗ́xzt7<?s#>Ia?Egk'٩u6xu`{+GfLh/2"bj\*P'/˓#w%vxUDcr=~
"bU-xxmץJkx7^uއa6EޑxSou8xow훈oce+`yUwjݧo5_x?|CyR26TߊNۆ>jOi{ӥnP'BϢϩb%^t_Ɨkoeo÷r𭲳E4ۥէ*+񣺙Ex(ͣ	3<q%JӺ@.2;ȁPM?sl+w}r/wj VEgV;Zo`^>^y·0~|%,w4"e,.+2`q=u8Xt$+Ʊ(dmDVy?l]rJ7v8þjG>a/;cc8QԮ3עρMГE2(!&^a*2`zKl_@٫Pu%6UE]WMpUv;86	cq8ώ㧰\Fɞ%PrT[/4*%uF}7F3dipk.Z)n|}r=] ~uwp1IK^p	{.eڕ(5ށkM]ׁuQp
5Pd,ɛ=(1AZOcQ^j4
UP>w.w[5ֿou
u
7rDV*Wp<	npo o>TNE;R(zjxF-776}*ο*?ʹX_x]eKX>\cP5%T=1B%|n)OVI|ϐy.ESP=m77JD
UPcu_=՜fmM{jzcjiuWtM$߁ϡ["1s*[?OS[oQtEyd:"PgKFu}u?И0(!"jX7D@RxuԳrzU>^YsPrZ6?a~r{tAA?2jP#&׏<UAAyh1
Cà\jͰCݳ~yo+%Fo
DWqoExohC[	Yv{ ^_$YmѬ_4@F٢lh%6Ih6	SFY
lh~u$^9-zӿ:hVhY׼-یMDhI["tQ  Fa]J|iVeNǡU5tv3.uCF"\v^"!`/½~m __3ߜ6ޝs&dQ
"҈h4~~쌈콻.D|q6{}N8mORn˃,v"FdmloG;>g	@[gWh_~^U_!c:d>ۂ7GCU4t=sq|FX&:M]G'.r˻Aq.QXT^?!M^nWg@L݁3
,S"֪A7{rC}8q{o"neƺCܺ-wć?Pgķ+3vUC`t-]e|aw1z>Ak91@)X5KEbK:$ؽ(#aDoH$ȘD=&DYnLLCω.KsH*Ih^&z^_[FrqߙHaVH?)AEKG!'w@+}m1;ZiOO/G_a[t<2WBfX>ŏJ?*z#VCVhD k]!dm)B1}軯dS/wk׸UFwM?`Vqǀ)c
p(ܪM`^g1NnB9fPNX('-Si包r(&?Lʟzl!cUH6*FYc
<Xcm<)m#<*3leL2F9̶Q+sl=\e2F(6QerAc;mZe#G_<cSZKZkZ2_L) y10yR4m$Q)qD) %9=#:9mtR&_ψ":UJN?*%DW%
rhKkU֯KF3:Ȗw-i9-iy[&vD~u~mqmP6-oiy3[tˮ-[)˖tMeEaAT~C3(u=6kSK/do?A1(+JQKc0jcv2v;ւu*|Lf&mľp
|MRN\d5lX]'R,klaure?.խb2+Br
uK^ur&숶}S,P*rI̎ORxs;mڌ0`+AΖ*]D, j&^_gs>&3{˾j|B9ScN%Be25{=bwŒM!ĥP1N^ q%ٛbOdxXkX6gmڂkK֖^Q} 8ۛ/TR=|5Ogva5Ռs9<LTlg2k꫉zmm\U_3OgY(ߵI{wRNv}]-<+cȓETTޕ3oJM-]x])&PIq.9{ɖmX8W'ܳ
&kB<<[TDOS9?iV34)"34d5e,|Ees~e}-MfQ&<|d?
la-v&-=ž-Q&Pv&KvMؓvHR\)b7߯J1>?RT]Ua%A+WԒS{,+'ҋʞ)ڴ=U
(,[l]~Ze8j۴؂[bw標6sQcwG|-׃O	[|m>+~Q\f,ZΌo95d>_	{{3V(ǂ96.;X[YP(l s(J[J9̷ئ-fG`xY)ߍMzHa1z=ld£S?(ůGDr>_Uʓbnieoom^-R
ɇޓ=gg<z&{9+QȜoԌoԀoTo\oBRJZޑ^eQ2K[=^^nb|4[>Z>گ||Abb 1Z+1Z)1Z#1-]6Bf5b#YR]eYLҤWbY\gɲQgYRI/ònYEƲUƲƲ>e9=ey6K7>,^,+mYz.,=,+:*8^3Ko=z;U,}tf}5ݎeu$Po,kmXңYև=XXXՃX=XSYX,,,uue=8˦@t,[,[X,,[YmX%XчЛlcO`N,]Yv쨃e'݊eg;.x](QzMѺ=e2NOdwbMoϲޙe2Q2IfK',,S,SZ,{,,,3twz>_YeQ;/7A6E~T}ê?@5l%X
]	e%xaT+{8Cz#(II!QL=:1VG5㩺=eyO{2UWBъTJFіt.=CyϢٔ\=T=;8Σd6T
⽈S1%TB2漗SR
J^Iޫ(^M@k(i{-լy%T⽁Yo-MMxo{%xoj|뵍xo$|当*xD㽛9Jx{O'( E(C,}QP=TuaS(OPIJ>EեOSMJ񝥪8sT<%Ey_"U2%gyAżPTUx_$
n}Bo(<xߦ7T5)y@vj))~DՃS6'TS>b甈Z/)(W~MUqo(-EcQwT=:G?Q"?S5w!UB8Q҉wj~+0̨hsJ2)a)K%\DJ8;l6ZR'GjyoM*E(]wЖUݞ@HGJ(9U)p"ʟ%(6q$r+I5Xw>$UPRp](8+je9'~9J<GՍjܦ
Tɤ#SqDUU9;Tݤ{
ҋCMU|xRC-瓂?{SpkP|)	?kQҁ#JU>U9pPk@GRS=\SqZPu2Oy0F9rS!
*w)%|ΚQgs
>-(-)qZ)FQފjsPkJ~R׆3jK5+XoO?u*ӑ_NT}šv8̩[n-GSO-Unpn)*TQRR	;F=)'$<RLG^^q{SlR)2rLqB
BL
!0qP)XMX!0 
gHR`5V
66YR`@
LK)V\
eh$)Q
@)K
iR`/CnR`t1.z)jLgH5b#&0 )63CR`x!X}!VߕsR`Op*R`?)VS
R`tkj!pXm't)0nX/&gjX3I1M
"VKզR`R`|KdXf)Fw/KICR`['.0J՛W1,V
Xn/&
'Ic)0	o;J5sCR`rX,&5
wHUR`!X}(֜j#CR`-P
R`uXdX$Oq15	U3)0())8	wB`J
UL~kNR5RB`m7ji!0X&VJ݄j1!VZR!^LrZg)p|B`LXuH˅!VB`KJyR`G!0H
qU
&V
;)
!0	B`RVLZIGKIͥ'5))!0)&VIIO	sB`Lc_[QB`LXS!0-&WB`t#]?aB`S!f/V
qY<B`uX.&R!:AL"Ǆ5je)0!0!&CZE)VR
L^HI!LXkͥf|S
!VI2R`rT
kR`7>#)0
I1H
6cXj\R
H5]
/kT
LjHաR`M|SZXR`Xd!FXkeP
+R`R
R`uX/V^
HNR`X'&V')0(&dX}"֚JX)ZG
9J>)i|E
ť(*VoHICzR`O)0	c$B
LH[R`RI
R`L

R`u!pk)\
R`\|)0cl!Vk+i#VJR`UR`!p	)0(%&}$D
ՐkR`33jl2kI\`Uh.0?2R`!0Y.Vmd?RbB`cXo#HL:Ix4kUZQ!0(&!&-X+&JU!0&XbX+&)B`x!VM~!0)!-&ZULx'[!/VkP
R:B`w!^EJSl)p!AǄi!0)RB`^
,$k!B`)>*V#@L6Kcw&Nw"B`5Z
H#B`-L
N
MB`VL
Uo!VI
|IL
5;)3!0LB`|X&VxkB`5W|R`U
KɆӤ3.VII!X)0vKeS
7
J#C:R`D2%`F
LfJ8&Fԕ~R`4XR`\
R`!p]):G
YR`u!=C`/)@
LK)Z
LFI`)H
LJzR`h'&~R`5@
)V
{)0VI!)0%VkJXm)V7E
LJ=)ZhB
<
'JIkC`CR`b7R`Xy-VKR`32n%F{)0I)0$֬d1R`!p_)0m|_
3R`!p>R`2E
Δk('VJwR`!fC`M
{.&R`n<J
L6IoOxd$' PK?wg[+  @  PK    A             >   org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.classTS[E\rKaC˯6`
XZiƂ
"$KzKn1>їC^|3"E3I:go2dٳ9{vϷv J m	 Ʋ^gP4.J#+]dylSܧdf"n5
ۉ⣪abdղ#%Q6w-|խT݈)%vĵ`h[mZU-Sm+%ᐡMFb¡p3
V[PVgjƼEviTd^lA1<.Xi4].LCw:O\JfMSy.UDٝ *ac4rG5k	.%WtZ;)Vqd|ֻ}9Onuu.sBy:4w彎9(SG'F(4!a>C]UJuuU؞5nZmOdT+ET+K*TPqREDŠ!/8ⴊT}~&}Bpm\h4zplq{'b7<Fkv2?.z::G.
EG:b㸄	}Pu4ɛс7HM	%%\ҐĜLk;80^!!#aF	v/YEzZS$6(ܝb
.# EBA<5ED
}C"4#}oc[Dę/xϘM\{m Fqǽrykm?"Ŷ	[;I[uR;\QQTZfsCdb#boןWd6Rn(qܸ[	sM=HMOs H	ޗV.>MiT(
O6>P ]lNsAIbn1-n_	%\@t=@ޞ昲4&^ݽ5dV|Ӽ]aPa$WS3?z\ ?]k$RPK/%  I  PK    A             D   org/bouncycastle/crypto/generators/CramerShoupKeyPairGenerator.classW[WUC&S)֦*^C*4PE.
,zc2d&L&XZ7Z5aZ.Q.L L$`XߜL~0|
8YSuqcCGR2Z4yVa-O'gD[OӖf74pôtuf|JT
8n2u;f9R4	8Z6-)ƺ5H43EDK(WIXneAd>3l4g8r@dBi.,F
uաTd'IP [ʮbj4U(fdRK6K35c';L^NnGL+IyC-JYD
YیL
rԘdA#M2f*yQce̬]M"YY3Kkd`Ѝ9rX[SǎÚb
eefeknt5rPI˄,odFm_G-:fUp	W?OEi[-"3M˧,]Eϳ
E\qYē"-iψxVs"񂈀Q}'bcW\y5X3+rUeι#ѹ<H<
3Cc_
hnYᴑ>6jrtl-nW57zBwr&]k~*[qI䶑]8ri~hɚsR_-7z&p7s.H\kwOԊ?o6"d⺌ ex"/8áCssxxY2bR)!#Oaxs2<.82E ^m "8&$D6uCZB?6$B;BaöaqHI
9J$&8	QFAO\g&}p-ȳF9iG-:H
$?Ĵ<Bn!d;E+
ûU-2ba2!r.+Jxf0.x/џJZx
%pȆ[D>oD1dZ2%Kwݰh)6k">|ޏz{I'~o~=~Z~,W>?XaԷh2o~_	_W,(jYY9iPK{z    PK    A             X   org/bouncycastle/crypto/generators/CramerShoupParametersGenerator$ParametersHelper.classTNQvK]@AQ[,*J
4h?nãozI*1|sJ"6ߙ93u D2(d1Cp0;	G!nqGFFHs9Vy|PE27(	"FR6meyMk|&kpڪ"wWx!,"/lF.zF
ܔhY\26

{sݵv͋άZ4+lO;=溤w(h-*qI-8@Y-)B}	:ks"ueSAI*UheHIHOʑD\hhmOH2ގs|yǃ111yz,NB0
4Ч!sq^)kPqACz\Є у1B1	F$\pEU	B8=0FOג%GMOLCƳ9$Rnu	$w藠>.m
Vrcvh3JT0ܜ+rw;.e^2˴?Jau;l0ⴊ0Y5yq>Dc9ZH|bvl?E;$߯Z;rй+YjiEPKՄKM    PK    A             G   org/bouncycastle/crypto/generators/CramerShoupParametersGenerator.classTRPRB  (m"M(X!k55IuM|r|_AݓCGIq|ݳso p.{4̬uj&}%ɻ,6w_LrEF	pAZC.Zet36w:p]nLbn22],uC+lr+mNPgIqe7s1B7일ӷḎ^f}9$;"WX3<=Ƕ%aeWAI24 !C)ʣklnmaҌ˚
9w4N
7b
"
\TФY%KAGpQxU$ws4'bXPƶr;LV*({R'MK7MQ<oBl-cQ	U"zZKrdYW ]!?Z#DC!
mq]Cz4P4j8/2njh@LC4b@ݪE't	nKRс;*`XWх		wUt#F$ҝmѝВ]9;|E.7^cy(M'BčV%dؗ0=Izk4:~!L.q/ޱ>K*~[J\M2ߣ=S}jIh`="Ǧ~|E~rav)6TMT+TЮJ4{$}>,,b=~/_9^NěMv=-L*ʹtϦa3JZ&TIv^=PKO.	  *  PK    A             8   org/bouncycastle/crypto/generators/DESKeyGenerator.classS[S@&-AKTnV@bA00At
mI)oG3Gݭ@}|;O_ $!x"uHt3El:}ƍy2H&[i#\,\Dh27\-cϗicZ$ǁٍc.Q7oQ-9i1Ǡu4F9^tR
mk;Z,CU**QRewuZcͩ[I.jAtMJvW.K5t11Ԣ]􆮹BUiԘu.Ɏ-UΎպS]J*])z{Ej>v50S3	nGqP5Ѫ-(9[T\VJ%~7L e-	>	!	%KpAE	/&I0
s@$~昖59ek/?BZt+Rܦ:Kpu(5=@G9x	O"
zUp1)?&0)č Fq;˸@3!8f[BL-m-0M/?jObb">h&\{cMx>tqś{P
J?`
Zz0"MzPWpÝ&caU;-C9CN#g9ݍD2q>_{A~+a
PK0w    PK    A             ;   org/bouncycastle/crypto/generators/DESedeKeyGenerator.classTKsGƒ&k{1	ĆbG,#p8j5,׻9/T.*`WH=!-U\?0It%&12b$+LCgΌ\&H1(҈Ĕ9*CfP5o^qKz=ʠ.<K,Kd,N߾[\cUm\'\A`46f}/x"dj/ȨŪhGE=[<$q"ㄫt؝x'͍>|dFumӁ(<x]8>OPYP'[M,
c1ۨ
jZf(\nXA.|c6Re<r,~#Su#o'8
ykxM.x@!+7}@8v>x4jVW0K]PC.k5ڣ1$WSУ#'R!
tQpaԾǓ,3gEOI9C&2GLפC`mFr!UAOcPя4:UBQ'T1ܸ_ŗry9sJa_I1Fi4Σ(H1oҸiRk4hbzb
	6pr\BMB|DMf;s[9AHE4垖t_zW\U*G2s,hg8<О5l7޾ۡoae#H&IՇdr9Kߓ2ĬlP	X6֞+Fɻ?[tEDn7_rIPKM    PK    A             @   org/bouncycastle/crypto/generators/DHBasicKeyPairGenerator.classS@ǿbh*0* HJJpZRGǟB!Lorۻ/ xۉH(TBܔrc̒Й&sҙ)gr.|(0p6k;z٨uFBrBiRz-%%Y!Z0s2'G}y!0u뽽J*Y2Q_ӵnGf'vLmٮZF]4éU<[tkdFWV1t_s"M5nPNv!QwE~h hPk˔P^-{>:v9gvDɾ	W}<ʴ!PEⶵ4-#G[s~:igdt8+㜌2.ȸ(㒌2zd\qU5	)ǁ@;ȶJ:#Ѭ WuoEf<HCV?1$QÑ#&nғ;\`!>Pt@3OLx9
r]z=HU?5TEeLv_*:Pq*ѦB=24p_*0,fGDHE*:1&ø01]$H)IwLA
ΈfV fJAOD1 izS{FɊoыN}74&)m`+ď^c5(6X7~ Y)uֱ\c
sXm+'aeAr^d/zoqr:-+(n!Z
dVPKjj)    PK    A             =   org/bouncycastle/crypto/generators/DHKeyGeneratorHelper.classTOY.t:mwT@Fv]*jE\P-m5å-bH|'_ɾ/=gZ$KM`s9;/opSÙ	]+{zB :4bsKyxYU.U.Wn͗ZoHZ\^7P#˕I)kURݎLDҳ
6h^"ɕ%VucРtrC:>;R@w&bt\<T	JNR+j_9n+NIU u%:sYbUgPZUEgRD՞WLwtU'=j,^]Vh+dǪ$knH+O&M8fτM?Dv\=8(/5JNeg[Z]Lerk76utB,Wl0UQ  PB?[0p!6HY8p8-3$qBF,`\C8Åp9A\dg0;d(G1\bfO)`Te>YZ,"82K:L,3[}kӽEB	'#u'Oq*i<$Gq7Y#6lc=gƋ_?L:B1xW18fwyM
#6m9${g+I#DO;8$	m;71(>hGxK1	8&ljJu̿;(NO[B5HlkLwdh4/PK /I"    PK    A             ;   org/bouncycastle/crypto/generators/DHKeyPairGenerator.classS@ǿ@((Ў?p`Ij2J-8帗
@gz{~F	4hγ3OV&)JL%Nnq3Ŵm8iЬ-Qd$ܪ|ʯg+m1K2s#%&rdNgΒ&.T[aIGeܰvHI]Uɨ,o3>)+V
s2LBֱ\aLن5[>v7|Eb/_s"]CY+.zn9"J
J:W#Ccj>h[Yf;#|׏VNt>JY!Ze3y܂,<YIm +ڥucp9`f-"ZEqG]D&]E<ЗJ=ExUQOZ	nQ-etn@\@+{ұ&x_2qE9\9EG}vT*k;YAkb<imRB<6߫ZX?z<}S)ʖG≳Owf=|5
ɨGXcʨE}2D(2n	e4ad4bG|xQ^ C7$tୄND%<Äx'3LfZBfRI"Fb`dxBԧH>濃!FyzVVC2AO+*`T+H{YJC=ɱ=eP[.C2-biCu}">\PKKqM%    PK    A             >   org/bouncycastle/crypto/generators/DHParametersGenerator.classSmOP~.Ut0_kmTDD5መ/etޑ̟/eD?xoř0osO{{׷ VJ3r5Ě:L
RWS68u<!m0-&,Gm˶:=O-z
lEPQ8k4etZܷ }>	VOܖ̏kI9j&t\q}Yu7P8BWqV9T?$!ہ;ֶtHQFn\j(˖_2rSVTwRշyg91NH#z-ը)w|or5PtHǂi,ꈁEFGWt$qUb)\5iKsCqKC
5\!MNC~!+XbLH9_R3څr RY<+m&y s4ƥA8#eC7=,
*./G{
bWX:J>V+b)=P#V_P$XKaW)˥!|E/PK>    PK    A             ;   org/bouncycastle/crypto/generators/DHParametersHelper.classTn@=C8M]J IvH,[
t"0q&U+x#BE
 (wܰPr޹7 b!$3="m-!<Z#)9B3ྸy)X_U"[X<pch)pɝ8ɨ?*.͖7:9E-|=
s{¤Im%c*fʾ(
!=aV\_5Ԥw29n9jrϷa˾c9gL^./	_ea/X$}jN쿈=aS-YFW.Uj+ܮc5ТUCz1Оq#rub+m0竗?_
S/rm*4Qt%(`:CGu!{qX#:4ձGB鈡GGt㸄Qt E'NJ0$pZY	؇3QGL8y>7_s$W7%}H,!eҨ7sX,`z֍ɚ1MhPjB}nWVRŹl5m|P"W:w:O$EP:{dSnKI(91
]d$QT泆N#U7OPfiHa5OUqQ*
Tm|+?_%&ё.<bu`PKVk    PK    A             <   org/bouncycastle/crypto/generators/DSAKeyPairGenerator.classVmWE~
bˋJkm @c $)iԷnaMw7QZ9g£l ,%ٹ33>sgv_LvSf-
_Kkd9V
ɕMfVhhxif^I0=ٝ<Ӫ؎M5z,W-F4i%%lհ<W0Zv9eQ3guf1˩kyrQk83/)@&l1C/yMoNoTG-39n}x֮ZSV]kwU61Qe{;g?؎5LhNʒ[/ӊ%J9G	uH6Zà	3fhS]vBln0@L!Rg$iPlG^+FǮ03gz+sB7À-P 0lB<ƶOmQ=gNlvp~
2M٢
wS%[OjZ%-Tʲ;"^1.₈E\K"qYĄD\wD+t0/j$|(GdX$#'uߥ\iBǖP7"T0X*v;5߹0MD|Zı!Av,gZcNi:P(f@t$ϧϿxxJK	򮄑12D|(=Pw=2+dp3$nɐ(cWK2F2psGy$e'VeamW>&#!7_H3	
>p
%\W!桄ilqS.7%s	|M	sP#aoKz(޺ZM	bBzp@_i=\jOSoZھ؏?q;=ƣ0ۇ^?c{6`(^e|v1k>W֩߉7`g/b0;@38=T畸yDݭТG)י_}SO~?oȊ0NLs(1XRDi̗|ROКIPKΎ*    PK    A             ?   org/bouncycastle/crypto/generators/DSAParametersGenerator.classW|[e&7Ү>lldl-1pM4#Mjr3V0ߊEZcCoAA|n-6k;G;|s{ ,l '*8ŉJ'qb|L$@q}mfkj/W:ҒX&\!.5T]Iēqc5*xLTLjkRL_8DVz4.`U{NesN*]Ozxɨ~YY	M'AXOcX:7ͩڽ,ye#
Hƥ)%ˏPS 7'mn(ek.jNT ջF#D$zROTzڶ
˃[ių^ܮ=pwBp֬
,EIo*f3@J,/yztO7tF84
{$J,Kޙ07iSR}mI*cd!4Q %GRQH#"jlGZƓᄀrkAƂ%T/,l&=}(f&=Je.8I	61uݾl_a(EE d1-wIo8CIœj0̉g6Sݜx'^0m-cDs:ӓƚ,8Ψ ,JL4w^{Ρ/ud0E}ԣ%kKzLOMqFdqc+ӶTH1uE%0Z\JSdd 	.7RuV굙r1s&ϙ86L]kGs>SA359~l?E}'1Ol)GgƐdx
p"WglZ5Cc-^O0nz={"zّRFٕaCug&mKLlnpicmC<7ؑ+p$JX#a%\ Mz	$lp%tHpM.0}:ƮYR{g'%x|dln9rT߅:ų;n,؛E4	CqD6<V[ZB̦V4gemHrE+^$\6\3ET$0'3
|Nji)yS'}{(DST1h-W0,˰]*vg ȰAV
BP\V*8scíe(gryJAv(،1l
j^}
VglSj|@
2]
AdЎ)
G`>	O2)O3f3WeDtу2bыp+`#dı_pmw1pý1 Ã29/0a2"ed-|y9v^_%r\./2,yzB*F%jLe,XfYeUX%q,gfy)w2bῨUAr6Ż-vZȢJY4yl!?TajCZִpxQ|wCxB
Qh䇻5kg*߯.qʫP̭=(y :̒[QQS[Yr{N$y_jjGNiOϚr>Nj=Zثa5G.Td'EvoB
$kTr:x1cAHTTw	ETIRZL^Txΰa=CH$Q
N"hۙ |Wl94OЊg6?6gxŁ mA#>#5{]08*.orܹSs/o z7*eِ_
Q5T4-؏Ġ=Xdjxjթ:TǘG"v4,$(X%ydJkM8x%*8㧡bj߃ǆ3U9dhhT>UQ%(^	QYR-q.n]Sk<AL$$$tO}GD5zG qIC&؈r-tJOSqARkGzȮ0~ _
YtDaK'VTC3vXE͇Veڢ<\/99v*y*NT.#gTZ9q.0=5U!Uds6[SQ61X)exb"_-IcRi"(X:eh$*<XH̞RT'3sqB\n=$zd/U7э(^ekeL&Z%Q-'yW"e*]pM`
\&	7L9q#pNǶ)o	cU`c.?/2Ka`<MS)Tų(o!G`|]̪2oU2f(GݩMN\؏']RG}RΏ
,&pd)(ʽ}M[MsrknCaåw[ae.JnnA8$sjv?V{Urp}pJD$z鮴swz5Z[䜩ѕU{@j0qUZUugk018rba;Nb+t
Q^|G6*eVϹ PK#6%4  6  PK    A             A   org/bouncycastle/crypto/generators/DSTU4145KeyPairGenerator.classKAƿ)mk[T=dQtmܵqE |f-,˅f|g}}{z*Ak8rFж,$	YjQn8t
	YQ*cE
A.oI#qEnNyV,h&/[.s4_S*ᙲyAObq@ԒuEs`S߰\Ԕ,GAUAMA@AF8u&6<UM;3UNps	EmIgMb#?ӳY3G4hhE?4IaP!
RZ0,eDER&̨1!LJ2JW%ܗ`ED=/K'	XE:Y.aоX*=xF"ZR	QDXF"R{PKBE  *  PK    A             >   org/bouncycastle/crypto/generators/ECCSIKeyPairGenerator.classVk[U~\6nm6^*VåDm@ȥ)Qjes&awOQ	E|Gg	 dy|x9Ι3gs{ S@'y	xp<0z(~90a3^
^!t:GK$MNM''f%ח~;mkk:*W$mbN3Vy(fLWM
FQ8.TVp(Lae5E7nsAې>aVA(R(2ɩ蔷0?/(emUK4,t:٘*kRbgāE#j5*y3-$,X^5-n*ujpmCO%aov鐌I8Q	{EjW,gc̉Hcc@ĸQZVEخ!}r/tnۛ{ʏZlMkRp;YXmu6⁨Œbva6zKZT*	gT]^UvVm"+Qgdtx\9e<!Iq=2zeqtOI>Lo˗
߽̈dt:ә֒#mD͏!o#V{ڽf[%Ƿ_v|ﻭ@}I}+l<_}y+6[dv^qrs>YӤop,Mr(GATfzmohϼ^PbTq@Z81(*bxAVC*@XE'dO#!LxWUŋ*GF)L8p!iaFc]0<wGsQ<H"
<
ংAΰp[GLYE
. <k"CA0b0T0%WCR<JGp	2,0=l54;k֐TņB]?IR"]/GRsya"}"7u|9d
58?!yүXY{wn	LzPhoiM|0Og;%7uҠu_%C2fp v@B6V
|M惱:nE#s1Y2|,/MMcXtύz_PK"zl  
  PK    A             ;   org/bouncycastle/crypto/generators/ECKeyPairGenerator.classV[WUHVQPi,p	BSe2@	3l͗P䢬_'$B&@Yg>{ w(kmp䢀=ۃGC,3Β69&QQd^PM<ҦngSYmi!#i٦'m H&[046V-6ky*T\gwmsjrH뱉bp&ƒ$4Rcv(mn28b$hYTf&qWQ2Wc6%D.+P[3i{fclXS7U%NoLtiR,%T{U9\y-!C 0cJH'Zv)Iن2dek!=rzOw|wxACg榮ٴ2b=nͱHty!||z8	jD^.GH1{\Cl\¥Gœ};
|x>t7s7>u9L#ՙ"n(Y916[v3d$1M%0B>iZ?04c[)= xBDD48'⼈E<#Iĳ",E"^*MDP@M8?4'X?]$BJF`e/,Ź;ç&ty<o=4}Zۼ|UV9!Tw	["01r`=Er,es!܁R ^˶p:\Lk!>KaoG񾅽;}3yERLDϼwW |$9n@Oe"2hGHF9JdbDF
FeTbLF-u!aBYL8
Lɐ1-321+
 s\su,VnVK\".
	Kx.HmM.b\^[\0.V%\Fe	K*T	XD?2黥jV)5FMJp}QDhdNo譖bF_G?'/PO%-l>tcլidןnCw$+6Gx#vɅ{d}O-#">ocjcFZvU??O6wqkJDp%(|H|%Y
TQO3M"q+mhsG~DqleuY0?PK  |  PK    A             @   org/bouncycastle/crypto/generators/Ed25519KeyPairGenerator.classkOAt]x7YT64!e[g$OR2ٶۈܟs9gf~*r`O$6+#[os&v[Cn{HK0pK+സh	ka8Cx:N,bz4dz1km*ܴex3~|)켨rykvKGh&
͇Uadym,w#TpdVCxnђ	bE݈V	:W2(7=HE)N:
an5\`hpYè1
q
0LܮI͒j֡1,.fՁ_!<@dw5ROS:E{CtݶNϲĔv]%{Q8ߣ=5=W1k`sg [5o`wWBבa	H阄踉)<1*Q{~S6yrzqՃV>B}:T+}rSq{	K
<lpM-`\ SM̔SZlbI7!PKH^    PK    A             >   org/bouncycastle/crypto/generators/Ed448KeyPairGenerator.classNAƿeroYh
1TmhҤ.˸:mҷRH>7ٹ朙 yF`dk3N>;ܥR}acwN+hn,wgH(dkj[fricn{-ؖ4iN3~gRE9CiKbXUl cZoqG0J܊%-%raG|ZF^@p?&Nkߌz&}Ѧ*RDa^5j04\pQØq
)
.1LdnIt̪jQ`X.'f2qꨯsԣb>!
1O%&h'x}d)ŵ^k]%SxY>{{k51k`s1` 5o`UBWMb阂鸎Ei1%U,sTv8i$?8HmFSꥨfTX1ݛΐs_VO~OxoxQn$>L=+]W/-vBPKX [    PK    A             @   org/bouncycastle/crypto/generators/ElGamalKeyPairGenerator.class}sFJ(VE!/8&-!`ǍqBY9QYre93V-~N$LxF:iݽ 7l)
Vln*8Sp
)rWtRYdQ3u;hm>rAg3c-> Qئ0ym>ݠEFwO6p)fr(-<>a	o3wkH?apk'ܤG[Fkfdwg:
rfnsE1b@VCUmR)%6lQ-
 #AAAqCZ{M6'fNz-x;D+X4۱bfdpS49
7N~EsÈtvǐh3Gms6*R*Q񮊋**ST|⒊T|`<Ng(=)pʢ{Kʎbjn۶UrnΓ߈sKFx> xD-Fދ=+0#L)`{ML!YdxZZCIڀuܐR_*޵r񏛼'n]*:>W:Ą&uBLcQ8dY+:4БM16Y&m
⎆J!-L*Bljஆ,օNBX0˟8&
>kB$N`&>JF3t;@RMyt6ٿP!U;D?3|<Ž.~x#/:{yD՛"2,y]<d?r,3rg0_Kuq0PK=q  	  PK    A             C   org/bouncycastle/crypto/generators/ElGamalParametersGenerator.classmOPu|D8|*!P_X2@Bb|kIۋTlhC-#bɹs{_Wn	?H?mJ@J(=FH))i]*&+nh@}W~~,Kf*421uu1kG(xLd|d^=	<k#|J;Y"P)YylQQqV)^6`OEo6
Ċ@mOR_rg;&} HTSHjetzͼxY'mq`	.80ᲃq\qpW+	Lfu0azZ,]b#93bezfiȀ[_a.fa -9MoaCee֕yYg]3p3WZ|5g-_8Y~v~/ PK6<D    PK    A             B   org/bouncycastle/crypto/generators/EphemeralKeyPairGenerator.classRKP]-s}Z'0z $zP뺬n2W 
q=87 {dXٲ-JSq`HҪϹ2dMnY!Am8ׂku6|w
o{~[-ṖQ7+~8DUGQO"Ts8Eyu~Nbd'>dI`jaRb`9_{3}@ߗ4(
$dDLc6bd$J
*D#FLx27ʇ} i.aܦ<BgV{BWT{X{	PK^X  F  PK    A             A   org/bouncycastle/crypto/generators/GOST3410KeyPairGenerator.classVVU2-Զ6UQRZ1
pP0'a2ę	,_ǿ֥%k| @'af%>{}`{\⦄Дe[+//p,K	}YVw(_~z7nپ'!l8
GMu{)<E&'U%[MJPI;[2s~M&GWSLK&u-ۦWUi!ܮz6Z5-*8kη45S{~k[.6kII"d,*!9DMVEJnsCĂjԷTvXs|G/FSoq'f#sOkjs5bE?aYc7x9!~Ov٥l2ΑGv.7-:bGZ)OWu1d2Re7^aa*k33& [oKM]f	mL:dD[[+Aky	<ĚYfOW1jB/J>Y_2=xA1/p7uUbzk)pL,_$A<*Bx]tѩBŤ+z0",G@*1*U(@f̪bcsahWp
≀
XW0U`OaEq|(`QG
# &`
.V9lӓucoY/n< x!4hSId>yp
IHɑ?10&

C|Y_4Ds*ZwPmuEBl/4R+3?yOG#!?E
>wa0sX&	`3Y>.#t#0p8JMO*PK s  	  PK    A             D   org/bouncycastle/crypto/generators/GOST3410ParametersGenerator.classW[xծZiWZ	rR# RpQ%)Ȓ*ˀiF/\KHZ%iIZlZ~_Լ}[:sv%YWgϙ9sfvz% 7wnX.غ~.
l볮tpܽyݦnܛ_ סfƍ7pk*ΦOj|hp \.?0B3fhCw4+C#b.<phH Y~dxds<Y<ٓ1%GGPBr*OXS|`	,U0Es2;ٍOGMcf,}Br,	1J] /]3[:[<Lӧybdv/1ǒq3[u:e\VEE3oE`ފrbn @*Fb*15Q41J%
0Stq3AXHaI](N὎Of|K+gE4z"WMfSSD1cv
SbӮf0;8n}wWe ݍ6zl}ңI*|"b:3ZF{\J!:o1{FjO"Xɑb!I]%4U]ʛ+|sN4h$aaU52DdhadX/bFlih4}k
#&*䆍uecs,Vɱݺ!kmaØÊJoh]3Ǵ#h~K_/mG$eCo䷳AG#m@t|2*lC$#
JPTxD7v%$T
$iU_T!GTϨUa|IpTO
͐R	FU E	-`	ϩRS`#&q	S#'=0 셳qYyH&1E$^ u/iH|C#e<C+$'5S	E$ѱY:7?ɘFlhNpP#W=^WUuGkJû$͸W=t^4߆#UkRt
D~A!uo:^ٙKVixLwap4IPKz2E5Y=q7s4$1anӡ^]}OF+\`{܃*33D2fJs"
SP
ĥsp1јWj(7LLc=a'5'~C&~2\p9g¥YYbڏ~1:b~ӣ|=}
'Z4+x(JYVStfUvFLG=.+@#yncrݙn݁hBwkMlrD:f,(k拠L{K3(ҤὌ{kG&%摢	,ziUy<`
1C^	?2|^@| {@,}Ѕ]W ?
h}H>8^\}hS.63GGKGoQ.\oRyZKcϔ&&U3\ryL>3S;'|~@9d9pNX8BNʱj&Ny,NihfVH=hZB4pRɑS^*S
/isʋĘ{uL)d3F[
OR Genls*TTS14今/28rNa8ɚPQeNUn٬
BNmNrYXSh#.T=GSf9sJjbNH*攘JRG?y{ڇ)jXi+OU9lX*|mX¹=:I;KT>J453) b+hiiUKa.5'Z@hѷ+L2{"Yc*FquZHFzD?«A:J܀ZL"XLtfNsfpKCZhEaߗ;Lg*p>ɛ{2
z@LjY'Ѳ9bB-ĕSHK8\+8;nM'YVTÇ@Ce^~.lZ+b>/jpW>>FfYycf|)rC!6vd~C_4<xE@C< ZhEЩ*5vjV糠ǃZq.xDpu`ZR\jŜtގJ<\8h
m|kJ8a'P+~4xD 0X׳6cnWB)Џ>BD"pY}Y9hwa{61:&EF/]xpZannY1(J9y{MdLb49x=469[Rm`'?i:^?_+$q;>%V ~Y+gPKmN
    PK    A             ;   org/bouncycastle/crypto/generators/HKDFBytesGenerator.classUsUIiZBq4i -`KzMnvfO>38Ë}roOas6:3߹sn Ŏ(zSJf}
I6LfLY?`&4"#mz
NM膰mҖ^r\{EaGGFYgE8/mb~)%Q۪9W+28/K蹚'}SUOAW+JғnEw彪bdɹF>@J:8.Ảf8dT]W2̘ZYrwf}
z~>t7mdx/6B~vnv⁽4F"N]ҵj]h.-.{@btp
s+%B&kY 3nZήIz6I£vl.JWhVdK$qqS!*%3[+{NfZx2*x-[ڲkLy[rЀvB`+7v0HA]U0܎ߪƺZ-}s֢+VY5gwξZ5QK*HTV1bXŇ*2*>RqD~LA<9<ɶ)\fM>H{Gs09^%x-78Tjk8}C?ةnA|a a
ѩ("C.1Rb^L;Ʊn
{ñ3Ǥf8f0sYs1`)Q\8b8/b8ɱq\`<SXdpM[1L"%.pWazO9yhZEO|E,I
>A':݁M8FfDj2p֑KBU:<T 	ͧ#t?R_hX{KۀWG1E+<S٘䈻
vxw~caWULYm*!Lv6;mtCuX
X>#&C{Uv"mZDo'
^C5Y1}K|]جXE+(Oiه]dQa?	j/ ݿ((8^Tv4hTŁp+4ɦG#H<QӍwgXI-%.q5?x5YEz?o58q6whPKİŀ    PK    A             ;   org/bouncycastle/crypto/generators/KDF1BytesGenerator.class;o>nF6̼;FtҼ⒜Tʂ|ԼԢĒb}To7ʒbw0#)ZQ303032hx2%3=Z3AY*X8XSRX\`Cv 4v΍`% PKpܣ     PK    A             ;   org/bouncycastle/crypto/generators/KDF2BytesGenerator.class;o>nF6̼;FtҼ⒜Tʂ|ԼԢĒb}To7ʒbw0#)ZڌP303032hx2%3=Z3AY*X8XSRX\`Cv 4v΍`% PKvB     PK    A             A   org/bouncycastle/crypto/generators/KDFCounterBytesGenerator.class}UkSW~\v	Ԩ#[k-0Z-ERA%9	Pb/~_LgLL)O%Nnb=罟9oKKK

6)xJf	Am슢_[{mXXhKU>Iz
+66L핰;YraѳZA/k/kB+EFZ&A9XmqI]4njid_p,3e۳NTE-gL	SB7m[	eoz^֬1-2).uWOGn办dМptWU(RĴ+a6S	2C,0Rzr8IIi	bHYl2]aQ]W)=\"ϋ?VtZخaIkF\cêǰRU[WU#c1rj>S_BRaB8CBPctXN.1AiE"mJ0QC̹5v1-=ֱ'{xO=HXN1s_]o<-ԋԥg9JWix\#HQ֜g;Y	kUfdgh dDe</MF2xAe([K2oshzڇ?3󱃞5QXW[rIÞ%Kċi?V?+;px*?Tޛ$2겠"{FTv=]/㤊]U<bN4he!"&vQUlClT
X7bNxUloG1s.00pÛ!z^(p53>BH C[:C:!LN2CaZy hK_Q}"/>
	Pabi$$zr{UT(Og	]
$wq#1x0;,Jw<S !oyG"yS"Rcst-i,̢Hx,乆q{4FƦgq=uk;N6-~2KtZ]B^mzxOp{TԂ
 9A#ɿlƻQP~^=H-<މ>^sxw<@n۾
0XQuYl3rTܭ
v*p3>F.Qe
DLwGqsrtMo?c?PCH6.86z\*X}K.A"#I*oU<\>?LҽGe o7X@+Z޽5K/$i	kR(
TX?iur}^HȪco_pau|}R(ӕPKN)g  g
  PK    A             Q   org/bouncycastle/crypto/generators/KDFDoublePipelineIterationBytesGenerator.class}UsUm$l!GD+XM[Lnt!]7 o|'p>uؖZ~q9i2;sC ^B>l!,+"/ܒt$[.vHӜȋ]%(dTxH5e	ݎw&Dsj)jRtLDyVTD#g|4
&u^&x4et[XQ-CDXT+SQ|4M
bPuRi
=-ZZJfKf%׊"͂ݭ_T[tP'E&iboS!^jJB<ZF&h˚Av\V'xV3d6+2jxbJfPmM+lʦcǠj&eũ"En^V
ٖg
Z6-9QW$˩EΞ!\96ڨrc:5> 4Ÿ ,.հ21:T)iqf@{*۶&Uv:ZjNSZkXy-!V>NmƲf&Z4EO	ZL.`H֤o1(-Kض»`kxJ	2q	>(3dLSPOҭK/2eȈh&]2^_Ƌ2:d$「t๓e#uy_[鵲RiHZ\sfNk='ܾ2^hAboZgr^l_,(hS
v1c-ج`+/cPdhO6+"`;>SvWЈ
!'YwJ8`7^UIgxaE.1f GqLЅ e2o
3K"@T4`Z Ȭ	2\f`k4a+^L]Ta$?B}CL(:&ё|OeN4;Ru5`ZG96wcӸk×~A74&FDD@E<<xQ?6fC&N*O"A_ciz _܃/$MHq6C
8ibiX%O떑+4^uu4<LUh )1=ϕ*#@찙CIMf+2vԾGbd7B|ޛGx!WbޅLd,:,9,=Nuk F%Þ/!jkeSF~Z"/clvlX;l? nRƯ̈́tHߥ>"bx8[nTT9|)Z0괺Gn-u"Y|sXB =ibWcp<txӍ`C
_n=<|l$G.^**e,f폩`]cPKX  
  PK    A             B   org/bouncycastle/crypto/generators/KDFFeedbackBytesGenerator.class}Ukse~6MHXRVDHJ@
m	@Zb76]dfS"xgSg?Ȍiu@>'?al6Pt9{n{γ}ۯϻrZ7\rdPKdg3s"i)D^Ԯخ4C֮a9Su
JIsPbAM#!(:x*W(a]Re}DNŜF3Kf)oY#]R悜堒m\K\JG1%-ǴzDPS\hv+"!TC1
:a6U7U3X'+qW CT$U:JK&thl+ьKG㙌V2-HySө˜L*cGbқ|Kj޺~I5`Z.Y2)xyT0,U;&`UV=Ġ=ыلjS8KD7}d)̌MG>56GkQ[5qN(Ui(yS=wKbdF!JsSTBIYIzy4/.Z&Sƈ W$^1ѣU9?"֋hCD"^Gċ"DO~/Q[C-}Z
6
R9
k
}]U%t?ijT='	W9KOPYW`Ȩ˂f<%9]X'	%lg1Dg!J C<6+Afxy5Hx%OB;
xU6y{ƃ0po0gxa؋Cн8Љ^t!EwryG`xcEAeaH3zч1/+P2YS<ۋwcJ~PIdT꼇~Z6Ԓ}*xK6WQK|8E
¤lp,(2&;P{ W#{
s84w?O7cY|mC61AⓎppm݄p)xx(c~2.VŰUw;lQ8D8*n|ZS˵:'ӰvI
LKMXCܰSxHMf388~pv6!64\ۧFi7s w8\TX,nSmb@8JWdS}%΀;$G]g_9ljϋ|u54r؏oEdVx4<>p璝,n80uU$k'+ZZ]Mg$K~y0X#OO;=zdv76\1K+ƕjjNRkTӍ)C~޹_-d%jU&ʎ3K'yCPK3"  
  PK    A             ;   org/bouncycastle/crypto/generators/MGF1BytesGenerator.classTMsE}](N1lapòc#)`zZ+vG)DqpFŁTTz֊TP i_ս G	8͠H~̠U#_ۨ*oTkmJ9/-WhۨIPX]^<;B U
D|3ˢ%.!Fxnow)KuD(/-1Cv	C(B4 +EJU0y_Jý숖uC6yM4[n(Cʦi5
JOTA-"8=8-:W%rO;5֑|0haEM$X⢱F13GfgkK};.PPz
贛4H&N7񢉬	9'M2a3+nC&20-gN]ə~LMx1*UqK4W-z},<#`BǡYHB0DqGaZx	#0;)W'q$qo&ǻI9KILcJxCJߤ&ٿ-4T]Ɨ}oz)9С!j*8T=8xdٴ#}.}ϰP,g)FT/Lm:x'WPEfNR;JcxAYLUQ_#Y]e->Wz6V:M'6G!AFa_:5'nWb{XKTwuD\`(}|Sy1crSՔ8Ǫ5cE'(MdT/K,cDy@M"o1cax~>}ϰFzS PK
:L~o  B  PK    A             F   org/bouncycastle/crypto/generators/NaccacheSternKeyPairGenerator.classX	x[Օ%=OeYIPiĶ'QB&N0gYDIu%L).nPPdtuNJ.$9IlS_sy]g? 2+TTqTRAؠbKTPѣb]*vأe*SqAQY9GURŘU*⡀@M]60h>"h$#
5&F\@S M@>)3ɛt&IGѾ^-l)6Ѥ5Lҗf>:HCl.O޳k??F@̦{ͱ=f߿{#?2uDb1ᮤ9b-ɘ)uS=T<?,ȵ0D~lw:{NKGS|6HsTh֤/#fB,q4/n^^<B%D*SifPz2oL0H6LGrt6Fp=&(ZevoQE)A5`IVEYHYϬk}?hDY(͔
ƼZ
RKY:3纏QyPÖXKsnb@}gK&5=J",w 䂗k!r4L4NY"XfT<?x%'-SEM$D3ry웬H~8#8kYӹR4nFd &ͱ@.*t 
GɏH?3.!M$U՛uJ4cfJt6E#|Fc|:xInldĤ=VNmEZ챷ϴǢ3{45f3霹@l3s?,jt@$@,u,Bp6PU6&Mpk_<y\\p1=prsͫgy^*mM-=kGgƴs\XD:(7:TvY@5͛}ef Ï|^2#ue͑QHqCFbD|n"m'?xV Us|Լ։B!$G!ǭbϩࠂ+JAX
QpSa	7(8 `DAJAZAFW|"W"AWbJ25"z7ص-<];[גJvg/Ͳҙ8҅ƔSseAV}IB}!u
d˄LדEdEvԉfoz:u{wW`7Ԁ_7{{y;2KV[F3vJ2_;6鋨̞>Xe{5NE%;_*sqP-XNhp>ީ!wi،1g!j.k
Z[UWCv[C7ޣ᥸O Zаcx
5~|H-VG5\ip=C5y4l.e#F(nt81)O{÷<x>6|Cypq3|_?܉ypy/3|_cwg?x̃ė<x~H}2܃2<E<3=iGE2W Oo[^5m*i!FFصv}Ⱥ\KԒ vcQ<}o7Dݤ=_O-{϶@Ohjs>v'a$nOw
jE-䤨WǤ!x*Tˠ8Uj
ƕ| mFQ(l*ƋOtYSX?%
UA)vܮ2Z[y*u:'RG4(XcԒC
F46F]o
5C3HF9BhdY~jǋ?*xI[_No8mPoԳ0,Kz΢h$ItSś+*L%s)?,Hfsn++LZIY/
KFͼ.3'q<<!Gwڃvށaӡ6P~A[h6(	˹]' JX+mC	Ӟz2k)6uh:j<<NƎn}de̴*ǰs먨+h\!9BqVNy&ĩWߩpdZiU
OTن7[ު*fXqlCeXW3,3&
1TjZ{LGesrW!Y7Q鳬a
O5/u,&1XU,ezI%M$~IgٮI>{ک&$
O
q>RzhXQWKۅ;L=5Vp\!)<
UBH
9Wl~g`"֠q!β}ע[a"m3e%O\xiG|uqq˱D"V|Oypo1q
ZXx7Kpuv~MǦDtk+B;OAm[j#Qs
-!]J>^KX\_zm+~ZGtcZ[sdG2:Iۓ:h<4)jǋ?Cy8gz
dK졄8-俍bx-%snpRfe13vŧ=8 t3.9)*έmB8ۖRzҮ@PjOUCqЭ|bD̓iOQvak{ê.zH-ЭCWk5}W./"׷6B6{^&Ч6a=Bت'l¥e%^OtwhĽDJ<'zGVK<B.(:/uH|SD]?&
J|] k%~K^Y
/]$ ꖂoJoh>)D[Rnb=v)6TDK%DD;GkvJq.)v"M2)FzR)t{OIVR ꗂu@]&ǈ.!)&$ѕRpJ8˥UR|(,j)fHKkx:)@t&zg7QDP郲,*k%ɚG<e_PKW49    PK    A             6   org/bouncycastle/crypto/generators/OpenBSDBCrypt.classV}xSg&&m!t
F.@)|u+Riha8ͯ`0~L@K7XPNtt㟓YϹiڒ>>=z99y&WQ§bF+T4Xbf-**VXb6TXb*nPѡK.a?onXZPe"=eQ8@P*	C3b6,/fT2=[}C$
{;K/
ҝ_HQTb9N"vv]&QGѷ'CUas_NI7o#ɌAK˪I%QWN-RB30byGaʚ5a	j{$KČ
]E,茤GRH4a	Uǿ\;qDǢ6̐fPTífL/zle2|@|rQY৴Lh2%٢֭wjLF&H$IKPc":)݌LhF6M-B;.&iQǹZ<<G-ZKZ:D)0$GC`%#dOd-aņ􎴾pVɅ )HZsJ-jQ=VUn"ײqÊB&&	=Mi'&͠*77EgXTԎhMdS'5gg3k
IXjZb;xGz0cyrREގЀb6+Q9pgP3YX<'LUP!7m2zu"ωk;Շwy0,`2=4&"#2M<1Md0Ud:,	+ݝԉ
&WYF+-WjJKgt nX;3فBsd.N5;k$o۲fh:f
6)ج_{C;ܡ]
)(د`P1i0zf::gڭgtNVHS35o(uކRݥ[\~dJw|-,!j,.xT`$MV[u5#S\¬(^tu<^
yw	//]Q-ǒڳVԵ̚`nD؍w#%n$ԍ̍Xpq4Csc7q;87>7v0p?8q3>F/pcbntnl'؉c=ާx7e4g\wt(uF91f858gq	`s.ֻݟ]tS043]_`u=Å9_f
=W]z\wi,{
-rh2_5,!W##jV]rѾܿ8e|q*ih.OT-1<T,*UTVL7</Hxr 87BqM$´}m_/el߀Zsp94\G}\qU^_U^bϡ9.'),{&T
s>4>eWvv6
%]RdBm^̍07$]6?26;i3T%]AJu>b
ѺpT&<<17ၷ|jKhRz.I}ǴC|]cZ~
-bc(YITZnp'\4Ò͢e6iuaQ˧(Lv8(Q2uLcKA5r؊c#qQ,iS#hS<v;^D^ՊQ:gnS^c!hS^u|*ns+]A\\
I	TC!Hb}n?]z.ggX&/'v{eV]/
	}t8^
`K9{8&|VĎsN'og8e/V/B%O>`М9
WgMj:y3
`n-x=JK%&DhE;琣Sl!@Syb:n8c&1=F'^S72oJ$,RFL1cNV%9z."/h`F*'+'MW$;|kX㨦eiTҲ,=	Q.TщqQ}ަUɗ߫savzóAeC3mgڞL;B>;1[pPə>G'Ά6wy6~ \mNآPj}pU'y|^zpmSd5M(7qulk5/[DJl銸o+eo}ׯ~UlP[U)D7q#[DX.z+v¹b;	+̈́UyV#]b7WNX#	{kFDpND'\*	u"Fx8Hx8D\	aHD0(R!qQ	Wa0W,*qY%lÄbzq0,V׈fµM0zpXCQ;\%N\Rً:qUΧ2f]$]EHɓu5ԕ4"si)F'irsĝO\jZj̋Qe"5}%ZPK

    PK    A             F   org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.classTkOP~1"
^:oezqLtdFc¡;ű-m̿`~6D	?d0cd}λ<󷏛 cAII|6/iMy%bьSu	.]7ZA
BJNYx>(զ*0EU$	y,Jw$~!ܾ]"|z~y,\<w?VWVbp-[ժݰWe_raw7)oj[Ϛj8)Hu,϶u;_9<V}v>m!V>4Z_C=j0a0tt:p~4?3Wo]dەujd(39Ӿts(֑㤎`:baH	EGTEtMG/NInXGHK`q8ጄqI$a<!\8.qWv(NK8+ἄ1:ZަG^+
k,&K#&,пč@:C )hM\7Gږ(* HJm"Rtɩ7xfŵuj#V06bʘ*)z*61"&$5ѦR:(x`6_"\jERJ_|\T?R/]C6S`kߟ_M-Fɗ0Xf}.^ 5 [0zci41U)WHzh*}i$m?5m$`v¾pQx\k? PKG2  
  PK    A             B   org/bouncycastle/crypto/generators/PKCS12ParametersGenerator.classUsemvM7ZZӄJ!`[6-A%VdMSIfA0^?񀣇^uFLԋO=xa<)1yϛ*3(!W
JT3+@w\R,L. K.7_;iw 3N aJ34WGubd+eR,P1
mbiY78e/%)gLp4C&Z316LǴsgvޙ[%d_tas<r<!;-_,$Uwh޸i-,V,gV,1S@&iܱ\%oeMJY,;悀E;ŌQv,3KN1>P;co9tfvxr;X9\HncC[Gs/1z' /St?)Q.PiRaQA(`fRUrS|Fe&]AdqDQ|=;G2kJbTǶAҜiovHqN?xŇɬH}KWf͌ӓܢLQ
UECUg؋WTIEPAf5"°
*tt3(ab^Sф$ϐd`dpY)\UЉ7dxKiL(8˶(81BRc!I}0YFX(;F4
㎑1b&YAw0@e
&NNN?I_:WsרUِhDc:=HtH;Y<+ז^é:+x ׉@B@ o7F}22#c" UlnmUgj4jM3I	)Vg~	:5)k~rHsY/Yt	#?W6d:XFµևnId=d-w&xR$;2T//D@~oZIVK]K2"Sɚbb_&7f@Sə8CE]5f i^VLSV2+R"Ycb9	p@NUUDLI	US26teޒJ,2[R?z$n/-`þ.d\ү\8$-0Kgr]'(R"&ާ%#N'zR#C"e:.AYϳ&xy--rGCoi&[VoDjYΥO$fPj=4~ZC+k4o[Z4GtI$ý-3/PK<h;S   
  PK    A             C   org/bouncycastle/crypto/generators/PKCS5S1ParametersGenerator.classTnW]6L\Jm2q$l&PF/G03кHW*T/D۽'IŒg:{K q7dXi*2\߳'x
{e^YL;_8YXlS!
'i<R-C@PYs5)h:b:p<
dʫs%ߑ\E*Va$pb{C8Lu|z$=P>+=۪{=W+/f
qxvyqɝ)?:j(v[A[ծ~lћ|:q_ŉŹJR}rbّE7]'`ݓXr5w:QRtb:7o&4it
G5p\ÇNhHCNM	1w7n~w>TV~'xGO+4ߝΌ^J{9kUב$:>@J 82cSeA:8	^~2QL2gp1Ә`fepsjgq%1|#T&CX6-\q;J' }SAX_)U+??	<C
Iu
9o9rwR*R:XJiy97ݔ	ӿ_tH5
nSKd*vk?bd70ƍlb


p?.KX%!wDJ];MG$O0MktVj60̊b)ot(<m.۝@zљPKn7  W  PK    A             C   org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.classU]Se~dM6՘!RlD6-,",5$Rq:;mg);xm	!0Qds<99_ÃKXW7\t˕1^I,&Vx	CfG]DtW,m[/|eh6Ka)9`Xd0,󶑝6>9smaģma=c1
RIpn^fы[;U#FD#yC#Gg@v[SZ!y#G֦Q'֍3ZOHml
ĊVN]N[%
:t~O#IGgR99eunz<s%s\F^VUJ48bY>c>Icɴ74PF[W'̜Q4yr^<5Ui>h.JYRd(2^񚌐6xCFDF@̿4aP 9c2A$=*
]϶/搌6'9kYS"8*~n2t{0}W+hRMUp^8Bbͥ%Yѧ +L)h{+h^tcaaaaćN\!YG{Sf|H2`aʓƋY挭_jEm=o"%5/VըN2H"|^#5F7$ x\NTc,?aa_<<.ҁмe k7k߅&IgdA׼skN,UՠpRp|XLjaVx# }swqGqZuwKTqxsPFNPxMʆ#Sπ r{Y&ҍ
V8u'i~wKiyW+>8vA)
+XRe,zX5
CBx~$4ܣTP'?Upsv{?9hZ$U~`8NŒ=욬&C
>;r xg|rd?PKõO>    PK    A             =   org/bouncycastle/crypto/generators/Poly1305KeyGenerator.classR]OA=Cb[PXk
G
%J0fn%>IDęι;s Yd# JPRJj ,/7{gnK9zY>u!rݲ]2e@޲\e\k8\b3'o7^֋kյb@<AD;dZu5	<A*M3hN0emF,[5>h`=A͊3V+Ҩ1}^cu5Aڲ+jjZSk0UuRW!yնe7hivtҩꨝ5]
\^^^KvCa!RWS\[7+KƕT;0anS-+Y"sFV|\ZB		J8B"v_BMHE1IaQcaDqy_o*3sXRݥFC_CK$'p+!y~!yHt0>^+-̴Ca~
r3|H}b>сyB3
]Hď?.uQDEHщ|$
ͿʧPn: Ũxu_Q!oyc=?DHvk PK2    PK    A             C   org/bouncycastle/crypto/generators/RSABlindingFactorGenerator.classU[WUI(bQ\#U+PXh "d8L;gΰOa|jeɵKкOHJjjaϾ}}f u>0$ҙbSb蛳}/޹"QfzWnkuKaܒ|
@rr<\TwɲeH# )ų|/ԡOcO(VYH٩;\N j\rAv?Xh]v,x{'1mm[oY}Zpl^^0|)"4G#ܦʣͭ%N.MC);N1*u8
׬q`7l+>7mѨ,4UmwH
*wxN\da/r1\_W$F!jg+:p3VMWKB)WiۖwGph8aTq
c5]
0IsYz;e8pDjb<0;G37$rK3RȬf'ҙn(_{Gvn)y-.^Ohu$.a.qh8

@zT1qQ\40.8
i\VS%fug8y0J,8BGU%R}XusLQ4	Gh*MMI'p&Ht9#
%H/##dVӻX{={F>Vi'}w7T;$N
#-̴ZmR$yJ;9pEJҙ >˻(\~;Ϟ~AG_p/ԯ}1"B=(qW, PKe    PK    A             <   org/bouncycastle/crypto/generators/RSAKeyPairGenerator.classWw4۲qbhVR86$tc<KFFNm&mӤM7Pi.%@dt#6DoՑ~}wyow B$C|޴	<	3tHE>" x>89:s|4iL>/׋DQgD5qsvи<17k˰LklL@TX-(ڤԦLOŌYN4PR-|KW1odx_yjY[$M~M%@nټ؂;=ΝՍli0[si5
r$de6ohKfQ/lh"4Vsjy0]P1UML9hd(Yu6׼o5PΫZ&U6b%
܆]#ڹ1#.zV
eF!UEi2٘
mief-hj	Z(fbP(eh#F)[q}jĘ::<ukɊU2MO/OYBíZ'UK%GuN/
mRUmpzg9\ߕe
ԓ^z	^%R]N=csfXxuĲ!]\'l]K&(7}Sœ
}|7C3L~	+nJ6{'FO):AϜiz.⼚s&{E1"D_Ġ'D<)"8(S":됀4)y*|dv,>Y2{:nF1;îx
޼[s䑋])ns2|y0Cf`yl}VڠWkjL=ǋ$*T%=Xss;HS#Cw9Oo'2~fM?tPͶv}ݖT*B>+#)ƴfdd_F2etӞ!tw3<2R9md0t2ZE;e1>	8C!Uƣ&#ǡt!(0N pAQXQp.1*3\f^b72÷%U	c(HL	i@%K/2|OI
6W$;N5	+& ae>L/Sj_zK6AU&
3%4N=ESbߣY=zwa|@{xcv_7mp];uN|l%~'^}*x>OcL2G3d0o Dv^H8_Bz?SSaƂ<,
\7S}1Ҫ}*ǲ"+*WTQś*Tŕ.[(rRJ3񻯡ե,U܎7оyЕX<ծȩNEAZ0UڨM*mUJ{<AvTTҢi|;Vp7չUfտ?Idh[1YƍII	0Q	#5j& e.D6jBy	9p]{Ki_~6֨s;lK{Z,Gm }I]wO+
(*:)$Q;EB>nǏ(<0\%T^T^8:޴B:{	89|M#@~YsѳM׽?`p
n-{	~u!4CpQi]3yr-x+y"t%Khy>swr-(
ץ\k.OqCQiRsB84ם@Kt:2#.[>mO^w*PK?|D  )  PK    A             /   org/bouncycastle/crypto/generators/SCrypt.classWsWҮV+Ysl,%Y%8I+NeJ󑵴%Z'q	i(|S :ԓ3i+]m$)kϹ;g=w |  U{e1/##c>==g6^svxQoV_tG|;Yr:?KLώ1D7i>
SKT#b"P4V=[};B?)G{L75t9K?vT?8H=D
e0f[CK8bn9o^wfэC7(GbMQlyu~ѪYR/ZmnE/]<e՞NR8QtS߶-4*5l}':2FšS0
~ZJ],xY0mW/l`jl[yKo=9~xN%^fU+QM1"|T.|8%4anIQʖ{➼՚;]?Uu]:^+Uqڜ<O<sdlVBeqV=~h5xɹVX_*mttj,	paZzח+N9gVciM5
Yk֊`9cVmzY˩.N97W_fbFsS׫3{Vjj\ᥑCƸ)۪54TGM+*m^_p9t3G[s#bTݛVӮSf"10Vw[@BN	%pDQ	$|Fq	%𢄗$%|VI&az*tn$nުLcFr@g[;^ڟ:hr!NhMkw`]n=:*>QtF\)$T<`*^6S1*;US.FA$U<[ßS1S9UyXp^e:brq]4^W
\\Uy\S*.*.l.\|K\\⊂YT|\4|U_B%^'4O]X=i	ˎ`.޸8Aq5DLr_}EoAIWSoЛCe_
r+J\F{PB01PoW&=D*x|Sz&LQ`?M5±h$->4
~gBAtf9ETP&sְ$˚jY
W̀$S#dJ)x;X$!EīFd"?5`DYSY~B+9#J lᝌ&jR?/={LݧmǛAm*44>,n7`@$t*HEL߽dHRV?avXhg=( 9oF0jCb!d,*QAŸ^1xQOƘGLwgX)-|+`YI˰Y)$n0zY/-#Op-z<>3zT-~E7ڣ=ٗzVګKqa}#IF%˘  e[dkMCý4(!c˶Qx/4ŤD-x2zLNgZ0#jLPS3!-Z 
@1*Ʃ	>(BnS.)OE>DC $Η6#<=<Gͧuj~3+ǽtlHA&Ve3,g[^60Bq8B%#/<S
]mL^Ox
~6GL;Fv01lߘ\)?ף>B}"ÏJoJ%g:?_w_Gas+/6F8җY[~@\SyuQ^	o3vKnBW ~-.PKL  
  PK    A             <   org/bouncycastle/crypto/generators/SM2KeyPairGenerator.classQN@=c+߲5Nb
#ąZ[2L?Y`CĨ$̽sϹo/ ֑b@O	"-V>oqOٖd}a'dy6%H^[Fo;]$ M~˳˩%MS{\0鋀K1sA~-z
A!!_3	Rf5).j*"_!XWIsfBGqL0aƐcL1Isd!kY*zg j!.(o" ci<a10$YSr]!Lsgе XTѶUwPK, m  t  PK    A             ?   org/bouncycastle/crypto/generators/X25519KeyPairGenerator.classkOAߡun⍶TV
(Xbb*!
$~\qlw얤IjI(㙥[.aq3;393`1$ҙmUu6*k
\.ÐEi	7ri֔-!RHS63$lZWcUA׾u`Uu7;ܦ!ӓ5\i[~P-3ZREQk4\Z¦=Ⱥ.N-7#Trd(Jܲ%-%r53nF5Ie 8+q7;<XE\YǲeXY
4.kaPÐa
WKa}n7#Q`+]L3=NͫӾ@..x|bv
[tevÇmx'bJv;ޢ%SxY:{#[̶k4Ћ)	HM]>f&$1duqu¬1<1jTv9iۣ1A}FSJed-,|ztkOIIw<!*,[xKN=%Ȏb|%rlBPK0̇`    PK    A             =   org/bouncycastle/crypto/generators/X448KeyPairGenerator.classNAƿi*/"hKe %&b@B2.nݒԨ5 >Ob<m)79;sf? Q C<aZRgsAϯlwF}n+zHK0pK+4l	ɐ쎔Ua8Cy5|XY\|{m2=阻^õUnڲY<߬x ]}.chKElsy(lZ{>wJCt-["\R.עq9k5AW\;UfrI֕6U[!VU
.i0!aLeRXj
):
TtǙtj/snO㢄`[!Vh<Y);3a{<Sw:i6Mqcrgv\#f 7k`
!$:Ƒ1Suq:Rxc
9,]T8fi8S^SQJ_I`P]&%1xGHUX'<lau)
:)N6uJ3[X)'/0QͷBPKX^^    PK
      A                org/bouncycastle/crypto/hpke/PK    A             '   org/bouncycastle/crypto/hpke/AEAD.classVmSW~MròTFKbVPLm6ThfsVݘl~Gg錝	~eyX{s^9'w_|ث@5(sy
QǪq#%\~.Ϣ.B,`&#t=2F舡Qbಂ_Ҿ6Ӌ~YfӶy~.t.Oץ~Uz

:B/ʅΒU|ϖ$꼬Q{$m6_s<U]F@41IGt-b\WV,XXe5p|JgqHd.Ȧ=2ʄWv,vyiV;q	ïU̒mWvY
|s<L}ڪY2vЂrŌ\
v7HzǓu37QYaoɗVAQO:>o7|zwgΞ> vSy׷6WhulnO?JuMX45sդv7Iڃk-{ZmY'؞Fz$1x|L4EYYZ|ɯPG'>02Y!S
2)cr{ċA*#6^=#/)޻Ahk0pg8P33	lsk̦:΢WG
؏}:29	=UG?b:!#Iv qN/3f5&u:F'Fq$)&pLk|&_i̲1<pw4@Cw0%|k&L|Cs6Nwy^3Vɕ(z
w*@I"FLeX2ʙeؙeBY]e>ZǣefV`q9fpy7<^DSPP1by x jvhz1Gfb+xVju| j QًJ;LE '3`=,*
ꓙWWPIzOZvSiIdP
 hXNl5fpe<^Å^kR*T0_œXxHWtEǡT,*&p>JOhxȒ>}߽/z9':>ʎ:PK{eǜ    PK    A             (   org/bouncycastle/crypto/hpke/DHKEM.classWxS-J0&NQXfɮ 0p$>KYAÕd
iҤj)IӐMnӽ^IH$X_O:ws;޳'?$&p݅).LuaK]hp.]!p}`"dx<5kѨ>#U7PD2fQpݧsߺnY8nbpRκKvQI5TnT#
63huBuN)mf2bfDգd:ku+m4lYAh$vLod$-흄fkF͜\[9tJI]}q[UUܤU+Wn݅Ww ^+r(f`ܘL+'38zuЈzc8i13Njrۍ"HF?;IsGB2<͸ҭLm{}{\%bF$H
i
L۩έlOޔf:A`TuPHH3m&)F6Un$#唭7YEػӌҖ+RPM%m8͗RL'dw>3V!0;Q3lD7&<AS7F;M4htvV7y
g(:'-pMJpt'Sct?J'aob <4RWyJ7(H5g&s2-hVU	f8
FY&qc15#o1RhU[6*<v\j<Sϳijjγ/fat"["vCjɄOlƮ	Ykf"4Y3m;\[WG)~uFVqٶ#n9wn
Ű@;6ߴ֑9߮]x7[_,(K%ɶ-:Pb[aEg\X;p-jcطX&fU΋0CJ5w줛t^K$׬ijB`qiMJ1zɯ+B]E:gf1`7x~J/=YU/LHPvzt2{Ui&tӐƀy^j]p]xohhHb$.Lr=0$z%!	SbDXO""q>DL".xDR"%/%xUxh/lMN`IQ;U̝¤XTaIV5u[G^4/3+x;hi):ܡg-ZDPfuRZzv3v	=`Rx^x㜧i7Rk1lVo/2cMn
ٽl35և$b
$6Sh(m9>-_>SLTԸ!7U_?yk6_7.YJA__zEdyዚ2>.b>^a.pr:.t~NM̚dODPZM[	\[*pvHD[y3LK'2wiCk0GKtXԳr`P1c;8ӱU:X::P͵,q5jLnB:0Sٖke:<cb|Bz|RG'k)lOh3\n|AG3ȵ/u\b%c_g
:[:؀ohwu,s~G::v'n܃__
jk`AX܈߱S$	D%L
7r
V,gjkw=	QƢSYl
,^dqB}l MB8YLgQAQ!DBa1,
C#4<G~=<,4n~@8cbǅ!]ÇY|d/
I
G
P
Z%އߓ.nGk"DߤSi0z&j)#pK20Lj&6Jb*}vU%1l4P󼳎3	'迒-\J|*Ǡh=*{xT,[zqkϠhG"oQ1[U{TW[EHNRj>*z?**Ŗc"RFkէB8!\%B,W!C8UlwE8CLǵFej*i#v
y{Gyf{9
0n'ʓTլ<5[@-O۞㺞jmP,=!^y'9Yevp<!4(gr"F#idbI=8ΈqɈK|4#v<>es*h0a0Sðg.1|PFl&?;;Do=eą2A:e
AنtCj1(}ORyY/笏`NAn!7ڐm{mȗeOgIFt2a<SB|7(vSQ\Thnȩիf\4x֚Mp4iφwrxU48kdJOM`JSz78`}1z<kg3X6ǈǗ[<㤵ʈ=
l0ni4<]
2w{*2T2#ai
Q/RFč $f v.5V#St1:N ΧX|Ni,5XO{x;dMS'ٷa6$2wWJgߐxU~:&$nb<c?qL	<0gm.<@D2]]1$¼Cbv,1-3vl[	WQY.(=o8k7`RzhTx*Ha
i}@zy߆"*.*e[1e3'{4WxI0kԻDq0ݜL)#Y
!!/a3q$j,2E8 mׅyח[֌8ZYV|V|:?w3ED$?q%<#6^?ȹvp\
Wwn:בsIyo8ͻdr]稥Sy$ҚQy >zP똸B#VG9&d(gNTrEq[ioRZ)pPӱqy
h^OGtTR:*9Jn!NTg7ITLQK2fM8i#k^ޠ1u3^w.eac@76hw0wM-qk)M\,
.o}!kD_)LF05bsVl*C+QPK9
  $  PK    A             '   org/bouncycastle/crypto/hpke/HKDF.classUaSU=K6l i4cRX%%H(H(֗ud6qCtGgMz gjf=s}__ 
DW=ADbҮ*ǊbаUֳp	gbyu]eڦ{SAԙ]Q@Vef57ZQ9wn(qVv	-熷S
RY`%nQs&s5\/yP

ڄPfmzh#/-6wh=`p	ΘoEk|5L,JkTRc2+èIlmm$
fM;#n2fVuBZ,mpQ(TsdewˬZ<Yvvn-RhEHB#YNgF_~c|uTiEov4s3ewg\nWor`˻$ wC5]r_8۽ʛ
v]Ǵ
jTkR˚Fή`i֛Ge!&۪⊊wT\UqMŻ*b*RP1`8Ibs䉝_rY_igKh>TLfH-#Ode%w>ыtC8v!:tAqx_kt$1Ӂq䄹-̬5
%fT1 ̲0E"4|
(sG$>0OC93n*tt]:vJGBtMH0BG#G*T~>. G9@Ibdm/|Cd;(/v"g1WOq/xCS}"d{m4M* M?JY~q=AvMP?a51| 2!
E{xg
Q䛘n)L4d!Qk&= ?)2{EJ{x<Nb="=|Iinh$~IL8Kyq4ИL/S3@bR{b$"!t^O I}a:z|ԁDNPK@%  	  PK    A             '   org/bouncycastle/crypto/hpke/HPKE.classX	xJLNHq8vHر &B	6:Ji)-m)%#JZZl-7>J^;7̛{ <8R`{p҆ŝ&M* 5,. 7afxڷӟ5fr\԰!wMy<l36؄MOi޶lChI2̾ !/S]:}Kj;4qx"F	vXdl5gꆞ"aim׺iDF:F^l&Mz

&5#*P3)-B!Nǌ>J0Kѱ%w
gĮXdvHdM^PBf'[ZMxyz&$4M9i$vDTJ;h^C	t|Mעd;=mpϙk6,k^9ܺB`YtmZ߽lV*s k-=6k)=taVS{c$ySFqRwhx'T89UhlG'Ͷ0HyOgZ&0h U0MR>=fGGPNYE8U[PiKxktEI;;Hiؑ'6.)}MާR}`DOZ&ΐ1M\.e&ڞ:	S88WL.kX>`zhCsheD9Zu٪񚶵tڦЗ#z4YuGs[cqQ}-%:E)kMdPDKgzDS[zh`@Ϥb5dZs.%EtjaIɝzS[r>Lu
)\M+cd
ʬIZ#=7fcrB"I-
0S@<=SMm6Dɇ%~0Y1hru؛<Gt:kB u>i=҉u#5)T3T惙ft o@M6IGک7;	ÞҖD{/dDc,hfJѧ`%U5~2e,AFdDe2v/#&;ee0d$daziv5RT,$T۰~L/s&SμQ>h0[W
U /[Ik1NyG=dBU;4y4ȥ`7NN^]XSWO5kԳ948ûgb+i9vQb6Qn8G1gPGng=hf03F1ѝtN`4S7gXGS7ýo?#g6~]U6+hÛDAC9Yq[	P0
֢R2T3YRlU
sDp4jˠ
ޅ[4
Nħ[,m

][?w(x3qSBܥw3y7ܣW;
pyVp(ė\{ Ã1<e0|k_gxԋW>\a|ˇk]>\o2'~i3a+O1ۇ#1<_p33a-~?2݇}~nOls@9K:Z<KCO;5r.
Zr){) pP!N"\Ft~=rKV,#\Kl
q"wwC
>AD٫
;hu	'O_ߍPN{li-6f̖v9^QE{)$=?0Wb/07ux>P?0
ĵx{F0^[~xU~1{O˯b1ܢ .{}@ٙ32g3qԲmd`{q&ۋj		IK/7{7,TBj$΋NVu݌򃸪d}V湒ld1a61iyΨʕWP%klZ$GORL+}<0OTר("rxjg9 P5>5"DPўF&=WۢzUY>YB2eBeLe<̈(	*y[U)*ϳdSb~A\}t_USBu{쬄pvV<V$v[RB%Nss"
9qW[p-2*"KFı9p[5sr"Y|yGeqee]A_PmA~#F&\{Dxo<0J(0%U܇Uzk)Կ'_iK~2>S*m$7ʸI\Q
#D^Q&:w7H_>"7\A~}3"L5鿛9%|"؈([C9܋+_WG!>7MQ5.Shy`^~>D*
t+O1PXl|
)(ݪ(5Ys	U"|7*h-RT&hqZ\4N
]m5
'u|ѡ$7n4d'MfnӬ[u3KP["[cfݤhy^o=9:-V̷sa. ]kuؑ1O>czح,e=4ݭm'*ڦlZ&UPK^  R  PK    A             .   org/bouncycastle/crypto/hpke/HPKEContext.classmoPe&lp:0|d.#FUiЍM4L|CmAHs} ؍!%`*? 嚕zY#׬6pZ}8X]6)=$zu9	tQ62c4!I!sb~0{ZWڇ18.S87e᝻3kU0
CI˒:	j{1
]|<Uۧӻt=fzꦄ9	I	%,	Xk\YZFT&ߓ;=n'>wnRRƌ4
 @BDAy.w0͇Q>$ xu.e,#'#K'2!ϥE:&~{Rez"rIO 5!)oVC[OՔ8W=YLsV%O؜
+#i7U"*#<7AV::S
'ҙq//U_\L
ܿxW&P,-R	CPK]if!2  t  PK    A             ?   org/bouncycastle/crypto/hpke/HPKEContextWithEncapsulation.classRJ@=Wښ>Q}I
b2!)ڿR(. ?JI9w8af>>c!*US6CBn96gHp[z	ӱ|s\\0\jB8n[w>ҵpNu^ulr2_raZjuQAL/	sd		r4UhI*Sdg/}2\Mqgݪxy2$dD=HzƂ8eDR)xX1uzcpi;E% Dp}Қ-EMA3OQM<W} PKK5_    PK    A             &   org/bouncycastle/crypto/hpke/KEM.classN@APޯ;pӅn1$$nX
m@oąCc,v19Ӟ~|~)CP3zYXB2*ٯ߰>ǒurŔ4kq24V>oR.Cn>>\,ry'^T)^P'#J3G
j$Cjrg<udJ3]{b3Fy%xb;ene<H¬	O%BĻQ޿bgY*,xՖ$o9饕Z]ay{ok=@kqq/>GF'	ezNiEjFӌcf:aj&þv4t+PKDfm  2  PK
      A                org/bouncycastle/crypto/io/PK    A             2   org/bouncycastle/crypto/io/CipherIOException.classuN0Ӧ-m
m
TbckB,lE,+5qH $B\%o#1438	/rJppy(u8<{LJڤL*Y&<\X#Hoph0^d\>ĄG.*1p8֢~CwhP-ލ-W6Y!p@D2>Rjj[RDl!5$]a_=W%_Z 'xTPK|g,    PK    A             2   org/bouncycastle/crypto/io/CipherInputStream.classV_S䐓
j%h	t38,n
nCr#!ɒnlڮvm݅ڂ-UN]MԮ|>|}}s_N
ōnq&7nv# AZF6	@SXKa>`B@Xl^e6cB\Px!V^ٮ-fܴZ%jO)cfڌG䐑ĉ(JD8J[)C#/߻gcwbmo\~+O%ePz4KDl\z2iģ<z*FQ^T
dIk+h1hB-[lS#7G1cĈ[n"IدßIQ򧌴a(X"MhsAt&eI=bZ<hƘoX17(Օi+6-3'iכꖑ/0̌85(3a,#H;]_8wI["Z٘?ؒ'lS1tʘ(G<d4m:{R##zjDWX*o2PL2HY/׈~T\rp<q6`"ue GF#zڊ-hJRa*N4'Cұԥ®XRP{AU''SP7 _M&CJIDtw$eZLSMF
@Q)[
c'A| s髒s4Dqw*ب`w)x(ج.
:ܭa;OA"o`3y=D
AKEG-%&n
@S/nx}?9_8]u
2"p6m("|=F;X{PYO[Gd4	+(.}k-DNXVP64X;2܎*nŐTэC*nFU1Uİ(WU;BETQbx?CU*EfPa%okTD-k*ކH)>H3d0za(`8'>)O3|a^c^7؋/2|+_ex^ay_`x	NyA<}x!q^[^9c_bx÷]/,<o >pr8Y2<0p}5 }ǭz,C{>ݖީ'{Sm#9PP$v?uXSwJm!(5ϷڔzM6>NV&[`vAx`s4eR2Z2QA&N<3Қ_qx_Ɓ	n
E(+(ث>1M+tsaHI/zzђϾFƒEOB/j8suNyx5,~;cqZLj>,~FQ1N3WI<nysB/=OVjy?4q)[NNJx=hu	){3A{(j|v질 <9jb`Ɯg@}*ޯ/zOjR`dqi3_E'Y/sBZQF{D<cvE&>:P)&{	iUZm5v><Z'#,weD7s^'FY8C<~ ~q8dMQ"m󈳅ֆ1bV	c
1R0:=#z,^~Ls\r8+TFxZ]Z~Lj`[ccR=_?6~%de`,qjD%1Ή5:ڳ=}u/N`k#724'(jrrl?WeEb)rHɥReVVWUմf{d͍*h$L3Uxi~OzOk<Cg汜<~ ;fxT6oRLL)vUW.uH(H7~
U\ssLrm&RI8M˵ C9[Kżpd寢[=K,9Ή43-ѧ)UFe[UsO:T%?PKxj  _  PK    A             3   org/bouncycastle/crypto/io/CipherOutputStream.classVMOW=1WbLIJ8!bS;4|Я`x8	U]tUE7U%HmEwT?;3إ8g}wy!ahE;:(M$R)(荦ټd["X}f8eћ%[2
Uپ+۞X
J^ZqC5zspP
!EUrɼݚv5Pk缼J%i*E-ʆ:fd-_.mh^W͙Y,s״EY^T+	MOLkyS5)Zr<zUtGJa=Q%1in'Vr!UJf^Md'jN9[7>56kȮ8wz55)5_RbbjnM˦ hYTbKtZR)0TllR'f"D\-Gě"zE\qU["j(>qlHh(k/YגG"DYͫxAsʉ7Qy37g`QB+B"ocDBnJ.	pKC	o+N:À~%H0ڄwqC	$$ b$AL1L3| R23aM3H7AGfx)>IХ?yML%Q|ĸBc@_.6b򂸍}ƭ7^nnӨnVɱ}|*{~Ĝ=k.j.kH)xH?c~6OxKDg]`eͲ%T۳脴	~ZNN'yse8>xǅXwh]W#N:ͺ;v1K#ę@[;nt"=h_`h!
w@.:]ٕ0@h
uںGI:aGimA^Khk
(DαF붷h_dlvm}L_QoN,tgrlrݾR?]d~r+5
*iU]2?cG~ߣJؤ[
	|VOlIWwBIP2  PKpb\y  	  PK    A             2   org/bouncycastle/crypto/io/DigestInputStream.classRMO@u6qJIik'HBEE,8q8mj[ɦ*?J=?B}9P˛ٷo{u
)vi1MUQ/ :/!!Cs
R0Ȗ	=XQx{s:q4ˮpI,#gm龁`4sˏ) n{R0tL0{cRcX{8XcxcB2xa`Sh(fs(`!gRcslEm&}^|wjdQ߄>bx%А"7xX/`(dt	5R3,ax5
(2ɦQ*1Z^3Z&rkVL~7&cXmc&N0?PKS    PK    A             3   org/bouncycastle/crypto/io/DigestOutputStream.classJQ팎IL`s]х`@"&dG9ޢ7)(b"z*Z{k{_{
6lA5ʍLɒ)b4jd4)FbD^=!v~PM|c~0$+i4n!5
Dw Eϱ/^<siŅc6{îp >f-[I
S
fX5c':bס"c8"Ri1G
	!#Ò9z>dIѿMJ%u:WQT |~aHf!`#;+!R0/Z/RM|u)aM0%XDJ^Eh7+VV}7>PK32bx  y  PK    A             =   org/bouncycastle/crypto/io/InvalidCipherTextIOException.class}N=O@}W -HE,!M.\K(ġ,'~~?? \0Vk&WjVܖ#:8t?nJvpznlud8M!)
JM#OyʰcV_lύLϊ!iz[a9``7uNu0Ҙ$OPK;t   /  PK    A             /   org/bouncycastle/crypto/io/MacInputStream.classRMO@}ko @Th,z q82
?gBECp7VZ
pvfޛ
`	Mq}*c/Gq$(fcE-j˰iWnN(Fk'A(fN:{nҍ@vT&^6}e
8A-!Co(0
2X}P[aO8}ꂦU	"M7Cy cT.ޢT0M7B8bܔ"8mE~5y8*:A',6טk|9	h3*EBҸ@
?n^34(QMɌgʨY]'n3[j,pXc<&z#)lqPKjc9հ    PK    A             0   org/bouncycastle/crypto/io/MacOutputStream.class}QN@=CR|<| E74.0`XU-
J`_'h~NA%M=s9wn  K5[rԮRjjMxAfґ=1I=?7LuF2
vZִvo˛|d}ڡ/)g/w`NLc{n&C]3p-e+rŅRK644Ӱ
YCTC*u$dl8Ly1oML&DpNqr3_:{)}
yQϯT#_IgؕK"0E-X;.*^_PK+Gr  d  PK    A             2   org/bouncycastle/crypto/io/SignerInputStream.classRMO@u61I
P7	|	U	UT Td\8g
l+J-MUշSA˛og־u6vu`wtu h@3Bv~(-*o3	"U0"qx$;2)}6%}$
@8~rșl!pq(yRёQQa0S2?QZ^M˾_3]a#`@S]Fu@<*JX-`5UE,bYzQO0|!lGz^|dQ߄ju,*T-:!CXlIk_ѥ"=%+h\bms7ﯰi,hQ́DN7͏2se	ʨ][3n()vW0_9,Չf88~PK0d    PK    A             3   org/bouncycastle/crypto/io/SignerOutputStream.classN@^AxƝ	6jim2UyDCOK11Q$gwL||86Ch
$;^$qN9.'#|:CʺLٽ{.Ciq놡c]{j[qv0g.2I
Ya.1оi
udCӡ#)64Qb
Q|O=X3(!'Qؠ])Z~V9)1Ϩf0I՘JN"E|ޘ.R<@H1PKioH  E  PK
      A                org/bouncycastle/crypto/kems/PK    A             4   org/bouncycastle/crypto/kems/ECIESKEMExtractor.classVVVk@7M؀Hk 	.	
@Yq:<|*YojzLL^>ҽg{>G_'^,L8+&#ƚuӠnu	JʩcVK\j&95)%1^ uPZ7UK)#A?;\ke[w*#-M[r2KS4\	tBRKgpw#w͡P6<wr9ݬ9'LQ;eY
ӸdKeCut|FkH<*	4WjJjpжC5󑩅%Qܡ,F|tx l+ ],^l8zѠM.~R|d*ZESK#]):V$4Wtv*{d_iׅL#.weIa%\%#*K.KV?vt+s*L*r9{їyutbb[#&Up(BPV$}/\Eo~v׈pѹMmW0fbhe8p"C!fbfa0p2o }:@}]|ߑպ{
G̓nC
3Ͷ` '7}ʁ{<oG.%m/]o8w/G*Wi'R%QإeL&#a"nݷMڱGI|
Up
|8@"אPp#
<
N8pKA"0FCRxKI)høPp
bJ9AZD*f#y}xWF?2ހ&c y0e\GV
|(@  '&>e}K2saZҎ-Ou8Ck&ҁkIגtU6lkcx{иck(:Pu	ypW-'
-Ȧv#{]EgC"V{{#Rwq?xG:?@ScpSbxS$iZOZ7E')dK Hi)
WUݟ WXX>1q>^>WFTuT(Qu|fAx2|n޽:
!~|%*Am#3uKO_
PKmۄ  Q  PK    A             4   org/bouncycastle/crypto/kems/ECIESKEMGenerator.classW	wZ<ĉ@dىR٥e(8HNKƣgyFF&-ݠ'K!5,;^WzJ) VG;w{wy3z?^p3.	`o~T/r?8?:*xwyJuC2\](QkQ˞\X/_\0
olxѰytcx,qg%ȱlrd|zJD<S1	fƺF.ccZaRD$mk%ʗ$l[0bEpJ-}Q+Wpl9	5'AmNQg,,7
N+f\sD3ў涱Opr]4LSBg-̔N.vܸ|hҒޝ⢑F- NhY$N#.c2zqf4[rۅ
" =habMg4s<<VQ^8uDlN.ڂIpYY
x].PMz~5eT"u@xlxudJfA΄bN/Z1yXKy
G]󙢝
d.|[Y1D)P31QTMdinVup}Yi6RprMZky1L*hERw#
c;L}g&|BeS
gUJI<"mYJYQiF6V[ŢcV6ZGn32
-vbl^&q͹NyqŰIBti=eȸq]]7&"uXxD{߮M4xM)["^deg102g8p(`x!a1<a002DbdhtQ͏}`b+)6UyI78QwR2CwWYjx{Gv||^]gGik[J۞Fz wKwǋ­uo-&t(ހ{iL[}qRxy<Y'
e#4}QѹܠP[;RD
δ!M6݊ۤ(x?P`lat+cQA<
WO{W^0q#@EXePp)؍eA
!	KA
vqVp((	GA@IR>n|3\;IO	O
xZq|U	<#c?1oxߔqߓq
?I[~ 4,#	
#y!re| ~*p"c,$~NQKgI-RZSz(^		0
Ղ"BGͽҹJOX!]%z_h
	ݽgCx1/<<G(?QU>CʌaWv:\	[1	oމaNbe$	m*"&8\/WcyW$=D":7p<#@jr=meZ:^_:.~Fka9⿂K/
^X_"]@TP}e|*hD}㱤Gm'ݫ*{Hz(DDV\9PevxʸT;tCF"8$E=vxYZ$gԄ"ã)$j
1p՜>E9n':z#]m]ǟ#>Yǟ60T}׮omM1TG_zqZG*	TTFlǨ)cQ*h7v2sO]}' w/R_PKf6    PK    A             8   org/bouncycastle/crypto/kems/ECIESKeyEncapsulation.classViSG}bcqW"$l
2C,IV3}_UW'*g%@`KU٪홝gf z>lɇm\<+Z1N4jwa&D		jLheQ3$l;gX8A#h$6249U;΍Ybk0	w΋90҆ҖMY-*ٖ&%kkE%l2X"7KhSL	ټ5#k%4-$#r.Wv& m"KwKe("Y]i
,YiM5e8ena
{ZBi",yaY+rCg尛VƦnN{(_=dQq&]3񄐌mdh,d4A5t6^93OR_`ICd2pB2(34Y
<̊Ȥ+Z8W!Z,#Mt Kh-nFNɇJ[%2) C
#U a'PN
b`O%`8|X>V.1-x_dųqe쑱W>-「2B28,㈌2zd9qރ}͑Zv$R?䨾r?RqX>q+;s5r)+<uS

ӳI kx8ro#\FR!¾+HmkuE$\`(*8f:99),;'FZ޴MT|1CSϹ-l
ֽ
O*D1*㼊0BGE*Bb'|*FWцb;.܎+*ZLI!^W7q
zDpMM)!t!	'QpI~0fU0o)
a*8`ôa2RBAL/)+?Yt7,Mr4n2z^u"=G]'f)|rl2\%-}hE	p7=;n
qKۿB<Zwp^j:l/VOيHnGݿbeDd'INB;6x~FNL4Kx@!po	uqo_E
|V mq	zBhP(G 	#]vn08AwCMzo{{%ǟz<k	6+}wpnB#a_ޯ$RArbpv͈y|zX֣.SOu]vh!z&r!|$;-y|+۔jXaMUml-_PKZ~  
  PK    A             2   org/bouncycastle/crypto/kems/RSAKEMExtractor.classUmWE~Iɲ(RچX|,B5H(be3,lv_7A=9PQ_;{w
`_'1[x1ĭ0$2eyMdHn/avmA])7be_b[[k=a:+5nv[tWaf3m+Φ <0_]4v1/HŁ%'neq:1eO!>3
1\K/:g):-r*ܗQe7)!e*[5DɻTZ^}0u\kmp|(j<طM^צ7eFQl
URD;~z͗2{,lpkt
@ؼ?kV[kU(Ƌ?4oƙVP=O7ۡ4
;o;v]/Hs7BV0W
^W;
*0UvHŅ##hh_lךx'pf.чٌhҋ̱Qv(OK='eRu뜁K~/J[ƠjH
71MjӐD\u\w5=
$}
/
bNB
x$,JX}T<$HTEEDJ*ƚi%Jx{
zk0e4v;S@jDr!yE2!#}>[	I.f;1x+lCg'Q9T}ez/Oyg	~_^+L3P2/Ar,N'Os؜''x**cR#I`#9|!囡Ch PK{Ê    PK    A             2   org/bouncycastle/crypto/kems/RSAKEMGenerator.classVmWW~VlZ#ڢ}1@m		$
lv]4}Ѿ_X[K](ˁgܙg?%š(RzCyoxKXbUb':eW%DF;%73^	pR~yvl5%nE	G5grjٶ8bU-0.I8Bc8tn{z%7mqfXCt45f7:p,i]8'yҵ4I8<o\Jfv3=(>)qc$YVI9^lsur
ۢJ2Gܥt֨-Ө-M
&hдk%Yz[di[,+JoEޓSfuCpH',&*1I\R+3&lVznU]$Gb55thvq%$NZcnz[WvUL.u%B͖I-kd<51Y#2RS-NdEڇtδi@j6d/_룎W%D3+⢌'eqZoxK2ޑ񮌄!Ig%+#Nnn8nf~ZR/&(to۬
>"RCA$;o
-d%- Cz]J1y!جo-|sAa]n/1ݤooj
0.Q{vdo;a`dA}g_ZMT*T\Ua|B'*^ǘ^!*SY@VkWq\aLH#&Uᚊ8>Uqy(8ia6(1\\$3eǂ= ]@MM
`
2`D(>
>qUz50jzcZkiU4y 	#LtBpCOEŗp
zdr
vr`F2frx?zha3"|poN_ph+}`+>]z53dB~'aA&COd"^NoԌG]F@Bzx{qy
QH/D[TT!ys)/H%~ԟL8Ϟa7G~Q:";[P|PKvl  
  PK    A             6   org/bouncycastle/crypto/kems/RSAKeyEncapsulation.classVk[G~@6,KThQ{]-6F{qBg7~o?kU}yl?&"4O̙sμ3Ͽ< 0Cx*!GB ]5			BPJyiy	Trr!3L<7u
 g7&ge+%״-	'قi<nĬtb 4+J9+]Hɚ3fFnXaڤm9.Mu$t	3	rkJfp)g43qL2S.P@3*sBA#D TSZ`hBBEf[ke4]eEvi巪*+	喅dDLy-k-b[`Q[4K+\/2q<k5iM͗yvhڞ̝7E.XYek^5ݕmC~F V1\qyl/^SlY/.1l7XD&gKzghoq?H#n|ֵ%<D'x^ƀ2NxQK2^1(㔌24gd3^;y9Q	gS00żCHl]IђY_s&pdfiH6Qm̧,'pdhJ©UoM\ѽP9.\3F$yvߍvPL$V\"ܴ?MWMڍXck$JsxtQTܬѥ*}FT)**8*^%]P*O.TEP-ǐR4VfUeSq!*X+xWxX"#5C*qt]kXQ&
ƐSpqCU`
bYA*{B
&wa'KęQ~Py5ӮnE=[`8NA!a	R諭MpAoitjĪpb{(Џi2?cS1719{sCp>zgtEWª
x I@{"62^GGaxUCZ12#S"'v3D導Ddjנ	駉=v?w`86n"o$T& m fN0}:TauWlJ53BX +UQ}}76}	z9҄sp@>k N4PKt    PK    A             4   org/bouncycastle/crypto/kems/SAKKEKEMExtractor.classWit&<x80%RD4@e'^mXz'4hĴ.l7 -tO+"}۞ޙq[8'>w}} p
@p[]Vq 
bCoz#g7J(DĈm1mV3պ}D5$}ۇxUdHrH$y\v
F:'=Ӷ,}ZBp°D.mOJO|#aKéz.M?Qx6)fRFΦ%( $ږ"a	RŌm3k=iG|Q(JK2Kאvw*e-i%Όy3u	pQB1p!Z%E6R܈z\>r[IwDghYz'2FbDl~^azLxS{+F!Kqa/uːY$ɈT	Hh+H'γ&F!妄UC'@,L+K
w-]mZȄY%T$mF*n\MsC%}"[Ļ8Dro9au<3E	iA5Vyy:H_ow&mZ=.c5˘l5D&ٗYm\0.2)F&\J粥组l<}I#E7x8PD
\(fS;56ݯU\su_]}HБ)=S)ɃW#Y26ʸZ52d\/7xW#WH\S:PZY@&JFNɨ%<0	6?(QR~}TZ8[z~7U\~TZ^GXmVPΡdkE_bZ:7[xmV:G\p~*>Zѡݶ.AȹVUR!y*S@+4WŐ/*JR{(`vUJίθ<|p╨SBBE#U[1ERK THghbXU*
jT>G

!ȫiW`Rŕm^CE>ȨY0UyauTl`21\հUlbpCaUl2s *.m*nTob3f0mw2p7=
v}
v
.w3|~2|Efxk
v
)x-~> >Ic
^2|F|Xx'C3|_bx
t
&QBҽ^]8oP'2hKA4s;E3w#yƑMT=Iȫ<;5OAM{ۏ%h_8˟q,:2_˟h{Z<N]³%iOݏgPb{y3p	d7irzIK	accꤥ'Se|/{Gh\*_MO2~]Ֆ6/TTMf A0sA޶D봺SfD	iAGCXx|Z㨪cxB먢)tY:cQ<'hr;QԜPeɈ˸Ug`΃
.U$%&^埁'1:VC5QegQ_{Կf\ol?hAݛQڽոgjOnĿ5gU#ǬA꩔TS&ʪ@L>]?h٨|;n7i8t4;kA2>.ޣm	^2frr!fu}ZBџsv3tЙ
	Z'O4yͷ&nQ;\y;!h/^QǪGx]pq)[wc={ngә<Nz^Mm^^X|PK|  <  PK    A             5   org/bouncycastle/crypto/kems/SAKKEKEMSGenerator.classVwU,SڦDjZZE.4U"mLӁd&L&@q}p_B<??ϱ;I@sl/IS nXk{<ZlA K?YIfK,$R,Kf[)P/޻y؃6ytڃFpQ3NLZeSu{@32)HfЛ5K#a
ۃ沶Y5f.ge4I}fa"9Xz>K*khfQ^$_(fI)Z"v=h3򨾏laLMeN2>s*<T8lyJh9̻AoT[JAT`(n5%%><CKQ&g)ړ{s&eTG8N'ݚU `L#BiԬSr͢J;ST6eu#mڨFao*Ӥָyrhwo`^RSC*9[ܸVݞ<n\:7׼j]4Si6wvE4Gs\tg3E户r^N.Dܬ/m=w6r~;D]¤>A9Aq
Ė=fetM$9de.{:ilsL3޽%ak$\+]B5pN	k% a.	iʲԾ)>UyyiSГͶ,<Vڔhۅg6z>y'}qsDkr୉T֋up)oG̵Nֹ3mVUEK|VUnw;>B_..ryiUQ%t'ߨLQu~U}(h2nĈXư52nWX˸QH2nEB2qa%*nfʸwGƕ*j7^&#pCz[ъdAxH2hF*Z};¤fv2dr{gxI/)al®0
6n=fx0a\0c43a
cS֢&C~A5jj~:ըo}T=#gF?$baf?n;WVá_-2~:xv"D~	?S+G]A/Js6l;CE\kG0D@NNJZb~u$0V
V"ĊtivGIbHh! KFibWh4>yY,%|Ofo'y5:ɯ.-w!Fb&O9љ3G_4L%^SsjD(h7.XR»R[·X:8MۢH0+dZ8>9~D$ICBRęGBSoUR6S/׀w乫ܱI'ۼmN8Y[Mg	tf%oW0?Ƕv
_% ɕsW;vb&'LN"'xW"@;}Wf'$aS]#l8F*4PKqA    PK    A             >   org/bouncycastle/crypto/kems/SecretWithEncapsulationImpl.classS]OA=ȇRQݢ_
-`BPt:ifwjO$F}G6"{=sϯ LaF[ڲ-SDvQm;NVh!=&e7EEC7w5b_w"=a$X)e*uzkMmUUvJI{iqV.A&"ٝ	Fw;f̫k+-I&>خT#8PC:}7@xfs]4[Jodlڬ!kvqEYTxPA.};#k
;wQŮ/*[۫FΕF5C
F(/DS5:tq]

y
W7YUs&R61*&LH041@0%tX)
d0e&&
គ
6p<yٯgg~9E/d׬
';
n=U".&FZ`:cccbbƚ<CAҸh8Ac}<[4nrHgkJOٶ#,|@_lW.D˄Ih(Br~*+Nes'?fdOijd=R'lc}>PK  e  PK
      A                org/bouncycastle/crypto/macs/PK    A             ,   org/bouncycastle/crypto/macs/Blake3Mac.classTn@=CK.('ibeihRRx&Ե eX&c;("Vg{wf ~	h	t1bڍlA
rarQbh?Ű`qptO<[\_Kz{|Q3#n[妑F(뾫7#ȘzN'4$ZNm׳)
Ő ӸMhx֪?m=_K*
(ddUh˄#nܩqMKѶEc^(㒨됖&QHMӴYNPp9֝R|[%oUFwH@+jؚV55jP+"/5a\1ܸWxP$(ϋF͢
W
lRY[*ئ`]?°HOdi s*|h[*SjbBt1Uh؅}Rhנb6C(
دa=h蕰[pD jXcIp\U9FT#8+ᢊa0*ᔄH(H8".0qwtû}^Z|A
СJVC_U&YLdQ\1YN"HϬ`2
 7\Iz76yvz0a'fc=!Sk(P-2]䔟]b*ra7ھGA&
5N;叴[OD¯&ƌ޸Ip}'%S:%%u0;i6zd7CRF.::Ws-PK8J    PK    A             1   org/bouncycastle/crypto/macs/BlockCipherMac.classT]SU~Nv
RCmP"eٴďJ[PhB%C{ò9m7ͦ#^'a:Í2#Eo8N='3<y?= 7PK"Π#U3FY\QM8U^ML8N1V,o8,YOy*xaw˽FvёJ|N;,놎Bkp!LI 햿NtV)ªpl_Toq<eH7x86Z5YMΠS'!Ey.TQ4ÕSZ^Tu]*ٝ&/mN#CcnB7ĦeSA̓QZiu<{ݶڡKv,5=5/ԊRQ!ɾv*UR\9ZmdͩDǯ[!5!!a@ÛCsghk12wdFax
gFŃ23
٨^?ۥݷz*!R{xG>	!FGtd^q:.( UE욀FumN+=7/`,ALn0R-`*LUp[|HC}"3M_g]-ɼ׬Si	3#(~8bi7iirC|*֟*<,w1G_Qr--ŁCwͥ7}|>ƬI6fW6fS_$L#E*;N(;)GbᇈӏRQyUS)}[RD̾H-New{NI_9!(|`FŽ8Ḋ2-(ߐT"=$6Fcrx)Ϙ3[K3g9BO8?屸Nԧrd>>P,%Hy}䗏]O
xK[I&\68qEE;f)6@K覇
tY5c\5pKP-PKJ  o  PK    A             4   org/bouncycastle/crypto/macs/CBCBlockCipherMac.classTSU.dCX*PҪ$@$lmi+%,%lv6*>Ngg|HQ>:?ዯNϽ@2s=|Z _|8#U)*_MeWFZyN15kȍmj,Xvōw7]NcFX)uM`F;вbi<
V*jm%{حW6.ɹ
n{p_t`i&CGp|)Yh0(J%"եtjz ojYd49+Er/~[(Y4~#ŭkbQӉPV2>XeWt:
|rT-]+ԝ--%NO#Tkd:%.4Ppܮ\O`M])F,P~(4@i!Yx^Fddgib8g upq/xS|8t9mvٺS+ZONdll!	e8Xэ&T伯7W)+DhWE
0|
Z!)
^DPA7^WĸgpVA|+F0$u.aoG*adBKsq%Q\%..aog,Mgh_t5VVu@ݏ! Zxo
	M-
Mm	M	6׊S$oЩE.5{nM8:1iaj"r4yQDHG?`he&,6wUe`ΞU};/@8>mR1"Ce2Mh^-G$xPû'Q}5rUdOW^%Y<Y
oDxBnH5w˄\سte/79@hf3.%^47
`!	B"aڅhX>wk(rsva{ìQYH+|q8WIY?_$KiHB$(7,'^ݳ`77Lv{CϻHH>al{i~-PK42s  	  PK    A             4   org/bouncycastle/crypto/macs/CFBBlockCipherMac.classTSU]6Ɇ` aZV>ZEh"E,f	i7t>LNgx֩?)sw#`s=wsnoz
}a4($z.HL
&bʋ)6ʷFż;&Н6gqǊ3<-rՍV1nt
:ґO+VP5ֶ/V?/P<!19e44KMbV]$gyaC|Ѱr;nJN(K@#ӄ]2oS^fSZ(\GqHF1mwrՂUt/eZe7_*R}-t7+U $zZKEs4*mLgRN/(T
,Tzr@c 3:PR9HAJ+;%ӪTbQBrp-*TxKE\E.ga#W:ל>0.ċVđyahפ+Gk9t]˩}G^bo+3/+ppBCk8mu("hxi8	UC5D{ϱЂ44<o/ԣ,FXcqť$^LD,#84XL+
Hb)\']8Q^0l}K듚*
C\zvq4ɦp1nsb Zy	zGG	 ]'c^!w	$'q-.'H,/6'XJbeW u:`ocF|θY]F̵t!Њ~I!T-h>B?|ϔ&#ZMܨF}ޤxS~ AfgF}o 3>
9eˋ?%Ҷma -"w^OP0١P,zdOh>_`:<kVGct{Py#C[{GQ`YAl<"PN<ǌ,ܫ¸>1~Eu}ʂ*۲jXUzܐ6Iry㔳؅<IGvΓQFu[{fFėKG3ԉoPK%Fz  d	  PK    A             '   org/bouncycastle/crypto/macs/CMac.classUmsW~VڕdeHnH*&ndɉ:8ILm"vN ^Kkyծ*+-i0@?d20t/!0`R9	9{_8{@`R"p ;` o#D?)/ܿdg%˜&6YInv̐SV^S,Ө)%\2R4GȨ![Q4EUL:Yڊ{M@=U
s2JE)jfgV(VY^ -bհAM+/	_4gM뚩LVnN&C|FdNAPGhfRI3\Vk9TئӴD8<JN/heN:! S	4(Xeݞ)S L(EBҔrXV;uU2qUSӆjYà}B|N+ٺEixꪖ#G{6Lv_Ս<G<ZZ"1,kZeQѝvڵYU3GVfS+sZɶ2nF۱wvtf%q8rԟyK_:ڝ?Ʃb%}V|-쪭57KWrR'V
	QP
Ufi{P&=`[M9
̩Ϊ1?~/1?>Gn|78!`wc𿫀̑V+{	[VܪmS˞:|eoϭ֟>6$7_'cjD57#)cOmY<D˖цZ!ʠ0>e<&-8YhN=8v8Ђs20ke|d$0*ㅋ2&%13L0\fy/0|1>5L2ěb3h3E3WP"{,r;0I)`Qe(iGmj!4ҷwBpMp_sdڕ+)ՎT:wqd3kwiH+d*ߢOj`fw> x%$N.KP#4?Bxo&g#dƗqŷזps	o2?Zz<u
n/;0&}~~-]D'Yz8ǀ ʍJ&;w.Jr9))omZ'hKƺX-bQ߼;C7k@  	AA's<sC|7n=vV}+]u+"޸uwLk6Lk5Lة3{~,Y^aӸI:{4ޢ[wh;p҃d$$~
=gk ˠd|q>=RwHÄJDbXl'q5Γ	%<"jm 'J(_+vOC#ί5$SKHuRuo!-R2ٹ,Ls%|O<E9G?`ww9؍JBz:1֦D'}׋iBc~bn^Z#V6&ǉ9!N4:]_guCtZ[|h[GOdH+m"xD|@MDDgoEf&5N9ΏpV v/Zr2?V#d|8a	߼DrGvKxm>rDҵOH]a%aao{?Vm*jPQ1cxfnn:y!QmN{F؜O}PKY%  0
  PK    A             -   org/bouncycastle/crypto/macs/CMacWithIV.class̽n0	$iʇDW&eakա@b*qj1xNH <bt`ʾ2HzK[DdE.!ʸj<8Z~+L.yHm{eKnFZiJCRȥGz3>|jhSE>G4/jDޣƽ#ZW P;PK[f   ~  PK    A             .   org/bouncycastle/crypto/macs/DSTU7564Mac.classVsUmaihFPI@O%дE
	H
6ٲ
$"G_y	c/:_nJws9q~l8E?G[xC@pȴؐnLW|ёё4i+Å̤ioI;|$pucJs3g/)}iE(1ͦUՉa2pY(@ W[2fƆfkssd,kZlFk;>J[m^*uZ'uS1H%Ԩ%%Yy,QC[:ӦɆɖht<@"oȓ#:6MumTut,k6T[u%i(f)1vlFQ0ݢ#´Uf"1b+l,kjKƹziBe^e*-[v)9kbT$Yf%'ɮ"^nxۻ*&s2|wyapY7/gIj`
ضƺt#y^)^RQhvBzikUvj:0 m	%D%HI#a}ޑ__MFEG_wuOtz+e:~	ͼf+9_t͖72藱[ec@a^ezpB
2vAGC(c6(M.^L㬌m8׍q> b 9 ]Nq8.qG.q){2a*SLvQ1jXUR3PU*yeаItQ*!
Vҏ*欩2:rؓT`:C#I5[Bϗ0btGӃ,HRs"3NO8XOGcD_/=Fu\Fw	>z*:}Z
9nq	Ǆ?ҞH^fH
$}!CHSvfKl;:l,
\PPry9G6T#x:؄Ŏe/,cЄIJH hjprF(Y'^d͛:Npw/M
SPgg47}N8n"2kFw9`5W8-|)0⤁>?Y#yc׾SJ$m]?g<7èHIx9^?OQHn[mO
[j*Dl|?*}/zkbETq@t|PKlL  	  PK    A             .   org/bouncycastle/crypto/macs/DSTU7624Mac.classT]se~6_J
	mPiJ4iEI6鶛ݘT:8.qPn2_?AT<MNsΞ|:3"ap0xK?y<'@2`2'h(9ͶkIdfŜw\;$(\~vnv ç\QK$ș˪u4GkgZ9Xڳ|sY
6jd[
4ըbB	+Hd,Z]+%p겖PVUXݬ7UgUV.j&Tt{3jT,Ԧ(ODN}RG'10cnZvE΢4nh	U袺fլfrdYUFYLgNI;eJ8MiQmFOGc-h5si\3JsO[jh5RڎeJVݱ2㪣NVm
ӿNMN8L{!&$w2r:"gg.kۦtt#3ʛgKokXǲՠ&+Ul[-`C50ԬiwnXq)i'dddS2N8#
	''_c$MܴNC7$&K&&w1Fl?}1^Ucb~8 paW*d+xG(8z>5L*Õ.L`a*fnD0#xj90Y[2+0|qaދ1LLQMj4MٸrtKKWz^-U8Aq%d(wik|8OUyG?=C(5h|baf Tj
Fʿ-54V	+(bSQ5op\'Q/S\3BQ|Dҿ} @zN*1W|')ְ00 _	N"7#%D+E<;)TGmtyǣNqﰇ+װ̝TgٟdtP܅~֫upSƣKǄsEQTbH<x}tgi`~?;q6$c'._$ IwsyU𳰆O9QfB
f{	t{3ٶ6ZVŎzk0.E)mmۉSX7i'2Gў[]pI4tB/W-pwD".=Z(
"}Dt7eKW3z|x,J@&z-+
}4,3!^p(r`4b!I	#]'EoPKATe  
  PK    A             '   org/bouncycastle/crypto/macs/GMac.classU]WWB&L&PVALiXk&b~
0:I'SFA_|k)}9BZa{}9\? \F%0"≂VMwVe^՟^)eau	y?#w4G
W8S DV	Lݨ"훆*͚!~utX-i9Dpp̦aU~ %#퉖15)hf֩4r%!Қ1a~$t<qkfT۩;g;̶ݰ]SdtYsLδz4W+
ts`=L܎.vW9KD0+SϬxIV RTAI^_^=].uc>hK9.lv)tivP
46;Am42Nq2&eL8-㌌i328GUѤE	#DߓDa/."M괈9|:ÒIwi9Z,ly\vrECUqPTqa*>@H d"bS#$5}"C! [
)̶K;
2mXf(EF!KXbɰCa<u7z8qIkۦ]qi!u ˴"Fpr/q9}v]Q,OFO,k,fwJk\L>7yy7-}}$6c=z0 ߅VNcvsm	-|#a_$]<O4FU#49g>#_ʘߞGh a>N (SS-h.GIh|ʆ%mI>]P=민#tw!HEvo<!OenŷPK@  &  PK    A             /   org/bouncycastle/crypto/macs/GOST28147Mac.classVkpI>Y>gc~dy;%01teINBu
IJJi4iڦvڙCg[ev4/_! l6(l(XWg#6z'$ɯkىkcº>??f;"@q]A{k݅Fm{sP&`U_1ͥZDգFɌi>\#;ܸqӖNg!mT@15
w,iKO5WF|]Qlf B 'ȣbqj2:J$'f!B=B#xZOѸƌ}ѸCh*t-)@YDk)U׎'R#xC눦"TTRG5E15@VdTI\YݎfCE	")u-6vmqOb*eEJRL zLGո >i-Lu͞ QԆ4iKk5Ɍjq}xHKYR@bh(݃gƻl^SXԶL4RO)&Һ6r
&qGHuTa0eim&z=R%.K@KECL*H	5zRa,SŴyFv.oۆ=ڐsI-G5̵~1s,[q\4ltq_QS{q@_l2z4P&+`Mii
W7b&ƦA<bWUTKQ&	6IYf	HC쒠EW$-AmKG{wL?`I]}3F(v=/ڋ/{qmOe56k|Q3dиvɷP9W	ݳ/.X**dXIdDAʰ2 $x6]P(VeX2D0(&'@Xh2!j BaV@T'Ǒ88	1"DDDD^#"0\C 2vkDccm;
ߴC|׎cD@"7IDeS0npDD^/DFj\QcXPB#j24$F*	CG(
yЉs;G<OW<4^
^]YibXQD=?t[[w\w¥^Q)Z``؂60ث[HԦؑkW*%HeEFZ$")VBpJ)ە`l=+lXŘ0V0J
p5$eUduZ]Ǟ=Ia^rfY|n&fr6} in!
5ZIF0팰2>6O8?$Ctrl][7#&rG(Ar{8{	Oriv2 $;b9f(>C#cQҊs	O2cX%M:eb28{w@ѽ\ߐ3
4\3׫nq2F#n6sxq4,n<T\7>-g@;{Tl7aqJIQzg<bWb/A(l!tApFq瞁g׋;?-oY|`H; h?,wNz>.|,""qs
FQ
pݨwj~>OA7N &)2Ƅ$Xq¬܇`,Wfy~`ܠ֝lidZ:	zjsR
b@	t{eyW=filyҧ+jYqjv甒Mxa!!B!Ul9
NE6rxSQL#>TMqyx,7sIRm
R8q\f>.ev*ĵĎk:b$Q`fînˑlsHnGa_?7/7;lҤHȯ8Da}2Fkv	NbK%_?yمc[L-_}>uz4Ҹ]A`	mQW]ރLA-?{}6ʜ5p#󎱍xܽe 	1}wʏ0.;!!!ƌS
fa
{ #V#ʳ9UX9,dU͊u8-S!
T;,'o:`aIy'IARUf
teE+@QU.duyt'8j9l1\'2kerWE߂K7/jIaODȓm]|k0ldvZN]%nn@W/3_{y|?ci^!5"O$_Áh:,M'-gDDPKUPT	  
  PK    A             '   org/bouncycastle/crypto/macs/HMac.classUsUmvVB[-PLBh}!V[
dMnL6HQ|eqςsv7/ɹ{9X)	5j%,p	K$,p%,pF	^	w
px,iC'[%Y1]`ؿ1%@ZEN"t[`f2m-\e4gN	v7m+iˉC䱥eUZ[fkkӾD]<	2MPg*QqUӌH(c!=>&l8vZ XI1ipY@tJ;
QM!vGDI7ɎXDOD;QsPlwP}J;H	*!;EH3KIjѯMجR4Wbd[-bjDu$"QU3zԸ59 P̈́jvɺEәƒ:Jq7*Cqhz6Ez"SZh,$%OrY!@JB@ʢŅfGP1BPF~K?kǝyN;wɂ:2raHFMInЭRS.MHk!$jjT<lP%#=zAw6>UDN]"Elq""6]D9N@ChnHY	R	4j1[&wg垂tE#j"S_BiaR/h.
Ҥ͵c>ʺgx pD.,}|Wb=|2,Pe4a5,nf 2XE0OF+D20"c52Y,NfeMq&xP/dBr$e4qRPC,c,aEυ{[-7\؆]ξxś.ZX0r!pg$,f,˰!WXJ/J%
%T XL{Å4n؛O	7u*9G9#jXNe%K&y@w;qRSx;Lz}?cY3t[^Փ 
`O|x(EQEwj[Van|gp|
@606xw^4>,֝[^:CF9nq	O6	;R^ub
yU1˚棘~	0`xεsHǰ	1/UMYGۜUNEUN~pMqVmg1O6˘8<qv#3/Cqe2̻LiP7(B5pϑ'k*eG4(-tr2Wge2
WĆF .)4<	+탰5o*HeGuzx6':إK5W?Yֆ
^7J.`Cߨ8*g&Or26ӈs-kS79vq귵=~JV+!Ld,E/Ge>G[r9}kUgYb%Yy+*S7We,PK	`  
  PK    A             1   org/bouncycastle/crypto/macs/ISO9797Alg3Mac.classV]Sg~dCX1ZJ(0U+
SJ
"UY%DML~tz8pӋ:S@JWiBwt7Be=\6/pXoyNob++A0Jٲ	3aKӭoBftiu+AfLZaƭ$RomimLIwʘ&so	k8Kj>K3%5VЩɤ$
_zwDB	Wc3-z6OEә)mlr%?F4$+IfͨH;kA'Rz*Oa4uGEѣZѳ29	P{YI/ٙO52V"m٫FZYFJ+&-(Z4fXzҌNEiKES+}ud¶A#\FC!΅
R+P0̍E^ѡbL~rVђ2@.Dp!!*mC4S<9jf<fe<us̈́Wf}*-MG\NA5rs2-CE=*STѨI~!8
M1	@(kz¾uW0V6_W߿ڰ9x6RdМ>?lG
	˿S7pv7bQ237s}as<g~
;%Th	'5Y@P;Qa/8ihа5⌆ βox9C,f1<qpэHVb,&]FtQ7z1bEm2tc>^ 6`+=3%
*Δ\(a:FhbKhbHh"IO|	]/t))_Ъ
E O 'sMHsxH5>Ya#]`\6&Á9LV{\زە9X?F`G  h 3HUA6ā_bJh*$h&Z$j'lDZ^]i-NR%p,ޥzTr}N(4I#^5⃣JEz+Ç%3rwid8ڙH+꽍]Q;ܔ>g2JkUpU?[EϿ8K(CN^
Ժi y:(k#p>␧I3`[&qˁ!&yeUɐDfμHG%}kIL#Ѭƚ5^}jq·ulPhCB;b^h[W<XdXERAhk(ftH!?YIS%n$ĳJd]"=D3˃"gzO~
Ws@1<<bRq!fqcRaGn0D)nn(.ۤ>z[=w#ɨWG/U-I^{~"S`RKQ%?tPKz\^  
  PK    A             (   org/bouncycastle/crypto/macs/KGMac.classU]WWIAR!XF&j#&0N&._Z5Y-kUsfF
þ|ݓ'؍"*?1Hbn;KOl?ʼƭ|f67LV$H}7θǆ]'ӫXj.0kUϲsӴuKB"Uq\mPJ
Ot#{QhF`C'tgk5Mp.ەtβDE2n'lo!jTR=ňwwvvA':Rlôzh/H5kz%ǭwm4
Y"m͚:_b鞾)WJg;g?-x-'UNQgQR143R=INY0k5_=YϬu_e.
<KH}tO\z&mz4K#
 ͱzNp4ZAƄeqNƔ2ޑ1-cFe\.y6-KKmw<8j,`0RIDO%ޜ͉\I<<`w{âœrQ3M˹mK#𧾬bC*NᚊЯBAD,(TA#U\FTEH0(X8y9OadbX@aUAy<dR[Mr*`	
6}\z@ӳg<뵢c	\!Q9T$i]
aNO\I9IEGQxcͧft4S]3A&!c/,K-K|x=
>jc#YkދgW0NK|/aRŔhGW/	-<Z(&y*c0QiȘ`X8ܣlᛠWyh>9'uchk	&A>ڇVJ~r1]t[a~.AAAAԂPK*\  G  PK    A             '   org/bouncycastle/crypto/macs/KMAC.classV_We3Ch}d2%FP	H*2aYwgےjm>,Ujڔ]ZpS?s.T{y{O>(8}χ>p\+/!Q	оLy
%.Ff&9[	ʞeG(IO	Ocf[dF7tYwgz$lc4L+{Z*$ԉlV3HRrLHhӽFJWa3aX9[}&)KTē̘&aK4G>LΜ8iIu9e>j
KgV@q4SrB孊8֬L:M

$D*YU(a+{Ԑ%FWB5Q7a	OOd2ZZt҅iͰzJjYK7Ii%yF`U-i
Y9HKqgRZnLҦrNqIa`F"8][q~'5F*xA:<՟&Ht|,ə2Z<Zfjvsж6		vSS]gzC4uQ:*O4.XzZfj2Ԧɪ9uA4}vBŻQQkok&  Q{Ӿ]1CЬJiywNOOVϼ>_;me3yS-)2e|^Q8&2qBƗd|YFn=2N񈌯8%;iV}IJl"(񹽖g],iF=zvRU3/\flws{_
*밫ڂҙ!Xl9#SA;fMaN+89h
b(8Ȱ^}q
0OOw("Ѡ`7vaPB}Ь`/>AlSńAЙb(C0t [Q|!ǐg
O0<~0\Q؏]ď~%ҏ`xY0=~S_5<m?axy^f7P]3$)BL>9ɩ~5;̷9J.c_V>7_h)zX'ѽ~^#m"-O-pg2,`gSSU{/6&U':KL_[kL0zmp~D׫ku	+,6Cy#
Yy,RS(pSDw)k/fyIKd)JDNIx::2C"tLZB`OOhE)ynQOe/	:+>xCE,/Rn 5:04.;a7;+ZGK$?zNr/ݵ#%Y*waв뷜h^8ۈVq8Xhr4<1[m8NqJJs׸fW	omEqH*Z߰p9H27n"E#/W!lu\8z,"=M>{+{;o	>Ո۾!dӣK!ڽY'"w];ݫ!9`Oi'9'J%!J}faSwCMy4-47fI*aKa~}iϑKTm&?[IXlꨧ3#-7.^/_G[yҵxcB!jp}U_)X?tZ)91\vxw*oTG4uKYe_?w(ZćB21 ?3sչ8--b|eXИ2E#Ti]$KnU O
M=iw^Fb	7ErYL;}kqnHFGAe@Ua%,ٳG{M Y 컍m
PK|o  "  PK    A             4   org/bouncycastle/crypto/macs/MacCFBBlockCipher.classTSU]͆`@Vc%@jV"6%Ig|:vF_,M2S;;s .DgqAIK%l(vLӏ	u2E ]GH0*#qӮ:[ͻgjnej.Y,G Rvna{&FB[Er0EvˆCT).L`Xlmkr]lgɒQ'ӥ7JNmݹOM1R5\n2w,"6U)3b)'kkT]k[YV6wLꖬT\;)˚hǺfƼUλ3qj1X;aVblPT9yVL}cVQqEk7[**^TqZŐagTUqNyO)gCH츖{4>fIn#JPkBCcso-qo'Ӷ1Ҡ[C/Có!
/1 "C5
5
@ֽщI\ex-iFq-iwBbx'	I̅u.$10pmzy9zӄ<$BG߼`TVl0.V\NHIՓTA*E㽸j<
KX')cp+-LCGP^$K:	=|c~tN#~Vk{֫~r 9D2y0PR1{EZ?Yz5ORłC`
aOb9,=}ؿ$+3
?D7Qo&}}l<Voh'|1 YkJD!=(l(D֩ϿZBv/}Li޹m?wP!H\ѣdC3wN{	Q}	8PK{z
    PK    A             *   org/bouncycastle/crypto/macs/OldHMac.classTnU]cglgҺ447$[
6M58M)	B{k<F2R_x I1T|O(\b4kg}&>+ ;n5``kLM9(f'ʯ%)tڨZ+J"WHf?N2魵u[lꍲO3MS2re	JN땍{ՆVTtkV1̪)8Acdgu'%dou֩6**nZ[m4֖Fkj֨
EN\EˤDZJ ;-Kf%oNIkY5=V2;Mˈ
EVFEZ+)EkjVoh[3`Soeon5K,328+cVƜy/˸"㪌+c\̝dH7M|8R!5wdqٷ:rA\(
fpV"y\
|,1LUx\kIP
9 w|2nƊ>e#{~:V:n3aXcH0$%2hYZjmzKtt1&V$5T<dLc
ҽpA%{glcK-m#d?$IɥSBgC	
(
"u (x~\C
쏈<||;d@:Yu$gy>O|mӳ	׏~>~H^`ŎV
sxoOF$}Ho/d{c`6A,i4i',e?~03v7etc̓>`A̗qagt͝sL]8dts`Rxvn8"<$7xgMfGO'srQ)zbgm;t&݃fu:iG~PK5  4  PK    A             +   org/bouncycastle/crypto/macs/Poly1305.classV_?˰+;*IpD@DдA
Fݑ]Yv()MBkW&6U&*o0aaߏ"?Ӗsg]Eڔ=|9y޿oV;%<
Ͽ"/&awA"TaQ0|#87k&L:"Or T5⪦F(l0Zy1օkW,3wsnn=زx{kT̘ɜ8Xo&t4i9%[q>Lctö'fѷjOebkdǦOX*A820%p騞gz:fF>TJODТ6N9f37_=xDZ7q#'b	-΁ܫ{I?R̻=NTCt(8mZزrH30ԍ4N0`+f%ّlf\ߗĴԞZ.Z|ћI;Sf,NU˜M<<96͌rzؼj7XS͙X<B;<6~\J-GVӑ%p?3*46lLu=L"<Q6Rfmv}|j֪'zhޚ+Vv%u{JZ8]T+1E4Y	w.}bR/Ș8:RBK)#i;:NĠ1(n'04dK-6W:i<<`b.f2L*c퓝@K!k\vS]|D<&|L O
_V8 Ap;9(z>"^R@k
;v垗yS 5Iz Şe_ܝRFM{	Z|0A;ASG	&$"P	>A	L	6,AJpAx%BIQIaP$yr	j!#'	*Y	9	S<
	#8O/|3>K9|_"2WJ57#7wo\vC
IrI7	E2+p
C7mKnH_q:?$1>-=*-D-AݽT)ƺkRZO\
8V8Hj(uP=-qxLe-;l-i[vڲ˖{ll[eK7r-2h&&%;QS_e:nSpSe*?WTn
޼NEŝ:Hƕs{|WxN4Rvg
ELR
a b8,lIxl
vw.p6߶T^lOPxOwrc'W84^k\(DY%pe[%1Ytd3 K$]juv
nr!Μ:PQ)9e	2**AK"#3"z9lO8	1:3Ԛ,5GijL߁Ae#!A,8o~=~pT]+D>3E7"v$Kd?8KKG?A-KS{\f-z/89o{Kg948H] avxYXegz<p_/yPtLûVgSZcG\(vE/K|#L|d³9u@9?9|CdD7\^mHsl.Q@uZYU(/Zfwt0UA4bx./_=S~=nkӚmP3K.\Gʠ{H0#oU(cÊ
eK12+yٳd'Uϓ~5ft[~7f(FǦr9=߬ݦj7yysy";x2<|#/x>/uTlO''oJ\T^d^D^0먩TU
/R3)xBFbqŪRlqcJR̸U)qT)aWjqWY&(H_TbIS`;ӫYE'1s
*b{Q^'݁[&;J"얭< K?-ĲnZ3K@<nZ:K4KĖ8n 뛶M^mJؽ|Pfc'@ ΂h'{F;vlvaghi	
>AtD&,6+<[ϞbaĨʆBic*	E{$^;3熱$Ye!Ae  W=kd0wmx:e}!n*"!C]ţH(;tW#eE&[JDV~KOF +=UOp#oQ;'n;Pw9[Gp* PK.	    PK    A             *   org/bouncycastle/crypto/macs/SipHash.classUsud!6Az#\Z)P)/$KMiPn8Ë-83Bk3s}۟1dlQ,dwDKۉfg
NtR
ؽ6ь5/Du\r 1y~@)Kyr(šRlk	XI-*'J(8Gc=A:ne	HJJSf9y`hEJ^wy*8tJ'q>xa-;ZBV
qQE'RŢ׊VR
tV/;mMШ9e9d梞[MU0B1ǌMaX,8NQ?b
qLF$aNYeZDf5U-;fhi;+FjY/(k=oI	emϮJS(&F$lYݶEt['Ɍ ;f1J9Gvk9fa+2v#>b~9ҌYy-o%l2UG%</avIxAB^LŃ±V^Vzx[x,n-1if! B+~/"Bʰ!9&ԇa!4#B6ЉM!İ98#!lśH4[g20p<;2Q8 R5`04CAb N-8hh=KO_z;Z)N 86GERd\}dғ}T=yOޢ'>Ҁv9Xo&PT9y
+|p^늼vs|Ty|Gq4jzy\KB7d"9UdgI÷G]?`xx<>:({.]js(qEvK<skBBh0,>vyh!o뜦H&ձ*j˭&UozS?G,)Qk.g*zzhQO}bǵ^?eXX`X\yV.kXnޕ͊݅_ն?G-.
Ԫ''%5"Ur[s׍n\wY	C~
EZ 	=]ΐ}۸LLfNF($+"g&I_!*jm'oTfl])@tHWw>?ӽZ)7.7YԄWIw<}Ub{UU	
qWҦJmh/Wgz@K&YILK2$e_o0l3H "k@DTfRȊ3	$%#~ؼ28)ܔd`6H;e""	03r &~x}[?PK>  
  PK    A             -   org/bouncycastle/crypto/macs/SipHash128.classiSP)j)ZW6AWi&DCI.
8SQptF6:{w 'AVop	:}>Xi5}FO%[I۵i %)Nwt,}t(pIfrH^7`Ezk6jg}Ies$gL$
Hh?Ύ{,8ҵ
cZ)*98*]gvf CwWּ웁ԟ8ka[)w˶A1#V.͘7dHb}æk韦74BT@بTUYe;QiܧMga8B̫^@fh*yp`H^ǣ^Cy9|ӰIf
[4lӰ]
YuwlW[Do)2XB#Cg2rX^>F#x
;
x,VԧJ!8nI)iY9F7v1Ì$:p1I_ccq!I~ |@_W]WkrBQO
5P+pUr"QKJo-	Jh\L"_"&3_x^FQ%M_Db1&Z{tLfjpcS'N8T'#+:Fk5ZJ9>
ƪ#eqIk)kx`<_ݻHOi0ΘXa_)<Juhҩmk˥S-ףZy)ۨ|z)xGjPK5Ǿt%    PK    A             +   org/bouncycastle/crypto/macs/SkeinMac.classTmSU~l6ۖ4(5Dj*h&%n`_~3eƗOs%!3y=>uϽo ]j}AbPBwt"M	v4K=lv:$7
'uʰ6	tZi{UQ\[˕aikK-&Aɭ,gLI5~~fV#GT5]+v)vŬ88)RVVh5,ݤ#aKH/	w,َ쭓	*Ҧ]('$I̘?YvEPڬ&A&iFͭIKз	SJ	&kKN',wqAT\ö(6i#+
iʹa\p$Dm5pPЫ)ډQνQNTHBi([M4:j'^	j+E	S`7/il㭶	jloAnvtJQwE7@Wb@%e\1.㪌k2ˈʘ1)#Fz&%N0"<m&Ei-h4߯юI8!
wӝ/+M&;y;G"nvC:k;Vnx=*bW
Q*.b
a#xOb`IҼ{_yUq|G
nScMB6>gJ-023cö$6"`2q^֝	d"?v۪nfdtхT%(#9W/}=o
\VC^k|ŦI8&ϐL?5!EOzzb`}FF]Euōuc_$C,lՑxdҔ}G2}Oa9rO"Lb)FH6PCm@_@8u|
a@7+8RZ)<!#7[~<?d͎ԸfrAg~4/g5fgQ3F<mJاS gĔEnO:O^)MQ6u&PK0    PK    A             *   org/bouncycastle/crypto/macs/VMPCMac.classUSSW%/ĠV!iE--TAZ!Jmq
3]uюLgqQg:K;ܼ δfν޽|ܓߟ
xPN<M1Ʀx^=16<g#IY]>4<z#}ݽTO>gX
yKKeڬ1MB4Zfem'yiIt7UilQgS=MM
՝Nf͔53O'
H_Iyiҧ'Skw@qhW+,m0=mtɚD9pMGz&FROwH9+{4hQ'	kjp>os1Y32F4alnLҚط~36.pp3뜞G92(Eh-x-8_pN\h<yw!7E~5gS$\q(C+1UP񖊃*xGE&!ƦLڪ] _@3771̲Mټ}bc]6C3;p!P
Շ0^x|gʇ}=x߇]B;zN3a89Ç.0yqC^@'qɋSlEG^tbzU)ʬw>)}znHLO{O\^a[FmyĶ-[)@iZi$B+HK%\]O`7"MrF
,
=G{p
:!v(iMK~F+4FxI?GJVf\*
\0#^pU2\%X]p`ʚ%\^6rY
4
UeX6÷g;5N,b}e|r׌Ń[<_wlSn_;,h$Pʺ%_<U^*[
]嫈3YSeLGV	H<1c49BO{e\Z]
D|读cDw5PHÏ-Z
&y:JBNobUrB&+YFjK]u;Tt8P%SvnG`W\d[P}\A5S#+ PRQ)ܿۯ<9_![T9T,TuŲmAZKCtN
fBh1دq4:;"CUp<EXK/ejnRj|-cOBqݸn=/ݳgY*=6m>G:~4
|Fj]+0\P!L.#){t{.DM PK    PK    A             .   org/bouncycastle/crypto/macs/Zuc128Mac$1.class
0Eoj5U	"n.%&ҤBĀ?{sߟc)CVǪU:=F+n{pFթb-VH$e֥wΐsGbM bPK3O      PK    A             A   org/bouncycastle/crypto/macs/Zuc128Mac$InternalZuc128Engine.classOKK@ԘjzIBKԓPۺ]J0ٕMzIGDABvf{~|8.폣*Xaĵ`mnnsUXE𠖒ey"\B.b)~''gBYR7f	aP\hɒ7г`Y[X#MN3]6Z6llɵ1Kjn~DR
&,DFk2LyyW_PGWiܲ/Mj7a䡁XǎTPKO5    PK    A             ,   org/bouncycastle/crypto/macs/Zuc128Mac.classU[S[Uvrȁpp+Il-HnU Z"XB 4Lrp8>_x3
8t|T9	Cɷ^{>' ƑG7җ"Df*"6R#"$DJ4NL@ٷZI,4#W)YTf'n-ñnX{Ki۷4eKgm#'l3F7-@r2bڞ7ɤIVX.?R.+ܛ@1>79DSw,\b&߱=(99+j
N>*0|ҮegUVYi=)d02wt=#tM؎U$*jGuEdQK[9Le.-1q>ZʦIYrj4SFv
iio(aTUTU*0:N
Lt
(#7wtt!`ļla*.EAJY\8~"'&t }V4F
=h:5\Ĉ <:0p<KP4tNC>
mP5ta/kh;_i 2&$ô:1|m8;#C}s%ǰ#ómU~Ch5?Kef#TK@?h@tFփ>:)Q$ud'ğaI6Q,HI(gC,?"*i7e,<WnDIMw^ܽqS?':ke,R*<|nԢ5{˘N)fቒ~3+)>Nۿ2R#mxB!LKԜ~בoM^;A0k4Ne
(3!Z"<nwT6utsKUg!'Q~1FiiݴAjiWc^b+JqbCWzCPp7LqoV=E@Hܔ)!uTѮ37cXqq/1I]uF$L03Pkzy*xZQS3"oOޡKJvX!V3zveM|A37xZi#5-^ ,zVC0PPKQ:}    PK    A             A   org/bouncycastle/crypto/macs/Zuc256Mac$InternalZuc256Engine.classPN0=7mHP%"!BLH ת"9baQD,$p9acBg2M	I:#%a,N]1+]xZJ*zv&VziUkyzvpWK!w
R"ovM ?@`+B/6vYUTke\*	M!T14bqg콢.?lЛmҘ!>PKO     PK    A             ,   org/bouncycastle/crypto/macs/Zuc256Mac.classUsUdۤӖ~H6RhŰIi)PZA# [mrInl8x2cSG'?tM
:Йιs??pNMɴJbiutBʸkOHL#	2\O	D72CgL@`RIY"XM֌-
G^iMu`Ebf5)IB1g'>m#dgwi_X(*f.5vSfȥcD^37Q(f-\j03e*co+E+\W	˖]B֍L~5ǞHYٲ,f|sƯ!o5-8N^6@-Liz$]i9U2nOv,Qʺ.
BA{!b!h!CxK``u:,0z`+T'NN8dA}(Ҿb4tbyJ2z)}N떱Vܻ_>LEwSq*N0$zpH`PE7ΨhF@E;CAG1PxNE/CU"$T*:pNE9=
74FFgx}A҃+sc:B.2\bc4'S`2UOf1A_vLXf1Lg(nMSE\e?&z[SFiO'tRT4^Zp]IEve+\oW& 7dqP]	-Zz]\a`)[;Xc;EKdKGWOMd#$vY`U|Q?
}HPVy(u*X;Xt3^"?5hgbol	z~ɕ	P  A	8iR:

Gqo,xVX,hԵ6eurwlK|UU7*jWK)%}ts[ނ]U䶰ODU=m_yomFPѱv=k4Qof\=W81R5竗	$Ǵo٫%ڝ6%ڥe];(S-j|#Ԓ6%n 62Rmdh'QBuY~W'{x(;Ud鷶T9o8me:6zZ؈PK'  	  PK
      A                org/bouncycastle/crypto/modes/PK    A             3   org/bouncycastle/crypto/modes/AEADBlockCipher.class;o>NFԒмԢ̼t̂"FĲDļt}FtҼ⒜Tʂ|b}GWGlC3030302kh҆d5#+#;@@ PK      PK    A             .   org/bouncycastle/crypto/modes/AEADCipher.classuQMo@}ۤYh~ |ӋJXBzI+Y
-RZuVFZOƁBPy3 p(_^*,!,«0FPA[pYQY;yRN)HMDs1KT,)
7N2̇t]mkHX(?U64ՉJL'ms2xi@ܮ;ί:GKljY
JYNS&45xGзeEl?8	z:e. 3
BkN$$:;{{^ɱ;kx>+Ǉ#+Zx<;ހ/Ŭx^3xF!+|R9/Xǃh-V/YksTo`>e'PKN    PK    A             2   org/bouncycastle/crypto/modes/CBCBlockCipher.classUSW6fCX"X_5$XQTmMjjQl6즻0ӷ>Cg:Ň:S@jGۗ>hvZs
`|8|?<p&L`w8$!*xCB,u !](EeX~0H{m$H)t1Zv鮫
Zqrpm5cJ+B֫iW4}͙S̚e^Fɸ"̐dY, B0f8MeIYUq\J6sE!^*-h4Z^]rIMvYVb>6n
w\mZIh<Y®Si0l3*^MN
WGy-KTtkf_o*p`cǈBʹL纝	Ͷ+t%A;n%_rjQ7tϷD>5TnuQut[zIfg?Չ,<nYuA{K:U}/7i5:7ྦྷNQ
yaʮ]fwVWCaGU𺂴.Y9Pچ}{Jo\G}ܷ8ޖ#O5)sb+nTdUa)|ftunIWhh{RmfUdE>$TEWxKx5pQ.\R4100D7>J2d8Io^\caeK0JM|،p:
{{QT]aз$W<"zuT/Y)yWqDXaq'$``Idh1KhBF@Se`X(:.d#d #
`0|XVG 0w2yt)a֯ Sqm߽XO35Z{5v9JkQ{)vϣ9X{O2]#(Ѻ#1tB~S~@zuZ~7Q:WgƖ 82jQi1(7<\q'I>Կ[&xlTl	3Pc*eݗ%9:/3	3rGEJ^,Y=(Br{~P!/f>u;7J97:
q|;ۙ'?rsYw$%e4j(1VL_HRאָ(/=U7⭕@0w'0T|Nw<Pxֹ96ǿIDR{$PKEz@C  7
  PK    A             1   org/bouncycastle/crypto/modes/CBCModeCipher.classu
0EOCXq֮' MClIISPb@ng8}O {,	kVʛ:ۋU#a5?:yz+)`~hEoB'z7\:gyk3L3&ʿCB`C">PK      PK    A             O   org/bouncycastle/crypto/modes/CCMBlockCipher$ExposedByteArrayOutputStream.classP=K@}s3f]?N-,,DLB,aw#_)?%n 303y󆙏Ϸw '%5?ĄI^kQ03BP.L|""n:3F6jw匒K±61u6P"5MX깲"I.BI^ݶr+m!!"(:Æ?/񂄽$|Z$VYyzVУaWWl=wͧg5l}PKzm     PK    A             2   org/bouncycastle/crypto/modes/CCMBlockCipher.classW|S߼Mrk%R`с2h
nkHnH<
T{nC6lK/^/ޛ{oNν!o{|{srF ,ZSLWpz
ZTp{hVZMɡMqN545-sGL)fEw}<V_DJ
+I敉T"XB
}cL
h(M&9fL&ht:f`g:u1#n [SB>IbNg&.6C%Rl6Kg$LrX"7mސL6!$h2VHhKYvdMDֈ7'hP,
h-'ҩ\>ʷ%zYeS!$ģ(Mr<}u"9%etJe&YڪgUԫ3ԯ7Hui*O-2	R].7̎cv2}JUT>q0I}m4K%M%R]͖3haδ$AOsD*NTܓ'R-JxS7ڐ,FZIg
=F*߲%fXޟ:&O;1cǢ4&%
dm.#FO8DcR"Ŋ;AЌ!Eo*L6S^#y̦{Gӱ'\v5lHRX4O
"
bbBX&<u(͌,ݼJV3|r٢)l]iLq*̩'7<!6 7r|hْIS6̠ʪ|SVR(4E+:NTUaienx~N.>ZVd0Nd1#[tO%{ QTk*oSղ/kC5r:rx.GAfY5O|ۂHs7.oLOUMgdA_$|3φKe\-*
2X#M2nVƛdX'ceY[dUFKWC=.;""S]⌣F'6jQ~]$Y
:7xԿgqʢǱY|y׋'ڜкݢV..^ISZz!gܸ!^#mWv]X0MjFPXF:]
CE;UaX 0,bfTt14aTD`a#T$1*B10*:qN.W2p1^TSьAŇTćU\]*G؆>qO0|a7b4g<Ha4<0l>&2<A=}[1!{3%2p˰a?n܊>yvC
_";3p?Ã^u/./0et7SГv1~Bǩ WTȊSO1m\ʹE7$
L#37AiD?llT-hYjk2NqJ>$)!/vI%)DQ{
M;|ۇ+u
p00G!e Ѵ;;t{<oOp"1\
m2x{	cWE-$AU<T{8}(<e ?[wc^Cu#w8*:px
w;QaU?U;vVVWI
mI/cC"K=	[8{Jx  Mm ~TEsN`r/ѐjJg,E9tT謨jǦWY
(5Z/SuGeHO=úhj^,|bn$P۱mmvệYaasŦ.ysAn"j8JɦB;㦠EBVLcxQ{n +y).m_$,>5GNuS,;c	{Dnя&K6-#3Z!鐲я<je;,F<&vZSx`Tun=g8Sd*_b$쉣,>^m·+uYއM-{ȚqV;tp,T]qMeWKL.oBAhg-dݟw;;4#Gw	^8CZko;jku/-Oa]{]xG:"5;-A9^нq/g>))vz%R*R=BuKe sSt>FGD޶'=Gҧ.cN*yqT_Ɂiji0[{,',źW5Fo0z$I rzI3t	\B_spI`I"j_CCR襢Yq*Fb+'tM:|=1l4r8_[cW';T-qm(p*ڈPAFt%U*eMw*~'aSgaģ{}¢)[w
_6sFh;mָ)6ih.q$#G,ui111)I5-qnv/1NK6>wRmdfmG)}[('$INC#-%I0sf	TK/ƏpDOSvcz@Eu
;kho)>}T%
$~XY׺2}rT\pOGiu,=
HY$qAuL삥̻'i/ѫy%PK	+a]  0  PK    A             1   org/bouncycastle/crypto/modes/CCMModeCipher.class;o>vFĲDļt}FtҼ⒜Tʂ|b}GWGl̂"Fmꝝ}}jvFv&vf6F6FV0  PKĠr      PK    A             2   org/bouncycastle/crypto/modes/CFBBlockCipher.classVsem.4ݖ^hKMd.6
h\6
lv\e7I/<m8xyĿAn`S13;|˷_n؆/B*-YW*[i;ZN?ϺxT@ OHI4ӮJaRYzxK#Hg⮂QpP8>a7bYAڨضRQMBn'
g5+6`
G@jYW-MDurP<I#Ѡ)Tu Tb9i(j%͸Y5]gس
FOt]@k^siA1h)]˖́mkedLbGK^0IrJIꊑOfu]+z/)Ⱦ3F9KHCu]c96%.S)9Z5Y(Jyo0|rVTZ-L
x]]QeP3T]:ؔX[4sZY N.Ƕx$dm2#4XWtɎSГ|Di|eV*ygѤõFS
9DtEH񔈧ElU6l\RV4-wƖeAb}-Gen\5[98N*%7_zrd.K{1LIBn.
za1D_JhAg6AB1D(a=A$lchV#K/Kx8 {i*0#n1&0Dȇ7Û
TPcb8քeg`PU8@k7Y*/Qx6ת;V&tZ0|Kaq']ɘ'nw، ÅoI\'woh<ާ64u7ZWR{tDgq] ePI20?f`v~RGwn^wN_DZ^XOi^ڿ"W/\ŝm
mݾTOϪkr8.]CA0}itx\,ޡ\'<>c]KAH EJDFNOD|_;>#_8)z{CB㠢k4G>n͆ZO]_h k$y34B,XL*ߪ@籋^K/hyb\E7gA8ǇAK_&$586#:Nk3n]b9n,m{no<Z"|П-A[%vG|k)V_lN[w{H\?#}؍JV{7^:clwWǮ?\35PKT)    PK    A             1   org/bouncycastle/crypto/modes/CFBModeCipher.class;o>NFĲDļt}FtҼ⒜Tʂ|}ҜLl̂"F\JKRsaʴq)OI-wvs2 X8X  PKc      PK    A             1   org/bouncycastle/crypto/modes/CTRModeCipher.classu=0 _?I77Y%&(APR	Ws HbH\}y?TkHڬJIC3ū\
KkX7h[%0mm5eҢY]w55=K;.?¡Qc>PL% u	_PKZ     PK    A             2   org/bouncycastle/crypto/modes/CTSBlockCipher.classTsUIv4-e-YgÏ(	E	l4fM888NǾ⌥LWgg|qxݐԎmg=soO/~\p/vxӋ^{qX+4vJJ\KXE
o 181'Y7fю8̤%+w3Y,5eꪖe[O&U&I5!UyVCT(hvܢYj0ܠ M۵*ugYtc<sDFM$3oU\^)_0zN
'k6Uv^Q)Ջf!Hw˺fؽ7-ZB4U*ҙJ6o-ƞJ۔sWmc^@4]՘Z&E
V|C<5&1J!:k\=Gؒ\hg
uV	.yKGǶDyV|ި[^JZ;qU[]rtV]1qtH7̹&x.gؘ҈Zu+ږZJ%xjs2^hΪ4劕3U^Q@ǋn-Q%OŨtgG(ѫN.je	$%쓰_	%0$!,!"6&hThTB?Q

m3C(- Kn-69{٣J
M!ۏ>f^E׏xˏ~~tA(3{1x

~v19fffR>zI!|8ɼS(83}x:p癙.ۚ顇9:ݼ3l >E6t	y"]H)NXx"mt3=
,c:y M2H{z1v-#=Ϝ's*&!.Qli9I%ܴSLv,Hj9|n3)zlf,U]17(w
+0?b\.sc[vngUw^o[Ø mu:9ӂ0Jhݭ|бxİr$Ye,eE#W{fvEn_ĽHmFn6r{vNx${
KuQz'`ĥ5&{nùgȷeE"R-Kdov$t]e1;|e=k0-eﺒt=A>%A^5GԶ>ҽY`6DczM2Pp6~{2ə
>Zgqq6/VwpxdQG2 s_c>	8-xf%t.a׋^{S$de7鶄?mfx?oݿ6]YMJ
ĉ(qjQ7Kx,ѻUlG,Ot	#k@YC-ή5ng@	=l`􀱁9
PK'  
  PK    A             :   org/bouncycastle/crypto/modes/ChaCha20Poly1305$State.classKO@* (D¢Θ4&.ܘ6	?˕?x/B2[33盜;7w> 4'<8\þ0-ѲYvMc	^9՞^;ӡl˝eMlgYY\j;-*
4q4hzcO*Mo8~U=i?Kڧ(+ؿURI,%dIY2,K@ycC e4?~,tC5r9ls[
/4^&hBx8qZ
EknG?pw#<5T/PK fN  ;  PK    A             4   org/bouncycastle/crypto/modes/ChaCha20Poly1305.classW|Sy]IZ\a%,(Fy0`p-]
$$eYӮۺG6xMȀ6XPRH^u{֭{w}^=v?|;w:G_ v5iװZ
k54hh԰CN
5p}z4jxPðI
9UMJq+I&:41qǄ5i'-Vj驺MbqML^V^æL:9u{+Cs399cn6ȇzQG-妗GjK#Qu{ZrRK1_K8y2`vg±1}frI=\yhi%D~?ITxPt :B?pt_2[aw*frV<4ΆT,;')ǁtA[MefhĄ
Pn*f2XRY;K|
Z`ْw(6Vs+HЮ6a&e+Ps(1MYV܊h

;t*fD)*Z34_ޱ\'4}Ob]f?1cRU٬9Kgf)HqNmmaC)
6"T[M1]+v|KZd7)bI6Sʏ$Ƽ4Y*N*WHj<@"%2AMIu>o3&|Or2M䧦iRI\:0V|z$y |(۝CVj2?e	;tFH	TS=f,?[\5	25mΉv|d9#O֖pb4SL~>3<f4ۓfj=LRId'gX]?EELyfGMcdk+jN'RFah1+FGZS&
糉dL"w04YLʦ?`'Zqgr$}('T<aBe0$SnQN$'1?N.OٞkIg'٘#2}̔tbd9V5;T*m9n9*5-HF_rvP-BrĘHYvFvn/)T[B͵ckYM$}@-oϺ8nwdud{zGt)KwYQ5\LVqf8@˔RɦcV.Gw\{'dp(^1t*qY9kKBn褕Mi;Ui;3v)C	C}M~TLHxLqI*R**NU̪?*~H*~XŏQ&5R-;\Ӣ͇.LDoYLLSfBFZI;&ιY{k[Zޝ*.?CWZӾF bR_:bdG>e`0df~8:M:ϰF1ã:8:2q:ދ
:F1G	lbQ-:Yau<lS`t8)3_AUq|i׸*[{q^3/2/3
ï2~7|xşp{1y_ׇ|8,s_dx^2^7~w[aK2#p`=?do.7o·K}co3_15?e
,GN/>kOznW*z4}I~Ѱ33bW<^zs8? DH>EOҸb4b34ئ~#D;+ƧI8u~NF6+[gl)d;ⴔZ=(5tҴFkИ54ZK.`:\O*l^.c!l
6aa2s~oAh7#rUD|fԯ|T/%,\W}|7pxY%_v>;YkR"œ<<Шm.hkm΋{;Օx^}ͼkx+Eu:/ywŬd徆Km
h򄙶2nϡ_:$-zHKB2ڧ\vJq!Ifjv%g0"rh:+خmm/`%-IPƳkC"j<>LBU7n xCx(*.JrU*.xUGivWi^V4&=C1OQdPi"T_$.o(7?%`qZzcyst
-k/i=h=ZwV|Һo5sXQTݙ*Y
GQ!c͔cka)u&9tUtt8?DԎsNpvq,"׃/0ܨW7XkiwhW.7S[]^GlZ˖{~U^Ҹ'#h-qHxxb+btKag,7mAl>_R} \lzQT&{ˁz>b]:]<9Sd0CE=h"Е|U;D [vV:%SH?XIT(Z'Wm_{S=OyObns`~KCS..,|RNrsGw槑䔫gnᛴuh^ Izo9'C]s-lȽ71&<.Mm[z9#^+}GIW pEt(KNr|Ȧ2yܨeA7lR|9b8-7|%+8VTX5_o?i)zUY%Ds-
nnɈpX!k4f6߰n}Æ]d3~Vmŋ㥗*墆nbb:o+}{}8lxC(9qUQ<Xjjk`I	G
BXB7}η/lMXW@}GQ=q7:ϵY"n-t7H|7_pU"3d
&%vrS#VʦK]dc=u|ΧΠ
54_.$!VɎ14k%B"̋k8JPAl*voV2=	[J
Vr|"s|2j?_	>:V%ܢw]^PAQ0|Gpr͒glo^4E_K>)Iǣ)**	nʂYn'B;}]K945+*vWQk$6?6pwCDKRQdmŨ}U2n9磹~4PK ~
     PK    A             2   org/bouncycastle/crypto/modes/EAXBlockCipher.classVy|ֻ:` c		BQH9!
WM-%EZ%>Iۤ4{ih1@۴M3iz7ͮdcO߼yͻ> n.,t>r5.&A,!A	,C3@*1-pv57	bKD܂KynmDœqQMM1Q=L.ïbF̯wFo$O%1#OәTf%
	!!"t?&f*2͢xxs͢|+ 9tH%=
=MEiڌ=J]TtC6Ma5mED?AB{('HyRUj,u[<'H[w<ACyw*Z=ٔIefoVli<eN/-&[S(DZx~)Y	h~O2fdG&bYWFyxV8.O DfTCf/^=Г=H"aLO4[G
;\Kg0m7"SۺvQ.fk'blniх0.$G{wE;v}@+I/̚+ɡYMez]dt g̈́
Mfuf#cdl++~TPlB£vBaBll:R1#njm0-^oi{ysS)푖i.
28WIwDOɑBԄlvI8gh]e`׊fYnќ÷1m/u	=MnD_t	j|Ab(QWq&*ZTlPY[UlSqTܭb6ءb{UKmL5ϺZ /
	\r_&
1Һ(ƳkWK|,t\{`1N!r"X`?\bI|_*3fNۮ0WU+^j
3R
+jpC#FMxxQfEpk0gdeV2bBЁr
kpsozThCix-33@CoŰojdmn!
p?O3v

xkN
5x;R{>3|bxA3|n1n=	0F&p e4ggrc?FC`W8O2|oQʐPbx2|2egW-oRKJ=Osw1XN_=[tޕ0(}	ňO¿ zmѼeEQjJTob*#kq=n]gϯA[OXGgQ5f;)71Nrq;qNF01^OOM	N#8w<2#$kƑh);7KFJ`|EȢLnҥy"a
G#;A;5*(~5G0!u%F0/(Ch$'į%.xoTsdzP:9bq*e.AOrJLnc	c2U
1CFp?8&pJUHmReQ>	&v=Nvkeqrʱ2)L!6,7ДSȐ\.PPyVaIZZ^NNE
<9mc
B{p4sS5\ܒ^ qTrx*nA
1z+/!N'[k[ôe:mE]W<يS୉QdRv57-uu*%9|}ϨJGHzlrFq%C^̴ףܺ9+,u|9к_*I
=sh<ʧ+U)8Q~3JJd	|[^/rʫT{K=`Q;;W9=t+j/!QkV'M L9h,ǉFN]A%At	-g+9<:'R_PÚDP dV,IDYl5@?: 4^;ca}Nb!o 4Fpl3X+9}O'6¹p^z.atRvs-&EUKa\Jʶ|[ꊯTW|{P8aA{y̥RQr$'MWԵ&lkU!z/yxVTЧr*OpȂC養,.ģxnC+b:*E _	+Mb|!Rab:F,eX.~yJ^"JlYXnW)Ŋbkң4R:l<Ѝzw*^Jr(ZJmPK
    PK    A             7   org/bouncycastle/crypto/modes/G3413CBCBlockCipher.classU[wU&(IJ@BZܢ- bAizH)? .YXQ_xeiR
]i}|?5k
%KyFr@&z
{.^熲qM9$A'$8ɸfk;QIT5'1mX~C$F&*q\|\y#Z*ZWmmdUoWgMKeR ƜcU):M%ψPeOjGn4aYAz3ʖ;YJ|{0
TֶjTO{X7t͠D9횖54-(kƘ]W^CV1zڌSsDnn|]7f.Ņ#eU7K%"ʺ^uDs	aUŮX3=ox>j_rNϺi.kT0j\3ȨLٕCRU+5A5%WZZ8Wf}21(#%#-cHnY{d񜄁ǨM$QcͼףF+N^||:ϟZ-kʑ#B&=j?!GT<u*2۰I3S!#*v "av"b;"*b==[ХQ[1n	U"CT	Ob3^V^aL0L2d8pU3QL#8Ũ%(%9So2\b^gxA"D؍C(2g0p?teӺԮ1zw'YmT$J" +vovk)?_h"J0Re|,=nH\B"r=6/ĕȟrxwǁ"?(-r%|ԀI$3HPa0KSyԎCs
z"AwyC.ė
D/Es=P<+@ѧ.&鴭QO鿏ѩEجqIW"~,gycl~XJqvka6-Gh#/
NqAy%_{H</{\Ƨa\ +5ɓWĕE\p[Iҟ8.$$/XIG*_X/l =94w&3^WfxŴgeíO[E$&u60Hhw3uN/PKaV  
  PK    A             7   org/bouncycastle/crypto/modes/G3413CFBBlockCipher.classVSW-	lFJj&-H*meY<(񁯶־St:L@~C~h95`)w=w=ßܟЌ\tʅ8,$Jl-cvY|yaP{헵1s #b(qHIT_gҦoD>CID5_iFy{|=-peJ*%F)V0LeI/5d&A^]10Y5
RmTFJ<X8Plʌ%ĊQ-ģ<QlӣI#fS&$2)e^IlD83F.dfƹ^/bNPN*NUEt]*zĵy`BL
qfgD4\ςlԸۜ4*Uk!ɐ]]Rti9 ğ:yRxrTK65oo|ʧ|z-7~ԌBK[|J"z=)e$U-[ZZQ&Lj6dpe&Q#"(A6!E$YND$`K2ڴ[}'V~#b=1/Z>~ysRo6|0۞j<d,Y	RB-C#nxNBa
j$T3lb3<$lS
JZZ|(a\63ԡ\n	^A!Ix$aX.	ka	/∄z.azyg8pa
A!o2t
	i7ȸq ︉wAaPF7"pҍNhi7"c@;N00qhcY|Q{N=խ]wP@p?,ޖKVے`I%dmYkKiU' +@`kgL챉WQ
a90dG罷~7 mӸZUŽ<i\M.r8#r,{=.=.ݳpJS|"P>OݧJIޔks8S
y|\眓řPaU9ɘCVƇ&4 097k#e'본#uGVXŕTD<pN{BKߑI(lojr5.BGJ۲5Wȥ8%m9٤6irS=U;Ŋ+޵铵P2	倗[PVdδ*h{^:w@.phrc)AZ
9s);p3	ԥ<>-֝X  n֒*;f;,?K3]n.\tf)\+'Y|B}B3;X L҃<m_{ҺbY7>q~
Ob
?PKM  m  PK    A             7   org/bouncycastle/crypto/modes/G3413CTRBlockCipher.classV]se~tCPZi tD&`iPI4f7 ^2
z8
2cZ

tsnbysssmc =Շf6HD:H#<;hhBy٬;ƆȦ7ke~r(5$ɳk'u[ag¦aepTt)#NH/FNeQ¶nep޾0]}B&)^ݶr:_(ӼzŖ*};eHK#!t#N"-L66m4e˰MĩQ	ur)	*mkziɢh&Y$Y;AxM2vLIiǒidtsΔr6
N6oIh_Aq(eM5ƈcgL5'9ಓr1rvL,E¤iF,mN>&2JD뱎>,*,zl
syWOPwϾnjl͉Qa&觝)!VϤ*jrB+,J)T9`F([Sm
*Ds_,WDt(Dt*RGAL^$^E9KhtʴY_~(\w"U]˞:VGM2G^T(DήٞHMip["ISWNVWvEZ2la!b;dxU3ba؆F;^OzQ
hRFB ؈<{aHNe$Ul|cq'e80A~i	Ô#G~acgxaҏ7pޏe0Ĺ&({0\`wQNFYç^[9Fi8t#@XF5b16b$UVO!I6tӢy|Aoj0q%^'.i
C#Zqp!n̢T=3>MVP*jϬ`F~E=qׄ(W@]M- q))^?0p:qmekXz̮px
"
<qx@na!KwE>҃;u>Zq)v5DЭ``-
Ndb\]H`J۵ŐYfx_k!GlrqCUY" qo
%aewc\(ޠECjgXi46(ӔJ/QCF:]iɿmni4'xU/V%Tаn{6u9˓[4r{fuDy\b,ǧKT&aFm[ QH6/f#JqMB),ڡ% PK"9n  m
  PK    A             7   org/bouncycastle/crypto/modes/G3413OFBBlockCipher.classVSem.,-mM  V$5ZvY&l6mS/z=8>'_`g렾u<g*e9~J5$IHۧ,$8[X]&%j!֒|">xz 6r3sFıScd1\l-+af[:cXh?ݚ%Qrt)	>~hfY"7Kl[+U$z	#:]39"NFr3֜*ZY9vJ7I֧3`M;e)g	
1I#Y)+O=(b1 G*ȼvCZ.KHkƀ.dE9wK1sԪ-1RطsL./dY.~M1+5tlu-"E1cnU	CXD.mJ};6$cfY]9CO[~b۹X<|lcX4\aEOOlSئ#mm4F5(ktY+#,]*#"CF.2#xj#ꓰ'ܞjW8Q\F)v2m}_ݜ̼НLI&w<-&o.ϢIA#*Ͱ_A
ZZN2pA@Vp
BzRZ0+8P/+8xExU>j0!aFCWfC8L/z(&^cdfB*õx! `xgpaaAgoU"VU^hZ:C5jϮ޺r'xA7s:uGY-_BN#	%,lU	T #qcɇK/Mw$Z7$;~o``GCN6U%c	YuoKd	Lkm7#4Qr{u}].=r UMKzFD//^*ոtH6qYجhVvoGKU\ ZIb6?D2rJXF`	=#n@j ^n5-T]߭FX»dgG$=OQo!S7"u=~}Z$-pMA0z~2|A	«!gR\q'_'ALwwM;;Hy^ld7;~lňup|P.˝6օ	PKըG`  	  PK    A             3   org/bouncycastle/crypto/modes/GCFBBlockCipher.classVSTe~.DVAPT2݅RR@EU@UZ퇇尬,b`+;.j/b1kO馫.nўopy}?-x!T#
cAi
[6ϱtцB|SN^h"v*J'}|$tH*(XBpѡd,Xƒ9#CP*ӕf&ҹx*@Č\G"sã(Tt/~8dd.ĔmJ[F{PЃq
Vp~89hdd3S\?0ē~R$d,J$FQ̰n/C\oWjRp,YF	L,0@QQ=K$@cszJa16309qGSF6й'8xEO7&fj  l%O<!=9Uqv_:lxwMl [*gvl [,#2KnCrGPQb*6xDFؤ£AWO_ASTYZAjӧ=erн761LgIDy5,\}0ygC/`j]CgP+*Qe 4@PC=:5n
PAEC@B%TvjhCC#VKf	aj$Ӱ[hX^'vpHBO]pDq	qZ1BK^`Hv1s.ĳ.#"aHB̅]rԁRla	KEﴌWvtGOOγQF*%RǂK:Hergu^Nz8὎w
w1<W'1zp(R?
 OL0Z뭙Ĉ;_-jkH<ˍ]Pʍ]yi9/;'d-TѤ~ra5ނ(7^FL ^fSxc/`M*׻U璕[[ztLRfc[d
Y'y1V|x/rGHbJZEn{J-ʸ2V{}ERJrPY[(wi}yc|(xG`xo\;u8z6[-6Ƨn5mCo]Qzu&LQf&WL*+fҧ%SWfRÿ/{,BE?cE^ų+?tǱӗ2m+Jv~3qVJx8b#6	GbC8p!~
G]%KDM!?K\&~ 
QE\.n+
qXw	RDJ$Vs7bX+&ĵ3bDD?PKB  I  PK    A             2   org/bouncycastle/crypto/modes/GCMBlockCipher.classX	xSWv>zғ ,a%$6N0@1dҳQ%GIf0L;k+LCXqcRȴNNޙ.}ߒw%ˀZ{{ι^Z&/5{i{A/uxK WniKup#c_G7jq7vVG^A-<rnt<2SftVJy
vC
k%{P+{Zˣ=Pim"ȭ4=Gr\:<IltxJ	Hcݱu{c{v	A89hg1+Jp`:S̑\""mǙ9L` ?;{wxx4+YpҶ_>p$SNbitpXt&'(؝:N0pԖwk`EPɖe=f)ώر`'Ryed+hܽ%^w͎u<nkdNXGb#b:؟pHg:N

*w%
;a@
a:p*9.`DY;ԛrqDP:h"w<[KӃK߱d:jbT6gr}a`Kr̳<nbq[*tG)c(
Ղ~vD, p$9C`"	Y ^O!; sε'5<ͦc=g?aN2腽usڢE8+Ʋd!`wTҽ<' mu!1Ԃ
p]IvӐ#p]WsMүbNSʦ$"IhtHCY?eZVj;234:w="@(')z,esrb'To.;F8[SD{$z I"+vC}PW* lxHI6؋|
5&h2I&XW
4E,gepSY.HgZ cGbP*i(LHIi!(>t8N(rQ/<&'4p:ngΘb{S?Pl&b5}lym)
%3ڱ+HȘ>@ή<tiDfg}ӌD#;
ZQOrރj-x׎QXWϽ\7ubjFcY~(ɍQv]r3vFͨC\VZS=2Yz6qg;{/5ziiN:
tPNOtHgtzV#:}D9>tNu!~X::3(mVNK7}Dcm6i\Ίiݳ0{׊ضffbcYf}Y6yiޙ3GAD;})n+þz
3cCM<hZaa;ՠ8CVaJUm63ih lP|eXDeu2`,.2!' 4sTi62hyGAoŐcxj
N
i
Bme"c7h'
2|aj0Qi>@/-jU7w͠':+5//K5
_f&ï0*ï1:o0&o16÷~w~G'SBi3w>:Kї%G?#fe{U?&C)C"0bx J4]`o =]gKe_2@g~΁W@'k7MHƎ YxX#9B
,	:GK)JBXB?^EI%۸jxEjcvj76]Uݬ
jٲmSk:5^uTJKO.ITz^Lg4l&IphHja=  c+] g2HF|4*NM7*][z"q(4.3?!l)6ťk:㸩 h?ҹ#6(EF(ejb+bKJ ..d}&HݸbADskqޢ׸KgvhVcOSSI8KezGS=ۮԨ $B>{#DqQ,m qZAA; 4DLS=Rǩ̦8yMs|	KZM︨h7Юig}vY:N˚o*"]vQ̿Au4_%Ir Y|"<5_O

/pEut؏4yQ
O5pK58Ea1.9wY,YѪy^M}G }YtτXԩ6ڐjE\xYp|\Tz/bU2Epxx2;6ʈ:!^Q#ocm[-^D"(]8rt=_?*ԣ*X7<
( 0UF>⪁utN6gHwQXu+bT?P(Nn3.4͑"v:ܢ9f?JǑ\p֢ľyu}~4^ir@`ӔIv6ǻBˊyc[bCg,84 	&P$=ցU|}04`2_̜zI
N
GḴAaW01%B&M)'в[8	O0eaıjJ?IArҵ#YZ<	5,\$@eR7fCA/
xZ[y9*yp̭)rw5&ZOc89=y0@tyuX%yYRP~u^C_˯GKݑ%zY<NU7[Z0wsz}_`{NnTUU3%mGKGK_W׻%nmЯsqԪVg) !=]FHØRct9<M;~I^nJc
Rxi= mkNuA&͖L{Y0X@FaY	Rݢxܢ5nJ<FsTxC^
O3!Vϕ#Kz*_dSʯ+xЙIp|2F|q~'4)TB,W8GYcj,Sjp=pU
^ iyƹ{݋A\xx.G8y 
7T
h.IbnuxB"
|KZ:x\5VV-wv^yA DND߫㣁*o|Q5by{Je6ߧ+E,Ãz^A||P\ԛ3U믪g#/yQ/-ˢ{T	ќ
.@O|S+m'|
iN)y7J<tyf
8kvR,܂W"(,rpGp:H\bȑvԧS~
1]4*P85*_jCǦ-MᄯQժ5y!ie=ExQ
wpsm'T73b|p
P>2w@Wre)u!!AG}7>|S:E%U;;1!\gTjՕ:YnL
1~/hzSkkSf͚fXS'슪3	Y6e朐eėܝSPK1  _!  PK    A             1   org/bouncycastle/crypto/modes/GCMModeCipher.class;o>vFĲDļt}FtҼ⒜Tʂ|b}GWGl̂"Fmݝ}}jvFv&vf6F6FV0  PK\9r      PK    A             7   org/bouncycastle/crypto/modes/GCMSIVBlockCipher$1.classK
0 _j5U{݇'tQ\4cLJ^ͅPb8f3Ò 3uN '`ƶ6w-&W	;ްicǢ:2Zc'-A#)ED1#PLC.P9-#
1NV PK8_      PK    A             A   org/bouncycastle/crypto/modes/GCMSIVBlockCipher$GCMSIVCache.classPMO@}KJ*~x \Mcb{0.jivkQ2NAM'goٙϷw 'h1rg8|D>g(1N}J"!Ce"Ժ1w2-/uh%Ōjqy'Jlc>od/ݫA脱wixOF{Jv/~LTM&mQQQA
شPÖE޶ԵKi(
Eǔ^CnmҤu@^cv4~we7D=cxRӢ
PK6    PK    A             B   org/bouncycastle/crypto/modes/GCMSIVBlockCipher$GCMSIVHasher.classT]of~	f<hX
J;FQT4U:oG{7jHz/:jaR> qK@}RgeV6ʰh6*(k#Otz슀hҏub2Msswv
A00#ɛAڦ۝(ڑY}n3NގgB4]tWìH6e';V<0HHa2gߍ[2o4֛Q>ltm̏(#r?A։UW*`$2De}mI<AP-c\X
-0ޣ|-orBjw2.<Os&m(8i38c
0l09CaTl|̢[߱8/$8E,jEʞgXDz.H_f7{=40/gMfu7H.}	gAp-"If%`T*1LRi	8$2#;Cz1..{:&
0Q)
NyaWϗ*TWѡ*u]YAj,kyJ뿣~p,KǡSZ5]35'5Oq:Me+{V]7kkz
E]qZvcgot'85Odd.4IBs;?&̓G=\ST8;T.8Q5H^hn2??PKy1/    PK    A             5   org/bouncycastle/crypto/modes/GCMSIVBlockCipher.classW
|Su?WIOö !	g'cL+ؐh,dH2Ж#Ҵ i~c
ij
$d#[v[}f_]usӇ&Y{Ͻ{ι{߷e 2ss?;١A;lV;mfaB]}uڨi#Jk;!ี.InCm4[mԒ$GEF،Au!iB>Q&䐩#4dw	jGHmT"
wt0XwLt4=ǣcTLiJs#,٬k9=Ogb|*iͣ}]߶gWgw{bl$~Fz$d"Kՙsx"KFH2=&aShR)N#L=;ܵ	#D,Qa\\"*"sL@T*긼;ܿ?sޞN];[@03a:(i}%bK9LMShCdhzq.=ύ0Q-Oj9}@3Xѣ9-7EHW@撺)YtJ'ѱwki}-ɠ6NesZ*78
WνThfb,ח)5g'+;1VpʹD$QO?g(r84idww8)h*q=NmW.l6Mb9Z(1D 6trڴɂ^
Nƻ(FvzĮDiT	5Az
HFc<zZ%z*N'O"	3VǊ2|Q֘Ci$z\K3q؉AdtML"zGU[#Õ@z5Z^eдD2F*1Ods([| ݖwb	
PFǧXK$v⇅Ejxa<5lrAEJ,|.7AWE'Z6yqQA1-qJU("toڤ~!~dLlcwo#{4y6ޞcCeފ;\A띮1F5<s~Tab<:J"IЊ{ŀv$g{3y/m&?"m,1KJG)ix.l=ۯtFiUe^a,}plXQ 9\F!5gu*ʘYFtrNH"(
sNwǄI-5
@R
EfMn*nrFq^}
n077wMߔB`'	)0fk/t1vhCJV	H$HJ`\<&LH?'KI	NIA	>$%8`C"j^+-"Aqqq(}ܔ
n]Ⱦ8o-6FVIO>w|^XU|QxnQPouZ~Ƌ5r!4d>?P~\\Xq&4-2UO<KY\SL[2|32< Aa#Tɰ BMiga{"$8D(YPdj:FƠVQperb:qnX!Ã&y^:'>X%G/sFV>XGze;ߕA+C~O2 ßߟ|g? s K"k!xo			/'\$x	;^	<N[ib\b˝(J#w ?M.U@ pTT,!Pj	>'D?;#!	"0WikV8*`	#0~Y	l*'&ܨ)G&,%XVW@A;=%~f#,cusQ#iOVKX6_pu`MpJh&`,I8GzsE-=e4 "<wџGzKHerՔ<䭅22[ }[(y偷iNC]1qcHrEΰPE^y *,:gM'qCjmR[)lכ?pѧmya,\TY=4ʉzڏ|6J0%R 
ᢩ&;XXkY5x,^Zln4!<"Rs:	C
GG_`SAƸkP/+rF;^n4;Lƛ=EnLjpU[yR2wA~X`8#/K:d2Z#4k L͆,TUC`AUsjT

YO5Dsn/k{:y<GM3
􂻝Zc~uNMUaku=uxkaR2t{䜯
X/tSD5
U*4LxLux^0:@a0,҂z|?~1(zg*.u4\-{զ.#GHKz$ 7Ø{y{/O	JV0Ͷ}Z1T[{E
yk($d2iHQfؖe$)]l1vm/}&BYwkHz#XΘYp6T( Q?Y憊sqjXаH1ckhWQN$esP{H%T\{8,w5@6Nc#ȨW0]&YȳCqkخfuk/Ai(Ī9%,ļZS

IryXazvs5K.RP}ds`wYI$l.9p.+w`#uz.Yy`Lx]J$"a/N[8=U AmUnVN:3@7Q<ؐ$.Cm6CfX0pܢr̰8sه\XHmamsySn?Xa
k>Y-6r	ha[otk۽C,/g[C3HOlČo]}䖉WKInke##w8ax]Rl;	([${FA:3tu-٩ ހddG״S{]#)яl"K>E>8369V|tɓg(6
-˻Pc6&io~N]<3P?^W
m%1b5gBMoC7i'k.0coGP_#0
BS^GeU=.qyN[7S4I_O;-P;5ps]jA$o$7%܇=
qx9DJ
q1"{(ƍbbEgz'lHa9,94pl8Kq@ԼKGUfZQ6P>	ɓL<xeSNmFsdUtz.m7@dX~V0&hŎX6=< >(%):IbxA<" f*Q
BЌΠEFAfߗVrSq[/+/.8W)n*V"Eщv% Dzܕŗ>VV\-
Z(v7z8fU~؁_Go|dl?e)OYFoPKҸz  F   PK    A             3   org/bouncycastle/crypto/modes/GOFBBlockCipher.classVmsU~6dӰ4Rhʋy!@-HS^hfMq#:_ 3~7-	/3ys=sϹ7O~yttD1>|"I	$A\NHP©۽a&grVIJ_ ρ|)o:pP.^6KZiuSSêH(+E[Fzie
5jY	W
52%*d^IyVZuWm$JQtުcQ`!gZy{8O%SC*Jf-%6žtY튖(h\"U(90hEd׍7Kv4fSM[c/|!˥Vj(ҠѪ$FbiSk`$tV̈́8Ԑӄz^'5[6J9{>C+>9oęgەD4$ZLݨTD&>eT6S]A
(8.WX-'CV~7+ee^Ϸh/<?\Ԭ{</+ٯb+Ut2`xavq}#b|*Тa/*PUDQM*vcHm8pJ8MQ»*j	>0YQs.qя4ÇS~@|'0L1Kl11\dd̐W7DךRJ%P%Еlϝim`P'NЖI\"!㎤6rOBnvpIJX772ZS	Ţ2>ȋEDW0/aF>{>o⯾E4&GI%|A	*bp)8PL]yB/[3dc`~H|	WT&
Yyj6wktg;	,J#;'3_57bQ,Ąq(OpJ?rmzNW7hM&#k8LgHbEN%,z	PILPGD(>qY4n'Crs$bxxÙkq>1w0λuf2O׋{"_0@,fzAi!
hH&au!sBɲ$vx3]k7ӱbdb>n5":#ߒBw㑈Pa󹅢%=(gN4d]!v[|V$"2*%ʱӓ<c\2zYF'e@+O/b04PKTa  	  PK    A             6   org/bouncycastle/crypto/modes/GOST3413CipherUtil.classmON@=cL:-PJ[4Ƞ+D@HH&N&e;E?/mg43g~]l
Z*3R(w=n=xֈצLted^PLҎcoTro}b=_5;tQ3bXsNvd :G^Z#nݩnWg?#[[|GC(r<x J{yOQ0	
y,0<R/!MP_
0&QEc,%LYq:g&I~k
JLrGEfJ5CyEUkP1Y}kVww:c"i[N/$X}"pPKBC  `  PK    A             P   org/bouncycastle/crypto/modes/KCCMBlockCipher$ExposedByteArrayOutputStream.classP=K@}s3&
wlc)Y,TBmh.v7b XQ&"837o|{pMB0_MBX8z-
&uFf%u)Cؾ'SvUQrNf'.&s=Uq:yu{Xi.X1g@cX
HKNRQHkŎZ
zz4*`_ב~_1a	눿 PKf     PK    A             3   org/bouncycastle/crypto/modes/KCCMBlockCipher.classWx'2@d
.
lF$!h"-QL%I]w'Jl/RVC[TԦV kmkkk[

}hm+F9wf7 ?{u} ,
f*`QRP`
2i+%8s^*I-`^usD7<q`K;{{df"8zkI
h%Ω\^WRTEV3q1Jy}N45Γ64^иDĸuZ,}w+c5įbHKѫ@:Q="]Lj)K7Tھ]Ys5u+/h'ȑ-mst ]]z<Gm=.9z@[k@wjZ6D<$Rx$
ѮdL'
fDqCczrpU*X"|@$i$FR)'HHӉpi7nY]Oى@359E	q]BQ8OZhv5)n-F':#D$,%Vg{4FT}<I.tFM#]j	<5J)Q-dŴ.JIYAc"&v<wn\\%L%T'廓&;D1$Ou^'WhDGr4֙D)CO\RQ9T6bz)Luts7u+x'JCI$(Cl~macj#EJ2r;ؿ'm]CltREvqJ;@Qh*P+	WLiTGeP'^)
$Q)vdKl,ѥT+ Kj~NmSX̚81=]YS_t!ύrEK~fd"Gj;XltvhZkw{ɮ{w܎n#)	a(ŗ"*@<a$͊:9&`N$~YSЀc!a	EMC!F$;t2ŕL%ZsF"-8HdYUu}
<X$cu2>$2hq
2b2de$d$e\!*d֊f%S+
Y1д?/ɣ̋OJOsr-S~F&bnY	[vMtD+/neJ?70Jď?i-Ccʫ8T3\UTaj0tk*.W*6O0c14Hr`8Ђb+0MXJLWð*T*Ʃ*jp]'|*q'swX{T\hDsuf>nŽ;m0p?w .~n6>_3ƃ7b[ۂ_1<G<M<w3-b?bx'O2O1փ2AG{1ye	_VaRnBzR^źi}3eORq=U7h	oX%
%x1
s14D?E
4^hgƟ*GS!J,(կahEϷ(Uu=SGKLb8h,oĒ/)PP.$GO(]I"9T&g<css(܅WWC2*ۅCe{$]oq)?d_m6?bZK
y7$/Co/ZE"g_/#
`ɝ`rJ׊U>*ĳfk9ƾ0!㙪}8oEYoƳ|s^"asmBc6SMΊ=b:MD=B;`ǻC0{ e|i*(ړ eV"ߋ-4HB?6aFtuO˯Kr6	9-)d8)K)M^܀n+cU@ġy}gd748mAY."93br_*<#MraM4k.;]>W">Ծu>W6mrI}!g%Zܔg~~R܋ujmS2M(q>4M:ßz͒H=C9㋧bt3Ŭ"b4ؙUTd!r	9v*vM?%D
K[E?^5+L0mr,욬22U_'eaʊ>5wKwb^۱{3nXNc,B7F6_(!O2xʆ#R&l)v\Ie6R#]'ղO3`,
O^JE sZq7nܿ3X*O^ *I%Ļ˖ϋYhxߺSXNmN6V6;0
s.ߍp˭9өQ>;ִY#B+!dXMX,
q|onN_ T1} JEm(fE&?ϼ,%'h\~]O/<~"[љm>C!q[!qǎem)pgZQpY"*s.n"mNs;7vZ6G=5	E&VS5!I͢/<m#-bYYj[V_B`Sb[WZ`nmKKj	o'KM(˸[*)2A΍˅wɉ1.Ho<!fWef[K
^E\)+ڔ}N/8k!kuKTx]YO79O?/
;
 dK@+A?
:MnzmrE^9w1g_e*,6ؙ
zu-r;TQ,Uصm=?܃ȸ_NIi
JPK}"/    PK    A             3   org/bouncycastle/crypto/modes/KCTRBlockCipher.classU]we~dMTʗ-)壕6v7lPo<.
7\9)zㅿ GFls9gwygw?o8o
c0Ca#e}! Ň3,2CȲ#ɰ!%:yCK׉yִMoB@Q,8ZV.v\4jSyƤS=.]yF^4UᒿaLҲiY

kzҴVb2e,G_12D,%EUM[wa{i]05ˬji`lVK}HqI>4ZQЬ[t왎-ppiƣ[Mƌv!S5<wc_˛Z3JRH#qqtYFJwkeI=4EhǺy5+d4܎M;SvC+I%'oTzjjOBlG3T引F߲A%kTb=gdqT1oHHqBFJ+θN+_x25IqiҎ'NjkWr+gw1_ajxMASp+8g
DH^t(aa臬` 
 =Q.}H+=LGaRA

Q'c,'.G0N
g_DpG0/b!Bif>`#8=xn01ܤ=I/.
`}8ZyVYQĳ@CZ
I
%З7 ;'{dJMau&סz{	s5(*c)&LWLLoж' $^t=|wYw%F^Jn瑿72!ݹ_B"(=tЍ┗ {u,sM	l-6PQRë${ETC#!pÕJ8Re}ѹ\p_0Ǫ:OiiFp9ž[?"{RishnHN$byL>wnl;Pʳ᭨ԴwKu>S1
G
|9js	h%N.U~ r\FZЯE2goTBh3ns182}@.v9bHM4_PK*    PK    A             P   org/bouncycastle/crypto/modes/KGCMBlockCipher$ExposedByteArrayOutputStream.classPJ@}ӴƬQ[C+^< xM75fF_Y~%nAg`f
3o EBw8K oR`&mTԄ{(xxT[y*[Vj)g|"al.y*>WSii|*y;TFN]#C7
ba;E_(sa4uu@Cz/Z{]K~w{Erl}PKҋ     PK    A             3   org/bouncycastle/crypto/modes/KGCMBlockCipher.classW	xTlo2y`.Ä8EJMBЄ$P*̼'73H]H
kmE۴Vh͂Ahkknv9I,.gsSo?2`i^</L/xqx3VЂ*&U<SBU-U

ZZra
X+GrC'XYZ؂+!kÔA%i莬.0L#R@SkͭZ܈ZJ3zF;`["lmP۸6V6X֌g/_\baP3ce[L5n`3L2laL;p&7FrA-!L&	h&Yf"jhIbVb֓!r0ţqbhТ3	3LѡWk:8MĲJo:ɸHW41
tbZF#LTbՆz<z͈|
ūƌɌ0Le=22;)xi!TZ9COeth\˗Lth>k`xiҘ04BC+9-0旙1=f{vjN˺8iL->9M:ֶjfGjqSvaZ!yE#k[֣~LNQic|<tF(L\1cf6%f;/ICtLdi[fD5v*ئqҎ8J]:ɞd/HGZf4d8"3%*r7Q6!;;4Ő*^E]Oٜq
y'T>TcLߑHeMNk.=)~jם5]uͪlz(t2\(XٖhԘ~VNBIkE[HWI+X:Z/-O/	".J'6?av;ph:.Ό"^qIDTO++W+028R+vG(M%7#^wJO\igV'k`DJ{O.r`)8[A:k+hPp+WA+(ؠ}
RQ&VQ16
6Y?t>|cODꖼqʉfԏ~,h_Knc?.$v6i\BI1ͅ'P:ĚpȏsBWN^*8
O#'88LkY߲ڄץAY*Vl0\ʰ!aeMx7Ca.
U$U0\ĐB
LS*1]*0΁_*,DE
fa-氖4JU,U\0P ѧUTabϨ8wU=ep_`"C7×||2lC>\ggG7bxڇY&vNc8ãek1c:CÀw0W3<cv?`D/cCg8B2cdxB| 3|r5%8}5W8\[0B;p_5M=U?{
}F4hInt:6܂)BbjdG	)ǔRJJ,)%RJJYMs_)%],48_4]' , ?4EO?P>o w=J6oj.vgKPtSڶvЪhWVw^.a_<q{p$a^: |=x'<rԏ9l/E^/O(d`D<
ๅcܳ1Z*qbht<?XUxx~-7a|`zB+E݋~E\s9Lbg/~Wzj/~Łv: )h$CO`;4؋ucy{֐BLCmlyoi>hp5嬢Oq]T'yAWN(إZA4g		[h<$k58;9B;BEO@
>)[jXp8}5U'qҜ^'ԔmY䋋h!J{_fjp*\MnދH2+<; 8*\CGB, j f!#E鲈No2_Bie^> kN uXVG)WE{DRJ75{ǃV~.q9qEVy/q$_pnD*\~=Vf
_*5(Ɔc>M{YZ(|G~^.$Lg]Fʁ=){$wngB'YMۇSE^EJ?AFVo9UqXmE(Qr%_c_ c/\i9
tqDCfxdr	?\ҫL]Bz>ܲ8fY[9RU8J3pX)JմF;6]hRJqv@c#*(N5\e묓mXƅeBd6^q
XJחn
G!ћnfibW{L5jvS5];gO<47sCdr:24~Q`529t9DK+KÃ{J7DLpxw8Ek8J&JhMw+PKR}:

    PK    A             3   org/bouncycastle/crypto/modes/KXTSBlockCipher.classUs&KC2XC#rTL0)2ȘZؘ^KkYUwWiIzo<f<4ig4i_п/y?ɥ쮱Rp~ss>󫿭xX8ı/=8^ fJ eflqXbFX^_Jvdf-l`1?MȑHu9}s뾣7\bzd-}r*=뚶ot&5
Ҥ;yը{fhBxj4-S@uF-钽lX0\cM#*RCCyݰ|ӽ5ۈv5]6\nXQfٓ'fcӳt`;KG-6C1vk*NEtyB"WEӥ&VT9U
L+[l#ʙ/+
fY]v,8רn.q˗e`vP,fXZsZzjl/S]MGs# i}2OպaO8]c!!bڶ:n0O*GjN!pTN1j5--i`7(,}lTMpzjb[#6y/rӻhupǊzeobx:7ؖomGv5=ϬHxc˦k
z`+NSi߻40]]oG?"*;iT<*8☊gU<yGbBѶ9ݺ];oZ6PX5R7TlTë\{c̊ أ!`{5w5Ƞ3а	
'S
'خ`SR-.j(G1Iu<*L	&2h&09,&0y\fI`
x	LJ~܉qhha-
;?iXM鍩\>c4&@y>G3^-q1mDI#Ib>p'o;(?Z%NNIZ/߉';qO>Cy:)ջ<x	QdK-FXnoWJ6~!`˹_+ʫw:Wpnb+:)lr5h D{LQ-HB$>guDJK"NĴ,N)$mwq=Vm
?ct+11أ_WŔ1'I}R"/O'xna|HwW38餸w)
tRYOf8Q*'ٟLw&%gHfGRwH␒R˾\wJKK)*~Rܐןg>6(dr	=b'2=GAy	WnDrpsRAHpՕCjJeK+)AT;7UᣯIaOm)t`Z&afvAN~O}T$Fq?)O1E4|z8oj9?t8-ApGQSr~z)pXR?81]QoޞD}	Y}PK>t    PK    A             6   org/bouncycastle/crypto/modes/NISTCTSBlockCipher.classUmsU~nӴJa,"
hUJ4V6PIi`M5~t88;KAoRsn$i&s9><ܻ= [ËhxY	h_BrTj4AKJDhgO䝼7JSG<*1	sȋ̚VČ8VBًؖf{%HDPmȳY,[9Lg(V2¬UL[yǴ%tθq'SH,o᠓ɲGN9YhWN.^s'fYӳ/\3Atr	ۦ2\yr2V-޾-)4!m *%Ϛu,+1
E\Ǌ#L&*ONIlb*)i)y
`-;Jv֠ mT
⼚9m͘e+XE+)DM	g޴*.i}LV%V97kc]!eѵ eKۃKz]QF$-xn4g6jݻ!Ь[E7cJ""YE(RJyd}Kt]|R|VH,XT*zUbC**TTPqXK*%F{
KУMW+Pom!k9dOJ08ݞߖ'p3X+=ЃxaD ^eA{Cqb
9Lqgβd>X|b*(p8@7Q IY\m\I$YLw`<qWy.-Nz2Ϙ--
vBBl;fNHfhZ#	YoñUb=+Hn#Ll蒯XW|VVpOb&kn^P2z{55!}0j|676
z$$aoNƋU/7kaAi~|C2CE1úoWXMsb۰D+]i~INٓFbD:F$FG<B+ XMA41C81-"{?v׆1!UW]THİt!Mg
}	õlfXoOJv?$a]
twZ+T5ӺTh
KkVNh{v4S#ˏW^8A\ZPD}VRm&UR}{h/NI4P

Is?0to30H)ѿB\'JtKe__L)ec=?:))eJō@ƆgV@7bVDζJC;ZZD=e6fd	E:)X~l4QYw@jHq4n~HȯF6<&I=W/Ui*JS\@Su~RFh>:tR2
"
iJ5OMQleS뺿q	FK>ޒuI>DrmƎuhlp ,!5|3PK?z2  j  PK    A             2   org/bouncycastle/crypto/modes/OCBBlockCipher.classW`Su~++\`,$p/ېƉ
iq I,]
H2)ceK6y'm4uc٭{_+;翿$)}~u="*&]&6L<l"a_ྵ}\_krɮ
҉X2]CN(r~'Kf|-4K37=J	5+ŎPw*?%qB]M,i7KI%i
$=¤{FC-m<7H!FC;(`6=NLڇ\փ4h2(HnCG
˖qGZ-Fo[lM$}oÇM9ùA:ACmG΄3Y>X:tצPP	,iK`O
3P/Gbd"D8z2PGs~8Njl2wTi?+JŲ4NJdS8GN:Afq'{zrN};m{RНϯ/u>:}2>,؝r4qycro3uv?=PŲP<30$IY넜t<;4O{C|,>DQ#v6PSK4&;k4H;NsqD,u"@2-p\YK|${R%{|s!P
TP.'ID'|Gc-
H7qX}!c
jv:bqrpٓIǩYAMeik:qRt1M'lj⦥ k}\^b53dɐ\^78L\sCIEŨ9	xHOŎStmKBGK{rYCչC-T
<D9_'SI`S\d'[%S2(wqy,8.88:TJɻn'3KINVeݴ>>'RNL+XnXe2XwQ;|߽*T|/
Ǜ6Y?prͻwͲ6tH/֕KREv]
.VkrH?^̶gҽ4[I2r1X4{X,5Е֌ڪ`r:Jq^Xj'A[^Ρ#Tbd93ʒ^FQNEagFmŀc@>IO8l`2pg|1?jก3pGwBz_MúŇlQ~P;~px!sŨQ*G֒[3+s+oh8xh{ȟ'h<jgH>pLG-喘ЅF,!l4#h-ahb~v0d C!0	?k!c؇?)(eB''Qka?Y)YxA[Po!	,XaA,|>ư[،>1a$Z$,|,FC)|Bbg-[x?~§Ep%eM`'|8q_exï0L0\f5_e:ï1:Uk`
o2&÷O?i/pϏS_?NfgaW?^f0p'=?g350-3.2>:~_2?2oE|wl+]nlU]AxRwVpGl3FXI:}_mXh;sx휢RHJ1,)M(Cm~PE\>o[ݠhZZ#dA_&_vXR^2G7lL=kx. ]\[_UF,auhc괚<ptTT'`m3Mjx55ud8l 	)*ρ'n y:^8pAT3?P%(Qƫʾ /,+oQGS^o--o	30*|L7yFNr-U:Th߀1&jhsi;3FqEܹEfSh^wwv"|t"+xy]'VHAqS0m{~&whyL풹S뙰VVU
V(k`G#+g/$\[=x,qvTi2{騰he41&µ1qDRMf8%
ͶŒ<5>Vwrc7s~9	q4Pnıu鯇Q0b2BSԐ{0iwUl}c"\MS7)R70LW7jqDng5?
NSy0ʸ_Y]!(&c$
,:t[2aU;"Z4:HD&HƧo}3j/'6'd{vO׮,"9Q4ea[tNHVӥu	xls+y̶Z=Ƞwm(yC^٢C2V@;XMv=FQÝ?q<ǽqqϹ 
ra[)߹5ђɮm,8+0m>NtAB@束,
ܡjOFIhĶ`жf3P6K>J+^UFv2uѻrdė`Ċ3M\IBա| 4iMz@FcAZ$ /$NvI
D:Iq,u@ѮR$D+lvvkA2~kЗh#a.#/6/e`}&qUKf{hd4.dZd[UC/"Oz}--)̟s;V:o/=OOrں /Kdz\GH^,Oj\4
9&0+,;RwjT奛z)%V'rT<E%5%zYjP]MBaK9mk7]IgX>٤GQd_hU@LMt-ژXK),bvvR:Sȋ`<_/e*@Rzx:I;/:4\ŦYy#fP̻:mgL]xԫϻynL,R-iJg5Ppl{qqXɑYAs.*Xom{<nM]nqCnq=b0JFJAWs/M_s"rLiCIK&Ccʘ)٩8 /mT68L˙wӜxsnwV$x?䚧DO
ibPn"rъY#LMBg0i=;i>aqg`{]sjGŲ$\g<)D:sdgƘgoFg|V	[5 -ˆ6mɲtǖ7E@cye7ՐJfR^uPK]ZW"  $  PK    A             2   org/bouncycastle/crypto/modes/OFBBlockCipher.classT]Se~6lHB"Qؚ/D-JQ
URl!ɮcgE^	bzβ yyy'?G'|tk\1ݴԜ w8qQ'YMIFëT~Lh{W)el*
%e\)-a%*\UtJ~Vӕg*UK+%K@"kJE-5IAڬ5ȫִ͂V(Ғm#{C6bfzY?\'RemWjɺVA/	?BZFO`R>Y)h9ÆLlE~;;_XOf>Q"-MM(fհ=ǌ3klɳj)o5tiƦTxr2_!z`}ˉ_2L]QeLÒ.keg{x^"E1$EgEpvM
8b(>
򝋤mJQS̍S{Hxtmv>*d!gIT	hp$JhCC/D	aJx	~	=ehë:{KxTSȉKo2L3$f.u?Fpaaa<ĻƐ[7N`W1û]ç?^i}uHYM)Ǩ0@5cldlKAppVw6nb;'4bˏ0ՠC5|ȩmma9Jdm^_|[Xlt [ĘQ?M
/M	|wyw
נ\zv?bq&{=nv%s	']ރ=tu
ODA6w
nlshq;ZLA8
brGOΑ<N✣) R4"@T&9dy?~Y;b^X]:yy:/c6O EY+ͽ>o<X|Ι_Q~I=L/q 7.S~s}Escaj%^];N.䤝(eBA_dC#?PK*Of  l  PK    A             5   org/bouncycastle/crypto/modes/OldCTSBlockCipher.classTQSW$IVSh@SEm*J-fnBtd
S;ҙ:XgЗOXԞ{7&hsϽ|gYpy/vyA/x[+ܗvFN\ONѯ 1\3'Uؤ拧Vp,9=0|q(RYUL(x2ѯJj2T3Rp(Y:-ZFNbVM=#	JJZ5S(Vɟc	T\%KtNfb¹ڲҸ)Uv`	;FɊMy/[Q2y+E]f[ڢ35+K&arò?c|lӄh eXCW5VIQCElM,uz,rBT35kѝPg5[71:#jNTYdRx(e-jf^wpgty(Ǩ6qz\'cC@hۉ7cc)9jftjnhPB(yF/Uhڤe򔌲Agvk"V%UBCޒpX	$D$D%8<7"@O4u]j@׌4'ed,f;̼ @W b 8~?F2 g؃s>|L9	|ǻq̋cO	f.23>jIL0s$ާKk#sVL=tp^zz"Y%clf7 Y''x4.Wpq$H!t+˞G\V0O0O-/Љ	g$%;I43xQZ_RpgG0ʒxir3=8|W|*+2VSY:~͝in#7~E u?okBp!W#*$Yd,{vzӳO3#wP#!ٗӎ>
B=@f	#Dⲷ^y-{xi',eYd"թ=-doz t\
b:bb*LKPr7<pD(Qh;ziEuL4Ɛw(OIaM,aܯp,©Nn3CS]ujzdQ+5]t;7k/v0\O_B~C|7 DCNeyɩFܢ!%-Ie|`IAis1ːWsAQ%NX"rt'fq8'X
]~1Ap|)
Рvo`w;߮^v#PK/#i  
  PK    A             9   org/bouncycastle/crypto/modes/OpenPGPCFBBlockCipher.classUSUn͆E-J(QZ"TZd	iC68G㌏Oƙ>L)bxuj
	?s NF+%"d_B%2H&KF1u!5:N;b>'1A,_51K/QN
閥W3fJ󅂙9 B&_Z2,:1cV52Vd'CKظl-6%[4177s=RșV^Z/EP~\-U拹Q "p(_,Uauۦ]^2-8vC@b.,^reh}1Ï"Mۺm407UmYSyZe㦕-LjF/#nƜk7cm}(쥆;E'+6o_6F!i:V)Yf(,lP8d2qTFdqBIxEF&v
Ma5;%DE"ךr]ZJȲav_{LʮgaPdxO)MA+>V,
Z )cDP
Y!3xQЂ3
xU~ 1cx
DQc&Èrc!1q[Fo2\(P e2}I0s^J=T"
A|>n},3z#)$3{#Ec[2aV(qH[U3Z:VҴHZŕ,G0^jQ(g[od#towa:{.aEe]:ǉ8"G3ڴX6$~u\Xi*mOxJ^L;=܋dj
uO^Ŕv39pj~ΧroB$r?saw`6lo
n'uC5I1 uy*eIR%.p}.mx30Oہ"THבpU:#֩=Urj9ߒ_/%,篗;Qԯڬ<

Uk4n0kJR8%yovgB>uG8Bc_#Txls\Gz)B%~O9#T%Fs{rnvDssY;x#]qFVF
U5׸$~ZAf }>qyK] nAWèfn&aV&Ȫ\WFBN72凜^d:-kwD^3An 
PKM-  @  PK    A             5   org/bouncycastle/crypto/modes/PGPCFBBlockCipher.classUSWmK ,рHZPLmZ[iQm!I7>O>K[@gtm_3N7al|؇:;ιn~yQ)ܥ(/ŞR<#oxVo<%@wɖw?\cݽ䭰GX6œq]4=#@^i1KtZKF)ʌJx$R'5"jj*iϤ.NgZS8rʳM=#J
ӌD,{2I\]yaM9N~E'[i~&L<Ջ\d"Q?25:F*UK5L+ÉSzljRK=TW4`(V؜gT\w
:뚊',<01I
)=31ZЬN*h Wziɘ1Ve=)\?j#WD[r7y!e2vI4&tFʪ.\hrمolطGno8QkH7Nll
3eW6n&OaȨdbK2 ɐQ"YzdP*c;d0`e84:eTv.;#2ᘌ8^v^fxIS"8d#nFpC;2cxaa؍ax80pC<VsϊQP'N(Ae$Q$E ~\%AppL[iېmv2k[iwVx2~@w,"hD7@-`j JύbXn4~>Co!+3q^d^kCCd'`)`ɛk	
B
ylnk3g8`֓9-*hװ)k񊋸49;[x`qj.ҎFҴNjHl+H^H9"ǖ>^KEOktⵡ0oV2;2\BM3wj|;4P;gt\tO8ٲbınFtМ;JvRw[x앜W%,LdXH'\'l6=y^<D.</<@cViM$Aʃ~>^j|fݧ?V}ʗ2n3#MK_.چ<E#ׅWԱiG<t:&Θޕp.[JUWZaZnTk(GR41$FCD=&pl,)B|:׋QeH|~=5Fb}좭ꚩgC~U??˚,zYI!uHbY^RlZYe3C3|drJQeMLbh0Mh:/D.ߍ^s%TUt_+N+3dnzYZٛg#=KYNK:ﭥ~UwxQ
(ٽ
HsxVtǎ[;ɓuROn	yP	ߊ4ҘNcg,jPKbZ    PK    A             5   org/bouncycastle/crypto/modes/PaddedBlockCipher.classTQSW.d7!XEW%JL Ԋt}ɲ{	e70Ƈ>8gx3j}tܛ{wݻǿl;4Ni8ɜ-I{AK"V2˄qB80 cWn5g0 dvyVZ#H;ܭK'{cٴZ,4	̢pjmDW]aZ)򛵠
g=>ML#n0wjՓ3n%_r"\+eS,"4N[f=4cփ DC[rၘ?m=_/x
jZrp~Yf`NK-Ȍ͆k--*+S[ysQ0+jI~˞[mA's:t}:ϚiZ7j|a	oۤy*zUHx_E*N`8=3ʠgn@Wʨx2wv
FKT:{78QD7&q8hIĒ8+L$ΠS]J
qCa.0WZCj» Ff1*A#$2ݣ&u4ksq $/)DJaM[d6⏲8(by,Eڸ-;
:[Kgg)}2GVCN2FSz9D5
>2HAD(+"pdsJss܊vpb);Oy2}s׀z3N5Aߍ+l_d1]eu|QPu{ףZQ6ݑ
|"R$9.
=<''Kzg|k{=*NP{<cyVz.%run1+nrvCk{r`&'}K{C   bh+xKve'JErwʥOÐZ|]з+FtN2!Τ*mz7A.|wn&b_<
Q=jH>{H(헤-3v4`iw="eEPKI
l    PK    A             2   org/bouncycastle/crypto/modes/SICBlockCipher.classW]tg~ffLJdB67	+& -`Lv͐vJ*ЪQR*n`#	x+/=FNvps|;<	` JJ	VKh.bp`$6
b&5 Gx]M+me	h
2x5c	7Ob *^XsGpk) ?[a#-悱AWo
ذq2iU"x@**1i(BӃs<f=R|2lo<U孻䍒ɨz<UYe$adF,RqSt:6C3*)&%t&WhSTCev!bz"|Ǖ2|L
.y5_ 9ORX|8jRj32)2*V:i^WX	e6rZ^3t:H[Zι g('9
+lS+J4M!i5;~5fJ)r$VV$糚*h$[U3d$W]=syEOl*:@'FMdG2y#jƤ
yd1]J^QT~p9-IS~('gTexip
Th2#ti93\	wN~T5>>$(k9e1hd^LHiܬ%.*Qz*?
ܐ R(L*yDt!b/N]"EjR*LVMP%;a,DH.dҶ74nZ($L-UFC}KglR[e!wg|~.*@wegxf&$pXYB[bP-y9FF+dᑱ2֡NƗᕱ>Q|]F*Xg26#!
Ik*bAc80Đfv AC0pn8§Gnax!ːc(0pUo1е>F83pq9^g8GoL_E?D_Vj9m vAݺtVM;1O:H
<zN6N9Fכ絨v-ZyaPu	\ N j#;x+#޺y^DͰ޸mDV"_3Pv|
'|g]ƇBߋq.~H&c}轏C>8~h>	Aě
ȥIQIz74a1y'Ȋ
{iGxWfn1A"j;)	uGt K5oe Ds~({l%fBϺ壑o˙iГ"E##~vK7͍
HGOx vz	E;{mN#@^gO"^gٱS(N
S_9B2S	n?2kFo Sg<;J473_ku5^k;Jj//d6*%>G?(Y&yCfe٭z.x\=Xv
6F!k<cy*NK%ãU
gn.cAKDZ=*8o~TJh
W8JZqz\Qa8i)aBD.aic<KCY--&|
7MDL<Ad5m=;<Y۳#1ʢ NdCrǨmoF$D[D{-͖cٙ'Z~cW++/Ż]3doϳo%׸#m7@ե+
pݜS8熻ִ;}:tR#쮑Hs$Ss+YרHG<?_g3TE(]v'.SwVgf<^25ͯW췾P@19g
!q=kQ{VXJn2_]>/LťR
X:
EA {xP7ܲ.-_5YS80k32Xf\%rgD1y#[Ƕ>oeiY2kwg㻨7RQ~F"5R.f"R9ܚ"Cº)BC.PKi    PK
      A             "   org/bouncycastle/crypto/modes/gcm/PK    A             =   org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.classQNP]gCKa@EE`1!!C2qәz2)t:=cOƉ!~_x٧B|zYk;ۯ/_<=_{`v7
_hORjGQB䍡yIِaBfi"	%_ӱ1Lmw"E
:2 VQ&ǓFitACXa4odt^ynnT;饊bBv rXU9.9it`w0a܂6f1gnh40ᖆ۴
O|Dщ%?L2iL2EӅg9~&agV"K#,~iDG*pwC7G,5~o:%[]ceBXE'\+MePKH)    PK    A             :   org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.classP=O0<'M݄ )P(_[^:"v UTLdrCGHYH *~ ?
`˾'}~ A7*Y7aDIUT*
Vi2M0gh3ORD2	lTj˨Ph`n(iYL/"
E*1Eb$s_:A+q_صahA6,8Xay9`أYN>Wb墉;4Bqbt8-PK@r    PK    A             8   org/bouncycastle/crypto/modes/gcm/GCMExponentiator.class;o>NF6
h'0FV
͛ZQWXY X2/JO/KLN,.IO.,(OI-OOwwuE_ L,@43#H PK"P      PK    A             5   org/bouncycastle/crypto/modes/gcm/GCMMultiplier.class%
0:ƀ5L 4
cȑAjPD\sI X
6z*v*|m:KwB8)՘a=>EaFn5J
A(@lPKG      PK    A             /   org/bouncycastle/crypto/modes/gcm/GCMUtil.classWojgwI׊v"KD)v*-iѲnM9dlS#ִ*tdR(Gt,=9(S}%ShCC^4q7;\? f{y;~;I>Gbc+]8:}${sP(
%W(<JSETT0|	R+d"I؂Ƣ|;I\eK.wѓSR<%)<p))<%O6tuNﳓB,!r۳?,5?{xiPt.t^}o
;BY weXonGH=j+Z>߀.^j0gv\1V/gO7&OzzX[=	Z9(x4_ܬdV+LYY#fmm"[ݾ<{dpNaШWg<DuP~od56KFsYZo5FfeFo4kpǰ7*w23`V+7!6l3sw5azfu}|Ajkؖ]pj,*꧿^Q?eL7wMV4Y)ƾŴ;1vEbK@E"P}
d4&1gG~e;ԼK{ԬGel%ʪF*57SӠf
wf޼RYݤ&t6_Z# ˰,]
9'2`cq,可CCd
L/^a\%e=hyS\
m>*WSqJ
P{}Gg
*PegŝT*1w7Ov߹ekGR6ʺd<ْ38gHtZm"M+w%}"12OeQx-ZL2)-ޅ3).%VZMD,p]f}v'+y
N sVA A}vۧ:@?Fb<*좯S!ܒJg>	T99g#~Sq'>5GX׿YHRb68r#唎S^<VSДMy;L4H'휑FӞIiI:106w}#0Gd;lb
ͥ}~.<Y_Dvf+.Ǒ9	'Y+0a,=IroTMS!8Aq?V[)!m!'zB@;BE[۹Qџ;"8·Nen	7
qtM!<%(F]fZg[h[TbHWq"a=6{|<˱5eZ6evԼ>tD[옕nloem#n5l3!\Ja;bRBo
oY[[mݬns~;!E@M!iC
^-GmvvI46UCޏ/YO(/y@%g(Op414p4W'}	JA`e e(캣
"D:A)nBrǆ}o"lacڡ##%0b4CIɁaNT
I*3Y2 /#ą*^`o]V!8boCpWp
5옟&T$Ak[2~m'y٧)R
[ bgP3<g>ߙ _{E
vZx:xϣeGo>)dYadNeޖ) P2 ]IAB:ZQYĬIJ)2i4Ȥ!M"|3aJ1ÿf˱$/urTK&FNnmt
a^{fN80d<W@<{)?n?5tcgmx)jzZ̴E.""BB"n҅	+"Wĭ^5	kJl&AM	5](q#K
dZމ/NS{ёp?w?>e<M;	*gkj Sxԏ0'׸J'%"#?T``Qڢ4wQZ1&>f=3NڣT}hEZW9_0dzFN'H:󛏤d{%gRΏ:ڢ7v-k
ע5j-KSjK*Ӛw\ݻi]ݻiCݻNƺha(oY?FEhGυ8?
7wr;9vrat;hRbIIJ^b5wzkmZjm8z(bR+PÓEI8JqPXR#PD\@M!ŀ\B]13 PKu 	    PK    A             @   org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.classRKOQngǀ VG[!0Qe5f`کZ㆟ƍnJ1\+omDY$ss993_`B$:W%1]Ir3O~tG+S5fY^2<xڨ7qL%ͤD͞*;]RV>K^`chLCoZ$dhZjꚞ&JT'E2lb7-kTJc2N[ŬjrZSWrԜm5Ω3b"C.!-VM_?H':צEu
2N8%MFHighE?Gah{sU( 0.AM*8vtphATA#b^\@]qC?8.(gatA-GKkNI]`8GY$TЩ,#+Ŷqu1!K `t>_厰i>b}ɳ;\wV
BOt$8$M6^HBw:¾g^c6&+!t޷Wae?]x2klz$ބm*3
 'B3,H	/ V0= .lX(r;o:*wfͅPK}  1  PK    A             =   org/bouncycastle/crypto/modes/gcm/Tables4kGCMMultiplier.classS[OAf,e-JEJKi&VIv,,&H>h	$c|3&>rIAwv9sf2ק/ p!yO0%7;J$fC-s2mv7dh@ժ:KG\1ȶ_iPtݢL XY${MT.V_kxu5i!_N3~dFnV9]mV꾱Q׌;l'uRYϩͭ_
h,[*sʡqrq811!MC4ti
:4k8% c(RyH
H	0)J_
0>SCYq*2
FVA}D+dCS?4	$00&(āɏdnWv1
=Dja-䝤Vwb4y9t[1B/H"W;xzL~JrzK?v@j?1`u6?ALv"dVy> A<ʹJSq^mJU镅U|c^<ja!tqCAL缏oPKlx    PK    A             >   org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.classMOQ۹әNE[:ԑ?5F%$nڦbąƍ.Xh$7
Ϲ=sܹO?޼0s-cxX>\,tL@UWu3Q5өa=l;/+RV,Ȣ̠Yxo%Aj^m\J˕9s7x^/ܭHej2(ՋriK+v\[gZzn0-5UoR/VVJv[j+-ZZ.]tult;,*ɉ?ZқJ=h4

06,6HH@CFF
q=0ldb셙aeY8cacQFqY8aC.AR7ڴ`Yi4KMѨuRVU{
ءn/^^b#zsWk0G&ƟAn[e
:sASL^8IT:vdُԴ>)$=9}R>'y>r)Zk1dCm,q .{Y!2[o}w&>CRxO|Wb?Qku;xuΆQs6}׌١a*C-N'59.KDdXd$$#R&cG&LL*2edґqɐD&;yy{< :#0&#IH1Ҍad	S=K^3a2d،#0F0j8K?PKoQ  <  PK    A             =   org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.classRNA;mn E$%Dm,􆥭ubM01#7&@Θg
$O~7ٯ>Ɣ 1P%w8hSIDE[HX9V*O
n;/rQGhYL<Y
ds%*	)kJHhK檩g\FNʒ|>jefr)Q+l*dX9s|1/+d5iٴ,V弾OKz&ߚǛV(<-j%b6]]#K_ϙerOEv'ddxdt8#/
6T8!¦BSq
7*: 8N!_A
z1!
 [n/Suqh	.F*Ƌ"+Nј )k[SC|${AGPr?mנv1l+i۴."_c7fafbAj`)P!0<{{f~G7Vaj[oT+۵=C@g+$óFfCnԟc,\\1QI#ʈ:4uD(yc7mik9Z[I|AZaIֽm4M^|Ak:Bqݰ1>Ƽ@1=<~PKw^  b  PK
      A             #   org/bouncycastle/crypto/modes/kgcm/PK    A             @   org/bouncycastle/crypto/modes/kgcm/BasicKGCMMultiplier_128.classPMK@mnF୶AD<؃R)҃k[П%(?J|P[wٝff}||88g0FN3+c9/J/5Ce(x<#u{Dq;JhjZP2I t$gқ/d2G"KoU}Oǧ%}bI]Bͱ±ʱsP᠂ul٨fcu}m:CUҌ
@{^.
 YyhLYOj
V
w݅)XKLҚc/PKC,*    PK    A             @   org/bouncycastle/crypto/modes/kgcm/BasicKGCMMultiplier_256.classPJ@=Ӵ&pWŠvT+t!Jj^Gw*3̽省{Zwr9+x܏삁]3])3X#
`I*II@"}N|C1'Jw4bƏX<
e(.ݱ/o:^pXsXXX1Q7Q3QfUl06iJ>,0凼4c8ޥ1tޱEc{J V"+OҤ`%1rI{B_PKHnT)    PK    A             @   org/bouncycastle/crypto/modes/kgcm/BasicKGCMMultiplier_512.classPJ@=ӴͣGkcᮦvT+t!Jj^4Gw*3̽省J螡
$sVzf(e3XSNx
*iO'd>f>Ȅ,ӈѣx?>ϝ=z+/*uk*MTРc,4l)CpH=!/X!NFPѶ-9M)k+]vOҤd)1rIwB_PK*    PK    A             7   org/bouncycastle/crypto/modes/kgcm/KGCMMultiplier.class%1
0FnC7pPPRӤЫ9x %z($i{%L$lR5ZMi6ΎG·+?85*GY[=?j/btȱȑffAH@d1PK_l;      PK    A             5   org/bouncycastle/crypto/modes/kgcm/KGCMUtil_128.classmRMkQy3//ӘHlAN*Hb2MvDD"{EpƍWw"f${λ'":A4ƜBb#,6B741JjtZ#mN#vyy2
z4vjhﵽ+S׼;xҚߌ4nthkK1a	;+Rm5{Mo3
|鵣Mg}\0;5Z
nĆr:]g@D ;6eJ<TT46BF9AE-=6#]zyy}[
|P+8C.E<] SQ{G5PvHU:f5ݩ`f5/!}P1_W􅺢<C)2le((^gobXNv3bZWXى23p
:%ܼpdiT<nUshg%}8p-"Fyi4X5 (X~J)XOt+$eڃ}z,@yoS,*{l֥|ܦ^lax}ɟ%῔6|}"$S5u̸0A2֫iC1T?(f!2rc*7rboRűX[1Rdzs\j!>y\l0.
Dô0môMSPeUHj`FB5UMISyi\qy̝E	KU1w.v]X5LV	PKt.!  	  PK    A             5   org/bouncycastle/crypto/modes/kgcm/KGCMUtil_256.classTQoT_۱Ӑ4
hHSn
VjQi&%uG}'KxbBh?;9#"'O!uvB@jds_hC!Sng7ZTHYQ\xK*
xQQV(:>;WwBvvZHQ;=h#4i)w{;V7èAۭCNsWO~}/N[W^W11Oj،AA9
*A=G1#f$U-rhڢ)zu
'Fa'D|3
pVD
ɤ49(IA""f~rLlчW湚ꪾ's14W=M }Oa'J4<DjiIJaJsݼiŴŴŴ@ߑΈ?J.4<[BP~)._ƜC(-R	   AfP2	3(AE%;t~/t$(JT<'/DeklhؚpkV"5'QW$*/>
JYYK˜<,f_`|]	lnk}i1>rdiR|XɆ$>ħś"M$g5YM|Vg>I\
"|:+A8RSyKa>eنqx5*t)gmyLSOB1bDi,Ou ݒ.p7Xaq4]g,x>ga yipK%g"I`[*8txym ?j5\f6\
_LD7t!5-.}*_CzTŝO/=-l>@	LcCĚL&/l?y+{J
4Rʟ&L$>&>:N/^䅋LlPKN%    PK    A             5   org/bouncycastle/crypto/modes/kgcm/KGCMUtil_512.classT]oE#^Lb\wՒTm*T%RKA
8VI!q*yFB≪E ?wTJ¹v%Μ3s'?)
2ǯdחYu\ɷֺkyEĕoX^`7 jOAzɳy;Q؉7wWn[}NmS~`P
{7Õv5hE[N;lm6p
ol\xZs'
:Qp3.vN;n	`܃Oۛ=ir,C`lJٔiܦRl224FeHh^KKQй[!{ݭ~_:̯h6MK,
M^#"jؒ.7L3m6/@0|+,FI?IFo0pyIú7xa{FsP68P3 ̀4o0fy$%k(9/0f W$ou}xN7yyL&֑9B`e#rNIe9ʱʻ誒&\5)W]5Z9/R-TōP3~?2fl
QX]U%iiThBNJWI9%MɲjT2ѴȼFYg,U䉡++5bŬFӨ"f;
e^d;@e8qNfge8-]`[cWƶĠUp^ȼeY覡ByK{;ٝ]eI_ øWKܕERg
,Rea"H?r#'5r

#+rDVt9%CD%^?4q7ZDz8}%PI9(vBV+sI+褡N&R&"bH2&L81qd$8-=1F[8s;H,m `bO%c̜T̐1MG>#op'x`(	_%1w=es_eq1gzyiQF~9S tM6\BWЕ?|_eW$(7SEđo/JBOPKxLR  j  PK    A             D   org/bouncycastle/crypto/modes/kgcm/Tables16kKGCMMultiplier_512.classRn@=8<\jS <b啗4JȦPłP Ǳ"7N]u/ vl!!`ϯ  ܱEgsϕg	eT=d)#m3d"gS׼6$}3BfP`0fR2;c[v#nv\R?ϐ]uZ0V0;+dݑvucòb5wCpVgh@e|wTo'p928sp@	
)0
9$4	T
Y$38SYQL	%pV*
aNh;]DC`y0ONt	dGoVFĀd B$ :7XA'c[MaTd^ǥPgUFMf
ziBLx!{2EeOxˋ4JsPѹן00߭W\o4W(U_
3a|7oUUZ&j|5(`r%cPK=m    PK    A             C   org/bouncycastle/crypto/modes/kgcm/Tables4kKGCMMultiplier_128.classRMo@}Y.M|ID=@{*@A`ȍAA/p/ n\r!
!q_A@E3歼O PbH|}[EN ÐXM^^v6fAwވҧeC)|m=סT3C珮o3g|[ȑw@t;;WjX}qHVqŮl`}M9p898q7A	I0$LX
l&ti)rKȦq
9gUpN
-gJ]hX!Nҧ)':q@+;bQ|Ps\~~BѦE-VǰK*WKꂱרLV\"U.$n(iI^$@_A׎lCmHc|Ԁ./lLe7sP(s'"g䣿]ee%Rs52	%?PKR    PK    A             C   org/bouncycastle/crypto/modes/kgcm/Tables8kKGCMMultiplier_256.classRMo@}^`h&|IFr jq ȍAA/p/ n\r!
!q_A@@o7og[y۟\A!er
9l!8_:^kڍ!
slܵ·;Mq:J~u=ԔWV^SԃA:v?]0Ej5xnARs'kPluWZݤG(,q(a@3F)`@5,0L
(ᬄs筓?vZUK$)Dǘ NvieE
q~jϡ xPx寘-Xt_0VQ\~u<]]V3+2QH1}J^(h}Pf~!~ҵc86ݐGR)nOPԅYyd\"ksq-KQ=?YJ01M~j@dKfPKx4    PK
      A             !   org/bouncycastle/crypto/paddings/PK    A             9   org/bouncycastle/crypto/paddings/BlockCipherPadding.classuPN0<ChJ+),['Z1DB(bar˸8N8Uj< BPÂ%;YNvi0v4}kf8;)8Ηb%NZ.u)oRaܛK%)w/F[e>[	kҙ)^U/Tt*>|벛CzQȇCC2FmkK2O΢NK>o(\giT
h1G{V1[FGJ#" PKX    PK    A             8   org/bouncycastle/crypto/paddings/ISO10126d2Padding.class}RKo@6/&}7@CPHb#zT(j"$ic[׎j9 r$rPˬRJ-fw<?4idB5ҏKFeZXZ\*,l![]!	MYCB0m]nܳ
#pm=ӢƖ0	7Z	OU?}BWf}vS6~]Ǫ8g"S.eԷUgVLC͘~=9DSP0`HQc
L0hwa"_X?v-'r7gɊgW3A<	f38+*&qMU\B^UߢuS{0X7
z9to7JVC?@~!dcdB ITt\14T7YF ~YeM?JXo0kŏ(|~PcoO~Z{I+BF[WKQ'i9-a~&^c'cC,|N`(0zЀPK_^    PK    A             7   org/bouncycastle/crypto/paddings/ISO7816d4Padding.classQoQ޲-P֟lj	($x Qk
1i<-/v,KS<Г^<詉&xKf͏y~\|(c-	%4C!^|`HmL/	k΃ʽ2Cʴ$aX0r^A;i1;$>=x7t|!}YAh}Xf/tan
ttŏ;glu0G/*z]cV(dnm$ED*`Q`I2C0 GZBq8h5=?E$z
+Bhuߦͧ1дݖv9p Ԙ=NhH&/Cs!QiZ%Dl*T%Yc9e٧!9m#[JXk%=}:^Zc9VI+~Ae4C}%IUVWSyɛLd;]x[IhN"G5Y5e8UZbX;|C^V:G
$cUuPKk&h   5  PK    A             3   org/bouncycastle/crypto/paddings/PKCS7Padding.classQMoQ=ofATpb&J"41]
3/M?ҭ7.tD+ MKǻs}/ p594CR}l5ml{ܵ];hPfasAj2u$]!i`qy9B9kimQ=sR'EO{ MϷ7rk?vwu6[|4O|t<cg]~LleKdx?dQE$	I2R꣓;ODwʿ#Z't35>U@B$TP#x32$:n<]pl G QDCD4YFg<.C$B6HD*X'cuɰOs6aI|ȫHBH`?ge2ߐXȖ!|7dD4kiL`EE,A%E
JTUZPѤpPI}Wd_fcCdJ2r2Xx_('+gPK	%  8  PK    A             @   org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher.classUSg-lQtU$(^B55
JZd$feN8qTG#Js6׊L'}s}gwg N+]8lΘ%o
hm{Z6;QqJH+f;ϥiW@G=lSʼWY-iR\glL @	&TQaI
sTTaBf%Υ4
TtVh֍lX̙i=+@Jjf4'fGjtLPU{X19Ԍ<%#U9ISSs[(J$dX&CMe.5Z)yЈIj[17552;T(y?ŭ	}.HZ}ۜ@XHFB6 zbDbb*ET~.ZV
3ZMWN켒IEܨPzNkPىz\qmWƬn𕾑|I_kJYdHTy 
f:.?eeϧtE5b܀3[	h,VsHvZ^#漖kFFɉ'bD)"("$",∈"""	88A<+T]k`c/A^KaE+Kםs@`S34Lar
Ll]Mh	l[1\ΛvbVl E.\p1	{`	Y(\ބ[qx$lGD&ƽ-+1(k
I؁a>}Ǎ~\g1b
7=8g19hg %1biHxkD/Xf6Xb^}JOg٫Jn_Ga/U?@E:NshVp`h32fU|(kmɇe<[a'_)zK+0V0_KtȰNk,ضT/C1p-#f<U| 2fZX6,a7
գJ%Ib4TeJik2%,;HMEcq+SKz%
/!)E=Wjccf[PcVC:ڭH,rݶ.;ǲ|a7ʺ-[G)[qMdj'?qHM']7ࡳ?|ߢ	Ό+Ȭ]仜A#DYe,[3,:b[k.UWv}>Y~Wv{D
ڿ^C=][ސG@[쪴jVqJ]Dq
y!eOv^YElcndWf85t-EX(rРZ9KCT6*CBޗl\*>aL@e{/;[Z㯀,QrxK
5+e4@j.FgRRVM~oxN>k-R:N
cT=.+
<suPKkf(    PK    A             1   org/bouncycastle/crypto/paddings/TBCPadding.classQMo@}묳ihҤĥ
N	>X"ȗBT!/
n;r
.p  sEQ+{ofv6p73H3*#rܨ[}w:;&t`Ț{.́c=-sz0=:a>C{XĻ=}kbst+@oMw	;ٟ:Ig#V?[ˢEM@^`T>D9`د$ёcC74};T6!C*ӻ5/kĐkGj;fsp;ePdD݊Y{_/.tLcIJ%&J#>2KX#E\i*k|E,f੷aWUmyMUx\b~yٺ\8dX*ϐojڹPk$;sKߣ%A#o]mEVԐ65˚%H;EFR~PKl    PK    A             2   org/bouncycastle/crypto/paddings/X923Padding.classQMkQ=/d1iӴiNl&q *&#N;	Ii\@ntBA-(ԥoH}IH>λ?N
-XB>[³5Eև=۵*UWo+aYIl084:Acmumy&2ΚvIs7põR[z4zutO{c[5MjyCxhvW˕I,s-3=wn1([#zz1%#%cFFA8]BqOR:S;+6T\q+N@$ԕ8.#`y`Wi5Ϣ*1$a>4Mp,h$#0E
kJJV>@XI
IH"0IdhdZ8ޏa∎PюU렪jǒG|!4Uğq:Ojj}7*C((=q#d5MVfp򾸦U%Uj)#A+CGM=ÌZ~PK'tfk=    PK    A             6   org/bouncycastle/crypto/paddings/ZeroBytePadding.classQ;oPq6}pT2jPH$bL7qؖsS5PK	
Vpas& #ǠZczӪvr;ɐ-5]%zk'=
D(;"~2n?J<Bg$XFv'<HzoDqv
"4._՟<AmRH7(XcضϖteB]+3J|9i!^ЍUP
\;r]6d(v%wN=la^NLbZo.+n}A1&RHCDGy>P7繃1TtfmŚ.v5Y4ߥՀ:KIA*ڤ]jӲjeEC/{-k*EӬWy51k1&PKi    PK
      A                org/bouncycastle/crypto/params/PK    A             3   org/bouncycastle/crypto/params/AEADParameters.classRN@=qb@Mh8U@ݰ(5$vdD.ZЏ8QxqϽ<F̯?o la!kI XC:hמoI2rSQѾ8Tq;1`Щ=y>K1?Npɓ=7VHja9N}w(

8pvW~!XC_ҾENmsOyO{]|i(jװa'~wjS:6m)]g`9yhJ̢b@E@,eYeYG+:u/u<z6;
m`xJ/,#sDT<ZLBXf]3lU%\`!v9Ī]QimY"d}6]z[JȦbJ^#X(pPKn8  c  PK    A             7   org/bouncycastle/crypto/params/Argon2Parameters$1.classA
0D'*9D\oDWs<>0	`1hNҒ3дZ%郑9+jB%/;
trwCd|,jQpf[g:asNusPG]b]LPKW      PK    A             =   org/bouncycastle/crypto/params/Argon2Parameters$Builder.classTOP=oT"
᯲UZpJM&~ ?698{{6u@R-1fmDD6f<!땊雎[gZenȎmˎoAcIs'YKk[O13h*U5[s얳gke-#[vk]=q+ųʹWlvu@Z	̴S`[8S{iQ([dA3ʮA_%$*#L'(S	+Bijhj[;Xw>n8=<ȩ[a^UGކa3J;f&GB~	$pA`bMg;/0TI=579ZjX(|?f=-y~wԖvt# pa!)0!m
$M&"000p,ÜQ˸2uda~WR%N%dۆ[J~i$8Ej%8ːSa!Fx0>4Sa]\lZ@JKb+D4?M
O(iCu<Ւu(j:Zga"Z?ZAⰂ%\Hp!^<֌4ռ5CM5KcXp5G[(Hkɡ'%7^Y,ƽSq!q']S[Ȗ2hh %q2ᎄ-rÏ+%QJs.mtPK_[3  {  PK    A             5   org/bouncycastle/crypto/params/Argon2Parameters.classTYSP>ڦ-A֠p+
.mm"̥`0I`?xN
fs;7w 
ggbxv@4Aq1ןתK[RԪ["b~0H.Gߔ-E-*66rZB>JRolk
DՍ`inwipߪkrihxijalpGs	RBъ8UvM[L@@uǋ69^T55!H:ûtnjۻZĞ?=gZ;mhu[vt-ײ߳syk4։h8[Oqui{
M"Myttlx]e/Kq5=Af##'		,U	p]'6b`vYe@
$㿻O,>qs@.3Wd91!K0K0DH@A8)mX#xH1<AH4
PJ"
+9u6w_v4~\TC:m͆ؿL`<t/ ȅ_D%1sτ-O_|ؼQQRеcE]{ŷ3[3NCq[ddiyWxӃu9s,{RdIKYJ"O,gR=x>:ߐ7z-C@
|+GV*FVTC7N#~E+~z*2*HOF_鋑J.sp?":88
g􄧏ꉠzozjկ MLLK	I47E]Mw)_PKnEN  y  PK    A             ;   org/bouncycastle/crypto/params/AsymmetricKeyParameter.classu1O0ߵiCPRXB/!#:tsU\IdJO,H $~ ?
q[-߻d5j`2@%ͭK	Fj-V<ZJJ:Bٶ񵘙I۹rpsmԵ;fQ$ƈcH2d@	1N1	V?j\r2!z}/Lʋwޑp

K/PK   8  PK    A             5   org/bouncycastle/crypto/params/Blake3Parameters.classQ[OAvۥ@AE
^huU	5M`He\vJ/@)4GҒn2;߹KNb0mxSfHwCW~70Y
n(q._[)eڨW24SʕGːpesK`yBU.ߒ;SRx\G^Pz슖À!;=.M]#
;uy[IQBEGP(A[vʒ7Ռ_Kg=xyȡyZ{
3&ne6CX
"?W!ZdpGFHdERi,Q0$
x]щƩ沣-&o}R`pUC4`w}{fH>#o4#{x|
1Ax1)ϑoLcÓ}_PZ>!D<A!Œ}-|0Ůa0K=MA)34/mc8NJiDZ#38Ե$!	~PK    PK    A             2   org/bouncycastle/crypto/params/CCMParameters.class;o>nF6̼;FtҼ⒜Tʂ|Ģb}GWG 3$Azgg_rv&vfFS
ڼS+ڬ=4xb`a`gd`qOIedrI-(JMN,IMaPd`ʁ #1''g\Z2,86BUq( PK     PK    A             G   org/bouncycastle/crypto/params/CramerShoupKeyGenerationParameters.classRN@=cB)"vtCc.ȾILM?2NK,6s@@j-ԉ: sx6$lʯ	ra192 +pXT3Lchq-S2cƮXa`=ԥƞsBo\Rx܌3fm)-C	kZOTE2>	zc}olպG½bpnlܮ,VTH *(Xª,cCM9l)n+ȣ$STMN(!:)Y,$j^?c
zg 2%QO'bL	'yPKZvd  "  PK    A             =   org/bouncycastle/crypto/params/CramerShoupKeyParameters.classN@ƿ'v o	Г@H@*@Ƭ+o/%Vj$	!fMDEffﷶw,3bE ZC6p
YO:[ޡ``wOxHn:aC؎iݒ:Ǆ]g[t^y_ے~kE|kK5R_ʃVp5{z$(媕fU1B̀
@	|БX&&TM1a0Er~ȝ;W4fuaI:Uj􌒒$
T!{la/e(3L,>cisĕ
;r#=CS/*]InDH?bBCzIM"csfΠ)QKr3+sNK,Jj="CgPK8XӶ  *  PK    A             :   org/bouncycastle/crypto/params/CramerShoupParameters.classSKoQ=RmZRajb.t5020_pBԅ[1~w&jhgqNo AJgv=<`2[vu6C((2>)LvxgH{n!~ѵ2C^w&=ב6GrZݺv\;]۵i7;wCs̝4xZ`VZ~v\Uך
ie+㒌22&d\q!QYar2{R9t:s".Vӣ{Q2
d*u`
$L	Ün(
PA
Kp+Q\mj|Y9+1$a,oq|믪LJKNLD?Č}!eʓHX"k!U>
jM]#&'9&	}(>'}#og#!=AUKdyYd=K~@Py[1H(H=*N7ZFxZ%ֈ։o	ptd8VFqa&~PK(ZS    PK    A             D   org/bouncycastle/crypto/params/CramerShoupPrivateKeyParameters.classTMOQ=_C RC|
CH!X7&lXhb!qato2{;͘H]s;??0DrE 4_,
,ye:2r-7ߢ<@-Qrߑܓv\*Wʶ+K`bl^5rfUbV%j26
zj󡲕E,{UܗWEjB7iAxSK 9gKos@.r|Q9{.I7Hlb<mϺ%7Eg^J\Ђ9:Y䦎p	q~\U!!õ0b0pa6Ýp^QN4!5d0Rʜյaْ0Qz!jJsS[r.Ĵ7(3i%xNmbk4&&x5^-!A?rS6۲)OO9ݖÞr-w+Ҏ>#d{ <'!3Tov)ހGu9rŧxppЏĵyG6~lb"6z!R6S6CٜӅeN/ʆ({t۠/lZq"a'xPK&    PK    A             C   org/bouncycastle/crypto/params/CramerShoupPublicKeyParameters.classR]k`~%m,ܷ֭Ώ|Tr#X&%55MBn譿IdM:Ay9{N7|p5Ŵ6[VySAˠ"id,t"`(4}0{r'oዘAn3굽ǻI(\/wuwy)۲(G{v?5Lj04L1oVg33%m}<^RMo-%|Svޙ;e֮T	E	:fqՀ& aE1/aA¢+X$RI&Ẅ
FS;	x5oUKk
&MH#)S΃Q<GhSFr]bž7ĪQ0{0M̈sg|XyB.l3)WSܔCpx0j:jϝ(GN8Pުn6hef6
eV6Mw}M UI(şXP~BPKmf3    PK    A             2   org/bouncycastle/crypto/params/DESParameters.class]S[U>'9	PGCT@cA(&)j8$ǐ6nzӛ֋:㥿x0Եawff{޵L~=ဈ.yZM#+#kx]Ȝ̗KՒ7gv--̼V9[-P/t55(iEڬJ͋{n<_wlωKas\(Xj,br\vvy^ܮ8U/u?Լ[Ue
72uM+֋
woWvzɚ]+${rt$]Qx7>)yM)b6ݠ:u,xBګū+a
R8LF~ R$D=4b|sn;V]VӞߺa2F١!csդ):;NQ?g>>3gxw+5^{chxL'۩Q'|k;<fPA (8nS>^eФ>}קcr3E'`27cR?|4^vuHJ!`뮓d)@H`.%"SHva4apl,v|SˋwI;$mְHdfu_&s8Ò%;˴YX[mvevAOYvCOC{kF1 tÂggO0'HHyMpxQu$!&]U$Moߖ$
	u<|P.xeM-{}`Z0@p*!e~>'x9n d8)_kLJm{Q;_௘A/_PK^9  (  PK    A             5   org/bouncycastle/crypto/params/DESedeParameters.classRMOQ=3픡@iG` ib
*(
"|24Ce?M7pѤZk+%pqyO5 p#CsC(tdw>n.f7>d`YQ.-ʄR$^!-;b,\<R
iboB)
7ⱗO'\W{̾ɉ,Ô_'=/ed_~K|$*RFj@@Qk|-lE
^~fb- "TitU0ч~*3b2-|,'׸九Gʷ\Qj'A P 1U@q&qyR`[eǈ`NNt^Jt(-D3{9\ hjvtC >%BkQb:SIQk"g=Sԡz,Cc QEX
:`<"jWk.+cZ$C:0uHJֿ4t;3f5v}#"_ZFlr.+IkUto6z.V㿕i Hb>*+XzUj[Y2z
 K[zv1upPKb    PK    A             >   org/bouncycastle/crypto/params/DHKeyGenerationParameters.classRN@=JVoGRPS.L4.ԨĚ12)UiIMM|ŅG.D{{3mu,1\!fH<iߕ.WH	'}
xȫBKsQ-Vˊ_
WVV)JXNب:ዐK/nsԔn.kN4jѐԠkeX;d3sooNԜd¹=ٰ/B;;oȠ~=:;7` c fKnaЀ$ч1)L4NǸ*IAY&%w.y팗$K:2ʡtQ?BuI^1_y#j	3;釈Qjѫ-z$-tw̿`>
[TvR$PK R  &  PK    A             4   org/bouncycastle/crypto/params/DHKeyParameters.classn@`c)&+SH
TjJH`7#0%@mĶoѾ@6,)q.vHyEh{9g	`/jJ;pWTc̎OD </u}3(t?	z=/lǛ=ڟswbzc=vﾟWlNܪt
I
) u	|б߷{	ViAҖZtl@ƀf`	1*qd
$XGO0*/jaw>od30$*5ZOH٤2
Trk@@3,eF9^89g*2B@x~M=̤&RH !ˤE$Nrg_)QfA_,Jj KPK<)    PK    A             ;   org/bouncycastle/crypto/params/DHMQVPrivateParameters.classURP]BJm(AK xR)PaķP"iRݯx(3:MObPNg휳Y+;=g q,x!{EF5(yX7u灄xfR(
=uemn:J3T
fyp(ata33Z[_c-cI/fJ.*fbCBVTQ]a6W%fP39$zw1=?Q
)	uҺ귾(~Nr_5iSss<YN[Z,OYI
Zks<Hhl噳)"M&V6eZvNK[%3aEZ^/86CJ+(j3yvۛT=Ho{odqFY!dqAE	w?$!: b?}!TIZi:´1x(㻇z~[8z0^ǔLA]w~YhA؏.'M~W1?NaVmNH\7U%඀;>(CKe<Qbć>
0C?xZtYYN3řVxfK4AH?I5&7<ZƤmL}n&1(lc"',=x%jh<!ObOމlFz>A]
yʘq,c2DR<e$D0ma42mO	Axd|U Ma}=T4EI8lbkzt/}\4~PK<%   P  PK    A             :   org/bouncycastle/crypto/params/DHMQVPublicParameters.classSOP=oetM`CYWM2I4`oݣvo}?&&J"4sF\{=XSH0ˠ:cs-ɥcikj"-rW:
vКΎ'⎧<-!Efȝk=ܺ2,,yB:K*wì-ڐ&YLǊ7]s6wWC"k,H
gE/;Ll	K2~h
Y]+L+7i
VVڛS|lU9+$S&ۃ+d6FEVE*TLȩpc
18J@~KgWisP1T
Ugj3Ib,	k\6\̍4p;|dq3+"tt9&X<xp	z?]DDF^|dQPǸSs1'Q"JG0(?c(CFŏԆ>(?bA"@6Ok֧&'O0> =hzr_PK$$    PK    A             1   org/bouncycastle/crypto/params/DHParameters.classUYSV=2I %ݤiIÎS%,iG[TȎ$KxJ3L
vK:M+%ĴS{._ #{ "|ޤ$o6:6>ϤSB: aYwR;`ʚaДg([ʆ,mSDnW)Utf4+hQ3E
g(uمb	hufYz1F]p~U[fI`y5f:c_gYgM˫,Knךz>i:,,JiMGV>\,ٍf;
q03eVXY׌2ZQrT`DNNt_OwSފ+;%f9:UTRR(vQh]bY}E*b&	'3I~)iYte̶ʚ-XEmGi{eC1.*73	ޕ-ApNy:Z9@5)GR@Cs
'G⮑tYkWyO O'8DnoO$/(넋
rhĥ:8p\!q>SB#WB8C8áC 96 >pa#FPq;(&a8dI)iS9!>)?(s*eED!j
AzfC/4owxLrǴ&MԢL9j%_ noBjƳ0sHMӷJ!hL@{	\;`{7-=YzE_voaħVY<<_4|N
& .;'OqQ۸=zſEGn^!Iu\Rc̩
Ծ
U_U+U;+W;
[n^%%Ī F+]#~fs<+֔w妚B{|g˓kʳ5任e"C~f#	ѷ
񴺍b|[1[t2|)Hx
ZK|nK߷!6@-^K^cKCdhIuFOd?_
yRN PKUHu  
  PK    A             ;   org/bouncycastle/crypto/params/DHPrivateKeyParameters.classQK/Qmo=Kn:	ݎiֿ?`	mb!l&gB؜=ι9oO f1
l>+1TQ,%CD\
Lu7Jc.x.\䝲#J*'m+U.
OMYTң?
^R(Ǯ0t0l4Ml29wtT*q7Yf̣g$8`X5NgG N]m7
!p
5S9}IL2ʡtBzP[:itrKcJ>"v4ԾՌ΀]4}z}:5ĭ:-%[#J U/S56tY:+0[Z0N5-1|:}PK
M|    PK    A             :   org/bouncycastle/crypto/params/DHPublicKeyParameters.classTsUm&a[HeЂQ,iD1@GBkl7ݰPZ0vd}pƙx&
aƝ9{ ؅/+Ɂ</L
%S>#1K>whm-ʖircEKGo$lKh	Ii'ʎe/aN.kFJ7ۆWpN:1/65!gujM#o{{-FLPUQ=TȋbYIHԛ%,'.fh|y풖4-K74k4k\W*4-k1xBMCݮp6Suf( Y+nqzL*1e6F4lYkx)uP
Z#3|>;ʼNgDw=Yۯο򈙟d
GyDL+Ӯ 9nTioؙCqǭx3Q%oFDU#\L7<2MG+Nf#Wl83zD+ag%$$l%$!I#k\b<loCg=˵)9U.\'Y_2x ߋxx`Hv;#O1~u
 sX:Y<mOwtxCZa'3e1<AH2 ,#De; ؀eࠌM8$#ΰAaqD(qᄌm8)#S0pEQf؃"(ax}C%UBbSQr6CAb21pa(_֓}Nk1du\JFf].Q	#O@$] 
XƥTJ%~Ӻ|[uT!R=Xw,aނ_!}֥uVNv-dCb\,6.HD^
>-Lqt}x|N؋P*%쉬B&܎W`;T8NKRnhjI˕RFOȝf[ڔ<$qb?AB3w^j)(*ajU!1
;P:0x
=
|4p7X\VRNDq10
+A%+s$^:
B\\$
_Chج
Nz(ȐVBbΓfC~3J}],*Y r.Q$F@]r/ n/v,^W}h!PKG"'  	  PK    A             9   org/bouncycastle/crypto/params/DHUPrivateParameters.classURA=
1( (l.*1Zd3nlP
WPUhd="Ssz{:??lr5A\⊄J5RBa}	I90SӦ+|Yg%cynJ1Ra9r .-KS|YBUљeٮU4M	
{ef5_,2rw/v=f[*%V(oukX}˖f2+M&2ssT{]ö$f(mX<I+l1w^2DrٙNj;Y-m-}Yg,][6B[@ h6
Ȅ}8z
^^pNǽCi/
QQ<ӷW[_zei8+QFs2eDd\qQ%	'j]#0n}>:f5:7XJ#1wΑ5%+{ьE韐&9(y_끗S?]E_D4!BQ0N!.V0N33B4Qq+d
Tt#Do
Bh
wB!BpBǖx" vO埳)J$\C%*DW!.kʚtqS5"@X '
V!>FPs

m&vvb/q_ H.a)s
/蘋JxDi*a"B̬ 	t0Ic8XPs#ܞlA/jt@*zW{kmWPOZ0i{h]>-7~PKE#$  N  PK    A             8   org/bouncycastle/crypto/params/DHUPublicParameters.classSOP=oetM`CYWM2I4.AIQ
k:⾊Ba&J݂4s{=篯b%R)2(0đNam+ci\64K贴=~(+!C5#5)BroCt5KZ]hBos*"\R$Kx-މX>?˥mp]asw-M~xpz<GRXYBlձx+ti?̪CZR{sjϞǳW>8m\>/Nl
Ϋ0l*&ULVSq(+h+ƻ|+iW_ԍwx|!Pq>s4D&&Pndp	q32Ҙ44Nƪ^CѠs`^w5HE'fX&"b|Žd!S(ODa9>c]N##C3P~#EŢl2$v<#,~AУ.ePK%    PK    A             ;   org/bouncycastle/crypto/params/DHValidationParameters.classeQn@=G6Bixq*y+)HTv5qF=m?@ QX Mq6;ǌo (;T@`Vf,6=@?$&T48R4*!]I*+Ԉ#m#BWckq2T3_:T&:&2Rً}#8zm E{uMuzOD8̶d᪅eُz6XAF
%-Tlبڸ6rUtr{Zow
]
VJiuLZ?Xmxܽ@\`#%pOmeOؘEr1qܥчqkcPm}jyAx+37䛬uвx(Ql$6܁;PKJѷ    PK    A             ?   org/bouncycastle/crypto/params/DSAKeyGenerationParameters.classR[KA=m,+&Mt"q֍1UP=QѧC9ߜ0|~ 8.C'
)CT0$}inCZt:bߋGtyה<>o}Ş̃䞎{&2JjaPMOK􆦈_6Φf+g'񶅴¼A}*C<IXׁycHP[MCJx͟M6$$`X
6N/%Hs02R܈ҺCSZ~e67l+(<d
+?!#L_PxPK@=    PK    A             5   org/bouncycastle/crypto/params/DSAKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF}\5 mbȰ33226ݚ@CT-FQia`ca`b`d`b`gs~J*"P@i* 	@83kle U$4
`i PKa     PK    A             E   org/bouncycastle/crypto/params/DSAParameterGenerationParameters.classR]oA=çP--"jmd_|h܈t'2]&6&&>Q;R} u9=ν{~	92Dku+CDN+նzжFFȜ8lٽƛe}VjPͿiΒd$:r^1lRXXr$>3l]Oܜr96..딎dxzcIgp_MxkWyj7>H(ᵅWW޾kzv2J`"Il&P3y57m/k
eYwY3YAI3၆m3"a/(j(i(k8ڛHЪj3CsICv(OR[⬞"lɐi&NY>0r!AM{5H7xb#_(8YU,+QJV
<Z#|
e5 PK  W  PK    A             2   org/bouncycastle/crypto/params/DSAParameters.classSOP=w֭!
 ݠ>1DEbHF`Ow+mt_/e`տm#Iwwsns/ nb[Rqxk-1hGOJowxD(ڒVu'F1wkO2LDK<}o
OV#r^9VXn%8i
woVEpz~֦ljvngMzi5i04k0YpwO@[MY>.I۴˪ Ü.HbQ	c2P0"k MBL\pU5	3:q]EJim^
	t{wsx7䕗ۼk$'$d$dGLԧMfh]%p>!,u;BGv_w/DӁn'v{ƈq}_N@Nʋ9ʫ|]iXz9VyTT-KwPv4upJV5Ky29@BxYr;_PK-&    PK    A             <   org/bouncycastle/crypto/params/DSAPrivateKeyParameters.class;o>AF6̼;FԒFtҼ⒜Tʂ|Ģb}`G '$̲ĒT4,b>Ye%Ny%E֌4|nf#vH5)@6`220TYL@6#7 y@Ţ_K{+FN*AV-| PK     PK    A             ;   org/bouncycastle/crypto/params/DSAPublicKeyParameters.classSNQ]D&M[An1(ZDr:=ә:=E)Z&eܧ%jUI{b!`"y!3۵C{nW	.>3DMTX(A<rf	bahore,:3[ՒpS]OYZtOK^q{`xekL^0LVAxb̯ee)|{c^-8gLR-HME.CԪ?f`5ް'*I˂mW7=-߫Ch~00:80=K)НX|aze{+ҷ]+^D"٪UobG#cUVn(8VF!
!Ю[A5AŠ.i
ЉsゆcHD1tC2
.)1I+0bT1FWX|zWy`?h
#i}ZŔd	 =H2
fv0JI̾+wSg3_1tHgAVו13*PT^"޵N_[ԅA&0%oNd$CwjO/[wxChPKX(z  4  PK    A             <   org/bouncycastle/crypto/params/DSAValidationParameters.classmQn@}$ubЖI/)"Q=mUb`;\.@ q@pbƎs ,̼7oޟ~p@x$m4O:I+|r.tD>y血yǯ'%+=Erǟx
H	ҪNIO@7PoTLiOgʉ3udv8~?h =㚢y4O$~)0^Ƙ,7ѱcSeƓ7<6
-\0QfbYE8MP65ʸaPk*vn2ܢ%."<*쐶L(x^|ƹAVoS,iժjh~?]ҹea5GݪQKMJqϨt:Ot>.k/2-t]*B!Yefpw;vh;t3_('PKM8    PK    A             7   org/bouncycastle/crypto/params/DSTU4145Parameters.classRJQ]ۘMVub#EV/>MtFƣ_t>_"af9O Zci\X%|
5aE嶉Ί'rM'tP*q^auܪ~lcMQvkԛztu]ʒ6{S7,'i	i*Q0`aVKmCNYS[*wgnhjMryo(t,[ 
*BPTSa	
TaZ3ClQIX(aIrϐw*IG1jb>~5v맜Lobbbb";6_x1a51 ~FD?PK~1z    PK    A             A   org/bouncycastle/crypto/params/ECCSIKeyGenerationParameters.classUR@=@ FTEDiS%x"ZZVdڤ[L[ >m: m|=n`LB Ih6f$7f*)۱i4ـaY7mȜߒb](9K$MffT,<j).xDBhۥ 4=R21'DbY"Ylҝ6v
=c-`杬#LN@%i[&v6]J^H۟aKn1i9gT4ay9	z
YqVX`nAFY!sh"лƻ+3_ekߗ,mͥY9`+-$}5<z3P_zHeȸ"_ƀAWeɸ&:z[6I-6Z!`P$	V3zBC;%)y[P=ѡ!Yh9>h`6}7;~
GGtm[[A7WR%8YpU^T(81͸48*:1Ⲁ6L(@Ť>L#i<0# *`VA,)!& @7 ੂS0E+
t+e0@4eth%/[lŲ>OmCB޲?`i%.]	Vy{[ĺnn\mfkھUML%*"!$J0JPċo?*i%+HFq3/	Ltj"!Kx*鏬6z'Y;pJW?L~)PKE\$  I  PK    A             >   org/bouncycastle/crypto/params/ECCSIPrivateKeyParameters.classQN@=#
V;ZMD1Ec:UJt _i"1qQFh}yy86ֺh3f(7+2K%dJ|p$Q<UC29ODK;\oɀb((1{w|ʝ["
;#%B!'yCl-o|Z컴75:+`eTPC2LW7CނfΧ%`II.U[{Ɩ?C>|ccάQfsX	PKƮ)  o  PK    A             =   org/bouncycastle/crypto/params/ECCSIPublicKeyParameters.classJ@iƶ/$xP
<Ju&6BJAz|(q"^C]fzp
Ô?N̔M;631ՋR62\	ijQe&+jqQ7Ej25sq|{,߃5EEgMG$/Ht^3A;Saꡏh
xCAa+._R.(rްbp0|VbE/?}PKM
]     PK    A             ;   org/bouncycastle/crypto/params/ECDHUPrivateParameters.classURA=I6E!/%!	
xo@Pn^K,_&1nvfC/	Z%IT#U~lDy
ݙszNtj!q(3AtJh?aX{K/wi|U]f5c|nj1Ra9r oڢc0UufYjMSB
LJrwB	rh#PM xw%[IG.s

LfeYf9bj|kؖ*h/چE9k UB]	\tIgl'\ӝռkk);"wz/h'[kyy7ogUUڟ}{K1wY6e);wa*2jtVd,|׭w1228.ㄌ2:dDdqZ5nTٝ6|#1Mw+Fv6J5L]oK֭u{p$`bP:4q|nG(}Hb Я  Èo	

Z1(.K*h!tcX+\
#!õׅB/FB_
!*pQܡ'%eg8=)~X1Kt?!hFPIlyLO .]q㉤TO1B w2hY1^5U#/I"ֵn.cbc`uDʘJ!̽F[#nn"@	5lI5Ǔk!Sl'?OF^|i=vBVm%Q3?nR7<>N8U	PK	i.J    PK    A             :   org/bouncycastle/crypto/params/ECDHUPublicParameters.classTO`~JsqvӪAc2cBKP]R
][ێDXiR[ΠKۻ޽sw{~+UBBsDU0v 4:M6?\׋&W܎PÜPţ 7X<d7#f02[YNQ\SlB& ӧ=nFT/qͮt3j6$[ԏAQ=yzPsvlfNz)m)'Q>TPe\i;;<)~fOĘ
ӽ/<KK(H8/aJ´	|CSU{oFZxWS[Lyox:s4.1Ȣ]#ek9fX,zp#%k^ae?g+t8 1FŧXHVH!&[$]{Ueq%VF#~z^9б 9'd%,
v
!-蟠 ɡ` PKcj.    PK    A             7   org/bouncycastle/crypto/params/ECDomainParameters.classVkSe~$l.m%kzJA,PJQ
(be&K7fBT~w]H`t.Ψ}ys{?
b{A# H
q qK@e|}i epG@vLcqj]"i՘Qu5uS
VQVd]V^;4#fgTje=63bͱ*8)f6'[unJrAivu~zu)">*\ŰNPRf[0#3mߢese;	kE-?"m7).TiY҅j=S5g4@;Uka2ap|RU(^v&եhCZ5''&(Wʫ#2r2L+K]V:5neZ󶮦ђjMk-9RxU*bMl3cR>}ʚrOê=NBN=mZ:n۲a-=(ԯlMOuZ<MA7/83
"lCV$ᎨK¸)N\8(".QDC"R"hGEaoTF$'"EP_{ö6uƵ[/GS|u2ˉrl2^gq1[\;Vkufo&kD\D6Ngt|:KY#CD6H1eH2ᤄ蕰A	UI8ENH8>	xZ]xF8	1(!!		K؏%e:pa<^8Fh010ʠ$4CaA$e+tR]a!`э0N~k\5lʥr<ԲJF*Qm{j:zȘ#+$Ѿ*~MPA2H6==ys3ޖ:')%MͷaF<.bHnaV/G*G4Tb%9wQ3T;͋+WޟtyWQ
h`_!
a=*Dt%}_Ir&)$~M/E2E3M\Es}Ys5ŃKT?wx5	|E`ͥ^xk=AzxG'l7t@7&zJx>ZM"pm}KH?qS<Ny!ΕQXSOV)봞zz)yvXA $oj	o|D	:dn	;VQ<9x)h{I%mAQq+\%|Ow/,W&voPK\
c    PK    A             9   org/bouncycastle/crypto/params/ECGOST3410Parameters.classT]oA=c-UUUZX+iƤiiZ[}rXu벋@O&&5,55/n6={w' q tr,`n+ԣ*	^-9Wmj&)W"R6m0xkel	anvnS7l^v9`~5{(QWR8ZjU
ʍjtYC\kn1mqvqQFsy?-6`iNuwixwH|eA
"

b
&\"o%qnrrR1b&{Bg5,nuX)vu wԱb2Ro}+::_Qj	%\(1ESry]LIܐpS­P#H`."w"HaVm[gʩmҚ0+h)#ُ?AѴX: bX>%)3ǔg@P-;D> ug>kBim*_mQ$TTpEAnqlS̈́ӿ|?PKFHWG    PK    A             >   org/bouncycastle/crypto/params/ECKeyGenerationParameters.classRJ@=[l^zEߒVXDUXD*}.i$%
+GcD}3{Μ2$Mΐw}W0dۮjHQ]xE(>C蓑JĦ=c(^k=u꾒x:|;E_]InQOTF'җPn(G/׾ϰgD;
	
Y
:v߽%jtxw/A誈_)|jj1{MsoX-)H`@,Q19tLa޼t$6H31J$'E8.кB5*$̗7+C,r[ 2tX+PK$qID    PK    A             4   org/bouncycastle/crypto/params/ECKeyParameters.classKAǿNJ!HGa>e!B"WqPPPQz&3;ٝٯ GȆ#ms3ʹps=#"Z{B35'ؽT(h	˃ƃl"#n
:t-ve@sL㜍g	pP/^f)C
(
B

y9M_VR(]+v4X*aİ"

IԺamwԾ=aOic$\$j	dJ	IwDdRgHA~1 iO/PKj`^    PK    A             <   org/bouncycastle/crypto/params/ECNamedDomainParameters.class͕oOPƟ¶nCEQt[7CDq(bxmeXwD>
Ш3dM f|{Y9?w PɍМal^@r^@ҢN,]uDFk^l;ݨc:3U(EaJvtE͌zVɫ\[v
<ӊ;}ټI- B{5f)zIQ6	5Ӧ^fKt8%Z-ª^j6Lf'⌈"E,liKʒ^j7fam9RKl4|84ISʕN-M>h<U0a/moe
X?VcmA;LIw2mTMϳQnߜpWߝJFL	QD\%1*!+ʿq3M<!$#F"sn!s&7(LEI6FUwiZyp0F
T:HD=N_5E~X))|K9}G#wr#/HON'b#4=ռq1B{].<=l RPrk+5r3h<q,{1O7D1&G.yP?y|P}g PKDp  Z  PK    A             ;   org/bouncycastle/crypto/params/ECPrivateKeyParameters.classJ@ϴicc4օEApnLI2y+CЅ(=sw/|{p-qx`?>#7sY"CN]eLLYBƓxƂhK.HK}SL\7ea}鲐	:AϹc)3&oiG\~ud];^zԿR{[, oUk&t7`i`m
ԇcc*&P M[k^#PPUdCaPKS|  N  PK    A             :   org/bouncycastle/crypto/params/ECPublicKeyParameters.classOK0YժꟋC
0aeE"-l3JAxĴzwhx_<||c~#.OS&D<ubO0׏ә4Lܳѩ)e	asBP4rO`=ЀOd߄'x$uh::jK!w.e5)s]Ls%f4QǪ	ӄ4
m
#1aCBaWUEjonZ@zl9+6_`=U=<z̏PKH    PK    A             C   org/bouncycastle/crypto/params/Ed25519KeyGenerationParameters.class};AZFFQLx4""B7,DQbW=9$yO ]|;&mb/
]#ׄgł+6Z'lCz^wp$T˃J{1
&ӧAcK%m'D{QDZI$"5[%PK:     PK    A             @   org/bouncycastle/crypto/params/Ed25519PrivateKeyParameters.classUmsF~7Ɋl&8CBZB\Iq5|Jr0O0SHt|hKd%qJ0goov?=p?H%HJ!OBR@P[W+5S"SMf:<$`[WuͲlO-0ժDv~b~"K2;pОc
a>i|W95	4qҰﴀ#)Y]<氢jXj(Mj842rtT:Ƣ1\ZF@w.{ܕ˙ h^4d;WhuݮyeVLC͵m1uQ4T$4Zbsن>%K"E
;MY3lKU8;)jUk^sFNQSJif;ZY^u%m(6)f
7mrucU|hطIW器iFFFl.PҺSzv9ZMJyY1B7Gv
}Kj׸+vGVI~FyP7ߦ7K*!S4z;mQ8waae-_L^#kjW8#b}">_EH1("%␈""8*`l8&`Gbz9x[#:cfðJ>iOLQm9>a5h7_F':x[Od߃&^ǿGߍ/ Fie7M]NW0YA
zѥ`(b[+Q0O{pQK|9g*rq1'c7d(cWeڽ\dLg1u.+.tSL9|I1wIr=jfYVuNB
W^yTZJ֢<ijhٹrrߺUxQrhj6K|H랦Gts
?H(^$Gx=ɶ%Jߥ'`_Q{J߃V__N.Һk];9v߹f7Vqs%k3=VOG3tbiOGrW؏"֏	p^(x0طj<lRۏ
zAa~!иy2,.LըaHc-xzJ1d$${blMڰO"!Ʉ|
#x"֧@#K?
ypOK( ֡pG!kG[`Gx&WHZjm|=1t1&Elc< %(_<[1̣5;wAydG_PK7M  
  PK    A             ?   org/bouncycastle/crypto/params/Ed25519PublicKeyParameters.classTmSU~.vYH k)VZ7Kvl6~Q?8PgT2ց_빛MC3s=y==~?0.n}2ސqMƐXS+]*9eur?;{1U,Z
dת\tG3xn;ɑ̍l	CG|;#N
Pra=tvuI^mXyQ5,b&W;j81==>rP}cs[Y6K3KUpAEj)kU0(%d]s!lXiH/cT-csnRUk85k55Ι&/i]jT圡SC}Y]JMu{T5*B}Rm|M8Eb}kq?gunEsi1aBo	eD%Z쮝%vD-˒
gqժ6:wm)Rl^e*a@%%ޑpS»ޓcJsK91/wЗ'B*2ܻWz;U1/W>}]^'Be^3cs~GA
b{Ϗ#?RB"XG]AV8zILqK
9>!rB(XbM.]`jr64A{-Q,ۋVsvWC`rjRڨPpwi&lah7 y%l'0!3H1i	o$CMlB 0JPM	1n?Q";C2I0)al:?/{F<G习"hܠ9zRԀDIaYQJ>36dZZA[,Huj3yGΈ$NG:)K&JI)Ք|go9iPO'	{!:6l⫕/$g'd/:q2ZA8)&S*AŽ:KPKkV  $	  PK    A             A   org/bouncycastle/crypto/params/Ed448KeyGenerationParameters.class}?AwBQlshDD(D^][X*B>&/3? JHEvDVU2INV9'SVlZJ#lĄ)b1	}c  Ohv{y"l"ux%UoCh%fަSAeBaCFŴfG_ү<r^7/PKK     PK    A             >   org/bouncycastle/crypto/params/Ed448PrivateKeyParameters.classUrV?B&8 ML(u	$Łք-%Wϛt.z3d
Cf]ߢі)P{Ξ]/; FGJp\0`fŭ*'{#*%
Г]
%K٥lh~:7式sB/o*)e}guSw	8UY
e6++r`ʧNM)u[_Q]aMB^@Rx__Yv5CAըXVk|mjSީZ%C.qsaL@7,Jq$Vl{l
f
ssLI)JQl{e
緕[pmӇ<T0XE52vQcVB϶`<
|6-BqYmOXjɠjNeӖ]I}:RݬVjIef\1B[p۶tLt#ȣo k[M1-e/kS'NN&Mp/ 5\Hexg% ,=LW(;8[YUuT+Snj4'AE"8*bDDBDRĘqDqB@z=8-`ObnMw#ԓ1UZTfԑT/U,[-S5j#D[FdM;o/ȴ7"- ٙV#O21(#2& Ɉ`~8N'!31' .<_-؃σ*'	SJ4'g99&"'_p%'$dQ	3'_sJẄYܤNmh2W5ѠtmQ3P67i0ҥjw.E>(yPVva Үi(O,KDWhw]=ГShc_~?nO_JN*Ns=wan;^Cq̬oL8{ҸsLt#[ kF3$hz9ʤ߾MG!υ-N(jKǾq7tk~R#[Ye~2W5ro/O>?	&pO>/ :b,[n]ޓDEjg<g@<ϞO^>CX-FVQY\2]by݋#񾘸#\{+0|>{Rη~~	Yp,HQ&ɗ%wM+w~_ PK"=1  Y
  PK    A             =   org/bouncycastle/crypto/params/Ed448PublicKeyParameters.classTSU.v		$`SZC)A#F(撬l2
>>3*u3MKbfrssνׯ P#+Wƀd\1"C$ZlDja+u+7vEN3F5{/hili#zhZEwgll{m/n/Hƶykl+(+pB9ƳnjisTzdpdKSS3J;1g`9y%h=eQ{T\tReP^D,q`[)-s;K!U
tno]5R\vOu[܃KfiW)Pr*gVY}:z
Zv:q(9)5*R}MmOi~ݮꪥV~mKV~A8EbH4ݝí̪jWR\KY;ĝ6ao;ib@ؠ#쭟%L͢cSmgkukwV
F&#aHF%!A𦄷$ܔ[S^õX1'&.a\
f!cWC0gt5Zp_p1B	!"D=cއ|H
}RxߋKo+i!EKe!>C!^`EU!քx,D;ȿT3jѤdrɭ%Cm48-{MVǫjZ48%,#A0<rV)%l!VC-|9s]0a@0iQ8ޥw1.2d_>7uxsA#{Qx$%ܑ0AIIgn2ngxz3Dx\~t NЌc5(ia\L/J_Y߅@Lt|:o,ƒ?vTA^X6C(D.pg/w=q
?ct	ISG`tnn?-l&_q%N>;`bP+eǈ+2)1AR	":YAcPDoPKğ/C    PK    A             C   org/bouncycastle/crypto/params/ElGamalKeyGenerationParameters.classRNA}
0*%1FO."&*{3vQ!Cc§^<h~e8xP\U-7 +cgyȺ:r!ZrdA<g谅,4ᐡ[yEHb4&/7+\[w`zmk5,^eaZ~*=s_4+|.񓣪D5s+oHХ!AcX.7h!{ҙ&SVwd,Fs̫峧+n]Ϗ~QP}B7a tt##Q1=Vel;gEɭ^=ᥲ⴬r(pRi0a"73&sSɖv0~]Z-zE0u
]M O
f.	?PK  D  PK    A             9   org/bouncycastle/crypto/params/ElGamalKeyParameters.classQIK@I.Sw;xKq(XQP<6CI*xP
D/
&Ԡ\{m{y0Qʹ6t3o3KRD<gHe#<Q?j@2U]+N~Jjה޷WFl^ٔ|k(Oӹ,0#q*lWTvH:g5͛۬}$8b`":9H+z%F:ziJ9=Qp%H3DT&u:}:	[pj*;t
2W@@B352!kΆtVsEK:t.+=%ٓgj[&a)H-Wj;PK[$L    PK    A             6   org/bouncycastle/crypto/params/ElGamalParameters.classRMkQ=dtmV&N"")"|ɇЭBWd`Rp!7xd*R҅8{87 P,@~׉J#)2wԜҞ@-K%x(H/{:T~,`&ޣN*PM~xQ?0GǃmwmHvU"Z^;tECq#2Et0t\qQ`9I]d5ڮV-ϚaX@@%yE
sX1㲁L\ap%(bEʭ3Tn2ܢ'~,WrTB
Kī%s"aEa.E&4Vb-(S'	n;16w-g}j:IZqOϔ7O|<+oR.,6[w|6rܭNPuPIL>@|DF%#=yh_tyi
ma%N`Doy̋)PKdfAQ    PK    A             @   org/bouncycastle/crypto/params/ElGamalPrivateKeyParameters.classQJAMN4<l6F6YMtp3!Mowxॻ~|~yc[/Wj
yu-CĖ!Vv\2$/č0+B̭WUҖ.r͵bj5-P4-YW5.\Qi;ή'/G^C*Zo#|#Af4hb1.∪m/rCZEY=˜2% G#A8Bc4ƼLd;
+a](:ӵI0U8K4-	SFdi#g`ʛf#&&	z"7;Dí+R3Iid;j9qHjy
ĒA6- PK߄    PK    A             ?   org/bouncycastle/crypto/params/ElGamalPublicKeyParameters.classQJ@=cRZߺKS!E""*
ij0
nPP.D~7mq!
Ι9{`d^*
j<	ʠR1_+H䩸vQZp7KJg++JNUIU+Ūmd}/xJ7^-o^V7m0fi,àf<QrܩtT6}̐2ӿY?5N6}Ȱe4!0
=:]荀?("X
EwW9$fP:!N-E4:61ne0|Ծ
Ԍΐuj=t<ltdldA/+
~ȼ>bmB41vC5Z	STc"4W'PK}"    PK    A             2   org/bouncycastle/crypto/params/FPEParameters.classooPƟBsNZZjM\c7
[Җ)M ~(㹥x=ssH׷ ːH_Fɐ[k"4]ZZ	00bFju<SǼϐ3{yϐwcw㶛"
eݵmcm.ojO<mm{[vvгN
7l~iLP9

(7GX(#}j6pxYye(0O?OLMUФwޕU8{z=ݠGTEFdUpA<U`*d$H*iIrqEU!ׄh
+t2\WPDY
}b
oJ0C
y1>ͼEEC1CKw jnO?,HbN78-_t9FHDhIbU7jXq	\rEI8F"=3}1q'4b1q
	
QPK%y    PK    A             D   org/bouncycastle/crypto/params/GOST3410KeyGenerationParameters.classMKAƟms[+n	h'CD

:9+cߪ:PѨ<dy<#hn$=A&\nRa
2 ܱFL6.ԗ.#=ʧW<s%S/AE$u\).$f$AoR ?rpg$=d-&zڰ;g̫_K  bذA:2&Vm®5蕸{ڳM=E>-)QIq1bW/>fV5^xFqjPK%C    PK    A             :   org/bouncycastle/crypto/params/GOST3410KeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFFCM
ucH3322ik54gE>06N&FN.v^`:秤2(E؁ln ) @[Kz;V`
\PE@Hjma f  PKv     PK    A             7   org/bouncycastle/crypto/params/GOST3410Parameters.classS]OP~ڭ[)
Ha/w(~CHF@vWgيc]!]h0譿vf1%`>O<9= Xas+2Ctu)pOx iH!`$*{}?r|#{;ց0rO͚S9t>xṱm5}xF˫ٕIzVU
]wˬma؛;{+ť֦A==!a&Jqs1<*eà|(ykKa^1IWk܈/>:WڊY cBu#F1A !!ri2q[wL=70#`V9ӥϫy{WfHY!!F&!X"NOM"EӁ[=VZa#ܷ"<S[xRrrV?3HNf_N}9j(9WYу\܍2D(C"^I
}p;-()zHAAe!HXV?A~PK4'    PK    A             A   org/bouncycastle/crypto/params/GOST3410PrivateKeyParameters.classJPϴiXt.UHq),("qk1oUA\ >Pdoϯ f>$X	+BDY\Ʋ,bUu.RQ!N/S.	kV!\t"5AՁEDr"H;q&Ls*$t_:ZU[4]"z碆Bn6֍-cLlc922UԄ5jp}k
+Zh,/hMk PK#+a     PK    A             @   org/bouncycastle/crypto/params/GOST3410PublicKeyParameters.class;o>AF6̼;FԒHFtҼ⒜Tʂ|Ģb}wcC HjIjQ1#Jr243V30302d%%&d;e{敤Y32Hhh2׈!v֚a>$8VF.Nv.6^`:秤2(E؀!Rd1ٌ@, I00!v~-|:8zX0m K3  PK|o*\     PK    A             A   org/bouncycastle/crypto/params/GOST3410ValidationParameters.classmQMOQ=oC?JQZ?J;(
M	&bܽN'0tj;;V 6ԅ[1Ӆa9w܏7~5TRx(`Ԛ͈[-A?|) (&\m?X : u$G;Au=7F=
WCs0ӱzo`~(~W`/F[;NyR=ߙH#i!C)(1XtOv@v|UrиEVLEg@w@>g\'^j(+S6sNql)hTW&3r94E,ks<+|frm^mB>&M|J;N,tqUp%&*	#df,7_nQV\PPKb    PK    A             3   org/bouncycastle/crypto/params/HKDFParameters.class[OAC/PAY^V}`$@`Lԥf;%Ml0bM?zf[@{.33 C	-^dۋa`k{2Bq91Cyeu]Zn;^UsawZrw4Zּ20*3 c{6Ȏ[x^ii䫶 aEޮߍ6+UVVpxfs^\q]݅ڪ۞X>p|az^ٳ-)Aլ-j[)\۴vCJjVp\s!xp'fi,˖3-)*SpEU"mN}^ʬ: ׋K#d#Hf\iQ\pS[ܖN9HBC剿CapCpxŵ1M$#Ju=݌^	=Uu-"i^̰#f>cXt)u`/f6JW!F6?(	S혂)~@PzQ'Q	)p_jPkCƩcLmQV CLNcR% 7ґt#7=|'p\|JPKt/~  ]  PK    A             2   org/bouncycastle/crypto/params/IESParameters.classuOKQi4-gɂIMZHDs|L#:#(gjQ- }IBw~|8CZkzˠTkCi]:'4cs3Bs\!mǢWܺsO9>rs]ۼPpɯzmvk,>´(̦3
P3CG2^Og`>UȪXS#U)qDt$$m);Rrհ*4΁aQDd ?"3JT㈑SwHsjxq%ֲQyhF&g|\?.ŇPKJg  0  PK    A             <   org/bouncycastle/crypto/params/IESWithCipherParameters.class;o>AFf
MOFhh'O0FNf,cd`M,H-NάJedHO-qF/JO/KLN,.IO.,(/H,J-t
 RKR+,ɀX✟ʠ	
bY 'dDud3kle u`5`i PK'uz   =  PK    A             :   org/bouncycastle/crypto/params/ISO18033KDFParameters.classuJ@ƿI׶QS(<HBKOt	)5[6ko= >8ۓ7~HO0N(ܻ)
BsBPk%*xй#\[șyMj23rmV4գY;mkB?|ZOWחZX}!/ЌB#5q8b5θ!f8\hp<fu:;3~?ޑPKK]   6  PK    A             9   org/bouncycastle/crypto/params/KDFCounterParameters.classR[OA=SZ*Z.e"1јp#CbxCYXvo FMQ7K939ef_ `VGRG+_6pbcdl,
3%W-˓>_x^p_z[N00jPZN#&-'ܖ]U|rS3CDulבMk_+֢I')~՞00]URiPQbOpfŶeCs^+~M6u2gmY{X5*կԄҬy5g	*<+0}LI4e
\jmy8 ykᦆ[rkg9НUS(W@4+`,V0I0IEnqgNT4_-1Ia0pDQM跍!g:LkK8C,b$%fcQcy.2~oH^v{_>iPY?B
F-Ϣ*ZhFoc(F>"T#(	sD/bF48Yhi{I@az侎<A:z(YCoC PK=  N  PK    A             I   org/bouncycastle/crypto/params/KDFDoublePipelineIterationParameters.classR[OSAN[R]7Ъ(ZIQhZϩ1<&}4Go73__V\ʥP>e+]H2x],R-ܗr-υ-(Fiu8Jz_w{J>UJ|]W&=^SKDH^ӓB'Z+1@ȵfQJPnS|qi7!^-fa۲)Ɣ-eCtuCȦPrfyڛ[-˦Rn.='^J3oi_`Ֆ-G6(H#Ue[f4TTq'
8eഁg9iiridѝK"XJhq!q(hQԢ(0K)S8˴5wv:ZvJwE J1#SA77iE&AvjoxQ
Ej 
V=.]\^(~%_;Cwz+Lbg6mg3|	;(v0:0L<o70n5(QECj]kr8'I;aBEHQ=2Q
%M=/|Bu?|}4<>A폆':+4v}PK;    PK    A             :   org/bouncycastle/crypto/params/KDFFeedbackParameters.classS]SI=&#*jM&"n-+`u63ٙJnRXjUuoOVԹۓOysP`HWc|Td<;_xZ`_+e?"'!_qxEPʍ*!wn5J6~)pӏ
ޖ|Χf|_fݽswVoTLjRZBv}O2ځJsRȁAchiMvZO,KzϮY7l1=[rױZ+;]:3[mU1~i?68aAj{re][M8[B*L֐]Z4el[O,;UYZM41P&3I1N8cl,Czx58^g^_Br7
880cpZd
(^NC&PP0+q\.i9Ǐ^7XP	O75EnJLQ0> _?P
1?eŖƖTv8(DR
Z4=\}[b{]MRLb8:c2hYcn,ewq/jKC'<gڿP2
23QӄY\\Xhxr"Iԥo_C&Gc@J'86H!k}Mzv~2Oh1_э}zHB爞_PK[    PK    A             2   org/bouncycastle/crypto/params/KDFParameters.class}J@4Uܥ0"A\(d5MR2}+;,as.̝ϯ g8b=8
p"-ÝLkA(9TIMq^3|)2%>.UgSSQZt'RyY	%2L~ݪy];p|Fl6;bֻ,'D`C	7n=15, zAt0o0xi(܉^1|?67PKv|	  }  PK    A             1   org/bouncycastle/crypto/params/KeyParameter.classRn@}7ubhRB6@ql V,@jT䘕ֱ-gS8JEQQ)EK;v͛~e`KXdP3tU3CYlI)CA4uG^(#~L9.|qİq잺vF!p;}go= ~^'~i*8^<Dm/%"w䈧s/j"I34`E$Tk*TTU\WQWqnt/
- ;l:eF:_BtԠ(C(c	%n긂[e4M
а{nKsGCwo8CeO7w{!:1J ;SR	1O֦]sʦX1|$E)-T	:QrڠT1Lsk3~!II*hoSq9gxDV[$XLJ/JUjkyz~}_Z$E99S+EL?PK`M'  ~  PK    A             2   org/bouncycastle/crypto/params/MGFParameters.class}J@ƿmZ?AzIS!o*JAQ(xi.%MJV
JECUAE\ؙv~3<p*6ntm1nIVQ(By̐Sy'	ςx3#Dauȧh_"?:Y*Řa?N~/,	?HSS.8	)|Կ<?)b2aX20x<ўw`);0fuElXML}N"hMPd5%Uykj;PG!'R_@śa˫QiVT

GAg(n;PK
q|4    PK    A             9   org/bouncycastle/crypto/params/MQVPrivateParameters.classU[S@mSjREriiQ/(Q@Ǘm`4e/ꌴ30l
Bʃ;{.ݯ7?  A_3,ý-a(]Xy0S-2/jX^\5ka<wS02ʪ1֘˅"XwrsJ|%\l0̲lWp*p
E1UؗҍPs xSIIjŹ֘f2+M&1sɕka[:k9
|6,Y8Z<ʬrݕ̗L(FvrZ.YΊ5Y/2(|>+z/jԤׁzZy;E
C}3wEvxͳ^ISv>3[jqOvOS28!C)eDdqV9	gTQ	ך`;b3h]cXQEW
^u&4w0ywf3?})n{QwzN$p=:@ڢn*Ě뎈E3o諂6W .
ڑTp
Ⲙ"ĠjC&0*7BF*nq'Eqte,crG:ъ%]-"dOSd*y@0HJ~	6boK|AԥΨUe<E|IeLpK Rs_	3]ƣz"{H7P:$&
6Ed'?OFڿs;A0.mq$474@k`NU	PKK    PK    A             8   org/bouncycastle/crypto/params/MQVPublicParameters.classTmOP~蘛[MɌ	` ,owݥvq_DhROM,myyyz?|&SH0 S˱g;,CNK޾hۊm^GGBiY{{N6>o@>mߠbpq)kۤBr*̛"(%DPp$iq掩mar{7m[{o/\pz]ˡWaz:Fիi+u0^>-YsQ׍!/JħV!##+㲌i32fed\ax5
au+>Jm	|1+H-^*>Sx%xXF2g0$&2B!%(SXJcwȇfӸ;i,Ae-Aۄqͽ7ikWO 6#/*YKZJߑnN|Z%¨tL	tic?Qd BeKt<eHذ,yF>}P#ePKm-    PK    A             I   org/bouncycastle/crypto/params/NaccacheSternKeyGenerationParameters.classR]oA=K(TlѶ-
Vm4h#&mXuu%c|D}Gwрùw9;7 w`Mc!Yox°r<yĨqD$ÚvQEpςy#30ȌÀzp|
|a=C+:C!
<_{Ùnp r}G1^0lNEgm<};\gXv@1z,qer#RD4cD;w^6Ƀ%.:
::u\d0Oіcs^_AKID'X! =.)`+2TdQ,6`fˠ5î`ȷ%w>プA?_	NYB
FA1$ӭL\u}bh	B%ښzd,h}+9ƞUjh(ZOLpv>L,Cf)96KHB+::F(IELk}F|t팾 m7PKNE    PK    A             ?   org/bouncycastle/crypto/params/NaccacheSternKeyParameters.classAO@B"RPNzjMc1ƄlJ
mIh<h"1Gg!v0
i4guNЗg<	yP={oFP$:ꏇㄡ<YpŞsG<Cq:31<I@wDz<!Epw]ѡ7䱒`w.NZOWt`GݖQ#,2dCf%TiQ_`MDDVumv}a7ްeMP'Umeְ6W;g<Ss>6fBCPKNXG  +  PK    A             F   org/bouncycastle/crypto/params/NaccacheSternPrivateKeyParameters.class[KAvCCK$ED/1MúUACEgՈj{pś [c7p	(=_x^7r}3Q 'RS\FPDRȁijMҊbOañpW1n*#v ƂBt1H+$lW_~͛t"=iK!M/lmdQC)<6T2q+4(c|WhS#l(u:50I6ٺ1E]7<!YP{Q^~Fq!g"W2>PK:;  i  PK    A             :   org/bouncycastle/crypto/params/ParametersWithContext.classS]OA=N
.M@4:.._A	Dx4Gwە֨	f;w9ܹw}|$30W|O}U)[|Un˲s]^mK	ΐw'ٌ#scDϊ0})=IܸC>ӖϠR5~CKzB"{Rɰ˰+
m6]W]ޞ}K=9;&G]iB{Է+mg-U4(l8AG㗫D9rTi=Z􎤪iGccceuk2ꭱnUxj!kzdLl*`j/!rk9d!ys8J#SPDMC)204,%,64|M%7D%ڮE"2E7$b(MIZ@8W俠]`sb,4jG`#q- X(s\ 瑉TaVK"v!q'Q(\,H0	6Mc홈N? $xSS1"'PKudZE    PK    A             5   org/bouncycastle/crypto/params/ParametersWithID.classQMK@}֏Vœ$-ś"z钦$$`<Q,Pwy̼vW 8 ~0 T`#N4gdXs,Ҫ(LƄTK1i,FSiewi4dgJD<י'D?Is#*ŷ&	7*9XsPwU<!t?rᯮhxAulbۄvlpTXỸ]|8svu>c/,aO>In/i| PKl    PK    A             5   org/bouncycastle/crypto/params/ParametersWithIV.classKPǿmN״_ZӜz3zЧPԃOs
s	
#??*:'z/|9|ι{Nt jf!~!ƽVd{~ $0EzeV	`H;bZ#Yq:v+t
CϠyAhy;as;3q]PCC㛽u?d$e(2dzcm
nhӕ*LZV!U$ HaS MV\p =8Pݧ{wAMB#MH^	^Ǐ39#ZY51F^/Q'䅬Ϻ84ː2RC󴌭,PKTf    PK    A             9   org/bouncycastle/crypto/params/ParametersWithRandom.classN@WUP\BWjܸ2!@R&P"LJ	ƅC D#Bs͹s|{p2Į'\;isEt~a
w{O+wGӰj-J
:umWҷonYoOt,.˃2ox`8DW'[ݙ11ji4h3KA5'씗ViѡΚnE;5կ0nK4ۦj`	:B`VNU˞:qSz9JS$:\詆iAk,aҔ5B*hU")vkn"լx
D IRF^~l6 PKo  H  PK    A             7   org/bouncycastle/crypto/params/ParametersWithSBox.classJ@ƿMRccO[M^z%MِbJ"x|(qPwf,o N`	a̰r>gLJ}%Jq',+X=2'AS~9D3LH,JB+ϊ,{q=+8\.V]4e2?8q8Ǉ
lݽn%)マm;,SIlݣ6VhnԛHAS7tڿZPK]3    PK    A             7   org/bouncycastle/crypto/params/ParametersWithSalt.class_K`ƟMkZV?jNa] uAVoU~>Tt^40s<89$x v!vKxh9nȐ5lgP(oa5q׼lg=bkvZiy8floٺ
7~Л.>$
6Wz?OkbەM4bЛ]m(!	Ym

QdHcO})đJ!(P}@D&K"T]ʲ'F,gS>A\,(1'#'	񌜔_p5I4)#
qюagE;?oPKg    PK    A             6   org/bouncycastle/crypto/params/ParametersWithUKM.classoKPƟ5-+VjNa3z$ k'uc`ߪ 1" }40Ѝs9w{?^G q QVf2x1\Mu˻4\cy#s`m[/j-~guTۭ55}ymK7]lt;=?POao^dg/;"d	KZey5"ꣅ2hj63J+BT`U CBAaSF[2#SM_,d(zi
] D*R]:eI'Z./GC??IL 6/!Hi_h/NHzCXNPKݞj    PK    A             2   org/bouncycastle/crypto/params/RC2Parameters.classOK@&M6?^zkB@<EQS5XBn~A)xCYgy|} ͠w{C;
zUz
Y"uQP3'\<#?E~4Q08ŔqVE,}2Kg?wnjfnÄaM^CkuXhAz"UM9:ԴXBBIթb`3jN/e.~S[hK>_]aURJW;p6ܽ82KY`+0w8PKyy(    PK    A             2   org/bouncycastle/crypto/params/RC5Parameters.classuQMo@[;$
:q9!шC"$]9nl?9DU(Q @潝7;;]xUT;,Êa0^4VIAߝMD7H
tՄ;>CE\J^Y^S$#AM(;L	O`$"DE,eh=PAs%fͽLF"s E`!qgٷ'͵h.MYf`[[8mጅ5x)qmѷہ	CE5\M
khau\<\zA/껊'<ǉ@`
}dH/]T
MޠՈ:mz&NޠkWŗ:=[|&a3,lX8JV~7jnUo}c=n-PK/0)    PK    A             :   org/bouncycastle/crypto/params/RSABlindingParameters.classSmkA~6vxIK
/RڨPq^M1?`)((~GY碵p0;<3~`b0̓ 
S%zRKշxv,WZce	+aYr0GǨDX1}LFW)'wP"T'#'C4鍻'=PzBwߎ%Uc;n<':Ftj°~QHm!'9HY--JfUqrd9rW8L<bs"66'8eyV$}#Em4yĤvLL㚉X2a ,J9`PFܑkn(Q"[Ȥ57p==AުO,~D
+?kr;FG"7UL2/~F+aPKJ<    PK    A             ?   org/bouncycastle/crypto/params/RSAKeyGenerationParameters.class}R]kQ=74nj?V[TA$"HBi>let>`-(?J]ȅ3sg
jvOdofs.ZJGz
.0<
;BEJ3RyN/ȓv썆;w)~yPgzJGjN'b_N?{СTPyJ蘔O,V2A rSW&: ǍHKJ_XfEd,)NNSDYPjףa[T*ր,:#m.6CSw|mj1t:mX$X2qx^~bOWJfL,`"J&ʸ۳XZf֫XUEwhbi7<&Z_K  lpl/w3a;l?;.`m,Yk
?Bt.i.:m\l`@@CpYheI;_ȵ7ݭO PK˼  ;  PK    A             5   org/bouncycastle/crypto/params/RSAKeyParameters.classUYw IADG8eR@lǊlHKVӪC`@! +m7~9ɋ_lN|NߔD-n,::~s/N%Nt&0	хKD)!P&$I/teX%r]eJTYʗ͊2VY)&/fUgnjRU)zd1f4^b%]XY+3:^Sn
kU+Y)TyԊUҊfdX5Bj(~`U2|Yn,ZQZVkt^B2EZ֪ŖtjEKBخސ0v9\t<62,tdK8}2|Gza:]/C.I3&լPu{-6Vu=qgz}k}XmҲ+ZiJH憼ͩdmԜ!@wkp{-r6B2<\=:Scr'u=o0:ײ|Ef	
0GMN}MN	NճC[l%Wsfβu{RȨv4f`ŋ#9,緯k,~{g[d+vvoo:7&ߥ6rϝzhir6xv0.Y'-}xEC3hN:P1
E󍍵^4=mmąP?js~DXf%MH-
K06֔ke\qEFNF^FAFQFI*L}Ь,ITBx,tn{I|Zc{f<VP:0X#܆ꨈCn{!CZ|~ag%
?Ele00hҗ
	$@
fR+SWp_bB<^Q0Uq|UYVj
^<~`)(.Ln)ZKX{)T^`)\A_pop^MQ[LZraA>vuo*1bݬR$A:M#N>@2;xytV%#jvnNxo؋{C$c?vhEaqK%OIG@+
51JlXcM+GHҦmcQg0
fBߤNqQ1Z?O8*ZLx>GMoQx>z/dwn%-672d
«c3ńQG
D:5foPD4n-#٩1|y!gbb+?mO"#6_!rMAA}~Gixn}N`}h'xw::TuzD
PK   R  PK    A             ?   org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.classՓN@I|IB
K5DVnRK@"RL#3DZ> 8'؛U]ki|9ۻ?BK
(wX>	-`yI,r
klGgAU?
uhelPw]Q3uQD^ߏw=p7z/6Ԋ>.w1*Px}7'۠Bkwe0n|ᔧ簾]E3UY,G,,S,s,2jx̲"Y<eyV4WhXI4
+pO^HKt<uL>6Ғt+K}?\OaS:Vf{|U`II;NnE%K	V6%̦mj㦀b7/e3lF\J.^yPK<I4  x  PK    A             >   org/bouncycastle/crypto/params/SAKKEPrivateKeyParameters.classTkS@=kikQ|U
|VdkII+jqdFԻig@*Cgzv7{=ϯ \Ǔѡe`Bm9p`1	d,K'yN|l%<i$)()=ɺ#mY3
'_oݦ\zҶyްsDoM^0#
xOY#x{PU+a
mmWܲcVL2cs*EE_W,U
.<˜2xDֳސL֮~1&_&7tqM!ea;:AiF~rmW4:Xݗ
Wj`zr20T*0Im(TpXA#
zUphձS{lq5z;tqyC<7(%n=KT4nOyϵb7;?i[bK-.JQSHE;?9p^EH		'%pT(b?*T8$[BTe]!WTq5~\c 7%ܒ0 nHGpݏ@mLH#a*+ង1C9KAEs-mS ?Y~0넏i"4^7
ll3FjX!WãK԰[8mb"1,(
+T%|XCeqR*_DrۋtlFH>a.,b2chd
{>۳չ}fQŃ*fjH}D.PKh    PK    A             =   org/bouncycastle/crypto/params/SAKKEPublicKeyParameters.classVwW/	MXՅ ~,gIAHK
nQOqQ=3G_?@6
>
{L̜k23wӗ
\* 0aYb3Hry2PEE)xDhRmLN,)0od&1IҚuTϒ*Lp$(*ъ^+r".LAsXaY 23tJu[G|ŕzrJR5)S5BƐJVS#*{ALHO87JȈ5*;MT,dC>\L8`
K0I3
戈^pc=uyv(HPA f2FLrN'ɥ(tdGLbb#j4yh+#@lJ3DE4 ED9Tu,GE'ek<ˌrg/S*''<㳔^r0"*KƧ3<"6!xu0XRkqV;uӁ"N;,2d/B0D3N;鱮5Ox@`>Ɛiw˪R90'xyg*jh5L_6"Lg|TɆI*\d
)%+Uc!&+|gdlHHR74FW!+yJJ$f<47b6	7H3
%WDa6ˎ6DeXh``qH\3uDM\2#D0D_=o(hrBa5b:q9NI|j
66QR2CHH[^,rB.爺c)g:1L=6$JNDR{r"fN`1ᘈ'(l/p($e.T]\Fié0;Rbs"Sي2R$qC*SH=1$ gvXF\9'_N3x'fGWA+_X,ھo[t^[san/n:>rE4.1kVs/Ưr{|z˭MYڋVpzؼ]X[hKBo`9߼z11Vor{,\l͗/ѻ.^L󫷖دIsG{7_&r$ȶR]npY&Uo%u~B*UqZԃjʝ	Ap'>))855) UjbؗCl
9Yds(wuBgF,ͫٓ7֌{?<޶Ўm%!v|R%fvzXno_#WF:n~{Zë|7
9Q-ux
bSLC.w+~Gupa/v.\-ǅ\+B~RBnr[,ҮYy
/k(XwN
5!ܮN0?'tVwp̖
snZ~GPΖ&ƌC%l\_+W!/cIW;@}j
Oa&q3{ggg:sue,v0|}v)>ן§O'<{	6V:Jpp9wX^piv]8f'u_(s}anw{|+:(e֕[=4N7aj3;}
;<VTOg0xKu@=ïA: O᷏>y~<i
X` PK    PK    A             D   org/bouncycastle/crypto/params/SM2KeyExchangePrivateParameters.classUkOA=#mV+J/|RVAQ|v,ݺ`&Qho2-$͙޹o?>~pq%Ǉm-Y{47Di^-	X,|AypyȥmˋnboL|C,265LnێgaW,TYҜqQY[$*oa-ٹPI-3|Ȯ5"S{.ٺ/B:kYnR&?7EɓͰtE=&.V,O,J*b;n[`H8n!s*hg.<'TBVNgnȩw+ـ7;}T<(V5}
EͧIGNW;!Kj2!qlGajIѰCN
4ѰW>
5`h8pnjS9kd+'Ұzzؕ:|QY\KR!ޅ͸U<b4ժGSkIG7:"HUЎ:+hCH)1щ3::pVn=81\P0`XEÕ((8(qYA&$*"(c3馉=h>楻<g	$|W+ꯑUݷ(
!L|E[V0%U(k`B=˸Jl7|&,a"9kɞ֞2nm`wp=Zd͗Z˾4FO7Ӑ~NV洛ښ|׀/`.m^somʞ5egnPKS    PK    A             C   org/bouncycastle/crypto/params/SM2KeyExchangePublicParameters.classTmOP~JsPp|ki1D%3$t]G_Wh",D>-BSgfHsz{s{?|4H @T]SOmج,MM-sp<低bG\i<n46]gk6=\Wܮ
`:HZCv8bf`u$~h{y+]lJf^7
P2^5{&7̠燞QIk_9uj`nqX&gchubZ>,t,${pYY	sd	W<޾2lu;96vr>R>O7Z^y1YG&,Qndq	4Vp322XYNPLV&C<ap8VW19O9jF^$<5()W>#=YtZMDQF{GT/CK>Q:d!~	t<eIذy|J#0fF.kePK֤T4    PK    A             8   org/bouncycastle/crypto/params/SRP6GroupParameters.classuJ@mh]7]A(t?Ø&a2V
C3iq`ι~p=F#B2R}E{s%BVf6	l3hi$,Y$S(t
dOf*=x6ws3_u*o3-P0o>\+
Pl[vF|&80W[2]+tOKwCh_dƭZ0 PKiRm     PK    A             6   org/bouncycastle/crypto/params/SkeinParameters$1.classA
0D'*=F	1)Iz5COyz? V2Kab_5"y-*wS2DCBNkْqd=*Bmٝ[kɯB9 9~d9E, PK      PK    A             <   org/bouncycastle/crypto/params/SkeinParameters$Builder.classVkSg~VlƀTREhk$/aeMw7hzSomδ-3:Й~=fKNa漗sy?~@/>f?Տ8!@]5hAES-Iħ#󲢲t?.ʆ,fD|Ez#1ɌeFDȩj$g.Rδ"spkEY˰HwXWWXɮG(e-lYVsvSUx/_S)f^f&\NQRu-6n])`*[be
{S^69?9k2$OLN蚀]7xPS#2:ldr+*Ќ%[̅B:7=wH;׶eFd{,vۊQ	Gk3RVenvۙ5>gC.i\?+<E'
4JHJ͢RlZ*|Y~f|f)ESxZ{`Ȫ&39@Ŭ[G<&4VWxV?m]еIE
aPLG=oT%eghn`K/] y[ștZDXn"+b"""ZDqPD""DUNָ;ɪ"GSԽ_ꯪUop^D+Z;BaTw4^T4q}d-DU)PZw8@m[GzuMuJ|_lJӧkTvA'ιm+걓^Vu;z5u+yLA@+	8+ABB@Q4H8C8'o2)87O`JB'3qI\Ј+J*w$&! 7syn2,0 9!C%øYFIs0r(ɍtn^P5%3H5`27B\xF41cTMb3}SSro?PSL&$Td?R
FE%ႃ'+5
}4HO8u[];<3M1!bT]S+ ˵T#Z_+*t*"h<W0y?l#5_akspk7t-u|94?1^ju<[ЪO;&:R{=&o#q_F"@Vgɰ'+vwɐX7w
{-`=xAo0!JrhSq׫RċYtN;fE{݃gw[e^DW"+~1e1_{izhz+h^Er=dZjKnA7ɍh´XwP{eاdC`APK!  L
  PK    A             4   org/bouncycastle/crypto/params/SkeinParameters.classU[OQ(Zq[/x)JiZHd[eqm[&*F?8X479s;_ *Ccɑ)2U1;~N=P
macR&/u5S64uaV&3ٌ^([<fi-,hè׹JkJ#.QC@/8UW.Er
E;k'SƶJԜ^sW_`lK7
Gw
b
chƉ'3uOxn^7\Ì֝cW/tlW˱]Jg%qM+U*S1z]lG˿
w^bX0$U3Cѯٖzr=@œt5=u>!B	1"D\5	$K0)aJ´y&d-7f#mB&+6tgLtx|xbA3bq=b d<
 /d{"ј.SCr\rh5U;PQapp"|̓=6aɃ0a%ySͤF/EhӒE#X(vԔ&kPc%0@O5u
x?q/q8$1oaa[Cmpefȏ7$^{@7pR-FxqPK  h  PK    A             C   org/bouncycastle/crypto/params/TweakableBlockCipherParameters.classQKO@R
XE
VfG"5уi,ԖED2
Ba;3c&;So1zqڍIr⇾:cH(v	CG)= x .e_k(N4
CH@Ed|-bq/IZ4?D' ǱH6[YX`[Xd8g&w1ws:-K0mb#
f##"GyEjF@;@`RKN <5kTHah}Ea{3a:)2ӔRY<
PKj!{3B  Q  PK    A             B   org/bouncycastle/crypto/params/X25519KeyGenerationParameters.class}
@Dg}Wcav>E1l,D]E"6!e%X~;\fμޏ'!*Ǔ0p|BF̙#(hF0+Ņ(ແmG?2$3$Be24ζ
:Z599nudtK!|PKN»     PK    A             ?   org/bouncycastle/crypto/params/X25519PrivateKeyParameters.classTmSU~l](4He		-/kF Al@\6fe_QɴNnN3s9y}}?z4'^6~Cw+ИT͌-aw|G޲(rRs=Kw0k
ƪ]滂{lخQeyGLp9o*P

bkba7j1*U
/+XӪթNb;TwLXN[	F22
wGͶ54;ĮĊ8U*\*$;b]]x]5WAIqiԭ(<Ϊ
F܊Yp^aΒWPQDQl635bAXM5MkEͬ3URYrn#S0m)`qO@2qhr鹐`c.ɻ@Ӵ='H8t±#t=x"bX-Qe䶊QbL]i73뗜|C9U&GEVHopl4r·[WD.f<ʼ;;0d;-P$D`Hѭb:ƥ1(M
~\ՑL<q:iSxa
45
X("g}0Ui>K
cY,JQY
\|}ѕg=l-DHu\B9?)yb:7J.c|M~z.[x'j$^Z؊xyE#	3Uհ9Nט(%ˀPtRTQ*TH
%۰~cEK/BD
1*.evH;1]nlP0, 2 KE#ᛀJӉ[-|l^)I6:Ai9hJ2ԉٗ}0m1KI_;8PK'7    PK    A             >   org/bouncycastle/crypto/params/X25519PublicKeyParameters.classROA}R=[)TeE*'*JJҠƈaץ\Ư CGEMfv̛};|>R$LZ5͛a[m++3ojz%C"g׸^T"9ly}KCO@ֹS[o5ױ0
CrZy]f)c-'l$PJAvfCr3r|N/eK90DV*0VueC6NQ[U[+-;贔oD m4R&;$ýڈ:l3C
Z%-y0]"__
]N
!qeƂ40d`y\40b`%g=[0;DsB;
GZxT8I[-Wz@4bidI#D0ҸM
40W4ΡnǼ	mᶉI4)`isu̚MJ4Lk+ᩗ
p9*a<JQI*qt>CX*iwqfxC:'͹+d',
CS5Y֝EM:ă|f.vo	~<Fec5:m<#<>ty/0t3TFg<ib3p[a)J ~PKRWb    PK    A             @   org/bouncycastle/crypto/params/X448KeyGenerationParameters.class}A:_BQls vݽ	$g$
Qĝ7y7CP*#f'ؗ=M|Z8b#mByd&"-N)~dd	|//RDMhcJ/
q	Ϳ]WApȡHȍuh!BՑE&R[
PKg)Q     PK    A             =   org/bouncycastle/crypto/params/X448PrivateKeyParameters.classTmSU~l]^ -VyPQ*HP;7Kvl2ſΨ0~79n!N3s9y}}ٿy
4'^?n0!7VŁ13 [Ď+e9vQ #q9	z8.aخ-oܵ++5RqQ7MO猆g2@)(KݼV~;<z׸+}f;Kʊ3c-ޠ*I9Pե05b9uS_&I*'a7B֤Ӡ_vl+];qUUHDvLnR-vUw.lt
_YMhu[5ëYT:r	T"q(S噺W5tVbMpZ
Q7clj\xA2Oٶ
fdo.kL2}knn:P_v%y9M[miCg;dMGT$U}#*U@c*Wp3$ꜢGDW| Lݭ0٢eo1RoSOO/(XL+7dQ~-P"A$u1	ituܐ&MG?Hqt8I4ܗ#iKeWB/_`f*͗|a}VOAJm
kK3CfeJS!q
~ qX G(hDm&3;ֳ߰~G!AZIL[#0sW /Śòh$;'G$g5;vȅJvEKL]Gxy@u(op]*T|H=8U
DG6FX{ҳ§!bK))p]-r.ei7O(CX)Gh|Pi:y"_JRsŠqYhJԉٗybyyvJ%H/PK5  t  PK    A             <   org/bouncycastle/crypto/params/X448PublicKeyParameters.classRmOA~מWQN䥴(4h f{]kh j?J=*/3>;?};b(tb;aT4013КYRn{r-|
WBۮ-k+p-/pEɰ]bJ0]C63Aѱ-@X!Q31nyUY
j%cTp]bܴ=DUڞ.5Ej 7/xa$D͂2wrPFM^%mkRof.k-^0-^Y>ZRҷUQ_W YfSB:]!vE%aM)%F8=MҊDNC
4Яa@àMS?<D3B^FJ吔%
M 8HC[⸧L80V8n#t㩎e♎Q<)`*D84r8JeϭIMj._JlHnLSQ}tiNX,hׇE=9ŋ	^C}*'Gi܏Wd3C/FS<⤨4$sE:g$cx3!
1
xM+
;/;ht[h+$|й0CWHQѝ>KF	fGMQJ'PKJ+^    PK    A             :   org/bouncycastle/crypto/params/XDHUPrivateParameters.classU[S@Zʥލx7 x)Ȍ߶RiR?>ʌΨ<9gӖFNzvsvۏ 1@QTЧUB{4L1[ҼȋfZ*]SyE]dMW[Ej٬]n;is\>+xU9eÐnMrS
̡t}ԝl@M.su͏ԝ>e[E	
K,j؅r|[S
,jMl 喸JHXQQ_<23>O2PJTvx^BԲU6)ͮ\+io3vRR$iM0:Ն{wOdi^Rw#N{ZK駍;6W'U(*eT:?靮E"#,[F^GdqLq'd$gZQ*hlfǡ'oOg՗F3AZܿ9 hn&zs< AaN#ck*.sE !a	s=3D?F8+93 Ƃfp	d<Aw	BK8v)7MLkz>˸J @X@'&A"]C|xڵ&&_g619kP3Z~NQmjSIo`
WIa_7E݁
ܥ-Wcu]='֑'q;>;kBɞad$d\>@#DӉKvQ+	yWPzpj PKSE<  J  PK    A             9   org/bouncycastle/crypto/params/XDHUPublicParameters.classTkOA=C-( *|ˣEƤFT~nea;[w~g+4H4iy4C;gι{Ν Y̆70n05Ƕ'qQ%qgRpl2uKzA8aK}z] LՀ ~mK#zn{r2#!GX{V$dv%2^-̀!JOrs:E}=%Nb_-S"C,VY580j9p(P2ؾ%z*
f/S=_'g..N_&\|.lTV֪vzwD׷Ћh[ⶬ8FMHSii[C>
4\cxR妦#?qLnW) &!ѢEYr-

L':(02nACx2#H+ah_p!FgyoF@;6(>uȇD>8D}/ľcx#~Ox!2',Vc  'bHea|dq4kE70+O/yF#6rQ?PKpـ  V  PK
      A                 org/bouncycastle/crypto/parsers/PK    A             :   org/bouncycastle/crypto/parsers/DHIESPublicKeyParser.classSn@=nbnu.E[VX
R%Pgr^#W AhT*39sg?~~?ٰsaƴ;y|P+BOJ;ÄAa8ˏ,{{+FҏBJ~8gm+jБ{v('bz{V/JC7sDrl$#kKdDֿrF\"&agwO	F*k[J?P
ٕ;U&L c*&8G̡s\08.q\°ܝkTҮwl[N<!W̩PL8$RϮMs)Mh((S4P-j{y,➎1:H
<~~6	ꄫ:@dnzsPUܡ7*)!4`C4*}^7,;j{Z{J)/eҨ5PK\ac    PK    A             :   org/bouncycastle/crypto/parsers/ECIESPublicKeyParser.classT]sF=^G%	q)
$ ;%&%4@lp1$3Byq}L;)C?C{6
$._ٻuv/<y`q8}Fؖ2(m]];\`."Suol8M}Ӭ붻e:vE=
uZ^v^>]Cd=G	L'@EXaZ1V(U.޹c[$jIH2`knY
-ᇶ2z..Ժ~#,0kCmcU҇*]]aQywUIS1/f7k5-:"kM?E:KavBW3m̀E@,|gq''Q-үX(ڮPV3ͬ%{?ڎ$%%WhRq\)[u8111qc#1qGk]/EyGtiaרA^_+YTئ'ퟃ{OսٛogެQW2+

4Ġh8NkSRdጆՠbFf*tb*㼊W1.uqQEpI椸bԜ7A!k~ֽjn8§)&,c&3FiYlZfA~Gq,
Qi~1|w@_ƕC41y~ckÑm+#qBv0AìǸJ~ȷPSnFѧX2֗m5U*|2S1Vv`%dec7* !6կ(qC98
\ƀPK /M    PK    A             9   org/bouncycastle/crypto/parsers/XIESPublicKeyParser.classmOAl{r
JkMsQ[Spj{\r~?o5`N	шovgwr:hԟc+SFoʍ&	E(	%7~yݾ@ޕov
|z17jAcԷ1h&n(v"Bo1 6`$k ɋ.ɘp$0it%
Pizu	eۏSDf3.0.P(4	v	~&L{V"ﮯc/jӠ2QԠcbTⲊL\@Qԣ
'_?3Ԙ,ϩ,;cm%7xuk+O}@6gPaOxB#jPҫ{;*_K뷚g\1M`U{0	
:mVwbL?PK9  0  PK
      A                org/bouncycastle/crypto/prng/PK    A             ?   org/bouncycastle/crypto/prng/BasicEntropySourceProvider$1.classTMo@}N?.uI iBk!UR=Y[\;؛pooP$ZBH\QY'ʁ-쾷ƞ~ XB1Ob\Cfaa Sl{8)|!j?䈚d#Ruym>*zo	gԸC&yո$<JÄ!
W呈$	d#fy̯Y*ܥx*n#i9̯od)ya5kV%hneͺzHX$v~'h./Pzt^C+a+)vg}]	֗A/Ћ<b^"d_7jc:1㢎K:.SkLVwzQEm}2	~Kn
SH5:F0`
p900C-e2)Lc!dɥ0,ѡ
*۾k;\tOjcQl͗Y!M8vX1xi aJ"@#?B?=:= ΜN`g 	'A;3އG4j4&aǘHEPabq'?\}Y
,Si&R{%wq;8q~\Jbj|#(FKK1tX#/Ex PK$|  $  PK    A             =   org/bouncycastle/crypto/prng/BasicEntropySourceProvider.classRJC1=ի׫Gh[EP\EAэ4+5)ɭr
~%N tQ̜3I
R)CVd]0_6":6	W	1/aB\6VIbe-\բëk)ȵM-M%Zۤ.#aZDG
C]nc4B}W%RYXaXSaaC?jJ4qҊNAsU7N[Ń.,?lw/QRᇘz:ǅ;F4Rz1mƔۦ}aG=]AE)iZiD!lneu)	w^rtvLp	0bD8IB0{Gcm!#
k=]N̗OPK֏sA  j  PK    A             /   org/bouncycastle/crypto/prng/DRBGProvider.class}
0F*88vJ4JM5
}5;|p8`!CW+0򻬵ʝx^(Ē慽JqsYސ@Qbtc&d*3tW1lNRe«4]!}bAx}PK6
      PK    A             8   org/bouncycastle/crypto/prng/DigestRandomGenerator.classR]SU~Nv7g,ʗԖ	Fۊ-	:XdSEѫԻ^Eqp{v	N;ֽx=y/{ `I@KN+-'2>0;&+&fi2ǋr]']>.,bF t'#J[w<^v*FⲍKU	?R^%@oMg祵jJG-nխqS7t&v%ˍzP[6(]3']q酕nҷ
k;+rT/̆6zj
F;
⦋5:_:EUjv_nzL=y3u\IOը7PcL1
*9h-/HtH{~cm!BC?C/Z,І!g ,Dg8INpa!-td4+2\bp%GuQ1qQFx*54lC{UdY+ZP6EH"L%S_4w/`jK1WqxpN#H;i'1e'w 𫹍I;̿96ds	DybI{y~?3a#Ll!|`-ҏv	VhO&1PH<&g҃LP0ݻSQ>tСIΡ<z(YO3IغY\alv'_MNjɽ08=| ${yT׆
tWGa$UQ$M2.76
q)?:t*;6jwnYLQ)*qHgR=  A/mpP`J
i2Gzx|yUydG6=t%O#݇NjAPܓW#Kv|Nr]Ekf~ucSy"ctQuOt+▎fN5u]_fr@֮D<~Ą/?PKb    PK    A             0   org/bouncycastle/crypto/prng/EntropySource.class-M0'* .]'l:ڐҒ9~7%wEFa!^![zH¢~3+NVޔty=aY;g
;[tZ;H&lzZZtViY0ǀ(&$ AFACPK      PK    A             8   org/bouncycastle/crypto/prng/EntropySourceProvider.class;o>vFFĲDļt}dQ~Q~R~i^rerbqIN~rQeAI~APk^IQ~Aep~iQrj@Q~YfJj;;3#ڭXX@
 PKBǸz      PK    A             .   org/bouncycastle/crypto/prng/EntropyUtil.classPMO@}q>@MIS@zp"W C+E2K7*
;rJpr*_z?jKÛ7oۯU,4;/a4T[¤*$iRBUF*J5L}Be OE4^et1'DA
$H(a0?>Is#~	DDՄeFXqvo?F?T}`YQPf<|u,Tр=G/>oRvh_Be@1\58G	ͫ\PF	sw3)rv[	s3_boګ-mMu7;Tn4l٦D~1-&nMȶ%&k<31sPPK㉚  g  PK    A             4   org/bouncycastle/crypto/prng/FixedSecureRandom.classmT]oU=]{IܤNBܴn!vҖ/JJ.mErPn+ݵ~AGDR$*Q0ν	J;s̙9k.y
z&[Tni025
LQpfk{MFM=|85h8 m#ǭ6q(}֩x
sgDvyz[<sw/qNEqB>M=fx૲b%-Q>gO4ǋ
os5\Qu
zX}կpWJJJFl+-BIs.o9F4J\tD=$lJm<VZnSaMQ煊i]ͫg;HK&L71a-&R&֖KOo<T|Q1i-HK`pa. f4rFƬ4sbƻ\fp+ޏ!+6IsC񪴝`lΩMـ9
9#@߉$lo\k!/F#`zLBR=Yh=elbˇXz2F3ҳq ax13^ٳXb'jcŮsE~:O!taLؚwLLk&Ah.,`!%,%.Kb"0q*b?#
(Kr]ML
PZ=EB6Z0cp$THVRiƿia:H{9+d͏wZf0݇}	$K wZfp`D.Q0=zZZub$(ڿ\!~y5PK
Jn    PK    A             2   org/bouncycastle/crypto/prng/RandomGenerator.class-A
0E'6FQAt#DPpjRbx(1gއ?ü? a& ɷ˓4?2,ј#!`+`UV!\LAc-)퇎|85!Ky	08I~QHccPK      PK    A             :   org/bouncycastle/crypto/prng/ReversedWindowGenerator.classR]O`~޵]1nALxD1(:e{3%]Ǉ7\H~`&$v%^pss$&#hA^0'ʌ@p~^jv{B+3fye[3-ķUns!yqʦm;5aQȚi,Ӯ-WM[msۛ.
]/{Ul'Q; ªӰ;eYPvw6<RsӮ8돃'Oܭm]*o7y4^->pmQ
fqjPѩKE^;͐.`skvuZj<{N8чhqdP!,Gqtb044E!l)܈Qz
)-/5Th3˞Y~hnŦ0LQ$MCb i0W1DqgĔC?R;DGZm!=-r }*&(v#tNRtrjdeAxKaGBt} ˠgfhl
s*[*)^Z
TP0J*)y4%ȁT^T"dbL|pGa7#$6b|JF/M'}%dv1K]%pOɓN(VzIT^Dq{J&mSaTj$TDǦ>(!,w9%PK6W    PK    A             4   org/bouncycastle/crypto/prng/SP800SecureRandom.classT[Oa=_iPEnEn-oܼV` "K]v*E&hO28-MILggΞ9n	%h+m6k*?̈́뉵@iuFm'P@\4tRu7MJf[OF<gXSν4R9"ޠb<ɉ\2M,-|&,m'OV6
nNN1CK{⵺3fN`nkrq|doMlbejb5yGf̴k֒,װ.ǣu7ȂgR.۪ంvGt*RЭG```"smuGw =^vss{tRyTkƕgqC3ᆥnjm
ZxEQ(*ᴊQY8"M*zB+*aH*ڠ`:(#aÅNr+N+8Qඝg-gF~L4Hs@ !X/!_"iʆ )a\0Jл%m?7ܧ?	}u_4/DwbnR{(0C0~?`GKVPƂՅ'q-FIl_C?p0=EPsoue_7tO2nP#Xx\e$|֔{'y,zXQOȞ+*uW$uS#la	pcWu)2USV
G0>'YBU~PKa    PK    A             K   org/bouncycastle/crypto/prng/SP800SecureRandomBuilder$CTRDRBGProvider.classTmOP~.lʫn)Q6J1A⇮6]G2QvϹsyd`1V
p2;ۉCr=*Xc/MͶYd.-0cܡ|%2ȄC툓@;ԲfԷi+:YJWrQ$
Z893mi:%Z^ӵ[lRW%ʹf0yE"z;xp!e[ulx淖<׫̢uty&i ֟mJ*q|osbZ8\2qTD9í3]q*ᖄ		w$IpW 
b7.ut<Q^z/oq"vJoX 2kstˮ孪P#|hx`oWAdB1$620!ÇNaLʸ'SXƠ0# !`6a!DXs!c#H2\{|H3MdZ]M?|;Z1J ~DF%l!I><$LnUTcEֱ$XR|u,+:?AH&,1٤+q#Dwϑ3/xX/VO<
%aZv#L'dG.0+؂E42=Kx~T!.#PKh	    PK    A             L   org/bouncycastle/crypto/prng/SP800SecureRandomBuilder$HMacDRBGProvider.classTmOP~6(8@Vʫ K@	YuM)vv$/0q2-%}99篯 bp<}ŴM1I%X!OW4&Rnj>Djk%ՒKvQwik{ċob(E\9%JbZDgh[Îk(bkUM|KW4Z%(9,ZR5Orr.qC3:27Jt껪]tJnoWҲP-_]ϱU|cHxCӯC
wQW\pM@T@>3ĶZ{/:f#w3bPde|::<QR
E)ek9٦(mu՜Sq5=Υm^V󙝝vpKY/K6	=h0cI¸A&$Ё;<df8$Eᮈ:8<=q_(fp
HaŻ*em[w3yНUݶZ~,P[ ʕҗ(ʵvaiCdÔ$*
C	d
r?Xaݐ?ab0~<cpwĎ3G_ՕFIm)F8izO䨡-C(!PKB&;    PK    A             L   org/bouncycastle/crypto/prng/SP800SecureRandomBuilder$HashDRBGProvider.classSmOA~-& ZR*(cBAm	5&nGnw%JF?8{W/gfgf2 <C2,A*"2$vu=tT"jqQM=yQZM_ j3iw^qc]H/f+>!Rήla䎧:H:-E"]֦AY[\*jk+劺+n @u;ZGJWn3xF']^:au5"yrj2pui7d^G0onrrIw;媾RP̝&J7KBDJ:5Vտ;?xIXFk0a,$0)X@Vb5Lk0kbL@Nmby(0dCBptÐRQ0D
]=팮+C=KŒM/ۄOo;adp.vy{$G
09f!۟|COc^O3CH?Қ+*ad$;Amx
PK'i?F    PK    A             ;   org/bouncycastle/crypto/prng/SP800SecureRandomBuilder.classVVW-& Q 4A,`[7KXqw~1GS-Nܰ! 	_9'3sg~3w?/4<x .9XpW7t  l/1#-9׳|B@KYɪ*I˚2s	"[ \m[M=,.^ٌicu`HdZb	HڹFewDHW+njdB59TIҍ甆|<ieB)3ohM,iV!瘡X%Sa,ێzzA΢QֵUyg#s>^&G3>&l8S3 Q;z64nYj&16
5V4*]ur+y)
32E͜Zqjun@lGZ|v͛=ˢnE\"qU"!s<lC3& 2}#E.zw%
~Z_AݽEsrt9s>gz)l.r
F#q"<֝cc
;o3{G\uT0'>ѥПς8W?MmJFɸGhчQ^ܑф]h<2:0&#ȉܓ}?d('1혐qS2$Ĺn>ms2'_pЏs%',IxIJBn!h>D0$7FxҊ0Zq扙io9n̊eUftO:>T2&*Տ^B
eN.2oK{z"(ow7yDHn$WJЕv`,QvpcQ_	6V.B5敏 p>Ouv$%m([]NFTpЊǵ
{k0B-!Py_-mFBV«
H+>sAFIn">Pdx1lvyȘ>a.򲚋ěY ~^c[0v`PƯb	FWD\y^:IE[r^?FEfzh'ۦ&_OD/Saj'""!PKXb  b  PK    A             :   org/bouncycastle/crypto/prng/ThreadedSeedGenerator$1.classA
0D'*=qHOk	IIЫ Jxm|1g({Hۊsӓ[[ѸU!ʏCtbɺv&}!etTm8G1aX2.l{9Ͱ<$B9~sLXZSPKU2;      PK    A             F   org/bouncycastle/crypto/prng/ThreadedSeedGenerator$SeedGenerator.classROA֭,եT*?-bAƘ15(Fⲝ@l.ăgz2^zT5^Mcꛊ$|/?Y%͖rJjF'\skVn(cI"C1'D~h궻T(K@CQ?y.]\NȐKiX*ˁy/X*,`gͱa]`DUG&h훬Mҫ5B҇v@bF#qHp0Rٙo|ٙHZ:4G58"Mǐ4q0G'9)pWG1.5ۍh0$)N̅W$kRm
$9ПV4ȫ#."F+kH3	wcP:@+g0[QSAm.t'u4=FiJVG}Rݛ7f"WȚr1ŭܦ#]wȵ'VL5*JUihoTZXE}A]4uF1g˼J#+bW4a>6riF;¢=joh׿#JKF\8$3832_PK./_    PK    A             8   org/bouncycastle/crypto/prng/ThreadedSeedGenerator.classPMK@}ӦM[M^Pҋ(" уRPOd-!)X迪
 8[{of{6En{bp>HAD*QZ^XL"?TAN8Iu$2cz2SUhV&/:<&\ [llm6*Sfwy="HBZkبB`$`uPuVube*#Ԗp 3 2\(PȌZ\7j|B<[;ssقwySPK1    PK    A             6   org/bouncycastle/crypto/prng/VMPCRandomGenerator.classw\u Oy#K2̴H˺lp(ql[YڴlXY)jfXڴzOmGmkZlu]wc)ED*_&ǗiKGԖgp].11
\:/3\S36)'"pc.GkKFWMT'_	pU}ǢXY]hM]8ʻ/=(kJDזTŦFÍHIu!+iVcњh$NǕWλ\25QW_RiZeyڙgJcښgLKMtVdXep-:Y>zXvl)75!V3ṟ6ȥ$N8>f}w[r`(TTCy`zіMl:m3Yg:g3,LacOdLNx^lgvlNgўl7Աx-D	Sxl/Q0E}l1aMv7Ɩ?`x;ف8W8v_,cg1v(>`w=2`a,{c,`,`G`4#q;
5؃=r|v4^b+0=cp<;wA\8٣1夰 Cx=?c-{bl%f^
ոP6^8a0oI֣;/Qưmd?TӐN
6aO$cO)bOEv&gOC(ʲ831QbƋq8ǥ8I\b6Iq19(81y$.@1'_\" b!),³j<'AE+=z#c1Y܄flKpĭaXnvwR,q'wkь,+XCj*-b
X}WBP )ax	.":+Ƿ	+)|.FxgxGHŋ8HQeT*axǊ7P/ĉ-*lbx},׈">v#nT|SW/vߠP|wL|V6?acf,[V_q؆o[{ -Vlq n_lW:=$uM	VVbɭ׽&ԍR7pYۜj.g5&ϵ\o:z;r%O)v^M\R+˯,M+=E6_s~ώ6dne^<I)XAi47m]sR[!,IZll{ͿE_E~PKK7  B
  PK    A             *   org/bouncycastle/crypto/prng/X931RNG.classTmSW~n!/,)Pb	 jQ)FQ	Meհn6ҙ83b;N;|C)/'8Mj̞{{==c0m2xc=)WfX|tg!(a*s"Ob0x33T&0J3/bt2yV@ՑWlojaT#eKˆnpӉc[ը͝m%gTZYvZ.N1Z xщKQǊ9<8<̠>|埤zʂmk:f09CCPidr)[)!r0C㶳3hW(abƲ5;G7fR<i3v$Ot^pd|	v5mś\w^-:|eZ^-8րI(6:T\j?3Ǉ'/1bZnIE.nb$(mFx!>U6Gx׏n?b~0Aw4RŽ#"0sY"6QFSXJ؎z2B	[vс2:р:QeG@e"$C,d F"!Y!B| ĘB8C(·p!
qQ8.g,a-/aEG3/	^uQ+d<>{F{Є`j!-]5!⃺';,p51nsGPjbP8CR'/M#J1eJhio3?֑*? c\	ejG;Ԡ[}F-`Ӵu]dM`yM<Ƶ{	GffT CU@7/"LW
M,2#+$=[FfÞ
=Qn):f	Sƻ	G 	_d[k'ӫF$7
W
2D
\#ߩJxIT_("QfF7dr8'{pzwX)i<<zQvHՄMEB{U*W>s ]oDEmիV.J/t5(+}iѩ_Mm2$];5x=c;OgS:LH|)to y)457PKƨ    PK    A             3   org/bouncycastle/crypto/prng/X931SecureRandom.classS[OA=CKE;*vŻ%RDvRn;/*T&O2ͶDJ&{ofϜ97?~`7bЪ-[sqQ}5'c⦾@s]IbP(1[p s^d,qq_!FʶʶWV
Sk](?
jeWmdHz
2h~P
T;en9A"|bc'-3H}vsfju!Cf7J#\[
ۣ |Px"a%BGC
)b\<㋧)~2Th?ytV7ui(*1
*`*z$GLB\E*1"$qQ%	c)ᲄ		Z
Ȧ0q	_SydW-ZG@]e]HVzcF(Zm|ed3=LC{0w!&6+
wːaes?u7b CD*	"id~FԑcʤQccH
Wr$ŏ/OmK
Yٷf>=ZVxhÉzRDoZW:	PK.drkf    PK    A             :   org/bouncycastle/crypto/prng/X931SecureRandomBuilder.classUiSP=i@TPD,PDIYd_0B,t32q?Qif&{ϻ/ `S@P	v[DeaW*eWjԘ0Ӧ7) {{YJ7,;4Yaio<b˦e;Ic|`h$cgr	;lͱ$`yde	EQ7(,IH@ @?UKOս
}m(s=FJmښI'M=-vRꞝM9Cw=x'}E-.c`K-8G]ӘyC%EH]%IƆ7V
^ܑ}/Z3-uq曧tNS2oY ⮈"E4x ⡈G"EhK\ԫbKv%\:nRj~_ehc;8AUe%,4fSڭi\خVjْU].7#qEGzdBцQw ȐQ{QJ!~QwA/sQ	1.c╄NLJƔhA`BBZ<Kn^עoQKxțg1泌@Z.fk[@Moy,}8 !J|s$HӑtnG>c5S<+pZ(]|l`T JO0'ļBW_#zU_	~9><JkA\w(wR_ XhcO% PK  B  PK
      A             "   org/bouncycastle/crypto/prng/drbg/PK    A             4   org/bouncycastle/crypto/prng/drbg/CTRSP800DRBG.classWSޛܛM+A&mi^T-˛J
lKBusﲹ0К".ޝ	qs{(999y=繼U v
a
]hհT1 ]v:?k<ˬ<-3;%aBOd`/
ll;k}5mZDe"ȊȪHO7Y鏬FmXtEtetU'틮GӦw\aA	Ʒ<oo{fo_Zқͧ2QOpcжmR9+ge+̎䋙>	F`Ul]K]uݺA+MDM.vΤ2Vb0*3i+JbWm$Y$DyU~ldn;_@E+7R
2E+-sؾa
gʥPxZr(ٗ)Ӿ|hilitr	3_Y0֐2P-
b>0_v(%.;̥C{-Z9@i}GP*f'˙|.{,bJ`h]?s Eg#A"70J&k8aT֙Ewzɉϔ=tA KłD_~,WZ:bfg%{rP'Y,&'R!('P\y(;QzLRE32)MיRHk@W-NX9(<FrO
[HHK~ۥ4ْ0
mW/1dq\,ܓܟ&s#٬5GQ)`keFe
qo=vϟX4A@r9_\&RR9kur[.z	敬
br_^,sPYnDkHzc'o/g,H-DV3Hpnc Kw[㄁B҆N-eJIn<]P^6d(:z"^ئbPŐ*WUPS.QY	l4Nv/Lk|).5w͟Kݦ-;TKw^ض$q΁9Dy|t܁kN:nm::ӱJ&0c5&tCױ4؄fIe:3Ydt܃kt,<}cZN-^ǭLzqбtaE[1c3c#e&|cLq&_cu&`M/{d/^|K&O0yɏac&?e4gɳ^C/&?b?3Fm&O19D#·<A/+M}ydvԕS{$Cᬅh,$ЌS$}X4_8k>BeS4i<MLSfHH]θ	b\1JhBc+^GfQh|,\T3ay
/
e
gNSx>yDMLpج7dlpMgGW

~<<,3-+8Z
6\}"C$xHE~5LE	T7]jb+j1E1w}j§eԦJT`WT
{
NFXw6'Y}S[%6*9v;_ǛL_d~uԬpWبK6\YɅ*~84zz]PįMr-pƬ2?)wVIn(.ٙk	&13'I@ni>ss)%=X̉1ps675VST1,1j0&W;U9ESC2}P>"I@Z+-/gho`Μ$l6Ŀ`gW l6koN5B
lg+Y{9\cVcJ\>ͯ$DwJ:
TJY
̸TbLxB0	!:-LOI
͚eh'ϯGXJ;aѯ{y&*ᩲi:H<<lxeüݾĻ6mFl4,`Gr l4F0-
zH[ف9gxf2<fwFE c-QqPL.:ǕdD,J
9Ga]$]&Oڌ!yq-BzLTT>:=N3r"!38MpD]tzrf s1
rҍd,<XO>
WIxDcDc#A$vVY<o7-"x.qM,"5O;l:+2'ϬRǰä;&r'BEEya{/Rջl.nRv.MR+3kf'ZۼAGXY[QZDٵѽsr;FǏ_ҫg_:^
άfGF8r@^KY~)/-!Њ瞁W8/WdÌ'
m-4w㧇g?6㬘~T@OOi6yjV!)t0e:uQL9A]C4WO7
O**WB|nRXIr'H#5t;5!DNeͿ&UG%iy{Rs4>vG2|I_͡=T?<WxBx}]~ײ~~Dcs	GI+vvxpHTWI`0^6t?PKl,    PK    A             4   org/bouncycastle/crypto/prng/drbg/DualECPoints.classS]O`~mQ:DHn|/?GLd	nXuOMM[a}9y~+%,Gq!rn2D0:NȈK]nͰ㨰jgPH}\v1_>lkzͷC8OzIYAc%98U0mm8mnCϪp_7y/DZgQt;^\
ZneǧvsS_6&%HC[0WC:_jyRտv GBBB~	Whjf=PceĕNhSQ֞z6]kOkȥ6HT0(` kRЁ^D6@Ƙ(ƻ0n
d$1#cS22#-@1Y`n#
՚QyjlQѯAB&-!
(51Ixg,Opkf=ݷ}Ar+N-c>=]'LHs(!CvJ;$3	#GQe8NBPIVi>	_Q;-5bhD4Rw
݋MV?]ܲƆ{!`p+]{w#yZOX
PKIh    PK    A             7   org/bouncycastle/crypto/prng/drbg/DualECSP800DRBG.classX	xTu>WFB {0޾c#J ;أefd#;m5i4)-m㶎l-Dv4n}ooi}_s<	a	0_~0s=l=}/Ir2$*22l6na;dd0d!АEW+v"@mǃ{	4+mD0x
#<|@KExf*c15ao\3|CX궦RasôYh;Zxj蚁UW-1;ܴW5#MCgS*R+M=p3sC4Mr<4mWsh3۶x{CSM5,T)S[3,#pTצ=ӱ0x8KV^H
ni.]#}rI>R<uThD]aʘB3иX:c>U'tt3
_G	BްBL
@,OUۡm+Bek<i4j!P9:}b9v|WC#z2+0ЙѓP=w;j2fV|
=랦aDǠx@M::~QY{L'i`QP*U_jm
ʩʭ3ѹr:@ļla`Djq8~hi*lB?=0u	]\cs6i80W
nRL.f
>641\ef>⛆k6v`9t\i\DtSCߩUKSmSw]RmR#(Xwă-݌R2x5SőLThyca̢[{rilb4^xftR͌KEl+Wa>b5keYƟXDp=w?ܽo_n(w`wpCVރCG
=x`n4TLŒ#
tQ5#j /W'82H7	Gy&Wx0^W'^+b	}8>6V*Wkb'P'`_<ƋD@+
cRX8H׾qZ(n\8< 0ye7
~''8BŒ8nRKʼ9Ӄ{Wţalp/@DqIP]i8.r4JcXdoO7z兎q-SPua`ہA-l߆V`Zұ1^F2|Zhb%?RlDw'Xrв˝֌ Щq#0T34w¦Hujx3&fZ.WmQM^6nx6Xl[
}L]ڸd6Gl9|ܱ<Mw4L7͵ll-{αm4b^ix0쟡Z\wCl
nXz,j;ձjN`EP*ʋsHD|OD/0#ˑU#ڍZJe3{ڒ8HGy=9ø%Ԗ\[cdYf:$ydT4YC:N+ǇT2T*Jև飴@r(:DDe`H!a3]:|Z$<8
cY45JǻGrX#BR]*+%Lx%}VZ	~M
,ݥ7_[HxՃm4*̢-[Wv7/;rY&bח/5%Q1=qg'kcm}YzXod$p5$kR΋_*zJbGtEMeǗse1gN,&GGsxrha\Mo,/	e.![zhQ\>όDZ(\+Gj:'Jz&h&8?6ʰI2,-2*NdPea$xHa	I@%Hp\K	F%(JP`LHP"umr]_2W}<t\2FKŗKGZQК}n8n[:+.36*.[?Rml-(v=ו݆\OQk-nt틝Wv疙ڹ\eoB-CudF5K&׶̲w;c1qj)T
imyvs?x=a~p#2&];J
6p=v
<*1'L8)>$qOS\)<xY ,vaRG@pT6hVV)۠E'a}VAX:+p7lP;!)´aF}0WK
_V>L@̉e)0 -?ϊW~N@H~A_~E
5.7~G
=_@
#,ORY<#Y<W/Ny+-Sg
~.,?[IM'\Bw{0)8GH
~5?%|^XHO3~ԡkʞRR}0+7]OV*~%~ӱ!8lAÞ?`N| 4DL'bz2bxLcz*աُ:(Yh[wWu1UD("=1S:1Rs,%+08S/rHB}Mù]8{tc9MV5ڀt) t6XFTЈtU$Y)gC>3}ScmoMLu훧HckCsXy>{turlz5qt|asFs ϡ[VKdj|,u8&%qpYr.NٹC>M_Y؀T6"R<$H"axܥ3
oĊVFpfm(w$Drn4',F݈;A$xQH9"	>ֵ-5ނ&!|Ke
FWuԝhGZhǠ@xvۉ-
Wz1U"kࣟ|^;J;
#u' MD!mW9hd4%wR-QY6nƮF1ɶ]dd:?fٴ$,zַ&cc8_8fKGEߞ1"HKٹ0v
\ZbvU]*co:z[<T:N50#:NS.,6h,كO'^Zv;(a!M߆<R
{1kބ7!a-}XT	+0Q$Dlf֑?e`2ꁈ4.C*N<([cXQ<st<C6}yAhVu捕݃ߑK24d_}I>Xo'҉N,uD60:Cov^V/4yecYBS<P$!4N0!e
F3\znQq4fvCF;qҹK__t
@!/x-045qc˹c&j}R*֋JXhj!BRWs+"N9%VJ'c1~_6]]c?-51~O̦A}<&Ij$$Yg
M'Ir$Y5I&IsAC|3IzL5$=xr 1|~K$PK]    PK    A             5   org/bouncycastle/crypto/prng/drbg/HMacSP800DRBG.classVwE&6MRD, JM hBA
6v6J*/zx/<9Rƃp;4-4ܹ3w3ߏXЋoAl
=AD]|].'3e1hl
iΖ I^u5,=ȒH[̌ZF^rbWM'dz"OLe&߮MۉUt.nbѯV
G3tUK9݉3VbeU1(.Eڱ})STj8K3~(J\~c̫a[qÓɞ@ܜmi؟-78zECvruaKveLccqԚFmi[_Nzߌa2X-LIMSu[Zf]bIղɓr^,*{2@f`3Ϋ	S
it
Ezv#e\Zi
#85)UF*1총B"GijZqM=9k'DY˪*3ztQeCC;.e伓+$N;r OCϋ=I0+U2$y9Po6\~	oJHH8(ᐄޒ+m	}ޑpasr<@WoC=5cXtmΐQ.NRmqJYUPK)9%#6MNt*2vᴌqH2q-|aZetsS6؃|FFFd(Z99sp01C8}\ap9DipC6	>㠵".qA堷bS-tK6
VU-wJ5|N\Uj)p:HӃG֜Ӌs(H#%SY1REsӳ_'xi,Ʀ{86_ug	7j\t.,`ch ~TRKff8G)QiZmp'hG@BJBI[)p*y#-Jb?@,LꋆϏKyC<E8Ky9,/sPu.S|WMۻϼ
Uk5T?Cjzh5EbtWO%p|_[)Om=w};lJ7%?N9/=̾"R$pHQDzSb<+k[yZSįL	C*uP!CwaCO]?H=(!yvSƔ=>
F`JKaDd"ǧ<mBWPKeR  
  PK    A             5   org/bouncycastle/crypto/prng/drbg/HashSP800DRBG.classWwgMfvg`Xd)iBhy+ٚ6Pdwlgg#ijU
ŗ%_R $T/~QQwfv{{<`? < `'<`]
V 6;xBԴt _.f8"SPX11I猼aw#!MK<_,iCaZfa*\I#g£SY,YiP7y2O&RC/M$4,e+&c.edo[z>k-aĨnͱa^9c°)ݿulM(G\uR\Q)bP0-2&50R>?ټ*kk2uͣ*mPQ-U\T77+1
)4	R^LYۺ%>U#ASq>-I5Ҧ4f>z_|k9juӊ좼
)(Y=[):\֤}'	z+gϹ&8Y|^קh"Ɲe^R1)#or%6|%Y-ieKr^p*M,Ө_Ar9dFi{(1E3!`#*Fek9
QʶRcSih5U͖OR(Xwe[>U9cfڳg먀-<]tr*+*)wGZKNqgp{{l\dDe񬌣2de<'2eqLk4䰀pTb))ЃMM4F>K`j);/]joq'"5kFrOʯCk?b/Qʰ*GTE!1CVEUB3t3l!ԩx*РU$I>Ud82lQq8Ωx9PюJ/qSx,"Pbdy)Ww8p_	K~ g:1 @ʯ1\d* .Ûd-e1\bx#x5e_fhkk.C(.̩t(b;Iv* Q<RM]pfǮ6g9+5Y[5(!'ۢ4j?po?y'YH,Gr6މ.{q~<?IMwCoJ$J{5bZrDx/T{x;ŕ)TNb324)Aƈl$#9Ej~G/es	x<8jAC5[M
J
B]\لW߃fu"{!>7"gD_MWI'VaHQ}浐t vR]#Q/:rٚo-RDn˫_Na\0Wr})k$MD(onVJ_j_qj4D']$r<R):5P5}U@xܻ*<gv?[#bPXii}DNCf bw9yIf9Fd/Qgu-4rP
@6@q!!9xƉm\xv簹|HHZqxzU5ݲ޶ajHʰW"fb<탕

V>/	^ċC67+;tl6ڨTYMp9vYlSJP~:<3!bP	ɋiTΠvIF: .vUB
/vHQ
'Ap/'?D
	tsAR~3sC[^{+Ye%dkVel`uˌPKlǿ    PK    A             3   org/bouncycastle/crypto/prng/drbg/SP80090DRBG.class;@gǀ,Xi$jYlDdYMhC2b>
3'0K3C`%!
դ!"TקR<D!/Ieϛ{-{):SoM[mWO8Sc4uDχ1L1 ǵ_ KΟFCPK1      PK    A             -   org/bouncycastle/crypto/prng/drbg/Utils.classT]SU~8'R`+hm	1`
VaneL鐎^z兝~ТLᥣ3l CPwfsߞ\0
K%vNM]@ܵ+lٸdk .c, Y;g;I1ULt}:x

3QxR߲60E*-f,iCLmgcs4ڈj[fIw?M4eRUNYa6nf	ٹHH9gȖbQ	6bcZf>SʹsyusåʎQ
Ǔ,1X*_Υ+idXX)8Xm='	4CIB2SVli:a}$4]TNkáYun78s\sD89.rDDOc%@g0_iMoYy~υ^GW*y;YIewp88N1DM(M4yT`JT.MЪDTⲊUU⪊W7q-Kx_
=&(G|@GR4K
&Њ	I4	iYlXJ>#om1_%y$G҃%&䧟R&t=@"'p3Y݃]|#Xy_#9u"e!A}=lw鱎}ud)V
[A}*U&CVzu_
?k\~#n ۀ(R6=t={0<XV5nd<DFk&}=
B=-~HTOWiƿDPh<`IStq?@cݘuqcc50_~1'Tsh
.KH!w^ϣȴ%=F[돱i[B~/vt=!<;zC\QGhPK$_  G  PK
      A                 org/bouncycastle/crypto/signers/PK    A             5   org/bouncycastle/crypto/signers/DSADigestSigner.classV[WWN2xBT/h TX,ې`ę	kk+vYi7u{2J	h>|rN߿~`[#`G/}yK@MfXe̰u,C%/rβ-oX|URJr̲媢q.L(czV>"pubcݶ
~@$HFFsenrk\s9Se5O_
T*[ #(gkrlƜ3S7XrREU/|Tbee*Z5ɡ"/@U~%-~cU阳SK[nlٴK{UmpӚ-U,RmV*
:5
tvzURjR*Up^%E8w tK@c^Z\?7vgU~T&qߴ]
ZE>7f_#btehZZFSFSX{k9UVW1ټv4jџm}_DoK#{q>DDRb@DJ1wc.׆ -!ԅCש팏5g9Oc@V~vZ]y-$2bUӜz}8;_8#ַ~>a7 S؂Q᧷!z(6F7c?ztEqI>|YEVH,BD_Ψ=yޏu tӱWuᚎc7X|bv(N(ΰ8[QydavL(݁a}	,`%:pڈ3IpY1YӿnNה;t;aI&PI/J$1Ey0>
k{VTzfD"+dЕ|s}t1"Iֱ<G:f_5Qcc9/b:ja<dAH:pECXCX&J@{&dPu<V`1'<}g&W=#c:
&s
-}7Lju|iߡw\VdԋP?8ĈISQ
BB|B@(<lY1@xpix?Gv
SM&'
EP>/R9`b|+/W/1\7+
9/qPK;D  
  PK    A             1   org/bouncycastle/crypto/signers/DSAEncoding.class;o>FT #5J,KwHN-(cd $'e&02h'%W&''Ug;Kgg`fg`ag`ed0XWZd]
RD5^*fcd``g &FFN X4PY PK
k   8  PK    A             4   org/bouncycastle/crypto/signers/DSAKCalculator.class}PJA֍'^2zɘD&c3N؝^q̓Gc/U]ê~&;!\4cfVkhobeM#2'Cj:oz4L$ly7׍-!(Jqw>xaqBOwzEw'颓^-OڿvRrc(@p;dPK3~   0  PK    A             /   org/bouncycastle/crypto/signers/DSASigner.classWi{U~Yn2JR6EAC"-BJi P64	I!ﻸkJZDyPvJ{==ܳ;=`%~AHEn	H̜i#}Gz6jeie=_(Ӹߴ\ ZV/e5 Q4|h[2%4AmZn ?ffR95,gga'mfr]	M0h6
IQBD5f
aUwAH];6,
ܝe.WPx,2gi6%Z.kythd䨆5{0Q.L8WP{5y*o8Oi HF(bJYyT[)aÔH%@8`o[D˺VFB;h7Ū'i1uȘxu؆4[oyr!b2G.j_`"v;M{lyyY.IDm,AJXy1{],=vx%ZimjbD˖=t{?=quA &X&hX.p
V"p]h]kdi3u]dNG`-?DvMuDtN6
"pyY.<+!1"}Yd=Y>vǬucMuh+=yԉETj
U˼Sk/p
zkG܊":תiC،JFfΫKR]u%U3ˉk}-3Y{oiR[,
cz)§ZyPЈ]1ghaHW`kKA3z4G*q0Pp#CaT@S0:O̅`!(	*\	3.ebʸ9wQ1P`pO0(3<+.<"c#,"-cJ2Rщ)^ve=xyyO2<C#!mk]XD;	(J8B2LT£48^Ėq|s:HfWe6u$eRYU1׌=o?9L/Ocq/10E+/xu(s)އWqrqp
 "&3~.I1!V%ڠ	۫z>BUjJBJ#Zw42(LRRL|LC\
O~a3'x27,H}8*x4T>^RWj@2a2Pw"WC#	3A'uֻKEM@p5)EC	s!5VE.>'p8RjXDf$Y|z
6vsUvU2lE\SEU['\,_vnnJJTD\RSp菍#meu|q_^w8.Q3BLuIH6Pʱ	|Hm+t'CU%d'Qźl3peLu{PKm  k  PK    A             4   org/bouncycastle/crypto/signers/DSTU4145Signer.classW	wdzx&dbHJH)BLI-cIDҸB}8,JHӦ%2PҍJzh$+FNrNswGo @k˨] 5zh?h=4@dG*gN:m"ɩ}}Imb|$ft:a=ԬL2Eҍ]$q閜2Rm9IR6rX[i3?hdG̲#c\z$'`oXʂj&j竫I#[%X@&c}CiQ:*Y$vEftq2eQx'{4wW	+׶vRU0tRqERȣY8mg]5@10FqZZUy=a"b{x}zG$)&$97ie3fZHE;')ka6CּŽ2kp}?QrϏ0ǩ)G<uJ}.[.+l_Va2._^43RݾaVKUڒ%l^Nam䊍xneeMoc6\ڔ.fO@RvGee
z7N,}BX4	[^a%ge*Y.xML=dG6g+b[t5Ys%9&Ff	"p@@Vm}n.IO	|Z3	;vXAPH|۞&RY׵2k&6tx47T17+K5}t^?K&n}͍.Tu7+4g/Mѧ~(7T5FcӜf{׀o8WryկTS=>^Sr},{ݿne
6ͦ<>M^kh<}nP08hGw1DTq3B*63DЪNU*n`d>b_P؈6 b$2*GVZ̪XCE'8C7#*0S&̱*:`X

6T`>I<paA]x_cxd1?Q0o3|Wn|O*؃)c
	|;
]C2,2<{񼂽$)<81U0Hv>< ~ֆ}x
2E{SG)}&')4T,*!tW&m$~@V5v8	H{uW"z.`bzxٳxgX1'qڮ	˝eߞq0ư"Ӎxzϙ6pN{.]#jGqpz!-EEOHZ䘃7m1g/v"D:߂p''Z/-Ļ?$US8pp|MhmNiaZ:"w`PɃ!-<]yZ>fIpڙ~ZU5GB'9|(ϣ5xKE%~:<hn0(SZK`JS;JX\tm޿	RBr1	jnFdE?Ƶv+}iu1\u(?rß+WxkB^	)VIx[J='_bsxt-LVut֓^B8Q<zn<^[˜W2Ftp;Tg1QWbx2h/PKW)    PK    A             1   org/bouncycastle/crypto/signers/ECCSISigner.classW	C'Ro$,jꤎ!M\\5"-bXɫ1"OH80N6靶iJ$mgvW dS{ox9 f;Alc,ڝYE ;f![|cl,mtF!'4]3o2b
{PS75iLAzhOP>*ؕWI$<XdY-)Sm3l*G4[ՓUWLUOgFeP$-
4K'ڵdL7դj?%լI%]hI=SRYl4m֚તu]R5FG5]=ڑNt tIRVp|@;E;x:G}Ha჎]b(t:FRZ|:U$c=0@	;2:qeRjRrf&g2fSh,RJH&T<W3֩jˤq5N7K9-NrV͜@-w<N!BjrȥL-icZS=m$#+Y3F~S=Źbƍvh1(vZڢ(r̽8WRvXYw'r?$u^ؽ&R]
#9V(eWp7,ְm7gs[VWeҥDgJ宼ƔM(9SKEV/1qvtNC!
5@ֽ8ln4.U4]~UrfZGN>w%Qdnxn[nx:
t
t	x@L=w^!ݥn+)"k7Dn(Kv:(VSVHWWOZs:^QXi1R0,>"&"	Z;OzW
W\5^V|yPWfqv\n)TtMڵh
t%8ʬjFV	׉In5n,e]}=HK؊pBBMJ3' ! +vR6TIլ%ϑ$\Y	0%<a9	QLJh]vbJv\RBBj	5ZZnchky:- 0R$F71ocx;;.w3'A~2|4!|2c{>	2|3!_`R	|t*(>mtocT>8>Eu!}cx)|*}2|a#㩃~9Ϧ_0%sPIT$EAj5 Y}c>Wֹ=6שlIgKA[O
IR>5x=?h/$FfHc#/HZyx<#y<s}\jĝSy̜8zݽ$E4%"bv5MZӨz<cЇ
vP:Mk>[q9G.M-<zJH	<BkN\߼8BEZxr5q=lKs}²iTchb:/I̓A{şx(i@{O~1?>tw/8*'=
N(=!O5Y9,@qF&'$>YsL3giXHp]ǿ(,¯/p< 倅XȢ]ATK\zb+wHI*zO:!{Q=]K4^47ڵi#:s-~$X,c9qg$alqzO<Gv7<Yqq4^ٿ͋|sΒ+t+*/I`-%Yql(f>_m[Fxe^ׅce-܆.
;3Y\{xPKW    PK    A             1   org/bouncycastle/crypto/signers/ECDSASigner.classW	tc4h-hhYP M䐂!.&iH4ht_}o@.6-0PHZfin.'l1TgtvNX!	EV^H[_39þVeSFn۶\CΎVbokWfђIݮ 9eC։Z{[\޶4#g牛0ԄYMZ6[~ː!eft[ӼRsErF:C.:S)#b3%ld#Z0r,8 Yä@&S92u6tΙYg}LRh:
z:$;vҲ[z55]Z.ifv	{bW'~o/9P9Wob䐑ȷRZHn6L5g	^ݢцƌK7v6ϝj@ci/sl7DhoK9$:YeMr<LؙL)ݚs;4&NgoL+KnFJ7CHB1afc18[!nMn
	=ߥ
NCKuEca^YJR7V(U)X7vt=OnrC#qؚĦ;
{`=wG\4I)^&?7l&lksyn	bc&mRRdϭ^[./G+ԑ+Pν|+-区Ustl6IbfK.yŬ~V1 <Uf.sCTϭ^QlTӍ7R#ZBHB	WJx$\-!.I5KV%lQB	$J,a$ЫkAt%IvE˫gwQˊLHd~"/K#+V#me֦_w+K	gb#b^8ixKԻ[W-
M6qlmtλ<m
}EySiFjGxejg?%WyЪ4_Wֵ鳛݋G2_&ϊiك<h6
7*s<3cvۖK7Ͷ)hGMe\EMRĀJ%04bث 
0SpD(C ~sQ Y*"[SPS
*XKWP!
+ǈ03,m
jr
3cPJ0,ëT{u


L]Aި`5ޤͼJw22>$a ;GEC2n'w2|Nƍ]8 ewd#Gd&_2^d>Hw1|gçF>y)VqB	w0|0×BH~+b&'_{i=ZFCMAySf 44q[je$BD+y1(:0"si`yY_Y9~jBG~F~,B_\®xłh01w{;Gދ1|#%=siQ?8Ӈ]"g-K]݂@'V鴯0-[8T<R$=CQ{-FhC6iq=4QԺcQOŃMXIjqOeUv{?#87c*~5q,I&Xе˧w}h2rKzplSBWg4%9xMaj|Ovi{@;T6LN6LM1
yŃA%+2.;*A5I\Q*a5|vxZuժ#8IBWƫ3ؠV;\sרac&^֪5JVă6:TӅc)xKIდgU1a*gx"څPO|0^ [B;L<%!WD.B tXg	\)c|nT⢤*]zED8?DE6	@Jȟ
F^dG{ܵӋ\o8W9!0?H5RZ!M*%*BPK.  }  PK    A             6   org/bouncycastle/crypto/signers/ECGOST3410Signer.classVWW,eԺT@.ѪaQ@eHa$ݴbEV=5ziBOILОӜ9{sw{k
}	p"6G7_7dk&RKӶhk]C}-=-Q38ϥ&/`v=c[ZAd] %n2bjuܖMY`JcyNUOF--^v(Ҝ$әIU+k2
i:d&&IJ>>v0AfZWv>fRNTbf!R~Ӿ7ID>>T`JՓhAJ[V`q`mq[$]40HD!rQIחΧ8~0jJ;Jf2kdp\X)Ãl38tO-qh[NALHY'o:;pi:Lm&)-~ںi&{5HꜴ2T
NvK̖X5nK}+Ϯ'TҠOoe	usKжj,hI4ӭw<*qVKج&#[lv-:YJH0l0ű|&",h2?92^nzl:uؘؕTd(Y
O*"D,\=""DTX#FD""DԋO:
"֋_"u@:<-׵Yߐ@~/T99^߅E'IsɸQ jxi̼ۧ/TC_|Mn9bߚ$bWfO=qWڽb'᨜No5C=<;RW(pjN;T\1;m5PTLQ7S,q'-~tɐ8<2V`r̐!%c)|WFʘ}2px,tX2‌xQĕ*c>ze,Ⱊ封0wO*$eC?_dlA?v A
R`PB9E/Ih^Ђ!H؊'%lCVv<+!aG%i	;V!%t8<'a߼	12D:}l2*Yj|MR{SP`o(^S	94
4z/6.i<RX ƶE#k~Gdsk~C$V9|jmյc8u	`6m"+p|{	eRB&}*z9|ww@n2]3oۮ w:yGCNq[!w!I.N:g|BgCeJYgrq|Ujs@*"
9g8csr)bۭb'_:!!bEOԦnB"Pglr۱*n
6]>C!oEQ5מx\j'B3s!/p׽59|X$OX?yܞ'I)e_,Ɋ#e/@RN&O}3<ߞ|a2эLgb2t2M^J*p^&+}kPKS*    PK    A             ;   org/bouncycastle/crypto/signers/ECGOST3410_2012Signer.class;o>nFf
0F6̼;FtҼ⒜Tʂ|Ԣb}WgwcC`#)Z XxXXSR\RRKRS؀r L`X3pl*Q PK9ߚ      PK    A             0   org/bouncycastle/crypto/signers/ECNRSigner.classWW&0I	hPJ7
]6	)&'$Nvo63ٔࣾ_j}ECMlliGFH=gv 2b~9|{ιgvߺk _!!4
aB8(ipCV~
~H-Gv	%T
TK%ܣ=ct-Z,KP=۝c֧DlilK
@)3,1`f%aH#= A5~	2fGD[j%EK8ZvnL"$9"abT+fEz<$io kiڣYZN"E-}#8SejoYԧi3GH.Q(h׵~"7_	[u#_lljVF4б8
gq[^0F){FY;YѲ6~.%nE3"ElpD9G\`vV}oI!(z>7L+etzô/v/sr1}tYUq=nK[M+1Fj"쬈m[
9J
ǓS'2:+1{16y*hVKrpKۭh*\$RsZZȡ}=ȹwC]J<Bsnm}+uO|FXNr"w[Is׺SϹN"EZnXvVszt+=l=+r kcꬲ"9ӆAˍNPqB1=:UNTmsiXWXz12vˈxd<(#!㐌2/!2d.Ge|PZ!ꕝMtdR鼽#-~"F7GG_75~G;ev^G
lĊU`uoݫsGJ4Fp7XZt+skZE%흕٣PcBz[C"RW>z~enjP;Qiyayw~no"O]x*1t`TdTYT4g㙮b+ΨgU">*0U@^X*"(x7la؁z؎'TdPs*2C㣼TlUl'T<'qdgSVЍ/+s_d}0PA?mxG
lMi
cCa<@ex^)<
\

>(~`_U& gEklFuN#|*Γ3RhiEzQ1˗qw9O4EI앒7pjuq*KCzWDWRyWq"ֳ$$zWR,<N$Tề2ZdT)\0Kxuuqrҿ54MJ/^9tgk5A~d#`+ay<>X[5\)ÉCsCHgp߆C%%\BWf	+/	%4pO'4~^¯.36 DJ{68`U	_8V B|6Ws2z(i0\
a
C	s\bp`p!6c]:_p#DXn_F]f4o"<mF2$4yӺ亟R׃M1r!|!*T6r4»&'`5o{dl?sҮ84	HSNXؼ(,S^Khf"4YUq$}(ټۄ
lSJ7KFPK8~    PK    A             5   org/bouncycastle/crypto/signers/Ed25519Signer$1.classA
0D'*=*vZp!.<ABx(1	|0üŔ!]
+*0}oDoN
JRZ~/5N$fS/Up0cİZg:\|0?($Ҕ/1A	xY,< PK      PK    A             :   org/bouncycastle/crypto/signers/Ed25519Signer$Buffer.classS]OA=mٶn  *H[(%`˴.m3;ۤ?&~?xBhH;? (bdRRũ8%>C<G
``%H!jXcͰ5!$W\R0L|mn{M(%%U+Te%?dXkʺ]%@vevK~دˋkqV	^_
x8.}ENXe`\µe]YX*
MMx(TowĤTWIҷj͹&,)MH2qİzV߰S^q
.^Mqh=	Xô0=D,܇a!hYMb$"ج6$c!qagGgX}sA hzϫB?1Dt! oh&L3TAxzw|g`o711
/=<u&?N3.6t|V`)s伸GĢ>?3#-5Ii'/Ɏ$ƱL), &?PKfSU    PK    A             3   org/bouncycastle/crypto/signers/Ed25519Signer.classUWEEBVKiSmB-R֤Xc	 n60v7nP7/}HX}xg Zywg|ɟ|D_j@<.of
7ӻ Lޤ9뭯܎XŲc-in*'
L3Ofns[T1i-+n3D-?Yښ0]!LLU^ޝaۼ
wնjv'^?Mjܦq@`8X2fV3yU(o;ך"c)cLɪ93SsLsEno;k*pJY~dZe\6ɻw2!^2/؇Z̲aҏxoNϷbGǦf#ۺ1'ר_IP];θ^+:Àw?wݰomro+8*8`DY
)8 ưOuaSJk*HS+_tmy.	ߐ9Q?O7:3q:jv˟AGT|#{9˶q̉L RqWT*0"\"MHͪ5"9!(BHinJ4¸0(1ô
cirܖi|4Rӵ8ijޤZq7fIAJҴCRGy^L)I
(I_h{,
SlXyAIb)&/;&(Fa(I]l?!"}ANhe>5/l/Wd{=<`N./XiA[B-i '!gGxE)d4OezZ"|GhV_Kl5 GhIAdہZh`.W|E?"=,dt$7PKh    PK    A             8   org/bouncycastle/crypto/signers/Ed25519ctxSigner$1.class=
0 _j5U{bg  MCl	$Q<x`JƙFcK)ث>hɄ.2)#gu[VU~&志UAA(6B[ul[Nsϗ ŏ4zq,jH} PK+є      PK    A             =   org/bouncycastle/crypto/signers/Ed25519ctxSigner$Buffer.classS]OA=ݲmJQA@Tmn)B,񋤆]euilcM1 N)Pݙ;9<5J2$B)9;6:k|
C)a!Úd+~0UyW_2armn;mɷpoBeQ
0<]4^s2'
Ypڎ[o(?\4.	ˁ]aD"NXxWL3\䄕Ar-*jn!
>[A.|OHԠMUDiZ\6Lc
a`Mz'z]ʹI˷5ǀQ0#Bmh&#e'0ƐN.2	(c%ps8Y߮џbjtv6ڟ,JmuGB=QDzi7Y7Otp
;{=e"jG3Gg?wQw T3'Uvx[~Hd5$U:rFݮ
!Xh0!RL%ҭeҍ%8h5E9x/PKhf ]    PK    A             6   org/bouncycastle/crypto/signers/Ed25519ctxSigner.classU[WU&@ [Bk^RM{'a`	 }AגkYQޓ	dI|}{>' pDSAt)pcH-WC],ۍdd*@ctx] IKg)vMѝĹhf0)ҼhX{v''#=J9K:4
r7H4HNFs
|(#kI@՜)f~h(ݴ-I:B(ðr
IjE]ut\CR Yx4eN3.t/@PWmR"*@if_5n;x.Z\Su894tYx&sFbGQBܯcx%Id$3;^[𔝓Z`W&%>&kI%\6G;Pv-J-Yt.{{\dM9+t)WpSA]Q!/'kPiD/=:tn׌4{ҩhm|-QVGw NR˽}M
SWo{ʕSqaѥ"
cQE7>Tq
*blG7xb	^KxZ0%6'lR!4q64IhqsefglI0!d[HڻtԔEKZv=-\˘(>@m9Q
)gS_CRKmS`K
Ϋ'Xd! (pBaN]?1u8O`47tѾ33|+ˋϐ^#{H0Knf0<HN V,Az0>)	t|+xWEZT{G{1~(۬T`#%?_F}G&҂L*᫊x;jgy#/PK;jO  1	  PK    A             5   org/bouncycastle/crypto/signers/Ed25519phSigner.classV]WWݗ&("1~P*"MD@Q&d`3þ־ЮU.sSWs'^ι3ws9Iw n
)P g8@Å>2]kiZn8f0|Hp5Z^NM{^ahz8s/$n1UVBZϛAl8gaTdpFuu`<
wzN<CǢSg<wpN
e`Ajm&-qmU7]*$7fsXJ)yZg8ϩ%]"]SpiCVj)yHğ}bC٢E}<<lp&,;X%ST5xBwHz.m]jcxm|n9-6,jn\?nbOY\'1A#p[[Hp-aÉTzm[zJ81eq14]ItB9]R1K0Zx mEm%tJ,ኄI.S	}"%D%$%|P3ܩ9ԉ>~Zs'vGdpӮMWp\|t"+u&bGH}sx=ڕHz[4q^'T0	*}	s
!+ѢgMlRЍ\fÜ0,PE,cT1<q+2ⱌ	<	$cʘª$`K¤Zoh+)ncPG|1[˨mΫjL@#FDUo-<y*Dv(d_|\!.؏h!}4]<`6)K{>^e%vbF.֣lO
.^NsǻGߢpƏ.Ω
-_ [
px`ED?V\<zh%t>"+0^ᷖC=d''0>l7V̳/8E.s +0J*Dʩjj9vk ? FDtIGtd^1䍀q<:kym=4EtPKtk3  Y	  PK    A             3   org/bouncycastle/crypto/signers/Ed448Signer$1.classA
0Dj.܉!҅q	4ĖH^ͅPb`y	@`J(;yJg
ͩAF;?Ֆ2aQ9e}h9x
a~pI[1N]@MPK"(      PK    A             8   org/bouncycastle/crypto/signers/Ed448Signer$Buffer.classS]OA=mٶn  *B[[JEHjxOeZV%𠉢12i+!Tnrg=gg' Jx`dLT2!юF622CE-3VTѺc
+QMB)fCn{-(%%	U;T%?`XoɆ]#@veZvK~JѫB	0<
|=\PуVC+;aY poזuwZ
o>xz *ϷjP7bRB#TL&FMMfbugF;5,Š;[bmdw-$0b!B67p$	6ILb1)d\$qK3]+mtG/*7m*^[^
2	щпFXwFox0+PQgAf9oG>jP12	fG֢zc"zDR`)t4;tNoi|jni]Z"ZVz+&;Eĳ#gZ1Ӆ PK@hVX    PK    A             1   org/bouncycastle/crypto/signers/Ed448Signer.classU]WU@ 
T[	I$R[k,H!	Mfҙ	RkI`ٵ+%깓	A!B}99~i<- ze4Y_aM5M
yجCkd)C 2K
µEr#eh^$ tSwof0==3zvX,$j/v(K0[8C]nE]i+"zMm,qmU7]jT<LLb
,1L$wZ1e*s91uj;6:-uWMYJ
T#ku7Ie*1@O(5bMXv)*kf]+\ۻƝ^Ep3 eє_];sV+snfa5r^덽koOGYIO\ݠN*HܵmurH`r]2:6w8m|{\8Cw˶m$\0,aDBXU	HxW5	%'aTBDsK>;4Ɣ6Yl\k/L<2֔07#t9}k<^|3_Rr.Y{'Szҟtec?B
.OApGA?\@0	t(x%w"` \Ƃq|"O;00	@EadL #cR)<sD}$cfY0τB-u@*T&2T	kKj786Doɷ=O{ /d&PDF_an`k,-^ar5D_a##adZ$JBʧ VKtLKEi>֢lߡG51yơ^<!*
UOJ0ZԀh#6(
4<HHw
HlJ:' ݡ1e\F~ab5z/_l1I\?UEvwqtdQAMlN8F.bUߟ`ER^wY){PKZ@  	  PK    A             3   org/bouncycastle/crypto/signers/Ed448phSigner.classV]WW7	L	QD
HE>mS)Q+P&f	K//>k֥}j{9s}>; 0jÈq6sa43\2/۶2<f,!~w/OH7!W
Dlz&|OZ%_KTwD;mz1XHyT#n.r{%cyN3d&f4|C-Ĳf^,20#F듎zB7m%؜*(7=^E;Yi<RJ1gh*kܛ9dy)rᙜrl5}SOZO,u+\<Dq;#!af5|2lc]ICl='947eՂTc7੓c[ԅ&S&o˷ʠFZXjL\
Փ=Ӣ׎6tFR䌡[71?ʸw6ڏQJ49.EJp
r:TMwT'@Ce(S\QpU5]

$(Upcyvç#?j6g<	n#_u,8FG/]iZ#
S׶T=~5]:p^'hЇ)
ILk}
MP4ܐ4܄ѯBVЎF/4\@JCЉuif4*bHa|6T#xdAU1exR;X&-7<Y>rBNFWKt&-u姱>^|g,Kz#ATJpQY5lvS7A#VSp9lbkXa=?7-F]ocp6CY
)×sQL`(Ѷgmp6;nc5(&۶s<4!ZN:r*'~J6pHJ	i؃."\9$u	UhpwȘ&ۃ2wYIy.1T)AE/d>CC9w+2=_LO䍔3/rd_!%7!55U@*9OIL~	"ZPKΙQ  A	  PK    A             4   org/bouncycastle/crypto/signers/GOST3410Signer.classV[wUd:Zt(hZچB:b/ VM4	I!^;k髾 kIҥK_>'\.pɅR;{}?
D "*F<< 97XxnP+HLޣsfFA4i2rl5?]Ǵ3nVv!g:r*`Hӕ'LvaNd\m!/4i7dF:S-8RA0%4Yv'lN:-"B3^XqRAc.HW:2}4OHWV:SS:E363D򼴈jӝ/O`G٥"B&^(;&I<l!c-3er97tmKOȔuY'_0{r\|zdqyiܦo6HbGcօdڶV{CӶ;W=.?<Lxkgpҵy^1$ޱaNة)H$_HҩsE3]$g["
<#]Y^xI &&.[CS">O>d96McgR}δFWPJ]C_V^/RvnN:$^:g_~>q5^|>+P7ouindeawP>|ҙOk4jcHs֠!! CH5la^	G4lfʰa/а#ZpLjh8&4cR6	
cJS8!b8b?Ϊi7bfliWbȨ00o30UDRE?$ìאS1s*x
	״ܔLKU_*G#OE#V4*̶CFo*y knewo`	3~6Nԁp;]\:ȔB릺.%|pkB:}o4i5He㭕ٮJ~]#V44ؽ/~F`=+6qa	_!=T>%_\6z+셲*=Lޫi/5"z$z$۵6@^AGI]/Ǭ4R=5c6^z6Bհ%\2.:8Nl;tѹ!o{XUČH*F꣼ʳk'r
pCWkJjŎ5z.ުb'#譕PKjU2  c  PK    A             3   org/bouncycastle/crypto/signers/GenericSigner.classV[WFd($8%)
)[R7ơB#%G9uIc_q㤯MJ&.3fٕ:aq* A EcO.yr!M	5%lѵ)a PY2b*Xm]Er#bFW
ȆeGR݊#EU]2Oܡ
]<m4:UVU2k鸪.%>i ~([陸YM"nzxK"wg<]y^wК	DCwm}|No;jPbz[}ƗE՘7&KK1w׷3嫎K).׭U5q
jٵғNDiK۞˛f
?VUfbKtcKZN`i(Mp
ëp=\,XnGISW7ғ'9miqesSуq?dމlsjJ5ұoW
]=zذ2NqIeox[;2ޕqEFTFLF\FBF!}F#N-=-%șh#)YG2k?
3]p?ޜ?cWl!TwlI )g1 v=P0,E
Cs#EA


Q0YpKA?nw&2B|&ĝFEׄ\q7	,a]y!pY!rBtmM[qUnk9((>>QKDaDe$)LvtO _{X'D]
W=$.z19s?":>y_1'޳C߸01X
'k{	K$82Dpȶ	 kl3
 D(1x!<AF	⑽3W`֋!ՠKX\R^C!J`0hAc  =YvYeNʒKՓN֟R@` POR'G.5ܣ>!HbFUM$7'0كQ7X%H|RZ PKT6FQ    PK    A             8   org/bouncycastle/crypto/signers/HMacDSAKCalculator.classUmsU~dò-(HBP;J|alIv
]g#Lu?7ٔ%F;=9ܗE M
"|B@M#9M]
cdWaDA>tw\G)Pl>W)zrGPT<_Ev5`f*58+
!ƌ#ǅkbcLyyWS_N9Y%:%2]WnRL0I }<y2Z$
DF6Å}[}sQ!_p *}μafKkg󥒰Ҥ48yUбʘ0ys3spM)ʴUlαIa&?ꊛaZ5dId-VZALl$6AvL{S;c#fɪLQ%*|&*R6ʠY[axUAљHx*)37YXRаNv
;4
54jHkhأ`x3PbbuƟE;=wfKUD*2-o動HuUپTfFJQ+ WӚ?"!kWk֪DLL?-R䛸fo&[5EBso;ܜ@XUߑ$-xeĀu:2m0eX}x1lB@p@g[0llĈ̰
'w@
t3t⌁,kЏq	tqQRaGpUfu;S2L33:NE?d
:pYq5zMGY'ʔ9SI	M
IDGYv#'uI}ypt:3}̥\r0|b
^F
WZmrl^+ŤJqәp}ݯ&LX~5/D{y+Py">#[TvMF:lH"ę"	-hrM_rx&̼y~%tkt-Q2a|<2,/YLJC7^6xoi:6Q}\6;D>wswtu	KP[BV/^ Jh`owPˡ(]xqѕ7D~5#d
u|Gʂt(У(

PK5*  
  PK    A             8   org/bouncycastle/crypto/signers/ISO9796d2PSSSigner.classW|Sܛ$
Ab)
2Zl
N	%IMnS'Ź{6At`EAEAtννyR9;9{z#9 $;CM\=9,p+id:,0:vOl;a=6]
>SB-F/gҩ/:O"^Բ:Mfݺ!4wuMV	yђsL1XH+/k0E9%éCu3
L2%M-jcҝ,|E[CK6H\d"]tGW'&ntt-&:ڴg4E24kYKKPٚdYf#qRZ&k-x*wfHkzC2$v
#a%q#4nN:Ycrq$CK"X]Hk:-
$mhI=-JWL$(mtOr_[$;
GHK#N:A?ȺHm2:Dl/Jɤ$2v-(U
Rj9%%)])E٢kQ:ٹEQI⍝d單ѕG	Q{DomLf,{'wtVjLt]s+h3:SQ>0sX<c)mإk2$1nܷ&I3i2dVtuچlW;;
6W=PʒICo٢e%ZvOdtqCcԡ)㸭䨒sZĹeQTJ}-B3:=2RhHk4\u~gEE\|I(6uqKq9	5bAڝz"YE,Q6Se*6~TӚ'#f5-c:˝TX-!''qHPtXO3I@{fu%>DS43'E*Qm/[,ΎUdS3zP):54K7Nʉ5]-y?S1Lg1\|Xx\LW1KEFUQq&*XbXEET,U4t
H\RU=JbO`)?"V뛵[;ԸP»-w~awG^N(YRWߣKgGVl~{} NbR.h2gXΰaC!].caõ>P]xl.23upa
.2ds!gpVqp
]#\.\p!>Ba>|ʅi3.Lg.\Ϻ].\ϱy_b°_a*3ð^uo8{Nt2÷XNl0`?C]7N܄:q+wb#cxz, C0Gp#wbonn6|~zѓhv:Ư9GJ-/;?a]hNj86^	+~FÂT[-^THHi{AZY"MU%tA:DQJ7RTYEKl-hcf;l'v)_e+֜_aWrSoh?b%[4
l3M/^z?Ћ^([0_x=xpڇ
}ЗÆ>l@>b7~.G$Jtl;Tܬ6hN_0聕85Jy7KxSl3T!$a	)Ǳqja#{+G@zxVz"nCU.Tx{R#s!E46ˎZ=؃ߖ'+{O`^ozOUn{rirvgyc%?uUg>-pS%R x""qS?"(<E%*Y%340@hWObajFBg6̤[
*ϔCGR_!V*w.yS&EyX/$)_>L
+v[E/9`'	TT᫑kr{́\1n;04r0b؍?+G-۷®NR!u7UnzYDblcۆZvyYj:&Sy>RO;f{p^*^9qS_2mkZ9 :c}skj@}-[ii)aCNS.|ؔ*r/ylcd@sp(<V/t'sOeSt:R8
Hz	w
eR&6>XFI^&lv\nIBYՋC F^ǂ%X&9Uiuɸ0VM5hyfl]^'Zw=/p\3r/N*%*f9=Lq:0O-6ɿJKQ <<Cj"ty}Μ}n#+i gH)4V]ṾIM-r6w

8T@a'bKI^hNbj
MQ{hȚXTJkX<XŚD\ڪT2iJIaS.NI}vCd2ZVrkdqQ
%Ot.~%|nsc!_CE${K:Ŭ͓p:*0d-ff)	ζӈKFfVNOAKR1E10so}<$+&N7_Ӈ?ӗ&dQ}+#\t9<%j.	]ocJ{m&6k+XnF6]8qY<IL!
zb) b[ռ^0GJ!'«zuA\E^I{ zUBc+U6vQ5 sh7݊RPIȚe49"+l8LG٠ђM/&L$33`7+`9:Eyf,279 +c(JͭB$XV!S\Ix+oA=Cwnn
*UDZ[':j{ثnqӜU2w{_&%ݬlL9d/|
2ƃi{?~BL/Cö5N<yyh_;ŸZc<QnI*=͞DI\PKx]W
    PK    A             5   org/bouncycastle/crypto/signers/ISO9796d2Signer.classW[tTWΜ3s&	\ɔ-m234%@&ICQr2s22tZUzZR
E-$`7|ݵ\/9s	!f}{o؈cƦ{u/@jlz.欍OKQ!2WBe7j<IX25;PB{{wlhٲ>, `EIeSp1Ѻebbӆٽ-MWZV*qeJ:LSTi=j2S1ip\U]&EՌF{I%QH6U3%RQ5MEM犪Zg<JǴ.%ATQ;tWvo*g3jѧSմ)xfsP+Fy%>Z`,UY~R+q%m>VǵX*)"ըLG	5]bԯJ,J,\En!5L*RZ:vecMMթ6wŢ:hER+;"2GRVSd2H?dO2=cf쨗xm
XJGSdx"dNOkD"Ra]M<v(٭{a
e9PRؘr@=ZzJ
>)(R{rJZId;P'pCt}FdtPG6?	#L1%Y-oJ񴚿T9(cSa:TwkZͨiDܩ3n0u~fH(Gh{GҩdԔ2h~-eHo=$M.:Rٲ)C(rްB7.M%)IjTqldhD6$haheȰ!Ȱ26$#(c-2!SF2v薱SGd<F*nVeGj'Ʀ;3ƥ,B
f&aHPe1.*^jSE_Iq"_iFY`A>p
DNƉv2<'ǉ!zSNCډAv0C5N2܉tb*x +t	X*'604!jhN܃~vGXNx1O3eH>p'>p2|q`!/;WP
6w^r`s /:0	vg*^`8@
/:0oc`8SCs3|÷=ܞ;=hJCC?A9X2>U$-@@5C-P>`~]U%})aغZX8zI*K^%N/eɓ&7ː^ }ޠ	HR9})L4*|U6s9ZT'@N%*Pgjq L3W
$I2	<V"s<2㩥x8}8Xų/Q9x]7zY\[?it
>']fyjռ#8D6Ú;{lFoŅ22+i?^1xR;9x~.E/TbPrK:1~$rd:pwӿx.YyaVނZ
(<J*fxQx5?97'-ow,"B%4cߓ/xnszbk>8AJj޼IVW1sqntUaĉ3K9hZ
e?Z49佺ȺYoJܒ6f(wKU7'*J$}^vs2XmeIZyg[:([eQ<V-E^2$+[]cgO+>݀ǜ'tQ|{ݫ<gkӫStBa\bd\=U{nY[UXi-~K
=>D:H *Yg
J~rܮ
R!
Q<E^[魗f;skK
Ә!r
cٳسDAqt}s2ysx\᭹r}Ӹ)v&^7qf頋&[w/0wS
ZxT&.6=mGHyxi9zq]a˕7.oleݝsٟ95P‹S$zMk
Cg9]gyy5<n>.bmshru	+56qzYt峝F5[m'mtI	#`UnZSUXDs6f%NRyhڋWea`*lo +᠛Ps_$$h"-o/*YLz(zzG_[IVK]+Ã6NC,^C}Y`igypO۬Dsr_:_4R'/7*zADU4Šm)&@CZn{+ihM'eu<0sOcL*ˋ<.#t
LC5E꠩!Kx,cqdo+z¢
/@d~=DM	JvRvл/PKG
    PK    A             1   org/bouncycastle/crypto/signers/ISOTrailers.classoWEƟIBwjUIjM !M$mU\.d9|?-gxg19w;wܙ_d˘HxC2.ʸ$}h* /4۵EstxM__^[}paRe|!=-1v5nbhʺ\
7Ԟ$rV%)=Se6=%}E!(W πs[^3֫UεgsMMZGYɖ׶>?ARmڎզOCSsLo6תO&o;Zsl[3ZI+`n;TĔni^m5͎XZ}t{ڒݲ:
EZ펦׫aΰt( zХ	加ػ6(PCZ(dO丙f<7nf)r3>pK&z'Ʃ
߶V"-CR{+3\H3\O`qQC1AJLk*+`
XUbM
+39xzHG	,qob|Q|MXۡ<V_o4ul~K%7{UJzޑ˼0Ix牭Do<K|Y";O	<O|E{/_cw^$*]kC|!RT#gO)T)Z§$s&1D06KB7|)bia=A`as|I25w[؎b3Y괈1(:#9 E9꼈	uV<y'PK&qo  1  PK    A             /   org/bouncycastle/crypto/signers/PSSSigner.classW{~'3.fM)%ًQW.6 fSd3Mw'HbKbiml+J/	&Dhެf@>U%Eh|ܾ33/Wn vzuK;v[:[;XJA@{z̘
	M$vwX
=+;:tѵcUGy5,s9}$qiu5@F$a
9	DsUl22j3e.\ g%rnq3aj2iiV"oilA	SItk8gHK }4&y{s
\p_L3'vdvlqH2@IMߡLm΄1dY\X^H^K
9Q	kR|$odbiPT4űV,vi
ۍf+mt39?d$~H6f6՜٥(WEoPoy7mv8`)T1G*y3N}2He4KeId$筴іȍYٶANLYTK5
P*vid0FHy+juKoCUNlנl%<M
9c@d.V
9ā#`)~LkX+7Tw|e{$L2UZV)ZM"/@Ő4^tJL|rYY=+g
/q>nϨЩF)ft0rfHϟ?"""":m*Wq[T,S\ŭ*nSBU|@J*VXbdg빜yE7$JeF@KgE r~"ԷvCHd~q\$u-\>m]BBcBڭsyK1o`Y֞\kD>ZW=

6"n#~zϭ^X}*Gn/3|'
,L`WkG@CI'"!

0542YhXdd
Låa}Lǻnu}$^a	Yئخa1ZBhx/aq9
ţLv2yɃ^!&cq&{|^&d)&f&e9&!oЃ/!&wW}؊}]m&}HI<d0e039>،3yLfe&0Z-z(ԭ&CpU6uқ9Wb{>ԣ
A~HB\i'@FQFŸKNr/87;D;SsxéσM!HEp)Cᓘ
Ó
}/.G`>	)D4G/2%KGH/D/aL=Bz2*砮qPM p@AD.p1;$dw&0
p")PB(0hpp,$p4ppiOC~Oz{y~,pplXzh}]|@P;g1(||p||>*c5N]ߑNRq|\dE("gзL	*8>9d}(UIѳH$qvBǜhL2jZN:kQ&hdOS¼~oԝB|iχF{lӡq0/Dgõ44_Ez
"Wǣ(2m7={kQE9HR%nҥ׈;XK<0ՠ2եd*.nl~I׈`T,$H{1N~ԞB	|wS%'M<E*b8N3+ŎxUt+ M	x),??[TIST\Tq'.yES1כ"M=zʔis&Eq^=\]+x*o5SC<?!$~
'IP9VJw=Ln|PQ<@tgkbinNp,1]e"SI$^y|.y"o1Zmw?a҉ wʼ<)$eT	(QJK=1"1
%oN)YNdF+үL7)ӭEsZ=hRg)Ww1KRW%fqO؞Qcd4Wۗ.RƨЫ6t;\swnc]
P'
עEc$E%#Ϛ#r~׾3w5=
2";SVk,zG(=b]2=@&c!wڍ~IQ$Q%c*U^ʭ}\GX :COPZT:UND+>Qz(GrnvFIM]<yU*I{GPK+ L	    PK    A             6   org/bouncycastle/crypto/signers/PlainDSAEncoding.classTksD=*I
Nĉܤ$$<J2REVde-_(Ì!~71w%uB<Lݳ3 +Q*
Ta^!0ߨq
@7jAl.vctt	7(r=qr۞7ηnޡAXfw-[սmS۳~/'lCo>lY(&L1a'bشhIr2DKI`q]mc{V$[OKeu-pk[^ܴ:{u?~JjsAmbk{e[m<P|<oеf~91薷׽pEJ/traD)Fd=$iWBVf$ܔ𡄼Y	8,\65ڛMupՅ79@:;Fb4:Zâ+Ҹx!qK7Vdƈ7j*&񩊏Rc*>Ȇ)*fò븣=fbIŻXVq+*4\m|)=fVYgk13
J
mތd=4gF8v-RP/ҧ<|J!ӗ0Cdz"@8
BwyUX(BJxP\
Ye&
 b2S(Ϙ<)no^	`(E ׏xrs2R/LSwR3{L8ދDy)xL\M'ZL㟌PgUR.|VbwGq-l(Q0Ϊʊgۊ\Y5A"k~ +jb4ĝIFLJɜx4PKfCt    PK    A             5   org/bouncycastle/crypto/signers/RSADigestSigner.classW	xTof&!ddf@"ZYFH$#Z}<&O&34vZ[jTڅ.cl.m/z{o&#A̗{=s<s	 2Β Q_F@FPF2B2h"ce2ZeɸJdC2np44M+
:1WæYB9%,Z
H\O虋He-87LzZL\fb{Cx}wOWsImIAnim`C_{ҙ>=_"ZԷ%i4fiQ3z2X`n}1u}ۛlܶ,Kl)-]kmTRN/So-NX /VS]j<TJKPI&5ׇvC.GQNDQQdW4yi'b3lh}y?Qb)L'lǒUhN[1U	D-Vczՠ52&[t>򥛤j:"/'ltE-_mc^j7{
S.*}^ɡgzCFyM
Px]
-e%5WPp<xiLiR_v*bLd|!fOe
YGVS|d3z<ZMfq:0)CV-I3{v_O
Ez(b2U&h'Xhs2Gt&t9lz-JfrKJ't&?ytYH:~Mg_	U2Z\Yڪ~J
K.A9¤]NP)*c8ICt=OFvA6rN)ʰ@9fQjXf=,.*e	VQ#h\6(`6wR*hQvЋB5h-⚓.mPdFMDC8R<i`"0wyk
Ch+)#Ria*KuZSPzm|-*FZbnڪ>C."U|[azV2I3$}f0ɧKCe65^ezZ2\Hvqse'|	HLF	KpMYBDBT&aA	k%l0$!!!)!%:	wm"R K0ʕR	MU9-&
_Y
+Rи
SGlVqhmxd~;X)HFP&ma7\qt^Fَcֹž`e!6e~//4כyVs|<׬e׽^϶ʒ:7|i_X@
K0eaeXǰMp55703p6>`>OAf)X
gx3Tp(s;_AOA'>ogXO*ƧX4~PDQ
.!0{qq'>0pÓ_`×_a{1
y,p']ݻË܇_{p?~3z܃!<ݞe.o<0~Xn|Y0|?NWKK=ACSBǳ#[鋵wBCp#L?k8fKS9eV>!|['1 ?ˁ1@`DQ1+i#G?1*+!>E㾁`Upld,8f8$앰[= C'*̝,AqEqܶNym+)l+Njp4$څ#xhD<=dN]m5Q=55pnkp=X˃QKRuL
9lkd0gVcbneL6I|gNӖ/v~ю1PÖW<!5pylF-:cL'c͚NX3Ӗt/[RьmE4QI'ۉ]N[Gn{meXyl`F.X
>H+\MuΉ49+76M'h,r+zomM1+5y]^uNo%&*}'^0I^8I23nHdӱiѱEm/]*RNlG
po	,0ib1
Q̠SEscx,;1*LۉNv{ĴBgq?
#=QV1r:^	;竹2Uu/ύnF~/S?#³eG^Rr=91/W𷼬\?yyzxO-tޕ?[sW?PKCP	  v  PK    A             :   org/bouncycastle/crypto/signers/RandomDSAKCalculator.classTRA=M,쨀kI܈,T*3d&t(OAT*}?|,v2}}nw|GfG\*C$cؖc)LJr!ǕC~Tr=)Wrт%cu
XXv
Op)-3Ha
J2}*`hY!W/-apoq掩gm[K*5mR'"W,\Om90z^pˎcp_B7tu2lͥK%T;;6OZYZ	I8ۤS*-nEeaƅ0:3\8IUFٳ䎞WNpDwNФҳsR]o|N}gpg3]^}1d#}^5h`PCiNC#B4+^\u
M%(H(z 
V0eܡG>	fzƫE^Z[`AYAeRl#2
ۅ-薀
fJ6%FJ$=uSH=g=`5 IP(>gI"|}<x}#Y&}OOU{apQ'US#=joPK+E[}    PK    A             5   org/bouncycastle/crypto/signers/SM2Signer$State.classJ@MFcj[.q)BH]h]vnCH	L>+CwRΜrp1Y7M	$[9syL0Zw%jK\%LfM7ShĿw3lsQ8!'^0N( #n67Mmv5s,5Ǥ20e.s{<);GCgPK>p   i  PK    A             /   org/bouncycastle/crypto/signers/SM2Signer.classX	|M/M?h)Z&)JA +N5~&5Gӹyl27/0 66woNw)<oiosorW1ˎvgv8HXkZ$^%qfw+n-j$
7Z[]nm]}ݺuN~&H77o4kfZBG;aeWWk>&h+EB_'zKnqWW\zH]h$$]F(Be^}zVy[@o̢paOJgD-Hi@1͈$$h_ӷGNJ
Z\-NaCA=
Ft+3	7Bz3ҍf#L˦dR=ЩŴ>ZAIf
MRߘrVH'B@Z"#5'6Xh4i0,f'ј
d9,v뱄t3[N֣f<s-lb~FNBi}/=+ɰ$i`/.=@;0NHLo4_׼7'hD`xoK8X(AEZ4ԕ(g3:oكwS#ϳV7IӶ>-k0B-b|]6|[(Q-}Q2`%2@fPK&
#XLh,&#Ou_ 6؟^=yRdW٥ߦNZ|Mf%]&!@q_W[]f2|͍M>OәbzkKv$&4ƹW^NsȄ'V\5k<VLV{kvL}F!jyQ,5TmKi$hUZ,8a˦ڑ0NɤMP򸗋<yhTqL<
-X*4<rPث%1ם=):IYV.IldT:l1=k'p	':z[&NHg$#\ΐϜ~*3u}
(hRЬ`-
.WТ
[lSХ`
RpkTKn*x\
4


t=
B
z
nPGZso(QR?Z5քF*yUrS..R?JL&%S&7VN>7xNuM}2\|<?3T7:s+Z;){p:WV:{:ohmu~~>~jW3cY˦ed8?~䩖jR
=iu5Esôkm@eBoq5FX/"/BavI|G7*\Xb2
d繅dJ봙r5Yw9
gpϠ]
aJ%pmNN|F9,},QQqwϰV{T^xV_\|@E>b=XahDj8T\gHyMeWb%>b>"PX*Q3t2.T\XU,'񰊵8b>b5:xBERJEHl**1a *\xR2SрT\OqU8'Uxu>F|9g>/2b×cj	Wď؇:p3-'p6|Gf'ÿKc8<?2Ձs?8pw=oa}`x[g=_2 p;DvA|W<o2E;p'zD9(~V7k3|?,[
%R<$lFcD6x\E6{&H,]7ɹ I|))IqvHI %žRRH\WX(sΝaq?aBC %LL1)M2>h0ߐ(s[ns!Q:~T,J+eާq=)mOK";};+b	o{jƽ0$;Sbe;c-9ng!\WO5%N(IbSq"<Ci9];m#bɨN˝ʨ %DA,YNՖ54lPQDj3XLQq9]N[ݐd26v(W`Wz{_KqF3d{B!Lp,Lk7x_P4U+YjTlQ0äFh#73MkzFEmne׺fXHvZ]uA~+7C/VJTXh4ol祰A:x;HTyLJ)&lW9.ygmX91n.ՅRQ)a5һŚVs5OJogRpq$e<vQDe"ÞIjSJ\ޔۜ9洧i(;5%RXJbg	B83Y QfHpcRs^SVLa:wHq<S/%NE)6k&
qP!ɯ2@:MNh `w<49H>jݓIRO6!XwDΨe[<d	&: iswS2fjr/}~U.̴SLɑJ%B˘Oi,+Q0}hkKz`o&p#2#ݶ)!\DuoEd͊>?[ʬ+,sX./LN-b̴ۜ,%.Mdbrהr-.nYe֣ލr-2=UdjW=ll&s)APr46t=3艏71ܶ4G.%QށPKl҂    PK    A             9   org/bouncycastle/crypto/signers/StandardDSAEncoding.classUSE-q(
6Zj
N,@Qhoe	;ztǙ1%8^f}yϿXAqġ2Dҙr tX+f˦m9!<DVKh\7a^S-~-nSn3)#FNKۆ͠{<æ<Msӭr?@bzts#<8"K>7Ol`5o<24M~[0hmrX+6ovk;&U(;>op!z
mm;i|kF˙
ze>رǞ[(p)y<t;)&wczGRs i0/Nvƪ[ԲE5&Բ22^k2d\񒌔i32nxda2vZYV\kEy'dqBht9S$
ֹA'10+o~6c>$bg5&$1a4&\Tr;iOR9$v
nxW#9hAeRqUM
R1E1%I,xwUxWEạ dPRŊ(ȉi
(Yl(êk
4/DE!HB
=+K<tGZH+	Ԓ"\ߒiLܣ%l[?@|L`yAtjE)KJgA&.&k.E:O	*dE;f#
YI<K/V#IIҒ~CI@I,: bc:1F0J&I5pLLyS|DVG.30^G,&=~㔍eB9H/PKO  n  PK    A             +   org/bouncycastle/crypto/signers/Utils.classR@ҥ1x/PVoi\J$5/UP|(ǓL$vzv\6'o 
'%$D<ߌI&wyo!-#E4o>=-۶0xNB-oKt6-rhMhfZJp]H촚^ԵpUYaQwHp`ry?n9ak)rj2'UcUju%2?Q-#_Ze53S)Rm%v#s5XNjf܏i{.N.n^WR=%Mv}uHMܦN8NIއ/j6x3!GwN܆&xʩҧrN0Ӌq}nWp+G}@y.4Ṧs	Ǟۜ)>#lpRA+n)hsL$wSĸc:fBA !g7g12aNF?X Ă!ܗ1G2F@
<qYE^OQ?:B?Ѳ;Z*ik.|fh<S1S%,rgS'
qϏX+aݓ#VKybLFcKMRrv]_<7$2+ʍPK
Ծ  <  PK    A             0   org/bouncycastle/crypto/signers/X931Signer.classVks~VZyXcrbHȒbCv;0&kiՊDi4)MzI Mm腶q`hÏ?~˸Z[L=n؏?1$艚8'@TGQ6MIs
ODy]}MtOj9xJ@Zobv,}!:5GZkltfrjVn	r614{Ccfc}R(6x,W95)꘮+e5#c1O.ӒVXRudFUHmOsEC	-KɗJJi]U5N+FIW-uSJKE?XٚVsnRӪ1IuXUD55a.kC|)hvjq\%*3Lh;U%OT	ػF35dt)&jnrӋg${KGJZ&vs&KሖѴ<J#A9ؕwU2Zۨ}:wW9-/ËR.YN*E#z`cr6IVo7-ԇ)'Z6pEp#Ac-gcϩe3pPu9hYVƧ: C5g[%C˄ƧzFz>VStrgKTWM4jT*UutNn!`d00p	>	$~	H8(ᐄ	pX]K֜$
%
Jk={_;[YlyKhIg z)jL/j6ًajžEQvӍr0رqP=s2"c>{(2pCa2fK41'xne|n4$eDv )qdtBу2H`I'c;نS2t[̢Ag=HTMxpEë_e'vyy{Yp1ގ0^fx5/0|_ǭL]MB_sOަk9n()P3*%E!`-KoqN:jc66:>WgwX}Nv{bD2-iL;hYj;N.Bww]BsV
Fzo#O+Z>o7M$B]ǯCY7t{B?w	D	$I8! %acjhg/;u_K1I83Vq1G\$'T**ѻ^E;s˽
\Fo>k6a49r1lccJ/v7 Nzsr3GQdYwX[nvD,[/1Z05L_8p&͋w2^Er5𣐕PT5Q7j'a"vr/V\:;3<˟SO(8Ώ椘J`R+]N	]NtRbx	;7Ļ+wanE|,T+
8@?
FTj<h~ɹrXAӔZ-S\{t{IZ(f}s+x?vdȝ-x	*lkfW1c؉.	IPKT  
  PK
      A             "   org/bouncycastle/crypto/threshold/PK    A             2   org/bouncycastle/crypto/threshold/Polynomial.classTMSP=$m)Z(8.:c3LW!6&L@6,6.YegD:#?{v
L޹{}y/AHfd*X1*BB4jڦ7FƤ+C*(V+ UPuaЃPlQ[TKӹECmch7<։.UuY5]kxڒ^55ǚWkvF|gIwR4YT{MMlᕗ,a|^ΐ?'Eə7d2B2Zd\*M\98y^{x.JOD>
	Q`QD ֵ0AnDЉA |E6	Kk4EKAil:GD/R;CVk`Q$0.h6431g)3.Hm$4P"q }G3r͒'1!mN/_-hz?|­tiwt!X)%CW$">
û_CBNTDr"ePx:H#DVqHeoHcH9!;t >"2Z,:ȸJ#c{HW_e
$Ѝ8zPK)mdx  )  PK    A             :   org/bouncycastle/crypto/threshold/PolynomialNative$1.class]kAIlڵ6_UWMxHcPjZJdvNI$kDDQAy93 ۸ϰoyccqό
1tZN.̍4eS)tP+礍ۺora71CЪP)%ڝxj'b㔏yyOL:s%uֱXaT
kd25424zR;5^?`x?Ξ,}}>.},y?f贶N'My\	PZ%XA3eWhV5RڔwM,SzxOh_̢fes:g:'lzOMS5X"4=^hUL9Ļ/Sf":mw PK,H  \  PK    A             8   org/bouncycastle/crypto/threshold/PolynomialNative.classRKOQtڡe`JA
q#6P41alG3rҍ+($޿_agF,,Lz{s|`mH0<[67F]mi4ciSƫըzΚV5/[orݱ9|mکxͫ5Hn\ifx&ԥ@&mF!ܣ|AYZY3Yu=5=߷L <%Dl%oiVXÙ+5mӪss$_]`DR?ORERoԗ<gjv~"7-w3Lq.KHIHK"᪄Nϖo{A[MGȈMvȐ ʸ$bу8zq=.h	tFq3s'zkru-1
,s\^1VYw3Ȋ-A%yuȽF \㴅(`>20pnJ~Bד4;ЗaN2
	=Վx<1 J,,F
+)KHjf'3){M*o*FzzU.4)4w[%ӱ%[%T`>W;N0@?Y3
ZmT5NPK2G~  J  PK    A             9   org/bouncycastle/crypto/threshold/PolynomialTable$1.classRMo1}Nlҥ-4-_HO
 U%zrVYG^(3 !P ?
1HJ3߾9pwr"ql0I!NXؙVY|l*.k圴qWU.1uj<dh>Z=&GL#8'<Ѽ&M:S%uֳXX
km̊L~L~L^=-Hqd96Ãg;v/qNGG㜏ǢOC^guBPgBR
ZhXZ\z-\af^회ڳ+6*}r1{E!e)Kq&MI/]	Nh[_[qC}¦w~M{4`kЦ
w2B '֯byX&M{<+d5mPKLnc  Z  PK    A             7   org/bouncycastle/crypto/threshold/PolynomialTable.class	XUuጠ<O8+GgD 5)Mr6ٜ5Rs*[}ѽ=^g9ضqNm'28bP|Zt\औIGG%GNNK
NKIKJ?>%"&:%&-"9!>--&%84!6)%>-Tpd'ǫTxxFOw
WhXDϰҷZmvuMmk<WP|jPbRZPtRJJLtk#}zؾM[Hp50*$!*16$<!!&6*!4%v@Ĵ7cyR'Fiii4KJ?^߹;wBS~Lp%x8
f\Xu9\N~S{8yK8i)u첇j>qr:Y,Zdn_'q9AY@Eq`W,JXrJeu
:e:NN//]I}'&Ƥ4NJMIpGEE7
wˎHricEwE{:sj[#8N2[e7;*tQ_?{]z&'D&RnU*ٷ;#sylq^ytJ9\NKbG$H.+0f9َWUe6:3$rmbF2&sN&=sߟ{>c2;zqt_OuK?y8;|"3gvGzfrGz;H/wxKAM|#-5ͬM4}fvC.k%kyf^yO3/4H+My]hWf!,,Es yS|YL
iMTL,)i֚'2fYI,'5ך$fYQb4+IfeYլ&955$XҬ%5k(:YWi֓fy_4ƲSTMf3\rkK7rR<l%
5[KS62Zl'}5wݚŮP'yWUY6h"?jv5I1fSD׌D\3ZjE1Y֌FqR[3^i&4[3A~/ok&J=$٦,e5_)U3Uj2Os$5ߐ6!Js\&4ߔTT-y猐OFJgQj#ޖ[Vc8IzGZ5Vջrj\zOY/>Vd9k5EXM!Vgjd)O>HYrj#k>>Vs<o5_޲Z VEdX[-}VHRmLZ.VHRj,Z-POeZ9lN[VFyfIzYmuV[dVct&KYaS:ZVc=2sYo+I~e\: ϭV_tr:,5Hꘜ:.V'IcuJZ}#VeouVY}+yI2t(VeYi4A~)VWORY]
Ve
huSYݒV?K	2̲+Wk@ZX=;VcoD*Y"/~VIvmLz&#?WlR\
NtzTO]tmEe?D.L  zR@г zl̉Vm"~Xsa=̍5*T3,>>^d=aO1=WaOU
{jH3){^=`9ؓ{&{"` bb'{ð-9{`Vs
$i{=g9ԁ=aY|{S =ow`h3|{Þ~g'{ނ=#aχg9
{a3̆=`>*y
{T=`}ؓ
=%aO<{(س=,y=S`jsaTس܄=AO{ў|6iC{NҞgt=iOeӉN{Ҟ'==hϏiF{=
iӕܡ=hO?ٳ=h<ڳ=}h*s=i(1A{.Ӟ!}3=shf9L{nО'|J{nўWhOYG{=i~=iOSDӞ%1qў,'=h,ڳ=MiAF{ўL{ޥ=cidڳ\=iO#%iO{ў'N{О4J{ޣ=igyL=KiCړ=hOKF{Оg!Ҟ`ړ@{6Ҟ?/=r(,:xy=^wy<2xCː
y O9 yl<qs<6c)E) b)e0"X^| xB '<EO53x'x O!ckeVUU`հvVZ[zMM*Tԅb}x z4Aah[ 0L+M~7H8dh٤%|h56T<!4s| yf@g'y yNBܐ
yjB!)yA͐gyC'<7l< A́< OVȓ<e:\< O*y_S$S=W3<є';剥<-(%sT<)S\<K(,3<[)F3Q&g
9GyS 3T<5(Ost<)s<(83<)sʳDQ9EyVR<NyR1.Ey"(O3ӟR)OySo)3,<)>ʓS۔-Ky(/',<u(OS|Ly:REyRug;9LyS.剤<=)ZYNyS'yByQ)3<g)O[ʳ<7)5s<7(O9CyS[giGykKcS/Sj2z|l'4=#,Y|dgT|n #g;c9C \Q}@g }>,{3_S T>ǮS>AWO3
Tsg=@Mg}>>OqL4}|OVwS
>Ow
3|.'|g	>=|'')|3ƞs>cΝ1 >? g
|6ׁϏ4>c)| wOvST>q8	|bQ3>0| |ng&|mⓟT >݈V>'>ˉOħC|Ǟ2M|g6)M|:ħ#YA|SiⳅkM|ϗg2i@|Ǟ*9K|6 d=Whڳ=3hO%ӛ=iO
ړH{.Ҟ%UڳҞQǟT=}hW=ړ>=&I=ӞhRA{>=iBI{Ӟ!yJ{ўg)K{:ўU'L=YhOL{ӞIB{Ӟ'W<'{ўwiO6ړ=iZ&ܤ=hh@{Ӟ[ڳ4=1T\y85LN!)>NS PKQ    PK    A             3   org/bouncycastle/crypto/threshold/SecretShare.classeʽ
0[6`t
+PSdY6r.HY
!<_ $,ekLpmXXzʞͩ{f'iF8o/E 1[ la~PKs      PK    A             6   org/bouncycastle/crypto/threshold/SecretSplitter.classP@}CYZD'HHklk>G-,2o˼z0A08zy	|AIKi>"Ei3ťVsU&:FM*C`nP5΍;c C0hR]fi]_$_af$BUuepDc=1j	PK0!     PK    A             F   org/bouncycastle/crypto/threshold/ShamirSecretSplitter$Algorithm.classSAoA.`&ҀCWIOemfwhқ?Iibg&=Y6|ｙo /<
5
MAAڻ[؉xcH7m]ͰԜ
x["{͠8t:vp`c>Hxa'G"00ta
sht
ᄕ7BWG
>-ZǖY#gh]W%g´?
t
n1YDv/ۼ>6櫵9⽃C4]͚"tAcGwZ[!HP[ygEQLСC&	]MՑFQG
%+XU&}ihᡆ<<h,#s"	tWwX|:wVh jyzvUR D+)Ϣ-
MO.*IQZQ bF_@ RKx<'7WPco@=j@Me&eo%|OP1li(
ݚA?	eST slbc<1KdDqO[PK6    PK    A             A   org/bouncycastle/crypto/threshold/ShamirSecretSplitter$Mode.classTQoAw`UO$MhN4>-
wͱ͟4Fgq&}Mnfwo?xII4hM7#jz p<wESJ
+m31ixϺvn0-'<9%!
g6tC;!
~u"r'#6a돇
^#QC:ܳh05jՒg/_sg{A|e!j=yJu{wwuI;Wܽ	y)i0M\-IL$P4u*6#]Y3CIJW߉}FHs1zoYȆS(.5QV*H B;	gPGʓØb^ %Z6bsL,Bvd  JKxJ^mu	ZrɁ҆\	c-:E>OiϪ%Qx- dFQP;E9ZbؚۧߤD)*UPKO    PK    A             <   org/bouncycastle/crypto/threshold/ShamirSecretSplitter.classWsUݤ[) B
-F[VP٦4

ꌎ38#H2/>_ #s7iV:ssO}^ X~*cV::'p'ͬ#霬J&B\.	brEx`af]x7#>g;ԧ=%o+eO6u,uoΰn3z)
`g7M`y4<ӭ
W7Wd&KzrqibsFٳdΝ/yNқsc$sFfKV˚9HiZrlS@8ozg3cΐ0?; g'h"mL
#Ypgn̒Wpl}E%3e
kW))j<}QU܂7yw!:6ofg9r2da91ǚb CZG9'85!+osUz&F)zPF^j	Z
VruyʭX]ukAeXy%3m;v2f0D1gx K1t0t#_wt3VkE cd[ix洕;J6Ӽ{mP7l=0/Z$ٺ>iM;@zxHg6/o!.
9qRàH
GP.0d:B
TnՐi]8e*؋C8700z1saB)->LIM>͇wp1x7$8RkiWߚmi({u朙15&ed=#wm(Ӗ}tdM#6}U&jhimk4%%\i63<@Ŷ%},~>fa*~bx"2дL%ci161Z;c0"%"qt7
|NHTP
F@%eMT=0˿[wpPH:S	REԠxe	Wp֤%L<0S #I*s4q_mi3Ţ]uVZq6y1`1;Hɪ]	ARe?mq$G{Sa)RCK
v?
/&H@;v܎&*pA|=ɐkdpV##yvOwMq8~衇G-_M2oFkY1TVGaUbhk5 VjMó{PrcZ/{TAS#۱R^IuR*塝DU@)IZ&TJ&xJ+U"$rGuEVB͡'nc{u=S-@$E~Mch"NW+g檠=+3wٵ#CM%ZbLqPCfwPPKb  
  PK    A             9   org/bouncycastle/crypto/threshold/ShamirSplitSecret.classU[oE;q-cLRvbB4PCM*!Yo-]+J}"5i%}O / sf`\|̙s~ à$SWx2U]b'Kq5Y]*I -եP]/2CHJ
+^]\s4ZceNFjmxN-[06f~2OUk޶kCn+լťMGahX(Kv[C~eƶliucj2RpI^#[o7|ʵ>*-pMew=g6m{FS]t^76	>]=	tw03L`z<on: 	<#x|s zi<,yd:c?{<NUpݮ~=n-iÀLA($Q5#	נ$1-ɅbFqI2#ɬ$sQR)DI%/4oM\j.;F%0L0?,5cݱ0A^'F#2mƌxhvcP`!=b\..akt~*]8Sʙ@Hڻp6ObD{J1!5n>(+yx0ڟٗoz?]{[A26I&0(C3xT8>OSBbEbI/HMPb:>j.~/Rڽ,K";xlXɫca]*O+JQ]E]
b<AI~Q"w&W쳠@A71~pc2!q]P3XUi
U6^"@LmWKWJ!¿CLzҎ7HC'ca'<^./+PK[c  	  PK    A             >   org/bouncycastle/crypto/threshold/ShamirSplitSecretShare.classN@ƿB+
jL/<18q ©
--.FJƃCg{P7vf63_ .dZ;vaGP^\q(X!~ĜpٍdaGd̍xGSKDLQ22/32<
h/_.}((Jҹ#Fo@(l4e6
`JK
&j80C-3x&150ԑCUWTCRO(kVW;goh,a;GPG
[c)cE6OqJW'
|PKq٠P    PK    A             3   org/bouncycastle/crypto/threshold/SplitSecret.class=
@5QPZȂ	"f]CȆds5U$W00x |qDHZ[¤Q*kfHwW+0,ƹV4u"bs.Udc-TV'UE`}a0XB4n p܏\ʜrPKQY      PK
      A                org/bouncycastle/crypto/tls/PK    A             3   org/bouncycastle/crypto/tls/TlsRsaKeyExchange.classWUN2;4S:MB4di+lkI,eCf3LYfgCXK-O  R4]i
*B	|x6i!)c>sνuo>3

 @U 
4pU WX.XkhNOnxppy)ǜpn8c4r4);3d:yΞ%g)*'=fbMh ~@ă'5F[y{gGp`G[t
X߹{`gs$@rlʚ1qrr.[鬕M5SiW
S);GZάaA{`v\Z(tew\@-ǭwlL˝v)2hnjL鰳yѭ,xۓo̦lΰ,쉜lಂcRaO$DeW2h:t $qy{AF☕P{bG5)ƮQ6ҦL'hޜ5df]քEsݶQ2MHIa4cxILI54bSv@@bREQ)YFۼYSvm;ѝ4%vNYq@}ҦP'X"ܛ2Ddd̴t޳ּMh%gI%zGwS͜cw+<քڭt2i*bΗ$vnD*'lj^Hr䌟}TV.CIfͽ.'b;ب]ȦRh:<2`:V+89.H<o-.V:sbuW/YټtjcõH^vk39v,>QЅjs4~gr9u8[t麙|l0A1/huk@2v!=T
9A2*NmJ؞a&|]IWZFU*>6J3Qn1zw*b	[$l	m+	$\'z	I	7HQBn	=z%I+`eBE.)M]om-ڜpI𳲪ib{kM7gm~YKz]CZM\a{nGmY ZXIcb>/˦EDYi^/
P$ϻ%gm",1"%`]\ZK+?@.PK,G̷(X
[*\EEV2GKR0ZעNA+X
.`
b63\p%Cf
ޅuØT
.^1 ;3t23ЄTЁ)0
vn88ȸ
aqD(>qC8_a*QoHS2L|2hwdX c7g7"2<$>I0<d÷edixddq}Y
zo%z*o~=znP͘Z2Ba4G?N**+4Ь@9="}e>QG!<pQC?<è4O$nNgCeFEB¯q".Rm+yY|<pu>5=NEH}hYX}E8
$ON㇚?RPrTYD*F(+ZLՈWkUj-e4.x컡5wkejx2^ֆZ2-gj
+h`ptU?/!kcEF#_GF"RN$",x-D=6iy!IJߢʹ[M-P)!i~K̍]"$bv_\VFܯEEUf^h!FFR}U_(pWw?{teǖKVMЙ_ޖ(o*r
FH6"3F\̈FUxjcB_wx(x¾#X9',ewF8tIuXNgtzG"5ya5I
N'YrAVB*[JfRy)s@UYEA-,l29s؝ii<>ǧ\KKHIt"դ"J-h~@e"^ITiAOVuf@x9Q-eRԨVxHՐ'I9i.OԱ !\e^T\{W=Np42'MBjQhDfo#WdM"3|j!c/){ή:	|Yjλv{^ʆ+꥔q}llvU0[e\H
6wU^i/Go@FYOcz
/%"UKT2i1Zf*(s7
̈Gy~i/]PK%i	  |  PK
      A                org/bouncycastle/crypto/util/PK    A             =   org/bouncycastle/crypto/util/AlgorithmIdentifierFactory.class|TUo2!ȹ(-Г@fRH@(*N&00 ]Ե
.q{Y׶ukokw&!&!5{=ｹ~ pN*RSJdzdf8[V^-P6y=œr=yyɞ"O^<6=W\#ԓ@P$
3xi
WypyyY9**K6եU8:+쥱`1IVԊm27ñhiW@p/n)i/ߡ?}J~t¢NǓ
6XH8
Ն:
jyreյ|pԶQF
z#hXHiڕBVr9'-]elғC	+M^6h]6eM͎뽵h)LLDsxw`Xד+*W5F"m~;;h8a{|Nt[fu(]8EI7,Y0.<]OP;-U\~)&S|<cF;dv0dM]}FZjHx\~ߒ9KJp"vrERN7"&ZQ\Ze,޻x(:X%Mr`pcTv,!hVfnX';DNLpb9Nx:DN8M!%fz;3%mᆰ^gd-us_oX.o7uTg
,IC!$
i𥡏F_
O 4kk1LcE4FO^)iNiyi8 [4Թ05K4h,XqG0~C4B.a".Tօ9XqFЅPF1V1Sҍ`FčwcVQ7vBc6,q#VIM\25H'KdP݌op p;©b&[ddk[$[#:6qVfk;I'Fi {7rqZ3Nֶm듅֩"#ҌkJmZKS;ZV\v7%'n?iv gH3M활?g̣3&w :!9վ~V`6[lp(ь9p6/zÆ7=gqPpax%~5]8e'6'MƁ=@k=&ݚ@55TOj¡S%n'HoIa?\q2"H/(s"
&Rbp*yap!KRip)e*m#3|8KxIe$KV2e"sdgrDR̕<Iw|2Iҙ?"dkHLbN1L%iW29Y2SҘdT0n$2Y!wRϜ#|A|yYdd;d6TJȑ̅rs[dgϬ6bp1,8P3R\&Qa'{008,7i9	1Z-$$e:̴$+^ r 3lҏ144fTR1b1x5IRLaFS:mdL`n084l'G4Ilfoc	𡐩q/\ +'QOr)^9{4l)gHGmRiz3w<+dr>O^ \^)S5/Õzi^,V/re2H^!(W"*?jIP
:Y\/!ԿtF(7ܢlpuQnW.KJQn9$CAu,PȡwԼ5.-=JLOJXe ϤCVa٨<'D}1>.Ô'$<i{d4/ϑwV}V*I<WL}A2Kee)Jko(o1Wߒ
mwħw
T>~ 0#*	Q?ʧ\53q)KX%*+d)[D^)?(O|jvbc{?PK    PK    A             6   org/bouncycastle/crypto/util/BasicAlphabetMapper.classUKOW_c̐Q ~@B-iCcJ)=0[5,PYt[eU+U
,55TRw@J鹃<ܨFsιM 068E
qiW(<K'4;jl\ϠabnX\
:C8@VBfTyXiUTܰ7ecZb*'"Nt)o).tmA_ҺSBOkq3I]\HIF^[<m,ivd'"䑜RV13)dJ_閸Y,gdM$穰Ԥ(Vajdi$3vv
U^
X2WR)^K"d]hE#u8ę/Qɮq_Fc)8+rG9MV+jܒPh{htZ3u+#4E{
)8  Mo))8
.0OP;p 38D!>X#=k35ZB` |9+}PX{SR&Q*pE	p87QqQ
EE^iTD1 aPE3T1,7Qǻ*NaDZ*C?ޓp݇K@¸1|CޗpCG>tCMzՃ%ܒ0WqHԣc&$LJM>KӅo<@e'Mm
p#^\oӾU&	Ĵ@]$ZƗkПA~Be5|@?N՜va.wYGƁ6@59Hn2^uNrFrlugv]pn# ~]lNS'X=]DfϧtG7;RQ[G.2SLցUC'*Mw?Tˮ;{7b{)t͵vVv;~wWhUpnW,ZPW
\|${VGܻ]LG=,vY}_nVA)'Cj׬{J4蚳3>8ұ>-g౵tRI#W}PK@@J    PK    A             0   org/bouncycastle/crypto/util/CipherFactory.classw`TEǿ$
̄ $ #I@7GXٍ[`	zé]A{olnof~yoow`2%ؿ?2iɘ$dfZ 13kIS撢r'ry^wj.-+.*%FQ=8(YRMΦ&[ z}A[3ZakrZPd5h6iϷc3	_sbQAhM3Z燂M`u*4:-{RaYiITc&CkBO $S Lת
ͫ @uiԓjf2|z[w 9LU:trtҨo
"5dyKA'yq-sj)WvEgvzy;.u4hɃj]]A]oPc@9t{|7	ik.jҹi8rGwz
F5.)H1$9`4v4E!3cblCV9].-pz4rFK4pޣ}Yg@I΀wjJs#[SZǷ
y<
Q)n9wu;~w_
&ǶcWW/:~ nW`^qu.qwC9>
&6^7y=rģ#rJ]榠^:V!:~xƍaLֻZ^XZ]@~AwX	^{:l'ƳuF:_q}uz
K:IeEd^\y(e]NYWG835=S0V6v3#T/Wԁ`}":zZp!MgF<PuouqD41>bW:=
jw=zfRֹ4N6.{1ޱ$ƠGs_onzܫirKj_当uCo7imTLSb|*fsTPEb%*JUUQ(*V1OEJU*XǪVPq*jT,Rq
*8AR'X$޿̪B3ndދ0[M.ƌBd23WY>g}_bbt8K8v2wk!OurƟQ;ܘ6]ppJ?hwdF71ꃐzycnaF~
VיKK5`ΡN3NQ!7j#(X?U;MǴӕTW?ܖuq+1vs_aQo7}Q?8*qB~uSUwz~YXD?+,}Yf`2e<K&KK6K,X,YԲɊ,)Pd+FXFlE̥KKˬ8[_+Mlي\\iL\տZ!p5߬kXY1s,7X1 7r-,7nleMheicr7K;.r'cKf;Xq>q!7bipnGeA=`mȿY^fył<dA#Y^GXfy͂ byƂX/Z]5r*i,k:˛,oYp:ޱkxςlozd<j9xs<,o[pdy6ru#W7C.I^RϦ``(H,+I%.?bujt6-o9ʈ)"B{NIJ%)$I)ĤVg?.D$Gg(抜a9-JRHu;~ʣ(IV
{A
}]3aB2qZ5q;kQ6ap;Ns*3T&$ #q=oF:KTZRڔQTHiS2rvcޑԊmzG}ؐԢ+[&&ôS1'q>Uqv'89xHN%~'e$=2vó_Р/zJr*}PKG_R~K#7"٧/g(ͨ8r2E1*[-LMl([aijQ:֓7t6qeXM*#p;'wt.CևCYjzdZ$tpjPI\ۋ1*(Tl"UTe6ة_"|=9]`<_\119J9OҦmS2QD>}m4x/nk%(	O#0!qiBWqF;h#|KcT}-XG4d;NѾ<LhJiF9ҾûYH;v,z6U9:ܜN{1DE0*fp}K=ThD;:)BʀmԶ*mU2EkUEǹ?rb:		qf`]d̎Ƒ(qO#IIbcCƑ,!LKJd 5K|KHl HH9gI<H"tXA:P,&$q!]!Hi	+P	$&ǒ`I)0Zc%^"x0^L ͔x%![9b5M:Q1$O	v/	 "ASE*4q8iNvM)3!_BYtm#d9b6O
HH%~#H|@(CHJ<L(h#%K|D8Z!'I+$*X*#/NX V#q=XQBZ-IJL8N:BM""[	K"8$Z%WNTb3D-eb"Ib>SjBVB[M!rQNZ/撮Yn+%.%4H\@HNhxKH}$vN"Ҁ384$qaֈ#I%.$"T	I\BX+xppPgJ<K	?0׋$nb#N`+y1Ηyely8qp3.Gq4Ow1,c\"̌Keb*r//2xI436K|ϼRƸJ0*j171qd\+T3qě,7L-1o*Lm0oEm"q+w2ww.-"*Na*N_w]c
b3GQtE)_4k" 0y1a>,7huE	ZߢxJGӢaa<K|Ne</.$/RR0_G0^Wrk?uϘoP2oQ$oQw(wiuicyDc_$~Jf~&`~!0̯Dk}[88?(0̟)_2Ư"sM1SCh|?PK4  !  PK    A             <   org/bouncycastle/crypto/util/CipherKeyGeneratorFactory.classk[G[%1$ŢŶ"Ҕk	b/t،aaw7hz^_Чytn	&O~;sϙ3?0_;*hQqð廬P&[Mmd2
ԕL2huR[yufYp.Xtŝ}
g9^wg;
bP#]?zD46fgFk23]gHZ0pYO$0~?
LuVi0Jo
FY27<jV0vf2eMv
":/ym):rZrcXa!)hv+:s=k̵Ftnq$g"q +͝Ea=m1[mT'JJ;-erM$tRlQNr>r>y<MӤ^N
IgZ,؎mBXQ0R)ošpBX`wis\ӭZ(j:HiZe)dUqA[*V>*T\TTq
/'ta>?W\/BU5
vq2K.x,;F]>9xWX֧՟kWQ{'/yC("2C!L8M8Cx%	g	oz	C6%ܠևDQoVH"D&+>!	Eai#Mp'q̄p
0BŭzXr	_Ca$i /ݰVZW!95yLY`UiraG,)I⩈穡!bXy"J&{>>KQϠY,-
˦jKR1ITIX.TZ?*FIp(!\,)-.Iʔ,Koc"]?PIc4XHWqY轘bxw8(EXg1.<mV܋ASERm_nPKi"r  
  PK    A             /   org/bouncycastle/crypto/util/DERMacData$1.classA
0߯T\*v7iRWs<{/ 	ym#uU l]
V}0Z~'YU	? 	$ª8ڦ殄Z
{})~$)Yk$ϾPKP      PK    A             5   org/bouncycastle/crypto/util/DERMacData$Builder.classTn@N]ri	%q!nڔz M
*9[ +HH QZy(Ĭ(%߬ٙ'KXWA(. JR+ojO[c;
F*+}$D15GpWX]쪂"L1௧`gU) {\,
rjUH
̩Jk^uaſXX}M@u0[׫V)jiy5|nj5^ZqvuքeK3e
]*ynY=Yl+t 
ܫ+8GOxk6AG5n)U~wċ2ͫ8⠊*8"☊*NPfybq>ho*8W!CZp(5sFyîE*[/P1 }Y-a!ǲ36~gD/P] ~}&N޾ t	%IFF!!c:tD$D%r"+ᜎAq
99b$\pEU	$\0{FqSiLhHbJↄ[R(HԐm	tANxҭR%ޤ
NOj˲H%sE\m(%zd>@T08S]Q⬱Y#FvO1cdþ1m#q QC|ˡP:@߇z>_}$=ZOޓ>H.-cJTjte[gOY3<D_~˄E0P%>R*p<VQcK'^g`/PK^@G    PK    A             2   org/bouncycastle/crypto/util/DERMacData$Type.classTYOQ0hYZ"mY"BWR@@2֒2%)IIZTFó?xt%NrϹl_!2[<y.op'D5g(
8rWeS|r+Iy{ѽˍY,0PVtl퍮T]|ݨ(^nՆYӔ:6JӬ֔Lvs]-gTS
nwV)STzn'RS՛G35~0y
nኦQ+DYOL-ijH8/'z:{bҋ;^ @SKK"ux	)p(ܕMr7h/?Mr,"J߹Bn(ի~-u'IF#+Ucn#$!&Ƙ3!" a3cNMKv%< OXdbL<c⹈ ^Be|q&^KzH)a^o]3?ީzA.0)ex#@okF|lAY',[pe!r7:uZn:pZp?ii)23qבXl!gA'΢힆Iz|V֪6"l J6RŒtn#Q,yH;M+m?(J:erHY&]9ܲ2Lc@{*#6PK    PK    A             -   org/bouncycastle/crypto/util/DERMacData.classMK@mڤQT7EADziBRG-K.>23
RMo3kzu"|xNtɐ<[jߎg7]͇"yx}<+xi0Qfqn'$O̤lc=;`8NZi?|]C9
4
,3Op55d!iPΡ
ylt+XC9"{Ԝvyvty!eE8<)CQ8MBJ8SfuR1FըL,*)#|bU d)Q$V"[3=:˔_vP"JDPKY,-\  n  PK    A             1   org/bouncycastle/crypto/util/DEROtherInfo$1.classM
0W"#p#.
.
CH$I^ͅPb8f3y 0'xixUJֺv0rt=X>NSqB\in3C0!
#i*JX(w{5fH#N1X#yPK6      PK    A             7   org/bouncycastle/crypto/util/DEROtherInfo$Builder.classT]OA=O?iR ?(@RynXuEW561mLXMz=3޹sg
CiSz˥m:2]YwÝcV!rZYJZp
!VKZR3C9e5+m^&v,Re~@ʊ0}v{us=TE}Vu*Z1Bu*3	D\rU}*xDիWyѰKE><IB^	EB~]t)5'钏cri]lR[ydr[D.|{TRb8LŎz#nGӱiOyWd%7ӕukhgίK/+' " (&)0A޴0tzqQab¨ą1Y1%dLࡌ['ThR,noZrn}Wĝ"AGEQe
]e8bω= ?D86H_`MXV\\cAZo5@861$l`yK<'ɶ-	Bmb4n\/x,p+?tգMmb"X>@5M&ۋ/hFiaR:8gDz PKxz  *  PK    A             /   org/bouncycastle/crypto/util/DEROtherInfo.classN@Zx'eѐӸ YHU-#4S[i|(A6brn9g|}|8A֮	Rv$du6>
C2tO6	zu->0Cf[/ضeyѾ걇qjsGgFh7g~yQXnFg>A	X!Pdde9%W7-#,T5,#!
 !{,V"l"$ȳXXlApkPWrH"'Rª[F
 ᥤ3E;b_I5=,N:1jL+k]i]PK:^^j    PK    A             ,   org/bouncycastle/crypto/util/DerUtil$1.classPKKBA=c>Qjeׂ\ M:\';Z"hGE䢁;̙üCr_jCZ|	>:;JN1thmF:<rJGN*HB*u3͉	CbUEB<C;s$9vѠycaûd(W_5wZ	U<HI[X4&Cm\#e)ds`r2XD!2}|[Dq,ZؖQ$"laX0բ*6퐧(QU~0[}jmkH'>1S# (fPK#d?T    PK    A             *   org/bouncycastle/crypto/util/DerUtil.classYo@K׽[Ji8	
C!5i*@uVYG"ߪ$ xDC!f+a;3;ٙٯ>|	;!i)ʹz#ؓz0_R**+4=z%B6))L"͡/3AFUB5TH;^իo]V^ ]˖S?:bX5-w<)B l9GAG]Gdi<->7N(nobnm(wvE$`kE0&vw#1J&CF:00i`\N
zX7;Y)~W;gh%f6ρG=\B,Hh-i"Rp%qB&`5%+X7
+ț+=)EXy	xCq>oG@tS`G4IF2c]d`>toK/` 1ǝSc[fx&)zϢHR"`=C6 }ܞa=lzEq$Rtyi[2I;PK'+    PK    A             2   org/bouncycastle/crypto/util/DigestFactory$1.class=KA߉IN/WJD%ba f9/r
(?Jh2;c+|%;'TTӽ$P')bv8:&
L5UҺXN(Y1sI_N\9u%3p<%tӤJ<Üf[X\K(c
u>ybόxDFI8u@/j]\M-V\/ȌowuV??sNͱ
&g̭Ͳ
PK	&  7  PK    A             3   org/bouncycastle/crypto/util/DigestFactory$10.classMK1ԶۭGjĢ7EЪ((cu˒&_驠 QVj0W h1̵7oCE&J8ՏVx<:WcXT
be;ÇQp8׿c|J
L2tg7z<<o_>^+ ,,X@݇]`"Coډ/3C\ЏbU3T鐅R\'dFgFE:+^n`1
XXDy2VrPK&wH'  :  PK    A             3   org/bouncycastle/crypto/util/DigestFactory$11.classMK1ߩmW[W<ԖAkEQ 4[D6xG٭v¼L&@f>xJ"^$TGFRXB['!%j6BiaǗBhͣ6ٌ:dBv	CCCуa׼ZtT'K~ 9P*>VPv0#!C7J_XH>!!PiUnɝ
ղ( 5hT~.N7S=gTN(9r^w 3+zPKu +  <  PK    A             3   org/bouncycastle/crypto/util/DigestFactory$12.classMK1ԶۭGjĊ7EZQT<4
%M*_驠 QVE;a^&g 3`
C0ґ;b(D	ъ:OB?T1Mi9ºXq(TY~{~|;.YE1RgB:vou:sYC"nj~Q.RY5+=-cc#^+`&k&f(*s3:kղ(& 5Z4*?
ӂ
}+:i%
:eLLբ
PK[1+  <  PK    A             2   org/bouncycastle/crypto/util/DigestFactory$2.classMK@߭mij?уZM*
A,1%Jv+_驠 Q$ѣZgeW 0u7oCMJ85HV͑x<:WÑg҈Xˉ%trHYga8׿c'Nt&0lo0*<{14{ٞ~cM>ZtEƉ.3!Cp	$ZetR
VJo2+!/oOS%R,FqM )\?PK\j:&  9  PK    A             2   org/bouncycastle/crypto/util/DigestFactory$3.classMK1ԶۭGj-koUQP<4
%M*_驠 QVORfL23/o h0,4o!CI&J8ՋVաx<:mH˱ŊdDN{Zb>΄t&Q7ǰ;5x{(x(z<,R<짳:Cȁf>|h	O2{f@ӯjJ{3`.4XX,6P6Cv˔Y#y@5AЦQ~n&vOQ9ͣDvN S)StPKH,  =  PK    A             2   org/bouncycastle/crypto/util/DigestFactory$4.classJ1mW[̓
A^AbAPaݲ$I>%Nw=RE0d7C+6fkA#wPNubCu(U#@NhIIB7#-RX+.3|:{G;{'鎡5
(u&36zì9Ŵ&Y~7&=z~> 9 T}(NϐrellKǹ!j:VYL4\2y
',<b"P6sX!G@vN22R PK>]7  \  PK    A             2   org/bouncycastle/crypto/util/DigestFactory$5.classMK1ԶۭGj-ZŃ xLӰnY٤B

%n$U:a!3\sx2dShPGcC~(&	yIa]LF~*,9?d74|袘O3!IF
o2lπg
%
<Ty9K?鬎Pr`Y5Z+ZF:RM@7*uP]2etVȫePhQF*iT	+wc,=eTd(]#S$D]._PK*X,  =  PK    A             2   org/bouncycastle/crypto/util/DigestFactory$6.classMK1ԶۭGj-zQA<iX,lRJOgz*0d̐|y\sx2dShPGcC~(&	yIa]LF~*,9?ld74|袘O3!IF
o1tfyEy*ѼtVs~ 9,X@Շ-aI|iS-cc#^)wo&k:f(.s2:+2(ƨ?#4*
ӄ;12*UyȮ)`"e./PK
,  =  PK    A             2   org/bouncycastle/crypto/util/DigestFactory$7.classMK@߭iij?уZE<(VEA %]n+=ĳ?J$zT,3>
`m
Ce?ֱ;`T	zъ1'BG?T1tMi9ºDq8RY~}v}_^PB:6v><eY޹~lOG?W|S!J`Y0F M:@"3|DXGݙCx	%ZejtRfrw2+&/n7LS%,SPBޢLj]PK\&  9  PK    A             2   org/bouncycastle/crypto/util/DigestFactory$8.classMK@߭iij?уZE (VEA %]n+=ĳ?J$zT,3>
`m
Ce?ֱ;`T	zъ1'BG?T1tMi9ºDq8RY~}v}_^PB:6v><eY޹~lOG?W|S!J`Y0F M:@"3|DXGݙCx	%ZejtRfrw2+&/n7LS%,SPBޢLj]PK	
&  9  PK    A             2   org/bouncycastle/crypto/util/DigestFactory$9.classMK@߭iij?уZE"UQP<v)aW[JO':/|<Aa~Pُu2U©^bbhŃt]FoFZ.Q\{g u_nxԩΤc]8GGŇcw.f/_@X̡ @P̀6_?216ѥrwfkzVY"jݱ;D+ܝʨ}Igۍ7,<T	=T)(e+'PKn7&  9  PK    A             7   org/bouncycastle/crypto/util/DigestFactory$Cloner.classM
0ϟF[A]fE!
DT9 >Y? l2*(¼70%mlA+.]{
7Pʇ?\:ÐaD/}s $,av2Qs-W>@0iT$}PKNߤ     PK    A             0   org/bouncycastle/crypto/util/DigestFactory.classWWƟB2)Zj6b
ZHXD\4cBAK7/V? ~_ѿ;s'L2o2NϿ `㈂`7t6W|TVOfrY#
:qƨ71ZBPPcz;
bHx灰qQ-#ua9m-e@s[I

`żsʘ$Pj,x@ 2&h8R
QVهPow̲-'Ko(9})@&˧3hq'L"
OLjI53Dጱ#j=sd]ق&)d{.
M䦳ədgP2?3BFIm`:?+
bp 
!t3j{£^pJ^*oM[w,
-~C7 &u8sE*_o	/R#5?|x7zw{ۼ{=Ƌ*OԴ.pV	l!S $K ,hh

h#p^}
O~tJ
vƼzt`clt6Ev$-{6TM"PhEvk0V۸RpнZf[*NXUTAaP	M$U
?K-KKej,Y6lf	BSq'RQ8SØ}hY:X:YLͽn1b<E%C{} `a<KEgf9rGYaC,C,,#,,GYXg9~,x 8'闥jϝWڕa{&Q(hivq`/6PQ˚f%Wosl\濾߉"YPjT4,)bN1fTWN=fċp$Fl8̘W,hSLżn91oX',gm,BhBBF[wK[.a
Jz^Na^U.a\Y1V0YY1l[%[Kak]*앭s	(lS =޶.?")	m[}U\no
KI^jg۬Qv!tuc}d~1_+1jJol{%[@co?1JmG?NO6c gi?_ϥ?LצoрI:a~lGd;*ۣ1َlO$WPK  r  PK    A             5   org/bouncycastle/crypto/util/JournaledAlgorithm.classWWW&/ uڢ
nQl;$C38uh}JSΩ􏪽w2 ywݙ X5^b/6{EBJQTnMۛ%LKjV	-MN3ij\f|zg$q	m]z\
/nQ݈eD>(b(ejIZZjDSe0
5,x{$F!545g%vyȍajFtP&ńmZjL[b]D%$ᯥMyoF"bm:񺍄ʨvO+Ny5;!a&=zc6SHXxB=t3%94YZNdd\g	=I;OTu<цm4n2tr s~/aU#.5.3iD5TzL{Mݰ5+OaVN!Zu9y6,;5'lZ 	;Ԅ2߻);HLjeuVp|..ׯNjN--עj9Wmuέ]!TV&Dö,T3zDKi1=a[dI[]XLdMl)kp9
Hq4$
fLeFAOO7eE2uY4pf,K
,O`_Y  hhh	X%Z`Z	 Q]`!Z۴KX;E%ZOjW/o8"~5dc4^!:w?A63~Ps^O_YߘqStEA0;KԨ`<jY쵭,sVKS3*Wڋ$%Yuf)NR[?Wظk5iC%oQ*
`6U
a2Id42Q0]V&
D<<
Ag	M8Oq܋S
ja0T8伌.<'cэǘ.~L^O0yIF/.؇eႌi򆌃x[2u&o8gd$7e;2>&2yM1<ńy)b7]
e"'wRE>TrO%D^T_þlin*xhˁM\!u	7sV>>|{hoQ\e[8*qW @e  Z9Kz^*TL
V-Hp,ZIkr<Be݃ӮZZ%Z7p+"Kq	(1̦Uŉ;-)B_krPO dӬGŌ;tynԇ@4 a%)tbܘ-gcN@
?Y* Q
κ>NՁowW1[nWJ*J^*oz,E&7c!籋EÁ0vR+23. 0Y1` Ajjgǲl/EbH6Q|䂧Up)\!!
;b%䖩.G"N\ɚexh

a
|Vӑq/PK1&b    PK    A             ;   org/bouncycastle/crypto/util/JournalingSecureRandom$1.classM
0D'*=AijK"z5Coyy/ kN>0q:ʺFT6h\Vqё4-5gI1lx-#0virjkHk_1Bxrar2Km,PK@ܛ      PK    A             J   org/bouncycastle/crypto/util/JournalingSecureRandom$TranscriptStream.classQMK0~nvv]΋"Nv)HS?K %y>x||8DlwKQ2!(!0aHм秊KIӛDWHNQ 
hB2K(\L,H$bi>";IEH>JlBt(80AX0pfu[#]EcF\
d/qbӞ
e2]5G@ͧ\vN׵8gl%nR`|'l$Z.VЀVPK<O1?  O  PK    A             9   org/bouncycastle/crypto/util/JournalingSecureRandom.classT[WU&	LCV
b
	鈴
rhN&qt&kfRɻ//-%]/\Ci]<|{}w9>s~ a`lxMB(6>-!>F`Ǐ'uӰ&NJ& :YMd$H)	KhG+vLUr+n
m80M	͕L3h;Fѓآp]@y4HUO$P>bSBTS
[M-n%ϏUPS)
4Oetg=ǰ
%k[L\ސ՗wdMo	Wj;5g,kg
UwEVg|SC(2cg1Javɱ4jG7p<cI)Qe|Thp+G!oDٳYN-S)=giѯI{![2ސqIe=2ze1@;[8Uh«7c'OؿWx\/6MN	89yAOԄQЄfW.`L\WF@A+ 
)1AA;tↂ7xWAc&øP
MPq0LE0X i>`+$9\װ!Ra0!r#z C3v+%eY15WVVքleU?`6AbQTpqj5(WE|YxpBzc*W%nӹ#MQ-+?d%vMh"^<KTc,M@w?r ^EH2&9h# !b}d
>u65ȂnVc虗1K֚Ѫm
\jڑV[̡Cm=J^nr (٩6T6Z1Z-|cjȳ]QN៑>:_ 1]9PKʗ6!  :  PK    A             8   org/bouncycastle/crypto/util/OpenSSHPrivateKeyUtil.classY	X\/@ ͸TIC6>f1μ!nmmjEmjhZov7MLyo`Ws9ss^z A\.مA. <DH<
a
kmbں+[h^Im-R)TZ,P\qX.&ʮp(.dթּy%Wk^JnMLO$jyzH1ַ-\\Ѷq=@:(4BG,3hܓ#?#c&W68lF	L4`$FcŌ;@
3"ru+mB-\A<1=3MavqVo,2hͱzsfČw[Aj4w]瘤wa#rFސ?dF,23l_]]75'r<\={,avC3q#hh Np	=Q]s鷚-ǥ
<=f ,c
˞qqn4B#0Hp̦:;^e>ñCi9Qģy2ш}N6F	2˸d?1o(m_߶o[hܰ	zSsPdɝᶇf7ǂ>+Kh$.՘DEFb,RV=7ՒfWgX۽-`jNq	JNI8ݑJ_4!/Ba3Vs/!	x#Fnh:|=h,Mq+lzxd/W'̊uӐAN/;6LO~t4O&9i/^R]|F;;&#4isMƌ<▷kSfY?xJN!9T3 ^c޶lsrZݶrb*I%$iQo]t4lc1Tp5,VLC|,6يM'Qlk]k&aɂ=z._޴2i*ƙffk̚4n
$fN1Ү::Sw4~]lȩse+q'-^Y7$d㎇m1;c:2q&Y&I9PK&pZN-n&W:3+Rl)v$È{ZMONiNϖ<^XHι']z*q8pb󲥶:{B$4jB$81Y!OVmE':eV4+t0!W&"r{C3fqb]a:9'y$yF֞L!&'\ۅ3\8Ӆ]raop.Ʌ]xB
(+\pB:N
*lSVBJ^^`((
BBPaBH
a>BT_ZB\RH((TEȕ3uL[]11G[%塀㤝8LOqfjr	T#/\=Ow<y-iiY!+Xߎ8xDV8kJSSuq0[r
t6fZC>IIG^	/ aIOӰ'Wy~c-3i)=0y}qQN2hb8^8Be/<sg7X=_S	[: &L,o.k솙z2-M~zhNu]m32}`˭ۢc8_Ա@`4ox@
t]
0KW'pދrј-P!0G>(PJ*ш/8_ֱ_JG_!wk:nu:7u,hX*p
\(*Z[:Zm;:wuIutu[4H~3uE/u܀_x2<otJwu,Ɵ"Wo:6BCx
*o4MUJ
{FýUhpjVjx\s|5|/jxH4F
Su>AMj
B
p.s5|hHb
ô@`3xiE^f
	,h8jz
Oi#pT+Bb
h&p#VQ(x$])Ztr
Oӫ4<c'P,P"	Y*(Pe<
>G5|Ajb+?/zuF&wy<œ*/{k(-$a$g'(fpiʢaP<9P$Ek~n8?ux{Q<]:L$$e,7;D>IWvwQ4;(n$Gqo(V$].N.m6&h1gYPG4T&4`Qv/t64&鮔|]׮(jVrWw_7ۻnnr^lNxp/qO[n'iSs x9|~q1J?gI§*< {N姁q3=
ElbOSgu>+w./\Vd7-ݱ
UU
#!Z0NR u&!R8n	Tl(TKƪt0c{(ݍN<6]xo'Y%>j7!nխlu,}]zG荾"7{!̓
#KF]}W2Ca'4I8w0c_Q<;:+Ynm(UX!YqpKꢢ;ͷonrW!i>E1U]c>*_ieB0njOsk+.S(h[+t*ܚ-CV}#t(>
Oֶ-J3ʭPW.(aԒԝrH`">LW0.wŽϝ?;bƒ>m<Y6ǓƓ.IUgjsܺ"IUreTd!s(wvWܳdቝ[2vLn/qc<.?="]#
\C'.P޺q3
it%380/`1T

/b	̔>$u'EYڃ>y6>xѾ=8氆c|a}o.j*>B>B
 PKj_!
     PK    A             7   org/bouncycastle/crypto/util/OpenSSHPublicKeyUtil.classWy|zD
i)56wݕAmzw.!Qmz}矽_]ٲ-#Wͼ7{̛ՃvCJ	a	Q	7KxH8$ሄcKx$ˢNz*:9G73TΞТ:E46PcӉnǃD7Quv&ޡ!;GԻd[{{do|rvLx@:DϨNtزYWLK8:5̴u)=;ٞ6cccڠUGGڪnӪRZ*P1gDm	XNs/a8_uxN5ĴXj1T
빢X8Lg[霑#K꠷*[o4HfI
Ph1P3h[Nj\}{Ϧ =x>2(2\bqi-Q
n5[@eg⧬ʧT5{>3yKeٝc;{{վ4+eǈk{[?c(]kVn4wfGU>M酆۫Vqg5w+ƫؖjɹ?HEahR+;7<\, Ǳ˱w)6շJ~-8全G'T#Eۢfhfnkj[-GwuSVjKo3++~Y]qF1D"!:wP4׍2NʎڮsT$*Ι)C)e+iVIiA@d6y
glPLgÒpT":ExE<AD="E+W>E.OE/b@ATÉխklJ̫]Ә_/;%^==d=\QOnn(etfHcv٘r}6tgu:pKcU95Lګ,dݼ[]ZmU[!ڊ!ViZxM_(tUhh._7<&W׭.IsJ_Q߿VJw=\.5$RpV+Ђ5
2Ŕ
N1DpV<CA
RpI<[A *avcbP<x!ËbD&Txx9{~fyb
={
k^'#w{dz;0Xg&>&ed~2|ႌq|<çeLvp1|32rxý2&>0L8xÛ.s,yL2T|aS2Oȸo=tX&={:Ч)}Fbqan!$-BdL@2Y&i}\Oer!B:NiVR+P[<Ӧ ^ˊ8$-׈(m͗d84.6_$v5d`"QD>9_~R?ⶀ_'{wnL[wˈ"bxY_
xpT\ZJ4tlie;[SMK0$hd<Ao2#_گpKopMbC)pC0Y&*_R^Laa6|Jl햇*/b_=7
eۻ{[.		rBa~~I CGdM$|X)Q<d0EB)|}
"îp]_4:B4Q-E3\Ax	AK#|<C,¥"_*I}{
KCz/L5鐮4]?5b vaE^>z2,"r-\s*sB-;»tYj{~fwCy",Qc"i/nJ|
PK~S0    PK    A             1   org/bouncycastle/crypto/util/PBKDF2Config$1.classA
0_*=7"( "z4~I^ͅPb8f3y 0`*J2TTZ(\CU{p	a[掮a.8G0ޒΗd:܅a'ungG<:A/:/PKO      PK    A             7   org/bouncycastle/crypto/util/PBKDF2Config$Builder.classSmkA~6/$$5V[k.KHEh#ÂOrl-]ۨOb((Qyb4ٝyf7 Ɛ/fO'bmdَðl4~;:nad;ڦk{=E;tAlS9vPt#})\swuE~nl6ϏRzy@]*&]ý<`(MR_F54\Аp3A㑹o
l0Qҿa͚pViD<𩈓w&q_4#dIJ$<ngQMen)C	9
ܡigw8C<\;y%'.JCJFJSԌB
'TXk՘Q"FVXT1#:]0P2XeW;a2HZ)D% i3VNǄWXv$plu/OPKIUn    PK    A             /   org/bouncycastle/crypto/util/PBKDF2Config.classW[g~MRRփBPC!Z!D)Z.a	n]okea[A9QmgvÕofo
{/ U6ea	piZ{J-푮P wGH4REfZG#2X]#@J)4::))PQ1g+ɉ
ȏ%٢ѭEkq#Z
I
[JRTC:QF
(ED֬VE[_J'YY41JDhGCK>
Z0_8VeڸiZLEL+gX`6,۶lV,Xc;mx[dmjuVG_?iJ\"l)M'bJitYRJR[JzaPz-U7fl}nԾWg$KAYBɸɦ)~ƦAM3?JXF"iC#i9Ĭp[j$M[۲+uմHCb%-{ȉgd&B@YFSdgCާ/=/}egPi6.kNI4-Ysff2vOK(r>Ar9gh8'LOD-"Q)JDEԊ!b'PZu
WkFG)}<Ԥb|A!Je,9.evnSWvD@qlStz_mD_RҥTpK-P,nY ]ssdl
qK7?լ]K&=f=bQa޹؝Mm&,J'a7HXN	keXǰaFgxaÃDD$%Ð 101<	ˑ+a<*$a=&VpeX$DTB!f#abvAq	Ϻqԍf$aH2nqAc`ˍ1N01dxy8AkEë1Am:}zЎ7=h+2|DزK?+ɐ&B5;Fo.rjPp3lY))r-O "	[N:/Z֊e&rp&{
Hï1\/CQ?P ?!76rHF8|6,GGqs(~(.\F>rxzk/r9"ZD.e@9$g6:Ux"Ք{uvED%+Ȱ:~ּc$t>kN8){G?5觧&v
Gx7p3mYo\9޹/V5|8!O$=tOg1S
3U6IVPK_ӵ    PK    A             .   org/bouncycastle/crypto/util/PBKDFConfig.classPMK@}{KY"6-qWҭ`<QXzǼ7|{p6CBv'P'ąr?ٚG)Ji
q=[bd&_rJ%jଘ;].4rf:w{9z>VV10I+d|:QC@!ر	M3>&;-V=({vDX}D6#1ֳ4Vk|PKUE   ~  PK    A             '   org/bouncycastle/crypto/util/Pack.classMOatK-J E)=T=@bb\$&5WE{x#ln[l0;;;^_ 2c $2p%Dv;mEr<㑡9ٶc mܬЊ2Ʋ\;f߯*FP)?VZ|]z)ga~3^1jVkemW*ڕV_o=HoAY+k_hŃ}ppnsä>`@`$aH ?%' $RQ{ Sd̐JY2 3G&Af[P*FizZr`f:00j;7= 
Ԧ0LXU")9t 4pF<
8&t,yq
cɘ9
l/y7.n!lȁw}.UW^Jaj|NЫp0t+ZIi	\^V.a%*-wUk$FRbjj8GB(&)s{1c:om5h[{$&Fd\܈'qd{JdJ<c2ũ)td:1ODeYoP
.6SrJف
.2ipK9
Kb

+<d,P:}h_=-+]0/qޗұ6^{Ȏw=ԇwN9ѧf	{oAk3KJ PKap4    PK    A             4   org/bouncycastle/crypto/util/PrivateKeyFactory.classY	XTy5Mp@AԈf"Is1>fM&MIcMniM2fiM}}I۪9oY`L}{{;z 7B	LtĝyT8wgj~E]osdӍ5ƞrݭG庯/VO({|zPsX\6i%=n4J5FW6(&k5!(	{Zc գI|]?lPF;uZOMSЬ{ѡNheDk}%l@Gգ5)n(4TK#gNG[lCBvxM_lP3 KޯmS!-*{6ٟmsGM7f'lV1D]	34bL'pYԣ-~/B?hlY<WtwwVXNG16mZ K튻&0wƫkkj2
Vװ3zGt;HKhmM@?O߫vowpifgRcwz8	qJ'1&w\9	Җ^-9ث{ugh-@J1徐KB<5RWA_RVw{i"frBFA۔dA6K2DgꌟY
;>Oip"ܒLv&ucx-M;rB%֎'7"O_ڛEs͗90vljL3l"3L"/&AEQJf\@mU=~D%g,ĸ09wF=PO^'tktd$/`6N
G,i]*{i8;2ٝ#vb {Z;45{Uݗ,|\j/ɝ,z~W>ESh1NM#GYBr<ٌJ=b!C&Ts-Sѽs4ٯ:Z֯OYtKjwnOco8U0[4h2cV4<Ԓ}ͪRBZoA22DH}$Z?An1{jϠ~SVk$J\,NIYEbFK$Jlh,&.!qNKl.CKb.+$J[j	UbK-IHx$H{%Ix%Z:
Պx
V2+hdgWTIB@AH˲rq2@׍gEńZ7	gRi05]T%̤|ͅkH?ѧXcpd+)	]҆lLѺ%KC*FeЪGݚDsR:cv8W1IJW\5*s" R*?>QO`{&%sѼ#'9m>g}s:̆LU3 VQ}zRo$7NP(7c~mv%+y֒)w*c@ugӬɸ&7?&DKfE	[1aa9
Z:ȳ`(BXp.$
,Vpb6a\yc8*3,eXYc[1a"|ĊkBSq%xҊxzV!0Cg>IgxE+SV`(§(KzZ֫,yn}_bo,xMZ|ׂw;߳:7mރZ^|

Su?f!NdE
(RpSp~B 
*f*N3!
nWQV?)
ގ1ax`'(UpD *f;l@LSNQNtQ%.1Cݢ\=¦^q@b\G+1<,
<")xT(ӎ1<&f+x}y}y\W>׊Itna!4T׾jS%%cD;BT	.
'Me0^pŢWP<]&E;N2qqDGā+
yTR"7[Mi:mu!2!1R/E0[ɯ}!ֺxH\yS!pu*Bj
b9FĎa<ڵtHtҳmlrz.g=aa Lͤ|WD\^aG\ȷ98
mCbE]0fNz680
z=s*PB0raVsE*LM16w	r"e,=#Ž]!qC7Õa;q^Xij"Ƙ͑Ǟ1X(Dϑcu?
}|RńA"	?XbXXZNF6>ECbMXN݈m^^>?avM~^drOƑGŨ0xVTųΜ(OmiDl0)K 8MMFDXSFpG%";
@04WVACsXx<:K(z;98ԕbD\XKPlʋ8<R!rgmQdۊbbOESJs
s\<C{j)<5,{={LI2"f<V6f:>:xuT&Jm8qk:bce疜B%A-%5Gk%=hMS!qIL]PlT^JUd, 鑸8j3OaI;|ůә:9aԩ>v͊EэƋ7 PK8]b  !  PK    A             8   org/bouncycastle/crypto/util/PrivateKeyInfoFactory.classX	X\/pgILLb&1	 c`$c0BaI&љG̸ouMkjmK[kkmވ-Ffkk}wsfֶ|{=w;yl{
}_ękֲ=FZvImP$o(ڔ,|m]m@A?`}!E{I;Et(X~]툆PC"kŁh|P:Z{(HjRuAQD#Pq*6Üu$Ko1tB2o$UĬp!-R:MliUbM@rHzBsT])&e4Tlair/r,u.7uگ]7TWTUU,*LeocƦ\eY{q%kjkiʆ
igP;)\6ET
4<*^L=PSUekX
i._`@5VX`!
#}j@"tu
P/jV顰k?X̨/ۯK'4Q5GBWzh0LZE]}P$czXucjWcg[C}aQggךt"9J_\+/ˮl`EfﮦީGCFHm(X=fܙ`0\{j8PmG{br/5OeUf1WOg>sQŴ:S3ԀIW\Y`mUFECށ>7y˥IifKZJv.\ MUs|3K
nNCz9r&\zR
.t:gFY\IƼ\C2w{ެ:uaS1;曞ougךlDEP3M5h9Vc[nTt$]rK3,3LlP:
-6j ]SPz?|5m&	EN<nHlhhH4Kx%Jl.ᓸPbDDDDDN]]I언X[Gb%JJI%$A	Ury-S=
][f!Yԓ()kVk(3Mn#+eqYyKgrena2,10UZGi\fgsk1f\zU&r\xSm~̻xς5a6؛򳳆?gALTD0N!VgXZ{xm+2
_55Cw_YcM3!:f
sf	9<%5YZH=⿳9_nwweqi^:e&eZ,5ÅRsz|NVZہxexk2T2cp1T1T30gP`;(pЁ{lʥ"N=`;X{(a8a	R31Pʰa92.\ρ3V2p?{8cq4da#Q2< >0Ɛp`9p>v8O2gx1>eǕ7	q74g>9;ނ/0<`? /+?Dh(~`TpCexQUK'\-
\\:<z9)A7
^2<[s+_eO7Wf 7now|
^ǥ&It'}0i2<3GX\˄(xƳ'P0̳6L(ķ-`hAU@>;u`c,miSC%+
xCZK+(
X
qL<͢B1S0LG
xo1:zqmϨPFEaB3{֎	/m)mR%%_BXG-Lni%yU[)㸮rLTRZGimB6Gٺ+!LX84,4p-4U>㸾p\1qFuDq6{|fVgf%YQQ,hI/ⶍ6ilX
%aG4[F`ef|;%D6g1+z83!%or\}L'DB_oqOˆqy-r
ST"6ӸINb!+b[f]Sbemdʉ)k4wXc!VD{B̈́#&Ha~pacL$	M4¼$a˘hL0	wNM6%	珉L%ĢGyX|/%8$q	l$i!$b'|*7K視BN&I:6͂toYxxx
Ѷl/*|u$>:Eh-NᬥɬNK'Y1qj-.K*,^d%Xb
*FN>EI{t ҅B#rlcK烢x
pQ.J+˴-l7fPK"M
  7  PK    A             5   org/bouncycastle/crypto/util/PublicKeyFactory$1.classA
0j.G "z4IR!Ws<{/ LU'
NHX9pz!ʧ{tM:'_H` 0$wVZۜt+avV!P-0F2o
5S_PKhA      PK    A             H   org/bouncycastle/crypto/util/PublicKeyFactory$DHAgreementConverter.classT[OAN]H(hRĥ(-^JYb1qY6[bR$7Ld[e̜˜ dLNu|Yl̠+K!Z>c"۞oئhl5Kn)(	_C\WvBTO*xm+!jٿWf9erlnE۾(aqڎSͪix~QhgFi3lS>0=mi`÷&}kϒZan9g<LZ,84o ^ZU|5]Vwj5'XZ\!J\ޱ[z"EM-G7EK1=W8z989r0$'ւ
+pTk6]c(iҵJoJ˙jfg}ldfE.hu겭Nԕd01-s	(z-cWоݲs^Dٻ*BSщa$\mq$U0!R*";AS0Y#HKpO¼k:$<P01d$0wv}
&X-|<A-0֍+Y#m{OЉNV?)KRЕ$'kXar4p&4UÓL8x1FIc9rcl;QadX'nrps-B!d_i^&A2:³Fkd
<d6B
nJu,PKR!    PK    A             K   org/bouncycastle/crypto/util/PublicKeyFactory$DHPublicNumberConverter.classUmSW~.ܰ UV[, lb-
AF)}l6e6kI%qdP,4!J<ss}?߼,lA5p!&BM۱[rsՊNMz!.DީcZb!A[^a,
GX.Qf*3ѦQˆoN@=bC
SclW˯/=3]b3֪TShv%/PF3WJ"?iujiFhZ|r|{&CTw]yν!Nskt+{gSǸ]m7 P]+Ϟs'I/	l5{u<ðt:[kJ:{ݕӭ(t6"R:c9qq]8pUkjeSGYrLl։
ϮپG̰k"RNOϪ6K>yGXaYtA?(ÒW6WoDP+5oO/艌s`20 iqC0D %bVFs2F)}&#	I	nJ/$|&p /A2$rK	Hm;.akRRB$d"UnY|.(R%B98bjP0z`>p{"n # :(_YaW#B2Wx-#="BcKRZZ9c0H}=_o[]&GJ6~ԥ}L>JTJLV6oD2i$48q#xia	h-8+䀐Cm`xY*A6GcPK|&C  +	  PK    A             @   org/bouncycastle/crypto/util/PublicKeyFactory$DSAConverter.classU[OA.]Xr]ZԐ]6[B*LK*
mm993~0]o0
wANn4l=0xhJ"n:jjzysMV3CXiC7#C5=깪[kX&CSJʙZ^S7+chb7nj֑LH})fms0TkaZ"ZAi`%Ou	qbk)YթOl-rV*.ZvV!GCyP1<o[sEhDW%:`62k2GG;GG'GG7GCG}R+fTDY5R 񿖕re$m_*"nr\YZ5S^Ho!Ldjus)z+|ADG|WDF	x @BcЌ0ńx0%a sॄA(f^IBX0%0#a[я1\}! MSciqtZ%\U;QʳsᵢCtx)e*~i]z|(?-}?R9ɭ0Kr~o=A#.СW>. 1l]ac9hC:')vl"(b!~%!G3lPK\>%    PK    A             A   org/bouncycastle/crypto/util/PublicKeyFactory$DSTUConverter.classVwUM5$H`.PLBWiA
"N!$2TR~h{9gA3MӢw}w
?BB6laJpjK(򅏵Eڒݺ[mjJH(9w$44	%Q-jIݰ$єnil'Qv6S5L&14S7bCG#q=R}Fbp%M:pfibn2Jc2u;CGХk񨣵ϑbiݘmmCu>	ܨ	-]CY)G6$4xl[(zj51կ'smғl\5bp<xЌa#ȖGNkp=PSv=6,-f?LLDMYqͯFpGɴ~Rg<d>A-7/9~fY.K\H.ݺ, 1grvf
92=7;<
i{$
'iD̨Gw:	U7\˲:93ujiKgUԈ->L>~
]֛U	}sڹ9Z"k5"]YRcWhfȭe6
FHiKK	lS`OVN^`@vF&fw	-p. no}zV}=
l%kؗHkܞc7MzB16ȿK]zJT-\oZT GuZ놌${qu
LW9xQrX^@Gr1w&yM;NK8S+8G[=(Lesa˽?[{XA)؀2ldbPp)X)
@A1*ܯ6M8`5Њ
qL-x@:g郬vBZ<UA%Fx.Qi18%c/20e㼌pC\F'c3<&8sx	=x9 c 	A</csYBo~죐ߗaP\MmT:h3b	UyZ?
8,5VHNė?6$͓\43S?O&QEi
< wx5Yh/Oa< _^OWL{^FM@8.rL@G&i]{1P4^cxë,~["6
@eRo>OgL|k+XF-ĕIh䐋34,W@ڮ>t
T^|
QI:f^y\vT%Z_ld;Y;~꫚W_uECơ̟|l2
[(tɲ&WQ[@n;";;_\t>|N>>H#VQPKI3    PK    A             ?   org/bouncycastle/crypto/util/PublicKeyFactory$ECConverter.classV[sFZGQ @	6!A8N	8J1ȊD\y^OMLg;P[:1Nv|=gϞݿ~!$;{>(^^Gzig9byɶ5"os3j&=Og}9oҤw=uvttE@h_7Seo˚Du0&5mk9T@?o_7+:45YL-jWRI44ϴIjjfa:NՌmyNzrthҪi뮕N^^]rˎQ1MU/9Q58"0Uɱ)e 60a*X~Fͦo0v5乸Ueߩ>eeWpF\oNty3Fg:25r;}mx"u"SnAeLSUĮĖ>֎V6(Wu^fuE_N5Eq[eK!8L0@p@!8Jp8	&$x$)!	"#^z'xGp|!ӎ%8wVPF
|hLw6jiׯl1[Xj?umSnΐzEN*?;/nGwNݝuwm]|Z-zOm{
JM,	"dB7cA.2`F~у	WCFF/ޗя|lN>bwoxJ}	1ܑ+++awX=.	瑓p:K4|gXp\{Z'ӎ+gY^*U"Սz6/BNtd毀qoXuCL*6X#_)iA%xa6<<MxZpZV	`lΩbE*b
Q"b$5EƂ?
B<[CY	Tq\7a=ET#_X s).d}BjZhJߘbg&!>g8D=G@%8C!L0Ipa ~bH
_+;&i|! WPK
÷    PK    A             D   org/bouncycastle/crypto/util/PublicKeyFactory$Ed25519Converter.classR]KA=ֺ}<}0 PRA>$ƶ;kЏ'ЏB3p/3sΙs+"CslփC\ضT*e2S54N>ŵ
_Uڡ-THnM
R|b3r7~6?){<?d=YRoٲJ<2&pڨ^IKS@̀a`!:걢n~Pn3BJ
Ə[te_~-UxM-h!C	Qc)71Ihٻ\WeG(%C-X!AijVrl51,YPzA|m	3ML?hLBK%:Q}l[,Q#0 ]}PKQ    PK    A             B   org/bouncycastle/crypto/util/PublicKeyFactory$Ed448Converter.classRJ1Z~yBZXQZTDAAO6ʺ+GSEēV
8$399y}{z`c!ɞ1tgJ;:'6k^-bH
ǑJ-\a*Óz٭92:ÚTyٯ{N;AtZ߭z[ozXs'eO8D#Ba3Fjnd@;˗zT30`1kd3GSoCogpt)nwWBp/Jm]QÃ/XХCB&6aaD
C&1/ɐdPtR>̟yRti('YhnoOg$ϗ1ؽƤT6@Kh%JQIXk{PK8rS    PK    A             D   org/bouncycastle/crypto/util/PublicKeyFactory$ElGamalConverter.classTmOP~. E tE!:$
HHHxW.kI!KQe3?n˄Цsz/ +0f:7,
6Rv46C71#x^庐-sGHpA-W728,aruY4B羓S		DNx:5q,:$@o8(dτ?Z9q
+~.ܾ!aeYh-!^1,V	!j]Bxkus]mk}i1C/u
T
4=
z<TUЧ_Gñϕsej(0C-1V}[u!5j6;Z5bZ3)Tg+;=kF͚͝Wv2$J%R#yb<z7/
LCS:%y g㹆vLKdFCb*b*FKW1%cXV19OP󒼒d̴{L_qEHwf86}AˉE'ə|)BJs>]})ߠD;Kx[xKo~ch=rH	W=Z(awebgBV泏x2Ui$Ƒ8>FTLHqPKw    PK    A             J   org/bouncycastle/crypto/util/PublicKeyFactory$GOST3410_2001Converter.classVWE
$Y
HVR/K|R@-.!llNs>W}⩾;
)dC{tΝ7g Q#itC$Yd]˿"DQnQ,3d^ʣ-YN)us84780Mmlږz(jIv,̠:YO/1IIN[%Q(-:	;pLl#m_ahq`'|~FA0D =^2lSSkexj[nz~~)(.maOxͲp:¤z\Y5oݨ8Y}0䋄aYcXrQeYFLoX( "kFq=ۡ>#Ca3 `2񨅧o8*u6zW@Ĵ[6,qXǆ[/mӷl}aWmC3,y\N/p`դ-ul0#} $Y8qh9xǻq8Guaq.3ᧄ[4Vm1N{7~g-ڒЃa'G}o Fkbл+M
&OXum]8١Kck=!6aB 7 C[k'*2-ڟ-<l"VS"]R\¸6\&H
*N
&I)QƧ
zqS((gRܒbV/#@m)`A;
XT0/Q+ӭjOtjq7e||xX=Bv-7
EuNa;Xk9Ĉ*mܟƷOM.Eu.]d}4O_I\\|S_;Sh2>ڦm,MylI4$%D+_I5Z"jJ2TCRI߫?6-RNದj`L/H#:GS忑}AL'vc$[فy"zC K=;}PK*  ^  PK    A             J   org/bouncycastle/crypto/util/PublicKeyFactory$GOST3410_2012Converter.classVWGB&lXVZ$ ,	J(
PV7PsNO}ChsO;Iݹ3~swg<~
`!$t&7%ۓM%t-RSi{Wt,!]q.-nr״pjp%=J7*iȽ	踦^ :YM/J2Uq7C46-^s/Fs3V7<ӱw#4˞n&mGEiqU^8g1J){+~BH*-ϴ7u,-n:wM]3-7?~NnenMJ^Q]nP[VmT
Y\vJϥ&ak&w%ic,h{bFt;Lo*"ka*#j'1#CW^s$񨇧m8
5yOĴSMqMO[+gZڶڌvS<t=QoӬ&
h{Шp֭z]],vAw=xI'{JqWP	|; Qw1exI0b4$[8F+qm"ܘ6@jqBhkdY2=sS@'2L~!!Յ%&Ϫf{*)MܞlkpuZeEڱ.-ՖF)F䥷B7nZm}>n١U7(WKz%>lx϶ɛ
ࢂ.t*F@>Vp
d\R=B$pYAbuRO)P0aFA\QXDW⚌>MK!D^E!nHaAddaY~1e\uX1j)O?V%gܝrYDDnܻo,f'Do(ӉA$x&;+m0>KC}_}5Xs5HRj(fO0jP
>Bah;Ȇ`6}=[w<VN
߃u_΄bj054&!<1ί*l1Ƣ8*cТPb;˾]TzOPRYYV*O8f)^}C^B!i)~A_Ab}3Hq&q7%A-ܯ+aqdP8<H,wPK  b  PK    A             @   org/bouncycastle/crypto/util/PublicKeyFactory$RSAConverter.classS]oA=S([kRVv@R5ARRm$&lG
dw 5Q;`P̝_gܹ vQdǞSPU*G$muC)n{/Tm_jNഅ=W(ϗ~
+݁넪%"|pC^#1C^6gߪ|Ge|Ѵp̟U^;HN7.A+쉀1_,9*-PB10d40o2pÊ}1g^*hDG{)k{	ܵN/VIa~wU<G#pXy,1tzk+6]0NJf,ıbaV+Xն5-YẉnjŦE20Qw[U)EPi9a(:\S=bĄHw?ȱS|h$Nvߢci]9ߐ~˟`Sd?
4LB7xZgsȍ\#,Cw	ڝPK9"    PK    A             Q   org/bouncycastle/crypto/util/PublicKeyFactory$SubjectPublicKeyInfoConverter.classQJA=k֪eOA=h`BM쬸OQRa30{3wyx}Aٺ'(^"W	ףx~'#،k"-
$
o>@
7CC&&t8r_J5c?YCN}̵BҾe*!	1⬳+ł+3
Flؐi
EMgt]֟OS'"z%3cWFāA.ՕY9e,(&=w,֑r7fMV"pszo%-"2Y3phX)>PKzL    PK    A             C   org/bouncycastle/crypto/util/PublicKeyFactory$X25519Converter.classRJ1vK|UI+-X ҧtf[\QbҊH!$sޟ_HH=[
Dir!sl YIf5C0p`q4m7,NM׿z@o
bOz?jkXLq}:~9Gp8Yϊ}]`Ժο4
F4рJ@=hL9zWi/kbbvwK+=Qkv#+,@ D!H`B(&u0N,;6wX_ߏ%Nur5&WDpzDw~<%_yյ'L10q%%dRL3]9g$(*=1ڡ PK#א    PK    A             A   org/bouncycastle/crypto/util/PublicKeyFactory$X448Converter.classRJA=ֺZ]xaVFPB	A^$ʶ+;CՕQPь!4̜sfΜ}xy`b ]$ΖUZOgͅ|`ʃfũ٧<<g>Wikvh38~<P ALs/q7b39G9bv!)ƸhVvyzEmq_^LM54hF4j	li@;
	@򻴟Tg-FVYgZ+<ү&?e ʐ*)QcJIL$Apu_t\:?Jx|J$Ԑ'(grFdHOaݟȞxEz}sm>*LJI`)b
Q2t$:OPKDO    PK    A             3   org/bouncycastle/crypto/util/PublicKeyFactory.classXiX=#c$U'l,V`bc P7 u4M6mtItܽM6}}~w$Frߙλۼw+ :o>Շʦ%T55ۭ&tCHX;?ӛmmDܴt{*ca듺fu#L$t58
Zj
=vɘH4#&!QͲ5+-Zڬ=#qKӒd!r&LrB(XZ&0LGsBsM4DR$"JdE,KʸFBP5M-i6ښMqxȉB+l!M
	K$;°8{u8h=6k綠v&;(>G#hd|(%#4͋<vЈ qǵ<VHHogpx{RKv	N"㪖uӐp&%Z6Պg|\BuEiMP!sV2驃"Eo_zʡ>cI$j5:ɠL΍+Wr*WV<4afuVi;D"сpnbpui>#a9M$W6dI֏RRٔm,3㌆,3]}ψҧ[95CCz*[U2"t(![xgPk(jH8
ǇP%Q%޺B<,*sPmӚz7ѧ]ճX$k$G
8egeJn'q)w<rȥ<2use`wNsb&~Y0$a]_[fN.=ו9`Djh1M
z{<*u5cΣiinb²CűJSK%xcek8\>N2$YF2h.c2˸N;e%ceDO-G^2nO~}2nq@FK..oEmDyS@V,~-_M*8I67PVK] )L"$5N;J՜ƽj^IQ{_̿*ZrIصL~1+V_nJEt[xvxmQ_d

jQaC=ågr'0`*MW3\0%
6b
*1W*hĭ

ǳ<QP2ܡ`TPytBcq'n?`xOK^8^"{^x:ax9+^凅3̏4^p_ 73D Fr&w3'C-xk O[ 9>4I800Ð`H2` &R8YNK1cK+PUv5z%e~vyX~MXek,Մ)}A1'D:eiU:C爘E\v>jΨfIC-?hLMKDKZBrSèbxj<rҙ.~UşDVzyj}csBQ˴k5
T8Υ|d=70C\=.30<3[y1 Y4<>]/,1y|\k9Y7QȔ\@
>r9|y:(QO,enLgq{A9"9&ǧJvSܜ7EoP[Bc.Pŝ"w]Y0C,}܃P}}؃h&s?uqgH13bﹸd3<$VjT~.|>߀˟oPw"({p
\
.Dˢ?2
\Eω\PK    PK    A             1   org/bouncycastle/crypto/util/RadixConverter.classuTSgm\Pd1 h/ ,*bh J/&nt>}d;Ë\N3}Kg8|(TM&;we<q>lt&\wqa"vB$`Dr6ͬ8[љo0k|A.8h=:t29=w<ujt*=7>6ʡjYZԋNgjvX|F/7&Scs鹙IMMgGRb6yQ]Tcyչ;b llUM]3r0VKn5Mk:YڔW
Kc1j%a޴mRE;?jemͰrĕӝ}H=jU{MTs+ua[_3J;oߴPmT梞u(7%Rdߴ܌j޼A|tġ.bdeclqرc1%Õ*2ݯYf>)_ނ}CPԳvPr-YzQXI`)8{3"65O8'ܟEBHx[;ޕE%*J$j:ϾO;Er<f DQ+yy	#!YHG5'`_
w5}j]BF#e21؁Od41 EF^{˨ 
Dc:]؏Vb21$}уQ-8*Ac~  1H0g0`ҏi }8A	#L1H3 82epwS>OϰјQ/8TǦ2{iB-LSn2)&ZD5Z{KZY\ı&[F 5:hx7pހ*2
\
ТVh븺
; Q26/XGE+,Z@4{/QH"s]kA!ά#|_}=
̗3+Y/oo25X
߳+q^0d]_v_a7.(,]n-ԇe>\Yܸw3U {g=K2grm-O)rTN0?Mz^EEdG\g2.)4"K^fHa(m|]X7A(8J"]^zW$ta'&2UܒW=?|!He4C0(!.aG~9"O
e XoҴ92Q~ٯ<uaֻhm݌=x//D{Jl6UcyowLvnwң!>Yyoyv<p=)M ym4K@PK:Ĝq  .	  PK    A             ,   org/bouncycastle/crypto/util/SSHBuffer.classTKOWgSav3M[jZ&E`&3xU]vHR6]	J*=zl+	νs?uQѯ"
]ś*.3HtA/`SE` PȭT[TZN
][Kg6-տ%,7bskt')~Ʋ-op@@lQ:Sr{[w
B-ש-R5[#FY3(]afF,tlreժY1nY3moJ{c3ĺN0(T5.Z8T3*Vin֊wjVA]xi;ʶ^6<ChUt
fxvF-:MW2^̖ܽdUͮ-'^qS
5ϥ.iJviXV9}~hmMkZihAƎU.
$$-o+xJ궺`AK4wv3(.Da01(Q@"Hig4!0(F*>&A\\tq1lp@+25(6Ū	|J7P#B2$tNgqFz|f)nJsɱGH%ƓS!~(ǧeA~<pUÐN)ં	e?
^1N""P|_gn+JD2cFvggbߞcQϳ9	l?֪oN"5#>Ш}
\ PԃxNȧ%y%uGuЩBAlP}yBJ	swRw';AHw@8/%S67E<pi%^MsRBriN$|\0S\ȅ$-%-
-SsA9j\XS5Gj*"˪a?_h$B'`XF :jDԻxo&}6wz'g+qe]8'gbg5#|֞i`CCD 6ONPKzV=    PK    A             -   org/bouncycastle/crypto/util/SSHBuilder.class}RSPBS[6QAT@Ap8pJL	8'ʌGf/	!~{>1<Kgr}#@LgV8П^r>eT6MU(,t
C뵚VtXJ%Uk[M5,ֶZgyfچznٻ^eU0dMRVs5340"ǌ^dzԆVլQU^mC]VVR*j5fjު2K3Tٺa83yRmT4X3ӌaf5}GҚ6mWu."*7*K%tHpABDBTB`M\1Jҧ	{7
9q%j[Zԉ,#+2!Ȑ&>12z	ϣv}܄pSsP)C#Í077QCHNIpWy5nnqs;ˠwg=C.y{zx)(E@DŔ.ƿclpN91O(0}c\9	'i^
O3F\37'GZG|S~\Cry]L!~;:̺C ߔ**ӭLKAgCw5p7;
J$c#,O~ԕ>%>c0(MbLL~ADZ'Q>rm/PKwY    PK    A             3   org/bouncycastle/crypto/util/SSHNamedCurves$1.classrPZv*CH8JE+BfFS4l:1:C9
iGif5kg_ f\(pIK?hZs=WV4L[n۳w4>nW݆߰ <7;f.7|vu8v:f)ң޾j4#͕j4*+=^ivz4uVsrx:~aalA?˞Ͳ6N:^:A<'H
^Si#/#"F.))PQ<QE188nq[b[[ƿq5XJ]k]]>ɞڵ:(W$H>cbcqg4gE
Xe<fk'
iKx@&35DÑ9~k/n:=ߒ}E%[/ccf.tb!^)xL*LTʦBQ6,`1#NB'=陠f;PK؂/  M  PK    A             3   org/bouncycastle/crypto/util/SSHNamedCurves$2.classRPm
9"CE
Z~ZhEAqtViɔҚvKntx µ\Hcؙ,^7		ӄ;{,a 4A#dYB',
"ᡀ23Fa5ܲި[۵M=cH]aK&0rB]J U-cvf:k󬠩xVI5?jZ63@sZڋnncmSvתm}qۧܩt}HG47t.1kI;e,A>̍a48M<9_L↊IU$=ǳ{R.̜W=~NWf{)<Jx*w6bZmaeve8<!5jMnQmeȗ$TY~}J,zҖw-etX
za`D CՃ!	*ypA1=cRRMRE)}R<$_JēRBR=ue)8D\ۜK*Z2}ƳCO'3yBEŲEOU(G^+X{7- PKgvGb  k  PK    A             3   org/bouncycastle/crypto/util/SSHNamedCurves$3.classRMo@}uҖRZJ|TpJVTJ
" ng8^W
_K)g~?el@@݂-ώ̾}3}>Jؾ`tf@r!;dD0пܐMWT}n\̮9`XP9ٔH\9dx01CFҞ<P0y ̓
Fz}R</|Z"'c60P(ݏ ճcMn줘Piՠkhj8!aa(}q57>V!_*x"x|+R쿧1X䉧lHA))/R)03H0pـ+q9\30:Xֱ:.b52EV"s!my}]/":B
>--A4lWq%)+ēG0H
u򞐟uPjWߣ>aS;Bwv*!*y%qTFEb\HbVb
PK31    PK    A             3   org/bouncycastle/crypto/util/SSHNamedCurves$4.classRn@=L8	myG)ͣ	)	#ؠ3$n|
_
5\G[E3w=Νǧ ϐ,!ef3+TKMXBZ%@*>AW&kVvž0S;`Tl#FC76sHƢ#{3:0'Ǳ1ǖ=`еƖ#
5٭=JKUK[Rʔ#ot+o6C]SGF8:Gc#ˑc0S-jFߦ6ǯ ǺK10Qs[+N='O#	#cWt⪎3,Vtp]9jX

!r(Dp3(FPJh"^tk9^@H5zutDD5c*aݟ#Bi=>*;d ;Ikؘ~`;eRō|ۻ8=p9Xu"jOPKqYB
    PK    A             1   org/bouncycastle/crypto/util/SSHNamedCurves.classUmsF~D g+2ڒByiJmEq48$ ^d)#ɔ
3mf:kT83D޳{ޜ \'{ 5g6l
z"%muMP*7MG&''	l6]`P+|ê,JY
'zRR_-/jI)`'#q|rK7SWן[fef`7hv/sI׵kRIRuCvy׫n1L
KSo+Ff9myQ)kDfꛢj__*-vڛ0yD<p@Y~4]j	#	WC$T__V,}񉦳h|!n6	~A!O>e40g2|pNP%vf)ie"J흍{wy@rq<x[&)òW8z7AitHlY]\ܥ`>h=tLMx>1Hv$ѐ'HjF4TjXÄ>lf
(h`pRSB@Ѡ
}ѐ·cV4dPp74XHc%!X▊b+*Yȡ"e !q!&Ѕw};
=ZZqkp/v&S〣AadaQѮ=M6k/{}׾4T93 5X@|iGۧ)Dlg~/#x_GE!kd#۶##܁ep=Q-G-(bHR2˷g7XNOE~	Sq!I6O-|1NiObm:i?Kv[I"g7ѪPKòĖ  	  PK    A             1   org/bouncycastle/crypto/util/ScryptConfig$1.classA
0Dk5U{nEAqB\x4~I^ͅPb`3	`	h]Ic	+ZYuUHek'ORzԖ@`HX;jLM[:	cd1H0JS&PKux'      PK    A             7   org/bouncycastle/crypto/util/ScryptConfig$Builder.classSO`~PV!hAЭ0ru8co]).m'?`$ѻ~e X@?CP| [axNPa6y
ԗ~uK]S+**Wemu
7M+g+xY,'Uw}sY}6M-M'6.u{nesi`-/z޴{KF}2#zoyȵt38lFފWNagl;P4.6K-_6nnyv0tD;aY#2n1/GE٫Kzm2NVc1
!44bL>$ҸNa3BbV9((}9=`/^P
ٴyVPuyZ!n-|뮅ibMO'!+ ++Zh''y$(kеLR^%
ca|+Noc^lCӦXBG$3HOK2&c@q -~IA V -J1X\3[P.'5>C>AJ\ eh6C&-(}W$(6uʵnƵIgx	zTPK  
  PK    A             /   org/bouncycastle/crypto/util/ScryptConfig.classS]OA=K׭
Z_](FT&v.ٙ>oEc2][Rdϝ瞽wnf
@B!XB=a`q)sNrLV0I{!RmWc9is_Jj:꭮%o)|uV
}ϕv,vW	ޮ=|Va(3AnԹ99}v+6mjGzۮ{WH~UT%v$_geʣAd c`@e։q͗ΟU6YF87
:~3yg8I[HL\Ă1\uI`7R[	p9kjZ41{	$a[_<\bQ;gM K=Ut?1Ѝa|ۉ'؇K_Cj%(>a#a_WD39R.
dk4#X@{/g:Stgۣ2g1&PKb^    PK    A             >   org/bouncycastle/crypto/util/SubjectPublicKeyInfoFactory.classX	X\/3<^LL"YTB 0@$A`F&iaa<4XjqMk7-Fmvb5	Wsss}<ԉk,%,__m\sﶪ=\/7XT1ƣ&9mN_y-pk625x'}CXæ!c`HE!#L=NYEDYJ$CfP_,Xn5Ãѕ0vDDVfBlٻ7{|KBWPTIKKhPH揇N"4zTfۯv8mFx(6Y4o~i-袉;M=AE\qj4̾V<"Es}]Muomuu
ytAoO-[s5J6[q%kkVn*%-Tbd76גhv 5͛
z(ًI`jzy @jj{k5
,ܧ]ym@H4F\`%iwN>@+e4M='h/Y!3na[7ׇ̪'W,ne	=dDѫxqWCZҌ^-:k-hΚMEv=0m(K3wvb1D4NԔfG`NnC)n^ɵoE:b_ CPhIe23W7ziF"j4iKa73sfP\L/27ӈrAit{5V$-?q*zA7[V2]&߷#)]g}^mՐW*fYc>5;!g=?.eꌚ7QS46>|.6ʬ}Y:Cm녑V
=bva=D2¶<	#4xXKޝ3JZQ]FXJYxDO^^}]Kd@`K5E1lF-|Ӥ湉F"۱N=@RM#.*]-}RM	],J4I4Kl@bą->-~$KI\$qDDD.K$vJ$%^'KRn=x%z%.$$Ba	:緟vchd>gg()ozi^{`3,._ӞC<[X$ڲ*11kZGj\flfS2:Lrk<*([IT[>D[K	ݶ2˒|n}Ά4)Wd"ڛ%oYolϬ7M8c`}&7l!ݙֶ#CgVMl6V˟}S\3p͓pMTkNU5gȰR1BE*b(N4GBHsnxRWrV2b8Uq*cp2|PŹKax-?ļ8SWP1䆇a8b|K)7c31<n	co3wns<u-x9q|O/+Ŀ\ o(/\*Vp
^dk[\_1;777?a܂1dC5
no6|Uw?Rp'WbTV\M?1Y3eKT|I|N\˳K
Q]ߡ
vsbMN
h#P 6|1m]jJb\)%
I/T<;FPYhu1\<*\GjJ,X?.:Ϊgq
VCϪXqܜJ;7%J
]dp;;*CZ]/<"J*ơ<[59S3*GEc.o1\8G:8(	yf
rAYCQ>
ר8XAH8
J2EŸx'1o.O6)Db`K
=s21WʚꁠGI3yMEaɭ#(lnޔ8jpCrTÍtJzWгXd53%:yQĲ	JOr]igi3Lcٌq64b3֏3n16vqZqo1-Bzͣ[dU'
tV[o}li'9\&(	FU
JJ_J.H욄)qHrm')eei;IdlB
&4f1`$@I8O`_
VxsFq_ /8iz\I((\%cIŲepK\7đ/p6(<2;r1$)QACaw1 rY ,ie]PKv(V
    PK
      A                org/bouncycastle/i18n/PK    A             '   org/bouncycastle/i18n/ErrorBundle.class]OA߁.-|XA&^(^`h!A/̲%fwȿkg"5&M̜3ϼd <SIwz{mc}}xi5;'r܀r?Y+RQvtZׅ/VY*Y;>[G"}ϗSqD}xa9\KtuyJ5Ng(z~<BaV ]n:^&xɃK:r@Uт4jHkhᶆ;dqJKtz!_*78>^)3Fm|wֵ$?Nϸ-[^^píq]Ǻn	}L44Ҙ}UXRa%C<
HUTx̐:ev=HKc
)7Ot:OOs
D#9=3֛TzfR
P4"tiQ-AN +6IDو^+q+C6Ogh6[HP6<ICNUSw'զhUlz6i	PK $  4  PK    A             (   org/bouncycastle/i18n/LocaleString.classJ1OiU[UQkApTHwYj:
CʘTO.| JLV,*&&`}ƙ< xTֹzyulVέc3a_@V;v$`1|{qOC<)N(}j]n5[buD	DDڄI4(վg*J>&s%h?{R'6u/rïʜz%ȗeA!C>&-X(Zǔ:CѢXaf%VY
H	>J@Q5j(`1VZcDt>KH	X.}̍ⓘz"R'U򄙇;PKac    PK    A             .   org/bouncycastle/i18n/LocalizedException.classRN@=#`V𭀒&42֚ښ*U~e-F0d:w;ɼi.CL~S0
wJq}cCuP4 Z"X\mh.<ӱ!{[g9:YB37m-LFVkfh|eI$%q]熟ZPI~书mTK'YGߙ<L`QBLPTcJ2T82#H*H aJA3
FM`so^X1%г!ÊzNZ:-!B8*W^{BJ+@:ەI=[Zhc!էB7+?bKG0=^PKp.#{    PK    A             >   org/bouncycastle/i18n/LocalizedMessage$FilteredArguments.classT]Se~d&˦@V$'XZE0M%%fLvLxEg*38(Sozdz
Ð=<yǿOxXCuMҙdw2,Xm9=d]W>SE/'skբ9]T.ZTJ7i0KU:cmA-˔ Us0?@j@ׁ
%TJE͛uM/31f3tk㪩EV$aFTkՆ^\/*YQڕI=y1Aڗj)R&,&O86Wk6\(c
a%˺y$zdtNB8+Yma%7RԾ3/$8axDH"D8'⼈".2gN -a_$궛Ξ8ZnG|F"F#i&ֆU-vl$b|1P)#IF'Ct5*wL8)]t 	\'3,'sxy	1%ɂq$$&TD*ꆩRi|䴮TE1`ޤ%*VQqΈ"}06}6}fI80',NY|=[*|HR%ѹ1o AI2ލ&rxX|2Xl	Y~͹-P|&~B'XXΓz+m@0"eeA+GaKHm+<_q>&z1<tgi>{aSMhfyi\uRzd,
ªH@e3aK~x6<:):m	_)bm,vPG
V!䡗&u{|D'9i%*{K|iF$b}!їcxgAil^=t>w`p¯ky	;9oHćbyK; <m<Gd'* PK9    PK    A             ,   org/bouncycastle/i18n/LocalizedMessage.classW{xWM3iҮ4%B[ 
I 
Lv'fv;ےZZ[AE[[YA
6TЊZol	_{޿{ι3ϼ8?KH@B$,HX,a%%,pFBPܔi[lM\WZMhYTx:FV&`V˥ٸO4ҊA=RSy)qKXvuK`.ɤX%2rIh"w
I=i!`~0(0Զwlճ}k붶έw	wvoܶ.Ykz5r0vTQS>м7;RNY*D;#Xj&	g2ahY]@Z, ̵jdUZYyBE6`OrHۓ50Un$kh[)*	ڴ~52,v. qCi%,-J@N:r5Zẙ$d}(cPd_fUzQj?2F2MwZ2<7;Tj{:2ݾahs>2/25:ٜf4Zδaor9ud+WKіd.G.1*jpTRv閧}9#5'WV}Z'eneCRˈ}sʎ"eKS69g@txps{/N=$#muU2ElYD6":D%":EJīEt"b"^#buu<><$u]oEy,cr!;%rVTCQ[Z͔Z.rzX/aS2%-(7nnnvuSsfj6E{{վ6(S_ C3.)_X<kQe̭М.\ܭn
\7.
) 89!e`-Ni[6WNbp\퀻_DOk:=T.I\
w
iddIwˈ2Y[p;qL9ф{YqX.&{1}2V2و7xȲ7ͼ_FoZUF/&6]ьd܎w{W
|@|G8C2^V!<cL29L>><|"ч/]cy?Mq&O0&?4'` >KLI&_ br8	Ƨ|(1?834ǘbU?t<-ӚN7żִ3TإK92;Iu-kN6-j_@x	Wbn7Vt+P=<W
s١5@>A;q	T?(ԌlX$LD.@l17'M#GF00s(CUBV)"%"N+~!yh=厞1C
lD
4oLـJ)ᴠ7EF>mFv-M8:;(<\\˦x̊}pd^Z IBX(pp-/i[['D".xC gD1ٜZZ&NW1	7VƯc^nHr6PSa^wX<gLxad
kS|=)1R.b$|*y91\oG	׫xGqqވY.ࣨFZq
BxNQED$7MAb$&^f*42+MNܴ{h@o@ŏT͟+^OiǰQӘrX/*ǰJՋk&K9$E:HTώ*^j/N&/IL{< blT̴n^L^Zbd<;\뭧!uQS]SvR˄RW\KD$hyVк+k5/&KsY*!4ж*%-{`qΜwq?St_axQU=QT^`%h
՞{Bt"JbT46kn>r"gB4rjE>7s_Qdc0oܤrQQ ?kl:>hH.,nod*,,ڻ:~#jph=UZ5K`	$iĈ~Zr PK	    PK    A             )   org/bouncycastle/i18n/MessageBundle.classn@ϦI:)-I6Jh,$.E\P|Zp\g2QF[
A\ <bGjigߞ9#?}>1	)cCSCP+ϫ'tOO#ZFqw]=,}-dXKЗ=0JHc@9b-B[%I|K
zΉepsĽyΣ')"cXkN{Li3B¬BB\v.x$P7:`>OV;1
7z]JX:R8L:u犍1]
Jb&P3anX-ױi5nnC@u鋙;P2Ҿ~Eؠj"&2/U*t:CjChe	O]ZrлC^y"q-W4[smֲCӴ1HØmY۟/'^Zr߰7PK0    PK    A             1   org/bouncycastle/i18n/MissingEntryException.classTKS`=*D1*jUDA@V|QDgU~@L:I*?8tg,+g>MK)8~sɗLx`3
df-
T{%Hamn^h]v,	',k0mF0-	Oh0<s^GX^8da*Ř	-y&-b$OZcdGs܀F|(LeFAlvF(%/r_ ʺF^xPZӴXLI64Vڒ ӉzR%'g(Hlޥ;q
e6x,tԮv@
[re[s#Nj}Z<Px5JVeqHF2zDv_Xvb)TZOvK^mOG|go[<VlU_q' `lVoHa^e27KFܟR$,Uጊ#"{Th9KD`Hql3N<-8Q%q-ƌϷn`3FqǉV(kg_a$a$w4Ezb\5_ƤXFFj*[YUzd!x:^;Wxm%vJ}pvzCbvwig6jHԾ/8`
cUb?b<ygVq3D*nq?%sj6#믐6RmyWhWq/PK{W  z  PK    A             &   org/bouncycastle/i18n/TextBundle.class]OA-K,E@/1Bx!]A+,c3diUzc ̦	a9g٧yO2/ .aB	\=|KEc%B
_^vFͭsqiɾb/"s"S\
k9fIr$P?Tr S<Yؖw"3GaבQ/,>`iv	lڇ6=2kL녞e"NHVT8pL9pL;(&T,TθS;cZ>/YW|?zqr"Oy|6\s%{\.w
weX*+:tX-c\ᶋypGu6\,`nʾKP0ɨvݷDB
Xܤ@HiPgNPv [ߠ
EٔK`-19bWljfc._"
mzYZOCxzPKջ    PK
      A                org/bouncycastle/i18n/filter/PK    A             )   org/bouncycastle/i18n/filter/Filter.class;o>F|̜"Fn3(A +,Q?'1/]?)+5A9(]?)4/29$'U?"O?
IAMa@pIQf^&#+0u123t3h PK]~      PK    A             -   org/bouncycastle/i18n/filter/HTMLFilter.classnA;ҭRROJ&F5zBWnmxSoh	|+cr mNr~g̙9G>ĠISA!iDDİY%>6=22ǒe$4odzkeBQw4֒# כc{-[ anm6U១UoTomuw߶U&0lUrsQyV1:e'
q\_)׬;b?SmYYNbTŘ+a=YZ9gCqz/4pNE
q\Lk5
Wq=&anuSvl p:vp1+OJY-bITM!RAG-!܊,Ct=}(ytsR:A6D׼-M.F'LJv@l
E#=_Y^hTy w;LSofR<L5&!`*2L^	 SI2N0öW=HMvWCw7 !x>?`a{ PK>NSC  0  PK    A             ,   org/bouncycastle/i18n/filter/SQLFilter.classn@MHCBKh)PZ@Z!rqLb9q+/
Bl&+
 3HP!|	8⠊qiTdTdUfRsdYZ`]u<'g<<j<
s<<<>VLzv77%Fw}!jnkz=vgնho
|Xw._sm0=_g4pmÙ
պ8kZ6=g{*8ขS+g-Ya?
{hh8$&i8)>,h8S8ryxTxTyxqL}ԅ~6
Lɒlv\NT]E$i4Q-o2Q3X̒40 rV~?\o'I'lH,5%aMDxWG [P8BHx [B(
ŔcB⹳K%9,Qh?Pg?eQNctqH#B+WoPKц(#    PK    A             /   org/bouncycastle/i18n/filter/TrustedInput.classmOMK@Mf65-E Tx4]Öt#?bͼa1n2OV持\0x2ER\͗ )RVE2D;Uو]5צQ2L.$O&?}, A,F	ۍ1^Hwyb.q!͘}aa=y[62B/{Adm:iڼ_'PK}#n   w  PK    A             1   org/bouncycastle/i18n/filter/UntrustedInput.classNJ@=&Xۘv.MBq%.Di:)a"D?nyro/ 0a%+TR3xЧ>]KU086e
~XYU|Q5*˳._R_*]7k-ݨvE߅3/{v<Xv3bOH>1mcRa>c7="z >=]gDt辋m8bO?
| PK2p     PK    A             4   org/bouncycastle/i18n/filter/UntrustedUrlInput.class;o>.F6̼;FtҼ⒜TLC<̜"мϼF=T5303032jd%%$'e&Xk0 ✟ʠ
 #1''lZ86U0  PKaRQ(      PK
      A                org/bouncycastle/iana/PK    A             )   org/bouncycastle/iana/AEADAlgorithm.class}mOPsAAP9O{(͹DeC⫦20M.ګ%{?Cm?66B]5s6k
eH%(6g(=CwM*uk>3j'(^"-ZTz}:ے<߻|2_g*-)JQMyrFk6mشKCE4^+;*ď?ԏ|Y8t8Zq;ZxW»q[_[εkk]u4Zus b"@Q)&(&)"SQ4Eb"AHQ))2Y"R8
c "v-c[@kqӻi2 .`f^Eguty=ɼgB3?E')cΣ%f2	2z1DG
4sg~a~2oߠs;oHЯ=zG@n}_ PKD{     PK
      A                org/bouncycastle/internal/PK
      A                org/bouncycastle/internal/asn1/PK
      A             #   org/bouncycastle/internal/asn1/bsi/PK    A             =   org/bouncycastle/internal/asn1/bsi/BSIObjectIdentifiers.classRPQ+ʾM*"TbHC	྽eFgtsZf3$ibI&N)TB
(ԪPBgjWB:F}NDBP$jI$#R# 7#ʏcqnqa	~fy۱jG\h{[xqh8ĵŨ2
Wf߶`=sko<TҴXb<Q^͇XBKX$jbk+Z.e	3gnjQ[yQNMgWOgT-ut/Oo-d7-+=iPwbVj;\!ng-ƶ
'^ضL@oi^
3lr<{Ӷe'ێg#_DfnFt-@
GC7wW~zctuD]:.z> !`a D@Hi*0\LSu4Np9`X %` .pXk: x<O )`0,dZ7_9j֎E-Gf!2d9(CfHfLfBfRfJfZUqaLMfT$#jBq;WzOf`OJ.X')jAknBBsPE^3h,PzR6F<fwǅJTսI}	yy
yyyvK+{E>xPKH  L  PK
      A             #   org/bouncycastle/internal/asn1/cms/PK    A             6   org/bouncycastle/internal/asn1/cms/CCMParameters.classT[Oa=K\RP(Z,)e,nD|GoD/>:[A fgΜI~ 	+)J8)k<g
f%Ԍ	H!Jz`B9IiPǶUt4KH-}\s+k$/eNwHf5޴/gN\lPM]+:y#X"3;ª7$\MY3v0P@!n;ئq0/c<-n&M&:uKš;3lK{d}lmݠ ]o_)%mR8P4p)pn:!┈"Έ8+✈"ZD\*@IQL=׬HT݄.F3u5򚕋y?JuF=e3{iSGKϢe4Aь:'!ȸOF#l52!h*CF}dcgA5A	0&F.aHB'%t-		݈KmTH(-Da>h"oi+GcDg
UxZP^VeK.%ud-b¤EUc%j_fHo#-c6j4ວ˸7w{~
|"fE!VkR?^,RU`;s܉jHs8Pe1n^x@#h_
V0{*xP]NȯDO E],E+Xؿ.DzPK    PK    A             =   org/bouncycastle/internal/asn1/cms/CMSObjectIdentifiers.classR@ƿpiM^#roE*"WxK@vÓ >ɌC9I?}ߞsvsv_~ BVFk2B2dh(IB螄h8	G;HhiRBEl%OIZƴLgQB !L;qҫ֩
}9L15fii	Z./}}	fʰ/K+_yFJRQꎢjtr|br,,p9*5Y\2Pbb1cҔ6S?NZظh47USBjN*R>gنbN)dl#a,WHEr'v1f[HRيKtC(H(_?R:Ö0r2ŹZ֎,on)Г^rDqPrA1Xw$oRF6.OHq
~\NBC%nnnn	Aa0NKZ0B;k<a'$K$aFxRIf	sy!NH		+UC#c_t l?rN7G?:iv)KhBB	'Gh~惘k>bk/<]<Şmo\xxbþg^P<t܃Wy]͕_p +Я+\Uվ}O6AjPKn,    PK    A             6   org/bouncycastle/internal/asn1/cms/GCMParameters.classT[Oa=Kr\RPr)X,)e,["#|7_|D/>:[AŒ&盝9sf&' Cx,L
)}k|ܯ9>$5|r
P3fZ=.@ ee;o
K@V,"qL,o=a)m97˹e'tވ>t"-7/M3yKѵ6ZO$F3Y16Rq+stCvִR:+Ƴott/
PjZZ%[ն
If:<j;$3R2msqFYDqAE".hīxS"WEuIU`3!]GsXojZ8Y
㪔jDNS	0S]%"8
Ae <2egQQF#T2B/#0 ` 
n0Imq	00!
%taaRB7n1aЃ^ܕH垄>Ne6hi?מfBZ~4cLtPkA\G,MjP
W{X*!Q
$I++$IJj	Ԑ=E4TĂ
ZԐqqoPd264+\*xlrkaֲk48s0˙V(1e)ό2Owp;Uw+TGǪxh=,W"f9A~fwe	1
w5Tu 1(sPK&    PK
      A             (   org/bouncycastle/internal/asn1/cryptlib/PK    A             G   org/bouncycastle/internal/asn1/cryptlib/CryptlibObjectIdentifiers.classQ]KA=Veeef`A(H=Af+*RH(M0ܹ3oϯ 8!G7 HZI;wxF]99Ap,d'7z]"Ӂ7GJM)CSwMѯM}BVo舚}ߵu޺2%mΝc{mk1]o|:%,GAUTu9SOu[?
XSXEP@JAQbCtIlŠb[Ak\P^ZhXq Ds<$g9Tbd2zM#'	cdg	v
 PK
^  Q  PK
      A             #   org/bouncycastle/internal/asn1/eac/PK    A             =   org/bouncycastle/internal/asn1/eac/EACObjectIdentifiers.class{S@oPByWy%MR  /ŐkmeƏel@={nf׷D2t[;2&_v:dꔩKnTP1&!MhufklxJ6lJ$/dc%j\tt20%Z5qVXYjJR7	nLjr$	JyXvI!^׺Ͱ.+Bj`7~="l4<W687R^=fOWfDmjļOި̼0ռԭasP̩G')cyK5KM-YZN>DŶSwwYfFe%={7yHW׬ǻT+>O} 0a`ƀq  L 0
 
A@B@==o9Z `	@XS
ρu`xl[@
x	lb>QZg.6Ts:"Wh~B
	
	U	:!tR!MzS/}%v+BK:Бoa5P^D~=@VP
4W`myXMڰ^n6s{f6Bhu,6`f'27~PKq  M  PK
      A             $   org/bouncycastle/internal/asn1/edec/PK    A             ?   org/bouncycastle/internal/asn1/edec/EdECObjectIdentifiers.classYK@XmֵKhEE "S&c)$QgGsA}y9w,"
:4vX6wʠYռUBĺ^ʠoٞ+p!K!:咳fm	%mtSJ8w}߈2se(|ɐ7G+a5jVjҾyz䁴ݓC>6~דW?%a%hOC?rS}TOBߕMlA;'@
݄4Ё5Љ0N LId0C%1gjoPݢ6TiJe(?FjTT]rǈV4{#nyB	ˏȑ5֦'t(
PKQ4    PK
      A             #   org/bouncycastle/internal/asn1/gnu/PK    A             =   org/bouncycastle/internal/asn1/gnu/GNUObjectIdentifiers.class	S@_ ȍ- M9QB))/m(bxߊWQftFg ~(}QJQ:}n2_~ gpAfpQgpIfA3efap'A^C,A[ܲ[o甠ʡꕠƩ:}_<6ggs1dߊ/}E%.TrRQ^q>{%۽;>|SU\ֱv~`h0
[<uRǯ
ż~i^0sRio֪n	msjY˨vo:Xѓl_oX*;zZhʈi"ob&I˰W$(	c6jZfZ煤WWy/Q~nLIДdڌG=Zʔ=Ș=[3|fôu[fZĔūZ0Tc.p	G)lY"eNu%3%ЊhC#: эA">G0b1F FI.yT0C@hyDCD0KeD0I*f1Lw+_MB#Wu9)S!""{Dv-R/OdXdH-"[ElO>
y05[+ۄ[5kߐב%'_'#EO5y!r}rF~{Eɋ&B^B9y9S/+ȟWUijϰQ!}	7PK~E    PK
      A             $   org/bouncycastle/internal/asn1/iana/PK    A             ?   org/bouncycastle/internal/asn1/iana/IANAObjectIdentifiers.classWWbXmi`m ZS@DD(nqHd ɀZmbӖs~_޽͛	39FD2F3ѕ0aTh-ct5##/:F*#zF#QFFMąѵ3FF3jUv@!EUL{n+P @4^^
z5j0aJ_/=y:u|^E*|Dm*m9-`hHƱ
kCaG
,ǌigR
s"c:Vʴ]#/H`?X_g=ئ)>7Yʡ}
b`w[8iVOGx#fc>]WPU~ճj}ုNkZê^.ꅫ9WW(Ro
5	Yv&NbG-tV5~߬-ZQl/[[fmQƆbZOP>$6Ş:c>x9yz/wqR^0q%2fgm3f45"-7&Q܂،Yk:*d(;1I,FqÛ4츷whB
-LVOOkN;Q#&MUo ܣ:cE-Qi^s F2?ef2?2?clOk$eFmeSj)ӝ̘2)T
mVhEMvˎ7
+6]@7z^ l0lmv`v=@b	q X(@8@;M4QNc4	  nnn   ^ ^^^^^^[L.Z1TYr-Up·'2)se'ӑi#[fT!sH)sXfLf-2C2{enM22en9 s2Ȍ+sHBS]7*!,N%wraeNDr~%B.tз^,Mj?hF6~)9>R߅>43U	=㕋
Z&;(=\B?%chЏgTeB?#0R!rBzBhR<_@/zzУUBVz/PKE˥  
  PK
      A             %   org/bouncycastle/internal/asn1/isara/PK    A             A   org/bouncycastle/internal/asn1/isara/IsaraObjectIdentifiers.classPJ@mkj &!E
E
6aK$~ (~
"s朙a
c<Z(<u,U>c.x~JP},w,#h~V9Agnbr]$7¿Y!epY[A(r~Ôe"Sug,etg8P`LGL=S."o83c@f
mtl6A<	*\x	Kfr,$S|AKDू<2> PK.    PK
      A             '   org/bouncycastle/internal/asn1/isismtt/PK    A             E   org/bouncycastle/internal/asn1/isismtt/ISISMTTObjectIdentifiers.classsEǟ.(
m)\ҦVJ@RQ@MW8,ˌ/7=8wshf>?n%oD@9tNg9tw8]tӻ4}Np2ǌNJPU0AX	ʌXȈA5ւeFG2
, ٦0`kZ]F*ht1BG;UVy-l<U<]i$ŚcT,sJ$M~_dvÅLK^(c˭n6ݓzhXF0nM_2:URFkѕb6Qۿ*wkMDoh~e.̠m̴z~[nmzt`.%L5#,16*'1FElIn=Id\|=Fq[D{F]B{ήR+u}D'$2pҌƨ0ZjV:ƾ@cKV}xlVhu>a4[to?[?KOT`5  J@
PE,upnOG8F)pg` 6-!9hcqZ'6Xc?4MaMa67x
.zue5^yZ:5tjCg?iWZ{293WNWPm7}v@|V;;hvY	{[Fo;5	gwaO:=Qg`Gv6,w{o܎Q$
PK!"#	.    PK
      A             #   org/bouncycastle/internal/asn1/iso/PK    A             @   org/bouncycastle/internal/asn1/iso/ISOIECObjectIdentifiers.classYo@4%q@K-eMK񒥤M*"U!8=Gc"@BL*w3_4ѱP0glᲅ+-,XJm (zk{	o]W=úTl.LsO]E`1<{B?i "h4ɳh,O?dIѸ/oЗ)UUrD ǣ'Yub*Bʂ`;Oފ`4CS9LIA.t{'gG#6xU>2%I\np`!X_Z/\?X25V4V5kpE+6k<Шililk<xT&l
`(<Q[YjJPӍOumS]TWC
J]6_V'МY{gp'p+ycw-21}	){[`PK̩  @  PK
      A             $   org/bouncycastle/internal/asn1/kisa/PK    A             ?   org/bouncycastle/internal/asn1/kisa/KISAObjectIdentifiers.classQJA}mb2Ƹ5EEfl0x:3mlafT, (~
zޫWTQoϯ *`Yh#ΝR{ɮE{iQMmLP\!\lJ`
!EI["C"et%|E~px]"JnUšD%eNɺs\AJ0ߌNy#%i;,q#Yrsc_B<	s<5QE5~*oץm_MGWy,5كu46wRDEthPЎ6cHCYð0J6CSѫEY+&bDuЪR@?R1nx	Éᓆg
{06| PKY^n  U  PK
      A             )   org/bouncycastle/internal/asn1/microsoft/PK    A             I   org/bouncycastle/internal/asn1/microsoft/MicrosoftObjectIdentifiers.classNAƿb,(*uVIo4Ahib.C6RM4|(R4M~s9Ǘo ZXuQp1ⲋ+.dUkzZv59gkԽn>fО2AJ1OgıCv@	CP&=3#:Q%c(]ibi4ky8E"onwIxL㶠/eV"{ё"NBXscg_ԉS0/V:FpxkuJ\wpͳﻓk?)?"$$s$$kSD	w{$I<$Y",O`+$ش]g6|ӎc^*$2d>y9u;yݽEl	jQ+]	|\x
|IN8iQPK!  H  PK
      A             $   org/bouncycastle/internal/asn1/misc/PK    A             <   org/bouncycastle/internal/asn1/misc/CAST5CBCParameters.classNA!ۭ|imK/E%$
W2e)!|/j"Hbxf[AT6sfΙ쏟_FFAЈe} dS=6c=%}r]ʂ:bTv9"Y
w+64{r-׍ˍ-nP)gࢢq+Uy)pv	>MQ*-VqdT=3]@`|.Vؿ̫j#Rg:Ԁwmՙt*<)L9XNJzۣp(K+g⪊^T\Wѧ↊
Fs=ᄂMiX8MQⲨъ<-ߧty Yom]f[)J^'t\ƨ膢4m::Ѯr:!#X'KsGC?&!`iif5aJ0f45>M]yefU
ţTK GdaBAiњGC,֑)5",
Q[iW&F5YG<P!~TO1OB}17Sc(c@C$M+i}XjMHCmB&qDD$xڨ_PKP    PK    A             4   org/bouncycastle/internal/asn1/misc/IDEACBCPar.classOPǿwQ
AN((:TS隥8Z.$曯(#.1QmheKv{~s~0<CXM|QS9
C	)\/mެEbqQ7
^lm[&rndrBC*QUK7jά->]uLllU
Cr60iܳ
\zkOZY}Oypsj 5S/fA^rg=اw6]Qg޳$$I"_U	I0dTzl*>(.L[h0i_0 [#c.kƞW
W&*˙a=i˩f"	!=UDT`BAnIan)bqd0212F	sW9c1{2)H@wt_z0_?3޼$`vP
Q?aݸҎ?Nk ^ҎX;#Ff#?ձ50VJiO`/$:ly'褠Ӈx~->D#$H54Hهo:DS:/[Lg~Ϙ?ApxD%]6TS9Rk><l`c<FOJ4PK7  V  PK    A             ?   org/bouncycastle/internal/asn1/misc/MiscObjectIdentifiers.class|SVz@HeT7J6q4iRPV `).Bs<{OڤM>~q9M}{(ڋtA.AnAA^A4Q$APE&*T.'h	.h.t

	P"A"t(&A7EЭntFycHKgJK:LqsJZj;]N	FC$nݪUN28#q8)pxȲ~hfꁪ;3NTA&5ztըn-E'zzz5i	y<v9ba6
::"[[=qYyeu|B\GT)Rr%e='m9:rf9zά+g֝3ɵ\Ig+ʕtJ\7WR<uu< VOˉ': ;k0
@
:'\ 1!u9d/zÅ.#ͷ"͍,E$/&Gy|ŤP$
'/Ԩ$eD1B`>3r
G&pFC
rP0tq5'#Z,)AcpI37j#É bZq*WQ1
h2ޒH߇3p,:uI҈hԧ(62\L4TVL麜FjZ
x;9\.{).|꒯9l7P=緻:SQ+WmBybhs,չ.rQNǑv.Sm,K*cnCGI6ڴm޵N;ʎ_#r={q3왋vJs1Yn
/*y̢ʞ#]ǹnJҶ,G>*\C޷%V~Ky̓v3O.ϒv96yN^	)ʖ550d.atwۦ|WUY9l+kj%IC|kݶWS<Kg͞gp8cI	4mvu6%`%n$4-3x01͍!9aDF:ZzD}dQgrE`I$/]ddD(,+ly0a̭SZ|e5Fk,Lg
;3ͱH8֥Ո'}&niTTS5#{pgc\~߈&9HhՈDPoZ仺,kKjc-PaD`"j/)϶?N.00l5*V&x41{5J]DB)_R<uD i
N%|Ӿ%tONi&f4b=CS3	9P,Z!4:=啸X>t.~#!UPqU4[PjA4G\At.t+])T/APXPfAJJ
j*h%][@)4:ďa܏wrg~tַ
,ˁJ`x X 
F`4xxlہN` {}~ p8 GWW׀ׁ77c;ww _ ___ wj'{~}>Z` 0XBT`00
Ӏ88	Fggg c8`<088%
	pIEd(|`*0
 f

T%@
 sy|R`pp9pp%p @-	}:&h>HWҏC+XJ?So~s_*J'J?Uz.WF]JW(]^Vzһe(}UkJ_W7.UL;J_TҷSSv{+}V{PzHJRҵJPҧ>*}L:nPg>tҍJw)ݡynVҭJ)ݧJ(=t?|d#M{( 6;!#-W;[	{*ۭٶÞvylwZn
[v1ۮ=!1le{ Am0]csson]2]"dcخ5-kK/1ؓ6¶CԷk$@O]v=p`G[vl5ϡ]kP;`_?4۵͖3x#.=}g]
;]_/eW~1oe/->?g-yhK؛kٛ~{8ofߛ-ؚB!f#0spj`f7?rp;m?`{g1sG<j135kwPK j1	  <  PK    A             :   org/bouncycastle/internal/asn1/misc/NetscapeCertType.classS]OA=C[,-_m_ZP 1Ino/hGmQWʃ̹9sw쏟_G1@J%yE8l5kl
}H@C,jzFf#UU#粒w472xH'⎧zw̺ҳEO+[j%]s<;I;K,/,5;{売2˥9G!|jt='(gv>U;PԋXd4"o/.<K>Sko:Fe300,17g
\Ӳg#>O_/ŌZF[&"	t!Z8k	fאM 9i,`Cn111&fp.=BN|/K,}&rU%4wCN<"~5'A|(įS!>F| GD;R!HfR'XröT4BI2'SG!.F#]O
am]KSsOMAq2O`:}n PK0sl  [  PK    A             ?   org/bouncycastle/internal/asn1/misc/NetscapeRevocationURL.classJ@ϴicZnҊ."ԟPhQp9&CIIJ7)( >8I+Y˹|Ν;_o P!C6jw3✠a"huзp}~mV$B}mDO.w$H(wqbz6~[
Lu7ut2\SoL?eΜ 'qdGot6^a=b*5YSSC)
Y,i%e
sXQj,k*(b:Aҷ) >)ȯDQt)[#l& դ(CaH"l#a%)7PK,rD  -  PK    A             6   org/bouncycastle/internal/asn1/misc/ScryptParams.classUWU$lR(`idSHi`ӢRMXu,²I
?Gꛯx$9/}_ңn ޙfܹg C*\$K\F^YM2ؚܭonX=*I>%!imͬ25
Y#j`(yeE I.{ͤJZ[TOjkSۋqz~IS1ښ]p45XWl#kUɚRL	nV1˰VGE])Щzn8*1SXB9׋+eO<VбKJyEp6ǲ؋'-[Yݴ[J$c٢J6Rcc(6KfɯwN9n?mt祼V	8WtsޞXh.p*o)K^1
j,ruw׸mÌ;ś`fƊa	UDt8-e="zE'✈"^qAɩzaG=)njuӓxEnh·շp0g<8ƙz("G8qBS\Q+s;\wMS68UG^{HO=?CY	4K8k1a3hOIy`hQEY.nH¨~κ7$cL̻%dx!Ɇ&`]i 1ːfPBq.=CCH1!2dBwBƇ!kox6Ɣw}~%Zʭ]+7Yzk[8k3+HI}h$_Cviv?P?vhuh0bhp2V>Ă|qr&t˿%+	un9G;FEP#slc$-o2lN/	4-ՋPbph	k3Dx
>C6ۈ0[/*a_䨯-<.cQ)P*QU⒓;QJm|OU^O7G&L{5]?bN5cb>^׬WuKs[]Q1Gq3?:`:Xƣ6e|ZB,.aW^q9sVp:Zg7MS'DzfPKBu  
  PK    A             ?   org/bouncycastle/internal/asn1/misc/VerisignCzagExtension.classJAƿQku۬gyuQF`E ]$]N:,۬Q=UݬPPjEs9s!iVC0{gyxNQ2pOB}&zɶp~GRأ=<߱o>ui ]f@TzzY?ߛN]4A#]{ih45d4y;z&z,jHŢHX20eDc,
:`^aW,J(g*P1S9k1RK;!r$F%Ķ
!_|PK&gD  -  PK
      A             $   org/bouncycastle/internal/asn1/nsri/PK    A             ?   org/bouncycastle/internal/asn1/nsri/NSRIObjectIdentifiers.classwU^ ,VQSd2-V--4P([L&$i+n/HTq_˟_>yy޹_Ns?!"Pt-SԬh.RRŊZEيERԮC%:u)TjE)ZhSt+]jꚗXd+nѢxc-v,s,q-lܴM|V Lځ7`]v9|7ZzYzAW[TKn
Y	2)7+Ш~S,nnOyijWd-.F=Y^,rxªbd\02Y4O)xi\RV?î1;
cvhuaήsv]u<fv4ճۭm\TE\sS=;
cv(g\Sٹ (AHJ6|eŘZd؝py7EþWhn8V
,ZQ(xܱrޏca<6a9~_Xe.<2ڛ:@7>xe?Ӣ=ǆOKAϣ#t`=@?6`ہN`v.< @C@ #@B M{"t-8&&fV`/pp;pp'pp7pp/pp?  0(8$4,<"2
*|77s]![׿6˨	V[gEQɂd(QGWr@r-vɜdZ2#JIn%7K)9$^r'%HnLIs:B&ѯ4;EsoӴog	jrlStT}he[E@Oa==٬Aaz.<йBcZ:m`
Xc]hut1%_@gփY.e}zɬ_BX?zzwY?9LPK ^  {	  PK
      A             #   org/bouncycastle/internal/asn1/ntt/PK    A             =   org/bouncycastle/internal/asn1/ntt/NTTObjectIdentifiers.classmKPeVCeϩ涞W؋JU\ź\E+zPѽW!Вvܳ`


FDҙ*AJW
,u]2}v3t}:MѩZ x؁SՍ+fĻ_|5vzb؎Fo\iƶ|lkh=,][-kg)m;׎n}r~}dS!L` .9QT#b.	!1!q!	!I!,,
Y,dEj3X#<i \y/hDOJcq ;f.c[/X< ySr@rF
CӒϲPKg|    PK
      A             #   org/bouncycastle/internal/asn1/oiw/PK    A             9   org/bouncycastle/internal/asn1/oiw/ElGamalParameter.classkOA)e
MiR[0&^BBC,Sԟ⿨R?ga&=9?~XCtf+]:B0[5eI0z-J"
q]ν:a}|;uzNN+ʕKJ&DEH0WΦ_%^SpxMf'UDYTVHQ𐳞^3ʨJ`}^^WyE(]!a)_W`zXz
\5c\ed:Z
WonX1>CWAiz^Q+yx8<'
ɒ7=|)H{>=<*arҋ߉e&fĠn
]Ѩ6c`<&26iI2ч6&1cb:nߢxmC8I#ݛd*NF&>3M,||@ѵekٔNޞ{HhE[&%2/>>@aFl
`
"&v"b(60ΐ$3t_0A8;A\H&Z}o<lbEPKXVI`    PK    A             =   org/bouncycastle/internal/asn1/oiw/OIWObjectIdentifiers.classn`W&clι辧&0$lgu)U <M< c\ulҟ )k%f$nHJIܔ%q[".J$&L.d3zQ Wg#8ҷk~ћ5yJ"]4r۶/czjM^u څҤg[il7mFϰ+vo{LΌfNWkm_ iVE`ԝvo3'ډi
ϷM]^=7(3r|`k}Кх^QީC#A"@/	%/?-[J0LEaBX%	)]hx%y@(6	['Rijng!Ng8U.WrA5+*S*W9w0}B|+_:{}=¾.wٟG+{}}~=^oPKܕ    PK
      A             +   org/bouncycastle/internal/asn1/rosstandart/PK    A             M   org/bouncycastle/internal/asn1/rosstandart/RosstandartObjectIdentifiers.classS@ʣC*PTAy$MS䥈"((
>BhC	 ⿲Qjv"v;{ϽvDGN8]FNM9p
VNW9]tSvN7:1QRUFUAZ4/֢EWMjX/Sq*p,>1#e[(ʑCvbÏ[IKzt#i{O驌QMUWcbÐ(֯o0j:Q<1X)׽hhfD)RBSŎ$?)zP#&V9
AZK[F@_ꢿZ){6VtJJuƮIv*2i&8ZfN'Kõ✒$nSaL6ҹ.'㺞a'
ǋ,?j e3[v5fO9e	t@(
D
q !`ƀ[tn*i0<c` O`x<K`X^74AoQd&iV2y7R3vf܉~RI푪J:"5$Sj^a}RQԘԸnnR}C
^rnv3}8,˅݆=ll.aM2a`;5Y2䷭
@ରYZl.['[/&	RZml\[&?KPK@O    PK
      A                org/bouncycastle/jcajce/PK    A             7   org/bouncycastle/jcajce/BCFKSLoadStoreParameter$1.classA
0_j5U{CXDE'M?RH\x %<o6{/ Kz2: kUmoF?4г4uժ쪽
]9(|,
	!Hfk{/=p8F`5]ٓ9FH#N1&FPK6      PK    A             =   org/bouncycastle/jcajce/BCFKSLoadStoreParameter$Builder.classXWW-(kH}6ljѴ*beYҰK74}i_}ϯzQ=dC d3ޙ;3w~3ww?؅_j
X1^֦.kln9
dw6i={ڙӬPwSȨ<!25+PT
onvVSdKm%3dMAIÌ1Ҕ?ٕ?iΟOvOOG6M9iJPJKg&)t&J4]@}$JY)+f<&^Nz<phhTUYKtRIzv>t2LU@-_Ps95
jEO7MyLTS#@'$Lf<0dt%I+3=n%ѮƐH7hݚ.PM`Ϩ"*j+},&(`=diȚ~TNh2	pA8Poclw}e+eyFJq8ʒZܮ6M2Nyx&f2R.`Ka$3!
<lk(&'ǭ[怛
94Ttے[.<"6,b"Dl]"jD'EyĹzJ{:»+HP)haZ/\I!R ԃ݁iênon)rwf 3=p &;WBQ)
2E{Ǉ|ZW s.68ml9Z+s!e<px9Li6y0g)R~pin>nZ3O_-t4-.⨩M
ϒ.*]PBS=gpEq_5"ϢqqWq1iQv}'y`)~.OCt[}sK<2R-4a1@ETX_CM	Y	/a	~$OND$<~	+pPB5#+qH£Jc#%Ѐ$42RLpA	Aa!azЅ1FtFFy$##ge<Eڋ=xŋE+^bkFo{I_S
gꊐ1L))J$ZfUU-QCE!FEF!46'0llN؜ 9bsBJ-6c`_m
_Ԏd6إu~
Ꝣ1;70w`wL;xgOn{/[_#u\gpMzAYN-:KH֗ul}ݘމp1UIZB\dfnv,OVN!@V؞=vuݽL]i}i?!ZNq9*<U.:uWYv+#^ceG,$G|_wk1t"G|#v1_q8_s^h
'=@kx<tk@ͻױx/񟉇CPKC9    PK    A             H   org/bouncycastle/jcajce/BCFKSLoadStoreParameter$CertChainValidator.classOjA=7]5!`XBҹ  uY603

9ORW\==3Qw@P;]yهBT9עFx_ɂHG=dB[p$Sx%tٽ}r&\r _
1ОX+.+{I:MhTZ[ͤPKO     PK    A             I   org/bouncycastle/jcajce/BCFKSLoadStoreParameter$EncryptionAlgorithm.classSQoP.: 
n*M`Ϊq@a2-i`RYIiM)KOREٳ?xn!^LIϹ~;'x," Ægg3Bt&\u<
ƛ/=>`t5=x<7~Xj4նvg7zV`ksNWa|83Tp;jgfzhd,yw3*yLx79],Mpt-3LqbU|Tv
.f'[SrfĽ1ɭ9F_fW+
$dD(
*!`,qG2Rx,#<72yռ6K츮JY[UH2Z'r\h=Q!χ<W<FsK$"cL$DI|5Fl	j)5%_B-p\xF/!,@>b? !
z+:Ċ>HG14I&\|BDarG9/Hz-PK)    PK    A             B   org/bouncycastle/jcajce/BCFKSLoadStoreParameter$MacAlgorithm.classSQoP.: 
n*faj'dYظdܕ MJY?IYf(㹥1Фsws/ /,	%	UFA.6L1:2Hz!Yhe4_|xΠFa(f`޷=k{#daF}6^ߘmw~i[MdPeHXbrnrG?jHmHm4H&cQ
egGX'ʬ^"?V@9}jۭsnOyI7I[Wem`UU84
q[Cy
	4,aYa
sOEUdQJsEa0[^.뺶JC =;8:66hw! yETAhiyc}ãKdBj ab!JMK/!M0`  I<C^"/W֗ϡ
 @%Fr *:IY![Jt$j(lIȴ}A?I稜a5X<JX?$y,J6RD"&6PK;0:2"    PK    A             H   org/bouncycastle/jcajce/BCFKSLoadStoreParameter$SignatureAlgorithm.classTkO`~[]A7D݆X/1g06?RRڤ0~'Hh4|Gbܒ=s?}`	e	1	q			I	)	i3ەVMLv[T2VDJEB{VY|[/oy{ZE@j0S+Xf*5
^ZM[)MuCx
mZs軚KMtgN+Vq~Q@ذZTkvw_!qwlՋ1&⒀ጼ]?;ki+x4ic-Yܠi&;9Gdc]ZzS<דּ+-*᪂8A I"HHUp( i㘉B-w2YIܕ19Uf9{BUgʆm.osvOdߓc85cʏq?iXe1i(16"}	&?qesDJNc<<׬#-A.a1H-f3׎D2X;oR,#ĥd;FEa^k{XZC졠5~.0㾇{l}cPȉdp%NNDDN
%NQ<r?5<E\jy7PKZ܈    PK    A             5   org/bouncycastle/jcajce/BCFKSLoadStoreParameter.classWkSF=Ê6M6/RlC+;%R8i,bDD$??'|00{thwwY w
I۱)
WT7|a5=;hhqܤ{նx &4de	(vu5\;#qg4\;cqFvfS±n7"5׸,]i8K&].Fͳ6uHƥ6br+|&jfLYiQ]wxJ ZN7i(Ӭro@Pl
zucm:V~ƺ-a͹ŊkZJca,irnh=U4(K;TeHjQ_DUo2˗p,V$t|㼎:.긤3u|ZEPO8hvÈ-vxĵ$2jTbx={$ӟ+s;:L
	0K<v/iSK! .tJ{KTrVrۮ1l6B~3k۷Z?P뢑1(`lEqw,ma@}^s
{C-zS3"/1|#aEN*ç%F4`8cRf`͠p3'0ːCwdļ4?J MEܓ~L5<H4,CiEG*
{gVu<f5iQ^ټlpߗ?؞ kx@A(YCzHI"e;DJxn4ydz^)_Ñs,Ɗ6J\k6^
G!a3iBxաO㦂^,&4賘T+ݏQ4OẂ~c\ASCg)sG	Sװ}7>yK.n"c0 p\A\PKV  H  PK    A             1   org/bouncycastle/jcajce/BCFKSStoreParameter.classS]kQ=7_k|ZVӚl)>4 	4(O5lHw+C@nZR\=gfWxɐՏ-3o<SoB5UOI\2lMW
]	H+.{>9m	7`(ώ=r}v1 ]
&vO0Z<P?|Um!WUܸ6Bu5u.[޿2"L&a0p@@Љty¾>nunHvd*od_DޮV=ZBnP-JW^?|9MswecDL6YmjC9,GnNXrQ`}.[#U0اBP)iOR	|$z'3Tg}~4qwAܣiªOQSZ)4v"yYqu0,	oлuWD3q,6ۙ_PK}4    PK    A             2   org/bouncycastle/jcajce/BCLoadStoreParameter.classTmOP~.u/
_uʫ/ 'HPӥ,mN_a"Y"~e<7#9ys9۟|'1cdzroKFWLWz+_3cyrm_i[[.Ci1W{׸U7waj^Y^qlMG\fXhGP@	\l+[[[>nU;I_v+]{~MUW
?-sQ
3+uW=U=Pۧ:EqK8;N=$\QTRЫOA?Cf#hߴ-_moOMDq"p.a\(qrSX.9	4cZe9Mxw$rݵ^6ϛIq-\Ob7ADB;&$LJc9	y	Zb:䛑K]tw%Raw%v9Coajƻywkh l~siO`%1{p!}jcXj'GtZn݁.gR@PERj
,h#j#iG?xS=@x3B8D@ٝtWߤ0P?&$Ͱ@=)BJ4Ng`hFɮFPKk  t  PK    A             3   org/bouncycastle/jcajce/CompositePrivateKey$1.classA
0_*=w"AŅ~6DX\x %<o6oޟPGʒթ2ʷ^Sd4>4mQ?FBH$6>rl8 29(9OB7Q_PK1ĕ      PK    A             9   org/bouncycastle/jcajce/CompositePrivateKey$Builder.classURA=C¢A%lUE	ef3ƅe7,H~g?XRoVQ=!\4䡻L9= Ǉf`H3MO+Y;o8}P3nX3oڦ湾3365C[宽iytШ@in9;稙r+P0Lu{r29UjcjVF&hfҡ³[::m14 S\-'3̴h!ʵlAr]<-bڹ"zAU][չ:s4\Cnzke؇ӐpUBk%4Ih*?QH[H:UytMĿt0R_H_fLǆ"n*qp1!wxǟ+Hxz9r<':j5u1ۥrU\>$:|2-^#uWDQWQ~E	3,̈x
fT1?nb܏nL	PGs᝱w -fL-pӓkٗZT"L/2E!I*|
EҪ|Rv1)|hSg.?C|fxJJ@hcz
9ľ IWv&>g+\)b6P-𴈙"'Dd
_{XR.5Y"d(~4 F~TDѽBiQ"^lX)yvĿ\;@ZjhsG3[,I-nPK{٤   	  PK    A             1   org/bouncycastle/jcajce/CompositePrivateKey.classX	xT,y# AY@ABؒt$	ԸE<Y qkPKBk.EIbZjkVo}"=7K$W3߳sc/
bLwƁZ	XK:L^<swj9봨@[.lieC;vFS*tBXsiTTJJJu"XRK;>blW\+?FwH(kmO	$P:yT@>GMКU!po"5vkjLUq5J۔+*ɔ+U]qCk/IyXS]p;{XxU(
B@p,h$ňv4c}PI+aNUj" zՔL9i5J-!VfcؚN#[hHߪNZZi,QHqdJhf]M&^#RSIC` Rj"{"qӘsp$?/zBҰ1fJ4TxGk%GHs%@\®UjL-!5bQʈ̩LD`V<7h(iN#Ђqp:S	-JjR'&kw:͉2Ц%Iz}#BlŶ:7z
,lX7KGC!:@a5$+͝+zcEX]2+qԕ:z027={R[Z8@XFgG?p+	ȝbvTX
g_9
ܦq(*a0M*`sGL&'ђ@;"{	){Bj"/xs'k|iu)EXMn%&m;](ɼ%?޵ɼh/Jk3	lTXrBRjEM)q"rG̼捃U}9>	${(I=]aKך#oj+A=CK|;ޝ=fT,\S<4BYdM:P3۬q@P'az	k%4IX'a
6J$YBV	%l	A	I.MB	;$Z	KpK%\&r	WHp]^'@ִM{|y	xkt]7{&@u/>%^I7=o^MeLw!ܨpYЫlO^Z[${,c})A[߰NVM,wrب&2d-)s%lFŐR>nJưB|eI;&8Ji)HY}Qg^q~B$Gܳ^農I/2lSyY,v8yo~{35qmtQYMrԷUfQ~)Mlo
)hËc{V&,ۮ()TJ(m*Zeh*׊Qnc@O Of]@헗aE_D/d/28JC1%-sI_"8Iܢ af*BmMeW-x{d\d6+
I*&
RLd8eEyM,|P&!>&LdfGdxa+q;?wN1%r|}R98*c18dd\3	qN2`P2h2(c	ĸS22!~o#8G+q_aU&_s";3Nę\ǝHN$yщ4>͉~^Ǐ/?do'OO0yɯ<7L?NC&?ew&/:q#b3&?wxɉ7N܄:q3^p?b?1329Nrm?8q+[|݉w;N/W!'<]x7<{L!|vE@f1UFj5$*}DOۮWQy
aE--g }4`~O5L$B4;a;[FpcgP,bq?>`BgϐX9$&z2»<'
=9qrl=0K|bYwL8;v=w Uk ;5(uXWmSwa㫷a3{CxIaeeBl՝8Y%pdi[ܘ=8do{(%X?j}tPL)ϐW{u~R(k]m_

6r^{Nw(Zy_f-K\^Q?i끱zlFC:rNcyiL3 emy;nvoF;(	wD5(V5ؼâBUyh!(jx9#l<d3=-t "s9L EBD&0uZXtSgEm',FE>(ZMg*͋Xp6Al9ek5HwhiDGV<i*8!3i6:,s
Mm̲԰h!֐3; 
Z20)S8`A-Zk
]אfytXgw.6K.s3b6T:h!S'#觥m9WIoaDQb]XycܜgDSY#άA11x(Hoݺa~.?յcW9\+)}<\S[8mQPxSz^&a^{^3fYp
@)5=4]MdŬYf9
w,5z.n6z=wn;Fal ӽFb9:Em씢ccVRM4lx+*FvU }P7]{PR5PKU  D  PK    A             2   org/bouncycastle/jcajce/CompositePublicKey$1.classA
0_*=W""WHiRWs<{/ [L
ZYjuSXVCiCJD>wmr#!$CΑMGW㶴:cd1L0JӦ&PKLL}      PK    A             8   org/bouncycastle/jcajce/CompositePublicKey$Builder.classTmSQ~ X	.ZًFi4C}hme`~̈́49YߚG5R!9s- SxǏ^p[F䢦5d~jڦ;R}WKX-nYXt̜(^ao[Zq_R[y@/_rv(R)^(;Й]5-
gv养S!R+cq;,K乕v+n5D5!XήRsݢie	wvBi
I
+Q.oǶQ),`
^r-|Δ&ghkW$UTpLAHAP0Tq،>=?Mp+`T3Θ&2IGʌ/}.ڠo3^u?Pj4޵7Z=8~(*ଊNxU9iWqqi
K+*0&}]aBI)` 8nRHq%Ӹf,5ewIx5eۢ`RIк8LKxy"F/B2Y!ɿ3>;)AZD+:R
Su-Q-,{w1zƳI~B7X%2}Z171`[
ܭ7p'谁U,|>He|}NimV!IB{@`gdg;%#efƪ葰1w,?R^|Z;3[艗3PK}<     PK    A             0   org/bouncycastle/jcajce/CompositePublicKey.classXy|wNv74
P*a$l$	pXd3$vg@VxkQR,zJZozES|ofY&~}> K
/6{ŋW
pUͯv-5㞷)^jpjoPҤk2.\!S#I%2T;л6X%`TkLnRi%	,u׵)Q	EZ9iuM',u^OX+
ٻPQ=Г X/]յl*t:EIP1vSSYS=:YKɱ튦tv 8ܓN4qKC5ݦBYEu:FiRjiIS֢
kPI:٬&8?i=ٔL"CNvhm7ԨnySdT"&7يG6*	S5sјGb1]U8y 4k$ x68d^3i#lƔ"Ն!w׫IZbptNGyO
tT]V=EDȘڢHuSմ-0dX5l
u2;02>s.qfS^65cPF1R@!iD^˂7|D
|{dUWSU5S149f[ʚnq54ȣ;<,Q3W!Xh๋,<KkGUF8);WH6Ǔ5=9^֦.8Ȅ*`ݨٙ]ԡz]R/
["/:
WS3KIb溓\M}:_AIAiMsKj>ZҸ@Mo_F1?vWk$uO56<؉(1IDXE,XKE,Tr+DJjkDqu"EԈX/bZE\"DB&گJP J`ȦGz%pp4p
z+wZ1ljq~ͬMŊzz
"dUU`vZ0&}9
Hyqj[5jbAh
.iuM'YRP/_[XEo<V:.!r<yi}cin|Gp>r6N<?K0rKrn\/
{/~|ͩZ%򔍝>ØǺ4WuWi$yN9|ooG}x,ɞ1UF3scK2Yd1%4G,$$LC/$Lg1YHPI[zx[o$t7KHo0o0w{$܀r	}*~`>Zv|0ˇmq܇;qćf[|}h'}xyv7NpNH >Zq/,C,ϳȰ8,CA|dXcq#,C'a/C!f@؇؅{Jq#>nX|Ž 1m"ib$4ɔ{V.@+(DjOP.S'P%~u(pcR/:{)!?YA:zFJa| 3X+pg,62na
eABy軙v x
C;	\gze
wCŧ"8]|6Nрp
x#A(H>q*b+Ič!<r7̶ؖ`Jg
Bc\[dN9tWBDGc\1LYn;*<~&N6AC9r5<

epTM ϫmeuJ&u"}t].oKMs-TxyPg{31p-kYqE1gWzUI@@/R9pg/	+~Ls/Kj"xzQ6M/;{
Di`)=
9ܵLɮq3*/rlO
-(&@;7!l44uЃi2{==Ћhs$>z&V/)/N{wmzջOむ#hu6¬ Ooxfj-8XDa?jYFkBi)ŉ.1BSF ~%#ۮG)2B'
S(=/L3mB`(<q!OOd^&l-_ێg<ۏ@PJio 
g'	d9I{pPKD]u	    PK    A             +   org/bouncycastle/jcajce/CompositeUtil.classVisT=R$.m6%5KcvB]7gi((U$c˥-Kwʾ
3
%37fMû#93>OG_~zzc8p?A2c8p$)~A,)9וDNSu՜g39'bTh<S|hh<#!
Tt8-ΦH9%툉xCĪFm$s㻵EA)u;fIs'52<Kzt;iXza_UZ<i܊Od^٩k_E'6I-Y))Z(悚/ёEE*(& =[M8K7u^&.XF&k79g"IDOW#ȼ|#7cSooep293sA?.l:NQR}d>sN8ry;A4yYw42tO
G7+rXBxFӔJʦSWsJT
]~hamCa<nIfIg+WJ:JT\^|ݽ*oM%(`(kFE]eSSrYS|4癨Tr<1VuS)fRe]ϤSGOFN)ᴱY4ʪx<vդbLa+WZJeEYiDLxLĴO寊̮8nR;Yo;n58#dq3wŤOwTV d X
 B%!	I1		&!$xA^t0 ³ B܆
%:JAp@#$	"%2نXk^l"*8oX"z: *KZFY).y\4Aio=_8kSh+/|˟:*up0|M^D?$,_M˙?pl8Ϻ%pϷoC?TS1Np@56/MXxe^qY]am[xe{-벀w\k.-2f
YxeXxe-|N쀅].PKu/r    PK    A             /   org/bouncycastle/jcajce/ExternalPublicKey.classUsTK^n mK=($ۚ:I,8rdr'
؅Q$9|ьvv?!(!L0I7%L62܇dKܱ$ܙ+aCz[emq
o`H8o2I(vwFzf์YK˜\ivjOXcs5$M\ö|2o4XT-[˭fwt^!=ɬ3M^afe.?8X-UNL
cXŦa#ኧipIi`LPg͒i^ACf7Tݴ5ְ洒-.rM;
	:f?pupZ6Ġ"f6m	Ϊ:r$^½$	ez.8k:~3$D+<QnvpytEe|$㊌2Xu7d|"㦌Oe|&㖌ϩEX(̝l}	L&a&f'T,?H|)+'r?8ڠ5f%\%Yfz<uÍW"/Qp*	>R!RK67SdAPrQ)TRq_⮊ULaBŴ g!P !bVN,٢XLxw O)H$+H{i ȏ
f"Ȫ9y)Ț ?)Qd]!$/<	
Oy\kDzeV!6 n6:Q(az_#"{S=O&&F0F|:K$s"׉{7OdA*{UBa`p#/$mo_9s%⣑wRrKF(
ZP,>拿c}.WT;E6w}$	.vPQkC~ݪ2PK13"    PK    A             2   org/bouncycastle/jcajce/MLDSAProxyPrivateKey.classS]oA=ti)Zm`VPA[#D4luK)_#~ԻtTI3sٛ;~q!3w-ǒTSȪm%t8+v<ri:7;B
ì}.6!&v߲-c*6/bsǬ<marp΁!r1,zjL,S=a2zfc`Em!*v܃+3$85)Uڞh~Oj-qG6NAjvwRR0`NAZf̗o1,ZŦ,ǤtV?gc9ȟl,qc7'z4c|,T,"*.c5%%$r<<5zii~{u}[*r`8O_Wǔs+StQDh_)X[ "/ TA2Q`qh*}@08IèF9
j"lM#,`['&*$.99_PK̻3    PK    A             '   org/bouncycastle/jcajce/PBKDF1Key.classRmOA~G{" 
R^  $D	_Mm+&Ř aǄ03<_ c
C1?j\Pk\dM~kSk\)'3؉΅Ҕ-"TT>=cpy"NHG`G3N5u`N*blBy_0Lv9z<K]Ro6*,>=%*kŧ\VEs_n»F	f鿚kI_kcF]61lo1&ôYJNR:GԮbUu<tQAɅI,Q
X2`axb2=nM̂Jh~%2+X$N( l_>VVV80n<3݌}AX(艂ACkn4whf&7q1DP*tPK$k  $  PK    A             5   org/bouncycastle/jcajce/PBKDF1KeyWithParameters.classQN@=
Vv5FW[5! XG(֔rD𣌷
Yy{p-^2(zi29.ב'H
tKȪ>Z^ߕ*aWKUʙ>O3{nQ7k"`(y~˸%ؼ'ؼc.FO͍#uAzG_:]y@ңkU̫T,H1Mr5js3),55j!E5jP@aXK"$NwZޝ@4lwp(
ԕle{6WW!Acp(!2F4{PK7R^  ;  PK    A             '   org/bouncycastle/jcajce/PBKDF2Key.classN0?d7BROEBĦRp2
Yx5TyVpPU$R%|x?7 a&C_n1øƥc3<5|dtCd*PԆUyR3x4[YtjNN\
?Bc(Vә6{|44)EŐ>se<O/G))DG,#HbhTp}@QY0,E g&͢-y1bht<s0`,#}0ojt'ޤ)<Rp9Z<桍<麘XnZB !K^GcKޠd)Z$n'%VK]4JUV/PRz݉Jtzw_2ԋe&,cBX8PK]Fo    PK    A             5   org/bouncycastle/jcajce/PBKDF2KeyWithParameters.classQN@=
Vv5M4&jBpAP)BƅGo,& ;Q\cPrd-sR;#O=鶐5)|.ϵ+T®x3C|ȟg8.}aEPqKb;y_ѵy$]TO͍#;
A9@:=y@ҧkU,T,H1Tu9mu홁OKMZfԐDL2TD5(XK 0l$Vؤ;-NDp+PE6L8rpYEJԇhBe#+Ye+ǐ1y8QUސcp=iPKu^  ;  PK    A             &   org/bouncycastle/jcajce/PBKDFKey.class;o>vFĲDļt}F1P~rQeAI~pjrQjwj%#B~Q~R~i^rerbqIN~VrbVr~P	;#;;3##+  PK\n   r   PK    A             '   org/bouncycastle/jcajce/PKCS12Key.class}R]OA=RŖ~@ElJ1
JZcLiX&KkifLH )9so{ (6y*3$EGl-F0ϨUGϋJn1bfBk	T<oJ7>CQv.谦0cT_82dPZ"
Kov20@Nl$-)vAt,6T[Y	-:~)#Qaf ʋ}/$ۗbV(ܒZUeilCE.Gccc*ÔWtQ{߯h:\\"!)؊(搷v
3,Rn{F^iI䉜M!kw9GO"A&~9#
@p,Q1<?wŢ{K3`i1q	\'([,a[Wpk@eddV<'Y2^}O%>E{#5M? PK|  O  PK    A             5   org/bouncycastle/jcajce/PKCS12KeyWithParameters.classN@@_~D7P4ƥ1aCB:b	FɅ&2ީ,.{9Ӥ_ ֚Zm0īFhbծ];2Ie	3?v=W00*'	LOȦȓ::|@.E>o7C8k1CzC9V}GX98_m;A
N;N)ֆ:t,H#i D
$KbjlǖְI%-P,DUT}:z+es
	Jfqԣ iެ6gt^/R!e1YlPKi  -  PK    A             2   org/bouncycastle/jcajce/PKCS12StoreParameter.classTmOP=
c
ԩAv:-pY4dܧZH	hO%#$[칵DԒD>{Ϲ瞧<ߟX1	-Aͩ/}SPu,޴k]7|GfhrY͝Gg^:=k{枺v]9N=I6OLc:-v&/2<fuI3XshbmHqںym'Fusec,;h[fbF}ھ#ƻRGw=z
R
(R0 Md?hsc7xIis8b4s6cA9AcE\{>AooRc"U@)dI@LbM&C1Y%ޤQJsV:4̓Fjg#bs,JTj!jPQ ܡUNAuR+C|b%TP$Bd),Dʿ0I`pQyL.ICI$"gf,QJq+k<}ljzVCr3
e<;*Q~`[HO^msֿt2ODBz3x"g9Gy<PKJ\    PK    A             *   org/bouncycastle/jcajce/PKIXCRLStore.classQ=O@A |ugeU*ZW
N9tqk ~m(ugl N@,jm$iA|QЫ܃3Յ*BVpbafqaOBW!vxM9,dWZ.y|U/u


&<[Als~ہUpv[yўtKpz~Ȃ[AN!7Q5ؕؗ,4 ~;oPK@     PK    A             4   org/bouncycastle/jcajce/PKIXCRLStoreSelector$1.classA
0_j5U{. x⢨(v6j	$Qj.<77`!C]
#m'&wu7JhHh%"qԧmԐIْqd=*v;wf֒B9 9~d9E,PK^S\      PK    A             :   org/bouncycastle/jcajce/PKIXCRLStoreSelector$Builder.classUYSP.K%h) ([6ER@.8OiSÄIRG:#ˌ?ܐB؇sr%ܛ;r+PѽRlXкm,-ٜ244:w1]iTJcҘMEzɗsn-֋oMܺMN`>7]<Yk5/pa2FEkhX.`-<a@{fjr^
HչTС>Est/5_,Y9];йX#SRbhmav2~g.4[s#W):%H%Om	zr.52
Yn/1^Q咻/Z=IJ\:Bbt+n3l^pm9xu,Pk画c\3u}QStd![.ETMd4@0ìsBP!Rqm#Д.ӷUZӦ80EC :tԒ?Ow{v$5OqJ	քXU	BT_FOcI?IDREp:a0O
C仌SdDwx'vMdoV)f3jA+ftYG#8*ڱUW˰*pj8UoTM<r,ǽPKo0  D  PK    A             @   org/bouncycastle/jcajce/PKIXCRLStoreSelector$SelectorClone.classT[OQU*E@"Kb!,ǲPvMO⋉/ԙR
4Їf|s;' &,K^
4{.*Y
mUמU:ȱB%g;PD#CN*jV:9ֱrKE/<\lmMegȹ

@ӁA1om%=t:{֟嶘A6[OЉbo<uq}2*V,-Z
c4;'ГLwGٵ|U^7y/;q?z%0|9] 0MmY
e3}zyr\5qx1g^%[H[Bud0+шhFܔh-8nKp]4]!{)}אdL
faH32	4=G}EZуly9o6 q05,H\Ix:W<{Lhs,Fxr*<ˉ,DXD
ʹJI*M?!/GǎƦLT͈cOd좌O`PK.;g    PK    A             2   org/bouncycastle/jcajce/PKIXCRLStoreSelector.classWSw,ESEhCT%VJQ{-5,
f7zٻ/ea:c;i;_tBIB)﻾~  ^?X=
=1B$Hvhf`i]6#aU@<ֳɊF]sSbkb[%uњ؞"9vAҨl>5*f(,@	tª&&Ik($j}}ݺ<TVՠ)Gk3IC@%SjLaM	LU7>,#Wz
ƺaʺB;xe23FLi)򔇂"*`%^TM
Q5Qfx3R]KYnЌlQ,Ѳƹ.hl\>*puO)$kPܽ>ƚ1G+clCU"a͜v)Tue"6`k3)𑔪i9qJ5FZbAܕ]2t2FIOutC(p"2ȆT]7:}pd׉׮ǯ<ie.Z`
ij<ޞN\dhA?gٞY4c۠3`f'$bEEԋpph(ID"h*b"vhi4ngRi@꾎,Nݻ?wr"t[t.?7Ǉ+&^j{fI}]lrN3KhWar#ؖMroϖjU[.gk`qs3۸,/v s>$}X"w)5YkXܬccϱ|IM3P"	lUJ#PAzI`j0$IXa	xXHXl{A	+*+b<&'$TApF(V<	`0@c00
pl/Qxʆ.<e~b#IGL3xƆ=xs1x^Obb7WնDoԣ*aگc!'4L%rϔ7RwSjtϣ[	Laj\んZu*p2^w80x'24ps8#>Ej%M	X@*<g8Wyu^_h	F^o[-װ2x\nɟm6
P;LF\rvrZ qN]Jلn27Q:XKF]ΗnOԊhA+gÉdʰ/!^9.&d3OމIOxZ_$5%4UUxgmoo_.y_rYASH%6+_ѻ|o7,d	¡Nj(6HA]xZqJ	Hn>B2>XI<g%}!=tB{	OWHO?PKK	    PK    A             7   org/bouncycastle/jcajce/PKIXCertRevocationChecker.classPJA\rB.,$`˞nR >wH)f;~"5ڼ	+jmKu3#ᬅқV,>qjS${Wh%;_[Z^UXtr}oeX7qx HYY.xXnMp9,MwP{]Ɩ/Zf{jNFa } _PKk     PK    A             A   org/bouncycastle/jcajce/PKIXCertRevocationCheckerParameters.classSnQ]˔RjmkTe(m-D
a8C`>h"6" g흜_T3FS0cP;ًOY*3-q(KXgPZrFM󔾩',4K5a6WtFFkU_ܤNatDMvثToZf4NUӨ\V/yn[cnpun7lKCD)27pfay+$~u~"5 ߜdSS)4iQH<`ue6
gxeW=3|ęr3?w*OuP nXyRbJ<p_BB	I	)	ZXb	k6-fe;-҃!*[_Tw#FF܍dzGX%|DYST9v2Fimv|_ ?z;?GQj_Gnҳ?$o=þЏct-ӛzt0JoO2ֻ4 PK?    PK    A             +   org/bouncycastle/jcajce/PKIXCertStore.classQ=O0u(;+H0ea@tE ][s).?p1X޳׷ 8=_TۚcF~	*ͬ$dG.,5ȔJ$s{u9Q}0%XiXՐhXӰ`:ϳ<
a[{;y;l *8;hڞpCʀB{OVnd
 7D
lKJJ;wPK     PK    A             5   org/bouncycastle/jcajce/PKIXCertStoreSelector$1.classA
0j.JAqQDqO5(x5CO͛PuW*CgX'ʇ^vC,K,TsHm[ k	ǫ.L5qc~ ˼)(PKw.      PK    A             ;   org/bouncycastle/jcajce/PKIXCertStoreSelector$Builder.classRKK@XV@BAO-=SP=nkI		$ĳ?JA33~|8CVbHt17s$:JS
v⣙aӶMMnMє@ J1soxz̏ȡL=\p3>|*~~ڿu
_m1cCIG    P,P/R-bꕤ/r:z1n
=[mш*bXUS@ޏ6Rа4r "
=^߲3J"a$EIk>(7i4J@@[$F>M%} Tbkc)e-PKQxjw  8  PK    A             A   org/bouncycastle/jcajce/PKIXCertStoreSelector$SelectorClone.classWTUǿЁ Hk&Auqpһ~TeٵkYRkKO?T{0b{}s
Ds<":ϛ\+]lEk/fڦCCX7ڍƤАҕlVҒͦ=[fzkbYoqMobHLjXF}q]Fc+MS[ḋ9yM/4!g(v)yJeS	Ox	XI3b̦NZ].S\
;*v8iL3\s	u֒3)]Sz)^603tm3eaΩ4vӗMQԯ12ݔ0QӉ&9a1tl
kr^K3фeɌn%=ZDQDLDsM;ϚVKh(idT-|bɂ HG:7M9Yۘ0tY2:lÆKɥPZPکn˱+@M2:T:T:T:TA:RS:$YT`
Ҝ*՜*Ҝ
Ҝ*\XMK"_¼lPM-[[5!6kCXBDCtKHR{EdƩpP4nf'3GjpڪiIO/2WGP$.x͙b[3a}pqL+Xk-gϺ,RкYIuqz7Exts\Kfn/q=eK?;Vt,E@5@@-	,g42babv6R
UQ&M-N[j6F-7b@3n؊:&P}_	=W2G͌zX@f2.q
}@A?㐀*qGaƣa (cq'.݌{22<Fq1xP1x<Le`qa1,c(88~Яn'MwHض_}5%
#=X?Kv>N{>}z*j$=iXnu
7i}Ǉl5w|a/>#||ul_97||]gپ/[>aؾ3o85_N"v\΁x^L'x-oqGZ`#fyb!-5e~;HXe
Zv'DmUL|jvQ^[W9jI? ?PK
L  
  PK    A             3   org/bouncycastle/jcajce/PKIXCertStoreSelector.classUmSQ=WŕuQ4D44^J!JN:9I֧eK͔N9~TsG/{{y{?0kQ0$s4R\G#%s,zX L_)^2w?(3sMk"#>M+TzdNxUNǛ!hL]6LX`5޾ ,uL}aXʪbZs5k9W6Oyj[x!cb9eǫuR]5+Wk(	N	^	>	n	%\00bKof0{C%zD:OP e7@KŘ6LV
#2N_,U;mrsGl7-/&]aHU%b^D#փv
jȓ|!
L
1@1(Aȉ1ܕ*c2)bT_zJEWK*J(hU׸S^J.7yBsõaj5m/e*t
!"I
[#@~(?)3C-v$
~F{	&т[W?[6QclK p`dvfj]+|A.B Ь{<ܦ zlPX:XAimfB;&Z{H=hkF;xBF7h{ː1^PKFNHu    PK    A             =   org/bouncycastle/jcajce/PKIXExtendedBuilderParameters$1.class1
0FhU{ (J"bG4
1$Pb{{/ kLr%nkaZ~|H&Pxu(=inU+raoJRR慑δG
0Jc|	~F'EgqSX#yPKS֞      PK    A             C   org/bouncycastle/jcajce/PKIXExtendedBuilderParameters$Builder.classUQSWn VZ[e#$Q1HKj88V|\͆087}ΈLLr<wI`:>{;w=?'Bh1\Xr<G.30

m8Uˆ/<F9FrpWa&
{WFYZr3Y(m$dd^M.J2YݳFETp@hOW\{%XRh˽jqy[ؒZ
*]vT>'r#`gĒ.=,<_Q?)i4LmHM`kCQ8v4k[tW6+6߶Eȱ'G[u+\"p;d30{I78fRè1
4|ᲆ/5|aB
#Ŷ1d#'B{bxYTtl.EnpqmH9J͘*tl0?'JuץΦM`X4ϴ%0.XB}θ6gc>u~{ZKxvA｟ѹosuu:1ct`#}X\q3:UCH2܉,Eqw(5(XVǋO߻|BZyϻ<}>cۿ󝧼
$4Ї1$
iߏGM~V}X06<~yx`gx*s*IUUt"lc2fFYoObZô#(k&dOqusI:,^
;&pt2ڴSIt794<r+57XIS$~PKQ  m	  PK    A             ;   org/bouncycastle/jcajce/PKIXExtendedBuilderParameters.classTn@=N/n&\
H!IN҆R!Q*T	u,#x | r)Hmݝ3sfΌO U0{U6
Ac3\ALPacCxz
f˱=ۼ] <6$lo4LBoYQqDP}bP@7|'A\]&A/LK;E\ӱ	(;nGo9m׻\o?	noZmߺ/STs=f(cm~0Y\WTRqSłEiڧB2eRMRmc¶?1]-dsGpe/%Өy$tJZɎut.<ikҋ>N!i
7p_C4L!a鉆[Xՠ⩆Yd\rYa	1܁#Ex.\2tiK۷m-y#"-AmGJs&yt%J:YWg(r>SlSA>T]}&_Cw\to݉ wVBw"tG5	,vB2B# PKb  V  PK    A             6   org/bouncycastle/jcajce/PKIXExtendedParameters$1.classA
0_j5U{7.]MO5(z5COޟcR˛F^ZM*2,EV=ѐJjEv5Eaa`ǀaVYe\8~O:im-!P(!Ǐ<90H(/PKEJ      PK    A             <   org/bouncycastle/jcajce/PKIXExtendedParameters$Builder.classXcUa[zTi%mXD R(VZE&KI	n*x߂}
Jz((}+f7mVJ!{3ޛ??0٦c#<,RB\.i	u)$-UVV*ƚ]ImTcjm\TgYKIªnPcj\Pg`
k-Zw%96&"ҮĔ*])r%&GUFvBaJ52(D$2ZT2Co\RAM%kuDlo(*QCnlTmᄥ!uBe"ueJ_-HtVuvͅ)JhHPh_=uayE:JuNL}Qi?R	imC$bɥ$usFJF+H+tBb=]5Qq:ta$ĔjaԆW]lL~Nd&+A9hݺʪ\%U\mdq43ƫ06zoߨՌ$M*/ÚmR8Nj0^jH
ZDʴ\f;&f%S*E=.0KO@*f#F@y.P/`Cx= w)m}:H"3ϪȣcS_@>uIwYTT-9*?6/l|Yz'Sˏi&/R.ItGڠvd$m%fEv-jNfۘ"]-Z=ODN=lW۰h=ٮ˼p{;r5:[ttJ
neyEZVX9=TQxZ
Jƚtf\J'c24BPo;W~U]p4zW6|cR9/92["\u~ߏx~O͡Н˻e:M+"cD,cv!aaŕ"2,z*#Q< (\"Ć.(V "l\-b4zDvqpFgfrs^g Ã1<ã1<
<Fdx^tc%[W97Va,NnYh mц^ax5=3&[o33kX]
S~6* 
aIU?M
lGZY DaѬJc>Q\_Jgž>{'}-9>.3do̈́8iM V'i	8޴ϛ>xf7UA	[+_1CqĽE ){ "L0<~TV ՟/`&~'j.O6Kf,0hL䲴>|C[r3i}$Q3:?^nǍ_sBZ1c27<i,h-T@(ǯyܻϠ{d_^я-)!\pSqCp.Wj3&YlQ'¾a!n3g7gG)"N2LBwZK2XA]%KN6v+_XE5F挤y4s4 978M8G^\gqy4@s0k;3:3py؊ph˓PK  S  PK    A             4   org/bouncycastle/jcajce/PKIXExtendedParameters.classX_WFh\Vk@Dk@5Z]w7zޗV}K?dwf7ĿG(?.0pn hKeE֗yPX:fKsu0PhjR.聇'6lLc5mTO$MURRr(ece82a;a-rXk]cVVfO[`7BQa7ٍJa(i5ATNIT̓1HTm
:
9R5냍zTM8$U<B&It״KF	׊*4my,ܵ+@ hDV5$5lW/vy05M)d
bbhҳ^BKӠF尤&5*ˋ*-UVtSXIrj%嵱Je7!>橏Օj7!$˭1dY"K;bjR	-KVlYeZBw*G:El@6hRE-EDTk[y6\]['fo.qc&11]k'E9OlIIJQk7&OI;ʐ9?[1%5=";BbGH24vm%%*"Ô19bM~zz	ubJg4LK唠]FbŬsݎ֛mtEK̋e^\^xQE3{U$6<'WES<$<9yO4JPQ2J5	=U(2ESj8TKŹ.{,I#|{Uge"
So4wҽDm
|3E).~p&ڦ|6΂S?U2,z4˺?9G<lR^vVOG6dIulRNwQ<:#m93bܴgzD5gDsC2*̙.Qksu|UɎSgz#تL\,!o=KsAp%2&pzٸF,`9J\+`((-,*1F@		(B90LA.`9[@C 	Gp(a5npn0	;*p7=2p?2bxaG|X|hO0<32<MxMw|؀GK>E^ax5v3axmҧd!BdT?~#B(t5QxB.S4 u`=XZ66~#512GjdS3$0ٳmHvMMf	#u1R?%b!y~'.d
,⹃6<~! ?8BOr1y"~&_ǱoDxe1xHU1Ik'CÈtb{>d{؝ĵa{-ԵZ=rܷr7꡸CA1lha>c9z1R{0*$&jV547coI/4>	ɤsLzTqɕ"zĢ`=htI%@?>"^rX\[J"޳"*8nEcNER">JboMJ1#"o,h.\C}+}Т!OB-BXه-"~e6&z::l<muIAS+dZ6nፉPK+    PK    A             8   org/bouncycastle/jcajce/SecretKeyWithEncapsulation.classuN@ƿenwq]D
]x1Lj(n7vָ&2*.Nϙߙ?}1B^a	˓8Sejd"4UbHg)S@&ADJo%QǺwDs^!ɋ,?Pɢ֗e4
^UȫSXg
s_!QGA6Ha(~FrM'V!ߢ^\ڸfcu-xwM-z-<N#ݫ	0)psS *,	:n
8hb,:hc,VFV1r?12ۆ99*n>lY=
	><dl#qt/X?S4bx1?Ldj̬gS0tOѵ𱄦ΚQ7PKf{T  !  PK
      A             #   org/bouncycastle/jcajce/interfaces/PK    A             .   org/bouncycastle/jcajce/interfaces/BCKey.class;o>VFĲDļt}FtҼ⒜TĬT̼Ԣb}'gJvFv&6Ff(  PKR6Y   \   PK    A             :   org/bouncycastle/jcajce/interfaces/BCX509Certificate.class}Qx2+D((fvVj
%Dbfɹ }Tة1y'

ǖ&m߰jHj le6:K-ӖOBg>i6v+kPXIbh<qÏ<EV3IzttmUi9ﺣ/((yT{PKν     PK    A             1   org/bouncycastle/jcajce/interfaces/EdDSAKey.class;o>vFĲDļt}FAPqjriQfIwj%#v~Q~R~i^rerbqIN~VrbVr~f^IjQZbrjkK#P5;#;;3##+  PKs   x   PK    A             8   org/bouncycastle/jcajce/interfaces/EdDSAPrivateKey.class=
@gcWXzbAR0	6g%$r5t1<_ 
Rqd̭tkbJߨؙZ{uRUN
g,iKL=4qNћB"HCrusGcD0lE( 0iPKј     PK    A             7   org/bouncycastle/jcajce/interfaces/EdDSAPublicKey.class=
@iybb*Vuv!PnaޟB܎!օ̱/3UdƆ^]Q[>랰PkYXXbʬ<]-@aiA	L1PKl      PK    A             1   org/bouncycastle/jcajce/interfaces/MLDSAKey.classu=
@--(/gl\x(qn曙 Ƅ05E-7%W=fN%fQi}:׎}nnB	;Q[T̢=$t=/dϥ͈`0aoS,!PK      PK    A             8   org/bouncycastle/jcajce/interfaces/MLDSAPrivateKey.classjP֟#$PZ\RR]MӐ"$7B^Ae]͜Ù3; <?ElJȖ	1=*HRdMeq(c	oUf)bmԆKN
Ft[)~HrҤPh+('g_KƄOqہZ{W󨙏KPK#c3     PK    A             7   org/bouncycastle/jcajce/interfaces/MLDSAPublicKey.class;
PEh`t*
Vay![p.Jz? 6#L:R3a6<ةx¼*L}c^ª(u.p3N؉4ZXCtv_W00$a2PK67      PK    A             1   org/bouncycastle/jcajce/interfaces/MLKEMKey.classu=
@--J'xy<CHv#jCVv0<_-fy-_4h{DmuaS	*][&M[ؼj}:a'j:VY,MYL#fJ>K	`$ަXBF7PKz7      PK    A             8   org/bouncycastle/jcajce/interfaces/MLKEMPrivateKey.classjPEԧmj]	JKJ](9
	!EȯuQkRW3rw}7_^$vY;͖	/c*5UƦɕȖOx:,ҋ0c	*TElk}]3ʋHypiSщĈ3+)|6̛ۭR(t	z8dL82n;px; -<jys	 PKi     PK    A             7   org/bouncycastle/jcajce/interfaces/MLKEMPublicKey.class;
PEh`
Dc#$ٚpQb`mw8Ì=a4IɁ=ls.R{N',Vi̷kG6eڤl
ikuNfƢO1`04FaH`1&
cPKc      PK    A             2   org/bouncycastle/jcajce/interfaces/SLHDSAKey.classu=
@-mY	Yb"ٍYx %.bca7
u H0#
'nA+7ׅ=N%ʫtmz{ОnMWK/C	;Q[̢f~m``04*(~6IBƄ7PK1ԫ      PK    A             9   org/bouncycastle/jcajce/interfaces/SLHDSAPrivateKey.class=
@Ř
`!(	63lPbma{/ {	}\Wn	K%sUdZ֞꫊uoeL<tL˺ЭVYZfi
4W2]ɩw@ 0Ƅzs>:F)"t.PK<KBE     PK    A             8   org/bouncycastle/jcajce/interfaces/SLHDSAPublicKey.classK
@_kApJB:M2 J
=_
&`TIL"L9͹H)q*0LJSe_-aUVMʦVZ'DmVx,ZG_}``1zbԽ:PKk^      PK    A             /   org/bouncycastle/jcajce/interfaces/XDHKey.class1@FDa5G0&#aCdw1٫Qx E$mxO~4%%pkp-*)O^ūŷ%u CUjAPKm7Yp   v   PK    A             6   org/bouncycastle/jcajce/interfaces/XDHPrivateKey.class;
@E1㯰t	A;[A3H&l(16r8pޟK*4in"aLktnLR'	᪅N'm*iܱ}.ڱq,^at8W&
ב_1"!縷@X_PKww     PK    A             5   org/bouncycastle/jcajce/interfaces/XDHPublicKey.classN@DgHt'6t"@D

Rfs99KɿFQj7ͬv> cNV~4f<>8]i?,W68J$,U{~ˋnuJ[Qmi
2+!,Wvxl7=f=!bnp2Jz$A/PK$wh      PK
      A                org/bouncycastle/jcajce/io/PK    A             2   org/bouncycastle/jcajce/io/CipherInputStream.class}Tse~.pIz TLVim1hJ+\/4\fbGg'Q?a.!ɳO|-dZe	r"2"ͶP"f91/WجơFJ818Y=ozܰ#AGv]kyY+(ljp%W$SK3|gf*Hh
Ų;V{hR.:-z1̢kمzkozjFw7$2d*%׬
LXn%u,׉wRS)vڟ;[YdŢm}g#s(ȵ<;_Ԛ].C/yJ"KztsydoDnarrdJ2	9ftXڲTk]SA3
UpN[
VЯ`@Bl䇫C˚%bvm4tS
gJB;<)EIWCwNMЅvz08FTt""pA'R͐QqQhG*:0|c2L0L2`,K*f`
2Q|i/\"S3v9ZۍdՍ8YD8
F=]pBj4!cB6BNك$hO_},k},0,jX}4;pB?hcg4)<wq
}p{'MӞ`cKd\M,xʁdkj=H5H"liyAIj~x d=[Tu/]am0IRDs1>5
XzaZ

#pmR-LR[\o"n%X.Z
B냳6YoRFY{q,G|5AT1xRԗsl2x__<8*r{듅$묍8IE沲b{/^"^}tL{8?Ӵ2UBXp(V-yW_@%|NzwռBq
]`fq]ǟ%6PNPKl    PK    A             3   org/bouncycastle/jcajce/io/CipherOutputStream.class}SRP])x+*^kmJa|11)g	>̌u
g&qhjg}YxA	-9'A֒/s̰^xXcN
˱[<V-g1Q=S;5UY2kmHh2镊ir0'3pٝf>y^۵ꒄe}EZnvڲ}+J͟
JJ9)Nf%ѹmEug1D%"Yv{NAr}1=ݞmM)īY[nv!I[IU[.5X3o;TnYàR2/rЗ
#Ð#nͧ;P

V)C5m
qN]'zfF7!xFh#tjr*m#²i4ngb'&Ois43]-ǐSUITFZDTa8p~3cJF)nT!dγy paLT0
*5qCp]p
9\cȓnނU%uMAX<J!JhgmF!Qk	Kd&FOSML䯱OLe>ajHi8L;#T
)d 1Ei#T:=TrA9m~ĉ]hddI:f>|핔u-]hx[fO's`7(.h:򛸟O,`J!L>hFP;qE<aU	?+mjPK+    PK    A             ;   org/bouncycastle/jcajce/io/DigestUpdatingOutputStream.class}N@ƿJO^Z6MnUG1QL< >qTpؙof?^ dZbSOu\5ʽDQT}G4rn^cCKbs1
C##_L3EǏSpWaS׉5G3r3#R;45
3Lk!аn@3` #"C.5uQѱ56hGo$It͐T)tTH٢Jzyf#ыdj#
'Ի91$234)34>PKסuO  /  PK    A             0   org/bouncycastle/jcajce/io/MacOutputStream.classeN@B?*ߪ1qqфD
4ڦL7D1qP;M9|s|}|8ChFߖ^tiowJ9s\GS4(

CM3;˩e\o
[|̐Դ/<3:Kmzy煮5Dlshe!8VVȨ`_8e(iCGQCEL&RiP֐CECRv\xڬucs19
Jԕ)kwԚ7T_"2¼Z}co.e#:+%3ns)(3?G,~ PK>0%O    PK    A             8   org/bouncycastle/jcajce/io/MacUpdatingOutputStream.classmN@@iTA~E@XX414.4.H4,l\ա!%6e>bw
jDs̙oΝ7 h1$A1O'Kʼ^Gcؾ-׷zwCG"ĥ{<uasj7#Ə<>T:֘c®-\o;MCW84
2^%Б70HI,J:r(KH١9Y~-	H39{4+w^>&R#
2'T%Ԍb\YUd:'WOki|PK+F    PK    A             4   org/bouncycastle/jcajce/io/OutputStreamFactory.classJ@شVtWpP,7+KEt:	5)D[JP|(1h6ssyxyp\s`T:R'}-wU3:bE{[pEv=!g	jsfsAK/%|u=2%qSe2LKƕ'O27P00o0@ۼ<B,ѿ֘F&b{X]2'TÌryZioH˘aQ%&X5anuݡʑGD{وNxZx"rX^WTn#dqfS#?,RVPKҀ<I    PK    A             >   org/bouncycastle/jcajce/io/SignatureUpdatingOutputStream.classuMo@Ml8PHB|8$*Z .e6;ה~Eϕ  pG!fPL<3~wxĐwZ٩ig:o_N*mJ`q,$=d2TFpev3_u7QD
^2 *$܌%wX}w䉑6g&B0oBi=ǴXtD<!s9,QP/uNO"\Np582it(ǔܿd[6↍e11mpl,^*X[֦iaw,TqnneR*ɞ MT
1tS
IJ5sWkw`HM5&z36:cQ3fpj7~PAPs6:iO)Ә3)s(-Ž$\.?mqU%",?PK^  o  PK
      A             !   org/bouncycastle/jcajce/provider/PK
      A             ,   org/bouncycastle/jcajce/provider/asymmetric/PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$KeyFactory.classT[OAzAEQ[P^PmZ4:n?_+/WR6Ҥ}盳gO_ \ F0O<e'tf02f$yy"UaDUP>ueO֪H1T#,Ì^IY\	Q'^&:ql>JJxa<\B;:nIQ$;aΪwjޛQ>$E'"6d=&[)/e@c4^_
	/ED] tuɮleVιvZ\"ܥ]1V.vj/_Jj]0{ikx !*Ο*"5OTM~8ha#8b`Q7pa4X}^IܣH:+Mf~1<bm
D	nx0reBwka}#as0L,$dbWMLZ01k&Ncn8&bAEpy1\BZ,ҥ(`ƴ˃@i~W!9^YEWbAIH>&k4#?	(^Oa-g>!lT3w8g1lGXw7pT[UGGzuFƐ4C|MJiMbGHbQl6#;CGs:N,'	PK+$    PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$Mappings.classURA=mCX(h@ *H "TaiD
!.nv>p*g?ʲ'w.yٙs%?}`	|>|2cX7ж*rK\l'a誚7ת.\78::Z=gPy25Scx4%tڵc/O8g2J2궵k`h7Lmv:cW\*O?Cɭ9fRN*cg-=s3EdO{d{ߠws ^.Xa(j
Ͱ`w1-m 't/gq&밅Z)VIU;O`$)q2e5]#eqwaB¦iSl}Y0hipőVteaf$fLU'T<pt)n7Rp[AZw8D7_՞iESJ=ª+,+1-od4T9(eկThRjyB֯ȑȂtbtM|~VXOs?v<R!MU
cH~UVq#DT\
1ici&D?ԏ2$63iH[[pb&w]AoLp &$BCX?@p!tFOлuvxqj9:OпuV!.L	;F)}X%맱[CoPK&r    PK    A             ;   org/bouncycastle/jcajce/provider/asymmetric/COMPOSITE.classT]OA=cݖEJжnAj0"V
%4 <Nn6!ߣ@2-CΜs9yTTKg%ӶK.3,'ZyP\Wė߯pazK.
6c\%	n"r\7c@\)HtXRH[PF:orNجօ)FZT(-xǃ#S\W1LH[uMNêmũRP.C_ٞ6]<k4J:Dg.K馢-t}jyr=˩ļP`DAJ[
n+Ð*O"pntaN#2ɟ]-,m:s忤JYH_^&KiHⱆaLjPЯ.qI`&=<c+tۇv #֊#εOt5Yӯ'1	1Fh,phhGuEYB#42GпICn k;zOGa;Yj+zbb!f0\#Kc*NmyZCPKe  c  PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/CONTEXT$ContextAlgorithmParametersSpi.classT[OA=-lVH-7U4M0%FiX&uq[w~_|D%DEei4s3e7 0XDA[=2TC8^ehHz	I2G:3-wۼ \aBc| L7Z	auSd(7&<Q7UˋZapi*f0( #mN?Ybl:Vdh9,[9<L.q<%me{corUܖ&n}f^sc&
ss+W*
v)T
V:MJn3FޢB9f'Wn95knrC_?Z녢!@Zv^]Jq5
MEׅrg@ZŅO̿X&㼌2.ʸ$㲌nWd$dR`g8cqmChx]Tzxף5$U59jRhO&#LV:r<}
q-3ЅJmQ$q/o􆫸E
wP{2tשp|cYm35	/.5CNLU)hN3ah0F[!Z'bJ}ƃ7>!5K=:
1H>_\7ab_}r%)jiŌbH؉@P
/*? 
4$_Cv:X1h Db`%޸}?CtY
E
Iv|ìGYPKT    PK    A             B   org/bouncycastle/jcajce/provider/asymmetric/CONTEXT$Mappings.classJ16U^VBVa]PBJKqN2̴͔r%|(1
fq~;$o/ ND<$AXj$*B`깾}Mu:Apʵ@:#ǭúWF=
T/C~S'I?3ILdE?d.Y/&}:5gó;Pxha9` e m cԼb?
ǿ{XuِQI6tQ閿Z&bH 62X&A;)=\?Srb8@V+2&׻uDk	[19_15s#3vtLkbH} PKM,_    PK    A             9   org/bouncycastle/jcajce/provider/asymmetric/CONTEXT.classKAǿ5Rq:!oIPi)u\muv%NAex|{!ClPhI%c3bF|ν#XfCwTpGpSDht*wѠpA~0oyk6~xqhi=9mdhmyTwsPp8(2o'22`%ː`Nre<Q}ώRB17Fj<NM ء\*-R{.Ԗ
ȟ,}uj*!PKn&/  	  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/CompositeSignatures$Mappings.classU[SVHآ5"B-mViqIpƍ(m=H#*K$39/$nf:}O괙,lPpv{v )vedd2&d\qQ%e&cRƔ͖ٙ| *W

ȒXM/]nwpqg:W8&bnU4<0Z\_륍e^'Lul2_N
7M
zV[#{gq/@P"#^I
ٱ<2Ut<˼FeFY2X;|ie$V͝TӰl3AmiekXN+ƆUn1|[DA&(7Z)+]^ukafD|+_WgX&ָk<' 
í>(gYtBSsW0FzMTP
(IL_rL$ٹq"3,%M
߶EHP8ս:sHܠy7	K%I*!'!/AyZLٙxgGl_'(cHc
F
k1\Wi#N|.7 XN"_b4w>STd1x
w+V1

u,+xw{
JRYNb-z
a
K&qB

F(]tMzJɡ[EwØpgo] o,̟Iq:giˀ-|
$0BԜ:5v&~dbsBb2eSrHFs/p3|d!
uI]6dEj"78N*pT';o5M{%0~{VŪ$͒	Rt.s`?PK5  >	  PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/CompositeSignatures.classRkP=oٖKݚM7[i;!Q`2XbΏ#IH^
SC (6[?Ȼ9'yϯMÒ]CAT[ZznNݧωo{}x|ʐkznefEa,EDl'Ha5'EaI2ک&ty[>\m+P̨TzuēoxPrnk4pO/̮û0qF=vps)(߲8{<zN#=IL$a)a$5&J&yyKRJJ
k*UXU`ԧ7I'pl&f2SenRzLuQ]*t\nA(屁n!üvh
v$~"̡6v%RY񟣘0T2t0#=zٰ7)Rd/	G3(
.ug9c)x?F`TP5O6FPK|    PK    A             =   org/bouncycastle/jcajce/provider/asymmetric/DH$Mappings.classXG}gƲZq YƊ+FY>#K${!!!|/{I'KrΛO{'l#l' $"&\Jp9
=2 	
"T a/!L$DQBp5!NH!0aa?ap
Zu	7$Ep^}	$<DxQc	O$<ExYs	/^$Dx
Uk	o$%aRnP#jrFw8tU9P4&{<$f%d4lmގNwb^\vuݮCqET"\RUGrI5&RrqI7vnpxX|^ݝmmngG\Km&}|.,LǤ=<bҭЃαs횼]ioiY..`mhXr_TP\`Mk
4 N(* '9vSrBft-;l9OZ2;k"ȿ&BQ;k"(&n]xU5Q(Du]]nr0huɸ;T*H+&
@dhWKR{phׯ͓^g4rF"H@@(X<:y9#Հ3_coz	]gC:hW^ZqO/~rxUDmՓU@5/:ZH[z,3CVA)uAuκ ӕѺ Zj][&Ԙ:([s2L0
/mk+c%W%gYe4IZU$iqUFAZVMbo3Vl*E금+[%'"@w(/u(ae~];Saa2a';XLo`+'.x˽aG$'tJa!64JHMWxmޱ]޳}>Cws,afyXNMs55JXje5)ٰ	|9PY]ih%,5'\jyL<wΑ'PxROiZslA7b́p܁>u#|5'Jv|/8o8SvT+Zk0
__OXN$`XGU@B7JsʊQr@'HR
LeX~Z6ŏcMQN2348':Kp&ls	TaIʜ9X@Y@tk^a4-b	],-9l@KG3氵cϚZ.h[-l$\N-`:y:mh	T:ZZfauhEA|fݣ~~H?yk矇IPKsJ    PK    A             4   org/bouncycastle/jcajce/provider/asymmetric/DH.classmoPw4'0ř%\XH2K6-dʇPC}q{~ޞ_OT*Uh*rAravhzutoV_~jw!ձ-(˝@޾"zKr4E*XwRv70;#n8ܵ7݁0%C."i;FgLX7'nc_zJ|thctKAIXz׋\slP:B|`
p(Φ:߄qBg1%FEDv-jOeK

r
*ƐoM!̵ZDE6K:;ʕZ[=Tf-
WpWy
ױ-Oc4VQXMuGӕ{n(+\1S:uB=Gx
w8X!A1Mkc<L*2w:_PG*Tl~`1~Es7x7<;qqњ61R PKP    PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/DSA$Mappings.classWWUjs눶RV&(He`C2CC[}}oTVu}?s\{3Rc8p޻Λzi+zN8Jh#I8N tG	!Bj±N H8p2p
A#A'% a=!J$qTI8p>.!\Jp9
W!\Kp=7n!ܪjjӗ1Z"f
OAC6sWԳ6ֺ _e/_-qE(5`#nDeR0'қ\ 12>"n6إڠnzL75+ndĬ̈)(}tQ\.͘Sν}EgT[[%
Abis`ZZj$i@Zml8CK4H0y1;Nw*RYY]4L縜td;;-?W^c5QVfu9yOX7}Xx4%?t
a-,cM
Z$6.o/.8tmhHEZ
<iD
vf+ޕ:McEteE6bEvdMdŶ1,i3͒{րAGX?dFa#M\1@X

 Ѧ1/Y2,0!K= O7GtK6Dsr
gV0߂Yd;rsDJijd
iÄ}H!jSIat_Bv>-Zo*xDmGx
xd'+`VDR/E'；ePdǌhLٟb>?5}n3c~;_	+ʃO*RcQyeNskz㳻,w0OtN%yFte{|Rp8-EVܾxpypwxpwypxpE+xQbs*&R7Ve2gZD$2ߚ&oS+)tG}cmk^>+_ڋQ<B!ęB%Bl!NCh<텅M^l@Rgy1罸cm.CxAxI-B,+Bl<J 	o
V)B#ĻBWDViijG=N!KgG	_??~p3~$.ZOo:CQzpj檇;h/5 TE5Pu"As܌]4]V:@]UIZU-Wx߳VI|`k{vHZ%kMI|dkvh-K[aI|jkY[gU;s(sQ\T.R Gq-xx$>z7[ P1|Ͷcj_Ҧ/w2o.(VMG~cEџ[<!<_QPKt|v    PK    A             5   org/bouncycastle/jcajce/provider/asymmetric/DSA.classOK@_Қj[oa׃A$*B,!!ݔЏICJW0a?>cP?>ZW5痻+|F{YYbRέ^j|aDUU"KL%[NWS 
".I=,
Gk5Pmt	LyeXsZSŅr8BC@p:"Bv˵ǓwkϽú}PKkc
B  ~  PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/DSTU4145$Mappings.classUKSAN*@I&!1<GU*dY76
U9c<{ZeWly8COw_wON~@((nSܡK1Lq>O)QLt}QX^cyYZ^a`t$a3QL$$?b8AHi`Sf0d\wIhNoMM.sfj"lp{|UȲY^QCܬÚL5e-D<7SӅ)geU9a*UMY}66&U	.Cp
i=W'1fYFH)1e'Ω;U
[U"W*J#eYUWNJ˼%%^Ϋ[AXlp[jnYMVLI	0%`*~VFuTsfis	_2gxc6w ?]1Ezk_Z[n	cK9PM=WiuRٝwE⹈1GH)^PJ"c΃ Eos[/fb~H/d+$&,̲Tڗ'<jίIw 1x % ykxߍD$պ\m2
K3+ˎo݊WRtes5Qp޺QHTbb	 gV$^:<PKB    PK    A             :   org/bouncycastle/jcajce/provider/asymmetric/DSTU4145.classMK@w֛7zإO~\BAQMn
Y zwbP?>ZNO7WB/s0͔aQ&lZTZ.06W,"bƪd,g3eT؊Bg_
5z3ѽSM
-ap=eN@%4"VnThcWnFZ2ʅ1nb\﹩%Zuo	hc
Xw\PK@$    PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/Dilithium$Mappings.classURPܖqCHnE,R4
5LI1M1|F8[瞜|A$Z3\`pC7CC/C6APӻ¡qXTc;-Os<9`!-3$Y}on'SYFJ3鬮68Ѷb3t
xlV2մ&y]rV[SӤ$9fHI&hЍ&zڟ5y[rFFo벴.gԔ+hY!rqk\)Gق
m˵ [zs'Ur옜/sp" G*G?qvQibR#uE6b)E35Usj܋ǉ(|{cC1tU0Wq]s榪#	#I&(%[T
5#+IT]c]S)x:9}j9tm<<<y.{<S}SuiK3tVcz~8irqo?l|Q!1m-Km)aʋk	&0缸1:0L0mB̄0g¼	<&L1U\\Fw_C$id\Niʃrԁ3S#|CfZ9Z]}xrpx
 >z:]<
wO0FբACTI*(vlŞآ 	g
XA?k',f?a[N4uB80PKk&    PK    A             ;   org/bouncycastle/jcajce/provider/asymmetric/Dilithium.class?KA]bIm2
EQn?JD20~ɌkORLDS<AU͋U+%tT(U2Ulbib]EɌ6<"3!'-i!*ϵ[0wt+ąhhhÛWE5PmIkBoRX3-xN$iGq5PGS
!;Z`v_
2a>DPKp    PK    A             =   org/bouncycastle/jcajce/provider/asymmetric/EC$Mappings.class[w|T>g(9p/""*ERhf
X{	&.({｣ F{=?}fwY^?N;̜)wf=
 ؏@p
iAp&YgCp.y\@p!E\Bp)e\Ap%UW\Cp-u@p#M7Bp+mAp'݄;"I8p4=VVV#O8p"$=	'N!܋p*ބKՄC5a %<QH&2"ni.nIDDs2YvSW+<r	UjPMaYmQ]EDfI!,~>$BVЇG+s[q&+q⤭s?y+'Vs;m)^ֆh*ڪeT44?4p*%ڗh)
G8GƆy-5H&yz
SWX88!78u)?7?78#:NTgϸ!~h2q6|r;68u)!lCKg
E]^ں, gbvUnƌg}Y9iZ2	:p8*!5'c >!wKN2t>i&N*L3qR!iO!ޏiO乳S~iO|jMH'Y~+eǏx53t%Λw0rlo^-=uenmCxVMդJ_j7|钧.:b6r9+<mxG˥Ir)@w"\
.!L[jܹmbZhB9*pdWAC4%T[d}"L_}Hofձ
AB=fV֛{Rk!t7.}]<e/>ܴʱI(bEnn;ugޢ;cԅM6Fe 鸝hķ{~v}q2{g˷~gFo
vpz"^'^'NWum7zDc1-QYYi*ʢuDSCơmoגq>cmŉfnH"ܢ5DXb9kf4D7cK0r<[:qֺm+Ou5g)ܭi@/OU-&:O\#Mkq*Z,6D&ǩח2ţkQR^\yMG-(ryHZ
(}uXzu"G'xto-,ڤ57-2iH#]6=e}ԲQ?Aof"X$W[lqUNՊ9Z.G+cZ-ְ|QK"_VRaJV=A6Ǡ7 ig1z%ҳWhT"E4~4"ZM6WD2)>w-Oĵ_[\L=$>)͹s[|Qdle,δhZ<HGhMapXtiL+oO9HG+[[5x.Ҟ@ط<|k0I3#0n-D]T5$[ 3'蜠Y 9oں
Y+O0nlumguY3/9Nr9O|![
,?oU'|mF;zycoF=Eҋ9h
M2bScVp!0>ivAWҼ

Xpn̂y\%*i?sr׫C}U[~kM2loyE&Dbz
|Kj,܁mXF~(vKIݒ8%_{{7g;m;.JX 픋2A`5e9}6.ʀsFݯGa}ަaOP $\$^k3	[>mC%LyM'C5l}iו`]_ L򊸳7LףD
r9K.&96FY4=hR\d#kP\L+ibre|0K櫳\d[R+~j -:M)w$T Lr8ɞ҉G'щuOz,"E"Sٟ;xX{Ac*9["NVU$LE}mqZ,S秸№J#?bp災h-yF^j%h{?|S|qO$3Z*mџ[NTLnÓtEhVdԢp_frSeٗv_VXn->0bV=l̓+]J|͏C"p+Vߛ>56}Ǘg-VE?YCs83ܡ]Keuϔ'#q S!PMAFy	"X@p0BC%8("A@#XLI$,#h!h%HI"Hd 8hKp'Dp2wC^V!`-A`z:$@!M<B(c<A$SO<C,s@"K/B*kA&[oC.{	>"̈́;&܉p΄C	B8pᮄNXG8pa=l9s	#D`JxMGF	bf%	¥[[	mGӄ+"<p%1Gx<	'Dx2)Fx:gZg%xN	[%xA	^X%xI	^Z%x_3g/Ց**4Q3?{GjG-DkqW[=27d'fTwS97hjn_nN<[?t&-Utxp߃EU'YD\2+1ڲŶap$f7B|+wB|/B(OB$ğoB]O!%B"Ŀ
_.@!]*D7!Q"	Q*D!z
Q&D/!z}+D?!(Ά2V
;>eMeh|	+ëX\4!ᕬ`KJ,v	qzTeB*DB)DJ+Rfi!2%H
q'	qq9l+8JX)1B+qB/	B*iB.B)Yl.TJY-9B+yB߃dq7	qsȮlEۅ;H8/bzٍB*m]Cmq
6Rh:-v:do0{E22<ay!P! !m싵+vn3cTFo`md_w1J)U6ݔq6Q}16gE;)6觌%dJ
vV6TؠK=dTn:hkxQoTu2ZZ&ϨFLڨ}}ʪ6^fJ
+m@DPA26(Q&ؠTddRv6L.Wjm0B9*uny0AcW
&fu/)xxc1mb m^bWqWqW֫ϫz
^Qg*JV^*gVi,)6/()3]e*k!_QY?|Me

rT2_U:*тLU|}ew:T':Cc|`{\6sG.Ƕβϱll9iI|Oe6~[*,fm
1lgv1lW̛>,(fcn1G?#*kqf)tpʺ8=n
sGUw'TVi9`nTYW\j7|Le%
TY\Ϩ>ϪYe퀷7:7;;ʷ878Zek]#gcٮ?lG
WپO瀿~TViBo8TvT|άM*~noSK|_;T,ߩdy4_𦪬*6q}%ua[ԍϲGlnB=j뾑IYvV̲lwR79uKݔ,Qʲ7lݟnji>Y㪿 G/pU2k!?S.eo!Y+u\7*qFgٻq]Egx2Ɠe\16Obl1q,cJe.:?2#˞su׍Ͳ]]uYd? /ݾ;A~thdC)?̇P?PK&K  Q  PK    A             4   org/bouncycastle/jcajce/provider/asymmetric/EC.classViwU~M2t
%BPdi҂ZP$tҍVNeJ:	3B7pǭAqP4< z(3I% |3]ޛ֯xW,P"~'
X*`,N@KVG,l lc96muHy))MMu
Gۂ*޴vG;isD"JO8*:e(cuG\LڪUk(~]<,+"TJOOmLP4DBzPLq͔TUtLUnJޅJ,&LUN;I)ƊS4EbV\rrF(@Fi-HΡ&I'ф"S%!+钉_"'u
q{%j0XnJvT&sN$]LXB1IWds)Jk}g%{{ZHj,T%gSke;%cLRwfVZB)2D}has4'5yH3e_V	=>(zP2h*9ȡ<BS=BUF+#=^UYwdj(Z7npu6޵%U=PPWJa9'RU9<\-I4hNcҞ(k+3ʚuUY%}Iz+i	Ji*'%`q,HKp
1LI7VOGьgv:wTVU<G
<6x6ayq;y譟yB6ѭGulde3-(Y]?\W}93O;
S&b͛f/Tr/cJAjE]\
fɾ%'vABɣXryW(E 0ŠA=&QHE<UDEQ{C"*"a0"`PZрn<n<g<9ϻ!a-8A+Zw<hgj
o0x):c3x+tU3x[<@{hË^*>%akFWfH$bD/ɯ!{FMI>@ubC_HC34}җX~Ki?e=9z:K/EP$`E1ՕVGUeB]<]C{e|z	#0yxoU\G+S^\uAK"at0:ZWp\Sﰴ?q)|~5.({'E~W
_]8]41`'2Ike,y
DEpG~>1VQ)9YIaUO`|y}Ykc+~OHaf[1.oOgI$Q3v2wq8N:>,խ3;>gUJY>]IAYȳ[f[?6xG(5KP-Mlm<Zo"@KP8A1G9p*JQEzvPK1h  
  PK    A             A   org/bouncycastle/jcajce/provider/asymmetric/ECGOST$Mappings.classWsF c	Bp"Vl-	IʑPzJJhJ[MAښiL$˶,'q`}]@Dtl'Ap'];	vt&`^}Q.~n=}$8DpA? G	#		'	2*&`^S݊{lfҡhFiMW̓.ʦmH{{X@}~PuYU3$`sWw@J>ꎹ<I#6Z[XȪK\\4DԳq%J.XmZDbj;fGVx}zZGYs<iΪ,.q/͸dʈr4gyƬRJCOKyW;5.y:|ZL㷊	J6Ս(d5%&Jy,Jky&_R<_<c6k87Ύ)6[«AI%ddGBEIXp$a9*veTﲢs.-0e/Y1&$1#i1nꊚW2)YЭА6&'afHRIʡ1]P%$J2$'ޗ"2bD6u77),XDљAmhKH
sx)TvV
ZqxNg%xWsO['v1)PJ5,&ɉ?4"';+IVQSRV50%5%x4o(EJ\Eb"~m:.cveɜug*G"g
1PFp|3JF/=Wc.\|nH7T c<x bV4~$NF75^l8T*St-JKG8i'Ytz9ignJԿ¿fӬKeBMg?/l
^ A<!sxCã$ChI< ^~ &rO <8
oimpx{ޯi\8|\3ç>YN9..y|(`~LKߪ>=d2?;Y*<}oK٧>\5 UPP5J?<jZXu
Ӻ8{:~'>w16&'J56;Bw6ZM
fҪ,~`Y|w.m^*}QٱDW:<!kc7pMv)w1Xܺu]\t=jY7ZDW8bYNWЖ)|me: wŮԱX*ZOټXQwЭc
m[KBs^v~+E^-̵k<,jPK    PK    A             8   org/bouncycastle/jcajce/provider/asymmetric/ECGOST.classN@bݙP¸iА5b;2IӦLIXL\ > 2|9/ 8bȞw6nw_7<v*v^{eݦV(&GBKxV?+o	F
=z%$z:4	<Kzz딬MM_/=tfeh/h(_0L&
6
l2!I2`Elc!IJB]K-dDBkB"1ra(qvޢfsiQv1[tVi!
PKN7  :  PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$ExternalKeyInfoConverter.classTOP=!2
"NE@!.1(]y,y}]#~2ޮc,h׾{~:a2}
G:za&PoӠaV]f	]Mɺհ֩-|xaZwuak˥2}SZ7t9I/d<c)cdXTWPM
+5^֩JZ$_
<}-QވfYymma֓ΡPyr"rH[vq[VZdCPëkB!-
^020l mঁ6+׆=yx5ʪTU0\ViBTK\/uv֨,O41	[/#Ic;i;TnvI{%)>{.Dѝ̸
IiNF
}c>q܋1GCÂ)<61E3ș%2Cj7lrŦ˒k!)0ܡ1ɠ)E)03_E,1&c1}0ΰYOI7𰍞'tW<'=X9<"yPK7<g  ;  PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$KeyFactory.classT[OQxnU *R(Z!BƧcmv͟/_D?8g)Ph6|3̙=?}`+@Ck<-xb8tQNxB I&兂T9k>WCX楒>Y+S"pdS̺ Jx9I$]ddTr%6Dxmǳ37BBS*o0!E	vF䨫1Q'GP(:Aڐn.0`4^^9oA^QAJ]AMɌz1؍cHNګn+u낯i|x	;|-"̿P.Bϧ9:cX-8He2U=穒C;Bo{1p1z7p@N8mCo<xp^ASH׹Mj|$1<7l(`bZltvP=r<`M{eHC-B,FY-1f-dW,-XHjq &L7mb7MǴ1qL\ĤS&Fq1\BZLѕ:G]pwQ`e݌s.IY]^
X5u%yOB1Yݤ-<X
eD;ZI? Isι
6?W[**w'R!ieu7e``՞O6vN6?agZ5=4~(zI/xPKbl&    PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$Mappings.classTRA=C݄% 
D	A..RrRyf7&e~.RQZ	@z2ݧޞ_0I,#(#Ne7,[dy)/N9ߴ[}fpt3Bq!u#DysA٬fm> m);mm	]aem|9-n~,qH^ɭ9_.f_|<c-s3E.⻎]2($Ύ,#`0Mj3]kVrj3S
3rp\JAVPmT­'-Zա]s᭓ڤј?55UmϘUǠ^Sw
ٳ+͔'_I0DY;3lkcɵτh;&Y!nm]e"~Lsdk]u-5>F8whĩ8Ppc
ѥ:Qஂ^̈́K*d700bM7!D7BL-3eg:ye	'er4rm>1QB`e.ѮVFk>
GU % bp!ax{lOcn8y>x.F<=b 0!.#PK,jXU  n  PK    A             :   org/bouncycastle/jcajce/provider/asymmetric/EXTERNAL.classTNA=C-EJm+P1H,J`9ݎun;K|DM| xd̹wϹg><TDUJvԬa)WVam66+FFqy{D%EKBf!
CxT&sCec		z[9)]@<^{\]ߕk#͐/MKͽOAZX6
IKh5Z56edagVqo^d
1M4M;4C۸mmU{y!`!B

ӮTqMQP0&j$aW"h;rv)Hdltodx(%*bd1Y<{m{#PqL00TwQL`&I60N!Inn?u>jHU*DU< ]6B}E4CD4SS2h!<j$me &H8w[y21p">Ko'&w0{ Z%1 %BǠYϨ']ffqEDPKSh    PK    A             ?   org/bouncycastle/jcajce/provider/asymmetric/EdEC$Mappings.classXwEw	P-4E	w`b%YLx{ްwPA@Qb+*^dI.9;3|޷}
Yt|  a!$N u0!B'Hb8aa1a	d)S	N'A8pl9s	'\@pb%K	.'\Apj5k	',%@pan={	'<@xa#G	',' <Axa%aijZ3g	''@xe+W	ihٯ,
mFa3>FCGw(tL=_54sNקKjv*73Ýme`S+-C+k虓9lDyNO(ӓ/1s&/6Oz83|㙕|㙕|Otx+VT[Y^>BΕ>	X;S2hpQg/sqlM'Um2H^''
MۤNJڔf3IIKli6iaeФX4!*Dz2-*40NHiIRޅLJNitlΈ+
`y
SPؒ6dX]6uޑRyhHSOs#h^|KVGGL4#fPvb30zI.cI-#g_hd}@5wm!!$*);Z96D3@٢m
jv(6h=d-f|fdؤT:iMznϴ]woklֵhueG٢S
OFgj㒲U:![U[5QQW=Q_7BzQ<B_${$PԸBUIMhL.1yvlK`?6r43HG&V<\ŕ2q#C.=.s	G7L_kވi囈@j\>Sz3_wd	zIoxhFUItyoB}~Ș4/!ۊh5f43lp
t-vu=0hre}S(^lf7JoɵbAf/e3ͭ
 0/e{XY	ÝbKc^	nb"|w?c#c6ab[[|VHPRc1JvJ[!Z@W_|Ugϭ˥yb2ht jV㏖

d>
gG*ԏMWPvBٱ
UcV`J,jQ(!lB.6K!LoZeӔM/Vо̭P%hi;Ŏ\<ʦ;P6ADb&+t *t0~lBYB)
d
ƎRh(sy;rтT6XڳQ
P);\!PG6VbjivjmlB16F"ubG(VEZ#bUm%~NAlį&Nȉ9,ؿ8 yPOp7ϛ|fPKHh    PK    A             6   org/bouncycastle/jcajce/provider/asymmetric/EdEC.classokPƟnKڥnnNH6p2\baΗɵޒބXؗR_ ~(u[A0{yr= OM&LX&1d*cRI0_a5Vy%|S?8<aȶdGqƂaFQk$z=ֱlzNRlsO$vm@z>WR,\bX9Wu+<PTyxDg
S
<@]w=aGqؗmz=Alf${s38u2eNIա6eT(X4d``ubcrUgaqD/ڴkoҸҽiRFgxm<aVQZ-<buC'*\cCD|1GyPP.*#u4#amZ)Pd6ΰ	2#ΰ(g_8C)(ޡPK.X  Y  PK    A             B   org/bouncycastle/jcajce/provider/asymmetric/ElGamal$Mappings.classU[S@=֥
An
PJ[錎O.etÓ7}QgmӴKq<dwrM~R7	n&Cp}C		FF	&(*cѱ7	cU4S[	XDbJxIMSG$OW1Ogd^Zt9̊0Y1XzQ]B-.k_-v*{v"::;\ia,{aIO<LR^/:K d$Mcg-&I˛U}#}3e7MwLYψ}'bl>\9oDXb;DPLp#+!~9BB=ArOV*U4R&&o[,D3p6U0YY<eڠ],޹ժmհ{Βy,;\W5Gyzr[93+N9%><a҇)}xÌXB۴T<TݳY}g_.=N	'yK"w:8U;ElԨm
+r
 F cX
9<r;^`ŏ9Q?"V; 3l	D
}:m&)%E&Hy}1&]%1#@ahZ,OAED3rdE>䀋=$w]uQ|E]"_wQc166ƃ_&wL!#rx-F0MPKͦ#  
	  PK    A             9   org/bouncycastle/jcajce/provider/asymmetric/ElGamal.classJ1ooumy<`o/K(i]eX>%f+%0Mo _ 8&4/$5yz;{%2\E#*abeF
bTuTvUdJ'"<e|񩾫au 25

	F& EЊ"X's43FU*Kwq4>SOT	h_
ؒ=|PK- )    PK    A             A   org/bouncycastle/jcajce/provider/asymmetric/Falcon$Mappings.classVvFD~vT~T ҖH8
ց6!N떖BeU +9'Gi.is>F;q 
vwO3y CN32a"%8C2$&a 5PXM	'svCoip3uf7st\| a$LfLMKHF)	'Enud[wtLQxFs="4-csG$>En10_]5:uA^2ֹMK",EUD&_͝^=i,fzvm'hϺ^Ckao3Ckis-REWV-	0J#vz^[PY>LɠQ?!-:hwו?JPe":o9jB4
T3ߪ[ג0GwG++&v?h5(u=rf谅BɼjOBn5߲\7-1ۧA;ݧƾ=B_X2tWdddLJƴ2S21U2;OI> $s~}ˬH]J+[s2][S~]{h>:%RrU)8|!`LTPp
ygqK-(DǸ7(	'ྀye	>,*~c7eVF0E	f7LĚJ)9(ؼ2cˌȒ$'JCQ3 H2 as iuHMn-=zZLjb?maLҪl? ~KQ!b8PnaxY8rzI*&~i6Cpym0Q-,h߾E	z7ѠqƧHPKO-Č  
  PK    A             8   org/bouncycastle/jcajce/provider/asymmetric/Falcon.classOK@_ښj[o*V,ExnאЏICHѫ̼~|~ >~|2%.S+ɕ4eZy-hfFt>QLL,*2z&"3.[TH^,/S%ƕ0VEjF3@#@+@@~ȸIF!j.:kB/yiTKÉ1sv6yy͊6\{|T
ha,];܇|PK,o    PK    A             =   org/bouncycastle/jcajce/provider/asymmetric/GM$Mappings.classWUǿms		TBi&,hX
 ź$$L@}w]G=??{GB&AI{MϿWBp!D	 apppn0apap/>B0F'L&	SiBp?a <@'..&<Bxq	=%s)Vh\+.fH:[*]_N%%tV)-g(vTYJ8P7LFǶXĠZ||n29:-AvU5耧yp֓DJY'fg,`F]S4sJ5TSb:3cߛmsG[~5[tm2]е+UwU_~:xluG<k2XTLXrgIWU%+F.Mȍ4=Ff..zFl]
d*U!!ZU	TZ||w	XcrY˒0\NC4 |rB¹I-+mߘT4&3l3OzPOa25;/2<)϶j+NT᭩eD¹|x*9^Q3v<&P^^9r2 :c[j云/<.=%s'!vXeʝZqGU#cE6Nng>n:NrF {:^gȼ6*e!ۺVa~]ʓ](?}|aч'|P|HaX|xzz3zMߴ=-<,9\_x<dT *%.9.\4.+\.sѹ\
\\B8X g8g<s./ry\^*׸
.oryW].X;oG no\W,KeLÌc(1 *ľuw=q
? ftt, M}Mr}t
w|6^v7'vT`7'ħ=-SQ*9_PʷzaL>M¾ۼ)0o>^;(0|*}*{a	r;N`PKͪ    PK    A             4   org/bouncycastle/jcajce/provider/asymmetric/GM.classoOPƟˀvVPs&#..A|yww]ۦ]/ jC6a>{O_~ xG&Ls&,W2Y|0[a5jɱ۝ݽcli,iٯ<IdrqkKT2AֱJ y{IHc__iB&N_&'Jגyniu!JyG1j7=JOt !({~[OݮSG
!93;vaʣeT
X0P0h`/$Fd"N&66ܚ$Id!XYQa9\}ZئBhR֞9$(.4SP]#MHlPևD
řS~11{	2C+O(SW<@dl6#;CśT{PK
:  Z  PK    A             ?   org/bouncycastle/jcajce/provider/asymmetric/GOST$Mappings.classU]sF="oAH	C!K.N*6"q$`e3}o:+ɲc'v2{{'YdY1sdaEI4C,0|𝄡	m7$hȚk/J[oKmw\uX^:,ak1ER0ޛ037+abĭQOOe˴{Mmpz|a?
12ZH*Ջ|P*]NKuH;_~eւ;Ξ3#MʼR"嵚aW$莽aD&x}_w>fh&pjpmS+eVbkζuUCn5ٱrEv-]:\$,E/P1R+"+Ye_k׸gg4ݭ|4|JS\4tP1lڰ$\r7ךk̓07]*2
/jw>W c-3_hMBoU\DxbQ0-ʨhQ\l]je	#	%p-l	\OVc|/ә,}bSS+mGӹT 7?Tr`δ3 aE_lӃ< W	߻\[
CSFWe+24枌Qq0X@YUa0x$$2ʣXO睊sl*|{AΚqZxAq5htL[@D0LiEQNhctL9xp>Q>ʉ M_r
z<hEZ9|Y,1b4#9F&z~$X{x&P m܂PKl  
  PK    A             6   org/bouncycastle/jcajce/provider/asymmetric/GOST.class?KA]E	j`#͡P"Ffw\&e%XP$b+70_ .OԦ]B\Dƙўp^sZ9ii#feH'-STp^Θ
#_EląhC^U
&ڄZ\LyeHsQZSƹr8BC@p*"
Bv˵Ǔwk˽źýPK_
v    PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/IES$Mappings.classR]KA=׮ZfV/B&(` 봍2
hUޙ91::4)h'Hԅ+{bñ=)qI6j[=.ll8܀Is=958Yldqs"ri2>VbRXྐྵ#Io"?JV.#M&µ}^E;ewC>
Cۦ 
i

JOA_;#6caM{*k~TqB48%5zM\6\I_O%dTbE@
)<Q>~2@p	QE \$}Y	wseSgp$PKb3#d    PK    A             5   org/bouncycastle/jcajce/provider/asymmetric/IES.class?KA%Iص"6GE1l7w^XV%N"!20a~|}|1~~1%n}Jjd\"f*/1˗NUfDU(|eʯSVk HF_D"r="pOQuo  Ox%5P(B/ʝ*[rcLe{	mb9fG\G<lм|Eܻ܇ PKt  ~  PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/LMS$Mappings.classSmOP~.z7
JQA[
ѹDC %YbҖήmG# Q?xY?{<so qcCq4C"axKz2f̺u]Vt;۳AaNyx"6I	ŭu;ڦ,TTlbHw$1\VAN",a*cas|HySe~~3k#+_LdI,	X\E dx'u(5N#MU0K"֌g34vs%یv,ۋ䑴42$Q+miԛ'cvLɶ.6.5QA3Ɛ^kdҟH[G~Pp[wSpaywk{M/]&rg2}3tr'FG6t՜|KxSHP1TL`I$cC)jlI
0Fk9ߢx49WM[SAs8ie-b[@W$ /i	,̧S<	6cOLn!-		ST',֪gl9% PK6j  ]  PK    A             5   org/bouncycastle/jcajce/provider/asymmetric/LMS.classOK@_Қj[oCAP
B.!!ЏICWy3c qJ_]bwy0~!R"&T+GU.Q%tX0U2U,b,uf
	Y?8pBMkW%JL3?SY0>>cķjQԄnTqsx*ʤC6α33Vϊv\'|мzwxq
PK8\R  w  PK    A             @   org/bouncycastle/jcajce/provider/asymmetric/MLDSA$Mappings.classXi[W~GԹ@piDZQL"bD6!
LJ}sv_RK[~{g&	:}3{ss -FFNAp&N<@ C^->]	;v	BD 1 N0@<I "P	Ri(a
XYQzq7HiNyl$ScPpk+l06oi+,i=.rJby뤔-)$*eFRrhʹ1	z{\=VOصkw7*WB,ڔ嵵.]@BAbQ*X5}JmRWf¼Q.^Ӵ]KZE9M|/i֜Zo]Djx-+&~fR,ƚL)!2XhNQV/ʩbMӽ
r^EhRW)`HP"KKaIHZSm׏w[7-Ed*Kѱ$d`TTrT)3)%Jan?۬1<?vAqֶmL[d
l͐}6C&m4l#};G;<v8*6"r~P~_sn;3Zsh/lnֹ#{loT[/
J|R"Hc52,O1GJoyWߠbQ~OP>YUOw ;uDZ@s'S19IÊO{qփxJe7
St!r!2!2!yH˅&&8^jrqHFIx&%C$!∈1OxZ3"E E/xY+"^i\ͺNukҨIHjfR<TflJ~isdm.UqN8iprqǸhEx߁=\a%^G\|'\|g\|^7_sMLqq\\ƙj/R|_2Ʈ3crV[j9NKH^A$6J4<6&4^%-A>-
kt\@K5UaZл6ưQa7&J=Y\i3tUp~]h}sg_tW-;9cu\Ǚ+8	.Jײ'6:6n/Mlݮ
\v]tkxmG@7hh:Dat1.%^-%y.-LTKԘMh̖i&4f5fl(1\Ik
:
iVGYO~/_Y6uִΙyo- lw?Qɶ[1sLg7O0;'){gaTPKTu    PK    A             7   org/bouncycastle/jcajce/provider/asymmetric/MLDSA.classOK@_Қj[oaSABEPn7KHH6!-cy<PRU7o`?>\P?=Z7N3/WB/K3c4OˢټXhLTT*VV2TńY干U"YEF0_B|'aod"2ѱS 5Pmt	XLd֪
3a2{X uN{.;G뻮ܤq@oq PKJ[    PK    A             @   org/bouncycastle/jcajce/provider/asymmetric/MLKEM$Mappings.classVVF
ђ4M$
`aJ.
4@ꀱ4mz+la#K$h򐬄}th0d@Ùsٳ_ b	>egs_01dp×wb57i&n<0-ݓ06ɴu7͚$s+ˋ9	{e=iuW:wq9ׅ}(nt@{2ԙ위x{u35[ܾuGW*DvWkHPi
)H2\]!h`Z[vƶv3	>Xٶxu1	tZjgF1_)Ӊmܴri$e^6M*
sx90).x)A&Dѩq2 L$(փbIX&\\tf≺-{E
 kRT/RDQ~\
Dp#:pQÊZF*9CZU]+Ylq#Y7^bXJH	h"Z־;f<7ܪAy`^sj^`D'xթe7iMBmZ˩{)w0ddd<(cICx$cYG/]\Myb3qg'VUՊD٪fWmr;NV>g| Y_|K
n{A$(E	
~Ͼ%UE8xGkX/~0+d-Sw][,RXއ:Wi
H>q.Fhh<;?
t2hTYWx>zFeb6P㪺==y	jXEu뤲ULمJz
6H`/P(J0R8~{Lxs}^xs{~f.J{7);"&5Ndz؝S+5Rys1zylӸF4PKw  D  PK    A             7   org/bouncycastle/jcajce/provider/asymmetric/MLKEM.classOK@_Қj[oaS/BAQ(^%$&<	 ~(q[)*70_ pHM	D'֙ǧKRL?R%-Შb6+Z06S,"ULb¬\*,^U!-w&07sLtl|4=4<<xdųu6FXXTd֪
3a2{X uN{.;G뻮ܤq@oq PK0p    PK    A             ?   org/bouncycastle/jcajce/provider/asymmetric/NTRU$Mappings.classTYO@&.K@ Nhr<!,4ة PTQUgYo?Ö2ȸ*W*㚌>d<Hc&C״i+t!MLݍfw7j~4--
+ľ
*:{_OUt.;Es9vLoӋEn
5%SBt+yigJf!˖n"669WL$dE1'Lf2
uQ*9m;]#Cw}C7HtC
r]~֊Rk/[>r?ݲIcS|Mwch3}nx<sk0Ӫۑs44ZuX)1p	HTI)
7(ؽ-}٨bbP&kMX!/`[9<owVLg/ᦄ'$<Ls	a:懓^[_<C_xpU"u:.ă<Q#,G[IӪj YM+-mRsE㐵vmJ;^
naTmwpO}.AQ~L(IC^H	R+	ai3
x!@1d9zȔEB.{'W Wkin_/Ρ}+Kqn{NQ;hGDR{*RSo`Ym;ƇX:1VT9DAd6\"S$[_\o΂cAűXPq,8TkRPWc|lM51[k/VaV
Q|F?PKw:    PK    A             6   org/bouncycastle/jcajce/provider/asymmetric/NTRU.classOK@_Қj[oCփQZnKHH71)cy<PR*3o{GB<1`q?=z\HIi#2yeRI2/*LL2_$3]ƕUH8fX(6v9kW&J>ȢHLl}4=4<<x,@
A]B#gЍrc4n"`d.LZ-dc+#@Co5h˵×Z_Ͻs oPK  z  PK    A             @   org/bouncycastle/jcajce/provider/asymmetric/NoSig$Mappings.classSn@=uJr@I/D	H*)jcoF:~<$>B6TՒ3ΎST3fH涕V+\SZ$H:zJ>u$]=C!:+Ξ)IGBDJ{*d<|{8	vEەN7
Qw:TomvCXWgV[Ɏ'ubdPjKk{4*:$ܾP<&og*Z|71/}$`-\pk6w=zs:9r;y䮗\5k:4Ynka	(6i#g`iyܲ1;6,5p/e7 %<4P48(cfG?cIK
X!yR`C_dl~9%7DLm򬏍xz|Ҙ%9+
 PK?%N#  "  PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/NoSig$SigSpi.classMo@G4Rpihr8 qHPJJOg6$eo"8JΏB7$9`iw43|xfS<.Xΐm4FVdZ֞K[uPr7\ON'NGؤ7
U@PcPT ;KzlJ3ۧuސOkIm{GZ/?[Uҡ̼i,a\M<鸒
̞3	sh%Ls/<z2=:*ᖆ65liðx7P=8^Og˦AE݄? -]o(,uLN\[BcuOӊ}w۶w2'H];P+>$m$#?eȽE`
gF1%, tB].A;-@t&T"^HpX2YUÅdɻtߠ9b+C3vqPK|  z  PK    A             7   org/bouncycastle/jcajce/provider/asymmetric/NoSig.classMK@GTq&T<P6]tПIGckYfaa?>P?>kmtqnJEr)E,M(

Y4Y`ȼ2
fRT|5"Ӂ:FXC$Jp13|iM.6TдѰaٰm>A
A;%&/)&2^p쌍Q<WNZ@8DfE9/<}G
(]\p=FPK?c    PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings.classZ|<l$!$[މ0$& 6qȲ(qd#]нݔNKiƌ
euE^4tB~o|oxλ"`A`~(b	I)G#x&M\O</"x1K^J2"x5@F7"x7#x?>H![>Bp+G	>A)?!)~N_<N+O8$\Lp*j5jA(hG(E ԷյGC	chrP<t(u}]C݃;ةg
v(Z.ۇyZf5yY}	w`G{CvBjaey766gwSݴB7-4huϬr㛍[ӦSꭥ1-
]ʟBv*R.29N66wvvnGXްjʽE_{Wf{vWUx#,mѱX(9eDgH@][X9\av\Y[R}ݝn&!(q\]=
C26ԛF[6[DS*B]%d
"G!ZsaC]ف0ϡsaȱmpr"~L8SaaCH,Y5_榶z:%mI5A*{"Dh,$VIJU#Lפqͷs9,HntC8˻d`H2+d'̑rgTAp\͈(Q[*򞢜T2
_ZZ*ǝ]r\ex{IFR2]2Z1yFdvvt׷g%f最izZV$mo*{Woz{^Q6?aqU97ʴdبǏM&1ѳY=a<Qk3xtd*I ,5([:>v>kߡYmM
Uihr2""-OEǔ2rTh{%DG`T2dXy؞nn5	
!>gpapp˰WÉa$6%\NXpex*:>*EF]fwuzD|ndb*>%㑺Ёpn2>q8ԅ8~;dZUdySg׳sLcǩNX(]"Hiܱx6%#}cy	<52
+mf@yp{_vy Mx'n}op
ܲ#K 3`;41Nм<=KUK<QD,"񩙽8]'X'xGN6| W̚#9BYEa\{Ӟۯ9=$J')^ΝH#'AFʹ ~ǈ+ ^O2r07e£P-<ﳐY	<2}^@;D{ČLpu_sa.ÛpgX!sa.
F\\\wZٸš|qsg'sxqͰVZfa2J#$h+٠MD*1Ww^<΄F^<܀ݟӽv}H'E
fὈw9?	~7#=D`@oCȁH8=%7zƱh"H"~MlvwIFyS sі^&..s\d$+D-|#!`*j0]Ԡ]T={BXB+Ϡ`ۯyUAhd<үmyݧ`qQ<ؾ	p$OH/:pCr\(U,[J,xt2rhT^f_f@Eb(}8 ,vHΞ}MCXYaq&)eu폒O&|mgBFV%9M##_+F#x
k	n x=	Bp#[	n"x	C^|>I0Mp;wEiMYCy/|K|!-~O?!+N	O)sHhVV#\@0@%Ug.'\AxJ³	WCx.y5k	'%#6666^Fpp/>~Í>6nn>"bv l5scO]4ʾej/L捌u5]
mᯩ-WS@KBrφdO㜤}XGN3=M̀[8wN7ӎuVwIAC.û11-s11A)ȷ 仂|O
#A~	]tr ;%H 	/ȥpoq7~wp?~u ?c?|.~/K?|~_WQ?	2*ZA*  O
Ai&S2:Vߕ7r0~)'CFq9>lR!H Y()HX%
R&_y,@( cHc<HuɾlW$C,9a|>@}@,!-Y7mlM6@~O}ozsy֛.͕
+8r[`q,[B8UZ<+8,-v%knu9)c-[_T|ynySs5bTa6.1";lbEsYs՚`>݅\>m[/op$]jU6mͺ斚2[ovZsq[7Ǎ:s'm\f4/6wٙh7dTYJQs,nŝiqgkuMfмtha݊=^劽!^^nfvP[L[# 4v(C<2I$Hfޫ#'tLRJ
)aD{,4gI[h,(%8A=R)|8=V)j91,'>d9pGYb!0PSƙF2;|AXfxM _2QK6Unw3WW| ԬhU{0*[xiK/MgnXz&sүW:f}U1m4:,e/Og+J	\צJ:ސ2Qu)Z	\WEJ*e,V)=.kRecRYq[=ߨ8>oRީ¾w)}?8nűgSхjAE)\>槥l4mNa	)<2 d `UܮaÊU
BX"|IXa|V7
36,k?VtEb'79f3^|]?SO)ަg3jsI->Kk}+2G,C%-^	VU(}mJ뤪TJ\lNb+?$6ʰU[2Ubf[fܵOM>|ԇ]}=bU!>(NBrǭϞQ6_ na!0Ԧr9p#]BN44,ނ=WǱ=l' f,Uųi,I)漘,*,%V!Gy]r%y]rXU1]S{4߲<,EN>TAL
3CFPK@w"  E  PK    A             5   org/bouncycastle/jcajce/provider/asymmetric/RSA.classkkAi&$zI4BP҈!Z?N6aQ^>(d{m@p?̜93_t:u:R!m{h4YI~jo!uX
nT MG{rEn۶r^gXq/$:UJXMր	;	3;v\J3K#1'}z[1+Vg7<dMD阽 #	s`-P#/ɣp(o۔7,BkX%C?2C
ccYC^CACQÊ]|gauvl^vgYgB6SQm]}Y6k{4na(e"n̐n}\3#}uȽ\~2X*4sgpI#M}(iS>qG)@^G~瓟@*HM?㯨P^qj
&"Ud")NZߡ"PK[rϔ    PK    A             A   org/bouncycastle/jcajce/provider/asymmetric/SLHDSA$Mappings.classZ	x[g[=|aFv i1Wuh
[#ZAJwzwMknӻISzIKIz-%ovֲl-$+߯foFˊD='Lx
TBG'$	ABp0D8HH	#@x#M7Bx+mAx'f»&^'|pჄ>Lᣄ>Nᓄ[	66§&n'|p's'|E_&|UJKS+;bC3SDP&X5avin`vym
^Scy!Ee/긵#}̑7˃5t2IIu)#gUVhcQZ]#1/:<YSxP_:jl먱92o{[z^yTyN'W{S<W;Or~yכPM7/gD|(L*=.ݳy83;|(w/aenw[[ݟv'ԾT2D?oL*;xP7Ѩ'&쎼Ovkx012L
xV`qw0a
ZCVLM{9Zyiŭis:qtRI|Mq| 4C/@)CiNXZp-a^W=ёm8ϸw#s3^{&]}(5ԟ\[;c֑b|r;I-ڐ! (v?h-?h%e;Kۡi_x}ѫ^xva{ΘbSZŦtکؔVؔQΒs_sӋYtΙwGnG)׍9+yONv2><ʙwbClC4?(1+]l_'ͺ5|bf͛
KLXNY.sVǄǅ~jE[##[ig=U?l@>MAw_'%sSʦ9EW],+oNf%a;:&azgwn c2Z3pooAi"M4Qv璦B͏"eu'ŏ\ Ǹbʮ|Lͼ߇LRlQp*x+x
^E
^%
^e
^
^U
^5
nR
[C!?tY_B8pC[~+*+3
ଂ<`


LAr/B
f*D \*!b@~~-]+]Cf6w= ԟ,b{U	4+nuz:Ѝ v-Tvs]D^Xq瘸|Ks42[,X6*	[w
ťS&X:r[,v2nEmX:UN\aۢuUhqzͮCr-"آuBr-j]\ηETKmQ:B[ԹN\l9#"[4N\bS#/E4ʥ:
!sFrlWsٴ]!7rմ]&7pѴ=[^5LKiJvr]+^ڎk\ڞ#p]/7sMr
JAKlJi\BiR>YrI\%mKy%Iu*k	H;ak0~5b2t'~S"
T̞0{1lL2(Ìb$YX&#rc7	*)W<gSHqxsmisK?
.<0*Z!8AMS?gdU K[~4¸wTģ@р}N|})'4OL/89qZ=%LBn#^"7[MëvQNQ&QP+PKPk0JV# $#	XYm9GgsY:jZgYu:/ΓS<SBU]
td'NxAzb8mlm;sWs~#iV\PKWNp  '  PK    A             8   org/bouncycastle/jcajce/provider/asymmetric/SLHDSA.classOK@_Қj[oa[EX(f	&d~,O?JVJ
''B2թrnBeb!x.tp^T	s-R+IIʪX0L*䯱p(P|Kh|]DY:1>Z<`}$r::hKhEݰ
m'"VUc!8
#ps9Zu&}Hh PKm(h    PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/SPHINCSPlus$Mappings.classŘw|eǟ6`9(hD
"DFjpkzmIKѺ"jQ{QE'MKc|}{=kJ ؙp؁C9TpáNrpsagpؕns;	j8L0t{qao3908V6z? oB7;b8g_(w:95r)Pu*Yk(]ŻjLŮ.a8(5Lݬy2^.-,*ʱӭ-*UJ.Vb#VHl9-z{VH VZ3E+v{
ͮ`GS_u)F`Z3U<j 5i>Cilę	Z
6&?b^B{ޮ&{nU*.hv!]4O>ՇR.԰ih0sZ,]cP^݆qǎrEДEo#kUrg-781,x/P%{YLY*3^rsdOyl%[73c]sMIƈ\xxyg[ϕ0t啥Ło|joETg#]x$L+kXW5#ꢽVֱv<]TI(vXY}-P"D>W=
dCG5vf2H 7(N1|e{vdM4FzLI#il-Lf:il^-M3$57T\&ϴe[vK:("j&m__#уoƼE`[VI7MB͔\
`᛼}Ɨo<4g0S찯d;̵<;gp {{6l%l.)G,.xmNر,Ʃ-TYXiaBO*-{?nGӛ'n=4?xIIVO%¿w< FYp \ !%(HP	MfBA#6B$#"t'A$I8p4±N H8p2© IwYp&e u%*̇0	q/\u	7n$DpVm	w$Ep^Bp~.R	VV!<JXEx8	ՄO!<Kx</9
U7
xm;p_k
BxANMwd'_]5~0T߹+<K	.&g1|)+^).7s9 /+$4!6GU8lQU^!HCmPKC05u4,?4"MW*	:SI#ð[I[a%iTL_&,m,Ribr()*U,sKCbE$b}ccUTu"
8ka7C^;[r-xcl<`z<PPٶI#Ƭj39҄L\dl+*rk)wRqeHk!O!?=!Ǹd9B2Q	
/LFBnC!!7(TȏCeBrQ𥐟_	V\/:!7	A&$/d]
V
&lTӰk(vqφAPKb
    PK    A             =   org/bouncycastle/jcajce/provider/asymmetric/SPHINCSPlus.classMK@WҚj[o! xPD?u]bBIB'?%N+E200S24TDt}>32<:ᏓLIpRT?)j-R+K?"$bNU%Ҕym|3b_>f9)[mW$EY:1.Z:C11:9 롋>C+(XX5^\&w}@aMxT5b+_
haX#C=[G~PK0l}    PK    A             ?   org/bouncycastle/jcajce/provider/asymmetric/X509$Mappings.classJAƿILvUתI`b`&"D H
v܌n݈y,J{C1
"Ŝs{}P)J6";
 [TCj7Y7P"fԉTHHُVMP|k(PZ~<Mh^ψFZ%WiIFg(ƞ@'dC]L@&Zyƨ=37A*a	Oi>sO}h9á
EvwSE 5(Q>Lª,[Lkvׂ"y4;g6
6TB	ܨgV>C@ı46љcl'_d`Ϊ[1/
f
[ 7Y4KoY'HIlhbFPK  d  PK    A             6   org/bouncycastle/jcajce/provider/asymmetric/X509.class@秔*$89nצ٦6%XN?|`:Ҫ\	?qrmHQ&Y8nTDDHV0nY&K&s_dEtl}T}x>j!* u4	*?HBZUʭ1wS->
.A<ppPPKw     PK
      A             @   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/CompositeIndex.classWg@[.JOl0`1\I0&1cjvqRYzgJ	{#MiKHv6iiszh}sϹ:x$Z$Z%$J\!'/AKHxĕ8.ᕸNQ'$NJ<Zb\IY--'ʚCOA3vA@ao63k<#x<qiXWwOH?}4f	Lvwv	4qoW}lxٝv%MV"NEϓޤ9?p(4͡F:i`@uv)5[rjtSIB8Y9q_'N+'&rRkiʸ{e+аJUU⍫URqVNn@]
Tq
Tqj7Ri+i9qPUAD:JfE\>@WszkRuJn0cSɆT|yUb`;U%
eA_l6b89;sOno,b'MF
lČ͹a553f4R(GiOɘV
h.:lQo5IrA)4bՄ[ZAS|Q#a:lNQWј܌xHfؤԓ
C
y4"$f&9=VIOO~#'7)Mk2NEC	K֖SbIwZW5VbOt|D\/UBHC_o4%;Vokf7JTڒm
\W=3aO*4|\$(+Dq>j砩cfgmhPl.uLu`F+{tcXT}sk)4jA&\s^s!z&;Pd}:4}شG±;oQwFZr1rZᔼ`J?Km)'Aߴ
vM_O$3w%ȱv4kYp#fOp(jƌh9H
H|pFve8[HAg)%)Uq3CCb$Z_ĀaAk$8"1$a$4<V4DK5L5B+5Zk4V4ܬnzl%3ؔI70fLzeTdT~d#^~h$?ZVg$cc4ˢ^mWmh9eO2gDy<E9*u
ݼs!{"LŘ{bm.r>O_>|_e_5f)_NhrؗEցv|܁	|pt`a!b3<!e12gF9'2<Oax*g2<ax.24cnN9<uUρ 
.6|b5o~;3b3_73b
w=3?b1O~336|3|v܁X	("-3p2că\l *1|
4w (KǐUO}b	l4C>!Kgyh
gË$]GK/֋S[%qMm\As(fb*rSBy[L%L|%[֒ݞMٲ)$MRJsXtMߴ(ތe,/	|JME455q&:qyF`It&BĠlѰX]Mv$cklE-X7̷%ɱo]QGޓv?e{qvђ5G{(=^~	㥺;^7z/R36١2ReJUFS*Sd6dS2yԨNP*Ee*Y2'u&,oy:)Sz8ƼٖffbK˸0^# -vUMF
ڻ%O,9|o+BâΡ^ed~wY~w"jc+B#
ԯTыMM:
ԡ@}ɓwcg`⻾Po֥bm5j)V^XMzbmCRzr6ڢk^X;jڥ(n]W,PLoWLSs⭊Yʉ*ĭYw*Éw)fVNG1N|@1kb91XP
N|P1띸-a&^WPK!	    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyFactorySpi.classY|SN$iRPAҖ6 ږ*0RM.%&1I:
7R@E&NTpMts~o}߹7MR9~ws} PNa
00h[rƢpSTJ3n`BQ
|ER09YɎr勒7,hO8dC
t4_b_/:a;μWY]]Q7j79jKs9G҈
u>+(z"2d*̈́U
3 X<U=MsiĿFȞt^,J$+뚂ސOE:cUs(^)N)p{Z+;7Yg}2dTİO}<=do,;&(0ɇʕa9H"
2p(XZY]IfVdWYhLutA9ZuCQL/ZAe
d\$Y½K,uV5CW&Qa?CŪS!&TTuJ2YI9m)
(c`z :<a@+*#H;PǞj1cbj!qlrԍ}QXU	Ćۧhјdliw祑PAG)U-r4*Q蔅ZޘSՖJ~Hcҵ5'"dZ.GPcVE7XIXmi^੯hjĲְó^,]K+݉wheڎ=թ3x<)>5zMhL}a=d4Zl@}]>R3
292L&j`BQјHMvNfqKG"E95#A,nүr9OC>xtN"Ejv\"ٛJZ/(tRGUYSk
5mH	*%iRqhC!g5>.ZhLƭ6C\&GmkWt7H?]Kzsdxح!Owm؝Iqi$oFlo2(wo4߼i^dt6x*JC r43!_(E׶HaLAy̠@( ?WJRJQ6?3kIyLKŠ8rko(ӵt`Zv=^(-hZYtNͪ68^ifNqTq3q՜nOȻ{"2tɲTJTYu1mLSper,҃hZ2M&hٞ08Gx@uΕu5K>Ą3YNhf.MDCA)Q3KAov^gB%i}yu^:z6M{lͦVZcME>y#OjpFcO,<%g4)Kj6d|׌ʘ"P}DM߻Zm4[ߑN]b+X'l`]bDyz"^V_D=Du|(1\
h%O`wȇIJ]Yfg|gq89pI&sS|dk8tqXa9989\!!!ơWsk9|8|ua9|8np9|-n尙mnp;9l5.\|-{>Eѿzwɖ)}yqo{>Z~
XX䞩lt+hf,:uUJߤ}C|~!
/0_𚩧'CsY#RUD:Kdլa2s8Oɕ1vvc
Hʬfruϑ32j.Π rYMftԯ]3~,`+ЙIHTb5%d"j/`C>.Up\Xݚ3i>?لt^s6[?ڴ"ͽBIAKtGe`DL{t82L[;7ezEL{A(,#>3|ZW|TģGkGG#S
f/lpK\@PE&XD`	RO,#\N`Jv+V\I3%:	%Fp+"p&HKp
Vkl\nm0`,X6(<\6́A%A-.!x`,O
A=2'5m!=IlD0>!cipupl01dY
f2
Ty0Y?!b,8\	LM=-}6*jͱY-A?bg7lM&bO8L#83.$("IPLPBPJPF0IPnXANss	\D0bK		4\JprVMg
27
o"V AjCwYlAPk!^d/	>gdǔ5Vxu [Lp%g	kL"$qR>V	>o7HmN;
e[1L]W6\MpޣO[B
?g_ȃ=lq<>M,|1~Ƃx1jj$z|ImS	xUkrZ:ղT-rZeZRQZñ
M7Ó}3,sYig!C֋/%ϲ]*rfl\[u	WT.9=8=	hvi-> bx!Ki,,`-0R
=*]}x%cDL'6p#DFЄ3kgpw>v?նȽώ+ah1
e8~?{Օk9Xh\g/a l'	v({vy RFCvs=LnN7؎ӛv;NK. >G\s?c.(hsXdw%%Ѹ+8ۇgnE۴nm|Gݔﰛ`~wX=r2Þ#) nMSa5Jɻ\CJvЊA>/m+iE74\Z)j`{j|xW\h%&`SZI+'*o-:mڬ).޲~'Vp솣&@ΊPu/4x
&pxc4^f'8rU( ´`,a
"f;"tN>SvrTǤ<(8"P+p02g4#$R7\ь}\մvi}wKɟ\,OQ$+PhnT}2sfewd%8; %mYE?ke ]eGb7rƤB.n1May0,b煸ُ+Cp,^KӉJ`bR3\IJ#ťv`viQ,%C%Ki:ޥDpݤ&4P19'=lk*I	a2DO"lN'sl?{	X(dZQ M4|S"?5OA'INi	m2=-7וX.cK3V̧\FvCa>݈kU14F=v#v@p$]ˡS0zqtE1ۢ%.4[a '	v`LFdXC9RY&z.PbS.zF6>W)P+qaNY_#kpnR<"1V NBL2"0C.+N2]>11 /'ػJ+$O*/cJ[ W	vb7{X'zR"^t}Ji|[4uZxNxsTm;ƿ}vC{S=N`nI=nsk;6o2w0-zN˭zn۬r9JrOۼG=G6=zn7[&ǒvxf[nQM*ߡen2Z	snNmR9Sԝ٩[4ދ[
-9k۴nw)Ցf힬V-Sei!WK#tjQ^PKH`[  .  PK    A             s   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA44_ECDSA_P256_SHA256.classPMKQ=OQ-[hÂ($3a獼Y	ZQSZ%.Zt/s/s?&zx)W2:alF7-Q,
A6U,ƎKeI+1¨B	`Dm'|
CbY&݈Y2qN2#-9TN5~Oia3N$CSW*aCḳy!Av`ൿ>a~%l0ZYB~[k[ca9e+Eeǜs[mW/rt7lXq8g
PK*  *  PK    A             p   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA44_Ed25519_SHA512.classPMKQ=O1#pB#xB`(,p+ϙA{UE?=Uiѽp?s﹟_ 8dWk}T^2Td2^Ea1NfDa332=ly,ʒVb̅QB		{0vRV>I҆!ZHcS=˄O&dyM)agia3M%C'{(xPd8뮬]^[9eGG[Q6C%w;=Ɛ{c`ƜquG(b
/?3.]^PPK0)  !  PK    A             w   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA44_RSA2048_PKCS15_SHA256.classP]KA=m߽ЃF0QbP2N263z	zQzJz^pϹA\/@$]:|?zuЫEmPO{DӘi3THÕdCʴ`F{F¥+M.`1ĜU,,t4Fhja}DqM|aBp3
ǂX `Aี}nC\_+]Y\dZr4nCZ!Ӛ[wjEςv3P8z6^~nl->CmcPK2  6  PK    A             t   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA44_RSA2048_PSS_SHA256.classPMKBA=S{e_v-4IyEQ̤IFť?6A~@?*UE{ν|~ MTK"ؗItߺfaD,gQ݆STi/xscJeV|HQ5*Ç@Ķe XбNe"Fj8S#0ha蝘v7B	mX`=X.y!k~A@+v}dQj
X#5DMm1I`PtЙypμ
XCgfŒ3vPKoDXF/  -  PK    A             s   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_ECDSA_P256_SHA512.classPMKBA=S{}Z')D<,J2}M2⛑1g&hGEJ\^pϹϯ g8 ⥐^4~^Gaߴ]f+f 8WzDj&yp*Z	eFT0h'셏1Ol'Ҋ'!VㄍNZ=kG12nHh2r#Fٙy	}%*MAkPHp]ټ z/h/<*>r,Ã_A	[J9ߑÝյ"@!Fqu(b
;/?3{.V\^QPKa-,  *  PK    A             s   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_ECDSA_P384_SHA512.classPMKBA=S{}ZWE<,J2}M2⛑1g&hGEJ\^pϹϯ u䪵ARHaE?4]'g81WLfS!-ג(32IF[a'|yb[)V<	
A&lp:Y\;iqEB1N47OL[.fVh,`=XUa	~A@|P<eNo-m1)[Yz/rf<nno^WlagfŲ3*PK o,  *  PK    A             ~   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_ECDSA_brainpoolP256r1_SHA512.classP]KA=m߽+)D,%	.::̌?^hν=S䫵>ABHa/	0\Ea_܌	)ꍦ6lu3Gt2%ؔS!-גP$><!V<

A;N84IvɄ[-I܈dvw|cBp5JG xUPHpY2H# 	h/ZG9
BK
9ߖx+epJDE\_ΎÊ]|PKUe2  K  PK    A             p   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_Ed25519_SHA512.classP]KA=mރF0bQYૌ7YV=Q(=/=t/{S3䪵.CB*i/*2ݷ,]06
:C#Ϧ*%q,i%F\p)୨=VJ'I0Ka"	ΞeJQcZ&<ƓHKFSMQH}C'aG{{XP`8i/]N[9eC6JQ&Cු;9Ɛ{c`scqu(b
/?3.]PPKDT])  !  PK    A             w   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_RSA3072_PKCS15_SHA512.classP]KA=m߽ЃF0eEh&-͌z	zQzJz^pϹ[rKR+=w?|tV
;z֯yUDi/(6CN4\I6LK
&mm7i\(vAX%"R7JD4JFDõKf&ki	u%W$*`_肃%y
~~;pA@t]dQrr
X!Փ
iׇLkn]=
b33v۞@oX{ٰdoPK!q2  6  PK    A             t   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_RSA3072_PSS_SHA512.classPMKBA=S{})hB#eE0(LpߛdDjQZ%.Zt/{ld˕AR*id7YxZYx|tVڌE6UTh7xscJeV|@Q\q[C/bHI
m~,H2QLCaiGVS܎0NL\6l$	?/CÒ<asnL__+Y|d\Vr4~Csnp.>:5<3۞@oX{poPK.  -  PK    A             w   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_RSA4096_PKCS15_SHA512.classP]KA=m߽ЃF0m Eh&-̢63z	zQzJz^pϹ=l'_
)ûukCWn^-nwNHՐҩffĩ+FiQ$-V̥+M,a%>+K1Q"Q:ZP23U\6P7\rL x.89Xs'8,}_]JE%-
\39ےVqsĴÕh 63mN^[KQ8PKA2  6  PK    A             t   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_RSA4096_PSS_SHA512.classPMKBA=S{})hB#^ E0(LpߛdDjQZ%.Zt/{*J )WG2,עGVXnZpNHөg17v$TVhGP>"D(+І-a1ƂNt,l<V˘xiTCĬ˥JhnS&@j	<<yV/4Y'-eEGExK(` LAු;9's#3E
N^K.Q8PK1}Ƿ.  -  PK    A             s   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_ECDSA_P384_SHA512.classPMKBA=S{}ZWFF<,J2}M2⛑1g&hGEJ\^pϹϯ u䪵ARHaE?q4]'z݅1WLfS!-ג(32IF[a'|yb[)V<	
A&lp:Y\;iqEB1N47OL[.fVh,`=XUa	~A@|P<eNo-m1)[Yz/rf<nno^WlagfŲ3*PKwBe,  *  PK    A             s   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_ECDSA_P521_SHA512.classPMKBA=S{}Z'IE<,J2}&͓1g&hGEJ\^pϹϯ '#}T^$~\Gi|r95A݅͠Ap!dSg;T*+bcʌ
dv
#m;')!#F\ЉΞe"ZrʳtiCTCŬǤJhf3M$A+PHpYڼ /h/<*>rX/Ã_A	Vܵ13F8e+EC΍8-5P:z^~fv\<G
PK$g,  *  PK    A             ~   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_ECDSA_brainpoolP384r1_SHA512.classP]KA=m߽[FF,%	.::̌?^hν=	rjp!߷~_7܌{	)v5mx)==5$aƦ
i,Ȁ
&m7mQpma	VOϵFjD2eF$c
KU:?-e֜Ya~qN@+W>r(XJ	2X%7TM7Rfw!/dJNdZ7ܵ3ہ+ްtXvsoPK2  K  PK    A             p   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_Ed448_SHAKE256.classPMKBA=Sܷ(If2wy<Vm~T4JtӢ{~=s?? ԰ǐ.Wz+f(ɨ߹	yj~p緛'gA2U,ƎKeI+1¨*B	 ж"RV>I҆!XơC<ˈdy'*aoQH}K&!=d<y2w.A[%/e+"B)X@FCܩ0[V*67<ۮ_@ozq7PKǢ^)  !  PK    A             t   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_RSA3072_PSS_SHA512.classPMKBA=S{})hB#E0(LpߛdDjQZ%.Zt/{ld˕AR*id7YxVYx|TFm"vUTh7xscJeV|@Q\q[C/bHI
m~,H2QLCaiGVS܎0NL\6l$	?/CÒ<asnL__+Y|d\Vr4~Csnp.>:5<3۞@oX{poPKn&.  -  PK    A             t   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_RSA4096_PSS_SHA512.classPMKBA=S{})hB#^؇à$3ic|o'3cϪMТЏFihѽp?s=_ "Ȗ+T^$o^,zdavmxRݣtI̍*ZFTri#lݾm#')!`s~#>DhG12q:FZadOq;;1isoT$PX9K͹3
B
~A@t|dQr
X!D
έ1I`(:Ԉ,n{VWagfŒS&vPKL{/  -  PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi.classXi[W~(-
6(:"Fѩ؅N&cLf̄JWjEv{U7?KSsC1	ȓ{}9w9y -%%X{֮O@];tv	xbIAWcdQiiIjv̈$kjv*FЌ:!ҝ}R"YrTSJM2b0R+EtCJQI/4| aE+#7!XSD
НQ(֣RoeFo,ΆNf%(Ѩf4C&N-`~Hs:[맙z2#QSpa;j	D:}m+!mIw<:WX}PբnnnZH	wXXD3JCd)Kҗ3tul̌ndWIFhy-SqP[AniL9GԙV0c:*ּm4{;aMuAWg(ʰykJ9u3)G-sDx]^uj[CҞo0k#yw2E84kmv+_ڼ6'NԲnhKnnM:h	,'	mi+\Yג;F4Q9Iʩlm5Mk})5Ι͚9Yɖms$g;!f;!sk>蜜HNlz|YӑoZl2YS%9*R3@XSR-2#)@ɲ̠%Jy=)gp3g0,eXPŰaPp+m53daCC=CC#j/CC3a
CC+CZuNCD:TR+#^t>$ŵU=嵙hL[
軪TZٝR+I\~qյQN2q}Sg,gEwH-wն26G'dI~E=%em9Z͸z3^waWBQ"El"n~aDDTQ"Q
+;\ĸ*(A1:2q.pOV<\6<a.^rpqWxݍ^>b /sY.3m9Vl[WObb¨ELeÓ8HKMSftW̔ W]#̕xV]#I̕yr$_},\Beմzh)2~dp7BqsDXDbD!kzF³x,՟}$kzhap8;XÉ2>饽St	>O>>	lqSV8xϛcxwo_<NiN	hE
d[LnP`$ܨ@!} 6E?(uH
{;v榤3
c$nߧrµlsNO=}BJv3NTܪ~U%$ANEM<n?@
*>jwWy\c@nB	ԏ	_Yk=O%M/E,fb.c5CoҮvҷt">	'p7Ꮔ?!S&|	%"<CYBp0@8N#F?PKk]w    PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$1.classK
0'Zm xq!XiSڤ$iWs<o30	`C^AFoeM20S>4k)jIsv9.ض\ڶ^ZzGXtϻ.K1I1eXlڨV'c=|9| `=Z6gPK^W     PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$COMPOSITE.classNJ@}ĦŻV$z)Drnư
[IQVK7{|{p#`6RIw0͊eQ7ڴ|7JlEmݚx'N~
^mߓ3RpA[Vnc򗖃d_al?omUʯXu$\ސrIYkNkْuy`I1abHrdZH뮘7g䌱ˏ&s8PKOz     PK    A             g   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$ErasableOutputStream.classP=K@}{3^W	vw6ka)9,"`cÆ$v7W
`GCAyü8Ô!}°qj.}db%<]#5K!Q1hL줰$^HQH+$ÅQK]5*GVp!o6AVd%<9Db381#D?Y%1L2uMfQ
k"6 논O|5Y#`t򂽧z_#claPKv1    PK    A             l   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_ECDSA_P256_SHA256.classQ]KA=mwH=a	Ӳ223z
hzi!hι9Cd!H_s
1fu*f{8; Y$MD0
|r:
y)X_LW1:IDr_ᴜvwмǙT͘vѱxȤY1<A4Gkx_z"yO9A?םB7oUv/8/WKI6 E9d!-T-
W+͡ubnbQtߐyago꾩9s
_PKK    PK    A             t   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_ECDSA_P256_SHA256_PREHASH.classQ]KA=Y7/A`XF`&-̌?^~@?*?zI"f{=(b ˷	\p}E{ݨ8vV&ӳsש&K;HcSϨ/CҀwҊΉYEpDB3)>(P	}1_&4L*Roz>C>I3b<0-Op0LH2W9qG?mVkSb!n2g[3o;w%V/e|;(iD@D)$B
X9A.徧3	G̏pTYLd[	]){8PKR_V    PK    A             i   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_Ed25519_SHA512.classQMKBA=SӐ-4.$.<M23cϪPGEGt4\z P9AP)-A^VT~ޫ%P
 J6c6cNE&rm4]ˉAp%1tO^FfO+MЎ?bF*|Wvl2F	FY8B-b(}3U>F8H8qYm:XmA&wk^qd2,`?H"FzpLSJc_knSmw{V8Ot+ޑ|x5bօ87PK͙J  v  PK    A             q   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_Ed25519_SHA512_PREHASH.classQJ1=ӎ7r"v!aBp@M3DGÍ#`'9s?^ Jھ":RC54NOTj'{r߈ja9#MUަ2L6uMJh:"
;]HÕdmʴ`zx߶xl	F	4IFۊY+洫GpeG:nivkє<(nUF]Ap6Χqqy\Ť),dh>΂+[gㅌVPپcd 30!9N5M8_jim[Di+blV@q_4.[;P`PKmAV    PK    A             p   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_RSA2048_PKCS15_SHA256.classQ]KA=YA=hFa>$FBON223z
h%A399~~} Gd+.&8AZvn>N̾hߖ\89i(۴?=r!
x)Xtst.4ROhũ9V0gRTe&͈aǴ>^?T\3W~J	:9xaL-,X&y#[]$g1@1H!T
K cXM $H':A URSD+F=>ܥ	n QSWl#8[/3y]PKWT    PK    A             x   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_RSA2048_PKCS15_SHA256_PREHASH.classQJ1huZ7|PP*",b,n,)mvIҗG`s`ΐ
5)\8,|uGA";_	vYwɃQtHSИיҊ^Gp<DB3)&
p(EHK^ŻkHb&4L*l#
Ly̤hZLK(i)^~|SN SnǘjEc-X&aC<|BP;K'9"Hbflؘ%䓘JB0oJ1_9I=ܑ.n
S;Ϙ{M%yXPK^    PK    A             m   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_RSA2048_PSS_SHA256.classQ]KA=fwTփF0),`-=ɺ;Ɉ.3cϪЏƏ^f{˜3 J%-\_}[NԾwi}m)K;P#SϨ/GiLiEgt"\s^zJ(GkNivz׵	9^g44+FӒQfw|n	,$,,YHZL^.QLȝ,rAb XI#U)dmX#HTdjB0Y{J1PN176-3 a: {7cyN6h:`PKx/P    PK    A             u   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_RSA2048_PSS_SHA256_PREHASH.classQ]KA=k}KPL,(B,$#:+3cϪЏF$"h
AjgA>3MnP{|?K^`?MzDԏBیF	y)Xv'ct.4"lPi٫zW-r̄wIEPmEa+b+{3i$ӒG4J:DqoP$3_*.'HSn猂Z%Iim0 ϯ{/v~.en#YL`f
Suy3lY&ۡR̬`waH1wb˦ۀe*`~/\?az'wŠc*? PK=[    PK    A             l   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_P256_SHA512.classQ]KA=fwH=+),$Г23z
hzI|ss.s||1A<_$FK۪݇bm߹%HpO}OF:0]kj΅fRx#)P	ݦ
9g44+1ӒQf'sڈ,$,lXHZL\&vmBeB'82@氕F6RڰC#ԅ`:b&ZspiC̍-L'HȞ`
fMPKsqM    PK    A             t   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_P256_SHA512_PREHASH.classQ]KA=Y7/AEh`&-23z	
hzI"f~{y{~p]x%Hq9AeՊ{Q3+UiؕR(}CF}9tHgJ+:gͤSD'<ڴUo|3ZF2b21-Opkx_xz,Yt"N 닆4,$,,YHZN])A"ӓnqdLJifZ0`٦LֆR8Jl-0;|R7OH<amb> PK
WqW    PK    A             l   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_P384_SHA512.classQ]KA=YR=hQAi ̌?^~@?*?zI|ss.s|~} ( ˷7\p}Kp^u˒{W1}*ν]*KHcSϨ/CҀwҊΉDpDB3)>(P	lkw8^gt(g0iV%)If:CNu'+#f!n2q-F2A32wVQӈLa#$6SH B
[J0tM&+}O)fϮ4֍rz1Wl#4/SPK4AM    PK    A             t   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_P384_SHA512_PREHASH.classQJ1=iǪuGEAEuCC[h8 0fbIi3%I~ ?JL_D{7 X%HmmL
)A} aa`7V
zw%PL:&hpm4Î$p%
,PʐּKəE\ &ӎEĕ((۝Xõht|~GDARIS{~Ͽ,|^$oĎ=P۾!\ 0E.2s"O.'դ
ց_Ui0xa\:Ҷ;ϘE涏tOc첍̓}PKsX    PK    A             w   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_brainpoolP256r1_SHA512.classQ]KBA=M;נ`AE@zMVtz
h5{v|}p]QIRKCno*غ*jk&dTP<~qVCflPch$:XCIEp>Cr-Y2#}*dԂzC[Apmnfz!놜Z=k7bsEHCՏё4wX<縃y!aCʃ.7grQ/ԏNm6of@61jKeA"NJuǌ΃tǲ2~	njIa~6m;PKzVT    PK    A                org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_brainpoolP256r1_SHA512_PREHASH.classQJ1=ձ_.+HEЂ†!%M$
, ?JLnƂ	{7 $of`W$iVQK3!SrPQX*~tԃ13iU4mn_QGp4r-Y2#}*d\Wm#Ҋ{!8Ĭsj(EVƪ*#,7-}ܭS '_Ԋg {z0s
5"/*T	{Ǳ|R+A)a!<fGKٚJ8A!%׵.3;3JslSmd],?cdX}Ʈwy8OPKAn^    PK    A             i   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_Ed25519_SHA512.classQMKBA=SӐ-4I/#xh`V7ɈΓ1gF(Qknf{˜3 .qB/k!!(w߬w+w=ϭ:w	."5h*ٌڌ8ej61
ŀkX_N5+hKE [~?4B.x\ivȂ!t'reWcn`EIZd`ۧ `ls>$86uK~[%h_~*jE,b I#ReA ې(КŶ-7#;"a; w78zl1cBGPKxJ  v  PK    A             q   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_Ed25519_SHA512_PREHASH.classQ]K0=qYu~#O>	26@0ЗR82t$QA_	\r}xyp
^`O	6yU|TB~+DMr/A*e4NhLiEʨ#8NѹLKC%\CҺ.n:,	o9,Da'b/3iFz=%h)|?Oм<fò1mcƆm2K;w~;Yx뽖S C,rb1V9Sr7TsF><ܩn^zƲ	w`μC:6?PK1b&W    PK    A             p   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA3072_PKCS15_SHA512.classQ]KA=YA=hZa>$FBON223z
h%A399~~} 8A$ĮJu9=5oo7NEa_Sè/=ҀҊNqGp9CB3))GNթ5	͟82m^g'g0iF]%v{)KfS=Nqsch!f2{wܪv;dl=R),`9V#Db0TY&O)fߟk6ztc4GX{Gq!6^-IPK`T    PK    A             x   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA3072_PKCS15_SHA512_PREHASH.classQ]KA=kf_=PL[YD,(B,$#:+3SϪЏF(h`+lA<Su}]Xh3a?0~O4-#8sAJ8"e^6,	o822vhOw<bH]%iw{)|z@Ə1YJ6,66lݨaWu?&e~c׹F	d2&0F
3i1K`dB0YJ1_9I28ܱ!.n
٭=#uy%iPKB$^    PK    A             m   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA3072_PSS_SHA512.classQ]KA=YLZa>$FBONˈE(ć8^82sD&AoߺUzpBqZέ]NBv8s2a_SZ)2\h&ۥy]Ҫ]tgB'Τ"i;L^i=ꅽ~fS~Z	\w8#1K,׼q۩{.4sg1kE:VHb52)F+>#HW`ub&ǲ172-3 f: sw$GaeF62u,7PKP    PK    A             u   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA3072_PSS_SHA512_PREHASH.classQ]K0=ѺZu~#DQ~#cKK	Y"(Qb6""ɽp!׷ [#\)_`'qlւ *AwHf:	o0 ;ͤZ4R£<Eb]M3Ns8jƌf2	Fn3-yL㴝kxCD#Wd O3
k'?ذl(ذMny7 }~5ߔ\u1 ҃acA4anU&ZR̬`w0b$z;i-2PZ}3׏1uɝ1蘷7=wPK)~Z    PK    A             p   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA4096_PKCS15_SHA512.classQ]KA=YA=hӆ
b>$FBON223z
h%!399~|c ͵\p}Ep̃m:Bubڅ{Pvi'	{JxC.SZ9:JKt.4SO	rOx4f|]3Kڞ|F2|fx0`Zr`*]d+ߥ;wkLbV,-X&e#3۰.4/sokE:֒Hb=2)A#Hׄ`b&_
ƪQO172"f* s7$&ؚ`yA52T/PKQm[S    PK    A             x   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA4096_PKCS15_SHA512_PREHASH.classQ]KA=֦Y7A=TF
bJ_P/˺;ɈE(񣗄(h:\л*N.\8Ezn'GlFA?n3~WG4Mcbi\h&ߦ6iŹqn-JȄIEp55
VhWF<dH;%hu)IfU]N Snǘje	3f-X&iCn@P;xzqӈa!$SR
)d(dL۾RlaWNacި1765m#a* sW
`i]72pz[PK3z]    PK    A             m   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA4096_PSS_SHA512.classQ]KA=YL
b>$FBONˈE(ć8^82	\ ~75j]*vpY.uE(
G{}F=9<`J+:'fAy΅fR}*.M1O}&4L*ƒ=ѡϤY1ܣ^8kx \=<u ug3f!n2y-f
A+2w+vQӈLa#$6SH B
[j3t]&}W)f?^ys#33	b2~Gq	v_})S}PKY>.P    PK    A             u   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA4096_PSS_SHA512_PREHASH.classQJ1hum]7}TRVhAkBA_u76$QgKA⋋`s`ΐ{M3.>'uYܓBޯ{US0-z?Jw
e/1x)Xvͤ:4P¡<5B]3.S0h&2~F2-yHøĊkxKA2K8Ar?g׫XX0m2p{~;^h
I6&@0E9`!	28bvU&K@)fVM85C̝鶐1xWci]33`zPKp9Z    PK    A             l   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_P384_SHA512.classQ]KA=YR=hedAi ̌?^~@?*?zI|ss.s|~} ( ˷7\p}Kp^uҕ{W1}(]޾,KHcSϨ/CҀwҊΉDpDB3)>(P	lkw8^gt(g0iV%)If:CNu'+#f!n2q-F2A32wVQӈLa#$6SH B
[J0tM&+}O)fϮ4֍rz1Wl#4/SPK;,>M    PK    A             t   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_P384_SHA512_PREHASH.classQJ1=ЍBEEЂ†a%͔$
, ?JLnD8p=oO/ vL0qE0v$0Dg'aPڏN6GnV6VIc6mNuMJh<v+ieXƴԂF3SM4Vp	2-]ދ+KtQQvkєSܮU]A nEJV\8.F]pٲbV.|ɇ7W>Fȁ&0a3<	rp*%Wv5ELZ#qv8򛏘}usNE=KXyPK2X    PK    A             l   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_P521_SHA512.classQ]KA=fwH=+I,$Г23z
h%!hνι9G\E[j{uپ+~,v-:Ph'	{J8!
x)XMKt.4PO	rOxF|]
м˙T%m>yY1ܧ~8B5S'<=<mFNWFd!naBeZ616o%F/e/4bH2RزDƆmx9A*偧3gW
bt+vޑ|`wmT|7PK+bM    PK    A             t   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_P521_SHA512_PREHASH.classQ]K0=q:u~#"0E")l0uX6--IEPlED0
!9$XIt<
ݝfsڮQX*f:q?ft9U?3)MDkhB$RO6cH4Fp	N:1JDz(8ekі*nW*L[DQuQc.\{ <K'hUc?=pajJ%81塈iN-M8A!%W.Ӛ[VU	a#8o8yF#?6z6PK?W    PK    A             w   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_brainpoolP384r1_SHA512.classQ]KA=YkPF0lFX`AO2N2l3cϪЏF|)hννs+	R;̉luY?kyV[3!rIEp)ݡm՗ dƜzXE#I<Wt!-גŔS$\<K+׆>
Y74AD\^[-B^܈d[;m&?mZ=d<xrz'
_/[>oH!f0(A"NIu5fptǬ2z1ji', {;ˏ_U9Gk PKH{5U    PK    A                org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_brainpoolP384r1_SHA512_PREHASH.classQJ1=ձ0.(
-}ҙXRdHR/G}Q0{|}U-ĩl$(at^r9k&dTw(.AQ13iU4
n`\K֢H
&Wuc[MApm.Ff1kƜZ=kGm"jˍhHf;U0ZQY&<xNѻRS_ء=CNoȠPH/LL#9lI%PRÝſScud]<c
w/XȾ`i]v1rozk_PK,^    PK    A             i   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_Ed448_SHAKE256.classQMKBA=/;,7ZhaeC$Ӆ IFť?6BA?ft4^9@LET!z-07ik[lW|n޺w@ui'I6f6}NM@}h:g[HÕ2G'=ZunT}.x\iBoy=POʎ((@õJό͡ `9h="
ff=[o;÷l+0ae
1ıG[qa^ QRӚ[S˕!m>bh{:Df@7	v&}S6NPKdM?*S    PK    A             q   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_Ed448_SHAKE256_PREHASH.classQ]KA=ڦ٧}Kae ԋ̌?^~@?*^28^8̜{ޟ_AJ0Lq9&cgN?ԝ}Q8<:&d6tQO:>o2QtͅfRm*.-b.Lh~ǙTޖ<F2x>F0-G
LpuO2ry<uh;E,3NFm;KPM?sZa棈a!(cŒY.A$3"R!FjmDL$yaDx1}`ġ:6? PKPTz=_    PK    A             m   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_RSA3072_PSS_SHA512.classQ]KA=YLZaa>$FBONˈE(ć8^82sD&AoߺUzpbu8-־NBv8s2a_SZ)2\h&ۥy]Ҫ]tgB'Τ"i;L^i=ꅽ~fS~Z	\w8#1K,׼q۩{.4sg1kE:VHb52)F+>#HW`ub&ǲ172-3 f: sw$GaeF62u,7PK P    PK    A             u   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_RSA3072_PSS_SHA512_PREHASH.classQ]K0=ѺZu~#DE(*lǰ K82$/?%fS_,"	r}}{z9A	yNx;a- o{klzq7n1nSSZq#ѹLE#%<#Ѫ_ԛ,Մ	o947یfh&;0i$6Ӓ4NYf7D;|A	[9vyR
Ɛ
wν	j+繟KXM \ =01A:JFV`)
~	#Fw}6,SL<xISy{ӳPKo[    PK    A             m   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_RSA4096_PSS_SHA512.classQ]KA=YL},`-=ɺ;-#:+3cϪЏƏ^f{˜3_o 
%fsM5\ruW8eŋֽ㴜[<FpʀÁtQO:>ҊNDPsnJ)wKvn;U	͟86xnc/g3iV{=%)W$3Oi>'s,,,Y[L^.&mD?ϝ}4RF4" cXI"ȤA ]rUCF:>t+ߑxac͗u`Աx{PKE<P    PK    A             u   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_RSA4096_PSS_SHA512_PREHASH.classQJ1uE|PW*
-Z\eYwcIi%I~
~%_\Ds̜7 X&ln]rJ+=9j%#Id%uP&uBc^gJ+: I΅fRM*Rwy`.Lh~ϙTl#
m<I#m<Qj'kx]#W9Ar?gԮK_0jâerKU<Am/4w[2p`2lcچl!SB3Tn.&DsG`UdMl?a7Ϙ>cq]4h7OPK63{Z    PK    A             w   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$NullDigest$OpenByteArrayOutputStream.classRMo@}1P -)J܊HDC$zi.Fmvו̿BBPqN"Aoy3oz? Kj/{zxsD/Ui!Ef%Rh̹9炫
+: YnVK1ehX$c>,:J<HK>$<:SLj(fQV5N͵4|xyfxr}
qNrg[ih$+Q7=aa.tdhj7A. X
p,@ iCulX#g||!3DX#Y/b*Pt[%d7t>暛[p@l_`w|`p1{W<Ӓ$m"\U̫nP~- _/PK3    PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$NullDigest.classT[OQn)[EU(xQ.4P/!>'{
?A)$o29"&6ofvLgvbhM![i2ܛ"[E4崸E۵#>V|Nfk&ɘ_'m{faŞ/L)%`豄\v,/eZU
(f["-6](8S\{TMƼ2kMJGfPg23l|x;vYժmWЖ"-Z Bt|x鲳5a8'OpWR,,@*t1Sa%Sn>ÌnV%+TF	e8wiOKz5i0ᲆA\GO-0&O׏¶kQ/w6^R|O9KYuKG
u]G1
q	u*"`YL%1Id0ۛIL`ZA3R0
d+`a(B55Hћk}|T5K!QZAV+8ɻi1Ɏt!~q#wedcD|#(:"ES:b_H2@'R-2Tɨ(9s:fwo`1fUB"35?I'CT*K2ԨX!{M=PK    PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi.class:	xS3OY~\ll`OlK9cq!!%Bz6!)Lpz-MLzBӦM.!:}mz}'%yz'ᙝٙ}?q һdp+~-ß,UܭU{;upQ^ގ&|S
{vfnMTn&Nr9]ͮ*kCO-ŭ17\mL9Mս٩F8ԛ7gea]jۙݴܛ%j	qhN2Yt!iuȭ.g¦tn	11IL֫0&01M&fdޘFkgZBWӕ]#B=]1SD:e2jiku4Z|-D;5zMuiiLͭ.-]IMKkZ)@|#%zsGoO.ʴ;vuݴs[~$,-Yf̑(q{ĭĹt	ZY?8⍫C#sq/|8j^lnK5,yCQix9=mzC
x4\Gۏxh ~0¢T9zq5ꉨNM򽑈sh;G*z8wÎwD}C?Y`j,P
܍0
C7G]I]34)VI]%Ņp(J|Q'mHKu	h38.߯~*xK 
rU7B(xT2fEjh0RW)K+CP$U=dNԲWx@/][l%QuKTo4%@dR_zې7H,*J!؞4dRC11#SĖh$٩b:

(Z}J=;ty]!YGD7BơX,j,ԉ~o@Bh6GG~-h0K4=!7:rsU4Νސm?#l}YO :yIRGU[%fۚ(9m;=F};=Mͩf,O=9CGyUV(H8d1Ѧg3Fct5:
fh,f,	3DZ`1HTfgS'RiO3O0M]Emfffg٠P>̫ɻFq TAO&vQ´E W\rH%[^
z;@k U=D/Mv+ ,̬
Z0hk8nHgҼiE7+'\HNУaCG?[fnz U<f2F+h"_:Q"lJtNF*ݐ̉[&nbg$'@\lD0C\
6Z\4x ذׄ74S	Tlc}+]`swC:Z!;|>	GBa7
X״cA7n!ٕك6rtcogHS#ݡY_t87tjȣF|jl:HzG(ЖDk!oCw{_ŵY}}jCgxi\N\deCGڗ5<2d0;hא:R'״n=Q\}5
gޫ*+yCP&Kld6يC@Kڦ3-a<z픥-Yo5Ҕm֚w53E2w͌ZVTsѬi
=Y3Kˌf35s)Ѭbk=k^k^of`g0St,3^ͨeiE3My8{:gt3-=/Kˌ3SL5]ۮE4Քƫo(L,rI.S.|54E/+:1=vEѹS/JՓrO䭜@GƐ!,7gQgha+_=͊DUL0 5,p"pOy@oڎvw!~ޯ:bs{ ~?StDd>#X"C<~C&щ7Y:|ƴꅱH0Ϟr<|X:䃸L7$

o9(DZgb'
Eڙ|U?
P2̓He(aeX$C2,LrȰTdX.
*dZje^24(C-2/n/_	X'^#^' >x7	xx	8.x@;S%>AaQq'<,G<*ഀQc8+<&q'|R|Zg\
/
/
o
o

xZXOT~[gg(gpmW'
5lOΏD@5uw9ݑ>:X\9os&@UWVR#l_!{;6XLJSW\]mHBϯ6qUٵQAISL䛉,=J5/R1&L}(9ԛSU$Áx);_Y=mLgR	cIfL*FMCdjnO,Wڭ~Z d:'ی]y,i-|U4ɰLIxL>ے+sԻĎ+8<6JEnv
?|!טbsT^>'m]9%dLήGb.yt9IWʠV]S`
)ЅG؀+`3U`=+fap(8!G(aw0x!1x10x);Aޡ\/T /Ry
|:B} +gB3*0e7PY
fs
2+$ _v<x
{UnW+(p!k_ǥ+|{
\)p ߬&|x[m
l
0\zfyAw)Ň=\f
pbGf0`g|8<`$O2Tv0 100(18f2۰jr	p	̆K~6tl[ol+ڰJ&;6o0&1>EdܷU6q)Ylb҅n&[l6
_\:
7_mKlǿ3xFF|w6<߲!*glį1
X;F
o_b-~G؂|<]!'z#Y?oChg@c4~S  L˅)~lP9N|:%</[wf#Dfwi>]ٻ\OKz-Aro=.Kq$fs$Jwy?4-PfsNfi>];ǂ\OKzM(`trdq2{H}z] a% |\R)>a,K3R~1Kn(tDg4гv9PG0.yp4N`锦^m\4L%
\a:ib[ C}Vkj,cҭC:tpfL9#={ƤRu
XOK5ʚRI謩;-)?q<FV՜VԎJO`iiqMRyMͣRǱ҃W2l2@*_&cW`=x7H/?U$n:ƱrOٹ<v)[n%\yԍJ7J}LJ' K^{V:pFvK_M=[FfR㰀-ʴI֐wØ<}Ku72MɵD#,+.Bt:3nPzˆ2*.;O9)8JA	@*_wL?s`#8Qv]lLF S}7ܿqN$ܾ7ҍAwp5QnOp;u_|G`ec81rgm19f!?=7Y{ԬX}G,Ѣ5{:rO>򍛜80%.cB7)\|
lt.5aE##Wyd }jaݓxqMګi%8IKdʹ"I4#qVQ嚝Mg6M:;7bfD:SN"Z䙴xLOIsOc%Yee#0gYǤ5M3z>,
[Jj7Afkc-=NvL.\FJ`i/iV?6vE(8G#*,EjhDsZlյ2.:˨TlKˋFrBB<:{HؖP.PFx~"ބWwܭkuJ\MkzJ@Dt?u_M?*YѪ:Y68sqZcUxwJ*֗g(	U=

XsUJ䝻*@4{R{G'S؍"X- .bh	s)WI`"0`hgv3gUb6bcr_βVޢy.q,c{Nj;D<J}ufiGyT'7@]@U@6V+o-;#eX<ݷ7*m8<ˏ'@X`H*ʥaq%'psXN9I'̻ބ-x'Q4ﰞ	={X<&5-)x>mBR'8xVG/wǥtYmER#mF1:C$P/5ӊܔh7}c"._kCې?1|'pJ*$35/я-T][]+}Yfԧ̨g3Z3* 4K@;!q	lu	xl_TR)sɯ ߤO}(>%Uqs6&dmƲ\]o㸌ƼpLrIҵ.χ+ݢ#W.y
/@-ڎg|}Tʹd$P
uX"@

,+ V4Ih8Q>"bT"U|eǹvuV
Qyvm 8'ER6k5^+NI6;3*mKv#-w#=5s𜑦AgFbYvmKF؎hj1H/cQ2hI8:i"2M\u:>3w<E	)8g4xN+U}GbTfP]!D_O~n/&Ko'R=$Ke¯ O~%ᝄ"!|7]!|WM^7~5¯%|3Ko!'|>o$|+7~3BGFX%| 	~ჄiNv\ PKx  J  PK
      A             /   org/bouncycastle/jcajce/provider/asymmetric/dh/PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/dh/AlgorithmParameterGeneratorSpi.classU[WU	BK5h2VzQ LJIR0L	>|յJ%kY}7}&¥T9{z:~pZ?bfʎCܴա{.CO6ϐU"H k^ $Of9/9pOx\zQa'\9Prd"EaЛ&2$#CYJrN{f8Kj,x?P8irĢCtWM-+eyQ
ɭ]k~fs+5_R.XdU4On[3%BslFW<L
{ElYN]+[  JZkl;<%vDA#zxpE5	S!"h1,bo8|V5lzEX<.;~Ą;Upx5镬YEO5ڷS+5fM/5ႆa
#.jᲆ4!aL{o13S{ZJ|Z"e.׭Yϵ})\xtZo̴jRiK)FǇSu,;FNGzVIn55[wa?Y8e7񶁳RЇ350w]ກx_M@Y
en$*PG:1*>0W
3
fu#%S`+D5uR)d);!ɝy!_+	Eu1UcW]Q-Ggz$\e3Mc
Dd7ZD<H;xGCFE2?	0W=
|<RKku|I>,(Ũj6UIxﵲHE|/b%xu|˥tt|$*%~_~g${wquu
GP&1	匢_:5Lj`]
8э?PK,  W  PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/dh/AlgorithmParametersSpi.classTmsU~Iِli	@yqiv -L_P
qMMi}C?M;cG=w[È{sι? UCp("^<\/&|oT7uw3Cd59u[9Ve|iueeגdUԗu6xF^5eY®#[KLsk2R8OٶeԬnH{frlXyV(]sʹ5jyٲ+Sj̬Aty%96/:l͢ahE&s̜n̝⼌TE
+uK5ڔ-%D
U
*-
"%e:jj"LW9!tTHЩ
_
|hU]WRRS+e
yRC5sʸm)36fr*YDtPgBu:z:4gQ>̮3.guʮr7#͢dQ7i%Rē>O0:TwG60]@C¶rV[ئLo,*9]6,VţPS/sSڦF=6:RXӜPjƔm*r̓kJv	TsWx	u-[
xMDLD"HqQΦ7#ҵߣSGܗ=}Cen9b8y[NJ5uk)g8<Re>)rRu	muf闛	pW9tCqp^K7$M	2RNF(Y	0'ݏ	21a[x?1QoN׸lD0>TKa$>Ȇm{9ЕN;NozcUipG]23A܀@?aiwVka>^8x)JП@>E0K}tQ:892x݉ѱL4TFn'(g |q
ԝ ?ym$3J+R(c3Pܚh&^룓pD!C6"RIÉR>Q_b''KdKhH<.Tkk;FD4yQR[DaTh
5Dz!
{<+"?=`SN?h]HJxr|}ooJȗŖiPxc˙2w>y)_[ԍۜѤD\	Wsx1I;@|rwӧ8ŉ1)c5*`(a\Įކȧp?N7PK>  
  PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/dh/BCDHPrivateKey.classX	xTof<J؄I&0!@6$e1yd23̼	IEkJF+3hZ.ݫwU,	W|}s9ޗy{FB)R(U.oMM$[su7,潺l#XmW
m|KQGŴHP\5xZ\`VPۧ&ƕ޻_lO\7`ps(iZJoG\T
d?&1
Hr"!=]Dܡ	R$0uf4CQo@`fSM	"5dYPHLiAV^F/[wSRj:"	C4KxtZ,˼SM[^! Qӭ[
AУc\,F{i}jb'w8$kUG싒DdfWUwlo
h1@*#%n#݂cۓF"s0FBְHtEiӒ`9JtINk!5%9YH3sLfˉ=jI t9B
tX<ćcFԯs-oۚL켕K9Y#iq4jk~5YoZ8@6Bgݒn	LΤX 	\SL]}iCkٌ_]CY[P,ĭ+F8i/LMϹ/?hX<:S ?m[wzXk*zIR1ShuCk_12P̠]L1*RA,F=-(,ΨuБM`/89w'Lhq]
Q$wuD5Œ#UM>Gj~2,R3eiMu^ӍװXn	
.FZ	IX:	$A%6J$af	-Z%IhE¥Jp%tJ&Kv	tUv:v`%V]OD$b_<=r%5 EmV]HȿpMoMgHzK(Ќffl)t:m̓jM;vΖb+δ1iqY,	;lթx
E(vOC~'$i;5{8Ii29Nzb˙&^T`N-g*iH)ivOo2ysJV'e[lu<'8-vT?I}>baj54լRepz?3_<ƅ֘ȤN
^W)M

1㰂Y,F(XgXPi
*f3
F
vu
T
zp+QjIbYRe001d([*X+Xw(aީ`/߭*X#L9j+
fbVp.>½*P)X3|(>)W1ϖ!2$qg93ea"_k2^!SCWdG1<~eme2"(Sx!`:w~+q<=_H÷c-ßd8)cyd ~gӃd8}2iGdq=)02C!Ï(<Rp[?Mo?e~LU?ӻ
5пM˄qRB7bc΁- ɮ*h̖l`̖jڹps}f33kxvŚxNXxͬ'f	
{&x{tN6[S{8픐I n8Y!%6$"SlB(9CX"aXrU|fs]y)QuB'DܵxveJCUdJL?N9M*OJ<N)~0Hܣ=wQDU٣XW`Z_iQѻ=lqt܅1JKl.RL/czZ(B=iXNLK);RxvL3w
cM\JD7:3o$TX
uFL
\tjAo{pà+3XRkPxPn<s
ӹ)1wzO?CG`p$D)/եK4WQ='bi{h=Q$ze*wZ,IEiq(=):-yrO"ʁz:%<V
씨#R6[+RkuPA !DzE>tF#VWdh'ąVeet~j>2}p?]4)rSU&s!ONVr	d3Q3&K:qSI^gu)Qr[轁֙uLi%dS2RGv˺QWً#A̻B47

or?%`OK\1{֯jdZs>LEw͙KspX	}ؔ9v8ϥ}[93f\"\dyRBcmi&?\W|ZXCbm^N3#]wJ9[PK5x
     PK    A             B   org/bouncycastle/jcajce/provider/asymmetric/dh/BCDHPublicKey.classX	x\Uo2˼.IKhI&ɤ4MM.)IZHi	䥓̛i]T4ƥjA:@qn,*`ydI~|~_;=s}GN b{	JK0+Jp@WM<[k&k^ev44G
O٣ZomWḨqvk^Cܦ膖$]
7#6P	^"B5&9"hU=mܩF"QR Mf4!Zo@@זP,hzi

z0]E6!F[[43M=:I`K(2o%ihF
5,vkhx֮m3xH|L`iֹB@Kcl}&dN&%5fM>5B{$nD&e ۨdNeԈļF,keJ8*1ѝtCz0 PZAhcFXcdގƬ45h3Da}iN_
4G1N4B?ASL8sMmgo3yz|.WzZeIRQJ`'J2IL(^^5j4
4wuHyT[ ,4pfBh6t>e`}vU<ZM3BΡ,ܲSS,;ugG6GW]:t5gUg{~	GB: mx#hߙN޺*C=xh9Kue.UrU?QARv3)zQ-me|Wԅ9ƒ#in
3VjQ,#u3>H#emA,?
V"4ںJZh^\t(E'Og-{UVKX#	JX+Q:	MKx$lQBMZ$J,aIh]%tH蔰lZbYIնߧH|EuO:dQD՞njS/(Sb}BseRY<+fjƦISpm9y՞g^l{vX.^*2;4'5mOk4KZNEM/CN4y-+s.%OV28k5Q[d}UFCϦQͬk͡1ղh,n8fim^*{rzo8'
T
k(ϼvO٪(?Ӝf=~7qf3L9թԳ|F-\5s<=K9>fo|׷7}ёXn+7(u
fHB
W2\ XAC9C5$נN]xxAȌ,[,aXpCoS0ogw(Xw)QUP)؉fX+X0
.ćacFʭ
j13qLd;TSfes?9W<;'8Dw91/2|n/x-e
C2T Wex
>,:o~+0$]CO2<%Cg4w{C?`|ab~#ec8jM8/7<pfj~$_.#K?1sOe_eqqG}ֿf&&#Egtw7e "ʴ]P V *$_ucTSHDc=2M[hv;JPHNָb1<~GPV>qrύb^8I`=JBD=C#X³8ABnzy6.cxaI84+,hy!8C{+0$QBwd;Y+G3˳<סIh\8$[Qpmzg>j;U8N$&m	[5`gz$]knt]KHs}EeiGa(4=uRJkeۓ+?O.>Q0<XC⌈ʸ`LiM/\p܍gV%ԍUaf,`g0!J9$@X+^?Ŗy(gGArrphd0\İtqQ6oLUIg5 RfVb8N;Ǚ8NsCsR>d!W+,%$?n	/cm)\+ငHK{>v͢7Aca8j&,̂$e1'iM^]zqM4S:Dg	Gw-=&D
%\hh驥COe+..NE7Ć3rYziݦpiW!a"VNF"gW%CDb"K"${>>./	
9Ewqgwm(pZN:zB0&]|:0\CGKӧJZ]Y^⢀&7ͮΉt{+ye_G߼to5<[5w\8F6[kvq>QTI]h/Jw@rQ8R:ObuꍂP`zΓu;ٷ}?$!Zl#`}!KhA*4ll9i"iT	[
>PK𨁹  m  PK    A             ;   org/bouncycastle/jcajce/provider/asymmetric/dh/DHUtil.classS[SPMK媠AP[/ JjGa|H3%6ɤ)NFf(=M)->LN~ɈȐd2ɸ0=!	
h9:6|mvЯjeC(82Y*#mK9rg:I6}#EnsLb]"\ϲ}".r#P9:`86a7)aYYe(e]!?Rq
9+Czީf4~Ww}GWe.F9@7
e{o&:j˞gԉv{m&sG
VF(m
l
H0"aTM	$LHpFO\p|+>v~i	J;:9ZxwXZļzsWY].b )	KU1~cHH"*bU㑂i<Q0B,(B╂x)DF,*c^AsBP,84JxBѩC iF:<{wΣ{g98΄R
%I7	gXOzIS #^(f$m`mͷV?o/LzyQ֠GWH[)b!!q@dB:	xTPKU    PK    A             @   org/bouncycastle/jcajce/provider/asymmetric/dh/IESCipher$1.classTmOP~. D&"lc:Q7^5!$ƻ+vM{1?DftKtFii}ӯ?4`)^ljRe+7\骛U!k"ƣLY\;Lϗ3eFDm+01a=HQJBT],d])EWrAwZ_5zx@7"%mMKǴ<O8+fCHr}ɐ_ \qDajpU7+cI%(=Y7<R00oq[$&
ɑ9DN%tgn Ww6la3.	7y7Yԓ::pvyS^W%mF4hipXà!
G4pLq
äfyrJCbB:ӏes˻(wZcQTZ:f?jObfw'y;oe8]~$w98,}0p E)}04u5LUpI(.948Q%V4%<E#w6s<UOP1
HN'E>L#dxwɱ2MtZ-O|nmn)B-ߣr,4_#N
w(}.v
bVll5aZI:I<zp"XK~ PKv    PK    A             B   org/bouncycastle/jcajce/provider/asymmetric/dh/IESCipher$IES.classR]K1=kt֏U>
+OBae,IgiK(1YH(4{os`[C){秗$,]6?3:?LR&.uѵ9&Pfyq"Teds:_Bڔ2oIaɜ=1B7.dinjJغ.^ZkI["ͅ):ZI޺oZ׺Xc&"&6ʕ*?`,KVj`Æ>'nUyVw~
k]\C`	F0ټ11xc,xejr)9稶1dP¬94
øc>}$Vn>1{XoM[}aL<PKr<  D  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/dh/IESCipher$IESwithAESCBC.classSNA=ڥH[1֘F`Ls`L!}_%6|(P,!޳3;_MT3H`ZlW3دJ0j/a/}Δnʣ~W5#!:"дT)0%y~@v)h~k{^[}6E "HFz7Z#H:+Z1Nur9EP,C(-a$_]hȠGDWpO6-ɦP̸9{.g\nɆ(SNGHrh~7t͠}[?=\0pC̃aCì+WAceȭNQ9U1JeϑZ&n3.Xu295NS(2fz7{iz57-n1;ݵE>pGk>V},Zs},!V|\i"WsQmPHaۇwЮb/3Cׇb~ :!Pv%x22 Ͼ+>77@PK6f$    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/dh/IESCipher$IESwithDESedeCBC.classSmOS1~
ȅ˔ uChb1ac̘c-w嶃4?ز͠X4ޛ>yso߿|yl=KI`Zԫۛs8EJ|C܍x3[1ea"D[DE$/lD"
e$-E vNfk;1H$Lǉ˕|d\6V?'v,JR%i
rE Q[DPČ.qW-P(]a#xq|ć2	enHN=>t$usxUv<L{<x{p%lSldsN;ވcCQ7LjVt~vÞ#6s<
D"qT1N;a?t9&@$nXtӚ[)LEw|㮏5c+>5˸
2>b`dN {jyzSJ(dpG?qbUl`ǃxGn!2eNc<clz'GQ7>O1PK뭁    PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/dh/IESCipher.classY	xTu4If#clG"ڀBpdbC͌gg&ܤvMA8	$n6/龥9y#H"n}sg+^}lcᶣŎMvnf;ՎN;veG);q֎QJTROȸ@iVlm[cl;1n|1͡>4e{F`_(6ݑh|!8Ѓ

MLa?'x`t7DlС~>m]٩xX
.bzV@46EcONXI=.PG$݉T,'ݓ l?Aw,c;]lr@t<B$6P@\'x4JNL@'z Bš}Tѽ?,4do88=z*H6;{@2골Cd,\0>2;YѳƌI|8LrʘiϼS0-8G834Y6dp(Ov^AS#ȚwvՄ"h!>	DXdUGVa-=Nh$BVh>lؑpDx+2IPۦPhE'pwk Cg2|
ET=\qI9^qcla}>Sz$iaڸi$IZ868"ФX#1*O-FB
2Hd''q_$3gB'@ji[EP)Zm)(Ba!@k>n(:
LdWgA-9R2RFC?L*JښO6UF7%)WAv-汘V<FcKյqLPUӜOzۿ_msq/ÖeA[DwSilL%|.	j>7/ݽtPb!*-	w̰ݿuOFlQصڃUR$5>n&U=ESTHl̕h{65uw1VT#9ki,&bTIx摸ynDfC}} 'i^*~o1qwsIvlu؝

]VʽsnCһ`n}OY^wSGτ{IZ*
x-RݼPW+n{ߌYrݎz|oVQԕ[ѕJn$s
è$|CtEMSdiKk4~ZXy[CW照 :78%jiCEWMWT˭vs84ՃΦP?F/R9J(]0neq=eЖPвDR]&+UnhETQbН#Q3(;Kݎ;D$F%8.vG$xL℄_bL" %NJKLH$NIKLJD$1%ILI<!wJKx$xSG$>*?(C?,#?Fwe￻r0⅑ߴ>꣊w6[lO`QxbL(7
nهN^Ӷup|1?4y[ѶN;2mpM{7=i53gQ\uheK|pRE׻-ۋK-l\4^Y}jel_*3$QjCFU|BDVy*yO@*B5Թ*\x
[0G&ѳܶɻ+_iZ m]/L%-WRausn⻗K3#!VLâ}+\4\n.D}֎cIBR^=eJ<'=H/})Kd5n2RCبaآa7~K'hw5|Qnv4hc0 O2hZ
?`/i`3bKvlqhV~A3a+HXac
/5㯘7;)3m7
<|OC/nj
4  *uQ ArAJ'zkggDe936^``?#rvfF$"4q_\\M3>;p&<"v8eq_|\[tft9Ӂo쯊v9k-|SP/j2h`:~CUbK%JGVGJoEڥvVg#IAh
 pr
ӗp5Ns* 5R
]TjP#U?𵠧)B|fPJ3/|kt^L͉}99`tNzD?O_cg[6Y@wˢ?-7 Kg ,3t&j%D[in.N*.^fQgݼ8t%b؉uVNL<Ż/VyĔy\~bh}K^V?6:|n54/¤mΛHЃFmMxgyZ&3ٿ3v8KLM!n=/
Ȉӑhciqš7Vbv m^7(WF7Pώ:y1|UxP{-2fE8-&D=|{efxoqm|Y=ϡޤ7_fsX7&OEVmN{tD"eY2bcc=YGUMl7i^CoBTTFYHlp:$ٛu:ţPGqXSC~]os'(
/:Of|XWR]CxU沥E%R,QC-(p(y%~AyE*^7l!l7D~
(R`c5Oy
S:eFuqtOc:\ey,Z*0:-:Enop{#E{8Mq/]g>IצF׺=K)fYxqY;/XJb$}ŕSJV4rT9@.P\WqI5
,CfZFWNYʿrNP[{PQ54u$f[	+׭'FMnojN5Bq5ZJgM.k]⩤iT8
gvL,!4w;yQRU~1Ji^>/]^%A]CZzV^n/(*e1.[v9-.tz<ϋs#Fn費˼>"WF(yqUG/ZɑYɑYshn"'5J8ݜbpӸGqL~(!%~Mlꚺk 5WTkD\92VmTxI7P(/_TYdA|(^F~:4
B PK]T  n%  PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA1CKDF.classQN1}
rWQ)&x'C⍼&h?*$>Bx
Pfs{~yxPr99C~GiewF+g^Ǖ*/
	K_7ZR$I\mc."C"mЪ(t1]vy9ҵªX^7V5yEEت.7eܐ!MQ!."k?kZ[1`'z{<<zV'zeaWNm!:7x
uԻBFu8`] 0Ą!L0cS>F0Ð+!1GڱYn$+u0w	.f\c.>jPr|PK&s    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA1KDF.classQJA}1rHrixRjz

I9vHzBO0)Qb. 2zjt>>`5ptɐݓJ*x/mxVgp}MPb3TBN/"&kB.M!e+y#bIHfPN5Pd·1CGr-xW=$Ew:dyR5b+W`9:pY>2lI/DOPoyT4iFn=c&m*avaf\c!s6;QmEa
6<fɖ|ZZ
X(FwXXZT PKn    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA224CKDF.classRMO#1}YJaf]|
H7Rǐ1CJ2h~"(X.avb#*GPl
w5~W`~prce`kZ;7"Hyz.չVo.Tuz \^	}v_Zj5ʛrd):A޴e$~
ni$.환TYwFRQlkP	0 XlmmW17)V6Mn&:9{eBsCa5Uc	a.8fC|Ǽ@22ʰ	Kf(?2[xY?a>ns~Y(% PK>Ti{    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA224KDF.classRKK1k:8T/ROA-UQPzqfK6TGY|Ճ	Lff36Ƒa-0darvݗY;;*K*k=P6W~ȴ:@uHn98t1R	umql(:1l(2UܘGr-xW= Ew:dy/(j֕W#zr\eڍ/Sf.̬_lm^m8
iFj=bk&.sa]Lb!s6~seyQD61ebv[*+iYk{l|}!#VX`nkuA
PK/C?t    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA256CKDF.classRMO1}&i-JЖCbJ{	D)9TZyY=m^43fw?onzeRm@XZ'_yjDڑ4.ӑչV.T
z ֜\	-Oe3YMj'O"7}2	e4s=zХc*h_S6/;* ok{E#ͦi-)uzjd_Dv%4Y-rf6;͕#V!CqOB<N
<(7Ә/}g2&{%x3˗|E--X?5OPŏ9X2PK2~$    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA256KDF.classRKK1bk뫾_KEPKU<v\Slɦ-<U(1z0|L2yy}|<5Cn_*i&+W}ijJ5	CP&*?EdZ}wLEڤJJj~v`):\(6|Ji-^E*|3Hn'v>osZu$6Aauv1lIf/^4EOPَTm8
iFj=d0a5QL0b3.1ǐ=d?Й<n(kd1-R=a>X`bkuPK#u    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA384CKDF.classRN1}4B	Z8@9\| $J@p@x!F^)U >
1[h/(-͌=3of@+(	W7N;+Pi1}Uo5[v<=_	S\wIj}*Uzddk.{~v_Fj5ʛr}O@mµ7]4	e4;Zu4ɾK&&'Uz2Gk7'X &kՍQ#=O-VLMJvMd[ȼ4:IbgrqEªb.CDb!fYHcthFWeeXGKf(2[bmNal/w~ai!޾,Y(%L>PKYe}    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA384KDF.classRKK1bk뫾_K@+Z(xqMi%+<U(1z0|L2yy}|PrYLq!+4U47IwC9
o"2m⾎&"DR[%%5>]iiaBq[ns?6~Ji[#ۼ&L]67fHn'N>oZlt%ֿAaqvT֊$3+DOPo؎TPI6tT	#CUD20ĚHD0&]xv1)aMXqEQhݖE{ZGZ\0|1fJ%7PKxϩu    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA512CKDF.classRMO1}&i囶CbD)"q4aqH	ڟ)$~ ?bCmify3O v<@q.P7[㯛G[۵zC Ҏ+%2Yk6IOJQb͕ϕi7񕬥Vs1I-F-&7\MpK&uiN3Z6Fy  A cBٰ^XSw[=kmel74_<
Ϫ3_4Yh0]X3
1>|I|(Ҙ/XVYFV0b	+QaX؜#{,09K,CJc/PKbl|    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA512KDF.classRKK1~|IjK(xqMi%+<U(1Ke`3d
 0wRIs0U\>HsW2kP&W~ȴ:@In9(\iiaBq[n46
|i{#[$LY67f8E'aW6Hs6-}޸UZw$1.f~ve$3{ך+xKmG*8J6tT
#CUD1aS59̺0bs.&)
\q["(&m4YnKe=m#k-`iw w','fJ%PK?t    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithRFC2631KDF.classQN1

aҠ"fIL$1XatfF2v^4ăm2曙
,)tM9Pu~jW\E`z3ŻFJކ=!*̗x}:m=L<6QbHH1AxుXS㒲(£>uy;89]k糓&{ؔ!|	|bʔ.&3,,bB
	M(XB5t3q"("zqKvu\(̛'l̰>x[9 PK¶T  K  PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA1CKDF.classQN1=d`{b`Ә`Ā+ԡ),WM ?0M=׷ '#KWS4Zqn4	\3"} 8tHo	g
u26eb$w[D[bFFʺ%43&s9
4܄<lh*{BS'0ZrӶHߍtǒG? qwP 8˝y|Q%8ۯ2:d*]ی
uBfFa+2XMaͅ%]xX'QOxD0dq,bcVC`X)g׏؜ac/ETEPKnS  R  PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA1KDF.classQ]KA=ꦖPԓ!b	AzYGtWfGcVOFA?͒!C3psÜ;/o .pF!RWҗʐow[zd]EBS`FG>)r:47=2D!oHBFXS#EFty<E4"_wǒ?ӟ,R,ic>pŉG^s:1|(|w[|\GJN41,V"lذQ,6G_yP!8BΰN`]s:4`\d=;Os򾩶X'PKŸS  W  PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA224CKDF.classQMO1}daE>x \n $&kKqn2vE/6I;{{~PAIDtM:J:Ayf4*jjd̈y=zL8/(yZPh3Pܲ32PVB(	4AyH'Bfb#/tMYh`H"j|7ҟH	\AAX-g1I&Q،Q)m;ʫ-	-gmbF"8\(XCE[f0Keh,E#j|	ظg_V؜/ܛ'̱=xF昞DPK 5U  X  PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA224KDF.classQ]KA=fwC/bO`J/B^ݕ؟ՓQGEX9rϽoϯ *8L!ɐpkҗƐkr4[WдH1w#WzDUD#Ё
ѕ/#MWL7rěңPkCy芡K|"cJ?"{pg`XX`YHYH3827#US/N<#{gr)9Z~|hjd!gF:62bH6>1d82{r#fn+&ב)K	;slϱI>06 PKV  _  PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA256CKDF.classQMO1}daE>xpibC ZR.,OM(cW!l̼W I#I3izf֪7\f<>
ƊGf (ZPwh-Pܲ32PVB(	4AiK_F_>g}.H0ђnDTn3W8)Wlg6I{P}6atO;󄖓6l1V#Edjr.\\,!"5d-
k襲^,E=,j|	,ظe_V؜/ܛ'lL>xF昞DPKRouV  X  PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA256KDF.classQ]KA=fwCˀd/`J/B^ݕ؟ՓQGEX9rϽoϯ pD!V(2$.'u!l?H=yl1EB"P焎􈸣K)}p+_Cin7Kn	pC/CD3'EǤtx;]E4&O&N`YHZH1enF'8P	=ӍVHəZ3BS#UlC&
Y66֐&C!Ñg  GX70scX1q׼Myf0WʳwO؞ckO򾉶HPK7V  _  PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA384CKDF.classQMO1}daE>x \z	C ZR\[0<a4]ыxMf{/3ޟ_TF Q,]ΤFkJld̈y=zL8/(yZPh#Pܲ32PVB(	4AyH6'Bbb#/!tMYFhi@;"7K	\AAX.g>I&^ٔQ)l;ʫ.	-mbFX"8\(XAEFKeh,Ej|	,ٸc_V؜/ܛ'lͰ9xF昞DPK0V  X  PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA384KDF.classQ]KA=fC/e)f(AzYG]Y=~T4RH=̽,)|ǐԗfQA]?=v-HhgBp+"wU<!( %t"nt'W;PYh(-np<t%>VTIqţi%]uO(нd)XX,d-rwQ7FjG_du;S}xg~x:Rr*)&h<XZ)nF
6`H7>-f
_DE8&;o̘b^a?ckȻ&yOPKO  L  PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA512CKDF.classQMO1}daE>xpi4z`1x 1XK]%݂ٟ	?e^4ăm2v{
;i$	^ u&4\ MӬZAk}ڧX:2_1[bF\%43&(S9u4؈`"BSFá0ZrіߍtF? qv!y&)xab^&iǶ|rۆ-jd,XC΅%]dF]a
T֋ڀe[7k׊y{)֧|oӓ| PKV  X  PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA512KDF.classQMO1}ta]Epi$r 1/$&2YJ]-Y0QnЋxM3tf?^ \04CXcXu\(iT+Vq	MC5T">qWrRB*FW5E92TKGnpc/#D39 EǤt`Ȼ7<E4@'g?`a͂e!c!pR,uhpZ̽QLp_^m	-àm	tB.	[6ll#o6Cl&0h"(16L59VL7#c
s̱E>06~PKtOIO  L  PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA1CKDF.classQKK1bkWU_ z(R B1kj-ٴ?SE@x0<`#H$rAjG*iv	&.j\W7K'
˵`F@2*q\GPk!BjX(`瀞-N(P(	4AaB-K_¸͍v%79krA;:ɆДQ-6鉈v$ ?Aʁ``=?.E_91q2wd=F[LjR~q`w^畅7*6kCC1[Svƌs.0bRޱZ,E5Lh|e"e- S&HXxWb>>jVtQ}PK1 t    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA1KDF.classQIK1};vR
R cLӔv$ie~?%fp	%ޒ`1nG*R0~u}slvV޹T|IXJ}X.F2q5Q"X%_/Y"pWk8dNx]ZB2*&_MI㞪$6Y$7%-:	6~ð>zq2kQ6aeeSo(5Of~.#W!zª8`] 0ԚJE(}1cȝub#00aTN.;oyg>>b>>9+NNYryPKWn    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA224CKDF.classRKK1bkWU߯CPo-UQA)cmdce?%f&of&eV/rh0zz~q]rY<.ipa#!nL]CqiRMe'}kuðwM##NG(peXpttbWb_u)Rں,ql*g?Vwf8ʯwygX*tc-_1)}pRmB-pkOfǕwL5
AO^h*>0#A$CU}#C"UE7]6A
rdky\>`f?sIS, PKew    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA224KDF.classRKK1bkWU߯CzRTEE xMiwK+<U(1PY<do&>> CaWE1_^)ۨ[*C 5	KX&d"-R'sj6E;a0lge6ֆjĒ91ldZU!6anJє;::i.LnJzRb.G<<x<zVJgY7zj/L:2U:k-:̼UH*.jW+@}1Z( S>1cøNǜDn-a,cEvTN.
f7	C=<!~\=,:;1PKٿRs    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA256CKDF.classRKK1~jKEQ**(cLfK6Vgy(Q/)L`ff&_^^a9CvKNﴻ.쮬o%@Z%bXl/[#)bWS\ڤ".BT]	dOZ~0uSHeӑ(+\d!:]Eؕ؄aWpUTa(EY-yrC3 =d=x=xKFfa1WLJWES0!/SK&lqEeu9SMt#@Sk(>z1#>8CU}CCj"Uy7]6ASYaދ&\<`?sfISz PKqxw    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA256KDF.classRKK1~>m/_EPKUTD
ǘ۔v$?SE Ń	Lff3M,#[(^1wU՝iHMһa#!o#HalI\E@%?=[YY!EAb}JYyV5yYdlEHM~R4$;FZdV秔|Xm+|<y~|B,FaX-IG
g
)W]GQ}ٸ2iVQSjEO>X*}bG)C1ia\#cN"7æ01bn;*'i
ygq.f\?`.?rNYrxPKAs    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA384CKDF.classRKK1bkWU߯CEі16[?SEg}H`373`}2d
mma==ӮV9[(J8qŰِ_EF&RĮIE\V2Ⱦa;z͋T#CQV2uCuK:T+I	ίuxFm]U8i6ZjJK3`;zy<y3,VO1rᯘ>]8
aB^L5'3J;erjȠ'@/FRk4y` }a![>ϑ!
*"ɛ.FHi9<{eSO.0t9$})JoPKBa6w    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA384KDF.classRJ1=uo^ھjHA16-IgTQ(1PY|0̙3L^^lb9B!"eF/W77O@j=M|D
cĥN6"D-,w(a
)"-l
wKPʻ*$c+B:l°ܐ!uQ5\":?j[1\`y{<{3gY7zj/L:2U8kM:̼ƕI**.jW+@/za4R1c>L¤aL3s61dMsQ9Nk;-'^w1s]v1tʒPK-s    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA512CKDF.classRKK1~jKuRm
JAӸْY*
 8Ddfɗg F3tΐFm;+b!V	>"D6i*UWq_7;gTx!2jtd2
YvNxQ*v%!)6a\*oب+r'rVK^G*nzGYn=|q>dXҧU&LԒ	7d}\QY|DTS ЅJŰ^0>1ΐ)DEccMMP$gC,`ry='jaϜY>%7PK!jv    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA512KDF.classRKK1~>m/IR16-ITQ,>@e`3od`K1W])0z~yulzqZ0Ra،uoH&R$.uҶ1&jQd8FOvVVHiacmqX2G>RVޭUM^V![a_
I㎪$Y$)%_-Vۊk?CރÀaP<˺evVaґYCto(UQd}G6LZuUqTqTZz5q`&}c!w
)!ehێwZCYli=a𺋙'bE'}S PKw
s    PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi.classY	x~パ1	r K8܉
b t hnӦN6=i|!a}Vμ柙fgF{9 X1,6A	`	KMMp	jMPg	> Y;dc0tw]M.#6`:i_E-zVOVY<domh$;jWUE_@d-D',LCB@T^15kWgIpI~! y=Y=ހV
M]@_gS-
.ѕ(c+T2ʚD嫌ް,QmjEd[c}ueʋ'H+W_%/Hhk].1?@脉%
=ŁkukJ{p}$'LDXAl4j+KTMf\YZl2ʔfv	P]eX}g;.,?%h J!'ѷ[jkfchMg%GtZYp*HfO`psz@q]pك.LhfaG{'FW 48h?mphneڧ_#6FI261+JެVO\p\Xʜ:5#j`N6N1uGT!nae_fUB:7 ='3Տjv8P~i_^8[-sHUZnI!%xU.\xde̋itdC@_U2ᢓ:T) LyIRdY^uu4s.ު>QY#a^.6FQKՠ?gU|A<t{Øt3
_QVZq'	C93F{WvVx{	!R'%vˣ3[̧)j
)SF:c&$Eθ(1ͺD8`.췋U>{Hrrw,٫bcqa}VOb69
9Tu_tgўN&פ-J*}$#G2%&>[/םLHiͿQ_(F/m#7Yds/0;%,Yxb<JdXƃ|HeFHɴ}H.:[EX6Qׄ(oSJVjk1ԧnՕkB}^<>="Og&' v|4w.lǉeA`70X0ˎdarAAɡa?d~A8pC?8\7rx8rp'8r 8<>rx?px9px!O1(lIvAqh)UDeV%+	Q&hgq4JJc[$>Z,m큵e3ìukf۹ɫ_*J7,*Ma`N:rZaX&P7\*l^WZR*Cd"ԋ*$2+z\IIvոlW%k%T[7H夬4aiv%ά:t:A&x^2aɲ >4ƺ0`j6|400"G˟}tӋ4l5$#YQ/F]@i3fD%J=i"ɐhH[~'s>\lYpX$>Jin-,,D[`7Oz-@;I!q
z>&x
.x»hZZ#aOL`Y$3!aV6,Ʀ%p\z#Q/$
I"1D9$(&1ĥ$擰aYX		婊RkIl4q;A4D9
323|Րϱ:p5,k49v'վ@/RKlFHrH\ID^eH,"־VuD5$V<Tvޠ?%S$r*1	|!AV!%r0pk2G=Qw	~ro^Wb94b1SAW:P*ӊ^Eb
 "`:0v/@&0UNIKӘ+*H9;ɶhЩf6R4PUVFU(G4U+R''XkLm
7bjӆa;3`q*8ѝ]LYj
^o	P)ڧ63b1bw2XU5֢clKu?3bDfXurt
rb7˔ax(hJpZC~5A|kQ?9F?!v槗ibd`*mj7w.VwG:lVeacf^V2=sʹ T 1=*Sp*O N.A	+`=jMWd@saBtEEqz脘B0iķĥɟb]0cU0Xp#O%yf6]8
y"#ԩ5Y#spz J+iK}'Y$k,F(;
0s(kݡįbySa]aDaxM̯E0@e5)lQSu~I֩`G}TaxN$V{Y'3ChJ0sh:> c]G%crd bT@b1!ݎaGtԬz6=0.Jf
b	
YKrR8TmݤHH\lz*љ	Yák6fD$BB(
U/
TRWk¤muW*<l
i^0sY g|:OB[y?@K AQ	15>Df;
ax8rn;XI$Bf;W?߄G̌~p)K8\ ([o${[0;bЗ!x)W#~ъ5į#^
D\-;賂w{{9+XSD+W5F7wkrPK7A0
  M,  PK    A             B   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyFactorySpi.classWiWFl&kӴ&YHP@Z4NW!OI&Ftn?'圦7ݒro4Owgޛ8-8*☀,T܀4K7
E4/
o{N.5[Fq`v j"LoOԀn3#1(&e&U
vV nx	F.5k#( jR9[
NYg@a!|4 0GY7#Ɖx7q%"$pMu.Fl ꒪2~axYc	װLyc+C1աKXjl֓|@a6L}0iĢ|gۼ7Ӓ$,Kjֲ̈莵6|N%\K1LWT9F8Tj[{r=XSLU'*$a^vS	HuܲueJZJS71O(Z@OupbQspe^Hq	K@wuroORlr=JpS܁\}ʥ*Ϯ/hƔm-Q)<RنD=;h8kToCFSUUldx٥KEkfʝQD%nm"8$Ⰸ#"Et%⸈n'Dqrnndj퓕ww{ .`^\ȿM.H>cKV'<ƣ5嗅cZVm<)ļ}r5xbNS AjeyGxW?6bBBwTyfmPJuF3PŒV,IG=QlvQ:tGu#^^jX[!sQƝxPnLM؅){4c2b?=2v",cf>(c7xTKD-x\V<ɧOcC$b^½`N㊄3rsMJB͂98pqnܸarskF9(9n^0g6#EnG^()QvUmqJM#6	!%=v(ԑ?{ _9Iƫ]~_@;GhzM|+ oeNTSPQz7ٕWiJ*GONC)=	v<7Fzzr	b8di:'\+GUEYy_d#K]gγ#*_ʗǤ2/K"!HmgY#ǈi,=HWҒ9WD Vj[<7ӝS][	4^p73,^7dpT!׳xC-hE+mS/*>0̳}F@PK    PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi.classWwU}0R@(
i1TMiHZtHds2}7\mШQzLҦYszrw	@=~/GE9%l[F=dDf	eoWgmWON_Wy-$JG#fD0jVfj8yI[3L	K2;,I%AnIXN!+])ζYk8
*[Em q-ȝng4	b{H4L

V2⼟A_>
i	z|j&3cHX%xSMu
rTNn0j}!ލkP0JDYMLmNA$bdʌǸw3$,#iJ=u ]_'j=}DDֵTS|8L⦡{ 7'+C/7{xЈ[Fb`&#qYz~6
<ٙC02zfwwlgv΁$~f}dr`7umP瞘2&4{x!#ϭio̐)0ZHO:Ϝ6ARᬽ2]µ铓s9(bڜY@vhˊJ[jW^XZuԾ#QZ;eSPKVf/r:{8X]d	޵a5C5C
W0\ɰa-Unuuf0l`Zgp&ޮ%݈_΢F_o(
xK>x.-D{~D};[<OK2a͢i'-TeX.TM'!lWgY	W]G!T(XQW7Nc,6/Y2,@YtXh.![FwN'oeLeUX\eS$T!nST2yp.>áC͢1
@Vp)+Pq-SMKE[fh
ѧ`9J0TTAt
\.,CP%`,AHB2
Q+Y0#`1bf	^7〘
+X؃C'< ȃ<$
hS2ZV<-[2pXFXnxR7y[
 ˂".(K2Ų8"؅e2[񸌽xMxb>x~('~8kZl8o!t;xdE1h&@QIcT@{#Ւh$Q-X.RM+(>Rc逸1:j(VCo0 ԕB._r$0,qkY`A
%L8Z>Q||K\[çU$>?"N1V]zzGQ+~#+P?jm>FՒ<E
Ju*lbaT#P[7c9Nzuco%"'Q0]4]G\F?,
9>ׇTuǱ|"/QwJu|GAnI]%496c^Hh'P$=P\Ui^zI?Y;54Gog
mv3)
P~J)1bNV۴a_(WNY4e
RNq}uBc'ZPKb  E  PK
      A             0   org/bouncycastle/jcajce/provider/asymmetric/dsa/PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/dsa/AlgorithmParameterGeneratorSpi.classVSWD6
XQC "ߊ`16R%6fsY7
J>Վ)3e/s$"Ӈ{9q9n 8ı78q)hK>PK
/;#t&;@!ԜoR/SX,e+rl[Ƃda֥=0V6a,N*َgkMZMtMl.f+b9XtiÐټ&[[)GK[3IDQ,ef̳͛O,^+8F:_S䛔2bn-9ڈI{u
[ܞnjyR?LEC7U76~ٳV,
VR9-Y,;"`V쭩ĹhB+x~6$ή\keMWƘmwdx Ŗ,n)dJЁc5iFْ e
wn@q3kZk &߀85.XT0r(<7qpJ.7cl45nkl!6f]qh!X1ΎNTVѫO*8}UPqR)G3waDOYN8̼yTk&qObT"
N{< S몷;cOAd"1Fb[șDsH,zPtV,˻V0㻶Q}KfElw흔mL4HH@qu|K:hױn\+:pUIJ҃R1nH2#7uvV>ҡ#-$2ܑdN0i3i0%7*ѐ
gFT>3I>KI0O5CV|5 ~>q'^`֣;t_<jCLFR-U!vE'('x?uKhߵ?Bu^^.˟G.6HSK0M
v:"ߦdC*\*֢ObZJ/T:W1QE}*ҳ?%_$ԭdr9bVQz
\>ǩmn/هw.٭T .bˍT/߷U,V_UvW`UQXDgkFV$=x2C-$~NFPK1dW  (  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/dsa/AlgorithmParametersSpi.classUkSW~	nzGmiVQ*pѨ5ҪKrn boB~i̔K;=%36}Ϟs~
|@_ J { p0Cp^¨|(g-vEНqbLgGFIk*qaTzB,nIbϪR-SS>t\Ta;jD5ya8,R5sW]鐛S[⨛0m<6̧F@]2樔ݑSrZčðfEn8"<wZ3)mG5tFP`ʖ-ԅyWZ\1k$X2ӎEQS@T3`K2olнd',K[#O&<?mP\$
ь,1k
En .k+ZL7cɹj4B.4r|u-ͲT6T'mSNx!͛AhRo(,^Mކp+Y^qaȕ؜Z;k	kN3[lJZnsm;-M)YxÌV>Hήelc4&7oE:J+ݓVi[dޡՖ<VGkERl,gko]O%mμ8;S%'&ᴄ$s'RoQ1Tc\=}pjlWk'7xnm!!{$
|[>jUs}za B7'wKcԮovL}"ԾN#e[Q1*W )\deaF{]8y7dMaލnq$ȸ  A\mA2,1!2@ lZSL< 9AH/;|"ȧE۝nA_eh[bSn	=T
Azzv}
Yg
/jባ?7'*X~~Ow1 ua5QvWh3lu1U/z!/@lSXImjK/RQ
g*M2?F}0i!!!Q)DtR={@/YKdqۨۑ"QG7(*ͺ%zb_:_GCKs$:@k_̩
VYi69{TeWͦWni/0<.%\&a,XGࢧ<!={st~h3U
5}Rq\zMO3 PKУXC  
  PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPrivateKey.classWW-`/,K_i;@؋l'\Nes%cpHX,
u3M6=ImM8]?י=$!0꽝7\}_ p]+QSJ	m(<4vn~h㐩ϪxHk<&@8HbCbj2ժeݪiImJMǬ55289-ި[)FRpRHZljfҡt݈jf
&H:N7esɴ	` O^#hd½	*bHqt)BFRl	A5ոfifѳ׎V7X}@@%
GXE;JVSiF$67@$C;d!D'fYUJhTXKZzu2ik25q)o0m1mfL5JwLMtîˉxژ" LWZE8
6<7tѐaiQ޾Ni4yaN jR

e})`ReMCѶRY G&ڰ$e+A'"C$̨2IυՔ5eV:vg/<N)Y_ԝJ6?BͰ)tv,]-%$ەnFdqS~as.i%%$~
ĳwWHq&΄5%i&fu2s.NҦV(H߽ZhIEՁUrܽ'/O`%\k}&y.;Bb	F[Sk%8	6[,"+Id~NyqcU,YDPD"vPD-bWC"DGD"/^%g_頢~'![X$>T, o	{k@~c%M}wYw	
*_<lsXmve3܆m*of;pF:/TtN@iוV
I
[
Sԟ꧴L'Vm+w%Fі&@
ro4W"PX)ؒX4M+ˏ]yDy|KgY*.U)"d!*c=e4AQ2Q)&
LvJF/2	w")Cj2nAJF#mLngI5,!-Fs2zZ[z{uxx3kELni26m2ۙ*ﮂw2yH|P I$vG|^L>✄1<q&g0'|B1|g%<O1	֘`	֘g|	gqgÌ0>'g<)a_Ɨ$Deq&d&OIGq1yəj,'[\NK'WaK
WF*95TPd-C?=4?b46,IV7f@]<.6/"26^1Jd
$WƳgs']"^bE\y|#DoNx3 UU D:Q?M};3ݒyc
:a6=m><_dSg3dݛtkidGחw70+<+!̃vxhy<x
p&׼_p[XsǷ]U=6Me?J)'\
F;!2|#mVt89U\q)T-`J}l+lٶ+lNVt⚳8ޒȷ	烔;"K]ΕYOqT2sJWe%dO<S/8%eOVb?W0tpRعX=B_f3/l/֖5Eȣ\8Ldl8"`}y;yoi"`{; PKjC    PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey.classWw|'`)CePF@cCl'g,Ȓ8.IRRw-! LH[{Ew_|wCo=u.?
`B]].0ÝkPY7E#ZT3	n
('ޓhAn}́}
]ZzjoBW%W!3Cj{U%٭
A]3TR%@\
FZTݩn+=	K*	QUWvhѰu-JBjF1|GDǆh0RɒE#@Tj9E2Ѯ"{TDJiG
edUI+J$i3%qZArVG*-H;aɠU:9q+G>ҡ%cFs2pWҫp"
-PZGI#`Bq'%id!&2Dþ`=;bh(K#$HD
+Z=QFQӹ#WU"!U0P괰?ja%`2磜zT>
{%rr*`t	*NUm9U5Pkq8ɢ1=뤠J>%]
41+NPޗ`an
{ܯʍ?A?DѺ4|`CapldWaƒD.7b;! w6;tU_\jT}de_QZG}諫n6NU 74}SLZco⭶!	5JIϚ	Uה
 ~vF+kh֫7B2b<Zgex^7ި{NQ-bU"|"VX#bX'b
"6,F[ElQ'^v11pO3Ȫw#y"c)&SoĹӘw_ؤY8z|ٞL}+,~#flv*=ưeȉZɀ)386I5r}㑎4Dfk
@哟wΥk9N6M%gomaX֕{̕NBM)2mHDk\`<u!w٩嘽7AZ
>igऔz
2*-\ADȸQ!Dls1MeT"!c#-d^q\028$}22ƫdT|;Z~x$A,<$X7p-||]xx;Qt'a/> >ഄ(s>cpi	/ã0xY	OJd$<O1'$(̡0
<ɀu>/!t!1ʒU|\8ˠ%qAJ#hã0x8ˠ`϶%|Ioz*JhǽI)$R^H\:\OrŘ+3Jv`Qb7o^P|ՋBj[_A!\SOx-b>K%U Kx77قqq&12)Z~e-퇫J`]^[,G؀]"Et/IaX!Ut4czULKgSM
?Oi<a?i6
[=?eOߩj:E/2ېDtl.Po&Ǩ;91HAsbQ?
2SVO=|
+
ΙȢsvn6r,&?rxPY\&ݼCx<.!tA霍·W.&[/i
?N3BpӖW8Ѭˁrл3%C8ؖƗ&oEa
fR HbTcSmyy
_\eGr3(,?@9cغae\_ڟ7ÀM><K
؁3kh?U7Y_me
ϝBGٙ؟1m!5榍Y1ܲ1vRVn]S306zES.bٟnL4=\šl,5[櫶2𲴗68TёO+lBܶ!`V|ժ2iµ~Ty3KgoGf(h>TCj7TJlPK?!    PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSA.classRJ1=c~Q2U*j@2fB2)TrUQbuQ`'sn|}|8.A\y"(\%mԎ	*QbQ/J8)X[s%$nÿwx zבUD=ҷ\nBp-$ыɘqt:RǾ`=6ir!Ay'
45XpC3qv[yM߶ü),E+XFw"Ow\)̷=ZSC2,S;6(6MSz_ѶAjt?PK>K	G    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSA224.classR]K0=jkNm/Q) 1atth2?˧?JL@N%ܜ@Jxᇾ$y,nY7Qܥ0	gR8JXҖt'!A}}ϸ:,ÀHjYBk57!8CqDLL}bSOk=t0P00gh00OPT.9Qe'}l֔SMTn9=FK6rXNa%U&6,XX566	
N	GnBݏ0)$0!53DwuvCG@1VG#l5BGkZfPKL    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSA256.classR[K0=jk_l{	"NOa1
kGY>MQb:ER&p}/_N;r偠xᇾ$y,n^;9%Dq>F'I㤧"*v(bInI=밀"-fho܄Yڋ'1e2v}N=ƻs=҉@4^ru	˓8eƼnr&wW6򘳑|
),Z0b²,YJPp"O?r~I)$v1 zFC:JWlaZ:`}J/?-^20 PKժw
M    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSA384.classR[K0=jk_l{	=(0:e>=4M&g4qGHs|9;:A}uI`X0%VvZ'Dq>F'I㤯"*N(bIn'Ӹ{5aLEZT
ЦR]3	r.GO'bd	zMv[{	퇁EYr.߽qe&nrwW6Xb
K),[0fª9XNPp"O?r~I)$1 zƸc:JWl`G:bs!J/?^20 PKUM    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSA512.classR[K0=jk_l{	N}E2Q
cFG׎&|8tL9_	vA}uI`X0%fFP6}!O8*IOETPĒ6ܺ;
	j{5aLEZTІR]3	rGO'bd
zw[{	퇁)Eir.߽'q8fy=HL֯ӳm1g#RX`błe3X`cD&8RHbV3A̍pSg0tl
at8 k^~D[-ea~PKP}`xM    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSASha3_224.classRJ1=icǱm7Q2U*j@JbL|?38!{Ϸw udK;3w9A)jNP.}>8@T]_6i-m3=-h
.܈Y:'#Bdv$oQGxS5`#8(oҺn4?D-5aʞ;i\<w[Ȣ`!bX6ǚ	&b:A:u=ǤR&ag&m;#Xyf[#l1BGkf/PK*WR    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSASha3_256.classR[K0=j˼<xm/MQ) IbfG׎&|8Ĵ020//wϷw &Ȗ+w3w9AJn1A%;C0YĨ7Ye`
PMa'!AmuK_[c@it=v)nDpe˸'IEqtoey)r45h	v˕.8%+OQOg>f`&N?(`.tCǒ,0BW\$`VA$vTXAop!V(6jlPK$S    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSASha3_384.classRJ1=icǱm7ۅU*j@Jb&)ә2I,W~%fF
&prCι$o j!ȖwgsSnիA9;!<L*OPF}Pv|JڴvMnc*ТJh\6ݎq͍Nu0xrR&^OԑlֿP%20m00CW*ߤu)~i'~j:k1Ucbs~m!cXaD+&L,Œ	F4<&6	x=3	n!+6FȷG0:b}!/?-^4PK@LwS    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSASha3_512.classR[K0=j˼<xm/MDFLԧ'i];LiDNs|I>>a [\ߕEr*jk gBzdaԗ)܎Ca6톝I-emQ
<*%̦B^Rr.f?\&Qe2tֿ&hiҐנi&-WnҺn`<?D=5fʚ;n\<wȢh cXQK:f
A
N`\ˣBp~oYEQ3@SPb}B{!ֆX#T5NPKS    PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsa224.classJ@ƿmch!e"1@Y6)[1婢P H܁o߰0 z8$ሠq.3i.|3"A>i3bfre	0$Ts#'t(S5&W/x٘:SLLө0Jrhq%8	»*+}ASGWO|@|jCZh{EDf`´ڮfXXy2U@74^`ݷٳw|PKOV    PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsa256.classJ@ƿmch!eATXRE[q,aKݭTQ|(qz7oow %ဠq.si.|3"JC1yə6\cSP-\(Mq/I"vbdF2\3n
U
cU<D(t9	$f??w\.K..\ [d}K1Փ5uZĪ<8QZ2v5sǲŪClfyV{pڝly?͞ PKu    PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsa384.classJ@ƿmcheTĐ*
f	[ڤn<Cփ Apfa~||a	sIsAs%Mxr#r҇|3mƂrULMNL34a*vfd*f 88qA*Pb2FIN~~tc[ٹ\8.V\4\Gu TՓC5uZĺ<l8QZLkjqUب-X/zC~9]={{h}PK %    PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsa512.classJ@ƿmch!eQ @Y4)[1婢P H܁o߰0 NKPA\\\	fD|;=:&҇b3m2A*ǦZP^<EȌe*f$89rAǪxPr4FIN~~tC[ٹ\8.\4\Axu 
bǽ'
>j >+⡉U-=xX#p"veLkj枱eUبX;/xC~)6m={W;h}PK3	    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsaRMD160.classOJ@=NEpѸ"4Pp'C&efY
 ?JDA:r
9`Jй4P{(s^D`\KSTfB&mtvqIeY$Ýd[IBD0Jr6v3E¡ؠ؋&_4H(|
\l8a
[<ZhP1 jܳ![5
ktmYa图oѳ:Ѓ	PK>    PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsaSha3_224.classJBAƿMߢUf@݄.b{efc2
z*4;||h␐}B\^BKnetnMB!OfH7v,&̨a,aݨ-%Y5f]5^ra~#GBN@jM:H`W={/!#TÛu_{ 
EP>
((!I\og̍PZ1cx"{;B)R{
slϱ컺>@PKN    PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsaSha3_256.class]KBAQ}wUхǛ0QBW9FgueQj]!A;0;cհKȟXBYhɭGwSB>O&H7v(&̨~,a%X5dm՗^ra~BNUOjM:I`=u={Ϗ!#TÛe7_y 
E0S>
((!Jz\okȍPZ0};{"3[C)R{
SOn:APK     PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsaSha3_384.classJBAƿMߢUf(@(hwAh8؈+3tQPh-9pw|@l5*VPZr+V~ dTpcG	NlR։ZRjةU#Qi6)<|($dR3nXZSE|y
yޮmIhWbGm P,Q@G>vҗ&v~#n4Ҋq#esrNvPc{te_PK3B    PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsaSha3_512.classMKBAߣMnѪhu3"@(hwAh8؈+3ctV+ЏFk!́s<w '%da?WВ[]5NG0}vLb
nP2ӱMQXjQ3KBm;jڪ/&:%dc<Ԍt4V+z/.{u!aCރG87[oZտQda7@ `V}PQDŇ5B$!֐#
`(9vEf\S@7nXbvwu6PKu     PK    A             G   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$noneDSA.classOMK@}nge/^"ԃ ^q-n݊Y
(q{$gxFлJ[6%{+<iVRXg㪪
'VJ˦Y5v9li,a]/Ya߻ɿw/Vw]bGڜ6igݫĳCPD!5p@ѽ*VXԺ:N';G0oA68ܢo;oPK    PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$stdDSA.classJ@ƿmch!eHE-Pn%MVcy( >i=w`7 e.Ǖ`F7	AX>i	U952ͅtGBؙThs͸)TIps6NU((d"&\tcm۸p\hp	u`Փ#
MZƺ<l8"mn20K8ĪŪGl4yvpl}?͞:_PK'    PK    A             ?   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.classX$k,is%DBW;	$n4בWbwebZ@or
Ĉ Sf:-9?͛7o
`3ۊ[kx]1)*^Kx|?aLhĔau
ZcFx)}FNdtHL'T<Np0v\"0
q3?*TͤaWipKYf2i	'
1Y3%2j]/U59I/v\-+mu0;mѝ;'fnoPБ&Hwee,f'RFr¤V`Q;2֚q.X	AhɳJf2:r"3m+(uOF'BRɴy<kl4f)#Aq:+9E(+P`cJF'Y3>m'ţmF3vt!m;7!ʉ[7f3N::dd&ULkQB77#d2jgrn&
ziD"\][
TG3VzƠԡHNo&l]I
?o+ڀFMmn-Mfۧ`gVI}-28M2%"S2L1%cHںQ&Dl3!cҘ	F
n٨`!+k&ؑncM.8lIHW!/˽bZ,ns5⋫u˚3)dX˰!aXϰ!ʰaf~-W1\Ͱme302130`AѪzA4xBstza.uKsk\wQkToM珊{y>zʂb1ldӥrxUR-*X5oP
vk,Ѱpnk/Vdʆd]
|0KѮ=W{T<.ۅrZ0P}[nV2(c(ȯ6ToQYbFU\ZTĄSqT'쬊qKmp+]cܫXE'~?
[E Gq3!~^& 4!  !D7wB^x4
!!HO!"z[|;H6mSwŏDJ>ݢ>PV
@Y(+v۪Kֶ³|l.R_(_(e%NP	U!Tq_tG(<8R 4)e$R&	GP.q/9*<g{N)<
ğq-eXkx&Pio$W)"BS=R-.}'}-X^tWr@S+/PU`ex;d#S*5I.UsPUȢE˻WoJeo8$b'ϊnQE|}9|89vi<7˱
Koʗ0e
L3)ygGδ9#)9Sz݋a5>@W,/#}s'hџx7O/bSR|M6BE$rM۝[J'<{Eݍ-uSse^D[԰T1EILYp;P';Ễq&I	#<F/$	'	'4? "8G)		?!4	?%L~F!6 PKl(  T  PK    A             =   org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.classV[WW\&cU5؊!#KK%@E@b-&0&q2Aګ~Sk)}CHCv\Ć> 8o<@a(5\b(5|#UhuMaw0eQbISOZrUKjgpyplv_1npxa=fLyO;q˘lSWHE
]2T1S'pB4	7lf܌&,m"r~-E&(6i3fC.vJO]Q-AebM=Tw)mz"-}fL]@ y!
`	Wt].h#<J1lvThbBJ=FMڴF53fPlKo<n1i1EA	$hXԴLi0"}#B\\OZRi-jK,uar
[*xkaߚO-ZC-j0B1x[VO3׭T܎q\'2{lKZ3}EvxNڤո+jQ]T]^!mDvx&IvZ"duqlݰc+cKWOB|$%4J8 IA	C%#tn5$ݶL"qP*Yג\곪5/}keOIʆ+<hPۘLWktw7kl(}R{"!+[,j:swei9|A=#[-C&͝u3X
ຒmk\ᒂMW {y
<(Q

A(WP
ǀx0C
v
K݂ОWwQfP6
vಐbN%A
`}'huɤ Im2qUF .L
q]F/	Ė"2`\Jt ,D%ET)AJDL8}t7}5Y-~Ariʨ-$eDZe4^W/un[V;E={?J9)&*ol`HGi/ya"C|FO:C̲\$ن+ARWΠz,m;gP:xϑ.~!mx!'I{h4^07SyJ<Hτ`ގjئa_Ѯm+Bh:Y>3 ')P>gStgxwVbl'sS{P2mAigBypYǇi|4g0dB!`l/Mw:PKE캢    PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi$1.classRMo1}NItM˧!d2HH=CTPE*xGG[od;I ?M*T>n9xf<?xG/56XzG
t<FejI ę0~LZکMf'|<iLa^.bbL+r#FS(8edJ±x_Ʒ	Ը6QVǪ@h\L.9J

Y{*p|ČkƟmgs+e,Y/k"ԱAV
q4wh`[/R³
"-T?Wޓ)cVi<VL0r==d2${M\7`6V/X`mIb;_g[E-<]_PK0N  "  PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi.classX{-<y#BڴU-M!Z78
kyזWMnӴ޷C2qwL#|mgv={Nŏ~l:?vǏ/)0 
	FZ<0tKjM/~<*auxkn
'aLLݞ	a'uNkjF<5
jkhsHw(4#Zfh&q%\^Aw$.&XZ#R%a%=CJ%*T)	- A;rG~6Y\ڰPMuF5Ӓ\z#p˔q}IXjRBKkխ^:)~Kɭ)uVЁSq-m)buIHDeJu jLdfteLWbhFONh7PPsyLzRtvRkVd
:چڲϢ.U65u؊\\,|카FN"uDXd0wNn9nR]%<fǉ*^zDd<1sqղZDHop)6sz:nEJi0N$l{jW˕G2/^N]*9S>==G,\5tG[.k vԓz22Dn.%T4T%3WZ$mfirjH4
s{
HuƕJjNtK~n	ѕhpU-b8S .v-C*=8]c.Tr2εS4QRt[z7(.!)&] "%-C`{znQ`M/
	8 pP_fC*ۙ~顛>TMME՞D f⫆1vyIt,v\\UaN-zSJIO;To_;Y;[=5ĖN^,c?F/QZq6RHd[y·R%Wu~5hl2*^uD#MWw$~i?T{xܑz
VrTW} :zT6CQ$?8SEX*\ƫu
^)/ƴAV$3
^p
k,)4kL/ *Њ;ᔂnCAVA w1NAF%*oe^ƻdQw3|S2F_pJ|Pƫaw4}3|^	<gexڎ>!cex?Çdhxq24gdLs2tTg4_!hUim8p-dx~/cE1}*vzLژƧPd	HzzJ\ݑǯu|vSjz4y<cy/yl&U<]Z>SZIBl8t:FIuPqェ#G:ZiG"Ԃ/cl<w<[QрWr=sZٳYu2ɜ(x_z|/_jGg8ei<!M:*H'j/<ϡ?>ÂzDzSh	cz8&Z]nv-B:&4ǏYq}aU[>BGD=9,pf0CqTc7c!R1!_.YCzn,qN^7հK[f`^:Oli/ǟǓ1yôyjǉyÉκs9|[=sE%<~S<Ҭ+/*ӂO?*9f19QDyYiqcscP95o1ǽŐnk16K~
m4XZ		֊G?h-sҙQ/PKhn  T  PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyPairGeneratorSpi.classW[-X^lCBJqYˈSĎ^˲ŒV]Gz߷ˎLlH$n6K:oWOޛ7כ7w^
qCpōrl	rpWbZBNp>FOC_Gy;=aZTIMDaWTMl5C}3*r\T$YQ AڧN˩zq`z,"3r`hs$C
[&c٦XaUI긜NFAcNYS#sahSjYX7+	Kt䬪ٞjb/ʓ1fcMff͓92괞&-MOp_eZʼDo-T?!#L܉R9++ȁ	b0aZrB!dnDNꩄ2ȦSNSpn_ǴnutNjOմ~ŘOZǜzCSZrF5jijQʹ8Z+qLiQմLtOGWw]<S#c,fx:0@^}7Nn̛'//H0*rN*0vmѾE|'UYE'
}d{3C`#8"žlt/y9bN<,ZD8뀽L9Qswr0Vfk!J*O@tM%*;TےK]7nITZ|6L
6M75á77)Ӓ&UiRW{:ێtKCAdLi!IT{ʁRGy4x?^</<ZyxƣGC<:ytAyq1z.AȇCkkD
2ECD뱊>Yʽ#	"TCY=j9_ӽHDwJY<?ʏ֌WT4涊!5O0\׳1ِēw]:Dvo>OE&ftV"et(j{fpMx*g۶	kD\
n
̏&JK(o
5)fSj'F<T,l
.sM:S.lrVDvh(b?>*	|L	"vbRq("j0%*{P-" UD-.*}q4
<@#.ݘQ].$gq?,0R"vc\dugg}|29>"C~|Y .4AR67bt!|_0pU~%X(1!q\wLy3O+>
OЧ+Cл6lʅ!99ҙ7.ņf؏"d.{x#)'ڱfz.?x3Yįun,w.EE\C,55mUoM8΅!4~"ylu
lH^Bm#4~w~*
þ7E#LD|Kx7rI"^"n%"cPmb6ÿ	zxg=16ftS^ef@~{s`[XE¬#n.py2Lõe=tp:^Q#oUlB~(r--F,BኃMG]F^_PVuH_kixs*ת}71-k hu;d%1Dg]^!+xr8`$"i5s_o)m4vpؘ
G=^wDUa1KŪɀVFI7/waNk Dy77sAPKi~    PK
      A             1   org/bouncycastle/jcajce/provider/asymmetric/dstu/PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/dstu/BCDSTU4145PrivateKey.classZ	xT$7y<(
bU%BBd>&/ap2g&`ZnֺǺUT0IjPZ[mE9YI&jɗw9s7<`k#E&gBq	%e]n%g"2Ț*Wl7mezgeㆍ-\?иaE@k}ښgukkW/Kpk4Jlcz"cc`4È%j:b;h(`Zfi6fÞlzConغ8{lgxC,j<ZGPXmثt8aF1F3ȖX3aNkXKTF+֎7u<2gǍnME&1k"t7
6ymMu(XCP"Y25[V0wK	KjkFĈ2zG
7fk)$#A];nzhR1imyf/x1}!Y	ːXt:LlYXB-cgO~,C7ib;Ӏ1+n^vH!12H{<=֍ަWqGÝVAj,жG9(mv}E}KF{"ңDc"fl}:9ɰiՄx<4%I!&CU|աV$a&bǍ`;v1r#ntq>BJ|p&ʈ;Q!6'h;qF4v;z<6|z<2Ϸ10<2V'OcoEIZ7ȲlD[(NOy0Tg"݁p0y`ܗu?%r.a3aKVB3MrȳlhCG!ӧrhJXLL+(?͙Es2)&7|04vd=yltof(sS<o)6+L"W@u'vs+8VFP$WECd/v =hc!HVcO~_uMfs"z廑gGLG"fmp;`8攚m2.!,R f-VN seyQ<7q2lGț1ڜ1g82N6^	\C<nlڷ̡Hfh>q#w#&G;kbq
tiPڞ=)j,nbqCjF,!R/eoa5G̸JW~W'QF!uVC\mk#vf_ ׾޽s=P=4*ؠ`lRYA-
WpOE
ޯ@WUAPACAVlWp6Q
.QSWPС`
.UЩ
>C
>#
.SQSpWcKحsxbfЕR
z;ΜAL>-]0ź*ȳ9Xbc	'-UI1|v]B%O,8*[lCr{t84.ǥ5yuRk'%uL3}10ɬ6fdT+TNy0-J:|B􈝧
Ñ
&v ,1ukO!sŞO덩ܼ;_~~^|=2d7XPE6/awR/J8:&_ђ'-:TidHt~-4$ZCsa.'\=]-)4]w
Jp܂aI-Xyo_3nAar:\˝j8sZ?2pVtO8kK>&O}ǀς	놰=9Nw++!ay Whw1r'tzepYF
2}Ws8ʿ*7.Lg~ٳp>ɣ:ˏzQ;Q;dt7B7ȾmN@cr?'8찝(|>u'߻TԋJV;Ňeeyf<^%Asa<pD|S)
#
]
pi8CLK<(p	(pzS/V
PEK<Ok_h#PJ,j5uj+
k
^VésVXdE4,BkONƟ5\W4_4TU
W!a^p@)$P75L[&L0oK暴O	xpLҰ\+(p(R
gFhL#y
Fk1,
қD
W$y,p	SJ%:{d覙8HSN&0]$Y:6+DiY* ;i@R4KUCk	\^Z+P:S}T'Pq?-BB}*vxV
l*TCtzWMsT<L_#tGi@.{rhfKT|>b?-X(I`>}V	>,)Iڮ"%t)K	]JRBhVyNX%V"C GHBa6
|L*kT<N>!/P-p@@LSOrO8{%zE^QW{JEԪYM
FB(3].T:j2q>OH+b"CkdcB^\oA܁b܍'5<s'1
:7P%-'TjB8?t; n:vn!ަ_.#1⭿Qzw&J怜7liQVm}iI^̒&Y?ꔦo<M/ː1pRpPaRoۦʷ8=h(wͿ,~O71륽Ş ݜKeܻxn/q;'Ir{+d%ʊ2w(9i*+S/	{KJeŢnb9n8NG;<G=
RTx[leo_+7_n55kڥv--<X	:L	qB	7U+24#._*IM/yw*n~}*.sUn}2I:ۥ~]N</Ln)E.so-ү~e3Q#4}m4:,J'q_[C}skRxo[iYURV"F*=x]RZ^xQnʽ	߷/IOW)K.	~"VyzlS'IO	<)5T,uUho:P{TVʿj#tF{n;|e݁JәT{Š9v=#1(Ўw
+_05<p
=uz*حR:0%M=
8OrlZg-Zq'UL]bjEš6؝)(]ǞϪ6ˢ4'mcI.'w?ݰN2c9=$kVm=3$BIG17eGiO8on*3IߛpT!GvO-)K:TكdS5+EoqnCZweh%iw7X(+_875M1ylDU.ˌ!v8Jҝ]86`+Yw%hpbvsg+ǃOrv:ޭFQ~`g&N[5f0OɌc<"W#)+==˞km%sO&)54Osr9ؿ&fR~osƴ6sW&{z}<}KŜ8}M3_R&*JCdGH.W^vgJkR֚&nqU\ĥKNcr}YwlgAb܊'q6vW<j^ג.^iwf(*=,yH0EOd )n)syfr#'A6HHStrK^wmL'g_OїSCpތz`4'tԗ)f߷/|3X@n1E۾]mхlAe6d!`_IkrofN³x_KPKQ^  3  PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/dstu/BCDSTU4145PublicKey.classZ	|?뇜"9hӖpATZ
J[h9sү%&5Ic:ݭp:6NEE$Z ssNwϹ]7=}I6in_\>>)ygGGA>]n0p3!rB^r-2ۼK~o2-wTկ7{|bNV5kjUU.g!fΟXA}́75O]+ڂam
a]a֨>`<A-ZYK'_ި7|uf6s#lTC6=ijAwKڶ->g=RݟtozN={Hbdӯosxaq5Ab`0νII׉!M@Ky{X_yӬJ:6UkFcN>|ik\ݰ.nE	uZy]
Oc<ݞz厑2hq{ɾѕ^;;}nv~e't
ڌ3K0[}Lkn [inz׃nc'2{%'7F?v=9zαڹ&Wݘ.^fղiL'C5F=h2%L&vvJךJvZ=]<#KYVwhk
n_*o(ٴo᪩[ހP5v[uaScմ'>QsB{1I.ϧ7}˂m-?D4(~X?a1ŧQmvzxr1=m޻Cʊ:;Y/ďcSqFB\)aR*";XpI ~{ܡOwCَeuճ˽n2{$i}Kg`^m
{eSSqӍ655u4&ks;/L$P/yW_t%9_M.RbLlYYwHu:ŎMI`}Q&]PڨSmv/"O5pM/Obwl{mytGk00uqH5(H_WY41ma홿[AWʶKe媫쨵ưP#k>aEwI]:a[Ra
$MdK#ΐ)Lމ%i{h ^ޙT}ȌX[gm
^'[sUnh5TgkA+אnՒB\ƺ}xgTtޏWkZ8R4qEZE5BF s{~) CWP`
6*ؤAfW)x_5
UVEGA]Af[xlSp~
WTRVЦ`
v*hWp|@M
nVKn{UA(?T,q	W_0YiUo:!b1޴$Qf7@	KPT]"F'$H.G
QEU=I|aQY!O9t#f{ϳ1q1=VUX*8[a0!-\*&Qf=9[FTrjLK~)%,S2%٧(8/Diko$#j¬.`,xsҧ+i^	
/4-_2RbKՁENc4Oy骅%%gɒSŴI%A?=:9L7j+2ye"̓۟AάP(6ySE/J,,ϛ]: TG 皁;=RNgB2HkISIf@e[lv[Wf}3MWJ]@ąWg`eїRȿ1%-3
4ohPM>o Ql@5d r7inS&1WH͖L$ѹwv?9"A^^?dߗ]N=x{
0
#e

%
&&e
*l
W,(X+N
c	!WC)4-0G`+jlP5|Xv|CxUT|SexMC
koi(·5,X.'
]
{jfC
a
?E?0?հ?0?_hҰ__kokX Z`~`?L5LƟD5_4_5dp9)/GC;.$0B9y*o4\D4!nx0#Fp.cCF	\(0ZP`
8sTM8@UC8.Sq.T
r/TO3U<@E*\*:LiGRQ1/0A`$h@b%U<N*vW
T	4x'ph
#T!F`iUqT?JN%v8FW]D"BEif*D`@:g\+&h	U<K''i@S4Y`<
-;U@li
8CUHKU)giFMW9#_U|3%5J{!2.\Z/p9Ǘ1 p'r2+ih9-.nǂ9ģLm=JG1^r=:F$c)ȏ%d)#Bf'Ч;c-~^җYEYT.wbη^DefG13,}ǔk/1ǯ	XZPmP"R:	|XH7Ƒ:ϙ+[AL
D6,[]FE6DR"braNN텹9QaiBQz)r
**8 V%UK.Ku}Jj+>)|Ke{1cFGetl	h{ T	T6_xu`C	~&FpGta?6e1]ldEQj\<e%Tٗ/9K]Z2xNƹV[]Vˢ%)2NCVG5	сPgN'4Ȋmϳs;%&E@]%s%g9s퇣07FǝJ'N5*zNK
<_8:]+ʗlwKcu8m8P
mg^8%p2Ja296Ng
}As>/v⾆(Q~,ZoK4vZʇsg^aǨ##PmbዸV&~T.t?)mDQqx35{kaz&1X.+fڠ硙*(x s(Pq{.P)8d̯U?2"LѠ_qYF<Kr;Jl
L<r8FNw6h5m8-o>leggby3.l(Fc
⭓8;DC'68DQ:T2;bNm(ı2s16n	sf[c1/Brnk=:'YTӝx,JE)3{y7wLlv
<ϥuq6'zhp)+Ux;(|t،WiZx.x
{%.jh$1L|~K:9RpSVgKVYcDyʆGhv3~(~<>eJR.6{^w(^O&FGl@@N6"]"d	oKF+&g$KT"-(9f*9˂RB1zsPBYm`gWkcY~k7ݎ# jY37As Q4|_+w
a[KXW".$zj<]38lPKNP  50  PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/dstu/KeyFactorySpi.classWw&=xBe#REɐ)R ۡ&]132qw(,w
J[פ J=?O3=Vs|]f.!]]хc2dջ,V{-ua,_iވɉs$''$)1˙^sAXh
6٬F5lkE8^"笈t6-OBOi:erC'N͋I&2-qNX=1+AOD΋Հ;frR<ӮF[R
jJxJiLi8f$3Y^z5K&ݔ"〗pDhaZwΊ'}u]3eiqֱ	gI_5֒cWL"}mZRZ"d@U39p$鯸ȑU-iisừC!΢nWKTO H+_>p=̥@9*P9.go5+zsֲe?CIiv2V
B]6:=qbr~I^eժ'E[B,ӵFfpSܯU2ņorUGcv,!cP:İJC"33\kA>s3<$i
v(x;9Lkq
$M285KO	?p+5E3E4GƓ!k6RfKAT
n,jT-
֚<;h"2ȸKQw/#&M=2N8)2d1ʸO2z
Kxh3'}
qIV7GB۬W߭exF.kq36]<Z^Եj#C;G&ua6h>8Ymɋxr%cz/x3hHw9ԙfMjfimլpȌbiY#59\+lߔ6pc:_hT԰X=2m=V[1۞#ZН魔3?Ѭz*#!jLK֑Nc3-)\ng]ikvȶy孖"Ԟnu1hrkoxXuo~*)	[VܲQ<b*zЭN(*cFi̲^<|\!̱IT|Pq+>O*>¢O0tͫ[B؋}0yuEZNdxdUFGOQ]q9+ݘ3
F93
e
)R0/+8(x)HK,gxWY|G&*Y|XHcXeN|W ϳBb&"RL#~[tcߍq22$h=;
[> m,I젧v5\|5Lık@s4y]__ŏẄ"Ճ<6X6𗃑
hN;»>;Fwy5
}K3u~.B&
lB0$
$uVDg>:Ί20+:A?HE
N7:NC748$`1r; ѹ~qq=Jj1:Jv߯*RU%WXz=:? KcJOh5D842Cbv:t]\"t`x5_4ZT~^\<^ZTA?/'+&n1U;Ba)o=vxv?PKS    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/dstu/KeyPairGeneratorSpi.classX	x~b$@r$3!NBm8c$kЮ8i9zmڦ5Oz7qL;M
Y]P}Λ̛c'|@$9ȉX:'zxʪkl^fGuC۳s[֮	}[7kc>U;5CV86et5ڠ's656 mP
Q=BHD3G	Q-jycQ-
4h>5$A IWPzړSoH5I!5@6*hھCtF"!=[1J'Z'CzgIuɁ" xPGF,2M(9F[ Mr4C
~6j=]\tBZP
,2qs@Xzؐ8᳢pn.-l/+#ӦK2rljgeC|9,-:"8̤mEAf0#Z.-%e9|+0ۤ5M%9cQu ]&ΈBHZf&%=ۭ65Jvm8cF`,VHi4kkP3,}H4fIjÓE!zGvkL[IQ73v|brv3Y0Ktx#n̔Y_R|KE9S2m.+TZn9bybu8y"N'Ngдb6o&JG$7zҎ$"zϡ&f!
m4JhzRL+<Ǽm^IPdg~5s1(vfM]ysrb%Tg;[nPvT9ftFUc0L2N+zƌ=F&`n$uIH1wHFVN^A2WhR`U-W\#p	
	x:6
t
\'%I`@쵘-=ٷ'Z[Z!I6,բHxCpNuMwQ΢f:߇9_$4ZMw]sEO._qIPH}m
IRME勝jcgmμ"&^-;lC!G*tzHit"
M)EJs򖹘Zr27Ms| ʫ	w)jE?ZJJ$twiEfl7[Ƃ)}&U{3V.2X3gqg
(܀
uH)p/L\;bxS nRg+XQq^ܬ`l-
ܪJ,Tp>d2,ǋ</QP*)p3de
V

;
.]
.aī\W3k\*XTnAx#p*goaxsp/vq};.w3dl~Q7a8(?/lg؁C2^ȳ,gç>-F^UY32t1C>gH0|^F2(cfb8"a2WQaf5D/+a`BrAwR{jv
TCG{G*{*"t@:!<IokPF3ZZk	<R;?LqNQ>V[6"WHzfz Ņ<Nag}ُ=*KR%z>%PbD6p7ƶ#0᭛S[3Đ!sgy:'	<A~<NqA%5q/ٕTC?6;\~ \pq4L!\ٶ\W9=Iw8-WEOg)*Yȳ ӰwGmg;N~TtohoHCvz+&'s7PҾZE#sZ8LD
.Gb5/~ɑӵU
Fv4Dv;.'JmM~|pgHi,W9x3C@;twPp&+qtD@`%[4-9!p	E=n=+ԡ2T?EG98=毒a:-4h
{8v	KlvLb^w\>~Mmp3	|>̐J~fD"",Fْ*0 ^PK #V    PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/dstu/SignatureSpi.classVwWVZiylT84id[GhT[Izu-#Kje mB<R0o9Ԏqp/PN JlɆ;s;ܹWwpG%#m	W^ Gڦyg-IL@j42'	vWxp2s^F=>;~3:"-svuYϦr<mh"̴;2`fC"6pEqLy;/@ebP{<krtV¾
a3J8mSB6_툔P	FU=eJ鎨
	٭)aRf6ݚ')آuihQQܢ3vnV<"+l
<f4TWCja:c>-A12PIwh=DPReH5P-{|Tr3z6Z49U+A}j4QQS#*FqלF6b<]3fVnTWAl,SɜO
Yhy'#z>.uO˛`gìF>>6<N	ID1gLYOw)Am|{m/=d:#5.]\|f]}in K|z;wxwOgg١{;eH̖mFJ4W0T0gs[vnL	XlӈN!?P}I梅s-{/8f&>40ACfg7="O@7`TF'W$58rGoU2TG^
:DVWpFA.
zU~+xB
zS𔂧W<Dx}@*#;	r06Rxp?yMv?t'*9e9o43Z"[`}\^w%:[idv8ZT:~tq_߶j[
7:7䡁*C{u\xޑԂIqNKoD/N
k;*j_W_ޡ{Ǡ*c*U_n*N 1XDXD!
RyAU1i^0T<V*0 n؏!b8x]<E!s!$!S,!%|"QbPd|U]×Cd>!BWX|<X܈+X`iaY6/'-V|ЯnэIק3ܠ|04>.)}4$CZ34k\+ xid;8$9]l/-#wfi._Yi#^GWs?x	'}R0߹JNd{
I7p2hVnkϒj/ީlO4( Iaq{Aۼ$voip  v_+kQ6.%qo|c*2Na$	J^mZ/}Opʵ-\ǡs͂4{
#*'ޱKQ^9D(]B){
@L)<Sl=cu
c
I!9]k+۔#(AF?(A'+/ t!)QM{˥.Th|bE:`t镙EcML'wU<!%g_0<)3׵)AVWf|̏br*dJ	X!Reh$1[$IBkxf򀴂o]Ƈ J=4IwJkadKbߖc
Yo'PKvF    PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/dstu/SignatureSpiLe.classRRA=À@P$>0͂*T!ɤI
̐2{~6.tPR?ąG(ԍ8ݷ=gNoB+d,ŷRVJ5C˼i"O*ϘAi1+ql'熝7B%9<xܝdvb%\^":3Slnuлuʹ[<ӶNwu5F.7ӫh3M1)h9{2*z\]kZ[ʬM3CF{~ypc;J]6ܡgbwa*S2Jqx;.R\&ApMBn	=z%IgW.kbbV,Y#c=
/MY&~N-(І눊e܄*#qa0!`RFwdaTaiבtͪ^]bA|0a1Uݴ2Z|FuAqbD=
~YP#zG3M8O2|?Qʂ
%)><L+	CD6W1i*ax{NIpL鯅)ST	O٪z{_&}t	&'Hg.!5<6q\Ly; 0E:b94	]Nm
Y	e
PK
B    PK
      A             /   org/bouncycastle/jcajce/provider/asymmetric/ec/PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/ec/AlgorithmParametersSpi.classXy\NXqD<0լFv61
jD	,E+ZMa\fpw5=MI&=Cz$1iSm3N||,я7=zۍEnTQ7Q
;D$bE[ W]VuZYM5s1Z¡
4cFB3
QʀjFJ2
ӛP#FLPM^mݡ}{[z!m|IoDY8bCjv"`#ĐՉ`{ZBm<a-+f*
h٧׍W#FTzjW~5bꭓ:^l28Q2q(̮ǰ+P#3+RcvfSdtb&4=F'RJ鎩f׍<GOF"sPq1hth@glŲ<rѦC̋	Rܛh	Fm[A=i*zD/D^+3OQ˃n-jӝ<mҖlJKRnme2Jb&
G*Mii+CJ@3Suoqd2T9͙T,՚▗	q,ЪłƘb'U*f8tMxP;2<;`sQspkq9@A}HkȬDD,pH%iՀ7FU43xWP*/Vruf=\Knޔ#!r@5#
M՞(5004?	 	-p,]Eiogj|o#"e"DmsJ8b=}Me|pufLjpj4tG[?8ӽyXZ`pSS+RDlUDfDl"UD]"E!fAUD.!"И̝4:羞sDŔ4ܺ	Լ3gVni\Ok]}1qdcI6۞z̀g'5K^vU-3zM-6@jN^) 5e	vm]yl[̆ʝږD-/,'
hfyPHw޴uRsMfi\A68u_S72oϿ'͎%-%NVLbrTLe(q^Dy/$ESpb:p`1J?T DE|̚-*Ǻali׈99QsDgg}{{Qe&X2#.c=Ȩ,F˨B3Y]f2bPF#NȸmL*q20eAJFdlb'eqZF-`W2y>SwnVZWu2Vq/x{|&ux<Ȳofmoe*.!JL/a+a?LIxH8<C<,!L>d%A$]LL>SL2png%CLaa	
p癤3yLB\bx0(O31LmeN_SlP6.ej2z Uz[?hVR__=Rg`2d0!F*9Kl"Zu)d֧O3Atq%Ը`z{'7/WJe%o/8~T@_	-&d
&_g_IOqi{ɦ4:ZGG4OY]Ud(.`_TKP%xDDE\VWJAE&(rYIl¦2i:1|q$Dl8
c-?w(5.B9xZ@x*2;vHOfTq쿐Wpp5^OAЮֻ$0<*.Vy7 s]
Q1O/~&337l$%\՘|!J+\ϣV`EV[>@;//]q1~1WmY(A* z&p<Fc]Li2&p*	Jҿп?&׸qE쒉v%˟fswvDVduIPKr  A  PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.classZy|Tu4'==
d
,Fl6J#cF	~y
Fc;cC-qQZᔶԵFкK=,mm`yhf4~vι{ι!p8]U(m\ꕸG>GˎBҊsC 07	Tyz{zٶC;J:=^}ݷHF	Ѓp$`M3#Qc1*PCXD7\GM=d
mh1=a#3B&mb
G@5nOVJAAcH͝>{#Aut$W!@B6$}zD6L#Id##ڡHx}ԤsFtRf[t4lmdI937I.Y.MMxX2mzONwx$GPyOge*h5ͤmf;	r'
7r^v$uצd$\*Rc7p?8sf٥vʂ74N/vN$v覞]f0 
kޟԼೳ{`Q}P'`p4yr9!#		7|Y['ZzK <3FJ&fH̬[bP[<A=	BY3$Y5ٔ/gMxs]2
?_b95|12hΈ>#X_`T(y=S.5XTሿ 7ӣfhѣ-m=+odS/ 6T#-Ğ6sGVݵ%A#ddNl)v.<HvA
v%ug^VϦ&}32"tMAgOg\5#c|F?{mG:	P"sHBz??0{g)S0ƈXW1`Mr̚+_/*'
3nv9Lb!E}:C<V.W<r%u:m̙D;=eqNO#ٴ9iŐVpxYܐVSFl0iĵ	/3ܜ[z*F2Fʸ	=9vs!R-xf>fJ3U靫,	DhT_壙~wi7]u
+*W]
(UЧ>;+إ`=
WW}
P(x
R+8`P`H_A< `XAHAX+_OUݛOwt+Uw}(DޔA&5өyo:5e/yfI+o?n%Ȯ%ƥ]%I8}mI_rkv<i)oIji&tR(6l-y'矅)5'Q.骒hjgA_w|U&ʎi×'l-AcGL&S8mk.U>wDl/(";`0@a҆Y͍^*ٽm.6vJj'6o(-z]~,Ic[Rͳ>lXb{oUq6rr?Jn,E7]FȌEvW`w8ڵ*C'
<gQ{zxٽ#"nbyv}!<^{^OꑼiuZ<BU\>j3Ep'׼I:hp(
J?AP5b֟;g~\vz6*e2k,
nFIyo[S_5| NC=j6~YVůh4ůjn`C6enaN
-P43BaLjx	
8a	~~]C3԰Uk<ܸa.jЊÝ-
"
pW/k_Ѱa=Caaoh؂o򱾥a)~{?p7P|{a#?f
Lg5܈԰sÿpǛ_TOÿ0+ÿ1;0'170o~?Q!E T|o⊊gYgDqQðFD-CDCKa>B&*^s1Ъ%h`K'2/*^aUTMwcc<7ƚ72̰aϊ*>'`X̰a-:*>/V3lPqs

n\|u>:a_e^Q1_Tnp$^s5k{[ɤ,14m2b8OЏY)}cZֲؕ-El)eKY@겥h688ihJ!mpO^w]ɄhwǩI	 |ߵ軉6[zwýk:v'&ĶY`'<y$Լ|	<z9.^ju	q*aB<E-xe9E>7JA
<U_ Y{KRAcS{nɣ%qeB_)u!2!pzy3jM쟭;>VX(o*Hqiluqfyb>>Rxb$!>ma8.vNnv//dL(8.^&w,OzrC1HWr]N#H鳌C!O%<u:
.ӝsPS#n<keG8qsA%R
K}]R՟BϪ%5{b(!v5'ć{C
->ȁwϝ@i@F^\%mǱ|C;=vZVmlR/),jiĹi?g]jk4H%oEx.f2hWes:Lq8iL	s_GzkaYzB~J6+Mڪg}e~[._F=QHB|d8\R\JҰǋyMbgI8Cwy4L~rNPZ[ ~ˎ +p+RH$'kcm)[R}fܑZZ^b-&]&H'ϥ/4rŤP`!7M::ͅ,Piy{RDfkPVc8CE2ڥIX*g{gZT)ٔ&Kl$]dG$82dRz%L$[1ްD&A
MqMpâ"Nh8
qB !:]B9زҳdz08Yr.cfYP'9?J,gI"LMpE
Q\m"vNRcz:khG>j=cTjԕ3aB<&*z2	/!QQ֔.O0&\:VHu]Ľ2J)T29IS~P-y.HVw}8.zrʟ!	^3.>'|) ;9w'Ж_x\|89@^'(DOE@'EdRe2`OpJB ^ PK  -  PK    A             B   org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPublicKey.classY	|I6f2\AMrd	
I \aw,lv
Z*ZjVږT&U졭meUfA]5?4bÝ,'	W4p@QyŶ:GV{V<	M@(\`iUk7447	{ĕ&oږ+ז,#".`^%Z#lb]NwukA!¡@Gn݈yzjb5,Z^m[Rk1Uu4ʯkz]7oߡLRҽ=]>ީ|a !0NuBj=F(-u1݈:XHk
Wҽ&6/L7 S#ԩ;Yv#U/FzoÆ?}Qy'eadT.`6HcSf[.-Jۄ,H&ub}^{l4ZvN!&/!UaK#
hЃƴO6ۥWX׳K
Z4EUgxc3QujN/)(0<࿮8&-6Ӄުvh5O ih#W5"ݱ#=gݱéaPuxA-m
UC4S(
ޡk.=KCBJ8vI3=yE6:B1C7fQMC׍vͧG=4L%gīX10 R\ᠿgsR蘽Ӣ>[C~]P/sOGzj[bӓx9@,A2#;}Ύҡ'
~z@{A=Jf
@Գey1=&
H7xV<y9`n=3N2̂AiI'+ vt׭N| ԈMAmХuc#y!{7\ht!
,>RrBeZub}xf0{	`dL;ˊԭ<'	*e[qfJ5Q:)U=s3vbvf<&;D(#Ajm	fT$q5켦i=(u+ZpGzj,^N${(z]CFM?)ݓjӎ?kf81RbD*k$$JQbDDzV
%6Il"&UbH\+qv	_BhH) eTwV՘˒(=GWd%B۔e90?Bzbb)hi噻uk6IAw3$	6:buih< "{8!"<zA1m
aVwWd/B:P^V>TCpANlMB)9X'=C=9ۄ63cwuenv9~p	_-b_^n^=I1	Kl@>5"SyhKpU7gECvvj§N-$Ca%w8dfI-ɵ
}yHYXԺ=T%;>a+V|XSW%}@K)u׀5'ɼ7!yzU57Z<?]xrxh7[K]ts(|9H zK|:̍yB1d&z% n^?:*%&S|V3~>r9#q;?
LVт2LhcAu8b>"p2PQb2)!Ugp5s2JqPTE]=8b&>0ʣ*.I+,c*21XU'T\'TręG4<bR12IUxZEQfY,gp9xVRq1>
}gU,sW1ϫ/K*&˼	93s~Pw%83	23%_}7EUf܄*x~ Cb5+Pv!Ɵ&`q(`0N"w*%^apw\
iQĠD+G1`<I&3`:
#2`{E/3;p2 %
ī
bG`Q
ޏ?3R܌k^/Q!QD/lkokL\E6'*z"b^܇wI>c` {ǜSDx)̑)̱sA_@vj98#)vW2zBTU<ҺSS16(&}eb	s8čK{Ŷjm=eĴ{1%Zs!.|5E"k5Sm,+ez3sWT5E&1M\숋kfq^-PJUI+>PpP$qDG]~he7GҸ&uHZf"cW2Xw)v].GXodnWQYr'-qY$uí[0djtTmT>VhuBqV߶$'dי:6zrU鄧A%ҚEyr=ډ	UYg7JR[cuU=Ţ)$m̲upٯhh5qG,>iQED	#q"..ukI^]EfB+㢦qeΗ(r<?8R3ZOj+	&bYZS|#jgpS[YaV*+k 2.NW[V{#T=o^sh4v;$I"q$9\g3!qK*׶-GJ /L
؇5eE"8T<RfM8H}BGQegp[RG\Dsz"@IE|;%*NY̮WN&W1V(+~"*j੤Yǣy8IM)օ"֐,
i
85H '9QdeUT@s&U'z}bYM?̬G{~M-Q&lqW\CڨuZ`JDX6<q̑դ]K8rs*Z[*kj]\lOx	(ͬqsiSHDቤQ*RkKB	QnSOa>dNdUе=7,nX~\63mM@16~ÈJV:.H6 PK1'F
  '  PK    A             <   org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtils.classWWW
CˢVDw.l"	F$P!`mfwتUkCzN9z]$=9'ͻw䏿
I@a}ǢGN8ip-kt'
tx]nG j1oÚNҕt[5{ԩ~PTS5"j-bѡ_(,dhG ZXWBnWRÊcgxLyxVu߸
3Gg0m\Px
X84nPi	>U%):7L*R<t28U44=(`S٩=1-vDG
͜=6/D(QEyKQ<w@u@FgE* QSɽ8'DMd<)1CDrϻ#'6fwyM;S)ramȍĮߘ78;"ScdHoQ2Wq#<QaIMtёs%A'`wna %eo>Vݮ]\WPk.,ܟػm&VʉxODCĜ17̰aCz
61lfP`ghd`xAfΰa'c-4
g+[UL@*&2fw:6-HwU$aə'EnEsKcblȵ%5uRK7n⥕mIh<LJO/RʕԛLUfͯyX;_lv
'2&ve˂!b}sx&K52HJE+Mi( ̙5y~Yբ%={pDA	$ld
$ԠPB1l֠H
J?˥}V_.<)a9IOÜ䨄RdoKx'$S9Yg$<g%H8)I_
`?"`T^h8$,	"Z1sD81Eᔈv'9"\xAS"n9O5N΋EN^,'p؇38(Kr*ν2KOTl@
#{?f*hh-͟-@1XNWGE+ng4Ih-p1t&mll&3,fq3Jή scxqL'% gQH5-	i[skl'cx+8.O;fq&Tۮcx
oyPT]丅g6r	PI߇+	onRDE{.AqpmywQy	>FǠc.*1OX>%B9t,Ez{3MTfyy`ɵ?QZq"ᶇXHk0[kʷ_FUMΫ(\&g{iBW8`wp
m^7#>/PKČ    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$ErasableOutputStream.classPJ@=cZjE Lq!]t5MuJI! *. ?J:瞹s?^ jwn	
#(3
}NQ2!(r7܉Cre֌-R/di?qZr6'8䔎$S)p:4BL9R';. F=NsI1"Rrŵ
ƚ
FE	EYUF
[;&v^46{\W86}Ud=0Y-b{9%_ȉ@%wVi_h~PK<C    PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2.classO=KA}Ys_`pAT"
,7$)ϲ
(Q\g<=x
Ǆd[l=:\r?;Ә2+&4U5u+viʥa]bt`f'8L+K|&
;
=`7,CBBa/.2Bsy)9ǡX1r)rm;[<vD6 ;z`ݑ`*u&PKau   q  PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withBlake2b.classPMK1tk]k~ԳVIŃȂ=Ц%J?JLj/RbރǼpCz"(6#WJB
sCNՐf,f)S̤4Cwwˑr($״/[5ciWpEc=NQQC7و^&O7aF+>>6||'Ǽ~or*<Tl( vla@\Xk	j}[⾝Q8[_ܯ0G}9WnGPKOM    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withBlake2s.classPMK@55ib֏z
uxR`	SA1ntkݨgy
XMEJ.¼`1o?>
/y%b]ҧ%f9Tqdf	Lћ(x}u[:>CsEG]\pg,1NS	4P|3)"r9J&Һu{;2zʡZZ	n	h9N}Lt \@)Z}^>Qឞ`.`hv
/]?PK,h    PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withMD5.classJ1OvnEtѺ0 Qq3-"8	Ӕ63$Qr5`((ua''˹9	AZ*ioNcx#cgqg6eLAe`J³ae	.)\L2E&υՒ3ml"(/N\l:EI"8ݯ=UҐG
R|&A#HcN)Yd0oFDCܭUu4'qv^]{{|PKVkm    PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withRMD.classPMK@W?^Ezp/IiA1ntKݨgy
XM<\܅ycz p}zHкHo	h,C?G,cJ2%iLr*:>sv9p~Gc-)Պv4J(gγE2rcUӑhhhw]lZ26XVe66LtIа@/FW+/#QHCկ45'K'K[9sw5
PKAM    PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withSha1.classJ@o4ZVDmW*_eɔ6	3Qc
X|(q]%gu.#^b9t:,Ic@T3r|Uza,@F3͸`_/tXTIgG&Pn"	n_|h24tCoLQhP4)Z?9V46j t-PYhcB=f}	=&	}lqR淇q@D{ȱc6jh7PK*:    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withSha224.classJ@oژWu+V+AXBq2$S$D%*`It#%g̽`zHкLb9t,Ic@T3wr=oʎ`P(0tt[k{s.X<-"U3ԑI(HOWnuEEpJΰZil@
(Ķ@ѵƦN}Q$&P!JMSڳ,voQ˼|PKu}Y    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withSha256.classJ1ƿյۭ'CW@Q*T{Z<ihSĖ>Cڋ7a~p=|5|"XJ2).NbݥE	gzؘvdWkhԸ_*0+pxv?l>4HvLCaTpЪˤ'tHci{Q=<,yXV.=**XF=s4{'nx ySck>NP]TJ#AI8@#fqU(8T?P|~Sl}] PK\0  $  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withSha384.classJ@/mLE+v!*D].dH0<'эl3ws!v#ARH^*Odu:㔩,IcTSot}z6);Ae($7,	Η)D/":yѻ++/"7--4,4-U	~"^9r5BV
qlXhcFk
7>{)rg\t
8Z=i*w@{5ɱc#/e6o6:PKlH}    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withSha512.classJ@/mLE+`э Q`W8)$D%*`It#%g̽;u)HbҧY:qT1
Du7>;ޔ
2|<-K%v)4Qs*(gn$KëH#/su
M-CUvfA
B6XAÍ^Jܙ5?6.1Vjth
.О,`Mrȱo[|7PKg    PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withWhirlpool.classPMK0WvkU"z`@<x"{ZPXf6%J Vҋy0y/̄;螠s.]0Csd`\iX Ca2"Tz )DD6_U-w,YB3ȴLpv=d	=I%Ë̢_MEC?Q=k)hRbAkzX'hy*+qoDh/)P
Cl5*im@FE}PKY-    PK    A             @   org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi.classX	xKy l"@R`Cڴki-/ȒZLZhMI4iӖ-XvpM\wڦiW+Y&6̛޼y[{܃ fz1ˋ^bԋm^l:/vxߋAફYXP˽fF~ZM:u\:vl۾5ԱWJNDdM#T?	2݊&:"'t&Jj7U4=r"WѸD)Y{]i"<)d,&gET9[q5%S hMnPr\@ߨddX=D2["Tڽ-J	E2z*JVMi̱+z;SQ5 ]+3rMN6$+5e/'{4W#m3MgLN[͌G%jnPx܎Hv%ca =Xy߹
ꇕHFSvy&{i%T	>9eDuNv0t50'
JLb^%;@uھQClڧD<QX.5gx[u7ޝ=Z'O,7iwU}~X=-(:ŃYH3[8'FC@}i&I,ϱ?'r
Z
 -uTkuTsh,hv:PJ'Fq`J
ͤuOi!o,LwY*~CYC!p$rh@r^,bd&i=2XXԈޡԴu0C:HJj1]tr͘Y"Li>B?({iFm-tg^EmUҏ)2c$4oVhr
O~ee"?M^W{)ѳU	+lE+W^1eV*U2V2yU{T-J&ܹbe[~"3
8=
FRwfZ6GeU#,.VjWL)2߭8jk)|`{eiV3oİ,..JOQZӣy"sCmaTB7ȴ|4+׺5%PJ5;ŝRU]T:k-F7;0IetYahbXp5K1\p-zfV6
6163lafɰz/cdð`b"QZ!à20wk~,oF+E[z;2U-ͼnɽ)mwF3f	]]W%̺=f ([RAxnyl}ƗUW #7_n((8|SI]	Ȅ	_XhQ1|%XCEDƇb-v&
[|!XU*rL/t>|Vh|9
ICamOucJ݆(~o, !z	~|PBPI
>	INf\B#'	NtL U,G$4ऄU+8O8%%58-j;IV2JC\)ar 'r2y|M|CANe7aNEq_pG8y=7"ތG9yo
?XOD܎q0'<E܁8Cޏ+]6-( U	R(j兕|ya9.:kjYUWPg
E_AW9lu9]N䛢8F<Di<Ngp
6Sbx9$C(`q`AAO8oĿta O'`!|r	\y)kl>nT/hxwGuyueS8Y%#|0h	٤2nd~ᴥ	>6Xk!X%d;0/9hO*en/PpHREz_KŨiY<e{D,r s`ggmWDm*Z[_cY?Ͱ7UeSsRojJɽ,an,~F@mcƕų1j,;Η9g-su?\K֒76>[cz<n?I\;#UH	<ˁFVek OzOg\23JK籍>Lfs,#iyJx$5aBxwP%ʹu0ۇ
4#f\y <0w^1@Gٷ^hZcw 7}I ߸tKL,2q?Y%ոD5|>ԋЕ&(=B'0t79Nڎans~/0jx+2*z9GVuKH=#~Ip?<5Lw!acb]9&0[)A)F}ۉS%$#.M{W/Gq(?PKh"
    PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/ec/GMKeyPairGeneratorSpi$BaseSM2.classX|S
ڤ!+h,P,`ޒRJsntܦPiZ&lO7-{cﻹI&i|}}9#/> b%NwB'^#PPUd!͋ٓm-6]}Îm-D
[uu+q串hX
Q!Mj$)6vxT5!кWxW]u(D5.6iFU{b
d"HZZiN%M4#d`FP3hRUգFJûՀ&WIp7F=-4(%jc'm"gxHcݜ({:E;5i{W%/dڂ٦QmjtT!=Q/]N{sstHjom-P٭j}mfT7<CG5|
z0 /1vU7|MI[RYgހIҜ"8+rsX@?$J_`QNqL,|Xv(h}eMW:ۉLcC`,Fgꈛ4op8'A_G8nji>5f]6Jo_g 1þ
bҢ0[CZlcfT%$$Ql_O
ˌ//5$k_KLѼnE<[1U.{u:({9)GVx2WܴuɶEtӡfqڶ:	Y_;X2Da}?
!!`Q%!iF3ڢ[{jIꉘ)^kE2V%=ZںԢnڌU(ĩE6BES/R7
Wv>)tR*kv;1݉v'ڜD$J\
	+%Z	k%p%*	$4HKDB6I,I	JhUBmZʚGmZp,2B.h9ǥAم4Jy%'$~(I쪦8B\sn}+D*L@n ,ڸpU5MneH?PI<NUĶN&Uy);vcvR̼Ȥ7la?:'=IR\R]hչjo}Ug?--/s&wScS;ojs,ML8&S=}MtG]Zasn|lM)AH)g`k'2r]l>Yg̋S6r:*㦗MwLG_ݳS<bS12/Xݧ/S)S?3qJ~<J__yf`)TP7+(
.[

^xYFbH
v
M
dPw(X`)x7ޭ(X*X)+UUA5>*8R ,m
aaUc}
	
R0>|0}1d`0`xщ/18~(CdA]=aUG|CF!<2z0.0-ߖeDX"o2xDU(~*#_3#?oe\_^a?fd+ɸ?c72~ǳ}vr`'\H韻p& ֎	(M.!eL5g#'2)K)WR)RilSBiG21$*#A<x]cx=,x]0'qOşq +Vи홢>PFa+B׹1=s/?,&{Gl/+?5	1 f;,d#!K(&>JC!m:
N`vXo4q8xs^!_T	fv9ɝXȭC؏"x` MK=ch{Viv{?۝q"9	qN{gX,l>2L:ۇi	Io	rO̡Mn~.'@qΟ_Qq1OxhP%>(ah|=yyE#b6Jٓ[i,:X៲r1( |$xG^I0nQ)! IriZ$>+NalK3X4("vI0$b($;`i%kQrvYB9oH(5CbA+m>
N:}q8X;DN+tY8,xiaqv&'	a{+"Z/KRzr7TK-7XFnp~/'tL#5-ś`ڈPs1^}n޻pNFBG2
_P;kx}
S@i!(]EF3	qn	=T˺u!}xB)P[A,~HB\ao@j&iL4iilDi{jPKUq
    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/GMKeyPairGeneratorSpi$SM2.classN1eak	q-khIg tcuƅiӞ|{_^ A\dOA!vۋA۱~JpMH\%gQ<t٘:3z!GP-SɩѾ!0,֦?u`,TN=Iztu89p	A?Hҹ!ʭ1[0:a*}YB+CilHaE!pGHMe'LXsSذqf%{'	g>T%V=CPKQ/  k  PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/ec/GMKeyPairGeneratorSpi.classJAƿ뎶V xa@Y<X-iXfΔma˓q)<7!	!_~||~@:w|r-pRV"غQԼhF(
4FǺ"U]RvJAfTk5gs+0^Gj~QDb["8>+Tˮx B"'$C?%1qX)&aݯ{aH/>Vד]
PK0     PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/ec/GMSignatureSpi$sha256WithSM2.classJ1Oڱө_S@Q7TТ]
(.4)m$i媢Pbv#eV&ps.|r'd+#AB*iJ4LqApm#'ƴ-;XC,#p#;Jh7kL\.=z\Сǲ-4ef2%fdvE4.s?Iu=yyXT<XX	SY/4qzŅ͸2dQJԊe(A
z#AHG!ffqe{9(<a})6_趋{
?PK%f0  *  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/GMSignatureSpi$sm3WithSM2.classJA%wf=5vENc"
:X%n*P^X?3K~6#׺Of]Z
WK[WpAm	_RTEϕEՒ+')ڪ҄\1|9 JN!\U6K5ec3Wx%S~{mBzDwď,CPKIf     PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/ec/GMSignatureSpi.classVWW
 #b
B Xqi]!DHd:3[}/~{NIrNis7yzzdJ@޻w7 GDV{ރG8Tr
4bPy<0Tt>FHW6!YO>abvĢqS'eSRmմ8T=jjg6*	JFܴUb\S
 ڌ6L	EΡ.8$1rr#
/ '8lxd4id^Ykb,)FG&v2q@,9J	5f0*vTIyZbN\UTƜv(ڔg\3FlSӣgM9p
qlu$蔓҂ǽ֧6^
-OP0BL`%/DÖK#{	DUy nFxBWl1UR̤aǥN͘P=6:C^NR9ᴧc=Ga޶,/EU D;8SJ<aƧ5j	ISIUöm]c@=vkB޻ 5mCCMe.*Apk¡E%`9U^EqSGbNdT[Q{xcА屘eqO.	v[5kZx6y౓G f-<vh屛cxc<8q8SE's{R)zY\	6_|>Pey5hrPbVbPΖ([kh(9=10OuzlRUl*VRl]E$K`x]Y֑ŚlX"-?IEcXJqD<D1""QxD[p^a&j0*b+.%6EB
.*b&D4@&D)&t1-	@i&^bN\f'f0zЇ`dbfyxExYAg"u>=bXfɖreĖ+q.zɄ[D?EUҬ4Xi!L
kZmE%!4kEd$/gp%8?Z\ ӪƝ_@/ykf;SL}rW
1ߑ􀻏=ap<^BE_0P7>zwUQ@tc)*>6PT 'F}/ޔǙ-σO:`U SxM+)|t'GfA%~ݷ"7)OC
o=[ʧB'?]p{̍0t-?14wr]#4ޙyT]NW=v(Ž7e[>7|U\c	}u4^cDV eBRծ8.:iQ,,B#4ޚs[J"b8|t}Nӷ=mPK
    PK    A             @   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$1.classMo@MҸ1.1@IDP%jqWFήu"O̏B]P-ygv=x/_?~CkfX=ep/#dP;4l"T$xJc;YOH1Thc"p,
!7Y,0')2+()OWD&R`|
?ILRfS"@&óg<RoW4{37F끞$0Fjep΂cayujY2tE]|uűڃ\JMm:T,BA
5c+Xukic7H_	N*z!&9}DApO۔oQrݼ<@:P(.y4/hwqwȟ"MFCWWhX;{4Npm.QC-l֋/PK    PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIES.classmo0fl3thҖtb{5	/w
ڤIX
> 
aMa(ؿ?] Sf#;*JMq%N);Ke.CRcqhwN_%K*Jq^W	ʹ:W%~Pҍ4$$C9j;*!c{B|9ÛKXg4&j%9IX?;J0 `1@ȰlV]24W1/K-)i%iu.Ҟu=we#\0>Zf͛uo6B԰"½KbٛbwB]8;q9Wv!:HCa:ǰ6]I|uh|)184D	j'X<+p
<(5?q6tW}şPKQW@    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithAESCBC.classOKAƟQss]u
:!̥CP,'6::% },$Yh?{yy)u!J.Z='.GZL'"KUZm󒡑Nixp԰'#/|##Ǔ@&\
뿎choZ_>{9kd]&͐%ν
FA'n'#-*6,dQ&Ll(a!P^	ZFNǱqfu5zQ.L=Nݧx@J"i
PK]?    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithCipher.classn0_n]8ʡۀ,А!$IHi\/h*vz9\pQ{]%`xTD/l}7 ,^P>b`3>|̙}Ay<ꈲ b BM[fΔ۳)M^$xb(VUsq}ڝ]~ma๋^Oo!z؏ri٧Mw7Ō	9;HDLBǒSu0GR=,y<{@P*vm-o>(χv,V*;l06uSzf\Y迲Sݧ3rgD<bZFY5^K38brjkV[[#>(Xm9++([>Vq%%H5? 	kRBhU6ǢV/x`Ǡ'3
*dd	&XlLS	Mҭ&`4ШoF[APK杝    PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithDESedeCBC.class]KAQsu]`n.Z+#rYVWFA?M##j<9］?86CRfH+_GqdM߆ZE]ɅKRZFkȦ&x/lz7w귥a8;"&|PMix
{=%ҳy.gSZBBZX7)\.T`J;HͲ$
6(ڰQĐre(RߎQ$#"OMƇML:e;4/^a	kSxl
A/ʓDPK3`;    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA256.classQMK1}ӯuV<A)Zi[6e[TٟIGHA'3͐y{yp=B9ڥʔmB%߽:>=#r=bw<Ʀ	]lVZ7\\!Lj(5㦘NJ0)XOl,5֣NbB/8{xzyQ|,_hfU=(#Qº5l T|(	%ƷuL$HSȝҗol
'wgl:}|A}Ա,pPK  "  PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA256andAESCBC.classJ1xZZgŋVkł^H5
5͖ljcyeıUdU4	,͟`KݹC߮1xÀmdG/M6\fF\2R2%ըLUJ$nUUE(62M/5ݪ4<ժF	./JtSP]R]&8˹I7[vozh'	?%ҟd͏R!~'[>?_xư..1"INȐҽɤ&(j-q,c,!CRj9Z@/e@v3fhc
_8B%ia)PKS~    PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA256andDESedeCBC.classRJ1=vZ>"DEPV,SEqM6fK6|R ?J֊PjE0̐sN3yy}|%dꂡo_*i<)0;9a+eUd%a#~V 2%B+&
RQď29S^t)7I3W,#Yΰ ^̓AT/h)8	m^ؔ:T@YS:s8ws2$Si8gI|3z\lfvj}Cn{{9"1&\`E=!2;iDEXƐU{_8gU\BS=,8bi	b1+6 PK$y  ]  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA384.classQMK1}ӯuV<=zihS%IY mOt23ayW mQ<".Ul
-yMhze&
M%X؜-JٵHco.3!Bj,5㦘ϥJ0)ؠ7Lb*5ֳ^bB8{xzyQ|_hfS=(#Q¶- T|,	5Ʒu
L$HSȝҗo
'wg:}v|A}Ա,pvPK٣  "  PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA384andAESCBC.classJ1hu8Z."d"ԱbARq?FI>+ I8a'y| U|apGiew<ad`eYbch!
iEG
%ӲyRR$Չ0Wj]HPLV|_5dla#a(}/Ep)$oZեAi65Jp)xR{e/ޥN/jsd9`a-_8JՖm2ZkOg0Yǔ|ȪVOg1!KЇ	Øra&]d0Ð/ݛIja2*$2;^\ePb.bn9*`KH(PKP    PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA384andDESedeCBC.classRJ1=Qh}[YBP;VZUEp96:͔L\)
~%F"Hh.sN.zS]cPŐRt]R	 HWyT%؄ąn5LIUT[^*|K_6j;F@V)60n1l_BoJVH nd/J]+6!uӁ8H8w8pt2dsGi;cv|1z\mf-OS=`z1嘋]xt1	iL1CdkwI)~1XưU{]8gU$lL? uv;a֞[dn)6ZZCGҊ
aPKay  ]  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA512.classQMK1}ӯuV<A)Zi[6e[TٟIGHA'3͐y{yp=B9ڥʔmB%߽:;>!r=bw<Ʀ	]lVZ7\\!Lj(5㦘NJ0)XOl,5֣NbB/8{xzyQ|,_hfU=(#Qº5l T|(	%ƷuL$HSȝҗol
'wgl:}|A}Ա,pPK/Qs  "  PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA512andAESCBC.classJ1xZZgŋV(kł^H5
5͖ljcyeıUdU4	,͟`KݹC߮1xÀmdG/M6\fF\2R2%ըLUJ$nUUE(62M/5ݪ4<ժF	./JtSP]R]&8˹I7[vozh'	?%ҟd͏R!~'[>?_xư..1"INȐҽɤ&(j-q,c,!CRj9Z@/e@v3fhc
_8B%ia)PK,~    PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA512andDESedeCBC.classRJ1=vZ>"EAPV,SEqM6fK6|R ?J֊PjE0̐sN3yy}|%dꂡo_*i<)0;9b+eUd%a#~V 2%B+&
RQď29S^t)7I3W,#Yΰ ^̓AT/h)8	m^ؔ:T@YS:s8ws2$Si8gI|3z\lfvj}Cn{{9"1&\`E=!2;iDEXƐU{_8gU\BS=,8bi	b1+6 PK0y  ]  PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher.classY	xSוma1CC-%EtOtO)mI
m.Odtfh2$?kMߧs޽sw.X-F-xXbnu`KhrŁr @ԁ:y	TxzFJWt)We+t0xG9']H(Ai^»kIώ_'PӳI=Dt=$~CjعqӦm5kMA&Qv,GÁhl:SqdyғHbx3
&=H0pHzb<h'2PBI@(6HL1DDָqݟ7Prphs48T"Qi|l.YOv"Eaɶl׎T2JZp]dvVӫ'
+k`0drRhrƞX|fLän@q#Dvf-XMC˩S&kYܕ*ܤ+}hd!3fvjnGVh[z"0D#`FM:aĦr`bgs;$}ѡXd3HFL(RD#>c=GX7MAr25m徑i_v#'z,/
xc| 5GyDIB`bW*
YkDr:RpPͱed8E+R[.'tEтZZTB3k"

,M,'/Cudv?]TX*=ǒ-.@bNmvYo@hx/nA*[hJCD7?AU~:bY^3N9Q.OxbFxMYѸ'+[ⵓ[98g%x$kdS4>ME"ֳ1VALj,FmXsxU1R35
	ڬ+ƤjۊbFNR;͍hM1ZZGN*֡L]#ˇg_Y]M<"H:(JVۦjeh"_tN8N#6릙˷H$c!T1:}{p0NH3izYU 1)t\ufDT&&޸MzP)zl\MޙEP&ngP{}Ǻ35q
3fk5^2-^THQɢSLB7$B7Y kd5eMN5з
J=viZ.z?{ۦ#/a!qjiy9[bHiYѤq\Č3UY25c{4#r3fDqtlKNIuHFW"1%K
Q}Ut$OEdc
l|;W%K쓸OObH/qPC~~DPB8,1 1(8"qT".HJ$I8!1,[%&vwHS]xX=x%%>$aH|TcJ|\ħ%>#Y$N{z:wOy"n6Hך)[XD\Hvymc-tG=\OesWt^\s^~oʧ7/Ķ4#mmλ痸<WLΜi\\&7$&n>뙣(Ciyֱ8G2m$5vyix{-t$Fʐim5gc
0Ns_^A.)DS[`tRQ[VhZd-"_]݃q*kbqU`uNV#Y߮3S	`u'y>Lŭ	[KFKɚr
vIV/(T拓.w:S(J<Y*Lӯl#S"3;e_%O?Z2762R^,pXp'RWV57N1؍pNFcAgЀZ
_bs5tb{t32혯kpkX65l?hxA~^]W
{o:<O
[K
;?wMxM
+B(QBTC(/!ˡM\ÛSCаNTxQŠAM9~ f1p1`Zsc0uN|C,bxxR7J'0oۜxѧ*8+9AE+x.z+
̠1f݉Yb/{5ɉ݉'/:Xo8ə&[xIOY.'~&:97ED0X`Nŉ?osS?
,+SiO{y/tymBey^^MU4Pݤ/;y4󋿳M\>BYVNޤ?pt?4X *L_%\ iM@a*
ӲWT)_ g4lzQ[rA7+.]^;k͞s?oHnEc]I-؝v7],lJ&_'D
H\l.jz/즫x@Z| -=3ojFWJ!摌՘gX	"
Fi⬕hL޻xu6X[J/Ot[}QCgIdU&<i(9*FJPBk(>eKd&wͮLu>)<-i J|f*HaRIA1sUCW_* {c]xkZd5P#f/mtݛ}ul_Ra{\E~<Z[}!V66F<RfROc[KjL*G,K2&`o8T[vL{mٙqlVz
)nPWXWTy
KT۫K(\B+yi`qK)]L'lk֨ʝY4ksʳ,6k(y65DZ[\F>pRVɄ8z9[춹s$X
W&=P5H(q	zң,ӲxMM"Bvr&mVՠ:)=h͛$.Q:*oUTO%T벝$ָmP]Xfu?iĸu4:0zV|U^ 1|$vm$>#`֧Nra1<+u6*
iShZP_q{'%yJhU_yݴ{u\f90Z<ns/;i&xlfnܰqB<e1_Ġ 
*L8(n,0|+#M
iqPTu*D3&QA44D8Q>j胣m*sT
k(j,`k5)L.1b[{ei;fc-<cx~&k}n;*Jㆱn+}<R|TgThw7-TҊҊRKYkËsT#-m)x4W%!ZW؆ʪWrR
X,9S~.T@h@,
H:Kj/QUZ1|GeE:<dz-Mb$ ݐ F8%K0~JpcD$>E'?O	"%%¿Gq¿O4? eH	D+(_PKՖ  =*  PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/ec/IESKEMCipher$1.classSMo@}qc\-PNr0HT!=mܕyH@E8cW|3;f<׏ P^da?vsD*>cHtcX*J</1B}*NJ9bp|ʃ(x0e$
zYM LfTbvOv4	>c0T$5|`$怛و"A[Yѧ@{#LjWKE?_Nx֧<&FaʂmK4֢sׁ?2Yy~},
%0(8PtPFk̖6Vp*X]ZDP%HtINW)cn u
Rt+
pE<$oEj7>{Yd+{<tpsl7ޣvos|~^:5T'&Z PKEP    PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/ec/IESKEMCipher$KEM.classQJ1=k촾/)V*v]	B1
uJg$0᯸QbFJ]srARKp}}q\F0l Rj&S.fTӺ9mFPA51h8AO͐!t,/$e*<JScXI>'9y]Z-w TH՞[5/8k̑ϜH:M⧥22 	,%bU&L(c g}APv|kRBEM;eګ{16&0{	J{\_FSD,7PKIaPM    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/IESKEMCipher$KEMwithSHA256.class;O0+4Mi(C"
ADTqUGb1PӲ :|:?|{pr	jg2܆=ǵ`Fn.NN	:J郚,7A.2	CkƍA<lʹz)ˋT-9&qd6bۇړ_xfhAÁ` b]8X,;O]rрOP@ؿITh\_%cUMj=yņU_~Am[eӳ6_PKWh  )  PK    A             A   org/bouncycastle/jcajce/provider/asymmetric/ec/IESKEMCipher.classY|Օ$3w$h@0!< JB@xH@XcK20g&H}Yk߭Uŭi[dM-nuwv_mwU9L@9s9|Y Q]XR]XB܅IF\xBSzM;*䦇W}:l	ZѢMus1µ.EB$tPOwmiL;1IڈH'qc4䁑3.P047dYfdSb$ƓMѠ$f#dӐ	M7ͤoJ@;!mdD#$x}n "<c(!#L RiUFS	̡Q"iD{B憸}a34-΁Fd'
FRAsW4'fb;MكMKvPVgczo6hP_~Ue&{j3m9$檧Y=ddQLZfƻ`0p=`o,4#f\unhҤM]ajHN2#¡@"J^,9Dq]ck$~K>B즐Zq*1.#fk:V
DΓgZpN3Z&9eܿ'2R{2{tEcq2VCf8Ƈ&9hDmB6i<h66p&Mbg0H%=9h7G8@s@WtĂ,bH$I8/HʐuA>Vmh"iTPP1=Bhe('Y?#7<?KY\K0JXiosX#@|4$0v($bc& Z'.07D)SeL S>jh0>?4L=#d	JM]M)t -M4,[ئh/+XSUE.r0"%ZAH$00ɰ7#kw"+Zж6$F⡀2IP~Be͠tk.aʥbP~n(y]tuP _Vz~*7vڏrvM+U:[QOfg!=ȽrY\0L
_b[>0^ԏǽ }0`X<z8DEY:`&Caڦ
MMo{
*{ަ!۲a
mDُiꋅM-&@;SkY,][ր.a
E.:{4XO|v@L/֘<9_[_q,n{Z 6Cf)]7@YUqF;+LgL0,Y/j66g_uv^g.T+UEBդDR՚Uh*1
/bu}TG.D%$%'q;$Gb!q@" 0%$%$B%I%K'qDbT~wJ< .wKGxPI|@aJ|H$>.	OJ<"ħ%>#%*Wzg	[Ԣ+x	XϾz78[r%)䴓tJP\Y9CXsNhiOs,Qoϫ 
aqmZ.2)nBR\鳊v dm.`arz(hz!.Q<Kh5"VߢHv.VD-co#
;d]앢=OtSόb]?rck灃f 3Tui`'W2e٫{	R/rwq;LB+L_g(]ZI-٬_*4Jɾ	/1֣pwzG8-\#[n&r6x.?b5Q2usC{<dֱ?с?YVTG~c!D*a\L/tulSL$=ֱ5:zf9&;Pc9fNJֱsףL2sufR:Zձy&:nïtl[mGt?3p_ul¿؈q=C5O_::v7x]G:*=QƤI'ŤƤͤI
Z&4|Qaa2I=k4<+ixN4|ɗ1n:
_*3E1̄p3yɋLN1I1oJ0YaBpZ4h8#3i0)Ln-qU^bJ
g
&4MLp^ܨeqo4;b%./.N&]Z&^m~(1YG<}IF&W1Ydi)f3"&*X_.Re~>'B?)KCۍ`~ `pPC@(0Q-Ej)T{jpRLi{LZ
BR|"NpUjTr!>IN߄o?{}ebHVۘ񕏋ZNqqu\y*&1.6
Q5Q~^[H2jמxxR}<%>q|UN1ry$
5S+{n[MSbEf['ΈϖOwJۓ1N-)oB}Nj4SJyAb~I;^KQ#SW2Rb:{H@n[avTkrE':Ǆx+%FΈuXʠvJ;%hwxdZns:<Ρcp'֔~hCMl8*n`
(Vg0?h6mPǧHqz*gy2YcxoP55s.QtJt8kb7e>׾\m	q0߾_;.PUD1I\Y]Is|˽/~$	uhD%*m%K|UMFNycl8}!Y=UO6\e|I-?p$sMsJ5!KWq%TBΛSYI3
#وk+|+
_Oq@M
Hv2IUFǲ!CXSxNOseKCcJܙ	1/Gefd7REZo

vG3xv%Wyˀ	񮔸Ji8˯<dMvוG+	[D$%/<;DFpJ۵Fߴ[vI|߫Y|tB/%ުroٔvof^ޫ{-
U*{Ճy-.jUogkψ'ʠzyx|CbJuX9nSQor?-b^X}͗%2\-
ȋ+6*+<.4z\pJlihS)v-k5'2aBЮUʴaa

әa=uU{Gqna%<dYS,[M$VOmm#)o֤[mۗ(V_?'bl<3!BdWߑ8	_A5%	aMI$JQcK4^ a9Xʻob+J)%<0_ڢ7'4\(6cUγs;Q/8}[qxg͜ggҼ踒2myY|3ovY">ǂUXOUU~Q[PKL  %  PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$1.classRMkSA=&MjZ?A!HQb
J˄03IΟ`\Q}e1ܹsϹg/ H`&;w<R6r5+'c5W2yUaiqY4g噛Y*ĂX&9nn
Ʉ7Z~{	x25oVđ	56ء:uXh-P(+}zThwip٩^7vqݹ:+?ՃhSvCQ`]n|4uJPA&vpTn?bV@qɡ
@zY?V^5Y g^ی8{XeL{/{z޳
X5Kܖ"kXc_XEm<
PK/2    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$CDHwithSHA1KDFAndSharedInfo.classQJ+1s=
^MPtujUtW8)m$2媢Pb/ R]I>=?b?zk
J+0r宪Gr!gNM/k-3)k&k5I;~*Yz&#\j,63Gaک/p]$2i[pafQ'}Xm)X<UڱLkݚ{ka&ߞ*E[	tӕy3qe2-JuЋ0[1&CD!L138Ctㆰ,0aD^*
f:~@tvf:},xzGPK|^bC~    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$CDHwithSHA224KDFAndSharedInfo.classRn1=m&+R!I7vU)4jv*Ebcۉn|TT(GHR9o߿|p2Cʵ'I=xpn6ϻ=Hn-GIJ\
ĥ."5D3Ҏx'IGX%w{x)i2erw6U+R')&d5"Åg3rFINS+\1|??֣X,@)@`3@&nWw[1_b*OB)tzlVdB8,N+DB{Rj
<C<va=F?ؙNZ#.ۇQP;TKA4ƫ%jKl2ge? PKS    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$CDHwithSHA256KDFAndSharedInfo.classRN1=摁aB$Z%TE
R"!!u:&|VWAD(G)HPsw as
㥝¡Uq\;U㤺pV3DҐp40&?k-3)k&뺔uH;~G*Y}KH.5x{G#ư;wTTBՅ،%EKdYC(I3ʞSltÏs}Ul\	CS+
P
0 dR9Uް2{|t=B'Iy$lFjdTO8O+8"Lb>rQ1!",b9|bxq$Nv֒>xv>׀"`沏|c?9^̽aPKt    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$CDHwithSHA384KDFAndSharedInfo.classR[KAѬl[R<D_4"$SE/t̆IdO)QX$}9su|wc(v?1Vrǭ;V!$*iIa]4Х\$h@$n
d6&#\j,#ư77r[*!Bzlp'EOtd`@(Is~*`5ts-u4@1@`!@)@ȰU۽VCe۵aEOOO'SyOg3"©Tc~X
xaJ2CDX	B*Cuf7Ki?/%M|1}(/^*	]~	'ظũz3PKRl    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$CDHwithSHA512KDFAndSharedInfo.classRN1=nBi@iER2I %Hq(D	b
~@?G@
]ԖϹOq
GPPr'V7nՏ;6C$
	G$Kze&uCdcri[IV^Bp;ld铍6wԐ7UBֵ،/@$>6DpaшQ~+`uw%e 0`!@ȰS*c0U;B'LﳙkQT1?}0\[E9"VCDx%B:ֳ`(i;~PXKX|1}(/J^*2o]|)6o9[^̽OPKnn    PK    A             G   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DH.classAK0lu]ku:\vfLm0Ҧ%
 
";&//o &8〡;zJjЉm$71ʟl(4MQ\Ć(#]6x#J%O?X"E"&ՆeeT%9I@*
.EAO":.
{Er}gO ]tZ	|x8eo!ךL8v1-f0Wx;'ۯЪoxPK
    PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHC.classAK0qt=	6/i2p`1f&%~,O?JL
";!8Q 5.:Jjо1Å	4OZRUF\ں%IW|㜈Rɫ3."kVjIs$aNݟ|}t|j0KJLl[k{U+Q)oeGEv
 
%!ofiM6DYR4f1vzv\l4tPKf    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUC.classAK1_lkZ\Jc:.)]SAgAMI}a
Mj\qa͇\]љ,_4LDr9椚9`iqu+0A.^O
 /uV1IFRMOS+	ϯlhֽRZ!
&-tnwy5lUvv*Y[5@9j2
UKfuOGstNͻ
h5d> PK٩    PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA1CKDF.classQMO1}nR6,KiS>B9$\Jz6	T^"*qta4F^jz
*?:KP4c{3s=^UPh~Xh;+ß@wv<K\Ij}*UFd0E|hͱ~:*i>GXƩ*oRwɒS>u[NʶI(]6عS<jI]:1}rRehD-I}o퍍oc @%b0F`փe[mc^M@M*d홸9Bəɕ,]NG(A<)N<
a52C<ZlOg˂Ce5sX7S}:3
8Ct4EGx6Ǽd/XXPKe"Y    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA1KDF.classQKO1)Mʣ(Qn(H9g8J-SFPjV+fs6a69g;TZC~ڹV}z׬7o/
	K)11H̤H퀸4&\ĆhHcuweXI61)w?gғGnʪRfR%IƪG4%9Iޤwb~üV<?G2lOK	[}1| tۮWqOlX'ªD7\0׮xYRZŊ /}G|R!8n@)xEsQ9Yێ9̦NQ~	&Xpw:g)aPKc(    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA224CKDF.classRKK$1⫵0z	AQE 1f6LzHǑiDs0Ryxa
65~S`wteyuo{ee5/Wv?H;R^LkKiziuU$[>*qDM^0M|d͙?VoELƩ՜*oR%|1\zӐeP+Jsl..U]lmjf3Z[mÏ,{ A # ~ͺRbKuVl"\Mֻz;LδSag9y~EDq,ėBb&CcV` Nk?
e'>X7SEf'0zro|+feȺ`PK9B,    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA224KDF.classRKKA:>F1(8^EY7moeegiW&ӆ(enꮪ﫪G0$0P)0k{k/Gq.0}ov<=ZSȋ\̷Ijw}*U:d<d̚_VoeȄ,9SIX==eߟme+oڲf|]iji]LTYwFK]#p0@`$h0je㤬fv*]9imelS{g>9SޤBsai!"|11I~XhVYFV0b	L+֙Qߜ,ś'ːu2PK    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA256CKDF.classRKO1\(%KjXJ9І
"*qtaqH- (ly\ [gf뛋+ C?#)PT=ޭs)Ow&%ozbuU[$;>*qDm^n3Mo͡փU`qPƩ՜*oR$KN	c8%&ה\`IpS&qi4I6yg$-w),1_F-JFTtͺbePL1ٳ^Sul):d3М<^EA8Mb*D
3!bN`8N?-e3&[,X~3
+A?8ǻzxeȺ`-PK1
    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA256KDF.classRKKA:>F1V/
AYWEâ[,=_y
A<
UU}U!UkxG՚^Fڑ`DJε|vyǧR%M=fO0y
l!O]&9n)	ᮼiɪI(596~ԪIv\5
rReyM-I#ʟKwV_>` P aqYGl	Tފ)y]9n-eYlU{c>*9UޤBs}aiS!"|
1/!>s1LiZhRYFbVQY{0#feȺ`PKu    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA384CKDF.classRKO1kaYPVQ
$7T˿
q(liƞ
`+/mkT?{_m~a#$5uLoε|vy˧R%I}Ϭ2T{
|]8YMjOf7ol|Eiv_׵k-MTYlwFKb-#p>Wo 0`$@`T`qҭn>z-U[ɆrI6129?
;#/t!>0bBc	
iGYiPYFV1b	Lro(XmND=`:`	2d]`PKm'4    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA384KDF.classRMKA}FW5((u5((xV&,=<(Qb
P]UUUW_X UO5~G`zp|na&0/v<=Z6RչVo.Tz,55vː	Yrʧ.qG)	μiɪI(596yԪIv\5
rReyM-ICX_o#Xz +Ge=6%ZL1̋QSul):WdR+)Və&5vGûX1"§#
!FY?N-e+[,Xmqq贇^a.aY,z PKS\8b    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA512CKDF.classRKO1\(%KjX8І
"*qtaqH- (ly\ [gf뛋+ Tk
c(WwO?l}-ޭs)Ow&%ozbuU[$;>*qDm^n3Mo͡փU`qPƩ՜*oR$KN	c8%&ה\`IpS&qi4I6yg$-w),1_F-JFTtͺbePL1ٳ^Sul):d3М<^EA8Mb*D
3!bN`8N?-e3&[,X~3
+A?8ǻzxeȺ`-PKM9X    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA512KDF.classRKKAZ>&x0:jP(xl{˱ݞ0+O+
Q!59D醪_>W/kx7'՚aFڑlI]"[s2"]T#jYsk
5_eȄ,9SIθy{ʎ^me[oZj|Mi7jjvMTYnwFK%;F} A  V*e=7+Zy/]崩JMd+n)LWy;#/ &d!BD1O!F1bA[hRYF1b	Lrok(XnL'D=>as=|a2d]`PK1i     PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA1CKDF.classQJ1=WP}RZ qMm%+Y>U ?Jz	$3gLr_ c]Cn3o*~3KCR`؈M/-S)[#.Mڰ1!<cDga%c-]/-~@a(cƋ*Ėtؔa*EUo*dHzQǔ~
[n(|D|}KՓvy&r/LʟTES/ytٶ,qE2&B%3zȡ#@7HfF}я	1I0Cp|aM$	%XĐfsȜ*G-L=3-L0{Q3|҉WPK9_0 v    PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA1KDF.classRKK1b[~+=A[1Ú$Vgy(QbR<df73>>`=aLtɐWjNٛyKMRj3Tb6ƶKtmE:Y	᧋awPXHiacmKsX2'>[ڼB2.&-)ZxW=$ͅI:ZINSUb.GPp<9|bwv;c*I--7\9Q70,jUOXGuw.W`2զR1c3>Ǭ	3W&1=YYmc`yNsQ;N	cW},<!zR},Ĭ93eYPK̨t    PK    A             _   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA1KDFAndSharedInfo.classQN1=!Ô)P$UV <]$,s%vRgJG!<jQϹǧ 5`arxP8UZ3ҷfC^f!(jU22ºqi҉K
јYJ_h1i2%r쨑:_yS#R1YcSC)$35 ÅMcrFIN_PD1/w#
u  dثvz	~_lu#c$z15N%?3sEXBeͬwX!"|!aa3"ѹ{ndfx9>#9sl|2:3PK3    PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA224KDFAndSharedInfo.classRn1=%LЄW(-R!4KQXUJBvRԕ\&Od;X"j`-]__s7 -&F^i:rAlκ=Hn,*YhJaݔ4%\ĆhFɉJoMh1i2%ry:om<©)滛	)=D$>7RpaٌQgNq0WGz4CS)	P
P2UwS0 U|"Og\dR8N+DxL+g'!"<!9f'zשLdqǞ-淏+5ڨ5J^
v?{3OPK2
*    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA256CKDF.classRKO1kaPHˣ- Q8.P z8x#	ڟ)$~ ?
1[Cmiƞon 0C)0^973ޫTJH;RLkKQzfuU$>*qD-^,/dz?~,jf7ȒS>u+μiʊI(Ul7jhmvLTYjwFKrbkm#^?d p a:zhf]`)7TGɦqE6Yr0qroUvsEG_!LR!>9(Ba2GLiZ`TYF0b	LroK(XϬ5.f1zx]|cːu2{PK==    PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA256KDFAndSharedInfo.classRN1=nBZ(-4n@H!!M"!\28J<mRguG!<
T*h[>>}s{y
`_gQd(T6JJ+wpT7+wmVw
HWre*uҤ#p!i3'*Y}01bdK>ax1lΝɺ2<K#U6%9Iަoݑb2Gͫ^Li 0`.@ȰQU7-l[l鋱cx/hqu2j,Jt?fWf.2bCDX
B2Ca~ֵ,֓\2J^VO&x&X{/Cf^0wPKML    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA384CKDF.classRMO1}vU( n@GC⍼&,NA Q!8`K3̛73^^X>
nkXe'k^*P6FڑtoXO]"3s2$]T#j`GϷN2NlVyZοCXpMSVLB*\`UClcV3Z{?[k,| A  {ut̆b-L1SSoMeYl3`z*L,4Џ/NB|K|
10)0u 2ʰ1Kf*ČJI\!:b
#b9!e wPKn    PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA384KDFAndSharedInfo.classR]OA=#ЅeQ(e	֒	i,ӴP?˧H(l&hVIܹsjOJ+w°~QrmyW;4$[Iyze&u#dr1is'MalMoh	i2¥r96ZʩoCI|bҩpaQ=~8(5t<S}(,X	2/a/L>@UT	tr\{8b\
RcEXKXϵ\CiBa3c<gXl11'wj?HXK{xb~H^J^*2[7ξ2ge+wPK۴    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA512CKDF.classRKO1kaPHˣ- Q8.@ i
HH3,7Y=G!fCq-3|3
5cP|(0i[Ok;?JU+~k#$DVZeIRSG"eT;O6'2NlVyZ,9S'ҋܛ2_UpC&viIyg$-).6`C	 |Ыf6aACul*Wdq/W!g:Peg9W~EDq*SCb*&C|Ĵ@։ϞMea-T,gČJI\#:bGŗ.}c.X0rPKyx    PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA512KDFAndSharedInfo.classRN1=&i(E
)db:G'M|"Qjʢt}}}}oagEBAiNkaf!pILnD\t.bC4&x!'q-&MFX6RGӓa?wԈTLֵؔ/P$>1TpaQJ؛(sPyu
(X2ֺy=v°W}
PUC1|$t{>;~M>EFMSn"0V3Xa#^X&Ca_=\Y7GZŊ'g#y*(y
_cwX[ak77w^̼lcPKFbc    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithRIPEMD160KDF.classQMO1}ta/TR5C,#c]vI[1<HG~%FdL__^B Qؽ&9e|֪ԛB]]ϝ (ң.Sϩ+á($kZ9U[
8ZWx\iE88}.fjj~ʿx=\N2.p0Z
rx=gg(W`o,L[`YHYHlq/}({lh혖W=å1-a5H`*lX Y,$kAd|wϔ
[3hMkTe<`s/G&oX {3AƸ+cX}*%~PKQg    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithSHA1KDF.classQIK1bkoC=)BRBAǘΔ$Vgy(Qb<[-yoO/ VD!Wھb(HcZQ+{<+6u_jRa?!"HalI\KJD%_OY"pWl$dNvxwVuxUdl]HMR%Etd$oPb.`y(x<=x6JY#}LsȰYL.ڢ/xGD!o0sٸ*iVQSja(0&Sk*>F1#1<C!8+acEu\q
w3FXxFpX~:;fcPK.q    PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithSHA224KDF.classRKK1~jKԓ">Tɂ1aMiwK+<U(1]<df&>>(cc9C@E2իJNٛIT*7k
@j=X*d"R'=sj.E׫#a|h!E\(d?}Y[:B2!&?m)ڒxO}uMtd$oRbz{<z3lwβ.~}_trx};"
y5H*.jW+0`:fR1cs>,I,25_sV;2ĔR9N,β'_+,zYww:͒PKeu    PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithSHA256KDF.classRKK1~>m/Q/PP'5-ITQ,>@t`3d`k1){0S4ʵ;eo'ݽFHMһa'!o#HalI\CJH%˟.,ZHiacm+}X2ǟ>R֪6	pK$qO]$Y$'|*%==x=x6
ųKga&*DOBtME~&DqUҪ'
0 CLTLŌ s>0cJ|MלFn01bnTNK	},<!|R},pVN0PKǹv    PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithSHA384KDF.classRKK1~>K@+PP'5-ITQ,>@t`3dA){0U-K;eo'bRc&aPuȯH&R".uұ1&jSdy\99Fҧa7RDZXm%a+wkUWTHքt؄)ES踫IsavVuJZltl<<kͳKga&*5EWBpME~&DqҪ+
Џ OTLƔ 3>F0cr|MלFn0V1bnTN.&/{{Bp{X,;;fa
PKv    PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithSHA512KDF.classRKK1bkW~|Ij*dA㰦%I+<U(1]<df&>>%CPE1LWRNiig^1Ra؋uȯn$)m:ؘP)ZdŰE)"-l
wvKǰZ5!6a8nJє;:\&$yp<Ða>zq<R9`(I'M%7\SQx>l\	悩v0`5)#`(f|a!_oͰƐ]4]mewDY{UOBK'},yPKCqv    PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQV.classJ@5ih=	Z/{S`XR(x\Cؐl&X

>%n
"=2=p`+	C*ggce#EYĥi*"6D銯SQ*y]c)I0yd(,(I[j~ycPY"jSc>ǳMeEr}mm!l .Kbo&,m=̆Ŭ!\{'
a>[a:PKN    PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA1CKDF.classQJ1}qkm}_0z	E{c̔mƙ#YF ?JLW*y/O V1ۉ6Cǆn2ǧg^W|Wė,_7ZR$B\fc."CT%mH1l]w]a륅UvH66n(!6e.KQk&.Z%k$!_k?~уCC7|nك߲ΰɩrGeQ"tċn 7Ks\Pp̻^Zi03C>^C[!8N"̡evTNۢcdΏ/G
?
L40uQ3|ҎWPKMw    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA1KDF.classQKK1bu~jKPZ cL5-IZٟ婢GY_R=Lfof2O 6؇nL~wGE2d
g7^O%_jRa+!L0F\ac.BMTW}aRDZXm'ᇏaS^Ӫ/-		pU$qKUHsazV'|Xn(~C~iyFfXI7U&]?Q12:㊤UKXG%L  I_` &}a0qȭPƐ.殣rrY9Ȝ^e.ۘ~fۘic=gI锥/PKr    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA1KDFAndSharedInfo.classQMOA~Fj (UeTփiҤކvvJgq*	?EEkBHL~<
.-#ǰT0VaGL~[SVg!($&ɩ
K]ElFp(4c0udvNɺ2HcLT6%9IޤobJwGWѽv_5I  `%@Z>ɶʭ>:m_nf1FFMSL\(ceֳL(`#D!ydU1D
wY
k2cs,zu6C;^M5?7^^gQbPK    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA224CKDF.classROA**MԫE&&$<5{KY>@ek`7ߗ?Ա5lz*0owǓoƟ7jz|l	iG$:u^XkIOJQc*3qcxswVs6I-?$KN	Nc'&̷fl.ppժI\:4rReyO-I#O#ع 
lWZt'rwPɞlsI6ٛdp<;͹"b&VZ!!"<
'!82Jq!>,O0,/b	LvQ]WFظ<Ͽ_lY,PK%^X    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA224KDF.classRJ1=u]o~//OUQ)>tXSݒ~O?@`3ə33<=?Xb=ݹ9CߖfOo
G2O(7a#!#HalI\AĻ(RDZXvKfcXwmUTHƖt	5I㖪$Y$'ɏ(,T#X|<|˹qޚdXNRk%x]D!pcqt+V-aU1.WnthzʦbGq1	Øb)Ur0r,օ1dgMsQ99n9=e.ژ~fۘic=fI锥/PK`u    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA224KDFAndSharedInfo.classROS1p.L@/M4C26|0KHH|)]v3iD (c85~7g(TVWzFZ;m"iH80KM/ӑ%ĥɆ."6DҎr(^Lpǫfư?7r*-um!=6c8ܗ/M:V]2\l0 g$)e)vݾvzPDI,v*{gʻ?L>CU9닱1t\s6q-2j,Ju?槏Ok((YC,a-S`o]Di6a-Y{m,{v>mEev/]\ac	^}2ge?PK-
݊    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA256CKDF.classRMO1}.R~H.
Tj	L7YBRE#{͛o~ L
LTk_şu>>l4JEڑtgL]"gVZeKRSG#-&piS9Uޤ%|1yӕ
PJ36wh}LTYwFK?ŶF{ A  s+ѸxW}ST:jdWD$l{2q
rfp;&;͹"LQiSbxb&M}>Z`UYF	{%x3W|[eFzi,FNXaCů,CfPKGߐ    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA256KDF.classRJ1=u]o~//Q_A["R|鰦%,*
~%fJf33gf2yz:ss-)͐+({U>Y]8*~B$,!e|D
ckĥN6"Du,%Fɝ엸"pou7d?0vqVxQdlIH0lpJQ:n
i.LRJr
p?ǰ譙M_>$U*D(
7}G{"iVQSrDGl*F|яq1	B\!g#7BMCrt1ӓ+Yࢅ_afncNYPKylv    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA256KDFAndSharedInfo.classR[K#1jGU/՗/P[a_bz,*+GoRa899s 6c}S܎2KNNW7H,yre*uMҤmpi	d	/&MFX漏aҩ&/)pC$6IGpaVQGXm+`}VCC}
2,V{T6r_lpBǼvOƕɨp*>V>|0LD>0CD!aCYj
k2,|#,bĳo+y
Y˳[u1}]t1w̙2geCPKyV    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA384CKDF.classROA_灴" <샘`jj		Iplm,jle51n2;73; v>jT`*㏟N:{f'>j4JEڑtcxDVZeGR|SG'5ʌcxwwιS9Uޤ%|'1\zӓ
PJ36wjMTYwFKŶF~[^2@`>B0nجޅ)j]5Tl"[\Mv';ɸ93C\1aT.D%DG!$x3q!>,O0,XfoobƷ-fWb=oXϿy2d]b
PK    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA384KDF.classRJ1=
^j_^@PmHA1aMiwK+Y>U ?Jz	$gfd|`]hg:7UCvp|zvUy{e}Xb	R0:u$):ۘP(xG%?_BHk]Ē⮭
ؒ7a\"uP0IFV+ICJ>K,?CnQޚ`XNR*!xUD!/peq+V
aU1.Wtb0=eS1#^È~1Kr r,T1d0gMsQ99n9=ϲM?ML41u3tҁPK?v    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA384KDFAndSharedInfo.classR[K#1nGqծz/՗]} fJG]X&prr}ǧ [X`a!ro'(nl+4$u-ۉEre*u
Ҥ-p&i_dg{&#\b,6RG{ưޏwTULUؔap]$2I[pafQGIRs}E]^	CC}	2,֎׭la?L6CU8
c^x/Ǖɨp*>VADLD>(>0bS!>baCYjk2,#,aܳU̮=F:|_:oμ?3/yPKa    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA512CKDF.classRMO1}.R~H.NTA!PAV8tx#I?SP#Vhġ4cϼy3 6fډ{cT㏟Ou5"Hy3	l._ss2%]T#zOeF	<w*jf7d):qte$Ҍ:dߥ&'Uzђ<O^2@`&l0Jv<nUc5(U6-.&cx\ΡBsxaT.D%D!1Xs8m'wUQxb	LVQ^Z+!F?/xy+5ːu2PKyb    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA512KDF.classRJ1=u]o~//A'E֪c:)nIbe?˧GYoR}0̙Lc>.\gKEn3d
'g7^v6V׎%P 5	KoFC~_G2q5Q"_wQr%.6[M,a]ܵU5^T![&?RT%񆎛Bd$?rC1`y<d<z=1,:zkfa)O:I;5*Ͷq_ޯHZ5UqTrT\:)F}c |bW
PƐ5]mG䬻-;FJ= hawna9'}Sn PKE7v    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA512KDFAndSharedInfo.classRN1=&	-UTVTH!!%
]T"!1epx"I5U"QU=<*(ϹO'(`!W1?*CKrNICѕa'11?M&ZRX7$.M:v	!v˾JolwbdK>~~1&N
ySd]KHMnR$IOF䌒$P7X1<~\Y  P dx[:WUea@L
OOǻsyf>IFMSn"a	2q&J!x"³+xbIjk?PXKrgk-+Dk@Vb(w<kk/Cf^*XPKu\    PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.classZ@G,̲,(
KT"Ѡi?쮻JzK+4p.$rz\߾Ӳ+y͛f
t h$#&o#j8׈./<#%/-vm]};Um	X/T	fVR*aVtr&̶lW,JOUUw@u{Ri_uXv:])S\5"#jUYR`()R/]^+]R|92V&6jnXA&Ī$U/I[tV6%UW-Lc^x'EFtFƕi]cKCՒAKL=

8_<7<̖9&$4*ʈ$$qG/Q,8^X4&q<UcQ\PՀ[=^P<̉m׫&lT?!߮=.%E,[KuȲ<n^u9vW|ѥqVSaӽZtՆթUe`6HmOiTrͬ2k˶_/kȏ.OqiˉEW`b~+Opa
K(৵.ǆźB[^lk ;5ÔH1ў6lA]gP;U_$~)ե;6gΔ(q]Ӣ&KT\o5FbRT5	Y=NC:VW=<
M^(uiqCb&<2Gfb5=*5A]nBi|߫ڭɦ2]Tݱy@ۡZ˥a/w{,P-Rs_8ӠrqեZʺkMXۢm^
xiY%	ڜ{phkXekskz,-yK4nvf׺k9cjMfU7t+NwlMٰdbVҌ㏅ch%Iٕmvyzyuih.n|
yzsSS09EyhڥTG{paڔ'Ov8i瑓>xIP_zy֮OY`KYIkYjKj֥M_|6*mdtF#C6HO2IxiN>M]{:%l[ҥ[͓zQ{ȊJƴY\iWeۖR92:T~Wi=V};Jl$-	')KS!^_
JuSD5<tzMTAy@>l4OR|	8]2a@N2/c.?YJ,obW3azdhVoqѼ&?1&^$S7&-S= !忍O8׳=
\ .Y`	\,p@])M`K[-
	@@N]}	\.pW	\-p	\/p7	,p	.pw	-p	/	<,n~Gx\	''>%>#0 Y	|^
<'<!9z)cj3cfemH3Tm8=\)
+>l^[Y*]fH\hbjI?4
Oʻ!~kveڍa*°:&qRuxȸ㑗Us'vsiձ'QJύvyVJ$BWc,_?GPZҜtV91l8$ؚ_̄5Zu[[>Ikd}|;-.t6u~	5Ezoehէ9u7Yuxqܝee|fˌQk^IQ2QOyf4h6dF'M6 Sh4330݌5oZI%CSXXn9&bfb
fHNVI6RL3ΧYfGf4QT3ΦdE*=݌4یU4GJ2OrI*$d$VIHR%BIp2aZ"I	/bIj$YmAY{HWd+\&Q$+LxM>NMx֙uZe҄%d;?[Lx7Q6`jIΑ^	+y<#(Is.IΕ>rN~ˎxX4ua(}E\rfy*!S2R3G@l~l)e?9jr$)_/bf)%Q4(_E|)ŻAp(晘
@`\!5=AC^V!Fx..!ʽ|m,CmAHұ-RiS9/{=H]lH|#C3rxCCx}/)8Hl&Ա.>Tد+AQ	fkY~rQY~/#aUc-tu5wY{iǚ<]~rjt!,#7GZ`ގNf ]P7#xp(qY1B{;aOgFCU6sFaﶗz7 ]^`KYl@pC⚅>xxB0WesxaHgQyv^Q^qUqD?rԏ!l{{ep6/Jf+CnkDO70M"o&[rn"E~)4UFn`/+ZUG1Ip˲I{h,'FI7{P{0$IT&OfN?Julrhlcc*d˗I%lV͚-4_צoGUc,+ȊXO n)zd)jN*z2$v)ƩQ*;x"lhˀXSq ga[!(p\-}LxH"	T[
TM?yJb	6&"Cc{bAa(#ʛIåtix;l@x
S7ZѵA	#fMb+/Ц&L~,»|_mf;w0~N8Rr}.{Y?b,d1cOOe)i?c03q60q.oXew310g02%Cr)X
2V2q>a\cYnE2\^c5	?q_9Dg2f01L.h`\ʘǑPKl\
  0  PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$EC.classJ1ƿtnnSŻo-],Vl=q&%-cEPbvAd27}~ Q
՞TRɴGF~xp5	GCM@&OzxY9Kr&eIXHNw"3jr47pǄ_urip]V2?pP+RU`l蜩Ouڞ(aux#(z&P)Y'Jnؾ&y^69W
PK    PK    A             G   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECDH.classPMK@5mԏ*֢h5XZu
nIB~^ <{3U	fkBPH%37JW
AG}3Β44,cSSdHcɩVd=Sg$#?p/
nQaۨz{ŸY*j-
$UA{ME	uتtOO+e$K91
3;1X;nbyj/ue8_PK+-    PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECDHC.classNMKQ=7?ƱAm )FNYC|
O=Y	ZQ1h^_z p
\>"JE^'y|p_BdZT!<2K5q:$RId"1Q:+B{"+_!룃Ap׃0YEet0u'|ٔ
U66<yȡb;e%}3/R<ecdhd3-[v;3^>+ް:ȮgoPK>q=    PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECDSA.classNMKQ=QGmâ}B<vS$i_DߓQUE?Z-׹p>? \⸈<'BSi8np@ף6i=Q<l&LHZMex,2`R;tMن~p/Nr9(p]	W=U~~B+q?k\ld꠱h}!σJ	+}B7SIzZ[ʜGpMl:رj;*
/j{ˣ
PK    PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECGOST3410.classNMKQ=7?Fmâ}Bۼ>)E
)h=_Ó=Y	ZQ1p^_Pa9BZMU|E({^~zv=BkiB=QH6|"$f2d<JSJ0)ؽLZ\&L3EhoB?Y7rҚ qP \w5"~Q>%{uX 	_ppƆ,\N	EKRE21R4
ٙl/V
{]}WS^PK w    PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECGOST3410_2012.classQ]KA=檭YAn)E-)h8-#:#?^h֌
s?p+*X'HKT]*njޜ[Amv{j|+A]3#΂p,舳t
 LDKNW"j0j?M%A{ᷚO5t?.wѹ^-,XgZ=H~E:Y(3:fʣ=#ZyIKI6e,2$]=.܁RʐY G%fMLڍǸd> PKc2k&  !  PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECMQV.classN]KA=ڇEA@dH4Nˈ*Ϫ~@?*]6!{~{9p
ƄԒJmj0t{׏p@\MHJ(:l]Sa(BFr*8IXdM'?D~)t2$ȐuQ&k,CCueX,j[3:g*#kU
EE>
zNv	
YH4lib
/Az=9PK"    PK    A             B   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.classY	xTo!	1 NB 1B!	DT|L7qfZJ	ZV3]v䀹Jy/ff@}{=ls/ .."bCD{%IANpF0iZ$W6BWɮ
<,Zz*)֖ަַ{[[
=YXm[~%MbT;N͈{t-$mjOf-SwN;uÿfT
6iZ';)GԈ4BOohnFD1:l|%ͽoGfi_7&H9阮bdYjj-nUaO<՟&SkDl4pxkUJF@G3

AGTçYZ856Srva
6!Gi-Oޫ(1*qyd;b5m6-fvr]ܥ_Հ&oY	ј8MׇúPw *߫Wzmm<zl(1GX$U&@@3iV-lZHs&z>2HZ]c:|i*RTQ}ZIDT`~.D楲))c1Ug`J<IUd`K8gB pS=l!1M`"ݻϧ#ͭ%%fƓٹDkKNn=ɪճv'"5P!]7vE,_?/ɶs,h5]oeKM+;Vǂk/	=zOJ. K\]Vu#yͲވpRִmJD5c{}'OwKMBM;Iݛ>qƻW}`.|<%p2< M)$4Av-]d{g%5̊qi,X)tؓM}qc-&¼5bG<[2-J2)J231o3U:J5zEM TKH5բ$NI$vo"AQ"pa.rFNrק%=mbC
W*Q/ X'(^IbWbf-JIKl&]bDu;%AF]7I%|	D.wZ٦WT]^ck֋מlcPڔ4$tbuLdX*0]cV#]4|Alj+9qnVF!ˈ!'qiE	-g&q\y1rfD2O}nx:=G3|ʹ.[ɶfgbS)06G?oc:+LO>/.צ1Fu4Y?5ƬITPZڔ-	3sKr|FĊ6ܔָ͆2י|JޓёX+eCOX&qNX*cJP^-ܑ3jJޢf<H'}?CBe]f9(=!>Y+Y U<ْLr|N9pf3SxD*jtS}*}Y8$9OP}W^9k ߂q0Ϻ[پ'μLA^<yϜt*x5x2K\RLU%
J1MB[xxeaROb_ģ
V
zAWC
a!|De(?`C%>f*Xq
xBJ9xaUF	1O1<b<ý*XO3|exy+_K%~+_eË/)pF1^ob߶?b?6δ;]0vE8m8xŎ{;v܋_3@AZ@q~pƎv܏1g(O1Ɏ7O(dp0La(c ~1Aa0NNǎh x(v<W	d(f((d;ΖgKlq!Ṕ28_0ҁCʁw
(;51%,x
8}
ET߾f_GP  A(WA$jKzbzu͓bcB,0
LšcI~B̈A"4G|"eQq3V)`L=ASji)8Ԕن쇡ԔI`uԞìD_&)*
>.fV&fgmmba̜IJJZJGL%7%LJ*Ibi9О(2tX
MQq]1a*Z7_1G܎<SSf7=d{h$vH\+#8A{;Vv3QqETUGp;#*.*<$	fQ;$FŅ$OO"z!Q`)+6mZvQst WwwPyeQy%Yl5Qq e#E
j6x>ZN%qJATyL3؎$U_R}YvneX&ka=OEa g:aiSI[(uȚZSh#uX6ǸFp/_㢼fHnU[GGn>&*6
#
Ω8C$W*^uU8L"CӇeK# S5);ݓ2,kő9#Cʖj>;`s.r]N[;0
8[(7'Š9V(VQWA&Еtq{]>Z)Cќhx)$ns&EEFH)]5$5.
N/a~ȋ۬q$C>AtjםZJz.rJN훨A훩IC΢-8&:}+/@ PKQ  %  PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$EC.classX	|?l& !+"$Yք;!T{l6ffvZV{Wbk[E%hZާ=(~fM{l{ ,^'J9ENF5k%Ek-7lߺn[ViM~A*meָtUr\^_G<2Z"fv@4]d)wj0.мO5LSGmM7ʃ0
0F\Mo"m5hTS5b{JEtr0#ꪑTnh:Bdg hFY2*z4QHo+)
kAm`xH:cLݘ(m&o1TR(V%OZٮㆺ5wLZLL˩ٵ_>:ag]>"vG`K`fO/44=DIq-lZnqzfQ5b9ơjf9k]*lTrXS%dXvK2cX_?UD,)7Nh%7oc m:Ôҹ~W#+]["h-F{ꌛ$2sŸ&G3׃@@L^buF4T޾,ɠ5#u^2_vF:My5Ю}ZPmUCZ4<F(U1ʑ Yi`K`դ:ɳ&Hj0Ӫ"[6uƩ]U_Ԉit:hR[*jg dS8A&vWk{Th:u#&	Xɿ"$T\UC?C-NBRSe3gw$5	3<?KʒĩR
@Izպ}uI+xRS*2AwMV쫤<# ) tJST)
Wtbg91ÉN;͉	JP/aeKX!aUVKX#b	HX+UIhp&	%lQBM."aV	[$	^y[:{ԠyXbr=Dג!vEK+[NfC^Z$)V>'k2`W1ʫkr姢:sR>Hz?gmy"+Fw)XG $hE[Jb'x5ֲJ^=3(F}f^cқK7_Ӱן%o%Z$bl.>h5\YYI\/*	W0}Y_4
v.tӉc2c[W]/In˵Sk>lv}΅=}S*U9axXZ~/HxN
>GpC3-S9'擋&3?ݳS<bSq2_{N_rO}/ha;tMSnAW+U1Go
ˡ(LxRܠ`ޢ`nT0oUjܤ@b8E
!)oWpnVpC1nQp>ޡ`!b+Nn[Q U0SP+VոMA
`)}
ve0GG,<r|Bv|Rq
fc?|3
*Y~p2p?AA0Ãxх/1<P5;qHF?\b .0|07dY$~.0|ߓ[ߖeDY#o2<&jVʈd>wq
~!c7яG~_2	gOx#/cG7	1
p| w=\?ҥ
af)a30Ḿ6 y?pɁQY#զ5RZ#U5RZ#5R\(P!D
(9]&lCBn1gܥ82âxϹ4	Y} k9`wג=SasPƂd5*"UbqBCi:
χڄ܏
X{"ʉOZ6ǱHBF	;K,w`xs^Ay@Tnvv9+ċq^
1<0&ޮ1]ěk"^>1'cĘ뉺ǦIWzgX}(9tu/e8Io	
 % ^L$sjq̓0pUUQ*!xsѻ-x
'ӷST4>5;!fG	QI!i!Jg\oޒ<[[twT-0+¿axX(dU)qJoO&4U陉/*	SBl	:Z8v^@"zs^;$:`UOItEwΧݛZt܅wv V/4,78
oؽA)"
T)'WCg{vK(vdOCEie+%еb(r>;<v̭{7ͨYLQE:\SDJǐX>Et_P'q%fTZ֝Vm#SoxB)Q[AO,~Ii[#i2ir S4L4iilÄܽKP?PKv`
  x  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDH.classN1OPqm410DD}-uR-$<nL\ >L\6iRy@>WZyi4WfM3T]Ԍ
飙i<ǒ	IPZʣd"cE+ېZZۛ*搓ƿp:S[)ltׇ<,eO/'~JgΈ2J/F|eV7R	Įme$=(wr7Hx貢fO8x^W], 9lw9PKot-  ]  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDHC.classN1OPqm410DD}-uRHx,ݘ|(c`ɽ=~9;*$˕ABi]X{n>_۽.A
vӲ>-VT҉!K5p5(Awr4GAc{T_8AcJsqu:\u4#|=ra@΄/9rӁږC
s<	R,KO)C;G*39wV$/8xdcy#
瑁PK-  _  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDSA.classN1OPqm410DD}ZHx,ݘ|(c`ɽ=~9;*$˕AB*]X{n=ׇ^ d&	Q/yM|:7z)Pf3S;siZB	#msIr6u/]翠~pbt8:p:zgqNV5a3KN\t`=%2®$\`?EcAൕ	6a(B`"v'V%{&6Ί8|tl,>y<2p PK=e.  _  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECMQV.classPN1=5>Pqm410i(Ⱦ:)$|nL\~L0qa{9o 8"C,W3UtNP`Up9hu;#H7eMG3b)xM$>P#P.SJP)\
RˀG&Acs㕩щuz/8\9fOʧ,։2F0(|kg6=![C Hx-mMxG(Xtu$6ةd{bkH^5ds<䑆kPK[,  _  PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.classJ1ickUm!..qK+*(cJ6Sia˕3;NG8'$'_ qPΦWdP!8.<d8B`4&{R3^gIX$s3B:1"*F|#
tjRo0a0KJ/$KS])GEu
Gc}P{X&(vddwrB0!::ehܣ]
9{o>TA*cDl#J&PPKEc    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA.classR]K0=5?AaQm"n@PX02؟/?JLA7{9!oϯ NM.ZSuFk4jӮLrWqzDp
>)S&P4ˈSu$
_>QJx&:<R.S	*?]vDKFqǕrF]K>gv+j`@րa g Op|Wbi,ӳI}}/J-iYHX`>9-1	&,,2AڜjzQ#F]j`ީaՎKt.fG9o!PKkT    PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA224.classR]KA=}'==LoF l=n #̎z1
h
0f޹s=2oϯ %H-ԉ:%H7ui	,&sQ-G[ైqd(qҺ]s( 8ӄ:I=Z3)_F.s@w%uèJ
F9.W
$wAp!gv+Uo@@t׹+Da&u_UZX0b!A9&MXX11U/
O{n ;'c^cC-D\	/0oX_mmMc2PK/!X    PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA256.classR]KA=}'==LHbZ	!6ˈ(Y+${rϹ˼?8A<o$O/)AVwuJ`1]ŝr`?
z>37TmNwU@C\jW3&ڮ5고)|0SM+:s
dbnqڕhrIݰp%Hz;]Apgv#Uo@@x׹KXMn俥7,1k!b!5FY&LXX41%4/5_n 3'`FcC
ui}7<by/􆶦PKY    PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA384.classR]KA=}'==Lj%B8,#+cϪЏf@h=s/
-x. H_ST\vb;"~ =z|gnڜ2婢iծ8egLB_]kBgASAaDVCu2>A+;䒺aJ
F9.W$w=F4ފ)I4_.cickP77	3>6*߰Ǭ|dMX0aa4v|]naCȞ76:֥V_`ښGM? PKZ    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA3_224.classPJ1=mu߯ևH"młaiXRݒM~T ?JVE	ds&6Ùl0v(CJ;/V2a+k/a7R:!r?MubBŬ얼/{Ϛ
.ÀDhd%X\GK8npkZօb~mV3Y%$Tܭ%V{0jâe!e!Mȟa;H{3n@o}iUek1``k&qڰ1g	,Fܨ.N%4cܦ"&L|0i!sqTf8<#;zD䄿+PK8 3Y    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA3_256.classPJ1=V]ת~ŇV"eXV
>ɚRwK6YRQ(1["&0aΙ3/O HHU'+'Y-\	_勤yQ!.v;܏tS0:-H"Vv+O&:aeȺu:o\
eM(G+Lpu[	%	Ww^,X`YH[uKXތP+vCCgU$F$@R_c!gƸ
61IHaMJ`ƸM?DD),#k!s8g%3Lέcywb=omr_@PKl[    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA3_384.classP]KA=m(zz"H	6b]#V~T4kED3p\9wι/ J*>"E	wZ_ۡ#NK,@c
 y×!VeP#llcY>Up\~R፬
l
$gXJx-I()[baB҂eaB{Wl/ݸ0_ҾUaA`k21Lٰ1m4f	nX1nÏ"6ud:>dnLfS[Xx}=X@/hWzPK͝[    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA3_512.classPJ1=ۮ[(>eX"|5
%l*Qb*(RL9grμ>>2a02*B-FIaro;OU]`\:dBEy[*aeɚuڄ:\
odU(GkLpuK	)	w+^,YHZ,,	ӿ:'es=i
7UU`@_icIld0MHaUR`Ƹ
?DD|V1b!sqT+f8<'c1	7PK=Z    PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA512.classR]KA=}'==LI=VBH!22;Fz1
h
0f޹s=2oϯ EuJ՝rݮXLrWq||X$Go
US&]Px>!I諶+|M,h
#(hӊx\'( bvep'\R7w:\I(g4媞NWǙ݈F[10e i02&(^un.?9us0/oi
qZXH`.zͧAքMLc aMKe<$Ȍ	;}cCm]h-<a +X`}DPKY    PK    A             G   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSA.classJ1ikTGPh"zK[ ެPRݒM>(
>%f 	dOR0z"eNcҿ(W	В{X7u܍DOĴ$11KT#:ar%~AFG!סT#*jvFXE5dbN0~MBoT(5IݖF+`5nZEޖv0`ԁ`Apx[@1kTŔCi&q\ua	rJWlr'L#O&&-.;ӏ+ڰM#^=`XWmtmNkȿPK~S    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSA224.classR]KA=}'===l=N2;F(0f޹s{oϯ J#H-3K}Nn4JZ'pLR,զA1g
UFzVQ@p2
j{LySyIMPk٥5`\*&( w8pACIO(ʢZINCiLpCIPHp#LY.mP7*rĢ搵acņUX#HUOiLˢHDfspx6ѾKfG16~EPK2X    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSA256.classR]KA=}'==Tb	ˆ4;Ȉ(YK{rϹs徽?8A"od 9AVuJp%exJp&
{s鶠\:lBEV7'=)p}4	
X=-۴""P	J?-Z\Ю
/eQZIN4{Jx]IP@p#L´BBxKXgMϛɏ}Wo8H`$b3ڰdY$fej)Y,hNÜƇ;5&5u_`6[md> PKڧ7Y    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSA384.classR]KA=}'==̃	ˆ4;,#+cϪЏf-!j=ι
=d."=Fӽ4u+p/+q|z>,AtH#BE^w])p=IZ:Tp6;	EY4vVSi,nO>6S0caւe!m!CprDgMLΛɏ}Wo9HbAA
Kk99dmX`<Rfe)S(Yp171&7u6_`!;]d> PK|Y    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSA512.classR[KA&m
EjC@V#!|zfevYbQh	AP3pἽ?8A"od 9AVuJp%extLp&
q붠\"X6bZu+^'Оfϔo8ՀqmZMuzg-.h;EYtVS@]%HT>6S0m!e!(^~.?ٶEIy/
	;q൘6l,plc+I7YZ`ʸm"640gC̝M횺l	/oX{j_-cmmd> PK޻Y    PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSARipeMD160.classPMK@}kkXMa?.9TH#q-m؟?JDEffgޛy~y|p
\!(@$f˹,OoA̕IS$L$m7/^#{ ؝Đx,m5U;xn)OP28Vx<<ѴbDmO"54hGFU&[WBw??nXȡdb
$937cEzlJRrIPlbV;᪊WPCayC,Pg)4M5֡PKɾK    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSASha3_224.classPJ1=Ӫk׭zCOPjł"$1jJ[җG٪H4sy~yxP2!/T>az⟖N¨В/HeEG4$2U-:f_{a7oxpXN%QamT!&7p]𺐬kHxi6J0)X"~K`KX8t0q0 C9]ZЗ݂Z0>*yHcC
a k"\taEӄrHW
rǱ	/*F-:9dolb͹{==b3]߾mtmNKȼPKɊD"\    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSASha3_256.classPJ1=ckVWP|h!"bA"$1jJ-Tg鋢Qb*(RM`&Ü39g_ lcO{*Tf0XZBZr#.a#uvC<6MɄLbUYT~ l
˩"
TX'bjpa"!7d-]@j4Z	&Kqo)B5)8d;G0_ =o-
ӻoF=<13Bօ	&]c.E$xЎ)5y˘0eYXE'y[-dsvpO0s;ݼltmNȼPK{In\    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSASha3_384.classPMK1}Sۮk	V9TAPR+l)udS?K/?%f"Uf2{	&	ahW2\WВKgMF<ꄢ+xlZ	mŪJje/P
\S
EAXb!cst
)$kJR3w//J0)X"~[j`IX8t0qq%laP|nAo}uUO<`C
!50.\L0bSt%
$vLXƄ/
r7ՋZ=fawyG/ڜ}PKT\    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSASha3_512.classPJ1=mu߯և'E(młeEIb6ԔvdS/G٪H4sy~yxB&{JW2T2aThɍ
ݭmfk"j#xl	iŪJrnA
)"
TX#zF5XIdl0ׅd-]@jN)VIiܴ[P{C%!4alOwje~߮*{c@0&ƤS.<LaUB;q,cȗea
mj͓{?=-fp^ѵ9/#
PKx8[    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSAShake128.classRJ1=qC T2,./#>LuLb%})X(1;R9'Ilb \-t&:tzO쉝#X=>q&<U^IHR {o&WE(iwN3!Hc36+jEm9]Jyz~ Cuמ+BdJDǩTEP8 %8Rwt6`17`lr=2Q7Z_qSUiz]/~ZЉA1th0a$>Ř	&7яImVWvI)$AۅcQ=ym#F@*@oquL7`H?g꘭cSuݽ,(4UԾ PKz  O  PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSAShake256.classRJ1=quhPƂfD2fBmgd*tSQbRH-h&&yz~xuXj뜠?Uaph`tN"vVEy3Ua*BF:A'-/BISp:	Aq?Y7,
(KDwY*agW\zx)ZMDǩTEP8u%8Zdr00	r()O*|}~lwֻ+=Ce׏b-#i!>
&4L1)Ø6aaD3&F1*Ю2)$H|paLu#:]H.'	ZXh*(δ=[X{sYUh}PK(v  O  PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSAnone.classPJ@=֦S\u1uUJ̢ D
.dSII~n
 ?JTAg{;w_ `h	gBWRӛt$٘:O8ej)Duio$hYXr]`VPFƗ,	TJoE
x8rFia>R<!g%2BB	\۟_6.XvQ)`"VXsb'p8xI5ǒa[ᶩP1PoMa_O9c6&߿+v:&_PKFA    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSA.classRJA}6f2CaIp<=MhgBOGg%QbO\P$`\o_RO[$L$؈T^D78u (Wh,P1-/N	䲀#CD4}|C,<eX%XoǪkЂX2n:4~/9Tt-}(WWB+ɩ4t]	&	
`	^LnBB`V7I`=cb:n7Jn~8WqЍ=uЅČ'f"LHcƆi1Y7SMA7`q,be`r]-d,,{,<"}ܸM7\ecm&VzPK0JB  a  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSA224.classRQOA*G'
*V6)婄ViT^ΐq4wޖ؟/%4s
Ɣ&dofݹq@ґ=fX~F	fVgx?OIHqiFTbeR[A3yOB/"9Mt0XDl2	uc؟ZԾ*R\P.ŅFK$;4*hS,uN%ey.P`(W3	[ɦ`6W~ٔ5{=)W<,bCk,33"XwQ/]`bIh;1%#*e(bv
&(t'f7cD֥3TF'PKvaJP  i  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSA256.classRN1=&&m)z%		}%Uh
jVHytVhyD>^@(TUxF>gf=w׷ PaUkuIq<i*8j0KLKJHqi}TwbeRA#;G_$'_Dr	iw)"	؊eð=5:MQ=*Rt}P.aђ+3=
[J65,8Xt8;(8p?:CZ!@,L6QzƬI?'V\;òy<0̬ffGx梈.<p],aaOBE3}SB?iRğ'=7Ull_
xmrGx=%^'D֥3TF;PK36^u  i  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSA384.classR]kA=fj[[?jCRL"Mj->C
1?˾4URJs/sνܟ. Pbȗ+KuvpRoMO%
Ztdˡfط	Ou'V&MԃIfEHE$	Hq(LHf,PYoJ푐Tapxܕ+"z-<#>ރdCY^%e.a\ɼORy&lԟnل՟{=)WN=akrxl O\܅g.⩋GdXPLǔЏD8'
ah&v2򀭃x6wF/G:ǋvɺtfP
PK(ݗx  i  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSA512.classRMO1}N(l-m8$`5	m҂r
ZnugKH ~b6@Bi$jKy\^] *CR=dѱgo1x(aU\gXOL'XHm4Mx۱2)o͠$!	G&DژD
CaB"b:n3ƱVG*_
Gx$tUhɕaF=?kJ65<s0qPpPt2l}mJu,F<V+0lGFI߫WqC0!Wy"cE	o]xx];)?	~L	HJJ˘!l~<\;Ňs;[2Y,
PK£g  i  PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSASha3_224.classIK1q;VVOP2"x	52ΔL*c饢CB	ｼ<<<X2A{6wBе%C	[&J0-b,_'XTG9u (Wh,+P1-%574!Fﲀ# Og7`9/
j+e@K"bøP'%ZUѵ,_]	$ӤkJxUIpzEI.X:-tY,t[X	6~gHo&R6ג|-g4g(V}5jj禒?οd8w:0
ÉIhуI&laF?:^hc|,b  f5eaY#zNf0;hm$2PKP  u  PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSASha3_256.classIK1q;V^L+eD$1jd)TKE3u:xy!{y/y~yxElcKRotyǅ#DÕ`ZxJ<YAUtDcYi-z!XMS2n.x5`:2P>
4}|B2,,7Z(";5_K.]K_(ՕJr*8MaW/
5ZjBB`wl,dsMɷb6M||s[n~n*Kϊs'Z
Z0gЍ]`FFmb͍|A&81Aχ<bfKΙ]{<Ωq똮cu޾sfM"- 
PK6  u  PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSASha3_384.classJ1}׋V/VAP2(.7#W3FƙI>T| J\	srN`
	Aǖ&;Gn+vJ<YAUtDcYi-z!XMS2n.x5`:2P>
4}|B2,,7Z(";5_K.]K_(ՕJr*8MaW/
5ZjBB`wl,dsMɷb6M||s[n~n*Kϊs'Z
Z0gЍ]`FFmb͍|A&81Aχ<bfKΙ]{<Ωq똮cu޾sfM"- 
PK$  u  PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSASha3_512.classN0zh`AB"%2UBR9."x 
E,*9`K3_ c5;!ؒ{Gq-p%n!F2=!q@PjXCbZr^klԻ^
O<B)߀Gͨ-ʲ&C`K.hEEvu%
Nz*U$?%B'-`Zhai!c&!\SFM$!\q֠*Jn8܉V;hÀ&f(1tcFm8уQ hs#_8{	,ELa0>$Ұsfe<`j3:}sj:똺dܼYHȼPKE  u  PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecNR.classP]KA=}'=/CTOF$j$n=N̎z1
h
H½ws|E>ԧzý*7*5+p/@M0yYru@C
ihpn~{̈]Zmsu"p[	EYzB+ɩ4@	/	Ѵ0e!m%8%|WO^7Կ}WUh9HbAA
q4r6l,pdcJ	6.CY1
s1=#֞a_!?ћ&-dPKn	R    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecNR224.classR]KA=}'=/fOF >!822;Fz1
h, T{Ͻ+"	\ y&	Rw]U+.˅B 
p鎠\
z:lBEgLp2iL\
xˠ5E_Ȗ:T/p6;EY4vVSH}%$p>0;0g!i&8%ln"kjega&M)ou?UXrq(ZIc6Vm8Xu|Z`ʸE""k!
ntOc^,1>!61kmPK$<V    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecNR256.classR]KA=}'=/FB4;Ȉ(Hf;s=2oϯ NK3H}NּRͭ8\	wY:*Cդa/}"~W4@VZfϔ_JZlӲlH_0C'( 8kqA*PENGh%91SJCku3,)i.ds2?6nvv?!\Ab XFKi"cƲ
+6JpC_S
L͢HDxMǼ
176[g3'l`kl>;H PKZd,W    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecNR384.classR]KA=}'=/A`	B #+cϪЏ2B{pϹ˼?(b 5	g2 U{[%pL\8-Cբa?"AO4@Vz	
fϔ_ՀZSZЊlH_0C5 (9ksA{*PEnWh%91WIc
s,)i?]"8&26^vfrtVSU %1	,4摱acՆ5X'H/̇aQ$"k&bF;u`3'lbCl?ѻƏ{H PK=[W    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecNR512.classR[KAFm
E'#Hzf]#V~T4A)s}|0oϯ NK3H}NּRͭ8\	wY*Cդa/}"~W4@VZ'fϔ_JZlӲlH_0C'( 8kqA*PENGh%91SJCku3,)i.ds2?6nvv?!\Ab XFKi"cƲ
+6JpC_S
L͢HDxMǼ
176[g3'l`kl>;H PKj0W    PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecPlainDSARP160.classPMK@}֦Y?n"^*BIs(j)<IȦb^
(qS-RE܅73;3ldDrNPh4ZӲ	h6l\8e0JB	Dve_ՏN+,~cImԜI@PsEvBO>A.4;r$rFVn2	8~R#kiӐנi(_u*A?!?ac"E:d@ǲ#+9+8s䒠eOQ73
"<t0~32XTh(jlAPKEMyH    PK    A             A   org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.classsTǿGY_Pp)jmEivͮI~o8?MvK*&i>$?w ;񃂖	nUЦJ㪑+bNKVByݐSMuVҴWp`V
ԧ*
V!MՖc>GUɂyo:+R~FSӖʦnW#ƜZs4:ɒ9qhӓŲU4ղ2]LgҴ4/\څLCjرAəJ7f;m53L✞fZ*gZZjQ[/p9y]6e+0z2Ep2==;RҎ>i$rvV{]`JnlAyfe\2zIvnBN&u^y0^y-h=}i
e
<FFnʄ[jJ!䖪P(t(\'n_0
2A%\WqXq`׵Tp̘c.F
٩?GKMiI, M@\ !.\ )p+V
\&pW
\%J`@WX/p6
lN %YS`@Vmi=;v
^A!ouNd/W9=&nOB;i
"Og֤|f;wfmkFR~1?9Z־4l6v";ߢ]{d_n˵3bN7N-qhG8c	8"(ц6,`GEqN;JS?=Fوg9_zͮ4>bpjY?Y[N#dF1Oa	_+C	_K%1OkD%~QGvQ.KބlMJτ|LJKJʩH$yʚ4yʋDH6dsN6dsl=QO]~D=zXc=Ck
_+uPVs%ҹk9<SF@+bc\<23:x1OqNF3z7G~t8"a.9<E{i۰/L3ʹ=GwI
1?Cd|$'ța%er|<@J$_#aMV-r||'%{}(9A~H#?"o'?&'O;;ɻ/Ȼ/ɓW=YR%&'oH̑ߑm PK7    PK
      A             3   org/bouncycastle/jcajce/provider/asymmetric/ecgost/PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/ecgost/BCECGOST3410PrivateKey.classZ	|Td&oA@VDfAj.'3qfƪ(~VUReƆ-Z]lk7۪Ey͒M2QCs=s}̋ǟBa,xQ>k]5ܷZzfYtN0KQذ·rek|
̶v5AYشfys	._CӚe
5YW]X4l~ڦ<dPk$olz4D;	%x<ZA=܁HxtD7H0gZԮXtat-7c]³"=`ríRtC1BY#QQ ^יbĆhMD}n2j2^Op}GPd1%[r#bզ
6n:Em
PgwBH6(ƊH7yVVa=7!H,LME|XtEbQsE
C1VP1ȳ4D@\e5F[dOGx[?6zژ쮘)-AP+5^~ìY k_ձe4ے^c&ݲhi&]-+tP[:Rp\9yPiHl]*;%ed0xXƲ&f7k`$LpzM;Mgw#58íޚ?kt[dOΐB!j(J3Sí}:cqggtnV[}*>2N/G	cښ.NKc4՞(-ƤbG
yS#Vz6N3C.kjg>S*>OnkZp<!2 bی&M!O7${"
aZ>UړH{41jh(9wP|)hifh:f!̰s1-؛Vٻ0Wz.3sp,^+2rzKҼ
 2m7b![bygy2
o
^AUX6^= A[]q=9\+gGTG<.Z%jr6Sys+ՒdHqm105F
lwNטҞo3>s`C4a-oH12a-udxrSpAk݀tliqk'2Gcdk"=sfhV^ӣAb>Jk}鎊Oo
52t^/H{$]Jfɻ70ӵk"mQ=3̣rko;Յ.R0Z
+hPШ`VФ`
.VpK4+L:Rp+\*~(lPЪ`M
VRЦ  ]5

b

:lVpt*^us*NR-V7tdr'ɧ.%1ݜAgL>90Ū+9X@d	L̫=?AvvnP+U?fe{ܶbՇ &b˃~BJ@s_slbj))`H0/PB	6dN!+`"3opGv<2xM-81ʳ9)W9Y,'
5T#W
.1*,2ecEvs
4
6Ӽ׬PN\YB]͙(~tjHqa3˲Avptx|.:ډAE#\$}Uq+C
M܆ۚaI[Ks\Q"og]̃pgȥ䴉Kቨ/A}0Sߢ̭Λ5߯<g/V!3	1{0s~a9K#Ǡ#\p;u6^;
k8/vV\b]+evy\>\r|4g!5운l|Do<_-\y	H[^U)sqCٱotm>g?HXyEVK-9샍	>hJ5&+NW5l
qTC-A5Ë

Pa	P-p
84.EP$h/i/kok8
h/w4|DT*Ra&X&P#q|_d@C%~a~a:~a*~a	~\
Bb\~-Q)s;AD\R`:a6"$ohjɊ
B/[VְH8.p @m6uO"nu"bSVj&!͑rcM(~#0V`@xN.Ɨ,.Pn{it4ITY3&
,X*L T%p\ŃT)p@@C4OE4S`G^ţ4YUc4[2O`'hJFAOY5uWlPV\K\jO4\ p@*EL
\,&p=tBW
^+thE*~"*sV\‐ZilVf] ,VEl^M/P-p_3Q#=ih#*ze{WvW{W{0)}8;Ij"8_y,K~_H's?pu1qxq[0D' QVtF(9%Ada%Rr>CFO7i^bZK@~NfKC37Im(JmKFڟ,i>eq̐"AcV6x*]pyȚ
dQ(8!^~S?&o-eF1{(Gſ"?@[_
Rno>H7KyA%-FY9K{NɓGߪt	zQ(ۧ9ovI7).Omv	>kTtwY!bH?!UONCRK-x  ^P4yoMy^,sX[]eЋKq5fZsJ	]Ih_SkXV'y
1B8G%#I$aNJՋD"IJn'[@lX?TJŭHbKt9Ev_Ħ\I.+/x]|n8I'h~j`vVn9WeIZpKuGKֲ`ͭ:Ϻ.O"`{LHn:)h_GQҍx;$}?t=/pHRl..d	\5
"k;JۅsybZyCbza,kM{af32^TdMVחKTWqW[N nDO
z<czN8qlO)xHoccocB(Xɓ.c,	2JIE\g[ts:BOEtnnG.:Ѝǚ'ŝ	zã[vJF~Pqex9EoS|G}F&L/sh]Ee6,KҏY\av~6I?
]t$%(ݖ,mV:dl7o>w7l(}ett/9i#c=Fx4[²PpOsrB(>wHw*[4]S4]'!ᆟ~.#bzJ<ɲ|.n=tY(<Y,'ϞX-L|ʝrʝr3>
aՎqtcemIbn
ϰG4=%I?ړIM1<!=]z%aX`6ܔf[׆[gs}ESƆXl$w)1ȳHY$A(VaO?<sL۔&IXW8X|I>
{3杄Fv,#5oMkgAc8wzv
/'QƭWjݚiwz4TDs"g(5	CC'=mM-c@5JoK%	i~e@u򪿗;"[>]EUyߴnwSY^UcW{ڈE\l,AnkFf_J/PK(X  1  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ecgost/BCECGOST3410PublicKey.classZ	`~{<9LC8lF+``J|cC["Ȓ#7m\MHs4$=L n7vwnn}ݖ
}oftɲfdy193Q"`)-h&`--;T+`+=TC6!0Ը۳gVOS\Һ~CZqмn	h_qZ:(P=w >_(دp6@1lU}<
ިjXT}NSMG>c %dk;QIӥWG|7Qj8BnH.v>oOw0VH
C0)F&%V%y/E=
{}ځʂ¡~aV5]]W;
wt3
ϤOCCZ!C]$>.5U;)j47B=^0xyzz40Rx.Ȯ'-}B:Ax7SPKVzߣG
af#:^PO0}>I)񃴦[gA/F#;jXwGB=3ҧ":gbS<a.o쟗>25WפEevW
3yukV[6vBPJlQo䨛K6o^{]Twҧjp$f\{-Q:2*Ǯ5EKŀ7rHcbL<E	no&ףiDE)qKHDUR`6EpUj7k6Q}}._
SW;/K2(g JHщJ̈?3py7F\5-Uh,Tq	,gf*#`21y[7=XaNnadyCdʎW}d̩oa1_+='xt?3ݷ,umu--֥+2-KryvJxWM jtb_?)Oңi\&[
؎|""LV
us>.Zw
y* q?=9MIWut]ح
ļefSҪsuF)s`H)uҘZmŭ$,2K6f2mʂqyb)4҉˲v\@]IQ'n|+ff޾ u$]evoBPֶ(B7F'2g?7<3#C'*%JLi6IR?7M]pHD}xw|(fI+#n	H QBf	J'EB$.CA	$|DG%|La	IJ8"'S*KBI8.! GBPBHB%%D$D%Q_?JW\}&,t/?"4<IwMdJ!	KK3v[3޲F1~|3GK'2bCnN'1bu$QzwƵcȻ_jLMK3$w5+Eڞ+2JG5eY23ٓNJkRd{ K$ugjЈiCi6Mi.*2oیmLL/#6g^&L4fPiJku]DV,ʜ\h4}<׍U9ԏiNiR<&S3S"Ji&bެ"89)Sa?g=f g;.fD61iڴlcI)\Mͣ;>Q<{LB3zzL+gmԤ~kOO{3ucVwSrspZ} HܚЇ9ELތAG~ako$^ϭT6
?tR#Y.XgN/[Ui#94O?&291ZŴ#!W!2}W f*(7,
ܸ`b
bDA
Vê`7|,`p0]A%O0CRp
7,/)Xwɐ,5p]&j>_Vp;~Evux_A-C)~MmN]o)wone)X+`PSp~_
2*K?T0`Wl_(،_~ÿQ`I|3+MA9?xf'Lc+V.'?eu!d|VfxDHd<&x\d<!SƓʠ08dy1,fXʰ[b22e</d_+e f8+63qN`a'GKv2^V1lc(hq^lo(fϰar;hɰV&0,d(aXPΰGj]u{fh`h%qC/R_nC+4

BC%1^oC!C)*Ha^[bL|Y2T1l(Sb6"%V+tcW*Z^ox<᫰ӹ@!ç
NՀמT'z.];>q9G\o+mWD?[V~"BnB:,*]HLcQ\p #	"%QHDW]4V/_gxZ9]a_ ⪈	4jԕ$9b͘
[LUk8TIBC8y ޔ0*@y<zEL<VmuXX^6\2|q<,gUޕ7p>ͦڜNaLwVn!,H.H8#5
US?
%USuS{!*uGq
M2k(ʧMB9<I}Y43xcȈ'[S5]0淴dJ$U[ 1D/6PQq&yRLs?xC=q{
7bVuu̱G
U[j_ms,Ru^TrbZTRl\ʃhS[?-Y,0q;vJA,NNWKND)&v=.qJW;Uv!pH7K/PPE-
|JF`ECH,	oP`SOe	ϑ j;Ϧ?YƲeN^bZ# _Θx8q,5PIˢeDҙ87ՎQ',.Rzv|1r_zZhRԘq9T'YT\OQqYDTMF#
b".^&w'ܽ֛X#ٟZ`,yI)x+ZPk*u%ݢXVTB.vO\xjel8勋md,q(i`	'zy%d
u&oKv,*l^旸xn8)Q@4Ԇ<<F({{4\B]d6^0G+ctQE$45=4/#SD_S|?90~:.^Jq-Z看P	$ S
yM8z	מ"xo*`_Cs.E1C<k7ܬ-w$iX^0]NMȗ2I\a6\ϡk8sLcqox!cp;">8?RN|.&>b+4=郊nJu<@i|83މvL +PK"o  ,  PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyAgreementSpi$1.classRkSA6M&}մ9E*xPPm^6M47$??JJ)[=|3|3?~xG/5@ln,
$SY\@zM\C;W'Mhx|.V!$Z5ɩws3$/UXL&ђtB:DdjoNy3ő	g5ڡ:uXh-G)>7>ygiwp٩N7~GuVWd+.ˤ5A*UxNkHJ p+Ai*&#P!ő
$֒*
EXy<fJ FUFl2c!c1c;q+|Z+ty-IV,d7lYfTpmM&'_PK<    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyAgreementSpi$ECVKO.classPN1=/Ttc,,DvHX`HX֡@d>$~e 1Mͽ {%0nۻ.A
:=ZH?6N}LHY8ri'%HDtRor?>3ň+t4rO~-3A$9yJ7i7JwNhZȠK\2ŕ3#BygqEV.\(`E%8AQJ	ӚkcVC6;A־rDpK/G8x]3-6 PKi!@  O  PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyAgreementSpi.classVwGȴ<6%1c0ɮ-P06bhF\{$#{+		̋[?#DiIӫ:ꫪ`惐XDcw.ZCfl˜Mq{g9BY;n%4m;=zZs԰L<ö$l𹐖p8Or9p7$)d^Q抶cm'mJM!rc#vH3cx7-=!7JَꄭdEKEf]3ym/i0y|/y۠,'E#$I1nGɭ<hέa<2#hG	w&~1fi(eK\ধLC_ʔ殫%hFUǌdY:!c&OP\%>jY	5bj.X[\<T6WVĚDsh/	ʗӆl9.Ӕ95jRAy-Tb
U"ӴTƥkEYy)K914+n'%/e)hYªAE8?wxZB$);ms:\\G=G='jy<H*ug.jHNi
l_NM%={9\ϝKy*o7RbN({?4,a_];s5سwRGhbJ֦]7qp]=KL߆)R,K~{n/r3Si0~:F@6#4Hع_GX:hqՠq5/-j-W)^̳*ؕtMj7=NgL]maN.na;C?fxA={z1<0O~k85T!B;*oq6e
]>`'5*OZ-m<^Gw|U4j[vϗE^<N-vSdȃG[Koު(vUCb)w|{N}"Ul/ ێX~%8/!lj`ԪR5U 9U-CQ.Zho㠶+8
d܉
8`?kZFn4)gl$*AS6$l%Rp/Pp# Y8+0AiAYCaZ^qxNyE`<
;2N2K2}YehxCWe KzvG8BfQ=O/k}fXKզLNL%xU'G	O$idPOB'4+h4;aco;q^0A{}CӘ	_u#Xi\O$?-kw]*!%:n`"1V.*-ƺ_u\Ug$L2<޼m{&9#͌6w52^«R	QQ&`dI 2%=FHs9a9;_Qtt Eh^^G@X8}iB;gp<1/Ħ }fwR6=hIR81F5HMRΨz\iCQGcs8Ck3x?0sqdh&ۛYvP4Z65^Qdx<]_ǗQ05EN>hq4cun
?E vdT(5dS-h?PKw
C    PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyFactorySpi.classWw`QM_QҤ8:hCrPG%Ŕ*nBDC"m}mz7]mI9lG~	dXi;,[Ʈn1$""	g3̾U=gZNkV4BW0LyRd|ű쌀j*iنs-g,c,GLF7F,sMX^ӫ90=n"kDIԧtSUG5z_-喝zc{y[5) iџ˩z滒urRw*[MݲԜ'voN4Kph !@'ˎgxm+\|Փ#c1;q9ۺ:=Fv,5'm۷a)ى뚞qˤޔj&XJ͒CUO±
3%;յ 55e,Ѧjc(jzVUOAV8]?,Ky=x Pu|'ri=OAN*VuRfe,132kN|+<0elK
X\@̪U[˖맇SrVbB":8oxÌM]tFmC>)Y4E83hl"65
;媦S&NcoC@cHmd"v=y۩t
.I׏]Ln_39ܑ
CPvJS-k%
[۱Eă"xHD"PDqR"N8-="D<.bT@dzEIvO]ϲ{`$F/<ӪsM8]IWPmVoP7P3hm\	Z#'$%m8ƚfЀsf	:l7񠵚-,Ӵv&;1Bjr;+loH8Zj죛/0mT7X2Mj+֭iOD%4sdB35rǚ[e9$
:R)~hLKM
.;YYx~1яlZj9BŠ5AJkURu­MAd<l1/;e$I\f32d2,y^|@A|W!*^,rKqdͲ0؇MI
[x[62Ñ\߉p>*af(
	I|F9|^B^|Ny|g|I4>l-aIg56_g.ab]6g	6_ЅH"`3Hߣ1k>p"6ٕpTm/KZD^z
,ƫ. '<,B줧	wu\zz3o
oP	ybW6n7
UG{CؼBohC[1;ܷ!}_qWF_&n>Ru<}u7Q,u!D]qO|'|]޿xPnP1tmsg\<8d 酏ʩZTBt!Qįn!dhtcw	h;]Eq\vtPU
ш04"C2yKz;KZr`_ _=ա~So/Dnz+?lG\%](alwH(E֖	qpUY~W/j^sݡ(PK%  A  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyPairGeneratorSpi.classX	XTPAI$a G㒈I\@MotI4m0F좭ݷ$MKLҜf 0:{yg{3F\DN:Ӊ]U>w8*5̽Q7tfoK_㮶feڰUîFª
b	]
[@mli߹zͪԋEj0
fo?YP48¦7&_[Ca
85V#$ ]a?Z@3[|:֓xjDyQcCJ)M7-bZ53Aun@9xxC$,vԭB%k	-n-ikX$)"{RskU!VҮqD_Z0owp\AT'&)`Pv,o>׬	,h7ú4Ճ/i>L^i#?JArεS.*|:g*Kҧ$j:Cd@{2}j'2Uu^*`H[/?"kWP9hX
j+h0%hD&qdy]ξ;xBQ?W#fPcyUKW7}ݚa=:amvfxCgrKrYv[[dyv=,8=	p?1uW©,e؉[[KΊl
1ջyeO!ynIuyE8gz3*)d[ARnM~i$)}~CE1Φh@(bzSrF`r+}@ϖEM=HZF&5s;]Kj
hلXlx/lŖ23k?gU0\5sB*'YjJVS]iu.:ê"gqn'q
.?{6B%:+ZK	VHHX)a$FZ	$\/N	7JI6JEB	^	$lEB|I.I	t5Ma:1;h~8DkLo:VHu9%(ޘ)|.NVV5],h5L*_+i6÷<}sUf8[]!nW2_.I59A~kc
bIL	|VԚʜB̫\?dLڜz4l|2`V,v;`yߒeÚj+37h&co*
$umH:%lK*rWFQ^Y=js9RqNgnR#f~~2n-Y+izծ]4rti®^<Rl+KdaV+2#yd?Syi/^2?8~^·'/#nY[v+h|n,PP
J1๸C%xP)N(RP	YA^jܩ/QTRkve
\Kx+p%.ūT
2\0k\ױ+(6ޤxf}x+P#<;N.=ex00|Cf(G`c2S2:p8ç>VEb]3c18e>p~2zY 3ŷd>q _a÷+#2|2Ke<_cA(1Qvwߓ1
CC&q;>Y0pxClA(i7UNaB HPeTRHEfT]H5hTwHHX![
X.ǯbcxcx]'}w:bT6H =׹/g| n'D(7β8~yI<;BJN]m!IK/YVa[B\>J'ivącT84/Չu6&ӳy8Ύ1rQznlT,#5]#CjjjcQQXpGܺ
GE!QGo:ϠgHz2
!54ј(n&ڸPiݏehOH*zNd;qƱ
'e1<^}L
#Sf'T,ޒҧ I|ϢmR>;({1J"+ꘐkOX2\2EY-pXXcße2:=:k+h5OՒ'=Eq<#)x)j/O> &HC9le"`1:L@ߪu}0TG^!ŜqYAhXڊBvq>9!%HF՚Y `	PK"nDe	  S  PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/ecgost/SignatureSpi.classWk[~WZ1;(MˀYKع0qTC-c]VX,VEi=iMZަ-$&7nCJgvW'3sμ:gf8G3=QNL{9upjHCkII$Ee!J4y0
i	!94u^sg!#6]I	4:⼘۶V֋VYBܤb4Ila&OgӚsIț&w9#"5L yg{5[.	ՅT®F!A[}iRɒ'	m5En3媹sɒ,h<'! <LX9U!nE;R3嬹%'.w%t9Utmc%쩮vqge1[*a{zf?bwx鸚PN6yudQkEjlq9hV1KDD:uʻ=me5m.h#Gԩvԅ\R-A
 Yːphb˺j9ZWuG?;㺛q5f*?fK`ڜ)nxH'.[nQ6YnwtF IG=3p@EF
Q<goգ[ҺdK|u8plp<נ2ks:W-`M;P	QzpN]=!L>k(	$<5+	sՠgh:rWW-ѕ <jCʰ2YéZ*C-U9(	Q<!Jclgp!pC?paQc>O0`8$SO3<pJBwfm"&Tztdw`2%Fxb`!_|nojy^+-_v,7q%qpyJ<)-6][O}dyY56ڡ\*2l7hNIH71Q7qHr6ٛ-ݬoY=I~H
v@W0vp@AD E #`b!`b+8!+x
ż0Y
WGQR$mEAʂC_vg2 _aTc1wc$fx%b6oc$'^l/q_c䛂|' /	%A"WKq>'4_󿉫]a=jQͺM8%
B,!QUHDJit,'=4hzxnBxWɈPzd'zǧ#{]1b5-{W{	OowĭV1:.-w{k+3Zo&ųGp@M+c^8mNA͠ŧ(~M49Z[W19'皂*  N܃LS5޻^	*<uUc<ĉ
n+DrK3;ь^a\j;u'*ҼFU_
QGn!#HutזLDmp	\Σ$N>Z&Lhe_$в1ɾ[2ߥxܧp?v%v'X_Dۼ{-(A	Jml_;G#aʴ-IRn?**2rB^Ədf	;N"HCH\e<J^]'6\ߚ$(筃zTIlg'CxnpL`n`!Y ;`~[i<$kQqV`}L]nK`=tdoTaFPKxI^    PK
      A             5   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/BCECGOST3410_2012PrivateKey.classZ	xTIf^fJ4,
b($$̂D-Gę$֖jnպ*bŭf[]bm{o$o}o~w;s=s'YPP>o^J(,*^gY4F"!|ƆeW.^ol`%+	jk56:g3*fΪ V-n%r_qaMӤꆚ+kjO	܁pK47J=tm‮j#xdCH"-&Fj1=U4WDCfSi	ÛR47nجjշgR.-hr
BmfIqiqBYD1&mz,ԫ;t)lE[X-8aܬ,浅6?WυZHoG%xIܨnIl"iYKOU,&v8Ak[8᎚)66kl77FcYfJZEXc4q}E hT#q=	t.n({"l(%=:.Q1kz\VcY6{xZt6t-fRvWܔR Czhvq ܮYրac=[h3JKzܳLB{
E4Mu41Ӓeapi"TÛFj^+rϪX_1gn9a#aM54rżP<́_(7njmz(!z3⏴MzLN9خg
N4ÁH&r,%	bAHKϮQF&_uѵq3lҵ-3zٙsM'J1&Q!^aвhŷzXYM
fsSMcNCyf?rRG=^lqd8$jF<gODC{8LsFsɂ6=2WN?_+}FgǏڶ#)^^B8۞pۜ|阓q~ڍ}N/|̛[(N@<熧(ͫvV"ؾ6#%D[Hྻۛ'cle}	MbѸḰ[>,iEIA>5ķhycOJPU᫮ɸzt7$\:
Fb
p`59)ݬ!,P 'kC-|vl,ĸ!a;0j&5S!>m`y47mjcIp-ue{Sr}^`WAk]e}H2rgɈ8(ĵ
8-RNe GVESw-s<_iH$Bb[zXw.==Sq|qxJԣb=()[%3kLW-PmmiWd&3P\aE(Q0B
)XI*\`KUpu
>
>`lPTЬ@SQAM
B
6+آ UADATA
lUpm
:\
>*WpOs]g亁1&;.w<}
0VU9((XĊ""
,ƗBoޠU>wΒGrK{IdrT?c/-M|s+_Wۏ򺼞fqטtrYOD[c)ӏTqDgs}C/SLsd|:_R^εp7zH`5Kw19z4m/3sCvJqrxS,'}uH:SlMuivʎ~.W
؅e; ]ЯPr]NN|ޢC^aPvi_x]5(y+{I+f-\Ġ]5HNk.mբr S_[7 .EkwBBo˘v9c9#e5HXsR:R8:jJP{
6^j/e#ۿFPnK{eGtV̵!?d؝<7{fMW䳜m?p"IO
0\Nn1\H|Kũx^8|[5]uC=
^R1g	,^		QAQ`:*X*p.EŧQZ|_-	I9nX&'"*Y'p@2s*U>JE9~Lb1~Z`^WI7PU,d*n8R1Vo_B7i񶊳O!QxG08難䘊x_jU|V**\rH@P)PSX\4DE)
hJ*a4\FHm$BT|FKs@ntn$T	8C`ߤizp;M8σ;t_f3(8G`<<,PNKK{pUx 
,z -hf	<x.a*QcQJFM"V{U4,U`h@؃'Q
v>.X#!mu5
z=..U	|û0SJ`_R<+${iOS&>.IOy4>*p5<#{X(P/EՃ1EӃAhz|ڃòa!>,ću<xnX*Ӛb|
MЛ5M%C&=Rh34!;P,(9J 8yph4'.q(9Z%Li"R9a:Cj\vӗ#3k.I?b_ZUL{u
RHzR1#(K+>CaY\)gtBI}w4'߉"/YӐcc	'8:$O%ښZʔ\B`nn0_:)owt)oꢛK~'tʟ_T:Ӥ?JRg~*#O9Y[꒎%wRD	J7o--
g$
Me2,C2y
Q8
ZJl)}ҳKwB4ϠwXLc}ټ\Q&,9-nC-{oO;
ܬq˧tpc~</LOғ	xfvu%iOi`Cdp
Z)ulE.ß%t%PZu7Ne	w-4:w7|fIV*<#JICxi=EwQ&N\ŷhV:KGQ%L^xA=".K/\q^H|X@8vbE-VhIs).j
*A/=Ұ#?l2Æʤuq)A=P}\C
*8>#COP&a7:.V߭A{EccȄbl世NwYjFz./FKp0v$NJa'
NvgUTR	g#`Ѹg*9F+&W}x|>Z;]><MiH|1Aݻ*)n<C;qԞšO_ab><6MVa7nzp7"	GM:;CbtӷB"brݗ?=,ob4Mҟv]70%(6IwY	T*6J7}Vn8ት+boV*闾gEe7qJ}CHvqq]Ew=	a*:Uq1'ş[p{(8αw0i(
`瓰}Ƚ\TC6qٽ_[Gϣk?5'I*s]]ewiF.+ѮsV]od0TV{[ߘrxb
7$aWZ<'PxfX<c
wpc(0&Ǡ67?0kxu9yxi|
;U͢fm$_)1ܴHFY	IKTc?sLvJ$pw$$nEΒ2w
['F4gn7 y;M{zvW
&;1[q뵄ñӚ4(pd\%@St$y
A{
	؞Zt,R	ABsڢ,e:Qw$gȮ|vNbz/O$Nz'Fv[%X_&KPKq,B  }3  PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/BCECGOST3410_2012PublicKey.classZ	|Ta	0I HH̂$,0LnLRkT[j*Xb (B-}*s-L#o;||9;;zrP ^55<t|mj6oڶu}k}sM-˖/-XZ^! 6(ۚjlki@Rv.Yt-bg0Ӻ
y>i
jS"`j{CpKaKQHh&#s]cKO_۪zڛW47ŜA
<ջwC%א6MF[<!O0K| twzot;Z	)P(*bd/YأoUxRZj4w_Dީj;:h`=y͜Qx&q944Q6A!c<|nP5KmO:հڢTv{|d㙲[CF4_.|мĠW?:AGri~c065màcؠ0><jLJܐt=k`lT-lGs]
и	Sa3NhG#%O%bM44iQhxbW
9]pW-L_[Qp)SR`A==v5fB!&+8G,Ǖ^ҹr˶{d/o;Uu'pfj-6Ե^-iP_{Z'n
ړd/Hjǿ>ۭ$Q,/$MnS}aM%S]_g}@S;٫aK&Ţv&edar?&Hu4D1)Q#fuxWݞpܽƧlJk>?r2øebu4КjCa+	݉E~H_ lZazT|<Qs4;WUV$+3e)|q.n={s|2?$cr\m6=aN(既[>KGHn>z:H`_7yݪ^y6a}x$j>?b 9MIWu혬Tu:[q>Zϩ#®H*Ш/(rJ2`H%uܘ}V_YddRheF<LÞ3O Su~_хazOOFcIxS5Kr(.Sqo#İj| ՄL~`h(s` T-L[	ysteߛ?ۻ y9P$L(IB-UBV	$lCN	mvI-c>.H+#av		$$p@_B	wIIK$J8(ᐄ$|>4>V0v@d
?D^<DTA&u#ǓcH¼j<;8ArSL+*n^䂢Ln9k#I̘a5%rmN6>[vE
:
cyڼDxVJsaQ%.xcRKY\2*EBT,ߪdD-PVqbEZ!
PbZΠ5~g+n'ToxYjncaXu'Y2>j+tKʬ4Jد6bGJF'K~[,`8{vY2FHS,zXJKGs*¸'>gz
(95VBƢ^e#o|~#_j!6}Fw	-jn,'nˬhbqUv_}f52:;U")tKetF	|gFK@eD
8Wfb#n
ߐi/9C;?;_uOePx7&c'?j㹷GPnmKu<I՞Q-d;*I8{+SC6o\+{/D_(L%:*Ȱvzw05\V0
3l`h``S0ɰve3|AC=~|G<|W-xSR0o+Xk
*e,&|_Z@A~?Vp~`
~~fX0`~_2sKG3//2e()`!C1BA9C5<%koL)_3Gg*XP0
s`:f3SIruac38$\9g`bfcPr a1a/isd<"
e<*xL$bDNE2IJZe|E1d<)fxJ8!*d<-fX&1K&'E9C#Cϊ2%e<'JV0,X)y	/
2Nn2p3,e*-2t*a+Cv>&㛢2Ί[e|K)<+t:
gγB|=2^32E:]2-2L1cfbC+/	Jy6O&л_žߔ󟩴hFO
<l<s6ߟ!~ J#zr
G9I-eAlr?%VϢ5 B)r"\]>n;/Nn__c!?2%uXHy43Eh|$*^<gĳEBԿ^"QvjH"oc7zSWt4F)Fŷ
.TKM:u	ax3"cޢ^D\-Wp,6Bp*Јl	g$\HSJ?I;=P4"FJH*^<NXe'}N9_]MN[Dg
jwvm@*KnvIpLi&仦G`ӕlM{#,3NKeA'qYI]2f*&Ogl,&g 'Ɉ88 9wLFA'otI|O}{IzI#6aAncP~BLcl~C>hD|G:D}WtxmJր
V+E{D=)a/ptUJik9U9ΜlV[[x9N(m_ʃ^K\?Q y?"E\gnDDd̝|yDND\D
B[ݙ,t+^dxe@\/SPͧ!O>DC'I8!)	]GL	P }|yi$]K__7mS*UAmGwG>b>'tqJѽNx]-JMvpܻW9
1Uly1 Џu՝Dzl0<?ƮED|**Q6[ǌOMQqd{U N9x9m2t3IYU93;V8ȳr]Nr?l@2gSxm϶9s4gڜXc?*Y+щE[ڏ@
CTI+7gO ޅZ
>"xn9R'/gRU*%U ́v_s
=p:.\;DtTٳ+9'1dUbk/pp`9(~ȃ}Ŵud!j}}1]_Ɠ<.q'*Μngɓg1aL0&$ewϙݔIO,>p̆sJ3Yۺ_S$O"ңpSr4Ps1xőgixXT$ƍHoYEcj1ʒ8s%WpԠ4v8׎աgtDvl|<d^WӰat!=k>
r&^hj3ꦟ<0/*{Vď	E{_"WLnM `	\D$XO]nۨıg)i$5MyMsl8g~TRތXƛPKxS
zW',Ḏ2
j>rϝkL~PKp  r/  PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/ECGOST2012SignatureSpi256.classWWF1M`GnDFXLiP4CufDtII%ci钴vkxiOfFH@޽߽}.g8ġ G F򡗯jqgx3{\[ⓄkbieN*TWK'tyB6%=)cMSɫF6O	dzڞХ*nFZ,aϲGN'϶vwtvv?L"eS`)EMW2CMg'}GSe63-
EA+J&ֻe(1FMkdFrf
f)!O*sٔbⲰ4
3"@RvrV"yYmӌP S<aDFS
wɂWuif;x&WhNki-[U:Z&ua7)%3yNd=7lFmTupL6eƻ5Cbj|<)-Ea]SydR
TYMy1&#&%"Tu],0	#yU+ΨV|T_rxbv"t[M.w?Ob	}p%"U69Xam=xl#ZqDюF{#,o4+cgݱ@_1hzymi {^
w^e<+xp'mdZUUϚƜb&Ciò;:}%Oe-}#ytqW
4oe7q9;GU,Y\kN**pZ,Ϊ`zI#bu5E6z]d44)zsOa]	$%K)KQ	OK8&	J8.ᄄ$|B>)	=z%I0 EM>anWѳn7R=2Xv:i{w}g-lp`XL'6h25[:5w N94U-֋,Sl$gpaC3ݔȇk(gʷ6ýO$/'UR*zeUz]s7`2͟TY*6fǆ3P*"ZZuZWM#:C';eƌq:8ɓd|A`=KY)d8oVF'`h-r2bNF chd</"xuR*'_5N7BC~ $ɷ9ng9ox#12"~%$WB<?
_+Nh6_ެ8~ɏ9y->9'{E/B}p??'_3CJ2a8D[/D	f1wF3ƜQ'zVk^wkͷq-YU<wp4D4$[Dq2 +-oqih
Su^ Inӫ8; ,ZE%ʍ҅t-+X@o	[aLC$\
@|8CQNQݍÆ#WpG9BBhxm<hhM#F|ź>˞zV:k:b< 54;Aؿ8'8-nE*:c w]>xWÁ)[oSLJZŵHbBLn!-7V1:Fx؇qX6Qf5RN;ݸ\j5`DXxW)kcNba Ij11L2lE/Sj8-,a:NmQȰG3tyZtM:MsZNhg|KxwLz:4nz&=8}Os.iVӌ{i~ 
}5ųAB?Wv,?PK17J  D  PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/ECGOST2012SignatureSpi512.classWwFy<6a6D%7	iE`bƣgylyFniK/@KB?pJ{3Zlvｻ{{{ݻ A`:*AC/_UEbx3{\[ᓸy0
9	}x6f5g*kR>!aɜ̤5維t+23LI5Ӵt+eYa˰aFN'ζvwtvwtFFd6E4R,P`ICd'sF4[eWcLRuq0A;IUd2ۘ%ֹ;TΌ̙ٹLƲW]$5
gmّ$4̔Ysl9,&!yJp Hza]^{PbN3aBLڝ^Mu4S'LӮE)n*_wғ/w-:$ee\a&OY
gxdSbRI8,Yنy-m$)}uJ"@*1>J"ch^ˊ̴$qCKhTl3e4iY#ѳS}i;$3c*\n&椵&E"69Tf۹c=f
a8]::.r4.y,3ɲlnz
[aj۶6m
g*ߕWr0G{»ԆLumZgmIfS8ĘNGgI [Χ?GwUܢyK9Hs4H8R:3w	$YQL	ɈǤfYF]WM䬸nP%X	JLwSwt;RЪMALA
SQO)xZ3
+8YS𜂏+x^A^}
(xABOUF>[F*GK^&D˹ߟW/¦ Gtz)&SSCzԊLo!n(f^a=gd]7D]C=ܴؕ}}"^%ʞTrez_+(qTuߋl~Nllbe%+۬J[@8+fh%$jj]#ghTE3jU9V3*C@NjP$'O@QIN*/UYQ*>KEG1bUeCxEE>Ǖ?I|AŇEƗv W92'qN§!$5NwB8y7B/Bx.!\Cp%	9UfSy5j㇜U:'ۜ|7E裯_ga@(I8>3ejiôy".@`^>
bl
#OmZ"5z~W2^
N"'6y 2>.
- ڼ%h]V8HۮΎK%y	,uB\t7VFm\bŏ[m=&o-1#Rp)">
' >E:eqtK
G$AkeEG	A>Tx!?^4.GjU*bWꪧG77\]!(	*qSyW0=?ڝO죺;r,@8ﺂ4𬯆w^@8L9aٵŵLrBLn!-70:FxkGiǛ^v(*I߰;4yDj>Wb<0=0^+g~;75_P"O9AĘfYH"y\)yB0]ŪEtU3l-E"QMKYZÙz2~s;ad<ZAI7=Y#r_K4+jMiƼ6=~>%ZD٠OϔPK t  =  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyAgreementSpi$1.classR]kSA=&M[5ܨ"
>7nv&7ER
1;gvv朙aK<XeZdsciT @JX͕gą<sU;Z|4Y}syfV/
 9jIN!yb2荖sorO4!OF*h:{<Wy.Pf;TGZ8Gfv	gۼ
v+F}RgqErL]vW=^4uHPA&nV
ܐցՅ
Ck
"~<bJB #k>یw{XeL{α{r
X5K$kb[o3
Z;v.3*Ƕ&ڸ^6/PK5     PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyAgreementSpi$ECVKO256.classP]KA=f_ZkȸՃZL밌l~@?*5%8w.{ϯ $HϺ ߨ=;\˖]/ʾt9T0ԑ$)s%cQ6w:2.WKL}Q a6t8H*\RR8;˦Mw&?Ɯ.lX72`H[q~\TbkȦҎj,/n:b{EEklFe"&Ml` Y E}<.k#W8BV7Fgi1RsdLo7C~am8h( 
PKMT  k  PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyAgreementSpi$ECVKO512.classP]KA=f_ZkȸփVL밬L~@?*5%8w.w=4Y u	OE*eMP	&ՈS''ʧ
8s]l߮Z8sT.e~$ӷŀ9ttSod8sxKeٴ_#x5[:Rib+ޏZ,l	vpk$
xS<_aTj	EvL6]dpAQGLJ.qޥq_wHP8ϑ929rd%@k7PKN1T  k  PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyAgreementSpi.classVWW
_ Z[hBXPnF4n`#Lfҙ	J}{kǞSSK{N?Q{$$pwww_;99P N	!]BeNF8{G8B;n%4j;=xHsְL<ö$
񉐖p8Or9p7$*d^AI璺uJXz๋C;hIq
Tv<P&+瑴Jq(պfiSxgZ3$cCa2M"ĸp⪌Q2ac'w	s+aX{6y0o9%S#&	qt M?Qh*>AcF2e,}!e#Eb)b(ڸP#撂LQi&Ohf#]E
1ϡ$\;Օ6̸pŧ\OS&Ԩ5Nw2Pڒ"VOl?7f
@:eb6%&>.͊I	n|cp՘'юBE8?:0*vꈝ	&Wug"jHNqV[bٻcU;݉$wz"%jB&
({vI'rX\M9Ajy#U'lkmS"=m6<VHRWBͭ"?m훮6	їSnv6/ZGOd-6,$[+R%jX3|vJhBɩ^Js)mR/U7w={~LeaX˰a=CC=CAehaafngpÝw1Mw!w7	mXP(vR33$USW_ʂ4Kcn[߼~1EGg.EnkOڎQl*y%/f/{AC4VQ~vbs+ZESzei	P*Qq[vZ'KesY~w1\BX\DP` .
q[LA܄ =tQ"Z[CA-+c
n`%`+)7!u*0  22xLv<%cIxX'xQFO}xN~<+cˤ^q x /x/@x^;N`a
T %jn.Dnm0(2F+֥S

XB{*4
x=8 ``2_ƟiM=¼2x
oDIp;OysTb-LY</x)'q$o	LP8jRVVpu`
_NOSn%D~AT"aa7Do~()kbw./0>3~I?PxOr}CKpBx4x_ž-0Il,fp$$^>Oc }6O3H$)՜:g}a1bTyG(ۊ|,&W7RiZކe =FPtS..*H>>;	>oNd(0
j,YSSN.˞"G?WKQ
OPK/F  d  PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyFactorySpi.classW[,^ֱ-m80k!NdA` ;%nKe]ewELJz'}E8qm_g$tːcyyffWW Ŀ[ڊ8!㸌^xTX0:lpMIؖgJh
u^u^Hhyز-	;cC'cɄZT5kھ5gnmi&pEw,N%i 2NX9lڦk-C
}f&i|WA?a.9դ^@d'agD0$4nƌx*M8O.Eu	I7z8KVK80!AɑeS[Ӿ>5'\LQOt_x:ΠPKb.<+a3IsuU.I|3/hLcS 6	-=:fw-;XYӕpHx8,iq{)4%|c(%LwN7LOEpNܜ)yeD9\UɁjG`L1vqKi#c/γr܄6dlc=?ijgi}c37EBgmpzq{Α[{im#Jɵ&2LWdnx۳ksQvW1ajiY~R*eRipH4>.Me1k"o︔I2"gV<eX=%VsV)7izHp%#b%*V
7
Iy/؊mL\^<2)KF>a8)_)xPi3zF6_o%İ74RM:fuHeO%P_"V"N.+,Uқ!=u&@(Tgڄ?Ճ^@-\mϱ5AΧ,Z4F_NֳR[k٪Wju"Uڄ,;' ;RTk_D#*u+k&ƙ*G[FLl͉Α7	
΄jw4 h`,8Te]n6ɤE_SF!RwHv&{1~^ 7_wLd8#T
vBLVuWMEQ67t9C0#,PqQEx;)ᝬRqVV\Rсw,ޣ**CgocцYoɣ9w#.\fabAxaVe
G-؋gUx?l>`UD!ae_QpWf|C8>'YϰQ|Y,+ç38k,I|ŷX|L9_RЂvba('oy|~8GY%l;&|X8'g,VH|Y$_nzJlKXa/KWtzͫ2.veu77	p`S4;ل*_\Ǐo
Wn2'c}+ܷZwa5ߓe~Y<[ë^/ev[xHwy2ޖ
y'?5HchCAmf9|?Iӎw8}]V egMY,I*<:GQZs8-YnT\Nfr 	!q}cJOhe142!,7rm||9$kUf+(kPYveSNeq5mYσ
V,~rsmTSv
S/eSo6n:~_C4h~@eȁ4]oAS1*PK^z    PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyPairGeneratorSpi.classX	TTPAM dT$!@
m9<Lf`tK%}	mQivi{mMo6s9o}C ։j;Jcuv\oN;رWYdNbokuC7(lmjѾi{SkU[<GT3rZ-֎kլ]SS+ ȇ#P}n5W_H_Ktk65IC3|q綈꧑xQ	>lhmڼ{ҋǯI"N|+fݧMMfǶx~ݫ*oh h#-kFdJ
%NFȩG#h
hBz?M2/nr, շ:4N
uaUSU+ng:BWR9a E?گs'~yz|änݫY0CX9VX_TݠSk8y#DwOlJʝfjqnWT%pdjr#ADpPca[9diiF܊rB]&/RjJ#;I
i!zM0݁aӯհQR}@M=au^MtacmA"ɪzop0nr$Βwo
PHz`JRvL	
_rVLgeu6Tڼ:׺&E,YzuyU<gG:iVR<	u&Zcv-dJᰩ=jt#KmYx^MשF$ܚYMN}I	^$ɉl 1i	VຼnK{"^j'ӷN'8
%6Sn*Ev5̮N9S	g.,LɀEFz!"mta3D7f y͍!X49T%:"Z~	5j%Nz	up
%lp$(a		%lUBm$$f	n"UBIh!a@YsﶍeOh֜sU
:[|:e4'W.Il	0YќqɡFS9[xETʝ7M9睃9MS-{]>ߴƕ:]V"$6v:JGH\A?=OpP
S8K)sF.sNVO͒O6Xrn*Y+쭟-xg'<|3KqcYlMSܛ3Meq}rfLzk#ѼGc^7L6bF w͐tӼSܻ/Fن9YO\_f.NlYۚFࢅ5	1z82ʎsp%3!SsӪ8k'9{vq5=gfi͋Tp_5
l=PSnU<qRL.\A%^RJ,]A1 +Vp%VP(X*a%Ë:
M
.g`X7+X(X{[8mv}SA0̎(Xn}^~}r{` ÇǇ,>13|E0q>i0<pa!Z"&%[}8yo1|[/^|G=8/2|IGd7~#qio0<&Ï2|MF;WaW2 '6XF?ax72S3B}2n~)c#ėf8C9;[CG5Q
bX1u'У	ȩJ:L{5J,9D$z?Ah_%Z-Q	!\VzVfp%Fk}1SR<;?ǧ]xeOIMvlֹdK>'R᫊,n NY={GV)A/Dٱ`nrf4d̦d4[\U1qaxhpUHsFguTg=WseL%Q<K=CϳQ1e}dwLoiXRo+UGr[y!>O:NeL@0zmsȑ/-#(XR}\c]T#(XDAvV0/>KVE1鄨x'7I;gQ22[:Ž1eQp
DgG7aWx9JsSRzX)AYоx$1~IL{*q\Zbx׳5}	4;:hzvzMOaL\F,iJc,7IVӲCKq*߯Ol)z0NG8{vrmFEI3y*>-ʧjc1.mc珞m1p=kX,`RL\I1{EX^*CA./!,!PK\[)
    PK
      A             1   org/bouncycastle/jcajce/provider/asymmetric/edec/PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/edec/BCEdDSAPrivateKey.classW[- V,9l\p}]7B`	6bl#1YVX*6=I]}-IqB;M";Z̾g޼ٷ/(܋
/*X^/Iյ;OK(՝iia)'(ˈDjnkjںڂ;vvf	)JHpk&bw[ưfbXd%(m[Fq	aOA!anFlZɖ 9(ld!(D>*`Wm	.2l1O,`\[P"EI
!ѐ
ݚE-,
PpoHDa,h!a7C&9H(eF
ۢ:PD(bznw2EӥLdup8
jw0]gsĈw
2GPh+a-`نP=OM=K=6
Ez^W`8̰
ZZ<~Ĥ"$e"A"CF4$!Ņ2kT|N37V|#âQD6k4-MSHݍ[c
U?I2Z<5sd[ƀ!,	o ;;ܺrN9n.{=tdٴDAFbqKH{=w.,ėy~,SyO3uwTZ8]Rt[.̈́mmAMMk$[FEpjSDP䳭uqC!]].⁖VӗƶTԙəǣ%R2[Ƨmi]b,l8*v͖&;2c²
ĥqКsAˌ,>ZJ)'hh^o?@NoR?IFm2!INdq2q7h"Um2ʸW}2eqXFNG$4t,ы~Rv\9`b̉Hu,dҷYI|wx9a?,B
%T
d}RENĵ74K/2%L-stMB^dSZfT97wB-G?iY:|Ss-heoZ)gc,$roEnf7,l楖TRE#^U*b*jEH:4BQzc"%*^*ǰc8uQoTх7*xxDf<Ut1x+[yB&UNO2xRV)>P}>>3
N>|T><!1+x
1`|80dEt|QL(`Z!|M /
<PTf0sQ|Uo*>a|g1F̩OVSNZIW\:1xԒ0ΡU8U/)8.EeSNp05RiBG?SH)L03sbgJS4r )L=˗`<Aqb}S>+WP( 4`w3]RS&Z$7iD'|\4%<~ϒE2B+Q)f
!VgD#q+Dx]E>tŽyTHi{^{ރ#m5_Q03vsWRp쨿
4I^ PhNxS~*9b*5ɀHGڵǩN
wz?gNzHBiS
T_D;Zl')U{eht;\USV/#z^Ɵ's-wx85Olfۈ3L8^9'gqzaʹaZCmHlouUVtORx!ccVz*KB3
3]eX#,U@!(ER5%	'<.(xwqsMOL7XZ
$.O_a _ڿv"ɫz݃Vگn{goΙ($8Cj;x|>o/PKaS+k    PK    A             G   org/bouncycastle/jcajce/provider/asymmetric/edec/BCEdDSAPublicKey.classW_U&Mw6ݪ
	R*Р>P/3:4ę	mv׷]]u[w>Ů~G=wfR.rs=dO, a
c]0qP%a	='{{;A;
p(lp63NZ]B /A̏f
-vHP[nӏYVBmVЬ٬g9F'Jc򒰙|xs	9n^|lv؏uqNORL{:C>˞dG#qq_3%a~9J`.O3tT	d8Sܶ
q[nMa2sϹeJRȘ;ڜQ[
eSf929lQ~yS,[!" ?
Qq9aoDTB4WjRsJI!ZVxX}[x(4Y'Y6fZ,R)=[IlPkܖV5l*8=r92%kfrʉuRUlݽ+.`5RrdY?`ɤtҚo|& biIzݾ
So.THJ>9ۚaSIJ64?ΞޥZ6u!k8b\1OTeUWVۮdcyg[SS݉Nc$fZn5nP]1#
t4sF[JgGf?Ih[F=2n!S2d!c;e%ce#[F^d%&^n~ew+]yCO|mm_jP9=c7ėKyU0~e0%9"U1Bne*WI5ŞW{߱ϫDWVywTrUbDTy/Bj~J{r$QlQ^T܀q4^m섢fAZ( M*kT
r&T01U$a#'d[p>*Y7ᜊPh}o(~+IAW CxBQ!<8$^9A وو1!c /+gA@ǳIǋb쿝5ZkK/byZ+MC.b#l4)uFQ<Bt32	_dA?'>LfۉWx`GV6ͤ6O6Ʌy\ݭH׻Xq=EW{MpxTû-rb?	XjӮd	ЀoHWK6Jy'= ėx{LYp1Rħ>{e
R_9
3"S{._~PĿxQ?9xәGA)}]n#	wA|ۢ(N>-\@]TZ.Pc3}e5H(Z7(-:qv'ʰɋ^t=mP2$x'(.E_|ESI,#| :Sr[hm/yd2G3u31:B3>5hy|5S5rA4ao*&luq%?,z2D\wLxkE PK     PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/edec/BCXDHPrivateKey.classW_2r()XTrm"Fjf,GfgQz{$BҖaئC'L{3ò®|>7w}Ͽ `#GXG͏x܁$՟#WwzLL0=@N#jH- ჭݫJ(>l-j!"ߴi6سq#q{'Ͷ-7ir]3IDk,$$,cфEFDXѤf2$"OѾY>-iG-£[LѰ	tk(B8
}${MCwQn11Pǌ:Eu;$bVD#oӥN&fn;g*f6ZdAfܯ%2tie#tmJeDxhZЈۻ."ni[h<iw
ou
[M-QePeȐ
KrH	'*CCGcӂ+bV|CM,"`5,M7)s$ug
*X$
fJDt]sWF!,	k nYn9_p4gi`zz24GAv,%H[CbH63eօNiTi~;ݼl.RLچ94ݎYCcD\T3݆ЃmcCе3ѧ邢ݻ?s̥by{O,U2Y8Fk(:m,mصهX\X7m)51!2Yŝ
g"D2e	ayjOWϱt)難|kB?Ӌ
I2d^elY;d씱K2vxPF=2Ze&cd.「2:$4v,A;2W|!;M:r;}b@H,}wʺTJ?5ییf<*Ok伃^S;Jfff.r(MİADf'sM9eNnw!_AyٖMi=KRhw8=zw )oȦZ'٦{Ӵ.ݡ}Z|19ڽy"_]rd ϵe*
ըRģ*a8`)*43(Ee3hU(Vq?f,RXIG0b.X!:>^EޠoTM*:qQE=V.X2xW]}GV`L||XI|
NqO*x->a|LY<\fI_SQ\fy_d0<@g_P i
c_UG*G\fY_b o(S> ./WRIKf&鬤n[Gy&+
Q(ѧB"/rL@'4KKOz
n^#1hd9L^CxK8p
Ǖ{/ ߍcj!ϓa%Ӌ䊝9NR~	:JLO3vװ^D2oq'oJL}hϓjj@QM'/I|O9:(05UO6MW\YYFL̟0sV(P(x%^07[KUN({(",mՏE0פzF+1c ̍XL!|fB!R~*wT[3UW޳7S~00J*d2|cW{L/Rv*w
y/c^᝾nv{ի$W&1zI{qlӥyMnK=#*)L/r8=Mʄ
+m3Xhv6^I97N+Ix{AunB3k?.p$51fZaA!KקKe
3bRĭ]Yu7>B'nii
)=.O
UzGvՌyU.$U\ٯi{Nġ@#[w8;QHb=8MlOڻ<f9}
ߚQqPK}%    PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/edec/BCXDHPublicKey.classW	W	F2^JB"v!8+1cp<bQF#iӦ]hBD8!vsz73)w.;ÿ:3/!+'$INHF[{%Eӽb_g{N=]ޤȴpejn =)A-y	gx7iL<AdGGy?'F -zfY9ܝ3/pIq͖x,ef743%FF7&ףbV^hxZnd3&Sp65I#o3CdDMʹv#f]qM72,9qzi7F=?-KO1n;	ӣ%c,snnI#Wl3JfHFaD_Mʰ`+7T`L%9a8,lW$
g%as@5.&RIms\K$>h[VU^h1L{"׊YYfvbZJ|4	7N$zΟ2Nlg-in.2iH{ q#i̘YhV1gh|½3QeK?AoU
tvn<M2Z|46y3L\š"gt,rZ,]s]mF8liiQS*A .$HEHueeT̜ӧ9O9ŮE#i ô#̌$Rdqy4FLL<t &]d?ۿ*
*Gv7^EF]Lu#8(a228!㤌)2qZc2>!㌌2#WF~چpjOЎxO٪P9%hAH{۹B*j+{$[a<62`aLW:F{u~W*Eu[_N'wi:~N;HH|cg<Z=
Ǳ*r>ućWY%pϬ#AaN^#PT|L a4h*V*h]*vhC0U<g"P\E(UQ|N)<W
_1򼂋 S0/})|MP'O<(x?dI+`xQo-A %x)K	^Jq|U+/|S(LE"tLҦo
c6ӮEr*<$Qx{h75ThIJ}$[ū[x
oQ[:$:ϡAzNx]ٶë(8"9`-\W7V8K
e\_	8P_,H:W(A?1ToeZVr	\B؍jo9w
zW1=S$8[Ý%ԅkWbo;H-!@m8⣄hh$ <@f}w	M*(_7w=nhVx@pC(F_Wﺣw}CŶ?7@:I#|Y)v'PiEl-K0u9HvϤ4y!U	+K˧J,z6%rY{eW<n
KxUw0jۘn{\n/(9DV</␫8yZA^_߯opu#1L¼gzлQdPo7LD#PKE$!    PK    A             ?   org/bouncycastle/jcajce/provider/asymmetric/edec/EdECUtil.classTRA=	**Qn!!Y\	D@@(Z>
cjCMm&R*R{rA*U۳=}ٞg G~\`h=c^%Z&-RSM%Od6aێ
YJYB(ZBЦ,72QeKpN)˖R&\%ts)iK`k$ah`PKI
ǔfYHIδzF)=ƐYe96FZ6\N%Vȯ"9i]KE{[d,?Ag賝TSk=êEf;nJpQ0DNenr2uC9.-{AEf8O"mH=:t \]
[!eҔMs3ŘiV
pPeL7HQ1ޮ=2S>b~N3g9qtq\q
ЙGtlc?n^f"ΉDcG):4]_<x|w
q"h	׃AfA
5bLCF4͸g4`Bix&I
Þy& 1@tG}FY;m]	csEdD:fzIV諝FF./Zq
wT
oC ";\vX؉|2r;0÷/x{"fELPDP`
J;uwȯ܌#
OiI9B_,(VĢ/Zv)߼o^_A}}PKC(  Q  PK    A             B   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$1.classS]OA=,]vAxX!Š%F4J$!v2nͿ/U?xw
wg3?~~*CTgȖʇ[íf3
'6V\KyǃP2#K)-;JsdEБǇW1Jzn;h1<}pԏq!ߒ<Gfm}}ޠ+AdU2Zm||'"Z.FG*ʎnsPnBx*8r0MX&.MM\1Q^//ެP/9gѧGTOw?(ۘ
6`6r0lL"s4nYY,&$"]wҗZ
G#tO5ߊxyۗMp
$L D.AoE!_,cR=J|B\Js{uF>8_Wc(=ݏP!k1qE%̥
PK(\    PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIES.classn1:|C&aujS%3ںJv#ۭix 
ar@R;3f_x-z#kj+CAw	ó$Sv\I$G.21DCJ8lwwj{ahEQ蔬=؝/؄R2eƊwӝܑݛeqC~YƜ8=mu|XcEbdS'#͇CrF+A}R-=:"q.FE3jԙLZ<˟Sldt:K;0rַݗq,.JWX
Gk1ns,Rpc79Vpat@ZK{CP2L~
[וT*P<Pkƨ
c1z
/p4xKu ?PK	ŵ    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithAESCBC.classKAǿ溚:Ttr'#nc쎉VC@T4+"7}/O qTgJ+sΐrZHjum8b"h24!Eݜ$vvtn#ŝ=1ɇQx:2~<#w
cez4:?K+,d_2ɔ%/Nj"F-+~:VZ,h)6%9mذQ:C%񴖑q,cwG_m!Fo6[#.2AȽPK3z[A    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithCipher.classSn1=i,IZ5.iBdq{"&iHHHPh%ٍN~""|nnXyό3s? <E`R@RR"py$;ݭGOȧqcΔʣxCH4mwLI5[!EP}<K"avq3B↌+}84Έy|EGxޞSKжM1iJpAGQx(=QPHr*<̔zkRO2,9pwu:@PM;޴PڳܵJ5<MjSݗ3NtD$a1֦sMoҮ΁XZnᦋ<.
b
J..▋Uqq	w	233̃k
RBNvʆ
i_1X3"M	@V/}3T-xL{!~	
F	L{	'X/%
"PK9d    PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithDESedeCBC.classMKBAQjjAF0V-P+#jyӹ2sKY~@?*:F$ED3p>9y>6CHi3ơa/2-~j13ސMYd?ཨI_kHߖ`#$N5z26Jp#xPo̊\R8Pq{z+A+:H9Xpv80T+|0ԇgLi	)xHbEE..<R>^4~7VZWJsbyj1>nbbW)ۢ9|i	٫\̌r?ȖC<
d PKk̀<    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA256.classQJ1֮ݮUYKEVłBC.IcyR< >8Z/"RIf&3f׷ {(QOzSNe(qԽ:k234UJT]&Nur)G*)tLl13ZIꓒn!ӿS
g}{xXP	ocMH aG eJX򱈆8/dqb-Yzn|/ۨs	>OdkSV>bƲP53י7P{PK  $  PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA256andAESCBC.classJ1x;W\"D]:VЍq;FI>+WD1	O?X,Ckpб02ХUj!
ӸEC$Q1LVT|Nj\&X\v&
B^*;"
\B/UY&jUZe)xP,}	Wʞi֋ա.y䊃v2\|a?͟kozd	?ʧt:P.~'Z
}OC\taȅatу6nH_;Z?
D&Nf#ƨ<IM2&r&i`G[z%<CBY PKWU~    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA256andDESedeCBC.classRJ1=5v:~]"D]X‮1
m͔LT\)
~%VEQpsr97Ow V1KОtm
)5/n$%d}8r*4,b~k25t@CZ(x_olnvF+85Z@E_g?c6Tp)\Q?u`ĨW,xl+oZrۗ,X-$,^E-wrXsJ7+@NG@A倍$m8у!!pMzRr0!A]Fm/qT40t
Fo1Ÿ97~LohHa	#PKz  _  PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA384.classQJ@MbwV<4="Q1PnI*y,OGED
:330?o/ z@XڞPlu=	t23<UsTLέNQn/ce3S OT<Q$g&C22΋锬JҐ.=x?3k;.vPsk׿@^Y|T`2.\
lH(MɄI申p|*>bP
l2{[hPK!*_1  $  PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA384andAESCBC.classJ1x;m߯hEB"Xq@7V혆fJ&UX,.| J<^eT$Nȗ?rp{`s1C׆n2x
CWNld(ƦOM&6\f\2[r9eXJckqHߎbq4ixê飯Ln(llk_s&Tix4k5i\VAvR'^){uZ/VB+:t9pt;8p4^Y'ÿU&J5x@ɻl{~Z/{hG?mtуaF\bE>ݐv4~&L9R!OBOQo{S4A'ebc--Lи+>M%<CBY"PKDK~    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA384andDESedeCBC.classR]/A=juڪxhE2<"a[	OEx\I; YGU3{3眹9w ` /l)&5/n-$%d}8R4P9e*$iT^z~7v=`hָ"X_hQEQT`gӦ
.E+ꇭFk%5=1/y'/Jڻ?he1BBB`._؋:A>h
M ~'uj}At#RHbІa}Ak:4?֓+!	R_vEzGd='7X9sn0~F41khi0KagPKQ-~H{  _  PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA512.classQJ1֮ݮUYKEEUPЦK*X>%֋tL>6aT@Ju{m6MU$)rɩcyde\f
JFdn;'#[L&Vd|HF73ývY*<T=x;atf8yyQ/@A|,ǲ@%ċ)xXK6AOS6ԂuX}l2G
u
PK<+  $  PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA512andAESCBC.classJ1x;W\"E7*tcE܎iidRQFEL|'w V0К/3tl(&',m.-3tiyĆZHBl*4kab#Ʌil̥(-U,S4(Ið׭Ʀ>ṐfKUIZ(eY
Ko'<B镲goZbudAAa._OŚu2YoG0]˪?±VzhCSЂ]raE7]`ͧƏ$	Cs1S*YH1-qfh_hb\q7~ŧ(іd	ϐP3<PKz?w~    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA512andDESedeCBC.classRJ1=5v:~]"E7V;8rLCm3%,WGUeT$\%\5gG]B
E0}K+Iɯ<j_2N
=
.$LE
P.+B%^ŗx=(w󵀝Q`)~EDzg:P
\2Wzk%5=1Ko/y'/J?he1B.n	6|&gQ˝A&\lM&~j쑃6sЁf9`#Am`F/F:\ӡ\5?yH<x1j.bvK4:M,#yr[o1n
&_)S&Z/RF03PKh֫z  _  PK    A             @   org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher.classYxTוIH$`
2E$
 ,MC͌ rS^$"%EIBbF`m(5$Y'd7x{&l&K=7ES$Y>[9o ŗX`2;q+XiGhю5vc#bGԎSv<k9
G#FW*xP~NF<VPe^n8T~LXD8n,PؽckO`Z{kG
	"נe޳wkww[v7$k[[l"o䱒6=4B;FH`[`0F^}%װ5W0+4DYgQw`
I0WagWiSz
ᑤ%HSϰnw.Qb6ۼ~'4ۍH/>}䆲D>c$T5h/S˲Dx9,~29zhϼG/|;.=LsCސ!R=@Mb6:NjCF$aPb"v)oкv2vNQ݆Z4%ޙ5|F]:l$D:~J!k0R}%dZdhcCQFd6|A[W9=GVSO-@K'Vk j3n#ȻX!ݷ541%DN
EMb_N%'I7҇:^G9-ef41Hj(lіtT^)AO&iZK_ShʧФcQpbS	r*qK&fa K:)9Pq1wh4=VҦ(b
D21qSv
B7Y7
Ga*x*mpbܔ6AR}Įぐc(mUj\uRP` wpgw5<:By݉ʳW-@ޘմQװ\&Aj
EjEɱ8-HqKiK]6r͚gC\cvw[+C:PǗiM`7fKWL58U]݁;dgI=∡m2!JN1I|}iEô`c:<ML8ĉu4aO{Ls6dF	~mx$ U4scm08女EOjAu kWmY3/_#p`?n߽Si

wuv͍a@VwO?̙j;mm7g褎\
۸~6N~йx뚵sq57l|ȍR	^0*LHfւ%nyӱ8Mn}ahrvE=!a^Hg.][.D-j>M*Dw;tyм W?]|>}g؅@#3ѱVơ\ȺA/z#\	$o/&8͛QZ-pY]5QItrZ!,ăI<,qLBpKx$C^'%|#~DPQG% F7IY-oxcox;%%Ļ%#^I_ć%>"QI<!%>!I1g$x}>v;7㣑~mtc払6KrR[ס 5+)u'z	XuD~U_+<}YI̢L9k_eOTe<;+}bԇ$Ӽ^ZHxu0GNKxN^c}nO+ڒiTVm0(NDg%J> ;'ٖN״RC2"[fY&!}P4i
ϐ{$timN]˧M'z+GtXM>4;ft_Cu}09Wd@xh6x%+xnL9P(Bi&rFJj8;43hC5|aU#7
0khB
1~|RTk]Ѱ~_bp LHoNF,9KЍ԰,/45/{KZNרK7lB!Q@cPCihRWxEO84b
E	wK5l4ler
|WAU~$0XȠA
Z1X`	+3XŠ]\<X`11IL3vAEb{neV;-a{KbᅾE[Xf~(Z#q>h
":1Ov~*q;40hd?)Ƌb|[(ˢ?;ӥ_ёx3SKSʠnIDwܥA>q*MTQig9L4+ʂBjQQbA/5?P"?P'*8LVxS+L0e
S+LUAgxL$v"f
=
xEq!y?tQhA4_u8},7?En뒻(E&,䮡[8oBC6DOt $n:?J:EM114Y.pHt&#1qNƄwBs>+kȿ_ng^('bF1|7h,,Cob@3D~ϩIGY$ sN*O'G#.XH䝔yj-t5^,c&e-M<k@
,NK1٤1i) sT9jhߦݨ5(Ӣf~FD$>,\O
e#7{1֘xK{a5)2ykVچ703QkZqr¶q@SQaTB@>	E:E4UTyEu*Kb,8Ig%JoaE_Iͫx
EI*̳ͣlքvYrM6eMNInrヤΊ	JwK9(Y8EErKh/lfgULǱ6	ח۫IW9(kbq:5*Z<u&%&%.I\]p)li =m4sU&obYwY*%^*%X|Uc(mh*5R:;)k7(.ݧ"usIN`-9^K^tW(%΋b`[&9!Z[Ȅ$EKp",gB*VC5סZ*Nm>eEֲ"e[K<x?y]	q
ך콂{@j
u beW"Tx.,B+6.	]4(%)TT,*?J筦4jJ%X&L7~D6M	6^g[&
HۄxLMCiR8eky OA.ȯ.ηId`>Z-'8*tP(orEtFK=m S~<q8&]jhU'Dx"xi_hu=!`Lի14=z[z$$~82((b)-BVqGxߴB *J_[*wQBOE6_vSe *!|Q%U"~yno&wp]+WX嫦Aл8h >*]S8K+0*ԧ	S%g"焟&!%W?G	%EGxPK{  +*  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519.classNj@}cR1bRZ<؛ !lH6

~Tj΃7oy 㪃GkBI]?{~7N/Ħ0Q\\jSB,Z	NY%7e.ԫ&}q&E6a0|NBLdu bB8R&$c
;LcGO5}r9h
qPKU   /  PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519UwithSHA256CKDF.classQMO1}tepi$bb4*FoDZƵ]ҭY4QƮId&23GfH#;J+0{QTַiU˕A!+
	K/*2"m]rio׼jXZXjsHa(
RT@1pK$5aO5pŝY$&I~BqFW1WbxyaX)Oia&qZ8mmp]`{0}.IvYc"&0Gr>fH&9g3QD1a0{-91rg//0G=|\]Nid> PKI\  f  PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519UwithSHA256KDF.classQMK1}ۮC, VJE1֔nɦY*
 E=i`o{L+eȔvr*TayGe[ղw83&a3Ew 	KM}
I[],1_|F\0 wJ}
U4qJr
J&QhZ}o߾A΁ Um[s
v/NB슡}޲C~e
ni=L̦0ł)̻(b![:d
'@1ĴٛUڰ͘{GXafѵ1gQ PKrQdT  Z  PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256CKDF.classQMO1}tuE= "&jF4ze\%݂ٟ	?eqR6I;{}{zqRخ1,\νj];=3d!aa?4{ZRDM\kC.C!m]B-KBtH64a
=Pٺ3 hI]UQ5JrjW[it%6[1qٰ>'0l$~Tsg--t)TȨǎ뮘d(3Ha&	>|DGZ$gv"(BSn
#..ךc.gs#X`rBOcPKMY`Z  d  PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256HKDF.classQMK1}յ~o^CKh(bUjEoEcL5͖$(QbIxCff?^ `}YLx0qrK7j}QTwu4$
SD.kHa]4I<"MFX
G;P;*"Bznpܖ-L<P-2\ؤ%g"/(EK5{-  6Qk
7g*I].b xG7P:#©X}1G!CX1|'q{r֒E3ocWk7c>K3/T'PKd:R  Z  PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256KDF.classQMO1}tq/^pi bb0FĠnZ&k	n2vxMޤ3Mf?^  B!Q(0,+_mZ-=*йW&CZjj=~|I>q	G>iarECindT+Br#=I|"2ZIN]EQDMgbpqrȰ[(gm5]ưW{P/{b,x_ؙ|6[GZQߴ8ic%VcXs"b	iK+Z0e,j|	Yܲی٘)e+ܻglL>yۢkc,O"	PKC\\S  X  PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA384CKDF.classQM/CA=WǢRAS)®!,zyͼQy?˪BQb0ܛ{ɽ?(baiTp0{ˍeokbʐ~h~kK&qi
Qw^	t,-
9"MF0SU@
1pC$6aGpŭY$:I~JqZ[1Wbxy0°/7Qa%&?kM^sMԟGFu>w\u$;1A
I#cS>2fHW:9cOQD0a0{-:1ZzL.f..'4F> PKB2[  d  PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA512CKDF.classQN1=tp{4YJ 貖X|+&~eX)qaܛsr=oO/ A!˟3)>E\.){<iΐ/*kKqi
Q巭k^
t,-
9"MF0)
(u!6f8nKі{&.%k"O)|)Jlc<|cX2l$~Tr:MהvȨǎ뮘d(Ha:	3>|,հE<vDQuLjr)^kN<[c/,W\]NiPKZ  d  PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448.classNj@}Ӥƴ=h/CXћ ^!lH6|VO~T΃7oy;~ HqGH&-n^	.M>*隒EdXm}[!][UXgĊ۷2Wl^/}EpGMօ<JQJyM&F'_1ltfmWs{|r93PK6Axp   +  PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448UwithSHA512CKDF.classQN1=tps4LL4*Fwe-ױҩ,WM ?R67={^ߞ^ TA!U,3l+CR<WqXX[ҐŰ_wZRDM\kC.C!mmB-KBtH64A
wV
(u!6fnIђĻ&&.!k$ɏ)~*J#<ɠ>bX)IܨOZ'x[7\O:#z+bFØ"$L1,
Z$v"(]59\sE'\Ε#fc<rBOcPK]cZ  b  PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448UwithSHA512KDF.classQMO1}tapi$`A
܈FL%݂ٟ	?e=6yμ7z P^
IDpǰt|er2OZj42R040T`HK
M=I[]22^t#<
MSHˍ.f=)zPc%E
d$yP1tx3,9pTqbjvO;UH0*G#EfZ.\\,#"
d=5Ʒ")Vl5>,׾mls+&؜`凼kѵ1'PK^ml?R  V  PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA256CKDF.classQMO1}du \
J0c-Z.V,OM(cWDd&23@)R%CPieWw^qZgJC84	l4q߆\G-Z:V霑&#lhSPdB:lp2Hё&6.#k&W[iC[ky0ͰQ,5
5a&Zlv@otp0GF
7\w$;,&1E
IX#c9Y,2ka9R(ۘu0wSpqս֝s9Wγ7/X~3V~k..'4
_PKAW  `  PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA384CKDF.classQN1%GxwAHҸ R
 NBPg9_s@(G"
liWΌvwޟ_Ա^@!W^2L+C^{P.<mՃCIcxe*EbĥI6"2D=Җ߷oykXZXksBaSX*Ķtؔ#EGxdH^QS$?JW%v~ÔCCaR7<
_̋f#wxZQc<~nYv%Lb0G4|Ȑ69[ϴs$$q0wspqս6syVf/𯟰<+5}3zPKbEW  `  PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512CKDF.classQMK1}յ~T*jYD1mdce?%f8I`3$cf+J3ʕ}=`(^j{޶O;q 
	K__	u|e*Eb#Ҥ}si:7<t,-9!MF0TG)[cRbB:lpܕ+M<P2\$iG(ɩCSiWJl^	ISJkP_6a2/VWy۵h5p4
l9eaއi,(`!riH$ۘq0wssqս֝syZd/𯞰<+5}3zPKOW  `  PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512HKDF.classQMKBA=泗}h.Tu3
b4^^#Z~T4k%Ң8˽s>> TO#ɐ(RW!w_?+k׫vbHM<P
/#)B3$.u46'-LC#CoL71jțʣд܈j<b u0U}\hDF+ɩOw({hDC-N?Aʁ `P.[jO'v^T=޳#^m
eq=2Xf	lŰE:.2aH6>Y3o}Hc(Baa&bl3fccp^7/?C<7PKݵIuP  V  PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512KDF.classQMKBA=ֳ}h.Tu3(
bxy{2o4jeQ<Hfssz PA.$C"_cX9S2JYuZ*-$2@{12"4RG#p|:VWW9"بo*Br#9r_$>DHsF!$Iަi!;R8U|Y;5_x|/&H0*[Hci$-..֐q6CƷiDRm5>lܷCk,fYSLC>ѵ˓}PKKQ  T  PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$XDH.classNJ@}cb҃wm/MK{Bn!ٔXgy<~8Ay~}U1!Oޣu}x!<7Poͻ3ѡXF7{W:tuͭFqFfnv8ĭ|<A0KתҮPaa"AJM΄lyC;ez(D8
LǕKT!PK_"|   )  PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi.classX	`}kY,Leq	WE`hڮXH6GwM Kz!-z@n}wҤwuc0gן呧|@vcscݸʍj7Vލv7"nsÔP)O"	_7A59a<DBOMDâ;$kv7!dek4عq*	3Ajۛ7^ݲuyrx팸OP^Fصa"֙͑f:-ľЎ"[hJwK(-Wz&N-=) ~Z;}
_FFoHM<$A-!A7͹֣jUKfܤ孊s1ڏ+7h:@̩'j;n:b{E{Ib(TdY)l	$br1i
kZPug$VMjPvFi4(MM	𑩪-{xDSؖnjEU@DzQ"A xTuhM0;WW#aJt؉@6@W1ܔ:tUM(BΜlgBg,eR:OIoL%,j*R<l)?v-Ѝ%z\%BJ̌%ߪ%"t~85!#5@+|$ѢŢ)rZ6Z6M`6tm㰠kYY]Tm,KwfE
E\̖B+lp1K
1i4[13ҜVY
){C<@7s.P	0[YM"SyB[T#	EU	/bQ9Q$E}mIp7ݡ7]>Ֆ!`a[EEM|QQx[Q-yӥA4S+^?hULv:|yV;[uQQhVkP_bvz
<}'fR,mvJWd͓=x\A͗꼸GaRWNo&Zghbhfhahe`x63labmA;n`Űa7Kndx)^Π0t3^a/C}\mmH8_I1lUB3mC暚]!\]S,T|̼L/hz̸[ԨŖ,ˉCԌmZPn<QcnWv^DFv&NSSK/ꂹ:x)ۖ.tf"7:u=?֭KMz9	B2	b҆Xx'рi2fBJxed
XȈbC2^iQW^Gdq5OLd,2B)ANdDAAFyȃ8> 
Ay0 _`PIrXE[%n÷<|ك;y
.7<5W=83|у#8--܃O+iAQ	=aM
rq%bɞ4P&%]pT~w(EH<JD-N'DR!?4Zei-?tZi|Kt:J6=#@Ʀ$Z)- S3+S* ^Dr$Rq$q<v?qeD|aY8)Hty=#38p[tū0'p(
m+%ct8<ݴwu.o~z_wO	?-?1?	0ۺ*]gp0~cOrw#)G:I˒nGPOOnNmtdÿoG1R-0?
b_2iOa>募D9xҪ%a<Ju2|S*Ó$юQ5x(F#a[Bd?N;TPChAt,x)A9_SSZt,I D"(;i?8:1\OaE`%.{dQJ&/Fcf\LSj*ǒkjr4e\+qꙨB9^O|67C7?o"~7Ko!>['ۈ?o';HNU447+_DP?PK	{  c  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed25519.classNMK@}cb(Ń=<^KPVۺt7B~?J|>bB4n	gmt $/lvDXXWiTo*bQ;9;!}qܮjk7&wI=hVʽ4)6CA)!^ڜ	vJzcD89
5EۆbPK+   2  PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed448.classNMK@}cҦHz<^`饵PVۺtB~'?%nJ`{~}q1@L&-?F7sB{ܺRwZ%}S]ҷ7N++JƺvׄHK'\O+y`1za"AJ`B6ݢ޳
"
qnL'?NQ
PK+ǽ   .  PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$EdDSA.classNJ@}MAz<^M)H[[ofݲ,O??<x3yo߯o !!tC>kaa|-ܻսVkY6Z5λK;o䊵|YƓuJֲ[?Y9!	ZV7(B,r58	"r! PK~   -  PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X25519.classNMK@}c֦Qă=<^D({+maC[vc!?˓7?pxp>!Oք޽ENn	3K^n
MͲҪ,wM^nx%J7η!<)zxY\E-u)2	ZZ# <vSn	~ PKp%   0  PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X448.classNMK@}c֦=<^(xn!-IGI7?pxPrAH-adZܹw{Bײlj4˃wGS*=whkJ~s0)SFl&*l^ls$dHEߥe_*aCPg汻I\O\|]MiA'09PK   ,  PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$XDH.classNJA}㭹yZb-X$6))v vpq
g>J(q{̼a> \dE&5atgb޼I}Ǻ1\Q4l6Gg5l#cwRqcD8<fgtg|Wr($yP-8LJpLE3(Q@quJ*ұp)}S(~PKIxu   )  PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi.classX	|$m&$$\ʂ 9ٜ	"I%	`P60. Zjc[Z1cA{מ}۶HkߛlMLo{}>';]|J\va[\*qPD@0{n!4[v­&l$jdmzÌʲ
lIYeŮ%KtjR--K$QVY<>T9H4r
ӰV_+b gV7n"+˗La-!8$;NsklZFS8bXV֑&hwǴ]ώnIŌV#ygk>	metzM*`P7).-7d\,}_r[;Yf
u,xflv;vHo	4K^|Olmt4L}n!1NltkP'RC̰?nh.j:49$BS9%nf&U^XwIq
PHc;9sjn
E]Vv+LR
v$(iPj/6ԬZmܵGYu{>KHY-t1)$lxWkxe@T1w&
ew 4^Jqeav5!*Q#־[ gv@OC>=hfSikar ;5E~'pZ!!yHXu=ASK6.4$a$R0'*na屔&xap̽f -Ъ
wN_b=
|sL3
tnG垺
Đ02ShMM9
3a\( qy\ZuS3n2;SLx<(]1Q0LZOܭZOo4#)II$/pܻd٥)K*e!6%%:͊,Hںn H[*P>&9GfxHiCw1EilZT=
:Qt+I.CpDHP !r{.dwI'j%+pd%$q%pb5po
k.O嫱o}&~~7\{R!Z":.%tvڒu	MM!`C
D9{ x];2OdM7954(u(Y"pEV:cL?+?C.-ʡJơk%}&  .dB.LwPb%%6HlhAbDčm^m%vH$qN[$4]>v	]CSb!Gb_b)JI%,.J1kJ֏D\nkI[PJT~楢K-?6	?ݡAE42 q4jeLQ`<<$H;S)m?*FH7KR=e_,FKu)}I!66hK\lK撬M1)(M.hj/[o(|e_?:Uܰwb\ ]&TWiW
I2E]m,鵘˱J_$8ёF7Tno<jHŕ
FX`-u򡪨d+bP`5|La0UE1	OXOx|SQ@-QрOQeϩU,Ezx|Eb|U5o`P3<RQU\2﫨2I/3(~G~'~g~6KC۹{~odRp'Pp7^PVA^Qp~G@
>
>|*fpA} cLQpPps?*<"Dt	
N`@GxN1"<Pd2&]>'gL܅20~xQ urCڪR.ji!ɭ۬7yX+cl.v'KRԟ$Il^-vKKZĹznM6(*/*>#f9#]qF>KG%	6w҈Pq7{bT,8,b'^ҹ8nQI4JI+"Ak38уgō}b҉Q'kgGDQ(!5w&YY'VFEK~Flϗdg؊w=(pZw4\OlY6{BT,<ߏcR~dxgUQ)ŶPI i?+F>+zQqITlpe6VAtZ!n,|$n˺jJ	LxT.IR;?i?aodՃbL'm.yG{0'%OhT4vo{8*rl21"JAhӉEL=x,=MIJ2*]GpcIRyZ(K(QVEDYTVQQ4[DDECXI8LwxWq5̦6"qq7S77IA_3bI	_lCĔt(ӭS%VVV~<%EDuNp'?kbM˝>b:OgS!'8z0EҞrQ
E2yʢgR	^HT*d_<jn҇'ij L
J(VtcѸ؞,r)䕜9QH~<%&G$l#BiDJX=8H~G,V?Hsaҏ5P1D;^Vs'BGaDO윩b"Uc)iPX,8j(b,P PcG9Qoa'>.f=62#﷑FDVЙK,:w
jOSqj	jP{څPKk    PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed25519.class;o>^Ff
0F
OfYbbdjjh__\X\_P_ZX\ZRZY䞚ZX_\C
cTbg`eg`a`f`b`g9?%39'8(@&<!& Me;F
 AzX$PK&8   $  PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed448.classN1
@3&;{9b"j#e],+(">]egyO 	^ev%#|$2LdG)JpaӉr$$_Q)##rm6gŰǛ7S?DC%B>)1ċi'Ga-YPsײk
Pq;O;*PK0k"      PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$EdDSA.classN1
@K4;{9KDEF؟EN4'wQȳċwafY~<d-C,)Lc<%6{ӗLRH A?}U).lq:Qn䔒k*6BedDMrV|3b"SC̜vz֒ 5w-p[~aT PKgQ(      PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X25519.class;o>^Ff
0F
OfYbdDZ22'%W&'g%'f%e'W榖e&맦&{V$f%d22xSXx8wOIed*vI,.N-f0d ʂ #2In O	b``bHriI PKG`   "  PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X448.class;o>^Ff
0F
OfYbGX02'%W&'g%'f%e'W榖e&맦&{V$f%d22xRXx8.uOIed*uI,.N-f0d ʂ #2In O	b``bHriI PK+Ӫ     PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$XDH.class;o>^Ff
0F
OfYbp`dp/JO/KLN,.IJNJN/(/LI-O,M-)LOMIMNH,rOK-J,/
.dd1*@330030q13p휟T霓X\Z`F d@0%o;F AX$PKWK     PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi.classWyx-{ep q#(p 8v4]KF^ +@;=Rhz!nAv6@z}}j%o}̼7zgƋZ/f{1ǋ^Ջ^Wi
equCH푵ׯ(=noj uetۺ$RcѸ[}۵pL59,Du5cqHhKJ7$D5C3UKۣ;UݔPHD/si|ija+ꢚՖu@%̞ {J7@e$(	A-kXAlbYay\j<d>Hauzcz^եS_5".{m.rmN%ܬDF|	ήYٕ>M>ZhI5kj @(Ӣjˢ
k	KMW,>pm)=hn5I^nlZƝyWt)eY?=#KJwKWBbMhMg~E$?}IsČz4e1*?nFNդjXhڻf_o?PD3,ΕtڒJh᠞Lwc畛1i4sPkZTOZJ&pX2tt3b׍=Iۯŷd;&CJ':ozUlޛ=uI*>Uzi5=Z/B=Xxw[oXkS[٣IIh Ҏq
Ġ?7$_w)Y+j3-r/4=eX *$M*e1j:*v<ɾ[S|X'ڷυk%bp{҉:bƍ/>+f$'<aJ}rvBm8dď\o-x9=\%exM`z6lh,pw
	l
lh!S`@H`
x~.SėAˬU:i'Mɹ*u=4(|q;R~ؗDN(Ǣ"]A}|8ƫYFYnz{W{]ޓtS{4+;SNʉѾOk%LsUdsf
ݳPvf{igiS&sQ`u
V
fp3ޠ3,`>ި`	ޤ`)ez,ƛ-

vfߩRЍ4
^(XɠUSMxYq
)<3H>C>*CŐ^e)a|9aA<##&}xLOg<%#O` a0e0g*TS&$ 8(4cx<	#2DFq|B	'0p
#9fFR
K/?ͩxLjΤ_Cw'1Z% ^B${^F|}/5y}/'~v?sWMȦ9NQOZH^Fx7ǅQ\|K)r1ނw81Ra!9W%tqic4YWi+5Ţ1DzD_k|e_h[<psfW]=EIVPv+z/cs&MF,`vOs\b_ 乳24Aa6=G>=v&XVc8HK:CK~3A&3_YmnGoQ12l;r{6<nGhX/w6j~8~,~P:~XbHڔ̔Z$IU4h5r3Jy9p/x_?XPha;p}G~D4HCVqRIG~)~
Q*5/*k|7El!̳\ [y^%<ʆj_Z0䆫@O*XvוgӨ?gx
C:ɕr=YW.H^?+oa%B?
+yILYzNݹ5L,{23{<̞Ȳ'20m_ݤTWWO!z-i/k
5W%*³l¯!<k	cPK0[  t  PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$Ed25519.classjANW/-4͢hӈE ݁fo88d<RRPU|f;cGLƓ
jib3aYB~{ZbYjUj;W&g'?l8%ef
lg@0(Udl!eIa@ !ī:gBn-Ug)z*
	<鎾quOB?A1PKWjJ   +  PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$Ed448.classj@i{hwer^BfFvcy*CI770?o )	t'{/tI4ɨYTJV6g]]nVV"ץr~Ԅ_E^>eYZR0jO`#BL`B5mVKavE^'~{O@4O
PKc   '  PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$EdDSA.class=j@Ge1Hv9	Ņ@f5+U ECEnyfy3p6y%{Fxm!>QXJ֭
ӉHuads5!1
1&,RRT")v, LΙaT9v [נkBGߘ! PK Ĥ   #  PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi.classVWWmlP	PZF@5.5.ͺ٠Cmkw~)=K?o&$dr3{g~3ٹ~@?ׅ'\BC.8g4{/q5Wky"h[\iEU#YMةȹ	BG{vH88[N2b\15)ԔuyL˩ٜetQTk- +hRu1%
Xd8tRX 3T\LjI`e]i+Td\WfI
|egٛJ+jgK	e#͆3FbNDLFuer nZD<sR+KG)ulZCiYMb)MC9%ɶ/y&5ҕ`c",χ꬜VTpf-ܕ
YnR$)ĔSLNMrHPBkF&6UE~hlh0;|`8&:Y1dQUc}P;"f\OT%tm;t*tRCryB,	OJZ[}"<0Ï֍Y.#SЧ9=F#m
ocf!Y&'b"B"v-bgD񬈽"/ "8,∈4G4FVf	 me[VQZ`t)~l邙yk[dw}]fzfWo$tRX%eէ2WݘJⰥWL*a=6H؈Ë%a×k%D e$a;^0:\@BB.I#%)\Hō
iGփ"uN`փ(\p(&$4U.^P<qZE\\\_L)!.EUڣpZf-b2*kT%nNzvnzo 	~ x75SᘋI:|Gw>
|z~@bEdkZD4xar-'xrw8!CXߙʖmh?6miK
FnѶE & ϙͨy~Nx*'\ͻ.xkq=A"&?F-bΕ߈rjjTfݵ]ҁ{U&AM޴l6m
y07xpC?nP,IV|
.+~am,DP;'I#YvN[t^E.,_Doq ߓ$st[(UyҭPKM/5  	  PK    A             <   org/bouncycastle/jcajce/provider/asymmetric/edec/Utils.classS[OA̺,*T
[p;" /òu.ľ@_L|}DF_/#RB	7g9'|
B
jpX!J_ne9k[єIjKX|!/M2bKri%C="儓b8L_̊´lgPr,7%HUoͬcጹjYI3}:"pl'5bgSc{"
>k;b^L%륍ewű
°Bw
x7R}}ʍ$-|9O佽W݁XyM2|)=2DJXR`rM0R]u:Lu(3&]维nMJ+Chh8qIS-Mw`]naޭ3;*5hP44T
ai8Z%!*.8nm0 !=*:$$%0"^	$D.ѫLG2֓fn\
ʢOeY
2ZC',Yf2`(QKР<`}`40KoجGzG_ڟ
f^6`'JA-'Zdq+EL&Ck&c(b\R-D6Xn/R2ԕ(b,tiNqEnr#!\Sg]E~.
D98΅ÿp*X)8>j_O*bCPK    PK
      A             4   org/bouncycastle/jcajce/provider/asymmetric/elgamal/PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/elgamal/AlgorithmParameterGeneratorSpi.classU[WUN:ZHW-4`V{!3u:9L<3a?'kI⒵oR\HIJ!{s?&G_?4X*cr
,B!/R|Wu<9ZcUʁKnCRyQ[
6-{A=[БF8ʓkqvZ.NQI NӶ`(%ݲh vU~pn&f{mJBMht(oncΔ\_-jWlܩP70	ӗįz̓$ZHYBn
qPrpehfK͵Ψ!e(tQ6mi"-(Ƀ2k(~*.u-<'OY
74k8u
g5h8ႆ.i
/AaN'͢<gRV厴enBIacI])*dꕐhPsRnRbGJw:ջ#yV-;d<
*Ĕ)NZNb	0po)(-qdq[;J1u\@ǸZMu\âu@%r:2UbN'/yx@/_'ToUX!]GIIPY1U9HSF{*#.yf(]<v3OпWz1'2hrPfdOL='Xkϲ`b53UCAIDQ^fC8Io6>J(!^˙_]
bihᓕLX
Nd
)j){~.^JϦ~7.ϑԐ6b~8?PK    PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/elgamal/AlgorithmParametersSpi.classU[sF6q@% -
BJŤUQ%#Ɂx/fҾG=+ˎ=Mg}= pqc85qP8/!%!#C2!LfYsr:Yo1ݺdxF[pSfh9{(f%׳'e5wmjZ\O-Djw9ıIdE:0zyϝ]vmFQ'&^J;EY<2)YANqr<0جˁGd"Yհ|q=>caps٭O{E 6mfcr:cn6	lnz~1rd
,y_,V[u~]}J2h35߫:Umf>#lղcHSC`Kts> =|NxxrRMod]Ӱs3찞rF1LjuwKUAޤ8e9vݵp+j46LW<wӢPV=Թ]=/W,ُbUֳ4x=&z F:kh(F{uD m}qOH8%	_JJi	I	i	g$IpF`6p0?RJvk;Sp/x G
uL7󉞵Jy}"BR.{	LTT$=;Zvh|RAvzK4n(E(ŐqSCVBϐSpRU0;/@÷{q
s2~'˘bI2B< c
˸!@d]bQe^B%_zg衧Gr-\QY1lN9_Pч*&T6Ivô
@-_L4$2ЮҿbgR\Fe5wp=v0T)R}IT"f"	?%༂QD<]Ͷa^}1K"vAhQ`oF(*䮤xk[WbcBFy<fZg2!
i_a00BC̟H7o|zx
Euxdzxdxq(b\'3O[P}4`~oÖ^&#KxW¤b2ߊL7Nc<:8D;\'uO
5`nnX:nF'/~;8PKNx  G
  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/elgamal/BCElGamalPrivateKey.classW{Md(B*hUeI$d!	A[;ٝl&LfYHhG+6mVڧ__3s'Βuoνs=s}m {cPbP%ƛI	u$=`ڦ{{I{^}Z$H49|;utuu1
G1-gƧ+aЍ:kF#`;des&JJ4w*VA54ҳȡ9^t
	-5f	N2FFB=
iQB&a\N24q;N!c7q1O뾣b41[EvBGhK5;HddCnO뚙C=3i#9[PlQݔ:9غ|nLOZպ-Pтvq$<MeR2	5|;X=ټLR;z(h.a2HEh[jnz6\ݡJ
v,m?.hK|	{"'aW}%2~ƶW Dy59q*!o lVi<SSB*PCQ:#ȩ>6;mffɍc5ʲcb
?S5-kDTtHGQsA[	SgTn0OS[P)
FiSR
c%P^Xv4)-̚֕A7!f)#.YFVm2nK&]F2nG^A)U	KhKV7̇+ (ʫA'|PnPZL}Mdy$J-GOigii|
_TЖxm	aNi6 \s[<7{6[;zf>nĹ+^0ԻRW ˞(
 n+U\S[rҪXKU;±\8XWEF[5aVMU^zCaqBE#TIpSEkT|z۰VŝxPF|J]WфkQq-X"CfL8&U\)X\,<gcG&8"-8L=l=aŧY|FA7⬂x#

z9*H,c8*a?qNQ|WY< /o|2vC·nuL?'8K,{,~`#a(F'p{m>uBYCO֥\=}j@|;F[RK>܇::h^
g9& ˿:bmlǏZǕKxUr²,kQf*߸:+ѝ?/<\;w	
BZ?{TTTs%T?$$DRG2¼ u__!oz,:
`bŗK||x
]POvcE1p	| ~[kxzc-9頡~kpt<~l(yx1)]ER-YQ600gU1!J$*$AL8MNL?L6ڹ+8BPRkP{n
C ׽95/{8`In{pKR955TɸWJ3a^p	u?:	AZ/Gĕԋ4*dl+%aF l6߇GD0$N0&~ZlxgNX}Voŋ?PK%7]  '  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/elgamal/BCElGamalPublicKey.classWUn6.EQ@@F\ޤ-Rzo7t6Mi=VT<HQ՟'3{!ٴΛ73ߙ͛Ͽ،_B
A
Aap]ԡTi0o4$mk'@l7; t	<~Kv5}5[@';d.LH>4Bt/k<U͌ 9yMۓZ*TѤ#e䬂N4D[Mj+^yP-uDu+9!fdHR a#9FHj3쬥Ӵ60
>.`:*FJiz6RIK}h2lKWiGˮf<e4dBi5L'E&yWMDMSOP>DvDOyF_(wCJ&m=[VxLѬR[g{}m*CGz?><PhGڸflSWLr׳ajEmƨؔʈiƠ e@_2tުNy(^9B@MEX'ItW2u!ĦA:Ú:JJq"#24E7Xii-BPK^CO!N5n-9 k(=/du2T %nh]H"E,VJDq5"֊X'",NDX/B(b"6	XTM"҅^x`dXl>c"+d\hiku>AK<P~wo$n<)Y$|?\ְ9k362
6l_uA;[ꀩ7f2Feˍ%-Ku@mτ	j7ŚR
[Y\`nf)J+bPJ+]KAय़Sݰ3mP9u4FgjUy^uel^p'zTʸIdgr
-8 c+X/c1qqLnd½2~KL_UF
xg`m&LX
{BI&i	;`3pLJv!#1	x#Le6
$1&KLЉ`$%fnESXŲ.܅$Z1&%=eE/F19^n4݇֔ԓ^lU;ҭsa%م2·}!2gQ!E0D?d
9|	''O9\to'%_xߦ\!rC!#	`,qA ۼ`q]%9
륶|>oɟ;|Z	]NUgxUƆ	|t=I_S1~5wDr/eпwt7nDq7K
1"D^AD~
{X@@cyMEg}LP=彨rc/NGp*&$Y~rMXCÇcE6*C':3^E2*٧jz*IE?Sk	pwWSך:2G>sxo\;g'.xxkwZh9
W"NIYtxn#~9:F//=Hy| VGE'4U㐈]߂>zWPMWW
U2N[λ	J^ovgPK,    PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/elgamal/CipherSpi$NoPadding.classOMK@}u*xhYo~RA(x\7Kܺ
QTPM^ē3fy1ۄh8'ʨ挐\^ʔJvohLn,TFz6^q=^_3!Y*cܷU%,Wt"L[^c%ƀp8ׅx4ub"]#]cIvA!{9xmLC/PKGJ     PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/elgamal/CipherSpi$PKCS1v1_5Padding.classOMK@WژjE
TPD)
=ɺYt7B~?JLb{0
||c	jgR䂀jGxʙM"AIDS
-`E	+BX4(()gS.hl\PfL$Fr*0R_ObIp/Ap2dAAAAAs.UiwÆMux.hT|d#f/` /um@p	gD}^W;
h|PK    PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/elgamal/CipherSpi.classX	xTu4<Y #AˈƑF@^<IF3Y 99ξ8N,NZ`K`%tIZmHl7nfq6N97oH#	Fߧs;?{Ϲ;O'_PPAA

nTФYzlTIf7)hQEV7+ئoPЪMv
v(ة`
>Nw<Lj!w*"KhH 	G4pj(#[+PX[>ںm'k|WzQ5
cG^2ԱPCӴj@sӦ666nmou$HWk&j{;J{,yiwlw 
GIڱ[`7_}Pkw;dK32֦6ugo8U&nṇ?0sXдn6yݷng?%xކf,=2Ba6փ 3s:JoCIpq-SpSj蚔{(
QIw8M
LD=if%p|HK,	&@Jm)T 0%SKEban[[QUax:5Ѷ6>ty߯ik(?[0hV]@$P@dZBo
jQҔ#ԐۖC,i?
Ki
uÃZvZ`,Ab#(m̆.78u3F06+EĤK'
.ni
"ipΑ.&acݹّZP0?o$&Q_4#zbh(q,SXڸ5Y/`zDlYОt4lПJ^<ՖGBCQܑ@jES uvRiGVvc.=Cӡ6P0kbY[$3sy1:8ddS^̦yf
LgaIPaQ~
%yHUyzMͅvLS1o[ dni<V@Dv
2h,ts9(C9^	S$A-mߥҪe^9,EeZ9(tUV([a
UM4榽rǢn;4w :4 iHS{ikTDcı,6Z-PKzGd*yhXR}Ӯ1?8>LzAqFZD8'v󠬝	o cL̙n&Y1{lIIcIyw5u,skq$
޹[QVcƕ4l9Dr?H<Mp0p8yؑ0LZdG4c㏇v^*,w
[/Eݛ
l뱐&*IͶ:k3.W|7]*)fj
[mdϫil.@j
hz3WH6VMS}0n#kbB/ʘ;ǌ^|cA&C^%m,T,s癗¸^Gpsm7[͔~bz!MTIM::rquFZwo}4H͛0=@s;쉱 7z#Ѥ+I>XBY|M[GA<
SpJ+)U")HK8*qLbTnHUmH]xĻ%x}x%> AI|X#'%>%ħ%K<$J|NK|A HK?֝s-4t^mЫݧxCU\,s]S;]k٭>OAm]7TpZt;[-Ɍ2!ʈȐE[ifOS
9g<VJkk*dU^fƑu3q3jM
ȋWyˀ|)xUl8#Vw}ȣZ_D²|3dek}^g㽯7'2yO7,^߄=Ӭfx`tՄ._Wcx21 ]]lGfR9gUOEWţ1y#zk*tÛP%
TtF LIVI?V31هTj_B!QBc2LD;DN!UEŐ.*LED,`p9N'E]ǂJ{"-Q.-UqH,SUY`Lܥ$V2YR\KXSfRäIV[&f-|[xlaρ
hu".3y޳L.LA^mf
Lڙi*nrৢÁn&{9ľBt:uL3V&orD/LލLlp.5/y0idɎyxE7v.Ϫ/JOߕ/<@p+e/+ E($^Rr--:8}U̭ﯟ}⃏=芔s(	ކ1q,.uyDXwTO๾	|,+ ˨ڸHL%ԏŋcq6;	0yb%ѧ%^Ԙ/"OQ5q	AӅ+&fMڭ
qT6+]3c11(	^0/X0o9&-hi]KfPYRg.f /5ϣީ<.0c"|xVqdI+O~HH<0Dn678KDCP=Gcx
NE!Xv(߂=`EE֛a@8KLuW=BKӬ~Tί?%{O{<NΪ&}"g.Q;.:%<.Fu~svSkVU|̀-rY xN;`1 ?8+%g<q=qr<;l	[xv2,q.Ö幰]9-ݐ
SfTU9W;W4goҙb!娃=X98-R|'{U6g*pn\D&q\j<-%T\Gc"?N1=I"Ÿdsdq:MSj.y+YbNߠ̌M#TZbTRWTůbn9%]lȪpprx>_cG~*vQ6xٗmnfZ3E3Bz,>ow>%lLTL˨-7y_A+XKUl6kTsJ$'=$(P]VVǽ3G,C<s79MSXl*yY|qLwkZ8)<^4&S(#Ve언Jgކ5f)KҺްGI`߆Z$U)~9
[Sɱsx8V2oL|:=.ЪL;&JŻNZ*FaY]?u_jM_ЗB탕Ļ=Oߟ-%et<0*+!WIlWZ(Gk~]իP$΋|𔞧ѕٜ}恶7p"tj8Igɧ
⣓9]&3Ev+[-P/N+O"'K::5}a PK#F  $  PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/elgamal/ElGamalUtil.classT[S@PYR@A Z<nS4QfwZp;۳ iCkn4GX^"*C>3l2-Hm:dA
%P>I0vz5Oex]7+R,jIp6آ2;b7/GБE*PW,Sl!g#KKQ%fZ ̱X%˚PvK`&*`*or&d(%lypٖԝ&)+뎂sYf&Vȯ%B)іLWE"/[[	d`WQ.?ِ~SpKBN	]nK#[]	$H/;]SiGCMw9jW5uKS TBs$sm\P0ODg/JhO
u]V #EsC40& 	Ȅ0~AS~<0q?Bx1,̨" fy f^X1@DE0Mk}FojOT9ܡO?kD%u5VC	=F/DO07
'	o+V<yX).eУW)I\Dr2~ܶi&-#s>auaT^TK<u%nx*eSVS#?PK|    PK    A             G   org/bouncycastle/jcajce/provider/asymmetric/elgamal/KeyFactorySpi.classWWV"1n[kM"

"T@6Y[]3ɘ {k7otȱM==/}2(~{ Ze(/^EůjYto(PRU}J꣪6+ntدN2TTfD"L#4Ӽm&Bj@'!`*a%ԑT"UU2F
urWHM
5ad9ECD	J)\uM)̌<JgG/43Sj#U2b=NeNU]f[CBJ"lM[LCՂ154KWiDY F1~mN	F^M6'J jewq0".Ɍ)%,Bg*Xv`ecWN*CrJr8xi~\7%jDcladbT
N@XKu1)]@;wi|"c1;Tu<Z3-.Σ)!OW#]<{<gLC[ 0md
-wvu;<znM)j7#D=J
j!U@J4bJ(Q#"2OK[Oz]쓑9
}LݹmD).wCNDTQ#VD}"E"hq@A"DJW}`EZ}sCboʷSےbN˝jT;.׻ldlDĢ[N6[qOfvz
Ӳ
)js̮{}!mg's`2<JPמ됋tYghmݗ.7Ak?y͝DWbМK3O%3Ql*txeI6NMW*e%Vn[5 qXˡ;0*0I؂1	[9a;2pm8şNs8#a3%p>_p2<apx"		$GO6`-G7BA؋fGqpxË^{`pz^r8'S^tq/I/z1apx΋>9<y/N'pK^Y6נ1ޥO2}39?Q~?"^um#5b<.XeOwڿ1Cɓ6y,|CJ*|OR]m>.3l;\6ZV2m^B"msu>XLzm"ex]t\/~=|)vǩJӯӇ]kjJo#&ir$Wn᫸hm>4k·4f
X"q_wL
/]VT"d+Q]GKx*^]"$[q2ocZF2[xӷj	-m@Kx鄼(EH~7a%OrJ*mcŤ?PK  r  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/elgamal/KeyPairGeneratorSpi.classVWGD֥*Y-
Ő 
ZEH69,㲘~cǶGHۜ/~;!swwf;sgn@k܄@g+O鞒0y&2vyzR¤t|%X\DU	:w\fZnh2LKjp;yfsXIIepw(q|Gcy1S!s[IMFv4f1Da/ng-0-%X"M
sR0o<隶%ajJiim5I](t'tm-6z!J}	ڌRnՇS96s){"ʝSin)a8QacMiV/bpL$#ѳ>~9z+(3-y||dVpǪ:׹ts;+eUqCFUH8,{̐*OA4iJd%ݶ6U臽n:R	k#L؛)Z]]f/Mq=3uoٮ+.v׶J]$*q=2xJ>e<-M322e<+「d</CAUk@ǿDK_ma#%;%ƙehQ:M1 Q:	i#\npTe	-kD"5U:Giw`&V_.^2DTᬐ5s&dP?ҵu[.-P
1"r4Pq$JTN:WIJ;/kVil<WT(hRqH.4*`XE#*V

*6'`TVV]؉*9*΋VLxR@&킀)L
܌"%/	*f«

Ջ))8C#Q .~.TpcH(8y`HۂAg᧔^tGu~}%/8G;ECFj[?:OҎzR)HWO& 
%Kch/ lsevp#m_R%8?y$F`d76
 O0HsEM
GfO-bEkݔ?=$q4֕ñءe|E,>% Vyj,OK2>
QKp3t7覦La)Q@\gXM=DsKC)9D	{i?\jIAXG%r2>/q2 0a ֕9,nXZ0(77]PK4V  6
  PK
      A             1   org/bouncycastle/jcajce/provider/asymmetric/gost/PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/gost/AlgorithmParameterGeneratorSpi.classT[WF6%4&ri0P\
iڐ %n"o-dNzڞ=9[r6	ٝ?9GoCa{znl0,u?Te_\,:tý&$B!sea'eMKۮ#<!y4Ð-!1zA=[KxL~ 7]Y!tA.ԚfS=g vE-9(>?V{-ʪRG[/tKs$r*V~PE3oc/N豰/kׯxvAX-з#E%7%czj_Qqa}Ff|VYnAHk[]tXB2Ek⤨T!cf?[tgzD}5XqpOCBàhᚆ!
5pS-[oglV&1G
ھbvw
/pZr
GHi>4݁{3BՑ4OL 6wZ"=*J>2;i(n>U7'l~gM>#m 0I\Tb@`%>3Џ
7g {ʺB/uc^Gu`IǨ>#cxĢ:+%Z'O7:RxL_[?|ѹ/oݢQtbXfX$!i#]ǋ^!t̶PC?}Wxr
t 
70Ocuɷ<V_IuǓ18A:ӫ5l@sh9QZ:j^j7OְE_u|[N
^" @2=VC~3xAɇRSAo0a?LG8i~uPKa  
  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/gost/AlgorithmParametersSpi.classVSW-	nBPPt}(Z,K	|DZK\Lv߶~o8&N)K;?͋)Na8ɹw~qϽ? cփn|xpȃz=xM\unv)j5AQB.81k!3-T--+gFGC2ʢ\os,)^^5XJtGTj2Y2J&u'+tΒ nxRrsj^j{ZF^ӍbTs#j%cZJbYY<4MK(*|&##7s.U1kgD[]j-"TeeE[eM	Q{)/lZ15CN,6iJ \_ʯf<+Lf>YgV,2C1u)+F!gր SD3-EKR>އ
}Χ4%WvVRYW6#Ifӆ٫EK#ZݏڔRfx
:QL5"j:@
,5]5c%ᾝKSy5bӶdɪUOV&6* 3i[`>9n@֥|,'.sԍtxz,$QVLm4%fHS]SyAv/jmQqGfODk=Ozs_7\zRYO09o",d	mpZ7]nʭmy߃Gۮ9zN/.Bi/t
1$԰"Ί8'e8/₈WFetGk]- α	wVrhz[礏TÎ^/Ss̓Kʧi9߄ۗM.h-ay[V
\p)8HA	2%FL\E$\e	'qMQnHx	7%Bo<n{1\Lq1w`^M.\^r
q:xqi.r[\^D.
\izz^t
v-%ywAɭ(FuSD@?I/}Vn`	=qsm~	E!f>:])<lCѹɄo	`6.)PO|{9dfp5DGhE|YB}ޠ}AZ	EC">\T*6qy\M*A6"\£/;ч?}ka>'XǛB7ں$Ǫ:?(-\I%߮w
-CvC"۹{0џ=d-2Ng,ç(i"W]Iyы	\r"uu]".y'q'b4\pܽA{< D	O,bpEˑ+5-7x1g:7PKLIQ    PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/gost/BCGOST3410PrivateKey.classX	xG=&$cɑsBl؎"֊Y2{7w҃Zmh
Ӑ--wK[zߥH[[R"_Yμk޼Jx(	ŉj'9/`oX7q78VhlhgjECYyy86$M[YY@\Kܾ]&`cejzaMpb#XԆDآA"hCƢmÆ!Vj7'H\`KED[$$pnHjjh}zxDSuuD3x=GH3~DB12sD`MPyJYB-"pH~oM3D5±*b]GTڂhP-m[Ր
O'P͏.x<FxLۦFUǤ6w632!O]2ϫ^~\
Ng[x~ㆵjjJf4!~hPwc/{;5Ot4a&<RQ!_GD{bD4g?BjM%F'tAPAq˓]	G$N_{8ZlIk`珎pbE1="5nD42KIPʮXZƊov6%rtg3?6|Ov3)gH/
}V_׼=,j-PH;e9
Y+
h>X8IဏТ9a+[pD&H%~ϜѯZ7F[S!j@ˋbe+!d3Jz)+77r6u.RXY*]zvZ{_\phv2˜LwΏkzXlҤ法{+)3>-
ǗFJۈOZȮ%r,;2>fU%HX'^R	 "*qWJ\%QM]CbDHT/qf.VoW=ěO[zFUF7t[)aE;,6RY(f	mƢbt~[SlQxˉWEH}]YJ`*.L[ZWLMZK,vȖͽ+yFe]UK`')?*)d,K-Yneq?vl_y/<][dY43_Ιw[(zjT 6B\d[KjYȥPu;_sXI
l̽["lǄ/^W)XW+X
nT*XȰ	Rp*`pS
WP7(8{ϰa9{laX[,m
.baC#ùx&nYKp;6
x'3ޥw(8{\{,x~}
>uό3|DA>Z]Xbw2|/=p#>M*>>O1-C.c.Xc'ea|څx.Da#x(	8pEa8%Fmn.
op);3cǷ܈n2dxn8p܍&df2ã$1G ǕTj`w::"FT}8B,v=}"i|RIҳd$IfA)q`
}OBύ[$ių$=[!<#GOaiij/Nu168AO/}^Ha-GYβGjJ/S}7
ti
NW$̙o[$~RQ_qagK}4<#X+knbӴN`Q_e28Na-1n	
8z8I;%n
sX,"vP"v^
 QTOG
?|$L
)vs娤r&2>fy{\Qi0PMboLIk_^
ΞI8zGYT2tP$i|O>\3}d|gidaQ%ӹ4)<ߦlJw)kKl|F$-qЂ{q8/Щ<sݜl9QJ@A ;J-"VfbF͸žʴ9c?*<`tsJ:,\<i0)>\јfˌ׿ḆK:&Ȗ\FA.˽4czq7
]zƛIOӉslŵYeYC8g!?]Ӹ;/S#Ʌt
He[lT!cOyh8d-Jw%u6-ɋMb
j	Ysa1Ode*/.S-!%;fydFE.}wCXj6HE)0ݓlvfut`;&fUc;
mx]n'+Ϟhd'I=ӜLbGfgZ̹O<^?PK'H
    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/gost/BCGOST3410PublicKey.classXwLlX@!$P6I ,id3Mgg)GZoR
mk?((73dwM?ʇ~{{ W1<ŐWkzM.Ƣ;f%P{cu߿vӺ, (ѩ*Cj(i=f)bzB象DDޫ4FjTCM;]R
U'ª( 	H"Zj0YTݿSC]`,VL.i@L`ŠZ,:EQ	mӇ2hPA:UǕj
Ո[v2Kx=ů3vlִy,npՠA%>L>
i#JDUi]UA#Jej<:"rDi1}ѠjA2E2'.CW{	ñYenFhQE0
9t2D԰iÉ!5j8Vf0uTr-JU$Q}MZ50*W	*ߊeq@MLHPէģ}]mfm@cfg޹Ӭ9

1_9cӏk6TYRk+8J7ٗVN|3dMZَxNvf
*;T"n]3
lV"wE6A"i,-s'-찜F%(A;3MfFY&NMezΈj!Lnt>祤-Réyw,u<U3?G5Dw/wR#4bb#-X}$F
bpW2	%TKX#$Nz	$lP/anEV	
IC]j-ٚ6oKeX$%gmXTez%ՙTfJ?0]jl*Ybόj7GTU%|̺;tmH3#{CN\msVmzb{lS6stl9!ӻN˯;r6"[ffPX*,egLx[u;ϡ$+N[mf{֙{RzOuO!8_\a˼.sW,
;
9PY#krFcgyax-d܊WcPmp(A1
E2v1@b(ь2v#"c>dT *c)+J23ba]]F#2Gx2 MofxH2EF9*cƴ3Mxg	]emxG<=ЉxЍ>A=؋cCe=8O3|)z$g}8yAi+ /2|k	O2|*TLSq
cxcxaҏ/׽^3`S"	B3~їop2͜G$LD) ~zLh~y"nG1q 5IßL	=I._Ӱ`Vr`%sx^9DEVԹ?bc66<71a3>BH4fF1|wWZiKi7ܕ
]*h~<;TQp<E;,L"9y
	t]I<s;_FhU[IoVC'WB@B{ ^t\M	-QJL$Qەy4?\@e͂bYb2f?ÅVk(sFQ%\:r~q]˛nMTsg/#x<;W3^*	h/`mM oL:m}\'$@O.o%ÖQ(sԙķ3t,wH{qT"( 8vQo)pX ^F5h|BNe܀$&ت)Y`M%:f3	m\0C8~v	驖	x9T({mO(ݒfnc_
wKke^zp8^3)qHQ]']'MXo\3ovq]a]SݳV,pYW#d)Ɂ1z꽂*xm=$+Rw6 :;{L8k^2S@j'܍CMOQOզc8W.Us1Z1I;3mi_Ϩq|vw_PKu$    PK    A             ?   org/bouncycastle/jcajce/provider/asymmetric/gost/GOSTUtil.classS[SPM
K媠AP[PBtq4=iN_Kadrhxtow=gO >HR(nDqaPx*@0ݧ]X!Cʖqw'D0N+_,Yb`G*=ck0dr$u6[u-#a{>b%Xʺmj;7(aխrtV{_en7[l˫:sȏTb0븦Vp0W6JMݛ{ܭ1,tԔdp:mCk
eNk|2XGmxmuIO/Mg<8iīTe诶.9[^; aPa	%ܑ0&a\]n"}uu%6+ALS}VhC	8ܸ>
&#V~*AJ}ߤBF01<V`32&DƔo(y!K LV#,Hੌ$慡i<SP)a	K6	axvnD0upN
XKYob5L79&
OAxXx!?ZX7Կ>R0~Da*A\/ӤE!y@TNM+PK+    PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/gost/KeyFactorySpi.classVWW'c .K 2(JP*
Faxā0g&hovw?$rN_7	YVww}/~
@?~cxD*aO0<4-7hsJB3LahӒ	6KAc1op;HZ*Mof087|6a]aO&
agX)7ؚ$ɕHkIaGD/QE4y4vh]n񝧢DeހHAt>\7qr}=׆iZ38Ff|̶uA[TR'Ny5,YPI!%K̵
3I9n3FIbF01G:qhE9fR<6M릈:kM=k=h\݉3ۙklKzi۪yN-Zڐ	sb{k{H-nY2A@,)m>骈][йJXR!D5`*6[Dǧb3bKrNOAȦi(lL]˦]6"!HFRh ^w`t5;jQ8([
֧fW)B{ꊪV KxPCpP£'$<)!$]BN	a	$tIfOn0
LۯsdBmjܗ41	/A
mJQ(gpeZ>tSV AԽjx(0x7Y	lp,深Qga/"pu Whݿ{T
ÑJWOzQl`َ1ov1ޜ3Ln@pK#WCo{_Rp !)x c
z1.>R	/~xZ~=8
S7-ༀ
"&z3
d\@y[pY+
Y16y}m\	pe#0dER08EǱ pC82N
XpS->dd.`N ьLFa yfHW/jKY.z{ųZjFQq']I`b]	]2j;rg'f-J@s/`ODW
|MoEda//|)Z
|H><"¿-ojU'qˉ'zt3D=;tFBm泓0Erxwu
@So^(RQw'*_ʗ{2K"ZHUU9=OЫudkv3xlś+P<Y9C닯a +-Y NRi~q@.$]Z#d#"PK$kV    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/gost/KeyPairGeneratorSpi.classVkWF@PHI)i0D4$)F1
	MO=圖~lpRܙ;?0_Є>M4M/ėzbNb[lgQ3!yI>Hqm?Ҧ.b߷hcxqo9lIz<_4Y^tv2ثE/A@oL-mB
_(um[S]vk&iæF1:xm	8)t 15{wtL\+kL'wMFʣuyV-%j é1I3bN18sMK0]0
+vBY-EQ}i}Dk4Pr9&WeHtr
um]g*rL2[HZ#SY̔01+U
f?NRD|D2^ۯ^z*NDKG)Ki/qFK"zD,WY8'Ux]R}zתkBd"4qts*ܗ!YG_y)u4f,>SG&
]<p*x⳴JڷY.#+(%~7ˁs;3T!Zw@Y6A,3x6S;iFVdQFD
xc2pUFdc\F2Z0{2$\!sm!o8)'q#f<-pm.1f"2p.qpWyS(t.p5)	pO%F.)CBIUHNI-Jk [㞦ߛ2Z,8OFzh["oYp"X% 3HGRpNiR1.2J[P]J.GDc:DkFH3T)+ݠd÷`8ǅz,>Ŧ?>SBS߅Y6-w7bѺH./ H_?!?'h Bo3򱥈[|ZI!,;dOg)xkOpq~}$"d>.%r/~-
PKd.]    PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/gost/SignatureSpi.classVWVZv6Yc;M<jV z
6e5b(J#iM[<96/JJH ;s|w~ο ğ茢;^	dF	rn7#\kKfD'7̍d8Zᝌ<oٖw잛X2Vm+=cscB,!m/0-%r+Y²gļlµr6shcGf/Yes̛2cy7f(\%tnfc-zDvKbXVB, YU_.f
U3)8,qZvN0ezshcP35Y?HeP*=Ǽ"A
1lZ'%ca<TҪRy$vN[5Yѳ
<wVzlYmvv.yDS㼿&0,9W2Kkw=&DH55@%XimML3\{H+^7]mj|T8L/eg-Xq%h]V9vJK_
0c/."<hHr锋^A̩AЌz lϘ_>qrhpCEw/vbLW9g]Kd2V,s(eZȱL-Wp}aKFyȕg%vLh;\ZHlԃq5J}!J`DHת+0Q*n+e5ol	Qy;GRpuZ
*xRS
VpDARA)iG*S0ข
N*xF<
N)8};N20wpbAh
; 5HGK?Mo;B޾݅w߮JaLm8+\=e:kM8@--z.$O7n0} wCklnoJ
,Tp<LPAs5(EC3sM
.VƠY/ة*UOxT8d*"*^"6b
Bqg)n3TƼ0U|*:S1%uYVl}(8\8\11p_<Vx%Wǹ@)F:]c|)+&ߊ*]彏kqQ|/s8.b2s=β"=
Y}Ї]QlBE3>*Z.qH<$H;BHށu``:޼ר;Mݷoƻ2E&NIJn"O<sSRO6s	gMdfuq
{/lkޡneR"*?Ch-AXL[f!){1n`Ag~.ԆyZҷ@~|m!6>&JO&kCM\Ms:dPC@)}j2Vz6$z7x !שS}6;cw7ڨ}gk	9߆q̽(yj6|wZ>*6	Ԥ;=YCwODMr6+${d-LLheѲNur;:oDdN;}[wŨu)8H[O_֤@6]IA^,d$&	
.Ed;Sb6q~V~TWqZDOfHdY𺊹*^H
Wy:NH Nq&v!> + 1}XA6GPKv  /  PK
      A             0   org/bouncycastle/jcajce/provider/asymmetric/ies/PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/ies/AlgorithmParametersSpi.classW_00,.ZQ $hm ѮᰂF<2;IڦG=I葶h]#mԴ5G6w?aߙ}{~Ë=>a}hak}X+}%vƦ<(tYVx2=uE"bkvoL;z
XcTx03G1jE䝝=jH,Sj4hӚƂ4%YjPaA%7LMSy#AcdL66I!,Y(Wmoh>$O?wCT y{m˦[q8<J,FVR)UVŌnq.u>NnA=HM<-`5]ݥ=JWE%HŀI (LJbK$ڭX꣦우NT&B~vkQռM!J
v6ؚS^xO쀖*FtV([Q͛Ѹp8dΙ̍JDm8nF2eE.)~#_IQ꣝$T:iHѝkUNѬ!gƔq%@ωeiBa'<=HGkbY]hz]arH5F
i֒ͬ+Jkj
XоG]Z<BKY[*fO;gL
4M4*nn7-1+aQIZ"ܣq1|M*E*JWOn\g$:'԰bÜ.H
kZԯ2PS
ѻ~qSiٰ8o%kS_5HVu
4ll\HĵEIl8K*cQ52qʐ&AS5Zܚ04c`R5#mkZ[7e..%$m""^+b׉UD."vSEDD/b@oWĠ!DPgtEOMs;K.3J_PNfV.$p} ,ljsZ[Jqlfmmd1t@OC]Wln<Y2mIvsQhϧ9ݺPO|f/)nZTתYרYH{_ܴ\ћѥJۮQE2^i-&az,ю2nap=je2^Ű~:72c0.	w8,ь{dlehý2nƛd>[d\2mo2MxdxûS	
ex_%,_<&.(>>(ôpeqii	c,3_d>$Sa×2|!+!%*W$rr)S2|$'>*kC7CՃ=֧#P8- 5DWШ<WޜŷOw:2ԅ.B蝂c_T{n%wp$:+6(=5C~:P:k
|/Wnea#|4^p6?"օf`{<3H
,~ů3x!7~9OH/I4u,^"[?V6BrVf+~4xz
q_/{g02dsNȟT@2ZEmaǮP =",z%	ʜv!{\ZAIΗ/s5giv/jkM_*C~qRMM >;eoIně]CaPCOrI՛CQΞ*~3u93 -3y}-(;2엲9'^\:DO(?T>	wR@ c~Qg'<P9f)rGPvP`c%eݎ)tPD_b{~WlBB=IT3.	T\T`}Y420sPQ(z=ŁB=tAv\F
VBrJ0_=L5
"%ԕhK(e9EꝻE!wI襑[[rbWoAy{6]̖G9<bC82oyikPKS    PK
      A             2   org/bouncycastle/jcajce/provider/asymmetric/mldsa/PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPrivateKey.classW{=+k
<6&d&Ł6lD`bS'fͫm&ϤM$	i6%iڴͣׯdْj}{f9w̝]߷p@ 	`m 
fuKGCm'T[z<TPl9ѩ:xWp*U:LMX	G1p+n5uFfasܳDQRmrONW$f"  tZhuk4)Ԉ	Dc+S])bGF'LUP/ێc304a`̱'$Mc.Z6f&ŷ~ΐPzc6F]lgRЈ5TI\0 D$*ȫ浚DᏞo"r<8c1Ii>(/PhDM]HQ9
L3"bّ#g
3ZvB\=dڍZ݂f3.㑮HmZt"V{%ƹ&rDyL[ДVIkb;QhL"͈H%"SF*0_"!&3b%h]Ƅa"]Zwpʉ}Ƣ)IJcx,%h"/e.rNRda["yڈTҵ0eڗOPgR[8Ak@WqzjREqűtڳKysiǶF4=~Sc ,O7kwNܵsU8F%Rtk0TܡNTqU|JE{TUOŽ*SѡSE*UPiUۢwmW[vDۢKŌo&o	մPxQyޅwy^,neznKoR[,C)qy.uKT8儹IGW)7b7]/s.ni2Q|zq#z`,Qw.(_.˿"7YaX[ņV|/*-^b).EMXqtԡFf-;01B-SV؄tlj1 [6°H
WGgusQ1=бO>t܊s:ntlWb_bx/k8ga1|GÃ!~s
8C4Ҟg.Ï~𢆇𼆇=_j,53g!_h0uo2|K@/h8vwPdkOdzF]aɣb4nGhZNՋz(^8uT?JʬWR^d.-7GdHSA,.3
g>f\bA4_7SẸԻ;ށJ_+p] sfWJiɪ):
I)+C/j:F.`c*FBq1~ӕӞ_^f&]5RPY	2W\$H^܆&.\<?5W02vU[rvqUx).wsxC,,"Sk码d^xj"xhR9e J(;㯕3eM#G$cd29-սI*rm^,2Cd3MPPIpcC;gM+ZRA3}گ/O J$]A_\nr#4=h_5̼hGqp RAZαfPK+z    PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPublicKey.classVYSWQ-D5jTQbK{l&fbRa*Vk~T*vۨ`*]{Ͽ oD"(& Itf4$^+Pmeh@@GږiY	e
Q	'm!NA Pa1X:ͭsx3I;y(׽֐M'˘IΒݾp492.]2ة.a5в$`iqvR4\Yz"ǙR'2=.rڨsGZ#WOQviut<%amn7HJgBaugY:_i2kXk5vٔUJ⮚1kpK0ܡL=<M9y65Qי\cCvk;]٨5â
1ZK0L4]Hh&
ʁOQ?CRfem>¬B腡/=;t3Fab1f0f:OL}Lq0Z_&8dıq#|r:z3W1GftOuѽlt<;7%)ztVͫ4P"d(I62S.e<*1#c}28@OPb
GO	!+O~
|цN̫wyi33InxB{]F\`rx,hӢG5r=0Z 0Njuvz{o^]S*)UP넨"JX,WqϨhó*6bPCBlEf*TC*ZaXQp^E-LkRV9N"c
b\AtE!('ī
<!Ⲃx^7Ye>42B\RЏB +
%	j*[mcfJC|
xL?ҽl'	8QL	>jH^"(+ͯӸtU!3bdSD4ލoZ,>/EO,~o;d-pCi`sKiZh9~bڝ\oX")qk<v%q:jq3`Y|;Q<OU$yJHFƊX̈́ZШ:4*%a
B
+Cu$Y-(Y|~8&}J?AaN_/kJsPlNsv-y$%_Bc-t{,~+'SFDbiM{UFQLH4eS>Mټ?op]Eteυg>l*BIoƓ,>sl!tmx*	)3?PKvs  
  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi$MLDSA.classAK@4mhWCeċ"h=T@Y$wB~VO@)=x3{	h<'tU
8Oo	w,س^ܺ\K!YeʤaE!Qyf9rEȴRCN^aэ_]hgxj$"ОLS[+-NHS仵Ӿ$g68p^c?gPK     PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi$MLDSA44.classJ1O:cz.\	.Z7u\U
@ЦdtSP|(13n&ph	J2};]@3u{|=b6I&D|ʙNAǜ@(4E$a`'K'Jx$?di,唫i_¹?#5W&_1L
%Eޯ٘#k}E,9(d\ZeVP
As݀i-4vYC-Z7mXQak3?|X7VPKD$  ^  PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi$MLDSA65.classJ1O:㴣V]\nB"h]T
WCLC27MA "8lXZp(CؗqIP	|ojz2yzĚI&|ʙN|Aǜ@(4D$oQOCLŒϦSq}	g \356ll6		duط?l]"ʲ"Q
A
{i-4vZCeZ1mXQak3?|X7LwPKIK%  ^  PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi$MLDSA87.classQJBA]Ifק B{삂 $8xFέgՋPQ$j57{0/o A#6NՂo]u:Im쑋 GsV[Vz0aqWz<>L]κ\@}2=p]*ɩzδݐ=%$If=\
"#&Ҍ7L13PBBeaB`k
O 6n
4Mc
$:擘B
XJ!Exo5A3jZhl!m"fOjMLdw_bCF5)MݑMOPK{!u0R    PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi.classVmwU~n,MӖ"/@bA66]v7~#GxMBJs:syyܙI_7QlB(NJhKI$zn$%Yڜ.A&JNiؤ-M3VrOΜ8Wt+k
+gZ"c,	j(	\,Uk#',~`EԜG95B(^Yd,FzI&Mbo]IӼ,p%N<a)fYKY%=of)hZ:ce
B[6eChkL^P
kɱ YPt	ɍ{).McN78H.(W\/sygEkIn*Mc
9yahs	mI8b24-;pqC<PT HQwGw	u#ǩ]em-9Ze㋶	UG}ֵG֊e߶Nqj{Yv|*ZPOj/:YAD0{)Q!mPO2e쓱_eqXGe*5	=2zeIN7
^-$[[MmBOFmqZd=3Z5='Yu&O²0!ؕI7Of.t'QLfct 
$66@5&##v5QVkϵlJ;nH7Pp=s*cRE)㢊cBfѮOY ؅=R*^qIF\Uщ.]&L3,
AW0d
 39&9#q>dY[}&0ɢA82fgy*LY<(f|XҝB^ _uCV
1D薗!iw{+=#UUUbc|3>ࣺɱ3!U6)!~w<tobC{M
oap~:6U*a+vDX&*/l DOqSEs]!H2A:?Ko!
4q) uTWU:5:M!(jao4֔XUyO5[X{_w~}wz~
U:R	H!M$5:I %o܏j\,Jp+zB"ztߤ
UbķOmPK    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$Hash.classJ@ƿikƨBME,Su3)B'ŃCɳ3foO Wq"ot-!J0͋x7j`++kSouFH۔%;(J񴜧wKjӤkMXGA  q,sbt!Rvׄ)YEba>ެKHUfVHk7E;{l?wDo8zFPK2ۣ   Y  PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$HashMLDSA44.classOJ1=vBpъ+JJXUvH3Iɔ$*Y\~n{y{y`l*RI{B%(a&4
 z6LN3cSAQmt/m?)!L8pA:nEejib;8e?9mqx({XP!._𭑏>Ш_GKnƗRBwSf0FagF/65P}3V?1.]P PKF    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$HashMLDSA65.classOJ1=ivBpъ+E(-bVa!D'e&SgFpQbZ\s!6ƈ`X*iOdaaa>H&f~o8S<DPfT*i,DpۏF
mz?(&\Щe$[Zr&*ιO΃$5;gN|ny(yXH7]V'6+:"#ET}P_EKn	ڗRBwf0FagFqu(>a+u.Xk| PKwD    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$HashMLDSA87.classOJ@=֦vBpъ0VZHafB2)3ҍiq!F^/ιW X'(6clЏ4CN&u[{NyI8eZ<0K#nW,8^\yrD@^þ=)Lro*c6wJ	vzwEG|s좈U8pk`BNP;^´[Z̈<nc^',=cfckPK`L    PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$MLDSA44.classPMK@}֦? xhEX)Bi"f
ɦB~^ 	=ٓ
o?>8"hT^xwi<C@I'aI^.g+ΌeFy?/3m
eL7V22.J/2QTE!D뷢aܖW`4k]<t=xčq<VsI@:Bࣇ>|t&e*s#apzZqj뎛蝽ak̡}6PK
I	    PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$MLDSA65.classPMK@}֦? xhEX֋"!X!knVِl*gEGГ=	|0o9}%t.L<=+]ϊ	ʌP%0z_0G)!\Х.^d"(\X-93woEyø-t-%?hW<lxh{N׉kIh6撀G[]&hDJ	=Θ1մ2Q=59y;v_W}.W[M?PKQ2
    PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$MLDSA87.classPMK@}֦? xhEXBE(-BCװݬ!ٔUҋ7'{`޼'s4{9AJ*i	$]	y'U{V'(/9365JKgapHa"RhC0Y[I9KK]DhGQ湰Zrgߊq[2ZJtyגFl[%ߟha3@Mp
z1ciey{;ksw쾮0.v] PK /Y    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$Pure.classJ@ƿik=$^6o -B}!x|(qS<yv~3	
30N6񍮵%R)v)a٘ܴꔴdQ(Y([tFHU;J^fwKe[MXG5`0u!wRN"cwM8H&LC8$M΄hUlW|\ `cw`r
GPKjC   Y  PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi.classXxt[Y lɖ%	8($n-};VJp)6)IDGaPRH)Bz!ҝݻ5ɖ͛73o潙oQ݈s#ưDDĠ!P\U}Wl(Zh@po
Ӱ
ٜ$dW@kccZߔ7xƀY1L_ѻ"CтA=_^__?iN
Z4D#fL[c@nK7f{c!jH<?/lJSlk>9ޘf$J4r-ȱVkx 3!Z궇8)+D0NǑ)j1mD$u![J-=67~l,-)`t߉Fh'4$۵άbNo}MJZ|!xgFP?hZSMӏ7oWi<m:˙t%38'׾3WnsF܉r7"z2"&
k?aMr:a}@,ZI}
X1Xj6!|{$)]F!-lh3X-coeM6/Na`qt,0wO{9i/oߘ+;la?/}@5;ɳ-"<[^>E"y2|d"fp$ŭf5lYGH7-cQ_X4▿#ЛAIҐr ~ä2ݯϾJlJ'2(3hڑ!),[cĩwJۙ[te̍&Hy"1vz_t̆0{gV=4&9'g$p笘L=8Y4N쵯fn:zSiS,o#"_#]LHG#P^c#Q+ׁM.StSz=6-KmXL-SVG*CtEx*4+8XuIm%JYHE\1l4#W]uKe4#sRcl7oЖJ@h4-aD)*nX,]bN]%:$.#)%W%KI\!qK%^&r~WHh$!	]bĀa!	tfX7	ί)_w$._TFZ[<9ªΜq˪Qv,#oOr;̂EUX_50Yj:
!2v0kaضR8LW2`']i&vΓi8)Ik}'O|b6Z0BSR͙r癩fЅ3!NQl;}W
p8mB]ͫ7ЦTiN#_$J)d]'OgrMHu׌Jr:KfDFuAOcn[Ջ:yowܫ3)8̪&g[Lc*Pb#ޣ"ЂQ63lap!ŸEEK.cXUE;檨<5~z3l`hfX*C*OE+ޯb)nUa>b5UAGnc2u;<T'U4gTL1ܩ\gKE%Qq>qNxz<%/{p=>p?܈U1<F+s¯\3QpEepG
<ױ{G`ßd?dx_
ށT1<Óf/xeM÷]1<}0c;
n[1
ލ{j|'^?
x\	UUIG..Kۛf}Y.-rM|WRcV%Dx(;Ɗ[S[jX-|-a:ZS{όn"D=G(R&\ⓔEKJ	Am;='y$[ b>8(V~E(ܫǅg&=!bOq-hwݸ8UzŔ>.p%DXG"z9!v~֟7%Y3FEϓvv,m`82p>=5}	1'E)>Aq1/!|d
{uxz!B<VJ84^tr\]][ܲż|@q(%$ĂI.i;Gs%ivڄ9FȀ2
Tq^qA(M}ܩJw`]R$Ħn"VT<Z{E+
+vh_]B;9vXڹ(~*\Ɠt^)HD<)3VA~;^Lby1Zȥ:'
V'XfϾmrb,+0(Um9i-[`Zh\dvM|\{\ZN68̒s39LbI5TVpVҳ&zӘ--%YE	/j:ryK(y!^MJܛ<D^2
`Rԍs!QJsE.)4*QzU&GouTw4%q<Bl/e6B}2E!#eɠ͠sh\|#K&j;}3QjP{eԾrjFYԾƻ?PK
i_
    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$Hash.classOJA61 $B75Qa!q2l&΄Mp?˓)讦> \SGPfX_Za<O'xH8_ʍA7y!\Va8nҫ8Kxp>nmUdS-J.+6f2{D΃	xŋ4N[e|23;˰!"t'ۗRiMz6*h5@P&4.eQ*C(7 
v8;f&C{ߎ0,G\7C4~PKb    PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA44.classJ1ƿ]iaoPZXthSv7K-cEPbBo
fLf?>D8d4[څJU~=t(b8̨?v<֮$/\OȊf̟,6OJs5"Å-r$Ob{*zBJɈ\~x9f$0¹Izzy<κ+Qse5kb;@jG!Xn2kuqRj9P?};^˞SսN.ܽ+ PK 8B&  $  PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA44withSHA512.classJ1OiSm"PWPW0ЕPbڔɐLX\ >(p=9Ϸw v|"#؂Q#\$wʟi7(+q"UDذmidsHp>ySL:lZȱД4E%a`woD:`R_Hh(ǒ`{yfn+obIA_~Lൖ6.Jp]V*kbScAPC^Ev^V͌]dlylYsrWԟ76Jba=3/PKI~:  D  PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA65.classJ1ƿ]izQRE*B%CYmqK/zP0Gf0	}Rg\DeC:;e8Ԩ,珺7V4Ү/LЊfğ46OH35$Å2$#{ʻBJȈL^p1Ԧ$0¹Iz({x<TN:KPb!V#f [Cؾeo7g;֒\0+v]U+rzw=5{\{Η PKѨ'  $  PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA65withSHA512.classJ1OuM(B_@WЦLdZcFpPbf7`%|K>>K7'2)5ϴLNy3>ce$<"Nja;mі|3acf_pf@)gS.h\,P$ZrAog^F,L	Xl?+tie77ߤE `_~LЪ/mj]a5lQ&AF'Ľ#{H"vض@[<govl}Fe{J_PKx.n;  D  PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA87.classJ1ƿ]iU^KL6ew$>^>%+`̄}a@zPP.Uuvp43-ɩQYuo*ǭh]9_$	G9t͈?i"s)lH1SgjH1eFIGŇw276T1<b,MI]as%PPy2tF?*C`G m=$`}&nv$%a.V
V@
y-zjNe;<p/PKe'  $  PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA87withSHA512.classJ1Rm"P*!Mɴ:C܈	?'9@;FsDP<O	gl|dлЙiϛFN'.XAܱfn>uHp	}O8ӱ'茳4RBL'/b%9=3w#!BB8TN$	Y粗JHoҐ)f bh"h
K#6rX+cAPcAPM`_fǴFV͌]tsYlUrtWT7&
df9S/PKQ;;  D  PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$Pure.classOJA1k6DxSEԍr'fݙ03$x(7nj/ t19CZn&,kӡ6r\d貼{j5eVFRP(KKWήB9.|]*8-yY,ӄN<z&WF9KWNgS1ccdR!LS20hG;=tg&vzy!I!WD'hM0(2|>Y٧hܡ:GPKR/    PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi.classX{-yX$&(4s9l6ei!ZݕݦWz7>A[Hcɍ@Jz[k|g޾7y3#^׋/X~a?%Եn!	S#|=hmF::W{vϯ =Jj:͸fqQe,>TNM.3aKRA5I{<̧Tݒ$1)KwI%PTKMZs=ҧ^BxȌZuJۓ
tmNב.]9ExгMs@P	uJ
OFJdt=񴣧L	UEHcflouet#)J;[Awýsyq|,o*UH`k`*=SE6M`y&y<(P
Ic4nn;$
.b8e%cMk<Yi'It[Os˻QMnE5k	v,4+4&4uBᴕ)a3v=wu@ȶ׏ҷ|<oѴ.ʁ=УWk,<(hOĭYy[q-y%mG<FծQдkϙ-ijid^>Mx7Ң?@H8T!>OU&@Y޹DbkK^jϷbMst?|t^4FXol;gi^jqRh UJ螌\|f<XoGNH7cNf0=INФo<XUeFd&Va;ba^}0t2dx3!G"]Gɱүn)HVW%E[ba9965-NxaWU	y|!ge
.& no)p[Ipve/IGKMZ/b-nfW5yۅqx=EZeB{,5][Sw/nv6Tfj%%pj˯Wl=>SpcH*TІm 7 `+KA`)8[&d4q1\Tp 
x RЋw+Q,ȝx WЈ(	A!qA>*ȓ|LO6`29ħ!|J

A)!2oɈ)\䲌3LO	uA#cߓ3|WF\ m_qWd$^_K2yE*N{-{?(m_פmiʌXen2˵[P#b8~@=%rrJ).*  =mGVjǡ<~5B	4]龣;MVP[ⷋ IpB/@b~<KiHIXW jpCQvS76y,p]2A!!ǅL0ԖGE@V/_y9\q@u#FFd޽D&( F1'~m7ov_66H,!2,9nn~6Xe0[8)EheRj$)3酸N2G`c=V.p<}CYKK}h+x< oBc<?ۖKyfy^ףqdc2RlֆnB\*M]ex^רB\tǈ[%6">Jo'g*?PK
ބm    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSA.classAK@4mcbzZ
 ޔBi/B=
=n7KْdVTPG[O=
ׄ`4^ϪTnB.0fzWZprɶod*q[tF	V,UiܶܟTo	SWN#x	
'<>	:F!	ݙ$!y)=5˹b34E;G
{\|kgPK`F     PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSA44.classJ1O:qzwJp
U
R
@UP̭TMAĤ7n&p?ps jq]zۿ
/Ma\C>D%.ƂdH*uT`ib0ƣS%"&_~2_sWI	NdlT+
JJpua@ž:;hi|Աbe\lyIP$o2SKRb16=:c6y
~glϰ̴PKD8y  B  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSA65.classJ1O:qzwJp
˦R T
JLCITMAĤ7n&p?ps;^#Tmzӽ.N	$﻽!Ʃ(7E,H,٣H͸)DZ	ck߿:?&tzo6NjCp8'XQPE[1/CK'+>Pc-@Uj'H:#
,{+Sݲ]xv&|O3N{?PK3  B  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSA87.classQJ0ֺy>^	" A&1)BaՈY2z2m},( >Nٍ7Swcl+6AL2׭sqzB7`CF#%N
]<r2	Lt#D@}<,]A
+eQy"VS2ȞD	'3؝\Q)Wi1)턊dB((00	ZάʴRm3(ȁd˂y,Zò
͠+ɿ簯|tY;5?DF^@y֞2ӘQǖƦ=PKq(B    PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSACalcMu.classRMo@}u@wd		T$@(RiY,6uP#Q	(ĬPO^ivfݙw pz1,{[ŧQ][&a 
$H+_(a}'܏y/>
(U6P.}Cu_TaZ$<ױG3NT>Xj	s>	l{σg]Ȳt:;\
TT|,4 $$wR_XXд`[X03?ah^o^JYƇ4X98shrhbm\uac
7mpŘ\	CIC9
̫D1sI?^	4<{c-Y`:QQŀ9Fk)np
,FˠF{Gw#lMqGE@ݠ'0쐿ҢȭhA]MCFw?Uzs0GMsPKٜ@  Q  PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSAExtMu.classSkOA="  " )\E| PnC$&veN'?hm"~Gwj}̜{9;?~~`Ck<'vRʥj٦rmT%Cj[`3RQ}sq6}Zp+Ne0jɖepϥȔ>%_PE^ȌdtpTY5eZ,ɬߧ~y3}ht<Wa|G͓
]e L/gnp-Si@4lg{NN&Bmr?%k06kC)15*ǯՆp@$/ARN'C47O9#{
:mH]C^
g5i0ØWŖL槊x:չ6,-ěW9GĖNL8`BJ#F9viFaq"LSH*3cW15eMc7t\m1)3]u/.4.^A (?/>Aͧ-@QEmk"C3GmWQ:c=UOPJ-T љX`y1*VR!ߩɑ
5Í
Yy`٪%rw?ZGئ(UdU%a 6.cu0iiEGQc}Nj:kuD1ix0 V
S.·PGPK7  k  PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi.classW{~'lN (n6#HDIK6b2,vg٘؋b/jZ^l+l<O_C}<mϙe _.=;F{8Ɛ
BC;;}F HHA2C4JI)_[i=_i'!
4+c	JmРg0%Ȇ5-#mf-	Jspik3.+!<Zސ9kXChFh^ѡ1%kxsY1sGbS'af%--SjY)`TC\-3ڬӍgVe4YYnhsL++sPeG5"0&Y-gf(t{ms`粩Z6ΤaTV#lBg]Ud)hz9C\k:5]1e	kږۄѵP1se^ܴ<Ùt
W{$r)| u5˸:4E}/TItp9ǣO8`]]r|=
k9=UXg#sJW3sGy[\G򹬻՚O\-zpp4
t
tUws=pV"	Ttv(T#AIDQ%	vr+Euۚ6Dm'J{v:Y[sVP	tEʳdbV,dWn>d(w+,@T`	%
tzzP-GQ	/p@`@¶7}&}]pu/4!mFlkJUTybk,Y{&GWe?u'̓QHK(άİY8g8ue0`?n
؛=n{b%*W8O=![i](J@zWёX#+moC9̬PM@FV$h1ֺ:qtVpĠ+DF0hUp7bBQQpt">X<B9cFfW9"Y[.x
xyx
ߐq/HEe/xE	|S(1*cߑE/˘wY|OƳly\b}_֗_c
fZ;R*8ŭSHBFEѡn{W\1iVЦrvPҏ^BL8B>d /N-7;%2soƥx
dpxo	_*2LH=\1&R*^_Ğ'	
^i:&&%"M81ZO?7zɟ%˸m~Re
u_2:X8F21 '.Ѳ8r̿P
S
ޡt
4d4
XQW"^&3pI¾=w>L{>W쪫ָx1rkW+ît4ogvC/29 gZn
<-8)0.hJOm7l4w"XPzoWo[b<GNHq϶%ټlO;}oeO^dO	?Z>"sP"A:Fklͯ({Mb&8 wSdͲ_m?=4v*
ϑHz&gH_%}t	PKE>    PK    A             =   org/bouncycastle/jcajce/provider/asymmetric/mldsa/Utils.classYoPNR6R;%	%dBiYR@ EY3DU(Če!E,^>̹w Rx,A^If]w6$,\5	
2$(zY;eKXnh{hjx0t*Rש7Sͮh&ƚk5[+RB_wje5&>&5َUn[4
еn+%4עYu]4xIib]E$	V3pi7'd(Px,+*8.a8yݑ'9SZƊ\}jWI^}ج$ItNrGLWM8*8b2c%F8ldH*qVΩXNa\b\f\a32>!ƈ313n0ncƭEDAVb<>^ E{Kt>(F| >/6HqӁ>Cly
ke(Q/X}s͏HJ}>b[kWɸJaBɹƄvu{W?P}'PKǦX%    PK
      A             2   org/bouncycastle/jcajce/provider/asymmetric/mlkem/PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPrivateKey.classV{M2  eQM`A|ULB5\	(M"KŶѪ-jSli-A[?93w7$eo}s|%[B!a]CؠAkX_0pJxNګi}:!:ԩ12ɛH:4԰.;k{H}J^~>+<$EhkX)ңk{2̦4+DZ!<ϵr%%s%\HQH{K:2<&-O:w

Hhhu2}"#5똳
Zwg-'%ƕ8Ah=_"C\:-khJOɜ-o>NvtCZ>P_n\V`{]S]%Sa8+b>gɜg;Y
KA\Kz~іgG
^a?Lh+->BVȦ*d2in΂NI\NY9sh긣ah["eL{bV>0"U1KY2fg).#Xg MtVk1뜵|m<CIpm+IRW%2bBTse#wƊYxslTGSv:NW$(m`⬗b+ɘSI7G%HU6&Pq]s7WSM:LZ[ѯk 9?DsH@.甦tp%tkq~{tܬc[tܪ6w;uq:8n::ut8gbܧa{HIJKF$hO#Z"
$oT2B1l䧯_):"@jt/߸#5^3[kcH+YLە	\_킹;zW%t`~T~ M1R]5u璀
L ˨c
e}5V!裱cXR]ӱ5]	W	{bb#1q&֠ĵL1v&̐U&jbD/N#cF&3ar&v19x&Zq<bb'lD5	3qob~`b;~hb+]A<q&<a~3	g
Ïy&8'k>L~eCxC%7<̳;2䂁ou~ix	H ;*?IOX{E1Ar' )qғ[>4<')wH٤_
SG5imh[ELSx)'c0i|`EBeAb?;<a
oEf%dpXT90#OBi-&ھli@L{0ૉ	߇}Qu6`(Qhhl.Mr*Zj$ۓ*&T8[a9NO&ID7(mbtԙln%YY4>+鏖(Bʇbb/J6Qn
tخP헱~"8O'KF.ǖ
&-Jy	.
WtS>L]
4>8 1-"&iLKDyRGd.qJ'7QquSw@KywafU'[}-sPKi  0  PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPublicKey.classVSg~kú( jVA[pjG\V4Dcnlz^O{?Й
:ӱv7Ȫ43~<Ͽ o!!B6! 5Hi_:;d$s+iPnrep``t[i	fO&KPz	lٹu73*1bIg4E4Ns3!!ly.6gw^7;4u3K.sآ|e
8g ֟;Ix~2l[nаԭ`*ipвS˨eff>e6K=j깳voNeAevHœrgZҺz:uv)am~KLg^Bad9Wi0sDk7X&mQVY31v,$_5Sd(ieF۔4y/OSNEcͲG!O,\cs6N˭X11kIj4tݕ߶h<v3^p!VmORDNZ8Sm|#ZU.5}Nt{"X4{6|[Y'ihAZQZ	Z}]6ip;M6}ozJ;tS9:$3	FDW["gΚc廤8A2t]($u2"22e"CMC2!ce2+cG
-<A{_pny7񆅀W7v*\<+)Z#)v35Nnx ֝#/>\<_$9\\,
_ڄZ%3.׹ok2*TtOj؏'TTc{X'DTaT	r`xJEVC*bmBBWфQHX1qVE=kRf%"
##Ą){y!^Q
GW9B<#ċB8
' }xI	)8d⢂x6rPN?34V
O.u~6}lh$1(zPJY>Ht(0/jSt%yF	SB>ݻ	 M }e<DڦZћ"rpuu\
2lo>bӿ$ERjk(/cWQc44ӗ÷.Wqa(:j%jCͤFl:Q#)KS~B-2&EP@lVV-9|>IS.OER\vG+|yz_|^󸶂e^F
OX?VLR70peM{1UAYtJH?>Iټ?6a$j=u	3inߤﭛx<iy`pdkREEW½ PKt`  
  PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi$Base.classMN0Пq $Z6ްU@eS{ZCbGvZcBb8b`Fc|~ƨ65[cM5%txAVƛnQ}8n"~S;6VJ*"S2SZmZ{!C]F"Յح2~YB+.d:"x{~.m"ld5D1$c֌ah\8 V{#NČFݑc6{'\_PKKl  v  PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi$MLKEM1024.classJ@ƿikӤ/ xhE!xP[^˺]tk6F!C("xRg`f>>	NwDhLGNǷR{;}qnU~RpWM
ɌDZ],Ld0QFKgت=ff&)[J4,h?`Q:5C#X$4|"	iI9ׇDo΃|֪F5G,=asg9PK2     PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi$MLKEM512.classJAEo%1p|M_`mh;vi'|n~%vZUuΥ!NwLhUSBɝԓ>ᬰ7캘ܕd3gB2c5qWi-Kәhxq>J(2	[^r˽.@+R6`kp'h"NrI +VZL%!乴iƝ~=~qQuϝ
_c&PK~F     PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi$MLKEM768.classMJA_%1F(D\lCit=X\x %vZUG+ClB8&w2	gްk=/D%+3fτd5qW,,<FËQ̭WFحe}/s/)w[uZ	_'^Xw8A"$1ZJB2(
iӌ;'!z;"g^m3=ak;ƾ/MDPK
     PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi.classX	`S}kdXs%3@$ǖ%E
$)iҐp&

qIhLM>Йl@ٙ3yO X")`i
JR0[s\`
*)X[[]G`V X'z"ذeԺlIaD2WK=z!ߦ2)=;dbZ"u
$2mH`NL!=ʪfpUVjঙyŕ
uҏoWDbJnέиFZ,ORD"Lz@bqlum Fz,o'[T5Fz^-Mй
H,قƊd״Uk5[Əעd$ٽO!==N[hDԖGZ= ic4C+Gu-)PQgmZiSd`uzA["7lLGS`ڒI'2\;RCLṔ1iӛMǖlk熉vcNcέߘѢtR[pRUɸzLOn9+DK.W;lX"qJᬍtL0'~)As,baD%ew;[I&ggvXTJ3Fh6gY+f?)qH4wh5ɎLK7#oc5Ւf')]^-	:&gͣ"WƤDK:il8 ad|%W2)m$c̸214uX6
!3L!#0/9ޒ	w69*2EPfXv0I:SJD%'p7aNcYt6dvfEei)aEˤ;k+o8{Ha.2TAKS㶦ohj]x#=a-EO6#Bh4
+ la˘NIvUUa3#$ZWX&:~A-MIFA'M74mjVF^>Q= Āp$kӅBmRt\u8ư~%ͯE֥.
8X#¥%?׾GŜHΦcWMOzgsTq>(#-A&GdI&>(tXL?RN2.ͥjFO8'd@\R=9l4L,1dImU%!SUJxk$^	MM",.K蔈H$	%)DFb>7IVux%$fZ7/SI5m|>Y{8ۏ`<_hYRU:KW]KEteU [\+-o2+rIvD3bY	>㬰2
ʗ^lUFѴ6i}B l0"y6ʕ,5!ꂩ<<KC lacMC5FTjXY$U (3H׉әb^`1uWXU%߭z l*؟y3ڇ)]ux߰<6X~.q.ZHl|ݹ c/}*BWNx7؃*(UC .RI*3$rk0CE=fxw1Y
	kIlb&`2$ϨhgU┊f|y޳*j[e54*7Tl7U\oyLL~L~-x[/nßLŝܻc_"ȋq52=LϺq~&/d?^<ĽG/z//xfw/>?29œ1_1GW&/zqE>1yɋLg[/`"Jp7~%x?e3&(#5P1h~+Iw5uuVjsjiq|)%U2Yx&-!1r	 L^'R-R-%RQ
XErQ;z@W	Wޣ0pe5b).,'"Cv>X|1'dҘ/&
C#V"
[R~[]},|.ç,s'1\<neqٹK11ǚEEٹG5
DiTVS򹏉i}ySŔ^H)9&1AJT`6!ч-¿_r/0Vġ~1B.?y:&5+!;6KPm74@3AbtS[ZwA<+,0 .ҋuw/f
@61Fl$|$_>+kA!\\]{}BV/0 j]8hP㲈
ø=	hp5i4qW3 ])RCR~1^T8'8ęms٥=W)o[J3%GJNaA/{1'v7+s 5a"l6D%]owK)>C-ìYIf>R>Vw@rv%f[=RN.fB-炮*|JǛɃ*>_s\,j4s|
ClHzGWɜ~QC	C.^NjrGq~bdd_
ܐgi+GB.dx97dfI>wFr^2ۧ8Inyx̅.x^4`<FB,#F4H<8Caq98inAg(Kf?4c:wVܩL4zD
q|E:Uk48w8`-wv@\RJwS	;)xu`ܻGJʝI1pڍۻ=5'
^#.ɬ?@y"5<ӶgZt
)E>D
xaj>NZjOPKI#F    PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM1024.classPJ@=֦UE+´ҝ"HUm"mH'cLdY\~8	BŹs_^KS!>#8exD0Ւ.{J:4*JQh{"L{1Z

-	J"ʌ(k%RΦلWӹ* cA]XhYX&8N<_&
۰:`5cNzRr5NW}؇mnl611 PKN    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM512.classPJ@=a|TE++EEېN25(t#(qtnǹo/ &hv{BtD',γDpXU,)uiRJJQj:3\jq+*	.~Y2g.T R̈*ϹV<3h8^C^]%L 1{u0вbMp0y49!ݿ{MXu`sac5(RNRr5ȒUy؅cK!F4N֟ڂPK6    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM768.classPJ@=a|TE+XABhSnC:dR&ҍiЍs羽8&AۛO#(fQEw<	5^ť8K٧RzrK-nW%ŏ)tpeFTyεYE2*fPU8٩K%mq;7Є롁e<6VZ"/%W,.Kn^em8bQum1`>ak
8PK\    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi.classW_.H12NB$al/8>N c0pA[򂴒wWjJM'>Ҥ7qZd6GMC]]H?3}߼y^% {/a>aPN}jC8&.:+>4BA%ըC-wPp0W񇍘:iKp)NRIѣ-zɤ	5lVFRI&-iڎj:FBi5.anS?:ePAed$l̋z&IDjqR	
nt/ڶ UM-QAa5ATQ-;
TdVGTG)#xmvba		5H'DG
u쩐IvmJLV2A6l)uFU2p#iR@\i\5cJn7%a2XoڈGuKmnkip2ʀ9ƍ(_bq;Ke6E,1pSn9r/ܙ[*k\s7q^>ZmJFBӞbd2mjM١(SDu1Nn"tTP4uJäL9j
*I8)+9cRаehJ"NyFs^+Gn5A䣪$-!aZꊼ
1ts7⁵;E	G	,ts[gOeVV2
yQV3H>	<FejfeRN4 `j9J]ek^
cYj(^mQ:[In1NKBu3-)o>~SwJ9mNMM'7dS)$S`nE]C`>w	t	t8$pXn{z8&p/Kn	;k=-5pp-j,tHscs3ʛb]%*5Z\giVi<`N] .|o\AU{v^
qyܨZ\q{MT.]"r/2|b>%27?*8Řؚy%KDI^Yܱ^{TR+[qb2Bh:o,[1lghz7`[a؁)1-qobhDdH2βKm0fd8'zd!FKF3q;x?#1pO00|_
$>@	@0bcxSs`>0 & ގ1gxa3
~Y63|. !O0|_	@GpZp>sk
t&}S_[o}Q!55_]qO^~*ԪrW'3IH&QqeE˙F

;ڲHVKR@=Ai{Y<lعϢq
K,>O
"û𽮺ˬP3\O-@K:{]"yɁYtEQpCd`,o`~pd#,Y	VPw_.U#β~7r$q] "0x-[#0fQ&$ȣ`})C`$h<C*M2Ef".]uTyM4sGY6,W/̃^"]Y\t|m}>ڂ$$o,As^KBg-bEȥy,~[R۷࡜͹ sb}M0ݕcb{U%qrxX%gz~W{mտѶ|+mTPK8  0  PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi$MLKEM1024.classOJ@=MƷ? h݌⦨H[(ݖqz$gϪG("Rs= bPm'IF)[N.\qSU(i\ɹbi$DJ$#pp6pq)ksEǏ:?$;%)\K#0aCp45G8n֞"QAӇ0UBgL/SKk/E!A.+epN9G=a}t5p}ڂPKZ     PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi$MLKEM512.classOJANb!./AE I#ww63k`?K/?'IEU
[z="4O,.N	a9u	܉[RI[$,JNy<a#-Ӕ+&'ٰgldMGh:Vu~(3%)BWF:]6CÒ&`kvp=PG V0!̜^"eKb.\֪j'>cjPKbڒ     PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi$MLKEM768.classOJANbA(DIk'l̬, ?J,
'nUE+Cl<8%i2t|9&ks'nCJ%m*9U,r񄍐LS.LD8g>67yLXC1)Lµ4鲱<4	_N(BaBxX!4zz2sz-2rY۶Ŏ&PKp	n;     PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi.classWwUMN"K\I@EYimhm5tHNfdR	
++M;<Go&[`s~.onǟlO=h`J_Ә*_ӾN	վ}Q{Cqnv4i{xܴlPة87tZX'lLIo d+#l凒 ~sMB=,UGfq2ؠdk2145H=bZQ{"&a9_
Qy#Xqê9ݰ/zTsZbsqnTՀ@󈪏"g//XVԈPi:Q=̩Q#_|'`79	%)TϘVh8Ur|W/P]+4fDٶH<*a<[o<EWкCդ=v/Qy()f$ރH.njS<MeSqn@UbH3esb	ICKijn".Dm%:B^e(<&R1ъj>cή`@q{:?J@| ]7oj"a|B^<#nۺ]BMV='̹-YG׼:]fcSGE	e2 a],,ҎQZ)q{,KMdawm^Q%iL݆WaR.gJ62f0lbp
k2lcpC;C)wqDl-N,Zp%E/9\SX"_Ѵ>/BTi$(Y*-!KJչW^_UUo-f&{D闇NX;ΝuE ;m-h#Q(ΥzK8~t9 s"רy1!%C7-S)b,Slqgr?ŁwI?yOLmPw(hN-KA-\ ŨQ^z0+Qp!T1QK%H-4A
ւ+XdRA+NW13T `,+ͰI
2-2:./yXeE }BяGeICxF0	i8"ȃ<&cL /ʸ	{v<P@J#Cta(>^.]M$W[4Cx
O]O65oUuK)>
5rVꗳRh$ZFtKB2x;gH_A-^,DަҵCOp"*Z_0vc3~iG'oD,i|u
qbؗdIHX?CPƱVM<}BȒ%<rh%!mC`D$C__*j	DLx8eQFZIMoIpp/e@Ks`,NJhvUu{X %jv>mAB{	'͡3PkVCtʻ|>?l:|v0jR.ew aD0[TC,ca!0	CqI8Ct
UOѥu[iPK
`ly  	  PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi$MLKEM1024.classKJAJb&3^@pi#S	"Jq^tlCs
AS !N	KOh'쉓Y<"fQ<dϩ*EbBMlepaI@1
C.'RkN"3w&I5X(9Dt١<4<lyhz
BNCG61LoR ֲ%-2r^뎪h.ן}WoPK6b     PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi$MLKEM512.classKJAJbM+M$dN!gQcFp<u"`ԃ@f;#/tKBlYp{q?fRҕ)KŢ^Upi&W!W5glei	;/UWH+,{UV mBo&{NwֆM	،!`&$7lJp/7úlbggPKG/X     PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi$MLKEM768.classKJAJbM#7AD@ mh;tGaPbgԥUPϷw =оЙ./	Iglf'gދ1SLY,\(͟2K0h8
Km9c+N
Ma=OշXZeٓh+^ge;MD6~>gBrt!}
{۾ۯk <z+vv|}^R PK++     PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi.classWwU-tV@P)%lPPJKZigv2	I;
 9.
4+9'm?`
~@`<X&6{,OuS7J`[Z6{h3ظSj,A	՚UxjF#ͰnrٟPk1n;Uݒln#a!F;UK4-bl#$^B$]sڹUm誡9A=DusތPk
#PͰ0xX5p"MAl=jJ)d]Y&8Baҙ?ՒЍAN^Zt{~ٶ26fɟ8|Dai.CW4eTeiX0G1{hՆ׎䈱wG[{ bP?;\D6q~Qs|4BL>neL/8M[#<mK%D 1CǬNe~BK3H&rRttL]#"?@.YXb	Z+WRZ7unM<
:%4B$H"źCS;41QK-$
C$l,S:+%I"5Mlɢ+& |ٕ!Ib==t;KPtߘ0~ךwKwK	s،>`zcʽqn{Mꋓ^"ν(C-M^nfX̰a9aJU0ʰam6%S8j9rD!bs4ΩN\p;f7#bv]}0gwgśf=#LmZuWbq8B;դtwY$TЄWPdm<KgvPyQl4yHXZ,ͦ)byZK66̞2t|R1oSe5GAwY9Bd}(w+h=
Ž
n^uT£`SP
Uu!H%`PA
a+AJb(؈0d&~R0qsaD%0"<(Ȩ Wb7т2l2Z O *VmׁgyVv<)#dty>&K.oq=Bh^ыeM.<%2B|w(
D銔3O|Yv㜆YE3,I9p,ECs)*?
RFLZIĊhF>SU/])9|2C1<ȩ ܐ%e5$9_,OC?©1w
WHQ9]Lw͘KS+_R8v1UO
f2\x}
i_WKI|'qMgi)pqD`]FٽD"]?j8ϻ/@#msCEMůMckIhKX]SYѧ&ca6O,&N,'=;YC0^;r6W48<%[-$Iڏ.+62Y
'7i
ʘDXYT{9"j|?#t3}b:Ey-%[;;4Iyj6ʿPKѩ    PK    A             =   org/bouncycastle/jcajce/provider/asymmetric/mlkem/Utils.classSOP=ou0@BTlcc01;%!jG3;۵+M?G+
'ν߾b/s;nral30Oma(QmG'N3L{vşA)M\?M;$ـKqrΠej6Hk j=aǉaN瓙HǟS2CGQ;D1T[E }VF]TD"✊qq7H2?RM5}N%yp0ŰereB.0(Aa^2%Pt⢎\Qƕj3XpMb.ᆄ&aJn1
C00w@5&'AK)^FhWc-!.TP+fer'UiUgL:D*}>VL)|2cPK    PK
      A             0   org/bouncycastle/jcajce/provider/asymmetric/rsa/PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi$OAEP.classW	{~זƎ'0E+Bi|ȉ_zV֖v--JҒtR\DI]z)YZ<mWͼ3߱^z[O/{qkދhbJ}"!1uF'57$)474]`0>'@Ύ$:-#jTuHjz*89M9ڪi	&3QrZK:`XX%u+\mϪJTiFȷe_NSgي1*Y}I77uv={ױ{4p-lVՓ)9TuЦ)MWOvW/bkJ#n`ŖC,:,[ )ڃ
pDK[RNP4[5u
Nybe˺BVuJwHNL؈ ?(j[٧Fd6UoY4>#sd js-zrE	h-Q;(/͈&+5CriYOEMS^Iue2gO.9=i7nRӲeQmЦz:ZFu)6
tR5t9K٫TJe
8Vӝ銥	L[(j6JmvvVuuSnNn섪	
3^(
<FdKp']KvbWTv ۨ}GmFt"XmZvI"SZuqL89M[Bp?`Q55e9XPuMM\cYY&QgMl-)Lb檀H=+<ZRK6$'s`JUS\ OG=m7RZVBpmE-m"q~".⸈"E1*⤈S"b")ⴈ1Vv~:&Ƶ곇ׅK)@|{3lzC{	j:vׯsiՙz'fB;L-Co˪S;of;V2A,_C6?;W=wI^'j汧,ݮn ĺM@.FbUT
׵A
'R:#!y>o&
-n5z`hC mX0І%	"-.ۑ!!%	K-%p-XЁV%$ta2|0<ꃄ|x/>ćge8q?>1|ݏMS$O3<E1O0<ǻe?ރ'9Wam1/1<
p,I<I~,6LPy5\tS;gĖ-+Krvw6?>NO$3u4Ok.<۲ed <V|<e<WJU$Y'(
W1)_ĹD'
QM9АǕ~D^2N
xB:
""E$sP 3ɔ3Eno?z<^[֜"߰C8U`>4:Y}ϑeVD_+nsɃ9O-*mlQPUH7yw*Fܴ>ROqyG:Nq|yy4+EHܥ$]_.<^,"(1ߗ49"xu"y}/9)>G0>x9x/8qN__IvIV/';N#NaԹtnq;cZ9z61 2,WGky4֜M ahwAPKQ"y    PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi$PSS.classWW3CE;N4bq,͖
Z H}KIw}Ih4i,Nu%mO3zNRޑBH.[|{w{ܙ_VSnpIU~	I];$-W@)` iNXkQCb_t0LO	Pp0<gAkQH(Qe^TãDTc4nؤ7 A~J>5vB#Qt۶%͚$V<Y5bS[>rQ}NO<oL'yδ9t
ALzT@M$en?T=1DpeErΔ]!ˠ:7y=	**@ܴbY(/]-Vp:ZW̙~
i)zػh5tl@_E9wL$e=(:ĭA:5FPjhjCi3ʜj!S!i5S[3:LG~VYP|Z?Qxmi\c>a(=NY=5nP{iRЭu݆z{E=)-U
7nףXdMjD}&Ո/M,P	n@MKluY>XV|+	ODxzi$oBYPO1%aDFѦ5&/MLz]3-_0
[4nIELP-e\
C!?Dn/M>G]a#gزa6FT_H,hT8d`qlha*%j%5|oF,-v%b%ErljJL%	K]TST]5.a4I'{S[z/*-M3⹩oi"<":Etx@Dv~="E8&⸈"N1$"(bX۸;n~{zqwpd-t5MP+6
bzNOߒr2ss)9?c[֯\m2{w@kE(`LU%RxcMcA|7yԽ3JC[B=9h!~<v;:rϩ.yCwmA@&v`:u.qrm==S.e]yoۡ4ɸ	1w0{eMݸAKAlFe20'aqwa^-TM0exa19VdqN,2)сh>2|ȉZ|؉w1'£s]Q|ą0>i|.'>m0O0I<@Z<q'dXbXvA|څ
e0|O1|߅)g*%O1|.}G}P7.tzt@WD憔dOUlQJ	%SF49?\sp:QjN$Wx~%/C+x5ϣvl	05ޚo˹
~+t48^kVCi,~UkPhxphWr5gjwE?&H3wu$QM;dG!T"jEy5"^i薨ͪHL2THx~(R[tY	Q+v\l\+?vq<@%Hin&3}xOL*m3ZܵO▟&*
ĸ&BC	FyZʫ7\A%<1o"3\r-xu*4(v4vĿ"*g(kRg5DH#M/i29${6[{4{6Ud6GXQҶ_ÙVܮ4.N4~./aIJ^L/zW1fa4	8_
ᰋ#+		8}lVW?#6A#
Ҫ#ZZBM3q[99/N*TnƝ˵]6Qv\h  PKbT    PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi.classRn@=8qҦixJ**B`7qF{OذM+;(uyΝ{93|!Y2jGtCmm_evڝ.v-R*0<P"68R=,JD%шw1" TJ2#nz\:6$d-
$a?Lu?	;]56۞PƟGexp,"5qxlluθ	)w^K{lHy|`s#/BGc kaT|UzvNvys:.XQԱȰT<ta7j_J^֩y_;_xꛧĀVRy䰜DG%VrXC7r׃`MߐRKq=Oh+,#4滴[њnI\71CXlDYd~}Di
IYT<։!Pҫnh4wqI*Piɍ)fS\VW"JٿPK     PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.classW	x\U_L'!
݀Mf&$LI.䥳M([U\eUQU]q}_s̖~w={ν/s XKRTba),N%B)E,12x,#+
kjhVP١#bX
5mmԾwqnKkgڣ@Dݛ}gW44KUo'L٥T-5ưbzdHͲLfb"`Z><l2VpH!G׆G UɹmĪ&KKZ(M
UffD3
[R2OdESLs-rܢAck$)e/r+h
d8*N]k2zmaVX@H"ﰋIUnۚz]sxN1wےEUXΉfiJUR25 HSP:G|!ژ5^Wx@YF4Ԭ]E$z-Sh3u]	+MY-!-BZ<LDҸΚ9a	
m#Z1	qK]Z@{&PC>(Xi^TP2"zӨ颴Nճ6ju`"ŭ:olO nή+Bېc0'bV!sirs|Gh@AGN4^3y}{sK!/A Xw2B
֟g\yҮ|}7k&}1"\C(njBW˺ 2'pѷ0Kelv~YMCSѹosoE >;{I_y u*Uqu*֫ؠ|
*U\"M*UThUѦb#FNn5k6xr?RsN2Nt5sށ
m>+ "ltԶg߁
l;,e
EHl9/Ha_:MCɼoMA3<@3Zq[U5#Isܜ14`m02ϣ"eN1~'`ĉ261lfhg`dĩub189QK1 D
1'R'V0p+fx5JZða5:za9^c܉'`X7:
ɉWͬrAocx;;p%UW3!w9
wu>3|ցx/>.\˰&naa?^O2|ʁ(
72c8'3`<]\gng ИJ04C04CcR4 >pCä:>0ć`'ep0ʰ `կ#{:X__T.W_^ڂS }$ԅy&9."rLÿ詙h<Ư]) <~?iM"GIrEPHu.gqy$Gz$Gz$'0.	Ǳ@r%$H%yH<0gd&q7d:&qǇeZȴii=)NFq!Y?C]_Un".*""6A!4">A%"t"FAeb(s7H>oOWs$EO->ep1\&M&5
ܜ=Io<MMH'y1+xd	ONx\v;sap+4V!T[  n9)Y_$?%ɏ>ED$Z(W)&)'z:^W=R);z*^W}0/TCud2N}
_iwIA!q<7]h}vހI4ѲS|Ѹ=ȼѾ}G4x;,{DC\	hk񾔫-բQT8)BEjsJ΋
!li!/}L_=!%DՏ^@1-poaRs~ط_S)qwTUPh=;ߦRue6;] 2e_PK P    PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey.classW_.WZ/cIhBIcNG6W`,"K+e"Wñ{IP6=һM'_觟ά@hCyy3_ pAvƅ-.ԺՅz	u
9X<6H(4:S*<$i؇%l:$&::ZG[

ttc=xJB24[o8O7/lS}e٦g%lբe@X7mc-	Ef<jn%llj,ǵTеpؤ%
	ѳz݌~T)~b[IKiQGtSheJXIjD[aIei0V8@x
q)xXw,/DH)`iCYk7VL353g{2B.VOh.ʒNvęh$TLFmԦ4:/mM	;Lf"emK(
a#jfՒ8m#eskU5ھ" JG[ʈ	afDG}NfOҭq-'<K{b2VCY;Nr,ao܊h鐖_K`oM![\9q>ɷ |*&y{S\ dM'츟sDa4!m2f݉R	+>eP([Fo%5!55B !ۈJ8aƴwæ\{sbX \n/u<f.ճ:+aVQRr+R-CY: d~cN^{tqhJrJ.{de,^'cedMa8"UFv2:]w	-WI}o	RLMVQd_h?]?|&h	6o<͸%\ߑ)Nϱ2[;NwwGwg6 'f*O|:u6tr<Uy̰)R%Ovv_<jŜaĹzףhwxK<yNG/	ނrV;JPlSp.|pb(6ïC8K_n㰊S
t1ٍ	ob;16W*U.&>(*fwT *3$8Sq,LLzTfLhlvA[0NSN}[ścx^p4>ƣ 1008O0>` Qg
3KL>L+
Fpeugxyg=gy&_c]KLKL.31|SA(0>"2㋛q\/Q-w>a~iwzu
Z|Iz6XN:FᢺP
	o2A"Ӽ]X'sTqAHYy(~<pmó<sEG9\xi?sa*2*B^9k'MI7 O	G	s=H-Hqn<~C>6ME&ʳ5\<)\#
HϋV
_[hhdY!_Ɋb$~.]El-u_#Zi+MߺdX-pkfoۋ8:^#NqfěƯaiO,u*1Bqs[|/S,yFeŌN0^S4YϠ|fis**ܛG8pj.FL&Ь7B=]Q-CSGh|܎NP&2b4ՠn]\l(ԱK}&2Eh8BK9Yjt@*MEL*ݍL4:L"U;"^ŶEt㫭Hc+Ьv	_$$55i,.Ә$N \niIc*^sB:eZD] üPK/  6  PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPublicKey.classX	w#c08P2$mlPe6MǌFhdp6-M{BCe$to}===w4d[99}w+}}`u`JwhHPr
3Hۇ$86imkklj?=1:jI3*Az8{MjC?.Z!Q8ܴ;PyzVkF,ap<ՅEdRQ
?*jiZkhDDl	^WvDNX'̘n&ݚŅ-Q'ӚAbfɄIt3&l[%9jLMi#4m5#6'Hv2&$dם*%fgWBf̈ȲvdD{I'oR-H*=:=A4}9z^')JG%hZyHfpNahZPOC]""i	S4{!3ö%4s׺vbhhf,bhTg6ܫ*ҭyi0DL3X:N;-P+咼./(Ki݈rqVdz,d"8%"iJX*ZDt4m^*)"s4$!"Ie']ROX=2R!Zl
wq7W>ә6	ד"`|Fc;]\]`S\Ġx/XcI;䃋;ͻ#m$"
jJTX-=R=% >[<4ataʝlTѤDAdڠvf%ηֽҫbtUSj4/pV'):BNdNu>g+o>o
2v-#(Q{e< ceN2q@A8$2h,Ek/voHhhE[Jw4Kh*|2ٳdB&; nPR5[1-zQ|l2P	B)ӯ,̑5Y:<E{\.+;5n(-IH+_]:;~%k%Y.mZ,v+"k%Kp}5],c]緛6dKQG\,~dx*1x8bq*vb*cȰTPщxR~X*:b[kVp?.h[oVцTl*ޡbQZ],{
Ux#*Dn0|RЃ2|BAcSY~|9

UotuO1|h3WPTW2|
eg51|j%p*-	U>i~NMVm-rCKr9Fied
kzc5$eՀ3></r֝'%^d7E9iU	L7|*R(fI7dI&1odkxdFǐ4wٔco&9L.ai6ʣ%؞rꈋٔ솦N%qKw?p.c')
	28Д뱖X\N@_"a$hV?2%V{mv]e=.owE
:f`?)hwvR$wye
d"SuWZ݁yTV\˨,x	l?.Qx3+UTȞ'c011rn38?oOoEw4H#P:?dTwN]Syqk0Wwj!NatW4~Nv
+;r^PWV>	ߙ%z&r2Y%^@r~ 	xș&_9MPK  &  PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$ISO9796d1Padding.classOMK@}ۯ1j~EhKA1P1.qkvП`ZzPzq|03[!AJ*^jGؔ6ef
4*t9?/[GYT҇Ӎe141UrahhHdؐd$LHsV߇<AAAAuJkxz(AE٧;	RZaɼC9ˀhh6gh-ǛYvPPKmٻ    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$NoPadding.classOMK@}u*xhQ
m uw[ݰ,O?JTE8o>c	v	Q0%ε\.6Ⱥ'#}]*&\SՖ)Sh<ƥ6Rɋep2|&}R9}3i,ՃrJsVGX#V<~
:16R##ts+k٥1%^y#	(xgۡC2 ;|C|[/?{;[fPKt     PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$OAEPPadding.classJ@mkI/ *nfFB86fb1Ce^8z p]B;Ls].ӫpxee+7t<VUNTZ
Wϥȥ5)˅ZrOt=Ie2t
qq0F~ (DNb2EBd&S	)Zꖿ;;~6_~=^C?j7PK}     PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$PKCS1v1_5Padding.classJ1O7vjEpѺ]"C,d̄1uɴ0`Ls=71vΈv..齚Id	Li(۠Ox4XUNX&,0NS"⚆&NyڄA*^Aw޽;Q$dL63@TAqPvPqPuP#8j(1YgRȺ54\hT|}yRr'14{[WĞJkU{ZK%4|l߶\ ZPKP{    PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$PKCS1v1_5Padding_PrivateOnly.class_KAϨe2!@ IE֙ef]؏ՓCEDr/
}|GPRW'J胚J2!LQ(#!f+2A{q!8a38JD5M:XF'G {ع><A h"c~'Ô[<5,mTFtwPpHpZ-7*Ek6,m+#Z&e]bӅ
{ZJ7A%KȊ-tnU'vV9Nvf~2Yu> PK۟2  ?  PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$PKCS1v1_5Padding_PublicOnly.class_KAϨ'e2!@ I
EFיefc$$PѬE/Q`¹弽a [9z$_
)+&%7q)I+@Hn}x\\X2N#"&yH<{غiw@A5釂0!NLfS2d8Vnj>_HcUݥmEd@RYKUlpAT`c/^KɵpCpG(`iۙڭlq.;̰ۙ5_=)PK&1  =  PK    A             ?   org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.classZ	|Tll^
Ba6C&!bR@.daއ=lk{m* $`Z=Z][{jm(۷o5_{7|37K~`D:a^V(CdX-.R,2\!:dX/CdZd.dE(vEJD\[zZfa^0R]A_W'6Aw Xlng\Y{b]</#~l:}C֎^Fh]U=.R_浗]ݲ~k#A:ׯ:7n 1֮]]
~AW{sK{7B!7߮^MZֳ W\84sVM_fJKi"\Cvj5&\k NBer,ϬbfvJ5m=&[QڂA5
G.?Ggf4O=+ޘ(#1WoGO
Ć`$Lᨻ;zDJOųfZ
t#L
}6mY5hKYxѨ&u8SHڜLP׮`C
$҄+F#k(ҧqR//<"aZ7HMx3maJvh	
Db͇
e1zWi";VG6C{ߨ&ZCM*^uX*7hdbbyr#ϑ{NZ1UK7>bkVG%Cq@8Sq1V
azLZlچBR7+d2md?BLI>8IlN90dT_Gp
PBѥZOɸKKđ襋pV5g<'Tmc43OBcD$	mix-p_dHS'SS=lmP2lA)w@?grn6"Cڴt6yC/ܧlo$}U߽%it	 %6R	h~'A
5iDW2d%`^%N̣K̞DL]`
fXZ`,oYwȟ| qvL01͙ Vdb|ὔC5BńYKZY& ,$NY618AS?ƽt: )\,aT-WN#MYc83%+vIҒF0f 5;g@!D?Í(Խ2e$Eu`v8S'z5ՂߔOpA8⢍tE.Ol?G>:WAW 'b@.!r1(f(EpGb]:~C7z[z7ڭ+"78'rm4q!y[CX0 ¢M/Dӣi_lQd?lD\lm^u9
lD8:^خw!,~;3= ۢ ,o
k=Sh&/r[%RѤvG<jc*%Bqoo(%2 ,w@FcA:N(XR.~fhaKQta]K]Xnm~!l+'z=em()m}%\ɽx_$Ȑ%\歉 ]]$
,"	XNe?H]$A,H'y)H-mqAnrQ␣ۨ8!l¹Y?MѶMz^h/ufaHD)-ӹvߕD\q. )r4Fh5ơB6#.lJhPtV(	4Y2=z\l[sLU>CT:KbN2,>n%"~S	GŷpTu̝S{!,%钤$DTq%pPA,p5%}T'20_.JEV6p2tɰYnvpdM~(ÏdxLJN	%%EH^	'_HA	>$m|XHQ	>&!'%wJi	>#]|N|I{%O#Kp\H0*I	NIc|YH_k|]oHpVs<DdǴWhWt̸ '\;fPX	yGpo6|F'A25*mTӜSuLSoES3e{VZ'z/Ob|r+;em*Ś&gud݉/5Y^ِzK,8Tp6J]݌C.9TwaBWyH!&$5)~_ӝ#R}9[\0#`:b93X%&WrT&l'M=5QL]]V}*UYӰދBӉv91+Ll
'3&i$|L,W|N;DTNn+˙zh͟3u˶)(m&}Ro*:pbI=aroK؉kx/S{xo+x513|j;L
3y?,RgX`Leu

D*nd`~&gتVlS`WMQ73I
}
܌x^#:xv1c3)
lW)Rzҫkp+?]k
+ܷS=BZx=_%d`81X \1Q1	30Y|sxL^drv&cq;"chG+~ɝvgH>%	;O?0)fH	̄^.&TS:AL>Liol|+vƏщarkX~&eI;&;L>eƙ[sv\BY&wٱzp/01yxmvbҎ+ׄo-DIbI[|{	n|N*"54Vd7/I{:^jɀ P ޶d--ZT Z}DoiËh)P[b 8 ܣw>ϝw	ɽn<'?ǎMIZ/V(>}J;(>0~$/$Xhn k"	@Phrn]U̮fv,1	[GXI:~$>pjб};F̣fOiB'kX1/h&QN[_!$a,6p=U>Ncp~c(18R.I7+܀tԟ?Sxa~zW^vbhk
tb%'N[BMu3CM;9sOsҮӗz8r8=
njG,y8GɜdSqf\{$xNTlX'NCȣ`=qx*v[9L8ϢȲr0>	l=s$ 军tXb2H:,GKR16a.>qX
nus}(Z8;1,v{OxC]64eeoQp_:l&(O!KJF~!g<YY)_	h{	{ :䏚)Ad H!D	)䓙H!|*|*9ߔb8NU0<TS\9Keeβ9essOUF:Gh;P.aY(k8΃`o8Ph'{ ʫwBHçGqIC鄱ebĿ
'3xxip6s=Z??rF0_/O[ih>
}fgcgOms9d7OOB9Y,WJPFfU,m;lrtR~:~/pC4c|
E'MJ[R`vXi
V}'gZ'U"C8#8Я7rSK5ܑgX<RZ*t֝)zCg~餮8H{.ζ\HB;n_8lqiiUXz  9Bdf[ޢ \m9αu]̯g./$(Z;pJ~\h/RkV/OJJVv/Y%[DSʅݬ3rzv*?jG]J,Gqd#yUBR]lz9nӵyEc˜%leg0Ȑ)R1~Q69pHyJ\c <Xazc9Q6S*<_#zؘ|<(DxЅN^仭nzzYNfk[q~eЖ<9 %Fyep2>*H]>kצk>w+}2'W2&8eA+tg6guKwi]S8iwló\í\a͢6lW씰CgσB-@mL,Fh vo+te)J\,t"v1PZ;K-ZZ[PK)  /  PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/rsa/CustomPKCS1Encoding.classUSvW+2'Ř0eci"-bA쪻+ܔ6MڴMڙd/<`4C>/}cxsW5u5{=s_o x
R!< w=5=6`UlH![je0
7F/9h
F8!ٶVZ2Cd`eKМԳӣYr?9t}i5n
Sg'BlkXfe<j)ƼbcM6Ri#fk3Ɨ53g0ԓ>gKei&3ۅ2<d'!E#߰-ZkYmsiVm#nƢ=ǏȔ6
O=|iF7Ṭn߶͝dh6\ҳXqu)3i[ohguy@aF M},:%Dzڤ[vk*rVs܂U2-"1OΧZ<C5 /8[M?1ݞ5sYFisV+:TM_܋TDGUmYVbMe*,ҪlGK
ך=?4V/RrBj_E[ӣUmUi?Jul?pW@o"QƳ2.CFRQet8!/
ߤHGnTj
bDGjIZ~~;qrx(C|F힡=گ|dm
*o.tUѠ"ΡC3U₊'pQE+D	] xA'9tBV!QV "*Z8|C*^R4FU<hpGpEEqp.W9\pk
^BAid
a+8&|ar(*D{8$Cy9L+Lx8LqCĐe:fWBJ٠T7jZ1V:9_C=Ѕ	)N$eߓq_@2B:
&$w5%IҧǢ4b$6u|	$ކ,.CVh7A4}q}~#Ǘan[BoBDRK8y^15}\_\[׍wï$d|
NO_0i50Gjx[<'
}9KJXWR|d7s6u4q8IT8]l"Yz|H
ebT1Hr%uK6(Y=!gplLČ#EȉQR sKb˛\F?yz'_?|s%w}!{L=VXǛ<ZKkAkeh	|iy@G>?-DSID#6E_br'gQbɛ=D& Fx`q>_<X\%>O6s
1ך&]f6鵑xPG)|IVTdj G8jv?-Ûaz+F/c)&mDŏ=Iga+
2B\'
'QKxc=r pܠurIbh1cF4h:$UITV{#t|I
&q~'+:&:q.B0ɯ[еUiܜĿPK  4
  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD2.classQJ1=q|.Nڪ >q@p91TMG	ܛ{}~}|8Af;wO0|$zuoU@a]t\2OgEɽ)W8}.c(
S(/cMMH@|d/dɒ?
eBrMB*ARa^qE\`TivsE 	2[0l0b!k&ؽ?{;C^
%!{.P!'IMi*ݞVAL9 I`:,F1k1O	,B,9RӚklbXChrc硉Z7JMum&2 PKS Fx    PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD4.classQJ1=q|.Nڪ >q@p91TMG	ܛ{}~}|8Af;wO0|$zur`U@a]t\2OgEɽ)W8}.c(
S(/cMMH@|d/dɒ?
eBrMB*ARa^qE\`TivsE 	2[0l0b!k&ؽ?{;C^
%!{.P!'IMi*ݞVAL9 I`:,F1k1O	,B,9RӚklbXChrc硉Z7JMum&2 PK(8x    PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD5.classR]K#1=cgGw]oq+VLMf$]Gfjͽ='	r3B
ˆۛyx`xBkы.YĜZiz4=ٯU^ȥ+M@; L5RP.Y
=!;%ψHH_*B<iԍ鶈63j;,2NS!WFƍ*d` }?ɒmAyݻ\/E^oW_zPvUo^z2[k|oVF=dfC?dx&\ᛋa|u	.>;A%	Zsl;ZvF?X\
f0t~&fnb_`k׌&PKHUQ  9  PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$RIPEMD128.classQN1=&ëPZ! d@PUJBQ_Ub9x0l)	6GzBa-]{s~G/OB
<n|;*W	RӴ+Y$Z	7
mYԲ͙iF\q&tT/3)D̵AhKFBƚ%-fBrTkAmfaqRD\{-P0tHD,CU<dQ]%2މ,v0)\qӾT6ߏR}H.sKXP|xX1WYt1%>^{a`Fv~SJI5XǼ{bh׬"`m'}`dY#k={_PK|  (  PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$RIPEMD160.classQ]O0=Y$ M2lԖ>TlZ*$cԉl/'xJQhND^s}|ǟ_b`vs똠YHa?Z淃~bz%PP*5<F:uNVĥg+M@L
2H\MƁ0di$diT`ɭFP'BF<j#)J]iqekz@!.M_ _?}vx/y%'\j1Ԃ}Dqs+I~6Dvn)/ 
ܖY|_K>f@r<7/\<Ų/=a!G`Fv~KJI5xE{/bV"}#'C|2oXbjB|ggYPK
xT  (  PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$RIPEMD256.classQN1=5t/Z@RdRUJBNrqN'TʆMFQU=IUaS[>>~u B
8>?|O!U1m]z,&4ԲL
OQ]mhӢEͳV3ӈ4J)2S̤41FӉ0 KFBƚԂr}3b!*DȈGa:Ei8TSD\{-P0tHG"*d?yO]%2މ,v0`ݴpKnߏK]L&)QwKuXP`Tf}Q><<1gyV<xa	/=,1V	jidG7䪖Zs<"vvXl e,]lFؼ_[3j_PKLܔ  (  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA1.classRmkS1~z|p
!V~mZ'^P1=ޥKJ*_:Qbn[`-"&prNr'I_:lmC?aK_4$<F76e_
pdJ玿yJtD496m43v;[ =
T3!}GJ{Z\8]F}{{"ȎIkG
cVInߜ\߳v'W>mJ(|j8y&ȇ%5axX?\㗆faQKuTHj`>t%g	a9Xi.%һR"Hp=Ÿq#tqdd[pְNm 
7Oq=~ւZ̢PKܞ\  F  PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA224.classRmK[1=Qwח6ݦS٠[6αᕁ$fknIR_OCk%y-vIT,n\fş2'csFcz6orfl"(3@4Wo'5m5ʟRhC@ \76B4*6n%,t^<!baHh=CҰ2e,¸MuܵYZ酌vj%ڰ>bEX'谇a9{.=DPwPzRQNR~VS~%(1_`9V&da*l& >F1c}cU}Е#ʭf>ЎKe5-Fn1vBZx-1DPK܅C  H  PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA256.classRQK[1=k6us*BV!a8z-I:1%"b_/999ɿ˿ >` WX> ".	Jk?\f2/#s:TǴ6oqfl"(3H4Tﵺ	e׭MP<
V	ݲ!7X*a^X*'RE"4L膌_n{69sA:!#ݥZggjɩ6emj6$A$K{y{xLRSgB$8qQb>̃woa2HY=#c1iO0c/	+iDPUJJxVF\ķzeo7;<asmncWƌ&PK]:  H  PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA384.classR_OS1=ee(I!L0&ۄ`x		O뭗Kv&{;$~ ?wcl_?] U\q`TҾsIf Z0+ʼNRzR̨͙UXzP
m-/RhC@ \6B4*6~5,A#br%*nw`ceeBXǸMuҷYW	.վVKNa=|(clK)	jOa<|]JzCؿg@^E%IyU6${PԭXm p%g(Hfq=#)<1>`C,V}Մ#
qY#tWs0qX
O:xR+=PEߍMPK1  H  PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA3_224.classR]K1=kqܪVJ!ݭoJawXT:"$1َ%}RUѩK)Mޛ{NnW 6B0\Z;&ےJڷniAPZ0+2:5,^:gi[g&2TIc~#<:8k
nPV~BӲ)T{ER	C?Z"U$ Hʄ0vqAYg	>չVKNa9>bEؒ{OGec<
|﫼IP)To%)Ts`6uӮc҇yp'.b&Hf{\@'>&1磈Y0c
#4rC40c2mC^s0
Oc'(tų.AhQ
PK
v/  P  PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA3_256.classR]K1=kq\W۾vWEKG$f1Yla_O˖
Q;*b7srs~	%K#oh]8Zȵ`V$dtdNX:iK6g&2TIcn=;nnPV~Bݴ)Twjay+{=r~
+DHD[~	ݔ0=6mjWq/2}}v&jr|(clK)	vNxQ1*!X/uT&)?扃dPZۮc>ܿw1` $30y8(⡏	P-Pu%a0{6[KEK̮|xv;xAhQPK  P  PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA3_384.classR]K1=Qj*
V
awXT:EIb&%}R*ةw&ps='7{%u,	7v`$ܩ]'(r-2:6,^:'iK6g&2TIc^=#,6uiS*O#bCvkay+{=r~+DHD[~	}/ca66mjWq/2}}~.jr|(clK)	vd=xF<<F	V?oM>rG5IYM6O$r_ԟv;]x@2(gޓ<1iELǌ	<#е#1nE\ywƎ.P<E;x-;3D7PKv  P  PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA3_512.classR]K1=kq\k/V)d)n.[:L3K/+
(1c]Ji7srs?/ "`i;;}O0~W	\fşĘ!ˣTt?m)DPfT*i,ݩ>7H(+ІvAn7mJi$UlZX^!b_J5*m`eeB?XŸMuUmXFBOՒSmXemi6%Q17zK]	wU X-uT&)QC`]|҃'.a<
0̛. cx⣈ sC4rCԕ0c&mvE9]>s%<Y/OsЂ;3An PKa  P  PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA512.classR_K[1=Q]W69 V!cEqskknIA_NRQ`[0_~$$wW7 ְ@П_:$".	ׂY9a|%1=N7836UJKw+	e/)!5RxI][!X*a~X,%RE"j,ԭLWc1nS (ulrVtGFBK5NOՒSmXX1["II0C΃aNwnm*JIeA_/D=ug]{+odmeٻƄ
>F1E0PN#%RBf0k5z_+ι<pk]c䨉ML71{ͻ1GPK&01s  H  PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA512_224.classR]OA=u
@4)dhO`l$.12emf&}?K$ ajlcI{3wNϛ 6B0\XL0F*iVt\*mLr-2:6o:'iSg&2TIc~-<xR""6uaS*O#bC>TN'HK%+Tv2k M+-ca;m[:gu.hC_e$T\X-9ՆuM-$00!`}pί	Jn'$gU8ulV
Q
;o}w72(df:gޓ㩏	x9'Մ#f=tg\
󀹵K<W]a⨍6xq-;3FPK9  X  PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA512_256.classR]OA=u|(Ѥ"!iFA0;,SffjHGg)ƶ1ƙνw9s^KÅ/RIIai
ׂY{*/CsºZcz6oqfl"(3H4Z$RhC@{ \6B4*6jX"baHh6C2Ҵ2[20nS"9sA:*#ݧZggjɩ6emj6$SèØ}.{?u~KP*wD(w;$)?ƉdTXհc><sa*Hfa=!cy<10cO	Fi")%t5aELln<`vcKgm,\t@h	PKЦ  X  PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$noneRSA.classPJ1=ikND]Eh.| 1i2$S`L[,=7srz p=b|!H/	JGI
%1LTPDܤj	h^1LBF>zig+"!]ՎyؙI,3N^E5
h0jYwd5ApC$9(:(9XpPvjc^<<s;nٴHK,`E.܌-b.v-%^
3
ٺ{Sܶʖ	*1'&p-ccjǢkc泋7PK]]?  k  PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.classX{,C
-6ill@EjHi-䕲ZLIJ>#m48N 镆46kK]Ye"޼7oޛݙ>~@+|ak}hW6l%xjju0tp[v2Fֳf`!-(+mU-Гf@	쌴0aT#MOU%q2ZRvkm\gN*oEfmV	;;z:7)Dn	[XX4>m1lYlVD2TBScô	.ΓWI1rRBTKT
	Ikf6j=%AkFM8'1-Mv,EyR㚮nU&ZPLS@6Lihq]bjh#S"V+=MKJk;˫lwvbTnveqUW
틼NfwDޠ/J2N+M⧾$(uȒDB/YRH$*!eX	iPhTMZB	E
C	1h_HfX::/GubZ}Q{qN1
MwdDW67+߾]e1j4chH(+	-F
9\QB4	k
50Dtౖl%) ~d2R`3L<+F<t*i3W@o&A}G[o'I
P86qJW_Aa}0)5FRf2Ԟ
hhюD2zx󴮜<ECQPT
F@CFZ	es~	\eiK(_Bw|rΝul-;
Ɠu\Dsv{|هr:K歴+"%嫧d*ӓJ'
ꌬvGYfh8ԮNXi򅃮2IGg:mhi/tXW+][
l!][GO`kv
Dv	#ZKuwPDb4נ@\ J7O[(-0f;$Tlr,Zص&ʂi5.,i%uUMrͤ꬟rnr4fQyxJe
>N"2h';k䭚
̔bż"YLlxn-)&{\k}(nktv5=ťY[?wiɨeC2uxXƭ2'07Ch,#ܭqdc[pJƫ	n2^ɸ
d2nYu>/f|Q&+rW?~xҏ4&0Un~dpяanpsG~܋K<'/c|ݏ[<I<܇	n6o<ynƹ@ś0;ՔF~KϥN+T/D(~XEaKSm!坰 /Mn?suqN:g0K^+-v==Gq4n=>I.YƱSX;I^g?㗄.jqR)_=&	$\vOwnnS
tɃfv&r&C|s1Mݑ 0r*3=\ps2v#|^i48;s肝Ϭ#¡WS+2+&gm(wSiu[	ɍ=_/׻/NL@e8~|<w^HY"{YBj	@DFAL1ǎIjJy1Y9DA;޺zp,&\j7T{.7v;j؃՞2[$zۄW#~UYVV*oojOU'>,b0_n*q
U{82Ћq*)aPm'ɋVp
ʧ_~pI/av_jۂ3f[d=J8~xy[Yqya63ٺ.iф;1CcX7;lYI;_?﩯tgAԪ7B%H/E;'\L&%Vp)[p9Wp%;o |'a]MJH^GA5PK[eV    PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$MD5WithRSAEncryption.classN1OGuJԅ0LH4&;
v)&X0 >qą9
;JO?RS"<0}Lpީd)qtEHȐy21"m19Q:%8!`8z!4H-I@/20X\y#Ђt|R%y~zꓧNЫYx)vz!!oV(`E%.r-Rr݊$	A7 aٚfAsٞvP=a)֧|n}fFPK"گ=  6  PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$RIPEMD160WithRSAEncryption.classPMK1}ik
⥢
҅lئn%
Y
(1J/'x/7ϯ 8 (6[c""JY%[0$L/D@$Ey
.C!Ux^$dA!#28z7ٌ'Z0Oޝ'B'sͽX<zLÁ\%l8(7y,"^\Ou@RجAJ
Ul\ԇRrF11Riz%+8KlPoŚAoPKP,    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA1WithRSAEncryption.classJ1Oh.\).n஢bA:Xq9fB:ML*c( >Fop?86AZ,)	4/J蝚H 1LQˁ<=يyؙu,#"z&<13J?#V"I:s:	h׿@f3$9U(``ZG	 U̽o~O؊oxu񐇗U.XqQBمUB[ǽ\ IxBPX,]Y޴lOXAv)6]g-> PKz\>  9  PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA224WithRSAEncryption.classOKAƟQsu۲:˄x3
5#!\P:N:.cQCEEX:;3yxyB _gRIsNp-ulڧ\rD&BRN7^!hdYFR"6WP'SΦ\H8̈́ђS3:po]+fZ$/Ա4VPY(XXP`7Y\_Hma/M}gn򇞌&B#9y8jF	6ʨذEP^@){cT3pԷ*不C
4>}Kl|'PKb(?  ?  PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA256WithRSAEncryption.classJ1Oh&"ꦢbA:r̄i43dRaUEĴ72nnn	;TZ`\H/{<>=#8T@d)rTrsPHyeh+D_{LG*%%1o8U$|1J0v;WXu аt|XIK-XmAЫɼo
#F  gV(bF	e6	
7tzIJb| fyۜP0P`
)6zl}fEPK@@  ?  PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA384WithRSAEncryption.classJ1Oi߅+EM*J[+-.c&LS!
X*
>%N7psssN_?^ 4Q%CTҜ8\f{>9mڧLrD&BRv'^o!hdYfFR"6WP'&\H8NђS3wo]+ffZ$/ԑ4㔥PY(XXP`7Y\_H-A/M}gN򇮌BC9y8jF	6ʨذAP^N_)cT3pԷ2蠟}
4sl?}Kwl¼'PKE
@  ?  PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA512WithRSAEncryption.classJ1Oh&*(mX3a:TrUQ|(1mō.s|'X>R)i4ώO"Їh"YʼD2:\Bf+~g!gY&ZJ<ӑJ	.G1Nc=	+%x̵ģ]Dq7p@=4,9VDBeAvŵ@ji2?3=E<Q;ȁ8ÙU6XQBنuB;͟;])j^},Yy6=L/|C~);&fwQPK{x@  ?  PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA512_224WithRSAEncryption.classOKAƟQsu<˔(Ԍ p:̎~NFAu;;<@[rO=R#"S>knj:^<z%iSPKOHўlB:y>=tb!sP:Q<q*rh׾'=V?_ƽztl`Hr|VWK35g][4id"eyL(dځՕDJpaw$YY^ON%d
(T+=|J7l&Լ;PKggF  K  PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA512_256WithRSAEncryption.classOKAƟIsu<˔dP3#:6;c2;:}>TZ!C;<׷ $H=̡BYWv`$Y̜H2:\zBvFn{!̲xO3`*.Wԉk%UC;-<v(7-@H71`l>_9~Z"sU/,́XHT&X2CބAɿ[)jNx'A57kɩtR#VcyՇOzd7{PK9dG  K  PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$WhirlpoolWithRSAEncryption.classPMO1}dO^R @$&&lmnb?$ .fO{̼ɛz pr3%*g,e1LU47\8Q*WE
.#!?y8#$,V"&].ՂQm:|4A1fΝÑ]%==T<xLE,[ob^"sL(dۀf#UK0,ΑIC-x~gк{\c5~ˏ6g
ZPK7*    PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi.classVkSF=8/^ny$&`0x%j
E<i
y1!ڙdLQޕmDas޽7'5 &61! ؞0guف 0g/43#sW[9d..SD!nٰlm7_
ޯ6'gYOTcɺQ\V.ЙeɳbkGoYb7kYS'_Gqs6G+G+FVZEeIٺ^Nw"D`zL9[sR8Rt-CWpzrJITP:B(	;Ԯ2GZgBiaHv̜Uqu&vrMɡuH)yyjrj"3*{/"Ue_eeGZْܶJpXåMݣ,^^W]M,,͏L_U\~=3y
OnJy|↔ǞT#ף.צX+؛{[O^V]M;Bk6dΑ׫Kih&]D\'">!SDnE<#Wg">P#}",^MMhM,{w1A2%YD=ݎTiFϚ4;,@2t4k٥J´Tv@qDh
Z9tQzPE>CnoG5	ӳxA=z?^~՗!bQC3jcD$$S}Z5z](c-
&1,aa|؈%6m̲oZۆCWA9]qF೵㢳-lMг%z6C{{煽zKv`I֔
+KcjK("Rd٥ԣe?`lk(9'~P<s}rrs[[C{y	MŨ6F,Y}rf&NNvuToQEDa^O m%H@zFYԕV6X\wZzGOxY8MxK5;`4Wi+!Ӧ&'	u§Sᗄ&4Eg6BPK7u  
  PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi.classXw`6jJA	Jp]r014g,	$޻JG:L.+mwҝ}eY6'ܣ`0=  nV`um7P0?dZ#HȲcDeFpcD"U+>Ώ]cZYAބaw޸LWV U0OlBfayfi8!2'm8۰vt:4#%+fZv2be
ɥ=N$
nFbbEeCPǎuF5)0sXL$*Pkr=݊݆ݗ'ɲ=$߆	"]%d+ʺ
$k-˦煔ew0-O3Mu͘ƍm0}פczĴ#{GgeXJd֐K;q#ۜXr\( -ȓ=ǴbI3g8͐
DX1_!ŮMR#N7(9QÍP+gDU|
\I"1My.jܹ^^%^vސqE	bq>sYEf-Ϛ3IuĲS<MEƈ?Gl'鵓Vt$^܈讵&ֽgA#uմ49q$FwZpnQUW_zc$w
TPNJsi*MIxvLN\frKPLΓBטk&=3
O
$UfJJ:t`Ԉ$]!pdrhqH{䃺1"-l4}t
6=SAYv5]F_52&ȘBܘB&Κzgw7"I{ܗklbQ()girr<BůQ#$.rOrm
0K`	\-$6
lhF`
l.CS);v	#WKz})p㮢˶.$aA=/<YfE7,ʨLe7]$^nxz!7\[zU1]%fF
t\U4J܅&hm]Ǻr^%&`mTx}ʟ13
v}+]<2n#闸u|n-gp~S	~dcD¥@i)kʤ&[L2w^t:,`%
涔lG)uz&7U0޴i/oJQpAx@C0[RUPCjXgj
Ұ C
<GÕM-\1|0PS"
Kb
ke,{
xx7Uzjh2_7jxNh'5,[/nxWPqcgWN,]w2|K*N5n5
_VQ=gbd
*lVq_QᰚO3|V0|NEgH3|^/8O01|SqN1ea|U>ff|[*n9uǇ>221kcJx5 ޣ6徔nO٭'󘧦&/O@~̣9̦$˃Z|[;	%XKX|'g)%H)AA-ШI#~ҨaQ/qDMbDUb [EU5G#FVU:[ja_F$>qbϥB1%QKhO?^OVHGitKP6oCuM/곋Yم]ejvQ]H<̋9ܒVfb<b2L'JQP-C
.0:,/~&(e:BX7զSE?U8!
q~ԏDIe3Oc,8`U?;Mf|f!h>oJO_8KO`kLcm
l~?9!22ђP*N5iT~iE	4ӣRp2z-g/
	Vqi^eY)e)q(:M0
d=
cJ`X  y,	/`@<j&Ԅf&T*A.kREE]Jl(fH4PŦ洢
QaJ>ύ)&?nce
n]
?=2DZFe-7/֏lھoYV	:@d,[2tcMf%0 ҆[PKVMV	  s  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyPairGeneratorSpi$PSS.classNMK1}ck\*xz$ԃTR{(zi\Sْb'Ń?%fћ'7o>;.$TdJ]jU	[MʹNAa3vW<\s+=S	^,Z2Qv/5a*\:8Μ?,F3ex.VdS&U%Fa+BQMlaP3EF&<<ȅse4
^F=LjrPK_U#p    PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyPairGeneratorSpi.classVWW[ 
ņ(Ѕnt<dL(u}hQ_G4$;}ׯ8(6:>'`c(A4,i)u"'H3qu*66!bZUV12t9ΡH$"E3Ɍ6M7]6
=P[r)
l2ٚΰRZ3l۳v5rK䝞c\dA6F^@{"*Ӌ6׬L>'LQʪe#cC3;yMi2ld˲xpKJҚ'Li<Kkc.:+F"	Ts9dyS`Bi!U#XUEK/L2OM?_;
/9)fvOY(^ePtTpJ)(WFaU	2^2{ޠ55β11+9F5b4"Ϊ@u4I݌߸pptmNgJfSVTlGS;'Vr`hr=a*HUOfEZ*){?hݠl(ÄU"m";7'@W"/ "C""B":Et#`X'* <V]K'YDX4D_KmGhC?n<bUd15+T[+Pg#N7jO]ۿfKd3ZO8E]w9#5?kuNr>QxM%\yQF!B5UhD3<P6+@2əkCzuճ-6m2mΪ^*~2kȺX#L؂Q 2ZqZƃ6s؊32`Lvl!bmhέ2v!%(x3UF;~8Lrx^j+0݊'#sp`f8d%I	}p%~r0%D0/a6G$PS(JFIBy~CӘOx>?|ߕ '-ڳqSsF6g_h8Ht-mBz\?jws+ZRk7{"]e$4j]e],[x&q6>k~]_µ4{ז/HU"R6avŦM\޻<y/0m(߻?Ya,'Bʴ?P'KH)9q	_u/;x,A,e'ijo1{~
ǭ,kWYZ%EZ2>˕e|tWvmsV+Mm7PKxs    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$NullPssDigest.classS[S@CK*^DZDE.^2S/<mӝlNũ/ 33 mSFw9n~`ZS&2u|@KI32Ie$GF:Qg

"rf>^FrU(Y"]e%]E.fKEwċ+s	nQh95klYgIҬ܈6TENizܢ_-K
GWuQ*³AXٚͭ;[,\mVrSt<Wq,
KRi%<dۄ/GR`:jyErrc:zuqR)}
7`0{"D9))|6ژ#%Dw	N3pQ%ġ8#HU0AJy	aI(ᒄpF&p-Fm8+{Rȸ.K,x@W_.#/qZ|&Y""-"[l+#Kh	1c~೏ISƄ䣠pN'YڣR<&cL͐@K%4Jڧ$%OVD7$=X";i5O}
ei5;bASsM{-2Cо_e#?(%_FR$ƻL7WЬg_Qܓ0#PK,x  +  PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$PSSwithRSA.classPJ@=ҥu3.U6P(*.%N̴rUP(qRD{>?^ !s`8-LĥJWpҙdm2J^m2JR%+V9$7VI$*-
%bgc?)7B4Cl13n7rFf0(Wq['ML&AAv!vqgt&Zf8¶¼66C'hݯakt{#o}?PKD3    PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA1withRSA.classPMK@}kkchITh֊bh]ڭivJ~^

 )"w
3̼7o?^ b W	
G21u8n}6bT>T2I-o1"7
Hu}4yʙNAJ$"Phz{@iL:'VF#e:
%9Ue,*ǒ;w(9B¬`9*mq[D.Pթx+m9.f@216J,Q|{B~113USmjbriXckt͠crPKM3=  #  PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA1withRSAandSHAKE128.classQJ1=c}U(غE؅8Rq3a:Tg*(~Eͽ䜛{`+Ye1N0Z*!A;dm8='X[F=->5Θf]vzsfPPqQ^JBput+})3%ڰ'Œ^,	ZTHI>)sfmz-M]m+?VIM(_
geTP2,W
fhQnh
)̸<f]L`?|C)!3FN`
S.bUhM	XzDjGL\HagxA[ژ
-#
PKtŨ~m    PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA1withRSAandSHAKE256.classQJ1=c}U(XDET,(T\LN3C2UY

~%f| ssOb),F	K-drH+YN;{vèeҧ&6=4Dh"Ыx3rݏ
H%=*P*_
7J4эjҮKzZx$hSa-V&m88r\oU>իaįk2n]>aՐzVF*_*a٬*hl`8\aE.Q\|k~е#Ag'	KK*[:r,o> 9.0Df3P{-XtmL{PKMЁm    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA224withRSA.classR]KA=SS7Y?wk+QQ͢Ġ6AEqefg0UDHU(tΝ{ܹg_ <*ߴ!CtW6Npd]$r.*Pa +k'!Fpi$26A8Ҧ'ѫmxb;TP%Nd]v
pIq]σ!00_ig	y@$&<$4ޛ8mM'-e ߋU0&%7/a,(bG	>&1c
EjqX7FZ$S40Mbp<&4@(ciz%r˿d3¯(<PKLR)    PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA224withRSAandSHAKE128.classP]kA=f6~վHB
y"J桸찙]f6,(B)Bg̽{ϝs~@|<QfX{/>i4>E7q)Srfu>.SᙰbreC*0Nm/ҙs)\(.<SLrS$D*0|52b"lz#ep)ZrD5Ա̪0d8"$=a+<K}J]kWgce[;X*\ךhLZUIN┲&i<`T`5R7jepN9U^h8.qR篖xƨjkl~?G[PK,ly    PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA224withRSAandSHAKE256.classP]kA=f6~վHB	їy(q:;l&nfM%?˧?JPJ8ss_3|C;mt?O&Oi-D\
YϹ˔gax&\ِ
Stf\
'K;+k;6z+nLH3^HY.|J;:Ql
ulD>*4=H%1}OJσ!`RR׾$X
?&<$VUnҵ8l<I(al UDM#7Fn"Saox-,K܄D"%,1>(-xDPK?Cy    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA256withRSA.classR]KA=Sl?CkU!dZ}QZbP D|'f2Q|
*
VApΝ{ܹgﻟ vdS&Ծ6:ʐ;9>߫;0lvĵNɞiDI
+*U6iAO؆*ٗ¥4ʄ(ςAMKGotH_떲\~zX-u"ЈgUhg2l$ōNt=KJc4{$L"1^&EشտX餭^	Xd1y8i,"2(g0E%13xE_aucE9Jc*a-F	ߑQa(]_E]
v?+>ٌ=
PKQ    PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA256withRSAandSHAKE128.classP]KA=SSwIFR(ȨRHi!<q67ƒS?%(t{9
c2R}ϰ^`O7o|>1K)w=aXʆT`8HmӉS)\(.4SLr4l$D*j0|kd$H*RGrca։bkc#UaaTo:~y==_EOT^t6T_?[ab*t$N)I;~%,Rj
TjVՎ1ʶr+<0M)^]:5*=`[6fxzkl0 z=PKjy
y    PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA256withRSAandSHAKE256.classP]kA=Ӥdm[RP%RIB`BW86nfM%?˧?nB8ss_?~x%PhN>j#/ᐡDїE;ׂ;%Vg3R%0ʔ
p؈_&S#gR,V\Y%\HIڄ*<^T>32b,OmrCep	ZrD5БԪ dxC*I7{U{<<=g2u{nȫNGʶaY;wkwk,L1Q{Y!]'F~봊"
9PQ3Ulx:CdoX8CcSK܄۔E"
slݠrQgV{]cs5}zs(PKyVPw    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA384withRSA.classR]K#1=Ѯζ֏u?\}Dчť(TM4uҟS xPWaͽ{nInnJobl4!C/Uǰ;%{V}%ys"Tـ"kϤ؆O3/K#ť'i̕	QG6->0|#EG*RjɭY@F=D3a )tڦy<=<2,T#aB	3I*>;byQI[H8b>}Kqj䵻F&3xA99E,(὏i"}Zܢ)֍Q	c(URvm&LGN|t^(!dX
aO˄>ٌ
PKZAP    PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA384withRSAandSHAKE128.classP]KA=D7YcS$2 $Ah0찙t3lRg)UzH8ss?n8
V*Xe(.Vi^B1ëYܥJQS)P؈_'3#s)\+.mf	W&F9~t{6
O~U><H16PY.\>VKn(:2"Y?vI%1}OjSkL]'s_ce;S8hLYVO׍>`wQCP>jCdm`X8Csc,K܄/({*E[Ԯxvk<bvy3$-P	PKٷ|y    PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA384withRSAandSHAKE256.classPjA=nMkT,4dJ[Qhh+i8I7̦SGw
ABg̽{ϝs
1UUR5dX}1xYћc
E'/&Fp,.U` Lـ
dfd.bť,D(?XP_LHSPY.\>VKn(:2"Y{~٘'LGCCՃpټX4NuWceaYpc5&јH׉to
k(T>G
>`(wQc^vAat)eR<yhǷX5XcslmBނh՟PKʘ&vx    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_224withRSA.classR]KA=lWm"2MЏ@J+t2l&.3>GI"h
s^=wu@
E<(baf;F3/j;=1)9:q)}ҩre#0lߑvE^6_Ӂ#)\(.(SLrsT?Ii_%=)zR̦CQ7S%NVEf;^/$ww   atDGDcCyu߼'I*5tU"Nx_&]=Snf=,{xxxb+!~I#Ӕ(Hs1,	[X|m"'\'D'`{o1M0Q	dX[Z/t? z
~PK}    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_224withRSAandSHAKE128.classQJ1=c}c#
VAՅPQj,GH̄i43$S媠Qb8{n3-fїE?Aoq圠G*dZl	Q#xKˤMM,8=YS$B{@D-ۜ$vDT@*aW^!ut'})3%ڰt'Œ^,	ɰ
eRdqus\|O#~[q]L+?LԳ4*(wAdz'irG)0b c.u1A5aft-)-#g#`n	&0pY 22`ɇ϶i=S PK9t    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_224withRSAandSHAKE256.classQJ1=c꾼UH]^*J-EE_$f4uQb
D
	{=7&fˢrNп#Lv	aecTJ[
vǨeҦ&x	Ӭ)=[ Xt@omL
u;N"*T 0ԫR?xjip:ДvВSmX:ՓbIK/WdXJ_[22v8:9p	.U'ʸ.tSϊWCYU~U YV[9#Sq11yD S|RBWCf0lkݖ͖0eO,Bt0g۴Eמ)roPK&gs    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_256withRSA.classR]KA=񣩶C,Tm}Џ@JO2N2g)Ѐ??N(VApΝ{ܹg_ `EL0W׏&i?m2/퍭;kq.Sgu.S}aEWFaX!m?eNmOӞ})\(.m?SLr %ڴT(ῒxfsRR%N{VEfvO5/	Cm` @1@)@`aMhLU^m6o^ʳ6 EՒ8%ݽJhQ*(c>\<_RO[41r3tKR_6>'D'`<b2VaC0R`qg? z%PK ,X    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_256withRSAandSHAKE128.classQ]KA=SS7YcU틥 7BDل@C}bg2QgPYmA{/sϝs.x_8Xu`P*ok}@ˮ5L3jiLHm`3!g4,Ic*T(0#4_*oZue 4e&Zr
˧2T,k'?/v
v8(:(9p	~UOFNG1jȤ#tL^
oiTXU0Y7LjQXS9L2f\LBPhārK)3Fn3>|-Ed#=gcB*Jan}3'ZBPKQ^z    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_256withRSAandSHAKE256.classQJ1=c}շn[A"6qDэLN3C2UY

~%f|HA0{/朼>>l}YK;Rd V6V׷?£p5LĂ;a5E"gkMR͙IBAnID
zP*__-
\XGw2nZr
Kz2P,iiŒKk^&u@/Y9.E񸛾0Uׅ.rjYjT@=KrOJD67j<2Ma8sǨA2ȷ)%t5dC0
,`ȶm-Nl9s+O_v0)LL>|M[t PK q    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_384withRSA.classR]KA=SS7Yƨ~#2>JTEL'ffv(Y>GIR*:ν{3s}'=.qS	mtbǰ;%VC2%O:VUlD{ҎNvjc=9<(ǿDD꼛D*Iѓg6ep>Zr؈|`UiɰFb\K((0,ړabC6t<JRyYWك?8azOǇ"I&m'e0aCb2Cb%B	fڡ)QcP|m"'|AGNsg#<c(a]ϯ~$zW(PKVI    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_384withRSAandSHAKE128.classQJ1=c}շD*HԺ*J-E∢0MfdZg*(~"N䞛s`Yd1H_\ ܕJ&{YRZ/lǇ[;K
f2PNO=iО-lD:QKg&	'*JzUB|W48kpAc/4eӴ3TNdX%?S7VLL_8r\I/}	a2]>iՐzF^t0lVo$V/Ƞ?\aE.Q T#~@Ր#|o7ۚ.be8cl,=!
G62]Lv16kѵgJ4PKg[es    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_384withRSAandSHAKE256.classQJ1hu۵]DV7R`qEٰMfd|*(~"&rd&/ 60E_9AT2%z퍏`ms`5LĂ;a5E"gMR͙IBAnID
zP*__-
\XGw2nZr
Kz2P,iiŒk+^&u@/Y9.E񸛾0Uׅ.rjYjT@=KrOJD67j<2Ma8sǨA2ȷ)%t5dC0
cȶm-Nl	9sO_v0)LL>|M[t PKas    PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_512withRSA.classR]KA=Sh4Vj?}2j'KR*]Tɰ]f6>w3p;ý3 ë"Ƌ`1L|F
_6ї77I/G58)ٳ:s)}فre#0ޑvE76Rgd_
'K+k'ɝDj"ntH3閲\~4:U#2?n$@1d0TB9>&јxGy_;I*O:k+|Ġw(NWK┼v:i~TBc*=<13xxBiJ
c'9専9&*qL|<3ǕG64<\`i翯_tzB_PKC    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_512withRSAandSHAKE128.classQJ1hu۵]D*HPQk, ("1l~O?@ CΜɢxNл-Lvay}ysu#<:X]";FM-5Nf
Jz5oqfPP[qQ^y?{`WK:4ѝ̴vjҩKZx$'|*
I>)KAA΁KpQ<=a?mE5K0V2PҨԩjyt0>cE?
JW2c!f1`[E'l'/{Be^6>&-L{PKI+s    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_512withRSAandSHAKE256.classQJ1=c}շD*H|o*j-E∢0Mfd\ ?J`'^r9yy}|,z%..nK%wX^_\]6Q#xSˤEM,8=YC$B{@DM[$VDT@*aW^!Rut'})3%ڰt'Œ^,	0
eRdqus\;+O#~[qML+?LԳ4*(u+AdZ'ixG)0#.vяAUa;Yt-	- g#`f	6ƞwY .2ic϶I=S) PKvs    PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_224withRSA.classR]KA=SlׯVmCR(S}(1`Ⓦa3fvXh?%
`U(tΝ{ܹg/ x]t3Sja6:g(}a;J[e+!w<O<VUlHNwe20r(bťYQ	뇱680+Iѓ6ep>ZrD5ԑ0a!=.H:=xJ|OV*0D{_+&y'[C]eZ 쁎E(!ۿKlV
a1rK>3sX1U+C4QcX6@bp<7c̝6yIFa#]'BPK
K    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_224withRSAandSHAKE128.classQJA=SS7Y5FjKQ0d4(C}n2ef|
(һ
"8309^`xY$Dq0?1~{mkYo67e
m4Lp|]$?Ca@ʆD06'ȑ.Ov)W&F95l&D*0|~җ/lz#epհZrDQ5ԱЪ0?L.O|}QֹCCŃ~]$m<mb&<$c˵87/60QtUS`+J4]c$9|kJ.M(ZAn+cq^bi1^ܤtBPK.q    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_224withRSAandSHAKE256.classQ]KA=Skԯ/ KРP(찙]f6,Q]@8309u
`e10V0L|F;AQk4e
۟ąNɁLI~Gʕ
`ژ#R<Q\a\XqKT0ғ'lz#ep>հZrDQ5Ա0Sa\λEaG<e>÷K[O5TuUymk#ZdL|y.J┢nhS?	PXf}LPj l;)ǰ~^Srm'\h+WNGiU_s#,\>-tBoQPK8k    PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_256withRSA.classR]KA=SlWk[PFCm-d:6nfէ@(P8ws瞙_jE0L3M xU~WgęNɁِTI'+*S6iax#k#JXqiipe"mGac7֦:&JzRMtGY.ܰO=:w
udD6*L52TI8YPP{xȰTkO揅xHD&ɵVk7qnMviwt/rG	yuV~9TrX`,âGxLtq16cr[Ja
T/F	_Qz1{RyPacdGx:0³^[L	WPPK'F    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_256withRSAandSHAKE128.classQkKA=M֭XP?T0d4h)D,1 ݢ
2efc꧀B@x/b)t==wνnrSeL3Lg{|!ZۍZcmLvÛ)9:q)OTX1P![e:4r$ťeyʕQ[63HKїg6֑\рjX-u؈|hUiOF.y}QsvI*:)<5|xdL|y(J┢hS?Pds >Pj l;)ǰ~5f)X6>h+c,b[e	641}Чz=PKL    PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_256withRSAandSHAKE256.classQmKA~VE``"mKDA0d[.^݋%?(\Ղ.<;3<ͯ+ _XD16:b½Ǎu2d3ąNɁLI~ʕ
))1?OFpy,O26oas'&R=xf)˅Ւ['Vf8}&RIHwD=x*|S
{$YWQvhLx*򐮙)yCv~^0c
/}1*CFmD8û1CatpUT.tFx}NUriW#yW@[E7PKTE    PK    A             S   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512withRSA.classRQKA^<iPJ}`@ĒflK~O T\!UA.|;3;}x,LuavO~a}?wwd[ݓΰ;%VC%yVs,Tـ"?Yb_ȡ.v1W&F9N69D+Iѓ'6ep>iX-u"S
thD:*H42lNMCÜüCښ	HLXFzANZO"t(Iͭrɠ}V|PWeq4FF$SDbp<9c#c]~Vfcauq?7^ޖtf4PKbϨ    PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512withRSAandSHAKE128.classPJA=SSwFkmTZ0dT,)j%mffv(>*(B8ss眫 ㍏>j'mt~w|wŹNɱLI
îbreC*06?ӱ)\(.$SLrk<ITԾ0=J1g6=ב\ɈvX-u؈|lUiT{DT{<y'I*Z:(8}eo01čyYf
FNWA	(`9VTV1ʶr;<0MM)n]ҟ%UV}KSMnl0 z
PKx    PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512withRSAandSHAKE256.classPJA=SS7YӪ}*-eT_"$-i}g20Q]k 3p˽9W >MOXfX|m|3)ޯ0sc	w=aHeT`MlO)\+.$Lr{hڄ*lV<J169ס\ɈvX-u"ȈllUj_T:	y(z(y~V5q"Z:([>²zXDc<]#yNg_FK9c/|*V1ʶbr[;<0Mm(~|2+'Vy֎SlLOoNPKx    PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHAKE128WithRSAPSS.classJ1izFQuBEEEqeL4urUPbH$;yd	2-AD*1v=0jhMo2"ڷH.(>$\$BR	Cy(UGt.+g-=z\XG#4efط3TNeX2%?	;_lɤkhL;9p	Zo~ÈdYՐojD6BmL2ʜ]w1l-XuaImIRl"{c(=amժkc
ZC
PK0)c  p  PK    A             X   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHAKE256WithRSAPSS.classJ1OluڱjJlDDTԶ,T\4LS!X
| JE
	˽nr^ߞ_ a34AXj̝J%3wYtـQ#x_xHM$8YOB{@pj>}Ň8aT(_*ahӫTڢ]jrF:ȶДaВSmX2Փbq_/vy'}=v0`΁ CpW&?UN-~^
g1/OL*ڬӛ6V)$Ȣ,]Xr1<ARBf0.`9ے,bZ]ٞEpGX#{_ B
#>}[umL@ȾPKYh2pc  p  PK    A             M   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$nonePSS.classPMK1}i]֪WoK<x(mz(.CM&K[؟SAxOGޔ!TZW)pEF\*/'=SOLқ
pd.\ϭY,Z,Jr$IfZ$Wp&EhF"0<tdk:Rx.;UE]N3Vx1޴X
!I)wZe9rv/`jc1wkYj<X
PKj    PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi.classYi`,Ȁ edc;e0 .CkyR9@M 7IciHz@mz}i67$޷3ͷo<i^{ŗc;0ށ	Ltdp`9A>*f6JMʝ3w}35bWPrF(Xzd#5_ju֦-"
kV2Ld^oV;4یBpDkػns:"걷^v΢еVwMU7hԈ^tfD5|Cev螀Kf45sO5O
ܦIL#횻Som
h`;j7|A#_3#)`ՙ0[[+m6ۃ@{&bjJ-EJpbpi_756NOtG
C#c^o0$;iaAuafLf}2/ZhDՀ)|~#TL5CӨۼ(OhlS+j$&BX7W9tt/&eiJb=`:Ef_ljx@&i)U= |)N6VZ^PЮBBݝ6:U1M<BݴNfu?O7D|"{}jM@55.im4qmFIQ#wj6eIR鍄uPֿ>Z4f$5[`SH h'KKSE)]5TFc[MZChKl&4wEb,*u6է5)ɋaڀ05Τ<[#pJe~!(ix#T#vwАy)<fO0j|	h5iy7nڳWQbl5G2W
B`MI~u_} hCreo`[ӳY'>7Lqb7nU$P3(Z;{)6¤}Cb4۽>uO	Y"KMTco)2L
M3uGwS%	m9dM
b̙`hsr_F(]۽yҩe6zL1cJ$<lyca?q7	*~΍I!E:9 'ꔌqN9S1t-o̙csj?-rVZFasc䲜RNTII\.GFκ;V}`ѕFIu>uO[ky/vT[~Pk{]ƞ%JΨĨ~LpӴU\R+utD
kVcF+lWZO\ѩnFnwMN>2[6/eĒ:P@-:M86rlh8c3cVm9vppqn9T=>VΡsptrAa#ǱB.8.渄Rp\q9Wr\q55r\q=
7rq3-r0iЂR	AH=$
<dWt%2I7C#YGvf5R%1YǤI2[g;Ld=)YacțV[$c?L+@?!MJuukHf\`Vά[~tĀ)a5=SaFmPKT"60 xh4fdZڞ+>"w	NA=/cM4<[} )i G>t0`8\jLUVJq+[w
f
v	PpRpQ
,KQ|cDseB,L!U SP7?[BKhU0
(}	KS
S剾Ba#
Yp!
B8()"DB1JBvA6Չ4'Slӝx	1Uj'ClcB<.B<)an'7FBBT8,l=Ɖ^vGYㅘ(Bx$	1ABvEV!:V%Do%Ől_aΕZ(?RמhЗnC@5ME!p+#R*cU3)䭥_{\
ufUvY`WefVI
e@lJ;mfU)m\Tʦ\Ճ)Q1dW2ڢ4!/3cH~Ϭ\ϮL"oDulPC[=:ܺb2^ F%-=
Z"g[HYZ"%j,T/DJ)K/2R_LOXZ3Gm5>djqeQ/cskNxg+z,΢ƒpyb=کY;TY,#tx*z_BX0XO>*O/-wŞnv-:"sl~7[qبk|Oaձ#avEy[/ӺBnޚX*siN9TD?0L:
(c-.˚y*_GnVO:*"u}賈>{5SCGN8%2X{֛"#Dy*{Xk?7-,G
rqG:rtqLGX֋^v~Ry&y)E^99')(ݞ<kxrBOc%LQ9abSCgoc<h`;HSheј;[m-ng1i~'|b#	V@)
X~򟥇rqoq9zh`mDG6Č^%wyAL><BGfkDk詇eaQ*czNy`VQU<#_zťX-%-,
TБx%;D|.GVN'07uh{>tX^;):mv<W$,6k^q i+PRw(s<6F9E!GwNa>L
y~[NYzQ-ҕ3ALyQJh7>,v^P!ڑJ%La*r_y|ЇG[J@/pLnÐm=Veɸ)$`:^ߞ&#/F	?Ce/$|U?Kx1/!<᥄_ qO^NE+Dx%kW~j¯^CUk	Fx	'
ߤ	E	Mx7~J=Ox; !L"$1]?!>PKN|q
  +  PK    A             =   org/bouncycastle/jcajce/provider/asymmetric/rsa/RSAUtil.classV[WU$	Aҋ*h[2A$Ҋ@IP09'tfɫ?ҵª,?P-{>
-KRL/j32	WK3Q͂tvrLlcP疳Lwp
g֘spc4+%4K[clbdOZ39lr=ozf-n8_}ŋ:r;3̉[Nd++\L6k]q ڵzI5[bL3gRU][O褚N&꺪FS	U%RҙlV6:ZQSrQ*-4)a1հk^SRsZtf+Z"#W^Xkț	󫺭$ȐQ1APnp'p`{coZVgJ2<,*FZd%?1I	(szEȮ;m1i
!AJSouXaQҨT)qQFwe\ee\qEUI;M
잋J:2_
RB'^z]8Eޤ'lTR$Ը؆S-6>*|4/^ۖ"qDkBI\D3 "hG7k-.C@3% ?&hm70)஀{~| E 1 П2!,0ŌY[я9	P<HB+u@Hq3vPM_C/G_- I&@"i"9'O=-^zw(cy>$<sS|Go4IgՆxitr7l5+FX't$lC߬y M*@%
pl
!fCk/*y
Ms.YӛQkӌhB-hŝj=ݢDz`4)CFv9^u9vlW_}MU<=/Lzn5lW*˅ PKI  \
  PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$RIPEMD128WithRSAEncryption.classPMK1}ik[=(_POk6lS%I,O ]ٓ	3dARHah|$3WS	'|][ow IK_HnV;^/\L;aF*|W%Uڥkf#AGA[=tus O0ޤMfjBјfmTF$K(PAzvC徔\uWk	4>L;w}%6(XZ`|brܠ7PK9Y.    PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$RIPEMD160WithRSAEncryption.classPMK1}ikEدCAAZ5i%I,O ]ٓ	sdAJHa	h|%[0WS	'|}۸w A=M/$aqDnH&̝0N#
+lƍ*˳P5sŇ xo ǞL|P::9p'To&YA35Z[h!vD4Ya
1E넞P/%W՚kt8F,7!g_@ti
v}-߷X7
PK톷.    PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA1WithRSAEncryption.classN1OG]Ҹ 6`M\1	r4CqL:dF2vиQ~}{~p-|> ()	4w/MH.H2/!L(<}	ߛu,-Bz&sH?#t<Z	FUћ+n,}b/CzhXzr6En~5EЯ{F+!WAANV-(aF6V
7\JU7'_Eʂ
sFT@nXbKZ56{fDPKĻ?  ;  PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA224WithRSAEncryption.classN1OG+`SE6chIš3y,WM| 8qcos@%l#X>JskpZ(>}Ǌ'&$2!ʗJĴ6[T:Aueld@//bsŸ	uBpK<lt$=)H-91ӓcWn$	}p{' ٸ2Tr,,[ʕEdsAf}gVǶB7*=Y8jFk6
(ڰNk^΍RB"&(-`>VR4H2K+X}lL-IS.
_PK-)e@  A  PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA256WithRSAEncryption.classN1OG+`S1b4q$˱4Cqh'b2
C0ną9%L!ȝ	)94w'{JA$S(ʥ/$hۭ7!{ךvi>̕ǌ1/yiՓqM(тQy{z
_zf
؝	OhZr:PB¼`\M#A4!bMU:@dLEy,(h2Azɯ;7Rr(A)	XH| ɚ䴅lRVߐceoFd7QPKYA  A  PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA384WithRSAEncryption.classN1OG+`S
,4# FWLf(IchPC\xޞܯ (d˕TҜ8\f{ݬ	BӇpxYlAN"R|DLnH	3TYFR"6WP'CΆ\HO8ђS3?W̌p#Is;i)MGƕdaقEpP."C54?C?e4Q9Ȁ8V6XQ@цu\;_wn81AiAҕ\Z6ߐ`coNtwQPKT$A  A  PK    A             ^   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA512WithRSAEncryption.classN1OG+`Sga0F@&q9f(I[L\a4|( ƍ6=_?>_D)W3!9'puvHp*>cbipTr5f d۳A526"\ȳ*&%2o8T$\QOǣ7J0G{G5W3cHNABӖqE(-d-,ZYʕ49TSKz%WJil#mX%ȶ~΍\Ok	J)LRI,o&d
(V_kl<Kl'ԼPKhA  A  PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA512_224WithRSAEncryption.classN1OQJTchIP3v8t&b2
C40~}}{zPAT5N{MV'KodCqThr
Cڵ-OH;i22£>UDpC<`q(^8\Q;C`T6߭Z)nOl_ݏ:r:𥁔9iV|>A-y->Wr/HI&ՂMd7a@jN3)j{v61{'A╘TD*|\4çt-fOȾPKN1H  M  PK    A             b   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA512_256WithRSAEncryption.classJAƿQsu_xUtLZaDjEAW
V6;c2;X]=@uEg̙37߼= AX 56jMK+C"f㔩(>i4=!O:i=.ʹ">@a4p*v#\i@\o{1ѱ,|i e`@ڀAQ,O i7mz>kUԵ 5Ld0o"	yTw⟷ΤaC/\XlWbSrG,>#s5Kҕ8>6"PKVTH  M  PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$WhirlpoolWithRSAEncryption.classPMO1}dO^R
^$vD"?e쮆ٓm^;3of>? \l	WB
{M@ZH0؈S*kd*t+f<ۋx0"7$3V"&ϹՂQm|p>Pv(Omqd"y̷PCCÆ2y7
:B/R/)םָH
5xPI-R_nC;)G11Riz%+xKlPqoÚAoPK+    PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi.classVkSF=8/5B)I^M@8ӦB^@H$3v52sTw%h=+x\bjk"3|V؞ RRDU癀fgU`βlɇa1E.֘KS]nLӰ	j̛ai1A{"ϲfL7i睢瑝Eaw#Yd=+0Q
ZI_ٺZ^EPq6Sr䥔~$kjWpOsJC(iS{ک괩]Ya.WCs0ct%ȶ1IcH6e-m<N&0ɴ#5,ITiKU$˖yUG<bַ/+q%<87<2:{yݫ[+S
P_zpU<6U
H"w:__S-4-@[DcIBϒ-w[Gn.'ED6TD\D"D|&[DE|!⾈"zE	\-kJDB{k#sKON^;^꺿<MHZ֠a J
Ϭj1cA0-3šy\r%95lg*?]ff4C9V|hpEkgv RIL^O^y3b[GǐDЌ!:TC?w&?6^pbHGo0oVʇ(A7Y#C?3-}t邕2ɶh?兀wҵTmL[1Bt=y#lw4*W<㡇^ݭWKOQD轥ȲK.ԡy`ts0yl!zZ#~f`;wSQq"Q7ߋj!!lޝ&K.',BɎj
ZGp(a!	d[x(1,zDUݢ׸ӎ_7aޯx=z1?nK_կYNg6E3Hc
Pi\wO < $~ENOM§?>#&tPK`i  
  PK
      A             3   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPrivateKey.classVWWm0( j.A[
	֥UѰhjc2`HvWWZb9=Q=of"ڜ{ww}?P[x<(@`,` +KDr )3nմY[@Q@oZ#m4ҬO@^-!Ztn
o%KƘz<pChIej˙$
i@T
ŊPiPj
):ȒQ"#b
pztTӛE*7@A=>FUj6D$7<*/Kn)J>Ӣ52*y[0YLqPȟ.Qii×UMU'T62l.+v1D)<1Ζs0xL][,4&%י4^e`SFGJ"Ye"ܭ" -6ԘԢUxZL
	
ɌӺ&QWaF 3b[ӊ{t(jPQr&+/ JF5kD@|Z	=>()A#:1i?8e>J#wTO[HEoZ(.\?]'M-U	LX/EKA89Sn"V2w	c;_Zn稿$/YPuEI.fjflpf<=%qjz3^"DlEVDԋxH;E"+bGDyׅhCckX5؟+"мj<nSD&4r_.wc`VG̍QMf<".mrn,}R]Mޝ4w EaQf+q1A؎,$Y}Z1ut^L~*u% ˕u`7`CNiu
?E=nb&
2(,c
'k9ـR~NX¹KeBfhÐjh26qbDzQĹnCA2CRƃq?✌/F7)	x$tYN^pOK8jW9yWB9y$=K!oK8$e	}ۇ8ySB?ޒޗpJxsrQ)\l<W8yGki6ŭ\E2ΕMngcl R<1S[PSj.?:VL
7qޑL8.2SΖI6#u+K4~Fv<GZ4n
`"*p0ɉ	?,<q
(qV(XO+:aY.Ւ=.)|VQO)0NI'Tf}&Bi`	fYjw+pDV~:5|53AcMab
Wӆ}9jUN\K>-@&\~EAy ÌP
h<Nu)|KqWrOdzp=HOM㦳	dlbN!bGv~9iD+jN;*E
9RRM
-2PK@6    PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPublicKey.classVWV-C
S`[fbke=`A	ɘdZ}_=szQ=/#ą3-~wy=߿?E:)5`]M/7t)\vʚG[PmPH"4;+n<.@:ӝDRcm=6ٹ}?s.X&i2b{!ժ1W<Tg%E(6;g !;mVج8C^&lkfhI4&-ikVZ`ig354OL5@f3'ҧh-'X{P))LuG.5"StKIΪZ-S®NdݔKuo
fe49tq,*kKM
ڰED9ٕՍfSnj)-C9˞TƉQSs2KGXtbZeӪ&htu{'L>:%AЁغ8TaoMh:؂[{2H悪\Ƶ
 %;])|םYW7"tfswqa߼a:mQD>j#P7Qm	85vڎrL+	d:Gufpk';Z))񱻙C7Q	O^D\D6;E("EGD"O#"8 ⠈C"HAGuA,F[K81.g$@#<;
rҫG~ytECIu%<Ek=6犏FtHA=T:jiz5ϿO@_hEW܄22!.Q+bMqOS20.!.vqET1e26bZ8/>21#c+jp$l.f%##arA8\\p1RxE)<-a+,4^p.%"3\\0$wYZKrzeNqCQex'I6
=e^LzLVIWF[oJM4!6з~d mh1c<>"=`AɺϨkhPW\Vy/=2q[PPmQ&V |>ym?ntx2w|9|7A
kH@_h.Zsy\KsxzRdKWAնbdvh1P*
]w$MuL^2urk࢜
-["V>)#іǷtXAL*_]F\#{&ZxF"${D R-^籿K{	 PK  
  PK    A             P   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/HashSignatureSpi$Direct.classJ@ƿijUzكEP@-i6n<Cуxg0oϯ p@w+sqo֕jtdTrX<ꂭY[+b""Jքe	`67?q~"ƈbtcl·? .FP+=l'#!t3SpxuMY)c#|nHO^п`g˷4	PKҫ     PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/HashSignatureSpi.classUkSg~B6	KU
k.BAA$MZeݠ?i@Δ0Δtzwz)syW'	h 	 *n&ٔ	hl&Div
ݝ -&rù|.!@ TPG7\Ռnha֕ovn8p*nB*GRd۬1DYfh[-A
P+(LvI"X@׮rE(T,5SeH~hjݲ6j,4HObl 7"]̒Uqe5nh6ift	*&[y5[V>m]NQdrB)Yr
=r5P8;,]Ank*e6.J^ͳSm8.^6TxVFJ<BLP̾4f{k9il-]%ii^~09k%c0a

[Pf׃uy_$o;sq-GDK"."OD"q]
}S-iZ=''53,ߙ&h{Ŕ#ͧ시r@~=8Ӄӏo& Tw\nSDꦦ-5	ݐ$t`Zǘ	f%t/!Q0lpsBLE$$t!ņ ns6|E6CRXa
2DG!L!2lȲa>0)3OeG:2mPSE.UUm @Z#I:٢%bχ!ܧ;B+	]0
Uyǿw6o
"W9M,T͒6ͷbCX%p
J}MJN*C*+<88XҎ1hgx_7_?#m4q[l=1SR١YvG˾c҃0'XpϞWɈO@<e|C/qƧ'^wsp
Z5*Ϟe	-VKOB<LNiC"PK	NVe  	  PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Hash.classJ@ƿik=$^7 -nH-<U< >)<;ofp'+BQڍ	TލFYe^K+Uu\\ؚj36BzagXgVt9OgRV4K	pB2{)vN"e@U6zZ"lpJL4,L
i-[ ws]gw耳_ϥg@PK`V   ]  PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_128f.classO]KA=檭}@#%_qvlGtVfbV=Q(Kнp?sy}{~6ARϥ`_FaLiF&fV?(7t*rfTPfT*i,wh"FBY9Bʄ	t;	$LX-9uu:AJmm`.	#q>O{rV<	{kw_g|u#VP@ J"APUJ֔#vQtEepr
X{fՒ&PKTO!    PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_128s.classO]KA=檭}@#%_qvjGYYGEC/Asν!6	x&2
cf$q5FĄƋ 7t*qfl"(3A4zj<"Bʄ	t;	$TX-9uuARdm`&	#u>O{
<	kw_|}#WPBN#APSJv(;<ܢmk1G<aj9kwPK=<:!    PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_192f.classO]KA=檭}@#V!@Q{XugvDgef*gKC?R}9׷ &CT^8JI"3Mذ$qt/mXOQo(U<ة̨*i,wh"BY9Bʄ	t;$LX-9uu:aJdmmp.	#q>O{
V<	{k໯3Z>GGex+(JPh ~y*%tkʌ(;"ܲnmg9G=ajkwPKvO6"    PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_192s.classO]KA=檭}@#V!@Q{XugvDgef*gKC?R}9׷ MlkAL*i	e%$&QlXdֈMq 8J
g;P%^8OX(+І2lNB;l6VKNywEغYq,KuӞEZ 딀|Qj
Ji,_"{J	ݞ2c.2nY@kOXlZq}DPK'w"    PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_256f.classO]KA=檭}@#%_qvlGtVfbV=Q(Kнp?sy}{~.ARϥPFaLYF&f<˵Y$[SΌ	ʌQ%^0OH(+'RhCAr6.tr'#D:%N~2h]øMt,$giCÚ<qws`P대V|dQz
(I$_"{J	ݞ1c>2[n[@O|Zr}FPK)@"    PK    A             Z   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_256s.classO]KA=檭}@#%_qvjgYYGEC/Asν1	x&2
cfL02,41k։	淚k$8J
g;ՠJK`t5IH(+ІppA:N"̈́ՒSw]w/Eeܦ:`?B{=3aCpv0l|uJ@k>a~%T	
4/O}L1`e^q[
,gt'?|`\`mPKA"    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_128f.classO]KA=溶z&Ç%-_qvltVfbV=Qht/{s9@jm@P<J$2$
L®ET?8Ew&AT_azxƙAQu
/·cm7ʑHƜ3Xh"NՒSas6Dfܦ:gt\3%Ea=_ȣ e2JX!(XT"J	ݚ0c6|Gq[57P}@
7nU PK#    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_128s.classOJAIb6YF1AP		xXu̎d6̌~^~%N>.UM3}|$L┙464NMʮE;0;v`7Wt(sfXPfT*i,wHpMR
m?$#F\Щne"{O&jɩsШ9"o3n3GSIp?:.jCÂ2Ntͨ쐀XGKVWWAW)[cf0DgE\sš
TP{gMj7PK]8"    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_192f.classO]KA=m4I @Q{ugvLgef*gKC?A/A¹s^^a [	RI{BPQ3faٵkax'mF3cǂ2jTIci\FN$C)!h8q6Nur+#݋t2VKNgi8iq4JyvQτr<	vk`G}#PADQJ#6QtYי981߁ʏXЬ9,9ZE
PK]$    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_192s.classOJAIb6k|!aLPA!DB!Vs]&;y̆QҋIEzy}zul'K%	AEFaLqF&f#&6~D_ArxʙcAQ5	.Cm'+)!h8r6Nur+#݋t2VKNgi8iq4JyvQτr<	vk`G}#PADQJ#6QtYי981߁ʏXЬ9,9ZE
PKX$    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_256f.classO]KA=m4ɨ^@Q{ugvl؟U/A~T4Z}\yy}zu|> (K%	AMFaL$#Bk;iw n0Q<DPfT*i,wXpۍr$61gc.T2ڽ&a9ph3΂$G[5LaC`{fo|vD@k>a~%,Zi$_]]n%aϊC(m?ΚgU PK!#    PK    A             [   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_256s.classO]KA=m4ɰ^@Q{ugvl؟U/A~T4Z}\yy}z:AV&0f&MaٵLx'm$M7gʌjP%^p~6n{PV^J
Ad٘:魌v/DX-9u'ATdm`*	.VE
>z(xXP$߃_<*>rX,Ã_A	Kv	WW~O)	3Fl"sJ>bfj7PK8q"    PK    A             Q   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Pure.classJ@ƿik=$^6oP*EiBu34)B˓M7'+L8Y7JiEmSTUҺEdXlM9!mٰ3Z	[Vlu͖.ri&,'h0p@ɪ;)K&dQ!;:gBPUl楴W|\ wocw`t
GPKSm   ]  PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_128f.classPMK1}ik[C+BAPR)KVz]ljl%,(1-A|{3vֈz*g
&Ɖav'N3c3AQ!UX:G7WTpOr"6:Lv#LX-9u+F
.ΣΥ(z\\\ϠSU:0鄀6oQPªA5Ty"RBw3fp.|\q^ZM55P6>0[.]^PKS    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_128s.classPMK1}ikV҃R\,UXuIfi%,(1-A|{3@;FsDP=JSL3$avj\q~xSAQ-tחLpBYy#vJY^Bl&n#gqB}mx.	g^)CÊ*wax阀6oB(aՇ0@
k^
0RJޔ#ܿ!Fque
̖6wPKЏ    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_192f.classPMK1}ik[C+BETR^4,lI?K/?JLzP/30̼y}{~pr5"J%AC&ɦqbXl	ao8SLPfTH48H
A%,u~/݈b6VKNJFs)6E43h/aC`N4k:!Ϳ[ eCPG
kn݌#ܿ!Fque
̖umPK}s*    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_192s.classPMK1}ikVҋ(BKVz]lYlI?K/?JLzP/30̼y}{~ATO.L'IjXb&چ0׷t)^pfTPfT*i,F8FPVHqqA:nD1	%nHYܽEq"KPJp0]X7k:&e!JX!PA 7e/>wȅet]}YG?ab
PKo3    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_256f.classP]KA=溶}4I^@I6|]1gYgef
gKC?R=T/As羾= hcXoʧRI{FPqdi)kE	ao8S<TPfT*i,Ûq"BY9BJY^Bl&n#
aR=mp.	g^)CÊ2wap鄀oQ
PAY,RBwSfp.|\q^XMՖ5P6>0[.V]^PKϙ    PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_256s.classPMK1}ikVآ^T
+.i6,m$Q؟?%E=xof޼= 8ATO.LIjXbƬ~o(S؉̨UX:Q&RB;J%,t~/S݈b:VKNJs!6E<W3h'aC`N<h}tL@7!BCJ7OA)%tw_}؆s#KjX}f9k;PK&    PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_128f.classPJ1=ikw VXAPR)KEVffK,}|(1-\9zc@P=JS-&ǉa[7FN3c3AQMߍ/ඛeH
m:?()g)t{FZrv4ꝟEQt.$A;ѧ{ߕ~cZ1QFE 5,Ty"®RB3fp6|q^Umk'<|`\\PKop    PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_128s.classPJ1=ikw V⃠R\,YfMfK,}|(1-\9 zc@P=J-&&%a[4[`?7t)^pfl&(3I4b8FPV^K2l^Bd"n%{gq\]mx*	.gNCÂ*^we.ꈀoB(aч0@
KN
0RJNƌaׁ؆3#Ky
v̚3:wPK`P    PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_192f.classPJ1=ikw VXETR.i6YْDa?K_ ?JL(/308gfμ= 8ATO`K&qbXlVͣ~o0SLPfT*i,wa*&BY9BJY^&Bd"n%zgQBmh*	gNCÂ*^we.ꘀoB(aч0@
Kv#Â
AgFqu>b	+5guPK\    PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_192s.classPJ1=ikw V(BKEVhSْDa?K_ ?JL(/308gfμ= 8AT`KFIjXbFV$Ö!
w	ʌjR%(Q*RhG9sA:nD1%n[Ii>Eq"JPJ]Y;7:"e!JX!PA 1c{Xu ;̈<ns^G,?abPKv    PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_256f.classPJ1=ik]׻~C+B/P*R.i6ٶْDa?K_ ?JL(/308gfμ= 8AVO`K&İHGL~vxΙcAQ
F7WTp&BY9BJY^&Bd"n%:QRmmh*	gNCÂ2^weͨ.ꄀ(`

J,AЭ13F_bUq^Umk'<|`\]Q}PK֕(    PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_256s.classPJ1=ikw VXQ_T"+}]llI/~%E33g^ߞ_ c\o	RI{B!d$5,1Cv+CC:/836դJK{Q|u1	nT(+ЎAq6Nt~/S݈b<VKNNݳӸu.6E<3h+aC`Vk~uD@7!B0CJ;OA)%t;c@lwЩY\vjۏX|f)k;PKJ    PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi.classX	xGHkYu$E6IH44v.7q
`֫R+'*JS4RlQޮ,VഒO͛7w 6*!B@6+4:)h㢲AAh6-ٮi['	Ks9CVVvqS3c]ZAAgc$g&Krsak\גIJAf
VÚ0-c3fXmk8YvZsPpքa9*
i"ђ'?6]hpӚme除AhI9`&jeǨMڨ=vl=b:nqKڳ4qRQKң8^, .ew8ePtRCnwNj/17BB+^vrSAќkWx7@`N[M{m06v2,ҦuT7si͚W93N95s3'-+qWroARc$'W}i3Yxզ8/c{iZ%GAˢ-werLgtvF\eN|@bؔ;Irh4r4L*Lڔnĳ̴IE34z^x_bpĎN Pݚdr4^}Zc`j^Yl-ZR+[ak[|PݚMg3PԤ=ڒv%TmjgMjKRWOT]y/U{Uפ<{+4ѮO
9KEr2W`fGl*p%#p>~v+0 X}	8 0$pR*	<^	t,;*X?|ݑ?R%Τvj<1 =V츚ۓse"ހ^dl!\v[xL-6E6S5ql<Ut'CJRF{S/~a(N+רe>{Ψ>jR| c[%Kcjn0
Co"x"e8gk2\HC:N1l`3t1t30<!J
GP0>!Q+^^rW11
odxÛV1dxû^1na8p+H5Uᤊ1|aNC#T41s;TLc*2ތ$f>܌	ܦ.
 ږc⻭Y-Qb⻑DWޣSw\Ϲ2rT5oy5,+,),',%,#,AWU9oUYU\[.ӲوEPGV(-ʫai[7/ncnMqan.
'Nǰq,sh<_)ÏS6yTy#wfY|M,7!Ց{PfFԟwAWl?+9ߛz5vRH[~(ԀR^UYQ	qwhDTOq}!∷s㨶-੄*r<i~z++Y;/opkY{%+Ud]!ߔoI삔OAʧ S)H|
R>)OAʧ S(IɾK?%ٟHg%nd^ _lo)ὴӴO0-?gD%35!&Cw<?I|_GM<C|?Kh΅Tb4:_K@F눛I,E"~6q9*PK<  J  PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Hash.classPJ@Ԧ"P"*F,z_7K!-I1IPoff> \aC!ݩ6aYOE<MfdZ2T櫻7֕aa]_mmd#J)
ٍN7ܗy-Q5B{euZ3y,|b7D7Dp:Zl*xB&/#3bתЃ)K8Ch!?ꄐC!E=c-_PKМ    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_128f.classMK@mkC%ZZA*XB/a݌fKݨgEGP/B3003|~ cNg298U]Bp	2>ɐu1St{xt_P1R]QB3pב^p;g83<=	]#0K	eBB
CUSAEVmpXh34iH_7׉y0ZZfzax)ku7,gLtL^6aPK    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_128s.classMK@mkC% C!Ѓn%MnT"xm!f>? cO28S}Rp]$	r=Ɉu9StG{xt\R9R]SJ
rpqs?<O5a\$	WI0YL,j'ZVGSm8.Xau`f1tޤ!ÄkM{1*nn+ް21yڄ
PK5ߔ    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_192f.classMK@mkC%6Q`
u3-iRv?%nJ9|0]z;ehTL=xwc*
u7|&[IF<r%8ƣ↊	RR<T;q1މp\+̄+nd$͎,	&|y\onaa|Da;uф㢆u6\aCuj2L֤q.-5:z6_V3;&:&mPK=V    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_192s.classMK@mkC%6؃(Tb@^º̖4	Qҋ7^g`>`gz p]f?chTL=xc*Ju7|.U$#RbAIiUpyKKuM))^d*%\Appk:I0Sѓ`7;B$?Yq5u3aEmpX2FYD_77y(Z:f2f[[@o|Y\aPK5	b    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_256f.classMK@mkC%E
VKX7&a7*Yz<Qԋ3_ '3a.{LE).fM
r=ɘu9S,52r̥/2?qC0~'upXb\q''kvDfI0ѳ,
|M-+~#AEVmpX2YL_7שy`Ƶ&=ttexc7L+ް21RmPK    PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_256s.classMK@mkC%/ C!ЃnMnT"xM!f>? sa>{LE).	r=ɘuXP<5*r¥/2?q#0~s+̄+nd$͎,&zERoiea}D!]՟hq
]0f&5ι֤qo,59z6_V3;&:&WmPK9n    PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_128f.classJ@ƿmkX>j (Tb@/º6	QcEPB303Ϸw ]l2T[CD%*?eߤ,0X$QE0tJVIA<8b(Sd?q}a tn&#O@a.	p'JU5Kg[j|`م߃Z/n2_M1dm^55{Aϋ
=gSp PK%9  
  PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_128s.classJ@ƿmkX>jQA*XBafkݨ"x|(q[!f~;Cl2;1CT8cff,0EB|"Du"\r:B+MGF`8ί	/)%-LbO@8=cð_E79g$| vIh>"V:;h8XbU>pTw	G
.\04YDwWJ?ƐZ}fzm׬ښ@kW>/z6llMPK-)  
  PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_192f.classJ@֦~>K4(Tb@/º6	QcEPB3000Mj=bDTy7C"
u>!o,XQF<r%'qC.%x s1ȿe/Ă3> 	m$4[B	d~BB_21CwU{E6l,0ziDwJoµ&4̘<nk^4_01yZPK  
  PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_192s.classJ@֦~>K4XAA*XBafkݨ"x|(q[!o|{pMz;fhTgLyC*Ju7|"U(#RtJIiEp~MKuI))^d*%v\A)<85~]$W H0l%N${GgTOzcM8.jXau`a"bh۽JW	ך4v23ckfy
^~bfDjPK,6  
  PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_256f.classJ@ƿmkX>J(Tb@/º6	QcEPB303Ϸw GfcJT~0LIYHa)I<飊Hsaٌr$782ypvEH(}A	i:A,)t{et\rFB' ɰkvKh~8omN3ߧcux>*Xu`O#bhۿLWSaaƬWqêE
4^|gF&/PK1  
  PK    A             a   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_256s.classJ@ƿmkX>J^A*XBafkݨ"x|(q[!f~;#l3;	CT8cef,0EB|*Tu"\r6B+MGF`4ί/)%-LbOP8=a83ZX>Y I]$[B	Tk+40*Q?aw>՝hQêkACUj2H1dm^[
v5:xA˞-=Sp PK  
  PK    A             W   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Pure.classOJA6k6+" s!A"ff&<	 ?J/j%D`8#5
!N'pk)V7e-]ZMUi%LūeBɅbdR(y+|ISite/iw:#&&
isͯ-EB.ӄ߃<Z24jLqFqŹ숑>}`}u}PK[C
    PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_128f.classJPϴib`APb@z3ڔ4)F!CBp|z p]B׏4O¨ЏxU)3S%\iZHSf\T	M#E8
/T_sZ)!OA8A|>fjK--k}5BPkxFG>|45,&5<̤1lec/A6˺mt_MVj7PK',G    PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_128s.classJ@ϴibhPA*E!m';%̈́(t#|(qZ,|0a^BUcm~*d-r3)fxipa*$4P
2&.C򟸃x*8:GM`[\!&&%w=HCCCh	xp:j"ºa Έ!+Q.%g}"ֲnmo9Wlaeuw5p}ځ
PK	    PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_192f.classJPϴib`RA.
lf)iRBK7oKufiQ}JISf,JN.ӄ͸ԩ&$Fpts^q5朵,SBp"4x Ձ͜
1ZZ4[-+Bc 6?M-kx0]Տ|h`݅߃
BkX$LoskxIc_G^.l6un{b
[/oPKt    PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_192s.classJ@ϴibhЅ(TPB 0N.vJ	3QcFpPTwY.	vڃaнP.<TZ
[gR$g9UFInifǷ=
dDM\*?qTDYd$BLMNK{5xtw0	Eu> 6:#CxW8ã\XKΦkE0evrz|jBPK:    PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_256f.classJPϴib͕`Qb@z3ڔ4)F!CBp|z p}B׏4O¸ЏxU)33%gBiZHS\T	M#E8
/︚T_sZ)!OQ8A:YZ#&RKfeEZ~l`6<
lp{pEh	mn
2ikeƪ`5Wlae}ӵճ}ڃ
PK-J    PK    A             \   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_256s.classJ@ϴibHnA*E!m';%̈́(t#|(qZ,|0a^BUm~*d-rs)xipał*$,ǓP
2&.C򟸣x&4Y&-ISaCӒd;~a!j4<g
&!BGCg3b
gxk-=w沵n;X@oyY]
\_PKg    PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_128f.classJPϴibusXA*E!Pz34	F!C*
	NwLhi\~wSJ%M*9U,r=k!M9qc%L2"8r$c})kYd:c|w|O8"Ւ1ZZ6[1+B>p4z֫'~GV]=8X#4Y:4
5]<fmQ7+߰ٲճ}jPK"    PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_128s.classJ@ƿikjQA*C!Pavk("x|(q[z	NwDhLAn}JI[,&JN:a#S.V¦J
/[R+27Q	wۋމ%,#ۂՂ1F:6;1+B=݇p<=4<zK/#;WuG!B԰G&7O|;v36^7[TmPKA    PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_192f.classJPϴibus؅(TPB.fiBK7oKU30?0#l<Ӹ8#3 TJ"a1UrX:{#Br6BJd)Ep~HSֲtǄqpPE69%c$lbV}8;h8X!*WOUݱ&<5p{pFh	uj-ikhyڢnmg1Waeyeg\Ն
PKdG    PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_192s.classJ@ƿikjу(TPBú4	QcEP= 8
#l<ә.	<)SLYL(ɟuFH[M\Mǉ"\_F\
6WenB#Ǉ'=K8XFc(tlvbV{x{hxX!Z_F<%wB4aՇ05B'Lo2gJk~Mc-w:rYMg7l,n\
\PKXdn    PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_256f.classJPϴibu)E
*vQeތ4	F!C*
1v	NwBhTgQ)H8I1:{V1@r>B+d˱PS֢t+©x&gbV̒ж"!2?u
k^*	;ф磆u.|6a3Na"aC~Mc-{Y[m-gu7lnvll_pPKu&    PK    A             ]   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_256s.classJ@ƿikJ^A*C!Pavk("x|(q[r1v	NwLhLan}RI[,JNɟuFH[f\M'"^_F\6WEn&' G{K8"9c$tlvbV{x{hxX#*WO	Uq&5Ah	M,Ri-;iNA.k˺_͎U7PK9    PK    A             R   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi.classY	\"
(f5j U"Q]dXe`]ws#I$M۴5O[14mz}ݦM{,ogvURן3}o߼}O? lpe
%pO6 |;e4_l6#oKS*o}%k=7:<#Z5#1@ECev֋bWk"!V-Z#F?e࢛mY^ѷhNrϤl1&Sܔ?e[D-=
뾥n3~Ђ~Os @}׫}z2BAGV1]j3:|xbR5ixRD NOu
Ae<MٵA3Ľ'{:B}A߀O3EVSob&hHٔzoVDCn=Hah<f<
XUXTIaZ^Eh{W3,(;zLoVվjɞt7*V/e1]ޣ%ә(4FOcђIctjZeƔV6X^z'h'0fjLiEa)rrF"cRE6q)g0;Ӓ6`a٪ړ%xk]XBދWnq{Ų+蠊0<+L),9eH]M;VH6dc&uܦzadcJ6f2h!ƯSؘ-bJ+OMܪG[ΔTvE7Q;S3SE;Z4zΔ\ڱ^ڥ,uhs1QlQ>a*uhq㬓y^N^N?3~b ~I闤$uf)^^:TLKXTd[#	Vh[8G5=о;2MrqJL<dq(0õfp:808s0<spXa!*8,P͡
p尔Ces
+9shapXˡC3v%TG>˪cגp~JUTPtjp:A$WꤲʅeN-;agYp5_ʀ]1xtJ5X%SjS~<$irDm6$fEKEĘ#ngՕ;%H)$e|H29%
S6j_c0>8un,]\oKxUo
$]PT UXOROE`tz	!0^I`#O0@p6	 XgTȁA6
Z	6l!l%F`Mm;	vLpnv[	4A'N
UgU' Ωp'<d

S

	ORn

p3dYϩw/|Wvq2W^ *N
o|!.O?!)~N_$#=H'?#;?I/HD2+
)pW
f!zz+T~zL^&
e+ Q!,@,S|g8An'@Q	6qLaȤď
9rlG9yL;vk?9εgsGS\ķ`c@3M=ztIrI}rIqI}qIpI}P9wE[sV|9zpU0?@(>åB0q+"F[`̏wK+mpmigش+8Êl-ㅛ=ǦqlA,īA֚:ʏU<ŊOr9qpN[ϰ`Mdx㸻9g +p km8y	GqDg-+-XHKK33/a86&f]9q^qf%fD9K3v12^}!'_w	pChf"6566yjBIN!LpjэpPۼ!klb;S ,?	Xz1YgQȩ )S88L8vHb
8V۟d%)c؞!krJ\':I-rPVHJP%eP%R(%#P(͒H(%ePj$-%2S(K%ePI()eBY))BiyBY%)FRIRNR%>(+#o@A~#r MȽȏ"ߌB~r{"GC6߆l!߉]F>ېߋ|;@~?@w#CC" PK6	  "  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SignatureSpi$Direct.classJ@ƿijEZD@4wBSAQ/=g~0 #pF\R+µshVt`PrXTּ蜭^.[+r'E+Y	p6і'Eճ֕7n48Qv=h0R@tÃ~J`9v#&(d[t(t@zk?I
yPKl     PK    A             E   org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SignatureSpi.classVmSU~(`Pht  b(`%,?@_Ag$_M㹻I&S=s=.ǟ ?~l#q>ĽU-xdK@+H{gMל9J'-PLg<)8n0=,~`Ўal-kzNCfi;8z4y	Gt,qO`1䘳k$hM)rR,б=+zN^~2SRkGJ&O\Ԃ9E9R(YRPzSU[	61
ZT3Ycȋ,ft*{*M8Բ̒x@hKSe;9HWG7fi*`2<L^S]	xtI%b*x"DGqfK<T3O,kk|V".5ֺ53bjQ[f?v~ cP;zƑ2BT!SmjXU*~L*YbYv['抷x'_Ā"nqKĐaE1"",""fПkH>aeD4S{?y"kH圶Í)׉{|7uuXTQq46Q_8u\dC6
ϻȆpUB'$t`YB$s	UB%<@@B/L.AcKH	"M*9q%7OIs8f &mx73.Y|<_.bmnlRSV^`B)/yrlRu 阧
(ff<\Q,j̈́z	ko`h7?>C3bo0ba6-8Ffg	WK׿7CwFHvO|q$:zHg<ҙX	z
]O(6FU ;2}%h^^Zqm(a
И&x6I~6;OppJ[jwɍH>NjN#Tyy@}Gs.nVdevY2}xEdSX	\W/s=9BOγz)Q+l\0G(tL%Y dPKŞ  
  PK
      A             1   org/bouncycastle/jcajce/provider/asymmetric/util/PK    A             G   org/bouncycastle/jcajce/provider/asymmetric/util/BaseAgreementSpi.classX	x~cI޵GN;vhIIFع+42q7%w%%1J9{)pc`J-]Bߛ]KrP7fϾ4 d?A!OE"D@[E8 w8̯P+䐦(J$^[Q`[rǭ1W.^O8*S].},*Q/.
zC FE|Q5kBptwbC][Sk7;W%**cFjؤ;5kWAyˠU3pŚ&cꔱbfUu
N؄m[755,6CG~5	
\m2E55?XkPcD8]ɚ&Cȱ0z]TG@J@SГcUw1D#9 ݊j$INP<$kDrz3(Τ>J; "!;XHXAj>j)m0EeN0MQiS"!54+Eèʜ:MRl2j`DBvfS6 iЯ^F!Eo5%;7ؑdP[	zqpfT肵z(ZuiR=QRs`uZ=`f-ݦl&٢qNޝp]MCmvvC-4h9sۦmrH!!ٺb"`6W`ɢ!%ɉ5k!Hqj|RT45d1yu&S^Q:3hxp<.B.24`&	xwΝXCS]VFʞ><*?o	</۬) vʻdoXpX	:-{iO@?٤(2)"q%`,LqFBZZñ)BNaN`~wa5LaҬM45Q"П5cNȱ6t..1sR,W˓uԋf/j2YjD__L41V^=Q+@6O@[s$&FS߂Hߋ}Q"yqׄ+D$0L^XʱH^ѻS	`
Ʊ}*Tmv>!-MPk[ta5gdh n$s>FM%S7bU'_l^eSC'+Ϻ]&~jqļcvS1ż(ͣ::3uoɐcQW'Ix/Ͳ6r@M>vPmYڞiđ8lL-no+K˺;΀cv0<1Ԁ>	,2	-1STю;w0mIj#y,@OX/ƈoPt1%00Z<Fw&X7fb<:{ǣ]kYcd)Zלy~9Htw$*H %HMEDsEX,Be",\
p"/2%B!>,U\-G >.\''^O
p 3|V	y 6n` _.,|E
p ⳣz96Y.ZӮd<gĳO#Q&S~6[NYf_
WC:mDz\ǳWDMy˳-&Z֏үSw!ޢ$k2˨jv2'_w++N|},cG2 ղlϤAEB2zae:+a*5@[nSA"GA>G)^CQEv:\%Zgg1mGCoGQlH)[	n&`j	Mp{.&#'LOIp)V.tl#Np\N 
AA@%I0@&$D	>@	]		!_$A
̑`Α`%Hp?A3SyT/EW	6$h#O ]V?%x EKoHHp	_	7%h$cLxY\	aK	*໬`)y x'EPIE&T\@%`JUy=VF`
E!>~
')~ʊ	#O`a%XGPK`lA		J5&8		$9l$hvQ~'<Zv8iA	06^Nxv1j{Jǩ<_С`	/w$/˝p ͗Y	?bu+R'N&V6d~^g	d[+÷YA@>|m!Ǥ!Jv&Rӛ&?K5x p.`F+&hb6,K	(/4)O(9B ^Ak16&c.Avs=x ?~N(mlt/qv`5Ɔllrmdߜc$!r[Gub1
f` O?Y%.dUCw?ɾocmٯ[S |uW_BU8x,.pV5j۰5}7t gbk晞dD3X.!od6ὮCˎE.7o)8]5&'ءp= s IU|zC1x}<Glzg/Uq/.Ihs1ЩwvQXV{P`ϏMn#kv(e.Ep0rB3Gxp߀drEС/8;.
VaSp{
`Hg9U`18{x}p]ZEP5ߴlV4	+]ncpN#P}۫&vͳj_/掱{Kry1ɞK%~@q78H[!1KlgvS
bԏF`)C
T?'=Z>5C/	v6,=~h#PN)x_O)xZ>E>}]%ѲP6;M*nT'XB޲
<9|
XPR|Nm\Şkȋ#PNq1N	2iQҧVl3p>`
-NO08a&wLL>KO͇ؾd'w7i-#i+bܴυI!tqd<NŶdyqgMh{LG6?`诲cG,],k,-[E?l_m',ZG,-;-[,,k-^]&{_bG,h]eL
э$bWn"2L}pI؆o<80[M$Nf|`}&Ӝy|3f0`řI7Rswe<bb``>o9$gibn̴3MM9bbș	s[sG3ܞܙM̭̧2AL:6اoqv	t^4_82˟ץl1PK  m#  PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/util/BaseAlgorithmParameterGeneratorSpi.class[KAcnee]z(Ԃy	z0DBXzAW]VETCEG.dÙ3`#	Cb]ÐZ	vF]lׅmeg[G~h/7Qa%.(˿(_iat\qD)UǸϰ:=Wςȗ])B)ޒ%Ｑ\6e]#z|OCOJUTo=(Jf-$,X,$-,ڿ[Z3ܡFX²QLۈLȦ`c6fӘCW0LhF}cX1KȜ!5z#8f91
rX-%h+PK`rg0v    PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi$1.classRMKA~&&ĵj?me,f1x zi}LXgI*T
=GߍE
za晏y~/k@@&Ն>URJƎGjxl/LTT]Txܦ<QF1ʕ䭎L*G}]ɞZ`>[.
485QoĢ㪄K۲9+$ڤwqY )Stw&ih:ψQ}/l&Ox?;; @+!lam	yòzd,w0OxƐg9r$]Z<0z%Oas57?
+pvLU6k}̈́[
PK|  "  PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi$ErasableOutputStream.classPN@=CJ-"\(l&&.
%.\ qj()m33%_ibԸ(Q;g<sX^>A~W/D$􀠔I:#p7ؙCs13/dMTlI0N4
)r"4JLLe%R4"3DGpzefZ(kM**. .r&v4r`Bxj{E\CW83u
?6^JZ_i] z^pBkct	PKg@    PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.classW,	y1F
زA%C	"0DDG"֖wjeM^IzwG:-'3}7i'm:Z˒OhfwfޛyorD#%`eEfG 	-qôb>oZ6$a^hcΔC<,c<!J9N]V);=c)V\.9Y+)cLCE!~KXx̝Ky*䲦ۧFi$A3oQ=i鼦$,Rc9UKSlmOŠb)Ydj}jVI2wh2
b
mO7+ޜsjSV_.`?thvhdw*Hk!Z=FN}cW2;BX;]TrgAV34Wic(HDNWOVheI
i9KX2Cr>EH4,&sMuzm4hӣirVv8*GS"/%Hrp&ƙ1:l)yU~4ZNSĪab@j
m <ؗUϳ|`;kqqƝMV)o^ejU1̀Sd|E*ӲJ?+UV zIjØ\VtoWZZYJkAl?M0ZRӒJؔ̏*
g,Is4O꼳7TrGvUWf]9ê2jɼqi^QJɢh_~mn$!][J
^SͫPT_jLl})fL9񧗟mVWkm^nW^3g4t[ K.{z
/p@JAC

O~2
x#ӎԴt<f6RBcc3[J	j2GNkA	mݾe)]ZkN7J9VcUMK*J\7>{҇7k>c2Z(7YF	~9RhXT1狓5w3lͻә\g:݆t,inбoi۫sr-jXW>-	gU&@GJ*<"2z.˰HVkT[<d-c#MLQ&Ɉq>q> N|1xB-;I<i&a$FQ|7|ɷkQ.E10~ebQL,fW?Y+0(&(p!3)Q3Q<fo87,|3ކ0y~sokOA7wSku䐒?vU4}(SKB<Er8Չx ;:ěICuOƿԋ=w$&|B<5kNg19	3XKzOL$~?40DZG]-_)OׁZ4:>Oǘ HeQՊuTt]x,۰OuK]s"&_pA/yz<#
npf
'iՓyeLuѿK5Aw{)|gkL~χIRn7cXp^\9}ߎϗ Oʬ/g5kL1<M7X<\XtZH#D;i{@2ݘ.|
G6x2~e\&&k]>)ؙ`$^Ie=+B1_Cp{ygF(e+@%zb!/[ݗ zB+k'IA'2s4gp~RspuQ%Xjc~<GӀZ2.{*:nZT"{@'
^Ŀi9d)Fmd8hm /S%z$	9L{X_(
^>|+`]UHYiQ^PK60    PK    A             Y   org/bouncycastle/jcajce/provider/asymmetric/util/BaseDeterministicOrRandomSignature.classVWW 4.`R5$Ը`ڲ@Xj@V0y0I'jvޞ=O!^ ЂrbNsIަ=%m:+6GƞT58DCsPw
G1$$3IiT"
ЊSUPׯcO
حȚ7<y1ƘgRDb?I%"lTtFN{,Ucl2rU5[ AXqHjLWOeۘ:Wq`
Z#qX-cϪUc1c!/*,aq*O@@43L
59S_3.OɁE9i;ё惴9ȭ&2ɔ7XVmJBʴvJl)5Gs+Ц JBMh`4ҔiEN1Pt1wJЄhONOVW>:"y5Nn@i7%T5
$lr@Pc9ɺ8$5UPA"ˈ&`JSvəB_)ZW{vUb#PL@ML%Ut̚+Lm-\7/9a,GVDZ854!RnSڄy
w*S^nM`|I8GDlCN^M"|""KD@n{DOD",zi4,Aìii[NPb-eVwmBuަ`ųNµ(]۾/fopeC`>530w-^MbxIY?'XNĜ8SRk2Bl]ȉXDVkwjhUwh)ճO|mxH&$`XB+F$4㸄58!qn	pQf8%BpqRA)	Oጄ8+a$<YB-"x7*7LpF&^LЎ.tBss	zЇ]=ύ7ܼe%I0s.ëoOg<.Й"/r*RQ\fV"=J͵"u5GIZs$i&oˋRK=i|1>~3vo6ay6yV?O-u+%,w~6e"ĵ\v}~a!3SYNj\<.XRG*l*}<~!#&AMb,Y|Ee8kS\/Q]~*m8sp8v/܄|ߴh/l0nNVfr4ޙu	ZנE<o.*.()呩׃h%T!s?̡ό]4>-݆gR>LB=4s֕rt>\vQ.bzmq~G
.rۤF{j"
؋tEDWВP#{54#־$uAd%KPK%,    PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi.classU]WF&RI!m4!1A4RuJqGdy
+>q'Ť~Gt֖
Cs2;{gh?.UWqAEC*n@Mc,ЛHn0Dɭ4C_b+-b}%1K'T(2ra:E^zܫp3.?rӱ/>ؗlu׮b٫m2
($?Vp
`5-Riuܲ3zYx!Lނq3,ނٖ0
%u2e6j^2gJG/Z_ێ Ckwma1M]*rayq~]1\=atua,jF.9VlPN=Ǻ 7a)]I]x_>:鸖^p¬痸nxbZ옞/xja~	m6^qMrSM%=mx<TЉ8]_QVc

Fq)*Tb54IsgM5?i^iN$W3V4l?>*|=;&ץkّ>z3!8:dgZ׿%D8#}	H'E1 -/W(lq? RLH1 GqQ`!w"6>0
:5LaQU)>≆;65
R,iPJR=4|u)4R|F=Kfw:zraюа.B.GҢiFo|[ M@<~N^󩿠bz<'}so 3Lu,">Cr(T+T*P0y
?fH^.y Ph'Aޟb"F|_!.Bw{1
R;{G#1SznPK%/    PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/util/DESUtil.classRNQ]i -^@-EAZRH$KRaXi3 @_|LK³ALʃZg=G~w4}9nGJ-n|z➘%duS42eQ%A>xA$ODޡނЦky^*3ӹ4y6Popč2RH^R Dsxlnj«Ơ473Xk3	_d8VYi0
^y2;xsYTyQJ,o0ښL]a"CWv`*5
Z
kV温[[MVyRfW6	%KpIe	W$\ehɞ$C/{N7HeOXmd:ٳ_2[fh
g]{(ɐqKF3n˸`C2#ɆDep/}ADeu&\À
LY?9gquuWJI| C=  1zᡜ^O&"`d 1VE%>b̅N]T8~#pb,h'َxw#>Z-?MB<72Ϗ=gNoo/4wt-'Pm+R.,ک8iPK?F    PK    A             =   org/bouncycastle/jcajce/provider/asymmetric/util/DHUtil.classTkOA=Sm
e}[Pʣ4b$V$~nuK6mC
@WN/R69wf{g?}
 .tvAbhan-3xUŘ|zWm^R,Yb*U74qnmTè
nRm;_a$;l׸͖m}6}YשW-QESr()Y=M**[z`CY5y+'I)*/kjWB_k)I{ɩ\P˪RFWjfWǵ¢-aUɨ\Λݾ)+M]^,񎌄~	nJ%aP%ܑ00jn
-"p h;ѵ]Tumox2+
MV?UDLRDsZ%kM?n._XLqFh0+O
Lх(f]<P#'|wbOǜ<v'Xͥ9	WߓuL	iObS
'BpTY9~W;'xqL[i:g2'Vk'V[=;)alwqo!NGoYt?XC8zlQh&˶(;'JXjoPK2  Y  PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/util/DSABase.classUmSF~dQ 8}	&żnLP&C1Fo5L)|o4ݕq6|ٽ{v۽o a8Q	d*m	dj7*VOr7ZBtA2<]l˻/!~TYf)yQ.
XxX^lD.a7bM	6-[<ކnөow&v8eE	 `al9EMs[~MMe7s%
^'*S..jgSM-ҬydE&7GIMugĹwÉ	ЂLȊ0-k] cI.WF+^IzŞQgFExYp+]COHto1ܚemqػ4d7 W35N:nȢ'ʵCj2Ԫg8<W	H^YyN0pAePd\qCƸ22nxGƻ2ޓ>ըp/@lWH# p2U8oV}9{:zoc|^ܩ a*0ŒY&aiW݉A?y)g]{vy߷.Q~
ynHm+\VGDAQW=cWp
\/bjb-)*>,Xge>y_xG?Y_p\aGѯylMw6ܢuU0]O-6H:F8  +A)vғ'LgN'
 J(FKͱ:>އdq~O^QTi&:W>4&
a[lA	f"uEsLd)%F1}J=%!s2Ґdi%39 !]h!ënfɜ3 Vz~<ɆgL~dLg|zIfҿNBl5BgU?GvgP:Ai@1bdl
$PK    PK    A             A   org/bouncycastle/jcajce/provider/asymmetric/util/DSAEncoder.classmj@&-:IeI@!CGOpw|	ͫuJ/'!߿ ox$hWJbOV{z,io@;_>hՇF֪w{SgV7w4X+>M$-eZ}ߪɹ6H%~Nx^\"'y*H>%!1F	a1%/IqPK=    /  PK    A             K   org/bouncycastle/jcajce/provider/asymmetric/util/EC5Util$CustomCurves.classU[SFd"	+i 1TBM]hl!@/-"KfB_+ڙN^vK3Sz;+ 11Lggo9{ꏿ
v W$OX3A\_Puo
$D
5	gMAhq	1PLIbk֨ݖN3L<)!!t:\33,fCs#\mVe'cƦنSV7ɏg9e	U[wUr@?m``p#.!zemխ;if;CڣEkA^wU˾|?BUF%];joz[5jAX}46L<w"nJ!<ll^]$)!_y0j7Oe׳xJI^>/jVF/NuA
Y:J뜒Q;eg̓e񆌷d-qI{2.1@
[<A.$/){AbԻozgyF'I#@dx(ҭ.x+vS}%\cˣ&7y@y)f˧1yr'^s+K*`LE"*. MT
tH
¸8&TG*.⦊>V
-
&Ut`J|"FA >U>hWfts
>
}n(
#`A]J	1-`&,K:>yQgymv,p|Hw!xyG#HZԁF1DD1HЬD- ~AH~|q{_{$<ulHRf_fRv_݈va<Fw7FۃŽ'<BE)˙mJ6ֶQ!Ba5r&\z[D*#+#W7F˩=<Pv#E)#9QSf#O>b/Jw/X"FEa80,/PKҍ7  e  PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/util/EC5Util.classX	|&LEM)9B.I8VDNfwٝ
	hZ[{{E&czhk]{Y
73]G6hoϞ{I +-EE eNW3XXN#ы|-FhzI-;vZYj+GDzUz}4ܫ&	\bM5_Ioj]ĚT/fAsNPkvO[YX誵
5
T_izUCO;U
aB{|dI>kP6*R@fZWPwy`0K&n̺LVצkҤ~?-k|R^vR0L+,PLMjwX8$_jcr65GjDe+NlfSf5=Ŵ螀W5JyJR}Q/{-{4_`z<e@9%`ifܤLT^kQmSxʞ䥈-I~ئvNVܮi%$-Z1deIr$吢E
\~q)=._uІ>20OCfK=}Nvt5XhX:2d^fQsЩh%q_zj+MG5:r$%k~g't {)Z)OhDtDK-KM|Zn[]=U]P8Hޱ|ҫ.5f\^@5yaCZi4aΒV9N:DFuE{;y͐5ԯA@n-F`OܗW_ӂukKvYzc.f4մ!0qY
JAXvUE	c.52+108+%ix?ǥY.AWJ	._5zfՕ2b9FQ(g"7Ɔ>]
D(,sS)\{˓*}DTW1nшH> WL^Z$\"^&	
%lEKV	$4Ih&Z	%K萰CN	$p=W
IQGBU)ꖰ_&eZMc9:"Nng8˷fqi˵Y#!MĔ5iUks1lcoGڰ8놶C83	U<UfgK.YhJwUy̜q' ^.S61"sֈ3CRgN8yhd~J&IcǝFx2NY4No*=u9isdBez"⟾c[s%& 65GvMrJwdmmHֵ$gcz$MN1IPsS?CAmgw'V}e?[Er{4r'v?(O
IN:OsB``_iXx+oaxT`msԙUYNj:s1/[ɾr&!Z:NxpBezkя3[pg:WM
"_A9R71`
21CJH
1Ht+8p)dSf+ޯ2(Pʰɰa5 oUP)X+Xw(;\w)VQC^>3\+hel,,#l#
#
fQS񘂫13|aPR131̏+c<I8`6>>kO3<93<[;!XA|MF_a_fweD+~{?)2?#BF3@\"(q3gQ(b_$V|qs3oQ$11ᘘ)6ǐ`cP&1Lq,y!3LQ"8<1<<$-SOKedwN2I;fge܅3?bY2^_˸`'Ë2ވ3:ùa	(%o>WVW૸VHufO67+Bl*!q٣C1eLX|ǰ -b :hjl"$ &Wm`b^fҶ ӂy8<(7?I#
9O=/	\=)ĮT<d A!LgA-XBSt!n&@988,Y̓pEc$!V	w8gp4RA3}F6WV>
H-#8殦ѳ\OϞ!@*ʘpD[ssED_Yx
#$]qÈE7
5qƖ	B{pP[[ȴnRKbb3בyO8	z?切%]V4Ol4B!dIe,j3«bbEL\G;*y>jPͫX
;:$weThF
#zs%mEBbx{M!	yJ#G GXBĵMn\/4sUp*zk&so=ڻ㋉f;4F箢Zq&?n8e&*PRyGp4⊪jA"cf_U1\S83K6z
{uU"L;2eV#&<:*,*0$r}âOrX?lUO=1tݴ+P=$J!fxRwu}f:̧#FU;)NQ]IPaCaKmνu9sQLlm1[򎘘Wcc)p	t]QdƄ 8+tel<jI@\trz*`{b[7k'a7m!NZ4	I#sHt}Ti	(~	PKKYs*=  u#  PK    A             =   org/bouncycastle/jcajce/provider/asymmetric/util/ECUtil.classY	xTo2ɛ< D$3	"bdAdelkjhq*بmĺVmb7ov{kQ{{o&7Yw眻d|gTjt+f[q+XnO`#U,JS&:6noBqlTz&86%ۃ/5.hxg	X**r穬;(8KUleQz?\\Sרa5q2Sܴ޳5&gs8hHHo*7E'H,
fMo\Ү&p )0
/H8T?P;zuJB	#y%88D6QM:	v%FJ,Ѩ[X(N3("jaKTL+$)JX	z5Pb2L1t7
)	%&0#՜,(dBX#PΝ߯&HK䓘ѡuH̟Ii3(lrS]O
Xf:.&ԅXp	ypēZ仚ylL"~ŘuޝJST_wTvk},g_s&sYYYJ5 -mXP5N ZJRKgML:O]%-No1SJIjدhͭ3Fٕh]n;
;|J.p*o&H!.ŗFjIPU&&ՠn	yZ5	' hKDU?!ce2Cwtk(sh(O3,InQX2a
-ͷ	CFo"* m%J9ODhP2PAe+;F	G
5EeKgV8Q.;#=z|x"bwMKb=kR9xF=ᎈ\vǲE+-It:ZFWvd=H~/+u%i$WU/MD܊]'"!7H|q>msj:FU49Ioz9>vw4馻,FA	tLE^VyҨtu5}\
5/6ߓ<yf5}T:ZSqR8T)Nt;?w;fhe:rdU5܍2$^U	41u9R"_CN;^Wy{&瘳=rfW(IA
J-'"75PjE6+V̔P.a%l"UΔEV	mΒMΑH)A%a$$%$$$%tKP	=.pK$\*2	mHh5ݼ
ٗ7ȥkMܓKd]2?JߺfEN
r@yJ b&a<hoH:%BVHL2~$fY{U.Ipl.s>y*Z#OK*ìV&Ш34<FsKy_,&
0dCI~C)M=oMY*ʵ0	8e"qh3YT޺XY6a!m2;OlQmeu?v[ey̆Ho/Ӛ+1mJoαGn`#_[YPO#4}:6e="wG&n$OLy19zٙR`߿c챔yGzЍi;>oGGsxq|>8_1saFL̰DL8hdc/e,0(<ke
y5dbXp|IF-Qe+"/D_Qd,dp3,bX0e.q2Ʈ"*c.T|Cj|SF
^Qǰfwe,2{2Na˨d8C
cKf%xop+kmxφO6܎3o0k̽GIl
@L3b
p(d0a6ñ6܇?1@ٰaxae0ˆY~V-6< 0lxP̵!1φ|J31ϰω)6<.1m^w/>M'˓c>fc>fc0-wagJ&$IQaS
O/m;>4]@;֡{G+#,v<B1&	X"~\I%m?`1PdZ&c$/rsq~PRs!
)sŻ0 nk+bDvZ>QDtQ"j2>]E4"
k%e
֤4'IHlNJ>ZN0He{(rXN
@^^,qM;(m)|ک? 67uZFZNjjbIluQp!gm(\^yڭ3AH(vYߋm'5UUrAL'?XUT^T_\]K_Aue@NNV}=^OјHi<N|,Љ(a]`Ba,*#7/^|56Q'"uQ}{w/֑ݬ{8#N#+vhvKJ!meҀXkP5ViXŶ=8%_PV嬥[5tѱe*׼
1U͇0V­ı:׍;Q!%>ڋiT2רӴ=I\=QH< Z2GTG^&wbw.KE\Stt@>yPˁKY9.4t6}8$<*a{'uN%
No /NklԘ.t(phCT%|VۨιW
#(}~qFE;Q_,Y3>؝3-bkzEU}];&",e0촻ieLsN͕LWqIHa4J:x(Ʀ/boquھ=>.2})<Lz.ዓɷG)ٶǺ
ZD:Ho-^7kJ[Wr.AQӧ]f%2طQļʨAqO Y"bK@}y-lxh1xi~qAU
f,IJBo|Kq#}~7\#x	z,NxdvRS˨<ۜ`SI_q:WvT%5I976~lafkf.ڍ)3K<ȇ6zkJ(Lo(n|JPKMk
  ]%  PK    A             V   org/bouncycastle/jcajce/provider/asymmetric/util/ExtendedInvalidKeySpecException.classuPN@K<M JMkh
ʜ-	DQHΌV	#]xZ	t#r_jdA̍d7vRdiʜI}GrVWZ.!kkYnMHTEِˍ3\ِ:N3e#OjЌ%h6]	'`ct@ׇ@>8hӐpƓ6OU\'̛;7_DO4-b\PK%٪
    PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/util/GOST3410Util.classTRA=- ((.QQB@F6MA$.ͤa2N:B_H!U.~L1cԜۧo/?~~`o8^f82n;CI0tZ!;!iBbKC7Bgoq)B"wPXv5e[*j4Б"c8[H{I!DS<aШܾoI5%VT?߬Myoq3ŝYxŲ.,V1Ťg;鬝J(}
-s欳Sv&yo	Wi.ǔ1:V\6]%;c*TךأkpnuKޢC<ۤh϶̬StiW/Lۡk&P^lGlDuQ'
뀊ĄQNZ5pZCv
g4Сᜆ.hp2=chcSTڪm{)|˷洝5&Gr[4:P뵔Vc(X
-{T.>ZIµkWw3kF4π@HA#noIq'(84pC*:.aLeøq
ttᾎ븣`R b4у) z1 JOm4Z/tb[])Aw VEF'e1p7q~ #Ño=;x0pZw4'y,~Eg|Wy<j9xWڗ6Wi$C'`(d($JBz|!=Jȋ.%dy!!-PK.    PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/util/IESUtil.classR]OQ=Rvɧl[JJRb
HÂ6>leۭ-I|5Uo2ٲKmf9glǯ_," "(bTĘ+"B)Ab6\|1렑UOH0*cR$=L._\/<[mQiF!TQ1->=WkaB2^"o6E[Jk]UOTPyTRl
0̛VE.ԦmpY
۔_<jr{+}ꪦV5.7,DeٮQ-[7r@!T.7i G3	W\p]
7&SgbRl
|-
A~$ #:DsADp;qqw4~cBa8gi5F[ՎwƾZ280Cy7'D(L;H|
|K'7`%caiɝOx@ΰIyhE]v;D+BkS!P=0
P)Ax?*`jlr
PK,u,    PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/util/KeyUtil.classSkoA=R.ZV-괉IQ4Bm>-.dHWEM( 4G~{ιf_ < D`<xK|.E5^f"XnɾǛ`/Yk9r	WF,(D+fӤib5] <<}E^݆c,.lFͺI{]h3Uتӟ{'[OAT,b1Z&/1O2U&<nц67W*{rLä)
i
\<;;/Ir*QH8SrB
F!{ضˮn9q
i ~5/ɤ,601bSg4,蚎0n`QQEL/cI[ӘMs3´sf@IaYV Ҕf'O$;[0%7@ZSsaFF{9Mf
}u:'>:)^OFG}\yN;CD~:AwsHģrH~|\(PK0r!    PK    A             T   org/bouncycastle/jcajce/provider/asymmetric/util/PKCS12BagAttributeCarrierImpl.classV[WWaox`mZ.bE@jQ[:L8Lҙ	'xAje.C'\ڽɕ@Vw}=<$z;FBV^v\P<utCOHa[ņ"![B4lU7b)T[HX/r g6mSJۂ
Tg
*	-"$\=iGV
MvfL1CWU딩#	D.x9ΩA=ŀii;m4A^HzҐkGfFVn+۝5Uc&8W-+O%F1Hh˪Ҷ0?ZWmu*.Y:4.az/iȭ6A2BhhВQeV9ՉW}Zȁ5e[xr`d@J]Ӭ١J#:`L49D1HjDRM*s$KB(asZՄyG*M9Uq7bgR'fEIUyiXS~\~o,L<-r42d2dlEVdlC.2v#c}24\e$4+瑔O
wyë޸>~WJ)hv+o1yWj^UB,ޓcK6eBu5SYau옩't[GZ2jW[591ZhZiK S>q]੆d&˦q-R*Q<QkRIC*8oċ
|,㴂 
a8EQƍjLrN&+㼂F
:pq^
+,&
x~Yhna]wNX\c=
)na1$8,fY8&G3,,,zū,^WP2F>w˖޷mUQSCg@ jjHjTC[Zm'}-=|.Z-%tO,z"ȃzx8?7o1d7	,$]DkC5н;Sꪃj'G)3x?hPrCOg|?Zv5(8ԼE|aJ\٬;FD8&D|A#Evdpt,!Dt$pF}|~n˫o$Gu>x5q戬ء=B22˶NB}|vBSu]@-x|etr=4pXB/hg.DM{*㿋Q4!uyz}GPKGT    PK    A             O   org/bouncycastle/jcajce/provider/asymmetric/util/PrimeCertaintyCalculator.class=1O0۴iK*bֲXH%,@T1$Ta`aaBbN> c0\eJPJ=Rk\#]'a.mV*"kZvv(QJ*[u]WUY-Ek+_!CBLSI+#|C{ʌ	&>gi#-~`~ <yq	_
qyڼ!+0=PK.5*   (  PK
      A             1   org/bouncycastle/jcajce/provider/asymmetric/x509/PK    A             `   org/bouncycastle/jcajce/provider/asymmetric/x509/CertificateFactory$ExCertificateException.classQN0=+mƀD"T	
&JqKW *1|):9׾?_ p@;K?Ai,ʞP_y<b3FcWʅT?)џs1Q~ |YAGŋX(s:??XϹf\ErA)Gy

X=z,6DOk;}Fjٝ
HLNF<r 	X5QF-=
g4#nPH7`q,b"Dg\]WƦ^5ul:K;߀TjZ+/PuK45Q[h.:憎vDEPKctM  o  PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/x509/CertificateFactory.classX	xTo2M^^H00AQVI:4@]G20g&PX\W]@{#JL+}oծEJMy̛Ҥ_{{Wyr֎v:{uܬˋ"k}['0k9)imn6Zkw 3]m3n2ݞ$T0֞IRv YTi;5ւ4o]ZD`OX-Qb_DScEo8тH'F!R\ЂZ$RmYqv4_3hz(PHZɋZnV< >{%"
*m	$RBo0S>˴ТQu@3X|YTѶpl2Ᏹ!9;]o߮E~o0<r};Ӛ#u4]`{7p
Z58VsS$ҥ`\55:'Q%c!s3,,&aSTv'X_KD|ۍYiUF$cGOI?JaLQ얥Ts_(ShC0lb!a?5=I>6$*XeHg8Eb-WPd-4h,yhps^ RiU-gԋr1pu|B֟Ӧ᝾©EsZWjLe*jsg>uO#]~0RҨ|&̲?r~HZ9c]M-pU^X_oD=l0eH֍>uOK<
Һ]FQٕkWC-+<[m<tBU$&4"Z7ݨԐi3`VD3Xr#cWَ;*L	n	K%x$4IX&"	KX.	JX!aUVKX#af	-Z%&a+$\)+a$K)a.	@_=Y^5~{K%ӿH<tSLi)r*>[9,ksma9S_کڑItq#SM*[Kg|RcfI&!15d,E|]?Œ4=e1nPz#ظ'G%NDSȭin.ħB>r3|&!3ߪ5H[J?hF>X9z.Wir|9K3	=@$!9?
RKϦ)ߑvfUjt6orOtsYe[%
Ӿ6(a.ު`C5ަ@\w(TPP0RЋBaSZ(Rdx:bnW.ݭrGA%ޫ<ExC1ޯ(8p/>*RVpC1+ݧQǰ
jQu-'lg\21<pM=ĳyvD|\1"p#gx8c'P0!c_WeN2|I|22>0'#e.=lo7K?f#ßdigڛS1Y7Y>~k0wgxig.RƭխLe܎ɸq'{|87K0'o\?~u(`PhaUS};;p//P!(2'lkZ^5י:KBjX9;sg^ts<{^" 
t;hU@t*..c!`v FHukjԒ4:%WpP7Uv
ozEbvm;UqQyۇ0qL\Z}Xtو`;*b+.M>8:*b),Bce$Ӄ}[Q{4_<u4<qQ}?x#
qQ:jf&P((liNĉ,톍p
a"K`_6{
+U.!SG[FYb.T\ԏ9),猋\90
rKvㅓM)Rc_4pҐ|X̓Ip\,LtXuVDhGe9P1R=a׫2%`C(dYVm+8gU4tc{qQuN	ʂqQLdx\IqN/ݽ57͸K~}4ŵ5%%gP"aTٓtJKk!!`	Zǧnr.`+Wȹ]Xj]k;&.uDym1CORkD+t1J02zKѠLܟ526Gb5Ɏ>H):mft"4{:]ǨFK]٭KɜUv5K'(Nq
bB>N>:GN'Ndrʹ4~LA=ш"și/MK{Śznd7L 6SS_NfiwďP')ćZZ6pǷFa똸D@O=6NW>ˎ5%+O>גXMcF4]te.4H}rY	;"NѪVvqJg IؽʲOrQ1[KB/.C^PK̭  U  PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/x509/ExtCRLException.classuPN0=MG(t@al`@RԭkGi\9NI
$P%>BCsΕ'+	ܱ̤%p8+rAЊ~ӄ/4BO'%+#UFptLxYnRA.J\MY^-hiy}yC'ٵL[)b3bdd(?pb/58@A
~.	ZYĵO"6,۩kv;7l5o	{PKWR  }  PK    A             A   org/bouncycastle/jcajce/provider/asymmetric/x509/KeyFactory.classVk[W~
hAkA.QjrmJ[lq!9w7hz%<O$S?4f̼33sv߿
:~p\+Nhh0!1{
ލ	ƄZeI˻MdC]#G28/ґ0^:)F)qm՛4I!YR
)+K2{j3n-yЖ5:t%SFecl$4ZN
<RiG8NICsiN%#AZ3i9~%MԞY>r]׊Ic3.f']#7d,cs`~lgْBֈX2p4Q0tW)]#nEBQRϯ6cZgJpU(JǥFQ}+Y|KUjFr;TѬ:ܲS2J	.MlɸHh0-<2N,I`3maÕ-:9e3V>&*RzkRmImn0L-*"MccZ4!H3S*Egto<;;ms\q2G
GUkCop\.t!~񾽽$IX<gUoAW?ҵlB(P̀Zjd+g9>|(/H9UfBgC5*2Gg~9ȅZjނ#ݩژ^%Kd͑aZ+'sьWѤ4]bVGщ9gD3qJ,xMV,*q]XUn obCO FQ 7*!ŧR;JXSb= Mia* 	LbS	+il)k֔	o.v$c|=oas3̝E#m~`0H~GVz2e'Ѐ6wHzʾa7Rl_-
Ɓ~{m< $3XTբ]O辟-C;;vܦ<GR='gQqsc!0aO}4$O*5hKUÓ5|0qq/WSZի<
o da۴PC|L@li,\,v
9n]'r^PKq{  +  PK    A             @   org/bouncycastle/jcajce/provider/asymmetric/x509/PEMUtil$1.class1
0 Ej5U{((tp(x4
%M$^x(1
|`1A3uNE#'[ܵw^Intu)-o[m-cܱs_|^+
BQfʸZWWSLZK{P99F#
1N& PKx
Y      PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/x509/PEMUtil$Boundaries.classSn@=ۤn
4CpE4@	^^Gn/HH |b66~J9s ֱbZENT2Lbv!?Z?fP>~
X
H/};n+Z}ayQqc=Q*]ðpjH7;Nۇ6bOX=la`%ţ]A*:zzzI+k͉
9<tEĠE1w8{9QPPpV`<9sj\}S4|JFN_7'&#:4iTduqQztaIy,4W4cEk(IT4^?l3p}6=E"BLgghFǂEmd(C(nL
`3n~/U@.SXJ,_apsB)#JrB1=gֆX=:vY9ΏtPK+    PK    A             >   org/bouncycastle/jcajce/provider/asymmetric/x509/PEMUtil.classUsUvn7FPZBAi)R
S.iUnN-nn/:Sgao0/>70H&-	3LLowG #@SR𮂽
)(xcܗq-N0fΎi4s4°8Y'GU;id-p;IJN3WQKIF˝]c73ܤLn$}tŸn薣O4yƳ3^r#{I/{N/P %h`ւ)n/y{Fjɦy2236II`x;"bȍe,CGnny`\ԋiMIl;e*/zIi#{.LR\7\W?kҡ2X1:-ѪJ91h74Tgeqp<Xe\tG9L9#bLX8B'+.UiGFfohVeqP2>`8=?9F7cb%xO{9*nzE|nC%|~}@PbXŖ+xukw+2QNtqr=*t)Qq7qd4Q
a(څE.!ڠjFL`׈a
q
oᄆ|(8z` UD1gU`\E>&8'D\E֏Y^]UJUbJi!.ZzQnmgGS
P3̫FfXHqD(s$
@l&я&&m
h=ՙ_1 rOHB@"j~Ham`ϸ#ħJ0GRdVQ/>JqyBS>5BW0.>COjt_zAre-\HϊiP	i?OF_{!q#h%r|:R[>	CX}SQ*rbn#]=^mU|
B;1Rz6$+caYf
D
R߄wc'eX%GtM~k3K"@!B!X0@X<D!bo+Ѩ{ 8$4tT!H+}<j,(we%9" PqD:PKI  	  PK    A             C   org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.classW	|nۏknBD
]6fwXm-Vm5<j[{Y{iV{m"}{273of{©'B3p1ˎv̱,;v
X**uYO#cláH(Fs~]4	ɰţCZ&=;H"A2tzQO<Z<
`2U
lj~K
=A-E#dW<'RXgH0yìk8lC3p$d64v[7ԷB,!֥+&yŴ
Ȓ[+L[{Ȗ)t3ӂ3ڄZ`8fqFH(
T LKH4Qhuy)zJE>4R<ىt6&)-ueP$Ƣwj$i͠I[J
SH4S\
a[$NC8hv)vi"TғHR=Q-)$IDYֲp
-
f9IWY\9Wp4Б+5!9D읁(_ڱCkM.0''Mjk@oxT@^[hkV[hbK#.	"CS\RS)֥B6H$`l[m`Wy`.c|!5ᔅN%"h|	X0nuڍ_/LS(Asp KEHsgV3YГ5Jv{5\1N̣#0omPo@"AO{`{]9ZPwhl"hO/u2ƉJvStj>FV]y9P.
&s$X6"Fk--3kPgD8_j-Iz5:Ajrظ5|cׁ~}0>]d͑u/.]zOLjƮ'OX+܋JZw$
2cM&^Y""QAvcZG2k::wkٓltSb3Ib1rF7BiivLcKX%qjZ:s$ΕX#$J8_A%.hX/"QUbK$$6I\*YbVvmI\.qTD>-qI꾑cAgV4r
;ϝE</3jsOl_<FlE+GَbR
S7#d(|~E`yveylзX(vv8f+\F\-kz녔+*R^нVNPtBu_BAOࢠWbz.u5xG8
n#TT0qWqƚʺ=V/	4^F	gCha{M//6z%?LP\YV1 3Qۡp¡b?T˘,g$;81&SbrT4*\ɤP>&sq#*1'yŧT,l>*>Xd>
Xd._d/x/Bc*&XT,*H1q"Ohw+LZ$A&O)W
8y	HA
RG{=,iO
zyz5~`/3)؇1_+^3/
n`FA rWp3xY-[;m<Up'^fs&eg&Sp7+߃W܋|ɫ\g|ׁ,8p2yL~sLM=r?e5-j6%E	,Tf20[ؤB#XIS^߀gþ5j(j˚ڪܶŤCpx]5}(o}C=Ėqma(#Z>GRS*5$#s\HK-ImFq)8*}.%p;ȥLZcg
}e?n[l-hw5(u L\
YjKfc<9*=79gIG#߳>~*5D@z
N8ɏ}'`=fK@bC.}z0)x
xIm :$J<& N|Ψ;w Xuʌ(<lU2bxax2fe2bm4ppĴpZ֧qaL۝u[ᖴptwQF-'Rn"C8G%Zu<Y%iqZiqv=VY7\60*UA(,it->^k}N6P:
ևy z3xI@COk[
Uq<Q$Xeل`(*E`럔#qPR;/q5CXKNL~Is	KfϙĕJ2f*201AeT_/+(=Rl.Ŝ&,T4W==zaOZyhAX\$q}^&"D{τE8@̉~.ӀX~gTyi/#NO)}CRiomʈ1ߧC
GfrZ^W!zzewRnnW2|UΈddĬZpO|198?^2 q"#z#\MZf8CEЂ>L&a9Z</ĩ/3QJZ,k(
8$9>i.N8VBĽ4?~VZTJ|քlBg
-Ύ'j&6b_Ro.E1%})]O	^L7J_em*t &:4FƆW;^3h^5;ģxlPK߬s    PK    A             G   org/bouncycastle/jcajce/provider/asymmetric/x509/SignatureCreator.classmAJAEǘ6*K(BU
sNYtz==!s59[U/&$)&Q.J5ToyU
'U#F:z
EyeCqǲI.x/1lݫ_yVܱiR%T)Yh%tu-):zo#Ʊ@]䔷_LgiFyRC|}h PK%a   /  PK    A             I   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLEntryObject.classWy|F<z8lcpɒ8NmC0G6"/F2ʵۤH[AM
[Bz6mz		}Jp[,̛ٖ7G/?tJ1ۍ"7T7ݘFnu̍
7	Tba3">yi3ixBWٛ17J;ᨱvq=֘䝹HaL݈X^SݫEzZj-â=
.ߞf:jOpM7βUs`CVAir=-Xgpo4aCZ܌A-n,Z:Q7iӺH\ #ZOnDfN
ڑYo7caS8^l;cqܼ$$mq 5hNU^˔l@q6/>%e3)/шS$+y58!S7m?	05ѽ#imQ/MϕԾe~-dlV֭јѻu"v#LcDe:Omؼ]72.WM}!ǴfqK3tvMd5$JC	D6nmRq-XD7rJrff8óKxݗQ%\Ʋ-k((
LFڣHTȑEgڷAu
wН,]}ۖ=_l$Lu,
g??f.=De@°{\g'EE5Ujybbu$ۭK
yN0F7dz}P`WPs%dN(USII҃=hoJ$uPJ.vR ?iiw$UfVPJގE^یPH\+^AQbD%6JlhEb[%JKl.Cbm$vKxċ$nxKj<*_LnT/k[%پLGL'd."5nscan.>힬Ĥ<m[{	my[֍G̊q̬K{3Q+`/%Tmje+Z'?e>ߴ|кHmw5q+9?39{NwR$WJҵSzu<9[7-C$˕SssM«Bxbhrv_uOӁW8ymjyW̺:_msڙ~b7Qq3*U<U\W:FܭTI9*VcclaR9*ZZUxELUII9UT<RYJ&mx
?ަb1ޮbޡFSEޥBûY{T*},vHBVX|HEfrDE}*jQ}`I~&G|ɧC
x5o1.+a A<ℂ|GW8|M)H18
^+˃L*g|HpW_gCwݻy&#Le
q#LLWT"`rs>@'٠mh8pZVgv	'I46pY#e)!D)*	砱?_'q/NKY9>biqv_7(<ch5eWъVO|R8Z#H_ G,8bQK(_"0#*q{aĀ8Ŷp%!\Nzg
9
9ǵ"{Qb/
owb)H<l­D3Xc
/a,fH"\tA!K;\(kP`|,;.^$AvL?mQH٦$6IKםVm[kG<]M[mwV8O	U<+8x3I^ǌO<:X ,8/c]p<Cыnx
Ac9(}+rdp_nj#0$4Zia)~yΓxx2iR 1lIup9A
IC(RVDsG*8ԲO=~1@^("[alh_oK{*ցat ~u-(L,Mv
6P
HP+
*H
gT?VgKmPIc:;4
mSZeH$.gv)NaHqimn'/`ƘOdgl	k8Bs$~敖:q<ğa^|~7:xBx= ,X:WaGQU3۞@j2\CZ`(X.J(~"(=R	\DDwo3t]*^W
zb%PKn	    PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLImpl$1.classS[oA([`)k[۪Vź5	!MlJ_aeΒOI?x(MΜKswv|}1D˱!bK<@zId8\dHu:v|AJisc	9P0!7RFDbw\rܝ;қ­_M1^l#FʖfO`Rߗʳyder5֥:/kp8Oz1CaV@Yy"(kgik4,jHhHjHi55,<F|=5mrTWNXcwbnM9r6c;:2#[:"`:laKXv2&qn>Ci2G]ԥm䟥cǑ^/5~4(n*.olk`r7m"YkHX\|@="Y`{i	|tj씾ysBi,Y&qSc;Y"/FvƄOPK\MJ !  5  PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLImpl$2.classSMo@}.1@nZҤjUTE=Dan6z57~R8pB̚"X7?|Nz!~@IPk9G摠!wCVW
Ͱ)*#E
Dg/c
;C!:#IA[1YܘXn+Db$xCv
<zR@OwŊao^5~Ȱ;My]wE	PB΂eᢅY6|tG6iL6ˍnZa ̱ӵ<!A &`lᚍ"۸ecn汈[.1fjqܓHqBMm0($:@M8E*JyBUdhȓ<,ʴZu|qJg~y)a|>8)NL}a\|7UOz#ڠ21@З1Ov,*
\L'PKW  \  PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLImpl$3.classS]OA=bז])(h)m*	iXXcq:[o$LD>2ޭ E	&{3g~
1Ds-۵6Cf[.W]_2/CIK(
ʒc6Fp2_[R(Hm7ZW4.Q2,_ݐ.}7m-u]<P4[4;',&T-̃'ggͥpϰui7dJ/va=A5 Sq'POMU
q
	
t
I}9$QqTL._=;\[<Qb67q1#yt0nꈀ:`!4wHnhR3Ȅf9Yc(y]xؕ5~W\W%
>>%}*%kEq
71P%@ۈbyS#dGX)|A#/:2ǩ1!X)q	&avIz!X,Pi\'N}%/PK8    PK    A             B   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLImpl.classZ	|oo3IHI6!( e3nWo}AjQK[	F/lPZ"{3hyk=u} 0[Zm16(lp#OzܾR3k`3
PD
7%,V$4Ӥn;"4j7w#AQkry&Ǳ틨UZ֠
"XJ"XK2Q#OHeZ!ȵ[Th
!?vlUލKh{G(󪭎آvNC[3gG0QC!G
ɒIDM;#w%pbvwسɱ9xjg!db`ڜ&j#	љIAHnYV2CC;.8⥫Pl<KT_"z8	Cxab!zS}{aZUW)G}$nVU	O0%[8dq#<Tϖ_o!{*8oejk
[#5!hF~U^q茹jh
aΰZI@VJVCEuFƃhyC=I4UObmV]@aU_XЏ	l|3q
ihcVzmsyn9f=7̷W`+Noۧ뿌"ݦj$O!]N|04moجz5a])YΊWƙ\+!U5Ya窝W[[VSQMI_쏴AwX,$s8M4#}]tc(w:@{Վ3Ĝjrf.`+ޜ~c+Y١ꮳ:Ϩ|%~Mٍ ڮj/׋0V9aRWq32gX|wD6>pF0xCƭPqhg~fVw7PUٸQ
#H8*
c
o폌QS1*Sܾ`[eb?9>edRmkmLC'BjSR0ҟ)l_qr*V/`+3&w`8*&q8^AKdU)VP
&{iL䌾 ݴ'R^^/'KܡM\j
g$ AVi7-;BzURVfK.pu,~-sy0rл2!S7֜Um }j;QU4\
~SMgxyz4tS̜acp`V~5s5SOj6(ڒ\{+\l>FH2sjŔLlHs-ɌgTZ^Pf%QJ>ݞcb$2p6HWѫ8Oʲ3𶧼fZ/æ=гrxCɂԤ[a
ҧףkOuܶsƩ#+k6УagAipY>i0
EI@>VS*JX3jLz/$ROYGvp{1=oIDGZc7\29dCmK{)6IY^UlXmma
rl  
Fڠ%6e
F`
N8
pp.M@K|Ie,+*rWRU5_
-?#??3?]p F7	J"V]np;FN;KvSјyV#T4f`O9p]qzK=q.mLբW7/G#KLњ҆4T᩿T޵8~|5O4=*EROS3M9:ؘDkMXm<Uk[Ķ7ffbMnu$Y)\5Ƶw<Ѵ~*]y8K:9ĵOȗ"2/HtzxN6(F2	wb+ЯΤ@FvڙlISϚqDs9l]&fSij^MdM#l;#9!suY$O=:NISgiSijgT]QKysW9(K'SeYTChj_Zv#h
khHҤ5`OyJ5#qP%qO=:J~2D&OꃼzRKW<CNI-_HC^o)Vej7̠kg8 Z0~""Y*+!\!~j4
OֆukyCLz?6l][`=P+0G(0a:vɘ$,P0L7^bSaC+a3C5e-@UHp)0P%
ðB02(v&h1

f(؈Xt6pKЌ+}?NR<*5qgc))e
,r34SByX@
NS`V)p7l\@=d]f
e؄s8*Ѐg(VYR
ffBXg)p&0K-_V`=ؠ@.U S#Cr[O)p:fU
,|-
8qo>>/260xZ.b&M'W$d8W43e-W1|=2b^`)/Vke8̴# 2,W[?+L{b2dx+>`e73\ϰOnУ|x3~>׏72< !e80<,	2a;-11$I!	2~Nn`O2J]2ZpxL!p95c>O~3G,
/cFeqx;bp/Ã2*x\x`̅p3×rm2F%2Rh*{?:;HsٲݱŁ^ +X8ѓS6R6FJHy11Σ
 FGy7ܹ)؃OWv|Ⱥ
ÍWJ+-Qz,Jōp3*bt6vG vQ<?m쮾眕QibDjpNPZEXO.ऀOBO㴿ę
z47Ym賬 4-aSU񓮚Zac٤M0^iwrTS0QSmjtC2N1) urKt.|禘2͟vc~v< 8G:+u/:@ҸF0W^m-ݒ[]WxpX[yr]{yeNKyET)KKWR3x-]@K`bS/<ϒX*]4DH7NyO"u3
8mG;CQ>ѹ_MQ%QirTzHKvcvxnn~̊JM1*=RˢF#~fΚ+D^i),{s%x-E"*I=m=ҙ
{^i.]1]hU_=$(ǥW= ds]-ڢlZ
MdeՋ9tF(SiCVfZ$kgY%wACKˮ{뙳l"k=
hG YDN"`1G8mN"w\K"/2TF<n! >O^t&`((*-H7jNG`'Ksh6}Ps@@mu^1$I'a<),H4w1Fh}ɀjw@GE!âGpF^xG̗:<BsT	.(pYy5
<L2RX[R=͇Hwlm(l;F1sҢsJͶn.5;qNڍGw5Ӥ߻}|ʻ1}W
~ڐUb(˱G%glåqFj.֙FQ|+P$p
ЅF+'VVuuQTbE"h"R`v3֓4iUIaPcnVK٘ibT53*9ȆM]}7,SPW1G?7ץPunۤ"o]Jv(JZVVҚJLն Y$L'`6*n*zK)8ѹWjD
$q}=0bp1F<h0H/Q0O=BwajO$ 4
&Ãӣx	ȥ$wA|/sHQq$I-41ncxQ~)_'͌+1҃:iNe"=fР8;),2:xyel8? Fŵ涬hؕ9>Zl$>$ܹEB8	ƿiMg/k{dOtKy1ջ^f|Lc4,TɔNT+x*zXbO;=ɩ<\9
CS8u36p8JK*FiYs%}E.>OS@^\V=4͹uBNuxL{jƍs
x8&	>R'`m	b%ŕ{xȌ/iE ub9ts?P;ܡ\+zZB	:\\)íun"}pQ{7}Gdу-qz/PDX¾Jދ?kNia}l{*:'๓d=/dQ8P>TpFei5JvF
QըǈL`OjV@@%9( PK$  c5  PK    A             F   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLInternal.classR]kSA=jTebynƛ{7}V?JMAD
>3gf眙]/ 5vgO-c{$PQNF:Ԕ:XjDnXD(eͥ$~2zUb&d%fLT|:%-y(_a4xt(*PP	P9<cڞ@̙Xh	)e?KUn1`qhhhr;+]FQw'tB,s! Y4ayqع@})J_p9![
/˨ylf\>f*mGX[kQ}E1.ym
,'PKB!  
  PK    A             U   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLObject$X509CRLException.classPMK@}ڦM~x҃4փK 
*u]bBMZ<QiO.켷3ouG/d9F YJ/^P.dL國IA7.Ӏ/8①>g>t"Ù7h1XzN
ʣ?	38J_?#	jG,p`$:*o*($hX
Mkm!iטmȠhBIY<Il9P-ݼ
!"H JXF]
*SWx)%j+X
;аس?5SMY!Q_P}JˍI0 PKkvP  Q  PK    A             D   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLObject.classW[~,(14bfIZc({eF,joڋimK^hVVTп?ئ7,%>>ϼw?gf7p7@M 8"xp8*8ێPo6g9l;F=}N7)N:)I;lK#iYMڎ@Q|Ԕ*VbJqTPmOTc)7ܳ챶X1ɩ©^#eLi=6hcw1
4st,59g8&9J9FgtYkqo¢i1t˻
YzL$.z7v8eHsTol7)z:;.ƴXORk	֯L֧Ĩ@řT	c$A7og]L33JyX`d25Is4\/aE9i>-fm!՛'mϞԡR9|_$_(~̖B[lhgD3zqf[-M-JvMƄiERiuIe6&mx@ɩx=
Nܬ&qIޔY~س׾MJXD-2f
rn+ݽ4%NEPA!a-*ZURQqXGUܥn{U|B}*]|10ɖxݹ~*/v.(,֡pI%~Oiʾ=(+9vy<X,sFl,6/݅[s'M|IoJ曇\-ԅHR^nG1϶2[Z._8 h-֎soԍk}||=xs3*IVf{h"oʤ%WnptHjq87S㣨ձ;t|Lӱ8މOh:`PǇ0vTF;Pc7T 	:ᬎO	T3Y}Nǭq#"l
шtŘf[G=&Ή=a$xqFR'xB`FOj%
Y/ix _ !g475<$
4t)hzC
_Fk|G/|_C?|O|zeh?X0uSg?i>Tl#GeR;Ҩ٧9iO5QU('5niY|,.2*_a)NC9&72x}	+#D*HB+Y
0ԓp").]FKWLbVZ/cgkK7PY>',hS_;P;T{5S;B$}efC >k*
2UOQ95!U«-+J\h/6e0e.]eO(+>V|P.xOJ,'н<Bl4OIf:fQE{Sa9*uTV/̃&g6	Lci0|\ZFW
JWY_dp9Vّќ*(*wr.H)76?qߊ6B{yEoyP|vw^vPy^y1b5x	Y/Ks{fɷ-YTʱFϓ7hPK[SR	    PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateImpl$1.classS[oA([`j[XX&`Lju0ف7RMj<QƳXmÃ	̞ssw [x-2ğ)OmJC2BKndKu=nFZ2ԽpOPc:;GB=ݗ0O@Vfm]\s۾:m䉉q/3Xuvx0J8GO6)|xGF*A_>/Ѧ4(|W?w7=6K',Rliט*CefQvظxyĞT#+qJ5ݱ{j1cu6.ኍ(ڈ6O`7FK2;ߡx"iJ;ɿ0uϓ f'pi	J|]Dl6F?bdz)#"r
ϸ>d8M"%R>A*_ f֏)HMXA~lߢL~T]$PK  (  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateImpl$2.classSMo@}.1@nZҤ*UHQS8m6[gcGMIEc(|4P)<3o c!]\}ǐye3dkɐZr#G2Ӟ4 2<9>}HaVT$E_+3t_ho^Ha/dϨ0`XpZRFlsa?C#K#xGHѰەF+?xzZ\+/LEjv{>ëIL[E
:m
V{Cr-Y4Mm$tzvv~WbG7_ɴ8&_E!/`l<۸bbs;wr{0U	[?ɮ4Ő{#RW|EB5㑚R3
]{˛]j*Rkȓ<S{iiH4|iK!
XI'P5Y$<$;Kcƹ,.GX9
FB_,U0GZ˴p>iPK'O  |  PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateImpl$3.classSkA6=^ͩm?Z5T`}Pb`Zu^6^&4oI,|?J;b!73;?vg dȖʯfPCnZ239_F
:9=>^C{Ia6RW,P+3Ptw?c_?r`T2,O<c'Ҿ׎@z={BzTGj~_whZ7
F(AwnixMW-X If-X.ZY[cXnϢ*1kNml2lJɾtǃSj邵'愽?"y,ڰqF%,ٸD\aG7ۉXcECD15ߕu>fa(u-q,HӨ&|pv^v F
`$ Dp&YdgIccq?{$_6MepImP wI']I	UNP< C%EbJd̐á}P&+Oޅ%PK  g  PK    A             J   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateImpl.classZ	xT?f&oHHB aY(Y@I@h@K203$VUKBݪմJ+FcEۊZ.ޛy{{{9䋧{ Wrq,T.X~|@,+t4EzֻcYyFoLݳwG0s_iy#4cHlޡGgI_'p(qr@[3Ftw]3LtuSm[teb-zGqO{7ث/MI"q+bzA-gŶzOjei2g%@(aby;ݡ97"Z6յ6<9r~?
!z諯
z(-JFA,
bDrՃ=z}͍荑d7 C_w[iòƧGbr;wt!']zd"=ro0@	[b&o	$pKJl1I#1ZCҳiͤэP׃1o榐\q{{uRaMa^od#p	hHMrJawo۩$8.3w"#/LtGdqDr:	Cx={O^A-/1=B:vnSx
YWGHxRP6c?^h8fK.>*6[
˭fQ
[ۛ}1E*٤}Ӣyj
Gc	=Dh"IzC>brXS'͡սzScNEx*c
E@7h,4[
1z:Cv!_:bf09wǶ.fo,[s>	iƨoY%});@~		&
.=jte
D{=0є2D-7m`nSyiaLYӒ^%;eLL6z6:=IK>2%hsMm
PhpZl
.)mCy0ٰm!YԻuʉ9=1~H}p4ӷˈ_J\1}3YC]X]OtbU91ZkCHW9ц:mJdS,"݁Pt19aNnom \[ѡSrZYnZoSeEM:kmIjS$9,/2TyCz J7vׄ8֘%Gce%Oi
1KǸ! m|SRlbT픻3ئMeJvd>"F,8͈$٧m($
Tf@bEJh0;X[x-Ԇ09Ϙ4K$6T1AQj
6X|B I*uW;*v%` =dyVCRL$=:cS_Km6>)͔CT~noeWk^.ču~ZuN8YH>7hhqm][bʧITw5/Wbfe3sef׊Y5%|mT	벾rga2癛A)e4]#dD,\X7iXvmܠÙEmz*ˀ,)9$-gTӬ{s4٪+j%,\klLY1I<hvL-1b\K"˅
ǎk{<w;}zmɱr/]9kd.l
KYP:uY릋A$3->q%wSwE5o4s]-y&ZP&JXz3Etg`F[\)Li=VFAZ".EU,fj25=#)x{zI==cuÉzƗ,noכQ=~U[i4<VwBn
qn䗫(t{p/M(T$Dh%8&bxwu{6aTX!wuqڝ.и<.w	.(pA&.83]v.O`?v/\P
|@*!T.VU>>~(WT!V
<
|Lx\~>'xBg8@\A8s
+V*/)>xYc
_TK
|Y(U^Uk
|]o(MU{
|_(C7XDnDSYKsMfWd㷅bjy|U4l/ٓ+,cW5N7AT~},N0|
I5IC3RMٺZRPiU[L9?7ZStk\&kEV"edM"┮FcK*FxV-m4DXBI;팘8?Й<:>s 65c&ןu/MX}@sZt/d,/)A+ۤl%&M{Uf
pư
8#Wʛ.Ro4?4iͦ4ھQ{HeV.L)Edt;]^D2cM?ٙ`g(D 46ɐqM;^ɚqY<j%,Ngu[F3byVӯќucҞly6e?λi4M^]v?Ǘ(2q:6ꙮpl<w3WÕg*]JR=G[4W84Y[ɓug*lȦleWxi?Sl$d|۳D<wDeSW$|qHt
$qS)]1q'Ɲ{򳝻ѷ3򰔪y9._nsmX
0G'a?&
*pUc&0p;ÓdS1W`TbU?hp70K0Ir(wd
p+A4=L`LgA4\pR
VF
a&
62\j~Pi!$3. a5n`n ЉWhp3^ZܮvU@0t
.Gg;4;5Ŵ$]l?n
ǐ0A{4ǫyR0zjЋ1
^
n
z
=>
<x;5^
Z]r=+}ûykO
~7k[E6|?ۭiЂg!
N~n
V={5h4Xf	s<Cybx0<gAO2|*`x<gxAQ1?_e÷Ut*2Mf3|#y*~*j<Nė~bӊJ&12LfOe&

U1,7~NY,Ë!U-Uýs*!8Q| 0bE¡b+X!U?0@LQl|LZd
_/'d80B @=:7/	4Y*./1@LWq2h	D7~;?bxCPie^c?e	$*^$hW	u"_zp22(ESUl(4W1WT\#fx1~Aŵ|,#_i/L/1PG9C~=/
a?O-ZS꣆7V@eoWg^ԙ+!IY>)R'e *蹀~#(_9(6WVbEeaq^eX^Y<,έ,=,yIBz*+C&;7=ǻ-=kq,Rc*Hrq1)A.:x<2G%}=;⢽2.a>y4G}3..61.F\4G!yHibHnbM!mGYǤ%Ģ^վL)&Gθ-{P2(Ɔvbb܊~LbW7jP\qޔAQwTW
a*Egۗiݽiuf]JBZs{&mLRSi7`gyi/4`$J4,&n^.ݲvkYKL"ILZݻcwE,.:,`b-3$8.bp<M:/.>\uIwT0EoWw,w:j^xה:K]Ep\8iG_s%\#Z
^,)
jf	;È' Thw?_m	|Ha]&Vp@Tǚqp⡪!2S)l1ԫR/./<r#⨀ˤZ?!ۋA=Rk:'>
.P(Y#F$	ǞL4&bU, Q;S4ޯizr m`*I(Pp.MwLhHJqk͙+Ӳ_>SܽĞK)t$at"Snk6\cpY֚#b.uPC/#]=22-g%}d#_;P	8N9CQ+ސފ[LQ(B+ci٧,WxBoIa)k$
{3(M=L{sK)Ֆ&.:j@7^7Bb2ޞ'bv/v?r=`Ei#rn7oBIIy'`qDt35]knM
C2IFbm@|{6OⷸQ<s!1RUrL_FbEAzFAzFAzFAzFAO =$ﯪ47$̦59-
75uxr˨z1#q(8#M}bu	!'t>-RUߐc	:dܽDvϬsM=IZ:{\kYk$*V4Y-lfyp$C^rYrCf_0|2y
'QTkTDy)qp .fFZʂtOǓFn]l̑s㑫+z9M^KrC'ih?i	6BV!kKeaiĥ
%UpKV+cBZpŁWYF
aEŇ[UǑ,׸Y\)U(~!Ք*G(2GB9xHz\e!)O^uYWZ/ba>-sC5i<VyAnY}
;Js@0j%Xw5x(ET9Y\T-l)5Uԅ,˔SX<ɘ%
<j+cA%A(un"n5
e,VsN$Ut,uZfI!DzړIj,yJGNG=E8u \CK~_Ea<[T]@,PMSG(OhqBH"*%LӜBEԂbcxGbPЭZZy7@߀Bq
Iaf.b8t:|3~:\y6-(?4$;\^0(.=ZM5j
[trs)k(Ա49
u'ǿ]JV)-r"WzؘHyZPb;^D
x!6ndYlXK+\5[39͌5$ng$,}CbШe	YqR]*$VjL)w@amC"=V^x	&}Ht%~XoB2mW?<y#i3d,=uZC֔xO"l4Ł*yuȁKh5?=BI>&Q5MPp	^)#PǠVf'4^A+?*Ar!.lVlu9M4*Sj Yj NBer"cSq3PK  EA  PK    A             N   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateInternal.classS]kA=XVIb˴P>Ud\&.>Wh)To濫Q(8;s{w~vCai4wfPxvOr>*)#6CYJ:J\ϟ3%V	:%oN~(~џ%6{ȉJ169e&rVK~h1EpI(6Y8e(Q.°}ndt̷ؒjSũSEf/ʻuDe71Bo.ʎkvoZ[s
0|0WF
TPA4]Mӟ쌡!җb/VK~^W!$>h6.p6,V+,`N~19d{u(ys~B)nhʼMG6Ǩ|PK(@    PK    A             m   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject$X509CertificateEncodingException.classPN1uq@(SP$0Ds

h>]|@!Q|w@<DC;ho/ $(;}ʱTҞ9AP
?(ٔQ#DK;\hKC̊P7bleNSA:Q|Ι1g1tө
MFj`^)bn		~[CCŃG<Ͽ0޲A"ڝ_F |bCwL)Ä#AB eZ`LOhtwQL!qX>~׳G}԰PK`
Ye0    PK    A             L   org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject.classXy|Tnfy# ! A0,TMj//dfyDZKnmkBm&DMWkVK-s{L&a۹~s3O{xP\.pT.7q;MVY*h]Rkn\FR6^% h <cɼjhT	(Sb1]	*q]FLF\ӪnBQ@Z0X*pĨPMjTfL_W!P>FJҮ1Mz{MQ43])3ݺZv ǴH\9eSBz[B4:P.pHX4i@50eu(N8J*S5Vi!	K2zH9{^n6mѶA8`h	oS
9Pg=qV*b-VBuuczXգJȚ1jvժvGbvV畦
2P#Ѹ%=Uj੥MrM$~˅LC3hݣFWFv<eF6;njDQnuY=QG()I%M!0K0[@7]fJ(	ox@բmHoH	RzF{]]MڄjcWZCڈ|\S亮@#f:3J	+'@1l@PiksǁQJ(dgo2)DbH"vJi%^ij\AkzB)_';uCGR˲Kϵd׷ia77	ӒzɃN	Ĭtj#GUZ )FiFW'%~LW~e]ӊ}wFi{6LFIwmq-/[^4n(Zћ%ik_Jj'YhۭZ|3f5VzNݒ<f#}fNg^ܓ~L{)OIu3"1"#)^/F`̑P$ab	5j%I aM6K"^V	WJJhMv	p&	;$\-ak$,Z	-g?,sXe0DO)Cg=}L&?$uKLPRWu[UeY/S4tnMK+n?W.Ͷqiv/gdwԁn)Y"k&/E,cEeiÉN-A3챜i		pW2yW2n[ qwrMF(-_!Mgʆ	9fsC֨^٦Wgˡ1#7S~$Y&_Un4QP9#s
ҚRN]9ähǻDLN,=s&A=J(q-׎
Z)$Ve
2.T*dc˘hdoq!wȝ\{KxxxpXϰn2$#22WF
d,,^dO°d!#c9+c>$c
EOJ/CÇYGd\d,Ge\ɨa0T㈌8*c>.`?>%c1ɸÃ4fl>n)|t^>'N2<gxIA{ŗo2^$-/1g8/yq#OVnފ3W
Bo2Y/_e:߽i_07c߼Mo
p~Z7+fxOpZ9ɀ)8'4PԽ
Jt|(A+䣘@ǧYR%Ym
{*k9̒hr:}2BXE࠲K[DT#|\NYB<D ."pmSݾ>᭩9+ʜaI?8}]>1}y\H$}/K
;3R=DՄ^d&lsdq$vFRBsIA勇7<
Oo?Pu\	B
x|xF` )ѩQN
gpYO{tW,-s	Q;Y̒Em#t0DD)DXDd-
DO
363\ρ*lf*7cYZ|wC(fBY2)Mu믘o鄶>H-ӈ+hvr
NZ*6\ρ
MT6aYGa<ʝ;fRKPY@dߓ}t٦eIWE<{݇pqt7a,U+ز(3|V4([>1ǘd3߬4.i%tOsĎ.R
ba*2j^/ry4ֿ69ظE7z sW~A8:l㘹|?
[l8A3(fK!ݚ2h> GOIkK$[̍abEzl!myYX.2.L-CqٌA`=O8%̇0NsE(Ŕ~\}\T5`3,}?G~a|P݋a9{ֹ\cXH
EW?,=Z)-1QmMgZA,U'D9;!?yхBq2/sV!]@KS!LՇ9$JI@@7-}Bn>UZAjg(xU|̹X.u:ǒ2W]	۸CGt8 ̕fR	:anMmX6|	7r>ԈpKdDf6y9)ÜY]DOU{6;	O_	z	eu7ĖLJGlkXy(Jhޞ.+7]6,a>Ѳ(D[\PK;Ɲ  ]  PK    A             H   org/bouncycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.classW	\?vqe<`
jQ*Qf5jLKGΠФM4i6mmڤ-v%Ic˶}Mj.;K0g{o~3 V
.0υ.,pa.,v\8°Sf@D1zq^#଩ݽ573յ!""0kRo
k^S/NSyP5
M$#z:3hJ6J"U1%8WgO`[kO[wN,h(ٽֆC=JD(H%PkrPjp(#xRͤR	L|Vb15bZ\aH	S WV#9%0+;蝕ADi$!$Jg0Z3[ǣqBgoH^-j5-LV$PBvm@Ս4_Qd4PT2~
5SQC)cONb/gD7HВԭ2`K<S4I7WS0cjI5HtSZ:'Z?]' Y*Ezu5hh))M`,kj)Z8(အjv)p^*
i*MoݣS:{1c$ӡrMoKiɈV/QY?JS԰gPK&{Ac)`ĩЦ6id'nڪLO٢F8Eg3EXg
[]fL
'J'q}WeMHy911ѣU9f2]:ES}L)9I!C仕oC1I.Gn5+p8z_II;@.~E4[=
TOn.:C$X۫qM4mFu_\ j︺g(L[J؁ﻪ-0>=7%fR{313sT'w'w2dctS*(asJ#jzM`v틬j;lVnZ?Y$`dj=$Hvo.!fyzR["ɚ<ݮ,EXGƧR{5ynuVuX\5hGz726GlF=MF8P27C7fq:{=?FtJQқ/M+vzC-yTJ$ėfP%.,TV	p.	z$Jr	WKH&	;$\+a$B+%K^"aU^	I$p@常k҆F_7b_$w
#kYBkj'ئ;}^Mܚl*^mײ 	Z@9t\ʸ.ϹgklΩSO+H]S3#Fv~Z61y1+&يƜBs$U.9װ7k&TSE
ʮZVR!eѭM3p7MĬjm8ى8{OQkLY5@M13>366_T?n
afX4:{){M2(ţfP;u3qaknޜ.f+Z6_}$E>ϑf2V=2j620aC+"1%20GFJeLF=r!8fxQp0|Pz|HF3NȈ2#2<zqid#2qːф2|xTa%e,xRA|R|262"8+c'>Ǵh
pQ7x+
_fJގ(Xcxڍ73܂oq+C1nƳ`;f8rKq'_q~,^|q
odq#x~;gݸϻ2ox;x ϸ ~Bb_!mt˧yGEm ].qcn_\YQT>Ќgp\XX}$=	Q>|ǉRXuD('jOЉJވ-:Χg,bi,=qucE]B\:8nuZ$DY3!s*I1F,:05-D:%/V	J !gni ޗ{΢.ˎBr0|WcS"cB^);Lavy=uG:,!Gqy׮,_]'}RB>O]iQBMʬeֲNs0zQUy;%ܓU%yUb}#^KzۀǬ 'Nw^<%@>eDXcYF\N㢞,+MN	a.%^Oo0(Q.ϣSwucԺtJ8\Ss
v$mdMq:
7.z o)-^Ǣy9O	U籖PgiO9TtQM{I:76.*-3l|̰Y<Yα#1z
fՄ28a;#_«Es͛weZ<"cNnVdw=nA[j	s!y%b
GIyKqU2W8y0|F0=9Sʘ:((Z
ɴEuKĊ9dgyzG$lywK)sUHe1c87eCsOPK.\
  Q  PK
      A             (   org/bouncycastle/jcajce/provider/config/PK    A             B   org/bouncycastle/jcajce/provider/config/ConfigurableProvider.classTNA[-P(&ɺ-4mi1ivnm7PۥqsΜn % j]o\f5T
r*ɱQ2
v.ѲuTƩ[9[ZoWE*i'"[N:Sq?L@,XrmX5
2?'OB]E>ǢYhJZX
o!~N0q$P"o}<9s:]_0IlF6Qݧۜ)zh|m3we
.uMfb98<WlᆌcS5 jp{at\F8^`zrLH`X	_/nYK`_7g-:
(\썋/!nDz-lT%`$7b6^]i\wrug?uheH@U9|G>s
6sD3p7bwϤ:df}- 70>E\K!;!Ävqo£n'PK*%[    PK    A             B   org/bouncycastle/jcajce/provider/config/PKCS12StoreParameter.class[KAU3M;gv.<RtWtc Aiwܑgu%Q&i]80>~}~} 86A|ߨ$\ϕmڧpdT&.A5eTLԹxxϳ636mj^6Z{	(

w&,{Su1	X
r'=ْϯlDw.Eہ_{urO#H%e0%%F
ibQ˒e5<̦9c	ZidT^qsNiQa jZǆX}
Ṁkc";"*P5W#u[b̍'%c1jfԒuJ!MiUoPKN>̈́    PK    A             C   org/bouncycastle/jcajce/provider/config/ProviderConfiguration.classmN0E6?yJģR`2F$r~ pB@ԛs}u5 é혈\qTRuXYgÖcMf^b&lA8B|UhE&@g)(5f|R&+17*eJ䵊HʳJ䢟n==y	S^2UFFt~;nzJg,Bnw&4;wy#ۿ$`=Á! 8݅NpЩNwవ~PK    PK    A             M   org/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission.classUSU-IK@kI4~ԪmB4^6aa
mu>XptǹnKp~9瞽? ++H*xQAJ༂RY	kI8rYo΄Ἢ*tP/uu\X0ҋ/֪53S%rVҮK%	2.Jn,I;uccW,WJEX+<4ՍSj!?S/-TJ4*%:\gqiUsMX[ܦ#`-z:
]<3kmfMpf3^fZ`qc)nkf51nk&?0<&wyd$Nk.\xk *G
7Mr
D;$J#yXzI'R6FuvnٺV֦n'~Wuu/%o9.0kZܪiiԮ<uږ7
xXuabj!%_vqp,IS94L:fɼI0yh7[vl7Rڤ\Ӓ0}Q	fRFZFFFV+2^}+==Kt|:לK+0<6+>=e:H1W7^z%>#WHP`G#8Hgp% 'iEE1x*CEY0&$0)QyTØFEEaS`DͲrxaFkS~if80	M1PMC8ዄ|_&D +#OLp!~·&Aq1ZeA蔫AtfXI&"Ş&uvKg{,izlzR=J'𸴇r`"v1ƕ]|p2=q#BX!BYsD\h21}LL0g	3)ĉ	Mϗ;>J~MM b2GHʘņb/J/ckpVPG|8Uw;]h]ԩg~ZW0w!'q-aD:%=ko
48]%=u #]!ADѴcz}mPKu K    PK
      A             (   org/bouncycastle/jcajce/provider/digest/PK    A             =   org/bouncycastle/jcajce/provider/digest/BCMessageDigest.class]OAiKl
HAE~!)\bWvXfwJğHH?863<3?XJ&	Vek2Ve\]v}M5TxH@d:.p="0r=Nb|Diȵ#,beФB
L<j~=Sp/jr3OQ@fr{"hsGYh
ߌn7{yR;bN[8c'o{SYQM~;~s(0;CdbW.4I#2=$ʶ'aLø&ƿZ!*ڛ"+EךּY-
10)d5p
\e:fa2s:ʘ1<.22eԔ._ߔ'aSP:
^НÌTO=DF5t\\I"%d	nVkǰ1>AxϘDzv	z	33b4@R2#}AAR>6t
'$!)@RjUToFW,4^>!qt(|EH7NKͳIl\o M^7 PKG  _  PK    A             @   org/bouncycastle/jcajce/provider/digest/Blake2b$Blake2b160.classRkA6?zzML2FKl
ł>4 wY¥q{)OP*HYh-30;uY!XxDAzȐCIr)Cc EsN8VI*{ǟ|V	/,UF:
%Q*>ͮQ(d{3+#~/y'uJE_^1ӊh],,,jz>617?PHXvEA+ƪZ@k6X7ꑍ6d]mgDL:Zj<L%0,ѯfIy*dw?y1|9̼&%;Cc{rwZNP7Twa=#1I:6aQC7PKEF    PK    A             @   org/bouncycastle/jcajce/provider/digest/Blake2b$Blake2b256.classRKA69s=cV[L(`>b ,q{ܞA+-ɳ8kRV.||3;3{s{y
`U!d?3Ly
%9~Oꄡx\}Ui83OFB_aP*:
sO$܋ϣDqvq"/b=$b52AHj-z9Ȱ;,rloV:~'yw8o{}j6x>arAXF-PĢ<lwF-1؏]h.m~سfpZa(f k U)4	#/PPBGa~fC蒝"Ԇx?B]7/G=k$uH6ȶ	*rwPKhʍ    PK    A             @   org/bouncycastle/jcajce/provider/digest/Blake2b$Blake2b384.classRkAVM^/MhӇRҖ>A0C!\q{^$Oj AH?*t
mCoofgf|D!3dܶO~'@=/uPeU,T'W!C0
(yW:	$Q(>ͮn Ne7+'Q~O3"mHE_f3><QM,O,d-2ltuď%w3Qw =v
50`rAX%gQ^j#Fb]hmgPƭ@h-56)SKRiF^L%a
2%a=D0.)Jm	
!ԮP 7k_HLRdlel PK3א    PK    A             @   org/bouncycastle/jcajce/provider/digest/Blake2b$Blake2b512.classRKK#A:ьdw}0F٠*qΤ	azv	 Qb
>P`eaȭ1{
%9Z~[ꄡ]y\Pɯ(Rq"[_D3,*n:	3O$܋ϢD~vq,̓AOt<ɣXuD_;Z|`3?(p{BƂeaBւmaaV'0L1lvg+{TQH1 !Lkʨ,
ìQ63j~>GMh5SCXLy0ѯJIy"d%r
)Pa=D0.)R(4kzŵ{2Iꐬm0Ed PK    PK    A             >   org/bouncycastle/jcajce/provider/digest/Blake2b$Mappings.classTR@BlK  R *rd!e%ΔQg| RHϷ{_𚠗AHp````*57xLq,'fCVr~!d-B|"!@2Cg&e
m&k=S-ktEר̰bv}5-X-pc,-|^>BWsk{u *Nҝ\>8!T=];(^ΆvݺR3d{lGdȦ&
ٶ98njCPajiRzh*v*C-S6$6Ҿn+RfBRtj&nE+
K|pKlЭA']4yxAh	nz]_O?Yĩ1c46biSŦٝy9Yx|oY49xs7r:7nn+znbA(}\ew(@r
(x²O\FQǐ@΅\x<r]*|UeJ(&A@l)
pqc۳~dV[9vL`Rv
'8Fb;6`'%vcװ\bwB#3Қ<`lk,L>`\k泀9}	ObO
(Uz0zPKGI  [  PK    A             5   org/bouncycastle/jcajce/provider/digest/Blake2b.classOK0qƪ&x]6w ޼m(%-M7cy<25<	yoZᜡuuйOLR=0RP2S&/AÊAe,|nP*2
UjY"t)$ֶz~pqpr\Ǔt\}*Ėp8:z3kE{Q=#=YՖlS(hЩ'?NiG\##PKf&d  ^  PK    A             @   org/bouncycastle/jcajce/provider/digest/Blake2s$Blake2s128.classRKA6Q9[5<\b,V`A |\p=n/R'PMԅoofwfn.l̐v+Fc;~'_F@m#uPsvx\E*Nd{'W!0
('wxKB:	$(Q|]@ɺzDד<չߖwRkёLf";!n?[`Y`!c0Pl0̸C[]w}j&T9f(r0ic5As67jFF-2h6M?gjs2nBkFr`JIydyc_0d}|AY3onc
X$&CR"&cEdPK`4q=    PK    A             @   org/bouncycastle/jcajce/provider/digest/Blake2s$Blake2s160.classRMK#A}cfƏ9iqFBԃ xL0qGOPP
%V
UW]U7w QbH]5?un/P$GoH0D@
^1W*?"'u(U0&L2;Nɽ,Jog|#GrIov/鉦'y.oTv֢!1d:`ǂeBƂmC_O0V_۴WkJϸgϨfBKGL"9ƀ4R0h!3cF?/~3د娨:M~3CWԘL90V$@J2\<[ka0"@X{sPBƯQxfM6a("PK!    PK    A             @   org/bouncycastle/jcajce/provider/digest/Blake2s$Blake2s224.classRKA6ќQZXpC(W>.=n3J%BEYl0
̯?E!6Nfܖ0} R$G7I1b x$g'J3=d*fXz&:ey8BgA:L25?ObHjve:!Hj-zɟWdLF}k`0gh֞FMǝ{}j&Mo3`9zYDlڨUe%-4En62#آLe0V$@J2rJgam+{`]sk6QiB+(
՝[!&&`5PKNޤ    PK    A             @   org/bouncycastle/jcajce/provider/digest/Blake2s$Blake2s256.classRJ+A=c115z}e1F! FBw!\pٙ4a0=Lĵ%Vu
iw?CogdT(QR'Ŧ8<aW_DY;d*dz&jeYVqI{B'^|%kcYֻb⛞hzG:2N@j-lWd%ꚅ^>Wm?qa]_)=^p	DrЍAitaXFdǨ,ƌøQ/i9*NS_LmsPƕ@h-5(SU)4	#/P0WE(T30dJ-Gd+mag<I,m1Yd PKY.    PK    A             >   org/bouncycastle/jcajce/provider/digest/Blake2s$Mappings.classTR@=@%T|ւ`+JHKL
)f|,q:&>wӴԎ޽{n~@		.	\%Fp=iC@cv4}V,[=$;+f$ehs)CW<mEkFmgHRlXrխZŋ6'jsxR*T,yΕCjՊkG jRخW/+ۼyrȆbjrPl[ItSKFZ+&+GQUlǠn:2CVl3**lTu%j:N-5-JYU9Yzv=9R)t	I/޼X c<τfe־ccKJM;"DL&2;pBLi=/'L-K*Қ:'fn=ᑳZֶIi/&%㡄{s0bIId1pXC*PCG&(8lpx=xuJ*)kreA
Y4 `vg0|ɬ
l:'
e`p7Dߞb*^;T =W`
kΰg>c43;3SfОcvΚ
\}`g*bbk}CPK
4  [  PK    A             5   org/bouncycastle/jcajce/provider/digest/Blake2s.classOK0qƪ&x]e!<7YJjIK
X~ ?*zK Oy{|~ ☡uvйַL͕̕K43fEi1sE+_FfZeȲ*61Llj|-rlbpqe<^A]_
ՈaҺs8Gst9k`}|ѼhV/մ'Eb{L5ɕ?QeQ?Uw7l.68@ 7{->G<B
PK`  ^  PK    A             ?   org/bouncycastle/jcajce/provider/digest/Blake3$Blake3_256.classRKK@Uccloo{UŃՃP d.%5dC6+ Q>Pfav}|<CҞ:dhw4{o049*^U!_gyPujOa(XT]ƞ>OYfdTu4p/\b_8ntidWΦOk/5\ᄑ<*"z9]7쟙/VG7x~i@@@XF\c趧J3/ׄݓoT$q,4B	MVV=)dk">MdЯ $}+k'DTRBa2eN?*A$arTf
wHec
0"@PdKӚPF:o|aM$&aCPKN    PK    A             =   org/bouncycastle/jcajce/provider/digest/Blake3$Mappings.classSOP=F ((cSܢ!_}7KKB5&b49==ϯ,_EFŀ
M(?w+kl:ҕcr{3VqBő<(Dp[<CfZy83=yl
-<_)kQ{>bpnp66З~(Kkou5?<aH7nؗi^,rO
Xˉ
7Laޑ$z%huGsb;0]#[I=ٺ߾UC圂
(`Luoah;Z.vIX*$\.E:M2'#QʖRRV{xJ]k)
WpGCw5܈2ifҸ4&&#\&m3nxM^Е1Mҟͨ	]$pކheN	K0N?G/zh-o{cXAK_0|;PX-RNϑ#Xb#C	_PKmI    PK    A             4   org/bouncycastle/jcajce/provider/digest/Blake3.classJA7ɺ798O<5LfeevY>@>^
UP_} 1$4Ο	#26:7>OmM(TWo߬	u:&˪X+CsWÀ-/oف)KӠTh):1
GykQ$Lj8+~H*D/ړ
詄zF PKh+'   \  PK    A             @   org/bouncycastle/jcajce/provider/digest/DSTU7564$Digest256.classPQlK"˾H+=%XV$ϟ/ -	Z ī$EB#Wb|*Hv#6+Cz+"1vETOlw?בБ!?5
\I0?d15}6RRGbF@8!}|yf@GI5PK^   `  PK    A             @   org/bouncycastle/jcajce/provider/digest/DSTU7564$Digest384.class;o>Ff
0F
OfYb`__\X\_P_ZZ\jnjf`E0ٞL0.;;+;3'S)HjcdK-rI,.N-fPd jF d<@%ذ{#T
?q03uri>N PKAq   `  PK    A             @   org/bouncycastle/jcajce/provider/digest/DSTU7564$Digest512.class;o>Ff
0F
OfYb`__\X\_P_ZZ\jnjf`E0ЈL0.;;+;3'S)HjcdK-rI,.N-fPd jF d<@%İ{#T
?q03uri>N PK寽   `  PK    A             E   org/bouncycastle/jcajce/provider/digest/DSTU7564$DigestDSTU7564.classRJA}1c$9dG0` D=ɤ	azG&QP꽪~zG!>Ȝ3oٮl3Yp9*vˀ!U3n(*בN.=O_Yl2?̲CQV_5ҵ)aKcd+|!,fqEݮp4v\Jʻտ2)vKIu4k4hkJ?=dH3nkRoT5QX0AXUR0bH1(Ɣ6}c͠
^2D\EǔK,RJ
unTEM41*
fM̵+<{Ma*wZ"	wd:/PKL͐0    PK    A             A   org/bouncycastle/jcajce/provider/digest/DSTU7564$HashMac256.classPJ1=qƦGk՝S7cQqa]XЕZp3LJ\ ?J̈ "poO/ :! LFNT)Ä́y!J$9r.,;w{+.~HOd3*j"rk9O;m%ܩq+"XQPvRAkTDGE!0J}T*[E+y]`m
lPK3
    PK    A             A   org/bouncycastle/jcajce/provider/digest/DSTU7564$HashMac384.classJ1Oihsb&*.R.c&Ԕ)I*WrUP|(1#"?oO/ :  U\c0c~[rYJa]4<˫^s!$DT|j{(=V}Q";gnI2˔3Z)?Vy"XQPEPIP2VEa+3HbzG-D+M<ќcӺPKO!    PK    A             A   org/bouncycastle/jcajce/provider/digest/DSTU7564$HashMac512.classPJ1=MGk՝S7Qiº+2fBMGIRa>UAČ"pνpM 	xTQXڝąbR
Rť)g]]{GK!	HRL3S<D色E0e\{?wpHm,ShNTX!El赃8BZC+X"`Fy0*T*۾B+mZ=~J7<2MPK^8    PK    A             F   org/bouncycastle/jcajce/provider/digest/DSTU7564$KeyGenerator256.classPJA}eɦYԣCI!"4OрvҌ=LfBw'0)QbG*xU^-oO/ Z!MH#BXFҜ*gi;f|v"/6`J&f>u%	M?ȁOr,K_hþfN۲:c%t2fFǵXUqqu8zA眅<vE~?Q	)-a<6
(LHXJ2ݐk-4hK#VbV;6kT%<#@e'ybƢ-PK    PK    A             F   org/bouncycastle/jcajce/provider/digest/DSTU7564$KeyGenerator384.classPJA}eɦYԣCDD3)Ndf/y
(~
^UWsHRƀ=4Ǆթ{ֿ9omH.^qm<&bɹ&RG`r(J_hþfN۲8c%t2&FõXTqqu8:ވO9x賾
v7RXryPBv eZhB=DF֭Ś6Pm֨JPI^Xhq
wPK>o    PK    A             F   org/bouncycastle/jcajce/provider/digest/DSTU7564$KeyGenerator512.classP]KA=GCЃ
1ZFdO4Ⱥ+3?'Џ(zssx}{zVt>$H>=jFz"pM((WԗDr!"1t	EG2Яm]:LQә!2-VUd8Z挆,
vEA:4RKXsQ%׋,B݃-iĺX66***
E(PKY~    PK    A             ?   org/bouncycastle/jcajce/provider/digest/DSTU7564$Mappings.classUmSF~^t6JIܤi+[(HP1$`RKC:#3N>7ŝqL@T&{'l#lOä_g]W ÇW2|pc3|% W_3uѐL/Sɦ15>/<T\R
KE^J?O<,*<R9qJ?欒ἆ޹T޹;ugrL5M%4żx
1f\;ͭ{t<l)nxxD#s%͝r
³5$w:_hHAX:챪SUu֩;<*1QY#u~DSn瘹kMO!]Y%[n}/W<Ń$Lxf;ٍU[x{
Z/Z<O]R46n<4f}<fΛHT;窥1f,,G
1㶎IS:꘦᭝m,5t}G
+v*L9:=+?LrGFl-7C)xw~d|"k1	7%nIǢ	b0JsQ	k%l$0$OIbS$%6=
v4t6=*ƪGzO}Za?Xy
uў%<$2=#/!^ *t*Z1TFP]M1R슑tG^:K}GFS8q9k)/K`8.!q:!Yů5X*~vF.ç	]U5<Sr	HPK<    PK    A             6   org/bouncycastle/jcajce/provider/digest/DSTU7564.classJ@Ӥuw.Dk[WT"˅wt)%)IX^	^ >xJ:2ds>>[Yg>l?b譋ga4]3+ui[3*ΓmL
iMQ7tg*]jդۻbV+sX.ŭ<qD΅x%L<ZYVOB/eL;<tBJ4]8bqG7Hrh:G#ÑȦSS*jiÕ?+zzz16I!Vl[mEIz(9gN}
Hb2H>B q8H'qH%.ǈ+q*qF$CPKws    PK    A             E   org/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider.classSOP(/	*tuhLl	ǻRv:OMoGo݆FwNڟ~S()f(f)().R\XLd$M,-#WLȕKnsy#XKxZ%XAM0cw&
a!vR 5yʶLEGiArAFy0#unbI5vTن繦m<o]m5ԪӴ#5<54])ڡ鲪߆3u
O}]o=3iC*$q-I,'q`>@Q7׼BT2`T~GgLL_>uT5Z{ҹ'neLBq2ȸ?rq?)܁2[si_c<&\FH@	Oa1lOtB x +'؊K%z M wntY,BuFZ#tHI#,b=t^8XT+wPZ҅D~PKH21    PK    A             =   org/bouncycastle/jcajce/provider/digest/GOST3411$Digest.classRJ@=1ժVoP+K>(>XEc,%%dC6+ }^ffw9}y}|P
Cn!n0`{pjݺLkfY*DqA
a̪zTeC5*|a[2i f4O΋BaP ׮.+s)17ICGYiנiԐР3d+?j͐έU>tZs[WrQՀ?%0j@?j\t)LHbRØRn!V%q<,{\bHm&9F?!ylwPS!Bz}M̷+tM= ~f-ň;DLkb
#"PKx    PK    A             E   org/bouncycastle/jcajce/provider/digest/GOST3411$Digest2012_256.classRJ@=ؘzkkևz{P"BERRB6d_)(ُgUTD]s^ ,!Й͝0t;n0tٮ8%jNː!Ӱ-ӵYR["<:}sas?t0fU]*Yg}i[2ti~(Vui/.
BX).l~g6lasĹS[	sϥ\+Ͱ_J%nZCn

Q
:C[5lqmU:^lg/Kt 3Љ5Tn(u0ܸ8FcD4/ƞZRrUHfi5FG촉&fS
Rfũ|ӏH:GĚ++E!n/u	!PKn
    PK    A             E   org/bouncycastle/jcajce/provider/digest/GOST3411$Digest2012_512.classR]/A=CY]*ڇV⁐(IPxvl,_&$ُwT	";s{|<== (!Н3;n0خ8%Nː!Ӵ-ӵYV["B^߹:cj.UYAì3Ͼ-ܴK?f4wG˥BᴸT(oߙMjqyV*s)0h3liuУWOCT0_mC2|\amNg[@tcH͆KFFǘrӓ?A<]KJ.jqP>iIQ405`!B*T8oaʢBo0Xӷ\ze"'[N1#PKƴ    PK    A             >   org/bouncycastle/jcajce/provider/digest/GOST3411$HashMac.classJ1OzKg:^mEՅXPP\X
E2fB22Iy,W| J̌NwN8z ADP;BO_F=GP$+K&d#zCbN*	ZEw\bFd8z\z_;Ӫ :hg\I(ST(5
J۾-*,bʄA	$LmԱd²
+^J:/܄{>WJ*0\٥\ʹ̓)Ako3|ӨmΆ
XPKʾ	    PK    A             F   org/bouncycastle/jcajce/provider/digest/GOST3411$HashMac2012_256.classPN1WXVQDी1b"&NK`l	D2v={Mkf:6	ADyʜA=COצ'F㳶Hm4߯U*jRmU/>5n (qwdVml~\۲ɺ}L%ߗ&P
sUS$()
JS
5p,+j).b !, X&H$q<OZjpcS\-$	MiNn2F~՗}âck:2PKJRX&    PK    A             F   org/bouncycastle/jcajce/provider/digest/GOST3411$HashMac2012_512.classPJ@=W4ZvZtQL+.+XAq]q:Ԕ<J&Y ?J3ps9s6	҉;)Qc0y̙\Ayw-MZ􁠞1.iqgِ:
g/͏[v;L>)鷄=OD8r\zΤP

J4uVȯ)f)QE1Ia!EeT
X2`b:ļ}]&"j禸n[(P۟@NP&XIPK2o(4T(\	PKU>'    PK    A             C   org/bouncycastle/jcajce/provider/digest/GOST3411$KeyGenerator.classJ@ڴ1҅f,vWmXqQ)!NI03-\| JAuΝ|oϯ :دPj4S*{]\IݦZ}J-lZC6K"&m?J
':HjX˿k9ZoTZB>*=a*U5^c8s|D4A9PR\vrE;Ha48G蒍t[u3__	T=lZ PKB    PK    A             K   org/bouncycastle/jcajce/provider/digest/GOST3411$KeyGenerator2012_256.classPMK@}k?Ҵ#=^_z6H-V<T
dM!M婠G[,(3f{+
d1ADB8^ft4D!~3#N}tB=1{}st"	ȡBәLb%+M/+9\_j4[c_}T:r-OZD_`Y(Ð-XБQAw0/6VY"ldd͗azS+OG %#Z1iʹ ^&.%vp>ɻV` PK"    PK    A             K   org/bouncycastle/jcajce/provider/digest/GOST3411$KeyGenerator2012_512.classP]KA=j=ړ&=BO16.3?'ЏF
{{s@E愠p""O	*f|:A+}LS_'G.x:Lǒ<4RLSp%G+ݶ;.ٯ>*Ϲ§-BgoZY[(X,	ь-
YбQEAo8/zIYdְemx͗az!S+OGe#Z1itjFt
էOAԲ:JPK!    PK    A             ?   org/bouncycastle/jcajce/provider/digest/GOST3411$Mappings.classVRFvNhH:ahhRpk&]5{38f&A:[J`?gηߞ=߿0	\#x:CK"A0L0B!E0J0Fd	r	&&	'C	lGBƳRnr-2I EjPMm!B!/0Y1-	s4"'SstGr<x.+=3tCwI|2[aM+;ĘZX+nJq\zThu j:w{"0ZL'6EYiOBos	/u\Np5/m..MRG˴\6->0| o߀1,!ƶ^ٷ%*Y܋WLrrS%+X){kAjgj*=jP6|):nTfZwiU-sSmdUͪ9e[̵*Ӝ23}[g](
Yy,i5rԍ4ThUc*pskොnغpewTo0~R9mIjOo>?/qL"ba>cX%(76-re勫rxz8%9E7f3"HOt,148E	
N[S{yaf)@4ޓqdsOd|υB1XG)O0T-a86u`	,̶0;	ElUa=
T$-e~z`1ıED!{]B?U빑xB᱗B7όr%֞}
(7
8.dYy<D}#/Lw֣c^(pI(à3!!~߻xa!@H\*+d 
	yCI^od $o<Ğ+JhlM77ͣqH ĕ_4Mu	 PKU)	  
  PK    A             K   org/bouncycastle/jcajce/provider/digest/GOST3411$PBEWithMacKeyFactory.classOOKAMZ˴J$`à8;m13: }hCA?UV{BP9Jc3a'	ri>WLД󅌅LtIo%0ns]1l&έ̨.U|}T|(eF39J̨DWx
nPVKwCIV먣AP h1c!H_A\zXqum;	7	A/X{nZwpjPK}	     PK    A             6   org/bouncycastle/jcajce/provider/digest/GOST3411.classYK@XuZ[[ZU!.ZD_d1$%,(bۗ&/r.9 _<qй:iHK8Se)TUҔdUNQ*UT,祥uMڎrry}N&6JbGaIej5zHe[I6=W8PVok`s!ȶZ:-u.DLW;(us,Tj9. G#	
dh?4OõA
(RH&aQض$[P6'rE4z7cS?,AhDq#G%ƉcqD .#	PK0'    PK    A             >   org/bouncycastle/jcajce/provider/digest/Haraka$Digest256.classRJ1=uUV/P|

UtelVѿRP

g?J^@)j`fsL2CxC@RUkJp_U^4U|z*eeڕa쩀aL}UTeu7б/݄H\յw+jaީ|x$U\+ɰ?bKzeۂeB҂͐-jŐ-^\I/~ڣڼ%$0A'nȸLiHaĸq}5n!QT\5s2*Bk1G@YHit#EF?!u^d3w0^iP9갃TҥecTSXm%M1~d|PK39y    PK    A             >   org/bouncycastle/jcajce/provider/digest/Haraka$Digest512.classRJ1=uUV/A((>Xc
eY6_)(%NZ/5039s&}y}|PCgn錡{xU )QR5q%/*/O*>CŲ0T0
&>U*Wؗ܍nXVuD$.޻F5W0RW^EFT[<Z`da%DZmc!ifȖ]EbJ_tRIפrQ̀
Qmޒhpf7d\&4m0bܸ>7Ɛ(
M.y[sΚ9}ԘB},N$4Y:"䟐:c;L/4uAq*_tҲA1@L,6Ysd	ަF?HPKKo    PK    A             =   org/bouncycastle/jcajce/provider/digest/Haraka$Mappings.classSmOP~.{iWHA1E30/vvi;?e<}[/9<O߾
n(ʐdLP%\`Pʏ[Qc`rtω3[3+"-oZ0>?zɠrj8ћC^OxC׎d?$oˏr6:.Cay8︖Z~`~3ߙ<\atM5#JTdJ{Yۭd,#t!Co6yr{PޥeĴ9%hK0+aA}AM2.wgg̣6rTqU(UL㊊bYVJX5q]1܈AW$.a!-C >"^L$25y9I2cI9\OfU}«cT?2@Mc#59S2%Q:՜MV`#*'
%@PKl    PK    A             4   org/bouncycastle/jcajce/provider/digest/Haraka.classJAl.`.b-~{{Ǡ6307лr޵ׄasB?JkZI
=y1pinB=w
:wOL\ppƓZ'cŊ{n狨(t
=a
4@δ-!]z0]yoôm$G* 	OrKѢo|]ؖ1
E뢑( PKz"     PK    A             >   org/bouncycastle/jcajce/provider/digest/Keccak$Digest224.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`A0Ȅ,;;+;3'3)Hv kr=RsS8A$'d10ph	2<H
8x:94' PK   V  PK    A             >   org/bouncycastle/jcajce/provider/digest/Keccak$Digest256.classPU~$X bS޾noմ[e% Je&3'3_&s\o F3hޚ!u^R.qpUJ7{2ឿ*+)ct'зёQQ!W=cǞd0nXY'dbRR
W0J-rFpA٩Qm̀
&iPK+   V  PK    A             >   org/bouncycastle/jcajce/provider/digest/Keccak$Digest288.class
@EP.E@"QI$?J(q|iue0qΠ%CѝDDqMIT|#|&()T_H!-Нchd@w`ÂMI(
'ǱL]T$R{W\ `Njf&THPK{   V  PK    A             >   org/bouncycastle/jcajce/provider/digest/Keccak$Digest384.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`A0,;;+;3'3)Hv kr=RsS8A$'d10ph	26lgU$r@@ PK
?   V  PK    A             >   org/bouncycastle/jcajce/provider/digest/Keccak$Digest512.class
@E&'`-\AH6
~`Q(lue0~ʠ%CΝ?ŘDqMIUQ*JZHKCȔQ(UR0
h^n3BDDބ@V=%dn8yJI&,(Wu5QX3NjfLI˰PKln   V  PK    A             A   org/bouncycastle/jcajce/provider/digest/Keccak$DigestKeccak.classRKK1յk[_w xP<X=U1MCٺl*xG>I2}3<>XA!Qڙ?b^w}7`%nCꈡgp*Ƶ Pa$B|O0^(ʢ
NMBpyE)'])?jZo
	Bue9=5oW_qBqbBBaScC4_}A)1ϕ~-I!:RĠ9
M"\Hcب1l#Fҗ:.۰5v|_k-5f(VdOE^:B1t|`3EJmX2/_#t7_|a͒$K2Gg~Q	gPK    PK    A             ?   org/bouncycastle/jcajce/provider/digest/Keccak$HashMac224.classPJ@=cjǌQUwV]DJADqa][q2<J&Y /'5Ax/;9ùo :!{/F8N!D2B2i=tR<]6V=Rޝ'8#)FRq?JJҚЏvCpVgaė|Z1EbNA)۪lϋV80Wr+6VKX3ƞ"`?38(RI7Z+C-f44`)A9sl|)PK]K9     PK    A             ?   org/bouncycastle/jcajce/provider/digest/Keccak$HashMac256.classPJ@=cjc;.Q\X-Vru<J&Y ?J,	p\8~|8?Լn1W*R5aS<D&NDҘ/uٝoArY_!(_/һ&`OPlp-FƬ
w_;eqj15f
X,`2Eb+ؗgE2i\kтkEfAݼ7kXͱcTlf/PK
s    PK    A             ?   org/bouncycastle/jcajce/provider/digest/Keccak$HashMac288.classPJ@=cjcV]DD.Zԭ8jje&Y ?J,	p\8~|8<Լ~1AWGdLp	ӄPT[)m*ząf{.qFdcTwiMp?~'ICpVgQ$S6I]s-FƼ
wW;EqV5˘s,B`A5snK3ۏc!ZjjQĴ5ævQ7/y8Lc=FRmb[p PKCD    PK    A             ?   org/bouncycastle/jcajce/provider/digest/Keccak$HashMac384.classPJ@=cjc;..Zԭ8jje&\,~8Y{ܹp|{Լ^1AdLp	҄@T)n*ząf;.~qd#<TwiMp?^GiO΢H*l!ZYu9]*wn,cj(.,Xe
V;/	n/\kтkEfAݼ?o9rML؀PKw]/     PK    A             ?   org/bouncycastle/jcajce/provider/digest/Keccak$HashMac512.classPJ@=ƌQUwV]DEQ\X-Vruj%
,W~%Nj^8w.ss?>`^K N1G"\d"Fi|5:V
oArY_C!(_/һ&8`OPl]s-Fƌ
,wW;Eqj15j,H`I1esNK3ۋ"th5Ԣik-ma^@kڟ7kȱc5k0Ht1u8_PK608	    PK    A             D   org/bouncycastle/jcajce/provider/digest/Keccak$KeyGenerator224.classPJA1ӘG$Bn`'!q4n< /'!An~? Ⰰ,Cٚ0Tlzu=N%XR:]؄jqO:b&y&L_dTd,HJ_0|NV+ɗVE|(mxy{<LD/&dj	EPA!'Sbb#aڷ{po9wB:Be@`u=x/Òe(~ PKE6    PK    A             D   org/bouncycastle/jcajce/provider/digest/Keccak$KeyGenerator256.classPJA6ӘG$$zE4l<	dX'nv$)QD<=P
ՏW %d1!be{M.}ډ}E*dBs0_dz%cM4y*TH6RMfJcY 6}wIg3ilaUM9yaM!u]qnk\A[kPv	Y?HBe;qc!Ծ݃Cm	9l 9vVYEuXrpPKc6    PK    A             D   org/bouncycastle/jcajce/provider/digest/Keccak$KeyGenerator288.classPJA6ӘGAC!	&hxɰN솙I`?S@ĉxzPoϯ ΰ_@iƄ7}?~pډ}E*dBs0_dz%cM4y*TH6RMfJcY 7}wIg3ilaUM9yaM!u]qnk\A[kPv	Y?HBe;qc!Ծ݃#m	9l 9vt
;+ԟȻK.PK?    PK    A             D   org/bouncycastle/jcajce/provider/digest/Keccak$KeyGenerator384.classP=KA}c>.D--$[BC4\Y΍	\_
(QF,7o>ޟ_t_@iƄW}?~pr!dTpc#ɄN6aKRRshTlH&*Ʋ@
5m\Wfj%ª
*r< 9%gCv;ָP-*~20vL?HC}(;ȹrpr.vV?}w\,;CPK    PK    A             D   org/bouncycastle/jcajce/provider/digest/Keccak$KeyGenerator512.classPJAk4&у!AS$,aIx':qf&,O?'!An~?8^9l=f(XCΎO:}e*qӹMJ(&-l~RL%NjBOTH5n\Wfd|aUЦCaMRH!u]qn{\E5(a*9?Cu;	c0Կ݃Tm̹rt>.&kd
+4;.VPKO}    PK    A             =   org/bouncycastle/jcajce/provider/digest/Keccak$Mappings.classTRPD
xE*DʭJK)KA4`I4>O3>x@qgwooiD(.S\Jq:
(M[1>A
EbbbbC Vl&#.cte$uc8
J4Gsby J6Cݲ(QleFެɆhMuerY^uX
MI%USTE	峙L:oWVnը6yEY
r,*A,c ?d6KٙU^,%E7Tsc큙B:rmY+1$]{*;L) n1eS)B$uϲi2A
EXw4iOfI6%qSmCUY2JzI^`L/ړ
'e˒$~ h-M̶@Mݙ}8Lrxa 2xA>?w:6MXpo(Q9y9YwOI8xF?X"yPq!8i<	#EK,Yióf`1wio²u%bg)AUiLaV{	{`N 3h`x'kX}&G:`
6z^#^4^g+8ޝb/;%u'{_BK-9Evz@(ҽ߰R[&ͱÿC/PK  P  PK    A             4   org/bouncycastle/jcajce/provider/digest/Keccak.classNP-EhA<Je"
&jMgg0i'm%|L|(Fmz5{ڤ_wV@
S+_f4)3u?L\*gy?<ξyrhA	GyvL)ı>U,Wv9rFkt3r~F[a)z!ygG]鸶욭4f+ώZc6?fМ0u嵰
T&*P@o1(I`J0-
D0'ಠ%"*5F|ĪA3
aqk??=ݲ݃TO)uQB!h4M肠Yw
.L	nQG)/ZπXmm^5y\'!y|C> 7ȇd|DnY=K>%gdD.;s-L/=r|/PKѱ  t  PK    A             8   org/bouncycastle/jcajce/provider/digest/MD2$Digest.classRKK@VccUZ}"xP<X=Uq,!%dC6W
JAAzGPD
ͷ症' [(1ʕs]?=a'{B%mvCn]F^9"J|2LV@U*2얼k$_GՕ}|P?xm;;ewEFB)wfLRc100l`Āa`@ƀPhoC\i~NʿQD6F}k,1iaB
Sz5]>fLd1݂qi7ϐnHW<u"n\)P*,=IQ^t-EQej+=5alXYE4qimRad^PKh}y    PK    A             9   org/bouncycastle/jcajce/provider/digest/MD2$HashMac.classKK1OJg:>kE.*P\.*حē2)I*r5`3cq#'7|{pjHиQDOSE*dBsPM烢%蔱3. 8L
:yQ+ܗɐ⏫?L:I`"vǍtUEAA	e3_:*CT@rYeG><lEP'$?8qcA-凸^h.ፗh3lghgy]N}wPKgA    PK    A             >   org/bouncycastle/jcajce/provider/digest/MD2$KeyGenerator.classJ1ƿڴg=z"؞ǘ
k6$iaoCxxP'M}2oϯ [GjjJ+wF@ pNnRvO(.Lp9U 2|>&DTZ>'>XtՖtF	6u*c=n'(jN c>,:eޥnwۣ,d#@ "y"Nړqƭ}wo=u$99O_km| PK#    PK    A             :   org/bouncycastle/jcajce/provider/digest/MD2$Mappings.classTR@=KIK h+B0PddџKԐtXLuo2
㟻{r',ʐe$d$e\-G-)h\gJ\!}Gݶ+cm抶\Y>7ED4CY߾|AAg;=t\*K8Vc0$tٲ]OfSk|v5;V3 g9®e"bǠoOms?}gJ~}m}f"`N`mY#BKKE]hUݳ[iDiFaF-xE\:U&$R0	%I!ᦄjy,nM5H}XVKoH	+'NWF"w&TO9E8o2x:FtS5d	1}Ȇa\UL$pZi䒸$10̄QKq'!C{5)oMPOZ P
b')t꥕1v/@gFU?00[sQ!
/b6Rj;xRCRjG=9U;ζEgX0KTӯ=@1IkJHPKDgt  V  PK    A             1   org/bouncycastle/jcajce/provider/digest/MD2.classMK@߱iQ[?ϊ?K*yn6!-gy<ıXcv`Y睙]}}|к|!tn3;BdƚZ&sPP6ϳhO.TʹK/̵ʵU].2R㼌C°Atn@ʽJMk̦N ht@W ꡇ>!$-79ݍN!6b+}~
оz3:@C]1oPK&-Z     PK    A             8   org/bouncycastle/jcajce/provider/digest/MD4$Digest.classRMK@}ؘj~U~<(AM!W
JAA<Y*(ffwy}y}x
ratda	d((P	CůгT&(q"ܣkGD/CoT"cnvt@N܉i+p/
rxv+qdORfLRcԓ00b`Ԁa`@ڀPlo=.LlY%(FyD!0Ø֫v3id1k"9LL`^<C.]=A͏y*8E\RBaLlHVi'9FѪ>"sb+!FzC],?#ۨitgdXGvZ#Kwl&,&QD
PKy    PK    A             9   org/bouncycastle/jcajce/provider/digest/MD4$HashMac.classKK1OJ;ӢVYXp]T[˘	5e%IY,Qbf,nds{¹o 8"+{KO=%XJ&t	Lkd4-A0l<3|.$[ERs_gcn?2iI`KBvǍtUEAA	N{e3_:)C|T@reC[Zc6LI@q,0H.ڎqU)t߽Qw9_5]9Ͱau:vzPKXqGb    PK    A             >   org/bouncycastle/jcajce/provider/digest/MD4$KeyGenerator.classJ1ƿmV=z<KBE+h=	1,ۤ$iaoCxxP'M}2oϯ دJPiS;#GK݈J(aӆMFL3
A)NDNY9g9tj\Tf:9_L3ә3+? P 跆93Z0[RYo0{q
֖"vMT
ӁdR0k!"]ۼ ĝ&nx59GPKg1    PK    A             :   org/bouncycastle/jcajce/provider/digest/MD4$Mappings.classTR@=KIK h+BZmJQaȌ?d	!$ę2C94峌{f7~	 +2eH ,SZV]eZ812蘒ۖc3bs3X\ɶ禈rTY3X|WKnDzVCJ|ZM8CBwMi6Eʷi]\cje>1xcX!!
چ{:[hwG֖o6B֦%<,Tu^ՅV]HVnJXkfn4"?f^nթ
K&єrFI0(aH
	7%fPWZ`_9Y/3zK)Js	ɴ2"aHdUVNs9ΛLA/(]Tp
w bLAaWp	܃@$b*aLaaxD*x҉x^v
zpʒC[9?ԓa(BI
ziev`(h3qjg8}LBe(|\fJm'pO(RJh$ǲjֶ4:f#2#
@BxӇB)&iMCB?PKPGs  V  PK    A             1   org/bouncycastle/jcajce/provider/digest/MD4.classMK@߱iQ[?ϊ?C	޼o7K6!Y 8-Vwygf?>8"tΟ	lsK8S	\͕,,7!\u&g|Skk#2L1Et@ʿ$JmkmDUu=!#l`H&ejc;9Ǎ'xBcl2<Flű˯*} C{źϺaa=DPK]     PK    A             8   org/bouncycastle/jcajce/provider/digest/MD5$Digest.classRMK@}[kccZ`@[BՃ xܦKH	ِJA	(g8k[Eξ7o3/O 60P1dv_m*fXKn<p>:E(+G'/0JEFݒspv0v[7lGa$/z${~$3ke?k]	2CLbrv&ʕg[NZj7Ϩo#4F-,`LƵȢI9Li7k"ifu֣b@Du+%JT%ҳ!wcX1V	n?/BH*R	Qh4zg,cv*;LBkb#("PKMDx    PK    A             9   org/bouncycastle/jcajce/provider/digest/MD5$HashMac.classKK1OJg:>kE.Pq]T[˘	5e:STj?%fF1Nn'nqbeo	zdTpc#ɄN6aHc

.EK)cg\6qAp
>uBWƹ/?!7WNt6V+VE&)5:Ew"}gwuTN9S䲖˺&6|x`OBI@q,u?HZqU)t׽Qw>]/gΰn9݃PK9g7m    PK    A             >   org/bouncycastle/jcajce/provider/digest/MD5$KeyGenerator.classJ1ƿڴg=zEAv-'1fÚ.IZ؛䩠Pb*,	|a~_+#Q%#کʝE<<&ody%4冠S-J$,\bU<Hǂdg*%*ֱI'jd"QMX[	S4z8˸N٭w(D+`3:qHӾdqk>B]ۼnjD&nh59ĚGPKQ@X    PK    A             :   org/bouncycastle/jcajce/provider/digest/MD5$Mappings.classTkS@=@"Rh@AV W"#3~\%I'	8|r$ΔQg(ݤ<Qrvs=7ٟ 0IB\BB	]E &, )Bt&W2uGK߰n[h7mf5"~D}4*etȵo^\* `\
v*JI+c)IJC@\wm(k:N/d6qL`IOs~ײ
ʻL1z:N*	^Ս櫭2ՃAڶJN7H,'CHkEm]k7h:)Tz|Qj(ٲF=&`r#x'2s;%6`֥ѰE\1(⦈["n#bHvTrFך>q~,7nVEK5Ĉs+72<stfd2h~r!?vӤKw;le`D 22npD~ʸAAVFT2z1!* Sq<di<N>&8<K Ź4^t`Z70|@(GC,7U؞9c}U`k!>a5ßЎeH;jXT5CRZyXHi#%%cY
`ȏn_h+b
Y^e`k"
PKp|

  N  PK    A             1   org/bouncycastle/jcajce/provider/digest/MD5.classMK@߱iQ[?ϊ?ڂ҂o޷%&MnY(q,Vwygf?> 8"_f=ŽV	\͕,M47.:rfB+#srmdU,1L8/ɈpՠtJ	M^c	7Mk̦N ht@W ꡇ>!]$-79ݵ!6b+]~
VоxC-}m!oPKrb     PK    A             >   org/bouncycastle/jcajce/provider/digest/RIPEMD128$Digest.classMK@ߵؘj~[jm=,xP?P<RRB6dcJA)(g8k Lgf3/ \ߍO
)TĐkm{%HFgA H4*W"Wo2Q.&K8<D+~Z=76w-n9l
t(+ٓaL!a	&Co{.dPq%^33N,1na Bzn2L$1ݜQh7/Ɇ5?Y1XUaɳ
+TeD=ތafhb鍐RbOHֵx'$a~Z!;BJkb
c"
PK l    PK    A             ?   org/bouncycastle/jcajce/provider/digest/RIPEMD128$HashMac.classIK1 _3׺ݴz	AE`+`A<=LSf)Ti?%fƢ,ۇK/+1{fHױ/P4덥5{^~A*r\hrA>MUR-	9swW'A c	6=]s-LQR((~WU&H@2,eXQǊ
6T+	wgRu}hat frn.f4FsG)S4Sl,ۆY[>PK<a    PK    A             D   org/bouncycastle/jcajce/provider/digest/RIPEMD128$KeyGenerator.classAK0߸nS;A&U0PS$٠7?%faÃ}!}|8^eR5&
)L~=:	wË+.b&SL1ʰ6)*r@O\p$4WLD\H\p5LQ"S#Rg/pPq8:ÄMuɸ;}C	ktbE @Z2H\ ]bYݱ}

oxתk
־ PKO    PK    A             @   org/bouncycastle/jcajce/provider/digest/RIPEMD128$Mappings.classTOP=evTğ&@YdH>J.mdDM ~(:`0"{99䵿~	`K$	1	q	$Jq[X2

vLГxpw\{kih,#SLeCry);=Kץb-E:9	JPl)EYm`cFۣj1P<RpZ]6ksZhq
u۩ځ<*sn-ʶ(z]_ҹ;&w6hq:&>ؔɶ-	X7SCN8e^/$7F\;"D)bD-w(-	\Z4>jsK3WɩPd]V=ens=.LFɸ1=q)`B AqS1<C8#(a:3AxG"%D@gcK6=!$%$		PP,ЭNή#o?#:0w:^*:r*ttRSK6i%zB#aPD`C"S:^|Eq:QDPKC'  ~  PK    A             7   org/bouncycastle/jcajce/provider/digest/RIPEMD128.classOK0uV{V<a첉)YjKIKSX~ ?:	IB_9'B*I5"wfqc)UnJf~]yYbB+WeFZȢIdJ%q|>\`Hv'
E}VPi¨*Nh
@[ꠃ.o_U)L-_?Δsګ<bݟFQܷy[΀zx<`27
s7PK  	  PK    A             >   org/bouncycastle/jcajce/provider/digest/RIPEMD160$Digest.classKK@ؘj>yaDŃCUQ<RRB6dSJA)(g?8ۇRl&fvޟ^ lc?q0xnt0xU"}cs<?2DAJ!Mf=eXeYc	A$yq5G 7nEKB)*_Ϟ{f4`27`2,{mgluV	G2{z01YЏqJi7G&nK3򲢯@w9+"{RBatG-ME+usM,C?LoZQ6d1̾"#fsw-j,F0*MIbPK3    PK    A             ?   org/bouncycastle/jcajce/provider/digest/RIPEMD160$HashMac.classIK1 _3׺ݴzQD`+`A<=LSf)Ti?%fƢ,ۇK/+1{fHױ/P4덥5{^~A*r\hrA>MUR-	9swW'A c	6=]s-LQR((~WU&H@2,eXQǊ
6T+	wgRu}hat frn.f4FsG)S4Sl,ۆY[>PKKp)    PK    A             D   org/bouncycastle/jcajce/provider/digest/RIPEMD160$KeyGenerator.classJ1EolTKX7E-Be	cifHઠQb
.Z\	B};cUQ&(5[cʩףnp{9x7+f2ETLir"7
D*'!KBNsDD̵Ky{WC~Ʉ%B:5"}A9L،єɘ[߷m=M.\ԱMP%i5!ZǺ  >>xwzذhPK-`%    PK    A             @   org/bouncycastle/jcajce/provider/digest/RIPEMD160$Mappings.classT[SP"BDE
UDU,lbz{<&M;IÓIq7MVї={v?|0	}NHpR	g%HpN-bx(q 3Y1]@_z-n3bP׆){L'ؖ+"Ja#=ɦ22Ki0'JO#yB&K\|r\`+6//d+\_ohV,R=Z(8IW0){&j[EʦW5T9M%V&o`L3U&s`p߲چUfh+vI[,}Kgkr9V\s]Zi\wEnƚmj6,3}YL˦Rbm:йV+զjflO_Ëif?,C`[L8GSǲmTy ܊".",ↈ""ŃK[켬R	~&2҉%i9/v+n񐷃HD{Y1q CG_f`w\]#8S
`B'cR%1eC1$eđ!=1t-9OBCJtH/qn<.li#0a(=GZTey@g>
ekU{ԑSu<]6]jP"Trk1?{xRjubxw"AklM@V{~Bf!:E/PK  -  PK    A             C   org/bouncycastle/jcajce/provider/digest/RIPEMD160$PBEWithHmac.classJAƿQ`Go%/Q .$H8dg|^+!衢Y
¢́fW g(+ARB](h99e|":c.nkkAi#ݞ?4M8z#	);Aş~9bL	6=oMMdL&&Lͦ?{H:J6\׭@l%ضÎ<v-8(dZш8n{RrI`+%ZgjC}*;xD~DnQkϑW[PK{(  
  PK    A             M   org/bouncycastle/jcajce/provider/digest/RIPEMD160$PBEWithHmacKeyFactory.classOJ1ݶVkEO ^*Vٸff%I+6'C


|3
`2
^5"(K% p=?vLtM9364,l&#i$ca,9f˅_Dcf:'dDX-9ZR3\'5	12ӡS
"'0[)t&ta*jN	ZН#`,Âewm6JW,6=ciN;YqT> PKS#    PK    A             7   org/bouncycastle/jcajce/provider/digest/RIPEMD160.classJ1O%vVwB&VDT)N3a:8SfB˕Ŀ7	KBNNO?^ c!ϐp|'17zҾeEWo۾UP
B['_bOWIWi1cPXXuznzrpXSiL7ΒK2tb%?O~AWoGŽڏ׷ RQ1G#Ñ9#Q01t=4}Qdi
WymOob&R_Ui:2/(?ؠY,h
"1E,7K-2q'PK!8    PK    A             >   org/bouncycastle/jcajce/provider/digest/RIPEMD256$Digest.classKK@ؘj}!âŃՃЪ(t)	!Q[)(g[5037׷g kX`贗wKv@U&T°;WƋӑL.HƉ\"J<2}9pxE^$܍oDfuOO6Q,?PW,h+%?{2lYl3eۀa@ڀɐ/&0l/u\o>6$B
:,tbPN#j7acڍ3@k9+0E\Ue:Q18c2uL1s0RjM렘+1liY|A&oY^yZGwPKj[    PK    A             ?   org/bouncycastle/jcajce/provider/digest/RIPEMD256$HashMac.classIK1 _3׺ݴz	xZ c&)d*4`3cуb_{
1ڥzԈ=FP$ؗLdGFRǚnݣn~A*r\hpApK3|,$s۳)ON@l{>Z'EBQQPmQL8(dXȰh%m8X!t"WN?\kBA,\7mTh`
gShX{7
m67`}PK]    PK    A             D   org/bouncycastle/jcajce/provider/digest/RIPEMD256$KeyGenerator.classAK0߸nS;Ae2tU(<6Ԍ.-I64P<lxPx/yw UQ&(5[#ʙ7Ë>^x+f2ETBir"7
D*|Glql&bh,
]sz ]L&(ѩ)3͗G88pTMLuɤnk䡄lp墎mr7R58gkmVwkvoph|ûV][=lXPKw    PK    A             @   org/bouncycastle/jcajce/provider/digest/RIPEMD256$Mappings.classTOP=evTğ&c,2$@hKiCXb2&~ ?v0w߽{_0e	%+@L,|Rby{%	Jo];Hj=
ki|#[F&o˔1tō76W^?5eD渦/|e
uikU~l2;`lC-XHYewMXi95jk|̳-UW)ۦlNk~Qo%pYce90_
LcFOpwjCMn|&Q"48׉$	1 bPmC"'@YhyNnֳe,T+?^HLN4O"s)wa/sqf2zD}B[Hxc2¸84A
tL'㙀(m{ԿCNH:yKI0H,B9I[/cXG1hFmtZi?c5T
5UFKi0O-%Zoyh[=_CSu@Lkx'B(LBD?PKV  ~  PK    A             7   org/bouncycastle/jcajce/provider/digest/RIPEMD256.classOK0uV{V<0QQ]6!E=KCm)ii`˓_<6<IK|~ 8qpDh]%6n5MTLXOR+B?/c9_iTTY4L)$6pt|zF8rϡ҄A}BU'h	`	A]7#߾R9[~)#y2?87ͣ7^lKd256oPK  	  PK    A             >   org/bouncycastle/jcajce/provider/digest/RIPEMD320$Digest.classKK@k[cc֪=qXŃՃP(t))!RP

%ڪ5037ݗׇ' %,3rsmwI_Pօ
yY:Y3d#ȕ>7]
aWew[ENxD+~zpih8v<[aC]_Ϟfvz
$
Jm3[|kPՆptz9Ϩ]eYcBjD$3¸vS&0$C,k
|L<g`˞PX*,]'n6IEE3-B?LoZP-0tՅ;L?#=7"Y~%ZD7PKҏp    PK    A             ?   org/bouncycastle/jcajce/provider/digest/RIPEMD320$HashMac.classIK1 _3׺ݴz(l,ǘ	u,%
<
XX ^xyx}p-r{v^|E"5b4:%*sԱfA_\Ҍ&*z\?~;ӫ ƞϮIQPT)j`}[TE{;*j$J 2,ڨcɆeV*ȕC:>Zj0l3K9iU3X))^MC۬

XPKǦ    PK    A             D   org/bouncycastle/jcajce/provider/digest/RIPEMD320$KeyGenerator.classJ1OlTKQtQ(3aLN$-c*( >jސ(A\dt	7Ë>^xWHEЖ*OrEEĴI9TI?s
GJDEµKy{WC{d>|yAAٌєe	},鄃oy(am!.\lcȘ%i5!ZǺ  >}ß
ZumaPKX    PK    A             @   org/bouncycastle/jcajce/provider/digest/RIPEMD320$Mappings.classSmOA~BZDQhH7_i44Rm01?-wqq]1,5)Q?8+Ph1|}ٙgfw*ːd22FdJ -Sn#WpcePm˱bǙ
禈+"Qj/*]
dg{cݬ]P71:,	i5#ofs6}Rp
<17-z6@~`.[DѢZSآ։1<qݴ~IfГ>Ȩo$LJ"aJU	11LdRf"[|7s/20{eu.}T%)PT0[
fi*(ROI \h%1nSXMˮAY8Ywt#,}Z,y16:;M۝G1@뛼:3UFC.D`,[X
>1V$x7<$RPK6β)    PK    A             7   org/bouncycastle/jcajce/provider/digest/RIPEMD320.classMK0uV|=+KAEvDŃ,
},O?J|NKB~3OUbj@XS*/	TM̔$5"e,'3\jj#2&)eUqpNOhA**MwY? TE	xMh@t%x<2*ߛ뇙r8B{],ӈ8:z<zC{+M*\cnPK$  	  PK    A             9   org/bouncycastle/jcajce/provider/digest/SHA1$Digest.classRMK@}ؘjj+,A

U1M!+ =ٶ*(ffwy}y}|<Cqapxae (zubBnܷ:S_b^;"=0L|5dT5y87b_p'	cɻ??[?)m}7F"~D(e;sL-ǰx+b`![mLqٙZC8:/FC?fz5]&4&M0ݬLk7ÐHWLu"RB!GUF@Yz:1e͐hla;Rt>HW]\0Wrd	ڤ(HPK޺Nz    PK    A             :   org/bouncycastle/jcajce/provider/digest/SHA1$HashMac.classKK1OJg:>kEA(Pt%]L)(Tj?%fF1Nn'`=zub^=aO<&
%:	D԰	zUpąa='S!L'/*z\<9f(VSknS4(-
Jpؿ
XA5eM-RJ!.Xs`݅
(	$	Ʊԣ#
zX8VmGv@w3^=αcuZuݱPKI{    PK    A             =   org/bouncycastle/jcajce/provider/digest/SHA1$KeyFactory.classMJA_/ HDh!F$;=äG;9+PbB.*x
W1F7'hE'KɨO8l.ʨZIKbd؊L/q}+lM3咽J.ŵt7g"lGhEk)Jir_?3}1Jfl~ly
$H!4UƄR:ǎl>~n`+^؎L#>0Am8@PK.    PK    A             ?   org/bouncycastle/jcajce/provider/digest/SHA1$KeyGenerator.classJ1ƿݮ럭z xh^"{z*<ݰf&%I6C)zxP'M}2oϯ :8Q%4[څ^^<^^s5J轚ˤL.gVX^OyәVrMSqc'룮~r:Vέ(h	5ClhdF%pw[ld'@ #*nCȸ`pc
⎳9w6

/ir-? PKޙy    PK    A             ;   org/bouncycastle/jcajce/provider/digest/SHA1$Mappings.classUmsF~DHtvD4@'&nK)u
uL8@o,]Ere&ΘGug)e	Z=޳ӛ2c8p"ÇW>f!)gWSkuyj]@Kykc
FSKb{o+8!	W Hn7|S`(=9ӱ];`d.rN}6ؼ5KYg jQhfcUa"ؗJJ|<*Kͽ`VfMK<XX,=Q0s}Bs.Q4nYԴ6W살=tfSv}t\"X䱍MnFm+tm뙄ሐ
uGo-۱_7jޖkn8-7k4-TJp{>՗b]6wQʯ<$׳_s}
7La4}Mhx(ΡVٛ~ko[!S4w/9ߪ⎊TU(3Gʃ'd{gSe9y]MWG$sˊj[ ̀>ɲ×_[,k+nI4񑆛XpWq_
</({x@k	$2'X$/<KbIbe*
nςgu\u !)./Uy)!IYNS+<PB%+[1zX|
6BpѓKz]gD܁ՆM(8!ƦLA
'L2X>4~PPјʞj|_`8D<8Yʞ0\ڛDg>@BlcO)5&Y$~C?PK O  <	  PK    A             G   org/bouncycastle/jcajce/provider/digest/SHA1$PBEWithMacKeyFactory.classOJ1ݶVkś'C+B(xXZ?P[,۬$ieW$x|(1AAofa^ߞ_ UE!hwC;bh^+w;]$|/,.#JJw&_UBOz?]v΄<b(M099$_8qo4]BCTB$K3yNz.G݋YJҍcN(2뱯δ u`(
c2a-Yj^QwFo@so\j!xg6P{PK8    PK    A             :   org/bouncycastle/jcajce/provider/digest/SHA1$SHA1Mac.classJ1tN.jPpZt%]L()ә<>%f &ϯ C++{M0H$XI&t	Tk	zUƏ\rfτdP2&G?QrgIsiliUnNѠhR((qj/:\S@rXƆ>l4FI(	8zqc!<|kwMW
d$vnRsq܇
PK-    PK    A             2   org/bouncycastle/jcajce/provider/digest/SHA1.classJ1ôuV^A"BA4ݲX^	^ >8-U{M7'z P@j{Q {^r&ܚ޵	L0(d[kF'{afVq6FvL$[kD>ԫ6Ƿ.@JUWsCi#+[R}m#M:6Tn,Pݟ_>yIhv/|!M"yB0NpA09t-l?B}vnv_k86l0ZQ`iX61əCpZNswAdv0:<	S,ZDE\aN3S*\c2בPK($@    PK    A             ;   org/bouncycastle/jcajce/provider/digest/SHA224$Digest.classRJ@=[ƴVCm`Q|PBՇc.%%dC6+ }Ykffw9}z,C_~!xN]qJԝ!Ci,ӵYVG'"^B^?:c|Y5aąg_ٖ]n
[]Ri}Mki[M~ ZNo<s|̥\++Ȱ?B+!!AЯ!AgX]H~џZ*FUY]c !0}Vr#	1#1&u0C,j콆ﳕƑZRrEe	ƫ1nEym@}L]
E(ژ ])*tS$ۘTH% uibPK~}    PK    A             <   org/bouncycastle/jcajce/provider/digest/SHA224$HashMac.class[K0Ov뼽Ї)b`}PI0;zM&cTpCi-H8~焓Ϸw C?%qLS<D*ҁd"Ig:f?J+^
Ûb"U!\bOd$~=e4.WKgUR'`s+iuEEA	wUž矶WMP8䲔˲6VlXX`1=I@
8Q$Q
=t/bvM3in@hk@{a=C7ko1PKM    PK    A             ?   org/bouncycastle/jcajce/provider/digest/SHA224$KeyFactory.classPJAqca|	HDX#`Bve3+3~'G#(9x?^ qt{s]1$$)^iHa]EğLV9?N塀զak咜Q46gBlhk+y.F_>Oâ$9iQoA	:qCg5q%%뿵I	b/*;=yΎ{fc9FğPK0~G    PK    A             A   org/bouncycastle/jcajce/provider/digest/SHA224$KeyGenerator.classJ1ƿmg=*b[Bc
kfI>S$b

0/C@uT	*v!si/	vNGnG߈ZBs4AGݫE76,eae &|N#FZ-e,4e"e_3mm\X-#2cCn'<<x$K2'l\yO~{棂QPS†X͎sG7Fwuw顫Nn@i oϠw++4?#e;m| PK r    PK    A             =   org/bouncycastle/jcajce/provider/digest/SHA224$Mappings.classTR@"H%D~J@TmK[R?%]JLt33e|Ǔ^hEaswM/ k.S*3\`p
UA	oۑ|	n.7%&-	'3a
CBңz0
牄hus.VcmpsP6JXO
N{XK$\b?PߑL.Ұunۦf
W2u	\ʮ.fNG/+F~6/4_]{*^}ǵ7Zm<[d0cF!'V^[.nm 4n#i؎Nffׄ$stCX%ou[Lų-JM%k:_ӅaDDūTcFZ+_V]a"+#]iV+1 # cPƐM:2"[˦GI=V(13df5fVHFiUȾ?4-8?Ci(
\Ӌ
nᑂa\CTM<v70:zpqcb^0I$\k:q$ǋ9z\Iot\A 	\zk=1#HnZ%Z`#PN!R
D#z"6%dUL	/>c
CIq
ocYJU^c
Uil8Kw*e@=7[\f2b`e`]=zj d	3iDKk'
PKd;  r  PK    A             4   org/bouncycastle/jcajce/provider/digest/SHA224.classJ@ϵMQ[u'.:P" Hq!N<+Cb|saι;_ 'Ԏ	0	+`;\iNhGjd@>N"B/9I_]jeHH4M.00O~@8&8Uӊ/c	Vi[.kuVQ=VY&8
!h	@.NS7g#z	Zc	bw/M:t߱`.h-2k]fYcv{h PKK  N  PK    A             ;   org/bouncycastle/jcajce/provider/digest/SHA256$Digest.classR[KA&ƬY1RMHD냥F@ԇ6,3zWZJQ3"9gwٝ9w lca\9e|T|aV+MPs\u:I,tQhŐ!L+yP&Jۦ~[)q%IB*J2~Χ?=!(AG~$]9d~7d?Bo`A4js
JN=)l{^TZ$J>2j84f=L !s6gÂXimzː᥸i1^C)Cn4X#0LQTnaKh"֨Uof[bN&GQK57PK
]w  
  PK    A             <   org/bouncycastle/jcajce/provider/digest/SHA256$HashMac.classJ1OhXtъEк
4
iLJUE8AL\	'|}p|@PoJ>6\	IpF=	JL&LDӑ	YIm4k{'gd"fC.4 8FQ82JSk?z:JUR((b`v;E{ٔ5Mzɴwa1.y,9(aՁeX!(4îm)%fU;M;`O@
fXa9EmulwQJ_PKi+  '  PK    A             ?   org/bouncycastle/jcajce/provider/digest/SHA256$KeyFactory.classPJA110>
ֈ$d]fٝI`?˓<P
U]o NgKbǕ899;g8MBF
J$dLd1\pxGͭ6
͟^T9$_8Uka)%iȭX	0$i!B<62yAM2N=*26b2GuF݉dF*<nmsx65cB PKǀ^    PK    A             A   org/bouncycastle/jcajce/provider/digest/SHA256$KeyGenerator.classJ1ƿmg=H"{z*<ݰl7K<| JLAA7eȼ?Ⰾ*A՞.e.wv~AߊFBs4AG=y176,ead(:||Vh,0}
g8Yw۔Zlne܈Oxy<=4є/8xsi8a{⣂PPRlcDsGF7FwUw龫n@i~`'|cˡPK :d    PK    A             =   org/bouncycastle/jcajce/provider/digest/SHA256$Mappings.classUksF=KZ;'&<Z&uLM^t#/#g$N>751vb+Ɏ_<2={v-~+ W`q|qc+'8$8NsHr8qA5-yӮIgɂKbN.ʝa
wZݒt%F*L[u۱t4k\^$=OdiJBUxbP+-}=UR(ry"*XzPQWI<2 +ߝ_(> #۰X[z3tQ.ٽpܑ)26[[ҩ2ĭ̮mդ,6i6bWo
K]_k8u̏l¬f#{NmnۮW%K
f5k_)ӱ=\.VVmH/Vlzlznyfy1_2ײa
K[nMBf>:XrTc`{5e3춱{ehy}
]Jg~#X%
S.kA
W5\g0z/#pqiT?ĒK_H3grˊ^ZyO<̀sdu??VY#So0cs:~T!:ҘWaAnG!,8fQL'%U(k3*7*T307qыI
^sa4agG`>FZh<4
Ћȇe6x.m×x&B!
"E #F]4@1q#n]Q816v'&~W
ēpF{=IGC*݋%bhmwGoa4q4oPKpT  M  PK    A             I   org/bouncycastle/jcajce/provider/digest/SHA256$PBEWithMacKeyFactory.classOKK@ִM[͓RQ/K
޶1nH6V<	(qŃt|>ZUvgP9RZc郲wT`;8dLg\B&c)bIdᡊ(0ay^;s!Ϩ
i3SE%/ҔQϭJ	H*>>*>|a{KG.YLҎCV*2δu`(
c3lPs`.=,MT4w~	mZw`kPKL8    PK    A             4   org/bouncycastle/jcajce/provider/digest/SHA256.classKK1ϵuV[ua؊(GE4
03g\QmQۅI _9|~ 8&!H(8[^D*	"BU%=ȖשVqjj#(8}ɾc8FEhfl_NVF]G]	GlJik':̨0t|;&3*/dwܽ@^ P%@E`uB
o/5gmOű*ƍ-A\\Sm
{oX|kE̲he1WU1PKR#3    PK    A             <   org/bouncycastle/jcajce/provider/digest/SHA3$Digest224.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\h`Fr0Ȅ &;;+;3')Hs!02x9$3(2p  #2I O	b`dx{#T
?q03uri>N PKS   L  PK    A             <   org/bouncycastle/jcajce/provider/digest/SHA3$Digest256.classO;
P5j>/^@PmD-c$e%Xx %nDVwafYzC5+BH(;?a'QNl])Qx=	H|%~g/?ԑ֑ё!eOLCO̯'BA QJ*`p,)^hTE`ʄr緧XyNOPKs2   L  PK    A             <   org/bouncycastle/jcajce/provider/digest/SHA3$Digest384.classO
a=`~߼@[RbZُ/4JVx(#Ŗ{sܺAk4tcPv~<"h-V>pٸR{2*ٸCbO_3###kCCʂ	$_O`σ@FTXRĭ橊+htA+3#I 	PK}@   L  PK    A             <   org/bouncycastle/jcajce/provider/digest/SHA3$Digest512.classO;
PD1~߈ ZZC"H^<`<A[݅Yvfa
@%\1h
'8dЎ
_G;yLvo=w	cFȄ/{}҃NaG0:4Y*&,zbo}""\)D
bmPHF)Vhg@G&qPK#   L  PK    A             E   org/bouncycastle/jcajce/provider/digest/SHA3$DigestParallelHash.classR[KA&d&&Q{1FD$"|T0/ O7,;*ORPF42|ߙ3s; 0e#5rӛ^)2y}bڀrAiԞOPFm"=0OUVew$p]b_8ntUWc1W8a$OyVkW(cM`|^gxmt߭H0dd
^0,w&]v0k;i;WzDkQ{MXBB	)7\ygQ^jƤ+^3ZG+_=t`@D-+%R<%&IE
w..C,|8k [nt|9kr/V$E\FICPK8]    PK    A             L   org/bouncycastle/jcajce/provider/digest/SHA3$DigestParallelHash128_256.class;o>Ff
0FV
OOfYbȠ__\X\_P_ZZ\h`Or0; (1''5#8B,LXXx8XSR+(Fϼ"bENq `3po*BL@m@@ PK^Y     PK    A             L   org/bouncycastle/jcajce/provider/digest/SHA3$DigestParallelHash256_512.class;o>Ff
0FV
OOfYbȠ__\X\_P_ZZ\h`Or0; (1''5#8BLM
XXx8XSR+(Fϼ"bENq `3po*BL@m@@ PK     PK    A             =   org/bouncycastle/jcajce/provider/digest/SHA3$DigestSHA3.classRKAKR[L}(ʂ [=nϨ
hV-jafggofvfޟ_l+n\13؞9.TPhX7,+\F a$[[+}7U(JIu^M߾-y]IލQ/pöA(o\G=?	dn#Ii`a:].CQwv狿Q``#&K`Sh#\iL$1՜If#TC3ϥ׀CEX,EJ(YGt
hO^^hatItalrjYKXh#:I$yMӘPK큖    PK    A             >   org/bouncycastle/jcajce/provider/digest/SHA3$DigestSHAKE.classRkK0=qӺZ7s&TPPPé]FGiJSW
@Ao6_@
䞛sMrt{`qxi[صnE>@ŭr1dkvݶ<ۯZu$ a+{"Whv٣,yV8c6HX:>})]sí uS8RU\0miTCMC]CLKis>wTxMZ3W$NcPyieH!@?2:VfL؈2'
BMpaɒ(>-%T)0ҧ ,Fp7wxM\A
DDE3 51T)kL< 
-<8i
Yu~agPK҃K    PK    A             E   org/bouncycastle/jcajce/provider/digest/SHA3$DigestShake128_256.class;o>Ff
0FV
OOfYbȠ__\X\_P_ZZ\h`Ar0ved'GkFbvE;;+;3#s~J*#7MBx<RsS8 #2I Of`dhddH
103si>N PK*\   d  PK    A             E   org/bouncycastle/jcajce/provider/digest/SHA3$DigestShake256_512.class;o>Ff
0FV
OOfYbȠ__\X\_P_ZZ\h`Ar0ved'GkFbvY;;+;3#s~J*#7MBx<RsS8 #2I Of`dddbH
103si>N PKo   d  PK    A             B   org/bouncycastle/jcajce/provider/digest/SHA3$DigestTupleHash.classR[KA&lfKMZ/IJƂ}Piegل_,3&XPD;p.s93gn\]ìjUOue~'{

tP	Cχ
xs:M&G(q"_~x"J|2,<N@U29U׋GQ"Iu@ruΰxnˡ7
xOL[ROW&i c0@րi5zkNȻB;}pyiԣw$Y[AB+h,X2òV&Vzːn.
~pe~ЊjWJ(lP9ooΐ0EdhصȝYiwc^LwF
tO-XݮkBxbL&ER!$6PK    PK    A             I   org/bouncycastle/jcajce/provider/digest/SHA3$DigestTupleHash128_256.class;o>Ff
0FV
OOfYbȠ__\X\_P_ZZ\h`Cr0; '#8FFf,l<L\\,)6a73//9'8Ah0!3ln-AAFP;/P;'c PK*q   t  PK    A             I   org/bouncycastle/jcajce/provider/digest/SHA3$DigestTupleHash256_512.class;o>Ff
0FV
OOfYbȠ__\X\_P_ZZ\h`Cr0; '#8FfF,l<L\\,)6a73//9'8Ah0!3ln-AFA&P;/P;'c PK   t  PK    A             =   org/bouncycastle/jcajce/provider/digest/SHA3$HashMac224.classOMQ=`>e+)ٰRϛ#hP~
D{sth.ҍYB١Fk
<I[)R}}OEJ|1wS7s!;dMMdLd]H9SW&;Ҩ`RxKS)R*qA	+`"OI PK݀   P  PK    A             =   org/bouncycastle/jcajce/provider/digest/SHA3$HashMac256.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\h`Nrd#S3Frt,l<L\\@o8秤22p!3//9'8AL y"L@ #vP5@R(	8PKl   P  PK    A             =   org/bouncycastle/jcajce/provider/digest/SHA3$HashMac384.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\h`NrdcFrt,l<L\\@o8秤22p!3//9'8AL y"L@ cvP5@R(	8PK_k   P  PK    A             =   org/bouncycastle/jcajce/provider/digest/SHA3$HashMac512.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\h`NrdSC#Frt,l<L\\@o8秤22p!3//9'8AL y"L@ vP5@R(	8PK   P  PK    A             >   org/bouncycastle/jcajce/provider/digest/SHA3$HashMacSHA3.classKK@Ԛ4nZta

uq2)MRfR!?U?%NnD8΅ϯ g8 w'J2&%jDY3t:l&4#SMӻMЮ#5
'8Ō9sA*yPKҘ?qe1z΢HJr:K2-̴u6,6Q*"eV5eL
RZ!.p`Ӆ-~
GB'Lkцgskt@731<̱c'GmuMPKFࠤ    PK    A             :   org/bouncycastle/jcajce/provider/digest/SHA3$KMac128.classOK@ߚճX𐊰X
b=	n%MVͯ䩠Cқ8o.	=&E\LkV'1_dT2ٌÆ^Lp
>uY&Xvw;#?8\3l&V-JY*EF}8R >lb$Y&urc!BɕE\{+m Uw%v_tif:PPKM8    PK    A             :   org/bouncycastle/jcajce/provider/digest/SHA3$KMac256.classMK1߸m]׏VbVV=(BKI(
%e?J
<T(1[zgya@^ԝ4`\\NXT2˹-Xƅaq?&8	xV,QSi,\_\i3eI`R6F:3ENѠo9;	a0 &E"	aKi8tPqUJ[n:@u@
C˭%v}YmCPK<2S?     PK    A             @   org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactory224.classPMK@}4igC+¶'+B)AH=fm7ԍ$?_/7ŋKafxyo?_ tCo4G>%`<cF?w:]VO$zP<,sAYTDӡ__MBqBprrAQ"
Ϯ߿:Ӆ?j`aBтeT_&{/
oBs"Ee먔`0AzJx0gI"K.+?c=b25L砊gl
^3llrLmPK '?    PK    A             @   org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactory256.classPMK@}4igC+ZVRRz,n٬B~^ )^^3{{FOP<J3{o1^Gt?*r,Q-dbh/oM	e:!Ep6>IFBHgWNo_qt&Or:(8XrPtXW;턽ּɶK#XC2*%xX!(tHRBw,I`yepl!gAlffM{T	^7n{BKpf˳PK)    PK    A             @   org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactory384.classPMK@}4igC+¶"zcnvCH
"xMbRgcޛϷw ]AD*O	2z;QS:O9K\P6U2tWPpBiy+E\8zi +ǫ/DzƸt!OrZ(XXP`՗;ɞK[uC:*%8 (@R"YOCFς-zl19l
^3llrLmPKz    PK    A             @   org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactory512.classPMK@}4igC+B?.VRRz,n٬B~^ )^^3{{[V{HP>R3F{nѱ@I'ez=Jߓ" o1g:NpČƌ{*yW^$&+'w/yvNNT6'9_-,X([꫿hk
!.p]PZJ$n %WMSn>X]pY);yyom f:{^7iz@+a1	PK.#    PK    A             A   org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactoryKMAC.classRJ1=խz~-(lU".
n,YٲYXP(1Kъbd&g23= 8D1,A.	)1Aʩi\22٤u<1A9uXBN8
MhDs@P}Θ7OjqG;J%νϫr*Ta`̀a g``.Y%XaGxv/bP~]iSϥB;ϼg-1-d0bĴQ̤Oms&&PHa>MLaIZs˕ǵ%	OELjz:jڎg\}]yGRciS$,laPKkgd    PK    A             D   org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactoryKMAC128.classPMK@}&֏!F=B(!Zzt
u#*_ҋGz)0373o>>`jGRIeh:ԷS?<vlz"(Wd~0% J)ag(½G̍X3to8N"<{IU]~Zv7`B{hF	K5,n2CƂYo幠/֧:3c6F^
6hjm;xz+_Xr&jX(PPKb^     PK    A             D   org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactoryKMAC256.classPJP=yXMc-hEJPѺԥ7zC*t#(qW393sրz,]Ln_K}#,yQ	=^\d~]]Suy3CIyr=ٓLD%r$O[:B19Ix`@oߞڡ4y2%,XD͂e%	?BkJݙ	F|#/:uQ]}5(	j*MPK    PK    A             A   org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactorySHA3.classQ[KA=媭Vv]5)Ԉ!quVvKAA?͒e2
&	N y,'.q^O(aLyCz_	*AvW|Y}A;u0B]H8$Au1p>W
]a*䴯O,-CBtمBB`)_JPtazi^"u@kvGptNA{hR~ᏗF621o>i,İRrX&l J(Aǃ
s1+/}J<V+OX6
fPKe    PK    A             B   org/bouncycastle/jcajce/provider/digest/SHA3$KeyGenerator224.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\h`CrJԼԢĒ"##F[XXx8rOIedtI,.N-fdǰZ 4E `a`8lgU$r|@@ PKzp   d  PK    A             B   org/bouncycastle/jcajce/provider/digest/SHA3$KeyGenerator256.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\h`CrJԼԢĒ"#S3F[XXx8rOIedtI,.N-fdǰZ 4E `a`83poB@9v>NN 	 PK#Z9   d  PK    A             B   org/bouncycastle/jcajce/provider/digest/SHA3$KeyGenerator384.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\h`CrJԼԢĒ"cF[XXx8rOIedtI,.N-fdǰZ 4E `a`83poB@9v>NN 	 PKj:w   d  PK    A             B   org/bouncycastle/jcajce/provider/digest/SHA3$KeyGenerator512.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\h`CrJԼԢĒ"SC#F[XXx8rOIedtI,.N-fdǰZ 4E `a`83poB@9v>NN 	 PKXou   d  PK    A             C   org/bouncycastle/jcajce/provider/digest/SHA3$KeyGeneratorSHA3.classRN1"r Ao8O$$ewX^0m`ivҷW ($K=@-KB7u Һ7YU̶'HلQ4ƺArTcgp9S۳hSs˧7,!jڎ5E?<?_t4A{A_oŃ(

"

6RRg5AVĹ/'}}k |*T$U-!%(bؕ'a?p ~FsmfM.w	9#0A/0/V5W#vLpplf{ZzOFEM`| PK\z
i    PK    A             ;   org/bouncycastle/jcajce/provider/digest/SHA3$Mappings.classWSU<+KR(4P,Z;,W}$4%Mju{=QP~ {=`!,$,"	&B3a1pa	Gh%,%,#,' $N8p&,ل6FXE		AB;!D !	!J"Kpp>.!\Jp9
W!\Kp=n<BAтPP'gS4܅ѢŴpXi6fG2Md]['S$o2vm
DT&/xVJZ"ؐ	XC1AYX((9GQYMs44ykF5;=1ʌKOYP<CPby`7,CZIǵnŻXXՉ)t&:E
XQ)uiKcmrZƥ|?'R/uAc;gN=O3ynN䖺8XPxCkTF!VaG7~όrvdrvv
HV(Lm/Z._u
Z8J)ry3|.\^L$/dɳeOAfeVvPE0#AӺH|4:DF@[CZhgrV/M3k+Z5z捷kf%z2zJߟ4K
j	zjZubtKBP8\=_'ºGG<P<i.^ա=1V:#ïuuOW,6ĪzzjkzɹpAry;ܼTiZم	/jb'5QYn<cn<n<ؿUlb7(bW[Y0:\?3+gzxHcU2KUxNxLM^=:9gpH;`=^Pp'^Tp9^q9<!s܁
p(
/qx}
nV7c[-a^*]^:78-osx' l簇}9|2c7]ȭسG߅-Ŵ(&Yma6fc'_8u+~kйww:}'6܊{q?.}a;~AZ*$#99C&s%rj/p#tP-k}$I+Iwl)/jYJ'9pWЋKz4<}&ǜ"GFEh؉I^!:ORE[svG>!zT,=+.:)rgdKt:4k{+Q25YSSؒ:ZNu}LjLr̔bYrft5fdD.0Gs4MNȓJdrDNPgjO|GWk^MPKJ    PK    A             2   org/bouncycastle/jcajce/provider/digest/SHA3.class{SQƟM+KVj5kDZݳu܀ cW3C5=,J+P3eg-y=缷 (jhpv:Ig5tC=hdpm'm1';كqd腢eӆ6`.=Ln*i1
XC02&*120 \e֊^Ӱh(m/ޭ!ٶ4`2{YY§,l,ɘye($M膝|j̕v))u6qrƩTdL6&3t>QyU)Eq<10Bm{ʍ{T_ƪ	f4`܅4wuwueyy"
z.$&AEpV VG	>A/]snE%AWpYpEpUpMp]pC')n	n4/<S}Y8>t;yV^g+n;]5L#NUDl^g:y۩ܾa<,P0R}RP}U5WU|UWU:MN		ԩ
Չ]M:k2_4yz#v<^kxx^cuxp|N/{y$KE#ߐa-!ߑ{r@FɏCr$?SNN;KΒ&9G~&Ir#)2Fr\$-rB.r̒d|B~%d|JPK#dbq    PK    A             ;   org/bouncycastle/jcajce/provider/digest/SHA384$Digest.classRJ@=1^UV1E*(T}(>RRB6d_)(%ζ^j`fvgϙ٧G %,0t-wm>ֹr
2=˯eut,y0̓>'UʒfMm^0;եY=Y(j7las3ŅgV12iנiՐР3d+?d0/T>sRkp[QhV~F}Ea@nՐr	1#Qu0\!V[CJyX,)UIHmːh<kbRt.S&[HWxMLab͚#l:4EPKTx}    PK    A             <   org/bouncycastle/jcajce/provider/digest/SHA384$HashMac.class[K0Ov뼽Ї)b*(·
${i|*8Ĵ_	s;Gօ%a)E"\'dB$f?::>A
̽3|"$*h\N44e|fkqR)M%Un~N5eB
B.6Xaaن0$)FTÀk-5z._ZfF܀h(jn4jctPKh;\w    PK    A             ?   org/bouncycastle/jcajce/provider/digest/SHA384$KeyFactory.classPJAqca|F$'2fVf&,O?GPr vCU7TuA`?B!fKbH!qzv>`8MRF
*$d\d1\p|Gͭ6
͟^,䌒|Tů!>b3D;DȐvX	^	]t1Vy%I7I;{l%Hah:Ɍ*a-Yu2{W16<str51"!PK}w    PK    A             A   org/bouncycastle/jcajce/provider/digest/SHA384$KeyGenerator.classJ1ƿmV=z<==+b[Bc̆56[7_SA,	|a~_+.TZ	AB*i/	m/zg]FB	l	:N}1W\P˙-h,gBç?:B&BDX5,d}կnSNjʜߟPy{h[-͙JعT
GԞ`c%;>|A5.6;Tsf08Fຫ 8}Wa݀$!y|DD>p`ˡPKE    PK    A             =   org/bouncycastle/jcajce/provider/digest/SHA384$Mappings.classUkSI=-t¨0]]w"A106jfpOV=~N&Cw>ӓ>W!9NpWS9pKJbҪHgV`KiaUwa'
y,糗o\aI=1ö˿;peJ:k[K牊OJ3V(zP+&*\:@󳓭`&
v|i#u05]xLj4m*Z;4kյ5~H݆h+ץc2ČڪlHN7`VքD1¼QBSs&R]˩LlX).V݊\pMCx-u9cy>W(//J/זto1<4+w)(Y5Ī!u""z8k+mYjܬ_ٶy}w"]Jrji
F\ffw^FlwQѝzRP.dg]	~瓝; s53$2;>Ne]Lg]ڪ
c*q[E*0pD~IஊfB9Tdq/!85s?0)q+2|nbaojzʽE 'zO> }oxH/%q;,na%{<AJSHz)R
()
jzSځvpo4(I=FtyX=qt[T@L믡"^ӚA?^"/PKƬ5    PK    A             >   org/bouncycastle/jcajce/provider/digest/SHA384$OldSHA384.classKK1OJg:>kbYXZ	%e%I,W(1SG72	9.v#A\\%jĞig&$,#f˓^z݇ǿ1\Je TghٛZ,Q!򵰯(ST(5
Jpо-k)j%L2YvQǊ.<TI 8ZML}4,-bwiE՞p0zf߲ڰ
PKd    PK    A             4   org/bouncycastle/jcajce/provider/digest/SHA384.classMK@߱ԨߟzpAVA*Z҃}YbBHBY 8Vf}wf|{H^x]{ߚ$*BWC%?QA\4q
=$\f{un	vGᤠҧ҄BFi7'NuZPSqnJhT'(TB&`	mL갱H(w"'9+Vw!7	T>iE;k\ۘGq{(*Xz!e
,1W
:,1&/PKP+    PK    A             ;   org/bouncycastle/jcajce/provider/digest/SHA512$Digest.classRJ@=[[cczKP[1T,>(VACA1M!EJA)(H(q
^P3;{Μ><<@/rпxN]qJԝ!Ci]Zky
NDX}~pes?tǐj.UYAìϾ-ܴk?f4~Oki[M~ .:z<s|̥WfW?B+!_a@C\ΰX'-J?&U:FS]c 0}Urcq$1#	taR4C,jo
g+#AٵKTe'DcX]E#y3-B}L]
E([k#Y)(tm$ZtZ"wl:$+PKq~    PK    A             <   org/bouncycastle/jcajce/provider/digest/SHA512$DigestT.classR[KAƬM.]LPeAՃ,;

 zGEg
P
s̜̙G kgJg}۶k;#\N]2`Xhn(cT.<O\Yl2$>̪CY_7µ)atKrw6ٰҮqK4G\Jߘev6GXjЧAЯ!AgȖfŐ-?^
~EQ%KFǨƔKĸrF5Ӻ7e+%~1fD"mcUC4O@}1uT\ɷ0x[k!st͚%wl:q!+PKq    PK    A             ?   org/bouncycastle/jcajce/provider/digest/SHA512$DigestT224.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\hjh`F0/<FF&,l<L\\@8秤22Bh`dK-rI,.N-fPdjF d<@%`;F~ )``g| PK   N  PK    A             ?   org/bouncycastle/jcajce/provider/digest/SHA512$DigestT256.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\hjh`F0/<Ff,l<L\\@8秤22Bh`dK-rI,.N-fPdjF d<@%Ȱ{#T
?q03ri>N PKVx   N  PK    A             <   org/bouncycastle/jcajce/provider/digest/SHA512$HashMac.classJ0Oi^N]"Bt\TЕ 2at>>%"&ps;cl`?G)"\'d"N'I<5::9<)&^p{/f,XH6ɸ.	Ngq~.^:Ө I&g\K㤨S4(-
Jݿ*<jʄA
$\m`¢
KAIS
C|c|kiMs{3XV^K|ݨmΎ5X_PKv    PK    A             @   org/bouncycastle/jcajce/provider/digest/SHA512$HashMacT224.classQJ1=cQUwV]TACEP.ZЕ"tPSڙB?Հ?KL ¹p	
@AJZ\^DQ(ƂۗLFXG,Ú\	Ɇ:zVSԛ&7O )6@ZYgWH00GS
,V6˙:fXH`%
2<4$(PF#
79Un7mn@eڞ.#Jk/b!uG	(~PK-x%    PK    A             @   org/bouncycastle/jcajce/provider/digest/SHA512$HashMacT256.classQMK@51iUoV=DAUPRГ"n$ew+gy
XME`>e~|8&=vaKDS2yʙAL:ݰ'V>j5d$OG+1Np%
YgL=?*"eHz͔0j%66ls;pmMgSC`a&]8XrbZIWT~q,dk
uxbʚ`L(PtV2fX{-]=TPK#    PK    A             ?   org/bouncycastle/jcajce/provider/digest/SHA512$KeyFactory.classPMK@}kj@zpTZo7cؐndw[$x<37
9#noоTZ+x2/3|^/l"^JQJO^UAC;jntinf gK*~-,e$
!!BawZϼMauʇ}0/IINکGEfЛ%#F91$Ɍ*a-Yu2үblxۡ䀱l?kv=ƞ;'PK1     PK    A             B   org/bouncycastle/jcajce/provider/digest/SHA512$KeyFactory224.classOJA11<$)AX#`Bve3+3~'GD<P
U]3!3ԺCcrJd|02&re%u\\7Fdx23_Su%+MwV9$_;Ua)!i}_
 `\l/xm:e<Nn˜SdFEvB2%h5I!%bkۡch?|iv=[hb7PK_    PK    A             B   org/bouncycastle/jcajce/provider/digest/SHA512$KeyFactory256.classOJA11<$L.	BHAOfeͬLY~% vCU7Tu/O ΰPiwʝ3+!^pZ/3)2IJ:ibp|M啐0Gv[V䌒|T/!})vZaܞgb#x.tcop+CX{HYBک;EfY4PNu4"!Lk2\XK!b+ۡ䀱G44#CPK>    PK    A             A   org/bouncycastle/jcajce/provider/digest/SHA512$KeyGenerator.classJ1ƿۮV=z<==l
1,͒},OSPxP'M}2oϯ q@N	2ɰqzF܊FB34AO>yKΌ,,^O~)g)j!ci,a,p>W)g3atneF̈Ox{<4<4	qf,OĹ$;
PEe%>|.A-Rp厌2f08Bຫ 8=Wb݀VMZ_Dw`ӡPKx    PK    A             E   org/bouncycastle/jcajce/provider/digest/SHA512$KeyGeneratorT224.classPN1=ԥ	0*B3X2LI[H\h~79693
d	AT$T=<{:m"z'IL@s#/\]'\1#4`ӀӹKrECqmg	7|wNg3n6r~s4eKFcDtlUI~nkRF[kvQDEU/CNP&Lk	jJV~Ćuذ}l
R+V?|w,6,PK*    PK    A             E   org/bouncycastle/jcajce/provider/digest/SHA512$KeyGeneratorT256.classPNA=WKdQKp"
[+L!.HH4(DunrsoO/ Z!MHcBLFҜ7w'Ml
}ڄ*yr ԵHD$7" O}>x)'B6v]ꠓL%}02d=ŦAЫ
|Yȣ*
:oЩKHak
Q.Bڋ'PD\k	E+X?a,V [nJ.*+_]PK    PK    A             =   org/bouncycastle/jcajce/provider/digest/SHA512$Mappings.classVWU%2цu
UDV,!
 nujݷG=??{$/wL??tg:	%&!%8Kp#8OA` I0H0D0Lp` E0(8$#iiG	.\&B!BA=MwuuO=HlD1UwdhlT[VT+_Xwќfhsgf&sHK@M_nP*GlG"+fǸfJVsEӴqZy'^
;^fx:-.v:JYhlmay˘4|͔*ޑD``HB|p(zcfIMp4jN]N]o\)Up*8Q$`D%ב/ >X2]+˚VƼ])htfM(KT3K:CK<Wf쬧0[Wҝa,*S)&mpْ
Xs~yYy.bbZ9MVLS6tӒ'RɹEMRͰy]+[,_UMyj4YTEUU6";I?e.M>
ث';Xrfbt(tVbCXAa1!BX
!/@|}ƂIM':7IAY4 Wf0d4Wٖi}^*kq9vA2p`G܊gEa]D	y&L
xA,^d%Oᚈ'r&`M&
«La;62>DlkX{&QSkb_4&]ccP[*zs_-|+`C{/*'
Wn
(I~5hS悤Խ<8$\vIWĭNj

ݮv,iy_S;W*{}ΖV@/o8"g^wT;ͣFqW Zfr&KH;sI8BJw:V>GqL3(n.A_iR[_zDe>ІPKJ  
  PK    A             >   org/bouncycastle/jcajce/provider/digest/SHA512$OldSHA512.classKK1OJgZSVĠ(
uQAq!]L()(Tj?%fF1ss;'yx}p
rHP;W/"=dO$&%:Pذ#h^_HlgI3M֓?&	k%$V>FWR)*U%M5Ys[Ŕ
H%L2wQǂ.X""O4oPύhX2[LWm=)A+/9fյau'PK    PK    A             4   org/bouncycastle/jcajce/provider/digest/SHA512.classYO@ϔ')a^JK)K
Ъ3JEvdx~ ?
qi';oFs}\(aSa`a'7:0	t
>vC{5nHaj9-GQuGc7̭5FzQL0)TR~(lr%y:utNũqI2_hvRku!+\ޓ};mFtzPa3Q!@#d9A^P0*(	d,La^apϯ,MtG!w(fo0co:

Z9	NN
?N~G/f1MkNy/p7^CK<(QKr|JU9F m%NΐE _%
Y&
@PK4    PK    A             8   org/bouncycastle/jcajce/provider/digest/SM3$Digest.classRMK@}[kccZ`@ xܦKH	ِJA	(g8k[Eξ7o3/O 0P1dv_m*fXKn<p>:q"e#ؓoT"#nɋv}a;uK[]̓7lGa$/z${~,3ke?k]	2CLbrv&ʕg[N[j7Ϩo#4F-,`LƵȢI9Li7k"ifu֣b@Du+%JT%ҳ!wcX1V	n?/BH*R	Qh4zg,cv*;LBkb#("PK%_4x    PK    A             9   org/bouncycastle/jcajce/provider/digest/SM3$HashMac.classKK1OJg:>kE.Bqa]T+A2fBMGIRa~ )b.wO89#AJ%^R=aO<F	lB50ߖ-Agsap/f*TH6
^'Cn?.2YK`s"vÍtUEAA	"}g,vur	P)duMl#AmDAčWR{:}7^9αcu;rPKG    PK    A             >   org/bouncycastle/jcajce/provider/digest/SM3$KeyGenerator.classJ1ƿڴg=zhT(xaͲMJ<| JLŃŃ:o2ːy{~aUJ=!]H%%]Ax'N6{s	,1i٣08Ox63z!SaX*3atd}կV[Ns+?AQuA5Ke?'!*XN GPu*Nʓq}wo#lu$"xApDD>bˣPKi!    PK    A             :   org/bouncycastle/jcajce/provider/digest/SM3$Mappings.classTRP]@"7J/P( *q9N2Mw?gʨ3~ӤZF_gW^sr~@:$%HP$\' 18oܲHef&3+.WBDHiE4S^0.t`V,-ܕ	_tS4ŉ	=MroVf<i+SM\:s*%+Tvw涡U8s{(vJL{gHZdf̢̦]1L}n(95RVy4fE2ˌzI]ʭofgܴmWH(@/hquR7HQuS3^l73-S]8Q^Vfr
`&khJ_F.f#⮈{"Pz$ZD
C2Wp9PrcafM&KW0ٙRňt2ȁqqe`BF?~0QL3OH9,n͔YBK!Fpi"*zhhma3QUBǨ"~#b%E b+V|*Emȣ+D<DE{"kq&}nN!^Tu{px _W9 QoPK(Z  p  PK    A             1   org/bouncycastle/jcajce/provider/digest/SM3.classMK@߱iQ[?ϊ?K	7MȦ,O 8+x;3_K #Zg/εu!DfqgT]T~Jʥi].*bB+_FfZeȲ*61Llj|-!A*%@ʿJMk*KR/:B+F CLǮwsFOrd.h_c[p	D!>6ku7PK     PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$DigestSkein1024.classRJ@=S1V^
EREC CI
IEJA)(H(N.w9̝G XfS^܉}ۮF895eĐk~*#4@\:<\3|UDX;W-#[NxDV9wV_
n8
Bqx*J\JߔUv1k

}4
t
󕟮o1d̕+WQT
3뛷$^A@#*(7@
c	1#qt&Q5]ӥqK<,y\bʥ0H+F
d1C$qL0
bh&劙ͷ0FRP-m$[tảZ" QSLcH PK    PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$DigestSkein256.classRJ@=VcclRjE"`PA|LӡLDѿRP

%i]pCgιwf<>XC¬J;vomxCiٖg
Etx"x}A
aͮyT$Us2A$Nuipyití gn/2kǥUWeNv[GCR!WÐY?AϛI|~f}$1Ѕq$0!冓Hc$Ft0܄Nؘr1ʢNK}36l`T|eϖKR4s(@N_C80T+h_1M3[lajI)> 
&Km<YYrbCPK    PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$DigestSkein512.classRJ@=VcclGժBqauQi:Ԑ	(W
JAA\QP3;3wnb!aV
G]f7]ߍp<snˈ!ߴl˳UV[":<
F{ r0f<RaêS߹plyr VOＴZn:vV3]R
\ݏa_|M;_[^ЭAУ!Aːtӎva,T䎂ߤj>K?yJ8bTِrI1D#:RUnB'lLqeQɥ>ޙAd0*ògK%fZ}bdP KQ/!uarWPѾb+fՒR}@L.۪yi
<:13PKi     PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$Digest_1024_1024.classOM@}-@DqąU"[r8~6NI޼7y<ow CTV{`IɍF?o}o~D:拝a|s{!*`sa <4
P:V3sD4{ZZ4RtIՑ!؝+
LF=u PK   g  PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$Digest_1024_384.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`Kz06402!S<Ho	;;+;3K)vfdK-rI,.N-fPd @&y<& CKa;F~ )``g| PK#6k   e  PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$Digest_1024_512.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`Kz06402!S<Ho;;+;3K)vfdK-rI,.N-fPd @&y<& CKa;F~ )``g| PKF   e  PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$Digest_256_128.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`Cz0625#S{<Pk;;+;3C)|6edK-rI,.N-fPdF d<@%а{#T
?q03ri>N PK:G   a  PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$Digest_256_160.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`Cz0625#S{<Pk;;+;3C)|6edK-rI,.N-fPdF d<@%Ȱ`;F~ )``g| PKY   a  PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$Digest_256_224.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`Cz0625#S{<Pk	;;+;3C)|6edK-rI,.N-fPdF d<@%`;F~ )``g| PK$   a  PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$Digest_256_256.class
@ƿj[ࠂ:.΂(r^|,'Ĵ	y<ow CNwŐ,TH%)C?C?No}o~D
NH0i=ϚkB07Q0Qt` W=4~_r?Ygg{OkтM|jԡUի3\Qw
Y0Q!֦~PKȧ   a  PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_128.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`Cz0654"S{<Pk;;+;3C)|6edK-rI,.N-fPdF d<@%а{#T
?q03ri>N PK8=   a  PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_160.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`Cz0654"S{<Pk;;+;3C)|6edK-rI,.N-fPdF d<@%Ȱ`;F~ )``g| PK#   a  PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_224.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`Cz0654"S{<Pk	;;+;3C)|6edK-rI,.N-fPdF d<@%`;F~ )``g| PK^   a  PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_256.class@ƿUOlNYTE-r8x %F2d
 ^2d[WɏɄk*8NvoEC:ይa~s^8253w` S=4B~_r?Yg;_kрM+Cuթ2\P<wʤ5Y0Q"֦~PKv   a  PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_384.class;o>Ff
0F
OfYbȠ__\X\_P_ZZ\`Cz0654"S{<Pk	;;+;3C)|6edK-rI,.N-fPdF d<@%ذ{#T
?q03ri>N PKY   a  PK    A             B   org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_512.class
@ƿkնZ|A9EgUj{ȩ\WIp|(1-.iB$$?BUY24RdЋ
_GG_'{
?I"NH0i5˚+BӰPpa(FF`/y,;WJӽh!>5FnfR׀A`wk(];:lX(P PKim   a  PK    A             N   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_1024_1024.classJ1業nP]EvU(*1
c4S0媠Pb(^r˅眼?h 4AVd/\G!UA#ǜ
u<A[%4&h~O9rA:Zʉt"a,]!K0Yp8W+fjʐvf2<9N?eKFC:tY*hv}TB
[	cv	~4?R)apKMq<+v;FxAnO_}ǂۋU? PK3Y4k&    PK    A             M   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_1024_384.classPKKBA&W-Z-T"0t%dǔZ	~T4J!q|3<?^ ԱA QҗRI{EPjnvzrV_	}4S<PP㩍/Bߊ%F<lh.GBӑtՅ/qzrj_L<%3+CdFkyHyH{<d
hUʠ6C[9M 8aBG2criĹtXr!R%R$O-@0޼]d?PK*    PK    A             M   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_1024_512.classPKKBAGW-Z-TI]+Ah%8Ʈsefj%Q(-9͜wxxyq)d2"عJkRwpTEY7CP<PP㹍/B߉#F<lh)'BӉtӅ/ywvzf̛_L<	%+CfFlkyH{y)[22СRA)ZQI$ְC{9O 8aBO2crmĹtXr)%RLV(>ܛwx'PK}S'    PK    A             L   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_256_128.classPJ1=T7.mP퀶خ
W%NØ:IZ䪠QbZ\D{$r7 !MTs! p۽+ȅ7NNG3ZzMLS_%'nyr%WD<4VL#pm	W唗
d2F	Nii*  q#hUc6c4d2}[%fK4RX[zylP&AڋF`MJis^ȴ(VbF+wsl>w,['PKӽd(    PK    A             L   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_256_160.classPJ1=T7.mDEv@[lWaLf$-

~%EADNr/xxypJu@=Rݻ\Y~8"E*Tϴ	9Uz"~'7\rLc}NcĈ+:׆.\1N9\NyN&nԈR29V;f3FC&ڷU2hvD:(!F%lh	~ޤԑ6Lkq-\n-mnL\<"7ybEPK˿&)    PK    A             L   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_256_224.classPJ1=T7.mJuS퀶خ
W%aLfJ\ /BQ˹>^ߟ^ 4C U	gRI{NwAHUo&A-!'	u21
^\%4&#O8pAg:^ȱt,Ca,]7!gkÑrW!Ljʈ_<d<d=xrJoFLtT~VuXB
+, J&HXI\.1EW2):,Zx{Fv%OÂ{w PKN	~(    PK    A             L   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_256_256.classPMK1}/?*x xh% "m=
JLÚ.IZ؟婠GiPQ3̛$/o N_@ S	RI{IwIH<9;_:A#!}g	uؘ2yNB	l	&\Ds9e(!7w
G-~2t*άh.!!P hz6g4b*ץVhՇd*ml/t3F8s.;D Q%>+,?\,;EPKt	z$    PK    A             L   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_128.classP]KA=}CЃ
2(B) $:lč¾z
h^83r/o NC UB
sA{W~Y;7jA5V!g2HMi/\KAyqTs1⊎Dȵ&{,Xo8SWS^*Ʉ%:3"-AUٜшɐm/ѬHac	yʣm8ϛ;i5PK#֭Œ?Ww,=,[PKCu(    PK    A             L   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_160.classPJ1=T7.mĊv@[lWaLf$-

~%EADNr/xxypJu@=Rݻ\i8;"E*Tϴ	9Uz"~'7\rLc}NcĈ+:׆.\1N9\NyN&nԈR29V;f3FC&ڷU2hvD:(!F%lh	~ޤԑ6Lkq-\n-mnL\<"7ybEPK鮤)    PK    A             L   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_224.classPJ1=T7.mK]UD;-BUiS,W?KĴD{$r M&HUCTҞe0xROOFIPuH	gFrlL9F$B	l	&\Йr,4PKM?pU$өZr:2mfW)YAқS!*_U
6c	A<?oR*"f08B8w.:D V&>ޞ]bg	ޢ]? PK=l(    PK    A             L   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_256.classPMKBA=gmZ-T!6FJIWJqx=(J(QZսpfs??^  4A\l^H%%]'!UqZX!)pfl$(4GDr+ƚ<lx.GBӑtՄ_vC7p5կB&LՒәm1#֥<d<lz<d	Z
iUʠ6GyC 8ybG\1c1
piĹStXr2	^_`w0ނ=>PK+k3&    PK    A             L   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_384.classPJ1=T7.mP퀶خ
W%NØ:IZ䪠QbZ\D{$r7 
&HU칐\ޕBO'g
ZzMLS_%'nyr%WD<4VL#pm	W唗
d2F	Nii*  q#hUc6c4d2}[%fK4RX[zylP&AڋF`MJis^ȴ(VbF%Oͱ5EޱXo6PKE(    PK    A             L   org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_512.classPMK1}ˏ
^<B	=UD-BSiXSْY

 5üoLydڐ w!~T	C<W<HPi gB߉V(5Ayل:Bc
czͿ'>Gnz˫_L2
%s+#fFlJyzy<	ބ-
u'ZaiVUDEC	 8%r bc\gNaeGȺ+O%v.	PKw$    PK    A             E   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_1024_1024.classJ1Oq3wgQ*EhAWЕ4L>3mwZ$|7={?? TP$ȕ	z=K(1-c9¦]ť҄7uKqBPv/$MGTgWTfj=q&~&ly:=9ApDJ.V9
"OQYN6pngʙ:I2,eXf2,b&ME2JPce]a(!p!t>Xczpo!ևxm;2,`7PK	3D|%    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_1024_384.classMK@5iƨ߽YT=	BOe.ukl*_Gxgy/ V Wm6ӚQjAe:K&xRG=JMJ{f.N<={Bag)/~Ok_\yt<(T"g\K)ry
JHWozt.5RYIeAEJF`׃$(o6}_>ZjT4Ik[; 5/|4*(	6l~̆v:X6
PKP|*    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_1024_512.classJAƿqWݶ{T`ELEEvPWALc쬁BBCEHt|g|7"U>{!Ȗ[T:Ek8Dp%dzRǚ=I<*υf'..<BQ9/IS:ו*͟ =}GJqki6E"GA)ˏ6=jT6Sr E	FؕMVȨ1ZK<31ittϧpS8킍B	v&XuM8PKDh(    PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_256_128.classKK1O#8Z;
"|,J*1
53S&S; i+s9p
A"(
T|CpF1\=D4!kԱfRwㆠE\hxh
Me48\mpbjgz2`X-8P)
E
J1OgśLn;2q\*KlXXalc+zؖ 2R
!ƺa=P*#f	Lڦ:X&_PK`^)(    PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_256_160.classJ@Ϙcc,*DEFEuр2N:IJ&6'mw%3p\p
?]KkJ*!8{
d"㐵UGXWqCP͢}.4k<pAp4t
Q2ZO	6~1{ZIy=}GJAzki(ry'qM_?MS80R*%E,۰Q\=lKL{\kQcsnnԼvsbLP{k	?C[FmS,`_PKԂ)    PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_256_224.classJ@Ϙcb,*DEJՅ?]	BWe6)Tc
X|
Dݕ sr@
e;~&{fZ*P-iuK8
Xp%xWc͞^

A%pY'xOH67hn=s&kjFp2`X8P(
JLp=dśJn?2qaa)Tl;pPr
\=%Aq!\kQksԼNkU"(;f=.VPKbC)    PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_256_256.classJ1KlޝEQxYxYXЕ t%1ԹTc*X|(1vW1O|'?_ P'(%\֑No	_A$R4P\&~s_wI
zS:<:֣'sLOTWzLp/~%L׾rz~f*MTNe(%2X$sƛn>eM-⠀LV22TPcXA:7EJ0F4X>[Dlu jo@hҮ3#l~̚v2,a_PKO#    PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_128.classKK1OG΢¨HhQ|,t%]	mj;SНU?%fJ87{.'?_ P$HGY^OjZ*%8tDP7qW28bjI*Ux?iJ 8c:wd}@ԙ_A</W%şfX+;nuPd)rb`Xo*Ŕ54R&RpǚdQ 	
sAzJ]rcA	CMOtvpc^
GasЮUVAPK6m(    PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_160.classJ1;ޝEQX.:+A4s)з\, >i+EL?9Y z^Z*T-QK@pxK"Rm͞^

AepY+xWH֋7ՒzLp/~uiWOՋ? d+8P(
J@>̋7|ʘFTS)Y(błV	r%	J3Al/e\R!fǺi}Pʇ#X
'C
>thۨeElPKR)    PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_224.classJ@4mhYTE84)Tc*X|
Dݕ sr@ezDPZi-^P%7'Qe0#uH& R'=JMJBLOlGoʗzLp/9?uj:şz$V
[qS(b`zo2lʘą\*Xssu|#%Ai!
C7Ԩ5|zTMwj^@x=r=clχv:X_PK4pf)    PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_256.classKK1O3ݝEQ`.:+A4yTrUGRͅsT3AU[8鲗x:
$ɰƬR=IO":B#sLO𞐬#ԙ_AW]?k?0e(
8P(%
JD=,7bʘALV3)۰fÆkcFܑ E2i\kQcs6!y1V%ac>fCFmS,c/PK|VK&    PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_384.classKK1OGk}wgQaT$J̄6u:S&S;?J̴ݕAL\||~Bu	&pQ@ױ/8djKk*Up?iit\1]B~)OF33Ϳu~r:\9#% V>ZE@A)vxWS 6$HB+,-,a W=IPbA ϵU؆O17;M탚P9jQl3(FXac6m2"PPK%1%)    PK    A             C   org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_512.classJ1O:mZP	uт+iLI<>%fJss'||~8C<jfW:
Qd:%2=ťIqۺllݸ ΣBZxxJѕLL'¾wON &|V9<EHA)vkƛ|ʙ:$\&˙|00JGmEP$h2VYT8>[mou7r8k9b-ziӶSrElPKx $    PK    A             <   org/bouncycastle/jcajce/provider/digest/Skein$Mappings.class{UI4$FˢU
5

"T+(N!&)+no+
h+~2g2SCy眹睹9 B?a Zzu		766n$DpVm0H$l#C4a!C	r<@!"Ap7½{ <Hx0a/£ <ExYs}	/^$Dx
UkPCCT--RIL[Jjoi/I-mvcM\i(RX:JM=z|{1rz!=݅bnPmeWܘ˅ݘՁsc.+;y2ƅ)_M=z~V4<I%.IT&ZeWlRuJjS6l7R5e njmԠE_TuөLL8ݕNvSzZUwukV	U$R4x%0anb4>b\uM愅se;oN{qbE<WQJ\E}2˕*|W$Ϊ0nD!!!}!a!E!)!
![![![s(oDB|\m5GP4YHa}Ihg3[Sɑ4
bV?ԣi=v|^lKe+FR鄑Й%ّL|w\Ft(ōp.3%B#'ic4,zQ}{Tm僆/
5{]?}?>#q,Y*o$l֋n
w.._9U6W/Zzu;u94'Ywbg >"p$7pT~ě0':19÷!	߈ل>ތv!'9"5,~ȥWzkWM\kÀ
ݏ&q^x6#85^1c-E2Ρ^!1:0'0 l`pYU^`R.6(~	]]&lSyքn8%L&")քU]0՚&iք5]p5K	uJnMXLzkrf9%L&\{sq2<`N=XO%SX)ފeWN#7j׿kai/o^)f%4;ZJ
x6֚"ԖJjǴZ}]o@]>⻣8U:ψ1 ЇQ/PKF    PK    A             R   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_1024_1024.classKK1Oc1.mJwBPpUbi$ia~?%Ew8ܓh(4AZd/2xR57AyZ>sΌ:٘r(HnX4&\Йr,4PKףzҟg|shsO;Ljʈvf2<9N7aF#B:p]*lw#ڰvV- J'HX)#)}ױnȸO%ǂEC?PKy'    PK    A             Q   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_1024_384.classJ1U]./]BJU4LI|%W xI;	?7 M&HCT^TB*'gMIЈuH	gFrlL9{+[f67	tM2u%k,:Z:ZzISatneD̈M/YA֛S!,:U
S@	 RG9e1c!8Pt٫Cu"^@Q!e{KPK}&*    PK    A             Q   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_1024_512.classj1xxE.]PaHYQWЕ1Lcǌ$QJhЇ*҅P%$\?^ qC ]	2zRo^eEЈuH	gFr,lLx/;f67t㕜
M2m%[-:ٴ:ٶzIsatieD̈]/Y{<9nm0c+F#B:rY*_G>.!qP@	 
RO9e1c!8PtٛCu"^@Q!^_hرbOPK^τ'    PK    A             P   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_256_128.classJ1tz;].,*BEj*\1u)ɴ0;_UAĴ(^N
1vd>A\*\xG!߽
ɩ8#:T3DrNr H%&GPh:0	]"p.E_L:DKNhj  qP hU;#6c4b*=fm4k22X[`EI
 (U3FJ6yqղb++ܻ9ۖEK;p?PK*     PK    A             P   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_256_160.classJ1tz;]."YH]
JLØ:͔dZ\| JL%$\?^ b,AZϥ{Rݫ?9kǍ#zCzOO93I$($i 'BߊZ(Ykxو:LC
e!2Zt`;,;̤HtȈVrV3b3F#BڳY*l;F/#֋pQD 
r[Ye1c!i8dk]-+}^B<<½ckKmYdPK>Z*     PK    A             P   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_256_224.classJ1TBp@n*TU4LI<S$bZ\/	|'
<jm@y.~QH qz4Mz#zO936tjз"JhfM|9sA:ˑt$#a,]"dE_L:%3+cfF[yyy133ѾRQ6ZAl,UDEC
 (wS13Fß1J.yyձ~Gȹ+
w.?}.QPK})     PK    A             P   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_256_256.classJ1tz;].B	vRmW0N3%IX

>%%!_΁$/o N_B Wo	RI{ITu:9;_f#O936tf٣w"JhfM&p6tcXFX5"8c#7(W3NjʘvV
<%N7aFc":pU*jw{vcXE+lc*	a2ծr0fCpp+^-suAFWK,<w8PK!M&     PK    A             P   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_128.classMKA/몽խAA)(L㰍23
{+u
 }hB?
	dA\\xG!cwhd3m"AJ&>u+kLo1gc.T%s9d(B7c|v:\uzN'atfdDLu+9yA9CڷYqtVmPFKlb2	A2NlAĴpM^bu!rx

n/eƒOPK`V)     PK    A             P   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_160.classJ1tz;].+"YH]
JLØ:͔dZ\| JL%$\?^ `,AZϥ{Rݫ?m#zCzOO93I$($i 'BߊZ(Ykxو:LC
e!2Zt`;,;̤HtȈVrV3b3F#BڳY*l;F/#֋pQD 
r[Ye1c!i8dk]-+}^B<<½ckKmYdPKMb*     PK    A             P   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_224.classJ1TBp`hg!vU(*1
c4S0媠>KI?}<h ,AZlK%R08;mF'3SΌ:ڄr HDc\ЩNr$4HKWn?YzѡtW3N&jʘVr6=xjwLETtVmPFKlQvedd$ǎpK^sur
O_=Ǣ%}>PKxU)     PK    A             P   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_256.classJ1et!hCX7BvU(*1
c4S0媠PbZ\/	|'d	2 .~IH u3F#O936tjw"JhfM|9sA:ˑt$#a,]"xE_L:%3+caF[yy{<:he}6Al,YB[%TM
 (cf0?
#]wcs/oTO;_]ǒe=?PKz'     PK    A             P   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_384.classJ1et!hCP+BPpUbifHJ

>%EAw./o - KsdrAT^N&A#$4N"A[^%4K"M}9sAcHh:0	]"pE_L:DKNij  qP h׺c6c4d*}Vm
2X[`"6J` G#AP(Cf0{?
m{e/mTK^QckKmYl'PKd$)     PK    A             P   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_512.classJ16y;].B	]UD;BUiSy,W3EA/s7 g8("G7F$OB:hOCЌuH	gFrmL9N$7B	l	ZSΦ\йr"4PK׍n?YsfӱrW3fjʈvV
<En?eKF#B:tU*NcTE[e]F; jO9e1c!8q8F\k.;BE߬?WW]9]qGPK%     PK    A             F   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_1024_1024.classOMK@}knGgQPH*=$<ɺY|ݭ婠G"fޛ7 lxIoD$iֹ* 8=TRԂK&t=+0Q%Dl'I25~I.Yt?,.
ilfUήnOP((nrۋ{E@X'U&	,i;Fq-W>\̱17;v-t>PKi    PK    A             E   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_1024_384.classOJ@=k((`$|*f)[s)[!oO?7^3pf93
 :^MmRsJ]5-y͙6\SтqMo,'؛9sA'zP4#͗_EÃdxtFINFia-|><->f|ۇ{p@ X&pU&´,Lk	3F|bd
x/hF."8O PKCN    PK    A             E   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_1024_512.classOMK@}$MGgQPHٶT<(
ГPTRn,O?Jq*"x+!v;&$k\\jJE+δ媚kz dq8
oٌ:WL
m$,{? 8AWy..Zp}x>>|-;QC k pGe*¤(eLk	3ZQ|bd]x:G/hE.\bݱm? PK*%!    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_256_128.classOJ1=q:M;Vע0$ЕPpUb&y$f/*(~QD}p}>>8uG~U\n'즘T2˙-XƅaWR\M
fS,Qi쇄`/עqh9Y&VͭJ97MQu
J]vG!<,Uh`%2V	j"aRSn4Wb2{Ƕ6=qݮ-zdw.hb7PKKw    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_256_160.classOJ@=cQZRAօ҅]t%\q2ɤLઠQF^89^qT~&BOM1WLP˙-hθWBK	M3]Thʉ0CB0k?>N`<VKNVf&[o:iwRQVB,c6,RA%J	=̘1_mTʈsۮڄ2uj/@qu4 PK.    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_256_224.classOJ1=q:M;Vע0$0T](]Հ3Σ$0媠~QD}p}<><`c?J:6T`SvS.
Q	nl&ܖ,°[K.fτds]ީTj4CB0k$>:silaUιnE§hRP?a0@kVN$zqc!|;v]
e@n|Ybc'0p1@hPKq    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_256_256.classOJ@=4Mյ((Յ҅]t%\8<TguUP(qcx/^^c1sU(;$zy!*$ْ\v}/Uqo*TH6JfHc?Z
Nj#9Ty.Vͭ7Mh;o:YJ
QBb$DIQH=ʸ1:߯.Zȩ]mw;xB늄%6,>=!D
PKT՟-     PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_128.classOJ1=tvEAa*HhQ.j@WBUPRQT䪠QbF^89^QWqre{bRpcSɄ.`]J_rAp7|&$N%RDM_&G?8!8s)LZ[Xsn@Q)`;A=CxUhb5
"aRRn4Wb2{ǎ?yݩK>]Z@
PKN    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_160.classOJ@=4Mյ((
J(*d(SI
UAĉ"ps!	7"$bL*i;Лbxə\3[МqCnTM9rAg4a쇄`/עQ`?'8s)\X-9[sfl=踧Q
M,X
A}X Jz1c!h[;v\e@w	N5X]:]ZoPK0    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_224.classOJ@=4Mյ((
-..*+ઌLͣL|?Kĉ"ps	 N؛aWq.siFGb3mRA*^	_1Np7l]^&BD΄6ѿ_~4te(Ȕ^0-u`?A=M8Uhb"ABSW 2byǎѼleEF-PKx)    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_256.classOMK@}4M6ճ((,-VJГPTf)[QvB?%n("x3cl;&QWq.iRMm('dq	N*ᄣOf\*e*KTh!!Z4p^0Jr02cC݃#F=hgq 
MX>*SAj%ZMh{UMC;9|B&!$Bݱꣅ- PK
    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_384.classOMK@}4M6ճ((,jEAz
ʺY4)SA7~\gf@'	nUmL}N&gdB"gS.*䂰7|"$N%RD)>$_FGÓOSNJyRv΍\
a3A=8UhbVAHBgԃ#
JlTA6wv@g	밆X]XmZoPK$V    PK    A             D   org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_512.classOJ@=i6FmkQPH*
J(q2yrUP(qcx^^aŃ	3U(;"znE!*$ے\vu'Uqo&LH6JfJc?Zwk'9Ty.V-97Mho:`C(D!VFhT(giWbuC-{Ǟ?}kKt>}!:@
PKRMn     PK    A             3   org/bouncycastle/jcajce/provider/digest/Skein.class{U.`E(n$1j( QQfn]a;6{vvvoK~w{޼f[h?ϛ¤T:_l!68!'=_7&dtr4Cn|0&p63wԀnpSize1l=Uǽ)aaq^{n?RcU ezmZ:ȟ{KN=z잻F]/vUvUuU$N7f|&[@&TLFTx+42"	!UvFЈiDTTiRJ!'ZZPP2wMՙ"*p:__ku=p*=:GmJNeŘ*j~ה*ecb^]ܘoLdTS4XaWY%TDZ
QȾ߼Z^$"L,AȢ
ͨ%tseG0^0A0Q0I ɂnZ:-	S{%[````_L,l~s$8Xp``Ap0ႸQ$,4Z#m#G		
+,,t
+k1&td]vY]#գc);)+\Hرz`P/Bu3*=@^@V^Sڤ+cB12R(mR٨/qԋoqБбT&
vh]f:\`>y>{WS]3+Ϻ^ʛU6*Ԕ6`.m`|mfOTR\R!-yaĂsPOU,{j,KƊ=A77nwz
ذwn
ۀq
Xt5!!#%אǓ''kɇȓȇɓGu)ciSY3d/y</}d|'_&]\Ur|\ON |""#&;dBYr+#'FCr%?%/"?#/&?'/! /%$/#"7_ߐW+oɫȫkkȟɟ__ɛț[?[?ȿɿQPK]w    PK    A             :   org/bouncycastle/jcajce/provider/digest/Tiger$Digest.classRKK@ccwժ=ăA` T=(4]JJȆlZRP

%5037ff_`!Z(^1;0mWxueȐoZmt-aVљ/Z/׏ol_`Vͥ*e4̚hyvǶdr:~(~ui^RRMjv<)j!s̞ο1
q
	
:C:=LXlym,FUsD1ô(f*\&fu$1ܢI+\%qy<\bL|Hgk[ 9F(=!yrwPS!BzR+/HU
]]dTbĝ ۠N1)xPK2n,z    PK    A             ;   org/bouncycastle/jcajce/provider/digest/Tiger$HashMac.classKK1OJg:>kE"(.E݉ē2)I*r5`3F1ssr{nqbe	N=b,F	NmB5誾-N=°c!T'*zip&84sI'ilfUnnJQS4((a,"ec3uH
H.+hb͇u6j$'@pR#n4w+nnusx9ޖSՖxPKmF    PK    A             @   org/bouncycastle/jcajce/provider/digest/Tiger$KeyGenerator.classOK@ڴ1IգC[xjEAj^<7I<ĳJu07+Qecکʔ=ch\\ppy]r 35C'1gYTFTHyGWp$\MKcGj6t*VY05C5L\Td1#Wk=T-.]lbI{
3"T#
QwHw:: d>^//|H]6m|PK4    PK    A             <   org/bouncycastle/jcajce/provider/digest/Tiger$Mappings.classTR@B @+Z ",Ў`\ҥ		~> ΔQg| ܊#9g\Η;QedPe蔡#.5+x{%n0_ya_ɿ6 K9nPx!HƌaO1D3᢫$<WD|x8_n#r~oEN-
l.h	Uq\bA۠XH=ܣSfe4}E|V7BMu=gq{"+kڕ*9;gpϷnھpmnܳGt\/f/6uSi4!m5	^Ss!cf00rMg.4GCE؅%Ieߩ&ᦄ[nK#O=mᴺ
g̮,ʻɳPFh<\D#rc$:Vxudw0~K+]HA:Tsx
FT⡂*HQ1C?I`cHf	<eh9ezjѦX$Th5Q!;GN|K 3t8LDM?o{}LV*A>s2٦zd0RV14#SE.I'h?6	hJS1{y1)((@PKmw  2  PK    A             B   org/bouncycastle/jcajce/provider/digest/Tiger$PBEWithHashMac.classPMKBA==_}\h	Z(--p9tDߓ1gu?*n",˙7 (kA%#iЧx9gڌj>51
@hzT'kڽcgو:UX	ZW7LW.d"Ό6*dd8m² =)v(zc׃=>JN
?":cPAғGlVxd*vgK%8Jx_e9^xPKdfp     PK    A             H   org/bouncycastle/jcajce/provider/digest/Tiger$PBEWithMacKeyFactory.classMKBAWR]1 %I0ڍsO\hܟ*hQB88DCjOJ=;bh\O?yb2,[hKa]J<"LTy:7<.39O䌒|Tʽ̄!"dƉX

qwBXǓ,!FiG{ZC*1YDd,o`g5_7cA[Z{c
T>PK[~    PK    A             =   org/bouncycastle/jcajce/provider/digest/Tiger$TigerHmac.classKK1OJg:>kE".E݉ē2,W(13-nd87{ϯ 8 k({Cp	{I76LlfS4ְ'W]F\bOd3Pҙ_IIűZ	6*bHF:EIѢ`WşUS!j 
6}"hPI"0HC$BG]+uuh=]/ͱvPK?I[    PK    A             3   org/bouncycastle/jcajce/provider/digest/Tiger.classJ@ij\ 
hTBt=iBLJy,WA#8̼= h`!{Plٞ3:>מdUGpgUİ#WGIGi1
=Ёؖ#qCLOA6YWÞTlfhd{V&n05dL*3e{8"(qeIXSgw@<uo^x+PS/Jm.u#5-T(`\S-',<~^X	i-@Ls*qF׉s
PKyߡB    PK    A             >   org/bouncycastle/jcajce/provider/digest/Whirlpool$Digest.classMK@ߵؘj~APP<X=U1M!+ =~((E
f>3}{~Cq0n0xu"|nܳ:/O2:	Fvt rϐ&U2;V'_^Hm pBtk"|"Onɰo&mg`!S]faQY!~Cm
V
'a☴0f!)Jk7@
3&n8洛geM_dsVֱJ	,Ue:Q1<cW-, 0RjU7DqJJIXl#K*K'vl&&APKJX~    PK    A             ?   org/bouncycastle/jcajce/provider/digest/Whirlpool$HashMac.classKK1 '}g}ݴAD`=TЫc̆6eYT؟i?%fkу,b_L8A{ ]X+͈=Y,R$&MfI,{+%ZG7Ncʅe{.N~i&Od*fNpoр⽳?6N3JSVz'EBQQP]Q|Pɱc5@kXACI@nX~ĭ4.҂99^]M4>PKXo    PK    A             D   org/bouncycastle/jcajce/provider/digest/Whirlpool$KeyGenerator.classAKAQsu[+e)R!6,23
:	~T4BC
P!(;j_d+:
û8$nxq3+UL2ir"7"s
%+1D̵ӹPi.eJ0l_tXpDDFt4qPsP'ÄMY^}Cp/g7,Lkq
N7E6u{i
q/Ȫk]?PKOଡ    PK    A             @   org/bouncycastle/jcajce/provider/digest/Whirlpool$Mappings.classTkOP~`F Wt:EE(#,xhKi@JLF2݅f=9䴿`$		Q	7$JqO[6
*v
Lsw\GjHkip17ASzwO"g2e8
pɞIYm46=ikl2glCZi仦m,홖iY5-g5WM,yvJ5=G͕lq5?s7MleՊ웄MeFM¥zM1.܉ "lUqƗ
7FKS?hE-⎈awE/J>'`"rwMLi-uQ^jHC$Za\lGȭsMg+{"vvX=*۶YFxQ=q	`\ 7!&&#x58xT#x灙"qKYGOVc}<xfGqTOTf(SkoA5_FNRǘ=LiE Sw,T:N'jGz>' "Xśoir]"3YDPKʑ{    PK    A             7   org/bouncycastle/jcajce/provider/digest/Whirlpool.classJ1FkMV\Pp"TPNi&L30},W
.'$|sZ'Oεu5Tr|Fׄ29/N/
uadU,+?dj3j<UQz_.;7
esNDi¨UeA ht@W Nꡇ>!𷯪oN_?.T&<bݟFQܷy5X΀x<B`27-s7PK4S  	  PK
      A             &   org/bouncycastle/jcajce/provider/drbg/PK    A             2   org/bouncycastle/jcajce/provider/drbg/DRBG$1.classRJA=k_Ƌ\lDELh)-
B8f6¾^YZPⷫ7\a3;g81 8@a*l\0':IO|!r˰ j
΄5cR/noDiIҁf%U[s3R}&eԗ/%<Κv&NA%$zÌì7|ZxvJlf</9baѝ
1l	um492vJ`X0-V|aGS)J[ˁqDcZtVt S[?V*Y%X `zwtA
Jߨw{-T%l^Hhy<
?PK|    PK    A             2   org/bouncycastle/jcajce/provider/drbg/DRBG$2.classQMK1}ikWj~=x"[ŃZTPeaݥ&%
TPՋ2y+=kJ,7XaNZ%:	{"FQ e(I]c#(.m6t-Y3fd!eHHEI ǽ7w_jտ34l~CՃaÔa}u^*9x?_0pߧѩR
FG#*zWˁIc](wgBڙ
D{,H)]
c,=!N~cJ,bP<:y? PK[  Z  PK    A             2   org/bouncycastle/jcajce/provider/drbg/DRBG$3.classR]OA=b[hR)*j)}RBj|ЧtX3t_+1GMF]0|Ƹν{{
S<^2F:rkc(ub(JS[ƪmikYӋ2Bvu	-U:
)4)=B1!smŢa<CKv!^ot	Qk#j6E
UsC]$:i1
jٗbhIO	6wV<9878|qGazJVZPZ&0Uzu} !TWv㺹Sz\9|VkZuhp)x>rc}`(iL^y,14fq!em-c!jl"hNȷ{B4bʞ4G/iy9p}aۜkD"[.O0+x<)3U31C*Vȟy:=ݠwt{('}79,Mq6aPK$    PK    A             2   org/bouncycastle/jcajce/provider/drbg/DRBG$4.classS]OA=BE|"f_6}i:;[֙fv/512ޮ47ܻg9w?>3p3dWHEa۶[HneYYQVFȚѝ(a1X%+!P!9v";m:曼/<IH僐-iŰ0DOM),2mL?L)&]fNPG(OW~ϰM7t[)ߺL#={}:UV\Wx\u`VR}TFİ\(JGDKnj3ތCww-
Mm:#k/yBC7<p,6=`v\`*X-XQ"	ULw4i9I9W\Kވ%Ikd饚Ul"8	>n.1Cq#ɳ,pWz
*HdL9X
i,vӝ6)`(D\O	PKK0    PK    A             2   org/bouncycastle/jcajce/provider/drbg/DRBG$5.classRN1=F\DE4,8/4$7n{ӌ݌dJ_QĻysI{s}B<FCB_F)tJxuƈ٩Ύʾ-dp1U|Ih
Xę0ii0TRd/cT%Gkkkw	:!Y[YJLC)R#g:Q.N O>HxWoٮ+XzRUN~{W,,>7=?:ivOx)Oҕ#o3<Dvɍ;qQL"a-BC,I6CN=	?S#3sۅ_mBΌQ8yrl3{	ըߞs̑8]LM4k]6]	:b|u[̳ehO
^pخ
PK    PK    A             2   org/bouncycastle/jcajce/provider/drbg/DRBG$6.classOPǿJ1^>xLD"0Dy,dDЄ_LJwS]ڻ+LtIԟ綋#@t~9{W s+z"mfe&0/ۮ-VEr
Q9r%ވϻʵWMt(jqŃQ5tp-}14#&/sFM,$M!7`3TZk)qa$	YmQӷ}jSV^Z5l	3J
E.?tarAo^5k_+O/Ro^e/M:4CӤKo쬽d{x|axP;: Sۉh_
-6.?U*h
:t)VTУOATbs+\¿4B2]֟z0sUKƙ#>{.{{ƾ
Fj5MC/&4t྆$04qd%2!06tCxbOT<fN%#׺ͻdڦr?t%5m].)yLJӎZJo[ȫ٩OXȞ"ӂ6K +ٷh
ٕT,0UsR8FNjcERAx6uo
NF(JRFk$V
y.8PK  \  PK    A             A   org/bouncycastle/jcajce/provider/drbg/DRBG$CoreSecureRandom.classPJ@}ƮU[BēF!f[6iI (qSzPQq`̼7Yꜰ॒3U~k<K%-LDN{q2CcS)ʪP<"OWyb_/Ccm
&ǰrBĹUptG8D?6}c&Qw!εʆ(KU mG^躬
{ÑwQ!{yǡbaPK    PK    A             8   org/bouncycastle/jcajce/provider/drbg/DRBG$Default.classKO@#HV>PAEMM 9-HJ5b[Hx[c0fggٝٷW ;X'sBP)s{Vq`:!_f# ²XVHe|."2MHG)V0)e"¨80S7l5}'h3af!{6<fVk,!uK-6}Ʊ7mZ3JGù~Y`hԐ0L;]B6Q00I 30hJa:0`F8fUcW!d%u([U9<3j5{-v}d7X$RO"lw""(=" )yB%@PKP.    PK    A             F   org/bouncycastle/jcajce/provider/drbg/DRBG$HybridEntropySource$1.classS]kA=&t6ca`1-hXdvn̄m!o
@xEc wfsιg3wnxa<g(T0\$vB2~HAڄ~__*1<Ic3BL_!OiZS!4w{}UexO{pS,
Hx+Q-,-X*-d8_5Uf6FުڟWˡV^ANY8xG
`Vb͆'63:VuB'2C)%M7I"a)7|(Si(6%0ͬG.
&Vi2vk;[?ء(1%z53
<r.9ESlӮN׮bd`2RfoPKQӱ  N  PK    A             \   org/bouncycastle/jcajce/provider/drbg/DRBG$HybridEntropySource$SignallingEntropySource.classU[SF
H	Ғ"NpqC(&$&d--@HIfJI}c_Ԧ)3i̝25gtsgw >Û"T.K!]MLJhOy4,lXM	E	Lskf)	]F,V<Lr#sdّ_w	;-߷ܚg:R恄8	,Y!9hbN
ʀjՀSJB=nZF`-?`Wmm2xW<pwxPZFpHC*T
IgnD&]2_H]s^rki0?nxիus7,{cA[585]t+	7[wY,3{x3^/`*;̶-|$hk'oTQ3,^8e>n7*ܬ$wE.ssbY6+	[灌NoxGƻ2ޓq^2d\dʸDoy2-xwŸ}IZ9'#AK!h4B}o2?z(̥s94u&u\%SީN]޽Ӵt'K-肢
>V
|AFE}$! PqC>Sq7U-a-tqz$+Af`
)\ )`\b'bOkQU_¹ԜpofɩˬcmUŘc!Q׻G`r)b	_	1II/mP1z1X҆(ju<҉
u,kh;f9O[qx[[J5m㈠xo|_56=S$9a9\ўShjԀ
\闤y#[Js?VK݈
"T뒱Jk0˔iFm}$q(HJ^fDY굙7;V
5: PKBc(  	  PK    A             D   org/bouncycastle/jcajce/provider/drbg/DRBG$HybridEntropySource.classVsUm_.[QTMS`[IZhT6nT
V|~T?;?}8M9uUL~{={ν_<IMAc'G8)3e䙘f4dm9&]W7U]֕3]#/a7JU}K(P`kLA}_fN03mPzJ5TZJk&􅭠ӪpIYcqd@~`{RWɍح3w-_ig
@l8{5!&o3M1ݒq8'
 e=T5ayna^YZF&"YsJ6$|
ҤaזW,G>/|x˯UBϰeIa`F2"N˦#c LŧpN
k{mrIpj2,AyI"W14=ꅻ|OX'ק_u(#=OqTHuI^,>)ziE ,W.D`
pZfޔYd1&A8.[U^5;B1fME'T<K*VgU$UHUO~􎮺gҫFVh[##ےwQջ7MU|(p7{KvWV}l2ͯs7+=rpdZC({n:z&VnLvzQX߯?ƾ}l0tlFѮ Ni1c'::Ѡc64Ѥa7ZUu<̶xؠ`^xQGFy4?<:c^QL2pSxUXa`jH1j8cPpRC^gx0aٔla7?+cW|
!]cfe/ltQ$PZsM	7q#J(%=t*!L?s݄&RKnTZee/TbGYGB/,4wb6S%ؤ,"޻c4Z;Kxq/ WBx$^3@_)~KQč9CZ|<O÷,?E\i
b@!6LmF@u$f#:ЉX3vuߊpNp?9
PK+'    PK    A             9   org/bouncycastle/jcajce/provider/drbg/DRBG$Mappings.classRkOA=Cݮ*PtmnVbHHJ5&~6ۙf$,2ޕbM0q>{{o x&fM̙L+ygU
0:zy"w
qwaqEEŅiZ-:w#RTCEh@RC~˒Hy2aXI
tġiKo(PHo胈(މיA,_Nrs˃dzݍ-'Nvvh3eϭʳ(p44iƯ6Lm
\!zOstc'_mMެmÄa6
qܲpn[*b}{[)tb5O*]:)2cA`T g,=ƽxp5Fp#oSEqZoPKB  Y  PK    A             ;   org/bouncycastle/jcajce/provider/drbg/DRBG$NonceAndIV.classJ@icgzR znR7DoT|(qiY2;?o JHg|pQEQӻI/#v[a zXrD\fv	X<ۨ؈8$J?>97au§tKLG:k~P+
Qpj\l7Tapė[RVgF@@,as;y/B?F-t,ЋR`&1Ô&0ab3$u'-wXP'\וTJ5_BNRמx$A=.5fן&ҝ6a(71&V}k,=b6>E 	PK>!    PK    A             M   org/bouncycastle/jcajce/provider/drbg/DRBG$OneShotHybridEntropySource$1.classSAOA-]XY@J9l5\ Fd2$GP.JD;ɼ7y}7 61T_j}o3m!"zn$!\Ao ^k=}H2f4:Bu5z8c#'Y"
CN@4ĉ;{GJvھLVaCRU7KL~VDmuIS|-KSYRqJ#+M
`>@̙J0EXALG\IھN}yQȂi?I+
	C0tBi+xL~N]om\`uK8
)}:>:}WlJ
*bIxQd
/PK>\  f  PK    A             j   org/bouncycastle/jcajce/provider/drbg/DRBG$OneShotHybridEntropySource$OneShotSignallingEntropySource.classUSe-6YJ)VTͅt[,VKr	.&꥛ݏd鲛lO})'s6	P-LMf|;߷s 7'!\pCB{4`FBGn@ۣcBۖcS$jcREF8E$ۨzp'tSLw%t5 ʭzCEKN;fyT't{6)|4b9j*roUV=aZoNVT;$wt֝mQ휯"!l*aa#=+-a/ZDU߲5uMtݶm: 3k"&^mܩq+j^mnwGSGۺ;)<	N[erjhW(jsٙ	8"Wr݂g_T9m9ci&N鵠%j%dt~i6nK%aVmb#-"9[^`]6.y:h=_Fox[ExWƠ!2Fd\G4)!y
q";fO@8|i|v/Ec㇆itd9:qhyI0gjh4׏Y<FUPT#0M=XE!Qd2^Y	-ݘTqY)>CafaeSǲ1$1ϰ9ÊH3e(X
XT[5va)uM:X\Gx^Z^iUWJ7}GKzy'#TA.>ܹRWJh')*7vuuN|oO^|l6{=䞀ޤ8JDi.P}
MFt |԰xW*2AvP4/+|r Kub?&$?FB5<L>
BaњkO}B7*MA*5?>}sxzq:D_gdUOrP$7(L#d_a'\jg+؞6:Gk6 PK>E  	  PK    A             K   org/bouncycastle/jcajce/provider/drbg/DRBG$OneShotHybridEntropySource.classVsEm^{Y6$A@A^.4	;HE4v˄^Pķ߭UbyXMeZJL(t====ݳY|@do>±G8);egYsr,fge2ҹ,-'+Ó
fkպsf:{V=↾Wuo	
9l`kiY"zanei7m[sM'VbU:D&XE0%N
eYLHǑkŒmIA^0K"̸v޵|Q9rS5QKLZՔdc\2
tKƹ₰njA(
z#Q5ayna^YZF&"YsnJ7$|ڀ㹥i/+K#-yu+.YΏC_2X_a˒(f=q
^60-t*>mwP0y hbtm4Y.	NQ-X%h$Ij0NOe*ټr9W潰^wsD`,SYq[#஻DE6iZ<zB!_M
rJּ7eLEn=;n2H3oTد1*Q'U<"WEJEC*VqXA)9H|kEHK.޽?8@r;9~2]F]4_ڃލ7w8v;
ֱ4/Ѹ=OfP~6O]VAyT]Chqgt㬎1c/::Ѡa7uhq0xq$mձئ`O<EcԱ/"4^axU^psQd4,Û4YJNfNA2,05<y
Y\Ґo08N0El
?AhFvB'4߻}
Ash<}GQ:Eh3)s]'DVnbxqK˨8kXLϖÉԾBGYKJϨZtNDv~k;5\_{7qUwhMOW2(zXۉ*D~b9
ΐ8\lw`[b/ixOo~cjߍׄh*rQw3	vבHP>b8f}#.JmJKpԟIPKuU    PK    A             Q   org/bouncycastle/jcajce/provider/drbg/DRBG$URLSeededEntropySourceProvider$1.classTQOA--
BժmADJH6P51e{)Wfo7&&2wٙofvf_<k̪'=ƐmyuC=a>\v[k1`Qc
G3J
mڵP8􁵣GP]wN!rAOȖV3ձA$V]GX==W(Ut3W(p7VAD;g/.
L7",0IEY8ٲ
ars)+Lc6(\%}
ⲭڿF"}ZaMUkc3a:%cOvqWN:ֽ^bM㺉<fL2
c1Ic>&,VLnP½&Pawr0Tt L\Bm<EHcs-Fiw[2nG<N*RB9@O'&-MxZ}	?"~h}H<>M4>RjǸhAM` Ԯ(Br칁ba  Ɖvc<8Lܦ8F,Y,/4)e7<?PKaJe    PK    A             Q   org/bouncycastle/jcajce/provider/drbg/DRBG$URLSeededEntropySourceProvider$2.classT]OA=Cu|]TQIc	4n0h(㝥*(!>s{93J#bZfs134930TtR0m.2$e HO3\{t|3{oJ٨WP
E])cnNJ2?ҎB(*p\Ξ`klg[<]aX|fE{-iR\X\aBQ[9/~eW%k^\Wz[ن6C\FUn;Aξ+RR廬qiVjuUږ&
	
45hhՐF
W&,˰RN˯tOd物33rA+8qLY+&|eu^
eDZGu:q]]ш&2@&Tx-'0G	NRM.6UYkγ\?[OU=O%O\]ANbȭwR/ZoƓI $Ԑ7-F#paԩ,zC6:xlb8GF	dDk0ufdeN'	'xJ0Cc#dO0wP7OK&yh%VQfjmj^qgцbXAmsCX"l'o'PK\    PK    A             Q   org/bouncycastle/jcajce/provider/drbg/DRBG$URLSeededEntropySourceProvider$3.classT[sF֖-PRPSlB@ش3)/QHjiҗt!ҁ^.	tC4gsv)9Z/R%QޯhcW(PvЋHѻ}$كeRHېw\v-g{BPpN	xXK7JA|P5)8j$HH?ɷy-Q慡񰭸o|PC/aCX2}igs Xl
_k>lwHXjx;>OT(j>E/+d+;ڍVf[.e7:x }62=2_K͋|)D2RAR8?x'%p$yԍJl	T_eMLxě&2qgML]Ҫ4.dtOT/6k高@dZ9|=Z(=ޯ{^ճ6,(aFSZicy{Ilc>,`ⲅ2>pAP-,TZKwaЙ/S;YHȥ'/gZo	XRQ_-=]hϖMSf!K38v:sz8s!<Uix=k.{Xr_p18p?CvsRTc䓥N4)5aűCVtqQsǸ	Ϟ9KM3]v"Rp[-7qghtqk}>E{0oL1=fI2s%A:Cy	fp'&&HҡBWBPK0Oz    PK    A             O   org/bouncycastle/jcajce/provider/drbg/DRBG$URLSeededEntropySourceProvider.classTmkP~n7.ƹ]v/Vm35mW_;m-~IKIIIAԊ?J<i7qN${=ys{7 el3`<drwu]'m2Ȇi n
X(wǶÛ"&N3̶cC=Mw۝xːxm?$0}oI:+fǷî3繡9<5kvM#~zZ'ֽo;-ARϐZ29"fA88Vsnq/ccU+Ū0>7.K%\H"aJU	Rf$2WR2\P*T^He?w_ZE8G7/~Qʴhc*֞3=wMY(
汦`L8
0&f7pSb
2X¦kdݑFAFd.gQwStc_;/;#r{q1ͲN]R{RH=<w,|Bē0dc|{x8/~F N
Cd>V$5Ĥ2mϑyB`_=]/PKIf  w  PK    A             0   org/bouncycastle/jcajce/provider/drbg/DRBG.classW	|ɆL&P	AA,DZ[n "`!lg'`ԶXgi{Zz6Bn=UZk<zߗ!]o} 'qhccɏKԏ~fʖa^M,kYQyUrѲӡ?7
>D]݆m浪6dZm:zӈk$}~R
Ӹ%]ݡ1ږnfo)ɖx\KX@,&ڋbbu1q&j:lڀfM3&59L1V:5=(4nF2Di
M#FRvۆfD^ܡ'iǔYsHf⪭[
:մX貺LKr5VpJL0m&[fI(A;!GO&4"aZ=I!Z53!oӍDξʹ֫C4Z<Ex߫YiPUEbNq7ШwtmZwW_ENeToD)@S(})ͲGKS"jeQ쾾Pn*j+ZA\s5D@]A`CvZV.Ŭ
M`嶤qܩ'i54;xq_$QZ
`td+0Q ʃ|uJFS6:gDtNj9fi[uN9|"ԔUi-g-us\̶.{:ukV`kqTR va#>Wk[hr**l+e4SK{'d1:)r
&-mkJ`Y997p!܎)gXQVYordd\yAU^rz?cz⫦'1=iM2Oki(yT1
=j*E/]k9w#䶍`hA.uxvF5-%@ċ
 sԥVp$Cö,u2(=ݫƯh.3ު:_JWW5;i\ʯJ'5-V-F?6;GlY1	IX+[.NBX.#a
6K"2	oUT	4	$HK.
	I	C	YE[tobvD^Ceig3nK	6':e2K7|~'D|{qJOBΧBJ39e=X2ܙ#3[^/#_`S+g%t.q(:ߒKJm}䨷2Xu.<ĹJVb}Æ/P<;侧B[:7Ow#B

:q3!a,P^0ehPp7[9
z1WX8A98QAA)
GX
ހx1]اJ|\R|B$O|
s+Y+3Qi<ģ
tL)XqTc&f,/ȸOx+c
Ox3"|wJw2nd[S?c?i_a,111ȸ
vw0]n|]\={={y>|_{U3x?;~-v
nS5?u	vIXE
uN_[G.~zFmIs4(A ຤QK̅`R\D 7݌
gzv^21.':.QOD*	*CxN(zba|ܸgh>T^(q;
*p5\wș:;iU613BDZaqBz{1kb@AɍX8sōq۝цh؋R,~x#A"1}c1}>5x{X^`\(HGŭqQIq,/Z#{bcJe7v7npը9S%,&z/]2#(aZ'3c7s#	h
6YNQTe'p~Obp7DZBʈ
Z}V߸9T>GJ}!T.3vN'9hAe[YqQ^b]PF#%dP
ck6r2|U89N]]dYnurO|	*2bβ>?gD]b(fTB%T*U"CHM{MS2CDR8Au~<Wu#ُ48w
!%?Y) X&pZ>y3|*pr+

4yQ\vsmL%1f0C"F13<F
11 ^ߋY*%BDp;j:rnwz.ߍbmܻY/C|Mn"|lXPKm
    PK    A             9   org/bouncycastle/jcajce/provider/drbg/EntropyDaemon.classuTR@ZF)q&k
Ĥo+7^*::ٴRҙ~{۳߹3xЁM;%Dԁ;!ޗU'Ħ#oږc#
#ze|rbV1ǉ1E	p$tN0#s3AHd,'W)gV`9%d9+@wK%&ٓ^"}oJH[`yX44pJڨmMf͵g&/HH4I!MVqkrCX[/OMڦ|hMܖnqh1+isn1\7yke]ӊ\Ie&݈WMos^5R/z2211lgg!aުa	
Vgat8R1wBts۫tQV5w&~uúEC6=8+`(H
H!`7Q8`N(،
pJA7N+HLAY8rq. ࢀ+qA11W\넊4;nk:0̅QdREFHf() .N#MZ@"'f;L,
}ꞷvٷ-|K߫>e\!U}4Fd$d2|ix5LX5L7~ {-Teܨ"^OVW>KtjD1AqA: 
GIqYkz]6&BzNDÁ_hS4+ŤþRr
2FW PKckGC    PK    A             ;   org/bouncycastle/jcajce/provider/drbg/EntropyGatherer.classV_SU-	dY

R4iIBac*no6鲛E~}C[胏>IY/&sϞ;/.p]ŀD.?Uڤd|LYsc[VHsqVAz.,Wϗ[[
V6g%*«*kYp!jK١,߱-S
ەeLe.EiY)Ur2'$S9?پtgE6:*lsƔ|_AW2cj`{ud
b-iB׭gpa)lǰ<7o˶h<3JeK|բhb6w4ى>p]kb~(,b*s9BH(ҨXbq*mą!=x0~:9|cNLB֕} $>6U&|^Wk~x"&ԇyЊ#VUѫ⊊>WqUEVk*^W7U\SSਂSϐ7ς['	f{ir!91*\<>Vyg5@S/wb
7ck>-;9ё]tP:Ѧc::1CÇ:tL8 #V=RtᜎaR금t0#y2LpOG7x+i$KR,KWn3
s)05
cB8֥`RX}m tS^YꊼS%m(xЕF+T/aIo=S'"پ!mJ'8}؅(\8@$4U":Z#jSl>EH(5<:[p#ށĺMO!g}weGX*uNCwDUD) z&QC 3lkƿPKqϾ    PK    A             D   org/bouncycastle/jcajce/provider/drbg/IncrementalEntropySource.classeN@DgKE:Is
5EPPR++swڬ#k| 8$BfGz|{pty><npDu&%!Ex;a#lNCzc'9
B;KЈFrh0qRi,1aQQE*7Ẹ PKAk      PK    A             N   org/bouncycastle/jcajce/provider/drbg/IncrementalEntropySourceProvider$1.classTKsE+y͚lEpHb8ARPd!
ȉ91	DZ#8qOʅP;@;'~#=+a<Nhz{?xWcy/1$rj<&rZ={cz+hfvv`27<ד4ܰcpR@M#KZ{_W%!u!hh	EHV(:/{_(%vg/Z5y٧7/<h/Zܯ+ڷ+:pfq} 66HCr>"ATT׊XA3$|*n.Uj<R(m|l\)6vK\V(q43G7J=1T-4<Ϻ	Ĕ&^0qigLdM5"QMeI)|E5?7weBڜ6"ܨ=Zβ0}ꖫbGI}4,3ZCFZ<qAJ/891Wl8xQ\Nx]7,\[rb!%xE\PěZ,jEzKaZh%p0"T;[ZӮP-<t:}*|S[A	zOOWxg7|,yρe-
8N7)cz6FZFӅSX.\ƍcTGXvO|O;rb#AR{ј"].&R'Ю}9 .N;xam><O1=qD-΅Ƀ|NT~L1.'2	Sߠ0; VV$F1pR.n}`&H>9'쳋tpa8~oX`X'8ؠ.I]~QPE\{Y)PKh  N  PK    A             L   org/bouncycastle/jcajce/provider/drbg/IncrementalEntropySourceProvider.classSNA,]VA*UۢBxC0Vk0tv[fvJ{x;xClĘ&̙̏_xjC̨#c`s!dUƩzX3F+5C~iZ*5t7j/rNO
[%˰	
t:pBEM_ 
=W*'zqU%ܓ=Qe*z-#/ܧӊnǐR2l3f-\b(DRNlvP^5?ѩ6k#>W575M;o&WEb,rE,yL]1i˸eIbl7qr#l(dζ5^pwe.
7-Mzi:OYKHN}zˇ0a
"m116mg01fV4IR6IA>7%qϓfSXdXɝ>% 7Uv?T-E2e~PK-^    PK
      A             *   org/bouncycastle/jcajce/provider/keystore/PK    A             ;   org/bouncycastle/jcajce/provider/keystore/BC$Mappings.classTN@=C OBR[JhIK `>V ʢ"-U
ʦr;cGc'R>E?Uu8$HssϹgo "m%
](R<"Hkzu˭@;f}3'gOF<VV&T+'c~׳.#Ȗ&xW'XeFC6	Ҷ}NWȭNzL`&	|\Q[<=٣zi[Mi$Zcke{(8Ip46)jL%>΢X!>n$!#ؽ>
7Sgu:sҍn]m
n_ԍk1Ft9*x`M
y
զճtݔs}.L &pOV"l+x2
䱝3,	߈.[cp `r^t4ZvKƧ	ڔ3qUђDڹؽa+>GJJQS3?_!WTՅ8ST5x3lK/x1K@VBi7HPKu"    PK    A             2   org/bouncycastle/jcajce/provider/keystore/BC.classOK1nVz&xPbO(4,.IIB?'%E20{|~ 8.yx4%t.
]`o&τA)WB>+Scs+)+(bskLYVX&$/x^UJ?ys!"n~6 	Z)B?5yTT0'M+r} aM$Aaj wCp_Mdz/V#tPK{AO   u  PK    A             >   org/bouncycastle/jcajce/provider/keystore/BCFKS$Mappings.class]o0_v<+iR׭Rِ"7qtiR%,\Qq
	-_s,;?~~`o()R\Nq&-(S<xHA1E W,#X9#3Bi7G&5l6	ff։Ҩ,f
WIvsЍO+3%A:F'QIg%A39&=}K%O| 4@SJ,gfvm*Lvg`ٝַO$O<ER򆾛ɶ#q^gD\߉ch8tJIỌxt;lV{\pO7URR=)a;0x*7[=ReDI'M[j{́	j|V㙨ya^|8Ŷ
 >a_2crlEyVjjȖʳ+ZQV4ՎjaQPK
    PK    A             5   org/bouncycastle/jcajce/provider/keystore/BCFKS.class?KA]E	jka!D,<@۬]	cY	~ ?
ɔкt殼y|	\/NC+gIYR.\Ka]X.E.[r͔as4%en{E+WG?{Xd:!Z3~aꠍ.3EƥNh7h2q!UVq
PGS
wkO[4O߰
l;PK}  ~  PK    A             ?   org/bouncycastle/jcajce/provider/keystore/PKCS12$Mappings.classUYSP.r[@dSH) (dSBj 4$eg^eG|87mZ6s=w{N/ Fq@qE+EE;EE'CG]=A
bb"D1B1Jm.,.O	՚%h	k`XSe3%K7|dc5"
\9_덾l"ܑE)#]}C|3(e84A[:A+"dfNFCP@֘,E^؋
zwMN&DGj<e(q0bXmYK٦cL59%PqB|JbA F<xtT6-M	GLB'J̐MD9w)v8g#عl娐]ft[<ӂELL9SE0"bc fU8M+jʆ#5=w 1٘۔u69M)Kİ>=UؤDwE#L2^3uh:G-=;s9qI:ZxNW\
wGؿ/W1e!zȮz]]RA:ߣ)Mh1'X"<2>05[0Xņa{;K16J"M6MnU7TJ=a-Ms~J@l"L]
[	[/}	 ǒrxz)4|z+'%93f.!<x-&xŔleߣs@(V!F6Nq4Ph>*PhqUNy8o9L2>3:x/PKU    PK    A             6   org/bouncycastle/jcajce/provider/keystore/PKCS12.classOK@_Қj[o!kJ/x	
EbxݦKH6!-cy<P*<70_ F8$Ofu{f|{7~!R":OTEe646S~4R~QdJ6%'CpˈFT1p_QEc!~_ڒ<@%4|0Jmg2[썵VeIc!mc#xeGۻ\wha!}=PKҾ]    PK
      A             -   org/bouncycastle/jcajce/provider/keystore/bc/PK    A             T   org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$BCKeyStoreException.classN1OFԅMq%Fþf,NZ)༕&>e,DV.{nO	3='(r6MA96c6c4|jVqJNPO8Km"蘳1tbL"Kr?$?|؋LDм^N0_kFng@jw֌;lGA 
*aaRBGK"Ł</(rNlp]yW+jO#X]/>ZAe_PK;h,     PK    A             R   org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$BouncyCastleStore.classVsUnrHPibER)>nnlJ/|88tƿ	sII%;w=gܛo6@ t z'<<&@럌q3_d[?'1 Q
\1º8żkd	;yM5υ53Q֏2Gb;2i03pl+^0i[a{:<W]ŋX5I<34ǳvUp57A>UrTX>`Z|$Vִe/M";df+cy2PliE7:6OE4FƊnChM=^ԍK4ztzޜfeUrVV:U0"VMqT2rk0jS9]Tuwm5ng'jkEvksE7Vr	ʿv]ܜQOY'Ҋ:yk+YOBW|gY]
_*.M_>ڊw3c8*יꔮHMxs[ކ;y08Z^`y
[*(}-)ㆱpS 3\z	|cKԴ	x0ex!̰AMbxaVm*ãcxaT{y# lr"ۗlr{o]݀8_6je]"2T6toզ;[eřXjܭw3мdo'4[6)(1(MbKw_#c'R2q?V# c-^!}8].{9,CA<'pOxj0y/pxQF^⣓AA0A,A8b8-ay	0#!xU!rX	ar9,as=a+gJ8R;FvMD,ÉB)Wkq~v2
XӬ
#b_^ ?Ņ?!^bzKoN1$.7$^(^FGtwQS"7[/Bgn_E۪B2H@FU$|8VTG^Wt
&dERkԆwo'o.V6(?&oap
þX+oaJX0gxs@!g#E6F
H/+D|\wbgWK2juN?q
WD-"5[ۊȥ:uF8Vā
*kUI4hZa\eWe|
#X
+㳥heKdys}?PK\N4^  
  PK    A             D   org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$Std.classN;
@Mbbbl`6X*X!(XVPx߃xX`(Ng;ovʺl6חZ*͉dJ<}-2Hm!WrfΥ@y5E /@/'>⴮lNdy9g1Fň+oĀ1b:1PK     PK    A             K   org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry.classVs-;Sۉ!@ YPR P9!XSrF9.r:(mi	
}-22U'_N?L3MwO%rh>g}?^ ~-CMd2Rc㹀>-!/ex2#mpOs-df۟/<>9H>i5N{vb*$ \x+x?%-Ffu)T}6
ߚij8ЙIبFMVyvHfVܚEZYכ=5wmgnm4!Hz,0Wh43`~[zQ%`϶4|kFΩYƒ;6g~5=0z,wvkz̥.Vշ]pG]ѩKVlHWv-ʜK.]<NN٥׫|,=oyl"7]0ۂu߮IB2FwSY:oyEJim83J&xs(Zq,9O.HO睚u0_R`Z6TOƓ[.=f뫞{.[^jj|׳Rf*cRo/L9G'VЦ
	DЩ]$D}w#xN#w
+pW>@\ !pP<(a4cM
)ms$ܝ߼xH=-
lX~|>>@#6/bl_Epb7[xkH(ߧyWo>{ΕLnJ9h"lpxNوsYw&:uп>K-p{c66}0#U$nb_p '53)
aTN4<GDLng)Ca!	&Q<i&cy&_а_԰g4쀡`<"
%GxU&IL3"sLjLcPqOᢊ0	V%Jοy&_OW-'K] -8O[>ixY
a.NBo(P9B/PN8:m`xNhb ?CDx<M|/&~2^_Ƌ2.ťe 
'
sFzQPH6Eݤ5-֡0$
~H<^F?h1zZn!S&VtE\[W𚮌	%FCzH䍴tM$
q"+W񦮬;q]^7(vl?7	 ʱp(ۑW0EǛZ.ǂSx/u_Ϯ!|AHYM	ڽx!.]UB+;L0Αm{(9`-Ygi&
IeJ|gˣGZz+Zd~?Mr#|Zyg>>{zA
YrQ=B_ӣj;9ut-膨q7C9/.rGDP+WZGMn:0U
5wEꗿ'GА({j0U
YvdG
L
t7^O'`x}ԮCA{murtGOVlZ/gK+PK0`    PK    A             I   org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$Version1.classP]KA=c>6Y7MZ5>B3J!J})%L.3+RZhlgQ'gܹ{νs^
v*(WPe(v?ORI~0-)1iP$#B{S	58C+,~(2QtF\EHSg43koYkw4ӈx|FcM|h@0T2O~=$m܊n=1?IJJ2*|FۡRM>=Xb<}x󽗌!+Ec8XgQm
O;?
7]4ب@_}%^bl;asJymˡbPKMQq  !  PK    A             @   org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.classY|?'MK~h@6AѶ	5Qن!Ҥ&)ܦ{:cnZ芃k=ts9_sSV&Pϧ{9{9{8 M6Pl0SmPm6`
k%6%]q5댆j4~+x.znL3WR[+鎟hH!!`=>QojRF_k͇0.慃p"t%mvmUwjҷ#$ñ+WI$f!GW"I:ԤJs|2F
_+YVZa`ih7" PԶ1?7[}m<wGɝ=*]Ѥ'wB]jhks0Q; 7oZ5MMS[|ɮh7ij{"2_@6UfHmm'4Ŵ{̛L$mI5Aa`:ZבxW[&:ږ@V_3㴡Ee5@f#L^mb5Zhcmj<2sN{}hL
i=	5xHE0Rs5ӣF)ؖPD
EKX4Fmn>
Fȣ"T=]*)
*I
MZTQeF#1:(/fS#jMR4JIML*RZ	rm&hBЅ.#IM9l5ܙk종(FxŢ˄>%MVjC A7$"A$kX#z cu]459(U}J;2oGjTg*E]ԎUPK0&inqNL'BXQNvuS,PV8dDhiv,_deH#S}jq(B2kwS$q4aQ[юX4ޣsIR]*r/.5ÙmKn.pǃ;ўd Iq'RlT0SiMX)ufF5)j.`cPQ2BM@t'l6zÑsif:&ʰ3D'pr&9
uƠdf.xl[,3Uf3`Bk$&fr2bV&sMT"װ`D
*g`F^eKo^=jHQLq'1-83 IrB7xc!\2-+${W;{1ORA}TeM46.fB4	wbv#t:vZV꺶SqDbP+oQwpJk6f;ˣzݡ#?fDcH\D_U-y}ٱxgS7
&LDyzCnQZAzEHmF!2^DEPiU;Éds0F)qvhBM	N5Lx7o#O30I=s5گt*tevi{Z> l#xGl	TO^=c[M!OC(6g44MF(aPH#޴RгV{CͧEԸƕʐBMN+tbA㐺M$ϛD/ؔmԧGS\K\'q7>Eeq)OA\ӶtҜDp[*U	5	7Je+˴߯<ʥ"EFcEEWL#i@P`f 0
٠n̱bf*	N	JWml`;%@OIp"	>#g%XIy	vI	(%|I/K	.2	*$ߐ|K%WHpHp?:	~$%^$F	~"M,	nV	~*A{%M!5e?
eUSwM9t-+r<|𷑉YڇӘb<<mfEln2oz4?ڌ/4&dI{-CNesI

gTUG?i)hjcPZ([7
o=>!إ5k !/E!*KҹML9#{('Oncol!|r,ΕO>$uϩp_FI+r,>YgȈ|QˍISS>Myգnw|x9޴SrMC!5YHI8WN O]_PI7To3	3`,YdeX}܍INlV/tuf21G!ɹq«!ㄏwBvZYcc[>K\n?9qΉ&?Gв8{.L\8V(a 1(Vv*@C#P@'*p?3T)C+g$8X	;AeP@<\D=$1T!ɰI<$V)p=U8YpH4Tf98S2'8f+
khZ1؄sbǹ|"Pn<EHx><r<S +p66(Feԧ><{~Mh-ch1q\˰\1O~< C|dx?-SxOc>
o="aPe8z.e*~Gv
dx3l`8./0|6~OwJn-2G*ǋeC2iF/h«e,/h CZ!KpVvlcH0lc93\C~cقb2.2e,ndΰO2$Q2f>Byo9>4cQH/ObzZAGj1LH.
$=mWQ6~5>4Xe0Nh0
O4>9_k?DC%h<0%OXxak73K߬}f.Ջ+h\R[uIThBP@ f=5CV ~?j(G5{M&`%)0S;v \G Թmu%Cd;
{i} 'dC	%0meT,ExV*p)`v)wښkI-5ƺM	!x=?Zfe ϴ'۝D) ڥnMl"<-,+&R}M՝v	}xB^^n(+}0Ymud:hF`Q@ݮYW P׌wN
rMgӚfu^K-wu owDP:;-e_N__3&A|7=PQF;H,CbWT$zU78-x;=sMv8ڿdM;Q~I;0"@oSWâ}[ѵP8LUKy RJ*T	]el)C ̰ҳbnw97ZyCb?l{r^ΰW9%_'N{jܖER{uԧm!܅'釾Ξ4e-4blU >үK)D%( H>0IgLb=-8Ywe>_?IsQ(<G+I8OJ=h_U 5t{p?o5:w~O/`QpIhWHo+ztHCUT^,a5uH3{30٭-5;lb7؈fL-&? Ns;rly5#0D4ݢy&d;3HA:hz.M_-<0Yl~7izx6˷
E]ΟEYUYfRI6Qmu\s.ߊrk:ssWW%w-nG3x!Ԙ}i$+;ZHRY'^F5pVN!(f3OlU4!xv𐥎
2kBk;_[\K
֥N^O$
Pn( fM_RMBkUN׉ˊMޞABY+9az:`asX#&9l5Wl7|xv\.7O?!+jn,|o6i^"xY")ovuNY{e';el1rxidY
c\azŝ5SOQ+sҎ2x*8/<ߜjk7":oog}VCt^f~,:ԥ@8-|wY)/	"
5հWQEϊYj}vZy97_}2=7<; R<q|tɇGG`I9ٔq;."8jinC-Q4"lnpN<	rU[:,)Va-BBBsA|fQSwp7{C#g2ius)zy|[ؗغi/8Np 9v7s^ƩB,*""rRblt9J@NA-#_6pvҥBI}L~%4S#0cSyFT>zTt/sx%%d
x_iE-~7	c*le:N >OL۴`V#VupZh@.3P`젰;䂶]2WWU	C4%1͗E(\OG\0ECnp)'b9QMKR*_g^3,zE
oDdߊ2a1Q[JZҁ2`PKkQ  1  PK
      A             0   org/bouncycastle/jcajce/provider/keystore/bcfks/PK    A             H   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$1.classRkAR=\UZU&p
)-JS+
ɦr	?8*B[fffw 	Z}O=5NsX&=TJ24{YN&-#>#/r&TaSPASҸʥU߱KT_Y~6<Ʀ9N(>ʳPp>]
wh>ؑ2|ɴs>>*>}wc.]:[2>9`n-^X
På % > U82(ԕ
VpVـWI{dG@ њTco儸
[
0,l㒓,w!16{Ǹ}O(4mex:SlJ_RIs[࣋psQ
/PK<k   t  PK    A             J   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$Def.classUmsU~.I4l "PK*Dڤ@B
UtMlw37~ʌQnܒ6'{ys9\9k[]f x]д ֒td(W?meX~hoۖJi9	w(DK3=[5IYe9舐lhEĔMYmeteO#-_bN8,Bϧخog7V~d+0Yi5|;<0(RBϩ3{Z_ಚۑfī4%rgxKr$y"ӢMj3{~u`AHc2w-i}o߮Jx-ޱemeZ娊J(3%-p0v
'\UK>N]4k0}
S5\pQ[cu데A+l\l;7qDuLfvk/n%(\.VDŭ=#O{g+:{[8m)VCVRh*_VElH*ioBΜ\a| 㝭wlx:F tpFy\19t Cgb8yq7u-`p[ >>1tdOYs;_2|P`5=o3,1,3J+2<b(g1/EJTtDeו~1hT~,ڲ):Ap_j}0
/q*ҤhMEJg|_E3cmOԣ<[|ė"H43eSUoZ>{#a:>UP&CȕobM2u'Ht*I$=n(McEPNJ5=r(i )o6R%JI[D>I=,˧M
0˫jަbtUTzC?*ZQaEHuIP[PK\n  
  PK    A             P   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$DefCompat.classMK1ߴۮMLV~
Bi:-i%gy*Xl	y
%ճ'
a$R%XGS5 'i}9^nnVƊ_=
s,,CĪ
DlU82Q;⺉$-)Z)I{{(xXPdv~:m6bTpC2ʦ|epǪ z&6}C
J3I7ag-tϽNQtpt>ߛawLg؞ae:p껻z	PK-&  <  PK    A             P   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$DefShared.classUmSW~.by/`M!	m
5bMUu\e70)3L@svKT2<<瞳gϿ,,ПB|*0xvt˶+۬ɚD{n`n-EU@(0 /޵-3*s,+H`؞M3ѲPkS74zؔLYjf/vdǚ.rq&^O=4l(ln*oW`:֤U 8<vx_#7ul[Έ^nUG~[Bgחw }sǑ\扑hoR+痍ZYiY%%awlXkƊuwxTEjDjU+/>`HcWOcPv떹nҩJ_ÄI
S5|aFì9
4|Sfshj=(4<Zέzp;{-rDs+4
ͦ3#oͭӐ΅bٍ6bKǳ\{(+ɵRt+5mzH*igBN0hgwΟ"1qĢ\ҡ30e$p!\q_a|#,5I|wדX
r7~`p2
Caa.=u$N JtF!;f-䍫2x?]'.bf^U~k;]&Ue/5PhIs|I}b&sJ&7A/v31I
IuxQ1}aI&U%0hEhbq*.61FQYkaiTU)wW}x?LKwf#GUoCGԡt3ݑ+xxJJt6(HP)TTJ'*"U㡴s%L".u.48/PK**  :  PK    A             V   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$DefSharedCompat.classJ@ϴic/	"Յ"ڊ؟Nnk4	I!`I"\8sp_^c!_;~d(^zC50	d*E}C)x#Jc*=ż.NR'{s"Ὲ[;OBǑ#\gAH|ݒ%EZG"i/PLI&)_
nX2Yͤbº26l1K/{4TqL1P20SnE'3)fv)6]K&PKn+  H  PK    A             [   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$ExtKeyStoreException.classQN1=0*(.\hҍ;1LFٗRdDceD\>9}x}pƉ9%(r6ӂ
JlΨ|Ii_I-g
0<LH1gc.T%s9ND":ME?6

U!S=Fc(j(R9*e6AmL]ƱP݈i-4αW"Yz,UYh:o=d<fX,O>u]ePK2}.    PK    A             X   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$SharedKeyStoreSpi.classV[WW&'rQuC*XMk@Ez&00ę$>ǾjתɇvI%]Z콿}9쳓?7 '}O#vBGKhn$y:&VV]c;D<7Rt$:k&"޾		U	3e<2	LOXn̒T1tX:gc!c\5\Fjñ
7IuOe}3qݴP`ſ軒Жd#N:7[ztq9KzK'Ij2m[%JN61&3LgZ#h^J1[')%1S$:8/ꚥ)mȲXJzTfټo`iwM;˘VOYme%|!{Q̤rS[ODզƝDƘR:V]f8t2MKԽ1=-alcY<	펛fmd
t>
O0OcJR2hSg+Dʘn6-iI.,t<zڌqmbFHaiSpo"g;;ldVZ4^S	r+u/+*1?	-?wr$Diq~hz+[5B*BmQ/㰌#28&$-2"22Ze8.]	OxFId<+93ZaKΎn~ӱ.j.Sڝ-&y
b)ͣ[Q?rh˦DRo)hp!l}dr&fV0.Vl?<>[QQp
vᢂhRЈ=Vp خ`/&¤NAjpI(.+hN)8
vbZSxQxIiZqbqat#)%F0F1 v70Ɛ'&H*`
bWcs\$S=>ir(C6
Ը{e׍yzb@c`#DD@R 	ZIFU q7DÑ
ޏԨ`1ZWq_xV.eA2^[ҽI<W	^#Cl@ƸLd<E}D$( 5NU{$d/}UuG_)@ޏASLdc$ںo#BT(}Dlo>,;7wY ?3|6VM*L*p" iM𙶻)oqsaⷡ/>?qx}dG!(c{}Ե*>]tfj!&nԄ5*޻M6U?@5E+"FԛVѼ"/PKP    PK    A             J   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$Std.classUksV=;1
J)GҚR9@h]h!-"_EroC3L@TG|Sgxr{{O 
rd:^X
צ5"Xl-IWrPBc[U0JC:@Z{(޶K:/ˍɆF\DLLش[vJO8+ίs"ZMZFys[yӑ!fEJ9c==kZ\Qs2|Zuoy}Xۮ2OdI}?~ӳlص][w20ȃض_i+Q#P!*!pRfƊf[k|$ݺ4Lh0aZ;f4jᒆw..l'՛a%3W2\87qTu-fj/n'Ӝ(B.VDuz= .t 
x<Qsۦ(ﯤISK*
:qGU,;¨xgw2OT8:Ʊ#!u#Q`/A7YqKYq
G:.cDG>e9E_2c>2
PbXexC9y|&6*w
.eϓZ7h\^},ڶ/E\& Ah5Cς-|F}iR|f?Y2_ױM3cm.$qFd_'H<$!LvTiiO>HCcnOT:P'r[X{LcH"iEaE;-JޘtSyRLnO$J'@[-TIGRGҶ|)OS;t?$A򪚷.};*
*V{~.!CڱR]?'	۔
ރPKY	_  
  PK    A             P   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$StdCompat.classJ@ikӤzp6"]N'Ӓ6&a2)\, >8)"uaQsy{yp=b|凾&4g
r62t$DERm-27sc_CWyN3EYz,V~8O&38kq XHw@#J
gBy2_/@gƌ&WT{(䲜ˊ
V-XXPE͂Aɉ<A`7PH'`I"k8}3:OlMQNQl<R;Z-]PKY8  r  PK    A             P   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$StdShared.classUmSW~.by/`u6
5Zۺl.ⲛlv9K^ȥa*{ysٳw POg
!>ivpK`DeەˎmdM`"Z=70m"td ?lwe~`ږHY9QJ$0l]
}CR֙hY)=rQ`lJFM,5;ǁcM_hA8/ϧĞy`g~d+0ZkҪvphRQ;RZ_:-|gX*N٣ee-p3K;H.Hc7yƎWwCˬ4,sϒF;6v5cźQ<XDX1}Y]pѠ
,$VlXɯ[%I*}
&5Li
4OқyqЄ&k9qTuLlv˹/Z(4D5O:g#-~|rm($JQxTY#u↪	:°6z;?ERc:ѧ,2:Ƒ1ECga8+%H*3CR|C:񍎏ct$-]Ob7g1dÏVkw2c(03l$wW7<諣\WyǬ_qթ;z_Դ7Oq7	\	n+Zн
w6M"𢡄O?@.^nPȤA_D}b&sJ&7A/v31I
IuWxQ1}aI&U%0hEhbq*.61FQYkaiTU)wW}p?LKwf#GU7ݡ#ǊP:ȕm`M<j
%:JOJt$~QTJ'*"U㡴ZS%H]wI3\58/PK  5  PK    A             V   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$StdSharedCompat.classOK@߶ic?xD{6  I<,PPEq,y{ypb|ơ`LTQ,3)HJa@)&Q{ayS^6e~!-}BQ%O0[L@&rg2Cޭn(JI9(:(9XrPf8it~dɳ ITh2zP e9.pPj8&EBk/*UP{4۝`c
;'X`yNmYumۨ~ PK/(  C  PK    A             F   org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi.class\|3;e\.XE6IeKmsNٲ$ߝ\H(!BzH(&!@IH">` IB 7(6ޛٻ۽CM{잿+up0MU:֡Mt8`֢>_w]Ep>QOw7xq]/g/S-zSxOuD$2'&?0-u"L5 Hd/.
½A_	dqeɈ}8Rp!;oD>̄RUeX4V46::=]\X|XٶyTW-Y|m,ny4W{y{ql"_w8^*/ǋ2V%42W<6`o` 6>34v$ecۃy1C2v_}98oi"`/,j nf/M{:}PIn$X_ w'pFc#Y;bAM7'4TPs)hذW&S?$/0kW+آ_W	p;<73!2.O`/
ttĀV&qgB:p>&bG+6Kg|բq(v#~6ha)WbN\iḨq܆!,YEG_ږzOUk-PEmAWS뭭fy0Y^߂m[4˗dg̬(uvZ[eD]4#jrb8dj,ɎTmԻk!_{^mjDsZk7ԷllC
u)zjLhɒP;Sؼ]

vVC-pnmC3em5oo-[k=5{m
&˽VYЖE񌍳꭭	Ңifg-2#K.VUN<oP-18QuiE*gkK}s
ZaeKV-]"F'1gO_~:Z*<q4!';=
}=}pYVbI9"tǐgB犏6@#~H!M{P&t__{߇eF}(m<YQ=jG{DYkHs1.:ߢ0(J6}=!Ul;	`FmTECs9YgY:_;>N }8\E1
,d2I/D4~Z?QZ>Ǭ˛WFJ^pnXF6 /c?
wCE[
	]oEK{;LxX=]\8!A21W3QZ5%Emmcw*6٤Pǈ*!s@*$4\k$̋%5>-13R&5r^~GLL%8
sxRmX8cxYx:Cw{AATM ZZAr2ub9gGsuĢL(أFK
BN8`
DQ\.Bv{iH,FӍk@P86]޶seb;%oAZɢȌt逈3k-m̲tTyoF=q9XdY[=C8gg|+)׏\͝zNrnͲ_r(\.ȄE,1]I2'S0C'V5d]~94:6 Α	K{F(&!sqWN**̶-F,ۏ^E#Iiw2,))w8	oh-m,dr2^_wXG"]Z>ihO-˳Ȧܰ>D)@
(u4J4}}&T}buGyCt݆¥fWc֋)8TLgaUL~<4GF&
r۾RnډӎRmif+6ƚg`!Zz\(o-24Y
ZX,c<{ahDTPWN.I9H^*
doʩX;ZȲ>$D[Gȏj-?J!	>H<]ӨC@/H%f= t)ٽ"V
}m* Z]6z'd-NW(tU ^ba:7^Z`W?yID0UqYq&G{$h!ȍŕĢ@wl9'WTY9+eNY8-^3oP֐iioT&'Ue2nPfʝH~S}l,L"l	t-aqݿxU\LSB3Zdcsѵ}cf3ּ"\4FKHc_$m86v[%-&E¦t1jIB,a4tj<r@wx,Ύl`/חTx ?^VS{YBВ(BcԍHDcRSGD5#~<[yl]0"&mbobDrW2%EIޮ#|'=LznO/]HP$鉼bQyH
;M\o|
tݚ۴:jQ8aFTtIAx,aIz:[äQ`A]x( 5UMmK[.0}t6qm,T$&{E.)*W4!/ib$m#r'6XA¢-JO5f&4{+꽭rJ;W`Sm;HAFQSiΕ J6&UEYI+ڤI~q,'^ç]c*.[bɇ2j	5owTF=yf\ZK=)j
:]P8TAUH~21FQKґwE۵*%Yr{G`bl
$),
)lˇdeD%QdY[D;iuc49*{RXmB)ڎ5T]O(hԧnXmè[S)ZVl=vw_!^u
'b~KlDK0Q.;	$-\2I\dEN֛ґQg:u Z΃vݦxY_ƠfRd`=I̼}Az1o̲X8UFW&%{oƞ 7oٛ1f>,Ō띘Ke3xkokymyZ#It-
}q9:>qCN
\%z)
|q-`|[~mbQCF8?BbJ%'ܛIjXB3dEK4s:zfH;p)=6shOQGm?'^KG	_q#^HܢUEta!#zz"Q0(t[!RE88$G+sL3%wqGW hB&Tt0]Y:asu|PE:XJu(ӡ\%:TTe:,a+uXZPz6QKuؤC:xtѡV:6EzMuha:xuhatB:t_ApTktWt֠F5l@g3Ԡ[ChЫA&iPc56EcS54M,XhlilhliXc5VRi\cK4V[[[[[J]Tc4Vjy4VZilƚ5Cc-jUc;5Kc5v4vh
]4WcWķ}kXXk,;nXz5?Bk_cG4vTc4v\ch-{Ʈu^c7hmQcoMYc-{nػ4nGc4~}@cm>5v
^<gnHs׍u
;R,i]tbIYR]N!4R,IC:KG,E@MjL=F6fBW"cu/j>N2)M&!v,l 4$![9^1*QZcPOQr	8nX!Ք
)sbixr)^F6,6E6lrX\X\J3@n\RJS'*ZNjFq}W-˕BoM[ l׳btRN)OQNN1bItUE	5/g&%8=i6V0#uJjl}Q/"$o»>khfs
k{mEbE˙sboƤaBQ)2!Qc}8lVn&BmÊs
cq\-. @WJ8cHH7t א`;i4FvHt~^Y?|C-R6k\nҶFNsmeiD~DQN/;AbK1Z#Y/==wȴ.8כ/QjzEpJp/fV)]%)<M˿0OYJeQ*32'n(et3QlЄI.7cF$?.cq-f$u0Rue>;ZGSisSOjv8lM*PRS_:Z'v>|ؿ[^
, S4[2عvc]-oR1O~ג}>N>딎:Z~'|O@wU븂ZȮCQ|tߋ	0N+2HFϤϺ,bڊՠnl~`/>\LBR3Ѧ>lͺd-h?FlsDBWN訧
FNp}Zeb=Ȑ3}f#}=ci5M&*	LN%}I/p#54aeJD)G==Ƹo Hj/{yriZpF}o'8&qiV|:OD:}EJ7ݚțqr}W^4%Ki"YJ{OB춉1zvAp	р.'Cp%7V 
N0$!x/_	FwLO?%xU^'8Gp
'PTAF8	\%~o1/j{	>e@;{ >v?8
x,~NKpegˀc #dpN|`Y|?C`#$dlel#!׀wABp&QB>	

Sx
n|i`[	6c1)	Em ?J{)u!~?8Ya	~?i8> 2X6?1X؀aY^$%
Y>H=b@?f-/q6WS|4M|`&!x܀	͟4pg)ßfP_ԗ
x5ր#'W
s|`&sTM~˟7[ۀ;]7G>`
)'?%qi9_2K>eM<c;o
ɀ/1zW6w>aTO"J$Qus	ޠ< ì
WʪSHdh(NJ8lAN((((+(7*(ޟQ&]!d)N^ls&e>"R%kl$`AA*		*	l CPC/S	Vue:'R,#X+	V9y@Y@ɻf'?pKJ`n'?L%pL#N0`&,Es#J@HD2ה.+'v~Tnxd*s<G^~J3WBpNO".>N'V3(5jgRmr9JA\"GSʯ	~⋨lrˉ
eS.دTMQ\|U=.?xA_t%C.Q *rMT[EW)pq<I/<5TV!Ze?	#)~wE9ff崋o!.[.^OԶ+_ <ߪ\E0H8.M9HYwנ "x.ި|k|UsJ	#xś	!x.vPʶ(O<M߫"|A.ƷS*.]t1E"λn2:\M_\{>J|ůRuJůV\I>r+hWu1w*>Da;DP9.~@F|!.DK}ԬO'!#^'8GTL  Ń](k
qkoS^䓕NwfrrS&/S~ɗ*7geA 	~@CՕɗ+L~Py _H_"TR=~GA7N/g$n W/PߩJ~d(~f
6Z{"N˯=r~.a> ay>]S@i9
|^i>/7{3g6ȧ # p)M^3כOt \slr:6v\m(=Acu`@㹘ɿg_hdX-KچO䶒!uI /p1A]SYWQ?5VGλ!Wf<9"(Jխ:4*nGD)%wFDv᷆O԰}[<qQáRw#3QU:EGniǥ
v;+>mܮW"jG)3j׆ψV㭵F僕jI>:~bl_t?ǁe3FxetXǣ㰍'%׳A]<l%[OM2םu|i09ck404^
vZQ,؁<3Pvg(
7e>
6Qh,;;ˬPferϛpU%Ix	ҡ(p;%n0cc6pwn Kv1r~`j|fubNWk0\3G{%~'i[ӎv}8,F5(iQBDTj9Ʌ8KAAa ԒԜN;84paQ:Siꐵa!bd҉/Ө>lTa3M#m4i;TxJlIHJQJTK8| eɇN7kk[;Y%nv3Da#eOY'X[}GaLirgܢa<ng,h<♕.Ո,~v'ݮaJm,QoD-mnonCjwvD?ª9aa;Ag9ZYMV@,,,JܙnuرK2됢ԍjvV?+ ϮD
w4
HM`K5ևegp֞`?"j.س,XF!
*3ݙ쉈&Yv~w
[ݙ^˘u
ȝDsLd{\\}D݇cB@lgd3U|=g{Y|ٴ~_
ɡ2׾Ź-ᵱɣ}~2k [lcjs\r\,{[+6+~ܲ|<{+;bG6M
v2C=, ހR\B+ZaHrEƨ\f0#&?<,ŹahK/\lwQ1PƧ(z5pP3I2̡\%G,'T4kx!lgM
ʔQԿ_suIvAFlIMjP-#YBuyD&GxM[iz.KD3^i'hzxh>XG+-TE#xJJ9p K.`_BlQc)unrTvs8EKŹhbpn8V
T*Xi3z
~x@s^<~ɆE40w(}3WpUy̭fTM0u@\ "dyZtb.Bu><IO
"[i|<߯r[IqF?q ԦA!:d\
6( \JpKD1q'<u}x(5+ڈi#M
#<VR:q8u2\{ۿ,6G<M+I+Ϙpl,
l<Jd`dk u3=ۜ䞭&<)*Sʥz7dGCMWV<j|e~X_ZIf]]+?3NL6/!\DI 
cCxڱ܀5BX)n5aDLs)7PvʱlѬgϾXRXA~JN٘@tµ@m-s=b26.atz_\F
OLrTYjmH]p[ԏN9F
gDF9P|(_3@r,%" 姧,8ῴ/'zEEEE^^`/1R+Qq\*ng| /!/P޿{#+qVM՞<4uFc)Gv[i|1]	H.'0auhܛ:l}_1͡2#Db51'AqD+UDѥ*1Aeᩜ'̮c꺸=OɜGbSﯤ+x렠áw_QLrb29}iǖMFIy3[c7rj3 ZZ,w9p	/4	(5xܖ]bحՀjVLidjlxᜄ`Q\<|TY_V)}EOSOMTqx88,kYW0(96|N1u%/,`T)R+)%2X4c`qRݎ,++#{LmF(ZrVt[za<N'P<,[FFdv:1\nSZu¥tKH٭
ϣ&X,:9[nmCC=3>Vc"b)QwΫUAA!ۉ^,Hl
Pwf5R|Q#6䒝vdQ/
3E}Q>0h@Lf3qc^ZTrjkR4ވ 0p$TSx2UtEB,^O$B4
]f`q6?U#K2e	-kYJ^Î-0/J'N"L$)A}y:2H%?$kr-]aK$cRjAfE/7ӑ7=ZG9؀5{g9V-@8&a*=N;VSK2NZVVJ[F6>Kpm`N탓-.q	F4\+]FdesX(dJ#[JerilFj"{3mN<.{۞
{
U59y|x.GAϪ֔]BI	o^57t֠XȆ4	yAG3(/(awEM	R^"4%F	cV(</C-?ZGܓq,fό0:2QݦR<XDyرhD9֥Б:nuQJuK
#CTN\8<Izg6fcw|~O20ꮲjQ8}Ái0`)*!>"|^,J^4 kQWK5Rz/>)۽Jx(5>J_%<,藾*bƻRZ/TG:	uM&J'0
% RQG#IJ51JGFƶa6zS꣤vo(񻡉ORXӤIND}Dx5T"KzYT<IN
:q֣3w).ŋ%:0Bfۅ)'HA&syMS|Ln^ niG5t[s(~رh z+%C&kfr vs%ͷMi9n)(~҅zerwG;;/T"ܚHHD nH%N|+ܝ&afTDh(Q)a6C.J`%.Cgk`'0vq9|~v:\u.Av
%Q\
]l64U(mDP6oQO0E/*8Ҡ6Cs_:5kԘrB$ߢ8M
~ U^XߗhԟKb~v&D-.[x[CcM`50 KMS)6{qIpSwWNyLz+JJVv
|Q2b&<ߋuЬ79O˹R sIY`G%0FMlXr0Ҍ^5_e^8=ͯǐlHAZ7qedCd i$dM'+6=yTjN$V8,vv-cjԼlSyHQMv+yQtNFa@=vL-
6q+2J3*)83xP#B	MdJ@x}X5E{ O}֋:"<rr/9g|Jv)-&
D l8㌶+[ۇ,ݹכ-aR1E(/`ΰEsIFxv\!o-Qj15='E1?yލ!ukɐFjU=O{!u%Ґ:ߒŐ퐺ВN˒EVliH]l^{/쯆쯇ԙo=d2ZR'[R+,YT+-,-٧eCrK!uE4+FsKvm%[dϢLf(͏U.I,"IHԘP97B.w'?8͛>w/;lg?>yy-hs>
˯|>PKŃ/  ]  PK
      A             1   org/bouncycastle/jcajce/provider/keystore/pkcs12/PK    A             J   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$1.classM
0D'Zm	.BO?$%^ͅPb#80o~<`k1
UK^ڔ<w%G)l%*FkL#mkdQҘ}mUOccʰ>*j[LMRdVXK6`L;z9K0PKJ*      PK    A             Y   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$BCPKCS12KeyStore.classR]KA=ךuZmUkƤm-d3{ef"KB@t6ss8ý~5ͭ2fa'SR6	He_
͏kIcJ<4?@i)*1)~Imm2E]r+TR;,n\2OLx-r#Ӌ>k'ҥSbXC~άw%>}?`XT7;p0l=ގZU`}^գftqMi/WJknx3F
-`w1.fa,bz
HkXgYbvtq՞x3,b>,v_7]=kdPKuD  ^  PK    A             ]   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$BCPKCS12KeyStore3DES.classQ]KA=nƶV[!X~hR
ɶ/TX$[.3!}	4U
>$}ܹs8s??Mna飌p+K@x
Oom?IfH_%)PESʐ6Lp"T9lϲ~*_}ݛ}/do`dka_ȄRZ"h	jPbJ{t.͵ߨJ)Fd
]zuAA#Kr24wLvm5fȧU&m!l.R-1iϊ(bՅu%Xs\J8&E֤e;77Uc#+#ý=#a=E_xPK]  @  PK    A             _   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$BCPKCS12KeyStoreAES256.classQJ1=uko[T.UQaElԲ[6KGYb'3Ü' '\^ ޕ{}ҿdB3;n3[FЫgJe*H@*MO
UIp]E"8+qA+Qx'}[QS:L䖛ҙ#QWYʻ_c}-U-4糊kyC8劈,tY`Y豐$X?}9$}Yn%vǨI]-۪ՆvrW.tbA"cJp#6zч1%HЄ)2SJ(,1s;px밌,6_l`YD
L603h1rf|PK72~  L  PK    A             b   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$BCPKCS12KeyStoreAES256GCM.classQiK1}Z}+bPEް"lԲ[6?/?JVzB1a̛eL4Ν@
v3-wOKatE/R˜)] I4=yǇyuRD ,-FEDEY02knZӣ]KvEً^QLlzfXuh,iY>i\Huw8b["lłeB`qfץ	rkJ
JR$uֈNǟ[W:d֓;wbh +lk
6o}iSJ(L1s8nEXqZ#N{c
F޹m:FPKR  R  PK    A             O   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$CertId.classSKo16M-
6<
%IB(Q)lLɲ)^"3?S.H*(x
.-^gv<x痯 nb X.i N4Y
$u;l\6R<~=E	P[b\_/]!)ǃ^mv(8eO}(l(=_ao(:DywxlW܎l ƁJ[VehZu
ԏO	t#\#z졔|LuId&N76qYCbnpU깓Nyq"\<ጤƬ9j{CUQYLpFa#f#$.=]XX5m>B<BPa%%k)|)o{+=	:+$L+7ZC>`Pg(KBn#IEBHS!n!d#P",\Eܝ1MߑyxtRLCJ!8	d3I--j	_PK%X;    PK    A             Z   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$DefPKCS12KeyStore.classRN1=ʒeV.P>@dRT"ڪxBwݕ ?H~TUo%c7}l2Ln1LP2}śY;)My~-
zF_-Sjե"m#)-)Zx16ԣ)WzD1u$or9U	"*6'}^U{$őCJry+#:;*OStCJqaÔ'=x'}._*Cc{4~PIKnH>j?C8;gf0TX
X(bK>fS2TŮ芠DC[\Z1=|vyw.^coak]wq}wkBPK  e  PK    A             ^   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$DefPKCS12KeyStore3DES.classQ]K1=kq
>qշ:\+$U3C/
̲k>,&r˟ v0~0e2lF"R&)A~vkuQbխ"m{(u)xG46Ԗ)mJl)/
b^DfUr_o_:"mY4b{$őC3KY.+$ڹqzZe19W7~aÐa#<͓_	OKP]6|R
lwOE(b ,
(`ڇ>1 a?^&	 Ɛ
5́6~vMx.71~§gםja?;/}9\@/PKBժ  G  PK    A             `   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$DefPKCS12KeyStoreAES256.classQmKA~6ZϜ6W~0VXl)ɵм`+~uo"]%P??t/Dm>³3<3a(0|R29c89'q/}):*Hijo'mRdTKQ(m)ڒx7UH	?6qb#gҶ
?(hUG_gj
Vc)PtN(|7ȐRR%}N8p:2l5=JW?2Cmah^f[Ie|Dt9]D&9In<LKq
Yx9<sSXfcբ#&uxfof/Zxq+:7]zV+dPKQ|f  N  PK    A             c   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$DefPKCS12KeyStoreAES256GCM.classQmKA~6QϜ{}քV
B<KccJEֽ1lF/
(q/k[݅ggyfk`Ȯ&vT;i҅_~O+N$F'6mBG)mx|9<i4"N%a)ES$
)-i'6Ғ5\BJ ڣӻ6k]ڼQQͿPv})%}v&8&^m9~jv?pAS	Ivez|Ht)j s,f=Ka.\,b
.b8$W"JК4^³0{3|j<k9%n<>ܢk_Jz
PK4K[  T  PK    A             a   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$DefaultSecretKeyProvider.classU]sD=Ce
	J	PR˲iJK
)I#kG"y$9Cx~tԇ3Lw@\ٙ	Ã{OLa;AD15UOLQ]7mӿ! Tެi&@n0V^,kIO$r\ Q4g&`x\Qf]٨Ss#Vi$ͽ6.
}YsnHR!yz@FMЭuR}b'j}h@u|RJeg:OzֽeMŞpArܖRw:q`o1ElUV#Jپ4/6܃]G)5	R5ɶJE[?{J{𔵥'%?%{Ig[Tzz2w}`
ľ`<qYPjVs܊ڦ{_"kטF_;NpG=f"hc9
K[,1*bL;".xW{"qI".PĸD|L*׼5'`zvwD%Y<M&hwM5ǯL"v'NY?4ѽ\0AH}Τ.dqaÛ9\0-oc@>CQFd\)1Lf88,Ɛ(sír\nKV$$(%	
<RX*`4^xcm3dȟCttܚ=]8h4@5GLFa0`L'Hnj	қ#!jq#M8u_z\@w|'!8~֯@а&bޗRc+ ?>B} 0<w~"Bj'(nR,;+PKy    PK    A             ]   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$IgnoresCaseHashtable.classT[OQl)@)
^mPK5I7n) b41>Io6g[`m3L /,!V5L&5
Ǧ
wꦪT<ZrOSٱt0^SG]q:ߢDwM
CT۩qU+u׸8ǴȲRY[ea-u{d<˰ri4ڼc#]:Z~҉)_A-an
l,/%rJ$$tK Kpaq!Hvx
nn$:\j=/.(nv'8qGʶ~"{z>Kyr,d1,O@L]28*#1qQF?ƻeaD#I0%`ZrWhmb{azT̽eGi7S(dKZؕݤ`IO3é]̤>"lfv >t(@r1~L7ydM̭tB˦fM_ a;FGv]mbhIō&oY[+du@M-O!E?}P~OAO2Fn);R$OE#GIC"OgvoHϵ#Hv;Kni#t*X+8:PKg    PK    A             H   org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi.class|	`|߷e%|!'f1	$ 0,a%Mw7jm=l+ԪjzdCSk}ö{C[|o̼y7y",nT}?щG'WjiNgQB(ww|ވ/ܔL
y{總nw7Fܻ|@O%JbFiOVi/VcTqLRt)4Yl
M۰$vSZ.+ r+a,JcFJr7njY԰VaP(r. fEp8M
mMЦe7^#
=?V9T_@
;pܲQ@
')W7wܰeS67ki2M7QRs|a{??S֖-76ljYK׶y:J`(
L!L8T`_gǟ^Umvmh1%s6\^?(c6@0P!S
jY{aH0sz;` %+Gv׸0>o8?rÀ;P_uZΦ6o ɁioXig{6࿣a]*|i! C8[!0a5?5APkk[p+M۾F>o]w5.duPwݮ``7yÁ&4NK`wpN_8<~޼xf>foWuu5z%y<oؽbZVes
sxnw@wݾ%/@;GP<
	e^ްRi&KݻaA恟ؖ]Fo7lpL{L9;l煞K`#@d5ۃ6\;	cdQ:.YU=8q4lzxwPˬ$FȪu#l@2A`_d7.t
pؐj=kÂ\nan#}X&0<Hb.	_J|QNI,]#f$[YI`%fbLƺ&\7JJuPH=#V.WHf[	*@h]͕
8ۓb5+եj䋑VC
$.)v
hlTEVL	˂Ub$T[T(^}R
uVc !_g;m5b<L(T(䅺|RXABMl<a/%oDX1t;o;N3P
@f8I~bw_.l[q%#ΕR
E,iBrԑ関HNjvaRr	BR&8$Qi֎"f䠛UAY=OI=x``)
F
	%~|%돀Fy{%ZYpZ&;hj&8=ʠnwpYNeE;#%,PNXe{t@F~2qn)-EI<#b6o5 @,9Ǆ"?(xFy{#87v[h1LzCп)\Y9Kt'"Gӎo7c%dnmjlOш.GX
氯+AYolsXñ:]];746"6F i/\?&/kZcyn1/!lӭ%l+8lQ=9ʂz|;ьN0챝4wKqP>r7L?l]?ʷ#W`ë!-)%V.aV{JAa=@D#ֆr$,Z_X~]I;vr[C(=T]bW7_0be}Ҍ$w@;+-=@wI%	]M=
~iHSm`soP|qN0G*]J{5{Pd&MmӞPpwzF_ȞD~ZcZd^2NQ0-c88RYV3ј
քqUGIe6Lpjf91Nkwq1ȬL0}\C`BZMLק6k5ɺ|Nr TPu.%u#'䜋ʺT̘5=޵'
4E6}InlB?禎Ji9 :DO[EZox"rK+ÉX
	+XgRaH*D
dF%ażTJ.\紤zɩ}΄d8-NZKVBC0"u@V a{ufo8f
\	vz{ZЦ:

JKN=vD< .eb:j&ED
|%h& AHW:Be,?FfwǕ쌸"DܾS[$ЉIp-hpaP̈́
<NkhXj<Owl;Ғ9Vغ>oGGƀ%sǀeoYqxSHiF!*<1L^?	ئٱ}o	ѐ"r276oLѴh񮲌ل2@j1,Y5JQp`2WK
֭Y߾iK,̭p}SCQu"*.F|bĔ8
Ib"CX`4Vļ,;P 	3q挊WsK.?13e&dk!eFci,6E{5Ǫ>Jj3c .Å%5rGEe626
;,Z&6XвˊN7aFLq3`-bdEq-R#=YQAdۼw}ݠCxۓ.V;".IB^#Cx:A,BA6/oȆm@E%at釓pZ+
G-b$1>}D#άpݚDE"MzκV VxEַlQwcN_]cS@:,t6I%٘
r?l;NZUw"3)id(?`Us;%
p cLmnKM*uAV.ܶi{Kǀ|,5\"p7K	]>vBǔfer?"ޒ{ȨKJZ8NMd!46]齪ӷֺI7q3
:%v{qO?R%j~}$7&Q_E7jՙώtQZxitZI>bΌeGet'Ydċz>
`?2K3Gbo$\,γJU
}O(/gaNivDLFvN*W@uPO )^ʦ\jS{Tp"VC>|5ď4AĘ6W9PbհaD^/pWx`J&7c:VP7oZ4v%GIy`o ?'|Qab{}*Y&dmԾnb!eBXW.`:$So)
lcm$C@0
A	:щS'u2U'nLINjuRy:|,R,INdN&Y'7-:U'om:N/ө[t:]3t:Su:GsuZ*ޡ{uzN:'9\ɯ85'yN~8y9='%Nɟ83'eN8;'p*'䟜sNNr'sr\d)qprqssé\N
N8紀SqZi55rZ<N9NrŜ.t)8p9]JN8m䴉U6s5崅ӫ8urzN7pz
9mt9VN崃mn:Nt;9S/8䴋S9t~Not/=r4io4it?8=Mӛ9}pz+o6N9ź))ZzCeQ9yj9bc&Ayu'>5yY0EWhM{}:~ǥUYiY*]^17&)	{PgFUa_C@o*2Ȇe&ۄ/'fIR3Ҋ,H<cT͔nˁLYr|]?dȸ]'bySP@Y%Q^A@j3d{ Z78yIm{U
eOIkOGM"VZ&յPTdNI7yŌfJXQǄ3[:n+Eh#pPԍC>J8[Wly廨0,틭p;mTR^+dHUx~2RUҐu$wlh:"
u&d4<IrL3XYYmp,w+)mn%wy.tai}\3kFeKSЎߎ	Ϻ?2٦P;/yd<doHL96Nyz)'dىZ8H%ָcK0/	b\3YLٙlLs2 fB͋4v,Le~Y͘mҚ0$2;~U$;hj`􎡩݂ g{c:vKf5.,dI~Ʋx57p.5.6Ֆ_S\A24[ћ{c.3..3zǲuĵK1L>8i>#go%92\{KdR7!4^U>,Ĳ?oqq*&@4./Ckh:6?sf1zÛEũ29.wwxI$y[q~*Dcj&S8ZZU( uH|
MoӤ7@`&rScT[!-ۍ`$:cqǻ2=xY?37>8vBTKeL$vf+,Ub-vXUh:Jc͸d|G<nRYn|!5wH}-tW@zrj&6iE蛷ǫ/nooA~0<1*wdo/.D0G9bhʮIqzJ^_9:6!ϡdQxN1 ƭ
2Ӡ xn mlA6-@ֲY|nAp
i_G
"&o!6 . ReމNBnFY&Nbo6*vA'd=Š& ح |Sa!8|~~v|GBp>@E$e,45b> vb+Rl$e\e~`Abo }9n7NvA>iЩNxٻm#؄`O#8އ)SA>!vA@?of<>hG|هvA>b/avAN"f(;l} w!" XAH=7ȗ=h" 8ȇpZa6ȝ|}>5؀A+  >D?c0 cy/A>o/ |=nv c_4]	3ȻؠA>` C>ˢv ױa<ƾ'
 { _a'@IΞ5g_1ȵD*!8e;i~ ) c0H{ 7oz|w} d!!Cg?2'ُ1 ~3e?7f+lk1ȕ~le/^2{1'~ tg1;˘+!;Wmߘ"8,. 1v@J]QE(9*NLb ݡ*E9Ba54@03y `T#aMJ99YaʜI,]"(FPA	LLBP`.Jj"`>"X`,Cp9kt9NI_Rބ RV;_e/+'+V
Ult(D|IlB Uq3HS682mlv2dW "t@fN'NGfw x';l
A {)ɊEdVoG=G'+QV!؂NV& 7@&*ۜlvJMAS:T`;G̭!/94e?:tdt㛁ʇfbL>/N6G0f+Ap _bE%VT*7!C^p*V)"j^vZlQ|g"~oN6O#za"8 T+k<((WlrB.B.R܂`l!x?lA[1ɖ*_D;22\eʭE'[||?.W8
>SPNv-'[___dW*W#xG oTBpVVB Fy?NVy])GpZQWq
R#xT\|6T7,7+Nv# mU4"؍NP+t#؇ !DI_@p~~7<  t9NC*;Y'NSt..]!:o x̧d[A=֫4!	v!dA6'SI9NRnpr-sȥ!Ře&+W BAo.L x4],AЁ`{.+?Gk#].۫܅Eĕ̿+S;s9M/5Y~VWgY26q{Mc-gdJ2h	|!*SwETq?$vmmBdyXdY	ծ_4П"" =,"3c_|uBH!IR3,$ 8!yWЛB2Μs|._'[<"V'Z@:ȭz
ʣjza2
R"U)C CDUßh~T(Wynќgќg<D.c.WJX	bOQrֿ OUFՍlOGT[pL] ɮժ		yvuDծcxrFcJVvU/;F?Sk+1uJ:ZQYsLYYUĎk9N 3=0k0[]W꠺ꚨzaekN&a#rv-g~PN_vc޵&@ۛiUǵՔlf;43zuQEզ,փ/;^a[Tq}4H¾Z9cPFy긶^%UqM![aY4`W7ݏz&6D}> :
Rf#ZuO
wq¦N:0g@ODpU?MrjWU#1	* yOQ,&4P5U&&Oe2f5A
ZjN2
m!?}訬TFY[-5'ٶSdTO*(t#hvL28c'?GZ8=&x}D{,_]uqN{bЧaU#gaE8d0VYD+I-W_#[VAUjvb{]a*4v=vqCC>d(ҧ`9|*?$XaZ6̊@|{`;>vt"LǐA!OnA#ČfJ⢟&=(:|&7Z3#Fl9Vb`Hi:akr)3U,14mc`ϾCDe	Z#$Ԡ@'b&TKR vdGϔ|<O^RPst\!)_ s8c_1C%L(ʳ!p!'F&J{ޒfyur-kLTm<ao,8|
ʁd/Y:yR\<~lzoƛ+ 0nJbgA摻X(O0F"P]_A*~aM8uV +O[b}]#DVԪQ>8$f:.P.['J<#-i5V4S#/@p0XghMH-Z 8fԫ+LUq1߁ 圬ޭBAsd2[eҸ#mN;TIEN@zQlP}!
^Rq&A%E¨!-5xaTjb^]LIAXke1H+h7RNۤ
3iHD)ӗ2uĀnZ.?+ ]ݠ$|`hON1TDs״FNALMYT"Z!3
3T=	v`GNj ѐ٨[BPP0ƃˁ8,h88`A.?a:P6rMl3ц8,Irrf
yLՙ2Ú	sO,M6|','XL(3~9.VnH]qmAT6،s0Hxg}?y1%cV|4eq+8&Y~{WUm$q;Vu
1RN\\<ZQ3i§pΤ	{by'pLr+-,5ոtSthIimQO}Vދ"
V~Wb^J3}%xϻN9[	PvS8E0:HNKXw
|b	j
jH.M׆ԗ<[YuBpXNHQh10	JZsЂyRx0(*rE;*FKi6̙dhL0Ҟ7z ܍B m4s"afw	~'<Ee*!p
3wP}/RfF	>'pBa3v@YU&HK;b%gqw`sd.geIgŜ]v,lL2 d	hW$Gl>qaRzq>l).Xw4.Z:2*)Hcl!R^umnAӪyjN\LqȊD9n(ygQD/8rDo&5WWPsbGUT]b\zXߋN:\Ba6mrK"P
;,Cq*sy:f~ O
Q[O~?Z=
+F̂Sϟd@<JZm)ՊjB$gOYh
i'%$uVvbcT"	Oavj$-3Qu65'H2\Oyqz
ŮRYPoFhťfѠz.[OY2Z)ZT%եFT+ݪ%L'*+
hHQp&Uz9Ԛ%C==07@	N'R)|Ƅa6X"T1QY\RZby,.-UjT|U.[XiI&O4}RINԚT	L*<@NlMlaMR8We e/Sy 2y\!C<fhq@#WDPmMp@>-7TT]A'jBǅۻiSHa]OQŖ~Sk1Fw7
"靰N%H~Sfw2I6SN=Ll!r:BvYz\iZ-,<g̉ä6c`o3&ZPU8aR}eǵ-
 "W.riԅNTo
`b0w\BO4Y#C5C$8L_aLT_Ү<"U,L,/jQ Sčn,:%bv"(joϣw!2TEo\?Cڊö92q86fϯ5t/Sꕶ9n%&\D3)x)ŜMR0cütlgEȌ[H8݀Ɨ*kLC/Mir`_ Ev=Gr5Rqh`71^3(Z"5@f|#a5b;Gf:k/ @ʑƖG`NEjgr6`b4#!vN>ֈJQeU?<)/:f
Q+rB0X}٠6ѣQzx*/lt(
Ŕ@/uI7Gə\)fSktJRB*O,Ck&kB8B
P(1Pf"Zq2&%la>1\D䌀7#<a XibFM k}&8KQ6F+%qbOX+A1 +!ma 'k{e9F|`:`S)SImqo:ȥҐKiʥ̱rk-*CV2'fZ|sIIXC=ڸ3pG\xq]ڽ֚"Suz9jB,.t\z}
YlYb/nTm8QL6]w*kzCkcfwL<-G!(JÉqQ5p%so^z򽺪bUz1].{Buۇ܎zHuHQ@#r6%܈%뷽@xA\<FEtz§p7H.x[[aҽ@nDfϢ*1pm\nOsH
PVŕqmUJ:k _NTˏ\Q 5/!3&4PN5D$YgﰜR+SYU}$[`[R{ xJx+uUvWZ)mR3\Z.`[s|LS>:0	+py'>%4/'ҋt}RO3Řӊ*z,Pa4na9=uq+DƿI.rxzʨfHWO<0VP^5͘.#;xE<o	60򍔠6YIy8pU?>U`zyG*
PhTU4:|lقGG{)Z(@#1@x9YE*Wɗu7δ+,Ɂ\ŐVrfKbzD'%FTf:QmJT}iV8B4I3/g%$99aLU1-po-8! ucAa qcjO<r4pL
3Bt_[022\&ٜSEdJ%2gPVow\:,dq-#&*p"A;> <3_HO0'JݺK  'X4
$X[1X,3YUlqGOD
],!xt!b9Brā&B	ʑ53DeKfp̔fI!@9 Y23&.Vxcg\tSFA3FņYt^Y<!ifJ,pHI+AI+AI˷$ؖ%Mԃ$JXRVXV2{<f9n3c!&afXrbJ0|ZU,% I3MUMlV۠d­Y1"Ka#aޭv{ӵs~vς:@:onZNa9Xd@.ݕȑ1ՊD'iH\1HS<3qAU B~1gE͕QdܪWƭm(1Kɷcʒ9 
&Rfa6̒t(ϧ/^# OI|Dq]QP
`i<ꡏf .qjOSp6#ԬbT8aGCxJtubn*h2,	YmPτ3/b7Y*Zӌ/{&EDU-gyн|qgYjN4ͪ9qdH'ՀvAXq+|w:n/9}W}?_WhrsL~ؔ^'_'mg	O@s'j$&5'іแV4GZzgH$2BfXQD
.Cr3Rf%J1B%`ٚ5Lk"Ԅ+tQj"d;Bb{#dg
e#kС>C!LJg ژO+Y-S`"LxDDz=h=I`ӊ7r+8	_J$\HP-;J	CulPcQ-Nh5vZS{KB̪ST]3D<VOg2BL<V07}
ty+
n(CFAm@{Kb;br۠_akr.8htP6[:qH;zHD1]\[mPkT}Г3@|Tda*L̉'*}i3 IFLT3r^i,9Os3-
LQxoŚE<λi vK}ö0ɉOGKZ#ݟM}&N0ɣVOm\|3缅Ę,C!<_#`-Ӗ f=9ˀsP}qH>i8hB>'^k '܋nEV1A-4wT2`Xo[e9_SVb)~gX=Tj|xjPA<zʠzai'K՗|	OtǵE0 Au?;$#أ$`i)ut:~Osd6gKϑy-9Kn!k=h=WL/-X+Wذi[A^;rT-AGbx#Ҿ2T	+*tdRp&/trh#Ύ6j3'uۑCaصVöZ^^m턱^ ]·uؽKPK7    PK
      A             /   org/bouncycastle/jcajce/provider/keystore/util/PK    A             H   org/bouncycastle/jcajce/provider/keystore/util/AdaptingKeyStoreSpi.classVkSf~"H%\zY@Zm(ԕU(J[X͢~_:SN鴟:9,Iϛd_ƏPNz8e	$oJhJpe|jtr292*>mdL;BB03)9	ۊea<tDd+FMYRnB81gK;ľ@]bкs9SVcN(n2~@[K*"hQY	
̈́cͬř7k^UJ7Īky54rqY6е-ka9٤iݴKy-QKu]؜jIsB;R4ݜ495ˑ#[vxg0#mV[>?X_*sxtnQY22uZބ5fda1gܰXUrwWlѯ[KF]ҜEj/m[+ÖQgZ
uAtڎL]sԒ;^scCx'yȪCeaf*xL'g;=ʹ؎A&e#r]F'd<));d씱K2-GFb)?Y̨4 t*tFH{2"T
7YuۃU	ZSxur:?R;9w-GYXѵ8#_p=H\ՙ789WQ2p$lmX_
hPy7<MwgUkƑqP{0a7N*h&uQG}̲`H6+@BAFD1!ɰ
BPl{FA#
bLs
༂V+hÄ&OxiP1AprG02k3\axAcaes"Cad8W(B&髑f3N?zrfSZ6OꇈߪIN"弟Imcs}yEIjT7' [m57Ǔ!E
e
]=q.>W}?{GNبMvw&~
zn]RpS|'m䓣lڻy18ySH[C=~i|TpP>+Qht:b`}|~56g0ߠO4aRͦf5OJF\"^ϒZH޺ס gJXwJP%
+"d7֪!ũl@"ĵ?CVWiXV@I?T\Ar
T4THˤwH-la7C{$[-rDhnH@aC	~PKS,f  
  PK    A             Y   org/bouncycastle/jcajce/provider/keystore/util/JKSKeyStoreSpi$BCJKSTrustedCertEntry.classPMK@}hGC?A+xnֲ1$e)gy(?Jmo"xy3o<fވy2eBjCGF2I4xe8N\O8/3Q0䉈!T3K_dU\K^a8Uhp]D<02ha1r!E][zVv:͒:<ԱC
6]g:*6c:weRiT	lȷ֞ѫab9sl.EE;PKb,    PK    A             V   org/bouncycastle/jcajce/provider/keystore/util/JKSKeyStoreSpi$ErasableByteStream.classQ=O0}WڐR(-U2H Eb.J	Ie;򳐐@ ~	6,9z6n,W.84WKY`J%d,(b/Z0nfR"Uj|xbL%id&|e J%p.6<5ao'Df~^W!ݿ'7U"XjY(BÂma˂㠆:J*(7®&lM'sZD!R#8#i)(ЫCB>:\p0h^)aC9hSna}PKx-    PK    A             C   org/bouncycastle/jcajce/provider/keystore/util/JKSKeyStoreSpi.classX	`U=&&vJKi-$ݶi4 ƪ8ݝ&[l!xK9,GA1 UT>g&{$R{'O|5BgO<<{<HxpoUf
*W}/\xp4e4',)Q<#.-O絵m
eTFųƚSPHMB$KS=j=;Uu-%L\
TuPkz0uM`^K;z:#]ȦK"["de3񁤪2~굧#Ơ]b=j6{y*Qq5ڧ&r\"A'Pi-IdɨCTzxBݕ .V Pdtdh*դ߫fs*ZWvUGN(p8Kg䊩|v)Or-9Ojl=oZcۭ=<bb7i	4T՚-^bi#`SM>97;\vdK=F)1Z(Lɤv-f_Ur>
x8͆qn-CԮ3Bv95j$񔄉fx'HZiE;ޫYs&JgMսbNQBn2DZ,JtJҖxQ3E"9RbJP-q06&Z3"eg0ǩn*T<I1TvڣEOLՖ'bb桬n\npj\&XeOXƹhzDGMVҺS`kb EEJ1R9JdFQjЉ !]$W8Mw
/-f) A݌Kguy٥KDi̪".]iCQ-&;	LsWRCPZSR]\2:UzBkf:ՒUM3D=Q.;Ν=m
d!h)Ke/kk'D_&GUX^yyZ#9RmC6.6Dy]D+7ƈB>V&eZUEV\8`j廝2d=l-Dөk UiœT
O')ᣫ{-

-7gY؎$%<Lq3m\ΚטbjsINHOb,bxJ
)N50lZHM"kTsY.m4*EyD	$*[	=.p^	}.pK$RBWI)^#.:	]b4	%H@ʓR^/!#!+AO:o<RYs:o<t"liJ_FH̫_isse~-賑ŮBG{vyJ#OLYxJ%XĲm[XOj|͕oC:HN㩼*MyD.!ЍF3S䒲چo|fvηR
c
$\3S36ͳ˦66ވĿʆ63Y*cfv^Llmorszbt3ܐEϪ`OFj֧c.];l^2[gi
$p~d4a	ˈ0x#73xdu(vTȸT8a\-S	@Pf<ʸWⰌuюq[i\`%>#\8"*oeP	oge2s2y6|I<)4|EF+bߖQX`MwiC~0~G>1qރ}x/Ϯep+! >O|	2 ns>;Ew~&	ɠ܇g7@aXH><25?!C=?QW?na/??ӏ{i3eᥛu/
W{*F/vg/
E}2_x;I-c<TyF/>VE}
8 
>!Aà~֔4#\HhuI:h6qWXhh|TT>Cp%v7?o|!cv5F\n]
wCr
|UV]y	_B!Mhx
?_v!1WF3
0(Ѫ_hQGDE<40|͏v5U\	zS NERa.9p&	?FF	-,OYcT&cbp5fs՘(v݄Yۈu4\5"j<D:)U04h:# 1IK#+LX']@٨8e40
MGn:H#oWG4!@U-Y6oL>MS5yZ7Qy&Ac4M'6,7pMc^c<AL/Ȟ{.5&x>LAV,=*Ƶ2Jɧ
a7%{Hݭ-:{g5pZMknZbI34\C%IDXAq0Z; ;@ݨ8 {q#iD8&6
4F2p`7l?fnxZGôƦQqVްqnn`uFE="
J!9#qk!g=Ps^>s?2rPfO\Zp,օI~֌አD}zITJ%5;ٚ`Rih3"V_bn\'\Q;*RudT"\x<a>1L!::YƘ)5Fa*1ܯT(Q7:~_Oj64Z(?Q	RdqW"׫/Fi}8H^LD=I3%A#*;%z Q/'6
 c\'M;
^<$pIp6:Oĸei5UhQ*)<PUmuP8[2*MP
8Dhc%8.p@_~ƹqQӑ{jlZsc" /NJ5gU՘Bp'ǰ͓T\9dt#?\C3͊˩Pk$3sJwwvNP!DBcJb1UDa6Ԑ"\WH,@rcd$14gDϣ
%v|	nMK2~? : ]X_PKDz
  )  PK    A             B   org/bouncycastle/jcajce/provider/keystore/util/ParameterUtil.classTYsEƖ5jCN)&EdƫfwkJ_sExqAU8KRt=}_\ŏވ`a4!H0-
n0lJVm
~q/MXYZXxtJgA302X
dK!6a4ڮJE%'f]<]v='S@:'L.&CaX۸}`JO(Nh7ۓl[}/WH'3;mӡzB[NVղK*"ͪo5㎬ק+.F//	&yWOv7uvPM`0A2C=Ϟ
?>dOo;~ &}
8ns3uA͓4ˮ_6vݪcLQ	libߔ=}Yn	րpqLr\1q%i9^x59n2%bESwh+<PLN~hFv?AI jK§$[{HڒFH:1Ȭ"a\U=gs@:"XT%
9RdU[XpEn*$>ՐƇYѰH(2<n3LBV-ZwMs#Hbc^ؠgar(tTu0)Su"Z$<ֱTqL}OCl3ӿc=IcDϑ&9ul(FG(gB [u|d1tX:6CulZt;#Hf\(kXE*8ߘȜzHўcS_K8iP7Nmxwgh><PK$  b  PK
      A             +   org/bouncycastle/jcajce/provider/symmetric/PK    A             >   org/bouncycastle/jcajce/provider/symmetric/AES$AESCCMMAC.classJ@ƿij6_QCX=	v-iRvS!婠PDOe7;{?K[pR'X.]kșV3mvj|n*gGY62°%pJZpZyä@ X	}U){1YO#M`Y SCHo¸,WCD4A|:>
+lvY{ Ϳ| PK$     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/AES$AESCCMMAC128.classAK0jia`P	awk$kF	v(PA<5_K>>_〡O+'hV,eLLR5zpb
3Gd2%g5
M%à*t&nRhrx[>C7HrYAaVvq;O3ST繲I:h|knxyCuC {4;FPKv     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/AES$AESCCMMAC192.classK0ƿlikunz4y0(ʐ0;	55#Yĳ*zO#Kx
9ҹ.N}fRȔt.XZg
W.Z=ðpD;I&QrzypQT2jpBg&uH&Ǳ3t{-d1`lGG*/13Eq+dsʡj1ƷvvN@븍
5vhXI;dGCm_PKe<m     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/AES$AESCCMMAC256.classJ@ƿic<<\{
")iRvBSAуx.fv?> \gwdIqK͋xי*EBɅbeM2FrԅI?3q<5aPP75uNZͤÞM5R\`? U"@"!	UN5'YMJkE>S"Ʒvv
O@MxG1k><sPKp     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/AES$AESCMAC.classJ1OhXp11х"C1
5u)I\U| JAfф{r/||~} 8A1j/VsG[ǵ}:b"udLF.eR57YJPc\Xw 8F&}R=i%2k}fLp>Gة%2X$ZI*c5z"{ă|;ϐ㨑όz(`9Z"VT j%iKq_v&NҢs"~f}|Ԏܽbc)^~]?CT7PKιK*  ,  PK    A             <   org/bouncycastle/jcajce/provider/symmetric/AES$AESGMAC.classP[KA=~4!tڧ"q[geg-Y=)~T4+"B37g3w> \ Y,=
AVT+'(Az
B[,B-$WV~WCB2e5c9~K5lgwahRn`Q'	Ni8Uja?Us#Q((b"Cp\S+*Qb)B1C<qDp/o?c	Hb-B0i -&
`NMZO`6Jq5/ZDĸW)'#쌰7v^WCX2PKlR    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/AES$AlgParamGen.classS[OQ-,]V)
Z-PcBq]nΞ6&&c]TLgf3/ \ãNttBcHds/ڳ/Kr<GݣpqP3a=|D5Stm_:M&@X׾:lE3Cà%WbPqxgAHI9Ps"Mnr*ªK_cH:12opmάX"D0܉.=ĮHjj_IJ.Ŕwj+6eڸif|31ƞ2<JM%K\մx\EMEȆcpAN$Ʋŗ-ao8U!ͰYnұo0Jcxzr]9YhCƣЩ[CZC^
4ip\àClnv+$)ܟmF/ ܾ||Cqɿ)/-O չN₁v$#i?:\ܬ#81)0!\1:N㺎3ѿ.%gqM'
a2tٛ_ouL<?RQz;ǃ|Ts
EXy=d|Itamqz	:,3NBGnK^tkl#&@ƽOUL{*ύcdql
wWq^X5>BiF3T_zaf0RFvPDPK    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/AES$AlgParamGenCCM.classSmOA~KAж(SCPCB\z5wWȯh&&c=^Hd?<_J#7±V>TjtpX/,0,9Q\*9/rBqm]5wyQ͖}ltb.mGN0ԩDݖ+/N^Zz> y[GsȕHEZNN䎔<a; ]n̛+{(=g8t}Tߘ;WyJɪX2P7on;ei[´%`rONV3˙X|fuvpMoH`׶L
t 5$W}`&'j縿KCOAЦ!]CN
4tkw86Ke̝ZU&eb]y;.O3
!-hE.ih0p)fMƘ><я:`ꈪ 6cj	<c-[Nu:4oFZRRyjb>gx
.=L
zi_&$#Y F3FQ" aI8FŇa ~zҁtq53?В8fs_0,'"6G[*+XsGU}=s
Am
}`hgHI.PK+(  M  PK    A             C   org/bouncycastle/jcajce/provider/symmetric/AES$AlgParamGenGCM.classSmOA~˫mˁ(oJ+!5§vE~DD|47*E"aggyffwf$Q_P,ŷRHÜ-m`˩U5'ꕊEE69/./_7Oќ1rKK2gK|̹ aЏ]i*dEXYs!l<9siEܺ^]VoV_<ogU9(u\fC{~r*m$}{~^PM	*x&5b9cUX,ήږI]aan䣆3o$Dqi)45hhЦ]
jb^32+P~#s{ڪ&{~]?}b`+^w{x`@C@"5С6
un:BуG:zXGLQuǨu`Lm:'uar)]FHKj\*=OMlcևU^|˷bR,B`^Ik&H&*x9 шaHnT0$0?	VB-@:b|_I|O4%пYWL)pV6#
˘+GDл9ZƓ
G>Q>Lc%nAH
_#RDhPKJ  M  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/AES$AlgParams.classJ@EkҦX
.Zƅtp!T܏'$32W\~pہ7{0?_ 0"$ap2[,OSɵQvY;mr¥uxkm2R"Eī^)'3!݀Y?H'+OX쀮k]a:]T]Cdz_FR\}&Aq@J^yujA>;J\w}$[p+czDbEc_PKUV     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/AES$AlgParamsCCM.classUkSW~6	-bm*!j4- 5h7^ܟ@?v+δ~=&$ZSy9y/{ٿ Ia	g$$%(P;ehMݛdhKޛvZn5	`ٺR\Pm]nJ\Kh8	r6׬?+	k(Z*q34afA7w3f9]G}QX1tE+ںY`uV5wF{zbA!Vw_.!\HBFʳd{qUS#:ͩZRɚK)nb3??mEѝ}>Vղ薒Yx-
I
,(n08\[o(Uan,ѬrB+Qr|aik]P5ST5ti:yE+:
MBuՙjƕmuJ[q6lk&0ޜ)*?j4a2:Ns<<O ܦ+qݮ%k֋?#kCzd&xӗN:Kx[)	%JHIHK8+aX9Ͷk894{`dIO	ŋQْv_^*rrs\<e5vu.0y0 R[]nDNIZb6AV5tU
*tJN2᪌c8.o *c 2 q8k2ut}'0!.22F0-#G&>я"lXw(.⦀O|%qю\1'c,
L(ya;w/0/6\Nїj:Qr4cgUsjiQ|)1
0.L{t꥕ږ}ALz?g)Zv`
g̦]\^J	i6*0<3Kclҿaa+(<1N@I|`T^F*D
'<)O#?0:
tbt)Zjs?l,V'O<P8mnŌc2Uȑ x4%!zД d(
Z2?RDӱTMMtA;pv!-ǇW*XJǤ8}ﺂto?%	m=Gǫ-]<F_PKdo~  
  PK    A             A   org/bouncycastle/jcajce/provider/symmetric/AES$AlgParamsGCM.classUkSU~  K)%$b[)ЀQnZT9n]R+Q2c?=Fy9y/{ٿ  ZhLD\!.>pXrR@Cl9ɅmМ;iiZ~^<s)05mG
ӉZL5seoEDR3051CBYmibNP,#QhfK3r:ؖc)3ޑ
tyҔL@0ǜ	E̕!!
Q,4J%m$5,E	ݬE4{<3;<iZy9#nJQ5SNϥTVp4R]1rϫXInjzYTm&r6eOhQMd.8oQ<G7UEOtP+榡nL4]VlcXVLP
uUYW\̢Fiv-rMefp
M;S5Xo:.'UخE^SSN1x[Z^s"=ѽil#N_;V5K".qUĀAצkmMqȒ#V!/N	e-iw*!*'7gSEOXuWX*D(݁j+DT)f
,^YmN'Yͭ3R5Uq[y%\Ђ7Ѓ&	Q-84K8$⎄pW0/"EJ&%D0%i	oC	gQcKauqgaȄq3>a#a9<s_!b&4 V?A_2=FIi`;BGQ7f"RPKF Z_

с{ίmʭG};hӺ+1zxK-ZWpc חJF=&~ö=+!K[N^|S餕S	qy*įYԗ9M</P[I_W&Gx"KBvߑV?d я?RxTK7H~%-Z[pDD|n|KX-oao$BGY|C0xOPK  
  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/AES$CBC.classJ1ƿյm7C+ŀxSP'͖$Uz<Y< >8[d&0!Kf?>Ɛ7V/Vʰ2|h"-$C#1}ȺXra&#pJK˯۷YbIHroŉx
Q?@D!$Ϫ'
P:D
rY;WKNżYO+V=x<i">dtz#cwt9  lǖ}TPe:ZKƑeM}jSTؙbw>e PK)0  k  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$CBC128.classJ1Oڱ+\LK1(
ءR܏iLIR;_ɕŅCR 6{O;&7_ Cws! (KJm"8A5Qz$HS}P.;BrM7ͱ$gmɠ4=ˢ.㴯'aǍ,Bp2a6<<:%70"H:(8sPt8'u[|ga:غ_̈́[؈i5ݲbB{aCKiXvQ.P3B`M^(%WAi5Y,]8n.
VZ/#n6^'𶍮DPKfe9  u  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$CBC192.classKK1Oڱ1\.]ءR܏ii2IK,.ĵ?J̔*	{߹7z{pW#()AY@*J	*qҦ@!8eɰce[HU1,z/<!8wXaQxBհ:,Bp2a4<<="7"PZ(XP`Y'zu[|gA:ؚWɄHi54bB;aAKiXQ
6U7&''~*,]8n.
Fnk#x~66A(}PK#;;  u  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$CBC256.classKK1Oڱ1\.FQŀ])4ԴLJw%W%fJ=ܛ|~8Aޫυ,S %8x(وJGd41#$WyӜHZۏۆ~#Y,2NI(<jsv!g84
sZD*>sU,U/z,H[*pki1 U:[FLi9,;c%
6JXac\?*DRďBsG(ccMϯz»&&;(coPKźz:  u  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/AES$CCM.classN1ƿʲ Wn&n
Hm-
.i$P.mҙItf	So.҆A'(IړڄqF1J6c6L&&\䚶݅KpŎ%mN@L"8X8bNT"\Q=Q%&8^shjDD;:](p](.덛FȈUϤӒ^)wٲ4]Y>C56=xP
	e	\Q58B&؝[6Js9%yhO2|8( PK lK:  v  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$CCM128.classMK0Ɵ滂C'bPEwR<xY]:Nͯ9 =,|~ 8&Aέτ9AYg_8"ա@!tr԰Gˎ\z9{Yl/jZ0b?pEﲠ8IzX	d!8ΰc\L"@T
,Qvkk"e>5u~&3z~ɓܸ4][FLh9;B*6JڰdcN-KɕZsm8K1{fmn/#,8oX}&tPJPK0C    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$CCM192.classK0Ɵ淂C'bP 
xV03t$?˓Ãx9 =,7O~$_o Isk3!E|NPٗ:$Hu}4l25#$״޼n%^ۋچV#أ'\û,2N*zmz<V%Y3옄'Si#<U¬iԭ]eHOMݮެ_=w~$7n-
g7Af6l,٘âS{DRr允\cE̞usB([#*+V_&97PK-xKRB    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$CCM256.classMK0Ɵ쭮AЉEQCjffS<9<Pb:%=_ϯ '!Ȼ;ҹ" HKqzz!I6fCNrklߴ0D]Cz^FG}C=.WT+,&qr(!mJPPP`YX0^;0)34ͫOʹZ1bF;cAˉ(fƪE;gL/%W^h5,Y4n.Fk6^g𶉶9T7PK"A    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$CCMMac.classTmSF~dlBHCR6&}	iZې&iMv7FD<LCS>3
L?]ISםc}voO+ 7S

$l%FvKFR75V*X]>5iIiЫipY.j?6۳MYNk]!S/)u&9]'tm^RNzCj@ _#l*"O6re7'0ڒfU9`G 㨟+H$RykݎclU0vVd #KgOVlw2=)lQv.Pm
B˵O"S1Fzk]SڞgQ~&su:9}S~R'
|E'
$i:M&5\0ᲆi
3hxSU
	,TOQy#[yY0ƏB>]@y~_4aX=go7
<uQEu}Hcq:cDh:BJ8nx(nx긄tۣX2;iXM#OEbi̳(S(((G#t42Ѧ%+-}'p7據lom[adA&Fq衂i;Ү]:;D-_@9r'H\d	XkW>)ޡ'3d3/<z)p眠L9Zk70S)e8tpS1ْ1<?so=5 .kK>tItM_،"2*?Cy~Fo'ątԔ
VZPK[  G  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/AES$CFB.classJ@)6zg^Rw
{%
^t[;_ɫ7H.ΰ7;;;I|C9f'"4.tO&۔Zڝrg[~Pzi
@Mц#(AvV
]J6R#m[mj]}d
i~ӡ>0(
{p(Oꔐ I eWj4)~W͈X.	Uc'O]8#
YPbdd,CYec e@19XO}"/nEN했JH(!w;zl&>6_F̶8C/PKn^    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$CFB128.class]K0߸NNš L['ܕ(xYlvvH[ew%6(1S&8yϯ "H[ԉÜ b6%(y{!;.livAVzXSNkُ~Qpu/	qޖWNRsi[Mjm=955jр;vtxtLp6OR0)!%A0%!MWq"Q;JyٌZY0AptC{Tb`W0($0y2dd$C,/S!pdrõ|FVآAĜ
EJ( ;Va!ȿMef1uPKuf    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$CFB192.classMK@mkcZZ?S)X!`O1ۚnJ6Qz/yjQ(qSTJ,~~8&A\)$mf'iF}Yz

ձL;TNwsZ7ׂzz9{ 6\=\U.A1JrkB_hBțٴGF=wZ-{f!8	Jcpo;fr:T		I	I	)EzYQRhhFB$Tò	cDQU8y1̄&A!c^F22X1~zN1S-d,\DX߮9|Aa%VXN!,,7PKP@g    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$CFB256.classJ@mkcxgTb(&V+Q2ۚn&Qz+yբPT݅Yٙz pZ%H8	N	>,fSǛڽ2k[~RNian崮h8	
qeMQ_;^W.A1NBi\B[ղޓS\6
cGYʓ{"a|Lp6OGJ0%!-A0-!CWq!+8JyŌZjbX(Apr3	g(W|dr
X̢K2X`Uŗu8b2FZO}bVȢEN언#-< #x|z/}l&Cl[XY&2PKz(U*f    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/AES$ECB$1.classRJ1=ñhEVĠtvE aqIZ_JqQb:tQސ˹s	|}|h l=]	)̵-}cs
A%
һ~ęm$Jm8AK%!d3hsʒ(e($SHpK b5P=I.V34҇W75	l#bډ{xȓAށ`AAAٺkGK#.	NQ&rk*E
l<5.Jە'^h5P&{,ȟaSQ[Е{Kf?QFlMdQ4~ PKȈCH  k  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/AES$ECB.classMMK@nWxzh=(U
-xǸ]tk-ПP_Cs7w
SBۛ7&7-a.{/vJ}i9SLipL~5%OjNү\*ĖdzgV'f@C`O) CwAoR"A}jB4s,^{#S+58mh+PK[     PK    A             =   org/bouncycastle/jcajce/provider/symmetric/AES$ECB128$1.classR]KA=cGjw/=iDQA. $A83z*z٥@s7 G&Xh4B
}aRkN\ң=3C$H]8A3<ǒMt)#R.=!έ@Z>tUHFp<)ɿ|=sE@Am1Kb!m!kh!g!Oh^6g(@Yy)"2Q@-"Vv7~HJH ;R\m>۬B*Ĝud8f$t\|/X{L)l9JaˠaJXr$>PKRO  t  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$ECB128.classPMK@}nIRQ*	=<Bc.5͖TͿ䩠GRg13O '#TvrU\yzHmI>DH>3Ev1(wr0焳:}U	PR+LX͞a2x[5BMnJn((D > v^=0si,VZh 56]U@㰅K.xPێ^C-s PKX     PK    A             =   org/bouncycastle/jcajce/provider/symmetric/AES$ECB192$1.classR]KA=cGjw/=iDQDA. $A83z*z٥@s7 G&Xh4B
}aRkN\ң=3C$H]8A3<ǒMt)#R.=!έ@Z>tUHFp<!ɿ|=sE@Am1Kb!m!kh!g!Oh^6g(@Yy)"2Q@-"Vv7~HJH ;R\m>۬B*Ĝud8f$t\|/X{L)l9JaˠaJXr$>PK(O  t  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$ECB192.classPJ@}nIRQD,	=<Bc.5͖Tgy*X~-q3{o~ p}Bj}pԳ\EjLHBѯj$
DF	~3'qԻ8!KK(gxZeZj,
CcbNr[nCCT@+#`z$݃<&Rk!ꎶ
rYY
h5
u042=PK>     PK    A             =   org/bouncycastle/jcajce/provider/symmetric/AES$ECB256$1.classR]KA=cGjw/=iDCP샐ζhЏf!
{s?^ c`Ѽ#Ȟ)I=	*;qiJ^|U##J	*hO%27,\zB^:N	~h}Q&CMCCbAk>CݱGαmb4͗BBւeaBB`ѼmR3-Pvǁ"R EdPͣZEm7~HHH@	)yhn;(l
s
ZN{0qUN`1(-)a	șGPKsO  t  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$ECB256.classPMK@}nIz(& q4[vS?SA9cfx
3_ q@v{cBmrU\NyzHmI>TH>7UMv9(oF~9AgGg_)ẄrQGQK0T<!&
8D > ^'=0si,VZh 
6]wU@E
-u023PK9
     PK    A             8   org/bouncycastle/jcajce/provider/symmetric/AES$GCM.classJ1ƿk[k՛-b@)v-RpO5
5u-I<Y< >]{"M`2C~dfF|.06B/]M$'h&Odisdde_H߹d.Q;Lzq1z>`рq:RɳqEd8F	Bp0kr؈#tqbl4o
Ǳs3[t#%~3=ꡀ[wbE[.VIP
,Ku*#j6]BfwmT|ښb{7_g؞=kPDPKZ3  q  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$GCM128.classMK1ߴkk~ۛa+bEi"{RiٲIK,(1[+Td&03L[%ȟ
)AQTڗTCd+pAOGˎ\Z1
	v0jkՃ=xwc?x]i/ET
X
t-Spo|
]_}'j!gaBނea4Vzm-&'n3MQ$r㦊~6Ch`L;Ȣ $ZQ@ن%sX$y5gtNSJ{W؄cd3#fN_.y!V^2&7wP:
_PK1tm?  {  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$GCM192.classMK1ߴkk~ۛa+b ҮE
x_PSwe*Y,ĳ?J
Y	Lyg2||8D Vo	B
}FP)%(л/ـJx#$WָnB46چZ b`e~qڋG1U0:,Bp4`;'8B"u_ZY`Y5ի^[@		LſGSk.&5Ƀܸ_?Z&(9`>lPac	ragӔ^+6,YȮS"Ɨxby>
cmPKB>  {  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$GCM256.classJ1ƿkk7VĀZ/ҮE
x_PSْJ˓ŃC٪PE~Lf7 Gd-ATHa?6d.XM)S)]!us쥱cˠ݈b=W{ӁE+G>7J
Am6-xP;&8A74"P:9sw8ի^Ȉ)	JſFSo/5Ƀ_?6=dQb-(Ŋ,3:%%WAj5Y,YnS"֗vcorZzEl	PKZ =  {  PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/AES$KeyFactory.classMJAvc6Y'!"!F`Bve3+3~'G9xJ7TuAUv"DоF GwἶK%XJŋW:g+\XZfnmd^WF:XY71ccĄQoZʕ4B@Ӽd'95a"N)5s&c؎+;Bn	36VM;gGDo}LwPK%
4     PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$KeyGen.classOK0Ɵι9NnsDtE`1vtiIA?xCi xq9<{$shhpNPݲ4/dWvF0OrYĩ'$$O\.YK?p4:XpI|<Z_lg8\Gpo~]E0![31әr	NpnZ)Z)&LtLX3FWM׉r8KSaoRp6U)] c{)	3+̇PPK}$    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/AES$KeyGen128.class;o>Ff
0F
OfYbȠ__\X\_P_Z_\ZR`JJ<FY3330030q1p0pᜟ㙗Z䜓X\Z2NnEN`Bf000YZ
7BI!;P/'g PK]a#   J  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/AES$KeyGen192.class;o>Ff
0F
OfYbȠ__\X\_P_Z_\ZR`JJ<FZ3330030q1p0pᜟ㙗Z䜓X\Z2NnEN`Bf000YZ3poB@9v>^N 	 PKOW   J  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/AES$KeyGen256.class;o>Ff
0F
OfYbȠ__\X\_P_Z_\ZR`JJ<F3330030q1p0pᜟ㙗Z䜓X\Z2NnEN`Bf000YZ7BI!;P/'g PK~   J  PK    A             =   org/bouncycastle/jcajce/provider/symmetric/AES$Mappings.classYg@SW>7(9Pu7*. 8-D@4hvon޻j{㞗^Kl~wsϹ7?)q"4!4#섰a1K"산+n#쁰'^{#+A8CC8#B8a-I'#p*i#p&Yg#p
µ!\p/!
«!o!»!m孮m
_tٞQ%US1@\5^SΎ@4>aO4RO-TKL]5I(3Mr'IFĵ$ߨVW\Ku5.j5/Ii	גd28885u`+ڹĕ4ǔAL)fS*ͦd}5K4	5#ƹS#ܱ&OMݡHK#gF-3r蜖yվ%jNik(yГ9B}"ZoCD(oN V{V1[,6wuMJBe.OFIs)3fooUYR"%6%9N2jE)Ks+AIUoZ)r_|rrMS(p$ vR%˙˥Ojs[3q[x(k*g03;0fmUYG49w-lgEa<'ΥҰ$Y'џoON>k:Fs1ڃq|rs7䟓19ٺg\;0 C<Lې|.̋pPh)13&+^D:L<K7$Cí̞W>BjJ`Ai*q˭\mEU8EU6Q"\,+6ɸ*fgݿT(
U_.]L0[PY#Kؐ4-`4_ff폡\
!gTOlgoEf-ȆY^9E6V{FVk$_È5<G{ódhj,WRwSğG-OW
[{;۵po=_nfZ\R'+Eݦڅ's4\yRܱ>%i\@^3ۚfkJ3ӊN|gI,4#E3Ã([N6$z-H+Q+ԬY[Wr}"|-ma?FCmp
_gۼa^F㽶pi՝ltv^+FY.C}L^#,|lƔ\`0y+++^|%Ȍǣᶞx(Ɨ	(%I*4ElvZc}1_U+gۂU8MƩ$Bf### Y艆ȜyzD(zDi{#7vӧi݋JʂlW,-ez/em9dUNB^5[Ȃl1RzC"~+HG34u'N/㻢m]=` Ub_EuB_SۊPOv(/y9-XQW<j9=+6,6qmpY*]<Z'd3Ԝ)`[?E
X67o#ټ|<<[t-PJ])wѮH{%eij:zy
;"G"#!t ,GDXABF!C# BX@8 cC8\G a!\p	¥!\pW!\p#M7#܂VnG؀MDn{E~DxaGExq'Dx
igExy>@#>A3@
koE{~D	g_~E
w?DcBY>2'2t2U9d'dSlMw|-Pw,Md8lY/x/<V]f:
2[ffl!$H|1Q2KX3I
h1Pa̦f7ܬD$JH 1`[Bb(a$Ab$Q$!%1cIGb<	$&DDJ.D8Jكn$
CnbY?(ܬ=NmO=f}ؓ.gI<Gy/x͞&IBUx$$IC]x$>$I|BS$,`\l6H|K?؝kԲ\_]>U!}O'?&W;=5"%n"K 	ɻ z`x
f9plޓ	^- N!z;]7:wnpbc&Ǩ<SZ%=zt8~2)g/f${%=皁V`zf1{g	IYf ZE2*dRǥ1>MPWfU2ʗV~;69T9Rr)_JJi;GJ./Vq(8WƝSQxT-TD8*^ TIYA
f[Ƈqp #$|gL2Ru:jcQR#mT|{%|gl228Dɠ(:)ʬN2ӓ&]9KxZqx	V2=\fu2rd|:B/Ub	/fsEB1DBx_
2N=S٭SOEr1-Õi )Ӗe2<*be2[3.^#֬}l:6<(QoQ6JuloD_$Z'qI\sLbv~Hu-0NE#oZ}]'bv`U̮̿5yx|nYVd^$*p$U#"w#Qhs9H"pξ'&pVi&%HB?L.p8=gY#pPʷ\3ᳬVo\Hx-
@+poP2Qw;xWUm
߮KdTa&,ӅEt9V'pNI9EX g|V>xZ٧ݠG\ÂBCL;U􀠷	zPSѝ;v'xF+KozJޢ78f겻2"
ǭڧ-?Q˥jePPK[.X
  R7  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/AES$OFB.class]K0߸s^2,wb焁 vґK^MQbZM9}7 $Hi
ANp,ӫs cmFqٖ̰ExkZakgWzx7N8$('y;^C:~;boVfFWxN	u:,[cN峡wRLRd((EB!дRè#߬Ȼ7;ڛ/Хl3L@1HT1 *䱨`KlZ㜉k>󱅂܍s"ui2J;/X-⩏>VmHUZ4R~PK}cX    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$OFB128.class]KAQsu,ݒ (.mml(/ue$QѬvaBs};_ Q$H=Aq8}1XܦeknmCuvW
+t#l4GOyQdE:H	Jqڶ[+cmlw<թv.G;A|.OG*!%aJBZ$!#!Kq!O";IH[Vx?CjЍ0
B!
s
!cAF2,ʘA"l#PLΩWq,ߧ\W6B
"fb7DȀn}ȵ>;VEZ+dQkBPKu%_    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$OFB192.classJ@ϴմi.-.DQLP\B1tR2ҝbA\PuQ);gvG0y0'8%2l2X̦%o^mwځ_кԧ5ǲ~>Qpy/	qޖWΛK{#m5m}ɩQ_VcGl
Jgcpaฺaq:tT	)	&%H2zw!8CՌ%Ռ73]`aBA3#UĜ2X`A4	Reb2FkqN\Wr5"zbN=Vxb~nŘ6PK{_    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/AES$OFB256.classJ@ϴiX{\$ZFQLP\B1tR2ҝbIRvۙO G($U }0'8#1b2X̦eo^m_Ҧ6ԧ
짪}>QrE6,	Jqގ+҇mmw}iP_NcGTĆ1\8nXUBJIBFB@Un;FDqh|FPIb3N(H`>B$
X!cIF2,˘
A*b#PLƨ_u-)kE^آFDOuKP/ PX/൏>ֆ/-TcAPKdu#^    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithAESCBC.classJ1OڱөZu'J1w(X]ihS<+3HEl''{EqOPn	)AU&4էDEĜ2MB5j߶gǎ% =b<>dѐq:VɳqEu:q˺aK'F44_xeU߿B<noIlbsw
XPz&.*rbE
в^GJ8Қkگ)E.̴no'SL9oյ*PPKmC3  {  PK    A             U   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithMD5And128BitAESCBCOpenSSL.classO]KA=ӚfT
FA`)HAo8,̎¾z
zD/ὗ{T
1xڐ!vΝvח-3nkuzꃙ2ag8J섏3,XYfөrVKN`rE	scNV+ut|~$LxH(3iiVx"%]oZ}6,Z	%rA2V1HS2P$/cV(oдu@p\ޫ˛KT'PKծ_(    PK    A             U   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithMD5And192BitAESCBCOpenSSL.classOMK@5ikwAC+ԥERBZ!Pv
lK% ^}y?^^+@#TҜt<\]*j:ݰtp&TR=txYfAcb.L	M|:FKN-`oÏ`	Ź	ZK7](p	zA&LMhhYj:2դ~xcM?{)toQU`
 AA²Ld=
+6oi%6!3֟7mZ[(PKb*    PK    A             U   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithMD5And256BitAESCBCOpenSSL.classO]KA=Ӛf{Pу6(ًd,6N6:+oh <so NP pj1A\*i.o;i/۾Z4~/lݠ1CTO$](sDИ:RFB,̈́ђSK&F8ۄc!XAqadBd(J}Ms..\~m%	SSZvNL54GXp32A
ݹXU8ب*A!H#AP(%t, e+b[vCvwKHx^msֲ]APK,<u)    PK    A             I   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA1AESCBC128.class]KAksJ>/
i1]mttUE?͊Py<9sS$˕{\]{n
<AA%c0tB=|fp2RD&zݘ8vt4:tQǿ>٣0xr22rM!p:zzMz|j.c}$[^|켩-:t\[c_E9~K'sBkX\DE&6L@r5K`5`{R2IP8E3}dt(MNϿauNhoh!]dPK^H    PK    A             I   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA1AESCBC192.class]KAksJ>/
i1p!!!0z]geg,Y]%]DhV$Z3p>yϙs>b Yd. 'sSH	*AصI3
l&\0i,%ƱàIq?z,$8קЖᐩh
i<pk_kkg'WKt+ێ'

dV囸dMmѡJ,/=[:Xz&(0abY)]ߓI_,-藘m]#3x4Eit|[/szG{SG9"
PK&` F    PK    A             I   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA1AESCBC256.class]KAks>/
i(p!!!0z[geg,Y]%]QlHgx9o MTrB
}AP)%0҇p$٘Jh<!+$Wh7KZ;;\
BaG>a>\G]{7n^^~h).#-|BBB΂ea]N|Fv4/V&QŬɞ?obJ;HaAq*ȣdƪEd<8M)yR\Z(vQĜw0L'(Ob/Szd
BPKU/F    PK    A             K   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256AESCBC128.class]KAksJ"А"(
wYHHަAYK]%]QѬH%8g9_ E,Wn	2g\puN!e0j@!
Ma_6m.^Yl/|ФNG;,"wߥG`-S/|kǻӺ׎nvBp1GMn e m c0/_}JvZ䛃@iϮN&,$,&LXD jj"7dJKb#$~]߶PauQK>B~PKaL    PK    A             K   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256AESCBC192.classKAǿ*AЃt$DQxABB`-vZg=GE{"!03|3[r sW9B*_PFP	}R_4Uh3IqJPM!}ty"_x]~>r1qB'ؽv;:zX?Njs(؎/TR2zլѧd
mL9?odB[H`B˱˛ȢhĊERf	,r_J&	J;,6ObmŽVGXK|(L
M-䰉7PK
R5J    PK    A             K   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256AESCBC256.classPMK@}ۯ4jZ?ࡑb@ԋ4!`Ps.tS[?˓Ń?%nJ,̼]{;3_ NK.$(	R2;c4tLBx<TD&D\
#aG})sq;,vx0`*4_Lpp\׍3Ѐj͵n g o`0ݤ>';oHV]٩(T|^Dp?tϟ4-db!$MQ1ab2rXM!X셁LT^)aiYD4o
	6&ں\~CuB	;(~PKbG    PK    A             P   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256And128BitAESBC.classOMK@}k?"(xh!	-V

޶ݐnd-_$x-xޛz p"A/`=H3
陧vܗ녭Z~@p	ss2ssAu4g3aWyR=XlndB-[(F}Ms%eA1قф	
-JM_,Smꅷq,DB$>5Gu^C
ubF>PJ aY&24b57 hbqb
?[6lmTPKE&    PK    A             P   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256And192BitAESBC.classOJ@=cik}ĭ
.Z-*HEHBբBd҉L%WqGSp'
=9ϯw Gp+(AL*i	voޝ49>T>xAS=txYfAcb.N2ft*Zr?OXK͌LU\ϸIu!71305eIw˂eM}37H(#EsTG5P'(i$e"#+jؼnTl[KϯX{Yްfk.n
PK{&    PK    A             P   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256And256BitAESBC.classOJ@=cڦ"(h:E@wX'LK~%N(\8^8>>? D4[cʹT\{iK{zr ߏa8S:&4,>l!ci^fhɩ\f8pas#SjEkaE1`dpQvQq-MȺԴ7Cs;I7X(#нEk܀:h,RB)sP%
k7m hR<aGens
QPK&'?$    PK    A             M   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHAAnd128BitAESBC.classOMK@}kӦ(Z.)VE@oZ7l<	(qx0޼Ϸw 'hVZ1AL*i	o4ѥ*4~?A	BLO$+^pTЄy1	%GpKpMs#SjWEkaD1`dpQvQqZ-MȲԴ7#rQ?n&few?7Pzu40Aca\,qiz	k6oiUͣBĳWl|lZmԾ PKsd'    PK    A             M   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHAAnd192BitAESBC.classOMK@}kӦ#(Z./RjmYt#m!7'xG[Cg7o
1*R5"J%Mл!;;'G4~/jABLO8)^pTЄy1
%VGp`pM3#SjWEka.EgdpQvQqÄMȪԤ;crա~tչ'A,RFk@	u p,RB)slPE%X\-B֞,q/PKJl!'    PK    A             M   org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHAAnd256BitAESBC.classOMK@}kӦ#(Z.RjmYt#m!7'?%nAP73޼Ϸw pJֈr&4AN*>:9
{Q;vfzBLܤ&%\'e,4͋T-9:?_XKlR*\s%>&Ӆ&lhԄFV&8b|Bw6ZJXf h:LY`.,a⺝vPl+^,q/PKkjf'    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/AES$Poly1305.classJ1Om[V(*^(-((eLCMfK*X^U| J	ɐo0k~KP<Jsu%%X ǺK	gFrlLJ%hݴO,ϸ{g=.@O#45I/<'8_֤*VFbÔCC /kD1lЧR7Q<Fvz63 Z*3
cGs>1OPh͈#6Qu!ƺugA\rFX~AW.V 7PKۉ,  2  PK    A             C   org/bouncycastle/jcajce/provider/symmetric/AES$Poly1305KeyGen.classJ1Otcu.].ZAv)v!
.cƔdHy,WS".'?ޛ;	
f|)]*ONozJGYsfXP4S4,S9 +rِj5G#iOՀ7+Lƴ͌XAAفBntlh̒,DNq2}z1[QL=yAP@Awcf0`Uk-bZ]	$ x4y˪gmPK t
    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/AES$RFC3211Wrap.classJ0O/V2Jeʄ(LY2$jPb:2d	|9˗||8&A3.{jCA˶PTL`?G"8:Tne2.
yI_
z=%i+逝)_Kр'&-,X[,7ע>|ci7{Տ4v''1t,RUQ
esX"q˄4`2B2?<	o:Q]3-{o^<J4yT۬@PK9D8  R  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/AES$RFC5649Wrap.classJ1k|z1U@.
zxnK*},*
>%fBA4?3@YrM?RAQ&TbզwqO>8erkzڸj%˳`zxtXa&*~-w(VG呞	h {L9;pL7ף=|c|wXE/2b ('V,JsQ.fH▝ה 
~HzE=m"gP~{Xy졈u PK,^?5  O  PK    A             9   org/bouncycastle/jcajce/provider/symmetric/AES$Wrap.classJ1ƿtk㮫VxzhAoB]z	1j6Y婠PbR7~	'I0ehÅuslWF5J$\SVkC^'NVpǿPrHTξ9jUDzhjURJO-tB#hsptzHEn8hEgȰ.,|C(6b8CL1XFa:E: ? Z`÷_Q,8FPK_     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/AES$Wrap128.classJAƿtk]BRDP
Zz	4)ef+cy*( >8SzMKߏ$?_ z8$DкFW}ia'UU9Ke*$6fp9**-tlƕ*vXv~qE+˻q|e+	46ZvGRR4@A	lbOa;3N#䳱=?!|B</ʷ55&PK  r     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/AES$Wrap192.classJAƿtk]BRQ
Zz	4)ef+cy*( >8SzMKߏ$?_ z8$DкFW}ia'UU9Ke*$6fp9**-tlƕ*vXv~uA+˻q|e+	46ZvGRR4@A	lbOa;3N#䳱=?!|B</ʷ55&PKj     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/AES$Wrap256.classJAƿtk]Bb{Q
 x*iSef+cy*( >8SzMKߏ$?_ pL:uNK0Vf,˪l&ڰ'H㟪|Xxc9WV'6 ɻq3][-Bߣ)^wG) ;		v	ͬ{cf9v/lO'|gK-zM|#ĿPK^6     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/AES$WrapPad.class=KAŬwߍ"p-&#`!uo.{FePĽpXd`f%	`8%~L(팿K#k)/|ɕi<>YQ=| s)Rʖo:WzPjЄ̀~0 \z][TCgzU!b2l16Hh8M5!M`<<lV#N"sQZBu(d@z	
a$8BPKlEPL     PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/AES$WrapPad128.classJ1O:qQn
].JJCAKMfd*c*( >)	w?qt{c֕62v"QH([e.L!'GV2-N S%DaWͨZ4z@ga;/u&n@GcndqX-[8I[c&tC;*zk}}vivV=!6PK     PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/AES$WrapPad192.classJ1O:qVuaT)].2f.5e0`L)Mp	c3"ύteFB٪(sAf
9q3z|xhp*9U$
锬plFժupv^LJGuDd9&Gݹo)
Zv"p"24<wƐM29wT"0+=	%{쿯}^#ClPK      PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/AES$WrapPad256.classJ1O:qQn
].RС T\̥L3C2\| J̔q
?_ qt{c֕62v"QH([e.L!'GV2-N S%DaWͨZ4z@g0\:7Q] Yɱbt[F
8Fq$O1dL:G!G>R>;D_@|o+ߞGPK#_     PK    A             4   org/bouncycastle/jcajce/provider/symmetric/AES.classwxU*"bCE4YLȪd3uw{{^$M@y|oΝo{̿ 00̇>a	wૉc5K^(X&Pk}оkNƻ'Uc~m$֞0aHW*L[fvfw0nd2f_oC2iX-6Q3_VVaT0FZV:eB#7pk4pX<0,h2R9vItwJNѴi&%dW"52VtDHcmf:4@m}Dtok0VJ+(@]Q9UT㲂0gxۛ2f^YH>\j+<һș*:{"+)9{D<?,ؤuJtMFTaP:AiSN`0u*Q\He:sHq:zsGDQ+Lju9ã(GHM4RAX=}UV}XqՇW}wx5շĬvbivemŬSᔙDXU-rZY̩-|­`+4WByOÎj5 ;9SԞsg0>f),yu+V&ҍr^˪
-iVWNR#QܣZ?*g*	텪"Tma=:njmOE.K``m:u	l P0N`c&M	6LLl!R`k$A@P&(T&*SUjA```ZA (-4B9y&Y` "Q`gA`)K`
Α4GE8R=1a ['4?ͪ3q`W)FR(;0X\(
K4sNJrDk:V7=);_dhΑFiEiFZ
tXw^ݭ`urQwdɶ[nͥE8[n	R:70CwwSN9i/ݜXw\ZKCǭ:Dqܪ3Q+NVmnG,{Z
Њn8߄e =n^aʃGkI^,{  %و#"٘P}0ʹ[hkp6=/gklw-aM{{swAϊi齈w/#Kb7Fj=
85f }vr\N{>r?~2N>@v	!2I>LGG4#3cE>NvOI?@>IH>EvOd1ۇϒϑϓ%KQd)y
y,*yy<y&y"y6y2y
.y*9<|<|<<<<<<<<J^EH^MD^CL^KB^GJ^OF@NHADILEB
PKF    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/ARC4$Base.classJ@ƿmbĴ;y<4%7CB]d7n<CAof13 
D|FпPZ	An=W	60JKf?ޥK!YcͳK\[[%U-k¢-W{o%K<IKQ;}/C|^
,EA}V\y(Tkiˊ;'NS$doa:A:`0~}Xcc<
`H PKy#     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/ARC4$KeyGen.class=KA5,4h`*Y=.%p*Gc!ؘYxggfw>>_pBMʻxз.vad%EQfKWΟUՍ2ʉ:ǜJJsgz/\NK~|Kl3jpQꌏD~CCӃ0NR<&Dd84D
;k
c/@}zlg!rƙ(
UВ7,N&:I;TA7 wX7+Im#_PK}    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings.classURV=Mtm&(@4M	Ӑ.86W*+əR:C&L ^X60ڻ{vܻ{? i3|9
/deH21bgpAaPRKi_3cXf
÷"%rk#0(Vne=k	>L1k5}63z<*{&iWJ4[Χn֪+Y\CJḊ ^rօm?aĺ\fkp\7)ӵeW1?{4<9szѨ'JJYTJ*t7}_YR{蘳bxEP
o0PNrM$VWRa+W
/4HȠjRZe57v^GFS-ͮyKs]KsLkVBөfu,C\;^7UmWg4VB
4ߘUR]rZ2J] pwcj-#F$&3C۞iќnU'3!d^s"r""XHĺ y7 [)OɹaY4#%_`AG9Y|eik	T$-.6,JK/xɗ?ư_cxx(:8x5\U5H^24h@qҕL/GZt"Eҡ}z_:nODq˓-^<-$aC+yY:,QZ|5|]GE=DO4
\;wv]2#vG.0g==-{Th$h:9/JthQ?.>fsێ2@Kz͛[C4y@dO0PK?~  	  PK    A             I   org/bouncycastle/jcajce/provider/symmetric/ARC4$PBEWithSHAAnd128Bit.classPMK@}ۤ#AЈ(=b1&K%ٔݭSAŃ:o{||K`A/	Zc=ygJ沙21)z+J@iy6LRTӒ42>dMm<z2"Q\\1eyIL,>0r`;h;n;<MpM|.CT&2S) ,lpthGopض<|.6PK2l,"    PK    A             S   org/bouncycastle/jcajce/provider/symmetric/ARC4$PBEWithSHAAnd128BitKeyFactory.classQMKQ=C+[Zh/E`:$VҀAޤod)̮TE?M%{ν
L\ꄠk^u5ү5rja4p*Y¼X8bY{^q/gsĭQL@@I΄#'1W`|Ak;<iyLQB,7UbD5Y'>G)i~w@
[:A
GGRW En*}Y0E9 O`:	추<rF^sҿbaFn`IMݕ+'̔ǃ-s:XFPK{NE  `  PK    A             H   org/bouncycastle/jcajce/provider/symmetric/ARC4$PBEWithSHAAnd40Bit.classPMK@}ۯ5֫C#z"&`XxݒlVTPm 7oaf?8!h)Ao$07AfZJְLST˙\$o(.X`֪z9WT7eɍFG8O'wQ$*v!K#
gOYzΕ4
Z kws†TJURdZsM0^g[:}۝k_|y^;+j-?PKf#
    PK    A             R   org/bouncycastle/jcajce/provider/symmetric/ARC4$PBEWithSHAAnd40BitKeyFactory.classQ]KA=Yً/Ah.I`8;l:+?^h^s=re@>Jsbuq+{l*vrڒƩTpDLHe#hC_p^0"K3:
DHx2:6VD.Wخی 	fZsKq:Xb!e!m!8^OӽA.|6gtԈF5Va똨ldi#,r簁mx(%Bg̢Hk

+L52fGB2̗/ygjt("	PKтH  ]  PK    A             5   org/bouncycastle/jcajce/provider/symmetric/ARC4.classKK1O#mڇocB EDТ(::C)3ca~+?%^MQ@r.
Cbk!}h'<b(/EG궸jE{vd (ҵ^i)_QB߱E2MSa?BEJ3
st;`J{'|=uW3Ui1c3v./2đHr8#ÑqL1CsɯI&-Eȟk|#@QyeGG>QV~*b^WqpR;ϘD8I,fqX$V%*L\#ב PKjG  `  PK    A             A   org/bouncycastle/jcajce/provider/symmetric/ARIA$AlgParamGen.classS[OAE\rYPD(4Ԑðv6#&&b<)ه9{|9ߜ9 &U"Uz2UӎJj!B>I%2IGϽ2V'c<?ڎ+sG*֓\cr}]KPHS "QB-	6I 
w3^$;!ym.lY"`8])ɉS0U2ˏIJbRngL91ڰiR^yO}4S3}eqŖJ'ms+Vʊ#|hBK+v|%iMKy_Q5XmO]O%1(oxt*6KCz

54ihТMu
n0t-S-œHצxn
{p{'/R_Z^^eW
tඁJD%j5X	ܸ:$\Ðנ:pWG7}_:0&&t=1 D=hд)`>}?և%7rS:iMHL`s#mwѻT3Ba,yQ

?_0zfb21hbx4<hXE6'׉QS(c"wеC1<-̡/PK.    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/ARIA$AlgParams.classN0EkҦP@bhY RT1Db@؍kGl7R
&$>B8k-=?w﹖> c:FLf'Ji	I~_EXM.[K3dfZpk*+!٫5ZJܺidp֥.$N7pfEhciu	F	cl~[񖳚}2CvGH/RBki5wN:svg p0t
}x{o1D7r4^@ dQ4/PKMӴ     PK    A             B   org/bouncycastle/jcajce/provider/symmetric/ARIA$AlgParamsCCM.classUkSU~Nl[ZlkM-!)l/[F	JQqٜݸPo	W:eW{vHHP"<_;mmau	%$%(doG>fhH.34&֌Mݽ7d,[wW3:N´܄5+gynj$Rnf"8&YYNQ_!Vaޚsm1k;u޾X`ݨ/W
qwDCQre!#th	n24鸪E;&UmRɘúK(nb347um̲5;|NEU-%3=[͓S^$5r׻qFEPrnzBahF!g
KSѽj9eZ3
Mu\+Ij(c^S$M2YU+*ꔶlI)`DyC8^ʰ*z=GYmzpm%l?5i=3OK'g%)ᢄKz$$%\'D
9NNZƓUB+}ݙܜ%izjLsDrW>Q}W9߫Q:1&Ŭ>c嬦WԨOR]>N2NbP9eЊq2Z!hq=oྌkZ2bLF2:ޗqDpQBEq>iE梸I
0/KQ8v 3	Xϣ0%`V|3A|F[Fߵ'(9cFӱeUja^|);`8!JF0Z_ҩVFkcKt"v֥Mth]ہԟ0&S6K=l`xZwqka7J664o{cPn|`T^Ft*D
'|S	"DԕmXߣe7b
%,*7Æb~hă
S?CVU8]	gR骘G<ASڂXh+hI/b@51KDR7ѷ/6څ^)a}+^ܿ\7@lM{%lhaESu>^>isDPK"@  
  PK    A             B   org/bouncycastle/jcajce/provider/symmetric/ARIA$AlgParamsGCM.classUkSW~6	 bhDX/UX- Ҵm.c\즻3_qMl3SۯQgwfs{^r;xF_a㜄Pb42t$FW:+BEk\Mݽ06e-[wnZ.3E5CuiqkVԟ8é=5Cs3H-cf^7wgMqE}Q0e+ںg뮭j*#v"0C$(e,Kg}u<wgD:1_>BV&C؛YiA2Jڜ]HH$|wӝ]Pm6UEu]ݢ`}Pͼ~%Lt#mQZ8Vi3-tfY5\fd]썢k]nGKSjye*چ:ݤKS51*ZQh[4iƕmuJ[q6
lRzJǩDLxC8׆y
eZuxsdQM{N]U>v;?%i=6'$-ḄNIHJHI8-aL8ùv6Is5$L4	ś3ؠ%DT<E-@+x̆kj<0y0 R(yek;֊~(lRⵘF=k\s'[T'~[n?"02EDA^zd{2᪌pMYx_QLYgpCFs2&>q E0(#/'Q\M
,(.aA,'~܍Ⲱ-w\QHX$` 7l3-ΓNo6Mn{#ؓqUтZ\CJpDh=U+:ڙNڡz/&z~SBıd
? U_a
:Yl
Ub_PF
x=z
N	FTJDp0ɻv[<(A
Sl՗~X ?AyɟVs ӁBCTSW{µ#}AP,c1~ߥb?"J؛{/Eo pjUob3gе}]í-lNJ:{k7:w PKER  
  PK    A             9   org/bouncycastle/jcajce/provider/symmetric/ARIA$CBC.classPJ@=WLnI)BwW.
]P&2
K ?J)عp9	
MtnI $gjJdupT13TH11`9&j
I^B1技X<cU*&\Q])ϕ`u
wHhk2=tEv]5G. Vƾ];8 hn$%Wak5c{&;GD@3^8,q[_ŉAxhPKzO  
  PK    A             9   org/bouncycastle/jcajce/provider/symmetric/ARIA$CCM.classMK0Ɵlsu]s_6MQC]D,6Icy(PbZvȔ%!<~>Aٺ%(	)sz^*/uH	ڱ҇x"Y2r9k^n/	Q<01{+`8Y:"(kN8],15IDHs/bljBi^s~7?S3A$J۰aMkh<8\ya58D͜f]1}7uggmr
 PKo0  N  PK    A             9   org/bouncycastle/jcajce/provider/symmetric/ARIA$CFB.classQJ1=ikcӱZOPpB)JgP(r!t9N:u:S0;UG Mɹ7 #Vws?:6Q$>^*d2#n;!E"BԦECxٸJ9A}Tu7<	>ѓ4
ɌǗ3pUK)rsy
J1OQ Tnyf_ih'c<2 
,302`aa9GwjN*%Pҧf=3)_ư*F,y6R^(|PKC];    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/ARIA$ECB$1.classQJ1=k::EPԕ"CEq!aqIZ_骠Qb\ސ97ޏw g8"ȷK!Aط9`'M#Q:*H%[HS-gFQ.c!ao0%NX0NgZ1Ϩ^Nd9醎?\.AonDJbOMxv-PPy({xG9*T# (jlVH*-d|D	<Hkq5&v[P쬰uت^_7(\9\@
-
,S6؇\|PK{c6  1  PK    A             9   org/bouncycastle/jcajce/provider/symmetric/ARIA$ECB.classMMK@֮xzh,	BCc.5͖TTG9̛7K	noDhޘ, {/vJ}i9QDi9sÌ~1%O>bS\m*dzgV'f@C`G) C7(B
(D{8 4;քh%Y8E5V1y/K.q[
ˮ+JPKƢ     PK    A             9   org/bouncycastle/jcajce/provider/symmetric/ARIA$GCM.class]KAQss]
0	X7	!o".quVfՕQGE#,yΙ9;CLiSz4Z>7MB-$C56m&I̥n+--o~=^"עXt;"&~R-iz21J0YNt1G QVNQI9tͷ~d&XrXvbEk.ʐeZKDb%:/F;eȒw#bc͗	MR,#
PKk@
+  I  PK    A             :   org/bouncycastle/jcajce/provider/symmetric/ARIA$GMAC.classJ1Ozkm"PN3e2UX*| JLEE8C#tzOt^dv"(Hґ*t$5?,;*dLȾ+bN:	Ik'8K=}]۲[ϟ,w(>΀6
g'&áO!/H۾X Z#,ER,Q)MRhD'[~u1!F?5]l"Z$&20P%6-=,M)E`yRB>3ޝ +TPN)v!z-biPKZJ    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/ARIA$KeyFactory.classPJAqc<$^'#5",r̶,Y<	 ?JQS?? \8B!k0<c୩]iIa]C_LV%n咜Q:tSw'kMpyTo!9b7D?DȐ
fX]t5VxV<5IzVdy {	'Ӷ$4ך̴֒eH68C?|xS?3	cozL<ǈpPK6_I@     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/ARIA$KeyGen.classJ@4mj?Е"f6MEl`W
c:Ąt&i!*PQY;s|}0ƙfM۫J*a~7%pЧd-gYs"3wK'#E>L6Ke:rGE=f:c:cZmCG`f#a4f"%7'&h03aDjn'ǍYLN"NJRz(qe*B&h)9}2|X_b(5USt PKp$    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/ARIA$KeyGen128.class;o>Ff
0F
OfYbȠ__\X\_P_Z_\ZR`FJ<FK4Y3330030q1p0p}✟㙗Z䜓X\Z6NnEN`Bf000YZ
7BI!;P/'g PK   M  PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/ARIA$KeyGen192.class;o>Ff
0F
OfYbȠ__\X\_P_Z_\ZR`FJ<FK4Z3330030q1p0p}✟㙗Z䜓X\Z6NnEN`Bf000YZ3poB@9v>^N 	 PKu   M  PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/ARIA$KeyGen256.class;o>Ff
0F
OfYbȠ__\X\_P_Z_\ZR`FJ<FK43330030q1p0p}✟㙗Z䜓X\Z6NnEN`Bf000YZ7BI!;P/'g PK   M  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/ARIA$Mappings.classV[W=#HES\[֨(JJ!
Њva2I}om{bEw_ߝ,bFr;w;ow0,`(e(cXȰa1+23\PPp52kep3T102\Pp=

704241pjf5knfVngX {^%hTBSO>TPчZ
tֻyNsU#+PKX/>+-[j elr[E޹No(Upb	yl,,+-mat|d}J%2	9IAߍ>ӷh]$^r	3y+JMr"ZlC5FxEjDە0J$Lɔ=fPh
*`P+%L·1yPjR3ޛijwiUA,4q,&'|6$60=НɃ8L*yiocuM	}L$e/A~9CΑa5ȏl
jϤ_5jurDcNiQLhmb
i(C`c3,Bgy
ePD,2x@(Ca1 _bzX0/ʠPeyXeɛdW@]HS,UZG<ZBAK҂KK]hDs545֭jiSXO
ƴVM
TYۦm
GB4n'qt䖀Mh\ˣ]Ah+~s^[^k06%gT,wІlxІlx؆Gmx?+}0oKu75sq
F+{3he7fƋZVU>U26bvvl3vhm	AAA FAN.&^'?q<o^$
ö\<W^%xu7$xmw%x}>$cO>%s/$\lyx;		!6VlSI<!T0s|V%&Yp|8r.S[\\f`;fa]{c؋߳P츴^'dL=$cccуFrHI6%V#T4{.당~B?ezY?hD}Y?lXD}Y?aˤű͙+A633)2fb~AFr6E.`'㵉zkuY?#~g-X?eka',Y?doL%+<SƏTG`zIBrLAު%ǸtLb(:f6"v;oCFҟ"W\t{WN<I<-"6s{)3YQ#9 s	}
-\kσayd[:\=~''N-poPKۖ     PK    A             9   org/bouncycastle/jcajce/provider/symmetric/ARIA$OFB.classQJ1=X'(hk!S
BrLӚ:)Н`dTJ&\rNnr;̙
T|n+0m~1^=!wԲxރIjU #^W/NP$M#5u=><t2J$it$?Տ]/?^JPP9,Ax=S[u=C;q0baB
CVF.8 {Q$##oN f$m
a^y1+b!6XO˗w 3{H!	PKOޕ;    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/ARIA$Poly1305.classJ@-Mz۩EEAࢠ ..tSLI<'AB;psԽg֍EzK~avzvrAЕjL_4ftrTx,biiл+s*8
sS`8M|#΢JҟjgNS~C,4,4-,Xw_5_?+W&Ql5BV
Yu`ću hrd+?pkqRMɀNwg8=ɱc1b	uؿPKx    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/ARIA$Poly1305KeyGen.classPMK@}c?Ҵi5U x$؃(<lMY

 E-;fvy~~} ~EBQe]B^&I
ٳAp%*d"gRi܉vJ`q@h$x,2WwCzc,JXk:Bo
b>,i*
;ɋPnA[WaQmBѓ#Ap0k-4Q3!`P27%~cgkjroPK{p    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/ARIA$RFC3211Wrap.classJ@/mRm-(QwBtC&a&X
| JD8s/ýo qFP;cʍE'FrFeR$4N"Ù7{?νtǿ̙?g2zS.JH,ގF*Az}3J*۾߶07ˎzݚuu@2dD
54Mq@Pr[C.W+kcIaioVDB-=QQQpQpԿ/PK
\!    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/ARIA$Wrap.classJAdc]VHX8M:%Er\0| JY"¹?~!g[mt=fBTk%}]Pu%,!/&ɓ`Rzsr7NeH9غ֥"ZhJ#rq%w3E9gp-y;C(6bDL1XN'a@:  h_i,8CPK Ŝ`     PK    A             =   org/bouncycastle/jcajce/provider/symmetric/ARIA$WrapPad.classJ@ƿmjĨU/^Z/ xA<T<nI7a7X

>%nBn3|||C0-zcmt9aR*%]P*\YjCNL'+5-Y)R$
锬pzMժnv$FԙIG5,G1[#"Fq$OI&#;qƼwπy-۹!qPKh     PK    A             5   org/bouncycastle/jcajce/provider/symmetric/ARIA.classrPX"Pm=-beBӐa` a7xPB;dfIvk?G[JO?ިs<?55ȟHt4)(X64vt2̉q{ډ6M60iic9w-W󦣑5qV;n46j^pQӲڞJd7St=j.(m-?ӡdB[A4򡭠$jִaǝ*(FLdKr6-ºmc<=/BF>zR'(tO9nl&5jqF:FW++U`]pSpKp[pGpWpOp_@PHX$KPx}&5bK/6t->mٶC,:&~duչ*U.qQE+')rd}qg<k[ퟨ|?{[xNV;r|OnK6#_+2N&|C&H%dly#Y UE2I-D~"!G~PK6-    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Blowfish$AlgParams.classN0mҦ@вx	*HH vԑc#;Mշ	N(+XX|{pQ!!O	SeuN\*|nP\jqgn++uN826gfU]+2^d=YS˙̭Rxw~g.T~-/ռl3D%ЋEvǓל)s:`z= $NwN8q6j@oiw{KkEr0V$OgPKlD    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Blowfish$CBC.classJ1Oz3Z/U3"B2BcԹLy,W>%fNr3]o@к̯
1Og	/xH0,OH2Q '81D()\LOr$E\I??\FX1EIѢk{%lh8Yʖ
m6ml`f8$*BF9-1Vq]4/`sα׾`uXPKi׌    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Blowfish$CMAC.classQJ1=+8>kPPP;V2MNdgQb&pn.9>?^ `.TKFԻ{=MD.bɄL3U"-A'T	&\X 8>F?4擉̌?	ibVR)MX ۪\Jt$y9ɽj(j %,êk>^n@@$&Ң[vt/}8ߟh(Mv;`uxPKqS    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Blowfish$ECB.classJ1ƿiūa<(
 x.x\ӱM&KZ<| J."x	|_+S1{؉3-+;_*'JiaMg8d>$Jk՘p|N*2:l>xrU!QxB>dpqt98C67|0%Ful2t23;&spZNphw
O}A#CWPKQ     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/Blowfish$KeyGen.class=KA5#QK"IVL',zr{n"
 !:0ü?8á:Aۛ4e!^A_ީE+Ό*,gB_JB34sY-ZʩTZrbdʜ̈W{hxhz<qw%9+Rz"ƿ7PZC	a Fs&93F
cmĥvtvCx|Ap
OՖPK     PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings.classTiSA}õrDE(\#("HVHTy|&%Mm,~%VA)U eoNBR|~_7lrrqs8nrs1qcc㮂I`8n嶅+E:z:=75fhL~d1Ò^3t*-)ds+|L2
qF[Oɝuv鲰oRJoٹy/-ڶkj3*t.
2ޓCd7g̮"w3uOwKRrIeSUHhsn"ixsCie}K2ΡmY&mnKE;ed2%=Yd)\HV"cە<}WZ".m
j^2ГV
r{
&DL)f.wxa&tYv| 2ي%iF9437*χi|
٭P1yb*xb7>^R exby훷A<EO7qNCM40A ( #~䵓Oݠ]?Ω3Jx^	m~8ܗ3@?Z)V"َPwc!<A1VlHV(9 y#5 ȲJ 9ŻЫZSdFу4 PKHN=    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/Blowfish.class]K0߸Ygu&La+""CϺصHd?+?J<^7<9<'p=ۉu\\S'w	NDTH< 4HHBJM>;2U84}᪂MGidfΫ.*e*]ZyJ3t}9:.hpxMycXXg5	bV&HN[8FERGxKئ.$m£jeC\!։qPKtQ"    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/CAST5$AlgParamGen.classS[OQ-lYV[QR. JH=nsWMy47rHg:379|	`/bAc$jM9).gH/xqT,zR\|6o{Qoxq[Brx(Cj%Wg\_qAKeH9PMFr*IݜW`:!um>߰D1p(XrSǒ}a9bV');ɸewrЪjÞ%+E>
̔O*UQ5Z*/d,;JrI_Y^	iueE)4P4]Kɛ)/GP'qiihФYCV
m:4\pU5O{-18wYnOTG0p ?o)S;w4q*/)<q"S=l:nE$8ڃM2PzcTG==7}q:pboi/GOZ?|;Fƥ-H)aZ^P~*"`N:S5edk[hjt#dmlar'ĤC#Q/'/Jv)#6_Г07dmm&D6WF6pv?QN͈9UlAd7ηvah43g2YPK1=    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/CAST5$AlgParams.classVmSW~V0h$h$6"UCCԊӗuUإ
7mLIۯQ$:s=g9=?
8߇>aZM<hڱ޲2wКv64]\M%sMTJf%@ N
eL
쇊f|6)Eba%ė[R,fڃ!Smj+X@bG?ҍgYRlw!{x~4jkT9֘F4'lYL-(Ej0Ph&E[LDCV}  YzbթG
vTY3smЩ6'ZT|Y6+	:!ҫ&[<Wf*BBf[\VZ6\Dɱ*ŕsU;2'
 ]eXzB沤rjjRf34T^ʡiT<3eVdSs2A:ߤﭽbkEyYD79[0\j^K793">1.CDDDDEDE2#L-vQ~Ɖf[߸btq!o2Cij%zVui6%<eKɩ"ɼ}dI{7E	>Ix>	A%! aw	O07AHF	ݕ$LaIuܗ0sX& #,6HpWnn nָyCn
*7_r<Vh4ϭGbRZי
fmE=z"81_	@3F(.*lx8n$z)?|z}IH$Cx1p'C!VI<c>?8 !h~]OqoCCW~/PolZ|	w!c0b_@WNv6`s&\Fbq҉8"jj0اTI/)Gn
<Yc%_Fu<3r6+z\/|<Z{BB?G0PK*:R    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/CAST5$CBC.classPJ@=WLZU
㢮\).tS$̤B>UG ;as?? pHPAR22$QcbPg\iPe,4ew!8]&R JPgNJ^H(TdJ>U-GUlLF4XBBB˂eae]]'56Kr`
4Y#ۏcXj-4poy

i^@xg8=,[`}Sk80buPK"    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/CAST5$ECB.classO=KA}\rߍ`qb-b(ޒBSf/FePĽBy{0{t0f+E#1;fe%sV7Tir\\ޝpG=L/yVU9y䷑ar«g0IlNCl0N!Ful2tɵdE;GuЭwG;l@r[KlvaUPKKc     PK    A             =   org/bouncycastle/jcajce/provider/symmetric/CAST5$KeyGen.class?K1Ɵ^w=\AphAq)vcܑJN?JLi'o	M	jq-7^r7~$:\3csAJ[D/B?^(-4sY-uSf3atնٺ$ʜh}4	QLt(ON"԰BD''TDCIΌ-z-g[Nue@k8X"~ۘn9=BPK"ǎF
    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/CAST5$Mappings.classT[sP"h{ZEKo	ҋ* #iHi0ILu:ハ(
*v9O K(0ff3aa00p> Dz [ruK58:6H6u].GՓ&ȁ]34gC -RӺ&d˦9Gf6Q-⪖옖ե'"./ic紖VSȦ&Ub~ZHBkю-6,J/jQ)$
*qJ-	0TeIeNb|XQ5*Z3t`
MfPKmĥf+.8j8ڡFMip+\QTfZ򤬧R>ՂnTiHlz^AԨ_Rr%ht~1[S1#c,yt;ga~Xs^ 	>%Ms	l:ڛwE.A.+|0cTs]kⅻZ"A$
A«bpkdB"Үq@YDB֚OBw&ptGk@vsgxhBa77¡}>)r
74}Aoq]@v6N;kw(~;"3"eahY j`+rȆ'0}PK>s  5  PK    A             6   org/bouncycastle/jcajce/provider/symmetric/CAST5.class]K0߸Yߟw^Lo2e[MKSY^	^Q8˚@$||cb
ݑK;br*E$/ơr$8y^IGJ=%,	SıʳaPUFd|4uЯ,W~VnTQyVټihp48,9ZmXXehi?u7(Zk4Fѩ5Vs
@Ĕ&Er4^sacXX$i6:
bX#.e6qPK3#    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/CAST6$AlgParams.classJ@Ek&X
.Z7B\XJpQp!!NHfdf_JpQ$vo{0?_ 00J;Bӹ
*KpFpMZ囜[W	V{5+aԵu1]YU<rkK^;Yyim{ᄱ1d<y(yYU5M}^	B:WJ
3@-#?N/>0|!HVF։	,x9PKC>    PK    A             <   org/bouncycastle/jcajce/provider/symmetric/CAST6$ECB$1.classQMK1}׶umuG[=DvAP6
۬ۤlbJO?JLA<	̼7	3/o :!ȷw!9a?YsCDӈ ̦TӁzl"mRNY6E䚆g7ݾ%Ib3g17`_Bβp?AшRB1PPP%k/Տ>r U G@PЎޗ,UZR,L#.VdwdsسiѺC@qg,vuE@'ajmQ`35"}'PK͛@8  5  PK    A             :   org/bouncycastle/jcajce/provider/symmetric/CAST6$ECB.classMAKA}n[]CiCPquGfI0q:o@'j;!ԯtc.}fɕL\*>L*]On5jc+iMڗQ2)72pӹ+2N"T@[B8CBM"DYH݂T
>U'§5h~|--
WPKDIT     PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/CAST6$GMAC.classR[KA=uˮv˃"OI66Zz2hV#g1|93${"&H֝M!UJ	NCdC~S.;BrE]f=)Zw\Fpz^vjϞlA.Ϣo!8Ur4u~9n
\ŵ')iy&A6ΧVT(]LH?UJ3
0r+X5Ś	y0uCl"R\B9}-wuwVklk7l5bO@PKSCK    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/CAST6$KeyGen.classOK0Ɵu]S. 0]2m2PS$٠@3'o	
M	jq#^r?y
җbxř\W-h"WE 9,ゖXʙTZrzWbSnraeN̈|4|>8cKFsR:qJtj[~ !"ԓb&r$gaqqxm:2 ILyⷭi?PKZŏ    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/CAST6$Mappings.classTO`~^R*26 u"33F?uv
fem`n]{ۯ'? ,bCqcccc*85	d-oT0m-2$vƒxrlИo{"~u>.V'ȭ
3^x~OfԮ0L[y:%WD;nV*-(~ˇ"xMh}-cVi㧞bnyvJgx~Y]fe[BޑM!zn]GBaʷ-=)Z%4G:}6mx=H+aR=	b;j!9˝M\d{CJvW4"gzDv
} Ջ	<R0
U(xס+970&H᱌),Hb!LX Agox%meۥSn
F Y1IFH3cd?ۘ
ៈIZM|G12_RǚG߰CZ;P0Vy'k=ձޝ0+!%hq=Xs` ֱ+/IʤSD?PK
Ic  d  PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/CAST6$Poly1305.classJ@-Mz۩u1o"BP8$fR!*`I,zs	Uoq!b^4e	g9Y2%<k_=<\2:
܀iqEuE<U 8ֲ=w:wvffna$۲vB^}pu^,s5
R\!l,8p`K5_Jݛ8\S-S6P7/7hXαubU?PK--    PK    A             E   org/bouncycastle/jcajce/provider/symmetric/CAST6$Poly1305KeyGen.classPJ@=ciXMեE+ȴZT|4)v!T
.tSLI,W?BD\;s9~~} 8^EB9$(_XWeٱ;x<'*rYtq,I%
yKtjJlp(9#&*e7k8LS.<o%e
AC:08WyNs袀l:Qsb'p{aӚ<p/c|k%s:a?ͱ=$tL܅
PK)    PK    A             6   org/bouncycastle/jcajce/provider/symmetric/CAST6.classJ1K:~,\*Q EXPܧ00͔0JpPUirrr>>԰ϐ9<zb_ڍ/)vb(t?T'RR;);f#[FgKVbCB%CV񔡑Vre?br?KSIKiʶ\Dh'5Z;~9Gs8",Gc\XXg0$k=PZ/Hj'
B&}7FN}b6
p4	q%.w+]*1G\#PKY9    PK    A             E   org/bouncycastle/jcajce/provider/symmetric/Camellia$AlgParamGen.classS[OQ-l\-***(ЊPCBq]6gO|D#&&c]T؇337휙??phI@c+жL:2$r$\TP)}D15ھts.	,z.%U
l	ɕ{M+Y\=v=KPHx'ۜ};'qB͋ 6)""~!D5^=ۜ]D9p~v)$`fsTlTRr0&U
5(F5MK7꥙-C*[S꛾UY5\d
BVKv%dk`Y|fYU(JTM:S6D	#CE9hl8%-2j6
NiЩKi
g4pg=`JB$x6]woí؅m4whH<z߯TTywI%q@3b7n	dĐ$Ǩqc:.ᶎ_
7tẎ˸&y  DAq</૮(Btf;Em1>ъ4E7ѻTVE8F1%/NvKb.ߠg>G&3lSÛ[E&..lnQ
,e@G8^jC1<
 PKv    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Camellia$AlgParams.classJ1Ek?@E&i\qDt+G[
<޻ܐϷw =ax.qkyXO.w[K%{0+]*xUdM#2kI",A][^;M2ƈcu%Y>z[cz=R\ka3ŝhZ0ܻaBb"n䝍ܟs'R (TPK    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Camellia$CBC.classKK1O3n3"fBQ嘆:L\
X R9|$8>A+ZrL}6KE!"ǒ	]LtRi*=2 FU<aGROD4MuFR3S$̵O\:9UȅS(
JBw:^.H%lpEZ맩<mݍZ{mO@xw83,]b/_ĞUVhPKD̔    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/Camellia$CBC128.classJ@ikҤR.($.tC3*`IQ)HA3+SlNȯS9w8aUqd)P$\Q?yf3頒{='?#LŀK8?\{\Dy	]d]WNA
b%M,۰ж`EW?
_O	K?

hiY޵)7uCnOX	%EOӖcKsPKAH#  #  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/Camellia$CBC192.classKK@ϴ5ioBZ\\ӡN͋Tο`A\IQ)HAgqy{~pm"%A*6%`#N,<<+1"^Ok< N(e$8ap8d \RU1ϥ`߭AևGWG*>hU5&&A
nM=Ýf]WVARlԱlBӆE_|Y'H.(T+좡m!:*S>;&^'z{cOЖV[
> PKGs^$  #  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/Camellia$CBC256.classJ@ikӤ.*
	.]PL*d+
X|(qRT
RP?qy{ypm4/E"+T]:NXBG2YdyJy2	WcE"8Tv="}4pIU<}"8[\"^̣

4,h0np;o"6뺿vz6j ,Vde&6V}f	 IP)UMuSWh:	Z%<XZnk݀PKM#  #  PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Camellia$ECB$1.classQMK1}׶umuG[QQ< (z<ifMTP4NfIyxypb{OP9Z.ŗ'"'XKٔQtBo.u`lBf,Wr;
H-2PJ	~	RR.ؚKh$r+d	UtIe vKE/Ᏹ(T	:YH+b3p3l4W&:+2aM'rr;-Kth#?3Ta֓g|	
Dv(rVQD=PKŵ8  A  PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Camellia$ECB.classMMK1]ׯz*z	 T (xTӠMIBB?JLvox3o~~ .pDhCBƔDy'r¹MK5S2TVcĻ3ҞYQŅ,F.7Hu뾫
3ie,eйu]ɛ--6#ie34@KRM=BK&de2p$^8:F3n@vy9>WNN&؎$VPK[Q/     PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Camellia$GMAC.class]K0߸:?8b1DpEމ˘٦,&(1dҋrCΛ|~ 8.A\'^ҍu&KҐ*b lӇ'y3yߍ*dەBQ\v3 qEG9AKNvEHp'Y
g%B/\:[p>ڋ\֘3YY9&^6[MT8IN`KF~YWLUH,,YHcD+&,MaVW5E`51B	}Hn! o`cbGBPK57M    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/Camellia$KeyFactory.classMJAvca|/C[$W`B6̲I`?˓<i7TuC=>>\8AsBZǄ$+k-	]E6UEdX<fKµ{غps{'olKCZH+~c7F7FLgHQKEhC:3aXi'v4a/C7%zSct!6i~ |	+_~4)!PKI $     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/Camellia$KeyGen.classJ@4mjJpv3]YiN(!NȍɴrP|(q*
nYsἾ= 8ÑMׯGBB]XKxF0dHe+Ti \e7)Le,
8e.iQ&	WRk?\'W0/MM&,;؊ј!ծ4w04ѨŨeۆ
;6e{ق8~=^̊M
5E} u}o5LM- qaUW|Zm=lwPKtp%    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Camellia$KeyGen128.class;o>Ff
0F
OfYb`__\X\_P_Z_\ZR`E.J<F[5Y3330030q1p0p}土㙗Z䜓X\Z$FNnEN`Bf000YZ
7BI!;P/'g PK],   Y  PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Camellia$KeyGen192.class;o>Ff
0F
OfYb`__\X\_P_Z_\ZR`E.J<F[5Z3330030q1p0p}土㙗Z䜓X\Z$FNnEN`Bf000YZ3poB@9v>^N 	 PK   Y  PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Camellia$KeyGen256.class;o>Ff
0F
OfYb`__\X\_P_Z_\ZR`E.J<F[53330030q1p0p}土㙗Z䜓X\Z$FNnEN`Bf000YZ7BI!;P/'g PK]   Y  PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Camellia$Mappings.classUmWU~@rViSm6lJ[a
	ZklFXϡz?qn6K,e<3Ͻ3wY2\dbfaepaAbc33\e047`x0 3x_-Ւb+[s) 2YyFod'	]ٹł,;{Kk*c
FV\|eKeKȍ_}1<+s;R{z+sWr^OuY;F6;7$s`Jdղugc˭[s4l*piqԣ}
\X,.,nفچF@`7lPp2z^k_j_0'JD+J*Cq25%wB4BZ^ݶ5,Q'dʪJA-^UT*'u!:oJx(
J<;ОMeGŬJOxʎՙmݨ[nUi6ՆCt.TI9tiieڦ:tuX榪lT%;lfh&&`zcUIn,Ƴt_T3xẕ>&D9$KN4sh\ZmP^EKCX
Cq#t}Z.řyMdXQӕ15?Kv> E"K\Ż\\Ǆ[XqYTDCں9TEj
AbO0L>643.iIcV7>ͅC2٪ЧF7>rƛsJd2H NK'N*5@		h?qc<|&s>~:0{2N9Go7x1̑qGq7F{a+=τѓ}ODw"gad9[lKaTlt gctGHb=qfhCۖo	ϵKxO{<Zo}Y@*sn_d<A_PKD.  7  PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Camellia$Poly1305.classPMK@}ۯ41~֯

ՃT`AP$nu
)`7EAzx3ü7;3lTۇLdvEм*?휜k3z3)ALSe",X,zZČ[:q6₦Fȁ0q,2#?T3hYqǸCݾwgOiInTr +XA-&IVX!t҈7]ˀA_U`7}abTPK*    PK    A             H   org/bouncycastle/jcajce/provider/symmetric/Camellia$Poly1305KeyGen.classPOK0}qvuکGM(S<LDփw؅6%X
~ ?
%ὗ35P%tcDqE)YNΏCr)#P:jEeL!9t<JfyKL"DZĄkj4~oz ?L!AA݁a3uF	1*Y{pǄ"zխ`c\<"j	afdpCZhZb[b۞Q; 8js_Mp?PKb"    PK    A             E   org/bouncycastle/jcajce/provider/symmetric/Camellia$RFC3211Wrap.classKK1OCۂB0֝RBJ1
5u:3$S?Հ?J)	׷ '(6[}ʹd!8Ոӈ8i((W$F2l"PEM\߿U,b?1gc.hG9d"R%w?t:LS."Gehdlb"h6WM
c>\mc
 
6j<lxhH dZM.
\1к(P?Qdʰ]eyv:u~PKR%  (  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Camellia$Wrap.classJ1ƿtk㮫VxzhԃP顋scL,VTP|(1)E<|0/o .pĐG3ޕ60YveToJʵuc6E!+*K-7;Rɥ"Q;o7pj2L]B׏8.Ga0ƣYXy1RzO>l#lc$W5BMCPK,r     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Camellia$Wrap128.classJ1k㮫z$(^Ճ҃ǘ5e7$[ao}%O%fK"tdcY} 1Cۛ0rL<*%]P*\iCN$24nc͕+_pUQi걗ESq+tgMcp)z
Z"p"3I>;ƐMR9}(Nz_̟F}u߀EwVhn!vqPK1B    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Camellia$Wrap192.classAK1_ڵqZ=zZ/EZzpP\ӡfd+ꩠ l)^ăNMfx5ބ5F#~ng)_U)ʔUQLr"Vwh\(ldJ70uV3@/J[騦]<hr;-LAvЛhղ#a!HA<6lJ1Cq`46z/:x\`rkx|#_PKL     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Camellia$Wrap256.classJ@ƿich=	
RqM%لTcy*( >)ŋxYfg~||!L	kmt5&;Ҥu\Lm]Vd3׆LTYսUG8-RHYx3yΕ7O:i/?JgF9nDOl@pڟ)َ-P#;v	AR1lL9ǎ 61BkiuWG
o+}X{^#Cl PK]f     PK    A             9   org/bouncycastle/jcajce/provider/symmetric/Camellia.class]o`:ևMNGm	u4zkHIiIKKyd?e1_hҫoy}*>Z\b,߭pTE0
zʚٖ:Qv¦](nGѷ*rUN^l'vƾk;jXՠybnxIސi	͂\X[,x%s;׫+=͒ʃ&yM"+f$(Xu4on몃~6 -AV\fsky
M-m]=.eƠ9LhȘrc@n?	Tx2lkXcݜ>̙${!rmnx?T^eOO81G6`1Y"SSr\ g6L/irK.L%_UY#_4I|G{ddlE=JPKI.

    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/ChaCha$AlgParams.classJ1EL;V-~M Aqaa&$_JpQbfڅۆx{o7	xBH%-a.WG3BRgT9LVx	ft-0*[g[{N^Y%ޭtN!''9+c:;ŀ{=L\R¤%VXQ6jO{G+E{轅Y+8PKVL]    PK    A             G   org/bouncycastle/jcajce/provider/symmetric/ChaCha$AlgParamsCC1305.classJ1ߴ:Z|  iY)B\((4L3$L}+]	.| Jv!s5m4кFh.^.6_F7'126>N0.vaU"}+%2Kxsvg	*
Dl"	=g<J'E,2Et9/IThy1K)riRY6D=7C#3Eccr8EN
Tٹ;qo4DŽ-}
,aPKVM    PK    A             <   org/bouncycastle/jcajce/provider/symmetric/ChaCha$Base.classJ1tצm՛7C[ ECPЦ&K
X

} J3z_1A4N7J+Kpn쌽	[W0gJK9./d5j*-suYJoؒW;3g܅ew;K
`OJ^檚KKQ{mIH#)()⟳LCZK9p$GB6zD
(hjHPK%     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/ChaCha$Base7539.classJ1ƿtk]ZMEE71MM$<| J̖xhf&)^DкVZ#c'̵w>LتI=QZ:My󳓋e2|&$+yQciBzĊ&\9Nm	n׀^FT9"hRlP
]

Z6P	lFkff$j-msPXԝGn@g@.
.oPK\o     PK    A             E   org/bouncycastle/jcajce/provider/symmetric/ChaCha$BaseCC20P1305.classN1Juԣ'	ă'v.&XH4|(cW8ibBgL296P/	NybzBD6%r=Ys\t sͅd/j*
E(	6fGūLX*f%?x*ICQ((ju7'!* q4Ǒ.qV=Ws8y_bkK4^׭N}l	PKNT    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/ChaCha$KeyGen.classMK1؏n׏z xh{	BE{boBc܆mfIK

 8
	0||iuZ7eh^B*⹠&OzY$U"%OLU:cUΥ՝,N?,Y"yiJͤZ,3*?;3ۡ;Kr>V~Caԝdb%x.?U!j~ B2c= gkoYMaēv;C* wX7k|Im_PKB+    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/ChaCha$KeyGen7539.classPJ@=ciHեE *"-"B	c:$L,W?oνιw 8nP͡ʔe¹}uqu̟e06<easb.,e&f8CN"D:_ܔZEj0ZsV5B*#a448Z$+STY<OAo꣆
zp>C=ggSa4tUp6Q7Q
e'hP>qFM>$ȷ	~PK^    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/ChaCha$Mappings.classUSX<r[U.҂,e]K  T^K	N؟ IWh)Lܓ}s~ wq99.q\qM4-QcG#11qc'yx*o;é拮g'3S}YIXupDԢ{(m{#/ag蟩9tx2G츦S=Xnt'Ldv'H-$feKwm):؆:C]:ij`Wz^vἰAV(EK\";܄a7/^3Tj$ORvpM)e/ӭ.ua9}KCX{ab'{Y.k%<Ϊvyv״Je8nYpvmcoIMxvVixZqQ_]ؖ_(I77M*'L[ȶ!
U\IZR,05
-ýI=
E)#w}ҚHNX.(W*KcԹRLzJ>.5?27;s&kO61Ρ|XT1%)\Us+*1<j<c/XzuDZ鳪NVzq?Å zȧw#?@z!F/hr3>x?=d?l`4y.
G(GA%& jL;b
TݫI$OP:I4hg'ENHDc`]v "{:
nn`Z{}/;X"@m}PKVuV  '  PK    A             7   org/bouncycastle/jcajce/provider/symmetric/ChaCha.classN@˴)x%cd~(ڦLI[Ix,W&.| xFWԙ|3sl1$vv5G99C=axBm˕VPh["<ip-ite`NGFc潠p6fMNP4˕Rp
Jx£j"4Ḱ3\Tҁݮ#Hq98ơsd89Ye?MKZ}4<IoSDJ)CId~~HC`\[0F{$ZqX$.')
qN!ngPKO<L  e  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DES$AlgParamGen.classS]OQ=,||Y肢( JM
Ƅ6wo|DG1.Ng朙s'q<.!|PXKnq5C,KŢ'g'K^JlQXw:^<m
ɕ)4C%Wg\_qAKeH9PKM&r*IݜW`:!:/s3]\ذD1y]))cɾ0U1d2;jhUCIa
ӒLhf'P
(AMO[Z*/s
Yv,!UX%̢NNHӯt,3ɋCtq/.@.)'o/Ƿ鯓444ihТUe
m5\СC'=Ж\<,Ipm
_ITG0p ?o![;78o7v8Kiy~V|m"QWMhD%p=э;:zpWG/cLGFuN:`24؛蜗u#ߘUċۼT(Etk!&s#	շq}fS;!f.1byd4~_0zfb"61lex4ա-<G4/ogudpgB
c4#؊n]o4thf2YPK    PK    A             8   org/bouncycastle/jcajce/provider/symmetric/DES$CBC.classPJ@=W>n.;E%;euj^̤B>UG ;ν9羾?>\ᔠzc΍Ld~kTsHxCGqUdyD2a4Cu8G)
d"}9,S雜
t"WW].7m Z2b~ʜZ:,[nuuKԑ7v `=
]
}sBg$BQ1#5t=)qX{_+81Hw&PKF  	  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/DES$CBCMAC.classJ@-MSEڅQ\(]v%]PII<O|se>? အZW*V5C/cdBipOT,
<!iv
?D*}zSNN^XjnLfZ2j9	.V3q?4JPадв`1x}U,GxT-IVbĺ66tbFi]KD1Ѯ-GC4)Q;o?}CgPK    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/DES$CMAC.classJ1gӂifB؅`WeLCMTr5`Lu']4??>\vZ*U
A#F]m&YRQnX2a,LJEHY&\X
 8L
2Xf$QjMpZؗ+Tr>
HѠhR((A>,۪kEʺ 5J6+aۇح,cgcpD1VZtwk=p1.ڽ9ިD^?Щ PK    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/DES$DES64.classPN0<MӤOJ
CD0!СLH:*.i)R)x 
TP};w?_ <y+bӗd*8e2Ox.by	Ue
˧'Xp8Me.f\R/<x	.nv2Q?T\DDÄaii<6^TsCwR^	6Z8ac!A#Hf:Uck1A*zhkVԃ'{5]5-pԹ/p\c+8hx
PKy    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/DES$DES64with7816d4.classQOKA}i
:hA40$<Ex	A]Y?V'!ЇfUB=4üy377_ 8$KʠNP.{F.sK`	+]uݜQ(⊙
xٔÞo-NP2-ۖnWVzQ_Es"m35DKލ?éz0
}q
ERnެ0hR~V'%">] HRX7``@:dk H?4+Luo:RBY=6=*jMatHu&_Mdg	v`oPKYM    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DES$DES9797Alg3.classJ1LNY(vQP\.cԙIIBUC.?w_ αG	JW*Q5A]=q"&4L(L&Je^gn,bc.,f&
 8G
FF4NXFrG$h,<NUZJ'E@Q(QPZnјH=Ks-`12;H&+(c͇ulzMiVZ"plvn;oEgSTzwPK     PK    A             J   org/bouncycastle/jcajce/provider/symmetric/DES$DES9797Alg3with7816d4.classQ]KA=}ۇDhA$A~<E6;c~@?*U ;9wz PA,_x H\
GW׷;pؐ29e\K8\Fݜ'Qܾ$m*Jڶn
FPb{i
ǚ(st?=!818|Eܧr,l1P&_EН^OP 6WjikXԐРiX"D\)єܯF~Þy꧱ J:XӡcCG*̖Nl!pnRrd*Dͅ	*rc16H5Bv*PW14vPK/R    PK    A             <   org/bouncycastle/jcajce/provider/symmetric/DES$DESCFB8.classPMK@}ۯmYn*xh{p/!'A1n5Mn*gy
XI`a{3	#CR:b&f$Y,34RBl&B#++Ep\ƝҊDz}(e8JLMM&*5ZsNѥgKgZEr8
ܕA9:CV]4 Z6	Zeq(*ܦ>T` fv.KEPKZ     PK    A             E   org/bouncycastle/jcajce/provider/symmetric/DES$DESPBEKeyFactory.classV[WU"Q靊kVF *090gl |%%k)}r-X}B>g}?
h	UB70NKhe{:҉dRDt\rF/\'>RJLeS
'ƍ	#WB7rۚ\9u,;aMYf&4\n;mֲQ+ȹXKQВWm-e-%;DyװL	g0.P>QuwD|f$Ch˜Tc^Rwe_꼵j]sI0J`5ӗOX]1]jyA訃CJ	4ƲWw1I{ǒ-odp8V\ثlfd:
]/Nmbtײ)d_
S	5jNicWf]+
yW	t,}S8dhh341.0\dp
2|IifVMS 3OnPbcԁt*6>u7k,&aj;!}KT%J,j/p}8yȋ?8P^er8"Z&I:IX`_2+j#-G*&8v-(
pKO)hQŧn+h!
(8s!T	HЃaw|. )#Feń/e\W2bх)ݘы1-	ℕ#roJҤ8ǩٜv5}yLOj9.^tAA\/\T'&X*__qBZPF;C6C68lQaC~?A|gBR"zsDgxѱ2c"3ITG\Eih 3na<EkT慞}*<HXzJuJjm >G:Z{b7=EBg,5*"<Jhl	UqQ(B/hn*A︸}xbӾ甮_*ߐJ=g>>8PKO\[Q  	
  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/DES$ECB.classOMK@}nū!xSs	q;ԭn
Y

 	x|~} 8C?I'K
3ؙx4K-Y:_gJ7}Q?޹,Dm͋Y,[%z5BK*\Od9Cΐ$w}+sNbZ#aLdtnb{u~`@|
;+FaFPK;      PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/DES$KeyFactory.classS[OANYrTRdErŤ}cemv%dOA=-m5af}sfη>Z碈EE}sP2r!|ȬiE3kl,e
`hRh.ܦؓ]Ι\t/3pqkZN˶dehrA7yf;\q=̋}[鋖<ߞC|ӱ'k%#*Jz
ܣ
Wd.kõ
{WR;|&L/a-ohpܜmdϷ7DސzuͬtuG9awR"qKg-/OY+aG+GG7GG/%UIu3ʝjN{ջ8rC^Ljz]gOɭ4})݀|5ڐ<1բ%NbĘ2jn
4aZ0nkZnik{0IE>\ll@$S;}_LM'qR15.@t,XoL ^9ގx)}b5++Ct#~E_ƣx7޾^ã!zYU"(֤v$h[xJaxL8F9F8p$8SɌR=
&ѓGzLiK1D
T1kUPK]    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/DES$KeyGenerator.classSNA[EYZU-hjHz.wݕXķD𡌳mAR"u!a6VcQ*^"j\2q-!<ؕEN0wO@h0%̺/O)[})r]`*R5VJqt8BYKI+t|;(NQCpN˰|\S)GFUQ-BX\+{XGz=AqĎ#y)TQ<RP9֛-]ǳ"!zʾndAC`ࢁat'|(.0̬>loeOу;aW1"jΟ1i4MR4-6k<R,ڰ`etZݸj
,"i}f~B7&Fp(nkqL#cbjqg.(3>UDIB,/E$!/"Ӄ U,WZöb!b&Hљ*,
@*' ?D*q:ԻX$/cX7E
&$&a/PKt&  *  PK    A             =   org/bouncycastle/jcajce/provider/symmetric/DES$Mappings.classW_WBlqG+*$  Za05V%Y1-}w}ٻUbO{߭Z{?On}df;潙,_ E&VB	aj5u3	g&C8z	B1B?a#!NDH!M		[.!\Jp9a+
W!\Kp=7n!JpN]{#Ox҅gx񾐖6u	c.VZe>U5*0-̆"4/iP
&ۗv	 ѺXhUP^B"djHx4Zr
*m+$,O^9ږvU4,gNI5lX)|K-eǴ4˾dl2P
-FLe@l`·=W/c{k5ysF㉓ۉybBS$tHr$Ϭ@t\H.^)1okt*h(`2貮znQgb^.Gs1`5lfF϶YXt"sWu)kz8tFZ_Xv?qF)3ZD)4jYn*V]9#:(-D
rl,y[fpX_Xz	E2WUFx?g),OEa]&8d\hU{GpIg3E9O<xkjho%
艨H2>78 .~ps͚/%|Sp&KQ1>oor0hL\GH%7ǘMm	J"
fǧ>~eoLl}LdXLIB+%ZMƶV:x.-4O˞g*)=wA>腙uV9q/$'
և?}77͕hU2IOO]x΅yFv^]^O_]0"VF.fi&R5V-#8EaL㚜zwtxp7v{0!^%!.y<<xTx x
XA_]H2x
_	;)ߺ1O:$MgDf'_CutQv0?cc0Mi
2`,|e?~ߍvB)xopvJը3w]80U7a~/AZ,XZ֨2mfz$]%$+-2X"3ԅTIcK;YJFK;EhǫMvBNN]]"K;mli~FJ]liՠU2*WΓ>!iʞ}}2x	{V+;^S~ZLA05y:eBɠ*srmZ4{[kVN~4Ú3;FxD	9В~kth%{OTo	L]>_Áon~ePK!b    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithMD2.class]KAߣ殫}eP!
D7QTP8~ZHY	Bss}9sszPL	Xs<:	j2Jb&fckVa3J /
"?䂍T*{B1=	C(ɳ)GnI&f	8s}-k!o`aBтE;g̎mީ ʰáu%TTA(x昄J;_k	8DH wLw)J)n[yz[Slv

PPK%    PK    A             I   org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithMD2KeyFactory.classQMO@}k,Z?.L<1o
$T&x1Kb+lI[1Yz1GW`ُ̼	5$BG<uZɍ/L8Ep,PimZW}Q"r\R<y6hF<
\Nk/'l&#?	d(qϾSfT"BUtQ.K(4M21,/EnZҊ=)PBF:	w9<0,H~]"#qȥ`I|@7 #/%ͨW?ς7p+ؐe久PKNL  [  PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithMD5.class]KA㚫}eP!M]DQBA^nc!3kj!Џf%H!ρg΁9_ ΰOjp%#\x	udLD}	͚֬$4iøgA_<9E8#rUbz"QgS֓Lsq"Z}׆e#ocFM;g̎mީ ʰaAJ:`1	v	B]qfA&s3S'SS)6SlYVZLc5t[6CPKO%    PK    A             I   org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithMD5KeyFactory.classQMO@}k-&W=a(PIH0b튭%mgă?e\Q.fg?2fޛϷw N F=#TONxQ;aҮջG?}Q 
YN^]æ-d9\бM[4F#%쩭mx J%7weJ֪Z:uu:zTſR&Ю*/En
=IаD
f
21˳9·,Hn]"paIz n@f?K^iY6˯Xo*UV:Ks/PK*L  [  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithSHA1.class]KAߣ殫}eP!
AW}&$t8غ+3k?~@?*.xx_Μ	|!d(kB=R}MBp_ǁ`\%8b"Phvl7g%H;zF鹞DՓP?!\dO(HJl
b9ѓ|pwFY<e\_Z[(XXP`jE.k6'mw*ȁ2fXs`cA	Ul
&
CZhBynYlY܌;;FTv7f|z[Slv

PPK2'     PK    A             J   org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithSHA1KeyFactory.classQMO@-(Ń0ƕF@	&^Ү
[VL^L<Qƕ`boo?fvS&(b q
7:'vkg7z.%&z"8OmFCNY(Jth6p.B9g3t
шGkJ<n2;򃘠$K}ujY35jHh4$	:ZWf	&PK
2-Şu(H!
#
YN`9da6}d$O9ȼ%O{H=̑WTE5*F
/ms\RZF;H}PKlZaM  _  PK    A             <   org/bouncycastle/jcajce/provider/symmetric/DES$RFC3211.classJ1Oj-(.Fc+JcjtfHBUCIWR	{ϯ 8$7[}ҵd&hjĞig<i(W$F2t˖{럟yޣ
_3Ubz6TIn.L4!Zد2y"OQ(R((AyjNnx$kȁXٰ2j.&(lڋ"0Zh
*g17Ժy5P4P?Y<X̱3n͙c-V
PK* &!    PK    A             4   org/bouncycastle/jcajce/provider/symmetric/DES.class[SPױM/JQ.*{@M[@}!SiNq|(Ejd/d쬳 yV/W\s=7XY5nͪB3r<ǷjYGѶ؁RoO=~vml#qߵZ}_aEO0Wi7,xG9]PT(Ǒ}vRpGX.ޜBm|q0fZRUgò́~2.k\׆VRQSkzL>pvkYslmǮ`?*XW(ە~Cp
Y0sLF )AL$IE% %\\
҂k[ۂ;I\.hDӼfQS"qYwN@mwxԿ=;SpHfϞĉiL3/22ܣCǛ]4{w3+`b
_G/liܧ!Y"Qr\!r|J"ur 	Y!J.&i5%Y'oYȓdA7PKQK~,0    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/DESede$AlgParamGen.classS[OQ-lY#r\E
hj 
5$pv9{_&
F<qvS$҇3vΜ_ 0g1Ġ1DՉT`kQO(<a]~Pl_qB	)+֓qBѸ-\!r<wj=aI8"iWܵk;x9aSiD-Ԓ}nRp7Nj%nk[(":+EW9yq"&fWӘ[9'[	yD96eZ\PtXj]Re%IUr:%_I.+ߴY^
i<ue,M94P6]Kə)!G_Q#ÁiihШIC
5\СC=К\<^Ipm
%*;8_Ŀ^;w4q&/)<y2.R=jT#Qmav&#i
bэ;:zpWuc\GtN:`2ԝڛ~zh㍴K[0<%^x7rjStҙ",#[̧EFP	!wjS{!f.1b9dgccϘ	=O`21lfx4<ƣh\E6GׅQӌb3"z7f0(#ۏE_PKn    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/DESede$CBC.classJ1ƿk[m-Bt'ECM&%*},OHA*6ofoj!"LN]6B疲I1kzPD63'HE_4MqmXP0»"
}d^#d={$2o=,x{<,z(0Ԫj;nͤ~rɄKe9@e>*>X\SÂRd8,vQrafƺd]TFX{z|	woPKi!	(  H  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/DESede$CBCMAC.classQJ@=W4>kXA..tSII|?' Yt.{ϝO #{Ok!EvCp1}N,Y)Sy%˱\ӻ#<#8!4?Jk !#8'p8MU&F\Q1ϔ`VKkLm@ptfPu
M-=TYcA5T65VJXuƚ\l$^J(Ԛkch!&js1>t{3];a PKej    PK    A             <   org/bouncycastle/jcajce/provider/symmetric/DESede$CMAC.classKK1+n\uӂ*BD`{4}lX,PbR{=4!fݓg֍JT~KwY%&#Ʌ.<2D~#ٟg*< 'BLj$57E\+NptWKNs^hAѤhQPnj^@eR_UE|@;`Űmw-?$A#
:{Zm{6;DF@t6h)2}PK_    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DESede$DESede64.classKK1OGGեA(
VD:vQЕPrLCMIJ2\
XL-(HM໹pMN>? pHo4k!ErCp>d3$$Qˑл##8[%Cfh	:b/<s21ǌӉVb558lyڞr"\<MDD;
Jf~U?!۽;Vkv_A$FM.|x`,ғ 
u0[܂5Q'v27ةަM4X-}PK6!    PK    A             J   org/bouncycastle/jcajce/provider/symmetric/DESede$DESede64with7816d4.classQ]KA=ePЃE4P/6;غ+;kIHY}pνw8g3?_ J8$Ξҕ
w؋7t[*phxL
ꍖEcZ\FW̬5㯦toqb``ٶt;5[b.=Nizq&m35EK>otʥwtgTfH,%q
ER׊j
єFV?>2B@
lH	
/#t]ᛎP8AVKEMqOWPG	R1ru3s݁FC,2GPKP    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/DESede$DESedeCFB8.class]K0OյN/A^NJvY03ۦ$ПU?%sx޼pNޜ||~A;~&hD"SFENPgLi&)OF"gY<G"}1dcbyL	6E[sW+%LD57Pадв`xCU܅TKFRbĪ6Xwb2ĽO(Ԛkc"ff6>tOS6tl}廆ؿPK    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/DESede$ECB.classOMK@}nū!a($ x
v[ݰ<(qzCg<=	d4f_)uy2;Ofe-K֕7Tir6	-c8#b&ITּ	YUrdXsܾvoU)QZ,Gc<qXq"lb&K|5٬,##4צXN{6 >q%vVQA5PK     PK    A             B   org/bouncycastle/jcajce/provider/symmetric/DESede$KeyFactory.classT[oV1%	l(MgmlsaQʉc>O"<UObYfΙ7sp
5`hJ9#**HK?)HKgdgv<G%a~\\QXQm}Aensml)^xs;Byh zAɚ	p&6\۔2e^ӚsY*8Ѳ-~֣Ppr-Ǧ;#"+V6.a	~dA09] SKD?Amb5LouDI?hZgG6˭MmjF8L(q\d*uwZ,R;a4	5UR1ⴊ3**Ϋ uc1JT\}WK?Kszx*4MsrMnj&7O'}Մщ!^3=x-Ik6$5'_LCGqT8%1n"&\,'R%\q	tⶎ˘1)ܐMYTuqG.w
eΗwX!&Iջe.Z'N%
&	Iu@+eŘ4N*b)Coa c>^Wr	]s|Ž\&9ZKkL)?D*NKJ4MddaOJRJ\tq>)%qSC;TU|}Ot_qi
;-/]uR*oydVe{>ʕ},&M-
`dXEPKjI  !  PK    A             D   org/bouncycastle/jcajce/provider/symmetric/DESede$KeyGenerator.classTmOP~
J
6vZQ
NfHOZ;Fq(#?n~89>?}`-hBZ|+%yڲ-b)-A].\dV0W.uYpe	9
>{:li:kAR󥩢V~%1;RVɳ=mٲs:wᖋ{EnjdQZ?YNkN6?o{rTLrUeg[.;/Ob˱_1^]OYQ^,op:{VWޥ"eG9sɢsHP򭂞b_}lq+XqI2zdʸ*OFLuSNۜ0$z:Fxb,7k"ǰv#-(}2+zTbB;s3Z65?@J;="/1*.E5!¸BM!Tt ("v$Tщ[*FwP0ix`R0
FXA
FH'/w2i:/0e}f,k]#6 ! &$Lݒ̐E!;%u!+XJb3$&*x50Vg)kf>`T#xNpx&*̑9QAb&LF"bp#I,|FrδR%LX!uPKq)    PK    A             E   org/bouncycastle/jcajce/provider/symmetric/DESede$KeyGenerator3.classPMK1}nV=z<^JWboǸ
kmvIY

%fBxL^f
T	*~)̯HLE#TX`.<ePB<ՆDq#8Ce:ˉөȵz5ǫio6p2a}nQ)(E|YUFV`ߏ2{zխ{`.<T\(n0mpeAlZm{;DV&>><.$YtٴPK˝    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DESede$Mappings.classWy|Wv#&mnصINiAeGLì"	i`rߔ(]niW7,]~xow'8y3͛73o|o@?C8Bp#$<0Gx4A#R4A'%d!G
$,NNKX"<xO$<p#ɄJxgIxلKxn""	/!2	 *̈́W^Cx-u@x#M7Bx+mn!N»	!~	˄[	S
|]l&czNAkWt8?ƭ벿ޮXRO{\(Syl`_poI;>(q}iTK⒂bE	la[ñY4y ɥPp\Wa5=
A~٢VPҽSOea^mdyGVb4/2'^g+97ÙXD卌K۞Aȿ?d`yXx>3x>FB}#3DVun-{.{]jؑpGc*FQpL/J8[gnA^$*qv4s&nV`l
v[rם^!>fF![ڮ6W]K+ TZ_N67qqWǓODFFSce3XMPSEݬL'AҜ*46pi=MKg]~wow:ee[ytH#F%.#'hfIevzjn8h+GqAN7U+FjCQ#_"*l:*kJk'䍒}e=IT2K&{%"i;ۛ&!ӱaXb}ѴXVZ
*5i,dPsivT>w,u&L%+$cݜb7)i*/Ӳd2v:e7.h'@VeѬV*W$Ih2ËF6oQOsV2!-t?i0iE# vE']2J`p<U
_Sf<LaA F9iY7Ng]vЁr Sm>'{432\fL$kVדւyjĊP;ze6檇GEł̼!;<|Ozi>zn\3^Hr*X[f{Hw5Tktuwz,o`jK8Cp.P}O[$kH|x|Շsr;'sdY|͇sA|ÇM>oqm._9'?G^|	n|wrN~/q]/㧜_y~=:XJ3iE>9ce*] ܅/3`{lcv}Ӓ~-gcL}]s9
`_խc C#geܷ?
xmAz2~%/(͵_e&	ܩn`^!{.܀[n-6H]/+}eVM8aoԃ΢-+wZBSv*!hQL겂?1l^
@gꌬJ2~:v\VJIyqq#7!j&e6,8n7	R`KҨC2rde#cPXpw.ܥ^B+d["u;(+7p\L֬VW8b}aPK'SK    PK    A             L   org/bouncycastle/jcajce/provider/symmetric/DESede$PBEWithSHAAndDES2Key.classJ16j;ABP)JgXt!*]ЦN2
\, >).
^'Iyx}pt%ȝ	)s
AM$SHQ.BrM/[ּC>R=b<!7yC8TO!hģP9{
:ͦ
	.h:߷`j`;Mm-!`%<lPQB d0<tOk	?u=)	bVjMS gvSld3<ST_\[Em>PK.2  <  PK    A             S   org/bouncycastle/jcajce/provider/symmetric/DESede$PBEWithSHAAndDES2KeyFactory.class]/AѲ]"!^`T"J%n]5.w7~%NC*A$=7ϼXd
IDaг)/`ȝn{ѕ_ٵWdhm[ˁZpaԐ\țNO,K'*REޥ'uȰwHJFFs8b!O=D)HW2uܓ矘JmLm3͚ήT)wfCRaX6c02`2,Ͷdb]c+NPun-U_DL1WI42чl/1̐oRR[
>w ɵJ1zM#E7 ;eOIv'zWu~1t0PKW h    PK    A             L   org/bouncycastle/jcajce/provider/symmetric/DESede$PBEWithSHAAndDES3Key.classKK1OvZ J!3V,
.LhSILY
ĵ?Jnn8'ɽ/ NCջ3!EtNPODyapt</$e}ޚWG7bq@GW\}7dz>4G#i"ZڳE4\77g7<&XI$x!_Vi2mn	)+	Vmf*W%)
0!A1%AJ͹i=Л!ߛb}lr~k6h'PKw0  <  PK    A             S   org/bouncycastle/jcajce/provider/symmetric/DESede$PBEWithSHAAndDES3KeyFactory.class]/AѲ]"!^`4"J%n]5.?qGӐJId&393o/ V1B!Q0{ʋ6rۻ^terwv/Zr*'vD5$*>҉ʮTwI2,j;7upR0N6;k&dqO8Qcbg
ҕGi'RSL&+UʝiِTX%
0-şX
!TdK:Q(SUE&L!ۋ~3$$mVCϝf1Hr`s^H
g#F!f0Ukei$L PKg    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/DESede$RFC3211.classJ1Oj-("Q7tѱBB1
5u:3$SaUCIm&pn.{> \ᘠ	*2i<V#@`\eI3Md$4?:?yy*H3SL`X(LJ<zc$O&nS^/W(%2E1nZO[m@blΰ-+.츨ᢎ]Q$ZM@B!V4]egKTGK8o8|QԚ#TPKrZ    PK    A             <   org/bouncycastle/jcajce/provider/symmetric/DESede$Wrap.class=KAŬwߍ"YQRx섈޲gY(qH'w>pcd00nV~p^ۙxZ6t"!mc|-Hϔ&'Ə4'[qae9$ԔpbA*6fq%hpU%nK^[(J#rlqލ!{=EgȰ-G~5٢*#)0z$!OV_BL#PKI#W     PK    A             7   org/bouncycastle/jcajce/provider/symmetric/DESede.classmoPt8͇Zl:PcKr%PH3|
L|CSbBG?~EQ N Vp=7.QZ$"e$z{/}}ن:TFSyuAC;A
h8hݚnҁ:NyO״ؚb|b3ؑ!7B.+^
ޯ\e
aؕR>݃,VQ
%J
X&:׫w*wK}bѫYT'S	4fM1k뽭V4C-}_u$D\"!HIH8'1+1'8/1/qA%W$p"'6؟m#j^xIG-rK@]%+͏-:1MhBF#Z'q"	 #M2C"m2K!Wɻd\${dO:Dn3r,ME>&'s$~PKyp
    PK    A             E   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$AlgParamGen.classS[OQlYz(J)ȢhY5TI=.nsWM}47㜕X$>9s曙ofg~	0&`$K.09-Z6y0$&O\:rӏTX)D!uS˥'\PBIdj-U6\ɕ
KY6G
ĎwC}GI狙>@̟$jN!w)yT~!(QY^JxYRVxEԪ#ʚC|W^Ib슌쩚]_5܋U^
к;.{G9WmG*Cji3C/VU/vD^Ȫp^^$Cu+_q]A+iecxuS"7Cv[P%2j@1
0p):t8pz=e8<Q]z>Krq~h:oyҿ٣vEGcW\KX.X83Ј>Yhadg.[hŀfM}\5qM0b7M׷f&.I[&bh3A@nͿi&<:w^S((E4btoDIo ْT5Q\[/QN,Fd~0#"п'-N2yяYc_`fcb
cZ[ǽLcr݋}Ȯc5Zm"xy7psxXQR$b}n7XȐHPKΑ    PK    A             H   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$AlgParamGen128.class;o>Ff
0F
OfYb`__\X\_P_Z_\ZRjnfd`O.ǜĢ\<F'
M04`g`ag`eg`a`f`b`bdFU)<yyE9ũ@ `a`83poB@9v^N 	 PKqR   m  PK    A             H   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$AlgParamGen256.class;o>Ff
0F
OfYb`__\X\_P_Z_\ZRjnfd`O.ǜĢ\<F'
M025cg`ag`eg`a`f`b`bdFU)<yyE9ũ@ `a`83poB@9v^N 	 PK\   m  PK    A             H   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$AlgParamGen512.class;o>Ff
0F
OfYb`__\X\_P_Z_\ZRjnfd`O.ǜĢ\<F'
M054bg`ag`eg`a`f`b`bdFU)<yyE9ũ@ `a`83poB@9v^N 	 PKB_   m  PK    A             C   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$AlgParams.classJ@mҦj\n؅? E~L8!4зҕIV\=;||cЅO{BL*Y^zWhu_T*1׳HIك^dp[e	BfWE!;a?IPyz
/,9+Gk#Ǣ06@'@Kn2^qsϝF@T/!fsk>jg}Ztv\'ۇ4mDkyk-{znDr\
~PK4xhv    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CBC128.classQJ@=ckcb|wB*`-**
.
|@q:ԩɤ̤Bv?'A ^8^8z{yPGUo	^3!ErJ,I)Si/)!W7E^lDqc=W{?]t=?6WTQ%w+6L!Dh>2I%)ϻ8kwTLd0`|koK6:\Cˌ/jMLTpZCح2X`)O?Ek]LcPK<	&  )  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CBC256.classQJ@=kbcb{TąZ+($P1nvkTgTQ&8B`x{kt&b$CĂ,TY)4K(;"^7j&؟&'mM%z=i*'撪a3)w+vtQA&"ꇊOm0kd0GyӖwL9,9AV1}X\QW؆iFEIg@eo5*:Z?4::PKOS$  )  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CBC512.classQJ@=x>

*($P1n5Mn*|*X(qT
RPg_^4P%05P>v١I?f,A%sE/onˢ&ؙ$%mMK.T&O%U^gRVPm{u?*>64]MZzLvߵ;rw`cY,}cn3P)Wr#ڍt΀NkU)a!dSVa PK(%  )  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CCM128.classJ@11^RqEEEi.]PII|%W>%Nꅊt39sy}{~P
nn-
c`;MzuCcNu)BhzPrQ@;jh]{s%/-iGF%UvRZun,Zz¸랏z;J[mPZKe:Yڰ19W_}!^+Vh[@t>>zz	,$X|$::DwPKw1  0  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CCM256.classJ@11^Rq:kM(tC&e&X
| JBg?s9
sK`4dOD$SX]܋X*	9eMbʣիÒWrI@'nj_V={%/miWƏ%UN'RZGuiDpVm01m"k41CÎz*՟ROeE6r6氤/78(&mK;35m!O@0jX`eէOb]YaPK<h0  0  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CCM512.classJ@iccbKե"
:XҦ]uӡNM0
},W>%Nꅊt39sy}{~P*Aݼ%0zr'")N$[.ꆬ|2ً%BhX
sq@'jj]V=x"`64ѣhrIU?
]zHpV|Gm01a"g41I[?T?!YdRIeֆ9661/780|mK;;e#O@ak 1gB},=}+ZmL PKp0  0  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CFB128.classR]K0=qsݺ: Щ6B7ue3kG	{/4pGi1QrpNn'/O X&2A\/!q]lxNkwlFmi5ڵj8}k
[̭sjwP<jAWtvva[
іx	wMn"jM nܡ/VW0 @QT"cTF~GLw+ha(!P1"	TbZ~yMVr]&L}cI;᢬(2V{P+=h+Yw1\3Q2&_ʘzPK;J    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CFB256.classRJ@iX;>*.ZAE!QclkjM*|*X(qR*.;ٳ' %,$5ARD!uxNxD:0+]NBZnLu 6zrqyW.N`sےn7`\РlP8?TkuqLpq;t\jXhI
R
i]?8OAdDwشnE
	E0A>q*&Ud1BÔQL>)!*ǅZA 'i"r'b\EZfzjMl5Ols]Û|I*c#X@PKcdH    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CFB512.classR]KA=Y
QkEfU8ں+kIH٥OĨfssVzBaHٮlzAo˺S&F^cwݾ`{
>=+΢`k$<7ݿ3@o28mޮqAnaVPֻ"ĝvaˣ$(H*P	tbX?Q#
?p
5∅0B.	*Td0Bô1>)!ʮ˅X}"+i"r#\EJfFjML5Cs0%oeYbWPKJ)H    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CTR128.classQ]KA=YP9hRQփS6_IHY1{{^^L1Qؑ91/o{l2i>-k5.xrZ\csx\ӫ^6w֯		~UϭӖ*TvM}"8jMdN nK߆0!Aא 0͋{RC'2P-+D0Di:t$1qL+?Ԧ	qa\b)EQ7EUm!2`e҃^C]u1ߵK
uSoPKyr2C  o  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CTR256.classQ]KA=YPdfQփSY6;غ+3kIHY1{{^^L3of9
#`3u6hCz̢
Ԯ՘`n[wLc3}&ӫA!?Usr AeVKef^Pֹ{VɑF5$4hRy1t_b/A=1D0AV)iL0lmiL؞#%XEFѢCԍqQU[HXA`f	b~>]RzPKDB  o  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CTR512.classQ]KA=YP9hVQփS㶎zhVDj9^8{瞗קg yD
A(!~xNpB;ݵ-٢|V\Z{iqA;ͽqή7&%h5E0W?
մ9kqdp^GPĝqYђ118HP$	r^Љ/a
=QDB!Aô4a6eb4^<.LגK!h!Fm$TnUKU30||]PS1q,"PKLB  o  PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB$1.classQJA}mf65D1'f'LIz
(~XTӯ_իn>>_4H*3bfЖ!Cѱw-m#Q{o7b" t%dz\j[iۻA	a9BUO<224PU/3ЎBGS
ҿH0,H2G`3eC%<VhBףFZ^})þcuZA lH"7FJZ'y@rw̌!<7Jxb9Ja0*$LLĤȾ PKFI  P  PK    A             =   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB.classMJANb]WxrHj0API7;af#< ?J,I5]tU7vVG\^^%1lƹˁJȚwg+d8j%/ǇBwT;Y2< \,:q8ΌzK蕭@M`E. ׭ۅ[N۽Ќ!CaPKL	MM9vC3J^7 B4[s_s{zW+JPK|n     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB128.classJ@51icVy<\EEE!71n5
䩠P⦨Agg`>׷ 8QOFʼc!EqBިd%KMqtr9zvqytg=`4^yb	Amvx}@pxRƩq]"[}>}x>|(:oQ\%a,`>0Qs'%I
6PUAl:3mn3jM<Lјbctj`=@+PKF7ε    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB256.classJ@51icVy<\m
ԂǸ]t7BSAMQă|03oO/ :"p֐y'B`_1U3J"2/r,$7=`	4ANyb	A"qjx)vke .~spTI +XLȾ\.HupTcUBۆk+M`V@PKě    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB512.classJ@mbhz$xH=XBbojc.ukvS!婠P⦨Agg`>׷ ]8Q{@Fʼ!EqJުd%KMqtr9z~yu}x=`14ALxb	AmxCpxZƩq}";}>|x>|(oq{A0@Kl}\ؗ$Kƪ 6lV@sV
34gXy]X*PK    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB_128.classJ@5icVy<\l

Ԃ'ۥnMwn*+y*( >)R3309 p~i!E~JީdKLrtr9z~yu}t=A0fɘqi(\SSL&<ׂ-X?^	@Os(1<J{Evϵò /~;m8X*%QŪjh-Rr1`\Ħ3׆
｢z֟F7}԰'PK    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB_256.classJ@5hz$xH=Pk=T{(xS$n5-TP|(qSAgg`>7 mxQs@G*RP3<bk&H*aI-zc.'9b2|tAu!8=eԊ81a(|U
%ߎtVJ	T`
?va_)a,VX졜+p.|WWTos|v8PjPK/    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB_512.classJ@mbZIzpz($P<I.uk	TP|(qSAgg`>7 ]l8AkHҪR cv/xlD0,OPcaW7'nt~ O`NHhfTZ%K׏»6Y.FI#=MRPT)(A\v7pP)PÚUF.J	%1`\ĦЦv
h쿢v۬`_[V=DPK "    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GCM128.classJ@1^RqEEEi"E]y.PII|%W>%Nꅊt399缾= (b eoZ2	v [t}3WELaP\]AN5
Mm??s.^qIfnqA4*tx$Epj])F£eWOH71` Q]aG`*UKNdD&LLLaNѠ^W{Vt<W)
KےCM
45doasxa>e&;PK*1  0  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GCM256.classJ@11Et
*J)e.ukTcyPH/tفcvf^ߞ_ Fqn	N#
c`7mz3OE>Lƽ(<h+Z9(KaN3-m??s/~\ѻ`ü'G⒪?M]_&8܏O#650i g00E8[?TWj?!L2ʜ,-`Aՠ^W{v#t}O)[C
(l`50y	,?}Z-mLc;PKB5m/  0  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GCM512.classJ@mkcc<CKŋ(b
*J)e]4)*`M=P^.̼= (a modz')N ۴}1WLF0o+Z=<(jÜ`{
Z~q\U=8w%/iO%UQC)w-Pnp?|@$m_z;N[oPV,Jd&Y9̙071y2Gze_Yu\,mK7=Ԃ֑/5 ȧc!bObE),#PK$0  0  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GMAC.classQJ@=ckӦTqE
F)E]PS$dR;UG("h:Ü{/seΝ׷ e$CrXAz6`lN?rc9\˫~,	6=	z^o`7y25eqefq>^žDpi\ZS0 @QVQEo&T<)*UCc!B
aZE3*4̫aV$p)XG^ކȝpEV;H(nFɓm8KQ8ӧvU*cH"PK,J    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GMAC128.classR]KA=j}cՐJF[O}8ں+;k['!Џffss.s"6bA\ar,Z9Mۂq]&ίonKGEXlE	:&Z79~$me+
 <~m.Xsw:,>Aj8*j:88HP$	t*jossT<)WVOFcL
`FY
),hHcN0T:2"]s)DFEԎ=$TvH5H5x`q0Y`KPS1I!	PK:NM    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GMAC256.classR]KA=YE[Tj`H~@?*fss.s"	b=Aܨ!qjvpFpm]>?nvd7wRx9	v]KvUkX(D2UO{>Aí{vKL]6\^qnOJ?%"N1MIa\GMmJ|.)hʯUԓa*!kа!e
:5bI S #
t,)2.vl:DRe@`ts]%beq:˗vKb3DPK2K    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GMAC512.classR]KA=YE[TCj`H쬁?'!Џffss.s"6	=A¨avlZ;|-wޠL8-]ޕN˰&؎t-.UnqHˬW:.2ޣ
?mn`=}cr
߳Bvs(OPVPQ$(&(&)(E"E`Q8!MտzRq	 
sXԠc^40U:6B9̎%BFEԎ}$UFH7FXb%LX}n(T`
H}PK`JL    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$KeyGen.classJ@gIcj?Г!eAF`oՂ5]bBMZcy
( >i/ۅ̷>47!N9g~gO`£<rsYȩ+$'\\G\,G?ei"?傦l3k?\03?CVQWT4(`FCyt,]7pF`ЛRRʺ-6t4)˶)'0Hz쐥)OeKT@$Y ͒LI(D5 -M
t>ְ;PK	oE)    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$KeyGen128.class;o>Ff
0F
OfYb`__\X\_P_Z_\ZRjnfd`E.J<F[5Y3330030q1p0p}土㙗Z䜓X\Z$FNnEN`Bf000YZ
7BI!;P/'g PKx   Y  PK    A             C   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$KeyGen256.class;o>Ff
0F
OfYb`__\X\_P_Z_\ZRjnfd`E.J<F[53330030q1p0p}土㙗Z䜓X\Z$FNnEN`Bf000YZ7BI!;P/'g PK+vX   Y  PK    A             C   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$KeyGen512.class;o>Ff
0F
OfYb`__\X\_P_Z_\ZRjnfd`E.J<F[53330030q1p0p}土㙗Z䜓X\Z$FNnEN`Bf000YZL7BI!;P/'g PKה\   Y  PK    A             B   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$Mappings.classVg`Se=F(D*ZRmC-QRҤ){j!{ODI/)Ow=~-gb C5"#IO800PND T&T	5Ʉ)c#O8p"$4PKa:0$4f"&)(#fN%FM8pLY	%G8pBE	.%\FpJU=h98T_GqFh
0
4ęf
|ߴi1#3UDrG;QJQJQkVKWD*"S%	ʋLȡȡg1[̜mEf`;">*IeOM܁}943
O@(hm])!`#:DCnluË=VW4G4wrcz%H4h#fDbQ=j߉kj8}ӰI,k+#Ҭi	Sdە-ش掦d(<sNj'uLm{$NrcuzxgS(at|$ɴEeUV?FC&#\!;	OַD
uͱj]̘ې`K0K0kzEU``dP{1#1]Sߨ!SOLc'yeK&LS2!0Ո8YoƋ=IⲊ}z?7#TǢp}IK0TWx@$Z鬒zs,dpzRaEmp,8=Ƀ'j::%!7_S42+(cۧO
`W{Frro/As.ث(bk=x҃<xڃg<<!o%N!һOW .,(WZ9i2Se71twaF5xы؋nb[nc;b{cbx92<FȋO0<p-^:k٘7dxmw00|0|_0|0|]6R~>t7,Ohԉׇw|X5oCr.rg"=4-S<uO0O00S˖Ls΁yw<ӊm.tІk7;v.eQJiIA);<CeԼhgPY.eqI<e4&!yAֻfY+kQo}U}Uղu&뻫IzgU_'빪lU_%9>R׀`9m4[;PMoUޡ_<&oDѶ ~-2clsxT*!ͽDLcDCl_6վyc<6=7oJŲ4#zo0}Q-wK
._RK.RK5.sK.׹եJ\RKM׷Z'
WֆF#ą(<PKH	rZ    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$OFB128.classRJ@=ckӦZo]*EEE!U ]ɴIBw?'Q|P*spa}~y|P"AL]rkkk63ᔉv3ѪVxd7o nvO/.
&X'hxיYg6wg[\Ph@?T+uCpq+j>hq

I)]?ʽЈ﨑in
10B6Q*U1BÄaLʹ(ICrQrL_2."w,9YQ$e,vVIW`:d]>/Q1!, 
PKAM    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$OFB256.classRkK0=qsݲ7~T9AESa cٵ#,?
QbZc&{ܐs_ D3qāpEpHZݶ-?p8exlU\x]Q4o$nMgW\$	6	^EOooU9kJ^Td~G+VUNV fZ>h
q
4
I
)8Ј﨑i[?p{
5:ba4LciS蘤2@/.E}1y%,cXEԎE8*ʀ.h]t9CLLGû|A!UqCXDPK* K    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$OFB512.classRJ@mkӦZw}HU\ZBBA1n55M&Y>,~RQw9̞e<<>(a 	z%۵CuOvY~pDxhj\pp<vW[\lbsnܧW;ITl4=KOool0N[»-.i6y lъ`UzP$85Ly!I4
O~hDwȴ~B8b!aL	0bSr.\/헰p^V)+k=4y2\]D8t=$2f1E_PKrL    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$Wrap.classJ@ƿ5icVyzH,Ԣ҃CZCݒnn*WꩠPn/Ag?̏a
@{^2ڹT3ts=LJ̈]eI"/onN{Wh"҉ ^YHsSMTj)yPmtVʌ_t ?zZ_vC
gakNul^@)ICv!g̺Җh|ۋ!EPKX)    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$Wrap128.classOK0Ɵغl:<	;t^uLa:X03$Л_@1My@{^ЅڙTĹ|xSSfq]e΄H%=;?ДS.X'9j6'jG);Opt"G)|u%hGWB~gÚ0@6ecpI#]8;^o-÷/y}4~YYw6h`/PKWD    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$Wrap256.classOK0Ɵغl:<	;t^ud7ufaftiI:@a`JL"4@G^ЅڥTĹ|xSSfq]e΄H%G7?ДS.XW9j6'jy`z^ʌ]F8:ŋ>6EvH!t3
aI ;سL]A8TJ$Kn	b֖͎<@E@sj`cPK-m    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/DSTU7624$Wrap512.classOK0ƟujuNyv릇VocҒtB?%&cx
Ϗ;	;&sd9$s=eB񊧦*ʜ	5Jvys{wvuZ\N~@3θ`ΟDhf\Zo`cE)3vDOBSu
JЉ!Ѓ80@[6mpI#]C8;^om/uC%ZK켬V4PKD    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/DSTU7624.classRAEEHE@cƘD},tD.TO9'꠮uҁ3S|9FYo|:B)*<ȧR^ٔMb0Ǩ_)eRDWg七~T@.=ꕼw|B[!NtEyHAIލ`omvvvZ{8j1ŰcNY;9$\[Foˤ60{
÷qwX<lsl<whyUkUMU5mV#\P~p0q|0u|0>|+3iMMH }~
Z5jϫi}^Ms҂%2AH\B X)hllllllll4	
-VA!aQAXpLր%p#[V6.nJ7ЂO&NLJFIGFfDB&A邯tV׻iuT)]VVQV镾v%JzUp6Kn+-Zp'}ٿS	T4)}2rX>IhB;p5.՚7`m^UTB4E4>=A.zf)z=Mg (-P Ohez>g,=Gs4N	Mz:Jҋ8}I$}C/ѷ2}G*@я:Do&PK)    PK    A             F   org/bouncycastle/jcajce/provider/symmetric/GOST28147$AlgParamGen.classS[OA-n.(x
XWŻR(XQӸn;mO#˓,*Q7ٙs7gΜ 8DzIh*=K:ROJh_v\w\G$\!7.^|~h!"XR<>
) pm*5)S"MA)Ȱ[IªbeJI:!>4.7+ܵ¢%j\C?3uW:Uy"tґMsb{$<nNVLmSn5+e)qoOk5-Ȋ0-Y9n%7K3vskBP[Ă,a|ᔅo*w,sS*KXzaKby -~OAMlJc#Df#u=pIדɠ^yeg2
4hհ_
4pDQ
4'?5}Ϧ+\=v\ٮ?XΦ~j'S
S]J9jsb>YqtAPf`7L%S`@7@j+:qS n8SJ::Rёmp:઎-M4UƸEZt@MugIrAgOW=
nEk)EHz3˘tǗ0fo10.]D8DQړȽLr-< Kt|wtw?H0:ғl(1vz![!_gbr	J{H'+͓IǖKtM``L˸1HbR_;]o04*?#2g? PKyj:    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/GOST28147$AlgParams.classVkWG~B,(jV\Q\ i --.!.nv{_~՞<Z733Ｗyy'?Ї_[Z!ᔄ%gh'BB%e2a3i`;w89Z{ɕl/p.X1]ebuuZW
c4\ӄanӞnK+\[ڒɅz"
zM@aTVAVx1vsоLi*]ޘyN©<ö8yi!y&F4K$w]@SCfӺ=72Z,fQSF~qv=#"=؋ͰMFVTVck:3cfSs)ԉMI4yA3Na-ЦRP̪aÐw\%où]tVol|\~iEyۣkO8v
lE|Ii)KWtLjիsS>?b(-'^}wW
XrlNyX6+{UƢ^};VtmE*Y
Qu+ERv}𛘝"7F2<r͉v7=:XBLq	'$pZB	g%IeHMJl#d`<19H)ٚuf[B95Bf/"LaD{v+Q"F}i{Zfjt?Қl>d݃KuH1UA'"
	8*]mG	hè񑘍+xYVA|`?>Up"bZg2.bAq	_5_
d0f|.c,
	EL$+aN
7xKM}/)Y,&9OoMjY(MbCUgTG`wiuF{ߑG!]uVB up?JLtZ58caxdT
dp*	r
o~+QV&
UZG)cѶz(j]4I>Cw'F
1\!t)!C'X
<IE
Ch=Hgt'4"u.ID\K%q4dE>']E'EpdNuTJ97pq>ZGe4#"[ #5j;h5G~&RZW!~4PKt!  
  PK    A             H   org/bouncycastle/jcajce/provider/symmetric/GOST28147$BaseAlgParams.classVWV3舨XqTap"HeTԖL!vS|~Ş:rN_s7$89~ ~T~Gy8¡ybCE;;}]ti)T˓C)M*b&Ҋ
;d*JHCC.I%Jg,LqL	SL|Q7ruJ56B,*iP|ЏMiM(͡.I-UO%UstNP"6x>e9wqÜl&,c,+FH鴢'9lP+K.+N)*W!>2ɣR8t.3f8Tz;/x)jrװ}v6gӶ1d]N	7ZԵN%	$$uPjD=3UCPp5IOE5ɲz@oW4%%i]fjjR zPu@aK^-6jIH,EF-hVB7O$,\L٪4<=Eak,i=nIi;aLEǌ)]%֔dQ֚AgdINWYGJ+ɥM#ku-k&:C++<(IVn	YRizf'ɽycc,dLcϾhzJyrF`%Tnwr#L^}s{qqᱛM<yyDxc?<x!<8ʡoC5M}؛Vr^Cm)>{kهT-$(ck51ؘ!{G}{Zpp?^mNkUfw!V敬",@l]^B}Ϊ
s'K\"@1(#Q)1"v0bzqFY8#b"pVDΉ؂]a"㢈$b+g @^ddL@'&]s	9=eq$4)#*#:##WϜ
̋qF,VӠnUKo}s&q]PcU+tJck0\Ύp:m%>G^pn!HHzٗ#A.O\oG֝$yL	O8ۦp$}/sd	FFne^Z&]-WSj6|^%tr	B}x'Z
#UP^+Σ%/Oji)6[hpĪP~GgGW}]A>6^;AHgܠx/w
/xfW_$%3	
?"	2te_=:\<_ΖV
+s{amE~G`ÑdܸB_~OieAb}v)D77 |x@A*ε&!/6-"sex>zbQl-GsP7jy;G<5rά/">s:BEZPKa  @
  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/GOST28147$CBC.class]K0쫶VSo^l""2PY]2Nj"8Ir6	fr&Hm!UzHTE&9e:$r9z}{wiOeX
Ċ=b5A}ĢtճpMM:DA?A^i"bD/AAAŁ`ѸYVvu;kQ d=
.<lzXA)$RrƑ1ܠfA,k:vsgة^P{zv"OPKKn    PK    A             H   org/bouncycastle/jcajce/provider/symmetric/GOST28147$CryptoProWrap.classPMK@}ԮBE-((=4RCݒTTPMAg
y{~CZ'Jbp`DܛL]#HO&'z֦idPMe:$rk՘plFUR]^u8`ȼP*iGc^J=b4*XGfh&f_f/>ךlΑBϮlԸmVX{mz|

PKpu    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/GOST28147$ECB.classJ1ƿiūa%(*v)"5
5u,I*cy*T|(1
A3L$oW 1QoL>JoGiB{Pu`ܔLT²ۓq|:/Čg3.Xal9g$	.YY?xEFѦQtۛ18D0@ֱIJBx0iY+,PMC|4j>£tZbӷ59@׻PK"P     PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/GOST28147$GCFB.classQ]K0=:CHT&*-:`fg׎|*8t
SM9˹o/ *"HA SLP}c^2jq]G=pAy.Y\9%)U?*T&8D\09vy$<g\?OGL[oMSd(f(b"G`S+DʿP'gP:R 	XРaIC$ǲ&ARroکn"`{o9Nc5ZE/ݦBM!PK7";  c  PK    A             C   org/bouncycastle/jcajce/provider/symmetric/GOST28147$GostWrap.classJ1tjƭE&
jRRqPSɐ<C"t!.w.|}a 3;ffE%dV7LұAv|oyyd?!YiͳI\5JoX 8?3
v\ORDMA{5RJ{hԲ"M`QrJki;'H8n.p7Ї9x-_PKԼ    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/GOST28147$KeyGen.classJ@4ms1Z\BE]bErLf$-\| J
7,?9p?^ pbB;3r{\59ޟ_v{}\!TС?qy˳dp4bϹIXT.letoUCI0hOb4dGy-;3e

ٵ`nƞUC18RaȒ'M
NYCqJ ECjoᨈk /b WX99RKM;8	PKTG+    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/GOST28147$Mac.class;o>aFf
0F6̼; 71A3(]?)4/29$'U?$_?71X?8CmVrbVr~AQ~YfJj~qennjIQf2B'#9T6$3G)8AA/j5xA/7#s~J*#g^^jsNbqqj1"H	L
y@n6B	I. 	T	 PK?&     PK    A             C   org/bouncycastle/jcajce/provider/symmetric/GOST28147$Mappings.classUksF=KZBրCHд	8:&q
y	
З+EE
3MT:L~@TW˖-´_^9{c[ hr\q799nqÑ1qccCc>rhUf?r%9Uyj-Zia$W.ӚɕBR8$s0c+eڦat%rnSejmaRx%	j38&DP2[/o>gJݟ0EÜS@B3mB Eȭj]O+{jL/fpy 7H4Vw+/ICk4|h_kݠ8cƑ+(!Cx[(ØA}N-35F½xjN899[-XS{fj4ݝ]5mcȴex踆ZwlXڞ%Tm/z:j~Wi3Mj1᦮5u&aj)][a=>>tM]s^XESK=䙖8a9a$<XW*&@orFz[
%LJ1?(:]?+wʃ;>s&YL+BN/LCl(f79|"6e<͗ؖo͠]<wT^d=߼!;o>%AoL􆃗 yg0MJO᪟yCS*d
uVFS߀f9ZU.Wޠv2L??Y2yrǋʇD|O=1ИLRAo$%.&Avdi0sVSZCiBiD%A Ǖˁ^"ǧO7d+'w:|@6KkW`"/PKIs  L  PK    A             :   org/bouncycastle/jcajce/provider/symmetric/GOST28147.classUkSI=M"=	a\>XT YAE166fR3UUk?ey{L &U3}{>~)H
25|ᨆcѱڌղ;e$A8?^bgf󵺒-%me(,T\..2jv'²LLL0
d>7uO%5FMiV23Y]Adxk$kcV&>.^%^][Sբh3Fs8bCҨm;MazM}t-KAKwr\}/Ζ
K[z\q@zhuxi/З!z"[bݒ:nHO66dٖ^amjO,R/
P
$lxOx}:˵7Rot.+W>xvf=?rǯ#qcc<Vuwb.vWJtը4Y=,b"
3cSE1D)S
N+V)Hgv
wT,w/+(+iP$jw{@'
AmEG;83Z%9ZmѾW(iU }K!AHьI3Čwxp;C"ʛp=S?#V£6mAxQK-gT-RlK=歹,88JPHQHS
ˤW13F8O<4qu!aĂx"I%E@3PK$8Y  	  PK    A             B   org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$CBC.classJ168^nEnb/`QA P
u#cjt$Sav3$?^ Kw]R[">թzH}4	Y|2p BMUo5G&A}5)n{K̐CXFO%Uhc)K	E?"

rsIjwwGo;ծH*Y0nB
6
6!^+`j:LwtJm7ٛbs|Sl|!^m,#PK't+  /  PK    A             B   org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$CTR.class]KAQsr̾"Bb#
!JmmlݕBB?JP"5üsy8s?^ Cɪp\qCpʮ2mn09Q:.yfG.	JF\(
G,#F%UD)Ǭ@Ϣͥ
}K&T;r<m,"A1G)\jfJ4/#M1H,iа!e
zd-b afuҴ-Q"jƺ<݃:V!/_RM, 'PKUD  s  PK    A             B   org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$ECB.classPMK@}֦Q^
R/k@($JRaw+gTPM7oW }T>RS∠ޫd9KM9e:Ϭ\N䆞_]]3IKfL'1ᚚ|>V} ԃr߳?V4JRc=paC݃Gsh`:6	joRr1`ERⶋPuq
gߎCYM PKcw@     PK    A             C   org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$GCFB.class[KAYv@%A`/2zZHYJĠf9s~9o/ "k:Av Q5u=OٝweÙ%cz7uǳwAiZ4w۶}V.~l$(L^3b$PŌe:`:ٱ8	nrAa[I	~|?>Q<Eb"IA)f)Rv1d%PəTnjH$d(XRƢ5,nn5pL>v"rF!_yPi!<Fk!VY<X"7*`q> PKﷃI  v  PK    A             D   org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$GCFB8.class[KA4ji#tl0إD(mmmݕ5ػRW	~T4+B΁?^ Mob'e5w{{`鞮9d{}זA8k)?Fq,7:~yu]*wţ葠0٭@I=W&"Uuu&dc.7ɠ{uE\Ôa߲SD(1
J'.fV
(H dJH`Q	I,I2AD!˒jX㪩9sp醸?D9DR,c5c%ų1%T{)l"	PK<wR    PK    A             E   org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$KeyGen.classJ@4mj?Е"-ZA4,\ɘ5%M$-\| J47,Ν{
M;-wK;;A3,|'vXy:"G7<s<ut.;悆l#:t!s_Q6UU*J*=s0eKF=OPI~HGTT65hhбܽ9ncy,y("K$
'&Iݕ2"I	勨 Ҭ+5'UUQPK"05    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mac.classPJ@=WLiEt3!

"B8کy1
,W~%N,{90@;UHuz1n$),eJ|NL$<+zy{w;EQ$h)Oq̛2NcTA)ODt)js]сgW.SdMQa9&V-XXuf0=BA]ha
062l~ӷ5Z*/PKK)  	  PK    A             G   org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mappings.classTkSP=@nK	 /_hHEX*&M:i?KQg/-Ì~sg&?~}`}F3<`ex!	CLČV!tD:ag	bt8tPl -6UH#)OYVSB<?7?3;5;= O5ˇ{=ʭ
^AM]E%LgmMcu5|n4tAxnf} I+H5rٰºc0U a}kEEJEgsMVp$8U[?ѵgʑRvcBZ	EW,c	H\^9)+Mk*ML3\KQLK9q95%DE("E̊ .B[oNrߊc曛=~TvE8I;@s	X
#, "|օ%h
V6X%Dg
1J,/F"=
gxB"Ym?'7,;C2ؐCdN6C%l<<8'ɓmÓ)ȑaVpp\@) ,b32
d#	b?PK    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$OFB.class]KAQsr4 Bb#
!&uuWfRW	~T4+A93yx}P.A4kīr&'ƽ7tmIa-F3akg?	Ҽhvˤqٸ)ŻQ|HPGv(t2lg3c 'f~I	E&9>cd?jQ,P)("E oΧKH*\SG$P24jHbEZijzu9Lb).vd˃*ˏIl9TSw
K"	PKvF  t  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015.classJAƿtԬ˲n63r)Av]n3f`ᜏ
c+CfXW}m?
~G?	I9SVOkuL%=nɱW))6tU9ԚET~+.jaŠv XU<qSYQF&}84G4Gc#11ϱs,r,e`{4ͺUIz{R4Դ6BN1ڱ@t' qɃCJ8q8C\'&$qx@"Dj;#.1PK@K    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Grain128$Base.classJ1ƿt]ZM`ϡ	1
5e7YTTP|(1[E3}30?f1	^L>UZ3}c̵wLغI=UZ:veeOp	>U<e)U%ڻ.,<:`
ve{i)"bM0]wdgh4"Kb 8+$X6ZڼI]$a	 
<.fl<~NnM'XE;PK
     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/Grain128$KeyGen.classJAEo<2>&҅"ɦ#"Ef'\fa3tw\ ?JAZW gQ'uT^Cͤ:>9':\3csAJ[DB߈j(9,ゖXȩTZrz1๕90#_:-͙J魣T~wl"6A=) )Lrf0kh9*K;m 
qMb< [bgӼ4ttPK.C    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Grain128$Mappings.classSmOP~.{Ie"ZcBL4b.D4D/ܥk#R5`H/9=o9''QQTUa((3=z%zM2{2sb}s,fe<L1O/?0v?ez&;tD1hn~~7Ψ}mJ-~x0,-X^WQ;GQ7t{.O@8-\tDR3p#&~Ñagjzkqx餓Yk:iNM2p6nWM
L+`<wE5yry>ղX'+OZȍK"'К+c@j`+nfpJa	u2xc,nc!߈<"c?g*Yw(HˑNk$#YX?g`z
wG&!YXxT0Aɡjv\p9F@3}EwP'PKy    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/Grain128.classN0ƿ#iݖ -013 U`P@
!QDvbBbx(/;}>[}~ 1!9;&tλ0~ZlkUVzQxXunMnYWܸ%ଞrBNLdM9{´
hUTHRBWAe
!-K)ٽfo۽u}E|$ހ_?<A@]ѡ(
PK     PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Grainv1$AlgParams.classJ@EkҦ(h; E$BP܏'$323
JpQ$fo17;p!!͟	T]FwKUv,T.xҏH.ً^lqJ`oFr%ޝ.:)nxe	;k'K֞FתNa!0$9+׮荰}BpWJ	,9ӡ{:9ҶY~툽PK
	9=    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Grainv1$Base.classJ1tצ͛-HPHPPSv%IX

>%f :13/o NGc_;efE-d֕7Lұ[˕^߬F?3!YeBMe.K?(5waܫ5ؽ(b
6߿`f
,E-87PwN: 	&HJw´(t@w
DYb۹4
5A=$PK     PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Grainv1$KeyGen.classJ1ƿ?iUo^m/A"{ǘ56$>C)f3;KP'3бJ$)_jQ	n]&0UrY;Y\1B䥚KlXHg`?6k	n`Nelĭ}3EIA)Z4%g	{N?0B԰ mOP$';[+):޶^~:Aw@4
^^_;^PK/    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Grainv1$Mappings.classRmOP~.{iW*HQP:c
|b"E/t[&#jGO1#!=<9_m
MŌYf
;[7#LaGA)}0j^/աLyf?[BF{AgaN<w*
;[jA3H~jaas2-bm|VQ_<mwdҵv`wmž6ojɰQ5haՆ/Caۤg[*TxC#oevȪq8^M
n)XR`
=Y̽c*ɬ'=IdIZ0cuIG:nqyjXK
aNJZ
c|-]=?EfdȦ$o4#Y;g:v飒Æ1E,Sc`zdAGB3ֿ|F9It
^ PKwql  
  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/Grainv1.classOK0q]jͿw^Dt!"zeiIB?'%S^m^ȓ:'XS]3SYKIYUp^D̊UʴHL+j3N&uS'K7Y$=eVz0jaf-UAp]sb#6CoϠ;kd{Mj*C,CQ"eRR7>ݳW_~~ $
H;M>qxPKtH     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/HC128$AlgParams.classJ0EvS~7Qq1R.}섚&d
W\~Y{
p!!LK"oӓ~w#
ģ~pFpMB˜[W	V{5sa]ֵu1u몸זppbYim{ᄱCdzW򆳊}"A6Ez.I0iŭhZ;~|}`BY+rPKW    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/HC128$Base.classJ@mbX޼	zX"b,x
R$X=| Jܴgz p}V4\δ.Lr%z>;=-?S!YeW5ٺ(3J@u[n5S9kGg$/2UHCPm~OC(AI0+Ǿ$Crn8DMM NiN.3qy}7PKWg     PK    A             =   org/bouncycastle/jcajce/provider/symmetric/HC128$KeyGen.classOK0Ɵu]S.Q&"A	15kJ
z+y(Pbv
<?\ఉ:A4e!
w_N鳚\P*EQ݉Bhf&8c8˸Vs9j:VKN_nJn@ά_G`elhΊ>:HwjZv ;!"5Ѱp$gbq-qxm:2 IO-NCw PKANQ
    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/HC128$Mappings.classRmOP~.{iWHT:ch@͢Ztv$Yj2& ts${^-lːed(2.ʘqI"Ry+bȕvy$+}!|^~ -)CTn|WXKsc1j#ڠyg(y-|`G	 GohLsc©]q=[ tà[]G'ś0apR1a$~FcX?<hеt'ZRzMfcNz)#r6pE$\#&0rW-9}'ɬ9	+5U㎊pWe+7PV=iD!k6ݏ!OG,0,%ʐMInk4#[=':R郊'0>Æ6ExAEˏ3cxL  MaCPI*PKZ    PK    A             6   org/bouncycastle/jcajce/provider/symmetric/HC128.classJ08fUgŅ3(^APѕL&6-Ic\ >xFpȗC|~ 86Cgo!0ԗLNȥM8Ӫf8,]*UεȔ̔+fMQ%nἭ{O3'{hp|Uel9:G#`U;dB|gvI.t'̓1,d%R&:u=xC;DҀF\&nW[PK     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/HC256$AlgParams.classJ0EvS~7YR.}섚&d
W\~Y{
p!!LK"oӓ~w#
ģ~pFpMB˜[W	V{5sa]ֵu1u몸זppbYim{ᄱCdzW򆳊}"A6Ez.I0iŭhZ;~|}`BY+rPKUc    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/HC256$Base.classJ1t]͓"zQ	1
5e7$婠Pb ?3noBмRZiafXhQ	n]&0U
&Lii]z>]
gsB/j*
UKgXMn
Sg$SU>KCP[M~OC$AI0-$cI3n8FMuvtw@D}skkm}PKxy     PK    A             =   org/bouncycastle/jcajce/provider/symmetric/HC256$KeyGen.classOK0Ɵu]S.z&<,Ԕ.)i64PČ xqyx~y|}㸉:Aӝ4n{H..zڤE8+m.(7Ua5Md*̣Ym32.haBNe5	k$E%	 VtJ_G`glhTJhIvV"^DOA4RΙ,Efqqxm:2 ILy%ⷍi#?PKb<=    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/HC256$Mappings.classRkO`~^viWHT:c"rb"E_ҥk#R5[7#!=o? lbG, CqYƌ+Ү4x[C# ^3d{nyOX tVZ"^[鶏E8|jn"q0ro=?dnۣ^m]&!3M~
az<"gwq^l2ԃ1ou-Ş0oZhK)`a'iaۢC2ҥkI5Kik;gq0\5	KXp?Ü^>Ͻ_PVΓ$zN$WT⮊KV1{*n&B}W"VBY2D&⡂;Чqt?O?AC)H#+C6M$IYҌtn~JiFS+Z;?j)=*Z~<fǃ`uh(hRk_P".B6
PKE8    PK    A             6   org/bouncycastle/jcajce/provider/symmetric/HC256.classJ0F8fUg݋uGEAPѕL&6-Ic\ >xGp\%97_ f/5%C?S)riS8δKqbUs-2%3Eʩh'|SvFhtpVٽ'dFk5ik^7726dUzG98G/""2D~$Y]K5]Iz`1-FINt{A,4 -&oPKt(     PK    A             >   org/bouncycastle/jcajce/provider/symmetric/HKDF$HKDFBase.classU{sD]DPHS.M[?#}yyK	|qF:gSŰ''~?Mqa$*!LF;yX,qԣcmǖ4ML{pjS©ێXeaB2L#E%EYh1M	ήۓz~ϑՔ^Sȱ͕y|viP0ܲްku*{ZHC%/nsJ᫹lڔ+ap%tHSMQ>C:	m2re{a+:O0([ׯUX-!Loy5:~`r1Nyj}=N̿SB}ssz0==fzFmɘ
1)톙/lW(a塩׊_Ւ̝&ܫn#4ᢆK5\5hxCÛ0Lw=;<L5+i퇹Ԫ;<5Bu*wRUt(ۑ'$b<".h0A8Rys~O@&iZ%?loOǊi,
4poxg1b%S0 QƔ񎁷)T-:n+鮂Ƒ=u\ŪY,*XS긁u$#,6tP1<Pnι޿սtC#L%np6Pb9IALD!7X 5Kҙ\;slQv9BY!b|1z׻VbGrG|6m|_3an#EB__vig~/tldOtL:,vh}GX0=FfӘAPKT    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/HKDF$HKDFwithSHA256.classQ]K[A=[SohbS>hiY-ZRSX7
k4?˾ܤ(maf|uy`Yd?k&ַǵO:l8j4qTf5 ='V>uXfg_XQ^ٯgRuNAȾǊgVx-ߩZJZZY~"mH9pЭG[R]t,weDM@S3uw裡R7;bqwpXש6F+fl=wX:(1Qjsxy11dIHToL7QTseBepN9,DeH	^#C>PzWf?Q<^ %iP }C20WQIn PKx    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/HKDF$HKDFwithSHA384.classQ]K[A=[7iԴ~Tۊ--[AbP|
ƛawj_@TD}faǙ?/c1ؖ6o3|\-m3.<
O7)/-)yfX8JomS׉!Hb#HΌI|pfwN{ڏFKI_
D+>
Au|C)PzKTcצ<ݓa㉈*b~4p0s Al\|qZwaʵl2ba"^F&p؀wX9*`F"5rxy1$f2$$*We(*2CjX80EeH	<y!XbW(_`7f/W?y4M(`[s PK>    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/HKDF$HKDFwithSHA512.classQ[K[A$QSoJ*ʚbAiTJ+>uzdO]YEP*HK>;̰7o~`YdƖ㟴~ab`go_X0æf,<m^hjDۢ'Sj5+q	+:+{)U$?I΍K|p̻gjI[I_T+VG >ᡎx|$-E[*޵IOrXVKɰ,bhp     U_bK+DNL5ZᎱ!G()JIj3y12$$*L71Vcrxi*>FBMH^EWƋoWiB-K$^#G'	PK*>    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/HKDF$Mappings.classROP=
ڍ꤂("N1Gel@dNhKhK.]R5n{{ ؖ!ˈɈHȸ!cNDjwe|sN~,S1D;d8kfJrMEʍ;#!prǯp,;瓦fS&Cd
oP;ܵ[-L-mzѶS%ϷcGu
7}ĦOWLAzh4#zM͒bbʫvA˔߷[%ܖ$.z0>"ü(]gZpVɗ'3aeIYYTp\ì<RēXq@Zh ,#x&m-Se>a)$(B11i<#?vgW: 6п ņt6#Ȩӣ83
F23A=9@LXPTl|PK> C  5  PK    A             5   org/bouncycastle/jcajce/provider/symmetric/HKDF.classJ1OlqlםB	VV"Bpa0&cJpP(l_܏Ϸw m1*g&6yʉq7Db<j#-B%CE%3ҙXQbpsyg\Hz>~p.&pm/&9n͑VQ(s8Qp=,PCOF4߸b|/~ϻc#i$},l1$Wtk| ;TpQ\7>qJ&։p PK	>  r  PK    A             A   org/bouncycastle/jcajce/provider/symmetric/IDEA$AlgParamGen.classS]OA=C[U("-Z
(*~@M
.nwiC(1ho"ƻ+_Hd{νgw x@KC,3Мym}sCx~n~!䧂JK%ޖsKB	Y(+Ɨ*nl	ɕ{M/s=\=f=KPHx'9 PDc(Dj' +%D5^=ۜ_D9paw)$`fsTl<&)*wb#^mTsݴd|3>j]_Z=r5%K|W<f@b:U@I.bY|fYU(JTM:T:2tH2]ó+qDcwȨY5thԐХጆn
4h8л^O1-@$x6m4`p~HwhP<磟QTy(EIJzh\5ЌX

B7cNc@+FZƨ^q	7uᖎ/qq:nV77YHZ{94Fޣ)uyn_׮iJ~1P'9:2ML q:p7cd-&61#F8F1%/Nv#-ɟг_3&CoxIG#[Xă
{-\Z;c廈QS)cp/л
C1̅Ȧq3hPK"    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/IDEA$AlgParams.classT[WUdJ	PQsmk+-rR)ONfRR*\3by<읽g;ylSqYE+*TdfHdݙ,COf{VڮPXZb7
?`X7kͰTV?۾M^Zm؁H󴹙6i=&=az)Vq)KW3\nvŒ\Z#eRsW
}-?wh2܂$Ezw`H	35uJexgk/,Q
mϥfݲqZݚ0dT }nQ<jMFlibTB^_^p<;ҵ}VAvQ⤓27;GP`{0Wwo
-
Ã"HKڸ`C1fy LLO`ZEa4NxS8|`T|UOg1egc<{1O4#F\ݙj"rF0;LY<Z<l0I勝i7ҡ#4ץѫcXg:n!1:I֐ŬXPi0GHfNy
xHS)힣^ͤn#}[Wxu84I8=1r S3=c<9u0σg%bG8
͉Jƥ% AQ.K`|+&1a /%n~қ?D7v,Z虥>ăxP+OnIcto߶Ma|}Ea,6`mL1 4 t	8{1vObRÂ+|?L 9gf9>B56?D[d5&PK    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/IDEA$CBC.classOK0Ɵlsu]=x<lCAoZw(M53MK)X&
~ ?!)}I_ KPB̔4%N8A?V#O$XӐS$)#!rPep
jwØ=y"y䊀,3N?!WTgQS%Xт\T
4%ue
^9ۉOlݍIf
H.jh۰ѱĺ<8\ya5G˜拘])tT{?`O[3xǨmbA?PKu(  B  PK    A             =   org/bouncycastle/jcajce/provider/symmetric/IDEA$CFB8Mac.classKK1OJg:>kf#((3V(VrLCMTj?%fAfNn;9#AJ2&$jƞEs,<&♌fͨ	upp;Y9\T%r*yLI^81U*E&CZ'EEѦPP׽OQA4@JY+eF6,lpE@3c0Zhgr!ڦ%I;o?Qۜ=PKRA!    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/IDEA$ECB.classO=KA}lrߍ`qIvJ;X,7^vݍp?*G{ 71K0tь ,efe-K֕7Birbz-gKY,%ʚ5'+\ZJ9-Q7[^"-ϙr8v8!I{Wj4k 0^]323Sfe96BwZ<
xFaFPKwj     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/IDEA$KeyGen.classMK@ߵiGF`oB]bB	m!7?%Nwv}fv9;h24C{^24kanb/(m4Uas&ų2SZasS)RxaU2WbI$_lI 6Dk8:4+3c@G
f>Ȯ{||H3DY\8El`t'Qu݀`c^>qFc>$(wI~PK    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/IDEA$Mac.classPMK@}ۯ?MA"CABv[lM,O 	ɡ3fyoO 8"hO֖gHycA.\Qd*ߏFuN0l"'Q+Ez:'s6fZɩI"r-ybEYj"1
VqFM7zI3N-
6+bۃ%DjjT(fS[ުV&K{%=}
PK    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/IDEA$Mappings.classUrDhڈ	-i'qI(؊ӘL]z6ƑQdttptSN:g;ݕ{ as|qMO8>p|q4]9Gccc{_r,r|!)ڍpC0{Sa8c1VJ
a+eĠdd'΄ZZ*?j+"db7m(;Lr,Rh[#hꑾt\Xy0n.G̝1c&,J;ʢ
rDmr
[n.#;O|[,ÍӲ-i>prPtD4jX=2EN|5%p7䩱FGie{Su{_xkskF-?K[Jí4]ߊ0s4Ur@ҩ3\޶ס4ضR	)ZWR]
oR7Ki-<G+5ߵFA܆:p̎)<ߖPas4J]:k!0,6M4v[/IGt#V)vlY1L:teQg̠nSuᝩeG'g


V*ЛZ?E},6HSX~3w133"e׆1A*T,;)VQBMŷyU|'4
<OaXiE`~iTb)06Zuvs $]޽ILUa o|@֢8Ƒ;89a8CBcI\p>A2a$/I|
~1	DdM}̣	I0H0	*	P.ޕdp"=rEđv;BtϱI6MWPKĕ    PK    A             G   org/bouncycastle/jcajce/provider/symmetric/IDEA$PBEWithSHAAndIDEA.class]KAkuJ,P	榻݄
r]gef-/ueQhys̜	j w"HN	?R'd}
YS$\
1	iP(f]_\9㴯'a%wI׸Iue=j>oY9zhq`bᵅ2L1@Ʋ 5lX2A7,HɕZsMP[89Vm9S
#la3)㥔au6j절~ PK ~B<  f  PK    A             M   org/bouncycastle/jcajce/provider/symmetric/IDEA$PBEWithSHAAndIDEAKeyGen.classOMK@}kӦUSAx<,o1m
m7kݐnd_$x-&:of}0_ NѬ!(cʙTҜ/<EW>SqxO^@@3=lxYnRA.2l&.U5G6~쯒E1 XindJS$:7.\]T\(aFS4*5D\utn'&2Q
}m
YG
'bA:HY`p-.aⶽP┝&^wlrw,YPK#    PK    A             5   org/bouncycastle/jcajce/provider/symmetric/IDEA.classYK@e[ת/A(Bk-"}CLhӒBO xM]A_ɜ9slmz4JղVz&t%Bi
P=J}k=]^S*.,]*5Q^%=ԕQYeȩM&ѪHaja+`7T
NPթ7YtL۠<ՠZ|mz7'j7P?rpG#Hqrqs92)%0y䷮qaݐmKGk
ו=w3'%#Cd
2ٸۂ$0FE1N\"NC,q8Iib8C\#׉s</PKA)l    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/Noekeon$AlgParamGen.classTmOA~HQR/4Ԑ庞]m/&Zho2ƹEH><3~+)<-!]fhMf6븎cx%jI%ɇ%ۓzS~%/%d"kO&=!<7Yٷ$m
ɕmвe豤J󮯸k	2	v\tk5RlsΒRVU%2C	Qwm%*߻KUW9eq(4A4G3Ø[%myrmsӴd<ӧڡ"3bSeJP~ӓU]nq_ľk.!k%%a;\2L6y[|fEz5(˔M:ypWs'w" @U9%3}\ƽfm2,:4$4tjpNy
=.03]mP 
Mݩ`"F5_l7ѓf>qyvTǱ]6Ћ+Z	`1p5PSN#mcǤq7uI\1	0M4i7.uA}?ŭ^yJbS<i͒AlMo)\CKh>GI}+	qHGct/X(|AOGLXDKƷ12{
}6V5p{wvQ>dpjDo,EL #WШff$qPK    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Noekeon$AlgParams.classJ@iҦj<^ěE! "(t]M}+=	| Jv;/;?_ 1"$#a0WZ՗ѭ6(cֹ`ktN836Ofu&]](2Yd,^iԒpbDDo\r-UJ66V&k. BaH8n
HQJ]$a,Z]9v8FljAw:9F$Og#rPKtѵ    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Noekeon$ECB$1.classQMK1}Wں֏P""( u<nӰvݴ?%AAuB73M[҅T\ڰt!؈YȒPEnSFyD0'F3"Dn	z.$8ŏys&ɁHY6I%.joO<"VNLX7|P_"ER)*UVhq!R*<@ =I3J)Ie">VdwesسmѦC@pg,vue@'ajko35#}'PK\2l8  =  PK    A             <   org/bouncycastle/jcajce/provider/symmetric/Noekeon$ECB.classMJANb]WxrHH@QEPNd3f6B>S@VCEWu}||8	KmtyMN{vnB,XU>V,gξ;)N+`y뇺U	Ft^B細j+;@[@n{z\[.
Њ1cla	ɝ1"=
Q~Ph
H??-		
PKV|     PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Noekeon$GMAC.classR[KA=msݲCb" )quFvՓGEZ>8g9ca>>a Yd.<ᅗsenqc6d
}NY0쇒rWV.z=)Zw\Fpˑ-=n;5_y@panqU^~^Cp>` |Zs׾
dd
MWFS~pt1Mc"	ZiHK,[HaD&,Lc"?jw
%mމ	ni]1asoŮFSy, PK#J    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Noekeon$KeyGen.classMK@ߵiG" E(x\!nLwf[Ϳ䩠G[*"x33;3Pgu{T^2xH+6)sT(mN<1Ua5eH憪kRdՆ9KD/^)^VY#|sdjvne·7{hxhz<q&BQ*7	QJ	b)1#q.ʒJ5cm̥vt뀨a/Dmwvz PK`f
    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Noekeon$Mappings.classTRP洄[QNB*j+Zj(qgH%NpXLu| q-2ٳg|g WC#
Qk9&8&9nHfC	(-,`Zb
}N" Dl0/<uӰw+SvZB¡hDnaӫt&hq=Ejjf-tMhziLvZ~XVmQ8v(7KhډUPVɍY\ǰ
ǆCv
}le]+PuPjѱOrQk%do\cXgx|D#s]⃰Ab
PězI] z=a:w,$$ܗ@BX}~\1zL7s"}	Ƽ՜wfx]<;i}$ՍX11SX1[Xq+2ncU "x< qO<
BZ?~ I;O-g,-h!xc7(w	 i>҉4Fdt͞"	R
?zQ1?c
D!vv}-lD5dg[xQkjsci eg_ޘKA:@PKĭ    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Noekeon$Poly1305.classJ@-Mz۩Php!ӡN̄Tc
X|(qR.$p|}|6A}LиR7'e'JKФLgI(!ӔࠌCf?n!4M&cjFt7F^"99;h8p4	_v#FH^+-GmgTȲ+<zXA-P}VNJ(4"=nluZGx	^VU>PPK4i0    PK    A             G   org/bouncycastle/jcajce/provider/symmetric/Noekeon$Poly1305KeyGen.classPJA6˘D=z<$O<DDBi֍0	gy
(~8#	!P3TUwSl&!{0$Tui~aI$Xkc\upG9g12zW-'\1H=d<d=xrV;)"T*hv}K;=Ytk6z%6(P!}&:1ۑ-vQt!avqPݯQ)?MPK(/l    PK    A             8   org/bouncycastle/jcajce/provider/symmetric/Noekeon.classN0I[J˾*DUPP'njE	Y$TcqBPImɟ?|{p=#CjyVT#Fo0Π}'3l#<S{҈N:gĆ#Gj!lCj[]ha2
,C=Eul@MI8.%L V*Nƃlh[׳<3L>z,P8TG1Q)`
,Vc=V4,]P<CI)lQAF(Mʃ9zσ-ZP0KP1G SbH&.wqPK<4DH  Z  PK    A             F   org/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$Mappings.classRn@=ۤR;ZHmhi	^#ǎlR>RG!ƉJ^ΌggϏ_x"BS0Wlj0f^%/6qZGo
miG290j+gv`0]*ۏ$Tt[}8fX܃;2b~`l'[tl{QxQ
Sz$}<t8m~F36,/xBߐW]&X,(Tpl.Ua*޷^5kt$ͬܐ9=VcTlP0kXJA(hXCұPԱy1C:tMQhtHDW'c3ld'F§H-_=®9
+.	CLF09T]]5437ē؞dh=h PK҉a    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$PBKDF.classT[sTNDĤB:m ;Fov.\Iۉ|pʒP <L33<sa8N=ٳ9{o=z
j*NxIŨTUdҙR$L]JZ}(]-FۖcwN]n[Ԓh=a2kppfc#ErØp##|0}2ǆ9[}ѺKZStFnWY}]AS1ven>!p~rN(ٶs;כ
Mr[Nд#O ̦o-#q'F#̈́?4Ln^5\یT
*MT׍m2yb?ICktrq0DpcSZ#h5[qwgT?⛡e^I%KKbʤD)VHDLYKyb8C=Q@
n
XQh"u
(8I\P0
oҨ3S"oS:Nzg"]fE(Z}(Q__&yQ`B偓30Rʢҙ-buMi)^	A1aӸ.!7xGG7unK]
xOCy)x_e
Rܓ(ŜK(iɈXp
Wቢ[ZAtKMj&R
S!7pooW
#0@N'Xaxw).A3`|fXmcWb%cRtjCin6cs <w2l%9=[YJ/\o=\dէƧc|ct(&SѩL#S155it+x87PK*    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF.classAJAEL:&i$A(;ba3t˕x(2٧
~U~\cHh_:λ0L9ۚpSL/wo7ĺ`[[U(nAjupV*h:y$<Ir>}_4Rh+$
>	qdB=qabdbl^Ha'ҏñ詘zePK皱   m  PK    A             D   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$AlgParams.classU[WUN$`[5T SJ `Z(H(0a&L}gXKYKrCfs{䯿T_ELu
*aH$sdL$2]<vӚ6Lgm!Π:S[kw/	#o˦+vQ&LOy|-laqlԈ*:4+=a3{v_9)]=d;n^*	{ᚰ-
gG*ZW\aiZlrJ6(Oc;eE;մMn1fzsA
{릣V
Q Nh2kdʦ#\wYپ(Ju2P{(GG-69sγ2nG%ߩGNm1mbE}3йgO};0us{Kshwt@Y"6B$i@7-==qdB.6^ցKyϨSqo)x[A\w$u %˭EE_2l &[h k]qpTJ AOf.O>p
wET j-MhRף!r7!<a47q(ƐiRX"'(c>	iPbQOnY)VbIgQLc!qtH٥@:-g
t_
m	4-1zI'NJ[W_$4tdgX_/0^A/TRfOiE -IIn
$v@%l_*8(TuPĻxB~2"cꏈcOSZUE}Ϫ:a3D
׆PvI~?Ae$B=AxOu%Uda[N+oB؁-#&X<:a(5Pl0VuU~ڜ uvIfO}DPKܣ/    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$Mappings.classTOP=F _((l
!|ďLזYH(D伷sϽ9 &WDDDI
x.4WBɷbR-WzRyŲkYoH':Ȭƨf'A$xR1!]XuMhTk9EE52yߵbjن2̗ݢR(W@<6sbJ)
5P2u0ڵ%C-k%T*nyߢJÕ洂m¥kJ.moIQzo\NV
;2cdjZ=K/O=T쬼?ы~1)	pAlgaf(SXI>T%m/M1mpYedVpY-fs[x,amw8 a qI	0rpc3ǓF)C,2te^8[&Cy%pўLf ֞#_A˴:#<r
i;2!L!C<!E!SEk9T=5|rUck PKʄ*    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1.classMJA_Qo P7LTgifz1c\x %VTAW_ &:g/FXs(i	:zQz6panBrKt\Wm3:eKtMg O4QU)S쁆P'$>tmĴ	0$eo'wWp$XD PK   l  PK    A             D   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$AlgParams.classUmSF~.HvIh 	MR8@1:MȇȒ+4)3̴v)Ndz{{<;ׯxdʈȸ,㮄>`3dŷR=P{iex36^cWl.#QTzUs"-q=oˆQώ
ˣZt5r~-hpY-={MԆoY;S<
ҁW+gĭaE-s2PVoǱgGwzzsJXhVۚIdj&d65LÝ;\oha	ujjVA]#B[9lʆwՔQX/s7\/S+K-Sg=8I?ْ-yN
D00m]36޶M+z&W5ךTEVHu@٫jc|Zg<tmOjɱV1`R6.gjJsVSo))_6۸|[:_BT[F%ܑ1Y:g}ФKcH櫱Vtf.!z:S
7#9Eg}xW="SpΤ5ϕt+'o1|B
aWqQM!A>x,vxOi{`
 :Cxt*xƄx.Ĳ0a1@Ƃ/X
ӿZSBVT01gx)J!rݥ7!,ue=M_Jڶ1BL_ї@R=I 'Qħ['8ΐvxglDXå:&ruLjE.Tb*^
M^iv:%RA; =DCv'*@]`}s' 5D(~:H«o븟	#atS?	ȟ"@uLƪ_ՠLhv8J"[@L?Nd"Ę_Qj.SgǭAOqPځ]C?ER!>>BPKfӾb  	  PK    A             E   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$BasePBKDF2.classVWW
L-Z-hP!	\	)Ԡ-&00ę	n}S/[Ės\Oj{jBŲ~wyf~ v[]XNv!	_pܫꪽ_@Uw,%@qoKǒLuӛ'u:땵a-Ȋ,MHAyOU|L2q6&4GM0P􄪳LglSLFGti׋q^CTC)BY{\
ɖu0y|fQ4jPw 'd-E7MrHD(i,!kf"5tЌ!Gm`smz"R8_V,h;E
r]H<ːK%-lU
I
|>Rt6ܡnJd$!٤P,mR֔"[BĎN0ŎiꘚSV^efW۞PNsZ),$b̴9iwB'ʗ#`RiL搕
j.xl˰+L8/e9 ^Y
X qVqP.ZhBQ=2Y(M%m
wsҰT[f^xB
?^N&wĚdi;2Mⲍy&Dl,Q[Dl"/" "(U6!m"ElC@m% _c K4|-|K<֖[ȭ4]TSx[lɖo9|پ.t2dv#9l6/ղX$_3ZFwef.oR.hY,^)H1jrsE億zHP~	1 a#z8%<Q$4-a7rcPa	㸄u x>%a-F8i'Y	><GF܍17z<(ŃNtA`/&8LqHr8aƃ}r	&9hazЃpCGqA8ir?<o	zmKQ"]P1[V&.G5ƿn@y9BK΍sO L:W48G8V`lu=WR㜿:3dB]lKªmfp7lEgp9^kx%+hžYZGrqogVݢ<=7/z#Y~+x}
Fߠ5/2 O:\1;nNqGH*V\w׉Y|zgU9zs.kuNcx|_!.+bH-Sj.tނ "R\'@*tѩuvʗ>
/+p]_ᢸa~*(})_X#RϹ5kI/%y PK(t    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings.classVkwF<6.i!-؄Dq mWPd(+ˡsӕF;2{쬎 !D	W	3kYA&\'q<!AX  |FX",nn>'|AHR*!CCX#d	_	Ma#|7Q)_cʥW2gd1-0X7~
o~1!*:7u}
,7y;o΋
W,2GhY5tSo3\nn.F%
]q[X<dmfkVmBTK׵FFQh-ălaͻفk4WX֊w̱üUjmF;
|:uC7p-y4Uڙ+re3=NvfuU9*bbz\x^t W\~\煆b=o|jU3Ab饺1J{N{ ʁ"YӆR㟿'o[YJuY+VIޭM*5dfS&ݲ٢faRVUrsUPN7Uv
-^ke骜K¦6yx<}nȝN״ 0G|| mmõ]MbGg#^*Ɉ_^r>0g^Ksty#?40c/Oq3{(cB#c`?F;cSvHRΚf֭2W*!$w|Wk' .'<4܌t/<~^~$!~|_1ӄwC48$Mx9)i[XOڐ&I5wgۻĀ!C<!"xR ?S8%a"EG"HxIxYCxA<zBXlӸ;L@P>F7nC|U1PKr'    PK    A             I   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2with8BIT.classMMK@50V
]zYE!Q!衠n!nZ$_т^̃y_%>:0;c4ȹ⯶鱲'Z-0]Ǯ7d©uCQ<+lz	^SGJx؉!afeZ8C?ʮz"ܣ4#OS`׳O+B.aL|PKW     PK    A             M   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withGOST3411.classNMK@51_F9YzYU*j	
*%nH7+Y=	(qo}fރy@$K;B*0nnZ~Q|i*AKJ.賮r*45L4Zr:ʮ׶Ml'3b0(^e4?ݮm}W9S[*zyޙp!DLSAJ	=1$+m[vN@tawjYL.D=PKO     PK    A             K   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA224.classNJ@5Ĩ1=Z/!7E1bC]t#$x(qc߃`fz #
xw.0.o25{hX
nFZZHdڅIr>QvVF%Ћ'WYSlS((Q+6q>]`N1A$A\j-ͰJK?cܫ"=l9w!|7iJaW8L.D=PKi!     PK    A             K   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA256.classNJ@}kb7Qk@<Z/zQS+=
7ٍ~'GS ;{o@I t'smtsA(1k[\Re+d빞*+b6SչÕrQ*Z%J<oz'-pй/\JBg,Nbx؊"f~b3cT9OK
]	_Emd!F{PK
(s     PK    A             K   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA384.classNMK@}kbaԘA(Vz(z_KLH7+Y 8E3f>? H|N7a蜗l/hew7'ic
<k¶T4rL|
WulGj0\+^q|{uzz1t+1c颟I[!DA3UQ2ZX,Ct/Q; ܥm.M@x0?߰	C!PK     PK    A             M   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA3_224.classNMK@5I֨5=Z/17E1+PU7ٍ,O?Jܢ[߃`fz !	xsjO0o/R1%{hnZJJHdH|:Q
˥lAέ\&\C/}ݜݧi`=@'@@׻뒍SEA!&Dąjn#¿(Úmw@v6_U]E:A
PK6\     PK    A             M   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA3_256.classNMK@}kbѨ5=Z/zQS
^e.qC)X$x)Zuޛb.ArwyeUg#RغP<"OrǪv>Ғ|~"Z&ܬC/~^>t={hxv	^!9MvQ"n+(5FUBX,C/Q;X#ܢm.M@x3|믪E.Mx7PKS:q     PK    A             M   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA3_384.classNMK@}kbaԚ(~=
ʚ.qC)ҟIGS x7ｙϯ 	b.ZJ挆Azwy}ĐԦ繰M%y2|jK|2Q9WK*TXLY)^T4=Z<})fWB|HN]dYwF C_%Ci-MJ?},biۅKoGo|U	cE PKZz|     PK    A             M   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA3_512.classNMK@}kba5=Z/ԯBWYKܐnJ6V<	(qof7؇;#Ʃ6>a]^wzeȹ.ϥȥӪ鱪O&ji;_Ŷ	7+%ЋGǇ]<}.fd|HNigF C_C~!U!{XŨnѶ& <jjƤc0$F
PK0S     PK    A             K   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA512.classNMK@}kbaԘRObjŠBuĄt#ҟS?%Nтx7ｙϯ =$>\3.]4W4Ӈۻ.C69_KaJRR*bY1QtSH>Lk&TXNlCoE<9?z1K1:#":vB¿zLkeVY	c^vEO!\4a~,Uń	#|PKxO     PK    A             O   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA512_224.classNMK@50Dςb'bbCЫ%nH7[<	(q<x{0{_ R>\R&!Hk]Eg-9+Ϻɉ,Sh0^.ֱëUBVe4<=I$#8ޗlhTAG֫<#8
 "~ rTa;C,El;ذض>\;qLN
ۯرZE
PK
?<     PK    A             O   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA512_256.classNMK@50jgCe1^TŠBWYKܐnngy<Q-x`=>? tp	vgD:J6vdwW7)A}sfJВ:Lf>FKNv0cF,~E6OqN<{hy%1Z1UС4;6B¿_z,\)3F E,nm(!~aW[L.-PKe     PK    A             H   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSM3.classMMK@500=Z/ڛT(z_Kܐnd7Vz<Q+Zk߃y03imtsIb]ߞ2k[ȥ/(϶^虲-sX-8Įg©MCUip`7@+@pؿ/BJO(d<Lx؋!aGL1$1ʎ*r8:FaK|R@|yC{C#PKmQ     PK    A             I   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withUTF8.classMMK@gjaĻ =B]bBݴҟIGhA}f̼ϯ }$Z)jpB6̨(,϶m[Lz\'vJW
Z
?R4OS>>|As)*irq)
{"	hB<4F۬iG!
YspP_.c®:oPK$     PK    A             :   org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2.classVvTI8@B!]
ISlg
e
8rmٕ0C5Pʰ\9%Vlk{tt_'  ^i8FUt۞N$j-J$kMU>іRZ..%xwfZQm/e&J*5f|Z:Cvh}jl2[jA:_OP͚[5l]
yMjru+-&:ve6fVjywTZ]Wg-Rpp)NOn#o(il/\[Jv#;㋭kj]eāQ->l6u24[.֗V^-$l:ۨTKmҺNdSm_z"zچY?Q|У)}n+|_X^q@:.;q6][oGO79ULiWV2\PլU1ܶNPCp43<$9fx<ó1\`xi^bx!g
%Wa<
jL!dN)q/<
:03Boۜ+qk(D1b#0C((1&8H&9LqA"(dDz19w9'u\p69;"2("HR֡"]#}'hX@T1M7Tw<|#{TPEXS_Ob`%E8dXϖ\D'U9H(G4tG~0ytXrCq'w` u_p>iȯp~C'mW0[;K=BC
{$zS
-I
{ҨWХWIQ/yw^lQ&	D^T'C@1UO?%Fğg I'xke+W!^#X!M!PK    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$AlgParams.classUmSF~.Hvh&-4%LjbB7!F K$0ڙz_:ݓejth=nv۽;ׯWF2zeDe\qG>bg|\go7RB1OIzA^m6VRъN_
c^f.igs9JM71bse|aZwVϖ5B٭J3\V<Җn9
UfV!T㳎UȺEBJuQizD5ϰ9loUGHj&Ȇkf;}>T3+;ڞYNyI0\fU
`yb?
T0a2
jeJEulG:pmڣYsKQuRpôuL7sbM^53ָ*ʵE:q{TD{ҮҌK-wxGvt{ϠrnH)8F#]ߟa
Q5qA3L5t7Py.%1Qp]q?IpKm	C>0"aad%~Dm8x0oV<9mӋGT';Es}xHR=
.$OϙԥcxJwYɶ풂1DH.!\kPBD)1TA
w1` s
≂x$ǊØpV	X%a|a<eYk39G3G/锌eqǯ/'14}wI+i& 1=o&?P9Ձ&F֕x 
3$]1/b:j2zUh6}Dmw-H$	ڙvHmO!'g~©,BHHɨ#Bɨn!DbUư]75uEkܕtRS("HD|R*6հ^f{V	h]*[qd??GL1=c<akKH1'hhGsߏP{BoPK=d<jp  F	  PK    A             C   org/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings.classRmOP~.*RyWpH7
6M`K{]vHYj2& t+#q$$9>9/=~	`\GYaE+h%AoxQ+F,+QaLt}<y? )%|ȥtd3^Z $0G"x3)09T0bh$*gI7.<f-O<;*9%x$"omL11M</nfaį;lXϒ40[}%fM=VbUmn
L,[Ċ<215sXa=ENbħ;X	IZ~"=R^T)}Medk}T#e܇Kl~FU|V	<Cپ(`إ|ƕ6Iv؁PK    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/PBEPKCS12.classJ@ƿQ[@^G-ADާ%lH6a7X>%30||aJ蝜>λnNf]/ò#̚Pep*Kå
ڭlqS׶&/mlǋ9p	W[m/BO0PKH}g[m*uFb0$eL˯@ꡈ1IK PKst   l  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/Poly1305$KeyGen.classJ1\:^҅uHg!.2aa:0媠PbJ-ą.]T	*~䉹"pdVvNΥ飜LLPH\(ftͪJA\BY2r2F%~ϻuLpxjvPsPw8p	aff,齥7()ZkTM|&Fr,AnQƴڮ
k[Vuqؙ#|2ZmnX݃	PK^3'    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Poly1305$Mac.classJAƿIb69BbJ"YdmR| J`3`%NwHh;&:*_ܴХV!fFj_NA>_zkVcmĻ/C&zWP'˻BNd_ä@C`C) GcMw$MVMl72(d*pj[q֖!;Z,;&\PKV&     PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Poly1305$Mappings.classSn@=\|4JK)4JUE$Db98Y
 >
1NRx93;33'G(PT̪0K9ؓCJ9AmؾxSb#SJH$oZ;{o@v8^KvE2p4;>zn?D6G"py]{að[_-:Qy1C_3CmjzoJy;㹦NfJ:iLM'Ov֮
*XPpM"wEuryjU['-imennСǪ)\ƚ9Ѱ:n%ScY:]o3t芌tt@kTdFDFZtb$ܦ<IFq(
ng=1C^5?tpT4gx
<9EUh#!6r»C\FPK[    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/Poly1305.classJAmU[M^F"H҃Oae;쬅},Ob_`ȟ@߯o 8"$goyWl,aх~lk8Twokb]έ-
K7JfrV_ZPO<'ܶOڑe|:
]Rmc=BgLHjZ9678X	.CF^|ba$	v:,MDwE1PK>)     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/RC2$AlgParamGen.classTmsF~qr%vQ^
@
SC'0|8䫪`KH:M'fI/ݓ@b
D3ڽ}vޞ^	(0gNf-=00{=LGF#TZVӳ5/T~S(QZJC_B/O7iOR	4&Cnar=<*+%N{*%2<d	vQnSyT:CҏQEK85x%W6w@us,vF&Nc1%j~Ss=d#۸vCNDtJ
ePC7m-*Ϲ6Hd7T-ߕѼH+{"]J_ʉu6٭LPbt7~)HxmRB?oÑ1ıccn=_rcaDm'dPUsl﮹Wŏ6ћn?|?ʧ?賸\JmkL؏~ycN؎i_1c',ⴅ8c!jZ8S;p,dqaۆK*.{I.4@Ś"skWp̉O~MR%ėdcyH>+r1$
ߐ`B?os1a[f+}W}8HZ8VO#KCRsyN¥ǘ12
2.802.>U\8+CwQ&_1gSkpZ~?^cqSKpd8^"q^6&i
PKN5  r  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/RC2$AlgParams.classtU20BS@0 jB1&3af{kG] ؂+(Vtelsyy޼rw{Ddo9: }RA~쓬C>.)]XܒUSK/1x,ˌC?><P2;
7F3ܦh8*S=mX*Z_IX8KGYܴk8oHb%uK&:g|t#FOdea,N&:uZ83O&<'M4ѩD$YIkra^rn&K4`)q̢`q*X՚NL­>ր1/b-֪Xڍ5Xd"	'"HO|j~!;L`bL(oFXzܙCou*b-xpK"5yE$ڔm
[{wMx|IEU&6DS>)hZULܺ)S칃5lmzH_>"jm$'Z:o>ϓOzǓp|TCE]9iәx"NNcWӲHo6Olyi$4hJ%[bTE}S1;]sU)'mUtt]HEۍd3?kv,'cqixN{꺫5/{/~)K_P^~'=Jf0βT.y,)Vv2-Q;/{/7wxo?rX̖3O:u,Ʉ-yueP	@WPF0Π]sP2
қa']m2@&dZPɌ</1d0;_FA2Jh/ÁBe/c |aXA12/dnLv*y9x[>B[&GfeX"X

Uyr!O;e:	"
d@Rwc
gZ|Vad0z;])dlmY4T$ُkZΦNmxG:JSX GW!K![R^NsW(+d(i|r [%zi\6;syt Zײ=*ks˒M&+]ͶT"o6+$D'Ub52U2m6Y6S]d׵V/E__^qdeLg"ySͧ++va,헲L:aलAvĝ9MқK&
yne-^/M-7Iwz*0 %NJ
~Jm̫2rw6[C#js|:T0eVt#2Dyl2 t/.F~O{"?B6׀zb#o =ub/<좓{(ҡ }b@?#o~\aȕ@.A,AF P!F*t:qπaF~2r8ȯ#O{#2+|1y	A	qXefZ#N9Lĩq_#5qsF> fO
3	Eu_\yF0r.2r-0_S9@\=j #'g!bP#[EFz4bӀV!ΈQ#
4yXcFleZ7rШcԙMF>
HpĴČf# -FrFZ78B#ģ<4.pMZ
Mku8#k#58ȧzqSu4]FxgYZGmd3yɿ<ȳyz$q.%.`ڏ5źX`D&.aLy\F!ԝ0
j=F'5ry!VkgbB\ yt>qF<J]7kXgv#yMBށ ۴Xĝ:wyܠz q7{7yW{H~#hxP++Y:x#ԕģ:xL 	!0#N ɧuWM|t <^EsD%_:x+F%kXt~u2v|S뉷x[';wUpufD~
$?!'x'AZA|B~EWX5k#-)n=֋AKuL?#j5\6ǳm+ǚ%^?SE\V-k'V[1sN{spOW\1g|N+|S(%ʠxWݬ
bMl8IeQZĥR{`>Z	H}L0݋W
IY3zzNQN>7kO%x^~9V)usd)*T}jYeNJa,7YxDI]c7^v޻˦xv6R{YtXl,շcEL9vGNĕU6}>&m`.J(ͥO˜5ht5N]jir[Όͧ\(˜>lLDN~oS~:UzGY
WTvf8c~\?і?'{'Si?kmE|gq7bϦssi|LU(.q/yV9^b%\~V`gO;ڌ{KLϦҫX
\{-h\E[Rcly֥l5ߵV4O;-SNN;ʹ猺Yf-,k?ύX!y:u
$+	
GlebK xc`J	$`W'|OZ	wW</ݿh]Jp`+Atb@Vx
:{+!Dbm{Wz\hS
)'@[L}lE*ڪj
hKrWJ|i7\yNXB"{W{?(x;?!sE,~"7OB2NPK4  /  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/RC2$CBC.classPJ@=W>n.;E%EBq:ԩɤ̤B>UG ;ν9羾?>\ᔠ#΍T2iFA9[(^`\<cBM=E:$XMezaH_&CxMNfHSkɫ.gwLX2?sEv]2u<4@*ح`EbbȞ*%t><[=bQh/AK%%zￂzhPKn[  	  PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/RC2$CBCMAC.classJ1δ^mօQ\(\vBrLCMTr5`3E]4/'9|~ 8C{dh\dĎS2UBEZ(Y"t<2vACEIDH>k
J&fpd3kT|9H%|D"95:G3te9Rz$mTJXĚ>ؠ?&!}(tN;Er1ڕ9w趏:E@xo0CsP`@ۏ|"nPK2u    PK    A             <   org/bouncycastle/jcajce/provider/symmetric/RC2$CFB8MAC.classMK0Ɵ-kW_M"*(-
xvYmSNTpC`Kyo_ NCP	Z2A_1{Rӄ<4Y$y)&La<$8!7,H@BBa	,Uf&ci:lu@pqɈG:EIѢ}Ք(wW-C
Rempm]w$BQh0GC͹ehghxo[XnPKѝC     PK    A             8   org/bouncycastle/jcajce/provider/symmetric/RC2$ECB.classOJA}lr,,\v-)+{R ?J;,yyf>> \☡S6	r"3Ժx+j \]VVkC^</W=#'|\RjbgE[V.D{
^.q8v8!IW*5G`/.z1d{OhMН:A70 >q
FQ(~PK^o     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/RC2$KeyGenerator.classMK1؏mc=A=)<4YII<(q*,^03CG-4jޘy.[U((]zз.vnd%/ťf婞=)1RR=Qj:UӒOO6N]o@K]  AV6à;BBed88B
[+
b/꩝(ߡ!gZ	"ꮂ!c4axˏ4au PK8E	    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/RC2$Mappings.classW_WbT؊(6*&$bI 
KŐI^}[Þ{&/	yy3ٗK 
z	;;	}~np=a n !Hp3­am0BB& hQAB0Fb8vB$CÄ;;	w&Cpp~	&<Bx8	O[	2]JˤJ`>vj0߾S`jBI~o:fHd		Y{'n{.W;<yq1<`dër	ze"֒繸;VهJ\BEӺ=*R$4vVF')I&ñ2UMp;:Z.Wk{th~$8K<zwsh-cbNҽ2\Ys<exb橶LhPui*y/ft<yh.`l8nyY^t/!`B==8}$vyy&,g!b%/dOb~2VX3C#!f~dVXy:xe1ضV\]
x=hM300Z&rMfERn(IVw.7c{z2%y,f\gl3U37,)A*L{}iX
*j4Ekʲ~֧а	,apT98#J4E$g-TBZ$ۺ%;GbDPI"SIF]`dȨLhJۯY2TF3XTgzNae$
ɉ16	-k<{K19qfj\wte:Üj
Y{)
.̵(Q*>'^E^e^5vە[gsW]g苚i*SnM-p[FE.#b(>1|h\\[\>>.'6<OY5\|).&8W\|]܊wqƊ.YqS>rq)BlmQz2mF$#oiLgcOeO=֟ zc<,;I\o~=?*,7D"f#K.+nI|'_s*b$`i|miUQfh͆F0C[5-NWWvy]+{D*^	O`./r6\rsN2S[jj#O6W_\a`Yy~VU^njNa"5Qrh,1:S7ņO^sz)|3V<n PKm*  N  PK    A             I   org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithMD2KeyFactory.classAKAӚjVAhRn	`%q5؏UCM!ʋ=1| ~IOح.ΊLv"hKq,:z!m5\ջB*AHpO늀p(Tq:,&SLQqbTc\~S+ScbD܄i"ApМIŽ,DP5luu{+-Bȷ-$fz))"Ms R0zya}i`I׬~ o@z?C^	l_<kJVPKe#G  D  PK    A             E   org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithMD5AndRC2.classJ@ijU]B+ѕ%tC;5Tc
X|(qR\`7g\>? b!EzIPOT>'#,i)SaP.{BrM4%hI(?𣄽b|tWqT	W!Zp7Dڿ=݅"~L6,EK6J6lZn3|I[&*
 9spEkڒ 
=1Q1<9)%{G;86,˻o?mCPK5'  *  PK    A             I   org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithMD5KeyFactory.classAKAӚթCA#:n	$tqvtVvGc?V]}>T4(/of`Ϸw GL F`+]uJnUϟ\pqv̤smAvgBYGVn_u=URB3:눀` Tr:a'SLQq|rTcڂB]1W&UĢ	D`9ۓJ׎A-ؘ>=e4ᶮбĊINa;K)P
f9mXZD]s,yA6fru]S
$ PKVmH  D  PK    A             F   org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHA1AndRC2.classJAƿQsJeP"
EwE.BBQ`xcu%$ =T4+]"3}g/ W8"Vk]"%j@_Éd	upT!r $ɻlK*8zn7ODCΗ#
E+JzG"}%wk"¯-d-,lX[ՇUS/خӝ6'혨uKȀLƶJ<SRGJךk8A8 d73Mg(f{SL͕e{?Ӂcr_PKH*  ,  PK    A             J   org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHA1KeyFactory.classAKA֪mutЈ&$JI]b'Mgev4c%CEDy=x3}|8VqX&X:O	2܋JsDp##BH<^u|u+=B3:T
Eh0ZyNz'5cLlƸTD́iO
\	v21Ω:-,Y,$]ſjƌQ<ۺBF6bXK"t
+ĝ+캔B9} 7#6 &cX0uü07 %/ct9]~sԔ9m,c/PKuI  H  PK    A             R   org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHAAnd128BitKeyFactory.classQJ1=S+.E7N3%+K\~_7	<8&fRpKRICP8Jsj7*Ҝ~'Xt6&ŪH<5?8j7զPF^Jc?6gm.hWG=NG-9: ٧ߚ3n"'12/\,nCV6I.\)?"*mc4dEkBJ0Wm-zHcCid`9Ǐ*%8v!yx^vCvNRy'p});30i PK8V  g  PK    A             K   org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHAAnd128BitRC2.class]KAku>,"4!"(
wmtl1ԕGE҅PB省=3|~ 8ARmd.抠}ƒMXM)S(=!~9/	j˴èk{aĞ}1sEpK>`q:RыrEd8F	B\px5?4{Z?^؈z_wtrvqT*F_]ċOڲQm cE.r((Db	
-)@k	ύ-bOb{;BVSlS%Slʖy]PKR2  7  PK    A             Q   org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHAAnd40BitKeyFactory.classQKKBA&WVj/Z-4pgDzImb'ӹrhjdx|
@1	B\ z,'fQ{TH}8 ]FO8t_P>6{	kAzCˎi0%F>`ؽ[ڭIqg}j\}%3l#}k2`Y7^f)T3gK]AuK0LZ6XJ	$XB xA`הgA :;
\3m
H3H8M`iȳ9m,bOPK벴P  b  PK    A             J   org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHAAnd40BitRC2.class]KAku
֐&»p7!(0AYVWBB?JB	ys̜}Wm.抠}ǒMXM)S)=!ys^Ԗiq*?𣘽b|tWpȍ,yf5ѽ|xhnfz6c#"ꇚ/AAAA΁Cyw&_]${OڲQmI`E.
((a ؽZRrD\T(ZWĞԜ{;FV[Slg3ebǴk\CPKl6.  4  PK    A             9   org/bouncycastle/jcajce/provider/symmetric/RC2$Wrap.classJ1O:qV4.\\T\RSIH<CIq'.z/ܯO 8d1CZ݌Ng0U245	[XAf
P?znW#Lə"}"95^2\1ԢѵZiB#rlpL#5%*Q(Э$~]Ce6a8FM)XJt,v@yoE96qPK1)     PK    A             4   org/bouncycastle/jcajce/provider/symmetric/RC2.classoOP`*R66V\$K.[td_o+_PC#:thZz>~+<J
Csbec,+$s۵==dCiݺa[b۫ճtoF
6:^ȩٞZ9)̖}c(#
Ҡ
jr1MzHE]
Nq,R_8N	vJn-h9
9}QʞىnџUde﷫.HV'nA6b
1 !($,H
R	AZL

	'pj70~l6@~a]yțvm8{7o9Ŧ3g5ԿW5s2
Yd/2󜥂'`d3O?_(p	LQ8,y"gy\&]rG*y,ȧCr#yr\ M1E>!PK?{  :  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/RC5$AlgParamGen.classS]OA=C.|BQRhj 
5$0lumf
Ej&&cZDa޹{Ν?|01tĠ1DɭL`;8ּ_)=D!T='\PBJ<db={=Q>M+sӔbm[Ӗ\Cs}]KPH㊇ ~(GȱZm"uVEuC	Q};"wmsy@
_W9%[p4A6GֳfLέSh<4
kgL3Wmj.C*SSꛞmZ5(䅬:ׅJrɐnaX|fYzU JTM:`8 WS439a44tiУWC~
Ni8ʿ;=ПXuyڴ=l
^ psS_ZQ'6%K@I'2p☊ciC<u#_WtbFꄻc&CgD^~nh֍KS-rFD^q*/?EA9(QEf!ȶX|4 #d=l?lc$:
?ɋ]}b{,\Mq'Vǽթ=nN6pۯнulהҸB=bX|f3
C`h32c% PKr    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/RC5$AlgParams.classJ@EkҦX
.ZFA\\1d"3@JW?_bn;0{C`2}"./aƓ26~VpZB<Kr|"\W[7zpR.6NZY9Rd
ӵ2WED"	B6RKz[!zsEH2cMKr8BlWԂ|qϕO>0z!HZ։8x,ǿPK[:     PK    A             :   org/bouncycastle/jcajce/provider/symmetric/RC5$CBC32.classJ@ƿmI?Um=)*	
<zۥnM
y,O>%nJ)|3?_ 8%ސ~+b\$rB_yr,<㉈ul.7gXk?𣄽"}|)4ɻsIU>L
V!og8{]-lLD_	D݄IO6]ݔ'xC;%vm4gBˆ}cM-$pqeJqZUYYXwF4F

}'M6_PK'#    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/RC5$CFB8Mac32.classPJ@=W4>k@XP\$(q!tC&e&Y ?J).0g9ps1TgƵUzp!IDhHrIpU,

.pVDj*c(D8OtRs2JNG#nr	4UC#Ikjfnab𼇲;Si3Q\T
X)`Akl;p`/ɀǱA#
"fQ2Q>αG%tmnPKؗo    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/RC5$ECB32.classOK1_mWV@[OO
4m$SAA<tO CDYoLнVZsc,E|)u
zt_Ap=LHVY&2W[%`p:Opdyd^U,-EDѦPt	8Ei;mn&!{g[z,')p#
}>.w4	3 PK     PK    A             :   org/bouncycastle/jcajce/provider/symmetric/RC5$ECB64.classOK1_mWV\^
=<<idIRa?%fKxy_ rD`LпVZsc,hD|%M
zt_ 㞉r&$yUiks-Hox1	n7^U(,*#^(=>As5耴"M`$dKﴖWsqpEBwVcDaҳ%v{[&aPKQ{     PK    A             =   org/bouncycastle/jcajce/provider/symmetric/RC5$KeyGen32.classOJA}mY2.A`""sRxl;ä{/y
(~qWUޫW 'Q'ucTpMrJ&zxř-sARD\J(aX
rY-ˉ0Vө(l5׺#Rt}σO026g4g*Npq֖"FDOA4TZa	G#.tnCu@k/Z ~&o;]m9APKw
    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/RC5$KeyGen64.classOMK@}k?G{iPiRIqMn婠GTx3ͼyxyǡ:Cӝ24/S+jyW?K06<<JORF*-4r,|U:r>V1	NU7P.m0[
Maԙdb%x.TIx߇i*aG]zT$C0VČra4#8FU0J@ئ
ꀰf!+5>OPKٰ
    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/RC5$Mac32.classJ@ϴMӦTp+8V\(.\q!tCdL*\, >8	.\Egpν	`wDоnΤgHXBE2<k\UAp^Ci~$k Ba94UML:c)I'fhHpmkieòѶax}]?ٮKMg#q )VbAtbȩY{$\Q5V	Uy:e~@DwDgR`@|1opPKy    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/RC5$Mappings.classSkS@=kٖ 4<(>V*R"/XAQ?40!)3,uFoҴ5_㗻w9gw}^s\1q*05[9Rw8rp9F989qd8d<df:a(+KsU`33KmǫHzt4Ӱw\$K6oj5}n+/g+-<©fl6ctWw_  L?
聽gbkԯR+=M0[TkD̮KTKR+*ޚm35GgʺEg.*US&[1R0KÐg,XSzrűtRL`?WIWd@oRyYs
SnhsHS0+`N#Ya(؟=/OoV'IWnx9kŒ.bg&,b+1,b5Xcky8Xl0t(vގnNT{ }y#ٗKh;{NifZ/Xx{P8)BO؉`\Ri!ZofD
0B`@)
!0.
^_v!D}.Ǎ@LJ`#

5_Ӻ$vPK[ç    PK    A             4   org/bouncycastle/jcajce/provider/symmetric/RC5.classJ@ئԪ~Wm]ԪEDAE(]CHHB˕?i]	K99'**r!we{vtPtDO,H3b8Ko7ERwLR~n@ԛe:AƵE :c()F8=Ihk
aҴF}Dy"Qp4e6jRLZÆvm
92Y#9T#1Q,`,)2;;aPjC~[R2%y20\7uPCc)D|1JDަ7@9|[D&X:47Mq8O!.w=qL< ~ PK֋p^    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/RC6$AlgParamGen.classSOA}K֪P쁢((J+PC	1~XyxmU#F?7晴s??}0{)t1$#O:Jxe{FRZnε}W\PBVa^2Tvs"CǳC%WbVPqxo.;T!IB-06SVC%:C҉QGWx.ls~A$RSN]
0樖~VR2Sujж۔j㚫%[͐iV{ːĪ*/mC-j96U!%%a;\2+_HԄ4VI2{>acxt rC9YhoKƭҐpXCF
Y
G5Ыᄆ>
'c믒Ϧ߂k ?ІWo/)<'EAJKSp@'ђ4p<Z\ܼ¨4FQG?.8+:pU`Ä!8IptнgneFY~74Fţ)(<*n^sE_,Ik#d:It:p/d
.g:fƘrc$:	#\dd2S0ykYvGqk
oy3˗p}7|Qa2fШgw#edqsHPK    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/RC6$AlgParams.classJ@EkҦX
.ZFD\\1d"3@JW?_bn;0{C`2}"./aƓ26~VpZB<Kr|"\W[7zpR.6NZY9Rd
ӵ2WED"	B6RKz[!zsEH2cMKr8BlWԂ|qϕO>0z!HZ։8x,ǿPK     PK    A             8   org/bouncycastle/jcajce/provider/symmetric/RC6$CBC.classPJ@=טQ*.D(
\\(tC&a&\,~8	.
Rs{s%	~0 ܨD6!'R=fO,LK&t)X%ҰG~u_g˸td^ⅫYj?&BLj$53t*sDՅb5I
YbFF.IѢhSt((?,sAv]2<4@*ج`˅m..6C^?Iqd48gG5jm9ΰn.J*,{XGPKU  
  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/RC6$CFB.classQJ1=ӱZOPpj1(FQAʅ嘦5u:SН`dTJ&\rNnrldʕ;ܹdraB#8UǽyP0$f^J40揾>EPQKFB[*qN0JՇ#6\dC(H6dzhYi7c<ůOZڣ?S -,,8p䠀E.a (.bT&ԇp*X+yVS2蘽YdPK/s:    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/RC6$ECB$1.classQJ1=k::EօA)nŅriiRпUA4Eo䜛p#ARHaq]N%ʒyBDnq樮)dsbj2<$8X1NZňkj	Zl=C}JaY~s,c$*   uN*q R:BDX\ӚreLoAx-%q
t&77ĭ]=KbW-/hxE{.@}"4"j!PK4  -  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/RC6$ECB.classMJAĬwcc+H,\`EPymؽ,G#`}`xÛy
`CB?W0u7*%Z"K2g9T;n&_f\:壺 aP0[&i9ͭ~SfN%%}68A$F;#0!+
v*ϼgcDiT|a/O+a;PQPK     PK    A             9   org/bouncycastle/jcajce/provider/symmetric/RC6$GMAC.class]K0OUU'^"FPb""c`oD],.Mgy5qG&"H/rϯ !HW{܅"$+ KCȓAئA_TsA/
(m!$('ySz0muǭ{rDGu0x-R5vy
d:`T?>y~d
f
5Q#?NbKFVB
$X-ddeJ&fjb+o8"R=BE}gj[zVsBs7l>ksH#
PKίI    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/RC6$KeyGen.classMK1؏n׏z xh{0"=H'ǘumvI,O?JZ;w2>3||quZ7eh^:uTǗ$XhYIa]4U
2wUZ
pǜIIKS,ә2Vr&`;l3fnҜUbu'X
t2Oao >C=.f!krƹVYZ)d[C<i4D?pBc>$
(IPKɫ.
    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/RC6$Mappings.classT]OA=CKw+ߊRZa(T!i 18lǲdm?KMJGQOm;3̽;w Ρq\1111qc㺂uK
CYkF~+k1(YK!n|:[dh$1glp!im&(8AePݶR])ɠyif+Vέo䍣&N.
c~Kg\cj;㎉rYzE`GtHV[Cbő0]Lĩg'vE0dd]E%to}[?r,aZJbו0JZ8мt c_Ґ;GN{wT<=PpO
Ϳ۴BO&6/ҹpM%z3z7gzTbW?᱆1bFãSmiy
0GOTLaAEY%gu\E
!L&jEkmãϩ1ҒgRDvFie&4lh=I;V25RzvJ7΀ɔv&7_
/{8t$7q}Xn~MV5!PK	b  X  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/RC6$OFB.classQ]K0=:ߟæâ/B@|XlfvHZao%(1)ʘKM}x}p-lzG?uxsGmGI}O}ő$qjEȕ}\6NۍZ`D힌DK[]K,Gv^L`Jb؎wR((b@P\-?ihЎx,d@(g`Xd(b,	rUC.S+젤O zfRQ
T3`{oҫ`XI˗wS#{	3Ȣ	PKc$N;    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/RC6$Poly1305.classJ0̭ZmBǅQ-S\
Bē1c۔#\|(1YH!9?_ ΰMPk솠qsL	ufd(aSxq;M	ؘqCgGg#.hջMM"Ӓ5ϾsɈ;h8h:h9p	j^[(W5V">j ,ŊFӿKÈ#{kSݴ6:x	~NUFPK
    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/RC6$Poly1305KeyGen.classJ1˴ӱ:U.x[TE:)v!
qɐy,WS"..9')v*(AR\x2ɏOg9T}4CMiH+ftNvJpCfJNĐ+ш%BSj5`,
؈v=;(9(;pT~&&,裥Ҩ7@d/\-f
Xɺ*.<l9vн:i5A};Cgذy6m%{	Q}bs
׼eյ{6PK],    PK    A             4   org/bouncycastle/jcajce/provider/symmetric/RC6.classN@d X&(1@»lHIiI&},L|(jeי;o +gcu/(5JFKr2,UR!C%nW-iv]GLwmL2'!=m,S3NKYhpңgSF(BTE:TT XQW4{1!vwޣ G#1ȑr89F8F98VRM3@qmHHϰK&~,Mz}<\:Q/z)Eo@
$VaF&ƈ38qO#&"qA\$DL>PK6q    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Rijndael$AlgParams.classJ1m@E&R\q&2$@JW3c{wB>>c:BDҟ7j/Хz+uI82dfUΝWU9rid!,s$?U^skGR	?]ºqaw6xÙdߟ;IGocl_GSBi-Bq>Zg{zvvBtkyk-܉,
9PKA
}    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Rijndael$ECB$1.classQMK1}Wں֏(( (6YIMWz*(QbD`'dx3$̼8Aӽ'K%ͅ
AX$,
Un6u
Ds
Ƴh&T,ٝLTb_	l驌Dh$L&d	UtIe vbdz揁EvE(ST((EFQ'tۏg
 uÃOP
tdg+\ZKDahZݗi]bϦE960ե喣Wxs-KhǶE4"j!gPKK9  A  PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Rijndael$ECB.classMJ1]WUDARaAx(x٠YlIB?SAt)xn79	`Lh_iQ7YJ8+.gVΥQO]s帟O&rZG]\(C ի&{5J
RSʷLO_ch1l1_+`ZR#nZY+Brgr+cDi|a/O/Xa;PQPKtd     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/Rijndael$KeyGen.class=KA5㢖EfL\sޱ	ϲ
(?JAFwf}aޟ^ GRI{A\LRg\(^sfl!(ueKAkQ_	%4&8a9˹.2z>VKNVAl\^XY13Z<>7ْт:Je?gZv ;!"42D9gR0cq߰8FA\:iMGh]
{+ď}> PKv
    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Rijndael$Mappings.classRmoP~`tչ:9Qѕ!>@L2B01]{JJKJYR5Ȓ眞9_]EU2IŠdJ]ouJyAʼcrt	_2$#c	[bը9xUNX԰xOFezȠr7%?og1$M@3[F M~
{Qvyȯ{އ{]ǵDP83y't4yF;OJ1Fyď\Q/-Z1,.ʼ9M{iy7t\t/ᆄ	7%J͠^QaY^.Z!
}'_9KkK
T@Z$4<TqHcCdCf$+}wK/]Z"$h)3M#IiFz~>edFaq̑>i?x͑7lǐT0>d!uL(5$5ȟzNR!HPKp    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/Rijndael.classJ0F8f:Vw/.M-""pICIiӒԁ>+CM '7	{ãpji.IFKQHYU0\&fիU)ȕ̕&N,u&EȞg8/F8bV[iAֵ8!pD1Vb.HT3wj{Me"NJbEa/n@㷿m: &iֈ=:qAEPKb     PK    A             B   org/bouncycastle/jcajce/provider/symmetric/SCRYPT$BasePBKDF2.classUWTf7a63wBdIO~ӝz䜩<'y<<Ҟrܛ9J;$IHhO#'!^7_	鵼^IO
wx8-a晾Ye!eZ#:Ӧe	8UtMV7<fI8gvn2+Aٴ+Bǜ2,f~(9[a2Y>#v3(
km1DDWljP>*ܐpH!mff]HH(Q/,ҦmT"y_U='<J8ܩk.H0'=[ܶn]5Ǫ[fLp$V	Gr@7
GFɁLhsif*,}&bzpr-i1=_UsSZY0ulcBnJ~J0{lSK7-2&m#X<Lbu͎WYyRXLd6K+242.xUƐd.
i22z_F[6uXνmU?j$I/=|XV/
A(>Ro0-)w$|W!?Q#^b@T┊pCEL*ᄊpA@'dHGJ84T1-x7UaF@^RC1n
1/w\U| 'c0;
}W0	|`	X(`Im+G7Qp4H7Zt*4^N#4%[5mAJm>{D_hFNCu2'Xk`#K
/~Ch/_eszO"f⛘#Ŝ1\iWJ
`g
XByelfZz`eGcXw1^<'
TzۄӨ@?1 cgè4zi:EoPKh(  $  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/SCRYPT$Mappings.classSkOA=C[V
((Z<*3$H6|2P6S,1?e[ZHh
˹wg=ɝ?0e&R&z
1eNXOJȐN~d0WOJ1ER
 3_>+w{pu4B$Z`9JP2%wD2K_"VG{/'\u\2,a5ߩ;"Ҟ2ExEE&xPtա!Qv$"z~&益Ł';ܕQR-Sݓ&I5<~nTSg06p[]ajsl%f';giJvrCeꐺb'kv'6,<я6Lø;1xl2q=LXb2dca&1d{q12$K}60[qbwΨP. EF{߀FM<j^E7(M01	^	]ǘ$xMcC+<ы)Hb	?PKi?    PK    A             F   org/bouncycastle/jcajce/provider/symmetric/SCRYPT$ScryptWithUTF8.classOK@ߚ1V
]zYEBC1q.qC)ICSPcgxϯ gHnokKq<a8lΟ#)\]*^HQHZ꙲5󹪭
Sj}<Y~}lhX
^
_z"[i5SeR8C}bŮQ{ ݡmfF',xOf4T ҈|7PK6      PK    A             7   org/bouncycastle/jcajce/provider/symmetric/SCRYPT.classJ@5mɛA,"EXlU<nKnBv-<	| JEPf`o
1;FXO:\J16T+pfOVJ:?"U2UZE43]W.Fq|00+{v|xpR~%1U7UQɰp8
a,Dk/kq6х9M盿saP?xAgKuB2VI'PK8QG$     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/SEED$AlgParamGen.classS[OQ-,,-岠(*P@Sh!!ć.ӆ"_5Q0bD˝"}83w'	<FU54H|p2dմ:)Crً|ޓJdbYۓz{%	%d:/;O9fWHeN$C%W8r}]KK +EHZm
'%-+x9愨M^fe|ĺRp}9dߖŤ":rhY㐳lÚ[%Ky>Lϴ[*YRꛞ
Z%*+BBX_+Eߴ^iUe<#!ez:WW.('k&/x8ݠJP^CF
M5hhp]C]CK|pd D/[0pl$(wh?|狷)<y*.c=j
T"QaN
!a`х:qOG
bч171g&:eh͡i7R.M\~0uiŭK<odDxҙ$$#YE-FP!w`j/̅8F1x,KZLCÏL_1hCۘN4Ul.ֆvd?ayk#xG{ß(_'F1N=bXM3VC>z00#ُ[E_PK    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/SEED$AlgParams.classN0EkҦPJвxaAJݤVpv#`Bb(:{k&C`:{"nnNVi<j$T!x+g*L=ʷ9yjt#0k9kS{wU
-!݃8Y6ҽ]pQ!t:/yYU>u @ 8"^z-I0[+,:~:|_~`BLY+rPK#     PK    A             9   org/bouncycastle/jcajce/provider/symmetric/SEED$CBC.classP]K0=jk>

oBk
	=,6-I'ͿS?%Ň
{sN{?>\ᘠ!EqkЧl&Yb]$2UEF5}	.llB?K gSiW12Myk!\QqpjV?бfknLe.讣P?tam6v8uA'0.\I58kN f<49&N=G*F_ёA.6ІPK<f`    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/SEED$CMAC.classJ0̭x逋:l\(S 2fMKX
 >Vw$9'NAZ*tmH0L>KLu)j.01:&4	ㆆ	?fقM΄Hk5+'\l˘vD]=
 xhk5ًW{gͨl-J+b׃=[د\OgH^)Ø#ouZlvpo;-/qP?&p PKVW    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/SEED$ECB$1.classQJ1=k::EPԕ,EA\N08MJ2-tUP(1
.qQo䜛p;;ʹ"(؜`+1baʙzJ'tf-XlS\Q.!Qt9L@SөVs1⚚ds-hߞkf S)1we:Q{W~8Q cA>RFoHL!Ո0hZamb׮E;/XuI%ZNQ%4`ߢ2
l}PK^
.)5  1  PK    A             9   org/bouncycastle/jcajce/provider/symmetric/SEED$ECB.classMJ@}Ʈ]IzR*$ q4[vS7GPg1o7?_ .pDhcBZyA,̢K2Wb*Tbn͛(+r6SR<$-ἦ_F[:QTCAzW;/~+C4@989p@b3Q0-
e<sN9"ߍ
#9qmW{PKOt     PK    A             :   org/bouncycastle/jcajce/provider/symmetric/SEED$GMAC.classJ1Ozqt^]h"t9N3e2UX*| JLEE8CCtrOp!/	2-&KҖ*t%U?$٘*8ex˞\f$e&ze;
gO>gYty@x0a Xڜɬ9Q(<pX0`X43`oD=J,Y1r^b)HV#Y<6LX(XlakjKs
%i4XY]Vg|g7N3qkH#
PKA&J    PK    A             @   org/bouncycastle/jcajce/provider/symmetric/SEED$KeyFactory.classPJAvc6'!2<	$B0a!lf$IQB
UP-4Q;'4o~@hdɘ *jmT%BBxFlW+V+qT5ayu)㌕e=c?F3FLvfHQJYe/C:(XigͶߝ EvɨʙОvTJm2.OQ{vf
ܺ:#z8`8A'HPKC     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/SEED$KeyGen.classMK1؏n׏z xh{ETD)V(xiXl7%_TP)Ab'Ng&ϯ 8mPfk↡>&ɬrYJLqieax>^ʊXǜJJŗ֬\YBVK^ڑ2 
pk=4<4=xZ$k3'|JTƓ}Лao+|qHk\1㜜q&S\8Gl`t'Pu݀a^?npAc>&
(IOPKm    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/SEED$Mappings.classUksD=viDBB}iBCQ214
P"+Y2EqG1ܕ1dr{={~x_8x:
8#!mE88q<xOXgRY\nɶ1Ua<ngUUDjӨiuTޱ?bl[xjj|EL2VR25lqMtdK5W-K(J'A5kǆ0Z*r6v}:B]{8]^6Oev[{t;޾I+͑*ۚZ)ԺpLD;Y>u
БITk'fҊz+Fx\x `&+ڙX]VTKhf;vyԴJB'[VS[[b$YʉiF!{X1tdؾyd+}܊UtCΙI<vh&Ơ+ݫW]SWB_&k2֪3t
ơ,\kq|իsVցr>T%/s	3=3&3m5(ӓߪ3$0K4Qg>ؓ*<H	_	)υ	HX3$!]|&~Lb/)
	s$$!Qy~FWKuJNH6=kOߠ_n+Ovi5Jk)ySe_xW H߄FEY[pr[!Ӏ;Q,6!
^ก*A\SQ&Ĕ2nG>'"7/PifNUrxv߆<!a(BŹ)saQ7bC	~Bb!"NG=83 	Z`ls$PKYL  m	  PK    A             >   org/bouncycastle/jcajce/provider/symmetric/SEED$Poly1305.classJ@-Mz۩PEEAqј Bq:iLI<'AB;psԻ/$䂠'Ոi24䔩,I%H\g߿˜
ܔ,3N%Ő+('ZpTh0
M-6AP5_?l䍫bըq6H!+:el4<94u+/pkqRMɀNog0=ɱc1b	uؿPK,
    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/SEED$Poly1305KeyGen.classPMK@}c?ҦGVxi,RA(<lMY

 E-;fvy~~} a	yB7A]BQFYlٳ^qFy*KR|S4[IDvz%?'X<t6TRq٘p,
"ZOm`hP"Ð9x쳑Q~g0C yjݭWj6ʨۨbwD0݈k-4Q1!`܎P06!/yߠmrPK    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/SEED$Wrap.classJAƿMάwhi%($nNIyENX!n:_*Pa'ohлF.S6Q	e.6}>XY  K%De='+\ZQmjYY80[׺7Q@3]=rD;=OSRt%H$grOƐ
9
N{SꡟN__kk]!PK
     PK    A             5   org/bouncycastle/jcajce/provider/symmetric/SEED.classYK@ik}_Һ7>OPRҤ$?%^[@0ss}x}Y3N
Ψ.4V>'DWl/3%)֕1۩d.]T˺Dӱ[ƣr7s]'!sVlpԭe

2
bmd{Fae7ʿg;>A`aelVB^³nmM8G#ǑHsd889F8FSKbY?Ũf?*Եe)G3*Kx;?jȝ^*<ѳ&H&k)b8MgYb8G&qH`E\&n#	PKzE  m  PK    A             @   org/bouncycastle/jcajce/provider/symmetric/SM4$AlgParamGen.classS]OA=CۮbAT,
?Rj!!ća;촡WMy47EP(ه{s;w~
БƐsvL:1L=a=|D5;ھtԛ.yM(!+}̎eݬ-<!r|H)жXb8mIءe/Tܳg;x o$[Y&qr*ªK1ǽ_cH:1k7r6X"0ٝ{ʩq09i\ٍ){
:VhKnqӒ@fH4ˍ]eH{bEJP}ӗ=iPb:
ᜰPI.-e/[pBaFդc=9acx~r]9Yhm!I[!ḆN
'4d4tiУᔆ0ݹ̟믐Ϧ퓹o-[%ŕS_ZAzq@;ђ4p2Z\ܜ(8i1>\я:pCǹ/:qEy鄻c&Ñ]swCn=ia4G+[ogy/rQKE:i-w,#^XÃ1 #8CY}2l
1f:1d.yI:;f
1z3}x䍬bi[u.*Cu/\^ŭ5}O΢#G1f4g_iۄQFPK8-    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/SM4$AlgParams.classJ@EkҦX
.ZΦA(c:	Ɍ̤~%.v`{;C`2}"5_'#ermԣ]Npn].dLTd)l	*Lpb;'nj]a:]T]CdzWFR\}2AvGR^yujA>;J\gw}$y#czDbEc_PKIU     PK    A             9   org/bouncycastle/jcajce/provider/symmetric/SM4$CMAC.classJ1gӂBBpV嘆:0jCIu']4??>pDOkdyCЊۈ	{gW<1e*UQLT°xp	z,Eq	1SL`Xhf,ܵ&XwfL01HѢhSt((A>,j5ŋWκl 
'N|xcv+%t&m#{6?ثZ`Mx?PK eA    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/SM4$ECB$1.classQJ1=+m[c` tЅ`Q4L3N2I+] ?JLA\\NNι	~~} ሠ>TQDX4^,UF<a#=W|cc3xŸ́J={	hS\Yr,rfөkfjosS 62cLH&"P)*JQtW : $(Ez(i#U2vR"ap3ٸ&n;P>]apU=ny)P}GB+
8pB::mQsPKaT4  -  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/SM4$ECB.classMMK@nWxzh=()
	B
PnMe7z*(Qk(x<f~~qLhcBay&s^]j2_ZNU6UZΝ0_ftFɧpY/ЫZFlQ\&In{jo	v0qk#4@B}B+MFE]gkS|݀x:A7 :BeoPK     PK    A             9   org/bouncycastle/jcajce/provider/symmetric/SM4$GMAC.class]K0OU'^l"FpDpE^).kfgS8tK
9O{ҕ=AnxIiWAAT# A=C# ]W
n$('yWi;8wmMnx>N{qvDT0pyـi3PXQBCQP9<A_IQ8do.)LdO`LHĲ˲VjD<
,bM
KSfKJXP(OALMtGP:lQh6G~!vz-biPK1";I    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/SM4$KeyGen.class=KA5,nT\!Xf9M:U@'B1||ᴁ*Cݙ2ԯRk*'=naX,,.W\r
'eTy29"/LJgp[ʙT݀8Ks>V~Cagb%x.t'Dd04D{ @Cj\C8sa-s4ɶ	FxUg
-
GkD/?cҀrPK>    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/SM4$Mappings.classTkSP=Bs"
GBPA`KE(vdя!%LH:iRgʨ3 &}@hGewwϞsO x11111qc&-$9c
AlU>Y-dT^9f0eԂ\tZj~naHbOiC4t&ay;[X`묨6Q5+Fl,3Z||OPJ@Zs|85BmΤZb%keۡ	IXS,.+UI̮v9{dZ%eH;nYslkU2];
:&(YF1^j+K#*Kw]N_=2&$L	H
x>/*=Ab[:ؾrFN&:ܙ+gTv|T%M*%GX0㛻x*Aƒ{Xp7C
DbUߤ}&Ɉx~9N6\ڴ,A[[B
RT
0!!M0ξ؀術'(Nul{ԑXd!?@)Fπ0i])u;	}%$El(q-h ԡ~E%bHg
APK2    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/SM4$Poly1305.classJ@mSAu(V\(.\A2N:m	3rP]H|>Ay!hXw'fWGUMc`\gIG2=ऌn7h.B3EH=r
ǋ霦2d~)juhۏeB'Lބ)xXZgxVȺ.\lXAWCN!apϾ[뮭P:rrl6zXA/PKg%    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/SM4$Poly1305KeyGen.classJ1Otcu.].ZAXqQ,XA(\iL!IX

>%bE\4N~8߽7@{	
怠|2O/-Kb,'"#MiHs3Ri y~x%8C"68͔&CcnTџRe	n'&IiiܳAؔє-%v8${j9[9Q\6=yEPAwu)ӚkwpaX>JGu}a{׼cճ{.oPKw    PK    A             4   org/bouncycastle/jcajce/provider/symmetric/SM4.classJ@iZ[kuamQDi:4)I,\	.| J<v&o0ߜ||a!Đ03bHjF75ͨȴ];TEKjP:#3Ԏ.KjsfWzz2L]}l	m'zM0)՘0V\VÜ1{FZ7Ïo1;spq9&9
SER`YLc!7r 4]ɐui}I\2Z
fhQ'EUh_`wP0KqI'&$q".w2q&w|PKWS  ~  PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Salsa20$AlgParams.classN0EkҦ)@вUlTHbĀTnR+8rldW0Ub(2
~z\5&C`:{&R0Zq,csœYUV076g/fm]+2^dYS˵mRxwƺ bN7T,=m^6CTºQ!t:{(x͙:g_I7	åYBj-Rq9gS=PO'!DI'ur0V$Og#rPKϐ    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Salsa20$Base.classJ1tצ͛-Hoǘ,I*cy*( >
x3̼8AL	ڗJ+Epb=	[W0JK&p|tz	FBʚ'5,JC7܅uK
`o%/sU=JKQ[maC4CY;Yqnfdct8BLMQ~ns?hjzH>PK@r]     PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Salsa20$KeyGen.classMK1؏tV=z<DJ/R[1aͲMJ-Ϳ䩠G)xgއ@
T	*Δ~*n.	Ʀ,(wE.0,Q'iey'0ǜ		֬LZ\V	jwbvvY
oQ)(E`g|Yu&`4i
6"A$A4ޙ9,Mjnx~C˷kk	/PKx
    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Salsa20$Mappings.classRmOP~.{iW*HQP:cDd,b,.1^K]ڎd?KMF2ncc?{~.d2222e\pAU]R}
)F^!?0u<'zɐu':iE$pY79ı<(WG*qENGxCO
bZQ+?=ۨ<$O3
:%Ʊ̞F-S?u(0jNP2=i1&wCU[x,{Wfw#5&0&+Gpz	7%J%aM:V{Aez=ggd6ʳ8xI,sU,၊kW*B#78,6E^Xl≂qdͷCqp>."kq3dSGDNm.#7-$1G~`/(T#7<KpQ:&2d4(zNR!PK/
  
  PK    A             8   org/bouncycastle/jcajce/provider/symmetric/Salsa20.classJ1FiQ[BA"h""
43dd,c\ >x:Kr>n>>`Wup$%6.z)Hedcu?Iդx̨TS*]1K)_繩\#eKY@r/p@"o6V༁{GeK$DGBJt#,A,#ĺ@oϠ2kgb"CKp"grmr>W^~l +,YU6sPKܜ     PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Serpent$AlgParams.classJ@iҦj<^ěE!Ax_!nH6ew[[IP&sap!!Ξ	FK6k,cֹT/Q:'\&/FgLZW(2Yd,֦ުawUޝ.0+Gide	{Jn=]^6a!0$NgJQJ$ ^1!If(lqTԀ<Ӊ{:9[+'{9PKjJ    PK    A             <   org/bouncycastle/jcajce/provider/symmetric/Serpent$CBC.classPJ@=WLnTD(
	.
Bq:ԩ$̤Bv?'A ;Ü3MtajBәdtsT)r"$􁫌e$3S+?)L/bE\	[ruI=
Y.bD/kemcFy]]U{'C
6+r`cہ
BJw %Wai5{m2w:3-kǁA.ф
PK߫    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$CBC128.classJ1Oڴ,.EawB1
5u0;_UCb ;ܛO 8$(z.AF*zM	u1j 0QD~o(/L&h<rʾdHJWNl%
q*#F,<HQX(SPyXﺓ6.
 ᠂MUز3عapE.tf(pԬmjoJo	v￦5{ PKS$     PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$CBC192.classMK@mkҦ#~{Ң,/EQHP&zۥnM7a7r/y
X(qS,`wx^fg%	^G`])X
c<,cN#Nʒ4\>ppJe8:?s 'GD/bxS%ؼAguӉi|iܮ"~mmTlٰl-{lUXm(^Ȇ*6:h`|J`JJUZsc
Vb4}S2pr9E?Ec;ǎoFPPK27E$     PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$CBC256.class]K0ls]11	DQXb0elӒtBK^Qb:dr9𼜜O 8$({>AFHjDdtrT1r$$~VQ<4a^|<sEY0f&*~C΢Jy'M'qn$!/<BBͼk;H!l8aӁ[T|W'%W~h5Q7XqLMuɀV`
{0Emc;No9vMFs׍PKҙyV$     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/Serpent$CFB.classJ@ikǦZWPpjePčPp']0I|%W>%NR*vv_^c![2<:,@]Гnu'~Zi`{=)q4ɶ')7Be2ݠi}_$B<zMR"w+:drn	D9)<(0T*c?y?uJ<&2`%RNdހEE,0d`9[ׂKI(;(դ13n#`{o1G1jO
ϟMKAPK5=    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$CFB128.class[K0lsݲMEBQZ	.kή-I'ο?%&á2
.!o		f ^|Ip{}\DqȬ~oY~>^Q̓px_B4mXO]麜E"|Z\0z<;Dp6iO%>\MǞ,G_W6530c o0P 07q*64[7d9-ZE,RP,PD1eUaʍ )*
Ӎ馊
jW2D9DI
`U6hmRJ\A(~PKUF    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$CFB192.classKK1Oڴis! XEa;Ar̐
\,kJ	9Ʌ{irOp}7$8
d?}8v{;r7izhaGH$Zm2~|=	^Tuc:wm
ɣA'b:LM*iJp57Hz2E"C1G9øM\w?٪QO{ME@,hYRfcay0)HR!(}_H˳HDCIaz5ScVGN2G7F(C<k˷}G)S{	El!PK*F    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$CFB256.class]K0lsݲMߟ
((].][Nɫ?JLCe\BsYvO/	aAw׉b3W&a0ns[O$8J>!QHp	:]PϢ%^RLgӛT)~,<f9dY93ӼM\w?ٺH'{Med@iR(bb%Y,0.HV!(7|KsGAEaz53#TCA*%hs*^X`etXo)j
 PKdJF    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB$1.classQMK1}׶umuG[A""( (
qmmdB

 A<	̼7	3/o CPt	*B
sa~س>`-M#ӛAM(ӁH6cQnRNeFQ.c!yNθ4}',JVS1-طdyQ}!AtbDJ{bF\~Q<=T<xj{_3GuJ6*2f\i<.VdweYpسiѺC@yg,vuE@'(`mQ`3
}'PK
8  =  PK    A             <   org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB.classMMK@֮^
=^EDPPݚTTPm(x`xÛy{`8"t/eYJ8Y>ٙQs`9QD,}cvϧSV]ɦ"6붳GYªL/:k]A5~e9@KJb،-B'c&$ưˊ{8@KPVͻA6 9D;+_/p/x#W*jPK'     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB128$1.classJ1ԶUZ/K[ABC .if&C&-tUP|(1qQOH8K9/o NOϥП,UnF.uMFzf[̈́
	&ӐKr?FX,Sa+l}5)AlKAϬ ѓDo	E"G"asW~\ѯ RB	ʨd==vm̯5T<҉T=&\*%I"`NI7qz%27gԾT
^Q~Xb)Ud,s^e`EPjPK0;  F  PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB128.classPMK@}nIxP*
	1nݚ&aw+_TPGRg13531	CR^1
$E.256#1L(u񪦤YdtIe.pt07d^X(5e|ULqq4~r[nG&!j`#)g&yN:RcMGsYbu\N;x
Mpt2;PKj     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB192$1.classJ1ԶUZ/K[ABRqѡAQ4L3N!V*( >q'$%7 g8$jw	RI{@XZ/|*`7Pp:&`c=W|FqfBR	eGiHrbr"KF
J;ynG07xVFlix*ZBQ)(EHp\ֹoW*ȀPB2YOO\t"Up-TO*J	E~GvӹfMj:z@d3uJ++>ݙEkLJPK L@;  F  PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB192.classPJ@}nIx)PnM7a7Y

g?Jܖ87|}\┡OWJag/\ԖLgDa75%#r>()KQuQ6!ᦂzQLD(k2u〣ʆf{ʸ?	Qa a G^O=0њL֒9
沶םsкhc	qZ{jaћhenPKN     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB256$1.classJ1ԶUZ/K[AEЅ(iɐI}+]| JA\rc;spa ,A-g>|a(Kj*>~b#V3D4$҇`39%DX#%8[j
~䔠ouD@OX?ѓXo	E"G"~sW~\ѫ RB	ʨd==rm/1P<҉Tc="\*%I"aNI7qz27gԾT
^Q~X`)Ud,q^e`EPjPKm;  F  PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB256.classPJ@}Ʀz$zY,ZBA(xAIM~VO~%nKsf?>\PǄƵTyCE<L.dbʔT&Sɢf1qJUuQ.
C9ᶂz^T0[W..{.W63{QFqh><>|(}Ae41
NѴMlwV@MX{ZprGXXz.vPK{.B     PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$KeyGen.classMK@ߵiGR*"A
tݰ<ĳ?JRwf}a>>_ \ᴅ:Cۛ14)HY6)KT(mN<1Ua5eD枪;RdՆ9KD/^9^VY#a;t]p2#Q=4<4=xZ$+sR>uJ?0B԰ >8dzNX9gҽ{mgsx7: wXWk=PK-/    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Serpent$Mappings.class[sTǎz3	h:I[n6$b6[ZnAG#YN1w(w(̤#|$=f _ٳ:_~p?0a>~2&1g82d3$N1fd8 4Cfx!ɐ
)	eRiQRRT<qη<ZsIѹKt*
"+qhbvW,䪕fI	{ڶ++yî340:0܅0R
BBl2f< ڦ3îr,f⡔Y[3l	[vhVfؚSۅs鹅ԟ|z9'^
up'K<nKOVJpOWLy:tz:+F=nP!錵Rn	{wFOF{HQ͐^Vr6np2tbumSS+UVSNݿ;i
RyjbaM];C5-:sKZ݊eg.f,h'I3!a+s]uCMũ)oZb<&!͟mj{zw,QhǴN}k{h/9VC!\JOb-vl>GbcƺF8{Dv/$Z]Wl*=zYd`xKy.qY8\,qpY*Y.9ֺ'pU2<6X\\j\^bssq4lr0D^`M./sy5Bu.oD9
pyRE{=_	PNO6[=o7r!_r>[<HѻD(p%  m&<oZ=G#"wD| `+ P [仂}EODiE{C"WhgB
{{%l6ù菺Owzq#7PK(  
  PK    A             <   org/bouncycastle/jcajce/provider/symmetric/Serpent$OFB.class]KAQsr,.n!"֣x_JH٥#gwaw+#l1˕[+LחÞߓN߱#Q MjC
I1쏣I]IyC* ]$)Cu7qCfGI.EuNb8ܴ<|c/r=ӲCq_GsLs嫱<QZك?:)Xb)2/ (ǂ%Y,3djF]JR5C
QBAƍJtCgUpۻC E<
6J?z7
=04rPKX>    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$OFB128.classJ1N[ޯBQ(8=̐
J
| JTEhB	9y}{~puUaȞ)S_ߓnu#~Zi{{_)$d[H
5dt>
vՅqK<PhaۥH	+M[:~^$<n;!	Ye]&8Boh=fV=Ul*"T,ӱM1kČLLb!S`(֥$U0PgJ=5q
.q|cfcE3 ӧ}UXCPKbDH    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$OFB192.classKK1OڴVBt1A)BiMTUG\Nn7o/ I6+7`ϗv='rl92
BYvK޲\߹K${qŮB$4}ua:wpHAd*x(󝉠6iG'>U	&C2Vד)),ebMq*C1[5xbS)Xfbl y``Ay\][)',PX<!OnCC2,8 Kӗ}]@PKp^H    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$OFB256.class]K0lsٺMߟ
(t(/a;]ZN؝ɫ?JL2
799᜼= :Cڬ0dO\F;j['cGQ kHQ|whmWR(I$QȰw._Wcw&)]|eb8iK'2ۋ\OXvH?̑pLpd98G4/k<PZ٪YO{H2t,ey00c9gt?u)I<;)ԟL@Ic`zF#>e!!
zx`iaӾ{	E!PKx.H    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Serpent$Poly1305.classJ@-Mz۩Php!(eud&̤BUCt!Y30	gƵ"!h>(;=?$8Vz@_X&8e:KRE
}:2e|2Cg}qCVo55YT73i6j8톆?AAAÁInߗ)6
DuXn9j;[GB=Xa"j۵wRrD1`ALuf;:Mrrxŷz*PK<    PK    A             G   org/bouncycastle/jcajce/provider/symmetric/Serpent$Poly1305KeyGen.classPMK1}c?_nգC+Hx) 
6[ɒY

 2搐ddoG˓ЉptȞTitXB!ViÖ/_	g』fHhfDX梣
<6Y:Ci|YeN%v߷tEUvsXA[.j	]5JO:f7CC}qȅqXw\u	(>Q!:,\v7PKqb@    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/Serpent$SerpentGMAC.classR]KA=ٷ}GFD=B.!B>8:̬?'#ЏfB}pν9=s$K{̥+ܰJ!T	N|١~_sTq }E\[..HPh0X֎uY|d#g]t6T
z=J:pR+b~z(3261`3%/ĭ(x_*M2Kg2 `1%I,0b"5
&Jj9JqT("!&ƸuFȵF0[Cas!^'ycoPKZM    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Serpent$TAlgParams.classJ@mӦ(h;@^dRf>%Nbq߻sp ;=7J+wG׆ioG3yY-Q:#\V&/FTZWS,֦Պ۲dNł͚#/IYZƩB$+k`ƆC'c.k)
3]t"̫Dk6BZ˶Yp&TԐ+y]|`N5	GG^#==PKx0    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Serpent$TECB$1.classMK1ԶOmk8z(
ADХAQiئn%YWz*(QtAuBy3d	vڝ*0	CmL:䷃:46L.$v'K*-k[zip`,$&X%TtuQgTωx72WHڻ%!!!PPdowڏ'+ȀPB2Y=-"od22CʕQt-~=pi&݌Vz9XMu3E;ʏslD[tfQ%6y
TQT(oPK >  @  PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Serpent$TECB.classOMK@ԦU(E!AP (qЭnM,O?Jܔ8}03> `#B\iU]}Of\*XLd>,JkԘp+g[M,%.xg*D;N#_3U
hX!\oeݭ$gQ16̌h6+rk䫵m#~"z\`snvZPKAi     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/Serpent$TKeyGen.classPMK@}k?IG=^ē Z
SMlY

%n73|}~iuZ7ch$:|)7T03lUdaSʔDd'MF0\!/\(ɜ(咬II[Eӟw;W6IP{iGsBHĩt<Ao
}x8esbF1TE\h;^e̹k34\q
-ءb	oPK8'    PK    A             E   org/bouncycastle/jcajce/provider/symmetric/Serpent$TSerpentGMAC.classP[KA=msnA%Dȧ$q[[ggd$QѬI's$K̥+ 'k]C`A+Mx%({SpqoĚݨz>{K.s@/nK=!76	hQ\g e m c00g K_Y;*QZ24-SV3[HD$MX1Ú	X%HE`Յt("#'Ƹ5
G#Z#!߱9[oǎFS<汋PK6#O    PK    A             8   org/bouncycastle/jcajce/provider/symmetric/Serpent.classSQƟM</ }
*R;,BguL]5=K<}~<>Y޷V~m>Bf>\9Zjֻɹc5ȵ_WXH5}엻eݩ{vʞ
GC/Fղ-ϧhlRrѶ6ēԒ62֦҆f{3:37KBlUMl55KmϬvnymm~pӞrNS)zI#/{
uwU2^7&\-(
qAT#`TpN0&\\\\\\\Lnn
n	n
	'pVxn!6P"s^V:NE#N鼊䛇:J<^k=F'DvWwGo">xɑ?7&˟%x@b	X~=3_AOL!E9"<9M gM1!)E>#_69LΒ)59G!I\ &K"\"ߑer\!U=FroPKg'SC    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/Shacal2$AlgParamGen.classTmOA~Sy 
"_Rh!!u=w޶ȯ(1dsTH><3~+i<G]=4Xrx6eݜ9j/%/%%d k_&[TplI+#;CF˒+Q	d@qdxД!jB- 695VQU<C܉PmۼM{xCբ80fIL+qUCrV\Nr,oTT3S:QdOtY	o67g-(W.F"+dɱD*l'PK*mo[,H4rI2+w5~A*BD.9i25O稓Q4khЬEC6
:5\Х2Cҿ+>О^Yٴݑ
'b~Vc*_yǓ٣>}31/.Γ,kq@-b7.nj\Ĉ6`:z17u\-_:0*u1D^y#Q,<Uz/+( 
Xȓ4i-$G81II}lf11"`.iq͉/K=	1j#K>Gpޢye}c(^1I57""#WzШfBf$q
PKV    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Shacal2$AlgParams.classJ@EkҦj\n;KA~Ltd"3@JW?'1}yaL	tL,nI<j~۱йZ;#uNW&g/Ng[+2^daݗuA՝%T,=]e!06 BaH8
^snpcBpUm!Ify3!DI'tr0V$Og#rPK7    PK    A             <   org/bouncycastle/jcajce/provider/symmetric/Shacal2$CBC.classPJ@=WLn(E(
	.
Bq:SLI|?'A ;Ü3
MtnE*;C $jB<etsTt"R4bQ)*}"Fmb^BM"X4cfJ1WTIs%o%Mg0k繈iiԯ=wvSt]4@*خ`ǁ]G
*	ArƑ\y1Ѩg)&z8Q]o?#]l	PK$    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Shacal2$CMAC.classJ1gӂ "P;JihS!
X, >Y4Cs?? \=UF4εg=OD.bɄL3U"-{pݲ$T3.,\1SBW5|6Qo<M?+9TJQEEA)j~K҉4W'ը 5R6Kaۇ-#ggp$D1VZtMpoX]`/~wwu}PK-),    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Shacal2$ECB$1.classQMK1}׶umuG[x҃(4
۬iRv+=(1
x2yof?^ c jΥم
aHd11 ܦ:&L5sfJP'BGRލgw!A?,N3Ct>,[Jp}?a \A:ͤ=ec('#~Q<=<x*_3G5U
+J]ld"	KSbu+̹Kٶh!x3fpT
aƓcc}5ص(֑G>PK9  =  PK    A             <   org/bouncycastle/jcajce/provider/symmetric/Shacal2$ECB.classMMK1]ׯU,"ЂA(xi$[?S?%K:77?/ hވмѹ.nRBߺWb\JTT|+r6SӒ?MOmWv	wB
Rc[;MFt*\F	j
%1bٱ"$<W.3{q(\70:A=l@ry>VVF
(TPKf     PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Shacal2$KeyGen.classMK@ߵhHգC[E*bs<%MH7er/y*(QzxgއNmjy褼ea0/9_jYIQT2A){en̩T|aU2U|JH̈́mخeہ]IGPoад`YF0+3c8݉6 *od(TA޲8Gl`ēi:C:ﵙw8OkI]-8PK'    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Shacal2$Mappings.classTmOP~.ݨT&
ʔ|C7QI~t׭KWHYjQ?x:!~9<y{M#ssph9F9r\q&-3jdW'ץÐ|63V`g*y-Xv/X2CؾgfK"'|כyU2J<TOZM&d7q&Ĺp<dX<[t0tkF>%W.R&dJz]::'IP۞8-nآARzv|r]C{GhLgJQV	hWnc7I;2Τehdf)_$::ݖ
)VU0`ASm-;sKvg9-1UCsULIxBRb`,@7
(uá|LVmPbA1Nɾ:'X44a!>:sw8g,W1iQ0SKQ?*QEd싀j^iӶґ/HjCXP2PK}:he    PK    A             8   org/bouncycastle/jcajce/provider/symmetric/Shacal2.classJ@4mz_.`E-6t:ĄdXc\ >,88j5nڥݷG(]}'R8vi2ɨL$QݑENcWGf];J?<"<"%
ottQ@;Q'rpQhp499fc_bl#м6FǶ/Dnuڤ"Șoj.=_آ[XyqX".%bL&w`}PK>U~2    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/SipHash$KeyGen.classMK1؏c=^TD-V(xiff$-Ϳ䩠G)xgއNT:)AZinD	zISԢܺL2a,V\YI-
w!cNOdWj&
b!Ql]l.ؐ[fER4qWe\'l)F`Н`o#8␠3IwVZ-smħ罶t&|\h|5/PK
    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/SipHash$Mac24.classMK1鶍C%P

{QhOB1
YT؟婠菒E wfy`0@u{SBN:ƾg,d%V7<.{%`)RҚ7=W*ϕZJ7KzuuSe
&;{MS@8L&HpD\ҧPv	#4vqBvy60'lNI1pxPKè(     PK    A             >   org/bouncycastle/jcajce/provider/symmetric/SipHash$Mac48.classJ@5M7͋B)XP<؋=	v-I6n<7EAz33` N	4˚ھQrm^ً^ܺ\2aiVpaٓ}#*Lf뢐(1w7
	v.{)Z!Ep ^#I1qHК$Hfsk[s4Tg#?"нX!zh?55FPK|}L     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/SipHash$Mappings.classS]oQ=VѵXhV
"Q!VC$1xtɲKWШ?e`)"$23;s=s,8Ns9qsD8slp\$}_Z2Y/2be{T)xvl!:1]wk;ZZ.ʩL*MFd
"Ia}!h2V}yȢ^'Y1ܣE[uf[FщעEQ)zB5PKt6Vi0Pzhw-kjSMMWێ3%Ԓ$M2K~֌vYtNnoKn)z2iܵǷp]m	Q	7Y~;3Cdjr-92.gd\CJƭU	 A^1d&;4H"B%N;$W,Z4t>?$C1|"=:K_M	A"?¿#?#7@^Y!3xCRYSB^f`lJЋVh&'FFE`r' 	PKLE:    PK    A             8   org/bouncycastle/jcajce/provider/symmetric/SipHash.classN0FK -;b *C ]
R'Jy,&$Bܢ-J|Ǆ+{cn	T-̔K45"2|t2#SRmdQK;3|njb{WNM}ga}RzV1ẕZ%^#]!ЋD`!zpΔLyo<a3{["@C7 iXg-b0PKpyI+     PK    A             B   org/bouncycastle/jcajce/provider/symmetric/SipHash128$KeyGen.classMK@ߵiGEQZD{+<%ݐnSAC:0||qUJ3! ➙5A7	}	uY؜Ʋ	 ;f6W?)g)RNυՒ%qgVftؾCC݃A0hRd4c*cG7$D;k
c/@}jOA8Tga7,Ntuwr	jnDx~
˷ij/PK0    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/SipHash128$Mac24.classMK1鶍
m/ҢP`/
z
cڔ͒,O?JL"4@pj?y!+)*Ṑ?FYAΤIKkXY<Wj
`Ͻp*C$~g`Qh		+Bz[3r4#Q*wv(L@y{\`{on/dz
#PKtQ     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/SipHash128$Mac48.classJ@ƿ5M7?7/
EP`/$<E$ٰX

>%n:yxy0.AaeMmR#mؽ^ܺ\2aiVpa٭}<9p*Lf뢐(;bS9VzER)(~z۝;OXk$a#:6	Z=IVLrnptO{}t_^DwukkvPKw     PK    A             D   org/bouncycastle/jcajce/provider/symmetric/SipHash128$Mappings.classSmOP~.zW*hA|Eŭ2C7I-Y\b㥫k[#5Q?xa_9=9y?~~ Y98989.I ^0{)l.rx
/iUaZeVfnxwLR-jf:.&#q+3,AGOU2gG{Q3&u	5:CTwfMEGhڶ%Z-zi7MnxEkhNֻhb_74s:&A2]˨5S[f N]nY'>~%tھiiv$`KXpCBL*
IR|6WZ||x&@O@
/"n+PqV5
eh
NIX]qd=)dgSTlzGdBCR73,dE(&F[u<#?<@#Ї^E&,$&wR*|uLa)uZ	0,2l8a4F=D]g%?"+OBcDPKB    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/SipHash128.classJ1FؙQ[B݄
-t"Bpa0ɴ0JpPL_`L r>%?_ b3_cM9er-E&m"V%m1WVUJ2"U2UZ._vW˥.Qҿ
#I#QWw2OR
1>mjhq!Gst"C`/4C`vLz=v {lS1&aQ >|^?8H:&-"PK     PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Skipjack$AlgParams.classJ@mҦj\nf;@~qdRfU]	.| J
nus3;s	xH]*5a0[e(ԙ9tF8Lƞk+$υdKSj.
범-OMsKKr`i(\Ic#"D.5gE KN$$Ln8FlNԀӁ{×d+m`DV$OgPKt    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Skipjack$ECB.classJ1iU^
AK71fw,I*cTP|(1A3d>W g'&)ARi寂d)s`ZԂ;_J&l]yä+-+TsQLZOpυd5Oj&-sb!U%8uxrURdZQdzGAѧIrߘ4F8 [6M, ZڬIC4#!:wn5v>F!GPKӤ     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/Skipjack$KeyGen.class=KA5SϨ`BDDrSYν\M~U@7DPQgxfW 8Q'uST^,3BX*^qfl.(UiQ[Q%4&8a8˸.Vr&45b!~:.&2Cf=4<4=x|ag9S)8J?tjn {!"ԓb&r$g>eqmtӶNp${ApFӧijPK
    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Skipjack$Mac.classPJ0=WlSEua
.-.]	,c&雤#\(1-"pr9'{_^b.TKKo 8=LT2L(s&ʤaw*".⫖bH0, EQ6!<:RcTZ0ڼ8JXNEb@A)|fެf<o7_jXq`Յ5KX'.׻2Ä#
[,Evhw431QcSmѵEt| PKAy    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Skipjack$MacCFB8.classKK1OJgZSEua

3(.cj̐LY
(N)"HM$Ηs?^ b>|`]dǉd\IEZ(Y"t7v~hҁTëY0ʉ:D
C>i{'`@i.tfju@gǙD &Qr88C}(﷜b{2Y(TȲ:V|xXC%Lz4MkF9< _L7En@h
;E;	6^-R6OPK9`>    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Skipjack$Mappings.classTmOP~.nT|ADe[Hb㥻6]G@2nVF_9;soϏ_ bC1q(m;8L2$yRد1E7tBǖ0x"C,39Ӷ+Xaɵ!JۖeX/z3o.d Z[pʰ]yI_n?՞|+o0\*W?2F}LUgQ<|*u_Ҳ*2xG}SUq t[8ݰE9||˩]>C+[wCS[USTM{{`EoЍV%cRc2vO-S޳0hg]sfz`=ۜ_#
2
L3hWDwL^g6gkKÝtf̙Km.ƠW8L<O`IEY,e(rIa:ht~S9FbdȦ$Я~Ҍt	
_5M	Mqt2%~"|EÈaZKFXQE(=ڵFi]oX9l$1Vat"$Y_PKKg  
  PK    A             9   org/bouncycastle/jcajce/provider/symmetric/Skipjack.class]K0߸Y;/ԛ(:WTDDA>Biצ,/(XxΓ{N~~ 8Cmg&(.(br,E$/VabU*"͒q0ԙ8E(4
Pùj2e&F_}Fym,VΝY*	CNs9.GcX3Xbpy[fh3/y֙x^՜L>fbԔ^[_(VCu<N\ npPK.!    PK    A             K   org/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider.classRmoP=
ܱ2'N|ۜ/mp79	Y$YdJŒҒRf ?LEM(--(ܷs<>`/(Q,R)nP,QܤP,SܢXMq.ATɝb]˽5~`hEC[[LeVTUNwv	#(DJ^u+ljXLsC{je·&8DTT1y5є?f;n_wt]ggVT*o;*okֹ.Bj:+soͦ&j츿8tt`2cyWJ`=	<J舒_%AV	a}`	aIBRVNp1Sױ 	6eÖ'smwz<תirs?I! ?۸ĳo~}|8e'M_`K4qŀGphܘފ4Gg{_{j4\*rS??
d_+l;0}(@ɀ7+M|/PK{\    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/TEA$AlgParams.classJ@EkҦX
.Zƅtp!X܏'$32W\~pہ7{0?_ 0"$ap\NSɵQKX;mr¥uxkm2R"Eī^)'3!݀Y?H'+OX쀮k]a:]T]Cdz_FR\}&Aq@J^yujA>;J\w}$[p+czDbEc_PKX*"     PK    A             8   org/bouncycastle/jcajce/provider/symmetric/TEA$ECB.classOMK@}nū!xSr<JcukvB~?%nA<t޼Ǽ3_o qO	Ri寂,!5v&RFW$mjo}qStw.˹$Q[dkV6p^฻zҫJd29WYǐ3$\=#lE6 7y|5ټ*##۶X^{Ac
?Q5PK4e     PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/TEA$KeyGen.classMK1؏n׏z xh{0{v)<mXl7%I{/y*(Qz	I2Tڝ1C\]Py}&z^$e"%OL9sj$ͭ,od!p01ggF/DnT:ݽpp7w*azy{<4Q&HQE~gl .C5rƹVZZ1d[C<i#Da%>i@Iz PKT{    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/TEA$Mappings.classRmoP~`tmu:Qѕ!ԗ>@LXfq̏w+)-i~?e<,Q㇞sysN_¶YF^"㼌EK.3(yȻC2ws1x&|^~ 7,	CJB7>쎒E,¨դ;4$B+~zϠr۞T!?o3:PG/<bqcm:]點-BF:AţFK08r)0̴?D;jL]9t-c4%^Ш7~z'$8O-ᢄK$\a~_LaE/n{zrlYOY=#rV*qS9,X-WᶊG
`z"6qW

t;O'8:AKOOE Y#-z-f70
]A)md1GzcQ6Gb{03S`vd2	 IC>zBIt#PKSx    PK    A             4   org/bouncycastle/jcajce/provider/symmetric/TEA.classOK0q]ΪA=&DeAgY()mZ:$xkȓ7Ϗ7_ ΰ9<za55aɹxfZ'KŴ|Q׹Ңr̴)
];dpN8t--{jp{Uel9.G9zQ>0D$L3wj{Mr2#EQ-=~a}ID5bN!nw PKf+     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/TLSKDF$Mappings.classSNQ=DFZ-- ZmhXe{lw|5Cܶff;3gޟ #E1qI+SW9%0j7Pƽ pw2zojm3ћJq@4uӰwJދkfN]ixw6;g<>x,Y+2fvH`hJ!ݶ#pkU*ڡUVV3LfcX
,	!m;enXzS)Ut nd;Su0f*0O?{FijRqkɲNG.ᖄH+a!R]Oa"DTR.D+gZ:?3%c2.㒌X12װ,:VBB	02I(%Ar޲]AKc93*K(
PLɦcl}<
KsHA9WXH~pr?!?a?8؞#r"e"GXdWCaQbPK:    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS10.classROPtE@u6#fPaRbBx4]۴e&&3?xZ%}8wso Ul	s3;įpJ@IQ^2BJEv͠	~+<ԞT(be)5##%B'NxDl<gߜKĎ1ls.$K%DGm~y2"]RA菜
y*Ir&kٴ{UIbBGB~01eCNj5`hpS-]Z￩+O6zml3<;M{;m5P²"Vpˀ2*c:pG:Xg(}&}R"V,CS[+jVE@X2c<A(cR
oD/t/1}N8~
3*F2<o*X%-&(PKuP!\    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS11.classROPtE@u6#fPaRbBx4]۴e&&3?xZ%}8wso Ul	s3;įpJ@IQt^2BJEv͠	~+<ԞT(be)5##%B'NxDl<gߜKĎ1ls.$K%DGm~y2"]RA菜
y*Ir&kٴ{UIbBGB~01eCNj5`hpS-]Z￩+O6zml3<;M{;m5P²"Vpˀ2*c:pG:Xg(}&}R"V,CS[+jVE@X2c<A(cR
oD/t/1}N8~
3*F2<o*X%-&(PKC8    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS12.classTN@R(rquQA.,7KKLa\ݴ[`BxCtM+F3͜o/ FC>^f9Xj;XC˲smkwEE)("΅7<4Ġq%Cp&%Hy)<PVIQ;Dmː8d`@Z8XÐTGJ-ǖ+V^qQli	'YCkWz_ߗg	ss52O{>R#KI`<ۋ\Wb0T)N{.dmz/yh轢yn0IU
4jMC
l*qAmtEo%CG-j'vJRDw
>ϲ
g0 uiOmˇ9mhF+7Т}p@ʺg 
F$0Ġ.<э:z0o\MKCJŰ[ǜK]D⏱ЭKl\YMcSlC冴;MPcvEV=";CDyL3xDЄ4-J#~G-н~C2'xL	еN05,ƒX1::uPHf?"wue̞bn2BO>&x$=t<zV*^$ PKe,    PK    A             G   org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS12withSHA256.classQ]KA=iV>D=hǃHJ8ö)~@?*? (f޹9s9R ~J7$ߵJuv^==i\
$pܟv]G@1m2NPq}ovOd0rug\AoW
LR;Lr
وub&=}EL:ֳHJ&"XCnvʛHa݄5lD?%L)bKW?4;*DQzx[Sl?/;:5<4vϤPKjnS  y  PK    A             G   org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS12withSHA384.class_KAuڲ,A
@0'#qmEweg3X=		}>TtWfp/Cowʕ7|g5é8D
d:J/f󎡸j|(;!ʿfR=p=UJ5ͯa@@Ҁa e pXj:sC-ʵRjX!ϩ(,İI.
&6Md`b!{<4BkKs?FE'k]HROl6C;ٝb{;K`&$>
_PKH:  C  PK    A             G   org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS12withSHA512.class_KA?뚵ee=I=XJуFd>N㰭l'!ЇfU
j=o pA?җEWq/^iϝmp.{}1\ED8EyTb#WPu5/$ɐp(L4_BwRYaE8jcwYGnm%ѐb)ĲaĦlyl'	֍˰1JIEH-/-5?_[k]i]fug0SlOQbu	i5>J_PK:  C  PK    A             M   org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLSKeyMaterialFactory.classOMK@}ƨ8,oP[*ŨfҍnY 8o3{pC&
+YXjCMҪ$]493Zdx"ptE>@Ψzth\+0iL-vk=㳬RK%keK̖
_6)}Uô ̛!	1"QS@2ܨVޓ?}V]F0G{}1s;8PK'a\q     PK    A             7   org/bouncycastle/jcajce/provider/symmetric/TLSKDF.classUVUdr&PeZ?*-7PHlEP8LАę7M].o3@ĵJ!{}|gv xw&݋
x&#j|q\#FF4hS#W_SݚZ.k
Zm[x^W___.uyͮT	+eL_ڱ]A04X?L9e^UAfT\&{9hl"O:#xX>k|J\Hr}qsuM3\:]غSVpR]DvkUBlv!tir{Q ;ԤS?mҽ|[tMyuJ:vj>R01]ZuO&wcG(;f=/RE_81,\?V-*y:W4fhȥܡdSQ?z;GM̯|ilT!p,9W^cxE.7.1gfH002$tĻ:68iTao0lpEu7*,уtIw12ե(r6f3
nl4s(L)h1p
!8^B@
@4/c[x߀)nQLx:>0p3:1tcQGt\Ƃ踂%)>17ⶎq|cwb5+ENy)>>Q72p'J՗?Zs>zNuwPڶC=hQ$:*y$]Z$Hob+.jw/1oa50_qI2(pFTK	tČ@jXȌ-0#yKk)Q遌X
[zZY1Bi4CtXb1'[/
6H&ߡaa(5>ʳ
g/.?!酞-Dm[V;Λ_'9YZH21#!+j	⾍Jw,Fzb-4U3Z4ױL7 J\|ǴK2
 GI v
+u䕁[w LMҥ7jBGrm*$
h&({%HPKS  	  PK    A             I   org/bouncycastle/jcajce/provider/symmetric/Threefish$AlgParams_1024.classJ@mҦ(xhY*ūlH6Vz< >Ń7??3;}dz;JVEIOOfCRT(o+-U0+uʕױ0UN<Ee-YYw^ɍТ0BWHYU2Qm#J-h"m<<x{u&js}<-lH)a.!4ui[wm7ʬv^1|i
.6xg1{n[}> PK$    PK    A             H   org/bouncycastle/jcajce/provider/symmetric/Threefish$AlgParams_256.classJ@ƿ鿴Z|  R(ūlH6Vz< >Ń7]}~|bEO3UqNcl|xt|86`)0JGin"/u
-RI(œK`#*ةCGm"nw,T*%FqVpzx<t	;u"K)R#SM46>,_0f3KlJ]2>t۶fZBoqsD5$"W={_PKH
    PK    A             H   org/bouncycastle/jcajce/provider/symmetric/Threefish$AlgParams_512.classJ@ƿ鿴Z|  ROC`*k:&즁>%nbMf}o u"4Ǔ;BLiU0?*
XGJ<-aH<KBiE$ddR-2vP.cۿHidf=?,t	QE9\:<]xrRTH|G
lO5LRi-[RW̮ݶ&>xІ[ks
9UPKLEf*    PK    A             D   org/bouncycastle/jcajce/provider/symmetric/Threefish$CMAC_1024.classPJ@=cc;+.Q)P
6(؝]I<L*\,~8)ds{s
@{5򻥳/e*6Ԑ=d<y,W8ϘH2FJGAJ\r/Έ#.Xer E\I݀aл
OOZ(0e:fb
b¦KSf'S ǑP)xa\8XwbΏ {4*CFaqdM4gp38)6ؚbKk52p>PKtm'    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Threefish$CMAC_256.classPJ@=cc;+.6(؝]II&̤B>UG"t!]\8z >A%8~$v+JէrE:9erIy)a8zp7 h,R$4D3dѐq)*z\Q]$	ϕ`q.bڊ47;,;8AphV,(ـ`=aV({~;M
Hkрo#*35!l)nF0(zXA7PKm&    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Threefish$CMAC_512.classPJ@=֤QUwV\D7RqlpQ;8I̤B?UG"t!Y\8z A?z Y"5jH$eS,攩8CrM#UHBiAgtpE4Ix[4 0g'O2NFƒ
ˆmNwe[vb^1(._N5
CVXs`݅l90iUZs<C,1V`hgp
rlʱ5aM8PKbu=i&    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Threefish$ECB_1024.classMK@5IcVy<^V%7 G)xB~?%nPA<<03/o b18QoF&Υ%/ߗs%j .t=JNj,~ki &"3]>in*-
fvOӘO2CIQTr\Z<(oYoZ#a 6e#
^8PtZdƐƘug][õ9zu@g]APK+%    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Threefish$ECB_256.classJ@ƿhz$xH,HbQHQ
$nfk	TP|(qSD33=F3x́Ҫ<g|e%[f$2JW!S6L&3I0ϩ4J~`89>9e(U&R>VEJXhrp0oYoZ-l{bO'vHk2qXKjc+jˀ3Z]%:Kl?~:]PKѰ    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Threefish$ECB_512.classJ@ƿmbZIzYdQHQ
$nfkvS!婠P⦈
Ag?f@^ԛѸ͡T<'`ح^*^Ԗ`TEP3eWNlnsι`r*b!J#L0v4J)e)sVĹ,2a(|
&%Ɯ&!<4j	`O±R$yj8D=Wq.:h]wX mPK2r    PK    A             F   org/bouncycastle/jcajce/provider/symmetric/Threefish$KeyGen_1024.classPMK@}k?4G [E=H7IlH<(qKE
^x35JzR_24"MLtrvz2t2=<&OK],"}C5Ei9"g:[1inr$pzzͿ*=ahsyUC5BD~kU;G	[+خE;~6&Zf?Ɛa6n<]nXlAɂ2^/DE޳XѳPKMV    PK    A             E   org/bouncycastle/jcajce/provider/symmetric/Threefish$KeyGen_256.classPMKQ=7?FGj"hB<mcT8Bx7}2VBA?=+*hSܯ症' m씐'!x"jW|sDhz,nyd4i"YWɄgi	i D5b-L6qU >N#}:S4}wELBPFcqiUѸ氊VPsQƺ*6y?1ڏ,1l)CRWFmu[`3k#<|yˢkc6ʯPK    PK    A             E   org/bouncycastle/jcajce/provider/symmetric/Threefish$KeyGen_512.classPMK@}ۯiу-ȢSE9H7ItL6IMY

 UQ:ofz~yxvr;aD'PI2Rt/tU)dR"OC9ETSR\Jsd{o޶<Cy.c>njfPgvƑX$Ft'(e5*^:%gI3_`MC]3nzljUnѸ^bc	i6ipWPK
    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Threefish$Mappings.class}OAƟ@T^|jmHE1hz%c	DM ~(t$ٻ_~[0e00p!aaa800axbNBG(a泪?MMFx"3cz*"R2	&\dMø%в~Rj%W\	l޸fKh׌!ʭhNag;](غknWhx݊Q*vC?Qܛc_By ۓQsE@.Sߚ]K-.mQ\^򫥒n娷Z5[
ՋҞzʦjeTe	u6|b9ݖ/yyXCM-;.iꞦ%x`DvIꎩgkLB}mhre[(Cצ>W8)z)1/^{\B0}H1z9ᑋ܉p~DȍrecZb a<)^:`)Ya~$#tuXY?RHA	J1G(dOHcHA0<dӉ4nѪfcl~	^X2Ќ&?{ }/X=`
GwoU="l` "	a E
.&v#k"@t `־b34i^@PK:q    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/Threefish.classYO@ψr}W\*}ro1u6PH$,L|ylۤ_9gϯ yB[#6')K6VvI-ZhkNI+^leHQQeHPZݩ5'hnZU
4Գt?JN:>fsy.&Yި_&z\oG9o_|˽|oTJ A,4 u.0@!D	1 !NH!B"a,	${U$z=5F:ԯמmאXƺ)YpKpN7` ]~ZH`E+bg1'Isɜff3m,s9c35s"
PK  H  PK    A             B   org/bouncycastle/jcajce/provider/symmetric/Twofish$AlgParams.classN0EkҦ)@вXBlTHbĀDnR:JldA+ >
}=p!!	T]FW,$crR?8#UN&gOzmƭ++2^d]˕0nJxwƺ |w%o,YZ{ZU!06 BaH8
^sVr]%aB!IfQrk)gS=POG[C>N>`BoHkGPKB}    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Twofish$ECB$1.classQMK1}׶umuG[A""( (z6۬ۤlJ

 A<	̼7	3/o Eoo	JB
sfnر>`%&M#ӫ^M,=5l"mRNY6E<{]',JLMDgTOCn2G6	c#RI{h/CCC`վkf?ZȁT
A!T};zWTi!KnOKɳ0ۨ[ݕg]bϺE֞17ե冣Ww34#
!E԰<*!gPK9  =  PK    A             <   org/bouncycastle/jcajce/provider/symmetric/Twofish$ECB.classMJ@֮Qkxzh,HA (x qڭiJ?SAP7)	noHh^WIL8Y>y*EDW3NtgOƏ	gC`pY!:/L&8%1v

 \wo+ujE!Blؑ&D7y]kC|]xj%:@7 :DfoMv\QPKݬ     PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Twofish$GMAC.classR[KA=uˮv4z0\BMqұuVvğՓGEZ>8g9ca>>\` Y,]	)kTչ	jRdZK6d
=NY0>%$W>jNZB2ENb9~SONٓ-zmwaY4y@հa k.gMϢ£Wq@xU+Qg8]LӘH?K3
 `9)b̈́lXº'VX5)y`{R\;1]"+ <#a#lh3E$PKK    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/Twofish$KeyGen.classMK1؏n׏V=z<KtRM)xif&KVgy*(QbJE/vޙa|}pNwBPJ+Y?I;#iGP̺\Pnib&̭(o9m32.haRNυ3ӟ
Z-؅92+~  v[23;Ot0$F;kٍb/B}j )Lrfhz:O{m5^>pB|5PKl<    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings.classTR@B-K,"Z!\A؆ބBџ!
%Lh4uOj;(ßgx<m  A88rp<x#cL,?5YVc
&3QA镤^bfcm˥vP5ǲ+`2+3s
^
`4J)a*jjdѲ9$,OQj~{3Υ4T'֮QcQ=ݾ"H	TO*paeה,fGpNlݹ`FB

}MfT)@:^P/fv⑭SݢliH*j(+Z0xa9Q*Ǝ.;QIhj1uy_S5]>cBjYuRwL=[1^0lCsubR:רoIQG'NcU0%@0-`F7]4P9Z	Vnm"[aՆKNnpC*)^xaX+#kx#"Xa	oG̏D]"Ǣ]Bn*}dU-K,ϯ>SR"}C. <
iO+kysDn	,|:û/Hb] qoz0!4;;NI5愮fs|Boz޶Nњ K*C$HI"u	rPKR    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/Twofish$PBEWithSHA.class[KA/ B:.BBAax;2~@?*"!ޙw;clRJ=	JكD|q=Ǌ-#a݋zS,Z=e#4AYffXKSp6iƫ˸s{uI?eȼdd8rzSduFDYrò<J.X!}TBEBa`0wV`$ȞnlYv75GXa-ߖJ#~6.XBPK>h(  +  PK    A             M   org/bouncycastle/jcajce/provider/symmetric/Twofish$PBEWithSHAKeyFactory.classO=KA}k.$Ə"dE0*Dm=.{Iοd%XQm2of73o NAL*i	:i'U~$c:f
ppAt6өZr\.:t'<p-.69Aʔ:Hp-쯋['lhԘFNƭ̨&mG7a"BY9B{.
Xf :L1Pq .Xs}]G;xE/ %yaՊ#nPKDH`$    PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Twofish$Poly1305.classJ@-Mz۩hp!(8۩I&̤JUCt!Y306	#AR""h0;>=:'8O(ftrT/bÛ|zp=I	(`N,2N%_E+(oA{vtQ*B	4Bn~	%{E2]t5
RB!l,9p`+5_Zݛ8\S-SɶP7/u0hXͱoubU?PK*    PK    A             G   org/bouncycastle/jcajce/provider/symmetric/Twofish$Poly1305KeyGen.classPMK1}c?km=ZA'*݃{Ǹ۔fIY

 )2fL.	;G'g/Y\=q>7I(8Q,<QڰV7WC_XL:DK^]ܞp8!ks#gwsw8(ڍO8y{V߷x2j\d6bT_Nd^ȍPY^([
cno;
שFxGqŒe[(~PK4	)     PK    A             8   org/bouncycastle/jcajce/provider/symmetric/Twofish.classN@e QAqzSqM .!hz(#2A&X|f9
|wfh)-,PB%SwSh	EFU.ץ0VU)vtUQWҴ̖Vbt,MUnͮ1/%3z$,Ѱ<=<W-H؃[ͦfTv)לyЗO=	1-[ݻ$!0Gc#111b ,8=ş3+!za¶%}
P7Horc}*0J%tzio?oXa@L}q8A\&NWSU41I!5?PKi    PK    A             :   org/bouncycastle/jcajce/provider/symmetric/VMPC$Base.classJ@mbX޼	^қ"C <ۥnI6aw+<| JDx3|| r]+bFFp
ɄijW1WJKۻly-ZHVY-a)KG0ّ/m*X;#yI"أ'
]GyH+1(1	¬Z̵&+7A|:=4y55>RD_PKu     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/VMPC$KeyGen.classMK@ߵiGHsbAx\%nHew[Ϳ䩠GSAbgxz p ah_R+frw3^i

SS-Z<Ks+YJ#69OEJ0zfp[ŖY=zpT߯y0\/Dl4A >13NJrƅVZr]m!G	ZtaExy4%=
PKG    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/VMPC$Mac.classJAIb69OX*HlPXx`r,6n{,CsG:3|?|||);lq4a|qJZX}NJϟVKmʻ70^,MV&Վq{f:Bޫ`)񿷘MP#i҇2>+T&Ͷ	z'm0zr'	CPKHa:     PK    A             >   org/bouncycastle/jcajce/provider/symmetric/VMPC$Mappings.classSmoP~xuPuMAF,C4Y]6mYg	QS([%sNy==?lGC8Ǒ8.r,p,r,+ɐm_2(rJ\SBq˴9C9ZT)
1+{Vai6Xn)i"ZvEz"p&̤`O޾xTng=bוv!e8GB=P薰;zϰ|yxV[z5N6K]Ct
shEQ'oVc,>?V[.)[lYLK?ԉL8{+ຂ
n)X{4UBp?Ӫ/̞<	SXBAWqEC˸*i܁F0<*ZӦQwlH:+tH)+a3bSG§%&֎kQ#k>1!ÓJ2Jdl*R
c#@JKU4UR PK  @  PK    A             5   org/bouncycastle/jcajce/provider/symmetric/VMPC.classJ1FiөŅ	".ą2dfd,c\ >x&\7_ &8_z˩6\*<'Sgj^:TntnHU\yjoM_RIK^n=Q@N`V\zު* It%zR/'؂`@7LF!P޴߄
,.)t/1zp)"$,#0ǈ PKi     PK    A             >   org/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Base.classJ@mbX޼	C=JQPxۥnI6aw+z*( >"xy}{zp]K	ڧRI;$8,ݗsku]ْ	5J&W' f<q*]>ʉE!%8upʜ5j(|56A{ߡQ/id#E"&qgH)<3F#pCMnnNnN/q:;PK
%J     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$KeyGen.classJ@؟4iIեE[Yԕf!BqB)䪠P
q!Qg8r?^ ᰅ:C*U%M*
Pdy"yheLdq#SiD
9EJ4zX,dnTˌ*IpxD&omaibuX43h8a/pQV)l8pP\2㔜~"LfTym%C#4x
~
/>CMz PKfA    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Mappings.classSmOP~.{i7@ETJWF	"	Ztu$Yj2& t+ dszx
EŴ
MC]ɠ{#Y:bP^!_OYhiUUQD^s޾=fЄ4|7Mva(as{QBh6g"pnarG^n<ߑC=\~onK޲E˖gR&qfcNLmI6O5t<8s^raWq8_y
WTc7K7lƆ9^yܒDVno+5
@C9<p7X0V{xR2&`
cBH
$$iFEV%0J$22#s#H6ϱQAS$ke=Q xe={9sTTEsa _Q}AX$^PK{:    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/VMPCKSA3.classJ1ƿۦɳA R{KmvI>'C㟾ea>? \X :;_tF`Vvz\djq3,_iuA*7:7*_n슼
zMF-Ov,p݂:Ӂ&m5m๮* IL1@{lqZ$ΑO^߶{oK	.9t.ްa	":`Y	oPK."     PK    A             C   org/bouncycastle/jcajce/provider/symmetric/XSalsa20$AlgParams.classJ1EL;;V-~MDU).\qa̐I$t%(13Vp{>BB0zgR0s^CsŭWVpblRgJ	Vd{a[$A\[^:e%KkO+ǲ.B/BOO^s	t60&!z83AHR)pGlNԀӎ{×d-o`DϭH"_/PK]    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/XSalsa20$Base.classJ1t]Z"mF"PPSvK
X
| JVA<̼-_ b ts 8*̔s-*$*]*--UO	JS<4Vy.Q%:/:w*c56rF<U4EHF$un~{;t64@jوAĈI~[2Z4JD~⳱m#=-j-95amDPK#     PK    A             @   org/bouncycastle/jcajce/provider/symmetric/XSalsa20$KeyGen.classMK1؏Um/ɊH 
Eq,dI,O?JLEwf}aޟ_GN	B
{EMXa)AO>L[pꪴ&|W7\rͬ<eyiR̸Ϲ"_+.Al\^XQ!3<>3ْтɌN%h5le;Dv	ꉚqh$3)1ܸoXl .#4\Ľ6	^ܯBiwrzPK 
9
    PK    A             B   org/bouncycastle/jcajce/provider/symmetric/XSalsa20$Mappings.classRmoP~xisu8s+CֹMbE4DkWRZҖ%,5aQ?x
lY?<Ϗ_ q Cȸ.cI
	w|յ<!?`oEz#\1]sX:?pΰZD"[jYaX9Lx"?O7>z}bPe]4%?vg1dLؽ ff=@rm\KO3
>9%Ʊ̾FmS?u(A1?vEcc؛[;1V!:[GCs`ny/r\.ʑ?_-	nKXpA2Ê^]r|7lYOY"sA*P5,⑊Xhx&dæ{((؀X<U "Ȑ]zEHSf>a-#+A6!ܧeҌtj_a
㰅$HZ'6> ϴ|^E-=LLA6!P/et&

sRI*sPK@    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/XSalsa20.classJ1FiQ[BĪ*h""
M0LfH<+CjBN.z pm@gؤ4%858.\ŋյ&_eFRmTi21N:M)tt(pڽr{&y#pD5&ebc/ђ$	)э bn5n/;a`0-ɵ]{{,g-b1oPKE    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/XTEA$AlgParams.classJ1EL;?@E&7t1B8
1L"I:пҕ؅^{nK	dH(-!yZ.fyXJyViI`JlֺJe!ث5Z	ܦEpM!\H*y-abyhcu		CdzW򆳊k>u!Bo8 ^f%Y;':`t:޿3#ʇ[9['R (TPK     PK    A             9   org/bouncycastle/jcajce/provider/symmetric/XTEA$ECB.classO=KA}lrߍ`qIvJ;,%hyn{nYV?J;,yyf>> ㈡Kg)عx4+-kY8_JwurǼByQ3%ydc80quAjU)QZ,Gc'e.FD.C/3{|5٬,#4ۦXNA1xXcoa(~PK     PK    A             <   org/bouncycastle/jcajce/provider/symmetric/XTEA$KeyGen.classMK1؏n׏z xh{ETD{Sc,M{/y*(Qz	I)[3Ժ	C\.W&)YIQLqi<ųQFYrS)Rxa*j6Sj6$N.7 Ng|(J<-aw0	#$&!jZv ;B|!gT%mym!Ct~Exyy4&=
PK;    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/XTEA$Mappings.classRmoP~`nnNʐ՗L &08
Qc]{JJKJYR5Ba"K㇞sy{sz~`2di2d\pAW]2$-ǐ:dHUbc	bP2djNP+;%c_񮾻dPeMw:³Ҧ}v^ -·Gpg5w}8s\K?}wCW-Latȡcab$~Fc0.,4uhXCcb^'4-ᚄe	+V%`^MaQ/rt#lYOY:'sV#*2*pOHh*ú[((XH<TpzQ]G)3G In+K8Ɠ/0u8l!9͢6ka|Ei}Zj:
&Q:!45io(I=#AsOPK`n    PK    A             5   org/bouncycastle/jcajce/provider/symmetric/XTEA.classOK0q]ΪA=xͲPRڴ$uЏICÁ&'oxo?>bsx^k+*'5 s)riS0ʹDR1-_juEd\973oB(43\4y(,<èumۊM=G98G#GߏiZ\z5\N[&d.FQF{t1|kئsb6a!w]D?PKL&     PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Zuc$AlgParams.classJ0EvS~fBP\\wjJHt%(=7c`6$._0D\`kMN8.϶1*.(2YdJ:r¯J;B88.;d	7MKL[뗪Pr>(BaL8oJQJ/]$06vÅ]*Bܢ+#tn
@w\bd-`JoHLwrPKl`=     PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Zuc$KeyGen128.classOMK@}k?Ҥ#Um.BE9H7`ov	nr/y*(QVE/v{3oޟ_a*ASLnAWޫB3csA.V8?}-+!fVi?䌳:jN̈́)}4viN̈v=<=x(cFs&zT2G`c|lMPTCqΌh:*KaM-;KDO]M{? PK]l    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Zuc$KeyGen256.classOMK@}k?Ҥ#Um.H"؛Xu
&nY

 U73̛W =7P%;cT^frtsЇ|xə\i,GoDy-9,:_ȩԔZr:sG_>]![3]5u=Jقь:Jw!*Xf [BlT|*¡r8cC|C4sĥ[\D^/DMutPKeq    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/Zuc$Mappings.classTkOA=C;mCU
خ`
b/fٮeɲl$,5?emi˝{9s3O S111qm;8b9qp9F989s$8	sX,UG=*{~[Fab{O{ަG:ɔL1xF3
p3H$O)1L߯Ng\uҁ4	[VwTnⵦ}vޝO4J;{|
C-tlQ8:E1tǪbVQəjnq*.U;)*vN4욺r R=BNRM=_|rDr;Խ]I^٫mmd47i])	f$Jgn-S8>zQ:VnxֶjsqW$2z	r2&"E,jxg^a=g%k=ntuq,?0F^|:6E=2Z;ΐ0G;hMG; _~v27GEM #"K;Pl0* }5WuM`UFNU5BSl|z]aZяPK2!    PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/Zuc$Zuc128.classPJ@}ƮQ={<*.A1xx
zۥnI6aw#/y*(~i=3fcfltAB*i/	K=aex3csn*[2&R	j~<<OGSM`.XhfVK*	N-\-ufĝ"+Y=	Mѥ(V(z-:O(D a ^RaI#qq/v;ZegvAg؈/3lc>VPK,m     PK    A             ;   org/bouncycastle/jcajce/provider/symmetric/Zuc$Zuc256.classPJ@}ƮQ=y xhU\(E!M(-n%لݍTQ xy_ 'hcΕT^zʞJfq]`BM=U|0-'?Og\Rr"43u%oǫu7k*+3v`HX/BS)<
iG.?i`+ E 6g@(%t|\݋#qZbM\D'st"9v~ȑU؃
PKy$     PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Zuc$ZucMac128.classO=KA}Y<K P,L%hn,6	
 8'b#a{w g%$лW#䣫+hba<:Y*CO;	'3fȹwvjMYnerC.6b;:B^`X,tVz1b0A ϐa!7UeP!@HRfAom	O@~q/?mƌ{U PK u6     PK    A             >   org/bouncycastle/jcajce/provider/symmetric/Zuc$ZucMac256.classPMK@}kbhz zpAŃ=Zۺ]dK-!7?%Ίxa{;cl1D`:aG`ZR8_*.m;WB:~ȣ[!RL3kDYڪRjd	(hc8[@x]k	t$;b0a)@+X
D1䣺VvX
cH.3#O6bw}<ћc出AQΐbPKt     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Zuc$ZucMac256_32.classPMK@}kb֏
"ZmTkA/nْdn"gy*(QD<3̛x|}p dZƥMqpbݓxe*%}j\,ȤTTg%JfUU	)h{Fk¤ZzMzcwܛQC[hӓ&vik7IS{C&ȃoܥ!U@
ͻNw:/?=rPKh\     PK    A             A   org/bouncycastle/jcajce/provider/symmetric/Zuc$ZucMac256_64.classPMK@}kbXɓHRCEĞ
z-E"[lM,O
 8+|||q)CN|j\BW>'S֋\H*ٻ	p8b._XgrW*^0ZOpBAh0\C]:7)G#lFhD#;M`C[hӓfIQ(;΄sQ{CÓ1w;DH>{CsaL9Fh}PK     PK    A             4   org/bouncycastle/jcajce/provider/symmetric/Zuc.classN@PE6" İ0nP&MiI[Hx,W&.| x벵kΜ7 Rrn:fp@p:m˒Fpzch?n2܁ٖ]x?
z<piw'~|Fs\'UiL)z=PjLF6&HMa$Ϸ,tR]p89
pY	ccJXXcP#4pےAv5lfH˨n2%eTv5RG5RJht䑣P_Mz	֟>آ=2
%ny<q@%.%qO\!WEPK,_    PK
      A             0   org/bouncycastle/jcajce/provider/symmetric/util/PK    A             >   org/bouncycastle/jcajce/provider/symmetric/util/BCPBEKey.classUWvaTqB@"VU[eS@)E
0dt/}tsZbslOM2Z~wM
VB$B%!+(o8EE?XhԳe)J36L}A@"D˖nq[v׊f]P\PbR5EseШJmHFtǵP-S &;,iHtBt:H8|4	6Io75+ɱٰϲGU2,!=1>0NR2;x)ݪRE3N
ςSBM֛PCusN3TiWYvXWjx:tU]gOúF
՘k21MWQ]kДVOD-+來'f\K1L*dPtG鎶{X5dt-0%H
<8:1ܬCJК::@ .ZsĴ2(]-x͖Rh0ZVS7Cu~Z9d(T }{qzwv,aMW25n$u[qbӸNsGhm5KTw,]ۦCdglLokn[:CX:9D"X![El]ĳ"vx^"+U@Ug~ԁPc#o:4:fҚ8h<IƠD҃32C?
_x_
Cӣ5SǪÃSG
<R_ǪGj,°a'ËLBKa >	qXBG$lD(e63<
Q&&Z.ajQ!a
$	UX$a)C5C-*JqP4$0Ȑbb0Fat0:ae Fl'q!p2F)ʻa8qޮ@72*菉At^@곗r MG$MΓ4_O@ndܓ4}O4tGp)?o~O$JPN|W:R|pI.ܘE)ɑNɑʑ+)|O8ӞIP7̜ .XLRyxIYE@u-'YDB;i\m) m%qIUI
r)]4fSznxy&Ym7BsQI4>5|"|FPBDA'C3gavN'$KTAҙ$
&^܀&ʤU~?6:T~9 {7> rbXnkHGjIUDaR\Kx3>%*R39V40%g6dT2a_i|˭	:~}sv%($}l YM?_?s̌j|'j0"n>2qPKV  ]  PK    A             U   org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameterGenerator.classRakA}69hjcmM"!"hM	m1 q,)_)
 8{	`m{޼ffw~<f
"PZr#_a#pH2Mc~Tj(U)"!x(5~ bDZ_RIM;Èaw~tF7'(Db9xӨ+_DdX22ΰA:P!:Dq>aSB߸-hɀa)5N\,XvQtQrṸΰ^lc663z޺Hs:(6ˮ5mzEC̃2n]Q
6(c;$];O[LWhdespf)Ka6;@?C;ϰ=A_u0ϰOP%%TȖ/}ţ>e]
Zyk$O5UoPKP#  ^  PK    A             M   org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameters.classuQn0=^Ӧvt`*+ӘƘ		\
.]bplHppt?D|?~~V(Q"(5%&Aqg6M,ʆV14	<m9Pivx2)	NΨ4ua#&Զm*TLܣIhh\VhEP;!Y
βTa%c튗xiݳ4DՀJ=c԰%;I8L!J1S=]Ff8~*XY!	|>.D0wiǙm5^o5wƴ{N_OyV
1WLc1@
Kfp5@W jR	Ҏފc֑?H.5v1n|.wSfPi+w0-P>=ol	y\;Q{^:#Ɲ4nLz^UcPK@  !  PK    A             \   org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher.classV[WW&r`QD%x-EM
`Ho1Nf>/]$WW}&$tYXs.{{ﳿ}L~_Fc8S
Xt|a<՛RF)
L.R@xٰLF	z9X	
C
's3<3ǳ]ܢ9.f~IЂe-L;3jg:v5+u\[MPDUSgIB/zc;#\kʹAl_pOTbU|-ng/-:Ҕe,nW:4Q
D6bfqY^hs
zEx`,^EQ_4ܵ&'W*CeHԷx&C+ M3AͶx6/:EX3xĖ1nWu{<-쬷Tl=t^ᖙ){39QW)Me/"wP	/zEDU<
aT9k9_7I#=ItyBޗ@"
)~L<?cO;cha8p=g8p!0@MnQK>Mq$nʗi`~]dtR[]DwQo>Fzw*X*FKFU/̸F=w`tńV\ӡCGDGN9CA4c?&uAuqCG>qhMqMÌni9B0>p	iH྆+Hq|ٌk(q0+99ܑ]9|"{rTAG:AЇr5JVlDȮmop%pN7IpHD+B)@ْH3h 
/sie @/j(ӌv SyKs-XߏX|HjI#1?Y~bw	0ʨzT^Y>%a[kPA	
֥"bݏ&rg)=Pip(*zt][AZ++U~Ғ.V`{0HO\:m4.J_4KP*60X'6)L]L#~U~0.	!d٨'߁oWI+2<x,]
.u.HK<xUNbټFǠh`c8ЖQg|AyC-hm2Nt OH1@=L&RnS^¼ ^b{'`
M϶ڌ`8F$j#1ycGoPKd-
    PK    A             \   org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedFPEBlockCipher.classUkSF=F$WCF&Ei6)IIm0)-4<R,bȒFZߔLcf{T&we 3bݽ]܁ٍKݸ ,r+;
n^日1nMJ#**"uXb^A&[ԭ@w\5s}Kuz-Yiyi]f;^	]gW_"g]**I|m_A-ĺi锸oYNy!^	މMhL̰S6m˵*XxirOX)к DQ;&1U=d{6nk7Vue+:(u|i'\#JkT: #l˔Kk3_6ܚc,6o,2VS=n_)[d&7<}aQٍZ·L&,xvͣغ >y:Aďxt>$XT<بoYUF6y*mn0..f海OSCrPtVݨ*FU\U1b\ńOT*T)7T|F-Ar_i@CJ pV>S?/'ιh	!u6li>
Y5!a@!$5|)z5LC0o%d^|׃Knm
?HSâ)x$R=rI,{L=RǂZjଫ-;\Yȶ|y:E~
!F_*d%hчYugS
涏5ٙXȂHG9c7l`~ ,/ѬHW9
EnTƟb#%70bX{ae<:ƞ5=}(b'"}$>no(x9HcuD<͜@WHY:v#EC#xxr46h$'1
H&"$/hwrGloPKm    PK    A             `   org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher.classkSF_!JK"ۀȥMh\j­15I
ycDdI#SLjOL3YI3Nًٳw7N%4D%,WHĔ+X'Mg
HO^ʲWsY9eX)2OU2"'p6Keai
̊fuI2zM-2*4H`;5hLs4^5w
YmiۚjjVE-&h[U);:s|ö\>}k!-Ԛ\\88jN+h2-buîYyɚiVmK^d.+*fKk[3rvZ7Ή﹧WG"l;aB<uq8GC>iw9oږTǵ
*"ۭVZ
6cG?PA\:"CO!gNOnק# <ZpH
՜ekɎr-✈"΋aD(bT%ED|L?*%px\(BӃY~ٌ~A
r*N=!h2	ͥkg88]8mf]|&#cEȈ˸nI|.7	2qg$(#!2L.7&MG|-a
$Lsk(HRATGW<t7/*@`d<jn_բj&Cާ@.<7'[4ziZ)L3X$3}Lxwl]B:qhۦIBk;VʼD!	8}~_T ۅ38D{،:tJr:$(; @"b0JQ"9Y9@Bl&VF+G/4&bƂrfz	2ZޑLC#xpl']#(Хo)Mֱ 	
0/y/m
\:7}PKAT  )	  PK    A             X   org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher.classRMo0eM-]
m"B"n=M(RխX\g8픆ƁBL.
{~ %<e ŃA'h8xArQFhPU~4*}QB|{Օ2*&hgjmoG<Sja0S6-34«0غ`{jr)J]KgU0ɑHuyn$/p^ܽ/8@I{*TbXTѫCWezdXz#O$ghhD%:Ub]n1`l~|9rsa:`pp昆1.g$_Wkr/u2	KѺf~L˱!qOu6_CghurV=np\-\iux@M𦪕.}b;t{?PK.1  n  PK    A             E   org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.class;	`Tյ72 0 `YL U&/@23@TjmT[X⒪0,]]}P9'hȹϹ^{ 0WYM*P\3ڶuk`ޠ{[fk]ZiCDaksZL[oϿzN	7Jp5T8i$iTHET5U{Z>op)R^nTTTW,_nwZM<nkmlm7l#<[A &;vڵ;m]em`@[UZUnrnF_TUVZC,rYW|s
[/\сꊫ	V!E>B)Nh
-skjJѯ55sXVH!
(:\TcZQKz|U[:l,p_'{,,׵hHWs#$FB/7cfz|HU,׮[NXTKs74x}MҢNmalA?Q "qtyF%VƪW69V'1.Ӯs. ԑIX1Z6DjFtyc횻uN746Lfː5?p}ʓn֬ۂͫ#b2;tu
n^Z8̈SfTE]N2ʪ*'>D
khRq[qJ؂;Aohs#FTRmk{v- /nie@3*<$ǭSFhnҲm`Vji暉zѬκzQLz8bsH/gn؎3#4ǘlmmw{S(KSL(pdmOZEښݾ-h|>hkea0Ԣ:}Ao@5Ds0IyQz{$׺гhCfNvsDGȉtv:q{!`LF{Íf@깴 %RDXa 6+*՘䞫
=p~
th(JCU-8)0(VmmEθ SW xQ[k65O۩3+1eA󠽔FMe٠sun>ZoۣSbEgm8}Qk0M8bc_:UÚ#H8S:Iǎ#UujA
`&
8.2jryA5ѮL2vj60Z0UF^XUw@>
[pB{MU/U:g6.w6bܽ2#y}8۶M͏4wbvzĄ2Qq7B
c
IBx;WcNIXq򗴸}M%FZD{wy6xrҢ5[*ڛ:Z5_0$$W12k"7qv1ptၓ&Įo]6T♶R${]%UqпoC2jR'`0=oiC<>1>g%щ0F8#"M8D]dvc"#ýсf܅OÑsэhhDLyr2l(H׳~^.-Ƽh0սCՀV/MȢvFLn.}@v6ktl.~4ʽ<Ԅn<@G4ڌ#v{S6\=]<+h%µvvTـˋKtjjxPB`vj83$S6%Nk.[G
[Ipi^LZ7T]_c_lL?"}K2?|(Y۰`~_5i%5FMND9["*.v%k-PQ0jxy<z՚k*Bs^]q¯HS	tscZ
&(4D_>-DqPmUZLv xԟ҉B
A[vz+=J¯B
eKTPan1BCa~`x=yGID߬ic*[ I|\b0W&>@
(M-
tJI>BTk0cOCSRȅoT*ךXII$=
O{הbCqs-ײʧAq.쏢x
)<t-%8I-n!9LBie>%Tc8?,TL~ma}8Sژpa*mQvb<lz5pj2AI&
R+K:C⯨uՕ-, *yZpC6$IcNR?|o_a>sEW}#lzEmۦż
l
mWm(onώv7ݩz7ՙZg sӬ-܂#б-`\UUլC[^3Jm6I}l'jЖ̎8j}\
 T2UB
*LPa
TT0]*TB
*RD*0G*Sa
TX"p
KTX2PBJTXB
5*Pa
NTa
UXZjUXU*WN-*lU[/eΩl&l
xTc
x\g<+</(pL@H@^'+*5_uo
7|[w|W)~ ~$~"~&~!~%-o	??			w+ༀ.
xO.	LD),L,S0`YY&p#W'.f0TLsA@k_xv}Z2zdQ$.Cȶ:}-	#х3S5Й"5Ar/"e~QTŤnxXtF襠<=HQ?v =pu}bst$!%
NƧGf7	g"H9
!a	Pg
U-"SyYo&\q%㲁|+?{ 	)h4=Ch6?
_iI_FsYN2H<'`W" )߀%ռ6MH
Y"K?EN=ҦJH4\sCIZ@V3ETem1$~jOSI?*/ [$ͯ=r͑9X%fhw[?@&iq49}rUU9۪5ql7uoMu?خHµ2#bOִk*agPs`izPtLq*-^L4epW4TsO wiLҾ?gDfZa `	.+F ;ٗp-;k3윕B -+VþjkV}
W[
+Vheߴ5`Mv'JNxIl4̇aV VxQm3>Jf'Iw,mO~$EcMVXe8+oYa|mX>wl$g߳>!z}
؏
wYsT
/F߲=oMw~Ol_ioT;'xV;oOZ]V&+lV7T,E cc<|c7qtlfN&ehK`<
L 0e&L`
e>><|\@~i&k-^>@l f\Cv§(!0@)k	\ga|4,O6|uRm'. x9j_I`	[n^LA WY|8,Vn#Sw-.1,!9	j$w[>dao-xAs;		tX6{t~xYX>Og<K>KCT{$|Gx-V'%	Hn<@vYXnd	
cF{-$cax|e:-z//%+]bvI@֖f[اueY'PAjk#gy1}Zߧ}5UE0cFwK},|
0a<':L~ZnJ0Ďc@6ˠR
 M6nUTMIw%Y%Kܯd{a7AKd?#`5Y+_%{|;?+]v1׎	 k/:P}Q2"2cyPʄcN{.|֞A)e\4dW
E	
$=]/밥`r̋#̋y>OSJ!!®Q*l
R&ʛ'\gSV{z n?<h}qk(ǔ+~	V"0_4>K*PJl\:ֽV]\QTn
!f/
&*#(4P6`+Kg {eZ%x1pj/2*ã60Y	/GeB` Y
kiL$R7"p/iy$_"')gC:Cý^{#νEy~2Hd,`AuA5B!X;èw{GȾB07rjf?58L3:b'CxODBO(9HZ\<1Xx,L/:=j#nM#3!(Aް7ĿXs=rx?unǅ#0^߫O+}L;,epB`uQvI~?(Rj?ڎJQo8&M^C?.Ӡy`	yX G\RDlcD`v[z^.i>=ꌥL,iX{(s/){q2(wOwx=])%	]s=J&Q%:q0~uCc<6x ̤9ğ9ΟX"}QA/CUq#jWsRǥ7-Iuࢼebê=`2$e>?>//Ic-SX&]2IѨzdè:ji<1D@q2V2,'*SGJV'05簺^~khI#!k=|ήX&$Ŏ3S0%¤=`(FK2Y2_
>ow:圁)1(CN鐔ũ(0..*LrcV)tn?w:tVK%x,ٳGO}[Ј~^7hqZIZo;3h2N2WL6q5p픳Z7=
߅icXx+<t@E3`qS/@"԰0w_h޼ыˊWjX;BxUe
M}Uũµ)ZU%6W,`͞]}ɤ;ƅ4`,f05&´|NUuA+"V˼e!¦i>v^et[0rAjG/aoCbcjǐaoQ<5k|>5ޣ04M$EFiD9(c!{EX{	sș@fLN;p=-ƃL<Ϗ?O۵?*rZ|xw0CeJX/rdg
<qur00k{iwg J9
O]f<fê%3n<9NQ<vC7,s9Xg>n(yR\}dn7F()iHV0{ABGa3*t$XT7XDyF,$|B ݉?+xa\rf(2e^kefOz*TP7FSnyr@&)&TtC
W>5Tn@O)x!4G0egxeH҃Rn&̳0.+xƨ>6USiq*)u}Fuğ+6#`EEɪb]Ŕ{X_Ӏ40^>sLQc6J p/nȧBMnѸcOһG1)gfp!u0
#"Ŀzrz#%ϰ!>sEW9GjO';ny>O!e2lS5^ tR[TX~	vC!YػBp^",cOՇl{rK>튙w$޳7zm?tC|py]\+'JYpKR|S7HӆPKA%דzDv$fInL!^~<#fݿR{bzj7+v :·
#&dG :+8Gl1KHv	.`'&<!y<I!A`:i*g>L j^L$I'Dc@~!T}hV8\Ń8SCˆjWNy<PX5 YhtCv!6^~<#K"O% 6[.)/ㄲL\j*&ڢނ͗Ob̧qe: |8/tB?
F XgNQ	q ;<v)p;Gݑd95^K2
 E|_ބASdq#f_)=`Wø0MO̾q؋ '_y>=GC3/0'<b11cfߑKXf52"pl]82"LE~]t l#Cք`Ua`7.v_
KlϚ1VF6ee8نt*kX.ϖ'f3pg>&>x0|2
tmܹ&юeqeךxHVaް*l^\,ɂ-@8]0)gMqUu8d\ye0L9ugaqeZћR̊|5NMGrRrmD/*0}
OD4:I"StyQ,Y0uZ|#!?a<!xL8,6AEzC	-x-)0tbnqXǿ/c[BkGCĦ`$aB+"˛qqq''益J.ZGhXQ%_ďBAƦ.J>Q6ߌ^TBY87+rMge('0ߜkp9/kF,<)yB5GἌө6ؤQއn.NRf-?7#<'h­^SaL=^vA/w"B!E;'mv!i_}SoO)Yd8n£GPW^FR&-)={GsXVf}_f|s`~Dlx&PQtdR3נ`d2BSr}F`Gyn!:#R6ڔa
jYn;L۳6gR}WJ9 %z6ʤW氹zmX[?	tI~2RJ*arg_evޔv3]vU/F	Wnt?ObDX%,X²f;+NW+*?PK   X  PK    A             F   org/bouncycastle/jcajce/provider/symmetric/util/BaseKeyGenerator.classTiSP=V1.*ni +n( c3}`t_uRGfm-RP'3m眻ǧ ؃n{ĐsOݗ]ߍ20!V쉒cQ'
^;9x=Q-i[dmዐǂ =;ϋ(qiQv%_JpƖ
7=;yLTdh7_٢p2EUWg<'")Xm)|ea&H0eatqTI")v/21߮<=Ѥͺ"lf07'CA+-q8[1~SF#6_Y(B3Y]H˛r|(*ة`P.QO~d}i/
wN*{􍻲OOFBh?V 1
aIF j1oZM.5q{OI_n|ACCm#
ئa4CP44ѥ)
;p\.uira٤8ҜfJҜSEøbDQWŴC Uc0_e6(CT[A_!y^~ȟyGHF)Le)d\4NaVFF:nfyRõ5̾
'ѕ"EaxiqKYHpR艆䵋2>`v
irU5RX:aO6I
b5pb7Ԙjx5,MF'6f=H<VW'KμpSKt
:kPK$[>    PK    A             =   org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.classWy|TdfdHH @H@kSHFڗ#yd23μ IݰUĶX]fW[ctnv[]fɐ	:|ss={'^zQ ]XBK\X2.T܅.t-.΅7p@^e&^%`M;IV$;fy֍Kfmhyc5zL{yUcfh׈x5o\3V,ryk`M}2{Kjiڐooiظ"v`ss$zRuk5=d=]Tet5kގF/#ѡ5JezX
	h^=mL&P40ܖO3
xV X+=	h{45'8P/6z#1$@!HP'
HRd7mviACߣQZtn5VS
=niAgh˂
P4m$pf-W{I/i`w	]#Yt5D>5I!XJFchˤj|v݌frťۏV"
jQ\HFL)jhҋLM\==I4e&)llYM_rlCjPCԟKAFhq̜j/qTX%M_?:,uvA-Y3otN20_qox0D7I#)3q`y~"'=l_y8MVCH̻9Y	*#^_7ݑPP!-V=ڧŦNX6 ͤ}MNLR}mXs>L.;;3=.簘z05=<ՠav+sz0wAgfP٣4 MӃֽhiM%Yq<Z&KڕX;[k(Y~bISMM7MϡeYhŊ^ 7Gz`/3zy3
oDRez`?6ipe$6K%^#qDDD[$^+U" MJ;$x*-葠vIJI%%Ba&UgH$-Β^ѽib_TN7XN9}ͭN1
%
_s-e',)dTIVKD<67U[Q?1;)ʊSgY9jrgD-w1]4KP2_U9='si]&L|f>MIͥ*gRyug:7bV>[Lk?V;0t8[IU(Se3{`3
b(RP
140l`x%ë-JTalx7}

.aP
6<6|X]_!A+>ʔ1|J*|Z(( *\G
|800ÄCoܸcn[7nmx܍4Oq'!nɼ#_1<aM;x7n?d#8_b'܈/{p"Ó?exƃǣ_xO0|f}5?>QZ|\55OEb7 n=PKed{ٺSO@46j˪jQ<Wm??V⾣x(c'j$Zon2,O&-דښ.g$,l<I(pQ[Xs`xf]5qk}sκ8H
*+Ob.(uwJǱ\
${b6XFCEyNǽœ;Fx$dNO=TΑ9.Vʫ3JwROJiْQ:YIFC09	-ͥ~b(qR1tZ
ln8%IAA'EZUjE/̪8U3.
9;&qhEuq(!pXyHcwٕ:a.Ü1L,!3&'#d$u/;&lV&#X1HqoB;&\c"4JZN@	g;1K)(IP9'S7.6b%;t+K/jZMx-mO۞@c!.k²9'a<DG@)b}YyyӘ<%nTp
K|xiÞK
x(~I8$V.YU<{
ZI7*v~U`*JłuPS&*Q,L/sEm
iQTJ#;L)_2.ӴjO*(v<WIuBG\&;o\,ÎL$}[rֆ	g{(: z@SXq_;FO?cg)K쓸yV6r)*(#GBPK;B
    PK    A             J   org/bouncycastle/jcajce/provider/symmetric/util/BaseSecretKeyFactory.classUmWE~&ŔmBjP@ `R_&!]Xv+96h'Gy
%˝{ܗ;&D@7\!H>d'[Yvi{_Xf1~_Vei0.n;~َղ3t(7.ҚؓLu6岴i3(ieiKW2/
WDu@
۳J",od;\JҟJkO؞VqX
(){YEKC;b_薰K%<±f!˾z]/H?iFΪ*Jұŕ=iT6U}"iG:T};knvwX[-\C%$g)H؇vi2¥!7], c˟V6V:nI/8ۨ-bǐzuMjU5
⛖a8-<.2D|'<1p\x2Gc=9p$9R4>ǐεD=צZ)J7M|0;3sGJlG>hժOhF[[=lU1LnQ5&ӧ%^L#Jm(9f^4ߦ77sW~4㖆jAD0
2㶆	%z!QO5$𙆷0an|e%>"J䣘j:֣%V2)|EkQL+1xЃqO#ٛ*)8@XA)EJ:]$D~HMF*_
ԡ1,@oѩ+?!+D7lӛ|p%!1lשh I^Rg:uZN޺kr8:)5<|zAQHob]d
_φIq}s3}#'Ǩ;tArRLuwArzr߽8 6Ue9č<jxXKkVQL3?PKԯX    PK    A             F   org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.classX	|S$5<J@h\i
"Z5+>@HbV<N:6h
V9vtm{y}M
~B\+c2\2ɘ.c2fɨQ#cy2H$UBLw4r')97d֭Z*h3
Ǣ$w\M&|w{tK4v'y:z6=gc=iDI@'qS'B5h8X|i5ڶᄖt5[NbjhS]M7	5%VrC Zj
%V^X[?7"&T_K$ݩYs'y*,$>x\R8
5Z()0!Fgmj"j#I=%RvpMKL%451
D)5҈%ܪ%Schk8-]3^KGb-]D=P$CPlnnOSCwLgvB?OJTd	F
urP$@k4ԤnTB
8ت̌ *,i`kx.<P9bQ>:22J-T[*Z,j8OIEӠ!q<B	m-}-ڶ՛(z\pG#9jC¸͔m7Dx(;˷4"US,Ikɓ -}Эpsl~do©N/>g0M ڡF-Il-fVN\ҊS9xoU,j3m+p|LLNcmH,uQ^gFHڨ7m6F&1Č4Ԧ.Nah!%$phEVH{QΔFhXM}guǢ[FR\XLTDhipUDh(797=È
SmDR}jpHKZI)$725fj7LIS6{DzOrV_hz
̦R74
ڹz
:e晴8XGڄ|Sሿ@WY!̻Tde8M\2X21~u7O;ɝ@tDO%ެet-+P'READJOd{sh2e1gܱ̘п3"Iu5zΕn	~	$A$"aKx[%&v	f	!	-4	Q	1	q	wHHHHJHIh!N	$tJK;%+\iqeE/zOƋF"8j&	GP)dٟin(Tr^ǹ{7v9sR`\$nFY	xOKx!?'}졜duOf_:W=fe,YŠFKSWZ'ɕȇ#_$Cy9RB
W.|h_(/yh^rx rqK9kρKeZJT)2lfs
ރO+X
ދ(Up>m`C%z+a5Í
"`)
އ
q@rTpCCl4G `
(XDUx^佣<;t_T0_R',)[U4^fMo1|;u`;~wp/~K2t>|u?1q`Rv2<lC1~J3ï$,)>$wU9g=}_ ~O1ہgg_9)gī/~Yޠ{|I	DZBJ~M١-+Mo7/6L%@2,g [HɧW#>5%>RjX+}cV!|b51,AR1Ar#h\sҋDS4du6ٜ&$؃޼pk*zڃ$C|.؅(7Ϊb!!Nb,i1VqXD(RDǉ
	c|GG~Q,egנ7s&,ؽ=pN\ZnFZ4GUBZ8_^f>--t!ikS22-k}|}â>+_^98_ic^Yуl^22+pOSuZ
1&:@M鶝J9n9-(73P(EU8V}NrƱ|1i!><dXǖfl4RDXYP}[}!s*i}xԔX`Ht8Xl)QBoW(3d$8_}]NSDWXWTrhtA>=uvoq(vag)Le?i1r2-و4Ig(̔â֍Ӥh_v}uvfӫO҂\7}YEs}'Qu6À0̨Ɯ(&K\7>hrǘuV+!Rs
3'pg!SMzQ
7۾wⴘ+*I،R'+tavwaʾ|XLY\f
\jg^$E%3l.)B\^tWCo 9"V툸:\^Kʿ(l*pZӢX7uv	GQ9HeeYU7asd=QuhOY!IxZHxP#8gPx"YYa3wL,SNղLN5th;7iQg9Z8{X̫lPɑ1*Gj1w(Zﭡ
(/,擙,0dx9<V=<$i15]{f$њ2;>?O.k
.a/~1fh\Pje=}T
1SB-#b?/8WXΤp<0-,]+	]LҊ-Yх|{Eu#J2ќ \WԱ\~W43ޔ\ߔK=$V!Ϣ[,FPKڏ+X    PK    A             Y   org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher$ErasableOutputStream.classPN@=CJ-"\ 6\PRffJҿĨqQi&w$y7 g8!b7ݱe~\B
Yؚ$3Lq 09^o/؊QQ/BJ^':NHKΖH$JB?-|NcĔKk)|hPϴ,K:fn6	Zkym2Jشڨ(b+*cA

X{vo.4PWa0`JqSSWC,cs(q*(qp9fiG'4YF:FױZPK@    PK    A             d   org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher$InvalidKeyOrParametersException.classQJ1=kUKRpюB6*]8(

J	i)LIfW
8uQq&>=׷ hqYbA9il<2N@-X('"=bH#Q(rfP)gS.\G9t6&3J/	'=ՙ>gYkBE%iOT@/':aPl#qa:_*+ݡ.jT^
݁RB!3F?vAJ86?d˼,XQ2J԰H,-V-VP6wPKFf;  "  PK    A             D   org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.classX{`u][ҕ~02adDRl`H-%EMM&nʺ$!5i,A6fսGuۺ	;~dMйys9~z :QD9qbN$1 0=D"LUXxl@e벀lvr9{Nup: O9OT~Eқt1Vz<'<GvOl0p7#scz4ˈµ%{:zƣ '#m$StcxRF=z/xj[RC	L
{RF/Kbs٘*nh_<ICO$KO&p<1Dԏ鑨5	#h뱥iO*7W,ǛF[xp66O(ܓۢ@GI;לʣTZIL#[DbzTo3ҝxh0f&t50݃`zl}.s6@́ZO	npNU%qqx䇉^`N}jAQGIH)$9O$Jnu#y)9dD#Ġɸ.idurPrL6ytGg$wMȿ
E;oDF"^nQ1dP$zl=6H<F
DF
Ɏļ<b`,(\/ISh/\J"'9sZl#|e`E1ƪc[ʲ0KbI-F[2%Kp$"E'*yKA{ˊS)e<l&66xώz+M,*kW9a	_89H}zU"
t6A"~6=b[B;W
$^]짊MUpix0MrR]`ӃvI 
Yv@?j@U*96_8ѣkK(>_O|0
tJ_h8Ut TgGf0u٫Zkr죽ֿԽMPy<goth|g%,^yK\%xuHX?6|	 RCē}HEЦ[fn@	X|X4qޥ|]}Uz( &Er曬bUbUWY۟TYJⴢ`{X6+%]-M㢽t.2q+
/aR7˜J¸O{R\=@FK̗^=Oz!~̐}@J
3x9ǫl\lUWk0T'f:1ˉyNwb;I+'_}K$8(C$xDBKJ%$%"G$J$$$KxL}x\ć%>"QI<!S;'=.75s7ZvNSn	M)$	=`{e8u\7o"9,#7҇qe$Yohxi\к1.+7x*S-/]+M/s2jՔS  ZomgaŭiqKn1Y4ͅOSe7PfJ;E
\D -/}Z4-PH1/+5%mem%5#&@?L*LTLNe#pfP.63Q)NAs+ge:@odse&귾⼹ ѰMf,arZ4B
K;w5~O/5hYhpV&dLv0F=fkH2Y9>
hi&?ď?԰&bsc?Ѱa=K
mk^^#/YC;6M7
5܍2?5liXְQoLbL1y;Lw'IDF(.|sBc2\v&L,fą_\8|ΰ3,,$ژtp/3dXr}EtU&#<aHey&8E&0*ncs᫢م1īǅ.|{dX2Yv&˘p᪰13q0Lj\xC,uMʅ+]Є.sEz&soV&^zw<ftCbFR2`/Ǚ>ڭ'#BS3GO[VR
N<RrK|qQ@f	۽Yqӂ![]U0dsCsGĝ^kkbDl`;o#ʍtԣ 2+yZ4mj'D,xdľ6?"V}f6+*R9Nϡ%kG'6s}U >0l!V-D#=<XBJr^**&VϬ'xTItSζ_Ft~mf7#z2"{&Q8C̖zF<Q|)ԞwgqFTw}U:$SoQjM]U@\<EAK2߱҈Fq.4[ +qOVsld9w-v(.+-:1!PD2*\4rIt_~GeTDёsqo?n/z3U33Gq&TWOnBLo'AΓheGFQ\H;U<ny52+&h}Yqow/IAbV8l3_uudI
6%,ϖγ&%PIbk`s/VLJuEjaG(Ѥ|E|&7yP<:!&#+'#'sQo^[!xQİ׀Pq
m,$>cTmm;۪:)krazgTȊCT]ntVWb*Z'NAב;&bo׸ӭ]r!1vB\DXz7^;7K8OeؔCHZ7:g,$,fXE#>fƫ/(Ym~sF9K+!j\0wLïb?gE\*Y>["r,/zX1Xiɋ6m(
{=,*eQ,q}b>N)BHqa>N3Q;Ӭ¯7yˍb6	7pqߔw&T;혰uQX9TPqƞǬQ\WqmSkvwH#sK~w㴝L8JisTA/2vʃoNXNUb[N˝+XVn6/lY2dVV
^><r.eP]D@kHJ8nM;g@TwKz2Ohź5fH:k:6r1
X,[ax x[Q<gEp{=~)#Nb_vmD/Wq-0KjP=~ghBY=~]tY}~{3]unZ}5U;
W}fȩnd-%yD:6kM%t2c]K:$yr;F#zU|?T-E#^jS}ճ͠Ni3c1*8GG5ocĨėӕbca)HxYx#<t
=xO[M|K<PKn~  &  PK    A             I   org/bouncycastle/jcajce/provider/symmetric/util/BlockCipherProvider.classe10$- kH_pSqq"k<G!DV>_BVKRX93T9*C
C>y!ƱPh/FRLC>U;Xhd
wqR9\APK(ߋ      PK    A             A   org/bouncycastle/jcajce/provider/symmetric/util/ClassUtil$1.classRn1=,	4	P.maABH	U}@ RwǱg7F䯊M<|bAJ̙?}!z{o	':)>q"l)B;VvȭQ**#t&b.B#8<VfV	!X/G%-ar%LE*smT2n&<N8E"R֨p"Dps͉|1*iVeMoX#wlw&+\t1Uyy<p8d$> l3Ķ	۲+wz입Mz	DG䣊::YGNl uB0X?JIs(.IS5V1{-FFa.eW)^wX̻Cpc">P{o
;~qDl܍Yz
4TAOUl`.[%?~PK    PK    A             ?   org/bouncycastle/jcajce/provider/symmetric/util/ClassUtil.classR]kA=f&m5ڪME(DDBdvX6Nw$_ZQ|7zw-}{܏sg ;̓(S70hi*"M[F*at@Zġ	wIճS^uJОM8dPd?ߕRi61ZgL%Mi$;#RV++EW*ADXQkmf{CCkrLsppYr1,{K%jv^kl.'P88ە4G_Eg
W䢈eevPAn9;Xaj@ѳz*(ܞm[EG+qCGBӛX{'8|DEu[X_Pوzfa\-P
G'eE0S![͉PKt  5  PK    A             C   org/bouncycastle/jcajce/provider/symmetric/util/GcmSpecUtil$1.classRn1=Υ&Ғ&X"AJET
 E}:Ǝި+H(5<%3=3M49F̶62>t75u]$}˚ԻLzX:C%[IGH$oiJ53^Ŋwa#R%3X8=	{W^ˀ[fFeDR#SN@yȼND>Ͱ굗TF
Gq#11G(B3YN'?KWÿK!d)bC£
:b)'hٞVLlMNcN}
Q.JE3ܣUIi*oXɠV&sw+vgXtK59fX5<:AV@bPK0K    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/util/GcmSpecUtil$2.classRmkA~&^Ĥ64ⷪ(PQ{e/_ 8wm;<3G
Tf&vOj82iYkrP?",hF^NXDHZ־S#8FH;H6v8£zH2h5$G6!YMCr62wq"_Na_Dwrl5̍U1jH<sj.z3ۧڰ!pgq1oݳbJO@Viгsޟ)>.`%,Q5^CK5q h@u3
yq-4l{Q?"enʰ"Mp "oLiW:-[ X}'Ry\9.1*
>c+2[L[-Z!h/PKQ    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/util/GcmSpecUtil$3.classTNA="jV)V&iHB$15LǲeN&>	!Mvg9wf9,0ӓh`^p<G?c]w*
%b%! fA.V\5xMjmC5mrm{{eGȺv|=-+R1$ͪa
)%~%_f>R4[rKDU
p_UMቖv-T}JJ*Wo:eUd~!ju)ސϰSt*A&wS۲C.h2pe	I}0LvJ@vmՎƬ3/s( =<w}Mkbi):G!|t!_}EySq -Y#f-&Z^a"&0ibqfLb*25nb8^w˙ǭE]b=Oe0N`X2*Ȓ<#E	yAL"E6ُ(=FDu4aads_06	<"ch"ʧ-5Qȓg:PK^> i    PK    A             C   org/bouncycastle/jcajce/provider/symmetric/util/GcmSpecUtil$4.classSmOA~`C U)Eآ!M I̲]^m_i@4?sGVBfyfvf )CWamlag*ޭkŐYf|Tjs1ҭ02'n[DM"Ȇ#e&ZGBWT
ƚaSUermnMI0҆z7ۋ+UiBw7M
#"fY'JݸEShqauV65xĭur6MFP#:?O2M*%|#)*9xpC=2Lw6R _1Y{	%<4߭&xl7Α$٫7
X?g9F ,@72
VDNbw}QL>P1DW
-zQlC]*JeY&:X.Chnܦ<iM8	3#HgbwY>Gt}!J1|!fs=ާӼWQcO܄N>PKC,=  G  PK    A             A   org/bouncycastle/jcajce/provider/symmetric/util/GcmSpecUtil.classW[WWA ZR	XU5DTJjikt2DK~om\_jSϙ!Tf˷>{sf߿ ~
bCA#=Ap[?9  n<;<MvӴmZ&|*68ʌhXZS4?ĢS@c23=:e6O*%4AZL7c*tZ3Ueֈg	H٨9:QMIy	O3~
yO09S-"\MP2d_}szakxR&M@EJs)UlTqͤ9ţ*YH
v1Ab,.izW\LCi%DLE6%}sfPOLk#`s^4غՍF)ڞڤA֑n)֯fiWe4u֝HגmUhofCOFET$[!Gy#,
-3Hk7]%lh
,}w3\jϧ!:Aa)Iզv9_NE&YSWchS$<d"Ѿ	Kv&iLň(;ƿ>AAUeZ"t*:7!c[W#nMsfz֊E[{X' 5~[SR4c85۬6<)UDXDvD<!CD."qHS"8"GQ;=tUx|ɢ{I.
m>/oۻw47
tJ"\?k
@{j
l~[+wWi|G4۷/Jh8^ԱV
uS3gU!%q|Գr,i>䒤0/eCŇY=7>qGVрs2⼌gىT؍jǑd<H
elƋlLh"c#&d4Ae
MF3&eTDL3r	Qz%KF^Ї9	0/4f%024#oJ[2a`ٝFqY^{9f%هXX]-fh[oQKJ,#54ǽ|E{ihh_»~KFWׯ`8=-\\
ُ40$'tz('@h#	Zk?P3|[\b"*P&l/ @.zo
DRm5s)D5G<$Y2$md2>S!(߷OSn, ӱEܸ+HeP"> ;4,%|_}/Z%s)L P	ziܺ3}KW#0ӉP>r]֢r4mhR#^}V0-8rA:$K^R6TJ{kir<PHU.«m_P2 B@bzsvrU&nox;PKȓ    PK    A             K   org/bouncycastle/jcajce/provider/symmetric/util/IvAlgorithmParameters.classU[SV
JH[mP\Himp[nBЛ##K,OOyi
3)3$}tcN=o?Y '_ACxD9#ѝN]d;oNNqJT[f8VF7zRuVErC,hj~,鶖	;VQꊡB#0Y֝fTR݈?07fĞe[n-JE5,SЯYԖ4'iR)eȡTٲ6$*B1='*mBa&NRR k9ҋGnua0YZuYZn5%JlQS5"xg.6ؔY;ʜA62B^ʪ])8Qn5,U1.xoZvV޵JZQchR4d'm;n4KeQɍ3dK`9Uɩ\N<%i\rtCN(E|J)Unsv'܂RYI-O߬v?<n1q<+sY~?Gkn\9r͵=+[mDsôgSMz!2n@]ޤV|=7:1"zq">f*E01Lm3"BGEdQ s2ilsx6Oe fb%Xq_1A,lLl2Cc6mz`+rQU4G m=V=	L%'mNX
{G`??MpXB?t0{itǤ*^`ӱP'ՠU9 ݱ
rܡY?Œ|>
~E1iSrxt|bwo<i'?
*~ώT>p-LǴHNt/0&fW$g+Koݕ*vcZozxqlG *qucIװ;r}[75{1hyQxY13Jsќ%{SM/;PKEY    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/util/PBE$Util.classWktTWn23gf PebHH(&<#	&@!%8\&&3;kZ[|VMmQj@*UK>k}Trں=wIHk9kg?syY wbmNR-}
lޒziP`s~n:
cC$IDMm	zZZFWO'CH[vx郫nmTVɁLI>xnWTz'ٗHčTXUNP	ƺ<[6UH-&նyՕݺs,N`A(׍TZO+dNN'ڦ*Y w1;LUU%5I֮:i)22S6m
rLɄiRҰ
7F_j	&MsTc$'ST'j7B.Y@?fx!KIe rNK[AiE
)%&sOϑ .dm0A6^
Vh0Q=n2}z,t8'8˯P
(I=z(5EHXXSC}F$5Hצh8N|wD/bþ1H}AtJo.5 {to7hwXiSY`3e޸uCd*5DݺZ>	F$xflS"ȈzV.s%}[VWV\HXn5hY-n}ͳiH'X <[6\vѼ&Pg?RJvGKʛ:m	9ҞymX?]mY"QN{v=`OH%xK7|^߈}}
הdu.j]Sۻ̦΅dw/f1Ɒ\ t'SAh
*bbG.|0n5=f7KX$VZF`
.P+pF6	44
4	l"p_[Z	lhy>GS=D:~(Jy|{KfdqJATx_Ϡ;pV̑u\Ps;Fx.Uv7`l<!`{31êf5:ur^1V։WM]4s?\O<Q
/n21T0T2AN7Jra
;Fn ׍
t#oB0*	YeЍŸ
a	C1ReofXax
3!Gܨû\x'ާb>V8b>x?G>f2|CUt3*B<^[]:A0wtC_E11|sg8p_dxK_f
0_U=` Ç>p)Gsp
φʉW==K[
Q0sDPK0ҷSkWtxTP;{^X2qŏN+Q6䯚aV#w87-YX2I~"#uQ|	r<$!;&:FthKD/lVUm$j!?+cN(O1HYɽ"
)$i)<#힓))UJ1rIrG%wYrG$z%s/$CrKAr?\^*LrI!}G
mfmf'78^j"j&GMt'уD7$ziRaue䞕}`,ɺS='62YWn*$W)˒[)%Wdktݖu'5XZQr;
sss	_kä*Åq-t6{f~Ǒ;F9~x~W,uiNͥ0<9"5"](e#xV<6*M!kyh9#~0,ϐhdzu]`ā<zmn&tu&<O2'}.B-KLk(m#
/9%5~[k'|	SZf`̏~5"5FpDVDW*cDsL&AP+']*TԛGm{S~n5*4[9eT.3qSI6dLWwZzRno+.˲>4742ˑN	~h"vP_{fK:N,)C:E5-G5oҵ]vhv͑Z.=/=D:gSs8Fd.,\S"Kl{@@6[Y-[&kz7Kޅ]dx(r..R9?@XPbL/,vye#`,q7%<C<yFR,wTVMpPKZ9{	    PK    A             9   org/bouncycastle/jcajce/provider/symmetric/util/PBE.class]OPXhuu{=Ed.B,zkj1R6m!yq<}:gә?_^%Fʺ.@4(kcʊ ݩߚOjGԱQx93Oݛ`,
Ƽkvk( f~V(CrJU8-#g][iR0k[5*f1m6w}klIeءOÑgOl+]Gmo;?~9&=[+;u|AA
!FTFH!Ma`Km
ֆ^Z^`#w<ǯV8Οޠ
sl,`	1afz> ]0?D2?B_f~	z)
טB/0Zd<<y$"H3;P<%nPKA	    PK    A             I   org/bouncycastle/jcajce/provider/symmetric/util/PBESecretKeyFactory.classT[OAKE.R/]r(PPM$ӰB6샏_5j$d?2!379{wٞ? T3"2QdKZ<gfb 3(<MUA73d̬p\&aeMKL	Kia؂ż0K¦p<GQ6׹c6ݢP+ku0D5CL
Xp'*+6Af$"y;/,hp͉.|zίaNqm\3'v1ܮ;'Inyhz+GMUaH\1ĪPpBA
RpZ1q+be͹ccTeaɌ\s6"$Y/~pƼGԞv"
a%dO#f"Ӈ
\apUF?O*.DgUSQ+^Y	W\TJ1tHʭytJIpU.[BO
"kAzmZM3t.0BԤEc"Gж6rce俎9TJJ`<[Z2}pvא:co10|%ĵPu	Z_°RJz%b%%oi'gbop.muN{Fii
5co1Mc}۩h:DP.ɸFD1!lo
mۨW>1*SɶGL"PKvŬ
    PK    A             >   org/bouncycastle/jcajce/provider/symmetric/util/SpecUtil.classOJA=7]o#vyb!F&AGc5;qf7N6
OX"
̜ùs
fmZw}T	#̄RݎV6;2mmt8ZT
OMytǸ/uiieK})Ҫ'6f9/"{"N8^
¦pzJFӢdKi	SH"Jt뉸m
ˆmcFP-Կvy2*רBןUE, r$j&vT'
ٓQ'@a6H-!0QVlM3KtFP|ya%r%fqe-u˷''X19]b$Yb	~i4PKlm  l  PK
      A             &   org/bouncycastle/jcajce/provider/util/PK    A             =   org/bouncycastle/jcajce/provider/util/AlgorithmProvider.classO
0Okߠ.YEWA'4Ƙc9	>%Ug 0BP6pSgNIB'gO[ŉ0Nf~FDDHvtұkFY#jy᳀-Cxlf2شQ5Av+ȓVj"wQ/PK0y     PK    A             G   org/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider.classV]SU~NI$&-HmV>"jmMC[ ~KM7
^Щ8M/nv~sy?y?;Hq1q8^W8Hs'6X!2++60U5YlZ*⎤IITQ8mItVNtp[,Q<F̐SA8'*ʎ.Fǚ\QDJd2@~+C^/to$<C\,1PfQTyI
$=$lNc
aPQ٪ʞҰ.Vw[ u=ᴓtt]I)3{b&*5ThݦMV	&ײw]ɺZn֛J$6L6vofe*bYR4yKփg]ՒX-I]'Sllɕl5Uq&õ#[:Ċ8ء[%T4$Wd/ֶFmOךnu#͇k8B
&=0+}$1nR=)o	ˤ}Z4_(ܾG*j~Q'҃E cO53?y=oTz"NT\&z\{2kFzsZ8M,őr⮾܋c+q8}߈>ӗK}*n[З>2}IXcⳮLE?´>l}rQuA´oL[`3<C2O݇T[pTe-܂\^P,!گ:rg|Sg3iuJgR!vJipbKT3J{L7<k$;6@l ;$MEs*쬥`b`,~!lh<:%(`A|ySOq%l>'',OبSX!@ضxBx^Xԁ+ۅ%&-E4Dy~K	;8|8=~T:B#+K^/-T(~C"1?^>\:_:K9Zҋf9i#>։+SK?GyG#3AZAωSd|oPKN  L  PK    A             F   org/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter.classuPJ@**'iAH1Ђ_p9p1w~%=c-2;'kls'+ƥl%iKRq5g=[IS,/Y;
mcTSdjg[ʎ+biԼkZv]I}쟛wiv?0Ut@iysyK/M֝~jm~HSD@0Q0fPKҢ   z  PK    A             =   org/bouncycastle/jcajce/provider/util/BadBlockException.classuOK@߶M?ZAz[*=x (o7KܸdvSo<P&xaޛy?9̥xKAN}㌭ؚr)Sܰ$yz械Rڤt˜o8[Z%hY-^DZZ*v4%xG
Xһ{B,nqWќ`8!h4@;A a>Z3CpXj8Msutg5xO_PKR}e  u  PK    A             9   org/bouncycastle/jcajce/provider/util/DigestFactory.classVgxU=dg7K 
vP!	Ꚅ 
*(14
!Lvb{0@{_)o&8s7ﾻtn[@8\*TqUb*UqUQ1TEJU*8Aŉ
3mf̞hK)(l8j!55=V7e#=FAeT[)˺$$i"
Z6T".]{[Cv)%?0fGz"AF<f2 OzְqQ!췓$KJ|9.1AaزL΢=eݳʆsf#K$o6E֏'b&3<㼆.vJ:r+kؼ*i5#	t4
0e-B=֦'cSZ8Y嶵 k&y^^#5	`LМTͱԂd|Q\dیIV6NvOɬ94
N_43ؔ=x&6a\cGzR<=r4l=M)8Wl2Mg^OkO	#w#{=466ʹj}8HʿyW䍛ϚOX7_y"dXLgS3ۍ8=c0-B8?0+B0B8KBTA餜s¤*_1,HAJ)4}p[գ#Cy{L%WK=O=2ϩQĢ(f(f3a	a.C3<,\8f8a"C=ù
&3La0 Dq"0Fq2GQPP0a)#Ne8ahuQ(.adã1<ΰa)O2<43φsa,a\[nev;dn{e~dx(x>$C!"X1*kV0Û+,U\ю)xE9J1[k=]oj30g>UOQwc8ύnLp\7Ս4 Inj|	L䤕0
UkKUkG wXPҟ&/Ho$=^I@[?!I7wI[һ%}~IܡtQEX27mP"u0/UN{RgK"?$unϿZ;<?.u u]_+uݞ4	}\``j9Jc_9ō0t-ܯ؈t=*f6N.\OVC
Mu	GuCl`߉$Wa_S"jw'jajhi@PZOZX#uie>-ZhV"A-ljOCZxO*TFh:)S#N)K+»RfV*RfOP~6K-Blܝha*_ʹĜ|WY9_5
ʹ֜|ݢ
eoNWEr.:'ѽ*$+s+UVtR~RVB ߵz)֏Ao8 PKJ  ;  PK    A             9   org/bouncycastle/jcajce/provider/util/SecretKeyUtil.classS]OA=ۖE(*"~|KET*1>v[m%'_^DDÓ&clMd9w{{gǯ/ )?MUp!M2Dmye[09l..,l&$!D,v3h3r\8d5؟I_4YIJ)2`X7T9\;\3R+f8Vae0%zK8E;eeKչB,qTf6kl;r2@2P_¶Y+RFF<ʂJvq	VFv唞QUjsRfѮn)PVЩ༂
\RЭ2C{nzCˬN@k	gQ=>=C)"hOZ,菤ODQ/0 *.JIhJhpNB;&T\EDW0
ܗI&q1	q	#Aa(p
c!JV\ǄId1G) Jй+rt52.׷Xy E]m&χӚF0YFy   >)G{X=~ܞoR"E )ZOkޗH~|a}!Ly33=ߪjKPKl  ^  PK
      A                org/bouncycastle/jcajce/spec/PK    A             4   org/bouncycastle/jcajce/spec/AEADParameterSpec.classePJ@=6ڇh#KZ"Et5DXɅZqQ*ssυyx}
t1z0Vk7;&c`4Ү	ǡ-8nHT<"<Ŀ^ULKu&7W*t+)\w#~)N͐=FYxJ#xGxP7pۈ"ޏʢEF
9yld1CLӘeBy]*fH?KTS/Ou*N2	Mg>@$0K +N	K֞<2O_8XKdFۆI2e'oO3V2>PKԂr  >  PK    A             A   org/bouncycastle/jcajce/spec/CompositeAlgorithmSpec$Builder.classT]OA=R-/A)Zt[AQDHhj46Nn;UGW`$w//B7=3=;;;	`ac&_Ҫir!7K65W0DaK鶑QF*9)+xExBʹhA7m;2"QTŉ۾Y,-f;g^6[rӦmW0]nqX(q+/Qc3#veaHaUo.LmcqKzF^6xWTgJٔ'7Cc%URRi0aHð+FiYjt^]ʮSZ0O5R?QSInfVSF=uVsUHFS/y"r1Dq-Q!c"Я 7o6))HF1Qc>	WR`ֹrtvl[[<u}j}ʫ/y$te!e[ʷÞ)ńY3`2u1&
4Gn5HD
Шw?h6P@F=#<381𚦙c{CwiI*֋
*V>'{ahH42Ҩ2T_2-.gFiPK)Ts    PK    A             9   org/bouncycastle/jcajce/spec/CompositeAlgorithmSpec.classSn@=.&ƴMCe,O)'$"EBqLDylH" >
qQREp./ av3H{"f`0jFc`Ac-P	D_	H㟸(p:=N)g<tݱ?՜2t=Hae0$UGTin'"sQVJb\lTYי"'΢~ܕwB5P6`l2pdMAdu4Q#ڋby֙^P,^n=cg=ަ==AHiZ<YXԦ
Kka^
64Q*j&➉UlksVܥi"BPؠ
7.I3tKNx<#lGS?B>y|8_7)QK\+Q_*9'iwޡ7*
PK>J    PK    A             9   org/bouncycastle/jcajce/spec/CompositeSignatureSpec.classQJ@=Ӈ5ڗjVd;En.N4MJ2O.,~%iڅ}s.{?>\bNoe 
Z՗+E
y2N`N"G<=CI?so#{R(gUJ%{)S6tx'R$kw'7gBC!3U;L4PWDffW;Jv{v3ahb0mj%Me
m*(1AFuյ<ɞR֠(Gp-ӄښ`'_q8v
 8#j#_t|Y;^W0~ PKSˮ3J  K  PK    A             7   org/bouncycastle/jcajce/spec/ContextParameterSpec.classQN@=ëŊ_;Ect'1Nb$,H'))_i`~N{=sΙdv¹C$ovY1P;}|0gfS7N^0;]G0(u|q3h=W~Lrzf;|@{}bn7KvϥzX<k(|5f8pupkpk5'3Y<k2R+H(XTpxcT
R:b`ulkXhа4=uŽ#&	eHOL#miR)l?# Yt4ZxBDBE4"C`[؜%PKss\    PK    A             8   org/bouncycastle/jcajce/spec/DHDomainParameterSpec.classTkoQ=,PVmyha(ZkkLjLHLJ7)amgA)& qfwA9g33%ۧ/ r8bkڨnuZ]7vG@=h#v,z,"*i{]ͨ65HMިAh^V~КtuD]Q_4_7eck;?Q/ZYǼpƴ8#,_/խj0^X-KʹX|XSR#*ұ
%2;h}nd.7>gch_{qCaSpȐ107I'd<^)1spaaR^ec3(	$CKQpA/vsWG> J,;7A<=<OMhxYI:u5Uk=lqnA ث$)Α悭	I<ej1т-
4#हGE[iny%
z$XQRY%"ӯab+k`:OO'әwvZ"V:m'!nSA,MJPK+/`    PK    A             ;   org/bouncycastle/jcajce/spec/DHExtendedPrivateKeySpec.classQJ@=Shk*BSѕŅZTt!ݏ%&IHpQ$)<.ܯO f^Kb\ni$!Dd$Ivrbo($]S2&Nl1=-|~!NKtth:t73V}!^\?fY[]9V"L9,XHZK(({gC+Pf(JTϰbKM;+<haS;j+@&ceB.eR|A)PK*H%  A  PK    A             :   org/bouncycastle/jcajce/spec/DHExtendedPublicKeySpec.classQKKQN3M5ڄD&܍E%aљa
z@~@?*3&*]|{.C:f0\Rr`%EDb8bŽpš
($.REz3<yE"w/c)Fj@/E_7=QC;LdMLs/:b(Wk)'{+r)gѪah'_p[8X UKIbذ
$mԿ;
zl^B]F:vC a:^Q7QzR9Jl	PKP"  ?  PK    A             3   org/bouncycastle/jcajce/spec/DHUParameterSpec.classTkOQ=Rj+PQmkU<|Dv)f%_i"b4я&(un	ٙsw xޅ.2*õjaI7ugCFnͰL0-r"+lnr~:ŐMrBi2N)^"-
]+%2hl jo;S<g0a
nb{yaK73[:A	O$^p#eg
Ya:5std譑GBsH`N1A;\F3(҈sBKEaޒgͻKiegi`jEC$4~r&XF"eۼg[r\evtȺ`Bb(

(T0`X EKJ656ެĮcSät$pLxY&/-VT7\W7
RXRzN0ҋ1(^xpǋEPkpy|
{уPexx Cif`<!,H!1Owܚu@oϽiC``NewrVbxԜEpM~Q=Oaɏx5ꐑ=Ų;Œ?ŊS$?R13t.n
LMW꘨t~h,N֤JXPzg/7hh%ZjjlrU)^D*>[
\oWp_*pImPK    PK    A             8   org/bouncycastle/jcajce/spec/DSTU4145ParameterSpec.classT[S@=iBH  J"
^haF2*,a))iRxM//</9۳~4rf|ACjh17d@CHUͶ{\C*r_)q[0=efVUUDU1({2O
T·YŭՏ;,-V[,*ܮG֬2Mm2\rQ2싼W<ft^ʪ0kneu-JgL50mQ+I*j=L@Mf[%W2LՊmURE
IudjDAY!Xo\3tE%
i
b.fr:BČ_ܱN~<Ij8$N!S|D48x˳gwO3YhE7C3С 
ᚁnc@CpS6aX#1
&t 	: b\UuRs+ٻK6]b	SyS٤,U=(Fa\HDq01r4hܡ1y{>2#<GumEbkDzs̠9fX
SM~Bkt%?oؙY0A_yf/hPKnC  x  PK    A             5   org/bouncycastle/jcajce/spec/EdDSAParameterSpec.classS]OA=S(EP(XPZl(Ѥcbqݺ했j$?J읹{_ C1}%-oA)|v!X6rE
z]H!7ηM
ΤbJ%ޠj
tH
[e'j;mͥUl[.fs[HVur$9$=ު	;U=ג&x/tiنpRHC,oWkԅm!Rp3ԶwuljzSbPsK^:A$)InwAFԛJ{ȭ鼦N{eAZsoJW)wH&!P0`XATQ1c
kT`[=\=Bh2u1z/ܩ8̟ZPƌoWUq7A\UqT#o2aL#nDps\ļoL$4,Dp	KAyȆǥW=~O-HrЇ80C4ơwc#UޣLj:ʾ!3h#3_p;-,A;ܩ}LlcrsѾV2Pí&=#
bR1mqFFc0OhPKٜJ  \  PK    A             3   org/bouncycastle/jcajce/spec/FPEParameterSpec.classRn@=c&ZvRo R$V$']ԮM!H  >
18 %OÙٙ3Ϗ_ -VoR<(X.JVxQ*L)=	@=4JF(zt/
/dd<j KA:	v
P`]xnIGJNK{qnr.}wێЋ3I/,Ј{\ՕUTu'/9^Ǘ#gSTv'~"0Oh[lS
U
5
W4,jJwx>Õ=Ė5@
\n`,ᆁ*14ʜUu[:VpGwucuaۋN%֩ȣ4klFrQQ .Pvf~_3a@q	9۬?q-#n !6 Mh8 -ϛ371p3cT3F<L4jX>PKD9    PK    A             9   org/bouncycastle/jcajce/spec/GOST28147ParameterSpec.classUWT<
FeCq8&,ඖ"T7g
[$&)57y<ޗAy{v `?FVE{(0D'J)fCINha=ZN"S N#Ղꪛ
"H8*1V4۩P*ʹ-N
d)D㜺Y!koWgbv(m)-NǷ\)9"9hNкkEŐբhps]RSt%o\W͌7Omk
b|L_]U]:Ϻe,q4|!<]ï(5%c6YkAn2zkUحQCi=1ՕUliM|+g
(Z$ǵvKT.qSb˩0]0,ڽa^<_J+urߩtLըdLOnԷX[ڰV|>7-ᦄ	$|(WG$K-Aa4{})
-ٳB+ZWoP{2ZOֺRu:vR/S,_GĿP+d|eH!#2!} 	hq1fNFdtbFeet2>L
[p_>Xѧd9O$|(0&>JO,&ZJWe.ѵrM9}&
my_TWMNߧdwA}D+hn#EVRD'T(HE{p~	qkUK].T_F䪚J'vMcg'jS
iaˁl[$;(Q,FcTJ*x;u#&O1Ơۯ`^El/>Fvaƛw`v``s_y~/aɐQ1F+_؎i`iV)9ax	y)f?PKHp#  	  PK    A             =   org/bouncycastle/jcajce/spec/GOST28147WrapParameterSpec.classUkSF=Bd#$MBJ»ilC
$YR%9Ui)ootzW2/Cs޻ܻ{+o D\qYDA|<Cs<_0YhI4,H?ݟ0`6)R-)R%iUG"*v*TJ5mK# \PJZ8gywbaсX!V^rBʳ2e/F:E&tBf;[+E6Ks銙vrIUs|ö8\>!-oi&]9tՆ2e,jYrD4~EMӦnY
֮0[
SUy~6(qulU|Sՠ?kǝ
+҆
CsI,׉CYai<_88)Vo)fX׵=Wӓq#uTeK^qIAs8Sb)Skc+C4ֶen-o	mw+S>'å3OaC\Χ%zg<1W{j(|%^ej8]
&w@}VjzOg9dbA(ǲ>z4K,̵hjJ`#	#-:n2A;	W92J)	]p>BNB'fX=E0%O<e,G,FqQ<b8o|ǠbMLE2xŗXi8|O&k邷}Eݦ#nw/hboWk(k ͷCb ==l%_3Hɦ/S1q[UKblw27h>lUCXڂ`Q"_U57t~ GdGkNYmHoe'ʘEs{o|WMR`xu۱]X]va#&Sa\h$Af}lxr1Jͷĸwxc%cM<5ƟSk		PK=-    PK    A             8   org/bouncycastle/jcajce/spec/GOST3410ParameterSpec.classTRP]д5 (^P-""/>tBzt~Ce2>~>MJu{'_ Ha= wXrjJ$i3 lzc344JE,Ĭ^n~xdTդ]vmyhu[ҵuv2WsMٞL%T>ë[G^;Zr:ωyH]8D(O=ꑪTdw\2K7bfڡ;Ǌ]fT*tpard0kZEe<4cMSTH(̲e*.
p=YdVjf9ŭ^
Rdj˴mG5
(ͽLj-=˭'_MD-bP
rV1sDcAUkl/v?Sꦣ=5}[*RLC߲DG"np><pQ	b%tsG<a(A<D#0!=L0T0ySq0+3cӝsT[G(<Eow
ߏktD':hG/JW9^phG<y4~1)O'gXGOXNXgq#@_+Tj]1oH!OB}ӽXu%\q_`6)ꅻH^~x9"UܚoiPK    PK    A             4   org/bouncycastle/jcajce/spec/HKDFParameterSpec.class]O@߁-[F>VVP-p1ԸY&$&0]ig	D 2i {ΙfϏ_ V0X7RWBP&oؠF%_F#c`?d%ogԁoZYn[v
H`o6:N:H|ъzzhՋۦ/H+CZjaYr%}W21]-T܏L("$ok|GɎY+t6W>s89hGM,q0`qym^q=Ls8 G
Xf<rQcS+sVѽn{sV1x@ZWidKJuEd,z?1eiyj`fK&2Cw,iN7Or֣~ý]%sH|6PK4    PK    A             ;   org/bouncycastle/jcajce/spec/HybridValueParameterSpec.classS]OQ="RJk`WCV`Lԧr.])oCM45i}P=w93??~z$J{9vENJr؛1,[ Q'xsyu	72W9vI9b;'ho:-G¬Ű&sӮ2ss[bH
4Y%m4yyy|PUϰ-e|(TNcxu%Z,t*\<t"-Oc}`rM#:fY+k`r	S
v:s=kUtV/8FqӉk9:F<Fhvbw\'cDweܓq_FTƨƕ>c_eot*bM:My
h1CkiD1cRAqA(W0, CU0 YR}4!2	axYs^/h"m UĶz1c9_9a5 ;E"X=	FH#@16Z=lj:@F6pM!toQE~NoP)?EYHQHxsIی0*c>#"~[U sR()3d
U=' XuA4PKĠE  M  PK    A             6   org/bouncycastle/jcajce/spec/IESKEMParameterSpec.classe=OAOAB,Ҙ( h4Z@+9nbD3<f j&-j}O6hʡxY@2:R_J=fpJ<]W~(S]]+fR$ ЍR~GwCޓZW$3쫰ުA GڗnW𮐓fqgod==C>ߛ׶0oa¢%dl1kETY,cń,
XRE	uu'CJE$ȃҭ8Э$1%z9HO
fa{M<B-Rf3+6|6yLHQ~PK+Xr  '  PK    A             3   org/bouncycastle/jcajce/spec/KEMExtractSpec$1.classA
0Dj.܉H"Ņ'HC5D(z5COy0̼?
ƄҨVN9d㯎BZVr_=1Ub-@0[ήu<09U!P1BDrar25Q_PK.u      PK    A             9   org/bouncycastle/jcajce/spec/KEMExtractSpec$Builder.classUkOA=SKBԲQ+(R@
̰ºKvhiį&(R
5)Mz칏sov篯shhR9Y?d`i<pZUp\_}oCrѴd
˱i*loxEc30+?ʇF0M[.kTbMƧX뢔3ߋ2}!})Fo	{vBM׳Nt^ؾb
\vy7O{=k8$#f~seݛ`y}'\
7m84
Ȉ
-5#(!MCw}4+8ംv
(TpV9|״v=a)zI_KMgD.Dנך+zR7Cv= q>ݑgR~R(Rb]w6<_DгB5's\U]oaוhChVq^Bn-**Z%BF0
B*"h[M.!ы!	nKpGB2˸U<0Jqݬm[<AAkXCb^oC3eɴjJK:KȆ7R`pv3Kƴ-h
kۘ`R`Zl }W_0cm!<Ѷ`3"Q;(#hL>U	?@AB7*0%6v!Q
UpiuX5 e9׾V&eW&yeWʘb[ݭc!_z܃,e.Z PK43    PK    A             1   org/bouncycastle/jcajce/spec/KEMExtractSpec.classTNA=-ۖAD+@rٖ"lH5Bdeqْ-E$5j| M@793|_0,C}$n"r×ԝIK5f|n!Y\Y[\^˼..3IRkx<Ռ)}hpG/D'syV,;b^14m1gQ.?-;G/45e[Vi!^VhjGC6ێ]][	ѷuaSGc\0c׬{]MF3Cݕ`.FNZk~f,:,*)hVТVm
*hWpC8q*M.%.(UN(H&j$"Hs7cfjҪZM.oM.!ʶrڪݐ*㦻GPQ<-C>/zdW>?`ЏHщT2ƈ/a,'xS3(W3]ы̚
n&`'t࡟D(HXN!uS[v4yJb2SL|GBirc(ZiU/y1ud	g p	SфDs%dy:|PyM,A_=+-Wty.G>XrɯcMJx]BSgc*,PK~  t  PK    A             4   org/bouncycastle/jcajce/spec/KEMGenerateSpec$1.classA
0D'*=b).<oHx(1	|0üX4t'euQ`N5CSd4peUc=E>-G_%D&1UN[.9}+0ݻn-c?29	DzePK*      PK    A             :   org/bouncycastle/jcajce/spec/KEMGenerateSpec$Builder.classUmOA~C
"^ky7k	j
iį&(uBIJngf? a)z
-xu1kX%<į:wH$Ю9;o;)m34g
%E6#v;!>9CǖNSMʩ+-2bx{G0D|NK/\+Z㪩Dz&kl<O)#SQcPf[s庚\X^k.Or΁F"ESkj,׊Tv7y>amش-dLCO"=#|(e!CWjT	-%tH"! SB1v󆕛a:\/P~Z:t*	7XFR	NS?%lRQō(I$Նqv1yg֝̅5jHse+Je\Fhъ{2nྌ6<!s	A^0<2hې0D|	`܇DfT1aыI?0#̬f＝XNXT漩9ߞv5}{Y]3Cb?@3ZZDOb{DO*H
dh7GRG=,(2敡2JoO}\==,Lǋ2b_!>7>IIyIa
SOna訜*K	|KJWA3vÓ0MsŃr,DM))+%/!հ\iُ$e+;ZPKqH  a  PK    A             2   org/bouncycastle/jcajce/spec/KEMGenerateSpec.classTmSQ~"ڋKeYiY..MIi
3QM粈S
bfy{ q<g
^3Uϲfn`p/_ܬB:_`'.C TM5F"9C_5ॕu-,2J;UVbpMY1eZۼJQɕvmpE̘bꖭ2\kv*M[/b1^MyM\d0DʛKZҸc$~M^Qm8h>cwEXF^-(\Y5	KK0$C`Cj
`ꁭdvbϋ6vB`C%؍ n,*:A醐v<XmU+IS+՜Ԯ<uF{2:L["&E/F"!">Q1 5_>Z92Z0Iq0B/FDkCBe	=1h5NU7e8
E&jHg 	GmptӮ9d8kxz|@.hyq(?#QTxHS׋N1ݨ4ɢl!
wz{1
gsRcBr}L=1>kPKF    PK    A             -   org/bouncycastle/jcajce/spec/KEMKDFSpec.classR]OA=SZJ"DU3`HHqS&iNiY7
?x]0Z^qιgO 0َ7GYiTFuXJ%#I  `
5[Q'R2D)C.?ScQsODVPj}*mhRt,uF';C7OU2lIȏ3#ہ~~W{N%Lˈ'#B|YyLQf(ݱ[#N~WmOϷvպ^S(-[R$4R뜞|cMg=B	f09qB0E"*xX,ӭW蔲(un9p6uP,pfXq>c̣|:3M';־?%X^0ҕ zC PK_1)  *  PK    A             3   org/bouncycastle/jcajce/spec/KEMParameterSpec.classJ1OXUەwAV] t*NfJ&3qcCNr=|	;j!ȜJ%i+_Aq!Ւ&$&@`Hx}u}5
#kE:A'\5Z*YTVWq+XK37f3yb	eyתuH E(SAziq#zسvѱv(oUe6ŷ!tT@]B_&eo̔fcunoGPK
4    PK    A             ;   org/bouncycastle/jcajce/spec/KTSParameterSpec$Builder.classUaSI} C3"*h9=O%w%k`av7
i%Ww$$TTLӛ?~ C81C_UvUmiX!<zv&oZ+i.^+/MmUi8\6YpmovJoUa-BrAӻߎXn0R#J5Y9a[֦e#ӗiC~`sbn,d`/£C6&3^o2LU\˘+Ln@Y5%+~ ؎1y&Ɉrrɥ[[o-9zkr]r2T떪} q)Cg8~`?{ɆVl6+ْyOD@4F
JT~gsl!ёFH'6iR6fbW
J-%G('۝wkE*UOp}8i8(5Sp4DV

nEp	?Ep0ං;
*0Dq
E6JDq?3Jό[Rx3%֞E M?1%V1ِnRc7ڝul^(Fؠ=d3z
szrOfm\^G
3S|
ϷS;<[xHB)a@0k:C7*NY<n<}V'0b#n6	:UQ;b}נ74ӲF3.Am.UjJWIDx\C~Z0Jv+}PKVb\3a     PK    A             3   org/bouncycastle/jcajce/spec/KTSParameterSpec.classJAƿ]7m-A"[aiEA`xմ:+3k[A=@(8Ι3üA^xHrYxAր9VR[2g(pdK|7PMk_C*C=6j7O'do5ӹߪ=Ar=n`ހf@7#(6}8oE3SwWYxu=&*W>
Jj/Dj0` X#Tq	χjAuΙTJ&1G,3n>4-+[S^:bJSՋgJO<`S2(OjO(]T*PKrL    PK    A             5   org/bouncycastle/jcajce/spec/MLDSAParameterSpec.classTkSV=		y
u6&¥  -К<kY12~MM7LootJC=h+ QSpV9c
+*L5+Py	]	ʒnޒ0FN[g	c=oifn6פMzf]<n8MV3hgÕ z*,fWReTmTZ5vWՍk:@ٲ-Ǵ]L S:nô+[U6bi譆>I5놞Zkо({FVj56X]p~fi&FӚ{#1?)Ryk5~-|~T3`:M\g$F%UrZDgM2RUUuFñQ^>w8M	=9zpur΁XfMڈ:XŖo;vLr!.#eXWd\1-߉E	##I{FϜHK>6q2koǽ8:&|_%흄;@վo<ݧwME
Y_ᶊU$9LrA0a#*٪Y|"T2~Asq-?p14~X`Qn~!]z2]}$۬dBHXKN_6뾝6'S ;;O^bwkFJdO%SH	d0ōBlE!D&7
]],:0b3<bjbJ_aQ.2ԁy()	uqvw{ט^7ƣSxx6<ϛ#PK-m_/  V  PK    A             6   org/bouncycastle/jcajce/spec/MLDSAPrivateKeySpec.classS]OQ=-*"*vXQ#DM	]eٽ%LIn@C4s9s'0:SHp!D-CR+n,3thÂ9ba9*{",gCt&mTExN06/-g|%dE:V3V(.EU[reb6A*ig\ۦص-jGW{S!G
I2FW!j#FH?_eF2+oVWJK'>\ENQjq 0!͠*萮OO
*P09[gVRrj&цE2TtCUq]!UBR&Ud^'1"ͨ4cҌ4
܄4`IK%>f?m$IMsR6yjBd(z1}G/!Kl`Ji`Vu7"0<CB
nDڨ% /S"DLL%ȷ15N@k݉9tqzL?5MJ;{(._@:f[s?ඵŝ9K PKXˆ  1  PK    A             5   org/bouncycastle/jcajce/spec/MLDSAPublicKeySpec.classQKK@iMSkk}-Bŋ"fEKOu)	1)yW
Ń?%NL)u3cvv
1v5`aav͙9C&9{au,;ɠ?@ȵEG$˽u=rj_P(E
g]i`lSȕ##d*u#۵A!u>I6YBSBg8<e82Zp6:VQĚ,%(M
%li`¿#=2Ԡ:&P|Fܟn`g#Š:ז)39	9)]ykT#UPKMR  [  PK    A             5   org/bouncycastle/jcajce/spec/MLKEMParameterSpec.classTYSP҂	mP+.XkhŊ""
[0
ڒ&4UyWߘ79޴TL9߹=[oᙂ]
:t*8[Qa=
zTpZ?rO2jy+^cnөt,>DKTb"y(jd-/uԭ6m,NRd;`%7o[iye_&a6[`tͻN]EH23*N]%fhf&8;TE'NyS/zIB{'pr90aQxDhƖX1:V
u@
 b*le,[4	䴬]eC/&
^0h:EgSGyc+SRO_t_1gB/S!k{d	*֒ew¼adq@F28,_FDB(kHؕ0hS.^'{4Dl.S쟈$o|xN7'0"*pA1.sF5b.8K*BS16$q	.r1ŵ 4L0EHxbTInq7HӮO؋bn,ѳ&Cqpo(tt|l>B>ΊVq7:	3Z
9%ҭяy'۰EH`,3@wVW0G_؇H]!^(~*Wމ"o/9Py/r!	xmaKad>`)+OQ
n7&jܱٲf?PKn2  I  PK    A             6   org/bouncycastle/jcajce/spec/MLKEMPrivateKeySpec.classS]OQ=-*"*vXQʃy]eS?&V$Rn7`!BܹsΜ_ƣ:SHp!_G
CR+n,1thKÂ#Q/UYEpàxUx[-ҁR&Il3d->%[^6cXU]}aGVN+vAt·p29[-jn)RH
!+$0]¬vX7j߈'`xekM0*&	[[]Y^;`4r(2tRmX}^hU@tp~
T}
.)WpYAW&W<Cz4Rۮ5/hJ+ڬvfm(͝(*.KE7TWm)$e]Etb#ҌJ3&xyM uiH&ixZ"eGhH"'5#Iȓr!
R(]%]>.fo`Zg
|%è(>$+ZIAˏZ򲼞8Qm,QAI^|
S_tٝ8CG7>PӤzbc51n[+niܙtPKc  1  PK    A             5   org/bouncycastle/jcajce/spec/MLKEMPublicKeySpec.classQKK@Z_mxKDV=EA襧<+'1;;Y=`aaAv͉Z)C&9㹒ay,k;Jf"C)crwȖ"dAo8?6G^X tine?-?w48r3q@OiNm)(*P,*{+?\GM4%5!a"*XKº26TTIvJ\F[MjP*Z&񌦱;E{G$AAmPf3@R6DשF'PK%?\R  [  PK    A             3   org/bouncycastle/jcajce/spec/MQVParameterSpec.classTkO`~^QVӱ
km"	l>u֥Hב_i2Mzޞ\I~=1DUaV=?M{0#崚a_xSvKx!1v*mT{G#@zɫql^c2aC\$.0.fp6yi٬J[QR[)ʦ2hڢ֠Y'׏Tf(ܪQiuV2۞Íe-NN	~ǳunvԺ}w0/aA¢%;ާe=UۤIxHOu>C&]A҄paNR2b
$d! )BL,"
Ǫ=#"4 S(c:	޷>sQ%G=w
3427i9
|zC/?WKȞ2a3EvIHɄy=to#ħ^,?Fy<m6{
SȅE:1/!,cu
чM7Zb 'CxuZ^_PK>A    PK    A             8   org/bouncycastle/jcajce/spec/OpenSSHPrivateKeySpec.classm[/AӪm]NKbވ!5Y$i:fk;l敄HHxps9sf?_,`<88b1C璫\L`ޛe0kR&Ct~P!Hю*[WyJ4Rk!kd(K\ݴ5)u%3y-6s~XeDSU"䷺A^r-r
u+5Qnj9![#]22f0w~Wu@E|?M!%`?bc^5v˞$ɲٴA4(eG报'&{-[A$dNécd~ B}+XCwPK0qv    PK    A             7   org/bouncycastle/jcajce/spec/OpenSSHPublicKeySpec.classSSUd.a-DCk5jEI1NśKXzٍ78}?᣾*jcG|qsؖ63ݝ=_s=ܳ!Yܱ0lᤅr&-&C2_!ߨhn_]-lTH\pja`'kMT+	rr6˒rUE~Иg[o7ELIAÐ6kŜ`UKތJ[(mP7h+:daq{f.}7wWsu֯M_H/'C:"ʩ-t@sO\R4\]W4#70'"]-/n	hWIeFXIQv+޽Y~iIL慘e3R?-p3!-	ofnnJ遧c#-dߪ:ζHa#cqlʝx&ΚȘȚxNU?c]oW`8/Խg[Ni^[/TLqe#8aÆɠ
i70m36㒍1 .&撚ǵ4
d1"dA(JSx&}{6oL%UХ躈`$H)zb k̃4oFN.fQGvӭLw~|IR#|/XrX^1f 6fhxj~8K'zb 7s+]}|SN uu&.x1?H3Sctz8H:G>)}H0D_>Oco(Ԓ@f8j-՟QPK-    PK    A             0   org/bouncycastle/jcajce/spec/PBKDF2KeySpec.classSmoP=W^JYucsmE?,[L F˅bM(㽥j`p><soo
C'> n*viX X<*Kxu5Iy
C0o_4pˁER=~Qgl35v+56lrJֲRLUʕ4	WRIǨWm33:sl&[巴ٵ>AC=~M[+m8w:	%\0/a w0gY/=6ykOQL$qԚ[]mt[|M53{H4Xn-
XR5$DRÊ`i*
nȸXĭ8-Adxn",0O)Σ<.d7rdr`%s#g?B@$z J(Dxc~q:͹XH>wϱv	PK/    PK    A             4   org/bouncycastle/jcajce/spec/RawEncodedKeySpec.classUOj@=7Z[Aw>ٸFW
p5CHIƖ~xn{<_ zx/@xiZ~`I(ڎ[ZB#?RZf"i%FFlΔЍ@Qj))}ws'ԛi޾&s&W)WBa)4PbztSy10z	cP~UFbtktE\PK_5      PK    A             8   org/bouncycastle/jcajce/spec/RepeatedSecretKeySpec.classmMK@I?bZ}ÂxS(z,1!MBW
'Pۃ]؝}wf/ Gj?%=<؜Fy9is.L9U^Υ!t$E*H+,T,L.Jmp叙Z*0bQh%t `jcǆc%o6_0mx::m@vsBp]aI7oQ^C1s;pr+Eh`oH7^V;+ۢ?OnPK#    PK    A             6   org/bouncycastle/jcajce/spec/SLHDSAParameterSpec.classW	xXcYNb9p*hKcajS1!E`uƖ-KV"=^ЃrG	1-MC[z]B<-k??7;:t= S݄uz	o l N%l$FDx#tBpLY>لsÄ1BP J(,BP&GF8v;	Cx	>H!	!|1	 \BI§&|p9	Ҷ3hM&gK'
ԭqHS'uJ+L-\N5KmYG+ѤC4i5:}dլX	4ufpL$|7t;KjCtt0]z&`?
jA]H?uA&u~4]1>nn-6c!$X13:rF~c}.gPy̗Ϙl!/KX6Y%N13B/.ܠYhSW,3S.fK;q3ѕ*HoxlQKVO˰\#[.es=5|1.Ŕ_W'if|0yI-:
|f{ưJ9c$cdJ[9C9ªU9%!_:<l5loV.Om'Jwͱ|9VhΪNn9/
ˑ%:̧ȱ|9UubZ<57˳yTy-Ss,5E^-3ukréAHgk ߳
Xj8Z1^4>=51b3h}{]w%VCPg{TSօUP/dϪtA&u~SaLy{{Y)ո{\`NA1]]5=
*>)VΚIaUЧsBO	bê̺`?mT-l3k
K>aT<r~4_ؖO$?~OHFx]wKx?3#|!DaD1E&((FbD~Wsztt)-(WhVCU/zQ;_N2(/pqqq|ߊ
/1\p0\p70p0pw0``3bͰ]q̾Ǜ8w8ߋ# a!Ï~2`%ï~(o~;3b3_73#x3<`cO=W¿uumaP~%#3*W{13q} _b,ԕʱ8:؛{cos]±W:j^{cov쭎ݱ;k;v1^iI֢#8LzWY"ѾN<#Џ&	ig;z	w.J'G$K,Ml<~h+^]K&q_$͉1oBݷq*^3 ʛ@8]>G֑G&q/!&]xJ(>KG?x=sQQZ(^xx1+W|QVVgS9I)P<xDيR|Q+>O(ިxs&_Nx.<)AhO#16cmN<8[E-j\Lj5jBw-<o-^khdٞwVUZͥZ6fVsV3ei-^cljLyVZWj5Wb筶Eq-}>[4{msj9>.f+߭W+YrPKʑ    PK    A             3   org/bouncycastle/jcajce/spec/SM2ParameterSpec.classeQJ1=YRתOmE7E x >iXSlM(G냠dfΜ9L>>_b1JR=b諜o%a&	YF
'M 40nl#m|W
cB6k:A0CCmvoj[_QePd'Ҷm%):RQ'a9|vJ@y-)ZRTVo3D7y 0C{zȵi9<2pȢ/&QdE01Mc4B
yy '(,wcD!?^:]C0S{;
/(#fjKO@Ҍ!/jp8FRlv2U"]PK"y    PK    A             0   org/bouncycastle/jcajce/spec/ScryptKeySpec.classuRn@=&q.)}@y:;D@)R7YMt#{rHX | 80s|9ܻ_ x+^8gz^^7a;gMgAJV/Yw}#y6CE($^QbވXSFXˎ*}±y˰GUV:8&¿\MQ|P5PD=(Iݼ(9TIixQ4e*Eb'RLdNXyfc&^^\]NdZ;vDŪ-;Pw%.*u-n[cᮅ{
qx@+ѩ`G6~
3˹YN[9;4#D_w3o3r*U?>Fq"bW}*kX)Bly߀BTRז|.7PKא
  3  PK    A             7   org/bouncycastle/jcajce/spec/SkeinParameterSpec$1.classA
0D'ZMP(Sc"IĀ'<_ VT,N[:	(:M1YVFѬ╵jܻpJ%@b(08m}]tG9kK1rdvQv3k*PKx]ܗ      PK    A             =   org/bouncycastle/jcajce/spec/SkeinParameterSpec$Builder.classVSW-ylڈբh|`lQ1ג\²f7h~t:ӯ:)3:ӿI՞I !-v
3{o3(A<σ& G-/p;
pSu:!i0g19gUc>wS2XFri&GeՔ3dEgdMΚ[@%O3,3brO`wwp8z~r۵涨hYVp
Uja\Ο:"$4{zzN3=I鬪5&#[P,lgs]G,ed<<,*Ոd2Jn"k֤aʂ=61|-Җj+`m薑
dR[evV&-be28Cts,Awٶ"Ebэ#CtԓBZcBҬj39;tպ5)mPy=rƩ%Td\B1-E\E4KD&癪Tz7+F}VVYp&\H5iߔQs
X:Ψ<T㆞a9RĕiMM,cu2
ѵ|ȘdRv"vxXD"dDv{DODHD.G+:/`k01Z5tdh	W.P%`qDM {I^8ؕ
+=o{Y"pݛvۃeuOy͆uCz|)5lп1Sm16#5/dT~Od,AB7$Hp
`\B&$9y\Q.xBBzpQ6\ָ,Wx랒|^#Eʋ`\h\<	{q,9.L.,/N!!0İU/7lNcA"ŵ>W SF^RLY攦&/E#}4iahxh@{*/PC+l/	HNήCv{D2>0^Gnbm>\u-:}~mgAu1nIh:h]yr&Zﰹw[Էz)Y,yЭn87oS/))abѹn]SPT0
Z9Wp<pyZP/v;
)[Kx).?tr	/Rs	/<
)k%Mo,<^k"=VsE7֫%.@] >1%1wWHU骢ZG4kU[*Z_9@-DK9狈 󡩉y_}EOF\PK  
  PK    A             5   org/bouncycastle/jcajce/spec/SkeinParameterSpec.classT[OAۖu+((m+*uVZHdXք2i+,<;9sn/ Qf=z|5Чf۵Wd2JXِmXa=jX39k!߂Q.ghX(r@ťJip)d+b!7˙Y,0Kټk>Kr?Jz-s[Gr^#!޴E!BZD k|[Sܱ}؞ˠIc}ݱ[O:ܭ&[¢hVfIGXɌS}>LfʨyC)rߡ8ժuZG$,efGaǢOyb"guِvLw)kݦjNA=h|N]7i!E)4)RIbFY*ಂ+
*ຂ1$#8rxyP?fv[xat[?e7:\bs;'ҔxLC&Li
1p/ UL!"Yi=U3#Pf'mM
eiL}_K@~BA/]E/oB	GB8NX
$|&җ@J6*}J.@29H9%>ը%E=ML&E5z_1MXCQ},|Gqox=,HgZgCՉc%ޗ<(7b󈆦H|ؼPKDBu6    PK    A             5   org/bouncycastle/jcajce/spec/TLSKeyMaterialSpec.classmR[oAt-zvMcB	5]B4<4vly?xf٪d;;d? `aVFvՇp7
0/5:;^-9::N!&RIl{桐3d"p*rYĖ}('+.cp46{;NmEtpex$Mi7^ǃP ^ezySilB\aNl>ł߳ztw+/LLC5[gm:gNtepCên1ze#e5tQVMi$t,#CG*
S2yC+cжwBo{2ܝ
lRo,O$Ny|
%ₒyRrTO#ܥ'5i&Ej|i4hќcۨ0J3<cGp'\%۟cJTn|XbgnsK;t7PK   ,  PK    A             E   org/bouncycastle/jcajce/spec/TLSRSAPremasterSecretParameterSpec.classUPMK@}ƦѦxOb:Ą$[6[ɋ(q:0_3
glٕ?]:sw# d8M"dL>N`A
N6r^fjȑM56kNƕ$
M1/-Uqi+NmW
807	NC13ᒑ!"I[?8s}|a\|"~G+}͸~PK    Q  PK    A             9   org/bouncycastle/jcajce/spec/UserKeyingMaterialSpec.classmJ@-mګ[wm*dKZ"
E7]M!&"ϤM
;gf	G^OFdʒReh,3ws\
/%2s/fhQvRo_X.}ۺRϬH$tԊP0!Ip5
_G'-WpWEꁋ$v<k<QvzҮaMa]ÆMh*QPYZ*la[lWG;4"S-@?/!Oe9R9_>@-s=s7tLۿNo2ҲAK/#PKvNR    PK    A             3   org/bouncycastle/jcajce/spec/XDHParameterSpec.classS]OA=S(EP(XPZl(XhRCaw\.u%_-$R%@Mν{??~ȡB_JqdjoɒL\>]`)浚CXo;bomlJ%^j
tH
RX-側-*ͥm[.fc[Ho.jHd*tT\KeeH2uA]^VMOK}z­̐v\SrRyݳ2+ke^Y	%IIr]%iX)u͞꼪v{v5򜃕cJ0cIH.&(TU0`XALQjfVD%WOz0L~Av*N2'ΩT1,.8 zUDpEE?UMWU5!$H LHE0\L1l~87s\uz	%Ǡ_rd[vÏ+<g|$9IbA}". q(G ~Hv%p;eM,|L4pZȣWlNGx9BsG6wbcbMp!b
c1J8H#1gPKe:  V  PK
      A                org/bouncycastle/jcajce/util/PK    A             ;   org/bouncycastle/jcajce/util/AlgorithmParametersUtils.classKsA#K6Kļ|cf	+U`堂IIKN2ⲛZTD>~ ?eٳ{ ,9i1$Lʐ4j9]CBnĐg2!
)CCt)*az[]	ZE@`XSnzo'
=.սfG8t<I=CW؝LcxkR¶3pxOz=dKJQz鉩Qu{JQ/8/]|I22aA!aQÒêY?!CoBQ!آlVm*挱o.i,X֑$b7#ʻi`p[*:pOMj:6!5+jNjQө.nH|u#N85∩VYlE0
w(@m]/ůخè_֑
yO7kXFɕHI5fpZ%oxΑ!
>!	2 PKҌ#	    PK    A             6   org/bouncycastle/jcajce/util/AnnotatedPrivateKey.classUkSV=lbWi'5iCC
yABms-+FDH-3O2hf:Nw%ńfVw=g/ QI%UT@aά@07X_1*tU]`@se;1lK &N<ͶiX[ץIa;*9bW
gmmc:SVf2@Β]ݐDKk@ߚ-@ܔySZҺl
tNwƦtt7qݪ;_M^x+~ي¦,]KvҶ4YsL=uM|=z"ɝ{Q5êc[n>^q[vxaȒfCGp<DpJ Qh˛8Y8h9XHL7eag)o8O?J:oluHͽT;̧n,z}4.]RGDS9?C_O)ڦQ꠼ϘýC!UWU|~dTCHEQENE Uٌ	cBK*ΰ	㲊04#6?Dq?Yn)D1(ވ<ff,psl={9@#-gUuW$evTTB{s7i`GxT|Kh5J
}2;ɾC1]{H9e2}=B@[k>N_?Pva!o/oLQg9â̲G
#ǜ}cLóPԇ>zx6_<$㻸Od-bZٹA*T=Ƭ0C
<xc) Nٿt3
xK7UU Fh9xƭ	$YkBihx4ktPK$    PK    A             1   org/bouncycastle/jcajce/util/BCJcaJceHelper.class}]KAu͏LMԂb	+qEe]JB)!6g;9pf>_ `/A\%X95sFj_۽6Av%NL:sR'=۠-=4pӢzYsa]ѿտ9^#h߯RQU*)ʕfsw-5hӱͮQ[
FZC
+XsQ$U*$6T#{mAo:_
kY%YOp22ɮTDi2E'?8yEng]J2FBBA<*e|^:ۏPK7e    PK    A             6   org/bouncycastle/jcajce/util/DefaultJcaJceHelper.classk[G+ȴ#UE@!Yl
%VӾO_C$lv3gݙ3g 񛁶Ě[c
Ze
gIኼ{_:~5ߌ_MKO
?{dҒ4}Qj#H޴-',

tBv1ng@8#E.8K
YʸRC|WPB
IagpUǒԮL\)Ig?(rU8B>q_RO8±kKl3'%-z@T/{Vrp?*:emU;ݱde֩QIxgPÔj@mjǞ
?.R%+#D!X/hĢkjmp~(`$\X.MeQ܎i_0wk k.-rW$VisW<INN&4J17
%*[sܲĖ%͒o)J9| sE5Ğ0pIS00|0pyCFF.3\a0^owiŖw#%xkH;l5Yee~<ؤkAb\nElxN4H<6hS:T^ߟ7 ҙBˊ_A[RǨqei1`t,*̲2+$y̪2)e)X5e(Tgʬ+\WǇฎ/9>ก
aqL"qlrF
Sr܅1-|1=9B~p,R-4۱A+ct+;Z^?k{%+}
zsm'x6,Ā_`;c@WY<#X}HFuB݄y5>;x~?ƀ"ubouE
sZ#o]'$QOڅoPKA*0  
  PK    A             G   org/bouncycastle/jcajce/util/ECKeyUtil$ECPublicKeyWithCompression.classVisT=jTUt'ZӦ.jRZӅui6HtU*KFK\vʾ%e@foPn=stӹW{ߕ <Fh`u|/);.'DZ'3`4q9ZN@#il<#
Y\8L2'twC*PL;")cY҆@&
@z~x<&546CS4[~&V`S}@8i0t3C)Su(چ3-=bTCcҤ}lLd_Rқ0LT\/,R7|KJZASAgmV̸tk'Cf]X7u`zBy;8nuO5lJK{MŞ#ePIV1y
>?<L\]zn7ZÞ%IӘ4^, ΑoeĶ@9JG\%1]㕥S_2u2Y9+ة1p&Vp8aَS|yE벘)^XacVHOCxDQ;b	%&[`@@\CS`/ٿի`SIӛKg!vW{B/|(BIИ&&B;V,YŬ&V dږ{=c]
@qϥ.\ƗLͷnV[OѪJ;)αso?
JrG[m58! a+C4gP°!S6ⴆh؄g4l~
T0oP!54Y
iXkXkЇ*E]SэQB0qU!*Ą\a$C^E^\b̐exIQ\gTc81*NGvyL*VkǑ^6|=M
c^0w,bn(N!(a%;	?vν?#SXEB|<<

 (!տJx}+i8FfYOlv	]DzwMsݰj7~gY|^%|8Y+%|hk$2OKd%3Ox޸r9
t-ȏ}wMե{	4ܥZ
{G)pDP9o4f]R@)Aur:KuE<K><EWPK[+    PK    A             ,   org/bouncycastle/jcajce/util/ECKeyUtil.classJ0xjk {dN܅(FekJMIB0_L`kxrEh!aC,p}}R<<l.a%ORyr.g))ӹ&+Q7p{\TiŲJjN*~󰳮l7,IQ q~R2a	1\&-07ןFXzi=,׽n;,?a!PKz>    PK    A             /   org/bouncycastle/jcajce/util/JcaJceHelper.class[S@O 	 ByT.U  <8(xAЎesL&͖_?tRK&gϞ \"Sx{T)0*P %S`'`{R*	Ebf7m)vCp|8BZnJTS%bD3	D`@\"&t|O'b	cIMq&[EKX5_Y8ELrev嬌Rn6(;]plł4~ͱv|5^Jrjƥ7Jiwm5ypY<͕眅9N2GsvU6ܱaʆiflaΆ6ܳIE%iIAq-x_""72 `'jQֲa'V{}MzOZJ<.'tQF^s{h7A#۽'Q߯ոѧA9Īx_\IH4HC8<<RaB6[fC%Cv
6}/k`І Oך/H"ݓaC`	xja`nn0l1Xմ6PKɟ    PK    A             .   org/bouncycastle/jcajce/util/JcaJceUtils.classTVF`I.I^Ma	
41`bm*ؒ#	ߐ+m7uul-~سќs?0_(U0
PpIeW-	X|C`,0l/P ]Z-SI|vF+.19yS37h^´R]"25ۍ$SDQ$}&/`nN#,F[HUeO׫kMBBKTXLѪVw\JǍjUy;o(Sw6(nBg薣
K&kr˱hݰqUc&!-m|;Dv'yPB7}qӲͶixtó:1IV. ]
m1̒EjXڣ{2v;M}Vtw mZT?kzzqe#593UXX~N%[6]m;U^=;Y3i,>QڪV5*Wo;z1q	2neLHHɘ1-cF%^__p1_=~5Kܵ*/NGipAG4Q>!*1PB\>9쩣<rg}sg9J?0{>pUG>O0+34k8\rEmjxy
bME*Qp_*ZP/Qs|#fi49|-4i.gYe\H1K0wF,MGK]o8&5JDPw8
*A!mz%1&OVA'|O yb?01770nxb%%bO4a4:~a51NM=꿇yU$52zX@$B%	+HbD=C$`8 JpE/PKsh  U  PK    A             5   org/bouncycastle/jcajce/util/MessageDigestUtils.classV	{V=i<n%-P(SW&MHC2xICbu,[#
#M5
t/;-ҍ%ui4I
mKʾÿާ[c+4蜣{zz^' .x.p;Z6\&!p!QSK[GW`lx4]@l9k4mĎTwGW&
9vtvMd}#)J#w::6GĦ
VfvuP׮uoyT5YeH6E$W+KT$1LɮC*3
]p͠R)v*'c[(W7a9T,,7O>SVӜ]:<ASH=[hڡl,XE(h7F"B:M#iSD4;?Or:j;rU>&츦#\UkH2*Q3eɩW%pL`*N_P)Zn:J
V-OZe-(8b;y~QJ`;.ӟܲ^wIH˸+qL?p,N/3vSu6qQ|@jHš5qe\P)Jelw[\WpY|rh	~`3ٳO)M|c`&&OX+4TXXx'ݸŠ`+$n`]ө΅[1v=>3m3ҙt?&y$m?g^˞=mdK2'sdΪ.W͂{ɡR6VKV1/Y[q8W6*M?];TUq}*ޫbkU|PŘ0UȩȫT\bBbRCu;l+-㡳Q=ECl[NŧT1⒨3q+:vmKX^uh]rƥq/\q]wuĪ]֐'6漼9XbXKS9fj.MI`؆a'.4ûFFv3aC!>3|a(2Cܒ:\ո=w$Ji$я&g$%
5|wka>`xd÷5|1<(cp{G;i$Sq']	A&p 'ffy3	ƓO5 g8p\~/OH-MV
T8O$~t_D߆i
	Ij*t]>=0/Voe8}tqwcUހS8|t9?o>?1a=Iy
EB*e^0j*C^
GΧ
(boupMiãs^g^'zE_QED=kuBODI9^Г#%^ωM3]eU]QQQGsz^_Q?ϏD#U]Ӻ43xz]fY0ύ3y\g6:83/ԙo3W:Sg5\643|uPKA17    PK    A             4   org/bouncycastle/jcajce/util/NamedJcaJceHelper.classyWUƟ@ilP(ݐ.ւmJE0MILݺ=zdHf{!9'o.CϿ
~g)˶܋!t7\>ˍ'
Hr;ᦜUL&}8wEÍeD-8d$hڞR&B<e)äT.qQ{;ax-
'x2Z){qö2RWyn4p6M%ηawbw1}a晌+~FVӳ+Y0h*Yܜ
7+fq
ۤwM+ƪ';_[^&MГʈ27<X: 3cD'Lu:Ŀ#-m '|e."Y3^\	Vh`\ʒ<̘tv9C
۲U5kܚn:۰#0*k 64r:NǈF-;[ Um=)'/3i\ϺVB5Y_ቴX]hPN{E33`8p0{:2c8p$C7CC/CC?)a4Y\#C+&~I6>WIPs5UȐr
eTHp:A3H_,i-$evA[M[=JuO{vs=Ho{J
\AC`ߐDƜjV\Sj-Qk-5(o~f5UP㦲K)'Y?}
\5]ZfT*ZkLJE*q6BFq¨C(V",`pKq,VDH!%BZDpD4b!d5},pk#a/j4\.
ah&)aoh75-
Wv;SQ~M%қ:S-bk^]+g;
G?a8eczÝ?/y'zD=F0IpV+	(1xR#뱨ߓ;p]/w)72(eD2\ô;2JGtH>DD?*TMe-XRȪ߅Gg2)e8óJZ/zQ~+v	_&hC
 ~pPK#c=    PK    A             6   org/bouncycastle/jcajce/util/PrivateKeyAnnotator.class]KAks#+2aN @FXgCve$Q̶d,9s9=g7 #\ʌ3Q!XSTHwM԰)oe
SǶe9Ch>9nh87{&2&mv4\֕՛2"d%H{i;F%u5D54h4	$PRAcDGRu4vMČ_1?gzNRfgRe.(LFt,Ǌ6t$#5e	"N.Q+oW2Dl>@,93Yy=;D..`k|?s'PK6|    PK    A             7   org/bouncycastle/jcajce/util/ProviderJcaJceHelper.classSFǿ

Mhh  H94
.nIBآ2Ž3ڙvGuֲxF־v߾7ֿEACohYAU2݆u&b)tɰnIp{[֝3(8Pq	NzLD9i:e=aF<
FۦA?'u\9-LETv܌SNd1S7ef
\s<79Or`qYp{q0ޝ[t\X
mo3"
3#k%͉݊1Kwb=1XGk]t-[1mqe4A(?aL'mj,etPff5;?:nSdw|-mvUvx=,e#{o"Y#^\'!Q,%1j28	䩉#nxrjs6kK;)mJe)ru|,J|
	Ѩi<:*Q*
옶ZF3Nkjp-	mg
>iMٰZ3)ifwf`8p0`f8p$)!>~3g4Ay9Uӹ
}@ıiC57i[2<[\M 
&˗C5Rw `
o+ əZ$
5IlUZl&$ފX.B:[jVxPOu!WnVPsqG##x}60maXebP6#N@{Yک޶szPNN<׍n9.l?F8xe=HB~B~
׮mN`0߂]PZЎy^]aapan&.̪0/&)%LJ0/6csȨ8G^Rq* *^V0^Q1WU\k**ucbo*&)b(hKEBirMw`ŪVhdvվ?^_ć^$yse~ݿyg1i3%aZT n }?܈ ?O{?mx6 ãG~XEvI9$'Qy< W2<?#߃ s?܄~tvq
"{p+ 7X
?ᇀPK7    PK    A             -   org/bouncycastle/jcajce/util/SpecUtil$1.classSmOA~E^fU@"VV1JC01)JRvWwݵ"2V@.ݙgyv2_ V4$C̿g}xN!YslG@2\RwI2py-
׼Eԑ2[.cM=:OB#2}M)EĐCfRt'ڳҖ.: lKaU\'oɠF0âVxbO0r)ՉR1`X:W\L:!nj3
4d4\0aX=5j)fpzO/Ņ'J֢l*j
m5]8I==Gk0g 
7
\¼Q2#g E	IbK:#S51Z)@ado뇤xXW'IE\n[^w%)w2^j8ni`Eƈ;ZUlE]WX?aJբrUOP9\%kQy1<%]<Qe|WPK(1  I  PK    A             -   org/bouncycastle/jcajce/util/SpecUtil$2.classSkOA=".[
H`bR"I/$&l6&?x6ٙ{{;~	`H0/\U/5ꄒB(ʕ徳#պǣpm{a)NР
vwɻHƞm>C7>Oa1}wI	]oon#/]t@Ԗ^yK*fBǮ_)OMBzyOrKCR]ں>3`H60b mກQcV}BLO	/gKB
R(WJ^cXɟ/|e:[S;>zzn*&Ĝ;a ZH"gasLOb&&`"xhb
Ep|^{b${wIwig8I5bK_aa37ЋQ8fiձ2Q4tC,T%Jgq>G>xt  PKt1  ?  PK    A             +   org/bouncycastle/jcajce/util/SpecUtil.classOAǿKK=NZ
TmE\1h&~44̱ݜ\ݖh|2UjpΏ?~B!Ufns]!=Cu`<uapgۦg\6tsEF1R6btvpDaR|à0C=/-?(b(Lf3udRl<1 '<O+AG'܎'{\zfH`XWݼ4XCF5

453oe|]B~yq|#JlZ߶Cm^通<-.o/Lδi`H9}TutUt+
zx/}_qDeK(%IWiπo6Kr0po(B~Ń_qyG1,=1?ϛyo=I+$7Sh+MHxWIPK!V    PK
      A                org/bouncycastle/jce/PK    A             4   org/bouncycastle/jce/ECGOST3410NamedCurveTable.classTmOP~.c\(EA
L@$l.d!|*ݵKtw~?ůIjR69ss|
`dj=1t9#2wj,zkW$'_e8^7F\%Vz\7rJa1p*	Qf3L5=(Mw1kCKT{pZtUi?]YGY0̪1KFVL[G3`+8HF!VژL6aXtamr	gH
sץ9NE&Ti`u4J+W9z98q\gH$Ѭ@2s'-Yߡt\Smbk/+k
[Ol>R_Q/Uz3![/zѷ;Ԧmʺwut)ណ1#:xp5#
HjĸRJnaLRi+D&=i_1+a&BP50̑Z@<}̧Ѕn]6FBߐ86a`f#:VXn~gdI^ yNubBI5O|$&G-Nٛ{òLC PKжl  3  PK    A             8   org/bouncycastle/jce/ECKeyUtil$UnexpectedException.class}QKO@)ZxЖCM`})ZR*+M|$($b$vgv~|8.C$:eg
֐q/2.s[bD2~4${Iz$$7ŤAWHJzUrH::4%:uuY@fJ*[ߪch/53Q2&+0e5h晔"ce"-yI[`dIMZMZ:Pu/hbm?zly|FQs`=
&VPK)0    PK    A             $   org/bouncycastle/jce/ECKeyUtil.classXy\CMZKQ@phTQXrFDcaX,q{Mݦ.JzMnhmߛYvǽXWw~]: mW
T	XZ[wcj;w䲛tCoP
tnтhƨ iר1YvMwpt$]Q,eR5+U)1X>Y5dS-٘eNvmݲ!,Z5gb# 9i;PZa[dd/v1knt le4v	Q[1T͝86WMGuY,GyHjb+|N3ja[sɖf
jr}y"9K;Af\qBR|4HĴlm9n:OZMCXX1B>l BJ
&5Lh-`Mf*h[SGL;]D55F]jLצ˗`LOͳ+q4ƚLTNшw24#xt{ӮlL+1cW|Jh;t
R.
QIXELRX&u[\i/ZmҝE+{JʑSj1f
ؚ_4×f뿯B08bs]nlb~⒦nP792jIIU_þN 5v/IyLcT@>F)-6T<TP2.Rڥgdn]nsA<c}V2_qfg%횈+lӽO"6^&EԊQ/b"h,E
".F;DKD67-f{D.
=6{r-Y'U_ەZJYTq_
rLK%Ԫ%lHdX7n$Y[[ ?%Tٖg/uܧYCAr吷oE4,t	I~c>y'Cq*[1_L^dxgJnK;DV9߱?V9P,-skġ:+^oh\yk,D'Y\{1v_ˢ[:z-wB	`5ڟD/%=oASvQkkԳ-In}+v柭;"qx
dX*e260\ǰ2bLJb3LXS21GXƵgX	ո,aeeBLƕqnq5NB\F%$c9,xx*/<ktg0LYܻK><[F'aV(Wx~%F	x B	\xû%=cHHcx ^&aa/pod_-x!:0a8+^zKfaoex1K6J81L3`8'VK!	#H2HP*	khwV2
w{
P?H5=Ya{/D?A[QO*.|W9C";VQ+l}s;DsYއ2ކ~}C80GW/I[7%IxE~S?Rhc;9?fކ|F,C$sW65&iQ||]~Z,Of's1'I>g9M@ŭ&Rf8mf1L9FfJ;t
~-~3&3
s3u!q@p(\XcuoKq'Œ^,q	qCD/wYF|0;+.{ )Hq_AS2_n̹+eq$K|bI!au_p/?TL|QF*UG PK-p#  /  PK    A             ,   org/bouncycastle/jce/ECNamedCurveTable.classS[OQݲtY ZEDvA⅖
U
$5xZX//11|A"qζj%&gf7~3˘e$S@>bPTTq\q{'C"1krML_#BTMMl-.*q2-.2Tr8_b[,hy+c'|=]yY%*-p[*j=G,3%1KUް(rӪx#Dav[slFX
X>Du@lI"=ieQ2mfQZ]+6R(BS׼˥Jť;qm*UtTqLEn:3JBZ`furo2
hf=Zo}R	J<
K'v+᫢a_U[gju_½#GtDѠ":9'p^G3uR`@GIR:T:0(4.J1NcRЋa).KqEkR\pFBHH.i8)-R"o@}&(`i3tk#HG bhP=]<%M(lfy63̓;7DWtԝsB:lkgC۸GgN$G<
@dN ~WEOFEb
d5AQ{DR4z V`irh66mj|C7F᷈%OyOZ1(lm^PK7"  :  PK    A             &   org/bouncycastle/jce/ECPointUtil.classT]OP~JQ/c v(	&DфcJw];n;To?{:0h0yޏǯ{ R 1m:MȻ2Ubh[)b8vc>CwN/5L̊ɭ|Óc
c7[^>ᛎX5)`3Y]ֶ q~MЖ3A	q>,lYf7LŭrY-hN6j׊^4Vv箦{RihߴH)YRorS8q҂*
kE:mM+K$J/ᜄ.H(ᒄ5L$86Y1ΒV:zBADLMN}NH5v(NB⅚ռzoR?.0a)8
`LA)uSLȸIHHʈ!hn-QL1ܦ+ C7
4Yn={=O|xŉ~&$Ю,#>;B=F[wD!ئ}C{5G<c;H>`^{$v19lO%éd(u"L>Q=A}$$D1+OC
S#4vj%F]PK=fH    PK    A             3   org/bouncycastle/jce/MultiCertStoreParameters.classuQMKA~f67R3
\Ax5
miԡ :Q;F|3̼8!C,a=u\
B1eH2Cv,T^/нr&΃åh"\pBO͸Ϳ8s/{c>
"ߝTI'WTF}~tiJoyh<ɻt/ʭv	uGOWd B	0i䱧CBUUd78&dO2)(Q<DAٴ;KʱAtr^aw9j+b,ܥ|&:]{%\LPK<hLX  [  PK    A             5   org/bouncycastle/jce/PKCS10CertificationRequest.classZ	|T?余@H8lN@:ـDB $5Gę	KZݱm-jmQ'b7}ovm*"|͛~U{=s9wyO{	 d/E2a@]2aD/CYpBVݛƼݛ̖FTVTx<UuL^M]C}cU
[kϮg7 }݀M-Emwt6wnnoh%o[zr	wo\֒BQ(VG^_vz5#MnjKw_]}Ռ>D%Z*k=aRrٱ
\oN:?BC]wvֲ^ļ$;Ealm$
6Y[6֚ڵfT^8e5]IL5Y6
M]OMR8{k+Br\vV5QZjjՃSdaZ!~mmn:s1EBF
mδ =m.RIKsY8/N6<WZc]Iˠ-ss$2W=uZuR2h\ǜ+I̕d[rpQVS#Quj;DCatH<􎎪A mKu(E5WFݾPWG>mwzA2n\Bf`/z=}}=Yx(I>E=CDFy"LpppQ}&O<7ٞcSx)<ma)2oRPrYBMAcS50oo84HTm8{X
aoTѬQ2UJB؜'2D1P;զgU쳨dr
FޠT#0"}Q5-$Q<ɳ"pH
>ku}
=\=U_R=7"^rz=		gPkfi[?4HyPܒ{z,#52%
2b1Z}8LajؿBQ{[U[7
W[˒@@c#j0jZF#e0?9
SQ৲6ZҊ*9Rm5+Reh3hSz!JETLOPȴyB}cd[l	&
1\=aAWZu.2)#f	SaX*mc	"rIt%6RW6xnCKռ(LE{$W~89w,px(jA E:ٚ-wʬ!~C=+fy(<\'4y#рZkj6126ْR1zt+$UtkR3^?gpB2{K!K2	EOK! %~>2
C-ZԵR<A$ZoRm2znK|^.5!kV>YS/fFͦ[T
zԳB2mYj4Q4ui9_iH5IAo@UwQT-5On`-G'Hע#=BqCQ6,:#aHnuzlTҾ}3wI8ӇvF6z~Ylciƴ9EC)yվ@>"g.%	{D{\K&s)Gc^4DSY
ϑp7B9cCt/S`}H!e+C2dX("˰D2\,[bp%2a2Lr*dJj<2ZdA2a24ɰN2\*.a2lEVd,.6!C]2t#2'C~.!$SwK	+$x.	>$%wKQ	>&=|\OHI		>-|FJ%xXHI`\		NH|NK'%xR/w``%#y@$<qTE
_FܸH!D{<iޤRTڑ|Iή畮Ğ*npgI[>o56OY5L^,>aht4 [:?&TSXIaG3HTt;i~d{k/<_kIA{T=C+3MF2[5jӮ*Æˬd!vh:k`bCieb²n7gk:iek5>U>mLUm3O`{="Ҍ3||KLt<!4Ou5i}gQUΌn-/ /pp2Эy2[O|ŵ6鶩trlݔ\X&eºYg3tIT//w39Fsy4TsUwAv
pa>`{|C*^a}~nbx#obx3-oax+p+çN3<Ua-o3|ˑu
w*=R"p*E?`(<
gb:ܥ!0nU
Q8;ѫGס8*_}
 ~81r#
DހAF1OqgN0#
\Q1AC
0G8Sz|=nP`oRF&ofxÛY0f|́aہ-2dS?	dx!ã܂w:p+ ç>Y؁` Q>p؉f(qv;ncx'w0!0b<pډ)'^P_u
`8K_9q%>{9uWF/9'N2<e1|Yo0N:y_O8q->&k9q~Ή+O13?tF[N川ʖ[GNlc6?2Nlo2|t6	_a1/07`3Ërb7҃?*<_F>BVKhҷU
>?8ͿtzGe
d g|xiF{yFm!h Q =[&} &$Xt˸bq mNCs=4Ob il('qI\>P5.V$|H s /sǰTDvؒ|Bk!H!SV26B4JW+ E@cYXT71`b16wHLo5&_bL>&^k~V}EUɨzwќR)p&)&h}7.4,.i\t4`NC[,^Yi(S	Jf*&.NQ(ԊEkˏAcL\̓Ɛip4V*Oirh@1!.+˒ӠЪ.mrrW΄ =Õ.G٣bY+b1(nr$
ȗ
3.Ͷq刋qqcaJbX	eT)[%eV;eK	KX%eVj$87/oqDnY$I%6y5R^HU%`\;n&ZY&~Hs3mmxqsxA7.zƮ)4>!j+xHkXbp[OAzKrHP1]'&q@!^<.jR@1f,hZ蛱FLOnnZrܲ,-nn9
nN	_JI98Sdg%RTC+hbσi6py[VFյ镮3RXY b*Jޠho )+&2ϒ&#+[w
WɲJ]q$UN&YI&YmrI.-qAmKv)Qްg!*=m%s=i IU\0yYVIk!zvye:ؗ:JJzfoaJSH䳔ljo8)E[.l?M#]qQyJRW1x	FYGk*.OWI*?L.UPA
Qj
YDlp%GxgZqFTz\J-ז[GcbV\twuK46!{֝<^&|fɀgTѣܘ!c[eqv<&&(1<oRI&UH0)QiDmR1߳pKC˘GМvR]Ped
ŦGbw[bNb=n|tEN
:VK6y~ie𔘐Li%
bB6|+qQL8LbXNXl%"2\+1J,KLwsL_VLLV՘kg-
}3z:I̎YWMbaϙĬ(0	GLĜgE1Qdbbo,O1<c&G+gX$ՄSMBlNJl3ILӧI{A㽘{^DSPLe(^&QD2/Xd]b_YJNP9XP	ڱ'Ĩ _hϳ,E+W,Keq-%M,ބjx^Fs[G裝܊|w(]|OʨGAhX" PK1rzT  3  PK    A             %   org/bouncycastle/jce/PKCS12Util.classVi[W~(1"iŠ$M05ԔDcK6#:F{ni[\hR>ss?w NqD@m/3KO\B9Cv}g8po(/FđIUJJ:![jdLCQMkS''uP֤ 6nhЬa3eixPo"i4K5M9#`e\UGUT-R\zqԬi[RD\&*@U-U
b8,juWɰ%A
L+GzHs?g>ْhV,JQiĭ),j5"'qݔ<#{5*j;.I.^ǦTZ"Z&eR^.ĸj
XokekA:zm^$-keQ!٧̀XIe>ToO(M쨨Ȧ<R
vÌ{(JFSVB)
uN&4dwVELmZJ,P:A~fisJ[>aP>j+f[
RdbVʄCz&6je)EFN]Z%iC;q241dʰaa?C2b8p#`ͫ覢
W47xKyXI;fl*&eh/䱄J}55Mm0XWu^^nDnM.T%V*2:VGfI{tc
VWL=FUR	-*[T%M'xv8%.>lbC-tdOt׬HAVLy<!RǤ@TjHǴK-ABT. ^Z4H"9prpI؂a	>"J#6	n$l6sXQ	͸CB	wq%l=|&KX1	H؉q	rń$i8s"z0+8΋sxJD "`pHqxË"D -,`FDIω8D19<Y!>sxBD[0G8<<NQ8''=_NkZrnHN8CGzbZC@cC{]	.2fhpiclVZp`%iPg},çwCs><bU17.,:* {fS
w<Nܒ1}Mybeʣ'?kxUx#W#L9,3KT8CK1zCA0xˢ쉼d!Y#'۳0|<N:@3)1>WeEt,wiBz-fһ:PK<  %
  PK    A             (   org/bouncycastle/jce/PrincipalUtil.classTRA=m`Y&E.
*h,Ӳ,KN(WVeٳ$@"HR9}Nd~F=Cو3	Wymۍ}+ИvH˵A:_س2-;-X3S	ǗI¶$	X)<symv\0ܴScg}!sM$fm,(j-%tIEO
	eXM/9
d10c	:]!>Fʣ<uB)gm+W]B
C؎Y;)2@gZ/=R989qpr\hhbh7"8O*g:Yu_#F<ıǨQ	Ij4)
̕6vrf!sjts%*!-{˱4T&)v|92`:4ThT܈ꨃ^jDtbLqejƤz@C27p16ya@yx̌A<0G&-'h 0%-kko8T1D:SZ2EԎakh }TˋѱC<?F/1q/x/x?CnR&u`8E+y>o9'ǋy PKWo    PK    A             '   org/bouncycastle/jce/X509KeyUsage.classu]O0_@	lckmnv1&Pm&YqP zO	IQsF:>v|/Psӿ_ĺn6ul-i嚉ɡJ~Kp۴lX[f_,Ud(]Sz*JDO1U'YKKR*IIfn$;B1jskqHE4f/udLuU"~#)ل'Iz2S9 G±qNq#J?,
>9x7TBi瘥HZTp#1+ݗLJP8P@t%w
qC9xĞÓF9jK
>kKD:c{p|{wPK	ox    PK    A             8   org/bouncycastle/jce/X509LDAPCertStoreParameters$1.class1
0Fh5U{TQXpqMO(x5Ā'<_ f1dKžjHܺZTfCI4F8v,rR:y@3L'f_Lp'rޓF"xtNt5_PKst      PK    A             >   org/bouncycastle/jce/X509LDAPCertStoreParameters$Builder.class	| ;IAeC"I&I`!"Pv2
n٥bO{iO{ZZ֞Zjϡ).9zϧϾ7,=bo{o߼7_ FxUkd/$<n2E2tpwpom21(HP\S{n
GÉ%2t4jV	#n4;Sr͈'XSzڭD<ܓĠt'{=]j:޲^^kY
yZViZ<.Xӱt,XӱcAOǂ= Xӱc!oc!OBkLo47<جFKz_?k2bl}cΰ6BL5w[Ei94!'H/TMLu)?M
n]a`"<չ.sTײ$j4ڻ$ٓGzgaz=LϿMԳSfi7
)ң?%?L5B-*kzc{HBd爈MVitD"Fi%Wĭ J05}l^mpN aĜPlV7Nu
yR53=59TA([A<UTESQi11
ζSL29N
!dQ'Oc#ROB},%j]3#0{gw.n6olwq
Aam`xzXۈHWre`{i$,3:
?=60٘23KYT@GM/w5Ub]ޟdFv:.M-F
@.d~"U1)̵cV$Aݪ`lgQ0;2
8sY0a(*h<br3S`XIζ^l=4[R27Ӯ7Z	&$ޫ2F>x>\Q:3߅J0o?5=媉79_ q^7`"|&܂Ҋ҆Ҏ26Q:Qt܉e1(܇EGE1PQPVDPVDQLQ@ơ|ioZx[(FwQ}gQ~e=Q~c
(?A)(Q~sP^D/Q~kߠFل;ߣT
k$?^1ݷm^uDhiwX
.z"T'
pا"Yܗr_>۸O}>[G>=½]}9^Op_^K/㾀{;Io~V aO@V
y:H嬴}7n-xndπ1W\R,8*T-8*{UeU؂ͪ```\eU)=yGO;IU)รCr^V1p􈣇=>|Gw9MU.wocl"}_b FM>{`|8-u|O]C4p>@]#4pK{]	女. 
tU4>K\S4p>M\Q8.I8.
wO|NGi|.C4p>LG\4pc.>i`$i`h`h_8 ϪcvƆGfgmxydvI"̎`0aS6
]1;b\flhdv̆00bf{ll
̶mfRFxjWaMh1ac.3dO#E@ƗD<x\2>(H{E|3od2,xo "B[E'" 3"JD\IgE\EE|#q5q
q-X%S"N'D\GƗE<x&q8HD""n$-"n"="n&]"EDB~/
Hײ@J˩PK7n    PK    A             6   org/bouncycastle/jce/X509LDAPCertStoreParameters.class|O,Y=B	q[v"[gc08!ĄrXAHF#V:(t@B[ZΡЕB
3{]|Γdｻw޻'$NqRHPQsˀJVEAZoLGFޛN'Ù.h#o#i;ߠ]m|Z$RMNΙ.ppzn950B9[:r,X1c`!B9Nv,X1c`aO9tM4f&fy##jѾmlLjѬUћI&M/h">M'pTFONZg^:yqO*Zy	~z*IoyZhnɰ7rg1\ωH9)l[F"zuQsGb883LR6Mc=ZQ.Rk3ZgT~
ܦ{sLbL=64fBs[&v,:U_r^Lϔ:(/'0kU_[$w+KZ,h!Ma):=roŊX=ĳe-آnVZ<gmL
=:6Sgn6>y=YhrZNSk.ffnZ'U)[ [n4݀Iyfí6&iAgq5kDrHOF؆5zr .;d,/3S_*k;`Lo^b6p!߶^='0dC|Z֓	(nT6xV
슎4C8W	ƦcS46X7
.Dr[p8GvFT:G9Fh]:=N
o9{R7AuA^Kn%<4k=<zCoT=8yT28y[g~_98g7A;to w[<^m[NXe9Zʫ:sj(No.Szڗq'O^ @@
,zJ`Xk>H`pp=	
DOqut{&`)O+hrΥPOt|@ʁ@P	T@
P@f9\l`08X 4Ebh@+,Ji7}a#G>|x|
4Q  _ <	|	x
x2|@u=|~w|t}.=?~)<3/_~
-;?^ ^+7?
/Xq˝ WLLKt~a뵱˴Ϋc7OAo'b].6+J]-O2R=Rzԛ(f;zf.uԵRH#5$+[jvokbHts.gZ
Q
B@Wz!\u(^`b腆B:Ƞ#f@[:
tj!h!KQ	]jjhUvC@;Q
4enCCcFrCAW]i7t!JkzAGtkIZC:7DΣwe{xr|;6SkYkAri}vG=Oc{]0m8b2%lKLl1b>e5lTa#l~lNlOcl6{!nŉDumiV6mmi`k֘miK`l^L"3L<l9r>[ƶ̴`6vl"> a1nX7[iw-5,%j<GM	 ۃ=i;a=nڅ6m=\G7!*.ڃ$60Tw5yhyw+kaKjZ۲KlŬ݋qw#\ao)Z0W9eW%vUlW^b:`W']RgWvUmWUvUcWv+]Ͱr*F*+]ԮQ:hW']֣2\n%oTQճ*猶'OC4sTKAq

WGJ>mܘms2>h_[*V^
_OXFe|Ҋ/UƧx*dCXXeeśq_m[q_=V|2Z+qZ5ʸ̊_VU[gX22e\eź2⫔qoSƵV<x22nkqc6.We	<WŸ8;0.[f޸;.h7m*W~@Z>^@~qer?.ӿ}	PKBmFF
  `!  PK    A             (   org/bouncycastle/jce/X509Principal.classmWW+Z!
&Xb%ʃKܓ.ɍG}x9~(3
!Dݹsg67k35
Ժ~#1`ؘc3vykdZh%!<d!#դBJ֊Uж2̯.EE:b0Z^̻(YlT/Ov@#hI,:"gAV4Ww-Qm{j®W|LN۩X.y<_&-/9[X&⟺lo%LՒ=mդ+LeMyRʔ\;Л3VafiQ7ܶE8Fmnn[*و9&}Ύ#4~b*tGU☊*UVqRňa#9'thx}h.\jIk2}pwOcخC83Dh}=~"Z_YqzΒStQp8ͮiG,OǏ鈡e@iL蒎ø#%:~d!2#e,U~1krSYsrWY
Ir[k_41<[,9`]9{98fX~Gw&lE*lKm5GҲ^*OW8Qp.kΚR! k4
껥$;8Wl"?xLxăPghcPU^Ѹʆτw,fX~&~z$)FOӾO?.ԕnT*C*?Go:Q:s#jWY\Óo k0T~0z88A\jP]>TEd0Tx;[obկu,AzɁ PKc    PK
      A                org/bouncycastle/jce/exception/PK    A             @   org/bouncycastle/jce/exception/ExtCertPathBuilderException.classJ@ixi֭6)ƕBt:)!tR۷RP
.| J<UZu\?3o/ qP<
@1RP>Zg,OL@ϹT+GiUҝIu8b84s)&:T|,W f6Q0a(24z+"( T.[߄kV{^Xf\eo!j(aY1xpDc2E.s'EvMVmg=A+e;PyX+ R;PKR&  1  PK    A             B   org/bouncycastle/jce/exception/ExtCertPathValidatorException.classN1OaOYrwCMXhؗC&3f(oąC i_^!O1Rg!*{/;S|<Kiޣt)d(|o,tRh/aQ8JJKI[0,2ArM_.Dʡ~p#/p搡hⰷ81;^ѹhH!_C!N(aa?NNmH@jQhWM@nqpxFv/avݩk (nJbLջDPK%&z4  X  PK    A             D   org/bouncycastle/jce/exception/ExtCertificateEncodingException.classP;O0 -ufkR$/lE]llkFB\CN8[~}{~pC6M|)R12咏/ĭ॒U݊KU8PWZ
R#\,]Ju5[d|f+#WR.W|!W_.F/Vh4dwb1ą+q4e_Vi4
F{gh$vpLH@T=v)hмCg7=<M0OQ ~FﾦPK    PK    A             1   org/bouncycastle/jce/exception/ExtException.class;o>vFTFĲDļt}FtҼ⒜TTԊԂ<}׊WA\CaRHFQ~ybRN5#+00202 PK]Mj{      PK    A             3   org/bouncycastle/jce/exception/ExtIOException.classOK1߬ݦVm-ҳV[KA<(1)Fo ~(q*b`{7||8FP?P7WwJZ'.&+mnu9aT2Z-|f\i~9Y
}?].PL婼)ܽefb\(D!"M4ӂ.6v\/'lsyv2|E79|A	C,G?P aciPKD&     PK
      A                 org/bouncycastle/jce/interfaces/PK    A             0   org/bouncycastle/jce/interfaces/BCKeyStore.class%
0E[ XpO㳴Tȯ9~HLg8PA~hmb"a|ˍIF8FQM	$y!̃ĳWwW 	a:A軘"h
d LQfPKE      PK    A             +   org/bouncycastle/jce/interfaces/ECKey.class;o>vFԒĢԒԢbFĲDļt}FtҼ⒜TT<b}WgJv&vfF]
MRJl, b PK
ʂ      PK    A             4   org/bouncycastle/jce/interfaces/ECPointEncoder.class;o>vFĲDļt}FtҼ⒜TT̼Ԣb}W| 5/9?%8,_X 0<(3/Z3Y@L PKH%       PK    A             2   org/bouncycastle/jce/interfaces/ECPrivateKey.classO;
@1맱;;?(6slPbHci7}/ kL'LS]ktnbaQʻջZ9ICrRTi.C&a7mîӭ~
=B0hs7Ý[	#a՞@_PKK      PK    A             1   org/bouncycastle/jce/interfaces/ECPublicKey.class=Pgy4v^@6vJ͊&\x(#RXM&}<_?Vw"LR{<C8´*L\:iC2樨siV.SNE9ɝg+Zvw_g3
|]XCda !@	oPKf      PK    A             0   org/bouncycastle/jce/interfaces/ElGamalKey.classm=
1Bj;[EAA<sqDqf<nov0EK%q.A'3\z{]]quJ}*"xd#^Wk	ҥPSΌrm
Ma2mQ%6I|OqЉ	/PK={      PK    A             7   org/bouncycastle/jce/interfaces/ElGamalPrivateKey.classAXPHt:!	gZ^M<8JdyI-u©0	uG(vl'.e)99윚'c#4<(
BV{=좈Zq**JA( PKdcΨ      PK    A             6   org/bouncycastle/jce/interfaces/ElGamalPublicKey.classn@gpHrQ"AK>G#¯FCE1Q4η'ƄJ3`zdbar]MJA:ΉK͛4[4DgF/n9;<'{_UzgW}m7%aKpC0@<@-)"a*~ PKu      PK    A             1   org/bouncycastle/jce/interfaces/GOST3410Key.class;o>vFԒĢԒԢbFĲDļt}FtҼ⒜TT<b}wcCJv&vfF#
Mb/fcd`e`a FFF6 PK`_      PK    A             4   org/bouncycastle/jce/interfaces/GOST3410Params.classmAjAE1&A7vBܹF	0=M060W"P2"Z__/	z
q)f3s}vр^RsS32+JQ`\{#ztUR6JSY6y}w):\w8Zay֙;7aKs2I6y'm4PKO
   @  PK    A             8   org/bouncycastle/jce/interfaces/GOST3410PrivateKey.class
0/?GAq\D*1Cqq{/ F&we"qr*IUָF5jU%KH	;7|YGE^MpIc.F}W!@b!+|PKl}      PK    A             7   org/bouncycastle/jce/interfaces/GOST3410PublicKey.class=
@5FD!6&6!W J)fy |Bdr#8e*YW6q<Vq=ׄEa*׵VXe;Wt^_'l~hܕMbvM԰]!@6
_PKɔʧ      PK    A             ,   org/bouncycastle/jce/interfaces/IESKey.classe1
@Dǘhh((x
B@f<	6b5{O ;ijMh¼Pry
֎ua]\ftUJfi*47xH Vw?<iB A(&DH=8 PKWϤ      PK    A             3   org/bouncycastle/jce/interfaces/MQVPrivateKey.classuMjA_e1 @қ첍(F=eeaGe<TH#JM=xGQmB?7od+Vw)	;PDsig$UXͣD*.q;hWd\]**aQ&sb?5KfկFx}%<=m
{{W="TOZ~PKjq   0  PK    A             2   org/bouncycastle/jce/interfaces/MQVPublicKey.classu@ZJH	A$66ۭ<XdL& 0C,_YdgH:by"i(A5*X:2ؕA-O3 +SU)YEXDa}uMa4	sJ>6\<{ V}xPK<И      PK    A             ?   org/bouncycastle/jce/interfaces/PKCS12BagAttributeCarrier.classJ@gmk_A<ixj -Um
nZ>%n҃\>}||za`(ݡ9gTV;bpRc=(yqߐ%
me$ϪZFu%BWڑY ˟4v"f;2A .wtq-h*6کOt"NU:a꘏yvj$/D*Ǭ$/?FB;>  i=88n/PKiN2    PK
      A                org/bouncycastle/jce/netscape/PK    A             7   org/bouncycastle/jce/netscape/NetscapeCertRequest.classW	xGז<zs\vsV(G6vik;NJ҄Q֖Wr-PJRܔ(%ZJ+h4U}@9[ʲ->3vup䪆R՘_˫PiZSӸM۳ָ[BպHhk';+^A3"XL3Fb$"7L0IMJ:pD4ѠxnD	%TS۞	JT3[cxB74`IRMH9"IL-iܾȒRmH\zQR(؁-Cf%TsXǝZB?@.ư{ommoPB\r(o%,SՀZk")m)@>בu8wVc
._
Rj5M
(Wr2]8y-z$ERT@0"UaDnQ#f<AZ5Q".𱲘D|X0J=嬓]8I4~MAۡ)f|ުIr	
%$x'$5bRqÚM5"x"艧HDM1-&PZFi;5.u^YF
rR6`/N?k壣#M}
V:fuJ-TP%w[]\0[ LeB)0yfq	kXEA+jn]KpJiInȃ~Lbg''OV(sZ`URZ@5JZ]-IWc݋wJ\Ivtm4FO/$Z  F`:Wl(pUx5
\'*&.YC`^(srCkPYAlE糳֔P+E2t
kw|OA3lw<Oc'۫S8fAu~/n`w|ggrMo^J.bF[kai)R͵J۠\syYU4(:Ů}MGYºۗRᨚѦ]|{~ʦ2D,ʶݙ^-7_iv\bݟ\W%OGW%&T^Ř`jQ<1`.nVЂ*ưU
j 2ԣZA70`72k/S0/WpnQ\/f
U
V6p5,ClVBN^jpexboR of/wsT2Cxûax{'#eƽ`0è=87S22~^ۏcPq2G>i0<𘌃Jg_?2b|a!A/H3H+G22R8Eü61|I|b2|5p}G.}俍cfT#]
ܪ
[ED_=dD&k$fY2*$f+FuY|%ux8t
%pAKL4v>YdwdcERIm{rǪ{4hWN4;'>WO?p#ӏ"ƟpWi͆d䉬'z,X,ai7V~61zę4ja=yNbNoJ}8FٺpTI"8$' 9K^Ū;GGU8V?gD;fOU"4~S"e7XIea]%7,|i(sTohI+uBci궢'~wOuըD]$覒=n[q-Reu̖/]E:xc1ggxuSyn/f~1߅WMR&'wg2Ν_ty?4194~rZ寄4ӪLK?qm^sIҸ8~anm<@WC"?G$(8Ӛ,wJb̳a73	>?Lp]Ẁ%Qm
ddSo;I\4vdbje?aߠ43zzuSHOuѽd	Qbq"\߈J+VP(;p8]v:<WQ*R:Ϲc/4e
99t{";~n{I?PKZ6    PK
      A                org/bouncycastle/jce/provider/PK    A             6   org/bouncycastle/jce/provider/AnnotatedException.class}N0EG4<^k`W*vnX!UdWS_ĂExwεG~{ypC$>eݤ2Idx~dhBOy*˘szUIU*W:^&jыޙJs-	;m<GƥNhx0p8%Rt<aeζ&,Yh`ߢP@ Ф02{jrP4$B[tgtsKAt\EnɁ'Ԝ'tr6> PKr~    PK    A             :   org/bouncycastle/jce/provider/BouncyCastleProvider$1.classQMK@}ۯؘXC[RZ<{=,閘Л?IAQ<Q$zV7o2_ zeȷ#ҙ9g}΅nsߋ8nS
^igJ7Tr.#ǉ
q2Drݫd.ˬ*_|f4d&PPP``ySz=iOZk  
mبpP'`^<Ja&I\ǱPZh:>'P$eau)t\f.&eM)bw_PＢR
Sz"(wQC=fhS5"U
PK;JQ  F  PK    A             :   org/bouncycastle/jce/provider/BouncyCastleProvider$2.classUkOA="!(V,-TDA"ee6I &~dw" q=wc{fv ~mu21&i3UM.(=]]wO(j*e9a#iٺSG
qu3FDl6EЪQC5*\ڂ)ںI2<õ4Ufl=<ɗ5WLVF?zfޫHL)N*KVԲWV53y
}R6%v:(vWt'LV{-a$5 1rH	B*%TI,Z	5UtPWJfwk ~KN|мW{ˮSg,ع2k=Ta8[$r͝|-[h.~D91z6+2\P2(CT,zWDRtȐ)t(GbpW Dsт"G$Hs&2ݏcfX7K\m]9jurLRvMFyV]28S&0PH0 lƼ$ROo =$h
HG۷4ڱh]`E?c#b|[ Y >/YJ#>I6)&v~ O
K/xǼ|Cg<mī'Il^yA6hF2eTd6f7&h0F
EdZp=PK+    PK    A             I   org/bouncycastle/jce/provider/BouncyCastleProvider$JcaCryptoService.classOAǿԓNDkmQ ii
&>.ǖ;?Fb\;{3xw3j=0kt]~v31B䣀A O:thrkȽR^D,_?5#gc[v$,m鏅TJ˧%#nOH[D숴c#zP]ᕆ,C%]pXw( _6ws~lH+U6^b@
Hû4([Q4YQ㍺	iyc3%1saJ
}
$bv4n8G
GooǍH
J1Ncx2xc3Ʃk|XP
ci-Xvd8PKR  K  PK    A             8   org/bouncycastle/jce/provider/BouncyCastleProvider.class{	|;Ėr9s8eG-+9ȊX$'@)}Ci)!8` -PJz:FZI{oμ}2/S P4p	8__Nv	[)[-;+{/~(G~,'mE0`kMv:K'X`[*6+<;_0`;֯QrH88$塁H4/
'h$CDAvH(2m[]=Y-ߪ]H?Qɠی)Օ5k*b} 7F.FF_o{s{Z<>Y,jt6n06*!&`,KVnZŀ7&VBm
v֪ѽBAnx",Pb_yW,'﩮l@wθl;ۻ:}qcwӖogǳqaT˟l
qeWw;WCUޞjӓ=[PgpVۑrڈMMw4(X)iAh8u?sݡAiiokhngkiN*,4:ۚӽٳsײMpGGP"T'FcA\V14hn5hnzP>YoSJinDV>LOR[][g4W&.l5¡`ht={0B{S؆.=ԥz0
6z;ppojGnWD5ոUUMl'Հ~T*hqk0
8N?eP+W{/xI}QM
%v5X_rK[f٥a4iVaGOQ\#
:GIXkVg]Fva1s+Ww_Gc;(}5U8Pos7klWڤWYiYq
}.\>{NM7&a'M4IO>.daF5
FGvm,
p£ڥ&g99-kotJ@U?]`$AAO=R$
i{-=|C
FvCԌJRͧq`,7ق@0~{Futim#(=>3XN}i{iq{{q	tt.Oks4\E_l|˯&.].]XI7d]~n
*ݸÉQkm1=~gpn;Wk@{:}#ӭ]0A|ˎ+%UUUiR]U&̞̞Z"6?VQ|n=hC9ׄykp7+FดXQwvָ
#h<G.J[pОbl'P1&}~
2[[[[]ОP88Z?:(ܑd5OGPp_2LD%xꫮj0mRv"xcS`miX`L)NtY2]Ɔ2s
1@8?WZҶ耾`k+\elk;]RzT2 5P;ItA<VEp$ZrZL}x_x8އ6qz
ڍpPpؘRYMklu=Sl.O`9	if;(FelVƍ23=Q\sܔڜkq(vz.GpJv#-Лz}	\x`EaO,FA{:wS{dX_9ѽ,Ӥ[w6jfS"F.Mecq*[J5D(W#p2oj'Rc4bNvS͔i03޽-ʕ&=3R:	eГ(C㘅PQzkFFS,7>VJSe(E˸WJp(64j2dU
k5=)oh0Kz,lG4F{[}ckE'{2HUU۠Uիӂڪ5
jCX<^?S>iϜ!pNOJ|5Vf+w\Ox]6z?W.X5s L8Կ*&Ej+&TμզXt(I_p&!f!-#?Ҏͧ3ܟREnNCoiGfp|=9x$c1OŬ@O`i̪R *͟,,'0<Km!&kbu:f9fb#M9y_&ȋ-BY݉e
w&TB	Jj|gT2û@@'Y\ߵ峗?v6:ۏEhW(J&;&wz$O8;7
ĝdLRŽW}+u/ĉqJ;v7:'C9l/wB4ѺQbc~ds3dt=ĩ}`яTj'cUwg]܂-',Rِ<ae">'o̰t_7gRB:rA@OQ<?fnbAGgՓ'fζu3;Ai3Yr
3(kNavsḳwJO@<NYInNgG)
N8'hqJ6
Dp;.4H>,]~d0OxOHx]8)OSl8	IYdͱ?hۨ}Cu22 h_a,8CXp{p8Ɠ
6U++Gcj`i?h.@:m\}u}}(>
S$GTk^o]>uF6E&~3;LhR]TzuK!2<e
Yslrc:LdU:93dYnrLY]=͒<IYoO*9!3dYȍ$﫮˚ķc'S5Ys{h2k<mYoPհK$ g_<D]Ax:X:NzDy\8U#0:'r?3`f.+ui8w:QD511Zָ#J	"JQq
FDKiWmz>6;4yR~10,\ sE5󛵪Z?hLVoҚ
+{Њ-##x,w'E.}É3ԋ^m^68C<6

,U@n>=*`zps0, "1q	+B\$>$bT\&#.p+\%jVMnp!Nw	[~WG|L}	)p@|^ !_pP	8,
8"`LQO
xJ1xVs,+|UK&e_
?3?G`3UWT6See****+W-T"-V-Ui*[*PYPeT6AT[eC*lXeEU6TSY\e	Q^]}*HePU!]KTv>T]+TvʮR*Feת:|Ӷe=I?t-/7ˬO;WHޏ~FzN$Ѓ[}}ue۲FeR#[Y=5!̝n"RǢe/oy+:|A
yβKGWIsS'iA+0Vk2D5ćNjS|K,%Yf2&[yΡ5j,W͒zbyOk0o	&WuYy )_bt$ލR^і/Ƽ?F@]˂Fک̿"毛;)&4;
f䶿w	~/8!63'L.4%+7c3sY̴If	w?Yבɳ9Ne	5ZdO`w9$&{8Plf1AQn xqqoc!mp+
~?i#;?I/	l&L!(!(%8VT8	j		V4!XK`=g44		<Ip	!#~|"4g>Kps'x|!/$xaG%8B0Fp1		 x)cO<C,s_&
/HUF2	AMo|;%	~@C'?%	~A
/	^%	~CoҌOC+68-hc.;dcglYG9M?oc7ll:4E/F~6V lg~z{Qv~c6~zkq!OIl?fw36x?kcn_!m6xhc6v\lc*:yf	~Cow'	Dg?o-	!x=,@8BP@PH"+A1`d)%vTi	f$(#E0`\y		,$XD`	R,' XA`A%EPKPGPO`
Zu	N'@pMnfFM-^m]gtzl%F`Kp^Nߊ]	~@C'?%	~A
/	~`,Y,5}[y2@,V>H0d		 ʇ-Xy2B!j# c	jerВYZ}V~Y\nʯ\d	!>Bp95\Op7bWY>`W[nk,Q+_kʯ
7duNp:\mwQnKQ˥.bb$-K,CJUW3PQy'iU$ãȭ?Kcp$oTk/aCc<, J^xeJ,q,*(+"t'2"CWkG\Fq蟇<jo̐/@~!b|>
rirN50x(gB!TArvTCJɘb'zǔGYފ1eQb ;Ff{*)1¾2#٘lS<&FXpH5RkCTj)W#J˶
{Fo̰iz1վVo̴7
}ޘn_7f٫FRo̱;l{ޘd_7&)%8LyW؋uy}UzBoIKsÕIÊʤ!ڗbKo
n/S.@,6]5Vy
^r~8]A-3:mR2LyL	rxG kM8WVXY)p>w תx-S\lc$qP1/}8T֩|wQ xT~T7G{r̰l#S/%=!EA˷?o|-9V^)G5+6zm!e!G~Xmc|'Μ->Gj-'b>F0@`GaAnR oA[r0o,yuRpGu
W`ά? Ukq>؛
<M[S9xژVAeZ}%	RVbxS=C-8d8ߏ{Dلޕ{UbHk&S@|Mb؛EX;!H{ObHW)IY$$%WbJo%']b`|ogLTޒR󻑝yvdtV>Av&Il8Y&K6oEEq~'^:/CVg+dGMxSua]p8%_ܟܧK	7ǳtv>*Wbd]:%#ٝKb7#>=oA֣HS8v;$ώېm}Nbc.dgĎJlLbOJq=!q=#$ĎI{^b/J}EbJ{Nb_K{Yb_ط%
}Kbߔ%}Obߕ؏%Hb?%Lb?M3*fMx}U$,Xőu2_k@@;LO/5<=QAĴr*@;q ^[*˻ɢ{dmY:AUby0 d9T]	UBZ2syLY|bJTC5e(nzf
,iGj/1l4ך36IF[4}~Өjxɝ׷֛p7YQeEي),bʯqBi2qӯg~oj;v~F1eAǪ?z ;<wSaWeZ,t
r`qNMߙN`ywa^	O퐺'a6x`Vfw*LCi0SiX!Ƙ.cRcj,(uaQ.xA免mP vs8y.)H`Q1cc2U+K {JeWV2kL
kkz+f)mZ%)aUmal0*>cJeW{<&Ϳftۍ)X1L?mֿBvn3IC)Ҟk_wDYtT9vpvX)ⴷVl9+euǃaeJI|w|Wz-tpWu
^|IvMCSŎ%K`{QKj{+)F8jm]<)/A%KT4"mJ);9SdFR=%^"^"vON9১4ߜRgoMtTOwtYޒeN95e?{R=|[w)R?;E:3E9xIb"K\C2'0;,Xe-TmQP^0t'iŚ]]i}ѧ=Y_Oӗw^}IKŜ/J}ۨ/Z\+0ҒF0haLcƙz
zk0ahh0rʣؤEW)==GٱP>Fnw8kP>M1ndzrd<cV"AQQF_ȫ5NPKCh  U  PK    A             E   org/bouncycastle/jce/provider/BouncyCastleProviderConfiguration.classW[W
,a2@X+4iZhnP[fe.]C}Tk}kH*jӖhH>
;`|ߞsǽoի _$Jh*6	$<$! aH°ʎiA}@(
dpld<<9bD:P4
{ANHP		
Y4>NF1P,Y	jִUKMf<UsYfifN~.m݊}ꔩ`dۘgv|ߤmSnz*h)Îꩄ=C1j3vfXF&CvkTNl9(KW㎂W"9;n|P%#]+4ڥ?UMRL趀ٵ2v	,_+hfX$<;at-kRE1'o?bzB5V"Sv,KtO^ihjV(<k622Rb|֓t,Ѵr~Rg}F"u ggܽܓt
(9;gmӔƲd̀:cNw#Ri]mϩo"=iuQO)m^S3o([9C3#zؖJ}-Oo;9~
ӥv]Lf5uVsV:gu˯f擤mSp1hJaH]:ɬ:e_8zP:/cTwd:z(
vYz2ieةUnjg/w@X:격d:nLlQġ"E="zE]Ľ"qwx@;EqDQD<(⸈>A!a'D/""]"Y-O5G|HX-%
8!cVZD{;:%ر>Dp{]ϙ_ˆ]8>\n_Ff3\oRPbS7\qcP<V2+ߓDvQRح.RauZS.[[_n縂v$GJAVz406)؇4R(Ven
Upr
x?UЍy=	&xR!<VSp
O+܁O0'Ǘr5S|0Y>x/0Ee9"cߒ1wdߐ|SMc༌GUC@cLo)\6x^F2|O,Kt%JSc51[Ieq"02+<#%s.
AsZ1cFehuZZ:&&Ve_^$-eZ>F_.%8Jx\UX[WDu=KXZO_yb
(`,{ÞV
t]K+٪ճ[}.bΖv8u畸î+y9,uNxwb@.nr
$VXe~Rd.}Jn]";J%]>\ˮ}nnqY	IYH
\P_u"NX 7dG6"\AɩUXwUEb,nn"AzrNt'>Zt9,W(M/ϡY\k{U=e%9b{==W/ඞFO廉Ĩŧ=[pAىU~QGG7ROԊ	,B'.|
8[I%q:=}8=ѽ
zJcfWe_,sO/5>XF~hHt7
獭Ø
U2\S]J+.UE%pKn@SAOh7PK
    PK    A             N   org/bouncycastle/jce/provider/BrokenJCEBlockCipher$BrokePBEWithMD5AndDES.classPJ@=LGB"J4`EA*]dhcә0B?UGBт>8ro/ MN@?y8B{Y8򄹡pŜen7
;b%"q:f!dn*S1zRLo{|#eBS,Q}K'kT8}5K0
Ph`@k_}29~22aVᖚ91
X5XϟBC&PK-Z    PK    A             O   org/bouncycastle/jce/provider/BrokenJCEBlockCipher$BrokePBEWithSHA1AndDES.classPJ@=ĤQRPHw#.B˚ml:&Qg
X(q\(Z{\)%ؽ,GHyVpqh^n	:˸3K^ʣd*N~"f?%1'k?&
/:^pUbZCձC#e:~5L4@*X4c@Z hn@̐1*t4>*YDf9Bw@s>,aTTkuKl=v%Vg PKnC    PK    A             R   org/bouncycastle/jce/provider/BrokenJCEBlockCipher$BrokePBEWithSHAAndDES2Key.classPMK@}ۦ6Fm	"ś"61`ՃPXMw&
<,Q&Egcv?^ clӀA[ȱu/z8	4J8,.>[LgWdvPxS'&Lt")I˖b~_tP<]L.ޝkR)4
E4v_7jOEk`JU5c`4GqΤG̃,CTUQAyj[j'PK4Jo"    PK    A             R   org/bouncycastle/jce/provider/BrokenJCEBlockCipher$BrokePBEWithSHAAndDES3Key.classPMK@}ۦ6Fm	"MA(TzҦa,O%nBJQt,=f1fOP=
xY{7YLDXb1A؎
oјIcV$S3iRLro[۽q蚥e
BQ%0EjU(䰔bYG
+:X%q?Q#038f1v+ *KniU;33AFfEkqayT	PK    PK    A             P   org/bouncycastle/jce/provider/BrokenJCEBlockCipher$OldPBEWithSHAAndDES3Key.classPMK@mcƨMIPoĀBcMv۸6Q QxP`f#lF@?aM!ΝxA4N 8Ci]RvB"{F"x,QIp>KB*W	&_{7QJ}xI3e:m_͋OoԶFB	,LTlS!ڜSE$	֜A+.pM]{lOQOasruYէOպBSgPK}    PK    A             P   org/bouncycastle/jce/provider/BrokenJCEBlockCipher$OldPBEWithSHAAndTwofish.classPMK@mc?T*M"((kݰJo%O )=(`{031NK2β3C!x$YLPNL{,Y:f'A "=ߋE8Y2}R7ETc;~Ch2eVG4tǹ(xPoԶFB,L԰lW!ڜS4)vIfETWf}jv0z9Vsغfxɱ:m(4,6QPK	    PK    A             8   org/bouncycastle/jce/provider/BrokenJCEBlockCipher.classX	xSו/tceYl6ĤؘXbH<-%!=.钦Kڦmtdx2ӀDp$im:[;{g:u!MyI%L3ӹs=\`쨵m2;VرʎvcG^;|vc_KHH$f'Sѵ%:N
X<uGڸ39\:up4mN2
`J4ܧJ}BC[cph' )ohߺc.w_w_L}9;WB,-0SVF*! [)
%PF@2#шAƠuǢq>K{Gڀ
QmڵujP+	ePQn$XBE!6G\5;2c1ޥjmXD2t>e^u gYCZ|HϘF[u\?%ɬ5U",AyvŁ(0R45+>gSO);_	Ou\i3t4~Ukam`pK8ǎA-<g*nIMUҥ&J?
OzX=hȰ\C48
<P W8q0-;}`Xw=<IxnX4l($'998ñI?QHkc34?~6l}8S`$g(9c26FJZİ6Ҙ=ܘ\7+pcֲK(.
ФN%4zԾX`(85"Gbp84SqSndbsN19ZWsbsE6tMǹw1k6%d&|Y˛\1hz@ܲ)(cy>Y^qgPO@ :τu-b^	5(GZۈR:s*}1Tn48%R	QgwfN!ʑ	54m r
m751?L١hrvth3
z[9|-kJ)۽|g]{wΓ2<n}M[HrmDO!J2v/˒	) ~<q3W6&G	pdʺD1[~JIZ#];ZT;ߦYo_!j3quq{~qݑSc$53FKeqe5p=ZNᜤ
J#?Vؚ!4RnLyAhB-OMٝ%Ѯ$5_nXI*3?tڱ܎z;6qڎ_hx@O%xXH(G%!	UDĀDX	ĠDT"&IH<*.wKGIOxB$'$>)ħ$~N9ҙWn]+CB5_:¯?M5xkaRWz'7.?8
쩤xKdVdF셞΂X-sI̠!3# nfPb󫥭ƿPz|	/7nbP,f
oh'4}@wko,|wK+7zE]öy
M<H#unI䫔Di۹N
Ɗ\Vwc_$g;AtL>L~::	!Pn&LL,B'tb,rI^&KQ&4a1h'''Nğ:L:1_:~L?q/N:^;q/n:17fub&0y1DYLJXxVT;0&juԁ/+b62&,aRYƝgr&s7I5Lx^,fBBǙ|U40Y<{Q@{|^drx&2t%lLW.$;,9pEX2dJ&+bqWYkL_ƽ`7%*6\&wb/spN̙ʤʃi,{T5Q|Ψ-ٗ8N4J*Uq+}
dM	RxRU9Q}ߣn[zY~l-]Yj]mQ4z>|W*Y\}V+gs.-^k 6yK.^qA7rǢ$6j]%<_jVЂͨ0. O	j%%Κ-4>QN0E[O5į{79O.gdS>34ψ٬:%V	yF%>D{װ0wE8=dS틘W_btS[uQt_?:%:P5|)qoZl³d:J{񬹡y(u_Wг7$+ᇆM4_)>$L댣
>Wif@=MHc˞;Gџ,oAϖ;.mL)3Rjb8#\dYrPO\SeZF̎\eY	l_ZrĞzxǕsِrAނN`ع!cO u/"Lz3+<sͦ٧Qs9eV˙69;ϮKYDf	-=,^PS+>KDhc.<Z{ŽNLMaNf5]krgTxU֫qAlKb--NXǄG)(K	%-%Yan L\C\-	|˜qJMwXȧkXa([ʪfI+ô}{RZyJ݆4}s9^\s9<wch}yiqSe}7ƞ*u/xrj3gK[=/Yjszl=?RB~
RE!6JAmNW(p(.ZG*˛hDM-̦knZ/q<)"Z
]l=[.RrKmCJS.mc(y&A:󆳦ڐ]P'6p~(<v<+ypHD%RMXW_Vj@q)REboA)~|I<_`Z$&>8l|	+,t|ZTY)CGUYM98-St)z^F8Q-nnKPIK6U׌5E=ƌ*k#͖1,1ay2-ya"-oF˫l%bom\[Kx-{7Q+;#*aTSEBOݡB-<=ƞm2c
ԑQnU_JqiQAm[ӠD:_qgҢW⻜VP<FP0,de22]ݒI]2.(\D7KEn*?J'R	2/-}\<Wa_85VwQN{?rwDM"
k2	
z	梌\m-9gpqz}-/ 5\[$*:>x ryt-TK|&$+//,_%K/Q=[>AoSajڏP~ߣ~OaOPKdtt  %  PK    A             <   org/bouncycastle/jce/provider/BrokenKDF2BytesGenerator.classUoEƿvi4qqS
bJ
IZ&5MR&dz׌q +' ^@!V)\ }Cp{V{ N}1qDkͼ6yozN7mVgN\\\JUnKQNmx2e	WH<pxurk[)y)KK0t.%ojrmK+{Kx+7jŊ}i]-KQ fHL-Msw\qŝsҪWTUe{.C>im}S?BFM
C֓VnݫFה#r%٨*/_߷#g+[H{km6G[/yOvr嶘3%Jo.Kp̴r^SƆܵ
wHʰ5-FkCNZ&ehL}F
<o1IG
` eCjٷ3ǐHt襤Zsz|϶eؿxzF&Gt՜Sa}1bB(^c8!HNa zf^ì9
Qdq>I$i\/^
oikXаHςW+&xQU^cT`9ݒݺoG|^A) b&}h0S ٗc+ {cG0k۸m,_'
N2#Bh- B>ؑ^<vWW1gCx>飻GS@ɨ|>aF;М5B3fLD:Lυ]\
A |.Z~΁PȿB,G.A\OGp"1r6>?F}j{O4_]˥'b 7?5ڋЅBsPKK}ʪ  r  PK    A             2   org/bouncycastle/jce/provider/BrokenPBE$Util.classU]SW~d]KhM@ 6J 5
jۺ$twA3m/
	NNCG Qa:̜wswrύ7JD,N&$8#	us2]9-g PJB<癰K:M"Ooi <[%
:Fzp[|XMލvU-No#*C(5&zngF'Cq噜搖.dxF6ISPsm0aShRDqt%QX^ղd>ϳj_qEaSBIU0S3<mL=e%D-y=g.D9clvska.v+fVT7rص*/ÕXgcSTbZ5<_6+NsںaD7S0Ġm܋ɱMoJ݌]
װZ}LޙjoL(F|MoZ.P%Cc&Τyrǌ9Rsؼҭux
^%&% !5}4nfKF0UD"]jymV+vh\EWa;2(
ACa?g0C!pEB 2vC*(IIL`dS}l:4t m`|m3)ړaKWXo"Nd|[pqzڇg}E҇:[|$N2qY1!:0&WdtcTqI	!
1)#.x=B
чk2NqRlOᢌ~|,#21.'2p٦KԨap5=;թ<;~9!lISh2jdx
[lz!?^|r9o	h1ZnZubSG;ǝ+IK/	HzPU?8NN`4^}8I
/h ZVpbbeL/#?ls&꫗ZI:
ɶyl[jujC
F!<_-boo,Hٶ@ml[ 5붏Vƽ
~AaNn4|A5!7?E}a}j>n~8{=n*(nţBL	΀l\^OJGTzT'/^[/^Hu7U<G	xzEVz^bh{7.uvSa淔LktYi2ť0)ti*wWwyT+4Ph+4zhz^ ]$EI!R$[H+7PKFTfN  N  PK    A             -   org/bouncycastle/jce/provider/BrokenPBE.classJ@mjV/cĺI[ơ4II҂;%dfν5Ni8"x%5Q9sx2
KB7a6J,l&B΋ISUչY,6W]qYi'&ϞepsX!+++	AaZYkMG2UU=><(pphwϼh.V+k廭=[GPK6     PK    A             >   org/bouncycastle/jce/provider/CertPathValidatorUtilities.class\	`Tvw6/	I 0*QTr$$d	+a7 xhz#lڐl5TjEyowfڿ͛fok-/opNÙv8dxGJ$`)k~:T,XS*!ؗwș%FQضaMjOm국+=mVշm7zyj[<j[Z=-k뛹^SOͫ|HhGfo'"?ovG|?W Ts85m
uÑcvo muڃcypQp?^5aQi4B7гu#c=CTTfo2=6yHXF.54maųav,}MEeB#0iDE!Y[PWzim"6պj3!V_
죭ķ!
_(D;1_u4Rp$ &dK׍Ge9uI$t7!}_M[pR}($Y@gQb&B[\߲p2U{}K;|3n mqӺlmvRucm=TOKZOCKhb$y)g0!BE6=۴Yz9q8>6yaZtOC_)yhfX!kl-?)1
M&q\z	vw}E)&ZtfڣnWXWs+[TCv3/0yaJi	hk)-kkVגnonnB}hwa]KƋYؕyuQ;UFR>f>6с{6|vik'ofC<:ip48UA`U~m.oT5йBQKjUT*ׯ:+7<;ڽH̯NU֍vcn}_H.h5oumpk7m?LU	>PK@uTԭ{z7mwk7*|cw/@IޞIٱʷA
 h7o7i=ecAkO`yu<e4BilO;/ڼ;Ed@AT#m'aMM$$.KFz\kXPmgOE7#[#;h]H@@d6}
dz62})$<Drts:|]/M!K=4^9mou0䥲EǍa[aFi&Y4Y;It
qrMtcve5t=(GdfR#Ԛ)UDi#LVwtuoW;2YaUKPԦ 3dܼTjV<j}kb6]6Y[B,<&HY!l~|atIPJR^l&Ao-raNcEXdTu{nbutz/`evt5uSz,w*Inxmuf]v(LUM=T_n׷hKspnqΓ8-ӡFۮCnh3V!?fb`R܅x	
4nF	8 ԋ\IY[z9l4\WIu>.ô|`Xb|YM:,9nmK+@Qבܻ#xWԡ3Sz4g4"2˙lj::}%ꏚtEFӎnj:J'q)+(X56uVnh%;ҠtILFBjs|ȥzJ|:7\)F[#
>T4m-g&ЩĿOyGt)$+۽2NJ|F=FJ/[
]jw'mPᓪ-Mlk_S9=^M	?XM=
uAT
hZLjOz|ޮPgKD4!N5[}飚:ytU
g47W;=5YE*6h|
{8cfh-ƻi)D`rbnN*9O8-E,.fh5D`<:=_OHC/e뙚MÜ.
4:LG3*sRt
-2=tnKbeMMA@g4Th4ʤ4j))ZX1C%ZFC^kz<0Ok%/}St9|
v$qajF؋WDyf+u/l>(zs-kv۝.;H]<8rTM^1Nk*.(b(%D^K@+'?8FCh?+|.#(!Z8_vL0+.X0sӓ.CNJO%iHa>-@IX4V@2kȎS'עD[ifi%<iI*՞p"W9Hs0o<2bair-K浙ɐ*3Pp̫㬤M9Xj$OKCkh
Zދ}kVy΍IS=Y<P:YiqnHgZWSxlzkIVTt,}|5IMӫAm^GX;$> +۽+}+|]̔;2v;>[2Ωrdclѡ!TYͷyM]N%ibrlM*kJ%ٖIC]^:nf"ɌF:w<ypb63y=H1l3HiQ41z2J$Rքݜ Ч&1,/[3t]oG26#Ru4[>!(ꦰH!6?}#;BKL_+~ʈ+rcm! Gk^0ԧ޺w\Oo41ةef8i[
É	7}҃_N⫗98-]*'zO a6~˵&/|.E+XYO-aJx:qu@!
bn$8*rF[j{$MDO`K 	C*
!ƦMdMԫP/$G,ݼT 2_&aev83pNL;̲l;̵C*);fn;avXfUvXc;aaر܎qWqjpH.
)MG|K-;
xO|_PXOT/~!~%>;'7pT>0"H@@@@!.0KCS&0[`\	X pBN8EKT pX$$')p<E`Kf7!]YoND^sݨ'5qFՅŞ4ɵabI 7jW4)iIhWm[i!/	sghN9Giy晣7eьORH"ኋz~cqZL4?'*23ߩH/GzQΌ:%Pf֍2.L3fF$v=C
G1gRbVws[f
7PHQU]AxxfpF;xL49+1.H;%N3!#N<QK)4$c?QKEL]7>c.]GimOc(Ug ])b)"]X٧~3:QrUȫ4-3M=)5٢t!!IY2(?$|3M!}I
zSMP*ILr:R.9VjGNu"9gY<|ZW4+ˠM)ZNO1Ѽ(]YgR 2?5U^ÓHf
ы)|8;(bƱWi&BJG#	SsE`?!fΟ8ʪ%ciIg:"?m;c|Nt<G[SS'<_=хHƜǠ/)-GOZ$}'W5;xxh7eD5Xܒ!JuI3x߱-1O{iT#sus'ћǖjH<I)#,5Ş1xaHi8Y;}135v922Hq"}-omq۵?ޙt5l|n!'VLIL91F(<ĿmջqUҎA3Τ=ɿJ{}𔐙:b%mָCt<F}GZUƦqS㒱 -,>3i)fH%ǳ7Gvt,?BWW4#
+c]:3%}|deؘEA~OS11323gXa1`~_g343eëd721c2׃O1|E3` 48 OРa?  }t4<y
Vj~G]c
rTG0T1Cz?751<_jx&Jók
dx? lȿ`;K2?i Y/dx"?4X:gKK5
?5K?\pÕQ
nb'\p;Vw)a.W
.VT
E(V
nPlܭ(yM
[qh^i{fiQ5\@ _Ph?\Z2A(pL`2a
ICqL[4
.TN`2]5أ$
k5QfiS)sJ48_)^L*\GpRP>e-`éV)5hS4lTNc^lS34P(lVur
U<Zv1R:_&N~0le0>b3De+T2c8\63pÅ.b2ldhweW1+]Vw5ʝ_Uc%ïx7t7(sMʰo[nUum];ACp5;^bxÁww)0<0n1{x{dxY/1p0Oxx?1ف+;Q{I>\W>1́*0݁_Rq0Á}[t^W9}A>ϯϳ$W>t~m8|*;!e;^T_R0W>ew\W}Ձ){a<5W^c_W~7қW~>>`ÿT`@`cv|R#6v3<
~#Usු3||[Um߁QpwN'ި]ʃNWyaG[yaЉ*_u#ʵ_pcu:qrÕ3|6bO?tOp/0S7r_W~{'щ)?F[f˟zߕ^zvyaO:o&)W@>9NA>bx7ƳxυƳxN53
4~	*B(S/d	_ k~S{&|XJKVw7mMez׀+wRܖ!|-]="~n!-_ٯueP|ab,#ħEC_َP(VWDeěcbPA()>^M$]jsR/ue5mes~u-YA0.x<oo"
7Pq_mz<ڰZb0G0ѣnpA6O9nwۙ(;\v_dhLXy]l@}wdpr-#]amu@y&xWR>5+y{Hx^!nO
|^c Yf#Wڰh'dlWӍXHaa()%6A밨4HˁYf/ť4\`[n \Wr>5d@W
\4^EZ_~JܶRmP}G&[\bP}[svZw;.ȉ`4	D`^*p1\Xc}a)MV{s .Hno= Jie5PBiFߩWџsՃ
 {Q>Rͯ*O`g1?2j<ZG&:8;3[Iu<XI)I5$Ъ|kYԯVƊ$ ;w6čӠ[o̰(]%+~CF[Z_uo!2^s>JVFXK2zl eT_g]R7^W?]:ZWkHz!]m 59XީV)r`;'/2}xyı?;S;̝p^:@ZwCRhTq\~ozGEr>n&}CW;xI\J@؎?DP$QJ8B6GH@Beq_s\OHDRh)}/-,TBi!+]?+&rbu?I44
{%B۴Rxpe=XRN|76E.#
+c=F=/jX`C@wg*vcnˮW6L%Omu~6WVҩ8B<#M31~sAȩ+jm3+A;He@}Ue\:_ĵ˚+RJ;'EgR9d/<f%0wE=yl.u)%K|Z3'=erVv˭异
 㶖 ?S`Pa6Cs\&I
N*Xmy  e埐xw8x#QF`Rq?@P@ة.K_!\fs˪V
iȦ. -W/#
޸+B:]*rىe/Z`pxFx"{waVo_/O/TVr<VB!98S2aMrV9
,"ote:.gzCpl㷫sKܚVgٮl})Rz;ҷe.kE,2|
ЇWʁΎ!/kEw|NOB Euo]$)f
Qʔ͟rCi#O2%xXi<_@HY5܈Д*6RVF:0oj1a8,"ɐ@J<Ճ0%QanӠq~dj_׍0ˉ2Fa|P.D2 9զޑ_F\]*)^>MyX,'0M
RxIBRtc$ϭ.dWja^rW3rJCԋ?)ylsZvYW=nz,{]4+=ut^pl[ %v텓iC!
C~u@}eݧN'=>1uS+Nݪe#WR1hsaV`Z
AP(PLp<3{ee,,ၘ!4AGgS*p'{C>%(R} CoN)i9Yu.$z;fц&]Ӎ,]XRY٦'It:$ŀJ+AJR"~u9oNۮ7mtٹ@_]ܯWxodśxnWwI9F|{2/
5ݏΒ	1odo%{K--5Ril*0ǕM|+0G\W0]wngwNP
\50o;ߕo%.gtf`&b(
ԍ%-ؙG9\>ڮ,()d%P/p\DoS~NZ+9ûX?.ϑu5*~<BfiOED ^E&M?	'0yaes4"!%Hr-v*
uV,V!Έw4޷dǥdZfN"I^ƿL66'}t8GOW+gYٗ
3QS*MufmgٙL:cFFt[M&>(q}%0sȃįzTz qIqK:+k|ߦ|Y9XF2!k	SΜn0r{zQ-$~us~}d@/8*S^@V>'$&{x%tClN{ihiy^O)gWGYd6ZF-?,f+_:U{Ǚn!aM\ęeq޹`x^lJ
n՜_]z@\=/!'FΫ55vCe~P	Jos;j-دz@椝II3!x11 V7eC},}Xgt&o7VQv{'
yqD`͡:]ӀZ%2AX̷ƿV_BEn.^~ј!y
{D^,fQ7|~OܭG(fkWGsKɗ=eIz}/dml-hq\O)U &W7xoA!|;){SO/f=8"7?W_<^$>5(u8+1&Q}=2긢l"o.SS}NuLѾ}@|lvsHh	sc9ƝtMjWqT		7+uK_b.1=H~u.aJfn}EhTH#1YꡁIS8ARjL,2}`%)b/w }Ds<Y8iz,O}TY8撅ɲp[ϩ&=ާNJ'}j,ܧN}j,̚|	iSp[Ks-mw
pKK(HK -m*@UU!z8

	+xP9߯?PK=jE&  7c  PK    A             .   org/bouncycastle/jce/provider/CertStatus.classeQMO@}[(~K=M8ޗ!%5Bă?eVMÛy;L?_ pΐ1:m1B\yMS0{pܷGwQ^tD %<5c.]q)֒{sk4]G2~0s^ʥD`%;VTrGf+KhyhxtVfЍeHul
{P5q!:#8)BG~_ןEku}/ܓ6_.H
Y4
3b
s	^# TcBSqTOji6hz
n5R5?zۖq-H3/BlJۛr{VPK2b  R  PK    A             :   org/bouncycastle/jce/provider/CertStoreCollectionSpi.classYSAs,*^("b4/i،aqMm6|_U
x'?ģwC afz{33_~{`qTB]0tIh=BSJєg2 IiMd%²'mA4iL]S-QmӒоȗs#$mK3rdp-Y,^Q2׵Ԩ6i4-$(3Ud
ڶ.Q	G!F	
I9ǫ9PWAVQз_	:KJ1jPxJ'^5k$gk2jY|%eB7\VK7,,_ⶺ kkV:6ouEY[EU2ѽJTD١@Xe{	dIJeF2*ŌJTnJ:F,İa~-Z1t0p:?LG%5?ԭZnu/`nw:/H*l
nYnCEmCm[L
"CO@j<k2\߬	E>88%8N;32cБ:9{p^d4pɇ .;ݨ|8>pÇ0.у1?N`܏>q+~Dqט+4tgy]P$xtH&8?}g/4
G1lknuj֐䑔@ncC8v?~a1yEÛٞXOcva>3~+QF'a$P
y;\^Vtns:~D0Y.X]Sb0]d?PK( /L    PK    A             :   org/bouncycastle/jce/provider/CrlCache$LocalCRLStore.classT[OAf)&WzۊbXXMٺȟ_+&*&7˙a93{||̙ >g-)6eWr
R>]Xd#r9`քoE-+WxUB6
NUKizZaQLK[q]1dWӦ"c3ԫuԔUpKɎ!`WM:n^rJgZA_}B䅲135s]+-(gNfdjOjylY
L_&:R@r8TvN^>~A:_]%	:9iNHDOe菜VC^9G0җy_lC扆^@eIFUьIM`*ZƌDTtIф6Tp\hCZg0pU\	n1\
a.p!L`.aQsmiKh?v9ڳ_My7LD X
$cqZI3A
̓\}8+㖂$?`Wr!)9iy#
{%kseЛSC@|(PƊBZuV.o*x}rpd]?11:yzG*Qc:KmdYAPK>    PK    A             ,   org/bouncycastle/jce/provider/CrlCache.classWG-iN8(%	k[C**Gb%awUjrC8W]+!	Wr*?Yd9	HϛyǼSW ?h A"D{ Jh	O&='aM="!p0i?zw,5zf49pthlT0O}W渙TmƈmW5En)q{&tSհjv;Y{FFNHT͵5̪#A&fb8E)Jh"뺶>u9Z'lCOj)̎lfB\qmJ	P]:79ݱ=<fiΦUG$ꎓt~䚫S׊G(+iv̨nS%mdޟnd]n/9=8BӭX߂{m[]8햢:9tt^s"h9w9V@ĢKC^cIFP<pr|(Jupuw!&%FI-sfo-ZUo{[=eՍX2[k5K5^ՙv	,i
P*!B&{X>Ao(s;R6*\Q9MipnI볜[m37bsj&D&^oyeO&-h<63/9N&F\mA⍈Mʁ[#IQ1]*^=]	y'FYn	afJ@`jӶeؠk/ߵy-w2t2t1t33e/g8p]w3ga8
#dxC/CëeH2ΐ	Jpvnpn%U=GK"ڞkH)7FףS?Um&j3TT:
Q۪$e8<[R
[՘8r<+*YD+ZQ	WqxUI׎77FH]CzI6:ye9Pz]O}0@K=A6)h`{Ѩ E-hR(6d9CB!1a/b&/-[lۄxޡ`ީK -(Q"W}x]xDA4`1Çdeħd8_ƣB|R)bQO8x>"GqAd<2s2T|]>/C'8/to&$gz||XO4B|x:ш|FㄕV6UMjdi-~NI{vPe[flqU,ݙQq)<r	_k!$:F8!`
;rx	O;~
@%iI<޹q_wJط`v]P!?a+xF"m<gaău;q}
C\|V:Ty^UUX?_x@mt8
~_=Cyl2CsF(,J*t?C'ttB\t5h9BD'DS?T?~rd7D	s4,{a_?JQ
v]`L~xc#%#*xhcxg?;ViEN2~0й9~~WU͵.z^Go+rsA4*0i^$y%</5	')&ﳐPKQL    PK    A             *   org/bouncycastle/jce/provider/DHUtil.classTmOP~.o2P6^lC)(!(,HIҕK-.)$|Gm
2d1sNyy9_XZ'::0i:RmGnOma핣QǵJ^e9p[F51]oiyyKwC.E6
d|%aKmS{`8r-QvI[
6äk[vDAl
^7[f*XcnxRf

GQ6xmNKyFNi
iPv)데
z)WpEU
)`a DVm&+5C],3M34d.ҵg4Z,R1lTUC`0QYf<}ZVB;$AD!	$\ЃIS10fT .ᖄ*FqGUD1ߍf%uc9&v9Z
8x;\c!ȫLp2
~]tD~G~ٍOR3'|2	FGϸ8X-V𠂇Oo`;bXwȍIShF|iIdM3hj撯.PKZ    PK    A             3   org/bouncycastle/jce/provider/ExtCRLException.classuN0i':06䅭%	Pw׵ȮoRC!nC2ܟswp?>ܠjC EU*V|۞/JRiR9ϳx-kkVFn(}B*tvI}&O>YFi)`8&Gh`h! 1C3srB ;ե8n@A^$zC:P@n{PK   j  PK    A             3   org/bouncycastle/jce/provider/JCEDHPrivateKey.classWy|V>^/16I
$ȒAm0cBYKFZm;mmI
$H}}?dY^[vy{^yw
j Pm
Z8lqֻ{	zkIXo@pCw쥎JzT@bFbj.:~:3T5&4X\Sճ% T;K9{X72*`]F 3z$U)Zz؟4

YI;(0jzTjCv3$`7$TS5ҶLڤb
TX
)x6B+4q=$gIjznBTZ2<?QS4奇&řʘaPgBݡYlqEzJ:=ygh`<ƔxrI06̋h4MdxjzXP7x*1Sf2@SVJDM(e-M|)8I-I#F#Jڌ%twb8R"Vn.OSuVNJ!}	"oZ2)>hw@JgWTG/P4xt_DwV.em{م
.(52U&9 ES[i޹pN`"P-.ܲ"9ۿWjD
(q/Ӫ)a2̣>M,YxԘI{
hg9YɗA9R;uUk:UkHw%&+UO_D"vhS.Oq"nG^":Et'i"}r;+l	] V[h2t
D?Y
=P|r[PK..۫]JwLop;1g4y5)ofm~zooks[~nv\kyim|Xe,K2]*]O$4STƴխ8]e)wS@7-Ytĵ׊q[-.+fU@+_+nqѢ/벜r#ܖ-e㺘׼E\2]"}+0-D+0wtBeAL:QMƍq33$TQэ$dCgmRFC#R26,; x
Cf	
H؄pNcJzLhƳY\yϗрp2z$H
x1K^Z܍WxU-x9+^	z7Kě"aop 
oe0G$:	GZw0<QY6̲a<(n$F;w2<pNg8pQ=x>.$۞d$reX
>$a:u3cϰ^,ϼޤ
@t\6șJZ(C#*}<{pSaY-URQQ\Jdwz}9<h+I0f;1=n-aqܛtPl_dWvGG9/-p,2%'®&ɓ%NYx<H냶'>eg5a\#6uV5Ueb
a%9<AGc<arBYU gy90Y|sY|6G
aqBĨc"FD*Q=OU=de^'}N^(v+=E;tax\M-FZEG䢬+Q(兩8#KUܬ9$3J0㣤v\9tF}Y>'sQoۇz*کYsh=愲Ɖ#cE:W'rn'O=pQ"q+"pp gwQ|~Yw^uboXAL+YU#ampƬX4;!58i4m9p;`8PK    PK    A             2   org/bouncycastle/jce/provider/JCEDHPublicKey.classWy|֖z
8)-( 6)$ئƆXN}&t-5JYN6}$%M۴)A2qЋ&}ݦIʖmIfvyo4=`;T6	oMߪvn S%;effDGu[3b8#DJ5eT[ԴfXOi[ʌIj&I2j<-@iV[<4uk<!@׽F$Ϛl#$lC?%̈́J<ԿQ@55a#mFDs^@PÍj	̴c~Cj<F=t#/جj\XH[f&beL^sG)r\9NT½{E'
uQ'ΰX5e@qՈ)q5IҔdhsp<xV̑757Dt#'ǣ|}\٣xxS"TJ*4U9F9rc)AX_	'as6\NҌ)⚢mJ[϶وB9DGi1K)_5;6'D҅!`k"Bv[Sf0bB/Ѭt$nVDcIpsKUU8;~iv>B&"DDSRfrR6B-9KeHZ+a$dEZ3u5>DQ!
;hHSS7Ve#FPRZKN~;F$lv7B^|:X|ÓElIfA"B"D4hE"bm"<EqE,ED].VĭTݗ,Pb5v/dΚ`w].$n66X߽pc#W.;2}Ux]ed%\RF%l6u٥VqS8p
n&VGZ+G^*uKYE|}-}҉bIl5kK/ES$K/<;b1ވ)"Q6+EZT(E4#r*+Ϣ$^Riّ	P,זfv-Ԝi^"ǙV7bTXXk3G؍q؃	
qV#x6Z C2`^R&9HX
KF-22IW⨌Mɸ/aKe`dxkr:Z1ޏɏ~x"a?	x7{%z.	}S$܄2J3i% 
A|^31	7ax@0k.g0}p>q	XA	9<vne^O0O0qCt(k$]ړ0f@tȑjjkCiHCTSt@'=Nv2n)^#$	5dȅf?Bovgr57k97Ks@eJ3l?8cw9͓9|}WfVJj;fF<QXGh<Yy8e=3YYÏ6!鯲4~t<Y|.Trqo7_;~~	Ï,ȝ<N6%Ǳ;K
ïĵFr8ғŗ83~ZZtQ<^+D"e "$OfC$>_VWR-&y]N@mJ=t."
G೅q5
Mg<4D s9|g>mO^iwr\e|q^0P{^}Vj)4{pN4ѓŗƅ,z=fA9Ovc}p3|<n*Ht~k*Ê]8@1unBY%79}lhhPKf  i  PK    A             3   org/bouncycastle/jce/provider/JCEECPrivateKey.classZ	xTǑKӌ  ,F ai$#.1zar9qv$Ɖm0G0ā8f7{]b7FoF#'-|~M PKQN(NTM(YajVhfJ6蝄nO{;[vut{y[NBA0]Ӣz}lsoݵvUOp.zvm#/[ :4@0df-2-
pاYQw,|LO
{@yaoH^.ѽ`5Yi{taݭEXC`PTo	5ސ:G[Ra6vƢ,PAa724o4ȖȲ:h<,!a67mގECn])7د^<h)Դ]aXCww"Q-e%<2":Ec9V0uǫO $1;/avz0DpĴs`Ҝ(^
Ӈ۴f:5EңO%57ѫq{43s ͪU9RH;'N?dn)O߯{l(JhE")mGctut=CQ_0@JPѽP,
sݱhd1._D<At,П<bj@bE a~&54f8wZ}> rD8.C.#6w*n%"|#uL-gJ1~okwjҬ^GC^-.-Xj6NvRs%[
Z&ǲA_'.&yox(
Ap=R
F2@ݞU]#Wޘau"ѵo5"gZ1ܜPƿ'qqƎ|t;I9;]IrG$8Sʦ
2wuŢ>?kj-a;5%=Ӗ[z̺}"L/CNOs61>F!|"<H(k/liɽq*#Mn՘q3rnh~2S%VmMIfm\.Ҙ3uNřE{r3rżd8gqGmC1?1%vW`k05
۬H3K(L1%.
fh0q;*v>lǹĹi窧'-)3)(,EY)fbf)f+PЦ]vw)Pp
:t)(VУ`^VG^)د{ܧ]
Wn


)PpXO(+TPәyoV:ˬ~kv~dPb[VJE5Y_sL'QY3ƚL
-}dtdONRyvt)䌪;\mMg^oJè5JEYKgaHX[l%
ɐ@n䓔9`4_5LDn-XYs5_۳a4XՌlI) V3h[cW/`':2h{"`KrMfr<#<d}
n_2Ӷ)[͒Y$&$ޕs}ђy6r<6{·tνlwqͯ욖ּݗHf;y`wN$Ӕy|4۞i:
+$a44d~x4ĳ~-ѓN'Tr_ʁiWGR#PsOCޙՒi٫o]
k^7aN㕝Rw}yXڲ!N:HLʻ巼<YdVR#ww|/8e;Q,'|bJ|E[pAEhTEN\RE*Z(V%*"5PTlxJUDW~JoLzX7TTc\*{Lhc帬^vZM[ރ+*[*mKpUb@#"$U<(p+~(~b~EfUfMH
*jc7Uo	b>~WE~Of_bPEL?Rр?k3?+*wT??K'H_ÁO|gq݁ap,S~*3xۉ"0ÉS`R,N<.ǩB`'(%P)PēK
x-X'St@'hۉg&@@-	lhq9Z!Չ\`XD`@@@*x^znX (^C`ig3wF^*N|6	ǉrEqT$P&
X&p@gTJ`k6;̞NHxF	ψ<"6#byQu9eS'\`2|_nE#Q@%gY<"<%|%(p5h-W
c\U]\F@=-A!ytv]q7J.}"w3wa_[:]%\wMzR6ڊݕEMVͷF8]4益jd8F_UQZKjDg@
xPଂ@ˌ
lF!u˾LZJ-%\J.~CE:JwI{0q{%7,姡_hnϰktZस%*gs>/p*NQ:jjFi2bxQCq/(xYTbKݲekKUq"IPlp
72yoj|Eʦ:+5So*{ǁа:7d0J!zfv>G?E)uuqz_>2F?<9FzlSQUU4ʶ?-T3xKw>cyivIcOj4>.j0p4w"`6+x$zǌe0!qt>8!sPr]~G:U0su,Ti yX#)[ŵu\V&gYӅs
@2'/e\X+8hD_:Jǻq~ƀ\l!JFL)8|_8N՛Ľ}I o):JzD'';5jtq^^_4JJ'h<*l"
0椨Ly#=q<7OG9w
cajrOd}{.4OhmۋSQTxmL똝bg9:+oH
17xr)Fi6Grkz?6S:cdfARIX$^w	D%kc5sOԚg'OWGD3T	5̶X*UJ%N_Mp=yYJI-V
!,*+,u磠xCfY5ZY@,U]H6
ΞBq8ũ{8£8qIkeP踎eYT7K0T/`ղZCZCÉ-%Dq<΅XowUqurJ@CR
1zTj.tGERyp`zU-{XzCr5i8K^
i+DޅchoB}j:V/N|9&PK  m+  PK    A             2   org/bouncycastle/jce/provider/JCEECPublicKey.classZ	xTo2<4@kDdB\Hl 8<d&LԶVֶEZ *jD3V[kW[Z[[jmf-5=7K2K&j{{0%8>q	6Tiܲz/qZn6Z.~'tGs5ִ77	9hQҽq(u5ͭm,\ _VP59[ֵ֭"/]\@VvN|n=.	V]~v-rtkn	.Žib)SyV4_ǧBӚbc2O
>@s8dT-J${|]7.eo	i?aK5.ڜ-TeđvsD呸o&P%4bOBc"cE]Dswv垐$𘏝EV̈wZ7o\!ci}[UDt4=1Ԯ|ZģV!ϥJݸI[76,Cy4\P
i[,- 179M_ŭrŉC:Kf|Vs`LqYaӢ+́/t-\lVgp\M&SMsdNo>Lذ'wm*
}hPk֔sݡR}uT9`Os'Ȟ'z&ݩB	DEq"C͈!FgHC	3=FCz[j=꦳SEt:`U#F)V`d!J1JSyZܔ	^:ڭZ<Uɏ3jUΠoaUMkZO(Ttnl{z*sݴ-vΩ4e%<驩Vխmzi+ΏPV̥*vZF/ұ7SYcEbM81O-
b;URg׹i8WmXlQ1((ge4aE"96/u[Dn8KϝaN/%cL&Il\m.6xYI;񒠥8WJVgJOGUwnJ+zMIfNuڌ䑚ad0@Hf'E)cgLtEiӹ:$7Su|2{rLeg"%83#VtRH>qj|ff|鸜RѼ
V5eTQA"M^&?.hQRP
B?v.jP|9K+z,Sb
1|XQ(8A|m$.X/A]bąI\,1K$%\n	MbDV	6K%>	DeDH[bWHH|\JOH|RSWI|Zjk$vP]0YAbصkf'iۘ(V#g'O"	%S"Q֐`]o3G$V:EqYy蚓$%2yĶ>xh8?)*~TKle禝F/'Y[yYC6EN;'jX8#-i$D6Ȳ(ǤDyJYB=y3Kq2MgM$,8!I9R좴+Lii:[߈dKUNʬ.5,otkI኱JMFe*tc]Dvj
GS'/Gffڜ,6i#eL&kH)YT2UM2+H23*p$zETHmr^V-0䐵)j\)j)yCIf+.-UዲqMbs<rF #Rq%~O
6:UR]2K;tߵpfV6kDܐL9:u_9Wf#zeDE#̬@M'YsGqFm)Ki^hYLᘕ=VKbƝGw->!O(Qq"Sq.VqC#$|_E=Qq~b~y*&@hF0CEg1a<×D!*OT\8Ϫg*61\gϙ9yf9xQE-^V8a>~b^UQ__T1Loxⷬus;=OANb1?1ݛ*f-j**2EE9KN;,o*f*l*Kpb*U118Uq&0tÐbX)h+	ڀ)<AgǎS1]1aNf(.#Nb!1 %'00aS+`RpXf1K-bi
nb	Km{vg(/f2T3PRp8a;D;XQW)8WݢRA^aW}PǰE<N}0S 8a9CF?2|R3o?3o?3oX0\`@4 Ca;=
"ɰKâILp&C#.bV0Cl[0T(e(gX@$Vp
d'<633\)BVVbʯ~#r.mtv?a:}69 j)-,,% {;s]`'~qaCbW~۫; !I)i1aIs$,N1		2+S#qPƓ(&,Ti<."mFďHS/I׮S8$>@[;oBI6Jc+qDǁ	]dnuqsɄ-Q&Od%,bxm62 ^MͷWPlC0okTqXbD?`h?~}>RizJS3n	=VӞr3ؼˁHidK`^AߍS$NX|e@b1KBFӿ8+r IoT(i@5tg2Y䣐Iaqo#Yw!ɰط&b&Oҋ㫭}Rށ֢GlyͲLȢ;0ǖW"m֢^ƝKRw"thY;@DUK_Wᗼvş80kdn-ǂXnhUڃFjp-6?Da<S
*}æ`\L؃G;Q
koIr)9%<lDIcUAn],&-mսlҺغÒA<> y|YA	yp{?٤J|qGaqDL5xͣ0
[s}wBH>Bg/X0\faB07Δxb+P @t^`?%uauС<
'R\=sKbEe2<ŤM=<)',p=Bnzç(A!cG7q!KDm<{"Mx]^i~#"~BOW!cF{WDhŭpe}
Ֆt9V|A>pSG(+EԀ:OR'.&J%8!-<<&!ga2sM]+"Ck?
x5(:Z$<=R}ݫQa
#>ՁwQXlL3~:jW.*3Jyl\:4eڒZBS*X/1]bhz:`'!MNeN1'{c}?苉)d<SRe&vņB#ƲwL:uWy_͊ZiNR[MI`,(nGcd|%,nzz)*
%~96NlX\gL.OW7ARʷR߻L5Qd-/{MQ2(k!i@x),%{z/"f,^j  ?u	_sЬŏ
0b.!ht{DQ`7n+Dn!?6j
R\N8;W~PKܳ<  /  PK    A             8   org/bouncycastle/jce/provider/JCEElGamalPrivateKey.classWWWaZP*.521h[;$CL&̀vUz?&3!$9'yw߻L- [q|	J9zj-{Cd;ݪ{9.9*G8p~;XʡL6M+뺪*$-9%+AbX1]]7K3F)SF;`,8,{	R:ӣIS|Ƨ`{X#rT1HgW~J7#qrT6ЦPd*@b<!KjLvN4h$w怩+2?;nM&#01޸JӮ$8TZCtRifqYφ'>7cJT~9̃6p+ƵHT0
ʆQ$К@SʧZwLtА2ָCJR4S1`;B-ɜ;\K'o"[ɑ1L֚Z`٩ךcAE	5$0et5(jD"R!pTvכӯ}}8	6*Iurv,ɹ&fWn{eb$+}3LaiaBFҗSJ]s5+EW ŏnQ_1F旕3܊#M.jS<V<VXãZx籁ǃ<6Qǣ&y4x4hL5ۭdⰩ;%HeW^dF<9.:^u-D;2Oh6tT-	G|>jU;4:WxIB`ܱȓF;l^[I1wX?pD!OKɷsJ*V7şh\˻[nwQXB5j#rg@ց|s]%ʜ%3afo-nˏ.;0 GD8*BĠbX"D℈<$b)jfV0SGD㔈 BPfCa#̨lVe"E"3JĘR1ffL{pF^L
؏q^<̼,=vЉ'y7s</2󪀃q1|lLԏ7tu=lL03̼kGϸ{KehYf)Cx^w7xc_	z7PCQHvrJ&*N6Q[IX
!gi*n,z56Ԯ@_upnޅ96ۋEŅ=dϢf8$yoW	ق{l,H$G)5lKR.RI}D3EBDe"~)voqHCgYns8ߧI"rnB8w	|lNlI[Z%%{rd3YAK''w&f5to?Tw蔓
jCu	\Ƨ3ѡKn,YX4{zj,<s*L4G۷іv\n2cPLGmzjzީݛ^nf 9Vlg&R+|=!z6fLIwgTEmHI7Zq񢍠:c_PKtRf    PK    A             7   org/bouncycastle/jce/provider/JCEElGamalPublicKey.classVYWW.[C*5:ja((0$Jbӌ===41f8h8'9ILΙUUW-;X帇8X;PPvTV'k)1``[4ˈ&Lݺ#f$5AjVֹH޸hĔZ	CWOkd 'fLZ1T,%j0>),L9<{OrZ)FE3b葀NF)LVht,)eZQ't8L[#)ۖʆV0`
%{%L,{!aТU3iq+Tr0l(Rn=[ZT3Y5gVB؜TT-%N-ĚaT^@Dc<.&aF	"uVURJ*,w6/x菙J
%'uN!MS:iׄqvŴq+iBg*XCsn-ăcNʔI31G4Ȍr
/2UKY0ӛ15pVAXZik)/)-ˤH7,]f1F2Q߸Jy 6[:_
-
Mv;+`]v#`'`Zu48eu04%xS>|egp`7-|W. %وMځ܆B7OGGs)oѩK8-Vh]6Ƶl#sʲ'fR&c%䰩tKȃ:ZqZ Y.hmQByY0Viئ%Wʁ^Up˦֯V?~77E]y	p%P3P"Aưf<#pV>l>aT&	>\ҋ7UZD$V^\)DE!
1qq>$NN\qI>"N"ônU!~g!/Dē"y@04̥8+|HU0Cz'axwKQ/Qgy`7iG[фr0|O"^Sh^G2(VQJ`_[V783g1opp75
^e>2kǙa\Z}WY1r5Qr(;!-e~:;I< vWP)!$ogm||
死8>xK6xQw <g2~xn0j@+n_ږ8%K@HeZ+	 A׉u437l<rC81GhW\p&*<ksx6>uwr'oǱ</yx
>9"j)4rqg#+|NZErUջ.O3xuoqyJPK9t  ]  PK    A             7   org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.classWwƒ<ʖb%@c.ڒJrd'hy4
+7$I|)g'	"J>I9^ӏꯪ[{% 7, @M X@m +|PDҚ46Iw4mS9Hz96fx9^ޟpe\DzĶS<yO鞙W46E)llۡ`mcy["}nv;:cmRpծX{CT5аÜ&HΨYż7)|J&
Jٯ H1Qb:r4ws$3knTPM;N3,#=<1L?~ԉQ۶FѼ(/0uz rUgb\OwR޴Yٽ0:
֝H[TpPZ8gI)H'-oZO醙x"lٮM%L+Fr̘Г,dvkuqmM;ƴ<ӦuuK۶
}FJ92a^d$lҐho.mki7mجq`|2j
eDNaj;eӓ䝴-YFI*h+1t'Y[1b@E5F_A9̅#'
nH>Ae4!s[<Qp%j)>o(ڔt{v.$믫ʾ%V7Y-*6ج6PU*PѮCE.̭)uW(X_[aa2cUcO4Sx{$_u/^ra17|?ep_GSH#dU^y*o,_tu1\:ΤCL1P.ee[ZdhZN:
^h,]lP@a6"v00b$50BxUqub4[aӇ>xk>p=
M-a6g<0ಖ::$n|q7<4}> b1/2|+A AC0e800|!3d&÷10<x{Hd÷ħhVz !G2ca^pFA|/ 0d8pQc31wt48^?51O7;twD
WQ>j
IQ,A#RnrwIyVá %$onn[ΰU'Y&S,qfax2^w<n?)N<+ÿ ?'?/8/~1y3iIeka8kekbmth^N͝{_*iQ].2d?_TfNf^f?y9
>S_AR!YQW4~˄qE>x"75joS{ڛ.Q{^lDzdĕrq&kn-i>5k%ͧpIy}IymIY3|=99<ٓxwAoqFT|4*g[^#my&,m>%'q'yâDxX»($¢ E
JX諕gPY1+>#*;xv^)	N㝋
sx.8n t*~^ӗ
*~^oЕ>j>=ǌPK  M  PK    A             4   org/bouncycastle/jce/provider/JCERSAPrivateKey.classV[WWxA^:`jk
BiކILh~_h_xhku׾/tuu@H9gog>W qō7$>Ԗp)Э;Ob ac=q<"Ų̰bfF;WR9RRBdԭ6Z(a	X9KڈfZB@Ge1f
ڕMٌ 3fZJ#D>'
p\+9%7HT!)7i´5,(EUZzY֎k5y+nBum4o0)Hᔒ2hH^W*z9y@OF
KKrrꜦ)Y'9ZNdH\VSWC yڞ1T%g4Y=x,J	mϞSs2WWB J]\=Xx|*5YZ9J'1^hͱ52jr,	ͤ-iB*-=%ە3sheq;#Ӭ_+U"
Grۖ./Uf\ifN++cN3u%5II)bU_]֬@ₒkt1/ii%?=?BD<(v;DKn+b"%`p[+kvⱞB$:p	1񟎘(w붌^n;+h[1o2~u#YMh_NP][СdoFP6OkJ=w2^í~NLJ`&H9ةz=RKyI	xRXȈJ`H8-a+%Љ&	1,b<І1	0.a`&$lcY%hY^>P<8=xϱx,f89/C	/g,/B{1 Ӌ0R,p
v@c1",,r^-hA?,wJ_0጑ÚLη[㖢Q\Mh A4Qᅀ雱GhNm2gƍLWچFx%pew~Bύgd!hUx:
<}+y|cǳܻ&`ė<s.{=lMQ1w4_,)74kq#	C00ubaoBh*PgWH4-xEpM7
ߡq)Mm0_"^-Le'^j\)%)i_'9ʠ)b,U&'|8 /eROˉ`6I:v'nqA׿6r(lQ)n$S@nKfE?X2(#Il*eC^_uŝoQe]k]<75,:PK/6J  
  PK    A             3   org/bouncycastle/jce/provider/JCERSAPublicKey.classVYwF&+(!ҲhcDZ8,	4u6Rn<qȒђ&K(/y(@sNw$,ݙ̽sG? mR'М0=%s>ޔk)PLnBK|9Pn\nEDn4?;?	t5D258'N<G4\f:\nQlݝ)1$i8`jV Mr
|˜9m1lp
4l%
,9qUSב N4Q33O1us^5BJ)Rk{ٜ)U9Yu^UtK]Xx-ሯ5TU.z%gy
tŏaϚ*ںYtm]QbtyQ|5褷U;
-Yn9em@Ih&jEޥjXvQ<S[T5:frig'9QƆAe@ֹM.mAٸ*'YݬfP DWQ5Cˮ\vL/lcVSg5mk^=9KuM\P5jGP6_|_P!&ZʛjvT:E"n1AZkmGfniܕpP!	)	%pTIHKh!ḄQU1#ͥAC5a5=tߤcn||xZ+p{WT	)u|?ȃCє4f%9Tf}DѶ.rv<*EU;ESљ֊kY[`{B2vr4E|7kq]*ZN!^2
2d$eĠ6tybXFdxAxCFƅ2v㺌}рxV0)$BKN| T!f[B#TNGz.D/fC1~ %%i./mb{cwB5<1λ67Ejq^&C0u8M/wyB|Mä5;cX1<2jCWBx[K_:ՐrBQr|<AC=@
N<ۿ>$j=U!}"D?40 Q3I2Q젖QG	LFjޅм=4ZbƽBc1G0OV3.|ʤ),,5wB$~$`W6K=ⱥo#*x;~:Rǖ|{GuYF
2'b$R_G]϶0jt,
 hPK,D    PK    A             4   org/bouncycastle/jce/provider/JDKDSAPrivateKey.classWwU-L:EAH R+hTCNi:%M"B
*.?of4r9sr޽`3>%UBm1&n!J7.a
ftlg6m_EB8VnYaIޟ30i[2t*k4lSmdeC¢1Ff
F3lHJAW7Ӻ2g;C<ntK5ò];1R[~]P*!Dn=úE$cI hf,?53F1	پ#ANc:-xT]_)S^.i=:ҺmfiL{A	2HX,|v38FqD:4o
	(T<1	ms
*"[R ,1m'mh٨n,KZ/JX=x͆X8Hu3JBsdo'rY{-7f8Gͤac̄w̴wv]h.-%(χA?œdO۳.@Oazz7r~W,3S/hHrQ}˕[;#c+dFƕ2X'#,QFfWX/CAFd\-c3ՎJ7`ճ2c:(/wWH\WV˒@,7vWVb^>4ofR4,,
W2gzT5̷7E3㊙+h+uO`.E3QҹӪHW=WQL\(bMUIZeCLZUI^WV]a</Y{V=YS_t}f.e#hs>U6_ةbvX:!Qq檸soT^-S"ܥb	VqKX`q)QXeHaJŅ07bX4Qfэq+,r,,7⠂0,WЅ܌C,bqax^Axœ,SxFA	Lg8^`A=aE+zO)c7gx,U#,m@'xDqţi~ȊogW)~^҇ż~GOs;9(QC;PG{ WQHR?
@ShB
RX47&70OB=BP9%{=V4g	t
P]zޣq= s&%:j+>?oz)|tU|E|Y=u6ʰn w(sX߹nsp8Z>څ5< e\S"|M 60M'iv&΄q|;/&p@S8>,
XtL[zKKcz^a^/}5	O"9]Kw0h=PȘzh|F,Gt՜-izUf4rݗ=*<}5oɈľvӱF;Y.
&QoT<GޥBjzqf	-âA{gbHA8qw
reNp1.OK9_;TMw*ۆ6(H1SK8=PK	RH    PK    A             3   org/bouncycastle/jce/provider/JDKDSAPublicKey.classWej
!&ٲY@1a@'mӵ֒]9w4MsM-AMH?%3{k[>w73mG#FȍhnFn]V|!p{̦bѭ?4'`%¸'CѾh ᠀[wi 1e$XA5LrZt6[S$ZgٔF&ZTAbR3Ia̃W4K˛6Q(JcęT(9`ԣV
=3ِiIh札6`,[NӪgPlFz;4~BKRԹJۼml`![h5T2)!1ҪїO̃7>3"oz&)-/`-TO*{t,ciif;L-Y(:jR3J㶚 ;iv{ܽgR'p֨8fCh	-GVݘͧqJSr&)٪%7sGeuS-姨rRe}Bgk(7&@L7YEG9vT9<YY%giA8߾_kމiH9/My
Jgj>@kS1JGbZYGǩ f׎XID{Dl.CDDD.[D("W}".s"v_D+^7?Wo#*p7	qg8^BzbVkwY5qaU/Y_wvtkf+G6t3P[M7^rltI#<y}JiުjW)mPջ̎WyYrn)_WZr_lwΪV};vx*OfLw-w-o}SklyQbL-xXF<"c>/#FA4؅Ged*2v;$ɐdÄۘN&YLʸ'ي!n&ALEFƭȲ10YP`2-c=٩&Wp_i10}~|S<#!|]B!O1y]A|L03發䴄!|ɷ%r#!a5Yc5=&d*gU&oJaG<GD1f"J8'8< 8EJv>YkxߗnNXj䀚;=E;F9H?@x -4+C=Te{N NucIM%#R+811_~v߅BwH; ֧_xSɻ*=.>׋3|[rNF4r̰|Ә` vCrpZW;:vq?A^WszQQ&Js/-D%O!AR1Eܴ8K~sb.1րȸ
K>Ea'\E3vx6,][%;1+%̶q1a'sJ(pp娝0UUh3p]{ۤ']j
nf+G@w
4tQKK"~5K/E?1,.t
6k>g L?=NH[vIneϞdΕ, MbBDz/wd'<r?uOtZwwTۑr/{o[ PKkY8O  >  PK    A             ;   org/bouncycastle/jce/provider/JDKPKCS12StoreParameter.classmOPwl&0(j*jnE"t7Kѻv}'_h"!2<%fwzs 6a(v!n	S-WL;?w}ɭCY;mY:>sst|-{w[\[Cud=;]EÐU
>׋jV; bTnc!3Fv)d<ږٵٗisi7ZUAԽnQZ4]~>KIFiiL.4k5LhԐ0Eaa^Ҽy)=oGU7$8赛c_ӑER|`qOG:`p80F`i,	DFsuh$cȪkVu.s
X%8bBcГgC<RN:=Mw@t'_4ܿNRsRJo9Rb|T>A56K[<f,},bf62ycxQi7@(`3qvxdPKo:F  T  PK    A             5   org/bouncycastle/jce/provider/MultiCertStoreSpi.classTmS[E~6,$FƆ@Hnվ( VB)A*ڷ^lS?(2GXل$Pg={󜝳?
v]BU~&=n0D'gXSyڅjT^KxE鉛BMYeYJ~/[	bU*,ya2ժ]i<ZRR& {6]+yH8^nA|SN%jݜlWRE˫v`
3%%}a`CeG9wQz;}0_ǫ9%t}M©oeڴO5.XXK,]+e#_t銫^DQbRV%a͞
2dIu̖:/ /*1
P~m688q$)8pq;WSD_jjNj5bdOg޵vSLZ{?/>$iiJksV^zP~7X0
$p@!]h3pLn-~1\4%=l㊁(F
ubW;ŵ(Z|EQbJ/ EҐnh190OCh1>W6]߅vMۥy{4K6҉5iA7Iߑy;8^[ma e3[m8aPMd7Kr"
ܧ&gV'r՞i_	&^03];HQ
D~Wpf4QOpc0oOob.!xO<lnw6@7Dg/5&y$Hs
F^`cc/㳴:03_PKſw    PK    A             -   org/bouncycastle/jce/provider/OcspCache.classY	X\/!1H$.CBYH4e38 n1kFmہH[vQIy330
{Ͻs93zŗ #nÎ;
(c+-ޢ+6qȼMdo6[/sy=>x"z4|fu=jaʆU:6nڲak{\GcsC˺ARZ0}~uv	D/нnv-$' 6&.>GRx=.}+W07&a]Q[<\f * A2۠YD덀ٸR ;o@<
ۨ)b3I5\~ǥA#vnVl7eDGzlz7
rhe[-۶.#ҿ-bܰ-.0~3aql~̨n4hIAݤ:,Pc8(aǶ`C&Ø|aC֯ڷók+mzJd]fzXk}@.lD3I>(ڮҰeMrc
_&b{u_#l8<n:O"uk2>0}GeaYY֬0Mo][969glYv1cum&*k4\dAzbNoEn&xXSjLrKG1K~uް#C3Vf/ל3ΰ 1bZt;׸]z=[m_z6@Jņ2^:uذ4?PRFjvk-NE-J{<LL"҂Gch'Y
N
jhd~l򔠸q۴1Ip׌|^c\IvԵ3ֻIH	.}p^ҸݣSu}a(d轆i9D#7ƥq
o?e`_?<XNFR'5NFqJ >H-K>M$HbBFZ1({AH!hx+Vm
91lŰ0{$pEA*(y}1̊v
!%J_L-]IԹώv̔%Q+Q'Q/RAb%%H\"$,VEUR6vu$6JtJl,q[$J\!KlpI%.n	v^^	_OJR)._Pkz&x˚bSoMS$,qIfM*HlYaRQ^єYI'4fYlC늣S1KErD.Hߔ(>u'rYT8<T+օG"exxY@E'L("jb'Xrc
F
CdmO	.^UNPI^EEm
p87?hB2M
}NKS&V  RK_858'0ɻH$o$">$rRbhńZSu
dm\6M4Ε֥-+>æ}k̾	`3VZpG/M2	&nNRl(9?iPW~Ti"y,c}]NDL@S	Gفɶ,k L`\0_~u[Laww8v$*E2-D˒A*'QqB*cX
& U,dLaWq,cҏl@UI>rT*ሊ ^TqFU3^R1/Q&2OdV|Fz|V|SQWT0ϩXϫ8/X/8_Rq.{|Eyu
'g
US&Uq
g?ɏ'~ʽ19"_rW*.įY0OY8?(#[:wS>6&L29C^$]37-&frLN.nDę
>(
d?^c=QA0<≮EGGE9L(xLd(x "*xBfr*rW"BUX)1I)
OYL*3dgY
<'_<&

^g+(+@6ߙ>FDز1$NcR!^w%Cb_c ik;8Clb@ii\3&)լҩD+AmFp>,6N
<,7(:&!G!qQ93ch2+#'v~gk0Bbǈ#
g0$vV]J2L~Zxc6,
& ;Fqw(n
3CB-+$.6$["X}y	GdgX;Tp꜒M9"=.M)9"ŃZa7G<ܙX!9*eN-אE6ޝ#O!3bvjYbɦΈ0Es (fN-Gck6|-/$#J-?=$VYA/[aFHN҈!Y:h!q>.vrSW]TR d.
KF#YlӊCݏਭGƈ:gh3Bbaqex#r35JC(Qև  Ĕ܏|E-boV@7ٰ *Gq]<7f۩e0K+>TE*XOH Ǌ;{A΋`^,a7zGa?XؓJ3:AĐX.H%xw+!;%/OoqL/8xăܓ3ť@ۘ!	S\DpX%nNp[P
)pxtv7v~޴Ă{(tS,;~O^$#N[*Cb
^'yaFIFeX{lD\\х>`!;hBHv0z#MhŽዧ8yOKVFuiA6o,ϢSFD:PKL     PK    A             @   org/bouncycastle/jce/provider/OldPKCS12ParametersGenerator.classUSg~6]U1-௚cD4*(j
A*DʒlCpI
-3/ЃӃk;S'^z^;=;Jo7H*L|~/U q[/#Ai*َGt::Ǆt4AbBLsi
łCQv8p
oez{(dMթ>7&XQ2t%k978eɕ.!7;FaܠAƌm}pA{a~1o8fda2s]pP*J"e?4/	S/i4k+F$kXɡy4؅bR0sM)vˎ1@'f(zv1HdE)%k
؉07Y%a9?<*@#yr#*ѫ++{K7+Jum	.-`jԶ$[zqɦIʺINɻ0
\Ѩ{Hx]B7$*MA	$pCﶛCS$:ⴐYl;MYl`O8tD;{>>+Vҵ9#t1>h*018=
d]
 (P!*h(F
cЀRBky3`pWH N"`X 
b(s 8AhR
خTXv3:zvF@v]C"IWpe:w8
D8Kh(Xl!kl|XXYC3[U$&Wqrr|A#г"!<+0GV$hG$ZA|<^r{~=Nia:)pwLOB*撢*~UbO=/׉:%q}y=E'ǭQU>6E^A;.cKYx>PcK"1& [b-,|ү5[4Q3UslO~_3*Yox1oż%OJݘ~Ub$ݘR]L$JkOpK%I2!PjWfWCLa:5?cBH*BwhmCn[R_ydYՀ$-¶%$7Ĭ& ~c~#,f5\Q˔߄ )@5?8AS{R|O i=ҴsY8)<hiְo͝f\=äFټZVͬqD
סM+Қp=KXŹI!F3^)PKNxi  q
  PK    A             +   org/bouncycastle/jce/provider/PEMUtil.classTsUnd ŖXKjA!ڦ %Tmr1tg|M;xGQ4P~g?`e}2T^eeg->Ǧ3WfA3S'5P%wNs0
|dY6%S½bv*7y*r6aϲfaHVt-򂽋*,3<O1Mx*,镒U[bf>Xm=͂0i*N'ZY[iAu3]eػnfNÏ]73rjZ7HF:oF_]xMȧ4$0sIWҝXzͮ/|d>:	#KxY¨1	G$sϟw`(܏>eŪ7/fzl/ /a2i{S}[D˝ݤ^RyR*|V1,/ $'YN	ﴊITqgTLଊW90-ࢀ0*(2
bUǌ+U\Bp	,(pYBW:ޡ5qJPzyzC_p(\4MG_X_;vnE>xl#­4q7J4w
rݜ'͹{r׾đ
9
.YzfOy	_ó3奍D+&no?	|7ۤ&Dx CBMKRѪ}
:b~q|GL$J~ȷ7GL~)5QBcMGs"-/~B6u~A[n4MtIxL$!4.alPKM̭     PK    A             >   org/bouncycastle/jce/provider/PKIXAttrCertPathBuilderSpi.classYy`y=͎V8#tv"+jV,m\m3iƉkGI|x uMiڴM#M`73{j%y{~{o/~e [{4)X`(Y-
)Mz-
+ؠ `M
KKOp,nR*Gɰ@ ~5q~Hp3Tiٖs@EWnöNeT*m&13XGᘮ¹eL01=%0[6ibd:##xոrHRFqkFHug2Iq=v
IZiY`oy"fNfcIJ*=1H:^5Mgw"lX,g7lݸ#rI36@e3HxA([)U3Me7X>n2e;Eot<\2֪WQJe8mYz퀑4ML[iJ֢;fG[5/N(6fp$іdTY9aŎqR^)*Mj3O+B<&lL#s3{vu߾y&{Kwkbg\*'5ּq9pq܈X:i9'#IˎYFF-K3XNr<M^IĄiP7yv,1bnݸ1gq,\C(ԜEE悦=jfg|(mĉ.6ZfHCY>jfV}7S:s
5v.θO#:2Rf5\g4sy0{W@N77Ju.1߈M*zH<_yf%"7.箏Ҧ	NiKbq~Hi}Ƅ@`zro4y
x>@(5qk`XQ3D^$Aӎ%Zm1D䘑7O84R;'
Jy5)m,W3iasW,!"
.̭Dgwj]nܰG#^69rn9y֞Xf u=Bzlꌏ&h>6b*B<[Yj^ZzJ)[+umިeHaq9򜢺/}=\
Cm[@tJP<]Vamjgvx34N3)NE7<^#56hh}ד냕yfe3GrvUgD>l#ENPGJZ>`]ےHFF)'nF)9ؿk|/֕&;"S}јq4fH&z]rmesp-e̈=n`cY	tUΏ틫̃>]|G,vۨs<U}^ n9pW-샭=Ur;V|bVX*;qZV(c*i'Լ'=8HYe$g5
*U[4+h,Ļ%#aHK$F$L#cQcq	["!1!DR"%H%K<,qBJďJO%~Bć$>,?%Jҳcm~xCޒwqstWRq˿W7"OY7V5.pfa:o/+V\5z
۴zmyg 	-#f]xt%-}-&tv,B]=oP9{!@-唖8L;)B<V>2cSEYt"*{^]Pcno_۬c}y|e;\7{VQ^R.gŻį,u06NN\?eރe q
W|K!q<GO''~z}պrQjp1~]VYa~Km
}XcLna7h8d'Vkܨ|YI
Q&w29&28ށp?~_ik8i؂?..n&{Ɵk؅p}K
܁k_khx'V6|}zގoi؊pmL]՘WcWP3"ɍ*gL>0Y&&xJ4xZH&*gD%F&M*e3Lw/{L^W3dQE5ULt&kT̈
&!&L40Y%8<zYeV&Ůۘ
QvX΄^H ~%"4&5A<c ^25&sDX;˼<$nX- sxsym3gDf1b˗9~}@F!4oe˔vQ>J,*v^BitOilC3ДX_3˘4 4%n$NkZ/~JGSD+^#qo8xI($V+q ZW_BilCLTOE6-zE4&QUgP}Nz`ZOSa
ˋlMaWN-]oE\\(hP"-FT,j
ˏҵKx;3bWF=h^rĻ4Z7jMY7`HL=d=<n
!?0Eqx]s_[ZΊ˨s<qD+<;ugw=j)}	"8>BzHjBDĬ$-Df$E>s)ԄBd$`sy'9mY)99+t"k'
S5GeUTn[WVq
1Mf	?ǉyujP^m®gս4MU<&F*qO5^"*W;5<DmTg唈z=Hd9)+'G'Q
sarիjҺ"&r[e!:ҫu5#br')=mkdbbԫ۞qoF}aoxgp,tQwnz9@~DWyOL!}ԃ~SllQM2mLޞ8ɹZVs'UZ<t:3(؎>y3]t>Q'MF X%Z\@_W'ܯ:M5!}a(.dϸpz[IOsJ|A>עzeBk*B;;zUfq<iIB*UBE
u5p.ͅtIq:-owvw=p	NU\ĥhe^2-
zQ|Ty{wOCsmg蒌è_V^Shtc<6c8/P|
֝q=54ΉyzPKE8i
  "  PK    A             @   org/bouncycastle/jce/provider/PKIXAttrCertPathValidatorSpi.classWiWW~F"juѺG)k" vL.0&43Pm}],?ؾw!0)<{}3/Ïx<z {PAC.	̧G5˪}daZf꜈Y%-8x\Bn4=thqm<nG->Kjnc%vltb[E"mL-	k##܌?Q#JW'V:,a-jD4OdI*&ێyvO<I5£6G
c3
#("
ڶSD։׹eiMbR#4#Vә+ǆ}ruQ-Q
{GGx\Bau[|ښlj(ic?Es#!SpkH!r+(tpN,ɢƛ1zNy\#)i~uӹP_tۗ1$lqXxܱ+QۈgrpPCҘZ
s*c~R,;C6sǧq:G}_T-Mqfod75dxl mvH́E3.O҄kkgeӬnt	&QD.q*?=P]!D"rUlnRT&չI;ݤ"uSxx3İa+6%eU~5u;dy뢽I`IikkJZ3wWqawSŻe[@;ųzSHZW#@h͘$Ss\PM#}3:	Uf4g$X\Tp+:n\PF!ػ4eMh>k%볷61bK5q
Fֻ2$}qnZHy--*-CߝJWQe<ͼ0홟<ݽ7PiM8<PlFѧ:W++ wS
6AFܣ`4M+
u((W
nT'܈Vp+L#2f'11. qH	hЉdtᤀ8=gdqOxRS</#
e0<#?6 }C_'7}!)-\|lM?Ѧ nr7>VОO-=m@퀢I^6P$g5"	.G*.!wUtN`4M^*N^kA/OߦNo'@&gvKE4*.$<YsnzTo'N\o
d@I`"K66F23HKୀʗ&PBp%CXAPGi."U:ST6JX?'Z|(PCZrq{W**§DVsP$"Spf
9e95c^n:R?N'!2BmίBG.:Z(Lk7PK"  c  PK    A             /   org/bouncycastle/jce/provider/PKIXCRLUtil.classT]WWݗp'
vжLJ5X[
RK?&N3d>./`Zվк	(y0+9s}{{~pv!
N0z߲}+FoR]۷7
P6KVAbtqB E˾W	2yNqudsŷK+`PVb^te૶_]2}{`[wi
3olBEe־/	!=rfYiI &c8f3
,7rkEAl[%`XD\~U
C!E2G
q H\3˅MlNPF"%#R^iyEe}6,sͲSD4Д]EMw%cX|"or!z:Dlp-9z8z9Nrɡsq8Qw9pqD,> 1f[n5'<WH&]&	ݱ9O4%cMB̹ԅmXpC8!cSG/3׬Z?hﵘ7k
I;8A
0!4E
"t⒆N #R7pYCjpEE?>Vç"\Sg*sIQ50)¬4UHa\O:0ƄWEtYߴΘHQj	я!GNz2I`Q PGhA"iOO\KǸC=Й tyKOk8Y*!ӮW%&fhbm|Qt94]Inc~6ngLn&"
n݇+$):D1K2
`KtҘ#RbWFIhD}$*(l64**Ⱥ?0#y
|C|QIؤ6
4 8XlG琇>"n1sX{BĒ.F Dv6Y PKe6  o  PK    A             :   org/bouncycastle/jce/provider/PKIXCertPathBuilderSpi.classXy@=a @̊M4n<
D`HLP{&.3tf&5i]=T ښֶjV{WkPJofr{]<C X-Q<?QGqDeA
	-kuRy!tOr߹iXLӊfOpn7Q-[s̙}%2ZXOw41v38);A-f@1n(Q['	7$,;4⊴[A`>-ܶeN0dynr!/l_O8⢙Q=hma9G4=S(o15[^C[6b#q"0X«K&t'l6Ɂ2'[_xمd&.MD`.{9m)5W|3t%XMѢ9z6."Z!I&Vq!<"O	LKCi	VB}6[m&鎣	'P
ڀ]3ÛmU'p>LAia[Fn{6W07@n>iׇe8⤧p[vdS[O^I6/yjS@mj|P7\mPkifoS!Rr,uSz	θMGۭ%
wѣ	ۈ7AhZ4Ϥ8GYmnS
gYM[:2&I(K9`Η[gKW:#qq붴\
3ΰB䲧XR@`'$7bMͶ
ѭ@1KX6W%_9}:Veiz=Y+UlGβ{WGMcljl_{mMvCLCNcvDL=\}s
;-s|5&Ip ݸ($eQ/9^RI(%GE3?eN9g.2bP]U
·{hUWp4l=qXg8Gez53~*v-Q?NhhHFbz%.hx$%6JtH\"ISb$$.Bux%4n]5m?^Zc rMh:޾x^P~yXyz6U&#U+i1vmu0.ftV0OΕOL)-؍ނIyM2Hi4jD;hH%z͊yY^:VNScFʺVW`$d;"ksdvEyҺBS]2
\GhJm率;̥~
ڸ`NZ2jϚϵdOyCn4mLo;_5az8֤&f09@8**.*΄*֢BŹRCIxStxUfcĻU{T4*^1XU'*^XhdXp>	QfX;TlGc**qA|TwaTEQTq
>||Z}|N|)ތJq1ܫ 
×2<}L=8^)UxLռz-Í3<];8÷=)	$STp31|
v]nvxY0Bg=?U}ً3<]kbxkeI2\bgx	2\/IP20z9_k33EƻJ-CU\#\b)ͪ.hI{QUzJ]
}y<wyäOcW(㸹 JSN`+MK%I`L,1Q+0F<I ޒ/cgWcR&Łb;!)I╭\f$a2@8~[KUIG'EI.?pI~Q.²qLHKNpW5gUa9:/] +yxGų$^_LLKV
$>^uνE"I*WRIeԾJ|X!L`!7$!^I5& q:grl,#e~ݻĢ"xא4=5;}TSN*2aƱ+%Jx.%KF17,avU$(_A_b*"p8vwU	Pi%ِ1gWq\g_S˾Kfksbr5 /x1xE6ǎS-iO^ż1HzFYXSᑯL2ȵU(MNiȥxveaYyf,0w>؂maoq1G0(NZV{+PV,+ȫa^[*B!oIb&(-&&Iodx	ddM(s_Ϭt̤aՇYu/5[3Mm'qJPKOw
    PK    A             <   org/bouncycastle/jce/provider/PKIXCertPathBuilderSpi_8.classXy`m&@B,x,6	&[(H@fH7af6@RzC.1V՞U{njf&Mv my}<ƣX,B>0ɇ>TPT>LhJ ?76:xWB<
/0b}V#0,+nV#z`k|܈eLx,Эٝ!E
Dh{4Yz{`5jX6)	G$NѻƈD#`%D5-
7Z{|Z4eޒ7u+bsw`-
tC\;<Y3.M+Е
EE@|+emasܲ>LqScݣbƦ"vc(*	U=a}4*0>[8*J&(*jDw#т-4r dX\)b=d&
L\7=^Ýz(u/)0$s)5Cd2l䠮TG&JqGf^-O7gȓ<"jec٦}$H[]uZ(GCanYZIӽLӺ]Q#sD.wRibt4݉*6T|Hgm٩YMީGYJ֪nްݰܔSZn(=as	8vi=Z]Tuԅ4%13H/&5 ΊGak9ǥ>ygP3M.^1V=ޠ[(y-|;o>tբ@k[<㙺kFaek\dv|H`f-԰3mDMS۹:ij8wseilщ<Mk4UX&8R1LfG]uΈfQNb[oFf;U8+7RPgfmh"Pμd,>G5if
y'#ip	-G:pgIF
cFi"'jRգiq$]xm~<{6,[$7]QB!4zٸ6s+Ot8ΖJ-o1T&{w{ae]q_vm>0Ň3$oX%Zb5H\*Vbzf$6HHl$qfV+$x[%x&&h%JtHksJ+hkO{u6{fIf$qWT0#reU6Xd~eݦl4TM\jCoZ:r
kr,$`nřV>gT#Ejgx߳8qr2ePkʇ-UCĲaDze
"rV/'نlϤdI:0S4]*̰@m"Yy]ȬY%g=fV4EEZן\,sܵJ?lQ|9*jD1ﵤwIicM$xReD'3+&w5Ns}r;j<4\uIuLbrPU{U}*.U,2 *.b(D[gn2qK3Dp@|PE->b>̴{c*U	g*p W1a)P1*V0*Si5egU9xHE5Vql<M8<$/ZB_މǊ23|IA7T`xZo+p[Q`3ǅ*/
nw~C7)7-(xy_*؅2bM0<O܁3
v;k{z7^`=ß=*}kٵ1Ÿ_fxGŸZpkO0gxގ'Џ0Fe}Ib1ͰoL1bkk7oҳB
L@9'}sҘǕKc!*Xќ	)xծ>4XL`?lM	!~/cJN]GrJ>qA1xZ}EpK?h>h"{`3M
Iq^X$*ZxWRL;B?v&EeJ,V9In$r(̕z&ӂB[aJya%Mx5MPAaqf>QM~ygqPa_XÞށgyy'cs ~p_J^?rdOYpr!^u+^bZk*f*JO`2@94x%ĵ@UuI8)<:6ZLvh`MRh8=yb4ʻac7PA?q^LsC0[Rj,J08 Z)"P)LȢ,Tԏ=G~I←/V"A0 	4Y+U~O¤.gk(Xd>W-yO>\.Y_S)1!rmښ?3yՖ+5\Z8TKXa^&SE]p;xQtRC\^w:[ZPNzEHl%
R4]HHj]U^esƬוе5BV`=ݕCu}k]eԢub׳2E"N<PKpē  r  PK    A             <   org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.classY	|S-d-06Ida@૶Br$p6=;I6$ѴY
Єi^~/_RwIaɲMZ~wNpyFQbDV#qKx@&`ui5ٕ˝:qrFŴU5kjVYN`FVw
5շ?vYhA+M[]OZjVōNcl(u4ut979=mNe=llk|g\jZ`j4GƦ.wndmfggk;2K\ggvg4nk޳ӾIҔlvev$h=p{{ Lp8wk4/Y0Jl	D~A$Q~ϥ<>z컏N޸A5w5uڻ;{k`k5ף[KjA+i(|O:AW59|q~
HYMWxT=bo˳H}K.ӍjS4CP&nޯRknOm;\O9P9{-ri<mRy{^mqY'@̴$l^+nuh"r[@&mى]gl㐩4Шm8;ffi`u(u<:Lib9m΍QN̿ݪSry:1R"\PMSN+Y3~g$u{`7;mQG&cuUODsWcgbZ)WH)LLH4#]h=&iArKnԧ/JЖDMK
K`Pi~sA=No{'w-sJ3݁M>?-}uK/"ɫ0lh5OP
ĈFAB}{xTooã(Hǣw %jB|ƙ:(j	eNxFa:}$('kCv%NHB.KP;'dMLЕߗhϲwj'foW[F}	;1C:rp$(OÓTa~MݺmZv_K;/Nl8aJiӜ-Hߴ%]*G?ehyݷKkХV
xk흭zyTMզ<#kH5k]mڂUXXmb\»ߥwi褘j<=⢻71UR}M#(03bk}*j)YX=7.uK-pkTҊGϸZ.2dUO")m'&	eh2ףuSr&Иe#R+S4\n:8`&UkÑTێ3qBiZX=]>dO%m7>
mUT3sU[SIRIͩTRk*Mmt$oL6%w7Mɯ
 tUS@pB
A_!L#;ܑ=*Tw;E[ub;WI5&6%6F,5A	-anpK#&	\z$+O[~	$x$/f	~		A	I8,ሄA	H[%|P$&>">&v	yō^K+T{u*{bM]Z<aΈ:"[*S"YM$(?h%w}yIbH}FV6gwES8[I9{4-WriYbu9PY#,)4Rv<|,RG$"]ֳ3$`FG59ӤIܭ>ɬB&CB+g*ñ^ϛʮYYz׻mƮL5SH	ì|sM8_gX6]p%c&y=k%+tS)
a:ӻk|_Oѻ_#G)ÝǵL=}gĂdcotԧ?sT3
&VL|>}3.	Mĵ`@.3A%/iw*iCO/є3ݟ3u'vK9CT2tlF^͙)oLΛQ`+n9={5y%mFO,3щe2JSs33T0,bd5 hf|-(>.;6d1s6.042`Ưd8k
;'[c"ç;a,w2y/0<߰ҿ'{+LG;O2ރX˰a3ug/226dTe\`:Sƽ/*WQ'c5ސ/)SxKW'w23-Zí1[%%"[ׄAFȑ	1X$("WƷ)?exY1O̐PPPP`f(a(e06{ƄGJv7I4pKM	ՄaaBXej&Il2XasՄLx^M8+:L8'12lany>N.7"O~}\7Gb7^>q	C	E߄n]&*v(`kðaa=2\p-uϰ&aC/ 	°81a9<)QD"opxM}j~?j~gPuhQ^xOȢ줲@-35@pQҩYfUecx(:XUx{XUN8JҐD.#̒W<Qlg`߰v(*ɖ4_	oQ3$j={{6$F;<Q<=ȜIfSHʿ $n92$8|f52:$>j3(n\T׊FqlYcGq~6k2+,I~Q4􌈟f<zX<iUrEܐTXBG2TtEf<߽rX|nȳnz#K!X|K(FȺ:o/Cc(>o+P
Y#Y9Ql@D9YO
UJ

=e+b&gEnvCrقb"ݭJI%DG'JuWmeJY*eaVBeJnX |	%9x<KÁiaX1TlE*sB6dkiG?xKG1d/FH|^ Du6}ͤFďyK !GQ2Wbض`m֊V%ެ*K%AVm喼ۃC0d7T(ϵY[y-y+IY@K2#Q_XY%D(lL+-KqXȖĝJY+!iÃȄ%J2!٣5$lF	ĸ|U/EGEco(VIX<P===ų
VXd+YYɧX\?޼%7śxs0޼9@y$<VvڪJ9\.,ya8'Ŷ0F69Ioz5K1/nh8yRqwWԏ{^"yEq+W={^󜛁x_L	In2_(QzD16>yKGVr)|OFb$CkDod*ǣYYkx-gy%k8No'P6]$X,\X"99FA%<)
0QI)	LȝԼpunЅu)1FzWs-93|9BwO1:P xB³$Άd]}nأc(|KHx8^lH8MP8F.\S茪"I`ȒeFTtZ=
בչ
=g	7n#v>
U(ҋih܋8\CX$~7HʯxF~E3hz/,Ka8F'lˊQ\ra骐LX|
т$ޡzaHi.Qzӫi׎G"^eQ6ҿUu[|XCmӓuPKe^/<  -  PK    A             >   org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi_8.classY	|TNf d
!r ,V݄ !I Z\6daٍ ֣ޭz֦dcT@+Tk}ٻ-μ#of~߼yQ ?L1!	M8ۄTI0<`s勝n1p!|z&e+ծ\vY5a't!<6OyvyͿӻq}
C6^Nm;ڜ
;65:mvgqG˦&gɳZvv2~ssS3Ejb}W	=>^hucSc;WMBg:g}#Jֶټ6:
;696.ol=_q}.^FKϋ7:ZZX[\^=HVZÞ߭.ǫww?G_Ӷ~}chwni!Fjzwݡ7</}navWKܱHE	wc+?g\񅂬lY{⪻dT=b'WoLMA[dd]A[ę\ik7V5yUN>3\==;{=^ww=<9t_ǧC>Ĵ-._Yg;7}.u>;
	Ae#¬GgT<Q
t`%6m1N.Cr$j.Ec
/F1Yɹ:A)_>E#r1R?FBOrFNai	v#mW@đh<>hnoKک)fޭ}<S,330FV7(zlfƀh<{$"ƶ{B}(x#a,`pt-K(	:|}FlnN`.$Ї"\f0Y<5 5c
Fm69A_'OFkW栾Z\WHr48;^
r)NWry޽	)3r
&g'۸IDrIDc!8)b"	47yFjFؙ ;lb./z,[P5g4{&g4-;\[`Ҫ{e$F|4q~֤ҷ 
%+W&xv>)|H+ֹmRT4g,g&|zC*۸`UbKy9ה
z+諩r5(ǊP11&%V	TXQ]-TerJ{3@O6֤vvX¥ɏSɴm";b2U")4ru&pNr7 5z`HHnz.za\[
d:xOrb:DΟ\$el6
"L!q]q>aԢ<dj
̗c=8N-ݿ/M˪5
kϯFB3͊nŏdҮW@/?(\wǑդզ-O9:kS]JڐJjJ%mL%560ި~[W'?6&?N/K:3jƄԾ+?Cf=WSiMUp}^[y74Kվig~EBwI
'5IOkM(0a	&sL
*DAm
+Te
ޯ`TV+إKA
(*ث
A!
)د>W*\*)(N
>c
>mBV_4MfTX|quL;'RLIQ|Mgc34ϖ7MήrS8euW<{Bmt4ܯH.M/,Ve:^qgeLkø+//wNQ´()VUN17k̲-)L~)H"rJX<!̹lR4eiKI?Y2SȤ6r,Te$֫^ӸJ-N-=bt!_"
:"צ݄[o$e7Lx4Ӽ?SJmĥStY{|Nw3o#)ÝǵL=}kƉ$W鞽oQl2M7z4!#|pT|	)0dƩWYONVyL4sAq
GSrT]Ls9a$*F씼H	3}0Y9ŉ>Ó7eÕa7^ʶM랞ns3ԤU\"bYh%g		,Ul/TY;򑫢	M-hh, 0T,/UTW**
|U`%~
8&ߪXߩX߫X|IxC
7
|FO**gX؂VQQ*k.?Uhě*-/㤊<<"8HE=eL(KŭS4CMLB`I/񛔧fWQE*>ARU|*hVs"8'MD`Y
q/8H+͸.xk m5#,0]aưPߌG"q
T	\,pEch7oƓ]R3~D1m4܌gB`RetlxǩE`K`[`˒/'	P`?!@@@`#Y#,fKe:`OKیW̡s4hX#V`S`&V^@P $+_OJm2u:W*b-8O`\<!'=x.#(?<d5߱ͱ9rltKÈ2a \i^P
 I _j?3"s'3edZ1D_C4 ]S1Azo}:utT<@ѱ{\Ke"`ٱL`;ig1~l-K_[#_<XǼc&>3HdJSG.SE#xcџ.dMI%Aa>sh },Zr>kҲ7lЏ;
32c>hGXmKazԮMژ`V0.a,C-XTQvT3H_	c(eF3RXʘȊ;}"D0[q=g@:L6-%sY~Tk21c>wHOs4a<= ZfhLg`]зă]3,a{^f]5_{Nf̳Gl.Fct=_/7X^2ej(@ˬ
"%z^8
V?r2#1i YHV&mffkvŚ96Hg@	L`/^2:DmKaz^"s#FfA}i?˚]7-Q,-+s,9鮛Q*3#6j%mtԲ1I|%vde֕j\*ی\I.$IʥYrT#n3Z!oazQGjP^ LDG֢0di;nE6nʺ֙E|#ts?fG(wi %L?MykV^-OWHF<t,Y:kt쳱lyazn^t1
SbW6vJh!C鏜Z2`|#uÏŇƇ?G+6qڦemdR{9SazDj/n,h%guс_0"uD녺ZQdx^*sҸqK㞗=/{^4yiҘ2P|x }-%$\mJSNTigvVdGpcn/ѷǒFX('2ϸ;ܗq8XSggvd^مe ߁{P6w
	S̓8[o\Qnx
^T0`'
FaF΄,ቓǬ`yV'Q`$oBNƜQw&[(&7[F1
>-i2Փ&Wf84
JNS1<F8E-FyR1)xR
翃U
)8J'a1"WGV_ٛۻ/\GeMإ7Q,4M/R'$ʙ;j|zI^#%fq
l8q.5Qa<7L"~:84׊UȡA7
K\?5DÇ~G/}VYHv$fs󿌷^CM
Yw1(0El6HC1|ߕPK|@*  /  PK    A             ?   org/bouncycastle/jce/provider/PKIXNameConstraintValidator.classT[S@=@BxA%mR(7B26)`dF#3^^Qߦi,e9{;}}0%	5spMBMdSX*5gR<KMo%4-KhrfVmAi9?!8$43r63t2(s9w6gu2ͭ]dUD(_kbL2#NnEBig:Y1
klъ&&n1ze3)fߵ3!ablHpKڮegRܺ\;SL^LVHKeh&㚌v&;cTBoZ7BDP+l5XIP1q^\rjjD[X
-:GoSR~ffu2߳d@\tW:SIA-j4
Rp];
|ѯ+w4WЀzщ]xG FP@H@X!a#
x$`TKIEcfv{mڹ2>:B}:aF=8k-DB8/8]lwz7yL@z>s:gGbvQG8)
J{=O)z7c'JGQ,#ЈW4^\uQ51WKg,,+ZVkI禣k/9Ҭ@Y(R(t1UUhHya/PKu  h  PK    A             H   org/bouncycastle/jce/provider/PKIXNameConstraintValidatorException.classuJ@Ϙ&OV5QQDPi2)qLUJA\ >xgQÜ9;sC!WZ?dhҥ_rs,WB.f84#3}.|K>f
iՙSg.*3>kknŨCg.q4%hEXA3CQV)$	h5Hy	Ndk@2tyRN'~CWW ?yB	PK*A    PK    A             2   org/bouncycastle/jce/provider/PKIXPolicyNode.classU[WW&
AЈTņIhj"mD:LIh^}lxEY]}cBW{f2Zw3g u!CBxN ]u=Lq_I x
j6+ D5rTE=1Ш
yh23a#&Yբzv34CnB!t3ZTMREUڮa.9cMRlIMdV+H4ӯRzذ~a/ܼajLjzN]RS95?:35Gh&l-NOUKВt:krJM;6VȒih	T3ETê5;^EՠpļdIMڲZvNOizhj35~zƮEbAS/,(>x7#bQZuϪhרH.Q'$𤄸n	ȑVqR4g6FMQdg;P->(XMf{EȉhDF[B:$Ü;9^@vuw| NΛFl|l1<޸:Ih6m.NHᔌ(^/8,B2d4BXƣ=#2v%ⴌ0*c'e4㬌#GqNF&sI.3jx=>t+a󴟧ȅ1i02s
5xM)!0O0Mr6aڕQx^Oz<$l}D-g$7'S1J{/ivhL*w$J0%䕞,%&KX&P\J'U	آ3OL(eW0Ii',]V=jմxFo{tV%{/2u
Y7ۮЏtX!uX
W@ i*;zoWD<US
pgjx:GW/T[&%%*/8	n%i_Gߥ;XM&ʸ:dh
;	6;I  ~J] Ah-N +V}_eKBb2ީM ;uod5|(&馀5"WIlHӗ1@&6O>Wp11HMʽ?bbu{!	F=@t/PKNq  
  PK    A             2   org/bouncycastle/jce/provider/PrincipalUtils.classVkSF=JdIC)"uiKS	WKUeFZg38L~͏%ȝ㳯sν{w5^	 MzpFO:A6C9y*o
`+ܻٮeC\_Q@a='3%W]:2Dg@Ji[ۘmx<p7m>7
t[*Lw-#`,~ϭg=0ּ/\Y>A"cogˬg.mێRšH2JkY/n;l8{m7lWpoӴo'򙌐qc+?7gz(lyRtJc֘³KTDf%SЫ
>PpIA~
>TpEGWg!LI=.7xw lb,	s7#MmppF1i"1/o3
3lzvsqNs*Rx.bV;rXcYVŞsZL0
hp	
HihGZ&[B&4$1K9|"S		bFz𙜻!>W1*$\mKTbA¢qܒ0'a^7HV]	$U\I!/?E K^/ΚYr8E䧋~knP'X= |.t
O_Ï!ILHE[@M}~اV3o08al`M65D6c/MW0jiWrb*4e{00QaPC~jۨ$'4C8
)AD{8YVE}_Ś{|H,Ѱ],`K,>ggjYiYaѲb%PK?  _  PK    A             <   org/bouncycastle/jce/provider/ProvCrlRevocationChecker.classVmSW~.JZZ	/V5YLw3NFtNQ?C;=w7!$t(s=9gx
*2ci1tK}ӴL6C^S^rO8{31aZe{1R.ێ'RO.eWd'N p]^ m?:C?ŴEޤkdALC}d;2l%_2ECIE,JR&G.$3IGR9ɷVVA{:EE~%F}+_4{3gÇ-צfԅA,iA~m튥JB.4Y[6钋Lz:~Ņ'Tm{4ݵq UH9b~ZURYr|8y+xG9*xOyQ+ࢂa1j~³2'',|A@L|,Sϡ%a|=54tiÀb$~:v
րK(̘G;\F5Mv٘].FC&{Q˥=4_>r=޶=I)6~,=koj|G*z0h*0"]eVT'*N
3*0+qU(#]I>c0Fq_0R@JyIҒ,H(RIIEx@_m]޿2⊬x\˫r0##`Cb\!9eIλp(]{XI&/{
nUzBRV;:OG@8-ULB|cT
z_ :Wd{xF:nVd}yZt`n\$L.!
_'R*`{UZ~ari|_#ٲNT[ڛ%
" ࣿp@PK&1  7	  PK    A             =   org/bouncycastle/jce/provider/ProvOcspRevocationChecker.class[	`T&eI +C6	 \f\j\6v֣^VGM+>}ߧ=TT?ݷ'Iۿｙof}+_z`)Э@V7
!HZtBǍyV[l)bb2,e^uy7@(_?u/@8+Ϋ[hu>3{af"cG."/3W5mht5jtv{{<-IW@wK[snmSsBOuu5u5k^hk4EuD0%&,AXlVZ=
dIiЉEqb.ϡnz7 3fHC8_i`WPĿ
*#[^2XX+׆!S[~]05a0q˴润ŵlmgkCK{Msc[mi _+76^k*t(F.ާ+&S_0EoQӓ)Q$iL7"UM9OBIobfiLNp-jMNZ7t}qǍ39iLx#LnC{SUy/]JsYG1 8L6C}ua7\p5D\
>7ia_?HwKD.ƮxCZ~w05G[[Forw6ފp`G<Lvkyt|0=`5B7 3}[5vZ.yKfѲ-SBd3#kiӔ Wy}`$FSۧ5pvZv)l*
{#[S8]DzS94ɼF(
u),]c2[әzl0uБI)<}>Bƞě
EBДKCr}7]؅P㢣Oh䍡TҧQ24O!J֠Owaצ+f9}[wr8QzE鍐'B[6:1M26Ʊ$Dۉn|"C:`Z/Z(֍-	YL$;kB[7bTf/S1L穴ӆէ:6o|af%øa.u!TTڮcܰ1۠_Dug;!2i@g(8@c[spsߧb+I[JmO6!F>RfaY_bǼd=<`ZdC'wڥǺª<ZoܱWUYbP8G\f6dI)4*C>-vxcs3Cz	N݃_lNI-vRg<UeSR~z*0Nb}pRKd)ųZFt,P:xz:9Уgry=$H14Q44IpJ~D_NEjG0k^KG!]AfoKez_,FzG_zqI~L[r	
= 2lڋM/{y&Ds6!xw?"f$IŀWpΘͻ]|B!/9 c5t=>\nqa:;SSY+z\TqoS2dl|\VYcɂ)EKgЗ!5s2	R\IMMٔKIn˱)Recfx90'@AΒvggh4iI`2MI;$u/J0t}cq}ͥy+%$V)_!I*5p,wx#@r?
,\N'7[K
x!IƀKO1ȉfjGV]8-ZׇcSAl'7;bM9Ѳij9Yɝڞ43wf1_hx <WF uj3wApx3t܅=̵S{g˲xpϲqXZ]G`g0f1cOO+(TsY\E]7*,Sk%Ȳ}aWe]Gx,5j9aW6/9 e̷'x,Zc̢\-zsɲGz<낖$a\3"+tA:Cu+d/lԵ~i?0MO 63\v0?7hY3|
륚+AS]m>6Fe=XTٛg}>OpbK}K},iIZzh.-V^*>o&ZKٸH[gWc^]/H_>\Oߌ4-JFLlް9,{O9BBC(ׯIfc%ڢޠo 4dMy쿭yUn9[x6,5l87[ǗT֤0z1l[j?ֿutC0 7Blr$RN*`J9`/[AfltS6 J(UY
)p9
T\f+ps
T(0OJVF
UNz(PE
,VB(TX
.Rb.QAFhV`
t*pP
Js<Oa-2|Q/e"We_2|Som#weߗ~ e?'2Ts~/d2E7.ë2C/-k2.2MޒmNenBQ(h1O|edX(*cd,c%2,d"Tl8CsdPښz۰|58Y~9DⳲ_$QǦDWV$<//SdWˎ?PrI/$}@L*Z浦t.rVżL&ΟRђ!Ii ##+_յg~8Ί-<NqykEc+!jQJt7D
KUzף뙛YO]+	sH܍
$1#h,Wi|DTd;7I,g_d;xE%kRsR='|\lNM{9ϴv	A^9^\]uɲ\SO2!ٺܲ7vx[yNϥ=e!9;5v?
\;fŖ|^[8;$A@:7B{)^!e蚪2391|yEY#d)NQMV+TK̽[C]F^u^1w&崊.M>ԡ!\X_hƴ`y*&#\wQ/i;aoR{]dIpzg"JR_4cdMO{qƭ!5:M8L8BQ}s=]=Cv`O&%*K̴#/G%g]3󣮅}7ZݤznwQJd,4c{179\Ϙ:9?N/&˹py*7xL9{73'$W_=фf=bHj~QwYedjk|>~g>,aO2|9((^`4Ë
yUZc
G񸊳
*Udnf8VTPT
2iT\&	&
*K*/p6=nax kWF*|b
o.G[4$T
p~Wh\3
wT0P<#.pD0܍?U	
/T=1܎bmfxµ;B#S*	ЅnRaY}_T_U؉S!
*| O_*|!V|MU؎o Ta T ū{J{
U8 
	FV<*lr!hUD$%T8.m
Tͩl19*3:Qpl>$S.q~> ZB%d*Fp3ahah+|RT3 z1,.gE5C
|C-C]3`h`XY2.D3ê|AapCC'v[aWqav~wq.ig8$vqfNxxaan;a=MSv+60\b0pÍ{xc[ypvSˎwxc@&x3H|!G>0j'Ot3nǇY0aQa{g8bbA>?$dx?,`ac3lqy;y7<!ncxýv1;~\`x%;}v|J|ƎOEi?!naGE0u>*b'zI1fx8%/b:nf;$/w
xok|xXǠ1|BClaxB2|9[cCcP0c{
E׷;_-^A@gfJDOMٖK9GFً'fzHlpQӉ/sr8UY8YYxY;`ǂh6t>_,I~N4oL9XO@=&.2Ν>EGqφRiT|8I^ldRy
LCJO&}$W+@KSdTxmN	8_G%m;nwO(0*I"*;BϨdsQxlJUIn5GMi8<zO@9	8f7"X娴-W'668x׆T6*Jnũf(6Ƙ.vD%GHζ8 rMwӍ?,-V|Da?\˔#^/gFvTMQqzdݝW_9"݊O1&-s[g@SJK Ǥ<DTVT:g!*|Z5~}̙Ӕw`\cjw0*5UtI'MrQb?:ղIQiޘTRkTZ?0uY|ʍ;ҬD<(>ͣc΢0Y
I}txJ*uĩJw[-*-gcm_8&].qDw4*9p	4H[вw|Ճ0mwڏ`H2bl׊#Hepp,zWцaJH%T+MNOiz5~!OdQƽ2.õyY<
`O`qDƇY<LPpI;
Ldwɸ_Ƈ N|)x/Dazִʓ<
yY35PhqO7a.ivdx9DFʪǡ**]1y*z"%Dk#r]{uG_JUOѓiԜ,WSz6ּ̔pI)QUnZ"tG$YUUIsN_fyq?4הy9vvVZw"8 1/}G;(Xr{ms4	Q:lކZwTƏx-% <`rd<(ӺÜ|vC <&ƝG6*ՎI#[kve|μ.X5q@NLJEa@}ԟQmpIHwP$.oFRJX
YsJWTjv}0mR{_y9l:'(X8*ј$g>kw ƨT:Wt=\.SMߞFCw,):pWby)x+,mŸ%O^u:?LP,
%WƛmNoQuȁg\N#DҧYjg]#*]kq.q`.j0͙g:˘t-u*WA:,~j/<qM3&鳣9.OҖ]@@}{y	p)q"OBT;>K"
אUEAthD
PM;IX4,T "Z[%ި43*ٍQEiU+Dg1&]}5VEۆ#VA0-I4E~$AöVP["~)~?y->Ǥm2ophWg8*UA2W8\t[fzmT*6y23͍k$[k3*nJbkW%͈J;vMTcmU%\>
NIIb|/dq8VhU{wt2Og9Dpǁ׸6#sPBg[MoC#%St:Q&9GVm'k(Mqqtۍ07|ׁ=wUz-`!K,?x/r`,oBցWZ9Kw찐t`7Z?;jZȿ:PƂ.1ֹ+SKue?q`/?sd!j-yo8B~Ӂk
؆PKԋS  
L  PK    A             9   org/bouncycastle/jce/provider/ProvRevocationChecker.classW	x6J1^sg06ۀ!W%6=eBRk}%iMKڐmz}w4j%
y'=h:$p5$4Kh*alHY$l)a"$Kn	=z%KxʆQZ_@U~&uPƶ@K0 lki0[:Z?.-jRO-fn?,==X$$5` 3 aG_|-lP}с-
ri{0fJyyө
@Q(ޞVX"Rۗ-{(Nс!E"D8 lphos$wvZ3Zu^XM٣y>%N'	JUm1L,ե4~N-W?K_[Tl,Q2xR֭x>ṞFGk'N5ɏjꨦ#Sj5eRÆO7G`bDƨB).Uj*k$EKZIl'HV2r:99ZRn5Ish%5CfnS]
SM}SOs
]S>L&51SKe#iÌNt+D(m,I3P}GdW':VgTRRrRT+-ejRHT`GLkjh} n#aZHXrs^5c)Е~+u"Jg*aH!)ԱnZ	st/VtP1zeƴ񴪰MtUH+\< NN:hԓ1ڣd(E5GuZ52UaGc:;?KU0_1RAg7wa-&wc5{<c3ٴ?l}ϦK}isJ7Lo4>p.êAI]\ֹvo(3seSJ2wxnS72^Ǽi/s4ٴaJjX?D
E:*TlSGSӌZO=3&]7\G:W^1MMkY@R+L+_1:>C#s[HWc/Q6:mIYgʊ4?w^a!]_:R	l6HEBXN	"8&⸈[E<C3E<Km"+y"/"^(E"^,%"^*e"^."^)UݏE.)o,Ru_o.70ȿ֚v.UiݙdZ\;յwnC.MI%5%a3,]iR8n˪I况uӻVX7E
Wmx-WQ^vXܑo)v.+%E`E阶"Idi%V&aǙ.=撹rI@m5kІ|hgXa/>A!Obx2Sʐ`xpaa0CC!͐ax:C`xF71>¤T,+|0ʇ8`zч>䃎Aqɇ1<ģa<80<Yމ2|σw_4~+_3ƃwd÷{%/3|_c~C1؃'?|?cg92)ыcx_^akgGR3oǿaL:ecĽΟPh*eI043_k⦢e/l,'  79ĩ5TfIlxTDl%V6N
+76^ĽCM2|fHyaY?Gmd-?Dbw\xiBhrz6Pa!&Sb	aˢZiӶ,Fȋ'؍VdFXii=GE=qɎZ3>J<)3izz?''Qu,ӈl"2wbӘi4%%v;۝yWP͚qh={)j.cS"]<GQQmG'N|;ՍB@.;ҬQE-ww
M
\CrդZ}AVb9+9V%/pb)/u0Rῲ[,pV#:,j6[^`u&>l<l|͗ot2WəN*XLjDyI`yy[tє-2P;w}t$N.PK*+V	  k  PK    A             <   org/bouncycastle/jce/provider/RFC3280CertPathUtilities.class|	|TfLd	$! B6`$8$d3Tkն֪6m-b;R.WovQ 9y&$}w߽{g|tCuXe:auبCWWtV]yAMy;kCiUZCOl!޴y%hIWw_Igm_Iskm}Mp)s^IhdoWkoI[/'/`-/
]9U.Z`qՂmHe+uMu&lmYiKu׆]`e5푾HwWùaIOo_I۾ppoɞP#܎Dl;T?|$/uJں;w7n/݉c=a\nF\.x˵;BZ5]u[Z,
E#mDWE΅C]֪vqEY'8)I))C%]hzNG(Fa1A^PIMCAؠ+KiÉKGbn1G8t%=xLB3ЬH4O{wEi%\ֱJ#YRE&"ή ^ivkKpSLޭF6֒\`neO$Tr iQ":QxS
)½=,ɛ2ͤJ-MmkTI_$0NCF^2KSz;"mdvsZo@wО>$΢;>GG..ڒ:ZǙ7mX8mr"]Nd#ʂ%]
HZOK%q:AtI7.oR6TO`62ڂuԌHǰt,N`ק1
m[6-Ie]8
*a]!.3'uhZ3!ҷDX[v8fAܷ?*ְDJG"FC'j)p4T5thGX
׷{.ԸdBb܁!=De,P҅@}.ްXv۝뻻?aFJZGF^R>&tt-]]<}hwIfKCX`Ӻ`me3ИlnlZd3v=C]*}cAf&gDLM
zE]	ް<[zٶoWْ~ۊBi(mX0[%6qrf}7
04|/@J+%irr&Ndņls)ꥸˊ<fm^eڋ
L0,½|M5
¦:P"&;,7q	|y8
[qtB8<r
AF9MO!1Ɋoاݍt{)E#dok
2vrTZG2R{P`݄hmJ|ff4WSY`߅RKٜ$2
jvk,tHa_iGhϙd@AAJOivΤvF5~ hgkt0~bUwe˥jT<aQ'
֮oCaKSMKp[.)h*@Iƛa[βjYƙTHR@4܁Mu)ͩӺ"#YЪfj2I% %
{-`+[[0&{0ex."[P΍bU[ٌеw-eGF7c޽ѶjE:hע.\X	q*,L_qƼ3ֆ1
uCZZAہAa?4(Z70ь:CCxk<vn(a֡n'Í!N#5f0Nk6=0%,-~i)Dt7wⱮ)rlNtGm5#lڳ	;ĝ!)f69mm
b;W#Rەٓ;G"yEu`8,Q2+A&x^FM ~G fvțn#C,Lj%uC>0]"qT+qۃ>L\#TDQS_t
p]E	@x$cYH!I6riUs[8b:E;?;j-Ka5nΉzֺiNOM
2-``&^q7IjXRF2JHv.?,&EZ\˓QB]m]؉*qWIu#ihBFJRC-۬4zkք"f{ek%6	^'oQI&웻;ö{ss"VSDopWPV,Rj){y<~ZAgGo]MUxE}͑{Di"]:'ε6uKmni-NK쩵C[3%tęH FIS	]vYI1nnwTbOSM_	Ôf5_D!jQ>DnF(Tt5\jÕsPi"iGJ o$Zp\9YDjHl$l%[dNDVL;|t ۋ-d7jw:F^/3#EevHX@iK)>Y'gۂW$DN~BL2.i{E蝙
vt:jzӕ:HRU_&wQX72b0qdp?D1?XU'&#d@ؗ)#Ĭʄ(2jQإtt-h`=tYIB$itL>MoIsL"	Sf4W`D*4L䇭%.v"AI$ᐤlFϊC!}MooqaH
]( ѿ.'ڈ>ㅉDphHt=g5P85rׄ'L:muhtFȄSΕ]^2bYgM4Qa(Qydww7ư{eA9ZEk߻w3Y@:j:좿oĻF>cinZ$,2k%32ځ8@:,$b )Hff. ,H<9$[%#bP qQ$:#;Bgfںfz}ϒ4~N,o\>T?ҠC2a2\
B9`3'^ji]ϊt-tm[X$(+Z4Ҋqt'2fngqPyB0-]z^.|㛐iy=VT=I6ڊtܚ+׷ַׅ;zhipÕxC-JU$k3Z}Jnt&.ej$;3xski>`k	IYDZ&cGGgr@߲nqղq8,,:'<1Ϡn4ܶnL )&SSVItaC(wI:O5Zx0}
z)YSWMjZZ9kݢ4}Ui
Vn>kCjԮԮԮMoFD0Coǘ7tK*j%"9׺5Iok%;6xKu.BCIѐd*=T
wvS#ɎPD*ANeo(Rn^4FaU0G%9څ7%^*J2SMÕ5 }#By;k]IvrH0FN3!HIsz{v&IzCaU46V[D%; pp0Ui:\tf0[9:PCtXCL:tXJ.a5:PCktXCP&6Y:laWЪvpWK:atpuҡ[ӡW}:p@:\
:ܨ:A[tU7po::<Ó:St6WgU:[u=4C;5xoܥ1Uc.5iLטGc^hX41
4V"k̯	I356YcS46Uc4vƦkDc346ScklfklklƖjZchlƖk,[K5vVilj4V:kAck4Vc4zmF5jIc4Ycklƚ5֢ۦBcۡRcWij]vk
ͬ㻨Ph}+-Q2]e虼#bs)ni0Cj/?y	nku
&&mв Yc5%.)VGߝG. a(8/feD'3YG`HOw#qf- 4sۘ1NRG:#}1V'.!E#hC3	QV\AAR'U)}>1yD)ncjbӼ,zi-u^X01.궄z8
Ά8eWr"]ҜƋibd\2s-I5âLI[Te(rGee9C2.,;I΢&C'z*Kǳ͘]퍎'.-:
+_q1uz|9kR8js&-~4sFT-Yf1Ie[6H,oM3wG"p8t!W('}.4i#3:osְ)T%Hұ43cӦl9?aL<W4{8pە㜚tBq#l% (c3˪c]e؂1V3~5.ot3DHL_)龙]"K.r(~n1}-"au(xO
$_[^6_(DWT1LS e](׎12[)u֌!>JgL?핥uuceF/ʚLw8i,s+R	$VKMґ@:)AK8sҔ6S6e<q̨\VҚ^0hdyC1ؐc瑐nsJ]ky=tS%]17W޸?e*?X1q3<֟g6Ae*jchO̳_=b'.{yhHHGrxGVcBc!'|,C3.ʦd.{1
yj-!i㩌d)IO˿`ť}Bwb3g/)nԙWZ8-1Snz`	fmp>.lS8?mc;^/_Ѝmr.[K"U	\N@6:	"nl{x|0F@va&y'_-?'!`oЀPd	
+xk^'pY, "<
x	&nh0V6
v&nbGVJX9
zGމ 
(̯0k~N~Z3x+;
84*>ͯ|<l0c^3&0#|_ks|8|3%
i'x{yyuKgC%
D:`A^~o4q~"%~3![,Հo7Rm|	o2`}4{j]Fnx{f~-ÀG;
߀x7дq>a~̏
	<H!xĀG
^|>D`	|G
?aw'
7?jy)i?iq p#4wO?c7g
"7Ag
9]Ͽ:Çv3	Kl@hWxdk;Ŀi#^U7^![#{ G"g!W#ww	|		LG~L'~Jg~N~IWe^63%9?2]r)Ou%9J4Pxk|}
#PJh@*iXl	\~1IԚ$ܤ>SS5Ej//Q7Sii!Pz	D|r>/Xs%{y)7倗Sx|˔&//iD}r!/_(+	l#p%wy"J
z/_L-Vf!@}&/_l!L/_	<Nzy(l p|2./Ln/__Eh	2	JDv/Q:zzVG B[E^xw{ax#5_(yZ%*	4h!@+^AIR@vn p#SJno'pwx#&xQF@wx&7+srW'aʤ>YsT:$0S	T?	9|:?@Q	L!0@%ěs\eF_fAZ'"W|;u.o_ ½k7zZ P)*IxvZfb=/ֳzε!f=/!Ye=gⓩ6g0c|ǐ۳_p]* p?z
 aQ `MǔAi 
I^Zhq*ኘzRآqqԼ#ꤘ:!V5f}&.תNs~+'L\wwPy=hvBanjS20
	pHCGMI$j+U$/wUcw#2DRsRA>= Sዉ6v)TD.LQunjxZtBu6O^cRĞp
T^Tͷæ6;^=Owp\أV#Pw\AhqusvP}ZԲy1SBJq	f7e/ð
ialCxv<밵upt5#Fxq|x
T>6bf`ü7m(11>P5P\>/aX[4>Uc朆gagj|k0&\~,Fě*=^<;9C`I֬"kSߋx=`P*.[}^MJZ1>ap*)U5 snbIBRaNL)gL2*]ӈB%#P$1ߦkPA[QL*0etw		RLZ1(.yl(e)orTϦ9wfj?Owढ़KsKb)ȒsSy/kooNS>e1u*L;[y\=@MfL=tqz
hǔM6 1<ӱ︄˳.I"ea\sʼ^c0
cEI:8	l;P:[Wo1	3'IoiLG#Spcꤴ5v0Ehl{cG$'0L	2gu+@~tL3̕4*dc`cCľu(P [Kͭ|37$_Jq|y<Ck;)1u)<Ӈ'Yz_jbjq/m~3bK'ԛH
(tez<XHTyĂOf^LІs'46yJu?9cp?[|H2RSp
ꍇak	mZq@ ,6GC[s/>rx.NY|wy:'h{$=Gf@+\<xla0.EPWI/ q?V{x3h|Ƨ ";5>YM=KٷV9`5B
e}1{
D=M7PȨٸM=:Z;
>:fAa~oύ k,;à̣J|Tbjr
αy7A\bKjs	Sq$nIY$F$_@5QHBK/zJŎV
H¦-|q(;_σ	Oq?ʲhN͗m?}܊^6BBEvU)P+ȸMnw˽(s#5nZKc!+FQFu9QiZMSO
g;1?A&sW@; _p
!gM|坁O6bUaT4ӌ$oI}%υbb3]^zel<FFV|Z`0fܗH~򉏣MDw>u)u.a)Ù^c$9ZMrgux1?2WW%'$4
x1{11{y>]欘OtuxÌ o&yS0!iTyn9h61B97Hj	-;*vB}@_}. 'fg1b9z5Ø*..4.q$\g+pAuCpH(d`i!īElѻs'Bg1*2j+0Ti$7pM?QnbT8z=
`"?EFMu1~ZŏKTZ@<ӏWÁ	2!!	VdpnwQP=sE3e$̲0UhI70JvP%8	Vj`"
*1)L%2E]-H#?]O`߆369'0
0뒫ЧbÇa3vČۺk,W]F'm,5	|EBWUW\W]by\
%K`ǔ5G4ӣZMV_6=rE
-.^Rҧ5vx`:D	>ۡ}e%$؃" 2NNw%'a,GXuߔӀx;eAˑdA'N{ȓ}Ƀ%	IkZ 2T"޹ۺ
)pr
'a̲Esm w5KjH*:1	ziѪk^nǯݏ9ӎA1НyaѮW18xM1gL
x	'G̑8gPE<S@Rm
3هa=ܘg?PC˞K!=ɂΗ̷@+%X+fJD:׏rL rĲ!VΓ~eY+_{
`
vh=|= o3%_80ChR;d)tAs=#5^.WZв]xBHa?;\L!b2(7.JЕ W$VȐBȥfj	ԩJr{P.ݹP#669C<\1CfCN$K-/B?,L,SLGγvLk}w'Ի)c[Svn*K^"ɳҏ	5}
5v{r~׃0{>PoQb͋9yAs߱ϝo~^)tDXGM0!yQ_lU. gR5	SgDsu^.DV
1&a{Dn9)^9p{*

pðX
yᦙyvab_% ?8Y
Y>@<Ja*it7#gN7TD3VX["a tl^@:uL/H#ϧ
i2D[t! .!i؂* Oeai<SnEsa^c^,.T@WIqۃj?'Q%\Y"i1V=7>!ڷFU̊<Z&1uJzǼCDyGZeKEqjjA
vT(6;a7yx,
\aE8A4itEw'&5GysfZDL~uO)ܝ)"y.MDDD2:SZ_Ĕ3G`+?b( |S)EorѩO"C<Z]
$y¡ J3<Ly)O.ݐc.1#h_:mZ<zye$Rx>I_IQa|L0iŤ+Ĥg-&Mx|q^r2
ΔMwLP5S!X80)td /3Oa^ٷ|
j𜃊8S1&U|DchLyئT0Zcg_YQ7`0\qe4Yxth6AF&!*Y(Ƭ$:A*4zvC&ݦVNsPE'3kE,P,K1Za
]DX͢ASL#To8 |w[Tpbұ}mCAGDECfCu}lP]m'"rZ8w8Q^p&5hJS^zO& P׈B=HJQkrQ9PH;bh=o߲ލF_YC*qy(7*$I#?:n-;^]
bcl"IoMaT,0
gfr5-ۈ>\ Z@&uQ؋iN1o!ż49@i}ChE)բrrp>Uf^9F[B 
]59VŀGe[;I%EIV$_J	fՉUc@y*P8503$Obz^Q<ݾ)?Z={Nbq4fPSL|[bϥ'0R>YhUFߏًmnxMgj㑸dۍ/	h*EYw|@$zV&i\g;h+Ƿ?&)GHs(K!FsPբiZ+u2_L
z-^L
:
WףaXoטW7^IZƺnj039Q=9}霊9}4:cf;cөH/~8Ʌv+upAW?%+uO8+u mt&>o=T5t&tᛜDjMH(}XDRˎ9xVlN)`"Q&7T>vd8OwfPotˀ"w*㯃Хc93obǲ7WAUtꏣ
#q֜J)?mdG
?<tW!?ղ?CmJ|׭U<	(^RXfŠ)qvM3R$#xWxM.$<9S6B\rVck oV-~@qNFr;ONLUᔇdcG?Fdk(޻IKd	G^N>\>꺔'HAzFx;T%CdKwn/&L3Qjf/G$ĝxmwg,xR;ҨDH8U"uqZR>,:PA*2*Hᶂs͢I([ȴ$+#Vp*e}iaPSq8nH>O֫O$g(#pu4R$m/[euTl^T̍ޛCkjjq֏q,NKR۽Џ;)?imi}Ņ1uS{7GN+hMkLߕ^NC_#ioQN+P@.*?~o=(tG*>ORFtZ_q4S?j<k9OGS@uADE^ҕɥU3!WĮO4(
IyJ_PZ|A!ƼTO+OS>S;<%Sǔg)OƧ)ǔ1Ccʀh?)g)OS>.S>,gڪ5E/ͭ"Vw]sVܪ?6;O>EO+
g_ħq{JB<2~x PK2  y  PK    A             <   org/bouncycastle/jce/provider/RFC3281CertPathUtilities.class:xS<[ƘG (`<0;A6DlCl1dɕdMw$iӕ鄤$nB[it;MH'MBϹiY2|{;޳y*f;rsW8`t@&,s
tz%n	IK=K9s+[~
ΐ	.'.Ep}_d#}5nٽu{gc}ͭV7G"!_ppzPķ8x|s("Fd9NA7
CL
"4E@,FFbkÞT
d&=~_lXa#88{>q8ҬB|!vFBavK	0^9=M}ھ?01^q8ӳ?B"0i3d+-+[;HɁ}H(S#2i
QtvoطcmOk\pb`p'9Y.l̳n~z}~f~妴]g4*iPp0-9x}Rcͻ5jv!tugX ?ÍIg&MqS	i&%NA/)$هFXAp6&;%aaR 
.
-n1I46v\aӎh<'ݛMxҘO'ʽ)/91#69x3"\tni]bJJ]fuz$_QynY:ۛ90=~#BzAsGsg78GqeT*|o'̰d%ȻÜD@:j wicI/CMd&O8eksQ(\,A~rbguE!fjQ:`xlh@q5{QYʪ-M42*IbbCz]"r1ѭI
zCve~_/Zk/o\КA31"*x>o+	<EAHI־ѫb;(x%I.yppO4}X
昛mwo
6ĬiUi}3LqA(8La4ukgh3mtvx^m837LMڹ7በcU(n!#ilO(2B>cxjxe&*8ĒlwIZcluIBiz0nC-!v*_8f h*I!-_tPD%lro|k1qlU~Ī7=P %$v/5K64C:yc{Yjqd=jsTɶ$Wtq$Ew}})k&e@Y>.K}å)sX?5R*Scwa?V)`wh-IYu}I+rPXDty"A =;Zd{i2Lò%;Ss(9Fُ:jĂ;i56_ѷ2RM% }PB9x\U5MJ:#@ROV(7wu,7
:䂬ܔe9Uլj0{:.sK	ma jےùm3[6wcCX-l8Q7y=7y&=Һh三 &*IBRzZ9-'z;Y
E4dkG~m^61FKv쳹nz0U$sIIJS.^;5iLxbY:	M+W\,[Jy.@鐒	͎[ATAMMdǻkpӕ$LV$gx.$½TLK+ӗV/N_Z[k\)I*NL[SfRf[Rfץ̶)mttTéRkɢpQ|)A+fHUDҋ#u؇2w,tb9kpvZ\+Y@[B+W	xx[&vzwx7
x7x;U]]!%#p	8&^	x	QqIipYyQ2}kh5!SB3jMzrum*OEMAVLV@SR#67vIO)b\3wℱ6B,+33Mc1dmk
Yʘx3Lj';kM
1-V,u=meZ֦n	yI;ɏ⥺y6ER3"	k%<iSVf0)7
4#U{x23E]!3Li$
Y'2't7}+ksrH\x)H{X)G&-͸y\GI
ӣM}tӮwdw~_D4wTC{.A+c-xK]lK%6j>ݣoY#gKgP?)'?]:\qvfuMB!wrp)?aLJNߛ5X2:iڷAT(̞bΉPy ETsKgY,[/E."${S#i}Ի~ӒҎMGLi=g4:nPis]'qGKMw׼bbSc9>O3	gt\>^~Elw»穦*?o2陋M&z<WODcmÿ䒥~_Gi0hR h
j6G|.`0AsJaA7380B0SoA߁YlEaԠ7|a0k5
Xw^^lРA62R
Bؤq\?`\q7j
28k4x1^Af.k5؇.l`h_6DY>l&l:`3la46
4؄|kwhpo]5K[/3xoԠ{E|_W%\4_x4^
}

^5hІ"t11"E8obp
O!oR/x
OI|#O0
OT;~AT(12Y
C*c.5Ty0xܫyFyoVaGx**?>bޡ
~SPPb9*V|D*<^fp8?#33"!h>4Uq!fggT38dp|U:o8ŗ3aQ[TtTxic	o/x.G1xZ08c> /l
_3u[B{n	NO @!Bٜ_s+F@V7?z |@H	e-˦ێO(+8u4S粏̞r>LYdحPV+n?,E3GMHbu
-,n;@8
l8<3?,/şN> 
T`|.ɲkIFOBk<^r\8/R6C8Kci]] Jw}T#v'5
<\.AGup9X"1?9I\ݡ71v$IlS?8\D}BYNꪵA:-R{dI(q{F.u`h]*E*eAe(T`MYu^`F`^URVuzyC^znc(\Sr[LJf[SYlK\Z!PݘRW0%&YjGS0*
z^:ώs(UУ,,_*W2].gs/l`ߡՙ^J/*q$[AclkQ3fkQ\yFE@/ǧ-u0"rO
 <Fc
BnVޛ}j&`8صɩmK&`eCT
!6AY
FD]\"D$砥AZ:%'`M*SZ<t̚$2Q Dce/Қ流饣ъ
fn
8cXS
/8T*#805S9ٲpjL'5@9OuZFz.#V`.k>no`Os"*[>g3b(&x8ECJR`iM摴Y.OVoNO(x(
7L<<(ة_(	\8k<{}վj/"x!no8
:E
+솇
?Dqq?fqrol釩Cy SZ"Ae<Fk܆U*}v~WoyS&
uQO-sOc9?>IQO8K(ږd~n,m
 {Mm4x*Eq4V5l	ǧ;jJigڣ|+xe+Xc6/m_BTQ)${pGh6P%LXߙT8O#<-KŧqOWqq~j)I~jr!loIˑB*
zCzDu71YCuIq$CD/DWzbh?h."v0jL@;u"~p@+]S(K<x߆w1xZ>?gA|>&.
I&"Ph9=`.YjRODqbo$ߥI^E$9.2PZNgμȎ
~?ht=t\6j9n1U\FCW^lfBj1s?ۭGj%1e.5-vQL,S
LSf*UUȕ/ohdT隡+ǔ$(_Eg('fٚzlLl8)s(Fu;
ѰMˋzyTYXFFJF&ʪ5R_/uekkގ@-'VnVRﱆNX/9z{\J&8;N?;ة._lk
[rq|߼r'P)롈9PKlŁ  >  PK    A             /   org/bouncycastle/jce/provider/ReasonsMask.classkPǿi4s:ꢠ! mj$"7|ك?WPRn*XB'븢 ?JV
hn|!.F<tx;GG%]'N=p^vN9v`ѝc%&{|[v/!k]~m(G5Ս7C=w8l	=ㄒZ<VQRQV1Űr]kDO#Y:g
՞e5Pff
B3Z@焜1\)R "[w}-۞mN_QtF@J7EՄ  ̕,' 0HLOɔ`MepE%RԘ0ͯXVL"+9S֙g,O9dJus/G<j`
t Q+<U9Q=gF2hOr³֐OD$eF#||PK2  7  PK    A             I   org/bouncycastle/jce/provider/RecoverableCertPathValidatorException.classuOjA}^<:&6vJ#BT׽\9ve\/~\:73@@}`ݕ*ܐ޲;LC+d;ѴYq.nkN/H45drBڕjQ}1Zj{l.ْJ>?lϟ>J!R^QzF@L;ݗOJ3PK9v#     PK    A             <   org/bouncycastle/jce/provider/WrappedRevocationChecker.classOAǿ_
Z5\L/%ĤD	޶۱Z+QٳCspٹ|gv srp&P\8pcmUW?dp9-J=9Q_ƝCG㯲ԕ:RdlT&I,2?}yiLNL'j%WV2}zJM4LtY9&690%n%Y2>}}>|6]x:N\kwwb3ib\0OSo^&!l +	P#7=h$m`z)@`m%+Ms<{O~{5f<6	̅6bvG<`¸PKD    PK    A             6   org/bouncycastle/jce/provider/X509AttrCertParser.classVi[W~'$ReUj`!D&@q $q2vsEkmJ&*j?ZzL"!Oι=^Y\A]s0[[1f6Hӕ=S^Kz:G s9]{8pQry9|~K0PJUTY (1Mr,1d~F)|"%EEd)2$M氼@,X(QMܱ&B1C"V, EƤIɮ}QYX"sܪ{u*$'4%+FX>Ҕݡi孆<!T=ST"W5VS鐔Ԣ]Jƺ@^46,*ж0ʡeaz"봮)6.NGCgi`b<w/`~IJB='>JwxK6
IjqyޖSA&օ7M2<J|r؃ݥwޢ%)8fUwL|Efk YȢIxK Fƪc=YsR9Cn*8GhȣǓ<xG3y<c<6haƣG*yJ=?_[Nǚ#J*B[KՕVO0uV8
g{\3#8m^
Cʄ),kƋg\֧Apw)LEl%(z],4f1UpZI:XWq"=Yt)D,À1(bDxQD=L"Lleb)*D fuX%lg'~eb"V㰈.tXJ/"+"V(DtB
i)v#n0bBfbTv$8LD		M@/8āP`bטx]@?[g6"EE;&`M{x
V'>C˽dkRh+%\13421uM5t%8F9k4[GvJ[m-\U96:#H2YX(pt`[y6>H5HB>gb`2|Ʒ,dO$/fpeBpdGp/z}t(jr6qDg!u
*z$ӰՕWpMHkbٴfp}.OG/\s?.q ˙WDCCߟeK6VNZPБ8{PK<niogdZiH%_Y_AMK5QM35Bi2]n鼌]ӞxTt.~4 Lt~LR~Lҵ*Xb5W7Klp<g;s,ye+f7Ϡ7^[þU]=O|L}f)X౏fQIsWA T`o`w\4PKCb    PK    A             6   org/bouncycastle/jce/provider/X509CRLEntryObject.classWy|F<z
0$61,PH!#@E^yekI}#iچ4u(&6mzE#RjeɶdWf7o޼ޛ#<
`ՋR/y1݋2/fyQE
"q2"Z4 0;㖱ޚH$xs@3b4c43Luٕ<3˶m1@K	ZhiѤ^@EV[n.waZO`ZV	OxaM9{no" Ȣ K.Ӱ-%@DKXQ=%e7עZk]]۫	P=kV0	Hj9խ[&«Xy4Z
ISHz-f$֥*2Hazayj;GS4Wаpk&,͌i^G+k38MK?tuq`[r%=xYOK1&lM{Tx:cq%&{SKmf"[z#!(1X`ؘ->-l­Z#zeJkіe~TWM.K=#I| TҖc.V".8fڈeD-f؜^Yi샔fux浤bh31z9$QäXjd=Fόƴ<T/1~˹E2/XI?0MZ;];һُ`a̦=%yH3xmg>?'SU(j:
ĮIt[t-8,N0F7`jP`ԀW0um'sHS2vhbDc}טDI_{>7&,4MJmtLXN hٕ1tZ4Jk%HX'^E$6JJ,Ib-[$:%Jl.CV$vKPE/xK<oNO¯a[<٫hME-[қzf`t-ʧ~N`DCN%{Umz4nknJД?3e(^̩4W>fjmdDe^x!'U퉲o'Ef0).]qw>=ﶰ
mi!'
3S?C\O|TGUzsmFY7#$Wx|hrv]uOсWO3yulPyif]O1}?x?	5*Vc{X\ת;U܀rXTb9fXy,PUSQ׫zAXDXT፼.uxexXXʢoUU;T,;U܈wh»Uhx[~FObRQ*B [#,Vц{w|{g'|'Y|ʇf{{_dmQ܆ϲŐp\A/ k
xHA,$>c=/s,,~8
^o;x;gY<
^3
4Y|WX|_-D1D	L(1N)mjI]	,mZV~0).&\$%-2+@2ՐE~8 QXGVd9MC^zlu8Χ-tB)EGyAR*%V"cnS0<b1t
㙎s46a\Nfw
j{1=ӳ${0_##`[؈[ЍVl۴;_	YLE3qD̀Zs8ήD}rs)v 
wm%F%t!is,
HR9p{YB!14'*pa
AXIbsqMuq
7b;<4H.d>˘MA0%K\;z6
?!-t.xIr^1BBɠ9+L',H	<t{"K"
Rqs֮E}40BE󦍼1FdPJ2D.ЍU*B8v
w]2_>d{2zod(	G+WI$}r2:Ty4:2'g'iDE>H(vAi۰(i)\1D;B8q5ތٶ,.7e!?`Fұɡ#_gqn)_)Y-foO`6msC&_8`#sB~H.g1!sg!8}; 7;;#ăqk:q3|#y*Hd#i%]%<) v!~.?PKyy	    PK    A             1   org/bouncycastle/jce/provider/X509CRLObject.classY	|Td&o D`@0PPI\($P3dp2g&.ZkŶֆoi-UDS[+VmZ;U{o$3c߻{{^衻vo3l'2|@,+FM^Gp5r)#
FVCXwD9Ҹ5DXtH5{c#D$NYN)pmuIΫd6xrw<eɍ&inaP v2:oTwկh'xK+~XBk	l満tE\{C슄}z4X`FLgW܍[}zW-^ nX
h,-cÁP@	+xv}Jv3L:\V
CX1Ǻ,!6oWw7biV?Uٜ6_gy7G(hhό[;76::C_wr5&t9:z0eŚB~!y1lNݝ]EW¡v.AVpSDv`zKa*[aeM
<O|Tn5b$PjN޵F0./vk/g(|[ o5
mۺ,]ޠt';V\\obry[V]1kro8Cƛ (ڢ[]ܵB>Oק{+ccSxc1'gx`%7p%ьܮ|]XWCh`e5!MѲ鴠1ז}ն.nskuT۸`MKr+hoLpDoꝺC
frkuHrL8c+<B>wfX'!͎z#%֐*)/Bj k]1.fcMB0b`ň@:9@ּ%K6{xe̗
zCi3SM
RݡX3}(5SFvu~9Iʎ@{vetGu_7j[uyoK[n_Gҹ҈s3G[Bop^2Z")*1##usȶugpZb8lk$v`u}3b|a$qX5|8הqNd֔~n`Gdq@ck	{b+{ȈByXa̝ဟǎGګ7Cm>o4ԫV.eXݻ1&iڬ\<96nch6ca6؞ƽePJge-NbV1ެi5'73ϏEK,I4/\,3ͭzC$h3y҈,l.Eݺc#α/fdsG16t#%E{UFRŪó|+:EiJ=`5Q3؊Dg68LƸYjGK\WKBE5^EUbb	cBwMIpFVʬ|3		NN:91ΉNLpȉ2'91	s8ʉ
*t*)+Rpn[\`m
.Te)*+X%
RU=W?T#?Vp()B\
zlWKW)Z5
UpܠF7)Y-
zjY*Ǟs3%O)K+FʷpzRatW>'g#*F*Z^kxjBEUdm"2439rxdd,13#
mQP"Y;JL+tjžc&0Gw-W=L>c(^>,`97'3us2¼RE窛LT̬QN3aK.Éja9N
Lv($Xbކ\"r]XCQU45?{g_
9
=)4cfɖUc`*?VeJ9UFM}2Yr4#uZ<eRd%ْ|kbbD~/xcI`9sxZrG9/S\~	Sl'+waOV	rQؒZcW_B<pg>bY++NcƬ2|V9|8RC;!p+*4k'
'p5lD
gl(GsP
5I`ZrjMvLְ S4,T
§-04|AM;qHi8I_:lS/5ԓCY+rjXBX'JP24\&p"@Y{4)pzbOlS+F`1hh0EVL4Nl:B4.0K34!of>f)h8piɫ[#P)*iPKPc	,.T+pI'"pjq DF49*/xX`-Xj8G+QS}A`@R~Y`'AQ`T<E~?ӏT<#ˌER}Y'I*^6xIx/*A'}K"eYeH'*^Wh6TFWx	+)\*MTsxB?W/Vo*ަ~}]ŻtVKzTGUO_S}_ŇSONU`zvyA."?TwTVV?ZU5x
.stZp!F_?
zWD;/ȟBhSʘw^k<x@>l~eLe<9mOaƳzrvtHfoa`{]qٳS<DO(^v4b>is0lܞASi_Iar*V{yFg7=qzVnVۇrc+E{M7&~6n3[x i⴫2Nw>{x,YIKaB-l
(xu<-PdQ6m8}+wQo^kR6Ѓ1p^leVCkՃޡ=|^yޡv,C?C<=y
^<Ox}$]KMٖ>-}Z*i ϰ	j-XUKTQY-Y0J:ﱕذwhNڙTCmkuc6RLuYq|ϦDvƧ4k~`=i1",l#gJX -A|;)W
O}-Z孟-nOey!TŸh©1CƮ8G7i-Qc-1eUZ{Qh-T$,] [ UmJ6ԒJ\6'x=Nӳ1N]/֮ddӝ<>ڳ78gYFKR5Y0(pP:}.O,,Kxd>:pH,ɖ)h8Cm%~mDv4Yț@)r7Ib3EO6Io4(c3
ޫWqY2JӖfp)-Ԛ.&˻5|VfgMU}4X9,̓v5FszW?ӻlޡk<)%wf+xSx%[Ru;hi*؃̡!J:2)yUZZ*Lo=E粤IMgo
|Sc4+$Ȑr4i22H/鑄#q!o&Z$nIHO[9q'x+kGcGBRBB.
n~).:^|Z]w]65gvӺfW^ZW6޵VD+/VW46~`M:^jG$
3v&fGNIι>wV~Gӽ-f;1!Keݛev	wj2%NG'J5V.<v[qY
jkmeqC?=Go	!^ky)eN덹S<Ô2|ῦes<R
̪QGJ0"xơ/fk؊,z9sXkMz jikI^(p#
qʮu6k!\("0RP;cW_`8<{38|6sQkpzpOR+qڱ0-{ֽh>|Uz{"]^a~Ƒȉ+':ƒx2'Fx*afsm:(U"/vH1(&ĝx²(zGVVOB>A[A+mwQrMu.+
7>Yb{PVɏ7p
Q,WiXn؛*8r#|,Qhܳ۔%dmӌ.ޱMFPKe7S  ,  PK    A             1   org/bouncycastle/jce/provider/X509CRLParser.classV[WWàxAjtj&B	^B/:L8&q2AK{uRZ[v3I{w{N~+Q)C\n?Tvi14nr@@@~@wj$"ZKYn!qf0u?]*C6X'Rj,In SfVMMwv}ãf{iè:*F\ٓ-=7+fN}4=aq3:Sͨ]ŭI
3IE-[+|0/L6bײɀ䬎5ZcDST"lp<ejc&:kj:#26G)SpPیC4M:oR *kSA5#N\텁1-/Yj~%dDM=ңjѪOmkߡaOSm|$- 5M@KirNs0Sd7C\%|r`Ì捤TO dIoT~RVXz"[õsDdq&ҎS>ZDFDz
"Nz"Dl񄈍"6,-YGDVo'Ji|	y><r`N]n'Qoe\Cڣy{xVC>x,FQhM{gƂ2
ۘp%)u
vcIJ1o]S<q+~J؍-9a=.4B3~ːq@6x
2$ 
e2fBD-L<`KQA5L<e8,c%21ۋ2%zWd<2ڙ1+21A_И01DTvq&Ƙ11.nJ2|0H1a۽8)	?L&a&%
gfU&H0A.$'Q#I*UlUA6ahʅzF(\\+!0I^zWz2#O-c GϠ" G
dA5w-\ױ<ĞK7\-%4y7"]n>O2Sn/3fBddXDNlVVVM\eαe^C='LCcT_=ʅZpEh{+UN.u2Y/B{͗,,fOGMOXNTmg)l#67-SfW֗ޔWTrbs)FJ]'[]
eWE
5W1q"75wT`0?h:D苨F7QLwS~LBI~*cPK!4$:g9RV 8oFw84.EW8pKZ[Ju({@S ]\J@4B_?PKRY    PK    A             6   org/bouncycastle/jce/provider/X509CertPairParser.classTSUnD[iiY6m-X)jj!l.q!ƻ,O3T>`@&3ffϽlz nk1H>eH9ι#]*1qjR
/,R;ʮ'r9Rք|WaBsȖk[o-67Wexͭ,>sD5t}蘆[u;YAZYءXezЭXR{y7!cmNZPа}Y69vVeތ5_Xiijw\A|[7fgг[wZgp%txVUnIH	VC
hRl<SPuf:c#d,#x~5)Ɩp
H:O>%l:~881q0Ǜ#;40dtt1?^4ڭiF戍_P 1@qru_U+i]V#j4ڛ9aYFwTdXc{n+7$t\Q:Ri1x鸌[q[uoiqW(kY%>TiCV
i0
&>(l^O5daRAqƱ@;KjGkB!%褒ijН!
~%T$fI F`
|c&'p7uLq8(Kzz)*SSnY+fʘ?#W8o`63|E2	vDqf
}Nc9HX͛q/*X^"v0D3.4?b8Ɖ0c)LѣQqy:17
.u ?xwfha$^
Dw
pdHkRPK?JÇ    PK    A             2   org/bouncycastle/jce/provider/X509CertParser.classVi[W~ðEjpƀ65%.:$CI(..EkWj5<'h93$BR>pνg{{_;

S1 Û@XhF%E߳vw	}J0(40jD!s>Uadz
)zjL	Tí6CPm H	Y<DV+S:

Dbcs,:PcdZcJ$>eZ* %JwS~@ǵHh^1C;]Lx8QZۨo|cXT7Tq]T9cD@aթ#NPkW$
*aJj}nTV͎8bOK`uS5:ڐ{
A+@{{<xΪ#>-Q̶ٽp8:czt\ajc,0[O1KHüSfi4cJҦUgW_g1T{4ej]80M-%7FDTX!bU"EԈ5"֊Q/bEAFv
""E4	.pۨ]ŏ=Lb|BBUsGx~<D}lE𔕽sTfv)9(h8Lh8蓝~)00|^]mBzSИXKI=z,s)murGP{6Hby_2d
=2We4@3,D)dFd'2*XlapD8*c92`2*"^bM8.E+NXR쇺!"bEHD$I#,,F%AЁa	.0.
$t򶓷p	u	Y*Q(+,I8		^܍%؃X	=nh_N5$K\>C	t+~9ԑ?/fC
KSSHC`IHdH/w$C8ϫ 9b$ϡ" ǧ7&AwSރPsٮcwsaǾIl67]\-$8olwI'LbrjweMQI@xH4D%N&I#(eU@z.>.Ry+LTYy=rؘxco!3LeD^!際ԘM,_M)_k<u}tPNHgt.$eTo;MTW,C;-钤23K 
M)Y!%ڂ(j+Z`e|aEv*{y;n?e@5tWjR~Lm%E5%RA9DWcʼitxۑ7>@YS]\)34F#_Ğ
VHDӎ>cSOfB(_)$կdXPKh%  
  PK    A             9   org/bouncycastle/jce/provider/X509CertificateObject.classZ	|T?f7< B밇LBdUِ` hcLfƙ	ֵZ[UJ["mCI0Զhovb
Esߛ7o&3C~_߽{펼v L9NNXN	+PP!ˀ^-P>9#mvGPuG#;v9kA-nb#l{ݗ=#1-0]@[w=#MzޘCh%'X!:gg۪Gxhnݽy%U+RIfɡP ^~%A(Xc$Ԣ_.]D
:AyMdr6okkh.Λoo٥jS1U@\yGkSMwk"-4h_;@ZE40MM-~wtH[Cxow.iltI^- փ^Ҍ܍msh rno]t.2-QCAW;bcңnC6}];Ͻ[˶{rۈ\DI@FKlCd~;۩{w[ׅ0FL:çbZæ栏H+\m';p/V#Pz4JL$(ٲ8nP	Ő;#^h$ڡ,nL=zŧGz.f\n)A4AM7ޢ狐dQu'S+Wnhn!إ\j%:>ckqB5A5t0ĭʤ;-jKuh:G>I"q
'-|jTi5?m	֛3hI\Kߤ
XK$&yS2dnY4^$Gcu;c,j!6_ cv]XE'5_;cd'B[ӊQcZE&9;xCށbQd7cs:ؙ|8j7fY])^bH8kkb;ݶ4' $e_V$;#AM5%1;C1#ICIf*lWaZG[0.h?LNB:ZA_SZtz.Ll	r
Ebo҆Vj(䦹jud?{d%pq*C;]YPj|?JW3mф$<5Rb:F1HfSyC^ɓԀ쨱Qg&́ޡrb8ɱ4)aXen@:D9c5VnwC79ٶZ4e#Oiw{;-߰1Ę^ߤuHxɁMi7#\ٝe&ȌT5)QA&'ے1#ɹ\MX{mmBa0z&PY5h!Hؠ6̽Ɗ\)%F16QUG4cI:2&I$ڽɃhݱΚkҢswD
jdY6.HA )&WzfMWeS% `fhPfG;jX@Ѣ5um)u&<49mG@\<ּ\p7kf33uev#h5d%̜ccY4tK]2Yfj"Y%;,rj5:>
eYcspEc=ߴa+۹C.e71ad>?wJȢ*hY ^)}eʚd%0Wz43V eq0XQoM+Afnۈ2-2ǞQ)JYFv_m#jzMӴDO07/^b4w\Wb#%f&)N޼7Ęq%ni#ZciIi)/Q՜{Uhl! L1#68fd6Cn4S2rDLڕ/h:}/eаS|Akac%%_VG"j%t߹DݭE!Z="ɔ%K$C,P"&OvQ9^j;쓮ȟ6$Ҟ3bO&Ȼuxx	Np9	8a9	0	%NR'0	p*(PxL+P
S`R	>
<>A>O+Ы'xF
|JO+8@+0
|V
PE^Re>'xEW)%W_S
|Co*-wS
@*#^W
D"T.XE62GJِ3Lo_ĺj$h͞TѼ3\&V醆\Z1ʿ
֞nRwITyRx\ÓRtiTH;¿ldz<{όh3M<	YYi/9!eѸ쒊tRj{Xǧ)l!<W[r6SNec^zTEGϚz?iJre&sOHԬTu$#{Bi[6 )- %"=Ev%Uܼ~ {VjNsZ)f3LǜѸ13]N}\vYb4գRH*;\j9ْSM+Wqȑ?QKb/Ȝy%CYJG9OxTO՞+Fԣ)kQ{y*+Cj!޹|KIke4{鼣Ik٪ѥ+Zvf%<}0){Is~)
gunu.?/_uL`
B*c
KV1\ {ex(Cag?g_*pF^
&.v$:nc.~p;0&p7p{aea6LSOot.*LU-*TV*\pCzngx
x
bhm*,«kTa=^v|
72t;Uu*<
UcX>֡Ncעp3lܥU3`Z
04aH-Vx
gÈ
UaT0y=*6^ޅ=5Q
.0\7oVoUoSp
Ot
W=*{U[?}L__*\K|i	íGޫ(ާ8>ZǛ
q	~W`_!S>pc8`x0ç
R$!O:|O2agxօN]Xp[*t|{?bx@\8SŅp*ïXnesk
Tif3fb.CD˰/1|@Lp<O\X_g8M &p3y7F ]TLv2Q,rr1ǅ_?TA2g&!+{.\ fp5^f5b/.?2a؅w~:|Ӆw604/c\t10y/0|[?f~2@c(c0˅PP//Vby<"p1~g~{1aW
YS{LnY$@\ 8BЗµRV_JKB~)ӷ7'NZ?*qۀxXU9*j=btkI[Y5(⦣be/lۆpqMȏUq4k9kLUŎ֪NjiRGqApB~QqQފRj?+W;Kmt>P|W>H)H}"x(zEE:=0f\	P`aXEAjT  uImidg@a)cr`@[P NC(^%6]tc
L6yPZf $S3gθVŵqq>=	pCꭍ{ԑZzOyL8)Mc(]$M,*hŚH=>X|P
69L"㶸3(1LSM}¦m	w`ɸY
ӇpA1.u}-C61 .9!i p=ym[ryyIEfe?ϛ^UT=ԚBM1cyʷu
Tc$l8P˼qMlKumO	bP\9	s=	[BaEqa"oPoͻxz񧠦j쵎rI((wݕG1<ga	8΀GWsAMѦ53.z8B::knŷ$LMvή><fQ\MQHא!b6v=Vtpt|іQ&e̯.uTQ4#-:H?f*h|GFQGti4+Bэ u
NIeݔCͻ쒸tL§Z4cgPD($8S0׿gyO&$D[M jr<6	$Y
U
a0Ry|:)يc YW1C8lyaÖ~]7rmYEke />+$:{UF0彙عʸ@b2bX]֐Nh>&GB :ISq>>{C,RpS#ޒގLQ&['aC+rSIgMQ"}ѪmTI?~Qa^7h/h=/Cu
A8نz_pk>Y^Qpٕm(7xT4FDOmL6݃I\PdOQIJur`%C+Gmyl7^|Oy	'w[&>F^.wYJa>,3)a<E
Nf.Pn˓TNr_+XQID[!U"{5w+%jup<VM_:2C9p`̴ygɧS-|?XGC<8beUNU$H:MIfu119x=%D+*f/K7>2pţJeP[=%QPWAz^	?Rt =c# e>a#e>i#1H3)k6:Cn+8(ĥ	FF=[S<w[bִ)KT{EV`~cUh0s2cUbJ9,?s7.!l+w;cEc	(R)/LGÏR9<˺mE\aZfq''3r$\o^Y>!U,Y\%IB8,z
na.5.
M`faa)*X+ryy
Sf<2wGڪd.
mbCkj@|V0ASsH!&X0U$%Je8ˤR\fJ&%1TSl:uTR$Xg8gXYls(|q܆cj$b++]B0vPAHl9|KUV9UQ$h\`\)e4EMv!JK\"O<fh*ed1^%5/a*c0xF20J>Q
H"}oL?!^鑿5u&G"/EeP6d8SÃQg!`qߥ҅n1cQd7Ş#/cE]7bUGpPj-O	9CLRg$WYs1f?z>2}mrbȃ8Tb!a`6+(6Tp5=8M.+?OU˸aG'ȸ3)Pg.~YoO7ҨW@ V+A.(^PK/PX  m@  PK    A             8   org/bouncycastle/jce/provider/X509LDAPCertStoreSpi.classXy`TdfdA0  I2a8Ld&LXZk7nM[m.~~Ulw=s=s=;*,u*><kTTUحb*nS#SpAإNUo
f^7x1VS{I46
skBsxI,wajq=Z50WЫU9P0Kpcuh5oE2rSʛַuwTpXcP VF:ִl걡PֵGhU}=#}\۱{{eC-۾{fnBiwv]뻙E^۶xJ_{KwۺMލ=;7w7uwlo[ߵ}FվֻMi"^T 6cܾx]߶h4/,e1BL9#G!ë>=|?',`Oӊ#Y@%m$x@Sl(ܴ+l
:{
Xh1fd=z%z//3=N3}0wczh8ÁH/Yܧ(/fl(-QbرD:qv!c"c.m-R&Y.Htq&SHXMwGwc=ݧbCzteE4>9scZN>ɦ9ˍAdLtֲcQ9mn*Ҙy_{g%YdsZl$d'1=\Ŭ[2
ckh`	S4cg<MܺlѢ
L
³x&gsX:#QMz!}@c\#6`W߻~bqj0.W-窔M;@,x/Ii&)A9\Fc5fdNs2գf9wѨI遡h0?ͨu#nq@
SHrڻ=JbI>WzC!j
a3JL
dR10:Jel?-~wk}¼ 'wCA.+}lHVf/곲0g\RRq%[-<_J)F`0=H||Vfp~>SMo
Ń!m2m4Q&}:iԕ&N!
$Ɇ0÷{%qwM{#4y=&2V5zd3мcYE8t%	$uAV37[4Ynm<ܛd^	g<o=6Ա#a)h{Gd(!폅[|]R|JwV(՝P.$]OydKr.Ik{7g"3ڌBƇo-'71	;/̫
ƪꯚt/d]˒_XxGp ;غ|ǤǇa/3&Ē`fV/Ѹ-
Y82G$suH_SE*橨Vq*U4XYr+TTQѦ«"
*X`|D
QQSp+\
nP)7*I|Fg|N|A|I
+
k
P
T+;9VYACMX\Y3*쩭+kн9[5TIߜ~lsNΥUyM(<5jR56=Vn0d.L*sҕBS3"FԱ<QgIL3WmMM̴`"Srjt`%{f>gtdܭ[bO/Ug\!ܘ"OKpm7]VN"+|2x+_]ۜs
_M?rqLwA,}3[wZrI68-Qqni$s~?	SЄh2

bV\W
`>1K f˲9
bLUi6W*
(I`\.!v	\!pxG=xWh	
kqR?{Vc\N[
WG6
]9	ECT
TکXC4
?

TO^T*P"*Ail#O}rɐ-y`KKsPNsēĉ_SǨZAQ`
tt:hX+^  o]n'^ ]`/҇69	6:A`/FxՄ++mq
An]NI;-;ަKOsotv]N2f+V
xV	#Z\hX#ds^"p@@@P $thG1~Oko:K` Oj
l`_h5)N"%f-b%2YO}'/\(C9 \\9*hgb1Dr Sy$c/uk  (gxtl<\XW?Bebᙞxyyv'r@5 Qz]7B7>\W,9Ʃq(
eke
0Wy[:˝Е	ڿhuQ<ArCQ7|t>ʁΆ@ƞ{cd'Cp&ͶJ[C\K^i/
ELn7Vm	[6e2U&&]2Vk3*h3	vc1Pd^t5С)N=tv͔i|uTiڒmcɗdMw^_k1e(=^-` xr!᲏	qTzťͥ<t 2Gu.e~ɂvKC4)r~%è`N%{&LLч
n
8̪,VZАr	UCktүQvOcMØqѮp<	7=x
z#Ƴxho4(}!rke+Jq#EK
lI	WI*xEߎ=Fa'2	,W$(T?!Ervq;r^/A7_:'7_>̵ bIV;9J>QPkoHwnK2HzulW]lkVQ1.CA+h5/}¥xTku21Mxy&V
< [q9(:얓+?bwA8cnd[æld{z
Mu{674}e#Sw[SK]$we<,ɺk0c	|	l=6?NjsO.iV`cmdjC_'`rڋ]𷙌=$)q4(EҒ3JRűmJYR1S"\|<u;,.
{v0	Qig1ю3	+$_Rd$}S(~~?J\6ɈFRuWn[P]H	cB5<;Ã/i혙܀hV4ACAIT9o?"|U}G`g=D-lUw}%ǽRfCJ>oFǸj_JR/ٳ89
m\Gezo06XCN6<DMVaZ6HK*lT\x֔F	6cCF.1?ulGPbOdxft~p8fXJS'I!oz4o0(*qғOypW^e6~r&~N+ecGɊDK%YV=s5rj7+P/(5soSʗcEf21F@AAx
rM
λ8뻰k\{^q~R3A
QNfV̛*`{uK-^iF4nf<Dʹ]~יPZW|ҩF?7:*V_~y/]Y#R4.B	89g  PK4  %  PK    A             5   org/bouncycastle/jce/provider/X509SignatureUtil.classWy|ղp $4B"6&ET,ٵ]KzW쮌LNڤ%J5n+Іmz}6ڕdy*y3{o@%zlp,`g	E@* $ % 9B-8B-r:؆;U]s?Rjʌm)[3Yٔ[1Ãɑ]Dɑh,c%۴2K-}ݴv!
ǆ}KE{&DI.`عەtwt!gZI-yj2uqIK95*4
g89HŎj$)kS3ń	D:mLU2fVt{LrJl'QWQlYOejKS284iLi,$Ռ.9S)=\I.dQM'dtt($%qIG\Nv2`=ajE,E=[uQHY=&H4iJF֒l+ekJcJ^$J&UÆJ9XJ*GٟPmu+bR$._L>-kjRS,a$sR7,V,VCs2㭋U,jgtf&2flJlMȖ&Nc-UH|,MVO,ۖQNԊn]YzTT[7k'ra|ʜF4"E2R*c]H"$;"CG{>&UUǹM5BQ~m7ޱ51(V中ޞȉ=>qܱD]թtY+`츏edDJdݻ,r+]J
4լ2.<.<ڹ$~pUv!նQ~mxC1#}(:z=T<x6<<ǣ!y1##c1.xqIϣ~z⬢XjI>T^{_9uxx9𹇖ޱ6rVpP&Ee$o(()(::v4/ܷ}\T];eݔ6a_~D>˴r^MF[8D+{x{jcN}~FEaנP],K>vt+SYDϨkv葰
/`;f^=28^Bz4Ihu:	-xv0ǫ$܆WK؉{$J}nk$cЂ%eIh%	:1EBoe%mA q>x'w1x71w0xo/x)xD8Q BEL0jML`A$.2xDh|'Eda!6.E/O1sxB0J@/-ůRz\=5#쌡'j-%GAɝ!z^þ*v
]9_@K{+8ymZ7&y|2u#7flr'y	+&6S
8MnmXD.|
."P(P }A`|
n
/`,o#~ho}oE6-n7Mj[S}9p{<~ϖqُKf(BgH NܘxĔ',J3}h,pQZf.5@$m9<1/F'ȨN#"kZSonOtt=ծ"ibl	+}N΄Xtݰ.źo熦 -u	yǬ$#%i$+@W='k#ǬW,6J?PKL)N}    PK    A             ?   org/bouncycastle/jce/provider/X509StoreAttrCertCollection.classO@Ɵs	Hk&Ԅ,Ɛ@BRC'rK-rW+$Q%˯Q-,&s}}_'_x0<CVWK%Ex-*[e02@趌"PƴA6v>w#2!T~uNX*pe/#(n<}%,iBm.0r/;w@iv+'P4~s+6zaDKO0(0
W05reD*|5ԉ8Lڗ$v~AO
.1HrZ0Y뉺aa``q21&*I^
UL(C-w˞Uy÷#7gF}HRiѪ*`Շ}nm@`v~cm:_d1*T0g~'kS'YYTRf#v)PKra    PK    A             :   org/bouncycastle/jce/provider/X509StoreCRLCollection.classO@Ɵs	VcMDKdr[n7$ʢ$~?@(I{yo,.Cnf}ơ~FmOK%&Ex);c0*@趌"Pƴ";|wGU~nX*pd??#*nyx~9h1g0rO/;Oiv++P4ys+6.`n0U
XK:
CnvN>jH庝&9?Giv494IT+CP@%0q5Q,b*Q̔0&&pDɫa95̎
n2r.i_
	̓F80CjFOVT# EGpx)Տab& Pt~z` ;Y:"fDZΧPKx޶    PK    A             ;   org/bouncycastle/jce/provider/X509StoreCertCollection.classO@Ɵs	!ҭĒ(411$Rn
IImA)I{y/_<Cna^	P?#񮫥"Xzk2YiHr t[Fu(c |wGU~NX*p7e/}Ցp}v
r.->YBi.0r/;GiW|Ghh`Wm:!ÈVa1P2`5`(3̯ajvsfTjrqd/Il@Ο_bH=J<`-\p5aa``q41;&*I^
U5QíQ\mb[ne=oF3d/(*ӢU%UP H!8~"@#*'pd޷	*wT0g~'kS'YYTRJPK[n    PK    A             ?   org/bouncycastle/jce/provider/X509StoreCertPairCollection.classSmO@~zԢ  y9

bHb	#RֺXڦ#OWHw$|Gg{!_ffgy/_,AyrPR1̯<﹒Qh<B$wC['MͯR%"e/CTM7"e0)MU@xzSHh(Õ=~S	xJff}<JՓCO
&UU슄a%J|g';*Ξ'8$՝Ks+^"erZdKoUiB%,6>{]֍%C^E\1c@7K*CafQzКcίrUп;5fϛߒ:4|WhQznyܰЉvq5m:q˂[GcpB7&p&1mb3&1MA;&FPfDEbhD]Ž<~w1bM(G1 L^|GG@K6k}11]|_[
}1xwP^Q>XWK80@z@Wʥ>fPK'QJ  ;  PK    A             :   org/bouncycastle/jce/provider/X509StoreLDAPAttrCerts.classTRA "\# WhcRVݭRŧPK*>e&!A+%h`hj9жɭ>/0L-Ku|CHᗌrIka9%S3xmxp
])ZX2å.JK3tL&S3R+VbՎb̋[tZ"T4ճ.lOKSLl^RLeEn'byC8r)<;ñݠ<%uʖ]PMYZv"T /z^Ptbb-;k-Mx4;y9=̩^ԓLa!ݗ`"PQ$UP{ڬgEkB\^n]Jg1ujȥҭYChpT1
}Nh8ᔆӴtXDc%woޫhbfӀsv ㍊sU_)5sA*[Co,"ԡ!:ZѬc:(ъqmPZBGS::0n f0b.GЏJ\Rjʌ*Üהčv
Cs-_!Knpoق`hR"
&%NFgK|K Td:GMt΍@-Fanu=M-u2XB[|ma\%(8O	\$>;d1H)HmgdyLWw{3)soPKC
  9  PK    A             5   org/bouncycastle/jce/provider/X509StoreLDAPCRLs.classT]WG~a)BVmD *UƐ
H{3l0vٝpeorN?nz
 ygwy?fg}ǟ .A/'>``(OBq})pnbJG%j"R LCX	%j92?LTk6*GWU!uAhgMF3Vjպٺ^,
߉*96,'*6IW}==B祫A N%u&ݚNA[A<"
ɹ"4i"+t#k&ñ=PʭlїVn&1܋/p$i{ȟjfկ{GڕGܟlg.͐Hr"nĉmb1[`I+$]=@ԾQvS^\9719s8qS891LGvRx85wxts&S#:-KLqoح]1T[ϰL[8n8dCX1㜅8>70k\0`c^ť^Lrgp%Q\c_18ƍ\f7nLΘyc|Ӈ$1t
K@CAV{Ӕt^l.	bv'oVF/O|s]ΥA9Ʒ1ZXy6QmbѬ&-+roĶp7,$42ik4?Q֧~n bqJ40<;uXjqR~-p WHs$M)h&PK8h    PK    A             :   org/bouncycastle/jce/provider/X509StoreLDAPCertPairs.classSRA=M0"@$	K@AA

UT|ILB? K*W?$Ȓܾ}s|0UBpb2mS0T/Iͯ1,QKӱCY!vrmCIn"lHqRN6+4C3-\C0R!y	Js4t	ѧJIj[
nL,aq@]g%nLnGr~YU9C(%]L+/9iZC|CH,ȽRkb}q3
'gIKĶ
{56<~Rqӹ1d]gפr|9(LBAϵ+푠z*SRB5P]W3Ȭ-
KPz

5\ФYCV
mnjEL^$@s)I^^-QR람f:}͡3D,U\Q@	
o}+VE\CCXG":*Q:n+S~Pޠ b:j1RU 0*@GAt]e0d
0Pp<n	jSoyvoXDT]ȧ.ҭNFgEs1TJ2:' cOˎ08:#ď[}8'Lɭ0i*
!}h0u@tR`#3rV
Q PK    PK    A             6   org/bouncycastle/jce/provider/X509StoreLDAPCerts.classUmSU~7ڦZېHx
)4Pl^KX
'0Ȍ?+I@u&ss9O~E|#pǤ7<@RP?{IAܝجItn[f(m"\a;E!t\nj"d-($_Xp#!lV43p-	GA@Mw;(u%1b#IaqW%m9.r6IOIi -[=nSr&TZ&VDQ#%L5ʹ~IYa+Zd]<np3O!23i"Í;[;쬂eQڵu33Ӎ[ɹOZIٚ2?ZNFMeL/n筜kq
_DV_@Ȍ,9MԮҙ䒵UR|=R r9[RHDvQ0/$sI YUp}ջBԬ R]'ܵrJ,޴2w3<</2bhg8
9a]ԞRЙ鑼5ܑ*߿˔
mJV{|ˋ|dΕr5jS`8U{A\|N6s)`_ϸfU]Ka.UVU|D
'^JzL>gkQрaA>~ԩ8zgpIE#^Wц7T$1*NH#Be1&*SB&U[*!EIЃa:.Ǎ 1#Ẅ;i/_NHpS­ tJ@5ޖp>i	%CoZ׏^ɦ˵S<;
v~>
jdM="fhThl G1Q\!y
CP BZjXncQ
A2F04FVxJ#xb+x cbj<>ȏdm܌E:7RbB|l'h'#5شW)k$R4ӱhVl	yd7ǽ
`]ɨ6AdkK#y89XY+z*nw
uF(|O?C_<~߈0֚]u_PK3G  	  PK
      A                org/bouncycastle/jce/spec/PK    A             )   org/bouncycastle/jce/spec/ECKeySpec.classAK@Ĵ1jxIRt//œvBBM$
W
gx0>? `3
{Nlot[B\Gdc	ղY6TF]rw+J8\ee:[`Ua. ~A!arZ[n)(IW⏓t!F4Bؖ n<I|Mqvdړ
7+g')#eƢ$:^?PKhs     PK    A             <   org/bouncycastle/jce/spec/ECNamedCurveGenParameterSpec.classmPMK0}[Vwom="^Ax͆M%M_)(?JVAD7e^f7 GaX)47;crbB,/fV(NllVW"v|N	=r\YgUcJڕR}9/<kR]*g_2q67a7Nj2
1Fl [ֱMf\ -eRxmM)#CC]3"d	COPKf&   e  PK    A             9   org/bouncycastle/jce/spec/ECNamedCurveParameterSpec.class͓KAǿc#L~lDMC6:(	AuVt6QBL{1ӛa{31|~ 8C`<gvĥc8z
{}e3ڿg>=+]Cbd2ja0	7hm8KP*W:)7&<qGu{=;hF!Og}Z.XbrEПc骃^הnTBPo (L6
l)*.?e=j3˜-.AJUȐ1\r#cQ=xC5ە%}^s9/r-!bB:[cl
-JPK7S  l  PK    A             0   org/bouncycastle/jce/spec/ECNamedCurveSpec.classV]sV="C(ĖMCK	qp	KoYHr?Δif>G1압IZNP޳g?^FC@*] +bJ)%NRgmڦGb8&s|dEYՃǊcھ4Zvb0L*3|0D{2Bк<#:K2VűZS7uKDyNaQ2bcoCԵk9V}VcˁcF55Oq.`>Xv3*p\Y٠MǭiN6Z6}`Zu6*s5k)kZ7-Jv	ij+'O0&Z5x=b2	`z5Ҋ|Xث~]>gg:v-8Y[T)4{dW,;3#ᜄޕpABR%	.KxO	W%\0&}g[tj]ILQJw͐1[0BgSi~}_Ğ}	)^:w&
o`gVrA_d
UNch+%>⛩9/\NT#[7jͽy?YEL+8AqBA
>@ƠTu.bLA7(\-ØQmCB;%wEQ8ȘW2Rx(#%*`Q&.ʘĂQ.0/|\ǸE))<uީ{䂯z㱾j1\i%VqŦ)"8Hz\ZztuyҌ-qRv2)fvG慆O!ȩmbx%uvݖ'vAY2wc9+f_660D&wV!9 -cȅIƈ"'y^
mNcRwyR?/*'	#}p6V}ϕg$\8#5p7BaAw,wo PKcQ  ,  PK    A             /   org/bouncycastle/jce/spec/ECParameterSpec.classTKOQn;eax) E*)0Њ<Ba!q1k[)	.ܰVd޶Y3~wn2ח 20(!c72ʦy'x1	ᯊvMp'V9SuV*	Ji}HRw.$c}<l+mg;(c;I+JfyC8N9Vǭt"GU2ewx~iH3v:|]p:Rw\"[+^ԲKei	 UtoPѩK%=*zU\a]hadfM5ox2
bAP.ᢉ\m*]B_mTw5~>u7jCv,a ӡÏ1>\
B:E!	&EDᦆ~pwDnpWàx}wTMm;v}Ksd%%,L6e&2ˬQ
USpSOxhK3x\¼9Q¬}B	0p=) #
~<wʵ+|^{ W]es0]|xցgkpk]8R35؋*A{͆#ifbNCUh'PwPܧRgb+ܾ,Ir i1ӔB1S*,9&PKL%n    PK    A             0   org/bouncycastle/jce/spec/ECPrivateKeySpec.classNPZ ukܔBvRF&&eRK%	oCǆ̙$C,CMmDMec/1Ŝcu3(Bx7J[.*.Ti6΃U0>xH=cNHWk|j\588	B:JTI4.q"ՙefyG(ex;UXjƦPKZ     PK    A             /   org/bouncycastle/jce/spec/ECPublicKeySpec.classIO@mQq#q;@1
AIM0C`X	~!$<zCϺDA'L~^fĺ!PA)B=Bts>ZY:յd;pyl)RUVGb?*}Tvm}MgN	!$,)VoBnxgSPG
:#:"C&Y
51f&+!?kHdWeQX`VA\JE8&l(r-1lAI*cE9Dtx ḃ^&T5r+PKoF    PK    A             7   org/bouncycastle/jce/spec/ElGamalGenParameterSpec.class]OMK@}ƤQS/,GH驅:
$[&/"x/{op3h<⃀?Ɣ
Vܢ6-	$zVҪ2UN	;!fMZNlV1z*V9L\Uu&Wզ[gI#v
eT	1"cB8 '|]Hdf >kSk={Z=î;NPKnI   7  PK    A             .   org/bouncycastle/jce/spec/ElGamalKeySpec.classP=K@}.^SKbvp:\"ɞ 8Vna{z pmJL	ӼaՍЏZͬ`c	}ehr۩NMf2ѭ-Y8奞:p]C#UlqNq(^VLCX`Wm㉭^˽%Վ`a"z;<_D~oPK1L     PK    A             4   org/bouncycastle/jce/spec/ElGamalParameterSpec.classuJ@Mh[[]ٸS)`A~iB~J2V
C+8{?_ q@0]oBh]i$	
)hmcB7/<q@
"XZb.vLOds%'	gY.4[2#OZ,[CUՌ݄>UBpzḘO7q`bAԆn)=6ngcMlQ.eS֡*t'+o(bO;ionFm_PK>a    PK    A             5   org/bouncycastle/jce/spec/ElGamalPrivateKeySpec.classPJQ=ǮI4jkY[hPD)AluX7Cn!+`Q$+%X3g<`>? K"u'Z"61wSbL(3~؜gsv)kze	;QGG=Mɠpv_p>-. ^@h6#hæӟ*N	--E;[:+/JXK	Ph?/PK$Ύ     PK    A             4   org/bouncycastle/jce/spec/ElGamalPublicKeySpec.classPMKa~ƏR][ft("$Ax|}5UPhTay>` h(,$0zfcVSjF]7:-	g[wI_..*Thh.pZ9?s|8>~{yb^MyUƑJ+L%	
AGZoFPېk	P
z]PKf(     PK    A             6   org/bouncycastle/jce/spec/GOST28147ParameterSpec.class;o>FVh'0Fv 
ade12'%W&'g%'f%&Y$%榖«AT'+,Q?'1/]?(3/q, 0030&"8@7,)\.Eɉ%)@9`a` 	i& ͦo#X0b4v~te@Wŉ0ATe` PK'	     PK    A             5   org/bouncycastle/jce/spec/GOST3410ParameterSpec.classVSW]H
JZ?WI6ĪPME@cm$˲vqwWW؇N_|NOtj$@ZÔ߽|9&Ͽ ӂ͉dkez7ڋބh9ҭ䙶U#ϖ+6؋3%pO_.!CZh[NMp:Y9!Gr
t}0EdTL`aNAbHFt-| p°]ŁtzmbO8N9͝muךZ,C͖JcyQo
_5oh|f^/x53\ފ.minqfԺP[JeI_gm$Hwb;:c/[z%]\+e"dΚ#	6f/9ݲDQ/ޙYmn
;/ivV+nmvrP֘ukKun	1	K@I	q	$pFY	$|(1
Um|d~޼qߕ v5)uW5oNeY3#վJ䰯+ PhpCA-_|n<=J-Y/?&z~wx$|#M>EcG0 8.8&!4ːø+2ઌv.he`Ẍ6ܐM>3:^|| if0p7F@6$>a41<1|E31Gb(1<s~|Nߘo֜kKSd@\ zM\2SMpeApNߑTu^W"D*k3p<NF!ECE|e,Z7ѓWeXh{
SJj
O5k|E%tLzhrG:%%$}zb|+t;y(^J[za+UI/oٵ92b9>Ͳ{\qiUV~ՊꩪZWՇՓU5]֊["uϤ~GR!}:qݼ¥dO_iBWU%veK?30#CC9<$*FpF	,*~ЭvC>߉؆
)*ׂJH.*|B|<mi(̕*K.6gPK5     PK    A             6   org/bouncycastle/jce/spec/GOST3410PrivateKeySpec.class]KPGK[o݄bFAuQaH\5i(
>@*zΦ];=l_ jd+-:☁IF 92F`(#Ơ-㒏DjϳvoZc.7:z͛~9#S֧DYŜ$Cˣ)SǾpwȐ+WRwpj!yX*#+c-r	z[TIa
ȧ6eg"Xܠ6cĂu}g;E=L|T,Mg2D&oPzX.t<TgZ	@PK0E  \  PK    A             A   org/bouncycastle/jce/spec/GOST3410PublicKeyParameterSetSpec.classQOA]nR~-d!p0C2ٶ.mi$\/ăѫ17r1$}{of~}`+F.!ެm)=v@ȝ!t0U^T04BR!|ɐЩ3.kn=oJC	j/}ޕm{oJͭr;LHѩY
MB66Edw\_΍W'?a⑍
`6Lؘl<VaOcjH8c^
v^\1}M(oͦ$\(@0@] 
0j1XHbF<~Bv$O3rd</IG{ .spU*XƲjKQZGIՅ,7u07^Xp^_:Uj&I:j앫ݲW}= PKb^    PK    A             5   org/bouncycastle/jce/spec/GOST3410PublicKeySpec.class]KPGK[o%݄yWED!DWsĦ
A}>TMZW
w{3ؾ?>4Pe13K'!Z!C2d{Ƴcf'Ll0D>Y;8gc/xay}skM}`CZO<s*R*%Omq%FZ/uW6;iXK!22Ƞ@_lp/IP?яɋjS&/e
:m>A,X׷}TN>zQQ||T,MgrD&oPyD.t2RgZPPKʜڶD  [  PK    A             )   org/bouncycastle/jce/spec/IEKeySpec.classu[KQg-xI Ԃ}^@_zZmEwe]UACEv}933~|8~ >O`Ws4VuEeGly2(,jCjlc9bjfѶ6Ԏf]-8iST_u3Z6G\;P
E_HpT8mV)/=jMzXXQgqW C/4cBYݱ
Stf^1yZX]P(x!@zb2!İKs!O$ıAV& Rd)!)bt4Ft<Fn+g}\c?]q'0aJ&L PKrL    PK    A             0   org/bouncycastle/jce/spec/IESParameterSpec.classmR]O`~ޭ[=qϹuӪ|!\,x.L)oFqk#@zޮk|os Xg  Ma68ANm"[EE+Xl_c`ԗQNktLaHV됻/yj}1dZǆo96Xva%DP%+(LQců$w]ǲ-rFcCov]MUx>o2f۵o4E]5nh:Mo~
;m옆7~d^vJmj&=:7 m_eedddL˘qCmu+}p#R1+TcH bq%U#D*]]<Q(|>
a~1Zoy9R3C1ۈXZ)#͆<mIV:2sȓiR6¢X9x(2$M	QZ.˒b$kxZix#R1}Rx~gq%/rIR_eXRZ&v.tœ`?,#'6	 i$&Mi5==PQS\x1R,|	S/IwSk3!E:,/PK/    PK    A             5   org/bouncycastle/jce/spec/RepeatedSecretKeySpec.class}=
@hF vbhu3Ąu<`<Icoޛ0Ẹ42BS&a#s8&>;$,b%c┳[Y|V͚#/Fnby"i(|4zo:ܵAhxI-	ފsͪ>{5Ur*԰ղ[3݀.PKU     PK
      A                org/bouncycastle/math/PK    A             $   org/bouncycastle/math/Primes$1.class}A
0߯TD\7.DƐ?D Jw`f3`)]IsKlCJn07[(FŁc{2WlީMטď"8@fPKyY      PK    A             +   org/bouncycastle/math/Primes$MROutput.classR]OA=Ӯݶ.P"VLM&&$"Mױ,)/L$M|5G[b$ws_ 6CҮr!\#h4ƝQ2R#!i/[-BM+C~z{v{O8a;G+=.w+bX\zݗAhola(ٗ)<ƕMLLf(=mBMO3{g2QIDsx.`!B%I0%-pBA,d0Yq-KڒJ\Wbhh֦牰Q֕Kɝ[<xEX"}@kTY:4J{d߰~tjF|Ǩ&Cj8)kEV>jmk_#p\tj_v×)z^=|+g	ӊL3PH<f4):0NpCg%4u6a؜|sPrM*f_PKGaa    PK    A             +   org/bouncycastle/math/Primes$STOutput.class}QMO@}`V
($78&$`x,M[LO4x^Py~}|8)Jbc+7M#gH%[sA	]擩M;3FR}oz돦<2䌡{ΘtbίMgc	
JHHXHXgȴA2n![,r!XL?^)DLA
6 8T
@
Ey<1T9,E?IQD;4pLbpTmC:AQMp'(A,	Yuv&zh(8BZtEIxvFV8
OdS%,VpSPKAՆ    PK    A             "   org/bouncycastle/math/Primes.classX|S?_MMrm\Tik5h) Ebkk*:M/4)I
t>`7|{8KM::^ΩtG}Rsww+}t? J8{9}s~y_⦕﹘2M2wrk*fa3DE)BP%"0OEX$bA<۟Ɇp2I'a%^8	]JFͫԇ+c8u+YׄW2(0$S'`v϶jp*V{fkY5dT2hIx9Nx4Ɛ?%WQ٨
D+/d`hl1GEcx!O]i$)sb},%7FAQ{󲦦5+-hi[]NhZ6na.nhu\എT*ܫ$TdG٤t(	LW5iW
ZRe`mW1p)̙7o^cSq~ק&i8lkG77֣/DuR}JZHci H6jݩZR	%SZө.+P3Y4P7+V7gJ,{2n5aĨ,O\͞ќ̠ R[6hTD\dg$d	JQ+yYrWI$Vb4Sy:-iZo_	4eTB?%c̞$usq2˥Sߔ.Q6*	}mc"ƕĲtWMfW`QM15N=Y=FÛhV|yAK%js:=/jϦd_KtS6H/6hFLq3uqF@m;1f`z$a5	S۟j}	t+6S2لZKeS3S398Bs[KwXz]N+O|#c3ӣÓyηi:,-.`f1FgSΠbqrTb-8S^f1-Fx,b-fŔXLΌNT:P\$|N5t
N =h\i:Z}il9.&l[cM)d-&[5#tL:WT4M]ߋV7P%F}\TM2(OD)G'MɲS;e8eqeN9߄hJ':D.41ǻqMnzLjEOyѧq/zj'm~
iIp)|0KFUM!HTCXf(N`-&	>'JJ%Xt@iH`|GSA/AO~	ZDaH7$oJp:|KAvߑ`!|Wv-A<(A<$2n		:x \p#wM<KCQO!x/H3_ra?$?'xW xu_U>	~BGOx
#OS,7zV}II|.O(=:A̿<ڊoV:)Ǘa47%ɃP͠+0

TN:S0ԜN0~1#{o귮Άpp@}]i:{Ϗ;B~
D`us7Z3Bt N&1 ikhZ	U,E#[tO {wwgwxsAAb2?:d>.*Nxd{U9eg0s.2CwSvC)5Ìչe> /;1qQIvy7
8vBZ6JC|2eC#AhOPF#qcX$!瘴{nCѬ` 73_p@}S(gMndy.ot<&2k|xTz\H>=s>fxfȼ,3\#=[Fs5*Weƒ/oyjf?YNrn
Ex
^]#<ʇŃmSל!=5`NM탛:ߋ*W$!ă:BYh;86^	^0{q޷N9O5!dnF2+ ")B}"ohataTiUFXZTha0ZnFgڍvnjsc;
mV
͏^oh-cv!\
A -Fz-R7қMqŭŝŽŐigiiiigqxҴxڴxɰ8G1 Zov<b
HW|uZ][L㨷BruQ! yqR'i
xf_8A0<vfIna|Gl'\E:;#R-۹sT9cC';H|`eW֭QaU~vBqce칏EǇFk	)u<0;+h&F>'*D!uF"6Dax7SgR;6pEpXOE=2n0:t6aS>@w3RcT݇F(iq}WYӳel,I!eTVz:mN-3pnб[sh$<Z-:;WK@`R`j^ ?KmK
_f7cK9bnI	^Ce~mɅ0rEx[qXίQpltou]H*j#lGXwݦza|Tx$tGH]8XUTC#X{wLy	'^ t/Klm$t;FBGB:>W 2tC&K;̫nR?lʐH1MHݺ_LܮRNt4 ;9Wk'K[;~-_hpekEW!Aٗ[
|W	e{Q:͡,DlÚ}rʔ2tF׳]y	xgqg0p _aͣ Yj>W(=ou Ng2*1Ynr+AAѰO?PKX;    PK
      A                org/bouncycastle/math/ec/PK    A             4   org/bouncycastle/math/ec/AbstractECLookupTable.class}JAlv[+%I4v Bh!g!n\wd3|+m,| JWpp[7fB|TT?6^RWsu/!+Y	o1ӵݪ2F/}iխu/}?LR|&D|]-$#%K&Dwe`i(fC'F
7o?|PKz?   6  PK    A             3   org/bouncycastle/math/ec/AbstractECMultiplier.classSn@=8qpMh<Ẓ<P) 38:vO*Sa6lbM[D%%;{_r1d@uVĐs{%P~o_P&0LNoS-Kw>w|x֮p)?<pvI(uPr'i&WX
{
{HXIF+R=qԲo56|/Iи#x'n9Jj'A&^șMM̘8o₉YriaR㜎%.<5	Niyla!e#
Wmdqƴmp%sakX0.㖅,i`4ϾV7DUs`BAL>EF1]Uty+1V׋j1"Ga-ƽAF1ԍgd
1B:3H%#yM
CxMiG;HPKz9    PK    A             +   org/bouncycastle/math/ec/ECAlgorithms.classZ	`yvgcd/ykY`
m"c"kldQv$-C]*Ⓒ)MT68(W[YD@IJz94M镂k{oFZɖV놀{|& `{@^|21p4jt8iIb(5_սd&Yhcil2S`P
'wBSz(_h1ٔͦޡ!۳o7*[Սg,hP5/nNg
f[ н3oeziq۶lOĶ63d^ZY
Zpu-`{/X8骎xOh"@Iv 7e3ٛMG`6ozxa43O}#f"$@lBDgVCbK		 -$M\Dy޾\6]/of\`mgP=9ڗ$ybe \2_H]|uO,y#RݭI8f8ܖ">1Hd@26
XC2xMf
PfڵzZ@+
:~k׾d4]zux~[__7QKS[ރM
\~O.{p;)V^;^Pzw.L%MTr,Ds>ɕ2sQ
5Tp0h/~ilO*Y8&6t5d%D^g<WHSnΖg[S)?ڔ"'v,M/)V@;-q슓=o<BNm,X:)gf -$Ѩ\V4ͥM)|2Q`S?KҨeed3B<S@rlF,ԓ/ǡF01XQs?X)U=j9 J,$Q͕jKʲZVbGb
gD)x HMvu8;lzۑmovvX'Iy)ŏ١Tw&	eR5\6ؔ̀9K}h%˪Ι}f\XOdfI~GQF9>f9|gpd/Lv#j24qPáCC=ra;8C;=䰗>qⰟC79G84z8rHp LoT}͘rLz6KԢٗDVfe(vG,ojƊ-叽km
?-qyXFW·{sѫWVtHy{9Yr*!v!wp.Cau6:ͷεaQufw3MsW@Ήcvsm3DО7]WǼ"Am_FߎW P#9*5[ zM䏡yr]Z}Tbʽ<;n67*# 
Tfjl~Tpm
K,IDD:l""[ kEj."`12	(ˈ&F4X4X5Xg4Y
ZW5y{4XCd FxQwïi
/i
F55hOhH|R[S֠~]M
nAd=e
3D~_ߘk4kI."y*Tǉ,|cQ8N䷉|ȟ3"/DCDye"W\%RD_H*"/5#D?6T)=!=N"_"DJ|ȿ"*<CzR&%*|U8I'
?HDK\ST|
oC-7<K?g'!l՞ɘ-x>OX!{#HAS|@,F&uG[)p/:{Y6q/T	~̋Ј>Üc;Qp:h?ct T-ۈ_װaj&8uJ0}z4|=؞\Kye,(	9
q^`끉{>|kaGx9op3<icp"*#sF\,0$e8yĆ]lYu71<;ΌqVw㬞zSjYW@S|EX Qq7hh3
y]₆3e8߄F`|#Ph)kXXD=WJ.G ưтP̐JCaPu^uG.xE4,	`@w	oSB8t
Ef솏MYS84|67aTt1G`Q8H%"éKLt ǪhR1t	'!1u"?Q`0\eF]ůS*9aMuW@toW[Gc%}E|11rG	:ƘgtIGhD$VJ|
JўF/P5u
npMb\ɳGx<ӌ բ̀]5s(Bj0̩a|6eJt2y|l˔Ӭ]V4j\I"QY\B.	}9
'n_B&.Yz!;*a!źdƺ.ble*-!E݆:цUF<ǿXċq8DPt?.-^2ܥBU#GtXtgT
XȔmm,
ghH"[BD9Y/S}%q%uEt}Y<a]:!=/Ydc5ܢu[3Δ}GYDKFAEDsn{Ms)6oC?fmVg5ԩ5ߨ1|FQ;n-a xR5hAgLtE{ 2ƶ"WtȫF6Fjh$Hс"B!9dK%I˘k85*6 ,{N9_ͷa~Ş#~_
~uM@$&O24
T܎ybׂ4 E\Z2DGDE4 
ٽVn{(MNytM<q
aBexumh<IU-ѺX:,=94M=>x4+hֵuCn"~hӼ@8Ռ]qa?z|W@ZSS7OPIQ;
E%]6=VN|~2Piee=P]KWcZ׹iiG?"O+~1;$0)
Xv2{!e|-ퟰh-LPjvJxck/U&|3(,ĳ-'$uNB[D
[5\<,31;Z2!(R "~گ,yQz	']d_mhktǾbAjwQ3F(xYz<qu5@B5j3A#cQ9ᙱeqRJ83|W؍?`jزqmoR-k~A'FMສRD}^gx)❆0mp3FAJMp80g_f3mo>Im޲3d:)}TʋbTmCv-,=kS\mw'VawL6bE8
`K"z5]14c7c1VYL"bZH|}vnb$ F%2F]u&]TajֵuԞk Ibf`
nn]Ï>`S|gjgm5e;[B?fY|JՔh^/ȵPE8[uwaѝb95n `ūLvl
!ףHԋYOb6t3kǪ1 &4V1BVc>KDjZV:"u赉H^Vŏ?Y=0zFt/$&lI!
uJ-~Ґ>!u7U,D4E!bq7.Ԗt~Zf{4ÄG"(d!-נVCoAO-SqSPKH4  )  PK    A             *   org/bouncycastle/math/ec/ECConstants.classmN@Ĩ~AUh"16!	R˸1.| xfg_ϙiUR}dȝq7߸Iާf)S@ߤXbD^P28wՍ3~ua| c1>"Bϯd y"Cd1TS(ؘc([Ξa`S!`)
9"<VS@	Z,,F)N檷'iMҜ6BON_8QAǁy-,iwecPKQ2    PK    A             (   org/bouncycastle/math/ec/ECCurve$1.classS[OAB](^.K"XЦ&M@V]]0c5⫿F3 `h:93ׇ q!juJy%\#[d"ϐ+51ϻ7sO:aGh݀%]Vw|o:_@T`TE0VD{YA-!͡pIoƭ<F0NTÓ畠X +߀b0ϒˑ\	MP7N2\9^6.R 0
20JF*qګcV{3o5tiYy؎5=4r]8SEGL5um2n:
q^I؍N"DM4᠉806ьH$G%Xm8G;сnIzd7EOoWѭ8^VGEPy\W7׸ϧE |Rx(g4%lYK$$^N'K/GI:N\jR;=KӪO*SZD}&&Ȝ4+ќI9M%=Ţ9#iH$[$%QHƞ=]SJe`jVi:)^ؙ%QMC[igbџQ?%!kc
76)yMA팒$\<@H8J!7vDiK!,^
AzoQm7%\ĩ?Lx_rjq8eK)~PK*:    PK    A             2   org/bouncycastle/math/ec/ECCurve$AbstractF2m.classW	wi$yA	ȲڊƸ6Qb0EvKc1D3#6Mۤ4!M6iDv4
ڴMss{ml9pZ}߻fkϿ&ˏ
?Qj?nco4qWӇ}7kfoܱqg8Y@FMë
3~bu\_$Z4&ׇ
MI#3U]۾K@Y2d`v-m5[
-AI(p.]F.d	(VHNUOZ&ա"Ơ
'MUeEOy,긷ȬLS-68p^XA.liGհ`TAsbZ[v/GlUg/60SkÖfdu4 /vkA%3Td*Vx[eswUu{g>Ck4}H5-^"S@02}k|]פewYY=ޙمիNN3$AK<QJL~$l&u
R`65=sɢKaj+
{v|45[2-T)Y#Z?Kzh0-4!_gX;#~b-'k2膯&[ݲݦ*/D˛C(kZ,-@MWɜuQn5M/Iګ+";t:BPO*:ݦAdk*Q9NFwY|eR+)d;n]a]>,&V-cdۘY~p7 U#˩JX,&	%lF	of	Jh]BJh!a$Ậy$nuʍ,K#
Wn+E+?}浓eNP<hS]](P!sw^y8#"fC$_`mA]<iDSz,R:wn#3YM~8\s|mзT6Onɼ-P/=navosk2k-UJP+;\ŵxڻfHɄ.yѻKH?uq'qe2Љ*K!u{dd4"(FMw2AИrH#c922!+ct12aXpCa=Cnl5!kq/:"Ge42Nod,Że2bXv/xA3|AmLv>EA$b(CA1n|%H^>axkO1|a4~|Sfã_fxio0|3'AA$d)|5g=gЈmq]WͶbYPm+{v*'烈ij@-J41L]=<,hjc"Dx麿JZ,O`zؗUb߭)&0~T^&<Xەt@+JH5]11$ϣN$ónyh^(G%Z[W_M#~<Dp;C*a/Ͱlj+a@6s)N ⣫%=^m"~[}6їé/k8w5!<԰Lc;OmfϦ׼p~u#CDtugN?*Y~8$'zɋ[)n}E\W[uxfZDEruT+&:_tCIH$=(K e|tMrqDFC~|g++G-8nΗoJryk,AOõ9G8P
?͐.$V7Iy!2HH:rl*hˍq`'ImTj8(+ET}Ǳ̿yGe8pR|
N8}p*	Qm}?N7Q-cBR[ʫ˫
ט*ɡ IBB2>P.Ȭs#K9`΍L>Mփ%p@FҤUIKɑ -Lq"Xh
Љ X
_ci$NEy4:?vH<*B';vΰ43.^>Zj=笳m=䃧C(ȏ5j)W8wӬHjV߿:_PKttR  6  PK    A             1   org/bouncycastle/math/ec/ECCurve$AbstractFp.classT[WU0d
zZj*PxdrLҙ	Yu-WZw2܄ $9˙0j1#Uh@es+ɂfNyVupتVj	fLVI Qr9*3}X|i镫i.x/лdc(˭NWsҖa~M+%E{t)2}"goR
Nh:f\Y`G	s53皞+MwʷԒٙSMRWsP`S=R`۹RYlɤQ2F9?U
BlM`R0WG@`d:6?`7[s۫WhNgK;A8үT!gTU񔊧U<#;bC&.ٓ%Fj$ioo}}8IgƑɜ%3Vw<ٶ-S;Fa׌_}HO>NɭZt4ڢvl]ꄎN<!CLxAGu$1YO^эWtU*&tf8:S:$W5\F10pM9o3`Ű!<[0k⦆1nV2]\zw t,uh͒+zA? l`Iܛ2HUK7'0bĹ9Lw>G_4T(o0tEm`Et&ƶ5%w&-O3vz;eX2=n7BM
d7w#K2@uTWxǚ0nכ*ҭؤN)bt{B$8Ɋ31Z7nٝ1G1R"Ў_*<^ZWPK!Yy  	  PK    A             -   org/bouncycastle/math/ec/ECCurve$Config.classTOP.똝`[7%L#$VVڥP+&M$7$cs`mzwӞ,qÏ;Dr%|󺩻,ٚ5˲lY*]-NaDT
^ᦫellcZͶ)*TԌL0xI5
h*B-M=Jٶ^Q*5իme2VԶ5q
n9õbYex2_%nVԫJ?E)?%"ԪUv>R59ŜP,!(ᦄ.TQeZ	9x?]!%&Z/nO$,Mեf	"qJCvyE_텂W?|2nc@F'`PF;<2z	CǨ0	a(ƄI t (B*BΙ&8ܡAslU[p
0kjuE(;B/"
OPHȧ56<(ySRuW1DRQ":?Ctuyw!>1LVPUyI;M@g )~{O T<T]L{"ݶ"GK)|ēZN1!LOבI~Yp CfRj3<%;o" (-%j:d1,@>J/	_PK*E@    PK    A             ,   org/bouncycastle/math/ec/ECCurve$F2m$1.classSAoG:fIHI&45-qc!!W"4٭v7Aph+JF\zJ"Z"]+	^y{曙{翿`
da`M4o.yJms<q0ь2ܶEgҶ/x(JqXvK,E6Wp,^\np"}wں	rm}qp<\\̓&[jk]7rZo$6H>>,?p|[8k5Gl
)vGdLܡW|?`~3+Samk7)/=Re2j4!_)
5P]0Q
)kYͅ%;u:=Qu6v/P`5Á{U/oo?:Υ뷏(A!h:9Чc*:!)#EG:(S:t\qfF1-͌4HFq4W241\`28RON͵/h"lyk԰
 ԧ8})BSrEW.٬Tzyy'0EQ|q9cƀuc@1A_!:}6:p 54Xt(kg%IZ0]~F||ɒ,h˩Cه?^J%K\Z➠T̥2)Sr?KSs8~#ΪXOFqjE.04#^7{

ʪ>`H-Z6Q$+&QU_9Fb W0ͨ#\Mo]:Ur^bn`btYL
(X PEHR!cPKW.  a  PK    A             *   org/bouncycastle/math/ec/ECCurve$F2m.classVkse~l(BV(n҂U)%m%ؖKX6]Hwk)Qx^ Q>IO~[qs6ۋЦ)cfs}9巿~	ta [:lL@~i
jlPRҸ7E-uCVcB5=mz"VӧhTNqfH6khMshjF<r4$U6ч>>hS1Hh\הP*1pE9j	')><ڭXM(%(m~<5-Iqy٤ȩNu8*dgq)0C	}hkc	oL1ZT%ߥ"S4
kQ
f{j-Zg͔I9]2}(֚FKV{j"j;j*>&5qYՄq%&Ԑ'ʰꚀ2SLЋ21PPAU8V7'Rؗ4TUb
4W8
Jȷr-YZ=X	*+)t[Nfv3ƴ^L
	#iQv&
I
dO)FT'ZI!Uj+rmם""X,b"6xLDM"jEԉ,bEX6nMpB)=-F||fIvݼG'J-32hfyU-
+eGhMpOkyqOڪKO7Pü˛<w@'\H9}0{JNtm`:snpOhAO_߆,X1-?z\cr+ӷ8/͓wfW6[@7>{`fehb{a
z:(EO0`
v/2bDcxۋGߋ+pb%zxtAfs#~a!0Ƞ2c8gr;0NDI^a8ANzH`2ëb8A+^?eOE!]Kf=wz5MIr2$Li:P*24ːH
QР$QiVS}q,Je"ZF:.
hVDK6F]{k1	C5fiDK&5sJ%#|ܼ^z-/M+{RyIVep^3bK~W	HJ%GA#9zS*qfp6e9;h9vw!tZNC# 0PDJ4YO4Nz Y|rTDBw&o-m֘9djee~֌:e,|4.x,-e)=%4,7Ym)QVsnYҶgQ,+|q{7h;"\(Dl(wNM"vꈰ	Y0p$ŗY|6eElUrSlV+u*QKh%Nk	mWPoܿb-v2:Ze(E;YpլvM}xVI#&!z.qyN
Ae1xxV/]>ת+|u[~8.4;}8>zgcw	78G:SFDKs.}@%.+_enJ]hU;	7_n
PK8    PK    A             )   org/bouncycastle/math/ec/ECCurve$Fp.classW[W~fw@ۆe4XK
()M $8$3,T~Vkj-IVV.	OU=syw?gμs/ bkۂ37v	őv=KDڹ)Tp1-; tPhǑDggmpxD䍰e{cf
	;
y/lJӌDBI3mi^ޡ~Dvt2F<yCqC&L#jYi&Atpݺ={Z*E4eaXioH6]݆kR3e$u=MKCiqÖKqm!-[t`1ڙ.۴<t=fzQ
iK0$Yţe*=
YQQwXVjN֬M*4KfLMJVٜx)AsQbK2+LPwchOi#Z<C鈷g2FZ˴8<GuT7ri[WAXa{f&ilbi>JdSҘ˧-u#J!bia|7z`_7=;p6 W<;MpFL*n#mڛW/8`Z1v=J] +=#;f
n2d
yz	t
HRup-.Cjf	&joraQJ]:-j|k]Ƕc>DJT"3E+R\ҨQ|2-10[l[Li@F&q{d!c7ɸKƛe-Y~oq@[eMFꎥv9V4/N\hbkU;F7qFZe,ڢ[~Uev_.W'=Ǵ^e\j"kŧ6/[sg9u.tvƗ.n>>MğhMkX\SM+eMc6^um뻽ȴF9g5
a"kYW(w#{olq5V?y>9y6$Bx70Ð`MvahgxCnP>TԢTT*b*naPVC*u8cr)Ȫ	Kōȩh68*n/302ex!=ex}g >Qpf
t`.|]a|RA
#VЃ/1\PH#`Vp_PЇ2<O1Wp1|SIq_f2t3WH)ji70.]nYhͼtMi3S?;ʓ>
J)娀?QO5BJ7O*moZRbz$1@54J,~xIp,B~jyYB^UƁr^U-)ŏ
O'j_fbU9lسmz/.t~Wq1ϡ"z*9f\Y-AB|UbǱBU90Ʀdx?w8ew>gц4Ft60DkKDTK³FP/@^%UK#V~$ڨ/S{D4i,(]nq,_f"S$p$L)Z='fI?/+P[ľA{~;PTGx=L_"[Q,U OS
'|#>^c*ylسDp"ѷ&E˭qwMo;ƘOk_IłtQ&q<~PrPg</"yHB o\	.S\x<c}<pxoa(Fp|*Kϻ`g
6NٟV87g0w8I_^V8Jd9>JCc=A"'NPK.  {  PK    A             &   org/bouncycastle/math/ec/ECCurve.classX\[yt{%. -lc#$0NH d1B\@$8ݺ.M5]~ԋC&nl){w[^u꺡wH @Zs\}O]pxDAj5
(hUKA
nW	lMD29<ɔ'2>Khh2%"--kN&L:hI51{"1O2LҞLidMh$OX]-IŴ>E/Se6uzL'$o  1I7lgO2zOiTK2	Pp鮾`@1<
4uBAw=cePO/#PkH{7T0;t8t7p$xwd喾)iAd"Kgqp^p<gh&'OhI=tJK|hcQ
;bqv<(p&Qtsw0a]E92yX}\d9%ݏOu3!'N'SmI:h$kmSdm
ŴXo\"ؾ&x!8"(ָ{nʴ#(IZ!K4Ʉ0\&#L2%`0&fR4mmMidg B#Z2hh㑙xfb
u}1:y,w1WȈ9^Ԏ$)7ɢT25MIYi5qO%cDF]<qu"uh]T,eF%]^k_2x`1g)zi9jQ!YU[`rf,?ǞЌfR(.Ljx0"ծ_(5ƐJzJir9IPlNð9DsIY'1:^lj:L0FTkc,T$1yZ4Fa4Z=S~K`25E˞H˩5]'șH[qm"JMn}<M7ri\>B-`j6-꞉u.ILAk7?G
L&o;H઩d"3RgbGSy'r~ ,>w͚4BcHbIb83ei^
낺FәJwOӺޯ(Eo_ζ͌߹*@
4K5G#[[PվUa#o][ؾVqޓt5m]~(o+Yӆe{AC~cdFLZ
0@WNѤ Pi9=3M*tfdPBa0LʘXHLLlLd2ȸCƝ2񨌸)	I2%18+	}2_{dAOxd_d&u1oIZإ"ՑzRsjc*6ۿakosM|I/&(c}sNJ/%}=.mj	lw}\.<Kl{E/ˉxhk{@vR|JRH4zK/kR$VChY+3)z;+SU]U-$SGZq	
}CnIӉ#TK,-3TbBJ#x*a`*<~)J)R
(&|:좤"eVbύk=ZtdfC%d]&Wb<=U>y`]KJURq1IVq UèUqq&LA8\*&L2i&?*N­GDQ*
?7|Ux!ʂ/bN&39dI~SEI'~K^|YQ~|E*Rc33^*_nC+~nb?2'&_gv\?;81QD&x_gM"Y "62ynO&俙$"d&v&&N&Ljl`b&uL2d/
Łǁ9,L7MDؘ3QT0dRŤI9p
&oP:_?*HƯTODcL$T I݊@xJ[1	7nBLW~=y㟥ּx[i=o|ƍy4ޑ7~WrSQ|ɩtN5s*0>FҨNN5Gb	%)ZCa-PXQBaI#Cs:\}S:VqhYF"|L}+I_!uN>[KꭰQP<^|Ie0N"GMt^<T/Al1Am.Wwv~dToa1
nJpVQi->KV[yTpzU:Afr\ph=o_GjI½xKLw
]&P;OU<w.AǰyѱB<dier+ʔlC[~2}|?)}Y΢Jm}]>keq+uLNmO`LSON'胴@b}2~6 !=I254(s9040AP9	pKϣ?ٰ|UtᯈU7FL:mn۫b[v.B%[ΊJ+P1,O[iآQX(<{^)>Wt
d\+c_5#C9	q柣sP,d?gE	bK%QNg;ƍ8R>]dŁKf'}衽:?ϭ qW֥Ocf-Kiz2inE4PgŃmun%+nK~J
=مϻ.H=B|*:~o'%J{V֗}ҢX	>
_n	6ހz{.!R	s]"EM9PQ7'>̉,*ޑ^ƗEv[i	/f/oMQܻ@Â&UE-<# =KzWXl᮴O.}L#ӈ{`__oFrK\_j&\V-+HRV%YHukj>g#6l\|FzKrϚ]9}Ia#9jk*9]֜Æ
mYr!T{)Ckjf"}Z@1A7PqQO`?Mlns:4i|MZ:n]2]T2V(U5貹O+]<^Hѿd-PQr5H
j_s2;fH)m2
;ѽszoe6|ل<NmLZAy=s%eB2*֋HA;ȧ$2+K竀~Z9`Sw>2r?[z?}UM~yu4ߘ۟[~+P`&-ŀ>~
&^8
Tbebttp@rGTOr9~IN=S+fl?چ9Fw,ux/=ʳyLG^R-n#:4=)PqUfh2dn8YS^Ӌfo@e㐀$OT*3mK5ϼIf	JvD|yL';~xPKR6	,z  %  PK    A             9   org/bouncycastle/math/ec/ECFieldElement$AbstractF2m.classOAǿζWҖA)P-ȁM	DiYVN\G.F{ՋlR}3yyoa(ɒw}&tYmiWm]OJi8mXZda[>uH{k7M9'[2Yv\U
w6`ܱ	RS7U͗LW1i|yŠUQYL7<LN5_떶&טZ~ugY5y[l7ˮl[+G9U3/R Ȏ6wg?FA@&7=G(TfrMEi;tA A.HC@D"F"#èRƤ\2!%0a1N銭S,uyxlwMNGGA$Yfϑ}'RH/  -+tн~rOq,p]/y]P(({gg/#<pn|?c'/1
CP~ J@ a"/x7VOC9m!_ؑX{Sq	L8F.Fi8(*I]:}*z*wPS+z![
mjgͅB"8'aa4PKPH)  |  PK    A             8   org/bouncycastle/math/ec/ECFieldElement$AbstractFp.class;o>Ff
0F6̼;FtҼ⒜TĒd}WgԜלԼF#"U8&%&3030010r1232p!$XSRx<RsSY؀JA$'f10jmgU
$4H'' PKI<      PK    A             1   org/bouncycastle/math/ec/ECFieldElement$F2m.classV[WW&$aPAhU -ZVhS	VmC20	~'ڵ/<kj\vLQl|e콿}- q5 =qO	)ԒQzlڣ1tO !G}yBfOx4PgxL?gkپ3k	Fu{@3ryDj9Ss:lZ4峃V1/0@COmn RP9MjBSdqSi2rBtf(qr-PB6,u4H>Dh4LQZV2uh
l1CV{CYrMm-BdTk]=֥eNym2Ff[ejvjun]=P0rR"m=XIJ(GJmYUѺ,WRg^
%jܹ4)nGFf}]b\ʰfRE/u|~+dt%	t?ThyuJʫFy-ctsY~҇mS7rD_M;.c%SL5؉hA[yeh/ڹ1B)d#V k/CCUІ:6c=8>+QA+CC7l4BVЄ
9񼂍8)(X(<
2`bHA(X
`{0 c!$q'Ź0b9	$`N3pe,0Ơ3gg3025K߻dlհ"LSɼjY]öO#h^#U #0 [7ghTܖJ4P,Kyc[,
<byL:q=a;TYQFROM!S圏d5Pد7眸>Cf1Zc1zc1ޛ.c-R.c7
1RN5hy۝Nkމi{?`&$OZz7b{l=ŚJji+<]vHb\e{7[7Ȩy1+K&:IcD2O
9L޵Gt	$܎v	,'"rD(?!LM:#DFB,`$H2HЍtR|R L'QF_BRC#)gұ^M+=gQeۆjBq&Y&GU&̒Aj'xAOc8бZh9"u;zJ)-s;t+RtErjAZ~ē_
]%U+]P^0W]-}ޚ)JƏ^-Kw!wz2!p+tʡkǎ-Pr[Hdw{uĹ_H^C?ǧ+i$E''LݩYGiNL8rOrK=*MxC9MnͥRQd]){Q;Kok?PKs.2  ]  PK    A             0   org/bouncycastle/math/ec/ECFieldElement$Fp.classWwg&;3;rO F`$H(5 dwlf,7Պ*jI[()M~j]gnH4{v幼_?{ +A@9uuŃ.ƿղ-g5&
"x!c9dA`r"r9hHD>m8氙y"'ĉYI#kȠ|:e%oiԫLge1c¬XpXH洙sFLgxρ4n2*>eBsm[CfWk8n2z҆ꉏ7ȳnqj8o;ք9x&aN:V%Nx+5d;f̖+3lةF|]':d	&2) vvfci$mq v-
ȉhœR/sS9l&Z-GcN 	&gљR7jܾl4/]1ogd6;Κ8ߙɦz2y;q}tҦ3380sa;`ڜ0mTػJNZ!bxńIafq1LvVj⑳Rv\&SFo*RuWq2ŝ#'Dx\6O"|r֮B{0d-;y~
*+Ӗq5Ymܵt\k%6J6Zc
v<ufW#	ᕢtx %P%4O#$
H (
@+kyvl
l%hE>
!:	>MEM"!A|I@'l"OW` 8
$0	ɰ&e28EpA` K	N&8Kp%o|[!
932h	_#x$x[!.dDCxﱠٶHHa#Jff>akCwwyCZ.o]pt7'p5,OZ`וi
?\_i䚙QD?p@簇`*;hpS-x.j;pmq7bK\g6azF5q%chGlaD	e/sC]V:8]  B|XwQ#KU-%z-Lptb
/pmH>)"&Q։X4j
0gR*>G~
bPaI"uUUI
``BSYj-eA>5T[NVl aYhHJnTĭU}n{**/3(%abntx7:B(D#VGōՒo8Zz}NyaVъZz_NyӰ.6,D<NNA/ul;iKr7p<cGs,(͘"RՂ[)X[9݆WJ0a^hۭP%
 j:oi8_j&Wc9LX{GͰt3Lg`ʵ?55@[F+bק#M]aY}k
*Rro\#ה@L. |~u\˳CO,ޣw" n2nP3QK_mTh[7b~U)Y๪MX/ZCw'īFyG|O@+aQK4ȭ<mmxnPXep Z fdt))2@~C"faP
x$R:&WP"!_|mqxdѸ*VV\=o߄rCl"}dWőljJeb9nIv|?|0Kcc
::v=b~֝0yz,V:ȍhpQDx#j1_!Iݽig/{%
eV&no]we,m(E:W	9Dlߠ>kv
Dw
S T)ۈ}t_n現OhjXUݫ:KTAS<fgLW`1?!r7m@sn*GZ
`@W mދ
0Ylֵ s_ oN3ģ&³{a\Y(݃N,~zL+??7t=6xF]+/&OCPK    PK    A             -   org/bouncycastle/math/ec/ECFieldElement.classUrG=cg,yl8,	b%vbC΃%fL)*|H*a".Un+qso{n3 QK-$ޑAO-))ĢqD|CC.
I0fЩ{Vl9}
טWZsQWklא3"g|5b,r:̭ݲtkwB		Y@ɇsm[<dUKWr^86huiѰxp#kM87^cuS?*~ӫW퐻Us+Ţx4y5Gʗzd.,WBU.{(a "3Gnr=Pz!Kh>jD{݇ѶqN͊<
QZX=7yxu'ML37MebigZ^]v
FOE\5ZM_n.u"A3$c(WVlwVgػF-A0*`L }2pZ,X"અsf!q=Vx+>p3Q𱀒5e'>>=KWC/3n<ECFyh]q>O9hx~63&v=cJK'vפMʞRWE"iLUOg\N<-m'1bR01n?C="
U84jDF`YEP.eZ^ h᫧jCG#yPi&er#iE,)e::.ǖf0Qi_}9kc|NU&TU(6Z_KЦL*JBP$)y38qs|F;}=X2iOQJ袵w3s|]
ib\
qd{dPK`p  C	  PK    A             ,   org/bouncycastle/math/ec/ECLookupTable.class};@EdMhXhL&|.(#`m-y/ KL	^'k/0pmVi^!,l̶+:]!u:hΌ<JOeV8@?'@@GqOPK3      PK    A             +   org/bouncycastle/math/ec/ECMultiplier.class;o>vFĲDļt}FҜ̂JFtҼ⒜TĒd}Wg_"vFvfF
<3J}E2=JRS5	kdcd`e`a FF&6 PK@      PK    A             (   org/bouncycastle/math/ec/ECPoint$1.classSNQ])"eJi+WILH4Lg̔7gb"hbo2ƽ`$qYΙ}> "g6ChOomX+XmXG
O	*Uox{juC2LZ6={eZ^7mQܑ{ҰS1K;&]b܆cledP5i拮e2Jj^ }!詼[m+iĤ%kζ+F@Jxz_HjgZsr߶y)I߅OsʞSfU$'aKm"Ew=Q`/SlQ`:}9]`J--at$pa	D cg`-N 8paF#H1,C.C7n1L3f2[i:S)Gyy֭|QzQ{#[Td+LR#L çG?[\E&)̌Gd09{X&ۭofRK7zK$b7/!"
o	
c<:@{MLd>hb14zr q-?r9YB7O5]v6'Xx"PK   w  PK    A             2   org/bouncycastle/math/ec/ECPoint$AbstractF2m.classVwULwfgw2iKTRj>ZȆMh IPd;	S6af6}  Vxsgh[;3yԸݜc5'sw~ 	< !#pTB!۱GOu	'zDXL/YtUhwVU&-o+f(acL:i>^_Ri(vֳ䑪	q۱[\I	))|y,eWVs!g=ߚ`jh\:pkbKjsΒC77je	w2֒LJքYIUי5eGeSV²MD0;Ƿ&,)1Y)TlK[.V^!>O:ew,hFeM'7vbBގ1w)),	ɹZ~-e`Y-qg7n[pj1ƥȩ{d
S5~`$:	Yv4mEde=ZۂŪ&CZ4߫	[|B7	ŉdx[݅텅-AճᜧN;TTGUUqOا]z6bjY{c񫳊>軶35nsmosMőul7ؗinYKiY,me-ӕ71d;Cu'Kbhtהp%tMAAmz>RPHnIJ	yɹxsKxP<:t3h)|Zǃ9:`mnGLpCAgtqֱhD6341lgcq:vc@	!AYXѣ:1I<awaIM>$[CxZC;Je/1|UQaeN3a8EhDACE	I_`FV1abxcfxy#z/G8/gїb#}3̱%M7
.nT:].	
۩850E\xZxn#Ox7ٗ~Ws2ˇ&es>oF*ޘA%DsICiM,6sb6IC3#`F˼nCVHS[F"˄X۹C\eUѰ8M
!99x0r(IVBrb'94m#[E;	I_>"|Ec*pߠ^Ek`qZ1~E*
mIg*.J+ɽoT:;3EEz?*~TF_L,
fAkU|?'K|Jlx)YyPẍr/DrSxg9@vy2w;`qTInK<G|Jjs;8ׯ0hi<B|iNbȜ4Zτs'P4_k+n0DᛢeQ9P0*#1#1(Ĥ%練.?M̒Gb)(Tܥ'kx_ccKΊSO%Oğ.@LBkȾ0Ϸh*%Sy&iy?.QWW:^/??&x_(;y4:CZ4M4Ά	%{Wpl! },YܟD1rC/u
9j<n)"'BC6{s8/fsNac!-&T2|go
J^:u^+.I
iGPKh9    PK    A             1   org/bouncycastle/math/ec/ECPoint$AbstractFp.classTwEnɲ*$m"$ИB&nܙ տB/>q8Ǔ}"1}2ofro|%|\-mU/5ݥ0ja7h6\}YlˢlEOͪ/2eҺͦ@эK_w]_	-o尳rQǂJDR)/6<I<V1\-wmS`Sܥ<=[ݠUl&MACv4
Z'Z H(3dŕfG,pcQfnԕ܆^L+W{jǓ*ΥJE.Qr)խt#Z*mv:ae38jF
*CV8feS&6qB찣'Cg wr<⎔k|]G^*6PøgǕ%Fvd̾8Զ?H}3Ԩ_}TGpr6L\q
6`8	x	62ƐBֆ46,#+ļI$
L~y6Ew,dpo,JW-{>`ẅpab%2]Q	kA *%ղp4ΐpIP-7T~n1Ǌ4)-f8696\*]za>CEcEu`q>^OJ|+Y|s*\<w$9~t=, qd:Iar<VJpR7ZC1t!LOٚ{q=R\sj]<e/p_&=WD{Ag1F_`oDQZwzс!Eۼ#yW?7PK&c    PK    A             *   org/bouncycastle/math/ec/ECPoint$F2m.classWS[?tIHM$vH⸶1i
q_'.MӦiG|(3?N4t_:۽wSݳgϞ=9{~O_.5mixJ#l>nqcW(u&󙋙titڹ=nNa9Fgǜy2sLN:sSF#ٱ޼cE19Q=^ټ}P((ƯD.Љl$c^,96Rܼ!%r7?
]T/ϗre=]elIț->ȥc=
:O=XɜrxntX8,+>_(sRUUȗt)iֳ`Iǲp)3jPM/-"QUV
:v9u=l&o0j</MNL=-S	m%76j.f1YZj5MDq9<U4I;3S#xKr:l~e6XKU)奒,Pf;?R'Z6(b{UW̻a6U[汘e/C1MI;I_"ä ՘$ f5	VW :}ͤ82OM@   [ I@
DGL QI>:jR$GXǤv:Z0)zOS'}h7}'@{8%) # co^i@`P𺃀 ҀQ YƷ W |*r .UEH*Zav+.l!ә3%V#~ǭu~ڒ;ۤ~lM#A#
Cw]<̡;uimK~~u~=/Y5xej8r͟a<O
?Xf?9M3`_R @o O|;w'<³@Wf:Z,]0/uQ.mѠ}Ei/^^us/%µQ?m+҂z}[)]c­
QPǋޥ'i`Vk{_`jmycn3~^AғY,mXr5J/KX22u-

ƅ_}<sy^ȱkV@h
0
:EoD DP%Cjc,qϏ5	rg`<
X=?H&@h<)&LbuLav7o3<2eED+b()
"i+&b܌m^
]qq&fGFSY3^DTηIB4}CBޡ]֠T5ZWn}x`(L0uY-Nxx\uJ]6Xvaa#׈|)7ş9׻Vi5"tMhB4JDaLW&2bE4
n@-!ǽk
?Њe

<q̝ZuNs y,;Vf6ٳҺ1WhpvE;t/3_foנNWS	hkl`-y?%jS5x+Ti$K\<דZt̳ Eo
םvHΨy>Lܐzߥ3,u9:e6(Gn)QOVVUM}ImPRTPe#WU|
EX)YO0*#)}U{o#J%wJr$)
Y{₠\6i*%snl Sz9b2cEf"ވ<UqF9 !__ ߔ"|*()HI		BHP		7[zKi̐
	|.Su LUP8ҏR9",Twu]#BMQ8ٿW^ZuKRΐ.r.cO.:w)\eA7rnH|C5>!7x|757AUeGy]O(q3u_Lc}kʕp'vS Νd@ܹJ<Q*U/ spLI'OunVJuJt\ë8NXD]0$Tq=1
hUUbE@pVA?ܘZ5Tܿ"tDGɳj\?.rfW?Ed"<V~3pj?
'Or:WX=,^Ɉ+&c>}O:~uRLX~~oQ/PK5h:	    PK    A             )   org/bouncycastle/math/ec/ECPoint$Fp.classXs[k_^]=,KOL8z4
cSA-E,=/hNZ"
ĵ))0Lgs?Ag{lűCZw9{=?[#46
ݍLPtw4St5ht;r\4@]=$/F7l\ɻ2ޜɻcn
d50r~0Zٯl&3L8vs#9w!oحdi;FmچաTf+L-kqs+("'}X-iAs};"Cu+5H>],9ӊ
rGjV^,W}
	MdSysn	O`=KoRQgf63}<)4Z%κ*bAk.n
CY7,v^|c|%w Ow
ղJv
B)T3+In\eP؞bD>T2Q]Re<4O:sW%Y͍Q\S<ERlr(E/J=*.\9_W-Kw#;setL@;tYSe\kz3Ӏ.60 i@ʀ4@RA2<տ8~\rm,ڴܶeuvG%W[{r/mĪu}C]Kr۵jYweYWeC+.$jVTɧWo+b_W_F1E*zNdڰ`݆5Dc5D:@
^iͰˆa
mǆ(oCHH;uD6U5
7ȗZA,xȆ 0
D6ȭD,x4}4zĆ&I1"豏 c]`;aݒ<aAd9bA/!2Jq"O))yȷ|w]"Xp/T<Ky&))9@ CD6|<CY"yƾC.Rk
n;)}`}bg6p-Ny?hMCEA D2S﫚VVq uI}jRF (u(wY3~ޝ)(h?@[>	aޚgSYxsLmhT$fo8xS
S)^)$oL_NLÏOOr~x1ֽkLsٯkM
}N8>a
Lᛁq	V˯{ñ5<Oxi_XB~\&_d-zy[-VmQ7C,IM:a ^z!)Kaao-<5>#4mi4t8Ӏי:i7HLNq"$FhpBEdN:m"3!ͲFA`rE<[<f1hT_yUDD+`.:3®[i@M"jxQiz;i(FHIԄEhz踻ǉdnmnmvC\ĥ1q[hl'_sZh8`-N1br_]#$7cB1 mNp1		d`T:aj``P'T^g9!Y>i}R-4}π>vУ;9\/gp {iI!V9#Q˚&}Aay`7-AUzUuj}ť/f-sU/ y,2{Ynׄ Z4]u3Iq\jBE$.7L0xghx7q<HǱAPΠ1bLxK6`;ՋsP~d	2>M##U3%G@gJP8e~tcLЄiD
L
A}lfMi	i/AViqISy	g7ie1;;?_/aȵph	"UiǮAI:sd?
z;A#xrUzI83&jiGvܑؓlZr`BdZd!i2<Rd@b)ʅV9@ؑUг]fh=ᙝ`&M7
ɹ]uY&.y64bEZoѴw^7dZԬ.m
%4V=M
*0/fG5j>-ЧS[bc1MXq_s[IsUy
ӦМd)*$[n>NNW]{Bsr=05cHx]he$qMjdaw	 ǹѽLyQ\zGIDC_<ZCT-w#S;p=9FdpC5ɹ,'^2l	l}"FO ^QAj:u'.~xͺ;W_*;]D^i릿3ں!phOڱx[G
7r(s)N%pX?	ixa~5H=1om(?}@
zw04G:Xユq  [}1_IxQgvcr};1Mq4;3\$mT
=\&ީ<P`	2,FB}/JJPO]l `~幌|Zmiڢc~+K$aĔW>IC^4ӼلsJUm1dSgbX5g-hiu<tŇjQu~Fp2Pư.e
;n.h[qay7iv|Jqbh44+¿Lxyu|C\E$b0H
_0/5n;zڹ;DLRFCǂ&S!6jf>̋
9(Rrw<[4=MMin"h2_w:.ͣ9qo&a_R
CF[b.0!| sp5^_T!ۿ$T)%4T%s21Xq3R4Bl(m[u
ww"g7"@3t'D_duJ0z7E!]GkH8炆<JgUF;O:&?PK=A
  G  PK    A             &   org/bouncycastle/math/ec/ECPoint.classX	X\>f @ a2ax385*YAP*3jfƙGHbm5.MA6&mI4K}7}qk@&Ckc{9kY;`*p8 `AVWR#QկUE!зio}Mc z7FlXP>}׷+աэطW.54
TŢzHT&̕H:8GP4#%PGkgwoqA^[]mZP6wDCh$#&Q
Zx5hcS$5"Xq#`jt[֮h|vj([kheX7Ϡ	amBq
}">Q5ƣ#
if4TB	|i!#KH,%z4|;ʞ	C92<U)UCNtc-2dՎ{>S!X}aCurUbGL9X`5ӊ(=#NIMz0tU8D|և[|}$nOl=ZѸ]mZ|Ab0B
T$)%֭)'ѧqV
xQbe3p,!cdHMKlZzZ?J, R<tX[><^9#)Wt9^USPb(9#V%R23LF\E+jP4#5YZbvaPM:u9fe<ۢ[է9BaF_MN/fFMZ#<f"a޷xU5e^?YF
;&61ji/HMԵϭwSȞ	ӎU2L
SAk`
8ZHEKḦ#tm9
*c(<7$&cNTvGQ=Ef;>l;З	H%Xv	 %tH)AQ\.&	IY+$xWJpƣcca50jŘ
<WgR͘P2oək=J'篓y/=+{[f|SfzZJ]d^*(POZ1_vu'Ǐ9E{}v[`{3-;.9|l"{FDAeʵeWfg5{g'\"o6FESW.z*<Ax.v6'QKQu)-jh,lz>"k"r5_"?,%7L{sYٌ[%C9"
-C#AP
d%C3$XKPN%-\De 
e"j2DVRp}2(~&8> C|>$C.9+	'h"h&@\CU0.Y0!2SnA-|V[K*^Z>2#24Ge肏ѴI<q\C0@P{eXJPISN>0EA&8 	<Jy\Kk(	~7]p삷\p$	!_%~FKg%#_]pI>C9o|v	<Fp	| &G}?!o~K;?7O]p3<o	_R%=-a5~~vև ;n9k",firar ){@&ARL\ً}6*oI&wz0.3m[f>V'>g+A6찥;pYga,<A:la`A@]yht	|PXʊ;ٙMHj+ ww Sy 9QA`KKA'*hyax.I&R(*hd  
Ҏ \'OH\u) 'wʴQ\FKMq16bpJY견
AFp;X;тIPJڔiL+O
7:Bjn.	e^:rHlWĺq*W|yQʜ3Ճ./xw̴; 
i/C1SPJyzᗦ8	6uh 
`L@a,>?mJ4$j8x<{`*'`Yc͟I8'Yʈm
\NbԦL⽦GÏu>sgd!G1~Οd]$[dh\%Yte9+)ƛ6A@X!ӗ1CVL!;Ɖd\Y_9դe~Ӈy)Oo:~ƼDPID8
M
SQ:s? T[њ63BRS>|ypK8Pۉ\)ÍAų Ck0,gM̰*1fӴvFąebIE'G	˓hzw%(`8i5%Yʂ2='HWxJ,˜S+fRƼȮ||M07/b=<+E֐hՕvTf G4eqL2i>)M_L28'n'MIhIh4OQx

ݿ$]]Iv	MKllrI¿a!k]kOO WDol[^1ۍΚe&̷ sۇ)mZI^J{^|<_XwPsbDmyXXRߵ]k\W(|iV=_z\jq^	A8+&}&m"fr<!l/nyl3z?	NӬ ׫P/|3|SpkBQFΙ+>$^'?YY
G-9D(`w!UDm
[]Vքnsm$İJPi#18~qpc[c8Gw0y7>)/'!:Se_bO&+󸲽'ayzSp(âɎkT+_!nItmF`z5 ǑВ.zc0˘||)263
2Lmt,wqr
V{Bz(χmRV:wfǭT:'q03f>}uVQ9#uߍ%+(Hw>AH<:IR|"J=~JM5'!xz3v_m7av,Wb̴eX. PK,3
  `   PK    A             )   org/bouncycastle/math/ec/ECPointMap.class;o>vFĲDļt}FFtҼ⒜TĒd}W̼vFvfF7
B5	+acd`e`a FF&6 PK:n      PK    A             7   org/bouncycastle/math/ec/FixedPointCombMultiplier.classT[oE==z}I Y\czavn'5Jzw,ZqĿ
U+J{@j b	K{>}3;͜oߞOHj ~<q`Z] DmApmq	@N4ݐwYav{NؾuM	mb$pEF.2(ܼkmjsQr޷ 2nԂj[ɬ{vӗIpr1sUoRyׅ-;Ʀ-6Juf^n]OxbKͰ8ێ>stSZ?9sPf?<oqiFeYG̎P|3#ai͖ꝈQ<{]Eb$x
7)oQ"`5
AV,OR!.Rr̫
]rdCHBwЁ3"eA/4@1f @ø9IHaEi
X2Qp%qkംq^$,&.x8)|:fpIAYOhЕ/U{T.%ޑلDT4m2!r>׊ŴGH?'|z9Q+UȢLckeԷ>n,膥3}q52ƭ4KO7neҮeq!b&۱r,rѶJ,!̯XC9O}|XN&Tvq+?˓4$^FP%{4V(f(sy!_ PK1V    PK    A             4   org/bouncycastle/math/ec/FixedPointPreCompInfo.classKO@*`E jb74n&$$0.0`:Ʌ& N-	g:|gnp?_(ȗNMtubMwj3DhѰYwn-ۆ/-^B{	:^}T3l꼦_~%L˹tKVC0bؤhTE|΋c'YVwr2is.MnvpBEEAQX |,#%˶,;Q$K(Ia~Aw( qW)T>PݧVwd56@F`{uϝ ׎ak')G)c+؜g!vI|kS'hx PKb}  I  PK    A             /   org/bouncycastle/math/ec/FixedPointUtil$1.classUSU]a?r*lu)Զ	46ҨP)5B6,LAgxQ|	:mfL{9{x
`0D %kxN0ɠea_^Ig}fftnw`xRZ-8
V/Ezmv$e\g}qhA_/iNcf
SsL/>{~yt|u΅l7W-oPغa\.>2l٥:jlSpyogx	[C7_bH<{xtݢiѩlm4@T_^&ɠ㔂U1)κ]Y?0D7M7n2Ze%㔌n=2t.Q`&^ /ŝLMPңX4;·n(PR BO~χt<כ8Bi&G${>!G!GaHp0G^D8bHrp8^Q>\0k
.qhp8#KbospL	1-Č1!BL
qM hDpU\#9DWHǴg~9;Xayϳ9׬T
n9Q!jt3SPO[%h]>B}G27#OOo ~Qj-ga$9iۨO6ψ@bsoq;ܚ³tVJ.me=;ۈ<ץ%KnU00.r).=B!hR)0Wx?I%8cRXՐkx_
"P"\ RV/p\̸&V6ǲ\zEcp RP=9N¸j
]P0[CPŦh7K5|`)qXl}e2^aпQ1w c!2"ꬑq#:
T
6d2ߥȫg+kt{ȵ+=>b$Su{uܧFzoPKu    PK    A             -   org/bouncycastle/math/ec/FixedPointUtil.classT]OA=m"PHU*`AӤHcneqmS &}27FIqwf瞹3?~}&n'10˗"0|]qA<Y36+ۏﯯ1Y׶20paV}rh˽Z;2M"9*!z	Ia=,z7=nShiSw$r.4}m6n׌XA7HZHx*\!'2̠CnS
F)8 `\忝Ui._>;RW덒Qnhmveq!'mY~ۇO<˴_vt\TiԠἆ.霆I\VqWTL!b,JAN,	#1j~C2\KC3
ޠpUuiZ<7Α_ DA+!#
 W(eR
%^B)p}TYOy`b|ֿ̟!C$џLj=d#qڂ\&r}}\nHGTFEYQ7PK.5U  -  PK    A             ,   org/bouncycastle/math/ec/GLVMultiplier.classUrE=+g&q.+d΂	7d!옲	eEF^OUΥ|gSxe'3sՓ?2>ƐtqFl2]TW_wzѶߒ
[Aލ^'F-8u[m$F+CqpBvŚ=N1Y]{]îP>Jc]ZF&ڼ[ܔZ
eyܗQw=֗+|T,k7<OܫFnϧ(&ZS\}">]~20<%;հ+̅koDF8vu"zm%5t"^znQ}W~ n {/&B6o엕4[%A@?O,8'N1f8ÐcxUaJɠRbﱯHg3I@GG2]<KŃ%淓#Hy}36ZIh@
߶?$y?itn80[PA(ڛ0e0k,㒅xKc(6o8L;&&h"PLL}mL\@4"Zآ(-WX )LhMh&{V
J;1go7vQ{T*E4{K*H=)FBxcGZ
o+Dym8ws?4VtivnXIe\&3_X6k\P.{Wċ{hVbz;IDS,.0L'PKt*    PK    A             (   org/bouncycastle/math/ec/LongArray.class|{|^3{LI xpEHTP$H@#ZArQ.


Zoֻ6V7ZjZZkZkU|Ysv@K~?>g5kg5s>}RJuwwwv4RAEfǇMo'	aA48~z3>'dM$&'L0>!@>`#6'#Y$;	eLkiv6]|2]>a%dmqS]NDgYyͥIva#GϚ7w%cfm-4emM|ilVvn[-Mb)<ޛ>},\4ȅKZ>k%:\rtCǬ.Ӵh{b2_Ϝ=ƲyᒣyQ>)G=jIs,2(6[pŤzm5;c)	ճ䀎sWf[Bk[;,`Ed%t	vt<8wԼǱ9uZpG
'[SwvK癞虋{l蟻`IǢy3O'Ï1|]y-eG|G2/+w/]ŷXl/$gfΛ;n뎚1ov/e;%Ňv,bw&<afü4
O<ru̙9iќ;,iY6%sIS\ұŌ^g վ40q&|ot1/
Mʯ5/=ꨎE_|!sƳ[`f8p+Nesg_pBǢ|e|2q%sǙkyl_:f/ՑO[ԑy3g;2pΖ^`b5IˤKkOyp33;f<w_<uLgu,^ӌJPv;6d-X<v/n#lYt>+z4,^zbt,^"/Ye{tE]%EDKfp	] "( Qhb<pi4\q8
Nü04ļNzX<py<\{=מk/0̻ .0̻RC1a0c,Xcccc4XO yayyayЫWǘc^y1Řc^U`^U`^U`^U`-hiDK#F1҈F4b#iH#F1҈F4xhC#ЈF<4xhC#ЈF<b/b#F<bUя544ĩbx-FbD+FbD+FbD+7bx#FY#bd]3*2[l1k@^z
I "a0F#1c,ƘCń,&d1!	YLbBń,&d1!	YLbBQ D	'{	~&g	~&g#?#?#?#??uXhiii**ubcz_!<䚇WC^y!_<䋇|/Cİ/}1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#17ƈoƈoƈoƈoƈoƈoƈoƈoƈoƈoƈoƈoƈoƈoƈo3g?3g?3g?3g?3g?3g?3g?3g?W ?
G( ~Q ?
G( ~po( ~Q ?
G( ~a_3k}Ͱ5þfa_3k}Ͱ5þfa_3k}Ͱ5þfa_3k}Ͱ5>U*q;X]<(
ܜBqNN;XN[έSW\'vf`;q܁Sps
nNq8{bgO쉝='vΞp9*wxPps
nN)Թu:un:N[έS)9GEQsT9GEQsT9GEQsT9GEQsTTtVEU)97u:un:N[έS֩s8{bgO쉝='vΞ;{bgO쉝='vΞG.G.G.G.G.G.G.G.t1<U̟*wܜSps:un:N[έS֩sԹu='vΞ;{bgO쉝='vΞ;{bgOq"'r"'r"'r"'r"'r"'r"'r"<xns?<xns?<xns?<xns?<xns?<xns?<xns?<xns*?r܁Sps
nNqԹu:un:N[έSqΞ;{bgO쉝='vΞ;{bgO쉝='r"'r"'r"'r"'r"'r"'r"'r"?v]h?v]h?v]h?v]h?v]h?v]h?v]h?v]h?v]h?v]h?v]h?v]h?v]h?v]h?v]h?v]?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!?r\C!VGjǜ9vɩ95"sМS9:"f̜:2˩sjꞤ*ר8耯~g?<gt3>ߌ(~-V
'lGk(~M48̓zSeО_|װʐ,>dkAy^{׳kښW{^W!@Uj6 k^
W*ȫ	 VBTa^[Ҽq,NVPyu@+ƪ8Zɫ6TE^-T	<<QbW+TU^S2UW'Ajjͫ~y\ϫSU]^@ ( E,FmjOj"$yQȫo3jUxd^uؠpv^W'jL8?FJCKqC,Xb)	GApJxKi~p*Ʀ'A\#;JCKdgz Cq**A8,oA
ms q.@\] q1!.2!*!Xq-uC 7@q+may
f?*w?ޘ|ʒ86FS܌lB
[pp\!<p1(8N2g8Z|=kLYY2k)Ιȏ-aNͥp*]*׮~ƲByݬC@|oGeKr.*|Opr{^.Ue~I+䡟Naߨ#.U%~nԵqnFk@,J=1R=1W22JuciZ[Z
ض2#!iOi,ҲW:KuRvݕQk^x,-j<__eżDWÛ3JvǴ+UR̅usKa9?CFUJ&i'|q~
 \qJAr`YaJ4d#X鍪7p"$uHczroR9Cq	=Hr#\޳sf5c!|kk/Z!]͇j=f7rMʫ`Jؤ\ߋ5XkC(jp,5TᲺ/gl^1*{KqbL\
/7`+E\)jQq9ƹ⺕gb~gv0[+u/UQ]*G|3.c1#LCZ?816
g{mTQy#	~i[oE%[jgۊ^vwS'|y.ֳh1s4w\Gign4Dź1iPu昊/q4u%iIpVEi	O/Y©`6>L:4,eu4X桶3˿Yv]s3N:cRU;ϔB%TFi2>U5 K)zG=#BF]27S;S}u02jW[yk+G9*[zL*S*gj'ѰmQ!*.섰dd.smG^ue,M9VR+GsV澢\(lL9IFɆKUvK[ׅM#
ׅ/LP>q^֗0NP"X^dn%`dcׇKi>`d2mB>,qXCenM<;1ܨiߞ=;;7f+$~cy͢|Ʌ/a=Sgf=\J8	;nEMG溺_RM	b5=cJ5ck/UښV$pשk\z1R3aJs[\{O΁PgA=}Xz5LwoȍgOTB9yP!
ת~`> /@7 ^gqԳ YBŵWVVܞWg>bCϝ$w02ɒ+\Z_s(7VEtԩ
1`dUOgǠV]e5=,
a
ִv-rYu 'S8{$3ٖHyT?Xi=
pr0ZL2cJ]JoQy@VT?ұbmȠvFCeՅJr$ӽ򳟬VAvGXWS;&.GH6s1W?޾v-n!-è+P=:&\c[2=8tՏ
a'NG8jgn#ţٶH_B	ȲʲRIUFWUUWY5Cׇ;[,(OrpQZث*^b<핖pU{QU-U7ho5)OT4B&Cd,𯝽yUo`]٢ެaCW}vnwoL2unMOS!MV٘S+4}Lj5+b*Uf3*?^W}sHgϮ}nퟤɕW@2-FL7y6ޭP{Dc&Rݼ[Ňa	\Xڔo>Tm(;[l[9g78\2G!Ŧs%
#m4VV3%*mnH[<ˉV)'KYIك*O+]t&luUf(ޘ\xdm-%CS oR\߹3<ןț?N#LR1㨱WZSNKҼi]vi:Ѥe
-ljUI8|`J8I)zXԲif|U/je5)'X}^kUd8fްL ;¿YlyTNӾ
i#j^̴ڴUO٪a3&wVSZn16פeBWc})FtȖT>i5j@'.\+v.l6V?ixI{a[>iٷ;SiQ/Βc+e4q|>A7'8
^U}/
^l-roXV73ȘPMhvl>Onr)Y׫cӪ:6["en>]#Pwz
ʝłeNu9	k0^I癢'EeEe]}?eڧz(\~vC存x|e04cʉxnS_]S[^ ⑲FΩJ-x|m1[
jnKZg^lN3pWUzCc6ok̟wD<Eaxk,MK2<1sryQVwޚCkr6:-שx
:#l2<eש
L-o2x14 8\nTUI{%*pG^$"g*L{ڢOw-lo"jև_W䷺<vo)y`w+]S;1EEHe0{.>ʃuLԇ=IU]ë+}ixjf4NsJxw)rٌIUF_+#9~b'ك]؀9dgRA:4SHa3#p,#ˋ.i<7$k
*Иu6xng<憱?<}/D{:d4J)Y%,R+o=gbm}a}u^K	P*7uWYWe\[:x_irCzGo*sgm9Û}tu?'f˿ݳ77>-]hG
)y,)(߷FG~U>2UAhVq0y~K	7̌^0@<63E|
sPꆑA}Nue󢶗7]	h0/<'d7bGL+Qm|XGL{B]_#9eee1кū૯Rjq}~ڊohe=_gOmwfw^g,Xb9f˴5Xf;»O=eh9ȭ9bӭw֩q ]ZzlڷŶ[<Lӿo~qJw,7MiӝzNCs|{vwܽýS.~|?Ԟ\Ub R)
q~弢xϫa|yx>xq'z2ȼm{ؾ
V8X,}{+7V+KUW{j
;/8E|8^Y< ֹ3ۋkTݯyf~15O	nGx6g8ٺF[W#O
|Ue ^þ+:9n<)a-?<}]C|;.p(]h1*Q^<˞]J[7E~v%rҨAȯSuU8eT|cҨ9|M׍U%i0~4*OUNg4^cxN{>uUiR|4B?׺g&5<۪dRc?hZ!f4V0NT%ήVezNc=M5'^*3VW)2'IZ΄ɗ8-bU@GCR;
c>gZnUɆ!{Homۋ
l/}UX'6㏭^
#uM15ƸCp1>+zf"o3~'6Z%\9%{Pypfqo
Ã{~}>|p]YAzOWc$??'|!C!g`=UD{'	T}.FJ{C?dH=Pڵ䦵Ѵ\Okb3=c2,$nbYcYǭ,,{m,{SY@C5:8Z*
AMCUmAU!1e!oꌆ˰-
}
};
};
};
}AFC_7hb4
5
}
FC&]L }M }#L } v35 F v7ae777з	`bk215613Yb$j	۾F⶟7	FB`$xD@#d$~@d A@cjM361ڍC@a@@7#BLcHco7X02}G}sccyB|coзX;ΤwIoIoIoIo)o'N4)-3)-7)dR;٤з¤зҤwIT>V6f
`)M i
x)3M <2qMmShc
16๦ 3M|$/0MB$kDEI4Mi&i&iW&iW&'1DZ3N_kƉ8'`Ɖ.3NЌ7qF3NdƉ8'dƉ[8iiwiwiL_oZDEgZDE?`ZDEo0-!"6*lZEUĴLܴ'LiOViOV3*1Y*3fL0Ef,_4EKfLɢU3YLɢfL1Efio6;&2mMmD;MkDLϴ?6i2m&lDMLfL3SE'f*aS3UfTѿLT*ԩ ύ$7AMjI\o6MBoxCx<?.3_Uz3	u7uzB]+*cD__SLTjSjL5uMKu&ö:aD}aDðCðce)Q1LuC}.d2IEC=a!Qg9QW0쒨+'*aD]ð[24&ZaD]ϰG~0*Q]{&uØD06Q71앨
z)Qމza\ahIԏIԣ&'%1zaB`?Q?e8 QO2LLS&iICkagJsSsD=05Q`N/IԋzD0=Q0WOԯHԯf$u
ÑzaV~0;Qo2t$wG%-9=щzana8&Q2?0K{Gzaap\>`8>QfX'/KDD}pbư,Q0,ONJ?NN?V$SD}pj6N3];üxܟyܑzܑ
{q=\U={{&|'p/Q?u+D%p/Qw{K^Kzp/Q{K^ȸ){/==
{
LGypz!qHCB=Qpj{OG{T'ܣ=VG	h{ ܣ{p
hp{4XGC{4TGÄ{ ܣ{phpvn=jH.ܣ={4JG{
hphpQAGM=j='ܣ#ܣ}{php=(ܣ{4IG=,ܣ{4EGm=*ܣi=:XG]G
hp=pё=%ܣ=Q=#ܣ{4WGLڷ*6I;΄yo&t>. Ѕ.[	]<;s>;	]<7K%t.^݄^%t
еKxiB/K^W&tn^Mk6[&#u	
>ۀ?Hv`WBw НxcBwoJ	ޒzxkBoK~	= #w&xWBNa=	=\ЏzxoB?ޗcz@BO L
	=	|('4~qB MYOzXB?>'	 |2_JE	YB/I	
|._k5	|! -$Մ~UBo_KzzB &o$GozfB.o%gvBGw+	}|/';O	AB9O&/	}(&	qB_ P7&	My3|৉%^ <B7%hOMПrϛx\{j[; WKYuR{5JF%Y?YQ{mD]ڛKQ{ujo.j怜~!Wz'rR{)K%R{Tj/%R{JTj/UJ>R{^KHc<4?ڻ0e.j.jҬڻ,˳{RV{Ojj)Y=5ڻ:ewMV{;{zV{3{fV{j﷤zeR{^\jKj[jK^BjH^/UJHJzHz5R{Z^?^^^o^o[vR{z;Hv$($׫



5Hv".!Uj^Qj7Rj^o(ޞR{R{1R{R{c	<֝xR{zz-R{}zJSy <5&0c_z[CMjmYork{d)>MeృxzJw8C`[o&Cf1^Coa7XX
gHZxz*NdkU;adީ5[Pk5w:CPgXmw.v;a{]Ȱ.bz3dKZ2AֻzW15Cw-P]0z]
ֻagİnan[FXv]w'nֻzFZ^ݭw?{abz0ޣcX=d(Xi&=lC^dz/3kWk:d8zo1LZ]I{z3LYC)z3L'Ӭ)!z^7ta~
xfZHfe}0	CS߇a~5\2cZ <o0;0,N?8f8CYawaXbK	p`Xf=[Iߋd71+pe8[֟<k?i)ӭ?M<3?x~G ϶L෭?x;߱֟<Ϸ|_k=ˁ߷KxO^f˭xO^i3WY,?xk>:_`]ֿC_W oU
f_d.ֿxon[wXVֿxmXp{ >? p >d'[i#c?|bYE_i	>cZ]ss| a/X#/1E| lOXsYM_[_: 
KY{Vw|*gu-Vo ; lNՃY=W[oV ~bn[= =Z={?	꽁n~anRVDVY
o5Oj
)g5O?X
S?Y
Sjʭ?j?UX
Sb5OjR>Vj🪬i~Vji?mk5OY
V?h5O;Y
@d5OV4jX
Pf5O
V?b5Oíi?j5OY
S?ݭie5O{Z
hc5Oci/*X
S?5[
V4jZijV4ji?h5Oj&[
AV4jڬi?MjCi
:?na🎰O3l Lt
ef t
c🎶Osm 16 X4?ͷOl Bt
:?-Om ?`NOl rt
:?O+m )6 TW@l _c
@MϰLϲ[6mm ?@
@
@
ߵ"g6Kl l +l l kl _k6_g6.h
6hM6l-6[m m ;m m u6^ﳁ~A7@
@
?Qbc6?n6'm m 
@
@s6`/m l Wl _@
u
cC6ֆ7m(
oP{
߶
ߵ6gCm(߆?P
C
bCG6Նm(
Pw
aC?m(Ԇl(܆6o
m8p=u}] hko.lkoB,r,J J!  zCQ@XD_*m !j j!A􇨋}mEn'r{;QN"$^`CD9LdȝE"r"wF#E.rD)r1"ǊKd!WD6[8-"D9A"9Q"'l9YA"l9U4<DdCENyE~C"g)HD!(sD-rcD+r"\(8ǋ\$r%"<A"\.$'\!rSD
OH~dЙ|332832Vgg;y\w3(epq..fpmep}?Ƞ+fpC7fpS7gpK?n`]372?2x0
<<3x4dXgD?~3<s<3E/d^^^W3x=dF~[>3x'w3CeO|30dQ'=d>>`c2"n;ûՋ?PKu:  Oy  PK    A             .   org/bouncycastle/math/ec/PreCompCallback.class;o>vFĲDļt}FtҼ⒜TĒdTĜlFdHiI*;#;#!yi֚)ccd`e`a FFf6 PKΓb*}      PK    A             *   org/bouncycastle/math/ec/PreCompInfo.class;o>VFĲDļt}FtҼ⒜TĒdTϼ|vFv&6Ff(  PK0U   X   PK    A             4   org/bouncycastle/math/ec/ScaleXNegateYPointMap.classJ@ϴ1cU;Mq)ʪ .S&I1[)
.| J{s.3 [F|ơ9fZƁ8oa;
D?_F+Is#/:$	eFRTҨoA)gBBBق<
tTlsQn5E,;(9QQ:jdCi)IBB&/ʽԽAX1[3	6>PKQ  H  PK    A             -   org/bouncycastle/math/ec/ScaleXPointMap.classJ1ƿqUUoۭ7KiOAzMPdbWRx|(qv-xr$oIf>>bl]2T#'S*7gÉ)fInr:}4F*Fn<{!LhWB+k?deqp9*U:-֋uKsY3'TWM!c+>J`><<,c]@`C`	uN22إ OV2hДBJt.+a#E
X1l> PK`ݕ  :  PK    A             4   org/bouncycastle/math/ec/ScaleYNegateXPointMap.classJ@ϴ1cU;Mq)ʪ .S&I1[)
.| J{s.3 [F|ơ9fZƁ8oa;
D?_F+Is#/:$	eFRTҨoA)gBBBق<
tTlsQn5E,;(9QQ:jdCi)IBB&/ʽԽAX1[3	6>PK"*:  H  PK    A             -   org/bouncycastle/math/ec/ScaleYPointMap.classJ1ƿqUUoۭ7KiOA1MCݒ͊]J?ٵɵ&&|{pmruP=\0&NIX
'FDa'arVJ-$r3_i~QpT98C봠Z/2vԵ&6.=b8h
g/"P^75E(Pu
%:`>Y=ˠAS
*[tkйD^hg)`m3kO^#PK  :  PK    A             /   org/bouncycastle/math/ec/SimpleBigDecimal.classVSg-IM\(zV -(Z,f7$^~[h)^^?}wl9 :~{\}Z_Z	-<M18"kk:ïB.ЬB\'txXKgt[Kq-as<Sj8Wt5yYM5#d5+V--63jV4Q}C*QUHX$&9kPu%Q
2Wiɘa"Rh%珛錒UOHhSZɼS߸nYʝT#Nnp)R=&Ia(z&)]Wd{Lդ&iհoA@<iplB[LVV36P:ۓVT{E5J]5VvFmHJuK7ll}鸒tɥzzL{Iм"|$Wx/rVÆi԰]\"_uNj>fs$ǩX/uKiV:CCZ2ţiI#}cVVa$tDT"",bm"$Y:$ _>CgIۦrmzlR+
iVR-[_M+b\=P7Uй[XF%&KtV+۳bj]qJsfU+#52uuv;@ D^I2B8,a8ʶc26[.6hg؈^yxAdq5xIF=N=58!]d
؏3)Qy :1pa492\dP%=@u_cH0Ijέ^U
ݛjRIeLW&~|<O+d* i]˓g=h 1MX;HCf]"cI],rߢjYdD`2 !<]":,J}dg@Ғg5,ꠁ܂/r}LږĂ8	ik7FN=M'YF
ݨ]n
 RAt ݠ-TX_*2R_Ah<	,RV7h2b+U])
Y/Cl>0;BLwKX9t. 7EնԚ͍ץ6'z%&]F.x<]y~KGJqFR74>*F=e'".bu2K~p5n*&qۈ ۟쾉5vf-\G{9rfW)Q'ϵLmv/DD鐂RP7(U>uC<1WF=Št1J_s80"!:9mŕN_+0}:Iγ^AM	=Sw*s@ĳ@=Gҝ)#W!H{3u>L7t"]w̔ڐG_bQҸB@_ם?PKA  
  PK    A             0   org/bouncycastle/math/ec/SimpleLookupTable.classn@i;1.m\.Imp
),E
0qXQ<	6,*Q/رXTds.s̙1XP{aPoQ V;"J%d[c
؟V$NX$eX{Ix<s}v 'mAg?nȣ=@Dggڗ:
vxpԞwL'~?ÐY;$s*2q٦T0,il  mfCjgm0^/;#:e`̘4\.XBCG
tJKןHq`5N,)QT
e[[//RL8
Sy1x7sU~aIk
Z
8כ>7W0W5GmQױ\ԗQ"?cqׂ9sԉ-hl  PKL  =  PK    A             #   org/bouncycastle/math/ec/Tnaf.classY	x[qލ =HP@1(&i*"RK	h'nZqsQڮ=F-}MMu"Saf=J> ^5
 Q.cn'2^hzߡ3P|硁^wa&y7oɏd3daʎtuƢɁ}ɬfR碹:qѢ'ŉGMGơ8)kmΌ{.f|atH~2NYE'k\vj{o}L5Rt
V9+XҚvANqoh+;1f`d:Q,SwԈ51Qȟ̠TT@Y5OLc$s!BwAr*?>adNZ"bvOI\D#272v6=yvr'ȟ.I<(.P!m
ե,L=u2'|aqS0qCǢ-VuщhXIf^2cv;5kFe*N{O	
EC#)gipJ-kQ+tᘅZ3dQoIb_n.g1w1;hpw!X&vzyPh!/Itj,z+ey犎sе(݊eE{
;67}%eZ}03>)`h押}+pmg&I']Lh0L?>l'Snt\Bh;.ҭ9h3c8RD3hƋi'0veb4R#UCJgRt78G=; 6SׇNR"I&:LdhIeHȰ[=2p@pP~d8$}2X$"RrWw7eAɍ(bhh	'U^kT^jXen+7ouEq-ZVܷ.zubBo~Q-.<v܆*l[ukn2bZжB@G*DMV)*>*, zsVQ7ݶ*Iط.^Nւr֪߰=}_M@uEobNtvwq~*M[V6n[:Wx[4rTtw_Vss`}
U%
'tHP!D&%#'0XQ(fth'I'Aa(:`:4#4Z:l'G$x'>p?#:t$С
ޯC$bA>1o'HOp>4Qux=C:|L7ǉgvz
z)zi	>)_&Ix3HK>455AI<|U	H9/@E$-	~w	o	AO5(.\!u?Y/i0@'FCY~	BD?O_&# K'W&;
eBO>W
/=YX{/8Xw[Ik$kcD(@|ކykBX'}1=mo;Wv	aR0yHg_)
3%s"
q.
ե/|(90oqsC%M1j5(9!.u`%f`)7];.,z]܆zP?'x\iЊVb^l~O5	OÚ&K5@<
fI'vRw}B6%rBi£LŔht1
'3*1Y%n(7&t<טEZb\k}Ԧx5_Cjr]&wӴъ:ZΣ	S02<QS_!3d/m}ֲy&o
o@m11,=ܼA7eXp\j3CJ'vfUj$44F̀!b&u/KpWI2uCĚlQ|	1	ߋ oiX<
?VW6?j<<bxS\0KL/нAw	jL힅'Lϰ"*]Y?KP-$߉UC+P0!Pɟ4ٸ
<U3(y_EKkQzJb3#df/Zoj~C릶hƻA_
8)X٢ Uoh|sunv%em7ـOoY̻%x"x;Դqvه'^\!/pKTo&oI
ǆUͭMg]9@,!誄 %Cj|M!!7<	=z sIh
S"^!`
h(o`asP:T.QOѣhNk_WD(zH^5
Y~԰@L(19!%F)҅ep;gMx>ۺg3[F1jfEQK'#(]Yiolm
pc:.6"i)׉4%6]&YDl&5eĦ&Xn"d2ל󎶗2]gQ8Fwe-Ň\DL.5852PB=X!W:8V2lSX|Gb,{֠%4hY֑PIYAkeD p(wC9@2xd&fpYA@-::ZwPP^yϸwR1f/5|,k-βrwAbZb5^7˶P}J e>D<׉&O"ݧDÌ
lY˙)0c+u|)i~feC|
p
<~=2Lߘ09u^1ڽ
B^+)NJ7$y	˕4LM'㪡p)ڥş):V =1uxǆ!#dh`7p<NtDAo
S5
%+hxE&D883?il.䢦6ԾOG	=}3HzM]YHc.^q	Q$${WF]ШGujgo*<5X!)}`.
!I޵X&:^{wPz*$%H81~ċƳo >5qELQf
+qQ"Ⳙ+%<0NSofܔKcps#[l9ǬP,^/~P6OE|;i0R~@N7!DI.4iKV%$U!{եjD
,zTAj
QCV0j!thK	HT,R=}O¹ᛷk+=hk+j=|do݉o
lLRPKT  "  PK    A             2   org/bouncycastle/math/ec/ValidityPrecompInfo.classuQN@}+HE
Ĥo`b"B4,ejO^L4& ?8--r̛پfg?_ ǐ88lxǐ:[1荛Y5kUF\eݏna#Q}reK=O/V{3i".Bu-܈\7V_XNӂ}v:ֳ=5W=CXF|xt:_Y3 ɭ|Uc.97NM=]ÂEnk;fu!*>16l)OqGѰC2)
`XAE5wfLAmZs6C_2gT+k>\f+oz	ܤY>l$QdOK})^XvdۣPK)_    PK    A             0   org/bouncycastle/math/ec/WNafL2RMultiplier.classUmoT~n&:m.̌ӗ0B:K۰Epb7HqvB|@	$BWФ,~ 2-vb5
V?GΟOx
F^a̕9bd0vha6E3AXW_;٭vt'kJ2	ՖDaHTÙ뻡Škעmw
{!^wb;2$-;*E_'pGU۞#S}WmyI%}׾g_ϯے'^%?rnȠ7ۍmTynVpsڎoa@Y<Vy֊GbT00w"eW^#́l"p?6ǳ[#vDID^mU%y5h888$/r08^82YT~Yɕ`\˧Ҟ欙jgi]7Og
%TBtkԿ0I~9	?P
F5ġhHנaAC
Ҹa\y5$W$*^bo7UbYE$HxO*L\pU»*rxK;VUml1ٵOj4.FdP!Y,fQ$-tPb}efA1nbҔc|lq(;Z!aYP_^	I]oi"9RB⚕ڏc¸H>%]TK\莕iE芳5Arǚ"|eeq1|D&K
	JBl%;?aTC7A#M&ψp8.r0c~MQXc|AHq$п~
PKY2^    PK    A             .   org/bouncycastle/math/ec/WNafPreCompInfo.classSn@=%)(I@4TRĢR)Z	V.ņ=[6YDĂpǏGċsν9ן?l1CX,8x+ÓؖnSF]sؕ[[C}*bɚ*?k4Mݰ0Um!ԡ94Fvf7	JCaiurN~qtUs(r6c"+hkP1:&8pOiS|[g}[}[|[3|[S։nEG<İ:ϗ+yJbyPؚ8ǸA
p2XM
rű{De
	
M(V7ϕiT_2]İE׈pE's^$i'.;E:Cdgؔ	d)4AUblpsp8\r!K7[OHJ<
ɏia72\#}B8+ ʉcoM:[zscҟW/z4HxHۼ#(X{V}#t+_z^OO>F0/@<JAO_{ PKp݂J  o  PK    A             )   org/bouncycastle/math/ec/WNafUtil$1.classO@ǿU
	
'
;"@%r^bi/?_+&ZM7̉4gvߝݙ+)<HRĦuxN@L2ޮ;v{.dB/t׉-U
c[5Cmzgx$)w5T6a5+v`e%
ӱ̓p_6MOc=QAYMqcJEW :Zxz~^XM\
w*GtX_e:vVѡSEsY#]fƌ܋NVqrG.fIGe:.⌎6:CAt1.0Ⲏv\ѡ1Tgǈ^cY
!18#Ϙ`EɸΠPJյ~yaڡNe9JL}$k;B@`"GlWA<-?	} ~ZZۍQ"k_'#7dCKS|Jp].[wX;Z$L9	>[	{E9"
NY\5,I<87~PKT]^  o  PK    A             )   org/bouncycastle/math/ec/WNafUtil$2.class{Vǿ7-[Iu.U&d$ uv&Mli2(ꨕR2e/wHn1%l}WCxe9iZ6yHϽs=J}+ >=fcN(yd4VsLɩzV8_I&ݝՁ++[A5+qU.A388.e!aU*Y|rW%Xf\Z\Ўm	l$l/5?t|H' vXN%~v\ڵ҈cHE6Gc6y&ySU
7S7N02W%s	tN[UF-]8:s..5,ӡ=kn̹45Uzrc!mCnկ;l-ުۻvL47TYwr|Rg#U
u&ۛ>:T2ٝ4:SԂk+r"N5\TpjNg=lʢ{vծ36%O[nOYnW챸v2%RiuTh*>C*vح"b>*Ta;=q@iHؚs$Vo~U#-V(YS}47N{jh+߂9V݊al=(Msyszc-dh~sK7[_\?Vފ!dTcM8vxjcy6h!8 UH܃#Ĩ&[22RhFBb2f܆c;pTBǸ6qY(I[CH#tANLJ܁)^LK!|NBD_0,̨h81^PD]çPe2`|G0N1kIFg0xL،q2jq(+_e|M}2[yu7W55L.?oQ;ez]/V믣è5+RzӞ>
%RrT Е1azMR}	Ov,Kx+KxKFr0涽D3} 0d6[xO{+;Y9;s

?#\̩eH
#%Ui|w('s%aqH#A2	)kJf$itZrSо?EԕL.S^z*
lS	r/E:ryt!M9%*
EMOliJe!ty	Ӥ}^qitS4`r//T×98l[t"/vVdSG)?6OhFɝFޡwFxI+#9r/wF[VvqMpqʠ{/2cN^B6AQC]$ڈڐ_hkГz*Ԩ~O
YOvGxEO^]
ID
2FQqXgb`bPv^fq[T8#oc۔UΨ6>WH~軈"T8SXZ֜.x1*T׉W{Bbo trϓv軲»%Z3}?ROۇPK@/    PK    A             )   org/bouncycastle/math/ec/WNafUtil$3.classUsUn6f[ZZ,fZhZE"M)lBnA'036uO/0CMid{ϝ=s0-&CX!zvlA*57Z[e8s{m2w12
oX3Y-_d6ywKm QiPUlYM[nmQ8wZhʹug-;h}mZiٮu;=#0ZzeTdӠQǪ>'
>R}YsFQ1̻墱֥5t_
n_9RuewW=gmW=ףޞ3{Fcj<#ܴQ.gtQ/8*".bL1vSz%ZrOh:
_OҎ޺Urel)^5ڋ}>O}_P@ٽ@}*8WR0L0aL@P2CVp^Sp8Q0A
bUp8-S,#wdhr9aûrLpugAߐpέ90H;/X~[=8V+0<l)t')jz\F%IR<Bf4zj}|-,(~~EяAŦiuJmrWhfh3wzz"&6>%frnm6V:(Sq%5#>!+UlV7./Hdcj,.>b\
J$?7ƪhOe3j,99.bqy2yIRc*B8Ђm!cOqA.?qП=SN<!C:*@ztS:MdM;b{A.,0Jٍ%xGNP^B#A$	 PK)    PK    A             '   org/bouncycastle/math/ec/WNafUtil.classXwgF3`0`yي,٘%USlԲ,cci,dɕ`(uHJ}!%IM[B.eiPZ>c~9x=u{o~pɐd2p~j{Hު4N5)+mf`ݯ
rغL*a
:FfM*Sc
59#4kzv
aˊf/
b{8	/dK]P=4j{zH&SH3;-ڢݡÑЉhCiK#mE[S
\=JZ`:"#p;4G-JNJ&esɆH&~6n	!l0
-TGKoݹs1HRF.ggR3c4chfCY<H%Grf7$L3gXfsvh؈[ƧݩL"{VΨ^lٺ53<{9iZ#&aA֔Nt9,tU0f*vCIl=Lh/T'S<ǌ
74N
iP:m&\rdX-qsJe3ʜQ`hsHI3n-u[uNUS*Xf2FMe2`IG!3%MbӲ]V*M]EY.jpΌG,
xӝ0PSF U 㣅pS/YfjJHr)OG&RB$|NBP%(aHhE	%jYIRgm[,4Nt*<ZFb~Pλ]ZI3R +&m|ioe+>ZDd;
`)w.1aBЉ2Tl!_Xs@j}+@eﰽ40"N<ˣ˸o\N_)bt|q;~EF:oOljy{DXJ:Tl`d#Ul[6FȗYEn<*U*20RLzT4-xUE+#~*_E*6c@&$U:TI6:b2*v"	nC<###
qQA3rAAe|WQf#g9#o1MFtbo06#?VwZ<#o0&#_g[|2rIA78~ לMЅif1꣆2֜6y3ONJrk߯&rAw	z@\	DxY~h쥿Y
GdC":Izү]H&$~nADF	HuڨiUSo
WB_&~.<IGv݃R	OP&h3;;+mjqx>F{~g]޽&qm*s 	~WA$e]h,ty\MqH%^w]tq[FuBDJeӏ2鮛PH4߶ߙ
:b2Z)(rA]=ȭb9Co!Vb- pW ntY؁EA޴P	*^@3
Ak߶}]u8\݄.8Cnحd!]Bb.:]"@)"ޠ<1v#]"HG(P
`PlW 	6p9	{Z:XWE3q@CݿWg{WOhnL>K}4Te/AqlU])']Xt"i)Yzt̒`80*oi{L2	dr6W()NU=UKH4l!9#OrV=
YHv1}Mx&v:&.V^GO;^
}w)zQ;1zj[!:/\tfl6Ɗia	
ivB>( ^s}u~7{L	geJ]t>J3v)j=;UcbigZ,LXj+cy߁>'{6aҪyRgW.^*vе0_N管kܱu"]PA&d
iL[WMmn:0
6:ٔ0X`1YSN4Ǣ@V*:zU;5AY)+Dv4nn5&9|U0Lx_ B_q&+$:{Z,VWx?̟-gVa[]AGSYݜaٳ"V:Zş-sLep,5;3phkfrRr&Gl5O$&h\k#1i
F$&qsx(erxJa)n>ǝg/PK	  5  PK    A             2   org/bouncycastle/math/ec/WTauNafMultiplier$1.classT]OA=][/
bv[YiL|$4Ëe,ng)	?	WqCiN23wg9ݙO /P%$WpkLN.^;]B1c±޵N-	'ݮwæ`mª8V	faⶵ]]h 7P̖;8>Vgb'X9aX1 l.l7nwEWVO=9sy64ҐѠk`hp6Nb<F-Q<VD;S$SJqSMH1/&"i` 9,H
+,Q4cDG>(9Mv[؞ipy]!xPX0s չhn<U?=$r	feK~_R}CEjVf
Es
5J_Td$	/<"!?\ܨJ`~ErPM5&A%d%)hN,`2PKM:    PK    A             0   org/bouncycastle/math/ec/WTauNafMultiplier.classV_sUmM[U&-T)DiBQ$۰ٍtUyHQF7`깛)Il{==wyc 'pG.M 1,aiYj چUwf'JfrzV
,-jym%S3lzE=JddRzpdyή#9fWZ1HIsE|ex#m4.Ӕt!^P5|M;5r,mE?4Q3C4$kiZG_U&@1[ѓv`."-
iu15I^̙JcJeǰ-]!7QL[^
xVҢ-^֮b5Eqhc%4[ ;Sh~ѽDvF|B3?}o{Wmj)ހ)r%.a*^͒z)edyP7*B*W<	x6S0KnzidޮAfP2`8p]ag808]NŰ(\̽BI`0n9Lz{ۋ@b8nu&i$8{+;:./'>b0YM;#_ UG%0E>m Zf3'z~ykfJj7ΰeYƫW2<2x촌1|(
|$5DB~$eX(R\xVF?xge1Oe`NF?NasƱ(aYN>p%(a_p%N.sD8UNrb&!/%LcZW"NVўrڲJԪUJʋZql/.Ъo3@@'W🈷Is;G>30u0~qPʟ'zɘuܨTG1Q<QzUqT(}Cb,42_ܸ'aB"4} =QD՘WGJ>ĿmGJ0s0J.ͿCp3σ==yna>t41yb(S-~zLau7vNBԯ5Vǣ"+HO$:Ȱ4֧2]ck}uU}ܓmR}SG&i)O1iOØpfO~RR&zT'1 PKuK    PK    A             1   org/bouncycastle/math/ec/WTauNafPreCompInfo.classMK1WvqR
MdQ( )]fn*?%f*P	a&3d&_ CHBxo/ϻTyH\zmPK'P<>ϯCizeJ-	͵^&?=XoCicXajԬ-Rذ eQR'	vK)#2Ğm"I%̭2yCšW/LqFi8C)D،UlPKҳ2  d  PK    A             *   org/bouncycastle/math/ec/ZTauElement.class;o>!Ff
0F6̼;FĲDļt}FtҼ⒜TĒdRל<2R .cg`fg`adV错WZdȠ]f+'`b`d`<\,)
@vA,A 
tPH
y@63 OKg+F0  PK     PK
      A                 org/bouncycastle/math/ec/custom/PK
      A             $   org/bouncycastle/math/ec/custom/djb/PK    A             6   org/bouncycastle/math/ec/custom/djb/Curve25519$1.classOPǿwk1a)&fd	 CbKwen5mȃ1C?@ IO[$J`ٽ~m n0Db01Hz<-d}/c+w1{4vr9r`8*n,/&l{yhD蜶+5dwʒf+4PCvE{f>1Y¨rlӸz7_?\q=j,f/ax)a,Q;	\Ssq5ꉯy(
4
N+hTDg8(C
)K/<M-4^a<@+x[*Sq$ΫQQI*hWqT$pI:O;V	E?ed$ІtCo~.sjfZ[-M
lb&]WZh
O8d<nJ%i>4@I䑃q\#D)ݶ#ݷ\w
QiAЮ4XP!ШdA}gn~AqM\1KѼ_a&)K%}5敤_a0Te) B6{vߞM/zۚɤIg60.O&SBF? 4.Cj`SZ,w}4=`B=$P|?Hт6RlOfgnڝ2CrW>b]i&aHPKy  [  PK    A             4   org/bouncycastle/math/ec/custom/djb/Curve25519.classViWW~$L"V 	ZCH46%H0
3L@{mv=)mO~}bH<sr}ɝ?n+f`2;;9Xa9Xaքkr(t:ٴ9fmaNOCu@i5y@"yZ<~Os3hlnږ5tzmOCG.ۤdBIh;mf<?zP'8x0ơz4D]dE8pLhOz80I]55R34-i-)Em-K` <.+Z"OQt	rZ4"2QJȤ&e*@RGDISSQi%ubRe	ҘG䈪LCI2.7^5haYR嘖JH4\>R;aEGe"ʚq,q/aXaQL+x `$dО/?"Nc؈ښT%!͐APZK	[Cn]"eҚ:>2sx84DCCSy!M1+%N{DJFK$ݲe*-wJU;ٝIaAU:31~6

&W~RLf;n?N
c籊G=<<xxx4hǣG+8y%x..6tѓ2fo2Q;Ie;k˫ڹ'v%l4miYʤvXXRY^ M8tmA@Y|<55(w2OQgNmjNEZp_ǩdp	.Ȕ!.,\_J^f\#(cR1`P`=-TO%P*`l6lC@
6Ёv0!.+0(1f=\]8ZF$a0@a2`pAAQ1H:`Ixց'D0xفn@cg@x)a8A7ok?~v;ѷUXQT )2}
4Q:-+Bғdj&ޖJw/@'Iov1ɩ]N6[ Ouy썻8n_་fO'3xuݷ[K9|=f9?]^_VÀ2aQgU	&c+VQUv(^\3tÉ̵%.8kiz^1	thLB,zyDu6)H/ŰLW4bHJ`B6xd4ӱn|ּ	C$ES{h]}6j,unmEvC&޶T[+lstfg3{莻U[g;Z6Jx9O Yɥs]W?Ϙ<T٤/.n6f3<HfciȞ
5Zqn1dgl`O]ǫsf8w2ˎv9ZD
PK6R  B  PK    A             9   org/bouncycastle/math/ec/custom/djb/Curve25519Field.classUiw{F~e4$%ۂ q$T[Y k&yQbC6)K7ڒ4u>t9p'Z_sgF8{|J"_H$HOJ&>PLwEIWRU.rFrNGz	vu
Wl<44L.kg1$>t'qpf$
E3W~$sO0@Q6L@=)Blr4	g`a:_0n,Y397S	Vve8δ2l<U/Odc-Z]t,S`v@9(qH{1Z8meኊVT:#LX1l3~baKԜ:N:hY>Gpx_.oU4X|sgs]%W^{lköL:VQBdgV3F!ˆ2Ldp34ࣇV-ܪ`O|?m {34NݡRrČ9R
~"1bYj
<bVG/.eO9,T".{_(1K̗($ӘN6TIooٌ%ʶ֑k8.\Q[TiJ#*4*=>tҩztbFN贛t#UAHc*`":=İ!N
:GNI}EgQI]0<pIjiZtz!NMa$÷]!i?aLfɌ#`K302p9B'=K0l/0"Yy.0|"%51|?B&&fd.:7r%8)Qc!gy#OBt|@wPtU˿q|ƵOާݯ0˷-/tJ~w4o@?o+,X>@k)k~Lo{֯oNj 
]hx~wS7VOF0^?<LONg@G=;oSa:<W7Bezl`&)xj+	ÈKIXv_e]<MjEF.GʅNHbbE()	GGLSӱ@~?~@sÝл_1},kدGF_Nͨ-H7[5%}:s@qYheZ`Kb
7k+yHrǉN<nT>P`2(áz3:(,(i>QVƐծQXԆ.ѺşVخHs$dz?i45aF;6E ,C(G\%3zDP]'
n*emMW"'
we.KwHʇii9lUVے	u:0}h?ˆ-l
7wApϯѱKm5EKᷮ.ԘR]-8@{ܭ A$$FZFM)΀|
-)&ܚ s6j,K7Đ{6dZ~X_!O}l26ZC7ͻ6h5|]JAdVK*lN=fJR2tqqTMf]Dm#
:F	N_.-}PKG  
  PK    A             @   org/bouncycastle/math/ec/custom/djb/Curve25519FieldElement.classT]we~cbR%MR#BmS(7n$e)E(_xp%7xBxTxzę6rzlzyy~ _%s16kbb+n뷛⾺߃>>t#r )zL~6:^̕Yq4k3,6G#X}]Y(
*=ekRoظmaޞv2P(1N3=rb~BE"d-]5&QRj,kfI@qm-ZnæIq}ƴXOFau<Fkn\V%MSif+;'lX=/_6mc<M
'PrL\Ȟj%glɰ9%2wgJe=6--b>1:I<ѪٲJiv{mLt[v-B9Ot-Q-*<Q)KsHA[/qgŹ%DZ&5PS5m9^Z^j	/$c[dlS@cdHe3i0b[F!7ZyfOF^A]tBXlnb;(%^8b,
V`VU-*2lch`XWІ6ta5hPchgdXFX`#v&)Xa/c/ч3A>Wp(  y2rc'Lbo1͠1d !+ 0wJ/tJ%&vֲ'Z} B⑶IR⊒l;'YC23_/PN =p>?FcӸ-J__UjF52dNlōD
ǎNחsֹ+VZ@#ߠ4˷\FbKUFM4>n@nBoUAMhډ?`eԻ1]lE]\.N='gjk.!B
IG">Зam[#y
8^x9KM6.ū2빪W뵖{GqmޛΧͧǟJ?;W^Or'S{:$.]'z9\G[BkIMȠJ1ɣJ^3wTOJ[e&*RQ=IȪF2OCRQ_U?[IeRl%O@(l&5R*Vت$kUqdu\/r;WY#ܮHc#J`ǀ˭IŢ_#݊=Dux[|᜻wٖf3ٜSλ~|afL}x%.uIzŰJKTRioؓJao*ta)u?v$HPKY    PK    A             9   org/bouncycastle/math/ec/custom/djb/Curve25519Point.classVsWZiٹVZp[YQI	NR》IjGeiTAy%!7Wu#{f:ιlCa=sϽϿ|
0>T@/M+ŧYo4%nј.9GI;/
ebiT^.Պ٫LZkjΦ&Bn`q
&ˑ3K@<l2ULgKJ]eFhL]2gW3UEzZAJh?3Y*s5OZEr v[N7.o+m?|"y+vYh]jR,"M4oIѾ(@La?dwvvgLN/WLz撂jUtstlиF_j>tu3g3ѱ#򲝫e)~=JLuڲ5nul5B[9QIw_RP#[
踻U4G45kHhHjH)wy dg]NSal=/ޯgpOx{aS^Onφyc0N8pA(&`D/G}<Jfb~#iQ0t0y/0<ʰbD? Ca?|لC8c1|D_5эi	e8q3pO127p
CpadCa!kВf`ВO1V.21J^`(3ThSg:3fx:YQ5E<YT*]s:~6si>\)'iC1GJO$S#x#8ʣk/=BN6B!	N.(~A_n`.M>C!tDb껴j'bx.LbKL莡Yld=wI_	~>/
g^&j\29cGђ~o[&~oL6ƑP4>5+,4&[^Dd?H#
c^k~v^G*[8&Ve/{4hLڈb^mhaѷFF#"i(D$VIO:صi#GcauAyO죇4ѣ:3~O-!BPP9S7 t96HJj_}lޢcl%7-)ș[PkB~gւGTq`:ȷ4%7V!ᤆ5LBñ֗nm9bmvH;zb;ȿ}!?th'<\an$dMp-RO
޴.624tuyfk@#	7i%P
`AgCOvk&J8;|nP8@C-O|Ȝ 	쵁8pj5:52z}n
f73̈́y<nn'ݲg)))g*Qj{G緅A>Ecʧh]N-k&6}^K}laF/DǛwS5#κl!{-/w -k/sʎ?>+E^es5,uB޼D.W2.\:7iEM)']b𔠫A0(uhy~r !I)V8i`Ounכ7L"趘܎Kv]wl)]~guoQ
/^'/PK(    PK
      A             #   org/bouncycastle/math/ec/custom/gm/PK    A             9   org/bouncycastle/math/ec/custom/gm/SM2P256V1Curve$1.classQOPwk1unMQreJcC"iD	sz9wg };K<  %16\U[%MSnG.e-SfYLGm/,--ևv1&N@decVPP:Saμ1k/&w=KU
ag]7Rc?%׳|՘^e=vMGa8Ua͍X*C+]Q+3	̭KHc*Ph
RpZ:ĝcb!CG)^<,=Q)O4}A?K
nQ:c!PȉGhBLY(*BFDE'ME=.H
uH?]k	@)X&V8Nz9OVjc+sjVN+\-sW'
5Lz\㡚h54 K܁%tZq	NV"{&ݺ#ݽ\k&zhO?hW,hx2ƛ87\~Nqq7Z9DRN=洶B,ZPLRy\RJ*3dɳ{{1->^Sثk&: b88M41)`-'4R}v!06ryG3&d	JCŷ͈lA-ttmvvFHQ'>D}끾,M
 PK\(&  e  PK    A             7   org/bouncycastle/math/ec/custom/gm/SM2P256V1Curve.classVkWG~$lE.
*V-!!7 \5ER#V\%D.&]W~!~?wK"9=>3;dϻ?VbOp0[cy`Xk=ơ
2>cu1nww
#?xްz`(W7\@;wP0uy~oG`!SJJEvQDEJvݮPgy}^۳)
(C8@Z9ܾAp G94޳#áCarU0Cj&Qs4#Y--;'Dm)KH(ӣ<!+Z9DIʈ#$HJ땕6NN)*r(I8I%MH-QȢFz#$Jr\{Utn8&JyH>0*K2)+2D0))|91em4SΡnZSS┨K4xn)ZHUhYKtGi	d)eU:!(Ee5up.#]OcZ\eFʯCwc^V8C"zeig(9-v
;s|:QU'8[/&MwlnrRhL)t3YMY)1(YUVhc+m<<:xxyxxxyxt轏:t['SFӢtk${ZV{kJa_Vr8kп	SG)Z%ל?4iu*
e)ӗ(&Si))g93
Kʣ/^R%8]B..;eS%#ys/K^f\)#(5EUP`=6&uX-Y@5,D%kYT	 8$`3~
`
3ƐpUA^HbpADc
A(0
{0*l
0଍f/2xɆ>L2-0P]d/}?E΄b6+Nu\}~5BG}2$&֢5{jAR|$,;Jj'7qa:Лpp>eu	si_;pFnuVf6wf2Wn 9#n=Z71v7ۨqOy_Cޏ|t-߿i<1qʹ-ӽu'u a1
0T-`m]7߄e
)ȾVjk'FR#kZ0H[E!q`2ұ8nr'ydxsu2mi1uV6T6m*OM;&se_]X+c</jY฿r؎D6Ђْke_[<>f?-$S}+iXY7>B&޼_Md72L.0E7*PK    PK    A             7   org/bouncycastle/math/ec/custom/gm/SM2P256V1Field.classVsW?]k:qr>gXqD@rPCƍq׵R*8
IZRPB>P%/<P`@0<o<Psv40;s] O[VKyy	+scs+s4H;V-^DO[!(Pٞc}̣ڞ.P9`P.UJ.y$><>B>AS\QDVf\"2 
C0W\Q`a)\vbXIV'B#.֪395_sDY8(U
71R~!+7y+k%,q;FneΑ+Qvu^`\rݲsR,b"FF9o$+-ŔpYXŹlN]jm-ZmT
[^
gBШՍF#G8]rX]OSr\H	1[*gx2&Rcx<JZ(`z'<wD^VVfJhbW@5<,Xqct{Pt5N]iQjD4حAZC 4Έs\Q8vn	v@Ą 0	/@@5a`/h&$'%8 	#3$Q0L@	)0M&"~N 3!Gp m	'	v<&cK
8k%_/|+_%'X%(
x		.	6*U+5 rZVV.yAs.y~eUc!x$1"0#;q*x
汭!|KkKbXȠ{J7Ԯa(ʹq60
4.O5|IIFd"2W1vid6hͥXI1d泾+,THSSS_X"n  MᙐeG҃}w)JCأ6ɊrmC={'J4vG
D2UЉr
$Wa<)H0?l'oOމH[Vn+7oO+E6rWA,"@pHЪvքSC،?X-~j|&elw` ukgU]3KG<>q<)TQ|_ӿki9%3	?B;ƨGɀh%(Mjzt|bt%yҟ@
Lcnlb3Un3
i>_쳱Ȓ³,yv2,ƳeZ}<;d
YLٸل5hYJX6i%q#
k7L˳ɔl%$K**FJQ7J84T8cF#+Jn#V[׻Y;ޑ{,Dg.vvws;vSE?cKo#ͧT8ϥdd"\2jy8SvPvR]TXJ]@v-Pϴ UGS3NWf.8x:U	oS7uܭtSw
^)o+tx{:FC^Q<:cI:vy_JPgh }kKy?C/N}iƠ1>_1>呻lF#SJ0>zhV<VfGg
Cz64jcM:O=%E瓦ȟMyj::7H~Y'*U|k00}-4#K-*e>:
*m#DCE
z	ȴ_nz
PK$  V  PK    A             >   org/bouncycastle/math/ec/custom/gm/SM2P256V1FieldElement.classT[WWL2I5" crizQHBmކd	L KMZv$bJg>|>}_~p_# NE.^rqR"W `?:<0ͲHbõlUY|"Eȵ霡KN{FP5l}ĥCf4>|j ySLΰfsji%",Mu \)9sȟ<9iseհiV84F
3@&ÝT-jcugT{&S>ݜ'fί=YWy5ef!5V\Lgp!:zꒊ3Z`l8HLBjT6s9v*rAC7<?m;sf]W+N*Sߚ;זZԨ@'(eG7R.R	=\~N({^0EW)`(R\i7SP-VDp]Q:ꪡ;/5w(]Bg%$pTBUSڢÏ+Z9ŗ5ڵjYh{^kt<9]{uh]z3i1<n2N]F+^@qC2V!$02dYIlс2aH0`؋m2v""#Ђd2vaDF'HB1=xkWaa!ǐgP`a0t*0Ûo1h0vC" QO5Mmkt9j:;N%"C(FD)mhSo> 
5~( -W0'/	#hzH4IH~/vE9v=-2Xˊ9U4qZHO0+1ǸYc<_gtyiao A-GS1vy 1y_KSmiaup7(-k'^Q*ݔ#;2$*x2|PہjW6R
_E$5NߌjQJzzXL֑&6]ؐ~~hCb#x.]S{.ܼ잻9͍uGdגd~E$"&]J	(~ɆK$WDV&%ş %JD+	ҴJ0H`drB]%#HgRl#ydQ$ͤj㌷`N	Q	w!P
}l}D#>uJ垢x[܅߷'=	>~tyEzd_EW޽|{#O!jq g'OWR5(jчпPK)    PK    A             7   org/bouncycastle/math/ec/custom/gm/SM2P256V1Point.classV[wUd2ɥZMbZ4Jr)&6KM&^P~yjdٟ3{&kI>g9ߜɟ;]Qc,מKuQg#ꠘc;qNDZ)s
xRy21^33銝=29+[h?@YJFdO(Ylm1pʦZ2e-;R쾉\:_*#nO~g\Tq<Mɫ
c{t}ܵ\ei7Wy*ǭ2)T4#R3ّW&l^c9sN6T1%~+־]Ng
vܔVR!1YHv
u>C֢`mYsohӍǔ'7_2fl5C+w]$Tn><?gWQy.3RC"ʖ5+XD'sAPJ1h^h05ܥn
[5ܣ^
4kSpZO=lm_]K_*ig{?AߚD'L_7ϸv1<VIg?nMB1ư!:k" S4[7gaCw0ɰ!M4DA0la؈GL4c;B8S>tq'2؃b4,	)$
E`(q1ggx!mмO211hC,Ë'
4ǃa8l!<4Qgc9tzb*ӕ
*azLOU/d5Axy+- /]u.g1j/wT#}<f%UquGt&3gs8IFl6ç.?s2Iq
uU<]ljq^a˿JLnw(A^B)>n"OɈH/Xc۷h9e}~9UPi"l~f6rF$G4.՚ͅ6M8OeD7"PD١Y9سT$64<Y̙d9
fA-w.|ۭGu6\FϨQ!&.[%9iȖQwFߔ&FCVflsŰYX:lcAu
!6y|>+/~:
kհO
=н%^nǾVv95$C+h[#"ߊ_Z	 )|,AʗcR]ҦG] *Wy}SwMeaQꅖ8BgTb@x㴤-LcqF)Knz=B(r"Y1_MU:+ DBB2_.	1E%rKijr"rU"2~T:;s,+
uh:?j! ו:ԯH/+AvFjk''NIx$RCR?pA^l
	h>89F؊4*_(;j.LVl/\WN6IifTPKY$P  H  PK
      A             $   org/bouncycastle/math/ec/custom/sec/PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP128R1Curve$1.class[OAv,Z*XT^Tn&Me
ۮ]4`k_|GD."!`әs7ggϏ&C0(y=%-hVqn102\OX躴l6Knݒ} i.-?+
r6)RsNid3SY1=a1Mk13o.Cf)g=o;НbzMЗmǬflRg>ǔЉTP4dUnw%d&C	\VSÐ5j9I98GYstc!EOba?8wK½KqqEyɿ#=JGB8v;|i8AE@C=hC\5
:C;]w0Z")&[*V$ø}
50Jmq\:esA+j*¶SUHL3ЗƅMS# Iܞ$t޸ Ik'<l@&ٳl{&zh#^wЮ4WӨd=2oP]H.m8`^	ը
SQ5,DV`G9T?H?U|.
=[cs{5^|]STR&S=XF);1f3Bmc;QPj
Qcwq+QT\=w!|;ЌDFN7fw.ښZU}BM]"_Z
]1σ_PKϞ
  e  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP128R1Curve.classViWW~L$,
*V-!!,E,JiaB4.j}__~pC89/ VtΜ.sϽwq_%z_(_7gE8b|uqVz]r&=T6EZ:¡Pc[G9iojh7h(1Q	uw46wB8q_j8'სPW,Opƺ
DTĒhz*8eUyZ3%s,h8V2#ь2f'8$YV"ac8m(j#T%'FF%tN4}$iJ$:1%!*=v:;qXΐ6HSjrGYQY:kT\5B^ĔbZ'h
jQ*䓧!C39ͤIɖb7XYGb>-S(]Æ	[Z];6-I
&@N-
JCG/̡TO2aMS8C\mC]?5vf3dQed'&44
V<$
SYI)UGY}ϊT
hMvAB4h*`6MGA%%ak󌤦0κnJ_TXylfFdu:,N&q=M>?4R 1/Lr;gR:޼z2S?>vt#-.hƩ<q.Ȕ_λpIys?-*EF23hgET3(u8$bx""C1yxElO؃ìVg bPxՆH^x21ifa00*3>D1^L38#xއbpGcuD^ſ|.9%_ߨ*z8#B=%	SOJfr'ILCV÷&U-	Ke)HXou
TNn,	̣'Y|6jv'9|5\ur:_s\v^
^	g
`=qVPl̯gxNeUlV_9uj_-O"e3.OIf%m-wYk6Crǁd,>Ŀ'ZRo RS):m<8V;q9gބyP9X#~];ܮŕ5cwM;j
nuW5_×<}ދ>x2PSR.V
?ҭ86R,9|[0:';~|wI.Z+kuɞɃs+IȞ7-\A,byZ-\9u"y/GPKP9И    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP128R1Field.classVs>Zi%e0"&5Қ-&I]l[g0뀃k_Z&HKZiӄ&iMg/Lf$3N&?'3}L[`I+
d:=9sϹgD$ZjHu\ @r
S0
@VYE-C%ٿ0QF(06Hژ;+n02+e"H#<o1>8y@	Xg@J,<kBlC汻OjP*Z铵xyi%%.ҲS9	D
r~­8s[OESuب1ܣW^]v<*e߯^xU,
FN0k*j)ܰ.9bs/㫾[hZ[/V^qԱB~n1_l
Y|ɲ[A
~P9Gj? CX\ڇK/W3N46[j4nQD	P;(^_.U{eh@gN
J(AE5ħ'Th~vŠI|&)IB?
mW1r

(O!VUh?688!7N{|-QzL>nJ:}$PAia'):b0pTNytC/$uNBNi!iN_e2}SaOQ:-f=O2b8Pakt|f{"C2dX
CYCpNl=9*GVxq`5휙u+.@V3ho%ZaTuåƾhF[b?zѷ_a1i}L/)2H-;פGߠ9yti;}@uR` *EAU6ќD\ڤ֩>8h>άyWz"XvFgJ%Jhդ7$[bٜI%P 8g +K-]AiMl,(v_ݵA;c<[)A? ˁvaqO=uZ}_K7[.JJ%#sx)IE}Q&e4hu>o|2hY-uaarzTTq<CɠTrѥhJ~)*a+N/BG@3CW>7o[߈ΤQu7aZJ72fI0$YH-9TK$R#I9mmaf4Ug(mfML;C:ZԜ1i]+RȾ'[2%)l'Mjʁڲm
{~w>EdٞhvgSrƂ܋cԛ4:$&;O&7&6
RE-ko{#$2[xܞ^tE'6NE^wH8
G>;Zp	ߐ'nnOsf_H6w𝼺(K8j1chAܫw5}8~*h<>:?o,DF\5\'ڧZsXbfA[dg&)6<&Q92!aɇwJ?Nyʧڼ(KdvC`</a^<>Y)+Ɲ¼
'Cq=/bU]_SIPKa  W
  PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP128R1FieldElement.classT[WUL2I
@jZ
[{MRzZ4L;̄B+^Z⓾er\ֽ'CX8kw9~~|Ɩ0:8&!{xQ	r{Tx~X1X>F
fb$xR]>V0
pOc$H$<1$
;|qo!̢&3I5n*$*I"lDPP)!6
.ƴQ$}C{]+^\Q6kJ^˦C
'tg"WaÚ&;Ba]p C3*lhU}ZϘUMSt.Urf
b5*vT݉h,ȔSKJ*t5EL2}9/>Sw	63^p'3*TR8$БoԈ2_.HfǶYj՗v2g1JVLޙ>:6STm:AB+>neyW$r=ͪQu(ƮTت*TЭ  y/(ث`%t:ιk^*Zz%t-y|k-
?k^ZvLR0<oq*SE;^RAVa?C*R!b*;dU!lRх'T<ːb8ZTlE$a6b;^Q
gUpNE#aa808W.10p-E/f
E+%	3JNǢ87dxA0(qUBt ;5oYΙy\p>9
&$kJc$w3
"@ Xt'
ߣrUH[`&5/V4=
*"ﻋ<K4;Q-qI, 걒
D
vS8#n=k1n-14~4m5[ȁF>A4bGY.}F5-->CWϩOS4n=!GCw 7ZKnp鷭<f\F?M]Ir#Vs+v4ҾNzd1JaZ7+:.JsgW,ѥ7O=DiuĂes38GT0]t*]g崢ɤ4slPZUslHFHdaN"Z
k0M´N8-zYxlThQZO2޹NNPvtʥ)? olQp\z4{:?p8d4<DL|<{YIyΣ%3&ywn$`w7l^R7͍m~#rT'p@e_{p
ʑPK(_  y  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP128R1Point.classV[wUd2ɥZJ+ТP[r\JɔFҤ$n*"Eyjdٟ3{&kI>g9ߜɟ;-Qu8גNVg#l8qNDÚ).U<Alxox}PΧϦS%;gv+ӗrޜ5nTZ*d{
`Vʶ(gl%]./c٩q=:[G{
bfadȍ)̏rg)3yal--fK<}t*Rr& 9bD*Lf kF.n}Vb'/dyH.v߄{]o/9`7u8IMӚ*NO{Y~DQ24-16w.JcQĞ]"Fd9UdF<"t`-k0;nkr]2Ŕ3#T+i05f
jxL
-Z5_J'eٕiK$%:l"W\|̼Ӵ0M)vtlED#Mk"2QP&1E3~q610kVa:240uzxaC}<3BRG7cxa/>ۑ5
tb?00Ɛ38CN0eb80+2 C?a0f0pa؅AC02ZLV'*P	+ľ`j$gZuO?Z(JVT(m¹Ut8*jrC4>ߧ3|JRZ|DGVb|4	o|*>dĦb񟩎i\"x_:NMD<Æl`S{q-,N*`0BB$:
qNa&"B#ODfqA/"I"<bmߜInT5Bv`VY
QV+6Z'jDXވCo&eZgڦaOQDXEz^=g6
Ԉv94߉(6=qDp&
A5qǽ$9YMejG4r'711J72K.fd\VυMƁDMZ4ʔ ;GXCN
5t-Bö/	6:-4*qn1;e)-j@ǒ:PIuE68U{cmrׅܽ_k*pWQ-D=%Lץ]a
X ިOO_rDD5<KU4([THpKKyݠDn)^t\_W3y\DIDᛏJǹ{'|E!vX,T6սPX*z	njY,
r2b UPr~6tG
,{8Dϗj赦kѝ&S^E9i/QQUMAQIG7o./$e`:NXN
6Ai&UPKtf6N  I  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP160K1Curve$1.classNAv˲jQJQP~ijPCbaiökv0&o4Dh >$gwh69g~Q\c&eobiZȉ鲻՛u:#c\ׅmsuKpG0J5Qĸi.9;}gŬ7j/myT)0dxi2-iggVSs1DZVcq)n	zvF&*J/EJR<pyi#7+!s=KܡjSSG܈Iq5=EADA
(8J92;T	Nr]`).AhzoWC^oD[zr{Wp^Վ={蘆n4!Sd4t j04tg5hw w:N*N CQɖVыH҇h{q
Ӯ7'S3r)m[^oGXd:Pu0nJoM0qIB'3i$%GSȦWK
"Z[4;hW+iT2W^}v~Na8Av r_A%*ǞIsǅPD
ΧsQ)d'g
{eYReR^kC'mKHA)8NF.|#06jB
Cj,\k[5]*y&CD6F8&F@N7fkAښZUD｡5\&1km i
i*yPK/  e  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP160K1Curve.classViWW~LT$TEmhdS@[!DL@bZ7SڞoGbޙb@<99]}͟w~
@+xP-<΁⬈9a
YYBehjnZk:bPjNr&4^1=QPF75u6bxOt?^oG4:ut0A&?ˡTpH˪,fF	IhPH,deLQv&qJF=ELCPRԔ9JF9J$O(H餂i0y)JD$zQ%!(]v:;~Tʐ6IjrYVY>kct*JJ!/bJ1s4quiF>yj94㉈L:MO.4!R,&+TÔT9͖a9J}h0uR26a
W+kGЖ%)r0AՄ"ȉAͅz Z9.|rdG2i (Y3	**ۛ<qv.
r;2xmݨ1nMtSЬ*#쬋."7 B6~
lC@P@f-v
h0Z.4lvTj5S>Ra=-tY4Y.u}G&mmerӐ/m](L9
܎=nZJ<WBfΘ|8G28y=?+W8q
`yE(b/*DGD95j<
"2XJ㰈u(Q
Y b<"H"pLnxFcJ/b3Xy'K0Qifa0VN/BPa^08%/{qzi
8Ën'j	wCY8{*HЇPYݒ}H\w[œ(c5Dp=eGmbT%ZIS
,#p,> r@
zh$_Y;^ീ{^O58P<$g5A/cETlɲU[vX}UU}ٚj<>gjpr3o<2kcz\uAB5ܔ̣309o CYGqoRKFIrH5%O萶\8[Ii	9ssȓʁ:Ϩ{vW]'[m|;:o-W-_7n7pQt1`2PWkw,C4I<ıeW9|ԡĿżkiqW{H
Z]g{w;n#	o
}&]l8OCZD_BPK(.:  Z  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP160K1Point.classVYWSW.GUKkHTHMζvvO}че\ˮ>Yj>*Z];}={O
<֓
֑81h=@c!h%#r;r$;FGKa-ɤ2>Ad`0͗rdZɤ=RMeI+gwShtCyr*XI"#)Tpte'S
-gl,NrͰHHL8fe3']2#9>S<i(Hd)Kڙ,1bO:=1sָ|ߖ5DDi-څdRq_vT"Vjsہvw1:!@A-{gc?wR>
Va{Eq"3fڟ(.%(FQLZDg3A@D:}*.U*6xLEU<bVWF>i	.Ni[8 h쪎W^sk&ryݴ0MizLj;4D3jTahVx|&3E5	(ÓUM<ģbD=zM&xDLlchgD?,s:<tE.L؍1]8̐fN#0ia$(C!:Cx{0pa$+2fPG؇!cG^dxej7a&r9ЛMJCvPrj(9蘺)xK?T/=D۶_љuypC@ƚV"sxYIU8/xkltgHFW)9\%xP:`ah{x	XiOj3,i&n,xd
uuV*gP/|QW	?%xPi&Z$L;k,d]քjfP]
/uװ[uBcf{4hMrD-Yb[9zQ+D.S!Z!xBsHms(RDXG۰}Y{64<i`݇A|/!wzHg
y|"$āH&40g=˵ΊɎ|*W3)Tyob<&ɘ,ejMx3Tbh1**TRTt.}@ӑoIYg#xo&Wbק] ;SUt~-C)QVsoW_8s?`_%/	:&tg_uR\b{CYJra ~廦DgU
%2@w:L.(_1(՟/]4;Y∊0݂	nxE4:lDL{seEGgaYPսܶEIrUzN@x
-pA~kr7
6+#Ǎ,n	}RQѐאe|<Ptg'7?x PKy&Y   
  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP160R1Curve$1.class[OAv˲hA@QQARzr45i-`H>0,#mvc_&M &~ ?&gwΜ369;~` Dɛgxbr|.CZŹp=*ua]lܺ%#}Ři.<r)Rsixߠ,	gF!KcYn1Mk)`':Cd)g`;םb؎Yؤ}*N
+*%
>+0ta,
Q;kǙ	P5)WԣUntFq5=EADA&41N=3?);^J=X-;YpK-KQ:+D8/9Ԏ'蘆4!d4!j0.ie
*jU;hC\E;z)-IA\l]-l.2hZMX۶"}[*aa8N*Fߚ`$B$ۓNWM:IJ$$Mn#7p#4W+
h4*|+/>;Tw?'0]1K71cbZ>+Q%TTy&6*Et4t}-<`P˽!:0N#SJF7~%0jB
Cj,\Փ]*y>MDFhE`M!A}umM-F*>~LE;ly
`f.QIS@'PKHM  e  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP160R1Curve.classViWW~$L#*bamL(Qka0	ݫjCpJs_l;3Q,HiNs}nݟ~U7V!7q0Ίx	`uqVQ?Z-XPuv]b7 vu1-t:m!1D`("B6=r&'-
rR0DT<hobx_tDCH4:sdHX˩,e1"b,dFe\Qnr#qHd
$ uPiGQS匦*bNT(;YdCITY[&)YYW$((cJBUz4Ln4!ceii (6$=-S|TT\5B^b'i*jQ+tRšV@v3i7{ҤdIЇxl(YCR,-hLMQBYC'%cp
m]"粆6R5
?!P/3]qmEM}ALQrF:WT7rY庤h*ʃ,eV6t#knдJ!1529sMW£G3<vhc 6<蒪y#Xu\4k9HjnSƥª(`{[m\hr:)LnoL䦩04R}'{3NEĹ-1=Hq8e\q+&2e'zd?\_R^f\)"ePDuP`&㐀:Ј6).lG6xGXQ]8&`8.ˠ36@*!3H1cfpe828 A4"k <8)<4Vg@Ez1 A{)#au{3*.flV	CJVrITۀ*oٻMrP4JąYGOql}'9|5\w,|㬾sF<mؘ_<'gua/x*k7hڪM;̾J55}Ŝ^j<=ϸNJ*?s,kmzo^	YlB5yL6v[qʦ'ٗ*Sf>i&ՒN*cy'l:;6.[p6'On*c=v{mT]zu7_msVEb)_#9g{RF]?ҫg86S,9|<:'~ wI.X+XkuɚMav6pbI&^I¥CZ("YF
PKZw    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP160R1Field.classVsUmvlviK>h+myHJEJ*jmtɆRD@

* >?ha33~pFGn-=w=ܛ| Vs ߕJ7č,/JĶ=>r[_H_;I#9bqvO!G5Gn
P]^6*lGȥr-<i^v:ˤt%3i+mwS] F?Utȁ-mrb:e SHб`!adJ`<9r]rL0ST"""3'P2gzL>6IU72hKȺ^3G^!#1xbt$zSLri{*saymg-V*mXYrN)'$O>"eQtacvmقJy0񸙌'y;;rW߽sִ!?Mm3&aP$-O(Kt&>`$Ir^TW觳W3UHWXBO7g'4rAg?Q0r/o0WuW
E,nؓ),UХ2X"c{dlQF^tm۝.p=Ymeˣ	K4432܎

Q5Cְa-
!!Ur]M:p;Qa;C75tBװXVViЁְa;C4˰j،Bè!$U<JqI)gTq#013`0L0XYO0bc8pIO1c8G˦lMY+ox˦72?L'dԣ
pVB\"gnE4z;Ini}Ǭ4җy44WDW/!BH4VsE\8JF͗\gN(ĵ$&ZYf[CLצDxwϢ* 7Ϣٙ^ī7{hP7+ZU""ZHFhm]ZJVHob`(O@d!Z:3Ǵ$"vHΡJdeF\hc
IBxV<	
rV:5d]F"'N˥
ұ]
RJo>JEHtb[痫+^{;"eE|*|o\]f"R-\<JKEKȥ+AǱ:sӬ]S#\LJ[ַ/~22vfU.䙋_fDL!~<_HU4Q:xODReOFtoSP\Q
ujaY-zatjQ1N5)GAr*\
O%he*^Xa+e\/ܰjղ<G4tEoM[{=UFEn'խZ绹Ojqq15EEguә>)pzpӌ`Z~Ǽ.sRw<+ M-o{sl;636r3R&{?=Y#oG9~IʯI'.`R5RbX
$+hiȁW8[5"Ґi(İttu!Vtl5qXH"i`PKF    PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP160R1FieldElement.classU[WWL20ֈ!	Z%ހjZmHat2	6h?@ҧ{V//Z#]{Cf>g}.?؏ϣE[G%]y8&ANt)ȏ571Ia(#kh2m;N$1(A:+aQ8s{La%4q!H4Bx
M/TS#F*$(8HERÞc<H&1M_bjX.uRDI84S^I!,|W3:i

¦'11PF;/3F2R&oYdXNZ <bKhEeÛ,&ZZ9eR<\Tlp=K,B?go	.a:z'\1
ZNU:Yv3CG=$zuc6qน
5KvLߝ}t꧲@nufO|P*KwEp]W:g*:i
,v^8+V]AnO+(أ`}
>Ж|ptNO\_Dג	>vi<l_>'c1K뉕g1XuںbYq%HbpZ]Z(fQP5$vŚؠhx!p1l԰q
)C-xA6a+Nii
Y!aa830pIE/^Qч7	CCaR)踊0*k3~b %Ky-ea3
NS#Ƅ%9J
hQS QCBy̤~Ck./!-*wQ%vG[B9`Cz	thRSA,ѨqdKeU;8WgHi#Eî\ؽpCdP_BkFSe1rw"(6PKT`R9	ڀۨ?x/ѐ{ȍb
vF^WWXZ"?E^Hj=^^^݁z1N^˫:rSkg˟]K]$'KI{6TB8y/fP:]4a-]o]֝
r<FIM=eRYE;uDH6+=VLjG2c)kz,j|l4byf]Kw俰Y1>~ck=$#q2A걿Ws_phEDjܚ>6o,UapxdXʿMpbTnhw,"Bc/zPKh1Tp    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP160R1Point.classV[wUdKZM

Zj(J˥[Li$MJ2w<Rb]pĽLzJY˵${oϿ|B<PiJ'*H4SLa鸛~8Z;ⓖZ)2
*x|dHKK%VlOZcfw_̦渙Pit[cyJ*IˤmTpbi%Sc
B'Mgt43ȐR'32QfZbpl=S\xLY"],M@he&͞tz0/k̓F6N}[ָb'gesH*$S־	dJE+?Z$sLul;&Q&ti^2~t)EXf:27cQ<]JQ,"Xc̌Dp[mD1,H
4<aG5<a&

6`H% OU唱i+4%m_YkJ4j"\|̼Ӵ0T)z:	v"`FaTdhVn~xm!xa
k"a#:<m}11|Y1<ϰဎ]؍~::qdecc!c31`fxW:{NSdaH1^c80@s<A#:12KZ7Hrf7,P	+ԁ`r$kZuK?Z(&*]Z_ahF-t:3:7mj9P!%:O>TwĦVQMbL431+3^?uqgpq
u]lj1,γq}_C@hx#	NF#	7kF<,4Dx$B$,^NYBVNU%Tnaī՜Q>U<pmls5JD<.S
;f
ve^+jD-M{uوדS%٩[N|'ȷ75$s0.DD疆eɩc:.=q=;ѷ%
4U,
q)R.	7{%,!:83RL?뻃q4tk԰KC׊/4t,|IӶoAsM4OYoYoz>		媣~GhS?
.y "W{
m5#4*BgT_xx㴸+aqqAx)Jn^p_ʐ)Me
ǽ]a	C%{8ǅ嚄et컷×XT1!Ghe@F;8+e !uUM-˥AOF.j;g3+Hp$NJCb~^k
	i>94N#Ex%,JJoN:yBR	Vuj_!)͔PK_O  I  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP160R2Curve$1.class[OAv˲hA@QPARrr440$6lfwȃ1abxELD&~ ?EųJMgΙsߜ?>|Џ;xͳR<1G9>WpRe`d뺰l6Kn;zQb4W<9}Y84_;4(K)S`|e[iZ,+m2wg-؎ug4v'&+c363Be{+*%?a\iKX5DYnw2ܡjS,QGh7DZj{RZu
.)c)z'gx!qZ`).NhlC!/t2~*Gt?<X;xcp(jPIhPkTР
1tMwTфftSZ%[JE* AHъnv4.Ƞ*a
nf)npE&ڨt}k
$nO:ydo\G Ik#)O A6ٵ.z
Ө	#^wЮ4WӨd2P]$pkD0'srTTmH\(SJx}(MlT*hdo[xȺW_6%uS&M2սma;t@,!1P}|#0jB
Cj,\ՙ]*y>MDGhD uӍ9ܺ#F{>a.rLC{o{
`f.Q7HS@'PK <  e  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP160R2Curve.classV[WW$L*D&!(%j0!fpfbjU҇
ak/LDҵs콿sΜOܨpc51aQNoP5J3C	֖Q?Z-bP3oP{(	tF@[-iE:#H{GkG%
{N25^cvpX-1PEB-x<>P{UD)Ҍ$FVOƸ_h<#gGcYyBVn
#r$zOj$cJ'U9ӦdBRDP5URUmĖEd q9)ɽz:7yXɒrՌbpFeIhX1L:rZ(BZ6̌s*&1ICf<){,OS%.ⱶjQU
Q1t[
,FiFJ'9l_jmں,E:ש%k!Pl,]?XqmEMALL/+loj|嚨*ν魻ؗ˒c9AT5C77hF
flN`g+Qǣ;yyh#ȣGGE}#X <wYu^+xVT~vtw9k˥U_`{so}HNsͲiNaw[ooLa
M3.EC^]$rOXuө<Գ*iuA3N'+NpDTrޕ+K+L8Edpc'Q#`-T2ĠA'8(A	h!PGPzne6#`<vD@
`;	2(ǐG
3\}3084,2(1"Pa )b9U{s4zVc@^E0@>Z%ǡ<sAPYfE]髧<i>:JctC9I@zP5-IUAR[A>B)8?w|M8n⒏1m|0ycklx۳x3xڎ[MKk&6c'%n՘~*UUs|ٜnj<,qTT~Y*˓6޼jh؄80e8jçMYO
/U^Mͤ]҈M%q
6i>ϧ۬v:.-\ʻ>Gջ]?{v9!#TZSZ=4m)=ٺop^w9k\ŬgPH|u9|xmQrjaN-݊xc3*}MCϹ{yp׸IԒVv67q)^IvX@Zz𵳌PK     PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP160R2Field.classUms~V+{Wb`b
FA06;8ZZl"
p$omIS7-4Li23$sv+CL:{s{] oO
<(Щ&~Cڻ봂hZ.J''Wԧ=S̓|Nx
>O< !!s7';p#H
Pޟ+;A2 2yO@YQ"'d4j4!fS%PEwlPM{nΝx>O"\:+ۖk' זPa~qyS]FYn
NDN"+Teb.Zg9Ztz*vZ.KIS/-ERZmłcN`9S%NjFlvP2]ӥr>܊堟nBqA/c[Ṯ/CK]QT̕Nn)gUKfr2v.VҢ$!O<ϩvGvSٺa?T?f1$V?LnrI9(eF|}!,κåKP&qoo\yjik_α>lxYN(N-[u?BB歮y'ohk5p\'WIo6vȻ[!J`
@/b>#pqXg
dNb`TZ
`+)=h3Lah7:'<(Ɲ&H8(eSIvgp6Y,ŹY|%aA PXpJW*pQ8>ysxFsW$ek_x7h)XT\qO[Ū']uaʚ+lēLhfNin<w(Gpݷ߾f?l*WUڔ^zc1rݑLkx}&Z_665l6yoN_5DElWH6E*!;d=i3&|f/etwi߭;UM#\UՓ~xpSr,WkO7N4!:
dyu:ېF.0Cà2i	j{R^={+ؘY^?jll%Ͼ,O>7VS19]Ww鯢5->^ڟ-O	#/d{,WW|Wƒ5b7[rc#ן}u0L}z^|m,_V
ro6I;<f>L_K)UᗪuVoo&
Of$LEui˷lxrb򆅵x2(.)Wk 7="~)եO}QoL?
#\:JN)Y0٤N:TkԚcS`8@Ci6o<8yqM'^?80&mHq2 ux2xV&fiI;-i<Q3xU~"k&Id;0#]o/H7[ڬ>׽gw3j۝L||)2>̟^0L&*TTo {DϘ@L^45M7~m—~Qkuq7PK`  )  PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP160R2FieldElement.classU[WWL20`D@jEkk$Z%"
)Դ-0:AK/Z{о}$KjH1謬os>/8/el&[@(ѕcD8"xGÉ|͎qx>"ߓ[fq?)i^%_?CosG\<4`֤oH$7Bx6h	47E~\cLcIP4=,x4gI732f*Xr,m(
$B?^2V5Ԕtw*W!Ӟ%.l#;f84WY=cv1,[NR2l`L{fJ7Y=T<sښ|6IyaN13Q؅z,3
?~mw
Lo$*T\\ʸݡ_Teg}_	|RL+8<m݆q3g9kJο;q8TOij	=sW^+խI[dYw%tIHJHKxVBF	%@G}ޟЖ|ttM\1
	nU|Zz^/>'c%C=GcXo~`Ql{$i*8vxQ
Q>-+x{2CT~$ɊhRЁfO30<-
#@c8Ђ
vଂNS(rff
%WЋb:Ca2CaQ^(o0`0b[1gA\~씼mN]נ4酫g}29@2'rMɶA~F!KDvWh~@>*=@hKh	ӿ%*a
i	9
;Ys' \Z|.ډ3,ơ?+DN+Y$']ŭŀ=+M3BU|(~
Ibh09Qt/H%`ZV:.wn:%3+ڎ!A"s~GLw 7Z+i;p!P	T9k63Ȼk6ZXUSV=ŖHSUِ~c-
kϯЅoLvĽu127 /Vs#Ÿ@͡Ti-̊iU*jlPX#jkj8vAKj䲳4[_.RY9*Yfj$Un5QrYPlL{GegAfXDm`cژUT%ޢ*TTU	-hGv*hW麂T55w*Tiq½ڍ7I8)<?$'7Nƙ`'OK~]C|
G^K&_=`aJ(27N-B,s~4>PK)-    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP160R2Point.classV[wUdKڞ( J

Zj(J˥[LHdBE"ދ<Rb]pĽLzJY˵${oϿrB2PiN'Z*HPLa鸛~8Z;ⓖZ)2
*x|am$_ʥΦE+kM$63׻/cf}YsY{d:M<%K̤eR6XTKT8M1Oڴq1|!42DLF̳0'[3C9>S<aHD)KZ,1e'˚=9sLUéoWldSbl)Zd7Th'ڊdm[bt>;x	{ZwAT佗L3]Jb{mc{;8LXEbOfK#rHx43&T3d۟-QL9C?R@ŹCF
hؤQ
iجYC=R	D<ӳyUv9eluڊ͉D|֚MȾ5f"s?/34m9j`;UxhbaC*Z2*ۀh6k 86|
<0z6Z5P^zOCS>]HЍgp@.dtF?ØNd0F:`؃C'^bxUNbg8ӔFRiN2L0O`ሎ'ac/2LңVͧ0Y&E>TJ;y 99ɚVtҏ
U.Fc[Ư?pn BÛ6GE5:b(V@'tH;bS+If1EFt&D:HmڸJ3l8ˆv6k>~! YQ#ב5t
#y"<O}aIy\}l{l/TNz*7װ[jΨS*ŶZQ%BfE|3;ڋ:kj5u:lɩq-W'hitQ_9|""ąsKCl1˾G4r't'01J72K.fd\T.KMrƁxU peF_y}w0n
viZ񅆎/	6v-4*vn6;U)-k-@ǒ>:!\qb m1%rà1x[9{^]SYFDJ虸 8-n8.=(
Cx qGl^z Wܮy|!)p82)klAGSAq/per"4{v=^9qa&a~o>"EULEZx`2P}Qo+zJ wH]+hwSriЄڎ9̊39I*XB@ך¯EgvO&N{Nd"]FEE%7Gy|'<~ӂty!)$+vźl5]P|d~ϯjfZPK7O  I  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP192K1Curve$1.classNAEW
e)D"hbL	H]ȅ1x^`"B4|I" Q69gϜs7NϏC)$dLуlLGeRx7#Jpݮ\.G˦#'CͲ]۞?g,Z<.ٕp4|[uNxEJT1t&Ð]OMzVW
3{knz?gYw=uɝX~NXwPQዺ*]%?wk ^BRFOeI{R
]q'T4hc=9Rr/҃ESKny)}=JBr=r8
@1
'h8UCg4ȈhhD$

8i
]H?]`Ў^(N^E{ǆke܈,VՄS
AcU	BM7Gx&:ukCd;N+r0#kuȶ$;VMWK"\C;AMQ4J
LGmPA. u\1-Hт_a<.'YbAԸ+П3Kqu:W-Ktez;כ_%mY&M2^Õ b(8I4SJ_F?p
\Nh6c$߰	])-bH><!(yR"%lMHP't<]C)+,MJ:y1jVPKu
  j  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP192K1Curve.classV[WWL2a(rQPji

P"jBA.JaB4D~ԗ>o]]oG}gf@IjVw.;gq_48xqrqVk9v
YYHe߭dZKn!_%4h6w4wDc;;8pwoOj8%MñX':؟Pytur(`Qt#ҳ2ȦQCc5RP4KhFS5DYQTӬihh!o(muZ%555&TJVGd
Buc<+leSʨG.]??,eXɃzZ8Hê	H+,1t*YjJ%/RJ4~5|:phc' t"<!;R,%+kr5Ӓ5)͑aidlVn׮MRic!	Uqosje¡5AUdy2#[>JJgBag`]nڰ>ơԩޚ;2iTqݰL{5:)RiVaBdrvCWS#TV&`<)z>^ǽм<wYiؚ<#k;Zv.VU3vnvmH֠΢t0ۜ&3i{+ܴhSOCİ ݮ@~;ǝ<GrL8󙋴ݠ's+pDDNrޕK+LK8yDp%$a7J%GB1<Š0xeA	kQ AGc HXGqHBﰄʠJx~	0j38Qv3)>1H1efp)c@4LaY:D9qL28#XE/8SD7􋄏лǡh({*iȦ҇PQSݲsH\w[œ(֡8|Ϟ26Ik3H]*F~G$|T70=8r, |`{zh$_Y3ׂ"fj;W'JuݔS(̍͠^*+h*l;2ݾl[PNo5C;)7̵
d .`n
љ7bХ8ٷ*[z.IvI%O䒶˅pk7xx5#O~*WF?xOU_
M*6
𦧊i~p_ﴏ?gE-Pp%?4uq70Kt_u&eB;~zO[Xp3q+i~o୛A4ayZM\u oB:~oPK]  a  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP192K1Field.classUse?dtn-TMBcRlh
6Y@d#]Pu| ь⓾/>8Joۀcfn%">/{!!Kݩ$ڇ%R%R!4'nu@_E($$ǨڕVa96']91a+	vFp8gJg8yFOF;ZYwiP"-{pAtv~a>LBoV@L1LoғfzgRBסt4lS3fkB~/;oY	ʤۍMJCȺqd. /a#3Dj|bqT4ӥB֞NdaX3šIÒ(vle5sOrP&i7۲f/vv_nA͉)eNT2}ӶYhu0ϗt("ĔaO&t"]*)N\-Y3M6*(?o7I?*7%^dRpKvʧfF~AGHF+Nfwۛ,Tb{>	UG؎K0R`*dG
BjNtF>M,~2Q;ZTZj*mPvzUSi#j&fC$<?o]oq/98].i@4jbXpэha4T(paRF+IӨfq֨j4CBFa5BumeS=+/6mmP51_M@b04LaROi.0Y={rCa~Cv3L0L1dxQg8p0Gxfzc*چewcߐ13kEH9b]ꮍx$v@^rվb!8`_3!T|{};+x4xw?tf@$_a>ؖ{lCb.]|o1¸^ńm#ezs?@7G/镫=Haչz/2ǜcWFM"`̕Kw*-Ӈz
X]h$AKT<6"*w(NQ-az|<E@LVNMS=x88z)ZYYrQO
ƎG|_C<_aI$uyMktG@/өت2}
}ynq\'nR^kܛeiNΡ[sWoAH]i}ƿgrLeٟ.^R
f<7ؙ/!$EE2ۋ]3KQ;AUBz(<l|P-3uu& :.V-ZZt<V:WV1#bDH
20=r=Ĕ7E-StREnK=Liг~`V7*V0^}K'd	g{S{VFtR|#?M*Ԩߗ
Q}/i]cW"'@C ¢a3ULqD

)~{ǙNO/PKǣ|  <  PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP192K1FieldElement.classT[WWL2I0rjQi
4%RZ-ېat2	6h KMXu^^Ud4+7|{s9g/8h3~h_.N
}S
DSG5;S,IL\dVU?"B.z9C7u%~C.:*@$uL]<púf4}jhӺ3gxTU-mD	伖+1s'6G_\Y5lU*ꅬh͢ qUښ1}gT{&S>ݜ8B͢8nfъ\UՔT0jXrQ36%S@+*LjjŲ"3)7dRӥ[̩ch0-ʸ+24.`ށi۱Ԝ3<YPl;b&ZBPm=ZԨPOIʎn,K]CܳfYmg\w`9lSQ]v l#S(]Bϼj:w=WJVϺ;%OBLBRRK8 ᠄CF;:#O΅Z9Ϯ#ڷf/Y{^~]tyzj%7
h΍f㴘+ǣ
O+dte
D$fA}ˈ2F3eG"2cH0a؅-2!"#p
؁s2㼌\2c0N53L2\c o1wTiC
CaSҩ0^Ûo1͠1;a㪀ڶ V5MmkZ5w:;N"C~TFb"הl'(5
iDl?k@!Do+gߓ^]M2!7M2玭#/jYE*^AUkN4i:r`'+)m8^Syico@[ǏN?y%ރ)|mM{ivoPr9mxD |dwP}ߑ!X{H,մݸEFܨ,<F~Iޯ$HT>jg-*E'Mwu~WG6߬?|^\KV,!uws	
}&'i1P\W$ۊ"W'V 2(N)MTHD	"T@:#{{2(tX	E0{2(t+mV$&9-+rC+Wf,y	9L[3޹-\PE^)]IЋVal!1eyg<Jްx[ť܇߷ķͽ	yEQA⽵e܇iM!BkAl5G8=!	+lΏ(v/|.PK/֞    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP192K1Point.classVSU-ylvնЖAcE,lJ[oE_p:~ssw˖gd=9=߿`?~PjlUnl*6FǢMXFH☜xu9JѤdVe{;uDAo;Ngx,g̖5b[z{f*ћ2ʹuB%hƚΐx֌Y&)mEs&L+RP2iZɴy'&kF4=hzü@iV0cyd<z2fINydnR|6 3)bDb8#cI";8'=<
fL	ߋ=7x>ge[r$֎c2oN;lͶ~,:y|dD>N}禒əI+G|,ˌ\~\Ձ55I5dSy)KPt1P[C*T<{T4hRR{!+nD}ܞ-i67Fdxoֶn~mm"MN@9`۠Op uP3`(E2f셛c/ST3fxxa'CCD C
`P'
TcݞbxZC'1:bJ!2L Cdd8#ôb8000	AS:6cg3$^eH1#f8q</0HMc}ud3h:mf{R\[I`~fc)?}X{*ᦇp%+?:3Q=^6Ǎ
:Ph,%>]TaS(:@	/qB(ű+ctxƈ,xH8ς6հkX-㫈/#~! E^,G\G:R"<^C0"B(][Ok$J1'X>vY,G^vU.<T\!T3+أNk#pmewA@+E(˸LaiTyB	!5/"@WJQE۰}Y5{6"54)5<fZ|+j!7ZPc
tޏby${zYrSKr^#ّwhߔJRu̒Y'sUo}F\n(R,KlAU_|mLDEUtn@E
tl'+hmD
6BpG_(cNdw%8̹]w*ws|T^'
Ց}|9?`O%h+	qWh2>\b:U\r_zr7M&C4dtΞUic|ɀT-tոRxn_{e#,pJ&0Jåme7er9F.
]C(BdaSrshVŵp>-TQ٠6Zn"l7@6q+^
eGC^2\E<҆qAHNc|PK5   
  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP192R1Curve$1.classNAUW~PԪKXD4%iH`XFڰE#CÍzY$Q<Dt=sΙ;ݯ>}Ћ[Q=I1Yfݻ(Wb4&-`h27kb?C=7hP8jכÑi?/Pbe3g|{0w]W)]ϮٍK0G=cz^,2l.%?w׿k$?=* AZ&s+i&I{R
]1UPF:92^Y)oKF{<nRoC^
o]cOp ۮgNܿPLI(NA9
2"Z=IC:5y
1\Ԡ!ي.e1#O21t YtӋlhiZ[of0hfS8ep0>p(tx0D>C Y,ӊ:y]d%meSeReS+y3@pxMA`AcG-STk/lc}4F%)ZAr4w.hIL\}B\SVLW6Ë*{mQerޤ2\{@'"T/#؟8~	!06+5Ar%o!NӈN5I|6_Ig$e3:WPm*~D@i&eq5H+
PKG
  j  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP192R1Curve.classViWW~,`EAŪ54h[&eQֈahDk/P?!~?f&K"9=3s;7 !\qa+]xavO``u;<qVSm`=~j]`0cb[@-8v锚2wZw66:J#`5Pd8aHbt ub>qhC^uPLeL`*RH+	)ORJzDL+jt[e%i1L
E3(5Uf)QI645M%I Zq%!*=v*;yPNqik) (6$=%Ss娮MDRcqP")F.D,_A͸:ʖ|کuЌGf@V3i5]E~IiJ2XA<V6Q-CRhL͏4v
gMrز*4X"g36P5
>1P\*¥Z̿4"Dӥi_d(Y#)*ۛzƷG9C4r]RG	UfV?ٛMmF]&;9F&AS*LPhV~JJgQrvF߿2<<Zxl屍GGG+<xmo:M%|B%a=󴤎aV:#PXEl&Fdu:,N&qoM:Msq}ڴНS1)Mr3gW!JswQ=KST3c\4tq˸ MdN/]~򿤼ĹSBQ@*<Z/z:~Z@X
8<' 4C8,`'-8"à1Vb #
{ 3c0 $S&ʱ#F݈@epA
Snn"k^p#sn43n3 r^ddq>Za%ǡ"sAWUELF!ɧz%hb醲$&֢,Ir%HXouNǽ7p~zГr>%/5#I{m_pܒ׭2oyxgzx:`Pl̯k{sZax2*UۯڮڗsMƲNIgn$i<Yo㭫6E-|s&(kHAg"Wsu4lH\;E:/<k{8nϑ'*_;6Yl:Owm;z{c_]p8Y^pr?IoC}][ԲewPɣcK"@	eos<>fP,nI.Y,uќaqn!
ٳ޼_Kd72L&.^7r:PKه    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP192R1Field.classVQwծvW^;Lm!!bWX1ipL u]pt--,i(RڤmZRӔ>49NO}/[O_~ZKԲ;wg曹w>}"2HL^HJ^HN,\aaf7<iɓUSi?@Ȏ6\M^g m=;C	&bN!@`#,sEǺ_paY)ziN](Bȕ0
2co~ɿf+\ SiخGN>t6]\)ΊSEҪ]:I-m1CJrvʩ"q>ggJvy%[>a1=9zgN˅jvYRuKrh+z	F
:B5EOo@Y9XٹNNMJfR/v
2kq|V85jnlcGN	{:h}>
|L#![,eXI5 fV~yO@Vݗ*EhճDQW|vV_y}H; Qg*fnu4EhyG_G,(4F(+B
Mbu^ݽeo	YG#7NiN	^tz":"I'!CTi$d2<p!ENätab:Iuzu"ut!EuaGТN1:N'N1,i4GtFôİPf8˰	:<}50ypaaѫ-
UPg8pAYU
8U5.v.ڬ}v^.94PYOq="t@- p91_k!lO=(j!!a{$qĴ
zwjԝ.6@s]-PȧD$Cy0τ{L?cT)C٥ti.oЛ0"lG
"L S㓆lZ
z@Z~VpC^8<#%mB ŢF%Sxv	Mb.Sܡ.$&=5}wh[V'Q S:dgzN$iqR<0Qנ6y="tyPrmrP*($A w\F~~̴4{P7?Z,{e]aµ֞QS7߻G=ؑW <QosFfOt%-Z!7ЯoF:hgp4:9W?זȭwx4tj4_LC
D4bE=θq#6tN}#yI`%Ak*;23qL0x6&)xD)Djcm4jl뙰^lsq,c44W	g+y6~C$m
640柀c=dp+,j,;AA!Vmg-1y3D*$'=&PeE[]m._<m}@YI\3ʧ=Cߠ[i_o8Cn^oy~]KF:|po[cܬد' ~5R͋ûnO
m9Y]-H3׋\?i2n,~lн3o;&GT?3-4[M0*up+pՠBU4mHK~Oo<*JO
A!#QI.:%EPcT0W12;lm`E/6=l%KTjKPKǌJ  o  PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP192R1FieldElement.classT{Um.4,Ij ml%Zʥmm9M)-X/ }|I_7O>o/>7ylBi/933g?8B+ެ]N-bm0>SlfIfB,UYDTՆNjnN?:	GnVHK4.sp`DF^yϚΨ0Z8ZbDC%/R^;9z>1G;1WV
κdCz!k: ,3B{Z
qmC3=)q@nΓ/nm=%,heu^MYHg
CTc*t41%SBK*L1Pl8HLr+YtT6EMCT݄θK8NX̮夕mTL$6wwgkkWcCv<D);,uY ,;}Z,Pl`4ͦ'`Q=0Fն968wPm"QޅؼjEz>vdZPF^	}2_e<%{UOH芏>x:gs6fnS-QXFgm_?4d\=_7ya@N<`
2b",CXAa760YQp`Rva(H2ey;8 
\;2gz"E1*CAc3\b(00a
:ƳdxUC1a.K7~Տ5MaeնMqGծQg'Ԝ!J
Q$vA~L1+O=_`c[L}OF+%`~C|	FT^,ѪpDzK2XAe%:q:iH0+1ƸQc3zlW^Kȁ//2cuz 16{W3>F7;<sV\qjT3|FWdhIU}d&S+x=^ۺk`V!x-5{{y^b*kj[]k5כOI_l?]D 3u7 Lˍ&,I7b\J*ڗ"\Is5#C$h5Z-
EOܺMѓ֟l7C3_X~4d}{-I&B0
;=ngS`4!_.Wq_NQYaK}wǩ@T8ߡTOxi >
PK5  8  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP192R1Point.classV[wUd2ɥZJ+ТP[r\JɔFҤ$n*"E[Q|_ZK.9>IoB)k;{}͙o؂xZZ)P[Z
|-da~6V9,o/[QDti99⾮l>kRPĆG
|l:UsVxk=}Y+YVI2JF`
(Yhl{ƦZ)2J)ݣټuP(fF܈"=θ (y2Wk ot gKǬ"/hB;;#Fbdf_:.od2ַa+|B)Qwb*mM(';].مVSgM>hlB}P1u}S&ڏ)ibXv>4'kQ:YNQ*"cE̎[DڧAmL1HUJL
5<YãӰACV
1{0h}eYv%e|yڒm-Dk?kEN/ȹb"s?/34m=lb3L5x&[4DLT3cb#T |LLDqMa&B0L<0ZvUc=&
aj<m&`BOó:эg˰vd
@?q`121$0ΐ7G13
ë)=pؠ)3021`g9vaᐁ'A#/2L£V)d0UɥJ%>TJ;/51YVtӏ
U.mgƯp>p.ct3:7Z5P!%6O>TwġVQMO4Xgc>k?Ej*ϰ%,>*y:ic?,JLЦP44:὎B",|DSY\H⢘c7g9euz9UP"~frF$G.Պͅ։uDeD7"PID١YiST*Q'V4<^WϙD95zE-w.|Ml!	!BPM\84q/IN=sVpٷ-	Í-uoR̒(saz;<q ĂjBM3bJ_#[C|aܗz[8D2E5VJHc:PIuE68U{cmrׅܽ_k*pWQ-D=%Lץ]a
X ިOO_rDDŗ@}zE|U鬀
${i;/İa-q܋q&U;|Q8/"$®"ԕF;8*K QPv7,MQ91*xV9	?ZrJ#R=@5[jbSNA9i"ȉ4RcҨÛ7ωLVlXVE'{~P4PKiO  K  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP224K1Curve$1.classT[OAv,XPTb-r45ijH>0,#4lfwcCËHųDlz99 ŋ:ˠs	68V>&-;NY3%C'䅶,K7bA'cg6U͈_vNA
cYa2RjU'l]*^NI-ugMمo
,ۨ,KRk*eOԝa>UݲHǚb-5)l
ej5hUݺRkv*af8Z1ʐYN=b8ww[4w2בؿ /zt*v,z@]!8Ď'	:AUDpIE >;*pYEWUG=rYzChC,v9@t:"E.nX҄EXJ3˒COST-MR5lLma4@p%p.
DR};$v1o<ISٕ(e-Rzv(g~NW04A4)\ oa&n(\П[&# 9#JDO7|z7 	]vA)&e72C_usn^"Q:'vsxCvô*t1BRD]~ PK$    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP224K1Curve.classV[WWLJA@ۆhlq
383K7ªmW[Q_lku5+;mӯ ZqɃ"._C#x_HaH7vFb,2FVl6g{]=-p[pWk8mu:h;n9RSdSXP@dt8ΡNoO$:wh4<88C&~824ȡd`L˨,fZ	LId@p4#ieJQ.&qJF=ENcXSԤ9IF9J8(MH養i8y9JD$I%.M(}v23}HK6IjrYW⦞Y:kSݩdL5B^ĤbZSgh|15cӌ|:hshƣa; p
4#R&+sTÔT%͖AИadt5Vn׎-Y)r0Aո"ȉ5A|}YpJ9t".$Cɘt@Qԍ>4SuIצ8ەë?&6؍#3=amДJ!>g
*H28AN*p.A_@&;, (E(s:
yٹYa>yZRvdWH7ekV7voulHF΢t0;ޗ3ik+ܴhDDİ,]/?cvl:ޜz3Ӡ/>v"z7h,/\3);w-76 N<XF ؍r%Q`Z>O0ĠjBc8 b=
D%bxV+d qPD6ψxA1El=x1`{1 `A	'L2ŋTdQ18%y/128:"^/_$|=%_=GسD_V1UUpZ2>J$C亇*%Ee{aIZARYJ6R;j%PH5
x~[8ޗoW%k Z(sKf,5lx^+WG
8n*)s{Šn*k6h٪,;
վh[PIo53)噷Z±
d/; `nn7Ѹϯ8oƨCYOqobK&IrH5%Ov,p6kux1%O*Օ	ɟj+*=
t
MzoMW-_^n{z%u">e	
nL'vsL	˗Uc>aP-+;ӻełX<!mcMv
/įUa|~PKLǸ  k  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP224K1Field.classU]pU>MIضT$mJ(ZBM6n  EE_T,"T8G^|wg|s|wnwϽ{ι7oxФ|糲맆DrvD``DJkWHf[,
.h/T0*eYX	q@"A,{LfQZ8+
G9JI7ۂW"W:wa<. /aa5 +YO$PT0c,}F;I$@dd3nƓ0mKdң.2[Pu=$8tGxhJ7=C{84*Rֈ2Ik,cn&ңFfFtS@*iY)cHf_>KA	Iع;I*Δ5
eJO!iQlc:g1JԘG93>׳%:[#Q#Vz66ٲzSHe2(R}m:"Yv}xBh߇dTB7ʫF"!ֈ\eG{!=	/&E9=} lC!mʰrAB2:w޴Xh!P2nSDgZPBjTU
=PBV3$n{yi⻤RըTŰa1*ɭr򨴕!*RART%JchJ+IU!b0PJS*m*u1i!땩a**Wi-CTnzgt?"ˏAC~3$F{12i2Y?
!pas3exO}H'i3k馵KOxBuA5y'^"T%{H/ q̫o/5NeQJX	`0zB?Щ?]noAэ1
GtEz-\yd5%Pqf*AՒt8t} c&D~Ȅ"Z1PTuN^wǩD으7oP#-Ўq5VSB<Rv1kP.mQK
}85ʐ\>zJӷwO!_hєpUޚ\50E2;(NAspl,Ti%*Uk>&t?_>zҝЖ'MrK N>ѶP.O֡6/O;nr4ۚE//nvξ>29}A!wȣjgdbnʽ#as4G$FE"rX֔<},Tũ/-G t#}<=1׌2lt߉Cy8tMH_m-c:wjp
|`uT

&gRdF0ct%8](>ob+EI΋&9%MU^ -,LN1U.eY qGv>hμ>+".LIǱ`?3g,[gwd^
,Eyr})Wrў~v/§0k%6ڕPsCM>jJMTb&;d;)]l؜,PK9|Tx  D  PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP224K1FieldElement.classVSe?nͦpiVJjH@o)bMz	uIaM
ｉ^;/>iZXg|M_XY6S`h&;}sI~>a/U^=xөW??}laa7D-<da)?:A?]C1RO	ͫ.˛g֤e5
ΎtYuN_??? 5j%[SeVIDgU҈fٴ9~2Su0*&
̥В&)mBK!_cK/(z:f2Z:5մj`OZ5;4бS2"6Q%?ڙ8D8&C3?L(a]ɦQ]Wӊn5kvM&1SeD
/)6Oa,HMN%aj2iͰKW);MTnnɛ4V
Jf.Σ[zB;<hauKpbb LM2Xt`{Iܿ2<tN<^wpkpjJfn0anBjkc9nPx6󰃇<Dx@uRgU{W'>r\M5VuϦK6Kz)~u<-ZlU\?ˍɬzпjJj%$ q	6[A+	!	$h +$x*%*		Zj	6Z		vp@0 A=%#.0ω
{y/$	L4'tA`` bҔ=0B#Hd	&DQ @peOfѩ+π$O*cʈpR ,.]m0*?V*ІzgބW>O:L݄л	8/o`+31b2b<nܒ{ffJ;0ر4<D[U*hck*R&!5L[^Nqh_P4س񑂝gs_ ,eݔN5;q ۊr[\ 
6-h7 &4o܂X"4oAd[FXQspEݫAW5]BTE		mYqUgKWն\gJO(/G{=pD4/#pZ\p:jFcq"\!!sA9^v)=r,);Xg#ieWy"1iA"".YV.b](vYE
"3-"nYĺ1X!"n,+Z"VxdRb=NmGIۍv9YAw
AK]\E2mTeBUxVqo_x|n&#Į[k]/+:E*+*.^<NϿu` E-}Zo#|^S^;18\<9	'x_Y<!c7d8~D%m~PKT)    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP224K1Point.classVSW-ylvp[BDE
m -h
!d#jkԾk/~: SN?g=Wq3e=9=߿`~PjjQnj)6FcͧXŚI⨜xu9JѤdVd{;SuDA	o=MeąD<o֩5j&Z{{Sf:ٓ6̌uB'h֚ʒDΌ[&)mE$
s&M+TP6aZ]㩌y;%j4ݶXfü@iV4cyx<z*jIOdxT~QB6 RibbW291{3|߮-)DEi[xVvWvSy@[۾c{d0
:h
oC睶(iXuDșBg{ۨ.qє'Fl!cF0&̙Pj$ǚIM
(Waة!*V]*T4+عŐ@7>nOcӦ
N[ba2Dm7kKf6ud2܏[ͧaOeP'؏z(1Qb.fDeP
<ȰG
T@A0`Ójc1=ݞbxZC'bct`с~$0pFGi)0paaa%^itڭ!0Ɛ`H1ʐf G0pRx9^`x&gLu< O&a
|cI҆#-گF5< :3{7*pC+|Dߏ鼤*ZDG~b|0Od>s$Ñ(\'/|Ƴ4FDaCysF\o	_E%|3.P:22!x
J3\[OkAIeKk,{Wd,ϡr7n*D+Q5lĲ(sUB%\0B!9xB}H-SբJT6l_#xVÞh-M*D-OjXt4ߊZzHMXt"B8pĞ^ԑ\WHv;7%ҫ}=aKl|E[va6pA!D">t5vS(SqXE*:7|}C|2ٓeڂ6na:}!R#nQò؏;EGI}ܮ N9>*qUx>Yc>ΜN'aF58
Z@K@'uqz4TNKO4ppљS*|l/귅W
cryD_NU!eڹDL;'t}E[ka%p^Qo_N4r-*Zn翅J6
Z9AUؑFȕ:7nՋVپqhKVBZw>.(si?PKʝ!  
  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP224R1Curve$1.classNAƿiw;P]⟢,kPԤ CbaiöKv^cx7^&"D@gD."!`әs9g~u_~~ QS;M1]cתwQ0ąiJrl:RxtY⁼mKwŬEGqZOVKocVP:Sa|v^MzքWJ3{saz_
Y`.]˺NJs|p0?1P\rRQE]C*U\ɒ5韻ߵx ^JRFe:I{RΡs4shhc>9F]Y*nܻ_zRAh`[zؗ>ܣ?Ȏ+D8/%ǁІ8AEDC#hh@#8!4t5"nO=qiS&NtHq"(s8VVҫsZ^N+]=GԤ'
5Mz\֧]u K܁%tZQq\%B5վlT*Rk|3B)
<Ӄ&]iAsQ{dڡbh [[ǕQcт- &j2w<)Ģ:|:g(!P|&=}~OL3e^o~]V.Ipy%O$Gq/#hclW
Hd6Z"ьt@3R nle7H|6[3r4u\JoC4+t1L^$PKn^  j  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP224R1Curve.classViWW~$LEЄ,,Y5ʢD+a	vj}__~pC89/ V	tΜ.sϽwq_qՎJ;xe(Ίx1PuۜCqVVP;LZIkӬt'=/>o#CPg3tNOy}@,X#zB]1/D@ {2C.ρcAhlbh,xpx``0B2&kWͦ#j^f$1ede
rf4'dE!7"(Ir.xcdIk(eTES2i,cYZIU4:9CKYYԈΨEi\NcrOG2d25hQYRG儖MKԬ˪t*hrJ&/BJs4~5[]iAC3
ͤٴu)ѐbX\D4Qr62.Gi,)uUܵ)wIi;GՄ,Ȍ_R}p.}B94YB85br%3nYa{3s8C<+*`xkg0F!TZNߠiCb&4+?%f9;kbz.m<ãGGNMGρiӰ5NyFTRnvTOPu,Vs_ۣ-;ٴQ ,kM>K&qq/4;&`rZm.*Lv8K܈=n\JSTRfpȘ.bE8]D28SE=yW/)|c3q2
hBQ/`50A8 A-hA` &qAp؂AqЍ#v2؊	xYmX0
 `A)dLT`?F9QL9392xށ8;:hl{$`k.9_#ߨpFdLhtO4&6(PVĤ:ԡe63HX*F~CS(pu.z.gf(i9ub[WfUcom/ Yobor_v7۩,a^C﫵^\WySHcYk
37ϰ֚Vw5@$â9|z݌3N 3XFz'J`B8OZmcsyNNj~6catח7}]OzwFkm_^={"t55Z-+Qv<'[FJ\3/Z2t܏VIłXXAYo/%-lxV&qnciᢈkkGPKr9.Q    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP224R1Field.classVs?]J뵼vHmɁkbRA&&uqbdH+@6>4It2I:}ig2!VP&{s9ٟѳ@bz	f`*JKa]<)|84*޼edS#iu\KL0/Eg! e<x
@^sk~P0S>V g!Wl+2{v]rvƦm9>\YcLٱW*80V)<llBv^9+S+i;>wfբ9΂}**k؎]ͯZeKE)B*WkY/:\5EWm@^8hپL;vMJu%\y5YL^s*kG572}v	{:EU|XQ'C&uXY3Ȥo	ȕgB="D Z<X9_*DuurU	G2ˇ[E0r)z/mq?a?bAv(4PF/+B+48Kq1G61$zIi
i$LavEiR4JRDiQjTRFOK)ԥ!4鼬[GghA	Z"I%*}NgU:NTo2|2C`3bXaXe(*}C03\PCzP\ss*y|AZgMo)NA%P}\_m+CF+tQ}!b{|$a56á{Cؠ7H7@BҀ (̓Ks>w2UZR~A=<\{
z}0H]q*SWA?H Vӏb5u+'H:_AAG|mE`>)%ʁhϖ$7݆8,]C]MқwhnM芙h'QWP
<R8R&Y?qq"+~#1|mzH~rtxTГR)t$AY_yAo5̽
zg/j/|.l- ~)uc}ݾ8p%
3'>C+C)J Ϳ}^ҰBGA4{#>ż?[D>MQ¿ptxtj;<iT2te[CW<1.Y=z֨fQFcQ=նxu=uUKZc)2+c2ܮVjuoˠf%@i'hFⲫuCʊG\.,8EFh){`Dq$#+pKeFSxU']<$m
oc?)!
5@xߊf6L_٬.kBɦ8 ) nMA`^n/}:!I.7C!GuӠ-XNok-ڸ.lKP0qw-Q>1l,,'ow[e>]ϒfU/gO/xݖ[of'+|uVόOuLACL%QIQRjQL[~UrMUqNKKDdn<*=;[9(JEI-ȡܢ'G#?j]	",ET;X1t2%0 U`.dϺg"PKԌzw    PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP224R1FieldElement.classUsZibF$MdTI^Emq&"/YIfwe&uۼ&}	5p 	VL3@c3svWulh{ys~|  cN'YpXH";rWYȲ 2?q94Z#>CJԹ2K>K"fOW2dg}c7.eL ?vv
:N0lw5
+OwH˓!<^2(Q3Jwd\ldjǧۆOz9o\]Zϛf֛s43U4!grYȖ\`شS0C&)($xahEc4g>CSyLs`,Ma^t8eɑ=gذ)g	-ciB&kYFAڅJ(G&uc5%mcŁŊX"U]Ȍ+%}J2|5C9{2غ52;8긶GWS+[.fٞ_ev>_ί?~PP*ieڶ6E}mĽd;c$Jr6Cw3ϸƩwL1
1D7E	ZAu*^I5n:I%מyFyS'=9YN|癲ݹlU%tI𰄽I/HG$pHnDߝ=>z}%m-+҃U~@6/>B|u<|++kӕ</
O&L^YwKqm *p! $+x
 u
vAQ+DaW6Т Vbv2a80DLvlR1~)
f{{JACWgf,Q(r%sDq
(idwe.scf>Ïde`^`x1b2p8C<÷gx5<Ow%[*aKsOk'Q@;E&*	I"[Am<M
 D ǯԿM_z^_tcyI|׮_@MdIDCg;Ba.X-fbqQ68J$ȖxkscJ댯4A41fj8IkFS#lQ
O573)ؔzv@mT~C4jөyn^IӪER'עueVwC+hu7RT՛K:*RzϪ7ҿܠJ0S{"4dKy~\û4+.",TSX[.]W\$JpZk\$~B~w!)6Ix\8}AlS"^[s_1DCs\oR^^"RּۓBx3ZJ5|ߥQ~i˵ځrtJWQUŎIZLمOzK#iAm	PQ~GHw).2$1<
#,̤0U.H$̐@pӺ$D$yiq0|zaHWj8}*K._?م&9`δD96bAb7b}(PQ*Jkr*ML*UJzWli~L6d9K)ĸ{%\R~KA{vx(H:j9Kf]@,.y7PĹirxѓy?B57uɟ:OArŘPÇx{	
; PK?X];8    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP224R1Point.classV[wUd2ɥZJ+ТP[r\JɔFҤ$n*"E[Q|_ZK.9>IoB)k;{}͙o؂xZZ)P[Z
|-da~6V9,o/[QDti99⾮l>kRPĆG
|l:UsVxk=}Y+YVI2JF`
(Yhl{ƦZ)2J)ݣټuP(fF܈"=θ (y2Wk ot gKǬ"/hB;;#Fbdf_:.od2ַa+|B)Qwb*mM(';].مVcM>hlB}P1u}S&ڏ)itQˎڇ&d1J'˩"3J@{hYq^t3ϕ))\IaG44kxTc6hhЪ!`rT=4,ˮ/O[% h}-g(e9WLce敟MliOۤ`+&hbXAj6xLl5)u3<ΰ!DfXΰ
{LԡDA0cXMԣB)axVG:{؎g8n,Q1vb(1a^ax!eм4~4C54.22$^`8pEXxԪ=f2=TćJp^i'&S#9֪?~@UEXm·e.`PgQQ^
7=Ħ	>S8Ԫ#:IxSi&#6LuLbqtHmB%6deG]%OZ3slguW 4&Q'QH5t
3y"2"@}IY\}ll?VOv#*7װCZhP8ŶZ:Q#¢n(FD|3(;:6
{j_%*9h F4Sϱ(_N4EoQ75$30!DT疆8%ɩgj.V;=q=aѷ%UYr1%bz._VobǐG4$XPmBբi_LI1@_q5tk԰]Cג/4l@occBr[6ChZ&(ߢ_J	 )|,AW1)Ѧ~@] *Wy}MwMeaQ*8BgTb@x㴄+Lcq^)KnMY|)	9OWdWQ
QL⺗BAvRǽ踾Jg\÷sN"*.B"J-2H]Ym48#{"T
KhwbqЄm%{<XX)e!}} TF/6_4M*I#ex9(jJN:y|xy!)kvh5=Pt2	J3 PK=JP  K  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP256K1Curve$1.classNAvKYu`QQ,&Q>B
e.B{hB/01  >$gwQ(Μg9 p!yA{A֧cd֨7CJpdPe'če=j3&-V2&v@nD/ch	In3,{.?c5c;)uVߚq\pY`4תr+\WjT4pdݮ	svu᝻6_̏r
HZ#In&M i<N@Q)86t?u.zwt<nRC^n阾'}GyoWpK}'_}(8"*N@Qi2B*Z<IEgT⬊ΫPlA7	=H{S.FL]Hp
"(Y820L˩5F[fr!G8Z6W:TqhjZwһ&i4@}K"BB^7Yl{kTvTz}
NPxMA`~G-SoWkψ!J#4FE)\~*&rbY,#W*2qA
q)L'c1-:+[W$mE&e*5b?E4	`8cJh/y$ퟰ	-Z=0y:GPo$/S|MсvSl"Mӵ޽v'}u?g3d[pfnRȋQPK<  j  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP256K1Curve.classVYSW顇!ȢbԐ8 "QQ0(lfDD!>!THR[Q^LnLRr{9?
W}X㯋x돳"^ǡog^ETJ&VrP4b-;BcH֖&;JBX;:ЗPu7vFE{{8,
YMTdʨQ	J0P4Fd(i666R ;:U-eQ*%òbi1D}lPUƩeeDMjΎ3d,q!=Y!UчԄejh{:,5)Zvĉ9qmN>yjv84LM_z_qJ)9TiɚerؐT(JmhдR26a2W+kW%)JִѠIՄ8ȍ%AMS3AUd	y"-[JJgag`]nڐ>ʡ̩ު;2iTٱ1ݰL{5:IRiVa\d՞arvCWUOP&`:lU@P@&	h0:q/,]Rk8Z*NjouKUa{]5耳h].L6L>74k1K˟Nq'R:z3S?>N"-z7hƉ/\6);w976 N<ZF	k I؍2	P`%j~TG*\S8$a5
$HX
'qІ;"G%dPg%<@D
g,B;a?0H384"t@aAcpAVD"bdpN$p^DΊ4`@xK":1D-"q(9ƞ%kj3i!TdtRl$zxRBS=&imKe	H]凞D!ՀML&7/q)@/Gx=Yk Z(ɗqfL㵀HiNɣ
\7
s>n3elʪ?ڶJfT['-gsya~捶Gf-wYk.6K$59t$gu7p))NmG]RiS)-3r>MZ
ƥys
sɓ5.V\Şu'w	:nMO5_S^ީB~Ád,F]
q|'@S,Y|U0O<gAX}Ri||bYL>-ͤ!naѤMvhep2sHAEtPKܞ  q  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP256K1Field.classUsT_Yv$+J
MB
c1i9rMp)ubmQ
}_)J>p̀~o|c0L!IVB0e~o]?">+SKg$#m{$
F&$R"}}}mT!X=
udqCxN,	q\"Pd	5&ر9y$=iao3ZeXTzl8ݸU'H%
߀o;> oaI&a7 /LaL&Gr0C-	,OM[Vz JAd8X'R=Xs3>۱<L90
NٽP2v
@ƙe
VQ}A35>+Ub`3łuis3F*FM[lq6;1}0V	qh..t_e,:Y$Uő[ۚ2Ra::VA
Tb2WS)\33RTfvߞٴS<@|D&-zH?LN&6SqWJpW޵BrjUuٽhB}@(f+$L&9ٕTHNVEwC%'?*Zk^
(ԫ*
^Ih~tjktjfheh YuZC!:BI)Na3pAi'MTS:]ǰatudjtT&utghlRNA(t#:Wt_ddHit'5CYi4Ajtebǰ!0`3`!P`p5,iCf8Q:7K.٨ڒi;{l]Fp<0bNf-`!zUzUH}9@#[.ѯ^M~ZPkzs_{`%z
=pVƿ'JtvV/2D 
\&)>Ș0	&\7j0b|Dss6Q89~D/_UGyz0^j3hDot5"㘗qǖ*1&@X[%:D@sz4ϣtQODTe:zG]5XWerL|:pJa8/-)YnV
,4DۏvHi><r!6ԏQ
J 
S߶Fo
3+ЙgˁJϲ޳ԗnCf1
m*"kϜZTʭ9T[vU^_!QV[u 1PK!Н7O@"RhnV{T1?sz/~pn\*`DbJMe-.(3!򅱮[5G5pZ^6)*c2ct\5TDgE{3 -aZ&錘c|I2
(T㽻Bp]qm/јv?vo^Wy=ݴ⢺T ^}z{dx_l
Dk֌APP/r#PڋX(04VG1X1}IO.FV9 leQee`
yvPcJi44A+1owX2U0o PKksM  
  PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP256K1FieldElement.classU[wUL27l!m"5B*4ҁIRf&EEEĻO,Yۃ&$ҲY]foO?؅/Bh	-'%b'u)ˌ53d8Hf"l,Sѱ_bU|f-`TJGz/-鄄Ȉ=s;LÚPD
U6nF!NSmI
eAg\	ꄑ-N#mf38aN3.Зq[{.\9&OpL'"jƢ}&ug	}fa
#
æ6ӧrɌe9sQp3Yc5	-BjBS,+P(/r[%ǋBv6;eTl2/*L[gs-kYw`AAْInA*ۗaݥ 	\Jڶ>KMܼ(c1sRstشrn;qt]sPiwEt3ӺU2کeN-ˮPZq22CN%cz@Bkl96~Ⱥ:9rK垕omr>	yZ-dE͵~%(4cYq%hlէU֪hEFzUleЌ
UldhF!.GPhP!bv}hTQ	}7bT<c*6ㄊx&4e8xi㌂2L0gr&9CB_T01^bxAgd<qG@wBYh+O)Ǡ{0CԨ>nYZmm21?8h	?aHtw-h̗h6.M~銗Ώp%	KH˴//:,Ѩr2bfeUE5Dz9S8e\+)VjN&Vd7k	.É,[^-8)=|VXq6{NYtu1j
?C<GWi.;H^մFm5(xEj&y{$D]Yp-*EupԽ]+n^_}T{Rު\zb i݄Bt*!3OВJa)BIƀjzU#*؜H-9H0Sh0	AD&G뵐lNSa-mN\0hhq^Sz .؜TTaW)@pASZ07P
ܐhZ-"8"hjKTM%j$a#oO\k,
4runtveJ
\xk^j8C&y>xw~sৗ-D|k:oq/$*+BSHZ&0=z4 PKL'    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP256K1Point.classVSSW=eil*V*QHMłT[HL^Dؕ~_qN~L&="tY~,{y{?G[g[D\->oUa!o'fRqY~9<F╒ZeKsLgf
^.<q,Nd`flh@Ȥ3Ƭ5PTBə3#9
	 %7)d1la&3

wj*5NrTe̶xgNq(2ii,㶬'҅Y^>]7c\%7ɜYcZ>Ȏ-o6wl`C4S"wN|"i)#;Y,ha#9Թ{L->)Oy[l?EzT1IyjH,p3PD}`
c$=keΧ9WC"ٔx¯A*R]*T(ع@'NOkۖRִMA;a~Dh;k[d=6tuԢ#:1tRG3-1Pa7:C)`dWt<exa|:Ч#'u3FM=UxW{!!<E2cd8a?qaZC')ej81q	^bx!ђC'hI+gf(800ef8<ti_ξ\=LP?L?dgs#ɌA{CC_(X$Nz5ؽׯzўٌz
haq4wC1p=cJx|$
â:T~TE"Ke̓^
G~<qi5Ә1$y\$\`ME5Xƫ,yVMLcg2
V-N!nW+PIA:y&ٲ 4	,v7Nన	s>1KZݬ9okxx"(zrD=+dvAVhvc=KG	CV|LZ+DhoRԐ
^,uy^.^ǡ1Qc^4rn1e#Y!f5Q k<r᳭oI~h̒l/Ywx68{!c-qQ4|$G«y=[ȣZE*m@j5v|MZ༅?вEHes
?>DRⲎr^:4P1	3q>Tv9ͅW;
=W6W4Л
X(Ԙ&TIјP˱/%pq;_I3Nau!ѭhU9II~(6o%-X3<R>p4-t*XNUe)MDoRûU[>Tɒc7-]yF4v.ϖ6]~GM}vN>85&	&Ӟ뷓뷙^Yad\
oDER/gi~7<uxw(׆-r@xh<@??8PK74  &  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP256R1Curve$1.classQOPwk1a
&fd	 CbKn%mȃ1}DhgDE@"\v9=s~>aaYzق.UJ]F!-Ҳa
s(c1fYK+IU烧)t/,
wJ/c
n3-{13oTgw\Sd-f767ܑ_[`8U8Nc?7Փ_PQًznl$̅SwifT@IM=f)*$I(
45
.*UPG;9R_9?Nzt<nR!/~"}GdCWp^sDS'^S(
!U{"ո"*TU!voM14B	]ޔQ,C31\F'/.TrJqP;or'6MX灚h֍	k
%n:nJV"[lD&ٽlk=-q.&ޠ]i0AQdڡKb-oc`D8'srOT\NIZj.)qEn/W)!\:yv E
{m]er$S[CǓv& 4ЗO3F.0$F&hQ.{hz'4AH^~]AOfoڝtFZ|Fî-<"74Kt1H^$PK   j  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP256R1Curve.classV[WW$LE.
*V-!&D\5ba f0hZ~j_P!vuvQL$]ge>9gy 쨰	gS4G9XMQVEs(uFl(=^_3Ꭰ7|Wg?(}mVU}`k
a
{:Bk{}L	}7i6DjC#@(lx]b@D(׶E[kk8H_Z8TA?6D}1uGCHH! D&kGK*RZO*	Iw+;,FJr$T&U0$J:H0={uL'TE̤NF%YR4FhdmrtSe%y\IJLd0A-EFJԭMiXTՕ1c88OﯢnTeKF1;dp1Hͮ=ȯ9-MIKc؈%UOsTf8Jc`8H$+\¡MA=y)r&k45cll 3_jl+6Vv*iq4#ZJvI:19lYF艤[QLst0.OI6h<ޚ僽$ԥ3ZJOg7hBI
y姤dF`,,Qţ6yyhϣ<j{o*sОWbzm17;Xw }iMҪw/`{}76J$sͲɤ$6FgIgw0i.L{H?&t;In5ȧSy-g11fLx!Ғ<N'+NpDTJõe+L8Edx4Rl`̠ZPϠk4᐀u
(M(e-;2v0;"Gd8cPS8ZC2Pʰ21N38 `0`ԁ TgdcʁapAdDqfpA/2xɁ^L2H;v-tq(ewFEUUII)V诧<K^8LtCYI@ZPJp[C}R5 a 	K-NZI-\û]7gqE`Zesx.>ť dusk.<ޙū.,^	d3X̸5k_>epdl?emY;cլߒblkI<7ϰVVwu@$
S9|v3N 3XիO6Iu$j$mtqL溃+9&4(
q/Vf֖6]jKOyv];zkm_]F/r?qWCuXԲ%P#qѱkϛl	)Wy|䡙K;?v&d`,eÓJ޼_[[xV&vogiklPKP    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP256R1Field.classVsW?]iW|*kזmI&i" ۵SčIV*KJ$$)(P -3txf9vB&Ԟ;c>3 <
Tonmm)Q@_V 74Mc~
iI;s
χƉ79
6+)}iYDH1w2i	dhż7KAAy|fW 4'xhOG*qzi Uˡ?!abX構JXgWnnP+d-s|6_.z[FMU^8|1+FWιede%.JznE1Uqr[O&=ŋQp+U^T;YyqA}Z@#1?k:B\tW8-Wuϭ(pT^I/zW0Bz{i7V+^iR9zT-`Tذg9f|#a_3zBzg_JʲA/`4YÇ*޳<bE1T^20Ti\]*J5#iٚlػϺ*0!Ќ=:$u!u_XfIDtL}RqN
B|Tf	"<)`D-$ȀiAh`,@'YZ0A{1L<	qYF\`&op.8|@FP$HnpɄ3'X&\+y%WJp	_@D)<Q*V<^BƧ=_3_.XB;jx'p
qi&δ[!^OpbD1X\
{@
{>zZ WkMQu|OKQ7 zi(͘z:Xːv}kx1VlB3c(wPȺ_dMØpR5HKRA~	

?>?;))M( ˏSxP>U$rt!]hTt}}f5xm[}C)Eщ]_<dL:$htCo{[Ԯwj7n
wj9sA,B(c(~닔jY'5X2|iɷl|SjP,;ג%?tJRŕ.bw[Wwvv6/`âmXCc#|k@M̨U޻[l0D~kb;7wKwPE_fٛcRFs)ňÚh8̒f)ZI1`K}%pK5;3q;bfnƶ
v۴--;3	;f37fz^ܹnw3)ݘ{YkRvkwmIXN}x>Rs;%Id.:(0w>	2ӂՃuȄ
$K;a97pow<~2?GѱM[\dR󱔚ܘK"X2&&SU*LR4#yEoјd;XdFߞ*ӷx˵M%;N<,tZ~cWR.hM=1i4Ft^Cok趲+`ĽENj\G$WϣbsA}S\vwF
!-w]~H~m˻:"?6GG ФV>~wԞ\=bO>@U?8nLe8Mz&$"z=MRͮE=8%xHR"JD%`?	Uf|hUCsg5|DԹ:>>,!衹*cdc
a|"3D#D4b:Bh
DYca߇kqPK.    PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP256R1FieldElement.classU[wUt0@[DH rSҊUd:9I;3)-"*>k|җ>fZ^^|_?\ޓi(sηg_N˯ Ch)	X{SHcTˌvj06#1ɰ'Y͔yD:uT^]Yn+G|v];z$H'${k3+в$y6f}ʹ$ft[h.Bzڕf^ȊA6tf)#K1I31YL=kF.c"'l	`}<_X04.449=60)#6
spFMm9Mi)Srifvٹb^XnzZQ$4z控zMט0gȞE|;+-}Fe5=iSu	W5渶)E-S:*^.kkRK
6>D)mmemaqNꨘ9F*gISC%`S<0@vc^]pSY\tfE+]3lقݺ
WPС `]
v+xB{%4-b}K9Ac6\5_m^l}[B˼d=:kR{QZ9r%Pl䕛U$֫hBF*1ch@PF(*614 Paqǰ5TZEkTlgpkU "pPy،~-8N!N	+.0+a`$g3dYp<ɐgabeW0hvb,/|4Sf,K=8r!mhSzGCA&I3
 @#>1q_auwp̡[<Q»? _:FAZγmeFmKxe_<.=V(յ>F>})Ƶy
>"90[O5N6tnygk77MŋԼ[-	1J@ƍ~>#;4t];޼(}6?mMi:Vr;Շ$WuZъVjc;KXVoT7e闫+)A0o!LõoA?Cr"Iz;
WL㥨QYK4-"H<MF<8==sQ7PMK+5<-4:eІxiKĿEPM-B/^ܸ-25~mjIc^_:-*+:l".kXJd3?oQTPK27\    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP256R1Point.classVSU-d
I@n-$T,*JڢFK_Z,
	&3~~ę0vtSk=j)q$={?(tvWvvM:S
,R]d3qB*Ng^NѱRrX2h]BPP'K=J!s*.yg6mXC9+ݛfMgpOў+LJaI"TJ/͗tfFAhڲrPXZ],Cκ y<V]x|ܕ\o|ǭ陭iB;7'F*fcE`Metmd6vvcJzɲ]Jg9dg*e8S&q콷_z7{O>ѳ?}䉞GV2l#KuQMG21W%f+2ATLɲr{x0_!r.nСv
whئSCY	t"nttnȮLlL[紻3 ц;ڔ:rnyomewӮ&uFĽ}7D;Mԙh`;2xM1E3~a&B0Lp+C] `C&xD3`°{M0lbC/C0tƣ:>ǳqa@rvP4c&dx4äAd8A[`0d,a8jAfe8S>j[:TR0SUʧen*Qz=7KO-J tQn[җDe%e4K_`PQii'Bcƕ>e|(
?Q!(1>7XIO.|8?ؽ2IX">=,j	^bɿC`_&M CЖn_(G\2,|<DaP&"V-LH匨gWuCaePyh:E}IxlDv5ƁGCA5DD4BeF'sK,ҽh۱`=&B8jLVy	JؼYӣ:/`_-YlmH)&Fbj%rՙ#$ok}]o"ژ%nq&ڰ:_3qhMsu-U/EYm/
I
kؽ
/Ѫ\.GGP/OoRYrpկ0sL꺠S#{LLs='iל0\>~A疄A!5r54
tД펨'JM]>YXF,::]%%^
>zyҦU/qG!֪W4E%H®3U E
NDTLD˹"$nFF^~	16.c
VU5Gp^
(uC]E<4U{'`^3lٗD \ɴcq#+l|uKo~jc9y.c	59@I_C4PKiac    PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP384R1Curve$1.classNAv"U'J)-RGbLj 	H.0 /LD&>>"YHMg593_}TGYcz1^r,c7jp1"=qn<mO@04J1ם{|O:<:j-`8>M1-P*ccȺtnҝlvxK,w	9Qa\-t漧T8xR[7õݩ
gB
qǂJL
zʝ6GԨ/R6
,48n0pM\gȤ:_IMNRtڗrxE(
Ϋ=pvc߁>:fb&N0i:"&fgL9q\0aI\%9q
8)ll8ZZɝhv\ZAŝb0˵J}3X}{|V#р3<&RSZHN]*igIj$-+ȥVOw;!i/,UDZS)J? Ne7PGewPCѢ-	|MYghHB&a<R@>%l"彮meNl
fִۢ6ZŕerCmQ@b@	[5چ;Y+/QN%
n&D64v&A;PݟsE)3$eѬэBiq*TPK5
  p  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP384R1Curve.classViWW~$LEV-!!ɠvI&Q+
0@4`2m}W~N_l;3A\sz:'sͽw Q\bxߚ ?z>gGgޭj>̧թ$#P8,h(IT3$RRLNb(
#h(;C1ޑbHapBD9R8!EO"єJG#p*CT2x<!K%$Iw#O.Wq=d4+K#bto?NgvVM}ROjHp(IU)y-8AM
R:6r2*-	ur̙]>bQ&
j+ihU(PjASL+jYeX2}`l^n#!M5Yȩ\4\0ƒnj#yF4ӊ8;EP3]E>cshƃu2R!+[*&zTtaM%-Sۃ(-Y %s*v
IQKET{9F֗
_CG*(ǃ^2sY(k'T-^P!crgl.
vcE4>n̢;s:ɢѬ/i=섋kx4c#M<<yxyDxDytm:߭UDΩ/
[淝}$N>/I[
ɿvulH@ES*
x}+&mm_rVv6> tInǞL̥Sqng53+cgL/JYwx8ew&2e'*z~y./)c3q.TeЌzϠQbX`56"-R,Њ=V-@GcY+QԱO:4~8 `+8(@@<3P AvF218(<:acPAƄp)
/>q'|4Ȁ]x+>tcA]`췇[K 
u bQ'¬Ghb-r$&V=,IUARl$,w:ZWqf
n7qSbL޹&q|髱&z7w'Z3W V㷁bc~7w
^aMTPbϖѲ[d/X4M'uƲMIgn!m]Xyۗm&vMNk1Peҫmu4VP2n*q
_yb'O:Ηkp1&O^*Q课nW66Dځf^ho?:t5=G?l-?D7Ǘg\[฿Ո`P,za_um'L$r[*?]%zg-E;głdߪxθC&ӴBk8w	%2R]GPKgd&  [  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP384R1Field.classVIs~ !\4%Ѐ",JsI-Q`$ZlC`DBPr";teEJEb*A\_%e潞ƀ 
~ NGȉcW$&2ǖ3r*422ǰ*̭enn5J{WL,ϒ%ux~#C	Oe<j
'ڈE߉\P*S0$Ԗ9O@?wEc'QLiC,|)lh#wYMewnps|6FRE8F0fP$zR^-fJT0*5+kv:REQիNC*ڥTv库CF/:Zn.\K:NFѩVłs|.-18׊HBt7\%;:U	ʕJVm*jmw-RZ-Sp;SN/8E;U[)g_131|y;wGRS{j|-y1	Z{|4[@WorGV+<"YB~m|#hNznŦ4LsBΑĳdhЯ5E
AZ4}|2boE㾛b=0`A>.8
&A69P<p`T< d,)@Ā`p`
&8̀ð`p%YX$spUP!
":A<L#6
A O\#X%X#p	py<Sʷ)]r]`s{+
` 1c{iy'tDnh@'Ӡ`VrN
|=#,21:!h:wÒb؂gKոXcx?eI~'B#ġ]D Qud?H&l{lU5J,}_:w1M{g1g_.җ0KM%,yT1c2v}L=w'Q1Tݝ؉FcHLc*	y>ăh?}>>%ɏC)(0kwh:Y/Zu8.^"nLp}X'1L򨌳{Z7Doqe.b::=^<4gnIuXOY5
BG0J(J1t^20]3^ʣX޵}2oXóҊ:ZK!uSa38x&ᙦnNbmnE}dvڴX@/f*a{MdNߌRq4t<2pzm95XuިRfcvsJ	
irJ
1[R[)Gۘ.1ciQ2P+5PNhlWP֌Mivd!ظfQͨ#2c]$Iyx񈇼nnlI=iwLCxWlxފm$V6r3dc>Cœb)RzE
du!A),)jkyڿ6q:|0qLwVFf0GFb~c= lįxfaz2]\-*^j_W3$Y[O{SzKF=Ouv|I\%6Lb|Z<Vz뛼LC؃ƕӖ<1=ظkt-MfjZQEp}@cgo7N?U~M:Wf|/Ɂ"gSW٥<p7LDٿb[ԃwbw,CTTB	"QKv3ttt 0	z(zu4rG *uly4/weӒ='RoN>wPK1}  l  PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP384R1FieldElement.classUWg
dB5""qՐqk^.PZC2!	Vޞh_Ծ`7ɩtyC{DNJOs8νݏ? GEA4_%-pDy	he|hzl9d5QEl,

%x#۵j<
gL#o8'(]g\޲qWKJ0g>v>C7jx>-Kft^N9dg
St!3>XF!֘1ѧK.jMs]
]F.wnQ$;]	T2ڤsȸJ	͞.pB!nob>[ݗ-ej\*mzN3;\qR;}1
y	49	NMǘ2(_+/󙹌f;L[9CkdK8}S&m0ɬPUVse]I
j߱,^t3iYUpa=շ)}6rٞ"lE ]@6_~SXZҵ6hfQokmXWܞ
b

RRp@AVpDBCJ?.aKѽ9=~I8ǹ-K|j6nX?%gӲZ4]9¯̪1ZɶbqZ/+-a8fӪhV[pJ6*1<Ͱ~;TE'b:bcؠ"*dH2ehDXE(Cb'UǠ8b֢/pfaxe1B]
,p!0`0\b0Ћ0|}Bx=>j:׭nSmqe.hSڸ>zhy@
	-Y23[ ~J_H1
úYhox	/s0j5
z:Ԋ~/6,Ѹsj	{j^
5xC
؏.ւǉιYU8->"ٷPٕ5zpZ{^=xl$8rp/
n8WFyGc8%zhH&^9q<[_Jx%ֵMtztT*i%bݛջ;[Ղ\<SH_RM40?]¸yؽp#oT&$zRIDjDN
c>"zD_P*?	W\
73U]e2O/Ie6E|DIʾ@ŷKV\eWjJK%ܾ
|I:kB^'R9iJZq7s~߽o?jz^ *-$,z*DŃ۽AUߦ>^ĕ`_DPK-MT[  ~  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP384R1Point.classVWU-ylv!	-ڐPRE>_!,%lﷶJ =~NkwZxI73w~3wܻ_~ItKd3xxM!OLRWq%Tw㍄%=n|1<'L(OL\잙3czpn5;9I	%JF9\:6ϐON67!|vNMR<Y?2hdHI4Y0n++|pWNe3S-N~@>%+kwٲY?H)ϔԿQ68l?\fz*ڹ&Ѱ&tٳ=^Oyj;slv_ީr-3RDݙ.Ms6)G
UE劎{tܫctܯc.I
d'Pw>ٜX]KZ&i7]
mYJtvD7\|̼s븅YhZt@h:`hBnxZ
Bwðbi!p'=w!h
,0dA0lbZc=d	'04&10eb1L2^2Fana80pagxy30<mҔ9<Ëa<0pqY:4XPi+S,BR$4Jofgf'
6- ϟ ],i-җFxgh]īaId*Ǵ>E|>/?E삟Z
g|ΐO~:<GW0;<M2%YV|cOU=YyLJ"B_{}Xx-wtDYD^JGN
s	QI l n5͡y+l^-?ahL s[T y[%Up-J3"bKxW٭䍊ViWsh#Ujj1Pj1&Uq#q5U(-lBqA:压.QF>#fUE|$Z&.TޓRPUgV;%v呒"K"(,mR
X2Dws]5-;_?NnIE|1/2^EDǠ]:vX󃎾5uf~
ufqJ\'6*qӯVolj5Ag,+6J=s+陿O?ŏnū6_D@	>12-AV,x"TZU:?@:䚡%%BB/[^|&ږ7H>FЈpo^B$L.+
DaV+qE%D75qdTSTK&
Z8w_JE&,k\G\
`}t7F4aޢVM[;1xHOלaL=
H啛k׸~zpK[^F4[?KJECқϯ
߼㼜-UWAH)ͷ^oPK<a    PK    A             :   org/bouncycastle/math/ec/custom/sec/SecP521R1Curve$1.classNAvUѢ RX45iHzacbDh蕏#YHMg593_}`ފ2Joj%x]7
FHsםmTUqwM9>Ñi/mYO֗)0f4P]榝o<k9anN{-\k]ws4P(EJ<xRwnՅ=Sż}߹._ʍqZL
Zv-ԗ@mj4i80rM3dR3˥~^T).EWСW+z;'}Feomp18M3:TDt4!hCь:8CGw8L'Hq
}-G;qF/Rrf8ZnX¯93zn'<#s_d:<sknD'>I_a I▒ɣхIR!ْn_E.ݿ|o!
8H0hULHHJ#Ff7p##G<-*Ѣjʔ03eX.ƢEԌfL~bjSY3?6#1e^ثo+J׊Jt
Jkr!!4џO2?:L6oNZۤSSM$<mlЙYG.&GuIY{}k(2C#.~[Ҭнiq*PK)K+  v  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP521R1Curve.classV[{V]1&P4S֖ڎ%K%iP%18Rp}ʔ_:vN;/}(\oK>i!&.Wֹ쥳^g}ſ XZPcq!ji3Z|:%gPtm/%QʤTYʊyUTII	9ϤZHdF$9%fyI"&&$UdE)%eDUɩR*'LRIŔ,ȥ2TQSŤJk3VLgL"%,Q{_!#\>%kIMf圦(	1r	)&("y
]I
,g59'g		A
^Z*S{{wJ6UP&)O4tP=yaӝ٢9zR=R$S+]O
˸`ujgug&nqU*fuR!7:nf>`{Mp蚨8#5̐Ѩږ4j&lS5*-ökT=w20jeQtc,Smi'd\ L=iZŠẩ=+WKcNE67r"=%kE>4:qh/ 8ÕIGxlb[uG:mhL&N8\nv\b4=Sl^hPlח
nߞC_{?TdqTqbYT֤=ajl<Ш!zcnή9u:+cҪ^mS|^<xx8'xy$x<<R<<2<<r}^M{wAzecnMI˔lth϶.iPh5z0x`enִi+:k>14mOr/ga%ڈzh>^UҊ쮠ϵpD|KpÇKʫ/l&߁8mDp[ЃQle0 a`6
aB~ AEO(>'@1{¸G;@`0f0à43f"a18ˠ#DA	/F,18g<1Ep>ZT㰶}sA
U,TzݤOeG7нZ*Hی^thLud#a	ߣitR87-8n]
_p9-?-ৱ~cv
p#؂~{)67|.Ón<nksp6u;zc(ϲ7HI5W$g[y/*Ї
//WOyd_k\w^wH>i%VI/op~>'m8_%OajO
t̄fdClg_?Qy*o⷟b'y?Z;B=}n4.⭫\/ͣqә/lYڽ=Kx%DV?}&ƖmM{[+L,ԝ%m_@ŮUڡ
yiUnΥ?PK#U    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP521R1Field.classVkse~6tl(7IBB6mhV(B)BQ&6nJ)+V#~Dg40 v)ysn/3=L9*!IPXn'IB/k-K7%=3W 9@$ڳN3TWtCɱ,{Q.AB']
+JrI$fO%SȽ oiJ0ܽOB`,@kY,a޶
9JUk
SVUbΞ52m*T-!A.Zf]:QLgK9۱&YgCS)QFT7|dΒRU%N9kfʦ=ɏ_
bfՒ39uܴiJlj#S-!Z.9N%P(}^(wwg+ '*8kIZĶ89ǪIT'3㕺]+5bLT*d
S8=ǻ2q$~j^P9̤;¤ʙap2zR]{V^®гQ*M8+lLZ*3bNqcTZ}:Ur."x*ҢN<IO)/!
Qݘ|foq	
!a=$
#5t#a4dxkx
Pya+5$i8̰-2h``$41d6cḆ`'U<QG1ZbpfUqEg229&8C`1L0̨FLQUԮC昶3j묟ph̙slQ>C5)I>r%cZ
	~D/B[m!H )#{)]:o0'XǷ[ؤPmϱ:AJɵ'[§
)&yD'!e<}q"DaqRB\룈!(GtGTգ
n|C
#0w $(8{	}B~)Z8Bl%HdK+WXKŻzۋǂ൅X_RE/%Ocm"gj}sK
\餞\^MQ<[!V{
UoMR6|nVvtfJ~R9QC?|7<J '-m#.ng^^j;7`OB
rwZ}N&Z)<ϼw`3MGD\캓A7lЍ=Cyqt>.V|jȧ|d\j*dQ1TfƲgY64:$^lttۼs]Z}	=/^~p~uzڄ՞Ie~ԇT{A_PKUdW+bDڈr{R!g}Aǌ7p-68uEnAĜ
>j<cDi=zW=-tjK+LΊΚ.̠102b)PKf@    PK    A             ?   org/bouncycastle/math/ec/custom/sec/SecP521R1FieldElement.classU[wU&t0r\4I
E@nml%ږK+Zm29I:3)-^@3⓾o4K⃿Ʌ=J}2;{}?}206qTB0֗%bikex{lTPF7p
ϊUVgU{Fn}
錄	޿w!̜ #l!<e	OpGwg֋f"t[h.ԜЋ91چ|Θ3r4%f˚Zbag,WMpdxk9a\̤0hXs#6B%b8Mi)SifrAX.JQ$tzΤ	ʦkg7hSbtqMQ	=526Gw]Yǵ5)H/;nrlС.guy]NkfjжNꤘ9F*$,7šTLjSr+5pTƖHowN3ˢFB]v{
)+W𴂔=
UDss*{Qn+Lgw-7?=$ac-ΣKo==L6˝lVyX)تɫTt=Ubǰ!V*b5*CeZϢMFS$C C7*2ǋ*%1bUt+Ҙ`.Fp/3cx<C!A4,ΐc3oD<^cxM3a.A>zjƲ65t	N~iL+MjYSP5ҔJRAɒ4nD>E}#H _L܃&GȺcS%OTO(~G|	_F(H+T
zC~MYcǣ|9j"x:G4p8V$
n.+sn8>`_C\*@=3t"FW
]?d|:H'9w>SjYFiiWI4
޽Tr	k7⌯7Ӎz
Xh\BךJN^nk]u;+
cvv<FN4W!':m';P=mwy^qˉO[iJ[+Jt3H_V iF'pOP7ɋߑPp<V=IzxeawO6Ϣ[Nǻ׫5J\)C%@vi?{B NSPKCl   u  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecP521R1Point.classVs[]JW˶,PBȒ!HL|lVm,
@?-Z-1<adϼiz-'3~ߞsv쮿Wiir9
Tn6
AVrAj:ez?E1
FJf^CXRrqҳ'jR8_ݲ3wG%\<^v{/5ᱪ8]%gwʠШ=G2Pt|aQCoژ+;jQpOԪKS65N\j竍/U'Zek	R˄"5WIdj
c}M?V5_p9FS.5niL} gskq.mggS2?E9ptF]hH)0yh#e2}ЛӾ=_9`͡pFo-/G\*@]
199i5wP%tiI֑R*P)dAm>wT{~l7n4p
jaMU?r #23*Ct'rCԮ}%ݪoeGGj%wJ7?K_Ĝv{?#qc66⸇{mz	!lc41!|626fA6eGm$CC?~!Lí`fecx8b8pᴅ;0oN<P`(2pgsÒ,*UwqsO0<iQIZSb5"e
0L1L3<@f?9DH7TD9_S<=2Gk

>@0^￀=!u8::qGdkh&ޠ_5IxGw;DGGY?iRk'Go~*%ja4:ɬNYVFY52&~Z0̚8Kaa4H"n٨}ƄA	s!IrEV
x"av)t]^v sgz%Ktl[JQѽW(uDXYEJ5Xn#*?I-I)z[au9+DBNF-2{=L#>FYߐ
}mcyL"r	IL^͎9S.!!DX?d)~H9Bfм50n;]=d@vŸCJѯ؃m⚯7t5j|٩ԑIw1ϼwLNюFo;B9*(a()UbeJ[\֖Pº.adC@C2 ﬑=E~~YŤܺzep6Y~2̀weY&FExL0\DnnrkQȒE=Ghˑ6?
$ %06򖠛ѫ
ZD+&^S8`:#yum;ػ|=DۚBAO`+0n/!̎Yoǋ_lo|' Pk+sfO/QosmǑ$8?yB\G~:3x~|.>BO"?O
mf'B2Kn.PK"Z  v  PK    A             6   org/bouncycastle/math/ec/custom/sec/SecT113Field.class}UWWJ&C2$~0:F(X@ZR@C 6$5F]t㦋veNiWt?eiKأ
{߻ݏϏ?a 784Cjf?434EDL{F$x/r\¹|1_`ّq&:VWjml	V}l͕mj n ˾eWFDʥͩtjeW'aֲe+'ͭlPoxg.l׬2҄|]hKfu2
Vqݘ.uPu/Rn3W9ڿ韥IJ-RyX)ՊzΪTiU7;gjjiӨ \st]{uϠۺ	6gɉ]wK+,Q6UExu@;#ÞV[ՊZw	<	2x`vJxϱ+"BR#"-akn|샃o\AF2'qXp Dށ$b$""2"qA'$&`UH̑'!I,Hp'1-J0	H\&q,biuTTbUClZ+]f .``õFюvC%ut[=?P? ΰXԱN&is|Gz=kM0t#DH^>@)dt
%jG=:lht!X.zR5a{GG:݄YMo7ѯlGTSYj#"|ȣ!7E8	0K,
g_A'8w|Kr?a[(7p
aÚWo] ):WNw}7e}.ح4|JQ*y̧:qU(a{&3&`R͠ʩA%ZGq8&


*в.O"[UʩZ	UrTI	թ*;~5Eh	k}mc2A9oP)nv2xe<$W0&ܦTPO`D^XI4GfPg|TDl=_;~}!Q:11'>9Eݾo@I/ۓ_Ah|} O߹oGxڏw$LQ2PyE;06)|L_3DtZL	+9Nb\fq<j(..Njȉ"9d%1mѸ֍u.ACv1djTۄ SN#4nE'K@kxr\_bQԿj\2-WhvHDMvP][q'""&11dJZLTć)+'"Hݞ9e(hFV"YU)=|\zIbUv -TA*S%*}WÆs&؟hӫX^XPK1  d
  PK    A             =   org/bouncycastle/math/ec/custom/sec/SecT113FieldElement.classWWW
Y&Fk\ZVCFEmE
$HڊvH0:VmovQzN/?"ps~wnwNP@ Ol6g-9"ɾ>X+ysFĠwT]YҰikU--y4~#BTk@3Jl)v
XUT{f,^괚&WT^L5F.{P閒QQ,;ڠUʖ9Zhy͑ $֐8Ll9򛐵CN	MYh9ѝ>yTM,іv99|Zg}ddg&L#ۤlM$+dNj®ڕNWtJz2r|!lׯShݖ32\^Oͦ>M)URn}=	X!sKטiQ,{+=ew,NM+M.w{TP'
lbPx%oZ0YAP;yL5 9ų7iJ
2۷T[XxGbqs氨-;K#`wb)uP#&YQ)_
3t3ӲWiteMM7EZ$ED;E<,b"xD@Ct(;&GÖ꙽tgu.bH$_z~ǖ+IbD>]1nܞ_{=$W^0|(a!x/(!	qX% $	
aC'>2Gz!S6	8gG,SpRBN1Bt< fCHb,#PN3a:CaadgC~/2I	a&P%Yb{פ>]WnM6MaKNIʓ#򘦠'o
sIk"=	UTnߨkHշs\v-aUэUQڮ}k2H:VgYP*aˬB6+^pI@g\(9[qe<^b(*3I./_^\ `O=8k7ϛ00V;OmkrssQjFjN޻-7Ω&Ԁ}י/w:
N?vWIR[mSVbAuvZ(bw"ވ/(?"
"D"L"\ߥy|RKq.*/w*N::["=.D*@}
U{ݪ}\5/]dSue݉i{b7@WZUIݲloTP)uNXW|m{2ؾeoW,/s#o^{`c56ښmcM4cU<s|mzҫ }k)@ykICNүA\PKN+  I  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT113R1Curve$1.classNAvKY[AiKa[>
GbLJ e
ۮ] rQ|
cLD&>Hxv9;sΙd@n2㉼70Hă9`}(-Fw'u]v[:f14n1Q\\z<PoNŲp+{ʂp24
ߙCi-hsRYs1VNAv{v,;ù82A_N	}:S!J%9Ed&d-q}Oj0;+8w2=$S(Ԥ27Q&a\qS ZAs
Y39;(½Jqq"꣓<w4>'<'PLE-B*꠨
""+*TUt՝:"h@<F$#hB;uGh#$"șg˺ap
</3m!Op#,Zr8}5JU	F.4@=K#{2$D|yZkd2mN*<zEA`^jϣw6tĩ k|`V
f{14mY}9
fñT,PtLg]յ0{uMdr6md7=IRӟIl߉Dg-.rY\%Rɳ<0B=9	O-wtM*f>~6z]"}ѿi5%j.~PKV0  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT113R1Curve.classV[WW&I QJ\!VahF00f03kA]]oG}g2R$Y9{s}.OHk?gmyޖ9xY,}Lg'X'?uDwLOI=bOFJ%{E)ݝN2=`Hb=d<M+$C<7+ꕺSJA5ppagNd&&/84?Js \C"Fq6:eteYMFek.*QIhjaZ*n`2(i>RLB)**ATY"bi˩$JQ-U95'ϨÆq0.OhⶲqL^:khAVcZYEMᶙ1?fuKUiyaVlx9m00V)6Nǝ6D3XFЯ=\'fP/j1E㨼k۪*iɺerWͭh\LHgnc;5E)15S\<Q̱jImZc9m}Q^V<p`K
QUghFO|htùeR\(3tLyQ\<yt8####GG7aӶNmrsM	iYcijWKvCIKtTwGrZng`2vz
XqPpլ85J+.UIBnّX5\w+UIyۑ@N
M=	8F1,`7؅3؁& /~&"(
Y{UAhy噘df 'bBab	5cJ"f0τ
Arab!S0* qQtsNłl*=9KVG)Hى8|x1B}d#~H~NLGBWC{
D֑G8n
z'}|U\(])[RU,FBUn-s7Bݿ5|p8L=?ض&Ntߴ_#&<p;t016Ul:25A<.:.Kɬ	$B985th
W8sv7r+=3os.wղ8SqcėZq'~j'Zs޹<ם5ZñMK>wC.,w{
>~_ǩ|ųhq*2wRO+z?Ȟ_0w߁IENR_A{@ >xPKx܃  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT113R1Point.classVms>ZR(o.8P$$n-lxw@
-o-K/L4_aN<{Wa3Ԗ{sssշ7(?xFSn
B/ͷvUTTvp*3ӳӨ4
%vZBZǻcv[gMzk7sYu<U'80圞nvrQr<L=vkym9	tbq\R	b7Hu&oןdo]?c8^7;=gٞ^ީlrV퀗譶״e$w
3L]dm&2;r<N5^Z͊I49ȉȇyHֱ=@F
;r
?82[C
)osﲯO5[{4W4_k[s޸TTaJjl|u800lvdWK6@Z]@"6vzJ+mI/;566$Ӥ=bF4ATH5i?)& :dR7)0C4` ygܤ=a]qAIq0t8=e>zڤHϚ:S4EGӀ 3=Dcg s_ xk=LEq	I)27M+ f , Eqi2-͢NqsM7lw/
啓?R,HDTNo'-(p><uzGڨ'"B1M-+]z]CSo2235螞yU2]j~Jz%AƦ,U]jI_-0)I4GĽfq=xc?G^b샅RZi}Fz}mP6(xl\X3v(߈ru~
K-${|mF]x[_bKoYI
҅jBRy*mR"	+l
Λ02`MZ
iROkFHJ^ː8?qEA~Ěur0
"/
;b {3"#Q	%aۥ(G"PeE.neĹrIB^6l uAđCcEMF|bT*1=y/:8
tFzoa25rGnX$oRPe-VnQ-n,=`ՓTq币-H8nTp
?g
EQ8?;[ġx>)ik"P$$k|¸RT'!B^F=(R4Pl*
~q`JI0C%v_p@	0)Q^Tڤ
3JL،Rυ哑pR
Td0b
5.<ҸdٻdגɶUJx؏M,*[Y"zZʒȧckVNHDB@J'ɼmgio	P6z-#-bxG(|Y9@oNw:EI=ImZr
cٿfOSû0pFWZ8[Y/pY[1w>}d|+I"RPKgy    PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT113R2Curve$1.classNAƿiw.ZVEiKqR
@Bba;mn5zQ|
cLD&>hxvQ9;sΙ~{2 dsR25? 'HQs00;¶,CXwD%W-MN,_4sʬ54,	gC;sb8oZKڢltn;ܩjB׮.ڎugqLЛc5rj¨.\>2u+?;4&NFRBm	z
Qm
VA(gfWwhw('YN}VKRQ%R~^OJQޝ"cρ{Wx8PTpR]OR)pZEgUnA=tΝz#8dHGG;F&HEP2+ۇFaڵ҄pfA-7*ܶק-8\3}5EU]F]h,q{iG0D^YlG:-ݿloiQ;T+yT2ڪA8-d1,JWp#&ǟH詇Cb8W0oiIv$T5ya{u9^n~Zet5a{;i`B
L13b_Df.J?YrUnWovmCh߉)Zf^:4F*ޣf\!7iE%j~\"/B~ PKv  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT113R2Curve.classV[WW&I QV-!A&D5a0{_~Cۗ>"vuvDH$]`so\ß~^4x!x[%/qpy̏Y?$h_&{=H&H*#Zɞl2̊t,ٛӹD6C9>r'\\R5| ;;<尳Gx*e/8>fqqxx$C& ؠ^O$KYR³9VpV̩Ji2[Rf<J$~Ih' \5E//(Q֧$ܲ'	-%veE2Qg4QiDU#9]L¤"J,2
Mٴ:LeZiŴe@ü6XY4:ۘ.jVRb=,Chj'JLTcj*84_
SQiֶ U5Ô4ి[Ѯg&Lbmc5E7L}6lPl=x#1;xڣƲS$h
.Z
+ۗe#|ZN˘˦amU=\X2LJ/Hyexu'37*G3.GxyDxDyxt˃ |6Qǩo)A4mW$iavcimpna7d{&jDgm${j8`ڌ:pkfUIQ-u+X#*[eGBrݭT%oGF79u x6  (lǠLfb
hebZt`H@Lx	0,UPd	kWdḃ}MN
&.3!11$'1U?DL,(e9?NC#kL\G%ΡB_`8>kRKa(h7LIzV-"Nbf'q]j!90
\UZCU|!,vp*޺WptS.:gEP3?+X<+c;.aĎLYtNWm˃CqZ{~l-1eu4#GLM,_g-{a*ml!¾5䊝xy\]#ؓ`E<vzvj%(.j*>qm6wnT!{ff*Зkeѹqj{)}Uc#ƈ/հE۶Lxqr&΄ų;x7tZMi۠5.Vq6M<Npܟ8REFm!.+|z	wuW2E'+]TXc'%DGPKk  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT113R2Point.classVms>ZR(o.8P$$n-lxw@
-o-K/L4_aN<{Wa3Ԗ{sssշ7(?xFSn
B/ͷvUTTvp*3ӳӨ4
%vZBZǻcv[gMzk7sYu<U'80圞nvrQr<L=vkym9	tbq\R	b7Hu&oןdo]?c8^7;=gٞ^ީlrV퀗譶״e$w
3L]dm&2;r<N5^Z͊I49ȉȇyHֱ=@F
;r
?82[C
)osﲯO5[{4W4_k[s޸TTaJjl|u800lvdWK6@Z]@"6vzJ+mI/;566$Ӥ=bF4ATH5i?)& :dR7)0C4` ygܤ=a]qAIq0t8=e>zڤHϚ:S4EGӀ 3=Dcg s_ xk=LEq	I)27M+ f , Eqi2-͢NqsM7lw/
啓?R,HDTNo'-(p><uzGڨ'"B1M-+]z]CSo2235螞yU2]j~Jz%AƦ,U]jI_-0)I4GĽfq=xc?G^b샅RZi}Fz}mP6(xl\X3v(߈ru~
K-${|mF]x[_bKoYI
҅jBRy*mR"	+l
Λ02`MZ
iROkFHJ^ː8?qEA~Ěur0
"/
;b {3"#Q	%aۥ(G"PeE.neĹrIB^6l uAđCcEMF|bT*1=y/:8
tFzoa25rGnX$oRPe-VnQ-n,=`ՓTq币-H8nTp
?g
EQ8?;[ġx>)ik"P$$k|¸RT'!B^F=(R4Pl*
~q`JI0C%v_p@	0)Q^Tڤ
3JL،Rυ哑pR
Td0b
5.<ҸdٻdגɶUJx؏M,*[Y"zZʒȧckVNHDB@J'ɼmgio	P6z-#-bxG(|Y9@oNw:EI=ImZr
cٿfOSû0pFWZ8[Y/pY[1w>}d|+I"RPKH    PK    A             6   org/bouncycastle/math/ec/custom/sec/SecT131Field.classVoI.UD>edײ9QeÎFnW%ѦHl(#t@C^{@kVR&ryx3{˿$+Ew#$M-_!`[R0. `!d4fC/.rL }`ZVW[ݵD3t2+W`ee#ढd7ZXWjrc=iZYZWߘژt5BjLD(l\n-[J3BAjMHnFcg+,ZZC)*}yJlއf=xNͫo9Ze˫i!nڨ#22{pWgsrrjgkm;Sk5v=;[J
՜SSkЬU'XW-{ZPfec`fmuJdEj X&-{|d
>J>`5^t/VJS**T*L-_I+թTA&EF)H2hdr:i#7h20U&L&A13tM1E+1zmZe&eLL>b F>;Lh>`[Tbm&8qҍʝѨﵼzWgMZ~z
uEWh"t nf<2SpC>ZƯa6)pM4VZQǎ:RA$ǖɖ2PoĹp察XP,űF:zYJrp61mXdnBbh>C GepV
su#Uh}I;eQ^GT-@gpj4o2T'MdQ0v?T[Qi hX UH6E_njyZ=yTSFHIQ"|SGLe|ٲ`'>UꛞM_9elG*{5mr%l˝jh
7&$3n̵]W):]Wc"4vk<fkZW|kE(J5hV]am	CtPR4{+xH8k,J}s%v(CvKֈ5O~t,ۤQ}n v:\9lf\َ͙S>+vl[zAb]ZD58B?9QϡAgyoC'6w7l6N.sUy9B_?NO 0(p,
jz&bǿCw}hJ`܄7a~{K-qVt,gʕB)ͳ S=ݼ"E济|{,M4E|KU9<Sn]9n*ytuܙnץ@ Jg%BM[fe-33zƌVfP"1ehwH";Θ*BBEiL0<þX8͘bp X*3:ھ뎊]_uĈC;1%TxvvAQeGmy1))P񅶸 r](lG}X˒#ءilpŐEQ2_GTl 'HjdQ6@a珇]@|W2]Q1w1ȯc*V8E1XS	:pxpfRmg<̛|TY4bFݘVMcC2Y0fpegcd?O0NOcBcϓ_?;4#afJr		,\]g)rL(KeK"~&7DGm6W5~ķwxhnd_;ES4_ZRtoi=BPKK  g  PK    A             =   org/bouncycastle/math/ec/custom/sec/SecT131FieldElement.classVWgL2IՐ#bRBEYDbC2I3hEbm}bN=K1 p9{}w`; j87mQ{ Dtr S,yԖDIvw%Zțs4"-ߣfUsږ@TC-]<(x^9E?Qis%uE6ɞR'eZ+yY3<sv5ݝ5SbZRTGCͶfrK׃*Gq]1)j.K.'ۘltɆi/q^~5;&yT
ђVq\sD/*<)'49Ntk6=PΩ2^\k29(0k:M{PmPs:[j6os|kZɮ?KMvsNO'Frlr:IiJ1LtvX΃e27&ɴn>S{d0sAYyG܂/|R&d/ioESJTD4~]vj:cgod(*wo1fiQsA{/wFȏX`fjGP2sTQLLLOZ^і55U?h&-"x\;E<!bV"=w䴒4wCQi,1MGw-Y}t$Y,fg
?nyQe-~}(l}ynH HTB7j%<A*$p AIh
	1M$\*THȰa7^}O2J	u!Pg%q	OcϞ`L!hI	8 a*0$Cŋ!!a4C!003yI!r?0FC 2f0΅03yԅOԝ*z&B])'C򈦠?"D禓@z^UmY\rpcxhO~,7+Q(1 R|l߫ɳľ\ςr۵Y,VxԒdOϸP]qat(EeF
3+!xg܂|(Ϟe{^6cV9Ƈ`׭uIζF^; HoS*O5ؗVGzSX	)7Hanc߲$>Vr"%oe~*^[}q[7ي(@X¤~EKZ@8XI8XJ-.066e5E۾%vI^cKgChw	MH>l)gUo
o*rNbI<of_V_sek,<{Iݸdoϯ1q&8{ycޙlu㻹ϱ/ze13q'7ބOygx ;[}k# }!l?R뙢;>=Vd5PKeU  k  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT131R1Curve$1.classNAG[h TTlXC`R`؎a5Fo4a7p0|M"*69gg9̧?ep2U)= 'oyHQs00y;1nq:rCİwE%pܨ2+-ka43Á`sʪ5\M`sAnOcz,{^C;):w0sks-u	ƢZu!,|_ZMQSԅGһ̛}RGi6Or7?KrIM
f)${PUUVѬ∊2a}3GDRjpR\h/C!/]z=+}pFiw?p^M=]=(
ǡjH!
Q=O
pVC5h舢
tb8d-HЊnoF&SHEP*ۇFi9pVA+5.q֧6-5]n,L@MSՓtׄq Kܾ%tڑq!\"Dhm
z:\{
:z_
h
O~oЩ4_Q+~]:T7~ADɚ00Ac2\9/FBn}*Ug=PH",/) YT2a6>/IʒLJ:]GagN EESqXľWb#ѷX)/V*W7y+c{TND#|َp
4oG	O-ytM*?V:<!oqq6A%j,ȋQ6?PKh  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT131R1Curve.classV[WW\&	V-!ad D8 ػ~
m_PԊJյ}&*t΂}{}>䏇?
 }A𡎃+ؑy^f17O?8>?6?RwO\퍥tRKHR'z3hLdJǿHTD=T2{bL)tw2{1L4"=t/1*s̙p,rҘGŉT&?IFFFIT3>!4>dgƂ,+il͆U%< e405PPT:JdYQTl<1I`誴P\T)DŘ(r(QPc~9G)J2iu0,̏ɓڸ$nqTŘRsVQShch̥n3*fT/ZZfi2i#x<]J:˼ivyژ,h
y̱s\tY^KHmC^TMK-Jj%DҞ4"q8jV `Z\ؤiNUX=n<RQI5VvZ_Nj[d_ò%&i>`i,S5:_QLy4z8lZ*_4k.sM<xC##NĎ*Nmlk-m%Y	cOsh
vlWkv[+FmדLtVVGr]jngPν/XfY`y 8G*I/S%M+Y\RmmEbEvۑ N<F{ (4bHF3g0:0,F|C@ЇC	2Ru632G
~d'&#dDad5eJ f#z2| `UFB4.ӣfPW~ϳ~du]-J4Uzr\9#nu!
qքIFVWqm:ǭU\D޽ ke&jJU,PwwǍV:(D޷5|xhƖ?زf[Nrrݲ_vk#(^uSnThGL`1udk<G8GFyBikAsX<{^lx#q}bvsC)ڟy˲6d+p(>ۼٟkܮ6{۾+"}|+=XVw>q1Opoz}Vn(jjq|TMص>J*Aj|&U9#V8I}It'54>sPK  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT131R1Point.classVms>ZR(o.8P$$n-lxw@
-o-K/L4_aN<{Wa3Ԗ{sssշ7(?xFSn
B/ͷvUTTvp*3ӳӨ4
%vZBZǻcv[gMzk7sYu<U'80圞nvrQr<L=vkym9	tbq\R	b7Hu&oןdo]?c8^7;=gٞ^ީlrV퀗譶״e$w
3L]dm&2;r<N5^Z͊I4ȇyHֱ=@F
;r
?82[C
)osﲯO5[{4W4_k[s޸TTaJjl|u800lvdWK6@Z]@"6vzJ+mI/;566$Ӥ=bF4ATH5i?)& :dR7)0C4` ygܤ=a]qAIq0t8=e>zڤHϚ:S4EGӀ 3=Dcg s_ xk=LEq	I)27M+ f , Eqi2-͢NqsM7lw/
啓?R,HDTNo'-(p><uzGڨ'"B1M-+]z]CSo2235螞yU2]j~Jz%AƦ,U]jI_-0)I4GĽfq=xc?G^b샅RZi}Fz}mP6(xl\X3v(߈ru~
K-${|mF]x[_bKoYI
҅jBRy*mR"	+l
Λ02`MZ
iROkFHJ^ː8?qEA~Ěur0
"/
;b {3"#Q	%aۥ(G"PeE.neĹrIB^6l uAđCcEMF|bT*1=y/:8
tFzoa25rGnX$oRPe-VnQ-n,=`ՓTq币-H8nTp
?g
EQ8?;[ġx>)ik"P$$k|¸RT'!B^F=(R4Pl*
~q`JI0C%v_p@	0)Q^Tڤ
3JL،Rυ哑pR
Td0b
5.<ҸdٻdגɶUJx؏M,*[Y"zZʒȧckVNHDB@J'ɼmgio	P6z-#-bxG(|Y9@oNw:EI=ImZr
cٿfOSû0pFWZ8[Y/pY[1w>}d|+I"RPK{K    PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT131R2Curve$1.class[OAER
*J[
r)4"H]@E501L ~I""Q69gg9>5p"Yi)e3ޣrT)E(78L!b؂"7yn ,kq]>g
`s*U\$_]P;UZ@gYKzE]9ǵ8n	ƒZe!wJwٛ%aΏ,<cdNe:nIY|E>-HjRh0zBUSQN)2v|+i/$
Jq	"꣣'tġÙ5<G<GPLC
P5qF*=OAjy
:ІtћhF"hE7Fi#i$"['G*i9¸p<VT7!Op+lZr85AU	b4@}K#BD^Yl}mzgT&-B&<EA`~Zߣtnĩ"k8[q?֧|}E}2q)&z~){kz˚䬧=[mWvFQT4џw4Jl߈Dc-.X[\%Qɳ:{<޳ BB;;$	O-{tM*f?^=&0ke%jm~PK<  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT131R2Curve.classV[WW\&	V-!!W.j2$D8C
3`7}C}P+*mW[Q_lLDҵ:9g%<W Q|A
E["?ޟdMH*
LGCtoc}d)E{BX4Dz@RJD4.bd"Q1O yR:	MqؕMHh<<H3YmCtĔ866>DaN%M^%,(yɜ*r0%U0*(f`$ˊatRĘ&\5E,JQg%ԋ\g(UY_XG9쑋d*$)YiV+	i@;qi鬮j&aF%kU;f|Rg4S+^+^V]!zZfY2Ŧ=1BmLٖ"]˜~qZ.
EPTrYZHmEYTQSLjjeD{ҙ6"s8nVmoKd|РiV{y]jvPҶ(-G%:nP)j!hl_)/M<F{8l
_
%el59n_=<ǣm3:]5ֺ[DfI1G&][ݖY[$Q\9Tj׆Y9wzX0!1ժyTMiJT	n[X5.~? 
hp-1"`#ٍ3ىV]#F'	Y{M!diy:")/xˋxKHL3"32È	1ryRgD󑃂TfYt2Hчa>ez{<"*/yv)E BvC֔+g
!ҭ dv	`w<њpACc3*4@3nM5XG&5|Z9wr޾Va:61m^]@^ywVhrtzxhǸRd=8[Ç-
m#4ضKj][[+o]rӶe00]'vL]G:׽n=s{4-D{GJoJmFV:+u9[qBw:G%ї]

"|R^ڐ52G"[BxhpϹ~t:.Gtku_
}`:ڝ?u:ڝky{
{F9OoPK&6b.Vʀz>`waP?b]ԗDw&gN/PPKjQ  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT131R2Point.classVms>ZR(o.8P$$n-lxw@
-o-K/L4_aN<{Wa3Ԗ{sssշ7(?xFSn
B/ͷvUTTvp*3ӳӨ4
%vZBZǻcv[gMzk7sYu<U'80圞nvrQr<L=vkym9	tbq\R	b7Hu&oןdo]?c8^7;=gٞ^ީlrV퀗譶״e$w
3L]dm&2;r<N5^Z͊I4䉩ȇyHֱ=@F
;r
?82[C
)osﲯO5[{4W4_k[s޸TTaJjl|u800lvdWK6@Z]@"6vzJ+mI/;566$Ӥ=bF4ATH5i?)& :dR7)0C4` ygܤ=a]qAIq0t8=e>zڤHϚ:S4EGӀ 3=Dcg s_ xk=LEq	I)27M+ f , Eqi2-͢NqsM7lw/
啓?R,HDTNo'-(p><uzGڨ'"B1M-+]z]CSo2235螞yU2]j~Jz%AƦ,U]jI_-0)I4GĽfq=xc?G^b샅RZi}Fz}mP6(xl\X3v(߈ru~
K-${|mF]x[_bKoYI
҅jBRy*mR"	+l
Λ02`MZ
iROkFHJ^ː8?qEA~Ěur0
"/
;b {3"#Q	%aۥ(G"PeE.neĹrIB^6l uAđCcEMF|bT*1=y/:8
tFzoa25rGnX$oRPe-VnQ-n,=`ՓTq币-H8nTp
?g
EQ8?;[ġx>)ik"P$$k|¸RT'!B^F=(R4Pl*
~q`JI0C%v_p@	0)Q^Tڤ
3JL،Rυ哑pR
Td0b
5.<ҸdٻdגɶUJx؏M,*[Y"zZʒȧckVNHDB@J'ɼmgio	P6z-#-bxG(|Y9@oNw:EI=ImZr
cٿfOSû0pFWZ8[Y/pY[1w>}d|+I"RPK8F    PK    A             6   org/bouncycastle/math/ec/custom/sec/SecT163Field.class}VsW?[*k+xIVpH6#%GjQCxf(0C=C1sw%3Z9|޻HDY3;1RfyXcPg-N4ލq1	Yu0ؔ(ƕJuݼwW"C҅KL/jﮬ>@N*CdZRm]J#Da`_[Z??6ۛf4bdY6_XmDJmVowvJSd~[m!pľ
0toNۮ=MVػ4ww~m]VMz)3z
k<zT~y~{͹zc}T߯UZY
׬{*9M{.נQ
gxV[yk_E
>eS)7C2._ب>O#Ƥ2aGPrp$*|GuNy
:9:cYx[]q+!ũL	IRbI@N1H$)Ғ%#Id&)GVNR"I09ä4%4,1Z4mћd[Ln;LV|&?`.{L3Eߦ2}~d-3Ya.cAnQ^ӯ5}њ'K [ȁ(wib7@W(2Ta^5/4Jh!
ƋBun\T
(Ԃ:*P03\~aQ+h1茌:F[Amn0vku;-;0Rx)#H8	G?j6\c>.RH՞24Tp\/S<"Dǈ5Ob/(ؿi'{?FOO)zs3zC/ [EtHb	I>y.fD?S3wB?9<N!$|cQö2\p`lvk;S}5R=ѧ*mwuK:|A:zXy,`<@xK
M$D:)T4asmIz9C(b;KY
ΒvB;mBlfH3Cl
2!
1㥜HuDJU
ZRhtג a)0+dՇ;S
.b*FC
g2+M|ɓ+DPC@m1xjn.o9PG;ʳ̢so.K[\/j!azxxjhuHZ'\@mȖ{;bO?[פP
nC_p_O xS^翔1=łb-T7
ɧgrC&
aQ
گ1hݞfNȶifNj=PjGUwO~b3y|y:G`'ZOGhi:t@8=g
" , b{kC2	3ci=3$t1UP;XvoX"ob$ci dx};8ضfH(2X2ufL0YQZr㍉*x"吤Mfle)yvvVL1UWo^^LqpZ(ԤgE㕄#,y`(mX+E#JJyI<j]`=dDƜLO .BdDl99?v%zHW!{]q1u*z9\0|RaL[Qm0
{[I9U|3o[fs!kq'\j<jC
?wypL(dMF:&jcH+ˌÕ+3Tfv),P}(|8Q|3-GB\svJ8Td3e(]*)4_^AF 4PKe'  0  PK    A             =   org/bouncycastle/math/ec/custom/sec/SecT163FieldElement.classVWWL2IՐ#`RP[F'	Llf_`O[̩t;C
߽߻ۻƋ?P@HsY8i>/rM<fK2${{`hVUBe<HURTp<"Ox$1Wis%uE6;<XUTgL^S괚"LYke*/kUz.sPMfM%1VA9,sp-lNnIxPC2+5eSe)	Y${0e]9˯f$a%ZU5F=G{NrBD)iYEI*)#
fڬՎڙJWtPycHϥIڮs]B֜NlӔbX%׭)+dn3LjiAl,%ɼa2	ԅn5.~R&eu7MɆQ%:u]
P< S<~T'CUQsKōw$7iڂ
{4F~j.}'bU8b+%ϝ,Ng|qZJ#޸HDEhC"v%=h#c߄HsalzOgcC/v:,nc떲;߱(
gHG"+&ߍ+w{O߸AG5$aO}%e8 %4#$!ư$$63le`˰a?:TIj	xR<-(Sa
A'NJhũ l}0cClg4C!00`0y!r?py·)40Q,xԛ*z&BO])'ȓ#򘦠D禓Dz5"NAп $[x9cx*IXGmߣ>~}MXF!:g^K=$%-S,(jˬ5B+r<osI@g\(9]qa<2u&B@~s {Ʊ=_i{ވfxk+VVF$Ecg[#~/
ԝC${C&Tuט+wAjt9m+I$/x<>q.cxg`{mb+buB~-`or"`I&a7 wi;6cU-TD۾evy7I^gwKq!t2HvAj[ޱJە\SX Nخ\zWK8^xDR7/[>~2ngrs]Y0.`{UNЍw"oZ{`]c"F1ǰmE4Ţ7bb*|9 Vylz8oq#7cR4_\rb}es5PKc  M  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT163K1Curve$1.classNAG)VJ[45)5$/6lfwȍF5.01 &>"]D%J39g~ߓG N< #rjb{T.52!'"-+
[FUT}qݲfS`h6ǬZe<p+
TL?)pƹpֲg)ka<2BsC267R`9Ur+¸/_	sdHy-_q{OJfywC}$[ԤCn&M a<S" *h%{gRw(t).>MpALHQޙ";lcׁWxi8ECT
q #	aϓ4DЩ'4DqJd:pڛxSwG(QFqi4R0-֘n՚fʍ&w0Ă1npMK-<P]T(5X̃o	vdD"+mtB"YE>~h'17T/pd
e?.l qȚ08JF r_­x*M:*B$QПGKȤ~Xylך2a6>/JʢLr&ۻp;i`L3b6Wb#ѷX)OքR՝=*yR'"y{lG8nGXG<&h۳~fɾ[[
afE@PK4F  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT163K1Curve.classV[WW\&	FV-!!ՆhZ-$Nfhfk﷿CZWiVbdHVWg%{s}̙?+|偗#БK^$Izذ;d
o`j8I?vto~"H;K'8xNH)Irvnp,xT<6=:&GCDtlbAuSÔԨφf&-Kar('s!Y
c	EVg㪜5s|$ɆNi
HɱB~A%=#Jt=?KJro=R^M9&JsrJȣ~0?)Ψ4qw3bA5̫L~9qh&aVY9eTI͔lM+B멛2eʊz#a[Gl}Ez8"]siQ~1ϨBc2hzNUMƬ\*tt0E48fVi&S9C[sv
M.Nq1/V4
B5SDj9y}R{X6ʋq;ɤ`*jH&3S0?MiF>l2Ս_Ղ<ӶWۅSϣG'.y##(xr5mIgSٶ"G4mW\l[-;15ȡ50Q)lT*)nu:jyvTwh<5O-I_5i"PbtU3V'UT*Ԗܲ!cjw+UYַ.#2x:vCDD#xc`/0.8&Y8'y&qA@.V)/Naڋ8^"WʄL>}"C9&4Gv&}8
݇3xI(>}5<v;;ctph(}\`/} IjaUА2EX<_8@!t8 ^@?j;?wF$zWp6߹n?8r>\ō` oU,e8v5`jA{;ֽD3^#5Q6,g޿mY'\u[`aNw:o9nY/-uMDmr!n38fNZ-h31b{OwmenNgmB:I5|TY۹%M,6\,%\e6te]m6O ؊K6BxHO\s?;.G-^[x7t:]Miq:lku7!x);UX)2ꁯXi+]TԏXc/t9z:t^oPK  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT163K1Point.classW[sTT˖e+N[zJۤ
P(6M д[Irk)q)/`}!0;?~#iՑݤCMgg=7
RAd`IԨS\}-_*[_jz.9v2Zk?CKJ4umR<[L8
qRz0Pн`>1R7*9!G%aYF굳
;;TYer$<qIAW-ᴥTuzɐN8-uQ9IQkKU9[wyk+Ke$]{i5\&CTG[)xMOgeIМ7?6\S0|GkCvyf_-Y
Wm?2QS#*P.CvӰS}5< ?q:oI;ne%C9%	Btn,tMiq`?!8leMoEXGҁMx"yk󮾦G殄_BB0
D׀axnAP1lgxOII!͐a2<̐>=x]	7ti`Ƞ~`Y9<c2b80@%P(0pa
xG&2cx8p{E^fdba8pMjuW1vcjyM
k~-,NZggiC!ψB? >X(n
U((FiLPoಔQSNPh{f&ާx9UB
fuk`nd߽D_#Z\.UǝȰ
)1Q*-J !JUVcKqvO\w|O'M8q^H
2Y0
m'uere7Ma`<[Ncv$tq71Li1rx.T3!43ӯ!'uDRY(]"jru1%NJ)"O^%=)9-M"c.vF^%GfVd9'
Q}M,2WӜEK*+oH
Fc3<,3]o71of2HvB9w楮X"/Cvyȑ!u3-fjg&T&(FDf>i
M<(,04XوU쒄㜸X
ڳ5*-Uwq֨fC>*.$)'jsfccEV=hcF\PIǙhj%NV>{q93Z	TY&Pu<~	Ttb8TuAIE\ZY!U'!}O]_EN&v
ZLH1s;W,÷Y÷Zl:5 UAy_CRDvjB jA'Hp	Ic2ŀ{0sj92B@yԀM'(,VIB|Rk:ծ],TPRmZXzgDmq&<ƃF\O"-Obu5\XIwUHjpo6<AW\;o`67)=Ŷݭ4^tTobWħPKu,  z  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT163R1Curve$1.class[OAER
*J[
r)4"H]@E501L ~I""Q69gg9>5p"Yi)e3ޣrT)E(78L!b؂"7yn ,kq]>g
`s*U\$_]P;UZ@gYKzE]9ǵ8n	ƒZe!wJw%aΏ,<cdNfK27p,ClnrK$5)NSTHsTUQ┊zB;>4}gDaguQBC^vPp^s@#]#(F8AFHC'i]C5j
UhoM]Q4#ERQۛz4ty#ôRea\EkA+T*Λq'6-LX灚蠪tׄc1 Kܾ%tڑq!\"D>ն	=ճL{]Q"ޠSi0@Q[~]:T7~AT5chƭpN

wrSi>־|H	"
xN
g=הٽյ{eMRdrS-6|I;hc*ψ;%oFﱖIR_JQ.WWY=Gz	DF=&Jr{M}w
25PɋR6?PK\k  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT163R1Curve.classV[WW\&	V-!!!L
"XH[FL@7ЇVUڮշ3 Vkuus˷9'<W |A
E/Z2?ޟxM,y/%h,.b?'r/
TJLFzI'&S	eX"[d!t&h$E±d*K#T?N<傪Kq{±FvX(7Hd2Gy046!HT7>Hř^%Y2̂٠"bFU
S2h1r&qIFgoo/1&!tMKBiI6")
U痢{"(ɳJNVtZi~L,eᨴx^W503LE}.d5SQȼ0Vx9u2M3T7Ά1l}TnϕKb9B{uݎW5\&1VT5}N
ZJRQ;*aJip_MhT:Y$39Yo"S4)2kǍk9SԾ3T/;-/Jaũi>R2BPX_:/4?MjU-BBIcrAwۅWǣG#<<zyxy8#ʣGڌNbW
6 Ѷ1fu*vvvFmՓLtWWGr=ZnP}_f`y& 8GU*I/V5
+Y\RmmEBUvۑ N
<F{$Z4cHF310,.F<xOs0C	3҈632E^d#WdDfdŇSe"f|HcG
>Rfdއ3}
F>B,ңfPy/~d5M)0zr$_;'nu!M9qք͝IFVEiLį ǭT޹ `+̺
%Ǖy+X@{;D;Fm-#Y*޿mip5XGc,Y%w9o9nY/-u-N{/Á:)[e-m%e2UwY\U!ثYo!C<RzVjX4
U|T .Zv,=ܨL9*X5*;_߹.sWdF[hZ;p.*;ٟܳu;ŉ}+w~CLG t9'73@Gs7oWu$M\brQe\iVP w"߅Ae;vR_I] "O^:7PK  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT163R1Point.classVms>ZRhy1X%165؊4oHkgA/*!iShm~!_:|!_02C@/cγwvsϞsϞ{wѣ/b(xm<=VQhZ9jj4JUZefzutZĮיXQ(^xxLԝ^pIxQwu8Gư⶜W߮Y40=Pvn-/
0'nS,εVK
<;a_F3lM{Lkf,k;-[Ϊvý؀N[~`_>4l¤}&cGgׂ٩BSi^AYY<Ԗ&=rb2kul7Lq<֐pBʛkS~ݣѽݧPau-ùYo\*0ltp?6>кGYlvii|!L<B;;Vn`W{8H]ǵR3s[R_ч!G!&4zԤ	IE@Tb <C&%1R 0HFY@&eqL IS&=@OCzƤatD):
<1!
pƠ
=%``	"%ˀW 5a,N NN4Il#<X TӀek [EnV7Z-Ǜnؾp:ɿ'X/g+'	:99YʑDɉb|'-(p><uz[ڨ#B1M-+]#߹Nקּ
ddZgj=59+ld|K*?^MYP`2Z^Iɘ&Шe$n
Yq;y}ĳ?-bM?H}'kƅ%9c8MBLW\g,L\UoZj9tX@<&E6:6oţ=&c]	!]!4+ׯR^II!%2֐[	!(֤f!aDŰzW{.]c9ȋ3|kߥ5 /?HrTBIdXv<JA/Qcq 3?TYO֥7588\;ɱ`@ȋ
cu`Sd2.8rȱtQQȰ)2وO_Re9&'_E!=y!Yo-:LFS=Wn(Q]
Mz@
-jpAō%Gz
s9n`ye{mn4=Nx(U>\ì::\LW88("gg8'|UVÝbOW52DRh˨gQW\E/.L)aÐfKH;!&Ӓ1%Qy;ʋ\^yAwF	Qٰ|2R?NrA#jFaփƥ|̹-K6Kv-lK?\Ģb%w,|Z:6fᔉD(${KغV:|1mL
hcx8+QK"wKrWȜ30,$}kOSS4*f%P~;8ѝk4<5;ht:_ڼsyg:7hH?p8]o
PK3    PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT163R2Curve$1.classNAG)

*J[
Q?`R#`L^0,#mv"70oDh >$gw()69gg9>%p*];R*}w{T.Vj2!;1D[pW:ȍu˚?gLlNXp x[p*K~CS6Ce3Vf<2BrC267ܱǍ3;Urq;_Z)#G@n/qCO3t=
nBRB6E<{OVTVqPC3Ǌ;E3RzpR\.ړ>87"{쒣n@1
Gh8UC'4ihB$
tjhI
Q֠	IE;RQt ElǑhRoTjs-[ZVv#X>m^ie8DUm&y Y-ӎSy]d%G25虾52kg10$JZ}JfB_3ҡ#4nR WOX%\#+f:R<2U?Lo.G/˒,3\N$EEh?#8&
#6}Jb(bM(eK\=Yۣu"ygn66qh7$<=t4iUDuz6K=ax64K@}%/J~PKBu  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT163R2Curve.classVWW-d`@PPi Zm,Ake	af7nD~P+)mOGb;wZ%=0ޙ3Nxӯ 
E/Z2ޟfO.zzM<4y 	CPlx 1כp8bh4	Fr4X2J#h7>!UM5Oc'Ɠvgpdd&JǓ33rGG	^g&ɒad.9LT%?+f'g$ˊatLbC뚒((lNYsU֗E2$/(i^ť)i6OKIi弮j&qN9%cT}qXͥ5S)d^)/zZy5Ma{#e\i/y(!Y{V+v<qVͫ:yP鋪rMZJz,JRffVS+eY*Y,PSEGvXĶU/
fǍGj9C־3\/;m/H+qҡ9JTAEc`(tҒ^0
̚a*T
aYy&z[\N:zpL@P@H@X@D@>=MF6Am</i Zx0vhvO_UO2]]jyS`qƷA
8'U*&TM,T	ܱ"rUNΏ#KArj@4hGA4؅Qmt3҂"0nG0&<##nсs"0x"^ī"^bS"6{pŃAӌ#WeD$QC"dTѼHaыYr^@M'ePNҚy0j
SJWE^uۄFp5<K
M$V*\4	x; m
x>rD'|3wlbbؼo@Ӗ
km؋ܺn[z8Fcmdo:nZ/-u-<_gM2ؖH{ݲ%[e/`ͲJDw%e[4M(q[ZY'%q-svV
C,;\e_ESBYm:v8Zp.\?;~W[}u52$oou7}	
_o!
tV
{]^?q禲M>wZʨbDY+IevP_mS+մPKX̮  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT163R2Point.classV[sTTˑe+ŗpo	4
P@i@ IK )WVRQ[-7(~}!0;?w?"iՑݤ&a`[ٳڳgv_<DRaU0ʄ[_<.9Wj?3hGGlRXUҒbL;hi~ƎKge$n0ւUWе`c͎n3rTUaĭ.-ϳ]gnƮ<f'ziSNuz-uQ6a{KK^лT<QYNR'IZ(DwzX/&#E<NLv&ϧ">b*[ҒAi4#'BWsXRNĆ%|ھq?o8Ȃ
P̷]4ܫ>
kx@N
d'*+Jwn%vl!J7Uڋݦ4?Ć:*[15ӿi᭨kVn`S{<V<M#sGBo@@0
D0d@#Q9Plg0C3ЁC'CC/C! CCaǓ0
!
rh21u]xZGGt0Qcq0"l{1ó1dfc8
o1Q)'^`ax857d|ay	)/17'w18V}R<Z}4}8;Y\)XI+?:=(4T\p|xY
e8K.K1<K
=?c2{,
b(Z&լ(M'Ikx*<Q.=)zmELU
$R`bq(0*vhK?e2ȹ$	Hcd1Bc`"fN8K_CSC|R܍
k)#rJ<Oa$Nrˤ'b`8W&ysSZ2B`0˞#9z{7oF=v9SEhDm.T3.43ѯ!#̭'!Q0;ELfdf8II$HP<.zg[tdDtx9+tc|dES%
Esހs#zb΂!
T9
$Z0{Cb2{?3uG\%yi"LdD531DVfY/uWdG)TO`\DoV)/Să
2עk8C~
-$n/W$5rb66,h֨{WD
/߻F
=u5M%NSaud=q(qr8Sv6L*uA̈	*3S+p3.ƙ̡`ͭ]j]G\x
U_`%OVJ1׺YsPcԨ#̢,0*22\7qOѠ$YtTHQ)(jiҾՑd/5f
"tYZ
#4X!#Bǀ:wduR0hQCR65]Y͞l'%yr}'8d7H5/5k"ztSn<i*z屬6%+m~tI
R}w랜sR˯|wR0+OxOD[".lW6}2;}3UPKtq'    PK    A             6   org/bouncycastle/math/ec/custom/sec/SecT193Field.classVoj\EڴbrlGڥ,ؑ]'j(6ZS+E*@#"@E_zhA&hkhEAZ%S8E)q͛[#SM"yjzC"ej2ԩ;Kɸ%0.de)16b #vgڥrܸ,䕳,_hí-` ׈@YGZ\Ǣz6"Vc[ٹRDuo:xN~X^%dw*j{a!r0q]bc(UX:1],w:hèFyvT:aP	;R턕
y)kkU$Cܸ *t9P]j;A,J속AT
JnfTZ}+娂=zzn5W!6pa!VsPzuE5be(WEOdJoGzXEqK2ەHJG
{UӰNt:ӔN:y:O-.+EAcSТ!,:BeqdjsY#âYX'Ӣ1eq$YM8b]72+u+,VY>b,6Lz5M+,^e~J]UaVJo{Jd :FYI]a-vؠe_a+gt1zyH8]=9堽VP<%TO
|5_vb$
XCtO|53`<ϝ5Fi0Yy1q5+}$LM&廁y
NWpVcd(&saĳk@(:T^\>_[6{#~Xx&QҢѠN4LU?>[ԡ+z)@ߚZ|ð~c36V/[,<6$I%X|)r>"'R,uZHw%(ѧh"UTЫ"wh:E)Z̗j\ik҂e7PZ*% 
 Vyd"& f`) *yim2v@%0D&KxfG$`k޸ɶƨ|_uBۨK".
0;|UFi*z0h2vg8F
ǅɦؕbR<P4q0?ML9L ueKO)'(Ɓ:q4݇wEs ^Fe2T_WsnPpnszĤ3:yʤms
ʉ;#liPfZnFG݌s9go[n<rF8=TZLo!SS:Jy)WPalsУi3vၕd2%5U|/*܂91Ps9(K%TXjPPcK
i[l~ut.B"Nrv/B9"i@ΑBiq E
xjшc"Nʩ||fUE&C9)ef
ǣ;WԑX5Xء=!Ko?HfB8JKb_A8W`?ɴ6ߐD ;YćzNSĘ)Nbeb+[VlYMw-9&

Wcc/ʩ&b\5㻰WHopePEM'p"y?ɚfmbJPKQT[  R
  PK    A             =   org/bouncycastle/math/ec/custom/sec/SecT193FieldElement.classVSW-d Ok|TVC,HڊvI$AU[~Cmc:L:/?95 0awνw랽vzsCAtExabD Dly̑dHvw%Zțs4"lثe5k?j ݭ]q<&5@x$UkUԝ(imJK[T':WtS@Ũ?eQ
Q-;Z2,p#[JnI	"qT0TSZ岔ߘJ)fbZ2H˱вSaGʹ˒li窙ê#zQὍ)%+L[Ռ8ENȵ6i\ƒMTj{:=^!wO#ΧhKvY
mQ[rF&9gSRTêdgݾN].}ĴM=垲eOΝ]z+~ᓆr6ٯX-;v
Xw%oiz0s4CvZ&Dsg!`Ҕd(*n1f?aQsW!g/wF̏ͥRMfGLrRQ[Χ=*HBBBV	%쐰S.	OH-.{oVS~j%Aв=.?]i#>f13k[k.s&v?}(l򃸽|%͇!$*iXQJe<IjC^HF#2B2P.c63AZ!Pge2p3㤌f
a /у0%%^#ap0ΐe1L0L2Cl܏2gxa<C!0`0Lq$s^l&wgѡ+SW>h)3}Đ2h }ѹ5^oЪ>Lnߨ('j;9^K|.be!2	u
!۷<$e+K,(JˬU6+qDp8$S0+.È-Ƹ21ʌfK+W!?CxQVu=ur<ǐX0|eQ;
EEHtsQj:N>YaTsiut>U[L; N1\$$/D,pcygxm'%(R_#b	q$liEPr"PI&/:wyc-\۾%n>DuKh}dlg_nբ[
4E|`p*nR$Ap\8ׯ?v˽tUo^Uq}$R7-YK}dzgزdwۻ$Ǽ^n~7%
\+W\[tl(wx&L.(aڽFw3Hf/@yʫi;K_oܽBPKʕ  L  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT193R1Curve$1.classNAvKY O-m(i0D $/6lfwȍF5.01 &>]D$B39g~ߓ' '< w14\,"N뺰t:-ehb?hߜ0e4WEL(0dxi3-k͛emZ;Mڭy۱:}v̒f;%@0FQ.I)2'3ek=}R[i_ƹݗ%9B&Vf2	z
Q
jSPK(gbHW?:s$wP$
oǅ{EG'	yһc33h yu!9NxrO"*dTT z0ZTT⒊PVfUwꈠ	t-B. AA\>;R
.ǄS0|,m[Q}[$aRՔ1V@wM0uYBuZJdkВ]H';I
 4qJy=J&B2ҡKc4ƃY)c^gBeE(
zR1)·</Rx]&g3AvcN%fXNbH}B!I)ȅ=^Hy.<>{_##ߑ eIc4QG4AkSdߣ<mY y*PK:dd  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT193R1Curve.classV[WW\&A@V-!aB 	dhF0
3@7}C}P+*mW}&"VWg>䏇? 	@'Ԗq^
e21?MIuh?ClNťd"{i1.*x*֙;	INHIQSN1RT,R=rH*,IR\ݩeQ]b,H1f$vnq+&	%d9LXCVyeJ;XCiiyDLv
cdcqҊt~`dL#Qh?Ys]#3=ѵHZVza"]gt>FTAUtjL1N`<W)E͜T5,riYT5svjޣueUֳ>`WfG(	Յsfް9fNYhchΤS֧tr/L鶓^6D5EM3;FݱgK\]e :o1y{"䭑b0gjCu^-!>+y`ckPeӰlհ-*xJ4nE]p8nV 6gLĢiV{ytâ[jlFvcmR}Q]vá
*sv
/V~Η57;km<ypvѲuj?I:&=tG}(}U<yt8#£#ʣGG7q	$m6 2*/TCcXhCKmZBO۵5T1k䢽?m{J{Cì;=#Ni3PbU<%~%J*_J_Jvd|p0 `#Gٍى&mP#FCPsЋs
1RU612Z
	cPF5NuF.322Έ#z'1 dL#F2la5FA#\G+ΡB_`8>^ehfmUzV--2Bfsv8	{446!O3@7:goWɅ9n.F'sޝ|7e\/31][B/=[˘1wyxhRd8[
IQhl#kr.--g㷪^92jzF&y^k_{%W=5"#\fK*YG:ἫÍ8;\qhh-˞_seuM1dqѕ-(GӾjz-^j[xW(`{ZM˸ns*N[+y{z:'8OPKF.J(>g<waQ?`[Dw&§j:7PKz{x  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT193R1Point.classVms>ZRXY^VM@i,%]%$mJ[J~!_:|aQf0;y;4S[zg}ιg=W_D$Ys
%s[nOOTgxeVη;ڕ
ҴVuF}4V,/uf`<r:%u'k :k+^y]kΪ):11-tշk#
L+aݼ9[KnIslB&Nٗ{ѴG6y\$.i?F_N-`˖jDop<6 حW 3Gw-]dy?Z0;Th;k?h7+>'NMF>TCZ2RؑTq7)0THy}W}~Aa
oؗlzR}hPY)eC{=`;HKsĳٱo^\-x/ivu\>3w%|rLbI=i=eRP"դt   FI	zڤҀQ@c
I:bqAIq0t=8=g>zޤGH?2^:S4EӀ3=FT ?^,~
x*
zfSӀ3e/ ~X Tek [EnV7Z-Ǜnؾp:Ϳ'\/.=+'	:99,HDTIoFY8q
X&Fڨ#l.wo҇롩7֙tOyu2]j~Bz%AƦ,U]jI_-bSlhTᏲ{
7,{8~ޛ>.X+i
RcG(Aiڠ,QqaI	N`ӯ;י26We[Z9Iz~[h	biX~e%E7|XeJkRRH$̲5$V:ohʀ5i)YHq>a~d@#a(y1,C`~!k>r"ץU/<QyQ`ޑo@IJ(.]D)e<8py,8 `*kOuM+{!5#Nr,"@gXXd`"r,kT,2lLl6TY~)'iHOޢ5zL[|єF?JTt"yEor(\Пmqc\X^^;M;&J0뾉<S,Jj"OH+ =l")p'Xƕj%:y,2E!tbWQ= SJr0$/t?CNx	dLtT^*&eo}Qffb|1,φlH kPq)y|%%|MLxSJ~lbQѻVD>-_pD"JR=I%l]m+>KC}`H]6j1Fki
oo;Z^x%F]d+dh~s`T侵'JMom֒[(`?5{_ޝK4ʂ|	Ub/mފ3d4$K䏸y.PKJt    PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT193R2Curve$1.class]OAiw,Z򭠂Ҳȇ&`XFڰt0oDh0_#]D$B39g}d@n1m9oam#r|v}
6.l9N3uKpGdz|7Ĩi.<`(7'Ba?MeQ8Su
^Cpôys?ѹB[N^vgv,;ٿ;1A_sYɝtg݂0
,\sdNveWU:I͝MN6Ν$5)ʍfCIsT(*(WPJB=? CnQ(%k;-ܻVSQ%t ?9KOȝ|)88s>b*RQ
EEWT(A$a4(U\W
hqA-!A=ݩ#B.>YszpQ7LP\N\`PsŢma3D	neʦ/q_M4QZQ Kܞ%tڑq
$D2Ѱ-A:Ѿ.
(Ϣ^wЩ4Wd-/>:T~E┐5>ox0#3r\\Z63XXDw2~Q@:&sZU鋉ԟ5epu#ݐ29[djma{;i`B
3bj;臬6D!^^J%c!<P(ov}TكFS ŐҨP}ݮMf("T/PK-  l  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT193R2Curve.classV[WW\&	/ZZC@sOj2I4`	Z#mq {ھ>q]}?>	bHVWg>䏇? \htAp۝3^`{s1ӛK;6?6b"Jdx:Ep<	%Sh,Mcp&gct$%3(x&h,
`XӑL&HGMX8&p\6ˤbx0HRb$ӱD"B@"u\.բ2ܚp!cW>#x2
e/9t<3qqxx$MA<UyItg%cƯ-*LIUT8x$YVt#1䒦*|yAemJ
!kZyRXH"J򌒗AM:?7*MpGE8"-ӊATdmRLSem6UΩ2{aZ1eoeNb,QlZ	Zcô
h<[HJֲ`-]u?~F(ePGEU-J%mWƬ䁍]5@5U7$9VAi*]	(,fV[umǝ	YF7
*mҢH2BCTbɯl_ui:/}~nN+y*n(
~A*+StLr:PxqGGGGGGGGG݃Oft8uv{+K:gP>=FPw{:O۵[3k䢧?vs=%j0N3u9YU%Ozj)m_bo;m+2<jF~o8_ԑa-M@+a#qV@#;.C`ň[>x<a8x8 /#͸  ^e#cn$1Foq
3r	FdF&Q<8Fz bڃfQ=!)F<8
̓1R` E
==vnvMANUXt]G)oHճRh V2;iMΠdhu
N4lx۷\qp7|<Y='x>>X*\x

}mxZŹ;cG'Fm"Zé*޿mjpH4@cMY)wwon/M
mv˖tT-35ڒX̳{
B*޻m,.Y*Nl4%D)f)uP.vK*>q-V+nT>}&alD_YFfK{Ue%4W]!_!ۏl@q8qoݹ[Գy9wίރa봷;;㾻{}k8]ﴯ6!y?qE- ًX ꢼC.XB./M "On:7PK!|P  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT193R2Point.classVms>Z䶼c$DMI
$nnxw@-}_/3LGi ~/gJ3 lLm=9=\}}_cBgJ<)N+4\[mwZK5Ni*N2=5:ti:q^bx(u<&N`Ap/u֤v2
SH]q#

cX^v[v۫o,EU(Tys|mPK)g[%L/xiT-VH6\&]=&\q
~Z-gxj{M^fyl@r-?[=nkLvaR!#gkdS5uݬ,tj=zb2vl7¶Lq<֐pBkktFwktFjtF+T{ž`pn}:L)E폍QBZ	cfGƿ;+q8c/$ocq|ܖ~ί	ېېLbI=f¤"DI{I1i@ AKR 0HFY@ W&eIwY&ŉ?	Г&=HOAI?:Nt0x0m48xpƠ
=x0
`[/~8k#4X  ,~gz`9<
X ,^,T9j9T}I=}~>p^^yC
}RT'JNK?Iq"3Σ^?Ht(-3%eKoݵTLL
''E<*.5?xiĒߠʏWb*.5ؤB0)A4Gfq=xc?>_K]j	i5RcG(NiZ,aqaI1N`o;ט"k<6WekZ9IZ\x[_bKoXI
ԅjBRy*mR"	+l
Λ02`MZ
iROkFHJ^ː8w¸ e߬ur0
"/
;boV{3"#Q	%aۥ(G">PeZ^
\p9r$ǂ!/rXt6ՁU@VLQF !ұFE"æf#>1*K1=yr
_e70MjH_DuI7h,7A)"J+&7.iq*8r\&iz$^7Q|YmtBpp`QET+q0LZaI;	*0T+)kd`Q(

[_\R !9}ݗ!:vC(L0%cJ2U6(/xR76ad~&dF":Xì{Ks[l7{Z171ٖaJ)E~+KDB[Ytl~
)(QHI$ut,
M!cvۘ<AqW6Eokxav9+g`YIQΞ@(6hT[KnGP~;8k4<5;hty:_ڼsy{:iHqx?PK%{ߝ    PK    A             6   org/bouncycastle/math/ec/custom/sec/SecT233Field.classVKo>#΋h(cӊ"ʎbiXLVkGvVhؑQL"erB aP@
x.Zt
}CuEFZ;wF$E8;=_/_,=(61yC"yb"ۋx#oIb\``!RtVB"#%4
bX(bK,ϝ B^r XֳX9_-bk}wfvv2=DVsPUxN^PZydwvKW*;A&`p*~V-ձt~0G*BޭB~)(oRa;(]bu+y^>
3궿Q/`V*;A_Ze^ȯ͜=VP^yj1
C`Ŵ +3粈AAC0suEqB9Z~yV%+ RK hh@q^hR#W#ODD|F;%0'?4$SI)3eRLzTNnM#$zM:bIS,ΰ"Ӥ4,^]yz2,~:5ﰸ&w
L,BI?f W*fߕJyk7>(KZQ* QOITyv>SJaIĸ?qv(NdF#b'317{1]dFHuUS\]#7_|Oclյ-ڠZׂI<{0{\xUZxh&MGƽMz2 S x
}az+>F=Awǈ1^`!z#_3:e)AAi^M]HzE]8j{=BK޿ҥWt	.3,2]P:2[S)W@[çeǶ^@&]"ٵOp|1x)ڸ,xQ'̑0Gԩv4%
!9d/Ǚ騭ʙ\P9+)g;c͜@
z3p̙Xm1
9<ÑSpdM!瘂)0B0\s^,p!9`u.EGE:.p3zןO;rs2(|қH@i#!'{
Gs JHThtM`T x	V>Gr/zNʺV.$bف@*gJ$^Տ!(;8X5xZZl5jd5֯RG\6~Xii/D3OC>bx]h~E(m"C,j1]x">9%9Zßiuz#<xpcĚ⽌xAy%0~V
_ٹ8Uh>Vnlt̞rY
p4{5kPON}5[z#BՀN5vwO?j#i{כ`
G-**l>&M־]pKɐRb~J!M3r)?
M3*4=&O$@țxuַ%4-;kvE=pdkI]Ǖvvw-OOZə):-g^UV#e'-eX1d%R>ϣh8B!CөWIn;'w4G8nQڿAQc3
Uur?ƕu~D5&T6~x=11Pq/v6k&(\-i1akp`=KZm}R8eZx9q(8MʋEyeYw]I$]1CIPKai  '  PK    A             =   org/bouncycastle/math/ec/custom/sec/SecT233FieldElement.classVkSg~lI\5^ZP!EmE
$HڊvI$AU[{ثL~ოi1Sgz	m39{޳o_~AT-m,Q==lQGY"͖ kE#oшn`լ(DW˘ y@M
viP|J J5WfQ
2TRwvNY
I-MlQD^M#Fn쀖ZjF5(bFh}ʘZOCVrK2)uPM5k)R~>2h()6]i9 -G;rW@NE5.KfFE6R&d3n]W3ndcs*#ڤ1MV6Ottz0GCVR~#ΧhKvY
mQ[rF&1gS)OWaTn_rvZ>lZ&˞rOmSyʍ%LRN{=TIC9S4=n4`P< ќY4*ʝ[.n̽#GsXU˝0vs;T:Y\T.yVqr)IEϫ4GrF-$YBvJ%aG$<*.{gRS~j%в=.?]i#>f13k[k.s&`t{q{nnK!}HTƓ
=x 佐Fe6ceԡ\&-m{1<ư2jRVC%1>;ĔBЎ2dx>Lq/0(ab:$8ia!ːcg`0,<Ù0a8"Kx
)4Ca`
4zIbwMfUCWLS|RR2h I_tH3iH6nk('rsw~g
a%Ce%Bo{5yH;VgYP.6YmV"pjI`'/[qe<1b5%B@
j?{х=_x^Aa\vvF&EcX~uԝ$~M\cMCΩT}7/wxAbtIIlI/"q_MͳelC53>DkQ͎"y[0"F`DV(P$	6'	dsq}gKi:VBY̵[8knIT,.v$sd;sݪ\l9(=SuJ%ŉ~z iRߜ_'uMt'7>\Ɩ%5?%̧o{Zvsm
Kbf3?~߿}GMvykDz7oD'Z)//v$}%EBPKe)  L  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT233K1Curve$1.classNAvK] ( miݖ&EPBbaikvh_nB`((ET"t朝9o{2|`dɛDrfAŇJ\a`pw"\ׅmwgYn	 C^3!f0neA8G24ߙ9ZŚPcʝ&tX\w3A_N
}`ZEECTK¢D
<;4/k7?'9r&m	z
QM
UB(cgĐwfHޓ(%>+%	ߥ7gg>8;~PLE+B*ڠ

"NpJEgTn@z;Fpڑ >w:t'`So)tô+qyT	`p6C_
GX8p8DU=NwM0uYByJd[RkR5dS}kȥ $qJy<JA{eХCu$NYc4nR0/ǼU܊|P0UcdcR,<?^SfwVW֗)":ά#cN"~G61H*B56/q=lJՈHq=!H2GѤ1T1w14
O .,QepvPK*R\  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT233K1Curve.classV[wU&Ii	BTi!7E0WHH%D-̤Żxy eZO	L&	k}o3g~/ >`gڒ-y+faÞ`:c
_07k=\8ŎEcD@2Dȑh,=.'(q1I3dOoHd*JǓS2Z&ɩaܨ^
OEMZDTh΅e)YI򼬙CL%I6K4 &ǋE Jz^L-zaJ@]RAM9.JsrFˣ~0)N4qg٘bQ5,Lqʖ]L,3r,(u}>̦5SeYٴg@ݴg|-*Dlc^*\t1^nwv׫)ƈ>*
ePɂrh".e7rS;j55ష[tD
@Hs8:m T¤X+xT4L}>lP3#Kl>#'uDeP͞s)5F|Q\Xa4E
Y6L/jQiWǍɣG7<8#£G/><Ŏ'mK:ӝuU9i;䪨͆ٱf:s1mjڂOhG&j?]Y;?T[^']-h5XD&etrVK5T)ԦnڑX3󿌻*~,y[@NNC@@#F`"6
hf	[1
p2a
=pl쌀<
8/X+D·!|HU&.3!21̈́'0U?#y&4?)'<~iD4?q]q
84V>γ>}5M.U0d*h̘tuL,/Q	؅-s90H}"F$zSPȄY[5Ά8Wq=ǛpcB!L^'m}|RX
5cX<(._MhvfĒyאʖ-˃
=vnektҊh&hyGOPw+џƙG4pZoVmm!RXnٮ޻e/`7..;	(x,NNEZQ˳8g{mCwqb>@&pU>Ws3bۜqߺq}b_ֆmHεs]si/vi\{xW$tZ

_T6*[eoxɀۑ@U;X)}U3bY'TXm/|8$O]>:7PKǚI  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT233K1Point.classV[wUL2dzͥoT(MB(-Vr؂dZ&LAO/CuڵtOh{ϙ-KBe|g=O 
"={+v\?BۓC
z/Vk}yxhy~X>748Pٮخ"J%@xҵDkJo/1\sJiU+۳vMA۬q\{rZsBJiZ+5;5Ye^w㸡z]o+i;^?	[Su 㝷kU2\/Ε2=KSyTZ/$ڳOGtZXe&M:Xu=r}Od7~+;UuX$ cӞ_pEA}ŋ_yDڈyWy!
J8mԿ9sʂ
wKvӰC𤆧4< ;zٺfI?*f䒄lڻ{JU暋ݣ43dĎsVbjg[Q;T`S1^oHMP)`y()|L7@@.0Y1<g `00t0t2;28hxaCDA0Darz#8#uQc	1p\130p
I)7J`/313d8pu	=*k'&^gpCm],[gӀo9KƬ+tStӗR_J@7/,ƏP"KYҚ`	.ᦔQPhE|@B EKս3Q1}6E\B2}qz\P1K"&*ㅅ@WDV]C>
_`Ls$ -dhh%>/!-4
,t-#ExQ9IJ ?wR[ -W] c8jZfsZd^ȑл
cgj"qB5B362"\8II$E"fk`fiD+IʧFLh.3,~N"fZ3Λr#+2"K(%1!:\yAJ\ OKKoyW	Xfg'3u7ٻ9reD$Ȉ4uofangY崑#USd')TLt0KQgiة!/K,04Ӱ\QR]t
vIB]Vancj!dq.*ԕPbwrx$ۈǃ=U8F3Qz*}̘3ch
S`np&	-Wƥ2:C}'+C/䃪3,ŘԸ*
Z,t6nH+qaeo(+AR_AF.Rv1w$.᠆2ReHLRfhL6@i>ɉ
Z6"ZS*\Tk2		9ILAI18`] 7>4t]qlGAMdz87}Z
@G
)6;Eד+cTW13[M>tQo<ڸ+'5(u	{)MtDC7/"}.ltY6}-{>
PKRI    PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT233R1Curve$1.classNAv۲hEʷ
Җ&I !1xiökvh_nB`((ED"l:sΜs=/??~0kDͳR"97 'r\g`pw\ׅmwf2n	C^eKf!jI\uNOS΂(c
^CwfgZڂ\vUS҄XN>q#&˶cV4i,7DE$Ȝ-[+t::fw$S*Ԥ
7:
Q%a\qS :ʭ㳌2»aguQB$wġÙ4:gG<GPLEB*
]ORFS*:#hC;]t((ZN}QHGqIrfzd].dB*m[1}["aRqLwM0sYB%:JdSmRȤz6П[QAi+:
<*zmˠK/IYFiLR0+ǽ5܉˭ϤbP05{dR<<5<ﮮRxU&g=Dp{;i`B
ژ&3bFma;軬҅C7kRK;՝]*y^#"y}GhB`u$evIcROh۳Aצ~{
25P/m~PKc  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT233R1Curve.classV[WWL2Iji
M2	AKa fhf­#ھ>qk?/L&E"Z]\{sv~/ "
E/Y
ޗaǶ]DM<`0FRT4Kt"8 ~)L
$R?NBdz K2P
">)HR0JJ`8N}'B^˛I{±8FGRvgSq)MHjJCd*8<>KnbbX/(alT%Jja:UPU<Ad^YQT$1EJADDES/rp*^&pاUT2fuXo)6c=iUѧլY+l)lF3Y̋iWImee|\%{Si<_%Oe2g/M;qN*U7ƋyMEQ9;$5k)kP5rF{%2"%=-s8jVmנo[d|iVU{ҸTX5RRgV_vhD_#)F9"R2󅀪sY4ge_FiaA/uxaT
aQ.&z\N:-zp\@@@P@H$ , "W A3cF7[^v_yAfj'&:|C]=N_UV=Dwu{J샾rVN].5UU5WT%Jwpǂ,U=K;7K;?,9_ɩ(""bD3H+ΉHv8a
q8/#loTċxUK4`\sf14^ 0L2r)F/Na1^$p\4#i{q:#^ŬQSy	z94T:%DA6vC֔arWA6>go<iMy9RCc3(?D?\4GӐñ8s:>ZÊ}5,u*Ƿp:V%{'He
ɵoxk+!c^HmKZI[6OwݺVjnxb/6dy
mksHYl ^{mxp'XCx$tj',<-tl7+qB֖j8Ra~hUڪWx75w<GPydUxq歒k79O#tD]mmkҠ!;"yEG|o:yݛ.~@:?ۛEm@C2Mncijq儺!n	*?#sśTXc:1Oy]LPK	#  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT233R1Point.classV[sTTˑe+ŗ@546RMC$-M\][IEm)ޠ[B_xHvud7I:wٳǿW K=tǧF2OKNbkZZё1۪G+VrôX.㎥ ZZl&sv8[=f/;`t-XX#[/̅8iqulי+2li/A3pTtv*wK]u)Rŷ+.$OTuTIұ>-^-VKDx~=ݽikHDO{~Xǆ
Vnu#r*8prhCjuW[*i=oy1ۗ!0YPrK]p4ܯىҝ[F9@|BJB{}m*snS}ObߴVԎU+7=oHƦV_Rpy#!ѷw Fw "2ခ=x C,v0<ЅG
tࠁːbH3<ǐcqNq<n 
Ӏ  ሁSOO㨎f80tL20^1<,s'N1:Ûqba8	f^fx5}x8egxaa8K/35
:]n;U=ϢV9MNg+|FT*}@._wPB,2Jc%z2HBgSxo@TCEˤ=1#JI}
r("C*l)08UX~AAd;4쥟WS\1|0Z|G'
%ٯסFk)FdIҵQF9%uF0
}'ue1L+)b-j!0eiŅ	̛7;H"
\4c6|PאqֈDBX("j&3u2F$D$(f3-W2KD\]
J̴H7p~!7"#vhnpx6P1{DTY=r*^$VFaOv<[Xfo8c2萫5"MDHZ[c]ff9"@l:+?n"%
^읋
|J8t걛xPCAZt
Gahدa\SM*YNZw;r\{רI~*N'%.VNg*p0~pz&jf3b
;
|B㌋qf4s('Xs+b@b1^CXɓr.tԘ!5(!0M#4A$݄c'd1RlG5ZGokGou$ًkjMD]EV
*Vu7@HƠP1Nĝ&YyԐԀM
)(nWz'%[|)Iu\_I>.
AKͽrƚe?^6ݪTx*Oe1=^y,cJ]Tݺ'gke7߂ʓ2S+֥HձM_ĂqTPKӀ    PK    A             6   org/bouncycastle/math/ec/custom/sec/SecT239Field.classVKs>\.$Le"wAHS^LrBZGbI(Ċ FSIU|pJY˩\rHYq|=
=_~33mH$]H9uL^Mihg`2IĮCX;Z^H@TeD]7gX5\ZZ.#L`Cj"=1DzGay)?X<!}ZY;<SEQU"ӽ.V"FWK*ka&`p*f^ЉpXLWoUV*7j>RX^fJh9,]jɵ܋59bv*Ne\*R *͍Ze- '<jTK5|pL(||9m>|x1FKT#ȸqm$qc^ZݻHm%+ M'5N:
tDu)'%h1v-;ї>$SES$[*&͢WȰh-!"z,b!,HeQQG&MӌIY\9,~},>`q5I%MH7MzfYbdBe	QP)orjXdXx.\_",&BԅEMINV)qX]_ d~{Nu Y㤑v,'{rAc!xJ+TO
|iH\_9_gdxFsGPc4$ŀ]h|l,<܂C-<L'&NG|V$} <E_\8BgOy `(h'wimw=tR1R1#ܑ5ʣIT_ԣs:ﯵ!f_b4}+]*?qc.}4\=O?ʍct9>V%ԇḿd95?bLmu<$lAAV\W0Qlˬ`s}pQ0\(7
k1rm~
j-xz؂=lYZ%x<a	uMMo
Mb)XkYa TAp^bunX~@ڜ7FnXی&d%>}h]Z刢)(?elURt|)Df'B&~4} ؈("ӧԯsuytԠOSo>Ǚt
G{OܓH(#bQ(F*jUfaꉵVo,줤gO2bpp|KOI>B;9=*!|nu0%bE"'%&l \p	lr&6JQ99Y{1A7?5KO4ҏsI"ΡzSɗbhq&ߠ
?{Oǧ}^{byskP`uWwX cMpnc H^g5G_wBՁԓ}21Oi)zk:gPV#UT񉺫9ƞE2UGZ[(ٽSKj{?p61`P3d9ɻtM	rJ ƚMr4#ͥq[A(Kv߅Ki[vh{{d?
ٓEەr7v+w-OZ)X>mW
kb&p}v:)Mxu.=MO/I?P}hjC!B:_#PlMßn iџh4>|NuP^-mdT+`~5Stz{Dr|GZ\i8ŧפ<sԤkA5B((COcO'>r/XPK   ~  PK    A             =   org/bouncycastle/math/ec/custom/sec/SecT239FieldElement.classVkSg~lI\5^ZVCڊ,H
,auI`w`~ًtfjgZԙ^CL9"0a9}{
w GG=<qXn>+>&[u$%==lV0<[+jzBtPknMS*8GI#<Qf5FXVԮiW6-Z))jȎ=KMEL_WKYZziyh#[FnI&Ԑ8Nf,ҲoLG%[1-gXgi)հȣfeIsaކSʔוL:ޣjZ;tnvM'ՉBz4Xc
9&ծڑJ
eWtJh9`dS$m׹zɮ/C-vsHGLr&Ij!wuUN@2;FLds])uQv2gZIuG5.|PuN,Mw2C33Tj'39*@4'y|&MArjH*lywpgh܈\N,մhVad+[:*UK;U\a|qJsj#kѬѸ@$$Hh]	;%}wF)5i7>\b-SFwvX˦[ؚlάwl1Q
̙$v,s/ޗC'Q'cD{ ${ʈ2l
!h@2cxa
dc-qj<-cэc|v)1'dl |
^`PL	q*):8C!00`2X93Ar?pE)40h{ܓɨFJO]堥$O'!eDWDѹ5^gѪTEnߨᕫ$r
{sDW-a5*C$o{5yH;YP.6YmVԓdO/8Ǘ#xȈPTf1^\IgX5S.
z9S[][T0M7);{H$8@O-Ǯ;KkS}<`zYRt[ĵoYN''}3&A1.:^۽1G8y|$[|!(ۜH(PIS_8O]JkcU-TD\۾%ny7	^tKp%t		2Iv~jѭZB<޳K9J\[T ;[׊^ZK0,R)~2Ů,ugؼdʃ]N9bbn^7%^sw%lk1vQ|5Mux_gݨ+wN?雊BUY+دWX8r~tPKw  M  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT239K1Curve$1.classQOPwk1Nd
l
*60e&CPtrej0_xDh0Q$Q<m({N=_= KdSR25= 'h^u.30;¶,CXwD>WDym>kFsҬC-\]14Λּ6k.:Ch5T4kWfmS,q?1kMnY.^
chpIy`-q'u1t=KuIR%IEntN¸㾧EAT
*h!񃳌0d;X]$
?,
>+%:ߥ7{gf8wއb*!81T!#AדTѡTDpF$p֝ιSwmHFЎtqmd"8]szp]Ob1z]X۶$xM8¢WT`4Bd۳N;7N#uȶҽȦ{ї@kMAq+:
<*~mˠKI;MиK_fL?φB|8V^b ( bX_kJ"WdrVә
<Q-	)H0g
%FHRq"Wy;aTFD!|ٍЊw#l"ESlMGƈSžhӳfȾC-<mHD
ԋa"T PK"O  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT239K1Curve.classV[WW\&	J$!ՆhZ/1mq&0:{KZ1vu/L&U"Z]}o3g~/ ^ isO2a?b
?;ktUzz}x/6'±phWWh瘤*bǀLN9HcȑT4HNħ.8<'gS3dɎpflhZ/hҲ$*Es.$Kx,L\ed"(Ia^I59V/Qsdy.I3U{9h1QSbN+8]%㰜9NeAUdS_NfrfdISf^[ClR3Y6AMxJYȵMj92h[/ͥLb%v7cw=zbӪbPHMWDCeqQ,q"0^}J\w>ͥ=:my*G"2\9].baBm`ߦR0A͔,}(H3G6/OjWaRhB4#=<R05$kl)*SMiF>l2Ս_Ղ<vA/!ɣGGNx##n=<α'mK:Ӂ*澛rDvKUQ
cCZ#plavEVI)DGe,]|*2O-.It3XӤ"%tUrVKT.ԖnّX1󿌻*~,y[@NN]A@Fd"v	hb^Z8p3hG^L8I6vZ@;xZІa"	Lyk^$*fBbb	هcQ<(#>)Dއ$Fp1
8ԕ?α>}$5MT0d*Kte\,/Q	؍ms`D#?H".M- lpVp
2A+U\=\_`Wn/s;w*M$*
Un&4e;[!b<kHdxApIאnektҊ[DdҏG?c3Ii[Xakg:x=h"歵$:b;Z'iv:TGe,hcqZ|&Y\e+7@[+.ضbC:Ϲ~p:z]^w[ر})2߅hu6.'}n~[LY^E'<؁ԆYŸַ~kQ?c(`Eʜ+E}a:K/Sά
PK  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT239K1Point.classV[WUd2pͅފXZ(
Xt$`fKw}qb_.]K o
(=gMe|g=O [g^t\?LfnrW}vcKvvU*㮭 Z\]5V}x	S"NlZrF]ߞk
lpvqjVș9*qiVj9Uwz)8$,qYAźp[Wvj&.xAp1;cתdX2=KEDZZ,$sOGtZXe
M:\u=r}OdOo4WvH~"݃3_HEA=ŋ_yD<F`Ѫؔo{FN3,@D_J+]5<Iٱc¨8lVA.Ih6t]eJ=AIlYَɞ-oGHS2-x"6C=g恤%_@@2
Dp~=x^^Pt1dx

$ɐbH3f`@;xaCy:`4P7^d%ᰎ^ֱGc
80
(o1L1L3Npaa8	o2Ig%QW^cxaaaMho>*_ƨڵy6
Ska~Zf6}?(4T⽹|.G
%(	-\2*8"	֎߰Z]>_
D~uhTz5F03N^G"!_U;A~S2HDe(0*vj(GY)r\Dn28CSo@l(nGdk)#IQži%|4Mf`=5N	]Zhc=SEq<LLfȈs]$%q2
fZUD$)f=J0.W2MD|:y8̴H/ß`\43FVdD4PDKt-ceCtg; DWɗ`)vxwfw$H0i>Ru,'Y?;v"i#GfȚ)N!R2PTGa:"RnF)oEn
yYb5a}
Ə"n;WGNrr4vkTçC
/Mo_M]	%vO}(O-;'F<,Q(0D驠3cތ1r>(LڂuꚚ֫''\z4>fLlcFZR
4h5.ٸ!ąpI}C<HYA0vZFH!!-Og0C;f$|LINhב`|(טR0Z0\SIHLb5
J rC3H#5`8N2\oh"sԶ֛P4 :w@
-wV0LѴ<)wrF\OSU<"S_5f޳ԛ|袤<xqWNkRQ|R`w|n^
E\첎
Zd1|4}KUPKgucd    PK    A             6   org/bouncycastle/math/ec/custom/sec/SecT283Field.classWS4f"*tj{]D /qA쎬nʗ=J}C.K%[C1U$*8rn9_?1AGnH;2t7Cht4!ۗFފvIt)қ :Pr#;rgF}!ss;/,.B9z0_XY8RZb
!٥kűjikHOQzejTZx[>GB+kZXU]JbJE2&3ZNEydvfaAg*l*=.<+x7].
kU5bi\YEv-<.K4όZr[)TyWܨVV
kɱKeз{<!Rn2cG1MQ+cX{m)ϊS:#2C,6@5\ƣ͇%swO:h0U_1|HO	?UIYLrL6C<0#QKƶeΨr/mP&A1zŦ,z)T$6OMGȲ=JtR6
mS7ڴAaqEm:eO	Ӎ$$ͱ]YX<`Ȣ!%X,x+ttnxk],Ǣ,buZ'+jF{d6_xP. "aEOS^8x>)XBXh+Z5-%HR:z=NBNs^i#=Wgd8L\l-
Y#a82#`"+aɾZނv ry.̻/rM.\OG;v5 p] {'Gq2mzmzb*,4jDb3Mkۦj]-_HZE&
X cJf?nYXr6
 k&4ka֞φE=q=o7j 'N6mn(6}6py73kZF*HcjbWƧxkkXWoa=$voӼ|5@o$`OBYQwIiH~B	'B?1	',4_ZC?
1V~i~ilf+	DV^C/M&ϸ~	dƂWFJ5/-}Vs	W,c&9]㰚
q FoEk័L#޴XmdhbKꢿ7s_zlc5ߖ,.
-k|H3<d"< djڏ5ًZ=f6L7M߃!v1uٶOqyE#bPrU\S7E	c)hqDbܼoTY
om؝l_й8\)U8Tq;"No@vq0&Y2ui
˄88P)8XB2SmMQh.ۅt.;5SףQ~62qޱ34:h]" n]Z"И (P`w 
Z:5vkӺѭǽn
ߦ(C0Cj1rdn#T5	Sa+p6Zc؎Jש+][) Y:TVidJmZi	
n٥0e/@!=d_H@!I!!(`B) .̺
o	t0Ƀ0ia
B)AAy8
|7K7/`whXyrX#<@ch[max|@g/!ϡ"\-?!'ځ&qɼSP (iy0/]'d`0ۋ5rEȹ&+]^fΔ7ҕ7 nY^^~A.e\%Kr)J,UW	><NJ>uU76pFDt@˜u@([V7')̗luCc|
 kK+m@:.g?Z&24&?ֳU3=oF(C)sX
g?hM8{3M)i17(09Oi4cd!\gF.ʡ;PKf	    PK    A             =   org/bouncycastle/math/ec/custom/sec/SecT283FieldElement.classVWW
d8 5-X!`RBE!P[VdC3[EbmP>sZs|Qm̌<{w{w^~
o) Em<b1b8nG?[q$$l	V0![+vkYKGjjygKi%ϧI
ʪtzHzl@)CU,u6	-MvQx^MeFn]tg-5#Z2-sVG6;ܒPA:fKe)E4{Q.Ŵe#9+e'T"i"U3F֟V&d3n]W3fds2"WۤQIW6O	(wնtz09Iݭ^-7\:*wO/
d)EnP.MM>]-US}	hY&sCېiQ,=e,NM+70I;K;WкODR!{ݒ-C[h3ef4`nSdThLbe-V6ޡTLҜ9wrrgiD|+,մ50+%ϥ*L0I31Y7yF[ѵtpΨ[%4IhMK!a'$
ܝCCՔhCa2lf<oj>#>f1?>kq[k.slH}&ߏw@| @2Q-!2v3T/c5$^XFVȈ3l,
2VLM0exa
VʨA	
<+c-x	vBALу!Tx1$a!à32drcɐg`80&#/1gxB1 T4p.AdΣ.~lV5:t4UzJ,%uWTt<INZ=8JxVIPB1vFu|^C)KB(G+},> ,GDBDBw|&I}fq9ʅna"gYq# é&ɞ_pqWFl151bU%B@
b{s{y8WY][T0M7);Hr'8hm|\ΩzjT}jo1=^DRt8[7/''}76c a}Ut%(Ryh_#b	H "
e#dSrx8fKizVCI̵]>tUN$|vpA+-u"Y|`pjrV(zw7;Պ7r/*LD%}{~y7ѝl4p`{7-F^wȽ'γys0ʮ8<_M}<v~q:/nWw *엊>o.CsNOҷb&֡PK*?  n  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT283K1Curve$1.classmOPwk׮ʔ'dÎ&fd(ΐ|\B`FkBGDET"\v9s~~\d`dR1955?F*wQDѸi
mr|?CSY%~O\%v1nʜJG4xLr3B|hr׳Q^qynz1\p=j䖄ywJEX
wW{
"׿9q{}o+WHjRh[햨0@QPpXGʵ3d9ZS$
HӻREG{	bإ7R҇gwg.8sރb:!8I!##I:T8S:4ѡ=tYЈ&d44˟ipi
,њin67.=ˠk5,eHU	J7y&ڨj#5Dw`	v`FC䵑gZVadWt'74DPt*
8xT2JA
_8q{ӸKѼq3)7?fƢy5&ջRR6?No.Ɨ%I[Ydא0o'mLLAS@Fq\bFl$kt!Pڬ&/quflJ6HH2GwѤ1bG4ZCodߣ^FpfӨ@KPK3a  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT283K1Curve.classV[WW\&	FV-!!B.%-F`_h҇VUڮշ3 	kuuV9g}}ΜOx98-)K^5@)>
l?kxX{=IKDH+Lv'Ouvvp"E<%U,:m78ht"691K&Ski
OFdߥ8AUA찞MMZDTЬh΄d)%YJ򬬙L%I6vI59V˔D\(UI[vr8 eєc4#Ŝ<7sJ9BeNUdS[D.tE39SOi3Hԭ~e:4 L˦xZY"Mi9"eE#b)ΥHWcnzu?^'U\1W4}VUu7yƬ\2tt0E48.gVm;IS9YvX42.F
voi,S
LۧOg`P楳IJc<lAU^\fGM&SQC6q
ȷ9=oNS4EÔn[z!](>N~-<Zy8va<:ytr7mIg߹Ѵ}bpUԦCjӽ-~j<a@٬fX\[waKyOx	Toqt0N⫂52P̓rFq̒Jq;6d|̗//Ke|SA(`?P!2꘨n/aD@5L4#F D5.h0&Hu/xLLL2!11ńY0qӇ>L,q|E]9Ca o0!ŇAܠnggn5OO )M1U4
jҦ(G(D.C}"{#H~NpSz_X5dVp;>[[^$>]ś+X֡&;ZeĢy֐̬⃻}e[ ]EVot[UGd7{Jޟƙ4pb(FۻDuߵpl(y-Zۈ'FF
`_ǥ\%j+ K1XkmYJl(agcvdec?_>J`#!m̸f~q:.G]ngZջGzF!
0z#|rw7.}
3F*>^T=.g8O{
XŸ"ַkQ?`EʜKE}i*:K/3ά
PKs*    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT283K1Point.classV[wUL2dzWԊI(Eij[
"4ɤfEx'ȋy\e-]+Zs&i˂кd&g>6{?ogHI	=Fީ[R<lV,R]=18҉]]E:bJk+kJo/1,8%Nתgfm>?XJ9!G%΀4-\<N;eVg$r؝8(0hwں\nJuڞ@oOtE/.xvJ+eߙ+ӳT<UNժO=ctDwUvj{
v7>\٩"tOy~*C}}/{~y.>F{ުؔo{FN3,@G5<q
5<IّK^aTO6+ $wT2\Ї $}lxvZbT|[k롞Spuy )|L0@7@fhóbx@`ha`dH1bv<o=	6ti`ȡ.ᨎ^ֱcù
80
0o2g`x8(IS2L&Ћd8ë1000pEuW1vmlyMZƭ'd/O/
$*
xO._+?AQB,e1Jk%zRFEχ2Bko?,*}?ϖQ_](Z"լH/FFIHq[DKyuq1gB]_fY.
(|1Eε8D#vk#ȏd48wԛP#?6#Vҵ1F$uF(DbI]nODq>ƈU3B`0˞'R>Xhc=SE`E>LLfȈs]$%q2
fZUD$)f=J0.W2MD|:y8ʹH/c73FVdD4PDsعYޗȋW;LȰ.wev;˘6S7͒/&"DF{oKm|5Cdet;͊("k8H\BeSHu=~Oi
5k07~q]!=Pp~;@p[ئ>ug\+|Fs7}5u%=~j!a?6`qr@e6OCL
j83f3ک(gn-\	mzrBիGqPjfK1f$%5-JV+J\aY
GW?ăo̝$	+he(bL}&)R3c&^Kr 4ĉI
Fr)sS*5u$&\Ӡ{0ޫ 7>4t8R6# n&2w9Mmmy
}I#|rjMӝ"}.9*:X#25\g=Kɇ.J̓wyzMjp6Jo^
vS2c.KH]ֱC_A,~c| PK}ϡ    PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT283R1Curve$1.classOPǿwkRt:e41&3reja/???EpٽsۓO q!JyAJ^gSwr]a`w4nu\A5=gh	7Kb7l{am>k	ps.W=#$_ZP7U^1Ԅ4wmgޘC%
J0p-u	%wJ{57jIz9SXt'%{ec{}o+IjRh[IKTIT(+WРr,Y{gvDS~guABRC^fj_;p^샳K\(1MPt$pJD}OҡⴎZѡ?]
'ЂVtSFY
'`Qo햫c+szZN+\x>^phnD;U=AwM4XB9g yd%3m02]e:ѓ@auQq<(:
̼*ȠKI{h^Nk[Hs+bѼP5e=r	)GO'3۫*{eUVer^e]ȿF6	&)h?#hw\Fl$6kt!Pڪ/qudlJ1HDnH2[GwѤ1ZbG@odߣ.5PӨ@[_PK>  f  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT283R1Curve.classV[WW$LJCNBQKa`4̄[ﭽG}C}P+*mW[Q_lLPҵ:s9gG?
 Zx«,xo>Ff'l8?6?
$c񀘊'DlH1	13)11E@"#h<GL,pr !2Q*Kgp"2D8.&X4āT:#%ÁrATy}p,ё4ݹtj<'L&;:D.
OFGǆU7qobX/&ȒadٟNeT0.(f'c$ˊa"LA.蚒*rQg$ԋ\UY_XE8쓋d*)ISrҌ27KT66cE]L´"J,2-g|Rj2zaV1-r*oeVaYY!۴:ǐ=4^(%KWRee^M=
q^**YPT~CZʙz+i`cOt0%48&Vhv"=a)<#;fuv
K
j9CԾ'X-;-/JKp~FdsY4ge_FiaA/uxTpn0*(J]eK.:m<|<yqGGGGGGGÞ35ֲ[&$mϮ6{w"ɡ{w+G[k?mC%Aom9+N݃)nV'5jBOqJH|,V//!8|$O.4HM.ɠA;à&8A@7.cF 	^%6{AqCxiL0x$$SdNaŃn2(xH
L3<`ރ3,xpd1GMLΡҡ/~d5M)
a(Դr$߼ 	^uۊfp5N[G!V*i\r-|w|8q:>^Êy5,u*luZ%VWkqڲRp؋vruo _w,	;Lu4vuX|_yqZek)pbmkc60[wl-.fh%X-I8ilU rTw+6QqjUvܹsWx7yl0_zS0\%n's't_
]rv[.V=_o uw9ѝͪ6v8qt6D^br9n'uD_;X-*sG,ߵNW񙳁
PKܦ  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT283R1Point.classVYsE6ZyZ>t$}ı81!cl0&éHkgiҮ
P<RG1;+N)RHozz{{z{͟~_)>)۱ghztjTn}a._EUJybU-e@xԱDKK4v-X:˄}.'9_wqǷkvu簂4
#nuny:s3vUƘ-%wy4;QNJuήOtn^;m]2\]bޥʒwJ>I:Bѧ%֫Ŋ}6Qq/:vbr6y>smHϯKPUߊ<߭zDN[PZՖu@$6,[eEFTI|eOýp4<!ىsEέD}]>!%[HMb)>'VLoZx+jڪ/U$Oc~m~'\|dH_vchxn70j v;0`0:zzRi2x@7aCO43(ȡmx#xg܅guqH>3fax.&^bcgxEs^fx810pqSı2'G&2d8*7'w18V}R<Z}4}8?Y\)XxVtz(.P9Qib|C
%(q
\2*b8K
=?cߜ2{,
b(Z&լQ (O;W5pkDy\zjSڊPITa9P%aUа~*_eLsIb>Dh%rfN8O@SA\o)FdIҵ!F9%uFP2iX&λ)b-j!0eiŅ	̛7;H"
\2c6|@WqֈDBX("j&3u2F$D$(f3-W2KD|:1q>2")7%
Esހs#zb΂!
T9
$Z0{Cb2{?Y3u
WG\%yi"LdD531DVfY/uWdG)TO`\DoV)ѩna
k5asO	s7ҫ)	u
X
Z5*-UO"qY޺
f'Q:{XXOX9]s\;Áh&55A̈	*3S+p3.ƙ̡`ͭ]j]C\x
U_`%OVJ1׺YsPcԨ#̢,0*22\7qOѠ$$'+&8!f;RR4>v[;}#^$_Sk&TU$D4/ʵTGe-hPBޯýjG26/u"<5`̣ljHAqЛ=):aOJ:Oqvnj^j3,aEVmSx*ӈUcYmKl
ﶭ%)Hݭ{rI
.Vv-I<)=žyn]ڊt_tlhTOPKH1;    PK    A             6   org/bouncycastle/math/ec/custom/sec/SecT409Field.classWs|IXEB ͬ< 6#0NXbcV^
)8pɇ$UTTrRI|9;D]@_ї/D4OSL\O:=ss,P\ś3Kz=ZoHǺ
H0Y_^P\?lnv.()+sg=!@	ׁ2WuD fE0Sg60`ɮ?g:-0:=[[67F"mݵvPÃs[ۍ˭֑!Y"a,6:ۍ=D-jڃݠ
?fa
{ssF-c<FFи֑շ;&#޹_V8ݩV{ÿmjNQ=^k;֖Z6ۛpMG>ݨqwV<y#zI5C<;Qr!?*Vq:aIһ͝{w6~pIc jAcИA'
63lЬAh|z\ee26
Sʦ"
qRXTmZ ͦI2l6!FelzlQ֦L19g2Ǥ@909Jo[t~d"K'LerO\g1y
&7-L?f¤j[[]%&L2YC%.֑Vs4;׃.˸WN/!$!~#sG7T4#C*Q򔋶N
*ղꪾ2i{:sk难g2'tW`_0 ~F!y<b-*J"%{%(`JP8H6p"@DiW=q|UczW㘪^O7 r9)|O``$O`pc臑<<s͑ԧnEm^h+hU1eW4o&tO$@)?2N?kZ+]wlngoe}/	v(UHEU.(BN
ۀTTqJ
3Ʌ9Ih{`z-qY#}|F> 7RPET;UXpVrB+팊{Ɂ+vA.WrpF>3"%M@i@hF@SҐ#@=Ҥ\a2P4!MGTF'CԢA҈AI'ϭ`^pt4c)
N.O'p
a]^GuB/N_;~Wo3']KK~N'Eh=놥1L}R'dQTy	J@@khh~
${"$=&Y(],
CDB,P ePRgQH1\%L#DI&G=@ؤWʌAuBbW]պ'ߐ('Lc`ƢhOՏ/'_QJXS \D/qgjܙ<+ǐ̬ayGdɞ*<$;芬_wc<_0u4:8͒fe]ʑ&HVLBdѮ3,JR4uFa)঻Θbl)-ps]HK1u>.ޔ:WQJ"5q!'y_so?5녮+NwqcX"k0dIX$b)qto?	v*J@&dRN	ϙU&x<~kԄ	,]HQ-~Q)tQ':^Vp2k:zdYW

=Fcw,cw2-wĀlb9u,2qȥtY728lrYYdBgRT$L	BDj0e=TZz6b4@1LLF6j-rENĉH"dGMs@E ^$a-ycO}Hb
=[/C=H;Fda}}ha$Vc;f	:AC fc&
_ac#&&qVyLCq#	R0E%3:눅D!wBN~YucIE!/ZɎS/76O%S)Gz289qPUMr<SvU)=jxBN=M"/PK0K  m  PK    A             =   org/bouncycastle/math/ec/custom/sec/SecT409FieldElement.classViWg~L2IՐQ.TP"TꐌatH`f`kv7]_`i1K?_w23~ps{
o ZQ>hc6 FM:>#&L&dhCV
ԲN[FjjunM8OI <Ufٌ5LRXVq-MvQX^M-ZjF5(FFl}ʈZOd*QC5լXZ.K
+ACIaVLYi9ܙZv\5,v!-\5j^Txoe\IJ6H꺚Q#])u&(pH^Q}R@vӃ	_njټyȥ)ڮq%,(9#峩էŰj*iKW9;\1dZ&˾bOSyʍ$LRg=zr.ѧ~A{k6-MOt2I30Tj7ey*P4xV&MAr3P*nќwrrhD|K,մhVqe+W:JKKUlafb~\j=k9~Jh,aV	OJ"amKhP7Ψ)k?Àeh̎Ytgߒ.}AG"ѹ-|l|6~|V68\FM~Ŀ?De$Q+2v2T/c9$^XF#Ȉ3,2BZ;v13<ŰKeԡRCXc2q>{)/0`N؄S!C	c?&C*^FaDAga2F!0pa2L^b20tP430qX铓٬jtiڕXJl2:*y#Btn:i
W(
Z2M;x=jx:I\w/&a%Ce%Bo{9yH;VU,(]XAf=(${
~ƥM9|.c(*3jK/\$7GYnԍmjvK5>jahnR4v5J\E ?Oh|\ΩT}/?v:ѭ^qG؈S^_Dě1N0ɃMt%(Rey_#b	q$l2jEPr*PI.:W4>s)-^*{(~I^KʧK9H}unbHNW*D'McK[Ifu'A"už='N^og}o{gv]ߛM܋w#Y{̳zlX[kkX:;LC<v~q*'	W  +gZJo.CsoMZ/CPKVNZ  n  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT409K1Curve$1.classmOPwk1u*
*HC41$C@\ʕ-ִE"o4߃@?Epٽsߓ K< dPUX)<%1$MWp_[fE18)K06ǜ3eF&0&r&pqg)g6-arbӸ9.7u3|g-s<
kz" |[]91?xRKC\>or?Fr*IM
=V%l&=(
4
)8!K_ߙŝ"Qx^j+<SQ'WRԥ=3J{3h YgܿPLI$T"*dT x$T9)\Ph
ԖBIt)EΠ.3M}t6-ǫ3#¯8jɶ[	AǸg/\Z:\pGj]״  Kܡ%tڑq1\#DDqFsL
28LNG%3a
3ҡSC^CxAt
\֚^v'd:)Ϧ
ȥtr8xbs{MS&EȢLΛLs吢?|?ip
gD$DGo>"eH3mД\DlɓAHBHm7i6p|7::H}t
TvJ`dאˡ1,QuhwPK  k  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT409K1Curve.classV[WW\&	FV-!	.dj
[	343k羵}C}P+*mW[Q_lLDҵ:+>>?+jN-/qpL4}JO?41+Sbg=X4*&bN1!v݉xg3A1FD︬j@;<:"rؕcx*'/e8?jM$&8'Ld(,D$k61RmZԔ9Eh0C@e4(5LQ(
Q6rly0l/u8d)	IU2RN2k1iJ{Ƥ
5Lu^Sh9'-5T L+1d*Su[.o3iRfXaF32yjZ1(*
9jž4D1vu>uݏ_5)Mi˫1Jګ҂TpcTtSnZnn})>eZyJG}-NBǤۘMrIŌ"ux$lsxUީұ6*/-FF$+p	HRE7#gML{:-̒i)7~A
hvuW^GG3<8##ʣG;1<8zڲ=\mݔ#;T\۶L_D?@fq5na'nSlvJEKy?&j,l.{f%zC[']Cf|U0PYqMXT'eTJԖ2Pvw+Y֗.#
"x6@pA50;1$m!%	/zǈpNLTむFR	?Na«L\aBbb	i& Nbk1@sL$-@D>4 p^
jJOЧHZו|BLSWAMƒkRq 
>ZzN;Cz'و$Qm^*˵k8
s*>\p o\Nf;do`1\>`!px58R@l0RUFЫ qt}?ض:N7won/mUMoIInsv;CI3z˱RkA̶Cfz)Z7iYGXyÉ%aX4osUR/FL=;6Wpd<n\*5cAH_nٟ{ݮ.[m'Zy
}{\
:||cDM/_t6^^sĩX.2C`}.0)͙|Ǚ2>uiPK)R    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT409K1Point.classV[wUL2dzPbZVriŶ:Mel2)i勼P].	-u9eIh]lg}w~a| ҽJA:1ڞ=p6;]]pWފ_굋\:U+@GR4vmBmX%&ED֙Z=kǵ'Zi#g2WeZٞTq*̖D3UYWzm]Nۉ
FTH'o]]b7eתdP2=K3LZZ($ڳOGtZXe]M:Pu=r}Od~+;SuX$?Ӟ_ࡊC/.x~9fxwyؔo{~F+N3,@y<
5<1
kxBwEK^aT{rKڿjn*]Wk.v|Cq;Yَ-oG`S2-x"6C=íg恤%_@@2
DpЀC=P
dɰ)66óCCC'C!$C}q#{x@C p
<c:rxIg80@c( Cg``dxIQg10@/.0\Lݓ0(8.xt}U!׵kel-ckanĚ6?(4T=|6G
%(	m\2*8&	֎_q`RYƇ6>[
D~uhT{~5L0=B@"K"_U;JC*e̒Hha)P5aUPS\+	Hd1Bkٹ>Zܢ#e8qބP܎
ZI
RY4
}'u%r%|0f`=5N	0I{,cьܧLLfȈs]$%q2
fZUD$)f=J0.W2MD|:y8i^?ʸ`fȍȈ,i*Nss/#8% vI|	Va]b*1cn{7GN-Qr"l7+6rjv"%s
N7&#"5v7L9=~Oj8
4<`n(a)Bz{%W+w@cF]ݱM5|9dqԕPbGB~m*qrl
}L
j833ک(n-\	mzrBիGqPjK1f$%5-JV+J\aY
ǐW?ăl̝$	+he0bҲ>o)Z5d%9cOrDֿCƔ9ׂ)䚺LBBffiPR=DA:iwzzk7FM߶<jhcaN.y*:X#25|{z]7	zMjp6Jo^
v#2ݣ.KH]ֱC_A,~c|PK"4Ow    PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT409R1Curve$1.classoOPƟU2A@A-c؁sY $|\BiI[4F=oL/0!Y$Q<m.{ι>= q1yA'o]o20;)nrCtE!EnVD?wgnqaO[6up4zvYᗫK4ș.eǝ5E|lrϷ1!Lִ׻gμ[x>?T̠%E@s̱>i.dp?#9J&r6	x~

N(8P:Cޙ?EvԱ_xY)N.>:H5KQ(G>88p>b*N!4ΪSQxI*hQQs*RBE[
LR
ЈL
M)Ȧptci9^՞~řaPK-ܢ=OxZ>]>/|ґ͹aVz Y-ӎ󈡏VٺL:L:rutg6:#q	J̼:̠KF+$N
Y{4F)^a*i4,MtRSVϦ
ȥtr8x|LZ^N۟292ٮ
BmI(hf
ψ%ޯDG] eH3mҔ\AlSAɿnĶqr7:I}ꛝ/$4d4fn"WBcY.5RT9PK^  k  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT409R1Curve.classV[WW$LV-!a&7V;d4b	^[af?з/}jE\Z}?>J$]`sg_}O BA4r.=<p>Ʈ2lIP$?KLBgr*ˤ2T2Rɸ$TQeDUNIYRJt*#~IRJ6	Y>9S1'TJs,(X/%T9RbJ:חX+X*%QL8륢YtPև	:㰹SF}aq\Vmٜ*W$	kuvJFtVsf)j(MJƬa:ș!a]1&,P[SXeݲʓn-&eCsEg6eZ֕mD+aih:IC&S.l*[ttiӆW(^̛SEM7JHi<YK+娷4D\'E{\4٢V~Y[*H=U,
eڎf:6*>OK2Jm}{5Hێ5iZ0tv4.հsXR׾K՗:ٗSsʼS,E
˲=n\eYevOѤ3\XJ/hych5kT:m<"<zyqGG####a೎nm|}um[%͜khNptWg(wF֓LTWGrZ^İpmUbà8UI
c+YZ%U7U=KK?opj0
D4lm0Ҏ0҂aP@lG]8)oHx]+4aD8fmQр,.6 1FddKhL0pSCa
#"IFT̆p#s!tyPSyz94vy4JImvS+'r!ӫd[7iMϠdh5z#-|eY-%,F"q,a!B#6>YuyUxKmYi_}7~lik;EƼW]]
jn4L u4n+pԾҵ[N
/R-\]?t˳L,7 ;ڳn{yOe+`xtSFi<˸n<V/@Wa_7{:j]U~zUgm&Ok9*ܻ&|KUd;p֓ AvRv3}ɀ/YQ;ڳtߐxo\Oqos
ȮN2>V&=DW9Om	Rن-]\ vGQ+]Ee.kw F@k@7PK9̴  
  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT409R1Point.classVmwU~ld+UJP@@X(j[VhAԐlJd (/?T'G:wZ#$ܹsgΝn+JAiOڎ?Mc#
ΌsS\*z~VipdxԶ*告U	ZR,I1R--/Qb<EL\ݭߚ
-hnva׭rfCJ
4ՅyNVc r̙}\V`DRSo8m*i:^?qۻ.j{:lUwpuzj+[^,$XE[+Duu<ۉWvܵY$O"}C<^,
xiGU޿
ի9,^mX
Hb]Gm_8_K`dAʛP̷\4ܧ~
hxPCVx(ݹh $kIV2^Ї $6Qٌ
oFh[r㥶ilدo]	77~?p14>3
0B1aã]8`
$N^CaCC!v2q@A0DAmSL=m<##:b(0óq02L1/0`be8pU$1/1L3bx%=8Z0100p$)Q_w.ƘXJ,jSDqaxb!Z顸@D
x{+R(4YB7qUʨP(sI(4@M|*|hT~Di<A\G</rMk+TڀM"&&K/	3`SV*cK8J#4C+hDĹ54w-݈,#I"<(ȋFA.DZ|"onXZfscdq~)GBo-hhjH͘
ԅjƅf&2udD5$$12
fɌB̬')$	ELt.3/~N~L̴H7piM3CndEFdIh*60mb /zH\UN/I"Þlx(6pLU!WkE8浵ƺxurD`tVD9~KY35DJ5/=pKcCCAZtG`hثa\S-
NZ*w&'wwRCOo^MS	vg(TX=,,YO'J\9T`4pz&jf3b
;
|B㌋qf4s('Xs+b@b71^CXɓr.tԘ!5(.0-l#4A$݄'d1RlGuZw#Yڷ;E5&lA_GBD.k\AuQւ+q:ܛxv$ccP(xP'SN
<jHj+ٓC:O$gɠ^9cͲVD/nv*<2XA<Vn]Tۺ'gke7߂2ޓ+֥HձE_F̆/qLPKi㬫    PK    A             6   org/bouncycastle/math/ec/custom/sec/SecT571Field.classX]pS>EZ%0Hj@@81ÝR dȖ#7'$mC۴)4/~hIfS;}kyK;{$9{da"Kg~{ٽ{}=(;@yr,ѓcc;%v.:}c;Ge{":D([ČJ$=:gG[Ƥ` y W,*È~@2!J߻UO92qChFzT(]lcF,l]̕HMz+糕<$m_NLvȹri`l%>_[>lD9Q\q|X)qMWJ3s8>7ܐtمl2aO%}:{!b1>[<ZsBijz9t>WY:8_ L$>qљan^i>X*wϖfs|wgi7ssҌ;|nbof|k]\r1'v8#Ӿ79i/p=qbZ!C0{q*_;XKIV知DӜC(cUfΝ+۵j?|١Q OGk7,hDHK3⣡pڼkR	Ӧ&
H21`
x ̥{`I^|;wց{R]Cpk
!d6h~P6͆GAa'6dmxl6y "6tCԆI"
]Dv 
=0/Cނp΂SDfyH<
D#r"y%"K"g@i"lA&2CdPi
Kcá|%;[9-.{8xvn"{~?[6AsC'ߏQVL]xT6=m2``H&T­z5%'u	[GXax@I10u1-Iv#qQ5p
#%(&Gw\Ĵc8(AL2&jJ:a@kyi)A6RkU=,I^
QB̬;@yHlQDL F' X+TfGP?xG`=(u6L
u8o})/;zɑ7jJJ/mh
8ߏ0|:n?qjKë]*3	W
J[:fS5;,*Bڥml[ˁi1p\Lj3UBQp0(T1v6||
<ҳUՠ{'\ǽFk1V/hO*p03jL}R5e#;	:|8њC*:|6Vv#t;Š@jVp0_ݸ[ml$#IfԾ*Z"i]KU1ݸj.lpjq]ftfdOKLJdNXx5{{(wGHa3nb׌RŪ-
,aNqeY_q1q*8XJ:<(jWiaS_0\6
U%4-IԚrNL2׷7H2[dƖ_jMw#7yhWDf3{]|E ȢS1ʏh;86R6|`oBzSp;F^jt		+9s#&dvetn¥b-":"ˌhto)Lω:\XiQ:[%^zqQ&Z7ܠf[%[,n1vbsk"ԂMLZ ;	E,/<jpkUG<׎
$\\R,A;HՔ⦰qyq4|.t8:שO~g?lӅ~8g?#i&~_&STjS,(Wq25|S@M.pu$dVy1.Hpl
529 dz9CpdGjC 	!V !Ȗ
- 큷!ڔ 	;6ZmJ5L{DQze}w)yO0eaN7J:%cS=<q9mtfc4Q3 Q?>Uk5Õ/|c>.aWcd?#?zq),6&ΰ{I0 1|H\u#~Xc.6%b𶐱1Ho,)͸7c[U0޸(gtoo'|~Y]z,nǢ/v+	GoCxik{HwG_}C>r-]F>/߲$8SmZISJ+|%q/aJ'<M77ǽIM&NxKqo 6_PKS~N
    PK    A             =   org/bouncycastle/math/ec/custom/sec/SecT571FieldElement.classVSW-d OkP[TCFAڊ,Hjj$KX] ت}_1vLK?t7=g?8ιyݳ7ﯿ؉|8OA
ExQbx xlyđdH%Zț4"lأe4q
:)@V#Zz4UO	(x>%EjPFcկfJbw
XSPg-^Rڌ"Nku:覀q#;_Kf,51ZvAeR-ZkgiG:r%9 auPM5c)P~>>b(I6=i9 -'W@̨E5.KfF6Rfd҉^]Wӊis{6N"WۤIŚHW6	(wTj$KCրəCF6Kv=2ڢlftb,$TªDwݾn]X%s̴M=՞ۗe'sL.{=TIC9T]ml4=i`P< ќY4
ʝ[,l,#9HsXU˞0scvs;TگYl/yVarYٺEϩu4ƳF-$Y	;%쒰[BG%<&&gRV	"ðeht"zhH$.gw߱)*gM{DWMVĿ~߇De<* `(_dg8 d4",#ΰkd,223a8C-dTcm	r<#c#уc|v)1'ddCx>>̄q/0(ac.q*):$C!00`2X93ar?pE΅4)40ah,xܛɨFJO]鰥$O(S#ʘD禓VOz9^ |(!W:~\E)+J:~@mc<>}KXA!:^O2sKe:bqa88j)raĖc\vOzEeF3|Хː!潂(ǞqdiWo87aauݢQnI9(Gr#ug<޿cMΩzjT}*7/wyA*btmIIlI/"q_M7h53>EkQ͎"E{0"F`FV(P$	6'	eqq}oSu̹kۻb7]'p¡W9ݒ:= $;נ[Vb͑@%J%ۭT*׭NMp/l]WUfԆK}sqx5ѝ\/,^s[W`{V-F޼7'n[е{63/
vm;L}<v~q>'ӕ;oHf-^Z*GnoOy~CtPK  M  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT571K1Curve$1.classmOPwkmVPT2tl>'fdH!1KҚhF{ߘ_h"B4hx"(Q.{ι{r?x@zo5'$wjA֧ņ/30;in<CtEnE#3xgXaO94la_t[_P_k<1"g;g8yo	cuCƕwU8s#&̉rjCXCX]d^+Tݻt\qI]ο1r
˭.K$L{*Ph
(hRpP!B=}gU~»jvg8h'!F]z]ߖ>:=o
D8϶"ǎwSьPTdpL'HCWI*RhGw0
4Zъlm4m8^*,!۴aύ
2Un'<-Z._piio(D'Um&i4@CK#b8K^'Yl2l2پe+8q	J̾*̠KFHY{Qc/ə09j4u<xZNKLRK=G1I2("2i9x暖X^Jk%\
JCIkP?#8,o(%:})C/6-U0y (y)X)l8n>Rf:F,|@;	l*0:8s4KE8O^
;	PKa@Dz  k  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT571K1Curve.classVWW
Y&	FV-!!$jjX%b00C3^B/P?񔶧[~o2A,IO{:'w? /]ps&=oK4c/Mv1p&c::/
vw&`_4Jc`7Po,LcD$
&d,O%{zzSPO<Hf8KyEUqFvgPp2JG2&j&9'L`J+Ғ$F^̉l@xJɼ<' 99xDIu2)*ǋB(ZCҴ4*iK0}RA
9.JrFÚv8?.Niޒ0!b2WdS_hjpeI3FA[+hs1e& ȆxFY&˵M9EEŻ,EA|4<]bYR}H+2yPjspU\KnAo w\SuCT
Jj%;ҍ#56\ٷU*⨘X-nhsYbH9p	W?5X/-*Qp8Ih(E\MV0ts)*-̒nT7~A6:؜>;/6<:xqGG' .!a<(=OZ۪uĈEu&:36l*fߓ%lnU,)h:|m՜m?ZOS:|Ky҅0nW9*"PJJNuX!r=C۩7K_p0
A@0$`#~FvaX@#)'#&^3ZqV⼀\`,#nĤIF
0r)F$F=8YFyŌq1z@CV12)hk<HC`Wlm8}zUU.*tmD,/"Q	l؇3ՠ#>w@")&pU_鬟V
nx>n)HD־{W

 
^
wJW嬁b\kHeWmS^pXǈo)k4t´[@XQz㛭';eϘLKi)[oI	۽d}޶؏K^
]&B#˖REk'.XJGWa9gqiÍM,-qsmi+\9ʲCel%y=ea3.Z{1Smq"Fg˷x@JW?["yxn:lM7wSYK}^{j΋Nz]؍\br	Q<+XB2g~+
RC[%|bwӖ5 PK\q  I  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT571K1Point.classVs[G-JW_qicٸ	
mGKR	섗"8je)(@_q-/@iG CfïvR14շgϞݳ3=XP߹_Γ5;Oy+E`]p$W<gA
u:9R(N*өR9gNgztpei;_~P2<5E;Uhe91dr*}B\6#ԡ|ٞSvylޞH
Zͤ怆V)ET)TE<?Y^`J*WRX#՟PtΟ-9dK'bAvN88=+gĬ*f2	hntX̤EivZ%y{J(>T.{I,O/SrIܿɅޘh!KfcT\Lû5<p[L\-xNN}=M6s.{dϺ+5.\68mYPnS3"7+ ]*Ȗ}/pJ	
TұSGn=:>W:vi<:rut޻Iv㾣sC*ebcvw>8'f9*w2x禍vxCZw
ش_\o_FDiKDȄaxO"lLl'C#4DD{3~Gg^	}qDMb8a!<jBaD'ЂQҏh&G0q%|G𘁇1n c883aP&a ''	%<A(...~L,)Bp4!@p&d64ap&$ $| q!d	Or<@!#<Ms(KR1v1KJ1y=9:;:eqBDjOEӕYp$E~BP%\um|hgM,4)ФU/%n1ո<Fv*B
^{[Y͍Iw[>1peg!]~:VݕĹ61pG!zԮvWh^zok5FԯAV"l)]N?$ۀwK,
˷EZ/F9 9&W|=lq/ePbBLNb@JAOW=Jem!L0UCV2^"*ZOVYDpP UsҊ\U{h!Ch^vU2&&vjjQ*Z2VդT++G-Re]tejW|]K)ڢ"[BbxP\&>TahV1aa[X*%`mU[Y=ZOJ_DG_!$>4v8.XqPŜ68aZ ͱ~S5
NELsNU2~\:
$u\uCCGĞK*&U۱%,R] -F_t$ߔ1cM{Mp\eVW'MLP)I!>ndywǹ5]ws)Y'?(9ٵ>ItKtn~c~SRi0C,>]c~iUWT\T4ʩ̓k:	yҕ9'DtɤOH{s#̲1f abYfU	 L)H08TwugAacH9pٹaj
4J1,?ǚFOT/m^br.7jr_|NЋW%-;dD^W knBnf0'EH{qxY.Fe$a-+|_E7&ǹ^Zn%(t#x4yk0'S#ڠZ8hۻYzѲ~9#hW쮇JM<Ceml[<.1L>eR|xܨ1+3$>w@PJAyG^PKܦ,  t  PK    A             :   org/bouncycastle/math/ec/custom/sec/SecT571R1Curve$1.classQOPwkm-T**Jn:651&3\ʕ-ִ/a|11>`"B4hxڢ .{ι{r?	@	zo-$5Ys-xL\lM2X)<P(0$MWp_K[fC=qq>㓖`m:Mg=kʴG4TsNάm>4[~qe]nտl`z3cxօ96P)^m
kj3" 9[;GǕv]dwI$I9nu[&aS@SЪ`6YշnOJq:uNB!E]zSߖ>:="lcǁ;Wx8CPTdpT'H☊=8"*TtЉSt:zhFridLgҴOz":Smr=="3Šl[U{h}|F¥#<R]T Y-ӎ<y]d%rK0rK(P-[!-q	JZCJxfХCu$N/˙0%9TҎ=z^ILRKD)I5(2	`5-5gy!^~Y/Q^).'NBA'SphľH?HWfTCn!hz>D	u`!0bhL}>=t:	,,~Del
J1
%~~PKȲk  k  PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT571R1Curve.classV[wWƒ<<vv@)rZiF0K"Ǳ[
u\p㱭Fq5c'N6m3yH:"b-GܔԊł,;Ͼ|g9O :d"Z!OabuũXÜdrK$RREE*y$ETdPeU7QJUeE+CVn(J>/UuYJrJdX.*rKRrzA|JN%dVf$+,_yRITuϕsJU,R\uUִbIJ^+rAWU s
?G,	;{vFpEYèKF?Ո9Du
EUFK9-Nq,N첻X;M;aYѰ+zް4EcrHe{x.ec[mrU庭r7wJZ-mմjOysI9n9+uհh8r7k6l?޸FhXsVm;FŰ6OJZڎ0.xcNw
yhxn4&WmQkǻ盎qxZѓSW=E}{ bmygK=T/{v@-JvrÓlfvX]9*UZ̍z[nj8TϷiGmeϮii0<!xyxyx<O^сVڐcZv<i:kYv6KOMX%"Ow8(	21]ߒ;%:JY;v1YAlkV8t+,^RCxhEvWo/)9CQcp2xqep0(A\H^psl.)( ͠`/	x[	Ta&p$pKXVV1XgHBAIxA+I6xI{V5ILa$c#i89a	p]
Rs6Mϳ`fB"F8x.jGA{,h.qHs]B?̑ӱx*w20=2]\⻙[xs#e!z.>ۻNfϑ.^Ϥwq.baù=fAo?x>cd#Fވƿ

IDµ)pnZ
#,'~p3x9T ɓJF)(B>$j	ce>[qC/	k]Ә++elAY#PI%;Tm:N'RNE#X?wxvWSg?Nd,:^%{^~ϿCm!sb,A}op?T}qoC/a-(3[J\7ب]\Zi6ޤ:RxIx
EEt|_PK3N    PK    A             8   org/bouncycastle/math/ec/custom/sec/SecT571R1Point.classW	W[$==		pn"Jz'
`H1]ue+kmts]t	!qb⺂Miߐ`oIM8<}sΝ;wf2ύ!o[ZHzlFcuh0-$t&Ԑ!)E#pF+9sCێwyШFUvl0<&%bHOuZޞIf	+[|U%R)^;W<5U>4r'VhڡWg9S,JYDt95'xh[yVt:ړS+9qSϜd*ҹl|4.7j!/ٓ9LJ)+emwWlړ.,srta'2de+IVʬy+Шβ+k	\~"Igzԓl	=_[\"uP'ž=xGT,0iER1ff&٧3É;=s.
W,oޕRSIx\ᩩDaeoB;]T,ICސv얮V/)SNЩSuڦv>vFHN(cCS҆<Ij@nsgٵnmYs9kݢ4ҿA	uD7h˺7oMj5X]*/+1a M4jL2q<L`+!@U<J9M8LMI6S=OI -V@´" p/`3`>5h#X&tccAy _>|M P%O|	eW9w= & Y@0	x
 Eഇ
?H, e 9yӀg _<xRCC48xs1cgV'(,޾~8=9MX|
#3Lzr=ڱ@x?["LNc$cdö&иJqD3/E5-*+AX4Cl(S0z{!%)tJ1z":-fEqZjn:o
ګT_աh.0;fQ}8@שu] \J>MDUvV>Z~D<sw6(џ)u?og TiW%PE{ x ^)\%<M6K^B_c>FXg>>ju5D;V8fE@X-&:UաE"&X5NS#ܺyocy5ۘzQ.g8kM% !D:`T.>ԁ?/!,ћ,G/J
􁨇s0e`+<lEM0UclɃ{Ha/XD4HK">[>Y̔(UuҸ2WN7jâIWWVl[$7^-Fo`rQpߠVϟ&Gt0Wݕ1DӫxakV%A8nri^;DRAtvQ.B(5}4ƭ\)
GV7-v*g Lܠ@v&^Nd)'(dat3[e,cF8%\qd9  N*wGx&𰰷+NĊ<S2WSG!4[iFeBڨ2e'}UpFЙ2ޤl^4ooU豫yYp}7wcLSb^oPW}ݬrɪ,WU-U*_:z9C&fcuˈUp.V2ՠUgr)c$kq~R=]\ Wg:^2CMahȲa4sŋ;x=/*;y/ЛvS	9dw__ 	peO)dkwrS*S],fFɭAKFVEnûD
/\-ʷ7wm7;y;(C>+D&{/)L_\:V*CFB/3ޗZ_}PK#H  A  PK
      A                org/bouncycastle/math/ec/endo/PK    A             2   org/bouncycastle/math/ec/endo/ECEndomorphism.classu0E $$]I7n(@5 ?w9INxbALXʝ6 :º/
-2?zU`0%;浒ھdybpbpS)sg|DkC!0#ldp"s`PK|N      PK    A             3   org/bouncycastle/math/ec/endo/EndoPreCompInfo.classN@@F	`t4qqӰ0Ȋ})#NCoąCPht:?ߙ_ αTKs+Cxmʁu!a=dI|_B|zx:6IwPo~ Za7K6U.DHXёb8Y^7ŦQs8Jr˕].lI<4#g X
Ylvv4SH1JMoIkt"ޣ;v_.
8xb&kGo(N&x9xaPK|=!@    PK    A             .   org/bouncycastle/math/ec/endo/EndoUtil$1.classU]OQ=ݲ]tEE(PR? mjB"H]6݅O/>`"41⃿bTK[33ܝ' 1-o1Z%7j,ss=|)1DK;E֪e˫0D(dTZKQؚi5n Xdn
|iosbez>RXJJ5gv02B9qGh'So<wF݊r0eP5nR
TzrlӰna^Q1Dc<D8JH$;;lWprUjl5ۂDA^';Q`wrGnl+Gal|Zl*S+Ϋ8*`*pQ)qIEC*NbXE*$P ƅI)CZdFfJ!0"FR-8\~-2k9<x]i`ѕ~hlA~b1Ӥ=;GDS̤2;N;wdE:ECO%Hl)Il gz7XJqIb..MF\ڦzw"Y}G`qTcWKb6Z,2!%,ywSh{d	PKnU    PK    A             ,   org/bouncycastle/math/ec/endo/EndoUtil.class[sF(
p)n6_	ĪĎCh6]Y,{53|~f+aځs?ӳL;w97p^X*]sG*(t}WVnru^aCFC^h+0l]	^PpvyY@WiV7xhn,劂$ˬj%B;#0TVF3+4s=f9Nn~mZv?b+NC:Í'܎6CY+oN+ZVeƹ
k0HY\P
EE,T+	Sz;y*:+,`-.x@ot~sfFtŶ4eB-nحV肇:xO:t\qQǇ:.鸬`vDΪsGuS(S(<-ԺnR8kmdoZt$-Fqltq;e~F"M~vW0zdZ>8My	
1WH`	%Hx_c\3qMg&pDR	
&>Ҹi*2muo%Je7wp"e [	Kk7
fFW46Kca	]wYeq>FttS.TO!6iIyo)rhnNQv+KϽ^EjjvF*)ü&
|dpF
XRx0yQ3S%y1Ï'v3GaOup!=V+tZF;=&92wC#Y)fئꅧN3~Цo+oUtu"Y' PK'3    PK    A             3   org/bouncycastle/math/ec/endo/GLVEndomorphism.class}
0WtPP)E┦!miFWs|(1tr;wxXcBJ:ӸV'*qVcV)K5ʻm7"\IlxK盢l
aߧog<;|[
J+Y\~#QC0PK\{>      PK    A             8   org/bouncycastle/math/ec/endo/GLVTypeAEndomorphism.classT]OA=(@?YD5&TBREѧa;.ٯlH1QƻKb⮰=;go?1CP܍ѧkg-axuŎm0dہ<-W
SAraܶg%	E߶6euxn[%s~uz@aL};tcw-tˎ.QGa%v)^	K~Xf) ܖ7ȼPMn6wC~:kſ9ߤՋ"ɧ6c~b
T
4WdL*bXl&H8Fb!RPlF?-BBR[
[84 pԖ)}Z=
n1qߍ].}Y+!sAU0[`Fq;\i]
#XАq 4*f"YT\CY
,HoDk	,tב"('"4]]jϕNRZٽrSG1ߧ)qVjsN5M!Te'Y82 PK   %  PK    A             6   org/bouncycastle/math/ec/endo/GLVTypeAParameters.classRN@PP/zU44&4}i7&&~e|[1\{&_ NːiY]Ej38bC0ԽH`j_<wtySq?E#J>Kȋ}Uj'LȲ4ϣPwҌT{HI_&W"]9 ]e-<#j9S5stk"5(X+ĆM
"Jآ=}3i%u5-N+`dNC=
ض&ۇ4	Ћ>
*ZŨf7_1nYT_?PKC    PK    A             8   org/bouncycastle/math/ec/endo/GLVTypeBEndomorphism.class[OQ-,,k)Z/(л6H=m-	MM ~(Ҧkهsv~3g' !/S13ٖ0\s{bmߵkf#EG#dMH0Ct+H]2ctyn)!?ŝPa;{'IK6]]z^?C.	F#I\AfOC%n^ߜxwxIfB
tS)op1+

f15cR棹F()/4ï!P9wSX%l`rTiFđa9az>F]yTwcx+D8kh֊#Dp75㖆$IVKpWV4:,fMUdPTk(\`
X!tב o'E>EGvv:#I~x)*X|_*ه~S x8iY* ǣ7<<P	4%Ӄp")PK2  !  PK    A             6   org/bouncycastle/math/ec/endo/GLVTypeBParameters.classN@O*"ntGf\h\h\4~NjIiIMx+M$&.| xb؀fq9s;|}|8Cma++`0:*rIWIwQE*#Z_<8wn_zHIMbo쉑$ȥe'=)*܀apYL/Μt=tlZmk~{>s2CLRF
X	&6uҥ^F׉/q@':IY<<A6nt^;v	Mx+"2֧uQ/ohL\gQc~m PKAF    PK    A             9   org/bouncycastle/math/ec/endo/ScalarSplitParameters.classkOAߡRj&vA["b
D&dvi
4`$og6$?99gvo ^?1sJnTˬ?VT8ɱiiaXS1'
m9*D)Rrs]mدpU۪1iYq;h;(9^Rv@ddL*M%c()c5*ܴU^ud|H0^vM7|C79M6oմLjꉪmg*}jnceb(bJMphvm]ա[5	Yr;!}ȧqn1'iZk+xb!)wgŻlﮔmա+/*oD)!
	L
6Da RH0C,01 fHIE{7}0PhWQt!"("FjkIGo8:(]4@1VptQDT|/Lcj3{gȇ)%	Ny?Qm"8S%\3l$îJD)[Xn5)%V9)%VRei$:7p2R;^ўvc;pO{c{+{>Vm7PKw    PK
      A             !   org/bouncycastle/math/ec/rfc7748/PK    A             /   org/bouncycastle/math/ec/rfc7748/X25519$F.class;o>>Ff
0F6̼;FF7FtҼ⒜TĒddss#SSCKFM"U M!R[fjN
;;+;#'#s~J*#g^^jsNbqqj1PJX3po*\@ PKEƮ­     PK    A             4   org/bouncycastle/math/ec/rfc7748/X25519$Friend.classJ@c/jSN(غpbib(.t:֖@ˢPi{;g,'	j`U0
G؞]\:'[*>G)yUJ؎GzR2I-ez'jlv鬜#
L6_P
uYpdBf*hy?N
Cw$:,^*asZ´
	/L8L329`o
x:<Wa PKC    PK    A             -   org/bouncycastle/math/ec/rfc7748/X25519.classUWW
3daC4#RB GTH@Q
*01:I+Ow7nܸ9muB7]zz<{ah߽{~߉IW׽ 	B	PbM1Ls2D 3ҴZ
TW94`TxYK9|?x1N	;'Xɋ!Z91W62Lcn1C)X9Ӱ͂mxҵԙΎyҟ
LZ
#K9̑[&tjNg%)c|MeaN%rjQpфm[IÎ8`Z|*жFgZ&YfMLqÙk>]k!?K97mةf
hmEFJ2e#݇
h~M׶uSC
߂#ѡJ{^2-Sv4"&I9_:u);lJ9)to[YE*y1we,̊gM"GFwdDe8$#&㰌#2
o%i"列d/W-gGynW@OMה{O[Vq}xT *aS>Ԩ jUQPmء	;ل ΰA򬊽Sq)8SW!>Q9S2
Ncc.2\b0f,I+
ંaL0\S0샥~f\p@g6ՄC=;hw"oFA%&NQuHрIU ynM$kLKK(X~#ǇwLwC_1iԥ`u.ZS_ Yz I|He/jV<QȼA{#䅀oaqOM3&_7h)C* wJ,@֗?^2׼/ږbtHo(-5jF踍KEdGD_qM{<䙶AVG}`⽝bh	NKՇRxNcr=fEF9nq')bR5\J@;..DW6~l(4?RoRWgi4Ѽ*=p)"G;T#r7{uYԽb7Y>QeJ0z<J:]ktUW(|ݫH2UI ÕҴ¤FK@fR/e"~&+${~vFծkcZVۻ=A-X[ZuX]y">^4sH5}hkdFҩJa,Tj[[qh2N[+3NmiJ$7m߭@{ܥ<I:5H!ZQI$JJUNoT
m	|
߿PK\  #
  PK    A             2   org/bouncycastle/math/ec/rfc7748/X25519Field.classY[pu<wv;X`.@ 	,	h J${ZI
؉JG[TP)W*w>SSWFG}v{/c'ُ_#_Lc-k
;_49}p\cZ L#>@iG]K0豛	futIbB4irS	$рHZRKqc<!,Ljw (YA֠Pb:%]]
I@[4xR!L0j>]:yCVhF;_]Ms:cZu	3]]Zz [ՕnN/<%תjn3<$N~ŗKV57i[d.ߨ--D{z?W]x?vmz%3½2Lx̅67&si[.L?.+kK_.Ocphh˳9qao,{e~h[6j3wiwr2+-߽@{!s&ȔNZ^olt ˸ly.{e]vqc.d].H*˹l]:+lwYveocI 1 Nxe/#.z\6Ď
knر$a_ æm,	|y	!%V%px@!U_"F}{΋PK_\X^.\ݥ+/^4d;zY ۬;1OcEW8 }0&0៳L^PO2xs~KW,UZ/I%~(Z$@YNY>-`ڛ}z%f-B"DJHXaɏ"AᛕW"3c.4E(K;?y}X^<na-i֭LaLF[;?bZC`-3xH|D+Ia|)FCo,4CoX-l2
=%zɾaVl#8+۷#,񓂀I_/xz!뮍o)Fa'ۂvw0ܮQ|`nԷ|SHwB=F!
M_B7[o~0;ya%o*XְA/⤂SbuطևM
D@GYZQA뚩Q ʯg8f8g)D!1
^	s }2qg:"xSu/
2$`yN"P5͌=9.3$=b븮xڬ?/vբ*DgT9\Ib
sVd)y7Z"In%P+BIyE<)6S*=j\I<Γ=TJE@PW*R+xNEjRE:ÜVg7{ӛLVUDG^A8X}$Iw{\"<%AOR>?R>[l7(ʛs8}:0wmǉ=g^cuTveݑ6@~};yݷV=D*Z<-߀alH>$+Yi$gd+ك*6:dl|#%JzIO
ty8ꗱcsy8贘kXEr0o,;n1X:^9>Inl#;tDm0Sظ-
O]k#v
rz{oV|ܒwyjh'/畁ai-gܹj`žV/n?~WCg6Zz 굾>)Ifra(6tsjmhn N&sǾgb݋ʋnmTzL|W4XDwc9oAe&ŘEfn
\Rsq}c#1[NWE^^9[Ax6&o#r
r;od9A.Zn/i$.deJ6E2c-}V7%+]2qbdl3wYlSVlڈVBSE*Q-ƁFO|%̍A$b<B_EGL%*ttE*t+"@L'.H0+HC\_$8>,.r- Wq#
1,(xA@
I)@| $\i!Ie:k +mk`I,%0Ȁ
aJD	{ 7VLA0#rYIh6%
1$a	4:hD| "$¥2ڮ KdXqHm@ 	|':XeV>DR/K4(CX
G}k8n[+w_+teť.'f7}\X~}G,5I`8~u)߯>*^pc!^pgYlpw<?	Op|&v~dz]pq]!{xjr#J×xDS~񁘇wxC5&"hK>	M9>ɻ\#p!`6Y8\I	ݤz@2fES&
e'gGlPW+Q=W"Q=k,Ыϡ\R)?zV0žV ^BM-Fw}/3^ZE?A?/hN>ED3:@1-v`IZiZl(D5IIAq$:lH*p Ed"d3HAR5ltAMf8 Jh>LX_^\7~{sE2 t
 b蒡710
F dMdXMdM55ٜybPF.c<N- mE-D?f~e=U0nӾꛀF9ܔŘޘ-l(euFӼxYR3@P%Z",#A<a #
oc$a|OvSf p%0*׆ DV)YۊG)		# a ORv&d{Afy?)D9Gj.Gk<Zy??KoU
-cRGG'^)u#\:쾎s:^3pzsT)>%+|S~wx_C5^@<sUޥTQQC9_L&20Q5&εԻ)nRL~>;ɰʆ`2<oĊ(T|J>Nl~R%nk8huvL)BeQ"U(
(
&Y KH	:U-Gٻ&P%0"X!U.KڬuG;Chn̶ح=#I|گͯUoa~o%Tan>(lO
	5u%ncccĳџ/ӋZ6Ѭ٬	lghg
dֆtPKaZ    PK    A             -   org/bouncycastle/math/ec/rfc7748/X448$F.classM
Pg/Ar6. thk*XCESt g`>z? b%ثB@	aVG.:fiӖJ$U&CA$wAܔ?dR2w`:z >\֪˴iT	\~2x&`Upw PKF     PK    A             2   org/bouncycastle/math/ec/rfc7748/X448$Friend.classJ@c/jSNЊ8YZ
Rr:kKL!oeQP|($ֽ3_@MBٺ"]qvDv``Kt6|'x(E$8Ld$ӇX=)f2ZVAG\A/_4xhj0`	fk2\%+6,lN$8I4)vd2	yS	Ky5*{3_`y.{_=dr/Ŝo
7x:<a PK    PK    A             +   org/bouncycastle/math/ec/rfc7748/X448.classT]Wg~6fh+R#@(ЀV@Q*견]6qAB(޻/jO7ԜGzNL>M<3Ｓ3.|#o#)@5_5Oci.6=G2Lkt 3ҲRP8xItms-}2v=C	^p]az(;XԐ`HxML0nf>ss5e:Y3/ bQtwLs]/.;E_4t]F6Gg8&(#Oϑa4sdWIgJ'(iW]"m:}wmca/IKi2uߙ/pCKs3Y[46{4(S4
N-&'=]C
]m.E/!`g,Sǲ|r6[]L.i$FwwWOjWWwxMO'cTّdp%ǂP\6ctt,9PUrf`}w=Oꋆw,zDxf(᠄V	m:%tIx_BJBhld8쯬P_uc#ork}zbo2<i
«$ûSp>!)x8
!^CH	^
bhPЂoca؋
0.)daR0&>f*
85iO>cΠ32s2>Mi\fq/8X`λ^ѭ龭^T6M砥<'	W7I{:GFp4> DwgIkA8UK4Hş"	(.4M7ZWB)c;HGAƳ4\ZSW'Ԟ"Szg:`2v3][{0d;2D- x$RFr\=}0.U^]ql2wR-y:dB<Ӥ"S6Ina£?L:PC3maml' <cfԂS-/gn)@ҪpJ~2Ԓy\Mq\$X Zl%VL(%Zlx赅Vai'@E-cuk+*H~{HPÿɽx+#K-2$j~EZ@15Ƃ
CAx
{S52-WLj~-(|J$ȣHf? ;"-@LHsɼyBj`UHLJhؿRajAEնhÊw5G#Sz
K{"hẇq6uV3ɭQ)K[G+1UFNk nb~axOԋZv7
<{S/Hx9Ҙzռ `0B}}b
+PK#Q9  	  PK    A             0   org/bouncycastle/math/ec/rfc7748/X448Field.classZ]Uv3]?S]sk<3?SmvLx5<c5?KqA!/(Ch$"1%O0ν"Ĝs{9?uNۿkqȷ=,5;dfNm0}vCpsv}$,	?58:P
AlBZ}(x~F̰
ۈ즅ܥgC+bj%%gT@5}uplU	=C`u| #+@3xZ*l0q³=,O;{3ٹ6mO7Ϸτۤ~zcs-9)<>wMv//q݂"#0D$xWQj(%'%E:
P֮Mp2vilc^)plxB㹟7/V8R{gSطŨԹKʈȜ9zrjz;g۾t~f{l{\xΏ7>p[XΝwǷ<Gέn]$3z&{9k/#0=͘~h-6f,64-2b0b̳b9D,oìh#D~l,v[l
Xl
Za"[8 wذb%z
r-;bkGc2iL=Ne!ȳD~i"M"!lii13D'E'D^ r9"ly"D.fIC;*_݋Og/QpbkpXMq>B`#l݃4GC^X'Vxb,f`:2VJs6Pu=滵fz˽!=İoXo׌CcaPb,~TӚ+zoET=y1ZH7&hW+koU=WWYLQn@AN9Rh17LK:ߋSƪQ(^i5O{F-<^P=ggjAֳ ٹZ`yU򞝯.Ԃgk])ە͵rk:pgyF(I
pR
5+hq!8=4xgY^ 'Ekhk.<M&xN(I6/
8)F362k(\չ&C
P"
pRXK,Ti
Z3h`	j4hg@3<9@-hA_5qU}6f[:mͅyq
B5Znv-0Cq]ǶێO
tb
sǰ6~zWo#)?uyO>t)`7rAjllCmu'W?SF1ӶGO:,O+LVS#ؓEk8%U-a\ö	n^k@O ]N]8&X
!3@g^6U;
1fTGsнu)8mC0Y!xm	aɷ-5i	k]JfՔ+U' fAVcye윺Csccތ͹f36F36flԵجk[ذIbYz*ӿ_zT2n^hW6tM6iU7Qun
᫸ґ)"D˾ÎT&ZU
L_Ņ704k^mD!!P!X8Z:+*)3mj9SsM%>oW	fZЫ8< %9H\t~ŦYI:;w>=ݷMqc6Bڷ+B,P%C2P[M`*#x5
2TFU*ئN[S,ho_
ijTT#K	հnY7_´o8F~ 	buŰh{I{]8xxdȳ=FNY.4YJU TF`/mѨC5j{F)qkx(!>"h_&v%Z5ɡGoH^.|:_o?xj>dͱ?@'Cv][*+JU޿e$;%iza{RoB
~9؋#ʋj@<={b׀:d,NC`H)rȍ3"7Ί8'rcKȓm'<krg>gȮZi.9%tJ.qKNYS&uB:P;Kj:=CU]hG%ƥ2y^>+e.M5%}WH9;沱9;
w抷+9.U3j~j.blպݪMjhjS&J3G}j}}h<>\if.43C4>fi1fi.5	aV3D~oSn`Y̠,P7r3 4*mAfX3X%>^~ vM9Z@pCč&wx#fXsNAl^}R/v(Bw8qDb^#>ħ;|T/eQy4t6Qq*W:ǝF<1xv9FώQ 8
!°@?AA x BWO0@S +D')OTIq@ 
EAs9<:φ0@1s*tN#`5@+~p$C
aEIA! o$
1ŸB@ЦPI	AA_?CP$
EŒB@N;:aw%3s	k@\BAA1$VPs
AWX&o1ŸB@pB!LMP%($
% xKs :/#`=
]~P+
APP:9	cqU
 VL)&9:A(XRPWBйA=UйFi	 04+7A-$t( ((
K	q	
 QL+LMPXPo9o`;λV= H
SA`(tuhWn
?P[APTyANnG0L
`JA0O
`Pp>
OC.N $tn#HAVBQP.$Q e]>ĨBbL!1{s×KZU{^QS@,( K
@9I$|NbOŌDw~;+dJ*5U~ j4hTu~WjQ5yRH~7MC"[5_aZG@8{ .T6#T-$wZV򇼔VTQ7>wqw<<<PUA?@<5=ڼQ'7_҈^Ҍ.:qΔh4HjI3LB.v)M]RΔT)Ct)CPgKR%As]ʑ:[ʑ dKس]d.oD57_ 6;)O
BVԵ}۶?gqdIv4kv啺v
U4;-a0B/keafɞ
[kòXSp{,>u4tLQ;ECV9Q;Xvȋڡ jlQ;U~dk\ u	rtgAQSp"h@]^m
61Q9a&d0)+)Y9Laa,A=>I*ӠJY{D+1~':j \lsb5ūߓb(sB%㎛QqS=:CX~9,.0]H
~9^G\zQqxwpYLJt;
DDe[7w16z$.T.ӛJWV..L$+L嫧S8
f\&32J"986
((BʼO#(
]D,JeiUVu4d0"mY?F#fz&vXJ|y!t."y9g|O!}xk297mGܒi,([ǓII~P,"%Fyi}W+IW(mGǡ(Sa8TyZ27iod>meVM=DrRǊDw[.$>w(A}ϫi鳩|Gt<{-l{D,eC^&O$IS]1Lv6gB&eQs#t>F2]IRn=8֢822㶢jtV~J&b`z]DWO38Hi#WϜOډI8"z'V!L-DDfp/A3XS|k|||4rAy]&Ay_4|Gw7hho
|0QEug,G{_GX^ۧ)t\L$c%g>%g󔎽7OJ'w'i[s4J+H< &k|I?h_u}K{23|#gDgTK&I-IoL}$iE_5InчMJ-IHI-d'*-d(yIZAIm&i,>['i+XS|Rpޓ|
8)f<
8)|/
xi>%घ
pR
pRe$5ʗe|6gN_5 'EO	 '3BN^P|A(AG%7A$UrSTMS%7CܬD%J\UTr󢒫JnATr[r|rOpQyU=wHEZZ9	cTo㤆?LgS6oAE;C$K$G"m$cPKC  +  PK
      A             !   org/bouncycastle/math/ec/rfc8032/PK    A             ,   org/bouncycastle/math/ec/rfc8032/Codec.class=OPߛqpàкM bH:+ ѐTԭZ:dڿҥU~@?!s㋕ |~=s +'[Zn*ptۮ;\	͑A |ɐ
nce%j0ƫz=uV0C}}}	#/w9~=VW$5Lj2xC::x(1P1d6Bڝ@)&x&%/QvHj@BۋHR Xba}"Oo55oՌ{4GќTWGXHTS5Lu.V_eaWHKXD}NeQdf-YK
<%FNxG#VU*1T\:Ru"쩩
rw#wfy+FѽPK*  A  PK    A             0   org/bouncycastle/math/ec/rfc8032/Ed25519$1.class1
0F_"#88Kltpϐ(x5Ā?
Fw05?]K{3!Z
Wwg]3^TY;<e C0-]L}Tar0Fu{-S.a?z`qj PKbƒ      PK    A             8   org/bouncycastle/math/ec/rfc8032/Ed25519$Algorithm.classJ1_8н&v .r}ƙ)ӌ̤E˕)K	99_99?_ qJϧ]f3wOh<KJ	Pk%se4[âLXYUr#ʥhY>˫Hn=IQf.]ֹ/htiB#.Љ[9eT+pb)\U0B_>sc;#1#9yox1PKЖ   t  PK    A             0   org/bouncycastle/math/ec/rfc8032/Ed25519$F.class=
@7]FXX_^@lcj &ǲ,<`-{ S4	noC.$ʗ4;]zNK<G!Ǚvlۣ8$tp217
%Z'WJ*aHSu[jPP~ACOD
e7PK:   
  PK    A             9   org/bouncycastle/math/ec/rfc8032/Ed25519$PointAccum.classN@ϔB-
ڲI4C4!1Weoh\ >NK3ߙNO&C0[Q|h2/zNϿd`7Jp"\mtߚX|`9]~g0FnGcGL-ۂVםj^9c(k-Uc*ksG=ǿb<g)ŋ
UEBERb}ntHI,J,I%"`:PXĺĆD^bSC
9liXy4Fzql1<P$cXyc3MТJhWhw?PzC1PBe5LLVg22'SYD! ]>OPKdxW  z  PK    A             :   org/bouncycastle/math/ec/rfc8032/Ed25519$PointAffine.classQMO@}S>
|
Bј	x*e&m5<?8<Nf^fϯ 		1 $m>`,vP$+fTz1	ʛ{nϤw;!=ö1,u2,M	|Ǿ܄i"c"k2#jy'
)y iY`U5T-nqZg#naoF?Pgf?`+@gp1V5߰|5%0K.3)&o/yccIeVX䮖7PK6  %  PK    A             <   org/bouncycastle/math/ec/rfc8032/Ed25519$PointExtended.classKO@[Z^_h
YA1	p*l[y0~ ?qpٝٙ~|~8CĨtFf_App|6t7V`^'ǚX4.,[gGu޲F휡:oh`t;wq [4"Md
M7nѡ##%%-%#%#%%HY&e]C
ylhMZo;#ϐ7ǋQ1/=cfF=B#<F,UQ~)ؙbU@"X
1F1mI(9/PKXJ.P  c  PK    A             ;   org/bouncycastle/math/ec/rfc8032/Ed25519$PointPrecomp.classKO1]1
Jx!ȉ#KvW˃xӅGleL/ g8dXC*=4W}\3[-Oځdm)>;b*l?J>{Oo:ZrP^TzT-,n}'hzR1{20ĦcOqLԡHH0t,1pn/K-&b&I)3
֔YWf@y9lnl8COߖQ$i-B*@ԜfH&UY$<F,߱Sf؞R3yNcnS`_BiPgp@̆_PKr)J  N  PK    A             <   org/bouncycastle/math/ec/rfc8032/Ed25519$PointPrecompZ.classN@bx(BbFPFhBb"+0\-iʅѸ|(v˙Ϝ93?_ 
^1]twɞlam'LA6oO96
>0&wã2j+CqVk3dfsZ^=Qq!<:CE  @U0O^hh0@X"eUʚ$2*XW)sTݹV,T
!dɛgO ڔ	T.E1bl7lN5ۯr45EÔ/D4C4- ;HaG~PK̇0Y  m  PK    A             8   org/bouncycastle/math/ec/rfc8032/Ed25519$PointTemp.classQMO@}S>JkE/
DB4!1уi)+B5m5gy0 qϸ}/3fvvꄔnOȞLI|JsDPXJS(Lcq9*/&A8<3%2wQmJsWď4M&r&,%p/1p  !raa+VmPQƚnF<K*d`u:
5o	l|6{sZ
/XgS+2.aVŕ("
_:sPK)5  #  PK    A             :   org/bouncycastle/math/ec/rfc8032/Ed25519$PublicPoint.class?KPM4Q!_ ]C&;tzyy֔W %Աù? !4B+\GۏI#B3V[.E&F<[,!̋QJ6b'Jj>S2Fѻ>RSc]]. ytᜇ-D],3Y$Gq'y~UQ+pS;-+?'P*F PK7d   -  PK    A             .   org/bouncycastle/math/ec/rfc8032/Ed25519.classzxTյ眙333'HxHy B P!$$RG[[V^z-Q[mT{k뵷޾V段>3 +{k;/) <Ŕ7
x`0PTq\@+*0!]P>S2>?"<D@Zt]$9\ GTsTg.Sd +X<y	!k0kSLe`%m
38'sGe3%O=UU)grp̭KJ:QƩCWdRd[/p+skEQJ˯Jc̋/Mm=ѨN|zѬ۝D"bWQ[b:dUonX$XVT.ZÀ-B+P<
e(խ/oD(ZQ[l}yY]%dc|(O&yKk+>aFV-I+mfQ%[VVQU(D}eebqqYuUkUT6HQWQl@$E}ʊiŃuUjW-Ds>m;7%{w)9sl$_]~ztNc(U<f[<mciGScwO[|Z{cO˴xӴMM,.V5OXhh7첮xSs-ʪe܈q";%]{V5vahjєG_2CM--.^vMLj]H194jM퉭8:⛱rbp{M]qN"usTq݂-t}ƶ8޽[ԃIkniDUfbAM7'v4TKRJdH/N%ջI[m!흉1ss#ŭo݊ɒ864#z8/9#\׺M!ͽq7@N]x[;ftW"Ѿiml#,MUM4v݈\S3	&tw%/5ƭ;6OjkȵummSmw&1v"U;wS+*PxS Vݎ8+Mќoj12$a[nbYss=0ٞζ8y3Nv (|&#OmJ#-7WjlloN5A8o\7uILsybyiufN/rOGUW͘5͙^b	Zqb0}
M
.ubi
K.\ֶ9nip-+YqRo9`0sXkeW!x.X.+}XP]M|4U2pr]ۦU\o܊1ɿxƞ%wj䑤dRʩ
t/buĖ^F~34ӘC8Bu9ޙ&]W+Ig6/onF7/_W`̨koZGuhqo3z[z7mj.E~J}#-n=+q	3fwFN=	8֋%z;lpAܜA|f0꼯zZW\#*WԀ$hO}W׎[()ۉ؉z2IXsۓ'&{A=}fvDI}.?V#p|RlWx]BƯ~c
SﵫK8p\_TaӦM*|$r
}
lVa->~]oOPTC
gΜQ{
w<t$YϩlûT6;~}kfyʮOe5S,1~zݱf8~>]e«*{*{T\_:pxԌ*6!ؤ*7.Ur
1U~WUwTUQUѪZU-..VT,Ui
Qݤ;ޯTտ>EUyk:ujhPgZyj
#_R>n;RS=		zAOI>:|Z_GtGtx\/EI:|I:<Ó:O/:|ҡ!E48P[;6ϡXɿi89+r~0X+S.x߂`FaD>KVch?Z~`?%Au]?gx,Vp@\ճ/jW,6y0eem^AjՃjS^`.C:t7߰O
nE( *m_.οx)y0ְ'a@o#aT8hÉ:/ΤlΡt;F=i~?zsܰG#gy0ƈ"Z?2sCC5zC;]^/id m>iÖ-43`\o\y	J		,"XL`_'~L37	-'A
`5р7ۀ|F>n	0!A腠BȀ4a@de@'0i0ʀ;!rTn߂IllaB*4`#f"8L}_n{`i++2.(6nF30ӀF(1 #8
W]&tfv86m"ZY'Y_%xuQ0heMۀǀ{Xϲ<ǶmGp31>
xb>qΰ[
g4rwPNNĻ˖{	#'	>Ep?	>C A<N/zJva'8e\EjaN5G	"l$Y>G𠗭cX%/[Ȏ"-\{ǖX5I	CDpS|k/|gGK	!-~O?!+/!;Ys (@@#p	t?<Ap)!8MM	MW^%x?$u#wM>|nkckٓ	&8MǮc?ٗ}l={~1jq?Piٶ^ΫQhkG__ß{^`31-0Q͛VilRAa] c`4\
H)?"zUPF	CB7*?̏ՂeHd:_sd:W2-iLץ[Mtv
)bi^6{m{q¼V-^#%ܾk*A*)+|B$ /\
.,
Pfj~/ښwElmvO6KQ5zvU_	W>U_@9 i`rԣ)Q4_-KTT0W6-_5jO)WDAkvFHy{
)!^A܅J`چioQi(V[;_LJrdeQ_5Lv{K[2JBtM6ly~efgnμcJO73)0s.]Bir-(SZyyb{꾽-LNh,AGVIҝ{B;mTz4 4Rj͘{Ѝ
UGYpYe><]ge.lR\S>*d`Ȩoed+	K[%N.^xNҗ4_))4kbZcvrz0Ag強N2k}SΉXWQ_B[h@d
'KO+d`>l!=~"YYRBwRU `tz
qczWS{~e.b>]7ʍk'_ EZy!|}bCWE<QjR.`	C⿑xkS[&aMT4Hˎ)S\"64!ښζz
WA6/_XN=ܯ3.TbzKsJ!mkaAk8,fW/DOӤx,5}$ܓ.*"	ՔhQҵҜdlda!^^-4}=5P>4cI
GYx'YeC2pW'ARiB.B*r1.[ܭ_ԧO̧IZ]!+nDդ&Ң*uy`V;ڨ5ʚCDuєۮ3)L$G7pqc{\s2CbɵNd:7'|0ds9S{k;2_.d<;I/bO01}v?NԾB3_z$l|wme QD-A\c!}̧
L %pJA0J6h7~`BџsP4zu /@>ۛ@^ۗt?)oĴP[Ezn&7%W҅1.dUҌAvz,m{-)xkaG`:BSwEDo{NʝCΙsa|0;h5;谩!bNa)8!aJ&unYag&Q|Aigٸ}0m4v65He~z%b3x߃8
B^'xF< `(_XVK8||')t*˓.%Q'J mF!Ǩm$J\EC3z>WR؂<l(p;hiQ
Z$L
wt9AQLnhm2h<rE;kH|!_zв_O}:WGLj Ob̺N 4R{X39fqPRƫQsTPh}Ð
[@8upO{dhyi|#eiJܢ(.~XK|W܎2");U)H>Pi0\:[";;-+,:=6JRȻnI抯7!/yuHr:T`	IHrowrGcWg~˥4q1W)O)nk1Ƒhr||ڋ+$R}/G"<e@>}m9dNmcmPfI&
㽤ۏSјOYl9wf/d60֒SZsaƆV"1:-ɱiLyg$4bBcqn<lZD yT[Tȃm/QK3iSh/dp^֣<:;삤S.bd%HE
>a6m"<a 1Oe!LEsNpyr(~h΅\PGǂ$NdXDwF!Š+ KdG+%inZI*jsDV`&q[Ե	.9,9Ne3hG:#/s`b}%~I;
u	Rtd)|^<33N?yz},@CU44ST.$GxI](=yRtq&K)TXN*CU|U|#I4F~Mȳ89NvꐼI5,HcHM͊TSlwC^}+<_a$5
R<'j.:e8]|R-{x~mrAW
MO,9piާ5cv,1Ţ>՗dLʘ O ( (v
cۤ	ϡ	4qFkP]>Ѳ\=$XVKtcdJY^<8
xCOBOB%ݧ_hXr'0-)s烗vc7+w`
~%ҍdiuuZ=
10L.̵f\Js:V/ϳ[gy1hWhߞOs1@]R:}DOBOB><9}X!]Ə<fS7@YSd5@>Fx-ۃT[4ҐWq]h6uI˝
30_HѴkO@d;cѦw>zd\)'%FWz؂9)kulI&9ǔ
K^Qs4͹fWKyϱ1$[K
%J]Shǔ 'djů)Y\?U[O78!Or=4?;=4?SqhJh;\N&/dO-[~0'Hu}~ʿJ̯AM<{,c$hQ+B\qk8m1GX?qZتE2JBVyVǾ vvAi>$xðPKBjiV0\I6&B1KQM36gD~"927<F(8l
ift\3.3a"-8LS24Bb2E~y0qc~"9#[r4cW,Ǟap6Gb!;DȠ41D:q霱t0舎#7ɐ&DC(<⠶4¤	Q_<XFE;'醠SGH3)ղM0,tx |&DgQjvr)89rd c@; ~|FnxPb<w8ig[pND7۞#k͛ҴGG庵IĳhLnK.Tia顡v-k̫K#i=.oOhii$R3~*+U|s[W W\ 4SKl2ߎ+pDXmpzgMpzF-q|K#3">r"#q75+6>>uG'oS[|+>Y͛ʪ\I9)jxjy	wG 6(߂Is0NtK?Y2xUz4 UPG
}xXA$[ԐŮ>\<]1 !{A
DG\]^<SE-f{	>בT[uZyn2Ȗf]'w1 Ltm'Fq};}@^)*$}Fzs4rstᶀO1}wX;nV+i݀;d^Ltx¦tON;{:-|WDOЈCe37woI/0`>x̶6Uf6)I<^xT/Ed;AtC]6X͆>ZI$"!.+nJde&EbZD&/aIYz#7?fP,KgZ~+3YE3D`L吊:GULz0"9勜?_V촯hى' Ex=C3<K~e|8kѼb^ćSv=?KWB(Kd,>QVb;5hXǀxjx[6VS
:iƫxnH@F[+TEU*Eje
3ԘxxTSP)98W}J<"2sR"I{fs\X{^O	'?cRC9a$RUQ{fjSWAzYK>KC'˞ N&7jzߓϑ5}?ˏvApO^55]]lax襑~ꣲ+>"%ơԕF0~pF	"ʪdyȿ{x~wm,v7ҖbҭlWnZy7&T8mؐucF͇SvSOL%Pyo*w,u딴tjvj'nDj7hfk}\6+tc7ns&cNG}f>@4bs$oHir
\6cא5X	q$0lC9&1x+xc\Mmpύ?DzZ{\E,bX:YlJdoP&~ERYle()m&A%	¯I ῄU(eDa^c5N:5`děfWռD7W/ds5D,q\	:j4ތjjjj	kBLFA5~GnxWj\D፿5 
5.Tc8jj&hdr5cy4	kF5BtrLjFp5>)j[,\|՘f*o߸\p5yBMTQj2NŸ~\+7XjrH-W>
6gaПn/W>˕{9^<g˕{r菹+
RkzX-Q PK`z"  S  PK    A             .   org/bouncycastle/math/ec/rfc8032/Ed448$1.classM
0W"#q^p!!Mcj	4Qj.<^7yw.VS)Kk^)|0_Eh?r)0C0 *+*!L֪~osGbM@FPK$      PK    A             6   org/bouncycastle/math/ec/rfc8032/Ed448$Algorithm.classN@ӦGK-tGX@:u^$UzrW$	N*FdgO )N	wW2*M@sp^rmt :KU+*#7*hY?F:M'<rWt54zB`?h;!!$>(2skMU{q7c@8n91ɨGoS'aC PK2DH   J  PK    A             .   org/bouncycastle/math/ec/rfc8032/Ed448$F.class
@o_n"F	z.DW[LAcu
: =TEha~G5gE,my*Y$uK~LW;~7ƙS')_J0[0,Z Ge*	Ϊ(dI].RTaՎ
0+:/ThC{PKm     PK    A             8   org/bouncycastle/math/ec/rfc8032/Ed448$PointAffine.classQMK@}~M/UW"iAVkEPԋm)5$YDGՃ073ow?>t$֐vZwB@WcJƊP')ҟL1 b<Q<WAB"w=:	5}a437a(O[C626:@60XkJ[bΏ<
sE*"B%{C
6gXk~+6~aETʨf<]
&UQFZaZs?PK4    PK    A             <   org/bouncycastle/math/ec/rfc8032/Ed448$PointProjective.classQN@=SZ()$f|CqC4!1WCۤD+Fw*+W{ܙs>Cnvːp=7d`ZRD4S'X:CF|?ya4QD\:<wG'jjdăTw]/N*|FCבӑaX`8oj=oMȘ(PT!f"-E,ªUV;]ϓAg"P?ۢJIP0bJVN#\oc7ư:.kʄajvmZUMT!nJt	{<PKۂB  @  PK    A             6   org/bouncycastle/math/ec/rfc8032/Ed448$PointTemp.classNP@ 7ab$^6D]6j
bjc0>ekz9g:~}h!0j=]wG}3t,óЇ}_,({flzCK42ulך
jn'j^we=>QKNQg4MFgH$$%j=
"
$#H32,c1 Ps(2%2cQbaMF2mhl-FڶtZ@c(.GKUDdTtLlC^Z:v*cצ-_/WWJ;͐C_AX;ϣNPK,(iq    PK    A             8   org/bouncycastle/math/ec/rfc8032/Ed448$PublicPoint.classn@g͏c	!BK(
pUBdX(CEYJIh4͞~G !5ZE/I+YEf"$l4k7ZY0/"ηF}+YLOi?VxW牘'a8%L8K2OuvẸB3@GЁK5M"ct1dY+=~W8X9=v@\ϷPKI-   )  PK    A             ,   org/bouncycastle/math/ec/rfc8032/Ed448.class:xTՙ{g<I%	aBd@@+ I@Ynw}jV|`+ؖiAvm@jv+fsg&	"\es<w{ )$pC>@)Z2iMu9 URf[T	YӯZvH$&j5DlҨIƧ5b2CTQ
FGr4w~P\q\ɡgvrB]V:$݅Iem57mLAG	ybq"r]ޔբ뚜a6={J1ˮ++v]َ5PX,]|ں$լmatIek]ǀ-*Öa˲qZ=,]lZzU}5vbm@/Y6tIuâ\	˫믩EWxòꚺkrz46.3.nXn5b⺚j$Eo^\V'Q/P[1{k%a\֮-M-Xho^#Uӕ,^8_n~µh69@b࠘sZ\#t}GO{DWw[tK{Si4yie-8eR7&[&Нt$H%koIL0lTb{sG'As-ѝD=؂`d暎n>)4,iseiKS-'D9Ϋj󖎭ɍȜ\Ws*q,K%7%6
oLoV؀6wcL-oI6w`L+CjVcAk{Ful)Qv9JThOTm%ֳYtA[i:;Rݲ1oc=nbQe|NnL
jOlHih؞lGtUk{K(nF]+
[Ѩ.XIWwku2Ձ>Di[}ci][::gKv[sԩ51*ۣ `d;,]OAڏ԰;,qSf鑜ڕlIvo/mJry́CfyK:ҍ5`m;0ˎ1O;.w$Zw =7vToJK0VN%jےd>A
-Rwkmiݘ*mXXv>GLb1|f!7~A5َ9`{ȓ
JSL̮m;н\츍hbh9u[:߇Y%0g'Rޙ
K%n.O SG'Xw'7>*6-Zw){P_6vNaDL[:{h
JC[.)_9;TO{RBJ4 0K%[zS)׋DWkȞ]|%<E@fB-O訿џ~]&,)
P.;]<;aJMv/O`jg=(|tw܏y2wOg^VLG-.J.K[ޭ*da2NN  @Js	'
c
rP[SwTOOT୭6v
=G~z10űǍ{+D_RO+Q-R{k{؈}}&;QAQ8C5UsG}cO*γHG}/FEA?SmwRO|YEw)+'*U(9-sP<O]xLJ+zu+w񊷫My
WT|x&܅Uu	E)E	F(%̲*%1?U6(tCjRU\?hq
Qܥ^
iE
K|YܣW48W5Wip[5&ȴ8,ə
Gk*nU4d`gWr<S/KBK2K[WrμܗEV
cCswT
4ve7n#!vVss##`+h(4bq{/W2pEgB-"GgsvU7LwCCCͽKEHbMCYcȫay}r#$\>p4q%|R^W_|0Q_-<iԕ+ڑe1=F1hkxbOc?	@0VPI N@58BQ$-&p@wkX\VC-@#ԭÍ#atH.p;:	y:t@7aa*nKP@B7N0^	:DZjzĘj7	|	|:=Dt膨;!CLPJ|:UB{F)k`MPN|t6Kl)!%ZֱktXtd&"p'[ͬ^RLٵ:ʖ박5!
g9Z' ^txa[XBzjhBhj<m$@+	l&F`>B`Mc7aT+6u$p.zl
eطl<{/@T&e٧I^/2E|?,N#y_ U&p@w	#pcN8Iq#'	<E_<M~@?"cJY?!o~Jg~N/Bn%K.MKL`?{|8H~xCx	|#}/zt^6!1$pxfyY%040| Pk8MG{Ww> ?huTM[={r}
݉K:; 
`$̂s/eڗk`I<گ/aJH˲J3eY)9s_ "wh_< _?sWcǺ2>/kd9[bGٟeRpFp,5ǽq5bvn{,Ze㮘;a4o˕vDNx';/4'BxM=rA:ae8sքFV\v_?*diL,_FfFc*CZ< RɑhiG;Q}{vaZl>lXne<NK^gb<K4jXTMR_
+
"%2;zlؘ9͸e^p*FymV#췆9^ꗡ*l&lp3>:+Bӹ{v=}+4H-ASžyRodǱ2YmWfUG>0b	m~Rh_Xy;0_ּ9
,g\h!
a%4/#En"h$2
wׇbJa%&blg@_9ޜi
HQv'<<N?޼t
]sN8v@#$!KShA L0-<v*혽#"n"uK&Dr`C;p-CCX\\
!Ac&j''4"-#W'9EOÌ"XR&ԢF*E2-
b'X%ȶhG
ӎHQNm	Kmm%Ebaȩّo\&K<PtM8y*M3U;b '"CqF1%IQҎi$1cMj;i9aT16)yd8m(B8rƭ Rc\U.0*A)R0кUXeTR&+ޱ\Ѣanks.l9Д̄Q91tNf/jN1Gh?AL{ho:$EdT+@Ƃ+ˀmEkvXkC6'\8h$Q<7
,MI
GJMLaN׹~~KGGf4蘩^D"{XkJZAY_Q;"%Ӗivn
|Z=(>ttghNO;qFJaP 7K 44J'"GV--(@
7J! X^=X fD-I<MӋiN!eoyTҡ',jl2*Vu첂ǎr\E1ːV+
Yytr#0+ʷF
\Yq& v"ft\Ryz*>!Lܠqe	؇	.c<O9PmW:vte,n>rcKqi&cyVOg1LL9WD[/\|
ZS;@vAcР r,
ٮ#Y\Exs]5Iy]>(9j g`pL dS.-y;|bVA1A2<*1\LRT*3ՂPS%u@Ua3<cv9zQ'H~lPUD'g^(oV4.{lgz:H!=#}0Ζc`cσYj|ySA'*UXNw%rFyWMS`*8Y}>0&+^ZSO[(˳#x5"?w!|=!|#FǸ'"GJiJ;U\imr,fargNaVi"*zǢUZf!<1jeq)D?rvTF!*U"UgI*(W+\WFÍɧB{͡FvGvj d2\QI%㼢T2'捉~ZLps[^0g3iO5XǸ!b1n7D"
YG4[x " cm}0 uqCE϶NVg/ƫYEf-'VjpA=O}xJIz 0ߣW3ggarϼ=*g^y{捸Cg"'ދO</3ӯ*q&WK:]	Fk*'. 
]89:'<Tэcl7	T 7#75θ/ );rփl̩%l+
IX1{	>ȮccdR!$Oni`W x>B!F(D
ʙkă/Gmg		D2DDvQJ<q#wts!@
ނL,۶s9
=)SIG/7^^<5a^p\ ?c砒s\&9ރi
1D%^7=xp)R65} j RxLOԤvt6~f ~V]-dbVbS9oXoBavv|Lbfu9􋍯x౱>W&䏈.<aM;n*LC栨h{rfEAI]rCpзb2{PW0Rh74#eؠVLW)4]2S[xYFz:EB(&J(7b)Xz=\wX8wM{{܎
 :~״	֧~Q<X6pݜXy\=Ʀs<Dhv=~e*dLw5qDt,.-P
d*>Ӈ>2u^~wfOkR7`΅ȃS
M?u{?T+f; @v#|.T9;zo(A3hL(#-!fJh.IoV({׎8W׏ƨ?#Y/NLeB{!E*[yB'Gȅ<:
^i^}Zg2-gdrZ5}}o%y_Ƀ'-aV.8^tu%F&]t>9q09<8( 0y(e8
UoSض<xh9M3M;JΡX^:>\Uiru[cԘAݻ:Sɼg'GƜf#h
ѭ&W;b/y1?¿c5:0Śt0,U3).Fq:l6a)gi6,$-⟓7ci6i$<AsF0B
}pͷt
X/.ɦkgtس7XSuSTiGM]8@3h<$xO~^g9`	b;]	ģtTƉS߆)szCЍ;R[`v$/'֫X>c٨쭓=w_K|񋲿4-H|U?Le\BW4d*Nw/q'A{}(4NЛkt/75u{FC矻cwYu.N'sS!]\y\t6XBH8EF# }(),4QÆFYsUg)%
_FK=jyCQ1 2u'*>EoL?i-Mmip,E^hDn"܄lf,1h!AC3idcl52fHag2}f^7/
Q}$ !`_lٰ<
+(Yr&O`|V,jl/wV'`1Q(a0=ڔigѲe,m+^SNCS\MB#}OϲYO	=ˁZ<YFVrḁ6,bO)E1ާmrR+ϓӯU$;=,_|n2+X<$?~%с_,J~Ǌ7 D.>?|kN0/{d׮|~Jr^o0fD}7960NqM;g٪/y,+<T?ECD2gnڹv9;7~}RQ-GOXSO,(.Rځ¾9qOpw7)FCcj669M.I3ZFycP3f6>~E_^&Nύ?B{x	͓Δo\pggΗ3B3J Mς4q>?i|xχs `ȇXῐo$Cx3|2'1C%*gȸ`p23d`;^_ m}8Cװ3)4<+C.4|[0?/q,_hx6Up.;p/ោIݜ!`8Rh'ÿ	Ä>d16j~/c9yfSY,VJC@FYh KRG#S:V =ec%B
7PKz  :J  PK    A             2   org/bouncycastle/math/ec/rfc8032/Scalar25519.classW[p+yuYY+ɻڨpBLEE@!&ҤM6!$-
6*iۙ><>vNd&sE0It*[9{>ko@V<w,#^?_1m~Z0Ux:Q!ݏkwWp>$/_;!'k=}qF| bSNMÓ<,3cMÓ1R$R,J)6\&^[qHRdl\0Zwgp[Xtk~l:.܍X_RwDN.n|D#ضv⢻0aئzû7۰}󦱽#F7݇,XͩLz!5wtJ{NՎXlr|2{h,9əTN3T2;BW:,RqTj/өB,]Ie3T۲t!}ɽR񌹟Kut&5Lqi}L=JVB >f5 vv
PJ!}hv-F&nߗ$f0j?hfS@GwW#)@g&&欙S3}G!klz,n3,>5E̥撩Kz̧lv#3sR~n߽,>fj+NXM'1=.ŏ,v;&B
QX(-˾e
ہJJ
PSX)^g
J`Dl !;$) F'Һ۸𭖡
2ta2'x`/&ʰ>IajeVɰB22laQj@wex`4p?!2l#N9|	.x5o<O-o|{.&w]pB_%xY`^pc$s.x%x`%
f3SiΑ([Ccٔ?;` Z@ SI2{
hhshGѾ>65mL-hhw3hw*%5J{h7ނW/#A­XRR5Zp
RkgA] x2"0͋CR#'J!?\fQAd9N~%h,<4(khi+ʵMָq#VQno_ ch`5<|(C{t5]4"\aFP@PܷBTY1bnCQPPVY1ԕRoTCi,
Űb-˱ZVӕU0	St:ܤFխyHͣѼ@իH͢t-ȈP2&%Iȩs"9q꜈8uNՂʈP2"U%ّ3ȉ3ȉ3ȉ3ȉ<JF#ĐQ4ĨrbT9
1ƍk2ƫ4dڵ'C7L0R|/|g$L0
jGȌa(pv,%H8_'d'>7d7>cdmF+[.(syAZ5R-q0%n+:.Udz*P5=fL,w{rXZCb!C-
eEe}YPFBko/s?Al
t5~6Ps":~89qs"D:/eeeeA-(!<aND])̉3̉3̉3̉T<!^F=(ˈ!ˈ!kۈ9uKyEm^Wf6ۼwC(+
^9sJΓt%=g>;
^_1RBvK"<!N]-?s+>YJGkp	^x	C~JR=S}^S']6ZUonze~\zuIwNU\OWT6ѥ;D#q/juۨTxd/,%pI-lQVn]r	*~ BLj?u'^(qm)I|x_8:p"_7[X<8&D/>a+	">Qw'$1>RI ]
m!f-Qc2+~/oCt+~'L*߁4_PK:@ 	  /  PK    A             0   org/bouncycastle/math/ec/rfc8032/Scalar448.classY{pT?˷do45eY6fIB04$h#Df	+!" T}LjcKڡւFٗBZkkmNlh?D|~3߿A w5^J\8!n7mΈoMl"]s
׉މ.;&Ly	"Fqd8|J[ū'۞,EN=FQvʡyJ%UAn/}XwŪ;&vPsjV[pNGGSawCs:'
yB99{&ut
[t:yfs{B[rԎ9ʾ09NgC9Â5XNX;gaU˪U=(V1lag6t3ʈRIY/eT).چNHUWolp}{_t[ϣeKzw.Z{fCJlJo̦w$2Xrd%1HnJ%7Nd@
clDfm}ެS2xk0mOg;SÃM(1+GFe^@*f8Q}=Ԁt`/S/M\%.M%SB=cdJnJm[@MoJsG2
#ۇchv(ޒn
u8$CL}ˋWeXT^M@$v؀92Tl~}ncݞMrGi,1]ݾaif{Fkʦ2<~jӃC到<ӿJB8坢9^w>ܳƱc职pnQ//ψE_agKA$li'
bJAl`l`ҠJjAIU&
I|8J6(T`PM
T
0t~x7w&GJBVl\ .(,!O
縠\!j`Ը`-.#Ek`aRv%0 Bnz~ q	GNsqOx$!s'^98B!8JH	/0xďI<F'$~W$C,.,w|dx4ήNm''Hn^ڛ0FCL?] x\3a߁r?~ɿn;'LzXRЏO_?Re&j70{o4do6A-&
3E_"ypi>(_g;P. ބ.	l#8!8>(`w 
QhP4I!BLo'ٹk9&D?O^js+@ݭj]d7-$&AUT-B}FlF]{d
	UӭxKu^n鶹`y"
D_G?
1.,2	S:톪L&b6C- SZn.0T)Wh|m)Wd96
5
ڔ+5T#
u)Wf|P\>|PrCm5nU|PrAC]υS.l\괈:Z8AX+k҉X'hR2oATɼ
M]+#+hidG\ hVhdމfj$jTB2ZFBZDj	k^bJp}TjR#\GF
)Ka%0Eq"̸Df\3n榵)BK!%Eq"ĸDb\1nVdgPjJFPHVUj>S(S}XjR\ G>*5QAO@a\a\a\a\a\a\aRMՌKՌKՌKՌKՌKՌKՌǭP.;Zv7o
-Uj<SQ>ZQU\ZQU\ZQU\ZW¶#AQ D`T"0*JF:uZgNzZk
tbQ%_gzG=7NͯѼ+eWeOi6M6!mG-iCdEFPˈA-#)2RtnA-#n\t"lWFPˈCbx~A-#~2ZFJej);~Oiwj{RvIM{O*n4'ۍdќl7FS{|J?iiiiiiqSFE+(N'
{4Gą\n_~rTtg맪 WkK]?G'qY3h1Ե\sQC]ouC>hMfCMs-Ŕk5ԭ;mx'5tBO*yn6>8	AO֪ȓ-[Vf"Vf"Vf"Vf"Vf"Vf"Vf
ma\Z(Z(Z(Z(Z(Z(Z75kr
nf&HHHHHHFƥIqqqqqqq+@-WŃ*L4ĘHcD1f"3i4LDc*<XK3Oq"ʸDe\2.QD(KQ
g9̜f9?>eΏOS9?>uΏOS89xη\s~1ήCpB!?O~ՠ/oVq<%2f;
6njGU]YyK00ESX5e
.#WɘBW<~=P?j3n(m~׼}E!ݪ	tE905G+DҤ&EWɫcj.dL?u.+%ePp
vGbˬB|:ܗZΝz3v7cu7}i;R4k&z;Ӻl>Kw_ݧ>ݧQ*3PI8H8IppJ
	n&	N%$|esKOO*A](=Y(|Dt^_1JσWDK4$"IOp3?PK

  !  PK    A             1   org/bouncycastle/math/ec/rfc8032/ScalarUtil.classT[oE>NKq
*R)MvcO.j
T(o!( !/}? ?πh&A9̜o9g`{ xF8h痺_	)ۉ]jٙ&@ƿY%i/s!/ R̮BĜ7U	{(;대yվn*v[
N 4pF]E2ϭ0X.zA`V/kFn8[++W^x|\!puUXr>a15~ GB_Qfg1!
Q
ȐC46|ת
Ǯ:ve]xw־v^p181p|
|AGc}(LS BŦؔށM
SyR8w0=%%%lgIq[6&ffsJ0T'"`R_ mɤ:63wa,ETҨDAmҩAsePݒ91OxdO&5q^GMKEGYsvjиG^אR`DH=g-KN#[
Uv-xc<*^Nko"۹.YMEnMSLK(c[<*X'xB_>8$O㼀Hq>چ6w(	(Z҄;?y~g&(ds(z?>Whtx
o>d;H}e|D8;/;itT<yr6E`{1;)'sOn7&|}9"0s@ebnϹu85[1N YGֻI6 	H5p"-/%X\B PŰ'Xl"]A{
K4GnN}&_@l+j~23f
} + h=WRtbӅŃ
!b NEqHM
O+<#4L#w!vgSc>B~C`	uN3NGut=qfKO4{:,fvO\?ii/4?UfGtt
_44it PK;    PK    A             +   org/bouncycastle/math/ec/rfc8032/Wnaf.classUPnAޞN!Eܠ!@+
p.%d}8NB)iP*Q2B$=K{;7̏#,38wN(dgrj8mм7$=hwI!2oa6AGx?z|p'1\BHH	G3,n&:zil0u캬Vm-\+>΃\|_A{Mzykȵg-%ԔR?fW+=-:Zl4H6GBS BQLYR''JU:=rBbď?mXbV\deZ:2-ߺ/,?QcW3v?6 PK1    PK
      A                org/bouncycastle/math/ec/tools/PK    A             :   org/bouncycastle/math/ec/tools/DiscoverEndomorphisms.classX	|TչN23fr"a"a	fꐹINfMH@XZkmc-H5	Pj+m7RV׾׾WKM߽w$3H{gwpo4KZftLeHeZ*SL~VʴULIezVPpzziOԳtShc__d_2߫<{tcjiME4CK6eMfNAq׷mX٭iAYk6Bl?!ܶ=Vk
466G]'d'L>Gd*+=n]<Z\FZ3І.CŇIAͳTU40r*O<lЕm[	6S[[%'O__H2>'z<wDc)4*q]{8vloT5q{"'b5ٜ-혘+t[t05z	CR0;87sA5є֮ާn͈Bn84%z^A]hGd2Ez)CKJ>ZGRPmWJHVbz+9Z"bpvD5Vc}"֮E| }ɐ`qIKaJ2ZzIۛ -p2aS9ZP*Lr
MUJ jzlmНJ
zG3[&؅?(vͽ"x7e.$	7x	[!mќDRXN]nMF0!E\q;޳ROt7ܑ&-B:=
+ <kh\zzzuGAߛq'L	#b ]h
q'.ɣXx 7[T#h}\6G!95
q3ӆIg#Aao 
ny
Su/&79kܠ:ghFJhGJ1W<ڷ;]d5<^O3̳S@K28<:>1Z$
ܜP9:[{khXQiQ
}qCZJHq}/fMzv#i#5DӉ
C44sB(cҢ;iiޒ݂(RFAjhHɾs/Fn[{^.b9HQ31="r*9tnffZYH&
KrSa#ܚ]O44>\<2]2i)ْJk)Qtُ@6h|$:gV"$#lhLGV84t+ҽz7ηnf]tJ=HWAs83u}N#|Jc$u;=S{Ll02eD6T2#i0ںS;bL522͗iLeZ$Ge2ezJezN}D[$UD%(&&QD=JKtDKOJt@{$D%W$D}
+T.1%cvR|aLn$\d|(_B*<y:#߼Q"sg<E,439s;ynYn49c0g4|>V\RȾs˯k>ts:i
KDRkTc0P(hˋEPk(S؊9peEXEeE%6ǚeE&?YtEy	>5d8x&r]3afV,ZfƦh(ni\iy;kF2>{@[BB2x|+N;>p!Q(Bs`8SNbPk?bc^'
bC#B
ư	G/zKR0\Z7
mUf;* CQh;B?(Fv}gCQZ43#]V
fpC``dpa
D_~3vҿ*IZBӿ+~P3R
{?S/01|[W(z\I5+}_8eM}>` %nzYԺp1r7D^֫<drӘp0,(ep2*1gXaJ+d *k2quq%3ltb.nz'oKXPp&7e*`M
7{.aXpõ34143l`haa3C!ưFvCVm;:{b{9}SHJ9&dr:%*0\TNslN2+2/mC?bDno=z<<aZBB|z9'81&Ff'uzD(EjORv逸h~SQwAx#5'qq1o\<qz	m?.^ȫ4N	zF~dg!Y47X+aVmae󞡊JgMN{k+U.|!Orc1$ujܣ"QqNb*8K~098;}oѽQ
ܰzxT<z7ͣ"u2:kJcg3ٵk͉]I0gDoIt}jfcV8bmZF(*va8a^ټɅXx"XOtFQ0=u:k\c봿1*49$$'֔Tj&\uHsiZ/1\wVItJ<x< G2bьA 4S5q8֘:֨bgh
kܴ5il5bL[z_}G&~ᯥSP0N~eTr%>8Y}JUةN*^r|wgcӡ:\b Қ-FhfPesp\|#@&|X
~ˇeٚ.թ QJJ6iTqBPV=U2UR7?An[aO.fy>,W˭=L12QϦQ,fJqE7XVUk\J4ܜV+-jWk dZְiuR
Ɯ[.KVkjG&NXft 6ڒ:!xV#:d%~kkv`lF%8h2l-}}Һub뎨LҗU)Q\Kuh\O	TrKw4;7
ֳ	d%Q Sf̂p!x3wZu.;3Tq⻐A
sk/PyTǎګp}>'$}_{\և7kqLwtr:^ۼ~"Zoi׌'HrC$!)L+P"t2+L͆(x<]g6\I
:SJP8.OSs E2s9.#zNzYL<_,c/>o~ս0`&.M$Mdh"e5)R5e7+YtX`I#Z9
-eK˲sdⅬdx`9b+J/<KTߖ]tːq;6W~`rlaܲn#jĲ$pq]]s,|-Z,\W}yQw$oQQN`<-NcFF:L
,_=v`/չgU:Gk:ޙ)\Hiu.0V5l7E=R]'G2c6dqQm"|x|v1k3a_i[594*@y
(c\MuPbNuV$lr?(7a=Ae?R4z	<C|Wj|c=g1sp`򘜹	pSC!xۂ
A0fn!ygzNދbpnF8lO|U:Bww%LPA/PI	bCVM'ܹGcE6Ŝ=cm>pYٜ©k[.8TV?42ny6UҐA"2l`g8wݟ|ɒ %5&`{L0yz]tqg?j5{Hr֨l=2
LOEn?\u͠˖p!\|( x'[XT\ksuj@gN***e
ג5vf.wY8'ϑgboG1NƼYn*=K%b\PKqK  ](  PK    A             5   org/bouncycastle/math/ec/tools/F2mSqrtOptimizer.classUWWd@@Qhk{ ШUEC
.h!yLy}wmkwm9?Osj} Q-pyw{/˯ r%**QY*S+ϰѩ`]_Z)4Owu(
:+uaؖ߶̬?G'w;+x6̈́K	QA6MHEʭLjЎX~*qTOrGAul1tVA%#g@-Q%aq]cfcXmʀj{f.l:j	}Lv)Jǚu&OfIf)8Ot(X3O4 tE	Qta%fBXuVxTJ?##3v=pCR7{qLE>lG ':{\YJ7m'3va;cųq&鮵54+ȋLxw2t1mFRvǝlZ!E2S#>6Γ{$q46cKfJhZT)ltCTfj7.;C~ӲbEeμ)/C65KMPRس!O'cc}#04241p;dXgX˰a=-AV6B[cYUs9vc1v<'^ʙ2p|aC|5,a"b,>\.j;&mͱ;CXlR2l ʓd7WnIG>Me~+j%@$}s`gK/F&y	[OPa95TP#a'K8"G5l]ЎPG5cVbX=kW.$4h1I
0ZCHȨ脫b=8!!KpJs*#	Qi8qⴄTpFEm/VчUcLY	ϨxOIx^A<^`aЍ'iEMj?٣XKNx,"ٖ	'&͘/<3C`_LXpr
Kp$8K
zZsŷ
~Cm5*Z~(cKSY7O9/MkhovB[9,.],Ra#ʮͰ煮aZB1
}& ,?iep/WPF:*UJϝ-+1ws8Yؚç93/sx
	v*v0A4sD'JX?(}{)|%<HL;JkVPɰPKl	W  
  PK    A             3   org/bouncycastle/math/ec/tools/TraceOptimizer.classV_\W>f;xY $HIcX&V4bK}\%oޛyCCVVW65jm EZZ~f` 4s==s> ЂXDi(N{xHYNiRle-
N˕81qf<ca[dt{R4NDCN'H|DƏEtÔ	OAߓۖ9I!Ò=*RIBkvGi&AObVd"qV!=Dܶ\ݰ*Lߎ-Rrd1K,Kb"l֓2o8dI#r/r#kFtS&G['F2e:v!^\mk_73dM5{w'FǢH	VMa;QÎz6\GI<[NӔúg8que2>
Ht|]x=Ge]¢ kXƋYmL\to,JvJHtq6{촌g&>&>J3aF[Gu1\vPsH^"e~BVӋlَ+}|J~GJOzZKٔ
9NPL	ʜ[Fͭ蠝cq=2]{|o^A:pI{:{iHbZL?\;*Lڵˎe^I#Iҋ\F/7w^Fś,i^ӵm3'rڲL?׿3d6OO<TԭPzrcr8}wFw$<׾N2a3מbgHZFVN^AQv	xohx@-oIUM07([iHP@9zcsCKRE\,5y.E6T^YP/WbAmA{./);Ĳ؊WŲ#WE|ӵtⵆ~m-6wEzD.D^%+V
+]4_\{~I}EWX/*rŚnưPC
:V#4\ðu7@Cnհ441T԰I
`)[Cܭ8|,WC
[1a'aq
UӰ
'4\wh'5
԰4]*n
q?|O1{ާfxHE/&TưPч=c<U'E* ÝxX7T܅/yv_UΨH0G>($7U+_cxL>`	O0>܁2|3-b}^}UV.=}֩_<c6siP])
)d Bx3Ry֓s`?S~n?&r-MAW~`}DAn3MrC&u,~(L	\sߚSjɲ",8
O=Q)&_6#_v~]E^\G1sJjCX5ށ_ kUJT,Һ64bzRUq>_)쩯og"JX}3բLBTe1Kf7n+\~X.+1S&2$	H@9S,1RG4j/4PF1$/2}s`rP_E%}	7!9T#$$B%]C ՚9ߴqjG#Tno7[jOe%g&x\ȩ1`rE|~FY C !!P
QD#j)u{"jg;zQA[s;`77фZ-%LY$lnPK]P  3  PK
      A                org/bouncycastle/math/field/PK    A             0   org/bouncycastle/math/field/ExtensionField.class1@E"*VILL,<W 88L&~<	d'017d"c,UW*:d%^`Q7Feu{[_hV7OKZg=D(1	,df|	. Lx>PK2
      PK    A             -   org/bouncycastle/math/field/FiniteField.class1@D&yN
	gX	,	&^x(#8͛L} iV֖ҽ6{rt'i
9ª5OvUewwiV	7WD	fM/Al<[1!A)AD0FI PKnP!      PK    A             .   org/bouncycastle/math/field/FiniteFields.classTSW.Id
-(*u6D%mHKhuta|pnrusٽaD_@3Ȍ}?&8ܝ={=?{vy
)D<t}5rWPFZNi.N!Z!{T32Yq}ctR[L2P6]Y[*hHGTR5Wʷ
ḁ4Wڡw?;bs=PBcQ@:P徿EPH*!UzY(O1^[ZH*Gl}]*MI0\|7x+|_xܟfjXtźH];ljpV\^Miቐ!^4H$/V
uB"QKRBY]9;jdA*7jҹY;Oh_=NYpg-YOtnK}ҡ0nbll[HjfЏ0v)ac;L+
4N
4Fk2O#Bbԫ)\7;YLٸIŴ˘1lc7UA}gNx"e|`C!S8J IF2Q_IJk\]r!Y-&~E=w)ƅBfN1ƌx.<Gy+|a7w(	߂$l Jx?Vnd&	LL6^a菶l?̧@Cw1nn`XIFԘ+k+Ӿ_+mPK    PK    A             /   org/bouncycastle/math/field/GF2Polynomial.class}JPikUzM+Dp
AQP\4=1$*>.ŅևVD3͜I`9m+vL֊nQ$(dڦ,!$Qǰų'!Ư)cB.'zr"M0HV%-fbTm
Ϙ_OLn͍=ǪΙ)	ki+Ꞃ.
z$sۿZԎT$SEHEvC!8C
7B_};-1jHCB/YJL!0I!Dc0zqI kaaRǨ4:RAͺ"T$0lp(!sHQxEfGq%1"PK1Ԡ    PK    A             A   org/bouncycastle/math/field/GenericPolynomialExtensionField.classT]OA=C[
~THj4h!ѷ2]mF^@3;{+ybHf%5QYm/mFjB.yR4\zv_ԚB0j5D@ehpqoa>Cuު/>_rAyTsaTvn%}4;<X܋P	W2vdohhăSJ EM4ݹf(Kb:m%-Ӡk8aHð
̥#`KQcͧ/DZRlX`fG5t0cth`:

q)яqNF1IyaFS8.(U`2|pEr2ʫ4)a}|XPV(fN,ޠ$1ROh;J.%1bچN6ZQiSBqQ5z'ap&a$i{b]*tXԕ&O͕-2ŷȤ:7URdJޠ4JQj#D7	شOwU*\L۾<x?8~PKo    PK    A             ,   org/bouncycastle/math/field/Polynomial.class1 F?*xN,A';Q6Ws H}y ;T929gTҞL bxݽ#b(f2T*gHg?ɒUkO"[o'^Y@Y2 0drPKXB      PK    A             :   org/bouncycastle/math/field/PolynomialExtensionField.class;0h`c3L TyH4 z5aB,͖y(1&LN[g[vI*ddAujythm%oL'|_Ų A(',a^PK,      PK    A             ,   org/bouncycastle/math/field/PrimeField.class}QKO@&v`4)!6|A@šH@TjCo8iH<r폪:y7uN(D*%(SQy"~ :ۉeEPl=>8~,@X)
L	i'IpLrJ9d|t[mS#'Z`[Zn;{~#,w;
ȁ2^̡EU,٨2O=̭𜥩s'YްB7`wxz7h_A/!,#k/ʝpɜwY`]lN{Q6&t5[oY(Y<H,
TܜjZPK<  u  PK
      A                org/bouncycastle/math/raw/PK    A             $   org/bouncycastle/math/raw/Bits.classUN@gU$5cz+^x1=	.44iֶԃ'>e*s|}}|uK3trຎb~nh/3:#p1YD	ރgG^2)
#&.`xsQ;ؽyK2dsDv%A	WPW	 m.";Yaꏥ}}U%`+OYX
;?r%UʵyRR]6M,^~mPKE  r  PK    A             *   org/bouncycastle/math/raw/Interleave.classS]OA=i.]AqZHÆF*@yWEkK`ńO?Gٝ]J3{__aNuZKC6lc[W
EP:(~
%K((N
2/zyDŻ! PIbee`TLd3b稟iEg^~Zs^b%r?wXٌS]m^Vә}W>m2^8t
[VlU&C05_UlZΣԲ,uuYasAeZW<(j(JP
p9
fa)\@^?.*ď
5Q.&,5_/ɈX}	Mth.PLC(ur+)	X>}bXXg*D>XO&Ykl8_#
LBf)aM8My1¤z#2F;۟5hEm8CfL3:!'
*m~3IPD޲K"EQIchb9vra%g!eLG=½UuwNM(t6El*N-L]&.
*@dz/pd?Oaڏ)y{ޣ{h:E$o[>4F	 ZT&|.UsIɹA./#D{YtAPuy?wnsRqFtM.ERRQш+
.J=:PZX'z(i+ppTh_<3K͠}?GcoT@#A[7PKL Y  1  PK    A             #   org/bouncycastle/math/raw/Mod.classWop[_GOҳsl98,'^I@8b	[,'7;$m@i=CPP<	3mSڙci?_ۯ$qRwݻ{DtP/~;ʮJؠ )$= ;A}mߠda)9vԇsՃp=Rg1XOvj=gJcYcNpGX((I'|{n"?^(F [6-PD ˱̖JS'N(><~*
rB^K|$[b~$[γ"{8QώNnp'rRNN'&lˍ|:矞ʎ f>'g#|q<^_וֹnFp~JϞe#=
|0|pD0QP>ޟeN]0px~BtWESXbn"e }:WE{&N
[%p"\ƏKOgsc`UR0V&J#=&ç|86S>Ӄ8_w`ڮ[+	Pwo[kDoYG4?}Ke]&iNwM=:>H`qd;Kr}kP[6M۴63=LeL&˦.
ٴmdAaz(b.&)CM7SMtR̦4۩ɦ>۴M)aja6m-:DXt=BM[t`Ld<d(1gRd2L2)3brҢG)8E1&8;R{&l|$;6CSN)
зeOAFZ_?H7֠߂m .=I`7I*T	+D_ߧCƴw<=@U(Ǻ[k6BrW/]sY!M0׀vCrGl͍^}wAVn 9roʘL}#BuRCNۘ?

TԐԔԒ40u@]	k.
3B)	SQ\=h~
uκō,ƴL/D/zHEx쥹hb	؆Сh\9`^	~؋h-̛53P29:=\@B[r0hw]3k97_7Iyz!=ѳx-2`~Q%EQv_"&O\
1 >/,tD Ѕ&^2+ⱗ<vF+?IX"ܔ0D"E,~k$DЋrϹM̨q5appz0"BikGѴS-hNZH#;/lEXZ
DF*Hu1SHDPapfsRܐ	kn&'~窉v'gGq,U3LC?:^y
qh+?FS^lر
;ZٵR[(D6[6aIhg*-'d9B#B> ȃ2ΡFR+i?}x
A;ާK3-KXDLΜU1jÜZޠnJ
iʿPgZ;*qR*pIc?u:
j|BMd;ݯ&՜oMtSKh4~CC`S1ef 崝aê7T5|F@בwo	&oLٖPo*I(
0oS&U
}PquQ7-L7~"83`h5a|Cҍ\=r	&
].Q6*[ױU6o|=ghjfVmWh30v(R
}J`_ҎӞ\tC%s@f>u꜂#p5U94G-V~Uc"n(m	k?)s!6P[\56ܝfN]o1Ei>D4jAFKvҍ9_"|В8L@jy օnPT:R,RvEd"Iipڅ;asraAw==M7!}FYqCFD[pAJG@7G[n$E
$wT9L6n޴zP.Ek-+G帤<9!LRh
)Կ2vJJS(N~OZq#d}<GHQ3ZV߅}"R2*rytwNE;I3g{BᵨS2W4)M5T_"]EB(uiWxkLߍ4uߍ3qL`rt2dI泎ܲ'B
 |Tֳż-:`3h߫ZVi
rrB{L'Mu+ؙL8ΆI
gV$yW.9
vYGQhE	w[壤ݭI߫pR"	ʙ׊uZR<j-S^&ad_<|o=tRIST
Y6]\]xU2}v -ysg*vPFy拐7V2n[͸zq`5/쀓r} :DTD䮕	༰BBvkLqd;?*C@0ǯvD<Ay˛G,1t:	}`jaUƕ.U
t98'ZZȳ<g#'L`0TtAe%~rP4J3h6Dv*{jsV<pXS9JMUXͅ{jRD	YwK<B>+!
:>yPKC^  A  PK    A             '   org/bouncycastle/math/raw/Mont256.class}SMoILό$,KV
RkVlplA#eG$aaw?pQf]U_߾8GX\M./`ƺh[Y*(ympo)Zrr
L16wڗ.(ݏ^߮ono7xgKZݟ,v[a%v}'N:q}cO.^	k672Q
㇁gpA\9fNf-,U6%q?ҿ[VM`ypq>^60RV%\,"0] mӫ3L9zKgNI-sͪqYFhsdkY	ͼDA#_v(/nTHSJOEXT4ˍ~*YVKxFUZ-X7WsMVb~hl--;UBP2 ''?A>x<1 Y(xW'#M#dI8A[fGpU
gWy1W|e-_q"$++QQr1esB:JËZ)0Eʹ8fɞr:)&7;C"⸣Afai>4F:մϠ
a+`gOt{<0t:mm98?4J
lkm.m
Y4{+=A"un!uKRV16ʡHK=<%qPK#g  !  PK    A             #   org/bouncycastle/math/raw/Nat.classZ{xu?׮g]lڕ5,-;~  KFZ㇌#8m#6ƥ]RBӂЦ)$}P mA>J/_S>ݕӝ=s=s~+ OSue/{yOC]>֞>fb¼ƫzTZHkFQASB^z
wIG]ޘgxIL3MU^ɺ|?"=~Ho>c"`UF{__rɧ_NWUK~?K%I\Z^\sҌcA(oV!zP7_TT,gOJ
cbնkME!dի7Um82#Xt5h=ss~p8N_ ;1?>8~8ܱAIhPdE~OGv
U&|¢B}lpԐ;aIlp N}ɹɏw'ㇺ=cEw؏Wvpa]@1QQą^#L,	0V3<6Tȏ!ر/?zĥw&*L
wǆ;{FG膉#ܱcba	/x,Vt>>YtiwG:	{Fkt|lXr:2r*Z
alnk`bMWS̗MGEMyؑC܉Pal6Aj|b+ܑǟ]W5~X픬#DvF&G
Əi7'm1o0<RTŚr##Z\&8[rt&bcY9@S
1F5z)*b$V5;*D]	M2v0l	&M(pDE蔶Ҟu4~^>_r[붠^хf-wAC8EàV`1 #Pvq0W '9y*NPRLQay18A/<|/"*_ר8OoR%xPT\T6CR,Q{T|ߏ/ïGK[ǇP7M9i]ĭ=xOZgqHnu|[
$<uob||j4^ϑw@`6+l%.@v㉅'3Xrؙ>ŗ<c3!bMx4|!} ea}> 59F]>v0N$Y/B4IOahVG%	Ħ9dR61A
GYP=o).4J||'^Ft>iwF`-gZpwKyu+4+1gmHJR{򎐼m!J*ŧRT9:ʵ&1VԳm!L'mKΫf^=ȰCV>gDp_ĎZw"&)	~J1K]J=J֋+/^YDPrfwjǑ0>iF%!!D!Gv8z+^U4%p-=gfX AvHvvBYخwVo:[GJ_(_fIva?f[֒
Һn=cMKPR'$?i7Y9CϚsn4,!ھI͘쨥ڷp$AĲk^.gvc31CӢ01c
s7Âvu|&X{֙*Y;={M˛̤:ֲa5Jwzg=*ʞ{*
:WfUA
seb+xKcՊ\up
xBNR>Rw<Yag*q8(xKYeM cV+:*[
v@P1 oSoN@4.-N#n>u:kQ~<FX^&PWө,.d/p*Ϡ14.0`ڇԴE!Ȗpw!YXXXb2kk'+mM#zFO\?<+՝=K2vȣ]RUpj]p\p`͜pxNepv
0գQ57cf&x񹳌r=c։ƤK
'LEv"!L_ǎз"^FB߂{'t6e0K3
H\
M{}5Ywh@fdQftfHϡyQ.QQ5 +}24!I*8gϣLti*P{.@Őֿi#h
+=-\/ß9Ew_ͤ6˴M6-Z#cA8kBsmf!͌)n wLk	l+^*w$Ow19x*m.>;5ݕbC'nP_pJ|;/kɎ?&c4?2OYƣ@_zNMn-pJѻtɮilk8UeV M
bO Ja:kpGm 3"aL_/6$zIv2'kQcD-Ω,,)j~4"~xʳiB6A/&K{_/Xp-R_:y6o+g~M		DIDWNbS]!GAoL
rBrzhZOզwSiRJr6Os|6Tݓ8苜h(rz[TEn9nB"r|W,ē%#%H܎UZVu\6O'S I6hj)AAN\mLc6GL ,$z0&	bcOk3J
gpg4wE^6_Qiмb+/u\X
WtR()\]ǧ>+yϔ|(OHy"I!Xj[q/ʖcu4-&HՒ5$<%r7ߍ)qA
2AVAAC#xSTvSi'bBEZDeiҧ<'7/{< FE}# D# b6+9_wʱhVreŏC[ydhF[3M14+xx@B
-r<:}?@4VǼǂ||a	}$99&h _sabLKHO
tL!{-CnHQu!BChHš=g3gӱ2v@+8QUC܇6C+xiK᭄!ST.03#8n\Irʨw?~X;>0!&c"<K8!'62ay%Rq9uޏs8;fǑ E}ZRC%%+pU7Ym"~ūR6k7&h0Tyfv>
գg.t$eYnN&㋏Ml?S=piRS[dsgx45"攠it],C-4Jݒ2$,>5<
5xԵ%^wp0}LdC3:KE|4<QoLɓdQTQ^<ܘÆQ`j!C)<38P!U%FIL6E7+vA3|[Np
n>nJdd`pHٰGvi8ڜ"cZ1pBIE	lz}Re>Zrk5ޣf6!b-G.p:g]Tc)AOUՑrNVifIM]mũ|Dl-	).Voū;ux])\FDArҝ9No;p7Aޡj>ɶ9j+ie=!6T`<{G:RxVyM*ۙ31S$DB0e+9Hӊ%[S!:rXiCjVTNO;EXO+$nhV+wΜ%#C*AҮ'I.}Tr
W)\;n019+íH;V3}˱c3Uӥoced-s 8fڎd._>[Xg1AWS< 'ᵻp
40l7:
F֌.x;(4
ܼJ_EN̄KhQ1׉rDϠOa,j2yaXh1~D97nGL>P(J\N+1,b<T\)iҸ1
H5_6Zx27-f249vl|魖` 7OrӐP@nۚJt`pSJK('mPf
UöKW%9=ǭØ$ǽ3P^Non[y>T^CNϝSVLr\@To):}9EnTuN[S4U;9E+NrrNT0(8cSs>eNQp2hf"/Sew.]-hf!bWٳ=1wNd3Yj[=q9En0hvN[#hNNQPdNѧ)r9ES""h:((Ss>JeNgf)n.Ӿ+L/hjΜ̕S俽]jU9ESWSt:FLH]jL9Shsu:&2Չ6D 2泞88nH	.lOïHgqvqH]!nL
S}	x/˼ ?r5!MyY\\+ M|c:\Y4))Q._(.~1}Ye\k,PKG  5  PK    A             &   org/bouncycastle/math/raw/Nat128.classY[l>;x&N6:/ء4MºĨ:0	}*UQ%-O}iCվUTԧJE	9s__濜w[GX& 9c?'s*lxS`:<>>=>NLXUyx|zS
H
֌۠6
Ԩ-h-
OAR Xa_W
>Ιa_]9n$^j.ݫ;FN8QȉV'	;?]c]E)[lXDX2˽Z{L}\{#3xNEV,5PTh' ՉfGXo쑥ţc͹V1GڌpW2h5QZrTI(V"m6-;+gR%\>XZ$.^k?U,[s\}atinh{bq\DT;Dc5|%hzbk.dF=¤ѕԎ]F	,o5s	Uwoh;,-zy4W9Қyf^h8V/՟<PW|	cYi7*'1G6QܜkrM'eٽYt[NMo/<]8IT(p_S`X1V&&`}
t`3/5_N LLa'tp'=^Hp0nIAnH
HuL`\
p,18J=LgR0+)hqz,izHh)YHr͓Cm
6y; cluP::3ؓ2T )B(PvR*&G^ǟ/^+'kCI2Ae>TIP%*TYPe*{s¬gֻ¬7;U:Wgh,._GqDG㈎A%Sc$Ct${ԀY0WhydIž!gxu[%,	9cd!Fe<F)(EeQ1aFϕ2l]f3}b5#|@Ggx3Ett;耎~g99}0VJbJV0+j%_;
Cn)C\p_H-DT`H&fHkeV&}A6$4ʤgS|`G(U(RoU2T`|+P"%}W.\)
yjmctY.}nӔETiy{ 'z#<ֵqv3OAt%3TZ!ؑDJʫet;2l2
3(^ې]g?ۗ_y|V4߇_J#,\I&>^s;4==lS=kGr<?Y4D!z´50٩s}계گI ܅T!zp%ADi}AQċ{J"X
s@[ 02lO$=nB4"BYu\e&{n.8H6_nU6%Sz(bOQEITt)RE{xΓ"<H9va@sž']KH莨o3irr
eaж*+R$Md]aa[#W3s%75"<k1똻ڒgڊ?ښfXi+3ԬrJB8MĻY[R[rPUfzLYKCͲT:oZ:JINLhv0q)%F\rKra[4?~;tmO@ťc+K^-Xovm]nhaɈidD%6f,'.H)$HK$Pxf,kRBq:g]rVCs<y(us>c1T14'cuO	/c-Ï]bwҴ^~=n'n屔~.%3"hff4(G<#aPqRⳤy30o2_;	Z(>m=X^?Y5Lf:j.mK<r"rhxqXDEbe^Nd^/kq gԚ`5lhj:dV_giO5[.K͝&l=QRQJ^42|Hi8EF(/n|Tw()2J
FV7#(թxWc.01аfKŒ,!ě)+ A3ě1n)-8_J7n9~?88ĚĿgK&t;ԫ#Wc?C?RXWS' Y*[jRo;b+<)bs^:+?AȭGrkjӊ<hw5<!5/3v^^XeHw :>|q,PX1rTL5kMM_Mj&j{/u="%0;rU5ԪV45ug,mziM05S6Nioe$ UE}c7M; +/جRȖBK٩Z٪w2H܃:PUJT	S>]3c๪u;^jYa"[RCINb,x7,#ʽ%eppTbpepB
ϓn<Pn9e݆%c[ve$G^5kQUZ2"ٓ,Hl(N(	>evho	\MaҤ̑ZKmxGWo	0ӇL'$iey Rzcc?T:OO9=Go$$jy` dK^j4M
U
P0Crd{Ň3UUNH"YnxvO;e۽D&	aP6hdkG)q#Gyez2\`~5JC^'4tY̲`nM]烆=o[ow;)<Y*(:70IZZuXw.+o]V)vY0#>\v?}7:~potᆡI-5ԨF
5j-d5-Q9I'J#r\X
4iDN#$iM0bÌ,a;b⦷?*d
%V:q^淰fcpڿ@2(
|'a9WkI!mʸ\[P(WƆ.3Tb2
_yE὎i~S_K$}L֊%kPKG	˅
  |"  PK    A             &   org/bouncycastle/math/raw/Nat160.classYMp~N[V	wb!`D:`ki--ȒV@ Q*-\E%P|S'PpJ%SRr	*EqIQPzz"w}^ p<zKR;gc0gfteU96E(F!U	y
jWi(XI0~H~Fq5DGIiҀpvįu~RWP*wl9]8aʼ([B{A':xv(xv궑Vt69yŷC!'WOMugyϷSDO,Nb+Y^F\1#5Ym.awVWPik4kfq=Z\_;^NmvQ'i eu]V)ujmݓ䍜{hyeN7	9a]N(=Y]'זfmvۮ^+wBϥܸIdYu5(Bd
W;KkZk}Z];*~/	[vRDk8`0e-nepL*}|f^>M3u&Qoz}YУ,|T,#`fF(faYiIC=MzM^c>=A.|:)wj'b.`։Ŷ:Mr[}n:%RRȍ`2s` 995VMMTe5UOm6ǬѧJPՀIPKP$TS7K~[*^JׯMQ6{fX-¢L&2YKn6GLԀdMLdԐ%4][ƵP^jQkM4@5T@j>P 8@(зK`6+ڬc%Q֊~n6Xr$
V~A3^ZDˠzzC,{PrmTfMllt̺fav5/.הSM6aPZ&pu,W$uܧKfN<adWцnAZU[B}:5mXOA%V2(
ۥ[qQNaY9jeVh}[>T4.Aa;%E"n
'B~ːy58Ex@ΊlUnVWa}ʹjcAgAcpPCgB
r1|C>}~x6*Ƌ5^4aHeJ_{2|%zBi^(G5Q4a[}$b2hwCq`O+CPnc
V!Ӆdٺ*@*@)zpt'AYM+*BGW&aTf@5/d]Q_E햢"A&Ѐ!]]y0 [--Ntr)/uZN999VLtknStfA
sh?L'_sR5֩۹MG	y'jj&PPZ%P&(JO2bQmFx?Cз '_?\}>DPm7}:(#Xt;`vc!ahBGZE
[dx$5AJ{$-Az$=A{$&Q!:Ԇe[74t0mSy	u5=/5Gi$_v&pkC%pَkP'pk]8i-vlX vP.YZt_a:msYL2~9jcNa-ьǑfXA9B3EQtVУd+(*DP@rZ^6
o;%B.w ~?/K
jbN	l;%%DV.%1\"K2cD~d~p.,^rs<V0ep~osW>ƾ #)%&19tRA/+~l2qF[
m<&4a`ux\jKr.BKqiQ.?-WKqQ.,U~b1.BdEu\ѫľ&=ǸYམ4ьwxq4LZ$Z(ZOY͢:݆{xwotG7Cquo3#7[WwG>jKA6^N0lECQpmDߠi,'Si>$1rס!5q8FP88yzQ>
}WYT^RN?JIXҎ\kRKQM?SU뽾7C++{R#ҕ{B^
9PkPlxqyum>wL5t0tìƆ+98چenYkgnϪO
M</litNi?먵O#,nO7tۗcۡ4{,CL=c4mf&dhI{P-owP$'1Z\L^hƳ B,(ۚSIwb)sfI/eA("[iĲC995KV9A,OAAAAQH)ܪR,TbU,ǶPA1238Z	EwbYP'鑃8eJLnE|M*1G1:V8X#
^z#1'<
odq۠lϻuwa_zV!"uNdijȜ7/ՂaEjcto6LZBl5&y@tl+VhɄiH4-M*.ZTp(3e`)ׇ"/ʬ,#Շ-&qFNɭzYgq%A&(bv;9&^LvDi9$WiRyQhIm]BnL
D#!q@[IGT\BR.!!
|;?L !CsdEz"ܿ'_zڥܶ'o[%ze;@_iҤIt8}]hUzš/TC=(B}y}ݖyAkw[E;|mv8ze^<۽ݖym_%>-֑7,>#jܞq33ƵCgyWI/yn$9GwAZcn=Hvl.#@=d>E,
:nL]kb(DV
CXU+{pU3ᔸxu8Z{
ۋ.cp@rEo<$USfUş?,%PK
  #  PK    A             &   org/bouncycastle/math/raw/Nat192.classZ]lu>Ý]\%ޥ8wRLJB,"jEu(Ҧlڎ2	>0P8FP4+Q%/E/}H@u,ܟ]KZJ;|sϝ;s?gױ 3{2s,ea+KL5"S*ՠ62t-ii9ژ]	$@BِUP?_ yAP\y.޼@
.B^;.ԅ%2NcoXI<Njἵ4YY2]ݵ5ץmu*<]6z;<ZlgV	S~*;.sDԵN}2*{xygR}yk['inY
-N"mZwP8嘫-,-^r&z;ۄyfwk}ays\Y߽{~Fn\zJwUȡR&J,5v$pUc$۷$OMl/\Z}i{uzt_\x#g5KAvͅ3կc__|̫+TyaC{	ݎW//Q}lZ~5X12zςOYif-Xqc@>9fSD\[̭<#y8A勐10p?t(dp
Jy<xyxp9a;]\e.WE\*|./fW鲋||{
Rx|{dFkSv/miǱF`汎԰4{aB6~,M73߮7[v2i*RuICR
I5BRMI5CR-IBRmICPn)5)^Nwæ4wwsIlnsw7V]l}4:
Ԕo[zHMveԔo[fHMveԔo[v@L)i%e `Fs<sQPn7Ō3 P$Fh$f 4c@3	ZI Ў4h_g'3̓%Ӊ#0<_ГFrPs~1Lj6/XC ;> 0<˴f{Z̚NK̂Nh,N˸P֝ s'pqrpr{Ir0-NIFI3^Q3!!-ÔaҁjBp "w3\O$JnS?F?G%1a9>7qۦgj=&|u(M4U3ojG0CP,8j
f}UK027GVg!hq6aFhŘA,f}U_xy%#͟«oC2Ï!\|]x郛'3'#8Ҫ#Nm^v?Z?	A/[x|6RFП@kgc*OPN
<)g#? sDƸ29gܝz$|$Lmd?l@)7AvtþiGUolOx#?CfˠoX=Xsv[渇HqUUU3<ˡ_%eP1dA'y\8
Pt<Gɥ
Gic2ۏagE!35_p6-Kd?hԬB2>>I}fE<H_EodI6|C,|K"|G/_f%Vw\pI/ђ^^fn=mn#n3ٝVHWBjM$0Us^)rvy%.Pm(=eQF
ʌ*G(+R8ʎhc]PCgr%jG<nW|3܉vχ[}+ȯ<DUƯRI")RV)HfTT$+ErɎ|vūP,74|*j&eDL#pʨ(%~gŜ8=8#l83+8+sq)`~8*P"6`FreeL </GRͤ)z:GlQX</[qT:,)vP\ ύ+vd9/;{KI3IGC'{@]T*#Td*y8'q\*<J	\*<J	\*<J	\*<J	\*<J\y2B/Gg\t_b_yi(M82#/\;֘ʨzqyG,oZBU,RjB8JO㣂 )Q>+(#1ʈ
©GD(3>*Q>j4J⣂(FieGG!R7)K{/,9!m1Y6x3REݏڈ8Hڌ4ڊ8Jڎ?2Lo
k,?oJ,qUkcs}tl-509o uȻ&&Gw`kR/ci|sks;.lEu1(ƈ7E7DBzϹ101Zt~:
 &?9晸;0rOsDڙ6lyr{Vbmͳez>"-U2ǱzJZ̴Mm}P9־s9N]cywՃ;WQ>?<E,VeEUڦz*KqҠVK,g,wꕶL~VgF\
*Nl$"ׂi#Rlԋjs饋;7WhªXUn튬BHͤl!o\K;|S;Xz=Z2!c!kJ1N1NC5R
H)+T&JJsB\VO
ToɖH`uNܬ$48a58LUV%eRI,SJM
eǤ2JYKv
6dMhwT)uIvlE"9|La(8rKݚ׊q1w?/#:v;mkv?{lw1}E\#0"U'+$Ƙ?L19Vx)+{]&.|EG<h;{NFk8d
3+ lN3siqHT˵Ui[Qi+pϷJ!in"NTrHפBx@g/#B0#UP
VU鏤@qS*PҸvVJ;͘ЎI-͵ER&"pLojRmR&٤XUN:f8	sf%Բ!)B
\II;Ȭq	nmuAH[lRJ"l}7$\j0,"k3wuO'ֽz/}PϧӽXz/},Oҧѽz/rL<l,a=\LK.{>TP=	MD* LBӇ
j%cGD~OP
w>AAoxT<>AFoxdT􆇈>AJr~!Q?X jrDMN2`ɹ,E>X8;Ln9yH}ē՞ P$Fh$f 4c@3	ZI Ў!F?:oON]_3݄c}.=ޅoǓ˂?Ҏg9ɻmJ(zY_X#t˨on˼&_'cLgğ?;#OPKU  4+  PK    A             &   org/bouncycastle/math/raw/Nat224.classZ]l\u˽ǻ˽ìҢc;um!mŦ-{[k1Iu(ҦƎS0З h_bUT ~h,$Ahڗ})>m>5l{wf̙3gܙ;}"<BvoCB*{ш9zgY(3Ce,+Td
,5&gQ`8XV?ȟyʝ=x&]<ʈܙ(wu]K6-[	h7y
ڿp\^:
<U_
/; :?
6`ַ_{a<9yuA|:}ye57PW*l`=c`kxz'.[+ o2̕p4}fkcqus3o.l^'
 AH.*.nB|eFezy{+Y9*"rȁȁ.DyYeQQ|Rݭ7W!ryzD#p\\8ظ+˘y}-\=<	 CCo 0'Yd"ȒEES9#c,(i=+_&2R&i|%2sV<D2,)ɃQ&ɋkE>N5||_9|EerHΐ:>.ˤ~r֕a?rKCNoxE	2Cڐ^yPOx lf$#S&h8+35E,ffWz5׈F5׌f̵׊V̵׎vuh7!ۍ_>kOBmH'0ٝ,5d#gQZ C+P]P
5#@MjEPKZ*ԎUk*A?-HNM9½y½½½9½y½ݜӑH8#;޿{r߼_z˽ƥ?ߣϓ#((FeоkCuf䲯L\˾s3Qrٷbn&J.v͉ː >DUbr˃qy<wY9O<13[.z:8d0D
psK
0w0 sK
0wq0 sK
`62gH]riBz	tbBF3%TGB)W
&et^P+䚖ySkbF,BW
sxWQ+1xQW#>`|g7`|[Ϸ`^|O&N1!0dfgClŌ,ĺƺw*OaWca0YBwra^2=R[䵗oх,zM<EF>&SZ	D>@&%xw.@:OFuo1
7Gn(ǤU?;98yEX2zT T#RyoS'Zi-z]3v_FT^>!E}kCYeeL80[7'o1*=}tbڤPT4TEK qTkgɒ>HHB7	{ԈLhFBW(8Zg
"gx&k3%Z[%Zd!htW-$֝<K
	%;MpYd="d&È(F榐.ʵsE.!_ȥ.(e-D+X05cFfP5
5
5Rul1F6Ur-\ad[%2Rͫ'wпA13XjEΊ2( 4JϠ,DiA92(3*!J(;3QDJnM$p5{?r)2r@n _?5)H//A1^rx
:ԝ/~Qj7i`geKa%ȰʒefXUɲ2,W.YnJ"pARkw.xM&RُyPp@y
8P[0+',e?	3)8w<a3W%OZ0FJe.eڃ%)'#Y,,yc8OzcIx3+^fLO~fH.fLލfJfN>fUL?DlFLXDqxhthY6?a`'!W8*,8	0md'>M1m&piVemSL[M1m\f6ŴUpiVemSNAb? S͙΁6)#N`Mۊ|D-?AX"*-ӵ"eFyXժ
(2ZfVc؀ְԲҵ"X-o@ǰԲӵId՚a5WM)	f?[㯹gYަǃ1'FL7t3Iӭ$ݎv&`+_Ί1C
y= ٳ/ ] b N }W Df뇏ep8vCXĢLCS<41gbm$Fmdfmfm%Vmevmv&Uq]=zP|h\Ä
+]}%-
ӿKw5qҪyFu* eB"asbk<vOEH	tgsR,T6,ӿ̩ӧ}S^g%ׂE2r|~u^&ʬ8zS!94y#|Zu|B@י?OBO$]XBCO:fܷ5v8;GBmRE!ȓD]w!ݕG˅%XTlt={>o
x<GҲ;海{DDڒe="C +Li!@},YYU|Yo/	vPK\ŀ(PT~P.2rQEPѠ.o"쥪h:]UlTm:oۅw6Xë"X~0	}Wdaw	MJm'E'cZG\RPb+C)m:ңviKmP~	}:M[ݢ`c
LAemUY4WJR@gƶh3M>H:*}f
|$ey:[yyƘ5b/܌#x7&s-W-ԃ2S{3U<yډ4`
fsQɳ\T\RF.+d߭]8ADZH*qDC@hUhUaqxm1a^/xs!bUyĒDZe1=1apY2JV&78~l^rp
p6(f!*ߴPM! @(Aye6sVx,(UQ$46;DϬ{oQƣIJA]U%x cJ\|zF h(n t\q)Ct4e0P:3vB	Z@i7O4QBi3A5G6-b4{*K92@6ӚEZhZK\kU;3l'xJAPtI|AyNĒ9Ucui:<8gq>"iIyBO(3 rڍh&?YraqF1pF)rFYe r8簢ıoc_ӖD[|a
^Fnw5xkڽ]0;ڽĎv>򅙋S{]
3w+fGv=*܈;FTw%0si{Oa^ӳWIt0ߛy0߭䩉t0߿ى0	t090Ӕû:s|fpUSŇgU-!W5L|\qrU3ćj>q8[{.9qrS0Tv{G@=UPf4S@SZJ-hG@;Uw#"gimt[]Vu;:к`\E^gB+z|1B
"_ɨe	
?~&,soPK<  2  PK    A             &   org/bouncycastle/math/raw/Nat256.class[kl\ury]rI-iY]CIl&m%brbKZK+jm)*ct0P8FP
*UGc1_(ТEZϢmy{^TGQټ3s7gΜ9sf?ry#29oܾ̞'TWy4 ȞY`3˘Ce,+O,ۍBX3؂Hʟ`<@FԲV<,AZ"wJΠ֫<BvbN 5antH{8GV KɐǴsW/v DwEsO?1Y3[vT<{vU9@wAR楥vg
[Zg{kؔ8rwcM8mo@8^0W6 Yʄt/lm"e6dzgvRgcs Ջ@+O<9-0ҥk	\򗮬ςE~}yV.*"r٥WyY%Q|Y)rbskm+;׾j?;6t~S]Grd,]?>L]¬ݵ+0̕'7pJ<Wތ[/2/zτ CvMnI&M6M)Αjc^@#\X9LJ~|<e/Yb,AരOB#,dDVID~r@q<-|\6>IM|<b<EGly67.o6m?1cA>AUBlG^~GEꜝCp]j^!o"mZk+S^EkD\#⚂kF\3ZkE\+ڂkG\;:D\'zRń{REPF
<Fq Ex,ٚv;oR
@
jhPC
jjPSZ
jiPK
jkP[:
hPGzt-<M
e;O>}2w<'[su0wmo[sA=upnw({ws׾uW~~~ϝ'>#tO2WDf6Gstl_k+uTl_틁qS}1"n*/vM}1@: 3!a.*dzMWফ^pU/tYV +.̑XƆt7XФk%j~XҀ랉%
XҀk%
XҀ{w&+dV}F u74V!Jd2輂W4?
^!sW
輂WF9RkqQISM
؝dB!Az$CX	+	`%`Ư6S*6ȕw8*ĵ!a~
?36l0؀1+`c&fvaVUEfDs?%'Q{xOFUnU
oΟbk9a$ޟb 
?lxlO
ɨETlU;$}H9ޚx`[dKO~u2Кhˢo`U߁M>&","H#d̳&#\P
bo^	($+qReX(oo)
p'UǽC`|D.<ևk<2Ԁ핦W!/sH'ĴGUtɽdC4tF(4ؐ-9WKf;hGFD;k͎0nݗƙmǝ{^:xxJ&t !z$[T}Xc7A~7L>HOX.文7~!`tyo;>LXa_f--fxKzKtɰht+RfqwXbp?&\?Dܿ
f~1nϻoF~V@iP#4SHAj!D%N).wa@ܼ-}Zh=YhWʽVX_mY
pXnCS[y:0.H&#:fdS'l"#:<^J Ŵ<VXarHtҩn5FX1 &$HlDIB(+*"NQNP&t5%ZEo`g8w{W$MDP!Q41ߎC6/\DR
n)bp(	GܐFʰP<wz
]5Xd)VA$YVU,;$I$KKQHFᒌO97LtVǨ0(Eyt#Qa
WjGPՎ,F4\Q
j8I
{j~ 1*!Gqèuif4
p<Np#!3afUv"xSEM*7LDVy ?
mW.?/kc7mʊz$*q}3JvmJAG۷t$*q}Ok2c!d8 ӊcmrlB<@N/pgb p	+y~W;^s*l=^٪beB*åVX4\jeMåVX4\jeMåVX4\zeʕMCW\bHJbu*~
xUE^3^sxYkwq`Eos5CEjSfO
/06(c2vPSϪwi
r~ejd-噃``-Ke%k)ftkZ-;YKM	tk9Z-'Y+<hXu4%Ve]:*jz	=[mc$6wǻE1Fr&> ݈FnFt3N"ݎӝ^LDe}Xyg|0.SԔkٗ
  }  W  Ͼ]  ه vɾc  e F5߷د~a7h.)fSQfɊ
4 Yob
mfmVm%VmvmN$NU4]34>,6y90(|!06<x`oga]cQp.Isע3Dȗr}ms}FԁFTuRbB#I_@P@>%_DUtO#6t8?wC52I'UwI'5`*恚Y;_k
|s~soW*
SR͆KoV&~d<iOd/`
[p<omΎ+놥`]X]%ok/p-/k|onX`8& J+-  ^3^ZKގ
(u`6+zaMJꅪ^<P(bL]LiAKxԣe&R.J.O=oB}nCvmKoExz\²NM:樨ń<`AOj;5:cjJٺRB
WjD4O}c-øX7Nb&:NkQ`cL:BI,JMreuΔlQg tf(fY:ӁWYhYƘ5gb/#gx7Ƥ3)ugx7tuκYoI+EiC0:k^EaZ+F1h1Z~7FXR.%ݫn4yR&ִTɻ3+ԅ2FjPr)jLӌ\ɳ\
F.#9F.ks"{@c&G#
HqF
r7{Ex/vADRv~,<nK"-
¯aXz^ /23jip:_9Pb#W.
͋@XJؔ.cZaPuH!K*HtBD|-NXD\PaڐE]u%x cJ2RnL8;סP+<K)養C0Q!:ĴS	mƸvThe]%2+>'hbftA'jTmRDIU83*Q	.вεH\k];3'crxJAht
gAyFD
 t6(2P;Za>"IgyRzzg&g8CbdSeg"6r d1a:Xm!c?kw]z?EZ?-iُߌԿzC	˳XR\LsbpF!hpF1hrF)Ř0gu΂|)pYQBŠ()rzit^j':L饯v^j':F饯v3^j':@e]WNOzYU;^d~I\usz'u?NJzo+-^;罽/wW{{_5/˿#
y'}O:i'K偟Nc?鶝l;, #w=Y*<P9wg_F@7otln1#d6.:NFnPiCΖ es/v-YӖQwܔe},#7euw3@2kmq1ŎvR@CЁ	-@K
h'tI Em{ƽT^Լlf?艟J80艟J`?L'~*!FOTB 3 aO%$6ɟJ?K6Q
DkܱHyfHy}?\|#FIb\oyZ	7K	!IxP;o_9dH'yvKf>4τ?lsÂ%~yPKJ0  A  PK    A             &   org/bouncycastle/math/raw/Nat320.classQKOV=w3ɣ14c:啔GCb1QE
qjl2IaO&bUbE	Q@龿#JTZν=?o<1.AuZz^k/+UT^ePQKes^E_1Ye'pM$Ct4ۡ;X
VsANSlq7^ki<ږoU}ǵn{	ŝya@fC+돝Fp%ڲM~H[g݌y`mFt4vv+Aގ&o3H;|f7~bZޣݤ
Ԗ-(QG#k}%~Z^YJ_?s@zrX R9d!P,C?|aTMLc,_hkMAQuߑ(ģL*Rd2襯#xݔɪ!*B*!7U^L'AؐfJkVmlH&&L!L%ƌk]3DbVKqeb*+_4(>%,Y<"K% a.t}Ogpzⱚx0<"[#<<4_J?5Dt(,oROyE~
cGYH=J:5sdz2Iь,dtz6K4X\G9XBvA?N'
+)?l҆3qplN<SpO_PKg:m    PK    A             &   org/bouncycastle/math/raw/Nat384.classRn@==Ip[(Ԑ@KY8`Ѝ6"@HTB,HpOA<gx(ʽHl9w_}`+F) K孺@ToeTJa"*
([#[+GaM כ	n{R!;dL2Ύs_ivAEp(]޶t?vC~?5OBf稴ˁ44C!
+۰!l ccac0mئl!krl˳<Gy1pZ0p:
C1TiRzmpI[I\1 JZˤFbO1q![H(WTq,ϱaZj0"ٞŪ3J1ɲazd(b&E-r(yi̫3Yt-7K;8#noלq(­-pygP
WdL!7râV@hs^JfWӨ<gE<Ar
ntKZ,Pw&'rw8g莞PK
BI    PK    A             &   org/bouncycastle/math/raw/Nat448.classTsU6&6
&H5
Fk-JEZBMB@QxOǙ /F}l6M$|߽ܳ093b8%3ۆ|ьmmx]Wd6cwmpv/XhGL~䛷>ʜ'oQ\;U=ZB$?`3P
S,.$$;ʋ~٭ 9VkO|j/Pv.MkӹPR66ȸxelk^ɮnɭKxj WzηNTK9RqKNe^jnUv{5&~-צs]$Ujr\sբг18&!o6+ҵz)^kVw
Nïm]C҇7>::_Ii^%nP4ކ+i?ᕪM&N)3?4o
xK}QrJHf쑅:3I	}l︎$": 8E!#N/Au|:q	Nqg`i2q_0,2,1\`parӰi>O׊K>9河^qaʘ tH\!aVd%_>
bHc_>G-ٔsKb*jF(LA5fʼ\JBMk搼[ʦbJTbj4bZ1(hlAwx0Nt`>FǓɒT>TJ徿U~p76	_@zG0CI1G/+o?)N\y_[ O#X)Lc|}nDzIJx	Uf+w"xVНۇTN>s(-I>vHs#7
ʯ	jt4hAkie[LCX6!)L2-ܵq%5?rgBeT)DԘ lAEѤԒQ(= H$,7[HtWkkF7j꣝"VlO8%mX^mS#还
hJB9h5h0d+t2ȝAiAWd5$AU\ݔ';L TgɞM*j[LO1yEB~}PKq  \  PK    A             &   org/bouncycastle/math/raw/Nat512.classRn@=S3NpjH ,I0B)mBE􁪑:Y68,x<aQ{m#<֙s2sﵿ~<RyC@ʛ
hl6eTdKa"*
(#gº_oNg/0﫺vJ!Ct:1!o(;{ξ~>Z6yaOvVx~փtXSTمBffˡ45Q3
g)Lڰ!lc)1HN´"6ecȲ-Dys(`
.b25%2CcҤ;TP?/uוSDGc@pH0+pcBPNű<Ǫ:NZ5%sB aDXتBՙ$dY0d2d(b&Eݦ#<0 % 0dq-0aq\a짺Uw|QM.Z.aϠ.$ǘF7o9"Gl-`EXBCR2/F=9d.X1d{or˦+]b39[q;zPK~yI    PK    A             &   org/bouncycastle/math/raw/Nat576.classRMoX=/xvHS381"DJg $75.eO`!$6,`C Ϙ }ۀXɹs}/R*\H
Z*ij\BZL+L5ue{t}C^@n/܈NM2Į._Juo nfjaznK߾&o~ۊ$v	=Z^z]($^ѥn#f؝Nj0Q](5k'g/Gq;N|bzN!^o*@o^i2ѷr98~˱cȰT+/jZYI. ong=~<H( GJdZ1/Y0KBE[,~įY#t:b7g(U|`)2ϓ5P(b/UTK%,PtBnqB2n	2+KPgkMhd8#ukXn/MԄiĴqb<a1#aBʢY BY՚N	MY* Ф<M
Er+>hWД2O6?OIfMNZ
|iMB)5&3x>
{8%N-*sEa>J%K}eؓgM8FGfLOKoo.ݤ:;,]wYön﷝=vS]Ad̖AS?hQ<&.1f<@XVW8k_U+38!V
PKP{q7  V  PK
      A                org/bouncycastle/pqc/PK
      A                org/bouncycastle/pqc/asn1/PK    A             .   org/bouncycastle/pqc/asn1/CMCEPrivateKey.classUWU6$l."R	hJ%
!ִbh_B
$}?z$(Kz3$$͝;̝{~(1,)8q^780)l00uo%oͼ5!@CaZf#7xѤfK*I(:ɬnX9nqgf!-gH$͒h2˺f,Z5ҭ 5ws$z/Z5e=joY]WÆjIs++i%64}ղ\8S(ڦ,C%s$KIZ!f}*MӉs<ǩO(\t*Mb񼔾V7&M%:&u
ᬮi/>O몥ۻ0:YF8V,=R~o
\-4Y6VșdD(GD>oqIě"DEO2רqZ&9zPL=^>9|@,e	c<AcoS:cunBjEkF_гܓw#`t\
p8蚌8#CB6s
\GFM28ЂfQF;<!UܔqcxS	oAIwf2ܓpK}O$\,ÇKƆQ>`H3|):%aAP2|&as,
ZS=QWNwFn-%Wv͕+o$e|ߐ
?ڔ74Ul<w[h"*T((;t?A;!2;Еa[jJkd@=)qKO%9/""i<~<<$5UPڅYA)?!STk*Xug4%\?BЮj9ᡚDwY^ԝ2ΑH8nw;]:2:2
525\
5L6(di<w]txa$]thW\*V*x@u*5V.֫z5稜3t8.UY0U}=~H׷N-7Q:[\DPѿ#<C"ieV_mQiPK+?z  
  PK    A             -   org/bouncycastle/pqc/asn1/CMCEPublicKey.class]OAߡХb@>* v*Z@KJ(!in'bم프⿨Rb7^gv0@S/z#{3so femv=С,eTr#:︎Xd`[mr'be]%.V݊\tm1OsʐY}d[QUqLk{EP$|Ѓa	"sw\TyP?FSM\bˮgW6cGCȪpf#d+ ং[
n+G]޵]2˖[2mKbAWk-\{22Lͪ8;`ZMwLt3}$TY3,&i
Q(:4hh5taXC'FިcT(t}H0_`0T R*`x>&20YuǷCʸ',x.l$F(U?}2# /VFjH}' DI!1^`/Nx&x$~&YhC#NMz)yHL=0n/_ZHYCT2F;q
7~ ,#Q3~"@"oU5V( PK	$U  L  PK    A             0   org/bouncycastle/pqc/asn1/FalconPrivateKey.classU]WUݓVV@j Rڴ`S/4f o>|?\KeKKsf&	a>ssw߿`Hi" )?vM4-lrݴM a~T"ģa-'n9AOWÝ]F&m\
ߛ]Y5twcOw
$@e-jܬQ,헢9MjV٘z>mjIKɴe͚(kN=׍uM8Br)\Hj%{49y4:eN^[,7m(k&1^m-65М16ʆѤ;Sj:C
MksEsSs
o_rc]JNmmlAoe҄kknHW.S)۬m<q^Ļ".xOD~"1( u-tgW1'?O':|fRL=C/R.꺥y^j#ѕY<"ujE3N
PSfpdMJԕMYFwq!7C-7OWet㚌v|'nM[c)i$L0d$#	#H!×>}9	pO$*9CVY$\n;yWӟ=֟@?%?W!VBgV
,CV+$t}JO+C;XTwDvDw3Ù Eɶ)C=
FzdnO?DpWn.J쑌}s)k#,x8j],{Ps¯_*jċSATjȒYP+0[D^(*L؉?DHĘHg"M8RAy0BQ0־"_
/Vas2F7rUlP`sjkZ!%It'X{A¾ض{)xV-4D*v PKc$I  c	  PK    A             /   org/bouncycastle/pqc/asn1/FalconPublicKey.classTmOP~.^! H!AEx1Q	3$fK	?1e%Fe<Es<9+9,3DC^bзd^nDlOd1EYr┸xEn-ӵx)pKdCLF1$=.x:̲px,3l̪kyE-z>Hcl(0"Us·Xc\WxPA+m;Kuͽ}+=7s7*Ƕ^C؊tC:dk+ ಂW\UpMuL;[J=[%[8 PtK2¤ެ3甃\TdIҙO4bkFמЍ0
*0Af\	inǐIiU ifTiDJ*1}^S=͊+]emzuieWQJO
iE.RKmUF3f?>F!<Lf'EJ"_"/S)"Gxt#<<|'JA^
ShRїan=U`^Ր9:B	s.6#7$Hc<IU%ŁPK[  M  PK    A             4   org/bouncycastle/pqc/asn1/PQCObjectIdentifiers.class\SW%DAvo- ΊBK0 	Zѩqo{w^Z\ 	Is=<JjV
3hA#ڠm֠ޠ
ɠ
Š]
͠
eh`=r\FhUZY,u˫U!.iRr)YhI͔ٮil&6Urp:cJew:}<Ԍ}]LIOdeLɪLɱ130&oL,ۊNb3;M;ʨ_K{$(2ϊz[M
+*IOebUTqʧ쫵B2bu|u5j_NV=Fp8NgOqIRqs6p33ӽhTNUѻY[*.N*nvNF@ؖOQ)
uHbmV%fYȴ[fۂ|큺+5S>Ԯ6+b.ʻC
aihSز3aNwȾÝ-epX0#P̌βjtglA;j-L]MIǮOy@lJTrϮ6V3ʋ_^nwP/<Vx)zOĈ:1zI1u"Iz7NI8TjhJ;T} =gc`ܨ5.!3nsVcZ0NPƨpH<mYLab 5jIćC}C+v?>U'SHbBĐZJSB?v0hvTi7~׵`ˏzdd\#oӲ[wT:hi>NpnTc*`,0L &@50j:h 		l`0  >@ hBh,
Xv^th>Ҳ\9yr`X\
\\\\	\ W ku
z\ÀÁ##ccSSӀӁ33ssK
`%

X
z77 my;;_p/0d4|V0ڃsm;5V؎09SHqjtZZ\SkVVZNZF,^sZu ku.jj
h
jmzVfʯXĆH%*Ӟ6c̈́fZfEi3z_jmZգRc:^NR*ҞTBeP6V{EwBA8m(bU;"e-V!ZdpzEx65Xac-ހxSV->Q*_ϔQ>A?q_Ϝ+.A_rzHoc6qzBfNO	aAszT''iAszV0y9(XN/`98 X?N/	i`6	6fq"XgL0lr9/Xgp[W5{}K|V~(?H/P}@_LؠC
>Կ PK:r  h  PK    A             &   org/bouncycastle/pqc/asn1/ParSet.classU]Se~6eCچMB
VP6-_HEZ6KX4`u^8uzMgLqjg'xhmaȜ9=9o_/<pK!-YW9rnjˇ
MtŬEl'fZ)*1jhEY}ЗY7+c&k I/ih87#*f~_2t'xiOݦ4JUc䮦"jZkZ,*7F^U;U*V^ִtHgK%2buŰ꘶%dsʦUQtbzޮZ=]8%#Ut&7;bvA/yj&|X1?ہw]c޵zGpZ9g]{ U,3vT̗N,PR
;l"*4;6w6Y6W-# _h!S[2b2dqFYW[{V;ٽx[#˅	ߠB#A&pAF|qfj?anvM4)8Be0$!Ѩ}WA3DqIkxX\!'p}E0a$p3$Ȳ0RKa<\cQi]QSab"LXLLj7M_Vy"D~ExR<U_ru#uN@"y)#H:>Chb_u|m$f'-:6Ƚ[#0RC?̇WSxj6?& ]+"E`<F.!g'<c@LRr?-U3o?@pk2cL)ʫ.͙`8!HMGdD ?Rk?ט8ixiux,i/a>1tsjkL	7s_$TGw?ѼYu&օZSfy^㤹;#-,?1[(""fv!<OH?ǃbD>pb=~Ğo7>O|=C3}Vį9 FE9;D$w;)a3*]5!Ny9n PK¦w  	  PK    A             /   org/bouncycastle/pqc/asn1/SABERPrivateKey.classUmSU~nY.bk_DjJf j*5ѦIM	l²Ɇ)tFf|znȐ`$y={sϽ7߿
`nѣia=:'97Ik{/Vۺ/wB1yd9EW [hv˞Z2KKzI,dE&+KeV(]/k:zfZuy6iǑI
Mzg|hT+ceϑqNœk#T\$0ڙv=Y	V)p
/=l@weӊ7֞t'ԢաtJoS+esŒmzvN<Y*;˂~^WE	6mަZVܒ~.#ۍV#\`H[
\TK
Q0`Te
V8u	>ﺞ9~PLȪ]QOTE{	f@l츯9Nsf
O,׏66RN03z}g7[#p)/f4\4
c:)|M4GyaP4>}4k
v?b 1pS~L6g0"4âqeϐQ1Icx"_ySB%%#[U.bd<x`n=ÍQMЋ!^.BNߎ텺UAo	8-ƀn԰fWx`ΈbŘ"gX~I\Mti |h?>H=BvKucCAHKˡ-҄4=}{?qkX؏`c>d1bJkH1>JN5\O>pn=|m8
/7ofj#|+y| 97_c7.ry^$yfhcK~>wLb 9c`f?t/PK_L  ]	  PK    A             .   org/bouncycastle/pqc/asn1/SABERPublicKey.classSmOP~6(+ŉ@C7-q*adf)⿘0_2v(-3ss~`YaȉCn?< V-rB<K%V&1M6횫ۆ{o{](tk74C©բS#CSkvJMߤb!1tyjeθyP7L_nK%_>.dŊe2.@UQժ~Dwj}\pUk!ঀ[nSsy3ab'w^msh^ǩɹ=PW+]VGuQ>kͰ[i[$D!HE?+q+,ADD$>Ms@Y.(PH)C.D#.Ec^TD$T`םʡ^UQ*N4@~4gE=M#ҿ:y)M<SXV掱Jh H)VO"ë󑀂6ä>AzR;}3AZC@maJ.xS5O0QH6'ҲW~ 	wOZS5n~$bPK&]$ }  m  PK    A             3   org/bouncycastle/pqc/asn1/SPHINCS256KeyParams.classTmOP~.
CyQ:Yxw!@8BBWLnm/<=/ fЪ"sڗ-V諑3t˞a?ষ1tSrax}6OMnNnڦ7|0/pcI0CY7V,8-e7Hn/Y'ewe׳tpRsDV;U<넎?z'pl9	d	]	n0Ll_i TPDQL,Dyo>J@1D+A&հ,MKd}@͐~rQցqbE.Ltyed6+dظ5ɄMwZA/`´(h]0a\	at"GL*L\F?b$do	c1-cu'OQw3w/]1SzZHUȋ|Q}SB~PbA?YZA971Qao=}|_!~ؠ͊~Ѿ!WD+wiXb*`X!ZhCPh>!U#F^c5媘ي.yYSkūxRPKM=    PK    A             5   org/bouncycastle/pqc/asn1/SPHINCSPLUSPrivateKey.classU[SVdl($)%RB8\ڤu.56Nqq֥\#Y>G? tLIۗ<7uJRzߞ~={Αk cxAhŜ`v\@$<`zn-S#|0
 d3ե=7פ
,Sp;i⨦{uI:ʞNgVlr]'Ǎ"fW3Ys]1,S@a:9TSFrWu5^Rb<]*EUtR^vܤ~.Ɨmjj)qbǓᔩYuns<7m:zQ'N@d0T񼬾VMLͼuLDkHqkf'ٌm2u(xҶM:
	UWmnu,^5Mj8:QڪkVѤB":Et@#⪈D
48zhUSg[Gy-OFSOEdաSQC&\T~W<wR\͑4OYy[ݤI/$M8c{|&	H.KF:Cg2чdܔсkd\DPƻmVDxpK|*|n=9CaaH1|%}	1d%!S	H3<fK@SJOf%##a9fF/#i$|2au!5nzΨtQi9*

ԒuTmZ~w=$?D_ ?{-5l3Ou.Ȇ_1x6?[>ґv=bŽnQR::ʿS>*7DRGQƜ2epJGp;hrs~$ ;ĚjX
Mk}]iF7%tF
X;z|eg*qilG" bTݧNA0q>qQIv1ci*<Sz
/Աz\nt1~X홵:*H>V_`_ȉt	1M[b4T%4TxɭPKNOF  	  PK    A             4   org/bouncycastle/pqc/asn1/SPHINCSPLUSPublicKey.classTNQ]-A.BA^ABQ$
O(3ezJ§5Jlb?ʸLhksNVC \dhl.]xQ(hL|
%2:_*\f1e<"ӹ+^vl ռ]}]jkZMfצ-.hA|2dcZEѫqYcjZ^?5r%j{lfeum)If7/4TYRsoI!ngs!!$ᦄ[nK#[]	==-mOSKUTSF1tC$M_c.Z@=Sׂz3v&"Nqr@ ?˙,V*gL:}"͐^kmH(腤0`
DWD@A'(3@FDhaąяG<1 AL	3+>y&ca<cF/Ē]Oojqs0+&/iY6׸i[]Y'1Y?B6)'Ց0<W Nпp|/p%4)]; "O<#yj5e.E̝Aa@=@xC9AXǛC8N缴\GiŚD3tC!5Rp-¹^ױXc5WYUB?PKJ    PK    A             -   org/bouncycastle/pqc/asn1/XMSSKeyParams.classTmSQ~V\"E0_*DE+JJ	ǉr5UXCh&ŉt.a3	)3<9s9޽?}
 %.9q]@nC OYKL/nZzh5*jh^ml1JQGZ^dݛ
O7u2F~,枡jj*Z1bTe,chfA(uJjf
q[siW:3q6`zr6*Ͳnmng̰:/.`gWsDoVrpU-~mi38}V!'"zE"`lJ
ljU?Id9nyb6\D~&Eun-h-əmN92gyEE|yyKW%(Fkl%.l( }iΗ식Ѓ.	1$nI HD%1Q%t#A qGÔ0aڋA^pߋ,NOܢYʗT݊ƯF(8H/}FZmKuK\dJ
:aV	!a%HAvE\HE:1<efM@idSV!XU~_G0I
P%g|~Zw2+KG{zfp\FxZ]א\o>=\O@>Râ
PK!1  |  PK    A             /   org/bouncycastle/pqc/asn1/XMSSMTKeyParams.classU]SP=@VRR `X*cFC{-BuRFf}帛Bޝ={ޛo#*7qC˷2LÚ qDO&%4,Զ%3gfB8~,9'fkG$0[
`D|vI0
=} ҥL6ㄞ"@8ztLdVZlz&+27bZ"%])2%.c^pMLT&kXۻ0-~IzcxM4ֲƮab]|H322eȸ#㮌{UPHV(T.M=}ժ(-*5*jVǄ/io6z s3Z8f{p*=]OPQCtxMTPPBA
7}DE=4bf0(hÄ62<eR΁3L+3]xP$}3IzŚ▞tUn[%KA7H1nm
E,`Fk/ u҆
~jRj8_{SsOf
%7ݶ\m
DIT"ۥ_U'UCknQhW@2:7lǥp=кY\OxǏ4K~g=gH/PKHYa    PK    A             0   org/bouncycastle/pqc/asn1/XMSSMTPrivateKey.classVkSg~\6(-zAQ	RBޖd
j/~{L!NK?t?ck]b2ssgs]7].`4G
+h&&؅_*0wlYy4fc ~
Gmr:-՟.$tYWTNSɮ(z[9"/1s#tYMY<Vw#ZRxiUeS	E"ݚF,J*gSUFL:3 7-{|!rȅgYU7Bcr_GPNV3h.d\$))>RuCg2/(#E9!;AM\È0si?)jF㠖e*s-iPVTS)甐\P"}jJK9)ܨ+89fZǑY5CYZ!`$:^̺si˼#\SRz7<2D+1!rQB|^uWL=oP5BP	wr
e(EAUu9sTiqԜcv<|t5#bIDVA{ED<)bD<-b@ǃI7@0SWEdU)]5yt[`<'RNqqC1'(RQΕrTNdouG,O9բrk}GJp|u/{<uzQ3`'38=A`\lG-n
X˫@܃9.nGy^">/22+2nG΍.2n!Š00d7N0$2n#00)3\v4.1E7`؍(47eq,uBKӗKSqyq+q[J:a-K}4!A,b
WuF@T{mcҶ9KrWF"5:Ŕ4Rh,&zk{,8iFm*KB/I;6tm;VZ
Z.x^k?Kx
h[h`e1f
:%7kFƧxߪ;討\Ȕ#Aʸyع~Hߴe6mwyb!mxX`~,\n~nr.I {8	wu{`.Ȣo\3֧o}ߎZIS[_Iz 6+bIZUl95dLdY!gy=ݸ6VswUzYuIƕ
%S-K2+dLV09'FD%/T{[Ե,-.y1֚ōrd=>pTS.Dhf'HDg%|nIR$Ô<8wlYs2PKn>3  B
  PK    A             /   org/bouncycastle/pqc/asn1/XMSSMTPublicKey.classT[SPN[H(KMVkU,Z
S	)O_3J;Te۳'~{v'߾$gDF4ʦ?ds/2Fv
ZWm.>nr<W
lʠӵZޝ٧

@{V @ΓYǶRRB+Ĭ͘Nf1j8j:Z.ݠʒWs^ݵ-82g\|{Zޜ9:sKn 8ΜCkPrn+uP:~K/`\^\N"GoN'x\o?{\拏^~krlQUAm
+ء`]
v+#П=ި<oWp|33u]DV=.j'aPf*V 5jmo9ZZYZ;I9ٶ:}?WY_h=kU>4"	v5hPհG4lQv1א0	=qጊ\R1#*<Q!SqB᪊RPa"mUo9ULل9?@	tbT0A>l7w$yĈ70+EHhҢ[Dez6;+'s
RMTD?Dej[ٮ?oBm?Ƙ]^AR>H/_ۄ^1V0XZKРH8VJ;)Rؔ2k1+l;`&Tz*,6w,rT
#QPKo$    PK    A             .   org/bouncycastle/pqc/asn1/XMSSPrivateKey.classVWw6(-uxHlPj%YC$&{o˛탾<O9>J{`R=sfvv Љ|^ O-n orxۨB=_N+qy6!Pǖ꺲Z:%@ xtZo,m&,RN*kd2ճjI5RKWcWՔm	g/e)΃\6PU(?
)պ2й8fV(>#J.ύgebE%E*%SL$˩%mdfŊ)uʲuLNUz*iеdf	aZ2|.-I7RVrƩ	F&2lJ1QL`;1p02SGh>Aҫs㚥fTHsAػAKO.`$FMY*3AU8%CSR"1hd3Zl.m,mbj	
:t՚ZE	M$KR|YZIiQE&B.CDXO8(9`G_ul^"|`]jyyQfA,yr>Dת~fTc`k]`[jNGliyjUN*s4C6p0C'
`QP@ $m`8L O 6"yl EAy.1$F.3GW«~c)ärg
Caʏn0GY\Y?诉&Hj&ahx1|47xٶӵ\{ص\^7z/ȻdO%+{`[`fmr>Z0#ه\ .p	ȞEY\V(Vn,=A7Fs׶K&%\QXT}komm!0k? ]9!Gxvmu(#9,VGfTqCD>;s󄷅?6lz9m|w
|\f.?N37iw%n~xDDiYO\ 1쾻N@v3bH'_\B,)ӠJl^_.EM H^dYVַr46-+rz}w+2'Wd*[WdT06W0;i-+Yk}@ߠ}	'Zsnxn8q{؟-
XuR7&)dG	8ޤ
I0(z.>L2?PKY?  
  PK    A             -   org/bouncycastle/pqc/asn1/XMSSPublicKey.classT[SPN[H(K&U+޵
"U±FciSWRxy&|{owOƣ$>%OٔlneG0NYC͙[JMUZ`V˻;\ZA!b
dPHy>VYJWȟ<b%)өSxss9[͕GVMW/Xr6=W@jnګּeG̚;+]˛19Ex@ܒȪ$NzmNԊu(_9mJ+WuѡI׋+(h̾"ޣr9zr^`?z`;4um4	?Kwq9JpnzN5E{QMv
v(ة`
(ث`@ofp[Z±
L4
YіX~<3!Myheim$gdP^.ZBW߲P5`BLC7z`SOY
qT&c8	
)1d8gΪe8pU .0\dVq?yGpẊAFTdpM%
hGT90}J
:p'd;A2$	#Fl](GC;%"r0ӳE][j#&/Rv	vCc
tzK/>Jx
o"i|`|GwzXD²XEƱv4>H¦mcDŸ|net5p{%:VX{mh6d(G
PK"    PK
      A                org/bouncycastle/pqc/crypto/PK    A             -   org/bouncycastle/pqc/crypto/DigestUtils.classRZƿ-%*x*PTP9Cx$@HJ*xyB㌌2y3B[Y{v@?^stplcn={9q8q0CcW>ٖcZc\2HtjLl5VJ8EEbD2된2mQK%Eau|r	c![SYLgVAKe )y5좪t>Zc=
QsWs?fM5B*,5;>S[uL%oۆڣed8؊f|uڒCCNBEl9eF=S-[WjItBq˦2VmUS=6shq2mES
Ov,W&+.Y=Ħ%eMʫ%U{[OOT}7p)k3zA:Ut˖?tSBVBNB~	H8+aP9mfTOG*l|<Cvtu6>ql1+)"no8X_VKQ\qppE&d'	=Kh61<ٿe(8&H&&!%#p7RT$xƥ4FxLP	CW7UUmQ;mDaM/Tbµ+w_
z|;vG4
"ڀvfqif
~x%U^pvO:F,v xшk`$)5XL\K ;qR fR`%5B Np#PKL    PK    A             8   org/bouncycastle/pqc/crypto/DigestingMessageSigner.classU]WW7	LH")J5hJmj
Rb0&83a}C]JUs&C@Xh9ܽϝ;y$N$1D&|9K]HkS8ד[l/{sP2c8Pו7o)Gr9#+qg`jʗUa3|zd-O${I;ؐzT`Tg,'-IXԆHܤΣK@# 5ZqGVM EDM#!@#ߊ9Z/XU|&3S~DEck*,)k5XIiեɖ͎G@ N#?6풪:lEgtSZo\{Ӷ&K=/Mu)؝kY-ڨ\>R|b!S!l$ݽf5<UF40ႆ5|c
o@(86>?
Mu&[M#Ϗ\ʭ8Ͻͷ/8!qE:>@Mt#$t^=ƍ8u>|/|f"nPdcJ&1Ii\u6at4.c-6}nTm(51ACO_+ cM5z>/Ȯ*K8.
mmD
%ȯ۸k-/0/PI}vCw0Nr+J&8YBwd6~Y*4g^!44Da$#e?*nP\Ɉ]>DJr\ e_lc)ߺEm)MseJ{P#iRgG>хKNSF#af|elE2bdqla8~}]PK֥    PK    A             B   org/bouncycastle/pqc/crypto/DigestingStateAwareMessageSigner.classKK1O:c㣵[wT3!G̿RPD ݨ(BN.;\
`@B9giH5GRܘe[erY@b~:	@fNC"'L)XI6![*7|/,U5s0u?RI#UELK)5sS50sF9Ea+~vaqQA[<Xn%A2lm>AkoTh涎Y6zh9ag]k98X!{PKm$    PK    A             .   org/bouncycastle/pqc/crypto/ExchangePair.classQ]KP~SLJ˂
vD$FW	7^A's[g[U]Qѻ&tz>^832(z{C^ҢcvxŐIx`&"G#ǶnEPaʥ^'n:ܝBݓsE[<ai=ٚY-Z+(+%9UQTQRp~^.|.BOf"BokJ6Ӡ!!-ԓSB%TG׹4.2%"je6uGPxǾq@8W$A%eʭRfs/K@)\_2PK#N  @  PK    A             7   org/bouncycastle/pqc/crypto/ExchangePairGenerator.classu1PDwZQYM
f_x(#DSLf ֐ e{B+Wa0XLŴg6ȌJ}֜&0I`Èr-)5tik{	ЉMcg# A! ă}PK      PK    A             >   org/bouncycastle/pqc/crypto/ExhaustedPrivateKeyException.classEN
0 jqǐAP\At
1
5ڦb?Ip(1:7q| ƈ	GvfT1ҕR"e*̊克J	&&OޔWV	8yYC++m.ϮկQ#7R"_D/smx@0и~xPK9a      PK    A             /   org/bouncycastle/pqc/crypto/KEMParameters.class;o>vFĲDļt}FtҼ⒜Tʂ|}̂ԢĢԒԢbFM0ޮLll,`  PK83o      PK    A             2   org/bouncycastle/pqc/crypto/MessageEncryptor.classuN1ϕq1 !61܍0肸U7cЎm%j,x A!ݜ{Z!޸ dƚHL\JR>LSt>Tɷ'tnR+;;Wy1+/`YBϨ~/-\@.xߠGՌ#p{"!Om486%%/PK
._   *  PK    A             /   org/bouncycastle/pqc/crypto/MessageSigner.classeͮAlΎ-!]::Gkgiy5Dq6UJ}9`BcBM+eB
5]PB@f&Fi&Vo7"X'yĢнm&'h(惘|ǲ$#bEMZ
DB5AU=PK搴      PK    A             8   org/bouncycastle/pqc/crypto/MessageSignerAdapter$1.classA
0D'*=Q".\ M?%$5Bx(1	|0o33`)CɇFZ-uG*2עvw%C4$}tK-}#Hae`ǈaqʸZ]Qa~i{02
'')3&PKԚ      PK    A             =   org/bouncycastle/pqc/crypto/MessageSignerAdapter$Buffer.classQMK@}ۤM[֯Z*Ehz
(
M7%YxM@]xf}x}pMݩiYf]"MMIAb_yzO
70Da:a,"b`Dc&%vbS.<fwaGI(qNl.|
4,"8^VrxDpȌ'm.\1΄
Uٯ{g
:EJb+2*)HB
~TG/
Gq$(ȥveE@o
5+h(Z}	m}{5$VsUrѐTVPKͼT  Q  PK    A             6   org/bouncycastle/pqc/crypto/MessageSignerAdapter.class[OQ-l/@R@ҊR$ Or(en`H	ȣJ[+df9? L.Y,j9i
g507J; D2v2%Ȟ
/8ruC(Ȕvw%КI/[jvɒA<ghڡkF.JaKksVl4Z̾RN[}kc2L
6]#U6\"cl9Ldr65 z
(|֠bc7fw)MuRy
,Jz8LmhYZ(vHCih8t[*hQЪ ]AH]
:+7eN`)7Y+n[k4uS1YځbE'3s-D*PaUcs]lzШ	^|*g.Q>`#?zď>i`3GCg3f 1)6ӤoM~O!QeFMbQXǴVoTB _}C%xcchS"uO4w3H빋X3_xK]ǥ`@x.섛~^LP!jˍ}D͆+X#><Ļ{*H֠&:B]TEgx±uCq0k\Kn|q@sA/wyEw)|PxY8n䢚Lxa5B*.x iAPK    PK    A             9   org/bouncycastle/pqc/crypto/StateAwareMessageSigner.class}=
@hg!L6be<djC+؈`5}o<;o尳%̕QVGfhOHjkTV+jv(9imZm96K>\Y^GOOnrҵe):ݽ5b!F(<H!0^PK1      PK
      A             !   org/bouncycastle/pqc/crypto/bike/PK    A             1   org/bouncycastle/pqc/crypto/bike/BIKEEngine.classXi`\u:oI18Y$ǂ!/dlcbȅ<KG3hd$(%%Q.6FM〝Fm4]4iڦ-iB)?Jms{ofŒ{9./u 7$-zKҲiYצ.f=l[zz#x8p39ɢBk:=btvob{Y$,$DoO~$ny#=y/WsVhdeu_U!Dz{=z}x}4Wȕй얨'l`uޗ=f]neE	w!vx:*Y.ݟKitG&|8w=+R2ᑱ7QȖîHX8]ԔΔ&g%V˥yeLzd";'.iz;WI5uXGwȕGKHq%|aSثz$_,4W!@4b'/r'!Z2\p[FKqt{܉;9vE[%Hq-*ǆi6wQBb5Qn'})61	HKӅ|LwǆB{<㎔ۆj}S5?11Ma	Ө+m},+|97i^
xqc4vHaȤGy-S))}ln-ݶKbw=L0˱gOwwa0Wnz_
J},+:QC(#I%A/Z\NQC%wtJ"sݑ.]FbsKbu):^,#^}/}]~7^#Psڎ֩ï[thӱW>دwK:qPǽ:t<}ߡ*ks+x׋{Jݢ-{߾`BQq&	&L,4#Ln@$d;Z@q3Dm0-#l
XeÈXp}Xc5Np#lz]LZp]p,lB4Yn,܂
>k-|Y؆6z/X؂_a2O32y/1y|1LxWM:9"b%:_akL~Lg60a;Lwau&2y'&_d5&gc
&&N	&̚x)9|]t_H+3GGӇ.ycORg]^|k0	_ @'~gtmbi/Fg|Vgq1jkx!&^TA|18U|y!z<8K?zϛn ͟u\~VBoCƾxj	xDLp ͋CDO,g}GTPl^4:8A^N9'8<M,!39'ɡ>>ਞsU&˼KƔ9&~: GWߡ;"1]pt2#B,cR	7,8c5!N}Eëj',uyi$Pb8y2,hBk	XAYyWLVSb<#PxbgpImCh

LN^!o	T;̠d;Ȕ]-GSﭝeit*'9_pV	}5̀+vN?Q3Qߘw8tۃD(R|)(	?!ؚtU1̹֩пEg7j4L9\6K([?6%hQl3SB?g#Լ#ZAIl_<VG/2
Mé4$4G9+}%<3{%Ո&CØRNUa.NǜR	d2l
ǕT"P|ݶw~'$
b1ɲS=bgٓ"0?%?KA> ü燎eX=)pyNhC+l2EDWwI#K8%IK ʞ.NzKh|=]s
NXiL>|TN'ô raQa~[X'iJV2M?eR\-2Γ2P;wKgT02;
hVrW|elĺ$n@]2Rc飗S,jjt%(8e׏mhEBAzy;8AwJz+rgW8~q
k.q2pc:f7eSFV5k>(=>d}M_f//G|34?>ָu(D_wϐ:Dnu(EYc/Vz> MJ'n[Gn,[/9}еnNNR5q}\гIVm4fc*ZS\6$UTU*FU!Rjںӡd*ۆmTUæ60i+q[K*b*Z)UYNa;ZS*UwmL% Ib}zjɭIEl5%T㶒mq9ASHR"JRpeBQ
eu9u=N#MYZZ1fb*)KOD)4QGV%ōKB exZ:"""Vc2(;!,A^RNo|-Bb/>2¼(Qef]&6*}Q9OLESՈ1dk6[(xv\L*VʓVbuLl+<ȶ)V1'
*B}*}5_"W[=M[eۓey+o'"2^hζfO43A4tQNǫouP/cwt5]nak|,?$$jp$&/q]\Ⱥ7T[M.UWF7֋ڦTUwfWVzaO㚘'	cYpZs ;vHaIuk(u|$J*x,sZ8WcԞTle|:=~&LMT{21u.m[9qFW7]_M v5%'x
7loʊgXr&^MYZjoIaο%l%:{лEUXcT|PK3ε
    PK    A             7   org/bouncycastle/pqc/crypto/bike/BIKEKEMExtractor.classT[S@=1UmBPJm!,%P|	0>MM|ow9ٝ @5t;tf( ^)EJ/{<89>c3+nܥel0Z^cjS̆aJ7ؚԙn3G@9evcXfΆbT/wEVtG[ֶvlQYg6V[7>`n45O\2ZлjjRKLd-
솺j혺kmTv[fka,SΨZC媱bZ><^.Z^<a"'/G
%:
]
8FSmmqMDJu7D)▀9.oZ@>T89MUO[Paez2!၌H DtɸW8$D\F722%aqx(6&$!Dk	w1%TrJ$<GwQ)YkOtGIaiҺQ*͆|Пǳlf<WRCOf=Lz|_N=I:L{X䎿0Fyx(}BTL>e!N .`4OD*ytyxћhKL0h8>PKэ    PK    A             7   org/bouncycastle/pqc/crypto/bike/BIKEKEMGenerator.classTmOP~:բ^|c/`E@qCt3Y 1hrŮIU 5(-3(6=9>=??0\V^oQX&U	`fvpYBJx,ϵ̐Ş0&yFS~ a\ƉQm඄l5iUV# g&7[,d<H6!,l]aѦb;;p(aV(aM]+ ta=;&8$;1(fT+Άg{bֺ2=i}7EU[tڎT>U	cMs3ճ~''1,㬌d8/'`Va$9s'͋7=iC>׫⨰
|JoJuiEYYE\0 Ia !>kPqCNc*1@^%RqwT(̴03̩DW1*fVB(8FZ"}btcgplQS4}+?a#CrYXÃ=,=M_R:%G._i].ba=/t_"(*>?/PK]yZd    PK    A             B   org/bouncycastle/pqc/crypto/bike/BIKEKeyGenerationParameters.classMK@GbkՓޚ(,HiEm:U7BB7 ʰ<e^^u1!;FLɒ6>3-ռG)2J>/DzS#yC;Ң|}T}Q23t)XOhpԊ!(0b# CA3=&݇TlTraӽm
}wGlK+
1 PKꓥ     PK    A             ;   org/bouncycastle/pqc/crypto/bike/BIKEKeyPairGenerator.classUSQ.Z؛4+MEжYH|8U334tĤ#v=|{8,~`ZpOdrG6ۋI_ҋ[ZȘky	)ݤ5Ͱ>zҚQ3e16lW=㚹#$45)u5'$jJLLZ.դU3tGQ-#9cd?V*f&v$xBOjdq)zܔsy7L6z^:MWi|
88jOTm!6H*s!+ẄnJ%ᶄ;JI'KNO,#_TyWg*,0VS.@Hi?a
u#FUs2dg2ܠBS;CCMɲl`SNnvN+WpBAC
b@C
<S)óV90(хxIx%K100%2ޤ3{(*߀ˮp.6e{nЮXXkq
?]B XR	W,\ZNkz=fx9>Tv@yZ1Z~,WiJ!'+88sx;_F}[<z}c{"еsCl_VB}VPK;#  Z  PK    A             8   org/bouncycastle/pqc/crypto/bike/BIKEKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF#}0I٩NޮzAeg`ag`ed0!	֌d2Ո"Yf'#';/0DSR"@fJUYL`67 ālf ͭ%_Kg+Ff."A Y0m K3  PK
kw     PK    A             5   org/bouncycastle/pqc/crypto/bike/BIKEParameters.classT]O`~^6nlH'с"nE,L@ρ/Ì;Qp
^y奿FIw&^t-9}sNןoc- |h$SY
YX,Vfz tANP~nǼh<FQGT6
mY~b-:/SN$
W/\j!ko[
s^jߙ]OhR~=hɿ땼Y
;FѢ*NHUk%P7U1ݗEX;صRfqFdgKoKL49!^K*ᚄ'Z,M,c&2մ&S~O'/NU-D`d-fGф[QDba$a00Đf000paaD} JU
tQԳ99L;r	;]q8Λ;9mFn(/jXm,h	ZmijiM
٘TƼ6#$7jPmTCteFB,ʗ6&[ǦV$io'_<Y=Wv_yޓ/bG^mSjXrh#6
`
)R+_VNo?]#f1+Bk8PK[mc3    PK    A             ?   org/bouncycastle/pqc/crypto/bike/BIKEPrivateKeyParameters.classRN@=ëU(Qх!ĄJ`#X	FwZd,M}{Lf l^bd%'	Q"^{}_kgk67#AeC3I#T\GqadqW@}j)
ohMmt4E]T=WJWrvͭT?Ү~i}[o+疥%Ia8^OxѡVj2de

#CWA,`Ex1$BXĚu:~dѽznyNfDEU&Ew#y#,yE2T>s3'H:Wu2˿ 4CH]1m	:"̅bsd
PKPr    PK    A             >   org/bouncycastle/pqc/crypto/bike/BIKEPublicKeyParameters.classAK@&mӤѪzЋ4
"(zR1!JAQ<Q☢̾}
6j^o04q0q3k$K%3l"'(+RQp;*s(<*ZBаXB~TXҷC,M6Ñw;'л7pPsQDۆ-9X*|Aa-
QA2
H}s]O< Ԡ#:dPK.R    PK    A             /   org/bouncycastle/pqc/crypto/bike/BIKERing.classWopWY:+>nCi*q81	4N&YjeɕΉ
4M
-bhq6|7$bYva$}߾/`'jqG;3><GC06u%9֗!Di)wltGAH&dprY<㢣LC[>G#Kc^9V7:ᑽ#G{8҇EÚ.	t2FlfKSXުp˖/Vkl4,4䵙3Jl)gLk2lFFF2Uρmsf(R;GJwAY4h>p|t,s݄U2JHDWdcua'
^
5&+?Uݛ͢Krr}6l')>zi4|\";wppc	C/q=S(Faoy|z,Zg攕/1
BE؀aMpCcYl2'LM[~Q00y*Q)–
Kdg_qzr,7\8~,0Kq}4]f
'gldqp1<>h`7O=ճ)7}S<ne	p>l.0ldq?wMgDux6jKd3ȝ:c[;?D	Z$K -.	`]#>	z%%8 'Po8.7"TM]@ݨN^h([؝57 `fYq1]l?y@lU ~"I8R mDQD@<
|HxY{GDi@Ш CP4)Ad":h
	!@'<@W`^B'ex,BEc0+44|]Ge0c0'4D$Y$R%r|"_ E"_"Ur0C20Od)""_#^^xzKŊe{h! 1V01, B[U`tRxd(7"3G`_2<{y2|e!ܯbKp6VKl,:<+N\sȜO.@ \
qI/ZAs骷)A=\1/Ͻa`u8BC-|w6LD2w?`&B8騛؁ֺ@"ln'X)>^wۦSA'{P଺g;'x&VgfҨ{n^H Bpqc#wq_$8˧<3"X.A;8#xzwg,?'^GlALvm/np_g4O=5wO-4+x:/-0*XśEp[1r{~KIBʣy4i	Ēr^,,͍asBn!%5-,6dBՃ9xzlϋu-8BC,=rb!$c'hǘ;?\<S|< ػQ'K	MpH"%TR4wROՋ"6#3sYNl|nmy6lTRA
e2 Llc Z՞Ww/%Y ];UW%hZkXϺ*lv
[G[rݑd¨@-mG bS+5Ѿfl<"6QOj0
VE<$y=-&=ռt,$b3bCÄQD^>|fso4;jW'M|j>MYoiȥ_kXQ2	b$jUj˵?Uzޒ _Z=:(ۮq{:l]s5G*7~
GWCA<RʍnRJBV$b=zr=Ar2cYf22֏f*6FKxA>դ5=KfC2^fĳf}̈gm
6Kl6TmV
㚗5O*QC}P:JuP?C=u4 Cu*UmT<Mjp[Z[`mĚ{]$	j,٭l`{_9c>[-W_h82At>r:vܑFg;˵?hKp's)4qK]בBxCx毁qq,mÚ%O~񹰘Wmo;l)A w"K0ՊmD-)Â~/@=S+la[Q^Cֶ.ݠ.9FuJSKG^.v&10vPE71cXdKЁ?aNfEw`S\rII޴Xq我fӊ+oB=!%$r/bm/F@ŷ	>uJ	mZ`V)`4 eq8ayyqC*H)A>,8A`U=[@RO
 Kꢿ3FH*=v PKvCCx
    PK    A             0   org/bouncycastle/pqc/crypto/bike/BIKEUtils.classR]OA=~"Y%(Ԙ>$`.Rn-$m&$}^x!1C|͐@]w3g9s~ 9!6ghb
pC*!ST1-ԣX<Aى)Y1(i{fɭ;-Ky{5f:ycp!12cխ4i_p&Uf1-OpV2e#E8YcJv>^׭T!N9߷Bܓԙb\1±=̮1_VDAQ/AFs^`^(U:܋Z AӃvtԢ]|Nu?b@Z*f OY]%"@}F+Pp	5Uz5UFÏHcF5QJ^4!8qk!ʅ,
I/5Ko?`C>%ƓxkdDS*E[DMN"r'ߒ"W"c	<ctW
%R,o,*o0SIcF/'tR^Ͳ_%2يCJFEsw5:Rsc=N*5VF
!d#~QQAoFa4}Jv=Tps_խUmkFJ`i8-PK~    PK
      A             !   org/bouncycastle/pqc/crypto/cmce/PK    A             ,   org/bouncycastle/pqc/crypto/cmce/BENES.classmRNQ]έDZe@)&#$E&M06x<	>³"Q_?@
30{g|
8BJ&	f
Y4N0;oxOO7)F@fLc4Ey^p&Ue*&CSkkaikr9z\b-W^%³ZڨXsdMMOzeZ5VJeߨzR/-eײ2-Yhr䫝%?,q=*z̽{=wpataEEE7Nq
g9+9aG0L0#$GەG%pgsnu]^-IC9DH8!&|;(>!^!5DL'X66.mӡBhUs4R;	?Tϭ\n~Ŵ5!I鵬ʪJM0Ԭfhj(M1
-T&N(8!6Q6F>6׼wKo&.D<&4A>~Ci-%yyʿ<(J&mB{q1nޏ¡yM!M~7؁;R;1QmmmZodJ<"%ve
]=!$d(~"|0֣|$Ny)8a$y5	n$G\l#PKx    PK    A             .   org/bouncycastle/pqc/crypto/cmce/BENES12.classT]oE=Y;n㔌[^H?(vi:%
Qc#Q!"A"Ŏ&6R@yoFO !!ժ-s_EBrg7vCu8Y 2fee9eXdYd,2.{ŕXϘ[(fnnm6戼j&D$yڍu!QB(Tug˩Sf|*ZƷr1^ePݴ+BQvEXۮ6*vcgn,P^xͷebQ9@VZ5n:[Za^ԝT3=%0(8!pJ &0 aSp\A,aB$0N0,0$ yY$B.*<
R
3T6cFRa`B}t0}n:ftܺoSuikiC7\"xJR$Ϸ1	ikߙQ1&O[~[:?P>/:ת2,5.(VRC}S?1RgGPHfLj[=ɘ)1f~~>Gt!m/E4`t=l^,
,?f.hi!FbAK.uQwqSX0JE"i	r>ڌ6zX:[~2?	?.L_<=?RSWow1E B7X9G9Յ8b=iŃ%AA|)ܻ*l*
#ft-ͥ76HoDn4%'|eQmKhs^/u2	IfuҒGjSmӺpʫ6ÔڲrɲzEo,{ޤW
Yn4GZ`{80vC88:Qu*wL@%"=HHPKtO    PK    A             .   org/bouncycastle/pqc/crypto/cmce/BENES13.classU[oUr4ޤЖR$lB( Gp)qUabc	"g*o\>JHXT!s_$38$j̬ `AKy/NfJ'gpf#<Kpva$o,OoWD_K(KSۙu!fV(>-K+_Jg7Ғ_m)_Ȯ3\,n+\\n񽜛+m+7nwS37fh'[XJ>oReONVJٍrP7q$q1AԄ)L0a0]bSLġqyQK0q#x}$gP_-J6\v%,qA|40!tJ_?O|o$ZߡJt5^4e*aMp7᩶>Ue%K1l}[gc\>[t[Ӷ,sT`ool	m-O6
B8+dAmsbT)TSa[
* XVg*V
o>K[ڿOCگbVC$D8X"4٨f3Őf-{Dw:?銨Y4~	lN5Qː,qJbQ<,Zi{چ2m:	pL'Z#ikuxۚ8@'DdVZ0vazHd6҃lZ%:v1nڏ^hAGt70	0Rp:`v;W9H	ƻ^;{'4wP0fhT-##Ά&iP
IN9ٚ2';<2"`pVw[S2<Hu"!:E#8LGXݺYz1Ho{Ү03@oʼ%BGμtц[;OV}
D%;"z e70965ɣ٢ˇS;!PK?&  g  PK    A             1   org/bouncycastle/pqc/crypto/cmce/CMCEEngine.class{
xTuyޛ3o4O?w!	?[FKh@l
"8bЌA1H~X z(_icG8qI(miͶI8kn~nۭ`{{3#$G@{{ι=}WԺmU@,"\#6!>3NϖYYm'Z];(So_Ym2.S^(߿YȀMBxp;r]pzp,
=k߾]
t+UvڥbhX.x˷@I}<"*${pnٵގlEmn#7P@!izȧ0wعe>ЮuE'y;vtr!hhNO:;Otv=``R<C:؟Q u8XGWG_g&sHW=/Z3{<{/thssPg}PVҮޡm=._<@<¦فcَǲ('+2G;Ȟh>m=GH"-{
!\?1Rgǲ](@P{{X
<Ev@[gd
	*l>1HCY{8T@ k%!-.qu<1p:(У([g
El(<:
ҁ%lf{x\P<kP#h]?+*j?10EWYċ[O4ECgzx,{M'1vB겯M<iogfLFzJ;hn򠣽:zAY=8"CѣNtu6r'm|/6}(;08~[.EѮl;i͏6&L-nٺPwZmٯo+AEb΋y>*z`KmCXѸb8p
o{{I:f;v<TKopP1GD	,/>Nd̨P_gNn?|Y>;8r *@.BlX.'#h>b#6GxsEH5`5`ǀpȀ~4`Ȁc'p<a)teпmHWh[W_GBJ6O:䗨{`fhZ6Kh$@fkHh%p7	{~0s`|ŁU4@ȁՁQV'v `9l>!E6CԁP@b<	ԁ[́mr s(	聅ԯȁQt<T9p/T; ,v`j8
K ,u`9p;p`7o<ulz o5v9؂/	?%u M"g	$WC.a%
ST^[^wl
_$%kC S?#	3C__J7oA`M`t@p~@G^&w^!*x?p3E*F~I-Hl2|OW'F-LήyHjQKAJ!DnJ<2m*iL[djccZFN<E_)Nyxe;1Lėy
ojͯ~PC,U3&ikIui|_@4N^TӰK6 T 9|I1KLeEkPc=;k CT+!8%`e4QuYq՗h'<R`JID×#Aэq2Xj$dbRt4zY)g`u\C0a%
WM).+>ɌsR]V'aL!=3Pr.k=
6	zYqewD4R6
b[9Z
C3g
j*~1}1qEf>(fԮE,ڢ8f
{nm'gRWJR5=exf~Yi*6r)Y,tfyaf0l5j)zOo)·_rr8l_0"qQK79'ᘫpjR~U n-t
{?(=?(AmC='׬?jhԔL"j4fUeQZO)ɇxQVNSPnqaP\畊za߲RM&6^~OCfBIzaL2$<!5L3IUwzѭ9!1fR3噪gET-m$?36FՋD{^8UCNI*41ހy44uFXQT UTܗo}{iP68	!
K߆zJz_)uOSݍ{<`'&pmk-vSF#zz)obΦ>d|Uن2X8
Z6tZK#ZP DY4eV"<rde%[d[2yIf&Ԟ25y3pf5c|(a1.EcW<}w
&zn%7a!BO]3Kʽ"j#Ϩ)>ܢf%Sdl
9Fg[|<
ꦡ
sѧR'n/p*WDtT'ǉ`KYjJg|՞z{Fu?քR,,O@XX;F_U,ΰp:b?!2\yO]Ě~[J!7̬ks1PdN%&s_Zhi{UBi=fr
,<<r!erY^GO5S'L0Mb0&}3Vp?)t뵼G'.Z/*U-r{+J7`l|Wxh1,-g<o0=
Ô5:lǅmh*jh`~8iL)+W-M&`)60[Hjo =/Kw}:F6kS7D/MD$_H9UlMFs`i)c,{f<=SFA_ u/]SyQ潅O_UjI))4"̬ato-=>7W!Z(X, 3w?"&芒
?9ƥsRJ`ax`;J</K,wm;^{n.NB܂ʀ"*Q~;V_z\Ϛ,M¬ΪDjRzvf^v
ۄqZI׼KjlA;݂#od|`ޅ8Yf
 ALb1:;yei~73|%(K1i
)el-<S6pAqcLL3;4qIM1om#| nDظU6[2L_
S{xbu۫(bݡ%DFkV
X@`_bRH2:~Q7`F@eJ*+o舚r#[ETC*ZEU
YCcSW#z",ttOF=/2ܕC۔ҘɆ{)eZ!n"S,mG#7gQPڄaL:Ql	<T`-s$H*liAX#hI
JZFΦ|hNR3mÑA$$6X$g?.zo$
xMXDimX/N0UNRemu[`\I@7,-L Q߻ܣa^P-v
rJP˹T d5+ɠ֍HEXҒM>
nyJKi30f$	%#(
r2]~ɻY^ph]FE×񨪇F42L>;.՘!&HK󦜒;
'D7|?^*YD[?w=nʹHCIZOJ+¿A1͟{JZ:
(Dgr*"RQ4Tu*2g_өC;tSfn%N`,RBS
c\Q^Qb}rTfhyNUbal$頨ƋaOoނ}JLA*dl׫ZޡJ2
H
c~9d/-k%DR9X: 
9.άx;!<L )^
&1PtEFZZZ0~<&T8?b4ڷ|\nNQ=Zn7nW6}p\eg(>sࢢyLl=aAg*" ]#(Ӵ4vW(OFyoţG=tsHx_8A=/ƱO.dQ2	LkiζRɁF8^zn{2h4輍V|[T#7N$XOPNoc,<Rc_r5&h΍AoaĻ$ד8C 	AL#r3Q-kNr	CF7e44
(*xL8	9OW0wtHN1\Ym<_#46tEQx@|$Q0|bA#X~z	 OψKd*|l&k2PNWE07<TsI^z2*!qh:)\:Km(e[IV-=?͆ALReVO{G1l~OQL6Y
oZ.Âxlkny\3fiՎkyU#7t:mrJj:hw@A)n- /Q
RGʑjZӛj6~ݦw{I]P4GC*UK1C:!j{LyeO>5"f`P}J3'xta܏ЎfaypRKX<jGOa'>{*Dz݁K K
xd6R}j8hĵ1zkct`籼bbG+w;+=(I0Ootㄅڸphא_%_]gZ[	aoWUc)ӾReǈFQ5nO3ggrn׀sCMtXNm+4,q4TC[l.F=;UVGW}πZ5~	A9ΰ;ti)^)aj
w0UcqC\Y>3v|<pĝcL{3Z=N}n.L;[M;(|˿"j²D=ŪT(2bqcU8RXĞ1y~gS+%!^H?9н:Ku
>? h7*>JSj`BһvQ΋$^bo!Mð!"B+{,Eé
jXf4Ac`>`|%^Hd.k>#}#wX]:'U)[A^e+0sqߧ(,`sL=IT<Ewq,SbֹlA+-AV
i[Sy~y+(v1:&Sۦm?,w(ѪvaT0p)+pc]h#2hx>^,7-8KڢfQ.JNϰQ
I`n!WwF,^HyhRVUN'cUv#Pڲ@o˙݈u]VX|Q*%[\%cE_ {bl.
	ɴS$j}ɩT^&bǎvKi^.?˗)5KL	)"^7H9r3ݵ`h7 1
!-;2\?M
_5$_C#Ɋ5Dw;H,C9̬4C7&4.]YkcyEhiӐ;#7V[pׂkٰo(_9YCg'MP1ǘApT|(C|̳UϦeB6KN`'TܨF/˗HQו˩5\SDG7Ue|qxaz,X]h-WogBk~kQBe]wҟs?kZIO|HN'}߇{SB_J<aYqvf9W1WŜ**Ԃ
8
0+QӜE^C4IQUR٭Ј
B
HSKŢҭ<e	/Jo0SJ:,b@`&f4cjQ:r!UJykL)%kE;l6aޣ.9&س>kd
sU?'سw^=Z~Y{4};t߄X/2{rV4pLֳDPSe0PŇެe&.d0ZHWdV\ڕK;ݷfo	Vj@@r!7327~n[toŵ4EjL
DK
&.MA gO9hamHbwwb&VZ/LL⛰FQ4tm߅Vy4bZ7CyZGyijn7!ɛ>Iі
NcV]i-#F.ø
.Bg !e%$l@NSJ^~Fł4Ȩ=B{7
@ {߀φLM^MjMxUi-sީ^q+A>X#bYiMjjfhikǪQ-
9Zz5F׍"YTM)Z~'Y@%׈WV7)Zl&.GZGp0YhE&aY.w	G7"/s^_UV7&Wvg
,}ly%G	M7@nK~d9ͯOAxi^CiUU=a6}nfLX?	SԅUZ悸t
ʒAL^TUSZķ]k=M|,L7Tw?(o@GFwzhOUe$"i/iY˒]]0j]|a&%1Z&*fZzGV%Ѡ|dxjTsRT
D݁U哉`nSI.2<%e8p}onCӫ5"{=gAIe$b`0a&2Sd9Gf		{5d)mwA7KYȒzBEOd[>]_N*o8G/E1n݊;As\FW(BF`F4f[hs!8:wUh[v9gT`'dGVɶF!=#Znn_-!Γmmx/f닅o닷oj(wI[_ PKv!"  B  PK    A             7   org/bouncycastle/pqc/crypto/cmce/CMCEKEMExtractor.classTOP=Z) (௭cV` DeL%cjȥ\Gakk[Md$jMvD4;w.@KS_Jk⩵`"d)uL|3-ӟз
c>_ubpbZ\BWr_Blqw"+{"vD<ӶJ(TxUSd[d'4ksYMIIZAhDB6czY67ȧkLФV
{2*
~oMÎmJG5Fz\(1]*OTGT)V}2.1 㒌-ͬ\4$SMFUK,mu@G*:qME/8I* )@FnH BAU
pSyT'	(
d0.`R!ʄiW1`9#`J]zy
+>3vYeUNaJ-amizڄo;h_F	FЫG^Ӿ }!9oWG;DmAXii0bK?cJ/rJxJywf/ui0\?FIK F`w=LpރW#YBYO0aُ PK(ڟ    PK    A             7   org/bouncycastle/pqc/crypto/cmce/CMCEKEMGenerator.classO@ǿ
( oncV*4qs1/1Lѵ_Dg(sy;,2t|3brH8#0UKg[0r,3T;<Ħ3#ڊ\UhzU*GvOqAhul
gZo-ӵdmAe+Y?~
M;hԅoW퀋ǭ!}Ifs3/7Qja-׋}iGWNC#f[9mGVw@༂
(Tparm!
LgWkSi~yjfO)wj:HaO(wSQDUPq0l(<IvlϞM&5(`zK9tK+5bJ+fT㺊Q\bVJ9:R*qC	t+2U
}2/] dq=^@Mf*]#DbfM\wnҙ&n5q0} )B62-`)ǚ0,'{\	=R@j~+&^	=ePKkn˞T    PK    A             B   org/bouncycastle/pqc/crypto/cmce/CMCEKeyGenerationParameters.classMK@Gbkګ'5QXDo-^X(n1q,?Jܔ(*;;<yy}zp7LUj:3caDFLK=Wĥ)s)Ǥj~!NLOΒoq/GGao+݇a][sڒ_T΅lpM?F M`h#hC)ax>j˥mnuW@>.+-)? [PKe[bu     PK    A             ;   org/bouncycastle/pqc/crypto/cmce/CMCEKeyPairGenerator.classTOP
ۺ"y|C`dEIHbL)7+$DDg(#M49;;?Lፀpdձ[|I؆j"mxJn	
T5<,n0И,UWsNN.jy.EWsUʞz*9*wF=,y
Ŵʎyhh%M-9hV`R'1f5T^R-l5n61
Z[&&;BL6)²ܙ:c4{M9qS}3*"1 bPUD\qCMYsȴCKK&a1KXX6Sp}P8ʤa?7Ia.9{*ܒJ1O4Kz-b4w)ZUp#WOcGZdKFdxp_F nt}x(Ë^Dd#!#n	T%cRs)	7͌x&asB/m2rQ^tCi] F+x~8@X;v,$2OC!2eZ#3:-Kgw%H"]+x=9x1QʼCAO[7' jU|\;5zY/PKgҖ    PK    A             8   org/bouncycastle/pqc/crypto/cmce/CMCEKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF#}0ɹɩξήzAeg`ag`ed0!	֌d2Ո"Yf'#';/0DSR"@fJUYL`67 ālf ͭ%_Kg+Ff."A Y0m K3  PKa     PK    A             5   org/bouncycastle/pqc/crypto/cmce/CMCEParameters.classT[WUC&$tBj[PRACX#W
V^:C	$*ծoAYe].Q.
SW}{-#
oh𖆷5!aDûb
±L&DR 0#
*
z6iзXg*sJB.ȱJe~7]QdX!#BuBuƮud%V)XulO߷bt:5\Cguj,5&ScT[''I#Xj6Rtr<V$?+qgؙ6K&<#MJiؑNNwM*i
#M)%xOlk%ضnI	r|kV\RU06}'1<x<ncY9䫑C>ƐNEyKzSZY+jAD*HZ/V
ѥ'_w@j6A]/6axa&-Dtѯc4$u\:bAǛ&(u$89wBCE%eU5O>c23|p/r_1|M0n^=6=ެk{UthOsT`Ca>7$OK|AU$K6%%_<*y\rRp?`oJ|^:zz\iBЈS|gQ4:ͨZcFu`[3
FKh <qZG24BPEJ~"׺
{4WyУr>JEly >螭<C/S՜߷ +F$#DAf$O*_<^s~#?'",6p|Foƽܧs(
@8~r.Q	
aUhԆUV+cƃ6jZNN!fa۬fבT/PKOz    PK    A             ?   org/bouncycastle/pqc/crypto/cmce/CMCEPrivateKeyParameters.classNAƿn,RrЂۛ\!JL#"?vYRlu%+ >&Ę>e<7Hb197gfv] KXRSEa5u) l:Ab֪.`g1ݲa6;Df6A+,ffV5JYtlRӪqPaFySq
lRd
yĎTG_
aW:rwW|r[SLj<mӲY]@ƴ*ڡnCo55?auuiׅ-B_4U]֗ױҟ#gw/oۮִ
9Qfe[mu$K0)6mAMm_V,\;MtOo|eݵgྴ}yvOa}S( w1㞂+P5Yd;ʸ2HLo5s.G@nZN<@*eTMV>-GL!D
N3߱
_~8FGvsdH	g|4l|(9O˹ZkaOHˢ'5N۝hƑ9vX}'3t.D(sRhœqJIxavKxu+pzkIp'1PK      PK    A             >   org/bouncycastle/pqc/crypto/cmce/CMCEPublicKeyParameters.classJ@4mqF! *"Е
]uaWt(4IdR>%6n*s^8Eo3~G\_1fUIx/;r&72e85_ƞDq`}gwu"g,cMΗ-?huENJm-\@***4:Ùq|c85Mz+(r`%8kXEMGC'Uױ
ߦLq@/~>#I)	CU#S@|B
@.Q2_h+{rM<
PK3&)    PK    A             )   org/bouncycastle/pqc/crypto/cmce/GF.classEN@@/MܴnfҸ1t墉@5ܸ2qP;F{|{z~|~\xCox:2z]u|c
n<cf4
$EцESi\u,HҬp[S5YKEIgIe;KҲm/M  BI*\Lu$2PU"L<r)x|зpFcҟ/qBV?-ziKsNgPٻ)hVأ>/vo96Q7lї2b/PK{r)    PK    A             +   org/bouncycastle/pqc/crypto/cmce/GF12.classToE;I
YRo=H	*RMc;S)2ɝ j.EʝGBB8q(}3v <͛o7/x7U? 
mP^(Ǧ)TWG$
]hPSiin#k*%Zat7	vX%y[W`z!z+l+H'VY;V#b'g;lǯNWn_
w:
;~;/7:Q)ѕZUou~uo`?
d
p<4LX08&eyڸKb,+b*91\<m}		#ܠ<ē?^/7NV!yO0#^V.Y]L-e5Gq7#guN]VSײjXj`sG&!vv[Oqvh+&Y-Р#մ
IH103V;En)97)EEQ<|&N]'Sݖ4?
i,>E9¯'Е1&a).P.@Oz54Xd?&
5H:Αb.a.A:p!0PC2M) I)""e̘dL%e9$cՍѶ鬨xbIrN&	
Yץ/7ȱφZ;!0,n|]* u7MnP94D{ݍ^fq:d2Ԁ.*1C4&4ڿRP|Hيh@ӡftPhEߐ)iܒ<-Y-E&ڇi*ؽ:fD^bV4wtW܌sN(݌u0w"L8q'iJ%Ϙ9
xCN(^PKQ2    PK    A             +   org/bouncycastle/pqc/crypto/cmce/GF13.classT[oE>z8qM.BܤA6(u[D8őHR9FH}}IkH_PPsvBr;3ߜs3IDUkjZ:ۛCN'ÿ,-
`BK$;Gl=g8ty+<boM*@4=wGl	&2f;`ba~fERqrP숗eA@X4QKAۙsB~<SSRLv\,w0/Bie<)
: Up7"6Yh.bY`]"
]h '"&AA"4@+hs M`9pl$4CԆccȼK<dȼG&K}vn~;ڐ+_/\ߜ)q\<#9XQDvÇA3Z
ÎDqz	MJ|<3w&GtCTgCiT6g[pTP{!$Cڅ+M[yP-nQM]mR Q}S-n=ڂp'Տ,&=[w5M-SVez CoH큾\hǦtʞklh|
1	BD!"i`ߥ,,LMnJY8AL!,S2,e*ds%Tw-P3*7۞BnKvᲯy\ۅq_N@/$qvpoȠ-\zFY?2ݑMhbaڸNsܨMU}]P&H
C21i5ii_!
_"BgbS88\_OF
/gC,&[<JIqKjW7XczTG8aa1$(Y[;IJʨTSZk\)Ϗֱ
:pWN,BTF/7NچUi/-;Dx=
x=)xpzw{o4yoX1c^[f11gq]ɮaFFnO]h2rӡkn+>lk^EӺ]؎
xqUvA?׫o>X=?X}T|[}u|?Tp%
+PKI    PK    A             ,   org/bouncycastle/pqc/crypto/cmce/Utils.classmQn@='}P dcvQ	"$lXPqCV4Hb[XWe
Ă@wb[#ͽ9s<~:jY	S
0dgb٨5Z#	 I E|59:#qϠ^xٵ:Acz-Z#1̝]ld]yðzFN2A?
eq='>M)"1(㒊Y*4*
PT1Cr
yXf]aP-2;
&բ/E@QpԠ2X^ 0,KrU/	eMr^r8>-s7ɒ,qJ/BDMoYɾSԵ))j).T&ZIBRoù}#ɵis_b"44ן4^(>|>i!_[EPx
Y(p^Pty4>֥~cPK2"  Y  PK
      A             %   org/bouncycastle/pqc/crypto/crystals/PK
      A             /   org/bouncycastle/pqc/crypto/crystals/dilithium/PK    A             D   org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumEngine.classZ|S?_&M/n[hʳ!ԖR|4Mn@^$7B96s/ݦTs	EtͽsOv{;݆;ޛ4򳅟?|sν?zS pI`@0 73Vvɸn6H.&YLuQNfH%s<ޜl#VN٫,Wiu	 iLt)o8DT(RiZKnq"[= bQ:4HDˠXAi:p5Й
yWҬя=Fge`ׄm!q}N>*d\e2}[0vWX!˸;˖vVmhr$"m݁:?Ao͢40
R,0D=)g:e@a!<`7`LVEcnm>w:X-J"߯GwfFb؏w-qo0(D}zqH7ǣ(EM\@H;'AJqdi+ImH(G.i,/z^<8c^I4bMWXcP(eOȭ%hɩ#^R^9MJ,#^ٝ#!]ONJEz]BuUs=r:מ]Y yj^9i}⚵11.cJ`dk$@Hx"$pUa^{)ԅ:IKİy'F)O(3NF>2O%\E8kK}ǲ"
jĐ).1,bDLvsKd	%#H"yRPly#4eSwz8#|ʩPT21ow¹Kgn}i#Z6oaqwwMb\gŤT=+RB
6Qs7(^Y뀪{%dl$6V`&EұHH{3[(*M,E#ؚ~\ >sL1TL1џ|xNsR81ú"
Z\bu-˒3+w(.͕2%q)&zC8ܪZ5#R9d3>5ހ>'? l	}眷ѝѝy"ǧa". " sLOgp8?"q0A !D8rq$KLu+
{жпeLi\Z'
oZz7Ymں3m7h05K8(j<=<~Gạ+Jjwyg2g}1Ҽ^yLv{uZqy:'_^𞶳.~N85>g7<,~:?<"XC
`1Re	V$'h h"XE`-zwyx3|wgx3;C'o$x[^Vnm<tv(桇`A/8x'E\	(apAo<Gp9T,M$ns<\ApZa$9?8Qc<|>Oxx=|<L<fBW	Fuo|[&w	G}GO?#Op
V#^F`>LVb$?ix x"xE[(3		N<G0cW&-~O,C@
+A&)$P`L	0$3V8&@1ft.|
N<i|]]No0A_
X{כ=6 Vot;;*pQ "A*c/F'u'P^?E:c(P'ss[QnɷằV*6(tBW(NKV
]
Wb(ԭE
]P3HaW%'~2
:n*01+kkU<׼P5kRW5Wڼ%?\5kTμJռ;yjkP}yͥy{^sjޖ\󚗪f/c^&S5K0H-㙆.L垪$[X5)`
 !i	dU՞$[qH%Go{\I&x\,*=$[q&bKZc8j<wUB)'ZM(2ȱ֥cJ:DdV"9t(/`ݳ)kc-;	*L!b'G
N<d+PQ4$2
uㆉuqKiN*ad8';L>e4BqZ,ܨ.Tv:Wja_I(iCd;\Qj댅u{waskph3iҩ HN:ZO{#-2ocCk#-4Lwuy#n[U4ĭ78)L,)FU]
SlU-2;,Z)hK=U-)֫-ɂVK]Kp%("'[PaM>7#ϧXPbh- xJY`36Uh"c`xƊ[} 
k݈P"1	vNsĤ݌alzfÕx	UXۨYTɧh34۵=kCڱ4DJ5Lʧ^.oЮv 'q{m1[oN_gz8v x}SlE,Apw*_.oY=XeFb\ʲJ#J&8[nٞbWuҘB)1>.T(K"Rb̎,U
Ebc))Cp<LSBɑb?$8f1OݷzqoB9- -
YV*{4rr+'7g(f.MhYSE.O`^;qk}=u4ÌP]۱1>4}ٿrp<<X;A܂[\$V~)9|L7ԪBV
VZ6dWqj%w@`LxZMp#{mW3͓bߺtU)1Pk;&`R*:AGeƌO]z>WyFcY۔F!`utኋDR0wC_}hqb)A˪!TX3dSlbݦ//s 3;{V(R^j-ރJiփ[Vb=A+R賐@ϳe8QՍQ(LIR]3|{	iqn".Cۨ~PɷLM
c"gן)֢ ͆[ !0PKP
  &  PK    A             U   org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumKeyGenerationParameters.classOK0ƟOfWGOz["cfmj
V
P=/y?9$o/ 0$e.`.9,VhC@+UTP*z*cͬTwQ.cYjh"SieB+hLuZ:&MoFRK[Z'*D3Q/2<Y.Vza@9Tx	6)ZNXw& a>3'@ô6Ѝ7m| PKM 	  G  PK    A             N   org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumKeyPairGenerator.classUOPʶj(NT|Z-e&d	I(ٺu$X"g([WHɽ|;99 c!~DS$!JNi4}3k:f)zA֊QMbغcx&˲g9tdgʘUBŚoK9AԳW.bsCXWQ74Ey;KV֋NPvՙb9Gm3=k#a"o_.[NQ8Jףh+:zz}Wz6MHjԳ6qI⛮5Ml]T]pG@	pdt6ڐ'8B4#MQ&7ibZJv\<$UOxZwPe:8|	a,n9ڥS	!<'A@v$s	<^HDT"EЁʖW"ൈLx1eT ފgO1w"F0A?A!"m ׵1ud'u,[ObL U itCU/s̞},~g,KuhߊSXX%FvQhr7U~a&,hrX^``G	+𭚋)ux'_46WI*Ov5&ZԴ2%Þ-)!M5EДv8bbpS?PKOY  e  PK    A             K   org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumKeyParameters.classQNA}#p'pXX]LJCbDcݹlp;]+M$&~ EPP7)f|{p!;SzD$rXin&>Me)R%)b%kU~	W|ţxKR+:A2߰1F7'pF		G<EЀ_2++3kryb/>
4DFb/h?PKoY   	  PK    A             H   org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumParameters.classRn@=@@
:`hA<TH"UR8⬃A_ D%>B)⡬s̬= bKC^2ڶ{;y:3};o<\[C~x3(~)Z>q>:w]IggH8;qH}pm7d(ٿbϢoHFݽns(PboQ]G~ʐi>蘲?w;jlu"CON
#׼5UҸd-W3pe\7GՀ 
V5

n+:Vp_'ynˠOCP=
y=
HGzP2],EUe$B%e6f3@͸7qv5ǤI
ku
62PWאzx#+6>Ņpc^Z$fh$isjrTbXZ&*ɥD=PK	4    PK    A             R   org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumPrivateKeyParameters.classU]sT=7$UKRR[PҖ MI4)
vbJnTE"HA;yf G+]Yv4ݻG+] n*V^
97Uۑ'q\'Hjk<2ۥ+ʦK];XvjN4o՚+Y2vuu4V\˫T`:<kHd~=}Ւ*ǍcxODyϣUcDFnNG6Sywk5-lKA౩fW;+m/bW7_U'.RY\gnsZ#pjMJ'|޻@0a+H)xWe)SpE,7zT}>m~s{ѩ~/þYAQ?Y:wr۩]VwncRz?}]wnK%T|pu*gH8$I*ҐUŌ
7n &	ç0|0i4&OSvASpa5
+A}o:ȏ_1Lξԝ^`	nX36MJ
1N-*n7ĭ	m6W#{-C{;EDw$|BQ		j%_`K87cMmA$CeY2r:%-
_?V8R"eK}\ĬM$Ǝz.iҨ44$),FϥLfVzTnCwVѝRSO'07hxD)MD/b_AQ0`BANM Iz⢅
cr֌JLHdFE&nT2E"S2/Q;b#dY)ju61!c8bH!jw)50ґ<zʅѵq(>Xc}S/u}kk2X1wecLWF)ƸЕc\(wPKj+  
  PK    A             Q   org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumPublicKeyParameters.classRMO@Ci@#TVH|IDT*r27X2vp6+qGU̚	aiߛofvzgB}d[X?@p-)`jLqL8#?~j/qoS΢uSIp.'4G2^O۽LҮu)/ Y?wwGO;s?
m?
Bw+Im3O0z	%(@WOʿ|<׽~sحۨh%6a(`ao,Td0ytXp^gЕDm\'
!UC:k|8?x=;dKNìFָp*u+TgGVKsu/5\v
~t5!Y1G;PK۾L    PK    A             D   org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumSigner.classUYSP.EbkQܗEQ,
LZ%RҚ|Ag?eUF:63ٿso V 
Ebх@3)cJSFU"uLtj8ؔ
WNpfʘO"]i;~,iXZ&h5-YF~ƪg
+O4eS.
J=mnNs+G8gK~}UJe\:zK[`\kd}YXUc<IlsNr\wҍWMWHerJVI4SBW]KP%ɼ$խQ+\RUi[
PЬंVpF}6GiV?<zDpuHhg/I{ߍGgOz6rFo⿛*Tp<e+WpCE+tgѭ(ZG
*f`p]{Ah0D31<:Cxc	OBD0QzFrivruu@I#&O#oWL 5h?^Å;%
</[36<clkH~xxQMzMvy	$Jx:;7ٵ1_<Exf?߀2uԒNtZ+a};@.}%,lsk'בd	/?y
PKy    PK    A             8   org/bouncycastle/pqc/crypto/crystals/dilithium/Ntt.classw\z *|e r fSSq2L
3gr,Ӧ32sE*<\LŁCyKߟ{<Tehs5O;Y͝q5H/YR]!1d9[SϐEsmYc68v#'j"myx<^ՖEܗUE1H7Hj96sl?8\_̓'jCwmnO
=66@Ƶ!Hi3m7<XøDmW9B3>y m^)M~i;Q͋&#5)fM$
&E~^˟+Gh؍'TxiJhu
Yš^t͝ˮ!EMAf$iz1/nq#B7n>36o-nͿtZyckζyWf|ފadϪ'~{q:O6惐$pDm:G]9GSih(15ɍB*ÛT_]VwHV{jem:gLMW-`V^G8{19qI+I*2aV
^ҙZU2F*FiZ9O1,mqXɫǇz;nZ=8-kp*DOiTyvAN֪qkKghUsg+js/hU;2zU<x#n6/XHwIzrUVȅZ{h]IB2sV!qjlz{V1q]lEl#7ѪEn<ɖɋudpI59Żaᝎ8[eNҪM{d1NҪ#kLZ,u
ҰkpC<nt22!5%-%+#NTG^d(ϔ1=HO2׈1\6")AI9N
7:0)+>P-3Cg%$gf&3*+]5<%{dhO>ܨ.;+%5}FF|N&N#yS~$jdN'Ϯ&_}F|}|~Ǘwb/c|3;3ώF|YՃ5
rZUٟخ?]nbOuETOuU]r7Q0
*eDRWzď?,5Iopǆ=qܝ2 NysZ7|,;7uC]|7eRF:ވ
\^AކZ\_4aqZ.Q͝%ph
_l4u]ɡ<++W-Q+ͥ!䜍@llv22eO({Q*T]+ј?.y:6v.b
,d(\Ak1y#lA2v~V8ꡮ&>?/(<ͱo|$hˡ(~);ۏ/si*7Sy)7m	ӭlEΧda٢9 ퟻ3.2!GJxj튵x'bh⊵a+֎\nwz-ꆥRъhC=VB0
^zcRR$Q'ЪL5E++G@%4Lu50imlu+h=G iCXh0F
A#GhӦ"6ó9:8@[FpV;
Ҷ8I#qFgQGg*K;~	kD;OiWA{*ԅ10ҾhH_D%?ZHx^і`C0a}	Pxaȧ	AEK_d3t8<hיXH_AMwt$F4GыB
'n(tfW1L8+E}:|ؽ^X~F&Jגq\?I>0ɻpHx pH2	$]2%SP]2Jad:Hf`#I>FGLdJf!E29-$g<HcdI[oJ
Kd$/YŒ'YmOQ Ys.Y/I$&Iר*
$b; $1]	.قW$c )يޒJ
%?d;>R{$gH
^%{*ً}xWRd?J` 6J!Cr%$GQSrJc~X 9OiA=Y$<I. Nr$P+켋(A*^w7CݕP!ˡJEzǡI:ġH9)0<>tRQvu9C=QmԿPKhʊ	  s  PK    A             <   org/bouncycastle/pqc/crypto/crystals/dilithium/Packing.classVoSu|w|V
,mg72N n뺮еe3DțN_HB/1h1`zνwmW:m~ϯ=!\Pm<'O2:-08Z-0ϫN=
9[h:XR&B"/422s&M%SIk N'|!oVrA`[Y18I'ײ,'ҙ5^Og]rFU#sT\`Gn4)ĕ{R[ÅUf\2a"Z.߉G2Tadd2YV
VrN/7LB"`eD$a˂,DW΍38MTktt:8@*YpQԖ#\ҙq'|sJ*υ+%IJNqkq:֔.[l6o.uնj[yao^j2[TrӮ9+$KJ<#&.CbD@=u4W 5TC^S{X3z^'7{l<'bzWw$ƌn=N{ᅏaVL1xE 3lE{asb&4zGhFqCN0d8
ëD10puQ701{p<axg?@_3fox~<>I/P2 uހ7vkP-J_;	l/"SĔncQ'$',u?Cx%pɃD)wٔ!]r"flVh{p7]#_蟢K%8j@~KƘ5LV-ïFstQf|~ɠKɪC'9T9nAql/_VjmAn྇,>ZPas˿I敨4[W[Ȕ\h8%wTL액B:M$]~StPrNJk4t&".<0Ao($\	2Y{1JT5N}!S*H)mu|63RqC%mLƖŉ)/JT_qN)Q|2VM0}I1S1Q췬c
ߨ\Y%*^G!z@D_cp-{}IE
Kn?CUm6+sͺ_irkқ>hUprԙּ~S3[T5Gli[ë\ԕ,>fvMYQ\v^Ǧͩ.
˰D?5z![1Z15oPKix  l  PK    A             9   org/bouncycastle/pqc/crypto/crystals/dilithium/Poly.class9kxugsgf-k&hIXyԖ#$.EZ#ʖd>SҦM_AvCvPj4IchݴiҺIM43X9>ffWJbG}<p/@+  " X.&@75Ţ7Xb-XaA+6wh/߳^O[!~vk>]\`z!g=4_\V~Imz WCl]6-jpզB.ɤ
u#S6ߟ)f5Pu|nc/[ס2J^UN#ߟZ89+hR}8T:%7K
dri
ݽL'ÿ3;(Н7|.-dT(tCJ;4pb6=2ՖKgFPYh݉oQaޗ	f#v
~߹jK{&~	DK%SJ
kP۞0twGݑ.v6`GЕߜaPSRνxùB?i;3@Ƭ{mX"Atj,7ڏ{ѭp70+ #iڛuv
}сB)y6m3V3TH
5nR$2
t/SIo0/X7]厸EӘ0
\\3?ݍ
LkeU\4TƸ$=7qn嘄4Tx5V3}H
+*TvoJC< e@-ь68zSA|{y#8ԛWh-*fRV᳗ҥR+`=0ɌeR}MYԑZx540gb٢aI\8=&a;ܺt!ʃ35WaB	M&iB	waB	[Lۄ&l3˄~ek
^	QyT^#Ȏjp7Rh߰ddЦn!9)ҨM9{s_h-?$s<sxNV71b@
@?ɆAV{	Fv	l &ˠچuȆm@2Xl^چajmh
BԆΆ>Ά<쇥6Op\of
lx<mIV/ڰ>lC~Ɇ$v¯: NgI<#u>C	|!³t8	<C|)#~CH{'<O`c%>GBS'!x~8|(~Ls!O'mG6R{2P j*:k8Jbw{?Uip _
x%  ൤_}gQH&Y5Q|mi)%Wi%ًΉ׏tD)W!X*.$ZxYε7a
Ҽ^G&`>j@ؘ 9^cIvB넎ýaH@k43J"a&Sŷ0-fIT	[a=-'׃^|Y&3 F_@kBgBVt1uv%8܇~$6Zs&̰Ckp9 Ƌբcas(CӮ+!@JAeD&1LWL~E^wK>B&B]YxOE_RfoQqX)E	Ƣ$żI"O*eo%KЈEfF&f&M[#9̕I\MͰ>g¦H	H9F,a
^[NhM',̐da+M92pvd8HA%A){x(Q4j6{n^)Tp4{{p
ǯLMs~qYdlR꽸u]P,%h<:o?$'
O+M/)&TLCF~MK):o<vQiY	
E&UPߥ'_P_}䣘c7 709Zu[#b5Hkm*ȷ4
4֌YGvu3ΚݒZagq6V&&?ȈF	
#$1['x'`	PbK_HCM#
z
Wf1	IMb%P8?V6eKf8|$nEzI*#>cǻh5&=F	􈎡$XTFGTI+	3Qğu@,I *}zM4tOXė{`L8@ .14JY3Ǆk)3>Dx(̻-3R<{Z^|tכq^_kٱƵɊ9VBIu?YwOf.
lɦKd%;%VόSbQ#ڛ$чNÎSlz(FNl٤1=)$>Fhfwfq.[e_جc^()T|Gj
v)>C&X&wMjֆ<^G</ڈ,WaǠr3XFP3G>gX>capLsxP-GIKLY	Pdl*YB*!;Ԍq\CLۼ2MQTx!3.9AVҸ;3p:PaOyuU*_w
Y_&5˦_V:q)(LQb((Xb)9*ʐwFJ4xqSM'wemFDj5z!$83&I
6Hq"F#60)c%	ׅcp	c6*E\
YsluF	Rq*`3ve%Jr
r^Hzff'9G5v8c#fv蝊 >vNWw2?ۺtو˿_[,cgaSe-+UxL'GYpyԲtK,(R5ʷjVTJ:K%y}x\ˆSa$/T)&7Ou~BlR@tz/]^PKײEt]{Q(]>ָϧ.ŏ<rU܋ac!om><eu\et-n8W
zؓ}8V8tOWWRgp;xX^r\|&Kyд$ԭhۯi$Kuc-<e~Ϡ0D͔
0?s*qn M;1Vv?( kq` s>930t#|:Rz%4.hiĻ'!Hp{mK^Wz~m$7uy{7f\UwG{g6K	(Ȼ.ݾZaԒf8}qāz%B<ⳤG|Y~'QN]6fڗWx[Q3wsA O4]1u*_jZZBC h-48֪I|e?}ygak"YU4HYc%t7b׷$l=vw'aqp^cxkF.
1ZСlq3a9!1Vy/r	,)b^\B\҂7UDwx~TkZGރhI^nMM{p90Ka=rW[<PwïHK[z%0+Z|EhI,FXfki|i>Щ
'^ZnQ3Vk"=/6eS=2_Glg6w63oqZld
<-*B؈Cس'd-:|KJ7 D`$5ȃ܇gm|Q/l@=Sl?=;#ac꽋\tV_Yz#\hqa':$$hp\"X*X$|$9pG$$H}Nȏz'^mȮF{zN/ò8}DL󥝂P:Dr܅/ūBR
"TpD6>PKJ	2  +  PK    A             =   org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecK.classV[WWL#**C@S/ERIE!`$	ն^{7{⃮UBW彿O}}h{rY,kYX99_' q
ōn̍R7K%!K}<jI(CDE͆i-GRFBOVwk	-zHI-鶢zhx\7#DB[qR)V"&aI2#mXՈbq+KDaXGus0IenѺmNKs]VT#iZ'm+2#)	aVeNjZ0Sa=ޓ6Q0A	E)#|*'miz6z[)3<֒vTGpb<n[<$m-f̆&ҵ.	2Emch8eJZܢ@ƌIbz˳RޒY_)Հ%Q#St1ԁE	=
S
J[2N}~;qܶ5]5O4_l\IMwa"sGAG(XVAu
Kyo&n98qsvבSw;VDҶ]{
la#kgl[ʇv~Cb嚹J3W
-Hqx/il7re+ʿ1VRUuIC*UT3<0`XðaCxT"ۡhF'RQOjt JFm CqDţ8ҏ)O3<pVXA[L8){13"caa`80e1#I!00,srdϾ{$+ǦJ?GuiLpڝj'*gB4~M8
ᢱ#0u8KI8x>D$κxr	4]G{o>(.ߺq$|CX[X=p*֋^AI~^wV[顊-Wn r܎B}5A$4vPȅ4dWKU&@U_ye,8 q~E>PVќUmt5Wf**w'$"kMkpn^[Ef"p|N]pyi\#HC֑M#rɟ3JbM+'G99[C?;5:k_fx))HN5Ll;gڱʡisiBþ0ot
fJ>Tsf^
+s7)aa#:WQʙDh 3'n
['H[DV>9|_>P6-ߛ$ΉJg:z2]R^)EʇD*G.2sKk+Eb%J S2o!Z\e.=IUPK  )  PK    A             =   org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecL.classU]Sg~6Y R!A-DMEDDTP+f	nlAnU:;SL?hgڋ8u(fys}7? zEBB$v&  t	e$@gx沀x&Ԑ2/a]
 *kfu)/d䢶P-uAfk-"@Rf~Y풦R,jFV@:L @VruM8u{V/8Z3rQTT[aSY!y`L<͵13KMiyn,	s4l-sʢ+F.5jE[7
"zOQq	h[*,K%KMeC]VR5ZEdS|)+k8DE-ES7kzIcurfAHRd-$C˶V\e*Xzp?Cy_ƲЩʛ<x[NQ
EMWB\>			%pPi/oq9X
7H5b.C3Ir͵sp9kzS|Hias-mZ/'dH2a{ahz,2G#hqCNs؈vogd<e<Fe0րS8peac:4^
cAeȅq0\
c1L2\fbx
o2\eP3aJ0wGv>aOq[Qǔ2E+[OE`K::ǳ9v+SQ ٳ5*dg[^[{z"~*
Q|62mN&J@qoN-A%pR fq-T
goFgH#l?=k^DIę;zn9KcD1v^IFCK+xw%HuVSB.B'
xDLhsu$b|l[E>_d!F q/yl^Y=v	"&8Q%
qt˼:PuKZ{ʴnQK+1P;hxo8핸g}<:ҽ[}<.eXKAipY뵴oi[at~N_Ύ|H4}B4Bj@,o:{w7}0L3}</0]5鮖"umEp;^+Xu֋ٯQmAAoSɛIkkHg\	!r^}{=:j9DʽPK;*>8  ;  PK    A             B   org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecMatrix.classTwULLi))Z,	4SZ@[
Vk9Lg8d힅{qaϱs?½4
Y|{w{W 簪BQ8b@!I)" gGM\ɮ̲=@y*;^o̂ּňCZ]a8%JeUwhamUk>twjNJ|OkA;.ܲXf-<Q474*[#/ZM۪׬~cvmlUmf[U}\*绨绮r炆zumKa9Xwk4`;U`UP[c
2
+8ंSS+.8-o
;\v-<i\&]H'oe_TAN5=;,[?}u~ComC1Ї^Yc:F,'8wtI&.bS3F`,p!4cP\`>We\wZzZPr>2<<I0d{ X.
y62|nŜ-ؖp-G00/_JsCdSa.tW1|I8)CV0`L XiB"Kt񈑎Ĵ鉱ޕ]JH"Eh10d[ؙ{8֔8AFj@H>&M#O+N<fI!(ycy}	R'-",;->S#;z}u^V`<(ȉqsw#4D$%ֶ/Z<~ PK7-s    PK    A             ;   org/bouncycastle/pqc/crypto/crystals/dilithium/Reduce.class=NAaD/YL
5,;&xiLx+Ixs9? c9`XA֪"$ݐgL\jϿ{K;}
Tj ɭc&NTإ5؄y#:gV(=9l2ccTIrya`1a/`Q%M-l@+H-1
lUXfZD^
8k9:w
κiӆ[r=(-?g kMSԝSPK/    PK    A             =   org/bouncycastle/pqc/crypto/crystals/dilithium/Rounding.classRMOA~l
t	1T$x]ۅv[x/`h¥Qw?軥ZƝ3;3_Np	sO
IPW	..]!UHߧ7Uv
n{մL'״JVk3׍]o-A
f:U]?1H#-WӬJme8޶ncLxyYmmWZN5s^ñ]h9ZU1-2t։V!ذͅn-!1M
kpv=U:s./0!H ǹ T$H,bTox;mfе'~$"̝;7}sDN	kNH(3RxW/f^֑g"$=]LUe$wUidٸ̺R#-In&tGJ7e>+PW|B.A<9M^->p4#'WcN-v-f+WP$#}?_jcsR>PwxE	\6"O
(SE'^ #]Tݢg)3L"w%>)s:{1D"
ZqoPKâ    PK    A             K   org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric$AesSymmetric.classmOPeD' "QA@4ɋF0-U)7PiƷࣘhB ~({4-s{sO fJHnJNjb'ۈzD+iJ&/	Hv̗	lz<<I+nUۯ|fsMmƼ}cXYͯC	biȼ˺%c+u^|ȍ7ND,q
FԑC"Gp;)VW:<z/ٌl5`\Bnq#=?0v g简&Q*zU*TPqSED-}>YkykVmloQڿL F#`.Z8x!H$;
+n\й`眍6)h:B0UPtExPGFuhx$Xె(2cRh!!qN¤zqIa&h"/ns-D7*^٦Ý]x^)qP8}.$*H!S"ˑfR'xzo0@K6QvWQEcxVV4e
~&fq!"bgNˑ35<kdT)e4QalT,^ 0\B L@1x
!c_6[7L~FhPKʞ    PK    A             M   org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric$ShakeSymmetric.classSOP.֭dSSP: jL601>u>'}DD
-Ny4=wΗsnozR+r-'FzM1Zkc\?B`/H2AxPDBx{]7?y4NQwanKPi˗~Ԯ7z61<ҕơ{pJ\pjfJȐmNP8oH4FĪLmabXyzȰi] z&7Sa̄	R&h& m2J9
bA
7TX4PuvM`:wZF?U,HWnj0CFO&4bj5y|~<p!*ؔ:mp҄J{VRg'v-U;cզXb\^92INVl/6UD3B"'Fh&F>n
*c*(jPK b    PK    A             >   org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric.classQN1=5Q|d3aaLWeh``0-&W.?2ޢ!Lʤ=ܛGxlԟ?*A׶ge(37
͇XXC=kaqaNgi5IilV#{
Bn;7T*=oڎoM%$Cvգ`k9"V޼Nݐ݀a i e 4R(aGC%"v2:@Py"8\J}o.	#(xR}q|#`o8hTkԖb@F/g&CE	HboPK]pkQ  u  PK
      A             #   org/bouncycastle/pqc/crypto/falcon/PK    A             2   org/bouncycastle/pqc/crypto/falcon/FPREngine.class]	Ne16uBBKRfEy8$Id($S!$TcCf!2^w}g
/)2q.4qQh{qwܣs*ш_Yhh$dԫO7{ӽMvD#ަecn={F2;{ތF7:xsI$uNޮln=kFs>IԦ7|r{-ӽ̿>P|Ǟ=:F#z]Nz=g|0>|oӧs{޹} ۱.nW[٥c{WgRoףvXWЫoRuk߳GZ5#s#ͧx
WUͼ1c1OĔ͜?=fշV>OkgF`wO8 c{+w\}x5{)nCNߏ
=v	tW߇qx?qcxֱZ3gx&w{)ذv<-0f.]-+KFGF/leV
#RKG>q[fqjje'ͺ~)}ع
[Z}``Hۑ0~Wa|R1=\U MƦ2?'v֌cGX3׹jk7U0{j0Vdy07֞03047?ӗY6Yb;W޻w)?#t7$Cfw}w{]cxW_bs7uz7Fn5Fb*){nF믮T<_.sɷTIu
>=Ju	:¨pcIa}~s
F;̈́t2
`owOӵ9OX7z|߿i07=Ix<,9t;
03\&iA׀qn7fq"K0WM}N{{oL?v89M{>
kl?/rT6KW\L]8W'^heǬjM.ǔ]KØyo	ctK1tzvpoSX)uiu0a1GYnYa2_.uoe:F{jD5*yF_{v㝎K!K`>o,SqRL?W}PǲkSe|+BEfc^Yrą;|QјWENy	]<7n<6WeNFqG0:Kqa6h0&=^Fݖ	=Z}w`_yRXY0
630rqeI,b>W^~_ka	_yfmI0ή,:u6~Nᣣ<%NΆڍ#p6c0o<{
wylcr݂1،0װP0rkL1F%^%^cxj\V\4ľ:eRƊKf04s׆qÙF%x#E,C.XQg[00>h̨+^1ӇyzTq|`[G?4` L*jV&
Ɏ3mIːy{j?*XMOufU}Q-W-ZpƢXvyzb͙clbo_ܼ7.prf[3$xG[`zg{irҢ0-]0	EoX~9?]O2uN¸Zje`v廧ط!`lK+O׾1{yK\#Y
5s`E/yscJ\3!e+``O߃̼|[怑_4z=/5$<_	pxͲ9?cW~k5nH}..y.xZ_S	fd26g2[\nlˆ߅QLVMʋO$]sL1z41wS
"-n_MHyT.˖w;H:)ҬAH%LXF6Nv0n-Q6.?F&ォu%_}%=V
_>5K+suw/Sw#F.ZvealɒqqhuYlfip%޻'atJ
WW\hw^Q;G
/<}2Bs
n\_$o	D2|~>0=Z1
$>S}_gZy
Ƅۅ:8._yxf[9fb?ܰO6o?oG}#Y-N{]ww>wᗵ)
X׽,6̩rnb'97*n	~Ź>O¢>şd;WFyQqpgQQq]#{OsRmT)VeJZ?8&
[_)57ew
[nʌB)F2ڈSiX)}%Ҷrz
nuRjť<U W`d}L6խuq6uHˈ0:}5{;ٯ߾nZsEߜ1WWFwމq6O7}lJdvqS˦8_[܄3׮Ya	̶Jy;əʞyxf\qfT|}&~ǰ<s"8S'ǲ` ޙlP[ә}^޻?"k>wu-!OU0Fڊuzt}gq:iԂn}#jj_nZ䛂Ox&Wcڜ~zU+0~_uSM8Yc;5fޱ;pN9ynlyDqyN;-''4?/yfW>,޺W%?GUÕO݅r̭#91S¶غOy1,7~sf7?ZfSo>mp)L0{"e0?^H?~9r=ڀ+[>
wM'hL+JMɻ2Xn"`㭎Ż/0d>pu=9:+8Fػ]XDG;6Yxϴ_7ѸCDtnvYRCW@:7giFo_?HvEe:<օ짐IT.S.~Gx0F[oG?oQf̖߾9hX
4ci0
:AEh5jrC-W-~J3s%:4~Z9j[@G,P<kwwRѾaX,G`Vru?2RMWb~+a4tfhCOب,{j'^\3j$C|/Lmrٵ7;#.@
w1ɾ/o߻gu}f~ud.^rwe=\uMc&?0~ITy 69~SWw
c{=@L_WwU2wצ'	(ohĽ'68_:e/qמW>ۻ+Ӱ.7s߹}뭑rkp~6._WI];<^u.ʝ*Y[rc{^]v'at?z202>Sݿ^Bl=C8kȇwbnM85bVL-pÖ&o//Va?K5;2qǾ=}s̉<e!aj尚6EsLO8st՟4Xگ³[u+q[6]ya<vqiXM_m(1?qbv~3kQJ!]W~Ķ/6!Z
\:?yͩҞZպbߕW7҈vVlޥuKl)?$'T8m6J:eP4?ʕ3g=KD+<Xq+2J
kDΰOv`WkFcw2_uKcp8Ozyt}Xu؂?Y}	1iuN~G:1ɜZ#չ|}{flP|%ܨܞ	t~+ɟ}amc]uY3}t}OnC:h^2kޏ"jT)ccw|Ni(מl;q[*w_,rmO9L`ODg'l9ާ.9Om傤zNU?l:a/>
lkoHM|z7_f|c`o;\G<{K8齗*4-[N|қ@z[HoMЃULzIֳ1>8GI4i0)>wҙ@:7Hg!Q-lӏtBNQIK:I'6T'ˁt.EDH#]˓t.aڠ_^W7z'H]t IH݆67qM0d#"ݚH7+tCx(M>!{G{&.J{/nL?ؤ{8Nϓ, )/H	BRʐrDl")HF{(HG
DRDB`%E-)|IqL
hRdB뤠'E?i0@!iPAfipB0!
iCBiD>T!iEfiFΑx!iH#i0I^!(iPJ,ipK!1iL6Ҥ5iM~!:iNƓ>iO&)iAV&i2B&,)iRC&>iDJMH(Ҕ4"MH1Ԍ4Y#MH:4#MICT4y$M'ILҔ4	%MKIUԕ4%MoI^4)&MIgT4&MIpҔ4I'MIyԞ4'MI%Ңi@Zj ->#H%"iYAZ -GH&%Ң
iBZ!-ΐkH8%"iهDZ"-HJ%&Ңi0EZϾnū0EZ"t־Ha1Ҋi
FZg#Hs:
iMGZ#ICҊ"iHZ$L*IL
'i͓
JZ%NIUҊ+i
*KZ%ܒrI^
0iMJLZ7&$֖IͤgҊ4ijMZ&lֺIߤp
9i͜NZW'IyҊ=i
OZ'HiO@w D&HҎiA!판JH'iυCڗ!ԐnH9Ҏi+D'"HK&iOKEڷ"dH]/ҎikFG#Ho8iώG#HAҎ!iHg$<"IJ&iOI$턒FISҎ*iJڇ%̒jI\/iϗL&IɤeҎ3i+Mڧ&\Iۤn8iOKN7'IwҎ<ikO'I!@ [i@'@[
9@.KAAN[]AnoA[B#aB	[(縷B
,﷐B[1ɐ9C.
5ېCN[:퐾Cn>D[CYDG#D[L5DPG0ipDFSZ}qlUa+sMf:. uǫ7:لmx%ޛ}EtsƩQcaZ=2{OksdUM%"3G2Ȇ?9?OH4Cܤ?S?g75q1Rgzmڮ[?Qvo׫q7uwH?3XH|gy|ϛ_vnex,p|]>g;>[9Ϲy>gs(>|~_gߕG/#ff,<*"	u`[$kjEƗwqۏ#:hvs8|\N?g0R`~N7ܠQ/dΑm-P_pfМХm2߷ob^d|EH.Έh+{GsH}dnŕ2D<\)E*[%sݮ,Y?f̊-1c?[f\W57x>Eϴ.h<ְx-m԰
[۠aЭ߰E< &[CЭpe]+V\os$s~ZqZqZqZqZqZqCq"zkť]̿ͅP(_?ŅAWב/_&+fb0j|Yin
CgVCo>Ɨˊ~z"_k0b|?+@P0tR1S_C_H5V|:!Bo>gb+d
#WʊX~z.t1b9{U^Wފ엨hØUbe_ߺJ1>b0LjkK`noOV3V|9!uBoWBZ^	W?yQk``'C0tFbhdơC0Ȅi5fVlaZZU&chƙFZflފ:ګt
Ɨhŷlz0f|]~[#ӊmmЩ!Ɋ}ga[{ػn3V|>AFo0"C¸ff8\BG>acHG7:a?&f|0Ocf$toЙbƉO
fYe?}>njmiaE83/g>;K0]j/C>/q~5WaD_|ܢތ_1/}I00	#_&a0݌Cy3ff\)w7ٌ߇A%3FٿJաǭ	f1Bwׇq|Oaɢo}|:͸Y-rݭr(]>1}{~
##^/~f< A~FX#\=幞y2e^p6tV1Es2|Fٟ*Ed>^cO=]_f!MYWd=F[;.x7e]?0գ0ڌgFGt7yB?Ɍ0bAfٟIt1 DN3#<ˌEϘT6+
,? 32_7#gsߣ3<? t!3D2c!fWfQj>6)
Tu^3|>pRsb4#ƌeEg.kF`E8nW62
z7It Af|)tx53X+ 9#Jc]7@lF=fl$:ьzv3o&:ǁ耻YoQНFt 1#Ì@|ۋGʛ!
̳?QtgWѻ=ܳ >w|2c 3쳿 ?nFE{}C3ՌE@;B{+gx'}D?ތE$uOSD\Ty?>CLy?g>[3}̫2/}E2/}2/[Ye=
̸Rd]}/	g*W˺\#gZɺ^/gd_(ՌE"VOo}K;d?ٿS]gʾOC~PC?,ٗ~e_?!9S.̘"9y	T/
.	.\"<UkCo~SzKx
wpg#f}9<<?;3|>fy<e?oF̛\|Ō?D
oc??Q3s+$:_،yn1EE872?K/0#_̌yNb?ˋqYO1D??wp1쓱ꢃ5}34E8ʳٗb?t
D})HtÍf|o&|>6woX{όٷc?E8w7NiFOǒD7vg>7<(:o,:oՌVlKb?#E87qB7p7ya7܊M?dF|O?0#颃\?gzD7&n7yi7q[g>_cFEM|DM="|:)Rt3&n_%:ǁ&~_+:'|0íf7oO7qB7qW7{7܊_nF1E81Dy_|Dyށ<_)3/q	3Og|>7n<-?g=du'bu'*S'q]{]ǳsdٟIw9Yqg='oDNvC{_~:?s>'}џk?p
&t
WNa;EEK⢗)ipN]Wv=9?ˋ^K]JWyѮgg?^N58MTWv?q/}ɩc#?^kN}9@nC7u+4촰m-vo,W'D߲\r:[9?rny)z/E$z_UX.;,Erdy,8Cm<8\l\ጰl\⌶۸kgx'ظC?ƌEd*gSDeT9?>uL9?g>ƅ:N3}+6t/}KE6u/}k6u/[;m<u͸Rl\|oig*W۸YcqgZٸYoygl^l,W8[m>&v8;l>).8m>#^9l></~U!O9?~eQ9?~u	9?O~:b3~yO:?SEhRGiۼֹbYgUѯټعna/nߴysۢ߱yDoz:.os7uDyM?3|YE/7M].:o%:ǁf^?DM]|D<tKQHt7&gQ>7_\t;\_JtcXVt+\߬7gy>7_It;.'࿩ߺ>VyzE8.7@ta]u}~o&:ǁ+.?ۈ?SuEGoi7q';*z3ui7>&z޺?q]EM|>&w^࿉ᢃ&np?Gq࿉\cDM|>o&~wSv'Eo-g>+]EME%:op78Ν+:oF?ٿXt;\ٿLtpM|&sWz?ٿVt;.O7qx9l?ٿSt.#:ox	{@t.o-ga>7y?O>s{n࿉].T>7y?Mt	\Ut!	7y{Ct+\]E8u.{߃|>GVwx='7xٟIt|/g7g7.:o27ٟKtM]ٟ :o7q~{yN^!{yn|oMgq3/=_Jtġoe7++:o8y?ˋqYOJf>g?
=f<;!gm>7uE;|>77/yHtoo&:ǁf??ۈ{}k/:z<|o#7?{MfDM;/:ǁ.>g`Swx࿉ᢃ7y?Gq'=cDM\|>7q7Qtz?qM_?]tĉ>g,Sw7q7Wt%o6g>7}gbz?࿩y?'iJi7q?xٿVtO7uG7އ7ٿMtM):o7q~
<; :o8&oOy?<|D
=ei^=mT>7}]gC=Ut=<ͻ!:oϼ[t?sg?GV#V7]{]߳gٟIwYg=?>og=a?sOI\y?>oOy_T/.z	;v>?K^ڮ]>o&_^
v]zW]v=?Iv_GoWWv?/}ɯc#?^k~}@nCHv_Lv_[RVv_[F~;7q^+~GgoY.-|]Efw<M'rgy/; cg@߳\Y?>P?ߧ`
'|#EeG|cD5X?ǋ>E'6'Ed*|SDeT?>uL?g>ƅ??ϳq?Ɠ>/qƣ>Ţ/qƳ>ekb}Jѿq}D_mr}kE_gz}ɢoy>fѷؼj	g6ѷۼagNwټmgڼg!gNͫC66636ާSD?gJ'}_y>4m^_l^_>}C6o|[;6/m^?ՃQ[S
][W<[OٺD#DlA[g=Elnd=u ?se<OI[	zN ?m]((`AoAPHl])(lI?mRA1[
k%m=+ _JҶ. 7uӠl]-xE`rAE[W/z^ DjA5[}.z
[WjzbE%: g]ٺfP3o k.nm]5hbf7u٠?[uֶo#z[[zp sj/z[W:zr ?Ql]:lwug?{Ń޶DkA?[O[z| ٺ~0EbPӷ+#l?! ?RQ/ g?}`g?ǋ>EOl?$ O}`?Sm?& ?]̴ g,g۾P0􍂹ϳ}`'?D_hR"ۏ
/}kKm?+ y\&/, 7}`پZ?D_mrۏ}m?/ yL}m?0 Ml}+[m?1 ٿM/ gNwپf3{Dk>
D?h!O
Gm?6 L㶯 g)O۾ppgl_98oT/ھtpi۾vpWEfu7Di-O~| m_?x`GF_7waxw^	ێ{.~Vµf'PK.#Yϴ8  mk  PK    A             4   org/bouncycastle/pqc/crypto/falcon/FalconCodec.classUMh\U>7;o8L,6:JC0*XB2Cd&I&MG07JqB!lDD(ڍE)ōU9͛ox;y <58f9;uq|ޑqͦ&R}HcՅK̱3ukzm6.%ZJq4W|}lWg7:sYvg.UoV+7bur^ZY֗p	]KuOCAD
}0@<xJ*˥,F>dr^Nőh~( `>u-4)-=%}v"mǿJ=x\
oƎ4w@
-..H͎PD/@/vG%8BZ7> p'Ԛ%<c0	A iIA2|>8, 码-=Ơ\;+t>FN!BD~;9ײ/ǭЖvJ(n?ܕBVS6i01,'/<6`2+45G-<'yiU!*obG2ȇZ[ruI?/̟W(4F'rkI鸯H4 'Zux 9B,
%MɂP#ڔog@
;ٶH)"i+$'ȕ&Q?XW$KBRK[AEBFT Qٴ,s),Nkhi[0DMŲ;~:RM}>_:
5|-t'PjQY[4-VgӿN蒗U -T+?V228D0I0#Q`kO0 Ӄ\-^D<UEQ$TGw6rUvRb#T0oDhEV|sN܏0sҥp	toN-,m0۹Q:r"n'_&HѓvޣdCb/k[wSٙJzRLjZiRDi a$8JL(}@(B9IlPOPK  `  PK    A             5   org/bouncycastle/pqc/crypto/falcon/FalconCommon.classROA}lk:

gu(~dLá,jV0F9`<Mƨ.\&xnBZ웷ͼoO N0~H/rF8_<Huq^=ϱ\{}*B6y6XJ9TVj`jɳ!B].{r!uR
2WJ(ҾIez!yûU6k7JEjQcBmaC^\*zZKg*Fа/\;=0uo7W\EfQnίIJM
vn]
i<f5@
D"b8dE>xśWUoZnj%]zb+ڄ*ctQބab^A@rG\7O+wK.ߣ;Ѽ4chbFQVw-VƓ\k~y9:D @16މ-g$-̢#cpGqGj*NrcjC,OƲidkͯTVɞAvdE6sӗPb
c
Yx9CeryЕ0T#)+-2gtA-Sˎ֚SZF>S.t@I#䟃sI8-<n^Xmn^ZKyeI7oZO"TIhZ1'[[w>vPKw+    PK    A             2   org/bouncycastle/pqc/crypto/falcon/FalconFFT.classVo#W?=3΍'ufӰ%zBGZ銊RZqw+~@'^(OHmT!<!T@'t՚9|Zs9s~D5J-?F򽵗^Mie5Vܑ2s?1d;oh4so
;{H.Q长zZmu;+w7oU{ރnQuZ^{}h[n{ݕ;jt>ZemLfԨ8n=mmO:8#HuszA71b>Kl9mtΎcYToN:cr8~=dg>v`#I,\ryerAEnfE@bov_7Z[4=ğ-|i+R=`J>koS`{/Giߎ2*j:2a3VYeof9P٦~Ӳrku_ެՋee7#W*ӌrf3ZsB߭UQZTQ^VTV_ŠwPq^ƈ@
-4l46iOY
>)3)
G0䢀xQfHd%ѐșƗx(O*JR<$1y@WhO3ȐҧVCA[Ow3p8:D:"  +-+X+@1Z%Fj LE QVdRᵅҍ0 **Z
@v:_`?r/zv9.?)\'}_4 o
0S R ߩUCAj'diZkz[Ji@T U#QcG@8q(gؕ
&#$dwJEF9sFl>pլ(VVUVw9f8q
rBPjU	j05m#!]!#-⛟D#hRf݊2kuo	@+RLVƁx1/9
k"ws>@Jx
T҆ˀ%3"!A&Ĩɱ44 f>%~S<E3	q%᧼jqB_Sh)0)q}^H-!A{yB
j2, yɱ17j9yq0A>nr͹y1}SЯ'p~̩! #	E3Z%RK7*os(h%3Eu>#χ`9>^PS_dd,`f]FiBڷ 	z	c+l%`ju|<~t<mLsbp4U/q`ܙXrD+(?6#KybF0C>{4
 	d_U ⡶.W˰TryG1T_PJ(>ze,GY[f:"-%J@ Y8-6pi拼3g_lD;[eURkX;VGrG7@^&kMl1RA޳ڳ(eHyuE69LDE14*Un,:&vYDצ	8d_*cn|NritUia0I&yGv&3\iV$osgfcl3s`K+BAw8FI
y^6h V|#c'::PKn;  s  PK    A             5   org/bouncycastle/pqc/crypto/falcon/FalconKeyGen.class	`սܙfr3'&YB6+(
H5	$@BCv}u6l>.vy}.v]mڧ{oXr>gΜs33sf
_=(N+
[ӺhEVu17c #q0`ъkYs5ܪ۩`;ER#"A5,S͢ŋKe,)1)Jx22BыG);`;G7jvU[kv)Dsl,.v v]a-kcX"[*+x|ղ}H7a"rՔHV]nA]t޲,de:]s,YJ+.\-_ꖟj,KE֜#"	KpȐ۾ovwk7mwq;u[l9<гm̓;m{!jo=g9g9n>ggTJkfn0siF,%tz`wlA6
00<867?7r뒭C8x|KߦA؆&lۅqAv[o[&\7a;ekKV({v]1n/B)va<JctЯ/]+[G۲uhx=48tan`hƷmݼg:c`ݹR3n0s֝Cvہqnm[gn1c^|"nXۮYX߷y֡/[~ІKuĹ[ֽ	^*3_qv_ W\bŖ͛m܂~tRKe:^qU~m]5ʋ&j뿺gz
R47nڳ\Ke˱obY?+./i~Vp|Vpa6StYk+KkUٱo@qJ)=C2ݠԎRKՕ6፳NwTuٮmj1
l2fWIzxC;7
Nup닉AUpځֺ}w+&`&T1q=cbh8lZ~LΡp24s8sL:4 h>&=mXspsϹq{&䟹0ɉ*O1rUD~"{ĿvďlVF7<	~qYv1R"<|D}k9>}_"b}˵C䚟<~eOGU~ÏGU=U-?rKj˦?QkoMrNԾ_x}_]QGo;E?_m?-;碧j쿟熣^S~_c	6?Ya*<'G-3/3DWgՙquA\]Wj]\@\
q1_5tԬ#WWˡLjK
mk]ruO̮:Wuf	nu%8U$X Y,RsU:UyWRQQW-W1W]*UܨZZ%A}\Z+e*+%X*\u@ګ*]O]\/$.U媋窅JUkU樌Η`quv	%)uPRuڦ]sTnQY5jjvUoU\NDWQ\5U+WV	S\DMu4WVWKj
U7:]f᪳USuo'~HBRA(Q	
PB`II?g%xNORR)kIXV.~kESVM4K0AL`S$8ELK@1	$$HJP!+Ai	$$TKP#AF#AVZ	$hEV	K&	%萠S̒`s$+&A^.	N`gH:	Δ`$8K%X(,༔z:'lcY/k;,	Ε@;e{05K[y@VN
rrsS.xVjdWF.%wRދVX'>a|bJn`"qr
P*M3w~cIr\Cu#ӿ?zUyT)Yۢ3OjaxoXǥ:th+ApDwMM~4y6y\	sbV	r|I@nZ߀.'4̨k<8:X7CI4_l*`lTktjgOt\VlTQ|%1;8ٕjId*mb&Ј
cgbReʲqL1YzߥfK}MO*f,!&q &sA*rTUsplL5gZOJcֆ|Hrl'2)/uXey0}$>>m~aƬ|2N?H|e޵aaRNW5^v7	+[5"ܨI8ؙ3SPUU\]_:eRGHzDTB4p0Inu
[P:chyog>`*7=
h;_eLax6;KCYDSmjdhƾpcSHeFJ#ԣO!ћ-d*0IgW>9ZP*OQUjvK>~RȬ)
&PFAR22}:IIUv޳]KÓ5dL2"נ	O3m33_ɚpTL	\He2RAhdx<WűTqxYxL\I8-m:q*+0ޟFJ#ZPǍ%c9UeO4'-0=d
X[C_*$c֍x#aF8)|(aR{Xuᖌ;pAA<)^db>G-+\BE^T):cm7\&6&9Ls
&֛h3rQͱ~l3a<DVḟ-B
,S} (fn4V
iӲC8Vw6MP0D߿eAB-LѯFILb1`gT&6qc"<Pop8mқ;U~
><f]?$:^3jG$T,9#38/q^69'8ɐӂQ`Yוbl;$ĻK'(̓&܄/BG47-A%ѠĽ]`{/a'g/Me\nkཀgz1M24
O7\ߩ4ܞqkYa^$SaUjc1JfeL/j3UHS)gTTI3%Knk#2pʬ~rovwSWj+GLsA%XB_z@^Pfپ*ODK0@rN^=K?%iY<˰Jjvp{ÿ N\>\rƕCQ8NK?J'<qu3j128Bc2Acf}t_WVRL@Ug*QXfy
8+:I+x#htH̌zi,\Y\z̺]
"xgҭx,E_]H.	FĠ7{{xxc'X8N9)&` ,!-<3SAYYd&W?-3`f_*rxO|QZ)܎ˤIh.Huf67ubوb#Ivt)9ksI
E-XXgjf`65W/CAcd꾮z2G<GQׅZ^j/ztAPhaG94/FkuK#>&	Uv:<kq2'[LN^f᏿s3xo5	!_ф(˕ef W6wʴe.aZꓒa̺TqjvM2xl-HW7yC-0^s,D>g#Z;_g|7nu3b ~Zhgs$abPgب79Lv{L6_vώDi\f0
9U6I"%)gpAyvz*n7K3;-TפdהdTWo3mބִlsqkNvN1|#973Ki1m|f4siߛĤQ`9?"h}]I٩fAONɶ)bfI3+(Мdf1lkvJoE3ԋCLBSXpc
7٬FD-{*DN5BM7v5YGqƬgHgok[J+	{}RB+X4Va<9{e{Fj~6<΁|ƑR.x'03#F<dޒ~Zjo'\2^Pk||*86Zu+/
=*2ՋTtsx
x)KY*ee9
Om2
6@0b*K*c&KI0ѿul $}_sS8'yu,DwGT=EEc@*O8MBѫ[gh,Vt^%mvĂpY9r^%٫8{
{GXX~:_-SI;W+>ԉA'c;Q(>S|gՑXɔޖmSAƿcy
bMwse燊7hl
ǃ/4%1ܪyi4j:hd/+ߴHRƓe	<g)y5MuMx]:~i^z(_l?Z8P(yVyEqm}q~3Qcp
1
C%O1(Kx>1ZS
d)''&c]&
$O);avҸ!Ä曩&/65bxNJfpN
-IėQh^^T#7wo,WVyҬH(tnE[~VrXNT$ygL&n5]jMY l;&Q|d._an?-h0êiň6tJe#
_HEn"Q,Vd푯Kw jr`Ԁ,m(W#4JoJ+
&uJϸUVxyUa#⡣>Yeqڇl<ѦFA&^'QT7Isj5'K7UK:x-v/Ě[eք
^_2W
Wy|ܒ&Ͱg|ke31>LW/\Pvw-Ӱ=[ƬwuEQRhF}cl?l-g0c03lf5I?/V6;h
.o	9ib%3AM$ӦiT\=M ܅I0ӱ]7_4W>eí)%g?mg@)ZE
RgH	t&?NjA#5V"j7ѹ7-&2iYiiӹ
K?uw#s]>uQSg>)7)<x.*c2LrduD؉G룥F^`7~LH6S%qqLf|ŭ}4d;&
+%0ΝJc'i,e+²qN(waT:Zwu~-GHpYܡmlIJS\#ruǶP\m
t?ƣ(>1M֋6VbrVSwYE"3sS,RZ

ˋ,IZLb?RE8Yb]Aos Ԗ_?kk9uKC*WPȱ(sunm2`AuZNZXuTEKb/Od
$T.Z2@O_-\Y
v,{;| &vXG\RRo@dӸZ֪͛6Ç9|c˽CŝQXXTB'Y{F\I,?]i?urq-.ye8!bMd	ku]
~~u*';L|F{.C'jw'0:LD!YNӳ,y_J됪qd(s}m\ǘT3/}-B*$ԟ3\m<ʦ9[51Y WOMo
^Ҩ )~63I^ޏL2tԊ8?1$p+3(F*)(uX_&J^dҧfϧiSd~jak5Uh[eo^+`&7q6T2?ǧL$c/.?%5-|Pa+#G^j#Hq)b\
`*ihuL*S3Du"V|;Gw'NŴfnv-{e&T?ZF`+?y\z+^@{qٱÜ#wMH-7Kq	,&'Mf	DqH#z*w1I'9֧SŸc~׹gf1.{fX-A+˒p0gAB7Sf渤iFRRcDE*1cϿ>>UHUǧأ3,Zu2x4uD0խWJ|V%E1u2.Q^	b{c>uqS{ZԹ?0n7X_kKum$[}5 u6Li77h]rraݠE)YvD4{Q?$ZUA+LorWܭ<3e8?%7mT%2ڪ浚)wfkk$IԵFh)+,[g׵nמQ߮kn!O4uce9=n	1+STĆ2UNVd#6=k)8M8_M7*6LTlT_U7/ \ҫ)ƕ	\p^3{d2=if]&7-o6ݖoL1KήjܚIOC/9^PእLVٟK8BVE#G.R\5*WVii|
G#KWeSGg{KR/C2-w;jk h-`_q*d[+VWԔ\/`Z6|Q5ZV<5<ڊJMG#O
7oN^Q"Oemq
pIXR/_sEOk](tl4l2IV(i5?'b<I>E%fŖvtPL5YҁKII+))Xa:l6/Ҫ:jɥ7oGfc5ao#~` A<;.
([:̄Ӓv%n6S{gsnT<#SPS/}3mh}poJ[#F?@[PR>/H,[~yDa'	tg3t	gg]0N96tJGLNN|ch-|}aϦO81q9;-Ec0*m~:Ep7,-6owwX*4Ț|R>ʲyI`*d~摎`W=|]pBԷT6eH?$99baopؓ~MbGȫ]N?YbX(gLX_\vPÎ:o8gcgVLl
ЬNf/YcaR8[_+;:.o-.demqY_g3)Y~fup]H(˵h[Z["xq֌󖗫>fp_	&桿WZYlA]]?딓=~%%D}ѣKRM;IKM6ԕ/_蘤YsQW,8eJ*R;yc}	XX*Z	%{:o${]>Z|{iu% ]ylGQރ	ToWYjn<ᘵK"J`bEy"vuD9L	oŸ׺q֠Vv{qS5RX[lXׇ:u~/:9?"i
s&_ǖ|#1>ɯ[cVlriRǥ W])m$-\~T-QB4.s4~_;9	y+=u<n|˶d2GxMw gÓoE%i|Um~Y6852ZuYt\Uc=7
n?}'kvJ+(:hv?pURRElزAvҍaҥ$	(R|/d9E$5J?Yͥu_,WiWN5Ke'/}c'@^'Ix
.]|>4ǟMfGf^)WWm#e쓕wƂWxէT~R{uA~jD%5:GR})<vjܫ*TjЈ켗rv\%'х{T5v-Y:=܉q{~Mkab&3mv*SW/f9 ~KnѸ+34t}V4vȀEq
+Ti1ә8x	!kGy|2:*(	97KcSlWoYGȧUA{.433hL,
ćܪiceMJTl=C*n=`}^/)cLIWjb䬂>i.uD-ߨ|zC˱B_ &
)-SW/2:{ܩY67wU6kT}$W(U*Qs5JSm3$muΕ_4SusXT=H#THތ$OW[>V>n/J5,f2%%6oaOJVs-b0V?7s	}a5aD*3I_.eq)V?|aGF`qEzWu3{gČ~iݺyu^F67wMwCe0'p)_Gʌv;fN)D1!UzR>5\$~F9sM=m,Z]V,Gyr+țl\=]ꗖĶGqy{2'o$#b
rǠT]R~QP;Qzs7&?h	Gm{jGGԪQm!ia\V'tӖ mA;aRG)m	*-pP#Ux^B#jm	j-hu/`tDՖVۂ:ar4h[ШS@%mA!#ILֶ`VNTm	i[-C8]Gmж]'tjK0SۂY,uD0G[Ճi:"kKХm6tDpӶL`gi[p@PGhKp:#%@ۂ.E\mm	-X"|kKBۂZ\#U\mFuDpk-xVUh[!Zm	i[ЯkKAۂuDp-جՓiKUۂmvm	vh[0SGjKFmvyu\mn^m	iM:hQ	fm7i<-EGȷjY۴!߮-&MKG[E[{O:BW[m&owyȻMޭ/m6y|@G"?m>4@!!?-rTJ?O"YZ}W!?-_M>*xHGȇE~LO:B>-&Ǽa'uOk|TYm\u/jΝu6D!-k&uoj|k|KGokb#E'͂mOG:BX[OM>5
~#ϴE\/p#䯴EZo7"mh:BQ[䟴M>)Wms'?&ymGMu<-mZ:FOhkt0:BB$,K&s,	ђ0-	~Aג-	ے7I ߒ.	Pa!KB$Kyk.	0/	L/	-^ %!`&[p0		0-$DL$Tm!\LB$lLcB&adJ~X'2	+{2	103	5E73	;g{)LB$MBo$$MExI*IȚe^ &!l&$MxI+Iț^/'II(N!NB$,Nn$DN$T!\NB$lNn$N$)!NB$N$N$n'!wv'{1NB$NBoB$NB!|NB$NB_B$NB;蝄I蝄?,I蝄۽蝄I蝄%I蝄{ z'wz'
wz'w~o z'wz'	wz'wA//I蝄I!NB$Ny
wz'wzz'wz'?;	;	];	ywz'wzz'wz':;	;	T;	OzC蝄I蝄(I蝄ɧfNB$NBwz'w7U蝄I蝄,I蝄g蝄I蝄?#I蝄g蝄I蝄ޏ
wz'waDɪ=[B蝄IMB蝄ILx;	;	^;	7Q ;	;	;Y	wz'wzz'wz'[<-I蝄I]B蝄Il^/I蝄I[B蝄I蝜@$NB$z'wz'O@$NB$g!NB$N%;	;	E;	z;	;	E;	˼蝄I蝄Q;	{#wz';	;wz'wzC;	蝄I蝄޿/I蝄m<NB$NBB$NB.o`7	wz';	;?!!.N$~P;	;	;	v'awv'"I؝ICB؝I؝܁S#I؝)I؝{=#I؝I;	;yw v'awv'a$Ni؝I؝U;	cN'qaawv'a	awv'aws^ v'awv'a[;	;T ;	B؝I؝|$N$!N$N>m|v'awvv'awv';	;	O;	$N$#!N$N>$N$oB؝I؝|ֻAh!N$v'awvJ6nawv'a;	;$N$E!N$NzdN$N$NdNPY;	\;	-^ v'awv'awawv'aw[!I؝I;B؝I؝$N$1!N$N̃;	_;	;yW!I؝If!N$N^],I؝IkB؝I؝\$N$B؝I؝$UL$N$Nd I؝I.!N$Nn`wv'awvB؝I؝N ;	;	;˻^B$NG;	;ߓw6NB$NB7	wz'ww z'wz'B$NB;i蝄I蝄G;	;yA ;	;	;yW+I蝄I6!NB$N]&I蝄I;	;%I蝄IB蝄I(I蝄I;	;9J ;	;;	;-I蝄IB蝄I|)I蝄I_;	;U ;	;	;7A ;	;	;G ;	O;	;w z'wz'
wz'wYo z'wz'z'wz/uhj;lQ__:Q_]:Q-[Ϩ/-[Ȩ/,[!s > Q QR5Td#Q*3a QUQ˨ QTg}@MF2u/`2 Qwu;PQ3=@.cRj^'^O<޽:!b^akOCշ?f]䥤88&P\=W*0\"`'5hT]:)=GJGioȱtV6݇z.뱃.'8~QAO	Rz(PK`4  ms  PK    A             F   org/bouncycastle/pqc/crypto/falcon/FalconKeyGenerationParameters.classOK0nvz
(&2qQ=fqT٠JA<PbZQdy.y}{~*X3nTZirf̮LBN$Ȭf8JnSDv+>k>ZUeehvV~Yz9˥򜫑N!a/(S4hb) Ղ
BP$6]sEX+\LXvwU먻VD'$ۏULUcPKSZh@     PK    A             ?   org/bouncycastle/pqc/crypto/falcon/FalconKeyPairGenerator.classU[SZ6$%(jUTPj`ՂXj80̨!nK$5
o8gRNZ4%[wMx]\~.3hnz5ל{Qԫ3t+|+7DVerڢ(rI[o-@5Em}-1(C2+[6o?6}'3R4שQes[vmՂ0ݚ{ʩ.sd\m(Fan4zdUl5iI]évxu<2+]J^]%}.H54N.(GN]9b{8rcbD41bxʎPmn3e7%5P;b_*I1?%7~2œ7Vgamݭ?%	8aq0n`LБI	Si	i	#FuYqu`Lqg$dt1N)!3e/N[;|Eqr1.OM6J?BNq2a\ȋ4'or`rh+(Ll3JrGfb =˨HF=
^WH;HWjҽ'Fs
/y	-DbB4RyIEivL%WMmF9]@%ژ=89[\|)ȽL
jI'lR)5ҩnduni:g{^u
^g/PK3,    PK    A             <   org/bouncycastle/pqc/crypto/falcon/FalconKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF3}0i9yn`
YB6,@}6a5#&:-5ҩaTE;0@,2 @83kle U$4
`i PK;     PK    A             3   org/bouncycastle/pqc/crypto/falcon/FalconNIST.classV[wWi.۲5P
#Qh4vij;N"!R\dCeYɓȒ"\;[N$@_ ]uEyg-~>#f%X־osξo&OW񨊈*>i'TSq^<Gg%qfށq
񸰨4?./D%h'29ηP2~tKjkytNo#̊	(d0T߳vv#ԅLz<LH6Ƨ'Sɉ-{pʖsV8VNXDS3gI:=3=195Ibߦchj5Ȗ+
^\Ia[RBXJ^8d:f3TmTrfJlWF%cW96kb;7׋0E	N^nR*eW2U^>~9ܱxh2űjlլUq2=C߆l!f/[Yg)Ѩ9ֲ>aYzv,WE]i/gVgΦmV]*ZJ֪3p,EBl\/eL)Z17ݱ]jN-87v~P$ۃ\Ͷ<b\lvJ=2'=['O|pl5Oҿ_wbl2W/hMQThw\"Tj廏Zj9cU1ŌCM\
;0UhP;'M	v]N^Nϴۣmhu^	O}ŪFyYPi
>'<`L	L*8,i{xl`j[(
dɁS쾿':E/':#Dם>&@aL3yL`2#eǢ>>ǤNm d cr!Oc>"L50ˠ?yS(xKQfRl&\aRd̤䪎KY&/:Pc0Y)*/3
3/:k:%XW|7ud2M̄NzhW^TŢ0E@AFRH3)8eOM	.ӷ9H=I -Gq32^zDፈ芼7jqa
h^x^+
h!p
'=>
(s6?ѹ%#d/IBE?!po*rEGPvو^_8iKHXOGTZa*wcS5lLuȔM|}.p3)kAׂZnNlzP0%(}
n/|uo?Mv3,7Qbʹֽoq<ԂkWD7M"5Dgv&خIxT7IA$	7NҢO=F΃8薶?ҿvR5jZ~Ү7՜NHgDmV:ex+ؽ@..}>Z}ϥT|\V}ڔ
'RZ{z#z4
unAaMݭ	-=_@*6
>Ѭ!o(&}6M͍@0:mq7#)/F=-uj<n#inJd)^8z; M2WRo74m'146uk~kmtsXڤpЭe4HeUPs`l'5o`6-vZ=<m%[s]zPK>d    PK    A             9   org/bouncycastle/pqc/crypto/falcon/FalconParameters.classSoP:C&h?Əa'hBdfɞH)nu>(!qG2ǓM}޶?~~`(bQQ,0򅆏]a~w0R7.\εa]r.fV0,4ljàNzWj_ھX#Vΰ(#GɅ67n-~Z.'L>`H^=sӻt}a1mǢBڴOq-㌄yjC<Gz}nqwȰ}tS<ԧ.K
R
+XSp!wM}¬q+Xo4
q,#Ǫ܊#q$$(HI؈!;J'ᾄMiT#RZst։0_Fȑ"@LK3tIkڦl!	{2IHbfR1;3_1Ri\0zI>"3@f4N!?r@.S$9GP2OP4pPK+    PK    A             C   org/bouncycastle/pqc/crypto/falcon/FalconPrivateKeyParameters.classRKK@ikc|Vm}QE=X11*?Jvhbvwf6U^<gHP9xNJ11=uZ^%s=_ڗL#\p~lG)|7*d_y=q.tmvMD7,3K(l֍C5h9VNb $߷km<R:
Æ~bEC	
)!I4tK0.`B@NE*F0)`..Z+PATEd F	i.9[4g/BX<cdYl\=͈E0Aȿ`KRfdtb6Q1ӦȷPK"	A  '  PK    A             B   org/bouncycastle/pqc/crypto/falcon/FalconPublicKeyParameters.classAK@&mӦj[oi"Z+zt]K`((q]f>? `Z8,D?I{.SJSi;f':OE!*gS̬w:e06da>Qs(~fL\d|z~?GGͿ(@ 58\棉.MZ=C{'vJ&uۤ]{E7:O@	ytnzPKyt    PK    A             2   org/bouncycastle/pqc/crypto/falcon/FalconRNG.classSSU.n.+MmhM74)AlLY4Mtxٿ@y鋎meY
}/p7֙;~|{g~Qi#|EkNh3ie}!г3-4Bf\L%ZrEL*nd߾>б<-
B~7rZky+_nT	 (f+_aTٯSٵۅ\p X
wDb5S!Z`lZ) -O#QSkՍJ)ʗ`=pm0=î}kW˹j%uE-7_e8}#(So;N^),c*v3­RLwVԾ<9"G91y&y<ݰ ;8)MrЇ~A%np&IiR86`4mfFҼ"͘4yA\j~m_+S4=ȇ֓78:#\z;k=@`eʻ-qSЛEM?CL'`?hKZ#Yv%3e祂)!v6dBZboD.\{%^P!m\۸i\X0&6)ltLEi:E։.7j՛[\3]oÍLfr5eR7.S{ǚ9ylK,q
ӡV[R!S[lJ}Omvuc5\VncΨ˔Ð!;{&8^/}VDlu?;
Jp&jѕdOʍ=b~)E$\x@p6rH1#kd?_7e#lg6<$*rԯtTtO_"$YK{QaʿQүi$)>R3j0	IH=]V\*G:(4HBPKO    PK    A             3   org/bouncycastle/pqc/crypto/falcon/FalconSign.classVIs:ZCktmct< @G1+/@HmMVvE,bd
GpņU,bǞ
UݲRlh{}nǗ 8}đ
#9g{B:_: 4[-1DeVraV$k'O[uQ
-.WphuIIBݮ]jwDU
햂j5o6;zVVmVJT;BuMJd[oٮI:eX*X]X7UK30[9^WS<vRۖ]i*nwkٵf]2-Qv6JRwcUQjϬm-3{δv	&oS0s`xp0P{R0upEnls`jr:$f[86l8b%G4"9VQJKaр6ksӥ٥dͤޜ&٠). Y];xR\{GE\EBERbDŨ1*nSqX*-JC?g]*me~lN
DXߒ#Iҿ\_${&݃|MN,/DE5MC	
L
Q |pA
1L2b BFXýL&0
0frrXԐc8',qO098`Y<Xagrɿ\`<\dE&/1y9(Dp
11E(X@L/m.3;͵F8
ТKѮv?sQCoA1,ΈﭼTʾ

+tDN$'J5H"_<:;`36{y.3=>5=>˺7["0S|-#)W!#"*b;EHƺ-c!K  RpqS4#R2T8<&b4'ϿU8p@攞!ټǉn/fkz\튄1@\|z|LO'-ӫqQ󰲸VFπeIm/B[FTDHh wT!mI=,fD:^e6E=T1I{lx
(WLx	|\#EƽxʃH|(^6,9gV!A6D;)lQGcHՊ*ūѹany&ï0tQާ:OP41npZ !!'!OM;-h@זfB#AmID1%=!Iz1-גIs<7m13F{͞]Pt>q1"zb1*R&n_%}^1}Lh2d/H(u#$1ߴOIހ,cX)USa)*V"eFv]>v:d=̟Yu?>;~gDǣz3TDhsTPI=:5s㉌\!x~|;PKQ6  c
  PK    A             5   org/bouncycastle/pqc/crypto/falcon/FalconSigner.classT[sF)#[-RRh+r6(5`p4vC&(#N᥏PN;lp!es' N`M1.	ʜme.VdRH]p ֊mbk;0zntV_-T˫sj"@5Th
He3_(H	 ZlQ2;h5#5tOh7~o2b9c
h3`DpXTH8#t%ߡ
I3}f%9ц!r,XuE,-0BzٔxsT
k2
#ɞҊozv˶¨+#
\!z`{E4yޫnѩ-JTG9r91!:uaq!fRݫ^YTn1^ao7\W+3-[o!e'㈌d1!CdmR_pDKF-aB+_NWns/&A)'y{32ZLqW1bTcR>>SosHOA*0UiR8|ᤊa|9Nq8afb)H㲂.(ȢB<9\T0R`<)qOYz=*eߜUk0A[hA}zWxC$%S/?5FR ٟyE{7P pm))ۨ>afrX~3;r5W]"j	W|+z31;tSqﻸnUB_8?~#71!<y\IsMfwIvӜDMuqzt*	,{52ݶ^;Ӓ.Ķ1۪6.TZƸ&,݁,݅${0ă&yPKcȆ    PK    A             9   org/bouncycastle/pqc/crypto/falcon/FalconSmallPrime.class-NMk@}Өiblm'-x\ҋ BuMCdƘYB?tv
oo:{'tI8yL[%E&^TՄ26:*yu*ʽ:R+Sw)+~6Z-<P."K=K7!BZKI1$=`Sr+!	;oQxܠ?6? PKD     PK    A             =   org/bouncycastle/pqc/crypto/falcon/FalconSmallPrimeList.classڅyw%H]B 1B$<wiR݊)nb]Yg|Nyffٳ=}^r^QzNCL Rz_
tXfCǤ>T|4' oiݸLp>-΁ϳ{Qkwi=~ ~74qNdp?2
Z̗C槙^E֮Ef"{-gHd+rټ"m)ȳH7 +n@AgI(x.BʢPxt(QqM7s7sv]b'm_J)(1=m*i
v̊AQU[	*ԟ0gJ*J|ێM_C%!!OnySG5[PuOz
zQ"5~]T5_E7ϣVJ?Ԯ2jTBIODC?G&xϝ<	(|DRq84I3{fTM;jfy<ߖOhQf+.CV-;{ J-Bkа69.@X%:]V ~߅;o~F}KԶ_
+ bfDSvDlFCst+xⲵʁ-^wнֲhtr5/ةcpV3C\-vg65+&$ګ^ 1s9	:%GU?>n=GO#_um9)Нww2>T	iC>}>1h{bءRJlfyC_99g؃7Eyy_dMCL_9ƛ;iofy7W>#gg^py//Sk{Y7]xå^qQ|k>
o}o7ۚ˛Erw\{.=E}M/gw|?̝Ҏ7\;g|qx q[s߹߹yHs~\UEQ^E5jRW֣[Uu
nԬ^#ƿED\tdQgRD"{4W]#{OHBx||PRhQqVnЖyh";<BxchT*xL^ʦ҉uAx
/u;TǠjU>Q3,<gT V`/z͚koUX#a_gc%J6n1mCoSΆ?goR;<W^iϵݧ*nWQ[kѓ,V՛TE2C Uu#b RR}>}
GҔ@W}!HIOѲHm6ĭ.4C4Cv	i2iO<@
##4?#ƯݼHuvU9mDM!6Hw7%=]t'
6H
Rb>;Ļ6{gW|Hz@>3
s];D+}~wl5? 2D
=>DkOufF'cH43A/T>WW|+gnUwX;<UU͑%N`֯`p
Ta:1k({ Ч@!Y~;(%{QС@s@L7v"2.?8-Yv$#Sq`
2U*L&L27DN#SxQOdJ
^MEn!3UEbRSd;/I@אyhRd\2̏&lG#?=e3g a^Wd1}%*8 Yl:аcQd4sRKVd\8y>Gk lőmȶFd8國ʌA/"G"	Dr!cٻ3'r9CKE^ ~ېs :t*3r1\܅KL@~ w=R]^:roβ,ܧ lլzbAS|Z.y\<tF_ oK7_Ȩj[`aFmCbۙ|YeQ{?_@ ǝ\3ER>@{QNxu//;
6mF/ƙKQrك(e8B}&VCY}֡кQhg(tkr;ی¡1QY(b
l"}FIGPd:ȆfȦP4kdOy22E_̌b%A.MQl~(vͷ=<Afop}[Ы/wK=<T~l߫m:Os/7t@C	Q(1UVX_ؙT%tAldُPjdJx%oE}sTf(5WQ.Jp̈RvMBc?W2|U]͜&Rٱ(Ftַ_(Yl.J>ҫ*MBC[#zq6&_>#K*<c#mLYRwq$K|EJyP&ǽ(S,IheY2B+ewlD-:,BW\ΒP㈱(7f|N=rn|1(oL_7_ZdEǆBgQa˯;QgT>3NEfb'POA%Qwg0*|JG15*(x~lo܋J"dl6qa#xu8l.NWt@Pn㕨ܩTQ{nD+Q=iiT<v
U(MvT	hWU*k*A.e32Fl~UoSZ!1VM~T<Ba3ףiP=]k^&T/enF:nCaQ}qZT}~^4
5#6F܌v	jp	5]Q3Y.\qdjH||jX"VQ;uEqU*ڃsBGwCQ٘3)ْ^Ω}QHm 퇺:ģ^}ߨկ)M\z[~\P?S_wԏ/^WG*AZh04X1}3/AÉXh8ma4<zY r6yFCј~Ivq&@Vw"ѸuD4Y
G:'y+4\;Mh4MZX&Wiqi[ibiдߚh:V
4ݽ/MO.mAWЌ>|EfI,4XNfKfWv|n4~7O.)LG?GGwΌ5VE#bnhh~%ZzZ);Ae#I
퉠q}xAC4}TͬtA"h:7u0Oۭͅ."l`3Z-`߀;.]3mv#4Jg@-$o{'AaIbBc,$|e2G=
!s/#dqYa4B@ūy@*ÁhU"hU*>ʽ,V7vFhZ.rb!Zwoy
}v6cߣ}h"hY6m@.ߺMЦ_}"|]MvE۠\Ѷ-hwe|ƧFQh9xq]^~EX/TޏWC/ۣˣgB$6/##ﾉ=F=sgw#K`mtHBƢCEС=1~@IAa1;VPv:^6BI;ntմVhtZ{]ot}:㶼AǍΠi}SGt<5:xNc:m7{ο{?Gctt)^#Ծ]x.ghC2ACɹK|D-# <ϛMmϕ~eDr%ADnKأ+"z6荈шe"VT|cW 27,"jODYd!#c De[QE_7 *"DQ+F#BpDMBtU
A/g8+WAtkYZ>0Z]yF񵛢끚Qz~b<o#/7bR[wӱFVe7"fjrbv?sLfs
Alv"n~	ݬ--ˤATVtx-:w@mtj(ⲄB\uԈk[o⢞E܀~Rq3.q[
E"nW9O7
S-Ȁ<G,#{iнy tgDKQe >K7u:F#>8Ǔƈ.Aٿ#~ӽ ~|:"?́ g_$Λ c;	=Fǔǃz[Z=SZcvD?UbP8z^ ߊ^aWѫ۽WpzH^G6ͳn%AbH5Gbʖ_8aZ?$G$5Iq/ )lQW!Ȗ9H8mzn8 K7&E?蓹N)+5T9	}}>NπCHs\rh$WO	<|x俓!):7}=|
/~7š_J=
)3ww'KϠ[0Xx<:X
_[]({pL遁*5{vj|
S1δQcWRkONA_ap$%oWHGBJC5WyiTCb&bu`K1Pr" !/Đbh=AD%DsV[0GW!PpHZq>Ԛ3S
'Tm\^[ΠrQ8jǱR;.=gP7rʥt:p.Ձ㖆u;ryNNיҙ.ua+z9Ns9VEp["ܷ[p|\$WݏVEEsmѼ+ob./ˋnn\T7nP9=tsܷx>.-KIVRz==y8{Czqzqyo{x`$ۛ{އãև;̕'q<L<~}}~<~'\rr ~  @1gBq8⽃)9o
7<ۗE)ܷ!|P>d(Pw7KuwmA##xH#ܣܙ\Hn(1?s7{9O͵fc\XXcqqmU㹎w<;=M&Na͘ąNq7dSUSSSyprSGӸӸi|t;[0[:*gpE3fsgrE\l|3fsmsssy|<_q6_y~{1s>_\|>w>|.~X
_ô۲[ĕ/R܂<$K%|-㒗e<˸߹ӿs~sqysy]^ඬzWr+yJ޻]M[c+Za_ޱK^çXsyz(fCd#oB7ܣ\fޱ[wl|issv;<.;;ܝ|..`cͶå:pQ{{y8{yq|~p/ރ|A> wq>!ܴ<؇-\a#\nQtp<ƽ<U[8v8w|;sK>ɕ-i.4v?-=fu}5:cu~/y<|]|^^^^/r.].q嗸|/s/@\RpW|U*w_Ѹƥ\n5mu7i[[cͷmnm\{~wyr)y}<`|>_>__.!CӇ|U/VK*ʣB?UU;޼OUȫHZ^Ez*<tQy.<'s*|u(翞~ۼoR{|p.|s)kU=v9ӷȏm^%Bk3]=]_۞v뻗+{=K;N.#'<ك|r3n%OvS.xbϲ-t.xl/x=*]2࡝u>.x`c|]p߮fW]pϞb ܵ']pǆ]X nYm-Jv[,.iO
du
;]F F]pc.j3rQ .ۭZy\p^`낿v@>\}=$Pqv.8g	rY;]O~v@{u)KNu~.8aGwq;&P@;QhR.8b׶](CmpA{]Ce]ߎs_v^ʻ`E8.cG	Trn,]ve@e촕=YvU]nWm;EMl_.btf$Pv{.h[q P"z.XgwZ;"kvC.Xml/hUvCVM\k/h?m{@3,* ,5Z`=,sqY+?Y"Pb򒵇UbyH#RXnR#[X.Fbr,3AbbI! tFe%:e!Y:e& K>2jOe$'Z,\JOX,!f5y8DHXa>bb?U`fbIň'I$+MyBOnbH
#S,N,-!7bҐNE(/} t iS^1/ɺ$S̓.&
bb %KH9]/[LB0O>b 2;LW;i}#Ւ0[Wi}!<"%bzK O~"|,0T%Ŋs;Bҵ]1L-YeI-18\
G&Dnepr~7
|IN2-T41	
GKqzMVs?>%OR/TchKȪLxnp3"ɂ	G)^*npɺkpMmp=R	o
KXCjw,oNdpdE#xgB7ZBy	k	
"x@,
C{_o7d%+|+yd\ xTGB*@u&Lł	S*hpI\*x
RA	#t;%"o?ϐ4u傧I%uH7'}3<I 2R))*dEjcd7F(YH{\+x	&""Yn<Hj7
 &0Ip?ld͂Gj-tM[er&&!3,7Sp'iq.F-SZkp6RH2Wp+jX!6fR	)n"&D@"!au>.ekAhcΣ2c	#IカA+	_d
)?ɳ>)xZp9+Y?H#]YI#]9e_HgKI%kKN*("7"r5%dŐ>:drU*
dd"}5_H3uAgJ<Gp
5xSpY'IM4xKp6܏ۂ[Io;3I9k?
A??'8v[/8TyLVWp
igbfd:$R=>H'N uT',~7TgBBgJ!5XB6yǐvM*aH9}wGJEVjGBj7Inb03/wC:KV:NURg~t) B^,8,5du"_UG:?
%t =tβ!CY`P	&\SrVq_B0S`/۩AOrA-S	&#e0`<dL#؝vL+G=sۨt:L ނdm$`zAgRrnс3v% W$,KkG0d0+,-k E2$u`F.`&d93FO;ՃGY;fVTY7
f@HL,*`(X^s'td6K-igq`n6d!<	ar]
t
H4_0tjRf
$y׋4XPyn`;b`sR`EnH3EJa`?~IU`qFd97d%{&tG%~#+`)zd#`]ut'b$i\F)g`Yk*'X,iRn`j+
V%UtZL!1R*rګV",*XP`5
2OU]<ӄk:#,j
%TZeHysS 	AtΥ
gtKD7K.U``C⤜u7#+;!Ƃ΄|Y&EI%i
!+
Y6,L@<UsBF?IEJc0HЙf1R0?aA4=v斪%KXGaPBMOg񙬇%tVrOkz"&5͠䚞9	R9Ġ9H;3lz:wdvDZS(٦gV4yYVnzf!uW6%gfRΓwA7=;!,j$H:,(	8={Ҡ$΄J`P"NO_RνO8=ө%t@B	rzf "3(1gzB:Y)9=ίՙĒJ陖Opϊuz!"W,uz&$O	;=5{Ӌ,pwzzΑ6:_I	B4)GOO<ĠDWS2OOB5zd!uߠ;m{o2^DIr)B}$ί `Dy(S$|'˽
S Ռ,$	y2o=JO,A?[Ҡ
麤:S&4{S"&Р%dϠYΘ0(~N*;YG?>ؠ))?Vr?;$zx>%ԏr_b?r-&Td kA?Kd3(~@EO?}R˾+GVVR
JғnPO}CS&T"2(EjA?MRsS l݋(?
%jDA??I52(J:,2FO}{@$ԗ	H)DyxZIw&~K/jKi(@s3ڒ󤺓6чS#%g	uhPO}̖ŉ4sj*?)DV꓄m#vnUd\㤝Yàiٗà(gUYH#(?aR5&UCjgYǠYZ!8EI*AyUjg=<)S;KʕAO,ݿM?R=J0,l#EVNnS$˟y+Wd9#
JRdTIGIJz+y|$[r&@	(?&N:A?&	6(HpJ7U`"D%^OijMO`s~%k%5BINIW5%}ؕ	ܔz%YW2閒S Xd'+?dnS/'Yߤ$rYU&$H;k]+?RR$ڠz	iKOʽVS/"8z!d)?Rk	r?|JA?o֐UɠWYJ;9S#G깤})?B=QKgLO=Ro=JO=И`t%AVp?e$m\;SO#^IJ*ܠz
d??)?dRIdR&VꉤŞ{$H9j:3_			%rz,HO=TmVO=TRzz$Yr6	DO=#RBO=,E0YS%U,F%v~noPO_8F?`sߤ$ԃH9Wꁤ2vgVI$vFc)"_Oݏs͟䟺/)A0%ɤCI6(CYĒd}#%%N"݁`&KOHy2~$ԽȊ"4ɒS$$i͒S ]>,?uju"Yf$Iőՠ:E;?O_PKlUb-  MI  PK    A             3   org/bouncycastle/pqc/crypto/falcon/FalconVrfy.class|\EmzMLI$;@$$ww 5ywo[n׭:uY<9{Y8΂czFwݾu]߻0ѻj}[NwAЫ_-E?
zmo,z719/4|&i1|;ku76Wjl:	ӧ6eҬIcw1y&)dS&O˚BgvƔvjl.&؏SwѨQ_8uń;s)SK/};YWSOSn3\'c6}Kn;m֬7㙳̚5]YiOfy򎳖Z8#ט>cgO3gMm		3mƎ6>}u1zƎY9Ǥw{{ZEi^jKcqN6N)bNŜĜ^T_i奝^N0K	ǜ.'s:h*P^E"2jvy^VeE^Ve8/#xʼ˪VV>jH|f?mSfOuÔIv:9N;p댶<aߧ~оO}ݾ}o%b_))Jޱ}E6g	Qf.:>}(b[L7kθW/oy_}eKG,ebqouJФ9h
ؾd+z`;fʸdrx->cR|x[<"}i%w(7b
e}?d`6HeCp6Ld#Yf_Ĳ1~	l"M&Ofd6ʦ>Məlӵ*hۉ',+52*s>>fXؙ5lpP;P60N2f#sklxP+a1]81N|SF/v2а;o݇];oܰм'gVV~^̤ڹΖ|'|7goN̮meU]
U*%Ι2.!
ufQntֲrHzvхkK襽UKpxXrM$]b.PۼXA.pg49,xi*V78Sfюq=ow"ivAg)]08%:9V^
{Zlm8gFVNV㿡UN	|B-W;.lm릂E:ZQ?z
n}eAװX*VMmJZ2
]a>;5bu쫚ekx͔nw6u>j[^h ן[
-t!Bg\6he6!֍}5j'kK\vѯnGFɆ&j{Ac,7;QR¥\bx6ƚ4-ºlhS4ճenw֕
,~guނ)gŒ_.гZ?eow6\4τcf+=8nq7,pFF}=u>&Yc3X%?dϗܸkl 5gX`ѬK`=HtHk-{HE;sLY^c'Ҩwd:A<gp͉,!Ksq	Z9:"nhZ/F~>c]1><?zˎ@Q2zL_FI?BV!F~Ȝl!o=q@e&tc!	4@!h!u0XȠt,*X!qfjBX("gZ(?Bc,f|B7ZhG~-t&gkR|x7T[AB]
+Z[G5(}fa A,4!hga)[X}2baYT0ˡ6#tVDGJ(\ia8R_ZF&2UWEܡiaMBjUk|uu;zh{oa,l6B-cac8M¦f\jasPHw-гZ.[k1hֈYuKn3¶lsvZƣZ[-L@ӝ.&{;g{;waa2XMٮR65
w:[:ߴ;\$0=,ĦX1@-=Ff5~(RG|}shXAZ3G/A<E<5PO<MG
hߐx$z/"=ģQx6"3\G<]3'D_ '#OAshN<
MOGb"83Ѫ/ĳxEF<=3
Bډ!xq.x1V&^+݇xZ#Cs9:+'^WFl58x-*C>!ޖx#oBq3z&ނ4V!%v"ށ(hL-;Fd{ѹ>i@B RCM| Mj`N&>j'I|xӈB|mRgQ2CO|}__@Lj"J_2WP_Emא^G!L4j^o")-5Q߅#s	}L RQw,ctmF)r?CK9b@c{◨%~5Y7Hhov}A?uWğ
m!-u=8hHBo{89m~AO
D>5h/}]?7`A	
mh(cHpn&tLL!őzvn73HmY&POlFQ9$"KL6+GlAﶢ
mGu|؉$bb7J{IAPb/┧ۇ.-)ɩf=;(k
&AmR:mEr?t06!.g>WD7ĕލ8	7#]K\U~*?WC
kk"*yڃ6bAn]UYr^6/O=o7 Ã1|tK&#n^`$nWQHSo-]ѫDĭ88[#:
rÀ=үq6G;q'JNDrI薾ЫĝE?ۉȉ wp(Mà=I
e	ww@z;vD;ݮ;mga]{Kz }ѱ.q?Qb8v A< _
`C<Ī>P3!ޣGq.H$ǣ0Hcm~O<]<N@z 
$6kSsOE=
atoֆ;_"x~|Ĥ.;Èյ_ H^xRy#^fJĥGW!(y5L#k߁x-2zu1nףH]Q@	YhoAH2޸|vJo@Jˊx7Ă{C{??SyZC`>ø>vGa-qI/@Cz$SFCx-Š.C|}%D(fq^E#k(>l*&2-ķ^6ҷw<ޅ(=t(n(K9GH>>9	#~
?CE=$/<mg~"~.wH*~Ax+?OJ~FZra_#{
@?#=_7W GmAsL?yHH4H1y>2y^E+^K/ǋ M9x63-l]yq41>{	$^
$Z="J9z)2(R10.{9z6OxyԹo^C=JdUPZMZ]xmx؎"Չ0K^7[cǆb/*ׇ6WCWyȕ0{
$!X̛gA;g?7}?!/:oyDgz+̸歈A+J輘8]oi$ݐ2LϼUҶ/q	D[l5A\MZhe㭍[5C޺hx&hf86@fmvF0,z	j4oS5lAJeVK(x4kot깣xgB2Qcm<ݽ-Vz!m>s,*t78$(J
w@QN aφ;n	mcHK'' ۳b
 흊7
-{zRʵ"R3slZқa6x{U'Rټ$kpo|}2?49vxZ2Aֳ?txG.m:
h4clM<Yq(ȨGqze'ŀw2ꓭ!nש3Ilh@	,4E<e&/޹B<i|tI/@w!͛"w- +&cehf桡\äŻ1}3īPN99kӻ:x=r7`(꾛нft(nimJl߻}rw!3nAs/}(,EkD۾ć?Gc=d=<slqH-mZ<2k$)%>峞A9,2`
#W	ݗ*
~*<}U|hND-4-m{aM]YzyԳ?K"bԴ?BX1'H:"}C9/M
56zFFeC|η}Bhh^? #_#O˷E$oɩuAi_(T
O+-@AAxh\AK7C		 @`H1Ԙ҇(30ˍ
6&0U7qxbH3Mpڌ
衖(F kS]L9z9ӌ*Cɣ))hQ_ A0-h71635mkvߦ=LqL'bZ_;d5=H1Ԙ^Lb4Jc+:ӏ.7OP |M=o"RΈK0#2ˠ,4nk#?Y}
VWBFn#F D#7#ax`VAdVE?3G:X(0V5QѸk!sqm:H9ucFil/yC #LlV-tFfͦH
6Cʟfj@nFckD~w'u<2۠nlj;I(N:5cC?LD݃#R˝vFJ>![JbfWLAV4z4t`LGX0S;fRf&o hfA81z_{c'Ef}`%lC쏆V2Т ,h3 f0%ѯHHB~w4<2 8412#mN@DT$˔dǜ ݶ9
iH3ѣy/;8Yht2bPzpѧu]~!zfbLk.FȌ\vy(31##9_2ݽt*ҷѢEk1ȠoCX
h\nDNzfX[cr`lg%nnC܎D.D/F]]$̽1Cr%E "қ:ByG/(F<Im=x2jE9'GIy%VE/
:?6kݯ!u+qtˎmDyIV>m%wͻ,ރTռ|ՇH*>BUc$?AEyڵJ/w<4_!|Ao|{t`1? -)f'F7K u?̝ɻB<#ź,@79kOKv@iݛvovϼ =:A{av/MK{'ڽIn
E/^F{dvOn'=hkw
vϬ%ڽ>\{fsv?E{?vۉ;*9-Żǿ޼xĻc=m3Ļ׌xxMɻ''vo[N{}vDGvoQ{1]?vόh'EW68V{LwO`d\{(ֽV
źĺGZC{uX#b;yXPXĺ-=V^I{-źޛXV=bGu],=^&mrHEGEw#ҽ)}0/=X^?^{g@{I{aot|%=tH,c"KۊtUDwEgZ{."~PMCD/ҽ;-DW^E{h-$ݓsĹG's/ҩ8%ц^>`CM2B9ʔx8B(9~qGa#ѨЧ8Ǡ9< 9}<pN@3NDIhgflJ?)qaf蜎Nq6#9
Lو?<EJ8Pv.Ġ!\X;LOʝgΥb\&kr<.q.GIϽqqW"#*t1r:W_9עSuwףn@\s#!jfunAs+tm(u4މv^]1;w׹8]|X8Y bDU<nfÀ{	N<1"ȫ'PepDBh⡝19Ϣu>8g꼀Exjx	}2Zȥ9 VW,gf <35-f꼃^lk\GH`@![xk?F^dɩ8no|vl|6ٗV_!'~|-҃P:GTD^?!gb+CV:}s@O!,
:b棏 d.|<u=$QiQ>D&5( EFFPEXk-y	F	 l$U
bL-dÐA37V139d7ILl-b@9Q\BYߗQYAۂVԴ&%'n;Qevu#,f&f2nbjzzCI!]sq;;:m ,ff~)ҀLR,še?;,)94IW@]+"AwWB]pxċD*h*y䮆N	j]ƚFP:HP]z/_y=gynhFWIb>%)fh9h4acKܭొpǠª~JEķ§m`/;	s-xɼ>L@Ɵ~Я>,^VmNF1U񪻢Dw]vLC1̝ҶQ9Q2YgS{%{#(ݲ}qà9Gj t8 =tJ".[?mZ(<-R#BgxI-AX$D/:]{<Z6' 1N睌,C{
ǩ{Z1(zD/|Yy6"ڮsbQ<ѫ#,5 h/Yq.<ň1t6klg{j_h+
_nU(Vu",V:t%Z
RWMfŶނƿ)u܆p;:ŮHlwK,]܍{|/Z
tQI 6'>X3aTeU *Q1$U=I$*-~F]8 j}q!nQ㙑b_Dėg&⾌^A^EL,k`t_GUVy侅mn/_.d!-uy9=H(1c4Km?AXO&u|X
_]
Av_#$Y"~ npGI,3"G_Ь_*'|jf
F~9?U_HIEd{Qw/y0i#`?y,fF~1aPͽ"bȰċ!?G%ք"KK juR6hge{YMTw	ˣY`)1'E4S4v^K-hъ6Dڢ\{zhtfuwhzxUDjxh0ɫ!&a1Bug,e![
ci%e{6kC1@x!&v|y4k+(fE,pd@/7LԽ
4oUT<䭆(rouk
tQ
5{k"xmx!AmxPPS(! 5!
4o#Ѽ盠*yoj--7 |h-Ql4	1HY
h޶Kig{?cCmxĘֻ'".mRj6?rڇѢOFHM
̦$oWOϙ]ojbY`x,@0x'^|6´oo-'T<iAZ;[k]/٘} @@Ӷ_{-} ޑCi6[$x#ɘG#*or"^z</O@;UBtNAQ*bOCF?=,ۼ3PV,t<9w>޹HJC9w>ˊ/DFϻF;IiŨJ[/"&2􋽞#)_<T
WYtUk6˪Ak6^~w=wayכPPkwm𗗸ƷU,#Ż%iÝH.q7Z/^pJ~ yC{=ڷQ*Qԙ{!R{zdO"$oj*y93b@;ϡ%<BL/>Edd5/,eDbZ^E5"otۿƳe[蔕ɖ6xa=tk>#}vw#u?FJ	~[:?CX9
~Uuu|>W0˯U77IERzȨ+G~?g4++>?)}!o$tz+y.@("X\tP~,tֺD?R"SOL~	SL="4"(jbDkIʦ	)N$mKe?ˤPl~ɠMmY,/&V.2Z;W/!渦91'mղQռ:aP4X
w /ӋA6ɩ.~I}>"4Pcd.~u)t=IjˢƮ3iMgXRr6 OkV@Cl[zG?MHԘ
Q;
rVE
VCYb@¬`-ںgAX6Y֒+"fCdyj6BH,Yjb6t(QHk>[`AŌFX-QWwVImyxcFEۢ!mHQ qff<ڄPVOH䞄]!і=_;fS
C_b hlNCH17!(em`ɛ(~Aml,' B@b!~Ȉ$e[`P\IQa@*~u2CgmEh5zZ<G"ifw4\)1>!Qǡt2'/sRr2QNAq*zL*%;
<əh91-ljUv\syȲ76KI/@;3s!Rr9!Vz|.\
ːW<tHnY^+
"9F\LZuz4
s#oF^, "-:1/z;zxhd@RϽm2Ю֝+|U,-E߇~TY?А6=h+vCa:\T<ZgCF~'ЩH$Y<FBϠ&}x]s6)!>vn((:#|9۫hRkHټAYgk@ZD׼mdi;JߵF~ʼ
5""9~W.cԥ %WD[KOVZx`Ā+de_ÕUcFdG;AhӾز_dOҮQfUN]Z+|ߐU i(OrѮFȳ4V} PKQ0_@,  J  PK    A             3   org/bouncycastle/pqc/crypto/falcon/SamplerCtx.classPN@}Hm
wi셛F/FHH8eMI[j<M >8$ff^d_ }tՋ	~Z)#1-Be	W&̼kRriPdoJ|Y#^ee=?X4K|`?5#8JKk5o|Árq\4=xhj3qδOpEJB.
lp4h?qUPK\~Q   P  PK    A             1   org/bouncycastle/pqc/crypto/falcon/SamplerZ.classmlSewawtAڍ;&Bu/-8uk֭BI&`b "
AIL_ML4H̏6ss=Ϲ~~k Z`o2T6 1e>°n2C%p$C!R_`<qvs0>3?wSyVp6޾'ûo2}[1||zSrY:*%WE3Li'KBձ$őxj8/-4
#<h&o&̡p.OǇRɒMtxa,<Lrpd89rX*d!uPw>ɧ^CvKؼsu%@0#t<*V	6j%[fÉp&DnF8}S%#*%qߕkw*8uOE&*H{l ؖ̡IEe-4f`ZV3Yo@
l~Ppz4tc>AutapH@/tga^p)O{s)͎JgBB,$W{ 'lo/p6x| 9 
դMc=Ƹ79+Sxu4r%shTJTj;:w]|UD77 .!1J{c6,ΉGz!.uD)E\ΗW+8#V8qc
lK>t43#(	=s$Mng$-n*G5~cm
IQ;j;!d5MX?e֘k'h9!['I]!Xif{s%[B6dW,MX	:T"4]*%]`\7鐯˶g9`G6ݮZ[kfdʌXx`irJlW9'hsʴguYČl_R(dt7R4̢D$eG"v/St!oO؊RP@۳ZȶӶb&OK,2u~ڪ>U4g^3ղ²ܴGhFtu͢<4K/],_8z8Ut3Fc}PK&7]  ^  PK
      A             "   org/bouncycastle/pqc/crypto/frodo/PK    A             3   org/bouncycastle/pqc/crypto/frodo/FrodoEngine.classWkt\U79w$LNJ[m'
AKn!X,if:		$RTQPDi!MX!".?Z1}34"˵ls<>3/I 8~T*
+Vnt@mFb[ɨHLXyFWf	OJ=L)a/˓h/&<F5 D\>Ka!z#jjU	
SXB^gS.#fs
41yjt451X	T9SOh#W]*D,2`Y7dFsC8Hg	6\!GS൩;3tTy47@LySn$όvh̄gmlG>7X5QDTU[uR=y=dq\pŎDuDV`02cDO.7]FsWfx;NJve&FRQ3o7CRھc)!	:p mxL3xԬҜiKrڒo
-I_@SU[mߒ،[RS8/͍T-]|\g6ҹTGqaqStMהF*T4R,j;RpV@/FggqtgώXapb0UB=#b'C
t:rch.l!3W@K2h\Đ
+=Qnan25BLc !O>,&R/na>Vc#i5h b	٫bB̄&mB	!M	&|O*VNo_C
3n-r_|Ŷv&"#bׅpC!rYK"눬'r!
D6f"[\BcD>M$
X;F Ձ9p%\
ׂ@,>Vl> A8B|88,>Er8p
:
6.#807'2Ad7!Y"Dn&-D)"</|ȗ|ņ,|͆nup
N |wC^"#r}D|߆|Æ"|6~"BJN"\$*VhSP*
T~DHjG>[8,Ӹ
:A7( yEu ;P8O:Ow$CKY$_#9^+I%?Ouo|KA%_/%//V=+Ԛ+p谀)gW-|odAYx:9x0Eg`6Ɒſx8<<G$?Qɟ<lg(?$@#I!ģY6Cpڂa8--3%8fx3p"΍xX|a\|TpQg29N]p'GI`Z`ŴSr&uG5dQ>>vXo@{BS7kaЯ|si٧}̈Mùk2iӰVf&]MOLt)\1;4a6X) :FeUFcVS]KNCkLfD,ӓ_t<ovbv!EܻY-Qf[Ku,Tf63aUaX ;^ANfnp -,S6OL>̭ZQ0ޅ8
ƹ_慊.C݃@> C<0uk1tBYfIwUUJ2"09ZN":x`͑#q?ur`x("]xRA#҃p;3Dak(y~4p)@z7'niYH'8
uOkbau15($~r9<6ȠuV
e0؄!DAyNA\(yo؋iъ)sh2N>mi\;'RqxO#QMO@mf8Xh:M'OR5Oq <F8gqM=Ok
 CFm9Gu R W;d3G_
8a
,ĹkdʐQxHy/M0x8B];|~LiԮU,z
ZVGnkUu#,BΦa
wXX-${/U1A&YsLEp/L =Q^	0*
|ӣxNAg>p!x&nr%jp% %^@<טu>h"vcֽWo(p/1L%fQ*1P\Pdvz}C0L_/ژCFo"{<I ژL[;mY
&)G»h5v1(QC^~2])y#6U%w1{p-Eo3l"tq4@*Ӱ#fm2:t
,ƞzIWjGYa!0FjP{W}1P! y&W]iBPF;pX Qw8"
`\&L8;"aZsAu9~oGjz=iY(
[@jEKhw M"?r礞ǳn#k!f!(P5iٚI N F$kZxG4B&KT[F%C޳}u@1~Ź99m=i;@yE-u;ҡ:5H}\zV5PBS2-N5$?=N	#!@|ru/arbo"&4l4L/!U\
Y!eMaJŐI<Xm"X
_1Mߟp|۵^Ip6{()χ *`#Jծ܇F,vyL7O	Lxe:boo7~"VMev-Ywnh0{)8 ΂O@vgxSjk؇բV^0zhx r]DۇůGwqDN3Ņo& PHTn**k]gQ[rLɮugS8|zQQEZ+{ԬDXy$BCXS!?`ylSB,LE1G^O"U@ǣm 8JDUӪDiͫm+7Im6PٮЎRëu!@aBzܚEC'1.DܮՅX$Z]`q_Ko971/gRؙ\ߒy?%|IMdf~M<X_,Xو%}Z詻PPK-
    PK    A             9   org/bouncycastle/pqc/crypto/frodo/FrodoKEMExtractor.classTOPuue(~ٵ2S Ɍ/<]Ga&2cQs"[𡘛{nܛ:dʋ(Q0W6()P"垺+Q½qlGp`Ŋk܏wMϱ{^[ltTH(e.<uۂ~,aHtZ&vS0mV:mP3}mmGjA<ءr	=[vf-gOz#osvrK=-6YJ{l*.RQT1⒊
S]FZƈ=kzf;oFjC7.PpN22LYb`pw{20CU2TdjT4\
70>Q\A #i9ܦVC<4+j<:D^Lb|+!&eYK37@{~]fUSDiFOL2 ?EPKc^,    PK    A             9   org/bouncycastle/pqc/crypto/frodo/FrodoKEMGenerator.classO@ǿ76jQ@@(BY'BFL jј0]wέ׫qUH_GXq6s__XÈgq3])2hfX)
s]:%/yQdM7)'{ΐWw=)~l%!tmeQ'[j^zTmpG~^K9+[U?c-G[*sGpa_0PO~ͷ+.ov䇤Xk6oGmZ=%rPz4b`h8ጆ	
4eXAȝHb{5U`X4OWf{*
u_9y;@UZvşBiwEނi,R&#*EcX4ĥ$㊎,8\SԑBZ+1D7ef0KF9FqȮR6Kyr&ُPi{5%%'s\ocq7'rx*A'd;bE*cCwIPK5;P  O  PK    A             D   org/bouncycastle/pqc/crypto/frodo/FrodoKeyGenerationParameters.classMK@GbkՓޚ(A=UzKff+_UP )Q,;sW 4KЙFNٲ)BҳLJ2en836Ҧ:N~N8_^^5aOᗣO
oIm).#%z?Ƅ^zze4Z BA:ƱN;s{"Ԫ)j.]mnuw0u|FX2\wA|PKＥ     PK    A             =   org/bouncycastle/pqc/crypto/frodo/FrodoKeyPairGenerator.classUkSa~uKWnV
fLe4*Яʙt>λ,H%ay<aW ٸ;zfgj~ob)4!ZvY-h'
ћLqЊGZZZFH~PY?Rh;Jj)*ƶ$%V$U$@v4w]-i-sP$4Y)OI*I=A팜1[iHFNnH%%3K3j~kNfep6TCK{SIZ2+<:y\qG<nɡ+joQZS-=va8IkEbZ1w:@2gLU%U%?-YͤTCs~)%2w]\?"0"xhf AD#("h,</MG0x,6
ƬpO1Ѓi"&bf0`J3$tHZ?ZkʶǺK}P<Cv;
X8@̹%E6,'c)yIhky*o=g%Q#TRۈq@X=G
x{)`񓝊CG~(sT.E:~PK*y  f  PK    A             :   org/bouncycastle/pqc/crypto/frodo/FrodoKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF}0iE)n Y:6,>D0f
MkDO3)@v``3,&0H
 y@63֒o#X3T fҬZ[6 PKo     PK    A             R   org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator$Aes128MatrixGenerator.classQNQ]iZG-AAmeb%hL(A}atB)3C"/>P~AOƤ33k9k~8&tfAIt\(6rATUrI"1A/)M[ @XoΊ-,ɚE5gƫ藪~@*`\7={˶BvU|Pi^uE.[s='4fJ3
0tn֛|l-Dbr]߰to>ؼss+qpdte\g˸ȭΠv°	A"E`9	+W98󞟵HǙ%qC&MMH:.Aq\GnЋ;@=-܍хA iBO/z$M׬0tBRD	YEkЬ^,V8C%!}\:s/b1`H|գ\"q{yI%Y!hj^5TѰ<Mm;9RtQ/fh	mljC[IɊU0BZVYm~V~c2<"A=8G/Gv1Iv>v1M*BvPKYm    PK    A             T   org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator$Shake128MatrixGenerator.classS]OQ=e"V,PDE헬 VDC"j
j viݲb /jb*m /Ǚ33gfIbP2.-O6˳!Ō!sD&Uw,
fʳH'$q]aSf:K"uJpj%Cmm;UK8%ר^@A׫SiVO5?sreV_7}80k[u71<Q.6#
4
,["*M/GPrͅFըqts8q#q!^;ǫf%]G^^D5KIp!
qz֐נB#(a4!bƥrqEB)d$d˚s&Vths}g?v=F@;_XMzG\
]\qJGPI~F^R<fV
p.7?]<4xJC{OrL* G
%Ur+x*(	eTՄR*7	EY.(;)"3;wF)FZR@)v(5"1eԻ@#+y_PKr    PK    A             <   org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator.classN1υQD.\ Fcc$IYaU:c &.| xg\*M	.!lrMK<]z].Nz#od_	Ց|b,u #фco?eL}ᇳIlChF\&RZ26!z*:8<]}O? Mm66J6Vs$bXZ"X'<ꘁ"8XF]=F2<!ᤞRU~f۝c;G-[@>=$l8ZalU~ PK=R""    PK    A             7   org/bouncycastle/pqc/crypto/frodo/FrodoParameters.classUMoU=qI| %u-	!MM>͐2'S."HJHH, ~ nX K6oM]"1ϙܙoú؄CAPA.
z$B}qI	PVFRl>kJ8'OE
		ͩMXəсXLPg$UnΚ57ُL26lNZWtym$A)HRЈj(hӚnhڙ$Lm
ht0Kl!tqψ|&rieLYԐ<EES)dHq*DٌYJ)q!F}Tbvz~(eNNVecf7b3o
P0wf)z\!Fh<'d&#$OFXFe{	'9hVSA+DUGC}RN-rΩY*vPяVh~0Ambȏc8Gddbfah00҈A08$4qf}89"!K>`G/ %=gm'iZxB9T=s^}'Str#h^>"8-p=w86
Vnua4;ͣYdjx?_R
\&T5U w7(oc2;1}	NFM'}7Nx릯T/M_
ү6ۨ@oRwkSIݫKVOꊶERWQ+B5i]"V+IIx{{?`g){QxM'w{fk,zf'q?[Oۍ+h
jgDt
0v0S8 m#
14Vʚ뉪zpMH%T]]O
UT+UM!ui1Uxϸz\Rw]i*]X
`^qPKuU-  	  PK    A             A   org/bouncycastle/pqc/crypto/frodo/FrodoPrivateKeyParameters.classQJ@mҦ'^UKA"Xыzf-ۭRP>%~
,vwfw}x}&4]J0~8C`eT2CiNS"1ԉt|y.sC~ƩE82٭BQZHb'q/4R:sھ~&NaNn6s9:9pyCgQ*ϰ\{XK5ԱêEP'T*vڣ/=!Ca?A@Dm1UllgHa*1
PKɔP    PK    A             @   org/bouncycastle/pqc/crypto/frodo/FrodoPublicKeyParameters.classQMK@m}F!"XыzZ1!J/<Qkl̾7Nf(98	 9e(L)BI{(H0p"q?ĕLZJG"(	O4Nw@y_w2zp4-Omc'AiT3й72O:tx]9,0,fnZUZ9i39	og(Ohaԥ\Q*L볲괼Mؠ{Xs3PKpb'    PK
      A                 org/bouncycastle/pqc/crypto/hqc/PK    A             :   org/bouncycastle/pqc/crypto/hqc/FastFourierTransform.classUoUzmo?6m)mv-H!UVv'ΦJ@Bʁ+
*q"'""q7 M?[$mD켙yf{{<' 8o+T减
+h'''iN#KH0Qh+T*RёZxY G,+
ˍ:446X
K8iFe<RԖ{8XQikFF +aenáRVm5KM4Z
i6MjsY.)
K3K,)ӷpjte16TǙ3tciRƀrse!l";-:tT//K!Zkᄍ|r2$
5`9^6`ny^EGmCR%"dA
0l胸
{HYp

G`I"&rƂ-q"'W<hX*0VW1tH??
"'9 έ
^ON+#98&3`}IrsG!RKD[gK))l6u!Vـf!ۀj)ҮA)4IlrlWSݭ߅%,dcϑ"!3ZFr	 
xUE'}ZEywyZX<$"[iGqgm
xESXM8eNʊjENqz)f2rq5酋C^qtxUբz9]W
(Φ
9LQ"t?M[]B<-]S~GYw
1}ϱ1xNJ
1Cu,@>I<Y%VJ)Gu<ZdW>jE~]T>-mIg+<2(N$k/Ȳ2O]
jcKz\pNFl[E}[Sg@Q(x_aᏇp󀍧=<C @ZNözШk\eS]ΔmԒ4!\Nf7୶ȵ
S5"^
<5h=)F\C[g>&&qjo_J"-̞"܉(lНBwWb[0^/ڤCcIQu*ɸAc0,$EcǑ%u$㈒Y=ؑ_dx&)xMq5Ŕ|	5_.|ܧT;Nr/.4,Ͼ,Ƞ\B%d
$ma6Qg9h՗i	ef|I"Ė,ExKb<SD$׹A0MJ'1uVEv"_5nzŀL.Ng2}TP}"}6*8W/J^n^/ق˭޾1$`3&_z:R<[p*={Eո[p&zط7[=z%#U'O3pl>T*ȵWdRdeǀd9hڮj
8ζ PK(ub    PK    A             =   org/bouncycastle/pqc/crypto/hqc/GF2PolynomialCalculator.classuTSU&H	t̠RD'T,>H$P,!:oxEfd8$bkds{׏?4rCdX\FtdegƄo˧W@
A+AX];Fc]sT;kTG$Ch"U^w[ y4]w׵=wZiQ[w;5aʯ߱VUqw^bWo޻Km޼Ud6='HjR#;u|$."+so*+H*H)H+O/3 4Q0&$Y6A@/KB,+.U
/;"%!,
x;WBnent׼Q !%%+%8"7HօcYcZ?
^4U~>-KVҨ4&	$N0ar	tĒu E/|+^Y}Iɉ(W:n\TѹnvuF~s7xIcHXv.M;c,㬝`m~k,׫N\ryʈ8IYW
ܤ 1isGըTJ=l$Qq(hC҃z)ў%)d1~`8tFG
93G?6NiKr\1o1`c\&3G
תLcpd$\F:PIJIј+;V.~Ur\
INǤb",]!SŃ>$yޭ(L	0۟ @i}GLo ? Z.	\_Db >*(?&?dz$?? eϰu7ʧgG8e?L;K_eʤ?fŝ`08:h^YڤGͫ_?AveW-)_u	KUNb1
PK_@K  S  PK    A             2   org/bouncycastle/pqc/crypto/hqc/GFCalculator.classw|eO!!& RA%BHbKU6v"6@l(R7]]QYnE|-!3ɽs<yr&"M$ujAmIBAΤX8mT?N'ť+
DM*+-;0?!'&`W򢬱eJUJ
&^_>mb,l7$RI^<NZTceK+J:u;8]i},$JD()(R$ q)RCHCJu%1$IdlKR oYA4ny"I<x@0[[vd.H|xh<.=F33ޙ%}dw@dtFvFGQQdghi;#*ӒzZx+*O=꩏mK*sVMMHɭI99I$'W9D@6DVמd!k|4H4mT i&=DfuMLv MTC+3CSZP;"dc-@
y^lf\[ [`dK@+lmLښ SL~ڛt0Y di3dGdr;'Jdd=
U[#PY&z%:#{
dzkg&st4\Mykp|f!U&Zdl2iBF^S9&&|\bpz`G7ydp@09	|	4eBG!4Y\"G|1
<վ|[5dZG\5Ś]d.`FTe&o MfjcdAVȘ/$d9T템M~ 3
\o2ADV&47d
yN n1d	yM!Myx:y!Զ]:)r!%?M#<u1O#ăZN<d|= %E>j\c&'lI$2\b
3&+ȥzOs&1|M.3\g+t|A;t,er
NV"i)r2Q/'6z.|Q/igZ@l
WܦvM%^Lbv'vDU/L>%_"K7q]z124=& ?$wʒz	N6#>#?ZR_@k,:r&^&L~&79B39AXZ8uڎ8#ø8jr<?L?n#WF N~"Ոz0oBUzW=1LF
RIKP#8#oFkJ
C&T:Ըt/H0V%x HC>א6Jwud)kLrү}6Ꭶ~UaA
y-xe[$5HpNO+ZhEA	l$Hevb:ʤA=|`A)BQ6G}8'\Ղ7Sr/oo=Gq?AAnv9*=#
"<=ʵC
<HMdc0g*>gW+yÃFqqؠqJj
l,x<XfZ042ޥN AO5&ueݢ9Jt
'4->) 7>tF3Лۍѣap$?`ŭ:%XDf3Êk4=u饃O)h~뵈Bet		ЃFgrt=du
&/Yh$l=.AW^ȰAWcנO%ޑ]gɾ4ҳ. }/|5Ȇ+@iAX;݂0Db-K -_!ƍl
g؞x
5/G%akwlg#4~dęaˈ7
+LSwBy7À|#L2mºדF53vDp$E/sbw7
Q.8H2`~~ۡx&t0CQ8#F7uW[gEƈ_c,Dr>ߩ\^HAeVPKŝ)	  @  PK    A             /   org/bouncycastle/pqc/crypto/hqc/HQCEngine.classW	xV{ym+!7W>Jr4H0L7%#\-=h-M#mIK)RIp(=hhyRl>,3ｙٹ{^{ r*ں	ׅ#_m
HK6$T6eE5;*m%ua8&&3}
e3[-
3&5;KCGPfCt.xHM3&#ns(ua+8%cGXL'pHs#\y[6q˫%~{h!l,ɜ7n߰e-l)\Txښ	4f́xg8l{[I{ٻ,33kmY0YL6v,mZ-W)-a͞^$Ў/al%2ki&c]d:)\>#n*:ˬϤ;.ƱLI
׉vZ鋭V3j8mm6ӉLw'ŧlk&E6;-F5M,ݥ<}۵62hP1qw\i^m6tgӦWZSс^`}٤=%H%m;eI3˄hg9J6[w_̚FceV?ldM;2}@Exv4%V]jE`I=Wŋ
]Ȯ]3t'j3KQ29{#unIw&֩\zfJlK,4|3L*ӝI ]Nk!'k7b'SϪp5".NL9^m5Xrg`JN,2{4=kQ%3XWʤ(ד}u5a]=)kMJ\j%;llOЋXvTǲvڅrP,(ceV|l,g%c81f?"4(B.a1UKExDL6.],^s)gs}ot׹]^N-uc_0oوk!
0=떆O1*̃U8<Z:Be+	6\B
N.v8GШQa.p*Q|pA\UX>Dv 0@
QU*hU҂_0
:Z8M0KMfN'sr@w@A5r$vQaMޫBWާBޯ2>H!|F|&|"4|*>@?\Mݰ_'	~	DpA;? !	~BS)p-$P C!8@
	 {a_%n+p|k&0W0Njv(_T>Gm<l7=1sGʂtrK̤^Cn&\zK;]ҕ.]VF@=RS@7׺u.\zynnrWQH+lj8: " 3aCr9xФ5r𘡫9x|9x<hhJ7<nT9xx3S98bTUw1>C{b-*75یH`vy~Y&sV9w0vN>2plRѥRΏóahyY=BI_<uifx@u~WߡAɗ
]ezbfB}hEqYgzZPWG]꒷	Aԛ$t c\GN[8.8.H-`/q%)!OC"4s"1RFGAߛS
ʈ
<)DdCy3^Sw.=|ǬH6WǐT'GXcKʩ"*,e2yj?uX|^,VAWu1=Rc;|+{ *Xʘ,eL<LNŶ1U>,^F_~B w3|xbjb*Is	j]UezgJnQZ*Jz2AP)9jeOr+R="Sf2lz"FdZ2mK7,{ g-ҋn(v&wyu@݀oD9Js
ld>;3ȩ֚GYN{r<;?0z&5׮
G&Ox
h🵇d\[xpm=<PEt(j|HDM4AAEs7$PFn?m(:4|[@?y;|HdoHM3ҨI@C~Gl4fP8"ri}G MIbQ`p.+Pq;BnwˋP)9JF	cpkB&4=(
ӊ!|	'`H 4zrc"QKn12ދG[$Ȩ(
KNs&i	ny{Tc/G57yX.*^@W#LtBHWUsm<j7o8Ʃ/u__Z4}-"]LU[5x&H9IXM!ei&\hS1Hgao} <'.ob<xehDoZJ_?oP ×J,Vj%4=C}+|G[a-mo6F
 ,!qDB4:jgcRsYmqxCTa
7PAZ	$sX
*ج 1E_؍'dPKa    PK    A             5   org/bouncycastle/pqc/crypto/hqc/HQCKEMExtractor.classT]OA=KK]]ѢUEҖЦ
PT vlnnO>h"c|Gl[,e'{ܙsd?c]/+ 4]$P*0D7NpV\ЭF{sͬ20]k4	0j42>:;;L#`ʜIILF݉p9]μɿ~Q ɧg65m6Ѩ1[rjjܩL'w쪺oLkMTn7KgUXT.vF5OP=p7[(X{p)Aa*([QWm[k7E\1&⚈"""n) VdO#Q*;"ioSkd&q\2bFE2. bHed1,#ܓ`V(!L CB8KD鼄Id%L!Ci`.~0 [F&Ӹ5ʦ\c)8b<,o=z(z@ܺ%4L#ŋt9겟d"Oǟ{dfhHH({\	PK5%@I    PK    A             5   org/bouncycastle/pqc/crypto/hqc/HQCKEMGenerator.classTkOA=[J]ADtk[kyjh4
,Xu5Y&
D?xgJ
mgΝ{<L L#/K|!!ŷrVP(#99`Ewd޲-oAӱM6}AT_?7ENjM@%E>託JKMkFHS5*.SeK觰].^[^ѹIoxkeZMOniԼ2Mׯz޾"7]=ilq%Oo̖sҳ־նѓ8ڋ1ۉUviƺg_Zq=,.Te	C''뺆Oj.y.1ɻEu|1QtmvJF°vZ^\x2I-ǥ$ϾvҔWgk~ǐTM?Qp7@RpV9B
Х DQ Ba	Ce\ôpGQ0+c2#%`މEgSfFp~*zRBn>hr0G/M;1:qGXXkFn4HeDI[a5G~}ئ9BN">X~PKi.}  	  PK    A             @   org/bouncycastle/pqc/crypto/hqc/HQCKeyGenerationParameters.classMK@GbkGOzkxA"~@v(qQ,;;y}{~Lȝ(؉0TZE<bR%&N I]<8
{YY>>|}//^[%s3BT:6a4Esi;]4
B V>6<t3&s[j9ZE
~G@VЌUcPKi7     PK    A             9   org/bouncycastle/pqc/crypto/hqc/HQCKeyPairGenerator.classTkOA=[n.B}Wiu"(UQaL--I&&?w*m
mr޹{frw~^JD4iΊȬ\Y$s}9%D\)3U[Om99W>mtMwC]ӭl^
v2^vfjɱru4fimE6Ьҁaщ[L(9%`vYΠ0avF͡1*㢌122.ɸ,㊌2I5ǧ
7!%	˹_.Ñӑ|&Vʜq\/b,qZ~Gmfu/IHg'*	l6za霴覊븣U PKwUqO*٘0q?&)bA-*c!<Q(TpфS0yS+ko3rT:OZu	ai](@D'VG+OtY`Oװ|T'iCM~}b
+5dr]]7X=$(N𴁩vjiwDٴVԱm{g4 PKo{r  r  PK    A             6   org/bouncycastle/pqc/crypto/hqc/HQCKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF}0@G3Ul#XX}0ߚPCd=Q$a`ca`b`d`b`gs~J*"PB U@PsI OfZt2md` k`f*Ҍ@Uk4 PK0:Xd     PK    A             3   org/bouncycastle/pqc/crypto/hqc/HQCParameters.class_LUϏ~v
e؟RVJAΙnX:׭-3&3>8/'L3u
65>Q}Q1&:ϹW`B"M{9{? 샄jv:@k7Iғl5 GLi
[q(=Tȱ{ǧSGShԯON
NLOhlhPCPT4΃ԃT&(\Ϧ2CLA/%OM'bg:	/?[t>S\iUsB6gd"0-]LÑrH~"H&e9dEAϧ.B)k69IҠ
PӒ<lh&`өBq>p1J/sd*OuL?vhpyjW?pQћtإnt+b>kk9Ruh#+{myKԼy`;yeKKe'=
4^lcia7K5K K/KA~C,f92 !Cnӫ2;ǿU(B(
Fޅ^ޤtn;lHo $`
q#^iDl9IpH`	N:KJp4\htX(m֔`4pBI_4+*S7
ejXԧ\܁uXNnZNF9YGQrwg!E{lJJaUIUǯˤF]~iLkcfsyuzݰnzT
yJ;4S;JeDl:1[)K`mwҁx҉xRKdI]xx0G1R~#V#M:O!Β
oyqt^"݌YRSl6Y=Z
xw[@քS>wȚȶ9K0ITݫaLm9^
I 
J¨
oFM/Q`T()#{
V,YbVaT5ɨ~V3dNZǨ~T0gV.N3+6V|\
<jx7_%a0$TerJ#
yFE#cnHVu_*W(O;TK"Z
-
wpM7dH.ow`tz.d:N:<G@Swΐwɺ<F҈<xM_Nx I{|L'A&PK\h  a	  PK    A             =   org/bouncycastle/pqc/crypto/hqc/HQCPrivateKeyParameters.classJ@gicj?oiVAl=KK
Ilx|(k+*xvwf7h`&C6 J"}`]Ai"ǉH{P!VmvR(3K>\|S~EE`;T@j2"#~&7~%G:RaNFvmdlahg~J0;.`(pab
Xr0ܢI.UPL&['mY
',XywLB6)MP
tI PKK    PK    A             <   org/bouncycastle/pqc/crypto/hqc/HQCPublicKeyParameters.classN@ЖBE߸+դ&7!&&
Ya
]4/.| x1q='To3~{gi	/%1/2p*sŕLhdp&'A"J8/o:$:s/cM~w(rRj±e^/'B=%:2Q5Q7jVFyw(D/`MD

[T+tW,u
;6_xf&ړ	3J3$z\Qy?PKv&    PK    A             9   org/bouncycastle/pqc/crypto/hqc/ReedMuller$Codeword.classN0M ށXKXUd'B< z_;ҽG? qF]\>7in	ゐm4kqjrbewFJMErmX^b+K7m_+x0fbb"D/Ebz$qHB.n^ʺ5&wN+x¯Iq<Jqg쭛"	yhPK׼a   I  PK    A             0   org/bouncycastle/pqc/crypto/hqc/ReedMuller.classU_lSU?i7AAk\)1лB][N&!K|GcËDCg5y3>OvLD}9m_p3zQGi	`L&`Rz03֛cpLpF(3do '*&"XrS:Cs16W?kWI;^,?'GWf!,W/fbήՋNn..VXYɧEow/Wt]ڋ9rKdsrɡNvpJ-nYZ.NijatJ3}ưR<?Xw'dtY¶z};ot..+{vh.Rvg8Z!3e޾`Fչ\ǾRdJG7/q̱A^mUYӰhKAј۲֡ӵL2e.pamb7vd؋{5GD GM<c&v abЃCx݃8N^)YоøG0"Q[7S/ڵC%옪۹)2m"CEB1 Z&>
}zzMBt$$V$%V%V]xC=֪X{-͟nI}LuKfRaN+	R|JB4
}!\QF>>)ͧ5vCd@K*SBJh7#JX	 x0Cc7
tpDfk8F<m!yY2#bZ`o)XZ6SRCyO04#JBta $,={1TV:ѢNNeo1:l}kᒫ$DR @R
+ʐ2p:qcFTugiKii	n[0,BE`
$$~Jj\[jHciRj" fIW[Z[]ߥ.o@m?*oD܀F&i+|?@{8;%sTWp
<S-0,-ʩe~߄|Zomd7
tr9T(#0'vA/6*U^ʓj#L<R+FP"6M2Ck5e`:Wy&p+$3^Պ2%ݧSQ]q3A> \d[$ܖ2@g
Ũw4Pȧ)n!K}4&/?e|
(I/9C汏V>E"I.W
kmPKZ`  c	  PK    A             1   org/bouncycastle/pqc/crypto/hqc/ReedSolomon.classy|\wyKhdHhl-4Zl6[HDYc;!$@!)iපܰ,I{Ih!:\HM)\niҲR
_$sƿܿ+l|>g?y}-syޖ</m}.+hkaœOyq'c_/1k𗢶=z+jo.v|~Ctk:vQa8>9߲b{溗=0O8qǯk;>^wɣSKy^I'>Ktȉu*'9r#=?	[d?9}W=qCǮkѓE:ʣ'w+C<}͡cWvg.'tɣ]s`koTWv_~co:ֺhu8}Mם<2`;_L=t9t>hѣGǯ9~cy^E'Bo
'_t<vHoz[r}'%#^ikxM5E:󼎶\ܫJ^{eq/e/Ή{y[N{e/-^~ܫ
޹^4zE{^qkq+{5ָW
!{'x#1L̻}2e/2k/s1\`%ٓ_p]~QA/jGk2_Z.sJy;[;+s8OD#OĆKc{kIŎ\P~$.InISxUQTq)y>4?j?^:*k?u۝^ܽ::5[S޲{cK#O󼗺+=mwz n^]^aޯy[ d~c:~/SC+V.JםVSX*'<Z]R?.[~ě?ԹVͽ׿ܰ${[/ْNuxn%T'RI@L:~*p=)?Rܒ*0^wsޭiaq:lC;;j/fQpw_'%::[8lOZ[e/yWoeܷrRV:%]*({=x~0Uԑ*3Uxc]u~|;N#mK?w*pz$Z?m;ܶmeg/ܲ.[3[F:Sh~sKW:V]~8m1cKuH**:]>X:.I8S!UR^MG.m8#[SwzҼ{-m,["-%ܞJvm|#
HE/to)Hti^[4tZ %<6}RJtY~;|:T;XGSڍtv1{٧?n^sNr>Ĵng!mo46?mwwxyuʼy-0%6c@B.UPwĉ[ }cY3Uu8dG%]tݖ)пS/<mzT w,
w:S.n*rDmYwx^$/5WWf`_#u;$gS:sv%?|vc8 &wbHbs6Hy(ڭ-b]8o9.ÏC*> KE9ޘ.Oo0]ޚ(mTVmPo{=޹x~~Aj3?v4w#}qš)L</{OH'jؿpߝۮ{UϹ=چ; s~^^v9g]y^rqriOW{E3)yqf[Eƶ xHԱĎOz[>Rȏd6
Fa"و$2xf#Q}$hbؽ%NXRēq_JeukŽnK̻D{LrײQ<q{M%t_*_/IнT'&w*Zq뎤)>}iHs'Kcٽ6%V%^[/wmIkK{ґx{LzLzeoCĎ?.#jc,t\:8RQloO|R}2>_>XJ>'1mDAt@RйIz<!C'I\:G
Obh$gW
ՆNyV<)<ƙ|Q*Q&GB,cX1g_Jt[
}c4ĀgI|\yXmphnбcJl;4\
>
CϓP{@5P{Bo5O n!9T
S~PP r) BJDJ!Q )1}1Hvz &I,s)ZEbד`adZ^g %_c)@(nJe+4'/P(}^av^#'r0E|ƣx -DŐ0zq*(]FmS=#P;*}HKS
DnH@Ha]d%N
;i_F	h }X;ѽiCSAAhrE}\áB1xDBOD	"#HaH([6"C)/r(W$"Z;0zT~p	DD }hFQ"H}'n%kQHUr)<QPcPTLp"ҟ^T#^'"pULh(^E0U"Bur)&J6n6/b1B0)!&&̶
@~}`ԦP{@
bma4$cLz1S8%
kE1iIG?JVMR@#"I)P)")Im6TJ",JJ;RT E$03q&y{E*mp }ADzZ(/R۰˘7&5ä%nP:*"=-LoLOK?KW(NLoP9NRwA5NN&EokE'cF)vүrziNϓ*4bMA3آ}mm(@\CߙHESId飆A(%K['*|[oli+MIHKTYSʉAT%I
 dhG";dEnql<C#@4	͸AhCۥNT~I?4ZK7.=Y@^)&!ҐtPP[HG(~)`J̀N2je5H-QGo#
"طFhD7'ӀBqe$HtӫiT%ppj6*MQ`Z0=) ݊S>EEB.!udTӔArP
l*[+	*Z:RC*Fn(;
`r<mo@
T#*qpN
x1e*4
r`z``.yE>T@łǡt91g	67B~]ҧqV
*a?ť''?+,vv+ ēsEFAҔ
AP:)v*wv:f퐤LeS61Rsa^+:IbDXqx+
WJ`I}RqY!(ã6i]I9^BNP: ιl?ri0YfZfFÆD6|>1dah"۝B.:6 	,[J_@*3P
-URU,UjXVKi,Y͇>- cK5if-RZYCKuN[*k^̣F060{xTNz O
Ao%썴A,FO+Lt+`T	F+)J-<ou(D2as$
DW 4Ju)ޕAD·@P"w
z'>!@o@_@@) j{M푘 z [lyddoV}]}K}l:n,AD4@hf-Ъڴ@`Nؙo %}2
%cQ z
=A]!'Fv^,KK7A5kthȕArK
'H\/	_PZR&Q
Ö43sh?B
mD||'	l
hoE>n FZX4'BŬUH6gh
F}`t0٠XdS5SCY+Suk+ Y5l	ai"B7	_5d
v6Od6~}xr@z`{:i V."P0pԘ%fTAMHN)蔡5\Lj|ke\Dii@hs
 dVm9h'9h >Dw6j+Q 2[vLRЊ#%xiR1LHɩ+c%UšT5Jj:~W;}6sFI4P(4&T"Hg6>GJbt=k(] !=`(N	mȜ"IAi@D DzwW,%JdA50|LӍK"YQԢ)jD0j1k0zamD وtB+m
##p!D9`m	)S`Ý|I**i5&}C0Lۦ'nAպhRa׬lEߊjۑNnTiڀ:
4vCiAuQAUH}\H=	n;7j65T2>	Qt`Ȫ#Jno )
HLˍ
&{3"i= de'Q4۪͈4x.0"]$tiAUSi^,#%>ц2>PL\
1RTղWNf^/n$QsoV)me;!T#Um2Z1*($>"QZ9&	*y=KD\+\DO)^g))ObT	Ęp2Ҽp0:sFkpz8SZ8}T>:JNoτᴄ=M=At?P=
Tk@U-R˜nf/*
PB98WH}*	*qZ:3hq|
,9K@}@@U@=nQpJ	әVTe8]j|^LiPT2/(KbR\#h-6TiaY6F}G҇`Se0j̜k(q	]Fi盛e/-JOMvٮAuu:*V L0ɶHRP,)Q"j'sFKBkp2q
	LLvdh}+x~lTlV"ζ*j'q@7 ڶ8$x{iu@Em"m\P_(ݙLA!d/J#)bBKUTKUTe:
lZX<+О"vC]$ZheۃBA##??%Uݔ=M{M*'ٸϧ(md`s䅦Ot50leg=g/:x>tP~u[.sٕٕ]1xޔxہT|>|_>VGxsw]Ii3e'T+!'Wz|g6g2/<?ȿVtcj=z6oǀl.4uA{E5$}R~t/3v\lN4hl-{* }S'5֧]249'R0[
؋p+<!2O`RՋާMԩ_V9[9CHƽIl6'.wR[Oΐv 249bCLwy\˖tp6J>359y)(-BAa^ԫJ?>)Vj<@ysg@YP>
L_̦	cZ_J059BSX 
}H{e0agZӧ_xQAA@zX|kc{10KL]Ԅ=4h{№i
7ߛ5G69G;`;`"(=ZWE[`rF(YL&6'^x
-ں~%W=kIlls
?)_C
KZ#579ya89 >""TDEҤ_{6؜tP~#(CcQ!X<*00C*LPnvsjㄶv.1P6^|
j~t6y/UPQPX40XjukwzjCM>a^ʛ#/0Rh(wA.|@E67@dq`sQu2luWp
oX\	'489̘yaFP~#(Ad*mJlW5Z>̛?	6s֥M=ʚzg@G  44eE)AҦgJ{ʰrM`i~0m^HHd-R,w;
܇`2Ow@!v%w1e8ZAޚasZ+DS l!S)VP'
{Y؀S'5w ?d[pvt{_ϰiqG}Я7m\|cR~_:.M#PUP?".W_Lظ@eG[eE%PUI<HWj:oz&Yp3)O	V26jQN1u5Vv=Pz [Bԏ->-&59|6Ɠ7
*"J%.{%GȎB	h9)})6yZ=}V'4;͓g.k,JL2*,+Wg.TqjDlMnnggڑGgI}4=hA#:Fɮǔތ`RII^/ߧL':<Yes~L yke՞Kei
"U|JUexk֭bgq
V&ۭiʡQ,~L:M`t*ܧmleZ>sJpNE~< 6rAʢʃiʲ


!*>Elx~csx?axlҫA6rHՙ#=JFHvGwcP
ٮM*9ثT`Q=e?ͳ8lyv{]P/y,[
ۜYf]SR2*.`cY.qua`-#qT0	q` IW0Sqgqq?0 y`\1K+1+q
u$sg󒇳t4Uf]G䫣r1t\=}N{)qF8+;'yނn Key
n|v?wz9
!&#aF	165G0LIuym-Aa:H?esY /RU~Ba=QT66S9שXcLDfw# {ԍo7
"ppORݧ͟"f9Օeyv}_TٗKJ8+^kꛍͫo7F4>føn=H:*jAqpmEi=
fQ9~	|mA3(Vò2u߾.>ͺhc󚢳wMfP0`- 00	`{>8%qg`qq`%,WcsewN
ܹ\66:WKCCĤqv鍐J"qwBR<S{IgSb0\z{@̼<mA2HKŲy>G
vZyUs0ؼ,sV#y~T$2a}Änc,oD>=*	1텱SLExb{V6';/=Ê%j]R,cd+,LDa{Q66/s;uC7CjCF=hG1}㲼	$zWO;O=fU~xzy-E	kFrD.]i,a{#z&\\ƷyY(d٤!N
EѸèbtsdpFA)%h1kԜ#TkbQ!["(+UJre1r\Ǿ⑫76N<+W'glA-5R,[Ka-5Xj&Xj[jԌe9-ԼZ`E-RK,R+,e)j0ԚZؼ,^si1$"qFwcNl>"XV<dLR69I1Wb)"؉bi<B@( K˜-[ASSJh:.&ؼ,_LJlj!f"-0,0ƵLjpCLii-0fY`??'&-Z`Z gX
lu nl^({v/52UR2:.TkDJ?:IPƱ	咓l
զPitq%%S)W/"ؒje
Q߿LWQ5RuG ؼl^X:(G1t&ЈQΘ<g\rX8a9ߴV̈&J5MxLODE9LBJ%$Cz{UFRnYW8ol^9W8 Y2CqX0c8"GqqR088#gqN0scqq` `\`cξU`\Fؼrl^wJXpaCFQx׮Ns&egІ$u
*O+u"sr`j%G,ah$CY(aJ|2_\IHE,}c{YMbȐjSc*FcHƑ	o밃 b
uܘͼu9#-YR/SU(7Ȋ%{٥pnMu>q	W#D6t:V:Ώ^4s4fL}qT~Np4Oj:`Vg^
YOs~(edK(2يB",\U[
llP sVo(`Rd4(g#ؚ8sq<i.'I+ShH7?̊s2p|b^Ѵ-*,3%{Yt",%8fθӮFyٹW12A``c8.'q`ӂqgqN0c7:`\"11qU0	uݿϤ7qajPQ=Qaإ"WE"ӹ1vk$
F8E"iu]%k;%&D!x\@gI2m	_ߊNsr"	Ӟ.Ȝ{\!
C˰$$hFEFXM&d7B"e3,lSdy|l,*2,\!&~%fI*d(;66ޑ9w>o>+D?	g,IdE+%0bۤh
|J8JbF9)G͑قHQ r;tzH~ Iw'ؼ;I?$ffƟA)aϒ#쨴}Lq>MoLqMc3,:Gtd	뢪L!42YV.vքVdl[F}W66rVbHl@p|LK(Kiq-5R,qeli-5R,5ɱPEY*RKZjYKT|VԚZ&y79ېfXO!#2Q
c	$`C=E8ZeF;K0<"#ў'U^.!P.Iǖ [Q3V597ؼYٺYY ),iXΒb1JdƘN &9t<u"3$鳊9Md"Lz$yQF!Pd:-2sY^S;s=*#O]ƝCp
pܹt(qEũEDOLg1jWTǟ'#o	&:*d!XR
JJY쪆LN|ɢNnfaТ<UF*߮Cѩ1*{-YXP"Qa}YدB#M(	d
2@Qh6e	vrRYn 4>JfRrM\JdA9#WZ&-XAJ|'3X%Fa--bd$z>u>r!	pDnEҶʂbWjWB2'谭-%r-b
-PUZZhZ-P*cz-8.}A@j6-Ю:@'h@7@ж@gZ`HX`Dk	-0H-0s,2,-Y`EdY g`Xn,7eF4v8ia|;G¿ȰHNT,#%Cea	1Jrt$TٕH[yR5SJ:*VdfUD'7aFtIJE^+xuA|m͕Y_n7CЫ4*0
eB8$
`L0 `q80N`9`nDf0`\`\eYk$&hA;G1' }.3bir)E`ù%qe	6䏔!{Lb\*+rj
˪WJ#tb-fR'
7+ics;
E!sUՆ:N*#g|OA/|OvЏצ!P9c:Fḍ8¸<!XDƛioF,<7$3{)-`xe-ɽ1Y7ftTzBh?0X!6 lMh5s#X3Cɬ2	:S)u"\4tQR{P%eV[)XGC'wO/A%7@n/NmfUզv<?+{dn	^nЎG)M7H
s]d+-S&<LuQrdMH3qN#\CV-:sAȖDej%YH׋HHfDjl&E;FGsч,*
k#(WĨٻ85ûnw<ol)U(hWXVQM]ZC
:q3'_BvT
Z0!j4Af$-VJhG2;(y:	ˬ)eh7ÞHa"m؃~F:*<}LȆDa*^dV7Q)jq߄8?Ё&Liz(3(,(5 },*03%twr+DZVbv*tUFz,g~#ύOAlC
Y"h)Rĉbe\~WBeFnø^*a/qvBRUU50$p`=<oօw0jı;"NhkІv)td;2&rz`C<0̣_̐abPi7(wh6"WPlB8):,}DiVV6'	ˮ@fE=_mI3Vd>fAJ׍"Y.P@/Ǟ1
~h3C(,}LRDbC#9NYbΔueΘ0*":e9W0@J+Id-)^RDPAԱ9LM2fMi%m#aNk8Qf֥T[!#aU:Kpki  0Âџ'`1`8$00N`9``\KqY0 cV0U&Ӵ5Us׽ũn1eAQc2b:.5.YxOweθ1,*lo%g)vڜTGTyBVgdCLA#k	6&DhnRӌY9ЧMiCC]NN,SeaԺ$=XE/
/UNbf}R!ɰ&F2V<Ў7-&@NwҔ8Mf5x*LKE%k. 45Ȉ;K2WdYd;W}DDV_H>f6v贉,VE$Qm q8UF%{4sXǗaTFKS(m]!T!ոV
uq0U?FY[0A$6MBwi]"=mNܺq_SehM%2O~}P̯PI}rA3,$3GQcl4bB7xH2Qxa
F˔̋E</#Y"@͊򇬲`*ۮF&{Ba#P%ѯA~j.fJ":UIc|17YfvLPX)NNWڕJ*UM^Etß+,V=:ѠmMv5M-pU&i:g'mɬt,cErяà
Af#8k1,=$#:4Jgu'IFrwxT2[l;Ss*ɲez-XT)!.KjVTfŚ\%f*vPg BN!C߃Fl)#(;Zb6*d՟-d?*r0Kj4VTKktqu;VpF:N %ucb
jtN?V'pnG+Zd^/N=APD͕}CHWMH&i 9~)}g$4Y&e="uAp	YE`Y&eFU4e
[Y,g~D S~HtyYq]HpXBsESSq,aPvTIʥ)D*TKUT
KղTKe,UXJCZQK5if-R,զY:Y.c.f-RA;ږRZ*Xj0Ke,5R,5R,5&YJCZjJKMk-5Rs,<K-"KeXjYjEKeY*.[jUKiu[*ky?{eކ8s8i8SgL-D٘4XZWUp
&1s
R{HIzRҝ
VoFaY:
y#e.	Xv5EMtU݆jU'ϓ]rni`"4?0YC!ɗҪ 5ݰA0YpUf3FSrmLޤcT2&Q:z},9/U^.c+hKKD!5rZD)i4?'.!F?Z#U1gJhkdrzC^*+-ST.Z(*HR*UAZk
Mû٬N= y3F
M#7iqp~w(ĩ;ǒ"_@X}r~(V= '$=R0PbjT9&7\PxNPgE!ikBbV:Gן,@.(I_%K3&2)g],_%֨m*%͒ 4$u4͜kU,zUE"2nDFv-,|&:z+	OSJVM9S5jN+9AF&؍kMVMѮ0P܉X3eE!N7EFhL׎%\C	d,7S
1.PDM[AA Jg	9")x!^P)%9òL&o%ZЭ{kS֍"Y'thP;z1_a"it!:9UPMf9j0ա/eLBVξ(*a+VZUA
Q+S),1z`	a>ШkB\96jvBCݩ@Mgu!>"PUB/J3ШQ42
"!aT\`cH8iv}
:,fPiyiV0T)y)ۂطD>#1^/yGΕa>+,ۺ,<%CY%_gt
D![y{Ǡ#bЏa5bqq9K`<Ѐ8Op"%RT%.B`Z'TS675iM5z*Q+;H:cetɸٔ++iXѠ`ޫ`Q8&0N
#VAb8qse K,W193WqM0;2gf$ȅT$ܧ_HI|cov\omao|xcoxBoW*{kxVom,krC{vn͇2v;owNϒ]ݭ{v>ݯp!=9'ƼYዽ=۹{sS4oޞ=z{Qogኽ+z;}}bnoghErJ	T)r$KIsZQb0@KuP	U?>&ύp",-HS!$eXUKP'Q',!6`Ɵ@[1͜o5gYlTw(M;v)%&GYjn̠ҧ/|u䆱]+3"UV52x}RI{0a>Ғ,N $"9 Xfqfi,sEuC47TAIqmĺY;hgNu,~%@\+@/@+ }yax[2;ܔ>B4|C"/4e+ezkժv3d4!o)gxKiIl:k!jIuPwcBC4e2g!J+GZRCԖÊp~n;֏*g#jZ~VLntâ"|edU[d[@QsϳdMho+[T-/"HУg'ZvB)
gZ^
R&7GfVnz2RjౖWJMY
kY)}VZd.7Dv֬_pKKMр&!լ3|2ruGȌ]hW*es-1?*`ZAc&r#dFc*xv!|EDKJ6NjN1j$9DL@~q!8d%q-XoMQ$۪ot%=>ԒM,$LLh#|w!E"e%d͙3F8pJ3GZjR+;VzC--1ZlNYWR瞪r;=h"mmcUy?<-4\24KEbl0KlՇ3,%Ճ8ܙ`8&gY
I`G8F=R0Y8'%! >rc0,0`\5`\y|y9mV?RAX(QBAϲf-!=%T%36,vKs,B)bU+IHojU1e3_nhhP6iYM,KSv	FF)
EKo9~2cFՏTibXͅpn<qǮ>ar,:
aJ<Ri,OɴQ, n=ϲ4Y6^a
B㚅6kJD]* MuF!΃F98AAc	c),ǵO%|pr=J,)	wvT)
eiԠ͵Ml47:f̪I8!S5fE&>clܩ]eiNӅv=A,K%}JqqQƜAoH>w"s<R$l<9Ao̝fs<3/ǀd'YBer3K8@#F!_yBy~~mO|H2Ge W`[!r(d>>k4B*Q*j W-Sph4^Ć	x#ՄN6i,->QAvKQ-\ϱG6C9\KAqgH
ѫpl
BGbINr2'7̙O|d3K)8ϱ2+Xȋ:<	3J1*<u!2X8X;IyHP((9]E_aBXf-B|Af5@[TvtBGjYV_
 0!TCT1RN7f06]ѡfv: ;53 ?<1
`ܙ"i5DAC-]7fU	(yɘv"MH&%{/usJ}f9U	Ry<fQEhV¬BERl82
EK!%p2A\=˥Iu_#\}%Z2*
]
F]+:&y<Ns	^-(
+WkH1{NZikތVu[-\dvl!I:TpI9k9-;vIc,/hd/I^X%7T$t38vE{v*ݲfGK?0ttDF3|YRUJl)-UwIxnDH0Bf\z(s"uI kޙ$rw2n$$Hz6vqfu]H:bYdEHfcIy݇&c^ܒs!E
<Ie.4#*!.{bE6ᔑ֞S=pEz޼1.
]EK2.^4`\ZF%GseI;^!pde$N-As9&>62GdS.l9%ps|	N84KvJb鯣M2'P.6Ȉ\Hk&YN3mm
ړ;S
6.0~WQKR0"rQFyUpNn9'mN;69;}]Nb}d9}Dy'qYFQĿ9Q9[W6U<f+j
NPIIr)9i]Jf*eU]Ԙu[#;Kue=fқ0fR{+׆[K:dg씛vI:[)9?Űr:M;. :n9Ycxwd}wc}/YM>IWFO'i~F9,ܵCx<@'sܗdJփD%;)wZ95*uվJ*^4b%TvIKeR;rF9B	K2JLdJWZ]#V>|>quJ^A}jz%';ݠJ^FdzNF:Z[H;np^s?6Y[=ʅ/C_hɘ3?|~>IX|M8߻|rP⻤ow.-rB>Ge_M23þ}7;1?Y佖`}}o}_AOA_?DbBa&-vBrf+6y߀'JhQH{ec~~$/[
1?2W'dSfY> [nU?Omߒgc?
3 yw8
"s[&$ZdI7y-t(#o2Ov#?1yr߇C'怸O*?߯}o_e؟eG;QN^gq߹r^"|PK.Z[K    PK    A             =   org/bouncycastle/pqc/crypto/hqc/Shake256RandomGenerator.classRmOP~.֭t:	Mb`Đ\?ݵ1mm;C?$:~I?99}s=~|>p&CVVД!]{#Q%i֛#Flݮ
Wryd^DEAHB^"um=t̍~/ {jpvY<{´]3G?|0{crlmmpkwlwwM8
|{6zM$PqZEAŤ3qeFmk/7Q1CqVBc2MCiV89GE.hU
%\PpIe	Wh]noy½^äH,C\Cp(HQ8J/')p뒖q/
c	reh/*FFj` ib*?:y$e$S(꣦Gs)P].V{QIf=이ҩBVE	sq*w,1PK:)Nf    PK    A             +   org/bouncycastle/pqc/crypto/hqc/Utils.classmTMoU=eLHⶴm
	4
[I)))ǵH.PJٲ*R7Q؀?*Žۥ%Ͻ3{.y\^A0s2f1WdbK\A1K"'&OI\EA7T,a9$@}qfiWF8[^ⴾ*/,Ő՛/j?eǡ{D+_׽-<e
cΗ]sU{	vqau[	WZow!U~\`H/AtN=/ͪ߯WEݸW+v#J^>S٪uwJ: ĸtΠ%)P0  MY\~'8Hg &`@N@|1%\qXG6Mz@]qVE9b_
eId?	QL!
,[]5Z[
}yö5szpNE V	ҖAh^5#2B~'wax)e`_ꏻGC]r)tAA
&i>YMwgюD[WQ2:ce:jIDy1N`mXkd,Rdl&iHP(~*4'%zC3`⚰`u9$}+I(ȚIO0ei❵N$ڑ;T!ἂ<S'M 
zK.ܣIv/>9HͶ#Aﷱx#DH5G^UoRO\b$}po'&jN	rH.x(7^lhTa/4
XH`|?7Nb|~8b1R!CN'{8ώdKa PKy    PK
      A                 org/bouncycastle/pqc/crypto/lms/PK    A             .   org/bouncycastle/pqc/crypto/lms/Composer.classTsZU.<!)%P$%M|!З$FC?*yG]u֥n%{
gܸн8s{DX{y|9O~|`@VB )?Q
~tfehè&C3eh6Òְ*ڴS-ZfAMB bӨ.̃|e}덆V/{Gjjbupi՚mk{E՝Kz2*CĺW,ӛͪe}S>,a2ACݶ33(iT[CK
Xffs9ݰ\(Ux
K1,'#(c\FHFXQ
SB)zlTdNVJ)A/+Rʍ0!Aa$DU
,Yg~ݼ//j^9s?"U^ Cc
.?p41xB<b]<>WXb
.^a>\_"r^5ZmamiZO+2yfgF]EG&{-og{yrHGA"4`<|Ew1:S:r@5~Ǝt..P8@ |1D)!b>xӝR!ɰၓghku~m|swm\OO"=AHO1؟ed̎
Uti'X?yf,uˁ@ҁNpsRRh\V)a}zDjL_L)=+Y6"oISVwCRDP}ui~o!&qI&>).fg	apZ?-O#]w=GDx|}py'Qy9\uGu̗iyG&c!&3Lر#(, +aGɈwHuɘg\) PKG  P	  PK    A             >   org/bouncycastle/pqc/crypto/lms/DigestUtil$WrapperDigest.classSmOP~62LxQKTDd	DSnJIζI?xVPķ&}sss_/ *XS$Z*ZcVƔ0^r<'Z*VKz
~+vol8#jlOrV\ha5 Qk]󆾳kt-6n:PQxvuq28%llҬhG`lsF4AZl8#hfE9_VPRT#gLV$d+)QpA}/
n	EvFzP]qY?k4G
SР"!p	)
,.kȐ
Z?&1p=1fPpa."n`:PbPfI7{oUj'U
CM<uny #$+Ы*UW(+"Iq8tQ<>X8G2Aq
/pxJq?'Ϫ;X8Ľwq?mU?LX6.<	xB?cSYT*w(u"eX<np^NvV9Y*x|w<hl6aIRe$&
;PKl$j    PK    A             0   org/bouncycastle/pqc/crypto/lms/DigestUtil.classU[S@д!UAXj7%J[4xqBhHk:?@軿q<
bL={;ݳ~p
#ЙBЕİeR)~@zl8>CA]46kLu-'4Ԇ,څ'3c51\K[3YEӯM^
"!sRGZe)p!Y,uXv7W
UhX+w-'Z]Ԭϯh217w'7B!$>3NG۠ߜ+4΢ŝvεOqfr?gx"}iBX;;=efr
Zqjq	$H蕰]BvJ%a=J=m}
Df%ǉ_
sh+y0؂E=:Zts
+ _/e~v*lksfC
z7e;yuM۫-H**
1)K>RJc
"8.8!`T1'83e%&eUbaecJ#Wdༀ+8sTOp+ro1|aycؚ7S"):'F&4
!!(Ֆw#\V˸Cg^jN`ݣn%Ya]Eq+	׉}X3@#TRJ3<$x;GCoc+7s"	;tW1 DfKC
斪W'^]
f7Buaa
PK2P7    PK    A             B   org/bouncycastle/pqc/crypto/lms/HSS$PlaceholderLMSPrivateKey.classQJA=Sڶ
PZ>)=$A DO:l[~VOBAQ(C0˽s̹? Nc V-	l(l7m6'ePn}..'l칞>7azM/	Ww~e%PMu:kNM.	phN  @Q'Ȕܪ[ǥrcsUΖbֆB%׶fHKJ	y-
+HÖ
)&ۯsμC}IsEh8> a2feUWn>c#dހ)vsNx!EFHMR	1;֑CPK9`    PK    A             )   org/bouncycastle/pqc/crypto/lms/HSS.classX	t5,d(nxC
M04lBC3ؒV-N8m]hJ	Ɛ-tKަ'紴a4ceΩ{{OO=vJCBPUR$̪4J+#.aqeTD͞tOe1=))}QǨ6$(vW"U[\No W-ߵvVPJuft$ZxWkHXvF}o_>f
:D]`1=jE{ǰ3Nw$dz_3uҖA
-8I5qحH(4E!jEV<4Oz^>%-";
RT	7NNM%7V>Y:	Ӽ)mq0Ӗנise<|Iи1l;iw
h2"
ɟ*8JD-
ٌIloDLWEmOZLrțe<?´#^DODcħ"K[	38@l\c[^#LELN/,Z6qÚ0.+?ڑ}/tK[3P᎑vD5e
f@+IRpE|!O]:]SKXCkD4ftxʀsR ZWaa<U!ևaAO!!ڇXqSfByʬ>H*,TgX]YL-,2caJ`erPvǈnKXT;T>to
ϰ=tVqaz\$J`ZuW	4	B6
RZM-
	l&!HO;
ײR~&_Wܐay^ap]մd;sۗ	?}kB,aLjqJv	9@VuSE9oҪ]epxfvWvz~/<׏mamL4zKA?v390g\Z]5a1}mh-}l&gsA6a&/U-3?M|tT2a	rOVeuL&h,aWaQctTcC9ub@ǥUGvܦc)^%x*ܮcQP;u]:`w븜b={
{؉Vm<|A
v~
b8`s:!
]bh01a/aOhA2a0|א`>a#5$qaDC
1|ᨆ^|ሆ>aeYxe{v4RYٜdKj{s"j5s?$fY-ڻH]	!ԛKDmz'uJonK(1BuGʭF7d|\Jç28UVv\
<
4,Q@[7A!T&}Uv2YqHn524*
&Jd2I|J9JCYgRrp|z2nv{(XKWe9/	"E3T7(d"߸2S/m9bc(@mu{Kt=McKG_95T-_k-]6 4,t@2BOfuqAg:ڇxy CK$(/"a<yWwբ&^hX+doчMgx|E0"oWȻ3Z8Ps*1qQ<CR3Q~YRK1@tY1'-xo_x-y{'6+txcR:  (W~:>mL9;N{H՜R{_5CL V.6TrrW4jkNd
ŗ@]wYBqh Qd~68R	L0r\/X,vz~BaH\7_.~m!P|Tir(pQ	*pYH*lPC$(>r@~"d? f2
aL)SBj(	]yX6[CZ!m'Nv*M{JuPY;*3X",E,.v_(;CHiԚTPKP7(V    PK    A             @   org/bouncycastle/pqc/crypto/lms/HSSKeyGenerationParameters.classR]kA=MIL4֏u[7|(FQ`Biqw⻏>((R@-~ps~y.p=@&Õ(A*oDK^xG:rd8
y(.CK%ձPa(B,R}3ɕ>b?
w_y
"Ű<-JƁ;n\
"2[rچDZAKBYW-"֭@y2M][=D̳~~a
wC
MDDDDDQ%/(bfUJ:vssBYzh{onQBK9Q"Nr	U)%9hH?Zq5o>T[gd"bɮѮOgKm	{ړ('T]g{8SdX0L4L3Qca\'[2yL&a~kb7M'PK'z    PK    A             9   org/bouncycastle/pqc/crypto/lms/HSSKeyPairGenerator.classSK`}-JfWӇ=AP =a4
Q=GEgj,7w9u0ۆi8;nr9 ;f(dSe3DZMSKYPESJDA[US픸zű]^.sGQ9Cz,.Vu^**5ŰEM]2ȘaGa>XYaԼ*B$GBX,W"a;y+i%[ak=іa[ZLT*=o٘ޯt4<#
`
Bw	AL1)LˈbV d0Cߞu'@tU{bsV%0c1N1th؅Ē׈c1IK;,\6xPKY	  _  PK    A             =   org/bouncycastle/pqc/crypto/lms/HSSPrivateKeyParameters.classY|Su֕?Ca"O#qP`I! [
pG@KӦ̓<L(@Cq Bv˲{mmf֍s%[~
:|w9?p= Ļ.\]O	86ĻM\/Tmoউ8-֜ԡ)/^F	Vd\1vZ9KFC`zՅ=F;Qzg0
=I PK<-hw9u1gK
w&Іä`O+ח?v*x7Ds$aJbܒt5@Y(oO0н4EuMP+Cuު^wb%Y#t`ȴ=-nDE=ЉELJ&q=j^J4unZ$FNORy4&KxS4 ͑qX!4nÜYrAS-dF=ު⺽sH;tqŸHd3.&tEBYȚX04 Yb-lk =(`bq:IԍDCU#YwmJW`X3nEbu
Cך=IՈn[F0geJzi!ǲl65lW0Q.*f&{zbqCa6ɲfm;]nr,cZ
,[C#SkQ#ҝM?}dAZoƖ̒Kѝs.==4"]uf'V9jljMwgۏ7e,V>2iGVJKF+&`ߥHvR+Z[@/
~NٌQݥw] GVBN'n&o77JJ"ٶ 3l`N.#7l_Қ{G98'<x/S,􌤖8!}-=U+I	/G[ʽ`Ԟor^s3Q&(ȆMq=afʵ1;8	Vsq
+KPҍXԎNȃjy:ڈYᕲ`rN33H5b^LDڊoNFFcۣmrbqog"˻_v",:SE'L+"SN"H:6vEF)g$pkN%tZFސUxI	L1:3d'$J%ILB#"JbĝwIhX+Nn{$>-&^]bF{%Ba	]>N[%$%1$		C")Mb;97P)kKwdRvDT,<Ms%1znsvBe*	3k4o9\1&g980צET$lr΂m[ch+J\?Z6ZW~r&Yy7[_k/ 78 Q%͸2G&
J!pUEoysv/-yWd(ĀK{'{fɜb@K,f0iA_8]Quu{y8*|iMޗ9<S\0!ڼKw]Z#ǖ]_۶G/ٷύy&7jjx{K^eO</c	_#oXXBv^PT̉+w&r8	eLuyo UrEDu
S@nuizkԑ
sۍo3VTXyq?~zL6?\23DTfTjh$
+
-
35,SC=" Rbe3	aX(mpi%3,dXǠjCJ4
סLL74<Ph؂ja~[C5ç54w5\IF
k?Hl^|O3
0܈hkh_1_kXjGf5|
?f	'
Wy3
O_4jX_h#Z]O[+8Kp\A018'C>UW1LbpO>1E~~-]ZPð6_*aQPhR
Qǰ+3,`XPТhVXpJU**2<72|a	çV2bXioTloRoO2,SMqCwDb@Q1(\%33nbXpZ'L*:
ⴘp%y*W8#)kbu8*4r2pb5L-2jC[[=k$9N@b2fZzKf}<5>K-ydީ"rsqF7ÁbjWrBbfP8!
'&K/~"S2va*,l7H\Xq/Ї^-v)-vxĺ]$7[0X?eVь
WZtgN~JK&/,C(m-><M)eC86h@ƞ[bevH:!nLw\wI!LH:ث)aܳDyEKG2K?*wxlD
v|v@\dMJt[xU,6%"ڮ倒(53Pϐ}}('ś$hW"% kDl@DΐOo~8JGc4[!wQ1LY%)2)8L?8y9L&?Q-O0YhK/`ĠV*;@=,tIY
GB{G?frᄘY.,a/߄7_-{R|S`Ii8"KyvIN56_g88 ^j ;tNK[e(@xRK閒t>56:aSMTO,vj7<Pf@t1Hz+HEɖ&	|}mp~twS#PJYr-"W(&ٸl-i$xm;gF;cͰmEyͰ
;8-,O3
Kz;N
[e~f-Hߖ5bӽm<kkyjmUx{}~{Aj`\MseQ8 V<pdow=g$<9((H)7?Kj/M#fkiLWWI:_&
"Ƽd>v	E*5[:nFJv5ngZbSuw;Gc=ܰ9|dCGr' >(^9e.Oc3%ӇkiGEpvsg?ÁAbRT8;$bwP=*Ğw]]JH6=+4@ϬuSuOy兔8)C>fVШA#BF?
8ʑJ,xңٳ%2{|dܓb
ԸK3:{&eؚe#X܋I|.vQ{dJ<VgB0N3أ~t859T[Y4!z8k:\egd4&{)e@<oGG(.X?7(oJ<GNG1dyӣx+<(A1zW;)H)
2򔰟$z4R8pͶȵTD<r46QȞ;}=.p*Ǩb('uQRzNǱ*ZXm~4ؘlz֨Fѽ~3y(^{f|4s,+d9YvT++Dov4OSMϐ^XM{J<[Ɣx)I/ЇiyKvVP=GbETFHP>
KvUS{ܞ=Ʃz#wIN>beoNa79m>T;쩪
x*MS/)owLn[6>ھ(s񥾶><ƹ"|GFQ/ixCn7ǡ66Ҧ:q9c7Zy^D~ޣPQJ@9qv,OTa`;i;2[
P8 XE+vlt\?rhU-Z%A7_7oD-ߜ
ϥĳ-*`QC@lRhYPKeL#  ,  PK    A             <   org/bouncycastle/pqc/crypto/lms/HSSPublicKeyParameters.classWwUMa,j&,iA,4t	PT7p(
T-
iZ=9;fk(ERNO޻˻{ǿG ,È
e6PlpvG<w0-i
asX~/;#	#T㦮`7jFzOᐡumNtnzW5Ռ.ۙ)kjq	aD̚k5*oɊj&bZ#A=$`'hNV*BTS=yxnLIIati$xA2lOT& EHZǯjx:Vς1+䃭[w{	Tw8n4bj׈&̀	3VToLrRj^]B%z4SwP4IhOH(ԹW RKMp'h)ΖXکS>$RJݔaϓp;ѺnVcjFPE(UyagA \./\Ek][XxO^RpoWtOPsFܢ$hWgF^1ɌN3:q.9  <(	-pvZ@b
,_A`\$Joo۪[ޝfFf}c
锍ϬN/p;!5^H~3 𒂶SX@зb{ʜ%keq}Cne<V>"#]d3-V&+;Q	vn+1-,l}%d<݉%vN
\ت`,
3<P

)(QPP
`cئ`U0
+JS4RЄL
Vajt*PR0RPnWS]j!"2<1<!eXǰdl@W^C9#d9Keec؄el+oxd A2-xL='~Sʹ'?W[EEu	*B*hDKiH8L5(?`x1y;*hG%p8/3aTb$=Gi}_BW`s =}EcO6909/oatܚA3|uC_D]}΁u0dۆp7t
)OI|A|p\_lvj9EFq\"/@1m
?qD%VERIaȰ3 %S;BޞNgN6DI\E1	1Erܫ
NgMe)lQrBſOlg'bNhJt[pnX>uRQ)\IO$U85҇rkUP<JFK_%$RBIm1WhW1S*܈_[6,(n장+>
V,uͰ?6CI(fWYJ9*h9j_XdBq:: PKG\Z    PK    A             2   org/bouncycastle/pqc/crypto/lms/HSSSignature.classV[WW$LJPrk4AX-ЋC20Jw{֚˵Z_xkU*ھз]*;S`>w>'?PoXcl@V`wWw
p;yXcf ,XS'(Ĺ?Iq6lp86㩁H3(G8}.h@*E1UCꈢqӕP7Tb$>U^IAuH<*tT4b?3Vn)c/a)P<W<H&Ha3*6SPu_	3εݞ}4uP:aU7,Zd6Scn5bNf1}VOCe@cg8(ӍYJ*V.Є 2ޕKm}pxNRPK.-WʰjIc	05KEhEʌil9Ul)hjm!T'!h{[bF%\v\騤fRDI#"*DT*QU"\".q;EQ-#FWO;t̷IJVf`X;o`<C쩗̗Zseg	h;y.Ί>b~+y}؇܋CwKkPQ"EܹRu_ۤp؃2BMu,VbqDQ 82)ϰ U8Yk+},ys{{//8BP$4`ŠFD%4aXB3DX$r$C,tqD)#:p^B'.J	q9	pEBWYa"{!%q\ݰ7^)ӘmSj I~M#`v'<7{<WYQLО+ǩߐF&jke=-VO(7oW4vev߭٧ħ}gv<DJ_=.Bh

S}2x%BފI|;}MBq6'q-ǧD]*L=ޝ;q4pW)mIvR
EpDr_TWQD4YD46ME`,o&GzjI
'<m8a4WoBB=ZP"WhG<5?a56VC^ޅ&EeJI|hml:.D@;{Q>æv#d1??]䗧[*
n#W[S˵uhkx><`7!ﭶl	mM2{m1+!Q4*r"p)YPK)g  
  PK    A             /   org/bouncycastle/pqc/crypto/lms/HSSSigner.classT[OQl;
J
T%)1c]XvKO$R$?8gP)!dfΜ3o Fm?0T1Ofϐ s\3edhͭCs[\0Җ h 
bV,|4FlVKdh5Ȩ:]#c1x^Sj4yZ3.D4G%wNP箄Vz!g)03NZMfr׵kr~݌ZHD]keեDauاy~]s=r'0VIf.iH%qKŚ%J%:a;9m"CwҒ&`
fLVt>w7$4Ih"UBv	7$tHpa2~N3LT[\JmC^qYC[\EaN	HU<D-?=ӱp%;4솮Mx.*G?|
QЀn!RPU
d<RЃucDQALŔw*&qOя'2Bb^(tzzWppUSVIdFͤ隁#D >*.NSZ5ήhC}D@?W<تFle/<^}^9A	6𼥪*`߽Zԥ`7TNG( veXZJym PK}n    PK    A             7   org/bouncycastle/pqc/crypto/lms/LMOtsParameters$1.classRPmJVT!mX(C9U[3	RiMRK/b!K/k֬$
A!ͽg_h0y
]Wd>gߴ~$"Ю<k{uaAiw}a	ŵ- jF?BB+&N7b=3B,۱rTϮlǲr}Ft1c'0gNbN'ad!)iN㒜o>vh7*\,KdZc7lrUb&T&7q`	WU:a0BIEM f&L၉<=La`&Lpg
%C_+̺z7"k2UAa(B˧GAlV5&"Æ~:xu-y?HŢe-J,iDQsZ)1ż%-JJiĺJlhĦJ,kĊ+JjDE
o'K.'gN4qgCn	PK_Y2  U  PK    A             5   org/bouncycastle/pqc/crypto/lms/LMOtsParameters.classkSeϒ&!ZZ
-ɖ$,V+XTd	&݀h^wښA_8~?xγJn:~=s叿 H@2g\ 2W4
po
liniŢ8cSSShlQ]ȅdÂ#@uɓ;"lmOwu۹]W:i|RAR]4҆ef]mtkYe5ozYs˛;zGR50E*@c~bJ*55uUsj.WVnƖ@m+/EVTsQˮs<M]Vqp8ʈ;plXA%δٖ8Og)δٖ]v-L[&ۖiGҒɴemvy:jv&貃#kfM_E<qN0 iD,,4L:[+Kco]ŚZOꍮĶTE@c2nR3<馊> YAMv]Dd¥Sq88F)Bsq w<!A%\$\".	WIB&ACnՋq|a1
9X LMx*!Ox:aLCx&aJxFKxNx.=1½^AA}q5]7	?yySsEa1F=01s.qzy&rU^:qW&Ӟxl<nI:L3\G:j/vN(GrHt\e X-e T2CY=}w^?̮ B-mݷ厶}-h|]Q8=Cv?g=+؝R/D 诟Bn=(%Dyt1lOJFHJdJ
oqyQ<6E)!E9X#`Pߥ<0&RXI:>o1CEiZCy
_QaFiE|ȜX,<9
|q13&9.sN4N3jogyq"qf׏,PKKf  U
  PK    A             5   org/bouncycastle/pqc/crypto/lms/LMOtsPrivateKey.classUYSPm1ʮEEYBJ,,P6+();2Bȫ?xN@;}w VB/ኄ֑1)bJp6uF$HdYkGZY+'BKhgϦ&wsilF'U3mGXIY4-sKΕ.I#frk|ɥz3M316DDֹzky&Ŧ0wF*l;ycs6ܲ2܂cg(MD̊sKl.7Tڍ}l
Xڡ!q	:o;3=Ȩ 㦌[2nhН⸆$h<wC|ZV~Οe]
hWvJglu,ydd8ߺ5?Q5ɻ͔OЕU	<xw!Q4UT0P:U4!PqJDخS5*T<cO%Z_A3<ĘGx CLA+aKbfx0Jt,.PeWˍ(uU3!tAP Fq=ri z&p S~j#DtY"fUEE$Áhyaf0HʹpI0Xt)ZuUC,|tQ*h1W)$XID(uu rq]iml~
^<Q¿=PKj'  G  PK    A             4   org/bouncycastle/pqc/crypto/lms/LMOtsPublicKey.classV_Se8p<"$ydh	J@]l
M88ۙJe]vQPaXbYCR{s6@1Ϟ}?PQ* V1[Uw &HC
(@ & hTz*1u imO"&QQϠ6b ˈXP4-WFX\$y 'TI *ڡMWODeǴTu7bV$)"%Td&ݪ"jiJ.`uED0PPSD2I*1_՘Hs0R&d

x
XuL9BWsvM~,nQt6͒z*FPD.mVk)'VJ)L>ͨdʨ39"
҂ͼ}\8}I'L%"'%UWt 
zV\C46>ڭPۊDO8hSs]0m ,O3i죷?ΝBW2MeWgWgܳz<sE0@Oަ0m\S`ZѨz':q=Z"D,NzDlaQ%.!)bj.Q+b:[Dlqx9.
ۼYSswPV:	Clޙgoάr?lL7i)']a:Ԥk<;'%7<|l!\KZm{QwN@7fó)P0>3UaY}dz~69crS%Hަ s	\;YsʨG",!1؆eT O;"_bŰȸZXYQ c;=(]2th#8"c' XE, 2*e܍>!2#,c%$Zv013%4I	ndpZ1(a7<#Ô1x8U	^#^(ޕЁ'${
	/2xI<%a?e8K@'Mqוq.5	ދyLe`G=#Dm@W1v+p^nU_wliP>Bh%=&IFyg华$QXoaB	w9q|NQ'x'@s5cxz)|s\|frMZ:bnM'2nrǧ$'yT!p*83p?7?ZE"y=A-BAH "gbZ~\JX l_ÅQV33{,zUCe8V$?aPǊk/?⠝k'.s$B
a唈;Bre!-W`lBXb/젶NPOTjd>ah c̐ZNSZ#Ml
C$q'%6!Ⓒd6#%-BKgHm5g5)Pz,M߳x{8FM+Քen_W_PK`uh%6  ,  PK    A             4   org/bouncycastle/pqc/crypto/lms/LMOtsSignature.classU[WWNnƑU-$j
(mlAZa8UVqŇV
mV}y  p]If$	rf9. F<PݜRpeы54-'TP"fXEiVjP/;T/PdixԬ9*"%eZxMhgj^wt8fSOBڈfZz/WxΊBm[-Bətl]쭻OIM'gZ=Z
SgUcΖ<ڼ41{Qל쮉Jy\Լm-^/QrrFm[v6>kLEZ\Ǌb|T3̄SW2&sYSuJ6-kSXwsk- FkdҬɹahX0֔In{{P,A_%!$)	$<-	JxNwHJB`_8)HߝpwzcWݣOӏ߽k>ncݓ@ez©a'	Xffi'O4(^GG-Z%4@Vp N*x{::bAx41(϶(C$VD0
l;1/*%R#`2
`Iax5G^;21#(d`
aV .2\qޖ9]!L2L1ei!.sP{.&UQS !D8/ZM82< iHH
HlH
̛愢(Zxf$2{1D
.to3lU`oC5$g*Ë5άPE1]7HĖm_D#E[
\^Q*08SŵVQ
ޯ*Jc+~ <D`KH#G i^K='} t,ѯ/BRG~2's|nӻF{ID߷D,4RsW?]Fdx;$b|M7 \;EܤWu$$}>!FfDNn]<$㵩vGi܀;9qxҹQOInZw]^z*>ORq
|\#e{PKfMP  	  PK    A             )   org/bouncycastle/pqc/crypto/lms/LMS.classVY[g~L2aRSMkC X@
j-F$f&l-}Z[(}hzѿ/-Lż[޳9f {{8<Ձ{{8I4 c	l`L~5h>[8p!%Lݖ1	%P?b(ɤ<B"65&kSQFti#ʰ1oyŐQQh&'$ZԨ<?n):2frRT%Ieƀ}4c&<fT4&dEM!٧ɱ/iJTԠ3ZJP9RW%L[
I5mJZޗ{>}ސ{}aY4ZFx@ѻwrXOF}T,<uCS|Hr.!$.s$mPO*з9Ak,1GZ υ8oE3կE4+`}]ݔ)ϲAՊlNF(*U]2X7lj_7l{WvdڨbHIGe%P.>lU@ lCNS\|/1Ѳ˳t]Ek=!-@ힱBJ7nz"źݒVIa~r.im2 ұo]ߥ!Kq.pR pxK?*e'j¾$ٚV6XTEU%Osٞ*./mix=VeΓy.
]woC7cd1%a
J$<`R$< ^60XM<pHX	A£pJ؈G:%TK^1	+p\z$܏n	OHbP	q蕰
g$Y	FEĀC&$hU͈h(k"Z2@c`p0gEas"hg1/@ap^yGb024"  AGy
9f19|CNtBiWJ>ea<38o $ՋV~JIw/d6+&*noo7n`4LP^x-jL?y~=O[ew6!u93NTsوӚd%V3{xv6<p+!!CۓF{[K,샜yoMwM▗<T!ggM*wv<HB{Gm_uQV<
Lzi9@~R$sחK=?3SKpNەL~G{aDMNe.)+ut-2bL3cc93vW.[sK,BpY[6m1]ps3gX̳۸[n)O
,!	8,U@ '1IFA?PKd    PK    A             0   org/bouncycastle/pqc/crypto/lms/LMSContext.classURQ=7;0(,*.25 ^083Aʔe~e,aKA(>;ß?MvC  G7ArrwCf<0/ִ^ЭgbFرdŶBf?V^>dbcdc]3\I\A˦[eӄzN3-hi|hڢdfm|ZLazNֶIji. sy+gG>쒊jfZeCsHuOB.eH=8S[[RGCfKD@.t8hhFH/=Ir)Kt|Up0z¸uhD=cky4:3ROgijftC*v2Bi⥌}X1.ǛQ]x'_<W]ykJ)4=8;naԛhBny:6}nHh@^HnCЌP$>4I!	"I.!ī˸߀Lylb3i#yl^a3KbV#EA+{=ɲ==	=Aǹ$b{MI+($
pJO9'X"*Xbp 'BZ	=%Xp8SKfche/TcR
GW$IA!x|މ6qp#V#^N:a./x1Z#1۩R5̍\V<zW.=}8DZ850_]]W&jb̵C|8.:ʣm~UzM=/#%U		 PKO    PK    A             ;   org/bouncycastle/pqc/crypto/lms/LMSContextBasedSigner.classAXONT׸Yfj
ĮD$|@fÖ<Ogqf<_@\&ڐ?Y~ʑf=%&1Z3ɔ͎UdVMv2ᨤ׃dwm`*ЍC^O>^rH
!%ԁ\4Z(PK'߫   )  PK    A             =   org/bouncycastle/pqc/crypto/lms/LMSContextBasedVerifier.class1@DgE;)&vb,L,Z/..+Yx eVKf~<,0eJf6	LH*h:46ܴj]T])VPyۏeͧ=5}lx&O<<?Qw!zyGУPKHN      PK    A             2   org/bouncycastle/pqc/crypto/lms/LMSException.classN0?7i҆
X46b+SQnnBPC
},H< 0	}Cc43XL^OKeE$C/Փ7Xiĳǐ&+OV|z=0lhy"3w.WbFoy9y{hlB%8!=>yn#%6M_e8x$۵<yKߖ?)on0t ?	JmѝZ}h/G8|PK-g	    PK    A             @   org/bouncycastle/pqc/crypto/lms/LMSKeyGenerationParameters.classJ@-mLm,.IʊR"CR'!o(.| Jłx	?|ż= AeϏ|O,i*)"O]=NdPB&a2i,=z8KT (DHd")?oRz:?09W~(0lZ#ذWDT*ég,al'm;'	NB,`Pb
5,iDt6uAkگUAk~ڭhVvоfP=ڷ2PKϱ*  |  PK    A             9   org/bouncycastle/pqc/crypto/lms/LMSKeyPairGenerator.classmOPe+jP|أA
Q[1Q^uflhq_Oe<w-v4{~{ï~ X3HtѾ Fv2]5L]0Vb&5`f#l٭ܫB^J[.'ynhlˆNnI|'xh=PS˚YRs=jr~`nM-kcAw35wղKj:09n]*mFOV<$YйrQRw˯aZXeɋmO_޽dD	$Ip^	%LH$ᲄ+VZZt$|d`x#A;7XrrӵyOTIydfv?&v:1}JCIt
Ћ詚}nFZA7!(cDA>
n)Q #b
sQ$]'*eLaI4e>oe\oʸ2۹a2R+P1e@SƩsbOѸӚ ꃱO|JD[R:ֲq`+#<c};Yq 叇4<yK_(%~ԛXG&,ac# PKo    PK    A             6   org/bouncycastle/pqc/crypto/lms/LMSKeyParameters.classe1KAߞ筞QbglB;TRH"6!ݞ,+
	͛o_O HzOW<s[x!O)+&4{sS7:ZW	9?Uc7Lct)::Ukˠ.CS5jE'K\b~ق",!hs$*IHVȱɩ9 :@? A>fn5;WHyOa]PK   =  PK    A             3   org/bouncycastle/pqc/crypto/lms/LMSParameters.classNMK@51mZ[ExZP}BEG/=y3{x}p]v0	C;jx݌E&⊏ ݩx<ITO6Y'}}Hٝl>S)/T2u4tl0y*gẻcrrhۜ&6M0M`[,Vb9JU50P!GFq_,0p?x4[G3	PKe    PK    A             F   org/bouncycastle/pqc/crypto/lms/LMSPrivateKeyParameters$CacheKey.classQ;OA;<8Qh,0X!h,u#ybggCc10s6<27|yXjFA/6C3w.#BH6*!rxqkx!wO
C_s}="`3]b$
ihxsVy }~)S37\$C9Zt°WlKL"X:f5AK)t]7..|pĻ:$ٰyz$E
-b`/>! D8Ʉ< V~Dn<
ִZ-
7XDw0{XGIˤg-q2uX
"ka4 PKn#j  \  PK    A             =   org/bouncycastle/pqc/crypto/lms/LMSPrivateKeyParameters.classX	X\u/CB0`
#YXA=B6Ɖx00AAnX6K8촩]'ꢴxaQj޺^wM}Kf`*|'{gs}ou Ũ[<Qy`ԃ=vsO42rÞVZKyˌi)xX"nlQ(Fz4i*J=^#5S[l12b&H{56o4ti߉;4NۨV(p:8b$SfPi)Ztxh%F)&slČq3
'[Tp$;n1WcMkI~$3a&iNɨg
rΦdF~h2i&G$0S,#)xO":oVڞ7l)Q2kJ(uHdČ&ɳ18\tꐽW⨐1dR6esΏ'1mHǢYA@jdoJv4Rm
tx2_oH
qQgzɄO[\(!6Кh:NƐBef#m,Yi?g,j\ޛ,jH4ߝnXIs/s8Vs{"*i`&3X3Ӥ̢cNcDb~i>th&$sGZCX4gd@Ch"z"J޸MIs(ݹahiؠ1Jє	W
mvsBbѹ(I-QQ FĐn)@n.D+y
JnBڍBTd.v Z9-*7-qŷ`JIxIYjeUr8?JbM$ºEs)NĒ2U60l#9ґ.f+-+	ڞr?7A&/^g#A#|L6M[O]˓+gG6IlT&nAӺĂ̹6Z`Tj~w-t>3`Lǎ9󶓩EJ{B_Cv
5ܫCCj8>
khxPC4hxX4_Q

}5@b;;T]<鎫WGl]rbDdTв %K3/HVt-~	=-Ի#mKcJk7w߽֫*j;޻af	|ɌsSlcmKlvBoe:Y/k[z^[Kn!~_LM7*+qV*nmf!Rc򬹰̛Rżw]gwvaҦ-Q-,Raئ|n)I׶|%*<y>),5,Ǐ].jf%m]Srt捐֗7XsE^Qy-(t:_Gq'tUI^1WhG`@JWe:v
4TbX^+E*H
ljFTgu<
u:X8.8	? 	7%wewxUaLh#/Ch%xC4)pY~Qv6|E.|Uk::RW~U~]7~S~[w]oxS=?G4S࿽8?@y!;%?L@#218B]oyj)U$ʋQk1N	_	-_[@(i|JZ)ڋO/x @Q^S^<o	/xi2
T,G\o~F	3i=Hڈa\Bb [&rIezX-Sj`V3~^3|h#ָHr.(er4Ci;T7jBI&պ57|
JaUzUL.WؤZGՎIͨ]%2wCT \'b\[%bFh%!'UжX$EeOlWf0=/<!|;q-2'?uϱnJm<Y<]^4.	aF=iwX&W5nZ
ӎpWh$"jfq{&n)wOBRMӪlys
UQLsخ:fqJ覣'MjSG-ቦLWzrga9̨d٬^6˅%n:殽oXRA+3Ʃ9^
pR)lcSE3E9Hhז\sb6L9aJCxQ&xiOuaV-u':.ee.mFW
|4-ȅ\E/.E۠\Ft%enλzvp#im)au'{-MFz,XRN6iUN7z|$*"g;>(iSꮉP4[Ty$;33lb-)uxSb4
Թ=<ÆV4ea[*ڧYGӒ=8-*Gɥ\oNn?lBOM}7Vʝ.H 	C.PZPg&
T0
_hr/ܶ3OqjmgP|tfm
<R3D
yie5δG67ќ*)oV^p`Y6`RmO~aڍ([bds/r5!OqsZJ+L!mڜC}k%<](b['GCՆ_26c,OC:bVѤ̌[ņ9t1U	x+ri."g˝v/*D1D%Y;:jYg֣]vrN\}&.m̮>Tցy<DzP=zv۽i';lr4U\M2/(WsMA&t\-gTV]РŠHY\sp.~ZN뷲 Y/3B23xθ-&l=Ŋ-rHFׅ
֠L[`O_QY&&r>Hʖk^?hgý(4*6=^UYj㇐JɃˎu,I~"9NͨS۝#v4=ߔjeأJzi99n_`mbj&ISVCp5<v^Dܻ^˦J8yo]jT[є<_ PK0i!  d"  PK    A             <   org/bouncycastle/pqc/crypto/lms/LMSPublicKeyParameters.classW-yeS%
e94gkH 'D	YaBLzh}r8l0Ѓ(m:e7yf]=. ؁D.Gp@@s'x,?>:w͏	hy"==E ih+ZrY3FDKeRGxs4[@ʊek1bP"UXMCFFQ5KeS5
QgXkEUKScq($UnGA34lM"$zoF;ф{	*EyAhmVmhFZ'vL"i
5!]IytQxtTN+[26'PJ.QefmM>i4JR]1
kE
f8
r弁]`>N->WD f"q5Cy2v[eBkIqQM6+:*k)5ZceL%;559N=5]R,*zQNjW<ANX~(6rD'-,)M0i__KQa2aCo^fQqz=,3?Qcj	,tpFL͎c#4
 @.Bit DZr_kTt}̗
҇,_OY?t8wz&lf;T\}R{,"%b".b+E\%b]"v#b}"^-5"EqfVyvYT<YϬp'WWQKjm'p=9[,vsR/兓DzᐛxzU*^ ,Ǝ a-7_-hnSA]|n9J`fr2,K:`ڗԺ}.z@Y^Ԫ[X
ZdEwszݙY/po^
Xv1*(xB2z}chCXzhahȔ?H3\Kdt@6q-nnd,CL](˸dt
ؼ8AS*2^2eo"ͬ}Ý2n[eld\p9V8pH{>		Cx#1|RBe4W*8p?g>'fE	$_|]J$gF.2|Y	|cY!?}ȫec-@Q볃-ܱģf}hBM8;Dr]YiS>w<@&d*\$x
8"'NsnizU1g,'xhȮBU&	® L9d_W+4_C!d<͠:G3UiU%'wԞZ8,B9!VoV<>O8K;9Q	a'2B\aE78J3"]lH\$o;
濑0D6C\Y#9x1L!tMj#΄_yL{D
5ݮGg3IKyNQZ{U|:
'|'Vt2:1ީZt{3B3D&k(y7ORwe9IX{Tҍ\ֳE\#<Ni{;	\q{nM\ݸa4.pڄ>9N6L{%w=x*4Uw
U|R.<R\x*~9M>n>
n+?1r*iC}H^wrGP,{)ſ}?t4-n:)q~-4`Irb\׃w᧰ PK`    PK    A             2   org/bouncycastle/pqc/crypto/lms/LMSSignature.classV[SevxDP21S$3"/#Whdy1=lc;3׫V|]W(/~CBHWוs=ynD۫ثZXٶP8 fK
MF )'BA>*jZ$
T5N(˼9"$~AP4%NKpt6#
u%PM_"z++z"F8G2jL@m#NF3(B"^ap>3+qR-	Kʐ-Yq+K$%Ys6FP$XwՔp45h-`bH
L7.(uRztEB`+.Yt"/(uCHjlĂH"Hp%zĥ
]mfK༻A"u*C6
\aaf̌qUn
jY{Ȓc#p@W	MKf0@N쫋lQ(BQ%>;D/bDj5""jEǷ
]ɒV//?%jT(9+ϥJJ1KO9I}#Jnj5n-.{-V[֯&fչz}ǹ9+Z}\kAw'<M=2@Ðd،<[adg/c26D<.>()!e1蒱Oʨ2+c3؂gNٳ9
Ch21%4!$ t	xa!0,o!ZcxQBN1$0pVB;jiaW$U$t 02$%Fk\JNh7$PE.!QXP	P}0( G v+m㨘9si9-0K66 q8~gqڝ덎Y|lfqHm
~K~kr:-eVcAk.7[sV8k-3Gw
|́Y|᯹&S
vQDMp{>tA
۔]p2p
4hD i`5I'MfyĢZT<1? i:4+
bZȦ~4\%|g57aLRVEE
X'k~85fJo4Wa
cRxw^a,0BY|<9~1}	rb9ZmX7VVqw1O23t%|:񣓍:`IcC	ib<AY%?٤g	e3+)|jI.M㽸S+`8IC>0ГC<:oS9cYbPK(    PK    A             5   org/bouncycastle/pqc/crypto/lms/LMSSignedPubKey.classT[OQNuK)E[lDD%`x]6eqgH5>07unK,493s͜g xV2\e,C4o->CX
2]q\B̝ndzs)9_6
Rd,׊e<2v*uVMݜH-Y40+:|KRq4<ũS+uCw=*;fTmWU&ZX\9"Wm3Bmh-ϡgٚ?6hSXxj1KDI"Dt3L4p+GRB)ߊQ
_t	M[0FY=UTHk'e\fUFdG8!eH\0 
Wd*#k11ȅ"*C."˅ňKpbXBoS|01JGOC|Ӎgz1gb zp!trz\IG/&KQDtB[jvcjn-f`4#Qcmx:ol¬7{
giF$"/}nr
]H9OQ\o]$!bb;tuK3_g	=%B!Cf\y|Gj3@nB|zI#
Q}*J6vqPhR1TKV=%PPKW+    PK    A             /   org/bouncycastle/pqc/crypto/lms/LMSSigner.classU[sF61YGQIB ȎcRp7vbJ7Y
ERe9
}/}(30Li_:LgegL홳gϞ;]oxfdFo2r,3dzaH_/
'52]p<'Hk0DhFxzjFP0(<oIkFgRf19Tk+XTEi	Uߏ╌̀ᥛi8Q^^AdluM6ʮ+lӽڭME)=N2Nyx\),wgZ!sۚ5
[ծjچhkiuD74*!燶Q[նf
#2D-(gn6
:[TgMp䣖/E01{K,}B{nS<T6걒V3kyf67򵆐'v;	3=,-:ߵgq9pqks8N0sv\NCzU^E}7Vg	n0.sĿfDZn5oKi]0WǛM$˥kK{[$"8TL⬊1dTcQǌSR㜊	̪89
.؏Uࢊ`ޢKR\VcAA+K1yHOQCj
Π"EU;PEz)Kdڨ5řПҧp@V@cToh6N#q_~;?zwp>Y	 0[[4癟?Ot;ȭNm|6Jyz+	[}[g`#6y|K1QCyuR崮'y.R4Nbi>;;(n`g۸ {H$Xǳ&"
(r>&/YJ3t/<")dƿPK6    PK    A             7   org/bouncycastle/pqc/crypto/lms/LMSigParameters$1.classr@oh|BTC Z-ֶPh٦+PӀILK/C9#
0]v/ GdjXcwFeS0
5M溉L&C vDOfQUl#u,LvLXnmS=?۴\a> :gu4ҷ A6%38x<כynA<:`Ey~uvI]bZijͨmQ=fs\HdN=jYSG`,"pg8<=÷
ƿ]Z;8b7?|d%e6< yT\2$'"P(F\ĨK˘qL3Lab1017071瀨p*܁'Qx IL
<<<Ǽh&13&ża^a^co]P o	C3^MvVy!b)Zuˏ=A7/.U	$	(K(X"`Q¢%	K%,(J(
hHhI	Kؒ%`[¶M	%ؐ!`J"|\HPK\yg  e  PK    A             5   org/bouncycastle/pqc/crypto/lms/LMSigParameters.class{SUB(WK[JC$
-X
V*.Mݠx'meP;}9)YIfx޳{.={3K@tXq=7X875AbL&C[v`-e'H:
u{	Z_?єҪ%vhNعٛ=С͊	$w}۬^ٴ);uĭn:E*[FVe&[^.̈́뙣uٲaI_;ugw{{z}utx;kdŞ@Z/[ՆW<(~PqLbm/p]:TfːڣYԂIe:'P 戩,_n3PGy߮4z#苠?tGpsC9'p[k+;_(YvweIh5Shy)q=5ަr)˲</ȧT]iU	l3p3(^L`$x)Ac1e1Kˌ)4*#DG&^|1
[یEM]x6Xf0V0e113g|`|GőŃ8]~,t!OYIX+;>m8OA7hl8㸎:8㠎C:qJ+:NxU:^qRǋ:^1ox|A<PңC#iL?Vzvz/yScMO:Dhzc.$,1tUz9m<Fi7|;_˞F,wQ)-~7⇧oDcl'0FJ!ThT{RH4'U>}W.cdmg/KMxΓ:ݕG4vR%UJKիjW3TJ}.U]@UR5UJ=jHծT]aURSn'(5w0z3_PK[|  *
  PK    A             ,   org/bouncycastle/pqc/crypto/lms/LM_OTS.classW{|S&$\)h6TaFM"Ŷ )(,ɥ
IIn:й9'{9p8Թnӹ{=Qι7Mc6ws~{~߹pq /s^tIp54۸^иi)ئi`M$JicQڴq#,JbtŮ5K;I(ݶgոp-YFiKY$cX[KlW{k$TV]Fl>d(wP2 [e.a;H3ƷxȘ[h`&gJĳaܲL2wZM0cID""<&ȩLLa9{V2^1H=g((ǒ7Nh3P4tP)4v9Lڎ8t9X/mXCB5T1`RPAM%WÎU$T-> k`!ΰat_ޭf:R9@Oi3KeM7>H%s=q#Jΐ;%}3fq*]lgLxpw-
PB:9YIAdtdɕa3ɴn~y(/>rGgȑ2vA^2Cޥ`ݱ281S͕Qnu-ם<DYZC9#zנXv4h`6sH'ꋗH_oѭ'2U?`X~9ZtL,MIj8,,\P!ػ`줋3`.0CR^!XX"T`r6WhX%p@i
V
gZq=feV~W+BU<,7cyTr{*L/J7W@J 5; :#,Rcಗ{)Ӥh,ZPvƛukA.IAx=ծ2֙hkF,,&/VyϲSxY˳e*_JǶܕtm}]MS"s%OMM"+_r0g6VLJEa>0p8.f0[Q1BŹOyPTDT19sVE9ka!<qa'OA'nPQרh.~UYQlQq&xyاB*.-*.ǭ<xx3	O2|ᰂ^ܯ 1ưဂpÝ2gM5.{>-x7ç>d8!#
aI*؆0|!pp#e#W]
2x_56g }-$OYFZoHW_Yqiv)JI
AH:҃Rԯ!}j@W^[o"_=d7IA%ݡ#x^)X&Ь78KEYU7iqu;DPs<) brr,v-n㱈,k2Ǹ]95}<}ӳIN+
jQ\+	%M̥EE/h8Eoۣe1JMG|5]p@RCx$*KMy|.ˮ<n].}(%v3tQCB8
Ma<F{]y6hG"תQ5U_E91!LE`(5V=kݺG.]8c%0(T'id{zJ;tިJqS1N9k6s.ct\T@%xJ#(@|Ձ9q&ļ;QvbE?bMP;=.<nJGg'dnHkmS,P h
ٞcuy9MhnMUE9%'&M&WM	xw1{7ifMMb4yZպY=61t^ӘD63+Rh4StիwH-rGYS5"l7~<Q[1q)syOy%1Ms*c^s1'1DgY90eZ4^@,<pc0U:?jjoi{D9ϒ R:J)!f:?ׇ^vMFcYy?IO!y'D2_D|$oL DI>!f1̔aH#ݨBdɦꊮִj~G-tU'_<܊jt9FYHPjb-x@;<B&w?iN]MզFjZ)'YȡX
):$m.M&)8.x^n&=1܎}E3~'$Z
|
PKS	    PK    A             .   org/bouncycastle/pqc/crypto/lms/LmsUtils.class_OPƟunaTsVfD%LMWgvg%~	7@/MPƷ[q\>ms~v`$fZ1om7U{h.vma3Cwmגi	!Klmk;bX9p2^gϳ])gGIsrcePta 4(u=YꈒK	90y a'=mls`LGuhoMm+2}k*r**fx4b۵biaI"OB9	]y=x5<I3F,tXg0%,Se1nPSr
K4q7,;x6m[r}^#P2GbxI.OHT$p3zC`T,?}>&ڑg\JQ2殠UF!qjRHSU}ĭَ^D;
og	151GT|!V*dPKy\)  I  PK    A             0   org/bouncycastle/pqc/crypto/lms/SeedDerive.classR]O`~
6FVPZ`~`a21fXK7B'k/ pཉxN1[s>} A'r..	k6Zc_&:\zUvZQ3e8pQZ^ӊ.f;Q,=3,5'yFSj;Z64}S঺&Mғ9t՜;[̿-he(YZo7PҎU+mjBe씒YO|][vdI6)]lH谣VHdjlHMmKΆjIlZ{f\T- DLo}:NŰi~azK"Q~7$
AWⰅV6200 1d㭸1e͕t},W꺩A!XH)#Źlv6	(퐏1#+GG1u 	袚ZuYO`ⳗf/MwAY;DT}T>;/Miz
/
d*'"LUD'Dcp]8fyᤊL 5y=OET#|xqb֏ee'KVVJ˷z
dcWHEwէ;?PKF    PK
      A             !   org/bouncycastle/pqc/crypto/mayo/PK    A             0   org/bouncycastle/pqc/crypto/mayo/GF16Utils.classTO#U?3NzGdJ#lWـtۡ4Ҫ5Bt_M&-/}0Fy5|1G .wڕ腹 <C@%fCYa'&	D'?ͶX$?qK/NzFZaA!}nyur oMMgw7&٩nʈy1oo钻z;bB@_-rE<pŭWXby%s+sA;(
s9<	.Ho֪ZݨB^YKr	>U\Q`(C+
`ЩB
*0  :(\!
c:<O-BnTʬ[xwTscϖb` u@c->q-8ZD:$KhL@^zƴLY2nI$;p_3ԢVZhÙzF6YǼN73EeX\s1UVW?WfJC!>m!MΚ8@C'*1A0d>0:]ї{T*]QMrBKN,Lw"䘒e&;pfjEa2Y4O5L¢vމ60Ѽiz_5B<Yiy'>jqA
) $:}F6T>O6*$0c듒8Nư8|̉3S	fp,N܈(wbjz$qbf8D}
4 hk6*`WB燑
I`G]1;<3F)PG3~knz4T?
K@I?
:?џoX _~ŷȢo3t'-I2ʆB_Ȃk/91e<3Q~]N$JXĸ4H{~#i~#>nIDiu?\8҃Ob-KLkL3uMŉ9$4$uNXD0-,b?a_"jCo_jF!ӣ voJBު;[OoGշ+ܧOȖ~
-nn[nn|ꟲF;!w,\g9BIbˍ
qMy'$>4}A1Eq D=
*DH$7PK0X7    PK    A             B   org/bouncycastle/pqc/crypto/mayo/MayoKeyGenerationParameters.classJ1F۟[uJwQ7.DPi(#N2fR!o.| J(*&}~y|>!e*\	7<VsP	^KɄqXC631BWʹ_AQ5efag+݇aH/5gYΪ O|xL	ɏ?i6":#Lbӿ~?jʧτe_[G Nn#j\vz+PK,4g     PK    A             ;   org/bouncycastle/pqc/crypto/mayo/MayoKeyPairGenerator.classVWW
	Þn6@jEB(C2
#!%vw/~mϩI{LbQ﮿޻oLe ;_+(¢!Frm%r0ꆽ`uhfL<K$lPb䌲uXi'jf!*ΰmdĉLæ$LȌXi#Ee̥NoД4Ӧm8Y7,b'Mg80Tp\ʕ-?YcTSf<f-ΕGhxDR55v6X4&	Lpͣ4̢Xq	'F8e#s']cRM+g,Sرlִ'ma	Ih+
g6ҹc.m.9)3v2<ɧㅸsRf8nN&<+,*m+>leMzw!㐷_Qj)ʤg=FJ9'8<8zkH);{*^f,LH~̱RTz`1ugvoH{na[˧?͛UKY6<|)rwBBr0I'*ef>dإ&Mb驱'32e4xH6Ge<&#,q2!c]2tOM%psOEwP"bKZ&n6\^a
H޻a];r&FKtr)xZUIEC'ư!Ȱa=[gxU>]؋j!Ԩh
*P
UAUq&T܋).p\E 'T4cgó
`C(
"`'â8 gxa`c3$L
F%O!͐Spq?&>FvҘKMZTїzLY$}䧦HVIdu
^ [@o^ƻqgo\ęr]@}g8<^O~ϓ~OXOOL=sS<K}OjճtR}_|p-QBhxm#-Vf_֬D2Αjx븦Zɧ5].{.5hjI6i
N3F|*h
)U!->UzOtE@ER!NѮk]ZhZh
rArkB"~جzCtRmV.\|. v!(".\;h
-H6TyV1<ش,e_b3W
^П@TW)#A*ZI\A:hPKzH%  +  PK    A             8   org/bouncycastle/pqc/crypto/mayo/MayoKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF#}0@Y26,>D0XC]Q$a`ca`b`d`b`gs~J*"PȌB U@PsI OfZt2md` k`f*Ҍ@Uk4 PK}Oy     PK    A             5   org/bouncycastle/pqc/crypto/mayo/MayoParameters.classIsU{%~#{		 [&Kȉ@pdYek4V"g[UTqPئR(NN\=zOV\Pz=/? vW;Hjϟ2t)*	ɸ@py"i	\<pNEũDtmXa`ٚp#
f~Ks9Uw#IWt9$9\I|^#J3kav-eQGq<Z+K[d>]<7'LN	ty;NoRӆbɜ4c,i1\Iۋ-&Cd!oS:m^#;ZqkW|R`>(AX΄֋T-t
ʵ^QIh,c.b)JcDoyTŊn8'aʘ^2/ϽaMg hJUB0>8H"tz	}~I)8a0E	3Ya,D},4ap FX!L^!JH^#^'AxFLH	)!MB6	Ya`)nYi=YnoQ7MbiVSz\'s=u4.\rQ% c,`<g:c wvԀ{Z5߀:N4emMuPTـ]Mm1દz(jπj@ISv*(kbMo]M0vkj>"ߙ*:W®}g--k,=aYڷ}.K{WYW}.
}GaKK~aK"K,cMa?
m]qF,o#.m;c%!]˛=:Wbqhq;_!ˮlɮ2nXş~K	lIf2[b
*	6~X|H?$L&he]lu=[ft3Mn6p/a!c'fs^rȼlL1v۰hC>Clɫg
|ZE(6fn͛QW#8GlnPK368q  
  PK    A             ?   org/bouncycastle/pqc/crypto/mayo/MayoPrivateKeyParameters.classQMK@mҦjoi+,
V<P(`7K	M
W
_[aμ=f?^ bk&C6(J"}PD28=2d}TM:JD.Lǒo*<Te
T0Z`&SKEw?#D g+Ůۂð_6{!eau\tQDEXrb)-jձA@
ݕxJ}ODg*&(Ka'PKo     PK    A             >   org/bouncycastle/pqc/crypto/mayo/MayoPublicKeyParameters.classJ@4mhk?wiDEP+TȪJC	8,VŅCЅu1wΙ98Co:Uי89Ci*"Qdp\B
2!ÁCWy*
M"yv/EfETeF:I#d!(I,~;	:*e6j66cfGݿv.*(Ьc\9XA&vI.4w4O"mAu6iF`=c=`ٴAoZBD>PKH9=    PK    A             1   org/bouncycastle/pqc/crypto/mayo/MayoSigner.classZxWu>ǬvqWծ_CZI^%D?$VlGDZxdIHƏ^S}8 Q!5(Bi)-PZ(rbǦ_h{s=s9w/}]ܯڶIvֶbm榶MNdSxDwG/nڱSpĻFnM`8nsrv?/EUq[`Rڎ\pERtTݚ*uƓUWK懴WSuUUONX6.PUSț#`MzAt'zCe2q#ݸ}^ﶍ.[^۴*`lZ+{ݰ86VC43:9QZn /<02<P(
PĶʞҺƷLibJ5Ps402n}p0344C`ߪagV].an59ĺ
#C0'To.O(a70޲X
۝bfʅʞ]VacU.l\=6"(&Jc}o/]9,uydHqțIcJJiXZWv<F1XN'2T[w'
	wzSi`RD	$ΓF*~%uuLL/T:>T*mlDh{U܃]29n[g0&S SSRiOqzV
š!Ilo2bcmkt4m:yF br薩`\ls 8\-?2;kdrx`z8ƦG'Fd_[(Y]#~Ұ}c
u]{mn<L]h{Uѷx=ǋ	+Akoe}De}%pŦ^+;k2^u`eg^8uI][I_-/%t׾ ߱xQ,#Iʘk=C!l#U*{keBã>O^=ynZJFԟQshj@kP|owߏWw9OTV\J?՝|QJu~~Mt*T-:4ӄN:	S:MO_:u}jVm%}V_a>z\aW>:/hm{t~2Z.] oe}WJ_vnj;锗%]$Uͯ7]̠#	O`ac֓b[neaC/0lew2lc{chn&ՠI3h'&A#3K4Mof衐A%
t="FAo'!f 
z%A$ZKM@!ˠ_gXMivQAoA-4FiAUZlеĠʠkXrlZV*fP7SGbAeA7џt
i2|?1sjߧ(3!zJ	0BQgd/!}_b2ß3|/_c+350|ow=M(=CpYGaW1  1t#Di	C2P(jNҿ=0//΄h~?  
>$dۋCQ	-~5RI>
|>d!KiZIyRhwεCc^8>Pbh)(}+i8A/QC`q5<;>MO/S[s'Jh44=N*?5Z/O*Ae1((;~#貎R.Q !0'k֜J9ߩضT:S:6;T:Sym8evĩ\c7:=Qc"g^vVNd3eɌʶ_N	(}HҒ`A4$څjFڭ,f!BPL٩-$7g,UZl-Q%N*-.UU'RaXTkYNZKgMLhm/WݪmbEv>(V9j6C@'rb)"P^VTS핢Sh3VXf-ЅzXYU^TJV+S]+``woPVHV/`Zvݝg*"<OL-j򚬸jǄS"-swWEPS开ቪHƨ+Urob5-hSt՟6(rǶIqh98łTL=3Ci+e+)ڳ,ڮ?%jakav1,5Uȷ֢:,Y,ӂMܒZM'[eB[MV̲䯑b[EXZC#A۬Vhڄ1ТjҢcVCA5[`R':VVFfm+sJEδ*{rX]RSbLb\bBbRbfĴ_1OQҦ\[
oZ[å㷔YWN2A;\ 9L%
(:}_u(/Se)L+eY֑
yKO`=DwP։R
"n>Vz)ŦV/6uyibS(BدYmJ%Nq7$ "RN',Mp#G4(6/KS8$.Ϋ!"2>9yN;􅘺,9R5	SivT<wúՅjUn!WjU6l-VfYdy{O_Ά4Fe\%r>oGܭх
у); 4TӚC tj§
kxvٙOU
 -هϛBWdaG?ЈVvTDlS41,cF ICoag^>ߠh)	3e޼>Ij^
Z!,ν*wghJ;)IErVynA%
ogWJȁ>FRiI&N@g[d0J~tFjiPJf]$DnQEGx
+tܯU0y=MXmUk̫(vcmgKlzahH0:#]EV`p~^5jϝ@?C:.)uS
^-iEwrsd<K
|3RPiJLHQւEZMRX˸h_c=ǽH}5Wf+g	vPC,ֿFeXig}R֧`Q	
O2qLՎ3TS&N\]a>8;
2*!k懔JKUY-ьC[٪	
 U3VTd0dZ(dzL4"6+ͶjaUkL<N5pD\)vBpL32eMbVME"8XO

ٲ{<C&T0g
UӬտkFܕUl"N 
BF^waSidY~RV}Y =鲿0Cϊ@
"{@D>INʪv@6RsͲwiΨvVd)X \+ٮT+G+GR\94m(լV?7WcX.+:#+Ξ>a
"-Vx_\k^4J T;roL଒>>_M`qҏhqF+ps{I̓2s a1\|]GUsOLaR{(}FW']g(_v]nf<r&cXӖLF<X6	-$I?e>Db޿iQ-8VsuCVph~e`anAKǁ<
a dB.C4
:k)%A7a`"̐퍳#"+"]xޢRv!JNqXMpvsɬF^ѽ@T-MW9s"BH5?*I$,b9^928(slVNSē:Id>r#:ac=~|	"Sc
/sCV3<̐2}t~p\6u3M;D:0qNy7ly*r#)p^pavxy,ŝz.;D 
"jpٍUN@U{I;q^K^̿9w$>i5}\Q%Y,*엎f fJ]pոwYjT%jS5j4Z_z
.LRlMhN|kMM>XkP+
	gdT`wT5v*+E>8 &9# t}1$AtGe0*2FTڈsҳ0s&s@^ܲ2,Cd`i½jjGn5
ds4"<"qd&0'	B=5N7,>a!s%Q=:	9R:aZDجztJOнTJ_0 IjӞfHR+VfoT<̇Iop"rZGA2HcYe|"z)x\16F;':gS^
Կ~*NzES] hJ;iDc9Zp+FDgbm|9^_v%Jt#(Z!Kv)8=9!HtaioOɫ~ey79G{Y4q|RhV$D>h#=bKw
}0!j8K%]=.sT/vwy=|{iN|
S6Qp	V'T:AU%AqpMKF8e\Xl7
v0'AErF9-apމI#Ɵ<b\*/VBQP}
6*#&.TY.Ưഇ7w}]7A*
ڐ@)7Mwhy2R/R]^3Qp\uJ/(3T´8@uwb@_*s{70(71Ϝ[`?އ-\n<Yk)\WBNyϧ_ -d% *|Gx6[Om[G	d3ec!QaCΟgʼQW~ZqROx]b@8.5(]3ՐYaN⻡9om&lܭds@c\	(&gP>N<f8́ FD M+37XZi:Hsf" mM^2ӰTgtz!!ZPn/o&yn;8
S"|IUKiICs |6
fa拋^T܅R/+%uRtRJW ŸH	]NJ2B:%ӇڢlV更V{)RmqC4rh?PK5-  .  PK    A             ,   org/bouncycastle/pqc/crypto/mayo/Utils.classT]We~l.KKH)ҏ +n+P ! jdɢo޵x9*??g6)JZdwޙg&̾?' o !K AD	BrW%ʱ)foXOeTշt-7hycZ8e3Rɮd

y{HIvv}Bf#q$ȴ{gLnsLM+s9:jDf#8FTfu/l3oʺ9JUʞ)|>yyglw0SpWImh e-{!ҪRr3]&)U^{לf,]͹NLMfBwgxV9|v*1qBHEdoidm}H-/漵i3J%8ʓp\]!nQGI;AǲH/"R!\qnA63]z^$pYU@ui6rע
'Ģ}Mf^أpEϟOљ%#S\k?߼゚k? 8IK/30CAG0ȼ
@VH T1hэ:`"M0y>n`Fn"0$w>pixj4,\+c!ɐOu*-QJE*b/n6:GDkiVZ2gbRc(YC!YK:ikQCwfh"g!ZДtk]Mګ~k%wZPTHdGjOXr
ސIB'zHy?+huAIIy+iK,GP#b$:6/nvm*VwUJݦH0mi{TV\zk]tK9;ڨ3Tvz,chXno'V4*RX*},d8r8t| aqu	jtC7t1EX[ḇ*>)WiT'CZmm'iW>SL6="{45<4ƞPKqti  |  PK
      A             "   org/bouncycastle/pqc/crypto/mldsa/PK    A             7   org/bouncycastle/pqc/crypto/mldsa/HashMLDSASigner.classW	{=#y'aS肐(vI
	XŲ]d XKe4"8ݗ{M[/)&2!]6ݷtoG/mz0eLޛ< V.AJw$8ɢ{u#a	$L ,NpO:os7i{Ct
?$BA73ҖǝcYef%i[Em${̴1+g{
SM7Qr_
zVQYm2,J'edM)٤Д՝|ֲ
'7ޯBrx3`Pčnx㊀tl7HŢ]A&n]~X"('*ilh@&YcQ
rmctBڣ1-nX@^p(h^3D>g|-릳u)P0.3Fic塔cSE:KF>n3E=]NS+(&%s),#ҽF5#gC"X%3=֊N^kE5ޑou#Hdhƨ/"퉂cŻXh-fh}l5	\ ,Vnb<۱bfxz*kۊ˛ꦾ*[C+q1TLQLu:*yjW
|s{:q>}bvJK#y#e@6iBim^blSYv΢+F@ݠcG
%s̴6C#.R!CKTr[ܑ׻ջOZ-2nqVm2vɸCƝ2$]n{d%n{e#CF.6>%?>D/,WwҸkKUXqI^|4.x?Zɋfr}E\ΑŗeC.Zפ y?IK׬Xw.«]KjҖhL{G&_^\&;*`ncH0aCCa>Uc*nB^EUSͨSfhB^UA
*(Up-T	7VUlDIvM8b?VyvBEP;UǻTn0a(>ހ~0|Q5	)8

1܏o+8O+8/)x'4<`O2|EA_fVrUo1|G(>91|T'PT'
*`xSax2G/@%5ҫ1=
CH^j	@BH|\H!BRRIuF_ETk¿So5Id]d΂$MuD^~O^	l]H{9PƏl_WOqfō'HӘ"	L:Hs]?4ΈӘ<H#9)Hsړe~ߣ9r_^2kUUPЛ:Wg_a/HC+jQï':K=F~H<~>g3i2[C^S?Cs˸HfI1?g::ahw*u2i7J2lY:
k~7>TjE#5{A62)i,6ӎ	8m*Ѕ`0>+,ZƯu+κbϹivLaA@=~+F)(^Qa$|RI/]Xŭ$o>q<N7r^p!'_8U3̗XrJXTZ,=)w4UM"JsxJ)q|y	WײV B9<.PK
Y[  j  PK    A             3   org/bouncycastle/pqc/crypto/mldsa/MLDSAEngine.classZ	xgZI^ɒ1
Ȝ,@Ccs)>8l`--@Ҋ6mhI镤hCڤłƄmIN
I^mA-f̛};ٕ? +XL bV10y
1(10{H5{ ڽ6ФŻsM]7Q	fo@
Ӕ"攫Tzz}q(h5E스MSW#e=56"Kieд53;mڱ>ÑLME$1o(&zoc1qٔ;|PĤ0Ʈ1&&#xbp={w鹌&k'sퟸV`9mi[Au$b0,#ٝHin&{1u{\G2.h<DH SzSlu*{y`uJ(6q(H
 b(cgcI)8L$GPѨK,vnЃx("Gq1.3iY˽.%mؗl٭		X2Ɛ֐zF\(1%PwⲔRx@RDFyXK)Q[H
s0i&Ԯ[ܺ	E9rJqeRTOR?a^(S'VNe:?WTLvDp?
{kpl={+GRZƓDY Q=Q<I,nYMt%$'I&)Y
yF<xȤh:Gi=~)*Mddy
gbR\p (%RrNȕa<Ė=R/9;7=ysZ<ܖ3NMԃۓbz̤"HS	vi&dsnt@2ܐHxp$(TRҗnټc)}A}E,JM]{m#qcƻcxx|sT;Mvj-Ex/Txv6I$&DHIrk6T&ȍ"i
!I)t6f-\'pj2,NJ-ߎmIi䳤P&s'ե-=-wJQӸ\L)IRU̐\^rB-PF
Jsd[L|R$3yi$Cإ3i'=\'&|_txZ,^"3zr q0D8^$9A42spγ5XE|asgx;'w.NZ|b:.xЄ,zZ@YVzYEE-_/ǕE/JZyK?//pJV(7uz7_Sγ3$U}Z	RnkbςNWN	|.LV:/hV7EbvR˜];i;Zv^:sSQ/cBqwI?Si/7Qtl<'X@`1/A=A`)2IV$7£<<7$x	e<F(2pn[&"i&PMn	6B
OQOtpm80Ns'yr8C-"h'yL(a>ÛingH"o/p|7³<} _5||!.O?!)?Qxwëvd{vC$W^C`>p?	@#!;~{@`%v83fT!
ï~Mo	~GG"(~LPJ`!NrF)(Pejn;"#O	Ip=A!rk@<.ڣb:M߱u:zdB%&{š @E >h(GQ_߉yP_yQK&L_ߎzc~
qe\~mjc6.8_kmlXm\=pfX	Obñw(j0/:*h^+恂fnQ\)h^{
g澂9ynY\{ktfA7_[мD7υ1^o|qj׌J qclW:j}%cl=f*J_cs}c.ic|nxj-v>g>BY)ZFˬ2)VR,e`K`	J\y[l`SikUb-q4.ɲ
Y8?z1ǘGG(HtaT32w!.Yė{aejkeiRt-9't,Nqor5=IU>y`=mC'
i<
NCx
]A1z$⤵z򜴶Il)Ud8@[q%i:b72Cq
&'ZHܚe͚e	e&'
#\K'l`E[RevcK6ڲ,Dp5.(#aX(˲-]8aϲ$wgYP;[܀`>mXp4vhQ<^Ǝ68]'4-0N3	NDGW`}%{'[O%ܚrmotdA݀A9^"ּ	bƱBcB+岶1.{LZ7/U9hг7S)N"Oi!jaUCr?^ZQs;p`6;r\	`gP
.(	V3X
6|#h`(ӭNχYNO
kaj(]
~.'2%%,LMI\f7oHCrd)7$!
*!:Zfʑj.V|O-3I(@bZL[]Fdʲn\]U6t5X`**3ﺭY)$;iM&aXpD`71-TdYƤ5QCo9FCBeS3pj,|आL/,v>MDovQAÕ-~M^xޕVInS#]AyV=0G^lJ({ X0TE*XL?O<'cu|26|/TZGq*jd%,g|5V+K]SkDr8J6=3FqV8`iUSB_6]
νB'9(55nar~L;CRV=zeV68
w2q6`LÇ,#6۩ymD?$Vnj$X]x"O젞/%k 
f{.7tҙN`:5H US'i7Jz^|!\6%㎲$XPKߺ  f$  PK    A             D   org/bouncycastle/pqc/crypto/mldsa/MLDSAKeyGenerationParameters.classJ@FObkKWk0uU)P"L
y+EpP$(
H|w=gs_ߞ_ Of2#LKY.І*=Wj!yəsA.(OLQO*ыdr+hh%~9[2j_̖tR1f2U,?K(i6Vt:tG:Vܝ6-.M4]ax=P3
t?5wPKͪ    PK    A             =   org/bouncycastle/pqc/crypto/mldsa/MLDSAKeyPairGenerator.classTkO0=iM0l0`gaiaHnhHHڤ)R&4~4;b8c{~*A$&&S:Alvla鳏iAwNvoYg>󚝹/Sq@5Mf:UsyYܤ^U+-j[fӯ1
֚:wֆʼ3k2>tzq)vMhY]VViZvkՐKBHfݼcò[m#ˍ
EBEPQܦHPP!*dV˳%SdAppL2u[fqV.ٗ'8tE+iҺ}Sroo:Hw'``ܐ&4:l(Cw1 @91<{&
H )ѥe!#c2c^Tx!c
i1߇na@pqI~}K# >w`Ogh:Gx}\:sCdh	Neu;@G/O0#jDW1+N0}ft51]: (#/`|g~B:ƫoPKNP  O  PK    A             :   org/bouncycastle/pqc/crypto/mldsa/MLDSAKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF}09)ŉ>.ȺֱAeg`ag`ed0!@7kh\#}a<l<L<\uOIePA
*bn ) @[Kz;V`
\PE@Hjma f  PKL     PK    A             7   org/bouncycastle/pqc/crypto/mldsa/MLDSAParameters.classRNA=mi*U>ź--J@aٔv[%$ >(*Msvνw~+,SqYE+***&SE_)PzʹLgVA BViRX[R<?^ɍZpi
_d&iZ2wt7L13t^,*3oMg7c2>;L:{N=Sg<^$pOo%yg%%fiv:5_j7VQX9űsKEeӭ4/Uvtq)AT[9~iV5`b忛QVo2թXb^d]
e:m̉ƬF=-:λOwz`u#8r0!*{!pqr&9LqD>L!]Bc.1аlY&p]vʚlfОRjG((ۤi|"8 㐌	c"ҹE:@TyTboK#̦PHa#{CHG(*Ϙy=|CazF臧k;z=23>85'Hn0z'dnPe]V]fԙ?'HmO?PހZ	5'/BTW-SPKކ
  C  PK    A             A   org/bouncycastle/pqc/crypto/mldsa/MLDSAPrivateKeyParameters.classV[sUFhd!bb`p 6E`$vNl,cDȃ2Q|Yv]嶻yKC2kS/Q3c{*VX|3A;T"8*!J%;%SBQZlvsϹ3.ԍMtPщbcg2Cg$Z%!seHP
cX[΄9kFb]/R1za\JD
ۜ3&z%]2,&a1vrb֒eә6÷#cr#cza(6&!JU"m_%w"8AKV|DŞ	m<c6pNgv|,._&L:@RrLS9XY8I1aKx5}NOSr(T5,'s`TbIؿsh>4#aUIhͲ~LSKUhS6RՋTnTJj\#Cs<C-лC7ON}6۩wz\wrjMzFhZpODbVIPUw[9\Ynh2Pj	u׭2o%. ]`
t+Qp@ATVK4?~	ILαM9)do.{*7hɾݹCu]z2ynX2oTg,@q74g6q묚QۦHX1/Vfwܽi($:'cxC[O1<p#*B1rÝpB$vl4q[{c؏313>dg80"K/3*(2'pPdf(G,(NPaPcGq
fQ`20K7qzknF:^M0iLzXt;>박Pzu_Dx~n5>O1كSHsф<ɧ=Bq$U!qFni
^xcG-G5jXU"{(XZZ:5.i=BkjH(˚*a\TE(ʒe!$Ē"!p**8xH4ƣ
lκH#䘛M?'bL
uJLӜ*"GYN)"CYIHZ'ybYd;Oꊜкv9xUosG*b;vB=$)=mE@EV(mZV(,ODIZYgh|[`
BA	4z|
m֭T/令︍GRx[e!9e!e!ಐe!e!ɐ\mAK4qv{}E?yykީTn :P Gxh!w=தc%vD77}Tx>ȵd<,a.Z.pr.{[)m0$Fݬ/I0M6CCg1FdӅ|p\>d
.2+\HSFx)㲏ٔchMK>FWS&PKg   ;  PK    A             @   org/bouncycastle/pqc/crypto/mldsa/MLDSAPublicKeyParameters.classS]OA=Ӗn)[,pův),Tc !AXVٺWhh4Gxg)&{?sޙ_2)p!/l3$[Q`qVO<驧1u~ CH+!鍲j՛U.+tmOV,Vm'C"Ԃ^ԓ՝Q^by?p'RR-|tEUyd>JI%S 8.݆kNag߮qgyX!D1I;͙9/^=_|g.yPoMr)e%ib:EգJg
:
l@~ɖd0_g:ub#&Um0a"inmRN',^(10Ҵ6M)hcF!nWyTĐղe2$ihrU{qpU_Gqv|tb<k5b*Gc	̱=L|LG
,7\o)n)lQ#Ofh3C`8.61"#v^$"NHheMqML|%Q)"cDPK
"i    PK    A             3   org/bouncycastle/pqc/crypto/mldsa/MLDSASigner.classVWWA[#5d1Z7

Y$N&(]u]ֶi=hCWx;3	A&'}{ϿvxTbQ_RvRIݕJ*.51EWBweܕ=u,x3.i%4hj<v=lrYdu14쵡hDiZkPrHv*
U]9xa"(j8*d1&JKFªSBefs戦כV8WB9I6YCz_>ߴyw$$kc)lLC"GGhM{&8f*8"H&< 4EJX©
BJBiqǔyԘJ*A(HI,DQKhJ1˦Wqm΀JI3kZ8OԣJ 
&x9y-r3ޟr:mN`ψ 6א	gtF'uaVL.X3^4TXUUX/GPSsSHreNJLdz45"MI*B?NbX/@J1NS>
JQK'N+kV,؇"xLn~kEDQ%b
"6$b-7Oq5Y0&TWؖ/c*!~muBEPP"j_+ݕ3gG
ӾW"~EZف}{Vjhq1gMpn5_o$Q{SۦUbJZmv2bcFKX	I	[(P(%,(v	>8$4ɏ(
s%TiOKX#V	W$FP$<tq(CAeH8;Ѕ	!ɠ3؇hƀ-xΉx'ex62D0Ш3fx%^gxM8S8ɵANҿx^/	rxh{
ep Ŕ:Y6$ݐt0$ɹģ AOe$E:#\XLsVh=Umi|u\Fo=6.B#"qCXE`u(oc78;RϚ#Y-\HjFi<4߅[Пƕa`V'm,b#Ux?
Y'׍oG}O%}Ԉ8ĉҶY@AF-KLꨊ-Ű*+ҸQZجҲ3\7+C&IjO̱x0c;/qwK]w-?4屙L)>4h?#lR((ZW'ќt##{xޗ/)|]M(/"#i\6_,ܔ5 lbYS?[a;gRR8S=oJ׶|6
W4Y_6FnGUVC3DmroGI|7bH6QɽVu0uU~sxc~
	5Siĺo&PK  i  PK    A             +   org/bouncycastle/pqc/crypto/mldsa/Ntt.classw\U{ޗL Qq 9 3T$!Cm@Y;˴\+sʍf*<~~Y=aMJ0#P?vk6w8%6V;j|TB
I#dYWrH!iZHFdYmqJNLfaE
1yܽ
&/e6bN^rsmpW&پdq$D{G/桇n<ݎzhgcmmVmMҦ<Voy6?]Hg'"ghtjdr5mͳkJi<=O(m^0YI1viD Ruڼrd6]yBōơdY6!8ԫyqٵޤ([ԽIɌds_m^/E__F-<y[לڼ]7vtm6Z,[Q1YYy98ɦ|r]G(w6~1&QU rx39Kt~	Jbvx\ZjelaɔjZVg/&'.i1h9IXE&ЪRAW:sQSFkUeHp_+[. G"vtaπdV𸾭:iC~õ?U@L#m
ؕ<; 'gkUC5!3V¹ZKxD=ԪNΑy
\7^;$s=V
*4rV^<ZpdUH?(ޫUh̻dlg27[ȍjbOŽ"b"y"ju2:?Lv"x",g}IZnw:UAZ&a`V}TscP:(,A];4s@NrȄԔh|:QAVTLH|W|Zr<RF==-PGǇr]sY4kG$eJJNtZWIY񙆪:4=;-!'!>3+5)t䨄ЄY#R3C{OvצY)22s2Up Q'
:yv-(]̯f7·|E';9.;Yr_|s	אj|
sz>ކF
BUg*?lOeSyC]Q=uuC]UOnT1
/n;>=;+>#MMR5mP>'NYS)/1X
/UPMp^Q
uÂ
_7^
X^с^Z_\Kk`a	D5sXC!MS6aKtO&8,Js^iF4s6hڌkP*_`<YlGpSw#V>R7.y:6.b
(d/TAk1y"с2ڶ&.!pCe-M|:k2_vQycH92CQ~Y}!;}m4c<+G6Z"ElC\mhE<GȺR<-Z;c-^%X4vZ1kkXW;c=x&uRo;hEE+!VNZQO@0G7iUlЊ%Cw %4Lu50imluh=Gs i,4uhCJCА6	HM,m90xF >c%ާ6m
NHQhJmFYTЉ>ʴ=LcvZ<:NM;AjE{
ub4}9퍭苨D"C	4/^+0t08,/+\:4;h"hb˘Lq;M:5T|KG`$Mû4=HQp즙YEGc6}s̤9x\ԧs<<pۈ57W&<JmIށ].IDCI& n'꒩@2
%1E2$"O:Hf"S2)HAm\|*?I[2$0T^ExCK \$P$Y?
,X*l|j4|$w̐|M'YWP%HBUh +$bd=J6)وMlF7"$(|HVUmh&=$dޓ]#ٍ%?!DRv-كP^T;"$Fr %QrX-?K`WEM1*9Q&JNb<$Vr$gqX;~xy\@"I.-eWFy}UQvvU*n7*HomM+ӮIo
C]Ho
]=޵Vi]ݑ޳+SznK
-}hWv>.vXj
7WF'QPKU	  Y  PK    A             /   org/bouncycastle/pqc/crypto/mldsa/Packing.classVMP[U=sC-i}@i5$hm*6!<£!EWtg;3Mڕn\q\}iդdr==͟w8Wx^@vL6#V#8ãI2H5Hܩq'xM0'd6Whaxl"Sv7kOOgwvzgG'Nr.9i'?,9Rqb=(/_٩@[m$.'F+Tiʀ-m>o'ۉhE'gɳ4ZXsTt2I|ڎJFJkt.=
>I9LɤVK:BZ-/t4<51G\7vl2<om{չLNr>wUZ5.lm3J2fMnU֕hIH4Khhh+h^vS׃!&^VYOز+حja6LgTHjC׮wʟGh`թ |3`8u><͇}CO3 C'$6Ј^te/GpË/y^a`dbxaa5^01Yv4O/Dn,1N?i~ Fs<]rÀNcWכڧz_F[Z/N6.,i⓵#QuOC8Y*[*Ur*VZ8qIUfU	j7TTƯ/=!R!0f,b]ϨXeZF{@<ERaxiԅ%C@J6?:Ω:T7/>Ll,y(E̸Y?fI\Nw@WaP{hi1iɒ%YZԒ3ڈ"&-rH?EB*Ӓ.Y[rk.+p6Dk?/Agot-fXF"-oc
YH2eqmL#3-SS8Ѥ(%nCjqˌ[M2~iWQ/ۮ=0XA}zgxs:LV'*uR<(]iWLgzܝ{\i,KUH%
sA2"
GT*iGXfȋ0ɵ*˼vjFwOǜn^bTzݽL,:Ri77~
QHC`'M]ad_CCY9 PK
^N  l
  PK    A             ,   org/bouncycastle/pqc/crypto/mldsa/Poly.class9{|SuJJ\Z85ĖMJ0JJH+ؒc;Iuʶk5du.[h.e[n֬[,[ڽP^w<ߺ̳ a* W9@E}jՂ-h eZfr
-=@oiݻAOO%~>Q~I>hٻA% /)>p"(#H%HP,T5n,*}ၭ\i.rsԼ/\j^qʎ|e@Cv8%'ߚ,GUuȨUכ嶗Gp|1A$34ɖeyZ@l)YR1WJL\v-|.-
8ʕ
W+Gm"Wn!5=\0+g A,HDz=:]a
BF,9B
A{rw峕Ґ\](޷R-m) }L@}W;@~l~܂;0P#Jk
do+ypp].V*
hW.fGr?ߞsrܾߴ#,&=xoVϕ3[6oܱ~JX|y9X	1X-VΘ;Ci33ك1,a,,lb3H3`nGYM/ƌPؠ^*r];R8JXev_Qe+x˃劇Z:30~4vH:XC<e6[
r]ݖ
+qW+CUܜ
#|F+*uF
zx|~4l;Vv05nU2TYREEjDT`o@
sg^b2<T`Qw6*\@"v6=`+m3v0eSZ`yb(us}CB2JX7ip
Gi'hyp))Zz,^6k:
>e6ÕEl7kzf #ҙSc&ڗ=/ZѶJl5s]6
I	l>iC~ɆXO`[l$b6tVkZ	,6*VC
p
Ɇa
\cCmֆAu6~Ɔ-r*)Rz܆NeBڰ	>mC<bC|Ɔk6gm<m݆;7"0<J`IGpcQ<Da	|pIo"	_"[~F!=FqSL43#BIϢQ8%t~"_#Q\YS!prtƼT,W2ʮL0;*؟d{3Ќ}{W
Į}:6<(%7(/f^{['3"y"٠YgdLMɆ0$?O9;--!m
(|8E UNwF)&E@Ae$vJ
`6JBxR1'%{]~R"&g0ɚ|5<'2]HVӺ^L'mhdaל%ɞFS]#6{]2	+Y$\#HwBkiHr4N'*WI.}z4_%@-38J
="qbcVN(՘{+{.5p7vл5LGc>ZOr)1kdI1?<SD}*Z_73/L«]0N@{KG!BsG_CWt0c/ή1ou'xۥԀb$q5I~얁q	{O"`zq(|+]PFM&Fњ1R]pfDc"$l+;]˙?׹V<Z}NtuY3mV"djn!وHو>DuUG!,*2^%yЍ'B<.B5!.,[aUXTv*|
yU1	RXAZL%hv0]F uQ}7P^7WTx~$@N.NըT?l'Ta^	^+oLƓS2EP-:hs*\4uD&fa)ل?IF:ކF$w&gO^5rse=ï}٦xlW͕}AH}KyA[wڌNr֍gRV/>£{h5*=f>*$OtL%aۘ00IZIO5pfBIdmQ9
E>K{<%-9
CFA&<cT#A#Qa@jt	 7wZ@߁/#aW4-diX7I{m[tǵ7aIM:V
Ɯm YFlxd3H6=2Gd#;5Z_SQRq3їц(.=Kiz(Nجя0_HEEtwXE|j^m8lΘsT<IdJm|C_ So{8Um	jW
ۣsF4H*  EN
Ty -ijN}^D5JpOT>2 25T}FJL=8,ȰbYOzbk6TM8,0%(z
Pdl*YCfjȖ"[5dԪq<=V?=3*=II׉c%[n
7Fl~ǹPӪ~iu5|A? s1)ZMVJhlúQ]QE1TSQ0ERxot3l\`5"}&16HEo3g8@ywC)Ϩa>(1PlÆ%e4qL9ǰ6oCzBC1VP[yG*`'96_%Ms!ϩ
Ʊ6c}~h}bSju+]
nTkZYGtp@DmsjQ[S<F x<RiwH0
Zv0u>.&sM.͑hH9bKJӵ{}֖bT[Ҿj;`s]yl+r.>1`ڍC&@$:?ykkͭuiNnKXg;+})4OX脶|ݸ!xn;:@~s\=őg{K'/U4A#-?+	4ӵLSu-?t\xq#'@3LA3kvg'`*{y?Z?ZwZd=gA>8ȧ,ߓvp4}OcUdL\ "8S5Py,OvVݼ';@v ,Kkq'Vv?}-w'b	kݛQ@d-=?ޡd]#<, dt)oc:.	ˉO@_
j%K_ѡErVB|[nroSKx߬6Fl5	m/Q;r#>aBqu4_keK'Exo!IZΓH1XX?iĉBEOV_Hҋ^t8E(BB/W5*abR8Y`EkQC\)gM1q0Sy?8׌vM n] M 1RR*XS_or3x!Ԋ祢mEUR|OX)?ԈN%Ax1Z-*'Cë?罎mhU׌)=KVΣ>",	Wo&u	 s]f¯\KRq'"56C{% 3z5Î$eYI`Dr2X@nAΧ:dJP5y.O'FT
gYg'm)ۘ/-:>84oa-8. Z&#I}q*H>N9x;g:9X9 >9 .5瀸8[{xx|UT=1#1|1oNS㠬y*i==G(hxުy<AkFZ#`-cg1ob]`.f B0v܃q>%9c{_mNO_FsxHG4=(DS(q^IBRa,c'PKg	  )  PK    A             0   org/bouncycastle/pqc/crypto/mldsa/PolyVecK.classU]SW~NH+*_iIRZ	I0
V,?P,%$٘lPq}/zջ78SiLzδN[ef'Ϟ}{=g~|Ň>apG6x"ɾk͑$?s#
WOpқOs.U5[%[3z<%Ţ^Z2Kzfy,d̂fXYPscvz5=cfY؝խ	#gXKF%Ogf=zQ,Z&R2eYYPWDN-dnPU2
YxizIWsSlb2lDf&)-3ie51H-d-L:KiGڋ&ɺeu^i%
lDyHcRjHFQ͸u,bm[zi2i*6t7R^2Hc|ʂURie;EYK+볹WA/B^ERL6׏!/e]{ `z yb⑤NNy#G^wK%Kv,LY7QAvĞ|3
]x
NnQ8CZ_A	8ÆpZACC?C;3
Ą^L81~0pc?dЏ!&.0\dp!00Uks>aOO3ҷ7+m;yR-N9=9@_[66ZERsjƪX~wCw~#]=[}Lxq܋A!g>@9A;\t^&
GèL耛.g'~ugHc{C!OA7;=p3h暇=7xF6.$ݧl_4XgU,	_pEPR=IqR.|{$$)!lҚx~ۂ'HN'RXȆcRJ.V*nZsxkzr8%yL	E;=wzhg({M|n;HC8+9c!0늇mata!
;^`ekKsyog=uk8nfzF%yU:fc+eY/E4Pݴ`ʹ]mܓ-̇6dn_I6On#%t2PkԈ֪QfT-ף}4hs{dOVx(/'kU81)w4rYJ5*PK
  A
  PK    A             0   org/bouncycastle/pqc/crypto/mldsa/PolyVecL.classTSU=7Yؐ.MdcZ		-*Z@A**f4loN_:h_uF~w$H3gܙ={w{ν{ۧ  ǃzp~\fpG6.1dty#~/(7nM2&
C+ЀvRTi,]3NkISSĤ
ahQ5us,)E賚u]ֺ^SvieFFatc{޲9Ӱʶ)F6>jK7
s͵
PYtIe%CU-+ոZ-Xf<l)Ԍ
+VDK8/a}oi֬׊DFy@[؝梖)cG9?3-g,6xC!:$ۚ*"$%DEtxY+}+*chN:NȋQ~d:/8;DV>I6gs6,8v.77מSz
4X&ݰR1B JWy sp($8sO~]B o֛Ё1	90)UBHy5/*0a-/b9px
rHrx,ynez^G{-EݜS
ZNC2tMkYzlP+&c)VDT`="/I٣~ez?WD$Dͅ^nm|.&K:4E_/L<A剢II\s$G219U[泚~3D^yDq2X!F2?X1ЍSnv'dʉesu(KUF䫸Q=FPZێKkɕ잼n[fcn
\&S<9=sZUZiA#PtRϝQkmv:<A
DRp(&Ėl)DhZWpsC:z.gNUjl-6w|MDsQ#Z)Vf*h~Yn'V=k@'[klpQ{t*s\J*gPKO  
  PK    A             5   org/bouncycastle/pqc/crypto/mldsa/PolyVecMatrix.class[SZ;)&ĠXPS7(
5ԻJ+jgƇmZRw_|=h<׵ tkoN>}	ܒ!Pe쐱SF]B|ALCWb.m"+8zn03[Z`5w1hp"{c$M.+Zu<,3`PŪ٭*9[vn2ð8VrP@CiMd?$/<Mٺ[%R~duZ̅ǖaՖoTiũK^?KWs^]p,6J~ũQ}kvS~-֣	JII/xj.yh~Ȭ%r; K2Yqb8{](pNj_&or+*!bd=VqUDqLa.`p_*~8ٍ1Rpg㼂 8$pZ($1@Y.2\L(8zT089gQ5T#i]Rr"=GhM%qQo 7>@8^b {we\/>٫no:H`X w`b3AqǗc
45סB`+a7!Hk\BR:-kbgAAA/:{]%:Q(#6g+gD0Ԏ
ݯ0n>lZ|Ca}+4+F*1B]CLT-cEj`PKx+    PK    A             .   org/bouncycastle/pqc/crypto/mldsa/Reduce.class=N@ϴ@?)Uq3n.\Sf&`)&1aܸ2q>qZܜsrs? cSN t[T.S)ON	֙2rsί	́<zU(ē'7 pdѾGlQ:gœa"iKh1aiL_@@LX*߅MTԘVN\E)Q?{⼟V5i_(l>:]Ek["=s{ڶkv۵%j;YlҞz'PKV7&  v  PK    A             0   org/bouncycastle/pqc/crypto/mldsa/Rounding.classSO`~
]NN/!f)A3%b4J[έSx_5ᲃ^ĨѻGFŷ7cӾ}~' 1. lQȀ|c2Xo0bi{Q
RvX9b7[[\2
cC(x b٦hzmAE5ئ1({Fn|ymɽԵ;
{vٴrøc_v\Zqhu;߼kJ6W.OϺUǥͿFUqMݚ%uri0(A0$AA	[`0iVs%Xq!`u $E(tdH0,2
UyX2.j,,ȎoAF;68WTun-sCrA
a-~ܸ$Mx Țf"d}<A)?cma?$	#t ~i#; N&EZJu$8g5U(Vtepmjq@諩ኲ?LrpU_{DTi>'uYŴA%EctAH^~+R𓦚aQu~`'bLB"Q:"g.-􋺑9	o%w8~F\qDawsiWo
PLReH:$aR@"33fiqixDPK^J    PK    A             @   org/bouncycastle/pqc/crypto/mldsa/Symmetric$ShakeSymmetric.classn@ƿq6@ک,Z $Z*a!UdUĩG}HH <b&ADgxf~pu p^5rGrxh7qΣ޹AݤM0:qއݶ8irǏz$t2<v/<|Ι?<j{Oϰ7Q+9}r.N"Cig]~3OH
نRn'bVba#y̰kNu G4,3f@Ō0kP\E9%\憎ES0:Jݏ0n1VǧUKtfP*"UHB&lZ|. o8oX"4~ҤT)B޶P~j{rY*GeY,hGvM]izY*K\Z$KD"?kY_n5
@%d2A2y#KTΛ!UHU(dub~5h PK    PK    A             1   org/bouncycastle/pqc/crypto/mldsa/Symmetric.classQ=OA}+x)PXX cTWYX-W2ΞHbcޛɼ;s42{\[ʓf-	Ñ{7HNxE(;WLGnwIH?|*kJǒgi7R1WUsQ*W2mV+{;U씯-X
6J(ȁ2d{P2^ʸs̖[Gp6i)ǌ$ΥR
Rjvs*!lSa4WS!ax5PPKg7    PK
      A             "   org/bouncycastle/pqc/crypto/mlkem/PK    A             +   org/bouncycastle/pqc/crypto/mlkem/CBD.classROA.%nSV[*&)h4ǅKۥnmBc"1x @/.j<x:քL}?a@NH2u4u-
qugt<{ŝ3ުӮZrٙqu3-bضwc)U+cu,5lҭV鹺yw.{6:m+Fɩ! 
QlPH2B1Bp7rR֢A"EB+47
HEj-{l{,#_IaC1Rn	6a򑉍]LcGltPhu|Xl~M#32kMK,M],&$5)BE?.>2rR֨&W"sޯN'/?CIUaBѾ$'CBΩNo>BI
-g["{h¸?XA0
stPx{Bl7MRb9y}iુIG/_4(PKq9    PK    A             3   org/bouncycastle/pqc/crypto/mlkem/MLKEMEngine.classVy|:V
c	$F)MUmsDԭ-E+!J[z$GZғ6-$6LBڦݦg_Kgvʲ$?yͼ7o˳ 8<X-aC(S9#T,󹂡BsP_\4l14P
&Kpvn:SKgg;r!-7cHxUhv%+T;2Mg}OF%,|FngЊ֨/
{JLr@+7'dA3/x;DfL5F"oq=՗WP1-k}R\}fn]MeO.kU
}|A+Z԰Zۂ+׾7]^iYԂ8A,7󚞢BA-'s%9%Rl=nI2'UC'akuc_f\ۯrc%5k˻ߧiSm9i.ִkf@q
:Ϲli͘׈mUÂYU:ԗGLָ̥/ZvHݹkЕs=f>Ql]צYmaWesmyA\5̪D}N\q(dmcjq`VHɘk&EmGj,KgZZ(KnHjy#饟s=zDKRܪ9Sw25	:gqj5TԒB(hԯôG{Aݼ^}nB:6+rR-Y-?xbCCz:k,O!s~9
*U[+Pv݋w6x+6yeߚ&XDZU
tj,.ll^|N.Ը,AMOj4z6q!D@O0AT"$U2O[e8 2)]28$C1J
tWH
SDtʐMoq_CWxk(l]˭'ҹ%YouA
oa^qY=e)Fu	nubKW~F) `%*6v5kBncpÝCVQ
V
p+n,Q(
k*؅foc؊e
1~Ѣ`ZIA1LvJf< >E3<a0|cgx1O0|Sfg>y/0|!}[$9>}(>r
7僁3`6w}(K>g5>yGW|Ұ-Xt˪ys[0T}hV,Rm
"dO CM5㣤kYң51F׼qjGin+BnN!rk2"d!ۄ\%J!SBR0F-$%E<wN8l 9[	Y{dOOEiH_ކtŦl!=molH_龆M4gm
~SCMWl-
6!=i+hD#<+$f{XPwo8`2܂
f-RXWPϜe6`ղ@A~d
?jmO'VI<?\	"C*6
.ʕ%+eyC^_Txt,g+xe3(S9R*o*~,?jn$-ttt#b/'J5㪹Ñ
 o3|(pd,s]hRzy,Bt'zga}62b!y$2x~r:8Nq'6O+ğrdt0fivt_Y(5#ΠWЙq]+1tM/#x!~y!z3Y)Q~A$
.(GOn➡I韈.J0PvBoi󔐏%y	EPQ~9(W$M\Vw!Nr2VRh;Dʓ#?JpupW3mNT^5Xj⋇X -{ 8Sw]րdMNN<[:{ŹP$?jK?.]Sۜg:".~I7O?gl#MD׆<PK  5  PK    A             6   org/bouncycastle/pqc/crypto/mlkem/MLKEMExtractor.classTQOPV;	C@qnc	25fcMIFLOwfvw'4h&(чzν;鏟XǓ8"YϷ͘q\iӳm{71}۩X9-ӶGl
f[Ȫ[=oSҗːP1\ZS'ǐC>Zoqw>!7lWk˵
ԎLS׭}a@t6H`Xsr{7yW1"vONP;ٱѨogW(	96b4<Z[AR5S
+H)`_eg"'3z}-]>cB%QAm
3XԐ@TC*24,ir*U"bSP[3LT`
m-DYШ"TP	6(p:6h!?Qߦ	~QX1V>Ru$/(WHFpǕ!ܐ1zP ijX>H&ǃV߇
PK*    PK    A             6   org/bouncycastle/pqc/crypto/mlkem/MLKEMGenerator.classmoP
Slʆ6MBDcxU
m14Q1CO0cM=Ϸ v!d^1DV-EVj؆!6w5m]{C5lΰHs,sc!e45LxOfwg׉X=|q}P}fwAz-Rp}_m;nWm;[\=trxr2OPiLm6ͣ,?8'2]̠m>Nճo
qq~bM犐D\qQ%qE,B8}q*YUT2s՜Twg@ܞ27vV7Ce=7rUHzRJ`HL"BuQl!cSF7cH▄eܖ;A	D[Vs:4,	-`4ZAn@^6.:pc&&L}"~A~k5iMNDF/~ai~BR
I!w$#R2";V_PK4    PK    A             3   org/bouncycastle/pqc/crypto/mlkem/MLKEMIndCpa.classVwHdJ!ImيI㶱,mLlfiiKYt/i$@
)ݰtK7M]{̓9:wr}^:S-r@'S kE3*˺ypG%;KPsQ6$m$-SCVN+mey'&'{;SvbONB

l!{"JsMD٩LގXvjjX/!WiZ3XaVg񩄝!3Y+sm,M&.aY|cjo]%~تRL7J#+-FMiH[WFi"[dV|oɜUfX'L\,RJK	E"aYi"'+/_W^zP*s	o<65>nѱ9䟷yS&GYrָ;/IQv"ۆv<T.oӜ{Yo^V=[l,U_	7VWZo	on	+'Td
X}&ӕ̌Y>kUǂrX
14c'6%4mŨ=neI0s՚ai7_՛/_%ű|6(*jq
*iP\9&4$gLs~f-3d
.gv!*.=5oe\Ɖ!kpE	'lI{dPт4v[h흰T,PP:xwUE
jp*ڡn#\GhȾnRe^7WmMo7U¯&~{Okteڛ垦dxjzy\}}-:|{3?VuPiфFkΰV:^o!fh@63N0\a+C{ױoeXpT72,F@cjuA\"dFBaұ#:ޅQǘԱulHA#`3d2dry}~Lh؉4܍C$~`ÃK_a*
afx >IO1|s2<E4a(2|3O2|Xgx	
4.W',*~
.-zrh]A7:+h%Q'q|dfq,ZPk'
x\2-p0-B3^/x3(hg.)OZNb,O=qgox*!J95"j>S5qSn\e
it}QИ;gMW$E|cЊ8gFF?8
8=V+M]h+wcC5m&gWTďa9.4}q:ь'c(.Z*T}WRCV֮YSK}oAHċ"Q_T\2/2|T+ړ%нL*3YO/7ݬԚJtDV8܊c~*xV
MILe9.vSq|.uf,2)Y5Ai"~M	_a!
få9{ 
<oݡbua
UBm]͜
Rd;BO/'Ask!t!ǋ9;t[^
Q6S.u9"bkYwpwqwls$~*:Ƚ?8Uz[#<rÒy^!^@JQř[zD͟ͧVyF1yHS!WW<Elf
y̠$#Ӟ>1O=V_KDV)Bx$^J!$
MDt
=Ja##0l((T1̫A0jygbC+
Fՙ'4KSK˱mt)\<E˫JuTǵ*U;5Vjj?J'֠Q[~
E4O!0ca.|Q#UD.1% EQCh-3A(FU]UUOr{$$IX:qGs.]Wގx5dMm?|?N9/I/u.ʯox2O{EPK`  r  PK    A             D   org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyGenerationParameters.classMK@GbkGOzkTED)HPM6n+EG("eXxgg2o/ ep46Ό̅"!C:gJZ"7sRQ|HU [I%J(~8Y..?_>N/Ks_"LzJCkZ-pah)a8N[M5۴6 ?ܳ|F{݊jwPKe>k    PK    A             =   org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyPairGenerator.classUkOQ=e@yW
RP5!!M]lwv!Ji?s*ڒ̽;3gΙ Xk`hW7d|k3XyG-`j-Vh9Ϝ
?씑
&`;ͬR=^5͂  
j^B#걪U#0⃅gVpPŴrJ<2<S4\MeT.kzZrVDl1.dHMCrQ[ߑp皛Ζc͑8C{Eev쳜!"bXĈQWE&⺀3A%Y]V>\BB	5u/;翬* R`GPp/"6D;毻_ L2B7/rΫvC$,+]n2p	ex@ 1s&y$&	x*6%L171	x"Q7$a+fL熹8E܂	%?I_Ή*VO '463N`,
OG*X;EMm5?R^߅!Qt
^v
{<uǢX0SxcQ_,* ESqO
{s*}uO%,G8i}-)}%pPKzN    PK    A             :   org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF}09٩>ޮȺֱAeg`ag`ed0!@7kh\#}a<l<L<\uOIeP(
Td1@R 4v~-|4#f,  PKX+     PK    A             7   org/bouncycastle/pqc/crypto/mlkem/MLKEMParameters.classRmOP~.{iW:&o[&_6%Yb'Rjj24,2{
H?<<<<o-C1+Ce5>g(f	#lkkfP2e.ȓ%MB]2e}7I(w}͝m3C|u|:) 8:uGQ&FFPLnFgGBgI[tYՁ.uvhץqM	snKu/Oc?v6WJa˧5\;*(r*4,ɡAFCr	uC8<Pt*ދ荋e"`"dC|*b3ܗ#Xh#gTu"3Xa%+/ '9j$YcsA6EYD{M(u6S(3
s)ԙ4d]PK    PK    A             A   org/bouncycastle/pqc/crypto/mlkem/MLKEMPrivateKeyParameters.classVkSg~d!(Z%4/$kFme	Kd
/ߜQ`T3K=gXyI<c~x#|[	gE*,%Zf;ݥKps(]bz 9yc&>u)yN: PL	;8FeS'W6s'^▖[S
TO/]S<5SJi>Vʴ5dj I3W^u.~Z-Wԙڂ(OnkmȰ{LrFԒFu%n.jf-i-62hU[Ư]Zd,4>fiJQeuEԢX0jĭ|v~Nzpd)cS#[]f9\a"ꆺ`AEqࡲ-kfS*wsUX(jD:9lw;ki87祊#;n7m5[7bqR*S7'<\ŲV
e;LW!WW
FoYByQ<O_ ] 㾚Y4C.	KH0$	1	
Ll]mf~t`x	
8󘭞Q.蹡m.</H^F38Aj-os۩񝟠]o+~6aﮍSt`N0x]2'N1f8>ndBq o`dBRƛiIN1	5,çsH- N .:
 0!Ǡ1,(6B 2d9}H_X?3+NY~qR]#b?o	Βl?"}_>B^j!YG*<<n Rߓ?$PC>a
!^uI)5Ԕ:~2Ȃ:]	΢|bY	IP<O^[CBܨ=oYp!&Bި'^7`8*v!Boٞ(
7vv6'z~#']EPl(l5/:k };beKaEW;''(
=Ay.ҖI3I{7p.ݱs_G6(GQ^6D	q	cF%$$4_k!fAi<U)>AHm#m#Yඒ,$
p˄ߢ;Hф;}!*~!}?7p>MGn<܆
ĳJ7/AB]$>6AG
hCb&IdH2YYw$$=n
?37mz#8Dg̵:lbe5oBiU}m喪oe[eZePKө    PK    A             @   org/bouncycastle/pqc/crypto/mlkem/MLKEMPublicKeyParameters.classSmOP=wE'V׍͊ C7uOl_&
D%>l@"1>9_ߪ !hRz6iJIQL{Ŵbq:n9՞nT!֧CTxQQjtܴMo!*VeG1JR6ueqRlXlq!$rha96gh2=nden)7+AR49y0]Ysܟ=Nn_FRɡ3SF5fiyEݚtmn{^Lf:nQp*gq/{mmmma\6|N<]]}{%mC礝挝S_irgZڤ>îX$$$\-GBk6udy˞K3ZcZXaT=/D#?yD]vjUu$d	s1\B\FdBq2ڄvV#Th܎q`H;܍&HA #q0,=aӽOyK+IJ< EQB($ELh SZ|1#}Laj,vF#uKxd	^B:sOg댤`|?P{FC(hJHJH@(SS䓞'g=LǳI*`VIߥ#t^DNI!CmCcMFū`cT+y!fꈮ3PK    PK    A             +   org/bouncycastle/pqc/crypto/mlkem/Ntt.classlgy.-0X(lmAˀ렔q2m)v-̍9.\LnČa0stD3M?Q3(Wm|<>9|ׯ~"5ӝY麬Av.cė2#tӽ^pq܎sxn*_2(E00/Dsrl\\W"&⡝eC\q@!D0Q5T-OUnƞB97aPX	;-5&|n<Rh{$ߔ+FGFU7޷47XyyRap8P8W@QBQRbE7.;wCGFWSq}6tlDɏh<2"b2#B#GND-)EaE@U2jJ=
h)ݦU苭Y̍=)rB?Dh>tKDԿD
gI|	K`3a6肿j.P0=ٖrN^'i9K:UմI&w&UCNVWB-Iw`: lOrٳ)HS
݁YZL%54=+F<D<<KMW26\RZ-OQsT)oII8ᖾZ2kk\
s崪zk7\*ɛUnX+uE7{{nع^YeTUg\3ElnN$
*\Jڈ[U}uR5xj*K^}ݗ77cܫ.{dmlljQ[fclwec^<fحB@֫<6ع $lρldW9kp*6Tؽɾ,Xolg
Xe6Vj÷'ٴ:U=8G5'0623:NwpgNځA-@+Gp8|-}]j
4[@;sӥׁ-l6 [R`[?|ÉaxY`;Gurdw$#tH~f@#7Av~d9Փlz6N H7R[z^ f?0N=P``սOs4`[AVqG0ʤ;^'1t?=JY[U@U50!u=ʆ.a>LqpKcl([YuO;({ߢ~Z?@|[o+~~Mnkb5(YY-W>b}BsSb_T+Y>gmi~E?&9GS/}b7#?%|%/}"_U/|ITg"MYw>YgX3t$ED~E?/\ E_.Ͼ"{D?N7~曢sIg$eTg?⟱@E?u}<-E?CMxb_>O3>Fs}~ i/>wGo}b_pBj>̯}nTg}Sb_>Ms^sbI싶}[b_0-ы}c~/	O5};b1$}	W_PKobtY8  L  PK    A             ,   org/bouncycastle/pqc/crypto/mlkem/Poly.classW[sS^G*81h%TV.qd$H-nHVR״I{IPB/yH:4yI'3v:}SPB⮵E03{^{ɟn <[<p)Q66+W3I&p w55ldʜL%5L{N'I
v,B`pFzH;3#PinF~z"Si62V+ũJZu=KP*#B;;w*$Gc8.N{sܙ\QZ9LDVǭfDVxצ<׳+ZԬ r.[)
FRSqЂ3zP8鷻HzyPFndvM'UJlcq`[Is$Zc~1T)ugعbx`jTUVqU3ߞX3JjTҍZ![)IdL&V̔cώԳT(?ի*65'S<;Q(R*K}0hf/j
c5RV&٩lnXt6MUJX
췸YC\3YoMWpQHB.FJ=X!jmYZw]Yvzsq٨XFbTLFe2<%^W>Al(y
9\1pg~n މwXunbFD¬w:}Gf]-aKk8BQa/AH"ϫ0/EŧEMV1H<U=$EGa:CeX lPaT!HN

!n
_F O@$S$J$HA
a8K$#-
*$j$_'1Cbփ$ΐ*)8$$^"MH|3hQG#
@{.*k1٬Xńc	·.l;൰,pd~ P8^-yd^}#fXXrpeY^l9lE2xǚF>
/GXˢZA"8Kh"\Y./wٶ|Ʊ|ĲT-7Ҷ:X%@`~<lEzg9eN6[1. {y`>!x=|WLw-[d.#LZ."q^9MpnGPCuȒ`[mӅu68lwRmjVb2ӵz$F<2Z)ו!W+3WM\EsD);)||<>I:Z]yRikM'h']fM|:ǣB\4L
!QQ9U
)դxTMլ(ݕLWM"L~OC7TAJR\hD⨁;k=%
ڋdEd{{GZkm;k׏$~t!iL9eqH+Zݞ;=PhfpīP¶ brf湑H0i,9oהܠYEmxKNd$*nE& f|S+
XiD5.Bd3d4;`ˎ$k)B`4QhZ*&;	gyO>s;g mOchìKҬi~qHr
7qG*:29!g}I`up./7s]xx0zJtAB:)
H
1uEcP	M|.98`^o
뛫[&D!Ox-Oq<ArM~![ݍs{
D1I&X>'q'}y1}R'rږ2>>q_Y%\6 a?(D#WaDi|"ZUEUu'AE\ U!L+ &+忱|:nE[c~^9g}P(Ơ|+@J7(iD秹_
=h<:w7?8y+""|(ڻ@:E;jeDZyc=* ?׬pvfz&]{_vP~)O0s@>/l:	,H<}>J'/|
kYqxA3,pX'PK}bq	    PK    A             /   org/bouncycastle/pqc/crypto/mlkem/PolyVec.classWS\W?wߗvYą%ha7-DCIHRCBLEM6FmZ+VֱK~q8#iuFiGgAgFs}-psvϹۿ62ڀd46u	z4ICW kPqF.6h%D=C8ʤc2;||6=uJ̎Ą윲PJc>D(ݡ,[K+nmQF;,o<<FF&pQt'Y$T"Cz8>avo6cfǭ<ĘܛMT=!$L٩l&(?͠3ineFSdzGq6Qve$pDˠ8*
d
ytǥx4EOO&tѾK(Ϡ΅;5nrv>,I:2MS5^A4gl!J']ID/[ޞӽer}sM[n-ةt&.MeR։DBMteZ	m_ˊ`\c.ܼ'9bs&NPˁYְNֱ'Z	
ď&'lqp=gj8rh!!a?QOpxAbh[(<ilXF6nFfim|HohSn[^n[$#B\j٪4V.Oӝ]HAnE߯mG-Gy)gVt}EL?_Q@18}Dn"00iC~~8/ga+~! _C=ļ0 DDD,@9Ѭl">8S>xFA?\"rH8,+DDl"WLC<wz2ڀOg<w!> xyC$*v1nFI@c\
'b83xs^
r4H؅=,<jI7 x
1ddm"=Vaq}DD0I*o[\zG28*V)P;NV%xy{rC/V˃m;{44hP0^s<?D3K㰦VcoZ4i̚`Q925ĖNnhθ3I	8tY~Ԇ9};J,*khiLT]uP-FKSGTkET%:(ZC}s&N[$c]XiGz(kMcΈMc]22ƧOm'Ĩ!81jnlբ!"6)͎I[HL:vUj4
4(fnMoL "&o7J_L Hp%xwՕ{pnڳ_')U_r
"u78Y:+ǸX	7Yj#go[2dAl7@Gxn)Mu^ޥ:ÎZ	JV;Pk34ԘŀF|Mu\_s]\9
_UŕjFZJYdcUa/wT?>%ګ6޺!z+S[ɏu^dk:FfBJFwq3$(LGBWAS6ҢⴰQQj2">)"$
q"t8Gbeg器x&dMё/߆J}
\|xܲ&.,ZB<E $ؚIֲIz	\B\~H=ypXG?P)XP kN%%x]}rχP>?1Or!|hwHP(y]?6)eGۏO/E
/=%]{[WH͎]P{):/e>b_SRuSI^15<T(c>u-5dރeFO3%#Ÿ	"Ռ "-9fCwC7,͞ҢUautPmU6ip𽙣g%YPK~    PK    A             .   org/bouncycastle/pqc/crypto/mlkem/Reduce.class=PN@}+!,JL/Mb518$m
],	G
/L<wEf73occ(wJon䎢99CնPD?\I'CGcX0oԉdk{"xD)_H"d82l|έY	c
Χ4|AFN]Gfŗ%(tKP
Т/#ЅFaj)`! 3B(,DA[o279mԘk$oˎGF:@C㢫fiɉRtWIUTf_^eN,'9u |O8oQfzQFPK^iW    PK    A             @   org/bouncycastle/pqc/crypto/mlkem/Symmetric$ShakeSymmetric.class[OACWTlZ"56P1<v;-[c}j"ŨCn$n?ef] f^3Hl6+ Y;<lBg:Jbo05ںlSPxQih5"nnl"˚U~WeC탖iR2߶l^	,%FuͲk<m$l+~%WM7^DVu^YVϗ*5MڋCVYzNeVà%{mZ͢fsJѠ$aҭe:5G-?lЫV#Aq5kA\gPw.~k{'H|"svqCkż	ܑ1)dȐe	A
cą,IDpKLC(A3PBI
YoE:C9hpsY_%#0&#kLtQopE$k"Q|9O̼#zL޴=<F\/sa/,ehO|CJSћ?L>OiOYVttBI>+1IN	:廅/+P.VGȣ6)r(ԮSffb!Jv~ktގsw|AÖwc↳PKٔѢ    PK    A             1   org/bouncycastle/pqc/crypto/mlkem/Symmetric.classPMO@}K,x2rf[
n1xM0xt̛|}|)ֽx`(wжs~֨Wn4e`>dE|?q+ĺwghd03\&reY(³4gAE"K?>Z6Oi`9߹2I]:q;L3!K!^SGCǖTM`Uah_d$L'EKuh_&t
&*
E9tkw:o8|UǅJئ'0~ PKP;    PK
      A             $   org/bouncycastle/pqc/crypto/newhope/PK    A             2   org/bouncycastle/pqc/crypto/newhope/ChaCha20.classQAO0}pLE!Oh<@<,	lns,/HGہzh{ڗ
1	JMP4r(14 &k$yjVpJ8du^`K5=6BC!U
/tGv߲LhFP'wuO^sF~
Ltf@t=ǠO X3/"%bA$"-BfFyVZkRUK*mIb<e,!Y^eJ`"OXsGQ
cc}l `H"vݐdX (5 ם eE#ZFL'PKQd  ^  PK    A             9   org/bouncycastle/pqc/crypto/newhope/ErrorCorrection.classSOoE3޸6e6nKǱwCSԚHM!%z	xY6YU/z	A'$.|>@hxkD~̛? u
+UQ 
,x m,n
|赝5Y@CSΖN<YU$|tvmgM
%:
v	{8nNG'Qu?"zAܽuFd<w:y;^'9^?2#o=p\[&& Y$		z0[Iz0t}(xY% ࢀJy <E x	D^#
,p	pMo)(Q7Ma[Ӷ]`a#Ù5
	j^~H	Z,|4|JVu.9GN뙑+%qW$/,8l2HWMZ:qɤoU@A84|v22ԭ}b9jE-W"P:Sq)zPǖqٌVKhlNmd

7tBVN
%\a:De/Ҍ),i:30iB~㖮JsOЎpzwr;9ڴ@Fhg>Cu,b
ɣlX,e?˕ƈ+,x#.u(vK`
BK85}Jn1;x99j4$sP(ύ(P)zh~e0gBON.Tթ/MZd!2췏772vMT?NisgDQ{Qψ8c.~JM6)x?1ǌ<>u<h@H PK$GĖ    PK    A             5   org/bouncycastle/pqc/crypto/newhope/NHAgreement.classKK@֘UZqՅ7YMCI+""QMi覺gfwý_ v0ټaP3FѸ6<+8dpfH	nY(RV0DCC7ns_RЕeth
^l{wB~\ݑדIO+jPy}^k}uӶ6+O(2(@BU7yIդ
e`H `Xpp33{dyno5"a1
#0 !UcNfHb!I,RܒDI$$Eh{1)V@,#ж*<OfsR2eE)Γc<6t϶V+/X?!|PKpU9my    PK    A             A   org/bouncycastle/pqc/crypto/newhope/NHExchangePairGenerator.classmkPk6FMgvN4uoS*8M/mFěԙo0!CvQR>rν?}l9ϐZ
<ߋ0//$ŋn]i5HN!ϝ>7CV N;n('|:L8pMIYC
Oc|qBnC?n}}%&| b!#L8ڦA<WN0 )q):

]
θpҋgOm1YgXOh5-kgP9Od@5P?ū9]7p9``LMq]*X,
(7uvKU,3dUM0̏%OYi\Jd ]OPeb3#6k?P~mvKecmTq+NP>dG1Y*PKs    PK    A             <   org/bouncycastle/pqc/crypto/newhope/NHKeyPairGenerator.classSkOP~n*"tgLHB+'崃_i8G߳ɖa==<_ XŐ4sipWUͼt=7z0^v$ފlA
B1LgUW=|1Q,_֬رè.,GA[øt-78k2tw!f\+&!CgWgy}hĲtucDrZw|* ;Qqq7889&w:iJ7}Ոn%37l[?~OOI暱94 В2;L2dypKI⮁jH
j@m,Ē)<1G:fcuc#%NaR5I=ӽFlOPBoyh	Z/XCҸ߃lTW|bl'.+71UicRhlPK?PΞ  ?  PK    A             E   org/bouncycastle/pqc/crypto/newhope/NHOtherInfoGenerator$PartyU.classUmwG~V!pIFĸėM
1Qh(hH߆e.E_s1r@8<sg>e`	qp:ۑƊ	ctSV$H/hmLӸ&$)&!Vq8qӓ,u,?rggL<1C.gMКsq7rLwS{9GoĤ^2t<\۶̚V9^K{T5kG&_kt˔ZNE-YuSkhjN,56j59U2AZqe; F
z~#"z	ɡug3UղqYιE
G<YQs	Yh{VZ8J-DwT/8/れe\񉌈K2>mk.JIXXT_O'ך8[kPXJJ\˵{
 gf٪Be1I-na@n/ޥ|B6Pu{?h13hXz>9jUduPsͤvbYMzZ˖}/f:8a^縩 pK,
TK!-*8%¸2* cY8n*J0 U<8kȄqYPzsb:5aD%fOɚT5.m<Nf?c%S12 //Q4 	4#HF|B$pR7 #̑`$xk{8OH<rM<kćkۿG !oۍi+Mt[g[[ћ1$m#\ٛQ;8p!M|+})9d:f!>BPKѼ  	  PK    A             E   org/bouncycastle/pqc/crypto/newhope/NHOtherInfoGenerator$PartyV.classTR@=@	/(BEԶ)AUj6]hHj.`ŷ-̨}(o[ZqXi'sn|`[G6-De0gX7^2b&rҜ
3[~'MGl1仂[sCwuNs+GKjNx)?cCQdi:}MPH9VzekL%MS丙*vE3l!b;9-c^ԹBӝb53LG^^8$xD%F[ƗQGQ-B[XRIM5I+i.>cmBKնvkIkq7*ѽmxe-KA
zRЫം3&p;Wr w3LwUIu:ҞcXx1>j7ɘ
GcA&e=U?%<Ǌo uz"^VÅzFu|5jfΦ7Yay+Hl$U@Նwt0u\EUðM**
a8Z0B\W
CIp#~L1i	3fĄA0%vpKB\R;%;+oE^2
:-knW/<Sx ^ёѱ.~(2r9&zG)'H34
{tD\p]*JX.a9}=$VX(H0v5yiNY"$IӰ|ERdPK=r?  -  PK    A             >   org/bouncycastle/pqc/crypto/newhope/NHOtherInfoGenerator.classTkSL~VJccTTj[д**oUPZ(RoÒ%Zl}BgQgSZɞW 1?c|F۶c˻%-K~4LRP2XnYs|K0DH*XRH6[_3-j[DWq
M5sKԤ:rbK2hʭW1ܺc5,˪0L*cˢlpes#QsZq=[..k[xb={y270,QYv՜ZmF3uZVmLjE5xUPomJXwD[3SW#<.]5Sjt{-P#nBǗRsv;{)Ku_5Ӱ_
5Яᰆ#j8a@q|aթAfQm\`(0{_ۨ['֥X|7'M37>ҍ][3x-&^k:ScjN⎢ߪTfX1vs]H)8>8a!0ˀ`zeTTz)zp3QpC-g0cig1SpW=:I9`BGܡyQ	4s=݉*}AO/ܞ C[z;kOBUˋ Ѓ~UT3O'%zVp?hihr+JV#ԧyTh\'dx4s*MV_fˤN%`4tUukdk5%OaOk>@KڏZدs1	()p0Fk	PKUA    PK    A             @   org/bouncycastle/pqc/crypto/newhope/NHPrivateKeyParameters.classePMK0~RnN7ċrы0 2(xp,MMIxĤCv|y y> a
7&}O"gUd!ЉL3cfN^sVLPRKZ2򊎫:υV)zBEp+_Or"_)uѱR6A|]v0z~N n]Btb[^avvco Me27hЊ_7&_PKL  x  PK    A             ?   org/bouncycastle/pqc/crypto/newhope/NHPublicKeyParameters.classePOK0}uݜn*o[=AM ;ypYhHx_:<%p=h<Z2bˢ[gqs*7JT&4rq)`8Qz̢*I$tsEZIQ4:e54R3诛ɧK~sEsՂ`[8EE^F  . ŖMl/Խ!]shоKjCGy;mZܰf@;|ŀBuPK[
  w  PK    A             @   org/bouncycastle/pqc/crypto/newhope/NHSecretKeyProcessor$1.classM
0_j5U{B܊?	ZBRj.<7?y-RhiJq(jRan])
{3UM*\+=*ېدO-Ggyod8hebʞc-|>F)~$)Y ,H}PKf      PK    A             L   org/bouncycastle/pqc/crypto/newhope/NHSecretKeyProcessor$PartyUBuilder.classUmwE~&I-mTD[Ͷ*R4@MK%6ٌv7nC9Gx&*|/3w& da}\07y9ȚW]ߍ{r!0$RʏTm^MxU8)PZk)r;sU~_	+_mU6
d*ސaGhVXRs*+x(Iۓ~.zKOjn"nW*Hvj#Sq`C)->/o_!VzP2j@]g,_=
^gs.ѯ5G\B-e*fn8*8핣RnSҺ:/jƮgP?=ڒh<vsNjxCÛpJNkxGû&J81/<9avLQ"_̉?RN3t]fCݑ~-N"h9s_R;MI!_/}.Wgn4w詧%~y</N (P#GKZ(2}
$pހ RƑf+c`l}₁ch8
#.^g1!bUXqSY|,f4nXa
t):΁?SjE(RtisǇMw~X)jtZ%k%M s$UH^:bܶ֬J]rm,:k֭~6qO}\'8ISukW|A19EZ*\prgGJ?c3qV&Ԫp9]*3|\#OHUsJѮYc3k4PKw    PK    A             L   org/bouncycastle/pqc/crypto/newhope/NHSecretKeyProcessor$PartyVBuilder.classTmOA~JEQPގC<QTP-/{W?D2^Bڤ癙W cXkPo3$̡4CVnRiut}7b`\{R|
:np#蝳5DeD$2K9qxDZnq)+%mH%e
(FnSÈKDf v.(Na	ڱY.F}Pw%CP_
^YPi. п"2d?6+)"#P_+oaf_y=]=CRzL%%6;hNWYnጆ6
g5k8Cy
4tRL<P8%Fe;4Nb8gf"I/VwTĄ99R^jp=i~aRaOx'o4n n$r|J)F]J\i :-7ЪD	Р!%,1&JRⶎnLDJ5W⁎^Q➎>L8mlox
Z@Ϋe^|s $Ю'N뮪&'!HwZ{*1m`GܨB:'
ӌj8Ik'a~ލ=,bae";zwx҄Uɘ$hGFCѧN$ΐLf:@B*Ak/PK-E    PK    A             >   org/bouncycastle/pqc/crypto/newhope/NHSecretKeyProcessor.classS]OP~:8P: *2DukA$&%,7;`Yg۩5J?K//ct`Ӽy~`cJ6Ȑk.sKzNA+lGRmCBxџrKGt+G.f?-.Zׄ1WJNձTˑoW?uКq=N.?q~#J#,[	D4#s01L<gQNzE76QfQ%r=k"jȠ@UE;4RrG+Ƒ8q#{/#goE,xnQakh&
I
*4tYָ#niҜ48ӆc8+Mn_o
&=;	5.S<'O0tRDB*Ô=\!?o?~;νa(F.$a~AZLŬe1%`[8Jo9D}>}FsPw
s)*j Gzᰑ~jesV$~ +
ē
N's07p~=ނ1HgI#?JW- PKmS~X  a  PK    A             -   org/bouncycastle/pqc/crypto/newhope/NTT.classye뺯Q:2&`LX@RX.$4A1# 
-fEE;eI@;cNTcem&NW{zgϹss^;L)N))m*ʄ9L8\1WNtnm/uL_l岡9Mg/dk-Z>Ss)}QCC9u.P軺oK&_芁~=lʡ%+Vg+.?gp˗/X9&W/hp}kL^uUW

N^9pU/7/I#/X=ўnO1#Sg:bdTS42Hǥѝ+ЙO'j53pܡ+/[嗝.NlN'jO\j\
̺umiMI:ґK-Nib>&Ztͩ{c4fIc&uO=wCۆ:ٙ.wreڹ5e}^VzZZzںڢoMOj:}㌮
yjnjXx}>*/Xtg:{m÷nhmnq8wٙ?هqCi
sqf<|X9Ȝ9G9\=:k\14gazZX?
.Ĉh!Kǎ^tavJ]M]ɉaGwAG4YGusD438"i8*8:u<3"cc#mhqQ躐yB4bLiFY"<9qJd(Hh#ӣ	usb4bRdqFH{шGE)u
шD"ΌF#z"E*YшGO"G: 33#'FjIш#ss#mO,E̮G#Y<- n0qQdqq1N`>=qId17i;<#Y<3_2D#Y\E<;~xN4Q:XYG#mhŒ(bi\"2Xi/F,UuhbM1i'F\Y\Eϋ,E Axa4EQOT拣i/l_n`/ƾ<}E+^}Ud(5>/_}]d(vS=U!(M+}Kd(vs],nƾ-}{H?ƾ+1Rnlž' }d-^Dc?~(poˏDc?~,Q7EcolobMxd{[ۣwDb?/S;#OGHhg#Eg_l/Gcl/j4kף=oFߊbٓ߉~7^.wGc a{?l'{#۟F?#Ed(v}U4בoll-{{@#M>G|c4a%m'lYKemG=[YKh-ZbkAo-גܭZk]	k	+i%u [
lI%
DRa;^"%Ė[RMI-1NdK-IYdK-UjA-aْ?IlvVhK-~іH[*mgק
:m	ԖT%i%֖Z9uז`[mI%ͶDRm;^!%ܖr[kI-.'
m	MpK-KRrKʿ/i%斚U[n)%wHnv]}떰[nI}[n	nɻ%\wK-yyݒwK޿(ɻ%MႼ[nɻ%ݒwKz [n/$yݒw'Ȼ%[I-yn[nɻ%ߕݒwK#Ȼ%[qI-yWnɻ%MwK-yQ[nɻ%ﯓݒwKz [n$yݒw>JwK-y[nɻ[W
nɻ%^wK-yI[nɻ%ݒwKz [n$yݒw{ݒwK-ySwK-y뵂[nɻ%Hnɻ%Iސ,ɻ%XwK-yI[nɻ%ݒwKm'nɻ%[wK-yk [nO$yݒw; [n$yݒw;>]wK-y[nɻR-Ȼ%[~$[nիyݒwK(ɻ%Yu [n+%yݒw;/Ȼ%[eI-yΩyݒwK? ɻ%u`ݒwK%ɻ%ۅA-yݒ$yݒw.ݒwK-y[wK-yY[nɻ%Knɻ%v]]/ֳInɻ%$yݒw{]&u׷[n$uRw'[I-un	nORwK-u뀸RwK.-KPwK-u͒[n^![I-uSuRwKoRwKκVCRwK-u[nw#uRwK_+BA-uRJnvO}[nG$uRwwRwK'}u[n;%uRw>GPwK-uI-u3uRwK?%ۃhI-u[.KҗB݋[RI-uvsuRwK?'Z&[I-uݎ~2Kn?RwKz[n[nP
nKRwK-uScuRwKoRwKFE$uR?KnvV=BPwK-uՒ[n]&[I-uΩgnHRwK-u땂w[I-u.cuRwK.ۥRA-uRHnvU}[n'$uRw>_'蒺[n?$uRw{]տnɻ%BwK-ySyݒwK޿$ɻ%MtA-yݒm[nɻ\nɻ%RwK-y[[nɻ%oݒwKLA-yݒInɻ%vG} [nm[nɻYݒwK-y$[nwգyݒwK_/ɻ%bA-yݒKnɻ%vO,Ȼ%[1I-y[nɻ%ݒwK:NwK-yFI-yݒwK-y$[n'
nɻ%ZwK-yyݒwKއ%yݒ[R!PKVW
  ~"  PK    A             1   org/bouncycastle/pqc/crypto/newhope/NewHope.classU]Se~GvY0nkRBEHK
XaItX2?xh8s64a9xg7O _@ddtM8R`#ld
 ld]r3\la6N!ѭ'<,BޛvU?#`0{c5_Kfa3/@ ]F|v;Qʛx1-Ra.M-ߤC[
mby,&ebg,̽^u1dی皾ݠ(bvWm,k_t
Z}.Ck+S]
͆o8vī͌^KInRjا~(!z])7Vïٙ׬nRݷ~#c.d.`_ǾsL\o<Yu]yV;d<O[u"OIlX462]v
,n0sĩO^Gra@d0B
.)xGK#=izꂛzt!zV:bt #Dt| YG.0To@&Я<t0"ut10k1nhuç>Aa],V`XӐg+3%so9U;aђU/Y53K W #$9s]C_?"*C=44_M,0|@e̅&]qlQ;íq)Ԕ4$J
)҂n]#!2nL1ĴPoQChnʈ҆eAuavKC4$ԑ$
tPMB
JK4ah$(Mm'Sa;HC?n1@}ZS khtýGϮ}Yxc4ڞi)ݢ|teǓkĆ[SJ ,mT͠42J`R䅉8ߛRCbdgH=X#*DqdrbkD'I@{'Zi2t$IMJ;,EJ%u2Кĉ4NYلyg"&R[gGVV)/8glj1!aۋPKR  R  PK    A             0   org/bouncycastle/pqc/crypto/newhope/Params.classMN@oRA9rT.끣@hŐp2K vXL< >qJBMf} M	\nn	pp7yO<Q?-\IH=BŖ5LLRX6Q"}ESkV&Ub(3WyO8ExE\nм(B34:R۱L
5ࢍ?%*g;%7^-[r)y]/]֦j/bPKs!   a  PK    A             .   org/bouncycastle/pqc/crypto/newhope/Poly.classUsU6ݻ.t]hiOڤJ
&*ImL1 t:3>;}dqD^|sw}Q{(} ?9޽M~~C 'ڒ%<08#!8LHMSO# ߭Ϧ9RZ"$G@HjauX)z#WS3W''2h<}EB؏?7N&S/MrC]ɹBv2ϓ{0V)sP@+zuyFN+uZth斓˞Dp<PME>żr5'ϗ,o-;e	ziuShPŭsbfGBlέWܒWrbrsc₳-];/~oϨ8/U'6ϱ?Ogy*N;ީrUByB=OdxK\Sb+e9ܼďsQ<W<LBW9a"ë"Q!{m}AKP8R
 3
7D1^C>2`42Nb3܌psV{8ܼ	\Rܼ%o⼎S8ͨ#AjxW#sLn՞ BG%J
="'P)pPAlbQ;hÙuY'c!F@zDhn_iL_Xeoq$jal&Q;C%j+>TC0vN+&:"Vb]5k3	fiXrcbf窩%k1bi!u4Bʊ*]~O].~{#M61Cnmf_@_|(G&}ک`HOP	>l"#'K{%lBLNhfjg1Ky5`w{bJEME,G%@)4ֿu#Gznx?I=l#Cg\ ma#Y	^	5K_IC6JQ>li،bB7ۚՖLZHF WBXW×$5n4TB2?ǲ[9i4,9ѩRVC+_Q+G0Aj 7Nh{AZ+a{CQ9.2]L_!\ "p%~*1/m+b1k+[?f{]>ɿJa ^QLiVt PK:
  R  PK    A             1   org/bouncycastle/pqc/crypto/newhope/Precomp.classUxcWֵ%[Xee[eY`Ka0C
'$UafffffffffT9<?2QkXc" *)Ami[m;,Db܊/"
S_~V[ʿ^ej׽Ҫˬˬz{pUHf
wڰՆl\q-7COnFwfڮ6~6ivZsvazsMv|M+mɴ[h[#HK-ڏh.#H~GȴGHb7$RIx+Dz_v-alE"͑k#6^wϺFOut|>ejN%䔩1Lm%yהmd_25#lJۮ}CvZ𐠸$u!M!!x~!KG.ҟynwCEz鴯1t~w0@V0z"=H	F	^PvctLI'+Lث*-,5rySgyР&fYa6z~0;<A]lNz~0iafy	m}"31[\a7`fs!vׅ7/BEi=,'gW^҄%O.EUwqiKXE=X
.aEҝV=ae
=JC=Ia
-+{X-hM"v4[fmROxX֥ѳ5l@Yx؈+\^azؔԎ6
0[m!$91lB070mEۑ=v#Δm;v[5w#awzOyؓ}o/FO7MDk}0܏}jx HɆ`f3<N(
"ix
$}QMO1$5<V8ڜgxH'?dz4<O%inx:y
Ϡ9nx&u"٤4<~2y
ϧhox!O/WË|fx	NK3\Fm.0賆WR^*zT3݆28:g4mx+
oMN0`m[VV41vN3ƆwRZ.&wG1>gx?
`rO7|(<LziGi5|C
gq1|O2S1|Rz5|s5|1/09t/Q{eF7|s`X&ʷײަeMwH>ҡmznӳD0`	Ïp7~L`O9?%}䎆}_RX+~͈z>6JR8;z=GZdןPT܆
elOhN5=IU5<6%a@~ÐlQ}
Z2AmWYi	-vZ˃M3C$sěiưYZʆa'w
tZh0Gy͈%{i9ΰxa?p%
3dt!]0ٷ6#
6T7,2sc2#oSV9jQئL6
'j
2ZmnYcJ6>pvFm39Rs0'E;7YYuƮ3AKp7=`҂'X[dڽ"d7\ᆋpq.U+GNV]`,ewck(_h"XN
Vv4\tpUeTw1B֜;X4S)kpmgu)k]6 /UÍ4FbÍIj	zMlFoΐ~-Öt[
GgV4,I[ݶtÃd
ǂ;؎+QY
vᎤ;$쫥.tiveD޺iw=R$%܋%`oVj}hp_F1}ٟK[-	AtLCy5P*VtAFy$GQMc-Ep,}Ϙ%FNlI88KJR#8bKI^:g-89Ғ3<|ڟT\_]"VS:ĵR7%
&~7қ*F26k[	%_ǈx=c
4n$|p哛%V*mdn'|q	kU;3֊w=nFV0uH4cR˼ՊR
)
"i?xG(ʭ!xq:d'h(잤Z)z̧Wx6ĂgPQxSW~6=3|QYM^]*FT)l%]Mڶ(*MP/xLTZyb#ƶ5
?p᧴}?#k8F_Ҕ{|Ő4!ṳvmwt9}׶@zGxg*#%bJOÂPzOѶה#zwo;QF1=w&=we9Qz_N7F{UԻgL;rCz_+;WԻHQo\NԻA޽#=ޅ/EsKz?ZF{t?Q棢޹SEzWn_{r{Qԗ޹qQD{}+E{Dzǈz^nOԻuwawtEQDIQE{(znLz6Mcq`~ޙ9Dz^]ԻbQ/ޓzuz$XEԻpw3QD#'zNvYQ:[Q2ޣzw*]:U{puQE;#zW"YDݎ޽zW.)=m;1fF̻w1Vb}ψy'bީmļ3;yO&=w
bbļ1bރ3ż{\U̻O1ċbbޙżż'/ns[To_b1܏^k<[;rၴĨSϼ3Bء-Gp1#[IQtZwGϼKJ!nq<'<>Óh{+Nw
-J2i4Ov2IYf1gK
ϥm<*瓱|/^DN*.%$>D.%*u1	upúϕeϫjzŭ!kS菉=Uq@v^=MXwZ' 0纕mo'wL뺓}8=4W5Ps?3
[v<Da{}c{Z{d5'H~g$
z{wYܻU'.vs^k=?`<5~d"QM{h^UUr:xZ6|ks<somfE(Kq(=;"?#RW{gtv๷N>l4s8焊/n_2xN#o蕟Ϥ3ow/$s
n+(FAθ Ͻu?鲺m*<г_!	!-*QFo<.nSFA/NdEN2$Ř4Q['y۝> 
$-yK6y'CI/hWψ'zU'*f>Ƞ9gUqabj
kCSz杰s4ϼ;3&Ljqd
ZD8ty=.2AN
&)k4(M<nS7+1ⳑS7o
0pNs~pnRХ^F-h=y]`[\{Bq_.Dsﴞsjj=`ܻdwUc	ڼ%s.E^\siŝa=ip9Ք.OZy&ŉV$kIsﴚI$e⎾G
W#fquHS(=4pMS־ECuuȋ#zmsﺞ{}Hd%GϽ4ŉ6aX'22!YqnABĭxVӻr,Nr"oGCAȈHC$d'Zeǝ$/vE~;m=+~˒IiM]qK
{l`?id bV<w<<dxMP-9y=>e#)(ző&ci%}=bxvwuq͓Ad&N%iEs~:tu&I9<NΡOv<P{+.h苿N/i	\i%t)\Jz#OcΗQ:.}v^EYw5QS/<Ҷ\K\G.Qv^ϨFߖگǹpچ[n)ogDʪwf}wU
!acZa[Vyv@=r)0[Q}3)e'铗<ETiЧ,ï>GJޡt/!|YtB\*ie(*_(AL&-:ynMRQQwi#l>	}?dBQVV'$u)i|ƠΧ?gL_0h%S+_Sz!*|Kò{6#Z/?+:wR׉ĕw'-ކSUUzzzzzOWUJ!h؁rp}va1VTV/aC|a=oi-L27ӴYv$̐fǰA%namBO-n,==~/E۷󰟴TD+tge'#na7Gh2IİDs8MkXoqvVYUa9:)BOeucavc0U蹺;;dnO׭
YMyhb8/jT!3LP1	p!ƭ3bi:\pQ[܄Ӧ,AN$cKQ"\>p,
xˤ$[~+ኄÕLeUKJm	SiS
ikN!ŀpmO"
סD,e]>=r/?܈;tX/nBM۔1p3v3³4-!+VtY
oC="ԭL.ݎA$w;=w.?މ!+#vîtnepL{R"nO7
;z
=?KCۏakoI[
 iBBx )SAԭle"<(IkK(zӢ8HZ	"){
VcX߹oe3<
ֆ'4Dѡ/˯N(?<odwgPLe2=g39k{%'{/;Pse+Te0*^Lyx	)ѥ!5V`1JdTzk^Kt:Dn fԔf}7L\,ѣt;v ;I
"oT:N=>ҥ*`P Y}!1>3>¸Qr@eqe'h*m=ISDOT8<Cp,JOyG_$x7/WؼB^ߺ5FUV^ڒ
t7<71?|!+;DwIk
#t>Y(˝>͎.?}W!sRzp+VjR詿L޷*|ǘ{r?RgPWnߨ~.{Aݟ(MEʨ0jۺ]ȘQHnZ|1R"cgpۙ#C0%鲸p):˥6uLq:HNO
Z|.9J/S˰QOOʯ gIb8H7D/V\6kæC"icsnԛȰDӆ+̤'7NUX.q&	Mnu&IsK7-oVzHmn9IZ(:=ܼ$]jHm
܂9"enfԲ[U(n1V,,ܒMtKѭYNKnц2aU^n9jV5$w+0dڭHGnpU-}sXoLP1vkаskR42)wҚ[=:u[t1bݥ[Hu܆m6mD҆Ɛ	onc'zMi6#nNEKnKRVŜVkv[iL'
g0f],v$;Xt;DagO0iJʃۍUI;M;w{dbWý*_߇}o_ZqTϰYw ctZWbX?R~Fʪ;>#~IJwCvH㎦nCNv?N:q$ӧp;	;p'2h;r2]^)tSN#g];{ucLZgcĝME?璷.ŝGʗ;֭!b2ƒ%ɩߗ1w9-+^IUTW3ne]CL~˿r5+zn*_~vp7SPz1cVnq;V.j}wbTe{HKpRU9AIq0!?{!Cv{fMG)\<F\8I;tOR#b˿uiJgH)<KZ}!dw^]"ͻh_4|>ū^cػ{Q;qoi&ò[߷	]"6ucH{ڴ}d~D1m'r?ls&r_׶~I]av<.}ØU{7VuhX꾧ê(|"mB@UW;+sR.FZn;v׺Om\t b{uYݣ_tvt㥻͔>ytz;ΑS^=Y{ttVKwϿ*ݽeX{>*}xttݻA{&^ތJwo)=ut+t1OHw/o&=t瞒E{uIw{V{t3ϥGy]{u3WHw|F{^^xI{KKw'[z{֐>G%O"}$}2&ykCO~yM{fq	v	ޛkIx/&&=5]{^'֑rQ{	K$>-ὶfS{}	[JxHx͐֟%%-"ὶ,ދ+Ix/$% u	}%%=ޛ%%"}:	C$+}x
	$~^(IxOl/}	-W}%K܇?CޏEjd*>%ȁ4щDhm`5T|-Ua5L|8e	GGzgx]#G3!cx,eajxOaiZ9YBNR婌yN!tbE Iٴz琗z.>>d%^$y}0G.Wv	;΋\JLtI1k#W2hHBѯkIXX3b
q
 M9o-quV!r%
NTeȝ#wQ4qK'-I:4 ڷ0^XR#TG$ctj@q2z5'IJ:~KEf\0Ɂg^Qy'D^ I	eG^]t(^ɇ7k`M*0xtʞP=%)	=k3)*D>dĎ"1.;̈5:O)I|FMI_F/%LN|M\~
9kt#3}{Hk{5B8E~K?>LMv+1o5 ;Q˟D594'u8]cT-qyԦiJo#&٠@I.a'	oq4A\f 4
S*Yu	9bRCkRzMĤPuV?DU0Y&2ց#%H_*hc{eԬ@a25::uo~MTNҰAQj_b65#v6$ΰ`&IX0U
8MTר{'%jOA TtHJd\}qXSh
1%juI-܃(kqm2J][^
vzy<4\V;
V /qxE&RDS+sB^*WcRbH̞O_>&R󦒑riCUvYp=FRϸԬ
hȍ6݈~]gR7CP)
woƀ`s&%nA*$c=hd+O[Ӯm8tz41vے7lǰo{
jGz;;֠.])J,ލ;){P4I&|3ܛ}hH$ߗHi$ > :3°CԐa4NJ"Ms1.x8W IkHdSJ|*/)jϠ?;8$"aV8!s)+#*|_/ %Br^DBbŴijK*M\FF&s9PqseN2v\̀}
k]OQy=|7S4ȨߛHءgp3oWֿ	Y6biU[4([說ݼгoiѯs?ey+$Ͼ#8Yӳo=ciWQ')i)
zΧ);g)HId<ψƵ/S%ei+4*@:Q]ޤ?x6%w|"5|V=FyOAY&5!)#x|\'FPLyɷ>UsRjA/TGfP
}KI;&
~`H;?2	&eMʸ|7~q-ğh`k,1 **d9BGrzBN
p	I1b&ZIK
h.I&NER;Yk$i+a$4}Nke$2zɀ,e	]4HYvm~/U+~4b''b'{@m>&,0"!~;,R2)ūD61au
	-Ji)3u'(K$'&U)$5+9)"c%'	sMF8'ùP<7}g0LO50-\'Y	;
dĂ0\karRpaBJۢtI[i5+=dTK1$Ati2t-K2r)_s+0"ukMw2UYW^WE^:LY%2` \'aomu>.C2zt='#ހA	+Au#9ѣ 	77e%,G[뷤KBKފQk}0N0b-]Q_=9Ȁֳz;S\Bd+%	ѧm۝	mT{R!ro4G	p@v9rگ)kdbx
tT['ItPxM(!Լ̱n+<	Odr}艿NjNx
M穤F[AY:d%|Řl,[ùQV؞O aB26^Ġb^Re>q^NUk.J|7մ*}]CZ׻nu[g^Ouc΍D5pU;XofD57s+
	%v4(pJ7w2lQxeJD?xnxoFY>JӰ%|5hd&+1mt{uǩ>AV}Q<Ő짙Ԙ34O?K9ϓ@Ez4n=
UXU&U^#؆od4&)·6c;ߥ_x@U!wQT4t?(|JC]*~QpIQPpLJߒѦ|G'cRqko?oZj&bk9$mR៌)"+ B܂I~IKpԭq-4_uQ$}]+uɘmHn3)XY$"#*Mj +!C]tI$nS*.KNzFc#r$wS0/u=$t^j|,πdzyƤ|\_z?JLruy(LэbƮBJW(FnWMr9.Y -IdY錛%'7yɌ3iO\vsSӴ<4%/KSrhJ'K.[}܂JY@2¤$.BɊ[-Nd%@K2h-Ťgi$g-CFR=KArrtjaz4"NS+Q"VOZ'YVM]FZ\d)kk0.9|M%CZQrks]preҭGAY|P<!	MlDşF^ 9sz$SnJo3j3Z`LoIRA-Vs[3)lCk:cgP^mKҒێ+n{:$@sG;1lLB]OvnNL:4'^8{VCf_r##9sP=$J<dNa,ۻÉZ`T4vGe-h$CXP9AKx[OD9>k8Q雧Nq3h4,b9fԚOwk~ܹ$G{'-3VEӰ^]BEs)
jr1aAS)WPC~w%Q*r2ddk|[ix-UuSn Ƞ~7mLqoe@S1NIf^
EXnzWtЮnm})=ϸr2Ja0
P(#
hQ>NZz6Oh{r4IBgAnq=4-^bXya~IMJJ	QW{7$)u-3;ti]4º鑷~􇔕->a}LNF\ZSĬ%t_Ҫ)j"7etZ7]wcsSSE'⻟)BRWtߨiHwPISCQ
\??PKF!o/  P_  PK    A             0   org/bouncycastle/pqc/crypto/newhope/Reduce.classMN=OAC;?0@`CE1BBrlvX0$?߰2<ߙ+͛yo7kT, -Xq`l'O ߚa`]jMл!Cw'OPD43B~?ʀ\+까6M|W*bif/D\ɗ^HޓU _FA	yXE8IrGl%qƀ3`X~H3H:)'Թ0W@t|oq2-߽bV[mS>r"MT=F녱l۵kԀ?PKf"4    PK
      A             !   org/bouncycastle/pqc/crypto/ntru/PK    A             7   org/bouncycastle/pqc/crypto/ntru/NTRUKEMExtractor.classU]SU~6deLV(X?	T(|ZSBAJ.CXn6x87^L:Ǳ'A8Ls:'_M!!BxYf隓/gVOYuon`z,-,ƮYV<G{g**@pnsvcpĝ
'T.w7ƫ2Q}|3Ls)w4S\Z֬,pE=mX|#s5KSN2oȲ6>Py^9Ǭ-64W1i~%/ڎ%L*)1c,cnc7XgN5m6,R.;LD|\/zҵ>I&6킥u-,Q2iTTduB!;٩M"ҘDC58S5Y]ˌfHCHPӼ9pʥ8#.xs]H۟V=$*w$;usstۚ25Jd!᪄.	^7$)GBTB<a\Ʀ=װ'6>hW^"
>{(:]
p*PqA[ F\AP8sxC+$!m+&ס(x	
wo+{
"WЁ	6 tØ+#&d`"9,$[qke#f9q.8u;agڜ4h&)w{&V:4?|d/x͇HY,===[!< >	Uė/C>+m"S J0J؞?&hvK7e|sp[}edS*KJ>N? b`26S!5Tc(VCjЯJȐ~fe9+15#~D=SXIa*a|4$;}{QG_#';"b{+_7{r:,.ZxW
d[j9}/PK!  M  PK    A             7   org/bouncycastle/pqc/crypto/ntru/NTRUKEMGenerator.classUiWVbl!B&JnjJhA(P6;tyFD$'.isRSz~9=#mf+kN?ܙ7yz 7}Q4H83'L8nؖmNѶ%\niyw)^:hOvLV𾄆XKcb:)U4*R*-U5Xᰄ:o4m|	M癓so[2wL}	d^PIIyx L[DmYO걣	$\YenS&}KCu{:Zv沫ܤ+E
KzZ|M	=1cS^Y%J	wjM.u(VR]V+pfn/곙{S3&830yo[O(fmˤ!K95
m9l.%-XN1j:Q-[~+\J4
SBǡWNqSVfresJԨLMZG_bvi0_XЛqkN@ϓ:-L`<G"Rr4$lPk2.d\qYWeɸ&uoxS[2ޖ.#IM}t%KNtH_j8MvLR>:~sTÆO?f(HEVPB
ѠT @CB}xv%\k-B8F:+຀"*z$ hAT%xФTpKyV㎊pWEW1)x1`6!(t~p_%rA
>Wp_ 0|C@(R>0/ `ҝ;!eXF;냄iݡ뾎&ԓй	wķpcUʯ]?aGI?NƀL	YLr 	Q'Bt22fpsgѰCHS/Q#BWʝϰej
b	-KP/)|IH؄m4iMe<8D~ZE*Q
ZuB(ϐ/3d0_?S#FēvJ PKFB  /	  PK    A             B   org/bouncycastle/pqc/crypto/ntru/NTRUKeyGenerationParameters.classAK0߬[fW'z[Do^<8dL=f⒙B"xĴ(DQ!{K^^S}P1#K&c5b+YH+s1jHkAz~r6:P`	6Kq#xF27-ih$DzGaC<Qga<a)C a>=!lwİVnTsaٝU7swlyXIQC}S1@#Gt[=
PK7P     PK    A             ;   org/bouncycastle/pqc/crypto/ntru/NTRUKeyPairGenerator.classUkS@=mC]h[< EA<)΄BMC2_3@a?+Pݽ9sݟ}Ёw*QKbHoaN
֓9ܤUnrc<3q4[Kp3ܑPSIIzZ3W		U"umSS㚹N.s\
+m8uFLx>8I{U]NM=k)'UXNRLe6!ZS2Fr&ctf$º0
=2;NNϕwK?$4\orahjXUzcfKp>rQNHQ|Bsrh xv:hZx]2M-=eoG:(WAx{kRZUPp,9.2\b`h`Hb?^	5
p5:>C;N#XTJ،&;1)YWd'r{_O6xDd`BFǛkтWS=#-4
s4ᡂƃ
uTP
dtԢ[=b׏y,2ncHF3d3A0/d`TF+Fd	02)3CNCJTEJ i$?%V4J4zYL}IPй
@p1n6byoa|1B.`i7AX^"ؚ|*PE빈'dK{ #OWvѼŖ7̗ū,?:PK
Z1-    PK    A             8   org/bouncycastle/pqc/crypto/ntru/NTRUKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF#}0y%E~!AzAeg`ag`ed0!	֌d2Ո"Yf'#';/0DSRY"@fd(" d@[Kz;V`
\PE@Hjma f  PKC     PK    A             0   org/bouncycastle/pqc/crypto/ntru/NTRUOWCPA.classVsWJږ-p&%cYő9v&q'ki-)XB~W(iet2>1;@cD63x={9{87${[xVw|scV{igǂm=+	.ֻahTTОsne,DCb/.V$)%Sd1_-rZҦQ-QE/8H2?]by^8MdbKwA!AM^g)BAB`UM+Bqcr*f%/#vjzOJ8-=
|^YΛ;byЫVcM7l{o뱤Ydob~pےfhKWI]O%H.f\>6ʌ'/JD%'d=O./s)&m@IK]8gF^02N<^hN\^ՍQxוF<]LYg*V8e`WaG3
bnKɿZMYRRF%=
-+(xw+x=
U~)x\UO
z'wu$cGc&!kI;uN)ywS/;ɦ9$؝}H5ux8B_ɭ߀mTlf7r+Osc*hQiObR{!faag21R11U3BV!xTC~(*0gTahYs*>paP1)̪0Aq`xޏq` zQ` E1,pU{CaPb(3T0|a3>p=0O23h)4ΰȐa)i[&]ZiZ[xv0Fve46:y*= 
Hy/35|-Gm]*j۾Sڠlw=𫄯!B@&vHIN2x1RWPjfՄ*ZEK
?-Qw
?Q;@/-T'oXXӃްU<!7r:HtvuovmYsmss|[B-?vMhm5PI;H$sz6]w!rGU"tw姲_'`[Lű[k
wQ0J$Iq<69bgubp܅9i7Al4
ݓ	o/h
{P;zz!%i.2!Ϩ{=WnQjuJjôw}m_BnT<
GottoTްXT9&ZkxU7%͂ o}tdtuk7A:|k2陙V+=az+]Ah45C
ܠSEHtN8'+=T÷̧.9]72uaG:&L?AUq>;'G6s8}Ag?_fWҗWVn5y>~eu9#+R`g#nr"kw|Pj޹'RxauJNg׿ KJN_E'uJyJ>(Ӝ77,S엻*''/TK#_UYS'jɵS8]
K PKʔ    PK    A             5   org/bouncycastle/pqc/crypto/ntru/NTRUParameters.classkOQKYBxCEn[. ʥ\P>.eӖ@[wF& qt)Ҥ9sfOΏ߾;>
:t)H
nIP&S\֙0,MGB;+{d8y4si'#pg?mg9z%l3mȥ=3Erb+oα9vn,ӹ3;$xvp$1Ů0E%XIh#[im'K7N^[]*Yͫc#'S/}Eܪ^>$^ۖ<Ze躮HۍWwvkf;cXՓ*㶌nwdܕqO}dxH5yyu*/LVCP/T]&C[*ڠ!`y
/d,Y<PTp#02gcILLzЋd Kee)L<wj&k"{!	)
p]ڀki#QS4Y-ٖ9	b3G/bcYl}+f>^TX^XE}>C'G<6N
Z~*=x3l*F>^0mTDpXW""Ь@uEZ@E	
Z"	T_ uJ=/PKr    PK    A             ?   org/bouncycastle/pqc/crypto/ntru/NTRUPrivateKeyParameters.classJPmm.B@TEJ"څ]R17BJ?\ >8mCͽgfǁϯ XaPVPz8C_2FQ'yBEG<e؊K=w(w4J8Wd½咋!TOovH?ppSqN((0v"}ZIaǺ7ꚘjB3`BA
L4Rsf1O8b:&6"I)T]jBV7^`oaG`QNflP$C(z,NPKF*    PK    A             >   org/bouncycastle/pqc/crypto/ntru/NTRUPublicKeyParameters.classKK@4mѶ޸KARvaWt(4"J.(a9sǁ;_ ΐuj:Ci8}H2]#wdi$02e؍UkI$Rt(J:"
_=0M[~Dw@&
&,6Ás9[dwM֚sr`9d8,̣lbZ%Z[GJCA@5r
ew
Ϩ>#z&H	U
=Li<IPKہ`)    PK    A             3   org/bouncycastle/pqc/crypto/ntru/NTRUSampling.classUsSUwkVRHi/1_MJB[)D)Mւ5yWlɠ?t8Ԗp8]:ѝr!H}0θp2s޹{|諻 ^B
jx9Ca8xBTxbHx4W}
W-Q*jB1Szrp1k"L*2EY2ReR,_*:9캨\Q'RN+ڱ\^-'3jITW'
M]T3
9-q\V*t.>_vsਠXNL
JF55QIdʕ^L\ٴ/i4ĺzJ!DE^gLe>Ut?5wnI)+yUW˳ƪYe6VVmPJmHг5C
1u<ԓZ,77fGH*]&FefeZ	$M>V6?A;mAGOEtZ/.<®AzONn<]g5t&Uu42Kb }h5Ͱ
Pc2 ؎26-c3{e °xYnт;q2ExG	f_B$D(^(3)f^g洄.lP~Ѝc0D*N+r7)+KJiTTZM8ePP߃^j:j )HK}q\O%}7/u2޽e=Z]9s]㱮s˔d_|km%MQu08}jS^r<50?,I*UdAw_tEtĖ0[Q57w3{,v˙BoƱ3r=Ho-a/e뻃5\DgzwR'"w) 8㞌ZQ0oys歸`m6 Z@䐙7#i*$"ce6;u:fG
>;$ZHH ,d3X"[d#o4[V|td3,^R?4AA[D[@Uce(hĜ`E~qE"c*z@;YzFBB#x!x]~{v~3	R.}{K'	"~gwDͫO/h; ,͠iZ#u	;'mB7h?~Z2ۢm&ӖRY&D̀hiG}R! @nFi!?&k|yؓ!>7vPK$  a  PK    A             9   org/bouncycastle/pqc/crypto/ntru/OWCPADecryptResult.classNn@	ƀPJģr"Tq #csFg@H)(h`|lYqDfB%Zb)bE9he4ۋM'Plb-N_J8T$&EO>99eeGGu<45ЄWB˅6?[Wv\.k/OYe;rb|f7<oWA7PK@X      PK    A             3   org/bouncycastle/pqc/crypto/ntru/OWCPAKeyPair.classn@g11ҦIO5LUR:'tȲɏ!Qx({ٕf~? x$;!diz꽚ҸQ(dy#,*{yՔUZԟJ(֮~lv7$M^.D/An{/(B$F'WxΉ)`]0/g?PKDAI      PK    A             5   org/bouncycastle/pqc/crypto/ntru/PolynomialPair.classAK@4mmZc*{fUM1%ָ,@8"y3}Y|}	5IT_Hr\\	?RdH]8#vNLDETEEgX<G"*VRLUV*Oe6iTiö&o¹O+{55́M#
PFt7!;]>n1NyO
wG>oukzwPK9    PK
      A             &   org/bouncycastle/pqc/crypto/ntruprime/PK    A             B   org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKEMExtractor.classWWǿ	L$Dd	`mJ*(*] lN&tֶ?6?393{}o?=	rd$aoddqBB}dq|$$H+u\Ilo`1IGVm'Ma6,@A&,5ҎD:%xxub<tӘY34nz9/)WܚAfAϭPƦe)+iLÒлfS|gz&tgAbͰ&T~XIfL'lS^(2fܚ.8HB:H
%H5jZ/gЕ9XMoROH7GC7a&x	+-gҩFylE'In&_wM*֪]N"J'ӯN1zЮtxW:+R|\CrẮo2zqP%EJeK+]}p4oET9M傕VGOÔs4{
7S;9,tֈ^X<37Oٚy-R;沕ΐwB_]^[|J8XżisoTrV$4
+dL

h
*8 i(xVA\q	ggǎD㑑GvDOCTSq*!d1Fc'O2#<*z!c0S*13ڡ488	48UshR!Ь-*"qT<s
%?gQ#yF̸¸xqqx2<)
cXg7#13pژrƠ$_;@?e[HFѱa
H۠P;3{>^'c^XX=B|3#k |FDT,TYVx!$ּ|m7iY@"+"@vw9(lѼZ֠+2G`P6Ҵ:hvShmI\7YhjBnɾx
>wNYtne*-Kt	QW	ݢ[t
>zDMT
Wmm>ʮ>G h
pm/Z*H^"uɢ_&-HQEzq@s=Bݦ,Ajsw
ҍ
E	^OlH׆*vvÜݰ?vr.#""91"S+_x,<xNbH		#NvZ͙^NIh{zItCׁ[پMPK`T;x  
  PK    A             B   org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKEMGenerator.classUmWU~6, @;5XZJ*%\`1nw7_IzNms?ȏgvZ9'<3̽so6	Hj:ংhjz{AA,Jbd;Yج۹Kl[nXe˿IɦՂT)1{
dY/*E2kkvZKY̖vRNrv }{t9ٲS=	C?\sfBܚ8?L,I_^H?PEZݞ]jЙ+==`ʽ[2hvsR,zF/T}ImTJYvyYVs3FfʩuU [>4#.Ҭwd?G媞/K
zJo9E`ԒwijLܪɂ+;ٮTBCY݊Z%_XY['syiInX\٥=ӄ*UeI#w68rɡc 4smnpN|g]3vCrvT])*fT̪ⲊJp
<Y_UV\^9=ڌq351Sot粯Qbz#zyZ3{"89i1 E`c`dbx-:10Ѝ(Zu$bGPu"H@ы#WxqCc`A5|
cm;wcaak
`:C!ϰK-5a轳Ho"B#蟩N|J~[ͼķ3χ9--h@sw\_ݻf&Ji%<ȴ2*3VDHsXCH(8s<z
wOqvq):)JF5%:
)/(ݢ[ĹhB$""qZjB3zE%'f>K^R$E=	~/5T*	ĀNTAgPd,^~$vH	QCIOD-iaQ5Qݴ1"y7bDѺ|LDXhf7zQsF_0]ycBLq:)&#tj{ݱ`SSb%
PK+Gcz    PK    A             M   org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKeyGenerationParameters.classMK1l?uVY+œ ZlOqjf ((uvEDĂ6d2!קg X`nƚRWu$hI-f(-_539#Bݒ@nդ꺎mtC8QYzR	^Z*Q.OU\Oܶurd+i㯤/1G#98*m2,+?4]XZ+0l"N{]<1L010iߐP5-CYKbԷ㱞,l	:0E*+]}l\kMNϾ>Eߖ5'p z$PK@m  :  PK    A             F   org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKeyPairGenerator.classUSWVe}i&4
imFIbV|G
k],_32Q,;{y|ܳg׋ faI'2Mܖ'${K
Ӛ4U,+f!b>;2yMׇMHm8ANBHQ="Yt%\5YǪNԭx:	JQxm)FneݲAXvLuŁ\(<fUܬ*TY:/mGfkiPYKuO6ZnT{)Kܑ%zsl]^vhPM3=iQC Օ*kzd/,ϬPug:6ws]jq}n
Y"i$rYxiJI3b
]>Zyj6e\mfs$E;ov\x¥_Ť`|n&7?i,oƲyO!z̡J{G\(ʸ*㚌2nȸ)}PG222w;X=fdhX➍t^Ŝlu.܁B~)<%C-g]m
]%ULoCRû1*F1bCGHdWV1i(*CTeUKo,0|p?O)Ɩ;2|%4
f̐WfXaXeaaaC;8+)-|J$ӱc
I3߰K<w~Ƕ0TEB
b#㽎i8h)G6vIM4p#s7bW0Adr	Ka-
;?N(4E0{Z@c?BOdZ(4Qt*U8
ʛ!mHS7`O06՚
j/Vx9]MFj!PK,  4	  PK    A             C   org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF[}0y%EE~!A>A@&vlXXl|H5a5#&e8hDQbf'#';/0SR"adʀH
 y@63֒o#X3T fҬZ[6 PK3ʄ     PK    A             @   org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeParameters.classnU׎3vlʹ58'm'$!H8vabRW'Ez\ < "@B$^ n@b*_{k֞w} <	daDQ<t&yR5j
90zԸP኶3 Fbiw;fySUN(AKyШbi4jZgXYokWw\&q4uMwb2uYݹWL47L2T. (Z3'lqe'*nfҩhmgZLffiq|]S7W.M2j{zfeQ(x;.qP}>ƿT6Ҿz6L$ٮLu&#1~Mؽ`ćn&S<?	cqB&	E%e£0L`0L! Ȅ da#\!\%\#\'  <Ix4ap@X$<CEx6y/fUgyI8qr;[G&&cBCBUB/
$4%1i[jw*oעz/l	
`SU|,߂HUE`]UlJ⃕~VT%d-X,ꮄ\Wl},\ګw7;j/9j]v3cu7]ǎˎ}.:=olkQN7C ,ɯ)_Bv;#,}Cգʧž~Gvz@{d#9B ""E;ۇm #c~TGd}Pd߶~l{oEK	ٻC"M&B
ǣyB5AGQd?ogOsWd?tN/1
PK    PK    A             J   org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimePrivateKeyParameters.classSn@='qj\PR$KyPA( } /$vl*@R!NT,5/433s4ˮ3d-Uc[ژ<]Q_?A̐zQȩϠ|0c̢M9_,5_}.RZb()m_<ŒS2ObQNR\}mM<(mo#ACs"
DϽWokM==aū.?a6#yOStf@GHI%t8Ͱbٍ2s([Jpƿzcr>E&
ș(pFyС0qDLqy籨pYʰupb2Y,b%5)	̃jp=Z݇F
`;Y<8+N9S%
uO̤!#,81;QI9NLuTScSna;/CUhi`oxMVNjZI=PUiw<PKE    PK    A             I   org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimePublicKeyParameters.classSn@=;u⺐Kh(_$ZH*"JqUbA_%B(G!fD_J03gfϙ?? ^9MY7KQ#	r4i{6CFNØ!3,=BjGo|7.
}'t<ሡ(ܷ<nFv0Ī3( ώ'Y E|*{v댢>\
a~7~Bj3yΥɧ'WYGey}.J|x>
yDsPpUAAAQAI5mh1"|!45REdί^瘻VT8pKniAҐaw5dq_yƚ07TEOTCrU05GezO8E%щ|JJdH+deVwfcZ&PތND|:FB{H	ELH/ʅe=-=+oR
TZBGd'Y	HY6PKL=#  ^  PK    A             B   org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKEMExtractor.class[WUL2$\ TZZ
(	-^L2d^j/ࣟt-Y.>_wuY}<pKgF>oJdFק%D3Ӿ#!ED	-vx 
htY֎
v_nD/Z%˻$!5\w{Uݦ8uk]؛s\cJNbvvX^K;suL5=	;7cΖ$%#l˕{SZ0K;nD"dEUzº-]vm p_jzL"{yC]GND3kgڰ>QO<
-rެi}3]}_]Rig%tgm;/?IIk9;Mèzųͬʞ}jjk:Ǣfdse*YFaumŖi[7cONi<&cU2d.ok^T*ێ[\])8Mʞn=2e񦌷d-㼌G?&%\ʌ>Uk|7Xfك>?AEוw0H*^fd1FB*8axя68Y b*3W:]kPUtx1N"
$UY)\c
\
`Ke2EWXf0VP0[w댏0>e|`MWQ`q4O7rAߴMjUI;OE
܅94C2+CG'tQ~GؽD&"D{xw"~B:<D,ДM<t*RǗ<R"BX.څ
UQcCt(Fx):EG:Vl*!UΔ`겟u.$ET{Dm#cBWD\J sA}"}a__ND<j+E\P',DT*HnZi<.D	ĠHyo9$"0	חa*NMsfUqF9	v%c/QпCʘqY/3|r-ωCpND<PK{ra  `	  PK    A             B   org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKEMGenerator.classTmSU~l,o@.Tk[_hj+j@PZ"o)@d1 Dgͨx.Cgss=ׯ T!*%A\M̃S)6r6Bn3B',Ryfr-
eY?
Od]zf W!ܗ{,+Ӫ5t@,P Ft^(VMtN+|lK''`3k2яdi5dru*tQ+.]jҏaH߷lw2`,8ԏљg( ]k:pl(IM[z'#*i,YV#p4agSpI(lxvMN͵ye=^~iqL=2߲ySZW8nrAcrIjJSϾ;yxUk*↊UMJؗVӳ+{߭/輁mdL/?
.(~ao(D石?Lf^[xGGI)i+:t"#08s:Ƒ1U@RR:rt\ŀ,:1M!E
3Xp0>p1|30<`xȰPp%
oc5ll#[]Cz>Zؘ?t^'ݼ[sq\?1 |4Oj1)^1!ueD_dC!z@0Ƨ*B'Y,ŠC!QԐmdT0,P'1"=wDbb4&ұlcSALZc"	gpLdbDx쎷#b"=)&9s朥Y1XHd;8^-
eY<%b$U
wŴ<ŗ?PK    PK    A             M   org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKeyGenerationParameters.classRMO1}]`Wp&{p *"Oem*B2^5h<QjY5H6m3ｙL`jvlQ"H0Nsqy5i'\>5!'pyh=XfX|	(x߶_gm	#60q*l	3,]Y߬Tnwa4꧵9ViJdiUaXF6Wg	N%1UgsLk"Cdq,0teMAc5hð%aCi,ʕ}Vp
p	+IG~@. =P}|9(CCFCRS.=ҷPKSj  8  PK    A             F   org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKeyPairGenerator.classUVW$dYA[k/	
ڀT@)(a8LLXQv
}ARVhC>9+ϗ?03ϬN5Ik>]ERAd!bIrJȭ]br,C0LژX0Mг>ፂayg71u^pV,fŊa>5je/<a=e8O9ʖwWyga!F+3*0P_-l͇nT[aВe+h3^u߫Wtz1V-Ϸl~H3nۆnӬ-n
@Ufݳ^J<S۾UNrcOtܺc6L\7FwZRgSV̽y8atx.N	>1`$Uz~ia D8qqN)^+&wROYѭ>:1Mt+Yߎeѷl?]'>yF̉jp+%.KxOJPG>t329\=/>0:-#cJ$ySSOil#xCoN99?7D)òK*qC;`*	8/ - WЩ1}EB%H*zTqx_АSq*.ApKICR*y:\üapGz\Ǣ/1#`V=	(XPTcBoՒAu2D51M
hevć^\1y`>G<ox1tc,taֳa?ǱfK4\L@<T~ŚbZ<ϯ^["%җxޗs&Ѯ%$cboHYPoʁIwatdOJKU<Ro)];xOtJ\֭Mz0ҢNQui=Z݄\Mzw,IHbIbPK]  	  PK    A             C   org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF[}0y%EE~!A &vlXXl|H5a5#&e8hDQbf'#';/0SR"adʀH
 y@63֒o#X3T fҬZ[6 PKI1     PK    A             @   org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeParameters.classOQϥ))-QAޠTyȫBXeCJ[\脨qgBFY.43RՅ{syK E	B4H(A0pm0"ͫ1`lj漺1pQUS2SK3@Z[TsYJ%6h2I$wt5."vO-nZ:'|e8}Aٶ*q5,ok1;	pTALLMqMIƔIIefb.<gj?	K,X_f)7P:>ePaq4Nw]R
m#Ca.;7g=v:%ʰ[zUiA@[8߮mW^A5,PK#Z	  >h 4̈́B!H^EB t݄B/O \"\&"pc
kڠV5Ubk!
[y׶mZ'VYgZ'"g`@>y݂)Ƃ!ւQ9`R,nǂ9(Y0,L<z2.)L=v1xC]ځd.kd풼pǳ6ǲv7I2i(!xk~G1:>C%`	\#N,xwqHt;Bdyy'"včgX=t}DWQz+"sv;xB*"r͎']TJb7>oPK`  /  PK    A             J   org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimePrivateKeyParameters.classSn`~^
j7?g)
:?(~.*0RHz
^Ř]e<$s>󼇗 pK@
5VhTZi;m",kzXn/HYױ[i]ɂ2ѓ3܉EKgvm;oS3MˆMzoCNX	zMc8V`}cayAw
=ݵ/_-qH׸}и©5I^˕qLƄ2N8)P
QdQ-
^Č-t~a[bmDVXUAJQ$C
1UČ4gq.2\bpE)*BQ44j3(skPeޕDRC8q.d4s7)@
pUO>_1υ<aP0(tzɐ&qF)TG*J1HE9PG*"H7 o&~d꼳T:hAfFRQXƿڌ;K7PKm4    PK    A             I   org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimePublicKeyParameters.classKK@4mhmЍ
q"]U:J MdȿRP xH*bsΜw>? `6;p䇾>a(dUIQ(%Cq`>S4#H0JB
/ցJ:VTonz^ȴ)o"T1CwdWΟDo+奱	C۽\߼!p'ٷQFF	VXF݂5+h4ZҵM?DTmtZ+[ox|dˍ3ǙPΏ\dPKB(  (  PK    A             1   org/bouncycastle/pqc/crypto/ntruprime/Utils.classY}p[q߇$DQ'RR ?l#bJeQ%Дe ≀ ʤC6KwT%mvLaۍtLhNi6'D@	;ݾݽ=.g @Z*ra	t}Q8ǗcԩwлN My٨jSg8X>,(ԉ·
r2=VY{<Vb@W`YVQ`cz!Eձ%M$pѮ]dES#)	NңY;9-Jz$eޓùT67Nd$XV؅P*}$=+>3w$?5^ryd%\F=,q,D6RGOcFwvbLJE{򹱘mͣvq_m'>\T=O7QHMSSI4'
fMZ\rO޶
㡬=Jq"7h<K!%W-ݪTeTQ;/ArYK
{Uְcv~؉r58\bZ96јx\vcXt>Y
	ڞHMdўLMdbEtݓ#x1W(|).M6[+*#tq'Fu,K17MdLz$A̹
Oe'b";ړSEwC.?s->25(3v;):ΕȒQP,n]I+t.`f;ÃCƃ;wdr#M+'B~{aE2igp3#[b~b<{)3h>c<A,T1O>\t
[nMa$I8@#A8C';r17Dp*;rx(G^M'eҧNLNkMd&D=w=òÜ%J*tبCHtxX:Qu8ïfǁ*G.̈́mb7o<	)4<tXT[x
ٱqaVyf	BVyShe [a6tm@x5` J~jÀ}PoIhw
8JM|`&7 	Xm`ހa`Fpf
_3htyx&'|0)xO{5/LïS<5AoR[65CR{|!5DԼHSUj,5 dB=郉>#Yb
d^*G(~B3XӅ}~} ˑEx+PsO*pњNxF
UN!MꌖV\BRA`upIvSШ5$L<n6N:rNz4G_
*XۧNWee~A%5$G
CiFdh@
SuQ`JIK>&5%8)vɑTcp&g^m]!fzP_fv&Z'"f!C׈HDP!S
vk{Bx0ަYF]LfeNn~zְi/nHJt F_	ò^IdQה[@8A	1<8k3WbփmL	@g
BblT5+LT6ItkfZ(`PTwqJHx%hyP.*@09`0޿Pypz	2JTη5"ԇPj9M`TA^92LG[BJnz:HR=57P5iZtTݿb6(_?*3E9l*9shNA[BܘQk?
c-Ah3CAEՀɈ!-J\:Tg<+%zOOa6AM*a!fEZaniנXj7!F)Z+}WSUo-Xqz/Q$d-eTʇD&ppim4/.#(\ԹhوYW)a1raxaHX_:1]MC.UeUgzLyry<@YjEhETjf,*HP*<d~5Hz"hqc؛2T-xi5F	Z}Z3G?%˗>bBt^#҄l:kC׹]{SU<T	ԧ 	j0 PeEV4L);\>U$Hڑ$~nYq%I~#v՘njaisATrQ]7<Ԇ)~`< |H*qbLj>KBM2^vZ%g{ū|N;9PzRS2ʑ&tR	؍[n{U^>f<K,f))ԡZa/kTP}t*(X[(ToZJ\:oFFalF2ݩx錱z!˃< $1=,i%J/0:$x8WS/+f_(I{n_xM@~af
|Σ(S2`V
h|KXujix,P3+ti&
Lk	oSF1a<3E2V'?<4ԍb]'$ա|n]T2F/ˑn3FgX7\/Oy~%$;uL	F_Fu4!j.^+,߆J52U=E6R\2أwnQ;
2sʐeuu9S7cB	w+&E۹Alr0^UV0ʩ,TʄnL $5HLheB>%3Ț.EkRDX
G%7qո"=eo޼vo/USivƵɍ.ڏBPr-mdKt
]rh	Es8O$u]Ku)_o|K7oQR͍O v :yxqcNM.]ն$v962tg@Xۇt^-^=uML|女
qq8NZ.3pݬx ,UC.g|=+Zvh/~{,鎠)MuWܣ	滴7κQVL"4q38
°3qm_ `4\q=`4[
u<VUUc`^K_	(aUS8\9(owJ~-3Eo9`¯Mס^
3sg(:/7decR:-m:b%0Hh$D|2jwPP>	#A5La
P"eM	BͷF5pD_kNa8JQƗ@;D]¤NS0ީ8xLax.r!
"m&B
%In0Zd@9'Kn0˫[il/QReSu{Á݈,s^,-Fz'Vz,?dÏkذY}ן㨉tF3"4<LS]*<SO:_*+'3UnZu~	觬K /߫ټ J+x`-}k"+-ix&.0&n 9~pWeXownt~Ep{0ZgehiQGV|DB/\⡎QfM5;
XZeʖ >`u[9^`}Af$Ū?dCV$lEfgfoGɲ-NOׇ0 }[>>k߫p2cs1ᵟcJ"G;G$e]E
EX<>wFdEهB/_ O.w7InRZMgޢ}mOorŝ|4m}zb8LhV=&߾sNSi=X	w7iR+dTMx7.5ٸW>8SmȾtfA~&>4
ۄ6es^|C[^6R&nmRqOM_W[\(/߅e\3= Z></@k.ß[N:4#PKͪR)  #  PK
      A             #   org/bouncycastle/pqc/crypto/picnic/PK    A             2   org/bouncycastle/pqc/crypto/picnic/KMatrices.classmAO@ߖBVQ(@cҋG/QMp*K5bY4<hbc2/lof7m\$zˠv}z;N|EB$.>D/4z%AϽ\Oiw?{{ѵn0(F |ݙ{<ZLEhO}>XkP1PD@Yʖ4y(%lcGJMʮ=Ui=ɩרP:uLHj1F F*SmXط1ôZ1Yu5F
п۩$|I(RbIqͬ03č!^_PKTkJ    PK    A             =   org/bouncycastle/pqc/crypto/picnic/KMatricesWithPointer.classQN@=ëE>L[M7ic\U:X(Gw*!{{f2	
$wyNBs'"ꔁѸ
USǃh`Pq"
T,T3Ժk@4+ܗq׻Ox0RsǓPHp53:G~#Tov5wI%<Nۄ	DQÂ<R&PrV4jXӰa޸)B4He04,*;TOQ{oSlR(ޱ_Q}N9a@}Ai:^JB2gPK҈q*7    PK    A             7   org/bouncycastle/pqc/crypto/picnic/LowmcConstants.classUmSW~nޮY"Emk!SkV55eYd7.7H웶~qsKH {=<{?2>^duuOH\2tMnHH?;4qu6g3hjvtz34,omy3LuN6'StYa8*Y+<fg<0Eel%0)0sOD-ӝN+v-1挔<<RŒeڗOH;U'мi:D
'LQ\2)EʶˆVٗÔ檝jzsW,14m2XCݰe׿%oip&ܴ?
cnə^65El*0SW.
7UM6S痯dܨk;AfƽY0u
rF}3dk25{Zo6u΢3?
\UpAP0X'bu,O%"C#KN܀-[7MG;68:9vs˱ G<^+[Z_6VJSջlGM,g6H&ݽ%r7*V=oSroў$4G$4଎F	M6KhEB6	q0$|(a:"!H8Tp0.aB.J$	8Q	i	_K04WNJ)LJ4K	H4eZBVL
g0EAKUCl6T
lFcB)](KAVeʾl+ۢ(ۨlmDZedÉEqqJ,TǓ9?ɇ3D9zs_ݹU208٣zǸ},G"g<+;rqn^h8,<CMN*:9}NЙ/`y}D@OJ&^@cS9{>D	.'݅xnmC_XGT/|n}4&p=.(_}tҪkVg\PS4	؎h,F+(~gjjUs)aPX]-`뎘?䯑"WG
{):D:R֓BoJ;<^ff1fpY[//2_pᮣ[éŭj=?PKmm    PK    A             9   org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL1.classoWGƟ!
*R5j$@T[[VE@4PkWuwWSIO9}:wXL"xN9ݙg}f6_ .d%
22CdY֪EÃW\M2hs<WF:zy}S!ivwݙ/~p?ۓ4gՒ[0~]&7D2'7CAND4#GLŋI$ðyń'+GGtOdbW98YEpB43rC5ߵCߺTgc>el9칾Q-wTU{^n8Dua"J\1D
s-hΦf1h3L3tu#ݦ:N=U̷!J+SQ79LwZRsrIsP>_D1	^yKms.5ipDQ
#rZ!MPs&tG]k-*wX.U6a+oߡ,=d^WklG7pp1Y9	9B/A'!aAd	|it .8O@za+ׄ˄I7o	ӄ5u
Me1;:p0GcVtdhma!;!i>%rdFa+KFON=2TZpQmc-p2R^q!i\N_qXzgOF&LXjm`h?k߱~GN{J)1%R+E/9Wڣ.mYi?(-jJ[QZ6S%R~M
ɓ`ؐ
?9etTrxPKaS    PK    A             9   org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL3.classmsF&n(8$Vihi	І@!	't#/FD$;LQmndl0S<=uw g1EI(C̐-Yjpmv'HG5=a=ugfٽ6ۦ/~p?;ܷjɭy
.
̉8
Pb	p<bq#
|#O3ny'f(W]azo3vTo\m^]D'J3q=7VŦzfG:Yݒj~:Y^!M̿^|ñ'k_
 QR jkAw6'0çDacv<?6mucO2wef;YxP>E|S6'z׮^!mN6	vTk(&Ax8~IӜE
5pX
G5H唆mJއ6U|޳&߲=˥jy"s8
SzX{eS>Ű	''		g	:a`!|b|EIpYB_\o	.	W~ Lf	?n(cVG11s:&h
KG?-K3df'pQ}ѓYً>G+-(׶1Q-p2RNq!i\NW1^k£-ɰ!
VQN_,-~QGRoFiPiZxWze%l[\P3mqQ;;Wүe2Xy$9+LPKP    PK    A             9   org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL5.classmsF&.rARڂ$V)/҆@RBNJF^ER%HP?wĝfUw#c=W{ܻݕϿ \BǙ<˕U|qun]L2<s+{Ý*^4Iʃ4a2Q$27E 7CQ
DbO&i,1唧sODOSnоSQ+d;3V}49'IVTZoᴞiҷ}sY[axSlg33ʞrWm9@Uk=϶<w!ZSI5&øiox~l/ގЎHϞ.y]Zg/u;Pڗj;T!lm՜XY=94(o%?Ң'ns.5pq'4>doӷuNL|ߜzˎ+LU0Lٻ*=8|F+Xx##"O8M1y$,a!XEcd<iB/		3+W	_!	7n`D	|obMLl
Aq'Xdͅ
}:m.hqsŀ6.*]LfܭN'/{YŻY\rWxWqw1YoQlWwQS|w~Sw;Zgޜi֌1]->WqIkZue--s_K?-aRMK5djBPK!rR    PK    A             ,   org/bouncycastle/pqc/crypto/picnic/Msg.classN12pwqe`XtND"	VLJ3Dbxh|||;cҵ6:a`wL0~QeRL<>&әCqT|1
F"ɴOȥi6W<~\&8xђӐqv&F(&Q*C}OegA
`lbbb&-vh605hM:#^InxNQr-g~
d'_V8}PKTP    PK    A             5   org/bouncycastle/pqc/crypto/picnic/PicnicEngine.class|	`ŵo]$7ܐ`pp A
PkrI.$**FQ
XkA+ڸ֒EiMW[kڽU33roRM|93sl3N8 ֨ GMlRM!
jF?~6`>jfO_?Sv(&UԦf:/'y OuT/_ͱ$jϷ5vboSOa_
;9VAt{K*Ha'}'JQHfD'WSt4QNSI\Fb"!^5N{՜g+Sb=jda'Z-ϔiUHH
rܬ33wvRiCW]vu:b]!;+-vj|:F;l:tcwl͖tײ􆞖N]ZƠ0^ղ-ә.kiۘjmiB4tD&X5]lW._PT_`eVy݂eTkkm]=U]><*[L_YvnwYS+قnJ{WNvS-eT:r]-I՝eݩt܍~mKclSKkkZ\Vj}jKYl
)LsGL7uuw4btl-N	m8ʄpeΖue-[<uj{ִ4JvY(F^Yd	eΆa|.d0.sH(|eAjqe3)uQ-Z][?oW\R"ϯYEnarlW_Wj<ecCM5W\kk/bArٽlj$}}Oؿb?}&ԚNMXZSF#*9X`Y5mp
YҺl{;i2OgMtl-[XlqBYYrE5g4YpE[gO״t7״8I0ޚ\ZPN$B{EfAr4[3:64h>qu\0u"}-r<coܙ{[қmV$5ciq&ZX%I_ξTGGybE[ˆdTgz)Eݵ*َ<Lmilsz$֯hD8dkM;V״tW#qE\\ӝNw u(&w-oni[*ɥ-*)'Mԡzs+S]J0F)"Q&72SDjI"dʹh}ȂTkeu(2q:v	P;҆-Ze)N="UYF.ke\ڋ&f.YJ8OpG▶Ӣli[K;,ȣ\1cVkj9扄Ɍ-mV:s|ݜ	ϒ"pS3~<ړ$V!gG]d3m-Ci#uܜt7bfS״w6#~}j(ٳ~ͼV?m%S"(ZK)Ritڵ]nY۾n]6B5-moi릢"*j)~Zhi	賔[hEQ];#QD3\މ(OT׍b=ƁZ-#LzhikJo-$qi9E쒏3Z޾ւT5Bݐژъ'cFukWL|]u^纞Tp퐉nAĳI%lNG+u{L2p1+{[Zg0Zfػwֈz4MmEL\{=cf%Sdo)͕z	P=pnNکC])͛wnk;1AI)a1+&f94:Het)6m=eQ&YBӆ*_Fv"֢J7%,pBx U#'ЩR^ێWBuͨrU.2oʈָ3:Sf	sT]d9`z.bic3CåmS*o~1H^7Ɩr!%AɈ\q5j:iPؠxKS(C:ؑD1pfIeA4Gk^8Te0FnL$(:N̬T;ItlrzQzc噯
&68R:mU<9!.Nxw9*1Ո9t,z*v
vy.iDM0E
֯;l,&
̒6vJljt?ӵmB)eݼݜ"Â
=)b}3Sz
yrČBt;Sm]'fC[2qppv-pE{:"D)ټ	")rEγNd1"LwtR}{Sby	1G(#00jmV?upõ~CZ?C7~G^K~6*
Ӏۀ0vpˀS~f܀4a/
3b0`t,`B3
c\,l|HAlHoX?k,pJ^/`	YT>}Q%9#K)YR^3<Y<ν_[92~.,7Vz֓(| {=/Kku%MD6ew.o?pǞ;a7g9U;^4<yVΦ[t)6 1Qʛ4ث|l9`u_quc떙3W^ꌽۈW
{v(E|c!=hw-7wua5%ԫcH'3dԝߚU8cG/oC&=N#wiYxՆUmY}
>-qx*V>DzA`;NxIB%J	NO}WÝ&|$O>W	;98@
Pp	Pp	]BNQ&}dS`;	_	_G.*7KP`WdPd>LcKX`	?&|&c~KwCv	A΃R`	)uΠe&BL5e"Q8eglDf9D9&<
Өݹ&<唚N j!f*l2$L6	f,癬fp*M,2	8߄fÅDE&|.6Pe0v&%0ĄR~ Ic
\FK晰l*264\n`	&0p%51"*L6	Ԛlxl1|Є2n:-&<+L&.C >>G`/o	a]1qvjxdQvȄ~vdc&7Y}҄g+&;=i)cOvds3&Lh`#`>mQ:X	B؀ɒlЄ?!>cgM3;F/6{Ʉ&}dWv?&v /x+D+FAEK~@~DU3k`?#+{	I~C~`;ٗ	|/ؽ{~B Ko}4؟lcqwJ]ݬ[?@me[9P Mi
ەpmS&ddw* 7wn@
A]Y58@L 0@	2g84('0@@@@@\@ IBUOj|UXL`	ZK	\K`%U>Dz!H@Z4h!p	t"MFl&M>L ہv}(y	`.'(:TERs\F`.XF ;E`A D@'pl7ѲG) 0 NI D	A`*3	 p	!v{RLVDAX;suk5mmN~ʃ2n:rS7.Nu,OiMC2V 8Ia
1eXœ|oV}OF}	l?nOjwy`͞rߜVO{K1'
2t){ėH~/{&']}G.C2_*h;do!*dz4+|8jcWU(0f5jvwՅ V6nQDT*Ojh_Xtrr/6)" ;Gl?ɟװ	㬁O8ۯ͇i=Wh_'.Wʎ>b4 |wa5].]v؇3g3¡vA	>+0C_Ma|On"vhaIY;]4w&γlYT]jY4˳	.ZEcح+(/(/(܂>/n[d͓C?ßؼG3m~hWnw3U^V4\gB/nfRp/¾ /Ϣx͙H^.eR^zIf
)TDDqEw<"kI%yrO}|/5hM~e=p),?E܏xBDL/}C}{	AT!2 EޕX8G@~u%aX
`wTVΚ53+K߅"7@a8)!b̸:^;0VVDD[ڠä)AWč;>׎8TiH@C	~DeA ;qf{_VF/6`H>۹2:UшqaPy' SGB#XKʉ#ꓛ>fVv:WA 	p
@kuB'FLJ[HvzmQ>;vZeĎ*
 
y-'C*UTE%*Nɰ!H>vS"yL4T_IH
(?n#f"3k#H4IGT@G`W̮yXXeZY	UT Cly+?tH&dGTRkq*Gd'$KD#v;史!Ym|IfmD?GhH~u:..cM|΄;lCVd.A3F.8	bլ5	9Ag3AʧhyyҤzLZ9dX6-㻣[>5b89|7j!u*ϫ VpEݵ@ׇd}Y4]h7ՎB<-pj^qG%v=Y=wx<S4%02	%HID1Cj`KB<ڀR;	w,0U|
߅aK]fD45G0+[Ǣ%+^P~8>ZED4֤A,/!CkP̱p|N8_jw6~7|i;jo}D񲸧&(`w@v\.ZTr$#`I2sV9V~VN6\֜!Ĭe6証(
e^yS7rYČbڈIكdjHWɩ6ΰ>*35~Y	{Ts%|0rnoC?2NB'!A('m-h<7NO@s1"i`S8̄j,sB[ao(iyZgH%PE6Ĕs/HwX$Z]pY%eA9jҰK;~}
U-b[mryBUQp9Jp~vXjpP⿿qD禉Q\I27I'a9=u̅)+АڦU65M
$Iy[~JZE&BֆnS)L:LYA>q3)T YFګFW
aYV&CVHXH%VV'$4NjRT&,3˶q{=Z9b1,[ve=<2{} CB=jGhMqb5Z+8/O݃ЄyCuBp44Nq
3?	gcn>ZwPzOB'eUIlÜCe(|h>h7o-Bjz~Ü^=7zL#0򅍆5iHDĀoH=k+4Lm<"4JO5i3ƪNf%~"z@bBq4뵤&PwSiK)Cp3\[F
#sZ~$6NYɺgOnӇJBO1@9!r^89Cx۫خQnPZEC5(
}g-wQ˜HObv~ßGqu@-MZdǏ[[yHʳ-Qae$P':JLFmbR~k#d	YZ+N:<뤞qKZ˼%Er$#GzPN^L#kMɼ|x(&|!:FL+vП\%_9N_?r!Co5Y`Xyc~U XL 
W{W0:d{ZHXv~EqGH V!
8?LP)[H߱ml1>)|Jge|//	IWvO~-H|yĂ&@1\j8ow3Z'z ,\JNR9:gT[q/ESѐ:
tfd"5R%%=AF$KU-9ypal¤͌hkypTau_GuGSϠzU!Zј=?I9<>E#AC_F|A'<	Mm\ϩr]2
#Clg4.^cnLsLAcp	Lh=K	m k) U8
lpC3*b>)Zl	qv
nZJsGk&Ǐ[:7{eqh w,ڌC!Ĥk#/;+Zdl=*Sӑ" Sj_9;$"GF{q2B?R3T)gH< պ=bAt)ZzמiWG*ѨAjqX8L--pkȚ)tK<\'V+
JjY1(yVu+e({υҋaԭ#
~;oۇնsG
h##,;uy&>`N#>czZ?bF:?!t
$};]2xx*:#)~
fi[3ѵ T< %r)A;X+
ѝ4rÐQWC&'smH%9}g:^b?ws)6	I!\|*$ExlPѸ33|}pe$;H/kZ4+%
~\؃^Q@At"jQ,Dr(])B[ABC

5%͈fQg+`dwƼ(pQ:aD|!&'yǡPb)>\#*~#VNlR;3KHtP"u}67p
*)J
sOA9E)8ܬ'pB.]bq=
^7铞d>zy/Qz*4i	wfYv1П2ᯓ'6,!,6({=ByvC=$vuܺGܟ
?{lǝٽqvYFigB4\%})y|0?/;h/_yT\+L:"^6

׹&:ו+2DEO
N]jRuؙ%\8=hkh1tnkąR+5\0^Ƶe\X4%r(;1|
>DW{F >D>Nۧp,j=vo3Vׇx{g*N♥LXSh0z(v|4i|ҝzo~˽@4&,緹g͍/EL@r0}9*|UhVe̬d/(k6s|Wsʵ"9Q	2-loڟ#5`7
w$g)|=15Ɉb
4`L̕b+7ny7o
Fpg|fQQg2玚Y٥D]ᐉɩrr?Z^k^z]^HQur j#AT}
zsYߩO *AUqYR>Fˍ)-ͷ 3 C@t)vp7xܵq}IWw@R0#{z`axCr֣"'sq0
ܱC(y\:<F%`D~#zàWzgHfpsKCe$<j,՜R'H VfzD}QeZ<􎪐@JlbDCs:.c|W"<Ayh2L#p[?Z+Y
U"5n`/Hc'.1=ZX>U juwV:	"Iuܙ~7T2X;ɥS0QRBHN
P'	.	k|.	&	{~©ة*TIu~wv %~~]'WkRIa	N$6hAcwf)
PRnUޗٽϳ8{3$F+GL@lHԝ>G).ss>5;fy\iD>\44+)nWCpe}VN;$3[B'
vM A7G
|dnfƶČF\ps[XcrA+f>א5eW_'(f 4hX̀s$wrL/i.նҭ(%RfoB[sQBߙLbu% L?jgQGbjNKw<w'Fr[9L	ުw6֠˨tB>~G qn~ZAo/']axc|6:C3FAgHtĻ	ݡ:=}λ	x7i4'iI_nO,,|
:&x_hG㉨L	QDo`Ky\CzpL$c,Q݃eD6,^#Ńw̎I62O~}"0	ly_%\L!9f%د?t;ٯAd0F<1 <#됧Z2a+PmPT桷[А{CjpU݇y}}L}(_-ޔQ_~~!^W 	5Vĵ1"VlFYZ>zQШBz7FYw!	*ө^_DUd["-E$_+@a՘ʣ{KX)HKF4z4B7eҋcDGD&֠`e1)z2-+ѩ
t- $v~
rTܠo@)%?1|%H^|`-@zEs1D_J_eW#XzVRE*U`!IX**)57Ik@I!EcRVEi©r=Km+hHI _Q>v'?ehp"je;/?z9|`R?N
JʧOvU	HXnk"!+ǹy~QXJ>Dg%[zdr-{H08#s=&8/w&Ć
}ZZQ.M+wAE's\/,GtJo07*z0M5:4DktKah0RC
s_]dfmF}'''B"HUDOϋ\0/[o{΢HK;^+t}<y1C>I/R)؎:ooX'):8ˊLP+1?QWFk]+x>)S?+/{'$k_&G^$o=EOX{IOz!#**m=k" (QY!'Ifm&i4$b>ܟI[:QV3G¹SN#ðaNf61~߃*;
 ?ltS;B`%O)"mfë`,ÉQx/;NmLQON~]_Q3IS:DK+J^zWE&.v^j\{_p%/eXԾ&_T9Yx=3J~ӥ|bLў!.>(r3~`%3QI1	+F 7%Q*yBO=	)
=H;\R\7?F*ŭr肥2aj-7/]WfBȳ|Kxߴ<lZ z:hwv
TђL-Η;_"wޮ\akI`6|fIv΢mRFݔG=15b؇;4qz,wE|C7"c=V}y^iw=(
ߍfF72	8mŋ+x4F%:v<$5%rKc#ŌC^0Ev<IwD U\ﱠ-~3LVXɦ~[Q_*
qsлdռ*UKxv}- OA`j(~ieX"6	GG#҃d?h)0EAD5sVHD)ƭ(EChq3y}+Av
+¸/ϱ']
9SCP^,x݅qbtfT:Q%ydvPTA\PJG!;^!sb'3Ēok7.H!WgEb,87}<􋵾b}}Xs;TM.RMjqJX|П߽[F9Ugs@@A3'C,mk	~Jg/gl}V$x9KT[!<RvP+=>grm
@pӟ(ikky5$}qJU$
,?N)ubx2d(/VlYUMH		o+$rEi s9ЗQx!w:)<fے+dp@+,RV>`ton9䌏g2O\p.utJAL	2NCs$a"i`y%{5$ã}7ȃ)IJyKsXj'{ w|,њ%}HA6r-~~
.\9|mTh\Pf86
#d<ı؍9VGrk1(OwR_`G_qb^vsHuE=hQDG𐥣|hR0Λ\:},Іax/e?7SMs*%Ye`?h:!8+-3>4+8?S4<&zI2UQipm^}?CҼ;ߥ?%:S7j.鏜Iq98l Á#*@-P#C"ks-t'哏bZlP549(,u:=4$<}hߞA34ndA
Ǩ
;1$|r2n1*r6RKWSb&>z<᎝kqJh	aGeє8nU_s81RJ}T.%zfe_Dc}b!7k,ۖ8](s.:Qz*?f^ &7<pN}+ 6*Ҧy6
F1^^ZbJn),/%?g+AZm+uCE^Ы*82tb$a$aB4.:)Lhџ̓q]E'zf5-$dbu3J[+*Y?i_m$kM*.kodP7^ViCEr$5x-c7 xD(/Ls-3KP$
>m
؝
ȶg+,Se)<mH>;#~3oaܵO؂^hf2YMD06.}W}kJyJO+keB?SPK 屢3  &w  PK    A             F   org/bouncycastle/pqc/crypto/picnic/PicnicKeyGenerationParameters.classJ1Eoպr(dB.J1(0o.| JL@)!~?l`p_iZcrańق;fe)EᮉK[S*IN8A7ʕJA"B-Bao헩ǰ_ɩU@gB̤w?Ia04bawBgk-]:j I<b%~@ VbFvm5PKd0   
  PK    A             ?   org/bouncycastle/pqc/crypto/picnic/PicnicKeyPairGenerator.classTOP:u" Ӫ4jJĐ~ ̋ЎdUȖ1e<p>l9s(D_xrCAp]R0dru<oo`Ʌ<0]׼<syn3}t^3y\&
]ִw{YgnN=4M;oc];NɶʖYtQkX-V3qlgѦøc7/ph5Pn2<XJǈEI׈Sc+.v
4õBT*T\Tѯb@ŠK*T`$瑩ȬnXV༂9AH}Vf+.F~oSKRT%YZkS*6
flMi9a
WqKLAѡI^ADtJGLx/Ɛ"h㱆xa0xa)
71a&0M8FXᣗڠOvB	YI+*>C>
.^=% c
1hǘmDpf
~
VrZ<
"pzO&1S	&6eLLqJT U?yPKgh  ]  PK    A             <   org/bouncycastle/pqc/crypto/picnic/PicnicKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF3}py`
YB8
Cd`INK(tj01p0010r2p0p13C9?%A(xF* "@63֒o#X3T fҬZ[6 PK.     PK    A             E   org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L1Constants.classPMK@}k?lm>z^,Pq.%%Mҟ%

 xfc?^ aCwDԞ;{As8˸H
Kp!{%IO4P`~X+c&i՟>/XZYXIσOp, $B* "PhPP4QW)Y7F:q`ВsZsfh=4
.-|aͯ!uBl~PKŒĺ    PK    A             E   org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L3Constants.classPMK@}k?lm>z^=Y	
v]JJҟ%

 xfc?^ bMwE̞4/9A{8˹X
KrĆ^wrZX͊LLT?ND\Yc
iK>Vtn^y	Gc9B
$@ -
A=ѷ )%$H':# ;lW{Zr9_sUg'T滁Õ73>5D"u9B
OPK    PK    A             E   org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L5Constants.classPMK@}k?lm>z^9Y	
v]JJҟ%

 xfc?^ aMwE̞4/9A{8˹X
Kp{%KV	&ia5+22R8VreM5/DZYXi{CCӃ'Gc9B
$@ -
A=ѷ )%$H':# ;lW{Zr9_sUg'T滁Õ73>5D"u9B
OPKH    PK    A             9   org/bouncycastle/pqc/crypto/picnic/PicnicParameters.classiSPH!ijDEQKAcu-RPp
1jHkt?	aFg%gϹ
3s9.K
It(TХn=
z)W0`PARBCrerJnɿ i,H9z+_,d$D?K-Az\|eK",{E}ZY[Պ_ֳ3ۛ5=Jm*A#H,dB6&`lEx˧eꛮ!ꡱڐZCu#THN)5T7͊b+ޖ1F}N̄3O>28(M!%˜⨄L~k/^6W!a;c2mQ}ɡ}vkϷ9(4hK*ڡ؏* 80TtऊNFe1AF͌SQ,c1ȸ2&Sˌ+\G11E|C01^O
jum/ժMg4^wu1^w|z1mV%Ǧ/$@<VӅ@@;+@/64]x4I0ݩu,?jG^d=ic
k=-8PRx]-, T*A	bP&B~_ǣ->d+aD~`2HP-`jk45~~BK$qSFa慑%LT01E¨Z-pVKnV˜A
wCF-&ܜppqMnacݗhcA9':/PK:z    PK    A             C   org/bouncycastle/pqc/crypto/picnic/PicnicPrivateKeyParameters.classJ@$iӦj[uwif#+]dՅ]PbS!oUAQ\ >xB).sgǅ3_ aqRe.TIJo,u*12=4'&<\"7ϕHQnd:~F	`Sl/~?5*Z={rẨ3].;8ݿG:|lxha
}nW0~RiTi%mSo:;^~JJga
/hiV:PKɽl    PK    A             B   org/bouncycastle/pqc/crypto/picnic/PicnicPublicKeyParameters.class1O0i@-0$/	(b!S:UE
Np!
$B\Sҥb;}:	jA<dhRKk1E)ͤQ")ig|J"TQpd<OJv+(4RkQ1IW0IʯKzv_ȁe8_1#j>|h塅
lS%EYIYmlRݥiMGoyEW)KʁPK}`7    PK    A             5   org/bouncycastle/pqc/crypto/picnic/PicnicSigner.classTYSA60,' Q@4>db,
UHYTgڳ*e2t_{
<SDS\RF/&JI_4"/&}|Gj0F,]1V9bp%34y䞰'-x+k+h^AKiqI
o6brFֲiw[|d;
9FE(U9Ulo1?ky^NLMun丝5fVqKO*ݬmd
g4sPYpu,ӶLcW;ͨ~k?ZHb&g1=EP®×ΪC3Ptbmµ^vji3g1g`|lX?d8k y~06}r&\}h5'kOpW*"븄>'hF@Qu#0hс&mtMѯM0pKA
kbZCCRJq[	
qLiH`D;%%q)&5\]P]t_=:;sY䙜9*
 =9]<i<%:H+CpGA'ݯ$IwvGko&70ŏ
1Gа͝A`+P\<V)V|<1/V㐚Uث&RavCP!Fz3e<$+xobq(P5Qs
7|mo1Wo
PK|;M  m  PK    A             8   org/bouncycastle/pqc/crypto/picnic/Signature$Proof.classMoQ;-СEK
:V7c0Ie
q4 zHLvr?9 ;x$0WdhS(x2x~mۜZ8oZIvG5D@Z6h)}S
dhǡ<Pw+GqELء?cc~'g
;o𝍳,_QV (nʹ!Pd=bbi8Əݢh;R[H#usQt(S}yƦ=c΃313rxXbˌ2"̸¸ʸƸG77[یVpG`4Gm[C$<lRŮWr+{CUڸBXjȕTTs噖SspA.&v߰UI=v1*d?:gKz^7^qQqi4^m\$PK~4  0  PK    A             2   org/bouncycastle/pqc/crypto/picnic/Signature.classRMo@}'qb6 *DEDEDh%fuݚ7HKpFjUG ?2kq^۝73?|=uvޠ3`(?	U10J
{={/4DH$*(דT
8>dCERꌡ~s?*_5yۛjIKt{E.3XsRA$431x3\aDsH1㑶Qqņkf*Æ7RpAх	s(\TQ0l,Uun`74q5~O+pJɴ,3/P7dm8k>$TbELns$Bf>n^9E~ۥ/X3<)V	V?b`oϰ:P`.~}{(\l4l,oHOCؤPPK#*    PK    A             :   org/bouncycastle/pqc/crypto/picnic/Signature2$Proof2.classJ+1ٺϧvl/}aAAƫ8CfL*ַ,Ck*^j 'd%y~yxMlr,FF.9iױ*PپiH6=W2hJ*4 N4n6Uк0ltht俉Q_8ґ[ߊ_>LR9v_J>tPp9r0LYNCQ#Ae#	`L3~('7c1˘+`tᵸAՍQI)Ӕ_(V/(r^>Gv7:KO8WŞү#M4ϐn}EvWb5vV?\:@Z$6PKC    PK    A             3   org/bouncycastle/pqc/crypto/picnic/Signature2.classR[o0܎)-v aVHTZEsSpBN*

	
~ ?
qN="؟'M<vƚ
TPF,/;xhbw.h&Y>6ufX`^-tQ:ҏ
#rG$h#~>5U2#'i~b5ֆj3tMhe>I_q|@m%\d;ࢃK.E(L,pUM%Wj8p7<T \\-w\\]6=XnQ:D2'Ѧg.J^F`;hKt?)M§+/{߰[':V#O3jգXɗb]C?PK,_    PK    A             -   org/bouncycastle/pqc/crypto/picnic/Tape.classU[sumےA7҄{Ӷ"-DZ@n7k%
ɦ$8}S8/}胟'@z6C mߞ۞C  1՟ )?ggNN͎3PY٢yVTV<-iʰe[ tj5'
ی85˪i9t͚^Mé4Q1WsrNRwͱzcFT۴-E\jӺW-8U$gIuKh6-+zۋK˦5,SslL8vmszv<U(UޅN.~ҩ.f0^F֨6+XmYfYfKt9Tb
8`Sx^quz-
^C.IRV+yS-A{wj<瞶NDȮ^O8pJ;j89̩U[IxK*QqPEJEcϽ!Z`'Q۷A1Sķw5;	]z!w`(ʻhg|B_Э o2d`W0a?
44샨!
IC"]D4!utiL8ahY
1`2L2L1\`.0\d(Dq
QϣG3QaaAR,çE)2Q
Ukףx	H{ڥ:WfIP9@?C3Ox4$eW8	"EHάF:sL;Nֱay:~RJ8%ߑ$GQ_7soᤘSJ\-KqI^Kqe>\
47p{U6Z	&!mk(*FT<FGԏVH<b0(y({$/x)epYPTYI	%0-2`wBqw7ͅ,p7<(4
[pwHAii`G=	E
p tO%4ً'tyoONބ?tn&i
tf}h$Y@c_Ҧ6~R%ch{)nsB&9$SrgELSxX\"ͰGHlOlŷoþ-oٱ @jA&خ6	6
60ZtLL
~uݟwcPK   
  PK    A             -   org/bouncycastle/pqc/crypto/picnic/Tree.classW]T\w%F&3DlH!M#uZRhm\k&3֟HTl֨T[[}Z}Kvvb}Ҭ>{s;7 慫pwH 9=,:<#k)kRmփB0'F_"8yj=BJ8?GYǹ5U8h<~TE۷,IoLo&ؘT﷒M(M|vN6ILZVYU7uloѾc=G%gr3<HQL&Xi`6i>>37ܔգvZڄelNdO&됙G7o3)(8I1wsP&q.Cڞ)Ւ[쌙F#+3ng,bNud$ElN@FUVʛ%ڸ[r{u+Xfǭyrn8lAvak}j*BGѠ=9.A<;w#m2htkz,[cNo
v{<Uq^ۋIބq㤭L63.P\]yB=ّ63i@!%X	ghpX'$h	Nw`%wSdDd&NE^gS6ge*v-P6?1$fcHrN,geܽENdD!>#piw`J2S	5޺89[H8^@\]1ssRU@'uT6e9DLZy{lY|RIOh]f
vhSj9
58CN
 t{$h+B~I֜<br)}G?BG*pQ'o޾WΤQئC;9Dn"]Ь-D Ct{uhU/Wt>"]ס~":JVIPM:zB!)p#uAAap?|N" /yD!e"_a'`,S~~7|ȷ<FDC{D~@	"?"c"?C	2]"=5"?$86^V͌sLO|Al0sChT3[)mk`H;=0xm@n,0>v/0ipǷpG	G%*<ߖA7(Bڏ7\6EpZ"ҶG:Y#=}%Ȓ'"^H"ƍoCҳ1f9#ָf?
[gK3<Sr+%mv"Rld	^>Qh2Zn064L3
6Pװ
%	

KڦbZ!$rݥlA
6¹3K%9p}l,r-{VP%IEPUFǰT\o
oЛ>כv̀Y8.._Efi?yn=hƝe	7G\_@wu'f}A,DAc#9IϿ
1=EEsI$BB!1C]Vtkx:QIIHGI Z*c3#w\Vr픿@Tn_vA[aA3S1gP!IO{ſJmhI.Rm"Xt .|E]Wm<݊S
5n3Rļi7Ӛ1K⑘w)1"}a*#3< |OS}	^u*$Y/,\!,\řWfab1#"MXV<y2C7階ʆ6T9seII]TQa)
[PNP#7ۍ3͑:q'
aV>X!,'i*Ӡy`k#jbYdǷK#ՑxPC:ub1z8F]8EMwFyir,G(bSSI+A!(Um(X"o%(bU*ʋ׷;ZBlI~kojE:'z߾ep{)f`wS"8}XXW'܆RF=%#dЃGu/sX@&Hiᎈ[ƢKsPY#.0Ć0i
'JpD- p\kc*vJ'9Ϯca|J[0	|ՒTݼp_f"JwtE{Po(i?AMLĕE5;G̋{y9õȊnEh%L oz@L-H#,3pz+R+WKi7.ïeRd0_⻈ɭ
bnsSp5B~Օj&1,~][B)ĠB>"JFQ%45;L2芥RbEK=ᛆ2sI߾إP,7U-n.50m.s/ߠ*K5V+ dr`g4ma(]bEPlca%^
ʵQ/m}!FӞWS4*V7Q6DAt{'Խ=~gQk8/`%xNeE/ACz|X_MVϭ[KYtcg6jHސzK+v[)Vslap聉6(6NM.\*酐BPiStvX96\gB]TAֲexwPK-jU  $  PK    A             .   org/bouncycastle/pqc/crypto/picnic/Utils.classuSOoW}k'yvp'q
,PbW8R+
p +kavכʉUd^©Q 6PEITfo73o	 m	qN@l>&@+ҚHP6[͙+M㉯5Ք?lۏw{aLOA
^Ѹ2UzOzQ^9Ѻ~7:S^v?^`/_;p®s1GH7co@ҋvKp]gٵk? kn"(}'c,0;Uj *LVx'vE-pY+*\"HyX~ 9XsP/e6>nX1vܗ<1@Z%A)[CU]]^*vX6OH摐@0j91I0JNY̃Я@7&BB4eP>O5,=p[cW,7d@Â]׵Uƫ<5>s(~YrS,iN02'_%Qnb?70ZȪXN+f1|zYU TK7]
:1bg,U7[*ʨ35aa[&'3x1F6u]F82%a	У9, vu[bieQe=+ZUh.	]L7D5oRK24̌d,'{o4J:Iiqۚa9lwM!jO>REJ>Une=Km&tP_J*j}ёa
d#p\7櫈{6PKB]~    PK    A             -   org/bouncycastle/pqc/crypto/picnic/View.classKK1OiclS\T\B.\M3q&%X) x3j9{r6f|2g쒡pױ :gٙ2"3D`dQZqfA"~<|0<JeZLD"&or)=%jQf~ֲFI::pڍnqy(aACs<XXXǊŪŚ:JQ(q@:}t6+W/)nG'_ =lau͙;Ŷu[?PKTe,    PK    A             9   org/bouncycastle/pqc/crypto/picnic/lowmcL1.bin.properties @        @   ,W>/*x<:O6.">|g>I{#<ȟވȲ'"RuQɇ&B$e=L@}1Û6̥hX}I-'Jo^J	5$^ֿ񮕄,߬USRKERk385!G[R'";Z^J_C	2@AJCיi_;"+ꀏ&HP7YPNHN/+OPyMj>UiOy|<\8MK))]HުR]rۭf4ɫ]F]X?)eà;B$hd Ehow=K+</UA4vO>'̯3]<pxVwMZ.|p&G|(KW4+M Ԉw7@LNT<fy!N$w׉k:+Ē.eobMHKXD6|5wQaծuNM-{W,NG@'_!O;i%r\Ь|r$I׵]ȁfHMY2cm_Bٰ`'СJXKny{|yPt/)($ɌP"mT{$?E]E؈"|OZʓ!?lsPv>oWQH/_[ݮ YJ8	*ҹ䢆ᏃQCD"2S̡rcԊJqufet,IKui/x;c%:(
D8:˔[HAׄZn:	SNtxj̓ꪹؙG/tO͓8z^*^Evs;Pw.:EW57g B$^?dYbnԡPZ; 	Y7̅f02ė]S_uC1jsIN䧳#k_tߕ-m3PyוD9{5Է$N￤8o)/:}v銈
UT_
(Q,47lcO1IK]cmd3k%vTo1iޚ.צ~
*6Tq2JI] s,D~*"uOaB8Xtmxg6Cעvj6D(Fr#ݢW/l*u%efv Il_Q7ª tg
.Q^f.ނ,G`E!QCb|pMZw?BA,x(&=SЬ
B(3w+_D	Ak4hOZкp zSMQqg^/ˈis̶0+ߊF\ 닛V*<zEHǹe{w®>vamv7AS5uh+{
[F.Ʃer\Up/?v08"Eިo$n3g$JF=16l]l/>.eXwNf֩>.9Q?^4@BShy-7CƯ
O*9`WD4i<كl3\eDNQD$qDᚔیFIͬW&=*-CG8A5[JVgWn@rFSaz݈
Mfx_
Xf`!1ϩRT(d'YPb0\Kںk1DJq̃8eĜF?ٮEΣJe/%>\ǌ%Crr-'8
@g!67t5.{CP0LYXODjb7
Le뫩akٕgI9#Qc3HT̚Ӑ\:Lu}t7>@G!U/r"]m[IUT7@Բ.QPM|9Q@65:NAx0jzR\	r	z8?֞'̣_eb-U͇]_ҷ.̜J 
Av_8Fg[D<Mf5]x
лVܛ@q3}HX P.Ma2!~__
ĵS˙yJ	J&*
l^,T;i*zQB{!"˝"$⬴X$o][ezB'u@Șݻ5|/-Gj}8$sf겯8mtCb 5n>ÁPdC]iDծ$NXL7RoZuȳҘsd2ϰ܄H+s-q7CP!zg:M.;&sdHmyK.L(ޙ=@ڇ+LCmaC#RŦ$}5h8*Mo&t#Jv|,<G,
R&^Xn۶JES9v
E]mעrNa{O]<^3-O5Ntc6¢cz0'S
OR|= >06As7xeJĦg^-cXz
aʢ\;Y+:*[%$R{!`D~|Sd VR6l+2>\j;<g| )xՀG|Y1L67 o)2Iwd/l)Ny	ɆZOm`iM5ɼƀL;&g?6hkyY)+v '3;ZiXߩG=烂:;:,7Lx/atg[	Cǳa-i!l֒g57 !E
=)QU)@UV{@?E^b.j!ocK݄^bW
`NFl,
f$}=fd#t8[P
khFQ*N^XY.ڱ,u^
<fsow
(@AwLn.!I9cdtt
:yaa2l\3@<u!1:b>.%]JmCSWzmYBLUF(+rl:5S֎s+ycOv3玶{?!VUD!xs3/f21.}舰>iVw/ R%:{$
ܭ;5nXumR3
$P%Zg_-ۼ҅QQVsԪhh14XW'7,(m
@=7S*OWzbe.`2= Se㑗"-oEw#3}Ntx~z
*:(ϒ	,6N7	,ЍvzPM1T&2M!q{fEg+'^xdSfi7c	ʌK|qKk aB)ú㏿ C.!a#SL#qlY
_K|0!5VBWSqqRi:a ՚pWOV9+	9}$ys\&DY|nFŗޖ&#	'i/'JxJ@:xw"'*=R	LSOM\zmVA+V~h\k%~r%FA3EOEy,G5uSfk%l4D(e ȎqB<~#Fufxղ6m.`#1bK]B:[<ih1Y	OspV(f]bf(1
(5%񅀞	Fo4 2x\kщ6RMQ6rS'E9??UL%[5,n<bx,h-@jHшɷbMެs
jf%{mafQ8T,aiĞx{ҹ'fY͉HHuU݁Ue'[dWdumbЌ

-,xs^@S|-QG쌳!A(i-*4l/vZ&!֣/ ΞrI¤f^0%ac]jjXQhOt:-\ʨ)	gV-V?,r#X=LxI/y9BBY$x8{5 ܼ8,a'0YTbZklГk1\ik)JvCA>0y^&&A6Zeh~^H q
s;ez2xTUs.teJ0ceUKɪ	,aoނ"m|:^E̟D萯HRxjv$)-ѫS,0i9dg,bCqIscy6u36-r7YNr>+׹Byɓ}~!	}}Qi!of]	BfFӤ]wP6Q])@#=GVan$$q<sk:vGFs@Rv^qp`yn3*$b<FxUf%msD՝X
6~!Aߦ$o;e
.JoA\Ҝ;Ts6;H/\-Х <ط GfQlcUsdPro%^C;27t'[Y@tKHg-9.	VsXN\GcWDPiZk
ݿ;(cÍ*C:;uu`)b=(uߖ1D,;=y[.xXbxP6îYw8'RJ=cĦr_ބЦ9)7M-{ѓuUO*˩2M.rޱc:I2XUu.P'-rlZ(x7T#Ns6Ue!KpPoodZASĉijm7KcϊN d=4,]szqbz'#%pL 5m+Qy(EDNR+Ik!X[/io+KA]QHYڔ'X28kNa UƱ*ύCʢU>Wߔ~)¦wNGOݎնq{BGO~
a|U?u+=um7b1C5b(kʞ9s}VW
Go$OxQWZ>Pe` ̞.?Z5ɛIA<KM=ױGXQ	:GƘ3i%[*=6a&F2Z&
Qv`3anJ05y^E6c/D%RCJ<0mdS)jD2IuM.U4k	dBb4Sc@T1dAE 	u[Wt)Ce#&4Q^
gx*Rime9*ZC^`lT:hA<8Z+],$0fOOq)3fqyXCYy,I??s֦&2iZy3+=WFsD?b*f-Nq{}4$.9c1j6ĔȻqU=e0BH{sJyph$%܈X}}~J+lӊz
wr
^(]vOʀ"&{V^xaw_	$1qs{`Hd\ P9h%p=&A6iP1x0%/c,x l#Ir`kIgnGC=\G&f2yE:*ϓE<֚Y?{Z>)뱛(	OzU
*|A'AT40gqAv@f-UPD.ߙAJ}W]i.)<J?4yŽ]M$H;MT]\NhIk/;Mሞ!5SjiB˝H!r~ŀ[6w"؀ n %j)H}ub!l@?1oP.(ZD,ko!@d:9@kwp{S+P1+qjk^w2<R5)ZXhb~`(b'Χ+N9$@[L~'aj:VBWl]VW=9=yXbO:`kMj*J&G4Tk~N!H6 ӧد\JþCk2`IݏdҿJaGO٧hV10w_ ?
ADa0دDlLNMWFښqA(<>ԅ Fan{'@9oH5+Ԭ
A1gxs].G;{^Uw;d8iqy5Y_DJE^N<@ {d5;į \ڝK"N4QHgTh
t5vFB6z\L{dW9x
'@*b\a-8+Km=l$D*r\I%=]Gn:htW^}jUqFJ$.YA^'',2B\9]*Ŷ̺F!ՃĮSjXJXL,-@vnÊHR՞pW/
Pԟ<8iˈZ=7'N.R.Y g;jKvW=A?<X`_!E)eE|ʤ`'Z_!3
]T^,']q
t/C}>́}[@^<` hefز{.WZKx+ߛ
J]ݸ7R`z9R6C=$rK4J=\<$M5[
E
o-kg.]g>Q& E%K7K  U@oY"9a\^X[܈HW	b+tm
;r^'`
6WtJyC
A-7wB,E"ڥ%㽾v.v+30PA]BK'k-maq@
un<pSWS!<Z\)O	OMVϫ?`mM

910}6VQ{UR~KHQpUy&"z%P>ʨg`8jZaFL`$fx	3%Ӡ%'E~PfWgKrRa^9U.TZ= Ө$vXS5ِҳus(3.O=U1l;z )|èZcWu(h}"m`x{YpL(BR wcbkɁ^
yfJsCf5je?`$x%'Xݬ_eǜd\P&UFf^jVa`G}FEaqכS$>k?EBc7M
˟qEhnK^592xGp;*zW;ߧK;BS7J]`7ү5t󒄳&D[GhpTn,\+*ܤD/C9DYœ\ݙKr+m""q@DsLú;X;sG `bB3ņ@ wvyRmX9c]<GݖTt@Izow+sP%&go(r"fͫ֙{*@¹sjϨMOzY%ҭƇI04G-gM΅2'gvYp: B|LK2-V\~ȳFp6SZ]zcA$Jː̕}~=SYG3OfH3\5"e~B=8)Z
@-іQ8
SMr0u#KOH=1GRF[*K_65͚2jyu.=1ݼ~FnԨ@A^hXyHR%ڪ\exPU
uj^=c片o
.2v*-jGY1|؞uX'd' ~0A~Z3{mPKq}@= ?Un<ܷAV$Fpº*3nN[֒9	!QɖR=F{r(RBV>c!FMRhRO.gjZd$XCǔ^
)θǺ"٦1V9lt%SJ}Z	^Ps HD'} 6Se0d S]GNA/zP{qƻcW{&}*jTl׮%w*b0GgW=C4:$u/чX49~E<|iqUթ.4+dl='	~&:gz^ɱ苳~v~yҨ悏~hqqiwi1shw9S8O:ˠu-z"A~Ylz`{]Tzh};z=@ G'TnXfAK`fT,=Wh_e Ů8: n!|_Z,&os?LٱKi]L 0d讜*d	V,N:)^/9C9V 1?%&CvX:I4:s<ʸ	*DKbbJo.E=-mXb=;0#\Lj:$D`ܧ&<:ǣ; 2_SjFY&C淨ƫR>E "Rdߨ<9
66Ab8.̃Ԫ0in>j=Ol<A	I%?F@١Ǐ:K<(h|(⡞*9dƜAw&&	b4aDG+EsV<(#=J,]R*EGo1-1aQÔ
Ԥ$
>,UcՇeаĹ) 2Yw #+lƴ@Z°&"Q7{
Îͬ*|X=sBnY@GY3De28~hYպ,RU!XCi]/<`Y4Jc8
..P[ʮ߼x*[xV2>d%r.snn@}%꺧{ejֽ2u|\<=AL=?aƜ#`+GF<iJ]8<,ema[QD(<GClj nL0y"K
e]e$3ÿЉ&Qg[ T9iQpC_[3o9ZplC!Xپx}XL+kWR'
V r;m19:oׄ[l8J&P>8I3&,+2C?iY'4(VP ;&kޠE#O#=.dST"7 e%1[e:HS0w=[9۪6AO-bsyuVMR>G9Ҩ ])ŏ!]R{O2NJF\7"Zw´Ē8wE3ʃ6Azj6]hPmDS8B6k{3RRtE:tj&j8PJSh^|<0F'U.tqO3fN5Pڟ1D
;O&K1	K&yЛ-+ߊ{*Q.66
xWD]+{\`nO?Y{BEn
ytz{}|\o{~;ִ|]aAt &7pogBKf05o\w^Em׊1jP
 E3O2x,4	K9tt[N^⨙M)<ol>eTqN:_F}RKtz?Dg_^cղDX_Otq^V5fn"[
S灐32#OCsJփ~5'*ٷ}!bSb)Jb2Bnբs"AZep= 
`Ig*1GsiÞ!,y't}g;ǀUS&b/	B<LH)ERi۵u+>ρaVKȜᙣ7w> O+mPӼ_|W&.܇\CUF{#Ӽm
AIe(-g5;GUޞHZh]NOAP\c'҃E#<--`|ꝇ%+ȱm1kesjWiFvߘ
@HrD0j]GEǀ
	ݨgza'u(n⍣	?XҡZKNF1[1ow2KΦQ7kҶM/U߮?ݑf˻0l}Ng8S<V?_S{y_ww,EBPca2Vn8V)T䳃O"8f6'y|o>ξ=;~DwZ,MyGл93:c?tF
fe x%I	ԕ-9|vn.jqǓh!Vh֛'~;^pov@DѥL y,=>/ɟ_s1ؓGǉR*4ѲԚ ֮}؜w
'Q-+j7-X-XZ;9K
mmjdqi
qWC/yn[\yŒ[G[cK8@=;Gq,Ae[C91Qޒ" fsvc"pKNU_./e~mͮ
RŭD|9XCr_<m߲}xVb|EN5s4SKek;]xc XCin5rNz(t'lY"pY
fc]ěS<';={o/3KQTxG I)+x3LϘ}J\/U$,}5/ruT"^In5KvbgC<wb(Š+x=)޻zڵŃfDA^C+O'lpHfA 6Z$HkYpbPvK9a$lȕHch8
|*R̔]Bs%>b+X䬇t*XSdٶ-b4tq_?\S$}q16h,@6C-K|XdޱaG薇-|jTƉCdk8~L+DBa5j)Y|QX&B Y0,+TƱx};_hg(eeWh&.?V+Jsv!t&@}tKd8Lǃ*ZBsAm]4D,S^+h&
I3B8XZد,f=0_'d<c&.%V=&5`uwn._>fى 1eę5ǿ+\JqfkTi6M9.+VSwW|8W
XĮB]$gE*)ƙg.PygrhWn[$%p~%.+c&#|^	b⩳Zxٲ,(,>'>ReLwZ\_X_V DiS..ȼ⥨9 
HeAL>@``Y~.;Z/jpL3~-Gi=hҴ	!Q0]APzZc~fGnCIS)Ίzb4\ӔNhE|-Ѫ|G퇕'd_y_h^'vS]ffQkg&͉b}hkW4nT(~%S <荏_/V-JvsƠ{C
IehR ֖k2O5	Y{mDnh:&T43ʷ#wccT߭Ҫ,\W.Er D+0 i
'mI{ν W6L.;nH%~3_EKP?Z@돰؝=m_Ʉ!LrhCػق2jͤX5\yL$RS޽OrNpKRhc
?ttݪuN*44m #
cE
pDaq(;5 Fr[P!<X7!g$UnN({?n?0qsiؑO718sy%F	OBZ;k黋_9iTORL)*R=˗k/g?a)OD=GqWTCÃeN/H	qX6&|Ji/7\&Hgą}1vxt@;2cӑRFX ģPbҤmd|c^g1+z$x3՛]o%?4.31gfed}nR$	[RRZ
PG*;nVS enm9IT'PWU+Pf4JY_xATL!R.R15Y3R<-Ki_tflaS[աKɾsuώ驟nDd
cf{ Tڸr&R.I%
5{URȰdy; yn ~P)xu?FYyKf;I:eEFlqâi+YJ3lXZ=#P''{Ԉ*|GH|y:dmVT$)_' 1o^>?s]tJoe~5 KY?o_lWN>lR6 
)4Û0}GGZLCuܰ$̹1!nC8$ЃYŘ6~#󋙴id/@~m X p]H$S~'yydLaq_uKSLjZL,/\PaBړ0fNkjo(*+E[gduKeAW4E;I*0M}"S7	o%pҧuܑ!eV¾jT5h lQRuҼZW%Nn,Y2ywL+'+ |Omx9w~ׇZ`C-I\vh̃SƎ3X3K<gA> ̕
@h:/зe~]IkZ6Mܕ0ӂ$|0 nE>F;{ț0ƶ8]VKd?هZK5hNlBPH]Ѝ7	׏Sh$}.U>z-. !!|ּ2>-D	ˎ;<oi|mV%{Pb'B&X wp|ue9_X5CkaLx±mi 	aLw0secOh|O<n9z|_Ɓ|iWIAW]
3MH\'*zw-P38[6N 6sUxSc^2#cw^ݾOa*KۤtN $43Z	5 aK!qDaq̧J,*$züfs1=y^㻪#T 2Tj3Jv[mb4d6,NC4F4K66N9g} T6h88OwH1:H7ާle!eE@'sO׭ګRW}oQ6%@I+R!p MtȒ:,tΠ~~ռj
&Z?;	ZZI+\}#kvNB;fǮ"VcS2WTiKRXNrD>C$?ΰ2ۊrk8u%@bbKJ{nkB4|Wayo-]
dC51vVRDY#/:`Aki8ЕiHnv^bsC3;&S߂;!TcedJVC 3ֱcy=vCqԜM ~Ӣ_#(h얍:ġWV$L\y2#"g?tܔطDU1[@;] ![OeWk/j}eR(V\;DE_0/;lsׂIBÏ9RY=cvY+Ls~K{w7K"KOL	Q;;XT@V+axT}T+#CӐֿp4񓋛%,ܒe_
f6XP #Ü^P"/%퇠A%\$z8u)4>8CL.deN(<B=cvH$)i-pM#VLw>Hoέ5F!G	%ou1JR0O
RaJW7Lk~REݹ-B# ACKBM\lj@<LlEYƀ٥nfnYj^=7gԅf%?I(ʳ*"9G7wh&T3c7)%ޯ/k]ڍ[M=r
hjuJpӣdsOw
gK	wHůlOCKvHj[QOCqy{]=nɷoSh {dC1Pn%Btu?Y~WC}9%wzB]f~L>b-\6}-ӀE5n'dZ?wٴ^.@IM j]bJScg~묒;}"j"Yԙ9"JM
O
Uˣ~b*&+4r!Yu]+t/TXT+[b;hʚV}bAـ_rc~粜TpsQ;Pb_翦iVH5@6{u1W΅bĴdc܇Z?]l!i% uIdQP'Ɲjf>9wi4I(#YkɨϤ[ťKtVGX/<%|v\t8;w>\XagBQh$;AXRޭ#V'rtS'{dteDY)73; 
@OhbH 
@|%1T.NGj܈YK8_H㏀J6hF4"+I=/>l0t.#Qܳi{`Gbj⌥}̜O!X\Lsv/+]8Yō
ܰ74"dL4 +[R2Nb{6C|6O60$(ցQ܌EKJ,&̙K?@(,	ZZ/ܟH0.;4#k
֣iB
(d)Jx<ΖPpF {2	_MIdL.daǟ}<GJ :,qٌCY
K2N6sm+p El3##kEo
{$,$T"q#qO3ɜ^G?SR]
o#'e)ݏڧ6ت}rc_4@h29A({L:P3e3pAT-A'BܭCYYYn;jCa2"o7rR.?;bo(rpcJ*;s5Ao:X|j e4[Lp\n6$37 \GP;+ ڲVNi`Όx<勵`|;Z&*Bヮ1 [$Kl%:6E
iJXeOJ!1L];>,qs#|cޥMIvt)*= N{-@JD"ki`|xFYRd~fЅz{ 'lŁJuf&BJ}C)U~r^)n']M<wE bݼtǈȚ#@|,^k~_]eo'y.kWZфqnW?F".[_c(,.$
1=-ӈ{#ʵkC1L@ΙFВt7rl !Fe9}nַz#+_ep~F@8yFI,5k@Ng] :D 7aK2hkQ`y	K='?5L?@1%^2A~{8:!xϻnbse4|4aQɋUaobwJnU`ul.$(t@Gyld9ٙ/Oj[#sc	<ebdḛ 7N,L9\O|5Zo.q&p1ŜfQ;}ncL2!M
f[cSAN#F	](DKE٥*vhg8J~80ʯKch0a&LD]Kԟ_ttjݓ),ҵVۺ/֐csc|9ۨ8N>!
3՗+\qB<KnzCWOү.f[g
-bu2*d`$-RaA9ֆ?9~Bi(
u1,$|;/d6E3[uHz'+yaz|dro^Ftowԅj^s݀sX˳RcEDKqFpj1e
B6c=ӣϪ
v<(1mr߄mg,՛6+p%} ;fA[}VBSÞK
t>UgR\n׿W`>I<S*G/EyNM޺Tz4rIOLB_`RGP܀ҡ{ٝ~OuǖpY.4bYH*ܠb4y2Ԁ_d-j?1G2LBiX18A܎h_V}~ʟWA=$oYx1O.AMSE)H޳v6,r?_zo;=aC۳eP@zE:ĴLuMc'K"1Ұ[qXd׈vP?|SU.v~Śys&l}\\4gA[xb\_ɧ6/JeO~3f~&,7:"-!	f`2Aysھ<AFқ]ڨ}hMkAO RTz|,lW4	|:#,Snd ]-$֛)?㪾Yѧ߻+@X[>|XKBd͚w5
ҹaMd_X,T
V88뉻0uoX
(ئ
>Kk	^S籢JjQ

^>$iL-r7Ӧxw5`J-Tbbt6WKӼld=V)Z^	7*ǬK}jF'ēL_xS٬&Rݭ8|eQ]IQ(_`ݳ/
:|U3%C&\Ĥ炂x_ '1i\.t9mv,&ӽ^?ٓbv=Y࠶45	V[w~(sMC_gtQA'FɅ<{;>/ZM%!
YyVuoSxoGQxyBGBJ1(tjubP<fA,2Ha]z>$:{[U9E{+b}޳s0s%#ЪJh|lPXä@]+Qְ,MO:sԂ]f&u5c:n nw9n0/
53<v0nfo3[MԆ;<3D44Kz1._aB~IL:?hD
nvfv{é6SE Q?uRLPKVU*ij(MMqJZ!.&gHbD-VR&ڞ͔]4x.\<Y@%6xqd4en>adƌ;@q_GB:s#x(PV1>>65L69;Qj6y$@
@
YoDfGzE[Mƈm1r#x4&>-
o	t-cY6 <%KiM!c}`h1eby{^%"d*V͍DGH V;+T:_{$]G$YP D^ƽ-{%i8	
H>>"nne7L$^1D>tE
XAmZCHfkFa^9(G.W1I6JS!DŤݘ{*W?$@ߵ99qzX= :ԩi)Y߆DlImsFams/|vNe@.\Y4rY1hWt#ORjMXyh:2ի囩yz
 "l~}{)ex7_7I3g@ZB\q6v_W(<wI<F#	]|/w;=2S&~3A
N37-70su0-G]
@OOFH4F
|`<<÷19Î$ٟLamXP8f3Ŝe :ٓ~r^}4|vp}crr Hy Q\%$.|rtͽ9xJF6⤂eZD*_ *|r&aO
3ЀEΥj(D|m|V\*7i
mv㣤߭u?XgϴѨpѨ	$qL&ȶINP=_VKy# 
 
T ;g"mma,agK>̑Il6?q]s@qz^{5K&d$BNc9V]
𴍁4 bG.!d
`;hl7dY[9TT,L³( Ѷ%q4v $ݧR?b"`~Gækb+W"uiNy$.⾗iݭҒhɞK-3
|q[:	2@W4Z	8]֩?qZE̛X	UUsN񔛕 vuo}=Bhx^_j:W}y-vr5j%զ7q L|962SћK<oW "̑iPƂlq>xekܱf1x#7dHI3,叀	 ~?
2{VKЖ>^dL0fT++Dp/C;5q.N
#<bLO-TqULZ\NOg3RY-N5!Keͯ?\3tYY+L!#
S`]Z]@K{WHR<PL?Ity?;[3ܖ3TPu"O11D3/L=y̠}"<L)f(ŷrO2u➃lL+:a`e'M	-Vsd*WZ>BR`YE_Qh
֡ Mߤs?ПrZ3MmNl!Syfȶ؈pRE(sUxVzu
!"~<.ylHťhPRgؚUI<"Гաn]3icYLơCH
\DdJ֡;NLB" .BuAsZ![1[@uQ?LYvztM {/{.^paxWh (DCr@XUKJ*IyoWِc@}]<s2YXl%2%u	
+'G8
9n*(_7
ta/|dLC߯u1alY{y~M-cRY7+
6cq_0)DNõ@о~A6cЕp6nkV$Ao}ҁ5PVb!bJFażyA~q"̫_Y{m,Ta@MYv/nIh`=itV"pG#L5<SѠЮ^#͗RfMUAa7laMB;.0ƘjOx^EΧZ6}Az	֣;b]|-wSms1śidzd)qA7+In:C"yfьQfrpYT&b{0O ag>
4.PW}8RD L¬B"[i?&>dMr#M֮3sW'N$w.$`qVlo"gx6$
~]P)M{SbZ
+zヒ5;'}!T{HgƢhxun`AJy;c/wAv>nlڈ7Ȋ,ə(Swi!#~(ܯ1a-6~3'|
YX/y7!N_ҝJS1O%N#&/;p)jKl`2eV}.{Nz4)}AJH{P"H,L 1foݜËYxlѭ^IIA?\j:ג]γI[QQ'-Ws;U$U!2wֶWoHm)Yp6ڱq{nxzjZgfSx6:ޠM@MOxti2rF2xPꐢCxm:BT6>ҋЛqEpѵqcOG6aډTC='!yT.A{#`YC+1%◟!&`&`$/\򪦶Տc*Vex"SkʿNi԰)[3Rռ![v7np"rGU_{޽~7l/Do9!$s`8oLJX
/G;
9dPYh"ѬTIve3K\)_MEڤA]Z̲"ZH=vx	1%c@T=EkQC}R&ƛNag?7]R$gp"Ϡp*s/hGW fxC#aD5 O3kZoV-LN@kpN寮ݞ!G%Ջ^i/؂bnZ9N cDbٯYŜU94.w5h'W~tF*o4J
rȜx̒DQJ/BnC7DG|YVPzqQ?qe,2lg7@:J9Rm!`a"[^?+D[KwۈMwcb ai_߇؀N(gJʺ:ůg 闁Qu_p%˿<R,+)DWBr<
za?#x?\0MK^}cH_`ʮcu(
=*M=6<mw"1+a:yO*43捴AvZgU+v@!\^·%C,?fW@/zuRE> _Ͳ6}'	F E幽D۬BdT-]͹=#pL{ 2 *B})VFmf;Lhaȅ2xhC ghڸbrW3#` g&Rf# Q+XQ2.m xri5		NNѦoJa4	2r%+\[(.y_ #Nպ&}wjP-.:[=l"UUęXr{i)X!\
|A<n~ΤNл2e)-6pے-|O(r9H@?;Y`nNU/(.9LeyrmiؓFfJ^!=3=rjL("'ny{n&Yˋ4RRqO!<H6RmBݹdqUs'PO_J}%k~z~Pzers?0E.# R||dmTXQ]K/GEFW,CW bW"}js<2đ8TNO6'<br<QBMߙ14_T<&xԀA_ĩiJ02Vr$!!Y,ܰ)5
ǽa-SnNO~(T6_ȅdcX%z vw	*3^!b50U=Vƺ>Vf
n]H_#CL&*h?GɉGVPP,ELN|=zЊFIy+qt@E>[^S]$C!f"mut-&m
Ж?8߹R`VQ?ng	X34>rj@lͪ7vefS|UiG<f-d@݂t`((Jq	,diYԱPϨфJw^0??s,Fx[ie mEmُ+^#\ڼ|Y:7	,w@B)
8!yYee:j,I.*3 Br+]̠SF0wPnn>	ծa$ 9ʫW;T{7#fǿ{ aJ^T'hŔvc?(
$6KRk*,yC]Py,,ק	+qny<Ub_Yʱ0+yF1טo-Ť~8C;ؤj<%h{bY*3纞d/R住BBtxa^,=Oΰa~o,'Nk >R]~c?$Bˡ"'ACftsؐ`g(S.oJG\%iӬI-N|_~ui
0KryɘnjwO.	x3PUx|1_ h|;Ke\S\]sUP$LpҢR~IV>
q|L5[OgZe>Z9KzSPS|?C ,uqCl*vPs|Bԅ"d<Znʞ>!D#h
)>NV2v>xǔtk!T0
A
)σ2"| qt4K `	N§ͬLXw.sM]6Kc
]f0nXCCp?ki7NQM3+ET^?Vu+	&bk2ҋoQKA=qD~dl!qD'bپ |Ivv㍛UU˲7y#<Q	7MT3}>+|M+5g//JoaMDdvE=~ɠ~xe3(xvfH]_{hZ']iBO<X?C0ſy7aE5Dr({ӧspPï?K
AXI?` We
f4GՇ`wsٔ,_,
^ŠYiN@F`$`kUϻk*;Er$.R#Oɾ"@IKKR9#g o
+ ~X\ַ1?i6?"}fݚBMϗhL,
Aq!rp(}%!5c&_NM|4&>Yr1}ժs9
G4#tȐ_BG_ٽrZ@TZ~&UA+2#8M`/Px!*L\Bs2ѽӐѼu`\n&^D͏)/'z'L1tTs p]#gG}jH#ɼl&ʖiu۬>I's2I+8j5Lgki{==HB(Q6 uHK/Fa$h~5H+Cp(]T꟧;qg4١c>aL6}iZ&uH93@hfo`#+咤';;ַm@m|1ִsjsN
&.
*=Y']BdJ)Iyԁ;$y_γ1+2s̒	n
5?4=H^lY8k
u YeA)ƤrC!8l恶Xr']<` r>A+~wiwXt4XCoh
WFlYO'ls,& 䕲y?50`/_E	
V&i#@5Xx!N<K]2FK9
hx(VB"EUO?#$((u'E֓-q
ɰ'H¿;F2be=^xo-8Y'.J01;G%{{o7]U럀3*U|pVXJKV@@DjX繺%{TcۆA ӝXXw^wc~ #"qj>f@@>TE8%T{*'2S_XAi\ownx>ڭGʥUďT=V16ΩAs){,7ȦRYW'u`]r7;>u}I%ö٬P#L1_|ܜIveV"<Vw<%QŁc}1vJBr\=%1g
$ mT*,p(t\ZoBoP&m 1>N9C8ưj&zV''`9=߳	7O{1Ȇ?`m S*:U|$[&fB.KO26e-IZ񁿻%`QnuWGb)],5f]\{U:DIs`JDJMx1m!TL>m 
My$+QJb!K9@k_1ΐss|s֯Q`ǀcԞ$Pw[
rZĹէp'HgYDHۨiа~l4
lѩ-
Bb$GN%>쫊
~&A0Mf_h|6|ڕJÁxZb7$XX<GʋDM͉Zߣ5̏_vRwM&GPCgSNTtAS(Ȋ=KBsOu)hm~-O0VW1oӚS<<_ΤYEX5[(]JA$=Ssȃ(br>>@2G{Q
IaAFF#c8~ɝzS˟dw"s*g
,{Ck.F[tmM$t/:4mAwR79eRd@1'mA m-'hn|kͤd̮,G^Et;V@8VzpӧܩZM:+(n'7b}tYEJtPUgj=U%ˀLBt!TO9Yeo]zHT.$Lwܜ^8a$reg2vhxU2B<%fs?P֓Wo0ҿJW*ni.5z0JdxgRmlypoKsq
MϥiSGA8wl"{@f"]RY	Uώ%/1Xb=
DTb!S>Jq#%V}g/D405E
&Y` }zEb,I666pCE(Ez[.)|Q{Gq\TΛk\4?ѽwUl|:`OQo1@FuZmNds;Ew{iMJ7Vr:ugBZc@53d.U7/llC
Ki*6d.UAm­=4z^>hMesڲRNvC>˩;]4!|O42P:'hd# e}gFՔ(~|XϙKW.o$U7Ύť=5![8
&Kn[Lh[hhM{+
by~0 ls^M4QM/&A~
I AT^Ww툠91ٯ7vQ/1#j&Lդ_JuQ_~DwR}Bt=,]?cFa%v#W+>0{-vG[q޾,
IJfeup)hi^vcF
Mcn|GWÿjfCyO7mE@OOyn'fdjie(l_۠IKO8qw}B2b|.KRx?j ʸ{aM_%ɛTΖJ)\\#m3Jn&~v߹rhXǂ8~zYM:@R@^vTϝM0^qp9Uu#1$ln]0'{OA{S<H-`Bl;`k:8w;e$Sc/z$	MhKjjj[NzV扏*	oaֹ4|=6nk-Ψ2/]d{SC7 )X5q.
#Ԩ ʶsESs&%NpF/JFqK7O_;HD(U!BúKɌ&
1Q>o3UwH>c?^ww-m-}bq;SAVъtp.^1Ecth?2alٮnIBE
دk뀺 .]ͥ4Q%**/*>
`-y%4Vfi3]IgK
9&H-	Blq{5?j
wXmWyk*#+zJ}b.<v :n¯"
&V}Y 0+|8bv |#at	+lnN}Y(8	"t~$R0ܐMӪd4JF Fu'S>c\Tp pT{(3U24*^HKKDRs~E/oh5pJ;Cᢊ[!r\qPzVgt_z,Mcì$4zM WB]brUuכٱ;Aɤ>t-p&n25fǥNcLި`3ggSL<(ÏSw"2@>$B$9GC+lw#UtXOVul;|wF1%'B}rj
zj'cet'Nh]V)}MHհb&d)ktz*GRgNtG(ugPf|uNzl) !4`q5wgxduf4?R *
dE=Dm|Jj}!IIC0);dhOZRPdzud	 3YՐGq:OsHO)-#}"TqD	(=eQfV/ZK|so|͊-WL46-O-(`o|dģ"}
R!camXJUvpY{|3(ܜHuCd)4G`?*\lM/T6W^j1arSjTisà"pb"rBKJyܴT	VhS`rVr<hh(uWu
6\.
{mrBv|8+d/!ǏRw k劯!Qɶsv-uy~sRQLWwz  _fƗ"O߾7GA2#րB0[T2$UZ7hv~	$6ֈȻ8`J͚u4'lhNo_]iAEa"v9n#p֚Y&[svfiGO@6E$7uR3db_ׄ7Q} T?e%aZ_Tvxz0>vCv"raWrxĳW`_X P<{zH,k{+^ׇs(%#isIxTg<r(MvH"mG-2\84.c\:2%G7ITTʠ<(NW* {1tL,\c6跨uz43-uk3, e76TnPpQ/1BvRkf`880E"64f_.uU\k|"SE=3O+<k14"_"So;'=H6 !H=ƉfB
:Ho	VyxfOcJg>٘6ۜ-\?!6! I??e}
$ZўK8PQjóGv 5?ٲ8f4xfF<+(N8
ٗ/3LA
UlII퀭]lj4eO˅08Vv|7qU&JhtchU 񛋶#z?C
)yF	z9EaP3d@KL
uADbҞuά^A,1ci9=DBS0M_!7)؍A@_
ҷn3&
y<{i9MkbUD;[]"/fΊQ7Eё؟B|V_w?L ݖ,
?jyc~(,?\&drJ4j?l{m%"J:Auz?Ҟ]M_Oxӧ#EI4	B^t1pU󷊭a[)PseeS*@QAI@<+3ϸ{,EQvT/|>	I|.DL"j[{
 6ivTd;GnJfȘ_;(~zP-֨W:=\e|ˣkO`I^*r!u(dSBi[^yʄ \Vݺib}w?YB5,۩W< 
MUlC0eLn[z*Kq/fSV<6.tʴF9D\S]`Q;!^۹'SY!Km3ad*Y(wx7kh~4F4xAP.($6֩z7hH/p9}3FUXǠ٪#n^$
Cf׫uX1pU*!E4+ۄ&Y
J@{bKMX{Rbrk1ŭ+(rPTi6w|Tm/JɔY?3Q5Ye [Pj1"%±C@ati2|w8v/8Kcf~Ԁ=r
E
$FF!4_gȓV	`)l,p:?V[PFr3a	A RAM-liF0a[
9{"BdyC_t~UG/iW/Wd'Cu̸0 c{7dXJ\US3*ezE ZZq&!K7U>W=ș&[vW4YYŔ"g]]Xņ&ᄌf]g
aRA[ebh!5wA$Y.3<=*1NDq.ැ^C;F==GBKב^ױRx⤫:zSv53E
<>o%SL	r|^DSԍԉ$SPs;x XIm~11"^hݶu3Twv)9NG$Wf]Px,Ϲ+;n{SnT`,V߃W柖Xb'iO-~iΕbˣߧJ}~pzJdr=h=-(pdN	;qH㼿7Z$CR,QQHQ1޸s$Ĭ;	0-o`b*_VEHwv$-ĶmۜضmĶmNĶ:ޛ8N]BV탟G'-Wkv:[X/:Z'B{]	GsSaۆ/452]H8['1נе T(-;,UT*F.eT#tiWBzwziI)g2 MhYcxfԏ.E6P6*61Q?v^R~;LxA)7gY/zlLgFH ihakh<]BՔ85g"xI2z0=4+u"9.v&_
0_6N
λs]l.s;$`_Z\ߦ3Pe<χZMey
єin-k=온ݸQБG?I %oEh)AV n96}K-DCA~xoR$xu7dTj)	DɀKn6nru?Vā΄
j~ZQ$0Ÿw۫|J(	0SuݼcKI0DT7WXT'3Lꨞ=X'k=	>40#~]]s
9ۢf_l)nաq˄Ei\9%ƻvS]
a-MfJ
c)pIS
@B~.5#*f2

M&ēNB!s_!?@A,;+5; ;
<ݝ!Y-\;	[̝NǤ>"nEVw@6ŶGe	ĵy{XF
¹isנU#Ud1lGw7fnź09*]F|GvOAKmG*Y?,i3z9RPg .ԅ7D1}漣7sݞ	XpO'hfcмl:M(9:EV6j{iV$\rFeqlYݴ
|V=h0JKD7I0R@AaDa@\G}!e%)jW#Ϧ.q^gG!j&{u0C*}a-Eo%S[6%
ֹ3YiR!d`/P͌,hp5ep8tϳͰꌖh\DPѕ ?	dc9v013()\p+<#dVyۍgqSJj,LY
v5\RbTYUƂOiyG:ȔRb?9']164KVEƚF]uVo%
9*=M0tv>z.T	Y_d	`
_ru`5RtZOb%Blp3h#%LYtqYh
&d\P@@jRt{7WhPdSQK9_|.|=ckyyu:}
	rv-2؈o[N8U)#>] Q^,MtK
mWo}UQIxٌHUP:\{~qUv:GSSřvؘAmv#p mK*:_BD\ǆ1L'u=&e"O'^
8ԱF^
$A pSlc@%z4-Y_vmw=yjvj>9O`Zr+u$:<>Rӵ셴[}u#1u\?HY6/N2l ̰ʚwD]}8v-H4EfNV5+$
'y+6]!R/_$4/LPa&B}1
!:uo=5ޝ59sS1A&Go)ypu%@@EZjR5S{jOOC%:3lc^)F9PIyDoٹ}ܶdOٛ	,&Ŵ|j.8`>;XQɜ~Y[QxAl?KUIH2Kk=`EwPZL#_R<\ٌy5t#^,%u3?y/"V:-̚-
Y~3C\npҌhO*8b<aWOvR,;Z()_wF~	'!֭ӕ(܆w\!̾5!"qoӺ=,*e  쬄<S Z
+TQq=\lOSVRQh%xk`D})WqRsZk%;n"~S0+;;-&TFXKe޿mg}
;.
x[/q%?"YrBUD=i)Vm/hE-B'ӾaSHE`q!TX=S6$MacuD[3cEk#ZH;pi	-+F)d(V	1#EVbuy\ogvY*kO:ŒT޴#
41۲TR:!i}_! Kfw/!aK/֨V-ZKè,tRǙ}WaB^sRmV	j$}+	и!<`w2	OlfNT pcXע3.@i+pN{[,	i&V~!Zl#>.?\VCa_1j$7]鹑fm25=XByywMYP>Ye(oFl9: pF).@ vP=Iz'8⏲rlgLzo,.gx/[Nw

˗!NLaȦsKCrx䇗OeyEs9Z
*>Ml]Oswk{GA֤t?	I_-9˭-
{z5NFᦴ^g'.q&W2SGu<cFuI&k
[4Vs-jWVEwDGABZ{~6`1\=:|뜦&q%X2T6	xڛ,1[ţnE	&z
Fݥv$s|+rFNB\1[7~>	Arq
f9dszх
$aRa?o'BO&!gi^;KQr/};HTw=~QM':h.,Yoch[SBh!T24KbfTX;fNkM::@bWXr-_i~1LaJbt"UICӭi0=JV_Ln`BȘx\Z574!\#~8yk#睈ҹZ-gYh}lg,U{}iea15|NzyJ;Vҋ=d/:wxq2HXKm>aMcJʸ9|jnO{MǐuݚZw6JBV!HP؟T_P7KCvLY[~$`c(6
xwX	^$_5=\1XOo!<7фd}ϻP2ť$MZ])l6h5|yy`}{@;b
Hm0Sh&mqE='l~CIp<gVu"*%*wCd]#~-1^D
6-xߠIʓw+[+M!|Į҄#gEQ8wqf=XMtT$3G<BW;K¿+PxԽbTR͊OTh+UC7N1a	9Kأ6O*#;p^tJ!/=4I-Y	y~nl[@ϟa3_h1OT&7e1KKm}uD+ ?S!o(L<"+lCoŵ@	ۛ 6j ދS"_<Agܫ4dg}
<"H5Ar;J@j3Em\r%]BN=ehO&2.o9wC6ަJW&nֿ:YT<V{YoF,m\UZi\ӥ	;Kyg~ٟ19RP{-rpn\ϐv5JPWBy4aAbN^KtWT	9M]~qR[Q,)&%>@a9H*mchbSi
CwP_ :7:|bOlw[)#Lɚr!_b7	F<ӃchR |}2Xw̵SEȻ^Q	Y5U@JhOGv@DRZ]tY_YZC@bϖ}z3J%[*j\g<2:4?S2Ul80;\&jX+%Id~uT[}R+"[Ӏ b91>_!PQ&90Maʷ-W󿯆VXih%͝ Do^'.a.~dm@ܦb	`$Ud"wob]5<.I*SFL:Z_a\ݘ,4h[:߮R˸ͤ'VK|M
0P``1v5evlć4g+.2:Uc>t2lBp$@D9x8M!
v#?,q}b+N)2ht]D~׏UC6XW:,R@w?/傕׸`<^,oa<'a1Lq390.P6vYyjjG%wPY΅I>n:[OVu}HbzaFtIui:h
TY/B}wcbWq=VnH%eg%w*8L|Q94rP\i?d)Rm}QOc0("ɯD {:<?܆rT0Q.IU.9	[j%D2,~,ȧeZڏ:(sGZ b_+'=Yߥ?k~^r$0.;y|d5%jCf$2tZ&JZKB>.>>K$2hJ3..h;U/f߆Ӕ*ƣ6,0WƍŠ^U~T>@!1I!&Ɲ=`QХ{|ZvƵ*JIAR%C_(6N\j4tq	ڮR,>Ͻgܨ
y/CKж+F`)%0uX45/dlRef^BuȨ-k^e>c
z۰5_Ζh'Lg5al>;
L0c+펫xްcZ:	N	cqdOTи.˘6s*e}-f;5k}+.4ţ'OIzALq,x'wC6S	kRȗN֥eUÖ5@Vj3ɸ#
rCܭwDw4X^tYN,94xAՒ.lYa؏iا)'zWpqǖ~c$&N*,l)ilHniOL3Dsd4$_g,u0
0X=iLh%D÷rbTJUk'=KOf<y/X pfls,_bAC6ݐR_ύCu.$Y< u(o27_ؔf Fs(fjjZq09<۔~4Ey=u)I_<L7~Q,BFRJb%Bq }VRSms@e
MP;2 k-$׍S}	?6vǰ+jW:^gn}[DO
?FjsK[$-P9[?бAW#hb];",W-v/P<*5+&uS?Mn[$^atǳH@A|ZNr{-<Np8grw`*h͘M1x PaZ(t5cg%Վ#%h\м&_iwJf6+=;灊97}?fc{Aa5Z)تY1܌zUZw 77;j<u>~%YZU\`m(p2z.Gȵ)>UDU/?tG,/߭yzWؾv`o*pkTAj|/vT0|V cT,Sܯl)9TXQS>"'țޚV<ͨ
uj@CVM]dLD4{̊7&
Myx=,gqNse_p1.˔Ixբ?gY_h,X7]޷qۇ?Ղ__~=rn%R6]a__@S{"&nD#޵Gס7PC'*x^!K@ltX5oȸPuZ򦩨I]BHZq{:u[JjB6*%4=NjHgLJ-f(g['~YE{VN>e
,"r"ߚмd޷-jZf1*.X0nŞĽwո%W*1f48tA>a7mQ?=Pβ%o[ @A0#PN{-lN)5
߆I'躗0ߛ7<FS=V./ww_1#HA@Fi`wW9(^iL`1szԧnЫ-3^cpjS'#b,i/kS^HK%mDEX٭0Ц"u)zG׌U"~e*t̍ג vVf7H}C\(**3_Py+@(%gzt4B]lk+W!*驰Pv>:q0[rJ0d.A/0'5(jۆV{g.3,]ڤsJoŸͦsZgiL]o!͞gqb[g(>xgQqтs
}efyq9/&8ġbX7CH٨Axu˥ۓ/dѧ2HznQKJ'\$Q(]VGeʯ ʂ6o(ɎxYy7LJ o!=R3L')gVɥ{RO"hrs'bo\ίjm*8/K0
\`GN/	1K^]-V]B,/(cCv?H$Y}K!ؕ]N>ρȭ^
OlUuȴ{T<P:@|ݒoa}o9$,\j[eiRI涃ҕF -y-V!Oi`#+EH"%waDSROqmbێ}O0-.\JU})N^I>rH3Ew~zj@\͊so	nh?2lZ(~2.j
fc@X;.cgddU)Gm6zΧ79Dԍ:Dvq/{n998&Θu~beDs'=Hp
u1#[|	U݂]vw瘃~zqX>`Õ<HxO11iP>.VяVd;~#\:x@sK
7Y3ֺFȂJ"Yp!IcK ?04S%e֓
d(bJǏQgZ2._WTƅ=~X0;PN80ٙMoח`KKW0S((%k罹u?̴,*w_^쮏i+]`T#3d*҃[\,T׉e.@"r+6TW3+H'FS7!gڣsRȴ<R XMŤREVtRC|cDJp_ 浕,"lp1Q>Z#3+</osgN.tgRVeX[e\l
FіK2.`h(Q˻Vy04H֐~0^qP}K'Yak?VARGA2UbhXvˢٷ͌tEׇŉ_j`Vq֢ +M'_iƽř
^DAژnف#rbM~|Ȉ
Dsjcd"I|"?v53屖}*4XjfS	wRş\T2{˲w:
I3Vv"!UVYC~x7S̩cX-=Hn<4Bv@C"?ˬgoz	'"fˊR?׹_̤UdW8WwH7<	Դm X#F-֓x^ᑻ Ɍv?t"];LMU?Hnk3pL&|2y$mLp|=^q/jjYwdSE+.hۥ"-(hłZ,hb8vz{P!ۂvS֟/Y?k{ey}Hr&+"Is+Gz0Dʅ]fmNط͇Hb-|is^7b1ć%wŃk8ZyZTI5s4XSA]bG2%,!@k2)zSKgfwCuh
%p93W͡nJnkZ$1h@GJh(~k`~[ǣs8c˪2yH`QZQjiuk6^B50MB[R))z|i`tЁnK^4MǊ/Ỉ`ébn}C}Mee
uTZEV}
!ZnfiλoS^=j
ppQ>b+GP,{)n?!?em,"YQKZK zDvM01`)`wH "n:]1+mCZo"rɬŧi81OQ9P[dD"6F_f -k9<8Q`Y<WY;ʶ8ib~+[썕tQ0{-P[ZvjjV_3N,^
s^V,0f"5lR{Nrrh=O}*K(~Ux8yiӾ,q? E E2ZZʡӍ_vcl638QfЎt`R7$"q<+X`^*#w?bðY@oֹ4%	[c=9)e(gȓs	H26u{4ᩞLZyS?<kp<?d#M\v*_>b
Ff*+t3,;!>P>-LftK|څdRO͏;lfrk-4vQ9~u3{ߺ2}ȨY+M"	;~zNĞN`Ӈ?xbKdtzj3|		mZ'Wэ~1e@%|_uo!;`[1Ѡ>!TsuVur+|
'h<^Jih<fZL2hS߾Au`VJgᆤ|"'C#StIgx5++[J[%̷X_몃WI#"2Ը!JJsh#.ׯ_J}8	8g=M'^*5M<B`m"zp[?K
l
t"f#ÿs@~:o>LAT%"ǈ}zٵؾYa."]>2YbmCV]S舯4k닢n:UiNPBiKH_<dӓ:0'Ǜ^cҩW%
?[okӑ״ېc m!:?0jc7d5YJ3=I-g_ #0稅*`HY|j?ST$!<C]w^N'56ڷϫRUǮ9[Rd%*[n۝Tf;»..d(a^C;jܺ\x7>[xm~ΈǐA;g#z_
i=jGzF.Pit{~vo=}/G9US.=R2=_4ԯ SeksWŰUByzqhәD$uA.]21RA:}+ыQK\ih]%T
ơh=6wGlruP(W.ϞD-߰NVf*C$^ˈ[4zIΚHa*
{YAA0nbz``0($@uff^x]*2p51 peӝNϚcsHqa=(sz?BZrBEKO1u;'nKx2ȧI0{s$,[sQL!8{F|QY$@-T1/>y%to)]DQEm{&,GRrQڶI6IFD5f7,ДC+Rƣ(" RQ<5@%Dzy-fNVJڀ* 71HD`^"vn0zaQvi2@L֭d!|#%B{shqk[_
Xw:UWn2c
V
h۞ 6PuV4p۱,7,Βu<kzd'|uHWpLذũg+GY"q {
t9?=GWh|h[f`1)ͮJi
XA%J`FaÞ݊ߎ<	UOa
˖%^/cƌ/ e;`'&=lglp
qň
HofRN+?
$Ba,&#\q7!hʥ5u'/~Pλ֌}{08cˁ(U:ǒdP~x{6	_v/
u\sxʐ*::oNGn#f&tؕoLI)"	BG\7QJ-G_ jC<}67xaϧczuA1Y6i/ko
OM0b`Tah	H.\~yu?k7}f̛_|yڼrŃS^&K|.ςB'l4>g3 4r@"5A+8rt0/W~eE&ۮ%.E#ܲ3`d#*iʵOiP
S3OMnENɻ>sIG^FhB̽Dč`\;e+GMxZw.9L$Y\ٱpe,cJSF}hTE96I tI"MEr7ȂDa/NΠ#kr<C I1*EVKޜkAfU6[WO\IL ƧXpډ+@FWߺA<
e+$ͥek:&op@.]xxFQ ⼣\~	Hg*ob粩Kr뇕]QtTPXռLm	,elo
R	
1'\?oo_dg=h*'>ω2p ;I}W*37jTc_U/pyp^6s?qRҁ&B93hԜE/T҇uMzF^!6˭*k4Ӑl=GȷcD8&f|eXKnX5-6}B|z󵭿6vY~ \Jgi'nDݐ[2*ӗCfgr(L7F15pQFB~Ì,Z"o뵦hΪ)k[)Npڦ`b#poOLy!g4IZ72^5ʶE7j%ɧ`;.ڄ`]Wx@:){
UofMlYȂQ-j+C-qss#SńI<D>pْΰZ+)28{,7'lָތ+8Jyp+sgxm}tm!d߂_l?  `b|hb2R2+*I]HW,+
Og#Oa<{EnGjը DɚGAdl;|M^H׺sC	40j*Iarr̐?W!3Z~ݱ41@Z^Ml.2lLê^AĴƊ퍇/ɼZ *L֑RSzIlEi#6#xP&{<f/	Bc{;7{Rټ9Q,vrRt%>I2vnqm㎕SmCSLXOl+%8eKB(C#pݾB 頻xJ2DҎ^n4\-2oshW}0+\8vD;MoOu%_7
DSfxSYGy
XCBxۏU
Ҿt[޶#̵fuDtZMڡz6DYkєHugo#ongf'1X8_
yv,"=ƞ{U<׃$LV-K\;|Ax"vO[!$\`CkHqÙMi%$|Ӻh$t*! 4tQ3qO"9im"$w32R,9g rE-_~&(gg!jH`
|kuM*Ms7CÙߨc`@. VཎvTK<]<K5<MFAg4kpxRҹ7+Jq,`.mbxfrc]{SH$z$RA]tnZM65s
L7߼vsS(  QmDogikȧ33Bգbۃqe$Y31[iʧ"m%<cT"7f)t1ĵ[ 8m#w>Y:MSXK_Lqנs')]$T}XUNqh0{U81Y0s2k2{f6"X+
/C10)QNHSֲ؋˛B麎Y{廓7pPyBYNv*P1;DĈ?αHsW;,*L+
^q=Ṛ::עN.|qWgo[K狏g
-7,XFq4`֌/vA3xNvbOCݗ=#TJߦJERJ+&
_Qi3| c^dٔ#"ՠp0n!t1C;;rRO6ԤGL
dv]z\`.BRc,`#=Ik*!o&һJ<LCF_ZdNIEu _^9
yWscva(l),%]!I 2`Eb}sEr##Y1K4Zx
~Fi \2:rJz
I"7s(#Mė~?ؔ6
oOҾ3Dqp]}(;tu#:ۢIQ#~#<<&Q`z~Mċ8UE}1xQš(S҂6,0k"
D~q`q,-w>KL,aQr'ğ
{7⏦ 
T遻<2}?Oy/fM扙N
ך6/ACWy^!tjW	_Wؚ~;Cڄ}^)2OΥ<s<jtdDLpQa}ۊ T+Θ˫N4ZC04C
%XۆoB~GK@z8abʁP_#3Ž(Dنux6r#ӌ?!IY!-83p
;oTp/37v&¥h+.8%(a"U";"P0[g ^qg],C:N
v 6j(xY~2#/tUF:99XWp_}Sʡ& TFTwD]nKD<TIy_Dkְe Vﱖ_#r/uiq(1yf_XS#!+ߤTйwDka-[25̙#y-CP7Eŵ
NDB2K9z7JP:f[밍*"j8MEuf^̠ݤ!RH$uLNv-%P٥8SsS
~*uQh(/o;a֒7>0 ȃ.s^XF~5
a{ZQELPCH8+0A$@D
灭Gfd)[꾺"?(;\>]=lI<!;`՝SƟG޲YZQ	۞U3Ր/m%` Ck\$g;܌R)o,B	]깂
5q\
:؁_)'cהhN˿͎꜠d;]r
ljڶ.fbc:@㪫ܯw(䥖B=R?zs>m'}zyd*GMYl)/-;!!InN[_(GazaDU;Jtͧ!#Еh}cmiT/R;^uUĬQ3[P4Iw-;(!&h!ﮏ`Ƃ	&qpBǾBE? @.N@3>B&lɪģ!<
jH	U0yHYsG]\Jm&dew}M xXnPzb
sdlW02}g6)L-]>ˉ[PL%mj[0n)O;4G"E择Ds?2Fht\i2XC~Q$Rm_(04cquh%qD8eb)jfvVpG5Ib6 ;M7
t+4]M3 92=e[b8]I+WZľI
L`,H d<ě+DKG782d̦уU {TK9gl-<@}Xk<h|5 P1oѶ*!%{6<NIR7Q $	A؏BRB>~֤<8Rك5F6!iYaO?*ceLDmL;tyket"7)$|Uc"a&ND:=;T0I:wvVsƷ-)gg*SJs6s#S9
pO-hk'd+{jH" jd؛^^tg
#敘h";Rc khcl8OW{!ӑS)Ο[5
j_Z=~t^$<*@C~~UpYVeF	qغYDC*Rh[
l;yxϵxD&̓)Ed>?sa3{ܬÒ%Pz[ԘԄBdH*[_,|!>TTT0>"0{Zo1"Krs@m[89>	t0pĒI|1{WFyCYy
Yڼ+5^K7T[20Z.Bf'-~P"D0ЄQORx
_q_FO7XHNFnAq»v_QoA)Tin ~e?N%rp*P]_
!#3~BfYb\-k+i8a*2cuxIq܄4D2i.#
v"N3FU#yC=s\ :x~(sWcO9xD`,k{
ЪDikk^Ҫod92MLjza	j~92e#Kp-T
E.f:zbe]RU(JيG+u%}МGbT;2ݻ8LP(/閗GK"tԖ:0=[7PP#5L^RA%XZ</;0fŖp+L%$59ˑ7
5gІHf-0k>>z&3쾂A2BYHAa4n!⮪BuB;Ŷ!Gy\$ 5#/τXv Wo_49pGܝZNdVpA/hAzJVX>(΋G{=KݷuvL0d
ΰV4͕3se܉#rzJ)-=YWҋPǍ5<98
pVH9@k<ZƃH/cL)=\ch	+9#
'2s@}:<tΪAMC>]!LFˋ]Q$%1	aҽ3G.z[#ϛJn7͝X[$/8M zOs\8b؛Qog ʤ-y@a@vo߉}OĶ7PQ?
ȇ*i?^Zۉ7k-q̛+&O]aAT&GS|n|6ԗ1b:zdAVW|+{*dEZ,<#̟NbȤ0f8cHe˙~P\U0bZrVoiWQd<fTutF<_~F:K{?y}-C/ۚPTvgLlpB֥IOWѨ-
I-Ro`	Oy{# qy3AY"ɼUիJso6݄T:\q\5`
)N[;sIT-J7`V}c]a
Ly0BӇL4WyRU`}r"0P?EK3
*Wzԑ"67y'wJb>V8*^H9,c2/SRų7%%5CǠVϋ$O	-&߷#ӪH\˕ߎ<xWab|c
ɵ}'G-k0݆'9ҟߋPU?Wւf!^l}V)wkX}ӂwʖO}EG9+ %?^-p6D:HXc#FJJqUg@U˶qMVH0:
tnw$@DC;IU t1(wzopܶ8aTV'\p|כ<D}-4lc3mjJz] sd$N=VTJA,ug+lc<5UN kb*گ68;{
	+
ƕIx/W;g3`&!XD/8/lC9T}1bhՐhw?onE89|G
z܂2-rv#"KB؛-P'N |Mrv0XkFCtiI:nEͥ%4)I^

)[*u:c*Mcrcز`M-WnL3E˼@mZPei*-:J]v6<!<bHO犲V+[uoѼXb_ipJMvڞaɑTJYw7ߡ$_͗^WesEHU@bkUTJ,l_Դ{e@	8C	됬Q$77)HRTCOQ
5m֌ѰFSJ7oZ1vIi1vwav|zKRN&9ȴ$(ģ0f#B*'瑱LFZT[zv0٘_qXVtSGu48Uev|Sk89\"7+XFﯧFƽ󣅻QIo:)s|ޗ
֫eSޡT{/8SoV79Na ;wCyk{
M5 "_.wFL8
{;Vތc;,?\!`!p& a
:K>jmܼfژ~r>urUBRaڿίٽdzg ow,_ݦސ	7hk2-H;I:H~-]^seCLPuC]6yk`:'>&\?\_ɊO|*뗩rS\tZOZlq3(+]UVi3'
7'ǖ"`}datd%=3B~da;Kmac?My{@%r
C
.Ԑ.~ӯ'r<*jjU2-t$=.-zv滚@j]jP'xw2Wu <wQ#I,qICF踛H$w{!{!Tb_;(9ī@t< `}aTηd^\f^$,Dˌ٤gK\
}~UԃooގCjIC?>eΓv E-	`Xr0%z![	%.n	 ϸS }>>gdtG(,Cul!R^S|t7'QXi+YI,ݤq%dݜ+ibNFpAl{1	G|C}[9#R;S;P:?P]2u}{Egw[>F%c5aD$d4P<0uZt 6/<xy@]L(~\5ձN637gk>9ղ[10
T1֓o&wǆ\ۄ,k@M>g`_ܪ^
YTI'flSQ<CKdl LP?/:s׵$+:L6h0fL%~A|łة(r-h3{u>OAæRJrQ7FVǾZeu2nۅtco~h-{}:@r#k:b0B,ެ6.acXs/Z"߿[-%13	pa2ɢ yAկ>~`r`=0W">.u-XzCNVҿOʘamK۲ Vo;7F-c7ߢ#!֐WUƏ⣬d"_$ޱ#n 	2zeH؊y!Ѧ#W_7r y$]AlXU\U0K1Z}>+u}V*Zz@=PbtQFކ72[n6:Dm֙%wY+rmbn\^ƀM
瓙T^'n_
N7BZck54.D]{@OoΕpP47V?,@ª)$G({z2K@`b%G
y@b'P7Nt Pf=#;=C!fCo½nĆPwφ{| !ǿ+zaY>,dU(ZSqةZa~z?x$3^'(n5`_12`̋ws0 QJ_BMcΛ8NuLamy1nk`+[XMDkvr]hc;/ɳI|VB[ϣaO׬X{fl>IHJ̈́NM|,"}͒ځ-|n9li+h-dAvt1Hak9Խӆx{ml6{8L.!>)Qz־=-^ yUf|`@B칯Jtm0x!?Ǎ`.0ŗ|w\Sk~O&gD_"U`e5*by);$!qc[0mql
]3_,խVMJ(b=W7%	uAj{5IG5C~Ѵ9eEXsiQU/쒺Gu
%*R'@xcc5MyOOO[TdCn
&;}.ȃ"wZ2
;>w1M-,'dHΏl=
7s 35r xf`Yb#	&qG9S9%ssh0xv1>xMwZuJ/N"}fo	-IFƧ}T2%nux٘)[t{_VW&GڳHE` m
nKF`;%n<do}rƧ;pӺ#20Tstn$$QF&33#N:!.1}C][6ӌ=$DOj%	֨L QzeVeߺk]mD+P1QCJB$û?>C"pGw^AW(XRIQ"Cj\O03/y;j
ĺ_e62JQ^>q~ZY
ŕVfPwev%xm̪HͨG-!v{ǥ?PaqGK*PJx]GxȄ9M8!}c

'G #5e3;Fu5%Ƣ8/U T\4ĥjvHUZ\m/Y* +Te"X%K3Q^Rٞ;ϺfkZҮDwNP^_tXiEqm11oeo8 E*c}(T-'[yP0o[hv" 6c@ӻb|h* Ŋn$:}39D)A#14JC4!w_ %\ՒK%#=8t5?y]U

YU"fQH{zX#A7q>o.'󥴈=OwӬ='N?D:t5
ر&h{PsHʍdTݸbcujmb϶7ؤi:Nzyg4At'.DLusŞzB)0ACƔRMϢyC%Pt{>Ջ-R눫~auUZ ɭ`b+ySF"p֕atߕ5`.px)&Lt*7pz<S0Dm٦<-E+4c bM4yiw4SÄ"֫\T.Xf٨VY\}^ߌ)
c
+&	6O_MHq:.Oή߳m!]Kvsv^Yk
͞V<!vr/ JwC_##uR]/__
d[!25	5Fܸf!h+8]* @:Y
m)-{(-qxگezRޤZQ~Uh?%ghg!j5",ȥf1`mAZ䠮⣐+E9x

CRAhx0(dQ&($8g>^+0"⣄126#$6)q cݮSN?u	?ܸ(KXsaG,Pg؟%ehQRƾ٦Н4دhef1~5xA6?ֶ"()t`ZMw9bӜ:$va\[՝dϞ7>+֐MǃbZe #xdU>lKYqFoKju@{p΂Tc<`FWsp%it]<Аm[oMipư
sc/_D	j/
'U˸naJ)38P66^U]Cw:-He՚(B d_]$}LڅfN!-%d]&R6"4R4U1.|U6}́XUL
"vW
ƅN3A?A~iZ'
?T`xŝ^~mݴ>NXKuKyN	
RGL%}G .
By:X	qVP0dYTAgpUp75!kJ?Guw%W6Tgh:sirT~yt|ҐlOSy卪/j  -{?F<
Bu*¯|ҿϴPQa>8oÎ!:^rq%Qtg0I*"NzOٳ&~:61/{ 4bIk<Г-.ea`X <r1h&19ۥLROQMBs!=Nw*C, n
{l	X|m˹O"i86(QklЃF`WV+ODYlӻhC9\	M|>g`3[iߑC6P 8ֆCm
;-5K6;x|Y%oXeק?&6ƗՉwB.q&l]_8Ī3`tD||K5JaY"m]Z-Yˮ8<_YDYgTMi	Ļ+4u ڔ
 ǅ==j)x;zkDY~0㮒U-HMu75ԍŘ[ƔHh_#sN.s}>㲏:Kʓk0 r+6|+tVa
P/>PaTaOxsN-*ס`D@QV3KbU+ LJPE
]~mϼ r<遪úUA.5((c|T:.hMW8Kɾ;3V0P_H?X1Q)GajKU»^-xH{ʻv$]glf^YW|y 쟱#mZu0)xw;f2<C}pK+n1ɻ`]U _]$,`.N(cu?R&+q7enfT1^K+&';,Ʈpy&\5JG[GEXI~.ͺs\XMyJ<YQPr]N3'@T/B,h0ejyox>O%nuci(YIhtgSd		I-FXx[i"
_ɐV$&:W4Du~דs>eCSm
=gyjZQjcH
Ya;p<o&ȞhyN

jXI	ڙ9&#/?W(`S~TLL[h'jG)GY3

}RGàsPQF#6fT> CyTAE\|
㭾BH<c!/nV;8ߞZ'}?kG*e:JPp\a?;$n*	;^vuDRGLY)Z_v@o
|V8=O=`E!Cii
z	EkD<HY#L!:Nqf̍Q7xʊI55Vsϗ蠼Z&
3b
-kUPz#XQTMR~-5xΛ(LM>TZIY@|N1]NZ.m8?urOXpݲ"6=ckWvU	Ɣi,WUŊT57-Vx_#<&/$AA^X8MaQT0>e0](ԍ	

MN>S@ec%l
*__XɓG5N
lMAzCz%;
>뫏<ʱE%Xlyfkc;@sӠMh+8F#]
*48"t>"PW
!-ɀj.T.m\s /EGЍ)%MmeJ8ަФ7Mr])y}7X5R9U09(@Y»g\T '
f1ԄY3ӹeBYj|2ˋRT
G8\oi gUUN-eL+f(
yC5Uz|~LBŰ#eKpԿ@^
;byjc |iŶ`oMeÒA,(DeKꦒͬQڮ.9+peĻ%*dn<,ip$М;+.(3*GǨE<6So(϶k^}:w]|DQD>ľu])٩<Kg9KWq֚j%|!زԻyOGt8E*85͍Fc938~9v.)'Pǂ1'4%
⇔G7^|=*Pc40jZbF7jM%=b*̎^ /Wj2AcDq3	;T#3jU|RRhŃ$VO(`{Ϟ!]!R}2DRΦ|<PBU7{mS'\A9e%^H=Sr͕G
L6\֙Xр,sf#2x?u)?|xX
Bq-_ժH&(t]m.l3+L5y
նb9~^ P8#b0+ &((b/K#gQ7GvOrfS}m]I(D5\A?
		Ň^Db9<+aCcA ː.eJ+yB;`+ņ
K9EZAQ']f5UauR=ZUtWwLkRx{'o:֨>\/{ZX_8%GY
A?4xUl{'VH Tɖ,=D~;2a|s 7Fg5JGsY>ˈAŊrY&yu-Bv={;C-p:Qt(JPbg@5PcniY7фeYEy<tEzHS_k`ZI _Kg䇵ke"lCwoYdo j+剕\lE pmo6S?n-_z86Ī$"P4,dg}STZ96qCs(BO@LYBŵb6RP-
2XoK<]ecT][(V~q)Yq9w:?,nwx408Gqz#U%uڇ'Wk\Z|cH:f4Un"Vroj5}+ԯ:NDmG	1;Z#|?
j^:ڣ2o$GLh)ΒY_1A*/=E"׃8ƃAK+Kve<Qj۩6钑
A;
J'ex쳦dFjLp zX0;;G7bF號T{˪' :*Ȏ_06wlD3)_0[:A|CQD$Xn2F
A۪γ@:lM!s=X*vUpP1iuFwqA@,EZ-
ٌdR2gH;b+Jn̶%/7I=WHŲcx<|V+yB9{TEA'e*zġQn/^axɝèhBe/NkWA-SbW|;ŏ<2f
}O6q$Gzb8(RqupWw^f_ 
|xV4<^:5rI
m<$hI'UrY3';(FO@=(W}ߗOM]&tR}v,-4˂f8WP=$Tuv:\}BVAs)ΤMqAD{zZ3 7%S֗̉Q@zp]yz7C7>%y.)`:s+<BVޒ(BӁ*AH_0YzgR3kXh2:~(,,uP 9A&*G&[Y2g5ÁK)~xI4B,`揀
vf"R&FV+z.`y]7"Y#p&umtPN0IQ,>i
IA Y"˛E/CL-PڛC^%1=,BwEK:>B'Q^o8DsxjcD/\gIut\z$Lap6Gr k!^Ԛu-h?cj*٦SA[?_6JmJcwj|Sڝܼ|B=mHʞ#r_Ξ `99;Bc iښ:I`PnQ\f6|rXr_p0GYyKA[l;%[?
2Ȳ	e{d#-&d|(`K1g]?_TG)e/ {S>b&ǩ;a@J*ds}j;~	*:Sߝapu7l}7pپf1"&1'ވu+]،	]tqݩHϋAmLC:y+ó;!3$	Wu1ʆi] 1A@g~Ǔ5+s>?2 6#RţEi%q9YpESLmtjR_;ZyrN ,ꀌ$"Ȳcl:\ ^Wd$4}bmpf歫XC-6oԷ5k$({	l
%8ZIϟayz~;zeHM%'UmS$vN^:0!]_mDC[0eK1C:ۇ5M:i<GA6!y@k1Oh	doZhyRv}6tvfJ~Lh!CA_"-mUh<SaH%/zz훿Tt		%(%A~Sŉ'0]nrrtz.E}!z.4IeTA +B~n[ĽrgV{f%=y>oj&CV+6dZ AaHX\\լ۴z oӾdQYZHÕ==/'ӖIbp02hc
fĸp}^lv#62
(Yq87`o'V3ʠ`Jmu7ٞ`S1iy"KZW\CVI7BKzy4Vt+pҌ{z#dV3@x7S?:#9Ʃ7KD~"MNN.bz^D}d0hWvME 4!#I2Q5ʻK`l2ƒFPV-/ QBʘãB;ǆ*6"F>_1 jd6^l
2ơ1a>3oOyV_e}䵻O]Ĩae,*,B6MfWB/ W7C>5JS""W~*h {K_C8Kbla&vSiXMKjs	./Eggc~kmCL? & -ٱTfLib\D f娋
ꂍeo4cn4c(k7_ߵEGTS!PMtav-@swYauFeU(R!M	.P{iݝ#4׻@X:[d8E}&aݏkjjX&CUb;hh[m	2\䷍4{-v)q,T0`2c9<QO;[uMG pu*{ǒqeuTj#W}	'8Jjڰ
v!m%9J\
{ΡQS]ɬK+0 #⌱"LDۤ`5K\\HV_rNopvgAw?S8]޾'uPlqijyk
	6?0![n!25#1ex(6&F˲O+2gj+L6D6*?|EO<m	mvY ~<.ƐY<!JR\BG~љ!/U\^7URvkvIi<|B)ϨQ]8o3D/pڑAVuV90
)^#i3Ծpvi8
f[zK5ymm^qTH"^4Nb_ۂCpSףY\n.epk2Wa5CE_*W
`%^qU!" `z~뷈#Կ|-muiѬH{+92K<^@xĽ#lR|:7cUW(0[kUFt@O5anVM<>lr îRC.#jᶿ;cYރ
N̹p1At2J>ܔ7'ΰ(#7|}J
u~dޮ	%Vu=-m7\?&#@ &QǠ>HaM@ 
I7JO8r~%Ҳ%`y;eky(CۄDhOo0 64_=G`1\ܮM-%!2%uaKXKI:|!{}$5[So,sHt?5@dZW@n$uNmX]d^/ŋ1vNŧ4c(BgfLF`6vkoо
fMyyv~JN#6sE!/zf$`0j
Ϛͻ?lʅs.gc#Ǎrv$*s>.ni&5As	Wŭ80V܂	ںi!IԻkF Ezd]b_%`HnBާE	waL"iB,UFP0FS#$0$V%l	s>sg5C
"=lhႅAFBwSLl~zn[#ycx w:Ԁ-|'rbΑ3u+Y-GqAZڔB&uz/K% YZ"{='Ϡp[7RPhQ5zAC}Ѓ!Yw]b!e_L"ඥ0Wm[乗[N'iT|y~6<
#
LlKyvNeFXn20b(&P	kħ[l߿o @G۷ t-P4!A9J_t14FQhjnD9~(i+p:Amfj-t[eʱtF
{w&de
I^>gaII?CmNIFE}:C5	,d<:x/?ǔ@dҨy8ӷO,먖QmO]y 7N̐h6NJH;#ˢKQBXBYvت Ζ{=ڳ 	YoY*pipa5Nj @ءCu
6UZ2KCJPu^;Xʃ֞GHV˯Dp(){JiժgP _c%$~-1VJ#bB+pO$	,(xZ);5hBohAlE؉j*UK~o62{cJRʚO&e#Hyw6$
wC @h$Ú$~w&#9B-6!] 2LIܕӽm(($i'K(uwu4
/p[_l_W)!?8&dh|=ȕ
 A,O6Pk#_6y5ϣ}5 Jk[9O^kͪ0<drm8rJYEUw?qenp#M]퇱>PsQ՟,4^'yC>&]itOm79>йJAV_	zg-_{zV/__행yh=t}IL_j%#VɅTgXzE)ZG&&'T	lE#s|wث2$ Y==R|;Oo&#UmX)kُ1~o|Pq2Y!|r[nqbZ/7ov~c9%h,FՃW<ngJ>RWO=w<kv
X\b49.i1Kh~R?0VSlyw#Rk-{2E
p,6Iuj
lJMkN.dlq`1zwoh`)(ꍖ·@c?_jĩzb
$j
2whzV8dX2_Իz~!WHjpiXAbN? ^C|pNdBJOrc`~qT{%MGdۑE0yZNhgI2`]\Rζv2D#VE9<aɖϼc>)|swBp"w,t'Iii6m,o'~1QuHWS)<S嬤}rrnf_KTӸL_--MX?FA|Y@oݗPJ[߱T70=QaȀ)~R7FWR1,]]e!j]n+tR@@<)콀V- У阁%MWR14k^RX/,l"i
Օ?eӢi_qnl}VeCzڷ?)j"rv
5*Ϙm_><aG:G}~\F\9'NyWXϝ
~սt lW2vAq'	5*z~D	\0{د3lmu>85 Z0I$#?9QzeL7!NwqdaQ범C{m,1W:[GUV@Yoz͝&NΛ6̤RXV
-bd@.#ɶ8SC	Sk
l:Pmnn@U!Fvt8Z+@mTTԍ`".ҧ0iKz!QTZ쎓Ҏx:#VTC3+?
 %Kƴdui%^qʻO민qɍ#TXWW4F\7Dͳg">Y`]fdF9 }}+A&Â #NYe7k}*mg1ֹ+@\6"41D$zGnw"*~`=FeZF0uS*x$ y}R@l^L
Jk'>3K.^&L'Ggl*9?xeThf#)z"βxfZh[іO1,w̬}MqiK5B[BH/:jk4ǖ8'̪F	ز>?ȔA!Ŵ̰ѻ,)m󿮥>c{%~
oGrFkW{/?6XHn_P	b+YSq+ObRnWtIb)BX3jr,ŴVQgʥǰTvdQ91TZ. s'0#5aUgs3s7!h>fu(bJZ\Ot[Kv]).˨&'ߍ0G2xcdBm8&4J?df? 5
xy ɀ'SdhiD;/y/S'!.uK)1([`mike*~ȶ,pP1}Yj ^"ͤAoΠ=@H![wX	׳}qf}$P>~f_䧵5+iP4<q%jnT6;RLlmׅ)Mr
ZWuVSە]i=Cu,"[{Aʚ/Ї;>N"^ , dH9H&O7#CoVsJL$ 8o191ZnJoI~LNeg7Z-U:{Os"

lvJJ-B~Izu 
4I%m Ry}_b|vzlо]8 2c
nQTfbp0\r┥zhxΖ7f51!vMIg!:
%`Ixlv#+~xos{kSz;9O(+AQeL*[p$A/9k/u>2F鐬>O
q>>OpAJeW
Bͽ_ш2#DǍfvD֞OH!nҝkY']Чˆ"3߮qEJ={ݸQSrY.<Mix{f(U~MG	)j=oncdýVLh+I@s[HƣvQ~,ir$ӧq͂5$۾8⋈p#9YdC*M Igj퍷80-cg~Oi[*ƫSeDZ\W``nNK=WKIQbA(jwF2DsۑՖRw r+oVNT¼Jk'nz2pFaDIx
yב+|O
HsF
#Sp?{K
^!?8=?1p!WC樘UDMtJ
r?hύŷM̀Dʯu`1%ònrtX
^#P#=HӘUGhy[Fį7?Oo(K\q|A	Jd%c]RTPzV&+pc`CmKԀ. 2ö֖ADni1-й
W|ox#ܓ;!&OͣI(<n)$ vp>rW:})qz
 !ПN
hM[-SqyzbUWM|\ 3a8Y^	tӔY~C|sm+NPSUnNND\<k"B;M$TfŲwwӔh[jFl'gN@zk[ɗ%b>tۄXTK!Xq{9
Ov:@zwoϿyc.nfV6Ji^~J"9^PVBKT"y/0-&H
Z041lab+sT$SOChŋմ@6,ECK %qqXi^KֵKKjPba(-|~\%N$7] l|uQcn%*֓8V?{ ?^o@=U\ֺY q
#dQs01?D]tY$u:"l`]9nXufSqD3!FiWxɬRk<
(p-slx+Yr>80b0;4p4R ]"l^Ld[04]z|wgB"մo$"UΔv'y&2懫Del|ڱ%{AKhN%L_ɵ:	d	zDŊX7$>]dIv)_mA 2
&c0;.rfrE(~1Ȟ)rp?RxmI훁`i\rrFמFw|˫
2^Դ`S2QUԺSbko Xu
G	)S`M}"YA"T&Jg/YNYH+g>H kλW6gEH?s%_~{g7(L6X?zƶ|yHvoQ.KJLmw} фutS2:)=ŀeH*)c]SP/&ô/2pXwI/i.#z"Eʷ$x;ϲy'~
$>i!1~<l	m;IQ^l`>D&bT%'"( 4􆡫#w[M#%DuΆIogQ0,_P掞;2Sr?_EߘP+4DFQXZv#4XȔ%ʁH-ׄi9I16=-X,ј
'aT$"'
##\kELp]Cr><sl$F&i=LUKwr˩=!n*ZiA_TC-l<IrsLH!dF{D*L.pHFSkڍu;E]WMɟ^d	pW"4qFcHB
YAc4;" ĻnZ዆ʠu-lÑvF)gtjR\^R +{PGپ6=*YJH="Upgl`48Ժ~W1MXs%[ٔDم;?JP8~v_8("V]~;|t8;]S$kv1Rŕ(1I~ڙJBv˔&}*o7]zbV|s(0
"AFRf]?@@0gLl	6PhDܶR3ox{D<$A*l=×ķ`kP`CI#i
UJc?IZH97きNP`{
ئ.W'h.60፭)Kƀ%5t:JDjqou;,"ư)Ofws&To&^߫Ʌ[$V~s6we?VoV/u8sX`LW
16Dm%KPlVa}_zT̴ R5%q<y$VZyënzBˎ^}M&	9\'T}&}YԦp.h"" su`^eF9d##KUL
QG",qRح`&)H1q&;-f.ܢ9dQLδa7[K{,wp.u<XAܓOr')0	rXu"11w@Gf{-WT$Op1uL`3	1?v@Wtlx^03=Fu?EA5i9á۲lߜ\̬`W0P%$h횄tguL?'}	M]s?;?laɺ$ĦXb=v#co:[g!l"ɠ%/Fޢ:k^d B82Ed,U0}T*/r[6XC#H(XQKCu_3H"fnhB9sG&ȳ4j ?X&j"F&_4Aar||/fjz^BnZMjA.uڒ3Q`M$ߕ9m
kbb/kN~Z&줰yh%bJ]8~lф'kEpjt-Be+*

(Kz}45,b:0gwϰѥ&w[VU\> 7 ouUc[oλ0HվAZ ud4AVi?x`s<Fqԯ#t`8<tx3mq3SȦD3	QlF ~bkPQZ
_+Ȳe.\dB(IPax.lonr	,u >#9{}kAMLxDEJ	;cξJ)Oba=m? u6VPÃyݐQKpzɇ Go!ms#jzL!O!>bD8 Jo|ㆱj
N3=1)5]I UO`Ԝ?䲰MtMln{y-ݡ"A3??~B!,9ұ&7n)n>ݘʛ vyӐ\ˊ Iؒ	>&R뭭ݬ(f|x}<sn)ZT0,È
U҂̄ZC3|g#_yP}(̼P7i\<!3Q_[uq=a]K9OnRbZ/n_/	u3D4Ykǚxvst)0*R 96>?7
N.s-3L(:&V'bvP0"ʻѰeH&ʏY(yw҂
ȝ-eo s9siRoDD-ϞEl5:ˉ6%CC,U/\frw.5_ .f0Xij\nWlwoRM B>Ĺ;]xvϬ	䇥'a
Du(5/X%MuUt
;6W۳Ƿ$y	F<`O1Һl2ON$J

hmh`-:%`sϲl
h?8\ze<)B3J@[PQ1$NgCkLi} c5V瞰!ivſ(C88#rs}Y3$
=Xݩi?ws{8&}Y[
}Tw4& Oݽ3Ό1V#;#jlr{NΌfԈ 8~4A.cv*әyGNV<AV]eφ١oVIrlǊ|G@]Wt1xVݹ?iK8ʈ|J5˃F7n}}IgIaɑO$Zt5G_\L?XZK$]xG<-<wn96QجXcRq`apl"cGRߊpV<
Ay$ʝ.ӛ3BL_+7=Id7y$֭M7ȋ'zYcW>%F}:UQ/7V4ތ0OFc-sLdj~IAHW~d$\Rv)B($L	Я?e.ۃٟm
)hܒK2+L}ȀioYUUٮMg|Mj;l10_%r/fɶ=\as!WE
{5~BEfxF%rK4CN;mrUwLr6_M
є heBBlӅZsa<0\_ݒ1R_"#+KCDpg E$t<4xnkږ
}8n&UA:;D#`?vlՄBOxBMr\J"##[Г5/kl6t4Ld $[B#P|GF2||Tuƕ/4벛)A\)aC+D06Zi0\ojPs&jK]]hqR/Xwz=!Zr08,&zё,f~I0o;|wui<ޜ=B ;Ţ>ݿ>u*J 4V[H	ȩB3X|n3}T_۬vY3+`MŇ6v^m/f{dylЉghgS&	e Xhٌ(N:zFFgwHG1>Up^@8W,Re̒+\:l)@qFc歌	fViD$Ǜ=Ճ[=,7_iފLl&Qr=sSos)~Es";Xs,7lC@nk\ࡕ,]J|BܺĨj(eyzk3xE'%7l`{5Gn!ΉXE~,O#pRa)T'{?IDR/#I321>|
9#o
%$gkoPzD$_5oH}]i )/<g@%= g#oF
#Tˏ1p/]:b_ola/#YJpxa]aegK>v4)i6)6Gw(뉌q=%me؋So	5HƉZ]`S^B=(D`Y1n&q2ABٚ!ur5~V6-$A\kG7:={ +mg&qfozV$[&	 _CnI%S'Ța]~` WҞ$XN ZD@%7'ؾ$΄d*Rw+Tޱ
_=)TKO*tCO;l-ع}(=ꄌ̃

qE|Y.&htqdc}"&D'l(5=u:b/ceۍ
,uFP}_aȬ* EKCqu)@YtPδmɟ{niIJ+|ǢoL$3+\/kاlK=Q۶@ƦK98mXE-%8#}>v
	!4tĺvpm^~r40Ō_ԧAx?=g Um\΅iB?vp%
p~]cqB/`d*bPY iv&K?0G;4<62d)+ k! C
J'3V<E!8A6-3|&|ހ3S	K^duRVo=KkI5&lZbB*mʎXIXѻ"frͼH\;r%WͲ,yN;`흆!.R"P"C
<jT쉍
"8%1Ä/3hʺ<p5͈osX11&xevNW[<X<`
͛o>pJ4Km7\v p#ΆX
anIʓT	\h\scN?'Ѝ_铤ApBFEf!;-^oVvtIqf }$bȍsy3C *+$9_ Q'rbXjDL j =˔J!vLuJKRf7D9'mGKfT9w['$exL2pkDLhZDOqòv'~Pe&U3Xψ $#`Sw*Z5/ݪwdڬ}UA'vտd}8<aF<ae_ 
◔'	)V0TCBFop3V\49x
k$s
.ZĐ75R_!A*ӊ 6N gFlg %	QyfCiY#S<wFj&QcƘbw
2>.w,Ew곅K.* Ibq{j{-O3	\Fm *15=]7ri\0Vsm:Ap{gwI|;6<S)PѾ_a 7 rij0b7a));άAgeCG@ǰzSۅ*Bd7lb $Ӿg#K5 1 ױD?PY*ۚ%'jT/jq!*nX%J0j^1sRM־d#w6.p)QZՔ߲Pt<']|0sE""+R-MMH^
Yqtqݬz@O="ZMv],M$E!I9i۷)J3!Da&/ۈjj8_c?4ǖMO\|4E0|tX)XWn$_.w1D-%<z;WA9TcV2ǋFO
ڦ{۸cN_I$@jH2AKMLfAA9ҽ1<PWTC!4 =t4b4-z12Zkn詙@
P'TmS<tMZ}7ya^H"?\Z3+Pwij1Qkcoy]Lt:Y*f,׸3K/9
vnMHh^ȧ$	d)Wy]q#徟A+0zj;fLUX)S`nU$vrrO{YPm[>9
ŌM.{	F2%^0v2wn`tY~3_Ux^<FofKj%)|_&}X#E;@.^ NQ	B}`Ӷ3^Fo^bP\Ƀ@a"Vڀ%GHGR5O(PGO^lLYe0rZD
$ow2C4/|nxIQ`U\ߟ=MᓜUE
}@ͥv<C(Tx<% ~p}L}A@K֒|15OYo{Iw3s<%7A`ad	m,Î]}.j.JQ~Mȴ,ว_LUnoQhwWX/ީΰ8
K4eXNsc:t(ュu Dc*ǃ7!V|3K^i^ō_k>GdI3Ꞿ |q[w\FC#&[ԧR&z¡cG'i&cO70@q3ofSweA<)rĬZS({TeDYT:&ށrT,Ar,$w,:;:^Y+L 셑YYģZ0F-i|z9]ݣ[	h;&Efm)$oj334t}AU3׮b~;h4x<C4c,*.?;kp2qj
@L*xpC.մQ0
nk$(A] 挋5+w
6ThtE$0qh4"-ʷx+x
6ò+ǲnɔЩ?9^~
jUJL,锺פnKTJ g>y7LZSh 7`1!sF<H81/%{
X'~{En9/Nھ#tJcZ,XMtǶ8z-\e:./DK[))7/Âm;HVs>
 Tul⍬*8f^gn}\
h~cwZyżLE#$7ىҏq+<vVV+jJ*ڂel>KBkI*XVF*bE'o_R
>7(ƕ'RDTw{}
-&*`f!}-t} '2оE;46))6XF@!?TVL	%9<̕ڟT57>$5#м91dRS
IxbM4Y%d8^I
rR?jGIb+]a4Vq(vO7ٙ8.
_|OT2z(HZcxbg:JO4y:{p!7K3y<V=pArɾ,t"$eER%|&RGzc-O7
s5@kgjeuСkA@F<q,xɾFĜijeĪ8%x!HJ!}1"!*GUʄE$7 Tj1[fhDaˎ௝
e)mCË2Y Cd0T&aїj773yŘMRo)Cp|`
!As`ōg'{Aөdai@]ⰚG'
@k΁Ցr <O09bY7Am Q=|WzN;s7(7^.JQC6*l,Qo1;k/|/V1C s;)h
pڞ0Pݩ)cvR
02Ny\Np "Zvt"ƭ=q)4ktI*$- @xD8v
c0\e#밝s$"Ǥľrq022}`SEdٔ
b!xū3M!fG*Df@InGkf?i.l! "5XLBcRkK	ȝl/W2Osm	ChPuƛ)閨p|ȏps#5>, bL/rTDF7y$5T1"$rr%/ʁ_!Z6ы8.i^kO^RE۝9޷)kHk2YׅQIzMJE~z!Y[
<~Ā>$:U%R2,j0!h	Sj6Q0vm-DA97CL@!SƠplݭJwH~ uDCL)'	*OI_YUlxwF{hLi0s5R(S9<'b'Pxun$49.@E ^7*F3L88(A[nV"AˢQQ0p,0kl.+./$,p.^8JVQ.aS!V]3,ug&re.]Һₘ6.Н]o?R	==$U@G0:jHϸܴ=JeD
&R~@`4Qr ~)X.aN-*z./<-;*jSbi>F?ko[`%WH\\ XT
ez@oH ΚƫO$
_Lʳ\m4lF0_#m;$g?Q{
u
Em5WfL-nx:M!9C\/L%iX	3Qol,黉U0{_qktpX=)k3uQRZb^͵MLXl-	V@=Äٌ@*g|Trᨂ鋘-,YKI<sIm~"fPNcPS#Ɲmt5dSCpP˥Կ<]:t@S(ݛm-k4*~=V@[v
e<Xׅ#y՟-,ТS@M4n[>m{$'6lmu `)ƢxnsFƷa6Φ@i0a%gtcOzA$3|$G}$[B|vQX.م`XVf?b`s"I4Iu.ZPM$9!J^k&ɈoB ~v*,XR*,{2)<f!{cGoOG<p5K뱔c{?zLM7Leb>ZC3S 9v2[uԋQWٱ}{{SǷⱭ8H=DQ1gZvjΏ@hiRMxPZJqSZkA%U*m
#uAK&r=[-
4DohwBsFHBaEDir.P#qJ±MWG,f11&=ѥcS J>x|S`FJWƣ#ng8'ȕD5=6gy_ҢN8-]^;K
yF2h}1T/bdS?LGUapPN,e1($*
W6S[H%ne&0MD8U$2Յ4}!ocVֻ+Ź91ID6I;1]oJB]9lL	pGܹ~`&NvCbjs׉d
FŅ| %.j&?~Bapk,I~{Rɲ4ڵհPyR#VD&tε	):85`{,%qwHa|.n+B$&uB1?T";
{nPlFWQHƨe	EnE">
cPߨSWt#Yf>:6cB+ECZDtva% ul+v ^>:Qt5!\U
ƃ7Y&ӎМ\eE
=85|>90*}Xʀ:?"fRhSa-_=\@=UuB͕R
[Eh7f[jҮ u_sOJLWfءBZ޷c,Cl0MM%84a}Rb.(Pꦰƻ©o7-l;HIi,$,	y'1ちp>FpP 3<2ѢQ)>Y-뛎奷pVdSi.|gIVp
KN&a1UdRzn<Yʉŝh1ۜB
#ֽOͤW#*Bw<W?QdGV알P({d'/dD;d
̲3yrtcϽКkz"na*+8_'cn|N|ި3MUU2ue/DZMRF*.(ߛL{L(<Rc!Tgη_<Z͑*Ú<BShkJ#B攪۾Xl#T|4z#$z9:
{,^`H,ZWzhA=As!sՊSwnߴacjlFÆh̉ƶmۍ'133~97gճ#_} P%!aS4.^à%Vƌ/<?pmM(R0ՁÛ\xQCʗkwt8ھ.8<}V *b1*A@KU!5|wߡ	Nr]>R?dGBj =ʭW8gVYy$}s@mWF6	|Irǉ&=k2
#Me@)aL7揨47j':'W}dMÙϖ1pP`[z}ϡgfGyR;y^3iź񊄠qFh	&rDQ:Wp#'BZ-(9VDYg7H[z峺ܕ.hF[1>|YvyI^:}G<,ܣvt	n'7/Xc=R9*RK`sy&FbG7;P'kyxt?We*cڤ #5,
t@%c43}ɊímҚc# H0Sh;
_WS
57BZ 	/%N֠ygj$"W[ŲAF"n2To슨OexGx<%rN{O̶*»Kf5-'X:礞;1OS%CY5Ar\i;E-rck/'vo.bb
%I
dLowFgBN4u6ϑfӷ%.wd[P1la,<ws!l F;95T PTx?sbavc4RLBaNW/7g"[[e0s$ߑy}| N^gAaVe
`?A#=1eLˣ%
:e[Ol ?ǐd 56<<:>t@Wb̏Z]v~KY߳2\D7mP5~ό"tO6iNE=B!
Jb쨅ZP/:* 4nz>dM6K( L3/V
	YjFom3XhP@NQ?s]t	A`Ҧ<6	06\1N|8TгPhv|7xGnE'`?%E⊞' j)Nam!c[nxh&W!NBinS`x!`?<+y!	Gvl4NŅ>gHbX/L'&)6]
:(3b[7O^;ƲD'Š.lʈtq9u}T3Ĩ8G׊=-;.Lʤ>7xNW}Lgۘ&ͬ
@;E˫nMe5+	9'bϝ~9DnnjI֕mCxo1[s/E[Gqnt[?H<pZS|-Wٵ*jzjPA1|h$|Rs$KpT&8*}~&5qe8oW91Bx{ :9TV*BhaF:NȩyW?#3}{9̀Ywo'|/}RCp!ºTIBcfMdn*o?ZB^-sY39dٴI=l'0>EhSY:Eoӆc]j
]lHL!MN=NANq~Ycn=eV,oVic|rP{_Z0w=ęƠE%C:U#M4vv'S7"ң޹V96ԛ5yuqik߃7#Жw~t:
xz|r"?<1-U|Zq,wueemR	E?&bH~	w} k	dmHj+,^Ľ
}R.pZߓF*3
CtΊ56A|kK۰hT5hnBzdoU^K?D>Rq?,zɎ{f,2Ѯ,u4~0h@=rs)ut\۳_Zub0R@87x!8ud=DjьtM?t	|/)*DN^3dP
שjkDNۍf
jg9_+fEQ/fKu쭺>\#K#|yI{QGIt.Տ3BWo }l5'?-7
{(ATxe8.R"Mzm7J6鮶yf}e#Fvb\JP'̵bv
$_]
UzaѰ4vܟsmڈ	27wl5Qѭqկƽ^MG/ǖ?ȀgՇk;\f_sIiS?$[t]x"cz(6u2LNwF݌6l~zO6i=,
o)G3&ׇY>+8HP89{_ ԏc=N+[J>$؝HuRY<Ҍc	qUV~%xLUiC7O-w>{qj	Fy߳Y\ H|eDzyL 
h|[͝`wyd|`b)0Dˀ(d^,e	G6]u(|\~ 1
${;ߪIBB5=|duyVGSg
Җs׿)1+!:V%o;4ʍ#`k{TgɊ~Uo1(ltcs-=V\5l&򧛣;_
V 1gҿ )'4G'
7P7ϱacU#D)xr:
ɕm#VB_ΰsA֟~O#&3T;Ϻ×F+zOV\?>M
y˟wqZ^SRUxK@T"vnl3)j;xVh̅Uy3&d!ra33\@u+ Նun{ze
ʹ;_?~<!v/fZhFIVP@OHۇ,b'#ϒ0q!#;581ؕ@QTV<YO .
2As@[w,[\|knVaõdip?
DV<՝q2|/-h_UxҴ|h+2
ռ58&jy x(c}1G?ɘ1CeC7
sV5p=ĵ0z$h<R)vHp=AhʀpӰ~Wx 2󺀍jfE	Ibr}˕Il_p/%E1me=٘jzwz2~ug/gV?f0X<|{"T5R_b5
]JW|qx2kA(5U$4/*vc(=!x$UՄ^@Te)u>Bp lMzi#H:ס<Аvs7~.Ng<0Lp}d)<N&4Fdt
!i9}-Y
(}jxmTc.ltQ03i""S$4*+f"J{-plewO;^}	xT	z}xa Ѣ
5u\2(iAA
NZߵuE{ujf`*l}fi#ͩH	?x6P_ՓlL)jwyNkVbWa	QH`Ek:$f8wk[Fwo#
7f{'CRfGUֵ}=4<jJU
EHl vikM'ps)RYtLf)lt,Pց-C7dFͯRzMu>%́wQ*c#IQ9H(7.^$G]<
>TWEy5=>j<ۇ]jii{U"K(7@Jw)F3W 5a-tW)sa4ltFpkEJZ5O茍vnXw
eעwmJ(&n-cs(P!XkIdj+07u$owpQϸN$ZT	VbxU],apƈ-٣k򎱣>䷔W+_f`XyAMZlM/u=0=(BE@FF=*J+WWQLlsM,F*O3c ?[MőBCe2 ڻgf[B{K[{si/;%(1#3k>uJȩR-ՑDf\b:'N.+
҃fN_3"MD	NVMxsFvRLs',Rc<EwlȿZy.' &?5%C㻋Aftz2Tw 5
-@{pm
bv/|ޔNJh(!;#jQ&0"ŗ7:ۍwZ1 },cȋVZ1'53^-%sFql9vfWа&)8.2-8,=ǡ1$fRJTx>s<={B
u{Hαc[j7nMo#Rs?͆	8xuNآ鶋RUi,XtVgM<`eTMܶ#6_Fbm[
[[OoM/`jq6}ӹC4`3UNkpkEk8ɜ,&Z)f[9Ge.EF@CSp޲ƿ<`X0j,R$j$LY9Hl|:N" eί["-}	%Vis#{
(V+|s7G؈~Tk$
b|1M/b>EIe?#/[aߺ]kr^LY$8j;lVޢy5O
u8S!0D%ÿ}
/-idDqkos{!BY:Jz0eu&8	V%ea]KI0>8]N]G"V;P('I%o>A^7Z"{*N5vXW.jA!'+2G?1y"6K͘obm>ƾPrbW<Q7>ٔ\WI,*cQ|=m
1^ 3?bT,j$?Vl7r

q';3pPj{EYs$PyKCm]pT~$q$A.L6 z6|=͇Nix>tJ,I<
E5-N#(ȭ/dun}?۶
&3SJȣCg.;Ɯz!2!
_dUo֚;,G%[cVl%ƼW
A+AW?e23Ūsqu{?I«̹?C6q4^}PVS2Ѩΐ8:aP*_e㶠>P=o0	v5we't;>Ǧ)VLГUxI (b	hS!O?W7ؖO(|NہI(zMA"$|܏|&.ܾJ:hhfLt{.|1OR9POI4 i484$h`9SOm<ۮW[<,	vW!Dy6{,z7}58faLIrd%1r׉ǃ}Qq'e}?3G7wrH,PJq;۱5`<:Dv1;\26иaC}@DY#Տ8%a}tBu[d;5fMȍ.j+7GQ4SKE́v[CA40}kt tޚ٘f:ӅuDrWp\2{m>WL
pd}6֩y<\\P㶪}_*#_@%|wZ
Z+`KiCrt*m>|BEOrYy>d!*.l
 SN+#uRI)rshHvD\AZ'$6=Nx+)j>ܪ5ϹnfG¤ܦDvZM4#֧o-L+:jEGEMh <Sɦ(.

ݢ}tzZ I;w!]BNFX
- Q^wu@"C%EO_RUɪƋ5H=^Wdݐ>D2Ow:F"	Ba6;+5vڪ(
.&AJ0WEY<+л
(ak 3e'Oq\ܯ_.F*% u~˶	~3$ZJpRt0<
) טh8g8+A#Y~ӎ4K-B^9<jV̩ /!*$|'07egLpe<7,<v{~wF{ϭ+9
Q\FpZL
|}2Nۛa1p$Q8OxTpcLsAUhQ;Wgp͐.t$osl|"?JQ?!ڙ>WNzeueE#jo].^)T_ crwzs$@O%Hܯ~e.
10+C^\w
 UWn	t}h4pIц1>78
WDTc'JOFsDKtK7Zi@v3uJ[n266+7Hl޶K#M
#`>?V#m,fWӨ691H愡8ěªŨ<+|N1_I84L`)/v('rGXfArр{Œo|	#TlH wB}`70r7bfDbo6mQIF,OuaL>qts;n
ZGv?~/U2߀
B+۫{OǝT 9(e+I^Fw8rv]QY;1VC?L@q6۞!x<I\T+Vh
6zp=/d eNUha>%Z;ˢ7ŝ^Eӆڶ|sNN@~M کXjWsgHU6H9vz*9,c#QmuUlԢ.?W\tOx1oZWieԋ>횘efǯ nm2x;[k̕cv@ TJk2o8$F +6J0WZfI*}@qf%]utКft);a<M(rȦExݟxh_++Y+ޞԐje8jjAIW	lB#k|WV)96V,[fL-9RL;@0$ak7	7lHv	#9z"Yì9<H(o#6Jꠤ:S2W	Gʖuדjڰs:s*vʖMң:^V#IL;PX8V%<@i6]dw7JeK9$UZn8;S}[:rJ^Mծܡ'*z:ٶB[e	H &
y[M]H|$S8{/Lb\%u63<c`OSx;ѴYLCWp{>3>+ ؎UБo;IT.kQl.eݘKd%$.?*/ˇ#Ԗ7A?ƍL=%e1s*){#;Cx6rt8nxMC{L/XtCF$#+V"NhC0iLNl]&Sf;#9Q3c!bf: :f]1\3zC/	FHcˆ\9hɀG]i}KN?%?0_z9"x)ϵ	(H*Wݛtr/CxgŦ [H䵶p<m9*ŧ'r$Tw6ymCM9DqQ9)do)L[>vF<ǹ˺uXYpm?^c</~?kPs'47v	Id}9u|Y 5}e"7lmx_ͤ!uL^X!p>
3%`ug@EU̐3;
EMUba	rm'[jkrOPC7P7w0Nޓoi-bbGX0J*]tsҿa+6t>ddEM<@WBö\]koSWD@Gʵ?'n
`B'^F"]" a2M>(B}=-KETôf&Zԥ>Yj`i`+-hM&<3vQ.իdG aBH<61e+*8-IیHN.X*!^ō)>"F4&*:]G"2wTF]UPx

quxaWgr9O(M1.UtWɫCD@jL=g#VVaD V3Jr0(R }\U-%Rڢ=G|$ToY]pe b-7؎>d$dբ^9_c6\z<%~>
7Yk:׷_Wڮj9tE6ϽG4^  R$`GXRGRpcE!C_ga>C=BBD}3H/K
d]Q8U. p(qډũUYړ9Ik9{kx"[^Y8F+x{?~q*
@%ekx`A$ćm1gK~
CyD.
.\HFu^s9Ļ}GHP1c
T4iְCDzaθD[Yt
MVL"һ/oRi^l/Nzsu8d[,͝V]b4 Ty;2xoX?lQ:hRZ9H2nd#[z䳘n&*hEx#;a<_Pgބǖł<o\䞥=[fK?f&FGM2ff=k4q2Lܶ<Oe 302ŎHXZm
[[a*YoPOd]F)ؘzs
dR;*C>3Ҍ,Viviٛk\0bK};|n2K<([7~սog˲ޮx3
*
[l|26s-j;p,Ldʎ"w[D ҅mYT69U[7NlJs8,s=73a#`]iL02Nlǰhq8MZ2@Y~/[:	)
% ̓DşLĻGN9CySYfIxOdA^as:%u9YwZ\ڮtY"QN$І{==>$nj|ohfLD'zq<,ĭF_B޶x5&2idOF?V2R#J>r"II]jfAy9n+%#D6R@o:7J/xj[vr91%&t,ŴrrWtl/B_|x>WA\+?D]v":!=*Xau|Y	~3tx1[}| 駤̇le#fY!d0>=6_U[%Y]`3ly,dBz'nW=3tPOJrݯ_seM54N^F{l>(rp3rXY0x\4;0Cq~}R]+NcuuBWj-4tO
4ȡl'yy%N>6&S>r˖*Mwy~y+w8>Y
ڡ.ʧ'c@C\
!k
!\
0kb?Ki
m(<|dRo:-}CI;ۣ"T5a6^_H\NvxEu)H7fEVg;;+Nqh0:21 Ih-4/#tQo:}a=X/x?fg<bFyKWUO|ƇS	R <pGGE&ezQQx0l*ٺPw" z$
b{%H|J^{@9rՉm8q`E/{`>V_|Fs#wlɳ?#)iuP6
NlԂ'~Ms]-GR
HXHYa@|RC4;EVc&O+s%!3On3תM3ލ4+_D$;vJ+p+Ģ-
l(:%wZn-!
B,2CR^zm3 4ON|AG1Qӊ㟩"sԡyO 
Ũ3ԕ(ϭa_Wơ=,aZ%'bF m 2gV
]֒|lݷoSV/6|[s5H`?K[NADx)o)i:}{tdY~v!KRieQ"uװ}he^(J~µ#hkKg1ص&m=&֕	5+KXdr$g<Hx|Ե
Wprgsa~:"IRΌ׆$;KL-:hsљyuG6I3L5ǅwä?Q]oG Sod]'?	{.U=/ #lV!d sRhN\uAyQ
yBYdBNaڿ6o-
1]0!QǤڟK0<,5"&:O BڶM
7pE<!h[F$gTŷqzrrg{S
<U,Z-H؝wVI]ETCAZn#ٽE/`aFJR<(Dn!&f#RT[oF*:g<Ϗ^,RQJ`'+恔 oxSwbmSx
Ls{Ԥ7>0ZFKI%`w](|gpM, 6uj6Ny$ʯGQ2?yo!*W@xdxk'hڀ(gndv94YO8[`ol<]ဇ 
֛=8m6U4'h[ⲉ>A
ϥ?{+97eK9Q  'NČu,8os,߹gBSF}MoYf螋5}.M9H'`hkEڏ'D%6Z:(1j2Ҥe)*,<&9O{TqhQT;di_jbpoP"syձ#ϳoH3焄|5/W"+wǾv,8\{-8B`;-ǉyrAeFxjxfmq8?v&ibٰoG;fJx&#>Oz>ӷ5qo!	iUIӘ	G^2bvw
GLuyFT4xzųK4:K͚q^c@)>?;QRv{f7ϕ=B.rP		_}À+\=oCZv	cr:Ma y	4@es#K߆F`%잇;ݳ/6)eʯYU][L9s=NNdJM,éK!vM)ʻHH'Jܸ<v$[Ղا>2,+mj"!X0
]
YT!"Vt*Yz}k&4[n
7_|\]fH;]r]z_tldت9݄6甿	%4R;ЖnhYفZu|WzT?@Wۭ6@QܯnRU쯟ݤAm4')Sܛ{%Ԗ9*~.:}[IGZy!,0ڹMFեE.ۺyXӈPVFwj	*œb<sYp*?emtH7d,o̲EZc|jEd6tA~P1D)NmQ]kCYQ}02F=3j+^Qg>oȷ.W(쐁ujSVzeJg[eK9K`UW/??NKt甐Awۥ\	E鷙dyTPGNږ	'&X⾶1,s0Dk;
!
+K%23bi{Ot 	% ^+*M'e^1Qցt//3p ?>7+֊zf&oёsP\4ZXbՏq+Ŧ:Mw[:D/*olt9ǅל-
!2o=wThlTYfQZ4dFi|ϝ		O
`B!,[3pVb-sB;"CL8lgx@5JH29\xs[U)q?^Z<4;Nﺤ &!@2$H]%B|Iin~bGa`M|uɺμ>"'Wj% HQ	9.=Л=L.'9a,oo`Ang)ۿUz\[ȵg8tm׾a?$aIÊG4gAHZҢ7aU (`(IoY{AaohRm-~]a[GL[];	EɧbuFM5}+Xނx웪V^cK&>U5:4넛O[K]w
N}F<EճJfHc`;*ѵg>4ڍk㻓a+5"ԥp`5/Ay~EFZs$ >
o-P>4d{eYq(S}aLe:ӫPIcOKܦ9(9Tbb}r[]4c.Ee`YH#c23_^ש 6ogC"=[w̵m7X=X&Ꮬ'+Z7=Yģo?tyEnfl,Lu:MIEV+
E˸gM]NaLI9ȀC&-e/Yⷮ't<M
0G0}I
 T/=׸w)*E-
.4ja[hLIE0?TB(3)]y"aJê^Og1Xq:J?})V[Z/E'XS7_3MGӋW^)vIlNSyhȤȇy׳2	}WE׷=]Iס紬cib\{P{Q~7Rޠ$Pn \j6.=`Qm){7r\{b{wխĸ;Pbȩ}3ש_3GG4yS$$MIm>eʪJ6kg 1_4TvBP8M:ȏ w&
}`sbk2wSY%1}szWҧifهd;)
=#n
??Ho@.ٯM4
4Ie& O iΉ|1"Uó2$$6eִDK,$-]ay,utNLnp̥lk`Uـ²GuHχߦ$+CTs)YsC+ӟOr?gsQ}
W)k]GV1^lVE_f.7Ghxm&*8k(R4ӐzNb;su*)X5.by8<k$ݗ*6	|{|U(mwͨ+H"Dr@@%Q?Aܖ\V^x#.E-jMݹinۑ~]>R^p>~Y2k;^Kk_ogDi	w5Ň_8}{B?OeַQ:;UT\hI?I|gۤ(Pegf@^{ȞjxWC!6,oſ+2<6'fſH+[:!,w`/ 5n!pߔ~\uD(:[CH*N9#hqtFBMzLжJomPt-V^ܐsΟj&j~!N~lyݷ/=zQ"
u][B˒k:5ܗ4h4*
#L1jPu
гIÞV[Pf!Nl#}W)iڰex}~@1ʟo3BBO)Nbh7fGBQZlaT&zcRͩ3C\JX1Q0
*z+hߎі/^$t#Wmn'1͸qqFm"|P_
u8ǳm{v[\͓͵e,[m۶;>S{	>*g+D\
t2v|;v̮7׳"9!͗A//w&'XEj<e1cOV--h_g*!|fu%vrc޻麉rZGrYW,#SƩAvԋa'^zB\<_t**C@K5[LRJ
YUPDNdt]	&/ȕERQ)-/,|[>/ܧwN.܇O6wki<3 t ^2(`r@hDꯋ@z rVka){DjS/7RP/\Xj<*0\Pg>2\	7=]0XԏٙG<=cncvk@.׮OϪSGb$d]$GX<8v]LqzJ`YRV.n=0Ls9!ouEdf)Nv}	<y(-GP[C%xU􉻞.	3$V7`<sg2u=þl)ڙSNѧTN3݁f/SYJٖ4[{@'U
J7
\tY:_4&#~c|@Ӭ9!Bf҄CJOE׏VVز69F̾Mh҃ӵ{IjE؜61!ns`zU;fC씎ƀM#ES~$|qUHåWM퀂JҊWԸWExt9x%H~yj-ɯ=o#CV~t;'mi+BȄcY}|bjx!ğ}BH##u?@~z*T.TϚVaop܉sfcTl(Y)9nCr|>܏dvLD/0x+},. &O}\fKTdIFIphn3v. <hEPLNlyjg&=
RǘD^bt #uD%G+$ɐ"ͅ0zo{'m_~x]v,]V+`ZZ\P4̴Ba5X%*isRmgf4%
aćSYaYBfSr֙0.37cvT<Չ2X
1(t'ĩIq$@^u7' Q⩲q4u򥏾2
i<t_Fd{c\W+!Q9N*^7m37&4C!8m2U(xAƋu3+sV=1]o3F~{đt`Ú#zA/RFu[ň#IXNmB qהGp6|7b
߇\ n:Qsx딏q?fG^X4䎕P]?󡝴Q~*	[WzT«YpcyZ("v+E?aO6Օ&n7ޔ䍓Ee!obSWX?K֬XD7mbǭsd<;J~+0B^(x:0+	c6F}DΜ,Ғ[F)"f_5V88fbuȝHI+U"|\MsAi}cJ$LDJ
2(W;#c4صM0/	}}./vW>wyCǣ:`jok2aYȣb A#)nIQVHBЪ`'
c0ܓj<9~CW,
[Z-Η:i-HuˇX9o҈i	ܨӲ_Y`Do_a!CҾ!"JiۃAGmv{
(]%oxPҫmHlϧbؤ Z˞ћ3oÊ܁)c紵R~G2Hd(UЁW@1k"v|D꽼*t.k-X%J*5on@{FxD<}\'JX^?^-ѕ3'4
mdEXƌmb.u #,Zs*CUC٩P.3zhq<>/=K R|ѿ+5Ƹap8yYnHښ:А	He!8js ">L
[唁+05;'Fldn缽2<Q_Tzj 3:T>Syv't׬%`KZ^i°eGh~&ʰ"W?Ho~8cޛ$OXt3%oe*fP,õ($	ǭU\BT/ݏؾに+a*h5lY4I[˅A Ra#b"Qo;"z[%އa~,(<!=x*PF;hPi:Fvx=@"
_(Z>ͼ{=Y3ͳF)HH|ne]By0 s1?wMaoؤ.DBQ{NnK|93P}5V
Cc/P5XoIeYP#xzpv;HEkuw?H{B4?L'	Tg Piʺ^cTc)§u#+i2s$C%g>f㑍)zdzJR<{T[1Lɜ:B~d·rbQ::g'J3EB$ԍ>?@CIe𽑟n!eZY5g6b#4K?\Y~
OE!ߋw6ƭRooHgpnYAevXO3ή߽׵Ψo>6-~ۻJM<#Mv,e\o&~g*ςsUy>@DWT3ىB.cbO&#wo8><'1UznTյe&a`k־qqd9-wi#oB/ #Q,#撚=9jNvlhlʃ}9.pNHG/ЀEN4uA&e:(Ke5|X;-גUGq))ni`IwiҾ׺zoc/o!٬%b;Ȥ6r2_: \
'	Y$Rn j^-doD*چ?L=K&̶^B}C,S6i!dOO7WS&NtMŧ3A<gl]̫ߵzZNxumt;bo.SbQ#,%-yW$A=ބ٩ډ.И~ 6[S&+qfNWhmo	ɛQkIFO0ju7liSK?oPldyNG@6+0A):A4/xd/$,f0p
0{|MByGS`#VйۣЧǯ`f&hW	
fϫ	+jXwW,52zrhQyVvO>*pwtcu.z%;b3z[R;I)'uj+:Ž`P9ax]tЅZ/0S':c\Np'ixƢS' 7.sЁMtb|ѹ	x'ܗ*GUZmi}bDo^@2k򫦧&BzilTEBytNrzb2'%;P)(ى[)V@zRV~7BQG*<INTjη_ڞ;ji6qJZȞ@0=N+y[Dɨ_Nj%_O)rIor tJ/G2W":H2M0@ŭ\%FӉE`l+dDXn^Qʼy15Rbه^^A=Lgfly56݅Ge7Xv6@0H0Eh*1ڇ%>o^;*3Sl,Ohչ72\~`@|hƊlk_i
NIƫܿcT|OvdMqǇ=Ehhc[>Ո!q~QE)1$M"M+-kCܝol^vGQ[_c]nx%]PhQ: !jZvyXF𦜳bⳝLWnؚ^&u˄ߘbA\Gh$&r.(@+="jR39W&JGp}
Ee#Pn"YtiR,S";&²["
νxXkh$Gk͹B<k_MņeUuw{9Ⱥg-%*-͒r#!g[2
%Ls|4L
6df&*C-XXiY$MKfw+~O$kDF\cS(w7[kq7jmJߤϿẢv8~m+'zP{2Wl`z_j
ЊwJz-H&u4jJ5! \V`Os-2;c-B\M|L`:W8B`2|R;;KއQ)z੢kᶈluն:PH0y;A|	׷PPQ#
iR
\@DJfAS|^
DtJoY怴X*p/z@!I f5R$퇆]DX^m$'̾heVsQy> c`/-6ܛ1$6+,dqN{vaLACj,ֺϜ8|1괲
4:nxt`yɯ?ՆopOF{JvXfY#MH`PHLwF6	u$Z127h)y\X} c8ڮ8Qi,hA" (QrûofHMcuz}`KM2Ahd^Nr¤2 Ǘ@:;1;Z6s]40C$i;(Ypф٘Bڐ>CU(y#%z_~6ऑicEXRҬTv/GFybݽ׮-#7W_\09Rw+%~	XU/_ ƀ# L
FFHVVZһJ9d?v@@Cqk7>\NE_z\L6Ʊq)kUjXR0FTxJyu,[ wT7կkm[(aQٽ;G,|UBtY͚h6IGup=1Wwy뺑=O׀SFڟ59C_	W7+bhKyCۋ{ZtqȎ.kn>gϯ/Iqt	+0f[=
mJuHl^,_櫽}EZ	ėzHm_tKKV.KQ>U6[_'T	p1>
m]m^(L>R~jGx\BD+bt1Sv:rɷ#VEHם:x<\)t33CymE
eN;;x59頜TWܐ8>LU[.ӆ45ZVF[
,mQ@n]~<^Z4\ajQ|mC)hIX%"$=}ֻu~,H'<)sK]5^#ZԢkٔ^fUF6JM"$HmXî b25c(9{~8G^/ s
'o/qک)\Oy'\;*-vv$OȸT[㴩
-_GB_VoxYjr	.^Qw48~/IR6L@/V)e7Jv0)Um?<0I?+
źw*ά
#FU^<#4<O߬2~HI,1%`}Ŀ7"K%"p5Mdfpr3?4'yx+d;S]ӻ@%>9^I\;4].Fb|֬/Z()7$*n"#\ːF'0]٬Cِ`EӍ ,6.ʊ楐w7Ռͣsk]?ݕWGY8ݜ|w&TF-:*SO hiY9x9OR̆%6ۙ0 hm8u"pZl-Ow[Ok~֗Ƿu-<>;CD11b%WBɯPQ-J1U W=p,[`'~2!{|o(FtY-d.8]$ bwFV4UgWCuf{siCǢOm)qbwP&k&Ӈ0Wn|<]n$ C\Q{QOD
&i]_Wh 
g7z!U;Hs/5"Yr/%B6-כɷv|Н_YW1U,79(}k.3KXT|m0sV	\KߟQcC0I|gho/uyUZէF0Ro/,DzťF* S_c'<GAx%6lJ垥!SZ\۫7H5OED?n%'e$T69^%7=4H	+Wy?;Wݖ"[Epu0z`KHȕju߶yL`mIXέ˝e;PX a]?gp{RU:)_tE2U5cjgw9[e@./6U	EvZ	&u,r}nRq]*%'FbCj=uaЦn_	C
ak'k˃"p,=:eG)vQ(a|ü%QǬQGɪ

%HD1*RHrc*:U;q{:
`u+E	`cL=G2f&ӯml{rdEϤ>!"CZ]hTG=淋GuSoK,meg%x:`ճ0TZm(;}atQUD~ϟ!ẀG}s.?]mumpN߽픎qÅED'ק	`PUވԦ~اy,#^rσM~AF$=LfBdr"(mqڽb̌[_qp_L߼?Oxs6Oqy5!OCS2X*y<P-KV}ڹzKcrDG8pg"FD`vIF*m$+ewJ%QvA [Uv	I[+)PJяg:3vi
-έ0vPy^@YX `mjM&2BœqfMM.&h	#io0_DS~]{ PeJkJ:sȓUg=U)ߴ&)R޳t7.Uȕct9gt$ʕCl	E6q(d$h2pE皧i
jT}<s$a0B:rKIjMu]8Eu	,FB:},݆Ow}	,Rik:	' \8!	_+ jvoz>(R><8L%F(J;|0Z)F	}\	HϩLdp)$Ԋ@L-OW:`H53ȯjdA{ӥ?jvU8oqcyj쫬{jv"aqMڛBrx|(/ƝB*R}SD84(MV{XALUPcǺK1$6dxbk)" ])>̪Z?;vwlEКt6ʊ^',lZaSUsvNJvRji`*EG+zv;_|w씇[mn൵0}}1U$=6=X4.ۧ_(-]loq q8t
GVF	]$KN"O`~)fz2mh;TMPM_ 懾5c2)wojY1+!
 %XKmt'/@W69"`MλDjD Sb.bhKҴ%7'_pE}
H  1G{LPosfEUf uR:n(Ј=_D
EGA 8S4]#8f[;ǉ^]6G#_QxSy*Q rs)G<8v<=#T;_sF%(܀g^2pHO5ߺ\'z
B{oL>eAlLH	ct;ݱ3E2h 
#SfVAg4ھH<bD@d_cVd}̺2~mphoz̭EEAFֿ-rƵn5QUʆ.'=\ 5A.veDJvGȶ[˴8 XhG^a
yΪziRcf8@ ~ 0MCN/f.uMaTn5U
S$n)T{_
;aAR9;)K?3|s@vB{v{ҷ$kuA	dyܷG7)s.!v;cyY(Mg%kD]?{+&
LὮ~)`L;Y
Ȍ_Rh(2͸sҊlo61qce+p%]Eҷ^lEQ]|ӕ<[`	+N葵^'6~xS]cQ>l0^޽ԦMc-h@0dhFLꞆu/:`*ev_*~0/E!<Ă"L+]8=uDkm߉Ax'E|zm7Hatlv}}L!ݎ@/2P#+bX4qz4ohGV⪺v9=hHl{8c3:UHxH;go8`4b(sHrLYe2*?Ms^Uh@\<iY̪l6&}%Tt$]Z06lcgsZ\x8
&mM"MY]K/{P՞poRCԂb>'! hlQkfYF7!ã﹄]1y
j\%=NJǞM?`B@_Y%ՈtQ\Z9Jbbup ?{܆ɮ*,2'	*$zK\f˒53XfW)D#ҢgZgk˿9.G51A}yۤ0fY/LjQj$%ϫ}"G:QU/M<{.:s=U@ L'h꧝CMO=U"|*z+	Όi߷	_0׾0-/Ry	
( ڄVqjY6CLe XUZ<Dyd/Ja}F$SwU DH4Ezy@.w<ײ(	LGMHh <w
Cğ1eJOPiVJ$TP"7B41[oWoJYǯ:Qƨ,tGOaOI~/e@Iaa^+U|**REÖrfr
4_1g{U[F o1˻b~#ǵ#J˂WGvwSQvdo*OU]?Foz>/9&@0>
U73ߢOiuױ-"իf	1prQR̚$(c%{6D}И+2'
4im֭c3RBdkنxQR淺Y|ĿJ#}~QamsMkKռδl%" {Z"g+k,ևb6
ז<QzbZCm"D!⚏e?R
YmлR' "'dϠ@8`ןݛSC.=yذVeT ܟ>z,7[oRK\D"z$RoN@5B)J
P<{Mn8%`u$6[]l  -sݐ&Ϋ6g 'a m𦿚uwr7?R`D2vs9AdB&:|14VxT:%N1TC~S[p~o$LRBt˘; KݢSFn/kCԕX=W,5pD_W?
nrG2 1o6pH~*rS8uui|T2R`Cw?ʡ?P4IVPdZSޢV|gPOm.6VhD'R!}l# Ix"rrJ"@߃}8"
&6ڣB_2ΟϨOA,)J4>ƅ^{sU>:h)a"t֎MoOi ]v2z|M'kI40k	ĳ3$.XXY,Fv1>}O?Ȇ@K8-Y?Țd6#Z
	A^38LbOBg_kz,L^+4+kƵD$]kRj4ݯ잽}fF$Z#-D=[x7`<?=&38hNGIE vi-rSmړrb&Gi4H
buH:ÚCɼT$Sb@{c{=r
-{'ͲAٙ'gZsS<BʃLFdrFL+pΌQ~&L.eS["ΨP&$/lۡQo8h*>6Of$^;>ybLPKa41l$r};;{/ZVRe>S/9 rfE$ilx|PЛTfOJAȒem>p,;D/{ 3CM3tkL=ERk}7:Y96+]Qy F9{~ ~B$\RkVr"L&2k<6[{rR&5F^Y/|7^<K2b̤}}a|]	GLnDΛyԇfmڅc^Z0b(Bn[s0W)bgps]=o#x?]su=|Fjhl7=9t}a[w`I;iϲZ'N{dz :6lڪ817['
D8m}	x+H<\DhY2)4-yIհ'HN%ҏd?^n@rXvQjD6DJcį
RMnb7eWǹ&ٺv-oYE/W|@{~I{}e/5!Ϛ1綠gݤtS/4JTUꠈ
s,^?F#b{8+㩪aU
|}^~.!|ZvW<HBDC-сeD
	wTV5v.ctׁSt~N`]~@Չ;nuĢ2Uwd(
bCV吝g}[q{Zx:6YF[SǼuF
n'MPeXD%g=M
%:^o͋s o
p[ 就 )K? WȥT{m^8vWA:>jÂ,wKOc`A/cYpRAd	s{#}[JY$݈w]8	
],6G&Eov
TL$I\>%L]f:j <_.ޝ.^.gl+Y=8Gh:R[m޸땰[@yFUtڒR9:Ս6dϚ(PX`
i#ъ
ryK61M(&.J
tH"}aExrD@ۚCV*\.1"M1]7dSwn#3B#-!3ܩ?W^f
]%e[X!.U篌'ݒukQ֦1^[y:X"ѪU-tA@gQpE<9<pp5uTo6{<fu[2qVcgZCvsv*;O:1.EX6"#܄Y>^W=go}{-O]A9kC>/ۂ|Z_=8IZIcMޝ85d|L"@vi{hYZ~Miy_x+<ISf}&iUޟN	rكuj
qŧMs4:bg`2D~b=rT	2>`JBکG`@C>h-;ΗhplY܊2btcX9/)<sp1pI^$uM[A[l8C<Sj!zp4'VAV>q7*E/I2H5+DuZ-;ʐ-h탳{c]@_7XkkC9eqa-	Q^9|SqF"
{DCj+ŒWX!=|΍/*UKOka9rzcKbn%WLW	oc;S0-HH|E쪺(-$ ~?KIV]z+?4wFrVow3&>jw{t{bDN **'Eh1E`Yj$1n4)n7awIn/U.2
K~x,^C
!5'	h0кȞjKP-o`ubݷ6=QjdImY1َ{_t~݁ß鍽9LSLSZ^>j]HZ:'j뾔p=$DsDgӅ1<FLogeQw/szrEW{PLHmauټ#DNk`pI,"fA9yQ୍4ǼC;kmXHdALť:-ܸnYE075J\1&DA*1}:;emQ5`W4,)l+
/S0a
 xcGHT<Y8_N}^rYV'o#sW[..N
炗xIĖY}STW[~,a*k("
n.[ӭki3Fo ps%ǧCǇX)}y9|h3@BnUbr-s&D1n:MrLdS@Ǘ)lߵZΫɑ}(=9"uwzL˲ZpוoFj=d(6/>Ye6qXw/gW
t{8yEb?[a6 v&q}GvBl/ZQ];]_T`l* teWJUV+#	\&TdZv")FM
]0␥&X&g'0Ԍ:{J5?iK-l3"lqExW|#`lg*k(r!<RWUG)06ZQFn~7KW;i@J2w鈓Vϟg@k?
>Ǽ#_}+n7ϗۢlm7MLOrRX |k]{2u|:GrtAZ-
ǞB>oP5x o3o^e;:ѯMb|]lLX[^KW?Npfj0FAf_Tr%.pfS4np,rrha&#&Pf5'u crA|_#w1s7`3t͢!n']wLMe-sA_\4ܬB1YxHt*w%OL'0Ju4am
uے\d'@Cn*>"~-uqTaﹸ8#Tbҏup'<
uq\4,]lb 4OzzVZbфjEsE5Ldֆا"1l:XQׅNpC+&ތ0l&pNP+DR?Outc[P%9*Vr廉U Niڋ	g)4K[M1߂/U'CFڰ/-$FlXdxmvQgql>*$K[fh$ǖR{x`+GUH^H}fh#~RUGyF8-coZܨ|n3h Y+jfmϙBT@QϗL6;!DqnOs[<BRyk$F_Ap(a րb_xX洜#s5ƼU̣/Ap:$N@O=_9by#LF}*Dshw2@Ać8CW(slGT"e({`vA}ܚWrw,
	h9)u_tȄ  !'2
?cd1LM䊇LB#}rN9ܛ}W>,O,f3/;MZ2m&-3Pί:nt&fE%ZeAn2?JSZ,AVdӭN庍;̔þ8(}r-Cs^DˉdeW޻:2yfBH-a7[~%/ 5^>^JI7@`j`1*,ho);m
YW2
gsmtDͼeXA#]ѹ]ŝpf<YCWLPGj_glnї|r]}UkW1Bf2#ӒL#t	HN9C2mIgY`%AACzAb|tNkfze
d.qI`ʿh ZKz
R`y=5Bz9+<K%{݉z?ӌղ=y%xa
+❡ZCKlv-W^EvѨN"VVh|
+7Z],ָ28dg8*l*n
k}DG|WGO%FA=J@쁿3<g>\~@qέbh@Fc=t 4qy"zEX#q(1v0L2*؜}xe5∌z%3pd9b>_ԀO(<;,{vp&5}K(kh0}6ǰ [brns{W{^)ש~|7!:ߢ/,jLK[`Rͻy|]K4E*xNZztnh0Ft6ceOvm
c95vY;sx=uZU/VP!$I AJwPӎ;[($UuQ}+Ǳm8I°$y߯$wH珛Y4%7O+k-$D n".˳N'̈#m[w&d6Z0q_|]{Y
*Z;)YGm#ė1pj`U
)aSfp?Te	oU@
q嫲Y6^z!Kp' y 2i֑Θ}torMbjpf>n
IS)ΆM jفC:J	-Ν wlCyA
$CGe,AʮG	:lHymL/FcpqW]x[߄?9ק]YȨ:E%s+gb	Ħf~VգQi)-2 V0,cӮ3ބqnMqk_o%:xCj\IDT*Yπ32nT ?_t3_6E$0^%٧d*%<x$Ƿ|8V#>222LM˶{r6JDg1Ht=&7W{g$`&Pu㸠M8&ӗna[n-*Hz{i<=[|KӽB6=5ވ4:펨BL-EStσOTX&vu1@4Hޏ<,o'͑K&?XS/ʴB+՛%?D4bpVW};Ӣ\;,]5
35q0bi\7w]Qb?YD^99zz"-xW$^g
)>cE*j6326g%,L\!U&0RK`j?l3)򟝋iR/\Ub+EaKZ~,3TW$$/Nb).(\X$@ktb|[6[ˍnyKXv	J%Yw/GǂMЗ9uea%#WQO@%O0Ͻ#L{,G*Uq6?oޠrVuG|xh_:3Tw;DZ Y@!(bb-|^ֈTT{}S5VK1\KCxp*ܑlVYAy;t%pI|_kG~Aڋnǵ-lE1g"
m1(@!gl~lM4{, 
L^CΨhΠEq_	DJ'\gQ4h)5)<mX+{9ąǒnŏ#bG$⸜q Nn=T;,tђMZsFcȧi<Qv /TPKyC# " PK    A             9   org/bouncycastle/pqc/crypto/picnic/lowmcL3.bin.properties @        @  &F2Z&
Qv`3anJ05y^E6c/D%RCJ<0mdS)jD2IuM.U4k	dBb4Sc@T1dAE 	u[Wt)Ce#&4Q^
gx*Rime9*ZC^`lT:hA<8Z+],$0fOOq)3fqyXCYy,I??s֦&2iZy3+=WFsD?b*f-Nq{}4$.9c1j6ĔȻqU=e0BH{sJyph$%܈X}}~J+lӊz
wr
^(]vOʀ"&{V^xaw_	$1qs{`Hd\ P9h%p=&A6iP1x0%/c,x l#Ir`kIgnGC=\G&f2yE:*ϓE<֚Y?{Z>)뱛(	OzU
*|A'AT40gqAv@f-UPD.ߙAJ}W]i.)<J?4yŽ]M$H;MT]\NhIk/;Mሞ!5SjiB˝H!r~ŀ[6w"؀ n %j)H}ub!l@?1oP.(ZD,ko!@d:9@kwp{S+P1+qjk^w2<R5)ZXhb~`(b'Χ+N9$@[L~'aj:VBWl]VW=9=yXbO:`kMj*J&G4Tk~N!H6 ӧد\JþCk2`IݏdҿJaGO٧hV10w_ ?
ADa0دDlLNMWFښqA(<>ԅ Fan{'@9oH5+Ԭ
A1gxs].G;{^Uw;d8iqy5Y_DJE^N<@ {d5;į \ڝK"N4QHgTh
t5vFB6z\L{dW9x
'@*b\a-8+Km=l$D*r\I%=]Gn:htW^}jUqFJ$.YA^'',2B\9]*Ŷ̺F!ՃĮSjXJXL,-@vnÊHR՞pW/
Pԟ<8iˈZ=7'N.R.Y g;jKvW=A?<X`_!E)eE|ʤ`'Z_!3
]T^,']q
t/C}>́}[@^<` hefز{.WZKx+ߛ
J]ݸ7R`z9R6C=$rK4J=\<$M5[
E
o-kg.]g>Q& E%K7K  U@oY"9a\^X[܈HW	b+tm
;r^'`
6WtJyC
A-7wB,E"ڥ%㽾v.v+30PA]BK'k-maq@
un<pSWS!<Z\)O	OMVϫ?`mM

910}6VQ{UR~KHQpUy&"z%P>ʨg`8jZaFL`$fx	3%Ӡ%'E~PfWgKrRa^9U.TZ= Ө$vXS5ِҳus(3.O=U1l;z )|èZcWu(h}"m`x{YpL(BR wcbkɁ^
yfJsCf5je?`$x%'Xݬ_eǜd\P&UFf^jVa`G}FEaqכS$>k?EBc7M
˟qEhnK^592xGp;*zW;ߧK;BS7J]`7ү5t󒄳&D[GhpTn,\+*ܤD/C9DYœ\ݙKr+m""q@DsLú;X;sG `bB3ņ@ wvyRmX9c]<GݖTt@Izow+sP%&go(r"fͫ֙{*@¹sjϨMOzY%ҭƇI04G-gM΅2'gvYp: B|LK2-V\~ȳFp6SZ]zcA$Jː̕}~=SYG3OfH3\5"e~B=8)Z
@-іQ8
SMr0u#KOH=1GRF[*K_65͚2jyu.=1ݼ~FnԨ@A^hXyHR%ڪ\exPU
uj^=c片o
.2v*-jGY1|؞uX'd' ~0A~Z3{mPKq}@= ?Un<ܷAV$Fpº*3nN[֒9	!QɖR=F{r(RBV>c!FMRhRO.gjZd$XCǔ^
)θǺ"٦1V9lt%SJ}Z	^Ps HD'} 6Se0d S]GNA/zP{qƻcW{&}*jTl׮%w*b0GgW=C4:$u/чX49~E<|iqUթ.4+dl='	~&:gz^ɱ苳~v~yҨ悏~hqqiwi1shw9S8O:ˠu-z"A~Ylz`{]Tzh};z=@ G'TnXfAK`fT,=Wh_e Ů8: n!|_Z,&os?LٱKi]L 0d讜*d	V,N:)^/9C9V 1?%&CvX:I4:s<ʸ	*DKbbJo.E=-mXb=;0#\Lj:$D`ܧ&<:ǣ; 2_SjFY&C淨ƫR>E "Rdߨ<9
66Ab8.̃Ԫ0in>j=Ol<A	I%?F@١Ǐ:K<(h|(⡞*9dƜAw&&	b4aDG+EsV<(#=J,]R*EGo1-1aQÔ
Ԥ$
>,UcՇeаĹ) 2Yw #+lƴ@Z°&"Q7{
Îͬ*|X=sBnY@GY3De28~hYպ,RU!XCi]/<`Y4Jc8
..P[ʮ߼x*[xV2>d%r.snn@}%꺧{ejֽ2u|\<=AL=?aƜ#`+GF<iJ]8<,ema[QD(<GClj nL0y"K
e]e$3ÿЉ&Qg[ T9iQpC_[3o9ZplC!Xپx}XL+kWR'
V r;m19:oׄ[l8J&P>8I3&,+2C?iY'4(VP ;&kޠE#O#=.dST"7 e%1[e:HS0w=[9۪6AO-bsyuVMR>G9Ҩ ])ŏ!]R{Ɔ)*_Tw#G1N0P;%f1gܔZr^C%1R"&5P}nakhr! 'vqP?Ĩg%{ ^@nH8܊v1RW[ci	Ɇ2ϕ1'k
uc;̷uX9"g	/"O<)f?$ix1uk(;׭9#!?tJ<7p!Q~wUTp4##ڏdg	S]
kN%q׮`)yRH}YI`?jP&OV2j[C$wY(m-GﭏDպ=~[lUFsfڛuO5$p_'uht0F3XM+X9ʄzѽU'aK^6.v'm5S,oYe=#x/O
<ZǋTp-OoqЭ 迵槵?	D^h"_ȲZ]mo#ᑔ8D%Ú#^"EZ6lky]"$ѰƕoIL3*\1^F@r֡ MxNsleGJb%W&i\"I, §»~.?'*_HB]E˾P  fR"Xr'ÙL̪>9
FOid'sΤc3$/3ĕf7sdo&SKu`7g}x_(+L$&Wj_6Dd
hƙ{lS^PV}ڧS=7a>7%-Un9ʦMG,r?4?z#bMs/.>k50LƠ#cP^mCY*&@
A!G1BJd_]PY5D11@v>] vw{PAn[ĞUF) `
ovR^^`oΠbؤ*	̙o^@o	""G穄0_ Zˬs
ys5s?]ʝ֥^f]n m?*gX``⦚n/H+{D_Rqja3%y˞7JG45AD\rB-/֦oZ? яeqиw6VSol
3M1D48ԀdW'sԆob5wԲ7SD,al4tr-hvHǠ"?SE޸beqF6:^욑_*r0RF.+Zb<1~p䁋C<,0$]H2k+W||agom~E	lF77#A«IX󲚀iXe`8lX9tttb=ԜU`Ԣ[?'öp[mRQ>ψ X%<#Ha>R ~}P'D'ٟL{?%fCX`K*+E-ޙf9͖]J4lFGCwcac@ZzzXpLɰ{W#!ҧ<M]$5"hWb|U?lVa>NCu8z2	!<
Zu%6ڵa]OʝRS,8
lL:Fz)	<)[ȓ:^dE|׵7ł_qIc-3N?Nn P\Z-PzgZ~!ǜ7"6CJ*jcm):wH04@24fy|x'N+_hP-^Lpl'
	+v;z"2Ap#)T\w{#S1eF]mL2I8BTpoA7u`-Y
ÃMkU=<&
 5d$Pm5:j X~&o~]b,ϊٚ8U
{=uɯ~I9Tmg8=&nGPt[eV<>
q.XυٍkXxe)/ն!2Wnna6kZ4NPU?PW*q=Ky&SȨ؜79bO*o`Xb8-jJ<V|LnÝFJP{7BoJcT.	lvPT 9W) /:F,W<=tËw!|7C $oMmU<ѪN2߯[N&6me3_ha'[e&K'DdaH	fSVPH2hSp֌[,t\{fj!
a24'Pe+mkʭjͻ?hC/ktWͻr5Tvtl\K	Yk!]ḵ"2OϓY[UH3E yy6)cC`ls;I4tDV	M7HMu`0c%Qy]sT:Iwӧ{x<OBI\n)8a=}{$}㍑/}%@M6:vܬa-JKܘ8sQ77Xk(l1xGH.ݓld!È)7A;|Z,U~!FML
6TY>NWt
Kf޴vT.?;*h__UvK$]cN7رw:@
5mT!U;/U
)vyVQP:!]@I#gP
ױ\ed ɂhWW*B:7^?M^1$*{8@?ؒ ;`L"%r6$ϐlk*U_ST	^S+~):7MU	Kn0o+}ug^cP}Sh}QZ7rfVg^,H1,#e4Ig,)nE5oYvZ CA
 2q/)`;^yH(s{Gx4scnj{b@Wp]W+Agx^
t:%bD53]x$]z]\E]1n۬X& f2w+ېUJq(ZW5V%,xH ک~*-,"]v)pLڦ_mZ@<VƬ8toz>B6	<d8с5x{KNlӫN@hl^6VZI>]VA,vVe
aЏدz *\
Xk,?4ֶWY~f2N@/bTtAPDWɱAslteˢѤdFf,=7b1Vmb$j}dH18]V~E 7\gUX2gIӐ~$:p<8rPpswOKPUإ0~&'4ar	=YkM[Ug*
`XoYS*{\AO e"uZaEx޾EzG젟aV{"Kt=$m:\ Ž/}hT/iOKW0B!n2qfGe*br|m
(qsjw}>]ijKuAN:㲸z7~ht1ePoK1@IgEpX_fwsE97~% l_JRlA8zq_ն7̷tgf%Bq[WF}<R">@7)fϭ*פ]"-3&Qwgkҷرnx}8s4=X-Co%?%:S2.7(|>G+X5=j=CbX}}agrY<7.xZ7tn!+)rhk0 -еրѩ+{}q-k?qLYҡ[B/;(=ޠi̧tf|KMnZ3 9PMt	)|77	7d sJr`ש
Jb=PpYP>k鸨TkEmC׌^.x\5	XHN	w~{5V5174Ml,ؘuVep ע&7BDY
w>'AMX׌SQ{7=B9Fsv5|Я(dP%n')D@S`c0sW_7` ;cl3ʐo^iSyPvfIUI~a߷~\cF4QY.kl /?=3>v%'Ii4GX˨PZ&L8FǊwֿX
'N'
?㗱2	!<.E?5}Uv6LTNܺ~k|u&?-0J,rG1>Mbն1p^y=i>$ C1b:|0ERf3:ۼacPGY{wm7cFz:(qpx촆THNaE0>Nfao%Y^_\zތW#ǘmWyxO>ԮCm}F ܪ}g*Eo&P| ҳ;=v=1j0$9J[!ˍfןˠ2H6$к)"
ڭ3a~z:83GM1`5
0iO骕ʑnn鐒34gJewI1c^ڑ
o?dU*`AA|P)yk"svI1sgWH5pH[HBT\Trf"^htՒ(3J{tj)\JgiJY`/V/ļz*ةRvs`ep_%{# a9X:ZJqȅOMsl`HF1dn?|Jo_VL^Yj^t ǒC?᪫H0mg&u4@1'}萸v琎&xV5/
z$3JZLuE^ RNES2>*.&RE9Ak1^5Q +Q	@Ӊ,+ҥ!'OuUAܚGlѩA4t0'x[9X
oüsDtf+f-$ak;YT2~]_s:DڴA(W~z@cÝEB6.
Jch..~rv<rvY OF|p X/Y! 6i|JQXV2[hs[ۤYTaxyqU?>c2F\tS$'c&Ǣ&0GZlj[b9fLsVw	;[%C ߯eueǋ [EǾ9;}w2dgŌR]J!0%
uWs\;*YLd2IKJ0۝NvsV\=WaxLuǫ*喞z,}{M7z;H?!*F,E97Faqg!NDSVc8X5
Ģ/oO:3㨩GM_eM:oe{I'<TC룅}NqqH}(&Уx9J%
ƤH,dv
ӟBJ}zt`]f8ї:<h9.?pAObަހr1j\SASdcpVsGJp"f{ȟ{G3녱=C!.dיV|	9|jEYū(oTLXXbR"KmI_{3zBCsۥi欃?8ۜ#třt)8O{fبA>F5y$;6r){\:pXdкG
'ujD%7lb&w6BW|"yR	5t$e*'f+(NEe򑵖
i$r-a]Z7o$7^:ɯ
yIiIƠUUxpz>^ȴLJn>m"a_~**U@"=~NKúA8N %DY5X<^{q
s!(c.l wkdid[-ln
}\18b]xD* Dy
rGmoAnwi!~TYAoʺ)_5b(xX4\]z+C2o~[9mXP;QD&A1/ VO!miNmX]> j?#e:ْ	}XCp ^| 3l_'gVls{m*٘\9C;me6
+3aqmLcoZ"^78&ya(,x):D
]'QaX^4xYO3lBDyW3yԍYQ(@(ߞv84p8H=eV͍~\*{fȒ.Q(FW#jͪ|rx2kr<+{8V)L@S0Vŵi@ύ1ܗ}eоz@*2`mLB&ԡZb#ݎ6c6B+lPuc%ks)Rshx`]B.XEa/6uQ03 :3	}n`}oE#g[U_R4
1)W7=OVܬYgt Do~bϬ$~$
|жLpq6Gr]\)a̜N1ZQ/36;n, m ,f<0S1N~<fZ3gOW2Ԓыzޟ|vl~.,Z`3 `z	+	 "9G©{zG0RvF`\5pqﴅm[(0ET`]S ;G%uZ[ѠV* D1G!Y-KgKz9u!97`> ?v WeB_m2"="P(b?I1;34k?1Bf:QF?V|zC"	m}#pKAW,+63~b\,	|+xb/ȀcRpx?4'hQlUs2X|`7+tL.t_Y;O2mF?aB4pԴQ'j|ؙlE??O8M
Y?MF@\cJP1Q}Mhysve&=[.( "A:lbzgLt}ʄ{ECR~b/j9-fFnHzKqc6A̕gHO(]LX)xV[cmv$_1
wΉu=ϮH ^[낦_-DEM̀wWn}YbmY
D$
< &ƳU²=&XA"5YBtzK2] !bO]oR!4zV9<7FSFZB
+*<{mF|
fϮY'],Ԃ'О
1̾6vN!X<mspkS^6%i6ȏLj59r<+ط[oX#O#-HS:>dw'ud9TڠS~FFC"JTm:~c6-f<eˍ^;qbضG©W
Vi-tҍ~QR&Y=̟tkfO[L;?ExEqPD:ߎiFm7(ITxQ
Mj^Y#Q^2%;C>◸e~isٰ|q=[ '\
RtaV΍7:E`UM)^Fگgbc>3揽_%S,֋54Ԥ!ZOc%f<'If|Xm5J0^g7AD_ζ89f`@~Q ou;\ N܉l@r"~o`G9dY+GA饩n++ilcwak[e$B	7'J'	ڰhl{Ip@5
*3qk!'jVF|$vE8Ew(YB/d1þE;HqK|c]>NeNFHUYކnb-5Ig-;L?L9>޵oqcjpF@;W՟I284EUf6&4K&W~>oO[r\s([ĩ[^˺)kx&*7ۮ_n?LĒUp
1G7ъ/_nb>^ ZФ^ G΂.1erjgBSh2|o
B>҆67-)[Ewk?({+}kll mp$B̦s~}UoQi o)kf	ftl n{N:lmd"FVw$˼S~j_#2
G#S
Iv] l09mtX̠L\%w\Eu?*-~=e1\)9*"{՚MC\m) 5{rZ)8 ȹtHy	lX8In=SMQ<pV4BFc1K?9
B0:omWhX͢_^`K2{Ɍ!6C!uQ`ад WG:Y"6vIƪK7.Eu ޱ{ol_"_;@FJu)|#+>{:YSBs
scL&<\˨3N}F.mܿUoRy'8Z{G5-_`OJ8TP1_YUs>Q}D.imuㆃcX
Y:eJ|E;շ
Glaq7ӅZS,~<0:rrWR`FFs}#ڀ*\ .NNl9F3b,K@>jU]NGu߫M7 Ū%TJD@kY:Ei'b;9xWdL;ԙ7\<u.XN?2T0,7*Ô)7fsgpvnl j^<	38
r;ۧmTs]uFH~E,Uk⩅p,^It5Prg0{=|Gi4M.D0ւc2{MnȚϕrrMgqD8P7}-['"?;Px]6XȁY67\ҸeL
_~D'6)GswY$$nnNyW0I7T\,@j?ns3tvgQ=֘	$WK*u#fx+)da3+M# /zv۔bS9>:}cB`}LK;>6Je%h S9'mDB¢f=)ӿ	֚wEAntRwcv@*0'_8
P*@>6eS*3kU*fђ
gYN9tX
b`k:+
HKuYGbl7cQIr8v7H`h >j(|pg$JF{!&EsXg5/>'
5,`v
loRK_#dK<O{PhLSl9֖[+`=CX{Qo!߃ӯFz&`fZ*3|(ZIb,I@1'#D#5eoWQAfvb˄"LX0tbJQJ>`YkR?}j}tŋx>7S4IgdU^'3J1RHZ-qGuo72;=HfFifZ @ZL]gqjM
t#iE)ߦ9VӶjSJ%/u}-ŧZp\r;<W9Nc(&j'UpTu
5ε؏ڷ)1_2GYyC_Lwg\ڑzV?CtCvb!O7$*C<@H	U|z8
xq>,W8cJ<3iwf<^ʷf46@ovG3XBI粙%h{[:Ҝ4$NҠkEJWڟT!oW^Ip+Iɲrt`e]ja6E%-AWwq"<	s}hi(PiОf{3r۸$9)cH[+$W<睌&$s!|c~\ ݚ\VRP!Ҵ,VVe~o<;stDwl@垫W9 +҃{R?
ta^5S\--LIp,t:'o~J#%JB ԥ.(RMBAH&mܲ\Ksxlhp}|B}`p ĠOibxf=K$!+Slci? /TQS?x3
Iˬh=7ejky(	}kar$RlÃ8}¸J _ghŔOT?s'MSd즈d<#s4Vƽ`#9jDXP>e	8n@\aui?o-F@94e~Ln117Q~cΐsTJe;s9ݛ,N%Ec=3``Hʃ޵{ga#*/p8imfe݈eMi!.s!%G(zNZ:׻z7DyNh$o#-qNɣQpPg$Y-9W\ 	@돃Dc 	@	ƒfH!l:L󲐱k,v˸A_"ͽ;Y{`c|ɛHJ^*OwnƂ;wZr:	ρY_ZXC>KwH`t5WN^\lz5~q&K6jV?rlb^$y]
aJ:Ł
Lծ<<'wؤO-rC 3O֓觻Oo$ڼ86D%<Cय़M^r]zrLHAV؀"nK_O{Ym=/g]e잏;Ou=iK&"Co6AMnVx½ρސDhlFPin>)j1wNZi'OazGmT&@J? ]@Cp%){ABNul6>U9* b@mLNxP6R})$b_7'n(ݚlBo p^G1U5rqA(Cmx&V뢽J(s`mPx+2(V6L1c{f{[TOיP|`.Td0ܑ
f/t<U_#ZKb]|upm9
}rKJ.IX@aIHY
;N7
#f}@2VRybz&I` Xpl-@`Or-M|xfk$Eze}r!DZ*	0t qFǗv"z%zɍTa:8ϟYvۄO	󬻝ÄIf!|/4cgT05||saL>zpRe**᯿Sj [z5[d +;&(A
y)Fom%Tܚhsqpc@A[fG*0֤~f	/)p7t0FR	F2xPꐢCxm:BT6>ҋЛqEpѵqcOG6aډTC='!yT.A{#`YC+1%◟!&`&`$/\򪦶Տc*Vex"SkʿNi԰)[3Rռ![v7np"rGU_{޽~7l/Do9!$s`8oLJX
/G;
9dPYh"ѬTIve3K\)_MEڤA]Z̲"ZH=vx	1%c@T=EkQC}R&ƛNag?7]R$gp"Ϡp*s/hGW fxC#aD5 O3kZoV-LN@kpN寮ݞ!G%Ջ^i/؂bnZ9N cDbٯYŜU94.w5h'W~tF*o4J
rȜx̒DQJ/BnC7DG|YVPzqQ?qe,2lg7@:J9Rm!`a"[^?+D[KwۈMwcb ai_߇؀N(gJʺ:ůg 闁Qu_p%˿<R,+)DWBr<
za?#x?\0MK^}cH_`ʮcu(
=*M=6<mw"1+a:yO*43捴AvZgU+v@!\^·%C,?fW@/zuRE> _Ͳ6}'	F E幽D۬BdT-]͹=#pL{ 2 *B})VFmf;Lhaȅ2xhC ghڸbrW3#` g&H`ѦhǇG dww]`9R@M6I0TQ̭*'pDF _T!Wش$v}x/Bg)2'
oJ6U
`rmhC/&T
%QWAg9mK-*!$8;~"r
b>xBdyI)ӄ׿ɲ{ry2z}o"/`K
	KthCʟj=16hV~ݼ%[^yzٔQ-U>g+<o\WP7ŷ6^I\H?h~&O8
a	8UZ!q`Ą?w)
a&l<x(5ZSo]%RǗɅB c8fbOmы?@8DnjS|QÎns͐<@E`XR⭑R%1ݘWi@

~~KfAҫaCi}S(%rRE(Hi䮈ir_S60ů" 0^l4ŧf;rf/?M,ϑJg
O
,3TuS
KȐy-,ZwH(7$B/ֲz6ޅUDrBD@etV]z ".%2~D}U6iʿx/ZbȄO*.jq>	x2sɥz*brC	!lUlZ.3{:&4 2XHʖ|j.-R'@յ塔
'H+W,j&%C;;QTRW= @"K^;FQTv_tVn;zpjS2z#0qW9`$roG"7Z3#}shVF:ńZ/^1 { `jUMa
V]ĆKό¶J^~zBROHj~&b`ʰ_?Іnq_L63d+{Z@\hPvPu/Qji*W/|śT.FEyx3 ܋/L7O}Yì/QLT6gEjk &7Wݦ@䘍>JouۆviѮ(&^T%|@cO7eG})fDdutrnBdMXMޛ@RB
	j)=_^ҞlLD2 BL{9mjz?4|  |%5\Q9n3b	YCS?5Ǟ<a!Gދ6r>qAH~2ii6s&uF8<CGUF	M%ӬXR<ivK OjkaB2ӺRWL$"Uon~T!Tvza+؅CK*S:kA	}QxeF0e
U+YPoiO_S WX݁c"fi~FVJȏNZwtbg.L@j$=e2'T/w[L#Hfu&D
Bzgx e!:f48q2ں:pTңuNs?mS \Ki|`sP~xp`1:(Qh =$YXU Xs"A 9h4߁}: {xѓJ@mz3jpB6[zuu.?Ԕ Ա9Y)lyH:EQެAi"	59ӺUW̫E_9|m_Nmݗ
(
%,^nXa</0Zh>f7DUY\oGZ+-r~[Z0Bqc狍9~H' + <$a4J)E찺T$[ Td,HcDmE	3!/gha)nλV}O@Tapm/y;aUu
#- uz+^Z}$@k&
F
JވGg(M\{,l]bIѧ`:hB$c,u%Grֺ n|N,ўz&S8M?JtwC[^;.MuL&:ܽHdsai`ǧiOL&ɖ)*(B31I
CW<6s({r6'@X$u˛-s$}3y<si?xwd,N扞1YY^
4آdW5lYUR8[	z茴_hu]<"xtmXu
0>J={WHf.ZռaYyQH?E~ o&ؼvm<Bda%]o^&$}..\BOg pdc
L	qcu5e)_vTg <_ΧϔY 	 \(k/,=QN'2t;	i1~)^|^ݪ}=9x {jF94!>&%4'zQ)&
cQF- ֤8>lmD\DFXӋ0@$c	Vs4ҮpMsY|vÒ̀CYgI<|*	%!X0)/^`/?
5!I10KR2;
$~ڂ.^$Ѡpp@dY\cEw5Se^oW;}Kض<8,kv̓ bU錷M
S	q9!0\H&׏U!Tɇz[K1΁
qd\NI<8'9hx?	$tIG.f+76% `Fͮ6tjd"0|.h{׫R4gl.T|Ĥ\Ǧ:nxOt+wS2vjǘyNCtH \+EO
K$VAfҌ/yGhI8OJE}aOm|N_Q:^)ϸU	ōpP]$6F*^FԿfY	RieF	aI$\* x71\v=7ﳜ|c1~9=wsdC
gZ,Fp qd-e71Pqd%[92aV2LyqY=:%νN5V=Jt8"&OīچJ%b)3Q
?$.!oL۷˛fû CWx\ }MʾG:8cL'X(y`AcWJk?#g	aPUsIRn!@ǿ[Ƚ\"b
"k˞b&P[aIfp-N1(
R>2qES]nk7Juf)qltecX?*#L(5	<	,_&c+K1"cHSq,!QH;&vxA1~QE#=x) _e'-g8wN	8
<
ղ~?$E[fW,@<4?Xt9svD`cPENTZ;؃we/r*̭9;Y^C1c9ܝzٔdnfhT]DTB}$}hP+]oǔzIz3 0HN"ZZ?UH*KK-#-*M{/EBܤ SZy(⩑<XTD[v9c4-q,Wzu-jw	FC<YΤI8ItQ83q4u2B
Y`E
pv}]JL_!Ajc
>,ME-}c|3{+!Tcw%<֑I~{2N׆d$%>c>.τ8V;3#2 =Z=PA>ď}0by|4yJ,iN9̬dWYA{2_طv1wmb-TyM{dr4pU݌en	it;cc~;[ĆTxCBsBN='ŝ}{'tS&tE9f&Jb{b5GhgY*̞HkF?C5vr4	<Ela_7GZ.=N^#Qsry_ ѽ4`jJ7UWb;G{ۄ0<rK#:[R/e/n9\Drrc>xA]ʿVQ"FY(+0mY5AS;O[QB'u_ [c
  Qfx-dkqvEGLʘC	rPo';	u`֑@PjcvCБ6d	̝
MimQ/Oa_6쨭wܐp(@ƖaQL
X~&
j[EtS>KUZ~YNLE_$Xᣋ,y lM@r2A:m1\뛹gEdRLv2A3=+B+Iŕ}]o'yInF<˖r
q[P2+%T6k7痏A?DVQ[(&# o*Q CVg.`IU2[x`kc
6;>O7/#c o)+ĵwJ!`L&CbiyZ?ڦMn<gD?&l߇](.<JKεaݦlE9>pAUvQsu=lEZ)Vgk$L=
.F	0OŮ_xGS|8
?yn{xr1m7>iH㪦aTBL;TYǤYf%oS	8+|7 #*K*Wњ_cQv间ʵ,N2_Jg̉#6xL5[M?ba	FLV2XVLG
I8AK0*XJT
T皂[i5C)]I#).]sV#C;ئ
殻Xry䗬M:!3hۇqT+?UTh_g;Nk+^7Kޟ3B%o8jMD6X)Ģif=>8WY]\YO
AJ,l]-+Kd޾-Y"rţ7ο	~Һ<47vv Ris"Y\,xl{alprz0@2PqQNE:F 2c]61Y-Ťk7.Y)	5έ4|,j|'h
ٴ$>y;K#;Y,낏q'(Û-~V	V r}dR; Zɫ	Z~W'vA{e!*Qi3AY$OiX@˖'H9b㤸 'oaش0
s3~&
w;u^fQ_Cżb3|T^WP@KzaP(M4].:l?sQ^q!?Pbu oI3^G]P#q,S=#S[HaWSj%ڂ~)ȟnhU.-@3NE׳p>
m	4uQScJ!PhĠh Y@TF&dp6~uPf20
CG%zopݽ~d]x;	ݑ)q}?&i=??^qةD3_+ڿKc֛κk-v5sW?-bL_c
<
-I]x@F~T|S3"Xɦ$gBsǊ4i3FvA[6p8K)j !6Mrc]~]ܹ;Jޤ-Me@?
G>p\
S~e'O5pmyq&*QeH96Lx-XCt՘f.fŗ\$w݅,ʷLXQ-Wi9bE-FJ|TlU"npn'BO0A*rP  r8pZ)	p8TN	ia$(nX]4$@P<mQ{eGȂk,&|yԎ
Q/JCdm}^fJl4e,g^z?agJOh&E82L/y	jMU6'B^HSmlL_ۘ03Hd^ҬgàHv18]IIaN`E@s=?ޢI	x4nl)w:6E,AŜElb,B|܂|x]Jxg:s
3Nf: S<hB]*&x$SԒ1&Ew~YK̓e9G#g	0Z\OJ,jme};jS_ͭ2YFrl'ƿC8Y[t`
&VMEl&Pqn:n~7w^zC7a'7Jmi>?HY<>t[ݿثp8.I2WdLv#R0@%ťz>x޵P<ugzXIϏ{z* 갰Ky4"#&ꕴծcaa};ǖ|e`1-?^0umTF7^	[3)J_~9]֐Y%s&C];7Ur՞JǂÁˇeT @-'o5zDI +t(_&>D
Y5K:lszn%38\ TU\.(C|fN;nIzKl"OP0b(KAB,[Y|z0}HD e?)`(ￚ?`DqQ:[͙
S	bZ5[q/=þLO:ˡjP-Rm|\
;|#,KxC'&(8PCt
]tZ*+gʸl/W&j*M(]dUT72^^F6wm:0AXꬾ2P~g#% +ȣi [ uRvRt!b]t}ДN*L3.=ź~J06%=	) dC6VD
s3|TpywejY%Mc
1毲qvƂOq:wıDV4v6WkUWc(%n	 SH-<.-V#FJKWp5SA
o"L'g?}O](||DX;h/.s`X(\"
ݥiqX
yjZm~8Zˆ1e,>bRj~pg>¤spAx'ԉirWA \-%Un~ŷ%d mW
vnYpnW)+~*MXAr>2*w9%ryzTkfBkt©XPPii< 9TXqi}¤VE/CǊf?^}n(Rx
@ne5"s[%pr
+
4rF|ncꩉ'-N>"MF:&?
Cb8]s37s1Rp	]aw[E3:8+_%bP-T80ܬ'6rJ.-SyA.Ћ}tsTh`.*i9K%HXm[n]HY#*#$yKqBe$q~iSZf5ϫ/ycYCWS[!i*"W^ גxzht@MSl\8񏑈[ CTT@\ĥj yLQE^
%zTTFE%up۾׀:]o27X;5elȋ$74L],̐{5s@K;:OSp4N9%\X|I
 rU;Qw~<Aq]!llFSJ1M`IQiU+蹻ZaigED7!/zog[ǋe	3ȣs2M`p?/9P1@B=,(HPn7X^0dSUpA)w׿A`KfyDyGkjf>Y[S;ke1d1 EcvMRdn5 5oG==vte9<mf
8 #j$xVݶEpVn>m m.	"6^٨ݲ8Z h>}?J"<#pt1ep$fbגfZoLx핏\2
c^%WC
֞)rd\<|uFn-B1Vz=#t-nYb;p@;s#[-yd`ց}q!f&ޚF	e)+wgsnwe96CZ) @WC4!o8>p(rrYw~FRL)=s>r. c&ˈb؄LɈd8a~m}- ,Lu(4g_FtszNlc>m4
#lILRx
/*t؏w>Z&WbGHq$&
lywb3) #^}x
áavw|щ;x&88QxW]	G %xxB:8Q?J]7P/|Lȷj\Že]yIgKkD!?Vрu'=9I.%e$Ñ~zdM>SA
ߌ]arg nb }`\&l/<ٺB]"w	=āA!&viT+Cgae\ԼJߏX:2{G|a_G'\ VmM1W(B[[jكd,!z(辝\b)dՎث(|ƳTrTppJ>bYI*L@by\Pf//!@"f%0V0.m:Ir_TF=rMHRȶj1Fb	7}A:6|#
Q_TlRY9g=٢,i&wSYY+-#CDK^O&;15LRgB<Z,Y#vJ]bi40| Z2zrLei/ēi=NCv%b~Ci )m{~
}B	چ224)!1o%ZRX@syA$ ȱC|ouQHfATb8*,xG❏+>8b/RW^!IW0QF9VE ~GSDGdiMSP*4Vst$ِ3	 u)ˣWSR0xԪTh5R!wsIԶNDƅ~I1Key;a
"ǰ*iV[IoA'K463AA'zꇧm:}92Z,dokG/ӾIfYXVq 4KJ
p)kr3ɮ%k e>|̟'NFOWT.IHT(p7cv{C&<¿٥)3^R#U6]g( IЇQ/RO_fӷm>Il<j }4yKxXd9D^1e#/q4cӭcOׁ-l,q;'e"q_ <Q[H\}u\˦AQ KAMh~ z:PQ2~`p-xYH{DY$)+;Jpk4dmW6k>PPjݚ,D#os#oN72<xUNߟQpZzH*MպQ;GU鏉\wneyX~ތ>/i	Q;/em~Xb\M\KVA<.iƪ ׅ %I?
`#ȽI2&eR$N]&'7QZ,oCh$X	͗z('RY5Z[J`
1x䗶	P
H"!nGv ]P	QX GI`yy֯BۀtXlt<MO[-	IPaR,;FVǮ	NF|˲=	l2%WI`9*T͊"&^{'Ўp<T CbRSK)#tݟzd\B̩
]>P4рpjS~(UL
~s:D.\tтML}s QAnCOXSn	E*Ʃ朐pAGcBE=¨Clcmގ3CUFǈ"&>2YTRpT!a&˓iZc~F)'IjѤtrӯC%
q%F\7 20b B9FBQ@tKZb۹)<x -{EeO!Wy>֢HFCع6)wASk$h	os!ùO #0VcB_lCPEMrժhtw4x]+LFI00Q@nT+<A1s"(:e!DVe5JE@MzLF$8j1I_QV0^>P: FÄƻcsvX: G4XvOB4(N$0%[농.DE7~O!k?ΦOB%=#jʓ?p:ٰ^iT'g,h4Vub{IBuu6z
a4,orv셆_9"[T
 IM޷STՇ)̝:؃%P٧_$K9Ff*B),"3#|.cd'$NcX0QӋ5HmGk5Ilo: 6VᩝHe;?!JaLTH!j-Sx+Av.t&FԸ`*bE8=rߔڲQ
<t@OdA@5,vv@#ISP\&
b꿠,Iw.x|]ZD
ѩ{1(<h鶌*!(}˾i牻guq ƵCNK&
nF"^j[1YH'Z64ȇ
Pe͛LOM9:`Mqpy3'hrcWm
PNmW?5֨m5]2|LQH&G!	HsMTlq7RH`~)5j_ot#_
m0eu>kQRs5-UVnmG"CF	$-|Mh
Щi׏> ͅJ?QVY$Q(XǊ
.ᭁ`X9iNIy$?*b<c@^`LE.9OP`7|7Dҋvɷq9;I{衳&&$l2Zm\`=M;	q]5zQfuT=mkMi=/GL.hfEQ̺<eG]2|r}ڞo5r3kKKنU
z-%T6FDUbIwZ*jhkvX9@YkبjJ?4rj#RQ	2"O]de:s:lC8vn`a>_a#7PoùKCP5i˨'-E&c.h}PX+8Rw~tU3f|&3΁lǟH^A$'8;{fc~t>/|OnTK3yLHkD^sLV|.$`uTz.D_QGx7 TgޗK˯4u DŚ/3+,vR"NAWeL]ChoXV!o7PԨ0`q@v)ި4+SG#E8_ٌiUK+0̍q&$WD}v\&TNZTg}|  hX)15amyx~y"C
9]gi'шo_]!#t]ai\;P<'h$`qyxS+,9|	a=E%z);ef"oq+g6.CarHD`0daF!90n}z"6U%xdzoLU>/%؞Jn',2rR	nAdbpC[k69{_	:m
i4cm}8|LYUG:ӓMn" eSDQۛ?Zz*Fme˫Sί<[ז؎|}i9kj~EqF|OG3t6C=>yF0'$CXͥt0Y/\*J{]cױKsW'j&$V:,SA#@-^irt1^Ws<otMH`/0եAgu}.yRlh`I)iq 6{Œ9|E(dQ)Q2F`GG d.Z7ʫJQ
AA2lT O'8DIjA8~dG
=y|DLLΜot$[~hYa(^L!\B)Ű$D>ӬGg${Ĵ)CU=Av%wJ@!$ǭR3D.+BMd%m2942Sf7%QHLd%mokp|Uc"a&ND:=;T0I:wvVsƷ-)gg*SJs6s#S9
pO-hk'd+{jH" jd؛^^tg
#敘h";Rc khcl8OW{!ӑS @)Ο[5
 @j_Z=~t^$<*@C~~UpYVeF	qغYDC*Rh[
l;yxϵxD&̓)Ed>?sa3{ܬÒ%Pz[ԘԄBdH*[_,|!>TTT0>"0{Zo1"Krs@m[89>	t0pĒI|1{WFyCYy
Yڼ+5^K7T[20Z.Bf'-~P"D0ЄQORx
_q_FO7XHNFnAq»v_QoA)Tin ~e?N%rp*P]_
!#3~BfYb\-k+i8a*2cuxIq܄4D2i.#
v"N3FU#yC=s\ :x~(sWcO9xD`,k{
ЪDikk^Ҫod92MLjza	j~92e#Kp-T
E.f:zbe]RU(JيG+u%}МGbT;2ݻ8LP(/閗GK"tԖ:0=[7PP#5L^RA%XZ</;0fŖp+L%$59ˑ7
5gІHf-0k>>z&3쾂A2BYHAa4n!⮪BuB;Ŷ!Gy\$ 5#/τXv Wo_49pGܝZNdVpA/hAzJVX>(΋G{=KݷuvL0d
ΰV4͕3se܉#rzJ)-=YWҋPǍ5<98
pVH9@k<ZƃH/cL)=\ch	+9#
'2s@}:<tΪAMC>]!LFˋ]Q$%1	aҽ3G.z[#ϛJn7͝X[$/8M zOs\8b؛Qog ʤ-y@a@vo߉}OĶ7PQ?
ȇ*i?^Zۉ7k-q̛+&O]aAT&GS|n|6ԗ1b:zdAVW|+{*dEZ,<#̟NbȤ0f8cHe˙~P\U0bZrVoiWQd<fTutF<_~F:K{?y}-C/ۚPTvgLlpB֥IOWѨ-
I-Ro`	Oy{# qy3AY"ɼUիJso6݄T:\q\5`
)N[;sIT-J7`V}c]a
Ly0BӇL4WyRU`}r"0P?EK3
*Wzԑ"67y'wJb>V8*^H9,c2/SRų7%%5CǠVϋ$O	-&߷#ӪH\˕ߎ<xWab|c
ɵ}'G-k0݆'9ҟߋPU?Wւf!^l}V)wkX}ӂwʖO}EG9+ %?^-p6D:HXc#FJJqUg@U˶qMVH0:
tnw$@DC;IU t1(wzopܶ8aTV'\p|כ<D}-4lc3mjJz] sd$N=VTJA,ug+lc<5UN kb*گ68;{
	+
ƕIx/W;g3`&!XD/8/lC9T}1bhՐhw?onE89|G
z܂2-rv#"KB؛-P'N |Mrv0XkFCtiI:nEͥ%4)I^

)[*u:c*Mcrcز`M-WnL3E˼@mZPei*-:J]v6<!<bHO犲V+[uoѼXb_ipJMvڞaɑTJYw7ߡ$_͗^WesEHU@bkUTJ,l_Դ{e@	8C	됬Q$77)HRTCOQ
5m֌ѰFSJ7oZ1vIi1vwav|zKRN&9ȴ$(ģ0f#B*'瑱LFZT[zv0٘_qXVtSGu48Uev|Sk89\"7+XFﯧFƽ󣅻QIo:)s|ޗ
֫eSޡT{/8SoV79Na ;wCyk{
M5 "_.wFL8
{;Vތc;,?\!`!p& a
:K>jmܼfژ~r>urUBRaڿίٽdzg ow,_ݦސ	7hk2-H;I:H~-]^seCLPuC]6yk`:'>&\?\_ɊO|*뗩rS\tZOZlq3(+]UVi3'
7'ǖ"`}datd%=3B~da;Kmac?My{@%r
C
.Ԑ.~ӯ'r<*jjU2-t$=.-zv滚@j]jP'xw2Wu <wQ#I,qICF踛H$w{!{!Tb_;(9ī@t< `}aTηd^\f^$,Dˌ٤gK\
}~UԃooގCjIC?>eΓv E-	`Xr0%z![	%.n	 ϸS }>>gdtG(,Cul!R^S|t7'QXi+YI,ݤq%dݜ+ibNFpAl{1	G|C}[9#R;S;P:?P]2u}{Egw[>F%c5aD$d4P<0uZt 6/<xy@]L(~\5ձN637gk>9ղ[10
T1֓o&wǆ\ۄ,k@M>g`_ܪ^
YTI'flSQ<CKdl L;i*	˚ҤZ"O(
)9_ImqVr)|@!5+qG'nѢ8J3öהC,brPZu{/ VIQQOwW?匦f]UUj+. eԃ	=ѿ+.s^mL"bhx訦\C8Éu l~m`H0զ`s]7,ݏrx]-R]a1
w.8|"1'
ӼoaahԳzZv	!CVW7.6VW GlԎE_=(WNl;H}<mО+gL*}k/Rjeݙ l>in -'dwR3ZÑAvl%^96.]xq,GQVh[f]L[Lgd/fjJnggC̣dL@(`~^D@_Z픆i]?nܳuIx\(rTZVXb*2@d:&?xr4i{#;\e/V2Tuvuy#<\wFa'/`@e
<B K' HMy7	j^n<3'.]3 AM$aʖEM7cb#c^
`"|{q_TvK{t8zɘQ@"s(LǲqZJ\\\m
DC'rTbRRCZC+͞bQ\ ~m礔
d0z@ڵ7tkf/QhFdx/gUss<et!SӴU߸cPܹ+|

Z1ਟ}IFIf6?oV;~m>-dX@/+5G6HBDlq!PId" OypwJ~ni?3`;209+=
n\AxwGL&[_Ѩth>l3$@ƔU[#i;!R	l?8e6:e@ńL;	[_Dl1]4ݗTey}}aFaKF]4. +czyE/Ǫ}v#,dK3ŋͫbܸ:XWi"l6A ۏYk{i;$$0l}}	q厐,XefXyg?)U<K
ZZjϼ>
mRdFkqS]e^B?	EqJ*{֖p9̾bsՄG@;ï1'qqUE3
fUfP)4E"߲-<ZxF_/j.ծG
m.L c4©=pQ.wb˲$.ٟs{:Ǹ"gD{)qafkkq=z3}$DuzM͹Eyd2QU> -Ab!EL[iv 0yZ3'u7Q&co$~9vwb4f3܈߾[:Ny'bkD&h
=Xd|!g:͟, u_hu=_Dyƣ\߼U
/-D*zfNoqrc_%'/j,7y3 hP7n¾һj
j1(Bv`OUDbHT5U<JOiz#VzC%f/ӥ]RׇqDQ\kGq*2IX.g[D~-
|OPxOIfHPxĪ^W{eliF3Cؗ@uGB;K^G"{g\.Mm'n޶ByMV
XC/Ux_k`[ }|.S#le ^gX[z3xfW5p2T,]l9"a};NjQ3~]^\VOC-nRq瞼Qn{Z_"U#$ICr:Iwդ)гM/6Xr豁́&mFDS͝ M)}IK'*t^: m_ظBX:%DUMᕻ_F!"bENuKqcT\N#ΕȿemnOe,x.Fw`tc]׬C箚9ԍ)b$:hLKҟju=ÇM1VﷂEa,kX̟HclK:[I&1R+yy&Ь랿Ƚ<*iQЁrXQ#+#Z3;"LLic\S{d}Jg|\+%I6rQ< %zK&]6ފGqpE-گW/([CCM0l"tsI5@
3jf*) ^mE륑ɫQf<l+Y
wA~[0#(xgR:KH19sc,MF|[tF#1
i`6PAִuY},LfR^-P[mNc5Jg.A_>C49	nؤ8٫'ү@Uֱjf,ΏKx<JSKeX[$|Yfρ0ָFW\YM^L@ْͅU5Kg{L$\Hnݑ=QK͗ 45 iuna- rWilL针0\Ǿ1ɬ#"Pt$ʖVmԽA`CPߠxH(3⍍Gp"ry
/ي k߷k!o8~-8RdRߘF\kBe+>5J$(^E=vk( ⚪
_*"se4-+*O5EC
e#c|tnᏴn!сM^W楩ɣL;J}$)=~OA-qϯZ4VB`[FR&K;@pM̴ET:Q/^g1ytiP=\8`2:"?곗uQRU]~`C1.Whr>&YAbo])
ݠyLV@T毾g/"h6#[d1ҷr 5ETu[MpLų"gcIyu}bi0j~?|SMz\~0ZY<źy<c!{bSĲ-.ffv68-3+C;F)TT@.k|1lmZJ2s_ܨun
xaYr=nנ'D,v
e/J6.xN"Vٴ#T(=^6!TyJ^dVJ="oSk1-:ҏV)qhg	%:'"n="p B3W6G*Gr(VZ18
k^_N
yS..yI{:n'<NiwzwGs~Qh.C"ߎgZ㓈|g "W$9P^[@J=9Eǉx iZkSWPomP!y\^($Њf$e
U!^	K,"D̨6CP'UEN%-FߙIt4#ﱵ)KKxw
`[T8'OyGpN^6+AD}û\PnxtjmRei@cqV:ǂ HrKړA2|i)Ɂ\\CN~R5
׸j0u!"r2$}!EPb%CI	δw	׀^U"uUOpKjftPva@~>*;p&C1<p=}OL=RƭUŵX:4?fx&]+;N{8^ലa
dG4q;Y6g؃{di91/YN`mKAdƛ("TD{ɗpI=+xn gfV^v%AyNw.,ZsY8)B<r@H2nzrW`b2;("B"E?OB1ZSƱb3pX^"JK
́{|4Ⱅ:
rMr<4im/8ԗl[̠4[r~Y>4`
z:S5R%B=z}>eк|FM,pS%:N#q9GP$`Q5E99.1DEW{:k{ܘ[Q(Eo|zYPnvKu+(h11p}bQw-+H\GɑE\0͍`Sy*n
ݲcWqMA>/o;o~D ~\Uvt~N	x-RGtZiCϒ,,ﲂK
:`K1g]?_TG)e/ {S>b&ǩ;a@J*ds}j;~	*:Sߝapu7l}7pپf1"&1'ވu+]،	]tqݩHϋAmLC:y+ó;!3$	Wu1ʆi] 1A@g~Ǔ5+s>?2 6#RţEi%q9YpESLmtjR_;ZyrN ,ꀌ$"Ȳcl:\ ^Wd$4}bmpf歫XC-6oԷ5k$({	l
%8ZIϟayz~;zeHM%'UmS$vN^:0!]_mDC[0eK1C:ۇ5M:i<GA6!y@k1Oh	doZhyRv}6tvfJ~Lh!CA_"-mUh<SaH%/zz훿Tt		%(%A~Sŉ'0]nrrtz.E}!z.4IeTA +B~n[ĽrgV{f%=y>oj&CV+6dZ AaHX\\լ۴z oӾdQYZHÕ==/'ӖIbp02hc
fĸp}^lv#62
(Yq87`o'V3ʠ`Jmu7ٞ`S1iy"KZW\CVI7BKzy4Vt+pҌ{z#dV3@x7S?:#9Ʃ7KD~"MNN.bz^D}d0hWvME 4!#I2Q5ʻK`l2ƒFPV-/ QBʘãB;ǆ*6"F>_1 jd6^l
2ơ1a>3oOyV_e}䵻O]Ĩae,*,B6MfWB/ W7C>5JS""W~*h {K_C8Kbla&vSiXMKjs	./Eggc~kmCL? & -ٱTfLib\D f娋
ꂍeo4cn4c(k7_ߵEGTS!PMtav-@swYauFeU(R!M	.P{iݝ#4׻@X:[d8E}&aݏkjjX&CUb;hh[m	2\䷍4{-v)q,T0`2c9<QO;[uMG pu*{ǒqeuTj#W}	'8Jjڰ
v!m%9J\
{ΡQS]ɬK+0 #⌱"LDۤ`5K\\HV_rNopvgAw?S8]޾'uPlqijyk
	6?0![n!25#1ex(6&F˲O+2gj+L6D6*?|EO<m	mvY ~<.ƐY<!Jgi	Q9ŭ=撟ΧQy[bN+lv"Dҙ֜9a(uR}몖.)0 )8]gfWj/W9FtdN|ʬ~`|
 +dW|ՉE'o&<Xq']BjRG&A퍿aC0
lVW#NARSӪCp%||%?
q̎x?7=Ss8OY`3)ʼ12~ՙyWC)E偮AY	#RbZ\q70
VBbA'#qL*LHO׍2r˦/>zW.ܾUL{BeFS`U\
*7
O?dYoT^``fRSZ(\P\XI($hH`!Fd5wnsOEq뇋ixz5}d.>.D;2%.ַ"H-VABiJîv7j|21CkK6I6r%2(^?)8$cN(0֊λj	b:9ѩHVJ`_OOQ/|RDX@Eqp"a(rPgIH[
+g2!G]m70Ss|§zFlr;O^krb5-oYd)Kϩ
\b3(B/wq*D5w^`	e2	=HnK6ߏBUKYD0{_1Crxfg^JˆB&xc~y[ RPK's"\rXqKD21)#WE)-	S3B%h2[WWpqu>om̪jcqI
iV˭:g籗|qÎǟ,JcmJ&f!c.'2a^/Ryǘ
c@Z}.`9PR_0|DZ>.FV%ֵV"RՖ2R
w7/|'|>',EbWvwVPzC
KgBQh跊KOr#6t<iKoY}M԰L6	pƝqYdh~_qb,eA"(Z>p=,tDI^˧ H㖐AW\`&b9|/gd*^`0WՁ%ȓ2v`(CWվ//Π9W>*I@+.pGt0Tӝθ7 ASSR:qS<<1sbO唞nޖ<ʵC/ݳ)tB$!t	xTnJ/ܦ~AO]40:?{cT_rB3OBaE0?h)*c |6I k]9Bd榍-^ZVm\XyK@]oO0;
&eyvp4 ]u0{ÉVM[	zg'[Bw_*@$۰ڻQAwƮT׀m"Ow%%SK!f?bDvFK?><SQ5}:Ei`Ршs]'a:@!s9M޽#5t4W_I3uaM*u;TZ	qlky/&+0)j{gҨXoR~4[_1edLtugAst)|O+;ךD.LB":17lg̎	WX@Y0diS4
QPiV҃x"6CH51d q t>]rW	~Pto)|(!@= =xj'.:4FR\BG~љ!/U\^7URvkvIi<|B)ϨQ]8o3D/pڑAVuV90
)^#i3Ծpvi8
f[zK5ymm^qTH"^4Nb_ۂCpSףY\n.epk2Wa5CE_*W
`%^qU!" `z~뷈#Կ|-muiѬH{+92K<^@xĽ#lR|:7cUW(0[kUFt@O5anVM<>lr îRC.#jᶿ;cYރ
N̹p1At2J>ܔ7'ΰ(#7|}J
u~dޮ	%Vu=-m7\?&#@ &QǠ>HaM@ 
I7JO8r~%Ҳ%`y;eky(CۄDhOo0 64_=G`1\ܮM-%!2%uaKXKI:|!{}$5[So,sHt?5@dZW@n$uNmX]d^/ŋ1vNŧ4c(Bgfm5	bʸRtʧ!`.+N՚ki
]jYNfy{HFG/߂y:r{Z^u`k5{M	DzcGF,uۀ7 kwʒ)c&%IǄC+1rk]ˌo/v4UI
 y6 
׶|:,3 F9D%Q\ړjH޶}p	FQoAHrQ
~SΧDVXӥy7\J\a=j+
cUWߧY)</SUf8
X6˶'쩉z\aI"}yc7l+7KYG0,AAs->Kⱗm!x5#xRe=3Dob/h^ԛۊ|H:񗬻k?,{{Tv؁SmsEm
͆mM
 QAg^1DIi:,DE+A]FƎa""1jQ6g!`W#'E` ~s-A/0XGeU.&BaSY`RH.֬I7Ws| ~- 8܈z>/F>`jY<r eN<tp:!!j9Ek `5!|w>s#s	Hkp;%p6^0]4-*I?\}PBSWKCV7[Iw\*[A.Zϫ ~l%d$#0bP5Q#Serr5=v^z 3`lW-^KGI@kh%	6Ck0В
BMoNuD5͏k'K Ye;OaULd%2T#4oט&{ezK z*Ԉ'
Q3iەozoHGL/ER~܌CƿitOƃſd#R tE;7iy<6ˊR!U-)^sʔLڂ@D)$,Sي_
9?	/:شٛ4_ZR$M3\`q?LOgm7̮ޯX
BGoL!ey+7MTʣ[85p;r7MU]Q .^%U<PA;hVt`ZBt:߽Qt[ )й	o]T!TG#ٜ_̘nОFIeH_kt<4-sazҌGA8IfoDPrR	{`cU;|F=ڗl՟^Ak4;hoޝh]	/	Y]!#q\I,uH~f
eæŹR*#w=l(U4~0ߢߏ+LUU>Igʼ<a5j*ޢiuI5d:<!B axH'#OD}H\rB'}o2,jEZG6aŘ`u#_K3is1ȱ I~f&φ>cpO׭>,nu{>&NR}s"L
֯C
U9xb͜aD-̺@9eske8G7,E4[~z9
6J`)E֜Ob>n殎~D
GJh#!R1;I,n,!([7r
<b PfY%2!>_eOu{,"yhPòT6ӘIB'9 #?'JPp\yQ]H'!l9Uy9fb
ѕ[@U-ɶ!	i_mW=0@>s\Dj(FlwXeHٓnI9hyYu
 I7 tVG>.sNx8&DQdyQMҢ9vAJKռ<NLoH3][V{U⢛aHJF yu^b@IcfĨ$e
͠ۿ0*tnO;fB3<N]tdSˈjnVEVB҅AHb'aS}i瘤3XPdŔhF)wD%1 -PGX"^V79+鹲HxxYV[6ؐW*ZkZdRSd޶a5u3PQh YEzvtO1R)?<'JV!u
ϲ#ڿ_ǰc#o3:FŴaNC{aEa>mϳva[mgao},2\JhO<>de`jdae稜ˋFsD,4-G\8sS}>2=rծ&$ݦ;6( 
yEt}֯m!< J-8(,փo@#nT
 ǡL7Q$rM1/.7I4;(b<jnv>.ɜZ
 ;a
J`x<֟<VhW&Bb2$(')Zmo9!BAx0ةgDVhTL%iZf% pOBhB^Q ̆VEۦSrL.?l
No섖ӜdA&Xa4*|=+uUrMjJ-)HxgxfW@E p)g$A! @@\ļ~ w_<Ϙw @=dԺo/nԗgE,MkM~-LdAʖ|LG2|hY@U}#HRrjb;YDB%I(^~JvF6mT	`f|goorqY'(K-$J  fx>\ߝʔ}oVe#Vu3siGdjNV2sdР47H0:` n*<J
-_Yq}+dkhCL&J5P/?:\f;wKt T=iyC| jW|=g-Zq{ne TKBt+ȏ\՝Z( ]RBΊמuYn~M>ڹymfqӌSYcEJkdI2B<?fÎpZF18<
W@þ[qܓfhpy+"1ꕮL?<{	{7iZ#ؿWϷ.f.q界#Ͼ%zKIKYT#dW_>HgL &Ēy[TGQiws*
Ej m`iRiZCJa@c/"`u0`.a\e]\	[SbYe҃:?ٙcIޕ7A?]=Af,ZqW֭箇^xT5؇gP: 
wv`#Ԙήwy:  
8Vԕ	 L5N>[jy(\yf9r矶tmF<5I
!/t
+'7+M"n
any KUNڀ}G^IUA@ϜEvu?< yFC}
RŵE''K΁![%M`1ޑo_ _E51}EM1(C3.v!
0hB(my=ăW#a%ɥ-%@q~PDsky
z(bLsA]LtM_"deSfguS7Y_H{2@d76I8VI7}8e 䗗[@ 	)0Z?1h:LR*lp<OO	:^;
F{M}rm\FqVNhޜfO[VX!hVFHV
&ߞ[^-j:1n3xļ
^Wr,\r\).3Pӌ@sLY~~l;/:(; Vϸwe4ZTޭ2uA}"kGViq8B//9;wƫSeDZ\W``nNK=WKIQbA(jwF2DsۑՖRw r+oVNT¼Jk'nz2pFaDIx
yב+|O
HsF
#Sp?{K
^!?8=?1p!WC樘UDMtJ
r?hύŷM̀Dʯu`1%ònrtX
^#P#=HӘUGhy[Fį7?Oo(K\q|A	Jd%c]RTPzV&+pc`CmKԀ. 2ö֖ADni1-й
W|ox#ܓ;!&OͣI(<n)$ vp>rW:})qz
 !ПN
hM[-SqyzbUWM|\ 3a8Y^	tӔY~C|sm+NPSUnNND\<k"B;M$TfŲwwӔh[jFl'gN@zk[ɗ%b>tۄXTK!Xq{9
Ov:@zwoϿyc.nfV6Ji^~J"9^PVBKT"y/0-&H
Z041lab+sT$SOChŋմ@6,ECK %qqXi^KֵKKjPba(-|~\%N$7] l|uQcn%*֓8V?{ ?^o@=U\ֺY q
#dQs01?D]tY$u:"l`]9nXufSqD3!FiWxɬRk<
(p-slx+Yr>80b0;4p4R ]"l^Ld[04]z|wgB"մo$"UΔv'y&2懫Del|ڱ%{AKhN%L_ɵ:	d	zDŊX7$>]dIv)_mA 2
&c0;.rfrE(~1Ȟ)rp?RxmI훁`i\rrFמFw|˫
2^Դ`S2QUԺSbko Xu
G	)S`M}"YA"T&Jg/YNYH+g>H kλW6gEH?s%_~{g7(L6X?zƶ|yHvoQ.KJLmw} фutS2:)=ŀeH*)c]SP/&ô/2pXwI/i.#z"Eʷ$x;ϲy'~
$>i!1~<l	m;IQ^l`>D&bT%'"( 4􆡫#w[M#%DuΆIogQ0,_P掞;2Sr?_EߘP+4DFQXZv#4XȔ%ʁH-ׄi9I16=-X,ј
'aT$"'
##\kELp]Cr><sl$F&i=LUKwr˩=!n*ZiA_TC-l<IrsLH!dF{D*L.pHFSkڍu;E]WMɟ^d	pW"4qFcHB
YAc4;" ĻnZ዆ʠu-lÑvF)gtjR\^R +{PGپ6=*YJH="Upgl`48Ժ~W1MXs%[ٔDم;?JP8~v_8("V]~;|t8;]S$kv1Rŕ(1I~ڙJBv˔&}*o7]zbV|s(0
"AFRf]?@@0gLl	6PhDܶR3ox{D<$A*l=×ķ`kP`CI#i
UJc?IZH97きNP`{
ئ.W'h.60፭)Kƀ%5t:JDjqou;,"ư)Ofws&To&^߫Ʌ[$V~s6we?VoV/u8sX`LW
16Dm%KPlVa}_zT̴ R5%q<y$VZyënzBˎ^}M&	9\'T}&}YԦp.h"" su`^eF9d##KUL
QG",qRح`&)H1q&;-f.ܢ9dQLδa7[K{,wp.u<XAܓOr')0	rXu"11w@Gf{-WT$Op1uL`3	1?v@Wtlx^03=Fu?EA5i9á۲lߜ\̬`W0P%$h횄tguL?'}	M]s?;?laɺ$ĦXb=v#co:[g!l"ɠ%/Fޢ:k^d B82Ed,U0}T*/r[6XC#H(XQKCu_3H"fnhB9sG&ȳ4j ?X&j"F&_4Aar||/fjz^BnZMjA.uڒ3Q`M$ߕ9m
kbb/kN~Z&줰yh%bJ]8~lф'kEpjt-Be+*

(Kz}45,b:0gwϰѥ&w[VU\> 7 ouUc[oλ0HվAZ ud4AVi?x`s<Fqԯ#t`8<tx3mq3SȦD3	QlF ~bkPQZ
_+Ȳe.\dB(IPax.lonr	,u >#9{}kAMLxDEJ	;cξJ)Oba=m? u6VPÃyݐQKpzɇ Go!ms#jzL!O!>bD8 Jo|ㆱj
N3=1)5]I UO`Ԝ?䲰MtMln{y-ݡ"A3??~B!,9ұ&7n)n>ݘʛ vyӐ\ˊ Iؒ	>&R뭭ݬ(f|x}<sn)ZT0,È
U҂̄ZC3|g#_yP}(̼P7i\<!3Q_[uq=a]K9OnRbZ/n_/	u3D4Ykǚxvst)0*R 96>?7
N.s-3L(:&V'bvP0"ʻѰeH&ʏY(yw҂
ȝ-eo s9siRoDD-ϞEl5:ˉ6%CC,U/\frw.5_ .f0Xij\nWlwoRM B>Ĺ;]xvϬ	䇥'a
Du(5/X%MuUt
;6W۳Ƿ$y	F<`O1Һl2ON$J

hmh`-:%`sϲl
h?8\ze<)B3J@[PQ1$NgCkLi} c5V瞰!ivſ(C88#rs}Y3$
=Xݩi?ws{8&}Y[
}Tw4& Oݽ3Ό1V#;#jlr{NΌfԈ 8~4A.cv*әyGNV<AV]eφܛ(gHPkQmd_b9ogCg[c%>55EBUH>W}qĺ0,Kj-ϻ}$eG-
^UƋ.vtP(Y6ؚUvd{4wvg\3Rk
QN.C3	_8V|5qh2a%tx*!gx[{D2čSr0_RկŁqќ]1*ڢk%={@R,ڱƓVz-Ze1Mw9ۑ"kYn٩POP2&b>8|]yi}SaЄl<ծ/-Gf)Aݎnƛ3,Pgz&y|
%05v(
D&| ~ٵHTӴ$_l'th_?
U2fAe.Qd
ԋVS2[9G+S5yh,]49d[t} ⛃f ƃ3M)ZPGk>+9xx  3%!;̬W-:sJ 6[2Տ=x1 <&
ۀlh	g"׎SKiPɺcryE4~&>QwA⻶w uCh9KL<'ɚC>`sUn U>#mSҝYTj7 xy$hԿo>. 0hVjXl1U{Iieԇ7R\w*sRqq/S/M4{@/Kߋ@u^#>Ԏ<'hI}3[(v?0^}c?1Q(\O8샊Ğ!§2zgMz~j	^9'\})JwѲI	Lyg#1G].ȇzMhd@hje60&, j{_mVW\ K<iG=&H$hB< 뾭`)H9aI$}qN܀
_"xur}B	@|0}ir0'љTa)mUʄmƟN}:bFp4pc?zbmH2Zv;\iWSJ̯֚0~t~ec	OEc(?@z
hpY5NDmW{ͼ =C;9~3ydV[$\O2M3iK +G}R)4.Ov!oKrC3I	8B>si9#(͝n&Hu
/wXJ|6F3:RpNd*F&]I|zi/D5sױrq]gSv v剼bp5B4!qczW0]0MW!3~4IKΝkTSQ<g*iʸq>ǽ&d>u&Mj
J\p*uCk?hpgM6,όX~94mOKW԰i7p+?[9-D}vPZ$=D˥f:,{Vm.~BrZ([@2\UfDX˂wI)T׵_~h!Myf_ͮc#̐qT #]o	ௐס}M
@b<6UG 8ҎFAdx[z^wvg	k2
\IlVZ
ވ;fb#Rj,<́-ws/Vgy@;>37"Q UA=Ej!U;Cᴰ.\!cXt|_(_6WW+Q
XyOӐ"{yɣrTY3ߔ7\){EuI'
h&-Wx1&򺹧PKC؍§~CZLXkU\:g ,
}>aMpMN;MMBd숏E|(_-
T@ xuLj~p*Cm{4WYHѠ۽'h
	ӝ$B
ZZ%gA? { <FNb{y\&.SX.|3AE(
7x*wrTXޭ<PAPB n{4ZXě[
.h@b0
2E*AF!Li"W{>\n~Z5BkʱGؐtlYd>cg/f3BڞHXS<`͒o&$|IGduU4-KO󑴉jrbӻ$\Q/u:a]g%b;4咇4i1c|5u;(kRj_&~ kK:/*ׄy+Rv
Z)`3\)~W]͕DV]
%wꪭREG
&j%[j<urZ~1+98ڔ;]O58I5	
}M&Pun!1MF)ӭW\ ׿ZfW8`>Zip55|#~/I[ڞG'۱ѡd|b,5	BJu:EZj<eLb5Oe8Z!N:$W'|v",{["pѱEyc|r7ıʲJ PU:ڶ%_iT6R",4nh~	o$~3,lt*:;+T%+Z;+*n/nP+TiZN ڥ)CLd(Ox8yb>B90ǹbqg
8^AG%F,H"a]A3~s$#뉡EA'Cp^4LLjq Dljq'$st#D3&n_1a|?IE|LA>/-zdJ障9Nn6[Fɥ8t'RQuj8Aa>áqv(#"K'NLÐTyz m.ƾ$OoBLiGeaQVA:s	zQ
R S(Z~UQp]>MЈ?<%)OܶJAYDqQr9^Xlg(>%][RUM&]v/ٺZ( 1Ca=줺6\ޙD(IK!ˉ`&ڥVHړh5޼ҟg
:T3y(`>2P+-FŨBQRu\E:h{3??&P`DUvz+XuSlg{%]?LWxvmv]Y:N^~r`w/V~ #	|#˽{c4p,5F80hZ<A}zgLSWYh٫<\)ئڋD*viSlf천N+ڋ±2&>[F~D*rQLjr9/bU{JKȮjkD^vRU
z^X^o04joV^yd*6GvԤ
/6Ą^sP
a{d8dmeفFyo`w}9VU-o[5K3"xEd1e³\3/mRJ׀KtG3$^fp2vXJ/FX1R qC5+ F]<#_*-~^'$Ьwۥ?g3_v/9ʓgW(J)S|i1kbQE>uՒ_z@&7tKȶ$e?@jVHAcZ$\lL>j_!#K{Q{8Nma~$Sk̭=彋%6D7
NXVHV^rܘ8!L&vfXſ(Bh'o+H*F0/
a`⋒ |: <hoz4U9&x~+`o%lPb({~Gh56@|W.M<G^x,rbhC{;QF,ǽ3!x!jޞ헶žA
Q4U,wƔFʃHI;FgJUt9~T]?0k?h&7qCJyGxhuTbXś۫"/a?@~ %BK*aOW`"8?JQ\(ו<+,($3Q
ȠE8	
H;k씿P	PYK̃̄?kenء\YKV5BD2c:pſFfvj<Ms֮DSw0wnB<8_Xeh$%pԃl)Xeb1-d_"Y`Yt9.\^"]φ@
&na^s?(
<~8@-R0.^}}dw-lEyѻ,Jh\Gr"<MUA4Ò2j	.]Ӿ\w>^8O#m4)'WA#,Q	TJ^:MhYMAIDlQ,mW2Qf0D=
@
U3OĠQiDQN(īj7`RSȗXa?x=fǻ?H,ł<#&Dѳm'̴	h.+T0>2ڴKiM~eUïD(S<st;18?'PHC'/P俻хWHU1[L+6tW	Ǽw}U4;L{e2$J4,Odlo&:Ik(5!ZDܯ`ER\5#ww
TzS13aIy`)W_yzʻO$IHIKGl摈߷J8Yigr@T$ѱ"<ͼiwG^P'#BU_RB7ʊrFOygƵ&̝>P>WV+ޙi*.nPvߏvK-:bYK]B?̞iHK%%>ڿEmCh6B"cA̙/XHf~l5t3\<VJe,yb|`eXt6B2.iN \zG~i9*Vw\+6*he:%M'Vsv6+L\؁}W!a@ڵ, J/%m*نeH"ɶ3DXŅlP>SqbV2q7
3>$7 FG _|OfwZ?4*2	폤؟3\jh8Y'r#/ryut2Lݺ{`1eޝ֜m+	$a<ٕl}KMp5S`PޓC0aۍ}mak?vAYJ"g&
7^N~)ZEk \4jw<<4.C}}<v<2I_CN)K$J?,|s࡜{f	ã@Mi	ܚ+(,S3WtE+QC^Ա2~gjA=YT"3A%D  h8``*JՒ:.X^N45}WlQBBIjD	67eILIELcv϶
֨fTBI*.<jO0yEwFpxcOD?/-xkhE?
&h8ʻN%G^L٤;M<NdoOkP/(FvN
FoP-''fJmuނ}]ToeF)9ff>ԋ~n%T+Q?㠐9
zyDeu2zc
KKq/WJFkrs#[ĿK"uJEtU\CHճT{htAug."E+
U,e#,d^WiعL&lEx7R~ϋPvβm!\J|,cq ]3F!
ot,
2g8IdQ(zH# 0qыMy/pSg^WrTe;?"W/-&=+ʁdv
T\Q03x	9z%$h^FL8l9U6aLAݭO&bOyf:𫼗LQZ?)EVBZ15cՋ~kEHjs%V3p=0F䊵Z41ǰ)o*_a@}
I)Cn=;;&/.
0ݤSuݕVd5GŻvp>IUF傆\iM0#
.EXP=\1ʾ&1^qe4a(J@u+>pU,}%x0af/OdYJ,?|34gǚVxchnNhu	e$Fx#pF4L.Va}s2%cF5՗"m[IFGʔMH/b`(
)@!\qB:r176Xӄ%v#Hxa@R1ւtб&Yi֚ɜ>'Uy$GpYFbc-n-w.eGS.tIzzu$C]Wg
ag?a_j(a\esʌ s9Y@T؁
<+a:
gs?͙S,Av&U: O<tBʮ	E6A+6+cv+t'ܪua	w,%<bnvH~Ѣ/yD|ʴg =%vA,
= 7J3X?:(d~ZUO`O|mF]_>.F9TS+9V,JF咔gW8,W,%=.=˦~YƜ8)@^:J,[xd4Pp]R0o;iA,gk*R;#
kgzqA
ْe%}v,Z*]~3VMku[ gW+_'U3M!-$f
3B8k).x*}p܄4{hh;ˡF=zGWk??QFDv(Ϋ>E-kRn`wih[?S["CǦ8P/ |x)S*=Ca?yO\s[QX`6t	
\JM3:Ñ79cHV2rhV8Ͽӕ*+}x#NtSOJ |]\?I?Ӡ.<=] g|oJ˺)INծ)o!$CK-=XL	BLvdm}aDh74maSP_hQCBh'">'Q-wXvV37Vs	'V盁s	|Ȍ3ir~ƙլ$`Rϼ1{_K|ar_cLWԎVq3ـH</ 5q=	jzzGgmi[S%}ҕwwfS1m)0tN_.OclWmMTM#䢰'*LnS.dȲ*7<o6<R ~7q~#t'~۟JJ3~/*{VlL
'.3޽)ֲQ_owO#"$bPem+ۏN4R\^]ɭտY3Do#]6d]9,Pt)Wi
Z T%>{3+~3 TX
\@UN`Q^,%PÈ|Q-+#׈l	{ށzUњŘ\wE>dӛ5br\ς|)d(_L='j 
hCŮ^Au=C>G32ID Bj7euW}_ V3^!LT
m޿϶}G'o'%He= -vJ_QT*l8xl^J
0<ed9ATToqn"z`%@~UEi)eO7D#4SfsŻtʂ=
"?e|Dhe},)yզ":RMy
~q*j-357KkF^۹
`m;^xN;f"jJo
bG:=$srsߠr]*T-mh|l6S67YޢyD'O!gWdO,hԦ^>%<&@ 1~4*G
pVFtxG*I
4")
sUЍ"Mpel0LEHȘ`'tH}-3QxNz3QbԜ?[]KMhYUNS|jk1Vږ-5׷
4BFGtնJgPG&_7IE5Mnsw\SR19e |ܓ :G"j!J?
i^	 {*Sz3%£A[?6}IfgG΢Kq<ϧdޡsO M6%d?&+
m`VHYm"?`,aOے$GN͟aͰK[.jgB<iRHVPwOZF6gςUA%FNݣ7c!OEEFW5l
MH:U?,ЮT]L"<]mFDPl' [H'l$HAX_q/wk
Zѕ	L` 9dTi lUǧ8 3ٱE,Z3^[}@{J|G<Ej#&pf|tCaH۳Xgy7'TѨ1B61IޛxhbXWrڬUX`4n^vTWĊcTkei?+890=SI %ITO.T`
cl/6 ⏐p<k䒏'UKx-pz'70s:.hvf_~r!"{r:	W`7Cl残v'.?Ƥ6ipV=igPMv[~W3?֩9xQ[ 4e)çd
:$Q2W{hѣE:]qʂhv{~Ts҈tXk%
YG_P @C2A5й@*/Pr @?mhô(!l_#-T>ୖR<NټBnή*~Lc(qNyEs#/?Ru5hFBJRuyzr.SrkJeG\Oc[!5LB{;w! v.$YÂ!Zkit-HQ҈P?jAM"'
݊T)NIeAt25!Rx5/S3~6)=8iH18fjeT;4^i4U"al[^iUz	+LkU1ZDGj1"f b
d--YnY1<۬/,\_hc7QDm['2*߃@%	{OK(/\;VHV9Wiճb佲2< e=!`g8] N	B!V íUdZGڋotlF/AW"/Zҹk/hqԦf?.*NИF=$amj
3*4
vcMvjIdJD >1,M3&-VYέBH[{!)0
p uh+=L7I#.lA#۸gӒDĎVI.i/epU%MG]	fv]܅PSj^2p#D| \c
Hm|Zǹit4I^Jbmv K5+ -jeYZ2OZ֘2QmQ9PH
ýP8ݎ?3҅Y^WMH<<Z`]}[&ʪԙ,)lO~T:KKRMM>}?uQcDPN|}T3s#6ϊ`C5)FX5C먤+k4
	=|Sŵ'ې7zdCKlX:IpL:Xuu9y%Zi/Hஶʩfsfx3>c!+U)Ym#.+ߨsvre :@zeH^HDiWYw	AfC#2T
^FcQbRC'O[m62FQ+~:/͑h?PSg} ]{+ˀ<;ɽB_5оɩUx':3z-{v9aUjۊ +OC`?m:RYJ%)19za--&W~Jۜn^YA:vO`ܦ_$vyF.f%QHON!B¦rbptwDaB#|Rhb?JhaK	D8X(x$Y&)0 #R6uZ>b^tGTClv;-[Tm4݌|Ҋ蟉A*ϐSȯ|8|K]NCItN_B[w!kNO> PM~IϬ2|0yQ!W`c_	f| K(|b[urȫ/m'P@
HS1$nJbpU=sPЛ³(bR&3I1D)#F4-h1F#Qױϱ>k,?=$'2-7 /lIrT!+ą)IPuS[3?^(ɐ(|7Vfcw3YTQ<'~^[m%2KҰ
⹊ڦy$,uRB3iOP0	us"NiCd5*M@[ܖ㹣/y!Ξ2meU&UxlcݙLtQ-Vg6@XsQԺK$n5|{6]zlNd=1K|OAr<+q$0
JWu ^Y6vl#}i@qT,VSdzI;S%E@JxazνR1uFL,?>^eK%ghi0/VG1GS؛	g
<q%rezAv=%(B]m@]&O(r|
sZPEJ@VY!}~j<c*{e
`7BYlk!ߵ114yP7H4PGDؗZPz7xՔeE[~m^iJCMYhްN(=Yu+,[wdjғ76k.!&ͅn1lKay.
TR	u[wv& ǚ
 ;g2=BeE|}
^
\CɫuhT! }@TbO27'|Zõ՟cod<jeK4~/d^-ۊ+Axw<
mģ-صn'JѕxyD?z
)tv	z<j"H_<$_>$0=O'z#c>W]61I*c4âTu=(35oU|md{pYͺ{ۺXwj.qȩ<䫿oǍi2)xqբQjq}ݬ+;Is!9_Џ7_y!~L2,^Hiaeo_Y_DoCl8[Q1#7"~hxN&L
0!c?bAZH_G $f޿xt)\V:z`vr
i~Y)

enHl-)$,
fk9]HFrD'!ke[y?EB5w#	knC~LאL=Bqa;i>R؈Pxֺ_|4b^Bct0:M:@CR,@
q-ACOi8˯'IFr~"haUjjpMNc2ׅ5.pl$&GK;|zZFZ6^AcL	F'-%{P-Uzգgwt<y:;5{`4KcbO@8_`X'B70[?]]P\:=P~"3Ფ$Rc\HBIh_wb1UIk(J|VC]hBg4"=Wa{:WBR/wKg(WyqSȶЗa߿mrP;Uf?\7S:	cL.,7D6jK!-}yI>!>g?l{u&6WsXdUi5[	ujh;FGk±[2p|G--'9FΉ_ qIj	FntD/k6ŗ`goQ]K,VDj>[; %
|.8	s!	ãl@V@D.Bժh?(J 	TgW&zXz;}kvwj\5mB\ѣ:P|-1XƛN殫'Y8vAcY)j@LxlrK.τޛ<H$Q3Pfb̓C~czFi^GTOSXhx 1S*	BP@p۴^kVASR lՍAv8CrÍ3CFP0z̟O$c||ǟ<naN!Sw	K+6G@A 00l {@>UrfL}.3N=A6Z1[aibkQe8QƑi*}u">Lru1p1%-V}{t uHS[Dr63ƝŃ{8ѿO}b(o
B#Ɲ
+H9GjJjB0%/#-|@U7w|CA>BwK\@rlqQnNL/?<K*sZ%>K/Dߎك̀hN 	9lp[i(mgABi<=HGb7'fM ABSSY<Kn:/`7z\t5LG"NS$(lL7_hЦ9.WU.]D
&V'J;"VĎy@(D+F
aM
{NRd3) ',wU(54T 2N1²hgx)jeyO]Ye$
F(unGVs9p@ORO(~ZGLE|nqRhF/pR.y:y-3nKZi;mPKE[
" [N"Z{Z,
wIFi6sP:s]	]5H'gtufvm.TWO$Ox}FZWtpy:G"P8EA2!~
D+VmNWo=OPEwBٚV?e>^cYBvX/)Xs.<ʴ{m-g8{UdkӚ7j	7	#<RsGh3a,28Y6r+I"/oe):HwϚwi{%kPW*0q9#ȱWQ̿'ΎyYue&ȥZtJu$
xd/&+ ƆӢL6yƧ𺷡AF7/xh+$Na-}J*/npVj%uu֩{\[ď;l?$:t['cˈ s(b./ǋsS45@T5k[ܺDN)j"6쥘2^ :TuR/A(ȆD=&	V+Wj	NYvUZ[D4U?(2-Dr  kB)gfV.Dx%DtEfqfTYl&<C1d"0Ef]RCagh"m1jJ"\{6.^7(X*uD(FժHr4*s
O:ĤVdqaA^?~pD-)&l?P
ÜjM5ԊQWZ|:JbêI,h(ɣ%fMJAӅnfKĈc8˃܈t;~=EH{Z
."l -Ji
t.=mL|9U	!,F :GZt+n
9yP/|CyЉ8<[k)Y1~v8EWOyk@}z7q	F ȴCvEH[t5=L)j^R$KYve
86~I!{II]tinUDӎkԯGt	Նs'gs`beOlwrGp,I>eQE9b̜a/MCsez;4@k*yH *zVx
cRYLK4dsbgPoZ1& 3=㌕ΝLJ"?<qc>ꀽURJ	s*ѼdKFqqU
05>QTMsP TWœ{v&=Ri!oHhK-	k8&sPɰZ](Tx[;<7[d)'[*]}~or[ l*
s۠oa9` 8]D/J݆ ~}O};txT;b)
T[B $$;'liQ7"pS`>Cwy"2F9
8P:$"eFq9x;}+g8D3aCa+Ų#]4.%3]wץF
pIOߨ0%~.޹t|n0U	h?WX*t'oe
Ly\Z΋p%MdkSObt_Y?A_T$GĂb^ܽvMn9/\5&8`^@+q5:n:nhn+*mj/wHh7B|B'Jo29G .V>m@3q+6
u+sds~0ZkFD;fKױN;ӻa'S[kfշZj[ZHD}=!Q炿E7F,?^@	rQ
=2߈jʸ0Bo
 ])a&v8g7wd=CneN<6#	3mn
FXӿ)f_!ʋ:5(/dUD-ѓ*6%DAZ]&Á0<[
^;CtQ(J&kJUQ0yҚ>0̱:{}37>ĪfB"tºx[Ӄ*.~˝:w-we&]1SoR
V\sI2;>byp,K	W!PԨFH1&?MK^.x V^&98෪hMm.e{uaWkP1@ۈ&OyOBi[@0d`Gx~ݔiAԤoQ]@a+6QJy\3'>,*TKL 
_6ٓ|tP,8XaQVzh{<ۚM "kUQ8-@	Bft@XR#pz#dg40)-A`zB? NJE{ 9f&%A~PŜǡ58:mA0ߑ{؉fJU]_@'dFyʻx@θ*iӈgң)L_$q&g2GI8	i2ǁj6ÄS\w CV ˧tSrq9W4*{'_4HgIK ܼGɿ3(TrNCyot]ںT/0_̢؜;#-ۻ51>nPwRj"G@1
Xڼ Vȑ-Փk!qJ1;N,q	lt>n5plk%*qxJ5ӄ\ZUmqWs|[\*C/#&]g{ddضM%[Ԋ
mA|1ƜHi"a'L6qE쳡mĤw_={roSTK3?Ew $Q`a0@7O24&X._NOv\m<Y"xv&`fbL2<F{4!=]Wp9CUBx+%z^W^QQzӼaA?07 %ыIÅ	>/
|ZJ3hST_V>w+<C[|wCPPN"8Ex?Jhv,
31ĻKI!*吺L|HM|GOãKE1w. ?F)|FԆˍ'^"w:Hi0W8Eda|?=1=^3a|$nRO~&'^\8;o|ͱ9>:R듊nҾ,0څ8yY^Jq0A|SijC{(a G>N 
f~^aa K!h@,{-'BG<)37(' 
QWV(3g}_uл(R;}|aI㉞!lzY0%K O*r	'7u2FS}w/,@{u00lG3RHNuXޅu~6lHV;8,Q
i%k炬8s,F m;cSFEPJ?)M d=>lfg;pg1

ܙ!]c ҙOѠ|H⫣vk12BC_
{dwOF96Ր)xOhK\Dj0sF$p>+LB=Ր,zLutq:ujʐ1)$X2&u
K8UV*SbIaMp=G5 4CjBk\tEk[4=Lm$2nM2(ʥ.O=p>Sw.1sh
)rI2R[o/U,co&#tHf\Ćfl.1oSUcƳm/l2|i8|+!&_>"㜌GSWdVE45.;e⭌bQ}`3]Y荭
';`6BArEtc
y&ft/e.{no",i26Au}ߜ2vgo*WZƛ~E7t
TdDL+|M
is+ere\v]VBm_[d<)(K䛢6:
/JUFbHٳDHKkS6
ػڑZaMU!k#i|6R~)[YjFM@2S@
z6,zKuBފPnFSVIn9]BBɻfzZU\KYAT ܀Z9?8|FۥKf$dՌ~b=CkwO\NS΄-0˥OIڥY?>}0I5).ЉJI<gT֫ BȉUzL~V"}By]Róm,<|O,_VRSGV kVVFp+>*5Ax"V|UJNyH3}wAACQ^dG?]+	4V]|Y7/x+(5;<{ ^+|;hWTjlwK+1Rq;\1c7,]Mݝ!⪔18$#H7AZIP6hMpd]2AT0fu::OBf{XC[
qP8$R4hxp%JFZx<ӄ̟/">lT7r!tHmÎ`1gj`T$c2[	|qݗV++]
Q=dՏ1-mrga	I>	犒Uf7v>+5<J
tTi#ɏD4UQNٸldz9
ܺ
[$坩Bzla!6fR
v2߹WiqmO[$O	@Ft9MS/v0]52XuNCD׏؉	;n~'}QBviXo{ӈdhZwmE-[Hpq)U'!Jq2{,+`nkX9M@Gֺ4 yTrC{eƔ	LKavIXݰϘR2_,%=oRwar>_JIU0U_+Ƃegm5.4oނAN7Wb*iϋDK6LvV!E}*Fc!*
ٗBW2YŁHvoJRʰdyf N}s*8R';-D`Bk~|UilQ/	9u3HYbP82X-[|(њ]գq{0Tx%;aBD6BZ4|ŅQe	~_lքK<B+
XT"xy8LxUFZI7`Dm_r_boqI0,DS6whA	Q]Q-w5@12>N@M_*n!Eeͮ㾫m:i6.V2|`$؝WyU66t:L*M\DH|K8. pO@G6Ě%rBqj2{wKfڹOhGdǃvg	pzLNZFW

	^kwt}8-.GUr
 ]@E#BL:}z%0Pe!A8{z+xr g8)r)Qowy:vMd~	ӅϭҀ	8HFUb!!9w1q[8
(ww`I:i"zi`AFZR*qIwhNb{
w)x<\!'*+x6?Kj8
Ek}*Pm_wPCOv?=;V<~Mp.EB/
Pl7-PDdoƫv(M/]vZ;ρJ־i*Vuw,*+׿",j9c<(ݺ[i6e{svonb%4b^wBiMEK l*t`WA3"Jy%H?HMx>OI,d)O]Ac'2.:8^tz:yD``4VgG)*ZYii)?4mf!|$
eJkve8,P@mۜfThuli\̼P;}63Z缳I=լ>tɔD`M-F%})OPOO:yEÜ@s fq)k,x:uDŸ.fRo "t`,b9g.ԢK60^\'ݕLJ~ISRm~]3ٽBUUDDy
~aӐe\䙣fpbn$jgf4뉯,̼Zt4> =j
1s&?Z3-ײxtR9tHCuYb
gk, iR`|rk8=i%N"0
@<)(=۶ɔD~7oEN}QV+i68,N#jnC5O5kٚJyKuGaLWP{UWT Sm&)I-eq.>`HM>V,V>1!GX*uz*RB3$N)91l`#eiYUotlB>nƁR9vS
m>:863RH,9v3Ft=Spi
X0AO.;=Ǐ3BQ2gDiGjX.7e4WyBp\\ D[aY~.Hh^bq2i@,MA!AQy.0>@m^3:[itmy:1WoKI0g`c13(u^
QT(!=}I8&!2v'}kS Ƅ/R(nP$KS*#P.Pi?@ݞcaAUxX
}vyJP
Q2*e<^&Ug!o~j B$J3yv[ ZpO|DLٕZ¬FT
k&x}g6nCDI?I!ʐ,IC=]7
Qaq{ǖܾy[+qePW=/YڶPr#+MWp~6>:r*;{LM(q~VHfsWn,`1' S/`BkTAp+&HGBj0Hl1+قsNʍW,..&/!hka`u#=4PH]٭"qMe,/!2L2FƼR`?4kURi>:/O>6)֤2]{T(ˠp'/j?+A>z|(𚖸^Xl%mX/eleحǤF|=nLDicAN\ҋx-|pqX7? w3%!۱uWQ 
y~1]MYNʤe,.?	clnbV"Xn3͈vzVfQ,PKiWb~95k>wf <
 |,r;|*yX6VnBwm(=bz{'ɉ@t0qGrh7:HS.4/<v1LNy\Iw
2ek<<JОtV3RYs2.1O>Qc?]k^M܃ F&Y!B~dOhxdmA-]T3,kz%\,3dn莸\{'Thz0x31*KV&{	mKaБL32Y ml'P 9B)FBՅ/0MO:1LT).%\"D|6-N3}Jꖃ=yVxxO4== L04#hvByD'Js6AqCK
De+|1ŴS`6rPlamԷ2t#?I`x ۻ-bB+GtحMvu\:ޤ2q+AMT7*.{mu@@t1Iy*{0ƄI}r
cPQpf-*M7̻K#3pC{"F+!oE4((#V_%gVe}In
12I\Hj̍+Kgb[vv= `+24goH&<N=3􌄷Cp"aV53wZ҄d&1T֠34O耈,CNמ޳5KÝċa)v׃K~1mxGH1>vNe,Vo$H/N |;&>hH>d,dFYlDrx<`Fܼ$ܫDq&ˇeED`:au?5 
ı$gZ'2[լO3xXiK7`<j>0\2B9DVl!HuƞF1@.䏠[mVxuL>9kVW%>Kqc"j`ɡAɋq_؋5]јe2pxe9F1d޶o&Ky蕿ח4N">)o<&0}n^ͣlZЗ\5(0<4Pi[]N歔ESfy0c.9놫BNȨi2/޼2u7/BvAz]\%Ц9BjMcaq` F$aȞ_#[UlɁDoFd݂uY9ӏU*m"J<Ge5ЪL; mtEF%(ၑGC>C9rh!lWx^t3{!{I&b7S=sYf^Ԥ׃=1!r7;h/Z-`3^J'Žik]+7-SsnzK\:ꡊWl=*5rVR!$J~y&N'^cm#UG
ԡwH)>T
t\2Q[7iwa'$o`JI{COoQ}y4@~Ij7ThsSC0=^I4pslm<m2V cjZF )ްK&sNAjMo,g
@
ffZ J#ԬL,xK5]Aŏ,pAI]ʗbK3H;WHnP~tQaL=xaZToMgWh8 (#$w;&2۴cY"+P`puY"Cm:(leP
Bhb!]|U'vD<
fHo1`M8^7GVRWjȷ\IG.&rj:t`%u
Q{ػ/dǋuA|؛N@b),i5&3'h1f~ۼ7"Cm_FEyJe(of.OyGMleEsmBYʜmT-ֈl
<u(LM͓*FTe,O~j֡o!ho<@I B]f(W:> ]E>$u!;ij]kGx1TQxmMԠ;@,4N"@xr|x<:/_32b[qw\2wUª:o.VM	m#/~5+QVID=JU\_dzݸE.	H(D
\o*9rp/2lń:=h`@̕f7MWJZ^fngZݐ&.
`Ai
)ƂKl3i]l9ß?o%N:N}<>#z"~;eN$WxtQbWdo|JjÒUJO!WJ$$I|؉Cj9V+)V`dN!wJJuMc0Q2TnY57x4(%<i3ǋ:n|I$TZ9EeW
a.SFu9y{H6`\^}򝒰:jDߴzc ^]ANqy}3-Wb@TQ2UN#hk

=(FHI|9y:T^
L\pkkwp1٠A%1i}bGO_+3>-+	F] !+Cy4\JvjXzAAOOc3quaԕ^QxՔN0X]\Y@ӬÞΩ<`.6;+ɬ,+ĜdeO*jz9:޹MgUYYCF0Cj1ay@TN^RdyX.F<rH@vR@614Kə&0@f5<Ou:,0 $N/%)^˛XAI`io!m]/s} ~x	U*s+0 ]$P@7a^vGFtPj yjq(zCؠ0wQ"`RbC~ug{RB`;"f<C:ozVKeՁ[*M A:UKu 
,因Sʭ|+b5HⱩHy=. '{/pc6B0Мc;˿' {` @Hy(bWZ鋢v
U1 @,U D߬PRCQܳ}!.අöQ6QW!EwSs
WYVqF1cӤ c$_R!psd?咘,j6<xL/NG쾂:`RLbw91Td7ܙy\kɟ=ˬyyyUMvtJᏏf;9~{Tؠ(D	|Zd<gxL˗UƴT(tgzcjĔ=ga'Sҏn953;Š2޹hbٝ{_Z=#+2MN*:R͔ʟy^`#"88Y%-?ĿgsMTN'Դx	,Al%̎u%OP%uc:HѰ)*Rm/QlX3@TՂRw8qP	bأ(nJJLvS:3m.7+f<
3׍4JjsfM~G(hi=i]`_ "2{Sy&rŎ髰ru+ܖ
h]6`~_2)7 ߞ.xvH>yD莖VӾxf>=GZEdXxȺo .aC9H^}t
O-葛^ѥvWWSf] ÖJ0l(vn3PZf[m]%cJ:EU3\Ix#W|JyV`	;YYtJ4v~ǧѹ{evRDR7/So~䶦A2l瓧B}kC:(jʷUc?S0"Yj]`{P;IvZg`cʔf,Vx;ζeSdseGk%qtFqgFf+m>8j@`6|dMϖO;A[X=J%Au\&YHkT`䧑QȽIb~b;!/>mߓ)iSA
4~C7i+Si9?(^Gj
 |K[Ez7tQvTnj8IgO=Eʧ5xcp|p1v eqkcq-Vt゘9u{+c4*[Ҿ(TS :(kvH:lW8O?XZmq@gװm_K-yzFfyF'UPASu%P =T'	Bs9|vr\l;<k].@V7cx.8|fG$l"^/$m/{)QMSGLСiom 
)YB4iӧO]A6(^=HO3ŃiFjV\2""67;.kZG&i51>g 1p u7W$b%֘C4NR6A$6Tu1gBI/<	7Fޟg-1{:ҠOŃ=ͽԬB&A(fUU@oZ4_us긘fw3Vѧŝ8JZ#,=JC/g:8%
L=kbbF2|M;d5|w:6`MrI!u##Ӈ
,<\VI*OTzk>MhՐ>igT Am=<P&L(qё?3#GOlp던2;r)-Fke\dJ
9KZᅯk-觗bYp";h,%Ћ<|K[j-	b$FPj4dE PURHmc7#ouv'~mueYWeM)+ִל޳ _
 3d-r}_|'Ex肀@%ChK**Ĉ$ʙu5wPB׿l(˜Yp0:{G=){<cKCٿouO7!}u\%dHާeq''jvId`oT#JM :΃rݰ!]M*74II)Z[)][}26<h<2Ei&35H{9dubeDHxn.	^jքՓdf`,&pү)W.E(58L}帼<L!~[ !8o3pT-5reI8q֤"䋹"0yW7gizΙ*~4x2zcH4&8J&o"dqf[-v.Mܣޮ}}GReYy5?g#0(-YO>:9 m>Fma|+8pV	r}?iz<lŲFHkxAAZ {d&=QgiqUQH>*rK'&_}RU}
Ti6/
}ᣁ=?3+0~/н,\5J+s&
+
_1 =c0aX棂WПNp-!rVBMrЦ`>""4
drE4+$KX>uh7F%_5N.u3Ց`،lh<O,-`F{7=T+kٜܢ$?ZEU}\w8q%]cbkA&b jΖhOvX-:dT/6sx&xfob'@(ozOƕ0O1B-@~xjI6ˏڌ4d&Һ1
$کohx]Fyι/W L'5oD^O):E1Nt:m|GLa+Q~Ó?lU䄝Z׃x+m{rMu[g~b_'}dD|JjpN_ML⓸j]
hF {ϥG*=#tv|_9h	@vC_V|mW++W=<O+w%$k>՘Voc\&.Ē#àcp[1o `M!/z9ʩUʮɇ}=LCƫ"c
e2VKe6mZԖ<G8vXߤ}35d-qg( ;
+cԐ[ڻ=?%RhT1aO=/ZFӷ7=nxƟU\dQ@K
p/0:AgA3~'tw/hvt
+K沓i:
c+A&҄EߦOH:8o=l'$)To5ĀFڄg&<zrY	z=M#JtfO2^rj# JD?{HEo}g/*w NZ)y^^sy:2KG 2᠅x"Uc44@?#'pD[OMlܑB^J5uV-];Di6Fv&#t_I8{.`hާNߙ*k$Aə`Wqh/=(s2Wݛ3H.z"铸c3?X|ph"3{{bژ[KrM$wqwsK)ׄEj&EGo?eyPyzX܆ޏ>e޼K9:m:t~t\w`o۴r,`We4LZl&~`ԜCXŘVXv4Q*΅DX/"]!w&E^~kWͅũaY]>d<Tlםavn<f00 Mom}r3Bos@!Ї]DR:ttGY
*V-·@B3w7fNF.1WH|n1}hBõJ^;H::L&;g^E$֯GԴfeITNvwt
բY*muKr'>J)' C-с
LU,a@g.7+,z|agr$JI~yfkl!B7^֣剻7k1O(&`)8Vqj6	nN*fr b28(>߱EnrgdV9U
mE9ZV3fJq
Fn~w-I075RHMeܡya4e) )r%+CPzOG0nZQWfb
r,P\xeG/͕:9VUß1}!!&,ޡh
TI72➣N8O	\u򷎑b3p~UYmPD7a{k=rAR-^TVWmo#0)elN8;]D=-* WLʙTZTpp0;Rc*c`-59w0)Mwl7à؏R`մ%47Q*60}p)"f6ߟ----Tx
ݨpӥݍqWG͕L4>n#3"/a#JXmreYu"ѕ@&*#8LB:C3i{v59VT薼ЂW"Lm Qzx; 0{'aO%ǠU)K5Y}ZbJDV޶ABnl}{]vK
MFQ K#8̻nR4~W.n.}L*fq_aX|tntGU'Q?cL)am{qNG@|Kˡ 5MʽqJTqК@ObWx
ܗZ&KCٕS
dxͺX}¨eVIhg0.z^\X~F]"e<)t/UTfC!m@'ٲ"p@Bl WQ]TR|(.e^b7r<{dwsӑ5HJmѲfӪpHUȓ#*^Sd@j׫g	e6\{ڐjd/s	c,Hb|rkFl$l8TS^.Y\q5zj/4o_[z$1{ҁSSW*q))PG=n(õD4(Fk2GKо l,
̕{)OD%ӬZ226T<z"BSuf]yg)	뭌b U86(w,(1A5CL8U1}cBP	?qj6nIRv۔F	xa_l#M--'$@n9ٲP܃9Q;ĥb=9
f]ii+{/~!MPR OSU!s竇BlrƗgT1$crcQx6^\o=ݔu`E]Q/L/+,` Hq`/&5V*x-Ǜ]l@-UJ\|iu3
~2v.š]W~a dm#*m'+!jrUuĲ]sgNz#(<!%b]8!M DrۿBP3P)-`yD7fw23Vϻ/%KnDl<^ƚ>Z$Bܧ
<`wI"!>7RdƿIba$o)8Xjb[D6L;E֢'xsw2P:̛Ict)2^[K5uP@U-SVXUC
䙷15{5]>%FM4넯]$e'W1A麪>ͳy:qQxD
BM+$#U/ڲ4_v21oxSH9e6{VU݋2=VF֬Jz8WsP<NaZ`&H )dC,̥}{U[娫NJMϮĐN~oX? 3AC3b.FjQoT}ʕz@ -DoyسXF%E6svV,w>2JXCphATQ:3OUO={7^6HT:/<4
2Rh'^g9R?/9lN'?*/ciI/*]0:a/a~2giyǖb+N%CjJ]q䅄6}tDZھ	K]`x`y.ՠ8]
TDMFl?e[5V`=HL?vBd8P7=*S	$Gi%>g[|Ӂ-03zR23x@-{WSUҗx`oadōޟsm3whޯ`AҫO;e*wgTqCsZ Å ΚS-.(f]PXVQ~}V,nGOj-M!S
U
F }_n4Qͨ
àu=ܱ3-!Ҝu3\/Riu)#re/G7b34?Ƈ?"cK;hxՈb4&y^Zj(1t,Xl;t؋R%^d+㗴Xxk:hS%n#
2@
z}Yp匟`
CJIfB^H;] 1DdfwRծ2@JeԱN@+!B?`z]5Yݷ3N*&'WxR~L
p׹%6rUM<s}[廞uPQR} )+bz
($KGheHNɋ1Er\Y$	Kix۶){ShH%[ֆaao(hЎΒIT}dS䒍OOq}gh-tUZ^9_zz9a
Y^wBjnOB5OӖ1w2F*m:>KEk:4?ѱH",_dҐ5Kԅ^#jZUĖ_oT]f3qYObNz6 Q<:Nڵ,8zs@y_0~
7>(vk'HIT9Lm9gx[9}4L{T~5Esp;Wר*5$G/%ة.#R!
Q.ҏGυa=LiKTu=g,\SY0Kۂ[y4X:3+VTzl	A8pZ (Y2G2ȾaW5XS@;8aRӴHD6Q8U uh=i;:-q c5 *	bS5._+ sj?/,-1Ϊ3؅ó߆YF*OI>HaA2RR$j.nIjhVqןP標ǟ8f5[ݏ/cmnomޔ"120}H8\Toҧj=?:+BDL0U`_[Z4ʌ557Dϥ8Dκ>ݰbK2^.Fp
nM?c%dykX^;BfܰD}F}Riţw'g?ru`	ו"Ҿ
l{]vt_\].Hr~Kc1)5r2vI@&(g_ilH-'}[902ǚ.9'М8zPRַTzH=%/Yx	qKJ
`w'ѕ$"ar@Li@}\\k:ʩAl&LN2
"CO#,.xOC'ĜE#=¿H	=vElh+LLcŮD=A-W.%lIf7o5[ D]=cd'Yx28].өR剛H~b)ܞIhoqß,͖>
dG%6̎eяJ^/҆91!c_0o26on~)~:M V9Q8ՍaƤ%j:߻.#^w9q㚲%3b MdbGK~NH'e	z*,aWʢRޡWaewKm$ )uZ;Hx=r3
Uw,0p wD> I( \2m3=6=cXX27`)<oդ)ĞRf7Nr=\~`ItѦup5Rfߠ$KW p}(orG!jԓ^oe]LtȆdqY8䬤|7xNV2Lǜ~6ueV'NVm_:@xP=i8yxm="dS-H\H\EF6c[+,@mENڥ7~O&-~	t

5vEӼuvʧ5:qݨ=qV<(!uj(Cyp3ry.EKdoL+ή*֢Gv\tDBaqVjޝC/˨;GK-l=MT?h@֭ArDh_
kهYR*?oU
I	V)iJjݢD녟Rߢ/tnw%}f!=1	Pj:Gމ8!?`ğO8[fhdj`q=^n1ᒜzG<e>GrsPG W٢@	y*1i#&{=:f3^%  ,9эː`Ԍ6HjƁw1|C{u
XS3@~Ԗcܣ&}/>G>$\e.׵Ĝ36e47S+A{$kE
JUa ׭kѓ	dCBG^cq<jDbb J4:OB2_0e9MyrMF'Y%4@٬jS-5*X&-ǘjGSz7bD"bhGS^NvcCR*u4ުDNȴ1qZiI`oȒzUXb;{AeT^CΚV<<!4Ã~tܕ*zG|'UJQK3\=*=}]x>"T]31wY5Ԅ3m,ī)u@XSBk9W	=bu6yR
$ Coz΁;[Kir~/܉h\N3@O~/M݇+EgN0k0(毜6J\6t4=ڻ\^ѽ?ק
wNckK[L
v{xX"f;H	3>mGgu.RkvF_BE
<AL&¿.u^
g:țow7R[OF[ T <X1|INpq\ڱpv7u4ԛZIFF@kTC!ش/SzeBQ6JW7
ϳ'cgG
izbP?(\)6tG\?jv_tQ&	PaPk1IGQGW*(y>Br$r(<ᖵX>b_Ӌ2?OM {
]uqo Ȕُ(`:}-11v-nqķAzfekźƵ;6vî	
:V	,tFddYמ{ZHjf* RE3sM<YV 싋 iŠ`W-akFJTq&aGI`(jB[izkF>s]{z.׽OY08|}9wD
Du?5p
	&L_5|ٲtP(Ry["dͱS2'1b".^
ѩBHq2_ϩM̐W͘rR@so/jycQuZeK>^d;fu`LJs8ᤵ
CtNbJIq9V{>!?7,ϊ{;S74By|`x#QF6[`)Y8SO;eJ2	Pm^i_!&
jYf(`g.c؂۪0U	h ӊjR5]m{[8xޅ)3t^vц}'.`pG#Z32hsy#jyO=qהUTq/dG^T1nӰLxC{jV0I&
Dɺ`xj>Q`0zf'֪H|>	&B~ P4 *T
Ṉ^٦EoDKF:*uCC`(fGNx*"Fm)C)g<~iF'r#vNv0I
l~H+#1xCζ
)SjoL`^bO0Kt uENtʠ7wgYB	,ojhچ@7y(LV
Jz,(ο̵(ɓӄe'FN뼟b3aMb9m?!!^52g&wW UŌaAY/0YmM~z6q
f{JA]IKˋw~NXG5n\ޏiIPޏC]@xWԱZ~kI~HGÊ}w/t,J֐Ǯ
\g	6&C]6sH 3Mt01Lsi5VɹcRtyНiVYXF+ɋ, gzxe2L~]PŻ얦$l^-x\1?Q[;{&)ruWb-\'y22L9;1G |Rf
2nPހ-"4Is}dʓ!knP?x@WtUx߸YI֟lG!2Qr1qtH;#WIPtbMwǶr67}HfB	nиs;5Kx=o~ychO0HaZB$lL6-ZWLh9ȩ	IBؚt{n
q[ol}Ef2ja1
b݀3u`m&bq]6tDs-5T K;wRa`2#i֍
Z{ᓥ0z$T>-Zm 7!mmB:(""zH4aku=`?80,nﲇ׊-Рvw!ZlKͅI[{sqּw5)K
<\G?R-\FrYihھ<<( 1NxJs_hPX=ڪնj
&O2SH-_s0yv
aR%>r5ȘGJnI6+{=XI3źBUԷ%/h̙h'ŰS1a+ghXSH^e`39,3
rvUi> hG]^^g X-u-=a|΋w	աm]gr|gb
a\_{_9-QQUhh"&73#D]Ϻ2"9Τ쳬޶RrlFad94
	Nq͉.w-ͬQL1x3AE LR\Re *"g0eLϑX.^ݎB8̇4ک}dHe
t703'F4V0X-f	CuT{,91YC"fIQ*i-%]y}Ul#23oQ^^=˲AVa70w$9TPjg/Ħ_@BA=FqEk;ػV#v1[ 

e	u &xa`cxrtU0{\)IkBTz,`2<B Nʰ+*ZɓXTd/Q
0z
)MTZm#A^&97Ω
Y2bn;g΁-u6Fw5`̳x{d%JO}5	%<yBσFHcz4b"XrNIf=/&؂T6T=AFp!aem쨂@ug|$kz# n5̑it{rXIg(nej&spd#0-V>t5%ye7rTA2bY,z֍{K$XļmVF*.y5=7rʠ 
rsU`TPݼW$Q2)=i/u5UkmS; jϣ_KI0_`'cn_&gPk
 PK=ƘEUZ%fM![HdဨB(B_
'IuCҫW4`5\_fs\Ý|Y0nx-	I<h!c@O 	'ӧy^gܘJ1 JlwaHmPϮ4].=PuE%D>؀E8>R$;KCj?3I)w9eA^߫g-s^Uz*\,#)ڶ_˾ϫVOp6 ru#e lۙ
G	`JB$,fBU+=|D39!9X6vX9ᱺm'.iט8OȲ ҺX;z	rm#\hP WLa
l"&*Fq#Am}t4=]?f}^D.NfB'`4u#T̑H)I8#kx|G_lۓ?uA(;'ӁӕLLFHeG5siqVh,Tq^!p'=a<$#ܒxxiF+F0+y9jcHLM&Fl<[cl1$6h,`TC=Eoٖ;d}ÆM?6`~ƲaIx̏CT>C+qfTU|X>p.5b@P'1]4
u[%kgQ sx"Bv?v@z_*A^͇
Bב!"I.ÿ.Ox3IuKwU7X*)'(. 9@0q(hEEXS/3c)JBQ!/7\<)瑱HQl-@L,i$1]^L]RyJfX${'o@>KZrNP^csޥ0 ,}LOy,W_TsTGO袙!8ĝ5RrVHkDj;Q,Y:ѡ4sH ~i/Upb?[߆HNi1[GzDl^3T{ >X7,&/e}FF!m0O}T5h0;Of+ST:|}'Oy?EPϗ{-)c	JQ!kɐd;=;a7/:	4&cXuA8Y5dxV!ьɾS8{
]cyKQh1TM~-S+=+8'}
[ORj>~tn"tA$!^3D,j~k5Ŋ۪I+?鹠gwyvV&KRv|Hƣ˓QS&9W&M.v2bPy2UPg/z%{`,[b%,ɱ*ېM~+ع35ASH?O:L^|>.x'k<oF[yMp$_ T"/|8־r~:>8el*#tU_/ax8QDd:vr3'6M][̂\S[^#PVzN:wX}E*S]p9ԋi[ÏnI 뛐rP5Vħj)1zA`26Z:C0	{C%? 5΅9xsjt8Ubl:qESFf+_ŒvbiW~97~R3 ד<%}vvsa# Y1-~H!-YcOE1JY**'43Bo|_}gP/xsS׽?
!|VǱҡԙ.F
Á\7qL$
)S4y"i`O?0HЅs^~^zpE㉘Z\[$1lL?$OjƟ(Q,+o<R u
,рSoTf~?IҭFoxۓ|EvA
sKY$jSډ>4^)G	E9}gj$mx5pȚPԨu>]-3f8c:Q7?. J{=s(?:n(0R־!QX)և0^S.98de:;㡕8
fP@
]q6;<IJP,vz*ϊ^E>.7C|:mĦFތ&\ԐF/:|ىQwS_ĈgWcXN»hTS	g:Fީ_}8Xgr۰P=Uİ91=Xx'Y̴M)\Mis
t\sJz晣ï 5L|ߎd}]dkؔ	P5?ev{~WU	^/8ݠ>r`Ued|W;.׷>ןİ rOBA@L`̊Z[{~@-Hk~]
QJ6qDmbKaDtM3\&
Pb @ȫ&\Ӗb(~-龔b @z]


Жb8hkMhu:ymFe'5pi>^T0VPA-N&L|t2q[?*,	]̪Gr0h{6!$kTo$;S -Fx	tvfWZ늯E1u3hf	ڪWøJKuҚLT,?P
w!!%2UFDVmU0cUP Ρy SP&\Xѭ>$mf_MR.HPGBq@}V"e?G&DUl6zyaX<,@wrN*q
FU߰es✝c	A02=gpq9ʟ'j:Ձ-~S\YH۷%i9v}03"`2"/+!EEH^2W$~MosHdϻPselNkBoY+~6]5ۗrNO4dXp]LF'|CZ.f-~Db(Q6ǭ:}Of[F㘨}EAW5x&6J\"$>mK$	nv	;
G1zgMy
A|9hJ` dkx(Soi7{29ƹLзƱ=e( om96p 
R 0M-GL3pK癅D>d`ڲc[bzy
#"e4!B9Q
"Ii2a7_dJB20RЃUa03_Eh_^PwlȠk't	X&	DPG(Q,$89!ݢ9li?E,;,I%1٣k^.[w=t)ߌ(f9wME,z)#
+)FZCOpĲ(|'qDnW;
Ђ#M$X`9_%"SY$8{zdVۜ+n{Fڽ`
ۈjj-b"(M4[@{loW*vR<E$:e1Bu^zS>>Y3s:͵D|Rd울-<!T#bnM4;Ȯ `Rqʅ
=shw^NLU+lrlίfa3\ͩ* ӫsv$O\h=hb!KQrf
I=Ry8.T6Xѕ-Md%{Y&AKǣ3!`?Z8D8].t,_Yn,H 0ż&L"(VsZY:5?æI!%r3J`MB/1jZÖ_j BRw@TdeElA	M^W>b{#nJ"PoXSP%BJ;m怪k.R̰=gIĜgDI pBlQ1)ro]Oi1V"-*)4:'?,]ƺFYe+eJ$K%;96'C&B8
#m` _!`
4ͱ
5<K"(5Jܬd7Obi?5=GnbgcuPgll8ajp5QLϬSuc $lh9eb1 \mġa!PE޺F|`O~Y7TZ:]O+K.yxyefFGS{\Y	,p6C,niR-Iܕ̈́
hw#gʄ]{MfrIjD?n) 7	KuE&hG,	0i~`?ߢyȺ\A!UX|ApzW
W: 44nrz?AiV X`#R:Nx*MLIbe8Թ#;v/2H7ppX~pEECd` k@hd+% Uz\+<m@%	=~vߙs?S~AF-JK;z:快io L?B"UTHWSiEE Lۓ߲T
LW[i*iQ3]3_NC#X}	n's;1	a@yc}y8,7-œ-.CvK#})f91-0`{_:Ngi&)_NYdb'ي(D2^?2c
3_0amv~#Js}yU
n2@Nb]Կbi'm?ͫDvI.]øJT$@ߊHn%wyB,e:z $ef8Es\Q1ҍ0uՋQWNUyaQMܧǏ5!4b
ͳnXP 8aY=KP"KQTJ&x-HF "lB)&K.r`yb5+DwV$w:F~g84\ڃQJ38}N>v|'oF2<{I߱c	Bt]iQo{+:%}q2'mD\atPfͭbPC\J7S ͹xsOT=?F[T$6Iy@apUŬ=1\^s5
/bg''qAU=
Wom7Uu/ҔZط5_Ǜ$m'_dˀO<F%3MY3sM$/'|F7]A(63:s
м*Tب^7RԐ)ɢ"YΫ4;Bl%ꈔhŏEXBݠigk cyΧ!E	P}Klz[S$j"dɱa#|Gϯ2pVׂ8UꗉҦmŧ=RH?雦;ģ{>Pb<CK?")CX=1ĤI8CAr
al;!4Hݮe-9!˷*2s&?ToXU˵GŎN9"Aah+(:>8ѻ cqEF4t(3uC>DM<4OUxi^>ZouV*R;.%҃DAy~㼦r,se7jyN9N&EfsqP7OwRaUiK,0@^!OnD3[Lµ[M=bm+ˎy*#Ln|enhV%EG2lEu70fӯec!eS_qls¢	vZ(H]!Q2*Ϭ(-J'P>#OZ$ '	-ś۶zL=29jz?u"xN :YG BY	tHob<Gfjyt5*6W	0^xD11I
GM>R^Ay^>`~ ~
dG̲dP/*+<3ZtbV0z/r~?<#qU2pԚ*Y84|DfkEڣ:dWp$+Ǧ5
b]zA_EA&]>tԶ	M٨a$a	<yE`	NIdWB,f)ARak`R6N kȈ,
ܠhv$rdlǓ7jum	RZ:3?z.7NX`)>=tBjumRbA;. m\S|x!;K.z7L+_D]9/Z4Q5_^JCՖ+Y`D ;G")ɄyB_(#Ej*׾Χ`u,ò$T(ji(ПntZӱ銥7+K1xNgٍ,)$ѱ[-D\3/jV5Eqc[Tjq$0I5e(v20ɏi]) 101(XnHĬ1}׻
 Vx!Ə Or痫_BZZFy@\Mz}h'l~.D\=JvSp[20=kךmӋK"tnAℝ-k.:~*˿fU/zg
$0's^D{G6`1UE80<aq&KXXGSSﳎ`spW hCIYIw;pP΃n6PLp0<{C'ܶLWO_~aQC@=4bv

!4w-E̮,XoTL|[GQfr&HKsx*hcu$>(	)"4Pg$l7SKU$[ݫ@6GSe;o[`\MaNIp.$=xt
R!Icr`}`s$K-ӹ
la 
olf6>^0΂ ƼA0*9(.®\Y'W׽ٓ^4Od~qɛ)aǢ;AB892*w0\NP
IuqG)ARYp$b8,r9GC3I?->Wn>Z-8&6*(t0E$bOlպ*Y7S"G@~'}Hl]p\߮UORvg.P'׍T u\rOp@3+ B"P93~x*h}`s?|.eݳ=VItd x(H7`~O7`㍆+;<PN&iPkD,K\MX$苺wjxBi	 'bӲʒV߮hiV/c)+b"rۣR".]DeRx#Ƴwu>Un8;+x$$䩘L		ȍǸD	2>p2;)!U%|0MlAN&G!GM4sk1ﭧpҖ*`17h#Ods#y&gan]UȠ$:Uq-4L	-&2*9Ucҡ^a]~7{r(f]J|މX[}&4*O0Xr_o '(!y[RuJx[t'W	+
fUٌg;f ZY9  "N6&zϖoH$A@c:]Y^yW8fէa0>.hh7$t}u,[$.IFtMlNXg	2MAġn^q@_{EHMM3>~rqE5yo]H"%PKm,s[-OAO5ayF
˽Bh9٠!<.J!-xf\*8fbye̷߹j^ܯ}qauu#}(
0![zK{u|`3j7j%[".
BƳ6 Fŏb
$S=}O	|]tkcwXYѷ{Q/`rFI+PN/شWJFIsI]_tZ.g*t
+P*`>þNFGB%|ت&ڿ?fܲ6fzq$,P"837Fa:RK
)l3.ǠZ<w$Rй <u)S_+QWN(Ge
~,k(kۯ	Nxr*Y_FZD̤)fE#P<UW_RC5۶ru m8
 0;52_6֬'ltk*Wt_&
kJԮbZsDޮqrl\uKw<U6
:) 
0}{uta>+B|n/$u^Vq
iǂ֋c&:,D_$32"Qg)}F]X1Cq"Ϳߏ (3 pfK0Zy@:sn
k^Ȼ$Vq{3hYTn tf5ȑp|WVLf՜OZe?Zd7p>/w5=,=IeY~ڇ="]^nKz 6T+a2iS.D!]v34=NPU/`![
P QFQYCQȣ5JJ{m\杷2k?b
W+Ck*i_EaVW[lPuv7B%ky%E]Ƅ9OEi-ŕ~೅
knG!⅓>|N hAaƯ7 Y+!mΖ`Ӥ:=3k=·ʾN\;oWr/i1FqZ(iʦ^憌c|tAPy
_
r\:2נ
F.YxrG݁v,)1Fe=ދCX4>TΠdT	#.CVnocR㵠CXމlܼ(90W#
Ֆm6NmH%dUϑ[.\L9=9U9͙t:+,J1sҊ+>n}Drz	5&.sz՚г\B FDZ#rн:ٹnv792|hjae]OzV7ǗYM)۽z8;L`eO}&+٪ UkjB;P+`l<<gHlQyr*Tuj3`L9X0em_%hPCo"[f-Sԯ.0*O*Os2]y2SHIyGz;GC͜hG?r8>$1=.l)W4-vi]㒺rG%A˄MnʻwOzac?:z4TI%DY79>jhqԒy!5֯g0Ab3M~>~dڪ۹]43ΎOE͊?w$䜪yl2Y3]A^u0H:D˧lAx#Da d*0#B2ge(Ӣ?N$$l[I$XK{FKˬ]ŮԸu
F<Sg¿X*o3#p,,Indy;Xa\7^2\m9}IUygg ʭ/WFcVrM(YG㥏B}_@{c:	qXoMq6ޤ.LGj:z5-|@1K(SFTz#jq!wLa\[:XyY*shd!QСs
B2#BzŦlG
Fz`Th@DyllfQ蔕Ba{E0F>?Ri꣙OxAOg9&2haP8ݐǶtS1L`1>1Ӝ׏*4^~LGs@&u;!a;S+z߹h<q0<S9$EvVVG˲f)&zNSYȳk888ЪwK#sczvIqۙe`^W
6z3;LȪ8r`$+qУfeX^'LG}O+uy#1p=7%2TE&BÞ+	y̥Qh:XLU1WmY%
l5*PVi'=2il`g92! 	֧@mP5c%J4d;%kAs?הiI*[t7FC?xp9,3|v+4z\] !j$Wי c>wΪڍ	i3r䝳|Hӝ"Qe ݖ]<uR3g.(|@ḢDe[r Zj@)SM{+ ,}QD0H**>$mPˢ/HML\;ca0'Z_Aב:7U/. )6v=+c$ṃ@|ŝ̇;lJryJ}%]&IbX^AZ W3;} N_TOq-BAx! e޻O+GfK
.FI8lHլOպYV+%Uh˭z 8E~{p!SSnt춙B>>c 0pt՟7X; %m0t?0:F<CSHH;Ly~&-
'mh/MЉVWg(wa>(ugmATvӅVU^;`^#^ӃVk'ڷ
bre)ʦdA^L9Gh2B<)x~CWOt1sM9/@!2hnr u?zP'}5;x4պ:nQ."'},b|I
=~(F$(3wWX]
dwͱܘ!Xڑg_1AxsUK_1 ROGL 4lі8a%^zgma
u/ixRafO\!
f!r?Vg $R0uW77vpP0K <^PD3@LR_yqr4*$ًqjZhhA
55]VIe,9kJd
5OsK#6rzΞ6K0k&{z3e>unAoX/goWysTe؏`4l N(Z|I\zipxc)L'6H0'X{K5m6dvJY4^H^4/ik53FKu) pDQ+,˳K i>/e𶯦}w 3k|M0+K R"28DnbӝNИg+^ҠunPuթpB+ɕxt#^d]=F]\PL*ltqK	5߹)z}vtڈaJX}7;4]{j jaKwn#ZU
P@[Է.Юk4շ)U^XZFȚm9 y)	ʴ_cG&n
d8$5kgMFyȺ=
twyL{D3\va"fbcSYA;[>ZHw h-v''y%atZ֦;2yͯlGN%/a0J@|Q
fk45҄sqǀ
%8T{KwCPk p/ET(t䂏+K S89*k/Ȯ
E-.,L}ʔ|qRZ/.ΌgԂ{>j>r)U|iN8-,LNƚ([ΫHXX0rcc5s!csECSYrP `!AfC{
2,;**VPs rIAdSVf3ˑh}XxߍK΅GN&@T8dj5YKQ䎷SCw6pWiMI7l	G| "]>5aU[Zyjat=//{7@xd/oiu-|{e# ;4UtfMɠFeQJŧ-Gk;K<``vS}0L"Qd"-兄Or<(٥`5BN8've֙;N]S]Z/j6W'dmY0ЧMꛧR(|ҥ"%UDLv7Aw(3LG4<9M0wÌ	3sTm[Tk*'m[K֠KJm¹+vxAl+kH2xTYjsG$9Vm1'D65'}W˒dqğf#iVgR-cehHS$v$5eI"Hn@~0hԸ]Z7B5S
>.IU#CΑ)I%\
82xvQ;Bo7 w܉xp'\:]+}Am_+.$osiIxWI=1a'.R6$ZԀ<{vm41-4DewziMoY'{D'Cma˖X:m%3hj	(ysb_NƩ~FgL*
uIob
S zo.L<(Bf\^3rhvAH5Xk2Lȩ0Itsu[>ܱF esVL&ܞ#	44B<ڄ@+&!T*:b
KrY9PlT쵌xLkF?by]]<I#頲Az'V|W(Uڵ*UIN+<t[w7Ǐar\kn϶47M>d#r&#㲃t_~#X>Eh)\[_E4MErA	߬wo- pmXf
lUB9-kAs^Q(4
'yVA_PM
ۧC48𿺻o%|ԣWZQ	hP[׈68kvÌPVbo?}NʐMu`${8,B
Cbz/*~s/@3NجĥrbOj{KZ+?v~ ߲.
QM3s8ᰭx
}h")F8/m?<1zؙ襈AJ~|u;~>z\K&{&K#UT O-WUso!pM#C>R.KE9IǊS3!^0HdQ5PZ"Nh_BU.- *a+\܍	Ax=C
αF
G{Hِt]*:ܦuT..l}ȹ%[^vxs`lIdL@"b#6YyI{X˘»/l=Žn>gDcQѥ W?a_땉Ë
lK$[bSd6ڞoF=".m]׊'e
^HHHjMV.	kfݶo#N@jA$
PDG2<IwB!|Ǖ4/I( a|Zl 8͠π6ts{^ЗV$><8:|w]80$hH;ϩRQvɛ%WIuO0D%^2>Kxs?P#9]R4E	c)yAMA2K;3(#uʂ(.x7Jο1uuj
#vE"K)}ca*nD
%<6&*ڿag5aLsůHVL/o{ԒfdEjBumPiږ2gȶXdiwrJ3-ofb U4jU+7~NͶQ"RR^
{ez;ZiEj~B[]ql,}^<뷗ˤLs`C9gWCNyb@_cՅwY9+k>o@Jxg.eTqd
)8D[cvcJt*mk~b;W`0~XtZbZ|{0QG grF(M0E%H$LFb7;}_A%yfc+*ԑoS0Bࠫ3fuczD&woG 0CwE?40 S
shR#ZJryb}"[SPCtɱ=x'$OuTF`~f	B>ִK!Ao5h1(kdL6}j	@3X4ZA;8Z1EYa6w;HNr
_(rOZ*Wrlot)vBB,ruvxZX,y=iEo,-!)S>mnugKAsl}ˢJR+C/ʋE dcǧ,L[.RQJgYiTg9)cy*P{=M?sV˚>nѮH?'J&IΟJMYo5	LI0y `UyfD]n655~ʕlxZ6{rܣN:<$6{h%2Bʊ	!-#
xJc()>+ araGӌK!X.EYE	z&b@=?{4ȈOh>>[Qct4̮h?`rPsO,߸rDb;kdz0۫E<$?j׀bDzJ
zgRނ$"]	
V	BGbŀω'yLp=<Lgml[Ϟ_vҥ/6f@nuNʱi);n3ݘa=m{g,X/.ȭ{V[dZL'ҕS'9m#r+3o#[
 LڞWZ^GQ63JǚU(@f\q|Tr>]㉍ yhGje	ɐ4fP<u}!ˌd1k2<d IyA.?rCLOJ o|,M3:G":^?j|vy}K`|c lDp,|5k"٤ AZ&$SiІS,=/L4#_i3R31ߺ'ɖ uy# H*p]0#p^I_(r
Z(b<pzJ_=<.i+T'u,R$GJL*> Lu D'['/`
n*̀JCT/>HOp~H|uQ]< nA<ơewl7%MVs\PhjFg	}{DU'**#`Z98Ml./5C(s36ٞj_ϣTIsťB \sI.e$J.
)aǞx|gzHkT(SYBLŝ(4cJcE@6 ٴ0~xp&{-Og*	R c/e0[m}pa!=>M.[ͺR,7/9ElJ#%S-=0\,A%̩>O$ͭXXޚ_Rߡ~DT-Ʒ<[mnix<91b!{
va3chy
p)
=FŲ&;kA1OPtO|t7c_ĦRDk/֜[Spw{J*+
bÞh͔iM\>8"_ (\bbzf OWz맲,W>̙0Y%I'c:S}"ʡWJlܝ^taz]kWav]@>Hy''7^inv\
͒(ҺzGO]XTdX5X.	ootvBhƃt+`sTf	RjN0>sGVȏcQRzdtx.	QҥuDQE_VEdGB(\OY̺b-0KO ɂmCorti{^*YjL}|SLۚ_qQtWt
v~':ݪ!vf} fbݘ3:
Y޸xI4t	
Z,l\Y/Tida}HX(wa1o8sƨ?,=WT:<ZmFzRw@_-]\Gb6mIof(;@G_vZW.DtЪ/zZe4B-?=-?vS{J舠{{{+|YLmoғo^&/җkX[	µ"?+{6ٚ&3UaEՎOhV#(:f۩[&[s+3ߧYOM11){,Чۻ77PtSߚh²|	:Gl2 7u[(+SkإwhJL|Xoy%:i>a@+8)5Hr}`^&
pHb麏b.ٗ Rɶ鰑"\P4,;)b8>A @bI;0lF^t?pxi)y;Qzڛ:YD1W/>޽[Q7-J+lH+Y[d)<8({8!9:@2AeGU>FUK"Yҁ>ڱJ;7j}#1oRPE5i)\ZG.1Ds!=wٟg`$:T_nu4uI;gT [PLOcN]Iu9 ۬UKgХc7o`½YyWg+n~W=Ssi4p*~yYC]
\ONRm,8q@xG"R"T@ RlIjnߞv<װwO!CO#*@A{︝qlD&cU
]d߫P% T@_qa{29KnEgNbK
e7zopW/F:=NA٫^'« @'%h\x0^&! 
Y}NO0M썌x @
fnNyX7Be-5ĄZƊnRjb<֬MgX=)k4;(o6qԞ#G0XqyߠVL##G)8h?ȡgl*
bY)!TPmQzQjz綅	aD~SUXw!nvOT	IaPj&fT-WB;-i)1*$oeSO#Du4Qő}3H>=91Jwȷaghl!ǖe&=yE
(	^"ǒFˣP毷5:h'B] Nc&: @UG،x6X|A*:
¦ۦBb6'~2) q}^US}r):>+WhᥳM	ŭrU&ѵiV4z)Doew-	iRh
w0WA2:DWm/ůmt]lEgҤ.4vz;kp}9CvY SW Vڨx%;Q3~חTNwܘ>YS	@j5-Q{
vvR[hTVDjxR]k8LJ.jT5t)?^]vm[g0H!`X\#)Ġ 
1Zh#B T[>g!j`zQ lnV7{L]TqV`0Η鬍S9EVRS:pI$%s1蕌KZ?bb%ᘫeC1nEQ,y8cıS3L$*j@,QC|up~-jgY	wmH!D[ "d(ݓ7RI}~?'T=triV?8V,*tu	:/Cޅi!@}SR3@:y
A3/TDRD[6V6qG9p=҆	84ήp37Gې\Fg2yW@/trZŽ r2n-1zb眤DZ;d8Ses^;_G[!`;MM)6,T[W#K!UlfTc#am+Ҭc?oo?p{t̉X$,ȫ2:WZp)_BZ9
2d1,Q=OG	{(%G'w?@.S `=Aϵã$<GST_H%2[S vXj51<=զ5ǽBV~EܥTgBBښ3 9dHkB+,JRj$CpxhZ7=f趾Y?H0i2j#E1ЭUQ.|oko`MEY3:Jh(xSp&Ds$f٬% yV%48td߷Ut/+=1T\M*K^,09Nؠ@R^	aɧ&CL{%
"VSrfg(v^˒xSN}ޤJ>19N}((H
|B5U1^̶r&h2Vd\:ޔ^yώ!#a;,s"kDIV0lTfe	7|JN\RJGAmo	@!''\$u%%P\S!O"1"D(O;Pv<5ˏMNKV6
5IiAIF忿)
* f/Q O̽GENEJPxDB;k W[`{,Zxxa/f+[w??cA2y^ET
UnOde:g[FغJe`j>rP;9uwjS-+*eCϋVO(_:H!.CMH?+jj_z|ek1J2eMt7Xh_WoIcN2?IĲ:aôcP6VלTIm
.V-dx,D&hŴ?(٘`r~<53vS {Yd$cFb0[@+pIBWo2xn&15az!-^}@zyK;|8<Pf9I.7.Qݐ9I lhXj}>mGQ0YEGEQpq/Ty{v#3vuK|i9a'&b9%ǊS[gEe>Yc$O@@{MEТD!ZRbǗ+U
!Z=qȡѵ((BJg|3;D S@eANGS>V5)*5g΋:
qnY
yDcjۃ
$nv>vOU|+n-Q _pRCf#&IM7P%ZM)6
Il?k\,|ҧ
Is>0٥݋Ew\ɂ=5 O~5*֩jv)LFЭQŒJ}+8Ӣߝ9Λ끙FnL(;W&Rx
b51/2,VIgD"&g09;b[謱]O)ѩ&21Hc1s܈4ۭ>L
:"/UEҋft7SWhb"#.=U-xH,%6Jc:4*eFϜvNiJxn[KV`FG4lrPEkI41t{)Ev0
v(Ha	Q "pBwsaZ&5@%12_'~*Q*~du}H¬ī8t 8_KT` 0)p){;q^V&bIx{brP|a`=3,h-f<Og<0r98iJi.|Z*
><Zd[Z,c|#ڰFTglե(2bޙok!.@
m]zi?"ܱapl^mp\
T<$ϻd66z",(aAx۟}jє aHQB_uZ肌u"-䎖B
o~y˚oܢcef@ߝs&ɰ\@2ɟܭkRٛ58+gϵtjauHcz	10Cv,r9=ޔo&/e4;F]Rk.éFi!
[=[>\S0M>1AMqH<saRf9`8	>&)_[X* >1ϋU5żsiUV-қf1۪(NB$6;MNkbV`
7;~x`M:%8'<)ˋGfMcC@!])'tdG&Vʙ_B1_NkΆ^cjs9ZҲY:U׀-\-h:WzjCw
]HpoFeb5 L $zr.h-'
ќŀB]>[
5%5~"RFMNP)P9a1;.<G(Cm|_z ]J]sz
<:Mi:wGL./M񴉍*Ҏ`7*{xa^C]vn
 {Y/h3G(o
!2K!0&K_*LVvď㣔D!@hT\&/QSta
I/zY$zBSj
@X^HK<1!z`7Q,| ۲)* `&	@.W.-EТ-ua@E`(eCJp0x-`h|sJlGQ}DYM>o}_ֆQ~S [tgex\{j'z#SAnjE<sf?QtckWO&A.0o^IK3E:+3O]"M% -
.Y{kפֿ݋:C䁯"8}	^FJBBrd| ;gs{DێMjL$@S)C[Y& hE-M>gHp:J-ޙUEx!3%{(˺^KL;dMqsgQЯ7nSfĄԵHdPG2MR0>jDe#QtݴªN$)K|5ΈgC&n:~*8u;Q34k e#_
zɬȐ@Tmm8^//&^+A@NҀp)`JG+0R։4޳Ct^sަd%j
Ud{!Nr2FpU]\L>j5}E-U2nrP	[)UxwI2[70Qr9J0']si&\
ov©$n+oQSFT
ٹ~pA.|u(e0<Ԗ6$i,W<E҄Gl\WX9$c[Yf
wFǯo-~y'P =]Po5-e;ܙb꛵ g<+B
G"FV뛣D^?ˆMw'@f|C?`PDݞ<`kp
%P7oN	YUȡt_ǜd,6<p5ق&WaF,Ш0Br#S kXD|q_vɳH].
4eB7lg
Zi[c!%
¥4I}I3\i1ll`|T(a=0bmgCI	sِѼTF-Deųyd|{ΌZ*e,Rx*;+y5JTs,0#ufZ"[Ьc<QĆ;zym

lBjHk:e}I3iqXʚ`N}Gi5>̀\ȸ@01 @/'&2(*Z!`PAG'-N9~!?L
GB6\O;œtԙNsejRaem8}cköW%K7`$OpjBM2*U!{=*w՗=Tmi6;Y\Vw%'`0<IPmtci G`MKs=gfqUӾ7i	uYY߆%bM
Nzyv8㯴ũq4RG5xZK^O&O0%.2fݩjk4z#`kPLȌazZFxþ{'|.Gn(4yFhtRI_ۯIy]X6gگꦴ CN&Pyꩫ b*!ǔ5ߦ|W
F`x\7̐|Byqi_Uq{CZ
l?) C2R%;Op&+
Jj?2#qFC<$撛zg$CR}I TQ
`B{ :ZP0vt
+XY<AWnN%E4T%JDs-Sk|>ZNιV9`p YD
\k.V$N+UӍ _zrWj=w``+XH=Xzىatf\vZx$#IM\}^Y#}{n!BRa_xyEcɔ=c'g	mJY~>Toc+iSYGkVa6u˓,/T[좣\9]10f+%uݬKt
rk3 <'ﲧ3rC@O@nIvs
#\;߃<1Gs5e$'juF9'#7Ȱmw '
 Α_+~7D&SC"+w<[* ="6R$] `3S"j(1 H4Ч"jtxYIԪp<|
C krZfCm
W0.yPp5|kH7 O3
:hK5ԁ?BJcrlIf:'+OTjoi\ZjN%m#ONDߗj
~16zW(
܌J	g@pو`Y^&/k-Y]~D]<K%Ay}.TaunI
3irj)Tڮcm\)v8sA̾Zt[XNax207lv
ШHІv	F
E'F6[yXT &ʿ& Wl#n,6i6֙f֧.Jɨ7ئ?#
G|&ɮ'J6_j.{w.jZϏT#<`|8J%NOC_6jOu+Ad豺4.|eI]J
^1;yB7E1#9ʛYSm~Oǭ֢/]Q_%gnf
	k@MS8<BOqOn.
YVԄթ>ݛ-Uοi [ Wm
C,EZγ'.-GmU4
ׄ/u"B?(1
.?*uwF¬ݙJ(-^ F1PuL
BGvQ&J1V{{(5Uv[AFj{Zc"WǦ"@Wwm4iԳœJp&Yn}
[+@C5I:'Qf}s8*L"M@9ntf4(e9?<g.ĴH}Eq$bbkFeIYںrmݴ1.մgWNۆw4[BCHruƵй]M*0M-XB]c"@my=7Q>lqKEpzP9)FkŶ.Z{C>g )Ϯ954SM5oc4Tl\_jQoOA[p3r	YK4Qg?+ږ *wɨk0sjb@#$̅Hi}KYI=SUm7hɀe=*o GصX{]2~2~Y|uR]M
zxe6N;> w.z
^qxC	Ex-W7]]߽%^5<BVqjPxRaf,b]Utnp< ,]*z6.(W&%\ Z(^VO3Sd5?"aM+ML43L]΅?OC,ʻЫ_$`4Р6x@̛~oh%f3Ϭ)Ӣ~NQ%
:Sw+u\DI/\<7/3jɗaDjWGfWdh
ϒર5+}ټR:䉎2t'S}3^.vXFbTZ.CZx UFa1Ax16A9c(ZX}Iړ6>uyh]-
iUz`kQKZ#<V'WCA
'Yw^qeFB9N<Kf_59	I9$gـ S>O)$"68a>yr]zʜ.+NdʧGCa?2$N|FuY;ʏ+6z\aWf	`t`i#C],
 Yw>}Eq
ԝKLw$piA݅ʤ]($.! t<K_!
XP 77Occhh+C6eInᓧX^/$9l=E
.>McP&נ:^9vYrKxK9_Qk塕LBG$PDm,&8 @=IVː$;S)Gӯ3N(ót[z	a4ʠp$|gzzEn/3iTc7ъJ+UzT-Q9Smv59^PL\'F:N|cu7GŁt:r*d U6[3[OvpC.[?,
󺦏vY)̜<Y3G#hj[&vo>Ƕ)u&uAqٜɟqwFQU`[nrD7|ʔc#|hzlgw]jȨ8۞M:JHn
Cgrߪ$>ct]1Qs튪PP	F8Cn4M4SG4)z[
%%~^h32i\\
0Jɛk
StMK>դd |kL9 C+QuPʪ@
نKS
VNJg\Y6!l[Nuy + 
(\
bϣ-;M?h2qBhWR30;5Vf	 _~U.ZݲWb{IjCёs΋ɥY:JeMnoI0\t7qXCּN@IbɹTCguÊՁ.\SRNE[&,yLy壳"y,"#XP_F71`kT`DҺ[(jAb?9xq*z]ʾcA^L8#y[O0>VQ)H8ʅ'Dף2~)v_`e+3s/	9^lV(NC#vZԧ,3Y[3!\K _T^J%ZYqPB,=c'@sϦ9'|?(r^WliCId|R=YIZJH
aM agT!OR +Ö7=nzI4g@/ZN/21Ť++_yA
YpE
;7H:(G\|Az24^zm&4~T3@YVemU~ 
OD'<}y>.TiMm"iNa8p~!]V:4`p+(㴇v"F3WRɁQw)+ہa^צ?HmbK&Ǹ~@8i\5'y sGee^P=Moe;n|k减/K	<("Ds)ުQ<RvzhG8lJdRt޲
Bh2̴l9OܶYlWЏqF@RMU4<d|H*Č"R%>C%W-XH)
to9eʰ,˾1tSʋ$7}5-^D:gi?c;UQeF~k"!T\	ɩdc؅9>dtjk
CyO{#f%Nk?@&SRZk-aMx3oe1oƢRց0R7I/ t`y|G$XoxȂ#t-zS<{/,`K}G)vc܉XOj^7dE|Ca/辎Qc{%wWc n)g2؛#G WȂ`>=3ZZaEqpɿζzB-rԦ+N
%oj'-9s;=Z셞Q!4=`	W@"1|LַhJ*MLkX9w	`g=p ǘ|q_>E}7w?o@ot}痎Ǜ3sGcԒq0;pP ѧ"]75O~	e%|ٶ\ и&Ԧ1
f,V[Mf*6A\
VAcooBy[CmUl_ygX^z	0!iOL>lv.֪ԯa+SoN9=ⴸᏡFa|qDo$ZaXgT88^][XҳK<B/RǮػVGE;^PmQҮ㍷V"	G<=J/K'MLn? m!JBhI?%Qԓ3Wݺq.ZL08=m!  ´"
5r30OMT@:td
.[;wJ%ZOYS|1$*F"|lzdGI`ܧƮBUT y%Fe4!n-|/ۣ?2/bЧZ5-,j
=07MUUbO_8Nv}9Hb+s7iwPVSPё+"\ZKkSOY<x*?B_W.߰n<x8:`R<U7geyݑz
6`i-kotgL_T>gs(YcD;l3
u*y~k32N[Ւ[u+)*JdXEoL_ڱ0
(l	;3鑗x
82>ޘP^n/
QŲs16)Wsl;ӂĦPuoJ*i=k\p' n]E
rSYQd[8]e6.y*(K[7>Vʝgx٧8s,J̣y룅	#I8з_Q%^LwT
1}x	2Y'`s59Q߹%
^D+j	d;~t]׿S)uKg0s_~8RQX2|c]ߟ9;29o)Gg=ݧxT箳N:nlә>GJKcGtZ95kf#޲_m`y#d3D8C#,.zS:u}MdAB1xo99u7G(m( nӀC/S4ZidХٝ"i|ũ+3AmW$)|m;N9Yg7)*%OX!RYCM?7CXQX-FL "1dneP;JM?lh_\nvDcKyJ+J<ƊbkSt5:!q=cƟ+E#?LoG_eN߶6y1':==6{zW8(;.qgh8
Q r'sw<*V(|Ѧ!>\<ы,:d=.<
#%
yzT&!3^_1uK@oCyZCZ$'Cmˌ:H,@ְ>ob)"+PK>
/q?BYSuA~~>hfkм<@(`X,({~	}d^UMb&jzw=`̢67b6Q樂'Q>kl3X+u5IFSoV;ߐ3YH>ikdT,FdRo1c.`<Zک!N}¼}Mc-zc`b	)ȡF7C$暳! :?[ge~ʩk4j%,4o00]ÃJ6ȃd޼\"; {Hhdf<JnnC/#SCҰ8Yp(!5;tdl%$@wmđ㋂z0s#?Q,9q:mN\؅}<A qۦLТE3܁] yeey4=#9M<"W<BOtԇ9a䄥J{p{ OAqp4$PgJ	>4ٶLoi<u"ny_OgxbϽ@tB/AF
zI<UY`U,3DYV|,S֌f'+;!?y85ǐ5esuٷV#|s  o߹$Ŧ,TGMsx,h(kAr'fꁘ,LL8Sw'D}9+2CHof\GĿh uc=<f\LwOG:.vѭ
in6A{O+' qZ6t<7(-)S]X|U;~uUyw_-
ѮgU=?<cyݯ'띵>̞lcUYߞyٮ/uoΕ\6¶߸e_ꬫv2yg֡pS"j}PX8S]ղ"u
C\Jgo-("?1`7 gI<
X?BՊ,DfG&oMKzĚևGVm[mQxcLL`]1zN":	AM5á⣹C,'KL@X6L._МćMLl9?-ZS֯߮JfPr^uǈ7GV5=<צlo-0lgP
C<32p@		Ϥ R I?aL;.74 4Jʅo\crk`K'#ף9
;upP38Wv{FP^[(baq{mY.`yr	P_=E$;XbAh)UG˷rCB:-:J(g$UO0Y&|pkL4R-U{u"Acisӑ3[`qİWNV
Tx+
eI`fdݞ6M?ǐ!7/ 2,c<*gcZe*BID.kO*0sp{e<0m4ݫ*g[?nacU6-Ѡ	s܊IVaȟyQ ߜ{Q^ u\1qΗ&Y
7FSÏh/>>د0e"&;Z0C٧$Xhqi#~iIxbm3RyT';F:LZMӹI@wp]qBBI3$JWebDO
+v3(tMP wN]M@Diyvt<Hb@5K
? ?ҨA+FԳ_1>"tR}41j(U}-B\;_ʿO0PJ1>f 0ψ%G1]B^%{18lފVMΏ^D<C/*<8wQMqsbhz|3?QW6ߝ\cq6Xp|:7	^BmM	=>/Hء}/$pƸ{~ڇR"=)u[&D;bY͐@wi;778ZEJ"KlJ౩'CIc9u/1:%ԺF|P~Ċ}HI[^E'!̑{(:V6JS-LL5aUDEGvi0K%Tu%+/7.K1պ'A%U|=Dz 4qص/^C6N^15*Yo҄.9S~)sИC!H<$ZDE4{7d޺^]+yVoUz`'/OυD޿҇YmK	~D`=2UE*D~zJP
5RcxIX8rzȖJ.F7 7q]iAm	;hz\܇*']$%Dfy
;N
;Ҳ71f=)ؓc^6,p|0iOϿ2"ę,L'g@ȫ 9l"$qf}Q.xzEij}Wj]ٓ$qj!GXݷxRÁ-;D+DD"J
2w[wmL[0'ؒ?3}<vp
@
ZE&[Ú'
HDc>{x?͘H!sr@JV&eƗfupSnEzlrZI9۸ŋ&˔؃Q
Apvnx뱇Eop+lmrx1m Ri#N]&-|$7[:Ku2%@!=+^7٩	Z,Z
	rw?nRR{F ~&5R7_2#cpJ鯟=Ha12sb@b:H[1}72&L$4n<`VGA
1-nNtI/4PŮ|)?0{,n<,s(11\gfc~J--ɟ&cW|!^+uW3án]M
8p`2u=y^AqE1X j tWBn۠p:߷H'}qwr1tX
N?o
@j7c~JbOT[hi?}<ۇB + /{J]5uQ8Nքz%;olΎpu5W
Ait59cy\x b;y3s;C7/$ kx^M[LpS9sKtdqRkj"Ω
ufNZP+tOW_#R_VE$UCߒEq/8$rY1j2$elXJJ`=XWڹ_>&+I%ly_w݆9TIO' 2POHZRM9Y{:tdD)/V{b(7BZl#F>&'i`;ZD+~bPt!a:6!9UZkdXbOpO;hu``ziX߻Ƕ 
]ׅZ5(()-
ݠtt3a
;&݌]{5<5j}q~ps5{3.B\ثˇj$7=zn$^ɪ;D9'uWZYY1+}+bXAUNLq#;Z,h0TObKmTZ_8nnCpMf雩17Ї<ҦP1j6Ixѐ+ݨ,f&ŵ[yCMaXYcR<p}vH|*H2KW~KCKO.kU;d]=~
ᬊ<lߟ[#F[>_X;%a.<$d&Ҝ0x;&$B|b+!v.;>ڎreKy J[߇2ydi!U;O䆗S0xp _(xd I,z"8p	IXDZʳNfz
GBd(%u2SVI ȓu8č_ x-r!jM/$T\ sTaq8(B{[M
0QRUs4u*$}N$/R}HVj9
<fFMPWWy:@+\EI~ {V#G
U0//MolQ[
d%^pʋDY<ޢhwROMsP;pl?ВK/0PCY"}"b4ӜY$'s	-d<S\nR\hBb֓t\ˎԵsz~mOlWe}MB`فV`yC6/FU3." ^gpODmT~l<+{D{lYz040h(=]xxsi6¯9ҋvV_WtHfvLcHy5; 2@x$茓=QET	t쮀[5ȯޝ5C]V 0{L5CLK:)m^؃ˠ@I F^OnZ񣬁5ZhLMb?}
;9~|nb}
H%_Ϫ53Jr,$<"T#Rì[+uqV_/zѨj(#XlE/#w}+j
9#P8wƣQ<5\iV)۲ d`ڇ󳈔~ʖU-nP+rbM[zN&HA&0l08R5/ǘwf27	Kjl' V.¶tC]@5tSZE̻'m_G2bkP93`lcDƽH-AST@>I\atGgK{.Wi0	eKL&_z]2	{paI/P#Q;zznxvJ
S[(PXen-Bl_?7Sv$Pho
y\	$Q=4$w}Ys:TC'{fMΛn|op$E9/gTax=r<I_3u)gZ6So=(7XƆtV=_D[uqxJ|@iV
SU)AնIܖ}g}19׸Ŵ<*>i·f
=9f
ўEleBNfrJq([vD.ݑ0}yR0j]43YA{wI*3cy'^r\
1\aAv~/v:ZGvT|+]u\ͻ5"{%V"O1s}3_62>&S,\Ud^ԙz*^ӞlKT QM%X<Er$ ׂo</$,[2fYTs34X{/`Ch#9iʱ6ak?n-h-1tLxm Z1U	9Ncu/0u8,iEx+qD'^ln;HmY°jvVߠ{Ż\
+FZzMI"*lRC֦"jL?̞͛uew6ms_Toupb.z<N؉e8}܅h":QV~Qo/t5C6FCϭaǾغ'vnxjPH[|M.y_bʘ~e٧~on- lg;,dtz0c:R6Pn90S),	M{3~*k<- yn1M/"4шh
ٌbuKc@ST\kȳOQ-q
̯Ns'
=!Z)\yP;v7S;&7#fsRӯ7=RfΞ*6B0|K bA'OOrtfߦ&
lBPffÞ㎉yT+{ŊQ}a!0d&^lacOXE4.X{37/ޏ;&!1`ݒ4ƄfN7^JGlm&z+7
6eKviTtM4(E
愚?vüƫ:_^FDHX{k</Oݵ/To1=17-&]ɯ;CB&&}D- XcA {X=K"u1άNE!)ivq1ضX?QQDOϯSYB}c?cxQb~ZXp%ҁ(UoߓxmpN*~Vo]wP]r+J׋px޹D
nPkKHnk{?gIeS:ϧz<ǊlX׈
ߩR-O(k{5-dX=xWŚ-[X'όGu(q?/%{f|EkA~gJD1ٸ8o:KmdT
gng}Pe%:eo:˕!woۚf0VtT&m=,$K#e~3|>)	\-ur^Oyfu!f$mT?.v+4AąUT϶g?s*eV3͹4gOZ*K^q+\pkH(vt21yͤ=^lnӊCXFuw ^=vcY?C.&prK!q^.pBă;4&6JYmhL~ҧYBy#Jyqߊ$+⧩.Xu9 Uҙ}U]܉)Gu߱q{l(;Ջ9@|u2G{J6Σ:q0◺?*em&41@Wvj^+7u<Nꞇۭ޷sK
df~%jKpR;*"ML
򞌚blNfsN#C90ƺjlK*K?:J>YqLh;O}Z\JUiXKNjO.:Еյ{
jV+ZQ8[a`L"%Y2o`^g>p@!5	A$:r7{;l{[G<UҴ?	p5N[6lX=BVZ #ߠE
 JV^~7cե;χKkL}8.aH
cwoJ|aGvrB!m/Ze5SfKyq]\]:6W
Wڣ)8Yq']L~	O¹Y]fBԎyG|'z>YpTOwYF}ms
Z5Яo	7&,8fmJbB#4MaZ}>gݼH  BnjT^=LeAApܻR;#2Lm/TJ-Q<ZGhFncv/Ҋ
fY
t->$SiF{W2ޮ 42ШfC}"l1XR}=9XzZH7\cJ@ǣ	8V+&p;&y7FFcgnN&:塓2*M{ka'_rt-DAEiMLw?Ix!cZo
-,Wܓ#\q?E~-=-;paӂd~JNfie| 68l;Ӹ)}T|v˒g|$h!*;Qǡ~1niى~hetz58QV]
O<~Cd:&

mKoO53ݕc|[dG=vFYɩ	M[k怦ɭHƮj/
E#H@ٲBM~4|v}q~š%h.xc1mE[9]-qY w<] F&]=Ő[WʷYNIjA0*8eJ,3<F{vՈ*ڛtPR6c8_w/HZ{r@paRUМ* R`ҝyC{_+}g%۾X~,SL ?` w%E%c&Vd  =5|LY9Ƌ3ǎZ8U-n`YqР/s(BG]Ȕ3m ¤%S6^:UU#oC"$$K>n[0ixYX_hp/ 靣Æ$e[z;,0[4wzƷҰ;j(!\O^:1P.RĹjj\=|q<l$!0W*&dwD @CovoQt
iܹjvX'kNRGt}MtO韎]n#T_ +};8g5#+!l_ |}\O8n8~-"c`a_n}$`0xhqJGo[:
rgƈMH(ʁ
25DkO!=/ru,Ib &R*-Fl׬w/{X&us6Fc
C
@Z!X
`]iV*#9s2"d#g&=x_7NpG|eܚW@[y;r6U*%#.(&3eKik6"h0nOpwWT?`CB{#XKxk6I	onGmN'oVtPr<aޔ=(FIbK0<	3eQwV
NmI	{PKKg,ϸ&|>s[ќ{<SӷENmz&$KfZ]7Vi`x[:f{NyͼT&?sγ!z]Ԓ=4RڲAO]ä|`vo"ߖp7Ms O%`-I([
S=n"ºut4&KD]ozW1OHMm؂41P`E@޳kuR
}*Gߒf6p	@0{@"=~A(5 S39:U_ ~Kbz!I&ʥW\PLwoV{aKzw1mxh feQ>[Y F ]{i2HaN_Ϋ|Oаt]憧4m	[y{aF^qQmK#ig,zNэsLWNමLʹ2Ґ1~KDZgCJNؤI/^o?f?W<c.AI~h_zjZmgݠ^#;xѥ
s_I$Ŷ||o.}H:
-%ܬo=jEs!^.cm&a&яaav&pDqYvJ;Q߄3$tdY:|\9A3t&28
4/;B'_t"_Y]Vu2qKT)ȉ<<N&OvC+鷕ؿnl=׃?S1:hsnFIl>4	PUL
@_XF~Sa2@0O~.)n@#rs^	62AvBI2alNnwxn>%0G+Uܲ\kWܤi
ɣ݇ȱ&ׁ)ATs5l%Θ~i{kc_~[v$g˅
9zdEw˝mr_s+ᖒrXR  
rĜNcMVmL`Sª
v#(HA=Ѿa,\l8.*Ҹ+s +д
,M&p44:IU;LJ/ Z<^+,-fGaY3wy;(3QydX3C@h+nȢM@kGQRh`!:%_zoČ!Cw.D	w؎9bك0ܗjS:iI"y}!iN7z"\9%ㅐEXG!Bݦ"
<'yI̬ɫn@]ӼE>5ٶZѡ},TD2LUud<Uz|.j,l]eϾ7!lZQ}?Ke[wywR<P%WFaxJu
zc(
V&:j3}2v腮BI0Ө<pM`v2r2t&uC|{5>-[K3=<I<Udw$4y$],ȓҗ-~oB)adPBKQRR37~?2A!Αay=Sb
5Dcm%N*{W'_|0qN$쇧w͢N%K"񘡉L6#$%ǔqFV9wzg;nt$įb̻Y)*{T.7Oe!"/s%:@v@YhǺ_7\Ɵ񟧩abu\N=\^D/>FR3+6ȫCWʺ=6|(0^mV8QBBJ9-`EcԈ_+E Ֆ2ِqpL$R]x{dx[d--<W ҝ6g&βaRY$<6XY62K^rV{ uV9Qq+ Y!\MOx&6Oǣ2hu|$3o[(]
CF|.u݁WͿb
^94f-r,zNU!@hnN#UTVr?؈7"i,_a^&xaX:T95yS(1)ytiC=uo.Wy"1i/;Xߵr'ǭ:)?hd<q}RRp2haK`
e]`,D+]Hh	!ba{į6Tٕ*WĻV%:F,`L@B}xЎG2G &b.)GoDn(3j<x*ZWvoV crikޗtYVOѺ<EjGЕ}_𸹡|uO|<BQH3ԥo9:t@wS#<yn++"|h!x[\<6(^]}
OISk4o'.y;N{D
%
MZ_(wKJ-tE=Gvǋ΢<bLܾ-ZtQvn25.̬7bU\\]2v	ĸ;FI:,a{ŹY}.΢j$䑍D wBl(o
ےQGUf(겼̅N0ΣXt L*(jpT^Hge~g`<t1a1VM6]f44o3qŞ>ʡ}*WW۞sNo(c5;)]¾j8ջs__x)a'ktNʑ
EL>X+71m%esrI!Kю*P-6׫=B*rla_K,P J1IgneL۳u.RNGU>%_ՕiPގ1Yoi5bWykmi$]dTOT`bPVêgIQxv'T}+t5˖8	Bl0&8GV
\n>+1a3U/ﲄntL^VGG*OK=sx4>% ekgd_G 3ￍ<vBWTyW
q:ixsI;4cbodm {-uAVgK)Y5$]vî$Z L"ےV=<dU3Yӵ_d,hNtv~ʻ=lѩS@,lj~ǝS`䡒㾬.rn>4-b$MF˄t\Hb֍{(ik'
Qdpq]|&~gS*lL-~/?h+Ju4	θ|c*֓pv~Unek}n~8kd˛]~/N|ÁGn[Nv_	
*FS_Mq\Ew8jMKY"ZaQcg]O&ɇ
EvbzE	2|x9a/³R[h" vBl^7uqY1Nh.FC.\2u8Og[9c,5~rS&t.iSH{DHZq]]" 1z=<ЩXsЬ>Ԟz[ډa5g[iz
}`?
I*L8fsXu;C+(?ph.ZzR6όkSI̾d̺ ʦsҭZxcW:gyyvq5S,>%m4h߄ˇw
9?xTY,#VA)I*|B`Du}"~8/w>$<«[	Cpwtҟj獥2?qsGU%cX "YJ,+Xh1.d魣rƙ+lC \n镦`_f
c
$ ܏B]XM>ǄNIsH=%64x7Ya̳|	
u&
/ՈFG|7	}pj M(Lj1ST2`>%n6*=]A*d(Ҭ=HDdeY~Yv7I*~5E8YdtAmW1?R,4onÃ_Q0qnA^w)l|Ňȫo{"1%>rLgYFۮ2˷wϖ(pti nڍ_-Xԝ_ݞ#CJ/>\^q4.XD=&aW-FgL~W8F9qPfn2ʼݴ;E@uqeRRE/)AWDK\N|8,"	,ZwX5M=i̝L/%JDty
NHAkH>˾!o?"fُ@͜:^͞)bzg7)#+RWS4JAMl=F UrVI?k:X+,`v{ٚJJvX݄F{EmBCL3
] l,fvK%\Im(fRF[R93F3tˬ/%Bۗ#nc>!4iEZB俛X[2nCI?K>喥]8Uc+SfaźDL2o[ORw]+B-bZM6*6е!3©#_X
}|KݪBA{
.\`A(o7|2჏Ts	@֬\HW{R溾y#a1羣1Wnb+"g#slѩVL0y}ڣg%s$^v{g3ϺdG\O%:45V'NnRئ9z˓²8"GK(bIVq5ϟjGqQjn~ݠL+.$}OS
YZ#ɺ5zFy#("IeC?bSUV1W!	-MnSKE?\tj6Ie=z:Q?5xhF
zf'ױtka#iqhl	sYvԌZAᣤy[4z~bšLqJpx\+{a~Κϗ`uT^3}7A,TQY+Dp5+Id+XJ66vQ;$~fxuf܈,4aіd1.]n\كV	
tOĎ~mܿ:nDS`<O	GF3hL?K(ȈR5J Chp&rŶDά¡#~otlexwmlш\<DmE}.xYVf$vo6r+bk\){jRcťyP@E0HТPm|j
&7ʧCoTĎ(cG?$?}i
._zb
ʼDٚ{'Y6f2H𣍞>`jtU8zܗ xe[$JMBO!dњgs.aPNmf3Ba;~{pܧ|&T=YsY/ih: 4aAgd!Vx$@
[$b
wcS
̴QBj*]d?E{x%>o!KaI4RިU<H}YRp5Ε@hQ$.kBBt)~E|{&=J`]șkS,a}!w&H~è_upgL0N/rur?O.%jH`_A|Z6"#ǜ<}'-{sq@,ANh]IFm:6lQˈV`Cȑڮ0 )Mc?԰guXD5t>.Mf|?<=dHu
;w"B^p1Ni}Vm0>HߨT=sF)?AQ&՜]k͐V;B6N67n9w8Kv1}%kn/+>Zi2)KOl<*_{[-*l*<<xZ~ig)W[S댂Rߊt3]ؤ3
/^-ƚt@tYu:l2|S'PŀvB"_l~~yN	\\X~}#;dԛV|·uw7rwam!V
)bU3%Wc5FaV4wYl>c`Q-kM*t'%M߹jM[x_K`q(?Vo:zl4v)w)X`~D(eo 9r^럊p%9*gU$ޱ<1+GMfwGD=RhPu&*aeqfR+dfmJ_@/
7PGs?Zqe(B;;Q1U1XHj2ڻpc
]<"ɽ
홀nu'Jo2.aG.|"yDiLd@
47EL9Be
;C(
8m.Zn2ц~Ֆl2~!gu75`kn9#V+	eWF
F."Q<oN $̌
￹4{(8f#T%\<|$eN-#0Jbsn[o=<2y7Rmfۄ<k
aԙ+qXQ=ϖXcg2S|hdߴ\zDr~z:|
d7cTUrA2k`)Vn6h~mo$wptALaYo9geXk~.84ǬYh0P6C7Z!_tCm^u7SRZ`T6Վr>IHh|3,we|z=݇)&ţɺ:ދ@LR3@M/cPYX"
?X+?x-nS]6]9}"L@7]O$K
l^R"T"şMk?ͦ?\G!g{iZ`I=:CޛƹD	o7gXygVU_`>7Jb=w iOWgu]5yмg<pַ]AS^"~&㌣Z>	{%x Iiu\L hFێDA%iUb\1KacYW7aﳹ;m~T|jdMvT cv AʻRHp7%UI͖\q_/@o-I1sPD]yxPOSUvD,4$hGy(56<jC:<,2`+I~3Ƚ-UkQdWݸ6>	qk~ЀB|֐7,5ͯӪ:
ZE!,{V[0kZXVo8QO+P{l\Mf#
s^=O{LV˰9ՙ09wK6D	p2 ]$nJ́6Z?%X0o+Yq*kb|>No񺠼=rc?,5RYrQDƭe1|e^_7}]toli;j/(AzS|jƋdEO	-KA𣆻
o6A	
@̩Ϟ{
#؄N(gcwZ?N,~a?jPk{ջS%H=׹H>_'ґ;xhZװTfpQtyW7P⟛1 EGSIK!I=9P[nGf
im$"H,F8b>u?@1|QjzBaaV.I2BƮ,cn؝XF~*ZL\iib0Fx47x?Ghi|}_Fq&Eg>yDX{HV8Q|Fs4F|^̟wolL`
{NU6,xSg ׳/d.MRVMR?sD'| 򢵆6um-2/rZGEl&F5ζſ'@uAf. $Iṗ˖
mo~5ƾmM*]DC͈3s'=|xD346u5z6˃M1rRTF]^()Ѭ(SjFGҢyUVc	ͭm 	
fWxzЪ<QyPޮƉ}BRejO➜C,g0չgeFUsUFW)g}QHH+s[?VUV6r %lSoNɐ04N9OڄltK;$HhO Qbvs7YGoeӋ3osDoD3qLW1
^OêeqLD&f"Nw׷Z
%X2՘ut(xVHvH2W:>wCz>1~[ꪸ	-;h9pBT{ s'N C]AԏN6|tEv_8^XG鲋N04x P
ϙ=
-fk)|${/g>]B{n^I胅O=ne"XA
t?B1)*bJǴ;.Jy>
Kd/ςcirh3Wͅxju+XkwIF|t;+xUlkg&-hNT":Jk
uu`.$UleODWas#[5|d\θt7$[)ꥇ%>	9_{xnB" V%Bߢ&Fyd|(!'~vh-8J{vtO&R#>2Q
}}/j껅iUBX^'k?OE1NAgȩV2%=Cݰ̓a\w	
!|*o(F3XzlֱL~n	Ap
}Pb[uiX[x[&Km=In'1Uʡv`=FlQJĐƵ+؍r'\y7!bOȟ,W׵ʹk?TCVoDqmh4C5:,fYbZ=?,T-;NїFK0EeٰsJ[Bar'̟Mٝ4$1hETg=Q]o.R"wCc07lԫi7n
ά>v,QVD7
|A]sRׁd1l\XqLo\K3.-kGkky]p
i ĀYLy5ak
Y?]fӂk
*_ٹ\T;P)3d8]m6ؘ qJ[y$=BH0,`_1qfA$a<g(	yۼoK<gj{Ʃc4	݄d_}z	E5V$͢&;>q3|zl//D39O
jLb8.ѯ=zaX Ȋ.bz'U]#Uq78zj`{Kv@PW<+vP0Se7=;
fH]vyZ[-=X]V>'.53|drnE#*?le:#biz
>4k8UؤOSXURVgC`swdH,NۭrU?sQ&C7.ό{qiYK83D+za5+Ep:`
Mg9hػ:$^iuK
eOF6khPd')%m.'i4\]~ܞ~cq4!ZJxӛ|OL{G8LFj6	#9ҋЩV[2'b߰Ƭg*tCjz`khq+)CWXjK@qx=cmxǜ	eΐi]!n.dyܶ^tI505EdET|6Ė1M%aŪ+Q'RRf>
VRz!p+V?r3,%	@Q29YW	3Ђ#U dLDNFp4i?BtiEJ(kIKrxЯ,
ƌ:HX2ZZdD4>@ܶw>OXU:
aڮ8{Gds#j˕wy Rx*ֿ&A(xߟm1}49zȻ=lo,` s1cЪ!wv$ʷ~ks
OلȧR_h٨;婉}1Pq?.ƥʘW{}6Qq0"򿏌7P!Gjam7X"(tZ֧[hh b
k?J1%Ɇ{Eߒ`
fɟ*JZ=B_ׅ64F\zPS{>bD 2&6 yKeLy?t{>ɕdZloJO/Ug4ܟ$_n) TB,r
tnropv67 )n[לCRN[&]##?'*pQA(
&6^Z]P|Z2ygU>fH^:;\/ @Ysɜ{y$k`"9\lcщ5XGF}K_t
S=B}2bmwx,vut󘫕SSn'MH,2'BKԢcŷj~Ъ;ʹ )H{.[+طtvwf,jMm
8EP&S 84%N;u\9q{ m6a)$mB,cZަ6/hu4A̘IYfe tv&x7L>qHԵ
^T Ւn>~@x(tiZdok@+L~j.,HNfB21InA==

fYh &7lV?Ksb5ZFdXaPO\ujfr%GVw[++`Ѷ۰^RV*>)woQa|`|DF=Wx,'+^3P4\eȂ,BphPqxY(&\y TE)Չk/1[UWzaСwG3EАTge	bJޔlČ8aK>ೡCAsq7e"\/#Ii9'K2Q8
L۾Xj$=Z٩`Z_ف, |&$I6Վlz)^2y?O9+B!K+Vl%UjIsZ.ԉ#\?٣/WJ,RQ0YR01m,C×v^/)&xۄOO3EMyT!O|c2ٸ~@)ײt0n #ah'<Ǭz&,7OEr|+Qڞ|џrQDt&"I)HWsǐ4*MHrG4}+lu+X_<h1D#&jZ~>lqY'kg! ˙Z)=#Cbfm34__IPj '$%0]t%Zj9۽4"p7mJ4FX~^*@yK$t2U1%d/{q	}zA1ΤyG7a.EyI^ݞ>li)jiLrD*Mي'G;
-,kOG	Av~<
^^]7[\V{u$`?~|kv.ksdnK
RCΈՖ_L,|
#u7 B< G?NrUȌUUx@&,8]:QdAmº D4bx}Xrg=5#UWV|
@KhXJOh}]?Ё{ǵ)˅.vxF#
?QEIff[u@F<} mI.!K&9T~Bٽ97q%3Ҧ4G5ouvK"#`UdǸ5]h,gJL4fYxH1ӟi6mXX޽h#x,O=%z%	غBKz4잕MUys1aeUQl$5Gdht0IKoQTT5z7'u_Vb߻} |xl"ǥ}Y܊9!4zP9;A9[By޿(<
*Q SY]'Ѭ?Z 7w'ҠMEUX[!#S:VB,K6^79 dg6 $ne+s^f☻
T":RMjPjQ!n}
@0W3 RPG1B#WEGPT@2($ZO<Zh{zcLmU'f/a;j%?e
6.%,O(`.Kw0S^LN2E{")%(a@pr
\edR7^skLV6!Ҿ1ѡ	*pgb&łj!9ɧZx9jlsGz
Y?3 Hb};VTG$'
x?%!㵏MzAv
/Lr6,CuԵ4&$'6^kLEMnQqKr$@T
Rp Jf$gs2ryz_'Vs\"7ԨK^
[96\Nx%%w8WY*[θD{{zgR
:d[:g{{-%ɦ4ҽ2F
x\NL%F̈l Xjªm^ʨ<E)b\pkJ@S7ǰsvWDFFX{ ]zq<ˉ8ah+Gzg@]q z9xD(z!iܓ-cX3Z.
%ޓ97K`m	!QQ?l.o(SPG &?/¡ [mcCT9Ff r0cg[ {Gomp-^1i)--Jt뗌#j
_Z`;f=[sO݈w)0?Br6﫬1?-S (t̷Y.)u`={)I<#(28c?oΪnȤB8k L'u	B2Z2 
.HP?^j82k]ɈOZ5_g-"VVS#3wʱbzc@Yïʶkmtoo%톆R#MFj@v<u0Hg g K":#(
aiw9#/;=O]X51_^/ J0n>h	\Bߥ"XtJMC3G[Cx/]#h[GXACɃv\cJyEMIxDn{Ix:P 5i\
Bw_c%0]`VI@*<,EK(5m夎̍^yU/r<ޘB@ F} OdЀ%eoӬb4-VH
?_iůSMOiK`|TWin?ɺKpŨ~~4l1L`_[_WY0Q#ǯHFzz :30l<)]g`*h[{tbNl-gl<0hKB	JmG+⺌\R;[@J\A6l_-&~S=b [53 8%_pkx:O=LZ&{eb
sv>SiЏoxpyMrg)1:K|<{hCVn(mhk@G")<q;خ<X F>X-O%1l^-!@`lͻb@Иz׭7̆ \tgEyƊJ_wPpY6@?zuش\֗r6 R+Ν"EE}vsx
v:݊?4*ե:(;2ɞz($,q8o n<3wâs|qP6*̦bBK0,d3y37}7ZgOq "b9属+Xߑ9TĩMlߟ*qٍ@peıGݠ7\5#r&FĎ+8]Ĩ>;C~I.ܡ5ɳ*6QɄ&h0$!\IS	{ o#6А=Z ~e!Jp~=v>y`~DO84*n^`wֳlU|I&Os+ˠt_z_ԥ[o/L]۲dR1XPi*IG_Ȓ񑿬cqUڬ2bg8iXe[U4xgZ]$<IT\iUT	fɶ"תWUJKcdfotհ(?hfKzlRMkl8f(ΨCCzYv֌n˩4.){sV[ћ6ƔU!% 2riY1I@'h*#SҠ(WBSh2;%#go9gvbŻ	O孱xu{]N.9
ϊ|S	~|{v܃
v~*]8}l"ZӢ,
;ûa\ژdm:oP.&	fOcӓ'X1ɥJF]#2;
ز&;STQL!ʂYhmr3S5
ݏe}brتOMY]B\sӻ~fdxYc/f ~OJ"2imA/Օ0
R6[dB$Z64lVq%
Z@;u
9]
@_|ƶHlGwm
ڂZrĄ>%,'9P*3Yl߭?b#GvLcyyT=[9ٚѤ#Y/vk*dmXbvI5\W_q{bNpx{))"(k
BlA&(`(5i {gpD0ˋuvۏ8)M"O
bRpI7C9#Rg@Pds G3#>{BY߻smD	#2oo6v%\:wgLǝON < %V

OlObr#u\X_M1s/QXv5exKO$<ovsy~rJ?Y
()sAȞI`(ٮ D%3$)ş+ނkO,N؏vç%3Xp T|9,rk{s`H:J8&u_߹aVBm>Q]}Me^
v^7sV]GX8:mFxȂn_¦/miJuPsaAwһ H#@ǒ=nRUkTLGNA.罚y(𦮮4<Nyl)q*M#ČI?*0,
8L[NK1r}ڸJaäl;䛣~CDH?PYE:-:pZ&#ذ@1MqF6	~gH{e,uC#܍z8FO8N5__~+Q;[ 1nfoʪe1[X
[&,h\cDuZjItغ{,'Fl@snjXb[!"@/p$7Y*G-\5̛8 d
?JCҢv.ί
(37Xsw9Ta<uM-	GK
BbQ6okyiz C4b@m0'v7CMn-k]^8̵)/dWCś&7aS+q	^eT
K!iu+j68ȐxKz*J_8YϕY}>0`V+DP{[eROn!RȞZUziQJ]`| v$>V 
022#3_L!w>ziBʀ&O!_{L7	p%QE8S+V2yP~|  (
URO0 ^%`acY`
TeVRe@۹cnM^k$9Uw	bJG,@`gW<&Cfs'{WFaE3ol2AɢϢHΜa:b`$b(cߍ+.S6PO]+< Pܒj0v}l9-/a둓мO"z+0 -S<
*-nv33jL_%nmG?@`
q|ǧ(d"085~tpY~yߠF6.ϖ0)dkoIxp'~SjNF#Bs]AUEıD%,X|yT:v4kJ&?<Q441@3!P}:V8u*:	\]`%,NI%B1AV95+)Ft光ܔ-**.BB67 ;m+8Պ]ֆ"HZ>Վ0S1hL~fǲe9VgK;.YhU+	
hDejex"C9U"+.+mHg90(F{JS$Tq*,7R{HҰ-5G#T-':YB8@f''?T:jTϡK8+Y	)Ggg3x{sSKe1:7ͯH6.M2Xʩke#KU6y
H.%{9SR5<t4ax᫋I CYE"t[GsmewD_.TXp[[' W	&Ku_(~$PWN:-nX1:d6E!VUEcg|]QΟŭdq/56i5̇6,;x0'TEKQohBj_th5_
{U#'h=NɛLT{|#`@!eiGlY R%k[I_:BqHV|&^
 @-!x<**JI94sAwzeGDN4H7;diy*c^;4W+Hqa{u+1!9 5R(hKqZ$~us]'ئR[w>^Xxr,{D]7'_TΓCf1nt#mhQWY1@~˽{Z0aơɃmfLڝE+dJ2WiO)xNJZessq<u.<HҽiY6.C<D'|_3X.
ji>Oūu{yHYȮ/r_NsciԂ[k3 $mĴX ^w.\y@Az}]SV~v`+7%F%;þ6zn'6F%oWU=-_mLT [sE@/W(;]@YP;ڑdi[+$2iLG_.&-nZ33/19MƚD<^Öox3X[p@~sO5Lw#mLn9Bqٞۮ,>p@c`U?WfwE6o}ҐkIt#rDbJAmx=hlo2]:GcS'-}erto@e2|tM
&Buǹ
3úZs:Y1T%{Za^Cb^Obtz\H.l
hc}}AI9:ċ4準O@8)ǔ׽+(0	A}N;b]NS3DmD{h~6tόX!0GPm<Zڿ=̡VkӈXv䘷Ӣ82Cp>0A.Il wf:z+V`٭U6-zә>U`&K^}48H1,_[(Ed eumWAzU-}?"d~3\>.O6ȱl3u1Qu!
0E!V=Qҫ,¬2I6sI/WRzpw`i:&l:ԍB(X}%ԟ)JbLLx>قJwռNN:"QSڙM0]6(';+Aje)#r|930{G;ǙnOgڟRe,P\):W0\_eH9O3Bp3wP>~)&ȍOTU@ktWi4'ˬG3P9N_ɮ/ВG![&2 .__E%.?6'}Fס<6j;l៮!|YN[ԉ:"6gW/r~ja I;-	+R>ׯ%s	ŭSmM=>Hi{Nnh1>n* l\#WO"fU{yoN.%YdruRvp|E<MI=׌g=~{ ,:'8{5@Q,|-|ND7AȳqkJz_ƞ@ˌA #KuK~l@3!@@fѾ@;K^K?tBy{j 5(w;5?@f*|)Q2s1ZW=Q@`,Dӵ+<=W[Q.bb_rM<"Dk|y?HiNwh"tLubEe?țu ͕H7e-+g,^}zK"ՀjbOS}w*W|}Yl=3aw=
;c|&_hx|鯿	8cw%v׺i̗,'?G)]D%sH[h#P+sZ*`cHjߟi6GA]9-U:*o΅<\dR3訰$NjXRZShTDwZCOfA@A%9yF`_} R2v]ktk>eJ8.s\1QQOg-u	ᓿSޫ6 Ȃ1Ie$-1{'
ܔ5s;E.?$M Rᵓٙ@EdWCۓ餈 [&$5
xCPSD>T0RiBۄw#^
yC?	GLTqڌmkӫN+~J!w{.Bt6BMon536i#ltXj˖deݎPc'i$R+s_F}r`̎5r$tS r1VuC ˒^h^k[}78zY*u7ʇJn`4!^<]']d?R*"
7&~Mےm>1hz1~zŇZʪ})dGS1c9jEx@(RB=R g-?Sx.fD
q~ےEuqEtm?z^:83O=bCH%kJ1Y˅4`gڥG}Aݍ.d4huipiXH: LzB
|dy*e
<	bGSnvisj?egx҄v!^gIu|h~
_x^=!Ђ_6ٜ.F>3w"eb21#esuH `
ˉc=GA\#Qv8)Ks֫Pj\9aXw $ófd ޭ.먩|55!7C{.?4<eIN2.N/h~ozN/%{kZ w"-ī9pvILdc;pXA.HI]p˵̶ e͹
d9тlnm\PИ\Gݳm0yÉG炯ȯkoG̈́G?HU 4MB;:rxtj[OM&,0灯r`Ġ2ͥp@1"xe=܆N0n~SD/v@9[ͷrd`IMr/?c0S}~E*g]q.gٿXhK7~;#fsjR~XQLְ%(O}}ޮ)~dl6kkMq)kip}QO_T?IJ4!c倉ͯòo@	-`fE	u¢s®ꔡ&vaE9zcAWXSi]!%,t	vlGGa\?y-0ѺOC..zCG\=RpOT{|e<زIE<%*Y=*AVyiGsB_:ʈbeOx8be:{JjTFTqd`ȡm<"QYlm$#qC
~+A>>f48qH%a3Hƀ	e7N~ I #].;=[Z]95Y;U><nεW݇W!f9=(k{H_f6K+=*b1.iϣ#^,;
F4򟙘iJ7jxЖŰeaN/6Н1xVMGca<Gc5Xx句	gLl
]gNc7a+bY;ǹ̢o	67C5p;Q`vxҠ<DpNg,Bamͅv^N9^>IK]!7 Ʊ(CYXXY!"Ms¯ \龌\b1ZP]~3ؿM
1$a3bf3#@9nxxsg?rzr*ks ]ՊϬhޕ[3b7%aV\O@*sxk@nloYi~Ziy;
R}%Kh3i;JݏF޸y".3pJRNԟ-x5| `IگSZMC:~)Cp
Ak^6tT#<edNi0^VnBERL!UouY6O#	Nx~ Sp2sHӛ|mBʑV&2
$ZJtF0/q=^6LDxyPD:adI~`Zہ.8S"{3<|f~|u1Ö%%(qZwAw{fm0Q̓G'm&co
o.y\7O9SF)u"Xmo0Y"[Ȋ%l 7NZmw&#)2\/k1߂k bk%}gKE) 5.ƠeޤF)y]3t՟Tf0 g3n.:\^_ulgg!bm8[7 _kTbZݍޥ{?H,/$,^*Gٿ2\ǒ0Z!X"U'G&bׂpLmT"X&a|Ѳ$UHŜ2^ٺy{F`". ^qf _Q,7H̸H:uzTc/60+ ϗ{dyN2,Eo_v%(?}c
Ԡz(mD3_JyC6$11P;wloQ(fnY`M橖DFܞ%
x5{NK$Fyb. ͧ0myGL "ٻ'?IIA6H?E,C)+]1mR c>H$C'apR¤ۏ`3
BX~	mQ Ϟ׭ ta0Lu03̈r*
A^w|h~)&X'@M5kq<p9XlrW	J.nlV!l;iL;DG+C)
DLFyȜ	\ChOx^%(_hjK׹6Mx{',Q朑hiQ \ ! ?('OP[GJmqeik͗0WAb	u.N_*PJF}RӼ	sGؗSs;i`f06H>ʰ⳷`PK%2r?w(]!gDީMTުH+ϡf
Ap1;Eu0vg?k£a=R2hso
GYzSB}bqp2}4EPUL.hrc[(CaY ֘kn"9f.t\>?BjMvGO..L΢q	I{6'p|x(B&懄ٟ
h0M&ȍAK;e!Bf4R#8X*oٳƱ`NT9{!ZOU|ͥ3w>Sm(N!Ydނ d]~3=Z.]6K6">Fnn_Zb+
qFB,!NJ6"qPf*U.QLX-me6]HlK#7Ny zGf3lE[GoXN@2ik%ڊ՟uB=JY;C|{%,P;0ey]|+ J'gq^&|pĐP} ps\`!ݿ#ZhmP6.UfV1kscw561Bh2jycGF5|	4uihg?!Ey#Nr`H"<jj'._Fxo	ߞФ>^IHQ #$? @n5
t-C*?'Ba3X-)Z6\?s`	yKo:,H}=@Iu ͐16C1cK{))Fq3Cl:tQ٭mP!mi|?~ICiG<xivڎ-<wlnlQőS7P(X=O`mxVxvA)d#Dq@A@puysI"p6:su7tMԜ۹#r&u-Qz;@rI
77MW+xx{zL|h>Gl
+$txlnG2ky'E9*p#Jj`'х 129S;onR=ᶞK+	B^N6\cI;6.&"PɒuDOۇ?<̺Mtּio㑞e
MxY.[xQ{|lƪiG;{5&6I	P @@lFu>8ȌWhX:|q1*uG0"}71"Y12ג oW	13+?>o6=	q)q` KMm߷33p{?dȭ7pϜR+^ܬsj6/pCa$WuY>pU,V)*I==!ڻt2?V[bGc? Loum7xE?揈NDBD^I jgk:Jz½怕qMS.BVe}>:CV,A5RSɩ9[)zV	.컨مZ흗V#H/59`/Ú#[]{jLZbe3hQQaYsH ;a%^QrN:πNhØ:|>ƒ%Z._GTSV {
4S@IL-˜ƄmcB>V2HEp<Ɛ˗ϒ2M*^78.*JlxUͰU{=`M
^Il@"
2Y'*SXVXi}{2Y*D&	'j
Ro|O
0J($qS<sCřf2J'#ǺGv>eeDrdTiI2yWyD2]eBfLiCn_JWGӪ[4s!cxS0eV!)s-|Z!o
ծ >~qn2/3zPA
-:"{ZSS MWgg-I)u]7zոJˉqS3EHu(~p9noOIh!HLN#֑,]ᚌӈL{6:X
eu㧣w[&ٵc<$RjyPycۄRjWT6	7l,޽:bJAƠFa~Z+M'4bng|Ɯ}y,]5x';/I+;m6d= @Z0h41"$8./Ok;6rŜ\m_N/_=A=R/%Cq_2ʊ?=WB(N(3Ls"mVA<G{v,Ӈ
wF =aJ$P;G<:22CPSdLdPꇒ7D6/g?c4lq?J:kom^d
^ٌgz6"{Bĕx|9qAѮޖCy#cl2#kwȱ[J_d(I	/wk9/B%D5=yXadE2vL*=xδp~YlTVR7	T攵!ӓݍUna#r	 0T׺achREd;rc[Rs!]m!M~j3MtlD7;b	y}PmtD椘k3C59YQe"P?J>e_\'.3w
Q_L+5_邉}ByP{U!8h0đ'jA/:~<5Qn!6`?ͽ >0<yg8WB U9Ze"Y(=j\+lH9vI-cөYտS[ټ\]UE3
`2Uʲ\.IP=lHB	k8L+hF*α)Q'S4O}FI$KQqS&m
)5L>Z* Lа!s>2VWeF0!Kb䛤U̺x+r c@>jAi$ݛr|L-z.6wW*Ra;|dFv,D1l}ʌ:,oHM=_-~ͷB'QtbF0q!ٷ<ౢX2=tw6sE?DR"x0m}
oH`f떢'/4#{BLBL=%WDO^
4fKuĕMkO'ãG^,Xϣkh=[<}Mo-dCi'>́3

1'F^POr؅)wBܟ21mDjo }9Wfڱ; d{x.iږ)b<T6ÎŊuRjYp~/['A,
l@zL[IʍtzKWzRrUϧOQK^6Xe1ja-UL&|\6J8P4qa)}xa/?>Ճĝ۶9"\(a@U3ƨAs֮
tL(n[_*H^]!^4̻y_4T	+R!ml=T.^1r̤t$BVfؾ?`	.sӆ^J$G<k[l=逐8 6i8E1
Y4r4\ؤf6BM8)Ġ		).8n-Ps='`	j7@>i80GH`"dvثIIȌHoQs!ZT>,P5
(|.2G:w[~0ep"ܲW˘i":	Z$N6R[>*G8fc]	_P:QI-iU:,	M㗐"]cKd
A*uH3/QhYq<
mIMy2wJFmAO>eӗ]n&g'ļh#INeP|*gT
ܺj9jvNpQ&][%3H<u&tDPm/x~qb$mʻE6Lb%2eS?uXƃ1A] w=>&sy
?J5ma\t{#T*vfFӂ*mpVYʋ6
{Od%k?J
9m,
0#AIi2`[f$1<p{-~k<T9TP\٤_^h?#TjP>nT^=bJIg͊ӷqsO!&mfKqr1%OW{!@$fzA<>kԚ
rxGT*:wf~:@h'V<M3B[6e#it
nzfŶtj)Y%u ,xąϔoC/[ @c)ٹÅWa4$.eȺWq[^!oDcIXWVO5-yC8ȤA1n?銵nʮF$d~-{b
)$[IRplҪVj7Nї#Rsd&<!-HcF
0$^mmկUxN1_ @*ײ2U}5T9po:dGps,C\q6Yێ-^#k76vicUP&qC,mQ}-nkL79>ƛ.](K3veS:B1<Xз_y3@Jjp2 e>Q{L
784(v[yg`z.|elWo2,\u~(fX#F-`TBaHMBtJzcRtN}t85RYׄpҊÆ8&k鈘dݰނW"жPL%}N})9f}1va<pff33ĚyV%9w}A8vmKGx_Rk+4oTW y1zx@\ݏ4ￗJ	[1"}":gg)Qߨ!$궿ANuN'=]{]J0iܩDYn!?D'p2=<x؇s|ͥ}X͡#G@-^72`Ł]ow3P, Fѳ6=^>.|tI.:jqJt8tĴO_ۆ(JBq1BHnTus$TW>u.
F9jzv>CgEK2D} VqJRG=ĊJ[a Zt0R"`=%HVڕ(HH2Hۼ;\p"h&oe
64vֳ#&S-t7K#>I1.K7*x}2	ʲ&ɐaDb89'F0f'ɟÐ$C5!V'
W"PHAZ2."	70H?<Rꑫ`i"_WشRfpX89-ЭS_'DAvp |$j>NWӝjgBp)g:n_H3޹*	k9E ߁UZ#DzО(⶗w5{i'eG,ö(iN 4,8H$d'D	m噞X~
L	Nk~/`*"QLoOzui)m*HyGYJEA3rO1P]Yy*-|Jʒn.Qé(\7pv(>X?\i:ܓ(=w|c#s.8dtMHuUu`'8'|&_aǍTA8	.zfKjvq.i=ӠZe,㷯	4PkLMu]y7Jyf<,ZOIDg_;gޒT?"3M&
^Py]Ǝ̷j}r[|`Щ5U':C7)>m9~>ҡ	(mǧ*;5\5DTm@RRHR~˼_M$f7K~76a{X[֤4ۛJ-_szE? emre N%`N
i\HK7>7$u^G>hTv{`{j']_iOt~ec;gլ	'L'xXfh0kU&_w=rvh_ +>Yy&!J/I~AhO;'S`![f7 MXPgr-jVeum{@L,TżͧG{j6jym]I>K)2-#&ˡX:Ԣ*
JM
%01`X	]zW/ڔ2to1jXN¡|Ь#hC*X FyjkL}zߣ
a L_-l9TlH1N!'}կԵp~ק&[%7kl&4b]aAS[@'zGr^;<:%uVȗrpj4gDCNKнg@I㢨rxͲ`P|y++dE{*&YdFE4!K5`1E5BFT*WjbxTj6/1ƞ4zIi[eμ{VIZپ8	K%'Vu+0)!KyٞΎv^K_L(~wu{<Ԙ5C5:c๖Cd0;ץL4mbIh-G7fK͠N$}Z3VVn/ɴM|I:t]ZW
,OA!&t%ʠg%2Ch2
or10EN T5r`걟(aJrՅ(>]}m :_+1fꉆMJA62VctA%1E 9*>fmS k`.3Gԕ;+}x0P_O`oz
ۅ>YziBFo#S~
e{j*xqwpK}RHFS/ Qtه~,yE[
3?5mbf]*Xfr.B
aTysUs_xl*(~
ѻ˗9Ws'h}%
>|(#D;I 1CF$-+REִz~jA@DI!Lwaqᅨ_E./tzOΝX
"Ȼ ^$gbbZ7/` b/Uz6Y:X#9!R2 |sFWRJd3K++hPKeZcMgXuM2*vǾu[9YMHUWu?CI]ls
wX-xy<{]<NcX>jv1)V_gX"3>BnZMy'T2K!8r0
##%7:*({PyWI6}|-[Gu |$pU)^,UWARװ']o1g^[֖]xW߶y8\B%mqv
P܍
 a2-H>Ϸ_+/aXisdp7^o	`jK>ڕҋ
l{i.eJp㯤cМv(TaSZl;\Q{ 
RlJ\3LG/HBn].C"{2*-gM)Ҍ7M>-*| 	?.b^&}ȉL0 #]Z|THW_
+tTisWR$Y<mJD٥bg4+2On/v2p`s?k:!9hӯu57&dYX_)>4=C
}Fm(-&<ץ+P8wX5[Yݫ&UĈ4%?q
ϖe_k`X"_?(TLtsőpysÇTd8}2<nID|UDS=ۛbkz
pr?|ײҼؿl4:'',Ė"2ާd"c  ]'L=0*ۆ[9-|t'z.Utr.2h!m(IJQ-o-ہ%3W.Wpf
 jApi_kJ[ [Ion	4Yz4gB鲵5'}2Tf`@&t2Ob	M2Sz[Ml ̸?IȎuKkfe+_>R8U[*ҙA_ZYrupƩ'LLB1$K%rDZ;|pIf4uN@l\r(  coR&yjB:dBY)+?16ej%=.vJȟgX'Q
N9lZ<&5UhݷA^MhRvDf<ѶSN1P|*ALKؔLd!.@we&s[|R)lFF\g:7Tu{P~65~ѭȨ$X-:Jgk9A(wa)mG[Mf%M3[9pCwmOiPohdش~*vch7|/9Yu/HQe$ Z\; RlY(wΑX~boSq9RQa}袱;!iP[Br$Pngm#5'k+/upcʒW
|y;5ԡeškC)gaP&X}1yQ ҧO:ķ^U&5VJìAbe
rKʳ1ޏz9݋7ɀS&PS%Me'}r=5o<.sqL'̆fH(sDIrHeՈ'רG`i,<
MS\q
e/8	ay5b}7iC#֘/"mtE[GDG 0MOˢϊMmyvTFl@XWI:'n tQ"~p,aLvb;k4ZUV`QaQeDLgqxCG%QdNmboP@{i_4]|O񮬿U^Aq?!/NJ-a$9ƭI`/:UhLsԿ4WV
-Ջ\u*aaQ5fuhۡw+Jhg$޻%FYWdڎc#o|oL-)4W
"V2m}oġX!b\2#hz{ObEԖ/;Ec
Gl	c.jM
0	Ce o4
yIۆ]Zn]l*y 4@8&+wvy*R7-P	b+V0J:g-\T˯z
͉?J\]Uͫamٟ*O	W)AWP #^)cbz
+d>p-isJRȿ6wdM0q?_bѕWꪕ~9mݯGQ
S@!hPPa`D5x11mt[ݫ/rWN½;S9-`r|mūÁ\Xb6nBgEȋ޷ƅCJj%/&x ,Ȅzu}~86*D2IJdFgա#?FT:ꈄCl1s!)F%1Jk~rD$GʎV(-)ٴQ#Ut=k6>lcUzyע-"-'2=˻ A*rD)FWr PU8iZ7,LDAh0;BJ~Y8Nq!j&/O"'<cQMV1q
]
8y]1[wǰ}v$W7p',2#8lOB(Y$hB1,Αrki\YbZq^*չV!dd(+F{&O'Ux)燴-!F5f*ws̨Tt~ib(#۸axC ߵ;7F"Jb鷹J_ðPټ/Q#ujUt]?ZjK1}a0~B2oSx*?-C1]$vW{ȱb#@`_GC\aB[/<MLw$)ݚ
ze rpv(VyXǑ2받l1x<gb77Q+Okb
,{Ӿٳc<ZP<˘_T"$]DubK=ǵF"Y 1Ms=:u;^+yL1ݘWB9~ss{uEw`iNz U43
B^0lp2[bo,%DXYligoRVC|?M^^ӅZ;'US]W{@{8ۃ)ߥjaMg&@sS
t;Jǹ*|ߗb{}h|ǖ)5R2{N,n|:q'C|G
9'V.	,qHu|+5^FfVwAѵ&zy|QnV6׹%{ң}F[H,{~bA<=ZE?,j/#-W	zҫ֒sʬa'E>ڣQ>(N6",^G\ghE	ĎhT'e@Vko_O껰zGbʞRHMT^ 0a"J3ZMw<5(
UR'=w?xxK+$ٲaE5U T.	;TY\ژh^mT"?}^#d! %T
AA_-<˥]zPN;2HllH k	n67%^0 j*{e6i@BR`wѢTG7q^TNnZK2tQkn	{3.&,{hhJl}{2[6IJQ8	2F}KO+2
7X%H$=ewNHD}m2Ax{l#0"3YX}Ś4Ln~v/l ! Fe߃՟t]ĐSA}]lr4_Jj&h|@'D9	MsbH&k:+Xޱ,<wu#
(JC`I	0w˷R;!Sbp4yxejuuv]I
l&\>6XŻz,J8&Va鵜s`<~]q'.$)yсW4q
Q&'/ŧZ'P
]PK0~7F_($42jhi]DEK~Rri>Q%YɊ=$z?	Wˋn]JdR@4~18}~-l"ݐښ!/7V8Z#OˋlRA$K
*W}B	T@$K_ᴘ=:\0@auCEz	Iz"rRgK){ZW#MQ1(hCN{[gs1
g <(sp}
o8Tzba"$fO:GG$MRPy[jSWz;
GRǂϊV׻Qf͒:
:Mə1FFY#"B%ݨe &3ס6ʏBuHo# bꮐVG
t)XcmRj0W\C	a/َ|_.-ַ
9æ='L-	w@D'JW ErzrrYHyYɒ\G%:9pyq;a꠶CyĈ#=|{C1)hе`xG,w׫0YqnfW݂릔x{ƣ%Qǈlykɫl`W	(5}_I<VŬsAjCWCHx{FԽ3Qs"0g6
ִrNA$v%ХwOOfVͽNC3j 7WJ:98Ӯ;罾קWZ9b21uPt;LAƤH	qT5W2Hek0G	
.A
O<ꦵFS!c$[Fƺt?OՀhX*=5h	q_sWf՜F<Oyc85;nsG9%g0o@t
-0P'Erp$q~MJ+{$Ҵez
sC	
ɉ[1xꭈPPb ?bO-Y'5+^
>"=̗^ xOmM </w&	ۜX9Lv>20QsPCyQaL 12|"ytq9I53lCǷ˚ߚNvn.
h_4-juxǛ^<2O
w
bw!-Nss7u		a
Vc@bAKFhXhq"h;OrPul{(OEǤקddSeҾӛmSy-~P3q
B9NyC6^-*jnܝRE	Su+4_+gT$c	);P4/"2-ۧgbnv)A^],>lXm;glWE]~C>|&%FB/V٥P>Df>8]n`)䆿%
'^5|>n`L\&qw6-n4F	[V/KX	Qz
5>W#U,\WwV+@oZ,peKLRY A?)g3}p"}9$PG.6Tcu0<cYh(-T5p9ʹ
mE^]6g/,`#Dw 9ژ,lx֞cw}cC0YG^=&F.pֈh^ۖeƃj-mTڲ_r*r*^)Tt'cU)8fɀJ=%ojm&WUsOwD&|3$@1{H (2i15Nh.#֐\_Wp'b;W&-Qc;;O~=W	,1.Zzn%>ｒΐ0s`Є^,&Ȇ\
Q0}+*)*T-=p_xs)wvWǣ6l$=> ra=@t,ߛNyt[8:)Ч̸"_2=OsnˏuwV3S8lv;e'yVs[/F+4Ge2T|Hꕑl~6T;4
N7_omc%y59n>o:l(Ω?INZUO~b!u<lmq:x/Hk񿒦Q?B'WLՐЇ6/esg"uF(%&qg$(%_^M|q^1pw1+&IxmBTa;<i (\zC`˝:Di"XI#!EW|L>y	u6gJw}I%3EUm<9=e+,	;"6JTJqŚ$00!uYt'9@1cc{gb@qu4DIAyԈ.o֩
Wr\d%=fj
-?E{ChVP,Ȱ׿l\NT{K"*8/>$19wVd Pb9pn9nHARK}B/<B,v&[V::~.4;2&7ؚ}!8Xի  ЙdӉ_P#cuV׾]'/Bva1r+?'R[u@UjAqUaʯ%`P,	8ƖU]QKvo&cFMPJ~eֆ<z[A冫zVժcwvtkr3À=A[:׻z51c,>VFu3)YkTYH
<x3e)6
N-BxC~U&Ʌ]rNGD%Sz;7~ԊUh:j@IB'4s1W4ǯ	+aRcM{_NFm˓=͏ͽ͉v&Lc2UBO"\~٬>9s9 yNN?S>iIsICY;Wmѡk7OR#2:I|*MԵ5zCJuKݠ'
#vWo
H>F_KO9quF_1XY	1(:u3F(pDͣ:th1xȘY\#G"DFuO8o|qC_E4oPcd9q{>	Fh[
o G(?ƶ;(z32NA-x3Ad)QmBnd)t0B	޾]v6\Ɂo9{8B3WEI1l1EVFظP?ˇA
RaˉYh؉HI4:n\
maryc
pYW{Ie_n%́ǅI&7;|i#ܵL5:^k^a/)jk%Tyv*+CZ`a0=0B)AEh^̞l<d;	Z%$'Z;;P V6q\>9km1}Ŀl#7=%7]:ڧddnn8zE
3*d/%;U/f[ m;%~"8Ve"BDEIPQƣ/u琟s!I/:πeJIcM
#\?A5a8	k+IMӺ+sNYT*C!eG\B)L[nf" K`KjWxYV TJ]#
Xm5\_2Y%͎=
$9a.L̉FG]QD߼StFӭMo-p	?:8TڎGMb2Dj
Oܧvǐ9uJv6LZM62jul2X.w w7d,,,|@/|`_.]TtԓxL`bLMQ,hS9 GG[ftr=-ZWu鱾E=hiY	6&3Í"
ԉ\h?` ϵJR=Rӧf-JF2ţ.bx[JT18MjrR!ApvgN[O`Uy77Z'W,])ً[W~8b^j@-B)_P1$\bJcs<oסGuls;?cf0Et?p'<b!~y!C"SxawR`R̖
_B
Kn'CF%^P\^FPIRK330K~ǁCNwJbf:rJ_>4ЋZgejx6HddY>Wqz DS :rVm,O'zW+/=ԷNٴ6O;g&`@3@̰3(
y,Jʠ9ȷr,#Jha-'bT.rk*7Ac{K(E_5G_d_,ȅ0\i1Fhc+XIa87){	8~J'9oh/a^9\4$vr#kn6٤Oҋ
)Jw˺,bL;/w5&Fs&#:,+!jҟ2\&]|v׏syvy}NވP"&{=2'$
X OI+ڕ @[Ւ!	ÿ4ҩ@OK(bW0~F6<egrfFR?4+ZǱJhނVS,ԗ.b
xW1vd)%е/;<3?b
gMyן$|M;{f C)ڦ(|x81˨8?Z*BxX𞭊"3BYBk$ɵ'd>AxaQ.DSc(J:yڞ^Js/f'HZ@.Ƒ a_Yetpǻ2/+T+5eƜZ`lz`"=\*
*ԿSl&'ZRGN@'cxhUY~v!F3x[T;+h=hfHO=8Z"zT	U;	HG
х:2Hi>B:o<5xaKE (@fъI݆K4dqHX괽 Mb<g*7!Mm(lrNǨ[TLoQO C	Lt,NsTnD]mї˽q_لYBtڨXFWF[V"%ɨW`,B_+.&\UmN/TďIdPkOA6~@:f3)N8+Fm)<S3BFP`q,q"a'[MSL{b	Gxy9'

+J"jL$]0T?_ },-?'x9ܩymiև>wUmڒMR-0qDWQu!Qݤ^vQ?zeXF8ѽH]Í .l3@g

Bt&39-tݠm˲1U8$vXjUefiLT*p(}G1R&a,։({/g˫Tyէ= @2Րw	'cbcĞ0X%55:}dy1҅I1zBYK@=6oD8'n
45|ʐst.zNrE7!;?9xc0pL	5QҖkmB2vaoS%]
||IzPyGgj407hI05)BXJ,V0CNER Ūg\mpEqĨ{Z

Y1wFGCMf*w`QNل|cϨ')?m
,q)?쑞U*[TDF7])X+̜Α$EZ7@qJ|m<:3+1$uAv-9x6N0x2{,M`FM6Rkpqo_dcaVyn_E7HTFv{'-x6Ԑ+ >4QL3gh.b%w|-mHC@4>#'7a1sp9Kߖ;/xbBYݕ2MVDC^gϢ'_HCK'eY{rMڌ:WwP@
gz*sݡf=e ˂]z[P-hqUOPuڂћ&lk)1=ʠ#&!tLGc=MoAhէP|㵧PT3]~*TB)fRuPiu
7Fb{&<(Γu8dlYc#x^fɑ=떜[sv]Zh7HWEE~uticǐwY8z5wn-(?zdO赝:2~sk9PE tJܒ

C	ϋhJ!6~n>,gKdr\A?!ߗh/
1, e8Ao,Q4dn4S]Wҧ7ӄ.d[uY=ͷ<wD/ӢAg)(uHo¾=,YzO:%%%bDW5Cv+9ލpWf#:pJӒEVu \?,lwJCAapx]bHZI[qNOvs8U	kzRy/`Π.}NC1'H$q ?Ki
# NrN2Vg!l:s<v҄=h6}
eb㸓~kнB8zC'PTs'y`.cjJKen4o,2Koe _aP'Gwa:;4$*Yٓ BTP{$`?kX9nmNaMUBC~`~kN6L IIw"dbǑ6_04
RD!hhbJ80Q2pSnX{9'u7[
fg6F(ԃfç"wcbU~&Bf2Ux!pA3ތjT͗C>Hs!cM:bTlI"F!5?+ V%і۾~-iP	(ˋ6*if3p+(U;yT>z/؉LbD&M˅͋#YfYr૲ה[݁@֐=LkeRBz2?+A<=Gi;JBUXOdc	0y[4xM4Oy6P}w
ׄxKz3x(]'P(gB|3O`i+LP9g64ZJ:!@^(yw@65^w82n=b5bɮAĉwMٙgvO1GMJ(#Nm9N, T8cpf)Bܻ֜t7(bD@ȡO2ڦnT鼢̰OчNHx;3$ƞ
ma@.H
<w,\FA |^d~5Yahl%Tc1K8P-FH#c-JjoF3r}U̴ZUĳ!D-wԧKu֩^P'.j*w[ܳf]ǗN: Z_nlL"Krip*\'IyȾS6t߁e@7k}($эFQv;({QCF7`㮊j/Э_@!s[%0Ibape\!Ownaѷm\ٺ\(14=!
 =Qlc󂈘gPÐۮ~X/*>vsρ˒ÁۉB.Xնk%35=fcyR!?HeEs8n>	߁/RSiy,*NC_(،2>2%ɘXgKr8ez@@ec<b`:~[ݏt'tf^@fpа}Q
 XL-FRf*
@zjU7sR4OEt޾
	lzjӤZp
Cq|p!
4>ҒЍla+ZePg<IR1Daꡀ]o5/LCeDW
ERI2IDyzX1B0yo蘥Hh剙o{Qp9qx ?ƿ.1fֽ
R诠	MuB_NZe\|'(XYaN:4t> $amTCeC) ,wd`
Bax76 J$<4R
t,
hEa)hk#;)^J1d|6C{*qs/ӆ"ݑQ#t7|%IwA\15lпF^ zNz)2'$*ZF$}0"kDp8T8\)RYg_yZl1GEceN.?=~d8¤i}EtΫ3DD
8DwiH3YO.;DS9@z",'I#*ih+'"h4pUL|^V>( k9F{,X<S}'Q*ʑ
;BEQUvAx6us%T_"ڼ-gS8<TA=Wp9n&FOf*9YEv   }-'G
Yn<{z?:l!DWz٘KJw.4FuowN9}`mUs:zQ.ڎy48Q=f!%WƊ4h{w;VjiLp
t"e.mP\ߟ8PBذ%jI1dIggn Ҧ'KXzxڱ7<#ѥYuȨ	i\5euiz2V|ߗ$ͯx]O>\Ln@qZGU<=P
9X5uϸ9i>GԊ$V~E|*ۚFCE,S7:{ʡ_h@ܽq|&)+m*uk94%箖Q,u\.G/	qTggfPBWxS
;L0=_^{L-:?{ZRӔU &2;Êq4(ltSfXMO4kxe|lh}MXkC'SjC|p>+p">ҹ[C\^oɃ/9WmM7<DհCIMu^Ir<,of|ñ֙_pR	m
q뤐+[EE1/Q:g-ːi+WXAM5S(Xp<O3iSL6L%uᬃ/|!J&˺
$\NJ`b7l@}ݑágFq7,"A>Z(Z׾%^{}Utbt=H72>ؽ\-Gv @·}L]'y
fop[lꢆtT5Vsw6K^8j	f5''u</OjZr'ĥH#SBga4V޻K;ZD-]ܙ`/kQ1͢Xkv"h|F~Kceq}%ezG.kՙ2%ǀ⓯rKe!JL򇭯@3=$rOt'DXE#+aU^DL%CḧbsHn?HlA4-
9T`F'LJ3&x$:% U~ow^>K]<O~l`%Ƀ,o̏h+CVJod5?&nE+BA$P~{%zFb=N<UtrZ.Cc(HtI2{P*V+lv]3fvlfkJDkry/?}PX62.S(!ᤨ:뇥<L=E`ɞnyzYWxH@*Hph<
أ}+ii/۵_[%l]a5⚢%"%݌ۛi.˴bsz2@CLN5n^GRbZjS,iU]p"c=(BNlT?t
ꚩ/οOiXcwaanNțB22\=Uݮ`{c"1E
Djo|sf`ʳÑ	<[q8s%T;6OgtfRpGmF?[?#2
r#r{+9%YLߞ 讑bp[U|2_E4Ie;'.V)l怐1OOS#éJB79
qL%LVy'ZX:HgfhP64b(@L2%4L_z!+)gfs|b~
B֣_Z>T8Jˬq*r܁.HxFbgۭ0øfn]8;RV1qah2#ؑY٫|t5Ky"
juP0OBYGGVbQK=wXСol>u:9VfWySVS_yo)HN+r
y:uAq1Z>l5-R``ݦ~<^ bjan$kAS
c|nT~Ҹ`"WBVIpŰs㮬&T?X}s6i/[
#ŧ;#,!a	Kwq"AUbo3 (z
s=mxv0M>}.x)|GWpֶ%/+zv.q0vOpZy;hd=6îx|V<j$mA? }(7a.W@4ă\-,k++ˁ0Xx9чzjzZ;3T;TeN#̬P҇(C)tyn Eϴ~@g,>οsEk韊))WuF$솚Ro,99F_N|vF,myOX}u9-J(	˼dctQA〩B(<S4L=Smɥ$EvV")C#~o9sc(0GGG<`azRÎ/w0MpzvlRd0^eZk
lshLxL.+zuRzRΕ̕Y_kz8ҳ0DE0s>G@m)#Zp/1ّep)]lxzK<cs1o'l28sopIbU;f.cIwjLbۤ*+2cwa+T@S|.$Ѷ"
V󇳖l3>煰~e}? [{=UqX?89}Ua3#267tDVuFI8ά&th䢸(;
 1ME/Q5d9Flݒ@VՓ)IP܎}A ėZ'#G8
i`-,oႾW sCFD'²6կ6U0g

C4Ҙu`$4;ɍk-)[1[ |3wAK?!'/r<+vb_bs湤M[
Ց}MZv<8dQU:PIgq[Tu2dɻI)P.
a61.J,{,rgA7@?-@0,ZX)g#%18WfBv)<nV36r󀾂Ollm\{Ek[@8}Kn99/6QTiGd2ДgSH!Z+QӟO;Bm?#=zM4!<%ϦSڜ0wQn!r֗"z?H}=9IMN[`NiFSlR	;?0*	 xcN9{-J
Z{I(kc|+:V*^E*~Cފ2"f<o	~+QJM/y!;Fi,m Jc-a>h77j4bu!lUhQZ:0(gǳSo+	.̆!`i$&'ހCs@/s,rLnγ#*wz9Y$4{ۖ6aq"tw6.,&g`wJI̶jaQ"h|L`;҃$0DA\Tm`G`DW\Ou7ќpF?,uɓprgjϡj)ɴ{8ca8=T;f"<SO[kާ>E}
Aw?/@Ʀ-ov#4@5`Aby!Qz'g)Ԟw c}+-3#4ay)*JZ%#|UI}!L@1Ln:
Rkd giF
=mk,!֭U4P"bid-%#_PrfrY,D:1չx.FZKKNٸ঎D!
&nXD01ȣ0Jeƴ.L+;ii~$7Fy;V)Lۂ<݂+R~IkG1rSFh<Zpo}|p~g!>nw5h,{:"]WM(nwNteH8K6y7 kh运~Ru|<S:}h"mJs/| %Ē)9!uaXJ
	ݔl"yn	
%A6?	/T.ma3wo+zz; \fTY(v[@k1MaP~EԂQDkg)(C
ؓǯaj8j`R9;^ǊC)-O㜎d3DCuxC?5e
<cжػQ\ݜ?z`a
SXဢNm"P222ig
*Tˠ'D~QW4ZBJu=I??j"Uu`5x,3c䭼ǁ#enӫV \_|~@ ~tާK~s?m6ހT(HjLwHoWzS8Wz5ꧠm[2%HT(=lx@><HYW"2>Fo"b7:p m{[ݴyd^It{k+V*dm^7T=Օܝ+	ͼ"(~{|d嗟d]c *96&YO!GB#g=C(9Fx'5^̜.~"SrzXtRP\͊j@mjcbAp0ˮK-Ba0Y8*m  ~ޭu,iUEF`'@@:VIZ=r|և6à׶"S:rm:bH+z,ͅQi*zݲJ8gZޤNqNK@zkgGEE=?D:^E[-3
(3P	Q ey!)w8v]kچ	)!bǤ^ny8o<M0#'ˁMkI&ڋ].Vf
DUe]jS}M/N	7E[1 <fH[BU&2گNRb؉tqX༎ō=,ƀ|ׇL韽'brVEbG4Dl}oI%KTW[(w怡_4"'Gjոnl6X=6umׇ}NCe'pA=k
qs1J`H	PD
<rQaL#5#6!P5S)PfFG]&DqC5H)ތC1	֕:*]77w¼m~1 l"DRkq13ތg= 6E"m:A'b}3R^dj*	@nP\HȆ6xmgH뷑Qs\[v:s5aBf9"SRdWݧOF7
Xl!cߚw
Ѝc&I"~jas2ɱ(z>irNfVr-پdl1zT+ULd#x۝:$:An͵L3[*qg߸Xؾ1₹biX %NQL*VI)rډO	50ȫ5[8T`15c=A.mu$
4/mfWVYgܓjI'4*h*9gx3Jz:=X*[㶝XWoLN2BuYo"s3*M@B]6;4;HGt;LQ)1NvP4a8OWʱ0Ðst9]I*&Sr]-SHf_;JqiKVekAB.ɧG"&zdNW	V!@[c 7x6^7̨M[:0"t9?&H_J!JW3t/pU(r#v8}TyrWѢ8j
+}M̭3^<ίh5)e1+{&N7R"rbugӔO,<9{AL_Z8!<:aGp$e-#0-g8V/zk+KvCli/:G"Ưǿ;fX(njZ
ɷXBG4rи.6X*)H`mHjG ϰK|1gg&ro%_3,"?hn{)3Sֵ*H[)!L*k`̆CX= )	3?TidYg*OiilU4b8,޾eo_=M9{u"0YRNìq=s19s)oaLtB!a	ɚ{w1/\PmrtTmW\ñfe$殧d;Zu>s7l$	iV3YGhCa(ar]3cfz(R
:j ֲ!\*gfHZؖ)+xXfL#+d]KE;LwޫHS;a=s7e*Rs.k؈0H(ےG&]<}P }uR}
q|oG׾ Q`/, =ab暀?|{r(A߶{_G"id7W:ff#Cf/!1"ɋ-OX"ҌWk95ʲYҸk	ܿլME3۰*[s[<\e(+dJۃb?G߼w0r8ȯ>-&m6;G"5
	4)nϽ,Yz|jO)˵ _~-c1	Peg3}9B<Z%Ml,hĲ̗W(KYs]{z6(
50p;	xu@X3-hD9JWHsb'9mYisʮ* 9(w(F1\!Uhvj+Ԥ(+:lFbB!b@|uo1M5 6)rL(A8fE?Dm7$ߝĂg2BG'ӣs ~(^n1~I_ԠfF=תؕ&U jAVюL!|FypUJWјԩw		=zq"LĢ-l^S08HUņ2fn3I2,T8]AmoH}CmQR܄j{p	EGAz?5̕_UУPwW@L;MJ$	nRhϮ-I6! ItsIipd3<\/_9Zne.o:h69	(<Q></JܦXs@.-k:bOmk}ON]O_Bǖ^ѬG=ObK+G" NcY
U2hH,bx`tt0{yAN8wYTL-VU.%?ݜ.iZtA,>/Iť H		ް5cْ:(UڃO;H$'>@-Ci5SM0ţbT&)Z@Ŗ`8fwdU0$rաߢ`H&cs{۷ZE+f
j`f"cx
^vGԃӻ$ҏpq6be:CFyMɉ7Pq9ffvF ݠ&Fdi`ᗹc<L!LE~j (Q	Z/".mLdc_MN
xX]p65g΂!G#vԆ>)գE<600g|Z
||bԕLb#+;ʗ2$ 1јd"rrI_@М x	0HSaFt"ɞZ@rchـ8/(,@to~[skItzqJs8أ6kUc8ŔB5l|[D.eP|+#8Sݟ|wu|&zJ	s25J@-cimP[r=:BcT#(6I1WHj^UV\]|hǫ''&-ЪG&avߧ T+%vJӹuܤ6eֱ^!GP30;'3F`5hn Gr؇T<}:*IxOֱ >Xh_O[>d1m]%\]φ܁~%. xj*U!HSݕӛ]S.>6%a#Ω)k>1VǏmU@:{~jeTP9skk{(CAĞN 8Me@-loO奧ރndh'Nd.T,#MOyQ7M&s[50pl@0\F+jzTfSNFnYL
M
ݨUx'sĞb
.,/#9Va>7mä3E%	.PHVhf~-y΋(X"8A)Zf/eVKKxB&8Fޞ<ܣ|\="Jώg-v ҾZ錪W'`˦ZmEϒӀ4x	Fc:~^/ddAB(U.g"	<I2pȫl֤v|wm&o>]󈌥.Z2y'P?pTc_$EH_#Gf[6dI.|SA+֨)]Q5BY0U0'S|A
.q4*V=-_?6M9H,,WD"dWN؝^'o楫[;8B#밊1?<xghe[1[|8rvkR,dδx K;#	-MXMT_lØkN4-Kx\\Auq⶙2IAeܑ5>Y;㨞h3k35x7ÐeݻYpT'[>}.=FƖb	}0&ĚF~D{wbص5zcKn+MA;H$ԦZ\IR+ͨ=x:QFbo&ҭz*'~C} !Իpc&쁇:cj+Lt:\&mO
ĿP*#_n9h'r%
Gb_kP_{oCP{SgW.OM	  l~bJ7Ni2#5(g:hZ!8+S`E8}UV	Ma Q
ӘOT"4oAdg{@\׋Z"S[TK w?ak&@pț(Ґf{4ĂE\OPqE4)7i2$}	-V%y>k<!q6P߈g*(3T Y+
Cm*-
|/JWPtVae-n,xld^CZhߕw|9a,qqkzi^ؚkivM~ywjf?"PPy1R$|hi$ϻ8Bu6\CebJ_=4T;SY3~H]ˮbdfeI
/&nƥݜjvl!C
qCR}3ǫVO#z	8TN	:-M3qF`MpY+v,N@ceh{28&&>&CO<oROzr1ڇńt^J]_7ALAxݫ&6{XEI'Gd`:ҭAhdO"6ix{޾C"F,oEwVrWQX{f^q"	}Uݡa /9:W,:7;P?Wڭ nFR	Ɉ6hH
{M|($`~5@	L>!F42H$)\8`ٳ17!8J{s=Btsfޅo^sU=9|aDuF&ZղZzw,$P:U2T0x8bNd~D &p2	Sd/
bB@=Օ2~X{76hJ 7E>	?.g͇8
F.MѸ'+k_D/޺lAb4fqh<+U2&ɰm)ro
2siT1rB"aׁv?rnpYR|@S9L{
d
g@-$\S&ReSmf
m[L{yYl8l&M;Ngqc)h&ai۰M#;_*֬	U`ӼƶKc|Dc+3<mL}1osIN)NʜZRB׳X5"ʫZ*5ӛ1Dg:W5Bx5oA{;_`cFx(nF'Fߴl);wďƳ*fgh
waҧڵf&7Qm<1dqB45~UÙmMn ,98AOeg)0zh^0o7hܲ$ F(iL5fyJvDQ;\F|X.)<CR	\ 	@Qe"̋nÆ|3lF=>=-3p鰆˵ g6!nR&yIpDeD1}CX!M%Ai
~+S"&睂YTXXɵ~BHowHԱɆTByϩwpI%0qZc!Z{]|4EU`ٟl [1A8Su/e(AG@}U(mW֠ݛ$;rk>`6
t'(U!2qz$ԏY\'SJ.*Oc1Տ{B\=eL
BOGMJ"k͆v»Jyy/sW盍Q#I
0m\`|(R[z`k2CG+fҍ]fe=M͵u͂j$oL|Wqu;^1]F>.; =nD]G?KʣWd)4&ghB`[_\ƴ0vDnQ%ŹNk9dy0fEQILsBmdXd k7_ Ĉng+ooC+@X==h]k#o\ZbkVw,)} <sF /0@t M*Mi_<?t`%;N>6K	ճ/Gl Up4uYV>P^T
;-vPPu<~~@HS|Jz/^;.WE)bk.6C?Q>8 z3\|0o;Ec#N9B@Kxo=/}̣0 'W!)]ЈD4nY?3J܉@m]JoZ}5}D^=A,	pfY~*}Ǿko
9u :bQhkڇtۧLC)&}z=oVnv#%i$, @Ctq3]MbnaW{=J		$ejۉJi]\sqZ`*[Jd 8-\x;ڡyq~X
P!-MXl$ICH<%}phgUbtPL)Bx%%iYT|9W_/,f:]`p
דk7DGbm#bفjB1DhB*o9+! 62mg"a ;$H,E
M;AY~lAs)At	W%7N$7tǳrϔk[8jwp.q\dC	T LydEG5jڇH^S>Pѵ~$qBEjOIHH]^g/O.#e7	}f Or1Z&u|8ՀIK~LzQp;3'5vW
#UoSC)Dsl|/sV Q^{sJ..w'9~pD:T-SߜW']#+#M_n(/=jD52By )vh{jdh؆ӘEroƘ-_
0N+:g6=9g-f׾(K[*
YG< ' ȻGFKN.VKe7V0I7Y$*kP|ӈkծ`Ue(39]%ea6h,(s
VϬϕ O4he\륹@UDmීFnNywFrop5겪@kAXZpKȠr<7m$=H>ϣ`#k"'`&
qP&1鼆MjbHR34e 0s{Zm%zaLpx:_yˢYEnzZO܍:~׽<]9T{ύ*I{Z0:%N:\j=nλ[P8zD,+kn	Id!dWئ:kwKʓs_]rL֬ĔTtRZ	Ɨ6#=-4k&^t"?@k[{8K-
;
r֬LNH/ÜDrr@Da];{i)*_rۗvVFٟFC+|3#@q!A7ry	-t'qKF-ZKO<-KlU9TiʷPLVeҔɜ&uҳhGwdln	SXŤdJO3W]	OV0_~T2򀇆[X bTBlÛ"u&>ᙘ1T'Q۪ܪ2"-#l
pwAvwla&HAWUs̾gj2H1S(
$pt;ؒF>
gvmc|/cmuB0;f`xɅzt9ZANF&/ӟ.+hWRP_$=Ba\IKx(;l `tH[k'joNsN
cuRGK֍;wX&[p:%_Kpzz$UX˻}+C#2ȗ9w&++򑍂1+B?q$@6|WHFE%#恽eѺ4끠h+!\u̺:uLQ3_m_F2`2_ʽ=1rdo؟H,xC
e7x%[<
?;jrO
ԃr><isPLLhƳ%rH,H~w;g	3B}9jUf\ЗA]?i:5Dp9_7em7pF Ϣe
c<ܜ|JHOgCY'Tgqz<oH>ֻ1kIgo%1c"Πg`<|sfDdԵ3_&+pܳ"Ja(H)KcNPhƾ
-Ҳե[A96?pwzzVW	:H؅[neW n|m?RTK=G:L·L|wNe~H4Ϩ@3D{fh\XAsT;Ng9S\a0d "u1`!do췗W'{0	`:ׅMښqӾ02,/05kkuc>Blq
XȴT-$,>1\(kd!ѢⳂ^

jxp}Pa۪`LJ-uotOإ:9u?p `@WijR.tp	h?A}':Jfeqznbc8U\v-³jT! cwe&*(EUt=xʽ;<staW,N:=+~M!c-)2q,s	%"(XaS5p/zܷL),(wEp
}7S+)TV×$J9zͺWP5G323LTC	=u9UA56"6=J\<̩2A{)qM8s=ao2 q~		m(xڼGdhd+ pYħ>9@`^Fr
Q=;)Le0.A丠+K|k^nGz:j.Hn8ɖ
ywm1^^\e>x_@
rzw~QW)Vnte8b,%l@]V{8Cݚ)<0AR½q_$DW԰xYGgÆ~{vVSN6#mkhqTS,%J;k.U`IiA:S~_PLN;3i)fѦqR˺S	lXRwX_~j_aEYN)rQ@t2qpR}AxwQ@Y8iӂVfOȅsr^{&c@CyxRj_Z&Ab[u
YM::ڃt!%*IwL42p#\kNyT]%gNW` 5m^B5&C30!L&C蟗.v&(jQТkc2<)]
FN&$ߘ.S iV޾M[{E-w
wG>cc\Ȏy^iuX iB|[>t-.%~Ｎ f(Nw{J8A0Fv<̞ͬ΋6i1[aY8'1e7K%2G4i
뚳M9ԤZTe1SQW#\װNYR`:(=7-9I;AmeI\Y>3܈v*Z#em&k0-~["*=Uȃ#MO˭N|\<tZ"'nwzDRpgx!ϕ<Uy$9,+'?ֻp?|\BўX@J=/vZ̽b$@^G%XU#LUG8W8KCc_|;^o :kj^E,F-&7]뷾$ej^f&K>+(}D635wɪh}Zsr16-i/g{s"\谬E^/M~W5
ͮ-CTJ<DܫOy=8PÎg3<@"7}A+Hvn\.z6Jz|uǗWJ+%<}ޞ2ȟbI&rLM$ʤa,I:,)r*FdH\	d3埂1跪T J 'LSy>\N)YأT4M9@;rcӷ\>"î?V5yJ8R⮄=wСY
pƷ WA'B1(Ц[L؆\w֕H26Wd-VI B)C2ٛD,	ųCh%p^"\r]tr'D2F5Hx?Jc,~Dph$Ӯ&%]m@[Lf.AWCǃx(T(%0{%vl|KT1I{2{.وov7A_cR|
6dC>ANf4D*zK;wԷQ!re@YbmSnK.$)Ld	tjJlה%++[8X8w-tq/tѤ
Uշ'vB`X7=d-FzM8RkK݅4~RЃ_/7x^ch q` Όz	(\)LzBf/-%Bj&~_dļRx؀1	@[cE8 S`
-/Fw=yØpaSa/ˋݏOtԧ"v"ei \ֳ4PgoAd״q.FG-ReC-}L*IYJ`FTqĂXz(u1mFj5gΏ';ZfLi0p󡭂rr
f*f!
̯}Ǆ1P"LT	Y!g/W=dͣ=ZVj2^ۓ"=''0JkK&O; Y/{:MUHL;$O
اn>rX>(دr>x$RQJeFi*r&r)ny3GpEUFƟ6ben5/=4~&R8w¯ܷv7Et|ƐJ!Cht^Q''NE&E~؎:Tw%۩crT2]9o`"\h,u:;PJ>pl*&)6Sn&}(
QA?GB@{|%)dH<ZŭK`i",M\׃p8WO8ʆ0:+:- />K.PqRGvlv$/0W
f6#3e߅{j) 27{R~:.03gd0|莮62ez}F4$ۍLHW {b\/i={x1=ыϰgK/E[E쁱
3ԪѿO.PwtE_8~<j,⾉8NWd7݃MG-VUzs[휾2DvA/u7+b72vsYv cdvhr0!y¡/#:bAz EK@xtаF޴"3t
]N%`[ȡa~[8y߼ӤgY֛dcIGiکCyH43LS!9ByfG-@*N#gIO1q073t9V=ؾun)`L0aAV0^[YWǘѶ-I2xTƏZerH:ڏiّ8~xcbSV~=bcz:H~k.Im[2j?-u&zi@txɦ|1/;O!aӞ|9ZvCOc`G;u/VHz-Q8>m*ǬokD"{:u5 \e.7[w8`-@4:>0vx^'ׅ2>Ifz3=n.cM:X-gO)hyK}H5N
ZID~ r*)//@LT5|}+=.mYJ=W*)
u#'T_5ԫYbki|SK!ev>q0v^>.5x#dvVPfx_ fHQ!-]Sbx494}{6}
)ŕ}5u
LS7	B2Ywuw3{dn|褚oKZEq;%lUUM*\Y$c\z%+"ht)h2*9@ l<dG8P݂Q[d7d6&05$dTp4οKhPP5Mq\,l"F\qkZ<^g"#E!,1w!zq)F٧.[{:	AV|nS6I<"ez;|hL"iN-7k$ԛ rkV;Ds_;b*IoK3BӚ
9las d<2(l*oo6gCW#h*JZ\m|w>nmN3pLgb&Vy3樕kiYEfGJbV*iN;J3Wꋠ_6˰	5[ly}&<5|>:t-1	B*TG/1&~XxB_߲TfN	brFө%xi%]#<3;iLF~),c'UqiN]ͣ5@p_+7:.9Δl-1dVfHA<},t
&ʘfUO9+zR$2$j@]vT`U^ +"!sL8'|}{0&ֶG:SbGi<8vܯPNfz'jB?S=S6mc"hS;
\C	;]Fn:;.9-%0_WFJ.Ar<CHGsZ$.DDv67Qc22g0Q򼹷J?̻Ŷo,I0RV_IDFDpwټvzG 'ѿwD@5WafFC.=
LqnQJu vbrvP|tQmt>76mVjOt3+4O,o\sz0vki'X)
.
~]yVJQũ؈~0t.85WsV|/`/
Mm,PFJTaKKރ;$1E"w[eÖF8:Q>CNP.BCGI,su+)P1N|M[hC?N&Ui90OLU
r3X(|pboڼ8O"twv_Y{d$c捃JZ<>?N+lH(a/ fyB<3[Ṃ=aI;˖x1P^>`;`[DTccmK_%9p!
M&r`t@8A^/dʷݕ<SQKK"=P "ՁG'
1DS@w_5YWZqe&
	T >A%H1ۛFO$	*XgwѤ;g1[R 1ٞŊKxH-pO[X}þhmD+}Ш(ݧd3&jeL)кKKsЋ5M)c).V};6MM/HчR$4Zԫ/
ٲ;ߵ@c"(m0^V;FĻn	P,J<]@6
l=iP"K^ц<_#FkoHS^;[rz
}FhU[s]?s@[=Bx.pX?}akL/m]qٽ;:4mZBJBb@:QE$78/'E"{jsv3.9d[Y>ͬh:l
&0kevC}T%Iu`8uP{OsF/O
.|g9} ;<I*ُHC97wFK~$>~,SƂiy(6n2ʡQ⟟.Ci)~UX)V.7+DA2gr'}ɪAkY?h"ByyBwրYvd#T3%[tSfh[&"䓌xEu5-*maF C%-0`Rm"F}84v5gEU9۴&=+:Kae掵p:Li>/J:-^֗OcՓ͛9sWL*i	=r)H$i zy2Hڃ9lYsuLrLбWz3@G+pU#z!ԣUՆ(~ek#koOl#Emwc;@>me~ͫg:"YtXld&2z
ګ?	<5쭿3 ]",߳$VX2
CO45O_. u{u(bpGfBn{VїC D	&|@ς#F rJ؆gݟ*֪?F"]ǉQ0%T=jf^Y]-;XȴE# °1Y;SEENЦPyLXU8LYLQqFu(֡!`pcRCr\ߺHoW9}e=
:Jr
c	 bJl#uEf $=gN?	@ pk%m;	:gUo
ʕt`?勋m	{۲h ,@!bۣ
wZZY
mLGKN.MȒ|>߰ cI&=d3	|6gvE<6a"؟Β궉J@ QY
QdT]K\8ReޑM*
e4hBkDWRūy~cq7+/\  5JqK8v7ٶG=t?h.E[4 YcܞjGA}Ы) '!4ZӍ5A8eQI)~llu")ߑrb83lClUwZ,7'uQj89?nX20)lpذcs86*zdwlhh<!7H:ĥjy3r&F:Y3.>Ɩ^"ަ"O 6Kt'Q̭Gj9/y;WINXҾ5YDWf2ƭ7ڎ3Zx+e@Ԑ³Ueע\KRe]3^n:B6,0_˱A｛DPDm?g5 ϩΒ8аgFzE^S^Dlk<ɹNY>
6Eag;4YRy b/NQAw1	'(^Lk-@hfJД<3Pote
;ˈ/抐1ڷc0 MgMGJ2WZK¹ga MNoXu)-AQDH&VΎª5.gZİj-aUE.
]ztg
 	r0_h,Yӫ_Y4QjlzxP -[PN1pSy8$WP;'Iw\
3bѩ5+ve[o#]90'qI[[.Vpx38X;«0cI,,퀓;NEʲ~c%b[5f C>"
vdR|}:8"(}!CHˉLӀt _7)$kI4Hd?GD] l<#4a'{x/:_a.ǡCyMZղe$:T-KըlCY4NEmخ:>e|2r+3l*lAF_<ޟ_ ֎,S:#jr5%ۺ u3(v tY5a\h%OǌSO$7w=FINmޝ!i
fOm0ezYj;H3sOHͫSji{Җ:)o|:Eǣd~.8!艅Z^x˻	i@o*UyJRƂN
Z.J<}tsYqgVh%%(`U9ӽV,TtkTc.u]%d(/y
t{1ЯJCC {w'p,X6QMA
U6&kY˷/9>j]O!dWg >T9BUFSRcI%:ҞyJ8߾.4 xSfHckF](wul;KS@jpS/<VQR9o-^rׂp$ tmvm:L9r(&J7p% 6J" ;_\pSY+E>\F*:+0j%϶|)He_sӶN:Ό`vg|S}2
{Ӌ6TYvɌ_<?vJb!b5/Ă@JqF`ϺxP
#
p}'ADض.02,(SPHj]ga,[h&s1s=ثsP%ߡRfj(~rC22ҸH(WZEZn{1;lyTmE>syCj	\%.Ѓ_i({1p"tbmTO9OLT ^eQjuzC/AB4q&Z>q{?cƬ!}5^Ì١z;ucW
?ષwT@vb~&KiDKg4v	QILPQH8fKir7!w(jD&k<-ne1<**skp{y8Gc'
tP9(zM	XT-b羈dd[c`eHwQ	1멍n/cea,װ$;=`
/>+q?NQ19Dx	-c{6b>IAخ <|Sˊ'(H	/&ϴ@s'8&JAɎvPIM@j`K\"{}=y."g^ &%`:W<@']t0+t;CʨٚcE5	`w_x1-4J~f
y;JI%knD^u!jظRLl QF֗wOHW
X+.`̉,J0*QMORFM܍2kBg;T~slzH7و5"טU@ᱧs|6e-1M'Z>KE 4xwϔvf{{ۉ`/\s;͂5X	W̠bZ'3+6FPE.d].2&R3YhpЕMtz8Ǘh"&Kw|<2aI8_oӶT(4)<:'7R]4m!XFպd&Rc+tMN`cGÂjp^}|+"z;`"J>
{[3^1Mu;Mz>o3ovWt_Q+VdŋfME=

sbӸba<N\9y^	9tO`Z֟CeQw ~@ɝ۔|	ta |/d;,]]̰2DIБ}Q'w!'B	G8&b1زo<'.$ਊk54)D&EُP*zh~IM(9,,=N-U>#*PSiyu/@4U-WhTfXVOY.!LY^ld/ju*POro5Qʩc!$op?2QPV/Y&]%%cϼ[\&$݋rżN1{`0t0w9k4WЖgCejCN >
C2s
hq67(yfQSX 3̫P	YvXLP&<:]a^w@"kX[r8qL]LL^V`x51x% h' 
" }3Ȧ
 );}?)I4fq:64Ik$8=*lYq0Ѹi3{9m	\$Y8j:Pb#ٞK8^C_Nxz '?36_P6ؒFP	TX87R$f7̸X86*M/l+"n>"$LZ(
ŊM<5S8QK*uN.~]h!I<ʀ1]&V?0wel' XնL3_wzg!.T;bRVgmxկg[ VTgR,T\G{YUYKzp%'l;4B*nАg<]Vmq
-qavw,;1ef#e|mn0\x
u.Ι3$F"oBx#E-Szwu\\i"'"0c&mŋ,?PkX&_xboǉ)[ʾ˸j<W!;JU{ߍ]
>W|tZ~d:4c@%T8ҮF$M)s[d ΁=krl+3MD̩֮S4PKWn,\06W̑f5I4,KGպd?rи"T7`߿s4RY| 5+D?  ӊmw'6Ĺyӷ: m&_lCiGK\/$7__G^A-/B	Lk-oYnVZ!MɀUw|$A-\>"l/ri,\5Oe^txqqt3ؕ7V[}B$M`E'a%e}.lzibg[}JqcO;mGqRV5?MCBrH_s`q#<B	pʥ
> nxb%8PrM5Gq#*Vu볂Ja1Hv
#W6Su
@Cbr3aRkF)@:^@^lh_#qpX/:J^yc'XZӰ >spu(rX"89h}ͽj=1g\oQ
9)1M8hEb'
P鲋HG.ODb2jgQM:ԂR3-94^e]dqQ7_-2xJ+&~'ɖe}}~(БCb|mK !4Ly\0^'(3P<R-$i̾3n7
P*ƌH1++s̤T\"bjKzrB䭴c}xom,=dI䵹͹mNh_;EB2A!y'AaJTǪW2ή( ףd>i=mk"HPgν5X2{c`zjabu}chBO~5^$p>'`Dx1]MAg<;(%Ci?7w:㰥.E\rq"X(b#
R.c71}sGcТEs0km$7U3:3\x9Q0)ۍATUŃ9#j*(;P?N{3
bm6D1%bW9)UJ0Pms6eaPLIX
&޺@LH1jM)Yb2b;ef`
YAXkxWJD
2cYo7dx*G}ԦQ?up
uϹ'
"$r;+r>,KJKltDiu
gw)u&h)?{)3
np|~AIT'08"fǽN<S

0D0DN @KDh+S;ZeX>p>v#OEz-D_VVe;q>URcln
kE>>C??r 9`W>K~<3QF;{}p߼|Mn
61
8A(o
X	ԽUn-D O`S5Ϻ\>bӷ׀Ef
Hл
@p?grFtHvN[^z('	/,A4bJ|zY_;DH:4B_q.dHĘ@RE}]M+
,-:Hbc-
Y6Ù<#`=j702]dc!At)pxr>&MVPȬEnbWA g[@a1N	`tsBzoTGAx8^h֖yR=Wg'q"s[A0SrY>JSgpE
>
ο!Zg AB>bo@E5);v oAf2fHGL߂	y
g#q=5`ej_|q) ,R,.0ct">poz廥<V's+˦Ԣ	EU?ؑ^0Yc(4&{:lfY\\9\/z (|zWJ0ȑ[LA껊Kc}zca6YǦn?[NT _!r{5,h1-h4e+0Q0UhQFZT,䱪)kXvS*=NSF3:{O=H?D%אqgR
pڢKѫIRk.8qy? <vkJzB)Dmr@
Ӷeկ"ħ	vմ6Qdk1z׽ӟvcmaq>ē 9'ȓr83R'@,+¦Wb42зHc/6y?A~ð @BϏTQ-]{<O ԰E+*𽟴pS=_;πg-ω~$\$l@^C<7q&FwGg<hE|'N(zbR,&'WWU
%&Kގ9,աCM@-D^713y׊dz	;ǉD%%]F1C6k[
(]gQ6Kxnйt8,ٰȜ}r;Iމh5S{*^k.KFp>8SzA33̈́l@ޣ bȡ)w̖Nr@A5hs<Lf~n>ņ>ZdM~ۇVqNv-XjVkfH法x)mU-yW촮	yYtdd2fvECܬZV.\!DΫ1-{FPiɷv
dHo'w>QM0/L2c괼Jlkyjq=K6\}ڧc3"^^ݏqҘ8j9#WxR߿ע NPnid@L;*[*Sv(A址,x	6	X{tݭ?`5Ha 9ev0
I0Y*]n9/z@ֱđr33sqB6lMh<,Dfx F~1N?H2㻉
4aHnDVp͏8-@
 򦞬\2۹gDcgmV>O;?" ׺|men6Fx̵?<\0GZu^ADTbTs ʄn낾>tomhuL
D9G;Jfzb8Xo(#;Q xR.dy BO@Z"\RuBt=Uo%DKuu9:w0I:[>zfZ~#ӷP`x/ʗMRHs:P6b8("sS*9"DzZ{O͕idr֞gNlNĶ&(}2+xw|Zjxx;0Vh%/bnXh9k+Z)e׳!FE(fX2
HjwYLWT~?'d`D<z޸Z3 vR \̅ej;H*4I倜n*xo-:CWϐV!Ut6p'6a4u៑^YpIInGJ֯S$-'sjt:QTD^{oI~X5ND E;FݛL/BA	睗Gvwhg羅jzdGr&Dݿ,j
 P>}EyLD2l!78G6HvZzwffx$
+0̺zD6T-W.8~#14}v DFμ(a	P?IAUƫO∔=ư#bgVM,%6v?sLmG;X{ *ګl+/m@C Ѻ#b_ySn|^.Y+ տ
X%'E:<(ҩ'yW]Dy伝'W-nTyc!IzyKiK<wFPJ2y|,z$0vd"tfi۱u/I@=Qk*}kEUh(Dr#A)FBK)꙳?(@hFԤ'Bd"1Z=Of=]LC[(zfkO$KLA0	JclSz:h<ZٵBT߸ӥJnG1Ld{,,#Jj=J!C)d$) >x=F<	V`
^͢G}g)
3״SOBӪ!8=zL[;	z\>]1G3Y:P[*v|@U9OoSvO;%WEv3z<MuXxL
aQFuW@O.ǫ>-~otn+c8$9U7nF?YF]ꅰjJ4B_$k+RbВ=I~Ϝh"b様o\*ψ@˦Fpؔ6	uHRKb/dePS.Um颉8NYsZso/Ĝ
筱A0l
)Z+Ƕ1-hJw*4DMCbG	/ <ii=,=K(`o]Z2p+ZdZ?mjq
Ǡl/a,=.S}sF>4v+à^ٝ=.1g^l[瑶󆎹|Ո<`8ԽV0u4N}mE$1jeXn7Lc""l>G-VC2~m
ͽ{NE>dzil!fm#EN(1W:+._JqTsD
:#MqJfe}C({8TnJx`]yJ%tBUH~h͵eQܗ&d	yeFp>$,IL:?9d`mi8ָ7wP.T2y/\<_!sTied0/Fs_eWZE&#I! w~[k򳛧K|
0Neo>b,መr3ЋJB%o.%{0i`[\Vf
&^[GnHpWSCIdFgL|F+Cep28
{׃x͛-\e9<	KLaoM N>ꚋ^W$-Dkǰ`kAGUhwрP=%)deф88O%\U[-{_l:ݲ  Cf=(ccϘS֋aJKC;(Rtu]	-e>
8tJ\4D.<n'J/:iv{AlsJVhfw0
c帅#y, nX<xJ2ͫ2p{\,F	TxD̄2޹,B=6)"=VACNԃH?HaM];&p4A[BH78jA;4kwq*_E̘e֬FFO9mCz$c R{WYWA+̀ϡOm
1(L)\ t+\+5_1i6`pA8m6~/Z
8vqY0G&zs~xmڔC
Tu2>{^j#*hC<B
.#OjIU_kxʜU|ZXX dSJj=ƋcZ(znf5 <QM)oT5'/#%\HBncbUۋ"u/q&	lxrT 4[$)Ԝ+)#B۳2>OTsqBa R'cAVb\z|'\\mTݼG!8SP(`;
V|za@=Jd;,<{O/9m+}ٽSomI	)O5t%04Qyf	 spmiBi_~_(ƒs`ȗ"F"9N0} ۉ+7X!fD][}1S6m-:oʮ샱U[|x[n~28/v c^R4Rm[Է;" эPZ5F';0ĺ OJ9#'ݷO
2[W}يYjVBT|=H;
;fhӫ|Vxfz;M>s;2yPAcP&m^v5Gh
/6׀B)y_ b T~t{h?;}_k)yL3iFw۪NQ*,	-S{byz{70n㳧'N/)ihW3#A՘fv̑lt^VI.lNdM3=|@jk.x>o>H	8G{m @Q	iд
ڐ~&`Ý;*amzoq:ȹ#) 2!?r޻-Cu@tV2K\/!?/f"QѠ$e`5
0)Z٭^!YKjf>m4`TmL쯦"Y)C7'"D3Ed(L27J!ayJg$X:9g^1&qғ'%y]`gCJRt>
~Q.DCM*ܳ٤GbQ݄ƒ!/ZoG+tfXDha[yh}v١+F<,}zJc&h[_.d1cƜX*r>!f$-^X6zY	(ׇvxhԇ]CQ@/3gtlI8zcP@]E!UQcbl`\,(~yu*!Z^D-g$
d?x`4>l`)<@UGw2\MǽI@ŤWR~tF[~,
}w)NlV!izVKnZ])7?4|CrrDg(z=&DV|pX$:,5	`gWFIqW+G&?Sɱ[P1@IGDbzL݀qu0/*"A
VN)%#!chX2۷RBA&bTj
#KRⱬ8qK7Ϲo<,bJ]5f5t}j;_׿>_!
mPg?[2\/Ӏ\.hdW\ Ǒ<E}YYs'|:α܋SRYeE:nMAޖ!N/a!SdR3u;~zF_d6@ yd7E@u>2GN:뚣Lv?
3T_Ue8s6[8	-<5o$;DN"-H$J/6GSlpZ\R7UU4BٱfO#-b&7]P
x<8F(Ok¹^":ԯBtNu,]ɢGy:2tR?#c?mqsG^` LYRJ8= x=#,i(x C%sCL*̈́|A
C~̓w7}K&veAClL(rؑK9jX"p2d>VzO	ƶ)]jq/iCa/rU%yTpy ~;0}#@[Lh^
#'u-XCxFX+7%iq]<wdz`YkN2m܍hw\lnQ/1#vJ=gbaL3ElZwt,g
#Dk!LgC؟j؍ŎZ^J0V_Gid}vͅ-TSg+	ɢd$e\դjTBjw׍ZI!Hָ
	2X&~pV!mf/yطcݙj/To:x;;_+s	_;%Xv ŊAP܀`ᤩNk->Qh1qm:APmt QSLz\;XlFaȿ
uX_ȔbFst7Rji _Q^x$j쑯t*TG0YVDZ|5f8\
|75s%>Qb@pK](4P2;֡GzRhǁV<Yctgy+.@l_&R]TP\EX!r
+ev]Ga̀6N""o:"ԂjJ a9I@qi!#~Cod<G}k7BNx;ٌe{+.h.`6	a*2|p[{ϟqɍbX/r=2-3D&ݩVp:NPrj͔'Z K㸁e(w.CCRWa
g	1~;ka?/if
E	>KIK^R@.]vJf1zr4oÊ*֯ntȓ
zT-9 vd'IK$5#GzdG(qn˽KN	cQuIS54 {y,mR,"uj7ԞmW:/G_]&"%EH
ql,>8ҡ]ӎ(:,zwu+7]Q-O&=^uuw*6wtmIo=%E<~6$'NR
0ɰ
\ymo۽N}b͋ HOu! :+cgG;^$X24C1q~#)㟫~|S>rj
+8ЀEVs5?`,Enu1daWF@-:u$"ݜ(R.4#۰?)0!SzxAUGfe)H)Q,!GdER)ҙv9
=Qb+doU\WyP*QǞ\ _WT+ǉHVxb%_a;`ȿþC?GuLE	r{^{4 FGެ19[xKZ{pwP^4+X*i
vDw7
+@zOĒ;bV󊷆<orC4jZjK
Q482Ce^\xQ^K˯ڗ-Hi~Keo]f@Ah f̶̡sf:C8J=r #10yNhy.u:4uboj,Gx
 V4uTuZG	tAm_Ev5=pp. );9F*qAe+Jۢtcܤ{3.pYM$bhI`Q%{;OaD%>t'f+~(}'_Ziı&W<+H5rrs(#aׯZpuuK-$AL<Zo8Mꇥp)א[1Wm#hcMo]ލ?5vc5'uIb'
@y44)eeZOrLcRg,cDL^¦/wߩ٭L+0Í%:)ŉmnl4Z[B.g2}W*;ſ̝ny:
)&%l
]fyLP"!RXHvO!3a0jx<i0 Y
ڛT/̖zkx2/Q˃csֆ %o ]8;kЖ46Hf񝿸rUEde@W3S3a&_>H	#RwmT7vj{E8mWu{</MEꗱ%1}(1k2ɧt#A3"&=hիqbpۣǊx!FZsx.^=R{kmM( ~_ۄ@gK^_lV|NS{-o{x_p"`[Ӱ9ԐN)2zq{!P>x0ɷ~TA26z	h h,nu0WpGT6^Ǒgh{	}DNRuK${?3d˝yxFN	E7exVI74kwi<IE;nO	1I-1VbU΃2EU5*o?=[T
 3L E.n
IP-ĥeҼVLյ+{6Ds@JNo>8{	nVZ~뾅FsD=*ebW[@~0L`nJJhU]p[W?wRK	YȪ3N	H5[3[P<m3I'ksh:ת?Q/G֋2$ %灊-İmloYRoy|1dw 6"eWAB4cUL˥y?PfyT1U4rmD<M~M$8䰸OP.cGz ^TĶI\-3ieK>0(EHxGp-M@֕1uu>I3o$h ]|}_H9P::[,Ez2iǨ
LGtK%l2H@4-̟<ٿh{U[j	
B\Fn[a2Fz
䎚)_y%GVʓքWh.g?ipұ,B::]ESSz?((,àc8u^V|
pE"Q "hit*jnyxe]Z£A%ՕS0?q=%u(ºiCn"lpS@FTn"K[<Mqcb㖆\3ҖC

VC륆
n^n&kB60[yq&q蕜e
)p >O֘ʡ0vfqشrx|2<aSQG;0N)]	pWcزP?U	A٣u.;;3&!oD[(`[Hmuw
9f/`	_>ü"%vq(qw,$s|񍒨g)S_8y8L8Xar8B	>}86ןI' Q{^Z)Z͓^lLOR~#lHe	Hz؂v9!FV-[̷
oMxk'AkK[b@/r"%TQH}{rcT嗥e9,	. *P@v|EvE?j~

wJt/Nh#oшxǓjZdb0oIEGԪ:A$ҷLBz)[u&?jyȰ;,-ސ557GƑcWZ"!d1Gs*XCN	<[P}X&6Zӆb*#]$w隻*zb^đ3Rpjgh֯o\q6#=7ca!Fc4fFJA>qm/	r5qʊxE@ut9]ꤍ1C6DӨ̉6hݝ
Df@&xo-!ev.OUCf-~!>5vX{Dd]aM-r*Fn*Ò9ba+󘩛]!hv-P؈&-[3BFl

dq!nNZќQz(O?s-."8Aީ\6K˅؞k!}?F׌k9s֖8 N┈ g{xT[<]f9Ҽ`~m	-, B&[uC",榰{xan9@\F)w?:C= Fo.JWCݑ<BUG1\eJM7-6p`GrU[<j tZeӷ1VZ11
C;:5x,ײJ=ڣlei{&]\=2+c&ߢ
X	{ 7#)sbEǫfZP	$OHG
63ܿ\LONo@aqsC zˊԧwj]3ש9?J6\!Kt`QU#̎爫>$L	86
DfK)c;d&9L}ةzܗ?spA-(!
IMiū!7ΞK/7A~@+"a^a"Nxk}Y:)Ҩc "+!TF>KXH6[I}Q/s:֤n>&+q֖*\=T(HcWyl~m]G6{X%7g*pLeR-,Ks6O"!$G60J+Ng&52lR\>|~~29*,	ol'N~
>6
D*VF'?sҝdgOI+kT|V\)'8u]4*H3cu+<*]5`):q}D{u\L""ז|u=QEU_XI>d ;ʙնfr_&e2Lr(M@
]p`q͏
d&3<mM_Mn'[v+${s<kGIINXAFKH7-15#ˮ!K(pьPisGq[n<yDs|9Nv Rc}>gbɰ2bOh!4*7:̤HUd-gS>f%ew@tJay`b45[}#@
|krkz$T޴!d˫δ0 vpҋK67avܔ h`l@W{[@\>"ί}th~ޔ,w8O_S|cnئznF+b|cWsoo͛-	l{b~ܴ})Wca124Ū|lfyvyoJ;Xy, ',s(o#BRɇO6eEl[2[){d3f0O
"7K>;2=۹_ee6jI2͵c3C@dπ/B;|:mn\\>a]8ha%qt%psӠ
bR.&&M1}ъa\B̕y~g6c3n Ḡ}pH/6, ߗƏ}fk0O:Ϯ;dbbf?G]32~kK*$~Qߎ4jS
97\W
:=@uC{Ouw*LvO!X9ļdp|AlCH^3'<OD1ތfDP2ͿkL:QF	]aj;R ATI"S5KbUF°ts;i|zay@1t=A*;6?\[\OQƑ4ᅳ-J}(xU_/^:I-=w[џNM|ڎ-Mi4)
]#>n5}7XU9͝1/Bu3`kyOru$!C4cswOŧ{\`}|ӿޢ҇(r13¥"$C*+k8)/GTQmar,/°3l(Ek])xj4 <B	wk
zؗBT(6i\CMl {hۨfݸW +z.-->qfr44`eR_̺¶<,?uK\^{
{/9uguE?kyMh<[)t=tob֜.sdjc6n߮w.#
`pƪ(d`
<(WK[7kg ]Dfjiz7_P&bԅRdWpͣx?-ePf5cZ
6gx]/cU8l"ћJ,AYF'!1#B1pS)HyTz7T~&I+"8+LZT<*8%)0gN1pr"'Y{KS 4ak~/e:qB9Xly&)S!R0wJAil/Fs	\3)A
J;*~3^&)shd.CS<r.vkP%6g
/pSB02m=2l-yd餖zN*[Wq|AxL!jB3p?ձ
%[QU:jR,x.xꌩ4q1f")^h d,[^?\qVCHL-|FHъ`ЄId|r +UZxTZ184Q*+GoRTn5qd&<sǼ%wG2=*&<oْN4"[Q4B#7DJcKe'FHhV:#:Iq}ap+-(َ]S1Xh`fCn~rP6BPCR;,^9.t'_U|Dpϳܛ;vP7$3xf%G#Dn
HHJ6k#߾ޙy؞!$qB&EzىL`]ÐcO%"[/TL)pE}5]yxٝdYj'"S^6&4c9{&D
4ւH.-ctlP?OV5XURZ,H9dQ>+=|I(rQ	LR)	6+vp{-FNBLstY''eejfqVIGu<RtTn6ޘ鬵~`Y^nY	WBFӲjNhA6`1xlT
 DhM3R~5sΐM!Ҥ莻?T4b2)ȒZ.HT?oFG;YJN0JiҦʟ/Q"`-eK!"s7YF;dlE2jnn6Dl&Qp+9rItFϢ q6#>*HNC)ppkrmR]dv?EP=᪈i$%\aՐfͼQ0~ֈz/a%GQ5@wARZsyΏH^}xBڏ@1lNwp᪔C`TC{qzາOOkG/|'ģIAj'(Dգ"YKY)LDw[oN5&@]5f0%|+zv56վb6NӉL%Gӝ_8UV YXo )
YҺw.g@f*.w.i'84_o-\ZFaiжzspk pZ^IT,EOw!l;<ǍŞ~o?+Udp릏!US+BfIb,W(㴹΁ ߞ8VCX%S Sw{%ɐ*;w]";H܋М?'mnI#VQ	y*~IR `H=(i/h?X.H0Mn2%	Nrg][,b-c0cۛ cLiyƀ4<+Qx^0-it4bB9{rgJ^DtEH
yY-Wl#8`ɢ_9Bf)?ӠU?X(gZ$1)س5YLa+Dl4)H药U%˺uA~roADѱJD%)rqJq	,
1OO,'zc+
#$cf#C;p,ۈ!}b
g$<Bk*/^w)WRJ i;@{oj>Tw\SVD{lk|ǂDk0^׀df$0э>v8a6	$vE:wX؃/M{ql]X@N:RFɐX
<tu҄;Fn[niܰm
Rm!8
5zdsٰiOr`v&]+vWB^'B޴`h]ֱ wbթd
EAS'EPGz[U`#OJzUf1pet1-	\nf_h@	`O!~AR!L "Ar
}=^Rv}+_&RnLE~ZSزrǦ)99t;<X]1i9ה!Ү&bkY;D*74p|
Fg)}a
xH ze7_!𳵠W'9ݯ_澧Ö1x.([j$_͇VIr.H NA
\ @zT'ED'1t NIȞoɹO#ec"0.kq1g	ɢ2f-gC=0P~b-g{'ws| (Q(&>rk+>]y0wgŵG1"b۪rnFkpȆj`DWQ Ren;c}	LʧM^pphvAao_3Euks#h#=T'Arԍ@gJ)iD(̅TmA0	SaN4QJ1ZS8;K|LXf]4&'vꂗX}ݺmĭ
wb@BTސ1&;Fʘ1P0">ס4hVe% hw
BMMg^4(YgekX>(hݲ^k)%̀i=f5$=s2}`{UA
l IMzB\gHcB=(􄅷9a.#??}݀>p2'fSii,xy"j\kUP`{\].-5P52Z@
Jھ#ÓWFd[g3sjU'hyV+?1j0(
j2# Ƿ:~}Z[ւt³3ĝ*m*zFw=j3uL<"
;"!IELcn>3ڶo6j 4!qK[jHv0Y:`9!܈!^[[#y4%,_eҬNcRjRfQ2xQYzd@,#$%'>/a
×f}+p=چ;
zF!Ǩ=obUeS޹]t3e1M=<3XQ2Aj.
F?hYS_T'jC*R
7jPӷ!}!7Ī!Mn @&$V*hsK2h,Jbg՟)9qJH=`Vj>f7hioe{i"v
#YĆ(<bw\Θ:\	FUL
Uj]![6Kd@BqYoXR	(C? vxG1וPai,006
j	0:NOX~^6WλCgmOGuJ]rA.SV}2 ⸃g8ҁ	P+=bfeFyN[:1#3Ŷ?enkp%N0c
k3s}GB	ݷtVu#3*u}NP|_b$p4?[55sϽJ|`Z\{$a[u7DF@CR6Z2\hbwg]V;d JHccQ3Ёdbz&'vd=fQ;JgXY@A۫36Hˡ[?!OTGwQÌ7$j+|%:">5jF'n!b
Ş] mm
d\	Z\R0t+YdRw:cݘvo^"(YPµ#_1X'6?%Q?#$`uw)0މDam[ׄMUTsRۚgGkq^cz>Pt7MS
RlC9&x})
XжE|@&Iˏ W[S35&*n2e}0ZSrc0Ɠ*.E>tJ]{ݱH&57ܔpNqϧƼ睻1=buj;aydxאַNm9_k
U ֛uefzWyU, ?wƙFA/Gg7 93|1 %+3΋ݵ&ۈop;KmO/EY!ƃl*Z<=wG=d4PVG*O|=]ΘU:ʕ6(_,5D+<AԷ-TY69>*@fx[Kb
j44hmU1C̵5ޔ"{MByC4?TIe&@MCB1-=v륜_"%Ɋ(5DXkx :ӿE3d2BDgp-G4 CG9.XW\~-Or#Vq&|kCY+&!*9Y#1]WXE{Ĺ-n41Ur<ʫ-&ICMy?RRYRc'-6<&hlb>'Jks#'aQ%a_"Q]}DaT4A@19DwMv6"u`y`3&E* cg4Bo_y1-#HW
em15XL#Gֵ G팉a	āE)WT!ܨJJn<U^uZWH2*um/u|!,S^/2K䤡r(mCy?Lr%%dl~}ZH>bjyN1~eT/.oqpY6 t
;fy  htzY^FJhEqV[CC~5xwmg`;d_##S1q]D{8QOH4`ED͹s=AZOxaqVJo[@.q*%a_y{61ݮU&e_+_#`kE	"V))SpFAz*FV{*q[g?htڤOPB/'ukXÔH#m%$Cc{Ĕ;5n-n;ak@K7KKzS8k}N_<J)	u8pU?ZWv*A8q[RoQ
_-x-1U?X
jZШx\\Xa0sf #ԕg	&#掤?@&h{XT(uv&g܈wmh%:_0[_v,>YQOt@ynȞUknOc;ttNiR ѓL)
}#BDg !<3vp;Y~In?pFky\gҽ\I6=hRQb^w"	aʩ=1,N+C΄\y$om]qԏLrT棲S6(/~՗n$ҮLXP+(W|7H+}!^lltm<6fcіdvڔf)\SɏhزJC(8<A}TAb2 _OσU!."Ty(!#V?8kC*cNy!Я[ql	dF.S'SL.to-8w&]a蕰-@k,N@d\yow؟z1
k;pRC{$0NzZ>:c]mgYUIMgjFq$,ѭ8~N*{DWP$lK)lF,mVV//@pi*}5ƒwF7S1(c\ nSY˥q['uTky*~9Bx͞"f;b_(Q4.]a F0I={rЦ"ٟ)1|Q-e
;݁3> 4|_l<Vr[{(SVk1[[2}~"OONAHS~<o, Y9M L`ۻl]kFe[mM }X>DJeWൟ7-QMT+Ba	aoľQBP+W3_׭IUIҼPe3ivzR
ΰ#
6fo8e=<(2lTdA"'FUNᐗ;r #Rq/RkmtF( aZ@5RQ*Jir S)=oki  [{x]KyD4o]VPFUWoƌ^Sw~F:$FlͲrMsuZ@-/!FBgڪ'cTwsQNW_%Σ˽%^*]JHFVVu5k1!vX%w&}($ﰫ#H]kpեz3gfg
ǦzbU2
`2?6E5ESվևZ8崵qlb1?uB#d9
$@?JoItgMFtvkO;PUHnܫqg嗷LM)E߾53Xm;4p0'i=R2b,rٔ-Ufo8.29Zx*)VW䖈u<_6a̤ѶUMG |`56h } vzvrEbE	U3 Jz{R,잒A*p'^fMW]lli<(cAtഗ,-PM
ZdR4P\6~l0qp	UbovDq։?@ (5'X.J5`-x 8P6MYPͺi@Kcp"ѵ*cT#"ju%aŅo&Ow2T+K-:GE2g39N2oT$S *]ذi~>XWRuZ)>➱/v<5%>fʹuDtC}Tē\yЁguN)/g?u8&FcڑIt͝9``0"̮@̺+ΫSN
ԁ6vT˨lFtçFBjЌUX|J} 1΀oO)W{2KSUߎ1,r+4SӜo8(KNK*o|k
ѭ윚/l*(1Θ;
/<nq%פXO	w=	Fקo-aG=Jn)XL%^} ~Z>Rn:"]!i)qMmhָ+&&Cvi.1#Ţ'-sy ߧNR>botl´J_ 6Br?}̃< R|n詫7"ܥO	46{+7̇|</@*%i{Cܚ-I$XkJ+cfz^܈A=C/D Ksl.WN"ivyfI53s|⇓}5"JŻ^7o
F7(ݜ+)回ZSFD9plr|~CF_-\ttM#| xk73E,ry82{a{-͘0ь )@[UOL8]V&|!aKFWR	B%6n"=0_&y_>JAݖ9ڦ:R_taq>_Gޓ=ȝpK^pKN:[\t]h,E$CI:;@P1u?Iퟠ`Y?dl"Uh ([Y"_Wf]y(7o
pdVW">.@g!"j`~iՉk
ǀP*_lIwEU%zB6E^PwQ/A.C"vV&$8PG]+./t9_g9w}c fFaF&
g-4Ė)eO~Ј{gebw($4xޙR91>v|k}Įe2%V4Cao-09bf/AԍV'};c4撺fz=y4]Y$E12a`|xO2,_$`o*-'1hπNZ{	-(J!yڴI֬=rS/n'UE9=eGbb:p^,RAFIҾCPPVԱ`aI[_H+ZsQu)Ir)SJ_qZ",pɃë?CpqW|T0xh5W6@VXⱇB%tb&G8A<jLݚ2os	ﰜy(z8~7;< :^'Jr~`w-0u>2nneTRRZɭSж+
'tQ[k"9NmwuVVD
eE-mil-Nl bu;Sذw	4e%i6mX,gW[*8 G[*׋Ǫ
lZYK~
pX0qNb Xx.a
ZbEbsopqPhfSHwMst>4ĭ6#%dK&{orc0LΤծ!FԘ1,3V34_e (9"ǾCB~&%v㈽Mt3Ţ2KxVdү|]xɰX0td{1^IR*J㷫Ç_xb ")D_JhMmmCSg5[z@fR{W}C'@a˚۲Dŵ;7MO<L\OnLEsKTK)mn3H7ɱʔq(zR}j_kѧq =Qloh)|CABPY_$Ƕq</&j)&H}C3QŃ꬙wMPiա< &مBntV85^WL̮a-{ld/Ŗ4+2w
~Zh ѿ7cϠ~++63c2`ٔ&MmD
ad&$AQ~hOrr)O.4jBR*iE.@ >[~.[p!-TZ'NWVW
&lEgFOGs~͔CdZ V_sS$r"AppZa.?vBL'g}5J]BHq;L1]92@*B,;1XŭKTQ2S?xK%,Tq~9PtG	lP04yV$Ŵ`?"#*4Q `ǌJn7	KtRmI?skr(Gs
d$W~ה*[~hJ%yqu/\͟HУw$RK4/ɣUO檺7d4檬CMqǑ'eP`-q<"@3/! ^32&ss}PUI満Ywm\
]eͦΌvڥuu4KEI<uHx<e6&W	p|+"n|q6Nr4?[Zp 'mJvo*1־)FU
=?搗7{-:^KS#g&ƛcp;P9|E+<~\ȗQv`9G|]D)`֧.~2VPɧ0ɚtTRڒK0RvѰA+(Jf1hgt*fzDE]KP<t'ǋ'HEW٥/~z2HyLJ;|ذ樹D8ִ|t4Ր^٥vQbq}cKn$	!O}
>|(Ixf|npw;:EƓb8PXGZ7ߢ45=1ĥ	AT%X.d7CS ŧth=)E5q+X}HQVœ3cӐ5^e qeNZٶGʖLn2d*č9Wxa+l:߆1!Vk\i{ KZjm^|EH+Xx*-rk9.+ѐKfDUjxRVqTvz#XvBFj#_cxG';١bAWxr=Te>n,Y>;)P!*M e,is~'JH4p豘>OD_\Rt柑Hh
H/6ҷԤ ZboVN_
ɽgE=6!l GUZ{AWː3'o!=ӥJW.,vwgbځ1I`E}`څU
2rsOliGf@äJ?ire0֬Zx|40ݮ9hX)oDsűh,%{B>~60eLe[[a]qfѲ vUC[5c
GVJEC9$	^sYuVjKklRbjORJK?Z~gH ",As<X5օU)ͷ,vvc	{%ؖ$mxe$g4(Xj!7h+{.@æfLQۈ"H5֣gJ)jJ ;$[<8t!$x?y(顼Ws^)eN4a-vz뵭jLQU;rp 4eoߥg4ޙ-WuNv+z)v4cF!<U6/gS޺N2S	{jv Sa'xE]
O>[]UݪJ![mB>õVKN _DyVɋ0cD#^>z-x&{ũ63S|\BńXekL31(	inLO**5&k^Y  ~"JG+v}{oLga(uyjSTz$'SR7	5
؈>~ %nNe#ĕ,?zGBR}bݯByN
+0	pnЭ]h	*֗@=DұKhmWVW-1m{ovI9L'Tţx*Kl^돤D{s{w|RHMb </M@MS
O:~l!G,`7GjMQo1I]uB	WAz;)Yf_;8Xic*[١5#>ƒK#KAX>i3WP?,10&Hf2Xp0U:Yߌrt8VHn3jj&<4?bW(q#]$_:{DA˥ Hw Hуr]Bَ]T3D@y'!O{=(,wyu@дV[ ү8	c~;rpj^BDqfhd$/v$8	f'TfIXh
@c}xR=ާa+3~r93/Ψc=-)MIZ(jZv͒IOKǍҲJv	Pp'!v-+
'Xc<<E;)9՝VpG?>OX>Z;A`;[\_xDK@ِ{|ԽLvAk$#l.D9wZc0j2K$#3Q315\ټq*]h̔.{T7lVA$pi/õIP="|ɻk	J]|uJ̠;J
?&ڈ4aY
٪7ZK7}r.]:
U iZA>E[rrCTTQ-9YGHe)m 8Q713B;]_½{>R-J+F1簄D3JsMꃢD2Ŵc~uu"܏K;hSa3
=X5Чj xgR`uh?zv-U0IsSqcDRJ
!7! A}'rk֟.0x5*p!UZW8=:یK1;lZ:'N޴^zOzT1T}
4	RĿXyB)]=/ שQғ6I+	ԋ
V\</lYSt{<\~+ܣ<2ukqP<S#|ӥܥ.tHmsc2 4]Oe$dSԕ"	Tu |B@\uRJRENneBʐ%/#Gk$Y6>ω8Y1Ρö81J׆<%֧J1?B{n}{lQ ~tH|"ps	]s$5]UqK%GW]ЪL+:?tK2|"sxn +8vءDUsI.(+=)T,'fEWy=+^3b@H<ߎ/%ݛ9V֢);}D_224e^GS]Dv<88eϔ6!#c*ϐ|&OBɎ f]M[eVU8
mzכ@"ëO0	~z5-ڽXn6ݗLBW3A|\2/W?fhtkg
(]V-%Tj&y(fǖY˶iml7"%eMc¹m8mTz\U6|
%-lN+.ms&|vW#zMV6l]JS*S?-\QL}тÄ864kZdmpF^4ś<TiH
0wG
BIM(̚+LH}3>uUFjݫV8prZ۳{P披5zR~I2^hlы+*psظ~~
ûRTzP^ZW YւVA -1Go?*36isEDC&Ë\t^V2Xj*)"q7։_א	Gv0 \Ԋ=S[vL-X*u BFC
}Vbh`e[a1%0b쐝d8́fR5u'btq0=N#gho'Lಭ <;c*FO
&Tqи\+^)*(-#N~)
/:;rE~؛>T:cXpCo4Bv%qJt٧ 
 `/=?p3ۏK-uESA1z{JfF\׉Α#TKF4U`N@3u8T-l؟{0<o ҭD!	s/K,6.Uyid'	VwroΖ]b'ZMM"ƀ?8!0r01.v̍|-q >5o堍q酤Izy"cϧ H
lw&
3u`(V?LUMQn:	wKM<Y& _ׇiIoZ{R8TDlF!!]X
VH*:pN0ES}Wnj0y$ʐ9R<^̘Ɏy
hpD;>C|?\Y_[6`L냝qȣ7F,`X;_-
}hDw7tEֺ䃅"8p{[PB΀ o2"HcZ!s%96ݍЇ-&z. Y 2??S.,]8
Oi	{ؤƨOUٗ%ϒ7$6bפwJtZ!-i,ER%J53~v⯫`M˟
R)\\qO*XF9upj\嘞$;vY@l5>#a-L+cR}aZܯ75'0<CKx[:(,#7o%j#aș#MW6T9qZ'ixӮu.*
!ҁ9&Ljkӣ
L8|_gE«z~j	4:0H!ODǿ{%қ: Je@ k
?wMd9Ct/%x݄->yx4D^Ѻ44bW|'A"{%+68
uj9lR	(a"	A.l_qϳK6P/Z'|;0H,dpg{kB5	,nN`SGGKOİ0_k=oeE'=}-}e4jٛHmOR+H
aro&{"XlInU *$TGDϊ<uԛY4"C`oKa1R>ܯk6mm/*kTv+ Hk$>Nvr$X2=[ֱ륃׀{۲7Uό.Mb/HAe{aH=8Jw
v""Z/&G$cK$f&A)hg!Gs7z4J>|+#1
P0K-Ȃqӎ)`}g@br"ҢAp
2uP9*9I^mFTg>[;VƷ(p0rr,LsTAK1>u+~ȹrK;;\ެm:]ao_M)',E6{g
3d[}BʜVXłJo3%7y.[ׇ~F_}hv5j7tڸ-x@<  GztEȳr~ b>ڗGY]yN28dIXә(R\,UJ'OIOwqr-sYH|\W
ɠL.Y٨|~{d/
\Hm.2m2jdMRxe+٧g5ȮZm >PD-K3DJOՇrl-<Izjz3GpU]Wm
^5Lϸ3=9_أ|uFo,mƎ`5o@@LI+r&btR-Vgʱ?zsrI8,
z	-l?AM嘟 UꞳx:`>ӄV}k<z<w7		W4l,s=U^5f 6H`$QH5i*>m*=257B4#g8
f\>;+:3 и&
WXG%$4[DXb*L8t$8WM쌰AT΄IxzxG*+|J_c7Jm3uc|*0ݾt/u'Oo.:qpF^ o@PbDƌΨqkg]O'	i=]HE/^+l>.?]#*	nL|Xrq¼,4֪A^qe+}e	ܤF#Aa/CdQr>+^+)i[]pEcr,	.ō`O/XR۟(O=ilԱpC81K	t<1:gUh;zQf3``-)l[*5>D$x:bFI
 )
wb`$eGp1;.L6߅^1ILܳx#fMd캙rgwo%+^tVǮmYg !zě3`j pLT1Ʈ3&f}~ןFyk[Dީd_,v, JAcJpySMOP~JOp~M#
?ZT1;h/	RJkJN֕ؒfbkSlD9:7+Y?L-EE3ZD4Gz%aKteUĸh$lP4xs$DfT>yb¶l_/

`q	Vi1b*g}<Ф%oMS\m˞fO׈t/h\o*Vj E=YUyu@d
k\Lt>J5Z
ܯdb绮eVUd8+7HY0KLCeUa}bR"E3##2fxjA5kQyށkst(ΉhIw/qՈL+?:G
w1YHV+ S#?^2?]jéŃ<?Zs_ݗsKB@y&BP~BmTUp59[Ybl~>Wm
j̭d)vwR	ĉU-)M(  wGOp))B6u0ˠЉ|v٫<"%4γP!˿t])p _b@F힨Hء[fF ycS2j#>щ={Eg$R1.<w\5\%,&5ӸNPRmsFg\se@+ͤ_Nϛ)Oadϫ1կ#6h׶}_ANFãՀ&uu4/=AE~_]dZd~"H:*(A;_A( :3)*:EL`gdČ9FhS(>.|p0]*Z.zً`RlT( Gf)oD]ja62$}_:\?Zk2"}<jHSA<WZgsҥ%1=s`CGFLɚix9GX`yC}UZjkυ-/]&TʧCTFZ ˖r"$"_Vܼ[-t(HP*rqƦMӰ7ZV'J;GֆI/gWДn)3,XO߂/M9Y566T?T<&4<eI`r~Zp4?b+L_t\ق U?b\tPF/'.s1u&
:ύi/ז;g2)Bes.A1+l?(
wʗJގv7m4$3Uq~P
94 @󿝭tx_r G1td_~7: Ҟ(jAGp{fդB9EW;gW*thP~Gq&1Oa9t6 vrc_:1veٙa[0v }oFY;xI[F|zf41:23U_=y/JDVEp<0{gY\O
 }0<EC(|w .;%5%6fB?_ʥl%xO
PVr}3Af/kv@)Ѣ<_1 f46#ᛏpC
6 [?ݯv»'wV*'xtiRqCL1Mx/'vA͔\\A="	ؤe!%NiĻŴW0
L' Dξug6<nu[f-WQ+ahT		XJ9[Ĉd6n
 Jfdt|>Ѹ-.{Y?e>Šyu}ځOqH!F-FR~)y}P~ԡF"(ge0Gj) !%K̀I[` jAb|5mY.'T9awEI"{4fwV2#=dJn39<KSASiRP?ǥ?jNԚ]gnx*-j]u1~ac]֤
L.R~?ZK=͛w5Z.OKB?啰_]&ϺN?込r`[.UJG"af'pկ@҈",|RX@87U;lFɳvk5a-b$Ef8o},Bܼ1efh$9
ol ^p­/vƟA-뷺&q̾G\q&~
H)8CضQHbm$i'ݒ ;C
pYSjS^e!䢁HrZ.\BA(f3zl1 @VLf@*n7e;hN
̲W+z3HACV70A<IA+Ӱsm LFSXX%۬C;|"q'9^KYĥ#_e[th8 t%K{YDYi	:q7wʓ-TR]Q
[(wIb 	r2A=LU$ DFMZZ,&5].ǌ
Fo%^$]FCBw'
#TIG++#\Ra$6gZfqшLHHM2NHN@ ͙}ٖ_}{15(ܷ$ Lp9~!к  $1^",.21R*/ba1r f:UPc&o? J'D^7̍F~d
5OKed G~Dto\85njNL- sJ
kW[߫qsVJH3;xro<h2
V88w{U'
 :mBx]sf+܎/d76
<f2X	Us
b/=҃}1ZlHO	6=;kHQ)lRϡA߾;%BO& ԜG3b]p%?JK,ߛĭpx1jc,ػ+lS
އ8[TV {ﺹW{9*ڽ^!zȉrQVwR9ݼeN>->l3~ dC0rG%GmfjQKkhbnZ)4nWRf	;A{U(ƾPa<353N*h}wB	c}z[0-
D zx.p[M޿6I<.LrR@=X:)s-	DVF=*PrET&G_[Vڶ~Tw".,lK`V4L~vyYYе鄈-FXjY^ɅR%vC^9r\<%[Vjy[fySClz^{><ܩg8&OV:G^i;ZbyD~:{+UǕ[=ݴ-v?NWA
G e_&_hd\I<wCl:#:PM}gSϼs5]ndr ZBOXaj鮽`CRqo_řq^XM&V5/	B$9Xʠ\dUL|l<@c9P"D4M,wK
K:	 \6=[>(+^TDsh-bZ~P~;VxuKGaؠP>_6DB&%-Ĵ4gtA󄌒"
t*)/2zxpv)!hV% v^sw]
V}GVsXHV*txzԜyi:y~Vڽ5d>9%'Mi[0\֢9`noHމ]r,w4`M?i|;z4`?0iGP[c9OcXi]vD3n.)LUM ^Hޤ3r!r[gC;^T{>g5[h#-FEs_{!I7R
u)`Ȼɬ3'\zA)[XN3/ˤsw5`&V{G*֝18q"Dwȸ`eS텇c\#)lyx_8nPRA&YPǭJԡvрEW!Q9c^I3c(e%=.wҰNsh!Np|4UӔQr/4U ½Җ9L\Ѳ
(k	umd;L*LoKځ܇5`p(lÛ\$RTޅ:4w!讓(K˘:{,;DiD]ﴈJ$s1?>ʪ((}xPf{k2AAj0VtcEϳ_Fn ؙ eE_Pgu{jw+<+ͩ)d|uD);5ëdvO
s񧆅:<KO^T]9P1#|JR
|l9oUAT+~ݐ>>7 ,㸪LV~|hT9\b0J{-/54 9	
ؤs0ܣU/@T\J+6D%Kޓ/S4SB2lE&}Nl']dzěTTc7H[u}jv,$$&XqKĪmj5#F `'yM/kt0zr.Ovs1(L PlNDLE)\h.@vx߬ç~[0F~H/?Њة
ϵ&@)ZP+..BۋNx;iU=_<W=uF.
og<Il_kC/$B266*l'>M+̈uCc)Մ3on,-rJî7Wrz
)ؤʟ1oO@(ye~>3*	:vB_eNUs)8Veoғ
+bFӄΊ>_r5
s)!s #lGiWхU. Qp ǁDO'VVQuD|ƛFc̄# oO+H4dͶIs~c렪zSZsbdĚ`{|5	:ih|wq	";xsa|3}2B{'Ը8gd-oF11hpH-3g7#f""i)婭J5^!EKԬz\57-%/¡@i߫-nɣxh,vvkIׂUV
KOw祿9ϊ#)~Jp$\>Yot$9ɏv(z06"&駳}%l$|0ZZ;խ<!'מWJJ s JfpVqj+:α`K/iR4[i{Dr
dyڒ:01ڱW^YX:[5;Rz|"l&GCQ[]!Ӎ/u;S#R.9ׯɅSXyIMN&ǂ$iۙXcd'] ׸D+duזq
HV|>botpPvҼQHpFV
9ϴpWGS\ ~zR:ڸ@Zo*Za# |Τve&*X1T[*$oO՜Ftp !Uo׫k.k"Ez1ډs~jdXFށV+^0pbc	ٮP`Ax@:\5Tevvb5"}Q՟{&b
Ji")X!{N,]i4%&{e@jxXؙjoVi_բ36 (ݹkGmw桰_$	6Nmo|Ep՟g#48 Up=,9S<.Fg2{:ܑb~2
.*oG^j qaɁ#-cvLtO18y!bt&ޘ*,%~o2
&ߘbZ^Z.Fo\#"*n@N`=#D6f@8\$6k)w֞~tKrE$oá9N7im/|C;wodc1$(HN
(;E'Β
nrSjeElu,Իb~L_;ߗUiy>uR5&Xo3b |9aR,J%D#Gz9vU>vlʾ9%v3w$4	oyk#Ĉ@AA3??~g*$₫Wqoo
rJXYč\JKeNw UQn%'<9~T
B92aPx%[wLp]@j$:ǯowW`PQrN!Ƥ/uB}+%\&4e&*_ugCLS;fhU1'9ծ
HྸAAZOtER'5l
ζQ	蒾p(4k8yKL*=*
^fE[໭86U۹ue0GV(qnNj^Nߐ)=a_j+U NJ%q8|R;Աd90ӊ儇\iYړ2ꃱ7i-Heyqc
YWEpIZe'f!&_S!Q7ՉJ%6:;*BH($JibZ
kmJj/A%"G.f%	E$ݦ?PJ05Tl*C
&/VU)miX|u#(Bs&eBsDF(q}[x?Hx"P"O$aQXHnsn4Iw5r@x8h
S/ma"V6s֥eVL*#@آw8A%?qUa)ӗXV@xY@BA;MDW-inW̭1>jY|C~D8Y4g.¡gL`ȯ؆DSbOiCte_SxH~]f.Jꃔcub5n/WPrPGDQ 0<-fchhR>rKb}!oܑ4.ws9?Ϯ^1r}:C3׭Z <C,
<1hPQyiD,3pkDwɔZJ:];nyɾGMa\$|%NPTt
/JkG nLi4_ IeSX_r;
^`jhñpT"ϴ18dLݰА=Sv5FA5<*d5gEn[p)$DOH}[8^ܱ̅{!v+*Dvr&ķ|b#bn"ޱFzZ}U_)J1}r&<ط	4	*:zC
L|iuLG֯91HlƐjrqk~Im7m&@*7AUbn )xB2gJvcs+8y'A	ģIS^
@f[q),5|ը*o@Vg3C'3-XD7>M0 	D2}ϫm=(2uΰ|Z.4a=0n|$PWs/χ\Swp7׸<w5X*Qm`|^:,}zr2x_tV^ lo'K)hcǱJ8J_ΜW[R6dtm}z(3K4|QVmw bxVuzn=~b2>"PQu&oM"vBle%R,ףrz쑲w>߻R`\H"	T^  afR3+tJz,Y2BRv$<U|ʓy
%Uª'/xnX=,3X(l,вB9 w{(7?*D<T^Ugb_cXS8L36:rާOJuI9ȝFY9l dԃΫ>&E6_h+UdUtCK&ZCw5_{Oi@wyt{ҡެ
?} wh';H$f݊n
H(e}ӭVoВ4N[4upѓ0~pDЪlމMw9[ܞLlgZ$9IԈZpzE4/nގCJ~	C&sTBpgPtSS+h'1v>8pS6ա˦GѺh9.\<S[l3P67{[U`BbB!L|2-_Zj:
=YR!1Z@j
{ޤΠ`q\~m\L@wA?|dŔkW?LD
-K9[E^$mDF wD^٧Ei>=w#i
.u$gRRQ0>Zû`Y/u9B:r,XӲŊ	Wb$|֜zv3UOlzWТ7y|M\ 0]M&}ZWû#"t2Wz`
NdЂc݆M6Y7_Xxt>9f9qhN>4^0ZJS>
\i1۬ȴA|	yR=rD?ZADzeQ>9 uLeeE$M7Z ͟"/T[] NG77EH ou@1-pp.]xM&aB wE(;
T >bHo^;\H߬*a?	QYJ嶘rZ{Z+ua,P1YVOw4s=ϥMDyv\
̞_:d8wnfWg8W}T}%|usŶnlj*D쯏3ŷg1!*Ii@oveo+C7iLdHp=V<]Fٳ}

|5RH{ߴYZdӋ65f6ĞVEq_{!"y4,=eM4e\qO~lfl˸Eaw4)kx^u_$,JfAbrv#$2q/n5)
sm֕@1|E:LQK6BU
b#Ϲ%1KU9=V૱niޝAl_K'eiA+prXh;Ϲsx;+dUC[dyɹ3OhkӪtpJ>-&5BkJI
GqP+.C` w#p!K!r@:wIaYmv{8^"n"]aR% DP.vxMinxflO
 u	ױ?)WM͇gKSLZų"?a7I~ʓHqyoR
My25Y8d|)g(ܝ%,k+0SpG3z0W[J$zJ%}?m;Zn`X rnfQP"ww!tnRCx9?,A|`۶a`ۂM[cpro|j[cΩh{@+En`z`2~LoXQ
OP^?EJ)d43rqS&ƐŭP|
\'+hMDbOˤr񮓒~wZrb(iz(
q>c^- VW%CG#M4>鶮O
;:_T[G#];QeOU	@_΂
z0c.SMj 3ŢZS[fp
4u΃eDʼ]"l[E)˰*Ao.;=-=dKJ+g"!Cm8"".ёSsZk99VaMbjҽ3"}yupRʾR0_>w g܁^, LG\6WOԍJ{ǚA:L#tyzt:X:.ʀ=+ +陓xjpLwsޮ1qR Õf`H=׎]	/S,Hy),鄅QvXڝE-2kT`f?.<H{7Zh"	bS7[.M12n7[\$`OL
S46-
=]V.N3gDRcpgE?FP~ǭ;Ӕs1?O
At|>s4:=^/<ⶰDu4c6 J#Foq#X|9Wy;1DuEW{@ /x>D刀E<Of۱0\rAFt.V3Ҿ?cZM~cOq'g	W?z_"31{.]`C!6'!<YǮmDB_-SQw f%ӫXc1S(XvUeI'=M1O`0}$ji.m)Go`ׂ?**BoZ#RC ~nIgor8ϐFP
win/1BS9 wPl:G,貪
;(*aBYAXc2izoe;>b1?~&eG͒&sJ>Jqx{_ޡHy:Jap/C:*a
<ra&9ބF~?Gg}%F4zQ	,i
Yl%kB]a2Z
I_#(:3k9dBIU6o$oˢQG7j7S~-u'v#`;:<2V)̚J 4'S]P&-ΨBOAiHD`A9
7N˓zoMcbǔ#غ/X)c{rHmrwA	mmH`y,hR
&(e&	|ޗHc:\J7E7^C`هc[oXU'|վbpDV!#728)1Lcusz
"
&)VCJ7mQǎVB*Oi¶@0xyn .ddx0ojmtj&gLc'YT9_P<;5諵ʥ58H3<}ؽre-^|T~>mEŀ;c'K'*(D`J8+;15oN!~{o',e`j~Ea
^Z6^J/UG2Z?<vja]
q5'?@%/3_bS}-LZ&8՛R	=ٶ,= G:r.7YZv_cXE67;ČAj:iAJ0eFS1Jm:CZ4}M^yz[^w2D"Vk&3q8]oRi1$9FJ\9aG/exvQ<kjؤ+K+PHv	</vSa;n+KY#maVoJOR7Ct_ w謴|hod4-P+9Ұ%t@yMͅ1<)cu<+5{C 65ǰ%1<ܓ#&~B{N Xo#SSLQVxpkH!(!.tJl
^.dS-`)@;lh9
͘
z{s`j|֕cq8@KnT%Ld@@v`;➥B}yuty[]HT
5LJHD+?إ0¥
uYGBx嚃?u10w[8^-f>%wrDA&cjM4o-(&-!"Vsm)0UJu!<8$Lc\\^i[ c׹E͡$pɸoN|]?aAD$}f{E 洅R3tv-x+TOKB{B_+b!?ŀjVHh^$pSU&apyD	[QkRJJ}
rB%p(`AKkmc{0hcݔ9m"81$,1Lzh?O:2אNy{g6.LAƓPl3l9YdcD<dɄa?Lt33u.^ ob=wM)vO@SԽ֙Rֽ8s/wM
8槠/43(iJR74g>"gT֑c9č'!W̓6}^B=ǻTt=:QzY8>͠CyM/Ha"1?h~Re©<7B7$D;^9
C^#^OySnҍ!tP:'XcA
ouٌfq8ɊV%ϟ(ǝ%R#ɯܦ,	ᅥs^ pg%I(>^U[94cܔ#َ0+8\b|L}CqqWn۰`sW "e
@÷pHn1
-)0~ip8"c-
^Z*SP},m`[V
?D1y :+ԚEy N:M!fI3VT3ʰ`6h=@u 4 `~SGݯάd8_A!fjj&(yL'è
걦sNb,f#.4u\-_LK7jl^>2&|6&מL}<zj8%%+3c3yP/fB=W(-WD/K6Ex
TCQXK`#{<f7SB tA,.``
R2I;U{J2u I5[43K^>AӸH@4/2-6` Td_q&C=?6K<NE z|aAtgǨts"Um.gac
Okf5b;[
A_<5>y
\;s9ME&{Æ|`\n/'G{|vx]V4ҀoRcoȉnXym9:i@|9PAJG8٘Io~>􀖹 JC+-0,Fdue<ɄxC#Fgn*iZ_RY(M61w5ƿԹye\_@El^=9D̟%[Er>D8mf)<3<VUxz{Y0Wo^fhl/i]SI; ܡYW"?I'׿@[Se+:%+@q(7kTz&6Fonl=uGHLB[/Gmý&D>jZaUUy>q3zV}
ZXfu*22jdn W;l|v#t
?AAh,U_RnK?|6ܺj=eo\<r].C|rÊN {[!(c1
\qv4|1B'o+&1vyXΛm*5];<K˶#KoN[ֶ6\UV5Ki#4"q@(ɽٛM(,(!X0rfeP_(
Rn"nPgUc)F<OT8oևvo
;jj|0~$pýmh]Q%3EpVZGkA?9L	7GeDeg.ԀV$z&lǟ{}[_8
?O}ݺP۰{!_r苍,&04XYIǼs*: Fl
R,,OKlD93~#"fj鸝@YKz,b"w}x75{
MWֈ{ݒY7,c+/ےyYBldf9WpE$ 4V׺wh¿hn#CEcMQ]R.{;C~w;bn+09\Ȳ0TވtYԽ#SQ.`f5wݗ\֒oʨ<w
 _V~rn"P鉥V$w
\]DŦ֊mUzGM9mPa_ro>>(WܠkxDDi=+|խͼ۬)%{]/ʽDr/v1q.ׄ]@M:s*<^JLJ8XGcgi@ŴǞhA2fV8/WUW*	Z荃pتKɊڌJr~mr?fp^4_S(j+H\6n\$vldQ\4x.؜n15y!?t.v@ZACNk"ή_'c!F}}^WSp٪_άA.pP3r">P?e2WL'ykuK"pPA>#-7Ť+f5l7hFxJ5^|i#'Z'9Q^qm{ae`\'d
ޮ0H2Jv{>dN0
8@́uYV3FA<U"	'r1&᠉-T/kAls)
,SDtO+tc.`#Z׊>Gk d
ee+aWw޸]No e0.-pXGtmտbӽ}mUX
ZyKJcyxV&ßuDá(U~79@W%MN/~gP!ځyU¿`!!+GeܾXv9r"}XW꒣Οy66c*vռmkG6	 WG=bwF:fAG32$oid#nGՊ9Д.&qHWv|tXЎ`_Dl:}Csd~RFRB6J/sEW(2$<uwg
(
{&x)YjK6;xl;ѸSj<R?
13ht\?/n[wTpͣ,($~QRq-ՇVYre+>B-"{*]s)t(HR90})[kʓR/z۶yI]_IẌ́N8ߋ53hzrbhDK5wX
Y7=eҷy;-)bWuƯ׳0]AeLp !D4dj:-?%7` ^'7t6Y*jqqSmMu3<`wҟ^ݬ|$Yˣe%tBLCMޏ'6Z(ܥM*ߠG{0aIaLOtm_@Ԫy!{Dt.kcVpX))UA[?jco܄;?9֏QT8ٸд:'	=ܥ[p.O"E)@oRbcM,\ ,zAH	BD K d(X[ e̠8 #~A[F	P՞\TD/)Oa3nyOs
vމբ[ɒK5riZ92'Ɩ]\*O />_LYG Hn,e]8l,8|;V݌.N.Va̃c *)"T37ҟyXDŤL^k KB@M--D7SC(EB[%+ʬ$#j/Q"X@o 
FUHbRL JR$Tm1|dЀlO~0?:0+ٔ+r:lF;Ăy=գQ\PnFGҼB 3,5&Gzj^ʨ+I-g
9<])4uNJ\3G/0p6OaVl$ܷ^k7DV7ښ澬=	TAnNlSt_q6
A 	@uh8E:6ʎЗr~}I%
j˪K|hJ+2Ɓ{:669C&b ֯ۓ~^S/~]l?viq+>b=[>T&D輸o9
=( ww8'H*'V|ef;mNo<FP,f߳F.Arˌ+j%}.PHdS
{ ZXwADWq %:=@P >:LGD<u3M^6<qf^ӟu5<sN<Qf~9_B*@\><u{^LAzӚɂ tp_l`/v<u
Eͱ[Z/^z\dL'PՖ>.M*g~nhfUq˯IÎƥcQkPw(BnȳvG	0?TwycǞB>q|IsU?(wL,*P<ζ{Vjz)c/M ?}S_<r,-gݦoS$@SP64zbBr"Cp4)iQus]F=^7>EK @(+H5B1XPm`|Cp:=,_Ol"/#*VkzW'W#-[b:#a?GpPzfJ!1k=,I7h)KYs.,I+~Nyݴ։
Q[

w3<blΉdnZْ`8=BЎIoߊيC[ֳC!25l|FsӿKط髲D5iHg WU%sā|QyhMtzJ:Wo[
ºUA }KoN3mG7{jg^)|ew4ɞhJj-0̣Z'
L5"kؙ*fQDbu 	@dݳ{@,@4MR؍
ĳj4w_[NzRTļ 01D3
1neϒjo%H笥'V0Q9$_ LoIfrM΋ي9c`~B8ΟR"w7}շ4s*9%;%|d}~s
YȨII{2IGJ/Oę[
>em&Y+SՆy _]M`4?;-!TsUoAOB(G[F߉'[6(Nؒ3nג)׵vS
]'7b-l-jLwWہHUn ޼|k k~ P}Y,œ
?18)'߯!?><2-s~BV_/Te\1z!&D5vP&&k8Qj
Z4Л{IOlu]n7;337=$@ZL	#mu~gx
/od>n3W>55o5KKU؁Gm̞Uit}Lz_em}p
IKնj!wb?ӟ/\|Oer"R޷[SY``mΥP.T??&o<ǳ*ׂxk</iN&bI+iZGAآ9c4u@+o10!Ԏ@'&&}BA+ܨSGp@J%K[aV1sbI%
YPJ(=-Jt`b݊hAtR׭Z/ z7E T`Ȼ{EU1p"N!dBY,{|ulͽxœ
N9ofV
vc@q4~qtd}2b*wm
JOՋ<)ރ׆Nu09%'-jota,>x@
}ۏZjhm.?r+e}WZ6r3y좹*3\h_C \!v[ǡE(7@<gzKw.mJi}]#GxKW1xJ2բ$KL	̃;ћT9EȓYiew2NpA;p[VM}
cLHӦ:L[AY.g鉣UTp+X'|4 q1a]}6-äe^K'ݾTj%v?$څ:EI>bVaREH<51)xI
waz39|"i]&ĜD/jHوsO6ZbD0IL=qgOmLD\@kۡ
EUB
Ri _ҠsGI+r@yZNe  qai^!j{UnDEI[L7:3"vj	э!/gϕ RGl
n>7p10}ҠN(wb0m-+a,"딶hTMS\
5mnXk٫eOaq$81hteݏ@nNn#cer&OX2^kTr{\JYpdxol*%ddc	wJ'ȦqEm$;cnn@n226p= !̄emsE^c4		Ž/3"ܐ^;Hݘ->A}^hhmYwVv+}`	EC ٯbWG=ed<<sqCƀҀ?tU'@##]3_yp`f ӥ5a*}UvНkԘUL3o^_@2̬6$Au}Q8 5@p{X/u5WY>흆Xx!l pP>_EV)!IԃԬ!~j=[CwUH'j	7 k[t.Yr'ଡ-#4 Zٵ
)Ya%HLd;	!*=EEc~-javA-k׌vfsy
,ޑ-wl˃D;EYV{9wηn|%$at0g qk]fW	:=|It9RT)q9s\P#aU]Ỹ:	,3,w4J8VI䅃\h@X	cw*Ѷ(&C0U

3hh<pzj
H̘oEq=4ơL*?H:?c6~܍ȌIdvf8RGԞ,;q8|nĪ7w% 
D
*^)Hxix#0ܝ1D`C[,ZO.o'@;I$mw)Wq4"fvpIy}L5M$<8Lu=	"Iԝa?`?RWST<}KlSxt
ԠAQݖ1&e]qY5`
zagMZn+Vu&=CHnb|)&ՂQJ5(ȾɎ]&v9&d4GM	6m)C4yG
D*=Um\ڸ`@5nw	z:'Iqnu"}^mOP8bKF*/(51͗{OZsH:'fehP;*g$[FQf8g$l9qDʗ/qih28  dzyHِ;D9Tx~HL.	"[/-X(xx"h$ߗ.}:&`&q,~3J4Lz%JS#7":Eza=ajrۘF]
Ǳ8rY/no2$z^wHVk$U鐆U/X8gr&Gy˻m,`GIC:D 
A_b.1^HxwCbsZ[*$Rj+?92}vfaۡ}vB=ka=!Ӛʎ(xC1iw1M7EoObt<KAk*Q'	6j,M.pUCfa%=_VW368oߓN.|RR©Ҥջ/'APP>1IdH[0I}bCF~BIډIeK|Ĺ^o#GwaztTq=߭;4Q๏*-=~t,~?MTPgJ0yU$ɘ8
Z끖*5Gɐ`Qm}5f~nN~[U8rmݣUhfi-c5ȴ5ǏltVMԣ]ᗀ \ .okשgOP	j0/uzVϗ_uTQg;d bm߳CCcE+壘eX[e]9"2#h
T$Bi&	L5\
<V`/j[|'{:>NRSu{isg:ٕ wِ^智N˼1`XUE{gɜhcÒ[?_gh&;˴K8>?
^Ju㣢¯	:`oBA*((`뵳pPjOI
׭+u@gRO˶F*$xJ>׏pR|B}ݟTaY'
ZT726mH	5;z-#j&2AZV=_;on)dhyd߸KBukRcxBB\<W*ygaF4Mb߅&V|4.K0ru`i=FÓb79YG`!jK5/dtkߢ^=I.bd?=W!=*byt'!5V)zX.^OOKV=	RM H_j'lĘ؀@F6|h3q1]h:j,4y00V^_wK^U$	*4\ru}փ?簙#h' q蓹_E[W2ћVw$KvCiU
n$Z5Iwa8I #]j)ݧp0s	n=#dRLo-<bF8:y 5킽 oE+:lO]"pyTԅ=HDH-yWb'i]%t]7'~RQ&^d4{ LGeWώgo
^̄jjL:	vJo
5ᨮ{au/^ؓ1t,½=0؃8~ԋP-<wBV5kQUsb%Orf17#bs( Х:eܒkcXѨ("%,ɤrq>dR 0Pl=g
9f!g`xoi n23o:HK	g25 
jR%>ܦ/	zP
3HN	G<&ߙ88KdW-K%S)?}8XzYnݮUzQ2h!}(qu9f"Mv*
7dϝXo/9h|¼U]ҵ8_9֨2CGβ]obㅀРkT@jsA^HD? JY/c9[B"x5 08r@z'8mW9p.PB3.p?6ǄTaHto*}SӾH!46+s[ˇ`Jìz/*{biL+Y5/*ClCOl`
 	cX.6J]F2~`M&Z4G33##_JsFH_0*%{F3=P͂LI/GaY <^HIŃ7:JSE%ilYޜur+@#jV^53-׮49ةvtփCV5vH_(ۓjOIFpJO)JÛY%$+qJ|Ǎ65p+,r/tLlR4ȾQE,̈́Kv"tF%r*[aY]ZZaYCGWT-yWz5{R  *)a)3n`jJל}
ɠ9ځBy/lw(B9] dܧҚF̗>bYljnmffOжFO7t1_Bxp8l®l*٭Q-7hCck6vH(>J9#ҳ($YN[Z}}~qjݮIGg>8A8L>d̄Y<PK8Kk65؜o7S}H}30$  z<}QMBt	G!PQ*..|ߓ)-uI|<`Q
!֕P'4N z,N}ckci<kGԛPݲ~1<]{]E-	nV"د66PSqʋ>3ag5s(0+}\-UY!.fo!fLgl{c~<
BFm1]Fj1t3n
 w<s9ydg	/%/r?4$u={}6$3EعSuX%+YgH24
G
 OHg'T-55%H=wL3߂PZ"Mz
/1B)%|kڲ0T !4ڕt{Z'2%sU]tz0=@+!9v$H;Rex5kBHfn``v!{J:vad'n?	JB֌EfޞPS1{
:G3(5?ƔF>cԴ/C)K	%jHז4덳gM`_
5}-ؔ	MPf&b7ٚ~Qظ\hʠx+{}[W\L҉媸-/H4)5̹*-MpnTwr0k@T 'a6vnQMOh!.i`7Oj0[tɭ	#
|N[NH|O%u[̪kJ]8]Г#gmVNXX9~7*1G&ΩpӹߍȚ4tU8Fc]GNnŜ3@n
ٸOƎ*5qR13c
FXlbݽnM!7Izñkw-	4DjӁ	/jR'02Yr-/o[9Bh%{4 ^1>$٭Vӣ޴$4xB,J4Y0j:0+섒h$1[VxX@Rגe?}`{
x	7RLR)YY>瀣ɪ\Po<D>dlwLSa&nRעk'`mGpPCoWF~teku%ĝ<y#ZgD˫֚/K4	d#֜D~As#i\.Llӈ eRW8_ʉGqO_cTo/ѥ{%*ivns
A	3EJ!cU~5	Z9FY
6Ί
m-sa
֩3wHOf֍ir	+eO30|M[r<<jRY<cfɁC5	/sүhSЗΝh_ìƜ|jSH3$ H4
̶ȏ'bL<<
9j@\5giĈt'pKcr[a47"_Z$gnqsE<6LXh"y'c$v+VM{3[spLy]e'^Fӗ$?ZI-}_%w%\&A6g-[RV^mO%5/-/sjNrK ቼp!d*WEs. 0\;(Ws&^*4%`HII3%Tp<+}#]<ⷫzgayMnڢUopŁWD4
6dwrN8;|T.Vg<~Ĭ)aUl og9c|"#kP-sH|G!hPooLw>[3VOm6օ­e;A鄐xa߮ 0N359@E'h/ll~o2N̬B%<eaa #$Y$vyX8VuWT;5oCcWFT
(,<eoR59Ȉ,uSMUWNHΈdCl9aނ9(F"	=6<H!"d+gbfo FWotAۯjDHPsմ?*,g;qV왕2lA3#	x
ewһHƋp92g2!z2È(!7<ǐ;%YX: E-ZkĊ(9t?|RG	pLX1zL~$cI7(ohT"h$L7&(njنWRyIUU%aP-ޅqmJ0ڏgI#ΨP*ᴄHdoTACo*$1ԫ/SLm)@}]X͜տkuKTT˅x.wl27ԤRl0+
EȹW
!>gtxi8b g~3F#]"Ԣ:w2QdXD1qLn)#	;ՄAEG,<0'Śh<oA+hoTP92
`?e:ѿE^̔	MFPL.BHbccshtf̉kJ6Zg31ӌUR}UH.bX.;;S:	ɢY:)@F[̊_׶/W|
QP-g?-hWz
?lXGOrlչ _rlg$B8I~<[t1dppfjTxzنI%W^`j 55//
|^6&y fY; "f;BD	z!!9n5#a
cֲK[
y||eFVN:\Dy,3u[s 5mZ qG6rx
$3S@$@dsI<+dNĥEAeƂ]Q*g 0g4	٭DX?d料^x$ډ&`C5ğZ9p:T^UlGrdNOaT<ϝhe-}/l<ꅏ=ڐӌᕿgep.~)k*+MR6OD[gXSCQV=<BY".SV Pb;e.RQcW4nx[r+nPN*1	T 0ӳT"[vЊg`1%kZ&%?6mdxY`c׸!Th-I"v@n vm
6/6&e[/N/g5 Y]/
F	mn?_.i߻xoS6Z'!^H#42d%m0N\.XX:m=gxdyN<c'O)7:
^vr؈w/ut/5>Z|/QP |E:B̲!(G:E<c-gn!bU^Iw>E,NBykx,KRa>w 1Q-1~
i$ c̛96`YZG׾YVӭKZhJ&Z+ֽ9_}Az$Hu+:-w͌GJ7yǶ'#6/00em؞FPd$V5uY*(kDt>F	<[ [;Bڎ8gF[e: S"$0wwe0i,Su0lH@H܋o7P**.ib98`>%*ӱ&NxcQxWSۖ|7)=4ljWǱ&oOB W,VoN
#}2czLyg6g1߶TMBP?ܔLJU'?!bTS":Ҙ!*!wu@?TE@	u	(y*5*}Ŭȟ~-OI@7Iqp8ؼsi?q>l$`"pc~&
u!C9mlWf73T0DhŴ]kc?=zUK~yPR1ѩH!~f`kj%BtͰRz{'8)`MQ.[A:
=Z]ޜny$v[b ݽ&_S,i{[@h65/3(}17Do7Vq.YNE8b4f%]]Uk^?4HzMG	4)ƽD4Ix܁A^rOrTc}v'ϹZ(IZRQpIPj:|4W6q*JwbF
ňW˥,[m>0ܑ5	1V;'!MO*gM	[U'{`e,Xۮ@Oum%K_).ybHu4N4M7Vo0KwoPڴjhV-f6ezS{$C,<`i|zWQy1.XrX6Hg;1
0YhcC{^Ν't3Խ{_5&NQ?Ǭff]ewk"+29tf ƃ Cd3^t1iazNEWbb&	gLri6hQ.@{\F؈W{6â҅|k?5_޵3;X=ٶ<7j\x?H,"L'?j8B݇׼kVP)q CO1@D#}QD]X,~=p1.H1rʧi"hyZ;Ԝi0.Q:lWg#u=9G`u+r|sHCr{tz0t"ST_cXh0Dze!M^<`<3
->BT[N(k6o%gQXϐ"GA}jy(5ueZuXR7CP \Dҕ>M򠑠ư9j?DtU'إl[5aWb$Bj͙~ޜ{"9h ?7kehg7DïI5`{ģ7[~ѕ)!Bṉ<,TP"Z2Gv Fڊ-6eV4Gb$R-+?`^q5LCF:,ՉSPj&G$ʣB]u&znߞt@SY)j#9\p,9O;LHd'oϼ?'\މ =x9qym ^&&KЭ+0QxKy``a_!lvU>)a.'->eBf⾶(t (*_gg4f<Psmcr{~13xTmcbjf[o(:k2$$*(P9~Y(X,7Q=[8>ң[SBJ:7_+YʎK``m@4JPLbZ'ضDymƿ<7*=K)wǷ&:^kKn]LZu9#O?7.RsUWGd&|߬"-KQۃ,mi-z%NlRq4/eJ(x
kۘ
$zE/xںw,E`e>*'9Z|ư \6(@, Y3trz4N).\+]z=_jZ~	Ӵ]KcMJG.X׶L( 2B9q!_ơPxscJ3C5USWrdN學Ifi-&yQtbN|ispa;5Bb__%aю:BQը<A~imD,lCl֎uUBU
ǆt_*2m
PfF7TDZ0R4[B*BVE|΄HU6^1(h\nw-4کg4	"^jRlHgfh|Jves͹(:ʺNk#eur+Nֿxo9,x2DId2z_taix;Y*"[~-{
KAe)!^34	?ÔJ~w*˗8V*hwڛ#jg.N>*0W4ߑ>3Ep_S*cX^B@<UO?7dtiSBx5q)oL/a-YOLEv	b( Ny	B;Z;eڰR iZQ#.f'))xʀ>~bJl7αh1@]7 ;aCdV1,tyJ%WnIF}Wk!_LȮzNwz%|}UQaН:9R}Ae8އ *Orh@M|7bj'PjwG+ڷ>L9:hJw6v _&}C;EۍdA 4k/rWEt8VWBb)M^jmu{QT|+8k"8v &nЌZj82DҸQ@)AonuL +ZUU(C8:Y5 X/R7 fdO~ť
Z}{67df
yyl0NhJTG0T`

]X~jW5N=qYayJ=Wyj\+?RV#2L"ϻK3f+p@qgmb+qp/c5]_rp9t)Ђk86fmIYqj1jFl_NLApv9 M=VP)4ʟX
	)^rP1^`>wūQ؀q|FIcYE^Ri|Fj,	a`ӣ^(跾q/CcK<85U
DBz DP*a(^A%VJҎ'wvg	a
O2
 ZgǏc%v0e0?<C)gxTha.0O_X+fl?*CM@]Ksui&߃Wc163!ɭ_*q,.ڽ|f|Ъɰ"^MЗhiQD{왼`,h	PW/_%rT39s%[ފIa	C)8ME3ĥ'dR3/對RҀz#u*kDf| 7B姼	)FPH8CE523/6wo.O';W۩ۑUPfUOf<{i((.SKEk'yHRl Ľv1*{Fܪp-ťU"m
uSRw2s?" Xʸ~VaR
xM\p˥-)YL:N~}6
[F*3%_KָUNP9hԇBL6A38!gz8h=t%GjkN2.*\'.n32Er,Z`dV4뺓~Lw[.8S:"uZWYrVqhDuM<V)ښpi48<!D+żޮbàKz)x{ŃAD؊lޏ^eaON+VK<WJׁ r0zm'R.͋a)78=~W]1BTd$ƾ^<Lj׭{5xƋ/o谐.^ 6Ku'/WqhxҗBOX1f
,~ދ|,)=&(*V< e[O('EY0us5n'91S"ĸǰ؂_vFl3٩ĆP6,[X6}ݼdquP!51j`o֡[4mkjG_6Lݫn9Wj34	;&BJ]P叜*!A6}|Eku;7;ϵY^㼢%L1qI4S$^$h{"f]%QU(h"K!?hd>``fR\r8
Q٭,t"e~Pizd.g=%:QY0jTķD &GO8x<6֗]#aML3
\ 쬰BoMӗE

F\
-TXmb;"d_-eJ"-}4henxObF$[ jSMAYd@d_
x]Le9G<
RnNHgЎX8|
x=6ed1ͭ~0Vϐ/&1r,O0%_n;ahO>iۭ
"nZѵxvO|LE>pt7*X3@'q_UvRavi.cY&H|ta!CɝTNx1#yuBvsoc$JhںjJ3
:69S9{X
[o#AM*_lCON&!W3i	eCh1Io3򷹲̉]Xm)MLIO[em^
LlCsiF$Ldg`>+=2_ACa?cd@wV<=fŃ$u;m^SM]B"҇[>KlN
I@5g东,myb"sX;Wdы"Bm+qg 3DϬ:0,'|z^M%;>G^{##DV^O`3|4.dn@-lsg#Åq$3+3;!#dg$ɺQY"d"({ddoC<8p8gь1oMǓ[G/Uz8l}~GZEk	Z4JRqlrRJaYܴצTr75O%CZ')ゲ{Zh426$e"ӃCUr52N|}+YmIƿz#˴Wt<bSQfJfAGO>\r|B}8d@Eȧz\\R(㼭7˼UJ'
ߘն4S&zm=gݕ: FSWäpP_u7>U<Ku2 =Nv &,5]|򆩿a}}5L:qC>
NY'^yٽ<&X%i-ڻAow#yRk7e7vOu4
:#J[!_d?b)PrpB"Vw&Uk$KGd}/K5<b˟JW/>z	:#$e.IضD=Rq0㧒].[Eo7{8d;*k1Z6]xPh<~@Yw7(.~Yrao;[wZG݇ۤ4z#Ƭ")Ejwb/{qfe q~0_`Tڵ`'fאYmSBSxL~AjguVպ^iZÂvI-Y`%{5j:($ZL(V .|_1^LEf4j>M{,ſn?P<[~`YxVx[m͓Srs\OcBOqݮΩ?چϼZF?*.jz]7齅lGh'_+0W%0ˡ^XJ̙e_5(t*) -!
;$Gh"! HH7s}
Γs>Sd,yv54sgVw洏0tbuT&4LmZ&&&1iY6pvrRŔf`	x5DfAA_7%rnNR5Ln9g	ŞG.W,r!MGZZN (jb<1JPm;RPL\}CZTP6ͅ$jN6jPmu\{q28zȒrqVqF&j0Rjx"uBDNJ.c*zK).3	q\;asKI!vLGW@:YS#'#	: ߵ`bkύ#ϒ 1׊(LhD
5fV/
e)ZU[u4ZG%EjA'QMo xUb$l<zh! Y_c#*]MD1&fի=°~Zۣ=0MQ.P菔Nhu^t{ݰ9%5Eg"dت/SǪ"a:uT5
TD1qM|1VA52P	ǘܥӆjT0ٷa]-Y5,KBI$GvJ*awؿJ7OW&Ԓ]_c{.)uטLewJy~v~A8B.&h
IKw?/-_\JMgߣUYd'f]:d+
;B
)g0]F*H3R0h.b2d% !T";e 	l<>5}lyr8]}צf)(YQG5HѵxsFު*=X\]f`:5es9Vvi邊!+ T`d
4ƭp7Ѷۛg	BS3Sh?
rT*h<%tL|pLGMܩ6kIyyIa|dM~!徹R:&&|7vcQ{?5J# 7<9P:7ז
FԿ봋<nxݞv, x{x~s0bRb-Z$E= (FO
(<Ў'R65UpQ.b,̄Ԥ00
Qgj)|(NA76<mQ%-939{}o*st.oNI}vܒw+,j8u
LfNrroI.hQysG\!/Q8|wR,k&)j}鷼=w+Z߲P=,踫ý^?DUDh:I=g/ރߔI=	lae<ĿfcG
.q~&F[y_h@]oGޏ{KDKk9t&[jgӊ\${NC:GqC$'sIre*C.UF=c^}njg.ol`֩7 ~gv}sYV[]4GsCUsSk7BҾ0+!oW7[E+:8a;n,{Wi.A%j'΂9Msyi{5{.0Wqڡ E;J92 ਀,gQFoq|ٕVf4Qr?Y<pnӴ1ӰZ&	JO_miCe~8$04~iϮ<.	*L,uH,E{~}<f_NAigq|/w
Y*o_uNdP2 J@cu*21||o<nB
)sjZO
C`=vFOcLԏ_z[W
BX)$㖋:9KRLLm4+5!;/J:jW_uQbttqe1/>N9Z6Ih0Ng"@>Ҹ[3O%ee#gUEt*
+EZXcj]DɗY5_": ĕN\Ng"Yz}+}-v;J>e. GEF	NLCIN.u7=%!Cr3+	ϑRNNNі7Byvl|l܂_802?鄣W=t q!7ytU{qoVn$kknh#YG;)V^]Sﰗ?K^֛7v(\krN\% v?L{a'[bb^Ёe8zMסK;h &klH83ܗ;$j2ǯn@BLak+@6J{E9.yjL_{3]{I*U>2n0WnDLmEMa#(A]Kz:67KY	b`M䋗2x+?i
;o}l_ʅ`T~2!Omz)8ة*YM_ÜfHFLKNK]
YJOgvyLXWt.XLeȚ?⿀e<],SJCU`37f=R?MvM 'o:8Lx7r!bE9:p:52|JGwt#ҡ%Nd#Q %귰FQ)KqƍJC 8nށsޘ@mŢfnulztf
GjB'`Z?i_24Dw 3f2]͕;\>
|9:!+̻T=l5d*ް}iW?M{(иM7EkZ]ny`WJQrYmo!C#'ִG3w/J8X_.{uLP]maY,P/7ܱi#&çTҨZZ^KMY uX|*׉K/pXUe:Ԩ
SٶҐT3g0j~\fñ."MkZPɭ:
|KKKJU=`	997pGfkhc?f[{R/rF8
8LJ3F'|)mvtpM71{oVt+VE$nXʣOy.-0c 1A_ufP[(i4Dw}XrHLnDj9=R5OsBSsc) _ZscGIQW\ZK֡?SqhzZ|*oy\*ѳP^:p띭S`ϫZO@Jb,v1D^i-q,#
7OXGun+2&ڏߢ}ս^I([֕ߧzJ$ɒtԹ2S&dGud)~l:V5g;.18=͚.+޾Z<7`JY -*]5wglёkf`n08WɨT%DWV7
YqZm1Į9ߟ^pgUjt#~?ʸ6qzoTQ,Jk47mv&j&\bA<m'RLY5ψfZ;ڃ8(QWSM6cDB]Lֻnp6 gMo<'.Qn;,@w|t@{kuZ0`Z8P!pbE|ZW~	ͨ32>B@7"Ogh \CD)[kt
_Vͽ~s hG8lu$v3.XiB+p-X)D5JpUkR,lfkJ&!W<6נx?[3Rw/|1QۺT}/S#^'WXo{տ9O3*Kw̅jV(z.{ON[k?u <X1Z}3^{-ww6潁7XFчPIpefE / nft~۪+cЋl	(ӿOۉ:86Uu%ZI@'Ī?܆Z,&=9UbW'NJXɱTjRMA;9ueʭe<mVVͰ]Դ;wkO I=*&<-yrUQ7lٽ;R%7{XH8FY#Q1iU[ش'dv-p"^6O~ xC%Iw3(4 i+TeFM$!,:F ڳ3d؀8fµq/6`"^ƧL˪R _`\2z7w|__T|ee$h"u|JqvY
1Iu<oI	\~It!KG
T6jK7^x[ ];&1׽)Y߼|uO5Xg7֠儛u`Q8QXɜ  m!^W26$z9O!?S^s5!QjsNsvoL+ĶK./	sͩaȁ-D@*3qJyi~}keʷY})P|AS W6]ysqHgvL D*`}|a7s GE4
Hضy(9=p;Y#=xe6>fJ,.8Fꗶ;{;v/k4(U`8>Z[kR
돲	xOD:@O̮XqdϢU}fXz >cf32?VLvo`{0KŎUY6-_ReT[4ls:<|;o2wQ)?}HL6NI/<`$<dizg#67Pl'ڟtloJzM@J#tȇ/CMBf4,N$8vz&]
0`>y*П|T-K:]Ao`UL; םHǕw!WO.QY+y=iʗ
aM|Ec$F!`nBЛg7)^&hP?]n?λk|lHvp>N0!p9Q(:O?][wp019·)3`BY VGޅ.f"zUZaۇ51eK$ᯱ[w[TĭOx6!`<'F\cV-=&OluIfsc4Bue20$k
/eqHBjG{=4.mqq22~OSz D
^
=bV&M%w
Vzf#ۼq3Acx8
57mRx5j's>'ǘDػ
s1,#8Ƨ?DP:G$8iXGؤ~*
Z/SRkAsuMj
k
k1[tŸ#Fv1{([ȘYl^3]X0~5 ׏3sAVP_0ja}m}QԷEQ33JQYqIdV=V|6JJlG)Ds=u+{8h(GNlEQIMAq|J
키^
-WW6az!;L<C'C_?=\'%CL:IN힝^9TVa:
]
}.V{se)%\)I4p%cJ*pa}v& YmNn+DҞ2	pv{#<.okhZ&ѥNY}qx'/ElꬆN̴h~Y]QTg՟$UƁB4:}FAmNSLAO[F3g&':~Z?.rܳqu}* J$ۡ:[-^F`
TREL1v8\$'=FnRJJ2y_!bG4=x"ӭEsip5xIKWv+Atfռi,8ڔV]v2*D
DԂOpBaOCg=%%l\;\D,:L'-ʊ|Oe$#+ `67moVW?VϢK 7Tϻ%<9cf#C?Dռ*tyK~-( k̠wA_Lf)8
,ڧܙڪ3}8mߓ@ugwr})ޟ  h_<0_MFⶤi-zof3?^;
xTEM\}Y>=@ή3u- άY^.vI[H:zWoT}\$os@O}6=5d{~?pNűhOlubDE2&k:k%P#u[8Eu*& tN4y89k p&i
R.ơ3|]	GM2Kq^~>qoO#hkp˔iǯ
Y <hY4J=Nb_ޑy.TEx+ڒZh@29-ڑͳ',8\Z}ZtYqp=ɱx/qgUAg	?AX;uVMDER=)IZ=%'cF·ƃjkei#4
'hf HHTxdI"}[\(MÔAbroc*TQ﮽g/EܘgV2$QV<~(fgz\$D[
BmDE.~d1{7.szQ*\QOqgZ fkh_M+TJq&6=صhBvR>SUQe<v=ȒQb>5SI-'@hw{˺-jDK$g}Ρ t`JQaq2fͣ	:}QkS_)|dFjuuR
RgHmr{mLLWٺMl41	! s+Dоe{tkbQ"v:\<!2WǀeH+dt+LS7
2јn#66ЀM>&CnѪq|vI}s*LOGF7GT-HzWяטAZNR3վ{uHG.D;kT˷kAei0NMl 
) g^1dބIļL.aVj]Tf-|7wa`|l>EMv䬾ʄ>[?K:KjuzpY^&v+ؑL	CJqPQjyW5IwһxӮevVP1C,ۈOc1"pY&x(oƧ"xdh
[u8r<I_9ShsTuqܰ=
1c)֐UQR.sJ#o
D:rtsKxak}\v"V{HE&38K/ύ>a I[Y?Yn8|h)?b*u{:v{#=jSOs,ZSZMSOJ@l x:Ǉj3x9U1 NK|'MYzŇm3
%rs<ufϰ`4Cs9.3;B.B;g^*$Yٸ#Iܒ*ZCMnDkPLUꛪL	ac> H\mցs_͙kw8&
yYrXB;k
4ku-U},$mR~|H)\,Zc,4$tH7@(/I?y1*k,nb0 us73/<bV5Ic`
\W9%,N{_shJXGw焰b?P:Y_j_Z.-).
r(7?^54f.FH3;<YS0;9r=f<au⡉ѽ^yz~~
T)n:8xQuwD`Q[#0+PY?>5䠈ՌƮonGy[d#fh'*mק6+vD&P[zV鬙.PF{ǓuR>auu4Rg g?qB|ӮpE3,mr^~"O;)sgf "PSuZ8Ͳ=z8f х;.S4_Fb,DBFɁ蔎 7FZ}=Z0F
5=K0XB}ճcv"3V/s/?2_2>-ͥUСmH	`7Ȫ{W\_r]~HJ>R:Oѓ2iGffZ';qa5B!':Ԫ{pdP+܅FUzXte&9Z5*ə%!/p)

;7vh0ZH:TC@n_8]~ZTtJo[0=yZ9YdhK2u]XL%%$1r?Q~{k1+:ԝ=E&Ay/xM
`έDA_5NqT)[8$qÎߨ{uݍʩ$՜O_UZ^ :A[FF_׍Kʛs_8LeF`o2^QDȽ;5.ُQODUȾ~9gdi~VuKqW3wݚ9iA1>'
.z3 _AU,Kh0w96CbVYuu	܎W68Um45viMƴlۑt˂xo`8(^Fɒy-}T/xX#!Gl|c1iZQț\'JH^#&MsS]JjD3F¤o*DHBm߲SMJL˷MoT)6G=}9̎"f$a52
=z|7I ;E^=apZ?z] KdG% .VjO˛Ԯk2wmkE`Ѝ&nEL%tÐS<2:V 5utnԹX/d)|hq{HR̥0Vq%:gʽTQ)R@'YMEw:)BG0dcA'Z^,)xk.']ZU}}s	ֱH<g!_ ~$i]17~RILl}{26@IP*8Q1<^iԷЛPf {b:zaۣqӢv]ym5l)rDY9C+k%E@n"q!t܍7QdعjJe%uDuy
&-ml:rH56M*"ʑ|~FoilBt3ހg[bY 	_3g*TAR=/
d>t~\q
>k]pm1:zm
7.UB\r:D1'j,+pAxjC<W6ٻ
~V!tJCfZ%5j8.|[/膛K#~gYOy=j	{ΫٸE۪:Dޙ=ZxTSyOWxjU1^( 2Ed?ÔdpSԩDJ~}F'ܬyr!7O3d`pY]qxt8E?Z4I=f"*W./ѣmFo
1ƾw:@dazfQ7.ػC~[f%#<<K)Äљ:N#)O=rRub:z(Tv$t`A,,a.TǀVsJOqiŹ<[E<'0npyw9_{Z\l0It'H0_ wL_etqe-s5z/ԈhR(zPuJT sV:we, ,`
$/gF>#MAvSika2Rd,(²	Tf+Z2ZUZ.cw~4A<Rw]%k
Xfբ>	iQMZaUY[<y)Ib]њYcs$H*D9hp?UVef_rVSeR6'ϴ(_/bcԺ?ag!7pUt(
j=>c6nB⃙kxA&XxUTǎ1,,;LH+Wy7hJ#:8ɚ*]ritx-Fד=zIvS(:;~6~x	#
%2 <٭I$=]vP+o^fhϹn笽MTlaj]cY^ Jn7<V
)ʎB'[yſO[|~[P8u_H13K`rؔF|7$1}aEtpo
4.0J}&snHwo̍Ŋirw/r.O6Hy]JޙBZĮb(eP\_d=eV熻pJ']+$G/W5fIW]FN)f_sZȈDW>	>ZgG/s=,|ѯDTOLWhvl{SHL$zkAG	,ECK[BcRP',,겂f$+lOtoy~_p
)UdZ_ޝ,Qw!d*Dx\>_gGxlF>~eƩEʅxLw2v]bVv
V@o>mYHeA#"~辭O%bQ1\;b ʽk(U
Z{Z+bFfvgwzI^8x2
0Y.:p}aViR).z.Ur֨T~!eٵ8Nj~/lҺ J[ЍY_l/,7"&J'T=<{=Rj=:d<#]4.:i5~kk8Qf~JMrO	O18iDU{ +^xc_U1b<*NeXN3
I!#LO)]C(*-f;yyUr[ڱ#i:Xx'*8SD[\7.3C!Mnih~3&)$D=#G*[ǩo\)"ђ͊#joRt_|zjĻZgr<nFU1Lt
H>m9׷HtT&pI^9>VI"fmUcM͞JYRבZ]*jYIeEeO8'KO݉wj/=+7\hcV+[Op˒e8h/VZ8*g&Þ Z}uTՙ}Vɞg1e
zDFRល\-SZ?:.n^ .T.zރ5LT5h.9F;o3Sz5҃2>3Đ+x3
G(G8Dj@!Y
(l*
lv$'Z44R
v)c*b[k~Xik^x*"d5͎[WJ|}#FA-ڸ'+Jv h]X̚,%1|ѸaP&\,
\)VfEK$%Y%ֽr>+Ԣ4ժ1֢wLF6z)(amQ,zTJuKBac^V$=G>r6{)yxL?oUvG|Ynqo
|$Ok7fX[l&s1XQ:~Ǽccu4?uuMi>л2
d_Q~oa*l_[ڭsi&X*w@|tVudԍި) eZd'xZG?ѹݨ,
$I~MJ7Do JVwjMݟ q6(%XJ#.-k#zp)j2iF!'u]Y{Dgu?p0Mr#\/7~OMO^%1$^W&{fg]#~{n󜎱ݩ>p&YJ*!ss1buVmXc
apTO*D_yt''Nz)ߘ>$-4Y7nzYG]Ί٠ c˜tÞCaQ߻ oS=϶g[\~nӝ(3	\ q
CT*pr*蒕<0\ҽ%5VI&:~7rI/Vd,5v
Zt\n=bGv6rlN6,EnU-ƄvtIb<
c񸈨`*+i[AJNfVzՎ .o񉖀*;k`Hdqܩ²gQVK<`}wh:
)
(<qUwyN]~Kօ?p;,U(xN{Z,IgM`;d+4|u)"r9Zgޞ5j:@~o׸EM%dHKErV\j|"@2!7F \G&:ڡ8a`WqoKߪ_usEBţ	7N܌}`tXޏ

!]r}YKy 9Wa[ݓKE9~oz$uclWʒuQ~fm@x+gb0Ql5A*gZyoDrds^ЩrM3SW=T~dFWI
d&EEosԣ[xU1 KeeRz
ًCOebƏL|U]Pa']lSޏD[V?KTaV2>3{aP[qکW[}j{DkN]%wª/2޺"tlk_r`GEtpL.*>q2˟v^CɺH'IeV#S<<!#==ۆ7,]2J3`:1`Xj5:&>8_	
0c3ϸ@u(Cţkhhn.aSWE	ew<'Fe<'8NM٬<0r-?O"_
+D/mߙ&qR?&]'bc~j`tU@g
xa%G>iQŁC6ϗȁFMZNv.	s
}e[Rϧ^Fm޷(!kWۥqP,S[`ɝ(_ kJBJ|Y#Z(WyӺ^ϲvmeS2
染Ǥ_ql	)m\uԗaڧ)\f7J07Cjum^O'q0^ИPk	Aƪ>+H૴o0r
7fӔ*)
֤|Bq
ɷ[ԀJ巫h (_AE (Gn&<t
d~8ưFe	9#,9r|ϟ[w.3_Ǌ}__ziWsZne4=`iJ<x>s|<5k?<TmnhDΉT78O׀ڜ׋塻J	Q]E)	,wȟy\wbM̈́~޿zPs͖/:PDVluY#^fiQ(X!e]Lpe"ЗglC㷼qMU:2
wo?ȪEY:?Gq8ۂ^-DQ`3oq+U48oaֲ:^To{wBfzT]9yX|zmWdZ/;b`jJHHx2 q  +ߵ%}%ݨ[&5kfp^9C&97Du/wNbvz_Ij{9	.>)"9Y1nyK"m
ϿW>V\og=i!ILrfrN0uVQm@Nl9U,bszeRq2ADCnL<tR*գ[W5;Z(-dͲ~%	sVWrQ<΅%6Xܴ@$$Lo3\6(P-7ob->5<P5תX71(Oj%">ҭUm
=| p{
aw[n\I5ϸn {枭ԙf[&aCX]OXpok.MXJv5G`Rcm %	Ŗv0@Yvˋ^K5E߅g.kĖ-wSp6-rF+A	?)߯bU~ahTZQ53,+Lx]9=v$0NxQdF4eĢ%iO_!
.|yk,\~?`׭T߻qim-_jS/}SwE-l'L{{Pf&t6^!YB@H>]|g迡#^qrЮک
{ZEQ,zʶm۶m۶˶mۮUm6/K_:h} \jPo2*=#{Ec
:J䔑>Bt>ʃNc*Wjyl%	ەP]r}OHatCPC9#<0cxM1
t;dt<`m(V'LVWx #<ͬ Z4Y%k{\αYVyz)J_ƅ#d
*8y&B!r+T<Tqsnj; n|("`v=<o
NbCj<TqBjyqp,m$
>S+
,D7v5T#A[:5ca3$P>}&@u!3fnKkvZeGўY+;"v6\ᶧg\ }Dfmp3
r[60<J=@Z=Ə쑭SbE͊,^^TQԫWxѥ)brJDX*n)XEg&R{nhc$m^P4^Hdȭ!9D\Q/Ρk[VH&S4ȝ(#'[Dn%]%79qSLIɍm˲&j7AND:Z#
5jgcOOĖCr$Ulπޠ
{
?9E>m6t!rn-: ݵ|ezB/J[ʣ'%ǥFv)H$i1ŴcItG?RenL3bd7I%Tf?|J;*G6`~ČxLP\몗|xKƎ-ٮY$t
$rs-"2nY rM/XZyKf${ʶ)xHw$lBlM"meɟ!jUFʌ:-]UpժJ	Քz_["5aJ&3& cv
7A2e š<o5
&=upIvQ3gO+G*6t,i 7ؠ"s"<PFGf{S*	S4:lH An%y ]@,v}B\ѥf*g{Ώ~B&0*/ak5q
V9^ڍda)8Gd )џK=7?۾mbhfrHAȣ7sJ=#M8*7WB?4"H&Px&~E^fDl*ZԦEFƣ'<C6Unj
ɻ׋9_&j3	p-N@vl?zG{Q
]`-l!4݈˨<?$Пo2X#v
cSg^UH𳿊l:"x"vljh}3+fvRQY$-];V4B{B}Pq?9°VcaSUI>:>@jLd8笶3N͒K$S4,O= ^*-~ExDԯ
p)Q7 .B䲄v@!'s]2Ztez!;:.#w֚AMTdzd i31UF=Hqm^ _t>|䄀iw3!urGw)$ZF+#l,9Ӿv(& tK4N<Bp b|sH͟R$Y;ZLO: rjn4e/\'s;6&ȨGv6Sq!d!v)H/?{X9 ܱ:\Ix_xj4cI
5ZϛOg
"Tܮkq.:Ь^2P
zB:'S!U0R(tg^%<\;/p5	QԟnGfI]Im]*	3Pl'`@ ~ !>2kPU0:x	ub+C!ߎ6V蚏KlPXv1ˠw9@k2'>r;Vח jVmcП'(L"PZ㲾媰9~GVX	aX]o)>Cw\:o}fȆM¶5{U'4ereunj!	j]=>
#s	:էl=Ps^urDIG.W"Ӿhݥ9n+-^Jxr6[Cu8ɲVSwkⴼ&iBoKg?f%dC;t38#_ȯyLI9vQ@2T+09HխCk4Y$^vLVm917=ǠnwBp*
&A^On(lZh-| +d<I4uer<P#j/qG'r.lq'8/3K3-Bfy8PbVsstξPӏ ʞLrQtD~M~	ewv6{$]Kq䉏Q>8(*;
c ^x.vsP1)@OEFu)6؄ZɃYZ1}<d@8-x含zk
Be9 %ou
!߈sO/$sAlz/5$.G'Hw"S$U{PbQ繢pښ'ݬ{J[Ñv- .X+P{@_j	7ՒT#v®|Lahc/[XQ ډ;U-9qͦ۾o$fkXi+;.= ՞
^\ۯ4MT^M#IaU(B	CHMTrIݺRJ>\BoP==wZUNbEhǏߩr'W.O
E
uFה3͂7>FP7kAߗP5(_<ThVZ˯|˔?*W_d7:/~Wˈ`IOp'DuL=V8Mb+"*k*VnҌw4ʳ׵
. ,#ԥj}ߚG(eVO2\㪶IJɋM",*Ҵ^xp=tw/S4mJ72kl?Vſl=;*?3'ttOؘrLtB6>#seZOrv	qkLn-*]C'ᕻ./5'lZ1% %J8BMś_s.K" ە	"fȅ\yROqj,ExPY d^g|nմݚwLKTG~xWo0b|*
qtht&'G9[ߙѠm,XkL'O㻲?QxLW; ̍}fnFGms_A_Tn:VjecYp^]Bѫ%RJJNJ$mP93';>[>d) ["qlhpS'_WDs%OtfxJ(ې|Y|ۏwDK?P|8'rK83z4hhAިTŮ	+X.z1
KN%(Z:M-PˣTX߬~\Hf$\3M_\Ne ЦVFXaEPM5f=!&=o7#QΏÏ <:%[Pͦ,Łַ^9uJ.)}3Fjƿ/Z" HȒηX,[GRkG5q6ɭE <O7*BcұwBC
+$d)Za+5RL}rx?%pB);$<}ŀ@#^j3kCPyc ayEH/_ *s]LSh2H6wKSox
&.|:xّn\fF%
5x;Ӭ9uyփ%,դ]Ȳ3$"fǬQ,oA3L
ƈD;ȷ>$\Ҵ
,/g8Z³R]uMwl1PL؀Q{${V^AhW~(<Su[-id5xqr(U͟-Oi@ZNKgm1MNouj0
:܌8{;h2T2XY<2,* yy]ߖ)D)kIoKLmðlD8ƢXa|@;ev!d^6)″/ښm&Ct
9/qťȫ3l;OI,7/@(|C7 q9KDN/:3#Rڴ4M9pW@7.q2ڌQWG;˺UW6\L>,[̙Wabk4{=ܹgbsd%KN( 
sYM2f 
ihq(9K+1R([NQV撣V bKml p
y7^4aՍBNm~YUˉ!狱 [vcԏ#uC Kξ?1818kG
mvesD_%74\о/;3BrY
+zg]
<[H77%@w>8cj
+K-OaK.IR.@rw *;X\ c	qxb֤Rߴ nL<ߏl?:SƩ%2c9τ
V +^FrjCZn_Gv<=xŐ>_8!<{`gPfino52.)]3;:[ek!8ыn_>")Wx"V?kqN-Eio@q  W<h%YYAN4Q{iث	2@mQwBJvs羘sX8wqqWn-Ϭ!lh>	QDsm:HW<a'$7x ˪DX
fL9(Y>s)ʥ۫*DkhZCۢc9iZwCqﾑ
j.sѹaE dw cC0Lh[nS)KN!@hnI殩_&C'ӌYohF\g3)j]g1uէz4~/[R,Q :Ɩw5tv)[goݱ^9,ZMaDlC&>5
8ǮbV/!펽fYdzo,nvp⠠LFG ukI̺}8Yފ
K4bckۅ׽KL)eKŴ8íf!喁;(;~.uW}6PgKu*
}1CDպ_P^y΀'(nX/>V$
cg҇t
~=]')ic7BOJ4y
ej
H\iBX+m|6cinG<d;TZDˣ}	_mSqER1G&#%.\ɷ=$Doz"3"*B}tN8*Nh	3Kt3p\c-H;a3^2[GI*4/Q2EZ1<h&9\*4~uTLqƽOk'>2ѥQ\P-_.bô')-l[^TJX% Yog8?vSI
2_+m&I8U~.A2NX;LA3
es+RDq;*[Y"Swb\J<P\ױͶB
7MXہw
3Nҏ"*yb"{Jf  u}::Ê&kwS-(햒VQ#x3(ΐ$"ۼHVj?j{{d;|eo"
!t{Һ,</h0H(HAEGyʁ<} jq#ȧTQe$]TA#LvK-Y|_b(`qCzJHP[2kdj6&U[kLX>g0aFő|Qr勧H=L(D3y:dN%ՑW)fH&T]* @ Ij(*3Ǚ%lP"p7'ZN6/n=e	g(lı>9Ca8li)yղM^걙9q
/6N`{^1 aOkW뾬P*j0kޅv鳱,2K=prtk_Gw?*p(3EI2ڲV\8^-4%?Me.+k#Rl}pgX"dΈDYfd!{h!(TH]&S_RSTsʓۗNcK" 7.#CRеڼc3m}a#I_ =iEfDȗh>͖Y۽ld56FkNֿEix;Τpf ߓL-TzKl\(ޑp[+Ry
3@?g?H&jNs u 59떢v̨-!!3&0Q
RacKcab^&Q1A~(;$vqd<[KG;,8{^6:Fk9֝KD%H""?rc0t&&X)/gY|Mx .
*g=OU&
UF:^YNTUCySn¢=nV`";vi{Xi&J%݃c?(arTL<۲|#{ wZ)A.<H/r)Šx*mջɡkV#nbSOj`A\|7g2qg	kfD}./K*=}XAsNˈ?y_'92dU;5NʡƟBD<!>|Bzy;Dtg밒y#N켙39 ;f)ψc\(,e1~kGj.oh䅷R>KDG2p.|bnŎm"!<ψ5yd+ʣNVQ3,oDtFa9	xIf	to}Ǝ;Z)PI礔6)aղcg	ӓuF=~<Vc8uj[vפS	J}n]_~Za	{uCaWrڃKE7̍H/(nZH}o3aH&i</1״h;[to2v>S^c"Mvx:66uͫHLłjdƪ ''{kkJk/+4 *!75fj}vU/G2JkW]S%&G}Y!rRRtv<Rwa7;Sͮ,QŬ{L`LB휷 Fm|yr|ܯ~zk^_
T.~\`O,reBSݨN+. }{WT`kE5/u]jQxbiNC!}Xsw0kY6s\ u֟ҦʐE%;~EүGH#PUza'
ź$u4-?r}{M%)}EĩaQ'E|h#VÚϓW7Q5nuU_Y9enŪQF8N8Zδ~N5|([<~!iء2kS*A;?6ʴNTɱ/<d#!|V:eϋ-v4ǉ} R4G2cUWo@ӽ:DJN}C3ay{.Jv>#tza7%LPnǘSʔKc/iSo Jp'I7VX
,z:!٬ES
^Ȥ~7dD_;h]vT>
Y-qNjj4i_H>~YkW Mڧa~3Miti0ZN`enh޿9^E9;R%2Pr.rVo ,1Kuo/HVYTL36įfS@ug4Cs]~ǍN!p\
g1(CJ2xNQ1Xf>#i)pp.rVؙjI"_]jv8(>r vJdW?.]2S^+	0ْgf_H㽐<\d:`nOfiV"x%N݋@M`>;_N޸SU¾{JuHW++I\r107+	03 F[%+%rX}hf0frdCaǀ{Zm;"6>?
UG5v|J&~O\`M}N"%%_D/LYpoKYP6-	N;̅  ' +l9g0
HI5t#~FgmOzoGIbs{?Ɋ*fۨ]3#1b0#usEFG^݈a5AQ?i^NmطйŗuҳY>~q.ǩckQ0^Y+EJAȫ'_+P~n̝[en?s_&V/&mm܌HO\ЗԼÔ1~+
+2GuUNQ	Я<6Vr
+ X"a\}]HeoWux;kyBRgPjzs^%ؖT s[p6q2-mƋ\{p'ADQǶp:v*	6;aK*_zT%Y[Y$u1H\SxRg `~
#Byf6a߱W0i9Z<T8E
Z%j6jxt+|hOOE}ЍLqXz"Gj pbZ_)g!Y:pd4-w3.	X^Lu+=v]!X!)={UM:
-w
ZZ{MW,~OXMSslWbaOl;>d?e7H6Vm{R|DC^QԚ/yeI#-.#ж+uBsmIoeay]r\ ,;U ?/k=({C+OƖƧf"BKL}0s8pbM	c j,@:]*%ɤ+fƁp)5*LWޥlViًkaBGΑk#2Td\R7ճ9"xn/""aM
nfwY#6A~dDMOA?ZZϢJ14:.Y?.55LjD&G7;3c'*&@mO#ʗSgPpǧ-g|v!З,ky[2}{iYNuxn8ߵ`0p':脪BӕDBٰҸ NeąD1EsKsb9_'+R-1<$+,mFmfx,dZKf I☳vn_ ?2E:i
!w[yo8]yЂWqk
3'Wc:8zӑ/ZBJX׋ʒ,s]B`"X#NJ'JosY+R\z(FN
W<Yhj{϶_Ԉ1ec	[D-J[PP}M̈[=Ghm>09>
XUm+?4çwnʇۍC@Wtbo(֔'jVK*6@frB 9bcmimJb)Hj:oۡd_%}|SW6slkZ;w[۱f,j.<s>CipӵODb0U~5H.{Se?슣N58	;xcoJ+,2^f^7&dSBP.;֥f"h0	+Ndčbw$7wAb+
_{ա`e~Fd}:7X/VfL ūkÈ9JRfr7<ZKYV;]&w|jWTVGG,뵓z%̂.sJBN
?bNQ˖5wo,PpZ 
:A]țG k18Wj!=`&UycgTc
Nљ)I*VNic1gt;-w)ؐ8tdh=DzVuF0=q'u
Cw_gʫy}|t}j~oEċlaag'*_8 D_cx9XOFmgƠVq3ּ^<L"SX.N)G/MgX[(61^q;WG[u̓rhp<*6h9:&L2xӵGW;KzWv2/sPK<e2IRx`Fy7TgR'y4H=HA'8sxŨorQ<
hO%4iJ)
VmoG>9"JZK]:^#V &PMȄT98(h͐ׅ	Wgqvp]Bx~|Yގy>	#5m9e~bBCe?7R\{TIt
Ju
\9Mk^f!hiVsIlS*9S䒂TXs,.~C
K1P#=<kֶۙp!ۭ|Ip4k>lĠ*ǁnW/`D(ceʛzPsnwr#ǨF`8nl@ fw3Զy'bjDHdbg'3+>c})ѷFeN5*>XtY޽/ʹpQJF
ԠbbS@jĹ.ObX0Y z]Ii
W-<orxc]>WMh-kE϶b(2t
l5Ad*ꭌ#!g?:<8T|#OҲec^ijPŜcJ-3~e=h
ÊᔔRROhWjb+#
̜B/\	ܴ`=YsoKJ* 6Ny'
;#TX7"
XZ\:fIL:U6=C
gdIPIïh*wɌ&@gU.iLX>g6{F{7uHڧ&iLz\y6-lقP]&<DٖBa3z[M~ܻqwHWt)W||o],,2F7etn!|x^)U[qK$F~+DܹzY_oơA; b{<,wdhyf"119UkR{>GƽŤİu<șvS&vDq#rY9o B^4nz^&wCHӬJaz֘NE
Y@Dh4s.\\yk9uk.K\W5YHCh4\DdS
)b@4mPG]0'Hyýs:7;eX-~QY|%Q<=r%E=-/YQf\6D>&[~Ov %`"zkI@)ٞoBޝ}*5S/~O'Ü%J)iX^g'CXYy9+	-a?T}7T\i;>覆3e[?ܷ?Wu+0pH[=i<b
~ Dl
Ν4sׇ	uʋrQ:q-
N}x1#||2ʤv}2Ѿ\(%/N&qX
 /5z|act&WVoi^˭( U0Cm>UM7e!n."shU!<}3~\ߓ4!
݅a	,RS76;3{HFlNF.qNWe%Q/Sͪ4v34#5DKczL)BKcB
O*miN+DJTGs	IM}gQJe
嫳^*g8Ӈ;0xulS 6-B9uW}O^>JkZ	qYWWk's3<uQ}TR1Zc)I`0ڳ7?QoSǐ@nTjs2PD$>c<oym1>B"6سC`PY Js[g11NDΔQ!㍝xmzmW}jDz^a[a2У<9q[jqp,P-te;(el:η`?½;fF$#F
}-x,scC
{jJ>L.ekbڬp;X-{l抟(.ϯ9XQ& me"߯:ag(+~pԉ;i@ujKˀ#;.Wyv_Z(XAPśd7}>X,]ktA6bBmȈjXoeoۊcDǩwbAq0?Hhjw'pq̅Nx4iRv̕ݓαR,9Q94v
~2lCUE4w88kO溗,.'X+fxJar@努)T7;l\:EJsx3z=>ϛyHNpcAܑÑ{h%?:"/c{fx2gZ:2O[Qr ]AQoO18]-EǏʏ2abgAsI+l"йUO=ŋeShf
#3/Y6?_5#ONKLX%Qm`(kY
-f2eRL&cQ	0
8"65f-x<5"vs`
mIb
bݧ7ae{e^TP)KlF~\Vt.;ڂt8}f7F> Z4 G6n9ûF>mL{sLǲ'¢H$f#6n՚z`*QAdO>%i.a8(r|1bwDdpM΃alM{@+*W>iQ9aTYhR2w
t5fvu|s(׻|o0u[ɴȭPiϡ$Q_+qGjj#Mvi+;iGsHQ}uߩVڞP+z>9yTitNZω4=iO~/Z(b&9uKV99BfL)F6!c~cdQ+tF[=ћpKp`w6>2m(f)qC<3×QeAShxEqȃ|Sg	btEk!8 ԋ
LBmqz9
 9}m7BfD|dyM;Oe<T{h}[X63:#Su=E7	7hCǗ$VIƍ>RMɛ@oIA׶0[>3x2 4e9~'Lir
`'}@٭vqUp+Lq_Z~t.P̴neXjH	hfpʶVaIYCg-kQ>dTFͶwWu錎(3l~>!⻇"6}g4rn.W	2K]=~KN|)3cv_)RgR+^׬lHK`=99i坃&VDG>LTѢ}=1{.Xx%V^2!3QB$1sVuO/<TEDw'qUu¡mN$#UT*Jl1fl*Tzm?<4Y"]O=HY<VjK5ʌܦa'$7`=!SJKW\PK8LMLv|ǲ Zu']jxR
J!IMCg%>N
,jִW5]c~0ݜ{r|٥[II>l.XyhʋԐN3xz)[{7ZB.
Q~n^TfNb䥓X)(R^]so|ݝS)|x[L.h{=pieZph*YBJ_6ev4iB`tY)ѭs*̂48
g ,qO
=3}Uzpz^(!ҟ\HN6*넋(.!! |;DuӦtP@<6ru4dWEHB	V54tm\4N[f+;C4H*֠_AQ"j9jDjt
v/<R+ߌ5jcToBƫ`R	sr2j2+A'uA	(`ժ<p{T,D=a7{1ضU~&\{"z%`hLD fI2yB@%O6A=teo+OkL=U^4E1߫#B@fh4$wT:18q]E;C/NDQEvrBj#te%otOѸtv0\yq*
7En Tg_Vy,$?ebsXbTa.^އR#▒^b%jZ xgʓ9L O;m۶Nm۶m۶m۶OKn!$0ˬ[]:몍0*#rȬcDMWIe\_&1fpMcny@NqqvKC9Y@5r)({;[4Yy/H/kS\
{`gJgG''itC3l]౲W;8+PiR[4w˩CRVvkc̽4bx"ה[=<Ɣ!Y^][K7+E!<Aooriu"0:{MO~.NM,Bj%9RVؼ@wOB[WIj<剄E=YFCJ?Uk
S;']Jn-]7sHJj3W"EQViNQKWx_t:'tag	YP{xG^5{kZ۳vfeH@^J8~{*2Orh>2Akp͌DjsXUEA
1'ixsGdza4/PpLBNA' 	n (k.M(_Wס	ZZ!bx,ڣ?h&uMxfT9RxROu4P@(]Y%}('وt~kdy_R¶S仫*p6ڸyꬭ;DRϳ΃-LؙBS.f=/|-	;&mϳ
.(}vG5~=0QO2P3~EyLǔTiz$";UGIꆛpGΒ@HAq<zI\KGZMF=;3xEr
*#hv
+rbP·qC<D&),]#n(K.ҦR*
0H{IL:T{Ld7z4JHF`pD~?P=xz{1
Y<MkjzHyԕ ¨^1)Ak['uTwoU=Jq=Di4+'
À~ÁZD@
{ƷRi/PiLjK՛
Ħ'y#Jܕ[zAJ99>+bHӍd"p+ܛ9<,"2(,:2tA,}RUEKW+|?Yw0a%2܆f
wF{vcAOm+3/ux;.߼[p1}I` nVyNS~H9_>oQX@ _b  fII_Wt:ccIab\cO<.旆Ccoxb`@{D=ӱ{m25
HdGV_RN-}]Vނ (I'Mo/u%/XOuVY,"MQXHU`(w=KE
U762tӐ+u;
8
C(W|d5L<ED.Qz+T~~q
"YlBSe$8~Z5"_f1dԊS1ܝ9k5v_-'O161b^O;M o^uQubYta{uJrFZǻt* 7+J 60` Q{ϡo?D$q?9v ]9t5{1Y\{QzAiT"Unj!#LPF-h]$o:v|᷵D_==|P'}B=.!#8ԧnN~U1^B黦095BD@3tRJw Xp~*_nW&=QW*q5/DP`ե
1QXأ֛I^
j׼u;!uXfPᅑ"ԱP--]8JY[|w y:Ly~ZP,
eq{sY"Ǆ
Z>Nhp풓L2k{d[H}Llda%lqg9{nq VoOM̯$.h\>
,¶oRP:e@;7mԴ 
Jks;+@%jk7溃8f4Ãi	"٫ ihTNpGpǆJ_`e`!}"Z'eG&q?OmEo}&A&dsU2poJeN0Idcu7"&~J]ik9y婞g$ќ`ڽ=Wn-!K1']a$Y#:quѱ4PsR	Є1^1s9Hز1`7?;qas&Lܕ3˙j`d{Ɋ&hN[ȂHN7gDPϒ+$pHKRBW
,/>;FecdD4$IbvՎ*H8XYc2w_1KfcmD"
✥rVTdJ#N\.[ji/]ip,-rdo1
dc_܆.o2Ld0X[*کi	;eZ~o*),Z^3fXJjaPipeɇQTrn=jF7FH]Tok7s+JN%o7OÊ<c6R5yR;rjݸB0[sL2M۱?ZuQC6@{Zmpd.O**~VM`7	êl{/V6"
OrlUS~m`Jx{S\JE[Z黆5gNTw+myI4`<޾rBcXL^%"/^>N`5Ce5R<T7N3rS>!1U#@DCIɱFZhVSv[y*%9߹,'X~l=B*qY% y%,Z{'늤MftB #[ z:=TzwBkڵ&Z\.͌T/me֔q]'陰8PvK'^MfP/vԾk7Chl+4@ߗ1˼@HxJ4QMz_լU^AtDQԑ=_A(Ϸ9Tp
'[2d`W7P`bu=G*CFLq
o<80{\ο wTR'ɳ%c#8dN.LJ]VD|6Uپ?~R|lKK^h^bO	d70fXnT:眠bF-[udEŅΆ笺2+4tH@Hd
9.'[l|My-1yƗsb)b&
9רvBSLm59mڤ;EͦƘ÷<]oWZ#ifW=	T*Rhr[j/rq*GD#{ZLfD~,U%D^3m"`#~xYZENOf5bbp%:8Le`737ey	7z',t'6J.L]jn0;ڎδ^_}L5tZ5B$[58l1??]
v2He]VﻱnCò=:S's+ƶ0sޚU7ĦsӅX&Ճ [_C-&PjwDP־l2,T#sv(E'\-SXr1I`d-"@s-Ka0QILֆة #5<xtt0?`MjXxv$JM<oy&޴y8R=Yj;	7yfة$"-֪gU 9Pqa;ٳ.KHN-(tzzkP1}aht_Ru{5-G}v1]bdHBcwKAϴJjW@=A|{<pD0N	k!#AJUݳ\.Oq}	U^*āVKANT!P86~iϣ7U^ZRVǊ]<U*zJsy.en"'
79aC1
!]N@U?3cٸ-_ćGya# !ʅ)CQWv?&/pg̸_%: XVѶjzG %U#2O8{}1{;\5-	z/dfObb]}lr=u+[mts7?>c{
[c|(;5܊ɪE#f%/
ݢ?Cp[*r*nQ{^P;Nzr%41V	&_>RˉTT8T8uZTZWoc?yG3TR]})/EӶ`` A	m-/m3vWui-#H	"OL[ u	gMIu_C;_ls;3w>0+BY};+hNQx)^{8ƣ8ǱY/l=ËU<V!׀e1ĹJtpd"9lyb-,|VKBje٤HVom'<iҰ
@u*%N"l%Җc\fxl@[T^O3xx#޳{?!C-~
2E 3{M<qRqYa/3Iv `%2:O:RjU(;
}3*Li~+=K}`%r1FqACN`ra*\lBP-#;3%l܃G>7ŉ́U,},y$AhԠh9vD	;>[u&.
@;cޝ@b;Cr}i !R֘Y3:#nV׷yn+I݂R2מ1~nI<z>r&;/*6&<\/oދse}=?Fvҫ\颊"a۴_]4lc)a:▮aZ~:do3oـ-UV˔{'e=0]c@OAx	.<b EjiCݪ(h)_'?f\T!2bI\+#.a-	T)l	bK?/(_u.m$tR+yvJ7jˈHNIr&"l#	ioU$Zos+$	Ҷr^<Md<JP%d+;䑻_1bp0?-z*L͝)TVLvddysK롉"|D;lܖL53.!_o=BB4NG\xBi{{섔yϐv{*5o_{ZkTGP(9ӯl3)!4p@5[A#4)2l˞myCgTq
@{~X5Po>IGYF>c*G'[2^
!h
&Oj椓w>W:V
OEi0=|mOVA]Yt" \{95jzc;)+2)jFwfww'l0B|tƞIyo>$=	SVqUd[)+7z	Po򩽲֔2oB):do?'4de8k~y}|۩XEz[l]mv΂f]Am6v|<B6Y#g,ߎV;j?t+c5;K~MYPT*x7jlLhMje	-vlN)FCV<ئLhTm!r^$EMjY8.j<D])c)Jܬnw1wc"ߖQפ̵ּ75sjނe:ޢ}ơ bcZ{ĀcP - >٥O/WZ=f<S*9)'7_\)8NȂF\Q)yфz_]:z	uH
R	3>nچ[t ,'&7~Y*+]_A\ɂmҲ/EiQk#/j8w+8zfi<*CLE 6{KLB˒<1I>QpNbPepdEwozQHW]r%)yP^)8(H0N}Jlq'Ώ{
}ǋ[awE[$a	,D{X}]Q.	D(b(
`3_1 ̳2T
7ڼ23ٞ<ԯ<r=H`}^%L~U%N!yw\ǣe/1\i CQ}z&R6qj,ܳت!AGEPw$ҋE[[<Yp^ǭ_
,].͊wl	^~geZF؍>٘4!+^IKjd 1+)=H*rHЄ3 3w.2gᓯ?O}%&^6,o>&
5zɿ|l/ݖ
k}l$YcöϾ9[[~nTsq'*
Azed
U'z)?9{B'RF-'q+w].IArO{'|ޏ%P"Hb(\lqhNk0J{an2lz?{9|Wqt{ǜ^NcJߞW0BHW^.bO-[2ǒ~l+f7@-jE}[Vc%a=Ř?"-d\(v0Ҍ$Y{?4LGRY/s\lzƾ-$.XU8~Xf?gk1AS7ej'j U:i WC		mhyб-@fl9̡RŹMt
8?E\wjg	6Gy/#C<Ɲ9ۜge3xZm\0>A[>#5BMWG>u@cPL:ւ_E*iUrjEs{g(9n%qB[}!XS,HcLAe' <A!FY@zH&#m-lչ`BbL6/o%Go@ɵ.O2u<s,7ҼH@''Vo\.Py1pw Op# µ䧽~r i #cLJZTgJR.!p7:&7Ee<t$pM.J%ziRP֠nS0UȎa+tk5+kWP?/~`yE]xKkʍMZo.7SؓzeN=C$*<a13U@+*iOdrm]d-*9B($\8%z~ u'0@=^ZJ/Čƒ[9Fk=u+vWI7Bɛ\$]G=¾ܶicLϘٱ^*BD093O:-GS+\VSe'#ԸC,ܑ<P2sYHMpjV<Ɗ1u
1sJnpD!JF)p#@{ӥl-JeW2)_
.qR$KԞI8̗uc&ămO1LoBt隳+0.<X>o=#-9AʇyXKQoi+I<N
övCZdfd.XY3A5J ǚ0;e$A}{r]f)LŞo:3ڪ06]NcFH ~aȲNitC07e`=1*w8b/oNKgJ@8%KD%wź$*Hpr1S6lw`>䌭ݷI

.G:8'jn|8ŝ||%e.Sgsi9eTRwa(8r禳B9΃J[\eʓxQx\{32	3NF"Lc:y[n%LJnfUíD~uDr=uGB?"T8RTy	3U4	k^3%$RsRtTuw=Bzssb	b6,HgroVogfQUޙpmϗdBVamKQg\iEJvyR
r"vk|ڽuӫbn6WfM&k*Txgfڣ_+'0$ƅg0j"y&RɻAD<"["X
8/S,_*!Ԓ\fl?R]B_\H4ϻ
R+9]wJZP!bk׷5zm0͋ HC>4ߩqL2O
~$_M.
 6O:NH	Mfb(ROD;1ӑ[!T]	&n
I[(E6;.$k-1QfÚ"*h(Բ9(_m(md/	{@3^A
Ppo5BڲWbbMXUxs|Do+M$Jɗ\~S\b
L2FŇ
K뿨<q{Q>葰#$YSVҢ?<]4E@|6b]pD4)my9h[+Jq]&Ir'Wpx#vslq:ll)-0*UU!\^*(jvfM|kȒީq.sF_sKg?vMi̥i('+v^gV8 i/R Z-mW]>+԰ &^y4ti#0z3L~s>o/<U`%OE.?*887+?4_zޏ>6B

QS>
 ^2(,r#a|ȎGmo֨'BډoX"P4||JO)F0l%}}PCOѻء
'B5
d.qn \&H\gǯLr >x+|Kt̫rVe.!x$,
oS@6f	L!.λR%fȿ
ǚ^蛆IZE͕I"P
x
#mA-ȷOgB+Mcō#e"zu=ftqVal
~rcU4<vA{\#<WsI}fM[1ʖNS٧("!TWX&i$p\x7.kV6ŉN焷E_	jF̉/ ̅˟yGE%gc|GVއhoCW]asH>?+&]2qPw~]&x5jcKW⋇
r޾_'<aDL釋e9T2"޹m5tg3x\ [4: ͧs66%Oޙ4ͭ-c`':,uOoWERHz{ՑTD솆,{b}0hѵ+ͳC?^ $Cq~䐢,̤$'TV>K(@[ʷ'0Jb= (=LUD!_EԅF7~ɽN"oeЎDNNtAQFFq< [ ;k]\C8vޙVT[؅;TGFm3^]39
2qpJkB}f1*9xпfJ)iU׌ؾ3!rSZ!BAS}B3.漨ϯɯx
zJ%nJqqh= ]~N;xӳ^oLO{ha]jEe4-1Zbk8i7vu)	@'{Hߡ4w+.k"ԃ3/#$jA
	K%[&
A\{DT:>Y
wQduP4Y+̮lslV_ cdeMv֖c\l}87+hYi1~N
T9ۆ l.f]w|=816)
Cl7@EጳyR915ݧܴ劋=X<qZ,DvxӥД)Cq`3cA-#t--voiOb6!m8,7y8E(C^RnWf~	[N>d 4OtE8\^.8jt~3GEf"U`Sz\FܰƱZd{6JY<^_'ϡi=C
_u5QPB8.K~r
=`q_JQP =5 HCfZDбvtZ\FfGR/822ZvY
Q<S.e@R$^-"50~'D+ƃahE~'lFOcInkk: ^ֵX4?P^q `\wV{|^pEkW֘MZ"XL*$r]T)_EL
GI2:VzvRn_ۢm95=.~P~Dg=奪IMY0dZ㶢PR>YP~ߜ0^i	k :Uwx.RU>K-ٿ?;WJo4Ѧ>^_#[6|!Al]6N၆HV-uq$ٚ0tHk6K-qU!`@{u2&p:$l8F٧WhnKl,^Hs6Fr:p`B1JCQ=qt~lt$;J&4{&9H>un^mBnD%fׅ(+]Q_Pg ᛜGQOXC홱EM80ნ rrڸ(c
c2J?/m#;=-h5 {t=]ޅRG|h-o@Re7V+GDNJCj3@6)@f|/L|Ч4}J-\nXӂ.].	M<kuC
Žo<sU*T+?I{K1#Q$ܪOrfJXޛרK=Mi1zX,jH.ܤ Z(<t璣 $fеލy}lZMY/ _K;mnix[B9UNFt7$gp+@4,iGF1
-ŅBL+;#K+9ɖO2~'7zјN꒮a-j̫:dQd
#0U@'0ocQg7;v3kZ^_Fx=7uKp꩹( cEv/-Lu7l+v"n\%TC"	2.8 Qµ-ľE<pX n:P^P)x{}iީlθcݓ_ǧyjO@_Xex!jb^AYTn݉G>iU܋) 1zb>mKhGYL(9/cgd'Ի!
4022r6OLo ,=
[1Pfѻ"JX)
嶳av|4#lSBQ\IWAqO2Jz\Ce5SF}x]%&ϧSzRsS$%29ywX6
9.DP$Ł{ԁL
KIJd˜N!
b/=ۢJJW{&?xJHv^)pʥWVh᭡3c9gb<y"mliQi7O%5tU2̌vcE
	s=hٟfI+j1ײ#[p3Aܒ>f`tϥ;IaR& w{qn%jҾqhf̲/1xD7}"9a~X	Ur59{j]L1R2r߉dW]lPQhpl%ц=?MXHEG'AX~C^uW+xXjB3mDq=fX&,!Kr׫&1!WՙX',I 5|,ڃRG;I'3O*F#^phà[v(v)Ml-KZNn@­,^e6~U"a

4U3sX;0߬I}ήnKT%ƦRKLZLa
UZ*kAZ\8K5贬[u%[vpk3:=>|kt tnATphŞY:kP~zƨOA5yWfy;_k^VʜϾ
e%}G؞wٵ)PJWp\_te.S$& ftF.,Kռ"(O}'_rޙzVuff{tX^_袟n&Av 9J׮}
n{'f%L<WF:]I-rҮ;NTM 혱4Iu0C,vU8=f5QRJ._f֌G~+$Q?֛6S؛b\[sz^I0auW
vW>V0?xd{7yD@kMoqդ{d+	 8֣]o+}l6K?JkO0/FX7W9*ѡxDkS2'ʞ<\!X$u氕J$IxZCXUj|^R
!
6[r_`7Ġ}1%}L/I*~Q>~DsVtk?I&gY6Sb'TQ'_vj ;<}ZᖣH':ޅ+n"l*<~C=USxE~
fﭪTT?a%W݃uAu6װT`*h\FĭΧ2GqEy^7B'8)H<a*6Wà8"Τۆ;QBT}nA[jMi^)Hh3&C?jAx8IP>[țm4Paq*qi{_褜9ӝRiv-wFXؠW/:jεTD"2:kt6k 0@|҃:V35O8V 3v9ю˜vMaW^MkWm.3wK~lbH8	f~fmuk:EtYQ Ѡ(!}'kPȬ#ZlYe`XLe ;87D&x.bt0%F)3#fXH0@ұgug""\7[ ax˞O90SJ*ʁw1Fxj>y<F`yGBl/~}ʁRJ
mJء+
L;9͈KN+3:GFr9O9(1<^[XVBqpfCt|nr7JmdH4@%G8	bREgG'ʸiJm>gFl;|HMے۸5
FFXSZ5!EzZRIF,gpT"eӻ9S/PhY `AsG$w0d
I,b43o+.<͊:j 91#z 4?옎4s3IqЁv	hRMPp֡%0$ـ^/O{BiL$`W.{(ykywPKTVCb%K>.HS(:-X!T<]r{50^(OQӯ^ǒIlz5Ŝ`wbwy)ҿ?OҞv]enD/Bma:=p?e#	$8q]%h"a&mtЃoYoil3N̻"甏(Y!ҲfFpT-h(toY`7i`|lǈ'pDSyPbE3Q+aJl(Lώ١Y|VG* #_fS(z;b԰>gM
ej^ђA0A1OY&O+9lwz,]`S  '<5~$89uՊަA9FchPO?k:`Pc5YMhJftz_v_^TՆ>H$qgp.HUy%}D^]$E0'!![k,Kǌ\'@M
Lч	BI	:&8Qv(X~A94C;EP6aFb }ĀL("&|+b(71.2ɧQ&$"a#zB=g
8fgVǁRIi .) \DCoYξOj2b:
O0zCHf6#@W,:~]~<:[8'kۆ*Oi]{=ӣ
"#V
IѬ1[TiL]bgMR?|B-=\9YӅCsYE+NJ/ I`hZ]lYn)zjn<zؓ>ۨMXBJH
V!4	
L 8T,O#<3K2].oxN
$f4XA?&&znΊi:KGkiE2/x`?~Ǭqh^0z
Qnެ?P(o߄nD#ճi=ݼ:w	ޒu9Lj-zJA  ۶m۶m۶m۶mN^l9Mly_BO볦7mv#Ps̥	_9`u[5X&c6 ㎺֒gX2eٓ H;Lb/~[A/ořxҩ.Ѯ5'Tt=œ Ǽ#GD\,8QBN-詟<|Nޒڢ~LN<`VJ:IFƌxpI >S, oX }gI\t!]e@lh)p1:lSɊwJlmgb4²Ikv$G"@mumx0
djyD-lI	aB,B2D
#ݡ%r[$\4LC<l3lF.x{\_:1Y!u:т$٨Z2`+(.d9Y}+xw=2ΏMwZA5j	&0dNyn(̱\.~蟘_B"aSQkMo]\$<c~y3A+V9b=C"ˎwH4U.G	S<[~6NYY*z⋹@5,-<oX>
T7HqflH/5
98+d<[w-Ibe<1!f,#9el
9_>ra^@?s*io
q[,+(;Ÿ離|zpD <W&ϗBƙ ѡL?^)l;q掉2o'q1.RfBsbabD*D#OԺY9FH5pWco]Ȝ<^<}0UhK銅ۋ촘ٟPt~:r~`s""OT]%Jҏn<R~~$Lƨ	FDBt.Bب5&.T3*jPnċ&ؔIv*'F6mI{s=YZy4T1
A}K/UK$$5|y /Bm`BO
{D,B!KZ?+O]O=-ߢouyB|	hz&4 k'(ڞ"`R&-ph*8$x (H2~ml+di
E['+q}/^[ǔ5ya>L%
uE2+2@3s}8=f&Dvofe̡sW=Zx!Zigm>& 
m$0`W,!;KkaK8u"SKӵDV>auǡ`!S~W~>_ T)||f.Sa<:
J#]"[qb9JI1بVW2Z{(a,QYa{<ӳ]84"#ڐ^KO.zk˂uȘq ¯<Ib# @+(l+g0\e'
q
Wl"*:uv2 ~(D[WOj+1-ҿ)~zi桘痝_`|ƴ7URۿBcwwFcl0&r4vY$"CY\"PO)?]
֤g+hGis0]Ir'ٕ<oac "Ga˟`IhjlGshSSanlٝ>Xh͏L#n4 GEgATz違mD;׵1<Lq~1bnCEd%ccpHJc"&@vo0J3I%!\ho9N{VDB^RAl5)\ёE r=T~ӲlCr~}̾ĬQzLxB+`Kaj$6Qx@.^YhB@	<߂PkI `񐌏a<︃v/Tr2z(mnb; ]>܈Q_<T#d3Tѥy0Te|Ars׮=rݓ~'Q|U'A܆o?5FǔsBB Lt2[c=cm4H d(☔tVU-zhρ[><k,76 7
eCمl' PyS(\e],Vq!$g	;1Gc#!>;Q2^oj}=5{߃_3D^-@'nҼ@6z]<(rsFLboH?n@	xDWll6%X[Y:pМ5BAm$yVsk
u&@z
w$YxC5|l4[k1gsi
`oV$w{*O:U&2hr M{ƙX//T4"	!m+8@fG05UucTj3E6%WCww҈E',D.&ݑp+?SOKjK W7>m}&JoiH+bT= l@\763''A9'ԧi![,`,\ҵ0-x2G1wVOҡ99]N;,dnYiGW@'&^u\%יVnMalBɱa5:Z{gv%Fh,$ųf>\[if^w>6eP49^cjO%W+#)@ЋBM<ZtIɛH;Ot%U#Z[GE{=ڬ(D'ԞθDm;Ibj
݅ycE2SlČY!/HѰbFr Ezg]A"c@1mPM%yA	G+I
Yj_u17gUϵ`DDC+_,g<%<;l.Ws*w<BiacA-w'/v
ev@x#YiUnT)iCNIZʬT<ez.JS%]2GlUfqL5WkQ°w荈ܺ/Ev!hwc מBj iU:kTi	֣(!^0ۗߴisΝ\_5̕&*slLprQ
,B2h4t,zi&Ǥea]r88.?umy e5\6!{SBzx2Ⱥ&
jf{3=&s8HcU3y
xod,Ӈh	e 
BMnFkPL:i- V)2?9 ,u4=i%w~nPP(ϲG-S	][`sJ<J <7<}|h	C.9+ L}(9+EA>H=t_4B[4>pփ!I#+bFpC|r#iR(OQ4=erUpMI˵er>SR,;	}y\^h% @Sf%C8;;nvp4<}f/p-Y(aM_/$2QG
sc2"<,WƧ%eF)ws_fvdi%Tڤt`6D(z`6<S/zi"'lrԾ^5o.dO=U@P#B~﫤geŨPJ/^T6ƖQȼTNVRnܤM(,
g	V0RNY_/97x"o*{G/nE$J_݃)NK0RIFy2˵iUenO&|ZbSnXړ+^'KJwAo2"Ʋ;sr;1+ |-)ңURr|kݕ],2\SbƞqKK*,qu!Cl֊}hmڶ-S)#e1? lP6$3z3[F[tc#,ua$3VH-"sZ39Q |#S q\T20EB\O0/gCMX[|;C(U, S$E>k"]-c2}jf^*z`WnChbr٪Q c8߉>rE-`װсwosՉΣ\ 7~|1@7,{~׵ԣH|C2{6
%ϱ0.7z_2VXRx8|R//xނ|
,y°I.+̰Eriw.(fpPX^匰J@8JԌW^9\i欲-!bUXGv73'}r9[Bf^<E@Cʼ,V_S7F8U`bjd5m2HL+s?V
ђp:L̯Fܘu04xpǗ̸ȼnL8-LuTaaSBJ|]%קyf8PN%T<iN.h|
.8`rKAE=g	6s.@1RH8\>f˾a>o6z~Ң8^%ۯ9odnpIs\<zDN$Jj	jSl
y˄'{OGq9Vl_#@GC|e0P(E-h#3h@?;O!flݟ4Y\hܔіXw3kLUxJ((s`?šGպw{Hd};X(3p"]#uM{
9GY-H 6Ӊb5r9MF	2%d[%jsl_
ӊ="YQW;@"PE OL[A-kE]wlotևm*Mj<!wl<*`QVkF&h̋$M^7K#J{v$TdǍzdfZO=(2g_a:<F %gMK8-┣[|hɳK		ϣCfoA~7Xx5!VR:"=6.NĿhd
b6Z,jvPEDop?i%юp܎(UVpw3	 kY`ό.b䓘m`K!fpWq}
^DeB7YAJ~FgBrkҠd[7Z,
)OҷqMrj٥}xMhY3cccv|&jtrA8D8<{T1&nv߬RQwf-u7	νZQM$bU0L`Ӏ7JwB%L
I-gTu("񦩜eqRXc5Z;aC͹Ŀs_*%@W
A\󏚙8	<osqd	:t'Y^e6A_+:=1|m>^0\CW,Ϛc{wXBW6Mn$#"ҟ;CĿ3C1d7y@hQjfm	-~8w0y[>BrwM`v2!2  ?!aT/M7nRIq#$ЗĦ^̆|)2k3KUz||xe#ܻS9|OloZːLCyD
#Ѫu<un4)X62*DQZJuZ{hY%=ӥe->]`Q<ZK#F+IFc$rtV?r=h+Z|zf>X8CffByԭDjnʻFgC2 U
5wJ&`g3TZ&ISIȰf[sN4qIwV/ʀ⼇ʻf+hPiV;KʪyUم"[TQQ/+@("^)+/1K8W%d[6;"|Ʃ)ye)Aj
1ݍro#֯̊_r%Z	xTh[T Ie=y7h;}eNAƂ97yԪ	|% bCxU%s8u0%Kgh<)}i!$uޘ;34BϭLGT-Qt 8&R;x$ dP~g֎Trwe3_"(u	#.Fj1f>SoIR
+ΒmIilsMw	(Eڸ]^$_<uf\N68٥pʩH5Y
_l-S{F/%2bhu~5N驺cڂ@0.eb|ZmEFZRp(t3=]cOD$(-&IGZ0v?Cӧ/%)Un"Acg+2\#uQr; 2*|h
&y`DޘHm]N쿫VzRv1;>rо>fJw	}8 ԁ.dL]~Wa
iGr94k^̸,ffobq;:٦3x!rSlkM y-y:^Hm}&g/[i`3<QӉH]1KVpd	TbX#6]y.D\c!>n":qV?+F(
[;fB&D:-+E]OƇ>FTy
m(mEFK-zwA:JP <`\K5'&PŃ|P213SnR17nPg*$#
'-SF3IÈ8#B+JXYb%kѲ=Xl[
95V~MK͢c&
{QrNBl?;Q9%We똪>K2@;\7Up	лcX;kriޡԝ4Ik
*)?ɿqsSEr]
4EP*FaOLYRQ>uBJaىjG͗L;ݠ8nCYd$|xc+ӯ=/]ͳ6y"٬ŵI 8?$	o]QbYU"C%|*]J'K3WIIDWEqIO<B

̞'$ϋuKF4SdrSXk39.6wdV]|Yaߛ%UA[*̐\VA#]ׁɺ1UU#~J,EΎ>|">`l;,ur<':iS%ytU5G&Y-' a$Q {L^~30JI+E5
],=FuUmN_Je(XB.7	jGYLqo*h!kT89L_Qm#'W-@<[1y୧u_Z݁I]{7vl{m7ғOeOx-dO5C"$SZ	O#'ǻ!5dg!Vkԧky|2qoV+SY$LQp,Ŋ[č~t+.!TZH\'7XE<Z!Pαnl'whmI=5ȀrҚ`x[3b4<ӡgS:+"/KP^0e.;2	]Y;AtC;H4DT0K[l
Q0WMe'f
5w1p[?F#l%h7WwRO̹$Y5C})%8'GʽO(MU zyyĔ;MQYkL=p$](ӽl}!,&y}xNށ@U'*-bDi9H/K4S̩yݝas8
lpmc'&DM^PqܐA$qM'Vt3*F:%װڵ'tжd`Tד
̦wꁃ'2oxoǋן.4C5b$UQp;,W,rQZزI0-$|`Rd&pQx5q
BL|@JSF_a<hay>39Š˵|DRe-=N6.ss̗}UIDr+#:Ou%a^
d#YZ[aJ(&74
N(8ԅr	؍)iNp>NC{VmQ$?lka&7CX	4gƷv\2"
Tb+8N80d?`$:BFԨ
b8'!]<f6%}'4_dhюA栝ABNDE<dl'2:c"LͧbX1L[h=	FשJb%g բң^bi6gA	kweÐ6G.>F+Dc# u̫zK φA41U *=io,"[PV_.f9%@ 
,+Sި7%Γ	'7	PJDP%z_J;+GtYrHR-k2n!Jx5l}^^wWe1iʇ{ir7Q
mY441\NGsY_!׌:8D*FBQ޷/ݜA:;<An;*}ʢ:
? >΅o.pZBj+}Ȣ!ؖuh]w&7tػUnF 
5	<6B=aŕa`GbLxM~!vtHAHYLM,m)<ǴH4"Wu4iL8}"*NIi+s[iF>%r)Fu-ffٺx
jq01ZRS_6tk_qlQ ih7S42VdHc.~$M0q#{,l=UuՓKY7؉P'fkQ}%!E5Iԁ)60gm~LF1r@_>T7CwlRe\J=g(iӁ%PA8!02YdwSr"c(%ϵ2h{ݱ|AUH0[4$dr\?/9a0i[2PmǦuoIMrG
n
ÈvkusRYAi`qSmF>o~pm
G}TiR&n_;,Cc
hnlnҁwT<3[(	(xcb8tu3DrMC]"H6ɃpF%KܯJX5VMVAp{4B`E|vIq?qhc! Ѫ&?v$FT C{Ck4p[s7/
ht7f-X(dߢN#	LZ)V~ (Y.P;h*Xo}0Mhi>:[,BFF{Yc@lM.._0tD]1 Avgx\4˜Nk(W$2|BYU3Jʲ	 LOρo|WMԹu	@fD.zX`s2k{~2+6R| @0qcwe}yB[0ě6	\ъ|u̮dBLSiĄ\`˨Ǒ@[2vwlaB~]k#\HIfׯ7ұ¡ޣ6'[#VgݬCm
$F6TR]Ǟ[G^Y	n{	Qtݩ8g0d<*xl䓇IVͬjlJ@Gqt?E ߏo7SHS79Wk?
@u/h:!3y2$'qpәW*%bh1l=㼵putWAG(U|S`vjp%D?ڛ-yyomou3;pH1<Q9>-~BIM&fpSV/dhXD[ϓL3
xxrz[mУT&@~zo:8)@.aN]_$q.;R}IYc[)1cbL99Eք* Rsy=3vh&Ԛc?f;D{V< !H
E5DUZrV|Kހ\g]þΦy^y&X@wڛ:*;W܉
Y`5o5xkkkWS9'b*#iEHQ䑩LºBKcӧ,ڠ*I\tM!O~3bφP:6d!oĹB\cA,#y/O}U aPL=lv!?!6
wp*<%f8~[gj>h/3R.9R60]cC)!zO<rPzON}^Zr;ĕ%ѐZ0Ss4~mrz?ӎC֍IX+y38?]:+y=.	S║E/t*N@R*OH}m&.M|՗_<؟~=޳2E 
Y6tȓJ\>JTճQX=Hq%W$8ԥ\3mb0U?%pZ#z[	;{(y@_4k+
qs-(<mdolk`ڡ\VJWCh*KsS} m96UƤJhbGm*)e()>IB5t%L-(0c84u_)^K{c	>~v1I)!h}c<3zp71<J_+.m4=}eX@ȑw>nRļ4qt2G3W_|\璛@uZ">m0ksXW8)
Uy bksu''o4&mn]?81yWPHn1exko뮓8pyKjr.(ZU,%|V%^hܔ~'ikG<OȐƴ?
A!'7W>8Vq,hJj9@݂rwAiV73*ޑ[P?JEQU7=$7pBRhk9SNyZ;iK{f6$$S02G
864@i(xaD8Du>tҳ7g]!RVq4T~p5dp<3hܣCJt]9	vX2MAΫB{ˆI䮻6Wr"ך2Q vF$-&kZ] =`?}H2^,<6(ƝZio[OrEda^*=:O?2?ϼ5sioSn7%SteZa
HVLv[-̼O؄Jz*ENHVRbX\Uľ~
>ZI)>	.7oZ5|ߕ	
{ڽUK:xo
՟Ea [3&˨r$zO!u:	ݒbtRD߂5n{l-{@SKReVfl"^5Q:Kyv<G~YφϬkEx|J<=`ZO"Y+8pNV3@Or:TPAX-;㠷s;xۻjr})h~-q ^{>yٞ523@KK,x_A
TRGhMYQ9Xd[r\leNclt<uN#F*IvVi2eAONwd?dLJھAieo҇KbZ)B>Q	NL6\W	]v(C˨LdTrhĔDkVh3Yǁ(m)ヘdƎ/3L^df\e
Zr\q(~x%?}xEY8:"ɿcnisvdGx*4ΝIs̜t9yZ n"QL_^:ۓ}m%&k(<&a5dm Ey݁"SnbC/y[|ҪˣbOu'x1G 9h08SOjq#	V9`
<a4䳗s;
oa؊ <YW7~uug_Z(*r:u6ڢWsV"r,ɤ@칩ޥNk]<d(vŽGlx*+Mr\4JЏ@Qw	*5\4@va[>qZJ'H{Dx_	WUo0<>)qdMxr
8M4(޻|hLI
1'l+§k>0P"s"DylvPڹWdo^:Bfٚv"%na(
Γn`
dWD9!Z`>hPqδaS>Jl+kQѨ|fvOA)0eC:/zAS)s~(\83H~rD4xR%.dUD$:$ZdPA<A״EZ
$ǎE927g KVVp)mѥssu RJ] l;,,6]%؂]]]R(	fGovyW(QПܾ릆Jlz[iL(Mg(-/ZIДP
cFv6ܸ1 W,D$t⧦Ol<!8_ t,Y<"474/.mZB#+9ix)¾\feA^\.LJmI{BV>6nw嫧C
:yˆYugʃeQc^otH'*SHj\jĕlOi<cs9\ߐ(J+zVhhb]W5|0*0h,VssLT%߮iEM_xN{m"lf_MkiP2ŕ]x^~e
Wd=ی+TGy\P"cMa
+K~&TGϫ<u퉬fXҟ]1N#Ex6ۉ|(ZD#9` m!,Pj3(tWlfbNlhv:/jW	Yi>Rgǥ:^I]` j9[TT߁W&'/&1Ag$ג!A@4K4tTTC
+nGNp_ft8GJXwkQI
GMrO
;UbTV~ο+ѥc\W\Kjlv +KR=._ö$ylcj&%E$_@dmlܽd0 uloE(u:SI 0ckΉJӪ{n@fŒ{f[1S c~bcQ	t?~8cuRK^X2nVIƦōnzz _3)f5(U?)9ja_L'Ub*v?"b``gf븗F!JOtO,ɪغv3v"k`*S~2 "1gN2ۯ:6X(V?|zW׮ 7ۓybG$Ҡ_e4RqׂR΍	V}iDkIE/&l
SLfd|*^`>iN_Unh0/W!JiXp-k4R:telf-[,nZٹMʶG^{Oq#B9vΐ+o2Hr+J\^MHZ3
<]kVz	
9㏛Xe%A紩;b	C(sG=z
<?u9 \U1v'$4C2w-[)ϢӶs4P'tI~W0_R>"X7ЭDf-OeSP.ԌId7gDSyS6P[T?܈$9ߥ_DM>^~[:5K|]x`diN$RKa'T"D{aӯme^ѠDlv{Cc?qm#gEA v้2psӐ4(b(Tzs:uM,rIcǴN6Y ު~>/^L-'X6l3y.޳\wYxex'å%+.ٞYF'h6r􅊗#-^))_Kc@UCpN=fq_dɒWF8cqo9{ σcoMTT،#&X똍~É
Z(^:uH}L_v22ЂPrǨ'3^tg7Kї.pݐl<v9Z'ݛw;/Ut|`1ZpAA)0A <9:V`+ sWIОV%=pguTE(aor7?jF,o/\Eb;UZ@+\xZ{+5G	$ ͜ya=쌪$-巈w}|BS\a{һ7јqu2j4&$tZoQa,N914AcpLk-x}ӪlI|щ,	"3a55~
2i)ʄahT5r;..{C}"?BG-|ZZ!A,
b
)_5ޤ;wqE6*jV`8HkwGG6wi|eŮsPtlP2soњ8 `з.X86WyC8~<ѐUYq$!g<2ùpْ
#?~_x>yIH8
e3Ӝv\M&Mu>ݸNs6Έ0o?=d:cB*W4hl?%ƉpXеƏeI_I%%&[`߮F|'v}Rߕr%c@|pmmcu	?n˜\
u}c|)Pט$_|	@MB#➒!3渰_5&H0LbD}d*Ai\J qld2$3H.|4?H=+B|05U51⢍8p#|׽}z?E(7rrsewfM,JJƼ1_*KZ&ڔ=ry|2;(e9v|l:,;RY2@NpRP}uݥAXrDY܂#3x$0J_ٗyw4'-˵D1ߋR;f
Qkkw \)C>n%]&C1\Z+ &ڜ3٧j^Z*	>
p\X,uݩ]-LPma['u>o;͖li{m	ˁC/@&N͋(e1>W!{%X)Iywm}<+
L*
q*>BtFX[^/dG|W،X
ӥXd>'S;3ڰܼ{@04yY\-hZD7DíxQ~;1tǷ|\׎/ExŶ_zTJMZmV.	ROr}zDA yn`=/qmr6 3rLqAP|IU%l=JX+#p/Ne5JL?u{3TM,˫:s p&9=\W%Xذ}P$sZDGN
HgJbimg -Gl2n{=GdF9tg^GJbyN]#a=̗[DIT"l-)O٘ip՝tTQA[+F[r[I}Չ@	an}fmq
wX[qsUJ]F8  9ߐ\Q)?Lv,
؆;3Vȣr#<QւtwQ\UZy5.^iN@8yRf@ g
ZL>
I9rL5 Q1,]:WvOAZ$6v;d݊%?a_J |pmJkphhAoAӮ
oJeWj@zޖsZ~h~Z?.⼄Q"ۻߔb|R{C(-N;qU&-&]VokN	me;}kSֵZt"`EA%'3:CY6MPz\:Q>t<_OTLTU(r$۵l.2PޣA5:)%=KS+i?˻-CB}%ä cSϖD\TX)ϰ=7G~{>Mvn;\DSmWD(I6gmUBEFGZM0K!>+C7$Û.~ƌ X[=unQU^gzEb
MEv1̙hz甙xNx&B>wgwrI]~Ε3߆^5-/?A)Nh%E`Rs(FlКAGP5sf.ZFnjX>X*9״5^7R[ox#v"+N6r!h	aMqR
6mʧ1ڞ_"{'m_e(*o}>UO ,r)69G]54~ DJz
D
뾌ZiӉ+{IZ6fkƶkM!ڪ"zW,e̄V_a[UH{Mq#
U<t[	O5[/];|&jN?syJ|#{,PJϡ_U2$uce&Q1@^{okn=3sG/MCgAzęǻ{4Zk:}sn??Z^*C̫"40Iyu
>l>Q}8<Σx Y;O"Q@rt:RܬL7}
Ϭp'	&)}!pt׌VIw왏ᠸ
kod{EtO2b5^s0/	u>)e.Ys ת?%d}NfQ
<zVրg+h!1]^eK"@%s>qC_pN_</.
9jBnqH{E.6ؤl"xNBEgT 㒖F}N>g
Z7fc
*];wvE0nڷ	p8-pIsKրQvHQqhּp Tjqqٝ􌯷M^
\AͽbcB{}
{ԅSJ/t
P\nDUG"QӌDG4Y}+ג;͓YػdqFza)Π'߰*AAJWRdğ{YiDr'~GS.[a6b8[ۧI?~p/~-XQYǹ*Ikc$gqNd8z!YatQc[qz1<hru`avCݽ.?CjnA>M@FTB-#^xhz/t^Zߓ
ΟI;;2iJach,4M
q	eXwHF5UP^@cqN, U
#t	-5鳖.ɛ6W>*dbTU|^}nP5D׷u6VhQ^Rԝ,b!QX$7wV߻\5ȐepN	'kp|Y9mԙD=Cҿm-%y=1Kzws㼳EGّ:^v_!X)5=YB\K4]^|V7j]J{rxJ Kߌj2KIs%sF!ff9Ѡ[ǋ-R'U%k<&7?!VpcaP2-֚MZ~
eW&^%IH*FcWsuEcr/B~Lw[d:mRr6n&;~V)lrJzdi2DŗkDyqk`RķZ)׹B]^QjYPKهgP W PK    A             9   org/bouncycastle/pqc/crypto/picnic/lowmcL5.bin.properties @        	@  iKzpvP s E=VDP=BDԏP&O+~fqTDl8V`i2RiC?e*ߕ5sM#]>54
dQweS)Y/Xy"
r)#C>
ixwUs5N&SfkR/%8+Tm̩ p6ksYȚ'l
aݣsh%<"p4&YR}L4npѣPI\wy^ )&:E1i-Wd3[YL-EXbbaqgl'mBf;|8ΨQ30 WO-/8D0U{^~.ч~;1)Qq4{v4?w&iz@{]):ocR3Ip5lZBˎǶ7T7r67d$(`" sQ.l:gx1|~Hmu2)cjXbyy7Vbl,Lq[IjC3t_\u2|uSO
ŶES'c*eAauCt
M>l}(x;q g% 
Բ+qƑ8oC  [Xn#Hڎi7P
и= 6DԺt8xBQ#=ԞfB_2P&?u(Ψ^neyN'ᤌ 9
$\c5lAuL8Ht옒(t?
1t1]W}hEbIFșg~1^T,.mK:y;㉑/TbENb_b$7bݎgSˏC.5$YЩG{,u9`@~W&E[hM/
I$A@+)4 .L/F~#~7ؚ!d0|t$(88&ՊT5 Rmx>=Dt|U|s7oPS?lM=(H|m"c`NmzxOǹ
8N8JS /TP[fIXν=\\}!a'Ն^Yq=O4&,*%XX4hA,OODOKmK?)i2xG Y(x9Vz3G5yYe>"|h:u߇%1r++6KQ vUj8A6ȅv`'"I,Vܱ,ƋQa =V@TFc+z+q)\zm^9k	4#aP[<v|7i
r/x)p-%$,7ehҋ<ЁG]^6hLnC .͋m#0; 9Z@gN߁VK_iVCDqrM/H.E~vP}>AIgjǈ{AC
7zjFN:AKcm!~ſA9oj)ᢴFQ6jEbfxCápg$sy*9Kza)MI-Zl۝ag̀{u[T٤cʲ[èz|bwZ۽/f_%MvMOpl-ɋ/Vk1VEc*>Jytk%1l
u4cw-=Y%AElCw{OW3^v3Bp݅?upЂK_u3GR
op~nНz~):úe/6)ѹՀՆJ$Z`f'/g[A}x
Z>Th=`$ox\6kK{Ytc2OSYGbH zO[$Cĝ *\w B~w\!CjzR\	r	z8?֞'̣_eb-U͇]_ҷ.̜J 
Av_8Fg[D<Mf5]x
лVܛ@q3}HX P.Ma2!~__
ĵS˙yJ	J&*
l^,T;i*zQB{!"˝"$⬴X$o][ezB'u@Șݻ5|/-Gj}8$sf겯8mtCb 5n>ÁPdC]iDծ$NXL7RoZuȳҘsd2ϰ܄H+s-q7CP!zg:M.;&sdHmyK.L(ޙ=@ڇ+LCmaC#RŦ$}5h8*Mo&t#Jv|,<G,
R&^Xn۶JES9v
E]mעrNa{O]<^3-O5Ntc6¢cz0'S
OR|= >06As7xeJĦg^-cXz
aʢ\;Y+:*[%$R{!`D~|Sd VR6l+2>\j;<g| )xՀG|Y1L67 o)2Iwd/l)Ny	ɆZOm`iM5ɼƀL;&g?6hkyY)+v '3;ZiXߩG=烂:;:,7Lx/atg[	Cǳa-i!l֒g57 !E
=)QU)@UV{@?E^b.j!ocK݄^bW
`NFl,
f$}=fd#t8[P
khFQ*N^XY.ڱ,u^
<fsow
(@AwLn.!I9cdtt
:yaa2l\3@<u!1:b>.%]JmCSWzmYBLUF(+rl:5S֎s+ycOv3玶{?!VUD!xs3/f21.}舰>iVw/ R%:{$
ܭ;5nXumR3
$P%Zg_-ۼ҅QQVsԪhh14XW'7,(m
@=7S*OWzbe.`2= Se㑗"-oEw#3}Ntx~z
*:(ϒ	,6N7	,ЍvzPM1T&2M!q{fEg+'^xdSfi7c	ʌK|qKk aB)ú㏿ C.!a#SL#qlY
_K|0!5VBWSqqRi:a ՚pWOV9+	9}$ys\&DY|nFŗޖ&#	'i/'JxJ@:xw"'*=R	LSOM\zmVA+V~h\k%~r%FA3EOEy,G5uSfk%l4D(e ȎqB<~#Fufxղ6m.`#1bK]B:[<ih1Y	OspV(f]bf(1
(5%񅀞	Fo4 2x\kщ6RMQ6rS'E9??UL%[5,n<bx,h-@jHшɷbMެs
jf%{mafQ8T,aiĞx{ҹ'fY͉HHuU݁Ue'[dWdumbЌ

-,xs^@S|-QG쌳!A(i-*4l/vZ&!֣/ ΞrI¤f^0%ac]jjXQhOt:-\ʨ)	gV-V?,r#X=LxI/y9BBY$x8{5 ܼ8,a'0YTbZklГk1\ik)JvCA>0y^&&A6Zeh~^H q
s;ez2xTUs.teJ0ceUKɪ	,aoނ"m|:^E̟D萯HRxjv$)-ѫS,0i9dg,bCqIscy6u36-r7YNr>+׹Byɓ}~!	}}Qi!of]	BfFӤ]wP6Q])@#=GVan$$q<sk:vGFs@Rv^qp`yn3*$b<FxUf%msD՝X
6~!Aߦ$o;e
.JoA\Ҝ;Ts6;H/\-Х <ط GfQlcUsdPro%^C;27t'[Y@tKHg-9.	VsXN\GcWDPiZk
ݿ;(cÍ*C:;uu`)b=(uߖ1D,;=y[.xXbxP6îYw8'RJ=cĦr_ބЦ9)7M-{ѓuUO*˩2M.rޱc:I2XUu.P'-rlZ(x7T#Ns6Ue!KpPoodZASĉijm7KcϊN d=4,]szqbz'#%pL 5m+Qy(EDNR+Ik!X[/io+KA]QHYڔ'X28kNa UƱ*ύCʢU>Wߔ~)¦wNGOݎնq{BGO~
a|U?u+=um7b1C5b(kʞ9s}VW
Go$OxQWZ>Pe` ̞.?Z5ɛIA<KM=ױGXQ	:GƘ3i%[*=6a&F2Z&
Qv`3anJ05y^E6c/D%RCJ<0mdS)jD2IuM.U4k	dBb4Sc@T1dAE 	u[Wt)Ce#&4Q^
gx*Rime9*ZC^`lT:hA<8Z+],$0fOOq)3fqyXCYy,I??s֦&2iZy3+=WFsD?b*f-Nq{}4$.9c1j6ĔȻqU=e0BH{sJyph$%܈X}}~J+lӊz
wr
^(]vOʀ"&{V^xaw_	$1qs{`Hd\ P9h%p=&A6iP1x0%/c,x l#Ir`kIgnGC=\G&f2yE:*ϓE<֚Y?{Z>)뱛(	OzU
*|A'AT40gqAv@f-UPD.ߙAJ}W]i.)<J?4yŽ]M$H;MT]\NhIk/;Mሞ!5SjiB˝H!r~ŀ[6w"؀ n %j)H}ub!l@?1oP.(ZD,ko!@d:9@kwp{S+P1+qjk^w2<R5)ZXhb~`(b'Χ+N9$@[L~'aj:VBWl]VW=9=yXbO:`kMj*J&G4Tk~N!H6 ӧد\JþCk2`IݏdҿJaGO٧hV10w_ ?
ADa0دDlLNMWFښqA(<>ԅ Fan{'@9oH5+Ԭ
A1gxs].G;{^Uw;d8iqy5Y_DJE^N<@ {d5;į \ڝK"N4QHgTh
t5vFB6z\L{dW9x
'@*b\a-8+Km=l$D*r\I%=]Gn:htW^}jUqFJ$.YA^'',2B\9]*Ŷ̺F!ՃĮSjXJXL,-@vnÊHR՞pW/
Pԟ<8iˈZ=7'N.R.Y g;jKvW=A?<X`_!E)eE|ʤ`'Z_!3
]T^,']q
t/C}>́}[@^<` hefز{.WZKx+ߛ
J]ݸ7R`z9R6C=$rK4J=\<$M5[
E
o-kg.]g>Q& E%K7K  U@oY"9a\^X[܈HW	b+tm
;r^'`
6WtJyC
A-7wB,E"ڥ%㽾v.v+30PA]BK'k-maq@
un<pSWS!<Z\)O	OMVϫ?`mM

910}6VQ{UR~KHQpUy&"z%P>ʨg`8jZaFL`$fx	3%Ӡ%'E~PfWgKrRa^9U.TZ= Ө$vXS5ِҳus(3.O=U1l;z )|èZcWu(h}"m`x{YpL(BR wcbkɁ^
yfJsCf5je?`$x%'Xݬ_eǜd\P&UFf^jVa`G}FEaqכS$>k?EBc7M
˟qEhnK^592xGp;*zW;ߧK;BS7J]`7ү5t󒄳&D[GhpTn,\+*ܤD/C9DYœ\ݙKr+m""q@DsLú;X;sG `bB3ņ@ wvm[:vfY(rӁ7)L('4XڸM-B&PYG	A?!X3&&ix?:a:Pdj\%~4wOAQ`.wm9*%$`Drn%/E}*CQ>|D
CxK۱;Y#lp04F$Qseʾ!%=_,IŲo&;Aw>oݻnNx҇݀.Ɲc^?0JO+7*ֽT-BɢF^]oWm*	'_PðE׀y>=filp&W=]k"77pTy]*WyEH%F6[3ʯآ7qmQJ7b~4VNíxi>mY.a{ XVeqXy(J
#Q$N3x⒴͙7k_#Ȍs(*
F'pf++
7QHrA|_rh՞[d5Ȩgc;
;	;m!ob}th#]mi]I|z=9{?eȵ',z1&ªZX.TT4U\5/vll5IGZs0D1eFEI加R`,K
0b9'UQC
ko#pj,3<Ӻ0dYRJuD
ہDOŞu_s[r0=g/eJ2?0fYFF&ա(JMjIi%m߈BVmX(6# hDkUo`^(8xќ*}Hfo`UzAƦbc槅賏eazɠbxT9 Ē
DnMot0^);q5ug(_v\i!We{+	XSk~X:&& 3ai'^rsYoZ}oVERv)*Gy !L:j-k²s6BS^&χQ瘨zޤg x/&141mٹ.u^uW|p7yj8au\ʎ.[|pj}jCiZEY'SL52G{VH$,7'x >CɌ|K#6UF-b<n19y9uTk٬f.T:7wSL7#@M3
9nz8%i1o>i#z}@h~^8̻wn/Xt$C*HPب;tЧ~)(otJ[&D,	{{*8AI@4j}wD2p}c.[CjAmEaC+hR[ 87o6KM
&͉[oqTewJڳR[#HUHmlJy/ֈDOWUJ*ߝ6ԣ%_ΤLt7g)"+)BKlJK*3 ~ےJd{_6>Zհ@_dxEiA2(ҸrCYF--fزF Նg
6R.}e(
 })t}iFoɆIIbfre&=).ZX]xwl VS)gJqK{jϯ"c%VTMme(OZ)h0 /ߴ]tB`B)jWW;E'xM_n3N<"H:?ޔ[	w,7F)ԁ'-=XզybI޽GKEt S_AO+	W|A OvBR	~&+T4ĚV
:4qQiLv
u J{#eO7ູh~СkhbWXɢ]ƢXMX9yƚsyFYvHV,L֯ '8E;d|Vbǚb'acLM'6c*'za}"5%!eaWd=+ͱHi.Xj4o|4r<q5$p1 _gGbDdt(Gt,0uPF>% 3_n;N0<Ev'Gю$p-B΃M|8C#.9Yb(\3ب%8Ae4H5cB\	CM,>-&`pȶT=cK˵>}dYwe宴	Q/Cøcon:]
@߀${`hTsT6%tp%+J&ַ̮!-H#{{ Oh5>e(jvF~o<Ba.2<쁖y}cg橍ɫB
ܝ[8plV˶>R<&A{ϿS0)yX^- Cm^A"i&17̈́:Φ۬-WKժ	E s!2)w|
%fPӯkbZo"UzV5
⃕|Rd#P}AO,%7'V18Dppkb=j(dLOdЋs?x>MҶ=wJH #mQd웣;ǲV,l!8/	Фׅf Ve.e3`oUb&l[\stynᶬT|!t7F>TNki,l(6::H8-R jT-HM~gg}A0ėѴ%
}:ty
wB#n$Gl^nfxEXkT~W,a5DtCNl>ZŠAd=C*|m+E+?,]|LfaFwȱP:T\N[3@ViM4;Ls-@'Xeb
XK))tKL]Vr䁾TjF) T<}P;'v;
d0^@fZծF	33KV2;yqhr6g'y&Jdx#=߶ptzҔ髞 o 

G*Z*IdN
G
)n"/W|k%ۿX!PH+"
d9
x.v1m4}mvCF똀F4Ӫ=1OEHNM[#W$
}=
uC^z	^m20'._҈8E[z9?Zʳajw+D.LN,AgobtE};zIt\T%_@h*l=.^)"^S7Zi/dW>*S0>O}b4zo|}6W_q)$FtK aI.qEc;HmsϊK:]AiL1`yDP\tQƆu9
zaq\vH͔wHRcORW3Gu?Hn`wQA`|R1Wfs.%#aR|5$/͞lE;0\8VS</Y=~\AӝՆkph5H<wN/׬'q͐QtqNQ}pf̡}L}8rSbds؎0'+
#I7YcW)aQ#h~_/^dIJT -`\T&_p<[l[y蹢\BthbO+r6lD٢UG&`N;rbv[V偬Г寄?2ę籿Wwc,8$4b=AtN^Ȩ[sT0%#tJE&|ؾ,hlD-[:F뭦Bgv~Ct.Gm>W}G84F$zrޙi<mk[y}jy*nM&=*43]zݣnVDw^nIQLDٴt/&ߦi1}fu1'30iQkiGJ'	gwyV&Sp*CBl" ݐ,ߵ<[X=ån
ͯ.1n[
.Ӳ)#E ଓ]coe??#
f^L#-VD0K=ڨgx-!tp#L{fHcoȨ%pl qt)z'ca/3 ?b>Lrƥ=Tu&gJv0L5v
ЎtH@^-+V\JXr},*{,a~_a[;LBI^gymy"I~ >ptx7(ŒjA[OQo/MRrfGN&&i#ɓvǤ
Vo5o:%o7tt,% ސ1>ڳyB)UCߍ}Y/Fk!6À#R#sD d}<h*ԁoaׯ`WL
]vޅtr6)CM祩t*T|ׅڿa
S'XJ'PLǤ(t wkHMEN3kp"=Gv-d~aqs׌}G
+}2$3}>X)#,ftH甃Tj	&t>FJ@ʅ+!_*/¶TL'#|m
bqR[r0 +ҿ
YPgzʸt̲U	=3pVdw)87'	q
TrXk&*lU)m)mZu GY.
ib#*-ybՔFM>U5&OתyI;JGĹ7C⣢fԪqcBs/kq	).(@P~oUISg\f9gh(\m~_R6G!h?8Ȫ\wS[	B03:#׊?mDgur"=#'&թWb.]`p@fōk<D;rΎq%VEeeYK̵*:Sgzwi*ѾշnG+6G.3+QL'$6
ހx́SPu Bnxlps4$|5L;hE44Edx{X׋G=t>JdKȪdA
j%9COK`,BߊjnhH[NBر|u	,@l6&"Ĭ=NVe뙪@uB ЧS2c/&ir^'C\N>6d.(T-|Ʈi[҅pDc剞nX`-ʻ#q@y&v7ڌU*m$lǃ~04'-QT_~'B/N܉sz^u/0̕cxS5~3̩_#<ؿ_PO1-k9ŲJ_Z⠤{q`*G\?[rbH@dDB_na{]Wē)V;tՁAnKԲk4&4bP(Sye>ViXmsn?.6o|$\Wvv"&Ww@uh|t
,2/*= p-B3hV T?/;dޫ;?<Q>|yDd]N{)5lgGQ3wU Эת+E
=2ҿ_A;nWC<mOÌ_՚J-2$tfZB)vM}D!Q:e:DJwַ~򪻌0?q'%}FdT<DDl`FУus|XJ0Ak|pܹsC1u|#rMg
Ep)٥.s}%^1~P^;Y>KkO"mEj
D곏KAY7HSS]H+3QOtܠhI9o9-wI!E1wym
*5z~D.!."*5SmKk*ŨY*K	ƽ<(H25̨ΏQ,&k 'D`̝
 fw_b0-jܶAY;űF?FĲNtC\oNbؤ}_?Nј\3J
~!Cߘ|NY+vX/ PCA|Rϵ!7m1Ct-؜g$4	,h`H&rTČ*iG(h_ _)r|J
-:/eDt!Fİ^Zb
	!]{l
Oɠ^I[ܞ
4U'G"/2ջqiŜ6rUr>#;_L&*WrVlsLn"x66ۥPߢq]
UىR&g6[f{ۃ
"ao | ɠ1WIpL.62ڸYXZ +!(W{[+"4J҈97||ޑ!OT!
-Ujy#-BqzH7$VJeGlLnAm24<ZqŐ2#vм\y{]5eiT*:7?O5~m#aO;x:y;Dpo^0m\چr)H-{"`T5_ZSߌ TĘeDj]g[J:֫\UDUMŋQ"q	V[9qL/wۆ7Zt}ԌQv SS, YUB?(Fm\7\HFɠ"v"	4z$	}&cn55Z[5nնz\T~vL5:
L/¼}ZŌ8f%ozތLxeݧTlBv"QXҎ["iS^R#c`s"kjZƗC
v(&olXS0?.B߆p>UvwOpBjwORAĸJ#-W/,[VnN;4-22HCۣJfǬh0lC*dc;yJkhRDfaVt=OXCL$PC2_`IR%$$v4lbL
>
|Q-zN&-Tނ#|O>	^V
ޱ90ŋJDu^P[>>#{Ig1ދt9SOnߠ
boQG#t>Mqf/X);E{nݏjB+v-k*ؙ`)JCks@<#'OGOE$$Uͬu<Rzx?s` |J+eޘ3=GH2
zgp1@Du
&ʹ
܋Cq @3ZEoʺ) @_5b(xX4\]z+C2o~[9mXP;QD&A1/ VO!miNmX]> j?#e:ْ	}XCp ^| 3l_'gVls{m*٘\9C;me6
+3aqmLcoZ"^78&ya(,x):D
]'QaX^4xYO3lBDyW3yԍYQ(@(ߞv84p8H=eV͍~\*{fȒ.Q(FW#jͪ|rx2kr<+{8V)L@S0Vŵi@ύ1ܗ}eоz@*2`mLB&ԡZb#ݎ6c6B+lPuc%ks)Rshx`]B.XEa/6uQ03 :3	}n`}oE#g[U_R4
1)W7=OVܬYgt Do~bϬ$~$
|жLpq6Gr]\)a̜N1ZQ/36;n, m ,f<0S1N~<fZ3gOW2Ԓыzޟ|vl~.,Z`3 `z	+	 "9G©{zG0RvF`\5pqﴅm[(0ET`]S ;G%uZ[ѠV* D1G!Y-KgKz9u!97`> ?v WeB_m2"="P(b?I1;34k?1Bf:QF?V|zC"	m}#pKAW,+63~b\,	|+xb/ȀcRpx?4'hQlUs2X|`7+tL.t_Y;O2mF?aB4pԴQ'j|ؙlE??O8M
Y?MF@\cJP1Q}Mhysve&=[.( "A:lbzgLt}ʄ{ECR~b/j9-fFnHzKqc6A̕gHO(]LX)xV[cmv$_1
wΉu=ϮH ^[낦_-DEM̀wWn}YbmY
D$
< &ƳU²=&XA"5YBtzK2] !bO]oR!4zV9<7FSFZB
+*<{mF|
fϮY'],Ԃ'О
1̾6vN!X<mspkS^6%i6ȏLj59r<+ط[oX#O#-HS:>dw'ud9TڠS~FFC"JTm:~c6-f<eˍ^;qbضG©W
Vi-tҍ~QR&Y=̟tkfO[L;?ExEqPD:ߎiFm7(ITxQ
Mj^Y#Q^2%;C>◸e~isٰ|q=[ '\
RtaV΍7:E`UM)^Fگgbc>3揽_%S,֋54Ԥ!ZOc%f<'If|Xm5J0^g7AD_ζ89f`@~Q ou;\ N܉l@r"~o`G9dY+GA饩n++ilcwak[e$B	7'J'	ڰhl{Ip@5
*3qk!'jVF|$vE8Ew(YB/d1þE;HqK|c]>NeNFHUYކnb-5Ig-;L?L9>޵oqcjpF@;W՟I284EUf6&4K&W~>oO[r\s([ĩ[^˺)kx&*7ۮ_n?LĒUp
1G7ъ/_nb>^ ZФ^ G΂.1erjgBSh2|o
B>҆67-)[Ewk?({+}kll mp$B̦s~}UoQi o)kf	ftl n{N:lmd"FVw$˼S~j_#2
G#S
Iv] l09mtX̠L\%w\Eu?*-~=e1\)9*"{՚MC\m) 5{rZ)8 ȹtHy	lX8In=SMQ<pV4BFc1K?9
B0:omWhX͢_^`K2{Ɍ!6C!uQ`ад WG:Y"6vIƪK7.Eu ޱ{ol_"_;@FJu)|#+>{:YSBs
scL&<\˨3N}F.mܿUoRy'8Z{G5-_`OJ8TP1_YUs>Q}D.imuㆃcX
Y:eJ|E;շ
Glaq7ӅZS,~<0:rrWR`FFs}#ڀ*\ .NNl9F3b,K@>jU]NGu߫M7 Ū%TJD@kY:Ei'b;9xWdL;ԙ7\<u.XN?2T0,7*Ô)7fsgpvnl j^<	38
r;ۧmTs]uFH~E,Uk⩅p,^It5Prg0{=|Gi4M.D0ւc2{MnȚϕrrMgqD8P7}-['"?;Px]6XȁY67\ҸeL
_~D'6)GswY$$nnNyW0I7T\,@j?ns3tvgQ=֘	$WK*u#fx+)da3+M# /zv۔bS9>:}cB`}LK;>6Je%h S9'mDB¢f=)ӿ	֚wEAntRwcv@*0'_8
P*@>6eS*3kU*fђ
gYN9tX
b`k:+
HKuYGbl7cQIr8v7H`h >j(|pg$JF{!&EsXg5/>'
5,`v
loRK_#dK<O{PhLSl9֖[+`=CX{Qo!߃ӯFz&`fZ*3|(ZIb,I@1'#D#5eoWQAfvb˄"LX0tbJQJ>`YkR?}j}tŋx>7S4IgdU^'3J1RHZ-qGuo72;=HfFifZ @ZL]gqjM
t#iE)ߦ9VӶjSJ%/u}-ŧZp\r;<W9Nc(&j'UpTu
5ε؏ڷ)1_2GYyC_Lwg\ڑzV?CtCvb!O7$*C<@H	U|z8
xq>,W8cJ<3iwf<^ʷf46@ovG3XBI粙%h{[:Ҝ4$NҠkEJWڟT!oW^Ip+Iɲrt`e]ja6E%-AWwq"<	s}hi(PiОf{3r۸$9)cH[+$W<睌&$s!|c~\ ݚ\VRP!Ҵ,VVe~o<;stDwl@垫W9 +҃{R?
ta^5S\--LIp,t:'o~J#%JB ԥ.(RMBAH&mܲ\Ksxlhp}|B}`p ĠOibxf=K$!+Slci? /TQS?x3
Iˬh=7ejky(	}kar$RlÃ8}¸J _ghŔOT?s'MSd즈d<#s4Vƽ`#9jDXP>e	8n@\aui?o-F@94e~Ln117Q~cΐsTJe;s9ݛ,N%Ec=3``Hʃ޵{ga#*/p8imfe݈eMi!.s!%G(zNZ:׻z7DyNh$o#-qNɣQpPg$Y-9W\돃Dc	ƒfH!l:L󲐱k,v˸A_"ͽ;Y{`c|ɛHJ^*OwnƂ;wZr:	ρY_ZXC>KwH`t5WN^\lz5~q&K6jV?rlb^$y]
aJ:Ł
Lծ<<'wؤO-rC 3O֓觻Oo$ڼ86D%<Cय़M^r]zrLHAV؀"nK_O{Ym=/g]e잏;Ou=iK&"Co6AMnVx½ρސDhlFPin>)j1wNZi'OazGmT&@J? ]@Cp%){ABNul6>U9* b@mLNxP6R})$b_7'n(ݚlBo p^G1U5rqA(Cmx&V뢽J(s`mPx+2(V6L1c{f{[TOיP|`.Td0ܑ
f/t<U_#ZKb]|upm9
}rKJ.IX@aIHY
;N7
#f}@2VRybz&I` Xpl-@`Or-M|xfk$Eze}r!DZ*	0t qFǗv"z%zɍTa:8ϟYvۄO	󬻝ÄIf!|/4cgT05||saL>zpRe**᯿Sj [z5[d +;&(A
y)Fom%Tܚhsqpc@A[fG*0֤~f	/)p7t0FR	F2xPꐢCxm:BT6>ҋЛqEpѵqcOG6aډTC='!yT.A{#`YC+1%◟!&`&`$/\򪦶Տc*Vex"SkʿNi԰)[3Rռ![v7np"rGU_{޽~7l/Do9!$s`8oLJX
/G;
9dPYh"ѬTIve3K\)_MEڤA]Z̲"ZH=vx	1%c@T=EkQC}R&ƛNag?7]R$gp"Ϡp*s/hGW fxC#aD5 O3kZoV-LN@kpN寮ݞ!G%Ջ^i/؂bnZ9N cDbٯYŜU94.w5h'W~tF*o4J
rȜx̒DQJ/BnC7DG|YVPzqQ?qe,2lg7@:J9Rm!`a"[^?+D[KwۈMwcb ai_߇؀N(gJʺ:ůg 闁Qu_p%˿<R,+)DWBr<
za?#x?\0MK^}cH_`ʮcu(
=*M=6<mw"1+a:yO*43捴AvZgU+v@!\^·%C,?fW@/zuRE> _Ͳ6}'	F E幽D۬BdT-]͹=#pL{ 2 *B})VFmf;Lhaȅ2xhC ghڸbrW3#` g&Rf# Q+XQ2.m xri5		NNѦoJa4	2r%+\[(.y_ #Nպ&}wjP-.:[=l"UUęXr{i)X!\
|A<n~ΤNл2e)-6pے-|O(r9H@?;Y`nNU/(.9LeyrmiؓFfJ^!=3=rjL("'ny{n&Yˋ4RRqO!<H6RmBݹdqUs'PO_J}%k~z~Pzers?0E.# R||dmTXQ]K/GEFW,CW bW"}js<2đ8TNO6'<br<QBMߙ14_T<&xԀA_ĩiJ02Vr$!!Y,ܰ)5
ǽa-SnNO~(T6_ȅdcX%z vw	*3^!b50U=Vƺ>Vf
n]H_#CL&*h?GɉGVPP,ELN|=zЊFIy+qt@E>[^S]$C!f"mut-&m
Ж?8߹R`VQ?ng	X34>rj@lͪ7vefS|UiG<f-d@݂t`((Jq	,diYԱPϨфJw^0??s,Fx[ie mEmُ+^#\ڼ|Y:7	,w@B)
8!yYee:j,I.*3 Br+]̠SF0wPnn>	ծa$ 9ʫW;T{\\#m3Jn&~v߹rhXǂ8~zYM:@R@^vTϝM0^qp9Uu#1$ln]0'{OA{S<H-`Bl;`k:8w;e$Sc/z$	MhKjjj[NzV扏*	oaֹ4|=6nk-Ψ2/]d{SC7 )X5q.
#Ԩ ʶsESs&%NpF/JFqK7O_;HD(U!BúKɌ&
1Q>o3UwH>c?^ww-m-}bq;SAVъtp.^1Ecth?2alٮnIBE
دk뀺 .]ͥ4Q%**/*>
`-y%4Vfi3]IgK
9&H-	Blq{5?j
wXmWyk*#+zJ}b.<v :n¯"
&V}Y 0+|8bv |#at	+lnN}Y(8	"t~$R0ܐMӪd4JF Fu'S>c\Tp pT{(3U24*^HKKDRs~E/oh5pJ;Cᢊ[!r\qPzVgt_z,Mcì$4zM WB]brUuכٱ;Aɤ>t-p&n25fǥNcLި`3ggSL<(ÏSw"2@>$B$9GC+lw#UtXOVul;|wF1%'B}rj
zj'cet'Nh]V)}MHհb&d)ktz*GRgNtG(ugPf|uNzl) !4`q5wgxduf4?R *
dE=Dm|Jj}!IIC0);dhOZRPdzud	 3YՐGq:OsHO)-#}"TqD	(=eQfV/ZK|so|͊-WL46-O-(`o|dģ"}
R!camXJUvpY{|3(ܜHuCd)4G`?*\lM/T6W^j1arSjTisà"pb"rBKJyܴT	VhS`rVr<hh(uWu
6\.
{mrBv|8+d/!ǏRw k劯!Qɶsv-uy~sRQLWwz  _fƗ"O߾7GA2#րB0[T2$UZ7hv~	$6ֈȻ8`J͚u4'lhNo_]iAEa"v9n#p֚Y&[svfiGO@6E$7uR3db_ׄ7Q} T?e%aZ_Tvxz0>vCv"raWrxĳW`_X P<{zH,k{+^ׇs(%#isIxTg<r(MvH"mG-2\84.c\:2%G7ITT`+Y*`#a6qn`a*[	jadrCk@!3[dD3AX I-f9A̒vIvFriސ=>e'uOY{|-
ȰLQ
 Iu=<"WS֗?JSm!~a6@o	K~UA .{ԟ9w?cv3jrC"~R/3ki,(ZRT}!nw*R"7d!'3]bc9x;p?(xınp.#Jº;EANn6OԀ0[ ڕLl-SevA"[fJ $,t:V`!ݼׯZQǇ3dB}T PTGa\@d逎4g!4Ob@x~nL[Wr|Dp{7E
sõ9-Z[Ҵzdqo|P:ıL,TpQ}~[)aM7W'S[r7|00*gkSk-2mm^"D	tр񤩖V80DOqҭĢ?uw	yy^=hXT%iYoZ2!<wz~A>?J q|ѥBJ1BZJo
ýfQ})Y8K/iU4gۄ	AAg?0
'.9$zI:&R8QoOǛzƊvypOq)ٙ$_f-#X9"Tj_td݆vdɬ},4\
Gi	~34ʹwLǄz)Jƫ*n ~J
,dx/X^$d]ȭëpD9SRlq܅Ho޽bHe{IzG/RcɄl9nђ>Sx#8eORЇ
۞cO'mWJHׇ])ԂjmР"@Fb0|K:DT*923;>C$pICWbVI#fT!)**3Z[ha.NuP趠BNeA4iiiJBCơ\3p?WBx2`q޾ <|t̏_Z]D}i;b#WdWiÔ('vf/gΨ.@X u)于x*o֙vQ':!S~("T-

H(юkiXpEe\F榌C7⍨"fӴߨb &᪠k@vx*4'ZنQZ[wh+5Ff:{wwd3]7zֿ!vK0$	@MkK"O:*)UEޙ9[ǒO:3m8߹?HQn^m+ ^ls`hFsAR(;H<uF3A*Nh8/kgCtfe_1(_P
 9rZ	Th+7+qX{mo(SBtv6'Б`3D_
Q+\0W٪"4w):Lԯ֪h`Fddo	+V7Uld;_^othZ
R<"$LjT/D-}bcRu
c4IdAJ4oxD{
1ja=iPt6,MmR~
*\
1d|Lwk	P#rܰqgT%StzSĘOڥl,&d
|>>$VycڂQWHn:ZZ쵣dn[!ުa2QQFf4%B$Zg"͡NĿ_GQFAsU-$:Gwm\d{X81G8D6E k:KQեMNslMd첽jʖƵ}=$K+: 
9,Q3ug	ǈXĵW1
IxBN `0$?V`Qu+oG*["	> eR8=n:YT(abJIA*NRV@=.y$Iv9XAV>ުw86 tְa
2
mQlZ;Mkx)'ꖩN@0Qn4RVh	+էy Ȱ;k͐i^.{X()a
VEdsO/UH71wrc99]ak<35C-gu8W(H`ѦhǇG dww]`9R@M6I0TQ̭*'pDF _T!Wش$v}x/Bg)2'
oJ6U
`rmhC/&T
%QWAg9mK-*!$8;~"r
b>xBdyI)ӄ׿ɲ{ry2z}o"/`K
	KthCʟj=16hV~ݼ%[^yzٔQ-U>g+<o\WP7ŷ6^I\H?h~&O8
a	8UZ!q`Ą?w)
a&l<x(5ZSo]%RǗɅB c8fbOmы?@8DnjS|QÎns͐<@E`XR⭑R%1ݘWi@

~~KfAҫaCi}S(%rRE(Hi䮈ir_S60ů" 0^l4ŧf;rf/?M,ϑJg
O
,3TuS
KȐy-,ZwH(7$B/ֲz6ޅUDrBD@etV]z ".%2~D}U6iʿx/ZbȄO*.jq>	x2sɥz*brC	!lUlZ.3{:&4 2XHʖ|j.-R'@յ塔
'H+W,j&%C;;QTRW= @"K^;FQTv_tVn;zpjS2z#0qW9`$roG"7Z3#}shVF:ńZ/^1 { `jUMa
V]ĆKό¶J^~zBROHj~&b`ʰ_?Іnq_L63d+{Z@\hPvPu/Qji*W/|śT.FEyx3 ܋/L7O}Yì/QLT6gEjk &7Wݦ@䘍>JouۆviѮ(&^T%|@cO7eG})fDdutrnBdMXMޛ@RB
	j)=_^ҞlLD2 BL{9mjz?4|  |%5\Q9n3b	YCS?5Ǟ<a!Gދ6r>qAH~2ii6s&uF8<CGUF	M%ӬXR<ivK OjkaB2ӺRWL$"Uon~T!Tvza+؅CK*S:kA	}QxeF0e
U+YPoiO_S WX݁c"fi~FVJȏNZwtbg.L@j$=e2'T/w[L#Hfu&D
Bzgx e!:f48q2ں:pTңuNs?mS \Ki|`sP~xp`1:(Qh =$YXU Xs"A 9h4߁}: {xѓJ@mz3jpB6[zuu.?Ԕ Ա9Y)lyH:EQެAi"	59ӺUW̫E_9|m_Nmݗ
(
%,^nXa</0Zh>f7DUY\oGZ+-r~[Z0Bqc狍9~H' + <$a4J)E찺T$[ Td,HcDmE	3!/gha)nλV}O@Tapm/y;aUu
#- uz+^Z}$@k&
F
JވGg(M\{,l]bIѧ`:hB$c,u%Grֺ n|N,ўz&S8M?JtwC[^;.MuL&:ܽHdsai`ǧiOL&ɖ)*(B31I
CW<6s({r6'@X$u˛-s$}3y<si?xwd,N扞1YY^
4آdW5lYUR8[	z茴_hu]<"xtmXu
0>J={WHf.ZռaYyQH?E~ o&ؼvm<Bda%]o^&$}..\BOg pdc
L	qcu5e)_vTg <_ΧϔY 	 \(k/,=QN'2t;	i1~)^|^ݪ}=9x {jF94!>&%4'zQ)&
cQF- ֤8>lmD\DFXӋ0@$c	Vs4ҮpMsY|vÒ̀CYgI<|*	%!X0)/^`/?
5!I10KR2;
$~ڂ.^$Ѡpp@dY\cEw5Se^oW;}Kض<8,kv̓ bU錷M
S	q9!0\H&׏U!Tɇz[K1΁
qd\NI<8'9hx?	$tIG.f+76% `Fͮ6tjd"0|.h{׫R4gl.T|Ĥ\Ǧ:nxOt+wS2vjǘyNCtH \+EO
K$VAfҌ/yGhI8OJE}aOm|N_Q:^)ϸU	ōpP]$6F*^FԿfY	RieF	aI$\* x71\v=7ﳜ|c1~9=wsdC
gZ,Fp qd-e71Pqd%[92aV2LyqY=:%νN5V=Jt8"&OīچJ%b)3Q
?$.!oL۷˛fû CWx\ }MʾG:8cL'X(y`AcWJk?#g	a 
@PUQ 
@X4Ʌ `DQ稳V1?눱RQO#0lh	{ԩQ5|e74=S"+.E>&UY8f1e<04z"dWarJ
܆C{R|p	~*Vѵ͎K
WmE`[;2=|@bA.TE; `$^*:gn ʀ)d%hKBf^,\ʄՐ1OyuUP{"כZ|r7RbB}5!㠨fL/0RԃiP'V5FtHs[VMf߰v6tς"ON	"}gÞP{ʺ %y
.[
{;QPD*]~L~keqj1Q>~V(1X`Ov(Z.2ٖD8ࡱ#5Ť5*V<:èCoAԊTG9(f\IW`bb
3\3Cbf
IŞ'QҋeH鍢.Hv#?^MP\?e%NBިڎnǚ.TbQ\`NsKeфq%K[Q_ʾӏbU.$Zr%iݞvKV6ژ)ꞯ<g:iSn1x[JQ-^	_U=j
q{<'NzXDk:E{Hz:dJq(9Ձimd|@἟~hG%ĺTX0f
s=NҒ,I/7&?9K4=?1tp5B߸nip]~yp<y{YTW;^CITn"ت:[_Tuզ6 Q(ܺoPȠԣYc5bN3L~xAćx֟7Vď,n(I3ڟ$Z7?%<na!;xuACVe~w/ IR!g(&aʔs
g9%rY8I^D5LUϝɌ3]i>҄is1Z+/Z"
cFXh긻XGo2tp1K2iZ^gdd'F	s#{=X,B& Zp`ChrpDwdA"ى5:;6%陎5AZ]WBV
WOpm5ހ/ѣvH%}N7&~ب7~2J&Y6tT

@
Nˉk5ӂ`*z%f~9cG+J|%Ч3AZGM^%@='؅.tT6{*ѪBs8R-K	KCđKiVb-*.F-&;S.\no:73ˀr2BvU몆EWCnSZf2hG.P1߃{ZpD8o~hD|\Cwl6j-}Vq]y3LV2 <lҒ0zo.0</a*.o.bѸ̂-|kx7<"t


%#Q`/D#l^B!q $C
Kg&d3|=+|BmN4}ņ1EVomw"vi};f6Ib7.c-`n&Qg!iZe5iW|V9ik߈]gy7X(@rLrkBh_| aȸ%4n`%A5{c~uvw"
nru+dc٠bk~ݦu_qHLx.ڐ}..Vb֜aM(̈́CICh=
7N
кeMZg+6fهB*
XS~ISQˢXt+Zͻ8J](Sң'ʇJ]hZ1H@7HCuwV!mA29_e\ѱko臝Ecp`V.y\晴ABOZOPQHkfPdPՈ$E'3,?Rz~K
{v7CmW8rQ䗍ͳw(F'	nͪIF?]NZՆ	5dnnWEM!ifa\e*,EZtbFV\IKjPB(*=B3R,akwObekr
6&ablP4W"BQE仹^g?2Z(NB(գb(aΙisuFt|ۄ2u\Ri) <N[1F
釮E/	0TijmјM/G]1#e_r03MAMKxcAaDFidw"
RdΖUtNv0	S1	J
5#e\ +pJ0Hh׋3xS@(ceǳjuBeCÎH3fzWVQ x`,C
y'׬I9k"/Hbp	eDC1OpTtC2UMg[TY) E!\P&>[+"]ĠZϫ Yy~Hc>y˻TlЃ]YzK
iX_Tc{p8rfï6|~*pS^fXM	Hn.9ӣY'_bQ}1ך&ۉH&8|&<[4&iHI[^,no]mHhgIAw:dxsv
mT>	¸ aչWMS
 (yOF#\Sf|*~ڒ/S˛:/Ǭ,	C2y?S\AxHx.`E%[q	#ՁI
S_SBtf)!j0 tJMMFʏ,Kzc4^躉 Pd>f^/3TH:⛬)$ }Ji%=/E*~Z_{vMTr"$ou!?OalI11"#VW"8_xTfȞ̙A앮4Eؠ[SJTc}d=2Ԓ5?p3d-qC~}'OGl^,;57JH	^w;baǅb,pdmݔ>Sܰ?5LSn9v,Vׂ*ܶc	uSJ%=[
9ck$XX]U	KkP{yo.uN@{`Ey Vv3kM{<#Ba#ڒWsi;?`ȗby>%El Obj$D.`LΟ藛 $vtf9zc} 6esR|-@٩S<L'&@R84ĒiSdrIvw\`Ih)+vr)"Ab%nt>Y|$dxπeg9">3+T?CN3sxR~dęL<⮑7|1[6`PP[Bn!NqI/mY[z-E
8d߭%I'jM,"
F轀r=gC8w5-Q^݉
TuR[	*hMVZYߌ-uM-]ZH3wv
v	Zg&g
lBKj"S`4P_(
h5-!6aCXvK:uCY§RqcB}X/TLoIsqGekqaۑ\g͇4O8|#m8D8A]HCAޟ	/u]Xb{2rNFSϒվS,x08ZV\aV/KvBNpBoA2{0>zf5$D`""+R+|ib@{ƥ`\$'RPV%R>)#,|^PY36>+0wyPjRQ̱X[ŭ2֢xdb'BݻFEFv!cpsdg݉Je9=>&Nl%I&6lKW;W/
NRq^&|.S]cX"Z%<+!msC/wyyq~(#̺7]?=Ą8Y R	2~v8
6xOG0ju,h{DuZOE%>,1,yUm-w"+%l^<K͉vSZ`uԭg6F;_+ީ+3;|c4d<ye]
&-|;2Nzc4<pV@
wS?*׈N%oGop(#Ts4-_}7!\25V3Fg3dHcH,Wd0UxDԪ=I(fOm~UyWA;j;aeo˳gK&̱!yTsjHʸZkgeUJ(_h]T̋D
4Zj
&> (Ŷ2dK鍠KWHȱM:˰Du+bկ"c'⤨_|թE"xa  >'Y*qnxXE;]ӏF0e!ULt o]ݤ9JFCd(E;(MtJ;Ty Gx5, l19UJx|7Xq"~QSР62b@N~D;{yp}CP/ǽUVX)IN${a<.Rx(M\XV,?>nQ2x06*9V=pPinifPvcȦzxfMqv8^FStb?Cֽk?R'1]U3+c~U4 t%K؎-]uc	Ԝ\k
\JG:/[^,/s@ZZp&v`P1>8<8}+F-Q*x;{B`FF;YPI=ҏM7Q==J{o˗GDYo ܫn
Ѭ1͇cMҠw^猬Erh?R✅ƒ_Bis<n	@=77rDF
yWv}QwRq8#Xu;GGp U?"qz6CJMȯ=TB	Z)p
`ǵLYZPsE:xlMW'bqXMkrpeSp\'T`KQk/_Kt3}GxB84υeNCtkj{=2ZWBQߺ(g~_I/np+ϺH>۽	2݋um3?(a9Ne?Iuܻ
,cL4+0o^_ǔ0HrHMUjO"gˉuwqŷ+T=RhA&pw&0-\Ƥ4P=k[	pфm
ؙ.'(C~LDjϐ@z^#zSIЇ#<UB*'dRhW1
YNS99;sRI܃+VיS
mƼM(EL!H-y*6_!~=5K׏l )~$a~e
H?d/5Jnpf]d[h7-5<Z$ xjs" ;`xҝ̴b"q8ce 7{aͰP,<Tu)*j`q#]罴A~4P}ӀuX,t;hkk,si1i6X6R-Қi&GjVw>/^y X77\(_
0]+\XzX4pg8LϺMU5]4>\ؠo,)
+m0x)$By䆫^8.B
)/mpsK w&|U,V{|iF=-9M(rv[+	-+	ւa
"64pn"ۘr"Y$.;=]kL Eh"d13t*sWV5I'<ReЈ{rfwJ7+4OGݹ7{LR
0/xW^'G 4?k,EY&P
/H5;'"eL-}2El`\d;^bJ?/S	S$i͛U0 M<ݱZԟj[c
eHxC;mxZ_cTkY$ H_y\5[hqߝ͍i@0^uV]vGK	8Ar=O:,"QLwI][\_N7>6wL3׼_Y8!/TŚ&byFJ-L_B ǅyM²cimC0ʍ
%E`\[HY&$ þ}}%ԅ>S)Kf͜(~0yUn	w^<ZgxKzuA·|H9Fp|Yv^᳓{hEP)Z2QtZh/&.uF6X.;@&Cg9S`E0ciBm%|ОbSP9~vtb&9ꈬaUaߖw/)5﷋ǉYG|D'_onn	XRtae?yȏgqז
h1?c1pj׌ϡ-_D	쌿;<:w2|ji X\Z'\M1s!=1l=1t|'=垪Օik-QSdl	 =eZ攦̨vr7	B$n7ׯ~Tmoٵ#l@?@E:VrG}>/'+ }HIxȁ~W^lB\ )1Yr`<_Іf`"Ȍ~DK/+KSj8WCᰍ,7~	cAP.C9`[8q]m@Z
%cVQ2bnUEҤF9Q]Aؼ~ŁEacƹ*[VF!?l=2~[
OhpQ⦬9sbң#qX?4{pdMׁ*b64i!J6Ƥ&ש[-T*zY{9w1Qh.h8C}ܪv+}{1nUIU\ 5w>/Fslh#/c΄<\^hH@-b~*"Ap*@EGOc!:ӆPe7XA[8w~Y3WIdpB&#_y	d#|/lh[Ŷ֎ɿmotuV̓˶'`1NH(oЧyS[8adaj;I''h௑Wk*{&^.Q(ŚZ]n\m-"<LdO~F[g9GPz?؛e|f`,hM.i0ʢeԁ$d|FnEۦ5 0#`}M%e>DNz[YX82[-Vhdٝ_+dbf2XHXr	_#;- CN'*}_?UUBh![{|{u>
"W:hEjT3?H@:qiZԄy_l	Z&rcm.fnZ1fJi;?hW+DA-+\r5WŃYэGZOe`=p]\@iK&!Uۊ46Y[4S{F5N6NE @6u Ŵڍ
eg)Mϫ'')zp;⁒Z"Jc[&.%H-;i:9
.<<Jdh+qVOrT`A"Q31/n_U	'%~]e~٥Qcy/_Nx6L@!ix}OfYk	fwW&8?=R p~r<X`f~hj\B<Aq$l̲M9tH<,[:"}h,N*(꼠
_|ňnvN
z5 5%!ŧc)<$`ZOOUyv#pY,8N^gi&Bv~'y(/|#.N3ѰdK}U44UR^&i^ZS@V8^j]r1loD?.J=]ͦ)/+
I$a3D4Pxo"2oYy
@52mIҘؽV<9UIx2NCqW1/T{[FǤ5:~J"?zgP]ަݳ*l쿛S%|h|	ʩؑ4NR+5'S[}]zf/
ȊyOn'?4|xrw%#n@ng跁b3:V>QWY1{2@4/
 {}ץmd0@M*8TXy5f~a4[S1I9|*޸#r# MQd!D'Y>'G\Y{/^P]e#T_M@'\7r飉B~hllxr#IlHR	pD9Cȫpb	ŀcЗ\e{'ͦ2	TwqW5HeCYn3#h}0_oS&
@dm,@/
Pru@c$4!W5 `@Ř؊é>g-
I/<:H$P.Mu]=ZBIQ
ӲuGaDn/b1m8#+0.Ǩ;3WŰBy{
Wʔ	hQs쑿S7C*<
O8vh
daRV(DcH\ÊPtwiDLҥxK\?_dO.JRԯgEQoK76ٖ̊Go9mֻHzDG{LD^P/$;?O=PC{	ܕ9{Q:xLkh΅-|,5MYJ:~=Yп&$PCb$%knbp{+5_}W:݋= 7dvx̥F] D	hEiZOFqB[>71;']RzhrxHo#eB˘s)uZGx%!04-4+`6^9/o_p&ӟ	r4sq݄׉:W,K-cal/7ՉU'SC6+۸sILڴ> L2G(A`]:l
o.]{È}5U|&m@ T|Ό[d}'II0lk+r(ިqvo3>VEl߆p4W#-N~s':]Mm(+ƏL79')< ZiNM.+\G.oc.3La9	x&mʨ*5wTUadO+O%L䍯>o^7i[?|IWcL֫ٍ IPzLPaXb~o<e)IqTAJ#W`iE;FAoWrP$	n,JT4
<?1~NT%ɵ+b싥m%-5bPf6Y_]rR{6_c.- ͭ{髸qHcȬ B|SQ1Jq"I˨":+m{
+rK\@J#O!FJLym&켇&]moA Հ=`cim`i)bTT(uhqvPTg ڃ6#QzE1rS>.l*Gb*oVݗɾ qe-'AA#y㊌WQWGZX 9ĥNOI-7|%p-4ucq#4&)ׅ󯼀K{P=Cܛw
RǇ
ӾGT<'pg'Z ?CӹKHn>fܵ-GerfeBfnd]^g8XT/iӽdJLim^(٢Bڥo!Ȑ+pFɵ?9W gOmM*zn_v%J^CLG"UXK@
a3_=Mk!bXhS"4?+E8fTF)yM@Z2._aϳ%p5Q˒xwM
Y*Q-5Lwwp-3޹)QVD#lӟK<شzFp54DmdnunϨ_bFU<\8ߖhUG5<t󦬅LrToJ$iqk8/>6q#H
YaZ̏fLgDV\؝kV%q]Q4Iy+l%,~ڄ$]ix;So"'KatJZo_Rv `*e</@A|hT>T,< &Vb*}nT7P@uQ '_u2>ggN!Y)QXe9Ϋ\OTQw׆swn+1H|J9qN%.U8m=S	+}
/Q.2zuI
|jxW0a>Sʬڣ{u,@ʆmǚt(9?뇒iѸr%=.~94X*>ƷFU+&wt98G\$SZ8;QE4LwavZc@VĻx1\iC50pݫȅji@9Kȴn#ƌc=Q"P(	5
a?|'уP$1CQA#e	1IMxXpыCx<~wD{OgyY/84	TKYlս 4IAe+z׀;i=&a lC$('
|IʌXhj.ҍŝ]]6IOsf}eGM1u4n7t-n4
	gb(cQZՖ(9	=JJ_\\_IKFZ,K˪ &eIoUrzL`ѿo_QkikMC.]Y&#8P~oɧIކbC"&I
d`jH:{K#8Tpv_	Ea|q.&?~ !BNA*FS&-])-l=
&鄚qc%6>L&:h`q
z
llt_Y8 Ă8ڗ-oW6?uQyr+y§SVmm
qD4Ýl>EJ+nՊIqCu`gQZX;zJ-S2~-y,y#n6X.^gp>@N'v)2ߍ:6Sr"ж*7=T'et)$Z㮵|ҡ
tsv~(a`z,_Zu{B(()
 ̂2}I7GK6OGxڄm풥ս_.~<7%|ZxF93$fnJQ4DAԱ@d&!b&m2[2?w/ٴY܄Se$L dЃv:d"=y1vUDY޳cb?2*"yךMYlѠz}O&,%-[eٽɀ`wf.-'Eprxv9qw@W\#q$Xlȟdu01-l޴>P2ZW;7qJ/w|#."-J,[{ID=Э<h ӯ)51bյymZ?+ J
Bh8uJ1\D$QpߠRocgR$Xh<o*Ym/|4 >lJL;[t-mdufOcQ
AenA!KAlVu5Y"`caǜ?C8įA~R1 <JwQMT_ҤՂ /s1ۙ@S`RoͱVn{nr5}.%K30}M)jeMakہK<g$e)]͏?ŗB=wx9D*|=1W&U*$s87ttܡ4:Ҵ>f( v.	>u=ls.qřCM%nG	uԾ٥SIulJ	^ށZ76)#oU#X-X!D>zƵ&M3}2|lv2% 
]Q8Q6@GcΠv܈۔pj9Gh0,󊴧W΋d&e`#]bBqN~"CN8R䣡"s<o.=8x crWmzU܏+14,HAb'Pa\ň1H[Z{*TZM{2A8?i-G2eXѰz%8/M^Z'SFQP3IAN`)^</F_
q(DozV^]<4&Y0AQ;ﬞZgwB3nhHT˭˞bѴJhjQֱ<}^iOISgi~Š
C">7%ISH9xF>.G43iQΊg6_X:	:i&}e4pXYv֭/
0_w(6Yc!Gt! G]5FXlaH)6}*x@nHt.Yb;p@;s#[-yd`ց}q!f&ޚF	e)+wgsnwe96CZ) @WC4!o8>p(rrYw~FRL)=s>r. c&ˈb؄LɈd8a~m}- ,Lu(4g_FtszNlc>m4
#lILRx
/*t؏w>Z&WbGHq$&
lywb3) #^}x
áavw|щ;x&88QxW]	G %xxB:8Q?J]7P/|Lȷj\Že]yIgKkD!?Vрu'=9I.%e$Ñ~zdM>SA
ߌ]arg nb }`\&l/<ٺB]"w	=āA!&viT+Cgae\ԼJߏX:2{G|a_G'\ VmM1W(B[[jكd,!z(辝\b)dՎث(|ƳTrTppJ>bYI*L@by\Pf//!@"f%0V0.m:Ir_TF=rMHRȶj1Fb	7}A:6|#
Q_TlRY9g=٢,i&wSYY+-#CDK^O&;15LRgB<Z,Y#vJ]bi40| Z2zrLei/ēi=NCv%b~Ci )m{~
}B	چ224)!1o%ZRX@syA$ ȱC|ouQHfATb8*,xG❏+>8b/RW^!IW0QF9VE ~GSDGdiMSP*4Vst$ِ3	 u)ˣWSR0xԪTh5R!wsIԶNDƅ~I1Key;a
"ǰ*iV[IoA'K463AA'zꇧm:}92Z,dokG/ӾIfYXVq 4KJ
p)kr3ɮ%k e>|̟'NFOWT.IHT(p7cv{C&<¿٥)3^R#U6]g( IЇQ/RO_fӷm>Il<j }4yKxXd9D^1e#/q4cӭcOׁ-l,q;'e"q_ <Q[H\}u\˦AQ KAMh~ z:PQ2~`p-xYH{DY$)+;Jpk4dmW6k>PPjݚ,D#os#oN72<xUNߟQpZzH*MպQ;GU鏉\wneyX~ތ>/i	Q;/em~Xb\M\KVA<.iƪ ׅ %I?
`#ȽI2&eR$N]&'7QZ,oCh$X	͗z('RY5Z[J`
1x䗶	P
H"!nGv ]P	QX GI`yy֯BۀtXlt<MO[-	IPaR,;FVǮ	NF|˲=	l2%WI`9*T͊"&^{'Ўp<T CbRSK)#tݟzd\B̩
]>P4R뺔 	@TJ-"ݯX?c@ 	@LkNqZU5ª=;Pb!z1դ8;
Z3B| apC8Y3,4g:j(=oL9Zn!iAJuܢۋQ'ɑ-Y`SDO<PBSO%o	a05Q(	elZCNp]/_XW)ᵆNd&'fj+LN2Z)q??h9jcv1KǱQ{1|։v1,xy玭*W
~(,p37hlUn`*B]%B?5Q/PP#vwYCPǠK|--ƚi
`9
w*P&k~dcbv	#~6M &'}N3@
}LzqsZ8+d>Pl=@Xf
d `Hx{ogS`̃pl5%rtK:ưӭ;e'qGHk:y4H]gBާg0Dxz7TFrZMagک;@3J&tMw<dk>^*mMSZOߞջ=mf._u^t4&Cfw,n<äK t'1RFƦ*>
uj1t߾/aָCi7V~sBq_#M?MD"87)jaYtG̹G9G1.i)'qjqhX[`)0GoiZ:fU]$34	!p녥!v^>HmvN|x[Q:<XKiז$=0U[nǗ*
R'1'F W|22:rHBzzXYDL?B!+Z۲ۇADxsk56:=vWUUӷ,ٸ\
죯sgY: :N9?q-jtc$ Y%`|@tߧtx[|ȝC
sO?JãX5ҿ⮶-@u&-O8R!ʹ.ej]&GN/gDڭBMJEp$z&_SLH<{Ҷ
ITl`׉?-^M?p!*B*rxx ꃙx2u܅
4.\JXY^ݍ&Rclcj2Tӫ>jO,ү+`Í.<HDE&z+s5SC
*,h=1s(\Rd[E>;I}]Cb6_n6v_!ޑٛ2s@x% MB:CkJlq21@u+S}Yh6Bj8>\b<awbsg~^U!1NZ-`$L]@q9?ߑ.M0nZ[\c_,Jמ1F8J]n?^wx7(q9@j}u`Ƶghg
rkq\E{X5Gs$ vEQVqԹO"uX/̍uB>m0Wjo_Z
HQ[INl-3k$8iDt͐JsDެ_O8L:H?@gd=1%{Rz1#K"бņ
AZ/FG{pvm qx}h$nyv" !iQJm0Jxp6:dy \C}^cT#˗wSe
;D~HU7
mw'ƍD)а)y'"_#8k$H)B /T$d%>&w:T.*6ICPP6̿E΋}:aڕjz"h$PM	-beQ1cx,dJARFcdwC|cvÍ{D)e!5jF~&OC~U/6/>{J]ZI: 6?F]n|&Y9'Lc?</'Oc],x)J9Y!%}0 C1BBP'q[eA$(,>\3E%{_NiJ⅔/XNChiC1	8m5l&->l0 wf*݂@9;4wm)uoQFSh:J;9~VI5֨=[D8W
?ܿ>!n/	]&N.``!kYY?A0"엻m~s#F7
?Yֱj$+Qyf3 }x<db:Wb=v3*K5B>y*6C	:
x`OKhB_}ۋ!ޞo 1ò?rLT 8r)Rhmj4m
$ٱc]~;rzEˊ8U;R>zPūl$UC5km>zebM9 B&%aG͊hJlD/WB^{)pY<cҪE<naWpe)"NFy{/`zqNg#g)ɔ{@y!WG}xq
_-`EU\wyc|ciu*|75yN4`#Lރ{'r(އSW2a@k)?(hi{~`:F:0IHg@	Caa[=H^>P+v|>w"U;"rnLzc6qޤ5-YiiHH9ַ@tQL
sBn +R9>Ҙ@)An1
lYEzp,dA ,guRC5QW-vȶ.#@\E0應^i&GZS bs֚y-+Oehk2=FbXyeֿJoQ]ׯG7u?|Ɖ'Kx0Qi01=$G'ܠvm<wy$@oB(mqy{I1?}RGahZ$hTolH4S*x.kZ}:|@A`{iy]n{ob>
Pw˪k~ήN^D<3I-L9?L͐ߑ\H)NuEI]9)Flƛ "hE,j`ɋynzG"ӵjքdGVI#ϼ'vSp4Fm7ntc`̓3d}	ɶhU*ծչڏ/ՍALv*:Lf:Ѽb"fn+SNR#( Prjfw6g oU6lNʹL3>TYkkrdD6Zua5	ӳ("|Pc)֞Sp]JMo,!X>??ZG8/k&
;	CR
[e@

+Y  Ǭ2	ͰUTI<oGT\(0f'ğH]D>anLPYߟ;js:r>Ɣk~55?~
I:.N@3>B&lɪģ!<
jH	U0yHYsG]\Jm&dew}M xXnPzb
sdlW02}g6)L-]>ˉ[PL%mj[0n)O;4G"E择Ds?2Fht\i2XC~Q$Rm_(04cquh%qD8eb)jfvVpG5Ib6 ;M7
t+4]M3 92=e[b8]I+WZľI
L`,H d<ě+DKG782d̦уU {TK9gl-<@}Xk<h|5 P1oѶ*!%{6<NIR7Q $	A؏BRB>~֤<8Rك5F6!iYaO?*ceLDmL;tyket"7)$A2@Cr=J1'`i.fPTΉD Z/֡nӃ^Րێb :@sDMiq?}֘$\I+;?2c`ۦLlzK- VB>Y&Ե +pFЬN
Fi{XL:-@rȎGr,Al0R"à핵|9!
-oAN%>R	
4eK<m@щg A	QoT5zȬtSf~GH	U*aţo; NgΡSrS3gn}Q)«w8J&Q0|^5"m1X@@Mߠ %i|
0 ( N2`q2obW$su6|ݩDAܰoy*\"6Bq6x=
b6gtMxK500U/\ohʎـ<cN39$u-<,bMR"}C8wk	ͶҁI䫧g_rmYzYѧ%'{
A@@xLy=),YjۦPR/(8X!b>N>gҔ'Chx"5@yX
?c N? %^Y$?(bhVMA.UgmQ-l Wjl31kMW!DB}ԡ@>Ć,)ҳIyN`TP$2_G4X6B4q|.Aނ΃fY_*I&pL/|KuMHŬTbs~.޻>V^Ou/\1N,CzM(~"Icb;n8*cOC=q9)uݽF wh!3qƃĉ0.~ݠ^mHs-nCR:\Iz\œ 7o|4~,Ә-EgSwaESEgX^['9JZBh>9>nL<.g+8ob/5"Zkŀ4g;BlVeV,KnP=jPFd:sijh(8GsI馍nQYل4/,ٯ[hůIt"
(p7v)^k2yƿ^ZL2;#kɐ4L<Vf	V=^2&D,y0.2uMM_m,v;N3B2W>9>FwFIFBVhn%Sr&'29/҄ӣU}A!'wbKqjws3fU8KGt}T@ڔF8FJ?cW* "c!$y
i~/9|Xr8	
k=iRܘ'DNN9W{x^ Ԯ{גͥ&صg16J+JH" 5<?g8
XQC`_E#
c!>. }tb$PY$gQ_r537߂N\2&0^{\cbn}K8ZL,f3O!kko0!%1AfK]?3p{MBă4^!].X<pPw,EɭdIs=4NcuI_sqpڠo~~nu.>Ln/"2yB,- oET=ƌVԹM$>qgQT>7D8'a$oD,;h<P'c&uvXK<cVL6F?CMCur̫pi/EK)fq'\ӇIéSVek7ǩ] Cl,e3>^}&q>&Msf ]Ŷ/sqGUYߢε8	6,㚊sBCOUpY;D)T⢢3a<Ne":{9v&50Ҝcа:&(~g	.
g!SP ^h^kgYSȝ⡬ '`yWK\=eN.i>p `m>tM	t1d|Y1j(nrM
ӫQjPK9Gw	M
sF[lj;p io
Yh!oCQ<"8<dAAtrRYZpxǼ`/utݡZ 6F:C7-xpU^;lXxMh2b!U`<I
 '?zߛ0:؟DaTgCX'm䳹ʢIN8i۳oM:j1ʿSPkH].@A}S8e
J6)a\!XyNaDTS[WӈM)
AŇ>&/k8:s߅4ߠ3BCgG=ZB_60U4\3jܥf,#a2~3냰o%Z
	͉ yA兺pOظ@?x֮M 8Z'U3
YD\- 	(F|vi!U~Fe"<"o&0;xPTfMUV`傺1ɇc775qZ5"0t0|+JDq?OEF&&^hA釺O6=H⹏<om˫gf|V9tc\U;CvJc!+zgJaR;K %q!>Q[껜r((󻬤R||uV{^zZo>#>h)ʙ_Uz~C_κCm+ɼ=|1}l(
|m'd+ r9+O?bM)8߭ܠW)/ݡsԮ [:-4'}ZnTl:
V#z%`Q/FRlqw =/Cxq4׺n;? rX"o,h{䣋"7{0OT3s;"LGysL>wDx-]mv<RQ@GYTTH诽; ϚҒ+Jhܣ-WDՑ Z330Ctln'|؝I&J+H&Iv"vSzxz1~uSsr?, l>V[$5Bc74|W"fܿF$S&1Tcv _S^BNLScId~ z$iP&`E<?~掷C4	@-Γ;ޯR%>ȴW)caO-{[1VY)S1m݀Yz&+~8jdq=uVi6XʹK#F8D[p2X^~wy}fVSG*_aAվWZi`DT
:{Kj;"XyӒ_=Nw*C, n
{l	X|m˹O"i86(QklЃF`WV+ODYlӻhC9\	M|>g`3[iߑC6P 8ֆCm
;-5K6;x|Y%oXeק?&6ƗՉwB.q&l]_8Ī3`tD||K5JaY"m]Z-Yˮ8<_YDYgTMi	Ļ+4u ڔ
 ǅ==j)x;zkDY~
2-D8xO񲏯 h܇m<NitkK'?U@h2|
3{D:K,9]щ]k㦑@e\DFMSh\UG_bϤ@
.XC2e@1nIxJ}y!4r5Bl=5ف(85ΏF׼1WzD!XJwq@35ѹSyIk=7HȊ+J(ĤXw/I6z^Ui,|C}KM/ʛhHܟҚuXa
"s܉\nl3ZmF	NK,MI`-Πd޿GH(gDXc_1S>ٞ %r{٬
3K/u-ab/Ϧ3@~|ac🂛QUݥ?k,&	U.VYM`|7ȼ~&ٔ$
6vMp_Rip jI!6]N_/,o?M[N6.+O;J#+8W&a|
+:J4\SRU$(HJS_5^ª沰Uwv~O0\GF0_:lFP_X%<j#ظf9FǞivzCˤ6ES#h艤)H1h`aBHnaa
)byQbd6R}'t9Im`g?"ȐZY҈
N
u,y#Q|C3yo+(fXYTWGldp2B,dn^Whg4THBNlиJS@o΀q&U4ib(]0*弞k5כixG㬔gJ͐ݼ*?pO>. a5+<;m,Y4vCHbypݥZgKzA~-_*k09\
5%C]]=EIP#:@?pzˊ^Ū~xY{ɐzy2b#(/akHZT(D c-4	eK*~5ZpFI1wxs7Ȟ!=_651
8
UiG|N
aA|hx'8=
p `5IY`ǉs<8Lg@;uEGhChst\wnRĪgkt_AͷE3Z-ݛ]Nh&&ޛ8W7`Kilm~NXZKoWޜTU.)ܮ8QE3S#0@C<GoVG:pn\`سj<R!ٶhIɍob4U<#{//_mV:c_|(-T1/# 7Cǯ'oOҵ yѦS<"zF'aޢ@3㑈%ĺbL>?"W,]$-?4ͩ
h&77jI
\M# e$D")S$Su
<3lrV~t
[T*i+#b+фk,"?9AëHoX7BSY9	@)Ո!5<n=w9+e^S۸
3t\(uCK\@+{>.l3dm+ff_fTOHq"K-O-
:^s>fyM1/
=I}e;li _զ_R$MYG?z-V#~[2#528%ap[ÿ5&TR
Ǔ|QvNh<*[bE׿Tv/H@9lDpZcIZyu&&'웩6M#O Cn3+LF5Ț'w:f(~	V;A>0\W̧78Py6~p1 	ak>1a<Igvg?GǢ>]J{y:oQa/,eVnNs^Q;/a]*H/qo*hٝ'_*(0cS>BlqY)@Ҷl :dK6$xfWW oP%}$^R)	̾`>]~j)]1,}tC2W#jNO1jhM5Be"wqc_2B#O4k
;iP+ki
U7$Gn [(oə5@W%A3%0½m0NbSƼ*ilonJsNk#D3B#Y+&TQ`dr%xbH[,`tgn'LX(?z*rOfE3ҳh\%M-'KG0(`30FYׁ&
CIc&A/g<UB]i.+`i?>E,厑<꽞Θ%""+؉<eaKom`@nl4A?[jHC)X<C`é)ͥ|p0wNse/M7.MsBnNߩ+b
Tl))3?3
pa3fpMִU%Q6HD=U%hQgq٤ i&!BTQY[>˂xp4I{D}Pt
3çnR!<W@bm
SPv5\iu(I$녣
s}#P~|ծO %|Ey^C3xǂk
tQ胁6PME Я| yίI)GNUB^͐#ÈHz*ڒ;F@t#H%(IeI-o֛sF27t;zxj(ox%od%ȦaoDKTD
&eJts e`4w&v?d~Qr,QzbCϡL5YpD 麁1Jn2XKy2Õ	zbL݈T#aKM	.Hx^Wg
ڞI3X@\NWVWw.\6x~R5I^UY<J^Lu٫ @B'B`+3w?V+;T-WF_;Jj;#蜈/}<]b]VcD==5U&6[CyU)L/JwaF.+R@[!1k8/G?.VCy=/m(&E!dTq dŊ?٦
T~Ck;}ua2&b*A
.ଦ!^ݘ-=͸ߛXv+ShsE3RDK@ҎEԮ@ \9׌Z9o0)xOwM"6TeηC#trpx@ej:y`:nmߨ=A^ENK#g8PlQVA1s!GZL%rylLX/̧"FΛn
&2g뽞Y{dl=Y
Oˁ9
+}5SaNyC?e>4¸Q;-0k0ZvrB("sk*a6<$m1JBXbZ]WEjOg>9Kqٻ0~>
,W)[%r~l M.`5Ձ:
Dơz*z,(՘wls*8X'}&.;_Kp׿j<_1M:wC²+즻L-M0㮒U-HMu75ԍŘ[ƔHh_#sN.s}>㲏:Kʓk0 r+6|+tVa
P/>PaTaOxsN-*ס`D@QV3KbU+ LJPE
]~mϼ r<遪úUA.5((c|T:.hMW8Kɾ;3V0P_H?X1Q)GajKU»^-xH{ʻv$]glf^YW|y 쟱#mZu0)xw;f2<C}pK+n1ɻ`]U _]$,`.N(cu?R&+q7enfT1^K+&';,Ʈpy&\5JG[GEXI~.ͺs\XMyJ<YQPr]N3'@T/B,h0ejyox>O%nuci(YIhtgSd		I-FXx[i"
_ɐV$&:W4Du~דs>eCSm
=gyjZQjcH
Ya;p<o&ȞhyN

jXI	ڙ9&#/?W(`S~TLL[h'jG)GY3

}RGàsPQF#6fT> CyTAE\|
㭾BH<c!/nV;8ߞZ'}?kG*e:JPp\a?;$n*	;^vuDRGLY)Z_v@o
|V8=O=`E!Cii
z	EkD<HY#L!:Nqf̍Q7xʊI55Vsϗ蠼Z&
3b
-kUPz#XQTMR~-5xΛ(LM>TZIY@|N1]NZ.m8?urOXpݲ"6=ckWvU	Ɣi,WUŊT57-Vx_#<&/$AA^X8MaQT0>e0](ԍ	

MN>S@ec%l
*__XɓG5N
lMAzCz%;
>뫏<ʱE%Xlyfkc;@sӠMh+8F#]
*48"t>"PW
!-ɀj.T.m\s /EGЍ)%MmeJ8ަФ7Mr])y}7X5R9U09(@Y»g\T '
f1ԄY3ӹeBYj|2ˋRT
G8\oi gUUN-eL+f(
yC5Uz|~LBŰ#eKpԿ@^
;byjc |iŶ`oMeÒA,(DeKꦒͬQڮ.9+peĻ%*dn<,ip$М;+.(3*GǨE<6So(϶k^}:w]|DQD>ľu])٩<Kg9KWq֚j%|!زԻyOGt8E*85͍Fc938~9v.)'Pǂ1'4%
⇔G7^|=*Pc40jZbF7jM%nh6,b;A@]y*3ˊcNŁ@PT]$~Ń6	?8ѡxίQw&Lc#EO2Ň\)%6Yb`%k3[NI
ydp#Xu9ۧ}!#f5c")ӳ-Vf 0'lx"7ף
Ҷ)XU$IKM/7pJ=7F_ˈCWDB{g=557d
rhf,Dd;Xk	'G1&q}fKSCZt
o:.ZfA)rEdJM"`Ũiv
jrAo
2=ટ(gd5K?bPs_!jMϡb;w|}/|Wrńc/0,sԪ}d2kx,ɑDq{ǆiuv">4Ԣ%.}j{esWd&ZlkmrS;)Ťsδ@+?
ں piVTD#$&Z;pyI=<򗉷gdϷ%!h8d:ݶCqK/PНp6={Tꉤǧpt0p}*^&,E5i洊1Oh)H?[$x0xAs|k]FzpܘpUVt9Plq9`1SEJ b9RT^D/K;E'嚇*wn>e
,
"}i畗x]ɫ_w ['یhR>%B.d&@FDl1@4wIf3w'7Ad/vBYR\ս܄^;g&:[IkW<gȍȎd:ǙY{IGA1]&3|Ofkظx})B|Nn[H
LP2(ᡪ<J܍Ck
:iw=#`	}!pKXF?5kAy(35iT@^lrEkin̂ZRYI7t0I*U(+k{ؕU}D%Wmgj7(Ќ`zPi["9O6D!lEk.sf.L";Vlh)륡@"|M(0{l߭DьTCw!oZ?mX5g;,ٖ#3X:sv}b	.8^Q8%,),1ab?Fڙ!^aS=m"!l2rM 4ܘY\܄BiVɺC+sZwP,d812$е5{AM5#')HY@YdGP>ݎ`̝QA/:\I/	ÊnfϨk,1RgEAElq#̹0zEW=> DQPcl_iyزpB+vgkkdk KC4o*0Q-VaQA 鯻\Q]m 	F}ْ,$^IxQ_MNCqSCMc˽4+ 
@5:J|5XVOh/8 
@%2af9J| rڀ-\^е8(1Y>]ˈ!@?4&wT(Bxznn+eH.~qei֡`R2%q\EE'(6tt܄n 6ocZx4>KTR'
{{mdw"0!5jí^aUD^ȔuHZHN;{4{eU'lKrg,^r4#~Jq
ɖGgY2qWP3*+'1Ք=/FSUX/s7*[^{prIe'z-eM
k .4ʇq11'&3ܼ~#t٬wB\\A3dtd=/)@I'|ߏ!gd![26k
pj(b5Q.J[ĒWp0e5> *@>jfUŸ0+kqL0zgrv7Bu^tlu,szk,Ŕ-mHw_84Pi;hg}+F]BWɲcz%{vupc?!aO1y$8G6}\vzK#r󮿬<^a|å,W%"0+d+/k)%ݴyL<*p~SҞ.r(RKwCf>>y ;86WsYDzRrE3Уnf\Ut1A FߡF-B" ֹ#6˥QAna*EM87=z"/-tF)AM\8@ck]x Ȟ
Fr)xԉuE6x&xlA(*ؿXx}a& Yh9J1xo4\
+m~J̐kN҃7/"$8!u.S%/u{EB=?yɄnNT"(B%i@̉rvIeXnǑPޙ
mnG'8*Дk59K7_C4G#Ğ-#2M/ᆻpdD׶?_Wir6E~Pk lII|-ׁLƅ#p0gB|da pC)OY=3..x0tY<#E>d$"p&7\^P.I"8 ٔFMEkI'AV>ڑPԋ^Fp:U'&֥3 X:Xbjȧ?s$2yIXFywց`#[oT
gajCHoݻMڜPKrےA]S-1>9zxT;2 VMrŲDFziY;۲1_REic~ѕ~Qw*u킫8!GiEqNg7mIsYRB&nJGU2qMQt,gp4S
b):C`Ip>:',B %<_`L㋁4:V^vE2{xlΌ_/ '4=DȼuLſ[RgxTC!4m8Wmx2PkX4Q[ݞP"҃^k/WUpig::cS:e|5"JfƟGX+2+DULq	i9W6oy`W^5PI1Xll76|&	' '-F<Z_|lv-^K&~U%덴u>cO>R &B˖N_E6%h0Da@؅	VOSMK#,3xLN
R^/)I'?
	W?Qbdn}s&LUBV# *z6|wVŬN=.Pv`QC[,f.;oײa{k:P%A2adqpt&/

7hU	1$G(!(`!<,=KanмUhÇ]ʊWY2M}irE
	/;@%:W[Qﮪ (<|\rm\;fE=_{-/Du!4(p58Dj/<Fi҅x}}B>>U)oyD妜.MÚ;<V(ZHjF)ydAMӘj=\ʂ1n	RLk>uJ9
-N$bT\;U'6Y&8
Ʌm;U$h@d./fXb7ם#<ϽAhXE[0yvhZW#''vhJAA	=	rᱬKa>9hAg6>i!-Xʅ-p.co_,f.%/<ѠI#8t
q F2-i/u 	?H\w黉%$@.dڜ$(D7Dgjq1~nAg<Ug]C2/jƄq;?>`7uBKJk|Zv+Z2<>WJO;P̧k#&hiHocv-e0SRޅd15mv	%@=Tʝ3US٨6,bg9𐪢=;|p9NmYMg%b2%%4>-T7	+YUuR"=7$jʿVjnOk%D-9
b+Μ]a(j@Q-1 ޷##<S2  ʭ}^J:{mq6Y
 <4&<X)C /hC_/p

l̱)4T6tFqJ8wTwK ߣi&`Y7L.	ڟ|2Q(ʱ	KR`0g#NEwEPpbcMaQ~nDP׏&fzW簎K){	jPc] 
A]i);c-7MФ`X<I&5b//-ɥõ.FyKdP叶9cc:|~&f
M!)nP@FSa,2N-ԗ@$1yXзedn*=_V=١j$=Aпuc+jA@aI۩
N;{``^m=lmiN0:
M-ÔAգۖp:2,r
};y1(2xUkK|h>*f5!co!'iZŁ~
Z[,V8=h
.
zՈ}+ܩ0FLr&F:ʂ	(NOlX<bܿw~Oģ+I+U&L{0v`¸R(
4?g=AM*ጭY䞭(ƚ,XqE!ːYsv, Ƶ2N[ѱ;{Jr(
|+qhEڶ	ieV6Rb&p<[HhE:#{li$>pQ
hTue"mg ~Bp>uRyXXpᵫgH߶3	>8t%1^B8mRtéKbic`*8!nG>97-78HLN
('3.社t	d̂A<ngmaHO0gGc" !ItUKmS\4f
'4}Py饚ƴѪ~qbq
8ZD8!&VJWqk:5$|iv?SI>xlD;B=b8pX-
IܙIJߑ/+K0K68cWJ<t=\$E}ŪZS#i3j vw?}?"5UH3i=/Nb2kd";kY7<^8#xTA~v!Bl;RςY1/L<s
TlAk!GSu}s	a%Y%WӚRpuIW8E#FEҙ0c։f&󴇍:YW&DYkJEݓzzKks6[a⮪G!4;';`qNEoFD3]$X Qqi[B=u3Yx]~_Rx̎"NYE6?
j" UK}MooxEk\ϯٕUqDN}.,X%a6	:` U~D<?
l)qV
9S<Ɓ@"Z斮oSJLxn7}!~)	!)1~6lv/xL?(jvj!PӍ|@l#/SbU6OfFc')IgI"u;=uY_'+(ӫ07r̧OþNx`-_Vc,iW~)g\^5:g'#eno.r$RDt@*zb>PjG2zUےwp!Pwa,W̨(pC*Op'2_\gEWŤ??E M2<e1TNZJ%qv;RGKL!1Jϥ+V/PKƺ߇w胟@y
?K#<"zFn#r 9rܭe^wʅ*vێ
=:~? !ySDk'wQ:`OGʟ8ft %VnY/>ѿJ5y5wxoDUEGV}2o0MSK5- ?J~}W'Y,a\_w{5I#A6
SŬӆah{Va]d4+PبpIwʁ|]%Cj0|NU8q
_DtD!qsJ(:;\sy&6u]9)*hf>Dm;?oe>PCGWk3
\goA
<hׁ66)ekr }dJDarFրяҕ	go'4݅mAu0c(7G0OUF>^"~:n4H!7SO,v;gO3uGdy{(<~}}NϖLoq J[g)°hAdv?Y?mKSZˏh(*b[\
mo[>*J'[[/>vٰ
9{\`\8^Ԯ9D5w7]uRQto6WDrgo	MK<-ӔVNq'S]Rn''\hpcԐqvp,2w| Bm-j3CQUO1dorJ
cUyI~gkBmoyq>\k%aH%EB4
4kUS`Vk%L	qE	a빇غþ5zyVF"=(5xS<Zh?#R/`<gZ胥ڴ"P^/Ar~0tԀTҐXbU"L?牉fiR#\½{D6X7xP|Aã;pjtKKzJXs33U]jLƴ\e|+
X8 eGZcfm7)<H7;&F/~Wf(̽t;
C
,h.1p8zg-3"ޙ=v=gM_eL%LEzߊfU0bUAW|X?>.%unHѾW[∉3
]I _QUx4ߗK->tGZ~J7ŵMj	űջ'dۦ;6\e2,`Za두	x
Hv-|&x ~;?Ɗt
(իv;:GOj4i@+Q_-P`ʚBNuq!2EY
e&bP7G;l;t V Έ)*c2
*"HW
#<g+u
nЛyf#l,u18݅6ۉ,	j*{u8_-17xr(S=[eIBQǁȾlviWF^ĝL}(=^x9i'?b?}:0Opo[J~_C:׼0`K<uT#f.K4urD Ŋe)1~cc}~ޝS04n+k&z1LzVNNmuX Զ~<3E
ی.̗,"di.Z$gzvn,uگP:aQq%쾼s >mOvoK!IrDH=f냖3Fxoj:3x
y[弩vvyuS+j)Ϫu8Eur8Pw6yTʻ/*)7Ƹ&XkJJ鿷
>{",pYYHG{z!+LNϮ1YMҮY`80LWKYl7 @!?iQ"փ03DAᝲ
IUAuk-g|~;>i5%6ZuTKq~36XU"ZT]=ȚvkSH]s6J'$5vV2a_=m`(U uvj$
"%\(4:{:5
:*>qu0tozjU&PW1,_
Tȍϻ;-)wF$9]z:n;_q,iQmK;J}&</+x:&^j0;B
Pfp^[匢l8=N[1_.=.ܸ4/5A)
@^1b=
6:B/Z'yr0c+
bC9Δ%/hy\i?aYuuh -蛍܃\?;dN<kA'[7_
1T}]jSGU+CBHL^HDUBʙtNKľ"G;D;>r'd`>-n-bkȸXzn=4D2C0;NSJ+-|0m)IpWsNLAH4
@A7f_+	Ӹ@e6'ܗIU&ΐU(# 24KS,pZ ?r)n{
-@Lie##Ăpƌ@hjdmb(U&i5皴o*3D{7%նDGLC3-?\Vh;?>*cƢKT%^WrTe;?"W/-&=+ʁdv
T\Q03x	9z%$h^FL8l9U6aLAݭO&bOyf:𫼗LQZ?)EVBZ15cՋ~kEHjs%V3p=0F䊵Z41ǰ)o*_a@}
I)Cn=;;&/.
0ݤSuݕVd5GŻvp>IUF傆\iM0#
.EXP=\1ʾ&1^qe4a(J@u+>pU,}%x0af/OdYJ,?|34gǚVxchnNhu	e$Fx#pF4L.Va}s2%cF5՗"m[IFGʔMH/b`(
)@!\qB:r176Xӄ%v#Hxa@R1ւtб&Yi֚ɜ>'Uy$GpYFbc-n-w.eGS.tIzzu$C]Wg
ag?a_j(a\esʌ s9Y@T؁
<+a:
gs?͙S,Av&U: O<tBʮ	E6A+6+cv+t'ܪua	w,%<bnvH~Ѣ/yD|ʴg =%vA,
= 7J3X?:(d~ZUO`O|mF]_>.F9TS+9V,JF咔gW8,W,%=.=˦~YƜ8)@^:J,[xd4Pp]R0o;iA,gk*R;#
kgzqA
ْe%}v,Z*]~3VMku[ gW+_'U3M!-$f
3B8k).x*}p܄4{hh;ˡF=zGWk??QFDv(Ϋ>E-kRn`wih[?S["CǦ8P/ |x)S*=Ca?yO\s[QX`6t	
\JM3:Ñ79cHV2rhV8Ͽӕ*+}x#NtSOJ |]\?I?Ӡ.<=] g|oJ˺)INծ)o!$CK-=XL	BLvdm}aDh74maSP_hQCBh'">'Q-wXvV37Vs	'V盁s	|Ȍ3ir~ƙլ$`Rϼ1{_K|ar_cLWԎVq3ـH</ 5q=	jzzGgmi[S%}ҕwwfS1m)0tN_.OclWmMTM#䢰'*LnS.dȲ*7<o6<R ~7q~#t'~۟JJ3~/*{VlL
'.3޽)ֲQ_owO#"$bPem+ۏN4R\^]ɭտY3Do#]6d]9,Pt)Wi
Z T%>{3+~3 TX
\@UN`Q^,%PÈ|Q-+#׈l	{ށzUњŘ\wE>dӛ5br\ς|)d(_L='j 
hCŮ^Au=C>G32ID Bj7euW}_ V3^!LT
m޿϶}G'o'%He= -vJ_QT*l8xl^J
0<ed9ATToqn"z`%@~UEi)eO7D#4SfsŻtʂ=
"?e|Dhe},)yզ":RMy
~q*j-357KkF^۹
`m;^xN;f"jJo
bG:=$srsߠr]*T-mh|l6S67YޢyD'O!gWdO,hԦ^>%<&@ 1~4*G
pVFtxG*I
4")
sUЍ"Mpe]T<]
pU!M(L
z&ZQ.eM=5j~e]
zvyTYc1$Cp`;ΟvN@~:i4:V!&IpW&awPR˟k%e	Rr5*!ItOѐH#LPA;;x!TRτ`V/N.f`.A릸Z
 bp{ծ
DgyS -7+CQiP%A_ED?k)
d<x`.XvzB8 XF<?#˕	3az-%^M;*~@:7UoX:HhC_%Z~3z(șk$엜x?L<g׬Ab)跛jĢi-Nmip
!j X:=SΒ>(pzGy/QU["Ъ^e-L	zIɾ
Jit[z9+W<9|&`*=ڇoN3ZrK$ԆP/HL*SGXp"p[3S	/ ty+Cj;Y:2ډ 3~K S@҂\MC7T.s@Nk_2ݱ*ec&]ہf@1<A9/=|`fy|3YRuh7w ƛ4ZcF҅_??@Apfb(u՘=&l~ROaVqunuΙ:=74-SP\%\,S!Ғ(}ŚȖ9,W݈
sףO	˱I=L)|=H>|v}=:rE+)=,AZًvYI_j F?x{Vڮ'Ա9{(xEPC&pφ)L
gʵ=GoD|KPi_Ob~-CX2%s"ˤhE=9m91D܏-ʬ=ωdfYQP{L#5|U gvSٕM.0zRnˏ2bŕ)>݆eYJ8DJB`?`Pc8sH{5p-O6JRWKjH|
05mB	999}>x*Щvם]6!TvpUJ;[Y9a@fyf	P@YKЋ|T'9-g۝|}L?Ӓw=t6nzt@5С "-48EV&o
ֱ_n;(;jr8*kM
l&HZ:-c@+=ʤ:XyZJd|0JoF2Nz2_U,2gVFzɲvZ(\zaCg#12<kN2<ap hn[D
l;W_Rҍ[|NL6^H\U0&AS%B4~K¥ɀE~Hq6_0E9ԙR5V:#&T0~dh11'AhTk)WI^2ַ[w"pi!Q3M>{>n"8E0KT2*yyO?%>G?(9Vvm,탷[]aHm![o$basD(ؓڧ'A6輥|`Ǫb3A#MyBul207/
K^3
pIW7ef/\&YVFh
daRZ˙d"-fYLŅwQGȜ񯄧>`NM
pDr
t}šEpτ&Qm@oU4&
KF,q!1)Xل~,Xfr@͓*~7|o倾ZlM3ayOKI4/qŎât9K`p_UXb*)R=@.K?X^P0LH8#;vO\ے+>iÙIXrrq zD{:hԯYE;d*TeO>S#S5\~]C(ܳ
|(H4??ZVyGl<5_j/=9wM+
`tcn%a'~%Wø-p=G6xfu'h#x@g9"Bp@Pd:adu-ϑt 6fMi0{|i%c~d,:!o5buwbQR֊U%ZXQT?*iocsQn|F%(3}":)Ex\sQS+U <VĊ +3rK0얞Vc+3@ K1b}7e~w&sdT[czxD}j+3/bw0_څ
&i\q}?]CF{)P,CspbG
:Al8->WEl{_aAY
T&	=2	ndMS"0ja&,\aeicO'N YhL9nʠ&x
ҹJ.X,4r
U
|n6eD|"<
𭆘^?`1?[ڨ,e\G05mD^~Bm ,y@ePHu%qZQt^e*'.;^Ǜ{OKBiwBy{- &W9_%lXOݥ9dZ
45Ֆ+.硋:xfpaO&]٧o[L'-96)QSary7X\fzӺ`.ϼ	ce]-sܑ۪sW:*BhJm>;TR.7Xh 1xHvj:jќ?~p?TV
wmrkR^d115K	6mi]Zפ~/m&վ4YDpob[8nW	5ސ}}),6OLi7^^6
	]x5QP|ׅv gRA8;J9}3b	0GXvmgtxO2z?06xL
KIQI8/KkmŜ̅U\=j=HbzKKmpP4Nع,S+w('_p|x#FY-1 L:Fr%C¶n
,7wHDDBe_HnPTsrZ<s5HG"Q-''P)cP
JQsxjW_0Kx+%x?$:+DJ^/^E
3Sάf-v*d!~S,[ JLf cm>yH6d=J \}Q\:,RhpXmYl.3PDK#iuO۾q Y>.UYBIZr2)GqY[҇Swo:}~aIԇZ.Ⱦ`c_<0_PM~kn`Ćn;"W_ɿ=cwB_Zt=hHPomGmv2>ų/mF1Vh2MUWjz6
PWʔm!n`^@nhF_M!v<6݊(xL񞝍mKKkoa|Z?Z|gťmӆIsl0> \rՌh-y:
~w!~=F"zbUnYkqVAy.<'{7E}ywʩ'vuJGs[~F<Sm_Sz{M0IU+Fzon=_c AX_!Wޗ##"5	8f,WqDmewB]$>|x(t0<Qi</Z%ըխgEt_2OVr%K;CpŕABHL3oGT&	)E"w)	T =;
I!dqZׄXirމ@RWkJrb>sh;qko|]-xW-G*giê*g ,Dg^4)2L3
Rgȶ63-_̼:k[X}PDνo妳@NJ:lcb$h#gЇKMDv"k+$ͨhy)WǨ'\ڋ7*ȨE#B@yB@ >tUj/ĞT_뾉1V.:8d؍3(1gBnU=4[^21GnvZ逋)jHxƏPS)VJ)e&7GO$I+	 HD4aй[G9Vxᘁeco#Nš)j%pV8O1twFYL%Qx3tC.+>~g
osZ:7zGh]"4	y˹ci>35N;#N0],W
P. Ք
h4UޔP s=UuȜ'y@T"*$'nkiMCryps6TU	(OabE \˃Ej?CqULcxKtQ#Ʋ_¾-:a`e(Bh@{%19$HXR^ׄzzDnN1-acL|Å>g8]&4uFhZoL[:u=8F Y5>i ydWO9cf<*
NDug?FSg4O"<@d1'R!'qxH+	}נ[ݾ~Wp\ 1.O@еx{_Y(imX#GDb|\Fy:ZisM-,>!pߑ1864c,R'k(5JC-Hnlv4y4ecfU}P44V]j=ؒlI
i
ɫ+v!5WƎtϚ$<n^O:ė=ba\*|_t
,99n'(-1<9*cF	˹zpˠ^aSƊi\ߴTeͮ ;F~lǝNz~ȁa%w.T/#xWGׅ94.,4ZvW/5?uw&
&MRI;]47d~+_PeLG0v_g`Qnc=
2j@0r"aEV4O< s	i82mqv՟4<b3_XT'1˵ @"2lT@sm߀ @Gi_)+"h0E}< qyS5%1|i[8Pobñy73{&Ln]:$X([mZЭ|cYR{r./͝	P
 y46&MXHp*J+IaQwfNVq:@Ci̳ {D?/'DkY
feo0[JhAnѐAu9^3B"	][}(P8SHdO_T
?7hբ#FX}ڈF\<櫸PQoD{L֟#o-Yf	7,Ą3L`msVR"gqqD(XcCU@ʂT((:J!Y26")xQd*L̡9RVv5 !{q_x>&u+̡nߦ7B>vdcsu
lՇW(
&",l+#(f
ɀK^fSsY(_sXCj㟺n5:+d#n:'U!M{57JZ4*uOy_!头zMŞ~3?_>!Stk.5ɣ2S
~Ǘb<`[& NRlv5)A`]wSI2J
D,4d\"@"΅~!D\ƌ/:xhmmԡ/֕0;JIٖ:bVOPF	O#dMWV
v%htz"Ǥ%	"{4,
UU,߮8ymDun(Z/`Jwiy3ˍep]?\S3]ׂ5+pnl|>'o'hHptbDpΜNwhty/\|wE%͑5:G)vlLwEv0Nk!Jw5Mm>:Xi/j`{2IӦ\;cojevP&ہ
@Ovk>U	hޅDWh~
^
{YFkMaB59e\눗CdGDʢn[	!9ۗN4 KW`+*e?ᛑGPvb\'kN2լ0~&zeSj.6h
$wlm00[857+ %Źzvh#YFpq#`]\~+."&ğ|6MfGwM*~\wϩTҺ9_̡j$Rs|EXWFaK9 ?{?x@jc!"(\HKM{yzdIa-/)	P
VE1
m 蝞A'̇@C6#_Y=ށ'7?0s-/n3xjomtzlJKX3{̤G/IԃÛ܍6*H.^wcbb¥4n.Z!<ҚkҨͫ ύe,Cͷm>t7lRR
%5%L,Ý@/1F}cۏ}ϯm[1%,hz3BQV*u@H`5*tXb|`[#;.){@[h͐xIƠw]>pn]5 Hѝ"^\`&Sϙ
s=)ʲ}
{LYҋm921|zz$E1mTMY:ۃ˫65z\ ,Kr`ma0a?m#M`<^W|z>jx]zrŗi3@ڎB'_!uv.{ĮLi-l־(]b-O&\O=?	A[#'TY^+BSBÛ\V_tr,{{cD@;bzdcQt!}}A!|anȋM<BV8ډq[jVf( |qM} ÄFVNEYlPa^!;zM bgd>ƆAHVJLhv<mΪ fJڏIB7 3^L[8^aKyH}Ėq11&2`jYA,X$<ަQUro\*1T|jlz3EBUʹ]b\R V\
GK{IWmz?x9WՍ(2INw]AA[Xna^elhRH	wSDL3k	>Zw.V}%~-U/2zS
$rbL( @`z6=n%b9k@K`D *إEoZ'/;}/r&,LÏ ÈX@\#y,(*YYZm_@'ːISƬ q6Y{Y+O
J5o?||J)lG&wm:EE |ǟO@S.M<1n[۬7CN;I~/wT -:
LPMHuG·0XdGƦ͔ʩSi᪓IuT~Sj1`
YE6i9IPe:N.C& sd|RL%5j8@=.@oz7&i*r!{<#FG$ *wg;Y	lXWȸtU ^׮xEoew/dJWaN	>  . ʹm*[/mav0	6)a6Z][FUYr
sl{Gcy9(\/OI٧E[
hu`;9&s"
-Mn4"z698RTLn91/MJ#'=^	'`8jӃ!}zTNnaғ3EiZkWe8;3}a!}bE> ٯZŔ֢AQCw?ȅ`jyHĦ}$b_5;&c>ixFC-vĪkFT}U1p9$bM{=NBt&<ED"9_`,HC݋8F*{6ދsx>l,Hap2! ۝QǢaV7'$tWKpBFҝMu~?,7
bӹxdv<~]cRaܙL3XU:Wö/R",4m2@@D?D6S:m*um~L}_T^;5a }qk`ى9# 8Ȼ_-aP!#P|o*+ILYf:hC]="{3jh*%h"+b^EzLNdTc$N`=*!UxY_ >hM,Sht</fFF)Ew1'sTk>(?֮~*3"0Xȋ{o[<7D6~<vD +{'v%TDBV폫mj}Q<;.fa־1i
ϓtE4]Sm*|ʠ)0\וIUKv(l{, d:ɿsSd,ǀ>#rū]	_WA0M+ 劔ǉ^tX1Fǖz莢T5Aꢄa!S ç<~e:&9{x1V+5L)pem胉(&;0Qq+ k0)̑wm ?$8hUxSN/ ;+^9p*Tnt
Z/]ME=mv/v?P2vnuйɺ=鑸Y	l-M3"~v/^96Ie5r!F!)JD2CgĀM%Pr=xia+`:H0P4-8c.RX$̥F2zg^bkhQ$V9@pM*9r%l~Tps@>G-wBDL9:Z1YΔ^U o=cBh
kuYU7ǈ%<'p]_=wiEݖ
Ii)mJoȍU
+8-
1?9y
AVB8~q	"Sך[L~_J[
Pdrڄl0LEHȘ`'tH}-3QxNz3QbԜ?[]KMhYUNS|jk1Vږ-5׷
4BFGtնJgPG&_7IE5Mnsw\SR19e |ܓ :G"j!J?
i^	 {*Sz3%£A[?6}IfgG΢Kq<ϧdޡsO M6%d?&+
m`VHYm"?`,aOے$GN͟aͰK[.jgB<iRHVPwOZF6gςUA%FNݣ7c!OEEFW5l
MH:U?,ЮT]L"<]mFDPl' [H'l$HAX_q/wk
Zѕ	L` 9dTi lUǧ8 3ٱE,Z3^[}@{J|G<Ej#&pf|tCaH۳Xgy7'TѨ1B61IޛxhbXWrڬUX`4n^vTWĊcTkei?+890=SI %ITO.T`
cl/6 ⏐p<k䒏'UKx-pz'70s:.hvf_~r!"{r:	W`7Cl残v'.?Ƥ6ipV=igPMv[~W3?֩9xQ[ 4e)çd
:$Q2W{hѣE:]qʂhv{~Ts҈tXk%
YG_PC2A5й@*/Pr?mhô(!l_#-T>ୖR<NټBnή*~Lc(qNyEs#/?Ru5hFBJRuyzr.SrkJeG\Oc[!5LB{;w! v.$YÂ!Zkit-HQ҈P?jAM"'
݊T)NIeAt25!Rx5/S3~6)=8iH18fjeT;4^i4U"al[^iUz	+LkU1ZDGj1"f b
d--YnY1<۬/,\_hc7QDm['2*߃@%	{OK(/\;VHV9Wiճb佲2< e=!`g8] N	B!V íUdZGڋotlF/AW"/Zҹk/hqԦf?.*NИF=$amj
3*4
vcMvjIdJD >1,M3&-VYέBH[{!)0
p uh+=L7I#.lA#۸gӒDĎVI.i/epU%MG]	fv]܅PSj^2p#D| \c
Hm|Zǹit4I^Jbmv K5+ -jeYZ2OZ֘2QmQ9PH
ýP8ݎ?3҅Y^WMH<<Z`]}[&ʪԙ,)lO~T:KKRMM>}?uQcDPN|}T3s#6ϊ`C5)FX5C먤+k4
	=|Sŵ'ې7zdCKlX:IpL:Xuu9y%Zi/Hஶʩfsfx3>c!+U)Ym#.+ߨsvre :@zeH^HDiWYw	AfC#2T
^FcQbRC'O[m62FQ+~:/͑h?PSg} ]{+ˀ<;ɽB_5оɩUx':3z-{v9aUjۊ +OC`?m:RYJ%)19za--&W~Jۜn^YA:vO`ܦ_$vyF.f%QHON!B¦rbptwDaB#|Rhb?JhaK	D8X(x$Y&)0 #R6uZ>b^tGTClv;-[Tm4݌|Ҋ蟉A*ϐSȯ|8|K]NCItN_B[w!kNO> PM~IϬ2|0yQ!W`c_	f| K(|b[urȫ/m'P@
HS1$nJbpU=sPЛ³(bR&3I1D)#F4-h1F#Qױϱ>k,?=$'2-7 /lIrT!+ą)IPuS[3?^(ɐ(|7Vfcw3YTQ<'~^[m%2KҰ
⹊ڦy$,uRB3iOP0	us"NiCd5*M@[ܖ㹣/y!Ξ2meU&UxlcݙLtQ-Vg6@XsQԺK$n5|{6]zlNd=1K|OAr<+q$0
JWu ^Y6vl#}i@qT,VSdzI;S%E@JxazνR1uFL,?>^eK%ghi0/VG1GS؛	g
<q%rezAv=%(B]m@]&O(r|
sZPEJ@VY!}~j<c*{e
`7BYlk!ߵ114yP7H4PGDؗZPz7xՔeE[~m^iJCMYhްN(=Yu+,[wdjғ76k.!&ͅn1lKay.
TR	u[wv& ǚ
 ;g2=BeE|}
^
\CɫuhT! }@TbO27'|Zõ՟cod<jeK4~/d^-ۊ+Axw<
mģ-صn'JѕxyD?z
)tv	z<j"H_<$_>$0=O'z#c>W]61I*c4âTu=(35oU|md{pYͺ{ۺXwj.qȩ<䫿oǍi2)xqբQjq}ݬ+;Is!9_Џ7_y!~L2,^Hiaeo_Y_DoCl8[Q1#7"~hxN&L
0!c?bAZH_G $f޿xt)\V:z`vr
i~Y)

enHl-)$,
fk9]HFrD'!ke[y?EB5w#	knC~LאL=Bqa;i>R؈Pxֺ_|4b^Bct0:M:@CR,@
q-ACOi8˯'IFr~"haUjjpMNc2ׅ5.pl$&GK;|zZFZ6^AcL	F'-%{P-Uzգgwt<y:;5{`4KcbO@8_`X'B70[?]]P\:=P~"3Ფ$Rc\HBIh_wb1UIk(J|VC]hBg4"=Wa{:WBR/wKg(WyqSȶЗa߿mrP;Uf?\7S:	cL.,7D6jK!-}yI>!>g?l{u&6W+^vCKyFOILwQ»Er#ʇ*Iqj8Y[vw4!Ѱ|@ؙi[Mle>j\ʃaLU09^-Q uAgVB2"wqa{*Q!LW 8F6OskQQG{ n[	> Ytex,Ck&jY	_huxn-*SwW ǡ$N?UxUt4qeJ磺0D1gv8#NrUM5 afDrKأ^(ҩ^o$:̱J(wGR4\MzQ<BJS[7;h
s'ÎdL3!VY\Xɠҍk#+ݰautbOYZ^߻Z;xR۫rI)H͝&G05'0O;p.]<4H7cM7y
~~zOA%l,fnwl.ܥN ErI=Q!6]0lMyMC!8̀ڮ2q
5$=Hʶ˥Er4p83f!:?+ܳ>W 0QSM?Qb\*ZߊvA\ZR ԶktB;<𲳙YrR*З^ârfABF/5Bij@Kt(&ȼ]'IbIүD*¥^RޠjdNA7,{)nMA݁cg
g<\WZ
~یxƘkULFl_ooOpZ_KW퐦0RX)1\elf=!bӑ~$13BA1!bYc%zǣnJ{SE[('{؎ܴ͌8"ο4e$ơb(6DAm"6x8_˩86N\hmH͡!=MQ9]RБ!59	@K>wgtq!Cҿӊ%^?RJ7*ry|/bD׀%<[FvOՕn/Pf@81RbF:
V VINs@)D=wpDTcfqXI6`kQeWM?`Ml_7
]0Ⱥ+'f'q|&̓'bQ.s4^9>?f9xq%S&AxnY>iBNmj؏2ɷtUPo] 6UsipurWcVmVȮ>x)':$_LC҇; Et0B)8!0'|YEBzdSݲw
裉+pE^IENq̀-ʜ?O?I[w1FԨ=}ө4Ǒ_5|oJ9,E.b9)$%Xz~ 3%}lZ)[n*C 6Hh@؁)I<y^fF˯叇%n	a3BE7 T@LG_\Y|].l.59RiE$XEB2ם+DΘZRuIPaD7CҷnInEqS!Y%4VzޔwԝRb=֬ze}tvGl^"(\/WJ$yyv
fpsWr{ ۰<|'}~6C F1ECʾtIaUlؤ3sq+,ۻ
oȓQfB7M}4d.$^Vc~`Q ~Jsiհ$J@$~#@~Mۧ-B{f? DȀ/㣊0$͚ױmċ9|DJjG7oIi*,VPԯ}%!6s2KoZmAT
i\ߐ8<~!DT
 l*#իpWdWu1h4¨CѸtTLofcoN!^#G-^-ƳZ络&a39fUC԰PZszil yzLj][E	oq߲i	6,JOw] d:?uF0 ."g!_4BY|e[e4R)G(6yZȝ*ީj&aªlf5\\i`w|V[BR=W	7?TJ9Bis{܎'ɹ#IlA{,21l̋I/S+t(	3֏sU5x ajv9r<*Ԛ,*PBtϗq8#cHofnФt6ߤJ,G>$ev^ɺ@UuOmA`YF1L26EJXñ@P~VK դu))/{QE__VՐ
7g N?+7~S2#ʧ; Pd[&!;5m%
~]f׻iG/Jk&[fLاնM
dPcg_w-vTouUJ7VЀ zm3
(
mȾ/?Qo7D1&P*[F2|^wS &F 
 86-㼪)4Wfq¥hԫɵC:raxRtʔI6IhA;R>͖[0WBJyV\dp>uVLqhKҐFGo$hHc

(Rs2Z+WÑaaqB?A!,	sJ "0cԟw$mkc~Ʉ 9Ay9MdmT1~XU/0kbt&7$\9!,7lzz1D]E+2,|`zJZߦҠW/Kr:*?"QZ@$ܩߩ}Dr?5&U~[p6]T-+LhĦ\y	RNx7le~^H2J^< JF[7C~7?5<YG.9BY]Y_89p|8<hgLQ=\&??Ɓ%TwJ4V^48ց$46&Nw~?<e`7Y;$<]alvC
D>b9Jm̹v3Rb;P'+Xٜu~k$ 7q1
_S>lc1N(Z"{c(c,6z0/;|98-1>wYbhed
ۡNߋBѬhwKNk.{90$lDYq`0ᆏVaX(򒘤VU`ebWl{g{W2Q}>:(SLH}ynJ?BS'No:T.}	|h	*/$%ҟ_,t99LW[w%	2?D/sz[⾫zJh-ShaE)26K}|~_ld!g6Fۗ!Zr?9׉
\\0<+a]TLq*uy#ST4#_?+κ ͘V)9@jv[^k!=ׁ-Ĕ014C2:xƬ]9w "W5MXh0pWUQѡU倥̆7a"VM+a!$UTLa_iW'++Jc_NX} ry] EUA-L!ț+Zb!dlv4m;]Ѭ$فM}=2##^cu?/Sm	^jrE@Q,>&<EUm=Z2O;iK Ҟ,
V9]e nBEvxח.pj?
jizc	ؔ4{YkkۼE-ƆNN1¿0Ы߫Q=|.	NЍݓq01`˰Йo ( ~6(@}ژ9A}4sy2`&]xl
6BYmc^":7DG{Ot '4WrF=bȑ1e\rdj0YS?E\u.)Ba_4toM7	pG?{.#4#	u Qq>g%-s-<bz*)FH`?/d-Cc~<"H݄9 DwD>j
06UʤHv:q.@( ۛ@@5@Lt䓛 9$Z}oLreSOV2az.} "k=	.hOnF/Iނ#nme/)6}	#paY(ǯ0"k#hB|^xE` {T<;lR2SP<d?]APfqМD}.ap$GJ?8/ޅ亍Q:/QQI3?ݒv1z0wK&Q#(-S]]1v9f^
Jpfy)X,Mj.1:ɍFgj|JzgVo>WnE{" O~gbB0uK;eTg'(+C<;6լ:2ke
)N}<cn9s"8.$P*˟;¶,Th/"bڥ7C(%~v5zR3y<:oI|Im:
?@8twC\Ԩe8ngc`Xy?hf7ZA{LawL:x
&I3.LdAp%>_6sWtY<j[9)ўN%D?yo[`X0
Ů0V^ m&Lk=#0Ɋ&oHh>Z)^VIDRKFwg	&pT뤴M_?̫:SUlsObs`VU[!J'¼(-5"qZЛI/3g*{BIP
Q3hXmDy$䉚`'ON68n|1L!td40R?blQ1: EMzxdЁcoQ1-a^D`>:kͦG2#L%^v ]ovar;M[SOWc$_'>Â86z=#UP7F,踔(Fx_W""x~-ܵ<oڒg7KE'8ߥXW*V6=:$cߞ![f@Ջbjf=()ly+a69h%Qb),9@i3f.ҡP0*{915gɬ-w|GIm,uUyI-̼p{/it(T׆EQX/3pP8YN闸R
CsE=jY}ԏ5
";@MD~(pZ_>{nhU/ƊE=>Rma7pI1 o^WX@Y0gO/A
4P4«"֤t'y;^hQl,}-jq5FU;zW+u(vv3SƯ27VP3Sn"o{Gt4vj]_q)@˚
!'x9d?y<~C4MzHe0U~3&\NAIM0H$>Vb	ڿ Q7NvEğlOH;5Tj5V9R&V$&S7*[R_2܌Z~N3ɇ.揑<<fH֪<[[2B Mꏯ>G`60
Fk#h "kɽ1L^"4{iU8SLQ9&hLZnhNKt>懃H7Z*vsϿm8P$y_5{ϞU|/|x!8GlcIK/Z/fDT䝣b3f|4ԍ01L>K r0ZdɨpI!*dk&ېiz42Mkxm\x	Hq-'1 WiIW+`B,T_9`+:`TPgm-Hq]N,N%ʓ;l-a=f1#`Ur|<oٰjRSqbcL_ P>IWb
Ȓa6G2ykX9)ᬲ"Ram Ml1f"g!Y66Ր	๒:|xp;=xY㮳grSKinĵ-~F\-R j۔$x5&g:-S$`c*88cK%~aJR:
lOj
2Au`M0O,(̈́R3A3	NގgYtw
%S{@n*R$H}#,<'!npVj%uu֩{\[ @ď;l?$:t['cˈ s @(b./ǋsS45@T5k[ܺDN)j"6쥘2^ :TuR/A(ȆD=&	V+Wj	NYvUZ[D4U?(2-Dr  kB)gfV.Dx%DtEfqfTYl&<C1d"0Ef]RCagh"m1jJ"\{6.^7(X*uD(FժHr4*s
O:ĤVdqaA^?~pD-)&l?P
ÜjM5ԊQWZ|:JbêI,h(ɣ%fMJAӅnfKĈc8˃܈t;~=EH{Z
."l -Ji
t.=mL|9U	!,F :GZt+n
9yP/|CyЉ8<[k)Y1~v8EWOyk@}z7q	F ȴCvEH[t5=L)j^R$KYve
86~I!{II]tinUDӎkԯGt	Նs'gs`beOlwrGp,I>eQE9b̜a/MCsez;4@k*yH *zVx
cRYLK4dsbgPoZ1& 3=㌕ΝLJ"?<qc>ꀽURJ	s*ѼdKFqqU
05>QTMsP TWœ{v&=Ri!oHhK-	k8&sPɰZ](Tx[;<7[d)'[*]}~or[ l*
s۠oa9` 8]D/J݆ ~}O};txT;b)
T[B $$;'liQ7"pS`>Cwy"2F9
8P:$"eFq9x;}+g8D3aCa+Ų#]4.%3]wץF
pIOߨ0%~.޹t|n0U	h?WX*t'oe
Ly\Z΋p%MdkSObt_Y?A_T$GĂb^ܽvMn9/\5&8`^@+q5:n:nhn+*mj/wHh7B|B'Jo29G .V>m@3q+6
u+sds~0ZkFD;fKױN;ӻa'S[kfշZj[ZHD}=!Q炿E7F,?^@	rQ
=2߈jʸ0Bo
 ])a&v8g7wd=CneN<6#	3mn
FXӿ)f_!ʋ:5(/dUD-ѓ*6%DAZ]&Á0<[
^;CtQ(J&kJUQ0yҚ>0̱:{}37>ĪfB"tºx[Ӄ*.~˝:w-we&]1SoR
V\sI2;>byp,K	W!PԨFH1&?MK^.x V^&98෪hMm.e{uaWkP1@ۈ&OyOBi[@0d`Gx~ݔiAԤoQ]@a+6QJy\3'>,*TKL 
_6ٓ|tP,8XaQVzh{<ۚM "kUQ8-@	Bft@XR#pz#dg40)-A`zB? NJE{ 9f&%A~PŜǡ58:mA0ߑ{؉fJU]_@'dFyʻx@θ*iӈgң)L_$q&g2GI8	i2ǁj6ÄS\w CV ˧tSrq9W4*{'_4HgIK ܼGɿ3(TrNCyot]ںT/0_̢؜;#-ۻ51>nPwRj"G@1
Xڼ Vȑ-Փk!qJ1;N,q	lt>n5plk%*qxJ5ӄ\ZUmqWs|[\*C/#&]g{ddضM%[Ԋ
mA|1ƜHi"a'L6qE쳡mĤw_={roSTK3?Ew $Q`a0@7O24&X._NOv\m<Y"xv&`fbL2<F{4!=]Wp9CUBx+%z^W^QQzӼaA?07 %ыIÅ	>/
|ZJ3hST_V>w+<C[|wCPPN"8Ex?Jhv,
31ĻKI!*吺L|HM|GOãKE1w. ?F)|FԆˍ'^"w:Hi0W8Eda|?=1=^3a|$nRO~&'^\8;o|ͱ9>:R듊nҾ,0څ8yY6lVbjF@5 ]84}Pl%b[7Ĺ~ٴ_0"~B'㏫`5',dxV-5IiKfDDnoI
g %W/<Or
EEOqrjo`=֥y{q%39@QPIu%us ;
yPimv9Odnaƴu_<C0C5sbZϝ4RϏVn5(<lXmT+X7UMTnMtN'_AIVo9oc9|xTuI .kP.X.
T(3_mogABhv3!lVJ>&;9>nLsdvc&vd[i#s0Xq4H8
TɯM\=<A;;felvaʸۂAR7(Zֲc\bQyW!>9I	,ATM~/-S'9Z5?>͝{+ynd3tϳc=QQ{*Ri	hST;eM}hOʲP͉_ufoIWbeӷ!I>`=Kdd.-$N
1An*zFg$:ڔޞ=<PaV%Dne9/(DrX ?I	]uѻ]Z_

xmoR6x3
A6HI;byd wy"qȈĔI *Wɍ)8|@nEO7s1y_{̦M/Pg=&f5G=L|xZG~}@{Tǲ7iN<&<Kl"@lEr	uѴ%Hmv@8Z
vJnpZ±alw/p*o?t;¦1N=I:86D}5'`uF\A ("r楢卐][vw,(R)J*uaؽq#[CW/62k1 ܀¬>4sps~? OF5`.4ZqAĤsʢu.bޒY/BUk<Sq
N44?\a͊lEňDbIURx#S-/)9Ñp[6?u}p+' 5h5E
_nCUU :,Gf ~c8m. ĕ1m'h5L #祑2k:tZ=^!zGLWXЊ!dk,	Ʌg٘*pX!.X}ݳiUqKآ9̡25CvUd*?
3pj*fEMsS5?Ik3l%;<V&Q( 42r	S-ԧm.Cbn6
?P}WTC|3e5 KH1hGSҞ
cE|`<%DoݰrDO6`r*'ؗWAN ĴՆKYl|/	;k٢559B0t@dQ6S
*e:!N/Ghx*AWQơV=y/
Zӛ3s71崴?DQL΁r+hH>^T	I`+T0 0\L"R0]%{-ЋN
Ý}Is~9\ksYzQD}"٭NXm#$R+bIěi
o/CCA,5MO0JmaM9KO{ et'/Wz1e
˃nqf0v9Nqe$M%)Qr5ս?⻂oIs(
drEIMOV#-fnG}«B"Xa7$je1HqQˣvt.d,#q<\aʘB'ʊ M~Ʋŉχ.c{hwM_Ұ7ZsgOGW_8bhY/d^mڌE`f FbR͑o;8?}8<G>mN}PJZVgFd!d5=@fFL94*[xݞ߷E3.oO0zb-tޙh"3LtuHFULA>"`!1&񩹐`paB
 y$,^>QsAU&*9a}FMZh`5][̹B&y6=2	o4 kvzX
TȊ)h"M扑oo(,-UCyr}X!9xuչ#z_M֯)=%zVXڴ*!25r"Ulis1BOM+EY<ER*mTq::	zPRī]HIXn}Xo{ΗE[$倧dA+lܶ`POfF՘c%o1=ҵ].Q)'XݔI?>bEbS9_z=:qh<"CځH1arUXXOlJ5ͭBd#/T}VO_rV<8h>1?-i{[iRw$
eL@^g,js}.MB?o7qblב?|<V6ɝpj)o>܅%i3qҾ;lk6]3QKWD9HM);~ qb%$DǴbܞy ޞ/V7fQ~0q|6WG)-Đ?h5OvPnu,_υr{+Wm:|^CnӤVx'p}+ZW0e?D\a7mPc^
Snury@cz}9x.ۤ%W&]|zg^2^,0\Hے>ZQUi#L +:p(5mկ%le&OƁZ&o0׿grU+;J4qXRF24]kY
 /˝%owt$ƵOXiI}읕B1btcod
|a3MJ֚v[eU=ضJwiqpZ3}b_x%	ҿΠڄ1`i{'
TB1Zlu@d|!ъ(՗ֵfZ`epO|sZ}C|xG@`=ÉDBwb1BAh
.{ec=jN\uPz=z6v¼W҆<ȧEU5٩֦WtC]qo*;>{T5.տkw! aЙ&/U4'6Ne]VhxrOk]\vt4Bxt[&5Sńk}	Jؒ1q\p+@^w߽D%yQvJy˙eDv
@I)h
U?;U`qwؔzы"˸N*cB#%g	)u#e	|h	ZLhU\hT wEH=x)d:;)'RN߁Ǒ]% t2[$]݈17bh8|5L0p[>p:r^kVɴK
'ϺEaF*ͽ2RЂO3V]ҡdrη{w/ /#8y-ȕL7;쟖v'J'.5AM1upz,BRȻCj1;n'qXFqѩGj̣g
^uKMSt&QFZ)m~XOHTe0_,B)WyCxZtjuX^+R3hEd`O},
\P%이}o%\OTUI{	.hCOvy>܉ssz|W8h,S'p:LɪDӤ|XDXY}Sy5[j Z0zm$u~B{B45|vi@;\D,C:W"&ol9	U:PU+P;x־ioa1ŀ(A8RO{WNmaHB(}+zbݯDx>>^wCu?iaJ2b6N}Lp@Բ78[z?R_uJdngcg!*є%9
DtNosB݉7)|VUkT%7wT~$LQ<w,s}FO<_Ol#b$ccg9R_nhbënUGZ9i&Ąy<J%x^ c6#&EFu>h9	h˪z#WɁ2"uhH^zJ9卌]?\.N`9k.?׻
qvڂ-:b[E;ҫ8c5oTf`},)+0{zxV. nrto`(JlW{|^nܰ5
trǥZt5[F>CeoTj)COJւksE*^2פ9>0WMG4
HiGT%|,R&<]D7MZFZ>2@JhYYWiGD-~BqX&@-P8l(fSo͘ՇjS`*W
%ܺJU1*y5oDf~I#u{$,151RO,sH%cil VGLȊG䱲 !{-7P;VcL~1e9X]/JMg}.dYX?Rn,%wg%[	FViZZ۰ܽ!''U}cJObzc[
gĔ'T\]^
AD %K*DYmA9M4L+R}TuXܾ5Noͬ>f]%йkCeuxco:
h_J:&*!ʘ(ib}`'|Mh
)K-~ą+kEo.@ǅY xQ^/is=-A 4i'~AG^8h0[\mGD,,S!'ޢ'U8Ss >r3B1r<Z3eHƑfI_(< E<4+
FxWpP.aTٙ)s#m.plQJH~DZ@[n:"h*ˍ0-̒|,[X rE!OBOE>dy"FQ6??(f,H?T;ө|Y7v{nG:w횷UCv^v2ӌdk9Mܤm7hw5atj,
n#v"pzy*J
(0 tK)
k$Aп%a;kaia85"y83T (8ұ'
=N\k~BCp1="DdBH&o-cCP&^pB_V)ͲnNrh]\5b0/3X98:;s
H#Y=I}+`
Y˨O$:6HTFyqu䔥1`КLάW'S=#;E:`j?{gP #BA0 
d+<Ξ^U\T$	(z4qHŪM~XQ^R
u7JWڨ}1wfvO`D(!2_4h!Rhn9S"?!K*E'	'ZJM7d֝/*xp pV$=_e9=q-Zm	78Π
IL`n*ٔ>|mC>,J' (FZ(HO8Z?d^-mQ&=	'JQ$HG$J
U<	0?7W%SpFQ#dUR{]-#ZZc
=12R3jK!bq{wr(!&(Wc:Ƀ>HvoAVSi{ٰJUQzC7>nK&imwٞb;;c
['_Ji&\?K$\.n@
~Lob_8+73S9.LHȴU,ߎq@%oj݃91L
Y[iI75Fr[Q0f/ԉf#pS!OZzlCEdǶ.ηY2u5dS;sO0`mcCE=Лc3 Ա\sh'ֱB,Lh_([?W;=Smhw8ݲA=JҔO /r,& 7ߤϢ9,RiMbֲr΋]eާorQjt8)ۇy)xqH<\~RAN#,^a.e}xVt\;>:b.!6Y8wALT!#slsPi)םe{zP+"2]UuP6bD:Oזy^`X=C3f55@vn ~ۑ.bPپ}v\8R &
Qtj=	7`hI'^.xF-/X<Qb
7'2.gا0WEYM#Vv9GRwKjb^f;E;EI4n	}hufМ;\07&ǈ:-)DIff 'i$KiDM.i/-8
VÀ=t rL^=o=|d3bw
b\n*\E8 <{}X(ḂNђs$)`A0&o	6utc3||Jpe`␠i^/.kĞTuxaD-^儧Ԝ S5ŚB\e(\sGc5b!ȿ%F8ѱԴ{krϽoMY{f{R˝yYA
G5.tӝs0<-d[F6aהX4(8.k7Uz)ϙf@HfP8(}2/U[۾$'ɗIXlirbɗbQ-ຑg=ZeN|wF󃠌b2R]%UY\XhF*it'FwѶ7Qυk,O$%N`]iNGrNru*X/ؓp=Ob_@|}x5̪KXVh/]&,	|3y8o-$;!uQpɫ@P=i|ju8ՑjTȧTC]gIwL0ߦ&Ir2<~VT?nX\`KӢR>Љi7OGmd?[2T1Jb-q
[/>k^bX4KWyJ%뙵Dpde|8؏>,ZQRs
!i J3l	?v'|1:%	~F?^rG͢MK|%*	R^Vj/OlB<rO	ݹ,U>?\wLbu/UסxwKl)	6)΋ eB] g0SiUr~N;r1m׍tIcx 
be'G5ԸƷHM*ra8^Mt5E13VWC":*(w<9heuS@b]S
YCMTZJ>	P;zZO,+bl.Q[
{|+k;6fwJ۰i,2Q{9>Ci۹yoCW`0!R]t;}ŏђ@pp%y&6JL?N#g͍~/x;[%
ᐱC]Ȣo'>u >s_F1l5<=MKv%ء_9^pH*^S'
u.Mtc{u45>*OgǛF'LYP(&NM-bR'Su,6BOD0cW;HA	%`&fs'[bHZ5KɏgEM0htMČ#+"LXޡ9$((dD}'Ŵ[*C;+(NO+@>ypVACCkv[+ .*1{5|@%o f^pjTVژf?O&xOԳ0IyFLYtVS
֧'Pk4oVst0l,H
=oUNMc@=x	D%>9,"I8idܑS-l@ cK7\$/kk``:6 ˲St'U=fܸ6SKEN>'VZ59oĆ_o8=GEQTXnқ| 
Ş8ʔLbB&J L`fX?g󘪂.H5D#(.1~3ӡb»3SzōAS3*Y}'0?,${ӡ<(AC Y;
	g
څ0,=X4_q6[V8ۭ9yZy;S'݄X.@Fms;rEIZ¹(ҴB;
C
.ijE{BK=*;@}iQJY	Y-Hiǵe*
2\/#s|Q?6+\By,dnPEh]rt!NSl0odb>qlȋV*91VJjyi"S-:<w]j>̂wjIJXvqҫ$yIvk툁F?NS3E6+kJEvl
4NgDlUz73Ƴ$<0~ד7d#ʹe
dCYhwXZ߅<q3C`8`؂#Q2\ީahÓ<XQ+mkq{5ĩ΀?[kNC,kbti\h"RLQ>	25}N/#(HE(>>ntՀ\>'ǂ/5/my
I^6[CЯ9ՉT{Ipz̓k]j}$h
BHwg|G[McA	˩2US;
\L'%̭IE\Rj2̗1gVvlW `Gž̆ku:ZR2."D.Np
9!b0;ٖۓcg6 %.,80w҃JrEcjjB%!9=+V 6XaBU`8keSJn?ϛ _cuF?4l^0V۱\ 2*Ii[̆SK$mT7LڀS%E4lQi~!+'5a-gĶz)<WL OxeV$DhpAv'%%`.?aV&BʤE
']v8~qƀ 4cuǰ&?3TO@/^H<\P
bE`݃l]b	*pX=dJǈ#T[h)p(5]<`=`59沯ë<շh粊ڗKw-3碡g']ͅ/Ke*ouH)^lVZf(d@rE67G	/ЭiȊ1ʆ6"+R[︭~*qJu$M[o|~ZldFܝ\0&p8N1ڢK|25	)!Pzg  T$я.17,Uk9.t
D
NhU[EXiowwLnR'̸|ur1f;JrFq Y%9nY[ml,-vlʤu%GCi&]քRdsx0Am
14>Zm!$t-۔U
C; 9`Ŭ5Ŧm^0~חSZrmSz
I="pJ?u~}2Jf`r9M<@nV7ZT09W"ngCyzT}e	GWC`ڣiݴ=oLslD$ƞM=giODSʇNNR	jG,ӓ_TL8{"8Nv%qA,mO᫿1(j)Q.7>9 X=-
 f~X\(Ǻ-dϟEשy|)T̝l	,qg~>*pt O&Cq7V$>ݠv>	,4S{{';	9u/=-۷#9;mk\7]\/>~T#Zy`dzrJ}f\V'5ᣩ%>ŁA$^וb )~\Vw8ɤ7vUPtM1u}"enͺΡ`+m/eH9}U	ʫkE B$hYP/~G>E.r/g^]/ۉc\VAIIH__TjV|]8,r,+Y:^BHQ\å~³,ԫ}VdM=X$vwmVnż	tLHA  Xߴy"ΈNjC!Ν%VwH( l+fff#عczm}SQkzq@IFZg֜K.z%?,H4bm:Z+*U
'\R6VU#H/8\Z=6%׋wј2dpŀv9t-S=耸;}uq?rEk6௒G|kk.b%u5
"<O]c\m
\ZN'{Q#%dQY_pF$a\
5o	6H5#z-/'=#Cyy/HfG^J&Α`T<5g8BO!H(f(ww".L0)lɦ5rՓD}րZmuTvgk's`sܾs9 AcTnfɬ<5
~c*r#J+/̊Eu8n}6ңANj.O+
σ"hQ7XrJz?ŦmI)
'2LfEJ=j=`Kg5rC%K]T}䎟&9Bm:[i|D 4;t
3EuMo/<&ލAJ)Z\K
?	a*<ݲsV^QcVլ<HPu_hǒCOO1wcg (a9ӸE	trмc6m3[u}LG*	Óϥь+q9(8My: a 񅼵m47)z~3W&s:
65?QM(4K!qīEb2<ҰY{!0eu!ۗ"xWj3a#PQ݋o5<X(ߥVJ&8O@v=]۵ĿJ0PYJY5t4@:]6^^mO^&Rrsz*r0fT,|qrzߋr?K|"T b]#&gM{k?%R+,|$Sw&ȘU)Ұ=F{,;X&0rz/{z"D,
]3!;Z>igH`L4H*3T<>]s}07srF'FVB0 @*>0?!;H.+cz _M>D @CÞ<VK3>+vݚ{ ZJj])+̋\!3>ߗSWW=۵6jn(?`Av@6@Faje<M;;AMP5[HH_%-FBݿNǑK:yJ	J)Ua>v0|s4q9_3@Eq~R
D{;ޓ
ÚyJ+h۠'/nanrJŹ o@*-KQ`-dO$rP&>iX^4Ge6=Mt9JNM@Cw.j6QSZ(wfLmRyl=7Or@
J?YO|".!4X]Hf@+bxNM@>4$w1yA4Җ1pe
I̧g[?B*f96λJ@K:I3`OG5ņKuP*B>VF>8)G5@
j%ׅl7+JfEb;mR
'Eh)>
qU%ZM/U3
3ϵvfifBu %ɍ͝8wB
&V
\C{4(slU

U˥ BJ:,%ϖ7Cl4iC&R ڶH3X)a}sKkbtL/s E
':l7,eZ_5`|łĳelk"A@0GC\^L[lk5oMv3IB`]/F|,+/}S,s/O;+d{wO*&oꨋ ΚD%P(]J/ Z
#`q~	0dѩ:˙6G$i^^	NCLo9]l\2a.%Pj"I^⍳:f9PHAe%\	o:5KI	>o~hƎ(_$J)8`nא侖R=lxe]Uא~)AkJRv+^@6fqkDykkW~@5Υ"VmFoyҏ5!
8:$0RLkἕh8	H;W+,}MJK\}bO"AWcd^Vu/I!\:pο؝kW>h!ZաKj|c`ǎ=^kGs$V(WJb	>]e:H]22"ePD+%H;_:r]R9;RJ
ji/Zֽ3'!mxZvB	#vV+<*eH\s=~΀WJ>ՉO.UO +p`q_=;(˧-.[Y0ɬ-ʞN,>̓_ ,AQ!(Gއx=K 'LDAkp2nT]IPw^Ie 54ff
TϖĊUr&2oI
#%)a=8D4ԬkKN*d's@s2\>Hkq[LeF'ڒb		z{9AC!d_\؂BlЯʻ(؇=C`-z9}8;Wo2<5~2n@bȔo	(!zx^}x'/MUE\=^'#&Nm\{%J.D@4b<j1-$o6R[Q^fEyNmh?KOCɿhduj >NA~c}E\v{/U#հQDa@gUdU]ڡ>
L3弡A+A9r*GL[ӞFgEߞQaipZօ
o-P)*#-6HH{mRG?$LA=K},DrCfM%XQ,R-/=O]0?SwJ]_AB_D͒KH0k<o=R<ȶV\_p{{Ɂ]W3ߢվ14j'm6	U`6zG*@2Wڦ$_蘹9jڑ^zkHZ},FzCHrݬ+i
2Dmr na
oǞ6~4ʑiP(pasf0
&ׁ''suvk6
}؝d|D)~Νv@)n{&8.x##!QF*@hw{+euOl_Vn
1<2cim$_[n_P6
ɻ0-u\N)G !RI\:q<=%@<@2!>^j-U_m{Z60h64OYɖN&6^2^ZbUBߢ1~iM8S=W>ccjeP p´"?%Cm=._DSџR"Smp͛q޷lV_%j;^,◑CY0T{d&T(ݹ$+k
HO@{A=UZCr2+>HS^"~1{h-!ƊH8|9O)N0iaiR3|eT *ǣcgkqW\W՗Đjhy!*ἠ>z/S ƥ8tlޓǎh)C8	I$Xs邵ݙϨ{Z@QJך
&B/QgPA_af3#TOރ`dPVv`GoWۅ1Ix7A| !
Wp/-wR+"kS5 ͜Qq%yW*PFiQFP!WkVs,rQ#\*M۫"kOwtKa5JH tFClcǴP}K56v!cc.E&ZVTLMZax:S_ͥ&-	k *`>TcswjLd<H:+^sKdυʠ+!p8DJ
operհ?_9pgJ.P<!ӷ?$-!SMc?WDuׄ_FJSߘ`bHbe.;lb;DWhꦉPJ5<2U;׬2/u̓Zi8q?Hߛ71D@q#'q%@˨hw·G6ΥvɅ>-[
m0ÊRt~PeR]'Ҍ(_c-4zB=2sv28ҙ3c'drzAeKNCY:[ukE Ǩ:dSiYQhrH==,b;/@mYCϳRÉK)0*	_)cYB>K!SoSEkj	3$\n42(e~T#.`)MWoqŀ/UkA]L2RK8mQvItlȈ_C	ʢÖt.;d}!U* l$А\*<.2PC
X-GT/pPx}zX+%Th`2 6[M"=J~*Dlbդ*
Ymo*'Vٻ)ƣb3NҔ^?^}$@e$'$vm_!m~W|3绪HA~<1V m!UtHD J3D!NW<<sż&Wvݺ{h8Sۀ]ZIQ않u@LxJ
YĒIԢuzbvx][vpE#z5~*Tr
hQ
@X	`Hk/nwU{R\ds55o$YxD海JR7KDإv"[ =X&dW+{A_
<y֖ n˝cyB[seV|]_xqZ+,zz@8®&'6d8,(m7iY{؏!A{)f'①jKQ(+

ū#(WpکYpZ+8 ='up[F*^3N<2 x)UF*C-*ŜC'v94<kM̾kyp=6#:v!qb#Sk҃d)fm1y 联4uNz;Z3,LsDɑ|ĭs%7#e5%I:	[%7Dۋ	a(x%/BJUb(P9ѥk8;D\[-kG@LBr0SzBͣBbpYdi/Dn+<?1V[l	G9wű*
OB %[]F(exW.^e2q胞AQ˹Pf܇f!|)L%JN [b*=6aAC5bel@Xă/Ozi4yݢ(anuXSNV2EczIk,zvoxrټ
`͐|uӚqX	ZoO. DLVYpND4 _{j]~Q/We\|wuߔ{䛕#^4Nd#p,/'e #He6εG<h=	s.@(tOajC-j Yxa @
`Őztmv3?97C|Ti"co	ʝ\\<NrBDp@]
S=30ġ,PTfF,qQkHH6;|á:ف~	YQ\VCn	<yX*0C-m߿*Yn0ǹG}!
ɿ$)_p;YV$h>cdyU*=i:JC5R%cZ&tK	AYV0$ܟ.R7m0G^Bw֘rfk۷M1L/<E	BrJ>y(u+QRo9XY22w$m&
t1][<u<@)B+>@9]
p[K2H`j,9'|z_G&c`gO[+]'ѓ{[[z<p!<ɲnqaBJz% vNvxV1t#8\q:9&*2 X qN
Eץm^ݲ<K89~3x_$})\p5o-bjpFz>dؾϋC2
FSep2>2ړIZWicsU·#vcۯ>T,13mTSZUA%п:xs)<g~2ʋ#_wIɑ1f5Pi
SUp2уx	Zg-9l#"غ%""hտn*[.uHj{-ƞ:. K`ǧX Wh>*@9K\448
>E#&-_Rfo/.Drt퉻	'Ntz:3(h,gxC!ӹl!H*2\QKd8Y~j6Gbc.oΗD[2D`ϹmTS#_yvrb
8?KI:j׬Θ=pV[I>f[{; O[:mSu6e9?,>5^MBz8aqRɏo->u[dgbEJ:Se0lU0'~є_dXX@X]~r**Lfd[?8\%ͧaWu9
7R=ni|}/IOjy`g2Mj7%:0 JK@kQA| ӑ	 (hWL=z;&\׻u)"țQ
RA/m&>_lgfth~	Za, 0Q}6pyKIsE _"eVDI=Dͮjnߺ+{tϕoɉ_yidQ￑.PGOֺ&c'ͳ4BϿ@]]cDc{&%|l+^oSe@wg5zj/4o_[z$1{ҁSSW*q))PG=n(õD4(Fk2GKо l,
̕{)OD%ӬZ226T<z"BSuf]yg)	뭌b U86(w,(1A5CL8U1}cBP	?qj6nIRv۔F	xa_l#M--'$@n9ٲP܃9Q;ĥb=9
f]ii+{/~!MPR OSU!s竇BlrƗgT1$crcQx6^\o=ݔu`E]Q/L/+,` Hq`/&5V*x-Ǜ]l@-UJ\|iu3
~2v.š]W~a dm#*m'+!jrUuĲ]sgNz#(<!%b]8!M DrۿBP3P)-`yD7fw23Vϻ/%KnDl<^ƚ>Z$Bܧ
<`wI"!>7RdƿIba$o)8Xjb[D6L;E֢'xsw2P:̛Ict)2^[K5uP@U-SVXUC
䙷15{5]>%FM4넯]$e'W1A麪>ͳy:qQxD
BM+$#U/ڲ4_v21oxSH9e6{VU݋2=VF֬Jz8WsP<NaZ`&H )dC,̥}{U[娫NJMϮĐN~oX? 3AC3b.FjQoT}ʕz@ -DoyسXF%E6svV,w>2JXCphATQ:3OUO={7^6HT:/<4
2Rh'^g9R?/9lN'?*/ciI/*]0:a/a~2giyǖb+N%CjJ]q䅄6}tDZھ	K]`x`y.ՠ8]
TDMFl?e[5V`=HL?vBd8P7=*S	$Gi%>g[|Ӂ-03zR23x@-{WSUҗx`oadōޟsm3whޯ`AҫO;e*wgTqCsZ Å ΚS-.(f]PWmaW' [BBC숏70x
 CRvE|8& 0+uovDB9"gKUm%(oU2<u+;6{54 j)6o	z[G~3jscHV+swqSSܺKH0vb+W [.9rNs{XOO+!(2B7pӆx?(`6Zjn;|
`9g$	b
專:gB\TMЙ(Vn$­.	V̈IE
H%3tnuҒ}TiʐީRUV6yY<:w}tj;,/.1J++݁Ⱦݦ["ٮxf
9McC)|zK7 E^E)FpV9n5STYlmuXq/JW9Lh$j;HL<hE1w÷b_[%JykÙ%a;~u?ްEIuVlT\`zű$'0{qJ"my-M4˭e1!`?||V`7GR)޺vC$llU=mr3ekN[VfNz(xv=4T&|8^_(f1F~[}Y{Ynns0n> UnMoͶ@'99ozx Na(pIy_!aɌg/R7pIYsoзv~ΰy,J璣*]uTa
ʫ+QP`rZ̇mM#mh{q<LꈤhEvXGEҏ=l\S4;Lyq!:CzwD0wm'I`0fY#H#Ѩ<O e4_ۢwAWʆ/Y¤j<yG!bll/-BJV|.<҈zT)MfWz$7hA{U>iBN5<u=(|괢9q.j% qD4v4SƮذΣ6vLbK 8 ɉ
Sx*`VGxR3 "(2t󚕥V+~$6bX?`)mp&_j9V@փJԽ2zQ"Me'
H|l:M?[G
z5\΅mK,)ԸA
JźM:M hܵ@&vR"_H):}:3ǉ>sy0NFM
Ҳ%nrwQ@@mJ34ïP gY^U󵶜RC9xCnׂcoIC!`V 6NFkxCHĻIcga@޿HI'̄h[2h[ڊe}~O3FjSwm3o/)znK%kP"vmuA`*}SHt$lb
ܙ
wQι]7g .
EYÏ{}H,^Vyz#6~w"/;Ghn))%Lfazc̐e]P!lGUHOZC@	Bo+z	?孪q4ύn3z}HKاrq
Mol"\_ 5
Bř5yP ϑavqi^YC2DoH?{.nb\+撙n#GҤ"DX$#h_z^9B%M|B%=JD$o%FLcxgg(KF	؜a'	0o y_"ƒ߷>a8f1b"<C5A	KGwY˴9J0H͕ҥs k!ӓCzT:w"oLwV7DW,L88]5>MRǧ;$S;|jD
%a5ߺf͚S@A?jcI5Ei؜3.I..{_Enѳ|GMyڰдǚs	Eީ,4bW霭}8cmd
bkwxH+AbE<	4t*~.po5!WJ=!#<(  wR)j-%['tJ= U%L*؈ï<Ƭ	|-d$bEդ-x)U
~\5wˉM䡯( gHƧ*>Rd}]pGUX,PBbTe%l(N+5M6[,#qv5~"JSjJ#jdj_6nXUqL'GS%ۯ9ɑ^q}XEa1qkq䑋&:Jay!)mu1^*>'ur&ϙYNtQ=5X	"EO6Z??R}Bga((yNλYy /4y4)TBiߎ=B,V;?ϸ/%&?,VcC	0q?*R-W9;c6ϏsVҙfI((Vы(j̭J^kd]"+|0~|:ógj)%$-
Upa3$aT`1Q
i2V֢Q{{wƽ
j!(Rw(QΛW*wP e7iְ:!tw``Cq<GraY]͏^gNu\]Ksȱ)<	r,1	I^Q%7lOp f9F:xϥLw
ʁ?̕ܩ*ezMT+ȗr"kXEnT .\ú_ 6 j]
&ka=ozd-{$4ejBƢ>x*7;=˘016tbbJHD?~``OYZY? TA.Qm"eUݎ[ֻ1J@r#1#Y'.<1-O˔IA!}Bܩ
a7oUBQu]Ѧ"\si(֫`rrSEXC*J@Y=q>pPk>ub51|Q|!{{hCsmGTAZϏ"rS@{z[&b5iE	9_;Ajl9w7ʁƢ b6KRBo5eۜn8@~dRqU9ABTdjFA_
rj>u=ђXÒH=S2$u?	sBIھfރԏՆ>ceeWwކ~MV^<b 'uld=

"Wܴn޴*Cw1ϭj5 gمffmymcTG1L
E>j;^"#M;N"늚w{uGί"*˧$.|8ׇ;LV/tm[8yZIŸmXDvpb\6kATxh=X{#`?MzY$e-"O
*19SIaZ-b!e%GdbuS<GBU}!z
":MV+Pw1V#A$o^u;h0CgE}.ތϤ+EwiXNaʀK
?|;}2wZ`ͷqo]ݘf8}, uXٞB.yz暶+%s|x%{B3|S=W.5Vc/2OB/	cUfM([]Kpӈ#`\aʑbs=A!ʦ1dī]gLr~Fl퀛v>5
+z.$ԸE<fJDT4->J۠hc
%[|'APr&LG-=AdOuR֞zX 9Q3P|~6$	h%U)P^iWFJaN/,YE HO}@6{o+,6м$>7JA͓vq>c.DzKP.ߡS}z6P}iT_ me xn#cT﷎T.	=F;ԫU-|ol^",	9`rĘZ|lIKhgyQ#x3gԷ3&eQKM@$)WG=UIQy#!$/&L	8{? SVW*kLRl\7PiQ {:B4Rj
an:9rnƱiKܯ9^ M6?$i?xy䳕ZHmEAk[vjѷcKD^x߯qax~	MRDsu{nX%Lͫ
x	eEIɍm$E}ǡ:"j;o_nq8SQĲc-Lʲ#W,c[Ng]	
`;q
*F2	LP8A~1[Q@|a<6V
Uԣjir2đ@5y`k6gUw{9tYVfʄCN_Jm\d@9霒ȫZ	@6LT H/Kc7&`)M	%)ҫy&L=2+4;vNZTAT#:'4o!PVLլIkl"a7.PfNܓTZF?י+
vqE{۴"k?I"A<ר6J`rdVԙ$WJŚ\GOȦZ~I;cjA/1~KIlx4<Zo[=_68J~8p!ECpx7Fw m4
dbHt:-v6˅ =az!5>E;HP]~؀s+J2]$z"p3m69_#[5=׫^j' v񲍟Bȷ?_)d@`'u,&mo"ѕq_ț dDH#\)ˬcbuHlD:e6q4q:51_3::'"qH*D &3}mHt~/ʑC<g56w@["|7%vdH5(I0>x0Š+!5Ç9?
Z=kk|Q
D,r=w#{gr)/qv| Uʩx[[-\и GVl3`9!ϦƟzw傱^B7	Np?FTʉ͸}A$[l3H?IsKS=8\pZեI	1a)ZX̖hS	010]Ix:0:9rOZo3)rE8
Em&o;O7 11J{e\U?gN#Z"׻
t gmDHbi&>6jw<L~w.
9ᚷW[$w,`WԘexasGΣ&MfnFE*b	p7?lkC+rR`[+W:x%7LĭذU ST =5rwFKY-I ?- "8U/NT0?QաŶb2Ck[ϦyoÊBPf:!o/an^z,=1IWZ,
M`sp|3F;
m2+
FzsA"IE=&3Z^O:'gS'Shy*vQ/{Z;/Ssg14U.hkƆ}PBmCL>A5<ع"4ڮc`[LϓV=
,rvʧxn*.mc>FP7i_rxD5ZL;TI+ .k6-lM뚌.8
4	av6V
f'0زf]^kE]Y2weyGu~Q7Ba<oVAzuP"ȯ=lR˞wxf8Vsg˿fvdw,Ϯ/RutCL(Z 䂅IW*]B'sMp[#"ŋͣ %L3:]7|gqC*>M>ZL%r<ߙ
b,VN

ViD FB%Jvb@SX.5-G˾B~ϝM;v`KKUpѡ8e9P11nV
H
aj:5{ψ RE fQK2h+ډF4{pqy-?فQ)mS`8;~^9YSoLH`hrL4r!pk	1:~G_-4ٖ-Q{4w^Ӏei
'{وyaBXI{AT<
ەYXQv`\!#~Rgd{&+T^Zͽ]')bBv@aN>aSt˒Gv^aT,$*YZqF݄*R}TV-!R;IX78B:2Tq's $ӐQ%#ۓd~S'i<ٲd ~B^lzuz
hfDȝk!Pv`.PoeFϾ9r,ϕT<j8F)m][]
}׭땨v]V 0:yc+fЫ[2* RHV R4p90F0_aBb}=זJDTVj?|.x; 苌*Чg	fЊ-dR݅K[O
LF%Xuoni 5Z22#b1Φl{B9]oIiQ
&ۧr3?F,uU31Eώ[5*C]0-2+M;]&W\<{!!2pCQ<}`(r	7~r jz1,Il(jA*>J\Ka?l=K[EY͙бP|н/,Iڥ,и5.t>:`P\N:xLb,H=F{j2vq֬}Ff;5~8*)&+uknm}d%<9z.W2A.b4
o%ؤJ·6wG}l/Cw, Q)DK-ՋԔZȚJ,_BܥF%L-Yҽb.SLQ5U,$55Iĳ4<
Ԝ(ү8n
yKTI@v,3<bx_KjgTT`:#4)Nt<*?^x;\bʡuKLN:AisY'N4V͙ϒK=hC|@/cn #8W3ޜ @M^rsy뇝1#@4Z+d'6t @w)*o
V&sFjlx'ZXYM k!#]=uy}
KW|5?K{Z	
y	ǕHrj%*U{#zoz?Id5l(,*VrǹRC6nsO:T/sr[P>		5v*IDOiutTj,KH')&dq(k	J>nt{`3+5_H7qpiޜYVώ'TMPf Ky#/4H'bfr]5r ^&+ ZQ78"٧g<sԶ@mw	'w)5Št8
.Fr2jPl9'A8T?F5l4g|aR/
G!X|@Mlt*%S<+vqhRc	mY`Uw[TT#jZ:5=ϝM$rcJ+(QqHNB<6'P:Rg۫O݌>hdEp
5}~g?Qt,y<	>! Ө60fڞ*	Awg¦꼙W8{hmG/*޳=o5b?_c3QƵoQb~J{<ch<zc8DR	˫UӮޛ!鯔68a5
J^n["śɞ_u`%D뿞bqhQNQ,=gI|'m- Oghı KK{8cc$!!8WgO3ەܸ4Pͱm+!.ޕHd=q
щ6qMS`O\T6*X%02LjklgY}ېDj ngDTͪV?7im?$(
(j,9B4񿪝^*gԿ.:a{X!az^]ޙa_}k4,%~k3

߀=d8GI00SYN!C̀=P=L'똵oB,I`	ٳڈNHMs8Ղ.<|
t6j*e!kʊ*B0EݒY7KYNNsN(Ge$?"Gm 2?76pKWºo7&k0IkMvYPRB7	S%}|||譽6fϱx5J@0 6aBɚs H2wi}
Lzu'8yA-֥8Լ7~%8B7n?> qꑭ/Zn>,Qt<Iilt`czILbt_XsxC$M<G=Ӡ5xUx̆gY$/_ZzLMyev,guD.:17Iƣ R1Rb1k5;VTaLI.&՟\#.=
ߣ-+C
3jۚ#Uh<"'Unӿtj<t)}0Nl(.Ǻh5
	?[\; cptA|"u
oD~l#܀ u+ڱ0M6faZz+ͺsײHSAR{(D3^0x.~y9:^\8@K$1X٦Fo
a[sJȼH=f/8 .WskF=e .|AaGE؍m ˱K^榕i3S3MOGAiUļ`wYt7m;
BO[;fRK9ӤKHV`v_1%bW^Q269EZk]BKpXl;H͚}V2vjnb[8Mt,gTCry_ȷ PQǜfrE
]cJذ
ZJ&,L"%6#urhXV_&G;'H($	[]`f|zzT-ӓ=c``xD0umCM!U^+LAbkeRdn'_6 t:&X0m~g;RtX CM2tNF!|=FYNiBƓŹ0dxZAEevI))Ⱦ'|M(z?ebUvj[9xn>N-NNci^r|<M.<;=yj: EnJ"KVhC>pHPv45J	b+Z&!v]O>F[B'J-D$[&
NXAńs]$>;ѿ>*w^[eMEdr
?
5^:Gv"
QB(pQ^fѐS0%Gsof2CuAil+c=	m%0I4!M	;𽯪8;˧ ss@MsK|a/zٙͨ-􊏂W%ix
C~mۧ	:dY_xU__y(WȕA9xy2ish;/JL?+`<9ͮZA7JO/xA&am|lxgku'/>;=o\m#VlvA<&dH h	6ˆs~f2|yj@܉2Iq&Y3/6SZRaVݟ4V$!Ǜή|t=hU|+[%Cyag>ˀιP_QH43~u^ex׌Pirm{,Dz25f@F:ڹeh#
2@~ӴC2: $6teA^]{!|/L]Γf[iq;2*X;}Y}ӪxKz/hOQ'cyT@`JӐ!IM fm+GI/W>6U=l0j|B~#myQOg«(E)Sma+V	x*^l+S/^?Ⲗ}RPV=dNIͅBlEF2Q'pEʪ-B]u[u0ŽіE&'|в0;Y0Яr.,ioװ_g׌0² ޏi%vZr-iP9I[SSFx		[*3&T D$tYb!hGP'I0$tÃFm&V
B!O&;PӰTrS_Q^Z,%<Zܓp0h1&uU>Ȭ:@<ܚfF]G}@pSJ
״bwdvԑ{@k?{<S~
:+9fO-.g[y}Ut\(t3P\vilQ?$ߖ$sP([Ui^;t :/oƖT쁼(9䟜B@X5?lJDFO"p<kG7oROnߏ[E_|i#u*8X&%>FzW*zh&a_~/ k&Fc|(}Zj~dku[!ScJJB0Jv-P:Y
Κƛ`xq47$&|c<&v<R$m"D@~s ]Ka 2akDFrp
ΜXe	Rp"#'̉{160 yk%{fKvyŐN<O֒.\QuWE3nt(jr׺fKKL#ي4齃|''B9ɩ~G]?!e
k>_ow(3,QhZS~&|\4w|~8,_V#շպz>Ip߀l3i0K\U;WF 률E
f3}yE%a
gݭգq-`mwF|i6沼SIa 
Ӯ s{ͮHkkCF?3Y%j;UTw8hwAvn,/#˅96aOdytQs=npp+fҧF!{>H(>^Hp(!ECmW@ mݻeUyTŲg(v709w٣-)mգ{|Ix!@LEqaRrQ~Z闙+cӵu}`HN	'6Ϭnb46yO6M@^9RQ_;%5Z*Y05w╇pVs0'I)F\0vv(Wg&N8RL1:}]B40 XҸ2hkm ʛ>QH+fXy7@@2Kȋ$x`I0yVorm_Ƃe2&`9\Q_c7-Ҿs_=r钒5XT`.vK[\8D/CSF-?@	ݢgi刧3dRvwl4)	re͏F)df>-٧t׻kfVf	`e>EtU|(氍7/Σh> >مT-VʰFV3R (fw6 |tgCn%u<wY-d@SօY,<׋ֺ-=[:h7ܪ<Jz^|uyk>yֈvU?>'=|qӵu~v2D7R`hn"O*V|OLXdpQzT<\7-hQ	}%MC%*,D޶B錽b͌.O&7ګk<~Qop^{yuޮh2~V[sqUBYq|*㻨13:J7
rB;-#eӘzbij Ƹlip	m	]
d$3cZnU̷' +)Qgl,fN(ew?*~.|ˮ#ۥ7%f',Il(>;8i;/x"e х5׽Fa2xtXmQ>LF:g'ٚ g'LXA@X]޲UOǦj;dUG!|6Q[LGhQ"rϫ^RVt6ejul|w?~bl

Y'u攅f:FWl
`v%x}j:蝲ڼJov͏$|}Sߠmٜ&9Elp{g`mg.f
ڐAh6Ө{ΧX+͔:Hr6OWb>vV_^ӱ5`gy7Kq<pIPl*. (g(Hڐ:h{iX<-T.g/BS:FoR:el*AiׂTx	k+-=K0([!8.A	43քɄ.ȊPaI?ΊLtg*t
;qw9d&î,r¿7Qjkʒ9u=X::Fw {NDY qdmgJfA,>OXd=ofe=T.4U@P`Eicu'xpa!٤V
EjNiu*fCILېmE;y8+ao4;q8=X.EǃINb賜N{4
$GAsF*Pz7r=ÈB,z#uEJp[W!7AwEȝ"OxMFPϺl)45/lOUa d\r>?ꂍ 5I|*
yl 	I\'wax|]ƞ|Ԏ5Xc[9hWp&o®!HMUS񽻇ft:̔_,H}1J*"F 崄'S^pvs}9 s<sŎx>BypXq-$y 4ԭ]uG|cB8eϝ2jCKHA-"bp)J%%_@2騽	I	|SE=bcM
`#]:[<"he1]5k+Gc#'^_6wR ^V$%dXGIYu`@ti*eX?ʲck>Xϋ%ļ Q\d
`ڭo.BuU_ecD>jG1QR`b;d( =,0e.u-؎ו|8O)~Q-4V(MXB	jr9`s7+	t|ҽ#4e҅Qi6 8s:K :*B=:Jlt`9J0 
8v8oדh4{,CSHs5FSVl>i/}΋x c&jprk=
%
7<bWrv&]UPB ƾ^]1J	|#	\/QYq>j9gezB%dwѮ
2Q Rǫ*'}|a^J]K8͇>i.
LZ"αo>y2kz͙Z
mH2_}y6t1[Cw_>  Ġ%9fzJ7K P̡@o:P3
FA .ĭ|AEjZ&!{ ǘ<|p6ϰ3i!1*j4Oc ,e 9=Vɪ
9bcE`_xGsD=KߌjҲ\wG!
c~W4#tfXPŝLa
5ʅg?!DLn;w L'tytCEy0b#5݌	ʥʿP(CO#ab4GǆwF)2GX=)Klh轙è@v;.^j]i;<3CxsɫUT̿Lb_u|8<\VDmF[/ǶS7a~AM&[p1Om`	fbj!3Y=KZo ;lj˧bǓ;G#ѕ
Ľ+\xsvhZYxAh/p34eJ
m$a-AXaUt-`E洈Ո-:
[+<}=U0#<=[t<tK	M+ԶыM Z3pJ~ޟ} g7#pXMy-]gY@F
zZ$[Z`f`b7ݗ?rJ)t2\`Q̠\Asu-2l5*'k a/hn%
~T{3dk\&{z唞ϐVدfEW}aNp
ͷ)4,Q
tf_ibmߣcq<Fhi>XI|f#E2guLܳ
9lOXm:!ȴ*5"mO'"Wwӌ$P@69L8:o*]86ۅF#KF`J\MxęZ|bh>RͼBGT4(h!!2#ϔ4Z9_v䟡єXhni-̄1|Nm'LQ$gHŋǢ NǞ9})πo
iOT	q*Tv
M L+,;[|)'ww_.aYh[g+FskW},-B/zXC*֤pꢋdQ:p3vfU8+x0'
̶Ul&z'@YQT
lr%sHj2U2 =OzoMT(ta<K?{;MzI6gxgw>=%5|$!mU,lfA<-0Wr:#EɸZg.hej"9+l#!'Tpإȱ<ҽ'kaw'"I6->fh?!@Kj|Y|JrW2Q/LE8)fM'M那=hN37
ݔc>ַ}zԴ+ￎ#n(dz/TJ8|w`gTo{PjOF~uB tJ,x8^!`s	q>ð|
	F!7I/߅p
^T65Ӻj*"!y-OWv.B	 flMCyEl!"JM
m
av P~Yb%gRjkךoÙ<TNalҌ :k +@U^2s@5vN$,\/7!y?p}Ӻ>&1b^fC0

PNF85?۳\+'|Q,֖M+fbF2Ygʅjijޖ Қϱ
	O>zen|=pLEDCWME"N<vDi5>Op:]zk>Ϙ.N fg;e`SIԣՒ[C^LZWyLPu!R3]ûkA5p<!c[,_Qhc}ښ&v-ý3IJObklP-ߚ;M)݈!~|cE0V/(P& 2=qJ?|lb@d~L!iw۩o6{gA4/) RRAG*nE}Kєe>Nw7gގ6#tE,QU:<k ;GpTGm{y8yK#`]]A-=SVȼhyakΙbj&/FW~@wTKD"#ҼT>zpB觹=Tq56)F&R4y
+aXy\a=A^%$Mifח^!kly}rrdٞ"(wn
ܙF`#ܛXae`^ᄏ	ƅQMW?5)X0 6[<M?glbܬE6*R;OOQ]MztOgyiT:7C(/{mjq3jqAHC q8ݴ.x>E(rN2bqǍrG")HGj[_QZi')H1wRX:i.˥69Y1:Ɋ:SZ}>Cmhm|ݬ3>4^G&C󊈦1xkqY0^ML[
itߋ!U7k[GŤ4:5#>ٌ
v<w<B_pTq?m$uEMnb`<hB9J+ہhG6[V ydq]l:wîw5HԞdB"Ci8DgN]"EX0*"J5
Q9Ü
Y5 <(&PD|7k/ahI8d4hW&#8ˀOyCxvma	۽G QMJ'Y]z2t<"Y[8mˤAiϤ0h)*^DD{I Q[>˿rpPc'=>pj ǉ7A8GQ=n55.s]^c>ŧ?jר)em'|)TaM\ʱl?ɑtFsL&Jv𶳢A~	qZ#UP*z瘸xrwkMoK@X2V+	i,h g&oa78.-tyʓyf*ޒ kL
6ls.Jh!ň*ݶ?` NVu隇ݮZoۊ4l}j݊{8`9UZ`0gBxg@1zg~C>>rBeo'	Z_ZT/fTh
[
Eܮ	}Ym,Jy2i:_y\vr,]9m,Wm>WK4j78*]UwzQrBg#w`tzN#" i2Dh~|/8p.L&dg)[a,ŀ	$^)2{cZ;}Ӝ*Dpĵ3it\%1]`X'7>U2OQǢd:](-4es{a;mʫ|OՇ~Ѫ5<|h`C^s]TdGISMV-uo1pIB<I>}C؇.oFL.]}1u)eLbJ)^T݉9ggH !h>ղeu|\fi`z&IW@:mhQF#S:*Bԧo.]K6h@o7V.TE͓ʘi<NW*Weƞ,"6,1TόA?[55jN	ՕHvPM
7VVla2O}L\gD5lbD`ZkE|՛yU#*G=IhgzSتS_ixbI;8k8Ofb)JrNH窮$Rz7D@ѠqGEZaZ0b:0g{7DɼQL鵎Y% m"chJ<ҠNQ>G.g7Vxúes@S $/8C.{`c+c!7ɝY-2f:hTi=W:|Z7G#*ct#rsQ]܉׽CheJÙsrXq*fL3&Tu +gn"3fVu5Եt*p{C'+HA"g:A@E%݋XX1B2 C>ʹBy`
=,{;CTtl+J`>S	6EAַssӞ_ZzѮj2*L+5rFdjW{
h>ҪvGF^|_r(Z@j)9]~1GV_	aXR>˟3~K9K?O2t|a-;Y&8+"2!*M(?n0%R=IJn ޘO0`#XMԳm:U?Cl>{| ť1P±[#@_ɻcq+_q
YDJڔkuò=%% `U(pbBk&1kڲ1y|(HIEQ+/H	A]$v>&y
&#Gl0]&^J51xEW
2a)nG ƒ3F,ѢGJޓyReCfӺZP;"Z(B@Cq, hҘ)RLh
*`	ԫOT@GJOn}P@ˈb'i{k`M8S%n׉=n"=p\nw.A8݈*M9Ctփu8
RU`$gćPxtڮ:3F ovH5}IqĂK'.>P 8' AV7IhWN?K8T2؂ $RELG);ENY}[Χj<{<YPrs(? uțD
}yim	uI5jcx
<6n9uco#lu.TbBF;f[$yW<	dqƀ,V,j1[\	&U$ыjݔxMPi-fJF&	LrT^ndډjɈOf~F<xo=HiY!yVs2PAzBV6|CmyH*?
Τl]i/ 'Mf½`6WbLAata)=RO#%:E@_E4g;
b8LR+q	e[^:U'f5,Mlr1nW4yGA*W0ٚȁ`Qa꺄)h䒅yqCNmngJPPf6昒ڻCNZ5:čq~(}% d$c	 
F_%PCGEnXc+UYM҈}.uaRΫ]20-#
بģ<#\%(
]._vDdF
O4d)C(KSP*⚚E!l+ `OQ3y&:2+RXx8?˃cIf˘6/> ?sUla?FCxeC^EXYú  YsK*S[tHJMBfDy^s'_SF.<EE||4ḉ!`UC%
ϖ|D$e_f(ͻ&75lnYø-a8KelFP#ڨ,柼lqF5HTa`sv3H>3,.$䜪yl2Y3]A^u0H:D˧lAx#Da d*0#B2ge(Ӣ?N$$l[I$XK{FKˬ]ŮԸu
F<Sg¿X*o3#p,,Indy;Xa\7^2\m9}IUygg ʭ/WFcVrM(YG㥏B}_@{c:	qXoMq6ޤ.LGj:z5-|@1K(SFTz#jq!wLa\[:XyY*shd!QСs
B2#BzŦlG
Fz`Th@DyllfQ蔕Ba{E0F>?Ri꣙OxAOg9&2haP8ݐǶtS1L`1>1Ӝ׏*4^~LGs@&u;!a;S+z߹h<q0<S9$EvVVG˲f)&zNSYȳk888ЪwK#sczvIqۙe`^W
6z3;LȪ8r`$+qУfeX^'LG}O+uy#1p=7%2TE&BÞ+	y̥Qh:XLU1WmY%
l5*PVi'=2il`g92! 	֧@mP5c%J4d;%kAs?הiI*[t7FC?xp9,3|v+4z\] !j$Wי c>wΪڍ	i3r䝳|Hӝ"Qe ݖ]<uR3g.(|@ḢDe[r Zj@)SM{+ ,}QD0H**>$mPˢ/HML\;ca0'Z_Aב:7U/. )6v=+c$ṃ@|ŝ̇;lJryJ}%]&IbX^AZ W3;} N_TOq-BAx! e޻O+GfK
.FI8lHլOպYV+%Uh˭z 8E~{p!SSnt춙B>>c 0pt՟7X; %m0t?0:F<CSHH;Ly~&-
'mh/MЉVWg(wa>(ugmATvӅVU^;`^#^ӃVk'ڷ
bre)ʦdA^L9Gh2B<)x~CWOt1sM9/@!2hnr u?zP'}5;x4պ:nQ."'},b|I
=~(F$(3wWX]
dwͱܘ!Xڑg_1AxsUK_1 ROGL 4lі8a%^zgma
u/ixRafO\!
f!r?Vg $R0uW77vpP0K <^PD3@LR_yqr4*$ًqjZhhA
55]VIe,9kJd
5OsK#6rzΞ6K0k&{z3e>unAoX/goWysTe؏`4l N(Z|I\zipxc)L'6H0'X{K5m6dvJY4^H^4/ik53FKu) pDQ+,˳K i>/e𶯦}w 3k|M0+K R"28DnbӝNИg+^ҠunPuթpB+ɕxt#^d]=F]\PL*ltqK	5߹)z}vtڈaJX}7;4]{j jaKwn#ZU
P@[Է.Юk4շ)U^XZFȚm9 y)	ʴ_cG&n
d8$5kgMFyȺ=
twyL{D3\va"fbcSYA;[>ZHw h-v''y%atZ֦;2yͯlGN%/a0J@|Q
fk45҄sqǀ
%8T{KwCPk[Y& hE-M>gHp: @J-ޙUEx!3%{(˺^KL;dMqsg @QЯ7nSfĄԵHdPG2MR0>jDe#QtݴªN$)K|5ΈgC&n:~*8u;Q34k e#_
zɬȐ@Tmm8^//&^+A@NҀp)`JG+0R։4޳Ct^sަd%j
Ud{!Nr2FpU]\L>j5}E-U2nrP	[)UxwI2[70Qr9J0']si&\
ov©$n+oQSFT
ٹ~pA.|u(e0<Ԗ6$i,W<E҄Gl\WX*"BZV0H.w.덇!Rۺ~I
	5F6*]*W4:7&0c#c{La4v0 [Jw_OX@uq2Z|4∰w1˖򊯐ײ7}"oZŖoYITVOƈ1>s܌57LS*X5EŹ0khORZUL˾Gg(:'ZFlи2BHm˾%}C^pSXnyfqy_u Nk5 {3x2!G<_4ǃ˫eFiS<5j#_yZE yigMXmH0W=A@v,=+Xb g5_+5URZx}&w
pm5)$QQ~:r<6zU
b2 ✏j6#׿TURDYxuAHB-UR4uΚٽ!(?<Ti6#V0e.>#l޳oe89dSx8ܤ\6/Hӑ2).2k(Pb^-Xt1dz%
!>	g	}tc?1*uh~0w@{:'zj]C_0A6-f8o_F4IMZ7J.[K=u֕fMY|n)d7S8r<}1-D@yɏ%eq,Ned'8SZnQD,HϼQ9F9Uq?V.
an@j;944S#\%.|Um^O=S
>G{ҷ>;t 	8~+0xq6k2FyG 5o.YGOW05mnF6ޑ@!S8E RN7ǣ:*dp1|h!^÷B*}35?y<R?I a4qKA(.	SkUoe0<R\Cu-M	{YyC+T8e#4)l`,3Ef{0Y[O-rƟ3J̝-DM0LݞiyR!a
1)	p	~PX@vƏ$,N*	1h2ꁥ)ݴ%(Cvloy:.>~UcȮ
,öP Lߕ	VWKV|Qz-ϡd,|^7%UlS_03ǉ!*7L{őc 1M6gpBY~:ă˨7eAzpT i]`gO]`~A|M7DiAŭW2wPC8k KpFpeʀ3 |Y"&[!ylUzjscSCmw&%"s(9#{HoWˁgT4{b+ROG+u7ڛDd1!	i"ilu-wfdᲦv<>#+lmow mDĭA;XaSԱä^,5LS.o&^.;4NI41#s8@VOؖC9oXZ$H~&Zߒ>=Q3cH~m k0G#32E3B}v}վ*{}ǇtR{	54ąu='H#UCCdpL{ZR}FИD#yҭNU̉W\A}@߫TgAL^o:Kzr-ܥBZZݕ]&mGMFm{22me&ouhJ\٨to־ƀN#={id'|p	J=(h1cxQ`FJr7%9j+OadKuiV?Ш%B>^ ͙=kN5li+)0e!#%kkRI9n^ƿEnBxe͐\3_B/47"	w+kr݇xrGVw4lpZW
7dۋkm+B}"r|
I%Wc+;q>j4Xi
Q9	B
&W?}A'	!yֹ#ЌeYC6QϲPe "XXOƊO@[@f&p)vDnipÚƨP/JMQoy=<b2.7 O2i$,}0GR#ȵK9
{|J*i]EzVS!JIa1:C4+<qG~B!EXlSrVNR[]rך˱XT'w*<klaMHBK\cpQ;yBt}!".զx'b/ZhHjnuz`V𦹖R\AJ_sGXMDw8@9L)ڄ@x>l|esH*F#AjrC<c7-{{TJ|=ٲLYi3 >ACBlz)9ϧx}0ٮy*\v%%+ݫW2!A;G~%nK2FVHmSv(WGA@WHT@Pz7v`9GX]M~H)":e$j:Z[t/[W3l{7Li%EGӶ9V#mw?u
W3Y316dGʹൎG,c$2%;.d2<(떍a!zyE7zn^:8Ko*G}d֌3c^k5VR-~ShhZ= YH&n1?0#RXi獱4ǩ
agf4>
(I|RܴLh_o0sI;Jct
kEᖿ`>Txim3qH)PpQ 0jW	EW B
vꢾ
MG;ȼzt[eXć)ظ'C$Q5Q>>]{ѼbŞ_Y^">ct+Lո*2Goh6;)59<_]ݲaႵZV_0r4"]}xUgX^?"s@r IggR.9y&$@Dfw@ eita+%PEuEQކCOqUz9{fZT`|"<Ɨӻ1qd(ZxdTEclw璒2
/r~9|غ">/kCc67h*{*m%F!2PF{X9eL
f*$sTXE-Y`b"U~3 [V1:G-(С R3ȾQK"jV`t$a#o*9>1ЄFq<QrY( ^[-w
&PLr¡t#D@X*
sMzv5HP'?D8~ve[ٱhȲӤ"d5iVaH<&'|fFZD'@FxnQU+bG)lpɹoEz_OUDsaF20˜Fir7`^~]]1xKH0v? t^G3
gSko9#7b;ࠃc	44\S]TҖN470!!;ђf~aXBaH ON^\͐>t2q,O싸idV\_w Dx
ǰCqX[ٱH^ϱV!PDd@-c9e/6Vƀpsqhnp;E605z	mji-O({x"hfUM;^ƪOE2dLR@lPR{Dab%~@S-w#m%p{K
-4?>돪TJk'&uS=Xt];?B0! dٰK6BAI<A5Ac(m?!&PY]z
v5=[ILpo/͜BuJ{$UR}lۄ	OPw(-Rc͖L3Q(% }lgob>Δ!WFP[
1ղܥ	hʽ,x$rKxFTcߠ-}UHf[iʜjA
,!"CηB[xN-		?8{i M})dGyQN3>՜$Pi/D2TƋJPd{3ކO[jf6ɇDhRsh7Rqȋ-h69$%օ=-:{oT*+PbAq.R6N)gM:x/%<`cQӦSw9&^	NfZ}.= P]%QWLN x[< $[%s ^ԧ]Lr/Ar6jtq]16
ns7ޯ0t6#;z^yc_<(Vo`r%lo߈cMѿCj }C hΒ"YLU]xL-"qrW'&Ȧ,clU2:y^0,;"idϽHɇI_tqo[jAmb&f`KEA>"$B/'s(I
dm-Pd^ƻ!)S_!#Ŧ`M^ߴ~BtgB241D(c#yB &-.}3';{x,Q![TbbJp_+.
xZ^1pwY9]dEE*	"MRg󇯒Kܞs_z!IAh7$w퓦tk=z=v~\F]ǕS
\G! @-&ۊSـ8LNZe}+:П`z~U RU*omF(6	V$IѺ&KAޢeAy?~I~rac뼶pu7]qg,GBN2SahXkks;Rb&	T6m֭;M`PQ$>OqdE_	 ~X%4`:W];u-!<o|OW?\!wW/ԵJEj (SH17lTem@03jWl,ӄ0a32N`	f+
HDQׁfpv@)rQvQcLX]
VAxOd(1qF+
]'J,osaSi6cÆ>i/P!w棾rȭ?{&:o=5A{9\06>33=W6xuNMR/;!.[(uwCL

4٢ї~@m7x$2.IAtN%Ɗ|MGL+VS7I7ԑKo0c	K-VϿ[mJQXi'b^n
5u-gE~K[0&55˦QC=ѦǐX3SP],BNs7uf	Gu9I98܍yH
o;z.0w9ӷEsC*E;w=Qe<"Yj3~7
GKD>ܔǬyzڧ=+a.~+삥(.tb'WS:&	drƺ,t
q(	rKɓtD!!E݃(;Y?PwN 	Y=g	TqR܎u~8%Z|@XWmnJu(5ma_YbTç\`UF_ڊ=3!Rl
<ri8@o )?tE.v]&,	U*?Vb+v$	fMLZUbyl˦2?F,Q}XKEt;Jwɂɂ)t:TUx~s|4wҘ, "qYd0
 %\Zm.	ѿ% fsQ>gdjh<κngG~#@(yi5&U:3o*SL:Q:
Nf cGkS
;jC^x=[Kơq+|p	< Q,74#A&oM×W)W [c)V*hCilA>MH&w_	>3&ymNB~цAǮgpmp2?D.w&,:Hkn%;l1$0a3D!@s#e{Wk	Ȣi3XU8F{TϚu:SfhI8I{kZGaa=~>{{vz796I%@`rz{
P`:=1gMM
 Qu\.T{(aאy5<h< 3bG8m_!>0h /y".O@)>C<OA)=X[?K.^fx=TA#
`פ
Q_z^Ks{#V_51Fz.aѤZh"`ʪa%τ=)# ɠK=w]W>~Mݧ&X'v7ܲ",@S&`jO|"quCW|NՖHF&	{m@6^:;*\!dܽO4ʠS6WMLbfƚިrͬi\F:BoglEof~L9~y6lySҤW[\cp;-´uwhkdg8ZċWok4*eժICI>׽z^@ qJ0a*y,Х<m\Pj=^TIcdLX[4DGP̸&.{# iC
CN-ū<I,:1a#9t;3L8hO
3nl>MZ8F1VM)Ł
}(z3zQu&LqRݩeʑ>Mlt$05&sVdtXRdhP=1s>f)l r"KR34h2\ZB	$B
f(az7q;ta?&Hl*KJI[.PTr{UO)=r8 HMQ8zMHMz-`J1dIzm4C׉_ө8titg0vxH 噦5:P_d^Umņ [rh̨TxhwVp:Cu;S_ngqZž{t$T?l+4%|
e#zOxȈlƱ=fO8NB3AL3ecFJl#rB$|2w_& 3ɺB@V,X@<vAʇk%!؍ev!&*r5G4?\Z8척6:<fv:/~8!gځwlQFp~؆Oz`h SSoP}t	|m;N1H͐L:^(T?)n辺B9QI״Ht1Zg*$޲DC G'ƍEv$[0/h4wH4Ϧv޹C
7#gZYG|o7w]"c\r}Kŗ-!ȫ/<B"B0rXn@",%wB5,gG64iUQF,ww]1f2殳&7Xl`<~=#+:IJGL19SRR_]HGWpg+ ͠wxH:Ȱ&m\3%mCrNepSXUohm$B^,%$0H %tvրTXƽʟNGOIŔM
>ľ6؞n`
E0&[}Cvi#ΐ$]s~NvMn:ɱn߉)&>+3MH˿2eGTbݭ\]0FR?0(Y',,MGcm7ǥKsrBGSDz.<;If?lQJ.Wy SYkTQ"8kzPLxȂьכ0}l#Z9i3Ȼ,/$q*@Գ2IcG&%ۚ9rXV'Ю.HAky+@Jp7bMlB/y>BO3/K{&,!qsѩͭtPQoepTia^hѲԵdvah嗺oq &Ƕ֓,G&lG,%[}`rp΀){N_S^+߱r^r(3Hk>BSۜ1ƍ|]XYQԥIտǱ#)N!9Mzgch,F]O"D^&},9`OB8|+*.
ocA/kOZ;BS{m>EЃl]Õ=!
S0?G$j[X]ã(.sfTص#Kg?M|?)7.hբFK#.'Jf|*ҍ$Ŝ׆D!8
8)qՀx$nCJkO&EC7+1Rk kZks$h:7FuDYG-`C ԈI\-33wfdԋ
g&K{d[֊d';UfۢB["LJ_"2/c
6|J5o
?iL<BFg#I#
+Uy+
3e2NyL0mt/;ʼDG!uvd0PCQd>+a!7P}5G1hn$XnC7!9˓uem=[34G#5&F=o[RnӶʛQkJdL妷#$& Tpx3|ےc<,{ RK	*O2![i\7;	8q=ذa+1ﶤڳ'53чlǇ0VOY^34azF⣟uԊJe7? ޅ!:>#f n"6.يML4b7#΃2y4V3\Sbռf	`C2;4I1js/r(YRܘB8eoq43);&N$Vz`4f4P>ىTQ3e0Y6}e+ BW#eoǅ;*<{Ҷ$YSoc$RYy(jM6#Ct,ݿ]d38sԝP5F=Rb)oDA
x$.\q@T@ro1cPO>-p&~`mZʋo,$TO7"	UGAy΢Dq<@g\<M8b5%sef|VWϐ6rm ryL.l9ݧǆ|ヶ><Ds6v[&W׉!S
QM
سúܘ31ô]sf,%IJ逮Y\S:aXHZ86hy$"qCM53jZb&+lutF48ZX%/?UN)ז7H--=ɀmV.i 3H~`TVkXs{9Hu#.n	Múf=L>ǹukDYs/6o\rY8<)堟Ix #
C@/a%@h~]~Tm4?gz><T3s\˭ʶDܢq Z38MTʵɩaXJ2<pYQ^܍T,>,[Oac%.;s>F`PyXh2S	2Zzx´f
^AB d6oPx.m	Re	EPC*\?B^ezqjJw}ă<%UG4GR灕,?ű}ߙZ-Sa!QA%lezY4J-]KD	
~׿Y{ScKpHs`U:,u[M%1gmD#q_8fUs{Lo <Z(˧SjŬ t/*w5B}ӫzTF]{=HW7p_ѠZ`5D-A&,-!(h+8[!5hbq	",/,jkN-<%T~Ъ0#-)(0F!Xztu4)ڐ#Эw3xX˽3視3ezWaiiRSk~Y}[-FpŅa"ϤxCe<e	b=B,m&b5ggIe+ХVq9ddܮ]O.
&*6*r*.R
#FSsI\@^ѱ3t?*܀5,3iQ\#k5\p1Hߥn;yaR_FX{8=}~\QɩC p"h֧~JOyR'@Y0}坐*j;:7XQboU'`P~7<;e:O;cNZ9־<)&zI_/NQT	Ęl"R1 9xeDW#gS凳6/_BBi/ v(.(0@ 4DeN+lm u5TcXx	3C&#00="
_g3A %;mq[=sNOLМҝ$h[g=yـ í,N^gS<0ARD4G
T{0@PJy%*KI3ٍ`)|Wl(N;qB*[[A~N$uq\֨p@GlFeo!މi~4dA|Yh^OM^c~f10F5PkW"=+2	Q{brTWW8%b=vA+9]}VXv@su!{O^ۦZJܽP%J|4|&#y 
yq|PWVQXyW 5խІ|7B	&FHĻCjP+@ɕpq%`>)!t%[U6}~@@#gP̋~BC7ujcbLHVW=N,rcZ%pɓV!RVJfA/]=,%*4e¼kU7Xn-n9kILJ:TTwӭhZcdzŧfXѧJܰ
؋5aELf$ ]{iEs<ENUl;e+"'
&,[P}IvKz

P-K}4q |;;PuWSf
|y੡6t ~lOM|y4yB3HHZppZ٦sGu<FtX$b\
>#gnݢ5<HXiMo^[pYi!SW[VU.AQ*^ C*	:(w0#]sR+r){ڹp{[dt;B{w/"`]˩,*Ow~eQD!F@.zv`7R{Ҳ(ޓjR|I
gNu#6BܛXt%>)	Mqt 'eIqj.g*gߟbD0If-Vnd	sOr~PyBgu
WU+"q,[ơG<eB_IW\)fe`*FI@kzugL5`$E Zga/64Dn,1-N;T
;{DQ4B'48rZ!UὐDީ|iճC$.';
kf+䅕45A4Ý^ue
0aR<wH؄b2%xĎسX
ɭ. *	B70+ĥ"Zߘ(A!A*zBt	@C܄mjYl>MCR/{'i
^~|L݃0S~3F1}:8%c*Pk7mz-lPpÑk!z,W(gae|Ϗ38SX
bZIg1} ^ֳcN$i	"͇6m0qih;d=gh}ƨEK|vsAǧjT1s[d4~? ;͌f#ztd"-O"*1(F[)1dߍ?V\Ef, 謉6t˥|ZxC6|oIbaOwoMZ8	Ѣ'T^	/-1GbLK
-қ8.fͺC*n<!Nc8c#k'I%]e(Ϣ%~ܲ^)
f4Q7c*__%	Aq8AŗE/4=޽.C	X=	XB~ASra N#V	7Mb#Xvz˭Füӆ ܎9zt("T,O).Q5у5>}Vכ;*{לO\ygڋ?sHB[OR⧍@c!O쐽~C.9g.܏Egd#PQϟF$}t7-;L ֳp+tvV[U(9c~A/b "ZpVpVa,iK)ieKop0x]
'+:hU:C?*.,n!LȏbCJ*fjƚ80#ĩeSr
lAG^#2YW89qAjL_skqb~J&ggͭp}!dBv4U΢pc12ٟ+ GR\2AczM!$7կwg}Ɖ,]uwq( xWK%2cT
R?Dɺb1ka	-L']V\)ֹP 0jJFcI寜3fbܕB`=j/ME_v)(@8pm9kETt4*˱'+Ý[GEg 91"o2l֘{ֶ|3F}死XTV +>pS1)Z)Q,>څJAm0\k4)6܋̒>`J>=Tde>
&nм@?FGY*8_ܒ=8г	\)Z4P]O.ۡS*]N5j&ܙ+aX`4kΠkȰ$9	pեEF7~\u&2Zd
%"5wZ2b.Md3&"+
?𯛯ԉyV7tLx,¬{no	ΙRDN8e{bDBMM2ЮpxcVM9~RX!4YpBWƷ4]9z
@Iٹ2,=XDz.)^ګHdifR	2>rQ~ZkoV͑^9
Í?7>)Ol ;#d-f%ͳcKlsVoA^B{US|lvK&>HW$#q0̐_67x]2_\R@&Y<!ˠxė4CXPG3l$meedYk	*h^y7A<p6UȕbG	Ct5edp`Hn(?tf
Blf>mI^6S{	S|I:k^.܋bfk'p;D=[بUVWPD!婼Cr{	-QQd^Tܒ	Z^GV$.FR<{R)CP/{Ie"+\wl8{Mp+$/&z6kۺtS(M[	(sf& q{Ёhd#tM?0KpHٙN֚i3|:s9$qojLgɭF
JE6J7="tPfH@ӗd_b;@ntdUk}RGMoIjy#$͗wї(nړ{,4coB(8~yHko=!DՆTep!=cI,8& o 
@-a{"Vsb_'C{=7<|lI=!? 
@o}9>$ Kc W ^o>>=		=P;W	kQ2aȦ7tm؛dR¨g5fsоL̔jAqp|@QGٟk3 
7ЈFO@]yo[P>s:RNl|au&>I^})j\QPlMB !EC-g͓;p<MdL΂.84hAJZoVyt:jGZ*%kDXYA%SPPb3>gsգ΃O"9/(	Y4Yiq졏IՊɍG֗$3KЇpfH/roy
&)˃꒴|H|`CVDݿe3{PCgNM}쵌ȫ	逌CCCX̚]qQ̨zwxdTߐ*.	P;6םbGxCa~+IW1(qR4ĵ{f;<*#j|yȯ8ye_Foj+)A{g!]A}(R2we 3t$ҥ~U?D5C͡ }q5QIAbr2tCqGcefQ$KH0Iٰn{vCYS7L!#ɀSw|$e{ۤ;]  1*˕{/bs9LU/ͼZ}Hxg0#
P@f$ _]}GpL0L
?AAP_wWnf7Z0PQ7ҥE=*xbm3RyT';F:LZMӹI@wp]qBBI3$JWebDO
+v3(tMP wN]M@Diyvt<Hb@5K
? ?ҨA+FԳ_1>"tR}41j(U}-B\;_ʿO0PJ1>f 0ψ%G1]B^%{18lފVMΏ^D<C/*<8wQMqsbhz|3?QW6ߝ\cq6Xp|:7	^BmM	=>/Hء}/$pƸ{~ڇR"=)u[&D;bY͐@wi;778ZEJ"KlJ౩'CIc9u/1:%ԺF|P~Ċ}HI[^E'!̑{(:V6JS-LL5aUDEGvi0K%Tu%+/7.K1պ'A%U|=Dz 4qص/^C6N^15*Yo҄.9S~)sИC!H<$ZDE4{7d޺^]+yVoUz`'/OυD޿҇YmK	~D`=2UE*D~zJP
5RcxIX8rzȖJ.F7 7q]iAm	;hz\܇*']$%Dfy
;N
;Ҳ71f=)ؓc^6,p|0iOϿ2"ę,L'g@ȫ 9l"$qf}Q.xzEij}Wj]ٓ$qj!GXݷxRÁ-;D+DD"J
2w[wmL[0'ؒ?3}<vp
@
ZE&[Ú'
HDc>{x?͘H!sr@JV&eƗfupSnEzlrZI9۸ŋ&˔؃Q
Apvnx뱇Eop+lmrx1m Ri#N]&-|$7[:Ku2%@!=+^7٩	Z,Z
	rw?nRR{F ~&5R7_2#cpJ鯟=Ha12sb@b:H[1}72&L$4n<`VGA
1-nNtI/4PŮ|)?0{,n<,s(11\gfc~J--ɟ&cW|!^+uW3án]M
8p`2u=y^AqE1X j tWBn۠p:߷H'}qwr1tX
N?o
@j7c~JbOT[hi?}<ۇB + /{J]5uQ8Nքz%;olΎpu5W
Ait59cy\x b;y3s;C7/$ kx^M[LpS9sKtdqRkj"Ω
ufNZP+tOW_#R_VE$UCߒEq/8$rY1j2$elXJJ`=XWڹ_>&+I%ly_w݆9TIO' 2POHZRM9Y{:tdD)/V{b(7BZl#F>&'i`;ZD+~bPt!a:6!9UZkdXbOpO;hu``ziX߻Ƕ 
]ӵ2S@mjvWp_r켎^-mo池QWY^r]U^+_@[*ϞZV%ǻ*7A't;-ﲁC^(R6KG
GyĪ8+@JEgsX(]J
Om|ZWls;r;%Wi	p챥4.ZC>7QYoI[4@k
MkNk0m?g26p(?PY+M3|AH%mɟa`| ޯ3*5
R$Aoqp]ٝ
SFPr»iQcߣu?C
+Dha Dk̩x,)*\^'Yq4o:r6]Wyŕ`{Iˑ{D-T I_a@Yډk;^~(lv0Ȟb?(Ě%\JVY[qb˅1z+b̎l,w^Kщkߘ5.s&eM4PDA֩02:b@|%Dёf~Dee;giNq1:4׺A0g|P=iX4E</iD1L5o6I*G[k.q	.QL갾) d=2\oBi"F4,5~b	jxLJ0ВW ^tk;wlTk8noX<&(v&BC&&JD3BuLT1epy,EȯyDgmۓ"A2pZN6;(Ai{
`z20"~A1ʨ'*G9'L|\h"(5#EK։1Sfaܠ1Z_E۽*3l.Bgwνz^ oݛs-Ya9VQ7ͦj sمM8MeBǒ1A%#%II v91~-%p?o$O!j&{GQ	[jsȭ`+%J8*tJJ=tQ7lIe~Ώp-	82H§d	2G_A9 ?o;<t>SNh
cTML]q>7J.&W_:S$$蹾 a8{D~ r6`U2IN>ȭ'Yva=1!:SmLl2^=e=2pAuE JV
p)>2CD!z'1Vɂ% 8kǚ!LT𛁳 Y{/ɨGC}:=OUǇNNr}0pKUzA	ut()xD~eM+E$첔#Я`M';+x7]$Rn v$T	avD#]d٬o2.T$X!dt4gABnz(	BN)v@`AitVUO&{CмT>,(ޝ@mr"$=`RS.F$gZa!]Ba|/yHsp3He87h'14Ċ,P!ۼio#Df0
/>t\)MY ׸JdH"#v$r#
>Wx0:Xu26a9p[TfC(j'y[Zj嫃p;aU,
slv
Z(PbIh=";N #?{!,U#D?qq]PT(ka3q4Oj>s]U݇'vЖY,'4%`46m#-`knId9 Wk;}^dmЮYrs,w>4GPS^1I\s{8jL=^yNkJeL8H&[%_+mLpr,:NtxJR= A}
ph9SUNBp+/Q0j\uzj
 #rIq^	I/m AතYp,5GS')ZrimCp^q31)_7+-p7Et;\B}+N7=ɖeOs. 1po񟔯80s!$mx
4`lE[Lj,Qǅ

~l4ԙ`EEwݗ?:^{<_-f^VJnf<W(].RC?\ɜ UpUoxpssqdXH!,7?X<o/R:@*D_Ho%\RMh$uvEYJͳ7XM'YcT?ByX9hIƑ㤟L= ~_HgB6vb ܇Z9=z-rd׼CW
6i	VFFDZ%82F,G(J*L~%W"dY)ZR&=LN)6-|̥myeZH:ZwnTNE!ĺC[{؈EZw2_YH``dqi]=i҃#Fle[9i>M?޼HPf>lAXYA_UXI
M!$8ݠAe%[j/:!hS
.b	\dBlQ2ÄړO;r}~JmI> sIǫ2{ft<"},̾L퍯qlU2h W$&3;veVW
Dp@/Mtqf]Y
 ՉD<YK9U$/VXxzbt$NMo3nֽ- 3G=T-n,~݋w('aБ9pHl'f V\DRx:VV5#ObF 
rd=	}fP7  Ϥ|苞$E_Se
q&4/L"//*N#
]jqoj0YeL]-֛`GhWJۚƉ~Y.w
։wLHv5 S!j2ݴ٘V]=gXU@mnu*8ԉPr		}^1>LT&"U.<=D:v;/k6R/j?S3?ƴab/ᔠy@(҃2_ºjD,S,LREue3UOx{aU%Do
MmTjhi{H!];)AND^7oAE?לA
Z>;y5OJZӎ}"×8_>~Axos\4CYY&I:^&e_y.8mbMPe&^c*Â˓W|`0Mcc*Y
J3O~tl]z
J:amY2tmjxK^yP>h?8ymL  Q̔IҐhhu:M7L六lN!E/l_77<PG5ͅ}9Iw.H*`aWxZ0a Ҿ![Z'Wȍ%A'eA0+Z^A?NAM
qҫƗ91hkRRu@v|G咶?k,Df~?"`jumZ
0lP(kN.[ҙb7<**ۂwEis3kc0k@}z$ޱP`e]8<CI `eLtJeo}lWt-P%XPS(P8kʌcBEYö&D⾄
U>c4s(nKӶEdE,\Dd&E:"+z'~B[O$:!l6"F@%f/Tyj4>
MloEi&ʌ_[j|f3
#mN+
7h^3w:.dmC}vXu.w>xf{>]16يXף-(+ͦe%*~Kj
*O7fmm&g9>Ԋ&u0 /Vdq6'_xýu$Gj-iv<kGf_8֘)*YJ;P0v:Gypef ;]s^^=rl`x$k2~!/i`X
7XH04̔-hc1nu8y.sĔTѿ
pG4Jm<vOX=߾gzC̤6 p{,:,}wQfE5pHMv!LٳLtC`pQ*l(@a]Xܶ>vg?nG8.5s#ts΅`2N],b,ϥ6ޓfՋw512]y$tJ&X1cQx4c4*A.yJ.7rP7-x P*\_e+/50zoUC<HQ4rFpbnR;T}-Yn%-}u,̚m6?-DlUAQ'M].}HrVa?ēuu(3`J:uė#l__IVu#F
 mP_`&r7viGS^Isä2&&󫌚󚎜
)45D_g2x	UA[;O)gZ2~SSZr ̀P6Hv#vvzv(S
_{4Lw!TH*
r2625N?9fů!
#v$&.mL nE}ĲCPt"3dϺzm{^A
nCT
:taVw?HUr;c~ 7sMLD>Jg5i?6`\f>[rٖƕu  <u'NP*̻|Wt8!4vsoÈ5fl&n@) n #\TiGbpEϷQVJE^ie5q~}Z;om[:>WK Tv</Bup@|:fDWbuшPjf+v
&mWp˽(ER42LE(U/N"LsdTu	4ߨHhVe	kYLșB7*S.!$K\p[o{KDFP-#(@@*i'0NO"Z<.ovil/|@Y&s
^sSORu?w.]y6ƦH6@gt]	Pvk
!!'
4};`͜`DGl"*D$cI4Y=dg%lɧ6R`m%bVK-%`Ox*hk$/XЪ.J}M.g-ili-`}xV(D#В(tNdEkꖆB*Sֹ<"Hg2C؆/-"l)w%|rQG&VN
=Bm=ko3G;Ϸl4[>*wiAU'd2|}X'-*H+;i?9C;\fR$bi߅H:Kj ƀSPq3Mm|Tg]XZ;EQl?.ZR7)Z/:׃޻'d),9lHJ}/vk7cKAAi}Cա5
hc@<7?"VԐw~də70w\~aE?
z)l?>orEd ߊkisIk M?ϓg)I+`N-4v.Wя2w>9C4OP^;_=bg8Dcvg
Nd:I7ueji`1XN)unr7AQ9̂e
Ļ'Ę癠PGF\rߟ_6!"%`~2g!D&sĐ'dnqU?S3i]ŀEÜ05r8s&+`7)!F/PǍ#X-^mr'ˡEe]
9S8㚘~$
_~~dרp9+-{=^Sa*]CG/4*7{R^){GDڡVct8]uzк?Q/+CugA-UZ\	<, p
*ۺkӭ2ޔlq}Bΰ6Tvn#ywEI4b69Wrz)[x숩DUu.Y|=YgsCELi˕݋iEm_wVEpPrg\p=:+?\X(ʣQ
U#`g2U|M/iIUرR:mS}	 >.:|AjP($_8Tea3P9WGb60-f.Lg[Ga2@8$83=ex9Yϋa)ѻ]
)YKCDJ\ip)c]t힜-.IPt;+a0.. W
MHm|gy|`q  %hѦ|

9:]52u&k6hUI'YƷ}_c@sXU@Q	ǳ3ϓIN%f\%vw}$7ص
ڗ Ge:fWmjtxrIGFvVbx"F@Pj}̷#yw&YP\=l Hױ@?֭.PeO7KPQDEq[ҁ[|J P3t+!qN_$t{ЯTEIRs-kSqrGIer"/\*!0az["6)uG?D21:G.:qH[BSV?j^6=#e pys S[GV>WVR,hF]o%KOw Q30p\hz7ӵ3P)<\'CH&KuPŒ,	KKY=Ų RP^cT5g5h:7Z~TRG$axb XK3l O.|/,.x\ޥ]f5P_Dl/+E"U+Y*xn_	LyYT/2QfT."?'4`C@0ws)yQ`"좺ɇ{#Eثm1{.T<0.DM'b֑?{=%LG)aZ2]@  ]ӷWѲ> U MNZia	Vϣnؐkrf=z?bk ^I3o[ӘWCqx:2B.XhXd<Z6Lg	(rv>D?\}|7 I޾cXirY%kߛ3Zb	yu -PW=>T[뉮Fm4hX;nU]xG
S.\<8A,]ЂsCVpk+OO6Mp~'+?W=M5zLV}5jI?CU8OM
03lS7{
aF?KV]6Y`!&݋0)ׁEʏ
"y/
'qe$WnanbDk^x2v9)LA0P
Jؾ%9ïT=2Tjo٭4E≎^b|W/9-V{XХ :RB$OVℍ)
-E@HbNq|FAefݓSotOtCx	 E߫LOdh`3+-h3
	~71GL=PI2SqKySw5|=qPfm'xӄy:XCBJJZJXYO5jp^AqX'󇉋EkFΟk(.^nd|Dy!d.ֆ$֔JV!Loe¤cr+''A
' \8qM$f PL~݀,t~̎bb֏C$i4bJjq6(MŝZB;c--pZ^vi5A/X9ϐTohD?`Wju1JSb3U:t)+c{,Nm
_M/\68Å3Ay]@[tA1>	1hWn0tے`-$p
=$NM*N|e-ڞQUݽMv Ͽm,_5 @X|d<')FBr-Ap=0
_{LuE~%i9D\/|+n/+Q2  Z/ɾO,JMlNb@.m#zFԿXcVxGDYQF"UZCgKOAn4k>,bT4t3BGJ5f<_,Bj{2sƓ/9}F5RџW$/hɍǇ#.
d^dHwD[($ (4^) ZҷD:Kz(g/G2VEZp ʢ|uobJt!τpw pf *U	cpoГ8\I\kn}ӈ0)B(S?JM55YBHXׂȓ.y6 =uEuO0-DG",v],yFazq9J	x4Q	<8dsgֵ1w.:{p/K[X3WtM~&S4ɇKyAڡЅ)2p<<5M	&Lq1r JWlcL[usdPp-^:}(xi/-cxlDQbmW4ղO6Q%lݟGVRJ"x8c=93Mɉk֐	\	ڹt-!/\2J~o&ʪe%W?>j؃b
WiۄL:HsT%~!x{M9~d:MI;yCҎro&(~`rb$+X=%+$.;mP^*Z
xlUQ^d}*Įy|Zu/i	FL]Lro~ǣ@R5ogݹ)jqȋ75"WUsOL*!32"!Y:qEg@"0*K䡍R6|h31{t-kz/is]kmfX:.zg1Uy4e"!E_ָޞ`9?k)SV;ĐUoJ ffiCͮ
3YNx涶xTPS0FH|P"lNgǾzi-X%^* z6mR]mNG#0宜]S-L
wK*FM	.Bҏ)'=jKsW0E?ax-ܐhݿ'ésk^\~}k<-/s#eq>Pq_ЭymʢƎЏױtZh	I׈,4HK4Po4飹ڂ|gġIdT3iz9%?j7GkZnV4*78kbS7޲FhLn~>iD|"#/LAkAY1 Zrd6bx/vJG.f^T^`&'Yrnݩ#2g>y3\.NBS";T
O
¢sVVY݄wYЩR}09ΩI˻6)Iu=mᶳ
rP81Caue_%iꨣk<A3.LնIͦX(;Z.ӑa`X;ݏDP~*7%~g@ˈ6hvoi}d
 >KpR'&_ͧ|8&:r	ϬԤ#p =7diH%Ѯ:Q:ZC}8'&\2hoAY7m^-k	O_	#J"B*U4RT/)O.Wǯg}u܄bVyqONwҷv	:]jޒםia=GPt=T#kNJ=#!K7XWVGn1.G_|ʃ?&XPSQl~_-l36 ~`b;JƮEFswM1*
:#lC>ݣ0śMA|gSw%5	'bۮlXxTg\m82)D!c,\+>"	G3vϵX6
$)WTIE%]ok`k^~8?ԏj,-ϛ^`v{Z9BsJi~uP!t^8	AjIlwޚ<8v?Z?S;~2r=-}6˹KzQCo/>1f+GTrR~鿒W+R.cVޜpē>L.ɻD`rln&1/Ea݊
![:?}>.z/+Ŀ_Gs
LgZ~'VN,ka pG_ݵtf*_뜑jO1_gIϦw7gy#gf3rpMĩJǡQ7rz晫+⦞7:9\{

}?a$0Gi0wj]W$Zg?<ΣOgG9y#>
M$01{Άԃ=Eޜ|Ϻl\k-I657zz\i2Y0dT Ɗ]344z8XD1"|B6YkcKx dW<OE^*fY[C6Fq#9ӣ\EB)⽕!!@`VT"zQp
E4l_8ś,t߶fD?y,٣yP!|}h5+oXǍ߭\]d[La$s-Z98mv/.s	ҳ&crs"㼒sOOB8?FsdcDu8x˿q$aAXL&}[ЮXA܍|	
~92䨟f=	4C{b`^L,PιVZB;Qtr9Qگl1"ĦIIM)kh,oHdSP>d[x8m*Bl|+ڢpL4j/>
Yliq#FIq6Wܙm,ŭqc<ΉdVA][Vv>9a&rGad<OgvWmU~ow'ax	NLi#Rjz𪙎h $̅Y<最o !><.6ܧ"嗅^
#rG(EP!4t.+2
ceEIDE598IGpAl \6V/K/T( !˓4xjDB]WL<\RL	@51Zf~>јMr~4.B1ߠ|cZ
>ǋ25@,fɪ"ȵZUKpgsL׵5Z5C*P||($+t|:euX_[e
B<i;R7uI)Y`F|y-`Ts.0G@F@@UMm('fH
|"a_/OӓH{CQ%ɗfSa?O$t`ocOtRC]^`%/Ul=}v=[XLH@z9Jjcnu֢$Mpz'%+mtL
=p(ze,ka]F%j \RVzܺ02ң;"U X]([wv<`UGjy;y:6ŠX2vbr/Vgێb*83D1(b6o)2nÓ&; 	@\3wӞdd}~kE+FnԠzwz	7j 	@+AQU2.0h1e")|zGid
I[zS@۩{7I{j0<TpΆ{d<xbkКXNnsL80~oi2%w̧[':AXZpӌxn.=_GSf+txE^jM"</Z#@MX!&;o] ~~Cv6ll(EގƇ#Kv<_rEKЕC$C,u9
/ /)DэSI_bQeiqȟSz+lľG;<國G$FpoպW$] g)uݏ)jʌ]jl& FRe׾?W-PϺ9cA:
Հ1PB rg53=O 湁ؠzقC|mρ*Q*<2k΂/*~,AT?+@RZ}.ϵ){nٻiy`,;T\GzͅJk5^ėy	$7DR_"~|\)H?DכxI vyqWi:6ط;ӿu+QǂmhEHg|F85Qz6zzNwRXi%˅{qq4Ŝ387s7T9U=|DxFM_"1QTte|Vdan~wJ /]sD\6O7мaU౓)-ou^O"3Q?^y|;G7pʼ|E`WQUYK?[B}RR*
_2W"nm73@OE'0L|6=~c"{fp1f.U$<cyUкnMR$}]"p/6}hLp. [X	qk]\q^-Tw\w
(ax.dk	3cW}H+#wARhTG]X[#<ܛkAվZ/q+,2GR #Glq]0([ bjj $XǰLU
J	y-p,[K[Qa!t'vYU֙rkly?D}@k{Fi٬<W~)P˃ǃK4h"XmKuGYؕ@(=}&[gpxN0P[:S?Ϛ4qz#9[
:10\c_gX٭́6>
 <;nDhԈѣD
F7*}@`0G{)o#[Z9r7\ML`nbC3=E6A.ӎ0>dv$ƍ(u'L(C	LX/=^cIEc|1ӷ
5 Z^*"a#b<-35}5$)#êm_071$P֭]17/],> wcUc4ŀV*p{MԝA)_$-:Nߓu?TXV ,2ݽbZ,-4յfէN(Q!,	!'o7\Ək&9uU1ˤH%_gW<HemZձ6Z
@ /U'A1}l'▽1yDʿ3/MBŜrDiFAkNnzɡJCB-
j5K"Op2JG>Y\Zmh_/U<>둀o	\@#q7GٽXhQ3xn'u2No"E
#T
`+_!sP9A) GL+s>7EߜUbhJQbUg`N	(IrUՄWej̈́:WXî
\-V;fuDh5+#o9".QYGqjt61_k
F%27ÓW\!M+X@S˪8?Զ5/g6BS.	$Qq╅q;m,֬MVlՀ0= ^POCHm9^ sM*1bBeW}Qm(}|r;'S阮F<7Od1t)Qt9g}پ+zRvF	O3ׇkQW̌!:։k\>+GSCc+L3I_ڵ(EoeLj[NVm"av&g iȩ=SE1jps-/wa<\fPqz)Uͽ.]]*/˶.i=sѠ<QX\ǭy& o`#m7Bܵ;>!eίmWcQl˿knNܷCAse 5J'5lt9;UBBfnٖ&DbC-Lm۫cggE_?`@#!'@/,S9ɆZBM:2tx7ҭγWKW4w
./(z
UQ$vl㕫-6GV̂sn8Wh0VNl^|`(⊘.|B"z헚
Gw?K oԺDX#ƍ}h a9:x5Wr9{{<qmWZO/kB
kehp3+mꃩ&{A=PzL r
~Bm8δQ%&IA3
gt#,%YS'Vg4BGbtu$.e埧VǇ<8H$_3&AD:VP?n=OGLTr7řW1+ӳ'tԯ =:;_d^<)8JMJ|!Z=%yAK{>v遗K	rۇgrlBn},raIǰXsm#uf")6  ,l MX;
(bM+sX1(B_ÖI][%
rYm츨;&eo$4bQ|
O=pr.
vIj U'e]a)*EI2l&2[[ΡUI$tCY8 Mߒ#b,Ѡv0;F.O?q8q
Y$%M
eim(wgN	/L2FBe~sTRJ8,قܧ
LP3F7wZު"uݞ<dQlKUXFg	_0^8zj[_~^(@f55<5ճXgDJM"W)HkK3r?=Q}@plV4+H}{NV3.=X&.6T8x9JW @@lpmGVb+x(>{eҽzy+-?n9doiSY\"b`"wjzM:5'> oHoRAN:xxRώBO䚨Oa{MrqA	PGw/;
жf~w]/9e=uv8o,̍qO8<VW NP/v+џRz?-5)yxI]bgrVamw6_wu[ƿ)H߫'}J=BDd&]X,QhJS
x@멆hkB\󏍯z /`q3tgMi,^Hf^:CS7#/{GP"xycZ ]va$s__ynM(g.Y&0$gyTsBE&?>.
 hY{1w2ϣr93ɐs"b")Av4Zf ǎIRqL]1=59T3`e[˘R"RMVu#/Cmx9ڱT
a"8|__ZYIXzX31l_-Za"i#e|#X)m
! s2Ìz[M*KuɆ9:n@KAf.a\䆪6E64TiLt0rB
Y:]܅6jrQ`dh'!KQ(BOSpLrԖ:[*2yוLXХkj%e?FIz߷N&g6۪mhߤlΛ#M-܃Js{hrpH^3=4C)8=͑Scü>T#S9bʾ(8 k8.Z&	=1$ЙaMHLfێ3sሉ/[} uCng=K^	|qR6GW\.OV[7%lkokφ]} 2?vXR	^H)nvR:Tp%Q_ͣ)$iT
IdIcF`i(k6#ߞf9|TT{x8=v]@\VGId Wv ,jW:
%g2e7% -	P 
<?i"èji W,0D3&ˀ}4C3JT7\l ٠Js%
Jsd\=#3 ΢1ǟՊ	-@pP@M~)ha̕Ng	\7{)$|)2Φ"E-RdRX^G

q#ە	 `!"+j3xLA5鋤.%livD1H1(_b&
~QGnݤ{OBlJ`^b0[T̖>1nqt`O z-X8\frhZ:BL=<}SpueygY"P/
sQ\IUlJ9|U,ѻ^|P27(,Sbb}D_BKd)=.=4RM5_@c:B1Dv1 '},c^  2P>ST ˎ9ޟo7N6"ْ2K{!Ovc'chmG<@7ngNw<rvm(AF.ޣWrf(a½ya}_A 6e?2hyI?j<XJε5tJ5/Gjo@$yl-}ޗB^iXeISɠfa"iY`XxBG-St E2"Ĩ6p>0Vd)QsR0g0M͘'$]R#愅 R
VGM+l?:ċen4;i-B,6XwZq-5mw;D@G12is{"Μp61-3{*;8Ke(ں1mR@%Û&H		}<KVii?zYr.
R\::n5mz\Kegxuj${/alO.DfN4|^I/VWks7Սfp43ɴfӒó>bӧzl_;zyv:{wu;ҞX`	^tTy@CJm>JQ(.8Vmm[Z!;ք,-;y$dJ$:Ls +mk(C"I!' :<OG6~̉D6)ŋQH:no`|ը=;Ysk[x=	uCAz,)<7|voFbPj2L\kWEłx$np٢A!f,d	stwaFuaF/b8)2$R Y)s"]4M_qSsg}W)CX
-مu#I7}Ps6|@gJZ2eΏPdj4ƮԒ%VZkX'ɮTZ/Iu0k4&+­҇h݅Z8tuah2
 "C+=gDeaaıpP$36#5W<3UcEXS3CCpӷ0&^g:>r	gUDŬ	o'<AgdkyDUbK)4^ʘJ1=ow4Bn ͆W\- W$5|;>(FuY:5"!{J-ioSkPtzù92Ҹq%KC?M3XA!Ѧ#
^VjOKE^]I:q"j'vA@;4#T	?FA7LLA2	 ܳLT<<V7?].׮D-	\bj
<th`G/<g!6_\}bOU*g,WBm,^aZC\	MP/xbh2Vje=U6U?{`>1̙VeAsd,:WX]1^GZAabAn̈́5E/mL`؛box4_#~-=.8Ᵽ;Y(
MmRSROq;$1Pwa[<Hy]A6P:-B`TbN5^6&Hor#%ϯQ
MH>&f_OL%Ip!N2kq\AdKW dsq$.
73>_%ҽew;+);b\ҹ'qG>gs4V0'Wb4JQEv%eX\62~o	iݏP|~!K7M_#2A"e #R@,_FeWeWؾX³yjgV9~ @(=vA0:32ɝEp
-QX$W1xATrQܲWW#<ZGARb/ϥ\+VyܝY"nT䉁)Ytd,vldL$,,}-<ӳ܈
['M ʛ
?*ZHyPNmVmt++d"ћVr&\.N^3J	L'	.1b-&COM;4z$sΨj2tHѩG.-нLkpYT("!FZ*غԑj,	i
S'AJ  |v
np:`y?7#@:JgwXN}WD+|PP*,G#jXUB9KLjiS3KdJBtV)|<>V-LaBؒگ#A\>$H\8lkup+nM/=)TK鈏Pv\iq+[`Rth@ˁAۖN N$E>2ԯzd6~AW:s{3ަ?iQcillTИHZ_N($a7s 
4U52묮&i)|)4aj
,)	Ȼi▂.l
p 4ؾ#FWU=
ӪPdw~y8%ԍDB<&eL1%O^
 =DѰS}Q^T1N惾UWp%,rЬĒt8+]ӽ1LOB[\hAW!	Jv
YB
[IA
,SDvR@NF  q=ɘ@1W_G|jRrNLzR8 yTtkB3֥+Q 6Q;xm8@ěm+cG償VBmx!*y*+1嗐䭯
029x
=o'ĨpIjXV$k[3|6#/#"[v8$i3eaZP{<DB
c-*ޭ8_*/#_=TC@vÃYtZ8|.ҿ8ΎQ4-&-`:IT'Kq"Fۗ lȥWh <΍	??<	!(ZOw|4\+fE	:>2nSІp+b)kN`gc)MsdJWH>FTEp[&)\ĹfXAc6ؐ(\v-9YgşS"`/A+Y# SUe"p?15QyCWـ}죢Il*ٍE`Xc.%9"QƪP)%ϔ\_L-CYҨky)vܤLR^^c@ePG+{_{،!Ir;C2P2XԩwPME2eWxs:*g⺧6"B#'~_|W`etmV-| 7:P|wsx.`,h./uHάk'TnQas_fd˙P׊;wBҤ><ːzКl
5Xz\WԹwwm*ab2t|R8?	_;p;)沰4Xua*`)@*a/ G!p`[<|
Md@"QhԋWݣu$ d3i
jfj[lqyf]Bt^ؔXpD=4eM9T"4p{ȼ)
Sf24A&º1)4Z3vDvʦ
~ iݤSdSI
kKaٞGڀ"!c(#J&Cs/
QvsժLᴠ@+7tԦE`Fxn&opZΒB{FrhU&fyD>A\oqI>zCm6<ެEiT8'Znfz?ȊN@kSa]ƀ>J3/>]bϲP\.ei{;S.v9ANJxF(8>ݬQ$I'pJȎ3f#Et
8qďY`.ybE,|vxV>I
uK JM7x@N4||	{;]5kHbD qo˺l@O, x	na4xZI4%0)Lda =eg1}xU;מ ͅGy0]g-t:tU1ɂk:5kf䩤 
bmc]HHL"$C]2:aaU`R,e]ǽX7LRҀ]
aH
F+w_Tvzt^lHR...?bJ{17q̭NӛME낿YxFU9nF3|.{zfܬ	"p9Hi"
i?ǈl$-Xh8#] 	cJ5$T
(c;v"s}C.Oe#DU[q N?K-h\ҿHA`nͨj㫖JpVN	$D{Nm.`:6
Ȱ붷%e?C|"<>:x؋x<" {Yeew1G9M!ԣ#2Z|V+faO4/ۜ:6$";aUZ!Rv+M'POcu!^kwH}3vbhDiݡ<kuO~RH2)\w8wۛiOHÙݙ/5ޤrZ]cS$kJDC#Ʌcy2oq*@7
'sJlVٟw8A$`?z4kJ;	 M}ڍS-3/^	*zᤇ^ϛ}Ȩ'L*?fa-
nѫ22eK^z<L(XsEF.9nl
71r$4~͡ed
LE3MlˆN<dPJ19,.yn&'^
.jf%R~syYp=JM#bUM.1rb-~	8c-%g)6vhXʯdnEXLKjk&D*$lz1f*E@ZOA_i$暑>FJT"Xdu)7FNgd6\\/o
rt*ߖTR+,0tK;84׽*PQ)(-L;ىqGaU]sc@ǫ3
E8Sr:^>,tt7M K[4
PG'LFg%ҿT_?Rԙyxbٔz>33FM|Vv-V>Vǧ{"_LA{YϨuOSq4x@4мp Vg3#(+&: !pV"ұQڶy:`o4w	.QhoS7ƕA j'+/@+5>9sW몧P58hkJ61'B|s3;'?o
l/0 { MZM{1S
4Gq(sMPK;,Ϙcsy`d]BG;BnZ1<PMvhkoND$HdͶPY.Ԙr[r87B$}츯4jcY2Sg$X:O=䰼ÁKw!0ۋGeQ!D&[)]{M+ı@.8UhUz3:
߫
Hpqpa:]]!ԥj`;qRl]I苹afv%8$/l
ꏘ?EIU|yKgb-YʇZfhNjʡ^$N7Mu=DpZۙp"EB:Ͻ
}LZ׺u'FsXNэA ŭكRݬi-ζS?u'emgS}}%4b!(|sq/_EsL 9<1,>}lN:zFQ8Gvmх(:h=?/oOjGi:^ ;.=D뾟6{mOʶ杈/K.(MBkT;:S:mc>Ip[\o:{rEWJUGOp/Xglژ$Qn`7Z<mLΑ>eAa;Vnc,kQ$zĴCl3ˊ,i9qgJ/D1&
Il@j֋qL^lⲭ[kF"6ZFc[r4)6[:4y)*;gEk8[`YJPHyiY e!U:qȻn-uyN9aa"sI"V30T
crfz)*ÎTzbA07N"˩cRAI᪺;dS/p"]g׍	4S/]~ɈP3He|Πaxa&=;I*˂/cj?B3_]ݚZb 5<н^.#(.<2)LXu3KU
X1ZX2%nw^JQg& EIr{$6
cu23cXo(D8Ｑx] 1K# Z~,Ϫ]I|߽A:дAfHs x3[0Zf+]|R9%ٴ*ϩD%|vMCQe+%/'OMvW즑$jA4hjkMߥk%i9FUj넵6sD0ٝ8*, fk8,W"X<^{J6;əZ|vmmL&t< hO齣:X%w܃;ٱ۔7,4Yl"gCo)3iq8Ac~
X.oo(|x8q*M0#1'R=<WҀ.ܩ!WeOk]&i#t_n8)ڝMXsM9XI8UQr
,TW&V|P9OI8"
uJC ANccWn k7`ޮ1yooӎw!˭	@ħr?l}/DSD|{rmKW_3Ǜe<̫xeiiKTlw8pG|qxd䃮DI2Ly%Agh?nӔz5Ĭ776sDL0NaO,Mla{}H`uR4ǎ.\dEQ_Ha/c&
3U;4?Hj#tp2C@Ta*]c::AY[VN9%8Z(,tC\</
C|rɗ 2x煉u`
42Łm8p~F0+iͧv"\-[n3Sլ0=	& B!ylNOPx'.|%6V3\Ļt"KYu>c0vS㠄3*7wDMM@^%.ލȬf^aΛ]MbF.[k%Dt1p4AXylUpBV>l/>dER:Sm3pFݘWhhQ.ز ۱l|;L fRJ8Gdvә^S]
ZBd-LC^l<PޤU0Z}g-Yxe{uE5R6{0_xmXKwylZY fd$а@2gct'E
LPzBvj3F02
jKYָF YBv:ԣ#|+*8RC |d@fN1!W3`sD7rKΪ]
V펶Qi6WS#-E9(ѧUx<kj,.;4 $`K]Ŏ͞`SۣӬÎ744%]c>%wA+XDB}󲟕Oj5鯼0(y;h%@f\zǮzu,hM$cݪ=oةZ`T8b!@MUG/0Z:2)kM׊}vS>@ GG$<ת[#!Yf&\Aa+f{콄3/>6Zn򤑀晬,,ffaC .$m!a#e|QJ&9~<b5EП#{!f?R>>֌̚-T`\P= [ScktߡG7a58*hy֮S#ؘ2e>R	5BH
ZkTa kx:!Oot퍯4=7uo@UmiQ㵋OD%X=
WBLiGUHl^e"0`)pj#\nw<oYFTuHlzOk>r$	Jފ;tԒ7]K WK&؋Ԟzag-X^Ǔ/"OyrɣF'ܘr%P?Aǌ^ ~o:;K}=_D"'[utd,󳉇KKxD&%pTEhWnAj\תa-.|Nd+?u@W	g_~sj(AEɈ-#l0%i2vw^Jyx ZijB!TR>&Y=\~!vL(,@^)spj*c}wZca.[`	E?g8+AgErgI	VFۊ޾g8%
?=ctybh2s>L*f<Pkjɧ&*7ăk*-sI,q2y,ehg^ݽgěbTd>zwIiBTfdj	;QFdpn
QkoiWH8-Hߠ>bMpb%]n1>Bm+}#o(5JQ 
75Q(gѥ$tY-[d@M!V"H<gSZяpE-Hb_W9J堰ULV2oT.H
pvmGuVׁ4xOl@BL9N,``cϱta,)x\WpiN3Ɩ|0ċ;b	89
lU7C25z|/NXg@pU2>xWMI?3jT-e:=V^*K}`
Vrޞ߈
kvAH|;#$a0?0!/?P3ohw0ߘkcn;{X:.Q|u_*kՎy4or4qCg]nH둢~Yߥӹx1ȣKoyf3`jN.WΈ"覎oj<-#7$EV-,]n)uGv\Aa17Ct-0A

#Z*^YE!\/Dw FsO>
gu
.DiWJ:#zT.
28BDG;@huPz3OHہ׃PAn OhSծmvD
_~"͈):xIJH]39ΆNFTPH3t"b3:ے6^.Y~\~UzKi:@n}$0+41(k}Xe۟CjpUb @D<نuZ,'P%30I ey=$_;i@[/jErd @
Ҏufx
YP6)yȿJA>rZ`0Tgm`E00߬Jѽ,vઘʀK4
f|:<:UPzg4lDNX2 wt;YtoMU:`PЈ=NG&ōwZ->q9It$%ıCf9
4j4Jo7ڗ/Ю}F~
}̶ҟHyZ!|rjc\yn}SO^yPPO҄sa<XJ]ΰm?fqR<飯X.Kk?W=gvpCPHߡĊy[P+u3R{kzu#ӚHޙ7Mp3~u@0Xp`~dQ;̌F}e&94`LTI#<Axuk&Ë:Hi,&n8(*-Θыb|S_f!/Q@┽ԠUst,}qõzPm}mE
O(f#uK.v{wCV.hbB(;Eyqnb޵'U?:ta
l2$]Gʨ|!PzGb<6ۂyQrIDaM/&:M0?oC0wH|n[|XXƼ`!޹ȩ3F8?sN,S2-eV[;mCe2R\ߏ9HXE#KV[d
3b]`EuҳETR2[|(D}z:j3mZvLj{ kSHI":tw
!/rf?,Ϭ'/Qg#5O&V6&!t,j_F$@AIlulCnGá}">c8u3)۝[m>C<tZ\Hro3XWZ?[oC1i_R~ᯪV#^zE/
R)٘ Em;Z<ǣ S^k1NP!{}H¡6dLYmY%yBZa΃,ZOM?r'-1z&x1GnPdW; 3M~jpU9BtL;m'Iۇ,וHA m
-B|
xfKSbLKdSe! 0	ڂ5I.g!ctVMN?Za#F78^[@>MnGUDe\uPGmQ8uKp%ō0H.q#>
c3I)4DV8b ѼyR).r;{E#@{7$NmZ1;ol^wXMQ5nȊPY4-z2x;uGULt0R\p/N@b
NRbI'NQ?ZRD~J
v+6zub{.oe_J{Kx+M+ϥc;\euXu}pUӊ1K&1xRAb;9UwpmsjbA&(s>R[dyF	;bPv'}LQ~!@h!9a1}+t;9 Uq_Y<0v>s,=oN-P{w-AF+sseW}^=7o8-Tr$UMF
X"W@޴(t˷ CP()
һZFt~	ȴ*1*:L`{4p=k'ht̬N s|$m䠻с/>W(e1R 17 /KȘԓ(AfzA%,/ѪʃbVh߉
bwnxjSy{Xɔd VΓ\5Ld9Q ƭExwxDg*#ݕi)&seHHF?V0).5X.=^S4gX*ܾ%Q9ih]O=kfTz9L&GO""a6울<B_p6Ֆ~\^JF8ύ~&=x읬\#?pW7N.):y)0h^AlHeu[
nt=q9JdBl8WQ+B&EE1"|I`(phƆ*̑]; WvD}Ï(~ӗ鄍KL4Gx06+ 	6&.|5j87aC,47s`4 SYtACZt՗g/>+LIhTО03^'-,³
<<|ɫVQG߃[w),vlh"ne@rnx ځݽD[b'w@Ԏ%g	&݇?
=ѿOdx
Hm~%~'r4_mUcc/胯isɜ{y$k`"9\lcщ5XGF}K_t
S=B}2bmwx,vut󘫕SSn'MH,2'BKԢcŷj~Ъ;ʹ )H{.[+طtvwf,jMm
8EP&S 84%N;u\9q{ m6a)$mB,cZަ6/hu4A̘IYfe tv&x7L>qHԵ
^T Ւn>~@x(tiZdok@+L~j.,HNfB21InA==

fYh &7lV?Ksb5ZFdXaPO\ujfr%GVw[++`Ѷ۰^RV*>)woQa|`|DF=Wx,'+^3P4\eȂ,BphPqxY(&\y TE)Չk/1[UWzaСwG3EАTge	bJޔlČ8aK>ೡCAsq7e"\/#Ii9'K2Q8
L۾Xj$=Z٩`Z_ف, |&$I6Վlz)^2y?O9+B!K+Vl%UjIsZ.ԉ#\?٣/WJ,RQ0YR01m,C×v^/)&xۄOO3EMyT!O|c2ٸ~@)ײt0n #ah'<Ǭz&,7OEr|+Qڞ|џrQDt&"I)HWsǐ4*MHrG4}+lu+X_<h1D#&jZ~>lqY'kg! ˙Z)=#Cbfm34__IPj '$%0]t%Zj9۽4"p7mJ4FX~^*@yK$t2U1%d/{q	}zA1ΤyG7a.EyI^ݞ>li)jiLrD*Mي'G;
-,kOG	Av~<
^^]7[\V{u$`?~|kv.ksdnK
RCΈՖ_L,|
#u7 B< G?NrUȌUUx@&,8]:QdAmº D4bx}Xrg=5#UWV|
@KhXJOh}]?Ё{ǵ)˅.vxF#
?QEIff[u@F<} mI.!K&9T~Bٽ97q%3Ҧ4G5ouvK"#`UdǸ5]h,gJL4fYxH1ӟi6mXX޽h#x,O=%z%	غBKz4잕MUys1aeUQl$5Gdht0IKoQTT5z7'u_Vb߻} |xl"ǥ}Y܊9!4zP9;A9[By޿(<
*Q SY]'Ѭ?Z 7w'ҠMEUX[!#S:VB,K6^79 dg6 $ne+s^f☻
T":RMjPjQ!n}
@0W3 RPG1B#WEGPT@2($ZO<Zh{zcLmU'f/a;j%?e
6.%,O(`.Kw0S^LN2E{")%(a@pr
\edR7^skLV6!Ҿ1ѡ	*pgb&łj!9ɧZx9jlsGz
Y?3 Hb};VTG$'
x?%!㵏MzAv
/Lr6,CuԵ4&$'6^kLEMnQqKr$@T
Rp Jf$gs2ryz_'Vs\"7ԨK^
[96\Nx%%w8WY*[θD{{zgR
:d[:g{{-%ɦ4ҽ2F
x\NL%F̈l Xjªm^ʨ<E)b\pkJ@S7ǰsvWDFFX{ ]zq<ˉ8ah+Gzg@]q z9xD(z!iܓ-cX3Z.
%ޓ97K`m	!QQ?l.o(SPG &?/¡ [mcCT9Ff r0cg[ {Gomp-^1i)--Jt뗌#j
_Z`;f=[sO݈w)0?Br6﫬1?-S (t̷Y.)u`={)I<#(28c?oΪnȤB8k L'u	B2Z2 
.HP?^j82k]ɈOZ5_g-"VVS#3wʱbzc@Yïʶkmtoo%톆R#MFj@v<u0Hg g K":#(
aiw9#/;=O]X51_^/ J0n>h	\Bߥ"XtJMC3G[Cx/]#h[GXACɃv\cJyEMIxDn{Ix:P 5i\
Bw_c%0]`VI@*<,EK(5m夎̍^yU/r<ޘB@ F} OdЀ%eoӬb4-VH
?_iůSMOiK`|TWin?ɺKpŨ~~4l1L`_[_WY0Q#ǯHFzz :30l<)]g`*h[{tbNl-gl<0hKB	JmG+⺌\R;[@J\A6l_-&~S=b [53 8%_pkx:O=LZ&{eb
sv>SiЏoxpyMrg)1:K|<{hCVn(mhk@G")<q;خ<X F>X-O%1l^-!@`lͻb@Иz׭7̆ \tgEyƊJ_wPpY6@?zuش\֗r6 R+Ν"EE}vsx
v:݊?4*ե:(;2ɞz($,q8o n<3wâs|qP6*̦bBK0,d3y37}7ZgOq "b9属+Xߑ9TĩMlߟ*qٍ@peıGݠ7\5#r&FĎ+8]Ĩ>;C~I.ܡ5ɳ*6QɄ&h0$!\IS	{ o#6А=Z ~e!Jp~=v>y`~DO84*n^`wֳlU|I&Os+ˠt_z_ԥ[o/L]۲dR1XPi*IG_Ȓ񑿬cqUڬ2bg8iXe[U4xgZ]$<IT\iUT	fɶ"תWUJKcdfotհ(?hfKzlRMkl8f(ΨCCzYv֌n˩4.){sV[ћ6ƔU!% 2riY1I@'h*#SҠ(WBSh2;%#go9gvbŻ	O孱xu{]N.9
ϊ|S	~|{v܃
v~*]8}l"ZӢ,
;ûa\ژdm:oP.&	fOcӓ'X1ɥJF]#2;
ز&;STQL!ʂYhmr3S5
ݏe}brتOMY]B\sӻ~fdxYc/f ~OJ"2imA/Օ0
R6[dB$Z64lVq%
Z@;u
9]
@_|ƶHlGwm
ڂZrĄ>%,'9P*3Yl߭?b#GvLcyyT=[9ٚѤ#Y/vk*dmXbvI5\W_q{bNpx{))"(k
BlA&(`(5i {gpD0ˋuvۏ8)M"O
bRpI7C9#Rg@Pds G3#>{BY߻smD	#2oo6v%\:wgLǝON < %V

OlObr#u\X_M1s/QXv5exKO$<ovsy~rJ?Y
()sAȞI`(ٮ D%3$)ş+ނkO,N؏vç%3Xp T|9,rk{s`H:J8&u_߹aVBm>Q]}Me^
v^7sV]GX8:mFxȂn_¦/miJuPsaAwһ H#@ǒ=nRUkTLGN<m&>npV񢀷|>{R>uB>v :LedC:}R&|Rn/>I$? fFEb908z4mh	W:g\rL.6hQazSw "*h50CMZ2:]g*_$3E=X8;e=-z*QYffF	E'Mͻ,hm15QadN"dս{3('ݣm>(#6%qɖOe酒/~{E-ܗc*^yɰIO 8	q[R7{50ZN7i@Q~"OR(g+ u·5%v{r|n09̶>dX1[2Tm7e{7p`p=PuuaFFE]Y9bP=kUWU*{+vߏ,t5zIi} T%FsծCD#LLϦ+WdH9L6lmM:k:AꞶptPEzHא׍%T;قvmAd}qbtr *lnjkB,WΛf>pE;V#O%jplXwtwzt:u-Z'%+#5E&#5ӴQ̍QU2l J  !zqi:bC^~hG | ٽȘy͟^wQ=^lQ°	\jdAT2jjDlG]xtB,-lh+z3Sj.%oQˤI?9rA*;ZmoPt
Eu,1*eM]oL)0H.Ưp3`a"p ߽%ƚA2h>.4l}$]P{d/D0jZ )z=ڠ0oFHGXF3!fq|cpۼ
zۺq=B
2<WF`yP9j6Sg2H&RD Uo|0 (jVt}Ni}TĄeg"1¦4V~,rqf~)𢑣im<
Q]dasĘePtޝGptAmJrۄ	tJHwVKv
~5_S/(Oc|?vTvO㉬${ģΒĨu[bW2'(/%i
yQ$r
kNJ4/	n&*9)"@އu)z-cYCPe<橛K"&qWbGH8
{D[%L x^&"(!Vhs۔U7Zg 
	k0/EsB/U
QF>Įݶ8v,Ul&紘7yq4%&$6(K6mNM<_]2Uku)| C ri]畳LqΆXRa<?*D8%ɱ -cO#T
Z wTCي{2%ٳM59m1mU+XF9wi,7gW%+Jlo6-лf7^xmYx(uw5{vS9e
\y/!* nܳ-g6$Tb Ul+F	i&C\
a1HrGkCÕ.0Жn2;aIdls]5TZ2t(ED)Ē/jů_lkWϓT};h#Td;R޸bi1LGԏ.+VWRLD*6d$lAS7meQcQ`{.u<AD'9
b.*s_{#N:P^yqKZ=(o 29ဋ IJg{.yΎ#~#5|֗xq5w{BúźPB6[oМ[-Y'$?8hA\[?1bYʴCRΕZ+,vPd؉[19R LcR4CDuImR[͜kW7[In~ka&ePC<.$aM
%FBt&w?_:ZhO:h44`cOHH5<VF	6L	u{p
h?$b(7:J>B/gPաB;ŤZ<ǚ0(Z)T(l,axߥB,ݳq?'J7Y]ʩ"nhI	PȖzGґS̢hf~;o<25/rK
5W&Qt|:-[w~[2 Sm\TrA}J<F+u
:Eް,w6cM؃=4tZ=!'Y@"ù  ĨtO5(6J~CsHwMˑbuk<T's&Yf6yl
Rq8,ZGy]Y灄@|1uW &p́`睅X[wֲYiC#/ڲSGWȟj(e۰X+C$kOnLdC~3)}*&|xH$t\X+gz
3o;ci$7_P#<%eߛb撨ϔęuzJpfC4^~/è'[Ե3oFqyds4f> zO(c5{gMތk(*Gh*+Tz68ˆ괉!XgHy~jJ[%uПnɍn[A8FWNMxg^ԛiM*uMBw+R.؄wvʛ<utr1a u	Ajr+
p+1/m;T"tyɈ	&ǣSw{ _^31=xCΉ<ucu*fjW2CJ/b1LN9kJbL=[L^\a˗Rך0.h}7H|JC[	,}=^gYmGQF\?,$$?P
9Fstjgxz~Iۘ,'&m=-@Cunܨ:&@6@2L/Wf»'qR~|?@J,9$rpUbys~HSbQ5R'=yY-$w| RT+E+~E\(l`{#s4bͅ俔gASPbQGeWX5V$x##O;qll		4Ko%R\gE˾ p:>ڊ'2czU8};/(Uo3)Ef,qr2i s&'D#8ގ^zz/W Կ](~:R#ɧlefY|ښ]1"ØUs܈8Q"q&Hؑ #=oƖ4:'0])B_jSm0va6CIѲcŢ8b)ۤq̗N+(0D'PxQ:cB1ǰq(+Ҳ^FCIev7fWun:;m 1Sls>	y#TazDFdW#k(IWȶN{Q$g"|֞bt2s8|0%RU1^织,kjkfϙbO'?6(Cta inAm
qE>oK%@$bOy~h6<؍%Qifd4n0tDIۄaK&7	w;gJ|(9#ҏifBF˼i4p?E?óʡ,N.H;5wR z%Hk⥠Ŕ	?Ll6dW}t*Lnnٯri2>kc8D^&\uzMR'QbEDoxnt}܌G$*U^oAҌ;`w9-uH|\Ae'Ѣt́c:~݆Ņ"=Nͺ6jW@ЎYaXx
P$g=^WWALyQTDZC({@ߌ}dպ8S ~kΆaƍ
ZiRm"xi
`3w{ub\Ag̕Ce{هW;2/|=yFY{$!yf~Q+x*R;[wUN	J!\ĽF\z7,;!!4ْs;a!w\Wǵy!d}Vs*t¶:R]>2Ku'2ϮhDe
!=緺v6+5Гu^>k	!ًSXo!D}Q \cGomXvgCgdbbLlR4mbBj9*R6 d^q~RuV	jL{o4}T"kLIy׈G죷юlV&ڵw[Owb7FҺzGQ[(^%,3okc%#k5N5	MfWnbtwvsQ,#>"$^Pj΃yPA"NV48۲Qy6?B'L>eQaq){3:ۯ7+pz$dvؕnmm XkyE/o7(dfX=ڱpO"
u#_<뮆Z/R
$btL!tY'Ӣϡ6j,oː?niƙ@-
}z1cq\}_GfZ u{
af|vPxF=sY?PXo{Xi\}= l1dw6-nJ?Gϳ+Atf;lsɦfL
Jŋ߬	~V㒜	SGʝ\T?NrXXf:n!wΪ:O#G5.wI7&pf_Exq"E_go!ŢTkt513hf~9HVyiA,Ϭ՘k?q$?Ns^[xV0A@ btHoLom|dp-Z`&sKm-ko7$E&vQgF|[76J.C%um5E	ۇt}!Q3wg(0=ה̔On="L}¥slH9i
?y&!Msuzl"=/U@4zEg52	N9b*f֗X%W)[+1GrkM xS33D
 JMFA2MHCfswHlT`.FMSC%rʏfi׭cNx]\=~s)<ݒ\ϵUC	;}~c [e x%d иQО 9QM)-(&AEh
E
i?]M;jQl]{W󡓻[({ѧOH-+tlSeVqH|t^=󊧣Y+>E!t@R|LVR:gDghv:
ݑ|b
qGd*ex"v .DG)]w:>N

[P?7We*Yh3:ed`~4eKMĿ!YB+GTؾ֛udb^ * B3؃3zDbj _-Y"ކ[#;v$z%Z5n0ǏgNعv3p
d\,#ikSg`3>$t^8ryE&Vukm {1Rۛ1͎kmJ<ڲĈYA4+PX|تTƐ+{{kz,	~{ :[3LRMmXLABj
g +Mvڠ[dr0MF`Zey ߥMv-{5/.hNfy]cQdK}B$$w@[KK1$n֚Hh t.O6C_
)A?E0DMm;SsH0%莲E
ZGLC|2HGYTOs[XbRhedEhQL o<gh"Y1d>ߓɐ*$F6r&Fu7uXKJӥPVR(Ibl$&?lo(Lv`79Wa*d_EXk8 t-\DyLi&y
V|i1`kUohc
Akw?1ءNf Ko5r?cqÞ|B*vOׯZ
zs6{2F,za2)Ǌ8f<7 Jk@{0p\D/0O3rT
~F(&6	PR-ZmJӎI3Wmin="	\Wļ>c

_O	4;gzMOhR@vޅie4fkw6d7d]6[,b0Cs' >4]cd~;"趼1S*KdF$܊Vdc XKhIƼ p|xQ0bC+A;X~!j;,*'ENKGvU
shWB*GŃE@l,㡮S+1$BXl􄞜3TCܹ9A=ͪ6
`?7*	nʲP?daJKIC7L%>gAjZMM5^|E6$A-3H6}e#mg8zS`|tZ4Whit&
B
}{1\rHƷ+QڑѨj7TV7
Z:YhWUJ^wɭGjͺLCrOqК)^J&)n@ƳQ_Y(V-pw\3(i'iхCO	1z*S7C%oɀR]W%x ;UUb7"Le܂BT;vҥR_lXBbg5y!؎VKKLt[0}
oTz$<Z-8?.3!(ՓV4bM9ݼz	(C
?hR<GbI*`IY]͵N)h_
ԫg&UNʉ$F@L4'4B+<
p?ܢ+d#C6+v] QN6uge	}yjWi&Fq\]gųYGc
mlƧPgw+K" C1ĪC$%WR̨_hՔzP`v(7ho)?"Ɏmn

	WEA`X'.L'r)}#ǍOx|WYѕ%
`I[7oC|:fuٰh{1&wVQ8vec& @3οgOǬ bւ*Vb6@}N?#$p%[ΜfA&/; @>@vNw#|D((Z	/@hd͗TvWj}u754s3`t՚ܿ+&.u\h&ZSzo.*8\0riu@2|8z@C6)wkQeC'
Y"o[9G/0kʆKy~eJ{`0*!sJ8r]S*b
JBC)ˀcrpr!cN-LDb/aTP(YNF3Dy#BgPN>aA!99$ʉeݗyȭp9	~Lt.hц̰3'EzzuTZ4^桶	iI'%>_I%5uWfYAKT	D!lFׇD5IEGqcaP^x9
,[&i.u{r<=oYVCШ3_lI#u..bZDg[@aޒhe#U)<yuF>\=f|^mOߏ\3DcLN`2v0{͊
Ėe?8w[
|$	2+*(Aގf,Y0)c	EY_hJTn,|Jhm[LAgmđM1bW{XȯtA[g.p#[*{lydVP_+?}t
 U'^t[UqG*jy~>de.HDhM"+{Э2r0'Bneza}ϼ)p>KxQ毲&İBc>}D gc,2VY72;ESnؘ~{ I9]{!o,Ꙍ/BAЛ5Da෽@Y;6ɦ(7Pbg;Tʗw2\FyFKy.?YSHƲiuϷBgB9+qXj-5 y[H^͔G:.K<flTStp?hx
/"6-PqL8fsOȠ,Īivn8zZSCL=dg5iJߒ(3

usww##nщ=X|+
9Bbh拂ٙZH&ZN?tQ*qQBn[<!̋n1tOcʂ1<CK:fՋ:(ԉ0᯶#)6>-%zZKyEGۿR	8=4hbnMwZVZKÉ4r /zJ#ۥbՄ([`uQ
 4lMGfZ!vru佟xyVdyKZX2&x9?)wK)`Hp'6@#+4[MNCT|dM#$@4k	(d6ĦN2t
.Epp^A77Kmw!,,SʇSzhǏJ  :ro~4sb:&nʩ
y
FV&zWB={6mK"Ϫ{$F\-]إ!gDe5_2m㮽1!9#+B*>S[--Z'gEf^²F/u ЛhyAm%t HMd7i)&HE^ԑ=	F%M'&ggsZkc}"0Z49]bÀ]6iw+s,H^q8[q9k4Ӝc7XWkq~Y?6xhdOߊjMH1'V4Z۽LEވWelʴ-R'Z(1JAU$^AMp (bF\ԅ-ƾh<E
_¹'x]ҳM)賂=j9N7~gWF%uۑ"\3.C$7/վ2lc=3FV6.
`#8YBuخg]zyueqKS)e4?JqWt]ʨ1[3߷0^ᑰ{{,&4:
HMhIUjz
0ŌjLK	y)/&?׳	KįF_{I^VA(0BZj5A@2uH`
"±Zn=NTojd&6K$ڦXK^/v
ZB1gрh[8-	woп`aaLZºy8NT?,pbd<}X:L˗H$Qi[-r&ZV|m\QUšR(zsԓfqv)«[ˬ@zU(U@  )Vn76ϑjJVgAS׭-uf򙾺}RbrsY06)[M9XY?x6h}NK?!Q>`CmeB1˦,ױto7C
 `-v.^ki,ʤ7
(w4 ƚ	wNKub4+5ZϞplt}yx)\ȝ:e-fʂ1Nc|f>|蕕b%	P ɴjC0wq'_L"+F)f[sփuskB\[q R$Un<Nz^RmmUZ VCKOcq)brRQ3'|Ь?Zk9e~tAi2P3ajB,P(P,qzFiZȝ.rgŬȃ)V7w"04nKNf-8r{-@HsL~M,,/&t-tnnv,!ݡ5o7G!Ot>Flt·=	'Ovc|P1~e1R:KƵpۣH\\)'?u|̀y8oХo9ҝ2Z7,[s0̋US}أItT&	w"Ӟ
=~m'"a2A9pxt},ySPiv'lsY?Id4HU{`c'LA
3foXZq%2q] tFݱExy`ce\δgqŜ!yȶ	Tef6Hn"r'Et>qwZEj6i,>bU
rwjH烯:N9ʟj"F[8uqdoeٶ9.w̱)x8&;3EJ}1ʠX=4vmc2ǖҠ8цY$)wV[!ls9104`.`@H->N-
y/;(;fz͜j&gaҐnIC"lݫQJg,+śt넦(A~1fN͹%꽤*sT(ʐEsoxlq̓

hhrUE2ؕGW[%ΈA
F"<\zm#̥Yٷ%H~~ |/ok(Q

ZYæ@M
`,QXqE-$}#+ma_\!XA|7t%4ıb$񣯑G`E7phhN½&
+kۄ'ax$D*ZG(>V2!Nq|JB"'jގs~*聙˹l|э)2 T<*a[Zuy[=Y$qI,@:y=GxؠTRPbΥ
ň|,Wfpoevixw].QMc<MS;tri;C߼1Ec?qJMgI<AOcYr1O
샊)>70gfn.[I65X\<ϱ9O%l@~GcE8ccd!7ZHv3i!wNn`KLtHB*JUUlO2h%EH.':%Rah-|26	0x3?4  GPe*;2?i#sAiڕަCx%Ie2TԴu!T+zN>|%KTD@%"ʳQ
PY-}=p11՛	
u"5{al`X!)Xn;ʧiP-{{:t/$)c~GR+UWI`YIF~cwr\ܨ'xU*C6ΕyrG@zMe˔(}jV<I8gBm$g"mz$\eѕ^С7cD~#V91T	MӰk9J$\w#N}|JO
gذf1'\	ۃl7laVuFrcxL+f"cF YnC6QO\C-goҨ<|))3+T97%P-ND~47َ M=5
YAU|wEK+;@eAeb[Iƹ-W4$%
l}x)U%'3^14g  
[#9S	̙3r'3~`ѯFXUb2AwImkh(77}L{|JL;!BTΩR0lMDvnw[nCZH;
Dr%"hQX%B.XIrK@{|J`Ƀ@VbLוiFμq{ }|_Vim?E460	D<^J|rIj-e"
&
D!կ#])WoNX@}/57Y?ZU&jEq!QK䦯U#[.JqqߚS(L+{+WY
w+k*lJT_BWl0I8VVE+[ۄm(.þjI)91z־Igoȶ`֛]̄EesP4BCY엞zP;AAMC^#.<M`?*zaiq2:$;|?޶kL$\bΣc1g^ɲׄhBDW)U4{0Ěe6Oˉꯖ#єꖠH7x\5g6i+F+1j!X+)4rN`Q-|ll*E;Kٙwv6Գn&^3ꄢo}ܯyjzJ</m,@Cȫ-G [-ȍ;pJ>r
J{vm,Rg.CE'!iۤ >S!sݐQK"Ho);ۓN(\SZC{xA!'Kh_@qD!Ӊ5GC7rYBθجxu7 (#Uw;]uo[M,6o8]Xxw6
f;#/|jVwzU&p2F}xu~lxSBbc`:Oa,maJ`$*=?T5 6G;ө7m;
A9ubp+so,QU ?^Jzr]yMCeBrݘ}1$cSLȫĲhIq%dA"ұ2jQwti(PߟRW1߶~l 2nMvy}&FahSPRfF>v.Z-L_{OآckC3c{fC+_
G~OP@#vYV|b^UB/
Zxqȩlgb~[[eC8]\Z?WL1~%ff)u*󊫨;ہ5ٺlx!@9ROIH{wà\Y~_y&tR+qѻc3)m	qѣ.bsF&ń`diD'lbM_-=du[YkZCV&9lv17;	" B/}5&jp΀ vkz#vBla7ia!t˙u{S^e?Og&09_.e^#ZLL5D@d?3:JGÖ*o7ݛo͇T%9c5<ciA?#00jB=Ap0-ncW \:KJfy?2fY)p>~d=8DϠ ̥흌+AD%%JWTPу-"YG:4j,2@UN#^-zf*瞌6ΚmgZp;Y=181YjQEI>jDΏ<|h_غ+gX^BX#Nۼ"N7۹q[IJ7[ }Clyu=4NtHNCg9rp+<T$k\h 1R
RۧCQ 	2'0o2hQ+0_o 4ҍ0e_n\[RhڕJ<4(!YM6Ja`Z ?п
D 4T}Qvwnq,@}~v8ȟ\`^B
T0RB`7).n*j| cs<ݬzoWN~<S&|H`/LfL~@HVᶙ\nZ2a{),op0AǓvY#i;l}hW[)FoȥJb

}ֻkzUY%U9h>xn0uMo9 Um+7Q:\B-A@9HB}Խ	qժ;c/pآg
靧q*ka?#as"iQĪ̹h8 }7\vvY+^NzG`7C`WdsʏJV,-]:XGs]Phmx1KVC0ؖNetVQ0Se}C*
XXl Z

ηNF
ЇȪͮ7A`"XƷyj7De=.^Jhs1Ϝ9~`ab
CP IYGcZ2ӊj8¾WV2=(-L-]aG4P4K|2	I)ž1'LZ܋}\U	Z̪=--pW
óuȌXH]/_H(/m='	X̩~稻
|c
{Z2ed4L') G?5->Br]|zsxi@@x)>j7Ǹ%~N'ܕYFCdF$A>gwQE/1eM
.0f]}QJopw`Ҝ
_>nS*G_N׊Mia{m|&[ĝʍfeݬ3Bznc
p@qY
W!v	#bX![FZF SQ @OwrSD[P^@!^	#H0K՘y0zaK)KA5ckE#u>\hsɧ`wݫܫ%l:

o宗VsǞ EQdz96VlCz)kHND qߢg6-HѭcJ0^+M#~:uwV'U!qi[PDN@#V7bW68̆ǊE^j\tXש*"ٶ2vU%
R8zbD
؁!	vb%\Py=µd<Lr8t4.hRc~,x;O@Ex -Ѐ/$: *FӋp[k&j@C'|o@x
vh@niȖ&&j۪¿+-
5-40O0_E{%ev=IN;;vr2E]J,YC,Ee@_^%6Gg_~&c{}}ԤBNd+2m$F#\3T-zqxNIm.Cz⯭G3hMm E/n))ڪXN vm x
iLtZty,){SBǘ>u(pƝ?'p79
]Ogǖ /M	}yC]fP}.h$0{_vhcoqu"jCwGۥ)s`ǂJi[A
~'i=mːVRckIK_:qݭsݺ
D ̙BL+A/"R[{>|щ$	A-־L9'yZҁpiEs-QQ#M\iyӘ(,h-mAc*`(- "i1 W%7Jcu^)BNօ,ǳ-w)e)
mEkwѷ^Y
w]ϤC&p_&CdpLSlK, D2J>b?vDy3Ƽ`5Q䞌.mb2E_,T6YWL0Z4wN-^|(:WuPua]d-	|
w86V ;hC
ںnA%ȫF
QxX6!gт)WÅ,h솬h9!.-Dv%:є~_٪:DjV׸}d." ;+w- u+!?7k0
>jbl"Y])+5H@PRKtń)e3#J0HlGpKbǳF>yWaw@uN
SBR#_Yk='EL#l%^c9aęjߦRXFLCﱼĕ`^(s2K^P2]hE.O$X#1TN	f0sRUlဎdHHaw:d_^:_[jM|e%`_N#ޯ>-Q(nY;o~Ւ. *̼hiv0w0;s{{ObEԖ/;Ec
Gl	c.jM
0	Ce o4
yIۆ]Zn]l*y 4@8&+wvy*R7-P	b+V0J:g-\T˯z
͉?J\]Uͫamٟ*O	W)AWP #^)cbz
+d>p-isJRȿ6wdM0q?_bѕWꪕ~9mݯGQ
S@!hPPa`D5x11mt[ݫ/rWN½;S9-`r|mūÁ\Xb6nBgEȋ޷ƅCJj%/&x ,Ȅzu}~86*D2IJdFgա#?FT:ꈄCl1s!)F%1Jk~rD$GʎV(-)ٴQ#Ut=k6>lcUzyע-"-'2=˻ A*rD)FWr PU8iZ7,LDAh0;BJ~Y8Nq!j&/O"'<cQMV1q
]
8y]1[wǰ}v$W7p',2#8lOB(Y$hB1,Αrki\YbZq^*չV!dd(+F{&O'Ux)燴-!F5f*ws̨Tt~ib(#۸axC ߵ;7F"Jb鷹J_ðPټ/Q#ujUt]?ZjK1}a0~B2oSx*?-C1]$vW{ȱb#@`_GC\aB[/<MLw$)ݚ
ze rpv(VyXǑ2받l1x<gb77Q+Okb
,{Ӿٳc<ZP<˘_T"$]DubK=ǵF"Y 1Ms=:u;^+yL1ݘWB9~ss{uEw`iNz U43
B^0lp2[bo,%DXYligoRVC|?M^^ӅZ;'US]W{@{8ۃ)ߥjaMg&@sS
t;Jǹ*|ߗb{}h|ǖ)5R2{N,n|:q'C|G
9'V.	,qHu|+5^FfVwAѵ&zy|QnV6׹%{ң}F[H,{~bA<=ZE?,j/#-W	zҫ֒sʬa'E>ڣQ>(N6",^G\ghE	ĎhT'e@Vko_O껰zGbʞRHMT^ 0a"J3ZMw<5(
UR'=w?xxK+$ٲaE5U T.	;TY\ژh^mT"?}^#d! %T
AA_-<˥]zPN;2HllH k	n67%^0 j*{e6i@BR`wѢTG7q^TNnZK2tQkn	{3.&,{hhJl}{2[6IJQ8	2F}KO+2
7X%H$=ewNHD}m2Ax{l#0"3YX}Ś4Ln~v/l ! Fe߃՟t]ĐSA}]lr4_Jj&h|@'D9	MsbH&k:+Xޱ,<wu#
(JC`I	0w˷R;!Sbp4yxejuuv]I
l&\>6XŻz,J8&Va鵜s`<~]q'.$)yсW4q
Q&'/ŧZ'P
]PK0~7F_($42jhi]DEK~Rri>Q%YɊ=$z?	Wˋn]JdR@4~18}~-l"ݐښ!/7V8Z#OˋlRA$K
*W}B	T@$K_ᴘ=:\0@auCEz	Iz"rRgK){ZW#MQ1(hCN{[gs1
g <(sp}
o8Tzba"$fO:GG$MRPy[jSWz;
GRǂϊV׻Qf͒:
:Mə1FFY#"B%ݨe &3ס6ʏBuHo# bꮐVG
t)XcmRj0W\C	a/َ|_.-ַ
9æ='L-	w@D'JW ErzrrYHyYɒ\G%:9pyq;a꠶CyĈ#=|{C1)hе`xG,w׫0YqnfW݂릔x{ƣ%Qǈlykɫl`W	(5}_I<VŬsAjCWCHx{FԽ3Qs"0g6
ִrNA$v%ХwOOfVͽNC3j 7WJ:98Ӯ;罾קWZ9b21uPt;LAƤH	qT5W2Hek0G	
.A
O<ꦵFS!c$[Fƺt?OՀhX*=5h	q_sWf՜F<Oyc85;nsG9%g0o@t
-0P'Erp$q~MJ+{$Ҵez
sC	
ɉ[1xꭈPPb ?bO-Y'5+^
>"=̗^ xOmM </w&	ۜX9Lv>20QsPCyQaL 12|"ytq9I53lCǷ˚ߚNvn.
h_4-juxǛ^<2O
w
bw!-Nss7u		a
Vc@bAKFhXhq"h;OrPul{(OEǤקddSeҾӛmSy-~P3q
B9NyC6^-*jnܝRE	Su+4_+gT$c	);P4/"2-ۧgbnv)A^],>lXm;glWE]~C>|&%FB/V٥P>Df>8]n`)䆿%
'^5|>n`L\&qw6-n4F	[V/KX	Qz
5>W#U,\WwV+@oZ,peKLRY A?)g3}p"}9$PG.6Tcu0<cYh(-T5p9ʹ
mE^]6g/,`#Dw 9ژ,lx֞cw}cC0YG^=&F.pֈh^ۖeƃj-mTڲ_r*r*^)Tt'cU)8fɀJ=%ojm&WUsOwD&|3$@1{H (2i15Nh.#֐\_Wp'b;W&-Qc;;O~=W	,1.Zzn%>ｒΐ0s`Є^,&Ȇ\
Q0}+*)*T-=p_xs)wvWǣ6l$=> ra=@t,ߛNyt[8:)Ч̸"_2=OsnˏuwV3S8lv;e'yVs[/F+4Ge2T|Hꕑl~6T;4
N7_omc%y59n>o:l(Ω?INZUO~b!u<lmq:x/Hk񿒦Q?B'WLՐЇ6/esg"uF(%&qg$(%_^M|q^1pw1+&IxmBTa;<i (\zC`˝:Di"XI#!EW|L>y	u6gJw}I%3EUm<9=e+,	;"6JTJqŚ$00!uYt'9@1cc{gb@qu4DIAyԈ.o֩
Wr\d%=fj
-?E{ChVP,Ȱ׿l\NT{K"*8/>$19wVd Pb9pn9nHARK}B/<B,v&[V::~.4;2&7ؚ}!8Xի  ЙdӉ_P#cuV׾]'/Bva1r+?'R[u@UjAqUaʯ%`P,	8ƖU]QKvo&cFMPJ~eֆ<z[A冫zVժcwvtkr3À=A[:׻z51c,>VFu3)YkTYH
<x3e)6
N-BxC~U&Ʌ]rNGD%Sz;7~ԊUh:j@IB'4s1W4ǯ	+aRcM{_NFm˓=͏ͽ͉v&Lc2UBO"\~٬>9s9 yNN?S>iIsICY;Wmѡk7OR#2:I|*MԵ5zCJuKݠ'
#vWo
H>F_KO9quF_1XY	1(:u3F(pDͣ:th1xȘY\#G"DFuO8o|qC_E4oPcd9q{>	Fh[
o G(?ƶ;(z32NA-x3Ad)QmBnd)t0B	޾]v6\Ɂo9{8B3WEI1l1EVFظP?ˇA
RaˉYh؉HI4:n\
maryc
pYW{Ie_n%́ǅI&7;|i#ܵL5:^k^a/)jk%Tyv*+CZ`a0=0B)AEh^̞l<d;	Z%$'Z;;P V6q\>9km1}Ŀl#7=%7]:ڧddnn8zE
3*d/%;U/f[ m;%~"8Ve"BDEIPQƣ/u琟s!I/:πeJIcM
#\?A5a8	k+IMӺ+sNYT*C!eG\B)L[nf" K`KjWxYV TJ]#
Xm5\_2Y%͎=
$9a.;ͭۺ.~zwRB\DgM$#H1
&(N8&x
* 	@_#^!f-*߁!/TS#?V~4mY\ʸ0^4oIPԨV-)7 @%̯S2%!$Ȇ4`jF\I6HFk0ֳ:,# dӭBJ7P& ԟ!8fJ"/1
kJL3/O`
d[`'X_-o"YKr\ӥQ94HPS/3K8'\yNFbrn桀_gSx[6;c>|[b۵]fk`1~LB0EgEwPČzN8%>0O!ob"p$*bpA'
H~1/5
ma}4Q_ˏ4luGMii_<G|1TaZ$`ocKbj
ǯUdW
j}N,sg.]'%K牛x*#<g3";"^HvEEQ'cz|{ҵ5A:8Z0Oci(z;]Hc減78IbB$nŕGA vp'ހ䌐|8ev~4<:&0$HD#a%̡R>S6]g
P %}sU#߈5ȪYֳ4_}ȦiLQu±Tͷvxv0-fQVi؄|g%f@qS{NùxM4M $eW?[~}cc!d/SƻkÈ/@h#[uy5>"{mywX`gGCM /Xp񴹵¬.07dߤ&%_(\~݁r  mU6'TN/	Kg$PFR^4
$ͮƉm`EJ+8U|gb&d|Uk5O(~S1}{5>ݻo)il>9?^1~~zQ6h)$]<KC&8s#G=]od*1bGTu8}m۲n>˾k!bU	IikɶM@Ic@
W+Hw45U31cpMɠl(!cp(H EM[-!mNS4F4&6'|#A!Y(jh1	=A[ؒ,>+VVES3Gٞ8WL}8m2ʓF#?m>[I%ʊ$QW䧎CT
F3T $/
Z葂L,2qӉO&ƒ}dOAL^\
hîSapޅ)RiFǫDojc zEڬ?>	\øycvsm2ZlDqJt#HC4V\HR!N\G&	12ПUJ#g9Fy m~!XfJV",ohNTT|NZץUqUJ0C|
Wa
h~DZы
8Ei¾GY0!#
ƞ+hII2(o>L@e69_{uͿ
dõOi!4ɱ^:S*f7VNҫ6C%2cMIZeY|y]nE-9.a`fE\s-1{Z:T"'x?Ihso-/J5kS)$LO[шsL͠r~evpdF XЮ}4CEJ-)LveH6!ڮnH&ICe3Q[_;0T˶IA2E ϰܹDkg
K\	VVKpNRA
lC@*9B%A(*J^wUئi 0؀䁓wB/&Z??z}<έl'6{a!w֖W R_şZNLƎ&;vLe=Xˠ&X]seD쎔b`R}KF9ia@DŤۑFFH꒚Yԫ]fx4ibd(I[5 ܶG}1?	3x::VZ <bO̟BȾ
f͵g<;ˢȰW9w)Iuy
(- SZ"r%Ve#)$[gu'娵
Ox$WMs
-uw]>%sֈVO l"uh#b4uӁx;kƼsT|p<
߈vW@k*naG.4DhR]?\DksC?Bwh Oo;]\p.~9eBK0g (w'=`:ݿFɭ*!3?)*LXd-5#Q"޵LSA:<tVac,$  {;9:3co2E]lsC6҂xoHv8AՂ{L6>o1j-s=8WKH;v:1d׵'9s2[U[c;پb[Əxb\A"ڸ(&鳟bY$%)b&}xQgf`(GBx^7Fٹq!;yYB++<ntKv9^>lic7-!jb}pmm;:=ssoӉʅ>01,`z8Bjq'
FvN.YHjeTIt(19mϴE#.`pAq
ƀjm ƉlY	l|\N_'ל/!g&>B&-\%*TZlM+pvve0\(RaUm8 O<Ά,|+Ywx?xL}@oFe3<E=7H?p07MOqϤg?(7kM65v~ d*^JgQ~E 1aC #y+f
B_)^'Ձߨ?]96u4xG;E,-!A4pM$G3H)$609_g'{?W3%vwgbה= g/OQݗ^bASCT)}/ЮP-l^5鮞zԊUaq۳䪪+CN-|s^^0nkmG&떤:c()A,T^Yׯz`Gڠt JŔ5բ[ͷ&scBH/1z] Gm}jqpBvqpʎ"Wq2Zcy,\ ~3R>
Mq$u9\L+쑽N103{Qs˸:7SFHal;!)f<"C3ŔLvtUY k|ֻyYלVrsD+4};:PC\

ntc퓸0&p
+ԣYIz*'k7pX&n*ºB*3.0+xSA >2fTz1p4µ݌R\	BȍF8#)[UfD`w'ZB'ISCdU6(,@gc4nox̪OfkG')ۻ,V8-X^?j?ʂ_jtN`+5҈/!t
8Khzt";^ҢF_:$I#'_͢«|:XK]
>'R{0>>e^|- ymRO'MC1lgaaߔ%Nhτ桊̖	Q-j Hu8ܳQMĀᡡG&=j+bkE
-1?rZ{"o[w^:!w	c>'AxXAvBDVkD*g'V /êcrmb^KՍNWOB|z+bpCj>CLAӤnіhnQp'fwqͦRJs"d_b%mx<sp"cv텋%ZPMސ-n1(eS"'5D\ęd/OՏu.~$۬e RTpru`v QGqr3Ǆjݲ4fKr:ZvKP箦;*]P5i9ɾdP#Y7O0]_yRmL<O!%}V3n=bP&d*OM[hzŌ|Tgs7	z{ۆ]uq{Q<ᷡU[WGz6@$-2q_za	áNiء:d4
bz-7g0U>AhS2_kʫ99VI*\Z6Ċxbˎa77gUX$CNy<3ږ=}/\R3eZQe9+*C;wX:ٸ%!
3#.߮YVnݔ!TQpd+mC%Bqa?ص?朣&/ p2';~w\|t^v0r>eſZSW/`:* rWE>m8oTߙKdgjH},(Gաp"֪Y'4*ұbuuZ˵
=/2-~bb@$s)0,~	aB2-p2@ ^6Z$_RO/)>ȥ@j*T{&{hXT41ox|5&=>n>8^<$޼G<GG%1J<YVEg LI^O萻HTӤ\Ha%=?OsQ 0#!Q%"x{`눨&q_ߢ4-_B7b8.uge[P /`׭V6ū?\$.$ȫ#83m3^GY]1[Sb^X<P\ag%$OY|
;
VJS0B`qנ,JDߤ
k, >㕍OWB6Ė6ňXڱIϲF{D!p7_jOt\6GW't]Wţ{SzWh(1{۩r^0g3HaA!3--֚2_!Q0jlXG%>1	*g "VNίe-ӹ2J7* yϕ7Qeӟaxd,NyyS1
T]lxJ(ŉ._Q.:AOOEzo/um12^
Qvs17(pF|>iƟ|&}@;[fs@e HZz5NCX&֯ÍMB-y mĀMj!G%OsZ~&]SR 5O뛷f̅x,&z'YT'T9ֿWY璍q儠V=zn`kyJ:K3/cl/H`?RK187фd6-rs<@0^(zgt$ţ䗪ycO s,,Xlǭ&kp],@{@=5;mKVuX-4xa9~FvҢ'ĺv9vGڔ
0j	&U XW(*[˪U=}a%W=.>?N%zw2[`5<ј&Z
y֞_CH-RS[UPx=MжƦcq	b]
eoc֌
zŴZQ;kc<FdLO6Ǆ IrYvVDDoy&L?_
-_wYfȫC_HƬzl>XmX^i}_geސ_'-][!5-}Pͦut$'gmuH:'-;PTi~FV"-y'`+ӗ4u.Gc0[kpN@@'~	}ld	ng
&tPwiv^;/:@韛	urެk%}*^m\NPPQT>
ajWc\J+pu0ρn$Myd3۹g#+r;**jZG(oIUYPFrnAI!xUqt\aciR2*qaKA4ReQV<&Fz((o\BlC-X٥tt8#$o\>aKȽ@]
9yM-!Y*6gqw4EWڼSsg
G#([SXS>W4$2sGƞNN<c}6xPBŽ?>ŋW"$(=lGK4*?_iF~Ív4&9(CÚb4ǧ]h{)һ
!XMf|eqb]1m:
|#.2W?|so'y)C(;/!)fQu>ӁoaIw4%/Ne/Ċln<W:ٷomi\
\tX4pIscE=-y-aP촤,^qA"lM*fp4KG$ޙ7%(g[ }9򕙄8Ѡ1Ǖ\N"*eޡU`<
$8ߪIv6UՂxV=0#W\3áxV8.6L*y_Z3}|e~EK㨢aT0Bѓ>O,!ӮÚRU'IKY￪rֺ{g5%hHÑd  ZI(>WU
"[:@-o
Ǣ
Dh3O(6B~yf&QG<"]|샬Y/$;\@H:&MVguyr8jp! +`vZ@~i~O~ciUjػ+kB]/u4ʋ#8;^ipv⮎\=zݩLf!-Jt1TzPl;4>Ã=C 3ns?#M{f|j
UmǺ.] ́:D0b.߁k
dg) ?hТcv!Oz>_h4m{޼
h$Ov1'l)`{`M@thjͰ	$h?|i%Q&R=ѳEi9mCGVI]k۝yjmEĪ$`U0i:Ad˓>Bur(wP[4[?&SNaE%_ׂx"lbd is~q
s|&H>
w/lg]9 Ct0ϴ8/
-2)H{ߨv#;B&Wp(v. U2/KǑEKNq8	;f"#9w^:NJ&=ŬheHj5_e#Dv!?Ƹ͹9C
+[e\N:)J!.,yc	ֹV&<פa5vXMlx`Mj.7u'קyQ0H1*H!)pggFxxCG`h2
!Mm.C\!m(.*Z{4K(=95!'֋;(xZ
?xr֔0/JNa@/ƸL^`#)5ԑzMeg'ŬI<bZvz|!0s#iuL[gm{f_#ѿŭpB
o[A]X/89v<?5=\,f膆do){9|+l!b(g"i5v'#d
ﮐ|*Az@rEBTh٦9K&-^={hڣ!B\61C)NRt"3F1\tg;Î-CdD:VƌdЀ.o'ـ툂8~oOfڳT`ogoąY$m_luTX~C&*Re2"lY脢<@ 'i8uĹaiOܨ&||?#	ټﬖ~rYu{6̿EXw
30T.>-Cun>,?e.P鶼Ge_赅bjgmp%[^OxEN7/O^ѴzL/_5Bl)ITTof[[LIhxY 9̘W=Q/3.Sn)vݼjmeym>qCQ؆y<B.~3G9'lH1%L.y^:EE{l;hȤ28F@xKG2LimqPlDZPcݍn`? ;EH*)d!J7$3d-M\=TOO$K_;'2 #?OP*PX,-qyBmm>*l7V`iUpc0^ț+$@pxA0|RX\$^9?XTcelUF)Jg)ߌ_i uZwszpOix݉@pL
k1|6r2u@Q-w/iz,rp\GR<Tڅ@LLʘ˹*{g)_LC>yMptxF]|\CQ_-{CW.$!<|%Kre8]T|g \}O^˻5Shpv<u+GE@k8Obڂғ4p("f]QZ lAd &kEbllbg(4Д5#HO"O˫$J NF Q<,Ͻ魸ۦ,cEǊ(YmVn)`=VFX!·OX/tW)D_SM`-WĢ%ӡ	(߬ƭ,j׈V鄹{0n|>vS{#TRK/i-U[Lҽ2*{ыU]oL /e7NuJk L<@(b?uF <
Z.IrO;sKl5|ռaݶFK^[q0!ֈf#
Ye߬X*- Z)eg"NZ	˔޼4'>jѺRY~V8H	(Fq۔.%AJ|"ҏ^-ԝ,릺9L	UB눐a#ta+C/ch,ދ戳vlUGyEkw~h]ٔb6-K>)n$eB-R4KVΙ
ǘ(b0hl0wjG?m`Dm*Л5 uv=[=7&!^xV`.؂b>/gMW]ҲOVjL%%gт
\3qbkUr\H|SwOebQ/]A^aƌ᯳89bJv>	0=ܔ/A8dЧH&Y"٩}6U>yè0P4!G<F!fy#Gqùv(R7DY
._znr΄
AxfJƭUڻʇr篳x.Un}T`5Ò/4p0*e
l&(Uv"oeR-JYm򸬨Wd23}' ucjD81X@i'YM׽yE3n
U,f&Df/	R?ʟ6b /[-%q;
{a]LG]k3xօdN`.13y<6B
ʬ8RLsm>m4B=,)EyEJjim"
GlhDj_w :]8*K\l"mq{G	ep\VaKƁI;C]kg)݉cۡ,}7AfpzڢV+HJɫ9bi|-df9P{8&pWl]mbS6ѕxPپ!Fw%|W;^TTlED܀%{{50(oVhk ta	^q8abp_~Ĉg	KTQz"{tm5 ^w8눙>| v27=D(Ri蝣pf@
G/PAԶ#~2nHxq._3ja"j
g`q	 L?E@Nf`k$d@\k~O%2LIKDIK?#\p@֛(գs+]@AՀ`mB*y6"֣V	/^MDvJ/VG*(2v,@i.;}_<"mǧ32qd8'!T. O
kS
 ˏB`@dn\)PωlwNf'HɛJթ l+DM%D7gxV:
dZ8zj!Bgaq{=EynPH]X*dxfݸT-VAKK>U(O%_'|o<l6z2zDSkqg,vC^_C.yG><r7gzevš!ҥpk
擬6?7
c!$8hYn7j͔ϽYwυPth?PUUɗU<7YzcͼrObbu!^/.x
sT5j!e
9.IR׆yT1vqX.W<;_8CZjFu l<8GA՟Ň{
	(=]
.è0) Y7lޑHC?!a7l#$#i\|'I^ң=2~	R>Qo5"n3aF	1 +y֟lq]~<e'3q^$ GoO?dj[B.㼲 5SQp<v&xmSɏT<A7e(L^_1|EَOrQ|E`
י`Zk,
sqc枇VY_F02}M&eC.H'fIvΊ: f"$ﴨ`HWM5eo[.^i)utl%}
ftBxrW{ g^BV4.%wM|#p>X!aR&<i<v}4'h,nW)e2Gّm.
@&B<f㱋vwuZ=7>piarja՞7NA{~U^JnQ:c	YB*Ů稡Vbg7#<5ha0zVZu3g$cA
plˣu/))ޣ5aVҸŃx'p3ް0xUc嘒C	Sqrk\3F(;8P*mM,_.9YGy$ƋZH@v]5-='q,+lMY& H$DS:cl?;j.	V&̱<M1!Nmחّ˵jgNCBo`!PKzHlC6GV9O[М>UUug`Mk^׉&ސF/Egep
}9w@ä<b&*R	ڏѡЪ"=}`؏a7z݋m'i"zڞ3=~6eo#.@
׫E]N^M1Tʹ'4Zɲ6Q;&Lvi0w
>RxMC/Y\zrr0.Vlٮq$1кfPbeL[hxT^Hre[Mm񍤧+ljyJōX,LmDG(h:&-hQ?cg5jFVՖaLDTA}tiL@ɃIҪh}%9ήMč='yqI!*Sk2"F8|Xw=i̣c	n.)H_N۫0P'ڀ3Ԑb 	Qf)2JZ</}PU\uAtXIla-BmwnC!ikn%3AyUT<)}Cjl&7AVryeLNUuهg{c,UF '۶l%!H#% 	@t.ۄr<:	v
}&,$0\U*o
>vKE~.DyՃOv&Fwc$28N$5HC*<R튓O[pP$X}'gF`^!QbP˦91z(ʹ,8i% Aru0$Oڊ3.q
0`mਓ4q;tU5
O.cR
2˨7zUm6|%]LˁD_K>/\s&sPDk^Rv=
%Ũ*Z\ܤ'/-hDR+=)8A%t)aM/gUQ l`	`V4%,WOmt  r	Y;vUi*F|%MLzr6Q.c}˶l?f9ߘTak Vj&#5=o!KZB◴2W]v{ڤ>BdwNaau+$N΁~>
j#J?ֶ׊ "6!*lCl-c0!g1}%-AmsY\sنeXg,_$α5Y=pB%t޼\FmH%gHϽܻIl^=q8o:` ;PЏH!
à<+OغtJdtֿ0 h~)wʏsJ& N 𮗀)oXC9B:1*@]!`},qT^ n
;&˓+v<4Ӟ9_/gRZ`Xf1ouN04cfbîw}]IV{@석#r:*t|ǎ _l]Kud{9Xu6Ȍ7ӢE=tA9ْQ\<cE,tjw;X<PǸɢ2O1Ǒ,Z}gDי
@
sй;g/8g'46ҩ@w]aɀ.gB M^*iN@ApbV rݫH	iV"
<~&9 a|2"!M~ô  {ڐI6,=5up<`F	ޔ)JzMmun2 pI	uLmʃEev(m=JH/XVb}hb6N'\E~G4(\3 6{Mڪ u1v_7W`GI˿XV^
%zoBMAA6HE04;]g|&CBsYQ*I4XFֽ.M'otEfi2D>;	އI`E%N"v%0?aB|- O!b2G,8MG5>[)эm':벳,4z؀A XrWpXjIpM	E+eND\3ƇBdFM+bG(ԥ7_¹/DTt l~V	!K{h_(`IfCB},-	BnRYeN^5Dj/jW,e5L{KnaDcvcB$a;A<:,^(`@㫲l|a _q
hq)O^p}FI<jFUnmOu%EIx
џ>lo"	ИV`<
85q l.I]鬜^Vh^eʗCß!"m6*|N=}@
*2,1wl+ H1
$,a+[kp#BXkʛb٠R
H:"ʺ|&3u3AsW]J-#,zr.]1fUV lYn)4\<OXtS6\b\P͘$*@Oy,m=`K#&mLndp~
Q#xU\q +9G֜]utR0ӣ{tIn	,T2KN0o/ U*x͆ |&{q]%=S h7\8Ws"$2ƊtLt(uOʩ*Xc~įIɂ:	{KahDNYaş)l-LЉ5EcZ6wCȧ4/Ib xՔL°_(x1Fke$iMB*ZH(H=DPB`Z#w5VQu 12[y\sLw]a'#ԍ㫛JL/}▱%z)[NU:	5C]'mJp{62
V֍v[GN񶧙3lF=>=-3p鰆˵ g6!nR&yIpD @eD1}CX!M%Ai
~+S"&睂YTXXɵ~BHowHԱɆT @ByϩwpI%0qZc!Z{]|4EU`ٟl [1A8Su/e(AG@}U(mW֠ݛ$;rk>`6
t'(U!2qz$ԏY\'SJ.*Oc1Տ{B\=eL
BOGMJ"k͆v»Jyy/sW盍Q#I
0m\`|(R[z`k2CG+fҍ]fe=M͵u͂j$oL|Wqu;^1]F>.; =nD]G?KʣWd)4&ghB`[_\ƴ0vDnQ%ŹNk9dy0fEQILsBmdXd k7_ Ĉng+ooC+@X==h]k#o\ZbkVw,)} <sF /0@t M*Mi_<?t`%;N>6K	ճ/Gl Up4uYV>P^T
;-vPPu<~~@HS|Jz/^;.WE)bk.6C?Q>8 z3\|0o;Ec#N9B@Kxo=/}̣0 'W!)]ЈD4nY?3J܉@m]JoZ}5}D^=A,	pfY~*}Ǿko
9u :bQhkڇtۧLC)&}z=oVnv#%i$,Ctq3]MbnaW{=J		$ejۉJi]\sqZ`*[Jd 8-\x;ڡyq~X
P!-MXl$ICH<%}phgUbtPL)Bx%%iYT|9W_/,f:]`p
דk7DGbm#bفjB1DhB*o9+! 62mg"a ;$H,E
M;AY~lAs)At	W%7N$7tǳrϔk[8jwp.q\dC	T LydEG5jڇH^S>Pѵ~$qBEjOIHH]^g/O.#e7	}f Or1Z&u|8ՀIK~LzQp;3'5vW
#UoSC)Dsl|/sV Q^{sJ..w'9~pD:T-SߜW']#+#M_n(/=jD52By )vh{jdh؆ӘEroƘ-_
0N+:g6=9g-f׾(K[*
YG< ' ȻGFKN.VKe7V0I7Y$*kP|ӈkծ`Ue(39]%ea6h,(s
VϬϕ O4he\륹@UDmීFnNywFrop5겪@kAXZpKȠr<7m$=H>ϣ`#k"'`&
qP&1鼆MjbHR34e 0s{Zm%zaLpx:_yˢYEnzZO܍:~׽<]9T{ύ*I{Z0:%N:\j=nλ[P8zD,+kn	Id!dWئ:kwKʓs_]rL֬ĔTtRZ	Ɨ6#=-4k&^t"?@k[{8K-
;
r֬LNH/ÜDrr@Da];{i)*_rۗvVFٟFC+|3#@q!A7ry	-t'qKF-ZKO<-KlU9TiʷPLVeҔɜ&uҳhGwdln	SXŤdJO3W]	OV0_~T2򀇆[X bTBlÛ"u&>ᙘ1T'Q۪ܪ2"-#l
pwAvwla&HAWUs̾gj2H1S(
$pt;ؒF>
gvmc|/cmuB0;f`xɅzt9ZANF&/ӟ.+hWRP_$=Ba\IKx(;l `tH[k'joNsN
cuRGK֍;wX&[p:%_Kpzz$UX˻}+C#2ȗ9w&++򑍂1+B?q$@6|WHFE%#恽eѺ4끠h+!\u̺:uLQ3_m_F2`2_ʽ=1rdo؟H,xC
e7x%[<
?;jrO
ԃr><isPLLhƳ%rH,H~w;g	3B}9jUf\ЗA]?i:5Dp9_7em7pF Ϣe
c<ܜ|JHOgCY'Tgqz<oH>ֻ1kIgo%1c"Πg`<|sfDdԵ3_&+pܳ"Ja(H)KcNPhƾ
-Ҳե[A96?pwzzVW	:H؅[neW n|m?RTK=G:L·L|wNe~H4Ϩ@3D{fh\XAsT;Ng9S\a0d "u1`!do췗W'{0	`:ׅMښqӾ02,/05kkuc>Blq
XȴT-$,>1\(kd!ѢⳂ^

jxp}Pa۪`LJ-uotOإ:9u?p `@WijR.tp	h?A}':Jfeqznbc8U\v-³jT! cwe&*(EUt=xʽ;<staW,N:=+~M!c-)2q,so$xH5
~30U$] nje,. "iNydS9z/U>V$ǃTTf6"ᠷf
-
d\ik|E/wi2 _/jza"N)12.	kR/eZ^CWTu"3&Soth#M:݅ZqKU3y󄒢+i@,.TF|5&$x5/<$U\=~yD<\̔3C@^ކI}g*4.{41olY@'h1L el;~ԳIo%l>!G[diꦍ"R_L-)
w
>2mn%e=vgV(L\mfQۼ^p<MnÏ1rTlXAa]TBr!W#9"}o9d^%]I9ieEUQpKdoF^NЋ.s~;9^?rƾ bzeu0`e=!NМL2ĲO9e*РT7qNs޻{"Ϧ9s˚8l^$C:5iӼ(il_' d(^&R~/p%xx6vF6Rd0G][uM)'Κݦz=HޮV6xKLWaR6yIaAݠʝfe3t2[ӒcETf;v"KVΰe10<u`doQɁ=p+TڊsFhD!=͚ʽ@e{6xdl(%|+e'CD珀Db Rn\4iϋN@mGy֒#klJdj w.'Y2ui^t^;U:.P#A~;oQb,^6NzaN:ڦٸ 3ϡV#9ؐ\!|*hLvmU*9ǔW
}.`z&)6eUƲq8E4:6@i#^	@,|
}IUwm{P+GB:1bxȴ&x#= ڧ,2m67䵅(Ҡ6?4RX24z۬-22DVȻɛE
>G6kj [νc>gR):čzTHQpg`iR'5}]B`a#AP.eP)Uoɯ;wppdݞL)WG.i(OuXT1=]	y:s=B~v~vmW	$=1;gP}e얿608ov:s4G2k&S*q{c$
V16rdc&sdC#g3iQ:ާZ{-\(%\c`g:!4J>@.#fe! 7Ȗӗ?.RZ_ H͎2ZdFO8PJZeCdod
z~'YU$L)`zUŻ_)E,3.Q	CiLUS4Ye_b
6,sI/y4Ȫݜ'b8{%yB_!,1ll+_˼Y(
S@+Xi9àVB2ZjA
wbJ|͓Vy3hTqJ236ſ_JuUԚZ#-%Y"MdNe @X#NV]yy$JV5j|z݉T
, Os]t讽x|S~T1Swd-vx3
>z(85dWUay~S243fƫsYPW$ҭl;r^v~=Bxf#¥TN
	f+0B^DȺ) 5}Phla&iăv8Cw#nRC酘K-h~\
["tqe|tJi.EeZq<F!{^E$3~mI5T7ּkú;M:A/ҳBN@71Q6w@pbu(bh̴`z軍 Yw%+{?Vwu>3{
I]"F߽~d5S_
8g'˵v~c=*wǱ)dxɓ:W+.zp@&ؕ:m+O	3?(Peڙcbg
OnD9w{ԕ7+]+;K1TQPG'i#2>81u#vERN-5h/HCb;95G%ChbYIEup{k;-Tcϵ:\m
`]iDwf'GxHi&82< Mz^IHi$pP_EfcWE-<*0,~UY|sSϺj+>Έ-nxjnD,i@V'&QS'NA656äמU6:X逇P
1VAgf82 Q;>/}[/=LNPlaڂ}&fZBkU!Og+oyA"p0$[Mv=yItb,t.tޙV&r9 )"M샹k}R=R_s!+W7/WQ]\A*L>CȈ
1xvaԪ1` C5Ti6NՉa@F]Ńy;<pkQ}qP{}3)QVkNJ2.0&2Jiı̷܅9`;Ȇ} _= ^F=sasx~jfjy25*=oY
/7LM}n}z?V\wHf9	*u.ga dTn0k2qc
_OZ++B@ϻ	hKsW
6	$S׌c$_/hWwKE@n&<ݒ
3¢bu Yɔ1m|13\uCMɂRmPn7KJX_nxؿQ>'olLнؤ!Ԭzf:C7G&X
{Z"ڮD<kM=ɗjyxy|uK{ܡvdW

=KrVHh~tf	eخ6I*z\<#ek<;`=utO&Ĳ}c{.)ShMsh.ʦocfzoamJ&ec<<ڄ7QX	AѺ5 A&WPK-㱟ZD'6bo-7* ^ى_ms|Mb(0>GQ~HTIQd8qiyTsM^>{Wc1{gҟmrf<TnT.gy p@H[䢱3!j7[spAN{KP4.<,RUĸnBG0v}UO߉ J7[ۂ"5[/fAjnWá;j
#5f*.XH
DBF}WcUzPK;3Ro@R?N\u-xћJ[qA6*[2m{z1{k+ϪL2ӅSkE(V].2c~	'
wC|w;n)>InQ:Ѫ.
%|9Xz2Jn.|YٸZЀBMY&Lz=m]/
 bWSGޠHn:9t3[[rZ3X4̱;ԲZVOa&&%}rIﻰy
 nqVdGݕ!>l`E"0PHa$xSy"TJuÌq"V@p3T:ri-kfT֬+")M[VJ
UQjj+zF4@4s@$+IYOʫ&lIPأ/Oba=L>?bj3:thb	8D넏kU\kh&<v̥I{K]?**{$V0N	a5SߴGz:@L&t5jG
BkW6[N/%b"Jk˥v;y!,:gu~?	L~ 5h!k}J|ҢS<˺"j?V'*`pIAqT_p=OHnNr|M0mM^vt.p
@1al!c$+H-/*kl&81\F6,*ih8
QEH@e&Rٍ# DrPD ѱ6E%'_Y|@7E;I]`[~ZHKf:N,)X2}}}=(^|O]an| _U^D,o@:*nS#0ѪQ}{/8pԞ<c(Df"\267S5暤xsxt=. +cFy@[LJŒjcS`+:7W]BdTT V(M<=`BTkMiYyhiu_(Rb>QL\Ƃ9-}u?ib(H7tgLNb>JS:qZA8CoZD1Tߛo%6I_C{b%,i OY.޲0qm[zT^C)"X!q ʈcټog_iV3^3@R)Q6.|%.>;&ʽI}},mmz "ZmG'
Yv{k/z~n1Ge)`|cn
xn ̈]"?ߨT
.Nb5O>qI)Xn2JRV`3EdL90Tj@ȡQ^k2WrG-ddjhf	>
G}x!a>ؘ~7E =
Z-幵4HXvdTKCBNr1$a2z5-L#.$}CZYڜ:a1M)եKJz&o#ey9N:DF]Zc+H#@BjF*JGޙ{qScV?H#׉ݼV)neCXWuk~FXH=Ewb]=~_
z3*Wmp޸rV=Gh.ln?RQ{]6ߞ=j&%fk0BK8T[l=#pzW,g3B5EZo{gй2#T!!#t".KJ7qz$rAXkc Q5B,ғnf{t`+/)eQϕi]%GA-|bVJ'#J|g+2~=pHΣ+8Mm~dӧn&W8M,O-V7QoiFA zI\f9^6LZx1<lfB#?&U䦬MH&
VUȿʱڭ7g|B/Kk8Z&K16)RE20,'Ʉ*x*{4DeԜpse
Yyf&#}!7A	%}Z"bQivVD@{7)o-%&ۏ-Xzn:/%z/KsoA*@f{%+0BupEL;ˬ\B_yFgT;Wg40z4|PtuMd҄_o̷D
	Bhk2⠺i@к^ ;JMy؋elSIG
eKr8}Kvyco3i.SPpOOl=OA	9'WsGېKOVS E  T'}kAx%
w,X)5ceo]^7&.K;XXljl{bQp(un` X:skqצhgwf7P	6
y$"':m׀._v9~PtJ7;0r(ܟŶQ;_q|')\
V-kU+g`SS.ÛK΋)}_8ri?#$N*(QhE7Q.>}cEu-2K%
'-3I#@pWL3	]s+R'AuT1b[[OǶ~hNB;6`iՌnۊGͯ%	~BK'RK18@?8u 
gٚܤ!\>L 
K=mlR~x"[OQ%sL %6AfY=r/5j*u.W߸D#~p܆g=lj|/nSُҨ8rǞpWGmۈdPv?<?HԚ|c{e@%$LuAAKfyN	pGS,W-a 30sHl%
ժ0Ocw:8:W;1>5<KY0qV
aC[cF ⒈8C@evٽ<T*BCIՔ+pY?u A.<Y_U2T\OdÜ,Á]C) Օڳ1-ߎk6
1F?R5}ȴ1H7Y<]J/Ti+i^DE:KؔO
:"tUd1A#<kfs}HW+Y<'}KK#)Z"?RsJ?&~to3:Jk)1/3Bc
5	:a C7zJo~
Bƨsn4uO(,/w2_;ɪ|Y/~3{} 18VkghTfQ$ȭ5ӑ  [G
C+<t׹΄d%O#Oי{DӭH1unk;M*6EAQO	duXZiaWYRU+gժC	AAW4_ݮSH/}É:
T!ꦬǂKuPuOjHioDl>Un~-S;d{UK@ZVJGgN;XO -
D3v-O[[LD;7x!9үUok-L2*@Nua)a&tUy_>6S"2MpՅ`:݉gWUa6rvPi
Pp7	Vƨbp7g@	=vee)eT>$ywA_ItU٭l%:u,1	
}
e6(7Y;ynbkSV,7/+]{FZR~l0	qaW[\}<T;TTXkm#ySxO(BR펕5:ܜ_ߞ啾s0"Ee
<"!m]ebͮiE@NUrr*w,1$<ۺ 4YK)YؚC:؀Z<j] X֊/rRsT$"<,q>pڟR1|kEJ,0ͣJ	Od3`"bov?a⚸= 'b~M _th2 h{O~: ֕!3rf3	G}GYF)^Ut{>"7Ƅ6*g\HnzǛBRXV3WZJdu$ZYU3>
|80"e?.#&6(>-zoxN^
1遘xW2O*b$DCu LL#ۙ 2@_-^_;W*[Zяì!@AӤkNV,xFw7gizzj@7<
sp4
sC98xpøDBjƧ>+2+`x1ECnP5聪x໽sBXE݃| xLaXhica_ob
zy}0-sxg˕$7Aũ.{h
``O~^Ob5Q2Rš?ݶ*r3[-x8~FNC%%4êFK4.@PHA\K֠@"#W?od+8H-
^q$ZݢL
;* 2o
3.n'RlE285gJds"meMG)fki,lb"c0:O2g"6{z@[!>*!ط-
yr,<)QmߣPOhaR
C?#Z|_an!l	bT8M 6!ɮR>nU1WQD®'K&sD
l<eIW<;N_N©Ut-~Kn{Y>~f5Hј<UP|tN"323zdK;j0Y E<bD*H3RLŕkPuvZm`5^nV$BT2A!$C9M9!sŭz_OaPt|3p~?2{#{͇]:񭌍^eEIVpg#Um&]8OP
>dPFtn
azɵce¡KҨ[Z̶{]m	ҥN*Qc@	KOS*dƱ׭^au`^Yfng垒8Cqu)Zĥ8OJK/]~7mRV9ƘISeac{b|<%߽ձ<h籄1-RX2m;aƀڅsf:5G%!c8e؄=cJ-Ҋlw/.;c-j:|VqBH?q-[*M_=YOc4^>sEݕ	F wYXFE,<N\L)iNQSڢn-NGoKnkP*1?p:ч+vsx.!8	uB sRX Qǽdayb7T7
{pk`^B.#3s1tlOVpy-!4éU/sDcL!("?vUHPG=\
1`Xڢǈd8T.
x`iy.T+bv#p2F- l0U}á&kRQu>A@g_uسp-%0_WFJ.Ar<CHGsZ$.DDv67Qc22g0Q򼹷J?̻Ŷo,I0RV_IDFDpwټvzG 'ѿwD@5WafFC.=
LqnQJu vbrvP|tQmt>76mVjOt3+4O,o\sz0vki'X)
.
~]yVJQũ؈~0t.85WsV|/`/
Mm,PFJTaKKރ;$1E"w[eÖF8:Q>CNP.BCGI,su+)P1N|M[hC?N&Ui90OLU
r3X(|pboڼ8O"twv_Y{d$c捃JZ<>?N+lH(a/ fyB<3[Ṃ=aI;˖x1P^>`;`[DTccmK_%9p!
M&r`t@8A^/dʷݕ<SQKK"=P "ՁG'
1DS@w_5YWZqe&
	T >A%H1ۛFO$	*XgwѤ;g1[R 1ٞŊKxH-pO[X}þhmD+}Ш(ݧd3&jeL)кKKsЋ5M)c).V};6MM/HчR$4Zԫ/
ٲ;ߵ@c"(m0^V;FĻn	P,J<]@6
l=iP"K^ц<_#FkoHS^;[rz
}FhU[s]?s@[=Bx.pX?}akL/m]qٽ;:4mZBJBb@:QE$78/'E"{jsv3.9d[Y>ͬh:l
&0kevC}T%Iu`8uP{OsF/O
.|g9} ;<I*ُHC97wFK~$>~,SƂiy(6n2ʡQ⟟.Ci)~UX)V.7+DA2gr'}ɪAkY?h"ByyBwրYvd#T3%[tSfh[&"䓌xEu5-*maF C%-0`Rm"F}84v5gEU9۴&=+:Kae掵p:Li>/J:-^֗OcՓ͛9sWL*i	=r)H$i zy2Hڃ9lYsuLrLбWz3@G+pU#z!ԣUՆ(~ek#koOl#Emwc;@>me~ͫg:"YtXld&2z
ګ?	<5쭿3 ]",߳$VX2
CO45O_. u{u(bpGfBn{VїC D	&|@ς#F rJ؆gݟ*֪?F"]ǉQ0%T=jf^Y]-;XȴE# °1Y;SEENЦPyLXU8LYLQqFu(֡!`pcRCr\ߺHoW9}e=
:Jr
c	 bJl#uEf $=gN?	@ pk%m;	:gUo
ʕt`?勋m	{۲h ,@!bۣ
wZZY
mLGKN.MȒ|>߰ cI&=d3	|6gvE<6a"؟Β궉J@ QY
QdT]K\8ReޑM*
e4hBkDWRūy~cq7++zTfc
$WhSg_J>8Rp0gF80mr3RN @1b+	m}ֲAkt6t]nՁM
`^kVWͩHGD[Jf}`5 @rv'(M677R27j`KsX+Ϣ|d:k_S`v

( uGNw 7&.Fp;F>H"a&*+}=\\}HLP[@W	y]pZ0*Fb͓p&
ВSܙE'y"֩)DO9o񔶕L%9C /f.Ra*@7?jZ8F8+2%EQ%Ah	[dt*oq x:
[	w쎞
o3ʃؿ U_<[zi@7!| ДhBc`Q"c{޻-G\OygS<	l\ Hkuքii`1GR❸nISX"K1]KGdYB}_ļW wb=X@YҷYk-Ǆ_vl[*X];˷cURev$

lSby-t7r{r+12o6LL+>ߺҎyrf;2"?ۖeJJk ETU@P:	~I	R.B&%BNxnN:t!bs4E6@Q6ʎ̆N;2R͕(С0zColݬ$к^<3u؛E=?br}{(sb1}&c]K8oZ==@ӡ~7сVezXِYj 
o͋j)B/8u Y"4Gkd/nXMpj}-Z2;l!Jf5y_R:m}|a<KUaH뺰1> mn"'{S-*D9iխ_,їƽF㣊Z){9^_( /rtmjʆ_2~ǁ<_vQY&-nu
	,:HC9XV.$m31n~A,m3M/&Њl+iyj
/bWaZ|h@OXuz+KWhj$bc/.zc)oUPk`/ȈDBPc
X7 Bn(Xbi?خÐe,x->|Eɶ&*oԱ%	A@FUHQvpl Fe4@.3@*mVF<</2K
>]4=1s)8om~.׭S"ur(PmzuAcdEi/D_&\n@&ΞYo
LZh$w%7	 |.X{|]ӞR/MK+-GC&2^3X7N62Xl܀wxp=]2u&	0'+Ч"58DI<+V&z#yu V8Jȓ,XEq}Ϙ;
7(F?hըVkXo,%uS:*O;ީ#"k¶;)\z5息q4կ\8g;iUݻ9P,ϷC^5!дoU
`Gr]R&<n}M!"@
پLG4U@z3:]ŚgТ|3pb!Cy \_/76?RlaMʔ
ݐ:}<1ɒlT}ӶTVиUpK7r~=?yi`l̯IYȪ+:f "b1%ɼv s9n:ԄQn|t[4.w8GQ:~c"nzۑXHJ87jyٞb>u:{HNk3ȆB m98p}m/{yj\u-IaJ'
rϵAǢ)ڝl&n{ސhhtobxjDst3O2(
jSU)!u0p;>EE]cOy3u,ÒDfdwO b"B-"f*Qb,s\7֔QtMyc@3z_%:@/Ts΅N\ָH,T	@=e	y`|;Í. NuR(]|Y#3#gS6Q`7mqHu8*k8S	։P?	]}!_u=?ObbiR
M	&(Gk
6xbS 5(3 q0`A:RԼ,nZ䀻2acH?-E$"mcq_06|Ya7n~s$E_XOְ,x

b" )9>sw(+*ipC<&bAM#٥C|FyfyK%: ?oS)4<ǘAi'*Ƶy
˽vix;?P0pxAN)ml(vio$[7){ۙ5\"hҢCŤl2=P?%X9)֛p;9P8ӎEX) aߨl2a*^`S`0IH!;Y:B
|Pm-S_~:{%zxA#(
\Ԧ?`;Z|u\tad\8U(}p|#Dj!ant?՗B^޺ ,/-1uDWTť%!a3ľCr<D0Ͽ57eA<[q&uÙ|U6`'gb#'ƥ 5uui[u_=rt\A.sK""w=g
uIwlVxnGmFD!WN2ifS퉥ܞڲѯVEa.ԅƌNѕ2	l`xtYKՃ]^E" |nXPKBy lw]-Wة݂"I;Zq;?1'ZI:١rE	D[{@`<7|(ow50NAXfV4 
͉4V|u	?Mb8"
*#DpKIJg{u0Ģo@42w<molV'`.|UktF6C=q
Ls7c;EpuZeZ
3):`ڄu Z?6#e֒RQ_</0}O_pGKnP\Oڟ<ϓ4	1yåA%˴Uӗ2^a$M[HsFLVMA.
&I:×ZD~;h<=jk#ZUnl~6 +`qd2J8ߩ1שysnaY/9Hl+^N0}{<L5ޑ[h~Hj.1z9,}5E]]4HO7ϔSv˳ֱ_4HtMt[Q:K)Sn*/H }0ahljd@͢ն8TF7C #ꦡ4"n:<M~*Es-	5`w쑔O:l&5<$'o叙)+R~)φv&Sn,ЕgMOZkGWTA`PF4I~C<)(Қy8~̨DiWB.4Cރ0r%b/(!?IaOY)#jj2aHIg.48&mʩѳEm*n V*pӱ*8&$)Xw/ 6i{!
dndI5}( Y,ׁ_Pt%]pHCv;#{խ[4t0Niƥ ">7ET
W.pĴ:7[+ܗ;UÀN;gV, %17-WtyB<n|F	#niVu<1sTVl߅EsoXc$YTsXBQ1,_"cZtS_2SwFgDY&Tjev!37J=]i<1wsSܑ*Y)]R<wX~Ό~_U6% о{
U{u{1@9:ɕQxWyK!.=zq4
_=\VFb\'/!ʔÄ۶~>
&fi鐒P]+Xstiqкo MC	蓣뉈W3Ù>-iD-k<$DNAt6v:h-	yCP*ܭ&3C?{m>o4*k4ς7PQg3,.k;3P3S&ɯ
0YJ1&1&
#)3>yS˖Q=D$tc*pk&Wuf8!%?SǓp{۴+NtPzl5Ҏ}(;0C
*Adp??b`=/ !4v^7izujF˟
]p=fsMcHbs6:F ;q	=6a50B6$O(Uxf	mb9XӒ;DQrY%PqPZ	h!}N'.x)n(GTXb4̥>7"!M=_Ձ*y^h$F>1
!LK(Ƴ>ıC"/4VfA8rI:$pGXsɤFt1o	dxyOՁ4v>9)H-zݤhHm'Ps2{3>H(Y{Q`[~p1VYA=Ige$Krm`}:*dpݴ+x/q>~q!%B<Gm:LG~nxa U*3&|W:Z4>HSw%4壂3ˣ=9mՖ_bN@^xT^?"vCM#䀚Ջ_Nο	8Hrȗ#o*zmRj)N#D͹O@m1}?W[\~ڮ-jg1i[0Gt͟?
gƢί|"&%D6ZDF>-?&Mz0=H
7XmlIƄEƜ"}t)%g
F1V,)8ޘc2ezx3T2F,u8[SbJߠi}H-_I9CMR:9Ty(#N$? !?#榥Om
=ڮd,+5hAeW=7ٶPFgj94wmm
d^qٷ;EhTz%Re6~΄tm;A9\5fL%ڪӋN+O $׊׿0O]s;/9܃Vf;ٛ>Eå!|"mjoXmSr%5wI8vᅞx$#UfrB'L}B^
A$j k&iA]eD~MsyQ-'Ny֧^1 {Q`5}ف z
PH+ka;L"ػRM)جyHt0H-=VftLʑ"}e^bRa355ŋ7!;YDAdkαpz%|nfGJ-lhDn`#-:ҧty@,fP޻\ZM浤OMXVt0[%n%~\1b@UAI91~Ψ"r}4j9	q2"?'lcmda/j<	AdW9Y	2G+ԤfObjHCU1SDIPXwjb)Ķe^
h@LiXp830Ql$d4qe >5#1Oװ})
3ĞmCRc<S8\
Nuif0,7Se!'as9-ڇl{VZ&;$A3dZ8,_桔

7B>.x6P
e\ɎR/adZEBR\xߦ/ຘ_
B#G< wP.Zjύܵ/oKXByfB7
b>
Z㶺XM	NMXXКh.oV;uxrߩ)8;<n_]Dp|*"(zRZ#Z'٨~QHSU
*7OʦטWь@,٦=7 JI)B\XɇsTݡ?\R	2v[ 	-_r8]9Ng."QUF|2"[`˚Ď+9I%xZ0mlXzGv݈EIS6}n%qo@{J'twĻ:<	.q]JZ
	gL:o>1b
az+ȃ@kU9-XD w!%Uts%- cNPCVRn[=#EV Wp< u:q@%;H᩹xp͔n)蛧<;||tB@A2÷.F{p=#YJɕa,~oGjYcá)	M0_9}N(QK[|/p CnE1tC9	/'.ZJSj,mD(*M_z
A̹"OՋS+t@9fCrt,]+*dʿvtL\vY
tYξY[("((CƷ<Dg׀T!c'`3
m"j[BAR+vq8_KՀc,ٙj(FV]&`,\kV͒82lM&*]r>yr];p[]694b9}_yǚm?DY8.Z^¸%
%&Kގ9,աCM@-D^713y׊dz	;ǉD%%]F1C6k[
(]gQ6Kxnйt8,ٰȜ}r;Iމh5S{*^k.KFp>8SzA33̈́l@ޣ bȡ)w̖Nr@A5hs<Lf~n>ņ>ZdM~ۇVqNv-XjVkfH法x)mU-yW촮	yYtdd2fvECܬZV.\bhI`Q%{;OaD%>t'f+~(}'_Ziı&W<+H5rrs(#aׯZpuuK-$AL<Zo8Mꇥp)א[1Wm#hcMo]ލ?5vc5'uIb'
@y44)eeZOrLcRg,cDL^¦/wߩ٭L+0Í%:)ŉmnl4Z[B.g2}W*;ſ̝ny:
)&%l
]fyLP"!RXHvO!3a0jx<i0 Y
ڛT/̖zkx2/Q˃csֆ %o ]8;kЖ46Hf񝿸rUEde@W3S3a&_>H	#RwmT7vj{E8mWu{</MEꗱ%1}(1k2ɧt#A3"&=hիqbpۣǊx!FZsx.^=R{kmM( ~_ۄ@gK^_lV|NS{-o{x_p"`[Ӱ9ԐN)2zq{!P>x0ɷ~TA26z	h h,nu0WpGT6^Ǒgh{	}DNRuK${?3d˝yxFN	E7exVI74kwi<IE;nO	1I-1VbU΃2EU5*o?=[T
 3L E.n
IP-ĥeҼVLյ+{6Ds@JNo>8{	nVZ~뾅FsD=*ebW[@~0L`nJJhU]p[W?wRK	YȪ3N	H5[3[P<m3I'ksh:ת?Q/G֋2$ %灊-İmloYRoy|1dw 6"eWAB4cUL˥y?PfyT1U4rmD<M~M$8䰸OP.cGz ^TĶI\-3ieK>0(EHxGp-M@֕1uu>I3o$h ]|}_H9P::[,Ez2iǨ
LGtK%l2H@4-̟<ٿh{U[j	
B\Fn[a2Fz
䎚)_y%GVʓքWh.g?ipұ,B::]ESSz?((,àc8u^V|
pE"Q "hit*jnyxe]Z£A%ՕS0?q=%u(ºiCn"lpS@FTn"K[<Mqcb㖆\3ҖC

VC륆
n^n&kB60[yq&q蕜e
)p >O֘ʡ0vfqشrx|2<aSQG;0N)]	pWcBq ݑhW)ʅMWd(ωU3&ý
IqXBy
[khy,ݯ''83PMo*#r|zлP6.-!2{WW#4H~sy7V
OϱMM9x$8B/ҰJXh[eW>Ka,c4-*vs{c4ع$	3x70Br?^Tc,<
kP/\y'N=SKUY-VZ/*AiF
(]Zr<݇( PSDjOsu`u]۷jbxTGAP 	m;=\(N6ݫ|P5ѻ)0kr_B9,x8YofeF	2+a^ӑ*r-qOg(_Vu< 5E5 Z9na4Ζ4-YMaCȈkaH-ڳK.u	bLU|0ХNNQb:/,Bïle.4E
5.£-ᦰ0ݥ'MYV^z Q<󃇜_!hGp;	/[jIlǘpduA9,i׊H Ȓ&r4[W_p1V#$}|:mPYhI=LT$֮#G!
DQTxfe9J;uVvfKDUBja"ch{OI'%-bLc>5R!)IgZ7[Kpǳ UG{VGߙ_:=<^=\xA
=\}^sLȟt/af=,iz;9ɟԗ@ѭϼsidF-Tof!>=cppnvW-%m3I3gYD$gy0h6UGiJ蔟ոc;O^0G(@PWm'ȯ}$(bu6Yj\Ō0zUsPeݾz>
MGIWdjaz_Wz9<PcLY>:SUCSEWoodЉ@pa0MvYxYO7
^uS].X"B# ѓ-hn K<a7UA
K$7SHgU+~Y|S7.i_r>T	L:u11rScY{	'Pw~KgR"|-
.ځ$訁*m\FAH/Ro;PFwpbC'N$4h>L.P\G;s>FF0`D~$Z)#SqkgWEȆڗlh{~E=N֫\54$󡷠NB
TME*z2BQ8b"Dr#pj|3[UM$b{v
8f6iR՟TPY%v\!M^j8
ùE)! #Wr3=
!d8`;)D+7t;*偖?L\9SlwT_kU/S"RZ5|!ʢrĨ
GEsKq*N>@xX)gK}~c	0/鲔9D-'5&ҦvV_*&˼6H\-E.iEOs^
lAoصv7	їu¥Ӱ!-n(VӭNkH)>pG+|gudjy߳V<`ZU!@7%#B}s\q>Y@N%ypRuKs	yw(JStz9'zǕ[^j'bd/浝$N7{;nv-yv>;[KO+,pw~>AGǫhCݕ>WBPN
PtnLn	~Ai	3NwB;ٖS G:u\EmRd7U瘀2^!^䍀!; i=q-ĦRM"en/P'H%hiHp<h%#ۘ,]C
(^|ӤJm)9\z{T$t.ktXjHtSTѹ<lw?4́Q/UZĶ!fG۷j?BVrW}f5=`0H= λkܴ$s8_Kߠ!s̰,ndO%PKw܀J)Lv8dF	AbQ&mF!C]C"Ur8|&c7r|Hc59JVܱ2kb<]]u7,#L`LD^˚gZv"Ĭ1R
Ugt&Հ
tvBƢx.z.P3pv;2VWXv\vݓ` /ش$^eIhY	dҗ^G!Z
@_Ԉ;+u^ rP`CHk.I
\*"θ>/9펽oÁ9ADN` )͏~]l#Z۱Dq=u7{i)Tj11麭KGDmT~M0qnYH>#<<U~䗳U`S73 ȍr1!3kgMf<"'g)aa"]Azz?f 0G&PM,jh',x<ýw睭J"j&7_![; ny_F ?ZdN/3yd'{CQ [02̌cQd@hVA]	<|=Rh<b:&[-;>}/<VH)b8-Q4e:f3*y *_L>/x2 Ydl$6.Xe
5#ihsE
{c9bvv/`RKs,9sra3c؊kQڌQ1Gq=ڹ)I[6S` @yR:sJ"'t^Tco4-lٻm&H:PCNP;#"Tj¶tu)>Qܮ;̏	
_1Ҭ1{E} l~ WAضpU$m½vz7Xpk}IQqWf
864S
;sP5ߤ~ˣFի;TwIG/x%ǈ7(Z"CezG^\KEީkgSQ9Tfd_J,ta[6ƪTQwx5⣤d:}qज़m=Wdnef`2pC_g9s1$-OgjyKɓ>&8șd;?Ajvc8EwbtޕK+jxѵ`{s^E8EYJ	IbJb*$o53&T}<Bknb7=hR[sߍ0^SjpPOirsq`aD+w6h{!iF[
k{bf0/G+_<?Ar@=\@@S12_tEQI;J԰`(bly;<)ټU4܃;Xkވraq,Y<壝nӖLQiٙ>{'^2/(PQׅͣ0٥tE*;Is40B{K
]%Dv<!9s~1Rf"
ͣSOeh'5z5O\s]~!ɳ
-$"?t\xt,^aw*>ȭ,q^f2-h<
SƠ{s-dTKbm۲G3j.lVBB1"O3+\ڶ<ҏg4fcBED
?؊T[FxnqXAz|aC3l;I${~0/i֫:dKO|(@cOk./t`)_P_a'"F=tew329-t<N<`LTDg9J3D7+/׌ƚU)\^igĖ[H@`7ަD.<,圳HۅuU"dqKĤ:8*5mA,>(|Zα M}V<P@R:d$# rn ,	F=\Y9K[:9-Ñ|c	 ޻زP?U	A٣u.;;3&!oD[(`[Hmuw
9f/`	_>ü"%vq(qw,$s|񍒨g)S_8y8L8Xar8B	>}86ןI' Q{^Z)Z͓^lLOR~#lHe	Hz؂v9!FV-[̷
oMxk'AkK[b@/r"%TQH}{rcT嗥e9,	. *P@v|EvE?j~

wJt/Nh#oшxǓjZdb0oIEGԪ:A$ҷLBz)[u&?jyȰ;,-ސ557GƑcWZ"!d1Gs*XCN	<[P}X&6Zӆb*#]$w隻*zb^đ3Rpjgh֯o\q6#=7ca!Fc4fFJA>qm/	r5qʊxE@ut9]ꤍ1C6DӨ̉6hݝ
Df@&xo-!ev.OUCf-~!>5vX{Dd]aM-r*Fn*Ò9ba+󘩛]!hv-P؈&-[3BFl

dq!nNZќQz(O?s-."8Aީ\6K˅؞k!}?F׌k9s֖8 N┈ g{xT[<]f9Ҽ`~m	-, B&[uC",榰{xan9@\F)w?:C= Fo.JWCݑ<BUG1\eJM7-6p`GrU[<j tZeӷ1VZ11
C;:5x,ײJ=ڣlei{&]\=2+c&ߢ
X	{ 7#)sbEǫfZP	$OHG
63ܿ\LONo@aqsC zˊԧwj]3ש9?J6\!Kt`QU#̎爫>$L	86
DfK)c;d&9L}ةzܗ?spA-(!
IMiū!7ΞK/7A~@+"a^a"Nxk}Y:)Ҩc "+!TF>KXH6[I}Q/s:֤n>&+q֖*\=T(HcWyl~m]G6{X%7g*pLeR-,Ks6O"!$G60J+Ng&52lR\>|~~29*,	ol'N~
>6
D*VF'?sҝdgOI+kT|V\)'8u]4*H3cu+<*]5`):q}D{u\L""ז|u=QEU_XI>d ;ʙնfr_&e2Lr(M@
]p`q͏
d&3<mM_Mn'[v+${s<kGIINXAFKH7-15#ظ>*$u~* bm,tĚ׽Sh>4ߞєf
Սsnz'p @#x瘁=#bˈuv2@tHq<C	gsHA54v,k @T>P@Կ_e:8xˋZa}SQ;`
M70ͻ?`ϧ{|Ct1$hnZJ:`Wyuj\6`a}|kO<]A5u
|7_PXrm yMQ^fD|Vj3Զ =e{}LC~z<.LD
29e(uTpy=d*ejC4D:ޜor[
+TC!,ENx-+cyF]N
_K)iLA,V,5-`Ov<* s2
?76b,CfeO I^{zM4oaf+Sornppַ]?lÒMi>U\i)Տ.qO
\5Gb&}̮gj/Ïw|^:U9l[j<ֱF-\qZ3h3h3fl#@ґΊD6}\n$t'Zn9ginw-Y9x8{O͊m6üq	I72&W4&<l`V@PNnWYH}0fd޽xMYY1$c5QŃƎhҚOx@&<Ͷ4sc+1TcRE:
*B
0OGECy]ڍ C戯<C-7ik2ٲP.>|xjZÔ=<_82>3Bƌ	EJtM \dm5^0dMw^}{`/Xy>ʿ,?uDcDl#L-Ͽ#w@HPz!!:%;(+iYʩ36ցDxKpi'@a%NPwIHT4]uL3 _cKd.}=<0[_v,>YQOt@ynȞUknOc;ttNiR ѓL)
}#BDg !<3vp;Y~In?pFky\gҽ\I6=hRQb^w"	aʩ=1,N+C΄\y$om]qԏLrT棲S6(/~՗n$ҮLXP+(W|7H+}!^lltm<6fcіdvڔf)\SɏhزJC(8<A}TAb2 _OσU!."Ty(!#V?8kC*cNy!Я[ql	dF.S'SL.to-8w&]a蕰-@k,N@d\yow؟z1
k;pRC{$0NzZ>:c]mgYUIMgjFq$,ѭ8~N*{DWP$lK)lF,mVV//@pi*}5ƒwF7S1(c\ nSY˥q['uTky*~9Bx͞"f;b_(Q4.]a F0I={rЦ"ٟ)1|Q-e
;݁3> 4|_l<Vr[{(SVk1[[2}~"OONAHS~<o, Y9M L`ۻl]kFe[mM }X>DJeWൟ7-QMT+Ba	aoľQBP+W3_׭IUIҼPe3ivzR
ΰ#
6fo8e=<(2lTdA"'FUNᐗ;r #Rq/RkmtF( aZ@5RQ*Jir S)=oki  [{x]KyD4o]VPFUWoƌ^Sw~F:$FlͲrMsuZ@-/!FBgڪ'cTwsQNW_%Σ˽%^*]JHFVVu5k1!vX%w&}($ﰫ#H]kpեz3gfg
ǦzbU2
`2?6E5ESվևZ8崵qlb1?uB#d9
$@?JoItgMFtvkO;PUHnܫqg嗷LM)E߾53Xm;4p0'i=R2b,rٔ-Ufo8.29Zx*)VW䖈u<_6a̤ѶUMG |`56h } vzvrEbE	U3 Jz{R,잒A*p'^fMW]lli<(cAtഗ,-PM
ZdR4P\6~l0qp	UbovDq։?@ (5'X.J5`-x 8P6MYPͺi@Kcp"ѵ*cT#"ju%aŅo&Ow2T+K-:GE2g39N2oT$S *]ذi~>XWRuZ)>➱/v<5%>fʹuDtC}Tē\yЁguN)/g?u8&FcڑIt͝9``0"̮@̺+ΫSN
ԁ6vT˨lFtçFBjЌUX|J} 1΀oO)W{2KSUߎ1,r+4SӜo8(KNK*o|k
ѭ윚/l*(1Θ;
/<nq%פXO	w=	Fקo-aG=Jn)XL%^} ~Z>Rn:"]!i)qMmhָ+&&Cvi.1#Ţ'-sy ߧNR>botl´J_ 6Br?}̃< R|n詫7"ܥO	46{+7̇|</@*%i{Cܚ-I$XkJ+cfz^܈A=C/D Ksl.WN"ivyfI53s|⇓}5"JŻ^7o
F7(ݜ+)回ZSFD9plr|~CF_-\ttM#| xk73E,ry82{a{-͘0ь )@[UOL8]V&|!aKFWR	B%6n"=0_&y_>JAݖ9ڦ:R_taq>_Gޓ=ȝpK^pKN:[\t]h,E$CI:;@P1u?Iퟠ`Y?dl"Uh ([Y"_Wf]y(7o
pdVW">.@g!"j`~iՉk
ǀP*_lIwEU%zB6E^PwQ/A.C"vV&$8PG]+./t9_g9w}c fFaF&
g-4Ė)eO~Ј{gebw($4xޙR91>v|k}Įe2%V4Cao-09bf/AԍV'};c4撺fz=y4]Y$E12a`|xO2,_$`o*-'1hπNZ{	-(J!yڴI֬=rS/n'UE9=eGbb:p^,RAFIҾCPPVԱ`aI[_H+ZsQu)Ir)SJ_qZ",pɃë?CpqW|T0xh5W6@VXⱇB%tb&G8A<jLݚ2os	ﰜy(z8~7;< :^'Jr~`w-0u>2nneTRRZɭSж+
'tQ[k"9NmwuVVD
eE-mil-Nl bu;Sذw	4e%i6mX,gW[*8 G[*׋Ǫ
lZYK~
pX0qNb Xx.a
ZbEbsopqPhfSHwMst>4ĭ6#%dK&{orc0LΤծ!FԘ1,3V34_e (9"ǾCB~&%v㈽Mt3Ţ2KxVdү|]xɰX0td{1^IR*J㷫Ç_xb ")D_JhMmmCSg5[z@fR{W}C'@a˚۲Dŵ;7MO<L\OnLEsKTK)mn3H7ɱʔq(zR}j_kѧq =Qloh)|CABPY_$Ƕq</&j)&H}C3QŃ꬙wMPiա< &مBntV85^WL̮a-{ld/Ŗ4+2w
~Zh ѿ7cϠ~++63c2`ٔ&MmD
ad&$AQ~hOrr)O.4jBR*iE.@ >[~.[p!-TZ'NWVW
&lEgFOGs~͔CdZ V_sS$r"AppZa.?vBL'g}5J]BHq;L1]92@*B,;1XŭKTQ2S?xK%,Tq~9PtG	lP04yV$Ŵ`?"#*4Q `ǌJn7	KtRmI?skr(Gs
d$W~ה*[~hJ%yqu/\͟HУw$RK4/ɣUO檺7d4檬CMqǑ'eP`-q<"@3/! ^32&ss}PUI満Ywm\
]eͦΌvڥuu4KEI<uHx<e6&W	p|+"n|q6Nr4?[Zp 'mJvo*1־)FU
=?搗7{-:^KS#g&ƛcp;P9|E+<~\ȗQv`9G|]D)`֧.~2VPɧ0ɚtTRڒK0RvѰA+(Jf1hgt*fzDE]KP<t'ǋ'HEW٥/~z2HyLJ;|ذ樹D8ִ|t4Ր^٥vQbq}cKn$	!O}
>|(Ixf|npw;:EƓb8PXGZ7ߢ45=1ĥ	AT%X.d7CS ŧth=)E5q+X}HQVœ3cӐ5^e qeNZٶGʖLn2d*č9Wxa+l:߆1!Vk\i{ KZjm^|EH+Xx*-rk9.+ѐKfDUjxRVqTvz#XvBFj#_cxG';١bAWxr=Te>n,Y>;)P!*M e,is~'JH4p豘>OD_\Rt柑Hh
H/6ҷԤ ZboVN_
ɽgE=6!l GUZ{AWː3'o!=ӥJW.,vwgbځ1I`E}`څU
2rsOliGf@äJ?ire0֬Zx|40ݮ9hX)oDsűh,%{B>~60eLe[[a]qfѲ vUC[5c
GVJEC9$	^sYuVjKklRbjORJK?Z~gH ",As<X5օU)ͷ,vvc	{%ؖ$mxe$g4(Xj!7h+{.@æfLQۈ"H5֣gJ)jJ ;$[<8t!$x?y(顼Ws^)eN4a-vz뵭jLQU;rp 4eoߥg4ޙ-WuNv+z)v4cF!<U6/gS޺N2S	{jv Sa'xE]
O>[]UݪJ![mB>õVKN _DyVɋ0cD#^>z-x&{ũ63S|\BńXekL31(	inLO**5&k^Y  ~"JG+v}{oLga(uyjSTz$'SR7	5
؈>~ %nNe#ĕ,?zGBR}bݯByN
+0	pnЭ]h	*֗@=DұKhmWVW-1m{ovI9L'Tţx*Kl^돤D{s{w|RHMb </M@MS
O:~l!G,`7GjMQo1I]uB	WAz;)Yf_;8Xic*[١5#>ƒK#KAX>i3WP?,10&Hf2Xp0U:Yߌrt8VHn3jj&<4?bW(q#]$_:{DA˥ Hw Hуr]Bَ]T3D@y'!O{=(,wyu@дV[ ү8	c~;rpj^BDqfhd$/v$8	f'TfIXh
asY@eV$GXbsU(CE

x*ĨޕtDg#ruG 0{\6MaW_g]=]sd6P}G
NAM)Q@ș>ӡ)hX}j<ЮV $k;-
aa	ۆbf{h}^1G12b r1)4$=-Ј_yg+\([$E3wJW<m4kQ&5G^['@Tó ENj^鷪j:=Sw( =ԻǛ; n54SfoP8̊-~$AT2ν3QTx͗E:+VU4F,B2sO 2!:Å4<{GX'&k>9vDtPaz7ݰy;KL`F>1]FL2דPƬ\\u=\{P -guRC)P Х}Jc=pR	9P/GÝ˹|W.euߴcDE"1l{q
j|Z$=nd~r>@Ї>q. ͩ
2C-Lgނ#9m#t]߂ٖAC]>vqkJciĩ1'럈˭um@ڶxc&&NY>n->gekD~ץėPA_ƶo2`'rZwCc)8%|m1CC>΅llSj
W&GygX15ޑkYۧ3~MQv PqicGi: T[^|u]!Th uxK(G";]S%*BquS=n¬fF.@PC=Y@7ma=G͔nZD>U>OvN=L)SN&KAo5K"!r2mx"V󹋶wvTPbolHnh;b'M|FxP>t{Bq;#n:`Œt^v9k(~o0P4ryqcz}A5Hu5sZ1}#x5mt nƙũZ.Nh{.6emI=̓D}#P9\q;=GT.	| jɇO9+{֖:ӂ)rb񷧨iy:L
K%7tRyNcء'Ə)*?܇rruF<:KEOcS6&HJso%ZTw%r`nE5I$IvacuXmiT`
d,S@5J"0B4DPOmO[ÙHENꢯ<V6DlG9*b`,oNCk@$KTnYyyʃ*WM,a,ޒAk80g783WJρpo.[3 <XilKc x":[\Qp֥a ٹys&i8O}l>d J]C@Yʟ\jHI[ 1"iҌ	WņJn39<KSASiRP?ǥ?jNԚ]gnx*-j]u1~ac]֤
L.R~?ZK=͛w5Z.OKB?啰_]&ϺN?込r`[.UJG"af'pկ@҈",|RX@87U;lFɳvk5a-b$Ef8o},Bܼ1efh$9
ol ^p­/vƟA-뷺&q̾G\q&~
H)8CضQHbm$i'ݒ ;C
pYSjS^e!䢁HrZ.\BA(f3zl1VLf@*n7e;hN
̲W+z3HACV70A<IA+Ӱsm LFSXX%۬C;|"q'9^KYĥ#_e[th8 t%K{YDYi	:q7wʓ-TR]Q
[(wIb 	r2A=LU$ DFMZZ,&5].ǌ
Fo%^$]FCBw'
#TIG++#\Ra$6gZfqшLHHM2NHN@ ͙}ٖ_}{15(ܷ$ Lp9~!к  $1^",.21R*/ba1r f:UPc&o? J'D^7̍F~d
5OKed G~Dto\85njNL- sJ
kW[߫qsVJH3;xro<h2
V88w{U'
 :mBx]sf+܎/d76
<f2X	Us
b/=҃}1ZlHO	6=;kHQ)lRϡA߾;%BO& ԜG3b]p%?JK,ߛĭpx1jc,ػ+lS
އ8[TV {ﺹW{9*ڽ^!zȉrQVwR9ݼeN>->l3~ dC0rG%GmfjQKkhbnZ)4nWRf	;A{U(ƾPa<353N*h}wB	c}z[0-
D zx.p[M޿6I<.LrR@=X:)s-	DVF=*PrET&G_[Vڶ~Tw".,lK`V4L~vyYYе鄈-FXjY^ɅR%vC^9r\<%[Vjy[fySClz^{><ܩg8&OV:G^i;ZbyD~:{+UǕ[=ݴ-v?NWA
G e_&_hd\I<wCl:#:PM}gSϼs5]ndr ZBOXaj鮽`CRqo_řq^XM&V5/	B$9Xʠ\dUL|l<@c9P"D4M,wK
K:	 \6=[>(+^TDsh-bZ~P~;VxuKGaؠP>_6DB&%-Ĵ4gtA󄌒"
t*)/2zxpv)!hV% v^sw]
V}GVsXHV*txzԜyi:y~Vڽ5d>9%'Mi[0\֢9`noHމ]r,w4`M?i|;z4`?0iGP[c9OcXi]vD3n.)LUM ^Hޤ3r!r[gC;^T{>g5[h#-FEs_{!I7R
u)`Ȼɬ3'\zA)[XN3/ˤsw5`&V{G*֝18q"Dwȸ`eS텇c\#)lyx_8nPRA&YPǭJԡvрEW!Q9c^I3c(e%=.wҰNsh!Np|4UӔQr/4U ½Җ9L\Ѳ
(k	umd;L*LoKځ܇5`p(lÛ\$RTޅ:4w!讓(K˘:{,;DiD]ﴈJ$s1?>ʪ((}xPf{k2AAj0VtcEϳ_Fn ؙ eE_Pgu{jw+<+ͩ)d|uD);5ëdvO
s񧆅:<KO^T]9P1#|JR
|l9oUAT+~ݐ>>7 ,㸪LV~|hT9\b0J{-/54 9	
ؤs0ܣU/@T\J+6D%Kޓ/S4SB2lE&}Nl']dzěTTc7H[u}jv,$$&XqKĪmj5#F `'yM/kt0zr.Ovs1(L PlNDLE)\h.@vx߬ç~[0F~H/?Њة
ϵ&@)ZP+..BۋNx;iU=_<W=uF.
og<Il_kC/$B266*l'>M+̈uCc)Մ3on,-rJî7Wrz
)ؤʟ1oO@(ye~>3*	:vB_eNUs)8Veoғ
+bFӄΊ>_r5
s)!s #lGiWхU. Qp ǁDO'VVQuD|ƛFc̄# oO+H4dͶIs~c렪zSZsbdĚ`{|5	:ih|wq	";xsa|3}2B{'Ը8gd-oF11hpH-3g7#f""i)婭J5^!EKԬz\57-%/¡@i߫-nɣxh,vvkIׂUV
KOw祿9ϊ#)~Jp$\>Yot$9ɏv(z06"&駳}%l$|0ZZ;խ<!'מWJJ s JfpVqj+:α`K/iR4[i{Dr
dyڒ:01ڱW^YX:[5;Rz|"l&GCQ[]!Ӎ/u;S#R.9ׯɅSXyIMN&ǂ$iۙXcd'] ׸D+duזq
HV|>botpPvҼQHpFV
9ϴpWGS\ ~zR:ڸ@Zo*Za# |Τve&*X1T[*$oO՜Ftp !Uo׫k.k"Ez1ډs~jdXFށV+^0pbc	ٮP`Ax@:\5Tevvb5"}Q՟{&b
Ji")X!{N,]i4%&{e@jxXؙjoVi_բ36 (ݹkGmw桰_$	6Nmo|Ep՟g#48 Up=,9S<.Fg2{:ܑb~2
.*oG^j qaɁ#-cvLtO18y!bt&ޘ*,%~o2
&ߘbZ^Z.Fo\#"*n@N`=#D6f@8\$6k)w֞~tKrE$oá9N7im/|C;wodc1$(HN
(;E'Β
nrSjeEWoCEKZƌ(-K|ۛFmw$-} ~VZUbrEG{m\ܘJȡsZ	V7l/8`,c^Al~Pq-'|Dg!VKd]tѸV/hojØ	e}e~⓳a	Z-h[(O*.!mV}_Duj/w[׼\u!LQ`
u31
U3bҤk-
)@	/EQAfqD͉
'CPsK%?B Za{N?T
#de/O}?^oS c~?Etv2.¤U˖Xy.])3/SصJ[kW
pٴvmp.m@z\e\MFu oifFiur\=^~}߲X/$ZeW>
%4
 jXjdysS({+f}7v&;S:OZeSNǩxѺ%5sj&X\'SD3A[;Y_	(9d! U1mwyU|#G\k	UT';B68΢d;mB_DNb[+M
<W5UKl)]
FRkiH-I1M'>"svGC p9^:|-v/𶦩2kka=3dff,k[CtAW'jjdjt.2wYG#vf5EI׵R#0{bmK^Ibޝ?=V
~
Bf@(DgǡxW@
[b1|TneLfCR򒻦}XpL(h2NiL \PUªb Oja6_Q(-DbGWtJ)/Cow|74_Poޯx7sW>g̑q-|a`/y/.(,xAl#s+ڐpr H W$ 'l(YLo;m]=7'{h#G
RQw-aq%ujq{k[.I;,=1(tSâs0#Xxy07[t8lE_!7c##{h؇\f 3au<~E[CŻK
KZ%QHں

ʊ?_x:"O\mQ}iЊCˏ1bMGKऴ4Db>$!N	b;W$E,
{h{,G0}FWA%]<ROD|;	=oJ;,%mͺ/gY1LM˪Wȅϗ]
%cqh LZ3Yk}Ab
/M"p _g&k9&+i;!tO~\5QY2D;~)Zٺn1j[,ZPXW"H7.-kWXIRʨ|=Ϛg[I:tqp{!@9xN³*+փ}15=\9Qt6~wd9ƱzцҬ̳^	ϥm-^EjBg˟^hgH#@~XHen}p䣐PÛZE=۾9c'&t0t0Z׵m<⎀h~ j!(ݶRcɿgIv%֍m۶m۶m۶m۶mcYsV7} Q"[[GתU7rZT%qE1O.VNb]''"mlBrX9tSy2|5QZ	rŁ#2fjbz2
#5A wM
%a0!(Sn++ Yՙp`-m> 
_opFqJߓ5HDʬч0^8Guozs>pW|ϐut41ɹC0ԱG`HJU9C) yr$$HΘjW
V/c
t$Qqꐤi5Swvgti|mWjle$cnE04wJ$p&jQQB)HIw`F2XߴG#ًx"zkTN$~L!))'HʾudQfa8l0X`.'Lr)&,51~tM/TYBs7Bdzi [U/"E@[o}_4.`vΰ\@w0"Ci	p? 1. -;~\⭞E{0UI
p	!皮u6n%iOEp!/͹:P@vc)uwd柞ª|imLӐݻIYڔMrf/"糴<k1o$<1?p5-Jk~!]yϬ0i'OȲ<:6HWT!Gʫֽ'pE}$X
T9;T2k&= `1ѽƃdNEvRw/yCpn-,A<ϊmm)n.c*=Q2*bmLkB&%~VF6m",3ueA)c0:lsZC4/5p=--#)Kb+:G>q7Q(1L1K*bya!	TvuxaCѱ^2b6%	3r7Yu	6Kx@;Cɰ0-/h(LU; '*>9-9!/ʼAyk Zg[̩	aIBT:Gv#ڧ~6hU	;rG7?ũ}FеWI풤>DE?26;7 fH
 AXiִN"ǵR7~^[E^!MKJ7Zߖ\^Lj]ܔk7GWS
sV	'	Qѵ?<g)F*W<C+h
fH%9?zK#DJKAsG6EhBYcm/;!4.gDb,<Q-?
 5 LI@_jF7ψ&`?ˢ9a.&ڣ" '`@Eoռ%2I0d+ʅ%?Pt `g{3p'nGV%f-e,{z7q
E!AT|J;ڝ
 %l 4_4"ҒƯiQ.D7V,`^@xh"?ҬNKiv*@X[zʬ8LبCܥRHҐK[}D8C*4|#L~;|H>U7 d瑱	O9Wٔvԙ;Z0Z`ڑ['	#<`aYߺ#)[V	,VRfY@9%yv=c$=YQwItmTOLjxtB/	F٣!qE܈gh:yD M@})!H
v
ͯzBԐ(R*kme7HUC<wѱHD+^fhv˱y1iQa Í~E&u؟'蕅s߱LF\چ-D]d&|`Ŀˇ\LRyNOnsS?0InF"YSqJW-夾Am1CnڠT{z>}Eޏ䫒T|Nh{ZUx_
eοA	aZXEy :B|Ⱥ}R'L}򳮻*BP`1z~(?C4H¶/soQPZ;½t2@$Aδ/$P
 |
C7*])O32řb;!T*"E5Ha(Nbի;_Y	4Zy<E%b8Ks	n_
|/[rk?YEW{(y!&`r(DP2SojBy
?{Xi7
{H3 Ⰺ<:%UaYMYgPV6iem2pFCRe?=w82Q;~g]ጥ`k=ݖd_<F
j-Y"菽^|JuH~t 7IU hM_UL xŷ?<(eb1yC:,>CUloС7{Ղ&υ5Lݧeo ]ʵ}=MlFaڣP=%"l\.wDa(+׏&f_3uɧW̤Ŧ)%:ϓ;?CN|Lٲ4kH@,6^kuH7ǅSGI`?0dh?(4%"|,v␊~PsN.4RέĠJ3uQ{_G_VhYjJp>Ys¢'g/Uf䬏W51>q쪥eHVHFUku0;8Rm4!S*gI(UZ\}hv!N{
oUWٗ185rߑ})!Q}rE-xXwЋINE[l]rv֍<j<%fOV;з
buo"nDz?k
?;GҚɂGrT_
v^Sd17@W? }@9hGonlz*)HLmfq
5glo㵎9tMyrK0L숵Cnв*b2nk}& H䏸c06[:JSg>yleoRmblIkQZҁwiշq8JB8d
LX+u|ϩ}CyI/L˵_DRE8	9ok>NiĄ~!pK )ԼA`|51DD$\b0pxdMAM`3bMKȽm5U#nۄnecѨxU.nXKAE5OjchF>{	Ѭ^<))\}w!ĀkC{[@bd2}gC
`oX9t' 9*#A'''Tuyq0E*9}~/:=tR!!(;<Q0fk/Rw١% :	QQ^TШa_QNB
]zmqeeJv2_KEU\_9J#'S?gd%_53^~"sCy޴|	$d&y!\F1Wma mmKgsq<Zm89/4'KDRI'-e`y]lU:)5;ޒXip2Omm
o8ҵ-Eq/4.JkG_4e` WCKd6k7rlc
?xh NkS_e1A*}SH7֣RR'BKz#Lg'2dHwSymz3a57hu	R8g[qWms&cJɒر;5a?nR"^~2
SD|7n/X^wH`"0u9Ma6ݦ?vR?˦|mYvlBMQZ$1*Np&F5k{'@nj +_$"PZL'xsmDW;4"ܦp^j9%?_jh_+_!ih{]F4{`E6z$(T#L{4~};=n+xoz+Yziq$$zԉ/\G s;#&xDpz$ AF+K2SLDUk:(iILABvy bq!?gF^]*?6+Ӵ pyA"fiPu{Q}*iYꞻq䠛G;@A<LE!6^`7
wmb	WrgPFg,C#@(ѯV6՟fV30j.NꊦȗN	e*blJbl=㫖5WzQ4Œ/~E6A.Ű@]EhZʕA=9BBv3ޢr@Z7-WQ-&7b\,Q3{$rcӅ^)Q/O8=%z
-~&Mr߄cJ@ê2Eeaݲ,o܋	/#r]JgҊw>S$s`w&K\Bn)42$nPpN?3!vgտ'H2%I"^^PJhbm~j]E=A1p,=ZxX*Ȏ6]2?+ڡDM]&v	\<,J+ZҹM+q_,dN/*zR5th1?e˫Gs@ft!`+NfWћRm&$N?q܂_chwjwC-ɔG+빦T,S8D	[8kGl p4\(0BV$ŭ1olE5gD=FMgyi	BUN04-"ኰ2Q_~C	Xk,[M	:U	*_c
x>=K9Voa!GaJ
Jj>/bYcܔ~Z1v3d ^<C?kageĜUAIdC6;Ll=QoB QǃeZhr!ʛ=υTЅӹHhEU`z-Lg)g	q&zۭ5&<YT΄18|S쑩D*¯G!}FW<lXjօm,
~*ń(Y\*2?	Q0.*		;P0mG]0Y{3<YG]$WQ*!v:cvUS0>BI?k_s)F¶@c`KKx?h 3G=~aVgfn54
Y0dK!MwJr=moww`1(sQ!Y,hfhhbdM$
 lu0	YL|7t\
15bu
,qE,ӣj^;[9׶VLcF:w29!9#&y~>`u>iSaЭAǋB$]i`4 n4ρ̋e.D4!ӔgݞT'<igk`?r?s_"
՟Qs՞^^JBq}Z%Z춝ٶ!mC8ҐI-AoO2M#VhdQ'ݮSQ;+#z2d6V9ڼW?[nhnpJ)E2>|6I^JVzJU$wv+vcV }@)l;tsMv HX1å=WMPˮ	%Y_RWC7`*bٚ!~Pl>n*W?ø
72#& 8M	QY

hP"Oa͆	P	N">ݚ
G^^nar 1-OC\ftEu˫>*~ Tp K}TH]vmN	ߩM/j_H9=,ʕTz3?f f$$T%+YI"gX2Q)9,"?k#,Et'ɴda(^<i>\ҵ뙼/#>jwZ>BvDqᯐH[R|A	$|3FӳGJ\yXEvK҈rpFAkI&xc
$N"+@Cz<U,J4 ήڛd-ɮJ}Hshǒ+B.D'| 	H(Ub,縈	)"&s\`(2vfx@Wަ{X:t2pԤQ:oR5~N"DvܖcEϮyvD2O_#_TG:Py1rx
*܅9FuUYt2)
S[߅3L|Ni
el[7T̄UpOAdXt	e3Zw>]P>71{RWl{>hҊR}y\SM1~& 9kYH̪Y`!nt-\؟

Yz~ o ZI;]qAO6dnzgX3+8麇8k8c#|5p/waaĸH0'11܄t?XORbkc+cc62m˱^_KZ-,#25MD%8I
+S~n6 k65@dzNksYCӼ(p}?Hf>[lq擱_w-ҐmsqEkS~K!;$^ja*91U0d:T]H^9@:hY1`{#xкVBuxDZ()ł1Gd@3)!!+d@-Uo"]ikhFebp}YCINg8B!,UtQlRS#*gd9e+絡u;Q]907˾t8_%`;}9S#*WӴGߝ(Kv-xo.L*;+-bcطn!*gch_<Ej2֋#H8Ko
Ӧr{نJIJ'`iF<
XY<Q~O0;<\w8x;	ħ,SҳNO@VIQO[k_vs,'eժ/J$ڨ]&wذ&d䎌5547Y8.%;ȫlebxGY+HyW*	XӖH󍰽/^a;a̘m"}1 Yʰ
o.2IŴU}X~z,Eѣ'T_5f)2 X`ơhkI|S6wI~=gn
QPwzVc]^<(]
9u9^Tý-BZ.IK6bܻQԄp?@댙R"^7[*HKCKFRs.yUf6d突qrEiuF
<йƋ[?$*ԃ4WdXg,dkx/
_O=J1u.K؄R#_uX#gRv6+hZ+ǒμP_C jW~6[k6G[UN-7r &"-fӵSݔf3i[vR*Vs9b =rp5SIЕOwq/j"zZwM] ꍭ|S卐"<$
k3>02K$٩c-3QoN}o])Tc`{mY܍ڤznX_K
 n=6$(*&Aߔ֚zVic=־.a(hߤ|g?30@tߦM2]129jvt3\KʺE9pLzF#"$@Rvf_W-\6e:)#Ůղ̑xNnu+<'H&#VYCG <
.
IV%~kda4H49'.<o]@ғ.>YL	\T[^alW~w>41F3Ɗ֊R?Sig8b
lCP,	~>>aoUֳgqT|RP d8_t;̞
F^.xy.R}3r&f]_.BH,,;"<ϓ-A@2(z[$G_M_^p_Ѵgd{k;+T(`rz~3+=:8s.X!w)]7s1Q00))?א|cM[kWUfq.CDgOno{?'{afjd!̝G GxfK`Zn'1$Z$Z."58s3+㕦L_8;Qsx_>3U݄"W}ߋ)W\oݪjF+w8W+u*;i9%ÄE gam	IBe̊>_i7O@X,#n)߯bTk%
uV	h0C]WwT.nsc|BAXMUB63_6F+J\VWd1wb`J7@P^w8#\O%M~%*k|za>֗DG]K9Fk.~f$čJ\]+d>0]vMٕ-R	m#8F?[m+)do/=?|{j=,W?z0Gym+[ޏ>XɄyl.7,?,DfϨsִj >TH՟\殘j("eٹ+e)inҋ-H/C=-.Ÿg&&P㚍v1vag
dOGvDUfrW?xi˃wY[YPJiQnO3o6Flu7'TH%^Nx5=]l^.1TVv"ϪЪj&8_Hӆ}[=1|2ap8z <K &% $&|gr:D?_f\^7Oc1ߧ2K
SM>5C	XR~*Wq^L)&Yi$1_/ʣXAyǮ-HKTcZCr4;:LMc[^x'au=ʄS=os^$ҙ!f.@q.N	ICo&oډ1w=_|͞Ul#K5x(w1l8o&"(Ta*4;L'V1}5{,΀Ihq>SPVnI
t|L.^u5i\Va̉I#REPhP)bǻ#@" ƃRŬ|L,it8jó)مcpo>ި@h0Td R9E:½4<q{CyeU$Ya^W"P!g#|)GμQ'
d;Hφ?h5*8B8Ys`GW&R:Dr#ی[ZDAdTVsflCno.t(DD 4X(ix5(k	1rf|6:? &cnrI@gZ=FMJVa8Å@i̭}F
Vr`ȼYِۗEړ:@9PKT%&B$a1keFC۽KQwz/#]MM X0
>ԜPms6
ptPq;OYռ$eR0L7S
qZ寣fW1;!M}.'",	@DwT{?x7@w(LÀ}:H0x(6nlbо%Lx+c#;`WI̦PIz^Bl<-w4iZ^Bh$ÏI(ċv_lyhòTpfнuv(Tm=Nog:X Z:d9Mvb됳4q9Ea\XY{EhTMF~$c5f>]L53\z(yP;鞞+Θ3wՙBw5=b	!/
糶1ev,?/ߒڄ'-7
B*4s{e&yb|((Bb_E	ߎexbM&9x`S=3l)yH?meF1fY~6!=P+ԐdgqɸlL$3榙̏_ʋߧH6Сr_?uDݏy8H"1߱c1짐H +xyZ_䷨R=qWvWW2|5JdM"@'=+X(yqz_NVcZ`x.yթm%mapew|@q۲d#J}K5:ڔa_tG
ᠰӲߛ(jЅh a!<x}	7Pdv߼?Kv&[<6t;O`8m:
^+]ɽ PGұOUL?j^)xߝOg(޷)1>:Ι*3F1L!6BalM,&64cGYhn$:_ze=\ ">{* =ud'?kO%]`['+^A4A7@X!/ ;KOZ%>ILt3#H"_䑏ӦNez,㿮{JI53z|sxٮYRKoNJR[d7;	#*>+s	܃}{PpQO'~AɢJ,H{yfE`˝<#(0כi{H!|u-Q5"Νbւ̰O;1FQg!3v;4[Rӹ>?2Q<L^VbwEi5TR.pPfk  .j_gt&Ax!
ĞRʯ0ُ̥->ڔ)?ud4<&[~Z :JiB 7*B8G\͠IZVIw]c$jih2GjuL=|X/4C%ENJ#b[h-XY0=J"XOҐozjNdtw	no%=WLRUlњʟ~pBeKR
[ĞJ++8WkH"rޣK'E1]#w\[8ЦW]XltkL93	UV"]<Q"귦ўx\1Q^uBV,߃}9pA񰵳t:COrx6:l/hͧvTؐHb;PWhLl! qB`(MXc,-aIқU)GёdDjW
l(@ebyOF1UgbcWXZFm7ؙx\ΔksL\k	=ax
Dl[@G"xZmhĴw], ,}ez,T\3ӘKBFX]w9UzȈMR]Ap0߄V:h M9A;cův;@>dPU@H%uO6z>$3x/21j8~mqH6% d綁!ub*K   N3O0,fM2w該J@*ص֞1M`$\	תmݼ43ޥM(stf؏_ee{}y"FK	!jB_[%u~pQn*OPXE";rt7!<gsF|:[?pڌ ]#5D!J+swx5CWY؛-URgTHq"ǐԲeT>Ռ
/]G#}Fv~-	S˕}ucB\$/%.w{;%_`[hk^Hia_MRƌjS
uQXORyX}̋tG5ح,.c٥5j¥7K#L>sNmXCK
4
^Ǫ<h3l]oI#;\3fJVBۡ0w]@Z/1˽("*`
^;$Ajna2jILyin%;WѮ)nLτ^9K78$<]DqsI4~[lUYaRI~f\-sPkyV*Ԉ.]D^7a
^HbZDI^Eq+D)!҄oMkcgzL@4$<ǘT&1[.hP	YRT'\҃bBz&4248u>M#:i'IiymG#lKC>jBHyNZQcr5l$7m{P|UتN{bz-U)"=`(qA-(iYN_R'GwNAk~C(n~Pq=yQXUݮ"n>!~4qwd~m:ZUQ?)<3v+]BlPׯovK㠠KMDK.vqpK>{Op2l1`07B}4R"ht'.%^p6k(oślB%|H?%MC׉b5r쇡 #Ֆ0GT%xŞ޹~ ĂĹ
yطj//3J
EحF
FͰa\ͼ4H#9DQCzo[?lzO?e:Y2K9퟊Ӻ`Axm"^6@LoMoW	#DJ'8FSCp(5
3%h;4ۙM0:6M)@x߉tt00|Vf'nyդ܋)
a7,76(<wh%A^Eƨ18af#ΘUPS3b׊r?#_!qY[SSA\ti\u~OC_+zj<0RmwLkZt\j#RyQ$ơZBdK-VS4{=9
J~Uujaha1E@6yB%P~LGo5j&_%$:o2<RbЇQUxdlD~E*ԱP֌5Z"О}^[IF{
׋1GEyQa@鎝tYНY>[+tsF#{HIe°;?]t%^Mݡ6XZî% i(]̔[sN*XeP1Zr`Z@_h֣uUteК%&n7jO=}4/|-矟_OIl8t9"%֕`=]kB%ZL (oU5;v*|}[T,QXS!3i1S jDA<XǈT ieGs/Y3:cI^K<PkqMPII(z e~"VU#+?ST:Ssp>z5QY%(U/HvsZ
rV\RLgi*bFM@훍1llz	jǚ~NE~Xeh#؝esYW FBhnu
ٕ?׶^_:~<M
ˢ)Ln}329 1ALFYE'AU0goj:-c781;1yTA1!g"|gQ
MbHfmV*Ѣ[(!!0T/	vByyۅLv	[MG$5$w&ALґ7qL4Xr]*jW[dI'WDOt	ׂh	~ Oq+$׺*9}+3R3瀹=č2Q \j6Z4nuw
=q%J%TMiRu]>!Ă8Lv*I|
cL7rpe^I1Mm;omi%d}(a{6劂hR!R	 WsKB.Y&dZ_!l-NfǾ>9'c(eb.;FQ"[H86YV윺 ]yG95@"ḬWwUm"Jbc3[x6B7'3\)
O:'j|&,PˀFөn^)݀4݂ä~dv`NN%tH+0&{
Y\T,jZIx=H ^׼$IxqeԦuuW0^12G,>RֻQM8tHTk1kj\"Det x4jrlG90)MWgWvh|;F	PKcf/^"ɷnnQkŖ\_ئ8X !gΉhtxyHn"vHMeIqw&Sw\>8}V	ɘ8kswȐ3S[#!TƥOsчDit&R@v\rZ7N3Pcyor2W,`f6B與`Y bP!HMҍFg]<[ALsjd*#Q˹`̢
q_D0\l:?lHaS.G1{5cO2o_P(ELmNk.ݒUO;eu˵:D,eަ $V+lе@Ieq
*@^y0l:l`5bG*;BѻnJH_t҉|TaĄiy:F\' tVX&;{ytim7X9Mθvx QL=n!-X!mr Է]|2PlDHNJu fz1V?é1ztA8@t],DB~<$nMQCv<[8Ybj?j	
f 28P\PqBد˷&m-pTBZD@K[Gn"%-9z0`t3j'/o
S߽UEYNYNרde}E/SxAy?3+Nd݂"Jl(p\Z:5>C:W1xa=ǧ<EῙL#c =XN$S=mHRk%$Ζ{GO\ǒrMk=(C^8&(D@ZRn+R[HCE?AQ=[ =)Z9:QIw{mOͬO3c:}1CϽ?%U[UYsI}4~c;oU.8j۳@eBvUlRxrxʤPx0
[{{1S>l??:F4h8vA üU1VT5|x|NNG;3_ZEnj|8 t<E_
)S|/\.:}nND6[px,G^t=h4g;1 l1d{?]kDOs/;QCЅMS@ef
rZ>vY1m	Gs7VszƇo~AYs?g8x k+zM 9fm62{X'H: fY
&o O3,aͶ!O]$<.pPM]gLP޾&b)vS
89`vKԧ]>]@&2'KV|?{LU})eV<`rn0]T6bg)b|G
&R61/j#4p,ny_hd!SlQ3V\8~p+2Hoܯ0x@nh*;Lg>+RQ,rJ0h9=?{_8UEL
"Jn<":[<1ŮT^efWJx+)œصCꃆ)<+5gFZ'ܹv[d!L'=PӵTB9̯&v-fj>FǝMѷ=2'g`N8Q聕;BS존U+ڬ,^wOࡎOǗRMohF/ɄӟrM3EE 	[WI嵠FU!L_s_ïB<._`fJ{ҳ939.|
IDIOCң_ߧ7uxjVm6WYn)/B *"/TDbl Z'j6U_adm*ѬO/JkK*nAFxwsv]Πn<x,QHWT׻JwB
nΰ>'fPvx,
|$ʜ癆vtqԖk%/A\h.{Ew2P^ɒʃf^ mʝVִk;yZ2CS1AϷZ,cukA'Iq9/\QpIlӝ[tz(A{խt DtS,xA;dyA3>)}9x{L!׷V#|CFV"uQѽlOaFu'[J翮#N[ ӄg{U"O5'S,6
6v311g>XfL#ȭLD'Uo	Wީ+FO踽'kZNOoBw{"P-	#Ri6YS.VXAҸx P옜yt"Jc$kPԴܷ}|x)en5Y|)E}4
(JFφ$yNdHy$ks 3I.ޥ;"3Z2TIzU,sQ(wiqpr덫\0')U>B=[by691EAjD+fkkx>פavUk;7WSѣSkϋ/zԞ<ȃNWC5x"-n$\ʖƏ6(mѶk;UN1{noؤԳ2Mi?hC/oP%(s;w%
}nFm+1Y &dew;^ꤽ) ڸ!|ZGV=O-[j7T6w:seHk`xq`JX.yL&.-"]Q<tRZ&SS@S?G> O[_Ѐ-LѲ3(oty
 <鯅Sh֞9$ǎ'Oߔح(Qurj",*$T	d\([EZG!昷sHCf0}!.8ضxoΜ[ʥn~TvSlr		s#5 
,Vnu[C5Hc/>t{j)T	˥>j`Gn@:U]
-='8, 6Hۮ
n
4<P"W/`Zeտ7Qe6b	apzi"$YAXfTww𪄺UR(F&$vl
N[;KZkgl_\$xX~aATȬv$]w$>@Avȑ:wazŒ+,gb߻WC+xzWΕ:JȇeZna',_Ycml5ܧ
dz0p=uo$YGi".*o13׽&yS6@7K9qcJ~:d&_w7?IQ8
6Mh3tmY(`	vNk}wwƅvq,,QDl3^Mޏ
§/ui]^,.cGXM[h`P=Ч{b/#;K
mdtY2ЌZrjjԺM<+r0r\(*)=?y;6W1lh7 "/}nUsZ:%wJt7@LM:Iè==l"m!	W.zў)lJO??Yoc-m܉*m!-pΜS8=D	""fuϴ,:z" ]]Oř`>D5d&Y9ƻ#;NoP[|^iCGB¶IO|:;ᦍAg#Ek找E!Qe?A2rk 蹦'JmN`oH(cvMh#
yFtP
o
cTc5%hZy/@;o$\v>9Ǎ
̻mVW[ѤWC=fx1^~rKfYj뷟4}sH<exjYt_FxF+@knF
.f@=;j̓Ao»*v؟q)>r}NiP\?ޝPvK;OЖUtlQ0뷞+U2^trk3" hP\W.Kzb	*}K
wna7q;T̙`NIG͸)oD२ŢiUQOv%1
 qWxF_|b'tpfp_We1eRL,
|ЕT@	I&_5jVjuMZo_+	OOu'toq}]!aĀԼo
:#yEOwoZ8%p]贄_>k8{؋F׸}057;[܄%qG[/caT7t&Hl`הŷ(Hdr (Q'ܲ}J(M(9z\*U4eW a. J}7B~$JXIqJ#i}5uoeԣ3ñ6mɲii<ߺ?SbZ|Mm;M:vŻx°6|$0$JIqM@=u{cS{"lroJ1u9dZBM_yx*k=ңn@
֩|S9j1h%m3s+!fn蔨X1w_lT4_iԸqpqN#uL4f}I:[J($_y:*!cKF%!Ci8h֫rOx溭yUݒn5F뱜Z8B[_[nʧyL$ɇH©@
..jPw'vJ!eC`:	2-Uh*M5?/71mvFО=W/Xhgw)ޖiP~kR5mo$G!5+9I₍yx+nQ59"Ma_~ksFMd-}RA9]/\[{&jBe@5Vxm7sb֨7qϯE)S:N|iɞZ&
&?%׈c=/n[~f98fsU*O;eQR=Pr~m40\݅4YsDr_,6xDn>IbާA"Vv_.5fșH_/q_|a㡹9
0yƕq0Ϝb#c.0%j(4jWHŲGN4|U.*5"rDLh$ԡ+A):VX>Kq1״$PRCv?)NҠ-ӌ6lk5.l[
ЛT	qOFGu6^	M[4b_q3f*
w2(3QgmlOLO
+ׄ<Rca<M)x֖/p:jh+2σnҀ43"c#幔vA*	8ϓad]?U9JӀ6'=Sgd$N|k]-;m~14-{/LzEL僾{L:qYdluKظa\*?Θb<ݷ)tX&kKVS倎<5Nb-`)d$]'آUc8fRZrz]>X($QMHA`޻;'عduD*cD2N|Y[eǡWV6KS";@ ?םjmVACxȅ[9Έbz;)<{7qDGRX`'"
aZy	v?9ۂ[_TP\0m,J
5xkd	]!eTL?z|g|m<6=F*o3^k&wj$Aw"zvdxSF\rlSĻZL{oF/_=O~^ML͈6t%o	l-k8:t*~YE"y܄7>]55TeQ-xQ 'K~eQD>un|*g9!޳+kkn޴H5
Iow̚dXJ)uӓ,o_
/5RO4iv枋z<^2za7n0y$϶
y#3_jĻdp[i[v諡7I+,}GS]2xV7טZ_ĦyHà]뻉&&n{ݮWƖMMd;tI<sRIۤ?Y2-xهx;ޝs HyT@V
^_;N?Lۂ?@eMoj֦' A6#Wyr9TÏsZ7G-f51&}ޏ
B*m'?!g29y%o{Ej˧{b.4S+c!♁~-vUu1&oe\}W en.)s	qo.Y~R"wSk< w'l5gB7x^eV4zc=M'x"0+}Z9vvxvymfM4#67p|UcI2&eeзc`{<JJ=lͭX>VM}CBJ\vu{0y-%[I1}
laxqrsJbs@{XY,Umj{uFd番yhՎh$u<n~rZ	0O
,5#E#o]NV.mݑHŕlj@n74sЃeݔr=W}ah4YwBT/+X$̠&v~M>,GF_ɘ/zpwm>T/yVBڱ&~ԈlG'})бt Og%/ykDu)Bc~DV^x$ {smQ@=!s;'݈p5׻ pWV;:@3
^M3ydjmwT9_hKaҼj(.<]J8ӴmK^5:%MEPiOqU6$ u(CdDHq1gv	oOv
Fedo}1f	 [PbT胜\OyTߌ)|a>INGg̚g-A]Hm~dfޯǰ4W1A+Ou~@0[}:U;HC3s]SO;d{)gy2ͅ*c"\xz?FBW
ǳ-OT%V]E{%{\t1/쇑TG*:&'/ Ѡ.(򯓽r9	d1%6iIcgoHcpuPOwaV%v3oϫW3@=CJ%U@--/t])fI09c7<f(IUXeLD^x]I6dp/ C|pB o't`!cyh̺4F[*,J!:PcHȒ0@fܡ,_{b^Pu؟'o	sX]y OQ`5;^FIV>#X$z\?-b)UM/hyu&c36>T_gmjSgmI&}w3]9[n|P+zC0KX??o޴m G: 9[o(	j3 MRo]y 	\6E9CZj93ͶYiOwFj6s,XZX n}!(a|ơDAՠT,q4(⚻\S'uKBhs{j	>킽,̇a}Ruj6!J+dv][	us_-F.Q8Z|żLBoAZ
V'k?=]Pp£\=ٮK)|{!f7[/-l{~Esh4kScZH54bԛYV)9(,ρleӧĲ"*iy~J!L:rn2ըS*؞h:9dN5UUh@1Fe9j*%"KX 9gngp	S9Tң&Q<.q6{흠ӆeDX}FT#C3OWM ;IwOVI1iDh(_ JzM}5"񝬯掎\'շk0R-6=m3HMz8vOM!	*SU	$#;/CFn3ӯ	[mN)>	5(6$Pլx*m{;Z
7sם}}yT͝ o__be`EɼSo t~z'5\Y *޺BAoY@u<#X25f 	7-(q#'x+pDv
~+$h~3+<n19֤.ҩ&WF^+<85mLj
2"ʆ#֤e<'XqL<3ahMַ**XAx}QR6ܺZy:vYx|yG(g"TI>oFAp9%?}lVG*
ֶenzXyv0ivwy%HCMn	I,5o5ޮYMkgw_;>w!},/*.u+p
A'5RL+jO?`ݖ$҃G`?WYΡ
<2!NҮN25/a}ჶO.4^\ns8j>z OoՍʕZ6Tk+AIYE>KN$ЗeD]Xf8II-@V4U&@IM>VPj{ڣӣ!F*	5%	rH.]a)G59n:s\=+Z~^$5][t
/P_购VDmN\koZ"3问HL"c*OǢBp"jfRN"K5
:b~>­ūxLϋnbK̥z<Sr68|efޜ?V+}iPx,
15U:m6TS2|{ n#PiͶ~!?Kʎ99ovJY'-MT\bW)}_FKGl0鵯ȹ
Fuq a=9
Re;_yg)^Qdc$}1n(3̀(vn]=KЂH;1]ٕYM_2{lsKZ~R,H"5j"rt9ǹM(F>4]ce]>=юLv:U~Hl^KA](|ޒ;tww]ph-Wa
liF}]cd2
fZ|	"qv: ֢pY32SDa;,;PI!eGsC~#ZmAARW[ .'KN) . GvXsIRqCpE"yg79NI~W$scMÉS7GʭkrYwBa4oS?˫7mU_nwGFj(JL$\P_U?:)d2+g[cUt
WN~SӴ6CvC>Zn*Lur>d$+W3
B~"	|k̠vmUp2B?_M@vrɗ
c$ls]uh4|vf09cp1sìg12ңHQfM`LMN-V}:(O{x0ShV\O!M?{/t|<|#:E3)LcXQ`&EIsK~vzk2rJ3|!'#|Cag>iQvB+_޽q$湤ksGbm2??9YR?R&#]ɝ4#v=gpyaFsvu~՚a2}?Jv0ϴ:vYʡBFr?L^#V)PƙYE#
8sVMg~"W`[Ƥ$+IsށN31Z5=* bq4دCB]Ҍfq]NKgx2yFC9AϰsaGVVE9K׬~iwT1o~GRWm|emƭ[-'M<-%eYvf=AⅫ=|}_-rJs3QW4@qYx4jsȜ'&@N~3zPBvgH_JKHCCWCKqj9wG-jNf 1
.	JRE]s|$P3sskGOh&C?5I>{/*<.wnsge)D$ώt[-\mP-pR/eh\/KÓ^ԷԭiMor]^){lG?|WnB"q/'ZУP<*)DOBOnݹv52yN3യ{QirBIJ=tӍj&YnH=l{GFezVt	ӱ̙@= ^+r\<϶x8\ |ߙ`rz~񧷬`n)]
Z<gq,hQb)vn5
)4rO M65[2l`<"MЂnJ֬^z~:4ý*gnz~J4Uת4ޮp+4zz JWV/r.@m>8>U^	bxq!^CЖŔZS/͉z#>a2!]t+zw1r
,;A}__.!mAA+ERYF.[HӛϰX8n چyʡSAY{aؑ y:wnsceBNz3!RؿRg^Tx-F؜[+oAW_|-nZuKSk
!e'CKB#W.?$9&:S4Yu>ZC?1QHhM!j-[@1aڝ*
 ˷bc(ך1JBHOQ lm?+]5r@2iG85FVMavn+T*BK1aLdHآb7i_5;	iIW:wVBt2$(A(C6v T	{JvKRU4\3Q	sGcZ1xFT7*\=.3(/
z!?1$tsp;O@l};WX* &44o"ѥr#Ǉyځ%Vf*AKZTs|y_'`>Օt?d!8ᶭ&w}OۆrsvCΞ$90}u(WocJx~i܍F+dКF0SP;Co7@BKs?WLuSk
ޖo!g0f2r^
x1fnV%%6AQ:޶A*
U}'لγao<y'
TmBcSa)wh	0EL;vjֺ_ֺv-ܓQL{WS?p6|<D+Ǝqyg繴.}î!
	ru+
Zf5rF-E8<Vf}V<7*7crSSmUjeǗTنj=zs~NOVH B( 2yKIc)mG wo3 Rix\)FYF4q}NpOIM7BeEȃ(,޲tVgHz<ۺaba^j8?.`"]C>HX=
n<oQan .mt~$1e!&7^!f:Մ4kgϨa[F/1fg]$ղG]Ν̞u:6ug#\.戎ϻ*C4H7W!P4^bP`NrYoGW-paK ny\-UE
^j"D=jpJUƏ'=.	&o<LIL>]Vx%\ci=Zy1CULuB8XR!ܦ_*fF+nL<]|{;6pTGn~Fd5sq?0&r:̙ݤ1T$ ̜e\=_)F(⑤A\Onii(P*tYz:wN3XM\uԜ> %hRBl{11h qP fX7ZuFjo,,5k^o*ןU\s@rA9bjǢ%rlZX!2iɠ
'_9"$^)2	蝴nyx1˗42*6~Lv۟!#ӕFFL?gRaM4v@(jmɗ<H񩺴+㵐'mRk4>i:$w3E<;`9H@91

R7]D.EP
U	p8Ϫg6!ydf1s7
ݚ iQ"6HN䡩>v
aaN*}6'3vFRoމz8@04*GueJA]ewuOxRfq}&|Jh+I-G #4\;ڕ/mʔZ[<{?ﯘnGNBLOJ;w"،udp`+DaSqo9Rp~Wq˾rQo
O߬yvE?ghnXozkNqfCL<
	!HҴFIt.
vc 39/#5qognqo0Y⃳EҹxIŊnK
5&:]vѬd=gA Il ~SDikD՛JVxF}*DOc;rjiX-濌(c伮wlδQ{ծ6wno._nm4{@azJr:.ҫmK%re٢/W|=SIhN󊢉.fB,wdY;ɗFQNBvY+9~R3HEC4^eM6N\L>|Ӵ#؈/ryr9KD"k|?&o?54#f]Wh68[4PdL͎AhtÒ돾{ҫXVeƚ	S׺
[=/5N-Sh%f߃'wtrsgY][5qjc
m|>!p'J_$Ysr}T edٌ]$l8jn4&;{[-/j~gحLH~mɧ j[&s-:m³=m2.Gl@ڰBۃ9Z{b6<tԂMɇEronŔS8ޙj.鯧/"!HaOF%cO܎>j{$:-ܻ3ڨ/ri7Hu2i
W5PWӤ0*}wL:35U)J]u?y"臒s(1f贵Hu ?F#`	y%y/]7#Ki-)Ǒèxqʼl,MxՌc%=?3˅7#}GD)
K/zĨQo-eh<ww?9q tO2^WJ9'w
}*Vx:h`kQk\gED؜4|Zǭ;9swj^,.}7Y٭=~4o^{T*JiKΤp$@}vu7LF%We9^%EfE-OeF߯ڵa
0K:r39ͦ>\`aN]X])/ƒ!y_BIZY_ʼeoxY^I+v+Вg_E=\m6)mbY]aᏘ0Kj<_}?h^5^{ZIe!~>8gHQ*ه'OO!aii}74#F\:K+FCєHj3j(1g莍StMiS7 !~8ΩͲ?a1	2ywǹvN'[+L<;w=nk]Ӈo'&?+cwMA뫲ۏ	
p+l=Fckl)o[qCv0
u*ápti7-k4-4uq mG6wxOa(e\Aj$lCrʾ9Y6'(v	<}O2&EԢ　6ܦa6qF_~2+.&p}k
1԰;zQSCq慗Nr	-z,L1S\:,K?vpog-\Qnfk)u_Ce!i;~-3md\q܋XTSПK欣	XRHu$rɞ	qJLlyl`\{Ww0}iL|cGQKjܰ5>_R듓zc!0tR!`>[I"p'D%{i渽:G>I4mދtIksWٮZ4\K^
EхlIdugG`nWWI6嗕OkWb(|j/U~DwWڄ8^htC?nyN>HOz?l8ص^) 9㇡0ƻb%k|l9`G!qLoyى?7JEv6\JٵQs1e.ֳ,/s~G<{*ǹ5р!jJݏtHB7`ˀ.SRď-< +}3ጰ0O%ԥ.aS	A+w`ec?*pےUW &)d$$$-
ΔݲqvWNY}?9MyH^ßS=R!儾M.Yv,` -Om`~EDV]x 	@4	TkIml>@2;Tּk&s5#g9wW}5\/Z/98DѸ,1YҫDcGA~46LN.s|kZ
skZ޿@v)<Q)#cQcGErj! M)(p;2g%ocsNNkHz'  k`R>rV~`qI\>CkK	-ӧ޼/k{!cxOYu0bkޭq>
(3'ʖ^bٮ79">cZvLphA_R?Wf09Loee}`mlwYm 7pu0fqQ|}ڠ[`<OR *Q)`rU8i}/9Z4¾ 8
du,9
D;[U~9A{a"_g
&F57UD5582l˩1D3غEt``9ɲVt;n(IKveR[*䏻wǘX2{;|Z[;[t
l
i<79=v>LϚLI$(M>c/KeuGṪ5*BtgZ
62ޠW%,z-fzo	)"{$O_EGӚ;<j;C!}oc\U7PSԥ@})V?cK,_M/nvW.;oTPDbw ّF>"xJ-4	t 
M'|Ok%;v 64)qj!s'13~3>Ab` S1ΠWyOE3$rd
gU-&}}TJI5϶2kUx)G矀(^Q0(MURz{$^"r\&k@@C	rO}aW%恔sn!Wݮ]25i:0ʥ &	?6wn~E#HA㱮OG,nA.ſRsCAfֱݛ#3ORwnĢŜ),DUEEMJ`*d.pмi_w[0 (yQCȔCtCϲM	Yύ7s"G	f?
	,"ެ%xj4 }!Xl vY6U"Yw:#hv#IZLeKT(єeN6/?>\mEKZei@gJZGɤ2}Ӟ+?k{	|505||FIb.s#uAU`HYW22,uCRrF##}qW$ZZ\D7qeh:oh|B{' L>]ΦZII~v}B+*V?n2oAp^kkyU
`Pp
sJчƪݮZzڅSJ"ƮҶ\LwUG{ 
<ɖ,DIKUd	.QZcOU;s<UН17nRSD$^g8e{ŝ/.W*LϵUdz v#K:Ywvr̃qe[~Sۃ}0ˀ}<} ٶb*0.ҖYR2*>1d?_ 7|.د&aVM ue_.'<K).}Jx̓ 	bJn<(1B1}2 ИF+8ֆ:.B[n$`fsE{ޘIM*=.[1;v26? MZ^.z+N%	I)èX"y
Sw=»"zZx$p,MEgO{hSfObN[HtVaw˔bJ-Ǌ&j0ƿԮGW*&,ExS_d%#ZE5Ӥ^a=tIm~ܐu#f}W rv6ʶyyBKx(桻HNcQ-2q`cogS-+ dNOX0#xj[ㅈy諺m}yD:G%uӐ16P=ر9Ov`9Gd94RjKR|ضިx~
oLf\9>
RJjk*+qHx'\V'	qjiD]k6ذj6K̶e.vΥ#oHLzWt`;z4we_!	* Mi[J]|!e5yVh
.eRIEqR"qM^Y׈ד5#Nz(mf,7
;jIDslT̖I@/`jIN5v
z@zzKq`HXܻ':8vdB^6D*XHJ;EuCnH.pU&ŊvL˄.;Kq,)i1^nIbZiW4FF(
5A33:h<3_!\'\ҹlcopvԊVhPR6$ޮQ۱{=?.W.p4\1<X&^ @ܼwMYg#x"v`CeaF,=.<a#%qe{|hsHh,WGKe_7rrd'=ZL1CH%@!GK?ISMA]|j\Sv63܊۫
 Iސ"z}7*쐮+L9Qky_y_9^~J\N@u(O1뿯O4q
͈S"s5,+R)U~ *:,L|
}'
Yu&;CM~7(5{_XAXgig޴Rū80,D#
XmO>l/?1~Ky]Aac胲>sv$-8hW.!\gT1<.q(2	XByի}5 ^e2W^Q7#dv%*>Ŏs>?U^
 'v!}5g y	j]SSEɯ*UBѾpI.PĮLT['3Tc$v2K+FLg-nz0KS}0{NQ	s;%ۋ[-pޑ ړ5:{H
"Xg7_YYoSM-""$sљD-ɰK 0ӾH``Ol6D;Wi7/!Kb˗@u:F"=uUQxÿ?Ne+}<i[	仰Ca%!A[	8WXRX*w&s	O(}.h+ ݗjbꮓu\vjHχ8

?	êχG
kpXP^Ej,l:Ww5{(X}x:d"? Z͗(`|AuNi=Pl=.PdPrh$VPȕӻdXȡ ]c~_ṁExܵor xAGjW,΄!ʀf'$n8PM\ۅ90dlHl7&& ?)d6>W_
#FE.fk
5PGz)/;l4}!5oxs;?21#|&ڹ7ۨzZkk}AȲFhl=-8g-ֺ	fTf]w`sԚgԐ+(]#}!0fd@nE"řtp^h*]n	=-utݺrӎg^8"9 V+:axmDcsc~׾{DI0
0˵oۧ	rWH
|cMW>XC+csμY*緄r"²U^V?91Mm%k=<3lƎXW?XKC8ѿW4l&\cbgK19YN&:CEI¾o;?qFF25GS췿jk WJ*$Z`-fuET?g!}֦@6bVD,e?hkI-3RI~Gz[H*0DIuڕ썼OwDNf (ú::^D\a\M-#v 5H89~"c#mNch,(!ݳ##CV#%חJh7
ϊ-]nrg/J>$A}HGS>2O!y̱X[Q8!ܕzzP{/Y#" ڃ^vf5;2}+#+a0Ր.oPStLnǪtkfؔzK9)FsVOly-5j%70:I#
Dv4"LuW֢n
AQkᆞ1&JeWEӜqVEfv %n&qs&l̅YueLߡZ=)#D}ن;5)=;a]K}?H_VFE'v2M@V>EӃ:׵HΥb)ivd+d{D@B`Z/RvoN!Y*>#>D RHFEO@3ؕǗ8ݲn;bOoYZqp`RUvNui"
} s? M9٣ANuС._A/*[I56#(OE役/5+C|bI4?ئI^5\,وA38MqU3{#[ϲC<鬏QC<#]n)1!2tZmV=*ms"@^/{FBȚ)Ғs?hn!<`Jpy*=tA]mxH^mZhK~XE@2QRs0@G[e
2]NU5?'y(Ŏ]
0-{=$@۫c6\}`$)5=0!@]s[kAW[_v\b7!27SV>n`=,>?1_rÓ.."83z#ŚBoZs8'N@%71<Lt{+1zkFi\Ug/ Mau5ԑ5!Rbf
 ͦM]oðeVgk9R-
I`h	ޅK?*fOxi,C3/XJ"q@>
2Y>r9o
nd4M/zS}m3j*~mȒXZRhq16g!J2!0hTWEN}gǾgбF|8]釃G
QE7?Sr$2boL!(ÑvW?S
pbQ\9=VkdNnjʽG
j[s7g A(gx.G6wb}IKRsc+Ifi)p渋=eixyXBɳl{/'yB_f£?r9pc~샗Qyxh$)A3yHL8Bޱ6
gJn;'LW>Se ,BzSF"`@V
r#?[;W<t]#uR(+6V♱W+fXԤV@D3B!iXxM,v>0KܢN7V:Oҿ®\&`UJm7[^O_<B"\  8Mpf7E|8LӲ"D*lje,m,_
4k'Uf&lñU''* 1`,WtF!:`mLG2s
l,#FAnomU|*iHPO~T!Ԕ[-olUaE OY5d8KnVs}Mƅw߈q6w'B]f%h
@PCZȟ8ns~q&Ð5\l󨙭<PȊ^a)]V'W۲(%ufh֞gBuIc|5˺9;Yu5zwl=i\H_IR\]vTlJ63B$']KeC$`DQ2<bR|n,5SiC:Iؐ4b8//hcLeoUETEˏ|PPj-9͏cKXN'jirB˲pQXb.j  PaA %R[SS
%G1V˱Χ
0_[d,ԥ}@B]=^C*wU{L|dPdv[,>AT,d5o%fA8vϑueWLM!Por6#0݉؝\P3{2WlQz!RĿ-ojeC̤v;yQ|</I> *aM9y>QŝU¾gc;h\"]N_)Nfp{1R6RfQ=,`v$-x0vs'[Jy;پs%J`%~yhA>GEM耄T6_x	ucXr΋#)qal8RèG7k0d^@;Zcӌ1U0T󔇋J3>5Y3BWaI<& gzTZN*g'6:
Tx[~%\-MT)KsOA$+!a.L/IPPgdϏIv0hz҂sISg	<vtt׿MϱݕH7CJ'(GeDխ'g`"9)'A嵅-[}@o?	S0x	1һz71ў/ۃCYke:OMX~Be͖faPPv#!
1xI(Kp3G0O&%c엔yE)RSEr#p}	GhIG-܂;}(΍Y.BOV(1|8*hxj7r,z(#Vv;bdΕ*
3ީild!obsA[ל/АNk+vjmBNL%O}B!.-Oƶ =2?K<w5t\`UGp:Y
$>
9r>E5No mcӫwSiڤuf2cwwĄpj+$['e7`v;@Tn|ar|fU!vnl뱉umLYPTez/1~<:rm
y%b+{&żu5rJDzwyf{˦',R:Dc;?:\)PoЉjFXB	M(POC^W%__!VVIǽ%ni}Fvi $FjP!S#CuTrB6_57sO@׺;d"	Ǔ؞\Fk0sWS04 t]=6, e5-#/qnOEeVmg-~}2$E*]1G,|%BP&yMlD^ p4SvR#gYqUJ@ux 1 (b?nqQ\:1bUK꾶O֗K[t9cOi[pd"X'LRMɎ4_aQZ_j%鴽=dt`9hNIp	C^;1E+޵3;X=ٶ<7j\x?H,"L'?j8B݇׼kVP)q CO1@D#}QD]X,~=p1.H1rʧi"hyZ;Ԝi0.Q:lWg#u=9G`u+r|sHCr{tz0t"ST_cXh0Dze!M^<`<3
->BT[N(k6o%gQXϐ"GA}jy(5ueZuXR7CP \Dҕ>M򠑠ư9j?DtU'إl[5aWb$Bj͙~ޜ{"9h ?7kehg7DïI5`{ģ7[~ѕ)!Bṉ<,TP"Z2Gv Fڊ-6eV4Gb$R-+?`^q5LCF:,ՉSPj&G$ʣB]u&znߞt@SY)j#9\p,9O;LHd'oϼ?'\މ =x9qym ^&&KЭ+0QxKy``a_!lvU>)a.'->eBf⾶(t (*_gg4f<Psmcr{~13xTmcbjf[o(:k2$$*(P9~Y(X,7Q=[8>ң[SBJ:7_+YʎK``m@4JPLbZ'ضDymƿ<7*=K)wǷ&:^kKn]LZu9#O?7.RsUWGd&|߬"-KQۃ,mi-z%NlRq4/eJ(x
kۘ
$zE/xںw,E`e>*'9Z|ư \6(@, Y3trz4N).\+]z=_jZ~	Ӵ]KcMJG.X׶L( 2B9q!_ơPxscJ3C5USWrdN學Ifi-&yQtbN|ispa;5Bb__%aю:BQը<A~imD,lCl֎uUBU
ǆt_*2m
PfF7TDZ0R4[B*BVE|΄HU6^1(h\nw-4کg4	"^jRlHgfh|Jves͹(:ʺNk#eur+Nֿxo9,x2DId2z_taix;Y*"[~-{
KAe)!^34	?ÔJ~*
s5Ff| 6/9iFjq}efMC<tjxueӨpLg"켓1D4nU,U?`y΢f`XE`7^SJHxŻ6ٞw.1d`Dd0{7A	쯹A$3Ӱ_!
Ѽ5.X`DQ6fH-C
\EñR%%`d.&L|Y[:/5#!s=llsИ7f{EqqT	 g,ILkk+=u'<vWɐ\*#z}K|1i<AR%EkzQCfv,[]	0xuUHhQ&֣%+]g9iퟠXnC4 aDUfmprv
nvzeFCEq\bQi8<Eza`C0ዲ"99=Y}8_zE"4:Eǅp?$twoZO'ym̴zl@:۝!(*8->ex{>l(}[O\T=Y/N2_&@
9һkcWXtޣTP-N2
@ҖUU<(&/ц_dj|e/	 'o~%"
)Kl9
oHDۍPnRjo~t$14\ w {M ma
iw`z>artEW;oƀQp[%L
Pg
&>R٫1l8&mXwW4k
)Nkꁢ
aiZd	HM,A9ZlgD+M| |+@39{r-\VU E"ݹtnEPɸ9Z%3?҈X"L^LMi"! ޣ{t?h 4Gh|!%8k4@jۘt1);{*BŖHU_8vhlfTXdwE:~=eUWǤ_3qg.`_xf	:RHR^_}	0&'x1In+LxPV3\c &nslLݶSe.f P@_Ux	e{"t
ByKD)$ܭ|c'Gg+ɾ;Uz&(pI N<X2H9}_/*ȏ)窾\)`RhpG؆]~t^t_ۼ,gQ`$;ԵQA(ŘyX9ʰ
/QhM1k
S)
_wv+[3B
#=!<OHzɷGctXjhׯ@AMΞ/PӲp4v^Bʓ6i7"Y4KhR{_yC+>?C'cjC$tOD<o1v!IIg6LnT3B2vc|%GK=R}/?k?2}*9Ơ!ܙgiΎHf6Uꟿϓ}Y6)TtTSX,'ͻ:K.NɃb\ Qd6H71c	TPͿ,ԥO2\:R9lEsp8Ԏw@.us7ȵG$/ +8^ۯWщ=n< 7uFH'W.^{+x
{&T򷺂X*,1#F:a.NA&tLJaƐZ|ZdTZ6/ ݅&ć
R&O2KF
tabB
V%j(:Fk*2WqsIikeQqb$+0	pj?|.6@\n2~9BT0DT= {޶I.&{h<h):S^Syn5FIǷD\7ufz008?xZ)56%0gâj
rcK)ti|tqAlC'ִܬHq(dۀ;za߮9ۘ{PLŲHq~J2h7ҼPδ`{F|1/sԒ@~"ૣ_Pd6Ed+LV;[Xr6꾴ͦ͟4d$_iu>	*B
=w	K{_3QńMΰ^a6ދbN|g39[=ÇARCdN2
Dh&'vaHM(z܍; hyJWxYq\1
|~LOQpZHg"m@!kqSտ4r
ixs8,Dfy-]&i	|^R&52XT:5>he=f|]Jzp_Uudκ9+	"-"ztj\t>x$s*$δO/&$EN
	\N<kj?k1Ehh8gqga'qqq7d,Zڢi2.k{F{VgxGcM$6UM7Voŭi@B>nT`]AY%E	kslOt4
HF7,̼7#+%փhn(acIsM4r!XW0ɶL@_ܪ>_Y!zιU3O
[P&h	i@/2΁1qSs)n⻊1u0xoLlʝOEjx
QUrYc{5VT5wNJ`V3e9@- M;@T	ϐ߬<T;B*;S4tM3sOTJWMp	^M DV#۟sSvN	<mUHSu(.ѫT-H%Y+;n9 ^'s46UY2:k-ޛM[ec[Ѐɘ_Y;B-}' W,.v"<Drp2)ջj\er{3U@(9sbߓF%I}
33@OOڔTCeA
 @Eڴ{ݹpS,%(AP,KBG6/l-N]XASnضL⎴hY<O->B.xl6~rFYA6bZr7k:A#Ќ8Nb%THQh.;R,vE,\ͫQx?x葊~ GcDN。Yn"H#yI
jОM枼-wP]b<@ҦoT
;Jl̬#%#]۩EN'_	bG+fc6@{
j)͹䉢VQB0hASvo;u'j&aBWO`g+P1yFzk@rHz!>kt-.P	2wWb=9Ӟ$vRfqVbJITeb\Y-2ž\ci0\
A*6BJb1R#;S= &|^_bUCqHZatc1e%*PAѾeA(ucRgW;#;(^ûXV@GC5%=<g9z!AD?H<h}=jD<bUC1LӾp YIB:k f($>Oϕlh@S>qfcʯ=+u
wv7~Df]2r}!oٔ!"oL<H.7s7|GUKH3u-EDMA̢iuWEng}F=ȟ~[QUH$S<vlą+ G,!)tMV6@G6#i> +ͅg0Q=MhqĿIOQ_#A$
h]1ȬO.~GKfwVo)K;sM>\"0K D1Xvo$»CL-׽$wc"}L2Rr^w\ەh5\0. a(>	Zwrz撲
1QM<_ШD9^]v ԍԛf!.0R-q$ճA=k}I]mC5<l1T6|,-i#>ˌᯏ~Q>QO2*3GG/.ˊD0ߤ"ߥ՘?X=ECXX!{[˧ǻH-Q.TNM|IFm[mUh~-`evu8BH68rd(aʺi--6P܉uYutzwW]4:<9 	Qx:}ݚ8Ҟcv.P2|oDl`$bƏ4dRb/%5
V˵Qs&Cn؂ω+z2!θd E}x@"Yۿ2~&=A[خH}ۄ(ym8*PSA>S*N'S:A,.r[#s;.WȒ1FgpB'mA31u33bH*;_cg>FONT~VO>Q[FsQ	6҂?j|/~/ͯd/3˘
[K-[C۲WGj1)DsqbR aWK3CCE<TNrs1j{\-iUdDYHC}X=@a'OAҶ]f|bIC@=@K-$) kgVgN=s bUo;=u7jYtB35
	'GVY;,Nigm%˃RMރ7o $7Ҕ0s/E
.{AH
P?"v!a;IjuNpTF	fubNw
-Jyo+(T9NÕx=;R*%|
4kEV9#/=](9!*z.aw|bn(՘? ַ2M" ^ul̦ "鼹0pSv]/~ACy+~WXxﭮr9'6{ %k-DёByQliP	6tNu+n~槠(y̎LK7W.ZFN4khC^#.E}lՌߧ/	2`+祾&.`̀K[#z׌9()UGP}rE;Z9JHȸ
g˶	MG;FXrA;
˦S70	x߮'S;#7Os
颇̏/_Y|iLXmRT}rvbU;v& SJb^L3Oɓ0
%+m[9	bIaU
i({^3Sm~?kqϔ#p^A7 	Dd+8n @lU2I\f+;'Y8;EhSZxjl5ciSFG W5Ol^"?I7d|Ȱ뵗IAjyW`uۘ
'|[ASDd
:mNdq0TR[|*Ǒ@w NwN0]	^3 VIGѺJE
jpv[N?.K=烏{M-zr1H M'Dh:%pScj/1o395)OOa<DџbxnZFnC{ԙQȖ<)@NS?oyXƇ ~̦ˠ]wFaovgRۺh{m*F?vQu{XÑxCvW#ղUY)a#gm,>m:e56
S\tWY5-L s	5ҼI#R+|)6	Iɤ'Fy[PfZ*D	XIb4\(܎ʚ?ϦP&[xKρZ|6KY}T-wrRrdP9-);ꢍ: I{eo&G"{5
oށjT~{ [.u$
\!Dq_	0h
x 0br%^D=AL&TgZS	NXt1!lj̇>VŒ kaFEHvE::/t˚)NZa0`yG5)Ii=K-;x{
L6ynԘ*4QkE$CLjB^G	&}RԐw&x/>+A
.(,7ҜW Ö>G9?%:$ʃBfC:-b:P.w%x*J~1Ȩ}EP:g2gw
tCn6a|]}jkW`ZsAWp<C۲͡~ilb0pA=
@QC
;.ˋ47iJ7
>/;"4GQбLqa[	+TC[<'Ӯld@mک\#c^!fІpUBes&X>
Wl-s$rn|UX_v$
UJ__'o=FV,Tc*;++=jwo
օhul܁LtL;0_ku2kD-Q2͓ +5#k[/\P4#cW5
7IFXCww^ȀUYm_kY
#g<K0:CK;LeO@3} mm^ )I΍X^:c>5w|A魗b{F?iՀH+.=`2(h/ҔoʞtsN-(sہYM[ 9۶Ҷa}}YRϔp(dNV>z"c{~SͼH+5gS +QB=TIk+bG܉#\L ˣqthRgh85ŧ'~ton(k&ybȒeW1X[+x`1)nZyp"	ŉ7:;!`uv %BP|y=tުaғjp$	R.܉lqv݈j-ʴeC,\]L䊷n'6N4lnAMfH)I` yQ
!*
p齒z;y~?ߤxд&Xz}@}H
6j-A!RbR

e$GI*1eߔĽ3X]nRϺ|D]GL僧j[\'+
l2#kuMߡ-xMDHpv)̶(<a	?G-:k,MKr+DOЉ]mb5ZȘĞ}xdXը)uHGΎT)x;C6H9y}K(pS%0ZXκx)'#nS2u!>}ƞX1/X?f{] __@#f-FBA=l0IuqaiMƻ+%a}Tڶe~T
wVoi9Hd{=f|Xx|dts;,|
K\z]?_.e<_ME


Z^9Jzlh-	X(o}:fzn65/I*i>45yx<$/!(x5s{j\EC=yylfQV&̘k/iWpquqP3(s~z,,.+#F\Wfv鐼
Y=c94&6QP6*IwR0؅YJRP ;G	mrkp4dΨT5rX.a:T;{<hqN]|[G +) HC`ݩh9Q[j-~Uͭ>0?> \
\ce7h@:T#=T@B&7ez4@⭄Ge.·@['ry%~(X(ܹ-{9#>̏ eJcԋڊ]>e%sEu>7<geN[eʪՃfATwX{R#'`:#YCeBN£=l>'EomK״)wʐpAY %P|+O4Y$3uԙ
υ|A`g]z
>4ߦ2HPj$d/_	hx#Jɤ{Ŭ
&#nu[W٥!L^eIzZ9fɈwuۯoXtFD="/e62K^$Kj1ǻ^]f3\+lXBձCLPlZ{2	6<a-ce-k#]?7Wb5nT,p@WݨMa2uےͼLJɝd+
Ixa Rzl
cϛT
߰
ٚodF,gudlAB<'R?tl|,:SO˺jv%CעyIDR$TW; X)AN:>w	[>m(̾z%BzH9~ȼݜ/sǓL qV,
"o>>띭л3$fih`/al=|ُ,')*׍IQfį]t˚`ƜB@ĪkѪ**m|Oa);>zDFXU5>ZZya{Ãwfխ 0b#A
l1(_x469v CM$6qfWilGSW_}x5Ki#+~B+\S[Xl8\؝9Wx|tDsҌ䠛}ى@shW3'/^jiBIU-#X`8(ܮ!I9+Y^G)U&H4
e6`˛2Y'ѡ(ƍqUA%O9JEcs5N9fhPAvҼrQeƺւZ^2X#Ȼ	Us_ǁ(Ȧ[gIƝx"lv/
<,":N:`8u50}QA?2 k>^4L|	@i+kD~G)}\]t~lnaUxIR$ڴPzqd̆t]tfV<Q#qf5>tNGN]dI:K[ִFs-
?a]<$("Q$3`#fwd37=#.Ue>v
x3P~xW+ {$o@wۦ0Qh{J683 =G-\@q,!Ĥi]I#`E+gU6R:,W>bl.2"
KСJ!ppnӘQ	@IE5z-)]
Q,t+|^\0~;c6g "L  ʷ\c~6?oE[rr^3n~[R\8	bBE`ubJ1pNNh6zWkV	QYi_ ޓjd@lhr+P'!$\^i>ldWLSI7\0:Dh3kv% 6RXcw޺zI;4ԏl'oJ~{&.$*0-'!~ee%l;1)c/.x$BS+Кkf*O/j<J٪}mZpcٗſ:}G^Рvl%t)ۏ"]2E*{yJI{SoTqD.
PBYh&	DMXP{ZuE3E_tPD\<*atmjȱA9q&A,%ŮxGzp|a+ߴ#E
\^7%moa.P1`L8 )}"̀踸@
/Ŭ7F=zrw W3E)ćKyg{-ߎ֧OsK <d6K7E7><!	lƝ4+~^P3Kw!  6WJ#wU7e'?={;8٦_6w}Nd4	0
|^tnUR	<n'i\*,u#jT,3T<$c?&_BB{\ .fs1:^峏hG~
z
hJ@QW]Fnc!yͯDS*p=洩ӟ _1-}nCp 7=3nɭ#kb܀]>MSF,oc:$ /8#ه;?CyIϬΰ=ĸt!Jh%Ê֝=+b;Ż(vLq!i^	|Uѯ#c96H݉*|TK\r^rZ;GVc!8^f hbN<	]#쪑&t|=]xDİ#׮}'m~lL>upQ	FD|1`BcdҊ	]ہ\fdٷ42glUwZ]\+} N%=uEDt<?Ke׭L~6+/vkII,HQ[ ~2
{+苟CeQQĝ%ZOT?SG~/߀H,b4o,|P+]9
)<a[Z4^{8;)N_DMBTfU%sv3mV;`|[3_Oi~s!0'35"H$|\H5py8ی#qѾwgF@fn["OBl\_JܓX*6}9C
G#{&1-SuV𢬖"<_(~e^!^D#{]4cEeA=XPq윣!UA،=Fu5O1>6os8hȟA5	-#E(1|!Ͷ<'QCi8vJJ:쒚Pnf#i
{Kר
<| qqf.^fy7=!6i
6NfLX
jwf3GSkd$Ջ.Il}Mdwv2屼IA-XKh̅dқ7z*rir5nG}0ُpo{x[;oJ)Mp>˷j@#
񌯩ؿ7qq XAd3zQii	^(o7Ps~4I@=T.y+TՓQ2ܪw<A6
6>*.2I%,ISurIBHD<Qi:Dgz'T{-WԿh_"24&N]c:q
TD~<%{ڔAJM|jvt:_,-|a0>ʣu*"
~pDes[lDkUd;&ȗO Sғ\ރ~( =W7fk-^	+ȧ
1St(rҁ,;٪2Ml2.B66QIl`>1fB`&)zp2%ӧwvySt(85Y[ΞO~H
ԋd1J0|ۖxr.ѳ\X;ms}zb#.:'v4{Fɢ `X%r;h!qqbn_m s~hĝ1&&~z'>gň|LX ͇rb,{ᖟ
>R%sv"]^lo-Փ<Bt 5ăM	[6Dn CMSisTЭLG_~+EQvżּ7LYEPʱKO_7W!b@ŷc)Ӈ ̏-U g:}9kᩆ9p4qdI[uESfEǃ{ 2#	{~zEE{.5Ho;< ia<j$,*Pq"CDRlv$)8z^P8u2>@uig#}jx:AXU鯗`nc[w Y8Ĥ:ӥy'rre~Ġ3
RpLc'RkZ2D{u][53dK-"#rǛ2ʎ`vzsgV&aG~oD~bmFZ|"sO+`5dXu93vףU;l%>e.j:ɾO%&(rRhΐu+@8NW(6?.{PSsLJƹ?#W+
ؓ=.lZL:/֙{;]gOLb%a.݋"AlQGFh(t&O84TcgCgK=KPfa92p9&G̽U7O|x=d|Ό/$λb{W7"D뇈n	qR⥗uЛ2ȎpvI-k'T;"TrۮjŦ:D#
/||~Spo^իhx&sD/b`kJZĸ@3P.
2E_? 
s/ePZ%(ii\5u 8)L;!\A7D8Bއ0xtH6NYgwRX "3.;3y!A- jSQBPƨ=SKo.ءEIPENAba$Ii!ОIAW Jkx>pk	R"b b|n#Ƃ#t!~+z~
@6xl*I*'h.Ƣ
*XU:ҁE3C,Q\?Y9(FFas8$u)Jj(GBBԯUBBpY_p{U-bOeE4|4]&
U]w>1٥_l,F:#ߎ6V̿5ߵ#
`TT]ZV累#^ٌp73*uOrCNg~ϥX|nzP4`x5t_%@['`AG> ,p⏏$ *;4zA~梃
k>12	M'?2gG)6_~>vM󇎴Z!p*qMӞ5G8_áWwLS#T+lȒϻa2B seTqOɶmU(-AVu1>S7y#Vf4b03ډfPɢϧևhaaG.}|'O2u%jtl3
uDToF`,6һ+V ;Cf7'tUz70&|Z8:tk4DBi$W-&CEqYqibnëM.K~!d,j{#8~yD$ m6j^@}ډ;Qʱ;Enj_>0Zr
X$j> 6@%5il9AUv<`Dͮ5p=7}֘16 Nze&TU~^pRb~#P]AQT/ t	 SD#!
p8n[Bu|uk[?cEeEݍ$;YF{m9
.|9xF_sl&N֭]MrI;`0,(T#R>[uNa%,L񿍝Ol2WiՍ&Pktg-_"4ɟc\þ^[_ižx RzC(EG\#tjoIP,[K.iď(ϩQ*ReUmɸѻ +aJmHKzZIXd+u۬uضr{|1ߞ;ALs^E-Vp c51?7a'EI3.=ʵz8D__'U>:b鈛Yx0CJ,T;"Puq)}ɫY:Lydnk>NXaP,FV32M9go}P_?:#e@҄>
RBvJ
X,[b
ZhF
W~\O+rq	GgnZnǿd-p+gmڳdĞa#EJCI@>9`CCZ@p!SAB%mmRT	=.4$CM'cBɔpSptO;g)\TMfwEdA܈0<x
!|[,OU*){in ̂WV]8;20X'
D){TqT~P!ܤaaOJ!AT+qM=mbtďIgPS{땖$T)X`ZA׊ء-4zVB@2ǬȽcD8tOdrgx&f"M\fTދktB|A+)X%IPge栎O$bbcnn&Gh$-I!{8P-o.˶c]=hc
G"ZC
;ů88SQj٘O꺡iKi91li*̳p~HTf8(BmYa=7i7ǑyNP;/Be6L7~HRSC&rbVxL^Aicw7wV9gn؎53v)hÆ-`wMqīeyspԌ,k[;=yQb0]Z|+PpW$sȷe((d,H`^tHGڑYLuц@kg%~K64/@%# h+_mu.H+F<&2Y)2}5Cа֖Nе͸i=x
ȓ}.dG//Dӟq^d4*fv7.3Ӧ[k`CGAcu^3 l	i# 67ë!kwI@	K#+iS׀di'A.쵙rX\.31PƎ\JhsgKy&
gLtyKS/&h]Cמ
S8*.>pO_nn½Qa 3p.\BMijt=LgK[оvkل	y+5K!̈^Ĝ~[ *d1q'E>ߪ"m;eGmpL|jqƫ<T.oSq~"+Ԟ3bj:r_4_K2wK R@bk#@*.2&v%"GO&@Oj,Km/c$A%}
뚌&4~Q\:;Ǻ\SO"'7>DʂX̗3l}`
ܻkVhAO.UpZ
*kA
X_
J$BS 	i8u`UZ~.!Ok[=r,кXA ٖL:2~mbKCW3NrGըnS#`>h<"
&.B%w%Ӂy1_R({~EJ9ߒta	L J}+)ny&p1~?Fh98iT^AªrwBVJ7hox4V7=a rz`g}{mɾFqIGr #J}Fa"}X)
ѡѭ3 ̠t=IUČQwDx!&zU^e>Z91{=L(XpuK*U#hA]*
PfD?a>4&Wi<.C
 $W"]=Bhc&°g Q~3r-sw	h/eӗm
H{* 1BgKUJs.bvd)=)#_Ը7G
=4Oes'Gҥw=ܗI[H[FZERuunl|WPUqlf/5|4U#B( ody8CEZ0a/FFt8\U\;+r|nr&/ A`VGG Ji0bsJ@amS|x~mI_G4Fٷ~40<zxf1oF ]T-KΒ%Z+JZH@A
4a
WCmX&&IfrV}&[ AN/k樅Ϸp٧FbsBզ|]u[yf.bb=ubY܍	a[?MWUk iҍҳږ!2"뼘x<0hZ>&i
d^*shiTN-َ-f\W_S.;~"tezݤ.uJF U{)6}yF`$Hئ ]="|82}5&O$WOMG{'tX,X|:gD)FӇw;8fië(%ܣIW=JR-N$녬yƂV~49^Kiew ?,"_XIcBu>1
tY[^"H9k߼ww (>y&8^j% 	c:W
е6[iNYuђAN吘κݳX79j|35-gb!rR|iӆ *7UyW5h9fHn(Ay3BS=-/YB}gCJ&h˲k;o-$1ṷH "U/c٠0,sD$#?8])o~Yeku$zwwC_ߋ?92Y|
z.pcމC"Vw10k]Sɹ&]
TNjTd40 5;4	a
sEP<OMy[5{Xԭ_QV-kW*%כNuI
=3
W95Y/2ۉi Ԋ(fUR.>|%Զ~Je+.t+!w{xcL5^a4>Ϫ䵻"4/2ntz-m`9)6SK芩}J<4W.b5-z E2L,ۧ0	E;V8iiqU=cr$nO X
 	cDܖx<Бu"zi4n?O[#@U|>-d{P;HA.V]u Dg!Q7X"tܺ^L7|0Yux:ׄr5]ZՊZˑa<2EP'\S$>|s0blo "fvd;c)L\Jm(	*Ų
.)!6Hv ^8
I"YzS^e:x2߱~-k~Gy@H VM]]Bs%R_~ 529r|fCzS(Jp{F뾈s9oܵg5.#1h~m C$2o,-a	H>G6'=}-@3]#O
~QӿӋFqg`#;//yf[t;PhֿB)hrܢԒc/
}5>rXq>BDɰa'dEm3q2	OXN Q@%+ڤ뚸SV\G̛4+7# O0#P4XǼr/	Bd!gp>22so"(G!=y0L2ʡ 	@ۺf[Շ?իgI׉	5ߎ:K}3%<ȴmto
AtjU4u@IxW6_=?Ɏ!H&ꢽq]/+}?`Uuc'uNbolrg8
/7t6Z&/`C_w6'02oN'MZgq9	x6N ]rLlڞBp0q
hjrKI`Yg n#wU|¿ʎcFn{m9́dz-5b$^^֓ +I[~`( wkLOdrqވ1aRH2Zi!}$0ITM'@?#1ܣ6YCǫDlƧ($Xc0kru'\R0%vAiYXʫۥQ8_.PAXt}oHq֋bqi:8z c5<G(׍*T*3seнBB<o,%'OG<E7utc3+OvS,wz\MŖTo<X;0M +`r`E;|p,4@afPn;~aٰ͌Si*4x`Weąf٢AfS\VӌOPߺ0}q=RY\[Q֡	ԱɴAwRVKv'7	^\t6p>Z`A&B>hlb`2_o 6>lstu-$꯹;E;Jvn8!Jot**8zyVpf<$`!%
zŪwxp3σFco΋u)R!E9G`ƜFZУQNi1~6{y'lgL;S,atV!V}P%S}{#>Y䳞n{.f4?;WtEkLjAP<Q0R$wZ
~0[@ǲP "^ھbp!mzӁaTd$ ;"!t!Ouqkɥƻ&r -kZ.F2z!"cP-usѓ']gqSZO"|9{_F9}Vbb~d0iRըQ1Moءb::jȩ:"r/l(ib!ILͪ_b-r
bŔ=/M9ǅإG=\H;=K8(n5*0Oiz0Ml0ק뫛H0"@++WW]TV~#T?jhQ
I}X>XN?gcTYo"V{T6jMb!v	φc[cxhd9k	
VCt4`+KiJvi4#9u}ဒ. zOg	w;U~,M~$.7J9
7+>H$bL5RPbIE/%wCz ?6`**~3Ϸ]e|CN#2%$ظ!b׺3
ꙋsk{aVcnJƙ] at} 6yt'}6,,ӏӃ4ߝ߁erf>@t҈xdt *ژϾұxSu-
ND\n`{
?OӏuM>aoږ	{l	#ӻr
, 9Ags]®El!1\:D.#tp80vJ_l:Y&F~
{p<.KyNd
[J" 8WGBo&.O{jG%߁Nj5>5 a#`F̖nNbIǲbոat9+`3=QײrZ
3hW;(چA
sҵ{i{]Z'hRi6
?6}^%;XM́Uh%VH_aC(FȲE5w*Z35c,'3؊GW+DuH.
qrEwQZR@
:nzznTTo8TˍZҀD
K/}:~^$YQ@Ytbp$2^6tؼAf~?2^]dWs	Az٪o-6%uVP]c 0ؙjuoa 42a}ٳۿEeo
U7Nװ<SSքyoAkH]EFZwRf3lɬA@%%FCĸ5S۳ z
_5{pĂwdt:*"=4uG+SE9#TcBS @P~<iO-*1F[Pyu;IݘaaЅĆ[d>!!mU26RZV#4*XlYfu׽)5HKWNy"m9L:KOKOO8sP]q?&N5n/ᷢn?w4a+rK=[j~c[f=OH<qǬՖ%.҈pDgx'oADNS5 h+$XgST޶uEѩ>
[ϹA/LX/ύA'Ήɒa龨i~7dౡ6D.jD|?T5fJ*2Q8qU''m`TDGh_GoEk7pߥ>EjiƨDWUO] *!4 Q'@naTm&l;7\81Tt Ԭ	x
S2gUSAl#G'No."rK<!$~}IuF8fGBp]n\P+|h~s^VNdMx.PcߜSV*R${2P.fS$hy8zFU;0Zh)wf U	(`{FެvH00!h]8%}II"^T?db;)N2ZwA+.	7@< e.[ƺ@a7.ێ|pý# m#շaGa]9͚}Dj-,RD 4%^ npV 5s+T
BH6I]1Syf3ZN8Hds'bc~
쉌zs>D&Z&/X^HIUcΤF|KTդ)94MW6*?߮w
_7fwcUSq4^$l wggX "ԗM~j!N3pD7hRNsHB-MX\^̬.jC0NnlV- )Ax6kF9"zlRW*7a㔄ޅ+LUWøuM.a^&BVN5P3a|<Q8*oi*7qjX7jK֓찠Զ׿[X7$n!5<_AXR&_\)1߱O
btbQr=N12)E2du Rds)|Ō2ԍ+9{y`CR%?O/`oȲ&z"-ABcT3=^lt}{*	˩{Xh`Srq=Ըewna# 125](߿'Զۊa4T`Cz!_=׊BV}"܁nwS_⧱ZckӼ(83;w럥D#o豱]CARD[m#	qG\K:yOA/?΄;^gC P)`YkЎ3b5)D|<6$"jX\ra	!/wΙ\.I+9͸D[2L'2J!]
XWclVE[=	̓J,`y4uFʖyu=_ <=7nG@&y7]+3'0_WY7􊁩-b1a	+B%-N+ٯFXzwX}fxR<HnnV?,U4{! ^Me#RD`DӬ%ao:>:yL]=wD?,d
wp=E=LŒN.HCB-硻ңӴ<b&꾶iai}0YU.3)bNA
y{%
1եE%
DXP
HVfu,lsU{!_;cܕ(oN9h?R0ҍfs3}5?5T0.S,)Ad4sZ8mgRsבNG硆I{Hꃥv1`E:bT^j;Gل軆*?isC32`(bCkbX֟1.ޒgQ 09M鰮a̰( #WicPkv:\p[y^#g|c]H$@i\M5#Tz#QOHߙ*0NPIO|{y<sgoΫX3fOyhԅܫ쨽 (R O۠U.Y60)|[M7?~F$h,@,z5":UByGga$}*/"C.46ޘ{TzW\`q_)+8]('sƞCX$U~pje)3xXm3A$z j4Pf5;hâO鰘,e^8Ǚt
>˄&QHaWPL%
P^dOw0aKI蛍y(dhXh]ۦ1/INZ|	Dy宬V /.t*3<}"E-і5Lk^h2KNar~~G^ `h	Yտm+BizPU)bs^5}I]G#-tT[WI251e&^}?!
̑`F1bZt=8| }3> c?NZ~>s#.̹?=;<=$h*=3bnBYetTMda-RWvaD*NwQՇ5"],K,FrBI66h՟7
U_dViw'9CVU.9gͤx%fU~OA߶1yKJM_F*RTۙl4"L|͵^  
N(o?r|0J:cuF,?5źfvN(AøG!⊈t}jRܱ|}H4;GC;,\C^	p\9g&:-%r^!2	nT풍,#4̣eTAcTA!Tc=K+^ LAVM++6u?	}Ztx?|̵T@
7OLE=PLU7(W&B49\Ҝv8͠䏕amҗ6*qӣ0
UYઙ*M*ZHb茀Abs78
'(h ,24x_`s)m5ޱuC=YgW-Sl"<&G&{;)ϪS#w[e[u@)fQwF?~1`TWҌ\ [8Yc|$j/-	j~\~kPF=6|Q*vnY&m)8/խf_:WʤNEtxs% 6eۂ5+쿇8,F)4pbZ4.UN!%*
gZ!Fq;c'8'Hܤҡ/,E?-Ǉ6Y",f	ȓO@*u|B^(NXŅK"7T8qJz8k|xN/e*(lo] /ezR0%j"-0Ɏ'>Q#M~ZS8TMIx-ZtDy{V?KradUnܷD.-x7:gֽQ9A~{
@LkŐ8@m8YJ"bsm
K>ĭ@꓃=oG_K%&?F oFj0цuInY36Ui;ݮE!A6]MB%î]}t	K_cH;/2vm9+T|5ڀN!PDmLj@>|n%}j=>
ʖ4 Y+7Pm}NQa;LCs_mȿZ$slE]ӯ$v~e0<r~!$ŊclIGELXͫo?à5
AsW[6Uo@#OO~lAE։$L\ϪZUAX]c]Tc ThXeLv #f$JW^=E]*,1J@zW `Z'h"!.7]j#·
FRT\"o,ݓӚ6RBvo\csNy1]i;eTw_;Fa_iNYBAa\2Nh* udӤU6c٢ۀmy{߬GPU8k
Oݳhp>f.z=Er;s7/ȥYKV@M`1b%L~2{*\HཨH-#i1
 H^*:R.3pt0!_n?7 Sś*'y6hu.):Japt5d0I1hQʁBݿ!j[Uu:
ǙCs`WRM}ڳNR6>gG$O	Qafw]*pb	IJ$@u!S:YpTuu;'R)z\$ytaC1	/O6*QdöWC>Tar=Q|GWYZF<LhLFUCw%čdym\xе% `O}ɿs[~9܀t;H/!cQWuH/ tW>ɹs![5[-a<͸IyҦp/ S(74,G*98L:aeCI¼Cw*K>F9.
1|!&'0'W<
9$>shx`wQ/M鈏Ul͟!n8ӪJnW%CZTTg#jj(gȖ@ǤlBibc.$K*hsFN)H|ko#u/Ag&»!XH?9^]R@)@|D8i@^Rq
#
AXU>ˆ?M2Cq՛re2O~7ա޿k'%uq݌ rA'$k$*~)݋vj X)=X?$Fmf 7ޛ7dEeFf	7Pyk#*d9bd[٦g#@q3/w9+5<|mPk`SREk.u[ 3l^zP;eM<F!>Y@w|r'uX=~-@)C"";@f "`)c@XApƊ,̑tِu_ E T\iW")N?I-Xr=[1 "s.Ѯ\(G6"&7 qƔ9ڑZ%\IwTXR#a`ocYS[DS)e,lU$2-i((1<t1EF]+ 3(MfQX:iso&Dǁew OV	{&^B4r`?n{}Ue/cUhOArZdؒ$O;߁	d_f@u^1kAE[NLH$GQhn5\{c>`z}lt]kBGEORn7,Ӱ/Ь<&\5xq&L
{]'k.
_<|XBAz6jXMt,}zth+y3,dL&xh]>ȝ:Wr&$f$b|SxatKPE3#{]X08$-hUND7|k鋚uD̎B6_i9#Y8Rkze_34h4B`V?/@:%[<l˳[V2wX٣?i|N ˯^G(	{0kXl`'y{e|eZ"F娈qIiBx0ˠM~m"C}S]$|<KUMQgۏ8(C֑HsX B,YJYHJ*$:AEre>lmT* orX{%{-#] }DV aȼ(u47k& .%L!p{	rFYr;-nAr h]DLp;
R{(&:=]
&ð]٣"HLBҭԻ5 6Nc}#bE*^ncTxX˲*<{8ۊ,1
O)bVجv"stA!G)<u>"'7SAtr}qWg<'W)z]yaǾ6ֲjL*|TZ@'Q^<)*;w#	=؜Tɤ@eA~qFD* 55&[xv26;ynA
,1,As<.PQ|&=+p]X3sخl[?QN,^Ž٩ކI%l[҉O~j(dNɁ-R-hFE1NcOݴw N'B`K8q]/6_.|'B]
ATUם+:U]`!/2;P'[+%828i8
둎Z^*Skaly*)Dʰi@r/J+Vw!hq1e /I0E>b"+
%)	}O
[[
&PQ%ݿ`Z)165:
O^EJu|N1 G`p߬mQ3cU^nNNZGhëycn-V$ccL:pߛܼ\>'P
D
3Y
 5z"\MS=w|N//A9fNpZ}5%c?otF2H_
q\5[t-
l}&9'vNL5,&%"9`!U5XFa ѪCfp*B5xxptmZ	whMY{R:q:mn$^oÊXyIt>uz)Ib_fiGϱШ	!+Vm+#?اt[
v.5luoA#:	QGB%P҅`	NQVq_(r[9T\w,N&U9LΓĥ=%cIe4JY$.<^>jZ"BpsF[,F
6w;9I-Yҳr&ZNG5se bENbXylA&߬o5ǎeg{tF2qk.Yy+*Fω<RY9vy:>顛uATVG?.M`)ڨgA;S?iT*Y5yaF<?(I#SudA@v=
8Evh /J)m d]-Ϫq+aMNr-ˢA&#d9`/c컡6֟c
lJhlo@sf!+PߜβL&["U38fg9{6ʺ{V.h;AFFW.$d^,"D0dκbnCI.WCө@G:>V9Ifa
f x{Wu.})(RCmoYu/,\ma
01^]d~+ܧ'
"s8e(]^ZHSͷHyW/},^:	Mm?Q6!Mݝm1?ǀK3M* đ\Az6#)z!yLN=|<ǹG|1r<J/Όe2)@iUJjOgfQ?g{vgcT?[*z  Y
Y־`Ѳ榆1\D:V0.nJ)i65bulٓ@d[#|
>e{֩פ𬃟v_c̯y4Ǉ\ެ՝\B+6N(cPvnǴ[]?*
t圧R6<Ɨ7x0yITAHPsڙ;eF ƆS{Jbz]j~/sXM'';$k)G̖CZmM0I9	
*FgyiܔF6Xe!lsI^
Pf7U{Ho#6,=
)
[,5fWKɺbX;f~OkՅd[Ղ,}p"̶`8iz	bb|:@j`-fQ~oϕ$/z.
.*[Cpw9ލ$pt̄N4
]mkx$2nҙ]-~aVIg	J{'hަR;(ra#-HU/J$<F5&GSt^|>#<ɼuvfhs+6ԭѨ̼5X 쇋1O;ʑrϋ飫sj ĬY5QkJMcyQhK+GR,)@lRx?8
ٜ~%_\R{r7׈aHz"<S-Ȝ8uu!=.}qUĪ`P~dzHpȂQ?cwS\2`U4seAPBV>TMx(2$?3=_◒( h⒣a+^A+ڛt*-xh8{59]W@b%
J'@CCGJ=hc,M<t?X)d%,	)eR%A8,pZwd&[πt(%=Ie%՜ȓ:;d/T4#	^>9=OFΩi'VV{)9[j_ʌ+B1]Q扂I{uz:	[ZH(]seu{z,=;sKwoC(x-L8gN6m7#Dg2*}e.#$ßEbBS98ҷY%X|i>k>X<7yc]^"u4RpCJm%+hM`/bbn*SI@
mGv64&}\3QXJ]h}b
o2oi|)l*ԕrhwxOf{
TPBn``BTVia%L
"EKko;XS⪟`DeHFQ^$Uyq#F8U~>+d_T.3uUN@m:HBɣkm*PAM[aM,G$砯3!K'f|
T /NS
ɶ0sA!O~X
M(]&<CT^ Q~c N8zno}t{Hݎk
y}%ԑuzzEx='$׹nw=Fh쵨Λxx7:8K-ScحR_aI7=ٳ;,biOqA\rz}LRqQH~GUD\(icEҫ	/Fv}SEn;BxN ؂[P]C9ER.f_.~,<tQۮNLEaX15ДVݘx[͝UwۧC`g+.Xs@R@>Jzwh5eapiztߋkD7{YjG\汞h(,>'`"1}t\/W/p~'Tۨw(hRz]Y==fs5
UJqނOy?J`!YPRZK(*⨏k{	plpR䳑@NvJŢ7aF v]+]j_(%qdc7@|,lsw'
#,?o
g4\"ʂ.:Zh4#^خ5Iy#@2zf YO0OSfomӒ<jhXEc+8'SE]ga
cÏr%2NJu&%~[&ѩjkmT){AGUɘ#l^3
xfΦب5<q"j?=aiw݊+p$fu7/g$>{iOPxf" 7$Е`x|#p)o_Vrܸ	F2@KPũnK7%{(VxѝVA..q8jUGsC'$*¡U`PGS*(DcNRe 

sx<"pC"w=Լk'\rCi1Ys*+ݲtnxjS^#F) \D`g$8c/vH~8=Ee1޺ rLQ)w^xx4d[X)%
=4LGwjFĴ}UqmFè/X|c	oX鉺op@fgyܲ-
"D׊1ԊdѿPT;7,#5H1:M<>l|"]t&s)ҤTGv
üq٘tnԾ9 #7xLÉ?66!ь]:(WP>]r<#0q<jNEPT2s=xU]EAX3noB`Rbgr;ǉo5౶:~vMMeWDv#,)*
Lc3 L2{L&O YU0ip.^r]yvU* 5IES~pc)vdr޶"jO8Pz?8ݗӞ=6]ʓN#cZyo<I}=:CIh]!Ɨǘ!SgyGSmݚ?ƣ &Bnq1XK
kmsUnA> e>Ze0{jzN4cAhmUsD;8_먺"@.8xhhMuLtǁeLBowoC,[^4ftEwf<S#@J|UDQAK0_W,Mٜ_S)?O0zD^ 6 >%-;UzŀE:(leS9@<e\sM'jU$;HjB@{9hO}ҍ}8#uPl`$5160$6lYt%^9v8>%=vٯo+^(lӈ]_jͻPR	T2HWg3HiR0%)E{1)ȅ\aщU)"m$gJ9q0H_t*R=,Ģ"@Z	O(I<" 8Z6@)n,/_@p(y@<cOd%A_-ifg2XwurU@Y!X٥BQiL|7Jwږ-1BU&M;tBGzNoVn@7ΓT	17RK4deʈ	n}x%4M5\ق\V͙y|'_JA("DUJ+vF~y^
G̗8Z8U^SOe^MbﮥZRA|{<<1mG9mwy8
ogg͙hia2>!:glשf˜VJj(;Y#
svf^t>u=IOV/2@_=q;uWGKJx>~>'9ݵFK쿗ڧ@rfuf>_ZT4rgTDw1@:C5. TnɺSVVNו$V]7nS[N)P*a?/^z>Q0*
>܄
9}S.2m%`핂Dm* w
&O(z>7>-tj)7=rJXw1IТdxD"i=S5f~<SKvxOr!ZzhA;V#<u#e2} 
Q *OO(S5Iמ(Slbru`9yH]TV+c3 Kd135iNi[BDKvrr:6{Ϛy@L(Ʋv0[;2Gi_
j,%SVa?8<˾Vd/
T!,Hzľq$<m~72:h
2x~0B6;qօؽ|O
XtPдRuLĠݐ;pJdQ˝Q9LHSDbyt	w*)|`&m %b̝ ҙ֥$5ӈ<mt0(&;.i(rOMy//;w͗?Z*-FM:y"zD$XģکbYG acΝ:ɩVWڣVO9kT8LCo
6V2d
#=C)9;O<=9s#ijYI7㤐dWY7䙘hxhK @p[<	pAF<'];rE&G\Jb3գ}톊0nƤjMe]d3g&ߨ/EtnEq *V<4ͮsFpwLo2i&h>|m^gx_ p=]UX5]mEE="y$b 4t2ӤE<s v6ϵK!e()W< B|HWnFL'|2(S(2БQHı߂iV];2@R,&tİfv[TzMG˰iKp3Y>
vvc0ģmU.7AR*Bϟ|Pլ|xpVJ !P!6[R.GȵY9g@fy=fC5JYHZ=M JRh#b^f
j˶=]jɹ#mwlS{;IEG&` ui׊e!mmwڞD$K-,~ sOQhԁ3'9pNisa7L>rvGFꎰGim[Ar+<9ĢG5]&Q}r'QDn%7`B8daFJAz]kL%|_c7H.
AZ# onw$@`Z`A곰S\TY Yłl
%><6brQTDW(蛚
EY*B)'V)SlngXW?jhFVXyz!,lQ&SX5y.EhDMISEޞ;4;f`ylkVV*c4Q掑sQ!'Q>azq40Bb2f$,ڮn˺]m閷JJӆ}QJ Q`$wst[%2'hhj;tFL#)+Ln4TI4}E*[-+&mX7R~òwD7c1tRiUꀂűnNΖ	m>ʊf@NŌu !1tV:e+z'JS"p(/4F`rdmY#"<^g8-
3Ʋ>PZ SE[߇
XY)V/괞ȡtu5JkZ|funE%cc2)
z@i jsxP+d/aZJ+U7sh{h	9Xʞ2DP>/½Y4 8?SS_S+*jF%#JZY|HE.ZO6(x±_uؠc_Et:K
Kjq5{ 'ViwQ:KAߏRM[V@Ji>rmШcYUdz(9 5¶w!{\/m΃W5鹅{Z~5Y	$f
 5PaJ0`x(Zhi82o߻v@H}*ňZ2zjAFtt] D9܆E")}KZDTe62k\6T.t_!cB}q4 ^xKSw.K[$rp`9_EGHk{*=Tձ3]AКm`MN؞jHܮ4w[ϣ&]:aSN׈/f|i0>+S^n
ԹKS5R/ˢt~Kg@A(,A=QU%&Okv}*'a7eQo_׃V[R_emzY[1ˁ>yG-5L8B=']vO֋#:>PШ
ºF=:E|
[f,|:Rw*qQq'
ɽJP!adX*X.uHH pwE3Wz\,ADo.f2V!R2-ԛ',1Y5AƑJw<Cuځv16|{nЁmHglNtFxcIM|MoMjj=31^}&  E;-!t?˖*vw=lp2FGb=cxbF=,eҐ22S+ŵ\.\GPY͆4Zѱks-R ]zƢzAn <$ki^`%l
#HJ~Md߸xXg|~yZB\M,1D톂:8P	~"p+J\f7@w@_K))fu̜}r@Y"uia棳
W9$ġ90/dE!٧F(%YK?TzL*{Jp&Woۥ,`)uܲDR:WZx/r)MD;0@>T @2/טYȵ)g2%y*.H%p^РB'v u-bLZ4\.,Ϗ7^:7]ci[R 9!I6Y4&@^lG<B֞w(
Yr`v][!O׊NvOF`5i͒zl~u8xEOSwׄLc]=Iu2!4NaTƅd~Y\`Wy)]j8.}Q7ۍå2BaK98{ZЪKQQRd1>D&Q|?8וnwx^pFm7RݫL=zR
m(wJܟ}ƖJD1ى D$4_WR[Qi52yK6JرU#q{J|.|3s	0Va>>PSYF9!`*@+44I<<TRqE(ww>,K.p!fZ1w
8ZydBUK"]hNqvqt	gHcg|H z@^vgKΛ`ߩ(E,L#
EHUsft>41PFaʲV:kcXD;n4^CR :V{	0Z
1wzfB-2M^/{Bѐ?
'm+F))%q1ű`.4S;;ᔦDD&O,'r J'd(:?1ltd'vx)nK)kKaЈ"9'4(2-]C \QGkyOhy!CxuRɑBu~)u!6)TA'9`mWnqO l۪4jCWB7 g%*~{H@^#`	ƛP
m)'Ld]Eԩ	SX'.*',Ww9YĥQa6Ɵ_ `u@[m EXRc]*PS-멞)pWp]A(E+֜ǠoL(J@",RZ\.~M2\m2\hy^mݸC|Cn8+^pSMG6-'S\Mo[W?y䠽^AgH"'"d#x(ۤk9uu,XΊex?*vk9)dӀ{ fKU1֪YeA146Je?j·:*ICBYȼo;4QBnP(=d7 _hb
X!
ÊC!wr0!qqUX/Za8*zMF8<)zTC%9,~IO햖/cٶtI/@R&KĹ%nh׎pc@Z1CeHhSEk|^xʫ-~k0Jb]ɢDݹ
;r`J6z
b7ŮRI&>yɈ*V q.v`^GyI"Qeg'&ƉiyY8cC-?-X<(P^h	N2wT*ۖ%j)Ki?[w9c"6랠 ^3xw|Y\4J2ZT?W"~Pv.&&ڛN1èf̂У -^æNt'V^p.$Jo2(AN.psc&ۃOQsj[Л	xh,@"h20(P>HO:=p񤱳xRf$A6RM29kߣ<bEѠSF,$Ba\
W0䋬K99dF%{ۇ:at!tT>psx<-wд .ѭ!2;kM]Jt&򁛀9&&T]^|~!#\Bw=g]lW9*)ԠKKr
=ǆN"5s滋g$(/	.HCר@ަ?qp_qL
ɀqnP{IױcXLX'IgBE@ߖT18x}0(*D+OzK4˂׫di4aUcU%gX4Ergdr8 pɪМ82l^js`APT%ézm;u&j,լH!GqƤRD#G@Vsw8fwpzZ$CA3߃CO*
*^Y#<aa`b8zc%D ݢ]q@K 0&	:Mi	?]%&hCbB\Ͱ3#-y?AE&L2H|i$`JAo^>۽3D~dh*^h7oP'z; ĥ`0uKl%`_kc?ʎ$65[u4GNɎ^wnFŜQ(LJЭ)y"I3&lfR@fc/sW0d8zӈ{,,x=q8aʇK%}m!OT^.6
LR7oX /_P {ԣGozuDt<<qX\m7Uk}!<ݳ$C:
WkNvh5=run [ROr  9Lc40+-7ӱX'zc x-hëWKnSwYT1F+8Ma_+|OF/~YƦ7v1WxT"3"Z3ߡC¬/1 urTHGp/
tǯ F!5;ad-sͣQ	X
8BrĖ#%)L<dB4r;5ܛNak8ˆo|~>q=09P/3OH}v˖lW	⡺әN94]@m sר'a*hvcͺә]ӣ0#4WN0Aa V۪%!<\7(&ŀTݭ)bҁaܱMut68	Os|Mذ11f4y
V#]RuO8O,`.}	1KI)J]<9yՒ}5͵6k &T{z";+]>RİHdym:|U5rgM+޻U1
%bSʖ(ȊV1D/4ʣjQ\i7?kc!
ckC7#TlJ
Ì)Y?P5y~o]ߙJi:f
EjK{|kBtX*	-rxX[eܻs ,P-/um(E	2r}k.˧Hݢ-4XI6d+VA"+5u+an4IZ[o\7jt硭'
ZMt8:R%<y Dء-^|
^p/3sȍc\ʲpee9G[HJ<P}FT6Yt?>-P~8ZfD23[x}/M!1Boh~
]CA_Ty%#͠c"u\G\cƐbcQE)xx! y>mjv?>xvQ {D&VMx3+XB6>Y9|&Z{+t^lBK<nȘ#	4h?g|ȭ+.?i2]ԏĂN~[v^]6o_GE9"nF=F!ʱ{&/wK2I\
e]yo
(jb-	.M2a/)xKJԂO2M׼<raiJV\KBvi! ^l
J՝&vV>|g^tN6­b
>n0;ǏroB/z
̰y\+wbއ=1p=a|8cHHk`޺|wVT|jQb}
"ZVWLɨ{i'O+og. M.8~%*_S_M[~A,$Bԕ֮1ΛO*ȭ
zXiK7kV{0a_HNˮU󤸛2'x+(؀r>Gn x|%\wECE;gu"|eŉJ #&}sAAZtS%ƳZ} AZ T:S$,T0
>@@b!_yom-kP|ʦSe.N9
Y8FYm^'n')<~cyl~j f|JnfPG2afCCǫ:,ȴʞeOX| !zf	26[!BŁΥpeL
'7ʍX,7qГ{.nHN70T.uD	[Km"oWժ]|L$]^'r-ɚ#k@qݿ ㄣFe!M*'Ɏ
=T^ifI!O7㒈zT(D:C{%ot+|'&m_m;~Ƶe?tT }+^Az=RjFݏSuWk`Sĺ-.zU' B(jQ@u)BC	k+u|VǑ!9Ya=1_u.¸>Ct&̺+
yӝ`vWUߩ|!)OcH֡73&>;wd1~>ai֗öBH{TTUG``X%[
&qm?z+/R1, vlIFkĝhs#fSb#BuqWr~P7:gLm:;`Q'h$1(;PK8p-,/%{$^)):'l@}5"a%l~!
OGt62/Ƚy?[H-&-AMb},uuԼ?`GܦqYb\ރ kS.7\3>nb
1pUnTCmp%RqgsvA`'eg.f/uOϦW2FX+XeB8@ٕ|e7?*7yҼI#=G1>A"7dw^ }\MG4v78?fz$s}IStv6|w#j2Z4-Gd^XY;E 6+8Z!8	xn;ƾ
졎&QV%#(_j5[{Vښb|y(iM'%ft7 x.?YEW'RO6<Ι^^h0_Tta`).`b\65_3+ThjK9k#g`
.dypm.I7r	
)RV?ۇUbKF%sIg'#e6<=T&?=S=GKN%<?9GkNI~mUOъAW;s7
6%@J_	MU *Bد$^,/!	QtzA8Mp."-*TPrz.U_&aVX&*Lr:#B=lL=he׼4m
˛;sB0,{/Y=Y7Su y+>rҪ囩Ԍ`2Veh/~ؔ^wnTW!ej֬g8TiGBuG9exR
x&(2x+wDM .6YԚ64.֝ޮ^2pϋZ*r?TYEAQ[G!IڝǦ[A|r_`0FN^VN̴-M}bib8I,۞,_~Z]"?QZGk<,
1IYƃhl̈́./GIX9a)J,K)cϤ)ֈy9G7esțl*;U
@eb~ca4ILMo\[ECNPYmUJ,zC;=JL+Zn*uyt~d;#E?Qi9s]sUhIaP)N>9_5ak2J9M՞7pz6 1ڲ\|5w?8L#vI>rVEe7 $<ѹȺK_	<}9Y?R9|uOۯ\w_zxމ^%]8AAp*EfNʒ6KzZ5yc$q@\AJHg/%c7&Lzp]y4ubq<
^SA&@롦qpe-^kyETZ˚a
cI΂Mdsg[N91Tx@-OձW;yx (k`b+EqbU+nNb&K}j2Ek(;Pnkֻ	>C, {TI BPH9D
%t40F 
hi=P4CUN֞ `MW7mw7+׍9@k_Pʴl($'y6l/WKWxk3j 31ݯo/].]#SCo3N\k?Ѩ	5,yH%?"s#c j.p
61@Z|ͭ4(;!W{_*PE-bCǉО&lHHU
(OF)/2Q%i"͂#ذ#h(cF+d=扰>T^
cps4bIq3bpFvgɭFS$-	~׬IeP|حnW;9 &{jZRFX=M ڨVWg4ZY/{9g2ws~;˜ۘ>DPr :B5`Ou	ދu942h9O($U/ƀ1֎"?~:\Dbpp?	hA k,-e#RhWňG|)Lq`T\cvJ:+QD&[2l	ĩEO
	4H^=#;Ih%'r.a=]8&~u&ݒtX^}QmZ,۹ފN:T?kťpVզ|'?T
E"Etd/gh3ϫMo"hσ$!kziQT.4L]|t7iib&b~=W*Qxw֐#;X(ٰ&t<pL@pQ<wAgNI5HUQ1W`ܿlВCm< k.sMSM+" 0R+3UYq1ͭߔSghg|cuXY9)qU+Kj9wJWQ7`:HŏG˃~ ./RyDN3s>BIe%Q.^i<id,XԴIP-QPǃzbDG&͋=e@f RٺF'&R*^SV"7@[ESyͰC61X}9tk1Of6Y3٬Um°9~89qUU#>p
	T0RI$>rP.
}DL.,őDAKX00XCv!NW4O(%z8SmL("6C.#R7in\+dU&ds2$O`6fJ-Ed콧ٷO)(HߙqjPCx3S_@<]ʊ{ oQoZܲ2T5ePuxBj6eqNFzy-
KG]IEmQ}3D
?[+5մ$nG}q&3|+`ID~bn]?OWn1xq#<V+?i_]fK56khiG	J3w]
T\sqܻ n!MfV
Щo?C,BFۑ-]mHUyKVxcY{K\&<9D7@Cp$Ζv%<~U9NLNSj*A`
jD 1F]&|dv:R,x.+ah	
^㫱#sahѿ|m=st,OEϨ}ȁX@Sd\- tkĊM@`4WS0+qWsL`9q-0qҝ<'"iTȲJ_h*x}I,bKgsL»Jkj.V&B鶴}@m\7p*q̮39Hm"P6l?ȃUd::KgW,hͨt-!vmUB!}")]tVrancP*uHr6fEK*ر↜7&}V^h'ꁀLq=+k;WgQEa}T#iR J}ZzRP!n /mܗKJ	g/zŽ\U|VC:2JK\[
oxfΧE2fb 扈|+b˔{8?**H!wU\<Rl[ĝCZ;>0a|
vFrZ/R@
)st,ju'n}CuАRu#-
+exy=2ĔSNYmV(jI,54*i9˽Ō+6M2=㴰ɀQ#8{9t,
ۛ3$?_R<iuM͆A;$>!'YcVqQH4oV`u&E2?T=Mpdj&{3j`ϙE(KH[?z,(+}2椵-P3s4zWkfm<L0HɅCnC0w!0y$.}UxTO McV }'L90 ܼk&$0'K>t:UiB'Y"5=+~bΛ^园.3;B?91eXLNhC
 s~zO5ʆu
6*Ш3Xq\|
	6>@T$f:TIK;>5۟11:͏0 }q`UN,G[G5Bb:r
kׄ{L?Am!Q;gY7B7HPK3SA%{r__:qNslkZ3.@`{kN"W+g2y|,+FAg7v+P0Z`_,n~X9
)jHs@~ya'I/LSY?r3qpJȋ!hBQ+*lHj=cpRbJ}xo+X/s%\"e?hKU!"3vdkX]P_I TTI^Ytt9+|`ቦza>@S­ğA S,wr! ,`:Cky'4x́B0R8Fy+gd5VTR<}0(_3`&qQ Y6ǵwkh1=aϽ}C4!?ɠeVZlAiೂN}^5lsuB_VýU;T`'e1#2t ×!G̪_	h>䍶1O<̊_UuV9ύ'6qTRLpSḆ ڈB"cF}`+%m'p;_Ew,*Muĝ &*Q+v%*VH?Q,&"Vd`-Y-Ǘ|j_RrE?0W2s"J@Oz@Zgӂ-]J',F=A.L,vjQSvBpKFGGU`y>#3+y-35VFkOKUjˇ~y)C_ۘ?)ơZirR#@@kS,!?s?gE6a
8H!H5[嗓$FE9hFl~pWJ3!32y3f6=hpa6nŒxK~kOښ%R_ZHK-A`bP
=GlD2}$`6hpvJFST	'Jzc&M#xZZ݀v>8mP;6AWrc]PT
e_VwJLê]Q}y\Sv\r>h+ k	{IФJҤ;:	Jq_s[jk~݇J 7+0֣48xo~Cy~
+y yMG XtȢS޴)㓩TߧJX
\%H8sj/ó,bTS'*.Zu=pGmsplFPT8$$-y^oKEV.Ċ߲[:e3j *x:]+1	w;y!Bn%"i}Oo\&3l4
'Bm݌Û}o-]mԵeE%p`	ҲHX$qΕX(}̞DGP9m^\hpVm*	%
k|rb t8qm|4PpU,%%0<ĨbH>_zˎD|Z[q<F|[Ӳ=:\a_S1x=aBTP&Ggc0HdTH=8m=E
̈́ 7*4P]81kd<3%Gk]p1#Ղ,*g;0N.	O9
8D}.g_G]!*>1
#U5-`N>kʍ!C~>YXr<coHrF犰z- FDo>p먒Zƴ,r&qJIF'9D]w1nwv!\]艹uR{Xa7=ձG:틙=&VmO-x5#8WOwg9pŅ1XAjwWR{O۫5ͦӼ+ZClzgOp)BY׸[0TEŀt~)l]'>0YWcOU;!1k4Phۯft19.ϥha	Z
(e1_@rcvcα|lcM HgEz=Gx`nn}0\QJƘ>A9meV`/~,bsu1tVb4=OZFi~*{`Se9kW 2f;#^	00ZV]]{) tfl&u
 ޘ";Ȼ":j1{_9׮-s'uq}SGTh\/&Eg%H8h@UѴj:`c0ַ.,-Z1c[)GԕDlE#s s6h߁bVJg|VDʔEN6A(H,C:YrB
T)i`73Ww8{{Ӻd$C\ԹƖuڣqA"8TIx9:jWb6]g|O&hY*j\֡`S«fNISh?zOIF\L^RG4n/t?v/V۠p7o{#(J8lr`QoNrʪ.Ll[0?-%)g6'6?vE^$'n4݄ѡNV nKNY'n̓٦,ݑiv@\&
.>/(Tt';+ **f񽡹ȳk/nŖԦ=멡1w
updR)	e-Ҏ^lu/i>}iEXЮПWLEyO(0틴uv3cU|zgvB\?O>,9mpT"F?mW2|VK
8}õ!*B<#X?Q/P}
ecB.^cRdE{^&v.׋tֽlswz>vs=$aRF.Ue7mԻJJ3dwj<Dy
1d,O
{UcYʉ͟cq]>;'
KG]Mm58,0ډ4eG|)C2OT*pf4C҈Z8__ 5zpRؒ<D1u\ڨz@z"N6^5hͅG90,R'DD{oUȖ{?IԔw+J'B @̱衙ƶwSwhuSi'j	:1p,fV:{M@ѡzue|8
hўm(%8ٹ(IL1C	1+--c׎(hZ~NhS45
boN($GKSFf)3?mT=JDaX`!T{) E=(|RkQeKۿVXe
O$ [ @B*0 8ԩ Ǭ!"hAl K2pXZX#eKͿ?ЄыپU	K}$58$<ݺv*J;@CR,Aau_!s.JA+!P0GFtJO&pnn
1OzTd5>PM)flz.Q6(@_PmopEI	a?OF>21_YɎBYs9%_tvdR63r
geZ٘S:45G5j0("˩Y=~v :{C3fjOvzEXqԞu-mۭqG
Q?x3gG,*ޒMtovlcwlۅH3+#UYMDb3SlIc>`ZbC eWzm-5	o\<kɝAa"[)_4ElTUmH1>u'9ѩ%/͝傓zPEH̈́il.邺Y{ ik` QmIFi.Ւ#NKqw?BrZOxV	e_XWIR_3(uЩ䛉?ө$ c3K!JR͈yq$ҩ^ՂnOZbZs:
$zniH;ؖc[R	M_+_xӻFK %loӬw?֧4ǊZc8˦38`s*Ieܭ	,D8wORm%p#g8Ю&?a	Ksʰl!Y7*qOJۅgyK{r\}#ni"ӥ%~Y*wY+	SOAq@6 
oGHD KW{߫xwjo["(QT9~l\(VF$BpU%~.MףԹVx* wn1!KZ g-O'uH^:i`V\RᮁTDRj4`b?|-z~#sPqμ,~;)H{09P4	ձIph `Ӕ>V%Dbc'qJiXGrVe]ӎ
I/g&%EP880S=JW{0m_oA^6߭<g!fj=My`ӊ]Q%r#?B[ROi4?wca2i'^ǗNN$MOhs*HV
c3~T$ʅ(z:<Bx(!髚lY}l̊o
n4İ_?k_9#cyfgHicH/E(+"8L=/q׊9&aI~qtRۛJ]j</[evaͻ/g2z1cy+4շ|2})b3m|unWOTH,lp &cF`m&MYfB<|Fi!Lit;ި$OœeJحO3,r(fO5ҕd+ pFJ0^HR鋚p4~?wjCD)Y:hkt3:)Lg`ØjxxSrOY+:c7<QBj=oڡ7z(|_DYf7fS?:;
e?RU3zk<?+^6K&"m)K`k9˞U0 (k$/XR:0/?kU5V,ĄFrimFY)ն-l5Wt5!%Q
Mikߪ̛Vsx&Aէ*~+xRm,pd!_J$Tf3>xxl_c~>/f'X/vxpjV_z|eHg@=ڃRϡ}~~w{_*y;6
=+Tp7,EvKz١ë2roX]U_DMDzh^w民h<[#ʊJ	^8rFQc@+bԈ9E:RxϒA@$3%-O3>~>;&,czҹ\HvET @1,A0I1x&$~7e{13*jNMy!uv5tt:\Ѷj$>I-|ܨD
N8a"$jsu@B;l{p
"~|*PQn YUWiV"%J<" i)G@8Od]a:<"JU{
Rp܇Tl?ֿ
~E &Ȉ:WDJ:1,SKTuվ_~Xs)X&	<'ўx+<DdkRh R,VF{Fo܂M[ɋxLzc}'Qy;Cuϲ_h9Obw+|݇R 63ID^D0voQKѡ}Xk-!@7Ă[ Ctp83Ƿ߼j|۹u(b}._វ˒_^ozѬV)l9{#\]d5l]Բ37h.z;XwP0LB~ϑ>]䋡d(߃" NWSb16g7t!VbD,ȱ^kЯ@&9c3ErmXZͫ8y>]*=r
kG|p*Xv!"qsY8;])z&hG_DQnOvې	QARaN!l
lt1z\He\`sT#
nj_8ڀ_}~{K)Tt!4 B"h64h]ϓTVrh٥unl͍%;VmW,>[Co
`
VivoIOUveBS2͔+Tf5Z8h_+I%5S`NVGjIo2/[ܞ&?pRq ?MMQ"uo	h+UôI:ݴAfg<<}SWc.U*%%fihLlb@,X^{~'i$ĵ)fi MP±yj~k\)h hJkʷI|ۓI&U=E52e`q/tU76ʾ$$GZ9f6©9v
"?7"lf;Bײm?OGPbQ[~g2o9J7
]WK
0ke߸Nw_#zSxzDNefbF,%,RhyeѼ8Kf\+n>%5pQ'G#zPߢU	(4(Γ@|vyr@B/rl7
T.x
vX#gs8'f*Fit2mr/{KwCJCmgB@3F1(.4c%<ݖ4)¤Z
ռݧ73=WzL3DPXI!`-$ϨEg&25s$E;
l$ޟM̌_})7ZV,߱ݱeBe357UTmOzkHqs⃱U\O>!1XzR|dAVj6rL"B'4(+I`0p8)kJں׎+aWq^tƎ`1ETʯ{ #MMsnmԉH~^PwׄseKL7>GbᛜiuXL66=ǓZDjR4-W5B#XgO(T葓WOOyhĩ\qh'/цٻ6ى0wl
%>A(sRp5ց..twʴa:m	A X&`Bֹn>ׂ]!6#ch=	^$s#AejE%YV&bGH(ZA<y< "Y@2؉6C|uؕO*܋Da8G4ž5ޅ=t+*B\z7g{@ZVg| ˪
~oGjq&
%^8vvXt%GQb^'I JKurI]mO-OO8\arC<
D :$K;\L_ݏ
GtLi
 NH1{HkT:NGP~ͅ-g GꯒAO䘧
[ݫFYLk_!a E;EGLpY{ C?FXT'୘hD3^OaU@ب5X2R-:Sn-#T}pp(bH-="
JwaZ JVn)L1ԒaLJI
}Zˢ͌9x
jc>㽋yɚ"F96,а\粱b]_UNmLJěZ5w>K`xJK'X_Υ8?,3tEs
p̑Ljv %?N:!t
A/Nbڈ0uyӡOE1YP(m0j&3( |ҒB) o"=*1pͳ~SYl'`,XOFԏJ+A븵	ehJO$H/?T5OȥZ=ggrthKdevX8x:aGD.ըzZCpY:V΢ 5X<q%@gk5Bt9d92-/
W  	^EYU4bP%7L-]pA(hKcJaZa%13OG؈7aB"3R&+vaBz&N5^.<
鳃fఽӗqϼKS9L=NEʈ#;iZF!+vB9Zs"WTLjQCIPh~+&-k}`@Ȥ]!@mSDs'zFMilʙ=`oTL-#6 V`zsu*oU/"ڂS?dr2}C^p	<+-j cV-v?(
{C2X9I_UDXM
w݌L=4	t~k5XY92RԳ@WD=C1*Y$wIkPTsK3ntKCF%ݟFJ&ඤce&),ޔԥL~g%Y"N$`kXcfyxr$?2+]P056hLmEث{mY>B(*&{Aݴ
 PR	5WuԬ@Ʊ

.ӍiDzaQv/Eb氐6}}ɖ`Ch"Yf(v;
Y|w,J
>!%V<$>2`~a	87a#<65uעbьͺ3'Ѩ,!EڙYEX_i"Τ#)k;H_6Ś_
UiSEڤu>*kgm4yv
HpRG1k/l3LN
$W* 
Mۧκ/U꼠϶M?C~MJ1%u]h2/*r:^.m7}nWG&0H	 
aL?+oЇBz<Heq>Z"̥${f2	*ά6w= ;
g{B	-Uz/"±ƭfSݺ.i@{pL</R\a,xr	h\=~`R!z}xoo @)XaJ чְ
А"I!>1\GA"\OZjǏO[Vq_;Z,ƙ<6#׃]ƿ@!5f
;hrmGD.ǚ"[Tj|}!@,;cc〽^-Ά<*#wU~=V"R#eϟ|j[ r&UyAu;_ʝA.֎T=#W|45gb͑M+j[GWUiRӟq	Ӎ3j޿YCmgg7#eUTMXwSY3۵Y_I/HK;qʌ[Jy-dW. eKK|-uOڅTJ_Hq=kDy
BfZG
+>ӶnU=j%~LdEizb#C1>`-QwնSe @PVE- i]GTV/Zz۠%\
ϡc=f(|,Ձk
A+Ӎ0rFbk&</u{!hX6(KF3{69["MgWWbR]l.
ߓ0Ѯ}hNK| x62:ݪ|:YɤN@QՐ8ׂo41^Ԗ4Ķo{0:Ec1)*ŮW/	V 
yW@LQL
|FJDdqƔe;S5-u
9k ̟"O؇+V).D`H; |c>%7Z~MlQ&6qGX"EyfdsK ~g{tP靃<g*-f_P;ɪ#UGKhzr $g͕9=@7,LTM+@#ZlU 	ѩu}(uLqa<#3@b!Η$>lB :m8
B>fMوeWQ;d>乿ߏ_:$wYyL lo
|Цޗ	1²X]0X8FcƑFkl'}Ky-w3"|y
>F79A3@p-;lޑ04eoy6/Y*h!Z/v/Fq<WBChs xJS	q]\qČo7DX1Ɋ/	s.yJ~6`9] Q-EM+-ls]ƹ0zkx<=yV`}_Ĕ|,퀐nt*bVQ(jqk`A:38R_F
_'Lవ{oƬPy됳41Bu$}'KڴU`bkh4N}Ing3L&~"m
뾊E7MTZWj
U[Ľ@͛ꧭe{8h1p0LG|:BwK$Hoq^׮ _4UhVojePkjE;UkI!)eVOG.
j
8(JmƦ\k)?Q(zA%\9Ӣ?b|æf`*yFޫm]Ҡ3FGkBcSO2!ZIaX}r;-wN?IfF7:geFV:I%8t
5t2oC#˩)th
GlT*+Xk4T	ڜ4JV>Ѹh~%VemuQ|V4յ
~
nbom/	nc#$
8u!\|_P_g|s~$)w
e4;m(硆CA
,͟1;I`^$Weޓ!TC2\4AkfEʮM`z@WV>Ǝvc"3axj|(C&$f"r
uZ[46w觙ArݷQsW9"3SoTC$C+⍍rcJiLR:M>r2$<v~1BX0Г70Xg(>iq+Wo$
b1)RؤKġ٣eMz^#
xfCJ7NI}VұʚX|HǎCLxu};ms%[1h2XkTʔ}9:BF_#杗0̐
.,1CU*IE>&1pκ-N"UVXl%OmJ+UxK$:x=tlx×U%H}/ܞ@^;KrRD'O$2>nDgV9:[ 9>vAGsDe%sg8?eD8sgȴ[h1"
J*].惕,p@n츴/k<蠌eg戰z=̈́{ϩ0@66S; 1Ý}.}qٗ7f~ͨ0>wkU=k0ղsƕFJ(	C]!wWYx{h=_@Z=kJ	aZݏO#P3~p(
q eyPe7Q,nk/:$Cp`qϪuͦU?n0`y2߁H9's֢*9գ[8uh|}pq-յս_7w^Fc>(0̘iå@%&kh+ڪW䀲ܭ O	J#󊢦jOFʞzqc
ARpG^aǿ]Wn7(0̀逺W}A2#J('UPooѣmc `+8#ӏ@lU_@_qZ׃3DgwV&2aiE|6O^#>s<723J#@D&P4pR""8YD8f05tѤ{Y9kt?+fsdJM}yPj'۠ l&">!6·cm@ʄy`c3>b{65@]2e	vUb/h$O)}h#a$O]T6kz0.߲Aޙ⦟`1fM!3E^X+
3
*9PcCtP_LuAnH6[eg{{LLX 2, [@#-R~}Ϯv)w1*Nyef4'g4.+.v
!cFvv 0>k5^R9RW]Y]=PKN'{MO;ӹI^LٶPrhf=憤`	Rp?GQL=ӫEA
Rͥ`Nq,LL8w+RSOLA>Kc\LFg:Tx/\Wv/ZyE@`%&d0_b0AptrLVX$
T,GQE5[
!?/QInL8%E%27Y9`K$_bI%yggK=qs\f=TYX3alp`^AzMڬD(oh^4m}*M8L/o Wik(ک)8Y,.ŗ+^ӺK'8Ae,%q#X
sc, +GX	"Qn&aoѨXl⃟ O
M^CO6mԈߋòk ȫr7t ݠ<r:=-2@Zսl61oOxRPӈWFZ*c93>؞I76P8\H[q{ռdODd\!g	׸[3 jKOZ[t<9PC[J;O	0a''Team1/D4%ۺn0e/-=-`K1:C#jSο82YSnݔxBgzuO;H]3h5uWv.j
O`ߓ7w-M,q(8
p"N+	rDcڴkPI,H˥
oOʀ[0q;j5ى!oN @X[yApa&i:T&u<|
ư~g@Ee<'%G]Be^Y5J u%PT?NYhGOSSGta)駂
ѼWYe% ċLBxr0N$gzW9kRJ,H
`H!o5<wd؛0Xy	vyJ"GI"{w8jt*Xt ʰ$lGwxTbdYVPۆhB#p({,
̖p;B30Xst*5 aAiF|9%0ޞm+ΠcDF3F25r
ÄӊXڷLoY'v1<m@|E4cQTTYqȆzz%cR5T+ZO]ܡ8خlMo"arOP
ޥ~*BL.<}Pv͍y
17fYBf}c7;D҅eV/\)I&fx_B3l$dJ+ZusE4v 8GNOOH4!$g*xc׍n&irT`.iYy	ڄECxcBX䂀0]ֹ	ZEd,˛u*ɛ*oiSp<L5H}'B5
ܲeh2S5omN Ϡ*僰CZv)dA	l+v{5]P
7ۢ]k#bҤ[bwmq<(h|qhJ/h-gQꭂX~GŃG9n&@	R'Zұ:X<՚놊[[
0Y"AlƴꮡlgrUD@e
R|K|=A}Sh< GKٕ,N3L }ag]0T_j.T lu{ѷ@Qm/-nZF!EKg;倮ŜʢaI:̤lKQ{RPmdWViV|=GupȥwW6V!3r 7
&Z:MKApg~7e}PP0s};9ӟsW7d(Qe(R~/r+4~5x"\WPM{Ĺ/њ'	\zMoJ<,A)
93s<JQ54j/_vĦ.#ni3+,'1j7Tz &*xR<Io-'7%p`$
ĐûS)M QK
<v&bJx=č!hsk(9&V}xM^ȝ02OaI`e]m3;-dU
5ΡqFsd56ld+!џ,U*XC ]SGw@qWȐ,b	
ҍJC7IjF.61V~Es	f8<k\yJ^iAIl
P32I֧fE/nՑV
MHӔ>
`>aLYFVs?+$(ڲ
x\@;f_
M}G.$I@Tߧҽ8@ˠr*Kin:;+/F7m%_n^ +q_n)<IY6$6V* nY>By|`_.>CJ}w.[%kvq\"/J"HC{x)σ4w)8^ͅEM|VMx\jZ!K%Sa9{c/neaj=~^;'̛a'5eYkg)ȝAF<K+ֈxZh5 WR	rFwHPpHe)YZ٠v
R5s
Dl+kFۊ#:r_
t?>9V#=Leܱi1kZ@ak o݃ȳ:SUZpa6:"7t-
x:Ú؂/j:N>ю!q)c@,ɘ	edXO'[2q0j3;ıAupm2 c]Hֆs$&٧
^?|D"q:}Iԯq X(6p\%zvؐڷ:<s7UrzH%gP\Zt4H.|W۱9Gaum(I:ϒDݶǍ!Էw4~'ǣ,K3{p
G9³Wx-q8^z_jt
zdt@cjyhs3m2FcFb<nTѓݜIUMe@bs4r䱩h~S(*|M6@j5m>ȶK`cíA`;uA
ZFC3gÂt@'uGȄw-T1I$ʝSqBDwduꭖ+ -4nԛ{
ydmxxS+A94/h+D)Xy+IۯETy+NK-b3c8H;4dW`c+ΐ'Z,933?:c=}`#!*PIS-[unQg	!:GufH8!dV'2 㚌B.)\CZ94P#
q
57Aug2V0\D4@;sOyD lR
iU;KgB<v^9M!@8|$,cUnp6ʮ7&
K^)G[(!<aV)gGRV`
E!1E|!rV(j9Z!֤tؒiqj|L!ݧkpQr3B.e`wĶ
TIUg|dpt%;5dh^$6cy_ɇNfYƹR+챙_	$OT:EwXG$q|s%Ǽwݩ]F::
E

&afctߠg0pw`0\mvю@3Bk""i| DgZTzwsӪ̜ꔦrrE[uvh0n'Ol]:TSJS3
*M鿇H=,v=ōB^^ˈHǪӛt5=AJ$jJծEa7nJj	Ǧem@Kx>˹'#sLccJ
Fi#DXD%#!AHק4׭[ﹳH.]aD@At"AJWǋan>~>g͖0݈>H1+&KC.aoHW#NgUAX$S~Lw꩷!sfQ,!{,L!ft=E\\
CUj'R,ݺ2$T^DM!"6pNaW	[1#cw/O,ϋN՛|s8)ȅ5Apsot[q
v>60e@;aYko#$g?Rz\%UD_16ypg0	2D
w-1WwyU~m ArY	$'	#:guV}VMԠU7<N86|G%_q05$yGHηLт[!Dz#y[F.f$Vuy24̮/	!7nXRxv7Vڹ6}EyKB
Yޒ(D9wBib|Yo-Z(wÃEe߲Zh$<tJx+HEd# J
cly)&)bbO&|/	>/V}#QQK6-\AX:FOi,mR뛇@v
_=:ο샴0mIszoڃ1^@)9f'JI"bM-.y'(xiƣWn#?xs.~e}NJU{_+)<{jgM&9b% 9 Nd	K˴;R7*Stxm`&@gb̾2(Yɓnx}GoЦaтzL(P3rئ~ 
>eJ׈-g=RW%h	}z5 D%gn M1XT2tY+h?Lk9RLvs~n
xG{_%55 1L<TnMX^zC0d4h3*&}0 md
jUBcB(1v #Skڧ Cy5(f&I2CP|ޢ\L/ek0è7I	6Vie`R!"'wOu!1/|B|8nw GKtZgm`OV^[]ƣ\ 
?L4_堇󱚫w#āء P3=dDz
X19+YɚX-(p&K@V,ro(Dɤjwт:l}|U/#ܠ-*m5GD qll{lpE{!A:#пov5L~n-\!~R+<PK+}Yr @yjRQP|;d^2q=Хl&ۮvwy{4|Ja9mt
A]YXBG琹O^!brEx!"ܫa7F!/_^e2,/:n uhvhrNZ=owcQ=	 W9Cxs2透#Ieo4udn/}
9rHP\^OBR5K2 mы`L]ԁo;Pr0
2䂗{
q)C78JF&t-n?afC$c̥$c,=;yM$Q{`?@~?"Hˋ}3>6a\d10TlQ뾑[,)bQ)y蹿7f!2 5~o/ޓOUW"dSG&QPVt+.tK]+@X͍%S?9lT$pYG~/o
Y5d}&:2~_DVJ{4{@ʁ\}Ú['f:ݐD[H,f_'(^ul(*cL0+ II^՞ Fmyܠ$3fhB/{$w\\U!T&5R+ʆvhkպ^Ri7vFIqp~6EgTvfRi=y^{#YW!b7y޺
گjAY=kR-BEsOyaS_aW!fN^jV(ߞXāX- O$WcT+P.(bJҕHg_U;Oe-:O#̥gO*j+,ޯb8`{XCb>5O4;zrHF%\-plmz~'ĆCM9Zäx- DfZYPs]{qG
P&AlkE)fy͡"t`̀W*0S՛LmjG\5%!+C0_-}~zӝ0XP!9xBa_[yΜӖߥXNIh>^0y3K'b+Q{P"A0YA̦_b,BA20z)o幗%"dWoUF㤝}fqkGu	rӆ
@(z;tP*z,jD~Ю@EYa%~jT*|NЛ'e&EDc*>>f򓂁 zǂSIA)찰G\OM,5s&imI9Pڟu5B6ǌP=i7
՜E5\fol쨐eM*~B7:ȉ(}Ф4i+Z}CĤDmd
GֹRoY=f4uwʺW$TRUAs⺤*Y-Jk-b/X/p7;EzB݊4ԂD6rW+Dx;4-_nu٢-d̊gK1$rnST}	k2_:ےV߭-R!\JQ^&VRY辝`g%YC{ZGjķt1	4fn=.-aǹ6c'dIi6=6n(Ԕi=\@~\H u.NkJ*sd	3(΅y\ԨU۟gf
Y;&K\L.')i|J7');I<&CbzVGeaf}u'loNeKa1,,A_|&G@;9I-
AAtKyazvz:i$+o+^s]vOE!F%nIW78͚]##)1%׌4B#!9wh;~DmGiOHڪl9D);{ZtF~Dy>N#4U#	/_LCSnv`Fi^r[-k4)^YNo]y!kJۋ ffrn>oWs切>xrcֶx~qJ֠dgS0	y7~NdX_uURSW!A
ߦƏV*rjҜ}:ᗑ@B[XҳE!(Cca
u)H"
)0dYs)~žwlʓE34з'N1J#OvwzF/ߊSCـp9dsgO$z!i).[|<50+-5)X'(n
i+xK3sPΕ99LIB:wd?;Gb>Lřa:4.n/e
Zr|k%TTiHn+aocU{36Lk]XGx<y㨼i7'4+d;QikOE)1(zWm3g" @o.BQqhIO4tµ	\is+Jr/e:."CX ُU2)}1lqqcK<FIwuCW7dCmBi9Rc{LIusJ
I[Zd/1RGN4<ԃ~~UZ?U3TQs(T=eLtE`5-7%wS3Kz)	{bFgB3ĸ7maw:|*8"&N2
[uyU+4|>G%e_(jxj)0, (BFJDJGԦ
u.[Ga[12qDfR5Mٙ	IY
ogk<QhǴo8Eb7R.j ̧~SZR]DU9dpӚvrK"u^U3<!&C~p g:
=sɏwCV&rFHӸk~Pk a.Seuox(rq U;7+6;򹼢.2!Z14Arp/ѻSd	:X1JU,>rn6}*VI'O^,
1[B8XqWBoz^SCvDw䏸Քs>
r{BLCw}%:r]߯6!&Ah@,SRpxr+e33[ą>PKv<eeSM }ݸL&g@dXb]b_U.0
si*,ISQdGt.YƙVSO:"E15Xq)Ӫ5@Y.Y ?ηr0R#g;5^&v"/e9>KskD|&5c< Z39
^B(٥sjCVu{2,0؇wj߇,P42ԕ	7!C< {2uSugY}Nܒ%V(:p	PW#a'0MC;
#3kwLg(܀ Bmۑy䦿bnd!$-Y^Ku#M'eX"П<zRw`N
H!S5p7WD~&PD1;8bX-/.v~jeBX2T'L9?؀jbҵ- 4}+ƚ}}.QcS`r0Xfz`%A^ew(<Sr/%$ƷJ"FpZyINkۗR	0s$JB>JUX	G8=6C3ccHҿN]OW4@DT` 

So/)f{/8
<|M[XWRY6ksח]xxk*m
x7)UR
ʷT#%;(H5),aTdֆTUQ~{K#OHs͚x$ɚI^2{doL_W<ډC2Q-||yDtI4 2	EpOn~T{.E\I*Ic6lf5(a*SyrajXKQh.,TOl)F>Q}yN K)yⰨdo&Dܓ.q(q5Elpxc%B]!{)0B(p}!-FfC%K[ov!OVy8n嚊}=vֳyJڀ;5^c)RYH#J
QBk\%J;2c%aCL={3w!΁:*3r(_@fJ*QbU 
+%5O	<y~T15v]@?HzXi
ܢ[aWIm3h.*2SbN`JDT^CsYϔDL(|C8;#S]wbYxσQu8vhlH#D7u	f4}BsW}8aZ[B7̞w^3˝׃#N>ZJR:E,3P4>\D.2<Am[88>ITU*8يWXx!C(qE}js9$\,GX(Ĉ$b*c  (F/HW( &Jbx?+ET[[/@`4wk ENiڛuN1r#!~({-P)E[9J"@J(:5"J+@ڨ`
>A: &w2{ml\DN{<bX%+jf;]ʃhCod
_X3;=yID
.x6ѡ
T
aClsHҞ+G&?drэ>yY?2&QZvSN+.X,`ormu-[)FQPX=bUbFvjrn;]vp#K,
?=k%J;8H$hgG臱	^|8	kHS#nHTEҼbJ5QǋPk*'`.mWBcIav00| 7O\ $ykݠ`fh^v̽@1"	od~<gH+FC]ԘMRQ[b?mIJPJKx^L,\Xƌ:_RaZt.HY/R
\4+BbN@R13iHg
J0*zքn }2Jҷ7:vw,Ʈ<
dRP@+IZJ_
G؍O9_̗,^|xƈfOdL#37_#Yэ&Gڽ[Y,/J5g%:|21I[	UO:8Q^ jHrnYBw_FB
֪/s9i?vwNR~ 
W'Qk9Y"
-d5Mm@&6<*+DJz93\"?7\ܦxZyz^aƨz<[ݰ/Ġ0@:ǈK @,I,&_E8C zc|xCt^.HS-Щ;Vy{ѧP:yx\xp {N=9;dY
_ғbo'.Mْy2Du;dIxd̳J/յ&q\ت>n  p%0͗'_kK;>Xy!2|!
q'Ss/-!L91K@6HpL$TѦ<D MLoCkp1.Ot m	Zvt<{ͿGغJZ8(k'U aSq`?{s+ Lt3p4h7:6gJu4%Ib(Y6r=cڪro
p>¯yd
׷`m{"OXބ9
z8
k'3?(G*R?E$N1슖H%/+h3q_Dƍ$˚PAHω_֚)y:ٟL_?;" b԰-Eη%[l򔊷[Ϣn's=Zw"g'DzXڞ<t5BwDa(9n;>xERȦ.M$d>pQa 3j<>'3Ulxϐ9R')`"leZf*>deG
S虵$CIÝ l"|~+#ƽ_'=隰L`40 3׮6s/''~5\^Ϩ%5	B/(l@|S;
"|P󪙞y]#qAs&bz%Oj샛bU
lv81["E'xNV>^/*\	^n{O;nß=,
7 7"}aL&qS2}q.*%r#G.eu~Y^sEҭAĩ'Jd$y)xzJ҉Cښ;|#D^e-ʾBzu=UICfxCփԀ08)
F~0<(VJ>Zɋ5Մ$}%>ʹbLV&
w7qΊזd -E
+/NHVY++Ř+Dj"FûHDh)f¯o?;y|_9xxUF2~Og<i%~
g2>M+*u(jPN6%qM塬lir0pg9
ZB?W9J}iʾp*--,>m]O6ycF?xo/կsvL.|lѪ+CI\>nᩀR>ÁS!_eUᜎF/
|w
^fҎJ1T3.]Ω8xqg~#\8 RI,'!f( ~9O1Ul|ֲX3\p"ll<`BY2BaP`/}(͸xTC^X#*ˀ\SMd䑹Y}]jG&89s6xa8,y(H〞s،e1}%BۘxjBb}ӳGJtFQe0KBL ;~vBHcV;('~3׍(Gz!@9@,
Ox>]9U>n]agݥ#O3۸kReb?IR֗]JW4:z̺)wLBz7j}K>7WAx?.ċ@rW
,AQM,!{g({-i(3{؅7o](#d/b`%c.GT#0"
ׄ (r)1!F(	v$_fjˆ#6v99p4M\>E		5`K}y53<H:>gùDH72uI9ÂEQD +Zg#P\SFz(v8U%~ƥ3[#Iwu >g-4X&/k"1&ymj	
$w:XifI/F;T@d\
깷J]\<EFp͆<!؋sbFNA$8mS'(Rǥz
<nk	Uqf\a{Ie;$:kY;;=k+Fv%n\/uJZG &$1xJ8pPԒ!uv%1:5P-qi-OSp/vtFp/{rB<ۤWZP/@uu"``#C&͙/ts?.Q`v*ʡ)(Odd{j̈՝nNC9=)Fc$[w"%|`Ts[&~pc}sIu0wEڟS.izKW"ڏfJS	gsL+;CIptȐ)=,v7xE}{ӻ֢R_#R+<{&=涔C毻KhŁHB@ZIl`]rzO"Z{lN킾J$?T>ci(
ނ{m4gcJ9YU#zlSuD}Ўl=<֩;J&OlN*ǘ0Gs57igxb+=+F7"klt
y:YaYRClZђ&ޑ."Qi-4`I-io@c_1mBi^jnÃjx)c䓔cI̤N~>4bx]ޣ
d??M5Jw/q&ȋw#'T7[aĤ+G)m1O'&G]^YUY'}Z3L6_h.	=yX\X5 5OÜ/Hܹp8xrr~({<İڱx`烴6GNu76Mq! ԑetAya^@?m_uxʠCRѹsSqF`/SrM胊=xYzbSTG&__k@Dr{nGn毪Џ$Bf~즶P
fiPb(7V6
.
~܉~EݘA߰7fWԜY:*,O.2 bfIb&iyֱ^>Ͷs7NuCR
F!K\>_x;T3q7MA5&'>b wh?_Fon9Z
yQmOwcU?WG4<lnޡ%£E1X6: g
"X`maN:(܃~R_Q;aIqw(׃%0{"?Z<$W{giemoޗxpFD2nLKMmQtCӸ4NfE"|d5|!APdbFNfh6tQ8kW#,v=1^Վ:(q[>`<ys}]
ZD>plNƪ#c<bb! #^ƈd\o#V(w_$XJeANO_?#M {6mS8Ce^QW1PZ/J_:.͚E;ԝU{UMSy`Ú]Ӟ6Ckhi#u 翢}_lMUN<R96<s0q;a~.~N[N')h,e zs@Zjn=ƠOIK*i_-l$=k@Ip_h:?qjd{wŹOENHh`D?ժ'TSԞ>a^_hKJ2nr].;ԘcȱcuLv^q%nT'qĀ8.'Ҥ>W/Piƛ`FMC0ө[Dh ;P"FʲjMwRcAD1
f,ȧ{?h8ө4176u;;
CWuEe'TFy4G%хTg뽶WCxvTi.gJz"DȮ._=EFdەDS-<Pxz*PX
ҖiUsQ|oҬQu+V;&QC*OE3o

+M5wLdλ oc 0\w$,4L7taUF^#va'Jwz]u0Jo
V:]~+91X|%1=:"q"EȈʘtΙRWD(}qrI*%"7?F`+jmeT"3{FUQʡ%"/6Iٸq?8\kKVwKԃ"/"KB}SCԗdfPg9K&wH.aBMl0< 	gd[UH|^A+wphA>"/d(+iBHJ!6XyA֖)pd^1BE.l-2mT0@ٽ#k6';;aVmڸYJw܅!jla4yw_ N8
Y}DID-:KTpG	m5Vh}:ruK\=VHgLJA^rqwKt|QՅD$A29~xJ#_oW=U.3Tү3Hszx{~uFzbÊ(Z[`h<&GgH#-5Ty4Ag
+f?Y~`|&EMf(Q>ਰUGd<᫝9s rAhAK0 ا&?;P?{N)PG2hTөP) 61Q+/:Zs¬lzb1(<	aM׷fI5[g0aBA6rWqTVDh=iSǀ`[H0_3ed ;YYwjVXe%=zhd2@ ˈWƢUL74淖1މ>m R5

Ɇ1nQ󤂾k0ϭ~r[nU}{[uԙƪ FIJd־υMw8o,zv&P"O6MW|
Fъ3(YE30*%̿"2~JiIR4P:צ\`J:dv{
wN:!VqSπ)ΒyYCÒ
p_T6bѬ-I#Ϣ4~JahHĵ*/ N{Umt`*jl8<2d|~'B0ϚbNrvl,f}aUzkfrFӑAfcjw[0z%*Fj<1
2M:P=`S+II -uS@0z9/男đp+xR"zO֎Ny5aYʃʶk\_5F'P0t  ݣb_y{EH]牶Ϗ<鑩^i^1Pԫ w=}
b?ؔug.;CmFd<"8X]	v;.G=C"pmqp+
ʫoFz,2[38=x@%^10qs\HF"وl9|Es~	g|A$B]agF9\Fhy> $yM|[YTCzHj|s`	5`Z^m>qUsƢ`(#?hI/"GmLCGh\!GeudsmvJI`E^EI6ԭ߿sXt]K^ng> N(^^8K}34h( VVfb?.6]6_g|yLxP!9?/w=)DH'2t]Hx4do"ZG"d}pfeCZET/hb-R:ihZv@sR]Uv7h	9XXߝ$vac0!u:٢Կ,N27K,HPkGY@.Ncc$%iBޒ^mv%KPa8H]:n4gCN5-,JGIFǱ]m7`@p?,X5w]l=g6P*B)x?z~
r\6gFu/4MSpr9l0bP'u0"dŷ*EI8,1PP:lXglaQxlT+`:=\!x$Z֙}aM`x?Rn1#˟?lru.
/	z܁,qpO;
'9{p4D!u:m
m0y:,!=nR@£Ik ,S7\"Qꇵ0D0w7}2BYp!B:YM\L aݽm".-_Q[V%ϐW vĐ2
f2"w.MJSăP]fӽΨ
ƪpERˍ-E5v!`<x-9ԅx~#8!D΄sW-jpy3ў(
xn
k}(9hầ%D{qu8H Z_	;ʭ:ٔB'WfF)³(+	!W9Q9~>3
)vWxխbI+(S?o3'GiJܸ&%VSigpcSwt1NayHwec,at2  8զvEHowRaHo.u%UTz;R۷!gjMl`Wl>.6HH.xц.`{wh~cOOy@JG~!HՑJ^a}*r펫C[숖hz3V	`YFkUι	Ri"yd˃aw@!gd]fTC*D
V~5ޝ7PDNC.LGlCs;J󥯑B4rmJ(YYXa 6HqIؑMMɍrmRfaH5{d\迢wcu%e\ccл%J]g =d)!W-~|ag8	G{Eeb	oj) x:~s5d)!Ad[NtvG}^ϲ]nC؋]Yo=zSC'
x')ƪL<mg"ZO?	,$Pd+ῐIU%Y*rbfhU DH
f4G~XKj
vi$zNؤ#DPhĢ0ܩِJVU/&,rW
3aȠ=Tp懕N3?[\I/NU=|"x#V2-
jtA|SQz!ٵEdFΕJ:OS2L1 Cͻ$@p`S5#vhs['Jv˧ǉGP3rSIW[%*NxO1S6-	L%!Y(yc_{Ž&ۃ^h
M*
m`Z8F#r fzBЍ`ߥT3eͽeZ%k~z-4ձ}abzU2	K2<'â3 |Yipb$'7C4hx[,uX|<{~N4^VrmQlLmcc
yCD`?Ɨ`iO[I&]Bqa8͊f'Lt[[VS$ʽu5ﹸ(,AT%ّXpV2DڥوEJGq]䟺+D69}"sI3uOT7]"W
GW}b	ܷQap&lj2Ϩ.Ʒ?)nU;6K(o7oCkWvt38=0xR?7ʼƞte-pt߇lQ1ĻuE(7%AyF6RT[g$6	X(ԄP']6N`5~X,_N%kx'o9.{H;FHNqIb&9 !0Bext\܃8ζ"	:6xe4e>AJOg!$Qzrc(X"U1d':״Q<|^Wr_j!
1C?87
}:"Y֫<S9M ,8r6;^9$
5:3DD%몄:"euzѼ	gXi!8{ ̚`јc.-Q`lu5=ԩMC/;riV3ǰ=GIxk\ҫ2
_7F.Ox%&x=TlZB_-oya$/A"QAXx2q:o`_%
d1]:)"[r_YPop5wGj18&yMPkYČO- $ȋWja'5+=8
,MA

&!	{芙}jpd@GcuG"dO:` ط{L&5Eˤ}CĻ9'$KE/sqBq[,NmJMq8] %'HVɳh#jx "=jq8ovQSLBXV
3=7s2&Ul7ˑ !U%4WaUE6gS{,(S[M
DJj8_k89d|oa'0*01V|	e2d;Ao#1sjm&W܇61EcHY"2ȥ3"h j\>Y5EMpFEEe(Ƹ跶|9e0>Ļ_΋uMgx11BM^*Ց$M.LJ/W8h'.2z<Bj?BAgjr(i9j S*KE28ړ'5+l%֪QkHO<'^
_?VbDֱ:D<r6؃AD<3T`<.1%F8,OzH	;Ѩ2SfL _x{TT	nK)nQ1P=P' ȼ;0PI!vVzȭaVtaM78Q>P!-pc8o'\=mE+Md@y[nOU5+Π*d*LOǻHD7zu붯F--U?b(/s.9φ	7C<.}acyƄ~8S@6dte(X&v\=6orsl3H0dFbЙ 	@-ɒ9l堧y~Ck,Q
A?+NũDX@iyd..'A2 h9jO%#!yI\guaIʎ0LDiƕl<iR
+JO21iJi#oF<X`5Ț<IS*;d,7mȟ4ڿvĘTiR'Kͣ!XD_ 1
}<%tб3pW/jc֞TfcQCφ5|B-v5pmcg]]xMÛ@_q2_?o_T>ZQNT!zHxKk
\wp!Ҽ
di n_x⛝yqosR՘_GLbA1IVE]LD!', Q\O\Kyp휩ة-򘮺h7
N($LfQM]//҅~+ pZ- ׼e?RY]fs}*0N`p'zQXEzfA,?ĕ[RR;uVҳ ]^}s
? =9 /eC.x+i|49.1ptj,\!"SlQ'(-uZ7ē'vK
j-Pyw|rm
_#؝HHo^	p%$p9QKd '#*b=~Fߎq;)~tZUx5[7Nd]>h|&kc"q.!A}s竕["{[4,NeOC/^ء/fb#Eבr/TW݀̕+ӈmg5,F\RxjTٻ3K
]bIg2nHi\RS胪3ХmIqoTg?)]2͕y¼w(4!{
P%%L=RCԅiSlj
8Z}[YHY+g'BHȳJ<I &?alA L%C&7|֡Iي#臹OH
`'!{Ι< 4Jm=؏/5pxHVe	mtF/!vH%C+2=BZg
50gFZ/؄ٷ2c{dϹyiOdRnx] @T5]Aij:AT7+TSmUY>^u%UnJy{9Q}tJ\U0wczOi
ߠh%̓䕧kS1tՙʀՊ̗B
W3ǉw\薎((XS#,_v;◴Xe.t>[{72J£{Ǉ p5m5IܩS-ib\RԩI2Ǝ@	FէuQ#"+aXv(8uk*P9DXH׉[05/\MK/I(ZZxXxISct^_	.OYX>Cb҉cQ]{ŴP
K]03zCy8Ey.N&9ʹN
DSs+nN aewZK>	}\Vs)qd0uv}b*_9*,(o2 <+(vj5@WACغzm"*Owb;6M	<~3 !@-Lžz8-<52! &/Xyoߖª	mDAZqZ0ldL!*mP}THsJ)ܧ6AW2<*SLT' ES &"6ypi}\*
3l: +1=f'--vav>0~w]HQ}ttrkZp\^C3ԕF*"~2n sa0p;
],\))+Nndg
f4
<Xdj2|kNPyg](YdSA54rfb o W(2r,96 rQ_i}h/N
zd7Rϖ@(JW?L0}
$e{saa9Lgf=b$jSkÖʓDCJ,n̱U`5>̨VQ=G> 7o͛L]7S]5vKwI~K
ϚN;Ť:y7U~MFro
aaZf&aAs6?Z+7s^Z{")"ODƉJ`m7&)&ϔ{x\X/&+u#)Q ]&h#$U UP21+y.>gͻ:n$Ɍm֏#qMs#CȻ|@ǆXl@\e#C7Vw @{ӎ2JdgRζ1D^@HOAݥX6sGpMDN5>@Z[9GiF2(D0j?IokE}>+5w>LgnN{sX,+`3wC@JgڤU<(Mhccfg'5R2Z[!U L{TqOϑv.OR1\L_ _q
 ݳSGFm 30D8a0
֕%8kui6SY[ȥRT_&!cBԜM(Ңr.hVNo0Kz0`dTYvώoY?RmLY
s#q&,,B7i+\8{>8E1Ul2=^&QTI֝&6,bn2F,{%xiTKҪû}7O}֝1naΌftL#cCr%lV{&c#9db=3=`d.Ei<M(cc`ϸ|ڡ4$
˟ś	RA/n5@1+շיs6 }W許fq)`2Weǎꧥ
]M=}CBߏ
UCG\mU=pײRjŠٿXo<zWF	"	KVx뢪6vat"=qP8Uђ^|ZvII fYUw]cR'|ND}|4V5QQ@78#?&P+N(f68W&Jv(.-S[BWGpм(I۰ˆ3F6bqm4 :알u%'FRmXUh 7yo(\w
L{{8zU6I66}P(8ۯok \P
"(Iχ
,b4ATm9fyE|ne	L芄~QP77]ޭÄv-or[
œaan{I7^]jdQ	hj2b4	.
j@U< D{!-ՐD3֩
j&`Yd
Tik+rЁؼG0..\1BӇwn	
v/C6$۰lG9I+?I@51,#oBQѠ7R##Y S7z4
՛GTotmq%ZfLUِ6ܴjb?ȇ#>9yJ5Ze]w&.*i){?b0XWKQ25ߎ?Қ3)g(` h#hP>!I5A0U^1>ph 	
O-[P"-T
~@aN.]Niqh`߽">t2F<QJi	Teu\p?O{R~i'To]`椋qPu'&od,'h=̰<ƫjv}$GIǸdcAgkdbE-3e:dk(cpd|I7mTټY,qql_*<r
lE29_ɲC`ơi3݋J؋IQ-[a\~<֠INf#E'R^5+fƯ6}E	:_$]	D!)z67d/{}PtGo"n4tU+7znAW JprFG̮=E͑	d4:- +rT
h.:"+#
tx"[U8	A{<|/x C:G˯NnѶF(OtTa9bY)Z&y!<g1n,ʦa{dPBY8T|@Kֳ7~R&
"9e{)`E)|xBa}c*F;:|#Mդ&\([#蝛KÏYORFBC~6l6Bjc*Gu2]=Σ_G"{"A$5S?*C|0@D	*8j
lM:6yfNf;|BeKt)qa9w>R/
_j//S*~C+RqN凇1B
'5WV&&g-7Vɔwr׷QR@ElJR. S	BhA[גp
*&OĊcr\#nW`s)F靪h_Yt^!Icbn"aiFA]\pj
ހ;"@?)*k6/"œG2h5
w-yLˤ; #MfvC|_ӽT\gw*eL?rmm@(NY<Jm1u[=d2Hԝz< /[Z6w5ZTQC:jd`ECU#op}Alaet/A񮫔5˛A[պ);S}bBz9?@^-2 S֫=2ψu3kv1[=)Q;[
6Wfc&h4a?vGECo`zkc;zfqfW	Eǯ ab'kp Ez{
~kAp fS1JR/ҊZ>{1YʗB.[nx+m# !1E}ɟG
;  cM],q-z`j[5$UݴCح]0RJ:AN.{Lp'^$^wuvDdt[2q{TհtvcLxcPkP`;E{6{Ot>YV*{x?WӍ2]~YxշUr~
W{{
p`&uOECm'̴[f֧R.n$Ȇ8eMzp$Fbr WOߣ"~œy?̒qY9C5%mv`	tȓsLq?B#`~duvNx *<=r'c21=kE)Y%T<2U׋E1Dܢp{6h<2®D)QF@&uYxmNWSFs:% m634l.Nё*eHPse݋Q)R@l{3ɴng+_ A[J@Z2~?9y2EjGƛ-4lNA=~Y3ևOȅ:dԂ5}hFQ>^$lt"asv[ڏ-	%Mƽ$"4brE7Ntt7+:r^V,u@YM㓤^2<\բJCLE"q<ˣ*D#}7Q@av`e[O'"Hn+΄7b^f3trrŀTشwC}	{Rپ8R%(*Oz׽7I!\dgj?/쥭|Xet,dH5s{G"ȧάt]40\{%/}nEIa>7|~4s៶7~f6f=@V<wM鵊LkosǏN%!ߖXX26Zj۸JN<̆@'L4`
\rx\ENǌTADvjL]l11u)RxHwqeP􁆜1RM\~Pod
qQXVak 9r;s
Xi_'!)HyV5<[ooT,
=)@aP0QpgU\WТpkpeyW2RqȈ-ư63&l0Lj?D˾+1v3k͚E2PP!z8)f@6*nж7@Py78v&w!o$s
Ir*Yh*Oj^qMcJVg8cJ]B'$hwk6ͮU&1i= ~7wٿ|/w#

̤Dz,JxBEU0¸QF_)YI׃yP|%P-9wAHawdh!-iAv9xBpBL1[EDI /9Is9>BfwfA>daOjSLO`/8ݴr\=h
iT!
zȡT#=5~ny&:2W=ar
U\_̀eFn(KʖK=BOBB΁t	=kKaK !ΜMsm_Fc9VUEF"qKup^{aEAjGX'?AfmP4O	dv{ΞAJVl#]zbpdX_,:
j$0MĪeDTjm;E|'-hDZ&-"j)l$W_t>vdm hiKc,A^_czӬ,vCnެ3V;OӁYkn@4EdD^k~mAHP2>=SH*Ԫ [۰9R\`'"h첪kd
6y
_!8Vnak
ccSeiP݊c`Un]p*

5pcc$HY0.ڦ4=@:'8#+ȌElju
s.lA54$kz͏SCwujЇӍ4:^f|VREkp}D q{w:&z
:iX#:]Ci!đ=XOx_dlz#
bK#8;./_#)hB]ewG'ƛQʫaL,"kxޣʪكyiY-+[巏S@#ys"48<̳%} Ejbc
FR@Тg&Jl3+*eȉD-KH7_ҌvH:D1KsMkFbr01_M$QNIP4@	R9FWLȊQ)` l?un  !ҠTܮ@PAlZb\N-+@Ŵ@ zѨ@PuzLKq7Aó~ E](J)rajlbӐ+PڤhkOB?#l"7yb?
I%GiOc`,ђ6n!ںxJX
n3kj}v-]}g#rf3nC^U8"'Њæ4ziDiH>4i^fuPؼk) HD沶eBjZ; w|*݊!癉R ^y%v+MWpUx~g!]º_GۉI`y0Ca-
@eqr>gP+0DeLqpŉ:xg:6# ]JQΡI}̴ Qa
LWuA6`VIT/rxTWjiabwWRPTph[zV\ېrݴ{T@CT`GI7(w{BWPM'c>k[Sƶㆳm2:T
<pl2  q[Yp&-z1)̞T%s3.Ffm}~5:ĆƢK2L40ɿo
}a[{l}=1'

/L]7+p凜?t~6ɦp+:WJ?\UQ0tׁQX2En\Ck<BķVp`.BKs\JiuFkEԊ{AxOhP6=_ Axm\.[8ּVc2H1ϒopAUGygfBoQ%	 N(I3SwZf?]u4owmּ^tp}:aEzKU@n/76+ڗ{]D jw]şNu5iEdl/'-Ȓ)
 rQ
tmxhoRO@d՘+~Hr_91硒kcxCqR&EJ}SNQZi)8SN1	i⁶OqKEz+ϒT^B>enֺ>E"ևlߍz8aClX'mح/-"i w<i4~UT2۟g&N'㐳mt!Mw?Xp(qAx?U
}fna[j,*&n	JXk[-!/_LF[3C؈Bqկ̠)=OEQM>JN
\b;cƫHJ&"s\>9	dlAFV<cg^kXvb@'b]A8rr۩RO%$\	o}Yuh%ƌVX4C/%loG.{>if-BL׺v[kqQF3}^.rNGCs@(OmUUnH7RFT+9v*+1zr$
0=d\sy6aNxù2^a#L
v9D&КN:{I;Qaqu83:%Ʉ'3$BJ)qH&[%AIKe x
GGL\sQ*W	'Rl2JOpnK7_7d3A
a@6	Q5fYHak;xH9^_1UamHѳ[NO岣5)7=NfwȼKDUdocqƧqk>-1Q=R.lZXp=*DbbBYꭰbȑaY&TI\j؞[V57R(YXFRcgMtDg@gCwJDs90729?.:sVY]9v~<X+=6
dpi]
A츅x;ׁV
g˟=3[|[Ixw63
*atP]]1՝Wplni)ħz׶a4IM~V푛}!?o9uuUaMGdx?WDfr2FR5*iz)ZД qdL<a4|1IC;RQqy$ͥF N=I3GQTLHٽFކ$^Mbx+O¡U02z&-d$B`dzqvRQ%;Ndxt9ˉ zUj9Gq<VNһP$P&uf>2[s fnGȰ W
D=ܾ{mE2UX }XN{p7vX@
-p3Is_ 6[g|(J~@W0spLVjnaGmǖwKC>(?x+j/og-O`?Q׬+1~}ŶJ]װ/e;ݚ<T:88dBڲ{;1SFvd9%:@o%('	1o+cSXyHX5O\%OlqB%}xq1I:8Ei.LxLS=AY{9XX.׉	Rf!N9u[
r6:O.ϙ]:$ zL^aa$tF1M誨~VPj[a#*j\ ԜS㮗XP :U8;"L
q
'ShmUrQ$B`b+I^0)7S	Lg# bHز懧VA-xpG{
X
7':
xŬиלb|$rOKn	Fhc#X|}$pX)Nz`p b!3ED9ck-8@p~M?s<AXIA1>MBnOӷ`tL&^$	@A82D|Nm)X
cAV&~S4Q9A\2Mv$υ线o Q3d($	*;ɲf?h+*X

ꟁ{reDd8|tj0tK9/)X"J]Ka0ͣk5L_@	0uUcjob:leUVj$LA7[9Uq4`m֪9">bmtj]X՟1-}iv>d3
''=nƤqeAyTW_\t4u~=oց,7/Y٫8ƖaOg/;.9Y-`Hs8WrB[?'7Ю~MZ9Jc	+tK\wƮq](CZYy~<h?EzE3Yߌac*r.ZĚY{܇հlo&R悢Bƿ@Z	ǾG/!O̓9XKCUD*<1->!\iרohH6/,AKݣrh>.yAU)t9*A9B}(II,)޹)A<ǣjwR@]7k*c
4%:3_Em8`FX~-4Sj,R抻|Mkf7mSQ*|{̃A*Oxϲ
BX8ӱAA{Q_VHmì7ʞڈ cnr1L ձP|N*(}+]A%lf8!yM1f0݅qVDQ-Hŉ4yJL 6׸NʓO8~g.4xmpunT)GGzLȘOB6Ƥ=by wǻhH}M0瞟D 
+=iM@ojUB]7tbZgx8jA#b,%Y04~v&"B<
O?%(	Cu:ppݺپA[4AK)l4o!eb5~O`o0-fxG Xl{q.w*(IAC`mq&lPZxJ^Ǎɔ
6"
h}V6׫؉
:	 d9Gi+C-&
dG(eK>%ǚt7n5jF-Xlx,)wǃkREë,
vO(|IQF( { o ]H.^6͓_Ph4/'MfTͤ4g"\9@ނY02`<1\xِ_a.g~^^TݫfXSiF705$1 )VSS k @N7~zM5i`MvtU?Nq"aP>250K߻UVGDո8<uFe^E8$oW8+$ʅܻ1WŜ)53x)yvFGɦ P^FcL hT"k)s\,JD㽦~ד9uyJOL<VE˕|H6co
θWv=Y[|Ȁ>9.74:
Ч#Ie;6DW.&Ƈ-`$ 4"ejJ7q?V.s.iJ1/UCGSnDrᵵ7M/؉/4#=L:c:	X@JqdfG
'M2-c2^BT%81WU(]QnZ+*zIW;!=M\"g%Bu,Eb.l)	60M' R,EXK9Wx47dDAZž3]_mR@n'gOv$	_W?6|^?m4@)Nw;cEēH0gXɞl<TT`1}D2hr:ߦ lޕ̯vPt`]X	<F,5|bKkUq$pchd:6+7!f]B峏}HGaSRqex72݊1"moʝǧLS~hHE0QĮ(9?rPvJoMWYzCB8#&ZOmS"L@Uģ\+c(8txL&"9O_T+]Oԥ[ qJW@J(`9s W
 EBD2L6cҙX}Uœ)^sCnEnԄ)NAz8q: hP(7qe̝Zicfhn{K4t2h>5{faǯP	sflùelJ3
3{d(C[Q׶ T)w
9j)A>
܋l'u	
@п),:<u}t
9rOkd܉zR|3d{]{jpGrg#H}A{=Ӻ#ĵ<L:oj/~|c;9KXmvU$Q4ݕcz17܏8*A` k
AF~rigYz7#F5?K7LS 8PtVA9ǨV
ΗAyE5U|KN5O`X)|F5CSqG|5.T=`"ZNC~mjetscs⺭lw)T4%+8u"t/ILky/&*"damЪ58_:dξ!k!N
\͐Pd<ǨdHѯQ'Y?kGt<nC
`qCi$)®!u<IցN{2ij	f
a	 7 bc*[ԉLe~
qhnk:Tee2T+"͟O!Rшr Ot *Ԋƈ
0/nVG_8^zxqd'=)Ϩ$ǺtHqn4}mBßzljkOd  `w~aE;
inۓXsEO$
hrxSL7,m'ůu 7I7w&tʍwn^ѻfH9e`eHyY{IΧrӳd+(⊙)/$捽Q9
M
W,Qɖ uX】JC˚TS^9'=qAn)kxpqEBݢgMEzrpXbȚ:R~M,J	GM2:+%rF3@Ќ%OLlׁ
8D8oS|[ݧ/շXgn^ܥ5tDR'͛6{y\.r5=4
^N`(eVdnrp_Mo-վd}Cظ"
Jj))&Mgk!R쓁9k?]enRʄbJ
daHL?nxMJ6n,i$VhpT>%nx쀓ʵ /+t;8}*,Ze(kʍFC.Yޠ*i@k BVJ?މ\H:(*ZoU|Zza[i <',1.յV+{,8si
l-kxDmeuhB;t;p#~/RDv઱W\Rw2n*9ߩw}N6s2,ioQ^pMFޚiʪ\
w(2H\,
$_;WF'O_Ɗ&weͭ|L'~B7Ӗ@ؾX'IUl}*  q x+5Dǽy_@00[n`ȑwR'kq#y߻<0܌TA`\rk;$^P\ܹ
Ҳ?UU@Ӑm%B\="uF
4`+-ve)zռt^'c6}v>GJ_G*傍Al8gH*ir!id	.=[:X$z7wY_Hx&t?&jAVsI=Ie ܾ[1SBb Q0#"&+n*Ji=K 1Q?t'nPU[w q0kIx}N9rY5Bjr/w^=]fDM\NVxRS
)b;X)b\ֻ~=K΍M(pY
մu1-N܋~iӮ@)@th9nrHR`%elV:f6=_S)=_Q9lc3U	 	@T>&]U] _cCN[e2ha|yNXЅtʸE

nWr81bAС)!=kՍMdT>E]`ˠX
K
6X[R(ɨMC	Z]Μ6vAY<NeZk%)`:||E}\^N;,(	6,'p0La²nPgد	}Z߬Q)t{)\	;X]f;LN>O?NJ?è"@|k#M#Hv=V߼R'a5 7E]"ˏd== w[TF)MYCA %&b`OKh65.G}l.O6UȲ6i`O倓BbI	2k,	hVT޷fB 0ɷpg̃y)!
C57JMR100a"Js7Y<[p j4yy{1]INPdq{g=[i4.C
#wC Y;7lMBb9PJsKe8¢>h[{@1!@(KMcslpल}SfQ0rm5	ǲ0$o
KC!ed v4#-( -{,I8ft#sr03cN8foڵ\GοPnʶeBko<Knp5j2قa^ۜG^hS#<z:0jyc(*&-phX˭yb@y5c
<,P{O'W~#R?yf/^$U +
MMJ2 +"	QzZHDɡYV{\ {r}!Wo;wõj`(|ذA&Y_jXٌDŪU,ƻ [+[ a aᖯo*҄{+EI}l4Df#Fw"ww]u,Ov4Ҿ`*]QFK?"/GsMڜuO/}a0C,^g%_X2B-o};+?Hf
	W,gᾤ+y,|Y/CDTDu"lc~HfA繃[	fC3UQu\WjM[\cfnNɩEdSXx2KSJM	)ϝy6xZdEvhF00LCMr,#?2kص8Re1v7
BIEMp∋c4ZGA͞&2|M*J=gY qw.krfяMs;0:0Y " ʤ*+3GfC{J<NS'H@>8Ӄ[R$7j]5+b׋ЮECTl1^aYɯ~:>ZuYl7pHRsy9ܢ[2^a yQYQ bUcAnP?!dYL#tWe>]3vjԈIC>RMXM@ŪZyԋ|w$H
1t)8E3Ǟvĕ|1+*i[2hA}o?((! >lNˍZLX;^%o#d!U(3DYʑYjaCF_m{9᧋< KJ2$&zRkNoU$2XC^h	QF~-W\z@Aoq+ѼfZȄ@ז+$R$	^HBHJu/ 1[HB(ov6ʆS,7"%F\^N4*_NN1,(BD_Q^t
^]8[^
2 Te3*qnQNRf$u f\/
mNZ:Ւnt!Z'7ٗ@;҉[Qox
[./סGW7kF}V{xD[
\.lDd|&_:ȡ~$Z^wTjpqjxA8Pi|=y#_L@(ki&=B%vWK@ߜ
?#Ѻ/ˏYuz}6KӂRGvU+^}mL(!n.S~èw5	D-zqO
%b[$ LĐo!3'7i>
&+߇
c`bq۫6l-ҫr]<lMZ02Ɏ7Օ}
r$"sXIy݇d̒?YOPGWtqi	L(&5\n'
7i 	@<IH[!c_Z(	JʌvB_&An	
X	:dչK(i%\I%!3}{W?AϦT$RR>{"-߲Nl(F ~{΃/$YJt߂+|DX".}<"U倛6g6FJwQ̦$9\XXWsTP
)VxcVUHAgFM5h]/60 (;{&	 <7Q8<ޅfB*0M5w̧Tq'3>3qΪm#-\(]-=F}	Y'D	iiu{ oEv=eR2`n橈-\̱7+
ɺ6^NVKd=v@Aczq=i17$#@x=Z8Pf	`Fg:gD~ٗjlA7_v5~6+V{/zY/Qݕ?7Fal{O]\
EiwNN?:
iwVBFs5Lfd,Cb鷐hd  :4,iyQB3F)|OOG<u}(ڜbsb7Xulsa{t`ٽ90'jOH:(e2!_4
KY륻J2eW$x#1_{?+4z4c"Ut_ewcm?*qRʬ	΂(Aɮҭ3O?yГ3RK
U{lg#JC(~/;&ZMu~Mx!2Ii2%[%%9Gl#T?`{^5;$ظ}kWK{A|MM`qKl*ZMMZE\Q]=Yn'/FR'
pC`:T9vNXk|S]4x@B0kԘ\[įr:2
=K,66xS	=};7Ó/y_H)]PRmQl@s9$8\-k.jWPAP$m|tpdo,09rzЂJr;V;Ks3A?EuU*@6S-n8c!8o}]/ u|bMdUyc؉vP
;}a% vځO_9λ*9y/2 9wzǭ1%2רZ6#n\ CNP"r٣$!K<X0&}<)5y$ȵ4z΍8opǅ~Zn#ϙZ-Bd_8+d6^h̏H}$Lɥnx7'|e3p3Gc,
E6!y
pXQ|A2~D+  _	+y.=+ݬyÎ
!!uG0|ɔ|6!sjWKmBn8ie sNZsZeY1\6MSuNOڿ}l<JE[,FpBrݏЗg󆠪CNc)"/M42kq/)%=MV:Wh;?2'q57kJJ'iBxIf1w}R'vZ01l,|2%/Jm |sjBXHcwP%ǽ
Bep88GΊ# =e3@J{Mmn>Cup)WIy6ͬseqb>we-uBJՙpXrx@j<%g`JZQ:`n9ˆ9b3)2 #,(E#={%W.iczN,&Pm~վ:r5դQN$NW;]-cPFsˌ r!2	M1@\] **x{Dѐż7ڙ$A<ۗՑ` 7>F4A>[xj
uYKŻ9ep7/+B>o"<9Ҙ|@zc27!25q1@MVqQ+Tp7gnCIwu3@F#n5v׳l蚝2*ƽe5'-BH+3麎)W=
9y %)X?48wU A<hw|̦>.On+O\lf~͈) ubdB<BOQK<XΩcr 9~֥d	zo1ˊUHk?rj8InpOPMWfB;{B]w-?ֶ3	> T#-QF국.kMn51
Tc6x٦O' `2u/p:4	T>(*LJ<յg2Ti!UJ]-,:<bt/=Aűx|Kq=Uky(5ARhEU*y1NiyN	>oJmAV関o0)<.Q*hp{YbaTCBe#)!}^@gj;6w
٥g-eRZ@h+ln>[ynBa~D~[5ЈI6ulQcnbỞ	.ҢSL$t*QJQ[b/E(d/؁4po_Sa 0rG'pG8@'8F@Sxs.Qvz)m+\:9máOa7ÏhE@1+i4X׋g]oTCD  'D\t	_TS4rx nƚdw:Sv<@q"-{/}ҪZ*ޢ(o?G/B'
C$&g\ߤtk7yX=4'"h$7M~ڝ}7zW$zx""h >=q(po4oV{+=ުQwZ]hه_>خ%.nm%,_r48_`lPk!:A>
w
rW2+x)٬h^CtnM e8O\`̏k?Qὄ6_x{f\ߢ>adڐI7+y!&ZEo%}B([˒׳`}/z4~]\U@m\A>8qz5<$\-8Bgs`+RV8Z^(EM񜙘}tgd:Yz+"EeMҷ1-5qL:*+
Xn.ǡrc*H O?NppniD3KM
]V=mLv B-D[w]=Gd[9CͻŁQdݓpSpwyd]/~Q?~~2I&HDeQ3䔞dw(@:uYcig^Cr<*^Xu''F&#3
F")p.4[|)(I2U"ňb"Ll퐅Ȃ>n>vƬ5g1TMKPZOQʈӚ5(!kБ㣫ܼHki*pGnc\0A-م`
M-_8hadygځGc@]aTIQ^]E
.8MF5;5l/D`Ί̱&]ɂB,.ۈjv5m>wS6{t(i$MHɈc@9P)u4`6x׊"pXكPM)f]@4C됮U5.fIzh9	[R\Ѱڣog	bG'"~g*CTuG'vQdk$oj֏	L몟9-]MyvB&xU/!"$5F@qfkUO;6A\U gx
[g(t#cW/gy C\SukW7D[twĬ?ֆwɬ1ezܟk'>jFIE2rz	pp;-@==0 *6
T;) иuG:<Mni 4cWZ-:\F&w)K׍p	й滻SvV("p1"InGj/.iD2}*jkT"黟}1xhS6kd1SUd$ݦzCT'ʊwҜ7q=^[Zg?p
O7#ּ$Wi/}?6TxQ0F":0<U_#^{zs'DEF]sɟ'=ֶ$f
,Kmh Lr}Fx<(a7T?D"a4~٬;b#?yK!1ڜ@d*YȹQjvNowĞl F4NMvmdMO9L=Ka@U@o7ABnj>SP#+R| iAGLN%Xe/:6E_͂O(xp
 ڕ_}xH1's-qhS/gVn8]f2HG@
M7f "zlykC.XvxPGeն5OHU޻x5f"DW4X>(|És@-EHamy7)pM7-%5`i;LhywDp;^ҍ)j
aIe7M95vNj.۾9
ϙ4՝Wi(F?oS=ql.f<Jr.4·@*|ิDsg E{0(Փ"B]
B#Bwla&Sap}6aصQhV8ˀ{VNLBNÂ
.@'Ӛ&k:Լ=m4W*wU/,Qɿ'=4$a8{;, cǐ#aM(Q)^HΟ-%O kWpѦ["C=ǔi_8F¥՟>'
Iq0Rˣ$ PǓtd6g/\"LRdwD{bF3w=Y.x )ѫ4JE;'\ ZQM!\ŷP`IKne}řn9᠆ޯmN3~
	mBӴsR9|hA-P]'
TLNzD4N>m(2M\Ʌad^nE=Hf)dfFv/w7pĊ'l̐ZۊdGڌ8x`kj|2ԄCB^(P	&\႐RNU'<]|beGkPe#!3a2,wTFgWYCUEDk2 N!882"3aWA?fQؾrdg-6Ju)G̛o[aHL/`[B|?g;cb|m2YEz.=Z*@F$B凂͑ܝ
iWn^hCyQQV7grܼ3Ctԯɰ)
iAzɪpcQS:[+}OW*P8
":]H͛FSvrƼV 8(dƄ|r/C?j9S]ǲlou|~25pGxRH(skӽ	2XAǥXݕ;~nWbApcCA[6BOJ;.<"U
^3"ښaEeJ X]tnp&S2%Ky0~s^vAszo;OzECg.]!*hIs<'j#I ҝC,3Ԃum$=_Cx&,_Y6c]k+( wx)c*_c
=	9BAί~,*[=Cj?TF"7js_>!e#WYEW菫
hEϵһ:6˧uF-~[gU;ϓ!ghv_Us+F,d}jg$[s,dD6E8PK*UdTL%-/nz|$cX.H 51eI>n}c9AN0q:x&7=kQHd(YV a -2	$W\\AWwk!9~앸yB_Z#Ez
ӕ?)@#
c#F<9ڮG~ۊ$b{5	$t}՝g̹I^%l#9S jv*F'
`,,/-ϭ! +m';6;jIsNYIS qg69#YoKD@YRT$za~Ft]Α^Oɦ 5w{s,ԫg3

:,-ޟe񄡯Cc
VHhYϦ.e<{nw.d+7*ҏ$J.@U?81LYۮsp!T!t7w[ZZ*QIi[ぷE[ȇP7V)>4uarz4RbhH!tB~?SPCl%UG=׹f
24']ONDEKjj;EQ2[ot
.&c&`2E<ѳ7IG|NmCZg
ɁVʪݩE~꣚=Y@`xK
);ԳcPr촅dKBtVxc}zTM'%0icU6qrfRH{`Y[d>c`ii;Gѱ)kĄ*Ǹ-fvQމsA~ep[thƍf6)DQzNSY2N#pZm ʺ!Dܴ֍DBJFM^2'a%'r?4n*Bddð\-xm W8?<^9Be7-p\I,0	Ւ6|e5֧r/'.b&ܮ򌥧uuJ1PY%1+QncOs .O)<ܲ7	I)-<iD*2\	yUDjdBSfbc7]h<jT
[½V;9l(vtE'~$z-|si}rdoDozfc,ochu)ʓ4#L PM`tD IbDi4; ITN<y 0BIy`򫴽(<aG
B]+FEf>sxuܲY>ie9E⵾`hBcaќsX-.Z~b8880GB,]]^][`[\F>G׃w ۩buA3{_ÄJkLk@3$|pR[V
]7*6)i,;Fm_s@%ZY^j{PKetPax4an{~MHɞ!|2`mEpƏ^H_;("}Ly1ƺB%K tפVe-ׇ,3zQ;jT4͟jT
׫@nk@gy:Od?@]ppXN529AUكr4:D!^]OϘrpлUrybꄽTr0'	[Ng\4L.K?ɍA>wIS(qgb+;G/=ڸk}!WqcC}AǬ
{QQ̣p9^ۂF׍zm(=O᫝/y4C`b^_:m
)*-F}(221(
u@30z"hnR߿JҭuE>_-To3%z+_K7nfV*D^g#g/퀐eyʲAvBXm(dO
0J_M&&+-<)KdCQv>I`s㺼|K߻ );P
¬,!toŗ -3Rr![e Jr,2Ȑ;z6w5(\bZӬl3!J@i'լq;
O޳Z!7)xVZzr޻L]h<(y)*»NC=l.sBfQQ:Ud4n@lځDˊFP+Xy.).*gs+d^
`]u)l./F=#\MX9ͽ¤ȉcd֮kimuYÌ݁dn W8Y&dE^KLԤ|ߏuM7;MnK0K,mirmΈ?"u>m'm`4mR6>^P~cydwcs.1⎂篮8PBihlaI#JwBXE="<$B	(+cxH}YwzY[`?gQ8hԡ|;TP
_L
p(&RK٣ȫB>:(62=3
4y4788}rfpn:1H}$֊M*4*Sv0~4Tn\_/n:rWooB%j,{f
!j+`p1j	&:j#
͵p)c3!իn]^٭-0w6#&F4(Fd\S=;b
+|}&x}"_ăJrSO&B4:*zIosgSv毺.	gluVUdMq̀tJs
Y-B<kKIJO	o8Uu3{y~@&ܲ%~*;E&^EFB.%dkI	5hg#V+|6Gy
AWPR`N\	a[6߷#=b )yR8)ԕÔ4@'|Y>hP=:-JF`=ikzjNsCX;3;[	 cGb}[\=^Vfi:Q\$ךԜn1}v/Oz@MYԽ\zu\n+i2Lߋz>8nǗkZ^ IdQJ>Q(cj
]Xűcl5^tyâ@8UzPWH>3%j˶$ޜIm9$CoUe,}1(=!ej1#jmR͋SxQ	ҁ].	9ݤ}㩆`DdÖ<.@|vMO*[Dw5 ~z0ʃ>|!Ki4=CofFVMAUqRԪ㝫Be;Ebt#L2a)@.ؤ +d'a_OĈi N<fvWG.%%eʥ5aozԨڷN({<u?)i>M|
D+-	"1SD]tw놷 =gl	4Jꤴ=w!
#d8 3lnQ^nRYjՃ~wg[ڭo=L5gA,r
NT 4, ,#^aO_#!
t]1463[䃂%XEJcP}@}:AIIcsjwN&+"Pf
+Ydj5W'v`^eXqyZה0@CTPZzBzgF{\8ݣ(x~'=fl^;5dH{GyCM>=BYJ ^ &1J&Y
\"bc	:PJ, M)K!/6H<{_7r8rćS#k*\09s3^.`MDAupN~%L'g@tOZTJy+S'9UYfdfwَN,ہ)5a}tR| (畐u2lj$}@GZ}#WW4E0[
#qSu.Pg9j,1b"FH+)V~
Ox(\kp޷m점<[iM<]$ԕ{R;h"Ui	->'ַ9W^t<o[j@ 2jk'PFX\@(x$mATǃhtsn:m	x0EY/ZcY1E <O6Zs,@>YtLO /%vѿ^/w4bӀY#_,Q8?ꁌqVZou[q.N@AWJ[QNb޷($ؖBͤ"^N
xzm`zJƢ*T{10{;'@5+ZK6~dS;dgW6-0Vk$KrׯyO0jR
([e֬y#3v0;H0_	`lԉBb(\oԦ,r<z6qFy{7f)QRvrVA:jlv^1ݺhA{9MNE`Com\=l>=֪f&K* 0X;izXS,1b+Vm=WEua T	}iBf~^D@kイ5>}UnA=!ZgV̒mvSۄFZL)e4	I+Mu-p?tR^k=mxsgNHDz*wqM|&8>s棙K#ibI8v&|Eb99eqٝDS{q(k[r*`8z ?UP-ՙ3K^(s0{ݽ3%1[cS0¿gz	nqdyBz?ש)\ aGOć%J:0Ae8.d&yƄҎkS4m"А5SOD:GJ/g45!nEtHR91:cŐz/O.!\<t4K\${ڰyLYnI)TQ:dt>"/D"DXE1|U#Jmk-S/ҢM᫕+o|9BfPzPu	RgB92(Hf		Zf@{U*5ek-rT
lPµ*q_]Y}ǡЀדc%EzXKl}tchT|h&6tmWSxK#)kE1 秃!#~M2Bi2E9]QK	PXc4W/-	T2&z'ǕEX#>Ψ8
0#3) B@f!d
Z^xUw
FD,S(-q\W@EؑrYYK.[׎w{W+ʤA6K"MsF[9&7̩-sQ}XXMe9A\ڹ1??V/ǋP	{ZB	8k!RV&j19 @|M 	!O[>"`If-H9,s`dWrq&@x0#_#k>!of"osYgp
PqVgt=QR&(dv5%B:7T-uѨI9WozN@əy=ÄΠݚ7TܚV@axS*4Qb=-j88"꾛S!t~lSmk#QqM=X@,'bv}й	u Νi0(LOegbL#ܯbWzC_*U3	򭵆PQGA1LZ^Y Qr*[A§+.@^nhy	fp<<$]!J6LH2%eF TNĲe[}f#RZPb-jQvzu[02"9vHyұA+/z7ɄN_њn5zr^w	:;KsŚ<GOt	zr2>w23 1C!i?E~l[jnvG<~l	@LͱKTɸ7g(SW]=W:@Eނ^ `xn|::=k#
ze LyNVbq],u,r?@5N>~,9D42,!g_~j	
1:ьU8}//G @_>}t&ۍ<o߈iYN8c%fڲס<t>}
)="l
s,"Яz \@}߸|:NY7a	Xr?tJAżu
"bebO6?!O gèpBM\0EJ8?#˲xp9[894n7;ȟz3dHH%8]`
x_vDkP$
Z3ll}WJ3!P7$?Z.6ACF
2&dn:OQ/JL*Ȁf<Cك`$/Sg˳(z_0%ȹ	H[J_d#	OoTg&2[޷%U%!
"uwDC}<4VK"z}gL\iC|{hkjEm:,=2Ӌ=-8X$vŮ?1Ll:)s	zP96主^jmMʓ֘KJD?i=#K"/gadd
!:fu&;;Fmqf4@QySr[\
YS	_o3O-h 6692gI\wē8f1 5 40iJd#4:HSr ́$5^h LgE$a4Ĝi
_`=4|

8/C(GZtlF^n8_,DF8bd8B\XQWR&}0#2(K<gq"x>#̡?#]'W*Pu:7_>	2S\K.BEbpswDm,y!V08C6GFSV#?SuX)dÛ wL_sR{,ǐ
(Ą؋O²:IlgwdadrNH`^C(f]h;aFUҺ?c5#Tmљ+X6HPI
k	ݏTtmxFJ5*fgRǛ|h Ļ˖	c.j{$w0OZHzKlnY(z aMHLΑ_
?}P$|0QtT0$CZ%BO ~RJUzR\`׶'bɃk5
'7O!x.p+q/P[T{y(Uۭ*QwmDyέcDVpJX7e^Q3uyE6"ڰIfk$X!
=9~	 kG+Q)8гt7L%Eya"7(f
Ɩ[}G *-uojerޘ	îS.z"}<o9Ekb1C-2]x"<Zggġ.}[$
3Dߦmkt2<)<M(ME<*F,V;+uJtxJKy,q
tF!1uKs\v? !A_7Zi٢@4ǩFK k̿m]DpC*~qEo{Lova>9tq}bX^`I{%jxɂ /z@6i~\BC3gfc06K{[VY7Dja	oBa҃6[q}!m^U<;P;Zz_a4ïO
Bdqul׫XxhZn	d)؜	YMTLiTͣ4M4?9+ŻSFvL<AbDO>W۽,iصV($2oyjMc}K׺%)+n
T< L%eg촧ٝE4.<v^cYqi&;y~)Vy[<1˱ܮ$ZƆc/Bڰށu/8关qIZVdF֪
l!!x?/čǽt֎i٣bsZmRq8=H+TUPnlT=<O]1ʅ"?t,38+Z1e
6PsM'7p+)ap=1*oLou^8~pgfc/Ӊ#K],io]JG'$)Dvvhֳ[KYիXA,5*|(Yԝ[09{<䗦C˩aW7qN|Bp7E65ޞ<Bnfę6$agi Jk)DTTg?h>m
KA#Y?(}CbxGAZr|,ȬK=KfJcڵGLM2m
=Ƨ `᠛90ۈkD/D@'c	cU.Tx#s`le<EDX"{i:$钖aN@&|	!/sIzօu @Y<sPJ4,6KYn!|xX5t&Jev4wrx߫<#``VO.\B
i]4DrEd{15A*-vE'Z'4/arcQ?Ӝͥ8ģ0+A~MAE&g]F]4<5!|9(ޙ./\zUX^ԙ*|Kr]Oж`fA."r>6d21=OF>5>n0R<-թ턊mqECdJO2[%clhp}js~ؓaԭMC)o/Wuiy-!1U.Drpr810@fr.B(ЇSqn*PD[*'^^}]|}% Befj&<%EY`d^4,Tп^(za琙F2kd/|Wybd}0seA|/ݤDor݇7Hbh (@8lG@
4mICjoݥU ˷M ӭ֕W84!|M@BbӄPN猳gtDKǄ`<E}mR >zwdَ "T _eey|Lsq}~I$+P3׸bP3-cG+*zIvT < e$
g7Nܔ-ȍ(F\ۄ\ Ҝa$K5^?95[ya⭝!h~VFU5n9̂46>EŊRvfeo-5Ǯsl

V ,nOu
๒+hM,Үf=T)CA*Vz<OqAy}Fl^3PAԈxa'q	.]"Axr(㚜
C n
xыItf?aW21<(y}`B4Ǆ`\7B7;&Fb.>͙tlt/}6!VJf*SwWB\ѨqVwf?0=37$""XMT
pxW_WK
`1FPc~,dT<yw#61/`ELKv`tTM
 #-:-dH}Fcs<f}5ɲJj"q<jv VF`>[GGg,BLsյ4arp9~'T@>dXNP¦k6-kB ?e]Hoˮ=e=G9i8J᚛3$pڰ( B$
myK^w%Lzw[	g>Rn]\DO$eio&܂K7?L/}@"dk엶bTQe{{#j]t)_o&;\`(|#>٩ȯ$y#0=+Lslt8H	E5%!5wb<V@cjQ9SP*D9ڟh;+sw/'1mT1*O[u,}pmQ}o(:E=M˥ uу`$VIRTy[kT(|#vO'vsV*'U_ZNb!G%W#e^ GrA1&렦XR)ݹT%$|S~L0{&sZ>GXHK+t(7G61*|]/06"45ADVX4
p1}&瀸+$4	^1X[^he*!Q|ʃyڪw&=N2gSc{=UId8PӭBɚL)W2Z?&yTXpH׀Ɔ/^@lߕ $mAVBK|l?6El`<5|786\|+F>]̛Y2){7Y&A7ݹaE	i|JT;u= +"& ]ಆ 
$ot{r\s`bkZM%E~X΂GSԁFsX'zYIFsog$S+ yK=֯<|PKf3ҁ+	eFN^r{U$7#ə%
p~(9Li4]L>Nb{Iү:뀛5IB gAAӊ	S9^-3.Dk˦̃Yᮽ24BZBY{ ԦHI=b%SnHR<T|3$u?tf=93PNJtD{":H_ʜNğDB=>e'%f'F.gS+P,s(!&D&X
]
nOng?Dxsb
ֶuȜSV"dp}b.!pշ뒸`RJOtvI>T:@lDo߼ir<d,A>n*6Ikf~2ЁEZ;QZ͓tY0-T
G?_MH)*Z,x~pJz`<H5P_Y˕%jR|HѼcH\bA8:G .u8_߳UEӉΊ׍_Ww
Y/9)Cߕp =#	OmtBvŭOhBQ5?8YQM`#nL!旲^6Ƣ	0рp}r&^HmVo>46(u$79!R 'g^
dx
_Ome>=U.|~jN
~3`,WrѫJi.9aQ5pAS+[va%؟f[#J}A¶;b2B̐1LUg\ʆ&(6-"gDϹ-im
QpL-XWF譫Y=_
ߥ1ݏJJ)3eczrm:nJ:TNA0y!P q{ IpK~UZ~(JZ:qQ!-m6XaS#LFL>Lϧ$P OYsrgBvm.?ۧ"e1/r#Wz>Cm }aѩ]	;;_H~J^*85|eSEos	1et%L6~ux[[RnLdiwjUf$Ex%::X]]_^#?f{nM NwchTم&0	̚3!-[H8`~v/L$^usk̟uQl#@zܵ}@`r-Vtd|]_eУƬ;}O{!_]>ȔS%JOw62	'OvG`$)DHFv\նfy*ڲF
Fch"31;4HFuS/	²ټ-[]vcӣ(Z@v#;-	6[jYeڸԊPE}啕c&uJIud-XaM^*ﰶ4d ~<0cb$J?I@$%H[e.ys3㉄-KS}J^uA٬eo\(W0$	b)<ᦎ8K+]OvJ4$Q:R
^3Fpb^=yɬAYv'%n#6+Z|LVזazI:>CL
l>|xvh{LϘ_D2BIłN

O,{D]rnv]¢F1kM3Ǵ	6
<UaVS.3}]ÉȮykjQ{P&{tC4߃T1Pj|0pb&jsL*$>l
u&= dSZ:++[ЙCҼ:fsr,=|edo(Q5,
,Wmchv*oҡMuST.0DaD%=m 2ҚQxZ^ԸK0e)X/C@R!<rZd2!^hbJ{$ZthIQ:V
4b۰dburS+滈lF݆IWiɠ,~79dW ;'1CeKҍ1O)	̇qNGj:0] 6I5>.]"srj;($M
r -Tӭ$@Մ?ApۢJ-ע"cD3%,R=7w\SU[v_ ,0e}'xtuvX>7?<]@S)Bzzڈ"<)#FRQ2U2V)qeX 1ܠ9"Wq='҂۞sv5W23,sBiuitzOsyBR8*ck{VRX(R¢@B
Ƣ~ԕ,^'Gw4Y;^4Q"?՟ʰqT~"
JO,Y.#HEtT	Tz9(0n_,B4$z
-*º嘆D I]uY!kl6J;
K߀ӂ/DKsAD.qkW`;EҦmREt͜=dڜ6Pr	:Erw<i~y41λ}c#|dY]&x((=Z>''"֍
.[
\p%l꼛-C 񈀈k`&@F ZTZDe!Qy&:A5Ö߱}(*6v-N9(ډݫh$wxDm(#6\'&G&o*#*ƍ!Eψ$s3zaotP6My2%эkXZ<r=\}3:.7~[	30E(ە/
pG&o"P&
>9z5ĬZz(E }h}4ouȫ"WԍْlX>r_n.^
R}tlRs)S.׶=6Ĝwpw1=vKɃs-lPyY3~%G)R&D{zHad*i	CŮgU_![^҉AT:=K/sr8~<v8RBv7Ӟ%8qӧkɱQ>myΓ.4͍h&eh!C'.d0܍K1o?Tb=;F_̑I`? >.e-CT=*}<F9zFo*XO4Uq(hX
|ƻJqjuh
/܎Ta
nҵpM6\ջPG
?U$nI'[QDj"tUJj.ۥ_mUIpqneT8췟L,~É ,j/j)gS/XY%޾Jk dŜ
GKkBTDZ
욍;euv~\FnjXr=R"TfoN&^o:z}W`ih
DP?[J4l(`hJFUzc-MΑaܙkrvKmJdY?8cřI-bDTLTm~΂bbH`J~Ϥq]]X2'(W=*aOlbb_>WȃwMKcI-}g}iy]=hI08`(ueDŜtVW:Mul=ɢl%E
s?A
is
Hq",UMf?f-IZcj$f<cRCƯ>Q&,!v3-P΅tbGUy
ʼ0ɹ]&׺q[)`7A,*l`<̞
(߾|~\=@jlٵio@.=ڗv~\jV	t'@nLE46(UG
.͡ Xk4PV30*+#->Uft۬3
캾m_M:}jջ#ԎoX#8jX34LXQՍZyra	QCbizbrKA0E|/ma<hB=dI!O4T<Yh=8L$*ڽX$ ~pU!6ǉn>0gW>WmۻK;>guoͼ돱tp~UJѨ75"o;4 CLܦ5ȐQzKYY#T3>,Ǚ 9E~Ҷㅡrñg([u͸Ө<E"@~
-b%0}xL"h"Jm)U%NDӭS#҈ǬCK'Vݜ{	C&UM۞.vj5j h#d0]lv(&W4-?72q SlI3Q]ʌ6`q~XZ媮xy<*cF1[L&h36ebΉG=M-^{' #M	ѲlҚf8n?g,7B(`w`+HT
xҶ[
&"  #{i#^\t(+
@=oS
R?*Cp;wQPECk 8,[ENߺQ#bqu5XU;x.MZƙ'7or|cCā@<ή9U-;a{D{	fpyLTd3Ka[J涕x Nk#f|, X%<yݙ}UqGBOWm槌R0K̀8 ^s'iw-/m	9u^-'Z+ϣ	Y+Pd(\bA^LK%q>Cf3E%m9;0/)
bF2)- @^!BϝgC<wȓ>gXrwb2'|"C|ő_	\QGܟTh?m\g,zx(+$(<VXU)>m<mׂAGr_4{bQ9Z`C9{yn6	-t!΅JNeы9si\K!*_ eacN1I~5ԡK
PӨ#rHXy,«Z/|mraιh܍^\6l
l_'Qgƭr6NU:"1++';[6LANQY'=sFh#@xɩ{!v3B\ͫv4x=]tyn)6&0kL
wʆOϋ7&3fd}EGr4`)b2oinsP)q['RT\5KρrG[kBYzy0߿V+\	϶@S
I<xM|NNG5,YY, }:<89|h껒6N=ȆѡG:z0w9ߎ7Dy0f&pJ[L
ASQB~86|Fg)x)qQPi6ENd'C5.Z(DFeqK0mv{U;;*tTsU=뀺+ّ_{13Q6X_0R;Z.3Rd¯gVJJ;&%J FQ YCVs9,g<*u
'%jxCNF,TP=\Nw}JrKEIn[eKD𚦸&*Ճ;>\)7m(6LH*Y!o0 @
p}:K9Zuv>Zb;|8	䥄6KY1d4B蔔Ec)k/BgoS$MqA1s4qXH%],޹zvre WreKnNdC+NFLO =	A:^5L	8FI\ pIr7R%D*s 	0$$}+:GО۶.Rl9`OV%`2UjH RY,rC>uzǝ:+yO8A[#p;vU^nI7K
$StD7ҟf>"AH*1<l
5j D*j<8&BV"lQ]$WJ5QoYBfT jM6X8bf-- f
AA,1~=SSz*(*VGØ\i)]|SeXpp?igzZؿXZ1}sdgq﷈ɩ]TpK%p{f3+ pŗ-tnbۨ'
x<EÄtQeP4ip1=n܈AɠǾ7"
(4?[B*`%<BaGpЯ@6}-%(+ r1r~԰'$
ɼ<w*]LALaMJ H߅^=.D[+!ZЛҫOKھM}dmmLΫz؜R!é31Qų[d0Z"NE'<TKUY 0KB$DLC!
8E{HJsiGl7Dixb
0@l`I=%p\͉ 9b$ 4'IX
>ᚣ}ߜ_A7mϣFr0|*!G`RMuGpM+
@
wFBk^W2//[9F23ATBe	)J^o#$V tZHz^LY{
Eb%H>Ȟ:LA؟:$RO(^-vqȋu<Q:>UW|p5Q*U|
h$2ݔXS))KR˪%w˓jyvbVA-S"B
	Wg$b
uis4\b \);V{L<v. qPR}eKB^T<Vn6p^jF#9fPɥ-.JrnmM{B1
4b	)J I(lHԗ
do{Acʰ=0!}7+I`gupxVfSXmH
x<=ϐQ,`1	]`k4l
9"-VȣW*rL❷;~̬+	}m[qRcv\'!No 3qo;/t@>#KJQOܫ+1s=sZKH;mEJt-ݫmH	VNF"!Q&،(W\npv{$?$i^:R8Pci~IQjl]*ٸ4Q)N*G~^||\xc,Hd>_I9Ka#nc+QUE|MCuVϏqc蒮N'6lD wʝu$&o8e篝P!.	[f{{Z[ޢl
ѓOWO,ϻE;|mcEVIdUjxOɬr(UEPNS:Ѐ[hcf#ciwV9358is&姄ekb
JhfX%ʡgoA;Sh?Q.~O;
VER`"Fb)⃺3HqH$V Käk;ɱlahZh\/"
Q/XHfoG&í=x'J>$KL~E-^8?Uq<h!Űx`,Fvwk'xMa%̲Ȏ4ĥnnqIu0%}/%J@6)Ml`!՟L*ԃsoxxңi%)[pRb̏~4%P!=e<!1GS)	}_dqGh܅w䫲xASCРElĽc<Y#C>d$z, -Ԯ#mLgaMIt^_\ؙ0XvL~~=;Pq2&~ϛ*1"x]5|Dmsc
(zUk
te:d54s:h*Dl8O47=LO^oRж]Z<v
Jt,B*/t

r̓rd1`A<S6ԗ$o3bܴ0$M?WnQA|EGx:G<cqi0L[4l0gt>LKcP2
|gUcN~/dj˹g/@X30,->οH_`@HT` ё-̹c{$N?U.\ 0hH2wb+$tF= tx\fмzE~BI%sϣXzރj<Y6$$B}]v[FnOoibOړDPT?sVYWx3},cMR-W2,NgFiD4]|J'T$kߚ{	Zc\+jǩD=,ʳ󹴯d6'кŮg("$Tpջ)QI\U Cɪ3*7~xb4V_eI3tCOq,o("gx8I yޠд!>:Xns^B	i'ܽ $jSs7pކ˗'K.ި#KR!_T}Bgt<cS?
Nؽ(y ǔm(!K+xoxﮰwa ~EGS$(yl+!-Yތ.ؑ&:FtdWUnÚ6P#/7x\ 
T17BBV Ԡi6Q,k!oKRJ>:c7&t?
 {`9ے+wcpE)1Q2QӘ)ZB7"^QQ 
&xzg8Bw9d$sRU̇b t:y
͜$nR^Bu:[i%Z82&lpg
%ZK8TZMX"$/u\^^5꙯0$`mHx5܎w 2:ػ&C!>^)dkxOlpk5_%
l>pLnrpf.a˱F\
OHfa&'"1.b
Kw'">+uz
Vm5
͍vTb/jf	yc`n%N-9/zvf ~^2ZLOJ F}r8L+L:1ɲX,26iY`-ǯ=*T<5;naOc8v5B@[84*On2]nWqrw;}^TLޫ$<6>,)b˱gK= g2u?C8ebC5Ҭ:Z
y"f؞~Rw%nKȍAo3ra*
cpgп/|}tS6R!4kMzhh]RJ`qMRr8.R4c|~S?$BjeR0uK֒@9lť/YNгF8Ji'PΎw%2%WE2ۅmj`4;Pk/Ƞ'R}aB/OkbDd9YQ@g	Vb}~<1be)[t5&R$dryzٹMjh5uWU}жzu
%kk .x=zaKQpuQ>35]dd+ADZF!3dZw^$π,d#뵰!o_&$f	N
;S_ n}Tr#>N-/]8́ :ZV":.iwU0=fخq{*<p(ξsW< |,J0&=	]F8M@7x/UC}xo(8!⏕#DNtNDf?w!e=eKJ]:Y5
h9~+lKJ'􈊗~&6xR<;h@O0|usJksd	lag8f絣qn?lHumZ9,Wp2B4Q<kA˛Ub@s)m^
k 1!BHu'Qڋ4lP 
@؂:K<|ܰҽ^h@Kl9WR6cݻL>2xy0zqǜ:jtޢ!}h	U	/<I"1WTn!7^{HsFޠ|GB	JXMJϾ;0gNhwxĈsCwk5ϊ+@mo`NnCz/w]xpش @s^!L*nJwIhC=꾷 v1a;ᑦo˖ہ+մ?Ʊ
,DDՙɘG
v«*v<z.?^κ]p#TskCQd\9]o,:Tu~4U-]Gf8({q%)δ.M`
gjLf,c+buAy^ɰ>ߛ9M gDԉ48 ornN+m1bPx[qlzK"'3DyJ
Y-r^sshg nuq!Ex
Ycz?,\ٜ^^86gysJbei
G?u's]&I;4QػH@c3IyK~!ԣpt;9әW]+Z9CnBR<i'v4{[_jSuyܜ;*gF%I%/7gumMTNӊ_y$QEPdxLamj|٢4`&$+.4cO}tw1XiKO Yac]$ɾ-̜}xܥx(nbBlfLea͋CbSğQYg#!/EFvn ojCi@fJE̅^
l4H=
^')9}ͺv{%'iz?T5UaOqh̽eɖ4jFLM.B?v|~w<g𳳑PioGu@vs}Ĺ"]\LwЄzn=:,mmLK	 &ztHot3OQSR>wJ@lY'5}cJU2׳(c`qf8f8tzh3r1;֓
P(;f8\sa\;NVB8vc
r. LҺ=XcMR1`$RˇIIW.tV*H2Ê:QD
)
aVJ	sxggRٿ#DSH<]H2S/+y6&HnA<`ϟñb,SYCr5iDr!9UzPT0 Z֧8Y@@Zer\=Ivx.%kPJafbLIRz9N iDt+{P!J$"*RdFڷz{.+IMkyF8<r6=
_Xjd	XCFXPJ	UNXz\^TOI)$ek1<l(.p8E If;\t\.}uD"Z<L9QTGmXRy@[(JqMs?fṷ}kYuOpI&XW"0(UQ.3]2!8n:f[~@\-YOPx8z>1eoiW8pYEw5="q*`8b~fP_9DW D]}zT1>!ѰO|f-]6GGOx"
Ջb߱)=qwttO_PTil6q<ɸ½Q  itB-Q%ʒcҩ>ӕPd&F	zM/?#)9z/ȀA\Z,Hffu4֖yJxf;BxX$q-d YE_2+A`U.F&C/6
ǦNH>gj`Ϩw1i*w/;nj[x9z\(P%b6QRZ }|o跠*l1#M]ǖ:1E*h#$	&B<w/n.wɛ_8@@)ӟi,t-GЙ(Lp ,Mu\#'&Dmltj_#.N]'0ELTRi~ӔIrjyC(tn͐IǪFC
&PJ>|$dG
!fd-q缕
DrQ,٪WT\¤Fr[.ZsNĎF]!3azR&T	"[_
2?Ppȏ2;?snKmsC?l0	Wod}eV,r6%srG-&Mc6
/u{|:luїErtoI Cz|lZ㿣}SP)STdE?OxNXT^1s@<AM(1Q6Vs+F ćZr~w#e	]N$
ǑaiQQ,EX!gYs6Qv&)z&*5q%qBb0hKwOh[xeu79|o]l @ڧFL}#0v,/H+hh:ʎPdyJIRs
l/Z{aIpG  EN {+3-qץTC4W^Gޱgx49/_9e,YG=e#XpwgWIi@h=DhO@y|1U1}ʰ!:b?xHaY*4#<ĻÃ_|9NS4ƿ<k=ENċw`BQ[yQ/;}G[@0^HweqM;LX[Z@[oLe\}\K(F1~Ij6 ODYn݅]Cʬ5nhcnHfv#i@w6
d0.Ds"$ ѻg؞6qϥN]IHIniK rt.0x&y
1R'L H1
}S(u=
@ .󒬫B?'/
bX;=߭+[۶WMj!KIh0L>^3՚1
ck_\ ѩm?"S'yc:)UHd ?RwdL8޿NcwM쓬([<"::t=K}KBdF4˭pC,;KlD~qFTBKfK0LiXة<%8'' 1ф=|~*_gFzzHiZ]"iy$Nwx1qȉ1@NtP
ypR,$	Ń(TC?g@Ih=>!$V:֗(ް1`[ 3
LK^A-S>ت0QGZ/v,VhUHGd2̵=EqpFDHl(yXр024$$ס
}RNY:GcX e)@[J8x\pvn r^-i;Vө1]<`<ńd4sY
me]deRŧ6tVaA'jbLF~PwI:y	^Z	8יxw&{k,mkJ@JKO0h~ٽO}Q0וI˲^FJN s
Z"@7Wђ'yM[|JSxmlAm{:;~ZځEñEK9JkO
	Ff@?>⯏OlLNzN\M̹-gFv/VEށ^;ď? %n+J	iL
Ќ=#N/8t$6PM]6_*4o j\n-+Eo&tuM?;!&;/j6+RR
4ݪc6JudrSK#qejC`WGGI.zhEp\s6sǨ/:n.#!Q{-8_Nei剃ySٮ<_YnnQx)RߎackeZ%lo:.vOxywqU$0La|{Y
ӎ溆k&ަ7Ո=yۨ<o!1i'o6@p</MkP\H {P0ВTmZ!ْKȽD|*0e4*i3ʟe\L
=LvRO֚bKUL?V9kҿk[wqDMql{jzWJlo-eQ:ŝDPWI;{4~eVWփYqUMQ2I޿LNdv>OZvDݎ~лuMhW֙P;lt.nnO]幖A.zΦ7Z] ttY=QOqc	*Rh*ג1Dڢu)ԫ2MfĦm|LoWŗ\U#Bݳ[gnbsV!⾘ O!_L7y[ل' .*rMiutUF&C/Χ:8ZnBӬ;*{i[
w1|j@?6c|gĽ~^X4DU{@ ~
rZC[G#{c㿨Y\lZ<1MZ@!>7ՃgW>}XC͑--lxkWTGq;h6`
&X;@NHjy(*?s-
yjOAǶnL=K#f&.\qvR}#':146[;^,c&ݲ0ROW~4P"	+!tH@]@4HܾSY+5HBRNPԃMBl[L9vy⤸Y~
<G
%LwÔ44wn>kQ*%CCZaRo\ߩ~9LooB()p?nf$ŭBS`1+9TT	U>p7p)wY~[uM#<
r/?޷P;GVw	ol3q+&F*`Gj'Ⱦ*Y\rQd9 p2rxjsn:"nn,\)dC_,0^ohhԸSg{P`@C}.H<>VsF3\"`&
uD/`c{ʦ\haPېA#!񂛿*4B-sNr tl(CY:ӴhN9:DbzǴ6Vp4VqØsutcO,qS&&6oYQefI+K\fE%.l2l*$3<u{4 ^D*жlalggmQ5!2TubрmHJh/ 	M),9D;vQJKl ZV8C4s m4[ILo&d_?G?eI'(rA@F%ō߳WdOA։$y=!hwV_Q-\ho.Lt!?vA+b,z @ރg'ЅK\+P.1"6"'']EO	6|ۆd=Wm0&6$ c4"c
賆nw,Liq>d;7zq|.Sce+\G
E^	6 LƳBPr.(Ϣ;s~
bR6_vrW6t'BVJھ5&zZvNoRtՇS!BT!>$-\Y]H:0m\h }ϬMЍ^+^2!E/yMt7GU$UpI2¸bFyhR2 *Kk欥?;^@a?ZYsLr!N/ ?NsK՘Y?ݜ&6c'V@Ńj `37-i$[fOTӌjh
"ZǈWcKU;Xy
 )(H4uthWa핅u|s=(-%N"
68%UvEʤr9PĜTvے/ӂzK덢
k,ǹVxEx%KWHŎ

ܶ'XQFY(c"}fyhG`RTeEZt{op4umJo}j(TE&99Uq1_QLM(NVf rImJ'C	P7wIڪ`YSDLĀ~(:lu ESFưP=ӧǗ뫡͟Yp2	`}X|(3iVO]PlUAj]=tC
bMvYǜ'8`]V W1P⡏isC!2^ԖӜ3|	*gpVz(\]lgѻ)v˒G+J\jˎdp)մb{qPgus5=Vc 'Ơ2$w!IEYu,qu;T<vHǘu`u
[5R5c=I+}.UlyMoZ<VcLtAEƛd}T`	CAL#o'\UdPy0`,կx h)/kkT+4t#^v,d|.!=ťア]w6KV"MJ^ԪWdT
V*y~E没3NqPѼ*2={L^#[pGIXG^=(WK"U]WU~.7P؛EM[zlKw"T6|7@ڃ2r[olGRn`!<Q}Z @`oeP/]BVm,}#бkh1g`R~mYήߏ[h*6*zO7Gsdbbk}%hb&
9,nTK27@زИ]s>wvLw)bJ w̟7Sӟn+#΃5׳qJ~}-\5_ZB~q[Oh7 rWLށ܅8l  
иk?phѴI߀j
ߚ<]fp~~H0<B4⤥U]{/KV1xX̅[-|c<蛍31a^w@ÆNJ8)}#gKuM%|[ۥR}<MB,zB{>&Ie"N8]0PaKwچ=F[Q;:$bNO<Qwt"?+94obecAk0ȧ?,0tAN[١a]B݆VB
PzV"T*B ?`_vMǙ?ڱyܰ/n
	IwpM5Z	ݒrɾ'dm8vBnlQ^gN^|Øoe3vn%#4ݴ?
q啣fG`8-5<.u0|z
{'Ɣ!CvXs<ٚƂ<WZoyŤr<1|pK)Y>swc^Y6 9蘸Ͱ̳[0ր
Wq luYD`mo)K бieQW<4p@.A9=۠eQxہ Z?~/m"%TtUjC8[cB(;폤迲j,Rs=jVxal]靶hC@*=t\x)pP/M$jWB(h<\6y@4:'`?ӏ4MeGjy=g+
Hn>vz~,qORO	^bG/g_Z,MTىSG*o/ĢRw#/.o3]B,J~n=x<Pm!5l,)	1]¸zu5	Q)KXd^Ѱ$~RL:q4$Rh<*v.ʻ1ZHA*	^*;gHi_݉K7XԨBى^>ۢT)
55و]W eo'eLJUCfvֱ"^:]ĥTqf3vd!ϊ0L-oCz\
atEw/_=  @T&1{\<+bp/Y֬%[m&-R}r?ˏvߗd䁯߄	,VxOѻ4$x\fXu2صlGN:Wf8&bf9+;FddK	'	13̾yoF?RdXmC2m@Z$ee"%sI"To0q[gm~!vYL `<>r-|WfcO]T@Ͽb)
ۧ͜c	CobmAMN_y(}i?+XUGzbs q
gLV|l5))|NF9b(ɫ^U
zQ{Ąuj}d*Ⱦ=(	6X@B^EQ.f=f8I^Z#Uhry*GC5317AHj3h&#>Ĳ;`)n~MqpzG/j=osjymI:P ǃHEB̯CM>AWl$x)>rki$NvĞUJ^(3O%RZD5T	D[,/J^C{\:~IT:O+hqH2LG.ֈY_=ƇO]0I7,$rj84-LՅc2fr}^wD~@ȜI?K$A4UHJ,g/iwl}7͓STq`~0ްZ!${x%kgbs앭J9X,6(=X-A30SuG^H`\akE@|yq^N]?|OH\W@,Wm/|yk9P6h.&q J6x17+`&0_5
?%Ix-0T7 x-%ܤ
00jzJey
bR3Fh)[8͜3-jen|wo08Wf+]USg}[}X&{c]*{5E1wĩu؉cg2qKb~l!0R_ʵ^&,*~"H1LN좘525Vʠs.ܑ-P~$	r<rh1oM"#V=>Wi!g O/s1u"/=/CnSbBߥ[&SR"
	&!,+BVdև'o陕:a`]`Fi~LӔQᐡv#a 
GS7{m[}U'ـ%ຼlOwaTL:ȫKm16kV!hБcSbfTĕ?!GfnUl^\
)زDfgؠ~UOR&s4xͲ+$(\pß{ZC
{-Wu:?H	.\΍* A7f!tDi[ N܀"aFn2`U',&{)i\
>1
g{Cӛ\91BvI\q1bґF4Y/Z.@1g߷0^gz!EstOsP5.x"OZү%>Ւ	Q2ՙy|-ɑ$5DBVrMzX84P"5gEGhV'2e:J`

3;o"1@ɉi|rX oPf%*S1@O=j_ߴ\
'&ľ2@m Y	!ܖz\Ѷf$sa">dаJ|۞Z!o' "w,nwYcϐi3iF":|WR]JܲPӱֻjC/:̃[&^QI6}R%ŀɳAZ%f3JN\ґREKk6rakGM@+AS){#L=]GĎ!tAкbpQӁb)*MÄ)~@WBN=VE3=Lsq[*0PTpNX_"~|/b	RIڝ=0|CV4eed1Xؤ? ?Ó^- EsW#2n8;_A'{[Ɖ)lGBw=B>XRt%'g/{GS(;Q;õ|NEr1Y 3>.m"GR"x'3 V!s6
k⢄7WO1"I?2+oАضRy!/0 އi"hnb yˁTVo\чH$'A&0\sZK5>BòghC4	m:BŶa\b0Z.Lyw!Jrنzv0WvZ[!9?mE<AjW~*89/();k]HK.CҦ@  
I<\;_v;>A].76w.`P?QXcSADͥJj͐`Y,&7rZ y)WU%=/V%$|]k<]7=x_dnKے,Z\oN|/]#8QNˏH=촲֢l	1_\qyG邭?=SRt%,[.ekW̩ZV.0
ēՈ5rCRy)`06oVجg[fvWZgweMJ516֕P%|Ŗ'|4QxҬ
.aRo]%qLKQJ1/vMڡZx/0ׄ+8",eʠNƕpmmD\hJeڔ_ƒBjSgFkh-/6!FYow>g.MdcE|7AK
D@T%׹#ASWVdxe탘^(e74!	!p,H=4-쿘}JAFD|׌K>˪W-+TsM'+牱BA|*PJruv"hh\FDߜn^ajQJGُ*2P
ܱUgֆ
Ǣw1TI^a2 d@.ƨ.X3N4 ={3u::uA,|4YD4Rٯh5u#b=T[
=(#$̵TXt:=g'':cVwEZ.bw0)BD#봆s+^ ecZ(})^Cz,쯲OCtVI/ȻHƜVlxxqUA_~nhX{~
h[^٪p{y|~*-2cfI <}9A^p
TVI."&伆Ɔh`8/Aʨ	Edc  C\kS|j,&	g-,_C}aJ#  |9U3R y+˙5@pKdcF$Ǵܕ6p]IK`˂F!/ܰ>;L3p-ү9g!\bZ"cOGJno_>;_i+;8d'ɓ%[rbˠYOY+q~;$%ta3f"T`0[ǟ_AL7!0^t6Pi
R)A[
Ѡ 3VT:eZA(k
)	urČ@DOY:2Y{S}uJY:`[?!n?MK<
J̊=0P^ ;3tb>܆ϓh"1űxy2.̷mBJ=LrB]\媯A+
o:JD[.HS:(]OT+$牻L?v\Yb-C=tT蛆NcG**8bf@{`	FHʹ˜SXE_-C*kO@Jz6yWzfMd%Qy:o¿,n߰
xOu;Q0kAXNWЮ4[۶8Ie WI3,Rf#iཌྷꞲ%h˖#)3`4IF$jֳЭ.P֪`4Ws(6ko 'n&pS'lJ\4a&#
?2*oDL5earIO4Crw$Z{I;,ai,bnb(,6gy,pj&ov$ަV
Lzy\;H)MLrU8a%97,^
p=XJVov
??p djp~u
]ߍ]jzDL#2:W:˵C\JWGN1--]%J.t%BK*Y0̲#>:
 Ktbӳ&+o\N0+DDT6qq:Bʽ4RA[UKpK/S+Ae@@G#y\0՟E1m햟ֵY<Ewk	`qlc̦8+
'1DUs_m
y:Zֱq<~0dyx˶=nKݧoj+L,Z(K0ڑ0\f}KZM͂ΔXHRR3ըVE2KP68~F6*٘·eL/FMGxSz>ܭz&lႹ5hψc<h:sp9G涥tt{tlhqsԴ@>(R=2+;`W,38kicJ16QR?ՙx, z̿%, ApkL;GuS-6	j4)I
?~#۷@[63ೄ)&<<7A8>ݚu/]bKU^$is
%'d޹=Am?Www2;Mxw8x'j2(Voy}fPZ.4'go*=I(IhyyGݽ
W@2[?N4@~>-b{.hwQk|~B<pn{.#fv4%h(THВ.#f4U#ǫˍ^oMХC+KvzJ0g62T;3ma05_NJgV6B]
/	i8B7:T>+~Xf 
.Cߜ9zT98K*Y gH0㡣⼊puqil['A9A8gDe}DLDk)wB$K
HXHFkoZ؊f-h#ljG;tx!qfgͰP]Ԕ!OKaZ-3=Jj:]5[H&m~ي<ךtErU6ocѹ[L"`>vѓLZ8?d~<:'C1 u-%fL
~kH7ù,H'(iA~cg#VsU፭aLBO£T#z+(E\edpԻF.J2l~CYs^aF8a U(3 W3vch6@*k4lnLiW&0"b`vS{:]dapf,[<½p:5fRQƋm04c1
>kbȢtUg
j#eZw8mOGny)MRz)k>t[3=iaYA˝E`bi?FUo,a`.1]ѓ`!݃Og[6cpJÐdi76"'mNH T`qO|= 54a~ߗ
fFt4]c+T)d\{cƽG1T*ԁR)w'R߀b	?'U?Զ,)tOKmN{ #:78u[:wD*KLs^}RhT.{aiܟĽ>7"`RDAY:*ed]DGzZOS|UrBt*Qqp#C̔0FH5zB'Gl~n'ڄ4<HLi]chpwCVĹ?l
_ᗕ^}KI|\w Eb3yudٓuK9EUR8
xK)!ӯ$-h֭G	Lz7tFشYQIj3a-3|ChTCR	~}π{XZ>!>+m#JeF ɏηD4~űfhִ36FH90+NYH̉#LCRݏ
@mۈVVo]?[)ܯez*HU	zW(LJ]RNOWyXh94}{fw39f:2.61}D1/+vѷη
X4ʴ?f_
z@u:i;㭸/יnS8?a:h]O	'ߒ&J$9
kعFL3<Ǘ,Hl$e*_|E^젎WWO ǋLGG=s˘g1<#AmΕp.@I{W>#gk68WU->	j]_gDkڰ
P
F ado"ZЋV-gr@{2<G$_	!W	J]N1#k<	@ @G<b4MH7vdHLc]]l͜mG0RzCSuewcB:z2)ζs285hS"b83K2)Iyx8^o7FBd`%E0+бIi(wQ
|XnS9.4n;.1p{.kw f=s˺P.#g*
qLyC><chjdHϰϬX[{<ַRw7S*#B<jZV3C'e#\Uf:1=h3-9/xz-֌`	wqŀr[J.2uz7Dy<ފ {ZEzI[
0%kѭ
2mKU=<	,{D5j@Re-s4UQT!˩"@3>BfK<+ĭ~b3ax	bI<
?Z7eͶv=Tק-*2h$)B^:v,3L:Y%lneDOq|g6!ɕJ8`eӺ
O :zDt	 4MPOT!3o.йlSW>FYK1=h+y8|RFMraY`{JMW!3J"}pZ&ϸn{Ig9dg3{?F6ܜ:]F=e}-lmui6|20k	:X>f%`n̎tg feoJ%(li
w\UDa[9FAc<ZN@`
5$pl*ٯɼQj)?QR(NbX(Γ7"5e);ptZ.rB{$~,p &42&Hw7,ZUVl,9bv;^
KU*b`oK3nXA5Jgey}<'*mR7ih \K*P1``{ $X@I31K%t5xc_9sU!ەFd\TadUhϷa4l|/ʤlF6Cd$ܳ	kጼm=ƨϯ?<hJ͐	EJ-0 Jڽ(w[P}%EGp(6蘩oAǉLi-_಻
E{.]$F%f(8Q:榎UJb4L(ʤOjFWCjnX?ͤK ܄RRֿ1/N:NKj*!0dI}$Rw.Mr2T"R5mN3	0zJ"Mjb
2O=a%&0f&er{(ؑc&Dh;7'Q5<a
!'C7_1i趁צǌ+-eWn .}7]92=!Cv˿ajIQ-6jNC:>Q7%v<Qv~/<IJdJ}g4n3"gZeabc\DSdI&*3U>3`UCC­SbvV6gTNԚ`IJV	s,vXk%iiҒWq+Ć gkVK­gujο
B(~ی9!v	\ҦAw8KS/̸'N} !4IԈR(S!Q-Yd79H3YwİR`u-l,s+aIg2'͗_dO| 4N)8JR)5FPFέԳXD?(xTU^"ys=	~Y?JCR=}B{4Jd*L:p횷E$Fi]Gc#>"xi(>T&Yr	N{o2[ydt+jQ[ڕކُ5V;!i-J(aֿoruʁ|9Mz6''z4pumjYja("<;A7mK!ohȊ"F3N	(9сAU9}<Tb>1yvMx;HͳDŭ}TvQoЃF%y[-Lq$2h0Me(-!.-Tھ!p
E@<0> 	5>U=HCچwM4{t,}RyjTy8(R~BŹ?xyQ=Ji{yX	Zw%
?xq,m:	 Nn+
KUoM2d>t5_>gUBk!07zNε>w EAֳ)fsj>pu8d== <	$jۢZj@UGYl#7ކˬJvq-MlIv:,R)u @}w/{suuϻg]J*8 wtqV%v 
f͌mC'+lG36~jo0ktUZW3ɀ,+ws#U-n6)}71СK@UDS|em+Er0tE<e`sG ZX
c1z{r-h"}޾VM7u)- k+VկKkO[nN
\Hb
َr6E'gr;FktW([QP	8nʁFP~k9S 8T
:psUܶr%fg]_(,HBjRJ2jpi1q.IV<A-L^ORW/FS).k7;h+ϠHe_";')B4exܞ!>|],L&?J1
0.-7XAeY0:/l^BjS,n
a%]z +vl&_i
3J[{JsyÉڂ);5؇\4zzn.eN:zx
\$ =ۚ(a'A1apq')VzRA
9PPم
sT唪'q(oPڝ03SAQ	nrɝ-;ՅiJM߭10J~|b+xIN!낺+qq.B F$uӶqIvmTmv/Ķu^lE
pgP& +WeUWzpaˡ%Qmx%l0>qA[ЎدC&t~9[cHk},4;ajs!+vӼk0C~~Ϥ)Nm@8U(#UEG,{bF8lX+o1tr׸_ "Ґ|
IRXCV46 */To
!Ͷ<#9Nj_V3VI&f>)1%[G|A*0-AI-횟x&q2p?S`>韣2kLޘóZoVEtƭdS0`B {pam4VZtPi	#.dsHի%rsJȭ	]IVMv<s()kQfZaC(55q&1?4?[{ad U;Mch75n\ȶDcmw|b\{$K9o8G? +i=:1Y׫=n	HF׭&bX+w٧xiJ= Ju^12?/Ѳ>nNoù*<ԿH)?Jٳ6W)Ea-4Qc+VmJhP0
eI
os29?%JzڂljuxаUP]1LvV/5@fQڬwۅiOB:P}Xʷ9jeE
b0^
C->!F9S<[RTzd)
!}|P/ #͢Dlj#ϗXNa<2(r]ޱ7P,OYUG 9rrXp<}lKRUk?r(@AuqL$2 !ܷ:ed
pk_RR`<g[6#Y
N󰊀Oz?'Oj
I]|eN;qJ ؞ۮg-B.;э@g0ܪ/9Z\m@Vd"Uqe@<2fSQf*(6)EVu@?1
&[|h@rc(!OE^HyNgE3F&գw4O	03@eD'%gƀ!#e*Y-82@>Fg^YF2)];&:?|CNV6:@	,k/70(5
=HƉ^dР\Ikf1߱}dɓ~	SKCQXHl5_-#c>\?>SNg=+[=S#,/س.֯t<t4)"GB|Gf[̳0ߎm;%?TM0C
Bvs,lf,s	R|߈o/YwҧmAvc c{}0nq)!EXh$ɟ	#{`}pBۊv\[EэpRMy*zbz+%7<=o7]-N]^hD 姙3=)GS6\;+vjMSV8R;!)$
<Ѣ0-k½䥉y$%>QB
D]u 1faAsUBbinY*u.SQNŵރr<po׸Vjp^0)}0S_X#+9'S&5
"Cz |A;o=A^Y""ً:}vXMd8b0+Q{־:rkl6tc_}EEfVf!߽.HE!=+wxq8-uxoE$9?q&*zvb갗i3ila`)-ty}/x<eADڌ+XG|Yv
-.BUOu[p͙{_2a`t/eF9])`2AuGTa> OIi]_.5cޛ˨NTc=@o\^cha
~5elxw9Q駂<vk_13gr(L2M0/LFöEgr|#ʛcܠVACw8917"BLmK˷}Y~#rq.F NN~RAq"%;` 0 =-`#-,GIW'dTf	M9@좵Y,- \λ(;И%=3gҰC^38>?п/Z9(	mWj88eo<rGq5[tp4ZOSnV	WkTdw@G
uocVݏjє!5jzr,dTd
R=~Kl#YɒV\i,9rA|^NN2a7eʍftJjWc&=Z~z+VkS̍j93'cM_Đ8pPA^1@|EfO*-nNvWP,9ؔDG.K3ڕ:p5g<UWߘY2zv*7qd7`8r
 m_[/OK/z1ʤIY71%kR{4wH>~Gkcy͟>I
<fQ[TPfП\81َ:W@#U8Nrl:ߓu!T12C䨝hN@
ݗJ305ʐ%I̅._h"T%Z6%WxP"Шf$l%Zݥ0qu%c<]hbnY,E4㛈)r6Nmd۔?nlӮ u'T=3F}ÊjgVQ(.t\bVVO5Zs\-(toCr{>:!aC)CҮrIN 6L	Ԩr`aE~}Sa*$3gj-Y=ob
n..֧(JV=Or;=t69Η{Y,AƸ\b K%+Ԯg˃0k$5	eL!U@xʓrHb"V6 :(p;:zFׄ:S3mƹ5Nz1))aasd
W2p!4xn+:@c}̇F(A[X`2Xu^qiDsMhk=..wn7FfK Hlp2Xur@U6/1XXMC2IЅ{@w"_XB*%} S	$!Fa&_@z|Fp"
 }{r:4̑kȧ]dlawm\&$Z(Sq)"ʌ&g؊B~@mz@Nڵؐ lnk;7`(Otav)	G$G;%w?Ʈ}!vf!3mWsO8 {
|
}øVt u,w+cqXnRm@sqpG7K*6'3/FC9JVbWPJn$gk8
AqIUm0[RM­jcsG7ԁ*@O	sK-ᇍ/n۾!52UV_oqi;Td60J%3ݢ,:yg+pޅ/05Z@~^|ͦPT\"C.GȞ|ڼ7e\qrz]L7G/K"^c-j0o?;tH]E^<!t
R^I]HCC=9}% wb~ԌaNܔц:5u}z:r, uOiWcj_>3 Ea"$i	6Q
wИSJۚMz8qDq C;ɹ ܁p`0]S H<RLRwvn<|vΫ_ezH+TΪo)=q9WrEF\ܓ"SDǵƔu$k$mǥ?@C ^G/*=A6Y6x#[NhoffUa
6Yh4H8n'"J?fId:Zs(o,^[fʇhѪ:G>cUU% 0i
NZEUtLʫH?yHU6,\V8}h3
e=wwar#iA!e=d_&H3gװ}PZ`Kg;uӸcI4 =,T^dpD|
*Vn\x`z`svҫ}5].!ұV+3^o^fqF9uKE*Nc[z"b>ޮ(kf~rSw4V=6{B9m9ou3>Ɍ@WIKYdVW6Dˌ:3Үx,NOƬE_$yw+ʽ#. ^P_5c[i+4b[S
N߿)U'(j/U^yUy6ݠ	$7DOT:j,-<9f^`HT
oͿOab_4TaLjf?Ɉ؝l7lEzVO{ג6֊SrhƴzX<| 'v<Wy0T6ƭ1`!n?tȒNYZȫ34)̂ҭ+U9~
 /iy州\E,'1:>L뇠սة>	҆%ufJ8=<E(Eg}۾rbERQ`)[@)#E>gpgֻ15?3Wӓ1TylmD;BpL8ց)(='.klN
vvu?S!/_es6s҉'&⦞:$~]N'cQ,7ē7ZZtzݫ?uBu*Em诐c>ENJKcǔtvȭ-sҋv=[ղ
G"SF}Yz\*xY{l3l]NuSĹԢ0$Ud#  PUPy(CfB-ds"CU+-$˅J(-VoV1YCpaH??(«@"5V=s84Jga>UG-u1*:[6A5:wn	${(xM)˨> D5 /UTWĖ-vY?C8 *kTF		7d|
r5[qc׻	G7ibK4K Ǧg{:X]J

1v8 8FNYr~^
~|hIJ!ܻ)ht	#-7m|ԡ~cY->ԕlkꋉfP(g
]תSPR6x>Z	?|C&^>ծqvS{5s38`	F,|xNAa^u/#yu#r\v<t;,2|F6pd
®zڔ>Щ,ڨh;np\Y\YL\52ζ饆Ms	O,4 ʐ{PrC>n}+{3@~4@]h^lZC2+GcMsHpD
lZYc1P[ꕛE~uq5|J*$\ݵ3/.bt4pJx6AP
:pZM@穭\_QP|Tr:9r<x2X2y!a7w=K
6Iu sl`Fh2.iI>?}ʃbĄmi+lı51|Io{qkNL2^NaJWd %Ea&q<Z
y5BP<3b޽2/\,]wbЃYE8
"SUSh_NQ/h|Jiz<Ȓ.2׽EOɻ@m/Gm|,vD&"sw\
AT14U6npuom1iD)
gAϐx9)6L8DqɓhWGYRST`Qj|A?.f}9uZ^dڙESu>@:-c=h-wJ"X ;@z=ш¨W
(_4-o6sQ;f_6'x`Ql7	<Ym?WUpB&r%wPQ	u	"
>o
}ʺ&PE"sNU1H6i -FƸ+570oڈ[ /(ǡ185<
meJ=/=tr\GLե-k&B	f{4N;ۯct> ,ʕ7Tlr̟hY{k]mG
iWQ<˯J~mG^_ CB2܉/3bO}@#B?ViUk¦}o6x+<	_ppAy[Iѵ\vX9*-A e۝*@LwaT
hPUM0v"Dt^JQSN(nG|pjE-X9̎jQosȨWZF-nA*; ί߫WGw6 $#63ZuX2·si=*aU^0@%;Q})Yuts\|W{91|W;DU"qsI*ٵIцj?W._.x7δ¸CtNEG{Yoev;FVjAIx/v%yNlcىmi}շ4>c5UF/MX݁
re*绚Wox~{ia&з;8Y#7-݈Ol q/wY@!SJhki /=%
C*;&}6E0$"y ¥uM{UX^fјDXMR",_WiR{?xCQJr2D=8t1£u.ǫp!Jr%aBcHzX̕+C%u P{aKI@;<TV)zZk
'r. uPI!@Da<dyqI&Iv}Ocq3 oØA8q]nplbVfaޯ2ej	\fo@qc!!fyt3SH Bh[QBrr܆jj0O^vQ/w;KWy8gNWd0ĈQ"r
#p~$Wj;))]Mf!B<`Xl)|풋J'dmu!C߽hr+!i_ΉEs_
cwKqI"m*]Npd;Ƹ}"e=	T-ݶ<fy .JD]ŻBBJF?v@+\
ڸM+NU57F
	,c:~gfVݍc<h(&(1zG~$Zhf(#:ԵODk8SG=5=I]ho5J%ϴ*zl)Zg*3tu8cs@Zug+qjU
0ciK\}@GvF{А5~N7dh$"bFc=U;2iG|bj4,6D(H,}2jQ	p'#t_[Odn5@t%:,+W)e{i<܂Ād-ݸwWd88*R㏐,l<Xs7%c Ͼ(	0ojɛ:RGݒ[?*<j
4'
!17$}8n> ݙXs(MD|prg?K*\5s82!ka>l).lեty-
xAbxuoy!>o)f]>APNsU&ٕuJ+KBlȳ< ^H䗰~zyus\B6(xiN]GOL\1ep2	ň>Cαd3WilBEYٻ\".US|ll?VOJ{ۮLM2Zk;sy&+¢AONŞIs^/qƀ^tJH7|ّWj/Э# 9M4Cf<%ܲ[C/2+z3GMWdp$FvEGTI%v'*!&]sY.Bg/v:==_+2ƒLW2(Ä 2&4Pf
SfR`PjkPāZѡ;1eD,]f1x_b6RkaE-Ll.$.:?fDҊ:!	?0%NnÙI)tM)]QJůN080LE;ª$
(Q	8qGʣv_.j͂⿍G"zV(Tcl
Ol("7"Aߛt=pq #2
Ees+/E9${0mЍsީ]g` lpw{BWstninDE
@I}ǾFk(b`w醬fb=K*SkkGn/c%	AׯJ"ZL[m;:QL4${
~^y[-^:KIhINF Bx!z\a4!>cny9:ɲYW;댫4R)&%lQI9I%:QOArT
p9Ql0j./kFctd>ePZ-ȗC4դVr~smjK2ӮYdyڳE)liXKϷvJO2[C޶
φ/+z;Ɗ ִ]P&%/^ިހv;e5TT&1cч;H bw7"!UA7lV5gĎ2/cW
ay.^Mždl~l!QPŶ:UCUʉT9J
/e6n-H[SѸ"2
D\.N:/:ljEoWGUul/L>5]qU_2/慕cH~-q}LpiȐMGqos-/5
H!PQ]'gwa[yB'G _(Vf%WEg/e3e4c
	2>	>xI^}w	D#;~gXN@:W alk-ܥzũ4I(C[_`EdxrpˉwC ZM8~֟0"E29
'vX$ډFj3Ji| './̮L<y,M82#b>{#gn
D;F52 9c$OP^$}F/7tpx'&}KqdT]T8ǻ`ъ)Gx1!ld4i1<0s[L(MǼ!䛤5> Gt0?9i
H`*^@RD=
lY'6~(SxWP|{"I[Ɗ5%}%0IVf4d zFsJuH/ve!f$wV,gtl@P'#`@/DO!#5T\}l](~5e
:.숎 zJ4-fS#$УAa|@hSՆJ(ZM?8\OmԮ)T	؄Wc{BTĿOSTpBXBRCh;%і
ړ*!Ҵy[>j{RͿwU*UAenDyuqwĩxԥ(~AHl&Jvj=-t(͕IeeokKOD#Xڸ/7=/PPA	k~0L<ց4yWf)/VAQդf&}g{.~g#Ix<冧tf7إk93E1t&nZhpܢB3q84"s}x#(w7D0Zw2] 1
Tha`<B:;6QzCKFHtn5e}	ٞ]Tr҃p{P-%	)f|Y
vmo1>RT:֟w(5bs|W@% O?oyjq"0C,җũᜉG0xi]ZWɛņJǖh'кVK-- ҆zKЗ@x>/KIfݞlxS<`+a~	@$B lׁ5گSt	up.%\#(L0=/1EH6 Ln\q/\f\V 0־%["?=TK^͂HlOnj.Èp(TVh}Yd戩JjMQ~
^:9K?	
7\[PD|C'I2(y

cBM.	n]-JIE4x2^y`<qKLf.JWͨe\ѡfQOEOb6?|MԴC`YT>(45!'Ӝt
.FV <3#(P+N
biqOI*wP\w(@u1mۇ9	+_T0?<Ⱦ 5yޞo9N)O㆙g(ojGtLVڙao|iY9)5ZI-ʜ8~3!R?
:-p+c]L&%g(
bg1.{svKm
f_ىټ<
0?ͨ;;=dIQ3I,(@*<*x6[ރ/SEFOů؃RY{M
WZ$7[ۣck9O{;I]*DvZcl^&cAJ⢳[<W%F{&yZ@ #
-[vx9g```
DCo87FX|1	o)+,"#-7`* lȣ7-8[wcc=?Z*K}{j{#
!{iy)k5	1}<Bq}~,0<f{d"w"c	aFaG[iҦ<;]nJ ,Js7ԾvsQ:H{WXI`UzHi<Qo݁ꡩaI;jd0ZsҌP՚5"1JzJ6G.XVd[1m_d/<ors&۷<V&oNp>vl1"nE^5ә.^>JѠ*.ڢ!A9y>`h>Kf<J(MRg:D:Zm:4${BPƣ&݂ϷOXnsJ_փ1Ӭ9Oo<{9t}f-c03M.D|p{-,h#duNk_-fb5mae)8d 
@܁dd[y{?0R$
id.Aq^!7
p\DIx[ZJMC(3,W,2O	Oyq"qmVui-Vrύs}dBn;v<Nj9*V3
AS{Q%q,PXn'	V0nsƛ*5~Lnc	zFȽ$ eC>ꊥqg1OF+^2Ct꤈FRjOްy7vrh!
_Lƨe*Rʡ!0WU0~I)xx
{{3gXru}RrT*H>f}%
ZY⬒nD P=7rU1ҲwLt՞`hwq(+=l@Z=HG	l0x۔
tUx@.+v
[僼)rPUkF)T:$ IÎؐhr!?5ژe#!Bel3-xA;Eb6,O*K0rp!F'+xBV
-y?t%PStue"
HUa
g{wQLnǜ@zngԩz1&,|JȻ 3ؖS@,WNuD9 (tuwC۞P4q<hl7?@Qn!5ok)&[$V(͟2=.Q׮v_堔3zP=yѠXTlEaGS	XL`O<kN`]b<o}1CEsfAՙƝDU8m-u<|$ubޗ]BrV5lZLs[^.Yp^=2I)?/Zduy	%[H{fg	{`.1>}Q[׍Y2Q		33j1vw.4CY #"a"a6f|pɾ$~jYu{Xlnӥc{=t}Q	R
Ã
UcKU{k%oCקn!J
QI b\Z:qM`۬Fqս'vFx9(߰4>f&lfo@S"ȳD9(ar98@{/{<-D)}͚US4Ĩ'Nz*L>5Hf{.d{J|&U '?R+)*o#6w*wXlqXgD˻m~vnxЙg9
50OhX]b4=f,*Oׇ-IưLMsLNSa׷%[1^~)i5Sf3b281(t#&o
ޣun/
E5C(H:>3&) E/`9ț;1<vTZ`uUr#t	S{~'.Ezk0F*W`+Sxk.bzL#P Z\6@[Ol͟k([[^hvJX,\ѮǻlA1X FBZms݇7Y٘ DzVY9m0IR؞a9gsm˼OvTrA(X־<l
)J
]ji]
H5\J[SғÿϏVUcv9)!\✅W;WL{L)RSE]V3t],Ay</,`:FPKʪQH7,oiG'FjlBjť _OF@AK<ăbxw.ͮFz3ΓJjBIܐXAF֒f2|\*gi}B8
U`0Q/)9#%a|g뫓d:=i{B`~QZN=ϲs=LsIn{ODs"n}?8cV9hRd8Fx.F73E|_!;%cLZ 0St7\Gq7^e} bv@L]	x1nꄖGkk%I6M+N6&fq1yGc
)<25ңnRsӀN\Db}#*p(U_ے;#+\y/TL{璶x(u6|$@l6֍ىLً,{~jv̈́i:ڽ$z]D.UdeFN|B>O	?F	7JU@q'	Mx8l3~N/	b0f8H-"amk^:-G^K nҗ7T(,&m27J9tvYkͶH Ȏ?0cIg|X.7ۤNK^_HQ1ks8!'YX}.iӢ[}=J_R^=Jd9!" @.q
"Q٧ԡ&l
P]@ts9F-!׌=[_wRfr=ûAjzABgɝ>nUz
'M@"ECeKT[wB!OFˢiNBu[cXKǐ
3\VRK_	:aLZ(Npgvyz>B{k-V;U&Ǫtb&M
іL4H`Dx1ax&DdSt*;~M&ڂdaCl%Dt2Va%e^QF|ZgMNsnN39=z7v+0ճ3i|>7/CGnʰLRIfP=ȫV.׷AD\R.sh(8<WHG7]c>XR. 6D[؜<VJ֗8/O]s8%J}SƘ}wnۊ10	0÷%Cij5Xc72僧dnf,LY) Vơ3`4әd&$
4,XXPnN4*VMe
4C!7IvGVJsC۹8⑁$XV+Ub]4~"Ի?#yR))6#'g-JUi77apEdpbt7FwySBy}~wakF&1x-o6RU{OT[ʕtm)   7[:0.IpO=K(5Sk l)_PGXDhbD~WA[IW.EF	Q;Z^s4"2_'ɴ/ZQpL-alf)>iF4ia6P$ݯtE.Ae*د#3gS=qFuG$6TA´1BG3'MԴWp
)eYP,BVvx};ƸȨ 
Vqy6 "&6d%aoW"]yWeZv竄zyZF\,UO{)m\3Wä1zd#6P# g+>:~.UG][^i?7㭧/R=fH`*X>XCnq;Sp"
zrZqD-ofNYuU^5s1+ E
U1mx*
Ӊ6U^k[VsE־?	0(4,@jf2: 
xő6|N$ʓ$$cʄ^bfRU}'lPw݇͢%nA;R7;*}9LpqC0n3̥c|
fMengTsZ*1Ւ;;zfwOI;ru0.O:v7[` "DӔ
/<rc	5~yk**(1xS/E!?Bh[.&яL2ji<YAO+JKl	|ШeŢt!d`|l~Rs\vD5q"w~|	m
4lKfseBEc/=Iݹ23̉]Pn&W1(k33#AI!m`\wŌEƻo6uInfn-xѾ:ԎzвA~fϳ!6;;ENoZg-q7=JM<6^;G~sU-DH0Ɉ&Zl\2@( `JL0c~h91nv]j'$إPU;&LDeEs![)luT6[r6j*Sl
9dE!ʍ~l
utԜl2jlQ
V،h_2CVĘ!u(Ol]7@j	A:eauE˿pA	D
OǓW|TYb߿ՑD0LJ/Yya۞@aGYbfB]Y&"I鵂ǦAx=<0\z)zks&c+_ٰS14N稼'
j섖mJJ}Cj?AG<am`*Q;9ɢ#ADxuIuxNGN/|γWDM2N?jePi?ܕG6ӔX6b%hUu 0zDMMn
Tz 0u3-%d\-∆%T3 (w
ETŕ &RYt榢۶KG[*!_ebY5D
f+tPXpޛh%Jba(>'^C!Py`F`އvu)9UȵiL/?MfGk>PI[ӂ'A0FhW1ɥPBsR*>涤,鄢Lr~.CԸZQǆHlɰ7aapF.QBET$d@K;? p
M@=}Ե72<Ͼ	P/°wAáBz˯bt(Am/LіDZ." 'ƀdxN.[j
eyO0!)h`.$%KT'8)Dz-Lel~	-8i#Ivm*dƢ?vqo3v?
j,	.|h)E
%$Z
(7F1p ΍20X(BHJZ.tjh!@(Yji&g.Dlb?ĺExaWJg0|<1''t	ʿ},Nm2]&$vd)xVxɱX[2ZaU4&2҆VxIn0YGnjz\>^#Tдoh<E5Bny;#/h.>U:Vx,mv[j,{K\͍P#=gb])tr
iP{M:_4M-W>"am/UB,0&b;>fb0|BX(5LurbΪQ}L5E_!̔~zk[%a,}]6:Ѱ(GE϶1!9g9D=mı
sk`%5;>){7~WBn%%j#cZ-+z`pO<b?l:՚fk
3d:Eº
<b4&]}Z
x4#g1Ui-RTTu2WIs=dg3OէbZy2cO);`wɟvn+PmtmxO$ך_ B0?_z3x
PGYB_=	;DNaZpsBD<I*G|MmXM	U}ݸ% ]uEzof6.GN'[+c_`\+D9W<ҙr˦PϢ4}D	UNx}blBH21BLx,rdU%

 ad
WwKLHs=AZϙ_ǟ,(=/>Z?zPD0u<d.*o2<`& %J? DNZК]L&l76qLqMT
y~[#'x\!Ρ<Bt(WcKiRK\yQF^n
07pf1XEw/ehƮ<JyjK0*yuV5uɳiٌ+]N	3nicށG+wLzN|;
PLe6tZ0*n^l:y"I}\-z^)kz㿇%_`O_ga"k'6$iGhpoc(l1@-ǋZͮbbE=<MW yU|UEm .O(~01L0a>H>pv@PhS|2q%6kF|x!cjYƍy?DZ~h6/9UXN9%g.,"<tޓ3cD B\i"ܷ|alTj("h&:ʀ.^4ő37m1|ͨvcCߴ#Քdr/ 5=9=I"Dia(A͕z2_Gqٍt3,
@I'YM{枙dÝ	ZѬ3g-eV
6Z<){8f=$q-%U!.'/o'%?ra=[
!d긔f#Y;?]%]d3V	(od	`.秂W,oCID1b Hvu,rY eZ]=qN
h!=/lL_abrA3HR	:2R*+6:?߈B5@Ct߰wMW/Vbִ!C<kTר֏
#hΑ
fzi&=0;RI*0U&|{^W>
 Cֽ_Ppj?It᫱m`mg¥K;+1Tx["NT
JpNo=ϲCxzNڵ)!cЍ4a@`nա,z=9h$Uysw[8?#h2C7qZDi'skV9nYb%J+FtO
gGn^~?{e+ԴLqXfݟrn7jކ89nV%?;6 s!th%_oa$7ad'{2fi;h[mǘu ywSH^H1`-OVO_R$nǼ6זa9.f@14z4$R5-x|d\G2Hʟ(6pqP%.f{t߱*̮N
yLp|h`l	lGX h׈+wDrӌz)@4'	Odj&W8jUx轵ZE5SO01Z 	u8Fތ28҄S&*Llznjc6[hA1ϓrjGVާ }w1I( Rl%(YH=gwkrs?W:Ua~~q9\丙]vBﱶDy8w:}(.2bNEu;}q$_g
mccAVHdְAi1ۊxsty/J?lF
QֲQ)3
ּ?D&T+M{lsB@E7A "Xw@TȟxƽgJK"XVYp {_ǶΨP߶ G cXy'!ms4
"J]v_ҵuXR{_w({-_fZ4(~Gh\ pQq""b<EŷbkLEQ>bCا4<P_W5TҼw)kUvJ ,G
䘎Yp;c,?O/+5WU1	( zc`vDa<%=nWǫh?;*%GCqeݴ JJ6x$ꮯC
H`p8@
<|GM迗Ca@:^ \dVXp0
P41y%DJM8a$m\NJiXE@u2UZҰ|jSGhL,?Ԁy~J=~h:	!!'y4z>;rF_"^ҟ?:FuWN"n

\aww)b͌TU9᥽HO*-'̲x}dTaF	$*t)e>Z -4`fAw=(\Z\
YsEF指d?
i[Hc%a@I9!OG9h7]0^
`EUhǠ9]v ?M&AeK9Tѭrٰ".Yg5KȷX3HA.b!7|,
F	KE<GbY	hɞ)}FT塨9	A0BDU49Of~i%[$AL,NΠƓ *wّyE)=ǄN9>Tbj4:nu 8'ٔ	y'!A=\^T@ϥȬDtJn?c=NglwȘ#҅([Bs*[u}Gmg2!*iՊRӚDA=!E%*NR+$Dtz%`+w@(\@升ѰTyu#xTC3y
HSy sMҸj2|?yUgh]yC[4I$2I@l\@@C0R$HLkMМJxdwaf'VxǬ,KY[|F `!zv9f!9\=6Yͪ_&G59c]n&#oWd0V.mb)ކ+\Ć
6X\^wFM7s!`iHŝ|h6]
7P3Z¹y9덹mK$ZF8!BPx.SPrgC`.}i;|NG\	f"?<|+Z%Z\{bxԴnzuz!/:
=H3sHNMB +q~?k~=A垞?n5^<j_c;v֢ciHIͽVkO \ל]MM"+wͽ|K~}H~$YT=\h%kmsAn!-e>ߛ	4f0r=Ϲnt0VETEК17.F
i*Q ^!yxV؍= wgSBXi5Fy]
ꪼ_ۄ5=֏}"2`n9ʥTJ
D3.c jNxb c9CV~
6-;iaJR^v5\5c+6wfVyIKR*oTX&rY d
'kVnU5v$Η&gRCZt9s&=*hr^JH^؂- xoE,	J~_%ۀ)qZ};. n nRlE"-h7R s҈aI˧mk@Gy"(yb7Aol[OÖXYf4o]ӫ 粪Y؁,`Oe
P'I&wx$9c҉	4݃
(3GCeQ0׎
NF,rKMq~ytu ࿡ W)s;U݂aq^3:nq8uȣթ4 .9_Y?'?|&(̖wj
.E|4ZEqD}r*w[1\!E7]Uy{IPx &Cm2':3 YnItU<pj%  EA^:²w\

JPh9fG=*>E++DI9A\#E=R]'Ǚ-^V
MVC_/Ыꅭ⡛ oo%?WZ
l3=bo5cp||mC
T>~hD~OJUҡFP{ᲇM~{,I{q@;mB{/f	g~#)ѴbAH=h|ΈMB4,Ad3<׏{1N&R8ݤ)TC/奲Yepz6ȘAL+~-9#8:oXebYCKT[`S]\ Ȃ⮯{]>k| D~w[o+s&	@E#;\ܕ,9#9X}a~G[G]PUq	;1T}5xqvk-|2[f4&?:#Z%ngaCek#kq?HyB2pf0ZIfpw8ui"zzInbu]խi+AQZF"D9 m4}M*=Eو:i6@;' Ĵ+*:}VUZ+["ĀKR ]y4vq!v DTH1-o!4M< ѷ*}w(Mt80sw]׎: s)28'Cqj^}3e4[c/hpӊl{n^aC)1
]"dePĆXgZʇ!K~L;
_|wArƨc^!k]"?)揩/ܠs)
{!L}qD.tB@T[=D
51*^Z#/b*f9& ɓgqs@ˈ_u|NƉ0<?j4
?AwN^QQ~a"JAt=Y:ӨAlA2z_0q8P~kElBȓ=vm<Zxv<rT"M|Qm9X9
/z/r!~w2'&4cRl'\u`1G0-a	/ (&ȯ"'COn^`f7uINϑD\N{mB  IXQgXŰq_#S Т@f)ØY7o8k|$Mz
&]B$
 4{{cDufä1
NE~Cu=S!
m	L=PAj5p2r숹>rwkEpy@
*YԆg
L<m/7Nj{+	jvwmm_*Tc6X9q6FQGeLu1ͤKIjx^<i5z]Ad\顔
:^Wgn,Ya	IֳKlo
6hzYE7F#l'x/U=Ei2'oO'kd؈BYQzCg^/	}%VjL7;Nc2B"4Bg6͏tV{nKyy]'᠁nn2Ղ^Щ IƩ !2x)\[%/li;9+hH;q[>(- <J U_OXѲqܶiۥjoZYӣFw^tyioostw|p'Zc"Co#R
Ae7iWOJK!PB*tlu2*O̜}
H9J~`HD3eM^r}
z gWq>6@+_,&cO4mNVi[mB4nB~P	fkڼh޷u6説ITw.e6>D;P9Lu܊Fj7%mN~l!?Ɓ\֦@?urErd
_X&FnG)VAF7y
Jv|H>ֽH3Oq4CzD[Br
f3wFjS`=$m8dnRV'eU*.Bu_z6xsXt+J+;̏Zec4?zfmՊA(v	|Ε/Sωh@> ~^n
+br͚ NEƊJ>Ս5a0",7LdFKlϹ卩Enc8Ff 6|
 4yBGR`N7BڗznxԑǉOtx
I=KB	W[	WUtyYOfPW^IM(TG\ևT٦,#Wxat*9dPxO`2J
'+[KڜA4ΙԀ|epv|0lgEOVÖ_<DH:_~|(/lH,q$&7{Rv܂3i)3$=^:P锣\A!}(c~ނ1pJ#(r^J'%nxES>_Xgվ'*,}R0\n3iuA^^){Qh2yƝA㶨&Wºr;F`OtA$7tC*(~zkL%t
1}µM-&!9El`,wƨ<k/"\@RqZ{sZl2iTUmoPZrǜ`ݍV6ő5PK2vwRxAw4s!sLCp-["ModS^|^JBcCoH?6xONlo>5 T"ujj.ֳs~46
g7;pKcSx9_L%\6ZvnǊZXD-sFw-^ S+Fz@w=1UԜTLZ|SK.`W-	;@I"Eh9-Hm9,`w tf7tdO6H ahX^dptб_M2
:X_V?*vaX`+-/]}Zڧs@։i-j.*2OO8޶OݭLk"hA4M1z
nd H;@lsGYZv.zCZFkg1WNI=,ԗwn_a^1lό#70"˃83vy6A^qnͧwD]]S*`)`O<W}Û[&Wk#$.$0ldoOݏF6ڮ.-ڽ<x"uka^{(IH-+K:?a9ӣO/?iD~Yb<.&1^
	|ո!r`W='Cr5U,bDK#1S9#@$+oCtJHrQg`MѪ?}i  u
wqMs"jfb@RE^L/l9h[vIXMUϓy]5wϔM}`rZxm}è` lٗN<EDܨ2b4_lZ"zGtvH_Et(12Yé4/+KwNc}xyƳM{pS2VM9,XCWp8Vm	jc; !	)Z-w3`Gj
A\S	U/ٞB3ϾpGhƊrg"uaST$Qw&g@ʿ;Fc5Kٖ@tԸf&'?3[?4;Ol9H sk6ݷrW{ຖZG'Z^\}#<~I喺"aVi0%.1^2.&	G9'@-E!Q`#!Z۩ty~*;q]QVݙFWF`3+j/gV*QE;#)?72(X7IU'Rָ>xgn|ަ)hES*ҺPy$pFGd́EEqlԝZ;$TU laO;hdp/?19{2l(xhVqgSD'bPDr$~ӋhEj tŔ֪=P.hv}F
CGnȾgoR0KE\	Zr̐J<I~ۍ$T"?Q!+p-g}\aaCd>Xq?ĥ3bzEgQrz9,P/0F\M🉧ub洍*,[',.*
t\j#-`PH!߮E{j[,l{H}RLN,Ox~VQ	[2dz#YíQq)ѣ
zEW&(F0zNXx@-Dsaa UQYu"-lAxӒ&=788a^UQÒPR?S"r}ЊP{D쒔G}דS/-z! @U'C<ɖZR>D`{rp%u7dmT+ BqUろ\{V'.Y%4,qnbm?rS'SD(up2Mhz;I-ȜY3i* zArŨսΡd*1q$t|`D[-!Rw
dc=J0::eУ(.ᏭZDI?6d.l EaZV>]BC @*d=Pth ^ P<Z;\tw:tsQ4QVH(.BZ17CZ^( x>O=1eh1tNI@
&>*28jf-ipAG>wDqlV^Q{6sb!v<^<r0:~qmgCICӽo/N^my`Tu+:1bSv2kBMqgH3eٹv_A'\bX7y
r[>A>q^~0KIӰ6FJq؇.TC|&q_HB	b #	`eJs}.0tiym5,'2p_x:9j"س}D<<Z`/Ǯ |ژZ̉^A
L~e<hAe^y}G4Eȷ"w8;{
lf*\yFCE	BL%͌h]tRɐ*52)&B͉]·;t<^PehWZc}iU%.&g^ JَLa̢z<gCz6ƍ81Xյl/_&Ko5r!eYxSMES+Ke3	&oqa5w/	CͺSS<;f**
m0%xQgf=oiKcs:v߱.ZfG@jBeXb
f MY~ؐ^Ɯ ?TVѢQ52XRȞI za#IqH'1-"a/?#_GFEۻCˉ+C&5<ѕU5(noYcR02f5aќj0m s;nާ:kk`6FȮvK,bSy&D3)75|h%\y⢫Y	S2MO:K{uFhrF/LÛZ#g%,0Ju1^(#D=eZ0%1Y$طseQk^q
K
Q/<c?rYr3D]yV­Ջw6jUkDrc<Qh!=bY)\Tujɡ`ݾL`\'>O
MppGoQ (lrH-+ư}RKk[	X'_A=
Ѕ?SqrsTv+P[Vيu5?"ΊhsB)ăn+DjbmPఞ	p9gIw.TMb`lso9]'81\8KE^xBtF D T/SOedg{M'wU j`)(8@I`dHN˕c{:2Cgc4A
IO1F|V
m~x+aSCT(GӮޞ3&b%&EeXhvO3}˶&nQ	0ɉ-3DɆH(&k*j3kt"j>(RF@fbaqPݻ9o^0y5P
E_(tֆ~="Ñdh=
y)y<e<3P*d;]U}d` ?sYߣ!JV~I֗<ڳ7U1͟DފI64}w@(pClvWWĳk^ؗͣaQ^x년Y#f٭S5#,;ad36#/QlosCiUfa鯛E{	.(l+owI3|sc8@L$adoOV0L}a#Yv
j	&M[=<՜"5[7J׿$+^N .09.QfFtAuRzf9	Z FGef%SYC%4Z4ϔJP${H,]VbtK$Fj=磗~r^8^UeVțH}(X";AKQ3$`hM,+vX e)ƿDAI9q|
ﵙb ?
;<y.~뤳^|P'?hIU<$<&EAO1`j`"t}BS`kcN郠dTц$6O$):X^ԝ1@l.fBWQs߲viG{
*m{'hVkw\!pnlҼufx4Y!YjX`sMRpNS?	{E%>%/qߚ6$0gӍUu=DiPo'K}ۗ_L> @
g.3l05wNwI,ys 'E<I"<Dt?$\*|El;3}X*{p9ӔR$zvԞYĮtqY+r{B-_$p8hčeKDiA"B^cvdXOXOۓ:Xip.J˱jmb>GPX@٩t9A;HBBӉk%Z$q`dS[	5IyNppLmٶ<cΛ/V Gfz,8Gų .ŊJ|"3"Tx|C?'ݽՏx1c4V+`-Bruߺ%"N /S b
$(2GKx&߾TWxa8MVCju9Hq{#YWJ7=#yoC>p"L/=3-th̵XvQPa=Ӭ`ceR~px߸Vn)hFsASv'sr@:).mGY9.J?;S!s$#"I]BxsJ:bgїNE3_܃BJ@䊌.	XĜ?6^F̗!`|Ƽ	W9o8l\z?)BeF"Ԧ7Fz#ڭ	NW W
}4gTAx_1g
PLpYDD@]F]ڗj|IĲb._u5pGUlMbyGF'P~v@l?FV$pż8N_J8J
2YxRn!+5EGN
Ds~]hRDADaK3&GX4e.rhx}եh@+yr	Ѝtb&.Xܟ\05Rk",dTHfמˀUZ3|s^G!m wә|ƻ@.ٞfD(%sIi)7lF2xj}H&jL_
ikȑ0YMQ^HlSvNIfdt켎b\XKS>>
=gb׿2m?pbuq$(D=?4@|G5w
g*D\\[XYTPmMTabwe?ĴMV-0~!-vޅ1EE!fsdf$mi\̵zހ%G*lLkҨef6,gS%Nez
:3kVtbl<F|Lȍ`.ftɤ!##{̜^IbU65'3j@5-Q K}N|Tr-"kJ;	GAt8_VNG Eùѭt)@Ɵ%іs4|9^WDR|!}egF%joOT89ed$AISOpf4;qx)\w͕)Vy|\x?5}fdP3<<^#ύOǨHIm3-/Kcˋp._1\'?ظЀ8HSA/,;Q+44@A+0,Ɇ(\
o`0	`?:hEgȆq= =
µr!WgDW
<je0-✨C}!-YbGJ㯬u|: |5¿-F?{[u|U_SMHg)9օ76kkx\DӲo-Z[%BT=(DRw5ahs5i_γ)^ZH 1C@՞͙E 1jxCqjYBf(Mp#MmϖUZX5\SOX
Y;넞Co:ʍAVlR΀d#o)IW_W;,Xe3|Q8? 7u1V\;.3<4`{BJe!xfL؁+&ilsWqNhxBF"j᭵K«"Q:ps6g)9P(j,
L,7gHngB9uszE}Kw>
_Jݙ:C{k s>0_{%)F:wHBO 1ߤfcDc_øq<<6vVf).ylIlG=}.n^u[OH<l78
%Ne5QB{kތ#	| IuQoD"!))hۉrioX7Iϝ~[3ׅ -<vvtVO H	i7[6I"x5,)ѿC3׈5HE7Io}y.S~B Kٝ)aF&	$XR7\8#7efI>/M"/ ,|?AHC9m	ٝ>MH>yJ:wu;ṇ}>9ӥƵD>WbuZ;80mW3BӛkܹG_' 
nY
~$<OUhVc Nة`4m4Ԏ-O^Px[L퟉+bߎ̂XݏRɁɆ&m'#2Q[[Pe^wPj
T	/69M&hPl{^g:aWڰ67`5^ XZ
NK#Eo|]Z8 r$*>OX%tmK4+_IW[q｢ z.}!&X8v!yYC7NVh2=ecݨwHJn_S#PNZ7$aW01GBKtS-K<2BnY?OF,LOp5Z*PӒVuĕ

lghL&a
+UOSetXRb+r ϧ1+kw
(g2͆hjȣ=ZBk#=&*YqC'r^%#\7ƠH(׏Aˤ:e][#kn8/kdo8 $`0sΕ"	~erHz`LrbJ՘rE[B=MCt"YI3B .к܎T('yx<s}r_
\_s	o$Z?Xx]MI6:~eJ$P]:l1ƇHn06f!*|M)kETN-^oቺTlmKCw$Lv5[ٺUW`'f:Lp^x!cJ'H?LAW_c=OIEaT-dfTɶa畜"HzMRu$.%m1[
ST\ajK@컞x}I 2Sjy1U[
D)_/t|!aRuLgW؅Kx.=*m6sFf]\YW1GUPe仡.ROV%mC4Ӥ}X^NK´y%N<!Q;i쒧CoF# ?˗@Lp߇e.sT[YxeGY
a5Ҹzyv6lt_hf$̝uD*2"ix)za
YCrs=hO/#cŕ)gOUlۘ{L(gC'~dQvr "&ɵTqA>d~ead5cu2LaTND)epLr.(݆Ģu2080:=K4IoIP?̱LAZRrtK"
90cC5skj)̇߆Wy>5c{<Bǁzt#Դ5
	#4e˜x	kz(t!4.|$g 3ry՟{ӕyu_1=0I0-}+⸊VsK,t
JDRv*iU<ZEq%N.Je){~Mj83AKM9	Ki
TL IZq5S ?vR.p%oeFdct8WekZ	5i+cy_?c+F3v*
jcyaWɤ`{0(DN_fc^m>Lh%^Vm:/@w&-Q
-ՔL
vZQ
ΧJQA-꿈T_h
58̽=q0e;:TpQׇ	}\DE%ӕI+0\@,U쁆˙~3LR\m}R"-YM1}WsH	9Ft#eG_xwE@ƛTSeS0wRZvkm y3L]9V.$){ѕߑد3V2W	J@'8:X·#gO &Ϩ2#rjJi1es$8e.l
swEvTE6yqpdiߜQ	!
UE?
3Ae-YN)y4xhݒ=_a5y"7	lsA@h଎FVYqx.a;l~Iꢊbad|tg-
p3nneKR:Tp
K:"L:gb9Uw`֒{xtJ7NLGAT$9񰑏
)biz\JA0@ID|g-*c)fVC=&<9
VZAX4V@0a'jlMM]
u}S"r8I;LW*k=/E^5wZTq?D?yuφ6sO0މ
[6nL޽d5',<KULm/Ru/w9ǎS~ӣi4t-yӧtciRx
GA7^0KE8cHЬ/@Qh*	y0@V#0уmZ*3Um@ĤcZ#zɃE6IXw!z֚^`T|9 #?ee=BO6[DVUm6pPU/"rOBUWWxSWޝD9FJ)IB
dgU 'f?`vne5\#Uiz]30Ƥ`@p&N U}ڲzN0Ϙ9>lž,*0aO8MPV]=t樍2j]t̓>≨b19~xRrs4}Ԍh[ݭ]4R-	aO3$Ka!
'O[9Cgnf=<K `/ț*5=2VrH.gE: Qᢩ"&$U_30v[waU	ֳX>J6Ti3xK
AqbU{
*PNimjCm	KZ,M&YEjAxŎ`ފ[M\!bu[#Q^Ȗp
+Ԧ?yEk71Z<m'N%y
KOG3-%87X=	knI0%A*H@wtP
_>;7;LPieKz-DRٲA17~ʊT)TA
6$J\Mp ;5id8FfR~@W؀]WQF 0t!['D	|To,c?Z<<nc	Y8;3IoӍ[%W{"8!`;*<uZLwqDg\4:!I
94r#[KZ;4|MȖa쓿@x*
IkP
0+:wT,M{
SYvlGR&k&AY.q3OqysSumN@NbDߔx
+;a
~R̢c5RgQ|<9'r)ɯz6S!ճ`*DX?eaRRMeI~{KJ*[ki\\Qw2:iQTЧT	90p!;,Chq؀Dah;ؼ+p湠}d哕lfyejbB^8]]嫩#̞֖'
dY)Q<W	jP7i&r5 y*7n56Vk/ ze@FGE˱6%1ؾV$K
ִ04

IP4}0UQwr#d-K)Z
\O,:J<,}P4q7)%pMH.4gtiRENK)0eTHLrZn.҆.A
5Ժ_.QB9-e	U!#O&	VV+8TI[/H(/,QCn3K\'XǍy]~(X6(J%$50n'rcil4݂4b@Ժ )"טdE!P_9
NѤ.ɵWTbFUshĊoV8$vlM볳tw.Sܙ	 54/*{sNc"VM^%7%9H"W}.NIìyb HeDK}6~RJp %R\y$
rhy/ImuJ5J$U? P2chT99F7k34 !`=(Ac&Xa<	SZhxF7Ͳk]X28*OckbVw1b

M:6
CM	ۖQSLO3(hyѦE<wQ@DFG-kkò=JcךF5O~#ɴ&k>1;	A?N4K(Z
}-	UO1s(ե!@;
M'=aݳ&VwA+O J2~Rq\nkYpv) biD_<rǾ9qfD~ri1`{'=j7
YWVukkή8Cr0iy L̴P#T7U̲nd[Gr1BK"Yyfi/?f nMY#zzM1i{ag
/ 7Zgx]--ww)xW 5F1?Zaln9UH"p,pmY$ۣԲey8B{ܒA!I)beÊ;Οp{|-gt+~Y$zlrե/\ǡ9,4CLo,sF6pWG巙=e%U']bpd@#\U1GC	cL,	ob@Ro0ͪYe+*.7벓*{ntUIj$|ftGQ.81C4~q܎T\&*L>Je۽bC+՝.5c]VW[R5кGb;;Wx~<}G} -;.-^hT29ڎ(NPü9{՞DZQC^0_V](&(+%{H3_*ny0WMjy#%`u%k*emgVb⡌-L.{_ůՠ)O'߂@ 4OWZFV.[]w;}$1űJ<&"¶
nr羥V|@v[˒M&"	e,%vgS%C@u7P[{6yk;Ұd&M`㱾R:P.V01Q1`̒>꠨Jf1	 Q_bӫ>vrj{yhO^_YDslqH7^L}U9m3-y58dU6)RR'l|NCG[|}iN5\"CNZ7߂H\.)|yw<cmV[36 '%e0'-jإ:|,DV*6!l+ bC_8{7kl+]pplÚHAI0a(̄dLޭu	yٙ.ݷ䖧e@t:u\}vxĞ=j?'!.p?޾D
G!YqXA&/Z<x۶3
d&#y(DW9D4{,@;#u[͆8R"
Z6A:1rci͋nО"ą,Sk9
UT|07oRLjq]W]FCu7x_\438 9z&I2]5/^dlx
DXjOWˌ&u6dM7sʸ1hx\+dtm&y<R*E^<PoGcŬ
GF,^Qx{.>bdgX:85Qtj?t%8Ic$RBiz0`{u0J-bsP_W.CD	3vN8nAQШ Wx%tuym(YX<slS	׺P>SOJ|y䳇auOR5Ig[3%DIܦAf0 RɤE43:fF
Yfual)_q;
z`e~$IdkTXdkSn:]R
+LI=gpv3zj5RBrp]2'kKWKD\xdYNGL}U=%7oZ\LĬEFkrͽW=r#qܬҧ,#
-=CߟM˻jqt^13T[;oœ}W61=`×Z>֗)6u` s/A`oQӊUz|\ 1f2B5ie;XVA?e;1ib2#'`Eyb0Wk	<_3RfH/lZ6$tEHާд[d'5O	j+,Dy=P,Y$`>*Yil	Cg	9M|s6	Շ<	d
DM6w:v
My!E#j d)H_szok5KvD4d"]C(:qA$VIvV9AAt
/\ UqWԴ~UH(K*C_M0	*b65$'-܇Zb+HbR l~_nټFF
7ؔ+\^a{ԏǴC>AKˁC_??xtzKcvi6$
qbٺc_o"qYn'BFr9 @/_TZ>M{i~=ahy$ ߔE	(lkk2WaH$2 )!mxS<&J7SlQs*n.4 w)|JPg-@ymHǁeT4^IKWRgtoeVi7\z`TkBX\ \=avtM6&zS؛E;)Zq.Mu|#xPntArK}
Ez\һpܧLJpFwrEy
5Fߟks7rDL?Z5zO[Q_7DM4ѫ=DتDL%ǽݘ0z4j?o2r-{_k=_{\@"VHυd3'T[(Vi[</áVA
L=aJS'R(/Z`@鿙wL`	R%K7cA^H ^wӥ{%bhrԮD guU%'we!N|pl,JYElsQ{!F}r#S.oahm*2w٬yQPa\YLPkAwW! ێ!=ZŶ	=F7SyB,cu5V4[:WYW/rp7yGXՃtiGG6Ĉ(7=A&A?<i}2j~'ēy:$YEiU33e-똹
rѕ%sVHBNDaT	 5I=]l81ƷO"ĩ$HxBPFDk~7<TMqXlԎ%C@92͉&M4䆂hnĕ&l&yQdOqN̝	4~
/ W~X+K竕F<pcD)
w9*ӂZ7sfl&t@b$ଅf0s]רּ8W88drGQJ" HQK/m}|{F#lb[MOv(i`Ɩq7IeuX+$PepINάk5R_0ˉq"{V2vVnLFژr$C`49O)uݣ)Ϣ춱
nTR:sMg
dqӗke^9[+XY4 N	>:)2륗r}z(em v\ fVP0Y
6=\M͚ ,'i{\wG0Dc1}|T!+g޷
@:-!a
R__,5q +Ӏ`Ham:71q;˵lY25XUYlLˑ2\=JYmj_UKVL9@Dsbo@x7%cɾ@m0GS#ʹ>*{>@~B HWSP!m9HPc1϶r碑=:Ԛnr{*ǏLNFvju UMR v4եdPw|1.{оuY%3Rh"ZM[ˏЀ|am%{Otԝ|,ͫKAUD Yۣ[["UOb!Z*GupJXBW65H\a7\>I ɔ.BώVatL]FSO5r:IHL0_GQڲEG5\KT]%p~_sVB<&&yN&޴<* p &-e񮆙gǕSgx
Qڎ\)֋"ȹ$1/oZ>0Lg|\O-|<lŨ*^ZNic:3@dn6Sㅹˉ6X}T'/FZ#av{&Y!~WG-շ'PnNʛyntT
s}/8-#y0nI^̂uUq]H|KuF;PVIgJy-	o[f)U;n(T@#'V"2}6]$m%cÂ~9bֱ1򇥩P}@ʊ2X,GC0DaVx#ֺt[hfxwg|=`B+bZ.|RLPǕA@R>ǘόE?;$WsmCm.ɿ٫[
D

/͘9IQ_NфmT۞YnU8y$,9	ekC
Ceux,e}DZk_G%{Eu}d0w"gN
ryNMo:Pq pǑ,T8+
;QJ;#Ӣ.Tkkg>0|;8v$f"SzL m
ըoi:F#
*p\!HJnyQ֕IeH:([
u#ݞ?Iǀ:	m?twMH˺e`35C$b;~	sq`GBcP"\!#lgԣ0՗] hzgཛl~>eL^óN {	_q4r.
?sE/x]:V\N
aDFkPE5&mا	dN˟j4n3đ|Uw"@Q:(#wW;,v.aii-wC@(\u,5!RZ\HN$!.m٭칱+_Pl;oU0',ȞkfXP{n}9+X8d'¦ j[ wV꧵Osw9-rכ%ɏ+À|/bIKyv_	B3 
McouVbN,29ag-""0?, RBx; ]ɕ. gļiy#2@U]
_,;zk+#X#Xo\ϑ ֤3z-wqs-H5XLr+ssm܄rf{?p0Ah/hޡ޾V&!L1 @H\bվN]n(]z[Fo; ttn5i {{Yre?Pn]"Wy{Q\K2mvJ`u卺9wxA>#M{kմh{;Ꮱ'XmW>H~Ai=XD]Bj˭QU?7 5U|j'h9<y@.rbC5f,<+r6jV7I6'(,\9)d>?:rHÅAP\U%NcW}7, pѪ	47'9*MJZSæ	'<c:~o@+5mhvr"Ner0]rvDl &/,&2hz=)EĽ"gˊ3ϰ,}}]G_EǂN??|Ml%5^*U 6StzBpJ`Hc"2%*˔"2(;`+ߒtq/(D9p9bO}_ӼzP<l1Ж)a25! @
bS]k1*n:=A!cӶZZ1nn}#R+To>̷J18q
!BHU#t<\JwB~r$id2tͤOsP9I?5=qg%Z2}-PfXjNbX;YxfߩH$1Ú){ԅF%a;FҨ*>>Iޞgsˈew&5KP0X=!_bYΟvEZr:ncq4V+(aUF!4)F@y+XBBhfa_^1tL\?	9Ik$뤵y{Sb}2\$ߡAn/kZ9G%>AAsoB_	<RٙЯ-(o';B[Խi
";SB[~	MƤֱ_Ń7@(?Jܨ(C)p np+PB%'6ivJĹ+C-SK<{;$>[|ǯ%_/a{6k
]w>u_Pљ$_|Дfnu
0EE8
):~f::Ci2m4-nemen~G2+BI*7ZT{rk"k4tݖRCG`f-Z$
_,j1*Zc3t=475dtPgpVuiB(A#B!3Kpm=)msW*EdX1;l#bӑ1iͩ$Z'U `L@絶B_~e53=c|аƇ
F3gKOWg|b[ϊix6%Y{\KUCgl?I(ސ7	\ǘP\+LXl; $ÖMy5(vwEMoGPR<8F/1Rf0C53v|}͑_R}uͩOjg
g(&päLW0"DOg&#`h͐汴1Qy0
:LXu)
Z?1jnO^PEIl Zb6%]n`W_%JЭR!95e>yߜB;uaRʑ~*ͨr!KHUNdr͈lٱvJL:t\*inÝX#vtӭdwQ>/u-#|N
&^v'_(,NftOTDevg>qF	1M߯9I<gj}2Vv0eߐ눋'lrhJ]}:ͭ:hEu]C-͸aI:pJX	lj9C$Ucc5UQNtKHRb;]:=
pn'qmhKARkQ<ϛKS])l<Ndي~cwUv \Łmh-&/~|5.x׈Uq咜`w9ՃEnUn&-/9.5%ɣ ELqMgzrkC*Ml9rks9롡Аm`=֌EY>x*
'DmREzE@8wde~)poztWqV=YBYB]X9c_\FL-Yk K.\iB
mƖ^<lqC`WDBޮ?~όqb牬0phXs5"
9]0??@][95RD6ʹp:FjKI1%ZaiUĮkG.J*v=[6: 7JEއ9]k{;F6to~3i,L<x|l}2UObo~f~1?gddzRnЃ @q KC+a>MJ{üx=ﮊ໯ݍ[Mk6ZgV`x$%BU5Pe95iۑkזЌf^14|p<ڂ~7zQ)h[UmϮO]($80N*XY-|#MdD7\7À>h؄ 1ߘNɋfQvӿ࿆v1`|'~Lͻh,[[]sk~i4N&/[%HL)%tY)j&)7To~ᗯ-z6f?"d>y 6J(b@`tKehGmmc
x n7<Z(e1=Nw25y[Fb&pl1Ն8[])&5la堲[y~{PM#wC~DM
veK][
\8EJ*6Ѕu*!&)6%ymfQ|%XbBE}hî5x_JO2T?ܜ-pk)"/U19*
{L]TLo[
1B[s
1=W"QEYle[hxP1*#sTv⎈DuDr,N_{.i6JZ
J~W ѹ7x@nirl
79?Ee줨upQTǌl5I&;EˡPώlN00?ChÆ&yO\Øe(+ n{CL?I%!!2]K!-fu{PzsDpVXkbXhKTZ.?L%Q?M`W?7&^!Yi}]T2Ec-?n@%)5xa$57ʃ9a<,p%v((+G̐Pϰ?NNOQo^M;&󁦖bi[c@ݪԷd&ԸJ8p߲:M}{bE~Ģ>pꢖGmfBJqU@tOٛu.84BV-:T<Z:(h%Bp87lbgA\^Ī
U/{'pNC29ٰǦwy7M;wWq^t}@0ȏ
&"z<b.J.PM.MRPJ&wkVb	~bkPX _XIP'>@)>ߋF+y|Yf;7i]e>ﮞQ,eRqE,t#㦊Q?eF'	ɷ\U"K0nS=ũ>tfӱ29o[h4{@ZO	
rY;A=b'dM&ӭ=`#d؊4O~`Qj=DA!S0|"9V'kVu]JylEFǛub峄Mg$K38+ƬaoN7h׭(cX{qhґHP9pe+n(y= U,ѳ{b͏$*bL2N]>&8ޞYBarE=/JKw,KH{P]Q! J|~!p*n!C%(|e/Rfke,/ҷaX v#(Dmt'tx_ᛲ+>lw6J}g@}68dH@FSKgpֽR ?8*/'L5p!Xo$`I+Y	z0..pm<&]4i 4!OjOQ=)]' Ynm;P	yfLq]BAqtUXٲQ@~*Cݭl+_/bSwV@(xu
jEbsaǘ(PQVQ`]`eN,/qҕw!H4^Tw^] YEk2xZNz{^?&pь-	!x@rwc7ѵ^\:ϕ:ڤdL$Crz%6g5CJ9ktC㱛[n֋7}SsfUnR~M!O-CPUk1][tbp^v߅ #2]V:7?)AS~@ϝ%*Vm7;6B@v.
,(0VE ȵu(΀atJGh8۲i*wG'7fޣEAi/ ~ҟøٙu2dfRy-J>8Po𜢙 EoNz:42|1'7W1W1~KzՖPW'	S,6Gmjb3m d]kܷ46I(HoL-t,X)Q;`;PdNw*wK~\;FFH"
6o0-?fO]`%e~y/UyޑUx5N't^L.<)GAiex$+Uqj)zgMesGqwk+50#7ᢞBn|E5/FMp`P,0Ue|&"^4jS,ysc-6+}25	a=Dg1d(sr6<rR5ɹ:ǫ`vk5oHʠC޹">ց;qՖq$#(%!<rUwu_|,? )\Ѹ&<KT;_ aC-SG=Ϻ" /WI,hΔr^t9ݲ
bBd)^8TV i
(U8'R,	3f3IbGX?I.hư5FoF
1gOJX\ҧzsӽ'=&88J~2ƢwAlpMk
H0cR3|'
ݐ@10	W[-
A:y+C 0afi|KK*unL s2V {
Ya<4l6\>Pա4Ff,lkz'N܄{Ff_Ck`=kbH?ts{ŏ4eP7h&D؅'Õm^b[.p퓅߅9e#4_z2y1X?&Dybݽ+"9p@#@2YyƮSn<Edk]ig+F7ducg\PN/N`G9S,DFEfKQ{[ޤEF6<mY֡`hChv$?zjVsNE I3V2q0!UԷxD駃xr&~d{$ua'4gb0l+@c]Y	ydD|=BH_/6W᪉4뾝b/FNn`PUϳcpkua&T/?kp054D5	uU1o#H 9QˠD#)yUƉ~N~*ض}UQv\IAϷTYǟ h/7K\f;;x닌MXif0*1VavJJ:&hD9⠿&_2t>vl5
A_ƋuQNt<g¶0ǫ*SS :yTこĉmQomTha*#dip|%RG&kMHġTH{#3jg"; ]:lS2h+R[Joe	v`HFl.S*-&]I_	i1UxXS
2%IWWcN@<U'8h+/d,A<_!aܛE)O݃<r(L>`XC`_uK`H;ZE3E|D`p&H7z( gӸ>GW+-ч7ׁiᔵA.JT,TrXyw]'BWР#:%-`󺟦DVo#EK>cRo!9ŢhġG[]\dF>(5	
afG8iU֡hJf>oɦc!W=@O WQҔV
5G7	xpU<\rwiYTć0ȐhXӡd!M82GAWB!LbCjthSj]i(Ӗ@͉΄&~0ST_f [ [I,ueo 
hYt0"yuji찂L#Ddzƍlja$JClTYEII7/<"Qxp	G
UMOx]
/J!й%1p?}& "Gk&SWd6Tռ PTQw<RJyK+,bzQQ Bg<;(-sY=?Q8޴:%EX&t>(VH	Zz( Bk!69`lfsu͌Drt˄0:QoS>tlbP#COkjM<Uv،b?TS` $R1#MF(˘ɦx.k߽+jo@+:"!<5#R>i%CB2`f	(?OSo]%E訟tZ^Rp-n}d>DDf̞׺t/dfwolO 	أ/Xa&&K0h`ϗ G5c6T~PQolsխ%i
vGO$a2(ҪW긋D3fG̣p	\nj`^&MfIsqXmӹJ̮$M2`fڪD ?8).k~mާZ:'a6vliW!]m	Rh0ϻNweg.y\4>KE=`1 d E˕fkQEȁbA؁1YZwCȴ@.a)V뺒MGkH0>J}Im1ۖO0R] 	7<q `'LE1
i	` ]1Dtp
</H0:PJ\{0Ւ
fwDDV&4rM3S\+cqR	߆#cJp+|>R`DɛFBy"tٔoAM`ϵq y7#LM
Y
}.o{zru|8 SW*ˌSa)^Tń&_[ԟgsZҤ!sCZRcw }O&JV++Ƴ'2!;#8#$%mYmy@BI^clv~,!`'hGGx?Ĩ'ZRZY`A_aH2*'X%̑b	[Ye0''zxM9tHYj3>P*ʹ`}3)p=Ju<jUajΙ_1Zp%[i;n6::V}JSyPhN{1GUU>W6J a8y D{ۭ2v@`9Q:j-Ùb\ meJHq͑I,0cUjH~WNKߙ֘gQ}a/ivu9TcuFЃux
6wrQU=co0Ai(&'ZRPYex,Qhuv=Hi;fAU֎'oAujpE_%4r+,zr7N϶y3j&peA1 H`
Tq.!Kc` 	hMuBH#]1WO?\[0DmD]ZBADCj`wXy!Z2iuY>Ș.}!ߪw[S(ϩfxL?fEuxoͣ&icpW-+@*W/#y'~{ɴ8NXR/P H?x`:'_ȰHBۦ3 !r۟W0ƨuA=VD`#Ssvm:9FAC"
o'=̊k0perx.WdNQ:o$	zc㣩Ɨ7M/xUvD}꿨l@$T*.2ZwտK3Lr`~Շ.ʀe<[0 n*E<
y#-ӆyDU5#=G&z/]\=~<!ёPD^d3Ag7~,ŊDq]K}ŘΩUmUw8ڽry1u%n=p54=oDV;gUUΆF"j7X&>7s
D&Q(߈I0˴F:thފkq̺xkFXC5vibHbE?i 5F=C)*`/SxfZNWlzpP;K\d!97)t0K##bx, Y I$G" +3W4$X.WnɾG?N[)'}\Iܴ
,2ɂ2BZM+ՏZy
p5<kګu6UsΠc
f5pWvEqfJ,y+H-[u|Q칖Ƥw'm?cc>reP*i=Ua$}ǁE,$C;?T0	'z%؉t\qUɯ|X	ElBQ/AJ3We%׎uɡr\ͩc.{3͖b6 4.ZtҪ/7|
T"n)aAwĘUňq=EKuPAQ5{tvM|6g,w-2UD_{i׍yyU7JT+ApQb$Z3\7b

Vu>汔b'l"Ee{7>1.u*a86.xuGj/ѥP%	;ġ~( qv<zf4gJNqF<f>	d+CuT\W0:l>b-c*dHaM_qdGf%: pfYjr[ɰX.EPCc5?3S<RKk 4̄hs}=NaU)| 
@iI`e\]C_޳!5OM|0o<0_A5")Ng@sYf5*
UAPY%fV_$|m\m'Ny8;^'q#LTi7Uf
6H)UB俷Қ ribޏTuz#Js$+'b,<-RIcIV6jBlu2|WpAA,xoz޷*;Y.KDǝ܀/? 8숨Is ".U8fmr|sz]whsG	J KmP7,{Pcj;
=mwWxwBQzPYvGȥNug5-OsJ[ЀXn]k9?^k׻x-CfPiyQJ"*hXX~
_"B1e8g5>8+:jM7̷8ۢ9C4X>mY+~슓>-ŭsoV*]|aat(DuO^.{[i:8dn#Gq'" %`cQ\&3
VxPB|$
aEL7Z1^ۦBX}rozca_#lsax~W[ZcE_:]Ƴjw/,g5&)*.	"t|U\nOpݘ:"MJQ̅+'[%8y趔F&<5C.ٔ@#`WTEs2)*d_֢L/{Z%a #AvPKjTOx< IW}jMѻvG,XE| y(䲔ns>o'Ybڀ
P.ga4$|d6 ْrPz9h2icגSǶ*sͺ,ªDv!KC+ǂji7UYqq5^{C8ciBy&f|?2F:<={M!d0K_y_^cn$4<ԸZW}0m շ<#n3؄%ǁQ&8ZmW5jǶ~ZH$q<"-Հ2^,nE#jsN\XMxi#n)\U:̚=`ikFBrW簵\v-ikgPP1v`9
T8
xnb:^= .gdqҹ~bm 02w$ny2U]BW dcZ +/Q
xĵ΀ף[ҕZ{Gϙ(Śc%B匪ŠHUx!ujw9bÈW܈+FήgNʋ~?FQKg[lT-k26}P4rD*'x.L|bu~k	m[pzBY8o;֜6<3H#ɭ.ޔIygpiU562%OF[F<k/`~}
zsRh;Ól<uܬG\/4h{.^SVHoSôj7򨳍<fq?e^6S*t1!.j7)7{LT,tY1"`837IޮP $">ǒ6 $!?hj	ۂ޼qO" (fM6~3DWzDMIi'-p%Zg!̦f6yB#GG-ތJ˳Ws;	:Ζ(/p>i.* <d	ۊ*IJa-(Y5'6E}?cf
/.]+ǌ3[ϱPM1XV
9@5AlKz`u9e|H;953V2tT\ArbxWH3Zz|	}aݽGEthܡگ/"TGn#0';򕾬t_ȸj$v{pOA(|QO̅y6!'#F%! 1םt[$MkNuȈX̼[" հb9!1\nufrM?qZJzZ@,O8Bڣg^o'tRc{VRMv4a˛Ft`
X:TmgS\H?BNt£qmaq9kbm sH ªa)+InGEC5
RUz@w~Y͂=ii].'_T=Tlp7Rc0&~BdI#1X
:AGE$ Jf00=]Is׀7]
\FOpj&R+xJH}%W0TYF9P.)aIO7MNF
ew	F4g6g_ kA_$^7JI7 &ہu4Wt&#R9M^;FJQ>$l-vf>;f΃:ps)֎S
}x'V]wҧE}|Pm~$N/\ǆH&O%ƾ
|KYugϞVrVL84p}L7BFHoT$Dl
]mϻI1	9Ib]x8ﮘz]CP xVF,xW˜W/geZ@-BG_zCk5i3X^:v@tpQґZK7K6u@iẌ́z>W42#Aӛ de/t|ڱ{XW1A|+z12"IǫYWYt>GZP2p灐؜5R8!2J×k+%RnRjx!l\f)-b5+7|Cq$Q֭=-)Nhe>(tD;#)'KI` dغyz;'ԅxɚ@A0$S|.IiiGbw?oZ퍇Y_f6LҗOo#o+	?r와S܂D̸7Z;l5
\3 I%.9F1H`3ǘ
M[Pz_sud@BWBT񭨨2ИJ #\H*1<W^E*IKewڪTU*Ewm	V޶
gj2x󤹇&{Nhhtgo?uEQrTpÏ/":Y]^i<2ӕ[&Ul9HSP	+'_Zf`as<c	}6¸fNK8nɓEP_bx&Xwjss8,PJS*	N@~g@Iِ:ьf/+D
(`W$=K%FEf 2o
"?ᒔ
3;ٌqeB1+$*3+ 3k(}C&li4#!<Fi0h@Uƍ"MSu+}BZ2?#t	AihiRs{MPgW\^wvig VvvvޱvM k=~AZעdp!TZ1BTO}}cd\Y )OcO}HojvLSu2|zghݻ>\KTNDyMfB6кU=;P|
흴 ݔQV/UE2ģflUcQkb,^埧T3!n׫i	b.BK]0guңNn}|(({2afP@:Nu#쾧fQ"]~N6T(UPb+蟜_Juᘯ>@u3hdSh<O!pKVFߗPەnq{4ToN/PFT%
_2% 3g4 Y*!o
Kt{g|5ẢmPx}%XOMf=}!tO\W>E˭	C]_bs׫Ȗgjuglu (Kv6Cyd=jETPWRk}(XmC+xw&"h[~).XetR>^csfل	yǬFh@}@,}e&!9"y,P2=X)tr^V("ôf.M}qߟV*zV\aX|	6.W"lƨqiarzPzij2q$ԳGhxp^}5fͬ2mozaюǜ%lo:Pť@iN_-El?MLf=N[[֓c)俒2:eο{2cpו-n!Lw!Ww}XoZc<qk%Y|-/` $^6q[ci;ƐMȸ6=ݶ6"(60-ziBE({(10Co'G.$ZjgËD=
a;ė1Rls $ìDr'i-­>,N>Nfn>#^Dct=qf`NPb'N:]HtiUCדc`2{祦Mg(~<6c"hldĭM+c*[dT%]3 Kț$kzqK%U)u;!bcUU+S\ӟVlNY:]3RDwY&X:HKޡ}{,ny@\O߃_fD)=6NCwԼ&V"5qQ-hO]9u_ Ezq!?#&?̲2I致֙h	ϡ
b#5o:NmxG(CAV5[/x$͓!5-bTH犯?
Bv[D0;zy'DI` B-G~<	
<EOzވ%5\c&m ~Z{7EAq%(CZ4H}_z:G¡(B˶B*x,RX?5qy'dLov0JH6D,
]^*`UpsʗV;
֖&͕Phq_lDMi?PT%|!렂ɘO=z~
uga @$O[ځp /եIA%S(发X4hۿtM\n恱g$WN>(A=r]%2F8Y16PL6> []hx1	eȊ;0oA}IN!I~*ؾ)A
mZ0&~삈VmPs`Ki&k\|8_`:1j
 iBAc۔ *↘p _h@r^y,D)HM=ܜTD轚܋yO:8*1(d=Z
a:"weQk$vK)p-PǼ*Ud[:wqȳQ\#WRL3A.mXNҵzvMҺ)Fzٚ1+W4pDzq#O.ֶny*^
]>q>,n(sz؆T^ (,lX^fz1	MݖA5ckI%]"i7TO[j+ԼC!o3RPb/vϳgȍh&*67S34XQƆ$1lV-B"[bOdWhč,grr>PKTF|Dة45 	?HTH9~YDVБ`
 ?'Sj?u(wYaIxsl79W|zQ'1E >)٪Call9/zB4Q@
ten|nϭ ^3Л*`&GBUCzuR
&OQM"	[ucy
aJx?dp=ܒ6B#v-EIYw§oFEܬN3d3< Iu2$bf鐀p;^z-?!|)q}܎"kgf'afsgbYD1JJD+2_  ,o>
\}CApCuC(E[K6ypE	R[3

G\b}`j!B627f3!vNT".rv>}!V]l~CWq6	oV~_03:[\7 rL446eʑ  xD"wu:uHvadlidVY0mX

V\F,HU
!ѯlOOankzK}~(Վ*>Wk~->.>ڔF$d@9_gSc7S?bis%t"v4BՅh1˧8|E|gbcthE\SŻsE{(so
XVyh|߻ZX!t?HHMg瞸ObD/ߎ٬S	>«rIUgoB%$ǊBXpvZLKl٪4֕}Ԗ-H2O`'(B8'm_kp޸0׭*.xN	=_<r=08!mt8GLKT.(EbEU,y
ԁݶ
+߭
ƟVZX]+f!47ir4a`kR0ٗ@˖199ͦr&O׬crWyRBSJjd>QM>MebW;by_vec'=i-;#+?aⷂK=9w+'EZ/ժTE_I%Q~
mPߠ#fy`&?Qw7>]Vl\,S[g\Q 7\[U,uՈ	̨MdָB5O CS3/B +53D	5wzr	bOoX:Z:2%L+q*m<scU!3R+%cǠ%=	Thk+ 4\Lnx-Qx w˳~E:Ek`)eȐ,rc_F14dvr<.ØE(
sWds4kHo7iwLän$,%VQtՆ05S	Qqπ,/lhPOJ%L_ϐ|5L0,JS,z[xA#+ZrUjtՔY=yLCoE&9U2%e`b޹	J3<Mj[DYHY6nKe8ss+VkX1pozF@/xnJ~6;	3+,']<n1SUP\ޞ%fE-#JU~^]PNaSH|JlnO;V;k9P`- b<sZtJ7G܆FÑJ1L@D3;3sE䄞Vq+|[vMm@NះZ|Ji~K"c16A!R)o @nOz*Ɔ v1@O^6uz_h8e>
4L{9YڤH4+)y֫9MovuK1Q
в`C2#s:Qt[՘w.ǭC44aV2c?IT8wSw6	:KYK:UI╈clކ8K!򣶹b$j[
U\I"ds[eͪjf@zj!s6-2Fu
qN޻ݴ!>_G7whz嚝n5U̚g+_|}AQ,`
]1&)	3xLO|Wwj}
'Ϻ&yJ@KĪm
 N5
=6Nn?Zχ7h)'T=g!ԗ<SV;
(\(iU!.d;yrɝ# lH3p4P%zq6N|X50%WVYFUU.i)\f$}P`T[ŽNN M"5fAI%n0LX*fJĮ$=Qc
xv_ E&Ϣ#pqE>Z+`	[N&'Psq꺶(^?eþ E O៷wשּׁ ݀_Uu%WmJؗoY0;K}\35%.8N{UM¬Yp"\טE/;M&xtf_)=3r0*b0;޴B߬NFVq_"r$R.봡n.fb}1Gصw2X^MJL2Qޗ+Z]  0l-~>NݚWj*w~UXN35O
-hPAصrwnLb>-)UT v%~Pdb7f+`X
!4EQ@xI}No6XAтMU.tK$>7K|4=uڸ77]@'D<~2U2l(;Q]T(spM!Mc5 {im	P:=[YuSOpaJZ5h"2Ơ<p4G=
#llh)okCղj%=NuY3K5O?YIL$;G3'M uX*<8=0J\X޽K5G3J(E_;T!=،R@}/q_g0l1&><i]hSM AQVS<{ZW<̥w
0o1k	+yYj1/Cǉaѿ>llr(舭\pI;mxFP7KBUCgͶ,"7nꃉ
r5ԑE3ab|sŘb^>¶ϱ78W/g;t҇~I0	6p70tgd-zL# k'\:uL!$b*["^1Q yo|wCSR}/Uǜ"=Rx'E}aW
*s.s<Gbm\ӭ8yK<2sCz?\v8DKßp$5Z/ɜ,
-*IQ i;DkZ;U^[,	Y+۬l]VD/UB@{t_Է^rZL ,FfbU]7	XN,|JZ@BGG	~-&I%aBѴW3&ǅS5!26Ð6pPWs
IjI*Prj%x5E ֒Й'*-Ȼ ~Z]TކuGu_rچ[[<վiĄ"tj>+A+ R^Q1>@6
ꅠ$MKa4z6[RꂉViyZB98N*Zl'-GrࢱS[GJ]K^䏞WUsL8a*Gj]Lёk׸
C2'?[VFt(Gzz}ط\A;\ :UfP}8Hy<?1Mdf&۰R8V5+@iq >|&A[ǝTg15'. JGZR#Ƞ2NxbrP7[e8"Irr)8iS/>F3ܓ  	6yA`Vq}B۩qdVbDU{HݠCh9An0X
)(cg^lԅf6d15w|1aGK,ϏA+1I
Gvs}Jg{f?#@XI=s]dʢ.x5t~TŷoK^놈19ej@GE/.(*x$
k`\Iꋮr֜Ӗ)'-./r^wm]dc7wf+M}rdUƾrSLd8tp=,zov_ Ѧ>N^3J=<94e&p߄>|x)wg[cQ2Tۀ9$wKb:`"U:_GXNL`.Xs[nbXd!PYJ(tv>91:6_vnPs E3jB `<y#μ7:V(}Ag
qR ՐD?f+yyFE,︟8Fs.8&;).j^30Cw@a6C?`vhW^)4QGH4;ڹKcYZSyIQY^9~Ng{+~~'xk=\=0xYx]B2
(vOJ]9+&޴yY Oǻ|q@
M`%t$8o'_GJ?N.5@ϥ
n8*J8r9qg1=v!M	:OՌc!t95޳&;gj A/BC_"hvf9Jl9tHw:KkmpK[N
ϥEoJǌ[ؒr!SK'|.ׂ
~!~InO#2?`c9588PbBa]?$D! 1$m6J8$b
$\&ϋP=,EˏIJHvnt46.z2XJkm1R	`3n}
z'$i+(e2u#@Gl/X%2\(.LY0=z3a.5QQ~X}rXY[X^zxNHyU!zqEtXYZ9YZF2pafdt8F{J">3F,
*Wucɬc	yAGlY("":QH95э^ʡl	hHңqB9kxqEa4[%7%(dh~:zH =d&Vqp'G_֬ɐk&tsZ`6Hc{}ihɌ篯	<l;Oj{(~UP;1Zp돒*Br`"Tɸ6min%+Z{%	L=F.av<>V@\waxvW
l %`>5<"t3x#șWy	nM3u
Sˮhf<>]LS)1(\GykZTa6ժ|gI
Rַ,1D:	-+>Η!@qD[q\
1\ZHo0MB	hۦR!RMu܌DW[нSYFc@0 nWT(9_wzV(tC+2d70>ܜ[;Ќ(Z7塥xxoP":~/cn1GuQR)[Rr@G	Ac8ܟ=IX9հ
`/9i|}DFt8;|FmB`Xl9@8G;wZ<&xVK
BД
OM,
$t7TJ**V߁A|{\&W$.BŽG
!o&g[[6'w
(lt
Lggb(
S%2.	7#&3itgw%u`3wToWzݴFJAsT2	.QVbάΛ_۟F.B6. ?Ĵ$9}>olUtU(m	[Dܕwj~1ZB1		9d
BxzH_XmWS//
%
{!
t`ˉ+5s3v'*Χ2d`0Ou#+N!EP,[)dy) .8+$l;ڴ{	"u T 0ׯ)Y(lԇ&]G6q脗rzPG!FHyaf[.YH\xY(<,GJP	Ug
eneOGIg/)3IDܤ=V!H/ tca`ʕ4\$vktņSçzt$ȿj3oԋ}BAmu	)zNC6Αr_hXKv}iGxa멪츝5wf݊uY4=ݘ.W.؟Ɋuqu7%gj	RIAߵfU;Z YF	 % !%w>L

??# ?;EZMD>iϯTb#ؤCp ?siw|KX#x};EYpz_L/WJb>yR+Et>!"+׬qʩW Cq출HoH7ãECUQg (Ylqrd&L٫0=cߊyq)/?-?W-n7%{rz#LRR^!eQbH_5{[Db x#.nVG%Fy\jAz*5-?2GX}E!
wjš2y^+}[]NE'?k d}aR~Ug"b|w
mԂ.6qG9f!aGF5+𰆝Cns𕼬b}saz<UbXD4ab}ߖytNDfs_3ZnݗOz~¶T5A+"C\o%꧑Lw;kc#2ntQ]Rl8oKKfbhK=
Wu@&,ӆgnBdkOO5aigosDUxC׉jdE1|8 
p콋}	;!B~D<Φ$CVo^)uI:v%֔%3?Ud8Sw72B･gǻN-OPA'$!wʎ/,E8"@cѱ3zgq+/'VA|xGws@Eݿl+[ʪL}r\]1$b_xN֖6&I&I(L("x[YE*hI*z4i7x
 {:^(AhU-9bexuӇŸ`k֜p|KfvU \.K&`C瀝ʦ\RW;sWbPurԿ ;'gqQd݋z*-M&r2n6f|1i֍u[ڛVNPHZ_ı(md2Bէ⋥7T"	vqM]G_SHP(UɴeU8V?jP!/xB9}Wq#}bsũ'de7t Ya!~EI+4/a^^cnWtM̮,؍[Y {ؽly0f&2-OR>͎-H _'s$'K@(%?Bz4QMKAxΒ@z!
bLq0v]NB+83Q`ӺJM.*V&&)//
Xu CKٯ ;UssZE3"R;K|8)_TmiX:x|Gb\8V-M*o-+ɥC)
Bm&kT$aUOhx#̙ŏݳT^/Wr</s8q9VUVt:EZW<&Es#$zpm['>A/L26SڱeٞJ)w{^E.aMh|RkH-a=
{5%Lւ$'͚c'&rFl Mwohωz/
%-7_SCR	ed/\1^.úGŲHC9L`s_,L h'SoOK@$oF:z.u$hܼ=	ZIE.wwfH ꇒC>X
< IefjWj3%,A{Y-ψ`C.D:b2.rTB9?׆Vq$	ʁp.?rjLm<Ez[N"k<Wl7L6N?Bg(h~鰊\t~g.ظe@0|BGZx4.m5ءȊ~^L-e+/R/ކ(iOn]\G,OO%<G|RzGgNwؼc&p}:`0+8!^Ⱥ8P!k/rJ39Alڔ3vaĔKO\ML^a3
'[0I`J?ee5
GsϳrNSHO۾m"We.tV8K]B2rvzx(vk#?IFSmnv`8a/q!bRUMDJR$>;OrH GqS.6z82E=`y8v.^-:NZ1`
F-J8~CD{o}a^`OD·]"9Ɇ@zFpFgM.M?B'yKE֔:hjiv]0
dNH1	f	O!}< X؈jc+f}GB8zF*L߿
=.C!/5nXV-<f~:cX}:cpeT}gqI#Bȕ.]|K^H0g+9enoۑp+3O(uQdU?v6"b8#^;[HT	0kfĴK}4\ǸB%5C#-ff}q]	_DRc޸RÜZINxj$.q3Э\BaYa"GݯO_V=O%wngʨw)v3VبM|AE7ϗ:PAL_NCfH&Χ'<!bC(Կ1q&7B0u=ҡ>1czt:P͎-`: $g	>FR='{XFtCѡycr{ }̕B3@H.o$6*{gא#G.uW!=:
f0h
tn3y*cX{v@d65nmM+LKgdWjɜR$t^2PiӖU+$ɒ?fchZcV\E[m<&+r[-d"l#pԋ+wv(FU#.5!+(@`tE >:'C[bAPCkZ#%,E3	q9˥}	dd ȳ'\MԁӐn$A8r3cI5#5ǎdGDa=z0U6XCvj͖ ?cuKcdg1l&buQ#<܇|JQ_(Ta@gn& /@ow'RP>
9&X}zygVoY9W:DgsfبpDLCdD_Ѽp/πO$^mlx" нpjot|i
Sh
J:h_Zz1X|6Wȡ	7W޵Ky+sfsM`!*5aBC%`
4kFjBY@5ozZfGTC"VoC{-D;ѵG):f=f@㚔āODdsm5|*t(Wn
^/-iP먪K^eY)8=W3!>8k(bMgQ1f͊M#	i%[F aiSRet<fjC?!m},fD$hj*SI33¿"K0/PWMAa"+H3:X¶?^&xg\,nL	tnIpUp3Uj/<~N]h}eS)>-}:F>I
Ir(:l !i>uTQ]cp0RL8:g&hp/]|ү[xlWu('3?,%<N^&aQԣօ]`YK$9m`VX<%W@}`nwo
ui$6pDR0"ȱi؇#csk(]zfs%<$,3[mk@|\Cq8&|,cQrC
5IӈxL!+ha-S~Sw>Gr!f~B~c$tU`iՃd+`W?9,|hsn|POfz=E/"{c9j 2 tߓ{O`H0o(C=bK[NG}týmj?R&ſs3+ͥqwHB$wqQ.T_["xQ?YDWW1Se=bo!;rtf2G0yzH!X{(Uc	Gˡƨv4h9g_ |24tJwGLt-/	Jiwtecp'Uؐ\@P٦}($-)OvDZ;T\nHWox051D4Hw&*+1xbwI<҅6?	mtuBىk2		oʡBOAnߓZkyb@N"UА(J}	IX=d37q:iy1I"MV_`f?d8ݖ
&+
ii"xh> O/}P|~^r) ؓ 0*@{0R忈yQaLCgR@B7LZM*[um^ψ>	ڣZ5Y0sv^NN	X+tZAWoxٰeC0LOŖ_$^!oD WyUed{7pCz
Vw+74A+.<
tSi'!*.LurBQE<^~Xk	m/3P{u=EZ͋GhB(C2=TQݜ"앉A5!wff͉4zC	)C?˞8\Iogn`w&͜@n5OV\Hk hIS8|eu
bƸ
vm5I]$Oji0f^mM"}&o+cάQ0.@zGuN@:҆_&^Y*Sa6f?q´B
C
D~yqdc~h~EbIxɹ'r\^x=ڰs	@VRWDqI;\z.5U5W
\u(5~8h!&ÛcRSPʡ8*x᫠(u
(9"> %B_Mdm/R}{B>Up|%g(0 
wyhjp6i9K/BDp:RP`s1>N0aΨ)mav 4I;\RjRѽA6g]O5mSnh,_,Cp4ӕG}:V-ͪg[Aw?}1a0+&&f-9~j⺁yS孕𦅈g$]f5>B\*MSxC0;gskލGU׈-qȥp`n=9||i]9|]{gD67ݮÍ-B1r #㕮cε!`,17y 0";dwxVvpLF7Ǒosd2.0.ZtjwATG~I$xݍj}ea7y.2
&kI($솕.7ɘs^_K%wKt	
`Odv!#:.,ji_D`03F>\|>V}֐)Wɴ(PqT
D]W-tUZ\t]۷<&kjIlf4~lb!
<Ct95<ec㶿`H^f.{	uBW
pTe˨܆G**BvaC?~h$5FZ(WDbGZc?J@-ʺ<
]vc2Y+wj<eGR❫*9,dkvE<O*:BlF>/t_?|
3Yr_81U}MBO%ŦV*I3䉝v_G_)>E#I"ꮞgFYwη9R[Y$!$jFhn,fop_B.DlDU	.%l#]L%2G.r'NF M^_pOH\[`u=<E/jA!@4%
y6ԣ(B˘UʯGxpmúû,0RpoW4WqH˻zY۶Sko]3B!y5Gur)DYpf 5S== 8܄K=-!Vpu!lWsBXG
*+bL]ҪX>s +F|c#6cɪoFXxyYk2͠{/ټa*'MPbIɲ:W"Y j\V3c!.Rh¾>q~?Pi:W*!2`Y{	5J%90zL.o5|8ggddɻ*b#n8$<ߪAI7d=Vm(IW0SqB2Ԫ
x@FеIek;+3 kO{A3fPWɴb
їU$?(e#e۲EMTϱw9@ Wqr2Y+¤ڗbӨp|B\}!>2/	Z8SU9CvGg(0,.8XL|vmh<9.!
A22f%IM(	gvVPV<R~
 ap\O?
3/fjG\zdo(N)ø~sn`au[ɦJXˢLD3qpԀ ź+	i2\~Ft~<ː
d86ǐR4!fCj
97o]eZFfq3s$>LLÞcT )6^&*v:S<źW0312VtigTI,7JP(t?,ZpRaXũso
8G2*i?GK
Un.Cs!A%VT~lr-u1&`-\+GnKԫ	
q#I՟ͳyXVp(VfY: xmGj#Ɉm=Jɻ>KɈInM!xyx/Ar]ߝ")H%Q
lXW}A;}S
y^r86b헀c+o>8<Z$;}tAFWJi9GQ"hMKm,!UƹMpIyy]z*İ}{|,AU7}ZfLzY]irΰ}KREK"zW"mNsϟ'+b6_]9\`dIVd>~@.wLяF'!'f	Bn{^; ńjRˇ IdrP4TOMuO2=PqrQ?]j.gtIml˸>/x0KCyPjRf @Kx),Tg0<fĎc3܋ٯU4\Lb}Z}h+d_6Q&y㧟pX
s0$cbRE9hvRq	K4_2έ<й_z2Ta[!8yA/s	tد_kԣKJhƃ$ӢBHh4دm]2LW4ͮKp #/%H8e,cWHzjP_9*,I8I=AL:/"
	UaDcxJN[?z灒piǦ\
f֙vZ`ҷc锸@Ck C~S0M /p*^xQ05<`|aJ;ާ_S\='$V!)e]c "8Ww_{vb._iKu0 T*74|N}	 O<UnK&ܨb	@:)ou_hx[%Oe0Ym\FhpUBN%qݻxY90c
09OB.0,jҁEX#Q#쾀I<!L!lRR;|%>X-ڧT
{4-8bߑ4HYfj4>
-n_B5Ȗ)S9LӬ<ȼK}lC6j6o"v&p`ibH).gLIq (
:lV&dſ|;JbVPpnϊ{

72@ӃQWT毭\PqgGwd^|')OIooi#!wJ?`c]$f_W,@Ǖ^	mp)ߺ$1W/sΗ:np	<Tq~~䮃2Vds{BG
R_68K
*&QB$Ż YiaF( H&~pG!j@)zI0%N[N8%sxq?<!S|y1e*C?1Z	1OyG?˃&PB)gEŀŘ6Z}&@ RWd:-ܫ=̾33Lo)]SЂZMIeɾomxiA|se774VTNV)By89S#p2c
oRةHκ󡷤;2m.9Y@hު(`bYg~Doy$
	dB%x0w(,^j/baAFGK.V1֥gNdP"Z57D:}יVp,.E5EboW~\z'DU^\'gJj
88ϘAaG:C3b-aTa$5i;[ (L/ Cf(u9,%Ly^KA^p[2Ӈw/Spkc$
<Ε5ur>}j83;E
up)A:8w^P5hCɼՕI(P'P1=|vf'KuDZ?v\[Ws3i-k0\2 CO.
;jP(#kD2mhHST!%wdK
	#^6r.>DVp`ˡ:݁F=.w[eN'HoKW-%<ѱ$|([`~Rpn8$r|i2mØ-Q$>
tqU8ǿ
sI- rSGy>9	GLLK#
|0P4t6Ȗ56-Fi,`aLKu51ʪ ZQM-+!&x%/;(ggg
 lĬw9[
-Ѻj$/JMq٨yN؇m}eInL/YV'hlTOUr;T߻P="GQe۹umkE<LQoq{s1:^R&ag
Vhyyn2iɁ~)KVL̼_YF3>^QϘQ$+H#q5Bc=Vꒃ.)]bɓҎV
/5%@	Y%,C"
tl$zrhrMfe <	%FA"̙
nU¹*奓;v;*Pr&	+Ű$b;~8F,I(&
EVXk{5=RϰM. ojE#>s+ִ֜:PU
U$$#)f$[sJw.c6g]Xp'\o+[OCށlj
a`OXCsIYa$}
$ |
~Ś]1ϙVuIۀ ` 	@1<e!P7'u_/\F,1Q<j
Sk4#:_=j튋	%@liB4 +E
9Њㇻ&+-6cKFhg.{jDWw@As"uGXx&EwZ?Cm-t(	xahqYF1ʌ~X-Ԯ~9vq	>w%+C*:ѱ^A,ylR0^>HaP6f	pq2}p9qȱwO]"6BBE-`yUr
J21=

{}@:+29eܛc:^Zb]?~	6ɕ}qzPoJ*c	EFiDqD)i1~{>!Q(=
	֚6O+/<8w❝R#mP4J 
+֪7<!"T-Fy(R"(HqS48:<%#p˯c!B$TN:	@ɑظMLbLmk-	?͟_>zѼ+B;uzK\}%㪯ŨkljS7zC
jBrP"+ekJD.+C!KN;
$K~_	קV}Ku+	>hD64gG092KG`8eh)AG'Jkz우ѲO`qc5kizF 9paQ;,
cp*GaM3C*M+/<u-~$fwRGc@4y1[+ě;!toc`*yw6+WQƕL~ރ?ՆTU~X|Κ;v6
"Jxz9m=v#=kM+#<ip3KRwَ(-z9+d@xz&"Ͷ</95 :7/Ȇ`N[uoLUgR>\D	26R{g2"Q\c7o;{.3 ?Tm_}Rf{< 0)m4n@ĄKBj㋶D.	mFll" $t[cᛋE2"3`BWW]XjVJYP#WA?o6~n٦iRRS-1uu-v!:{ënUoP59>vNpݏG!`]\Q~/Y(
A>#O# oc!wSjQ"!f]B2YӛDS;j,QjchD v}CE禉*h	s̪6mWF Actw=bqrwbO6dJ6e.>/t"TP]t,ԟR3)g2+X]o ܥ	j
5Hm
YsS[D7WxˬUsZcCdLC,,v`>QS8zE#`xbV¡ja\,m*( ㇧׉;$jr RGt`I֖^hDS5FfXH{_ ;Z{j%ji@@̫0$05-$7;rr8^>}jN!%٭yh_OXD:m	n3HXQZgtdm?I˫/`N{sm)<NؔwG^PLc0}% !7S2ږ?TtXJmƧ8@iOg&:g$ؚq~b8}|e@nggvhI²Q_dw"riyU
KbX
/7TM`>#ڝD8mOY|eBg>k,fF3D*p7r</Sć,7MV"b
hnfyI\_jFҶa\1A]Ó֘(	o{6gvw|k^FIz
 #4}WwWwԏw_`]\fmVɅG<lAYW`\T~k0t'PV_`(D5%Mu*̺t@2R!ߔ~Z(FGbk-PH횇:?oTؐz>=E<  ա4W dH	Bۍ"	|xχar&LM[+Ȉ}jfyc{\UZMQ6
!]3WA8o|>,N֯]w?p
W7:Dݛ5#,5_luQIc_;g|2n$uavDW;?
X| A;A[^YU	*e9bA¼x=UBps/'وj3kx]˚bёGm/\v=!N'z^1y @X)wo&VGK J3v^fP"Rm[ӬZssUd;6bI8t<w}dϬʯfZ*ݩN|3Znh8v/T$E\s[SCg7*NKby&giMs>DX/x]MX 3ÐR9m%LqS.%^YkF-ͳjjH؍rH 5f'-gRD]f^7٩1\wLSg0$r:`BvS
[Fʮ^ WHp-
1E+j)5mǰ}ߣ"`B"+lbR3V+pUL*O?DbǸ	V{#h/65AE=P`Vazxi#^W,g={]7hz݇<E2e{f&&<rD}heښJTd观SL\6֝$]k}Uu
dǚqbMmz kv)^ΰZ<M%K֓<*蝽v,ڿNlp*+0RPғWo}TajWkg	^~㳌<Rwql"=_ֶhvsLF5N̑l
^^ȵt2=xGБ7)MH`KEI^pQmK?dv҉k.dWy0}Ni<#Iw[IJ=gE?aP%Kz)L~B=AL0
OvX'Ƕ8՞@g}&/TF-X$FelZ}ڐw-SPkKFs+}NeT8Z3tb|\'^ D˼[6Վ=T6_h\L7В	I]PkcAf 
sN9̘Xo&lc*uՍͻCJ9v[b7!GPL F!6`P.c	`]_kJl8zL|=?3?/SGp<1<U%LLpCɞH}'wt<21kSͼ||	*#$GN6%	zp%hΓ҉BBU$߅S9PxQYF7yf%O-fu*u8LB,%XkJҎZp,u8a5M@+KmvďM c%PrЙ*96ZtN	nIp<RhDz۩G;
0>Txi:%	A3#k'׷2V16_v|TI[[V&6+F'tBe{/	Q22Ê+nf*IjUW|bcB{H	>1mҡ4ҌĞ]Ef\ʐ]
e"0</!Ug_I^8k%j[V!i}`pТa20{f7k;LHH"'P -OoxTp}HudM)-W#eQ!2?LgYVÄ́LlPX{`W-&<8pR"TsV(A b97,h4.+WE܄ujTe%br)/},jټ^&iY5 UZ`rH(sb`,P`ڻ-bƱѧI@qSŭDl,#C%-JJ`ttWCwqĎc 2IAgt:B$Pq
Vc߃s_ <D>ٴn-0Ǖ}p9&cBl'iPLQ#N},0E-G6KGNԆ@AbtP
(rQV5xY
,D
*Ƨ[QNRRʭduE	IBv>x)^dڼ!$4!{._L螥1S-
@	gpGb[g˲A=phܓ=]^Zk֒D״M,(,=$gqFL!&?z	g%
?n!i[AܣE6{͢ߒ1`-R0Y93D(+V
(N:!60 g^:,wg29EItRD5u֦r=0QE<#cu(?G/[cϕCZ5YapT&`hLFꠦLQK $Y?NvV" [cB%Gv-^I`9˥:}]Pw]>|	|?DzpN?3:إrVFQ+Guʶ?8arUПjyszTsA
q5ϴn	̔%ù`Al͎sL]71I,ǆD`]_x.f-1Pq<Qݛ(A&]Zx#B+|^YAZMByo-9VhX]׊vi/S,)
M΋EjJop3v*۱mS
`hXR/x[Rnl2C#rj(̗%Gh
 dOqdeA+F]p3GbBiɴILctWX3'_)n;a lSЧ*p4/VD( 1oC0J{
||K5CL?TCT4ssYՎ0lk@ҶS2?PTr~s*9 8L0>q Wr͑IoGݚ/!)<p`;DH,	sX:8]ҢYQQDmxA`}޶
p;@u4E,Dqjm*檇 aɷ
g
?Z!voa] *>7~v+"7vI=JDZ};aEۚ܌zgV6%s&s'+*k@K:=
Ee&?}ћP荱R5|?A!5{tja~13>Kz+gaKq@./烮_px'Ui5OhT9tt
s eIQ%ez-@< /!wFi9PM䦁xԶNu5FͨR~
5jaʏ,Đ*{+h73Ҝ- Fq"#Mq
h-֙~U*h.ݿQPkq0žI{_Q@;f%|t4W\욷%Y1sŒ(u]f~ǜSRT!W#:7t"mtxk;pNj,B^v3ZDwZΛc@z!
:ZO=I5Xeci\Lh$ML@i72f+0nY
P
n|ȹx[8/m%d􋒼^Pn7lb@71EGKʢ`,bJ@Q:k"#ODk~L9$.gPmjPtILRQ$ꑅ]Y+^m<%>ؙۘBjʅG7|k[r:<M
=u{~հY%KNIuQO@4jZ6fMäg;3Y6ch=&qbj(>B}DjtuopCY(ވyc1&= śo,&Evg{Sk'_;e=Zd{c$;
F*J?VᕹI
-f  <kLr&xҿ>'HuJLP0tT`RGMŎX?ض?@ьxjn(<5`y,cc4Oy
[xa'`Et݌)x:'ڊWb}=I
|ܗ	v>(]I84&	00JyG4ɨr[CS"뒵RYRYɒ|0vUu@hc3pͫiL:M&*Z}<Yx/bE#<n!PvJe>.0>Ye1

Ϧ<_S~
!Cru,zոTr*bnL"mGnsՎja
Ҟݶ mmPd%救qN@}<.fAM@VbΨA`(=H?VY):RrNZߟbAu9P1 5&JAu~<ZeBW&,S/7:2n2.
ؑ
)T'K[OlE}sfRWw{=p-*^-\PSuaBe2[Ή	hZGFȪ M
8asp<47K;$ n-ɓ
,㮝*ħk큱 q=/y(\)e +&WeUWsG` u3xvڝy`
t٥I2 q~YⅡX_yLT/wiS8ն͊a8W40fHLM'/K'bդLv42G/掷[?F>߭!D`jGi2خ*yEVȃY+8x1za dKBFOlgV*"
]g`/<S:쬄)D1NjKsŶ\=z7[
M=heKEHMQmى_Vh?N0&Fl$I?Gk@b)qw}0DP/]L+8v&zNlnHAoTjFFޔAϰ ޾8BϞsR*y)U$,ö>_V@R9Вc=<>:L||;_eDΒ<;?G!)pcl2T
R$BKm7}_+v$Eí䀵H2%p=d6 J똥NZtzY
O6"hZ~mӡ%?	bMo8+c02.ʸTC˳m T'-w?-:ROԷ;UlJ6ח@CߥY;g[K1V
9OtaҠъ71yuw]bQ4B gEHʷ/l 2(gmaP57緘ݭ.o)d+&s2G(t՛}0@c:L8}νh5O.GkN0WnkWbK\ԋƩk#zEcF'fVRNt3?Hp/7FT$'q2
/=P_Jj {vPRT%T[	ͮp"G%iͧKf]jYP4Pȿ@n!j>mh>!le|GV$G5DʝE6˪Q.Ȇ21utuHfll'"o'BK,φomkZ0Т
MYBH0ʥf&N<lAJ:øbxwUu0Nv@!BUԪ^kɹ-nFeQ#/_)0or6Mi:+Tɡv4
Hgw2_ވ@k,?6SX7 
LAYQvܠoG>t6ߎ='/۸	5]Qu[$-+ZUcc6{:VYj+{/^C&Wvg:ٷ~Ο˄>_8 |EXRpcC#uÏJK}a 4;Iϝo޴_	Jz,&Rt༄+5<\ߺyT!~dy5~0QQ{aֳ !NĸK8TB#@X\·5ӎU>G]ݬW̷u rtL1z?z@?Iiu|HH/[uX$`
,~pL;$෕v<"H~ijpyf@J
u W4yjto@V6_zMN'uN{qUx)w)V]I# #B`S[4Jb>nv-J<L)h	BcN01IN=$9+oOHn4>
b<sOB`h۔Ȱ
Ox oPT EJj{$_ 2$E_l`ڛJ?
\n|K3d͸ze5M4׉8~bb\ԥK	>zHs73s/I(ĳz^/(>3VzDmxD1@y$_cCw졀erR]G㎩c]hbZM=8[ݣ'0S={Ui/U"'%kt_䟆Lu1w؍ͻ(>ѓoAYaf]Mrm>qmr=u\@uB:gQj8P#wwRZOi?')eRp@!ʓX^kf	DOxZH4ƀ
HL4$S٩99dSՅNډN UqR{E"\
ɮ;<C@
%t 	i'UbƂ_#w[tZ7P+2-K38gh@
bmԄ{\IѦ?_OoA9F0C9u­yk.@ğM/LNke7u?'~'2U<Ȩ6n6c򓢦ğuV/}sGs
[QL\}cG-rD+: 63SLOE opHo~;wtL@ֱ]P=r4NnQ"ϓZsꃆ`ؾm.Hޞx½R(Ь<al8>Y'spL]	jp5gLIx'ƕdUT\sS,î^kt1S~2ifƥߜ0Gb+4ѿo<h8|EJGjKL{eܔN$L!"
ǉ
⮩Hgnz_T\Gl9ﲠ9/{j0	2L>-b{#6'^ 8׎&4 O&vI
44:a&۷TMcHqd3yH.5=2_~謝!Equ~K~Ĩ/b=s|aF@+(TtDACY[n4(⊀#3[J,`u࢟ b.h۬2Yq.JLWE2gpN!}Fsaqi4goHz]M}ؤ4g4
v=Q+d=HnTmk>qǰ^<)YORυZo,C8z(hsAM(sE5J%%_pZFa($_JM̲~ǭ3~*YhC҈f1^j`xP\ё6a9^1eRH{S":APɄ:$MTv#HU@F_Qv)Б
܇GR|?HD J[[U}, 
CQ*A)zy4"JX>Kݝ5.SuG$J Yu:`gN9`SC<`24+ɍ\m*jЈ.5t{nBsAoQg A+sM;:Wڞow= D6m !aoO)ѢJR
7s8vf9|8QY}OuJIWG~Ҽ9|4bH?V;>ހΧKI&m$4cOaGʵWXDa/rhZ/KG"A^X؀DϴW&ۑ"
Q zX)a>h{>
r64Tcz=Ƃ|
2WR.EZڮ&GdO	e~cJ"	`ޔIy&K5{I9Nb5TW%'Cq2^2q{jn)|лrG2h]uCFusrFBׄyq^ӱzKyP>$+C	2 [TL"P:z 5郭_fe:'pav+}zOmYHL 59(a#אPoIosy*p~}3lpc>/[ [ TϤ#4Bڡ/dE@@mUl'='	:,]G(O;MwoKeM*ty4.Eujg&trzci?KI!9ҵ@ [XGm?ց4̓<,P,h7-[4rzXCl|vN3te`($q%E*XHK2vve㟰X
L}RCu^^dRDKljyuݢ@75"_V^`BD|Ly-ӹ/@9J3%jd;uvAcH'W?7PbD=>E+&I9cĚ@J
M

9
"=\P9@/EPt
B4yשFygE}6(}}ӎh*f!o렁H>ys]:<l
w㸴GLq7Dk&V\PgaVP5-/-C˨ehx~dKwWX%zyMb#*(^5=enU{ֆHmXҎ6Phu@'IM6qnV<a+KQ?@i7 ?6fJ̰#k;@{:&fԮ#{ͨqA-	b87-TZGX6(wBDb,y^Ȗ
@ ;X
I! rduV;no0,A\gHe~Z_y)J<&LJ»0^FRDC(埡aY9h%=Z_me]G񤄖&DA3:
1Bgte4\#C/WUqܲON>$a}?0Fi÷t$AzV̥llݑNb!9Bzn,tZ,^TkC>\<>Pa/5gH:ΘQsF` >YFMߞOw<34l}Wl5iۭBY{7{*OK^&%D6~Vz)eQͤt;0C_no3B9/2F&@V0ҳL5UٌdБ&4:O9oM`FPkgЙl="FY	
b/*[e˾23OZ?8s>2QUqk͖LڂJ;Q5S72^ksTwZtD>	  }?LCzF߿%Joh=S0!Z7 J>h!Pn"YFnU&mc$xcnLM'Z+o>p!Bo h䁢mBHVu+ɲ\<qҭ{u>E^MJN\1-	YZD=ڈyvx>$yBOQ`D#!ebKCȅV:
ZXL&,1dB6ks:BB]FF;K-i
P틓38o\>v:r<y9PĘl?sR+G븨v8sh:?R9-T!XM
64XpJd *=mqZU(/1]:%?jQ:<9[1(V6Ip n1F1'hԛFw(T{o!?r\uRJ=mzӋyeP\)bڥr
Oz^tvwhԘǊd eEM0Z ʢDd6(:IϭMfvՌ1*u3
VX" [%+8~+!
7Lpc7o?-NJ% :ޓ0w&H֨/FyUy#Ɓu+X@C2jXOaY||:odHDJ%c|Ls/ϹY@#dw6o:?@ @vQ	E4]Z^,bpAϝdzl}TbkrIHơ	nB98Mㅕ4CX9 V>otC#`WTƩfSQ#>?7ƛeo96"A	'F\T4O.0!F*Aۗ'ڷ1n J_kCղ~ͣ	рD?{!ai=@݀˅^F{E6x9r6b%L
l5U°4aJqI˺f1`d},{
}+!&y|iPL΢npWOL?)rIHdpwh.}
 07rDs5P[q j'z<޻((ƫ:7e@:|{:*q&u3Ѐ!m~a%qJlO>wS}r*
Y?FWEF)]bnAq[B3uQhq9t/_#;YwŰ&lL;Q "wQ{x\rPD{@/IRl`m%ceApwL1,VzEK5HGyn*ȑ~Xcv]	X"ɁXu6E~
wW/o(ϱp%ϖ	Ix?x:f״ nz%#,2©
ڤ 2a#9{ZF:5).m-\#~Iܤ&	c2J;4%.*6ZJgX^ ffQ !kxaO@y:.@ƬpZ(S~Lx KcGM~u8bPE}><=L5m8nS$O8%)4caal2Ű#9/;iŠ$q͹((wL{͉%GF@X͒fE!؂,zv_x[zxEMdGuRRJJk~=M+9!
L&%۹a'7/evBֺڡ HZ<$snTq,ʝTsǢ?ݽǀt+8h/M9_OMRÐy2
@qmj_rTt@oE,|%DRLO_ekk'UP'L7Ա}zKQY*Hk$Ua۩zSIHGt;a;&ɸh]ANud{WfbFNN\H!M^3DrJ*^7zZ;Z`M1֗/s3f W-ׁF&ܲ9HL/djG̫X*	9T7q9֭ۥ 3 ACRz'GHPTk};5<>Ru)|/^#a*59Զlz^zu4XmT7cъ\w@[LWVĪ9#\(e_$?SKNShc,ݎ#=۽E?u.vz hX]y{|]~8d.L\Z#'q/"G 	)$ВK"\4Rwcbҙ1ThQT4OHD$'(ZrunmRƑXB&xyIo+qiew	iPZ:>xHIF
iQW3}kA[;wMk9:d5{s/>,=IC=߉D1J4Hq	Q7~̴+S'Ap bPt (⓱}k$,b 9$k>j#Itl.G8yQ/D6/&}>`bduşZiq|̙#-`a;6L`f7Z.G*|̱N^A.9FϤ-:hAaJ5lS&La[٩@=w:q"fiq%]\PD?b/U"6t6Jز 	[	!D<j:X+Wc<%03Rl08w	Mn#ӓ.j#hNPsc{&J(U6Cȶ.l3R&FQ`C5H+, 4#Pjr8P{`T\E;$׸޳SPV_ȃk*U!3DxH
I٤N{-zUi&8Sdp`}4zAǌ{rbl	̙)Kq1dd
;6
qj8Zdru$eU	#~VJetW:o9ls;[jzٓ88኎\T)Җ./pO\?$lB|s|V_j|+lр
GNü6U(cZ0EhUԧnjyEK @AH6P}|<1+cv|էbY']<9H5CaYv	LF:W"ҩL:! +ke6T	'gLrzJ-E<ē"U8LaYTgY,ZLWmH^~'y zUqבDE#<MPi$\oL̇G,VJV` `~\j٠ULU# z?&G\hK%*]BlY3 I^Ov5tWcFo|m~J5+6phwL1
YMVWiȭB]UM[$yyH	Evd\H	SɲN
hZ :ɶo&zF ⇹Ӯb!CQM~#To-c]fJ`d.^mp3d 4W ԙd	i{x(n$a[%Tw
/$yjy&.!">&HW)А!SnOeMM$#E}k89P76P6m)W[CЦ ~wÖ|-54>/tT[2'1[OKo>ul<<%<ݰK=X;BYJ6ؘ[aK~yvp4Ē`scd1sL[ZAY"vd*px@W:1"D219}bAn!9bL&o7G"\}No9z%[G04ceP{/a/o(BCY
qP>E^Lc^9̉RG\kԈׯT-PU(uC$d<I8gf(_M`qDrG42%U@+2g9h<OUb56o{w١/sWM
~Uf2ɀ "|ޜ̔S$V	h-T.oXFoԁ?n\<%/NT2'E(QǠGt,q3 lDJŇV\ٵ&_4_W]x=N ,P;3 ڈD3
M>1oF*Micxk.0.)}g![FjS&. -sv#b(AH	M9yqn/,ލh4.~ɏ1ߟSNr]uLv *G"GsiPJgW54XN}S/PUǷ
B5a3;
BЍ"g^tǶw Ne=Cgյ!tQ!Zsav9ǰٍ6ɹrͫP00^}@N4)`\8cܛׂی.wk9n@_ѳ[FJ'SVyMGAWlx!H0T⚜RWR
dPsg@gDnc{%{%>wCi6Շ>ZVJɢڵUB²d7@R`ċ9XCUÛLSrVk֊3z/'0q&3Ⱦʋ=ƒF]Dq.Z*D|*60[`rp~álZ@.Ӂu^oQPg(
pR<b L-r-Fw1nsٞЍuwH2	r9v_'*X:k N}穂-akfz+]RYrп10"_1`oNKB	X%NCC@^B@T~|Я٧JoJܚ O<fpqV	sWL~dx\];wň0ġ$ɩ1(V֢)4(-$i#.NT4}]uTٷNXM2-#jV'Bqqg(/̜;T6QT抏%­;ݒQM4|XhLojFWa}@ j:$Gu"@D |9RLlP|^"@dhϪNڳ*ۣ4o9r LU] 4N+(%Lƫ׶49YEhXقWVMdp5z4@ojjGl!D?W_zwJ~Z<tfǨJsǡJ5'onVjnKK(a[wNKʈ!SBӫMӲjM!HDYrG_"P~gu"┍Nr? I4<%<JOCO?%nu+Pcv; 9=9wz2OUz5=Ja\ÖIO -cyzh(ıbPXw\n^O
2ز&8CR^VE_i}dH4lUÇkueQ*\d
@_yK0~ϧzjv:y:"lT} Y-<*uy/}9O㪠&dS%eZO~ǉWVTHӊb 	׌j]b(/Y_?Gņӊm@gۇ3߭)T,je4fy/f<|/Nfz~Xlht
cYkE>5C*jp-^a)X(8A%Z;׾?p/%k.kr@pbzښ׾"&)[:DSWYJN8u}tMqdy,fTމ8UMn:O0CTZU>b.(!~j%u4cb>Q,,<ѠBco#kg61}fK@2ѷ+]fܣfSAg>*i%$<>ˡqz0՘Oo!QrW咡	|X
 x֝4+f[??Qhפi5CߓgV	d=ɫ SvgEرbm_1#ﻬm(	DZ#5@桫[RAobZEѹcv.qI%^V?E$P:]ezvˋ
 J6sBxHSi1\ `kWjˮ`kiu%l
1	P?jыz1)4tG<	uApv[!w\N!YV L,	j 7Wҡwh<hl?z:ag5޶3:-{L$IgkAeNX
z&ĈOy]MH-h
$
}/!-q,c=aq
סRNXѸ2=nެcd>Bir51hQ]0{\UT$|<V.-=ݲWr[T#IF;iT0K|LtmJ`,$,o,m)]_Iwhg
Ή/(Ȝ(rZ|h4.S`G	IѲg[Q5j\~O*)ai۬պ". 'T(JLTqS$RCb!rDyyЅh ;yM+GtLUY6K%rmPktOӿuFL@mj_&ǁ?.J;567~nN	ԏ',>fE===SMYn6<H`%8}gI(AY-+q-	wĲt|*R⸋Q{s,}(~oP\:c`~KX/zYw`!5MKIpJ9thIğ=Xf^2hSyOq@L(4'q*Y	cݡwb dA,sb"js_VD~dWXuWzԘ<	;le_$փ\M{Oh
$82Ty+ϧ"܊j3@b"nGB:RYS}=^
pŪwvBgo]8Lǡ
>C5=*ǬLv+q%!QӺs%OvW hpV!nw%.#e#>y ]~/P/fuN)kzC\0	CMcipu^A`eeL9	4OKIC/r?vks}^iaN#:p%Ȱ@8`c}:<	YW撀ؐwGatDk+'̑N! Nu9!00.XG2M<N eZ\1?/Y"
J%e݄PߣU]n<)7}RmYD~	lcrH8Sq@RuܤJSz_^53ϛYO&kqZ&6nNS㌊j<BPAp"OLo$\sz0!(}܊eEWS_|[n̢
Uwq2w&^$nr8.|WY$tͦ#
-.^T6<Am%g}@q
}on
+d7,1N[B%?,"LH
FQy+mpx.[â"SC8ւ[	ג3KW 
Z]TE*Fp-ZFCA)ɔZfwx0l9Do}
jNIN/Ml&4P6&/wd]
evh/QXa)d<04˷Tx_LEPxZ^K8J
8??9i&7mf]hp~puU#FoU|<w=8z۴R)daQ% ǯIJ? SS(I!֟T] *Ӏe OBIsnڦTvnf ]5[Ω?qÎ|f%C8I&X1&:pNAsAĘ˄1T@czWpݼ;8>aՌa;ع+(I Cpsh`(@x`ϖ#1O*8,zF2,^`DLN٧ެ!'h^;)va9O?).׾c>Zc7?XǨMK>+=Fp
 l[t]6(kwS
ѷ^UJ[xĞ\\KN1{1ޢ%T_딒߱.Vi۝#>?ZNmE9Rt6Jc8|ݟ;F_YXQ:G~!P	rwQJc2!7nuғG1wwC:q= о.[kQv? _%YL(!W*Q"*M~~܋~<2Q;WD@̦b6'2hZ9wgEuu'
ća!Lcru
ua>dɝ(
d_a<ye!:SiKud,wв"~g{`8Uy2L0se.	$<MBFUUMx}AV{ h4Bo̍0Y4Ϊ𣕖zn
W!!_,b+g^A%n)06fh;38pfP786R1
#GI>
_oaqNXn9c6oS)SQ?C.`ho~ÖB%KwǱڮV$a4Nt<Ź˧4fhoTNA1jd\u,B_tG;'hBhCe9׫OTS#V"ĲsƥHTBvuiX*\vgol?s_QmXvϝϒ@~űB`u
lm}}
5X=b{݅l||g`GCR3RL~2
94bJy	4MQ$U3y:	u/uISx ˓=xfDfZ ?c}@A]x](슽L$ϹZE!!LՐV87֦e_D39P0v!فrGuY.oGO|yЈ`Qߒ'-.>B|Ң
_ B5SjWT]ob A|QV:nRE!Vj^-t{(.7;T[V!ہ޵
Sag{,>g^_$ye֕>=z{nVa>+T~g
	vtv]
@vҤV!rw*=|5X	c5pm"/6˂qVYa&&̨'c^1۹5K[QqEtmp_s;4t&dh-ϜG?a0>7v#+ʮPՆ.ω]
CqYkbݔB$Hh@SEVPd8dHC'>J6}`y9}>*@r`gHTRML@	g$/1&pWR[.KYgaRL#VG F_7FAp؞".id0NoH15ydk_nZ'%cx[̦st~in!,xYUeHqV5mkٺi^@^KMqkQ7p63h5,clFVl!"ȢLnFVg"	G/x[Pޗm./\U,¦aa)b?`ֻwx_
(ʼv_ѪAƪD,TDwAvMEOV>m;؁:>DEV51т r.?,9DwdZvYݳtBNxyWEG
'm|2f:1BKIeP u?^K.eWh(	RKH}䣛<ZqC42q	a0y/tG)mU969`Ŷi<M
=n+T#{dK%]ʜW81%V7U)aܑۙ`!HyH%U<ӈTk3m&6BEi=IbKkh$"v6NoNԾGv@8iTa]+{"@/:dzFvd$5i^u2CE!"9=/8^?sͷV7@T+uJb^YGs)mxD][BOA[˚<4y+?"Ϥ 'U\CP-jfOƃfoWk'JeIgH@+8tocD$pU
z4)~Pl@!%Hs7?=Q(?M=H~ _
ۿ.`n
_E#GI䚄̇XTD	Rǃ!Лgd68
PLxIPpxE`RE,es"Bvܤ\Lf$y=rd;_0|Si&_zӎm.VznQO}mK۽@\F9qHӥH|",NrpH g;C~Y,a
&Co[є\~0}b=VV=SV 9M1WH'4y+Y G,\?L=tǕGBj$0J<aR<B[bwoX<=Lct<l1h"O~-bYq2Ih@<b)
x=2;@ӫ:$B ~?#(̭_`jdf=FNՙc]>-qJ̗K=Q54
۱*[ AR$[<,T̾Iݕ+պ0ًan&SfK
(qS
5ik:
C3}-%|T=fzYlȔ|l[Kf\s$NsOWԏ$ r@%2Upc`=BM@:>*u
$~MAny'SZnp7"ƫW8H!Kw6U,BZ:{e5A1yŋ^?)TËgA2WFGVrZThW]dB̀!]؞yaIC1Zm&}dJ
/>-yYߞ*H1$V<"6O	e^o;bva (k}cX.a
&J!O5uĔG7%#m^n*Cȹ*pVMpb|$]2"!1v_367R`swD:E)gF\H"Ӕ0 ^_ϫWl4_Fjm]S<QhWL
7.U^=[rj[ǚȀIl-8tzh2e+͛s_,kgRӭxJ<
ٛRj U7z"/Ӓuuw-sHi`HjBIShӌ2fÚ1:t޴&r WWb&	,;.(Դj(cf}4q-l` +'ϥ!o h!>QعC*CZ؈g=q.5S`ګQPXtsogwpkprT{20!ν	&0iH[[M߼ӡN;I$%#ʮz#"bBw'JV."7Lx523Q#ry(M&$} = W $|qPImŮ&r!*~v>:HA.CcnUM ܱf%8J~9Kdx=D؊˥֊fXĆpfxؼ<Ty$3 X&(;lH7WQ3UuS/LиFQ仾`AL1p.afP2}raBAN4*&깢t8;@k	L<S'چS.؇B/?MZ09ǳ@2{[KG7՝TdVP"Dq}[8AVovAga#V1U^ڑ͍ڲƆ]1	ʴYba^D:g8.(j|?MB-2xЋ"-;jc4y)plhFr
1Xg+U8c?ێ\jA*1ez РbH;+J;rD<]Z[EɆ_bsLI !vʊlLlNizsaja
y/Y:&0u$O8}kިPѽNsc3fO'U"6,'ae${|5kqnry,6̦i>nu`Zk,<SBu/蒦Fl5ZLɗ$$bsWd5)`q~4]FBDAM̆"]ɲ*dﰇ`ڔU~D@VOmYXh(\7E27yV[=;_zj /PAh XTpJ]6V.zFh$WzE:p>>$D,
I=ާŘ&֫~Y'\'VЌu 'rTjTi2ɎkHn,2Ōǟ0McUJ,W4X7(i;[3
YY4¢Z#[X>EyЖn~9Q3Zd}Ng^ZpF[Q';&W֤0;'CKãWyr88h҅6FO=%?kV
v^. Ȇqz6<w&3,J]K<bB&Gt
cIuyHIp:F8OXDp] Mn䐐-O28~Uh64y|F#}(^OnS;us[,|ux"EiC>O<!q^	jlG\MڮgW"M.d<i_\l,zߓV\jҗwरNSB	׿QQ'HfTj{ʉ E8]}4p
ۼagt|=;Gԥr\;9W.toq]@&Ecع"aϹC(qTӠt@&KZ[YX:`QY)
'_tVmXлo*cڙ_ $o&-MIN%zf#|@HC8ȋgKlOPT/jcv-#Tz!{*h&JZz`p
-[։Cqy
Ianl$y|x@K+Br$+TR㏁1i4ιEIh^[tW`lyk`-D^3޴:<W50:W?)=5C;ʠR"3:xRLWvn){<˅ͬԮHlxK+
(2omEGg$ ,u!|ўXr;6}@jnjIEd[cb2\wB<ce/<U92Cq=OGN1+auHf(%#VO+c&

W>XW8OQc	ou䩒?dh8Zv)u(;ʎFBdМ(%0`?UY{bvSFFm>enǅ0*U8Q{j< Q9ffsdҷJБh|ĺ
9B<5:EQiPHX)co>l֨[d
"~eΚF
<.ԗ:މ)9(GFj˻;Pw%`	u/Ҋ x8)>v`Վ+ҺY9VwDj.m7+SUFi2x%KB9aTjf
5.U2-w
0'đr^7B`x~cExP1p-R6Nr4b|vl=%Z]DWhe1^x:2ĺY!kac#!MPƂ[#f:o"/ %["0T:CayVyCNubPa lV?9^чivkot-%S1xƳUU]ϕ  (վb$ZG/hmX٥]a(&N0UivvA:b[3";לc3=+). B]LQ
qR:ִ
~5Z9@9^lj$WQTʄa6樊JCVNOA9Y}`",{8GAe
)!>/"ĒWK?"R*,#f!Efi%`N;{[@b-[Pth|MO@j{I؂v<g>U~W}]qZ.J
Rdyw!fpSPU(6~M#FSPߏ 8IVm,=d#4<4BRK&SІ4h2]M;!xᤔM)9RN\q?[VŠ~
9m8Ց-Qt:!q|1sgY^}*o<_(cRأT	Y5Ѫ</"K>"ߋܴ/G^ўfWF,vwPrr3ږZo@=zLBɘ[$4dQџj
p)De}aj|A$F2=>{C7m}K^9twX]}S/>x!ýY55HCc[HNfM8`nE޵ "Ci#[C")Zh2䍁o~fK_Yj?	W2[/?K{B-"}5pAH#QI]1<!U
ɧ_36њanQj>BP	Oԗ-\Í\R.yɷ\I{4=Wq>f +hXT$cG7a(I|$RڵX*Ls76]LhOrYwd
4Nī߇
˳ry C
J4mF$R8dE+ڨ,>(?qQ:M5a g@+mmu{m	(	QLmy=2/Tp	þG{^K"i>&^MiYEۨ4,Oc<[_jE,d%M{%[0Y}dP^!.-ڢiJlNcS̗Oc* R R	*<t-A_@uX}T>Q9QCdd eeVY9{Z,+nع>f	rն_rf5"ffQ_m2"Y
)ޗZl!hb!LAE
`
G͌m@lg#O9S
!qtnz? 	@#tW,OFvoCL0{?~뗇4}2#ۓ#5ֻ_R'o IԀw:lϋc㟮qlWLR2	6W1xu30,A$߅
ET$okԀ&Xd=v(t t'K.t6-6(uíDlXMvji{ߣm!.8{I
ptD=4^"q,ύ-YyfYCu)@LXoShK*'whKP%(+rE_E@=IIMt^Vnps09F{6Ϡ|i7-$Φ
~#Ic۔@
w=3@?ɿpsS|'xT<7O	}m毃Jh8|)fSZk{QC
o@T:Qk	0CQ3lY2&[L
&b/4_6l,L:2f ǈ-*nT#b)Oi%w22a~i
2MRYMӂ[Vp @ f_Hn[mFuntgl{&֫W-Y<**ڀdyG'`tʜ'rBefUe?n6c6S
9|>}0<FO?""/ XSȴ=udDo|Ϸ>lY;({/2DsdM:0'|~kϾ}C^i'jJ!1/H$=zؑ0!ƻ~}ոٲڑ;AP7p?*z z"cqޘ51ţ<mT&4=
/?=#HLܡ˖paߡԔ=ɮtUk*ǑȄTҾ&t{ʊGKyO->@377~fj<E H8f>mD.%8n- m
єpwXD#rϙ6 {m\(R9÷mWs2mȚ℉Ruh^`ɤ z<~K
=/.[$-:M𑇰bin|*W){H-?:ת}8=lUqя}ųH3IZP]̊y@Թ?o:$}̕\18>@$(?,}Gnan"{Li<8e &fOF|6ɇSnѨGDī:NwWG|љ
^I)TE.%^\V(ǋ.%f/ +4ȰSD@*!4RYܸ0
z:^npC)Ð/+xPh'*-!hUxra@EbO^r.} &*3u艥aB
6esn>xTYGf{ofH"	D˞s+kӟ9
XK,˷]qZ26U{(R<jAKʶMH˩R&?dK_I^, h[<5a7 |nu7k:\ԃX Η4	2?6tOSWW?.h1TnXr~2wl_6 H>!v/>UB}o% 1ðpL2ޔTuOWo/ .7Egtzpgf#ߘ
d.3!Pe>%"?Tbcû}b,D|?s2q8*%,>;dVmm5! Do;YPϯS1@Ofpgs5Dh8c&UGA.]+n~7\T2δ
K
K -AaNn8(a[cI'+h~*PJ0E$
lT[?^R2؀^ԓ`"&0rOTVYdjv3Yb; eirG/(4bGl,k-4äyF:h)C?%\ۉ0X<D־{_٭eolfXS3x=-4{V=%y1w4{:Ke	7bU|#MH%uW[yGm('bR׸fcXV.y ,
cnN~KX/!6_
̴RͮV>;λD`p1pT*'qt>45c%7K&Ƕ:huOx:CE#c`9 IK]3l܃/رFT.s;JƄ}0]NNsy!ξRrd(#.~|CSāOM)*oǂNڕٛdmrEzӯRf@ =#}`	'HL5<GRKtYPf{!vN"ƻ$KC8ٵ UQz]+blmEx^8 @(}3l_-lJ`iY>cigf*@faqS\{؝/<Dn>MÞd>Ӕ>֎ںXTTrˍBIF6݃6\,XDA#jnНy8a*?Fm#`UDt;hSkvGW<mZ%4fȳͨ\ܼ̽N~IQWK _E˧I
2Li18丬docWcY7U!W*JQsI&յ%K'㟡`:/1-(# ;eGUc9>
῕޲(PߴIԺs_]$):k5}YKV-k/|20+|6b+S_ǂ7jA$,+X/;!sQ	^e+%EN
>PJxkrv>HQΆJg:mJ;J4m^6 0_U 3L
.ٟaE;x
;2ΝkWVi՞/6p^ ;8LlF,(zalV%1MRzMvsBT~%q/_鱬,rL8'ikeHAh8ut57,TcCΈb. %(9e~/ؐ˺mХj
CRGLn7v|޼@WchI3oIQ[oZg2[)xSIY fhLT
Bu}t|H[̂Beߧr"ؙc;8tfUjtO6MJq;p׼l1	aSAQŁ (ط
ґAb`Ύ7RW@Fv'of_]2K	CO׃4[N·f_}ZsGS-vLSmm4MzE81}$;:'>Ʉ
@*'@9~P>΅ziW<&}H~0ڢcveK'+Hܒ7.0qGJ#2USݺ7'Ud}-华K3$vVM<N~iy'e4%@u-\59P\#g!sgjrl A[kv0qPokٙ=]7fP]?{H:NrSܥdȓUB>ڥ)zsvuz
eWzmySf9k2vGBɬ|v?}'3?u^u	vBTRQɫ6vqdu3`zP;+ە[=}y7S(E5v;_R}V?[);E#-	4'~SXsVnIlK'QO][Å6$9gj'i L3!paC@L:UkeS݁f/im:"_9SQ'Lج5Kac_ǟ+^-.8;Ze_hׄ&*:MR8>J8m^r.-lw|D:Si $bo4ǁ]Wk8=C
oCbv2._G{WfbQ-Mu\ybԍZ:`2wq#EA(@cStK~)VT8'Ċm	9ϖdCYDȹLY4H25-ORv5<$DY{u_=E}TbYUߘmA8iTev{%aY)<wgv!!ґ'hu	'`~Pr]<:1d3q*(x)lhuӇFk4l
۠rܡFW}cpZ5p2۫/>rmշ1] ]Uࡢt
e6u˞-A`{:M@K
\}ͬDTNNےNʹ91VꞁUDK=mrJ.Xٲ@mh]gy=r	$SnyqqG\t;Js&589|L`>?6{":J|Q4.#Z3[r.C
F#ާGӯfc VaՍC#+K<(wZ=QgA\P:zi$*ź5xqJg+
M诹uz~eg;,@r;>}Ǐ%w9vm|@m+ĮKH66NE~NKnuD:F/3U؍ؐPlpq	/Y+CPAv2&~D4`V`&zhc\,zPi?LI=="%"{
ĬwÞ Z!$K
Rf@K|KXaN[v
#QN12XJd5	᨟;n봓E}1jauI>/ۑu6.W˻@&,lL
xx|Ok@pǌ%5 S\!(EMJn)')41ޤ*jnݔ[+p?,C;&hlp:_M9Ǩ͟NQtLgt0c`F*%gI+Qż2rX
T@Оܝ5bHkڏ4 R
ўDbȵaѕ{"ɱDxn+!q&MoWOL`"QHo8v%:]-=3V6]ֈXuN_ޡaPBAISsre҄>$dtRÇ`$JRJ<M}"#L0aLVcdS첂2 b@42N&;KWJF/n=+DO> .qm$;{m }Y8RÒg^)%n*,JaXy*Vp'km5@4ie(8	ˢͧJ+Px<]K)??	g/ey_p'TF+eRxg
$t~IJYU;L[8ʉ6wx!MT)\m(-2_ArΊBR}HUĶbkXP@"*%ŵR_r* ϝYKę0QĔp8S~QCT[
b6O]Yi,;u!W&Oe.dc%cV"DxqtZߊ0mv*9[̧mwn`hlv(fb"їTHaEF13lQo>Y	q'Nu9.d$EZ3O<dszY-ұeK-_Gg0,=B3"'\][*y(L%K5rm(3FƽV\k:p.q 1Y
$vS
0L
ۻ"
#֋@m0o5^#,[5_"ah2Cׯق: W
͟&D{
2>Q-l QkԳK!a إk toKS*7p|
?\J֋7)pdsZd̈G8O&O`S#haMC G"ֻu!Hl2$@ug
&:;{Vz캪[xL:J|iˠ;vWK<-Ѿ'cr=ͻUPA7٫$'#o>S*q[9ֹ?Z׬E;B*uvQ]r&!ς	ZADcd{@K\4w{YzHQ!7K1cH3b9$=;*V%$5&ɔn& Y)Ll! 	43hQ:?p7n|B~g`O>uK RDpO!^Ȧ,\"֜RmƦ"eDcjMU5%-䛖pF..SG&o
=L[S
:Y_4\u#aH:UxMEp^rLH!G2Ѧ]@d__}žXj9>p
=	%92*AG"-̎EW<ef
Y.	{c{߾/hMKf
5ȇvþ wa hCnKzZ代u9-DʂT;5!D9xq[I9N)/S	xrd`b6ȵ騾qd%@}Z32wjV\^,{,ҫqV졇(6jH
Mtۧ{T64Z2fDalb&Cb}KU$Ss]QBB!;H"އn_+C,U^0~c,vnF3 l{n]CaGY5xo]S~-Nkv޿7Cx޶S4PKra#faegjG?S`
#:NKBn^{yĈ@5QGՠE)qφIChI%t STM>oi~絅:{VZf yS]p-<(ot$Y

nG$:%di1\'afgMzyj!eԈX.h%:6f|%b"ngBގWX)  Ze.ۥeW!#Rʻ0h)tcEg$iS2db8OԠqj+8\),7%y]3,#%á\e+-ahV3~?أ2[0Y:;|\fT2
AcH	bd-|gYoB+ɥECHIUlN2{!=6Ytd3o;ZMW~̔9oGdُq2;T9PXw$\@ᤔ0ҴM4c
vRHyV|woҚ1I8Ҋ8bHimRs-TRP_^R^Gix&L/:+GۻtKȫ%KQ WTFJg+^V%-~/٤BQg
י<eAyOee9zGQ`		wFQiHAn~- t
΃ ~diL'	;Ĝn;|zň%J+'QY`hs)x-Ma}՚uy
ҕ.ΗQ`;ȑww?WEiuô$lьr>s^-4	L1;m`ۄR5o\J-;p:a~eo+d-N?~hJb?  cn{ӒB@i*
|7XHC"fϼloZ(AөU$^Z+ >05E|rh'
X
:wȻ*[͔edQklo=%x죮/?dN3ޕI>6JI&V40> fDyaqPbü/E$ff5ߌsnՠ%O"/P:ﴞ~)%Ŗ0Gqi	蹋{/s3TH`U/Ȣ_ԜlJ7?dHr`y$i 㵞u/вeFYv#"Q'mi#Fy 4+J01RӮr.+[lA]K6a&IK7!mi=G܏p^°3P/uu	?	$|CVn
.N0<O("hFY1ʕn]&Qɬ/
ř(>݂9ZRey>TQF<N⍻!!g߇t|r+AG#&ԯ;R#I98	w=6.B߀vs3 Y$CDoR~rth оUGU^G_촦In%!yJ
2{Ϋ{r 8zEm-|LoZIYGNI{_g4f.lf+IM>l΄߲V=QfӐ୸!=ϼ[rІ=gXJ+_n kdT{.H9@Y^9܁els _[E6}.ZlH?GX@cxAU D.kGm\3-НOɅkD~c|ە\E؛A!ڡBCY46Ce]$9[j4@JXK"@j[җ#RE=裳;CuB'?'}˩$&d(r.D f fm6F&AX/A~R 8w6rsox9op^|E<ȩQoPo 6SzͺE7=f}DnZmyaBR-إ=7 7G
JM=G.s
xgi`ڞaTrCΡ?sYr-':=s^%TUr^ԇstO~
dAx0e/HN/,wf?3豵gq;3f,ٲ⋚S q,DgQ`|[ ,EfE/~
p̰ CѰ=
+k$J
Iyɋ0i}֩tᘡi'>CHpAƲBX5W]@ZjIޖ<.?	8zAU:jCbrbL;
@ԭd.<#]Ay;ޔ&FPB)5*oqj ݭcc2H7!Bq5EFWTLybUNP͗q$ w׭68l0BO]l?
JRZ9HIU^v-F<y2t4w(2{^DZ`4y}-@ 3vwNɇl{9΢"Pk
ΪC=mܪ&)9sP>598<"LG-l: @ w$<8LQL`ެuGWB	Bؖ2l7h)9i\)鬭鑏RL/b/e"OZ~vzuv44`[䝍%`ւv	V2VmjO5-5)cUy
м@motE뒺+Uj.;ʺօg.iqLb,.LQ]U|uHTs <j+ X	mmXu 1$^E^) Z--kU/3
*"@}VxSc?aHգcpb#t8ifYo'2HAzŚ}=7-zײ\wSaϥua:`|Xx1)tj YM TnIOd9<[^
:_@-KW:ZD$ uڂ-FX|`pB&>H0<|h0
4YMS>1`}݇W܆Âb/h
Ubjғ	!LO?tP6"!ʞo'|,(Շ[2l`S
 (/!_Ȁ#Z95LV{Y$H]WG,!ϹY=?b!F,XB|d"CH<wzTt[rAg$dn8k:|6çĄS tG$af'$`c{)/ՙUAFC[ͫ͸KLtv		P2yGe )W]B)
5:)/ךwSa.:7-A}/aƞ\~ƗjzD#KozBW	,G*UHzGE'_B a[Qptv
=D8RZ.'d+bB@hfpUg3RװqLVT9jPƦ?߄+ybjSb^ ,A>~oo$EtOKOQ)$olv '-e)r1ƘIB[~jj.k+-[,wx&:|:r*j/cfPK(0awz+-3vSP|~dIޓX"u^+ݡDM0׫G&ݧVb3 LPӫh `f([hN&b;]2
.F4ԣ$w[wob{a{="^'(
9-{~A9~󶅫N-r$*=>^~tڒ,[dM)ș%?cwaTaKSMOPV=˂3v Yz.@R
GrzleZ췞ɣqC4I;*?O?\9ml;aum$K9P97;74N.& $pʃOykUk71v/C_|o~'8*N§|J%Ɣ꾎.j?Qtd<0q
8DHqZ')=PY}0.w
EɡxYIy<NI`HC1в!lU#7{sQQs͚mL4~×'->#{R
e  }On~u@s+Ml+6ԴMp\ɓٷa͘x@f -NFYPTLϫ7^)̗B< ܔaRUiwYoCBP}
3L?yofܩY
P><Byot*k{_r𝢩-8,L}}rOf(
J&4^A$>Pv!qߩg{.*C:[ՙ=V~H=,QDen:/x	-ctߑExA]5|,Dn@5dH
4J$iw	~UKgAI"<|;Q[d߸?YaG.̆w5Au|¶<݁v
<=uޞI
slp$i7]QdTT;6My5I: 9i3́P|5fzۑI-|UmHNXq@%tūH	%$'f᫳rV'Lh,LV2QQBFI;
h |ӯiG
y+^:,b[)"'(GF%4]8A7qE7Fqw=ZӰ_v&.d'4aqq(PE	><$Uqr4( E3p&:@LpHj)Gr:9oawt<Q7SɏSKڮ'sVu؎D7a]jkd47I±mjZ}s6qG@nm[nqeN(X`k]}fz,Z;0q(#O \thpiZǐ5D620皒Q^i>1ew_x	N(D]Z[P OD~OB'9uaiF6]<1t'%j!RL D߻׳k#?p}+ptl>T]-"lJëb[:8y?C!;Sٿϗ|} k;efd!C*W2*Md4fZyW|.\]
|9I-ȡ[`KRմVS?ɑ!-`M)Dio9u'7J&LK~x'(d%KZ;/nqgB.L)hЁҩ6=}J
"R 6UcE^=ￆk
ѪZ$|Ut	ep1ojt8dRf^ UW#C6F&@ٵZd7h.P% >`901qfd<3C"@dL:VM-4lbYx%WRÁOC7knaqWdPҤ|	'o'B_ugGzS,k Ha八n[ōՈ EmIl
~n$8Lܽ!2\&82AqPKf&-mūw	:
ϗi(gDz)qa8^r~bZrʧ}:
BwA
~5ݸ0zdi}Z_=UZg"m/ܗRyJ c@:J}#9r8'B*-NSPD&cTPӉb2j.I PMVtN;h:A2D{W'WdpdE!X1Np>!޻w}5.LawHioO`+iӍ^y;H9b,fZ$)_f]+-MMNZNfAq1cZ,q#$;4\2hr4ӎQA:ǆ|f"%WC
i*uwJtI=z&z7[r~ .4kõRFbmxݿG3},uoV\H	F*r`CW23_\`Uy0EPlƙFP-2M
-ȟ)fak=TpP+M9[lA7jO3/Z]3tte$zSo*j$Z_(-HyjkBT~H4M-9m) TEIm'BcڵaZR!Z-z$?f
DMm3AP
tŰl؍pPTmrsk:>]ʣAb}zG0A8g~_|+gd"GÑ<ߐ1V("VBxKWG{#ʍ#H8sz+Mm}Zrqkw#XiWKCλن"@4
D5wK`2FKf9z4e
zhMG(3v7k,%ƤՆj)KsؖYێ`5r9&4Ϊz``GrB!$N
R=g2BD
BS
:@* ޅr=MI.ޘahK7{I !WȆ8몈mO	f U>ɐ_c&Q:Ey>CXaެ*o-G,meh&,xc5&9NAd2i߃bZ͗=߸Ĭf8.P9%#lF1M[ͺm9s׍-پy1	"jm7n w^y&1 ܢ %1']'t>_N"NK.Tu)֡[UO1:	&NCAo0#fبj9dN\+|.-Eވ"nҢkWU]M
nIiIDEUՌnW [fHWӵL^d4OJu(_> 3\7g.DME2SM"y@s)d`a+έ0b4B, q?<*14S J|&q)*#w*Cs<)*D:/'>}sLE`fѹ=>
 e5`Uo_
- #Ni
(^jԣ:	Ϲ݃
Í+FM5e*QFS*Nk qi2h3+t#n9	rxTCz&᤯%ocw<4UUzFH?ݵwլȁQ3޳
kg-7a苂.k>ePS)\&Ctt#
;u$|&ɮTD.5 7!LIZ{`ⳎV*kS2Zm#w(Pn:aHOI0mN߼Ĥ-z#JE2*xy$a#nDcbJ,Dޫz90I~iN_A3k!Ke*;B0>pYp2FVaBr91؋LfW WNF.B*oU#YIy抢!C~ޱtlFJf?CeB%R{W;O8Мn	U6h@t PL!̢ٖ5KY|r";dr:#Vcև {3\{R6oQz*g5пlx~h' IZ<IU;<35b}:>	!#u`St]*ĝ\
ˏiqʓŀ.ETfr]GRdx7-/ۤtTZҚtpf.QBANC6cB:r9S/b#MK@!<W[fVǈNɕtL*DPAUoop=?T֤a[-b%M&=ܙNVb01OtV\
DEСof1ҥMBA9.Hi?nLXL-.Ɛ5b5v1boOU_[q}Yl))Wa
$!R*"mY(
IH%4xY"IiRV*J(A$~}<7-dW>\6{mP%Gvoie=1*oqYjԝi޿̶H{ϴ+|o[v{iR;Dk<7[mwי3N`\mCz:VY?ʩ|9-qMBx. .jߥgطJNNsRس)2oƃ3V\xDק]0s̓#̞j$4]]#_2&}pftwU#?Lo"9<,f(duUAlX[&gWȞ7yMgejW^S%;tx݉fx@ E2.=-^!F4g94>~4"U腖FIm	?ypWMuro2-(:>PPלpTn^wUȗW֕X3l5ECd\G4ϕnonw=_}.UMaYʙdYWd{ţjy:'^Nm~Y9n
O
U9e cn#?K2HQ\6&n_*ǒ/?NfQ4+{54k{9mrXA?-/+`{]EYmAO>Gn[Psde]ˍۖkq~ċC:/zrTes\ǹ[N<W`bCK?L,s<x0Yĳ-uv>j(su͉7zt?_[qWw;7DN+;/8DDҝ	.>sC>V$&x[?Zu[X\rжe^?1n^=W%˲dUxG__Rq= gދoZZ1;u
Lc-om`P`Mn͛k1܆,9^jppqI/k-ݮr]W7L9\ed:@wˆ]ƘX_nd*ܢ6a{ےRM{JNnvXjzH.OC_Ny<rjI]?ص6ۤB@.m
e6OLz;wUM?]\h5k-`:p՟*İQe?^:jcpoѷJMK3nv!reK*ٺ;F*ɂ3Ӄ]-.nbtյ3^Z(a9o'kw7/]!#F(uJl#j3˚_,wj)ʆboNs
QxGQ_p䴌Q%Y3ofqSa&3\ulel~.q;pzgk;{/xRǡEE:oNI~~N-K]Sp`a1GKG\a0mW׍	zg
uZF[ʟK9=dkrLM2#U_<1@3:(iػfwĎ8wcث	(I<5":fWCd6"bw<JtΝ3<[<VqxWaǶ䝂^vtE96
uZ>],
ɕZ][Rˠ~m߰/xk,w&>U;aʚ|_(9$ѳ7]<tͱjں87ϝ[<BCg΁h^vhϠʯ-smW}_qN-67hYypyZy
-ݽAcL9k=G_4vјP4"zlNn<y٠
ϾpHOz߽OA^p{q^殧-&Y*
G?fmDu
:Pn^><aֵO
q:;šbhz逼gi6͊kofwiGi׿\;=dυ>k?ziS'0|=eG`Y)
9mf.6h;YŧR$؄+m]&穋Bط׍Leኃ5GCVGmܢ?黣^|xyHE
W#r&{ӛs:]vLazDмiR"$*SkWY;z~_ޟ(5DT{~׹j/g4ye~ѻ_1#"]{*>RxƋ^|ܿ2\ɒnzP@-wS{xȕY~FZe{_OX=%J>rM_Y^=qQç+j^[tģ2Vo
e:yj%̩w8qFlݯp}D	Z/Zy3UmPdgzG3m?Qs]Rph21[lsi 	s2K+'{.[>%tOK!-- ݵ	Hw0zm}}_:%=7L?~ "t|lȿ
<~V0x:I4S@,hN"hWOjD'nik;MifRh"44޼.>2i3,gqd	^W E?)_Lw,V>v9͞ڗ[VhrWfK&ȥ "G1|!.x՗U<K8́Ok`ɏZKv8 ϜuN/S:0EMB.$~w~	pl7|k9<_n թ?
"sĨ[8ceH1oS>٠<pm^$v1Z=.jXٷ]}?|L?r_k?NsR`3л~ldx6mAjڏ};>AdrkdY+R!Bt< 7*wZ=?ϋ&JĽO
&v^3J9\ϋ3ü#RA$:1/l1>:sY䨅wh2EwN?蚰hh"!}|xZfW&\/r}Ylb~nl{"M9eqftQuB Iu,)&N	&
ޫOI[a^rkfPQ0CSYI[FL2t^*;+Ļy2娺aY|N4NmtC7~>R3(3Ϻqyz"pUmn4`
֟W)>_e1RIgH@r#kUKB'Rc
Usd6!$8 }R>oYf&ؚ n,.PW>oun=##B˦f*eWh)ůV1};"(n.Iv燽!nzv>7u)Ԑ<OX(H+E9Ӎ? vzMo<bc=&R>X}E[ʍn=Li($={kU	Y12>\U8UJod/9(U\|nӑlV2}/F~`dd>Ms>Y|k{Zp9q!;֬v#]y]l}2cgF_S\(wq yIi722<jwlJ6M]]8?A;b5
ZlJ0qV.|܋ZW]ˍl?yGf*;r;Jܥ(d=ˋQ%X4U4>5z"%iw3N5le	zQW`T[1>,5`0$7ѓⲎvt?P&ېdw_}'>әkVSd;"ގMjwk&[. Ϩ҈Mfs>swۦ]D)YGrCqu>l&YUKN_F<׆}mI$PQGцSJ,ؤˎ]-2g=Lm`7FS]!,I-#-)&~(/ -JxveX"7ДGg8OrSN!d0ںs,(+]@dj_E
	){&Wcۈ\#|o/uƗEODgdl]ṋDƙuR6Zƕӳ74*&=7(Jn1k]4q	}\r$S7Rl3~=kqqM}$0AN&zy+n%EfbW5TPiѬ>|ӽ.-pޤO)3A8?Cwž-0?="5?'^K4l7C%]JhJ*җ>v8w,E8EMqA&Z&ԵV\&'GuEXԁP)2ʹ}PN2z22oHX]Mv&9˚dg w*2ԖQ56Xwu΁Iø)mO5Ƈ8&npW56jh;w( /\jI4 ȓPI]Fw5T!{ځt51zd=YZ/Zjv,S 
4BKİFAf9Dfl`x QK|,_HiF ?b?׍-*>r^>|Ԙ]:S̝q}llgdpv7Ct:6W<DbJ@u͒5n|`4'F	DcH{+ٿʹCN?:5χs	y󓔟|׶G3D		kMьTw
YiF-,8Q`w-Le1bc]y?
}P#'j;ܞTČ/Zt8O2tAԀ݀VsE|̽>	Z)<;2D/vo=ԑpٹV^xz^
&.oQްkV%h]ʋuo%JZ!Ă;1j	M$%LaR1}d#O[>A$'ݣs$w]cd`B9VwFXqsy0:l%>QGdk'd>sQmvRjsVKW@}+p^N<3d j
i1'gw"8i'F;&0
S,hEaQ#<;
4HD@kf1ꌊ_aJ7NE@,'#fC'IO
]&:warF,m]҄?Sk?|(~mV+랭O_3t1aX4ˆCB'i:Qȥ3$h;$f/ɞYu{4Vw+c:tįq-du |8tpg&Vl)8o[8VWUic|ެ쬣b.`E(ր]-,)&HG~jNrg|gMUuN-3>k@+By+%kܳN
[ȉ5R?)yaG??ˇTZlMZ
:31Zpſe"^ɱqUmtʟK7"X3 5|/y$pE>6Zjukȟ|H^NtWbLSy@l^Pt*ulm϶qlfIUYA{d7Tl;^:8	[jvTگ*5Yqv$zdSIjOpizFX|x(^-%9,.UC\%<B6;_cNmnN{P ]B̸b'4ѹjnT'f)[fo^}VnFF(p1HO[ں`G]%.
~rk K?);^KI`ݷ <(-A
5Rݔ<kU/Oȕ (]"w*<yqu1\n=dV)Sv3©QlzclnBeu+{\o>QoS@ 6HAnnA4ǯ^10	
_lhAb'mO1XK=ŵVevʖY(5s:{ϨK4:۳^		X^LՂ
"D X5pS`y2]BdzQf* Oo|_#R?$Tc܋.[HJڣzOZdҷ[fe,Gc\@{HV[(*ۿ;QIٹѓ˒K[9SYnN0/d7b8-4%r2 v F?!]ENdpNKP3{cإ$i	8Qɔ<8,qӕuQ[P?0ҹgWi(}mDI*m:ylX8ܷri
2,>sk6>L<Co쬒s;VOFθN9u	#}^<HG]\ǛjIޠN[GmQBNqNl9OnffVsW]"o[fdڑb=%CGiөZ˽ZɁSESh6!1o`v)jRaj4mHlSw"%v$7QLY]
:04EH#90{̢1P
Q	tqwIf?"hdUMj%ZjumZkSm{[˳MjL4r
֝Q
:I嫌V:)\^6wk5a{H&:uF9f,ɥ= ElroYYØwd>pԪ j%X&F%$OhѦЇn[wʶaQ\m>D)M?V:F6Mr^`Ud9['%4	wo>w7Eg͛dylKL:З(&jh!G"4DG1i8CJa@ZrlW8\;*u\
]W`]1b6G|5LHޘYxtKI@RT+b6_bn]$J`t90%J4e<I[d4Yb
0.a1ەQw!r	}O $;0EWŷ#$@{%za3f [{a-KC^OhhlGjS/0!;dTן|T 'lz0%&+?"'됉Z*w lxrdVCfQ'iF 98A+ t \6BB9t^.
\ZՇ'E%Zwjs6YeP)cwkFj)Ap;^IVWIaԄ[f*[iׯ_Iwl&5q*i
 x2ms pzqQPG\݆O?oxMwrڃń="h,ΌEBOJLmͷaS$fޮjg}`ΦHcprM_7:UG O=寽_Ō{U	+yӛ%"p&>x.zmAt@O}Q^z	a`At9 bq_
ʤKnQ?y#>Vn̈4C63m~eOcY	aVgr<S`CqmF*𺤵 ek2[x7V!	-`Y<L*|+Or֧7_:DlTzL?Ͽ~peh:7ɱKP_i>Z)s]89u^ܛ' ˯*f5:n>&Ob>sōW('f3"tݍ}}N-&js1tP!ޛ7U<5;SofV!YM?k(Fw9OibeR	Fw	~Ⱦb|Xn	} àMg雞3;<ǵϹ3=Ր!B6b[ݰ3 
e4@f_!t0<Ӡk]6=IL-K[\:j܀IYa,Ŭ^vB
W]-UL哃ܹf`#%R5F/&|=t2U(l]hBߌ<RNF/9PTuAtF+ǛR-= @Ub3ۙ*>ʙ^AkCY^u\:5z=GZ$հ+V
FE9xr;KbH٠q,%8Ֆltղ2jîyd#)pu5%Cش&]joSƝ`-K
c2ڐ!,V3,ZŶ,gw]/^atBj=XAFr}c
n)*B|}fT(cS[?Ւ*5>oC<sh[#Diaa97.Qe+5u"\{fSc0ugOfrq+hDLݹCYi%[@
Hcj؜퓠
eʟ6eޛ>S9ns4'_b%I˩>Ƴ1#Df7ękɛ԰'aX.=)6?d7ٖ8	tn6Ǳ|Ye$)UeCQ?v򍭰{eU'H`;:XRS׏
Tv̭&uRy"-5&҄Zo쓢ȍ7Ǩr9r}r27)eg!D
uvc1篥&m%%~rC3Qv
5gʵ4vwT両՘!XL8)#=*4y[6i%tmg
1jO(	</`L+xTٮQ0LaXSG%DIv
F)㵟CYY \7g7GB S~d$C@Qk	zʸlV?)𪠏??DF;c<CNo-tquqoKf,׳_H^IBͩ%g}.-b`VHS8~ ~wO`=Wh[&sw`"w7XkX-f${K;:K?q	fKa<gsӠ]<ev?cDBH0r#4^7Zoqwݾ_UΓeQ14C3+ |;~x8_/[C>o89DtMmUl~E`O(
2٣@'R	mR?:~[|ŕ͹r5]ڬ#n0-E۷dQw/^m7>YhjeBu>܆50ʔ褗	wmƔ.
<R{/
tF5Xq"'|+Mևs,ᄍ.OґxnŽCq]YAګG '7tkt=O
7ǤqY}OgIi#`1aC"ǎVJ/NccwM b 	IOL;?(5'Gtqiu Rʮ«H.bʬlʘ!05AOVwhljCF"Мn.J۲}0~utu¾w2ѢHfHq~RVc<]ޝ#*1RV:%ď^ӚLPQ:Tva"mi俹ioћ{l=">C{c%?Zx_97'! :g6LnV_+}}@Mk)eڛLs;YX2\ujL
%*V\L'[jz~Qqmk`*&WQmOP>BT$$wg<GgUMBɿ #L\zNO%QvjB̳-kcuWuYݬN7섹WM6{|$D:ȯk}h:t'8ߏ)9msH^˗Pӫ3D!b]ow=*2yk.4~r[@f]1O!viea9 kY^놊Hb׷Soz).nL7iַh<Q{QgkP;I1ԻFTuU:jvӀ㟰7Şܩ*&n6+[M
mebe~_q/zTN_S}ϐ~kd	DmRLFe"qR>liQ2~ӔC[%hY{M(5w]m1V9sJ`n;S>&Yig{Of}RwLPKU pc!! K)89;wo-cVdqdLa'}NJKU*Ӓ$UU&WA1gfuUB ے*t
bbY*뒰)QOӾ܂cjmW*.>.z>-)&.l^;/DdVqY>lPO􇧐31WWB.X2,uwy}7z9EMGBU7|_:<$惄.;/H
Ӧ2As@skƞ
f;Xrի׹j- FD_"t[	"ǵ|իkz"v!![EWLrCp֥t7yɔx-	7<jE,:19¡W@UZsyP
-p@Y6T;Lw|6yS;k6,eU_(u<.1OZi)bЀYq#$.%on㢩'K<amFɗHH
f:Lhԍ?㍑pI8kڂ ڟH;ރfB#cү#M2 *i/O}*u'-
|K'=ɗ[}$`/!ѫF
.aΧk5Cl&gBFnkfYh2]0ZAIU>С+chbHVaW$R'`ޣzF:]zk㞌L_hP*f]_q|}_lZO(qb4gD&x7xBI#:4I]+Mv*a7QS0ANvZƆkuOgVϞ&RE6?ض7d]\d5Hhz9Ԫ&KX=BӑԊ>4*.LCˬzTv燭 vB
hpH+OnVXZGNmk2%fnBw3Qz5^J}KvDscÒg#tkJ~[p rQ	wS6yrƺo(43u̈́U}~9l=fVDC'~{K
xL3(Ls7z@/wM%cuRikD״ڎs OӱEz-`o3qaJ%bຨ6B]ߣ!D'	FEtp-*kte
lj5lze;]\H
j;1JK"
-.Ix>HegEa%J;?#k=T.e{ޙ޷w5q8Kn.rQuSO#Ow^ 1p]2%`*ą[.<%嬠_c?*BtW_
X6Lv:^8i|7m4otG."VskBW<HK=Y}QD{hdZ|*i
/32͐\g7I 4rKJTkmAgwQmM@9q yԓZD-D[.zp t+RaYb~0jߖf6^y.hX,8?\@SOUpm;bUpK	ygF<בף>=9s MLH+yW'j܊Tod> j
E!\ksK|j$ު\p_7VpM|~YIv^W;)U=)b?~f-TC &q΀XsبF}-HnEĮm=åpO}k|zqXG(2׍7|?s[L?%^
:0(:
"J:]E;<n'+qlˬ:>5U32A:
ľh]JjNAq^P*#Vjæ_P'},΢2Em1S+b~hmvɜw{6Ag}&F(칭#$iLm|~Dwxk'ފ}7X7gp?7?i7B1@cWIS9x.Ò,hnjw{:&twܲ05>@./(mkHsC-=Hδ46okN/Rsrgr.iM|cOV:=<N80jĎg%:Mgᴻ<wƿ	 >RXJWy~%MbpZhhVr	~pj0gb{l WQIw߸ih= (l}3 l;糟&WFkR&3wQKQYoG&?[L,,b-U9YV1ۆɂ[`zvB,v8>xs8m^\\MսVz>ģ5Fn#fVog0brw3:쮅)xU[_W*lk"d:hR(uKglInL&MIRWgC-%kN)vFWu+h#윢m4$-n/r6O݅0rx J vyrb۞Bꟴ@Jd"\<wɮI_@<Xl szEZbK:]x^1[7COA.z:z5DP;感$8	,\Σ("G}*ur%}hFd鄡A fKٌ}N7Ο#Fp]Naj_!]6?8G T}6 !d1/?'ѺLges?¡8*,YlQdEr-H~r#֢6:<%%78<A=i:Z݆rbH,2s܏s*B%F6Y`NyL@Tr/g#Uo	C\cC>ԓ5*|АP<VV'qԛsMy,{7]u߻5w
D;~dG׋~3'G+93|V<?BtZh1C֯,ӡ. RȯIRf/
ʁyy촒w#|8ǗZ9w,1K̢XQUs	cIto[H		([ ":d$4g.WX)狶u,Jս=F!h6P֧o}2 PoS.vmB7딖%ɍyvmذl25Bŉ#S}#f!ePe7xvq-UIZ[
 -ruġlJjι_O%gYSt_3
kd:(`kݠ%iPp KܘUdǃB/((Ǻ$c@%z,
o:^_8]M_ZH(:k<Ypo|^bX1N.Tȷ?/濫fa85WB4%lk~JhFo?ƊG>v=^sɰ*piXfX8F0-|hO%HOKAX zZb# 0Vk#E0ƚQ5	5EDu(>8H Ǎk(`]T}$܃ebq!~B{ze2Ks@q?ƙb
i;k.eqA'XYpxErYsܯ1n~E5<pMm|7Zंڛn%KbQKw%KŬ\ZFX&꽠Tw~50Mg6VڔîF%뇦Jᖱw/t(p
xX>A&`\Y+8nzmeO)Hy&]rʎ-ҌeY$Nt[ٵcjjDVҸJY_PbJ1 rmV/br3$0UTy0@MoѧpPhjX OfĠee^+Ǚ0
zuJA7OtL{P:}´UaacUPĽiVp[|\iX<-CuLtn [p7/9U!/9QNWW jاof+"fC&{9Nv\?'~o7Ebmny﫟?sɹ8;`i3"1aow콾Ǣο.ǋQO#E
i 342ا\zZXRx^?/g鎷;6q_̖i=C^YfI>sk\ 1hՇ2՗3u~8ʳD|v2QnIɇqch2sǅg}f~ƴ o0F{9xOXr<LKhRW,G
(KCtiuIл;ʲ1*xE47Ol
T$:G}'$6 x$H_|e]tߌ,N?>r X~U[l[<ƽ!=v&#\yURIO3C[~#ٴF.Am×2' }ۡ-n]&^5\3{垾?=C((؛òZC#0rٶIQ~awn>	?-h ɪGգRy({
PVM]@):(.^J!CSgzᰁ;mCBcnO<Uх,SA>8P"8܅ے?-7ܲ	,7}Do) Ja'MРsN+Clwd^]uxs^ա;KZ{_,HzPGe3 ^$J>GU4GE 	r*<fN^
UGz.?o"4sM~vhմO dzE%s$Q2ʭaŷ.;˩ | oV(XNOlse,mǆ}UG*|RF73Ō.d}$G
 TNQ9t-^3KS}AmXZ&9KOlCHn)܊!sa7 :eAPq	S3C06Ki5w{ʜpԇ;l6eIR]+^s?pv *=!n7yK~kgF󛝫@+N$+o}&ѯ(!;nF@Μoh^J-= 	5wdzF0bqwo`dY,i1y۰eIRN닭Neoɏ;)UoX_Ν)?#n|=Q'Y*.%ia$LSDO|Oǖ]FL8
j!n8aL<Ss벚z1fW$NÂ	j򗘘-n7l.C{߲x,JҊ;kM颬JKsYq)zi$aD]3#Y$
J5uq	s5Z&PU7ayYVG0"v*,FbhʿN>GG;D'vk
u*.e z)F 5T?~CS<S5 jeOmH	QHMʄ;h
g勡Mؖǌ?S%)UO)eTy!٣_U'dnM;~^
扉w/uodc׌.2YC,p"kVC8n,"^2| HՒtMuJ=U>Bm=qk/Z6#I'nN
|:
'[ S4e+6 ]JF26jGY}_f Ȉ
Tk[<:2/D,8Ɵ$c^y
7d|$Ri2)/brE<P> 7BS_Pi!|l:ؕLë7;wAtq=hg}
-%=
sB&Gב W߯}d_V_
 q%}>@.Fi74|m:lmCTU2b#(R1G_xw~^	8L(I)^\]xA-H.9T*Kgh jصܶb|6u>X¼%j3oseyxCt	KY?2(KŒ:7Zo5ޖ1X%kiWuzYZթ_v<.޵'W}N/mEy)G~E>F2M2?-E!Ӣ;%"MŢ+$)xV@9:6hi\K%{QE++C<GM含}#"PAnhrx:IG'	m+<8*yٶ<[|w|£G|Jp4H~8l|&"ka^bn@Fa~\A죓"gMIT>t|<'+k8(mocZr>YfxV)`[L\JఏEqiկ՚s؝?c Jnt.*D]/QEHҬVӕ"S)LƈGP
A6芞Nc^aB_v9&9<N%黍(߯sE#n'L2ڴG^:aFƷoqZF,jcISOZo3T\<xLU'o]fǊJU<:X 'b#<>ciahZLb,]w옪wR9藹PN
=	I̔k<.d,v^=+b$%x 	@fNw,Q/QC1/~)X:89Z*;%p՟zt/0dCY4|Iľ_NR{C)0'j1m_C]CQ$?[.mZçWV|7[RW%7׉;>
Z
vodmjޘ$u9cXx	cUpjw\{TG||qC
K۩8#me&MTFZ+,׆^3t]>q/rajUYg?78+ QCPP ul>>C3;5}KWx.kxw]TG|SI)_lMҨ7h\{&+>bGș(@OiҬ;xTG<\5><;RX6gTbc`IJQ%#p"8:EaoqcP0Յ5St.Pί=fca!0BUS=JhA1Z]FtB,=.o0c'h
m6gBjr7ԏ5"ٗNͰ,Ɨ:s4~e
9YlRѸ*|	Ѣgߖ"NqO%oz8xlZ&v})fAAbP\	mI?vfzE
ٔ8>5\[J{lB<M(W07
w~CwXDN;X #:Gx`.Ҡ
5Q()r.-BIt4deKܿ}9uKDmY$C{z0dX}ɠ
tCۯr*X_=`E)3h-UjpN2ڣipkMPyNӃ,&71'91h4zO yRg~!%0-b{Dx<1#+\l3O^[Cq"3'uS)"fb81|Zyӿ:IA%P7$ [^f"x.g\q`q8^֬&p!JiP]^,9lnƛp"csթk`L_̆VOɟ:Qꮠ4BJ\{fGj[=җd?&W霳"X`<욗#C?||H'rGcjIˈmv&n%-?aęLI8v* M^;u@]2m05{ۿ̗Cfqy@yht᫰w"o;zg
3	z']yY#\"k1Τ3l*}b߅3Lzg?xʝgX.*XzMzGؐDS\񖭆SbE!jX{N[fE(mݴG^-qa,gZ!8w9r$eugpQ٩Op}
z83*(H5$i_=upn߼9~	WJ\o7zyܚuSH(4	L*'$;)F.(q`NLWjPipuKHçӑDvq/'Qm@ʴF>ƽ_K枺k5MeB`Hر}.U8/W+qy0i;fE?SH}Ƕ]~6{ X2ƕ&f:Yu(1#&S6xvZk-+MI^;(ss;p0e&>C[+D킛h4E
 c>!k~1&l+,!2q\Z/b!?S}Җ%66F?E	}/hNf-:<Ntl ƎEt/<|+
C]5"_6c8qiR
2<^X)zmR9<<]NFϷA,َ RV9ۻIkۮRf_%ݙ	s90^p
?vgߊc>S;$m+J-?UvR4FGbXbCUȞ*\|&cy_+<*E^)L|tőT{z4g %x ۔YXy@սŢN9]qRlr֞d2͐UCwk`WZ?鯹ocբܘSmf=N	b!܁I_{wI1a4Vm/H`CDB4kzU{N&6WF,1sLFAǨ5u?T}>M
g5}kƅn	*ꕛkCQk`	dFaxhEx^\RDRxZ3\Wfpaʗ>z9Х8.vtmvyhB
,цۃdEs[H)?=Ia=]Oޮ11Uf0X{&;Pon $ZU1z;b:v#Zz*'bäX'Nv|uc!	1=V*%2GaSг"&Aڶg`=BG*R^υPnX{g.l l2Ԕ̥QkHŜY3xkJڽDi4U=͚컀:CXjS{?ư~ɜ~NiWR]Zb|0>hN Vbi֚LЎt/*W/6Bͮ&dbDt*u		Ouu31Fт2DVg`s;FvDԦW_337ZM9s|]yHvUyԀ-M'"7	K!U1B-IU0((gVdvQTM9rƎ9PN`d_IYfHwyiIqs%W:Է~bRs|߬b]⃦ޫ
	*ժ{Sx,yovO`F>2A5!PQK${ٴ*.~]VawN8St7}oO.ц*5'_*F%jw=t'd5ȉfO`XbXq~yJ'Ꟈ}!!õm񬓌Q|^5PsM	V=`#)&hTc,j{<Bہ	:Im:oRю^JI+^TD@q[L=T4
0GԿ8=nρv0IDS7֐״=K%Q.
;̗di738IRz^<^nB**M
}6&oMkU\LTWmfkA捠WG-VƇ,2snCQɭ"c?e{),1?# $'
kϻ
ukD'6 #0R|_Q
ޅ"i^tԡDoBKROG{ig:W;u$bIr\1JRɾ0'Ͱ|
wTË؁+Kkʥe7qBk6˕HmyhC(#
)9=`FsbKR}$p}]}d{_L翘FU̟Lȿ[}ֱ,L jSiM;)Rmp&*Әו\~	Oz~.ۦ1	nkEakU7@dP,_OEUӟk̅c6+ǿU]=B t"Fy((1eM
{j3eV[CV#uuQSI@!-jvޕ)J^W[Z1Bw&T-g]rqMg
3,pY"1_;*ArCLQݏEԠZ'1҅;X5*D`B0d{vfv&*s
`rx.sFIx
1	gbP{R|إaΈ3Cx_u)x1v⽮BjδS`fĨTyTO
GթvMdB~SRwֳڵI(mon]K+g%C.(reFrhdw* ~9mSenN5qu˥"/	Ӳ$6=}A]֠Qsa
%LқK+C9	ɺjjݷy8@])&nV=qO_uWQ|Ԕ+6R@
ŗr 3f$TCٖDՕd
&[eB+YL7P`
@؟X{eH24,MR85VH[=
(bW+M:F#_0ՠA>i.5y5ܲƥT2LѮ'pW琺WjWt[Oi?͡.c8+fUaZ!+pYNEmz}qzIjƪTz-At	[
<	KY&v*/VoM""!hdTQxݽإʏwcfׇ|aŬK׆`Ϡ]ڜa\X\XЮZ:믙/X B1&.HKǹ*Q/6\ɤI\ckqƏŤ @.5}RGp`NPZvw~
Ga>,ҫ5&6v2x`5>F:¶V?&nj:2D">$1o*L0avHmr0EA5G
{b#˿(?̦Wb?5,k&	*M)YڢgLl6MU.mN
7)WW?" lZ*
d2*QJ:\tPryaqN{l"OŪ6|q.h'Մߌc5MBn錍
j=qY(!}%LQ6B)ܩIAjA:"aJk,#<`G!#\:pyD&f4:_W$*yXChp#qUZdsM
3띣w@soGu+C:W\Mgb3k]ydp|63D2QeEZ(ĩ⶜~䗗=A{H<b
FLm$_U\t}e96h]0{ՀwI
U/(,8!T^k0o+ߺUMYOD"tؗMPB8h$yQ_-CNnlWѬ(ԟVZE!FMҲH}5.TT9fUHt5Aq,Lmi1o@Yy=jۙ\(:DRId"B>ԋ$N)`+CP|JCj3`8P>ElbC=FsÖiYJ\j(2Ή9BzY!:YV!rrǿ*&;6:zNnP(u]DD;KԟŬP"fMXy?T=H긾UJ1/5u,J+>rލ ݵ	[5,
>)xּlz/8XYip2(*7yGˎ%TPtu\X'd8`[E	7x᪍[oiDa`XS<<Ǐw]p7*U/\a?n|g޹
cvc1,@g@\à$_^{cɥTX^:pTxry݃8pfmTxH<b7\ؗ<c..S(txzMu% JgsL:{ѹȋY>H^2݄oSmdS*7d E4~<TnKTS,Z'!Zc4n'ußL ,_XQ-7)NU[λ.f(9vjJe@B|X9iV%bxE^:UH~@CwZMa0d(
96Bz4'6籘2NȊ`BXWؓd#Z 
%=]]"xaJjo/CT(LhbY>4
8sLKՈB=ZNWkz*/#?<a1Ѷ"\]Q܈'z
a"Dk\jM&4
Z%:bBcPPyZILsza)+tp	xW0O8O/Lt4+Yg5-;S{"&ѐ[:ǹ
Dg0s0߳\RCʍS$MpG-\u:Ny
?{}V$&uZdUk	J7.J#EW['s}0xTPLMQ\6W~R.h@Pb]~_F+Uckܖ0>=^[|{O99R0%M1QD4{ýhҳ*@F$~>16Q2&M\Ȃ9[AH*mތb|8N;Ϸ>2pW'G\ 4ԛw$u.HP/TRNs**c.H5YɯX>LdZ16٢S0߹+W,<1*aÞY@gGzicv;8;7VHm
Ak+SD &KtB/OC9qf]JGdN/$SbHٮXP	f)t6ȶ*'}Ε=.+ ͒˝	$jZ]'֢D*lgO?5(&مh.e_̦:ЁՄZK%Fd\RDx'yyE	|귺0Dm"Raaw8'X=dލN E:1$)OMT42G0v+P\^`PT"w. Dl;>{71¦"
-=۳Q+TI]@)YwX^a"1[SqֳcZۋfW[qs҃1XOC_] Ǌ![ʒӶ$++ZeUp'r*._;(PŌ
zGT%!Lrf:3~wyu!.y`;=j_A悋n@oG$ZoOҌs?$!wM\v=lmxxB
Niㄙ;.1|+!i\=1MZ!eȨV3yr:kHS)w)u!*t{븐giGy>f3D'8ŃwzwܪiLcLۛPn1Dԅe>zq:_13}Ns0!J.պD(=4#
¶gܡx-p[(R.GDga&:?7UTQ}vNsH=<EROE˾\;c|~U!l[CIz	ql0!	|æ_)@JJ@qF@Z6xIӚOD)ء4EZN2_@Ddr^vjA+Z}cFf#9yw3)<-9l-4>-<GX+4CKܢ^l#3`n1TzL,'Ed$H6cquVGOLMǷ<q%8ds[G|9Z56C]NƈָVa_q,Qܢ-WyțK҉ɢj㌜D,2Wf9,wq&ZaƂt6+KZBbUtfo~ɵmloB:^-1{5%n*G\Į%ր{/<&S{Z=,^.0Wc$}أ]3\k4xTov3UĞ4M'My2/I;	+FnYX	MHܬ5#~݁a$
9HRШ<?.4},KY	nV 3A<L`XtdMIK<zTdMs=5\9I
YK%vBcU;ѺfB+lCO1ʃai7.Q(հϧ0%xBg
 .fl'bS{_utȚ9ʾ7DȠ~_Vni
ݧ''/Zpz4Ag5$m}PPlL-+Ц(IZ ŬCBl"Uani\4
`ᗞ}cmkO{8m&
ur_oۙF%xN+C6f6%,\5Td`&)
 ;[#[iHCdv3>Q	H'z8';BYF7Km62'Qt\{47ZMS\+7woP%c<DǾY3d
U_.W8ff.
"wHmRf*f!&eo,!y^ﺊ|G;[ɴtf0&O<CP/b7c4+m0J12.ITq`uU3oBu3gjA!gtΩޘ
!hz }
V}(6Ӣ_.Юśkj.Eeӛ8U o$?T%Sׁ(Kr(Zr&9VynI҆\%ur'WEJ7J>@R
<b=whE45H}zN\̢:YO#4H]]dr	c>>93E;
{P<o%W$74mMQ9n7Y<iNIigt =H.~=8(h
l^<ph
Ȯ[;^NfsEa/H|\]b? 짍5~~#`ZLr #8XW`N~g9QJdG ȶ߰(A{$\`>>~SCrhIbRe p4=:չ-ajHB3ߊ_7S{Q;{Oc-yP1ċUCl]B/DqCUϒR_k::wdّxf_+WKuANU}_NO
R%_dլ뗿:BDf;PS%"_BTpEϝ{%z_"isjmo
m#b6'rֈ;N+:DRdDSS:{-(e'3aKbrD@"ݞˌĔ
6YnYNzsE/p}6k	}YXJXy|zfDhWJ"Ǳq@13(˛/X;ծːbVˡ ^JQod;y
Mi֔!:>Y/^]d|a&wi󖿖	Wntή7IlSGY4#0ts k46!w ,l\qӛ's˩|ļg^3NhW|^R۵	E]V48L:"hJجu5qFo.پCL_,;#dyq[EE)I%34k>Ec/9J(tV$eb{V- |_q2zj0nq
=ݏhbzbu	b콤ĦNP-IVۙr0~u`2<˛Y4g74$'_5u]oLL}W
"a&b!ޟ(w{CJ;|TN2Pf|J2mHyCu>[Z9m5XFh
*f@`o"j16u2SX؈`75Vo{+4?6,AFw_#?aB/ENi'
QBG2"dc*'{΃т Ic۶mjloc۶mm'mGk5kϟMv,1&@-{8{@6iGx 1YMD_s$5a,;JJyI.L`;{PuW`D1˱}k  lx+j;2\@otw(;2֥o8CBOJ6td#*dǘ{mE>6dtA-S9=+ܩ&7kxlȜ*} ũuZW.ۇz
X`)j'^(xg{EFvȸ1%xN3OB$I~s`Q;ΐ6(LZLXU)>R.]TK#RAx
;pxI<9UĄɂ#	_*_SJíWNɖCN&CڰՎu;9%cq߹!G: "Ed}_,|%@ŝӷ٠z2;FJX<@QܿX4(Yxt;P
!~OEPrȾM:u Dh.c<^k`l^ \1mW)_"r
Kn/s|foz:¥**,k1>|«񯓂+&w1_Dt6Ì
a~*&Jʤ"
P4f4<E*eMZ3!p?orZr7*=$٤,A^Uuwin|jb0o3]$Ͷ=>WW&o<+G]0X+Fp n#K@T*ܕӪh^-"rvɨky<ǘ0{bkOu1^U-50G*$0B֓rONl@NJj @JPD{S!
Ƭ^\
]A#ʹ=ωQ'לC4fډvei4Nv(2M7EU7X	״-ы$T mssikaMԅ
!*sO	!*={ WVedŜ:YGPҷY.[AH0ƃF
r/?{EC x,a>9Zsߋ}dcuf զm=JE|j6P{!mc`ӣpQU_P6~K)(.]$Ov`	[ɸ7.~}Vu"b,ԑ\֪AWrOl$ضXUdxw}w9
oN&󜚀H]p4וҞr5P1d vt&ɗ1HmJe|>va\S$XI:@$qэkJ!J U'goClud޹7	(<pcWs$318~{=t_7d>z+S>x8
M0CLC'cM>_߆C@u#^t@M{))aǅMfOr4|[Pd36sk$W7w1du˸>A.ٚ19p9N=[og{H70m>
{-P3yKۇv5,+zc!V̛2XyyOR}]m:MzcMj҈0Ho*1//`3¥=J_t&d%G_W-ȴHi01}G[]'XhMyrw:IuBoY(4)xt;Fw(+?w3%r9D,2`v97?6GjI
nsQgmzHxnw'7}HK8
EȌNA`k'HE8eDuSB=P,nEJW1VڶFAVK
eG,c
/Ah@y+6K%ϒQVQ0R(Gj|]ﾁYv{$^ξI0	<SKFl޶rٍւ(8D[	9EPL^GROUi
/KD,T	42\c2P$RWLҞesRXĻ,[]:grW;3[x
"1^9-rM|a
19|X+3L nGcLNF+
~_2,K89ǇCz Ѥz}FW nMQS{F"'-sMoch>X	V#ԙ=5-Վ?TN˾lsDw$JhX%XuUpV}Aa`|%I"#"!D[ܘQ۸`Qxt(eBW?IuS"=Q$氠~Cvi<:]4D
 b\-kjW#Zh'ې$ٕ{~USWfbgA{8\Z= Dϓd+b-UPĦŭ_T]!;uJ_uj%Xz/;\D}iO\-kdbt9&nM
c#\cLI(C!.PM'"98qNyO&s yVT
h]س<?`᭮
0":6䥐x2+	xuV*_4XS/z;VM5Fcah]lIQ|Er#x<z^w#i!jɁ%9Y>
FM!A0{J6D6C_qz!DLJZkLz	͔ce(/,IW '>aDB1^
]I mժtN2F1ۋ'A{wfiPW}dW;')PF߭g&A{frj=jI hZ^>.,L"ȃ6یli`4^[hjR)+*;/'[
UaFͺâ3|jny(ْٿIQMK
31i^hԺ/oϡ`&xܘut>/79^G~nbsCJs10qqsvN5ޥ	24XVך؂l!S/`/b_e	Ngފ4Tc.3:uLU]4pMX1YaGT9D
.ü9P^Sέb+iC%ly*MBǉ{@<'OK\C/fq=(rX ,q	}X4hKՎB_pL7X)q~&u{ʬgl"ehcs8ȧ7VcWE6K\薓;"RwSWT{a+H4#HϒwzI1{I-%Jc_B"]~AMn@Q+BacXqըj{Ik]AQX8+et沦̫SdzoK4	@HDmAQXG37펖_(p v:"-3`@Ș"qkS@i!+UĺtwpY˩i9@c\%'؛U;5s+6+nO1aT-_uXMl^F_nЫh){
?dhZxmB- .e"7E [r[)4eZ;ҺNH[N13o;9'ΔI9C}Kie /%6Ma?0v]6VƎ[F&cƐ)@'?h/d	qhm>ݫO?&˹mK#*31=éz5oz 		f3c޵'b;=$.^mAaj :>̓TP	Wcf<.IJzS P@Q-a^B[Xyy3sm<*7֧!̣Sۑ#zs7~mhjix
ҷ_+(%I Q}{s'zz@XLn|ə C8R
e'xzɁ<Ŷ+=pN@
%ө/N[cbJ&^^)>9=I/;_+XYO<zv;n_P.3IK=8̆إ WJNlѰg5:rhV(O0ۣ?T':fB%}.öăwgw:Dq@"+
)0Z.Z{ՂEAl/5ِ
IoLQ 7'p<'~$PX&RXv?9}j{B$7|eO(Lq8Dr6uV!1z`^SV)_ϳRCrKpf#95Θ;i+'CA#D&Q7<uM8>Uԡ~J{Z)K
c!l0u\rj]OےzV헯%m\6||WyM9ԋPV"X<ˮ_1ߑѵf#gnRFC@Z+mH*D)č=r3@tD,~~iSJbP'd NaBWeSrxBLy#%vQݦ'?[]'rkazB:ZѹMmeDZ-hs"?͈;?jYKB{&GI֖WcQoH瘅H,&G{
i4@KEF.l?e/{hu3B7#oN;PwT0c>B^iT%*Lž3DΡ[:qN*(iV4*\42Jh\vU J]-9KЂX-)LyTJ.J CX2jvٚ\*i<fȫ޳v,w>/QoْTu[&t/dorw+|}
ĕ$h Ѹ
Y+p"I5l"B=yQɬ^jx.'J5翞qM_BSn؋ɛ4Lv/E}
	=%U"2=R'KPeN,rO;s6xD'9*#Ks,o:w.P&2÷Z6Cǜ௺r j۾V]P>!1]3c6d8ol۶m۶m۶m۶m{6[辶L30!<<zەSUݑuClx>c]|+]mn6>MNÞCjC )q,lAh^1ޖml/|bc(%ެ+D뮈PѴ%tAZ_qQӟCMAn#6M./DjsWRY#Х5x^>.Z1ڵ1W)0mZa
Tݧ˴F#b`	 <-8r(ih.I?m}y~۽,/&fQ:,MɚQq#jw*<d)ဵ_ޠRD6+=b~?t%vVQjt;rtW<~0 sH쿂zc(crjRGzk	@X  8Cx.HAp6b6A9CZҁѳRJ <I|pJk#Uw?}h{erP1H {F˗[UʃаӋ>UN:eM͇V4a2#J>z#f79<KeՄ$A,RfA8p
[_b(:4w4"ת%IO()	;b*DD%CA`ՕM}W깿cy61M1mqm@O}y8T*fG![8컡/wAM 4b{posD_wJHE1?]}oڰ0}Ǭ	l4'Uhwcؘ;}) ᷳ	s2r2Ͻ#eWn8t
2(K
峪Y\iXgƨ-D1/<VktX
,]Jn&ֵӽ9G7ܕ۾_FǢ$e#PdF_D伭"mtw뫹NB]#8gyb Ύ	*S率5nWEyoŤⱿ9cғ͍c*렉\o3h+Jm!rG>oWatE"<Y$
3 Z;9˔c+pXCn.MB߃º/$1rsa{aա3i%(U!fĺ锞$BGxW4-T
s_9JU3:KEDaٵҸPTV5MPY.`b*?Rva/?E^эr4m=ӡr<S}A!iGdp])@l&&H5^fN.OJ$[5fvQ'Awd4+MʥMMR-9mXcPx"jtrrHdQ@`8nң19P<
WOFQ@!OGy443vGnȬ?r?[|i0Wsi@0YK_LzeV& âjW9,OdI
H=v&6U}s
NАxR肯yi"w-Om9]|륎<&>m,"yk=ZJHJs]CW]^Vqeܐ"kB:BtjHJFmM4>g^5	]odVb-u,8Ym;uR\?Dy|TA{".83VMP\lG%1=lAF
	F0p #pzS)dg{ ۴bDsxkODTTކ[; 6k`}VGZǎ?eBǪFYI+B]MaKp~#s{hr.PCH`R"6PD	
S,0*؆c= YF@?sN?~5"S۱.MܙM!y91Z}Iens@3c)esGQuy\{XO[J
N.$x56m v
C1`pr3ߞ#[:G/0~w-w[Ƅq*qz?~l&	R\	\/2/bd^cHqlL?5ڶ.Gv4hZ?1RԪ?.	YB+KBF27UlqH~RRHew!<ntx3	
]}/[3d|Q^4iYoIȬ48)ǞpUQGVQ1WfL/(QnATYvW3-
6f85[WN(<X:B<(Ier Kz\N:$#PJ~
(j6Tsij۴zPVi2ͬ
9)ğZ=Jlu/b
WD J3L)z^%)
l[4ǟ>j|!v_O#Y]ܔ
ktm'.O3. y5!ʶG" D7V̤r.=J)n2({g`_SkM8jq%溑"5%ys
T?᰹ɩ@6ܾA\kn0k`%ɳ`NLZEK1׈NUhP~"1`1eRSPy.BD[VMNb:ӈ}9/nɥ>̗љ\Vf]ު<Iy7QL52r׷}]=IVB:5.5)oٹ?Y<{G7>~Su*A1u8nhz$/>مG=zWc[FOvNE>qpZ_YЩA/F鯣 !N.fhep-+X$@^.Zͮ4~
"׼Uj1~).LVʥunKp<E%ƪf-w
~k6lmM(P=ߎp2g'[m+O:<GxZiN̮^zF~Xs%ynE<#-.uBwY<h-{W_St'Bho%;俊Izd_gWj|px jzCa(4xt0gGs9:Lޝ/2:̳oq 6C:0#3~wJbyѺ;ڔy×O>xDLLLR5<p&н7S>Q86t<e0.ihbg"R>^@Z?Ͻ$u'DQWt&PRuO(	"=A;cM,-]S	1Sydqi%rXFrH%
I\tOeLAxg|Q NθYdل!pdy;A^a<w[n];)T'!< Zrvu&Em/M]Z?.h`n15mV AEi"ih}UeY
mG;qM?ri"y
Vgvi\[#xM$z+m3ܚu
ewW23o_Wd,Ӑόq5TIq(n9/:Ӏ&@$?mOZ3B(en8T۪ܖlzCy%44aXTEސGsB0`V/sR+[v|Ѭ~Q}p-P;VHfυWm➖0	Lk#w#Nzht=`}_g'ސ-,V@2]N6K=ʳ?omSᒣXmE~rEzI~M6򜝾kylO.8t|,p{|rr>ޞpʹwJQY Jve`vgi
Axkr؅ )3sEFAuU~CE<`$8hCY3_+g̾BI	Gźp BmiȵV~8MȄ_Ve}E'(QWf ']b(Ζ*xw@'r
vXo'/9`ZOH9LD	akW3ؽ7e?cѷ&6i_@n/:HK2SF1fTl>/1ʋ\` 抇dD"SyF )³j@(:m$|ȄiggMCMrQWxf
_7>Mt}~F5r߳אַBms説oux2	m+[ U^b0)B{ckCWWhe=Ӧ&CUmiޑ)4q]c,UcOv
e	n|б
>IwDRIZgR(m2B
IL5(!!(Y/.?F6uKwIӟܛA@#c$AD <)5s+ez9>8<m|s[QVY`^i4(=IʞSɳkF+bSFe @5\N
|a,.W~?C{	Ӿ+o+fL{a
fb\Ii^JpN"h9	W7de_`wY@BWBUc7˃qss}a(/9%	F4"3JҲRɇ=p"~ogZK%W{
ܹzKH'[im7\Dק	{7/Ys,BO!JA)1ԜGwuW=lՒ*3PLTiбS̔u{]
bYg^wsg7`QX؝)%z0+&cu]^L0!AnbjML-e~1Kd˧mZz{(BapbTU@_}#+qaph$'kKobp/4oîҭQN%AEa D$A{ͥ'?*ջg\㴿*p{d8ubrG=5eO1BiAij%:iG1)k9r/;$Fx:m*I+2X6o3`h~PꦗtJVp"pJyw#ĭD}	N-ͪ!;J;KQ"nL{E]=:2SF4[fgM)$%Tm[|y	-NSAHkpЕ
q`tļ5{LOLmCHƺHi8f:$ނ1+'Z	<b|ͤV{[7BQ(̂4$9T`x)XA	hQ&zDwN*dKj#&҅e:|t@M"x#4cz}ʇ/U`
Fj/,L˖OTuJe:Ӧ1 !ސ
c/JAA@ki٫[˷դz)Hte S2;Gr~%n5T$J M,Wh
D+6		*m=pjW!RIrz$'vOQ7d׮,5K'I<#gp" 4P?3cݶ
[G	3Nѡ0
pf*	CGO:
BzЗ4##hL-Orr&)X)Jٔi-NgA(L́m~0ޜbWzN;([Y)L'׶-s
Ncu0nQf-$Ԝ:t_67ӺƯiG%wdn<9Jd/RZDM:-
r'uC
R_>()E
#aV7Q,ꪗY Ű'޴gC"q]lDV(~&"BW_r٥{Z|=IbǶq}	ǔOm%-Eğ0uicdYS$:ɐu"h?w&oKHl	.bef>q5b,*x@ۋh@ln}EgLlEBS7pShn֟3kXnQheG/.*eAbY
LێH<р
qʢm<apw"9'6=Ҧm :@w|y1W !k
k%B~+mAlI`n"hw<+/2_M3 	-ibA!.`XT{F:)υ\u
Y-uA\ `b*ɋr	cܧSk &ti˔Ǹ!-:} 49<Ӕ)YٗFpC1>(ute7;5V$0MĈ&QD-;Ol`XPUeF䆘>Z wv\\j V^6V/|^ofWIHkhsrhG)GN%`H^υ?4(^hlU&с/4mz0B:$qUd|	A1dob~^tJhLX\ɽkUSIyMhЈA=oq"=.x=8%
:|̄t}?Z.WPOAIƔX]
othaX=UΦ(aQhb<.c=ݯ}h(vo	FnB(!ҤY}u1;+b?!!,BU<No
S⫝d9WѼ!wRgt՛<UON|#7'YW4uW|")㰚A<$;Q~ʾw:m-ӁO!ƭyEC-TN'መ5}_eNDȐ{ RJ%`12sCGu$`7ts9xpd+!f|vU'ZNµFYl2X [
l?0/%}6kTa#k:/\fDH+][8QkK!Ȗ"igSE=pKrHyBᇢPU	)
6ӭwJ~"-k@%^Ԣf(H\|8`]ȣLZ.7IHLX.M'D$T[k&Kt Y`<R};Od$@9г}ׇU#]׏7-Tvju^Y3nj-/OL-$5t<΃VAj,vN NYZfԺ;`ɯ(y<'c8zoOMM޵d3NWnͲxr|q;탕>&^
 3Z3}|.58PXRwi{ 
^6*?z6NAC¤63:GGVWKh;
4׼*zS|F$ږ=nѨ>v(rz9w[.=gZTװݐXLL$)>/av<7K0Mw(SRא C3{%4Q׶n02cV u:?#Vx<wXiyBpPI0EXK-x^al.#{NS7:{.IxyE~}7gk`k[~4 Ǵ_A‖Tij!LL#5J'1Y)1?1hKl/s""'A 4on<;^SB;c]XueNP<
B%qF 
<z%Pg%V?6_?-\,]WΛ+D/^ovsaK(uw[ٕ7)dz"F\-&g$iC#˅@1!ӫ.eh\Dʒ|I@_a9"~0*N{3	k)xGRYxCLD)6ҏ7e~pe%}+Ba!fTQ#PY	?sm1&<IxRߣx(l=R1ZoH=p棶͸r;k.xWU/8ǒ	9e"
]Եv" AY%9E֮HA`&`v쵩jVqq|}'ЅYٵ \	E?oh21f=뽾p8ۗ|$khMb*>~_&v۸C
O2
kUADZ(4Ýѹ+!}>W鉹Eςǡ#/6GsW O_n [-=$
ub;
ymI~㽇w0(Svٗ]ŜiwӇts)4%$um8ۮK=N+E:"=W6ۧVMň('62$vߝ3lFaޣHkj+.aM3Y8T
E[[Vbqٵ1!m´CpKtQ!Lֻ}63vΚzN-1Mc<nhh]=H7,jJpMQ*CVbe+±ָLH[{׋7a'WqA@'cmr;Lkt2#yC\Q {cj&_N<[i͞JGG?Rgyuz.NVJV>ήA>,%%XSIE!Ub~7{6\9>ڮ/DOSމҎwze$9P B3lU5BDX"Le29*Ĩ%5B;mA"h"m|.?5ELV$5E<n
H_s",WLLUMxZGnR6/zE7L̤ȏ^M֕
ΓiFKDyp,7i=0}7|*F	C}A)4yfw*R諗<eL^d7ńNROSڣoay(SRD[u\y~b9,q:6h!UPgEɿÁO=:dߑfUrzJĝYo&=*G[=ZNZ*>>$.$ӐmǱ,==}wS
zGXK%Ѹy	9_{oJVF<!uyOr0Vc9a%6687(FɑCD(hʟfς[Z_sMOP42*2i֯3%<04M<YU? ^^xfϲpKWGM1#Ac1|ͭث>LٶsIhơYk6r oW/:SDQfp&?
d@]d/(FCl(3=	W޶!_IK~%=iQPtIu`SD3N	y?Y*Kj
{p7y?qeCA~'][ln.v@e&{7hyv\^֤*^`Dz`Fظǵ
8yCJ-)
{3
RTTixrjP_lRc~Qhޛ3p:$"P$z429K%ަ7+oR)E
iEW(vE2vr!n;PDYc8<_SU{b	kJSLzy_d%
] )AZ
F%*BPC^	>bLN1jNir3A";s7gP%ic>..4}FG>B4:0r
+~$,up)a #\/vXAŬ/m3ܚ\_t%[+J
bXQ6EWMGSezͅӿ` YHr*Wt'9#_A]	IA	AF-;nۙ)B
؋
!!+
(Ηڥ=:`, ZE؆ZO8
"%YinQqu|+^8 5ANNũz|,)]Z·);L2ʮl$Y7@k_Zn?+:+Vo+8
<͸t5X ̷>1F}ףo<m6{tcg%cAkCJN u$e] >;wY"^Y*L	[MOR]"RQ,kg?q,^Ua:>!wi,EW k/AAM̿e^frR_puWÂ:ovM[~kmE+ur"(	%\RPqCO!~4XW]׻цii|F{md
wc6s ^Mt+Ͱ"Il\V8'Svc'i"#jyγrg$y[yYY"dB6{pzHw<b޿J/LCl~{t5NSgMVx`\K☈+-]Ɇ
Jۆ8Ɋ>etZBZ<]XErqscowN:xsVm@NZ/4`B.VU>Z9"{a[HÜ萕*Xku)U!`Aas>_%lC Ep+<»}^nng5j4umsUI~D-sDR=)%l^ZŁ&ܤCs,b)Y.PɺT׽P3:4kU,4a䶥h24n>٦ך!%zʬ+1J4=~2r4QIv4^j
.쨁 .Ǳ'uJ5۸wڃ$Umx,r:S-F*l,RƸp=x#
67>+BcV:YMVŊihv=v'u15^@:U|FΙg9rxU$e," ;ڨeo_SLcNJ]~gG.l}F>Cqe?[ϗyk뮄	]w
ioCx@ͼ|b<fԛX{iEĩ$.5_Q
UykMNX}œ7`$fOwTo:OUPzɓRÝ~[;SQ@gj9ǡp{ZW7Q+gÍ.納6ae,,5O޽)noESƥi` B\ ]SL"/n[TV|em
ؾ@9u*Aq]&SzGv+N@
{zwKOYT\0MO"޲9POIpۨxRUc|p8RbF&,]>/ϊYs*Ry>Ж1ߏƀ&b1,e(anQfKJϱ +{'p#9,FMPIO$vE	PT~h~1u/.v;/69{5
/ Ft&`I,%AVmL=Hu'.b;l:7`G	ªr)
w5
aVZ)y	:>']80˓J\kKx(mJqS4lA{K!44vtCvf?mI2T?M^M 	8 c$S7\V,]؜N~5tn@L[+	hN:J6m{ZřNY]lf CXrƻ=Ul|:)!THhNp:FpZz>6|TS23>>%9W*pnaIAo%PB}˹wvY(I,OĢvݗvݺc ^`oCpR&ۖpdwi^mDyeĜE3d|iWD/+xE3~Msx'5E=I{JSn'4YTwuPǫ̓y6~~`pڦhq'h~LKHi6'u`^[W_4X{ol
>N/:K^E7Kv:kX8iwXkh.mZD!
BX<6n@謙u ߐXյ{ڷ
vxj0L[c,|soHXO]V%
k<%^әNFO>}TZ(gYa&z1RzʗU-#)0 lK:S^ǫ%&/4Xfl&a1]C_05P	d`.yMH[B"׸֘"BxA<|N98TS׽gp 6oi PyUU/mDU2ZޞO'mn[[PiG{	'0D_{Fr}VP
uԉ4򀀼eYI<0:9z>6~2BM	M$N/EK/OoQ4C{9vT?ʃ*YveB&.L	
!xH)W;цklub(,UO:bzp
(Q:}0_:q9<':_BV\}#]"[-.񛥥LV&{,WarZM'N<6uion`OޟMS55x?\fYJF7HI^R!~μh>\y	!c<+_d೟|M7 K:UR=';e,Ο`p=y4 T^=9;]ZB iv]pM`F|.J%=#wfh+9~M|v;^_!,
;z)iA r*
wicM6SxUOCTW2\ +fPɂcYiB:{{~
	q|}w@]a&ka
/ԃ/T]#]B=&l7N%
N*ed鍆T{h{|:HmVӊdle#e=_>&?Tb2$gtR鰝-[mOϓ |p^AUdYanط)'TueG?U#@mFXjHj>sI	Y|_,dp.֔Ohϫ5U
$S9,Y^6l]tWcfBE ML`=L6ltf
[TsR_t lK*qH5_]*7U]^#gK}ōkA)c=6y=V}jYS$~
M#ʋqqo)+1g:
+w9ZTCއ4l 	c9UksOXu6FZ}ᑪr6lu~NL{0v>bq!T!GP\ݍc"}Z搴x\]r^I\}udJ.G{sEUNWjC۸{[#	{F7I̶Ix/oa8x
}I
fzr(jǡYP=e\CCd!895&&ԠR,1IYBk`ja3f8\+Mq>ftVw]$;qUό-q
>x;v#0a(s2s 	l#eU>Rugq Wq-MGUP*E\ބQY)֨A; 98ǨEF)2BLa'Ñ'4ԠAXE Dn㮟&+Fh &=0ԅ؉ߓC*3 ?t#fIcKDdZ6i=> `^^{
<Zgb漷.
#q(;(NDbrȓbiCL{AR+2X NRny?>ij=y	YvUo)up6whL
}UV5QXru12B˻
ܨݮ?\ eim[\*񻩽!x42їxKoxFCMP㙃Sq} ߝEz談/ŲÅSQ.k\Ӝ'Šބ׵9,[cLjm	V1jp&|JT'
c-}6k6^j͘.1X ]p}4P,]
'	xCz
t'/P|dɾ]it"BU,bPJnWLݬ3w}K
}s#yUuQuPDN9Jtt}Fh6'd)+6<~~N-HoI$#/cL[Jдj&ah+/TE%[,V]wf֡=DSHk{%QmQ
?s&;?O_zeQ]p)	ظzh5R'-h^J+D

/kkXGJ&L[:zw~YIs<LRTn*~&ҞQxbf ّ|3BkCmUBCRdPMO{HDl*LYDHwj%oo-PۺyrWGǛp@φfS̒~hG5iݣ 1_4Tlt{wa5r+8\WIzUHyڢ\Wbi3L
TK=&&4Vq
Z.b<(ǙهC8:R!&,α=ZKwבԖV+ۜ"0(%).Vy=Ԝă+/KׇU
|:O?Cނ'4v&#2v]_id~ZOu-:<䀝"m5CXFKÄd0Di
Xbx{eO4N#HPn慯1W<)o'\BKZD5<Yd}Z{E%
 %A!G؁Lukb"2W;M1vҚՈD}ssٿR.V)L#xW̋{VAKPM򁐣	
;OQ<W#<\5,ʥnRoc׾,1~o-ۿD妯?'<(,	V§lE^6@	I"'8(K®n2_"
P7Tc2!n0SNi6?*#by|sw+U|9ټq__TDpq=a.yXA
Wy7_
BCIdy{O{k9>&sbZY(G
"<ozÝR4#3>]KնQ=AEjukHqTS8rkEJF &Wak^*`|֭q(zOp>Dxvu/
lXP &5$z;Gx[b
ce<qux5(Q9O?C"Mثd`	iCBtML?P߃8'~r&5,Öf:}{-Zr&Y6TIV<cMP=Ds7A/x4!'gAlB["h6]"[v@I9v	_y`(<$ALmBg"ruiemxK$0._obq]!Ӛbn3y]8a[x	>?eZF,FIo?äS+숄Jn8:ЫOEKP&)(4Бy{үQA7`!2]zYt9Jq\zKzA8̎-Mka!@<cibn@T<:+Ě_ʜLO@$Pr}6$KĉY=nɉce_ͩ.<YM'TLrڦIsM1.]Or-<uYL'yԋ/]pNBx4C?̓Iȡ#-©y&(2
;2ײ.1~4y`s&HM?FSԙ<QJej
YCQj~ܟ+Sf@'ßAq0gӣ~JfTgLq:Q[w$j,FQщ(|;Wi0T^߳ұ5
{p3LxwGΞ[9UY4oY_L3~Y$rmᶲЮ.JKRhB:2c屑avy!HTiyG@|ɿFzL*KﰰܻdgMg0jM'ڻ};kɖ8~gګ:?q1Ɖsk歂c#߇uN33<s^ZvnneQ].ϔ烋3ىNa^?1gǶ42>g%dB(PmSd_}
+D~<@Pc)kZzh9RB5ċ˝&h0&U}<-ۈo@m߬U(^_$7J6Ud3yK[ATn9;%

H01+?Sa%xgf
w7=H7DIZ7B-K><"hZ:X\։̵ZnjY7kܼ
4f_B*6tV:O"(y
÷d>Ub@~[iPD%;T2b`Dh{j>jinM.b]m GqLyuiicnfh׼yP`V-Î\	:
bfeSR{xۚr^۠gF.1..J*S<9D_O(gЙKFmb{ّURN3"#Sz?Kdsd)j^9{ַ^/4RM
RF{7-DyUE
a'$`7]Lu_@sf(ܩHvOy
9f2v!$
;J&d^*%yb#¢:tѹ!X-7 v쒚78_rf;Uw&	mBuXg;}7wqޛ 7I͘i٪x>"-I\%mGو,a¹"-DQ{K^[=;Ep$>dgU?}_^pec,
)ͧmf[!p+AsJg4`ql	'>Ho,݁[Q`ErkZ23QRٵD(ALQ	0wߏy d֭y7%òcĐ217tLHpv/(1~!MPTh~Ɔ((<BV*WDhr1ϟIV~J^o)0XVG1k6eM2s4"@0|ɞb[nx/`k(^7fFi4{yɗt
}tckJƪNc
PNY:jŏOţk.cĤ3<1iT~f`𸿍Ʀۭ,@[S;B(vDhe^?1!3SSCv5:Gr遮W,P0zR2(iRQC(/sw'VT{N&|z!YJGn,ej\VUb_Z<#oNk1ǣQklmojxLK~BBMJwrA0^ƕ`K#̀
U}$g_|`{nJcfkA?3 غO~XP%H`M>mU
gdv;u~)f;TgAwPGZ7ӼzYZtO8L"q1(ݜӽWZJgF<HR=OȜ{$韌y]2G+0W?slkCA7Y"&xM	
&169J鑹h80*r"p\_wXzaqV X &\g
c]i5h[J2O7XwG2ͿE"o+mu$xUO,d?	^q~
jcTN!cw&ߜIX 7ڭRH čG
#[Q*^5LmAg:J".8~3"¥[sErU#EfJX3(</R
6F{!*@RE{*f*47zZ=aRY}Ȱ}J>i8<؂-qBjeql^}w*B0"sʬnpXnWyeKưO=D7Nlh*US{܌M"lYCd*Rݣa.;DwmfTzGpYK0([az}7ydT-N3^.;ǂXI:WJ<OEìLy"ULN=
<^qoYц1rb	#)T0?iɞ<'0cdÙJ7Aܩ+%^&g
cIoNkzu}&wW󖸺?FAL[&2ϸ^.hn14x'ON:^]䱝Dnee۽xp~nDxMmKi 'hEЦ63j%A'n]$c(o~W|4XIwWvvt*';ZrSPu&		O\Ӹ1|BSC#vݿ	ݤmKο3em̖+rʾ1]hv:o@Ъfm&@ԡNr2N+
8&n4&gekRw[w^{ާ<.2sAݡ<Υ~y(+yŒdNOOP܄alYT?h:꤈0Tw
92S3(>Xh,tX"ymEִS%NpN~m݀#}rTt#ρY>\9^0fϠM3*z*:$D(B^nЎX++*6bD*vg^<"4-JjeE@"UJ  yxzSƉWQl#f}G2aID!JS2!uaF(/X4}=bIp~JAbNf#:F6VO_ "oP}N&2֋RMhW{.p>OfbP;R7Joa}w`;gGтEyJBKOӤd/V	ӈT:_8N>dRQY$qƌIȺ4M}:gA(qFRtvv#Yn~Sɿ^㹲A8ڔBN\$\vr!"5أ
U*rN?m(fYZBId
$)i"A3DrO1̉q.ժ
/ȷԶhӶ8Lk2Xf*Bn͜,C~}NHnj?9\+cߢɫP<-v/vsގ1LssҮ
X'|68|Z
$wF<g1z84A򨬏H/g=2X>*nc~LPZlEazfA$g2?	鹉^ )~~*o-yzml"Hpsg$	P^mHL_j9Ixm@+=^i<OvrBREs8i޸g<xζ䢭mu={Oi
P1s*
ȰmfMفal-~:B~oT@fӇԤwpSV+9~I|*lXZ{?Ȕ_kF%N3fJW
uIəTb(a[%b@ J%؂F_\qRxC|M n^50%Z~P@:t/K$PFe<gv
IߟMt+w4-M7S(<D4">2I.?zWJ'SYB7=ajk!tXs-1J&8L`;d8;E&T4b8bj)G?3H"7dj	c:ӤZ
z´C,BZkL?h)K~pOӞĽeQ]PɊ
'yQO6 mYP^4>0XUݖ`
9wMXۘONݺ*VGqP'g#bޙ`ф9l F&˅aE
J]/#3|z㿿F.dlr4Z<Soܱ0&MܛEqJO(2aD	>s>SL ԕazs^=E<v.:@m{b'EO=y+la;nʙ%ID#}@ÙohL|<Y#	#1iI.eJDF|ϳ<bF3,>$FOUZR:&i1ߙ?m[S4St[n,p0h<ϯɨ/a7^F˰
QM,509bcT6`S2RɅ2I{}	RR߲iF HF/njhX8 mQh6tܫA12|<2pT/#ȸ?V<wadM$'_f<\:#Õ^ʉlXΟٓe˫T7ɯ	+Moϡ''PJ@1`"D6ghИ:`2;RU&v\4;t59N4 S	jI /^U į|TFq[U	lHéR[1lڎ?|ڴU3Pi	|JqJe0`N:co൯ R3 <S[_պi0ŋ>
gr/䝛/`&{
h+<K~@Db{$H4\@%[ZO"Yςꡪhs6mm<i9'VPk;|i$NV:~|c0' wP൜ǿAݢa^AGN1Z]:	35mnMHa1?@ӒިÁ
MZr#ɯLO`Te9< G_DEʬS**qvj?v)s'ˀaޥr
h=XLZܸn3Sֵ,riy4NQz1DECH壯U_D2?"I0s+	0d{l{x	l2<J|\f?|(E
(fjE#?ؗsfߴgd4tz ?=x[p!J+b~0'lQvrն.S[F[@./yl1iW#/F+*.J
	IZ3}
Pڅ OfݟqÍ#_Y}+P-4xMIFnZTfʽ>++ILeE;\Su|Zʖ"1MU	= Y@ /?e
߂+<{`=N=Iȏ4R/|?w._ϺlmGwH) $b7Czx`8Iޡ1c]X$DP_6-?:L+J(jf>|ONg|S\-,
=NLc 8"U8qIf[6mF&n};^KMd1LY
Q'r +7;RA$^i"ņ$Q'G"/T'nmN{wx$!tL<k^;[jk_E6YIaRRKPrc'?$mf)G7vT1Zaju.j}}j!}VӠ8cJb5{kEK.}3.aƱ
wWPB͈^1
ʮ"b/OC4O<vR~ aw|u8<H-pwȄiv\lѩI6kO-֕K}$ɧ?cP
,EQ5\;dU$Rz
$^u]4HnCԵ6
M5F1cdVX\WAzXɲaғjq<aeIm"Jߧ"w٫Gwq3+^ 5gTvt[#9Ry4W=E~<6-A
P#H-fDj]<˖zQsp L
AJ9z\'9yM[zr&^a:e?Iqf1iFX@@x[֏mk
Yb*l֏:9Tjؙ>KcIu^+޸NW`f޷})2$Xi/LS|vDS[e
}%EODq|Gƫ	*$e=o=3b2J{WRd[
Mk4z֤-Z'Km<3	mŖ0_Y2zTM&y|ċlfR#"M#>L-Jj FxKtUtk# һ[[N8ҹ-H)ւ4&]WmŒA4ў:AcKFʘcB+Ƭ>ϰHb@S2uspd-_?I|JäC鵵۫pTl%IY׫|OGEqYe~GfǪb$FGCT+Rt,`*P,0S9&d,?lEU4]4%V\Ku#Y+,ZZ-qOFخpQOPI379('pً9c~GځVy,	,i|g(0zV.l T)?ɬ3bҚpzL4$qmO,[O//&s,
g."WGW»m+sYrѥI%y:}&&ҹRGl1~mM?_L>x=ǇZܿ4g-GHSfM:oR`չ'lz	yvՎެ%sS	6krf$o*olHE3!J(5265>,:YD@	1QoNmZ&9/}<y&!PQu=5D}`۳ܘB:d1ZѲbuLNmҡ(YA$4S>@ԷbHD0wAǨ '#JCߍ&M](@|{RvnJ,mA}$3e'8;eh4Bߛ$"%fĞjF-$0
씒Ddqd1G-u{u4hjB+.-ʿ7\{N2潉(gETTO3wyL؛">"_CC˯T'P/B3mJ>I
Sej/a+@W`D3k
24(3*|r4`Wrf9;[37'uBogjt~Y;x,E"6@DT)x[IfAmXǾ"_KC6\=ɉɗ]Pī[lxAnqU0AA7<'v!(6nx=]I*aS|xoj!z(̎3B3r0(<HΡ,#-Y˕=ӧfVN7D3C蠁geGpDS[]Y:% Uᔼt,mrH![00$.JTY6HVkR_p4/tO[u!ZkH
h,a+?=@wv׌R?-9S\Yj׊m'c"rq.J^\yᒮVgmEEpLAgC$HdF]F?<TssY/u/%He:?{U|Bou\q=ԋNU%:
97IG<>%gs]^V1l3mā 	a\$CsLa/^feJ?!oh.0cׇ!pqN.~I79fj*`OI5t4s1(U)_Db48]rhU
u_;(6]MiOa(7L
fF_gNgbQ9Ϥ}w=zdjZN˳/ԏJOŁVk Z/}|ܟ=#m,ʃ&zc,2\y3[Q!W!O⒤h/ܔFbD}
nGK;)2ux6eF^eH9 ;{*bX"\;r_vuǍ yY6eEq<SRΥ	_VԔ)JCG	-5Hwg֍F\UYY8-><]$7eȁ4gl^p{ALb/fWܕ!n nD|0juoD
v=Fʥ+/4ީ":<"yº:*NwϺ'ƪ.H[ў ܬZ>fuB,YCK6ȟA$130U1MKړ~dA`.ZXCO<;`m?i%2yzK&:h8q8/Qq2`@ra8Gv~9LT7	MfdC^GFQ/oxGؙ7MOh%qK(+(Ll)_iA0% U:ۊPC{ً*VghNhNs.q8hDJc.V	Y \"zġ	{/vv5#~3< @L-ʀm5TѼ%1﨏;UXMFDHdiq>_p&|ƴI}Ô:*KiӱJ&I[D'Z'?(}?+{mЊnDO>aдsD)3vPPvPr@[谚R`;Ao'vNq;I[Jɡ#/m}Ԥl]fegl㵞+4I=toRt+K(\Јem&= C+yXoa*{9m"k0!L69<S[hƦQ䣇'jm	bnR#
bCVC9->->W gT_6	úKG}ЮSU$e-]GeI@WluDRdܣ81e
!yf&ЊwP6=~_kH<JÇJ
x~⺪ğ2,}9qT]`J3ߔddlF '`+;c<:sM$BVFx[9@^Y|ФF
rIW #J֛քKCMr5 .lTI+h,jX3BWR2rRoU5i}.4M
^@J|ZcI/ҝT؂ĐѰٗX묓gR+}f?9JwyRTB=]ę'Ɗﰩ`<;RCqOK
BQDa,1-p$b_"_?ԗY6zi$WI>v0ܵ*yAys;wq='uC<evQOƛ_#fRy"tѧinf5nOdazϵW
Ћ؈v~!I_)np-5=ckÊe?H[X?zjG Єp>N0o3CXR8!ic^,xke螰5<4nٟ{saF"B\
Zh-˟̓ؿTdB<Ʒ,6Q%^u׈uyG2oldj`z(CrXﶦlFF<EbN"7QgQ/
O$̢-g3G)]۠6K%TwԻ?|^pj?^*@Tɇq]8ޯߎ%pf/frCYW6Oe
(~ߚRwM
Jmh9jhȗ)w⊠)b&4gw}^ezS@&'ʪj\=ma5MZS6e=nE(8&Q/$Kŋ"{]ޛ{	ocRFn.{vXj	✌5\1p;:pĕh!d\4[ͻl6QH6
#r┃*}'oy	ƺQj w/X/3y]QNtkK"
ƥ:t'Xx \61 joJQybR~ԽT
7*1jgOeh7;WHgzH:@"EJkiۣ}#6&fDoA%^ MlN'rJHpELnax	ٱM/.E Y)I	
0	mOu;u1xiPu>4K yFߪ6מ;ANqи4Ou+nl?r.FkD×Xh[]vvMP[k.l?UzrmcPޙڂb[ErX:ˎŇbDk.Cb|RANt,<@d 9n0>},	6 lZ,\h-K4v99Hᖿ@NX+vTg%`EȀÖ뙥a+Bsj.=6v*liyD-Y~{DJ<';j zEvT	oȫ(g^zsEA."l竀\C2h$e?g-H2U<]D
4NKk#\3<-T岎 ;(|n!_wH0ix~a{' FntIӕ\,(O2@^W=Yv+@zD	J ZZZ:TIԱ/I@4(<XclW$T7rhwW-&E)F&hKG`M,n?t(%W@
,!O<Qb+I4~!):^<
կUe;fNt#I֌QSngS/gl!Mdy#1f:;N	wLMty1SJAG2<hFQr1C?|;8IgΧ'wjw%^ë}8bpP[C*uS&V8zԗI{ TjR. 1\כ2Hbg-)onѰJ^$$z6$$8Ig@ԈK *β?h.w
nHB*sBʔQGj%lU7ѷ,Ka)P
V`B2ǬreYX76>z~-O7¸Ha$TlM>eD
r!Q7?{qL.ʮ 6h`*qW[9
pՉ?
}CbqdE֛G5맙8S,\o6G Xں
UP9HGAI|xxPؽ`̄<<q`lp*uiDl4J\k"\=|OSE+3k1<"/C偍g͞{}{R	$c$D\BqB}PD+`)bk k2e^VU7LiL0iT|YtV3̧#=>EOYr	ˡ}h3b)˒S aP\2=1hrgad?C3[
d$/*;\kq*/K_gălU׀]II푭lj84eOV˅0@a˅*%4m4x1*Eۮ@BdBg;`^-}LcFh!]?]@VٙU+(^s8#cN* (k8\rOn  
r-#>muax6ikY5io'V#W5Bou8+/on#?_c*r%,
?jyc~(,?\&drJ66?U% ׺iO/AݓhDHQM,."]y-\եU0l+T
t#6l[((	hQ#9G0ReGRWx$h/BHfgfcoT(NC"D=)F c|Bh^[b6^uģ[{ʔGQ-ז|T;udS!i[(^Bʄ y\ni>+E4[,B
e+^Z BCkSCۖŋ
Opj}SH*T7,k~'O{BO1uFv>6wC_C;5<¥Fqwv5nZ#uܠϼ11ibyTUGܼA:!G#
Ia)~?D91׫U*X!p4E&+
ۄYI Xy=)&?=g|||8U`rMlv~8K+`E۽U)+t|3jLz&Q3d,F4+I)RB8)1XL&sw{Y w^DE4ťhXT(#lx:qN!ypNZ%¥1X(ꁟt˭$ , fC7:%ҵa	˃ RAM0-liF½aSs٭ƜEN!2	<!/JMvQ_|GY˝8ɐrG=3Ș1~SCUօj"`jFCXP_
 mūo_t}Ys%cRnR-$-<tR0hH2xW;w5+:j^OIWo7~ŎBkA~)2HnU\]fx{T1NDq.ැ^C;F=<n#w!TLHQTX~?Uz?]ͱL1u:B05:¯6qT է$c)Yϋh:r
jG
`(1FSQ.E/ucq_	pJ="a>COJVsFRЎ>.Y-ͱN)?+%Zߧ}~pJJrzh=d-=(D8R'xvimWqޝ-b0ːkDxb*rG/'7f6IFu'a嚘M6Bl#`2UJe(vYw~q`1o{\$])ـzx7mJ
Nk=|[TBmꝟ[+ Do0~;)	\J0islҮ|@z`{/dSjyY][GDOYca*4Pl*qda@mGЮk<";DzVƑ?Hr<|@&F2!"Z6xo+<wJ^Q6Z;~/kz t$C_cRB*^[~Q{|f]hQ)8.wO+#
-`%`Y(
7[J5n7C1y@>^F(u̩g eKꓕe҈$J@oPNOsj/GzI윻ܡ#ǣ	\/5dy|J#C; +0r;DR@?bw
ze&Txɹl Jx3(Gi̠`6zCz"A/[!¬헎 zsf`֝y9)s=SՇbV;*!XC O$2pOdc#wC.@{(b}MKgtؤ[*Z5P?d @D6S`U:tuFKv"l(Rvag\h41E?@5)D7YDl9:ecU
J
3)hc/Ȁ}lޟoTiFuP(U7!{3[+ǎ9TՐ+"jMuYHVk0J3Stеnp
	8c`dI=מ@-js?PFaFIJiݷ|7UN^q{T
;~
M>"v`8vZT)ZL_%]tbsH+X;J
$_9՜u7^@`/B,yAHHY٥^*8]1
s\74"	I@ͫ[d"2DuCn9a_O^ 9o@h!le̬{!VGOO'	Q"X?/xuomwN#ezZ2&mzoB#&3a7G״		@nkr?\e& w8ℂgQ<D~3]4m
	t=jْ?5R:[`r,WC	o=7g" nы`,}	_|jkps2dҍ>43Қfg ;dRԄ=k*Dv# ZmJ_csٚHiklL1Ob{7w6g[26xIrnMU\1Q䚞=~D"psm˄V<H^Ԋ&UTns^<Q>`'UHlLjnw6ܲ0ўOF͢?xVMG6@#lF~N5h~sZ"eڏ15LHS?qJ+p&+٧A1o4!n1]WL
/oh:fRb>	h{bs4LĂV @1Nm+#@Hzwč7
4G*cc
'sZV?P44Wb~ȶh0
o| FUP WB9ʟ/xpt!Tӻr
|$lȀ2RP$IAQHH쩭-RWsM]>	׺ݒsy1!TQ-ܼP-#Q2_+'n;䙁>˺~~8tYHIO
#ρgU_ɂzJm8ltcQ<	qtkц 6!26~,m^>ј h$w\8]:[KqVS@`7P'F

g٪xX/$Bhۓo0@Dym`5|cN|J)kg6.jG't>zj*Mk.ܒR?-GFQ
^)%K~up]=pА\hۇ,'o2dEo9B۽-
q}״S3v$[֋+PoRb\[3?U/N,;.QZ#Ggn=*]5=&J6M.}YeG><2Ѽ9DDnsbȇc%B#N5!(LfRS#.BN;NXI;n+w]$ժp*x7V	9Hmy%`|Oe
Zq/;, 2k}]\44T2QT7J)VIjÐ>dhE@Y6w/Z5_Ki"NwFLƙh,L}r|wT
U>3d3{*S^ŶF)qғSO*_b7.m"%1
ަviȿIu~9$i_">hz;W2`E1HLS#{[h<\spejK&e~&m.1voͮW	Dc$9"+j1xm?ejf1Ɏm
"_B=6,JԾ!j9h;ۺPuwul\bH~>j^.	 
_awM!ぐ~dk£(0Mf.L5\bniB%[y&75n~'kj,؅ξfRVcZt6m^K^ =RB~nǪdƎ'<y7p.4Jv:(pZmKږY
أw6$~ov:Y)0-OCImzɺ){EW)7ns~b8xxD8Jsmu')x}燐kiE#8e_\#	hUW]h'-д
Ww3OY;e>Rg3WV6p{"ѡ Xaռ;c]w&LOPo2E2*)
kјx@6FvaH5!lTby(?ְ#Kx|Ti%yx\Y<ߒ\Ope(IgཫNSvt)jA6Ҟ</}1Oo̺]X<Nz;p#:pp`֬tNIR2bЅ)Ҹ#?L!^[*4
b~6c7>YZ7C+ط;	w֎<:2|jƧi XJ.U-b9e&6ѐtjzgsIOdu@ښxB[DbLKٜ^~֟ն6N0&9a-_[y.#KLI}vG޶L];"3*ֱ>y>tZCLLe"oZ#V]q^{	qX>ˤduʹ}x
1EM~l_&.8V{iKSj8WCᰍ,7~	cAN|(Sz6 1ث?[Ux4iQ=ob(eWP6_8aUw8wR%4DzB}hH՞ =~ez.n
̩
C`ȗTك#ljM0:Ҥ泣Cd_xV+6_nPmTR/r c1	]Тq}ܪvC}{+1nUIU \Кَ ;Qc4ї1Bp/4gP!Jg"*\&j .ѓ:pyBB+pk"{3x>+ĞD5k@1M6CM
fvL//>_oucx^b~۞ԍN.8< ĲW?\.@lNU =4"p8:,,1N8}|Ok*&W.Q{(^Znm][e_2§ނ#Mf?`<
"BGhp <Z3@)h]^y,
W 콵:ψ Í.j>bZAYPYR*|TYO
jyLnXA#˳B 3<b#a$`9 |}E(RF:88܅
C 65{<W>
h":jE3T?IH8 xpaz4/jr<B6	XDKBFhRA`PNj/(VRe~ |RT<H(tϜUHWVJeކ-XLO\2y<	VX5آ6xx<O1f@C912;i   Ɗi#%KG.rSPZ1{Sϫ'')zp;⁒姁j-I
rq?ױ-U}
f$b,CsNEN(YJ'濭*Iw
,_\9$9jEm| J XqI]Z旚]9fäl
IK|b˂p(K032YIKbU@ms>V~?2Ies#_[rȝg6xXtD4!}h,*(N
_ňv|v'7=EGp~BO КڂұI?X*m8e`+9mոr{vo$rN+r KDN, /bGwr>Ci4M6
+gzqXtM"2qcή
uH2'NYYʸfLqt{"U]ǰ!zfV]M9^M<SǍW 4Hxa34P2ooyƅ"Y2
@I5Ҙm
cKH+h$+\=8i▤1Dẅ́ȷl=Ѡ"Zmw_yVc^#/?\V /AJy?b$@Oɝ[sg6EץHI{zQ @Vp=Ӧqr+Q
蜡߆/̓WFCXZ6N\P:{*|b`e~i^>T
	`K7md@ϾM*8TXay5f~4[)J_kXz>x yoks~C8Y+.щggp)K6dEl
ơ	TW9},QZ!,VQ!*7?$՛42 G.mFXsH(4\cB0{.ݜR~6$P)R_;y^pG"!eT=fG8aަLցX*c_< ,ru@c$4!W5 `@Ř؊é>3xhZ|	$]xd(Z^.v-,g|o5R,hF]7(xo|.Q*6,p״MGDwxugfػV(똿Lfu{K>iN;u3>yo͌Ux6֮,\Fk K=ZRv!Kr
+CѹMrlU3񖸮KȨ_\ዢ0"oK7ٖ̊6oG8mE#=&"=/R{D'^rP_Te|s`72˃PI# ׄ>z_ Fv!YBNP	(\XUaPgtXX6! fnwvySdJ%mi=ZXxb$33nޥvhO,
64Fƣ˘eBZGs)%!ux40up8/aZܹk9t7Ku D=fCM5m :˄<Ȇtaj"iez Z@$)|u*T+æ "صG:cS7|-,n$v  3n <e&%^	XT&x}؄9
%!iHo0Gn[BN's:(]Mm+L7XڅΐLbo4v_b.KkJ['x7BGE$SX2a#R/¥M5Y~8t<w@UF]NfucKڸd\M}}n> BgNCf><@ a)*;q\r)$1h`c ];!*!$F4& ӊv/<*>2?oWrP$	n,JT4
<?0~rtЪZ\
I1vF~^Sꚨ:x@Y
uWtcM<̅`u}7s8N5q1i:0 j7(Y?UuZHNت^YIl@X[T(_"V2K<d.o1sכ+>tdL;<{v27>ņnPRuhTqvPgڃ6T#Q E1rSzbp6N#17NndJT8Z%BEsG˿Gk#H"~PTUk`4G+	`ix#1C0q.R:mHSl0Vc;B8Zkxyy]ڃX<kG>pP=l<Qy[Wk7*3.^|M;X9̸s[}j(˄^gndXT]ӽ8/idJL^iC6?EtmQbqҷXt_d1h䲼r-`QU+*FN-#ϭID\\.)hJRHĚˀ;e鈯(.4ñTECY.Ikl}(J4J?}b5iIa8~OS<C.jZ$9VwU5
DU&T[j|3p-ލ݇Vl)QD#Һp%bcl=z6#H|:T@7Ę3A5C#{tU79/oꎻTgc~ޔДI*U	3-_vɊ [{+`W 5"ڠ8z43g38#⢗l5]㼰*YZtOƹw ;gF%(O~bqj:z1I%<vƧjEfOnlZo_Rv `*e<T  r>**A cyVN1Q>t|{a[;MTm+uG	e~=@`LVlZIp1D1K"%
,'yD9wmN(w:3t'dɜStPw,IiKwvUJXkh~XKw!'%+P-^߇4[OuYG}XׁI5Qߏs~NѸr%i.~9=4X~tN;#k:R,^{Δ}%`2DX7U%/fZs+m\.q\rL3CK(*;c̪1!BŮQ	Nl<i
")sN5=Y$apDF/`1΂#a>}^piĳ5=Jy${AZein׀e+;zai=&l (CUq{[Vy>,zeAqhF5tcpCsӮ7{G_6cSTq1!ЍXey^_U=e~cɎIcUqED	AbIZ2^4\U!p/eNzӋ0F{D}S'?W0aG75	~i] :jLFpO7_
DbCd&I
{`jH#:Kv8TpI0"TBt8a?wah zTK-E{|WOJ`y	r1[G{A7[S=gĆWG,NA\\eAΞ
O,}vfS7Ӕp]k>E/nmk#Gu/pw.P+ۮLU*&Ko
Ϣ5vl)5Zqo3d-y,y#n6X.^g|_K RxfEX;TZFW(L<)%xIoa]aJ	xk-,t(lwn^%LBKOh>e%eC3,.Od|sa#xi!m$5ܮnG*y[ws-:0ʩϐỻa
3w4)G*Q*LNB>edX_M?]:i$L dev:"=1dvUyDο,1	q\Ҋ}kZ&˼64^~F`ɇ.KIzV(YvoD2 ga̥b2CqR.'.tj5z[L:ȆVIVSha*wѠW_v#,r+(v'Qm@ƿP#%x.k4_ŪSc۴j/
B+uJJh8D$Qp1\ߠcR3YW,,O7T66>^ŅK%Y/]Ewq@XYzB?223rH⻬73)yac49?aU P;.%Vc<6<t~]e[!i's֟lQR&VGH/"X
}pAngKO>ޚcVtDk$\ԚJf`a)ுeMgkۏK<$e;KJS_\"E+Ivd|ծ=/%l$-w4xh%ŧ Χ.m%8pyvqXG]8XQ̐Ժ	LŶL	 |UYT*zd)\`#dJxvqJoTיsW6TdZneuK@4pm>cΠv܈۔pj9Gh0,󊴧V΋2_~0iL䮀R18F'?ONƲkh4O+Kk2N3HXE}m^TRqE55&i?Hl0VX#5	ƥKc)kZuBX$`Y辧])_
iN	8:揬l`Ê^D+dқ7{kLECp$|:!PR`
^x,	QZ݉bի/Ƽ(
Vܳ]<4Y0A^Q;&ZgB3nhw$	QeOH1
nh|bvk5lkzlWkdmZ_1B+ħA~H4i
)Sϖf&p+hX]묘f`vٗbg/:Òn5n!}JF@XcͫKЅbiwYB`"=0l~+SJ7'Txܐҁ\R550P+p@#;-;sy[d` f}M2o;j迲볛sNj9,%V
 ci9$Tbч].BNB^cPH*+.49W+(6RȌh1+fNMȁLF-%û$Anen `9˭΢}9qz>1g|7|J!GU^T}L.!bGHq&l$Ҫ
byw^3)_>	>];ZS<}YzrQ	aW:%@G:!Ndn@g򏢫	jr>Ϙ\#u̱+H9Fc;P^pA~L.(#c%mT
$Wf;ǃ̻Pqd
vQLp8P2yi	z#K BLlW"gae\ԼJߏX:2{ףe>0#.
&I]`֦ZKq4:o%
Y{{6xJN_SC,+i$)$VjkUaDH)VhfyMS<.25@rFnrUM>$ذ4D}eRIf
"q²EYrL{8ШWZG>JDK^O&15Rg;BL<ZAH͑pQ|%rv
Ϯ4D-0_^,?SY@܋`dkښ5sDt(MܥmO (A`6]OC\B0cN,O#l`6_BK`Œ2_@0(@
&{4*Clᖭ7˶ݲmel\X[v-knˮ=PC yt.Z
D/ۑ]5D'dftD])E}U͇+ߖ0_!ק$2j-{Ϥ9Qh
1+G:,uxBlcMgT7WА,2B}ٞ: =j9{2gWC4/kl>ު'YӚ~b!vMOq\]>zцALvZ7UGҹkLGJ"("2]
T?5lN6q8
L0QF5vWzqjj4^8먽ʪRg}T`^즪c	;&;*姫OH/8[o}Oŷ{"BئMAߋ#=A\UU-[	fLhW?3Y-Fq׫^I_r4ZFu-z$F#<B#;iK-o,6fLژ9B*'Kr3[~mv#.}ߤ|L/Xl4mvfGQetTB;@&bl7EJFZohtyg
+\meBy~Ćo.Jxt[VM2]t㲈l'W*	$#A|Y@:ɸbl
[:nSVSW߹H$
,aGOL͖ǎ{<ɱNI'ld$tAqc$fCv};ZY䯩l6&<5(V!4Fdd|3oY: RRbeJHn }w`[;*V%j2o|lu[=:9	ޖBɘ9}YWM b6RFTV(uDKG!!7`Ȍ_k<Z_YMLwCJU2ښz=Ȏl]<|4ow6?P]n~T)BvjnG
͸)gqyBv"?U@]FcgzdBXh5QF9ǡklTbYܧ,*Ƿ$Ug"ц\*u_~Ve!,;#;M~j7pR"N6*#P%/	G7CTQЧzM㖠c @$c1J!4%ܮl><sW[jB

Ft*jK%ζ
{b]lMj<ҰlP̢[k?
~f֓|QkƗqB1^xTM"JY7Br[rΌ;ZiNfă9J{5a}g_(~J|.J

=[ "2)D!L }g72uue"`u(~.֭pkZߓIT:(fbc@1)R@n.6Ԯy!drz	|(:Ǌ.,~ZPսf֚1(J`Yooz\gPۗg]5NWo2Vn0vQdY$t6Ն7S+:^ʹgryb0%պϽH[rW&<\[ΒmrHݧj&	;|nߦHm`*Z~v,dr@?oԦm.zbݷSx{s(B7	KZUk?{*ߎ"Jxu
_d%PǿE)ÊnՎ/ϻ]{[ӷ;QO+<,CNib
-MF0~f`EV#7aRym.jL՞
%I+^)Rs`fҮqj/Z	M7;ZP0[ BTxs )hiYE"2JbHъN5vRqmkwHkEMzROP'T#9K
3&\.[6}q*KO2u[Mf/N]{j2*IBn[ҟ(hk3|4ge6؆lM
:tl=##h8ݱIK<4=3p\86YkNatxTkh_-܏ͽfSXvs
!ccb}_E@ž;kR_@TUP+(W98*-bh琡4X.3B'\,:rzס_n3'<E<Ԥl߽{?$
SX\?Kµ-Sj+BvG-zT!Ni0HGb
Cjoh{QMdϻR(q'qΊs
(FɞƋ/z~QKs4dh|J.NVo
gwiP!!&.Ȭ<y^׶Y2>V^/}S)X3иpj./՜'[ i䐔 <SDc>KB=zϹ69	xx!'ٳiQ+:?+1vזnkTz%}/Dܷs"W!1OͿ4K=l M;,YTJ
+6bۻϥHu\?3:~y|03qVO6Ox[(	ZZaQ,r<7${NKݯ%u0au[}8c|ILgk\@N]T_׹0MvsʊzC,ws0ZI&xCXiʥ?ӇZn:⇁+u$,fFpۙg0<fg&D?1]ePc'#`vݿ=Sm͖g:9$h
G4a4jqRF\Mw26)U),4ρ;)n76Cg|3_:6}^Pwwjue97in:%%sNH'{W"ssQML){S?B[r#DrIŵ<6u%:]]iqxjMZC鶕!DDV7dq"{%gNe
m
&AY"bE@w9Ԛ*gA'9*r%RKIO0$8g{##P@)b+%% 6%dz@YwJ8
l𻙨dG%}DY+LdaTN8D>\O'=Z4ln#Ci'+iZl* 72
M
TӉ{q=1}M@YDUw<@zfju"&Xtr0@#^i\)4jxr*GVxa UMcN .8Sq׍@T(}M
r
SnڦFU	WM?yJ~y#]&a
N,.T}jFX!jn %SlV?}ľ "2*DY9͞;Sbl
bnRElRW.K_TVOJJiu=Aehclcw8B#DާnL>~W>ej9D1)1I}FNqZwlK8R1k1mqYOKxD3E-Tb`V8l60%Շw?|Qm_!{)zE|SF`B$Js0{5D^y\b)c"yL[L8Vq?o^=j*4*eه'kבsk*偷JeB
'+r~s%C?*aUܠҝK.wMp
|)P{w0bt!TN6n}FUWf\n?,Y*¨ިW:TYk@HME~Lw(a>[A_)Ƽ~rI%3xYDN?^5x]*SA/;j9QNBr? dz@	!v/wMD։k'/?p)>6\,ᄴcfӱ=}xaϲpj ́iMtX[ų@ݍ]esQWӮ:#Qe@d$REfn追K&eF1:cZ$v6lp@C!IoP휯VJNQZ{~SiHv&5>P%R|ZC
A3Bd@^7B	3?|[6F|,aJ
Z:2,"U0w 20P
8Lܺ{+>g-Tx͜Z
`aŝ
_PUF<f	}OyP
j.+#<!2#rA`mv?hx-bΉZJƊ[Ywڰz]req
DіYѹU^:C'H=T
6k;ȸ0-ڑ0>;(t?U衛D$\Wzw禼	h%ؗ\yDB6hL] h2ܪީpMh$ğwt"ߢ`炵:{^c{
V(~ԨqEd!QW,tkAX?,%rJ.jUrtn$=<mY1h!rnCo|w4?[0$U}-94ǅPQ^
:o^㿏}خd&Ռde#m織Zd.M(|x_oEYE\#8\[qI	BV8gd|Vd{VBx׸ÎQK7q*Ã[ 'cq"Amݓz*'PɌֳD܃!0(PY45#D8֟
yb"(%NW<b7Ј[MFEj饢uTEgO2eYiX\x
"
){?U|VU,(R[wv;٥IￊN1yZxKjL޲9DFVOC:/!0OfM{kf\H,xz(v3S17"1plŢ< սaN1_xd&2t9Hw5͝3StpS)|ԍUU).?c-.F$EΒ݁_Ӓ%dOm۶m۶mkwٶm۶.sm̍oYtpGY`%YS?Q
=B^ϿUM=g9~V$S|
6@ma72ĶkhVcfϞ=xPZ/8-R nwtB_H\$<5Vr~nkK/{x
|\K>zdR:4ݿ aŬd[ ,簹ڊ8ؖVqCKTi}	+ 1qO?T_v<Uۡa}I=sAlծ@K1?ߔGѵ31\*^1N0<J'0LfZV߭(@Sl˄7;B݂#~wq37z L(7*I[BQUKKz9g@HtVPݭ3=;<g%P8;:/2ɇ*?pp1cmYlӆ 8:#o6]a`$o޷:EČ2:)I`=liLy O'?DKhEKTk7qIХU{}?6v'T!˜O laBCZz7\\Ur/F3Xeϋ	e6W6Q-?f/?g7Rt~ѴdoB`pBN[o>
et'~PɪO!
"HxI3jf \u2Ccg[Cۢ9^#Ρ$U?d*|$|Bm AA蝚soLZ7 ^q@ew]M}ۧcA^K#P6B?@۷l@5be)HQ9	~S<_c!v8p>Kkۿ3{0vO<Dah?v	
[ou4mTLF
6X~PH< 1>y`}9UffwOY:0aٞ[k(L_UUak8bF'<jV;ѩryaSCܝ߆G @o5q)BeP(v
Bp?WFd!Y\r_7#==Һ\>CY4qrGoǎ#B/ezX%u(~gZϤF"; vP.#6aϠ1Zɫf
($H׭Uю+Ggjs[kH.H[4άRd
gOWgm5r9D-1˾ҥԼmR3>p@Э3H]Z9r>
50z[p5.2`
4JLjDѠ]TslXg+-e8v
-"uW~oL5Ҿ)h1T!HX+dָCLģnݑw=cj%\4
u2=``+Hn?	}ޕ'Ҧ2\?i-<6˹i&G9x\ MH
$Ծy|mG2gFCi>uJٙHniBvע4{}nq^aSrK$=?݃p7xasMsag˭Uԧ^g)4[gx"<c.K-5udA^Nv߽T@Co/#)vT"?;ft<6ɳ
Kf[l-(`YSow=dvՕ8%egg7ҵfP$hE	*~	f9yrw=,g=e*Ec+mSAW{ݪkcs<rG"&94ޗPgMALj2V/OII>ʗhW: v>'X7&Ł M@ip'Ƒ-\FuU!FK,z9]u4͉zʶF<">"F-F~}y
YBih<a渱cy%fsL|K>O:[	:` 5L𲃖ۋ;{G-&V1dCss^?|]11BI&!t\;zu2B
*æy]_w8@{.̗@]P4	,=4Ou
}mbS (SbS=SRy[g|២|ߔAYƫ܂ə0BP'YU'SJV8G tBa{E1^to;$'Ҡezbk(=eeovvT:T2BgP2EM"]R};v7'Dڎ8,A~zK%fD}C*|'ɯݷ.O	ɪˮ.anfr׆fw҉\0"E+-tuR:ǽVZz0!h썏gO3sbK3]+U07{Q1'ᜐ
F*^t(ʢFM$O5BϧEA$V:)OVlHsf6f(U/ځcCJhLFl?-xJɪ蠭ܚ_qK֕ޮt)jh-$l0-|e]I~;s. 9d({6`ʭ(BDRq5(+IҜ<Glv6"&ni]`P_P=j!^R_peduTAU)h̫ch<\48 s7
|2sLA

לn2'yׅIdIm)eR|KbC3O*kDD\@P[ kpWjh3ڱ	Oi{"2s/bK(댼d^Pѓ
ে;7&{Y0i29L~YhG0]
`<cU#  
BhI6yX㻥?3*	kkKB FL`;@ɠZ/\Ϩlg0KߵYkQ9JQQ_vYwѧ4p~&hm$j9	\JjPu1=P?Zi%~Ps,5c~S}<UV.>qt8I+5ۿn0)eW'l(r:V\7NTPie  9\y&9"XW=d}+J[_&GKΉq}u}N ɗ?҈G_PW==iAg뵀Sͤ&oloKCZ!qE_:AOY%v=Pyc*3[i22y-`jy%1fbеfa&yIZǪtgo0L}?tM??,˵A_ @.efőСXcc-@
T͉u0kƵ`N#peJgPI#n^Uw@ƣXF𥙆Ah)/E-Ɵ#E	%mYlZ? Xd:mS<	R=
iC+0ufuݱٍjBd|WiQXZ*~).j$S^P~IZGLUWhR)LMxzzp=)|_)t$lQ͘XW)-&eTvR[NXp4m<\&rHY2Fg,YߚxFu]RKd=yke	9(Qi_:4ē\&x_|ovt-i{n5{+hg.Ͽ42)y௫UMnqH_L"望띲CO
l}ɳ b~f{ۆX{pRԊCBud63eCc4re0vqqqR[ӫhf(6
sP/d4qM!c=Mr-T7}Y6.Δ5=9>!ToQ!*ocz3eLaޅ)*|DfLQc%v8+yKsAޤ<XeF0sR
;*VMjf0w lC)%҄Gâ͆[*$W%ect~Xam4DwA|Jg0]<Kj;[r&pB6㬐*ϧy_zn[2v[4UCԒG@a.;vV2ɹ쓥OEɖ6.? kX==mGsQuO>.N,!WVǕG{Fi.yړWC/Aew,QjCYgt'^qm㝧,j C#?v=5IDqtmߞ1r]/%"#eflVd>{,8"Ş UgLdzWlmrГ"[ȗ))cGe8mxƑy.Woow03+dvB-HsZ.Ha+puOXdzO")20FU__CDf#=NX(Q 2+[}WA)q,"7gY&vaj}?Kǌv&O琒Lp+xAbFOiFtw?	
b:	NX`e3êHJUB숙nY]tB\`[ڈͿ
^*?@
wsܙ2ZMx;n׆	/s|0Q)v%3:}:/u5{T0/ &}Ycʶ/^@q`FnoY5ԏu0m.rŪ)^Udߙ[-{]P.7$)?vk~\}.	6b߃j'[azs3tgY4鐄p̵vώzq[[,|i'E|zK*yJ	;8Oz5`Xt,!#0-ƣ=ćd(K5*Pުؕ||6wHL{cA3&z54Op{j$d^)@̫#\ס;p"Ff'0Cʤ'`+1!N2̻u%9~mS:?]ɗ`Ki{أgSǉWl$Żo=0KRsG5vKPZ
"־J2L)Ώ؟JA;3,х!s86[$3igs_u3߈T["tr r Q,ԟLG?ڬBEUhbt8x(rMJΝ!mq_Ǥ
6uJ6cH9mٗQg[{!zg
2n"T)<ufyJ=;A.{6ՖHC9k->} eڎ'l/vBd!M1û6k/u[#G gbe[]t#LzB볬x
ś8;ȑ>oK?ӴMė@llz{,d3;8ۖ^,m$\+It
wV=چq~H??qV(+ []qêXe
Yie
_/XVMsM5!=ٓ9&ǸhG&]Dz"Qv(!&s5f7UɼatE,)wߏpEv3/i_UEMu
gRAEK$Vf?E<KQW>sJ	l%Y~zBbIcԢS'$dn}ޓ"-iᤉ)-?hyGnRhsPWq"<C)[L4u5[4g)k"-mJF}PI\@Sk}AW[4Zx^i]mԑOq;Lh;6*T-)QMQ-/N:I6T%0.${V׋``7U;2JRa(}	CѦMf{]zۢ&(KR|'p:fr֟tzY-5Naή0+y!~athN+L8/EhH6'؉ YŊ&?¿pE2@bэ"e5٠@*-D@`v)gՖlDY.jvleՁ/I^tG7|v=-'%U.P,$Sb|3" Z b6̒{WGkNz`I *_m?T_l%T2*0eʪރV
!T<d`9ZIM*pKzpye?hd⊽᫆kjPʞi}sR=*@ѬV"wv]Bl\=QTib]bdm7SNU
;
(S
	<6,o@`yPX
PU8Ц>}_)nL;/3bm(ڨO7vM!;!ՏQYl%
Tؤ).+RjӅ
MVv*DIZ_
6.6F=쩛s{_\o->(TV!F
o_RֽrkZJx;Me
;v(7+KsfP
xҞX|(cj/jbE31<H3V{|90}eP."z㶠 8gwD3=USTt"/|>-Ұz`Gڴ/Tr(瀻]"?ơ!>Ni%58ςI%}R.{l0Tѯ{m|t}γ(ÊVQ).ma_I$UtdОK!25LZ#6{$\Ai72_xY.ǡmi3nUGWE_}1yǶ7m'	M;
F<FK-,fk-s}SZ!j4+	HZ?0f%B>TB!oVC	jvO;:]BlgzV΁5pl?=u<ٚ\-[lA{YMyZit$ .6=9(r1ÌA_+5g^*j䷙sG@-0
N=>|t+s q>fwTB<1>bl3;uHZꜴi; mՂ*iG2<n;rA%rby+lDv1Ao-a,\1¥׭FHMFT!eJX-i\
 t;sxc$P1Kq4%)EA;MƧoW jsNYamP)V
<*QlgDpX9t{"IR_šnC6M5J b0A1B|,m14o%KbE~]? 98H8zNSJ֡}foWgЬW6DjU	_k
F. Aeͧ|9z#lV9?U5aOdDBg]KR_ׯۯ&\=ZMq!&]6ʊ[|>yۚ:x;hA'6	[Pqr;[akH;FXnCg|F+5GO2
">$60.Bd.I~ҭ^5Cd_hgf^
 Ǹ_$uvshr4 zQRA4cí0݉hl.u(Pj/ޜIbSga6rfPnwB'afL/՝K`%$ Ev 
K}%QӋ<"0u/oT<kГ頠x4rd%s}zchKvޕ
t$t<.a3YJAωO#hC]hDeiE$^
e{TZ-yn[Jvj=f"LAN]RNuyq+;[ AO{qc9 z .
,Z#%UGͮK7?Jpsc{FqrX0_J&bF#09H)ް3T;If$vQQΘ-}U/ư7mUAƪqD$[]DowERoRKSLƔ}XAsuNET*+u䗑mw4i^zwl6ujߑ<\=ɞ#$s?قK3_o)@
wZÖco3ω*ڲ ܞmǩ)	].޷),TZNl[cf3dCAȥ٣*9;&V/
Uֆ+--Ufńr(toO!^J{KDN52j3{dwetn"X@t8	KnF+sᓽHF}wջZciE!&=PCGf&<Z9\	Y%K ERQpK+sm8ȉ'Ϭ"klD͕7ghGբ$5=zm5jg3oKV5zjYQX<,OQAbɍžwP4'yϰAĠXdњ  )Te
3&C({mT!+b@LxP*S`u P1T-frdM49ջ
^^װ:9Yi5	E8ڤ|
ܪi4{2{#v3#@T!X$oVTnTB#.Ml9RoIM'[*\KIhbB!"vG.	_n;{ʀѴ_iUz\C.~ ?E_es4[9H=(P7Z~=qǹ>.ln(n{'rr(?-
!s$QWn|"
0ޗ4;ޞ5JGY2hHQMb si8:U~eY6EVzylγNiHw/?@Q9J殠g2Ues	hQ2kCဍ_LٯĆvJ6SI<Qoc(_98
a	0Jb"C<$a.ዷ%z\	n#S.xyiNExvA/{LW<7tlb:
CAp\
>^W gMM 4K3i凍My:
eѤԥ@A$AU-.UksG`j~PC4ny
'j=8,nzw! ud-wl SD3,̡lB
0C{4BYM[9ّhkڅwR4MrK .x?Y%M<k~r%?֤\K~ZN.NytV2p5XSښI|n:~m:kJy4a[)Qb;/IRmG|52G"vcݡ>wLq 4Lȍ6t5=#mv
'uG[HU?K^4Z$DE+m>[A	[;4,
iGXY\7ZD,/`j"i}mȷi7TM{_-Nܤ80T gAtxAD\Tah_NW0-|MvP8]/|Wd
5,S<iGx[
HOb4`[֟U9%D]ɮ]ChWd*RDkڟU{΀Rf.z/'&ƌgs̒ FDuly̯BM¶x\k~3gU#5xp\}
a17#-f)l&ǦvMSFco'uS
\jݣgnLbUUmR͢UQQԂyFР[V-7O,[⺆*6'ixynu}%UAKMf5ikOФ翟wT샣&r6UXKtC5(x"q
xFˠMmxo)pr&L?"T&\gqCE},IXlNSxji3LiӌN+7icŎ8vqDxjHQs>r~$E9U͌
:#Oh~@0
Nzׇk(Z2xz~,30Uq'Z~e$@~Vlݬ['tS&nb_ k  [g7cߛ*gof\|KL,վ&UY^,˥cApЗBW~*Â vG?܊0g^5oq#a%7#)2}{uk`SlZR;T9]|>Jx1rvAj,ƀ6"?dm}6шx
UGF<B4|Tי,^(oRD\+HyyƻVmx3x58+JfN};+=$!쓀5O`Kb{`-+;\DgcIT({(|љDƊ 7ѫ1]s<:_,0,9YHkӴIL{N[NX޶:fQ#i $vQzTʼB?l,4jqvN<h$e\d}@xd[49epLԂ:7Y6dkW|vlXtP:/,Y5ClePR&ڂB}ae6- 63nEz1_P\@{:[qK	{o,"lEE'qHzrzx
gcMnX+5|KGt ܑjhm3V䤒0M.Q/ŝlY/{լRJ6i,=gHsRiD%id5%k)&gxt7:rtHy&ަn: "qk=J%EMW5}#:26g]v 6!c"|gg!H@
#0CUW)ZGQN t"[Fkn-ŷ^W7'x>s{COGUMaqKESһӔd]Pщ'kjx4넴'.ǮMΆO_TީTr |+؃{ee+3AV<IIk2ZOQ#k7ݺr^gzK8|iU:jz41#Dv#5wg{	ܞ>$5ءw*,P/tgQ@Ck>s4;WJJ=:r5Y[TW\ZwE;ɾPtK[(Գ0C~״t2I߲JQJ6SkByx|n؅(#;JLGa5cEuíWf2<i[(ȅï4OlT퍭Gʾ@YM"X
h29'WG@y+~N2D'(gqt4`N҄n$LɳM~!fY'9o
*Ax9
q^i-21Ta!cЖح0Nʻ[^Xp|'V]ҕd'oSrvߨ{Yt5$IOZ_vb77ơxj_z/>'.i ]ng8="{lsDR͔@
'
sXQ*"<u	Q GZX}c@ne$t5s<8nyseZ!sDځ&}Ƴ#>R^Q{Ix>rkN,ehЇ;Ԭ.nv<??0)=jq^0

طk|aBE8H>}S ?4@ۆm̱+x{υm?T=0nc(60Sۑ2.d3FCUWV-KidХ@XNc~&whx;bTV@bN6>A yW%iV$*Qŷؕg\[ϟUj,YZ>?c!	˱XƑ'pק\t^vńp:'.?/@1BT:Uk״?ϗJT|t+1>
ج|㼵2t&~vؘ%X1msu*Sa;qܖguX*vsm@UVlBUrIZKz3OD:@-7n'ӎ\]_Ct<M̒6
B%VlLɣe|)U>Kυ:.:*UHOzgveskȮը$J415?BMGFh;|>q|\N5S,*~v*p4'z:<EA4T}Z[SGMK#)ȚDZP
]
7pQ{{MPqi[%>:EhEXaI迭˸!6&Li=C;Npw7>f0oVL۫lbζl}16I(o$ݩb5jh~vXPeW+!
Ϋ7PȮ'Zjy1tڎN $4ivh
f2jGq>_a:uB۴)?~R S}٧If=꛵8+>ot\p+@׆ \#L#`u'A-];ѷiv~)؅hm38QdFRN@,t|,rZoh=Wqۅh\쀜FżQ?q3
txsLz(IeQaʶfw-7W&@hUoB/pMt6jJM%!e.Z2NNs<L9n|	^A	-{;=z|ʚb\G 6XܸSI#7$y4p䋭qVQ]1{/* Off\ù[p\Rďk&s˞84!wrK[Z_?,+' Ƈ8C%:>$_m@_`cìAHM]Z
TgC8C-5炦%RaY
ՒJIuk ;>~hUϤ@|zd *\*
pՇ0p^==kF$!KXδ&yg6ǈNvq=5lwƴx͒#h*(A4pV#k׭Ze*|x,zM&ңwҙNyL-e(7ʯ;-𲸊Qlu*\mw6_ƝGBQy!*#V-3
j=o6N8њ@XǗ9-.L~E܊Z&H8}DtHl-GԂI\zhMψO .}$BVBI+轏:g.ss8v"75RC0,gOmԟ<g %VM;ًg_кw_ŇU7*R?nR^N	DX~!=LZs=L|
aqsIfJnV]ruW*UIWԊPK~	@QX>
zZ^
cOuf"sd M7_6<;=8iK',%GcE_WQG}8=Fչ͸~A͓wM`:̅l
@L.{$PlyuAuWLeRe
ɠcluj}a	AcH
%ʾL<+@A'7jcA.'Y ŕ{~wVIֱ:/97jl_Ts	*)/=wM!Ӂ\DR_Bm'x-0O_rsFx Ǘ=z]&f[)KBߗvޡ#O'׸Kb_@Vb|9z/e|X쎱R=ZkūRlb}mBU_(SnOg`\@)tݻs;*Iz>ʎ_	\17ո`uWC9	r%<4;.ԣu6[Sr4f Mup&Q
̞KbGԡ\,([f5`z;}8	2,gU}K%;5(@@wޝӿY'z t:aόE\F螻c:Uq*3t#/lw[`oaŠ r+hA-iWCwHFX6" 	mO|e[+v70֎*7''sʿΜ%)@8$$q!|11m3/<	A4Sy=: &	?N!Ջ:jP}%-nA!).E|;Cq>uR]ch\ߊ}+%mm/(*a_ ؘ
puK;K@GqJ7Ag#+
'ǵCMAm/T_o'M7vc[)b,kR܋܇7<(#98XQ5ij'ܣ/Ӭ}%&JE$_Iɇ-B+Ux5s 	Bc|~{951Ul{doF\A5(&F_2Eu>qUzWm"y./q\w2)
fQp:qyeQĞ֏uR| L;TpჅ4>;?gL~m T8M$mP:GPri``wY
K,"~]h/qh ? 	@ոXrd9)SAk6\2&;ZQ KQ˧&sOsQXuDx~
:eC^{	2DAx#LDwJa4Z(:N<T8/A/}8wb\s<~kyM]z	=h怮h[Y	_b#cT,.RGˆCZI&S5R\Y/4B)<J~'K+M;[V:`aUʅZ8ۚG<vyUËHE]!CJ_D=9еR^dghXڸ`<45,ELY{|@5+K:vTt
/Øt犏tcڧ"U3:x+"5k
iqѰi3_FAs@?K e$6^Vfb,[tzɫDGp@Ưd2[~lv;
܍~v&o;NMidı˕%k`֡ L׎I4@Z%cL>c~X9WW:ތPwkD F
7<h `Bོ$)?Si]Z+2_֐vJt#\Z(y,.
b:|pzNZ}4-*WrNJ]@vU.g97|ж^I,v;6N`<H6sa@9)ZfscZ;
Q#. X95׈UW#ytkhqL	jk*N c kV/l8>$vXTo9~i=s&ҋZhBU:G3p.oNޢeh=Dc<ӗC:k1;~#!fFdH!V rmDؗBk2'vcUGqaMf`@'k%*HU-! |VBD
j4=O:){|ٰ, h
:e
:&LAdqXJ8yED}0aA53]a0 ,>ő;=>jvy5tQC3ErܝԮyA
{jx@T\Șʻ*tA`s6vWTX\ϺBu _,0C'#DțaVv6*@=S;AI,	`^eTL	-J8䱿<υFz±e( P9 ~zBj9Pa^(4nq.BBW6RV1PtNd}qdKqrmLw!L1'ĽUdRQe#	ZsmG +kӋ'F375L6D$ f<}MD
}s!WT \DeNrd>;Wvjip4Ș3yŋi7nPy%הTn}*9֣;^f,HIf ЄUKZH|}Ұg޻]7܍PL+MFDn(b^T禮Y9PgSi'$Hq04 __hCG5ƈ8P$]QrDK `LPʞ-OmaK͕5[jĤy^<5YsVE  f\FO&h1
+=˯`;y];Jśc'VKZWYi{7#S|n?_pW""W-/C\!C l6ھ. ^vPШ^1q{hQ*,!I_1"}G9wDĥ\بn(]cE9 ]s]L$S\!>`A{τUԿ_
e?(iZWE8m;N[,S'ω\rTMI
4gY$EMŏicɅxz>ګG/<Ѐg[/ps(@53͗=kjz4YVC 8x<7#@TlY3x9RWXZ3Jt,cc-^g*p9 S.?WFh4*bÄRj!{\lFiojΔ^ApVo.GdtֵyN1}畖0ʉWcȹ߹B?zrGXE=*~#\XDhY/H𤘚pixi=9e?V>CZ1wTD{/$Rނ5{@1
ݣ0MGXN~aPv{@bAųvX)@J@tl`ɧ?W7u$uXt6:e7\S_aZtSk[p>q`Fg/k=@V鮘)Rjem͏O-ߩs0q' 0MlYYNWıQ@5EIdz@=N>ӃAȖLO|W
xjS.`)&¬Ӷ:c}f!{_7U<'kR߷\q_|bU\%Ǔ
{%PzQ9ߍoavqpQiXIkbXlEX7E 4^3Eus{cܻuƠ	/GvX8CԮ MYW^
$-|YIɭAYtK+:{\-*N'mҭc
VNC6{Pv	3%i(g"cyHy;׮D9m$tRa#Rs~MV-_P_OoH0.З/9}	H'؎Pi"+H)QQplsq?'"J9қp{"#6b	cB&wpvAI#iԵ0bDhI-g.v',VJ[-3LD,0MON[qM9ZА?	cp
@<!ze1-~\u$wZab|SW])?41m/-({#gcXWd. S{(.nEq,F!'[q!܁:5TphXgr)5ۯU"eϴ7E<&m<e{ LO<|u*Zc+5Z 6%	&+9aՖBޙ`i=mBK-(TKy
;7`M@aؘ:(&sZXݫynA(
q=CØ*r']1ĚG^4gi3Ey}KEwA8r6W	 ׫Ȁs[K 9Uwe_L?:A)MiS:]1&/v'kpMO@C,5y_?|e/)k	UK)d9Ţ7:`.-igZxtk}S;Wkq+?J>Dg%3M.'ppXfuɧZʤ|DwӑFa_Lˁ_[OWyGk,
Mqm/vW'C{B$COIz!ߒZJ&vݺɈ"	/MOpgקC*9*b0=WFs5;m"l(ыc+ S̡$,rU>^91̧
>_{| o؊~S-1eMLoQV@8trRq:ZX7qn
c!wYV"CԢ"Xf<rPZH9g[=X>r6L),"<kf*S&jQd`^Hcq1T j*EAN\Uُز]((1vx
|\	Pm$
cP:A%_Mr6vjhH5* Sy {$=O,h"3r>oK+YվB$Yz3Iq>'V}P3TVd$_iXj*Hgi@ډvWPAI^\%z	IB9GeuۈBe_y|3D8248#}8uM,dd(6n,D%9(Z@7|SvHǦ2,
ŐGk/`W3{G#s+i]_ƞ3[6(ɠd7GWûI,k*hR 
@Pvg?#rtѷ44yi :/93?_wI6N"ʙR@J<Pc1e.頗Ү@I)bF}`Քp_:IGߗ"GtgŃL{,6Nl\8w^r]s-kbJ9Q^| OR0Cң%:(mm
BUl5QW^]3R3pNzo-%)ۋxz)U.th?HL0
eS+LR sBMxM״`=zq-s#3pԕ.*Xv#&""0IYf.~W0?
>.F6vC"|E[~FBҋKOČ))^#jD65[F$$f D9a9vTcf%BUkt(8zt|^+PB
f)A64FE{QM[Xd[z(t\B|UHf$dJ݋9u75E]|%mc鹔4IP<`Ag0 X>5Hj^4~|\dYN	QּSDF/yk_7>h(gjL.y}.xtpW,L[^Yum-c4;c;W_R4 '4y%)ԧ^1
%4|TZm< ^u|*;}j;@pG+#IG4\ȥvc)+>w7]>E{.GT⺲=Vddr@aUj,2@s)CR,hnj	2NRb喡Zk=B+NfPx݊懵f\2^9%v:!x0al f\yZp&'*F-n8#zϛ,AtҒѱ<v^א^V]K_ Q L	#"R`DǴujdJh<F{}	I
n?V QP*ᘎcqyЪEyMKhG|[9MOƷy]Zm:$SDh7*Wo!Pu'*X}7˕7p?"24BC Tc^{rXwU95uȸ>:b'jx{=nΈ{lk~o]O*IWG&~Wv	T1IYRJ%?{B
8Nydwpwۖ>	VDCxfY8t%P	Y/%9jЋ),fϥ0kKel@LE&rz?4ݬ!8{QCg>9߻9Xm޷<l+Kf&
&G+yIR1lh. (qB+œW[ŝVAd^S-%gJj=,W
Y~yX,2G9Ktr1CUKZ9GVʘ">I/D=4Zlm^R8x-K2Z0HU[2Ir?+_	XRr!k6%n"ӈA}c[LTwߪh"/$fm} sTC_;jwPdw#C'Qp&N8$Db2 3IMؠCaJ?8JU`~ 5ӡ ekw}GђiVn1hN?Q6MM@ݾ	|y`-_0{/
Rgx$|w^٪zŞ;&ZA6H<?xNurG1 hO{=.kl
ƖsNnI;g-b۵aq#xE8AW۝Ƈ=1SP{YGH-?ӫIYNnHt6>HM_pF
+| Zj{)pO+:~p ׄ %q.ѼǞD{!ז6ռ^D+WѦY:jŝlKO(vl=>ٙ_-opy:>BtqoRb;Hę_9f_3Щ1BNp/3.4J&viA_'$zlVit2ƲdJ$*̑
3zډn\8p
'{mz"͑WִU%8:O(ˇϰ(%#d3i6QDN<S<9NѾ0q7EV|%U1\C(nQ?I(:qU00$ǻ9Q1S"R q6@D;ELD&򅏸"uȈly!3ܳ	-4.""c4e eu~2^sQez٫(zt[,pH	(p%ԗEmsl@0Nɘi4H	{I鞷V	ՖD`64.qlD',駭 gf|(q|F%zc)T_kj)	ª/?;j55Q'a+>t>;ݧU* 2d ᯎ?Ҷ5#Kl#]CGL3<PjmhEvdLHxPbb{xĔX:c]}mJ6U5t
Ƶo̠!W0|H',JY.%,ld}f74 ČBץRi!#JJqHm7ǉ#N%ߔcb<r,03sOǎpF;AX/$Q,1ܣʐ]7wC|WqmkOaP9AT?:Ӈh;@דY=pY+?a'+uiWG6×rn#ӻ220O
h&w.n/]5Tf@Z͓|'Xxfj'[aTEBŔ#ȊN4B4͢3BVdCchBkR[@tYv$:/P7N91JX)R韲.T2,&	Гxƙ0M]~H4ce0;
gN;gPcԀmʶޥO5I˿hZXiDBs`Wxoc3&[+
R%eݤڹ\񴥁2^74X'dmedh ١&HI^9 GI/JӈMf
)^|*QYr/ & +ن/%hP?SgJ5uWVSMoYNmFκi!$ke)vqw_+z2I 	zj6
ݑ@%o"x"HmP󔾭Q)Kv?
:D3*1l28vX&K.#'$".낁~HaC*	"r1
=T;7JFsKLm9@~aqI1F2y!v훴Q#oe;Yzf޶sY*Zo25涧ǖ=aǹ)
UD Id:imTLTAdӾrtٸct=]'vV _`{ۑBbn	#	h]ȇez,"MMf܅T7m@H⺌GKcg41xA}]Ahv2!Mj$82fx2/	{O/];fuY"riZ"١fh.ExuDHPuzE;MKuѡ(OOEkfƍҴϞ;
W flܲb
:
Xnq$4IZSc K@n##ba?%/$~+ҜVe
{\AWcV>P9Į\o߉(n{	X9l	ﲦ,!aE^A0#
KJu$+IzEK
Rb=VYNa`U71kλV/aoV~i+S:礵Lc#yB~'L#3E9<{ =~#cuD\ϼCS{pI4W~n;
7p_VջOmFAsiFLsL-17)zӻ.(U9g\I)D@|9eKni}]P=li^	"G(d؉Q`
.rVn,N.gJݥ!+4kӾD<4Ob-
r
 <x46,"<s*pxZ~}0*Qu1S'Ks/*KqQTuD\[5^'bM:[׷2*ƽvU&Ej55 W`7ֽ
?56v+zJ7+,ᡐ`1]Unj yQ^&L@ފ@tֹN<XڀG#'U֠EP4Bَh=x0o>vWulA/*Q|c=3Hܩl0<4Na"V^~~DH:淟Gp}b|JEl}
E
k9P۸[`c"60Qt)Ա1Ks^*D}B &Ҥ#Ǧ+s{Xf&{Zuَ$Q(:Dn{9YvG2vG	G%[=%%JPF""2Dn).
qPF{;Ⱥw';Sd=UpGjE}ޓkmu</8
ŜaJ[2Cٖ8z[PU@|Ts|V##{U7e$;*Kij%}ܝjVY-O'-dB(A5^'c<j}*X"tW
	"R#<:(^N܏A(Q6T#PtHǣ_>[ޯ2~f{ϼRrv½4RTAa5u<zr
?oyg8v#ڳVVK-v?&{,YGqm8Q[zBrÙΫe8N wRQy%P?O
eBޠNC	,CgW(dֻW1kOj1!Ck'ǸO»uBV 	Tv"3\<,Q46W#xgq756"jF;-cwLA}2yӕ恣2Y	PsW7
q]фX>g]o	MH
Uq/6o@%pߓJ-66Dֽ<~IB>.֢$Qf6. ۦRT-U.=xZGd\iL
s|J%e6uノg~Ly	ӛi4rmduܭ6)Uʖ}_T^P73Z]q귷(5*hT0a֧"0)h)䐙vEv[eiطm`H+>j?e	) FHxYKeJ6%htڞ	
גY0wÀ-Ga`&AP]gdӋܴ'J^XzG*T|^8i"/JԻ]Dg.CAbyN+VSlGzIZΫDc05{g qM!%,	d!pBMXN lj4`.kfԳ[J [T) +M?p>Nm5>&}eVGbqבgljHd5|ĭc$FhrA!NMk8ȁA?\bqk_?^6m` ]oJAs,;@
`M",Hr<LA $^in7c84PCx(toFKn?OMyD>r?w#Jf@'\n0\ym0oܡ)?M{5SUpQLKdg5$"CMZvz>R;~^_6L+yvt8)3ξC&YD\OD/zKb?6ɟQ-KBq7 84qѧYGRb9kqZ&K
Yh7?f%L:Ϛ.C?k0?Hgk(BdTd=0nCt&Ǧ51*X 4E^BۓO\z[1==6L]yn%Qsn-?(ՁGY`s+;S
}r4ܚ=VvŸg"Gc*ql
#O.4k:_WVjI$-HVAPx<`i$߾oq#DU5f.?ov02KTӒ;/+24&qeh+;_N`O"qT \pq"c'5K-NZ}PIEJgayϩ
UNlJDM^UTXpǞuf%+kg:սL	@Άuv?gΎr|)247Ke<,b;s$[A̛c:]9*}!]A
l)e Ħ6[k	ޅTg{SSĵ0
r6X
EhQMjyhs2fEkOni!Rd|B\'O$pd
Z1Q	IDD .?	c,W_	Y6Ɩd/0t[m@apngƈxj	'"*:
DmW lꧽ/jDԽNr
mȅ2ͥ)pcPNEVIY7
4 4;>r}|K\dQdok'7W>X,/Afؼϻ@հSk|W -ɍS[sm<$DI
BxWf&g)x_ތm8扣[]TҚ?AytC"A)&DM!̺x}+ѼxMfY̑66u8p3؀D۶RlKӿv+gxtT^(>V}a./ r:żJ,zOGGY<s/ N>Q)7<VOÐ󠂓ç4eYիv\kc(,&jϴpx|b)4Lk5H+='RKhn=P1JճΆ}0)\hȦtϬ?I%Ue0k	U&Ҽ3Hc}"?&ryi+e3̓yI!K];뤋͐4<&nIE-0VyXNf!'{uī
#`0v$^g&>d}$
Z<
y5ؚ¾LWy21*pՠ1\KY:<zHp
t&|#nGƍXHL'G8ȵnsWΗНV!ȞP01EgMHͫ0P7NGELyO1˯82,3D7J9iMs靇V@cTx>Qk4v"q(9H
~$t7ٯOY(8Sjb$Iu29FpHHHÍ">{#ݳ AwE	]!dls5k[ź0MS{<^N[OsV1/.ģU2V, vB1p
!B=͌JmUV
rjnGpVOH$\uykSf  OO߀ORTx~P)n$&!»* !ƨP%)Jv,+Qz`L2FVhK$9lRd;0~XzRz ˙oD70E$QM/xS'}jkYlGmm$p.eHK7 (խs'_pE7ǳv ~Z-%_P@-Sلs^śҒaoNi,QIZfq-.zCxwgG(#(LJhL5vmSXS#:&Ovչt۸HF=:ع n	j37&ɎEk L;\S*IJQbʩB^g̯]K*S4Wۉꚻ?ipx87w4P_gᣛԏ,IP,X(ƪ;$Cy&*(ch6 eeu` ;ӺƌL:A\>L:(-uvOPPP^r!ħSƅh?xvg,2 ^B
G1bC*E
q$F;.:A6U~p[v{\d_#SnWLFN039K0jrB3(]$v.J	;=)طvkĞwh>&,EDY"gב"-gCWt{z	=7UNVqa2v**8<{Wl
4Z
H
2
Gg.vр8-ЖPak&$}w#myW	4z6|>q+{CsMرֽ> b{h7*S,<6l_?.n
X, 3avo!Ҩ޳
MF
:4ffn
DoV=lY"y V Uj=ՕW*,e=|zԟJU%'
8
nj]ʆKHrjp=Tmh76d36D)3`hOpTlΚ"o$:}!9rK;}xD\RN5 (G|s=;3j}9l}MH<*R21l`f`
5=/bҐ[+#? _
#:l?$^M>gr@oΌiܒ=ٺeH^ ̽9nY?=dTω&~68fja ꗈ>bv|-$n+X9AAlqd.(r}Ԋjui=#*ʌVs}u-X_TI5b^kKւE\<p1ZvvyY TF-o{DmلdYG捺iS-$|`]L
[O!?c9_8ޑF@vsEBQ1 U82*ډղ2vdNZnLtc6E FaP?aZk@Sr=L)Nfa:G..};N|pH'wCci~ 2zm(9awm,JEz	=K]NgrIdϜ[䰵gw۽;qAO-2ᣆ_-<#Jq(Z>0v%LYXf?h6QedqtبdaR]7;dBd̮Vဠ
;>M5潆НbA:Cwz¯)Se<38c.f/K<M (D<c⪳J+GwSǑ5ӫXzVH\?~z%$	Lu}_.zW]΂sQ5XMDv>zuJ6%-_rY+ضOM%a(@rP!:\biN[эj	TReo.2fD
yBFk`t󉟪n<a():7R|.v<N2f1GFYwрALhFd؞PARa=qFԢ-m	#T/)?<]A`Hp`V(M'T0. J8 퓲R -FpʌvtKP?!wx-RF9{OR^"2wκG4J@JrgNmQ/xp@rO^z$4.4vz{(LJؙk*G1r;7VG$1(\~<ȶ$T&_r<?+6Rޝ|,<K{E2[Z~Ur r&ld|'Ar5rBɸ4d>	+T 4pKw#)nrK^d2MQf۱ oo	a2\eWс]j$V	jO>on릆CL-.1a;)Ld_
5j6w/dI@VN/$q-9v?G
:5&bwRCH7a0


@_s?ټ,;fFX=adz"M7!3Q0`,Tۦ)3mP	r2Slm&H~=LGon*F`'iqEZƊIׯeFAJC6Exuc&}
wTSJ	z7}IKJ~*Wp4@5|HHj#iJLD:R׹/*be.H E*b%UڴmEe%`3VOͿ5Jώ-䳮:pfz^V`CÌv3ށ}`ZyxVnC"BaUUkZrĸbv|o<]@Yi='\־rlaǃGP7SxVÃFRsz- Gh	F(<=
\k|Y[xǚH* _ب׃V-pmum۶m۶mum۶uǸf}3^
XrlRS^tī®;1F4z^Eqf E/T4HNCdm5,F=9zc3$
f9c ,`:gU"´ڦ.|JRc!k(_]3i]ɬj#Og!
hB%w!7Qo(W uFSIeg"@~}Y2B;el)4)8~;:|/UQf:eTCwn3?ܳMye+4n8v3K;׳8;K~I#Z*FK5##FT@JFՓ*=UpaL%X#1 CH~,|-
IW"ґ$COgѵˠ;.Ƕ1O
6L!Yy=[Q1ȻgԯYiH4*vB
E]	cgYplZ5#!c15@\qv}5k/xϙTCey}QC=LOt.z?^8]ܲsG9A׎æu'VX:Y!tJm(TDypht}L}!79~LRNNrig Պ'`|0n@1 l
Z:.}83PxR1kx~lkb+-ln{eHD]ςC3YO	uv1/
Ƿ8\f}YCȕ%F>	ѓ_'omݥP* OqN~N/7q+W"wLtٽ*-S;*y!
u"^fT7V0:%9,]j`R'E*~뀤ћ"8 eƆ殹_um
 `AoƘU93w4IǶ+]@>+?Ѫh1R
.>q-_f;d>5.f'P'%}OodzJɣßcX(/	z1v?,׍xzt:۔C8wi.Y&
Roېw!GsH
2Ti+I5]U@3qgEL:.ڶdѐ/A/s їALD?h* ژAmj!=(ѐ^ݾh?23ᝐi"a2xK$|04!M6G3^

>H:YYCUq&hfTN=̅;&9q0=bq;q8D%S0Pe<:&:hIw*z

qXhTlA)+L.D14JUu(dnUz?43aHO9XnԃM]רMأ4V0
2-<	fǄE\}x hAqU=Y!ޡ@:QCuFYD)M!Zm$&.]Pqu@"uKӮI-Tb/sꧽ97*eH}
#
9A.#*Mw׿AEO[~.PKE'F- MX+"8]:IQnVdG1<;ă 0
Zz ([8+A@
n}#QV!<+<P62١sL灋R5CY
^w6?!N̂ v,v ISsÌS!QL0zޗvPRgqFNԬkw^Y3I)VdoQ;9- 3U@۪Mۓ@wkPUޮՂd?BRJm"mK$T<,hG臯o:l
K^g&J,lhtc.9*M}'*qap$H5}u0%)1SӶc8F_йǷi/>8?ЇA.;.&6:f`LKw]KtY,!/;=*YwzSB_F6
$8G1.3
WET(˥A(&φjq%oV^ׁvᕘs!RCKA<@0	[%cD6Io ̲"$q9+'R4.
~]Ș>x͍$f-OnQUWfwpW$^UV|<z7r(J!$Ր8,}Oj0ϯrp}6Cuz2RiKXdvvDW>`.q(Xמ\9lc{ܷǿccsYÊ2|jCZx[o>Dd53p^8Si4{k7y.hzD (6]_$jᢣ|{fVuȂy~@"E&K1;5{j/=JKbF偒+%'SF۵	o.00&tEMJ!_yv+=̃+0@W]ZQj9K-l>V6Knoc(Q.&t4*mgJ)9*-4·F5)*|"eE:ewV*BYVXkx޺bZgsB9x}=Xz]oa!E̾*kԧ=F>Bs@	}ĢZyR<Wi7,"z+:[chgy#h1^!WEY{5ԼA=>[2ϔ3,tw!eUح<E˦5a6+_Lw$\Ҥ:a#v.'HU5c$^@psxztLMbq>\&^@ͤz1%2A&?)/n%.׍366)y_Tͱ1 /^ϻu	G+t\K%gW2)0$z&03z\p{κ,sXokrNzMmsEX2zƸH/GJxO78Պa61:\3vLX$]?Xdr]y}Uwwҋ0GJ9=K7d.c>0DyNH{	[$V`G>s=T@zOOQ;#$qzJ}uXgl$"^@	f/;%9{ >6
N+<X[az_q%ذybhթ
bב)b!b*#Ʈ.:NW()';dF>
nAhvuO.>9J2Eo6lgÞJ5K"rf윲3ݲg ᳣˪)w;R2gf'0.2Wt$)}LՑ"7ܫĥVYT:1|kx/vъP`UdNzCź9ȜPT3"9:*1!Һ@
=
eOZTֻ$o>h5VZpfgިa:>	%{yhP7*wDs˲;.
D'f"^nd
5-,hlm!2<TNL*sҧ)7!;boXPvA<^P-ʭY"lr9r KV`Ǣ5b@%mYkutv] m>{.@h\4O
|ԞjoqgxM1ϼ-rX^$ӄ#KdW:S|kj"ֹUXB1M$~PO9mĞ^OX*Чf1Y`]#WZ'*Hx[S3}-JȻY>IF+b
͢Sr
Ad2UpZTLUQx2y[jH&Kqkn_pHN`3 ]uU
bʫLTUiL#D+RZ%SYPl⥜soGg-&l<O(7en$JCʅDI0<@Sb}L6|SͲtO~]ւ "<ڀ=L/=}YL ƿ(7t;6۟;SZ:;m#Ew9/1H<uatʭYOOn7 B:Ґ!fd0B5q Ծn*I$SA<"ϙޜ*qnǢ@:F{KaB=;&9q֐~%{Lo܋;u./HsX GxK|%g5Mz8N'9Zrk0w+D27FRn eԴKjL5J׵
-3%@;
=~=7MYdo~߈0LJҡڒ
D(
H.yjK7%]ɪbJ|^0r=l;
Ӗ2US:Tpp$;OLQB,Woh]nx>
U{U.9Bq{G	Xdџk26 U*\b
<Y5>CŮWxgB-v+Yp{Ř/wXu*7
8bc^SJ|CeQ;a
<~)`z7ܱa0i\/`"fO/0:Lv6z9LE[ۋ,hݠ:,
,k(}D$I/t̮8l;GӅײIIG՘lu,{*(ߊMPHacS(~% 
n
k1޾fZ26ऒV3Y!PHe'A2dcE?d!{z`)^	 1*mxQReJITNWv׀Snq:aXb%нl? P'pU;y`5HE"2e|W2yh9(yD0ޝFpgRpD|N&Z':MDmYTEd7.'Mt<fZwo_	9ϣ8A _ߪ8$L͹V`{*	CwЦN~%ck Ɏx4#k#&uozϒt	Vz?(s2[Iʜ왠LWwmy}wd5IH[/ME$wΉΑ1ǔtQRAx}A:k0I9&~w/ȝ\Prd*F4!O
{>*%/6Iz2w#~{acvQO@:M:wfMi_Xbuv9IfCg7N԰(N!>y9=wV]f+Ɇ"MNYFǸSwk'!I
!%ڴ(s|,ޥQMkw{3;"TAJ(3n.VbQDG۝bԇjm&l>;ߜ$\f?<HJ?C0C>McR@1$Bd7|}l9͹ޓlV\JO[cV5{š}Tb th6_ٹ:NP٪	3;7a8A|^},+AM>ծ+-lvռȼ
VWA5!_bQ%
6:.]$QMÙi.ҜdoTuyTCR70w(+>)LlKt'U
"wgKD=aAB7@_bu
\)©ix
ǹLw}|E'{2MvRQ]W+ա98Ri6tB{%1To#}a]F7W%bvF,4F
eCDf`^#-K::#7uF<ڎdłx^+ftQ@9P}r.T=BA
g9C_SQP.,_ RFO0B@Pɸ[TgK7`W#	smi"4Al..(.7xw'BKDI;çUorᷫ<I
u'<biVNEbQρSUO,%mXwC|AWɣxn)ֳOSҾ
uMknS2kϩ-b	zLN]Gߖ 	=nB>?f wLcdßK(s@4y3fH!7ku߾	Zqf_WɌQp4@-ٍ+.kkQ_;xhAȹe,=̓)Ō׻ZHO0)֖da/bJܿKbQ>a
KZ%].fMۈ`ROgqǐmv%	\SO+^h`ODɮsy'(ЯsXG\aQd^w^ʚ*P$R׋}\ha+Sxbv{ũFTLM>{ZB#RV8_#"VĆXglc5a3]z+p-.2dΠa>@ Tj5x:;	uU^ǯچ9N6>0nqU+{TTR$&Y	wum'U	T~-ۚbs1FGz<kC31_v]{AmsI`B~a
6@Y`~^R4i4b[*zMBGܕgRZmΆI1L&zD2)8H5X8>>:۟
}I(r}mwTfFɋ+x(JsbCmƗ~&qsq)NF9ӑg^;"!s|0fE8HV_v07Yy
nË&g,s X"&uRzfz8v Q	ufc#KKVh5|FT~`)6d\Xeto,oa:,:"7Seؽ>bslVX ,%VќD/2pa1D*#dx*+)LvFu>J'U?V͒hms&RcyǺ<d8/
ԻAԯgv	q)J5TI W6&=MsO
ǾhHm.(z8|<ovӒۓnZQ)|bFoKl}yP[259x߭`:<2b}EfF5H=}~SCoT94=ҥWr}'.a
o(eWQkHn/+U
mY'&%`Q5
E0;
k{P22QT9p[cJJl~`aAqehPHs+Qw;K.nRWش2:
i~sއebc'gOgpkٲG5 |`ioizsx ;LDjz@&=~̩ c<8!-aj,'w&UfCn5쯑J7p9i.	֬xj4BbUՌ0>ԛoOk</COU)8G@}~mEX
~UCX%VO\FaY'Ou}J})2ǈ7BDٴAa\%ޘ61zGVՅrG7Єo?0~"x_?2@A5f*&nI
6Vݩ^\Ɇ:>V+}a:TpHQ潰9A)0*n2_	`MosCT8^)-J:	_0VTSrvȫMI<~Sh6ZQҊP>qVݦIcb<]ML.7
Ę:8ƕ"8K
zQׁM0d CtL(լai]duCά\ #OG$%Ƚe[@AR	{ᚯO"X\i'	t)5ˮ|˚WBp*v[0#jըWkuec,|}?KQ @Es:]i,^Z EKy{7.Oya7E.
Ȅa_-f5

1.#DFxMqsoGU+sj ,\ /3)dF+GJMiv9Mޠ!dECG;+<̆o͏B83X91x&r?{Qs9`'e~㹎SnLdʂ<m]_ZGXj%uT~bj@bǃb̙jpݘHq:gA[\ie<=8sIE'vUA䌌R() }ߎ%}says2AkTK 'dX+*=eTmq[?OD/:A,RЌ Mp6FT|~nUϏF[6S#˾`dUIcvn(ty=3I2+X_m^{a
Ö:n<I6ʊ=@Ç*"UI`or+fG=TqhxY ,5-{	6*mѸd!|8A'6WQ[Z2$+ݔ>ے0lEv4K+XjQH
(KG|4m

1F]:F|-j,ad/q1m¾aPXX1ka<>$X)_A#<ЖK{hMi]O{{mmRt@+:#MLa]l
P|Y
gq.+μiPJ.8vKmdJdc(=*Cl6XFgyk dqKv:65~?U^mzl@Q?`֜ekp]ҜE2'7b{Cz
USө-i y7ʾIĎ'!75}X0kG](x_ƶJ~m5Jhz]|qA"U>_rk̜/]2VHZME$5azĲQ ԐU!DZ(= SCp'|
)75xɠ^b
Gq;RG&𒕄6̆an{" q'tua .3,I&'
|Ji~wc<8!+k8Fk=mA'k
@a

";Q)3N̠a4&GL;Pɸѓ7b_"#zsb$_OaD%ǡG ^3n
UD1ꩻ7SD"wc&MiP'Q+$\E\wS=T8@>t{"zo'tʺ%,fT<	>fT5v?F/3aR#͐,OĬ. n&s}.s`<
"HNmeDҴjahq.)e-!`Oa%c:>dgw/NdB/n@>[	9	důFO [bev"9h%?@}xK x0 7 	YarvB%y&'qD9Pt޸;.yu	ǋMh8tg²KZe1hg2NBZ>1*Y^y̻]F%8񓈒{{qkS2+ni}<iZ]ǣ \5cmLW) '9Ϗʠٲ'壭^3czf:Oh`^<Y״=Q>fbzəLvlu*t(W
HbJ,o&#@[r
.3BhSWqf
XvnT	#;kn~]tޖ4 ZCcPIx"S&zؔ<%:}3|=Qŗ=<IT+m3Xvakg\olNڮP1鑨\<!i]0i/`),^-M@a,>}	k2ɋ1~g	Ӄf:jh#ieN7Xt_:Fo<OvmRNWy$JHd٪ *O5sbNFU~aih*kHXDG	/i& 8lYd
3uv2F&}S%)vCO#M[Vn
Z~6?PK ֛n | PK
      A             $   org/bouncycastle/pqc/crypto/rainbow/PK    A             8   org/bouncycastle/pqc/crypto/rainbow/ComputeInField.classV]o=+rIrMEZl1lVT9U)uF^D2҉ 
O~(좐:`Q$yHE>Ph{gKRJٻ3wsf Na=hF0p#$"8'yRO&RK
Tv4@Ke[OedEbHj-M)XmA	#3,)ޔ|rXK]/YqkjpXAc>mq7*uW*jҫZT}eK^R* wxq'||Px\7nxRuץC-s.*$Spϖ
$8Y"^:a+H%҉vHrTfέlkRbHF4~s+|c^qZ]eQ};W&
j
f	Iyz/T;"e7k/ E16DDm57l6:;Vެ;D]R&VJ'V*ni掻յU^m朚W*U̍媛:֘<<bDgҋ}[V%RJ
(<wE5wF!Iu:,:2:SП}yr.O.{Dǲcbqb_O#7'G
=qFoG`<fBblp߉<1L5,rx=,p
7rZKܼ<%ƌ"ywsr?w*4 Mmz[KwJW_-a5ރ6fC1v-j(ٸ1C67fhq?djX6!{-]ה[Nw"4Tɐ>Ar`DQG)X# iѧ㬎36@.1#bF}k87r R(*2
Pc2X&zBŗj7.KUf7!m6D|bݞK
  'q`vTk2?mh4KJQl\$I"`?54r&l}
4.ZF7tV&n]Yq=Sau*/.6tGF6\jЌ
oaIW3{ȟk+KU,}Gy8,[	]Un(NHǄH"PH8"^vaCo9Rs0HeΞ
}aVp4!4E)E|Fڒ5!Et[H-#<a5OqƐ&
*4
,
tN"OT<8EWC%A'ԧ{1:
@&~7 ˏ~. ~ЀF c
g7)J	7"o UrZ-In04ho
WFw97$h3`kl8j;c]\
mfc˽
Y[[,ZD2@U*!Ue*rҶ!{qqq_̽qGgY4fxònE9S,YzvyqwUG0+p eÒQ^2-l];Lh~+>i+0qےH+ð-Um>;ߢrf50]4]RO+zR'@ߙ_T	Cn-\${RYv{NL[2A7( <CV
F0tNȽ'GDlIZ?J'X׮c3VBXJЕ 9h1	LoGVALB4'+rc/L[ɔP&MalcL&e.~DsCd&M#2nD(DǃҟQ5%F"%`U8FȽ#A%QV?)f=;gPKs    PK    A             2   org/bouncycastle/pqc/crypto/rainbow/GF2Field.classmU_SW?݄E&+&BՂ ?-(6J`K	b0$~ALNLӇӏз~>Q{;
 p*
)fg}3bf',dŬ犅R2:,
efǳWO`yB秊
Du;}g7JZhM
Ft 7C"Ao:Z}SKw	aTbHp
X"XaQ
o(,ZPvCZ]zWZJ][XY}t˥嫅J8U_(VVΔחRRn+=@Fj~.[ZS^P2ub1FPL]rZAo+rpM%oB{Crrh`hpJc@/!b&E$!
̀(pt$Tؠa.E`.Gz``
UY\' Kp&|JYރS,&˥TV˳ޚxs `e+8wC :!8% u	GCX @#BcpYlsضvT[vol%нϳmWwPb#&6RNHRe呄Um/W_aAn)BAi-K.#ƨ-w̖[i:j2i^yuqjK:čxڔh c83Gu(&fj9J4QNN9X&bzP=X~4	vAkªjsVD]ԅ@El{MX&XMh6,7a0L|a,0@fqBZmi.u;㲑#mAC(n=q:渵gD Rj}С*pR5eppǏm5h7GtJ!aU2rEΉ83˶j&cj>xr 	:Q[kw7jJ;=A.HkqyuI+JwHPtS[NLSj˷\aFLxG#ʱ5Mpn%v25?G4BB%3SD)nM!\VQEY ,MLPVQT<9~,,65 n_dTi̀3W҉5xkP<F/GԤ1#om/2ZG]37w:xB'`h_a$'Z3ӯa|AJz+?oc{ṞC}>=oCBƟK)P_͔Ɣ8SWPK"  
  PK    A             5   org/bouncycastle/pqc/crypto/rainbow/RainbowDRBG.classTogme;K6`ť?p#BҔ$$@ãa:uw7/=T9T= qF}J>#5qڠC^/TZ3k Bfϫ !Fb )>L_2W0,
LK٦:8K%ʱb=42ups2S6N]SVuͪT-lQ@9ȻBSXwe)yfҜQ}̆J4\]̛fdR.)ܶ_tyLn\Ky?gz}C52s%}[lk-Y;"^pپg	uB&̗ez~Xn;\(m/C|+k2Yl+ά|f=pb9L69E%;E̓>3ă洊X4lɱn C;mDlF&*6VEVQTT]*b*{'l8MR_|ep2gA
.u^ܽ匉s]-p%XXkM_H{ɢR%c=Lzl
i0 $ixP4P5#ACXCj!
pXC'Ё#{429Ǚbr:> #H!$Y&DE(!&'DЇ0mѰu}ܬLs[>mڸIڸ8L\}BO4Gݤw'긐H.b"Z} "	G?bbU	q=$˸:S0ه3
vHAR3"dCjdH;eCC!܈M8]CWS|PzQkw%%1kHz0RbrgjuD}A5D_5$gau|V)U	G{:ڑV_R*++HIqi	~PRbkTNJڐf.,(zg
=
3+.a	Qy	/a**/25+	9?؞UZnU04 rW*iCYNh'58D*tݐY5~JXPﻏ#HҌ;8ĔMfq
=AA}0}PGR&[]!I".&b+UB=-Ҹxkq&~axPK#N    PK    A             ?   org/bouncycastle/pqc/crypto/rainbow/RainbowKeyComputation.classW	`~kr 5n0@`4.b[{jk/kZ6"9B !^{_J1l2{]3f/ 3(E+$g/)DI
6ĲxˑZOk̞n,|#'PD)O҆S%HȻ]8_r@XEU
ԺbePBzb|
c:]e(QLIdـ]š^Z٪!'`b<I%ސ~c#C	i6RaZT[0pX
Ա].Up!:Pk$.'`Q#w=jGΝFW0
ŪViXL|V76>Ʊj^ª.;*Q9d\NqL1tӹDld{yLg22+c2+c2]EA_^ة~u{>f\jC]5q8u~Yw8SP}0p,֪ϳܨF8Xxt
lsP)E"WUǨ\K	;Mȍ9RwȍĚp8vF[=C]AP"^<SXԡ!/thnv	Yf#)Kcº^B*&$#)9p£1oʄdU;M6c
nA
6(A
`
Jm⋟fl
o̹"K0PKMV/QT}nV:gM'ӼVK5j8JrZ4\ڗ~ѵ8\l]@hSr]^.8]bX+bʫӖ8iPcc`4˨TF)^r@%*j5k	u
8	f$E0`\y	NO`b%+a@*~+BL,lO0`"$i
I
\
R6C.XHU`)`W`
T`:V*plQ <B`vz C&G	>Fq $"4C||_ "%xq/|O| o
?Cz	^"E%hC5jGgC,s%?"1na|Iv<M
/P?#H2;lo%h~E\tWT݇pKR
cKZtS<3!jke)IL2t>LogtәLg1t|.bi%a!Fb?@af#&sx6П3QUf.8 D~N1v2;z:zOBZ׿5gDaFJȑJ0NřY[n1"
>Hw=p$H׏d/iHD)l¦XS1B6iCH~j1BӳێᅘZ`; ,'(M	e8dR=[آBWSNaG8lU:I1hqQCgy7I&{dL$dRZ&M;ŃLN-S)wk;af~mWl#gN&C1r&shsn&'p.mtk4Htm$,ڒ1&ѯ8kyVbۨ~/0I0GciM0	,AJ35yvE̲kKc4Q[[Ӵeee7fmull2S'&k4蘘dg"\:\Se;5EY+=䜓bYL`zDb8jȥkՌLc\}쁓TZs<=gK%CS}r;4e>۬I4@?]GU:MoF'7mQu.Q|6jy#f	5v=fڻSHf	P]5&ڢ-RE𨦭P~c|X*hZMo7X.~K6Rh1'$Tu)X㜗,g		~/nm@*?=M;iFH,4}JӜٜUF53X\vŸ<)J,+粯0\b!m|抷b~Dz. křYp>%5#3D'RW'I|z3y)^v
ۑitq76)n{jUK/VqOSMJqҘf\9a|wѕSg]YlJ90'H3x
H؆?$ofy3__/7@}^a쁍@gh4ON/9ez9F[0lt;uұI'1A$5Ē=P{s|cs%8a.\n4rT]Wb$p1<8_*մw;kl3P8PKm
  k  PK    A             H   org/bouncycastle/pqc/crypto/rainbow/RainbowKeyGenerationParameters.classJ1F۟[ݺ]gD*.t!bRaiJ&c&UCZQK=gs_ߞ_ KVЙHw-J'mA`N̴(/ܕd3L'RK˝2;qȯ'e#sˆ "D=D7'lBUdUCf?M2~/YZ_RdX@h"j#@86c-jՔO5	}?@n>a-yD|,b;fnwPKh8     PK    A             C   org/bouncycastle/pqc/crypto/rainbow/RainbowKeyPairGenerator$1.classR_o0<w]lX6 MHSYf=fDvqMD<Bth	ɹɹ_<2c/9HяӦuPyIoAxOUGx;V+w,Uia&]m^o2XAs=IZV;LCe{|W=S'Cʬ
{IQP6TawomԼJ^g/㓪l(su´SĬ1[Y=]I\pP+**fq9q.`\.
C5]0*<UX}ep"Egd<e0\;t(,.6a7Ix
7_ps9zՍFrD.'UA )海PGU#EMÝ
PK[    PK    A             A   org/bouncycastle/pqc/crypto/rainbow/RainbowKeyPairGenerator.classU[OP,jQ./XޠxAU0$l[kן]MgqN[dU0>ts|3̹}31,uC}e
<Wn1&nzjrϷ\GB[*=U	7,
$-:hK6g>̲rjAkO]v7,t]3mL3kWM[zyQB1;ZC^_bWBTOlm
vI.`y.e݊ҘPK|֙a3d6/1{+*	4y5=Ngܤ -GF7oD7z8yeńE]bn%؍76Vzi
"WXTaw&0 <h}T=Yg[mI+2dqHaGdqLq'#s&[BPjn{3rJ ф͚gucE 9qj,+h-)Y+KE)=Y݁dKֱd'Rq
ihSюȪDNE=VbD~Bt\RbT (8
ંA\b\BL)

aRywt_<&9m	x
6:`NEB'PΓKZ"ݞD-:xz\H~PO\ep3k܊t-Lv!?";LgVs#
=&Rӗ&
̼X{	k}&n	Q",d->+Rt PKjW&  8  PK    A             >   org/bouncycastle/pqc/crypto/rainbow/RainbowKeyParameters.classMK@iďVmxKB!E"^
⡇t$"O?JUaߝ]}{yu'1y@+%|7$<gEе$Wrd 5EazΩH@/np|ֺ4Ӝ<~YN+S&aO72M5*
ȫPB+bt[*AJ	Xy=MNk<)ħrځUu6!V3V5!HasZ0QQgz7*PKZ *4    PK    A             ;   org/bouncycastle/pqc/crypto/rainbow/RainbowParameters.classT[WeCBg)łU"Ri
B[0DF!	Lf o>f.zd=|_;{NBX	I	w%I0"ؘ M)ZI/Y\r^ZSBfen&+@LegrLJ@08ҳ2`DdSfD4U6ըR4"Cg+j薡i~I/LDGB՚⺬-$^1UuSUGfIiZd˪fz[rxyGI
Oݖ&dFԂTeUb	ᓠōmUN
*-!ikez_n2ØQ-$7]]9PdԤR=XF2U\ `RA5-37k˅
+O7*
c?\Ʈ.w|H"$RU-?W&eMS&fIyj(WipJ
[ạ
U
[gXCmǆ[!r<Ґߴb.|3DE)G~q"E$Tu^t!9lL\*9n{x=v~P'^Ecџm!bc`dxB1΄0paaC0p,b i,1|̰̐cXax̐gSU5>gA}|ɰ$GPF)Y426Ԓ2tӒu+/ks˕yCSOC{H׳k}s+'p[M\{~mRmO[j3q+5?ჟ!jع#IU =3LD<<[C)PP!z~OY~FC(P (5/h~vm_DZČ A'@kYU;]SQĂmv7$ci]giouO[uȱؾp5;^e^0uSB,۷^C|+t[7l]
[_nEɍ/PKN
{C  	  PK    A             E   org/bouncycastle/pqc/crypto/rainbow/RainbowPrivateKeyParameters.classUkSe~6m)6h^
K֔p7iTS$
b߬wzu2:~/9d)!y{9eϿ	?*p*=
dz:xZAD47U29LIyk<I2X"'}c뉶
,t.+;O&L	{(Ph2di=IW6`&4ұd4;`fdOR{*OÒUyZu
615!g!o6l"y3coTc/
uTY
tsvʜXK({,ժaa~Rc%d?f{P_r8F2q3
E#L2}C향SÙHFT{}sSy3/ud8T͌ܶC=LYB㽩^3j*!9u(fjTتLEgUVG^TW`}
*ZE.FBqX־sf4C{hxCBs68^>]
7>Jp^X)C
z'/н'uR;@,C9jg8p [5bh`hdxeB5[pRãP4<8Aphn
ãUvi؆b
2+1M,n$4lF;)
Kq/1ffaxWz0Df1Zp֋øQcċf0c80^8RCa/N<C!I_Fz5ף#:#}qV=`)?RaI m%mai7w\N(e8i1Uy0q/n%]~ #ȤWWt ӺXdV25Au&AیY!`72փNip~"DDƭ1!J$2)J$2%J$2-J$2#J$2+J$2'J$2/J$+Q_Jt4R*V7A'9[2\><#/vE.IXĨhHbNو!0dMC`az\׹u羍&?8Q9:iSL//#N~:qֳ3l`V8n˙#м؂cd-sLG1
ˬ;ڝ\Nvȥ{5O3kksk5|{^gB8USѬ)(imdE
&otIT**
*mʂIB/)pPL*,)*)vTs66#9/E+ ϲ|Kkl[*MI):C_gi͙Gf93o-"r6Ot{;e\!>|mryusT.PK/"    PK    A             D   org/bouncycastle/pqc/crypto/rainbow/RainbowPublicKeyParameters.classV]sU~6_ۯUT
nSb@ 
m.!M	͍W98Q;P)Ug/m9xN ܑOd03Gɤ8#DԱifҜ#jLa4ts
e|ǋzO%'R؁J4J+FM`ʦVtU14)UW+z94ㄮV$$5=[--kL|Ƣhz=Ԕ%j˖~dqzJ&KsؿP2VPB}IӍZ0zZNƲ-QHܨGl|qrEYhnhV󕺮6Te(kr*Fը5+->58PgvrQRXFFaY"71:e*]_-eU-,(2PJZc@c\<<yxG prKL~:ňC2jTyl0(CR陝Oz`)wM§
Vl,2j,Z~ƃoݬybmT({)`>`0ĠG%@df"z^.nc0$)08$w@ bbA~84$32fp9H	.q\u08G)p'5e(jRa4h`tF&ټ&{i1]{"\w=5E6~{U厇ĐصKQ7&bn[(TZ6^2[_Z٩ɰwؕkf=Hg0ƟK->l6'pms'?mn<hܻ#7!mN7<we8	Kـ<Fyx  "JX$?,f)-=MOq
nǭ>kPH)1'sRkN楰Ϝd0oNrww@ตmuz#A_
_f{q="f	w/WYg?&b"N"*zG{/Se'\[޼?RXGm=I8٣qeSgK7~RK6.ǪŽy^-ϑq[-S?w?i
bt+l&
z~vtEmbyi"o8M!-eS8y%mVI{PKVt1    PK    A             :   org/bouncycastle/pqc/crypto/rainbow/RainbowPublicMap.classVsemn
Z-@XJ@DM%MH6@U^xh;g_}@l~|sr/ l~pZ6sB==-=R-)b(NҩdJkm6&]K:m;]Uq|;sfqW&*y*u-36W0͂\,˹G9y]kxoޘ ׯY9G:l%E\F33%cB?a^(V,#U,ka^'ifVuY4JȔ(ZSO+hle?5f8=	2JeG>Lړ-QJ`p줝hbZ	nYeCrd4cMov]јMT4άLd350-J5V(ecOZi=&V!ZrXlidܛ3"Է7G|ȡ=C]}ڗq;W.;@V\^G\C"
ɣ{J%mYRxhҋ2eàVzt
խ
E p^"E bDlQDgDDE<+b-"R?=ۢ/<H6^ʗd2yŹևZonܓevJwuRD.yvؗjlCMhP4aq_A;4	O2X@Wv
VBP
5+2X
IcBy*XC
q-4#%!`1i/2xI~3xAF20.^" `B^ч2a`Π(SLN188$]݅qkfLkXW:ei):KG4QS"0<gDX}n: g$	@cxWpW·;27n|&.|kO;E	T6vyBdj+clVnS+n荋
b{4Lqo%y7.RqOeU
AAc6Ubk?O		`web]T7ODi?9Rq]H\z
=lh܊D54}{){*"
;U,^j@J=WS}WdEM;?hNk0 P]nސY _j|ϮdݻT0OwENSAi|x;pԭrU]DZo`-v
fu{YD)JtLt80{FTa)m'	9Ԥ
Dcr}#si|0w5ojgq)ezTrJF彎NvB\+A[`<R
g
Cx8Ce5d_Pp]Ae
u
XhQbVĹUk]ڠƂ~Y|	-)pp3<mtƍ}s?C6PKq=     PK    A             9   org/bouncycastle/pqc/crypto/rainbow/RainbowSigner$1.classR_o0<wYlX	0>DfE{r]͈쒤x$C!~#;;l#0<AZA,}5#-(LGe~8,
E屮HfZ]Ƹ0\fNsA	íhFZINЎt$	_2vɽ'	L2Wza;]lw,)Tavs{:qJ}_d#Uhpl6fm1kMDt
.qE3y4+TCp+V`za>23E*F!DQa6)@oe[t3-SYzIkVW3BSķH;ntj\VͱFrT.gWUIwW )w6PoЯf PK'"L¿    PK    A             7   org/bouncycastle/pqc/crypto/rainbow/RainbowSigner.classW	`&{f29afWm [],SS	X8lf7bVJڪ$Elkz>,3YG7yC ,f >$;VoNg[ҹTl0fdܿ#[挑HmIl23D]-s:vIDs<nZs/牨MtDlŘIW	h~5!IfҺT$*uHf	:/ JXK%H䙷s۽60IȚXo:MC:E[VܚN&;x$Kl"
X*LI3f6kH(J6u0V.{dgU#4Lb2cs3c0$V
&NLџf䰵(\gK1HIJIN$	;rF2Kq3MJ.C453dW7LbL֘kO/6d<M;Ҕ6ge)pӼRаn3җϴ(44#"m|e{ 	|{%go3$#4FrY&3S֪]1vHjBbݖm␊Xŧ9Kxl;>v˓\yglݙO:bgKf'Ֆ7כ\ea%(F__.iTd?9/36S%ɔ]AˤL]'mڊBV!jf13ތ'VHh:]BJO>6Q ʧj$-OyM'	\&~:Y3g	3I񇦢tvG|rbN"W_~q9X,jޅ$Oyt,$,$,Z'֙tL /L̝F!5NΑ6ѨO]U70Qԧ3Nd,w-IگhX,goly60W3mwkBEmNt0|Y
V yWL%AvHd4h:d,BJQd\&KFqM2(M2,c+e2Ƞלi.\sC"&ZdJj'{FIyޔ yeMuA8_¯FM-sNNٖf8\1uqv`i2r&~sΦ3l穴:>84%Ux'7%+f#(2_$tE*zHQ~qTlgH21FPE3t05[n{TX؁[Ṫ[Ev3"Qq*2|*^RPTQbT砂W+Uy*Fū0CŅRh*֡V6٨ޯ<|@*ŇT\GQvTKqD))ng;>p'^1pw)n'>pý_`b)n§
v2C
KW
ނ+ckyZ<7m(x0Tp~zo_bxa0(~q~3+!
މeÏ܌
ޅ2|᭸tHd?:Rt!~,v6=B5r#eF51됤 }+[.H)F*V1R%*<DFZTopm/,+>H
zWFS0[u0ø~^,8F󆥒a}n3>u{A@l^h6lm}O3iXPYvY",1ɸ(j4*;
o&gK
:{hw'!~хKvh_S=aoec(c{A*T娤EJ4aI-4H2MD!Xy4ȕDuQrk4/IiBVԹzcWkN?3N'
5uE_XknK{ǟNey.WIk{hﵦv߮ţ˘pڬQ
Ǉ]&gˆHP#16r@/bvוa;w.%+hS[xG<UU=S'SOVF:_į=&'!m+*9Fs]hgHՑ~ϤJRA3*z0^4
.]s@DHdsV{)R+&UzZf@9"o+'5ynQ>N:|Z?iv_p^59Ut|b"Q>]bCUD&yBqE긚B)O^xH]>8bg>xDX?aŋk2e7RχPHRm(?5%#z4#Ҥ75R}UR$2nd%#1ؿe1;6Ʃ7lb*5UJ8(<G+vq%dp6 ۷6c8௢Sm&~'n_ؒPbu6=WtBPW3J{eE.EVx>NK-pxO3k']mN<E79T4OШT.#/_6UrQ+RMD_j>^l9h^]@og_^PeRED݋
bW00=a/Qi=˞^JBEePT
Y1(L𻵓u5K;]K]a޽hY]Ґ[ܡC	[1ߒzP7qUPKb%+  <  PK    A             5   org/bouncycastle/pqc/crypto/rainbow/RainbowUtil.classUMpSU^o^=B  Cʏ8Cǡ!y6Œ4EU]t\9 t8â`FpX0,tƕ.tXdh h&{sww_31sq;gxAq:'%Rixp|/$_TSg٠Y~ğHOBlGe8b1=)MRB%"a
tOBfboR!¡|zKq	n-ҩst>[(iʹDV²at`d/F4?.m*xNh:??~)c)59^r	M,Hi2{n S,Bq8~0LfQ7)N
q/+	'.eAH|IϞ.'&h=.D#Fmb,K*`:ZuԱJf[tت#&aCL<ω#Ϯ=,ѵaZ95PCX
-mC`310zM^n+&:]8ćMF?`IaS짧M*3oMJu	vrQ2pd%s l(vy2ٵNvk9iD-ڹ+jf*Eg)FiChc+cuXqۨb-X8>'N8MA8oB6攣O7^df9vg]"_青+3֍jyhtBTTyJT>A)TQ;1#>u,A#0 >2e>d/5Wmk)K5t |#'whml6֨	eB(8~h2e:c*QmBO[8!!8Q9Zgbe\NL2^2ѥ9aBhyLp86+&&MLILTm`fxD$?CIcrWY'.k@}m<SK$gۯ ;߷XMNX	,:k0ê5ca&ӥXv61;ma%xBq=SyrR+Lgڐ oJ%7@]@V&hE%"=rcNK`GC"'UZ&"XCZ1FrJQ<>V(%1ju^˭7z;D}|Rrh.o/JMN˦; wr219i2^9dAs;["a,`fXc.URL
EXLt+@G?\D~ ^/U*Hid:~I{=ʺCKɶŘBjCSL/^S
?B*WS'U^S:H=˩h T"eۋ-;ǔ$L 1"RNjPk03ҖKBwo\z~e~-97GAExbqїZGebZҘ?	9T⋻fH WY|h;D(hU_ÚFLqO$M$Uxr3EqR2}1BZM$>yD=PKs  )  PK    A             1   org/bouncycastle/pqc/crypto/rainbow/Version.classRMo@};u4|3.$*L$"%iqMpqz'A*
u|H^gvf߼}3ڿ~P$cֻaC3YCP2$jcv0W6)y76߽Hku1Zkn\#·Ծ7rs~6U??
<7l}Q?=7ϥԱqfԆ;:a(Cv:I1	)	ijR~Gls;6+CU4a6қӨ*S0ύM)wq_A
WJ"r<SXf]*7k#HwoƉԽ
/S y9
<@8	X@)ʑKkdq=@,BKW(_C`TF_A 
B_ /JK; )IH ")k_Ks!168ƆދOL'E/_ĄK<f016@/PaPKn    PK
      A             "   org/bouncycastle/pqc/crypto/saber/PK    A             ,   org/bouncycastle/pqc/crypto/saber/Poly.classXMp[W>z?,=)_?;X\IK8uĥMAOH,:Ip `fX gQZLf Nӆs't9~w. <
_u|m/}_d};_p%k`(3hP:*ӧ3%<A$NgpL8\l*Ш92;ΞWrI	'ˌO?">\N#gz!Ux&bxV8qd؁~gt1ߨ'*XT8*Oe3c'K?;1u8;y#s`lD-G5s	t#2A=3Z-Wb塳5<QzڃDf<z칓SF<w0=1%.HSre^\BnNϜö t>W5fr\3TjBRn4*bPU%<*^L>|V(A
yM8;[/2/Cm-J0B%D\>*mWF6j糏|zvKBq27,G\B_#=f,jK~
`D=Xj>V'=Ȍfhy7vdcC21!tCHH/>";|v8L$L0	"CDDRD<L[8xtռ:S}t0 >_'|
{|	""'"2MD<K9//by""gi"/䈜Q8g k``:Uӹ3\dndnRʎ`x l`pOچryT}
[\G_H)pW50X`\^Wanp-W%**(Ζ*Tny@]h=Lq
?[ZoBr|\uY2pb|ħ$<r,K7^7-ᄕz@?þzlKǠ-0)d+WKkp&pY

N&SJI
G+kJtS-ۛ&fulKwgݝ (;C kūљ vُ`QEnD)0n\c1M߁_{79Ƿ>d~Po.Kejdkxr,Ҙ@yi,kϦbC6%.2bBVH\AY8~(N2[J'4LeNQ	[BTDTDTBULsM͊kbmb#uSI8U#pß|Rb
]b7V<zy0rn+~3
yaר}Yd95͑B#K਻ҩ8t4q'ۀ;;`j0o$I|
QIuXU#UL{>ʉE7
~ĺۇ1Zx*SH5fnX`MNY$QIx.|*QZ
1O
$>e7yjyo
^Z*;+m@N
27,uWYj9w-M(J% [51mTXSg]Dmm1U',ȶ4S3lˇ阡Zc'W~К%4F
%8fet7H7[gɎ>)r9BFT$[
,>6qMݖܙax3qMqǎV NnCq[A28ylp :x<|%ƊC:>yu'EgɿÉz0aARщ֐n={\Kp~
"x7*r&xHn
M};]V?'?+ccEp1fQgCyuka/mzH"t:stgNL9ʢ"20E3ݨ.d4>,^ǧ
uuX=u2DF"!p	]C{샎}3\4ݦqcV.ỳåN3h\-6.uv\.idlW
!bs+C,f6bvb}؃mEVUbA
")Kا883E.ɋT|EQ%
G$TI-8wJfrI{Y!"j*<_BV̈rmR.{	'D)I
;ٮ>4Oz@ ^!$!
D7"Od#dy_ooHuަLoa<[ v+9D?Y[/-q /.KŦ!SY%>hV߹^c*BҞt;%	t8ټMhcLo:!dxY/܄"P~َnz\mv0a/bp;+U^۟FG5
sƛs PKm;ҭ[
  k  PK    A             3   org/bouncycastle/pqc/crypto/saber/SABEREngine.classW{|SWqon/¸le(IC@en4!H]S:6Mn@$Ŧ)M>g}uRʫ`
ess`n:3߹vq{9s=1 6	lUmۈsTJHeζGHb΋|QO˜84lQ_y]b#fxmc,̴yٝ7'-3m؊ҹPp*HПA6-ͦC:bi-+@+'Z90KwjbTigijΧ
;ҧaHC t
CAܮ
5,ncnhl`Ck:EP%Zԭ+9Mx89	az>
g]77qj65"3Fy	ʊI7S6Ց`CcHOPSA=%	V&@	vlvF\t:rva_%0tn ءwĵdDEEC
DikF-Ic-LjVm([5Ysn/3U*EjCL-lT	? Lmrd遹6L2]b	Ve2Tܡ-D_KԻ}o4c0D2ZjaQ走(ZGwEk52Y_k*Ӊl&BMOѕĢrY
Wxc*SӕLrh&ۧMPviTʎ,;dO"YM?߯M[]sދehFwhK<
hif ˒m ݍ	f3dO,Ɔj]ZS4e|
S8wiDw_ T"kEYp"tKq4EHU+Z4\DiT"l=^·Rҡ,jjzֆ-NU^`9
ZVD DFpWޫvG~ا5`S
4Sy *Zx'HV(U ``V`>)@rn XD f+p=Q<
T\4`>H!|#8'|>	>Ei<@p#<H%v2d/ːa<1|GFeN
oʰ!_!*C]<Dp 
#(/%{0KpF0dl[oe}KE3|gNfD؎@kO<&ӯp^T)k,N[- o"WOM˩-/dZNrUt57qik8]i6N;QqFΡg{؄;(
He lZgq-ƍE4q0w54E͏斢泆9f7Tt#y|=q tK}F0o(j>go+j>on xyxһ ?zyw~;2[#^gN;J"Tn'I'BIؽ.O(AE<CPu+y8uca=D6\/f$0GIᬷLg=NI	wWvgp<#zN3?OpkrS82'MbE[1{s<Lq.xm8Dai<
W?CV}_[In
ْzUp+OI"CɯVEuQ_tEN2AڟpCuGg:EG`N8xUU9YOu{yv׶_O<߅xZuQxYm>J*>S"B=C"ei0OCߘxC'Qv"Uoluv%̭fNǾuWuRRMk8^K,]?9afʸڎ+uXvvRsDZɅ
U9wDSj83xifUrVEaYJ=f$zJk=
'Ŋ"EқebY\fH8<
ssU'jՅv
ōi0yVP1pNYu|274i8yUfO?
\w?:# i5 VėS;t./1A<b]UZ7~Ff_F7mE+W&"z9u"T`˼H1luGmHЉ(0p
c[HF[)؟
J&p&WZ- 9}k7!K:vc7 |0jU<bwrНwE, ^Y1DUbHEuN,GJΡVҨ_qp~Ɋ%3D>7X}4kN_ ~-ulu^c?'߁ye=
SIPp؅y.Q81,#޹cǠ+)/|9(},w_p=H PKG
    PK    A             9   org/bouncycastle/pqc/crypto/saber/SABERKEMExtractor.classOPǿpjAP/?nX&cG`H]w3
8&4c|2ق4;=9ӛ2$0U0b䷪
RV5L2K*R/~#=6Ur\`>E>
&Z\8JH)zVsm	L8F!oD>k9dnԸ΃pZG59^`|2ܖm&'oY
6D[X3f4-z͝:2`
[g]_R;9 駴	WTLȪRqU5ڹ6J\bȞ?ْnX,sPG:.#C)$t!C:=㸟M<ᡆin!/CQi9
3(Y_9MCu$"_[HHkR|F\ 1#L+J=<9F4K_3fG$tþRR,IY3C{z]fł3=,O^_DNȅO PKvZ    PK    A             9   org/bouncycastle/pqc/crypto/saber/SABERKEMGenerator.classmOPwl+vNFL j ]w3:޶4ё1COWfe6y={N? caL+$VM6踾s􆷏m06ͅmX66c.^~Rb7M	_BosA	n.Dx{ؔGTKkn77|5G4F=Z468LO1?Go>u.VrП|w+]
#R*GeJ
7--R!wڮ		.K0-aF7ap@n8ò:l=<=+sT+WP3{o̙Xĵ)uuT.tASbI8%4	\X$qCA

dLn˘ÊQe{X}NAs`w&F:FqɮS6Oy=j6ODG5O>I.uYb|:Nb!.oX|N'X PK@&  W  PK    A             D   org/bouncycastle/pqc/crypto/saber/SABERKeyGenerationParameters.classMK@GbkՓޚ(A=U
*"bBP"v7nB"x7 a᝝y, fNRCkBF1%K&gLHϔ,qij~M%)2¦Z}'z?^~RӳWMpeoŃ9əImeDv!q'ZK^C
Աр	-ڹ܏P)\̰޶vPu;+OiK
c| PKYI     PK    A             =   org/bouncycastle/pqc/crypto/saber/SABERKeyPairGenerator.classTkOQ=.,<|
}PW[DZDDCH0D]nb-ۅ*IM?sۦ*E?tf93gN/_L5C?m߬aPnrv_!
/l8.:pKy5Ҟ2LC'
2VG-L2>[iCDMfPE3tijZ3Szrgi5kd\-OI}ȽVUK噳VfuaF֬>#wWXy--u+_ܬ\
/pM2kET-;,)d.KtRy	z%\pEU	$\pCB	g\?n^^(|J{wF2S=KX|khOT_gƅ̃圷_s3GZ`[A<
nᾂ~)F-
:PEP!]SІDa;1.#a&dƴ<q32bJ<12"Deä02F0'c,d8à#DgEv<)'良2lЩ<`	ǀ$n:D7 xX0"H`B][#Yŭ&mYZ(<FX/ߜbtŅKXxN1R	b`-'å^W/*aKU-3*PKk,    PK    A             :   org/bouncycastle/pqc/crypto/saber/SABERKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF}0ŉIENAȺֱAeg`ag`ed0!@7kh\#}a<l<L<\uOIeP(
Td1@R 4v~-|4#f,  PKMp
     PK    A             7   org/bouncycastle/pqc/crypto/saber/SABERParameters.class[OAߕvwii*,mlUŲA^hhbGo:RxgfvI?|0
_G !H		#@N`T`L`\CKjpF#53-1],;ՠOFڗeVg֦^-9.5bˎgWE{ef^Mfw79ReZzwsTMkVVe-dZ\>U\/;~Ca
^vJ.Um!WV1XJb׋V/Y9qho{U
C+_o.\rFaц
FmVll֚Iv˪0fw-6p@	'i
縥̹:4Ѭ`S;#CSq AALGЃ3$IF/`CaadYF1c38׊)\`\d\b\fWW3Y&6.ǸxІSx؆I<jy\,8Ba,h;٣_ʄʤʔ*GU̪̩S;I$[%]Nu9AKob-}bO҉
<N'7D+
<hjzR?}{t?~6^>M_.;*gbj>e',JӪfY3it]4mz`J2\#YfҴy!Yq	kY&"MWkMYWPK<%    PK    A             A   org/bouncycastle/pqc/crypto/saber/SABERPrivateKeyParameters.classJ@4izЍ4
)(TFEQ®P1IS!o(.| JJ\X\933o e0z/`(y`.N$g+8M$=t U2݅Z^Ȝ!陸D"Xl$PyS>RVо"Vj%cߣ~':yK0g;[,-T,'CTLػGuA*b݆MؠϩTеC_BOyRi5w63l?} f!tg
(p	"JPKuKs    PK    A             @   org/bouncycastle/pqc/crypto/saber/SABERPublicKeyParameters.classN@PJ"oܕj
F	V U&Ii,V>e@%&ns=_Nr&vVf(X\{\0䦕.0H&@C9dTt'W2ehjI RƉ/^8BQ:;ʹm;7dDtIlOwZJ)Kdhdd8\$Vz?FcyCGCz	ਙ&ְAg:.P4PGZlkشް#0('3f
(O!sJlPKӢ-+    PK    A             >   org/bouncycastle/pqc/crypto/saber/Symmetric$AesSymmetric.class{O`ƟڱRQPTrs7)  lxƭqaJ5n[bL>x]p&Lg9'ُ/ bS
HSFؐaZS-(jFteMl^rdɖVm,P)o\S%,a_{c1	c%7b+0r+eg<tos{\Ϭ'gkYgLÙJf&ҺX1ҩB</YyA_|U˟3"y\ےX\v?Jnb*r"mVa9kzLM
n)Sp[
ܕ0$$LZN
ӒAuԧ}b2s0BᶆÂgM~V}Nmh1>hx $
*	%kx( |"
k80)bS"LLEPAEU<Ƃ̨Ŝ1L`"e4
JUq.3NmcN:}g
i"%:#UF0W$$_!9A#,~EoGh8xL]㥐ѡcm=jI!1^_45R
3ad/&U{b%EE`)eq~_T>Ś6(t1PKz<ڧ    PK    A             @   org/bouncycastle/pqc/crypto/saber/Symmetric$ShakeSymmetric.classSMo@}[;q>B-!PJcpBn
UM"=_BR ?
1k;"
[x4 àhJ6v&&4;ѮdE٘O]
t=O[=Gw'P}zaa`8}uq\nz"ޟ|jO"s5<9a9T2_R></zNRssɯoBOL:N5kXpEU
7i\yg:Qqu,IȂ&!99(T7HXp7%ܗêtX&Ix ajpy<;Bpp[XEFY)T%YH6mh}">y+ԫg\_?:$:%ͯXuqVKNyJ7ͪ2/ 7I"[&1&M7K)QS#^U1T$ь$,jI_PK    PK    A             1   org/bouncycastle/pqc/crypto/saber/Symmetric.classN0$i	-VԉKIR	_HX[t	䎁g٨Ѥ/:n]yZ]$&?$|"y,nVYab/UE2uYH1]T1\Fۥ:i"R+#Gpl`}p\<hr'y8j]mХt|:TF{w6.İO*EPK$k+     PK    A             -   org/bouncycastle/pqc/crypto/saber/Utils.classUoTE?w;w?J kj,X)PiARBm-,&$<XkbҘ&&./Rϙ;e&gfsy hD0?>Gۘ=ýwMt௹=n 5<A4yxzDߟ;@4Tg!&AĞOۓy/oѯr{ ,w?ORѣw;n9#8+#u=TBv01=<xjxhƀgG&.gƇSgCg/NLfg&?1261ltfl|ڀԹ鱉ɓჅxfAA^6\0HkI<Gb$Ix$ԒxFHDA$	I&*!FhAB"KUh&B5m$IN
Hl㽝$v i5yX7S:}0_FЫ
w5XרuZSj]V*@V}x܂737`	`/o G죵{h=PL
]ׁm0>܀}nG͔<w9:nqGv㆔Fݭ);qVč)6qomv~_4]fMjĞ㶙Eδ*Mf\Y.]N;n^[%UحNlhƫ=,r@8FarAU@{<jYc~xd2<[X!_._uGEHEM.ώ.UUSY*سo
$w:mĴiu!TZlb*-mřV:R3TJ/T?%G{a܂H^U~
EW笳<g  Kl֏ShlshpOҠS>šڣA$+im|f^nǃ&zckw&l	k)c%EP;RQ<ډ)h(-O5}2HH4gBR[!脧Y9T-LR;+꣩cO(YO_	*	+{nKCLAEi$O&5CJ|&	_[ⶩ/7Ht̕
OSӂG#1M1eE{=94xR٨%DX4M- y#{CN)㞕OBڢGa%rr)7̖kP]~=0m˒)#ȔUSW>4/uPVf98&<"ӘSmy250NxǏ/Eb`ߡ"l-tR}/Ǿ_[`4[.l;X`1ڑư.L#6ou\[#1Bi<VµK"f3S`aMD%ȳ{exQ\S~5h6JPGqHV{Fpx	Dx Ż͋k͝H7LƔْI4?P7/m	i1hbPϠ0 j0_ɦF;GNthUNl}''wƓ
PKom/Q    PK
      A             #   org/bouncycastle/pqc/crypto/slhdsa/PK    A             -   org/bouncycastle/pqc/crypto/slhdsa/ADRS.classSrV]IJ!!CB)m	7V)VmQU
a|@?}c$^}9ҿ}8pHe!%a"xV#a=ֹ0e>(sz><kvpZSߠ(j%$hJ$0_+%cPXlHPVњ.riUmD4iTxN`;QP7Bvr&ē;8@z'קvNmۦkxPwAznGB5ݎe,j84Q
6~ݴ{Zݳ|2I}H%YPm:򃆴KSuZ}noj\#yW^GVec{/Zj<wmTb)!s?Uc?oiG$bݡ0c{BŲ;]U`v̞ɗo5 )1&L1P,2q5l8V.z\cH.[c$zdb2`R5e\´e$d|x@$4IQK$JXg=MLst-PƮE$l6%L|Qe!~Akg~~@# {O>qe,~$_axf:yJy:w&swAIm$#,Vߢ1`Q0Q'`<yܲ[n`[ {$ṢLAoWT'9<y=7,yR<ʢ0Џ'2ԣ2طP
-E*itIz)->a´0_r>4PK݈Y  c  PK    A             -   org/bouncycastle/pqc/crypto/slhdsa/Fors.classVkwUN&7
ʠ#'bҖF*PL!	ILRlQ/T|a|Z#kϙ$hYmg9wsm lO)Nw+PM#
4zS
Fyv:M#8lA0{:.u*Pnb+[hmCdf(ޡA
Grdh,7Ob)OCT3DŢGbQ7AHвcvW#Igx*(sٸ]rt&YxN&	&Jmv)`9mqBW"QpEҀl1J[s8l}vf"tw<_Rl}eh~'NpM>ԝNF%'R:Hg8t؞NNJw,B}u̭BoT-,<
BaĺzkeiU(S/$V>$բŔKx5Rte2MuS}g
w<TTd^"]f(4TV+X#pZfV6v55E5EzI}G|3	X8\Lv~23b{N!.vڬ_O͋WZjv%%b)ڃkzEGK;QwKZRFWK,c24aĵ"шHp+
#q3TI z
w1t$VX%:Vu%" &q
UXxćMx܇>1!#72Pd(1L0dxᰁ gx`{l$C!Ͱ Óe00iPp1d
e)x9:6YM_d<lCQB7O؏'m%0O斟Sr^l:7#3eiIDxº'gp˼e|l	K+2>h4e||Yj%:?Wa	<԰]"[0hy)g$7iJ5e LIwh>0pG,:WL?E|G3ؼ2L)|VƻӺ2[h#߻}K8=JTf2B47*r,ixk__f	kaU,*չ/Lz	Z>_,ZD',MY3`3!H8`zQ)'#}TIY2sjfV_U^$*Sx_&
̺wњԿz>>vFLxgrw9	ꪗKSQUS/U:Gch TX<\
;ERs<zLGNsL@75n邻HwQ5nyO2+d
B>x]-]+Bs<5З_N+'v|Lgc'zڏx6)gV`]J_O2^xUeZg+-LAPgU/F/
N軶}7r_É_M	m9PKpV=n  f
  PK    A             +   org/bouncycastle/pqc/crypto/slhdsa/HT.classVsgmh!kXbCZD䨹j	11ଥXINmHZ(.IK))b
`<ybt9ʎI#9߹wm ǰ,<xVy	rh``pK5$BRhjo)ϊsot6 u_?
%NЊ|2F
xa&K;J΍/\RsM%ƞ;J=E^7}N&CVsiɑLeRB ]ȧ?rOd4M	-Μ[dJn,a\wc6;+éTv;yfb&+3'9
+[.VhsىDE7MFwJ6@LFq$-t^ur3=a	%zn	FS=P)fE*;K%gTo0-QS}nX/N\_rCeBL
:M[Cbmi2[o+̉딨Ln=7
L:e*Oe},@RNc''bqO@TVahU}**PqHᆞ=dshDN[ro
&v	6b+Z厓j\k5Ѵռ浞dZ=Pʉ|y5R#.|,6EsS؉OŰ6q0ÓO1h5Ϛ8&!<D|& ^(&Q&gxXC7L|&/l68i|L<0l11e(Κ39༉NÐfpב.Hb!$5=hSs`>L0L2d.2
EK%2^e<+yP1xa<x ^b61p
3'n⤧N9ag<R}@!",bLN&FԖ1BWZ]%Mơ*~zcBZHxYkkYōle@T+[֫x7
"\oVEh!V	#mBRT8K| 0jH	QRlfd&-%^*~U#$㪭lj%p]qM, W8+g^yzL뭯vڊockXUK'səX [ץ7lG뾘a~&uqd7n[XJo[FAYy"]DSTqV	wnAcʉ
#U,,I$MW [Yů)R?eS/#U,U?9lHUץa;X
xV@P{d+0
Lϕ	_dfTǸ}*".l#(_ofNo¤dI"K^/Mk;"o<|:PPF	y7B&Tq/P|16bniWcT'tK4@ܧ5_[yV)Ϝp&縶䈭Ud1LQ~Sz/"r;JlM(zQxK,c}vYڅ51.3x0K?ӢT~1e9qG q&ML6zL2Bodbq]Cb*~_["ag1f.B	z9wkJ Vh7#I"Ts{yynʢP};l_!o7d|_37>.Gb㢶6*^AC$kU|CPK$.6    PK    A             9   org/bouncycastle/pqc/crypto/slhdsa/HashSLHDSASigner.classX	@~v ''dlčI$@&@D&l쮻KiZk6d!Pkk}߭MMߛ@ ]wkOZ\L'ʝh/K^tn#7y>^G94=XCI>C!M>cbt3Cz"&QMZ2zTk$JkA&hnj8wl71.wyE{#HuO캀'%D;<~߶;[hٽ5Z,G.-XzZFZRO`:dY2-G#dG>Ԙ([I:R05]zD?Ej{㬸KOVP@v"YzHT3D&g
$!Ӹ.ut"DHh]4h`ZI=ƽ¡_gvZH0znFɟ<ꥣi1p/FK9CCa]봺ɸNT;WM:`j\S.=5S_;yBQogݡK
jXty|ޥ]HrqL$-;cy?q!̼7}Nqez2sGOE;C(z_$"rjҗ)[%PLtZeZ(eq@KDVxM+L}A
@3Ħ-l8kf(yr[iʖUN`n__rڴl׬XfԛQ;ܫ'IxoݴM+jJbOɨc̴d(xN
(M>޷	D_N,|~HcAt;,(_-=HDД}Fo^*:Hoe7sƉR-zXR9]8Rl!MtzU)qQH4cP:$R>h
Z~R@VIưS	mg}J+w꓀Lݚ8?H ,yቤOd4sFz"#eLʒ}/܃UE{g9q7JX b	HU6	|K!AZ$%JR.	%\%M	{%\-	Jh!AOB@BP.SBn	!^ƿ;Ĳ$GVl9̹&+vm{4l(_pOT~3OHgsDt~K,e0u1.+ߓ=;[uɰ}a=S2/~zg1'=)XN'S|OEF?\fNI?tUzZqu8.fDM1¢Q|ۦkeGo72h7#Ysr	ESt{7iTXk/e#QPkΉ)HM"%"a.<2c
,Pf!ŸDAO0G1C>p Pq`01uU˰퐘ũ d80.T#ONJ+X#x3)XBQĽbk0'T
.IkRЄapJ<2(xN+XY3<RVQU
=xGu0|'?u!|_sC&÷\0^aD{/1|/3|K_v1?be܊d&/e)rdazx(^]]&"Wƽr ?c'pȸ_AQ,gx@(3e<!_Q1a:7!NL^?B_0#y2yk4|gp~+3_nM4*|I-ӨZJx?-PKnTFKhiPOT"BB	j!I?A=dMXESsgĐ5U)Q]s G[sH~w)Q,N֨P0GUIOdf礄U{Րm"f8
%,fI|˅Ɂ\j+EI14:%CgXlm*)\unl)U)ڔtHyHHZQPg:N;OHE6{+7]ϣGĕ[TȰ$2
8GC#.	Eq8Yt8Y$GscfsN!E
;Gyg9sO=VE1n01~+
)PAbP,H=f{봳SǆⴳH*9
e(9/mUL8TV
NCky(EdwB|YI&ڨ]<-\%k1XKjMy 3as0Ts
lQQiYJB|ؚL2o5n3T^jwg"5Th:Af7Wٔ^I|y\]7#TۼvU)uU)Kzա:M,M77ނ4uU<Hk:t
vz3qH-~b"b^RܡY[%âkXto*^QI="8_sN8Q,a,*CvG$ PAsUtN s4Z uiq#\w2SO1%F͐84(.%&w؎6`HBޥ ^(1(\EIڐxy̪U"yn-PFZtFTGuPr3:<VGX#Ts-7iJI[29ʃ/1rBI+/R,zDy4m^X2@'s
m(M)sO*Oe 
MGp/e`c,*
q㐸h9*ƻ83yg1G6)_~M PKzC    PK    A             6   org/bouncycastle/pqc/crypto/slhdsa/IndexedDigest.class-N@?7i,
Kt@׻#},Kْ~\/	x&7y[SBo638 7ªtxޕ,Tɇj6^Uu&[Z5rKWɦx1iiʚvQMB!6"[eǗx]BxWs%@엘bSgnc=b`~rb/9	[|?PK<     PK    A             2   org/bouncycastle/pqc/crypto/slhdsa/NodeEntry.classn@Dg1`8@	%8HפDDHЄ8N:J( >*ʚvjV=3ovz41hEm(Hzw|R'WLϚ0X첳QM8}+d3Q}!楋/zxMrCr
ae
;VvxO2Nt[~A
.YPK*M      PK    A             +   org/bouncycastle/pqc/crypto/slhdsa/PK.class1O@ r66&&X,-[6'{,Guy{ǿ	~vI(Gs!mNVvn;3ll;5)9V[	5L5blQ7B0`Ժ&$8s⃖q$ĊҸ;2N>	WL7L>e4g\NPK!      PK    A             ,   org/bouncycastle/pqc/crypto/slhdsa/SIG.classR[OQmvP]`-\B &b4PB$}mYe[w~WM$|'1ƀs@̜o3s90L=xbOBwsfl.8,8VzQU_Sfk>]{i%B'GG+:uhuH0nϖ7Wf鶩e-0uclMѨqZ,lE?W^sm503``mV66*N6E;{Tl3f$tpCM%>D)=rd3g
](m\-#!bQ	Q$%".cCˣʺιzqkA.ˠP?"4Qf)m&ݓD25qU%?aC!}Q{(jZR%JF	F_d}PC}
!E&`Ñ=ݕđRdnW$?DliP7GKMt"MՔ
NsS귄 aо}1'93P1D[7FB8:L;f~D? ESksI8}_PK9	?    PK    A             1   org/bouncycastle/pqc/crypto/slhdsa/SIG_FORS.classeJ@m?MmՅi*ƥVPEŀ.d:
IkHj3V
Cwq`{sO '8 XPf1Z'#6N\*X%kJZq*-b1."	|iFBX>)VE&Br|eţj.p\ؠ:m]~E>pĝ6Dyfm
>CNN'x^pE?n{E`h/$4x??PKw  U  PK    A             1   org/bouncycastle/pqc/crypto/slhdsa/SIG_XMSS.class]N@ƿ-RRLј`8$RRP	oăCg{of||~8;{Ek8Ѥ|RuA(i`l)WjBpX=a&Owaxy?!xS"E&g菦q|QEH*|h\d\H^?!P&6j6\{(vahӡ頎}U>q7uީO9t&Ca6
Z7C2jhag;?n0~PK˽  W  PK    A             +   org/bouncycastle/pqc/crypto/slhdsa/SK.class
@E5>F[lc)lREHb?B?g{w}L!X`|g	#'y"^'rB?Nb_"uS2C-*%y,dR8Iwbu`dFAň*]āFf
pM5wmf2Yh`<м_?PKMD      PK    A             @   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine$Sha2Engine.classV_.Zie{*vR'NkVq܀`0"&fBH5iIM&MM:U?_;BԖy7̼= <	pD,|L/~Lˁt1efI)HĦ{X*R&a"%LXtM*E:09$'4h.	 ,s8JkBJ@4&3񤑙F2E-UiJb(<E9Ա0%{ͱl:73;0fbF ڇ44zq$hQgf̓dB,X|q 0h1b6#ͥXEi^2.
E
E3M;N
"PhKW"vLgܓ'BLl!f)3/PYSI n	Bѡ^ĝwu+w$$/FvZ9S^pNzBh%c'7҅Ysa)hwqܑ&/H瞎U
xٽp6$#yŌ
@t&P[tߡ9XY6b2B_
drw)~W}1#Fߒ"|6aulvzyӴŭ}H|%Ⱥo:?	$%%tIK8.K-G		_pRN	88#"v+iQs_{PK	vԟ͙JڹO^6lCة`zzknpLދ;CFnG拥vkeV3飳X'RgOاa/g>pC(8p!*c"PpO*G (hgPѠAKD7I=*89 +D/@QpM
G3*8c'܍K>L$bH12Yy<e1\aX`xF0^qew~#,06-QGM}22|_^diF3J#O^G?JdZO={)ZKqMp/P&@RjY3֚|[
\`kfkܭ[
Z/~KXwWk/y~aWe\ʯnzjo}hkYѳ=gkŋ.\[o؁YG什AM$L
e³C}	n
B􎰡WGi?k	_GI2޳OXxZsIw:JvH]eg x4
|FU[t4izkLE_t+w\ta"5ܸat}	-.kXqrs
	\a^
a)7TiFbޠTXbRa&9>P|3<n7JUTP_mu¸%bS9ߴe?w+j+߬z59kZ}-{QOis/oHEe⚏[Ix-ܦ5)gmѩ}-Z_qi*_jnU4S3K8[gM[wkUMAMOYNRx{-Tl]Mܻe:1UqgwO,B,vCm
~;iUA٩].9G:DnxݣȻTz]mUYU0D~]ĉ4Ksûr,ZjR/5+&Z83r!ȖJAZKkXen9rb}XI*z PKZ  K  PK    A             D   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine$Shake256Engine.classTmWW~,,ݨmmCTJ^*&ڠhŗhEXMtaWDq9᜾|jIc>G5Y$wvܗ? ĞM_{ u%^?~6Y36޾(GǐLhkj@6}wv:& 4R4hL^%O:Y<KI6|卢@r٨J5P͂a/vU҉MrP3*휳dyT6U;S#^$o<ST-Z/SU!WgKv3*բϕkRQiK`M^I3&Ֆs͌Jq۬dj)#pi۴Yf<~t*b}mc׺9ht Txwr9Z"F6M-ٙ`4}jT^.y_]2>'3˸*#*㚌~=soQth[CޝQdߺXuùsrƎ'ѠsBvUGgL]V{*.Bct+,,Ta!UYE7*>B@EѮ
H`:;`b1b7,,f!*ƂۘS0egq_],sK,H%m<Q4*>l`Jm_6EymHN@p$d% $ͫajD)k74^\+1׵
؈kG~<m	l>Sѥף{Kx{ui"ڥɹ4/.H؁dP'"DLvX	42l&zͧ65e3ѮSjkŞ3jեxKMS[OA]|z0SSDz5]=opH0RezX0[iRK?jgH;BNE}2ȸy/gE?NJ'4+Dw;رS'\B6]
A!>Tbd[{;vXb 1Z2Vwk]?ɾ޺xMJƎctC7斖butK{7י!!A2WkPKrԷ]  	  PK    A             5   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine.classmOPW
 ZuTn
> `MA#,]ε;_1L|kMOs)11O=7 qKa@[z@4]Sq)kuL<4J2P-XYk-ѸM՟_y
q^bP˕Mnmqv3Dϖ1W-u@k4m[mVWٴijZ׫*;
iّހ@ci8[3JcL'׬nPxaٍIsˏm|׬ޚkL?pl2FRM<S̗sVwmZ.3avQs/+5iwU-3ˡ	
*UЧvAƸ23;XF.P<+#{m>O*kɭ/j^`,]qD1F``=CmQYca032,"c'ptRiN:AǺ֓Yh.;vDIhմnL=5P5j\
~! mF^?xo"KBNO'rNOB}Do9!3M"3n{;?jGmֳUHF{8{[i.'0pEOQz-*3*P"#PP2 GzG1.uObPj7:dxoҫ>EZPK9Źh     PK    A             =   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngineProvider.class;o>NFf
MO Z$sR2EIyɕɉ%9E%9)ŉ>.yyEe)E,>$a $DF  PKϏE      PK    A             F   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAKeyGenerationParameters.classJ@ϤmbcZ+k0EKQTBt?Nigd**(?Ez/9><>Bf23=@SH^%g
uEODy(dJ~wpU/ӂ$>:H~EgJE+vh!XgT3&S5}v8'O\а :<>\4*X`ezec5eۭb
K=jPK-#  
  PK    A             ?   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAKeyPairGenerator.classVks@=@JV/ZOQ[їB[,Uk;40T?.Mkd79瞻wov tOBsI>Lr_q{7Lþ#@ ,fqVNj% c3LI6ͬ%6t\Oq$
8Լf:	WUbee5'U=Ye)lzYJvU.uTޠt-C2k6&I`!FPfB]Q|R~-[pxkT|Lw%fSktQڡ[gY[~[of򆾃.Զܡ/1qHaGDqLq'DEqR)Ep2ѼHtP&<D6b:V:4?vMt&]Ar[QD;+7icxiVX`CeZ!%uO!o="2[nẌ <<2z%2dː0Qq c67w^ L 1͔p	$\Ƃ$%(A&1ͼ%\ER5,	4U2w	]=},xh}Z]YgOG}l= pDTe%
. n:~^
{e+"с*^pp1htp	%Tdļ
E	z:q^
X!Z/bH[t[C8	<£*Vb.kAz
Ww3U<sh>uxK<<nPKYE%E  	  PK    A             <   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAKeyParameters.class;o>AF(0F6̼;FԒĢԒԢbFtҼ⒜Tʂ|b}\ڢdJFF3}09)ŉ>.r9,@7m$kFs
M2uZjDS3)@v`32TYL,@
 ālf ͭ%_Kg+Ff."A Y0m K3  PK"     PK    A             L   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters$Sha2EngineProvider.classkK@[4Vw몫fv-xQa1;&6Z0-Gϙ79sw/OYZKE׮%mm
JEjPYSG9!h	K%;kʣ3RV|%yԿkWQGtȗaԷvf]:*Zo^|>yMG:^zŕ>o50``@]hBydX~;FFc`L2ӌ!̘,ߠj
CMK7{PA`*rtيC4hLb|K-DEg2LŨ8\9)]*ĘtId,H=O4tOd*9iԹ4)acPK̩  P  PK    A             P   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters$Shake256EngineProvider.class]K@W4~Zul_PvWDT?B TJ7ҋny'yg&=YVOU߮';^'ZԤi-	{-0|Ε*%K]qLs/]F]-O\/n*l|ZO6X~8NSyu#;z)00``a#̮5-a1^0F9d~L`1͘a2cxe7&U<ltUj/}ozc`EBYjV+fR%|Co|`ѹE͙LǰU11K5$yK?v&2]CO!٤*iHZs::V;x7PK
  `  PK    A             9   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters.classV	WWDT)ZQťZ!
B
.!!D-/j[vV)Uw89ǒs{}oMϿ77V	hX#V`z6lx\`v>;%-GCyYPFlLe3Lq*Фfph ؽ+DwG,k[V\:Of.ə̈YHE8+2ީ!Dd3hprBF5k`v֨}8iDF.3Sr`ktt8"LV1kF'D1#Muw%:eYu#\h,
[g0jibԈ/;ÉM&NueҦE-䊭Pjĭ2VJtX<2v<8<rJg+x,o.IztűTǎǽV.<8\y:RT?n/>l*%.>.TYn_z'#{e>W-[UT>wޓg}e @aE
Vjh+]tb!KoаowvcK׌7yVVɯfqMA#hűD.GNA N`A7AA/^}C	$8Dp Ip &hƼ|"x)*`AISOL<E43<Gpy^$xeW^%xu7$xmw{a}8΄řZd.
ڙoк|*#{B摞\,tf
2Sj"JcbΚX,WO"̓a~H|+ܔW~TK]yZe<Sq\6=*R|@!Iņv[w)ު[q}+>#eO0|%du^U!(yN4~kY>s-+pe^[EaB%kg\ùJnK.fGnTrX
x=W5Zf9USG\@(x%6]QU.̷GP7vcC
Ǉt4b}4.U|zCzDovYzr]5/z^/ѻk]zzMdֿa.GwXgݳݎ_?>u38_bʧA?b=[zOg)§9aG|o_>ۧլ˺[XO7aɧ뭟|!T[{Ӡ{!PKN  &  PK    A             C   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAPrivateKeyParameters.classTkOP~:VrQe:  2.td2&]!.~o4!?J}ZƂ4lޞr? "߈R 1^KTFRrH%d*yS"܊mt5ϰW*%
o
cC@]7KQqjȻdkj"|u4ŤJ4ffaytJ%vʺk]+{8ouEw+g+esk)p<xcaxKsjΑ\m,`$tb}YniVqk?^TU(q~8|C_ mTW*&7ll/yVҩ+-}2"m
CUNkY
L3/Nz.M;Tϛys>3d$9ndd "	fDe!qh 80a4۸ǁ4sЋEI )	)<Џ9Lp6Kz#o/k+m4h4&#IR@3 =!\0o-	
3hb!`}ybUgO0*xI
 2R=B5 `]N3zR$'P=EkI5*S;HM
Hguf1]GtIFAk⤶Rt̽PNA9w}GO!8ZQB4bA!Ǖ.PK	  (  PK    A             B   org/bouncycastle/pqc/crypto/slhdsa/SLHDSAPublicKeyParameters.classSOP=o?V?*"VAJ!AḶ{Iikfܧ+hB$P}݂cЦ90r%\d6#"P*EP#Hvk#{=KEA5U)ҫB.y_jGs*MneJ.rw!6v'>:"5cê7<twl'lҷvex啧OˢC+O;W5ܚs?򆬹B&cD)4gͫ_Mϗ.ζ&4\
i
5d4jOeYdVNYԻƜI*NլLj}s~pn
\U#!f@GtCS2id1A::pG0:c\2is_Syƃ|2I0dToBI)$[5|||0pnB!72lS?n$_1%*=O7aBaX5upi q)_hUi+ew~{wۤ#=A9&
!2Jܹ PKPW    PK    A             5   org/bouncycastle/pqc/crypto/slhdsa/SLHDSASigner.classW	xג#BҀ,,DW,^K jXۤ6=EAFvqH	n6ЙdpTg޼7f]zi 6'
,NeuqS:1쏥Llʤ&=7?Rjؼ!wYWۼo˪!oٽۘ8a%SV	YNⶅf47/,hJ;3$Mhfne7v57vGz::C{HE]4tP8]#8Ii'6zӳ4z:3;#VF<0lTI	5:
DlL(}@8usg_x=fPd*KK*sW1)GѤULUG@Lul2ɦDR'lҖGWӦ8YS>nU:t5
h3C	-V}y>E%G('䯊:<u8@BUXPɭK"@(0CW[/|~qnjhf\ZP,>*DB+V#Quc,L-S.(:F9p6m(F3ffaf]Txr_#^dnɚ*kE/:B!*ˬD󕺬GMAlm纕ٙ渾MBzLSc-e^:KJ;hq"Ks&Rívq/g1n,FlW7nogb]}EVhA:7FrLLt#)|vúciOfbZu+Y$`D)U%dz1*GF1"X,:ElQ&"h.CD"DDl]D;D+*"XZʋw{a\eVT
-vϺ_MCu~h!]mZjX5Y[:i{Jk<ϙ2_	
fY6:Zu^"eq>וofLז眪pzŸ.녥(=XE~66P2ʊH%cxp
õMcX%"	"{uv%RLx]xeK
	ATJXQB)aËKᖰUEFIx6k`WJXWIf	+qUxANB^zo`x#I:Y
xx/vx/B
b0|ą4>@2`bqacc82	7T|эw#nh$q7>;_c:1%73w00bd8Fb8p?pn܄2eU71L˹-%aSQRe(b퇀pPaWjE;,JbQ .ҧn 4@TS-C;vsM=zǡ7TLg	1<6[	3G9zn]xFO8a,"vLZ;c8c=ddq;㸆7",<*8.'p|GAp·EhXZOA ۉTOZ&	~ 5L/ṠeSK8	S펙@$TJ!ڂF=kYL	VtzzU'Rr+	D|G.ۉhǑM~px-yC#p؎ǡ~K`YYF3?gRAɿN&d,{z%'n=oZ+1ypM ?[,;<598F$";*^JvXVv8.k^x<X'ɵ$O
Gߏ
9$(Pw|mM^!߷6_o|ϴLA%<<A˕<f>A,rLNu1ypMUx,Yxǒv,;dg~V)
V?jˮhXhP+rz󩤭=MϹb6kxi
6
62l[i$,AӸr.L	S#|K0~a1>,7ąi1JO$C$lZGupUoE#kPK?ֵ    PK    A             1   org/bouncycastle/pqc/crypto/slhdsa/WotsPlus.classTsUmn^l4
m1b
R1Bͮih$3WaF;軾's7Ym1ݳs᏿ 8kѴ%(XTZ#Hv$tflNJSP<@o\Q>;5')?&婉Y$DPV$TN#W4hys)ܢS(X.ye\9uDy|AwY1î[j5	R}<Rȏ܂C1:9S'zLV%)WJ)9zKTjR/'jE$.d$$a<=Ҍmc\MWgWbbX={-Q3+KL!O,MxTW|"Ҝvjmڳ}n37\rGS%

y']gxEU3`8pu	;lѐvQ[پZdE>;=g٩mVD#O3|(]pa:%`=z,tC#ddGD@Zx	}`),Y؋w
=0"`TA_qLihb 8+`R&e$)LM$q8;Zvvdt?9ga?dʦrI#jUG;P& Yh0ŕh'wq6Z
'W=|RZxJ5,gzg&&\l&r¾7Y0*LWx,eV5黍7%pCrXnbe,B	VHE
sPyXMuou̷t+$YpfA$NyS*tڣ#;AeӉH։
:S\R7SZ45U@Nhְff}|ß-l^=6
<>~dOk|^:J)#
fn+ryl]WRb\|Vܤܒp_\xT
nluy`8N>I

n}ku^NakkHMtƺWCҠy{&Y7sVWUɦ}ѣ_NZ$i/%F7ڜ:?i0{_O1",'-j3bZb\cEn5̮cis4t\Dy(J
jw?M)oPKOř  u
  PK
      A             "   org/bouncycastle/pqc/crypto/snova/PK    A             1   org/bouncycastle/pqc/crypto/snova/GF16Utils.classU[oE>{2m&
iݮxuA)jqneEx@
 BHEBTTBQ USs^l7%_v;s|vso 
3ًD~gހQ5q)_<3-%Q;՝>XxFĞ*рV+SW,>}PMҢpaln`^VKՅjsZV]XT,|uX=XL
]]Z 	ޚJpua
xSb-}lXln}^65Hb`\+_웋תV)/h.gʭJyUfߨd+[[ZȅS`g R3:aDP<$f!E> 6<ߨrmVBzN@qs|, qa882m
Aqρ_Xۖ(Rmx2Kr1*vY)vďAWmx@9ؠ:a:EۍPg@	Ҷ!?lY첬q/Xҹk`1-VPB&+Y[a,&</nnYnqk!JC1cM,cM3
<AnroB]7ݏ((X!*IX8=#Iȵ;p̡m$EzWgYPd3^_zu+}
<yH? }$vAg!LG٤; Vm xEdRK2-ҸF%"dP_eUYFH?{Wf\RRzφE@LGׄ+WGW	u8	Yb|+qzI.۬
6%K葪ہ V
\P¤Ї-'Q'>/'''<Dsbqrn1nqܘvxgeJ?q kw|J}URn7.+9&q|ː9Ew%Œ%awA!n
agilRDR2Rq^?,j?Gp"pwwl4po|*kGMv?.$x F|3SO3Lq0;s)7L	r{C8~:Sxj	ǣ35f,&D}AWx<uZG]C;EjjU6-gPK<.  	  PK    A             1   org/bouncycastle/pqc/crypto/snova/MapGroup1.classSMsT=SmRP
-õn.iK%vp?&#RvlY
3naÆWt
^IEJ&>νϿ8$Ē'mHPLMCB?3i! zIeX
pj뎄Qr:FCb9ź[i$Xr	*2`+yV#+Vhd,h;-AXsIלFx%
K*uڞI}۬%FخW:ts:Mnt4v3#!߻K+Nt=Ֆp3^g,*eZ_zʪSH0TL8∊W%X.hgJvhEa4c8p5h2cx^f8p!4q(ChAgx#0Ef#p4[đ8L|9s.0fxaaLiGE<S8LGMTޏV~<FxOqMO}[X63r[2K!jT0tNwDDJY$|,D%?!=U|mR?c)%KeS(:)kC8X@0siJ
W0	
HqxaDA1䘥T֦t%k(<ntG5]1O~hF'~aMnzJ%pQiv]\cbU%xQ]|o
}Ke`vf94xrfϠ/8ۘ|{vp{}ҝf-=CgnRgG(fwp.ӾEK$$5]PUN+(~_' c
~PK  b  PK    A             1   org/bouncycastle/pqc/crypto/snova/MapGroup2.classJ@$5jkk
zYFBZZq51$MRBP݊s2ϯw 8bPJv:qAuNkĺN:q+3p*ڳ̂ţFsN1C]O<{j(9V0-;oEOm\$KjOH"N섑бcQjrπ
n@y0)IZ Q0BkSF;i`C)ْlӃ\w4V($$}
VC4Q^V^Q`8h
Nj%ϛ3rԘWr&}BPK5    PK    A             3   org/bouncycastle/pqc/crypto/snova/SnovaEngine.classX{|u?׿϶lHl#APNl
؁Il	KA%X+K,Hܦ#4Ʀ4[v˺uKt=(A;OI?={{_ k٨HkBs<@n\3CZƞ5I"1īZ=3CԉGF*؅$|I%wJ*{|]y+Bl]ȃmN^ⴊy2Q3ʋBRX4T"ۅ}6C;YۻHw}TN"c1\ ZZ*""2`Q5ҝG32695=Qc82;A-t*I2b(gڭ{"ٱ8v(c{{0ٛ46eeX666HERx`.cc.cڹupXKXR+mo `Y>Hhb<<ˢX
O'Җ~T8:=v(T"c_ `bLw*]X$<я3i0bO2=t/Hj9e|q"{-k
ǐ9>ٛLh d#{NStHJ7Iƨ*Sp̾cG#h_<r-{8r2ҖBdl8ԷFt

*H;FñVz,5<u*Dmg$u`PZ:yU&өD6mKE4CJ/ACl]s;!q\bPO	WKTCT&I
şnLH
dpSt[41d3m};wm+J:Nbm}x}4`gڶ߿[mfRhd,2iͼJW~t^4s /+J Z涤qiwO܁4.aˏ#Myжdl$oSQ71M.6/YƠvP*o{_d(?#G9Jgj-$nѱP,B'<O|	~v'Fq/֓XQkC
4kТAmܥCD5ipTa
`\S<ipZQ
>c<|D	<vԻ P>!?oתvn]t^Z9ӅoC$C$YNouvJUZ~ܸ&N*4EﳬQi>m7UyfCx5)vխ6Dı;[,oX`"ʀ1$Abh5	h'XKOt]l!	$)<M1j@yA<@ 
 ـA1p4a!pn(a0Wj:#Pf@'`3AAp

|Ӏ*vB5jRz
|Z>xS
@ހ,Yuр0|\2`n@/|ɀxxi[<	_v	B7	Ym7	BU!]~kNIWNx~mwt8g>A_b^9'IVççtx+? G8:Nd-w O"o!Bp	rJ*>"6_|C=JU_c::~,"v$i+-T1ܫL~a9	|їY*J5?]TǊ	+irzLФ4 nFu7e`,|T@zimO&vp=4Vf
D?8>4V}p=<Vg-MYv"`LU|+S<_Y
H,fN%(2ILٔh XX{&d6TjIX҂̱cuN((]Y0"{X;[,FSA"K4[T<}~5Gde^Qk|.jƃdj_U_wlTMŔXL3[y	`06l=)y/X$h.ϲGy
+CR%
)XjhI8-`if6	{ULwf3!aS{40tATnjLf7,=^pG*ciģ`1P49
g נ:b`5PeÏ}!,Bz@Ec{+(1zR
ETvxq=ACj*Gywr_80JP:_R4 /a= qV9+^_?+Yy*VJCjԆum Wh
^7BRU)IAYT{daCfI{M-lukORí&S

?wfXb߻IcM-.&FI1tZ(N{ˢ餑ZL'β{'8=4GjWY+B~ȸ
^+jhE0n@'#_v/+CCFo{g޳ *wIXߙv_eBB#W~ըb
!Fp%NygJ@I @~}]m=\gXK!5PVAUVRn)Ui%#~Ɗ+OyPBYv2~HPTTT!SP|fp 0ƛex6)xOr	3mcq4΃8N]
Z&hnA+hRfYI܇Easg1rE4]LũBj8vzibbimUȡƚ|{e{]GcXJ;߼i],)hՂt	RsR^䐻CCN9ȩVFpѫ,G%8+#z	Nȩ+0iˉ!>Z4\"Lpgk*J[u2.I'0_J^e"[w<镖ۖK7[K
i2
+SVSsZiR=_\R'ą1
!.'+x'q
s7<;́4هs <(U~by/5=DȔsPjۉS\E3+\`*R2)?QO]PCVXERMI¼\|t71 
x[K,)0n~#u <DR"W,ESׁzJ^ɡJjgxݠ<	/nlN|/fYXhmgZlcuϋ^IJlƉY؂y =y
V[^W1;ͯ15u4Q0l&6-/jZ]hŦiuQ/;]mqv`=A"c([eoji&JTQnxpOu/GyF|Zp\~U.}Y_LR7@}>Wi-
을-Z$))ObzLP̲ O;6}ł3?\a s'7
w\oSKSS)}4>L6Q5J,VVOP
-fyt<P4@+"8Co(i9Q8_SeSk
7wИ=Y/^Z8OF=xzgY0 7+#>/(
~`fX|vԉyBqi<R8U=j̟G<
EQ<t*EqU,}A>-hhO?oNsLwxVak@>?e {.z-S]\U+
q|)+dK4Yސ.K!w ;rFلN:lҹ1t<.*գfBv tVgf)MB W4AgGAta
tY965t|`QgXE6"GȎ1<uF#?^F-(~%8[(5uK)Y3h%:QV$ʏ /GG"Gm
c7wKyMSCamvM&<j_
zUd-ɳ!ki?{"x08;1tzD"Sg4Xr$b+lKv`:TbO埽 ᱧoǭ~;i]P@Wze̖D.[eQeJVw
q נ1^0}&.&^m-3
w5_`NjaܙJ|5[ig|9_j:PK  %  PK    A             8   org/bouncycastle/pqc/crypto/snova/SnovaKeyElements.classoOPƟnJQ@&68aݘ	J"%f1Rn?oLo|&{gb- Q:2		9sK@ќJ8+/Z+ڢ*V*8Qpd9 -a8n:u0'[bm)YjdoQbuciu2Jz͵\fT+<v֍U{bMVsKQ2
өW]ۨUl:U:6?tnNޝ̪/UqkRg<9lS+Oƀ2-jOS6qP;tRn"~\Wq	*z "]*

n-.Q0QWT %M5p%Aᱽf	ɻ|M\f%;D]D#y( ᤓZD`J}$s$ї>{c{z`|BR%Cг|$ŵ.&Ŭx
)-V8@H»vDd!`!C&&ҐָU8';=v̬g(.nĀ, <Nd9yW+3Ӏ%[WD"F{z$#@ ?=A0&	LPK    PK    A             D   org/bouncycastle/pqc/crypto/snova/SnovaKeyGenerationParameters.classJ1ٶn[ɣ޺zjŃ=H4I*[)( Of2o/ #LenDh//6vWJ[w-0E4;ũTpi IYo9﯂0/N8Sv+;V\ez98Kf~zz
e2FBq!ڄK]NLwW;~nz=PZS:wUPKAE     PK    A             =   org/bouncycastle/pqc/crypto/snova/SnovaKeyPairGenerator.classVWW
	L25iJh`EL
K.aH"a&5v.VՖM~oszN{'!߽7w}ﾙp@fm`qM7qrW-`.ҞWsjSD#`Zrf{GtE-	-al 
ՎڴkcꊑkQˎ	%8Q6|MDqVdҖLvEוl49'+n+-T;SbjUnUAm&WU%4zhLlbl":J[I(#DWDʊjD|2c;)H)2m=q0̎&"N$>͍F%rha&%2`&rP&i`2Ɣdؠ:EմHi<zQcf&\cR5:'7̊Zf
T2ڳJw05EQ%c$UoTϦ-hG"WB6/3k\·g-kϿH$3%yFwq^2
W3v[SΤ:j-`kA"~MҾ#gSR绦8xetm|kcK"dVsp#m[Lcf
	z#LB7QCDwh"bM"6[D-"UĽZq^{K/:\jĥ(+TtPk \ֹ ̫Z\K-6f6+]c:WJKuQ%0x?r@
TǖfvEV/Í2CUN:nJknfaшGd5/
[P&cí3bEVM(q#*d@6.H7(NDeðc.ΐX#!ŐfcctaG?Fc8d^$2dKU	xVBޖЋ%	;xu7%eW܃ސ0`x)axN>%!^~}@7MGJf+q#:B.e0RYRr2.7]kfG";HCNgJw4qjr4>=P5+v{~Þnw~iO:YpO4ĩ1j1CQE<98YV
WG-DI>!;x,[sYgjXgĝ!|
gب'bOOZGMs̳~1_vg1Ÿ;E=?S&I~)Z+-~9Ȼ5Ny#/ -hIoGybIa_z,

CF,f1Z?Y3iLN㋳^  K8Q^;'PKa-  +
  PK    A             7   org/bouncycastle/pqc/crypto/snova/SnovaParameters.class_SWϓ W@q
L
HBH	b{ｗmqv/޻D?hy){sy7/Ƀc>
 (P*L@
,\@VP/`N4
h,E@6.`)KlY\'إB}*
*@=ڽp\0)WCuc.,)Gr:7aVw\)!&U._,,JW؝_^g]dˊ՜IW2cgSbH
KM2=+Vsb~.~b5'-q/1nH6W\;1bb5'KQ0.~b5&`+H:&(oS*Z4Hn+Ѫ4mC}ވ?FdȩRqS(/_sqrtJ_)޼-~_D<(]A\
h?0ԛ==yÑ?op/742;$DCaAExp2A6e4Wd/[AA\5='jجxt:r;RKSa 1B#"Nm0
+Up ňD)Q@T"ՈD-bQXh@8&D3ъhCFA툵:zD'	'N8q\y .D\q	ReW D\q
Zu7 nD܄qVmw D܅q^} D<xQcO DA<xbo
})Y|yƷ]e㧁YYYYYYYYYYùs9*ΕNzZ:-͜Mk8[9Wsqvp8rsvq\Ϲs&΍U@!AN~RF(`~A?Y=$@2n_9Qύ{-
%3m(Dʹy0jL!{fRL8gd&rΰ(reQ,7[!Ϣ|(-r_kY5}^byz
ln(0hQ6%0>8:c8|>ϣW_a|
)FxErt],ŪgX<;;3lLlK?F(
M2G$Pd&Q2ϑ2D4<2ԣVD&zyL$:ɤx+.5R)KWI\=1RSI7H.-R'.$5S_ߨHeYR]jᇤf.> 5]DtR<mRTZ.ե;~}F*lե~JjRR=WY:Iu_:Qu)S
=Ÿ_ߑOg}Mե~Kdե7r=x?Z@g}OjR$uRR|5F*"եJʮE=EPK)'    PK    A             A   org/bouncycastle/pqc/crypto/snova/SnovaPrivateKeyParameters.class]KAmCu4 "ufWaUARtGEgLp`Ιwyp>? cA1ꝖLw6C:}zntΐ*|3h<˻97<"j_ֽ?رè-GA[4V3CCc<:?u+]-۳B1k*4+*t>`VA5KN%lԤUtPԡ #dkXaCC
آ^PðOyzEUQ)+ e;HR.+7F#T!C.W@|Aȧ)IdP)":97PKVTQ    PK    A             @   org/bouncycastle/pqc/crypto/snova/SnovaPublicKeyParameters.classJ@-mLxi4
Y *BW.*%&1IEqP(t40̟g&9?_ ː+-޾̅%CB4w<W0=ݸ.CĽX} dФtߊzf<V9AGKOh6øO`0-'>l2ΎC}<llSY؜?@U@c8Nzc)ߩ&Ұ<JRHh ePQ"h4-<tҮ$͔S ;HR.wlQ5B>hhd7T|ʟD	Qi"j2~PKQ    PK    A             3   org/bouncycastle/pqc/crypto/snova/SnovaSigner.classX}`Su?IO-b`m}X!)Pi~
l$6!mtYe%͚v6
uG׵[[׵ۺf(s,;?-9swux3s ־Oaag=ml;i$m"}R	jA&$E"rO(RT+Ү@6#9ŉ#rY;bI
O$1xJV)/0l[DgAwӿES'12d*S2(>>18LN`؉Db%$R?ll&6Cǅ"%RCH[hѓJY{aqJVzڗڛAkM%jdqZ)iP2:Hdc)HD`0z<9vӐڱmHU"՝`Rp@*Xi;Dv"]CVtoMYlO=.E0c
kdL&1dIv'iD:1jetS~F986*z#,o
`
Zs{3P^ WQQ(6OW0D&SP79/c}&N%#XcZELpV	QBLf'Kb2ȁ6JSɬ&RLv
'ǳc]bҧV>k(ɦi[Yf={w- v+q*G&Pp!7X(XEGfRc=Dɑ̲IMPnC{wOWtxDwXV*,Өw-צHZǗk=ql$9x9)T
X)ݪOStj\\PtA9)Cq+}|,='1$#QŦ=8&"E
]:td'~Z]ct9'ŵ=e'K.%2РI4kТa
ޡSwiЯABch0*`Ha
<	
Y?p맿6֛M(ꇗ_El/&G-״u	-o^䯣թGV!ec6Df7[}kn݃ݾ=]ˉz=UX{
f.{%X޵&"NuX:l h'Lll%%H:_С~QMK:/됆萁s:
L$EV{ 8He:vO&QHťO[!:@!DUW	U:Z! ::tB~XIʆ*jp/46ӰFV:l_a/|Lqs4;Em	7OL|I[¯nx~w^tÓp	f.y}{Q#rO_"2W<x	o	I-#{`_%{C%@q$@g`3	|`s/|O $|Uo#w^#7,1)_WN
Ywlb>c#>Ob| PF_tO>t\xq,G;<]ȭy%/C*"xA/<c+?*?ʂ/c`M%x?4*_'.2FdEj2'J0EHF7$-aA[CScw#:A
TVchwG^JgK,Mf3lAhR,a_}V⊫q{q[DeqR|YfƝ3\sDk<o8Ͱj7kTOw2܆m|1c8.^e
_*R	-_ek	~Tph&5*ZX!Fa¢dje[+eyx<C%˒MiQ߃].#;hn	QR#pΰUвhhzQ.Q<
`B9,;<
Mrn3ܤCP{{xgKG ֠"~{݆CPgNTHMZq)=ꗞ<@}޹Y)uީDY%VNYc?3f-aVj
z̕WᲸ}'UcV*R~(pv:^h+:ZfElQV\08RBszruc~]AØj26l:]ު?e
Χ`Xǃ^
ŨTs
$oa.۬s|hB6\B1CJTBP4üWM<k
fX1;3;y7xP)(YN{ŨǁwF9r,:p__@v!*Tr󰰊"䲑E0s,F FS)=#Ո	p?hè{^a-4hY3>AAӪ)AJ$!BI(fGʶGe٢{rzqcF
N

ePPN:B6k1
Ō)&VdтF8To~s3P}c(sbnU87ho&V1ma|+n%S_Zo
2bq"oFޏEy4x,s?2(d
w|:\6bVRnnVLn(&w^%E	X?օc.1ꗰFTL&<}4F&4=oj/NsO5K
->yp\U9
j2T)`4჻=+	pe8<m3?>4~4xX|CP[ЛȕV܉v;qèav]ס]7q\bBJ_`MHpna\.F(? <wrabwBzXl
z;qWFaۛ/$;B_ޱǙB,׸stqh {)tQ:iV
YyKztuS|3O
TÇjx9:CYߨ>a.pYkTϲ
x+<ľ74!l³WqǱ6Y؛Vh/
Dι[%.FR1{
fm
{d*o]{(R/R?(R?QN5QC#wQ;X_/|owY5b5\,=Ԁ0hVɵ1!0DrE5F
:E\V6PKjm-㵶bMF1"`X*$ޝd8yo?TBʣ]}O0N.
r
WNX1O}'W)/A/p!(wD#_6ÝRMbZpj@̻C8	kcpZx~SULw4Lw`,ϝ*4sNjQ8P9 IzH&l+>zJ:B96wڨ.5}POńhL{bM)v铟sĝ
 ⣰TbWoN@O09Rzstû|ڪy2,;ut38wj1{sZF}iu6ô+nfXx˛aPK6  Z"  PK
      A             $   org/bouncycastle/pqc/crypto/sphincs/PK    A             7   org/bouncycastle/pqc/crypto/sphincs/HashFunctions.classRrW=WyH920=-vWA%\<y<HhƮx&B6TeqT> ߐE<G#9U&E43{o׋_ bE[RpO@ɯ7V*U^J0V`hw\
SEf?n\} f]q=#`:,e֪1Y@?<k;o-rͪhsO,1
½F[2G֎UX^#vfw۳wm:Nnv|""Cr=ۯnJoѰKgS]MO۠]veq؎8^KTTqR)oȨ>~}ÔK\( dO-::I:Ցbs::& 8f)\`J1,Jl.)JPMM=0;y\f3Cm[6;1cOEtOoyX? ,cbiWpmsrsdOղdğc9(M=GC}((|4A^wh{bk(P^Yb(iK2l͍qPjk)⫿t9#?(
")_p4E0b#@}PDB91ʦNV"ṁUZzƇk5N˞hTFa0$Ɇ77l!n̓5TG|T)ybTǄxiN
|5jĢF84ODSPKd1K    PK    A             /   org/bouncycastle/pqc/crypto/sphincs/Horst.classU]oE=kwm2miRp\6-M4%Z<nbJ$J /yK_ BJ$jn'ġk3̹3{z qQ
PK-?;:}	 	˷}kJM]zgz&;I"umj|![3oN3DIʄ뗧'i^eWJ![-UrJ}߭a0a
ZZ\ֲ<V=7VSsùJ~5Vkt~yu.ʕ|5}ԯV^Tk<iy*uiyr[<Q ޕʒN:._GxU&лE/?
_e`cZ-tB&NcD/Έǋ&6я6X(RVͭnw;ݥwnH'#	 NXX3t>ԂC8GZq±]~F:ͼDVFj#
q }6N81nbxtIP`w+Ȉ8mbḦ́x(q<D⌇rv<D8ws=6[eu4V!ٚl5cr9U	y@@46x$nRecڪrkbNC3D_:A0Cc3j&Âkܠh<#0)=FI"E:ƹ}
SF+2ަ<dђ0R~.):pѫoG$^'NnGcQޠWY[IkGc⒴Pz"T8$Tߥ:hVLd;f 	C:%b	fkukkl	)e'h'KIR8; 7R[h2TS#^G
%ܔ	"'#Yz8!f͋SFv-NusW8FzOry`Ͼh){2'|$;Sfܦz'bd16L{z;HX;|_*7t_jЏU"}!}ݢx[=huhLS]Ncv.6n?ѧ}ZPKdVz  `	  PK    A             1   org/bouncycastle/pqc/crypto/sphincs/Permute.classeϏDǟ3vx-l| vET"RKwY	"8YM:!qV‪\@z_Ԗ77|獝_ >94650jfCVk4w*ch6PZs3M}KzϮ}NOw5ܚQumu4$dVq5'd;whzI7K~|#9ED^ݏ(~܍FQ7ta$PؾwRޠPNFztv1ևwa:3ߞ)Гׯߎ:Q gS@0(28n.^hsAw<Te.@EEըo*ڰo)y~ V$4J?Qݔ}
v?*=Nh+`MQ,kS$BEq}
ڛ-QUxPH)b)ߧHI93!~ܟpcdW͊1\f-]~`H~9 '9?pp /y?Rx~P(E,fkGB 6[&ڏR"dm**k9dUaK"*u@G@E+p3+P|bV+0ƬV],-tg3_2YByQQC5SE]FL%W6߽v-zyx<őYg(JM{葠STg(J/]fˡ+4P%=Jf(9V-R69RI]H(H=,OUK{+,7s0[>9'Beg+B
UV9<qV{'k뾜ϯ5 PK^k!S    PK    A             :   org/bouncycastle/pqc/crypto/sphincs/SPHINCS256Config.class]N@ Y"41K@C	[H85V,!-B1m|O&| 8%0;$~|~@.	KW=A
ZG5WUEnNQGz!2Q[1NuQZt-VOںJT粬vmrZX$u41^
qj8c3XG]:4g/hW3g1"6nndyA|?Pϐ  q8S!}Kq3o`L 	(@@:E'8v:G90wpYf\;/PKO}"a  Z  PK    A             K   org/bouncycastle/pqc/crypto/sphincs/SPHINCS256KeyGenerationParameters.classJ@'1ƥ+몉X7]Tbb1ĈMd*CZ.gfw87 p8C3"u)rStE(ruK<ER~F	%$d("3!ʳ8	sO`77R5LTM6|܈{s
2Vf.D2N'ݾ7bl{sY{#u,`h4`¶`PcBKzk3VYշuT #P2X>'PK%    PK    A             D   org/bouncycastle/pqc/crypto/sphincs/SPHINCS256KeyPairGenerator.classU{S@
Q[j@}P(Pu&&5	qtFZo?^NEvwowvs|
"3tG{n2=SAͶ5OÞ"7|{9Ͱ/-pKY	@y\*hQzjjY3K{	|rB잚d*/7v'<;e%k=]s2Wu۫:x
wmCOCĽ-6sm
qml5?WzTK; v0df6?r[ߣlُ[lcYE;!T6-rV2^h˔aY{CI1sR(AIP$쒰[BH^	$K/ငI8,ሄǲ=Ȥ?ͶUY$Aj?vN/A-B~;b{6܀"٭T/0~GU:-V\j05{jq"t0`|
ï`@cPY`
Х sby^Aȸ$ઘ]S bV#H	qC2NbL ¸aL82"+#;2HHDF&X/NcnLdL:tYsU4 =E
.BaXU1CzqeuA ȯa*:ai-avO:F
5!ؗLf}dwȇzא0+LO/IVD<.ԑ($OxPã:DbwQ=%)8B{PKΪ9    PK    A             :   org/bouncycastle/pqc/crypto/sphincs/SPHINCS256Signer.classXkpֻҮV+i%{Fud$(&`8`'Xkyc(CHZPJҴ-%vMit:L_L_tȠ{w%	9{{9: +c
#m"

:l Rۚۆnض;U}Wc#q
.sms4;fx޶Gq/
i;\pr+^wޔg&vtVdM	Fak-'3`)KE0\ΎɌټvr~ڰ- 4f;7r\mčc	d].[c-V9roJ۱KtB2D[y<v<m|xm~8?*&͙BxFid]"O$毀U[{1+w}il|wnz(mfzΑ3g{5'adkצ0rY7GV~[B~L@3n}P)iLںܘw|ErW#Y's-kIH$L%W]\dr-srAuۿ;z^uEm-e	oAs1Gr-JGXq,*ތuuζvYEE{<q'#vZʵ?X"˼X2O#
dxǋ^*V.ˆNAڋY=Aemd5>q65v+gem
zk7TVim2%32V:e\-#)ckd\+JF>5uY])ecYh[3_7[إH͕m~YږS㲹hici tWm\n]8x~0>aR5lwƾxz8e.,?ji)-4%88d.1%CbINr75Y&h,#k`hP4аKi@HukU0]VbL'Րz5|9
&h،(h	E
&[Ұe6r4`\C{5\؉GbdU܍*~A|I*|ovwૌ|C%-35F7p@0#)|GC<AyJEx0Q|1{(#_`1z^F^DYM7nߡuUf-J7g-䄀h")tq57@̂76%Әh(Bgp`?.n-b;q}AMUJ(c{h+Jf㮽0::~XxS8&OOI,gkY͆2g+C*M.C~)M
''l;g0yn]9q:\Ɵ'Qxw
[]!?Mb2`qǍ@V	տ4U#`JͿ7cl!n}4|T2(&C1di8[!\`2*~.J*3S86PW3%8˔dйbTBG
q9%4S@D 迄"(c&+DiEI[hWF*K|SiU'H J<ASƫArE%	$a38I<ׂ	3Tf>38AZQ-b҃EwdpҌ$̰p[U1[_ks5O	Sk!ԤCT|߈I]3x;Ĥjr2iP'Oxz+jd]`BIe)ynjPWz)X^ #kBVfooya\хR/0<soRy$ra)H7틉>IUxk	n95*>1|jGg)Zyۧ卛cf;hq14fD$\iHL6ͦz(.&lƌf]`jk |uSql\4Nt7z̈́#>XRɰљar
S1d<ajxM]yz;p +/(<|҈"UO]{\V5|VNG[\+QJB$ujg<6AS)Q9G{viS7|d,Mf,)|j9[|!e/e~GfKw[|W)t^'Vq5t~YՁveQ$[-jg$g:fa葱c]6t?ɗIɐV޾ܐRⶊD.th:Qx=`OCxjVW:&
2!=yRIHfO }v]rH	RRRJ:b,ˍ}StYjbF0elxJ(^]2Au]9\' st%EKd/TBJ_Rh=F:Fz`$)Ʈ@@$bbV	?nG6LǘP5ŭzQJFZ Obd`1$$q2ʹlD_Uq
#

T5[dG>w9(40ds?x;'d_tQh:CRA;B_BPK
    PK    A             >   org/bouncycastle/pqc/crypto/sphincs/SPHINCSKeyParameters.classmP]KA=eEO$C؃Q/1mú*(}	60s=ޙ`ڰ>`H9rflx`m$)R_R8T6ZBVD
':a?I-gx?r\Kq;NEѿ

$00oŽcܤ}PKWjt}G<b`,Ew#]UZz S-Rhql "bO<JQN]JXpb3ʏCߢH(&O(?PKM<    PK    A             E   org/bouncycastle/pqc/crypto/sphincs/SPHINCSPrivateKeyParameters.classJ@mӦjomAP["{ZccR7BJAQ< >8ID{;|;m2Pj
rBy/P^G>Ђ~X*G^D=tcnKx=>9
%*a8UDhk	cP)&&&,s٭}vnγ:6*((h@y,Ylau:]/ؠMdg<"iQ^X+W4<8f&)
tPK+    PK    A             D   org/bouncycastle/pqc/crypto/sphincs/SPHINCSPublicKeyParameters.classJ@mҦjVЋ
{ (["{ڮKƤnBJAQ< >8ID{;|;1ְPlsRBi?a(mƑbp}eNTz(`pnn}>'LHLNrӱy2
"A7 {_hq	Cd׀?&&"MTV^PD>D^rVPFC	
òrRa,6
7([@ڶV[X}FM6ܞ:`=W@:A9/PKm*    PK    A             .   org/bouncycastle/pqc/crypto/sphincs/Seed.classSmOA~Ђ=^yѣM 9ڵ=< GI~R4	}f癛ٙ cٻ5g͹t lU9ĥR5&	)ln5͠Eΐذm˵|}CdiIqŶpܢ_,;ai/Cw[-/[_.Ek!􅽙qJ3F^D`e
6}4zz*/$u5Xv,UfGM+(/XO0C)zYB5Q}!jDR]as9o	qit^J~A/Ŭt9;֥
+mZQqE$G3%ٜ?GM[մ<~]gerkPyuA.
&E"EuBq\)
ĀRX:pSC'4taXC7F5ආ^ܪ5H1F7,SQY~Ƶ@a!=K6q4Aћ!XAħ
Ay
4/%Uj%$w*xӈ~ƝXsLq^~{&&6C1/,1LlG!sp\e48LҎ$ԂX594O%TJ)Εqn>WѵbDn.֎=<ahHj4PK|~  -  PK    A             7   org/bouncycastle/pqc/crypto/sphincs/Tree$leafaddr.classPMK@״hzXx"x7ZS&fB`<Qjzx31fG'Lu*@c]/9˸x.Rd(/g,2Y%\U`srUT9SS*J!f?$xj駫.G^
&!\8!C4
@cmD(ñe\)&'r-$Z,h[}=ul4o{6#oQ|l+kt
۬طH_7PKx    PK    A             .   org/bouncycastle/pqc/crypto/sphincs/Tree.classTMoW=/372&-SSq]ÇHHdOib3|X2R,E!e$ QA 6]+	HU+?{;y^98Šd.1+gĐ:gط#W楡moN0XAXn[8bWAaG:}տ~Zr5m-v8FMGJFXT(njf!jjT8G=!H}vń@ХH!_,9ьG7Vd"'O.ecRrk8R&cY)н*w9˞DJtiɓXAoh8Cs&>jB3!0b&idLp|bBg&2񅀋i8,pG&fF$'0)!bP50
?bW׿[K>]o)!CUCT/z o< -K;?'~ֻP<mp#v^I.]WsR6{RObJZ{BekgԊ7xWĻH %CƘ1;iD|/>g')CO^v-|U*u?Ӌ=ES,W}319wԱXʅK%\Zw,h;;6S{cI
MrסrX"H?ZW_f	Gؙ
읞pD*٥ -^*pf GHKzpk\z7${Gܙ|9vtz)&WsS8R+ӠocN.APK*`b    PK    A             .   org/bouncycastle/pqc/crypto/sphincs/Wots.classT]oT~NlخG\Vo&MttQ5)Z]ĮkPUǤLbW*.E\#q%84l}s\Rnzn-)=h؈+ɫ͠^c`
9ZGk9"DD*+ח>~\ĭ%HNZeFXp4^d0oۮr]^{!\[[㹽۝;uw:au$	vc=ϚJsCR::mWDjMrA^"k	Dx6ؑXd"(R8Rc)n+GJ'J
7!WP5W
$HxQNB1:
:&1c
]ӰEaA.7|JA궶yT	JHRW%!~bE\gC|7Y¢
ph %/>C2OGUc8WbmmHQt-T>;H};Cd3\!7OZ҄NeiA4s 
qf,͒F2KZ o[i /d
b%O4xm__uGԩ1<t!4q'7/MiRAT,QB1/4x7StU.lLHb,cl~վR^YPىFqw˴/)1>D'Et_M;zo3--b(ҰaG
rlȄyg=Gc㘉Dr<LhPXP$KpP``gZKO PK]Y    PK
      A             (   org/bouncycastle/pqc/crypto/sphincsplus/PK    A             2   org/bouncycastle/pqc/crypto/sphincsplus/ADRS.classSrT]8DISCBo[
}(jXJ<0Ca(HαLg:k_ζN ŏzI'ןX؎m.Yʜg^9'j4w4ZU	(4Z*,7v8(4}@+[մvK\irAB]ۯp^Aq&Rr剐ߤ85at(.GeCVcz{!uu%umcط3uiæNg`eV7H1 sA:txG
iwR;qܶ	=Bgj\yAW=<khAjK~AxVwU+rُBU5riD;,L;%)53荅-'Zj`bY4Srms a	z@bpAYsYrI|D>BIܒp'_-nOc[w2>GNF	70+&2Ǽud\EZ{xB	44iH4*fà;zK~ȅ{lؠ|%Hgk%UElQ_
+" {ߝꗝʿ(/	!K'L/O+l/їL'O(Lg.e'*mbhDNъ%ODXbJd<1\ogHqorsܲBsYge?|eǽ:x>O&GY<SN0}8z[N
XB 8"4W3eӵs&
~񛗆WPKL^^  m  PK    A             2   org/bouncycastle/pqc/crypto/sphincsplus/Fors.classU]sU~n6~h)-ZI(E˒IJ$#npzå8)#0/W!nJLK}< <֘<)AЋr0>op|3 :sV{{2L9*AgAz(Z:H+a(F'8kS3\b6aY;T8%r>T*3D.GT٢J&%hK٣[?%dR
<)LNrz*%A{v{ɢ]*-v,g蔙RT<+au
eiI;AUt9

ergPD5STJD&9Cŵ\>iڙT*OYi]J$|ݱô\HܾZM$Yq`p_|uy:t,@-(IZ)g]i|+"z	ڤ7VI娡Ji&C`+6	#hhhн}Ի}XCOcx=n'Z2ppi멼m6rnkDe/pf3)W
бFZ0&ЫuH:dA[x(:Lxu3`dCTAь}:1>v?L tЈ:aPE>T#*!`TCąna3`c80p!3(1ghORiq>
CVa: C*4#Fxf@6B[/qHG%
[>oiEyyx{TEDx>')zR*fM)
*>kISn7EW")(xƵQZE%B9田nRHM/*[8kD夒 aT	<*UqV7j?Q35?cKdo:}O8/ֈ@T=$lu3!# {VSv')N5dǡSf:v-m\x릻F;·}ju^CLŕ@1#b/mh2l`Dv"'0ulfpíi#}$z1o&^Q:n%Bk
ͥgf
k8vQj0>7Yv+>N=-E>]âc Oqsn7*&ecuvfDjJ܍џzsdP\)\C+U )?UNUyd9
QQ<1q&OU"m\ATCn-wU|$f	ݱ㿋!
1|f0y)>7]^rtI	zz~"'ʆ9tg9lmm-;[֊䋆wp#Ut+
៦t&9[,%PKŊ    PK    A             0   org/bouncycastle/pqc/crypto/sphincsplus/HT.classV[wW&\4Ӑ1!-mr8Emb_8d,MlŲhԆ⒴rkM/)b
`Yx5O<kCH1{~}?0/!д?)0%s		
-MI>RbJ
IjU$8r\Mt|o_Dȗm,sxg4(d2WλL4S*ǣ^q$WxM'?}">B_N6KqyɓDyDB(3^8e@[e	u=Δ[jfKIA0L,dI	mϞOst7m؉6R:NQl9cX&j%;詡Knr.FlO#QϺnnx6:o8	r5ٜKKoV_¡
$:
tp5Uz'{+isg+Jhؠ"^*9StG;KcJq-PcGӮK,cW[b:6􋷮_Z%MoM
SE=wu~Ȅ绡Ig񨃃WR"%^~"FǇbtTVaWGT4د"YEDElɭ
MkתCJMɍl"6m߀yUr0EM%5S>mާjn}pͧwcp"wtIAWr"[;hb'>cb>ģd8`4цS&!"D&^(&Da&gxXC79L|&o3DzM2|_>O!m8&q:<mk8g:qa0u$-:Rb8o0|@.(÷c#9Kq"ep cfx 31<c5Ѓg<
Q).;NʻnrPT,vq*Xj;Y¿i*pd7-n^%4/xi	]my?ezF]pŖ+~0-,!*ᯄ6-SHnU$ķ0ꊔD!Z-VlFKfyܰdRoA"_$_>B*j(Xl&1}U'rgoZX=Z:[Np..bw>B"be[x։R-u?WnۘKO/[J@Y9"	YH8J;	PC1.Hމ_J+'zg9Gi`f_?$iҺE"
RFo=`6>QdTt;Xq]vPom/T
MM\JYu[B!n_Dήb[BקCWm}5]!/ӫ0)]ȓqKı*Gd.]COC$?/j5E%ޠV	4K[z_]Q7b6iiJOOk?\+26R9͑Rfjuv`EKQ)
W'nAIgkbˍ3xf.\zǸ^5wT,UMH㇖.ڨT;P)<nTms/WIF-L.@KHKY*HOxy5񿓝{J zhW#I&ÇT~?[zmh@+yybP6mC^p&zy8	#Աq뮳}(!m|Jd THR.>PKN@  F  PK    A             >   org/bouncycastle/pqc/crypto/sphincsplus/HarakaS256Digest.class[S@K^Rn*rZZK(At۰@dP?>QPgCQ_H2=gch!ʇCmjAT!*UF^uY˱C3m``TSX n@f>WbycC]wZ,-:zl"+G5)g7c-Lnf$d\R	 L`q}3WtˎQ1x m3'
.LorA	K.dkڨE dJۺxeq\^r}M#z"E@Qֹ׏jעFQt1l-ǜahO]0ZY0L?.uCӐDv\ѐ@n%PAG\Rc %(	a$~&ȗSİ9uuV$7somA
3ܤ(J:!iԁz!3{.ЂiMHR
"o0{QW
N
0o[k9r>:WwGrbU"qjI{)(}![!lWY
؛Կǖd#t%#̦09>\mldPKϓa    PK    A             >   org/bouncycastle/pqc/crypto/sphincsplus/HarakaS512Digest.class[S@K[z!(QKrVLGA鶍ILew?PT9{gn6?~~`
K	t$p!))C4\,vAAIi5qX&C=
^]``TԶLܵIi^*JJE-w,zU%>$ݲ"E뭊k!O_g~/}a6wm*j.y{\TlR&V*g]/
l<ț~ӓn~o3&xIW3Fo-kt<NKۈ"2#]mr4L84J¨0d;Ƶ)Ԕ"\RȦq2SqL}q3Ȍ<ؤo99aU]̃<M|\z%L9WDNC/4
:zpLC
Q
ʜ@Ie4t"0FL.ȥ00"-̘2)\e-eu񊒛K 0G'N 'LoGC.ug#]C+ٍȿIxJCjp!	S;`yWft5-L~;$ZD_	9E]\
y CH#/~M<1
'F.szox]Ci,H]ge1sz[wPKV    PK    A             9   org/bouncycastle/pqc/crypto/sphincsplus/HarakaSBase.classmX	`3lI.pv7`g  $@afҊ*R-hmjR`"VVZGAUlUf6֙;}|7{	!c.B.
G.\X>Y
eehuvr4d	]}-*i*/bK/+
T@RQ\ۺ'54uJDh溶p>X")ʐ#Gq-C(iuV-lزjnc7<4i;eMM
U]_t677mj,;%l\*z(}FcØyBº5Nwի &uu
q=ntA짷ttֵ#׈%m6C:u
ҳkzk
-eZWȘ5z(tCwC]GgscچhC{w[gkmmSKCG[ƎWUY]<P;!mohѺ#`ԎM;nViHݵ.\g`-u.X_ $.K˕	K˕k\)T\VyǜwNw"W~N])wv~Io:(gu3ݷ샛ޯ>F̹MQ|q.zi5+M'{/.|>8oE8JO\Zzg~NOgwxz*Lّo_ONL>ζ%)ѥ?}K>Mr.o[Zrh8M+Z5c>=WʢOlV\p#CUioLϵ
l/>xe-|_>w#ӍJ_U=C0y+}'Rsnm3ߜs?G?9"뗧P(#'}2Gvum-8qd쥟ccKE~.]H
NK"ÅpFIMI}S"7%}SoߔLoJ7MS4[O|`)u_;t}?N7f:ܵ}4S7KT/.Y\Xɏ}t@۷w!Aqhn㖼ymV-m5޺
btշf:G鰀G~t`:jk
tdpWҦp5w#4rӷ8"+g_FHq.j=kҒMoL%x-!KSNzS'BgܶgWۋ:]Vd7-EtuV8I;]ɜh{y7>64,6VW=z]^;IפЧͯі?hڑ-;>~ࠇ绿ηrsd
g/m
54̶eQ@)dB
q
ѽd,^20{I'L K%#%WK
K4/dHrKFt/B2dzaVi^2I1$H0K_4J*F2X$<RT= H#)A2$$"d*iHʐLG2L$F2I9
$s=hi
;aEu͍$ZDab	j܇:TxHP3"I	I#)>)<HE.M=VbղlUS.VXhZIj
L_cUrh!P@i ^@7}(]a  M_%"~&k&L7 Н~[D""E4\ /	`
|M , *I+"D&[3Jv9ve T'; En;z; sU !oȿD'gH<e"h#ٟ?UʁFF"SJX "f@~FVbUǥJFI9.-jSOǥAqiQHN?)8HIOHv\NF↛rN
%ҮZ]3b,r)\]R|;(+;E(nPrWK1$!)_b:Y8!9!Gi)O}bKx0@DC}9KR.[DoI.]f25

rWmTU)rmҤiºS(0՗8HI-+='8	g,22kZi_)=S.=IX8q.Q7sC,Xa,2K~^2+!
A_-w1OZSEL2Pӯ/v#8yw􋄼M$4mz4/uPmoԶ>O\	c*޶#&RO5SSg}50kZ/A~KO0ՃoM:wyGKQi"`(R~+DB)&JuT "T(9Ppb>c NLZ	iI0'U#Y*Z.(r1_qfڊ	q 3rvTqqw8|~\qV	1ib=1j'wQZa}=DDdCi%	BI*$w*1*K+Cj;}N.x?*JJ#-½Q"[%GISMaPpEH
OBJi<MHG'Fph!ݏߏߏߏqǝ~wCOZL c.ܑA5RT"tGt#tEtm|SL
bg
B(6ReqSA@Y:L=Q3l4b~S 6ԳezSYgldz-5 yb26Xej\ơcn@
q}<S<,3&,'1l2dLcq}
T64^&6MDmIf2<MgPl39l&ef
6U\Vyll/`W*قc14^L}!
Uq}[b0.2%l>[ׯ>6l)[l`@
]嬆U5l9l0[5>(V>[UPAy 2]uΪ # W<-G zxV\/8kq=ʊXWB6W,dJVhu,MPSo`S_+L
cM}5aAVkkY=k4&VV:v[m
d,l[֙zC
-כzZLZ6z;[e-)oa]kfրDc76cl
@a%	!7XT٦ʠ6Wݬ2HYwePf[*.2y晘\Iwn
D&~|sH,k	aF\A>=}
8a֕;]=_<+]l3C.'GJC !!vlBOkjO	1@T:J:)Aq%=@Pd**P4JPB.5L1~ }UfeHFH3 ȼf(csi.
v)Bv\r]Y&F؀)iI"#(r'30x.r-]|d(7nTԈ&z5t'WCAp΃|NBE5zmsE9|(B.jsnATrlcP>I@@@M5N5N5j	8	8	$I&PL A7p# O#%~FC4$/Ee**9d*`qpqG f	äq??KQ$$89;ՠ"қ
IVa2G>Ge#*Y>*GE>
DTH&
 )hN4$$Sb,{^,a~rvqNi0=R;w5'D73Bq{-#3,#U(GK>2jy-,#g+y2
yve<A-#:L<h?Z5>2aȊ\8 ,$X^#	cܟ0V|e\K:Ԛ}hFo-}|p䝨m|Da^0-2zx>0<vXɛvQoBm7xuͯ%c-c/m'a{~8$[-Z!}q뵌;dwq7iGxeIAY~~2 # 2h<,$?5ď`JŚ*4pPY '.,<& 	#܄y	c	}	c)F
	c9
^×[)-4ŗX,W|*_deO
>2xesxe<ŗ4_X9?ke<S?şRd/'*ס&joRe_@~#-/MeXƇ	di4|O?_b{ߏa,b!X?%7-
^%B{\\ӀO@Oe?_ <Ta9On <1u{CWN.8]Zk
Xpq+p㦠+>-_Ӷk& Aݨ¹*\A#<E+?@%C(&|([ ϶`ɶTE;᳂2`tn!;s]W<@m*dmEkPǪl59`T/z<w:m_戆]Q|Zd(7nTԨH$M85jNR@20g3p *>p@E7`Z	Y8aQrCU!a<B2i6C=U
o4YL*CVhVhZѳGI[x2
J{s![Sj[;&@j&_`?PK^h      PK    A             8   org/bouncycastle/pqc/crypto/sphincsplus/HarakaSXof.classR]OP~ڮc)DM'(
&_3C)c2Ƙ%^{QnBEc&&c?c<osK p4(; 'F)b*qWXUԋ$M9ڔCeQ=h]8Bb!Qyn:-=rt^aK?\)^ٟ=gmm:pW=ug`Qv|۫}uj>w|6coNM1d]pn_VUMתeǪU+sˎ窋.mxvͦ$mVkUlTYJ;SR+;A3S5ih؄5th֡UCk5 Kzڡh0ְND4;+`(?nQ*Rv# -`/PI4c>fN9>Qa7ĥ;	j#fR{ޣeKky9e&"͔">xԣz56ҐGk1`dRF"*'*=L?<=B؉2rUPn	Wjz@T]y xV>,啘hyl'5/QuY̕l2&7d{G$DB9.c_?HA1	2J͌Ô1Dj$|?|%I=8*awB̍8>V/WC#jK$%+xCx0hn.bL~!+⬻PK+    PK    A             ;   org/bouncycastle/pqc/crypto/sphincsplus/IndexedDigest.class-N@E&N-
t6!@4t4)fGmM|DQYf<5?_ npJτ`<gG=b)7p6RX K/QhkcBUʧhn-Te7Z567zRכʖ޲B7Uld\$fm@Qm|!<;uaυp}P&
1nC<J]zt캎Oyoq PKF   $  PK    A             7   org/bouncycastle/pqc/crypto/sphincsplus/NodeEntry.classNMk@}c4ii="(=X
޼xZ%F&M6D'̼ރ\ ^1 8Нl;Y$&oZZ%!<_)Rib=he	vS'׈L+MgE,YeTdiS-%TQ6eO**w>-j]^  p@4ɇy&,lzOxa6d0a4: PK#      PK    A             0   org/bouncycastle/pqc/crypto/sphincsplus/PK.classn@Dg@ġ4&5SH4	lY>3H,
GEJ;v5{bAp78-MފvQ2=JJ%;B۽LMW)mtZP4Ɉj({{Zq@3`şcG\a{#6;:'0- .?PKS      PK    A             1   org/bouncycastle/pqc/crypto/sphincsplus/SIG.classRMOa~^۲VZ>*1~4PB$=v]ۭ;?=zD?A1wR=;<3E25<[`3ޗ[N1[5͎]t2\bٱ|fuC%S<74éWܲVQjU-ypy%;v֓,8cPwn+u2Yu2m/tۖ)LK/sڎi^f-msr~4ܿ\z5waݩGZMhml*j[wk{m+V2m-H% "઀kJ|]h[s|wgm睮8Gss\Ěn2zсK\!# 0-.F%DЇ~IDBB	:g&C8^Y%B|p2"DI'g IvtorgqK~/}C*}k OYIQ<"FC!_ZVFԐ"0ȞjwH)Tv7H7I&<B-ґW4USJ_RO7_^8j |zC&FAr[`'@e80Y_c2ě9S~xa]N/fPKg$    PK    A             6   org/bouncycastle/pqc/crypto/sphincsplus/SIG_FORS.classeJ@4Mӟئ4
¥VPEŀ.d:$5$i3V-X>%1Ɓsef?>pGuw43$ZtLFyꂡQaQ^2x<i'y i,+SPIrUƋ<SYIYpzӍŋ6l`-F9u%9R:RBwz;-
&\Lzo!CfaPK5  Z  PK    A             6   org/bouncycastle/pqc/crypto/sphincsplus/SIG_XMSS.class]N@ƿ-RRMփGc"ԃPp0emʒtk[i"1PY7;?_ N`;Lֆ?RITfR140،*5cpXݏa(7ax~;bK(Kh:b8	U&"*UYpX*e1(*yx}'kLll.PwрkO6GSib5xO[H
r0)RO|`'8\>McZ;zYO_PKeJd  \  PK    A             0   org/bouncycastle/pqc/crypto/sphincsplus/SK.class@?4\@چQ

$TaY(YǢ@H< b3_}3]QF,ɒrND!?XqAɒ^lS&/26e>J!.saIӓ?jں{pQа‚hmkGVa;6;vvxO1
?&7tPKRu      PK    A             M   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$HarakaSEngine.classUvU&L6*EE
BZ^(
RJ)UB΄dR	ݟO_\.a|gp{gKۦ|g}>{9_ N	hv~x~
	"z9IZVcEzFpX΢/`Zc
+`Ů%HC4Fi@㷗eFBcRBpjV][uUpj-	J]X]	=M"_q%>Hi.hC,ZukIVʥe:soäQ|.vZRU"LZ
,!˩ӴpT^!Ujj+vQ6霄>B{uv=v|fNYX_*n;[xvr$7EE\#]ڷq?
njH8p-WW7jV\X&LwxO *pB &H$HIL%|zݵ6ؗ}8nWcϸ64!ek.U8zh
@v:eW2k:`x:1H:t#Ptc腪uVC:N!
h:"o8+at1pauQp2fXͰ:96Y
F)Âa>y);7@v>R
r.]VmWKt
ຐJuf*aH\"oHEHHQC6C5Z')@s<s54`ssX^ý'X"5T=ǆ1G"Qh9,ik5 C{
2	ikl0*d;i}ɔdjUgMQY:|9O\Hkd2%h؁rSmSn/&J밉T;=@.(AS!eeT}	;m-X\AZ!LN51ʆZLCC0}ЂT57zRMEZ'HܺLP̮H0+CA\0DKmFhxs7m*c"(Ǉ$?!@koW7aoAr,NXBՔ7i:oXɒ[-VM(!tc>af32?6>%dO$Bs9^M	V#>Iw$r+ PK  ,  PK    A             J   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$Sha2Engine.classV:N9G+p
[b7	~`,X.`%E)NɫM&y4MB'i*}i?ɯɲc%ۙٙowvo<pE-<%@	D?+2+C,JQ[Rg֏w6z-	G9HV>KjE
eQDGLm:uQ릙ύGI1jDF%B{5p.E#gTq.LvR@Hrp:4h `
Lda?J9BF(gM<3͙h	3Q0$>N7ңddڠQ3mȳ}`-Й5XqTH1"󔕷BvhS4q=HUy˲+cgܛɍG2dRf82Rdp=Ǻh'>{scSɽy=wgO2|HW5GJ6׋ɇi45rx>|̜c,
;b;_=Xώ%|65vG	(ρ;uG{;b}$N&T*w76f4ԭI3QHmF<Fe^١ψӗoʤ]2#<kV1+l׳\ș}l2C'NBHBIx@Bp@BV	%|^CpH0aQSu#˺"UJ.:13W.Vz4sɋF!I$f1VWS
V뚏НtB#;sdۜq@؏j
_^8^~N\0h=*4*j0lc}ءu*gdfŗTtᜊF8̰zMRAd 0WE #4TPb7^]a aUABŧ.z\RiC1C0eK3|ᲂRp/0|
$/2|bSxV|dw^V0]gW|1|Ç^<4/0W^#NVH'	:V˵pО!>|$mSz:{;{eVB&iL[;Eݭ{tis818`&'KުӴ+h-O?s!ɲW3x^;47 
8K]XZ<MLY	\aejnEՇ,`f!9}nD)\{8S`%j?I66&`,K;P,GM޵7+at"qFsXlcS}_BXuQ^e]~<y*+r-/.D^<n,lp-80JL$ꟳSw4g"{YjXNc;]N7eWײtoשxL59aoPQ*t={QYK.ሢ+KroEY*#XV6Z_--!WQf1d[n&ބuk_f+jt)Sk$rؕ5I9!RVih].stKsT;ފǽzeVϭ\e'鳴<BL<ԟ#*ozuM5<5Th*XDla7gV9,cWԮfq%Xߞ9[EFwHMt,jrP䒲%yG5Es:9%E0YU/N<n)J&Z|Pq*H>R'P1D`q9l[}~qE~XL޴BPKG    PK    A             N   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$Shake256Engine.classUmsD~K,ˍ(:6uڤy!n^S$4l+[Gr-ۿ`_2S@ ~vey~B=w{{?mMb<sj<Vs<7_{R3I;4VsdBZժYj&MS1I+vtiV1Wh4Vɮ+V+VjXKvrLYŪm8f~sѰ*&͗ɪeȱ	3iӅ۔W+CAQIUjǭRUw{Sпi˞.Le'\J]UJNtłG]#usvXaVjLq߼t9ӥ:sVk,yz\5I{D%
6b3U݆iv6e%CXOioɸ xOF\E	C2RQ:RQ&\yC4ݨ3U$#[;Ip">w?̒;=ᤆ~tb>i
o
3D h}EIBp!
i!
`jxW0(&&>eb3daUq+*1*>S1EwU\mcaAu=q]#-lSzg>Rp%X3)QgMԫ8]$]B@21x.T0|\̟Q'B{A%y*KO` -1L=Ŗ'oHԗC_PB	V{S11{D)HE܎I7\Bst~S2_G<G:`g83@C9f(A*c ~f /oE卨Rpk2Ś,gd=k]G!*62RI{¡zT!.-֥UPY#SoȴR~YWʺiv&G)D@D+]Žl>3-
B>S=ybOݳ;;y
x
bw;zzɽzE~|Y;j&^ŃULKݽVkDYLi}M߳L/ym*ڻߩ	oQ1s
PK7a  _
  PK    A             ?   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine.class[sD88\D11Mhrqb7vL̓ȋF$txctwo9d:L	|v]/-T\l
K%l/	ܳ];H@UݧVPjFVZ{?蒷N!uJh8j;FhViPȜ?a_+[4d!	ܵLBKC/C/=_s5vGjgY@_DknPw5K7Xڞ+9DZwZ,3Y}e,Y/
AovѨחUkR`ԱjoQ3f(MٓTѣT#@O0h? rvEvF*V𦂷h
VpE`|iSOoE:ri|qbt[pXoyۑS2Ki8F1H312c1dL1b
I<xqXd|͸ø(11>L:>N+X:={匦+e}7;,
6Q_<3B[3{--}ƨ81@'ҩX'c:DXX:k:4qW1DOT3ҕU]gɨ?`T#cG߳g$G=Jy+q^U/fN$:l8QdaKNc9x zE~hi=GY"4۲
p'zuMEcl6L 1Rx7QE:"}#gQ<m'gnF
=C"I?PKyN#{    PK    A             G   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngineProvider.class;o>NFf
MO Z$sR2EIyɕɉ%9E%y9~@k^zf^j@Q~YfJj;;+#نY103 	 `b:H31p PKƹ\      PK    A             P   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusKeyGenerationParameters.classQJ@=i\ꮉlU*҅V]
tv&f&BJA\~8@ta¹s><>AMej01Tk1=W%gLyEEy șI8ȮKg:&a*g*_]3/Ԕ4qHM;pH9fAp :<>\4=5ش`mvec1Uۭb-+=j7+PK	  5  PK    A             I   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusKeyPairGenerator.classVYsEVH:CNr6'X"$@XimyRO?kr(Go@ѳւl%J}t73=3YlJ&w$ZN])rŴL@	am[VG;n4[ufZ\ɚn[嶳;w[֛[uWkWMBHH8?Նn[
n*wߤ7pmnG-Ac:.'0ijmCwW
r٢٦7[unK#z,޴_ F}3i
"/rZu2VK#kd|Ra%_Hwql%Ħ^##oGǈ2qCtcHj4[JzP3pU^gx!0pÛbp4-S5)D`%P!++.{	6w yaE)k*QfN3PM`ZcUj CkE
\qq
"
 `Zw𡂷0$"(
^$	\RB@
 CTb8ܐ>e| MF7e$4J2yȘAQ&7"*
2LnK2.`YGFYEܦ%\}R
q_DՍeW2;OtH/%Kȗx)iH;I@8EM0ן 'R|wS_pn'[˸ܷ
Q*4kjv^J?oa۸wa̅St.]PgC2@g*p<+cZFE\Lr:JL%=2]|.υzHVzXˎYO^^ɠ)a@~	&I
?rw	y-_*L,mzѿ PK[;  R
  PK    A             F   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusKeyParameters.classK@צMj''$褨%HС[<h._UP (k*x{wL1}YyJMU&RK8*T\V2L	i*]BBVm5䕪E~]\Z=[X1J..oQ7q"]<&pcFL6dcmt|4@lۈ;} *ŮO 웬h3@]h

X=	PKP     PK    A             Y   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$HarakaSEngineProvider.classS]kA=IӍѭնjl7Hmmlݴ?RG+K83߾
V'75g-T&H	}GPP'%=p 0w{3CuPG#(n?d{q 0~<Mb{]_a`˩k^y_Oݩ@GO%tX_N[U%
D(1'1/ѐD֫glAl4Tgd3]FB	tiiM[5,Y"ni_7ecNc#/u5 $217XXfVs+s[lfT_إC(RgRrS(bS٥.XWv%EK2	!2y@Y}g9R6	uBac^I.С]*
~
PPKJY    PK    A             V   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$Sha2EngineProvider.classmkPOٲmn:n4sB
+(ml&d
%#|W97s~C<(;N7s?^Ԟ:L#")w
,S厔8!iQ<p{DgJQMPx4Iܮ9hw=_AS6C͋xqtX=<wAĉ_wZ&	
,Nb@c1ϸİQPAQE
M-m+hXz8ObuH%I@'d^YUH;SXm+9]Z=ByAҮdؒv5ækZ628Ke)b7N#mH9ǽOEn>r
ӈ
\_PKNN    PK    A             Z   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$Shake256EngineProvider.classmkPOٺlnn:wHVYwiziu75I'NP0 ~(ܛw @ o7Z)Q+(=G$ԣؾ
}0?v\g{<x}wQ<Tx(h4ZNuJ`ozgGz5qv=
F
S08K[V)㈏T,Rvěf@c1˘cX(( OM-*6c^F2pP3՘-UQ._]*իB:XFAWZʬΤ6O G]YKh@ʕ[*$ؔV1J	2؟*(/343]wa-&i )I[ѱ]}jEPK)    PK    A             C   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters.classy\ǟwve]@ exJE.5%&!2*dgW&6wz#m1BeIvvgϧ)~3}}9y99"Z):TB@
)B,





G*U WA\
r*U WE\*rU"n^QBitFDjtTir^+5zFij^k5zFoI7kު4zFKkWPIyfAN1=56
Ask_=;A#6[GM2GGíȁ2GFD][|ܝ$Y=cTiCI䠞Yn3R <έ.AAW!YTu%[Vߒ5A3}xdH/4H\S>OMzɶUkA$>CYb f1!|懘Hq"8CĭLٞm@:i{CD&$[`kEܱTvͦZ';#*1y^bȇmy^
Ai/.d;UMHyKL!o켢69w/P?НLeddoym_H8f^+ͼ7~#Ⱉd~f^ݙۯnQ{fnEa3/fLPGݓb"@N? f>PTn! f>ЗEp3^.
@Q.
[!x+DžDžDžDžDUxѭz4ګы5"H 
Pi8H#A6H AiTPmnG2z*^U"hUh"I<8`-(\<iLR3kiefb7PSyĦٌlĺ_A-5>?ߌ/imAHh|x't%*Ր>5$@t~  	r3ȭ C	r7Ƚ CC<y0և)
Bt6#L;Saz>t0/ 2/A
䫐A䛐oA
仐A䇐A~	䧐A/!o!!_!Ct18="MB$,=ѿ4YD9B]ǇwwQb
]0̖i3jdӇi3?wp6M]jU$╯'Ʌ9?Ǩᩒ~8~w8~{?Îݎ?C_$ֳHЇe)#}SFSFRSF)#W:skw|\p6>VTH畄kJkcby|IƗ%"8I}u(	B}	K0apµN8qGtޟY#ȮSFSsSaJ5>ϒ)q\eAѩ;I(G)XiWh3m1 }p{iqIՒ	z$H <&VFB
#Hed$T+!P܆fJZ~*܅\'VP)lh,0u# ]HJM<	-uW-!
Rt7SBemȧY
ZB$Tņ|kPPy+
@mt{$(J@+](ם
-@m;Z$5.ΆH(
2*ΆbBl(.j@+ ~͗P
K\]fZeC>-P-K]b	ֆ|[*ـֹf	&b	%TхrP 5PAw6T.9P;\@m;!yP;w3UM {$AtJ11lc.ec>}Fl;bN&hwLEg9EDMRKN,Q
ZbNWļDoxl&b+D[
l喘D##UZbK,aX"D٪-Vcl3-KfYm%lu(cD9[%*Xb\KDYBco[%lMd[`BKT%v
sǩ!ж?g˳X7sO,&0)	4vWy;9.vbaS9.6RPK;		    PK    A             M   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusPrivateKeyParameters.classTRP]iӞ6/"J"13էb[	ILSƎ⋿3 G4tTfӵo묳OI~(1\NTՔhTӉS(4]F.edPdEǪVQD7mСۖyEf4~YeXl,
%
jM sg
U0۶{~n)&mL(k[7N7j[2[V캥7t晆m8ԜJkY)ŹU"O\|\XȫElEV
pkB}aֻ5_T2Z!gu+F#iVrr6jIWN6&֚CV$3=gz1gr~:5{cTϥsO9ge/˧^Q|8jK2~H2.rH`H 2N $NDd!qpHqhWpyip[%<z_UKHᎄr!a.g^OQ=M_y9/%ӠҴQKy'xd%5#bF/(gD#:q%lbGfWJpbsD$Q!
LSr)Kh3%Â
?g~S"C!0(4Kq(A#
"wnۥWO׃	8,E-*=?D=duLcjO>{&H%1F:aE1qRWpctPa0X
PKbЪZ*j)[xt|߻PK<    PK    A             L   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusPublicKeyParameters.classSmOP~^V/CAŷnfHrθ__HQ݂ėMy=y͹_}0F2
3L2**iuwL8#2JۮqNlKp8
O_.Y^"Ŝg|QH|_P+eTdV\-w:7'<1n
nV$\nm(p<;
FdV\>,֪yj<&CpoFj5jR:l2qɛ:wH|oYЃC0>TDWUpZANA3
ze(-}ec)DH(8YnY1uwL
!4p	
*R45dСDEפ1QPSpD nDQEKS:,`]5aٛOrJT0doBi\&[brxw?a|oCWrlc_{ȯ]+)I~?bC,=A;0@W0|2ԇ$T,˥)ʴXeegq۸ۤ#<D: 
 rm? PKy`    PK    A             ?   org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusSigner.classW{WVC.6ݴheGڦI܄N+aYKy[RWqSB-Ж;\6-p&(P=efwMʮ̛73o{o{2	H>	rsI{Huv3Gn#SV;鰂XNBo\qXCx7j;hh`*5ISL͕r$MRMmaH#{GS;I6M\|Pg*d⭙xƪBT1Rq\i͓l-Kd

LJghB>FE5sFɖy"YP٢`ΰwsf&Sa~yz̤
#KYk2糅9Z9W:٣S~cmˠieNC=>sӇjQR
p#*eڕxM0o{+Ao:/^BR|eM{J1dJzɞaI[z9śUNQ#uOmq
Tµkk&MXrj 9ܗN_ak=yrOW8ZO:jl˶9ễ\7*
sdBwOѢ,".bye,ɖs'%؇KkZ=٬EHB"i&(]TF+E'Kb1Ty&mqsw@Lk^`
lx	n	lxed]ѺoԞ5Y=Yko/5._o0ruYuB
tawMd~ujxc׽UM	ܮnl(v9}l{{9szq)ݺVjtE_BNyuۊ?kZMfhahexC;Û:pp^~]Cb8fX68	AaOEaCdW*x1x;*ȫ
Wb*1جWVq	 &Q1|<ǂx>p{SdPa >a1O3Db.i|F(~=}7e<`cg	|;Wp>EP_f÷B|(n{k8W<mCzqT5([Y\~%_C
\ER4N%Q/pk ѣsv_rE㸼+zx,Ob=Kb6sgN8.sw"s9_z=ֵ*CQpj?g$;(Ī<W|1_l0>]x(_18=HK4jqB0y`k[%/׉jwZ#PţZ]7ssX񬅪cB}=[f]CfӬ5f	Q7+t?D֢5ucVM]xDX4ڷ*-,S^8ڤjYji-L+T?@*$M K+wpPp=ҝ#a/^Z3U<GT%2S;I~Am"	FT4"O$1sg WVa4iSWo5#ĥۛ4b4);M4k61ӮYxP{Rz9a?PKM`    PK    A             6   org/bouncycastle/pqc/crypto/sphincsplus/WotsPlus.classTsUmn^lŐ4
%U_@i+Tnk&!I8>'gǎ390B(/	w0#6|V={c"AJx^IA!;,Ad}#LF:Mi~BP?!A:I-#MRM+Jgf2sc66#m{j|m2BbPVTN#W4(hysWܢS(X.yTe\9uDy|Aw1C[j5	R}<\ȏ܂Ckt]v>sEOL-\rG\F-K-WJ)9zKTjR/'jB)WWjs	Ƿ>L=T}xzM$J~"e^(&u4Nn,3<YY5>"(~@yN9ŶcgInEL
ܑTIVB֓2"*k{1g8flPȶEZ~LdYӂ[#k?ROl'DE#_S\iS]v
%W+xB7$:Bބl!"(8T/ALXx-HY`an0p	x_a#F
܍	8i0N8&1. -ഀ3&|`RZFMʝp[0m"$Kw#St֩8E{)0}fCtl:.Yi.$G!Ecq)Km\ )ՠ!~VG?#Rfkc
 ƙބY		3[kb3qD!-Js]+22W\QDKrXnbU,B	VE

B=סQ3[ҍXJf=knՋ8ՙOikbt!N; ov~4"R)-5e@Nxְff}|Tßl^=6
2>4~d{|^
:J)#
fn` jyv]
W4Râf\|VܤE%}qAqz	$x}8
k-i=*fż4l֐uvOnR犭M}ѣ_NT7ZÐ$i7F7ښ:-44`2RDXNZV8QbQ_cEng]<7`]ƅ.WG^ÏI(*
7PK=x  
  PK
      A             !   org/bouncycastle/pqc/crypto/util/PK    A             C   org/bouncycastle/pqc/crypto/util/PQCOtherInfoGenerator$PartyU.classVSUG."kчXCRA^ -"Ц_%ll
:c:GΨnH%I'p}=w .-=8PBGpx+&܊U;]W5P$Й*FԒq	TIr⎄7:\¹pnS;	KsM!e蚄4Ny1dn,Pv"	W{bfFY2Q+SrӉh<9S ds`NQI_St.+z(\Ԋj;WTU&"ʂd'&F}[甩r
YżSb6Kjkk-:]Q)^,Gf=I$;kUr|Vi9ܲ%D|.*+KEtRW1Z'2ЧhmSQ713XڃͶi&Dg9]p[C4fgb8Ҝ;pH	}\
殙7/=}׷OGxcgx< ^a02o0\dp
ÛCoQ<g׈7x
55$cf!`SPvM{W.f}QhPt|J6cSχۚ[
Vzwr|]ٷR
{ѭVl&hY+MAt)VdP2n㖌Xщ6=^,xest]ݸ##%t}aY01¬	#~\Ǧ01XOç~L1ua6̏ih~̈11#&%Yw,(/Tijۜz&U]UjLgnHwDеՊ//3~6tq!&6Co:O1YYPWB	ҡCm~B*#{$"RSPD˰Ks)
eX.E!R^DX<;#!7b6]pvc#r$ѯD?c$#./(
GU̗dw|_?PK=Sl  s  PK    A             C   org/bouncycastle/pqc/crypto/util/PQCOtherInfoGenerator$PartyV.classUkWWB."-!ED%"k2L:5_?JRue{Bje`9sr7ouNtwB0C(6dǶgְo=`hu''&:raOD5Z]AfY΋hϙeB
K.2t%TMYVr}\*[qİ-.
e/@yYTZui롽9H{WROuQ QS
j4EA3睂_W4TdWWcxe5+Yypv
j-kg
UsI-u,)i<40UНrɳZ*.V	6CU27F!|0;oG8RC'+Kߨ~ghE	eh[4wEQ,fCjiZb,ջS/l#L-ˍV@յ`5T8,x>
"֮e?('/jéjG'G?8sr\#8890L/&Nok5[>>Y1Bb:7<AFB^lM9KR0WwE1%QHغ~)%[	g#O=c[Bv{ԠꉔkAˊFY$Op=c|!	#!ͬ.VO񅂫҄1];Ҥ*8J3ei2܍`
D0-Y5vCŢ4_3-ЗAI[溂NwFOJZL3oa,A`ן?
S[2b7*  B| hd/obsc#g(*<?G}ѳ;}|J}Z%)v/F룿c%oCF^G}ln^&MvE%:/`;<x sSTU[{&c:0fq: e&7Gn?	@j] PKt  X	  PK    A             <   org/bouncycastle/pqc/crypto/util/PQCOtherInfoGenerator.classTR@JCC"omM,2TQ~mӥӤ&C
  >@*f&{.{s= &Ol2≭,CxδMaPaIR'BZ
DaW׫4hcvUm8EQdHh3\7}emytlh]S=:촾7[M4!Vꛖ6׶#٪i0݄3~5pO-\;?pd~7[ۄw17I4GLChN=F.Nn]E]
4
)8 G
bQuM%#6>@Běa'j*9kRonnedZ V˞eA/֥N LCLY?Y+:-V"2B.ᆆLCm-
nkP҉xCH%)QS1q1UI%R*Ҹi==5"gq$Iw,A.(((>3q} !Y
3;.D4pL$ ztl0`ʊqDۈv%?a#fW>@D?q9`OT 2ړv~1G;)z
gC7??"~
#ԗE*,"? PK-#  T  PK    A             8   org/bouncycastle/pqc/crypto/util/PrivateKeyFactory.class[	`T7?y<BH8%rJ"hDDy$KrwDj{bmkk[mm[ZD3vHH|53leEpE~VC}V9
!تkZuD5
w5rqUoջUxCk@dC`r#z
plZGHJw<~_WG<{<Z7+\D*C;^j~ʔhnAf~Ɛrˋ0#.?!OEЖ=].PiԹN3Wk!빊Z^V+ͅUT
5V#PS[=˗8JSW3TTky!iiƸ;ibE)vil׼j/欧O'ʷ݁^4n0Fɠޤy#VvU[3\CZ(l踃v.4|Ae^iR#ZL -K΁P G9)e_NWj.w_UcJ0KW=fStm0zI$8=Θvw/7iyhߌ+ݩcVO8{]l5=/6fVS..?+O8BkR/GZǿVJ/5us9<GĆPzi9$^6}ԡ4IdӓU]4d3
	-D&-"Ǖюtzi(j-^px('ޟsx=;ms]4TSP9;NA_y'=OR$46\ӗ'e)1#.SgB}4&!+LF;\arGcy'b8/+yv{IߪT K\fh}<NiК8?vo'yA[#3L
]7ED[Rz\bMhjN2kr:#Vgw,wѹiR%u@XjM{`ղ5jq+Ss{sy?	
yi"t:qrots238;7v4;WZm:9;۶9gQ̑;&ex)ۻMY\nКu2Ll&v;4|ms4nn1kH7Ҧ)+ohn4ް#qsOńMZN'-.64 
Ybؠ_O-MǦ͓Kcy=~(˳ho[lCfm7O@$dMr[.:tqtlİݵ͚w}.^Τhөq$&z~ѩ'eww`H'îZllj^sٶ)md:k:tw2Ng`?mw&P̿q2&I$6,ʱUL%:-y%f#'.FNUmC& lu7ÎN˼uџYǮ\Ny34i>E'rֻ\BJuRI&5F7V	zP9ݺ@(BaygT&+⯿YzUiN\3 ȤUFaztb5b%1	?X܇hLBDNr)C;7|1?#X
<KT	ixgJ+c#)31ah`~pH$I9;dhvc1X+osMT妖lj"<?F>ico)4M k	S\a&K9Rep"vlvph8EfAY8`[)_I(0Sv	;$\*a$p+%$%D$J'a$\%j	ov	pk%Su%z		>		!		7HIOHOIQ§%|FA	7II/HY-(K,V	_U	IK%!%%).	ߡۖCla{0cOnKDKq2;d
u67Y5m1͆4X-[ɺe^uxIKI
e5wҬB-\騞={&{훤/dySgH=nvbWdT S[[sNc/'΢?u
J}.2uVde8k`-=ZB.o]vd)9.`[yEL2r/.753^ S,Y]d|dʛ%C:{Oz9tƍݚ$Sx!Ӵ1Sc&]9=Ξcޘ9Zȳ_S u}\KN]LrsHc/?ZE/9%7V`Rr*oQkGolLY[E޾!1f]92}jXY],X[I?A7lL35D*s˔4_.O
/j$tLz남|L؛IC+&ͺ\Sw~=tʞŎ29)߳xOL'#gÚSS] 9Sۃ!4=|AqA2s~ypO72=\Sً)c=œSn*gջojn #AjɖcgQ>m4c[NӲ@7m*ճa2D0Y6d6L$JL2/8o*@_I$~0cbo9zV^S Z 9ohC1pJzdW'3,`8l-[z4^e>!gxA1<sG~'?3,
V2ǰ )V*E*T302,acX`Xp!Cz
612\pPTi*;NkT*B3kU(u*\P0p6p60**|[Tx7PUM*|a/aجE-[*mΰR1b
00lܭV7^~{?0t{@
Vcŀ
#!cXq3`bj1]Y\x
g⵬;UXשߥB^tV^&y
~}@>
!~V
~Ua
?ŏ~B?'>¯FOЈa8pS1g0|_c:7ngb60Ýw1|Qb8_f+:~oc(Ÿ?9(pӜ{{sE )@WE3
 x	axALwT^#,O1<_qoVMC?fxN0q'
VP`x@(hß3B%Qvbx?Ã?`8(c3@,QPg8(c3u
}
k
*xLA_'Q+8PTp& ,Ó
?!(8s8W+XRt
!H<!/l
.
)
V!BR
V"bJU
VM
ֈVk%
͗^$g0,bX`Xưa%ygXp!Zu1\Ь^:ѢR<20LcP30`(eɰA+EC9,s2PQ
?0Qi<A&~CXʬ~Ϊ$0k!FŒu:tw_Vu<
6J3kGN66z:յ1xzgmDx=tS(x~Tzh6 DImCxJI]Z6/b_Ҹ
.P_(z>GŻG{ڗ% 9gwEQQaթN
ը7FjQxG5Pz{0TTأ"\_XQ +

+
GŽÉ>yKT(CеdT<=T< ,5*n/êu'+
 gFcFcxt.YrXA"ϲHן~Һ`2N3Vȩqfb;wVԍ0aP}I$
D}{/}pD|Y30dTYQ=TgT0եVTO2ar0s)[ϱߪ3 <zBQz{p ù,~8JUGKu ڢ Y*2x+V_\Q?(ɛg<sDQxraTyV#!SwF-װif'uK*XgOfo1'MҞbi&(Nd|NPZoL0+u(J(ܟuw6'][bڵíK/֑kyug1x*ݿ+^gxiOKO1TDavv
ݔ/4)_dʗftDDX.L2Ճ.6<10kEIzRd/_$<ܡ/l;<[KM}>wJo{BnCm4}]~)$+Z!GwYvO1VTO3aڣv8>'g(+b>+wrG||#*Npzgft8j~+jN!<q֬=*N7CQ~\˒!BVϭ7i3a aӍx06f_g#Kوb8":|)*r8mQ_W8jTjń!_uCnrk9%
OT0)1{!Vc2c]aESeP6"uvyG"Epĸa5MpHxCKN@k	k%.cPZWj	H<$Eq=Q/]Ɠ ^~.=˨g7ɜ5^fH9$l8x<8쨪:	LX`I7w5XxNX(qYמ֨3UUkAv-W@|߫ۗ:\08\'xQ:M:%Ba\5>f-G)tZJ'%x\D(]X{ͶvC7Cy촹m^m'[x%_TWBu`j<צBP:ZJK)]ŸWp?PK,  IJ  PK    A             <   org/bouncycastle/pqc/crypto/util/PrivateKeyInfoFactory.classZ	|T?w#	 AA 	%$!2Kl̛ U[ovmWԺ jfJ(*X(k*UsޛIdl)}
Ϲ{9wc WY.g0>ש*
1T?\UsodPhwTGbE'W14nwńǧIοZ+,T8HvHG^x UzeX_t=g0-pYP
rYME#]a),7KA/Pe![Cf| qYCUnEū^adЀk:;U9锼 X
x.9\
vKJX#z;Q]DZ0q,b?]AԅV*zQRtuu*ΰN"iңUة3>9fifYU.xJ!'5<;PH4B>	-8lbjTk\EG̵
M
}
r>,)]f'$]Zݛ܆x6Hޮ
ݪS7tTנDIzeβ@߃Us:8fɡ5[r0p?i^J7 r鰈땻$ou'a5e7hp+RCC1#f~Hv8m:X>ϸ	'^Ev[QĆٸ_á^CO	ս3ju9y>CRծE&::YfZE'ky]50nfsɛze?;L%{^h.qյ.]uS:mN\vk¥joW /߰vIw/8Wj?xؓxMnXmsm :|SK6h@dV!Y|M|AjR뺲257\4&6lFY6.5-<KGsa
/Դ\-X#)-7ԧ%
x\Q3iCp.4Sv4ccq4^Wk4_VLBhqTf4jF*(8FZHr47չGtlv-4CGK͹uZ(4H*5iSPqU{II#űVbUC9\5kG1~M{8MtG1{5ح1"Yhz{`yg7xGd!
e_f.HA5[}و/eelW1#+v}aj<%5IV_8ɍ"83^N)xƋWvYMJ/E1^3@zZVtmUZg/Gx3i|~+qx$Eef\:pj~*|djL- [T@#b8rPϡJ㰖C9p9&p3pn2N]9(6r䰉C!̡f[8lV>pp 9|p,m42S^~myR{r+}cQ?tD7:"+P#8橏G*
-~W؝2>*TIZbb<9Oi̊83
k-,6N^>^t2FVC&VQњDQrR^cuȬ4\4Ex+3?x@vgNUY7VdI6~~]z"7"Q_Y.S`䲹#siȴ?/\Fdѐyՙx)\lY)$Ys05
z1R{W(ߜ]:uЖSTZk֪7ӥ &Zf3G9u7*hE`4h6C fz<2^hfQz,hacfi˘i$1UъJ6lz,Uqgbh×Fƌ&G{)|xlvS52X:4M~G3MrNmŔ]Dk]YZKf9m!q垹忓e_,-uhryE'B3>OEyDX@ XHp
jƈP
Vf\F0`6ss		,& XB.*eWMD|	
"|QIa
a^a9g	"LP?"OSJ~C"\sGǟDޠgo'?	E&[M6;"L"01F@gI_3%R/0􋓡_V3KC0~$+ìX	"|MDOI"|"|M_b6a0]Lp11e`&	pk`s
Jy<j RA,ìAGUEX/" V OxhOu<MgX KgZcu<Ϫ	j`n \A XLPE` QvUwn.	$ wJ{|'xO
&E$>!~bgn0;"eRAj;Hm,!v 0E`	R.^bW\EPA`)A GHpJGFQ83 'txU$$Gd~^a|[l3}}'$CwIp	>BQ	p4+ls8C;C#=JRY8KgYPk	V4l໬6C2
Kf)Fox|䃅^,am0WahcL=;EٿwRe[$gC~(/7QKQ=acaj[mw"P?x(F\hATYmֽy{
TcmLYK+lyyQ˥w_RlVV}Qv:Nʗر)ʪ,#]<R uͳY#RP^Rܓ[^`E~XzOjGBY >99j8Xc^=DGtG-1E-ciHVmH֡!EĉC+r"q{]TǉDE734.uJy6.e>`cZRaO
mQv.<ˑy& <K̩1	S4OW0`\b/E-,cce\as8?s~F쎻p{Oi>9H.zC u~Ԓ;Iߵn}̘خzM;+h
H*o;L5GVQc7nE4`{}%12}O?KDƆ'xɗ64R_$*ebJo4#8O@߉Z1?1D?WG,5%h277L3e틽)]9>eoǨv'9Xb#8Gu8Q>g|;jN9sN9Z81}%e63|s:88q*!-z'9h97,/>ŋmAM{&9]k:kZL?)PM :ʵEmN̛V?O,S9v^RkrݕRᮨeƽP8qfFؗ_[tjb
 R!a<b
PHaұj+bUŶ8w	Ax O߽%Uۄ%|0ͶV66Ϸ
q66Vh+:#ٝ#;"lN4myX	8 G1	XN
m	X4KK#i0Fyy_{زmqڲMLˆt,Y1R\_[6[~ś(L{a <tWMgv&DNZGy&_3;vN7ǰ~PKňไ  I6  PK    A             9   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$1.classA
0_j5U{Co-!I*j.<7?
e'Rhiq;EE>h%;	rV2Ժ{IȰ8G1bXi[ӜT+`r[-W\b?2"mj,PK/      PK    A             E   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$BIKEConverter.classTmOA~Py+ Ml\z%4G Q
J[.}53Ϗ_ 62ABEp9[ow2i.b;!C#I7ks6mE@oR^eKXmWU\p֑e8\9yV8{Xnڸr@danԈmoD+
	^㎧R]
g>Q`;eIwcfb
ϐ
6ɵ}V3	'cV-[x~a6}Q[ɬ{}!ywu6Z~KnTh*U*TSq_EXE*x0Z(4#U.Gļ:9ℜ4d4nSvJdzV7045#X,٬ڕ%?	\ePJ*.y΃fowQM`:TG:hC$!P0:dJbLqI:1/4`RsL34uJۥW+=zuXAIl}ʾRvV];
MWYqZHbt)5`~
ѹ<r'xA	z^Ώ)^}+W u@]"H=TcVdTJRxt2yntY7|bjD;ԍ. ؅UE3yPKC	    PK    A             E   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$CMCEConverter.classTNAEЂ@[R410enݝH|(S&>e<SiL3sfzIJ0P;o;XdГ\,giRc/Lm[!@l"e[)L3\p
}eh=4Mvډ3v)IEmik-es{0^HY:L_aNXoWl$FKNfBr}Q&uX9po02_Vt3V@3̔DZiFuBqYamݴ둻{sKgɨs=!K}*[dqVIP2*T<PPѬEE6Umܡ"M)rN>/,׫DlB'EVT&i.7"HK %,cB_y(;đ;t4e4M.Q
U:PѯC0 O"C:tkĨ'kx1)ƥCi
0#z1>%P
=8܋L6ƅim]3"lWsrQ%*i-1kb%k-9Dαs=ʜ>v(#gX&rS 5y@M"yO2:^*iktVq@*k"4uA7E[EiPK^s    PK    A             J   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$DilithiumConverter.classVrH=e	ẰK'qXL`œL@4N*~a?`"$.ڪ}(GNP1 zzfiçwFCH?1\w}Wd8z|Vvh xY0.A9W"vA/	JAHe-}G4z/#a9RȈ:ӢptP"$4x腽bn`^;"ldn=%s1Nͱ#	ӎ-er,Kb7BJw~UQ8>c^_xl$|."d0 jf
rہrL'UdJdҾo&iL[Uلݶt&:Ɯ0;G5]JiZ%ce|H" GA~C9p8qg'.`$)	EOX"ivoQg$Hx[vw@c'CmTWj2[sj)elծFTo$+^#f	"hmAy޴[m%v
?*GF2-~]hwlgtC
tň؃1:qQ:8&#:t\+j!p]iDNX744kHO
Ø}[Kb|_EEi;/gU^N%JΠE~EE3q-~Nj~/av
uܟ%}!)Hq¨pE8F;OGP5M5u̯4
ṷƪR=r	NaexLcq]8%x͟8j')
Cj}{ PKt  	  PK    A             G   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$FalconConverter.classTmOA~
)奾ւJH(hbtzxջ-~	?ei^nfwg^3'Sb^++mirp*~^˂[c~m9ΗjA+ʎkGt,RH!NeF:А%݁CXŷ'HӱmIKpݳ<ΙrW]fku<-͒)\[?U07 *_
n~E:YNץ[Ҵxq}[cۣjqX2HO6eZ@5ڠJ;
*UWЧ_{
3L%S[7MKb!B$ lDVN`2{1WZ#j @&5y
d%2[a[4Px-f/WAóD.*!m:ЮO5(x@:	
T )\f2bs*Hx1U<4ļs@O"*ކ>
-ܼ{ D& 	rvӷF~:1/TL} OS'fNx6S,ce-ßbًsa{8|Q6gxQ0E$b18PK%W稌  .  PK    A             F   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$FrodoConverter.classTNA
ˊ\A@ $H&_2vN	M|(D2YHQ͞3ۜ3?}`әwtfCJC灒rS^1ڐc^-
"C-saCͷ{#*C乭Ǿ(@R,~"]܋,_w
<tmㅙ%^+/BB1:ޡ/̅a
羪qJzZe:(*lTcF/o^Pf*jcj|K^T$j,Z-Yp,ܲnᶅә:ty.x]
I&J&W1	UR-wk	ވy~[7/C>{5'kdd#
l)~jT)IwXhpЄ̆#C4㱃FlŸ!S6zqC&lbF?lAL۸&酳OɅPk/mш:}#<N+GFiߜOMć'O0{MΝ {g˩}ߗ:D40/to 4qs#T`DP?VR6h
PKKc{/  3  PK    A             D   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$HQCConverter.classTNQ,,]QPւ"
)jb?Rݲ{JhCB4|(ɜ9\3s2_|:CÊe[|AI|-p\Imdh")jp{fIxof7t3tvuWOt	vxbeoq3i#TW-GD73-Ǿ&u;i7Ɲmd
IS=;vBqײ#QpSqgKjȾis2]A,?2RaXa>1TͦR+weVR-mw,mCÎ}j\t%zUqVPZӺE7d		-Z%Ih!SB2w#&24mw]+eq$LUd#M
T#mo],bm*	S-]ZBZ͞V!pU[8WHN\L)u˦({}G5`
P@tcDpvL?
0.2zdN2bJiAB20#c /dbVsv͕/!r}	mn8{I-1'=$ӾG(Q'N
5b~Jmsc"9!v%YF9^}e 	D> UM,.NtE~:謣?~BjD{	4~!z؏-g⺽?PK	}c    PK    A             D   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$LMSConverter.classT[S@!h/\DQniE3PuX(3Q_x	IMG0>8>l
Z
lf~9'g__GLeuUK0/GږEّN1tjoUk虐Ӽ+\TcAXŠ5[Ds4_6뮴d%QRxs2[[0,Ǩ|*2^9/-[xB2ksW挧VoXuBp ͚u*ߐQb0r2455z4\p]CBC>
Sf2	9z+V]:]l瘩cgKfK9Q?W	Vf.ԨOM*i-̥䮨\_jeJ͟1f@C@'F
}x6c\mLPf!<1IeR:bZ=$f7 if=Erϊǒ!*E#HKib2ޅqT,G#1ǣ4<9} ~͙#J|0=~jFYB2,Q
75zZ)5$t/hn>~=ojI
`"auQۉPK݅    PK    A             F   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MLDSAConverter.classUSG,~ZrAhĪ	` mr,ir6_;@t_:շwP{v}컷/xk%3$,CmsdJf@̒Tr\Gus^ȸ\:*랣
H_-]灬	%NZH%3Aǟ5a[Ȫr}o{,ktR^	EZe9uG,mz);S\He]UTF[E;ٶm)p+r׈eMFM6zu-ItnEz]ue`w kMrުϐڃtl'WoG\م\1fŴ:k-M}(?Ě>0rQѲg}oMJxphʾ9L~cC9Np85io8p|0j%]$qrL=_eIN i=v4ӟl:oi엮iZծ/}N9Kwu>ztTXskt_vlmIwըJۙ^%g={K\!8&8M|		Lj6ыkZ2чi-8&ᦁm0EE
\--~40;Z5`a@aYnyQ5s'ٲCIݣW΋>U\zF+(~z[$m=}clA0	jO\@ama|KC,IlҸ"7sa.x,c5O$&culHծtLa0eN?Ls z8.s: ƣG46n
R>I{8PKThk  E	  PK    A             F   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MLKEMConverter.classU[SI:di;26U.	D$KY>5CIfCjB_UVoR@@IBp_}3tgQ#2}vlugsKI5 UXp=[Sb8@͌SQ±dؚ_|%-T0P],֬%mZ(I%=1@_UaڮOdYٮ[NW*R̺Jp
[u%*(MQqf2?O*<)0
Viۂgle[[8kn[f̒tlKlWee!Q~mW++2stn&LvimV]4{RG5g8Q]gUzs~.Ѽ]=>%Q9z8qrqs8qǟ9Np80hĲ$q02Lӎ.Ţ$ӱNó|/S '[e7n;1kDk!x-20CFv%ҺUJ	Y:*̹5q+;Ѳ$:ZFrPdVϥ¿=tNб1cDŘ:pq_Ƅ/8⦆sHj8.`)
p	|qG o
1Li4ZңgGzEQHj䕰Vr?gV1A+HG4{aG
(O
ב:>a(gYC} yL_\&*
M><O3븟08LghWGz4P0~$T7@@!H&0RqDC2-b<IZ+xBSYTuӻPKb  B	  PK    A             E   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MayoConverter.classTmOA~
ǁA@yiAXʛMHMq,ݫw[B~?emIQi3o;?}`OɷDrouݓz`Js~b32TtC;q;*dni?﹯Dy	P"#3;/N\QT/W-X*2A%]'TyPx:ɪ9r'Ksj@Hz"`liHgϰrQr7(ϵv^(hIyy^t\ecRo^oXJ'fj|CUtPh3`0`4en=tVDyT|ra2xOyǂ$J6(-'bH2
_+mkتRޑ9^
َeӐn:z	s#
.+On<B3V4Yᾅ^<Ы}PQ-xdc&`R}H&S&1mb&0fM3kկRy'tpd`LAf4i[!8Fs;WTqQͣӧ?)6-N:Ǔw͜aKJ4ގkKVineKU#kD `C?I{4mPK88m  *  PK    A             C   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NHConverter.classSmo0~ܷ,c::1l@Z>
Hkbj'UBBS2eNHܱH(J Q
Ӣ:Jwr?<F kW~ o7Yx	O (l$%
zK&A߭=C.ybQ/ΫcFi/7qY,}NY,tۮ7<ٕ'4=-̖l]@\FI(*Ai{'$@z>^3WQBhjfN3G<Rtǧk@YW
ܷACԾxy/=b_RvvGS3ѧIPs89TTGyw,@,ZB׵lb7L,উ2LTjb	i99h5=VK5}̜#lmbr/A,2UւbN*>=8q(zuRI峔Jf׆8ͨXVE?j5. PKC!  $  PK    A             K   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NTRULPrimeConverter.classTmOP~.
"/ 8y@(EX0Y\>rŮa?J 2ۑMV6=󜷞s~^3C
V"J]t̻0]3ti\):Wv,q?1OM}a{."(;~`x$<sg~]bpnnFme"S{""\cUp>y ʇ'ܪw=5ҭOG[w;2Fgⴔ5[^PaX3f<ðywTwFsOy dﮧQ8y}"nzt(Pt)SЭྂ
RBLD>k`D>$TY(fjbl\j
Q9[ԫ	79p\6{H63ִ[veߏf
+%2ߔV0
hѐ
x*wc$I
mx*bJYHx$*1b*FB(h#jmQUkyA1ÐˉذFc{cdhrEO
ĈOR0AF<9sK̟Cߢ92xC,}&Hi)yex,W0}LB!'TF/PK(yI  ]  PK    A             E   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NtruConverter.classT[OQ

z,&P[b`Rnݞ%I㜂-t̜9fLg_KF-34JlNȌq'KMehø
NNZAo]ijj4ynyDnq.0j;)5i,=kY6T-kP"<J1WGn7]w0S7MaPk䑡_mG]՝|۪O٫X@-jiLtn;y9cY"uj8\&^JqV{$LUtY"]B{:%tI#ᾄ^Igrj"ᚔ$lUպHmU ݉|6J}j2TH2"T`Jq(#n^fԋ+z=SzP6B!4)Р
0b5!N'p+hGA321 #2cZAƔ2F0')fw=brmQe8d7	ǯ̮LwRa
*>DbM#eE}
0aH
X.`1?^_gE<" &6_@jKQOes%+,E
O(%t&od 0Q!ld<)[ PKҹ  A  PK    A             G   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$PicnicConverter.classTNA
UKP.
,I#&Dïe`;[w&>Cnh0Mϙ3߹; 5yːJg77U:W*z]dU
Nv]-t0HB$עVp|,`9qx~+*Zza*:.	*s{;*27wyH
' ½L3<+G~=^./Di}$xUo^9ҍ1YQ<u"|g>u/S5ha77jfy:
Xn6c@!N`N%lD@e剠7FUL,{7Y[Mvz;^ؙ˙&5Jd%vk'pDje
;V0hxGІ0aC1gbiw	Ō!̚)#xbbFnymV	AfϕM#Q-a[%,F}ԗISMmgϰx3.!{goz7;FyFt鶙sԃIޣK1a2ގ_PKu`~  <  PK    A             H   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$RainbowConverter.classTNA
ˊA@ "I!4 MP:;EP&>e<6EC4=g|??~XKD=C,<dh_7|WX`"3#HW0tj~y}#{r
BE}Ή=gv_=_2L*ǳ~Ie	t^p')IU<k\{󫼞WPHyB1~){,43gظ(~vEsx2oa(%yqƌ6o%tء;iԸ<N^	TwQ!r[igJE:
X6p@@Q"܎`O%KFS=<f3h=q:qpVM`P;]#sZٛɢEd,NәoTV-tB
NB+vXᑅ^<wPYhS}7qS5яHb fLa0[!fY#[);A Ȍ_a(EFZ&Ozbۧ9GuFzl?ߡRxs,} W#aZ-ۦϱ\
°F!] lz̤oPK  E  PK    A             F   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SABERConverter.classTkOA=Cˊ<"-Ky($&OenٝK!Qƙ-n靽;;7 K"豷Q=$h[ohy}SԱX1'8A,θO/ʹmb="}Gkdvӧ+qu&\/oܲcU,3čDv'drvcqYv\f.ϯV2<	 [q]+ұeX^]ç9D2!f2FE-zc7GN	f?R4췌f|#੫D=Tۮ\RС@UЩ@SpKA
(UGvؤ=3"k~970E'2BhdX
Њ~2g2R@C&ƔPS4ZNި5m6R3KJ9IcXPER0F¯EIO" hh#
Qim\NH3S"H>fYR190W1Q̨x,{ C~
Qia^@}IyGED"zG6M3jO;w,:lkl
*V񬊧;zk\~л
$?*w˂z"3ljAKH?PKbzk˻    PK    A             G   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SLHDSAConverter.classT{OP]VU'(l(mV'#NMݕ2[;;?D?xmr=s=b1b4Pl=mu1踎Xb8fyZn5w6VET|GlHIYCjX/2lyOmu'ˮs(v:EU]f@lnBOWiGEQnu}{Aoinخp6g8䫅mjhbG壥[~"<=(mm\g/S]{^NIo=#\K0;;/d{rqG8FMt ֔OT(#{d=CMq'TUpJQQpV9X<{94h"s[e5);ٱ	y'S2sch+1߹dՈe[(֖ۙRVCWm驠Vߛnhi05cFC1
ҬܐspK*.6ȂK2Jr_*ࡊ)Vq
*#bwxnE3]3%6';vx^p+^y%w) d?#m4F<2ONҾM%G'xUSXJ2Wޏ改xi}#jXH"f^`[
iIG%y)ó{4d0S)SȎN"RqUCPK+h  [  PK    A             K   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SNTRUPrimeConverter.classTkOA=eE <ZP`Ѥ44 VLe:;%4G Q;N;3;sO xOg{k++U*>:hri)">Zv\zc;qP`d+ynv#S٭dcVI_fk;Y[+yeP% -qfF+g{JCzvwG/kl䥨]v=­1cIۣq̥LmqZdЕQGROT!Lj6L,wtk@7#l rUq8
!_ǜn׽YO{JůbSEC޺>P'Yn+rENCF\~o^)×z6s.e٩Tnu,4YhEYcOЂz1f>&1чHh3e&1abLctp@OYyHVF.y7~kphov=c4N3<a`YS̟c-N<ǋ͜akByץ#^F馹斩3,]aX%.
b 4	XFWPKu  ]  PK    A             H   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SPHINCSConverter.classT{S@-C
P^AV;2Lp`?P<> mn۽~0W=!Ƿ-ˎp
ry#ZIM%7-i	3eܧXcז/O]ڷ-ڑÐ猬WvѶr
DXl$H9VGKƹ.ph ܾp2-v=*D]Feަ7R(_K{3d|$7-=0{cp!ysT'/ÌnID_b
J: =s!眎}r@UЦ@SЮං;
b
:t*RpGNϵD(ה_FWY	۱.'˙@z5-ŐWf:%ұ5hH/μֶ4KAL
0
h
kh
4D1΍hQ
-Sуq1Ô^$TaB *Pt_󋋪RKkAxQƪ[fa m>4kI#2Ntu'B'>Mc3$1{S<?o%2}Qꎅ{T;H6l?bd4~ /*X_PKJX  C  PK    A             L   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SPHINCSPlusConverter.classURP!"xJWv:B	ILN:C`t(uh={114F?1Dk	Z4Kl:C{fm-kx.ʓD
w-R-BӅc-9.8CWU<o; mueܓ+n {*Z<9[X8namT)DuޓzLsv^ SX߶MwcX8ct+(CqB=^4W4U ^6["mc\ݪ"ځJ*M\P ER<r㟢~pv
6+
\UСS5PpSAnfӠL?9<;ٵ	9UYkh.z3ZMc-!wnjL!Mc?jQGoW	\U^Xƅ;N/My

0
-hЄF
Ќ[܈J2ALG䅊{x>%y"S}xb *\C̨x){HzkC7;9rq(4AVJ߷$]#<0G:K6L>>fW!g"?'2:ߤ>HkHD)Mܲ
H̬Ccv@gG	2D{c	Xx -PK~    PK    A             F   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SnovaConverter.classTNA
ˊA@ ,M i41Z.uvJhC  >BJ3 9~ːHw7ZW}Vb!z_bmVghݶ
ziS+k^q[K9t\c@콠"熪m7{=4EaeWv\2
 !.̊a
ѳ=Y-E@絬]]r=*1"7qĥҹuRk5!Ay,255(Q*\|
h7`0`em]DT:׀5Lp&v_\8h)uÜa
]e@c8hEUtE>ij":SXG2|[?taQ^%2)HB3V4YHn<ԫa}H-xl&bBiH&0eb &f7nZ#^[Y!,a5.a1=Ѥ]ovݴc4NS<a`B	0{{'ȜJ'O9B.ӟ w+Ihn<j$ӣÁ	htPKaf}  3  PK    A             U   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SubjectPublicKeyInfoConverter.classQOK0}ٺuMMIa
JE0l xj]Rt$xĴ!BK/;f뎠x	O]4F\
7<MaDP) 3gbD1wA[#:pE4xt&4VOU2LV	n#Ŕ&EiOK,m:;9<pz?{~{̟d"z%P=-
l#9HNZ
ÎϢkgk=md!ymkTv@Hljr+k6` 72&Zth)m>PKM54R    PK    A             E   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$XMSSConverter.classVRV]lDAIҦ%m4%!!i	&	F
`4d`dcg0Lot67=,^}Ͽ <DE=o@,ѿ2)БXxc\T;gk{K)xrF^B\V@i7/CK7F4Pٞ#
hhvQ**ق뼐ƍFFJ:YKWR W-t}Jl;\ߣ+|\i[~7~s*4Kdf^^`ͺVNz]ue `CȔ90V};GM'bd(Y+l*Ͳrf]xvg̜@fn-(ೳkd4>Q+Ya!GNhMra׎a;T%;eCtlw̣!
5
W5|#
iX'kTgnh0?׺~f<قLQ+ANREW[AKVIu}$J\5Ä^ǧUig&ic͜pʴSgџ_~^Tbt7A%B['I#(tigɯ;2g u,iN"E"8@mx1]xd_x4bCF
\AGc4<1cp\8&&u,w:ᅎ~14ò9:Čx#4÷:!ðN?.sblo^S5,ϓTCEMr.-qg~G'7~CmZ4\b?=ݘu\AͻURŏp`*~ϻX;$i
*rUU(q~be4ƴX.6w*<C;!ŜFW4pLD6zvY P&IC1=l ~z:PKP  H
  PK    A             G   org/bouncycastle/pqc/crypto/util/PublicKeyFactory$XMSSMTConverter.classVmWG~Q[[lm
X\*Q,,[PVJ6!,$qw?/SG?zzzo 9y}ܷx)ОjT XJ	t$Rvs=W	tgsmo<%ϖBNK5^V'h8e"yZOly=GF+3vEa$%]$ہ]vluޅBFJڅFǾ@ʝM]mM+=Ȓr}Sr)UI[~7~s*463sõeTzyk6n]k}`大eWL9*Y޲/0QzDg#	W֭[nͲrf](? ΍#sGg5rĄ@Ǐn1[xBpF17GiȩR\|D~5ܒrO2t43G\Mjx_9
hPC>>𩆋>p110Ӽ<قLR!n%[ܢu6=TY?aYYQ:I~UQNX
6*L<8.z4}%SLl/oFMms
\<[}7f,?ّ~zIK}aH
LҀa`@
0f@@7nė>8(YyXo@Ø><0p$2p,&t$0Ͱc 3:1ǐqSt|tx:1u[NW'Ocx+c~n z2@Mذ<O;%_.2:]Zv%p7H;4v!N35	X}w
4뿓;YZE<7CU*~Ѽw47_cdVzc[(l	7^E+UUx?Uh--x9+ы*c^#Qf#}lg|pk)6/!
7pnLipz:PKh䇡  y
  PK    A             7   org/bouncycastle/pqc/crypto/util/PublicKeyFactory.class|Fl@q{Ж6a$N$mrGILj9@:{ou{/Hk$?~{tq<]2Ɯ=Xa[^V]83W*^WtVڪ9+#ΆJ/8h<
H"eHY-u˽eh,."(iLjv6'䵧.7g@4Z'Ya .bW4Cb/muh[.m+:k٪Nlb=:qYn9,9u^08oWGt+5J[[qngT1>FtLPބ\;gV{/
%DѢ֢F1-?,Ő}ASp̰v8%|]__R
O7C>]aֻXд[V4؉	K95b|bՌn=5əv%ԥO@G6NqJ~kW'Vկ|".'_9-w8}Uu?Tgn7jjٓIWutUO
g#EpfZ ZS1ZQz>fy<n^ďX_
F,Xc`4ٶ
#U
;{	*ZҶJ|LjMăκ`]'U-?}NwHG̟^YY'Y~?mⷱLr%եW,uϰuqhw+U
vv%r92uC/ӷaoԖ.2:,CA9 ;S]*Nw\^	Uȑ^w	MɜPCִLJy͢hwH"SNګqE]UqE9jDjM-]!945;r[5Wq*&̋hݧ{(֘os4Yz~%JVUlkz⌗=%\:i>q]x0LWFGssv(U-[.tWeXZ=
29i盈?T#OUد
HulYJTvh\96D/<loQzma~Q\v,T*My[Ϛs6?ŢK:hjZ;4
hw$Mٛy-|يFۓf>S%uc?iqm[l`ڸHzmiš=2[0&-뵗-NQ8j&Œ-HAܰv:M59
c4ͲxC<g+ct'Wqh@6Х
t]4&S׋=䈸E]cȯ(xh8EnllaCaLbrwWR'O|NtשX
$2vwʗץW.wO)"HS^;w{Sȫm jXJ9j|=i2-T2nH]2<F۬ohˍ׏Gs[<ZHw*ι}6WΘd[BѺ!9cq*,
#cLE}-LU^V_B;Eu#E54]NFjj.e߻'o)p,$Ml,07AqS	6ƍ&P?"KnT[n&|GKz5-EEEGtɌ?م^Kfč]R
]cLv!ג9M膍tRuʿ&uبNq;YSfN#:eǎD);zh3*g{)T?P"K''fhyPjGB'
5KlZ$Tb$*%v$v!;TbIp!#%vĎ1;VbIx %vN);UbIt!3%vΖ9;WbI|] ž6lZc?o}fbudyEckcT"Ro֪whw>YQG]cy':ͤW~aQUzaYnVQns:h;h35F3+M,gF7ӤӜ|]E&b@G0
<@lvkVVl(oeV(ÁH`0ね	6D`*0
TU@5`p.
  f`.0z`> X,@#
v |>h@; @'U@7@1`_ (@Vk@/pp1p	p)pp9pp%pp5p
p-p=pp#pp3ppp;pXl =}C#cS3sK+k[;{G'gW7wO/o_?0f`0H@PX \W<ϋ\=eqs\=e˾
/NV=_de+ۖb44Yv,|	beR++Vv_V_Qȷ+݁==ڀ @	tA`
0NN . ....... n nnnnnnn 
]@x xxxxxxxxxx
xxxxxxxx	xxxx
xxxxxxxxx 
	
W  30$ (,P
@	P
#(`40[[m@0	 BqX
~CCÀÁ##ccSS<Zw
(j?T`Z!X8S2MSj Oh^I&O6,|Zxi0§\>
X`Gp@
`&0
L-Ku&P
¢颜AvYRǖ(%i^~z|W_~F8w~8w(gsn&s9/Y3Xb3,5 fFsmƙ<XqVQk/m|5asVE93P%9I≸o
biXwWu6LԸ(OYos_c62<)$rMtլV76`fʼ f*.6W8f]κM:$Rx:6}YNttm1+̓+brW"`pD٘`yۦ[#3O<$5OYO<$2ɷ^<v8_g
qיǭ7/bDO<0)3ڥ%WtO<VWfϝfJWqbjfi܈$qD\	'F7ϙH9p^{p½E	 ^!Kpq=J7>!G{pO=D'!S{pm½I	"'ܻ{pc}hpI^r<'45pµN&\:	E VnIWMѸ-%25prK#\v'ۙp{-&pnOHF}N/	)HrCGw%%~۟p`F$k\p	#\pBv"Z­!7IJ֨6]j7Ũ$wc+l \Vn_	wOςѸ{	w'\pw$!Q3MBkTQ-0:oTjNO~qs	7pI^
7UnLr/S Q;pGX3|&[8L!LIpV
5:OpgF_	~'_poN*ۛp>C|.;p'F3	w: Y;pgG	w>. ep
]DK	w1.!UpW]G	w=n Mp7Fupwn="ݩwFܼHI6Oy§VEY
x(z(Z;&QEsr(l%&QE,Q.G-r(gr(gUD\EBsD(rWQA^+EN{rPKkK  ?  PK    A             B   org/bouncycastle/pqc/crypto/util/SecretWithEncapsulationImpl.classS]OA=ȇRQݢ*	C
x0]XvПI$2٭93{ r'z5$75es[EE*٭v(Viм9rACB{xMeonk"x%Ş$
D{B@I0STN֘ڪ
",xx6\&ߋ%(M~E;݅n7vWW]WT[L=.]yy[prEt\oͤpQi{Tn)
9i٭0Sk~P~MB
ͺx?/Ycg*Ϫ]
#gʣBfEh긤cPǐa#:.븢!g1Bv4K2p\nD
&F\Ą		4&h7q&z8Nva9\Ť1Rp[7nஂ{t
]='=g]AVj$uCѿVF4@iacm$0wY+k PI!q3x:ģ3>%"M)=f1}b\U,&
H5zT('V6#~>m2RH#֎po? PK.  i  PK    A             B   org/bouncycastle/pqc/crypto/util/SubjectPublicKeyInfoFactory.classY	|U?H:N9D⅊bJA(MJiRQt:CL$Ȯlއ{_YV{/]}vy4O?8>$નܾb&jڠF4^D"J\5q^}@۬yc ޘk<܆jÆ1,R#|]tMC;
cA;jl=svF>!hsH54oZyxttNb{Yx}X
"0
;4P"JP&GYʬnouFhZL~/Vm/z4{A_1MpAj`0hrge `GuCvonTpT7B%7'uJ/nF Z|qxI∦~^TITuN0g*S;4j	!mo+]FbtG#{XH
hbVM͝ըE#zOYi>mwLa3'<rG[Ϛw;bpլ~#wcpR 8\
Sn0A"db1g)˥nr&,»UKرAP]hu7VխIG˲y}>27UƼZ:M	m)U&7zm9V*S8tZm.k	)$/vՆUNN!,:Pn(%䇥h%HDmm#=5!*{=MCۚuZӑ.wunu6&ARŊ/F$oBXWC*w$/E{NZJ}
;yZk!W
>!^S)@Kؤ.~bQ=[5jDxXW2*t.*t,*
'gsn+KH{n)2ΜxyjyP>ycS,wE1Z~~VvG˪%C,PoO0:	\#ZKTX!@P#`UjP'`nNz6QF7	Y@M4	h"n&#+]f%`Pq|+_\YJd˻/Od9'?)-IsQ3"!E]۝E@NVW6[9UuEϲ|+'ޝɊЮjɧU
c(KXOӔGi+캕yt:ήʣp^]. [8Y3{8dVLe] UFu~lV1sjeWˣ|qU,۫bZXVSu
tYb|;():%]n:SJ1gmEq0'	8bǃS(C$KNN%"(y8&"}ܕGf
pwtpJd;SNIH{ȑ _o^^'m	}zg,['q,#oQQ&ŦhFrrwup(Cr		&XNp7A/A0	\Bp),̐ b\D2	fEP"
Z$x0	^CZI(	@F7-$<$A[%,ۨ x'M<B(>(a6>DGF%"!a>,a0cq	W#b\BP'%\$T$l%t'%lǧ$܉OK؁HTRR/b7De|U?яo?1g!)"_0Q\D?`/CkoDĩoE܃o؇N~؏ߋ8@{m?TA|""0"P&~|_Q=8Fc:8A:8ESxVijDW3"RY<'EPB0@ MPJ \@ !K0`>."`!%"!=E(C4:DC4:DCFOc'/}QE*.z37
wAGR᳘A%>ů?bx3`1Da	elw*޵m-{+b?|]7%ŹoUs'6F؍|hZr.i'IuUp8 9&Krsa,Jxck
d0Z̳ļ#ܞ`$fM2`
cg3pO;rxxp"]_Br]QV5|L}	f2rK'5{GY5is8=#&y爃r{jQgn~%~J 1jU?j~
cmznHSE.R0Vs)tetOt',G'HמmNlZxi;E7[8s15	C̪q׎gӴΜI#lf\U	vMMiԑa,ᦎxRVZn4xǬ9F.oMlKٞ%8NOZM06A܊$6G*aw8kJ0kLZӹX@N;3<@uiS2':I̎4sK%8D`SfgHp[Zp{cw/  %c9ށE*++G3JQ{?7exښgq벚e*+kjjؽܾ~PKOm
  &  PK    A             ,   org/bouncycastle/pqc/crypto/util/Utils.class`D%˺&N).)@Ĥ@hfcoMS	9z/G L 	{kVVZqwhi45Ď;QķWJQz(}R)J2 E*c*u.V1YU%erM}1ں&yUΛ>ܪfM_*~JR(PaBxU=,yO.*UTϬ*l&5*qBdqCPuyuzp	b3UT&7nrOM9qSqYuaYuQ~oEv=_l	cgmp	¯URQ]Xhvrof8*Eô9cϸ҂Czm3nqlPB6ض3nq	}bڜgû`VU##\f"nLonn+}J01}0{͑ZUI
GK#4#-REQҫd4?Z;ie[3HJ-tMG[G("Dwi	vnY6/`1k",\_ȂY:3\.fӹQZeіH,4Ҳ2@Rh(rبGlZjXcSMC@ljSwneKJ˰ĖWF̋@wfDRO]z8&..+k#eH	ĨNUnH+cƚH좖HN_N72\MX\b6ӥG!8(Pn.1K{U5𨡠?i*%J9YVh-=ȍViͱkRsmy8Xz
c5
^'|ie#(wBRX0].~v/!h
nrXW]mvrX]m7ߩ#j\dҐMQDO"e2e}nk*ȸ6:RP9n9+xFv$qǛj'o40FUA052%%i~~>Xԅ맶Ե5t?smM5HvKWDjZm&
mRiZ[L[k>8mnKvsu[^	;n4^v65"h)m3p!Cc5jkNCh/F2Mii7P\\R^^ZRߎݶL7&8.-nWm	-^f[ZZ^N`\Vvhw(-(,H7&4qͱNØӴbFRٜe&¼$/T6;%y^i_
T-MCLBekmɔM)zNeVRR?33̴0-o
*2,PRPQZXT\`)/g9Zb2tS"N3Ti]s[CDsޫ7w̸GjgH&cR\X&kñԪyɗ/Gv\i5a+G%wZԚ@w3kWqMOwh58jK	URZ]ZMiY?Nb'w-}lg4HKc>~M5xGU5J:3݂FV9{iկa!N՘au5XZ}#HqGAOGpOzVa6wQ>ǂ/뚺*}BΝ3jj7,LufϜa	[p^cbg5J6gBs^*-	;hMc&@?ZjKƏ]M}:m.93n&ZVΔ4/6Ěb#ʼsf>44[b0fNR^\_ŬLxY5vHLP_	5akkiܱXC1dwC9ȓʚhKM[áFNՇch
љ%Eji5cYW!-,
Iik`X'6%:a6$ײf3Լ=l'8lVŎH9TbƢ9Vԟ/4
X^ekyɔJHHHKe R-MKKQv	j1gk5=}*c+2XWsj]-{5&W*ۥ%^͹w1r؆YOM1^7Rױ+f;5]8l׍웥]iPm#nu\mg-%Lײ`k@g0ϢbݮLlffT1qBdqC˶qK\~%yV=nrOM>~[Xd3nq匟yͶ.AߖyL3nqmG0m3nqmG0m3nql6e[v--~-nKf)ԸзJSb'6Cc
^&r_c%Lsd܄_ӾrOr.#dO,ͬ5Yv>[vؙj%C~,L QX7c #0Nv yV<z}\zNu4$h,yZ/i\c4a]Wנ4r4q]נJ֧}Oa$=IXv^=	Y7!
&iq;ko<\Z71㺷J6;ܹm.e3PmָiMVzNBIika68c~lKrzukbם_ӯl+w=~^r_
Wj_~_Wj/ۯ}j?߯ :دC0:ܯ#(_W|:nI2nN I܍_	ȣ G]|Rvu\ΌtiW:d_w\mgj;k\v;mvjpw>=n3:wQmOM:tӞuI;ێ7ڭZySt,yCIKI۔I	rL\b,*vKGw)m:ުR>;GӤ*wShK~t2V)LuF;XT?S:wfvrc7Ek:hn7*n^㠎|p{^r_,k--vnO-Dy_e\9;yL$U"_%jfrkXNץ\75:]uz\]]g-Mn]Z&OnV5a]2^B.ٟ-dڭ~+l6/ۋ&{pUTl55vf^Jgsò3{}?mswoo.dgg>wV6*#lK3{,N$;Zn+}.-#Pk#ʾARSS''ggo_j

t` v>~_
(U"`	?p ur 
 f`ĀVD$tL,?9yE%eUkk7 [	lnn [mC#c+;_ *@ ^ 
H& A @PT Id`
P	 sy>b`_`?x cbUz2p
p*p<P*@Ey"T䁊<P*@Ey"T䁊<P*@Ey"T䁊<P*@Ey"T䁊<P*@Ey"T䁊<P*F_}bU8$4,,Q%K EE	 T.lRMG'gW7wO/ UՓK@KPfs<`>P9gZ~@y	xx
xxxxX,5XR0KÌ43xH1#ǌ43xH0#M4jjj*c ||
||||?"<ExL1-cZǴi1b<xL#JR%HT	R)UG7G7G7G7G7G7G7G7G7G7G7GVPw{ {4a/<^yY&2Lde/#^G_/a0ex< Ta`)PD:`9X	4 @3
j`
88*``0F #Q.h`	@( 
"(B@)PD`0
LӁL``O`P	M(G GG
1FX8xa@ 8X
 `+zhV-@+{+u>AdY@v@C	4Z2M?jS脶k@Y81-(m̀@T^P `8$juZv1p	p)pp9pp%p_jZ:zF&-&M-m]=}C#cS3sK+k[;{G'gW7wO/o` *@ ^ Hҁ dY@6=@
 ` 0À`$0

8`<0@!P%@(ʀrL&S]݀݁4`:0		*`.0, U"``1/8 888R"2XDJh &X 1hVkZ&m`+

< <<<<<
<<<<	<<
<<<< 
ekjT`#p,pp<pp"pp2pJs*ppz983U9p6pp.p^s>ppasp1p	@[_eU Mn<W 4\\ 6s3p	 @m`+

< <<X<<
<<<X<<
<<<< 
	t=.>!1	)9%5
-=#@0/o_aBT@< )@* l z =<@`0t=\#(``40  @P !(ʁ
`"0	LvvvӀj`
X
	6 G cSSӀӁ33 g  4ԃzRZ9*M! JS4EJT17MP<``q+i>$MӴq@}Ӵ8gY2MUi1	8PUZUkV
7/_*}?>NR|*9qqgǏҏ#vca_h3Y~q8a4~5ǥƱK1N;8l})Tt8ðh2qa8>i7ccEE(7VohoMOn2܎ZnCLZp-+@K.s}iϒ횶d87m4WWp/UT}Dhm3P`)Ib,TS%}p{=֢!t
BwC+@7MM>ǵ'CKU>~-(k7͗]۵
&䛖LLenܮe-QoMq<3
Qx8ZDӳ'l9:?Wջ3gX"8ho7eM7gͣvda%n6:nr[>lIʯx{=
=n1*b!MVr=
!{֗uk	$˽ځ'dAz@ku2݆n[Fb49i0Vjn~GFb2oaomӭNinL![ӭ#Ztc
2o!sywZ-sL<mӭ#ZӭtAr8tni8nLbpGFmyhnY;^[t6njsnGj-t[OmmMuDOqi[vvf6wӭcfjN~`k{;m{J:[h8݆:vs
3݆ҰhMR<4e+%4z0e6]RqeWI14Eݡ;T7^j77B%+S\I!UIdU(j7Nnԛo++z6 TQ9^+LlM䡽gz_M{?Ǆ/VMgue x&بs?;e-|?o󗒮db.E5tC+8Ћso;1;q1^kzmJ}*XViUʰJViUeZAVUiVgR/4*J$j4jҬR_*X\e`4*[UjK^zw;|{z}u39U#]#.QLNb=3)frO)ar)62D
cpjGPØ<Q0&SØ@
chjPØH
3_zKQ)[F&J\)V09OL
d#g33,EӥX)R2y0yuL*EgJq-'Js77ɳ7iRf,)c$)L#L'YLGzM9:ɫC\Fd+uP0YGduR0:]z3C̦a2@ꮦa:&!.=J0Ed:u){KZ)eP)g0).`).bH).fr2&j)fr0N<\<JKLهLfP&/f3y5ɋL^JfRILRalRm[#űLJqˤ8Ɉ3\J3yg
ɓ(8'RpSzw&gKaE)r`<~Lv6GzқR!қc\$&2	SIJ)Ne^Әlt&8ɨ'3B
Ea)8Qp&OLA<3y
7p]%ūLH1)^gU7le&xŔ#(,g5
7(8/Sp&_ত)e;Ƀw$HoO&<&)i؟ɑɞIEMYRb){Ia=G<ɟIJJ&kߔt;$SILN&&)Ӥh*&WI"&[wS'3܇MO˥h&/
L^!0yһJ5
c(8Rp&7Rp&,4~tL\$B1tEL:$
JQz˘^zKEz+3Io>Lk74
Q_&c0IޟIZb'Iz0yfrcfj!LNfj&,f2D]d	u5eLRW3YA]d9u5}eÅLfRR&i]_&ix%H]$&&Lfr(u)G"L^ ŧL^&wL^"L^%/L^!ŏL^+_L^-LR>kL^/?LR>0Ie+)d)>c7)f)`])fm)d;)g)a/0*L~(L/ŻL$ůL OҧHo*;Cz}L~*L~,ŇL';L#[L~$L~ {L~&'L~"GL~iύ=7Əޞsg{niύ=7f1LfSj642;]覘n]z5j;K_薙nMf3IKٿL~F)$oLR۔LI)L~C)͚AK$9O)仔LJ)O,T*4>Ji14RJ3}?iwq`-z>W׫z|%&O>cGK}X~Rcrwh*Ru&Ru&Qu&ꦤwmRR\f)ndRJqۤRɭR)nf.)nc)nerS
}Rlcn)ng^)2y[|L|X|T{|D{|H_;|PL> ŝL>%CL>.L>)ŃL>!L>'cL>-L>+ţL>##L$SL>/L(œL L&sL,L*ųL"3L%KL.L)ŋL!F	Ii$oeVզdVۘLzc+mLJifJK&%%(-ҒɭLnd>JK&領d^JK&d.JK&dr;%wRZ2%SZ2 %PZ2%SZ2(%PZ2%SZ2$%OPZ2%OSZ2,%PZ2%SZ2"%/PZePKߏ#  I|  PK
      A             !   org/bouncycastle/pqc/crypto/xmss/PK    A             *   org/bouncycastle/pqc/crypto/xmss/BDS.classZ|T?'sgdrH`<C	ÀWnfnL$֢aV4ZE%BxDAmݶ}9߽3sf}|73 fF\#p;9Vpaa>jܳmV=R]ć-TF$,Gu Bk߫F5ڎ0i$lٲ`%ս?H%:ū61"{ 
V5nTݚ7JaTK-m.r}ŪMaMU{jC͝>aqlW:/E"EDa$!	&Si]D^S[.[Fn-TW@ujIKm\԰ч6Z~/)ǍPTװ<iz!fx6fd+ں~S@ƛ5oXB^!t ,^
s:yZTGg(̒q?
#H6F21{կDej L]`NdTEBe-XGY.:8jl[::LH;+W1!QlShmnjڳ.aJP;cdGeCX48>1بżzb	r@
UHC(2M9#w. `!f(6qZF6hDMM(76ibHXz
 Փܣt"3	):3sTIX'(B
.4*ܤJm-YMޡ!БVKL"JTuܡp[5۫FZU563"~̝wzh#Ğ-Q\Ef6T*Z6
9UWZ^Dj9J*炬y7$j%I-^*q
G56&=0\bI4z$x7SZfo9KCшigS.ujKgb/*TUj#@"#tvM[XS#:9r}(;~Bbg#.FU(ڔeWrk-. qّվ=AQ/c71LJK"7B*=uRڕGaR#PhO(AIP up~i}>o=(`_h?CF;an;+C+eX%-2}2*G52^u24Ȱ^
2&Fe$fePeh+OMVdh/nC!:eV~-!ԧwD)#ZE}$;Dz͗-jҦhrR,wMUt/.qYƶ,4frijy^,;۴̷KQJHr3]&3DI4:y]&w#!S:H
iPR~Y4NcuHKhA"C@iƜb}y*J>-ы%bI wYrҬVEkǦj6/K{<KȢ\H];_H01]hre뚐]sŲY錘W싚,L.wnv'C
TT21nɲ xr,Tܖ*6V;U
KIwf+.h܃4H;,]ywUڭF^gH,S=Z>qśR.G_ܮ
lڑ|Y<C[31(V	*pa+|[0)0|G
L ef0b:3t1IB*p
dMenf23X+&ph5( $;"Q3L+0~?U`<Ls~{V+1|Q1|
~͏G^?)
|!/
w_$2|]*Pn/^+cPdß
w(\R&؇`a6ΐ`(`P
p8kX0dk8>$V88O8աz3-2T3,d~`
C-C
1lb̰'a:LY7240ghr gp22L`p9O~
0,eXðaNi=ͲY4˞a3a9Mk238a,x')bCa-k23p3íx;`138/8a^PU <n`P qm@ހ '?J+'!-G4G!jaDW(NzsܡTГC0 yU*+/
$Z*=;VN-ǕGNG*QJ>~[Moopv"
?ieoQ
 Q;]a}~/M{ݓp{JnwK}q'Em`!*qK*ԏIm%QvnX'O	'A%*6dxYĿȖq2<Gv򜏺1Vp)v2b=@ <T<cMCPnwj)Ki%=02'~ Ft~ReFIZQ#5`.'Kّԍ%dm~<.6d!m}f8DU;8mD
*U+Ha<:"
$b~^^zn5H-]~'Kk#o?nv;ymNsTv
DG#ay:9:l8r#Qvde5L=ݗ6vV!0;_YC3=<1H[g[[H&Rw֋Kw^h3W
Uޕw%])w_)DVJpʳuJ	Ϟ0|Z4|FXӪOk%vRҭVVp*mj=h\vukS2&jU9qRL$@<ce[@TuJ1|vΐ]U8>>gw,OP/_ӵ "/,_S:WG`j9mz!xF!]8',5ߌs<8
Ʊorn_%3vV6VxH_.weGpmO{jaչdt_ƹqnwg%nzC0ǳ.;!\!]|gtpܺzL8m-aAGKD'!b>wHMWahK#$)'S9gɾX࡮f&È{鲔{z#>,wuX\vnJ수OjN̘ywPhl{Qsfʵk!iG.exQ+pm[HnH&h~ቦq~1e;vJNI%ytAp(ʨuRvr8%#*
=kg)#YymW%]t&U~)"aFZ/OXV%Ŗ
[*%G;y?Ghe\tɗp/.ǰ,bXcX6bX]47XjNS;vS
)Ę'@?m
%}N)OODsuGB	nB@
BjIaTm('u:K씓=0{j.0szl`~L2o<tХrO +":q6\8<X/B	₷z}^Q\1yVOohۈI.a/?Xqߘ7?x| 8Ko~{!K@Xy艊cI]`'ܾ 3cs&'6cyE,?;|.Q-5/I9lP$Ǡ$)G7I9dPx{_>
vbE%p.T23.F_MĄ*ߘXyyN~.ޙW]_%Byᝉå+Z~Ǐ3x>
cLP[ x׬naXXm{3^/]t||x<EppvKn%pE?7oKpnR`q)!D$2(~ՄSt	
Ӣ.ڗ[PKHx  /  PK    A             2   org/bouncycastle/pqc/crypto/xmss/BDSStateMap.classW	wWFkصJAY,(qk@DFSKta,IdɕF]RZZv(CB#u))psop @ͽO1'Jil}ߙW_pvDxFMSp I,.zFgfLV!gHp'~A7Td>n-
f:)-iL녴5bsFŦML()Cx0S3:/׆>$	^Vќaاm==sa=2YvD?Vfe&tfN̐a$
d8?R4D7yӭlNs
GXHs,/!Pf
dgg%l?.X5wFrZϤz>?2mUh2RZU HL'A}nUb:o,Cl%%rFDw_6
O}ńFxD8[|>LȮP-h9L<%srnoVE;aj9Аhm
>
!1Jݷ*TPtjRNŚe3)	j[jǉjr,zʤ0--nU.1<M25#&Qj*W2A<'̔1cdw:b񯿝-k
4{+ثVO{ܫ

:t+x
(8
ޯkzJ_.)Qlw0FCpюMl#u"A[5::򆼑
Fce;l<7"-אOrf'ҸXo[6@x6NC:Z#,୥inbK>ii
Fف;Mp
	?ĥ k&o_6CC'T
-xXC3$
[f
8521laM|pix
;ְ.vcJC	
[e5|3(ikCZC ̜pY
i؆Y,XQ`$`(>1<bS<÷fx_c1×8E<Y>,bdxƋa|Yo0|ǋS<+%l^ǳgq~Q{Lȉ/QTkTkd '*HqEL{?'9I'^tZCkxhrbhU,?R63pWpqz值W%,$\G)D\5Lv*^w
~;1PX
B?YA~1¨m4gF"^^T
ڟmN+ ߥ=Vmg}NWfۉu>-dǩl4N5sY^WU+Gvr
x^=aL}.u"^*W1OY?,g7|'/ \xW"~rvErB>4˸wۊJlkiE4nӮh!sym	{+g(j[fe	!V5)MZ^׫{UII[C7(ZDv
!Q|IxMgbװZ.+6+M0UQ=e֍"]Wknfֲ߰dW),6hl9F
Z`
wWHⶑEe(?.w߻T"Cu&y砮y$;9,;I{%y:ee82ޤ>c]f~';SJ.)%'QAChxCPK/hR  @  PK    A             2   org/bouncycastle/pqc/crypto/xmss/BDSTreeHash.classX{WM]ftEhln6BK*KDGd;d&lGH)U`AQJ&wժHxFwɗ{={y/ ?oƒfl:	uge^S("??j A"}}1mPlF9Yh`}XVDzʠ惤e&Ub-+;R#eu=Mѵyu\flL$2iJh!L>fxҒ 8j$AU9(!@ӻԩFbb[TLQc'9	hSw3E(ws%=K4ܳcglHϚ15qAt5D:a&uXR}<Xȼx͌RU"Z*S3SJ+xd=eŲiވ<WӖ2$\X^7긢,RV$gu}()X\1vHY[VS:_)P'-fSX*kħij$}$gV*29aM1'2VWg^~Ni5#aUU
W%_G	WQ(ꬪYn	}5+mH(*%YKlϴzjЂ.[	KSYvw6ӪJݘNyd#:b)tT#M*6l:AF
iV'2"-)o}VeYQ`UZj)p
*P`8E$p@@*["-VV	.p@@@z
xK/9xuw!P7fe4c[IB3SBO[]{Gw_Mn5^TYő5y\JݭoZwU[uSP47ޘbfݑ,_O\Q[^~t'Om_jG
%kE\OMx'v,.-8$c)<2V1,ca2d4AxycXE2qX ]2>Ȱ
)7"-c+ȸaC22a0K&'혔|Hf|؇G`xcc_c/>|Ə{Y/1|᤟>U?aGeça|c8
(q0O0|aGh58p[c8@"7#>?4|;
S|8/aZQ@?+,jjf@WLS!lS;˃b.q7N@%1QzиS5.rhCя,Fo i7N,C)Ut+<,M\8|q΄=WE1E¤Afwq߻Dc9{m
3YćgˠC;flbs!	/a;\r\yy3s6~:ўYEW90/9Aaw=`Ee2!iOAI<_=NSpƏڞWG6~B͐ՠ/(.,ÎG(ggfV-ZOn}
pG%7sMN6+:)?L~Hw'N8,'S9Ұs2NaJ (e9綄8o
,HrF^+rӒ6:x?!5qJDru!wMmy:_AC_y=qƭ..09hH;E.+/|6,a9,{Y]'f|zO
v,m),3tLRaMw9o"{M̝^s\JCFCUj
FtG7PK
z    PK    A             7   org/bouncycastle/pqc/crypto/xmss/DefaultXMSSMTOid.class[W1!sWʢtQCeTЪH+%5TLL&vQvQ<Oo}Q}zgL 'm͇3wgy37O h8C? paQ021e88q'N1L0<$iI3g2<pNB ;>	l,e9&!4VZHO
.
V&GKOoLr%^쏋"iִFAktmѵGhzHGR+Dս4IpM/SUykukukukK޷oWO	|<߀n,+Fѣ=egFfATcX/m8B)=U=nt|Fl:kMc	_6RbN?trf&}`ZFNt)Ǵe	ZKhҴeۗbƚELxY}'{Υv!ZKy2+x*uJ>?e,)M=.졁lA֖:gdsF8zI%2+h]e\qQƜge<'y/%VFĦEX}O>zLnRG'kq$J绢J_z[MI8Hԟt?d}T7FOt5N'7pK!_V(xQp	*XwsC^AgPP0
*+^sa,0x#bx
0LƲ+Xx
ne\s8^MIGO]Fy
KC
panb5$qA|+:]@\[b(ycnƏp?xk%dMX?f;4W6 %|'b R3®+:Hul`in3.yz򢻼+O<NR(=U\%qm?xSIG7ny2CѢC9x`ˢ/b|ڣλk.C	B,9ZaJ.B*+7X$!)] 2o#0V?e(y#T,P$P&ؠ6h;HwGhb[Am^]wPzet߅C 	AJ=&xOP6;I2DM*x7	>t?D{>Xg,jPKC  
  PK    A             5   org/bouncycastle/pqc/crypto/xmss/DefaultXMSSOid.classTkWUݗM`IjZXKDyBP"`)$a`I|v~B+k\ɓd|4=wsL_#8+W8F8F9rʑxukopq-$8JgxM0قm97'*ʝTMMt#h*:W-ʃ\n]:P*UJյr.PK5v-[ql&NնiFd:{4B4<s<qM(QW
6AYC}
6f_nA9l9Ūeer3Uϲ%׶4*亅u}vݣ*%!W#[Fަ穻增wN`T<K
z|R\qg}j{bB~o<,
poY*d:o	Od[.ᦄI	)	J%aZZfڅ	ٺvZ{gIv89td_<&BMzۏ^nA/DqHvukE04^1ed\ưYdE2ƚ	˸
ݔ12>(2ȉ%§1c'۸B-l_p_Ű(E%w>ghJgI*
epE|{U\-!SKڅhΰ<CS?@'i:K5c~GUPG䵑ѱx8<2 bb&umEs,Nq2
#(h#k$0e︄TdVFk3~w'>q	5}G;=":\%(ʒ&ϑ	3=vUl:QcmlHYP!|ӔT)nhs5D7ĕƇ;|+*
qtS<*mtou%M>u0oP'k!PKTA}    PK    A             1   org/bouncycastle/pqc/crypto/xmss/DigestUtil.classU]WUݓfBkRjm5	!("DҤTZt0̤IW>|_Ժl|7\;Ä<9g}ι;O S0$D%K8'ἄ1	$&S%s!-3(`pKkk:%Y뫙oMi64
Wuͬ=j*Mt!
5]Pv)&{KR{[|ȳw4~sucE6Ss銱Л>Q,Skbu[S.4tdFMk+MboR!aZ*[EF#[VVCVTfF^.2^r5,{xbَ\ȕG#hzBӺc5wLE4r/;|}xuG<ٵmSޡ7)Fr, .7͆Z~j	Bn\B~k||o \Bě"wD+E| CWE|$")|0iLɋ	?zeQ8L&p1/C2yB
XOm
ڙ«=,g};?ܣzK}g3vy++pOϧxa.Q@.sapi,r(X&(R"i|aCí0>\*2Pp',u3ܺa!|tӪr(R54$(LgDx/}JhzR?l@ρ>
'a,ϱگja1w}:19Sqs-Vbq:'7;HlaBPMA%C8P<62B۹Y9/+LXWN? bױڛuOA/kSdEړAw?pwk[R\ b{Qz!QF\^%6!NPKv    PK    A             8   org/bouncycastle/pqc/crypto/xmss/HashTreeAddress$1.classA
0_j5U{D]/ĤGWs<y 0dyH[chWp7:%)-ګwmpq!;Ik.K^fƑp&[:Ԯd~c$|RHSX<PKӛ      PK    A             >   org/bouncycastle/pqc/crypto/xmss/HashTreeAddress$Builder.classTOP=mte'/tӵ3| $Q4Bci_&.MTMu [r߻={z_
BaZAJݠ(<!eq('~ 	0Qx><l/:9{)]W"!^~ąϲJjMVfKeUDKotS{Yg]{׏y*鄾8&?qbl.L.$
k
ʄ,ڗ1vn <u5jO?M[nes{tٕ͖o:**0gjw%W၎*{cNf~gkmtPD;WJ!.'J9Xk*a徢B3/EjRЬ5En\LO	E1&,sz?P}g)O8|)8cc}cwSl1
7<Ec/jSX'0-$cY0aaӸ9.PKpH  e  PK    A             6   org/bouncycastle/pqc/crypto/xmss/HashTreeAddress.classSmOP~. u8U
%f6qlS6،^O%#}؏Zvn5Ɇ~yyzsϹ'23Dsy!T~PR{CI4 sR
Iuò0M49<k3^incEojkvM#-[kwӎ?c↊eac\ItlQ,gX۽?ϒKNK'F{)UܮѥNa4iHpMBJ¬rm8WӞ=ڣ+_Y20!㦀y71Iܕ= +`E$$*`-;XϦyMOsn|hu˺~eH-T'JbƸE<~/ -&?-|hZb"de%úCA؍obHBJXBѮj*u\yׁ<I|6
Be.ȰSA8MӾf&]v' PK'(&?    PK    A             9   org/bouncycastle/pqc/crypto/xmss/KeyedHashFunctions.classR]SF=kɖ1uȇ~A>[!(hN0LJJ"ާ<屯LB!Sf-PH嫻g9] 簐p%y_0H}ڊVtDZ-JVZƠ݌|Opv2A_,JI gm!i($8D ugNLj}wŧ1\K9gƷ6ֹ=lfh{.ioxrBGvoq-mp׌fKJͤ"]T`ᷚ9>.Cin.zD>B?{(:oqs֪DCUwNt魐m͹m	%65{3LAskkG:vt[  PpR)90'Z׾&MŇH¸
qGPqOŧH3*>ƹ>h8/J BSm|G"\GtUϤFѼi:22%z' Sѳ`F+\qWK1ۂXzM\)0\{CfMAkt߯䞠/ŧ~Lɕ,em˲T-*R#9+TD%6j2nt1.m	߻ͩ|IJ?jlVbҎz,&/g-̼,$Rys=g]j8vbzm|#]3NbA۵6Lz=җ)bm'PKq#0    PK    A             5   org/bouncycastle/pqc/crypto/xmss/LTreeAddress$1.classA
0_jU{n%^@ąi(j.<7y`@ѨFZʆt;_ݬ`HW-,wGO*OlAdH2&㳭No%6b?d)y"HPK      PK    A             ;   org/bouncycastle/pqc/crypto/xmss/LTreeAddress$Builder.classT]OP~QV _өmL=gm?yJ?e|O׍`g/y=~	`
0HZKmsb(ݞ׍gPðnYYИp8tQpq"1lA<}bwhͣi'GoCsįS?)^y~v{RVY%{#ZÏܨLF*cAFIee/V
dx3щRε/UOM=(*f5KT,
$L9
UU0u<Phu_ANN;tՖ`w
CF*5"
r"Sb̓~0)>#bH0_	c|x$,FB_&zl	槄p%O+cB(VBP$*R~`x8ЈN)z/	`	V0a}c7@r*T؈aj5X4Ua*ak PKhFf	    PK    A             3   org/bouncycastle/pqc/crypto/xmss/LTreeAddress.classS[OAe`ARݥڐؤ&$4DӺ]ܝ&?
?xf[n/߹|9sf?԰/B Gf!	~!cJrT"ؼl{ײ2PF$N#gqӳSYmt<1<t~3{rO>N~
Cf9}*xzq-;`ۃj,K厫14=nѣƜ3m3	s	nIX`xYhMth&{ӈǓSVj2fqGۈɘA\5S/AwH@^z@`Ej+x,`#U<wyىoer㇆ۥXnz4\#s4RHIQKȊvϊ# |NJQ쪪aKQ$feat⡮x[WPkQ+k5e<P!@>y@R(tGzD+b!;O3U%Q~&Mݣm'd	PKO</  
  PK    A             7   org/bouncycastle/pqc/crypto/xmss/OTSHashAddress$1.classA
0_*=D]Hz4
%&5?Ā'pfx`	CʻFZeU`עt7z%)-]pq!鸓Ԭk"2`!|kqtAUo$Ҕ-0F4n
k$KPKY      PK    A             =   org/bouncycastle/pqc/crypto/xmss/OTSHashAddress$Builder.classTMo@}'u44@ ۔:A@JT	HERUpt+8TB:
K!yL f4}[z0>Cy|+bٶyjJo<dPmgaH<r=ףՒkq7͛A82oƎyxdvx|w/g휊&u$h	6/Ty5m硟O"wnz"un
K2*2eTe0SIbU:;ϭg/bnz_j4d`bs}_
UH(Xuj;
+}=-!=j78w8D[B{iU^$Г5C:#C
CM3į5HD/
V	ZJMSBB"Q;S(T	`%6"p/	,g)	1L͔b:vzآiq
[^nPKuX    PK    A             5   org/bouncycastle/pqc/crypto/xmss/OTSHashAddress.classS]OA=C?,WvvX
1
M0
OvnMA ζh܏3g;3?~~mX._gU)W?GsL7{eR4mnPa儵e^X=J,PUpϷϳ)~myM?hogl8`v;	}{
BsJEdLvN	6|p|4U2Ⱥ1,]8C z1wHP%,IHK"aYU%-=)DZTQkcF"b

Ys-n
@ MؔGM>IxhyR=	jsD{ƑA	H)
ҢIӢȦ"$O((!xg00 >_!x3t)W1y]]xE]]!O</x _< !DV&ňVłC:Mg*
zgxF*MBݤU
~PKI+p.    PK    A             /   org/bouncycastle/pqc/crypto/xmss/WOTSPlus.classX{|&;3LB^\HTnECLkdf7BB>@+VSkQj}X
E־}$5hB{s|s< ,N1Gƅ2*=2IFkd$dHHji*/ 6!M
b9+dE75,4w6v:ԥ	dg.'2J~%ޞx,ٴ.u\>a{"A=Iwo60aC:8xD*I3U[.աeA-Һq>ܣ4+.gh4gh*\eAe̴jOFfZola=PNk<7ߚgͺGKk6`Xo\	P;ۛϕ@Q*1k_=fui]/VczPSN֓l=wm"qxvs:}SiV"udT
F )Л&$2-OF۪&d3cZ=I¡>}Ј(5EJ1n
n`u6X2W4KuAaM5zwFAcX,Dk{:
w9>U%pm &R1"64
CHɘf@2ez@,ѯ%DcX416ұV[p1z־jdZ)zJRR['"BK)Zv"5gR)g7y]@򭜫Sl|*6_ymlBX8Ğ.58=6-nZAC[8تSC:F*(9}EiQШ̔&.仠'f(>|gSzے4MSߒϫFlXted-m^
9(W.LFEF6RVb3JW궒iRoEp:JEKˠiUZLgNSTy<`H8Cl	opN	$\,KBITeK\	WH(J	op8$rg#kN׸DjUdLx+6[<Uj,`63oSsz~u歝EFsi	㢠eZ{Vϳj7<N^|y'7.-Mg"=9%,	b[!xən^SZ5<eQTLz	ϴ]uҶ	oÒ	2Otn)n
B!:{u6|GE3
>gN<a0,b8a9J^PlAA`-
b4f)hA ޤ4WЊ(x3> ,w+8(8Vƽ
.Gx`WUa;éf<`P0|gb?ãe[>\C_|чYӂo2|g>܄a1.<p!00p>f>Ë?`Ï~SeA`x)}
?aė.|enCm,.OEt&zzyBd
*{os6NMtnp "j|P|rV7*; Իn]CϢr7nWOCJ('Ke|#l|R>#Vңd.3C8A~+$*іglO{qLc/C
y6NϟnXeN[JVXV8>c9ǙژXqecKk5]Ep*Zb4j+pq[xX-[J{P_-F"ArOTŝP]V	=uXo	O6Uۗ{bؽaG[rGNu޿r`qU?[Ǩ{'h0cW_ɂ<"Tª\A!أU!:n{Z	L)w	Qd	Y{2|9%	Oa3xTCYyBDzJYt>WE	gB%("^xMcء1iaWe%'T=o],MQs^ &g@<÷O@.CTl3ڔMj]mb6={՝j[/Psw^"jg'ŖMw56q hm;<k.GۿRib1Jw&MiVnGqYeuE|Oc2U}~[@pǺ>U6K~:!j=B>YU5OLcv	&?&"*<*̄;fk_Zs#݇T-b"Oc"6Fղ*F#*݃R=Ti{ ^~: h{*dKzDf?YqM1T
{fMmaרYΏPE~UʙM@ˬ{P5˾ۛ0EY;YՋ%<@_L6;n}^{vPX:KEmx/Br-mdjBF=;*Fq3B#´TG%gwg~ʴHPivt59	*Pa(d1D)dݣИ|6qMsBv.ZlR*:ZNUA]B=mGPKa    PK    A             2   org/bouncycastle/pqc/crypto/xmss/WOTSPlusOid.classUWf~HBu\TƤ"n
I&;s;ns}9vo(ئpsso~EXb B!_ cK8!ᤄ!	N1t>lA4۵iZ¨B,]͌gkXj)҈.eBbPזVDfxX$f0RlߵN֢e%n8dרT,DL2kڦV@%S
1ܲHM˞?ȴ*J`ieR:T|-_
md$bvq4u|Ψ_0*=u,:w90D^Y16܈M/tmӨW~2u߮hZգ8a5,ŨT4@5UR[^ɾgsCYLYDDgF-4h
rl*|Ӥ9Jc|+T{|(oh;{mHB6|mm?L$SM+Mx߾ːk3{m@:.8:"sLle|2N㊌$㌌1|#Fx!Gq|<<\c7r"G%x(2tx%-|H~[&G_AI
$Tr@.B8UtJЉެvqKK6
7_d1[+̢i/!b폗XCï1s*b(Qzi,5r{um߫;%C0%;$	jt
tjbYԆ<%ڈRV8dYrw^S(34r*SxMk**ؘz+5
|njP{kVPKzx    PK    A             9   org/bouncycastle/pqc/crypto/xmss/WOTSPlusParameters.classTrD=8*qj*(T8 MSH 8㖏*(Q$#01do0]ˎS,&g|{޽ww v(ɔ5H2q
˱;Zn8U+8/,*՜Ts=jF×4t=ܹ.QݰlXHv]!nBO\vP#e?F_2!dF3Y0zY&L)V𨵇˚GkpyKNSl1ն
S<c8}ݨK˟0vR[Ne]Jg9武eWy
61bwfMҾm7qyʆtmCNVY(2j*jO;9 ֽuUzԿ{;FW.WJv9kǖF!u|`#?wyɡb8xQK^WL	x]xS@^:
"djw璃Q^%Q'%Bf<wg	+ۜg H_8YGṴRhЅ!"*"I8d8xOe/B@D) aTi\ qS>D[cm9>1O81Lc9R
w§1d(r"F/|)wûs@mJxV_6lRTZw@c3]{k'RRdy0XYý3C$S9tռilaU[V7w	+mv6zBY@#Mwi{E&g~<W
4S#[ك`Or<|UͰExCP{Cf 0YFv'<u>Hإ/ҕ=JD(]gB77B;APKV(    PK    A             C   org/bouncycastle/pqc/crypto/xmss/WOTSPlusPrivateKeyParameters.classROQRZ
hK_m.zAH@=AQ>Գ'/^5Qk4)Gcy+zҸovvv>0+:8ㄎ|a9|akk'OpAU۵F0a:+7(g	"\A
!ۖe~*VqʞJ0Lln8ܵew^k
_uʶ:킵0%ÌXFիft?6
3h3vkahY[zX	j2*w7ES_jr[W07?sh6hWd:jCW;oDyx<4hԐpTÐaJ{خ5a.SǲH!D2	$qzI*x8@	dC>)s>	)2t_
*VΫieeu!fb؄1	nYKPWc!;L)*n~l!Sj@VK$˃/E3Lfp1
rN706qnCy+DPK1)>    PK    A             B   org/bouncycastle/pqc/crypto/xmss/WOTSPlusPublicKeyParameters.classRMOP=Z8"30RHH@]AHQd>k2HܸD	,Mc
}s}/?>U'TRѯb@E!Q(.FvP\`h/QǠF/lr,9GQ4lęB.	5_)Y	<UUr1E&}^mOZ.UIGGㄕ0$äzխ;F=6toxշkAYY`&`0zնqT^rr[Z6A~v6O1tx%ivjC<ӝ] ccׯqKO"Q)QVp\AFA>R<؊-ǜWcӝg]IhЮXh:hFax#8 .$JIbg02C5>mU"h{kj~6!^F^Z9B.SŀWjg>!fM(@"vGcb'7mM{ly%rDHN!<^-QK0&
,}j.`DNcF͝zlNFZz1PKmM    PK    A             8   org/bouncycastle/pqc/crypto/xmss/WOTSPlusSignature.classRMOP=Z ~#E!uABRD՛N;oqpEƭ&*FX3ƈUč.9.)\qB)}:uRBlZ
ōy==~a\ߕTi|1A#(X
:"L0t<ѭ/E0ɟpc.xp7:-[ԤФHΤ`)l0Y	ݰy$=aۦ6j20QdY^VzC^40b.u|.!=צKu[	PSEOOahA]OJC<W*'t	>оiN>iyUNjtID;44d5ЭGC/COa1Ӓ;j!Z5'a@cʴC3Љ6Uz
#8 .Wf4QP*Sfh'2%^[O`ha5#2eHQJ;8OȯgʇYS}ԋ 1l̽l܄"'fE>OW_K4;tl>Hi0a tfoh.MKo1Fs^#~PKKwI    PK    A             +   org/bouncycastle/pqc/crypto/xmss/XMSS.classW	{=c+E9IBLSdR8.vbҎyǐZhtciŴXN1M%}7;3ҌcV󶻜w}w_KlĿxG7Ķ v+AGBc=hY@˹y:Δ9[4]nT
pI͑ᒖHhła
ژj[ĄUTi8Ѕ!A͘Z*äUd	+ٞLZ4Miԫg8QjyRq-!
l]I!LBYI6wҞ38Blײ´rn+f[y߾w_r W2ʨjxkyi-QuLMT=DVuR^֎(ZZAp!ۈORObO)(h%@'wxT%)%C&IAUًtת0M5+"[Ftr&!Q0BIOOUʉDژ(ZD9۴0>Gx8]ϛfEeO&%lK(r6c痠HkU&
F{TF5Kֽ 7gro^=^	,~trnPN-XndJ/%tPw['(zVuE{JCp0F,ݒL!H^#T^Ml}ŠtAf,*YpbFJq<n2G:-3b"""s"e躏	C;8+]5&Kc؞bApH7swv]n5UѠvʁe62:dtʸJFBe\-e\+:˸A&et"cuQ~]Hťg_S%&ujϽ&}Tl5p'kWErd}e[m#2q=?`$z==U.iY_yS+z(qv-T*?YR7ɻ"CȅjY[Rԟ4KA3shV,+؎C
nGN+聮`'

#`EXr(
`xÕ`v4+X{.BQ:V`*[ބ(
w)x3YmBQp+ާ ɰ6kpAգzޯ(P!3|gBb8.|<χ^<8Bq?O2|#a<B,!d1'B~>IB84e0|=,ȲWax4fAO3|F)zT_mB+ˮؖSMS0L~O	:d,C+87n)C얒VH|Q/ƋWTk4u&XOxc
^ A	tQ*##JVf3tjg3Nx9"Mt%gceLI";I:Ne| uNqi~(i\?#.A2
8ob(*Ogh7ys'ySr@úmͮSsVuTFy4);׈O1cĝ5qm$mi/̥poB)o$CȮ>rw]щ#S>?,;U_v0JA0%g;)ȣf;h4Ѣhu:"2m8㱪WʳpJ[#[XOs1<,pq'i7O3Tu4^`(;A!<E_Y&m/TRkԧBZʉ
*5W6B]^.9J-hr%6˵;WCu::?*|7P*V&}j1T/®ĭ.k|DըF#ge,Gx5*.hW.[8Ga+ePK4/    PK    A             :   org/bouncycastle/pqc/crypto/xmss/XMSSAddress$Builder.classS]s@=K4GZ[@
xPLH2N_Cءic$O:33>QwCMLݳw7_mV2]I+fh!ig	X:Ct<+AlAZ^Q5
Hfvxh8CzguWSn8с>3յ">0T~huV轵
ۏza&f3LB/qa69OL0~;ˑbO{bʼgF7{47.}Vȍ$O'$
0<1~tR
ں* -̨ b+9EQuX4F%5m8jZAyXKO4JLĹc8z6	C
]#]_md(^ֿsr"qp%zwE^⦉{{,cY?gv
BMY<Lʩ鼬UW-q]V|>2PK$:    PK    A             2   org/bouncycastle/pqc/crypto/xmss/XMSSAddress.classSmOP=Faڭ`1_&h?lh!&|*Rl;c&G9/ss?|PG؈ARs5Y!a߶+xHH0L~P(.EilyXuZiܫZbξ!FDYN֬3eCxkGh1w>c]}`u4z獩^	\k_Yu-=ſdI3n-xPTG:K2ʸ&:CEm^d-/m@AS
.i2b
0

XU0[Ӹ5wM`	jp/龌޻(uގm>U2Z@i&DQtFm0lQUD򟱙(Pa%PAG bBoVN5Pb}<}T()j)eҵT2CdFL6QL
!"_Ĉ.OutH46a2ǒPK<ଔ$  ?  PK    A             B   org/bouncycastle/pqc/crypto/xmss/XMSSKeyGenerationParameters.classJ@M4ZO=&QXZxB1PۥDn݊y+EP&(DQa`^^Gs}L1ӬVhC@sKA.VcQ
)4b~?zveQeY644	_]xt5/tnKUB29U(??C?]LBF]恚
]w"ب\NyN\w&.0n? jCի#xPKc     PK    A             ;   org/bouncycastle/pqc/crypto/xmss/XMSSKeyPairGenerator.classVWUB|TmՊ@ڄ>h
K@(,b_mXll}zݜ#O8%o;ܹwvU"5*_0\?lZ;BDL'%N	Kغ+¼n^FyApBI붞<H&9n%	2YՄac-LH֔]Z7Sq5sµnIOi􉸦o葴n"s5arMx vĦ/dT$[F7-"]ȹȨSЎl3sޭHIdY֍fq"TZ94[nh2ivqIFO[PJG2hm
3kUF*j7MFYh{#:.u/?JVJtWOڧbWe&㌌7d)# [[28'㼌e#]$ߋC<^^
4٦ĺK C
V)BSnOrQ
7KYZ[?[pBa'Et|;w<
7!D=r^۲U:&OlV+I_Xw9_岪
aPE'$mhQq*N1fbx>*с~|$nP0ʴ8T|q2B~|0ƓU)qaZA/fASFB%|`(BK
pW!Pp
}(9yO>S0e/Vdk
÷:}y|c:eѣr,;p(eʔdhՏ>L[$}:>YId[o7+Ȱ䙾
{>=Ho{Iw^}x?eI
H=<$z"{(Lo#VaP^lg^WڳR-|V<24n'3rA_8`-hဟ9dG[۸|ۈ.`@t9A9 ?)a7*M}L1,PK`{,    PK    A             8   org/bouncycastle/pqc/crypto/xmss/XMSSKeyParameters.classmJ@tSz][`EPR
BHo$!DfbJA|(񴴵PfemX}3$ϑ'q3n*YK?EOM36秎ͅdhc
-S!׬ I_
#B2p&>.yԍy+vsi5!%UDUTU$擩
MjGz?w>Xu7dP Dr(=w}OHӓ}s8ءM9*P# K.q|׉KAPשf7"*M7k6wQyd1$Q%Ȳ#oLPK=H    PK    A             -   org/bouncycastle/pqc/crypto/xmss/XMSSMT.classW[e
2 %f&,yKLД&haewU0Kfge%Oz.eEygO k0AyуMzك-;l: @&n_H;
(9/ݤtUG5mjT@PRX'kTK۩MJ%z9h1p佪nP\'6Gb44BѬ^PH.3Hl*|PDxܲ]Z!CӶʹ\Hga2\Nǻ{Bht\
(4K3>9˝Mвq\%FCj "hTQ[m<%,=pwN;9w),)ja>2pЭ@O
,6nU5Ѽ--P<OUӊj1-iv=1fϲHgL3rEBZ$۝A	[pGIj*Pr[߂6~jXsChyN˖O
s,G[C'WHJk9z5MNCLu	;CIMz.=(oZ7cȍ,zYMyyM933c/܊MX7=Cpú5bAuVH_J	u|$4JKX%! 	MZ	k%^t=u;"TLM_e374!cf\Ӕ;
aͩ?p6\x\ e"|sM}_[~˰.Oj746#`{?nGf*y{+wyKy+w3x&-iJI4cPzU1qKQP2K +IQ(
BA;*<`!Tpb*X!Lbr7
0+k
_VDQ
/FYz@cLbLLL؎e`SF'c.ˤdMҋL7dbdrHF/3yɫ2B,
4~5&`8g c7^i0}/N2+1HQ45V.5RR"
qE{+^cCv(7wBvM˾)5Np7`4L)m?oϦ&/)5#R,[.	ڒE(K!vNtgz})|軈c(O(]޻>FW@>:A8A97iM䚝 )x
aΤgv3t2WȸSbs13q/p~MZ8Gg	T?k~`M4޾L3,%Yp-f׊WUbe?,OBh1>l7R", ǮF)ύ\7t]*PIl;-RLd$MZخwE`jӹlT%HHG;r:Ņ
t+o˫1w
-iF	<#^2W3el'3'PDMïti0?PK.L  U  PK    A             D   org/bouncycastle/pqc/crypto/xmss/XMSSMTKeyGenerationParameters.classAK0_u'*QO]<qYexY4[)(} ?Ł(2^{<.C$21=TY*UzJ\
u>3/$JQiѫa/
ht*h`7ܰsƅ#&'*힅c \+z&aA~.S58/vʱ`Ӟb}[3Z@I8h|:%Ԣ'o| PK,5a    PK    A             =   org/bouncycastle/pqc/crypto/xmss/XMSSMTKeyPairGenerator.classWsUmfe" jbiJ*PMb^n[~Qlg,O-&鶴f3f&{wϹ{r?Hhu:OB y0!%t0CZܢu+NS%=(#,KG4ݐ*1#a%v$	$hH+Ô#5=.gTRW˧9嘵"e헰+q$5ءgi%ddlI>3ɖLWp2Esł ;';#Z$3=DDK)R%Cʑ$wD綼8f%ʖ%"#/rJ3r*D5T^F075}c9ӌP@$tQs6lu:͜؞N¤Mol:%hu᫿
nͩFԧ=
R4*yoF?¹'k-S^vu,wr!qF҈]H?=F<P4*nML<t*^-o`еn>C2vŔqX&c2q2VɸKjw˸Gƽ2B2:eet薰lh
n#Z:B%XyI؅C@AvRrZb>MxQ6T
q57+84>m
A~\C4oT|פ;<5qy=]#cLOpl|i-*.=R*@R!&Ѭb1C;ÍKPqZT܀*"xX*nBRQk
x,;~X˰Aƣ<q'17q=6<b
6a!ŐVU/)lAAAg0LېS@RhW`xEbAg8PTЏ^U0*x90	=,}ΛAH_V3Ma9>݃f4qUi)4hbAکm	O_	b2CԮ캂pp.d8NNUSMVdj
O5'/mćC$8eGw/v{@:>$^n+x
FSZXw&f I,[f<589񃍯akkh
7]l|;<c]x&NNtDl]vu7O8Mhʨh'igs<w*^τ(~qlTȏtx PK]o"  X  PK    A             :   org/bouncycastle/pqc/crypto/xmss/XMSSMTKeyParameters.classmPJA65M4"zmwO zӀ!Hn8,+ه3 ?J!B3FB0+2wDڍ֧Y#&W]j%iL]RT܊c[v&SgsiC.[}ȭ$,wZy/LH8HaNhNP|x'.3_*XƯumxkOЀ-0c+~Fq/PKyl   f  PK    A             7   org/bouncycastle/pqc/crypto/xmss/XMSSMTParameters.classV[WWBI PS6D1+jI[RnAb2Ae>X[ZmL@s}C? <\8£.p{"@?+ӵf9P.wGDZ1
9V$T/=iF255%Լ154WDҰƓʪS`ik0hlNUVjk_ffW6vEQN4^F.!YL5}/U՗ȩ
q}FRIZn-~#TgC5^RC煙;zSYVN#&}$(Դqy%f
-CUnfn1JtMfhau˶\',ngbDAqmY>#c(mj\`rjJqT,(H5jޙ&erBƔA%ZNGV853ûrY#,5:+VR|pL]T
ٿY5fTjvB#XqnfC"t&%YYeA([{R:|C|T&Nd[iY̢Ǹ7_+HIxDQ	~	=NJ8%Wi>i;8thgsMT&CՑkJk'*`uQQB4?jt^5O}O55IKWJ`醥n{/9j6>-g69!vɪ`n>߳]zBж֣p+Jp8&K2:1*M7ClØL?.hB/66l\q2i2eq!"cI혖рd#*2㪌>\scϳy͋l^r"\g3e67<9=8x$ny0(Q,Q$,y00Ì30lt6)F؀'fk@	jG3q=t6F
%Dü
O:*'UĦY
P1i41󻙸.Lfݨ?}o[E8$l@:nױ|W&<K{Cۄ5+{Ir	8iD?
;~F[xήy5k*:E]3*8-`R7ܾ[\^Zǳ;0"V]?%ʌO3h+gq)G:ؕY1oGe'%!b|TbJknLԘ>V;7C|UpbxYL(<xc"PK-\GC|\loKe*.-G
ہrwFd;eu@(DdQ4ڤH(EmRDk""- RD`(ED)"n""o""lRD(eY :E)"%JnQIâ8b"">bպ%/PK/  5  PK    A             C   org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters$1.class
0EoZ~{IDi|TKԼ( ?J	g90C_ )]R\n[ތnb_ZjG,~vrW6Syr,=1Z1ѥSg{!,3q2F~GPK,R      PK    A             I   org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters$Builder.classVrV8
M BK)$Lq[q4- ˧cB@_iHPmweI(28Y}{;GO ДЗHsk	G\Zf_ ;n²F^)2TARP*Ae*\*Ӭh붐_ު+fC4M-!^Um	Gi]зؖ0DB8iQZПި7AαMBӬͭ6tˮt;#mLooZV:wU[252
Btc֞Rvьx
*V TcU׌4֨lTK9	ڱR^icsW?| [F co,8YyYܓyh-FV?%=@i8##	\}Oye38Xms~DkϐF&;NfG
o{zգ<<?&d׫òFhwqD)sU02g8Ug* T~FWWU^݉c
y9
_2ggaA8(bL`IepdciV{
au5Oh,z.)
(T?Oo֑\IsyWrԕsGsu?aI>bim-G0vPҤ<fXcXaXe-KB7ܐ'(dIY;ុpop9׀h߱ux6kۤYm.k|/\slO?٥Tۊŷԛ_N	
("#QZk~ƳnƓnef[%?~NĒ&ƨۮIHz٣̆ІG]{tħ=si54c{ ^cGJz nкGV^zvv8Sp>&MvPKN
    PK    A             A   org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters.classXx\UOf&<풄.-dӒ i4i
IZPMtm"
ESBM "(ؖq޻MJj̙3gfΜyX!ʨ*C2T22"2:
kjC&YQSEYj6jB&UŜH4	XOf䩽nMCh<j+ HZpᰦ644d\\\bE.2h%%%a¥jѻܽhXÆw'.kGj\`qXF@շɀзH`ghl׆u!Kĵɤ:,	'a7m-lwOh.֒I2Dr-o
mHa#lEp{Df5e]}(7QDD"".ԢHQy(ц,uȦXꝴ(&bT4CK6E]ޔHW4I7n@˱Y;inX"YzChmT.aMڀJE-1HD_7GQ%L˯VwD}h6hDɍ֘	Y	bZ[O
hq#Gh!39'g%:SD4Nf6^)8.#IgnbՒӘ+ےjotN(Uxp&"h*-ed=G*<Vu#^'DЀgCXutuutssjqj:f q	h(z"S٩H$5NU !>5L%F4&P5C6Ez+/*3 {N%$fM N5Mc03$CIA(POo
E9LY80^-]RcPn&3o+3\f4CozrZFº$P-}I_+h4x'ꈎΑT>ELڍ[f<K,
ĥ2=\J	%\ .&"	6H(b	$tIp.plc[
&5~M#No?E
g±͇״ۆW75vc'/Nvf8]jIڡ!>5ǧa~>y"4f6{;wjrЉ>OD0M͉!>+S_sdOU3.=	.Vr0|{-3<W	}Sswko~rl~BF&zMß|-+')؂JW2\xS
(
gXbMkDy
d>)CZT(hO2WlŻw+8a!p^*P
`hća1,ĭ
q )0vq Cp'ޥ|T[A>`;Up2>^p'ga$ç>7Rxč;1c72g|!5&<ƛY=>ǰ3|n\	O0<
o1<m0<]1|?e~[7n2FfC7nėWԯ"Gk"]~1q-i6sH&؍hz:Z[jӭo[͘j:
SކCF)@#9^e[Jslz7GlsҧqY
U@a=Y,
bAGݘ(I_{{\!<8a9Ǚ?кs7#Jsx^9jrU5IUMrUSQa;9Ǆo/9H1Qv;SV8ߌV[5&ų<˰$ugl,*2YxF,,sG{<c(<JЯҢ4ő֬+~%_Qv<q
48~TQGdw3++[N:Ӕa]~˺.KE=HrXVJDQ=DͲ_> :lb>YEy|۰_l-`YrBB:?E@OHH}퓃}z*y!	#<VR+{`z\$x	$ZxL
0IBRCl$pd%Џb	MdQw,yEx'N+ė^
?Lu{:&np%hbH뀻7 )O
ٶ#^	<mڶ#f[\jc+%|+dl6_cn es8qf83Ws#cb8͗dg
yhL|m~7\\7/݊0Bv~<IShĲ2+թNs7-` x&zRJU`n/wœHsR2_j|VGR>jMsl,Z+ec:s$V84%M@LH9x2gcޮR3B4^V(;(MJbQ꼘wbONc_LUj½m%i(fXNs5mȔ(<V+}e{.otkw0av՞*o$_}"pG1i*eZx0LZi!2n2YyF񗴘,gnKop/C睛&N>L9}wq9ZY WCȋ}	mt,/nﱏUf+ZIEx PKGe+    PK    A             B   org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters$1.class1
0 EjU{ 88upMc-iRT<-<_ V$53**鱨wkmJZN3뤠Snih4Sg̰F8a,bD"f;ť*SB0+%V2kM!ď ww7Փ_PKs4       PK    A             H   org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters$Builder.classTn@=:ubܒk!iqT<ЪKQHA>9r`;?$>BZDa.;ήߟl`aJ0LkBƖ96CBxe<b.:pѢV̐9>Zky	#~plgǶF.7lF䛟O|_Tuױx\G<'KK+b{<`GJ:r\kC$ӍnJPۮqNߧ|r>fq)2PeȘqb]6D&̶TywÏaukwD6x2]u_&R29Jt*T䄸&DTLP4@+B<T0G
+	A)Ҏǃ
CbH
IT*Z:ٖN)&N
'H/xl3
Q0
gX1^2ס(F񵃹1Sa=Lwz,;la2)$imL$X놧qw@n850\W&ޗ|JbPK1  	  PK    A             @   org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters.classVsUm
Bi*),jZ>@HK+)TmX
4(o>:o}U3G8s7Kdf=s9gϹe!|ތ`8	`AK`|0xAB85T)HD0O''1q	AU5;pSi
U+fYW9`d%lӬj=_w3,.: =|ٵU}JpwԬ2/Sl$t3wrdZ #e
˜IC.9ԛjF2eW]"Okf%S0^Q	R[ƬE{s5Yq&du3Rq%7jtdU#nlJ%uȲ+U3:3ZFU,/9Nt8=w[k:Ҧ[h>^O8ptm	6z0Z6WK)][ݰjumwuC®g5gKxYUNsSRL2KԝL^UI޲-tV[&Jqp-13t1bH2f)A4>CHjI^|\fՓlٰںY!u,Vi7}^SۼN=d})9+9e+@RpPN*؁~A!`'Dl*CA
/)A

d(x
S[pgdV8(
rG1 Q(r"ȧ,R=\  u`y'Iܜ96Ft#(	CuNb\t%~AwtW&LrUYt6VsEw	Ȕ/tz+U[x+#$nwu4ܷBO>?a7tH(Z١eD6ȆY6?"އXh
}p-d
{
A&s8=\-#_֑K**VpihDx(?.'~7
qYA4x!7FCX
y=/A"pQs`ӈ4D?`|[ 7@ !>b#aau񒨏O ,݅}NL,=4zoie^_e`6L{N/PyFFCBzތ
:}[\Xb~ynf<Mt$4۔E҄̋zDZ'<>1Eđkpwr">Y 3o5o:}0w|KƧN/e
PK糕
2    PK    A             8   org/bouncycastle/pqc/crypto/xmss/XMSSMTSignature$1.class1
0 Ej5U{xqp(upMc-1I*jCO/ 	9(v):*	&\W٩(X9IXQb@0*d3tot[ͽ>c?,nk$ϾPK| 2      PK    A             >   org/bouncycastle/pqc/crypto/xmss/XMSSMTSignature$Builder.classUkOP~\EnEэK #QS,-h"hGӵcK^>ym 9`Rvi6[殥yU`3L,6&s|cINլ"VӠi#=퓦T4kWygCvvjǺzC989>lhu[[ou
2,v*C-[Ϭ0LҸKp9>*ÎQF>/bMzmDc~r<0*1:zyR7<q	DThYt^%Tϥ"fdXJmtFe(
_!;]70#mMkZy3LCEH>	\qܖ0ġ$09nqSx$"'"nⱈ[Xd?=kv~Фu2溆KiRb|Oz|Oj@!~| q3dcSȉev7*7K	"F	'/I4\ýah9(DS=PFR$jPӛָLBCFNCg<`9,cEy),'hr^
bKt!D~NvhT7jPKҔI0    PK    A             6   org/bouncycastle/pqc/crypto/xmss/XMSSMTSignature.classWW-HղP (bHm\*9n#kal4aY-beGN#}MnȱӗO=I=>3BݹsgΝsK}z燸9}L@09PD<B$"amɧ$uZa DY#onh`AY4qV;}iTs9rohԶM-3f2ǭZM7LLҏ
"iqONO;+C_pnay=nivN'a<X9}gz2[>ZPg>Z9{aZ5=W{ǌY
QΞ˞2es#٬gTw%)^n̞ME+GrxARW]@ԧդa'3'/hk}T|2cz^5YrkZB#;#*chlâyj4Z'.蚻15̤a!n{ReR[z]'yڢ:'浤VXs¬$A<Plm'fdVNؿS}ܱN}.խUmUO?KI)SJҴ$ϸ\n6Wl*v\->Y}iPٶĨc9^׏Ysbc|Q5ސyO|OVd
wfkPCDt_E< "%␈EE8,b@ĠxXC"uxsmSxӓVfYٺAz`;i?+7Нf6'd}@y=Ĭ C;xVB|J2}Գ7-`(;ٶ$(?VnObûf.fܹfG
zЮCPr
CWp
2
AR(
 +HI0YA'ZUC+3k(	
ރY;1.}g^A8
F* x0|c2N21S2&uYqO0|kߖg)	|o1'Yda.dLsgx_dR_n9|yzQVnQz~wdƲQSu=5΍U>BC 9m^KZJGtjwTKľ,ěx/hU3VhMgl?ZS:0jST%3I̘II`$4&S឵H5D{*^ј=9,2^zʒKdY:T[x)f]*~Kgu	W[Ic+x3D#MWր<D&q5N:7hf^.Eh&D4H.,ơ+
"E:LEYX<d#8%x?H#PDH[CĹC&BrL٥<Ajp}b~>V_kf9Ӈ7%x`k~Tr=3`$Xn2y_Rc**a5-G	p-G%z 5OUn\"dZ*+M5o6/#*]7u b)}""C*G懋}VQl	e8orn/
Pb*~yl揄w	*iI:bJPKvpM;  R  PK    A             3   org/bouncycastle/pqc/crypto/xmss/XMSSMTSigner.classX	x[W$YA$Dvؘ$,?%#iU	Gi)-=Pl0(i}}4yYsg;;;3;;;/xi E;:hvڡ
Xk:5ܬ6
Ul(ZK" ,X\]HD-GѠ]xةFEudfSW*B6{naak0&5JmI(JP/}ҖT:%$IW`&Iֈe҃J,4j<LҴo֦ۛuPoFINtg,!Gdp@V)i%8`8ۭI_R')iMVgjWQ<[p|´΄pkR#Tw<lLƇ
VFCJ(Y-z%ݗT
jDI{yγ'pORE7SAR۪ib=.ۂьo}=LJdsA7EWooa<`bcC:'Y*UϤ}_<ƩBƹ PTP"nne7b'
vӚyΥWw`,FH0ږdh;gYBZ"HD=q5FK((\"'+d|w?JriLZ)+RR\_k/Fsϱ/śww2K_}5'#~Th8L?qmJ'qҥ)Ieg(SD͈iF.+MFOEy:m0hƲv.#jS|Ӳ[痱ҔZW_k6Z¤rA/J>8
P5,LάvkLi̼ZOIo>SE2N۔:*I]g,%A.Ut\qCDeHL
9:eMdhJx4R5PZx^ԟ7RI_^x+hU|1jŖp4Tڽ6E\_5)_:W|
@
k2tIT9*t]T鈅 .Q.xy׊Fqp׸˙֞ bɌE)w
?'au̾6P_NN-Sv;p$Ih^	$tJ,	[$tIp	I*WB%l]vHRN	z	W	m1]:HZ樍bZvu$ԧx;k|}h\~OPwW&4+gd^M*_x4+)ߖ"哱^wVweVԫ_h&3*0N4kB-?7qJw׌s<T4ͧƬ3sc)q\8sWg[.@4ǋkTM=Κy+bu1"M(SQ4zuY̲}1*HX}nv;xd֘zڙqN°FWFd2Bq
aV8eԠDF-C=r?jk΅,c%JeDᒱe2֢Bp˨B@_ xPQǰ!g2c2q2!>)#Oɨa2ExTFHbTFYMcqy'd`BnS2wQ0<,suzĉnd	_pb/~O:q+s_8q'>wgow~kxg892ˉ;y2|d3_rYn?	`wOeECaq'ލo2|qbw>|%x+~cv}krg>G˱Ak_=wQn1@-eRnk-%Rk-mZ)!FUPOP[T;&쏀!c8MjVjZ4嵶QLZGq(Ǆ%+Ig
!R,TXyȚuӥQ+&B,(=^;XFꎡt7p[Ƅt1L`?axLѨ"xhG3>:
Z✬GݭKl7aˊFi|PDV,Ϯź(ؽvʘl1:겢,螘;XlL"{{Y*+VJli\6:b}c'
#geEUrVxbǕ<e

q݇l,󖍉pzL	O^MnL\-ϊfmpdE +*$V<.6Xu=<n[Xw*dwz^z+Ei
e{\\8e|Z6+-84ʬ>SgÁS]#<G(iÖ={-q&͖;AnZ8nc)IK[+Vs8GhzKN`K8(#!nߋX5JXs ɛf:MCpIB1,駩\ܫě%9u)XMݐ
%~zrۦۦ%wK4cwDKcdik
aEI>-do}\(Jy[-ʞqqQek,RQaOY^a	rg*ˌlˬa)7uK=ʸh{(~\.oN؄/цYF6p2pWF͹6c`݃G|u:by܅.zy{ظǇ

$ap-[j]	u5y<3瀥8*%KɃ}]t@K Ij;a_PK2F  +  PK    A             /   org/bouncycastle/pqc/crypto/xmss/XMSSNode.classPN@=C),򐈂sQIcҘ.D]	NJIm-D&H4. ?xN2s{߯o '8dF'zI1h1Π)l9+8c`eW05lS2GC>*G\yg\\+<3ڄSĂН:~`}h7u{ދr{e)[\0ȳpJa
VU䠨XCFE
	Yl>,*bkh\u;8&ZPE	iH$2EԛR؞$i$OQ8|;oXw_J1\^iw>oPKl!b    PK    A             3   org/bouncycastle/pqc/crypto/xmss/XMSSNodeUtil.classVw6+oʃTĮS'ı,ĸd-9
bʣ@ڴ<^H@iZ~pNre2sgg~s]fcJE\^	r}OBr_DIHݚm]<g%dOͤm]ӇS]̴]:2U*uJ$ⅴC:ˌthJplY YYib2s<
i2s-Asf{>=d#g')	ѢinV4ƌYi8f潈#Fј*yGI+J&-8+*\,ىæĺ*-2ȧ#e4kXe\uMp`gyڂRx\I3l.隃ƃFe3]ef+ay9m
8P2쬄8mH!bp"eNm߸`v={.qiM]fw'Cv.5w.ʾή}A}ã\j&{Lymm=M5Zm6/|1PmfJSWLW֢O<w|]蛱Ţ1CP6Y1 x9UsUMz*FVX!R:uwD::~,%Q'6)E.	Hވ	gzV/|i.;HWwyFZZW{،ga${bz޾_Eϱgqu?7X&SgQ~tÍ711°V0 :֠Em=h:Ru,Cq/pu=:1#؊_SR=8a'l
P`08aiC!!b(3<ã1<aE8)4C!@9000<ã1Pbx~aR5$0apX^F%>ϛ,T2wI2Ge塞>#iYϮ+t
_Wʳ8z:x|mrH*-jP)RBrP't.`x|':%<oEަe3\B|M tWiScSH.(jPVLf>fA>qz_oS*T$INw'ڎB_<<9y2;}e]HubHZP	=qI`To2
ϽW?_
KS?gT3IV_dO\nߏʝ_"~Ý1T)DYd"#61iR觐2F!f9xb,gxg)qR;x|DTHtpKQZe֙ujZazLUjZgVSyj#SQe*LE0cTT:SQg**LT-~%mmтZ
7ZڦJ䋣G56	tTDտ݅P_|"C]F к2a|GB/nk_n\js
{݇1B%8JYYPK3h    PK    A             .   org/bouncycastle/pqc/crypto/xmss/XMSSOid.class;o>NFf
MOFFĲDļt}FtҼ⒜Tdʂ|b`n̼tvfvF
M9k6Fv6`ab`d ee 	 PK
5ڢ      PK    A             5   org/bouncycastle/pqc/crypto/xmss/XMSSParameters.classVwUmCi-m)	BD4j(OMnmt	ɦP|+/ )7x<M!4MO~ܙߝ;37o vjX@5a"ˡۜpZeRIJ#:ġ>"GqE!qh WbyjP76daQ&$hWМiTc2&G$~6Yi,RSU-&&J&͡IJǠ#S	M1q3t)Aʑ阸c⼣|FjitYѯjP)**h&.a)	:ކ&jb}b<÷4ƦIa:j]d? 07tlDLR^:]f(J"1!֘kKBx*Qsa1)_Lh BgeU9G=(%.\RK$F'P3vd${g:!%
bfKWrգ4)zQݠ1ɬz&)zߖPZұDFUiVJcb2)mmm:iw^{"̨DĸNgE%#Mӥ9QN՟Hhţyl(<㱉<<ƣv<v5
Z;d5Eq5,i|Õw$w/]3.g6*rf]YB%OfOklj}/+k=8=zl*IͶjHw	|lU(.V֕fkt8-/:y\rMv	Чx+IEE063d`7FĨ c0ƸV<#0XÀ]
1dp$G<(`zk0Pk04(  DN:`/>dNc7'" @cpIT91ZUo)@"n	P_SN}ZCs*<KIѼ%]7#TL
L٦xo䂍^.sg9|}'Mk
9|_GzBMU9w>ueqKf_eqǧY\]/kY\z_p5s,γyCkdqUxڣ5 YE{(@\{*쮛9-7d{NA7iY$liff5Yt\n(}1Qf-siѻ\v)>3P6ز@y~Uxɕrc={uop㛻
c rP
Knɒۺ}> w6u]|gäמW7"5o!yvXH,+Uo9m[yUkZxzc㣟pѸPK'  Z  PK    A             A   org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters$1.class1
0FhU{ 8]\S[ڤ&ث9x %<Ƅ!D'x-TOyE1l)xJRXWooKӷNGc-?'Yԧ˰\`!!󽒵*rW}a"dc;;ꉣ/PKF      PK    A             G   org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters$Builder.classVYSP>,(BiّE)RtttxJK[ٿÃ?4aH
{%'7I & ˠ%y͠-&p1}K3NP$Yӆc_'tƜθәp:NgL;rE]fК;T
yB(/XM#Q(=a;/K:;[R\(U$QP 	Z)%@ӄ7[lFU҆\Ɉx 벪1tpt PWRVvl$0WP,j4YRej$nM}Tw9 4
jnGچ6v!ZfT<E>
n1ټpBc1f"A,#
ƹ\,:F&SjJ"zU-Ҕ{ߔ=>Gڹ3"nFMjƭA+w#ncZq	ZMYsa D~zKy|qbQVa(~ ƕZ5li9ߴž
g݀_WxEOao
*ϪN&Hl$h6 ܃)gS0.X#0n
zMA~mj<Iۚu5)[3\Wfkt~$I[xq~˳SxahB~hISӉ4WشhIptS}͕^h7,.ʉIwҫ'vp<>&H-PK6s
  
  PK    A             ?   org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters.classX	|L6,I`D԰CW]6\M%
xd;	n@bRCkZhe%h*Zmi[[{{3_o{73yX(̒p.QF	"4	b"U	[xllP\lbuxcC7-YMIؒٶʥD\"`oxHD3.r....]s..[Qr#j	ZDk20)؎X8"j"4آt&uEUMUM|egH<u]PI&"d4aIv5Qo44]MĨt%DB~);RLzM]/Z#2ۥ
Z<Z$mbDÉkk4Ί5(KjL dgr[5S
gEZ4H$;I-klgr%6[uM[Ӧd׫(y+o$[k*UUKǢ${L%٩t${Qrp|,a&ҷV)66
^ѺXH%ڥq0
6CqK]=[C9d11#h$_M!e	;6khmOm585bꔙfMOjnғՎ8NPJek^:t--v=
Իj9jqHmD6[
JP@ii[[VƦhTpj΄ti5lji̩;JNCmDrEoZwv7IQh1%aWY˰S}3*uf,.rVd,m5+fQ#[}wsx|퉲xSC=;	x^.E׈F~*i32BlR
e[d$L*]ףƕ4)4yi;4
iAf2΃L2vpv7ڥtGLE6Æ,AM"|e~(f@%t-VQ33y"[2q /be"X!bU"".qfEkEhNzWRD)L5~G	8q4]u'ҙRxjw_d5Mxj'z߬To(q>j$j[뜓gV3tB
?*tmRY0Z,->c%=xja=u,v%f`[2n10ccrrLY cR)/|<@~c0+5grVG}N[|^m}؝6z[ƤRF{g,TV
mD'y,.LY>;we,Nq
õ~p:xe\a	0^4Lх2
(21I9,c|2` PA2lb1|Xb&\|3;e؂O81a>%wɨdb0a+`H2t32=qq>+#{e(1_,Ne×U<0&C~6mgc_g82`÷~sg~؁G=x{p#g-G<t3|Ó܄!gx;O1|{O3|?dÏ~ï<2b8v"-ZH|}ӗN$4zh;cF}=AIu^zYliR[@37=p*uƫklbqiR@*!a<0nKU3 J?x/<Alo+/Yˋi<^
`qe]+Re(Ӄ>t׀P~i+/o}_q{ = L>y8"YZTbݺ޼C>O!/ÐC^7}`}58'd_`V[WXIJbwAurc
]^xK4#*38-_{%!\w+\7%'$EYdsEH{B_:9@$s[݃|Z*8n v_)0n`~2qVڄfw>_>TOuAc9A8J^L9NN
D8i-Bd}ʙ(+KZ
4{D_EC0u<](@EQ'@
E]jo;HMcȣk9aZڱ$qe,)^3/kуR+%WJ-Yf4p5t
e={pn;Jj ?+sQۃ.@ƌ^K/8R&YιRnKkܰ7sbj6i*(bxU8(X祭ъ]ޓw܃qU p)a<
SJi8d)I'O)a\c"N"㐫(X+؍y7ﲳKwļC(J9{ٙ'F;;UpO8[(3(e((l'^_Pd%lJ0	4v/.*jMݚB\K}*j>jӮxZRMKi1K"8')ҽ |\
԰iL㠿_: L	ykA*[q;A##xԡh>ӛm &$TU7%}V[WC'ӊz$'!c%y$a>*8ø h㒂cP8jic_@_p˝Л~[]I8;*&줱7 PKgnc7t  i  PK    A             @   org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters$1.class1
0 E*={UD.i%MjPbߟw%;`cl
i	&lzsyGgFzirEA(C^e\TZKS9ƈc aMAB
$PK喆E      PK    A             F   org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters$Builder.classTn@=:ubܒk!iq
A*U 5"丫ʵ y@*IT"Bsz@U)aZۯkdl9=bH	OlaR~NvZ]O0䎬Zޡ<vmˍ;۰N+ah~hMױN
c dx8)h2<\Ci/#ǥDj:ۊSlzvs>c0ˈqA*cFƬle3I\-4&R՝qftu'`aCRQ9\S1BAJXX!BqW<)X@IUhr_HgPw=ۮ<2鵑U +%uu]=GNrZO^Oq_g'X,Ocí>eOQ7Tsse$`.	&	F"0?Fg0\ir'-0i+4n	qX^ÙrDcR=PKI,    PK    A             >   org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters.classVsUm
Bi),X4
Դ@HK+)TmX
4(~㓾fVe
gqn&|s{{揿}aoo0Ðp AN%ta>_ !*$&Sܨa޸ !ak]opp!5A!t,Idh֜]<m	jvvyܝf\N.9=7iv(7fbډm{qhz #m{u˜)]w<#ۜ5,o?XkM-k+av55-&/kS.skjVMs֦iLnV63V.rߨjjU
2l*-5l;]ɳzVwjή,ntxך;nٖ繼FGqba#aEvhk\
,i:{)a*8|9bVӯӴTDԳ:I	SzUs[mUxid6cO/Cna>aH33d3``xWBTcNu!tSVԉZqu/pz)V$;nϚWG\WhCD}hW0│7Q+!DSЅئq	)HaRӂ/>܇
㌂t
agdV88
rqEA.i s\c	 &b'pA\#|܆$#ncH
,;'Mu9sU35,h{ѣcZ̉+C1& S<)zQWFH$#FH&\_},e~h
G/upP<1g[SH*
D$]	L>@%"n!|UWV1E2}Ù:nAr\P~;'/X@V+#rR~ޤ(c $d2mx&0FaoD4R{S	_=
Caa~AnhPJ=Ƣ'u!_=Z#X9zh:hQ63ޓù(i'ջ@}E2"y3M-䢫h
lIaVMD{+J"YqB4=DlSEs?/e{|^[íG͗"JM$
 7oI}3`q1/PKQ.    PK    A             C   org/bouncycastle/pqc/crypto/xmss/XMSSReducedSignature$Builder.classUkOP~:.e*;"	
:SNaO+ߤD?e|X1d9y{. E+Ig^*O2%,خ/)HVk'$ؓ2-KH9f*v%߮X0fu}To9
W,{`p|g֌ՍMa
f^hkw2,owo﷤4^?Tj`jMd5i-Ima5vͯVW֜@هv<`SqZgUJc0VlWdi5^')g}OU1T9tg,u	$P]/PXB
=BA':bj`GoJ7
6 >εF%4pA.j%
=P4hHl*I,fXfq'qMaP½ebF#^1S4N߫^#%96(9L"D$zpi7ȞqRY]CEENCG2apq̑|FGp=4ψbp51xC$5CЏaҧFVqwG݅;CLIڨHPKu;q  4  PK    A             ;   org/bouncycastle/pqc/crypto/xmss/XMSSReducedSignature.classVsUm>n6Ba-bJK_6mi!Tdl|s^|i*82H=7ii:/{Ϲ{>/	`*M;/	`hLhh,/-+veYG/Muh\\]RdҰ흭Jh[Odt'#`c,fs'&l٘v,=Ti~¾>tND2sHI~2ٴa;EA"	=W4N'rE\AUtV?sz>rFZY⤑wM'5mBGܐ;U!aY`p$7XE'Y>ӟ~[f4V:<nən;9#\JL1ӓ^fRj֪H:5H1S$Iҥ4bHUxHz;cl.eX'2Q.ezBO֜T]b/o݁<5-gn.Xf>K)/{0'KF8f`SE=pp91Xڍ+ʰa=CaC;ax9 C3Cy]+|_{?鮺6+;{H_
ƛ'_m>]O8V6˺`<"f͙ k_#)[YZW,V5xl#
;VVW6Zp`Wu8?K
^
4xla7?
!*h㤤I<Mx`'l@BAlqO}8ai{~!#ʡYxMFtgebø1u10!/ R~tÄ (J<79ݶ
z%=yn@/;~ ^WiљB{}8mǜ98xBagǾ:a-Θ[YŅ2u)!w^{_76d"!dyoWޑ:[GtDewį54h2:>H2]Wͣgd^M5C1wGUQ=WQ%3sx>v9`^E|~/*j(!M$WƆۈQ;h
|HyRPnTHc%C-\g,PsLA܇.gv- Vg= wJA[!K_	dZ\Z׊gx>8_t#*iRy5JmxU~,"^(DH,
Z^n#~B,.F}VM~ +M,Diw\}IbdiSxy7Cr\X:ނ~jc|\v<1OPK@x1  &
  PK    A             6   org/bouncycastle/pqc/crypto/xmss/XMSSSignature$1.class1
0 Ej5U{g
8tqM[bRT<-<_ v-sQTRuU7b-YwL=޳sQe-H(FƨB	GckFGgq3X#yPK      PK    A             <   org/bouncycastle/pqc/crypto/xmss/XMSSSignature$Builder.classTmSW~.yd]PblMcm  D5llM~hg$2u~LTf@fHȇs9yyݓϿ`F0C8Ol} 2ܬiȺapםJRAZ#hWM.4MJ(ê|q]19w={+^qE~%nɢ.(ef^3JTv0\AY,ݮiOUǝ7<NeuUM5t׳gյmʩY/KÌ}1Vyijɬٺt
rMŗí#L2RzNP3-#&嵢nHLQj}&mצUHj<Hb	1	%| C	IpIH!4\dby.yiײպIu
4<n8xNNUݯí C-}QxxgOOlvSwQ0IUDLⶂRpN#
FR0`wEQp
)Pp_sQhx ˸G2ZF2Ty(LAM<1'2Y¢0_HKU+΂.d㲬7ztO"oH)i	d7)J!Zcj-^=lE5@>\R/	r@VFb0"ɿ17ϳX}uR9?z	JD&|yb+#łd#LTMƢĢЦ-u^7%"mZ[C}Il\x=AH;Lj<au0
LHmaߎ 7X-cbjt&br-PK>C˝  1	  PK    A             4   org/bouncycastle/pqc/crypto/xmss/XMSSSignature.classVSU-	ܰ,XhĊm<M mV|l.av7>3/~hglJ~g+/:Mbc;{ιwϽgw} ] |{%)ѲHj%^PYIz]FuSw%HĬ>%PͰLmuWBfv.w] +0w7TwHM	zv$ߡ8bj[NQ^T͌EH^9ҳq^/F#_J/y"zTݼMNz1XnKVRN]7jLb\"Ijf62Uoqӭpjnftmؚ7]Mu\rZLwsr<R]nkjV{Zf9HbUVNtUEk<S1u%ᶄFR\uK5ϯmr2jUs$tے^ى%>cA.Q٥2;^e
&ly	Vxv^5'$ՠk;d:/2dxeW^e0t3Dz^cegKa][7#kEHνdLQw>1Gaw	!ЈTGR6R O`b>=[M[OM?*o
bG`~UЄ:π)8fUЊg6+;@4bX2^ǚ7pN0ޗ12F$`Y*c\&E4Y	ؐ1|(c+
8> yl}GG2MnOpR. jnI3cAS-"}"2Hmhi>܁m>)`{+sֻ=Fbt~
{n%w>&ꨳx!I(Mzd<M`!I
KecmE.(`m#/r$ֶwx]^`C,@j<bdς2 0}q9(-BAyF^dwrP5#X
mx{,lyB()5^f?!=8Z(In=|xBC{VikdOж8mѾPKX  
  PK    A             1   org/bouncycastle/pqc/crypto/xmss/XMSSSigner.classX	xזz	mm6`ZZK%] 4m}7=hMQƲRLCB}gzPvז],(̼{oެx' $/6zɋ{ˋ^P\lv;m+\Q@Yp{3+s} @bD$#dn|֬MV3N&wm ;%c*z:Xj̣i)iCK
t $̉i 'ŬAUqjZ	5mi+AxHĲQomtL}##@&EUzqmꀵC0:튡TK5LNjшƜw)阞"Wde+1u
<"jPy}GUV[jZ vgbtXQkoMv)<;TYqŞdt$$׽d^R)x8z$7|:f62ٯ)I5$x6Eh')q)Xh&&o(+ޯFi?sC	CWtڙhҒ$^7M>۬j7dYۃ'q|UFޣҺ`hJA]PMGi%P@453jH(YsB
RT9
:;eeb
L3D)?mFmSVRQCӲ(k/uXȗ|Zf>a׽5{VX6/1B%ڵ"uEQwlTԎW;~eQ.TS4`t.JS5M5IB4nniHˌŔJ'123.*c~
O]0P)J8-@ɮhMsar$NKtHTc~Kob"F-ޔi
ٞ~,ܯY	~R]]2]
 7;O3ǟm[)׉X'N"֋x"6"IV7&Yv;Dh&bv7E

`='ə;\${r!rU%^F,򭞿*[&>2w-f-Py"8W(`aLNŝa#պbTm}NO^E#+rAZ*F<IzLH&q7ml$2SyĈb7+Vѧ0WN׮(O"_-"I&eحo.SeTz@zB[dt2vU2:jKq5C5C-|2Aa-*d,,a2,gXBgaa՘-*̑QJˋdF
$c%,c!"Z&]x;eƻdDn»e0{e<G}811|vI#'!1$Xqa	|~	89	&cxA,#!3|!	}`]w30`8y	z<1{%a/I8'%()G(c^O3r|YP>?=/rs	7'Tg`Utg E0H@"J8 j)얒n)n)v݊ħ܂ ԛC=ڲa|>?*x;Ȣ3եC8S]{}Cx~<ĝXSgyOS9X|"rgc#d2!AvMi8RF|(Xpa|uԖX⩮ևmwmLOuUrB<G1bg<Cǝ,92;0"9|'{_/9g43"xeLpq]O@Xa<ǡ.㟤o'~o{9-}t?=K'hf+Fɝ.U*a*Z[!\;"/zw?
7(^ףbN[^;
VrWۊ^N;!4*ϥLtHjU>:W%W}U$,~Jv^׹{Nv6-6gbZښS^&S+Frkitϸ]:ucgP"ט]ݎB˶9E]<_.shS%EK6^"3t1@*AnPKy	  ,  PK    A             C   org/bouncycastle/pqc/crypto/xmss/XMSSStoreableObjectInterface.classENAjAV撓i.BJ.C x[YYg֙6_!ȣcrCBo<Y	{dSۙr/V	>LOζb56zs>hVoEQe-Wlp~ުB6G'G0ZHĲ0):G<s+k]pxP:9,99pPKSHþ      PK    A             >   org/bouncycastle/pqc/crypto/xmss/XMSSUtil$CheckingStream.classTkwE~&ie{KZ I(JH4M-Ro͘.ͦ~WEir|Gy|gtj9yg}os WǸ	oqJ;:Ցt|̐y/^`Aǫ<nEcHm,2omn<Y+	V77@q<as/ 8 OPwL9+aTqV"jŞo]"[1ÄbK^%mzDNݭnYXn["nʵW4b/N6ϛC'nF+vHzZNtҴevaa|]6PQ%!g^PgBj`ve*jV.oƾ\ˍvqhԛMk0:2M!Je)Uڇ6i֖Z[joS^[;)-jIf$-:ugZi.j֕lV>0ᴆ3jik(h5|D-:#:%?'o!4˗n&yzԵ?>/,7gsi25'11osqěҜ-,8r .KinHS4i"`|Y|us(I0|tf\x"JJ4JzVyR؋f)/ʛPFAcJV2]&iL>
ǸU~wߏyT")74Kx'n=Dazw	:{Xý{!IB9GX|Bhzw~#H&<.a,t`d2_<bv}`d'6;SP_ASA
<ֆ1p1aPKOl    PK    A             /   org/bouncycastle/pqc/crypto/xmss/XMSSUtil.classVwZiW+Y2r兤,qI6&EZ;Cz-e+^)M!鋦B$&o='=?]5Vݝ3̝ͬ; /"ZEDEl)c"zE-S"8,E)S"2"EָGZqpF[g{Hz=Y2=qp'c/qf!D3Dgp{ؓ7[IIJ˕\ʾM<RvG>gKkӝj)'nY+d2d=

\NMY~\IgʡnbPtjL+oB$
PG)5=c>d^58xj^ͥL$!锚7*Yxv6Y2 Х֪3FNI;'3J5z3)=6iTK~3؈KLƵ:SGsj)%?D)Ӛ\iZlфjL3gy@GtCPeMM)F8ΛIGbP5Cނ1jF:A_1T5q喔#t3i\-#FNU	spח{fj䰾8&+]cj3jߝQT#͐n<-x&CRi*ͨeшAY*TKv6Šx*:SZKT
ِQ18aȆ.~gFFOuP'Rk3~^HMPeR$ynYP)*,e-3ybOy#˿_MXϥ'ډeDn6kžк {,Q2`߶ORGv%VVȬ$)QdcmUKIAzvd42s*Ds'KTIVqcUUV*Ue5撿(m7Lh4d)-5)'IzvU:m:e0$Y*U|<'hةϬPN=&`}0 `Pa|B'>-%0.@]DHy> kmu#`dW7}VK(e
;\wJaYU>fPORUUrx,b،lދ.֋L)laPE/4|ɋge/ev_"ɖE;.Y|S7$m\p?pb%
[ǖHŏ%%N^pc(qM"Jw%\O$|ߑp=^c˛4nMC45gV%Jvr
q$$=Es4p j8v4'Ǻ=qiޣU@}pxMcxv#d'_GpS_zu4O^M7@^<[@G	1f\jpv,Zwۖ~S<p9~j-g)L[3?oN#E\UDDE3k&%*G/@ol>L:=;+Rw5u:Φ5gA:<<s|ߜ*
7ʨ8|ToEj̮'<|G:bm܉U* 3>jD9+z^0"ƻ
8CkEC:BG3j(տ"Q <%8z
OZF)b]tVBݫp:m4qqnlVf?M	AϢM$(u{*
Vd'?oA)0rnw1bzۨE<Qx|[N[$2)Eg/sl94]~Rʱ9f5ǚ9X[pjkœSR8C	|1"dӊLjΛ(zjhS<xne;D
JKcK'enq_6#X"5ΒF௃UxoZV>oRm@,-`
\~y>{iwB߅FoNݰ&NvVRhVR^L&J8< -K(-b~`	3cE5]p+7M?ӃObў%c4>cE,mZgyZiRX_܍:z]ôӮA
0pcvQ8E;3Dkhhl>ɟ
:}iquEFUkxo/C3i4_ۯc*-6܇H	a8ټg>s PKR	  &  PK    A             7   org/bouncycastle/pqc/crypto/xmss/XMSSVerifierUtil.classV[SW2D,xWP#"rqagf4\Ly5yYL(I*y/U&(%[wt}7 l~lc[%j"iL_f֚V	PKwPֺ.Nkhp̞wĘㄏvG$d8qG˲)SBs%,#lN;*f%K9f3ޭ:'$,y:9άGO47gvjc$XNzbXTO5	gY./SmM\Q	qm6/+U2&$i:I\IZbt?RÆj&l'cMĴqWLZʜSw㬛SLFf1*zk17$FKwHQbJ%4,Z)vJרRZ\<*2fQF~6{MBC]YOcl)}-쥘Ytx2d'ހf#fZeN^}wMY[5/l9Hpj"ASNеZP;T
5iͿ*Y1TϪ]aY5ϩ"݃YEz)݋ٟ2E`#AGlx\	'B5O		<-h(:hb}6ںh˿*q&伛,^ ~'BN!ܻ[
a$:(;=mqLs;̝

,esߡMVG{˻WΚp~/d/Yb,@^_fr"wץTI
T1<!a-j(Q!LrDYWP
1a;(QcPA9U
C
v0s
VyqL^2qBFKh0Ca!0*g8ɐd8paBFtfH2f CEgPp&e&*qCF/0q rO߾+@f3T-u؉nu_64G[_ѧIZADcI4vA8k.k4VݨM;XU<nɳieOcp|)|3`>ʈ~
`cuwfОq~7#ޚA[O[~/
=eڀ?Pz
jyUi0Tj&(fV))26IK|q^^]Nť8π,Yb,5P櫥n
|S-0dA6pwlVr_Ep{n_^LkY4;9,zAnO1':'6@*g)	8$!i@@3tn[8/u'mbz<n\)PK oRUi    PK
      A             "   org/bouncycastle/pqc/crypto/xwing/PK    A             9   org/bouncycastle/pqc/crypto/xwing/XWingKEMExtractor.classTiSA}CaQQ@s˩B. p!VIIp(==t t`wgJ3bY&' "	dc2_xTZ_`u޿m>IXqdphF<zb|wk&*5#^Pŏ,Sլݦ&jE
}ks.eE0=T-iZ
fC5P*jCꡪre%5v 61Ì(a#kiMMZ1hf:aezEc%TS'PP߄VE[L2^&>klvJ7X@9*C	5unYY/,
;eEcʴi
{%4Ih*ᑄ6	%<_;30q#|麪P[ߙ@bU_y/1nB"]D]Girxfeԁɨ@zdȰ˨Eɨ$2#2#v_ɨBo'߁gtCĀ7&xQSĘq8Zb0|>COZnm'.zÆVTA*MST"6ګBB+'t
hs`9ƴ[`s~x9$V=򒇬眼3tlN0X8E`Ԟvg~RaZJ^hJ_k PK    PK    A             9   org/bouncycastle/pqc/crypto/xwing/XWingKEMGenerator.classVi[W~,LTڱR1 J`XJXj@ar&	O6>>|sg55<{{s]!1p－7xý=_xc~j繓
{[d8Mͣn`L3n
c5#:4{;I
hn͋حM]jh%CX"c2e9b$--,J	8Ul&Kf2r
iFS5=NgX48CӅp>+NfI:E|N,R2trVL}#;c׃%ukmz%"uOj.[a
f&/崲-4\D2Ե)̣L%pBu7[8Z1zckGv4IV\bhڶ9gak
sTS6jh0ҏkms<ԁǨ;Z5vY6\YlhdgF@wWJh)YM<3aj{O247\:+o'^p
i/xEī"^7DE􊈈/"*⢈NҾtEL*rLvN_J'Q;nEP7aWz\K[eSNa+ȧvjtj\{Afw;)=l{Eb'&/?2NऌKMF;<2+9'~e-cAg 8!\c2ǜ0/pkAF2^p2aIsXq
+A$.qC`>08hX>
	|v*1|(a7%Lpkؔh[v$L"a[9| aC8җ}_S	
H[hB3,/>l	^7yQ+E	WLw
Z"2U|U1>>O"T1bx^\R
K/ˊ/ %<Λ+%to/v%{?RWIQ#QOhFF *a,<}+SQO1=D7zw:.<}dJ.$S:C-|;v?PK;V  
  PK    A             D   org/bouncycastle/pqc/crypto/xwing/XWingKeyGenerationParameters.class;o>nF6̼;FtҼ⒜Tʂ|}JԼԢĒĢԒԢbF;0]y@L̌>YeũɥE% FjPb^J~f#^a<\,,)@.0!syL@SK[a;F" PKzB     PK    A             =   org/bouncycastle/pqc/crypto/xwing/XWingKeyPairGenerator.classVmWU~d@@n5oeK!,H(
D$tilG~'qnPh1@sޙg晹/gW q$m

.ܙ#qi)tњLyÚO'Z>GZeKzeM3L4MOWl	Iy?k:EKrĉ'!_>Z|ڑd)~TSeӰ*Wb.LNܝyؚXzIR03~OURZJʬ2WreT7O9O^Yt쐌\m7_L&ы8!FF/Y%eD@;s¡l߉FܦEN=Q^7:v<q4ނ8BM:c=} ̴ P.KgDYI,/8:}:<%ln1mvnڎdPHڑ%HE#}\2gZ>r1M0>2U1|0pM>a3)Yə0j8zc₏ō7#5H;gwR:$]Kl5kh9?SngݦmmJ_Jx3.zpIxz%GB?Y	~I1/a \H'E.sX!"BZD+""b[FxŪ;+;.b	Ƹ5obG:5bY(u$[ËO-7T44lh=.|f=4*Rq˛`M 1PC:	¯x{]D]Q[QW`Gl`:brG1ݿUdOyɬ
5&U/^cBqb
3_q;)5Ta*,5w>xT#c*){Juɰs_
|Zvxv:}ضn&¿1m7f,PK¶-  
  PK    A             :   org/bouncycastle/pqc/crypto/xwing/XWingKeyParameters.class;o>.F(0F6̼;FtҼ⒜Tʂ|Ģb}Ԓd XjIj#	dފ̼tp TE6 (@ٴ3pl`  PK
w^      PK    A             A   org/bouncycastle/pqc/crypto/xwing/XWingPrivateKeyParameters.classmOPB-C|@neX6 M$nF]Q5$050xndפssI{@|W»
)45}ŲHyfYmG3,ǰLc9dkYfXf% py-)7FH1Z|J[MvpHBzllkVLխZ.Zl7Ώo#*u0[.2ѫFՙUkчQT-KWu9|;hƔD.bB
7NSUuo1[Hx5%(LT,Noe:Ou{cΔ{&ZrNu{~]!gh=zޕq2n㾌I<1i<G>x$Cp1E9.IE	w !U=OI0) H׻ǼyGSYGS=GSAW;$Sdͣϡf(_cIԱU&}uĕIO]z~	&8`*DN$:2E:ӑc-)=K9ᬨM2P7'8{$<u#n"ky
{
(xc'nwCuPK_  d  PK    A             @   org/bouncycastle/pqc/crypto/xwing/XWingPublicKeyParameters.classTOa~^N+̾q^((sSsˡa㢛pq,￲rs@fFyn@Qyg/̽y!uya/2iUSSmݤjۏTDXUS"CSЭFlh9aZ)PJJywO.̧U
Ss4nuE]UjVJ~6JXɫ[uDWDlV71q#L^>l%%+9`c=m%Rj'`X[nzWar	6ʕ4Gs:ڇ//]/+_;.c3}-	w0&&Hq	"n$0?O''cn7QE1"C&F
xDx481y`h&1os9"GM#|/yog>C<)"_1F&'H61o[&^\,HX{Q<rb0siKxҞ>[E'c$1:~PKYk'  O  PK
      A                org/bouncycastle/pqc/jcajce/PK
      A             '   org/bouncycastle/pqc/jcajce/interfaces/PK    A             4   org/bouncycastle/pqc/jcajce/interfaces/BIKEKey.class};
@EhiN
bg&Bf\8\8<_ ֘*r	grt ҃LIUnN
­+BgRVMVwL>b;dYLQEݕX}4Cf<}豟m1BU(LPKE8Q      PK    A             4   org/bouncycastle/pqc/jcajce/interfaces/CMCEKey.class};
@Ehi2X(3dIٚpQr|Xc0%MK#/K2%U9eV8(K]ncX&b*MzLwh5F
1~¶
IWѣ0_PKΑq      PK    A             9   org/bouncycastle/pqc/jcajce/interfaces/DilithiumKey.class}=
1'E;Vn[;O}<ׄ3
{5`#6v1| 6)GM%QNșr';ocO;֍/(o{6!Bɱq,d;@[[x]ZH![!mv&f1&J2iJxPK1      PK    A             @   org/bouncycastle/pqc/jcajce/interfaces/DilithiumPrivateKey.classP;@EdA-i"WX^d]f<kd>y/ Lf)J#7LZYdL^`Q%SoTL=wuRUN
[VtFL]4q5խsm@"
엫S]$0F 

LZ/PKhj      PK    A             ?   org/bouncycastle/pqc/jcajce/interfaces/DilithiumPublicKey.class10bxФ/\NGem|()G|ae`
;:^%l&TH'
Qۗ(pAv^\:Y4/\-Ee1K,PPKEFA      PK    A             6   org/bouncycastle/pqc/jcajce/interfaces/FalconKey.class}=
@gjYX6

x,1!W J\n>fcI/T91\?9h0TAEh9궒N8R
9a'JEtg
R*!=`5!
?֙Y:``PK
3      PK    A             =   org/bouncycastle/pqc/jcajce/interfaces/FalconPrivateKey.classP;
@1믰Z ho`y<ÆeM W JN7ay 0X:
,he5+*ڛЪԛF*+kG-*XVtAoR'mte?/$FX\&)Dt'X@`!|PKտK     PK    A             <   org/bouncycastle/pqc/jcajce/interfaces/FalconPublicKey.class
0E1Q FΧ#e0BJA+ޟSybըRs_&Vz9dO#jIx,Aiya/J},o,:҉8'ǿX4ek

ZX|PKቍ      PK    A             5   org/bouncycastle/pqc/jcajce/interfaces/FrodoKey.class};
@E7.z`ao
&g835A+˅s8`	ak<Xo/t9{\*}T"aJV;>n+ĆX*7Wa'։rQ%يT' g7VRǗI[CF)0NoPKqJ      PK    A             3   org/bouncycastle/pqc/jcajce/interfaces/HQCKey.class}=
@-hei#(x$f7Bf<
|| ƩE֧J%V,Hy8@|+Yhy-a^)'eSH+և\
;N"ޝqAvX->ԏj@00oØPKJi      PK    A             5   org/bouncycastle/pqc/jcajce/interfaces/KyberKey.class};
@ENwkALϐ83fk.EV6vps¢p^4;*rcےEUWȹFwZb}hp-MB]"Fc	aZ>u|]F0|J",-PKS      PK    A             <   org/bouncycastle/pqc/jcajce/interfaces/KyberPrivateKey.classP;
@1믰ZFvϐl{5ka3	`*u*8.Mo2uN[
{H+|2q9٦9i}%t3lJ*j/jXZJ7:8~UD#֘*_9}Da4f*VPXPKt[     PK    A             ;   org/bouncycastle/pqc/jcajce/interfaces/KyberPublicKey.class=
1cFO^!y<P"wʁaޟ;7CęCWY&W]
'i
R#76۝ɳ,bt5,f%O;i(Ac`PK[      PK    A             3   org/bouncycastle/pqc/jcajce/interfaces/LMSKey.class1@E-0x	#,!	W ʸW//
gBht.Ζ;N%vT_t!ẟ,bC씇DQǇ
\]7ruAؠ V~PK;E)<      PK    A             :   org/bouncycastle/pqc/jcajce/interfaces/LMSPrivateKey.classPMN1H0ݰ1 ` x~m!|Ws8!&l
Lf|}	׺͑%?i=} taXpS,4wGVax^d^J*sm_pRI[EguZ8ڏOp%j}_Y4t?181h7쏎yh.pqVnjK `,~PK5p:1   I  PK    A             4   org/bouncycastle/pqc/jcajce/interfaces/MayoKey.class};
@E7.qq	*
b3af\8\8<_ 6湆3|ӠQIےܞ2*][h	mVwDaJ]vʢ9	0
Fruc?a	`$SiPKŨ      PK    A             2   org/bouncycastle/pqc/jcajce/interfaces/NHKey.classA
0FlmxA3L4TT\xJ*}ˏ>_ g8B-<I{L8L8W+n<?_^ūŇ%]9Рሽ
PK*:p   y   PK    A             9   org/bouncycastle/pqc/jcajce/interfaces/NHPrivateKey.class;
PEh`W,AVa	!ї@f\.y 0#5"SgτE
ۜĞLT.aGm	%6.BZjp&j«heO^"C`d)`:PK3ud      PK    A             8   org/bouncycastle/pqc/jcajce/interfaces/NHPublicKey.class;
PEhAs
cH&/Bf\"X.~<1&yCDOUƺ/i"wTab	v*M"5Մe^DUJSM9QI8μQ+kuz>a4/(!| PKE4      PK    A             4   org/bouncycastle/pqc/jcajce/interfaces/NTRUKey.class};0-
 @|Y-QA(8 BXh螞4y/ K&9IweA23
iwy5iLZ5%L>b;dYL^FݕXٝh4la?aDAc$ƫQŅ/PKI<      PK    A             :   org/bouncycastle/pqc/jcajce/interfaces/NTRULPRimeKey.class}=P)Z6tz,4jCƩLe~<D\}W;*cTr!s* jV R
9a'JE=iJqtY
u/&4X ~ PK+      PK    A             6   org/bouncycastle/pqc/jcajce/interfaces/PicnicKey.class}=
1'E;VB
.x$5
{5 66v1| 6)+I	"I©Ε37CK'*
w+PQt{61Bɱq,d}֝
K²Pc]|q
|@e4'PKiʐ      PK    A             5   org/bouncycastle/pqc/jcajce/interfaces/SABERKey.class};
@Eh5bV0y<CęY %Z].y &q"A\˚T92+SmJdX*;Oz=EB(,g?ǎ/J4PHb"Q\xPK[-      PK    A             :   org/bouncycastle/pqc/jcajce/interfaces/SNTRUPrimeKey.class}=P)B1چNoQ"ze^4jCƩLe~<ĈeXY3Utȭ7[WP{_)uW!+lElF¢=e񜺲Dsjf,`		?PKu      PK    A             7   org/bouncycastle/pqc/jcajce/interfaces/SPHINCSKey.class1
PDg5&jj<Z(
)6	&?Bf<q1}1!DuCa)\J9s0ִk
sVusVw*/eԸ57Qk9mQQL#!	?("BPK+ Λ      PK    A             ;   org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusKey.class}=
@hjFQ4lϐ%&qw#jC6v1| &D[}/6m2U\2#	r­-|UVw/E5WVaQEtgTlwMz6?s3sbA
:($PKI=      PK    A             B   org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusPrivateKey.classP;
@WXzJFQt!'<!!$r5ka><_F㈭vaӁkIb*RE&LV`R%+b[+]ĕܪy0wdJH%dbg!.Uw6Щ+[w߷VH]l~#x7PKEۑ   &  PK    A             A   org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusPublicKey.class=
@cF6`x]DG,<!S<_ X)y:ᤰTz'vCr#8}p5,p<8u瑱4
ƼTXb%4&PK#       PK    A             5   org/bouncycastle/pqc/jcajce/interfaces/SnovaKey.class};
@Eh5KPP
^`83	dk.EV6vpsEĞJ*jv%J%,?WP%_RtNk&T	WtqIwf@kzNbl11خևtH_'mXLa|DPK>      PK    A             @   org/bouncycastle/pqc/jcajce/interfaces/StateAwareSignature.class}R@ǵ␖>ʉ2PNl6cfNWЇbКdI'8`?L?1X/T`*oTyў$qjfУG
QSpƠCk]ШU:>'Hh"'Bl<Ai|,Q@OEB*̪~*laёϩ8-Iyv#DDE	9Zj0XUei9yMV),(BsQu>_eOu'J>ȇuY^*RꔧHM:/23THAMSgEv#E-KW#/`Ak,<"oJҮ,5HF6aAZ
5ȻYm
PlޓJ
~PK:  i  PK    A             4   org/bouncycastle/pqc/jcajce/interfaces/XMSSKey.classE0 ]\4jpp-omCj«9 >Lr}}7%r("!a>܈୰C2s7A޷owɍF֓I=?zGC$ÄaQY흶j2dH1&J"0 t~PKݑ      PK    A             6   org/bouncycastle/pqc/jcajce/interfaces/XMSSMTKey.classE
0/Z+>i)%4
}5S>{O +LEc-iuv_NEGez.,F+jU.x-⇲"ec/_WRT6IHj1Saa0_$.wV! :DܫPKU1ư      PK    A             =   org/bouncycastle/pqc/jcajce/interfaces/XMSSMTPrivateKey.classPMN1HzTEBp(cCL\j&3d6_ qDhׄc]Ȓo^8=yf&i+#k^spnZdVJ*sc_qRI8[DgeF8ڷwp-j}Y4٧qU?E~vƠGlWjw] `[8,PKF2   R  PK    A             ;   org/bouncycastle/pqc/jcajce/interfaces/XMSSPrivateKey.classPMN1H	P/&nG,w5CbZW3$ǄptM8m,Fs'a[Y}a|pӚ7l*0IIe}n}Z*	UtvZiS^}}[עևq>MjCw`Ϡk`zdt.}pTS;?Qq
PK   L  PK
      A             %   org/bouncycastle/pqc/jcajce/provider/PK    A             8   org/bouncycastle/pqc/jcajce/provider/BIKE$Mappings.classU[S@BExZ(4RQZ*bxN.u$5	џ"ug|G9MRD>|{z/9'w xp C!G2c8p"%8CCxc
R1)	KfE-w
&rK
TTd^Sm|iy3m|5ٯp\]Rߐ},] 	yCYȒV ryQ\viLhˢTஂ[LeZL/d\LYP\Yt_]1goӣIחD`꜀8}F2F3n}1/wx88#l#/h/Te_ĩ߬UA	")o/,IZ-QEFЌ(<3N8F*ΫHQѫ"Pq1u92s}Vp05y@ɝQ|]2zddPdVVHo#.Oss?vD6SD-]?8Hk8#ᬄ>	:5\nJ$2RmUd%ܖ0&NJ'a"7I	S1aאOc)`h9CْyUR5@_?*6uOAs?	O誾7"#m
C>TBo{OR5ܯaszCٝ+xBu
3ݤkk
lz*xZ0F 
-PK|  m  PK    A             /   org/bouncycastle/pqc/jcajce/provider/BIKE.classOK@_Қj[o,7C(&f?'%N+E20{|~ 8>y<:d2~$r&I#L:
riԋ:U++uI1/,?"NȪLj}=<t<xf,@C}B+*ЏJc4n.%AlBZ-!Ap&O
h}k7Íړ7Ȑ{uoPKs   l  PK    A             D   org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider$1.classQN@=ëRT|%E1q'!ƅ	Fܰ	v~&?2VWn>r3pCl5b(tUͅ4:;K<z71Q
)Z+oRr*'}(dFzꍣE(V8:ZEJSu4^Pxh9yi?g6[_Bppk䠈-0YEmFņM$C2AdT8,08Wa(pcC68&)`B{ϤRV vjHY.oL>(bwS`|ڭ`?Q#R)PKW  n  PK    A             D   org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider$2.classRQkS1=jc[w]7:躇"8Z
V*{Os]]RsE\\rsrr|_ Ͱ=fkC}3#)κWXD%\Ck~j5}=+6KPr?KNt2>buY2S#Ϥ(|Kt\JMop3OxMD͙2(dq9s48Di=eX/Oj8|o|R)I
/XPPuz7pw==42)bS1ʕN9B?b+lO`qT)-[Fw6_qB[(U=v߰ygDTp,&\{iVU{x6ViPK	a    PK    A             B   org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider.classX	|S5yk)
FA,鑂wa@ZJi tc<IM^
uܦyܡv{so9Dj_̭~~Kk?
6_BX$b:"X*|P".qfD,&+DJDVEX#CD@D".6^a(Yإj$}4Vx71=[X?k'37hS\j1M_P|p;ۻ{;BZ{g4ZZ{ֵ2[kD[U==ް.OH>Ić~5Zx$J5{A
sZj9FF12&Sܨcp['ޥ(A~$*Xֻ9"{=Z$E(Q$}!K[/aB=`+tO=e$
=P9o,>+BXye6eHE؀/'$(UJ$&VJ?.NIJ1N})]%t_b[ؐyhT^&x#	UUKJ,z[xKPrhc.z)$)#qH*i9?5"\`J	vuS0ׂ$
15AYYL/iPuK0/yޱC%[a5$q#*	1e#{=n>P:[dUkPEn52@s<87lQm"꠮+pa$Lq$|0თ2ǒ=+
D\J4S\ys8bpL%oPv,OZRZ4eD|7Isn}~z"NXu!CfimE}Jr+(9d]CLyoz2_L88+J9ϖ'GqԝsH1}Ɗ+qH㶈-Bռ)?\o_ؚyp{$5ghFk]6]F:K&OHK/_3xsFu$WPuTߩ>Sc`_*XJ;H/%1ٗ_IFJBE=╯?Xu3./@E4lC@L@\$$.)]npY:0+;g6p×ip.܉D*GгkbGB&ީΰ,(  \#f>$tZ首3ΧaY8v4tke"YUªdY(%yKV[>&k҆SlE-&[7KFQAd9i_#Sen.ZŐ<Lq<̋jf*p:[6E3J_vʆX>+e},<4bÌ]ǧ%qeRY	8O
(p%>'aK^< x}^B_B88(-8CvaLa{XB'H؉G$tQJ؀c61	]x\&_<%,|or-w	?N܌_;qvv?r''NS?_:	܉ON܃_9I81qwN܇g.܉s#8
Ϻ1ԅ{gو_ha/"%3gc'_JK_d;x=<>0|
p2(5Hg
/q6z."^qzIM7AwsU<?p&6
7dea3d^xadx&Aۊyލm#+ucx~Rr1<ĤfVc1c45;)''<acq8zLO5R,ǭ<`'Q&@n72'PH8dC8<lo8Obpم2L[9Etg,| ⋦vgݛǕaQ*fԓXBn?+V12Gfk03
e3趧GucԨzZ/պPʢh4)J
V[0Ɯh7k{_;%:'?f%;K>M("rBr'2c
-1Ϛ5(sNg 'd#/m?fm8*ig^U-v{[*7
IE/7qU5b|˚1E1I^T2fmaVhWӃHpw=?\Ƨlfwefa[nozTv;_Fcxv
3_=)Y0kx
;y
ꎏv?j
k6g
	K'vf<f|3knZ>TH!{6ZGFa4oITPtSV?LLnLUU4E՜S0ixg{Ϯ'PROuxyFu㬜614F
0bgisQten 2%Kx4Tf,utI3;1 K9v/qFO/W>a\
e9vUp</3BaQBb 	%lNyA\APK	gNer9ry.
,:n2vQ"z%F PKˏ1F
    PK    A             8   org/bouncycastle/pqc/jcajce/provider/CMCE$Mappings.classV]sF=JHqTPIK'kj@SBKRY82JJf_Чe3:+ɉcg ݳwfx]ga2Caa*CAcg0,0,2,)M<P0lڦ]AhEԽtl
7Ty`2"qpK7|=1-\Ȉ;GܦnWtnCeEͦ
&1k{Pp뚥5mwMV3pn2!r,,qv|)$rL-d2j-;n-]ql=FnuL7i)4KGy)$lN>KCh{(N19,Ua0 !}'kihbhF.*l1_qZ8-lF^f.|ҊA!~?ҘӠ[sd}iм¢|LvBQϐ#t1MFWLIBzӍ3	gWc4lŐ!TkVܺ-YAZT$p%ٯHϫݞaa]!o3HJOF
$JӳךICRqI	3R
9q[XU!pG5u˸;/!aS=	_KؒM7p_	IxGIr7$
OoJ4L˖yBvng"m(A~F(	JSc
|/b#Oq(R|1f`=x\
=
B
F/gS<h6L?ϡ=Z8?/=-Mj|dzd	&&p0PK@k`  t
  PK    A             /   org/bouncycastle/pqc/jcajce/provider/CMCE.classOK@_Қ?޼	lYoJ/KEQ(^%$Mn~,O?JVe`z p#Bl R	F\D.3=a\TI,Vh|nYǙVfYteX?#ar.sUM\fFV0W\F:hKhbe]YXG3kM%sqp'1x]o;4o8|vCPKE"   l  PK    A             =   org/bouncycastle/pqc/jcajce/provider/Dilithium$Mappings.classURP-9-BT\mQ[,T񞦡SҚfx_pF~(3>}Mzg9ݳ7 H202\dp6.n^>~~C}wOCè8T4]-pVڍ!Ό$9}on#xYRYEStvOJtNWwZɬE!q5IƖp64,ފAA'i2;T0?^gd)#Ք+V=C<rwsR*(Gق
Пkۊls38&C'䬴C8puh6 &eq2(M)n^0Z^N,o'')
)UKbGojVv67CW̩rk85<Sա4|)Wt8Ϭ\xԜ:=}N9tm=<<<yr0i?Z88{PtƟF̯nWw,#mKbVbIK"fS7fM?K6rTܶ֩|InLь>\W15Scƃ5Ŝ)xÂ)MńL|#!]z.RKɥh}"YPP詳hW,hhuc:"%' |/'	l+Xǳ=<%^B!E a'4U
Qa=CE%	vފOXMV|D$;B.q/i
0PK'%    PK    A             4   org/bouncycastle/pqc/jcajce/provider/Dilithium.classJ@o/im7o/Q(
v
qIP*3,	9wjgn..gq&RҦfi	hQV(|YEXK*JLn"BBkYƦ.D7@'@/@@^~Wdh>FN\$0뼴~.Z]ŹtN;B.V 젍!1O-hL	aX	
SPK
7   {  PK    A             :   org/bouncycastle/pqc/jcajce/provider/Falcon$Mappings.classUmSQ~6Խ ًeڋo(3Y]]m/rO]Cν>9wϹ;Uk0ecpaC}KZ+4IDS6~w2pV9J5!ɖnTCu02j+bH:|>Z.j0D8ApV-jk(M~kHN_ʴ$]M|m_Սb(jrUL*PIJ2M
}O+FJ8CCnraڒ!sR[;׉wtDnR:.x\86IL2VߜWC'i"IDbNctV2hZPwnKZgH8Dܾke1jVwvPfkp[8(D#mǷJEՊ۩gosVkvҩ] /cG$)A<fxR.hv;|SZm¢OR%iO˒VbF~9mM?3Mg9\T"I=Ű~mCxu<m腈%,fŇ0V}xmb0oڏY<wTަȟ蹍%TY1FtaؿlEdi5@#Gc!ֿ8 #xROAG-G`Ha!R ɵI+x~Нs/t0L\t0ɺWdG^4.И7PK  :	  PK    A             1   org/bouncycastle/pqc/jcajce/provider/Falcon.classOK@_Қj[o#{%X((Bݮ!!$xiU~oϯ c'sB"3dsw5=\KQHE'*veԋ:.U++]gK]OPĄ3_\0.~pŴ	G7,3   atDhzOh%v	sYxf*)smbh"b@Ȏ6wx3>}+PG{;G~PK   r  PK    A             9   org/bouncycastle/pqc/jcajce/provider/Frodo$Mappings.classTkO`~^l7BE_PhE۸
!DpD>{7:v~~QȈ99sn۟}0UE\1$bX,⪈7Eq[H"Ҽa"pά*9\`4v0Hr!zl3Ml
ɴ-hdGɸNCeJk;[ZF[en[t8fU-1jie0,NU)MKo\i|ҕt::AaJůU	*jy%K K8 p?&dE=j5t5_(j\a'<LvBgZCM0՜۪9mL?Fl߃7B7\ٷѪ-ww>N%bUS4glpC]@wz7}r%YDr$ɜKcWYO&z{-~ȰloY=K<#=ҖfUl*e;^0M	0%aP$\	S	㘉aqL`|/H4^ő x_%,zSs]N4]HI.ӿaҌt4ן TB9NQ9Ҳ tNxp:@f{' dYK_mc98Si6rݔoHI
bPKujǭ    PK    A             0   org/bouncycastle/pqc/jcajce/provider/Frodo.classOK@_Қj[oZ!{[KPPuYCBحmICJѣ{30_ αOh	tHr-E)M&nVpj]/ʨ%+_xBBuvOΦ6&iŖӚ&>en*D;@+@'@@]>
P]	ĦO4~.RV6QX<5.oo}6!PKO+   o  PK    A             7   org/bouncycastle/pqc/jcajce/provider/HQC$Mappings.classW[WTR(9-)A[mQZ,*RP0dHoޯyZ嫯}P;{g^`8pË].1t3zz^e00cfx:
qo0Jh
Hhl˿.=NEiK	+lQ	U:;֨nΖt˽eڦGZJ$ZN+W%?A
Ǝ)z2Iq\_^ u)J@Yb:%'؛뛮3l%A-z&cI	!ñԆkry您Q}SҺҦ}ײS#V:
9n*lƖ{~ڌf֍芡$ΦEnQ]
X]#G?yu^|D!fݱ
hB4!V#E064]hD$fܨ
mДC!9"ќ>"J4ݳECIL.?4mZL^r ϩKK6r6	}7|+Ž5&QEp^#{A]&huV{~[6?Ϗ)ĩhUsmk,.I&;e#㪌[2n;2eLȸ+cg+>}hWgij8s1fp˥&c]
<QͿ7e+^/Q/
v *?S-]<n_FU
^
7Apx^[@A*aQCA
^pX
m8,s8blN+f=sp9x|8c
`CFBsI'2fHggyD2w/NDW a Y&Z"j5!6-Bꍨ`sg,$SO]̑@R;v`TUQɑ5=KdY<,K 3NrDmS.zޝ{{韛zT}*H.[ddXl[Y|'[9&
 ?!I(//H{
҃@Gh.~B,.:G%ZiFPKOzdJ    PK    A             .   org/bouncycastle/pqc/jcajce/provider/HQC.classOK@_Қj[o,7KP,(u]bB؍m˓%N+E20{|~} bP&yf2jLr!E!M*V0UOܨ:._U++]d3]/#YaŖ	ѭ,̤.D3@#@+@@+"@%4;ӄnb,죱1J
vp{Xx]=7
hc
D;<wPKw   i  PK    A             9   org/bouncycastle/pqc/jcajce/provider/Kyber$Mappings.classVWWW]cMb@K
`BqFibW 8T{I8'5?9HD3sfjhů>C+Ys.0p?CC;EK0:2t1t3<pa*#exaq'dxi1g$]PܮZCB?#IIβvv]injiPls˦.H8n%I'~:B!Ƕ
I ͰQj؜.L06J8-^2;%g%"zk@M<V
6sz K%
%nD
->9CУUxJˑp+F	-0TBBcJ$<6Vg,n덂bM0R9ay$nhz3EB!#j}фLX<f}SAe*H(77_)
GfN%F{V!9s[% 	=9w;H/ ٟyѮ3Ii (^
O+pg
';d%7A304>!Ukj$4mk<;ru-Y[,YrxD}nOĵ%gfT4OcgaPϲpDS$yp ]4c~x-fk3gWHٕ+8cijjitӲxԺ]vAqa܅!T&\ StZ7>̣&@m]Kfm6.d|69bF6:#-mٴ쯂5-oXNM͚ʕ.6#n>%*sk|T bӦh׃yЇMqӃL%7x͍YlWLj	t,uSiJ`86;x a:L1o,:ސPӫM(Jm,=Xz),TNDkQm|Zni.z]꽼XƭȔ7+L2>\L2>X&*.^mkEmn^gky൶V+lm
'4{
>L%^k"^NaՀYUdK+t|	K"QpI$<,.yyA*aa*>;a0yY
X{'?<Bz17~u֟h]gPK8B   C  PK    A             0   org/bouncycastle/pqc/jcajce/provider/Kyber.classOK@_Қj[oZ!{Л%(Exl61-cyzCJѣy30_5s'SB25bt}3y!2"&q#Uܨ:,T))UHg
_1+a̴K-i{YI0}U\hzOhELQaMe>9(jKq:D}S>;rfq@{w`ﰎPK"_   o  PK    A             7   org/bouncycastle/pqc/jcajce/provider/LMS$Mappings.classSmOP~.ڍRAT|E2s JO˥twvl;}Qӽ0F1J?{s{^*6TSqAE*tT\UqM4C*;ax]z2`,Qp%-|ͭt~DL։$G@zNp	ߖ:Ւ=]M~ JBl{!ei+aXvkaJ(*?=,EW
"`Xմx¨ū$AdqJu✾}^ :<bX!
$C/g?ZU,۫
+ڴ})a=~hkj;{
toD5aVTmm=lO_2T#gW\WpCMfX>djiJۧǇԅle{6M2'51r$d>Vg]5L!AÈ;0E
Xrwad03+x܃9YMmz4Em	:H6N'shk_Z c,t̟"`Qox|8#W!m>ag=KƳN2C9 PKh  O  PK    A             .   org/bouncycastle/pqc/jcajce/provider/LMS.classOK@_Қj[o,7KP((v		&f~,O?JVe`ޛz pcB}8Zי
ۻ˵FT/r<aTTi(VVmt|QqdV:[*6.&YaŞp_l*2
Wgb*B
A]B#)M
뼴~.͊hl#ӎo @8AkBvuě7H{ oPKj   i  PK    A             8   org/bouncycastle/pqc/jcajce/provider/Mayo$Mappings.classVYwPbKsih]뾵q.iVBJА~?Eў|x֭y;7s|#Xbp !GFcgB290C!p!p"%]#n_?n+mZдR3eVѭfhBg:173n,"E	v]J>(LKc3LƐ.Z mg˖bHNDWaOG<4%7B(g.jMUvIUPQU*--sEkV;;mfmON GphTCL1E;ƴqW8|B"+m;H{h{pVTSLv:kVՍݍ$7"ؑQr%msğ˶^ZٖhM
t
</գRэBmxEߌ[`[pD;qYq"&⺈""&2DnSB7рqV?3)*+\R&3
hg39}r{6?hj`Rr+e;
8.bp3l '8{~$q,xţ^^0S."m\Lq>0JyzS%Zh ,y7*w3TRAɒ, iomH sP$zFRs"Onk$ӂkI}u̯aL#xIۛ;u9ܵOI<G w-JRW:]Vu``8Xq$GF	~*IO6HO6IgHWPKP5nX    PK    A             /   org/bouncycastle/pqc/jcajce/provider/Mayo.classOK@_Қj[o,7KP(
vB?'UVe`ޛ||1~>Zי
JBTs<ad4ۥQk%/t\8W2Wl+_Ƅ!/,?b0TefR  ~}Wj]hB7yiLK1J
vp	X{<]#whq"}PK   l  PK    A             6   org/bouncycastle/pqc/jcajce/provider/NH$Mappings.classT]oA=SJw[Z(n14AmcK1$&>˰8`Y`&&-(q޹sϙ1wst$ut:u,0u02ov'=bPrVea,/jWh_RP̑un(]_Ðp|)ݞ'>]v}Zu9a[Xrx!U}"r.SY#${}>#YvyT ^o茡Wx/m:*Ú<lx|\o	'<hPdS
0^<?znnWzn0  MI) X64pS-
5p!8eZU
WS-R}3348tnsϵk-NZ?YrӬoJ5}
/Tek:6$a3x*XC&ulpiߠ96<r'_676dբ2IF2=Ec@<!g9s\1̘4f#ߝ"}¶9ܘ˦5Ir
oPKaO!    PK    A             -   org/bouncycastle/pqc/jcajce/provider/NH.classJAEo58$	pEvA1iq\	. ?JD.ܢ>? I	d\BTLr<Vi<3^tq\\<*6і:&2/yË//G$wdYf&u!Z{_1pꠍ.ة&tkƏe19iGWE lS
!;ZM_eϽú}7PK'K   k  PK    A             8   org/bouncycastle/pqc/jcajce/provider/NTRU$Mappings.classTYSP.[B"7Ph
Z@KYDVAIK	&)3C`g|G9۴.혇~s Î2:e\%CqUF2ɸ/CsxCیiCW"&Ffn;Qe*?^wtƛd]
25]t[T[EivLom홙ÉЁ~kYh;cZMs9;MW*&&'ˊp\w2F3eey4шAcOThə}K⍅F)f>/b!>p|E#
9(v1ֈ2fJ[grUoibTom>gf{|xȩhsSk}ih\e4U!pW8и9<cw6Mjٳ	pCBIXZv$v6FgU
R'µihS\̵9|'U*R yFJZ̍N,Êg#xj*pG@KP`TA\ø	aL#)		aaX4̇l٤gJY'rp4襀a	L!ܢ.ZXRpgO}3V4)ٌ߰ڦvV5Kg|j	VbNJ Bq1ȸTa<ClY+YEDQdAYbJC'Xb,.Ų䋥&Ѫ!mPK#    PK    A             /   org/bouncycastle/pqc/jcajce/provider/NTRU.classOK@_Қj[o,7PUv		aSw7?'%N+E20{|~ 8>~<ZdrDr%E!M*nV0*mʨ%/t|Vqdr-UL2,a-,nGrLB442pꠍ.M&q^?Es41FۤiGqu S
!;ZM
&a>@PKySi9   l  PK    A             =   org/bouncycastle/pqc/jcajce/provider/NTRUPrime$Mappings.classU[wUIʁ%ckժm5ZR4MhMlR$1z0!Ca3Coڇtir-_Q.Ȥv!wٛ )^xE	.pF97.iK%%fnK8lsMT^MejrFkOR$[|z +З\;4΀mtSTR
xj}NfK5~qb~Z5(j	QiնSj5u_UYUJeՕQ薄Iӱ[]dh0,2`qe*5jlZGSmZTMSkQoж)hYFCw71ڔEpc@KqCF	5pna]?+4bVPbQ8?fZ)kJn\5'_M5t˖2vV;+^(9Mr]uOuo;F]ڝFCz-HbPBqzaHNl{t^'6˰d۹7v'{hXzհ4hl<7wE;|#(NvBd"މ`TG-m)2?)$&axlK_v>~K/ɥpZ_:dߍ/xaJzę;zvysIV3؈#00ːdcXfx=+9^8c37Qf(q
7X-3|pS>gKTr*,[^fEh\BxޤS9ʃ q?j}'f婥$&0F3Iy\~7CR>;.?(yI{U}-K!9*gqW;LmКG,ID>/i)1ytZtl9	h;PˣL:>/PK?c&  
  PK    A             4   org/bouncycastle/pqc/jcajce/provider/NTRUPrime.classMK@WҚj[oa"xx	
?Ju]BBMIGJѫ̼3|~ 8.Ch&$# +)riqȴ	_Q/J:k^>+))XKm*m9'B%B5p?Zej `]>--EhEKՏ4~.hbq.ӎ!xc50졉ꀺBRءp_52ܣEy7PKk<  {  PK    A             :   org/bouncycastle/pqc/jcajce/provider/Picnic$Mappings.classrTӴhDK.qj8.$m7mM>(_Ae8Jr_f:ӿ\%0JvęI?gϞ)Y
*W*x]9m(xW{
WpQ`d7ґMe}W7kg7ʥrI6t3ihd4p!T
f
zV-ד֎y2+r}:uiSY٪rmflIݕ566*M)BTY&~Y4ubQ;/<W:ʖt4a,fxӔGϣ龓ӪXZ6L#(L'uiz@x[R^+u;@FwLxV mwv~S929<"zbUo6cQ?-:^ȮMFy;ק} 85e	6}jCy8{%\J-ky8晖[>HR&Q	\[9֛ޙ;yerꚭ;VsAGv՞ga==;鞆Xyv{̻K/D٩]52'Ǹ$*caL31	#ǘa:5NMJI|;%]=}FcXe1/_1*S)[w),>][L?d}ߤY} q& NAΉ癩#xb#'
Uy2)5::y6Yt!ktD:$/,<|wu*O=찬ƲK3V,bو!?҈e=2=b󘃏PK)m  	  PK    A             1   org/bouncycastle/pqc/jcajce/provider/Picnic.classMK@WҚo~x	
ŢPnK61-<	=Q4R*3<0_ 'sBXonτa&RҦai	EƋbeի:._T))U6K]ťQ֨pθ.v8a^
	w??
P]	XjB?)W<GSku96
C4yj dGۻ\ތjޱԑ1PKہ0   r  PK    A             9   org/bouncycastle/pqc/jcajce/provider/SABER$Mappings.classT[SP
rA;Oiz(mR>2㌯(M>==Ϗ_CVB.J0(A0"ኄ1bozpS墚*Q3FuW*pTz
+Q_kH!њ0Ipv'8e^(;6
Ua"eŚ-FJ|kenkf1]3a3,YvQ[5SqB~ՒK:g|+f1A/(oaX>Zs VQeP(w-kf$t7[kv:̛CY~-tb+1N^srꕊ>w`P8͈lj'5̷ߋʶog4hBGmN)E\9aq=ac4[aܦܴTL{ϒCE q*	sf&͟u"wJ< alo?fs6F6kXʞ]2`J>cq	!<Ȍ{x(.f#(1Gy⑧Q<Y<">L1Cw*г)gMz}2e8Α8].0/7H'''߀2@m!:R/X	!(рV">wĻ}H(]J;8Xh`%W$Qzl5Q:KD~PK7  -  PK    A             0   org/bouncycastle/pqc/jcajce/provider/SABER.classOK@_Қj[oZ!{ЛRP(-&f?'?JVe͛Z !~z6'SnLer%E.M"L+G8/$QJZ|QadV*]*2f%iŎpAej# 5Pmt	XhB7*uҸ̗<ctZm	6	#pTώ6wx:9|Y;XhPK#a   o  PK    A             ;   org/bouncycastle/pqc/jcajce/provider/SPHINCS$Mappings.classT[SPx!
(Ж[(^hT3N$5	8}FqW-Pnaͷߞsrd	$\pIe	W%Ip!Yb{SMhBNK'iư{WfcdH) ٲi;[[,dj´-!ݶVI3c&V
KFIOt^IuMQ4[Y&дLh_@g|PBdx{v}LmS@.Z'T5x+e1d}e5V
ި6G宕Ts+%CEĪ0a&niy",ӭ<G1Lz(C-Vp\bhIZoIL"GA\FA5Iݬ<Hofm?šA$:W\-sT5efw/vnjS)5zN0~t#K2`D]_E2zq20&CA"P}0
#	_}1F8Cg.c/-zre]#iS!_Kzievv[-
b
Gt#@B\a/+JJҥt
ս'dDc-<VF1P͓%CBPK|^ڳ  j  PK    A             2   org/bouncycastle/pqc/jcajce/provider/SPHINCS.classOK@_Қj[o*I)v	aۂ˓Wfa>? `?:UHr!E!M*Vp\i8-F(i]Yb[lVOQ6$1/yË5/u|%{2Zm-atvj4@=t'r	4I&:*mb;h"`Ԁώwx3\9}W`rnp
PK뿀  u  PK    A             ?   org/bouncycastle/pqc/jcajce/provider/SPHINCSPlus$Mappings.classi|Eߥ`%,A@PJ	
"U)Anm%MnZފ}7>AAE&3ii쯤<;;ңs@ p3	$El9zCFN/\'0@>!0#$0@aA`$Q
H5^+~%4DN)f-׎ܡZks*[{IQG~Y谘Q(KjUn]R4EKitш>QNG\Ǡf&#&##Ətd#7i5.dQI+ۺJU	UTѻG61ݙFL{tHw劗6PP@]떴O'mnMU
(Yi
ւjMu>Ӯ"@q3][8q1N᪐tS,;ϑ)MiS=I,ԅRI]x*7KiÚ}b0E!z{l]2}hAqY%S!\UzqÍ3ڣge{A,H ΤWݩVU!UqMgˠs'k!=HjޒؘlOdWBۋ3#vVZ!$)薸TS>9aX4>dT`t6UHgD:Y@fMñ]u5%&44	ΡIh4
54:I*5^lCδiilMCUڮv0vMؗ$WK5"0ˍ<7Aх`^c)䲵`p1˖ynL8-Pd1kbqN܆g>7a{fUJ5'v9g39O+q+hvM[SMۇH(h)5
_.۬p!11q1Dĥ#@"DH2AȈrQPI
GAd!D5qjD-ĵ#n@LA܈	N@
yp΂0Qwp^} D<xQcO D<xYs/ ^Dx
Uko Dx]Lx>DbCl\G2`*πi )30淆[Z<h-!
|EH?m=`*_SCl=~ pѝZA\#Ά Gl%1A#"b9ElWu;L4<]l76ZwgtN:`U<U
?Q<M?AÏ']tpQuk7v3l163l?̖3[l;3;l53[l]̖0[lM0lev0C0[E-GL0},kLvػDZ亘Bn亟^˹.庝V亚J빮㺇.K.⺅&㺂2;nz!k24̠VPKjK!    PK    A             6   org/bouncycastle/pqc/jcajce/provider/SPHINCSPlus.classJP/iM;wuF7A1O0P^bBIr%|(qZ)3|ϯ '&yjEpy>F\HKYUM8.ğQ/J:~LLE:וo˧([	G̈`F0b͈88bp_dVej!Ln~_<@1$tb	à0ʼUKk5㮽%vІu].+ZrldR@
sp<APKpc    PK    A             9   org/bouncycastle/pqc/jcajce/provider/Snova$Mappings.class\gU
]戊3	:$ڀ0Ѓ9nMj9y]לsYqZj>-?Ν{^zۯ?x= 0Z}`A`Xq	'@0`d$'B@pT3fL0`6W\Mp
\Op._%M7|J-o|6	cȾzOl)tLF7~Z}}Mض.0b=#~7ݘm857_r3gMz 'qMJ7ەn6Ne5@H8j*E7:"R55jlcƑAq.:};uvJsl E$^7Օ<(%9>czv|$M'ʍX7\Aq.IӉqc벝jRRc#i:Qn,:դ%#i:!ˬm-+W8S"2}VDpX^UMm-L"LlkoYֶش)_h-Ԭ9fUS~U޶ey$UVnM)>cKO~͵"Mؙ5ifm-knY;R;Qw8Y+R;mwC8PjfbOhE*gU|m\R7-|²)hq6AIIyhs6bOݜiUE{LS: 6kE+کtwǪЊubݜiJgU|CI%eɊyL-(
es)YYV3kS0ٙx/k}#ݠ'zB֧CW.qMHE+k.R{bdi_]XWiK)etWb۴2+`O1օZ{J/Z]N=٣V@~)ƺV+sO]+kb(ƶ=nvKȝURz%e#רR-}Dلx%d)EuVYf)p+T벑f)r+TܖޏKF*]1J%m+%^ؾ~ۢR:튩W&ucjtSTMlzrH+^X׍6+^֍WLR5	unmT6_*.k0o٪BSbGˊB{I9r}
S?\m0_/k-7c<|mGKkm}iՅ/~ЄW" askִKz~GŮM~y.m	v+5YYOlڕ>}m	Zgꖽ5Y{m	Zgꖽ5Ll[Se]w:o-{k֮PbޚmveoOךbbޚveoOךbbޚveoOמb-{kkeoOךbbޚveoOW{t/喪PƨʼWz$qMJ7ەn6NGJэ(;\S)сꯩVx8QNIӉy􈞚HW=2<HN+߇
e.IӉrBKjGtb\).E;63P4FL#C0`|C%, XH0	,!XJpG4M'h&XIB5[	V	CNP" XKXOp'Lp
NpgMpOp\Lp	\Np7	G}G?&	;	~Jp~Np/~I+_#=H'{	L '#7!xA&xQ'xI&xY'xE^&xUx݁7xӁxہwxׁx߁Ё؁Oԁr=`o*8jrpkq8: sp{wppGwrpgwqpWӿͭe!o׽?gUya͵b$#_stfWɭ+wTj]`=%>C*0L`~5#F
-#0V`x&L$0Y 4$0U`t3%0FB]5,SN5,WT
&UU>}Z`~2
N`{vI`g]vM`w=,W`0	
)0J`@V`L_L	#
<&O
<%3
<'/
$+
&o
%;
'
|$'
|&Qs(zTc8
m3B{CkT*x??( Ts֟3k蝪+To=L@alW;՚
)W|՚WSmW|2 dCS3>ǘ:FSW
>TISNfW_M	q5Uf/_YTSLTufSjofO_Miif__EN֙}53Z~!Lm2 gxMmԙWSijPW `M
 _gtMmԩdjN/1u0_N	)x2'P乆Z[LeC\WrWjQo3y!xC&/4dū}8<ϐ]WKk|$<ߐK\S&/5a.^#ɋ}'L^b]WG1(o@Wr_U>Ϙ̐Gx+y_ղ 72y!xV'ů(d*C]Ẃ5<ojEW3s6^z*Ys.~Nz^n:yIooťr{t]^P:EN^D:v^>:y褿xdkċE'\	/lyd;ᥡ.(t2şr@A'ۺx7/d\ͯŻawF7;p6{if67b}5[aeÚvآbGؔcSgv؆exb㙌wvjd=ɚ\\2Ui{5VZC{y^-<m//*&:*:B{y^ǄJ<m^׉<m<mB{y^Ǉ򴽎i{
i{3Z3:5guRh/^ɡ<c3C{y^{3:7guVh/^١<cC{y^.{34guQh/^š<8n`XԍPა018q|xsܟ'p|DOqi9> r<s9>q
86p|A_8q|tr539`opM9qǷ9y8{>C9~1C8~q!Ǐ9.	8~pq\q#%?A8#r<x9x4TPKG  VV  PK    A             0   org/bouncycastle/pqc/jcajce/provider/Snova.classOK@_Қj[oZ!{Л%(B.!!6$xIQ~oϯ 'Oef2fD岖&\+O8U/ڨ%/t\>8W2Wl+[g+]ZƄ)/-?bЄGw,3   arW\DhcH$v	Yyf*)sm	xj!dG]=ތ7N߰
l"cPKQK   o  PK    A             8   org/bouncycastle/pqc/jcajce/provider/XMSS$Mappings.classXw`}N"=r|N+Rl8:rc$tȒ:M馓M-B)(Nv˦N$'V-?~z[wz=tEb&p(EXG8$'N@HD8p$(фc%t%hB&̈́`~B''$IB0HB8p"apd)@8pዄ/L
\y	JJB	 |-·	!|p{L YbČZkВiYپ\*$
nm^7uswԱ~t_wˡľGQ[:\?a̺y #N?*O]EP]yǱgX]^BxboNqqXkuiFbٺl᱆ANEc_랖c2uAc_2i8b(PC6;R^`rns(9̓Cg7:N՚\s%iaeNW\rrUa5W٠|60xlQR֢Itǩ?OۢZ,F,lЈ@K<cLEu!_H)2b(5?Im֢s.V|tw?GX/(eV	^-=JIz-Qtq.Itʓ3R<NO_%2X2ϟ@T2_fwy+y:KǙ^	"K߹D";oȓ]+IYP"Oy$ipphXS'XӧRa=26z"i-F,'bZԲ3ZB3^gmv@h=Q˖Y{ŎSF4КBʮG#>y>T
ػʸ<fݹj]SW2
ZKۓ*zHvjwTl팕ѝ_^Z'fn;5mkUp]vN9Ǜj;٦2X۩&:N7+tX?ݬlF-s^z#/~^\ť^\-|[6E~{Wֺ|7E\?̼|ltjZAeiqg@8KŔsm1D7zK6U([DG]Yi|8*0jk~skc0g/1p#Mnf-kƇ+q>?2ɇpW>/ǯ2`xaGex	2IfxY/mxr܁?3<^[ÿ^bx3N*kywJ/xXJՒI]}-Ps2.NSIIץ-qٙ(
6jt6
rl}-j;n=bbXT3,|âRouâZ
o[tl3E7&޳b7ulVx:N+Mcf(MeP^>c봧:x_9Ψ\fS^9ۦ&Z{TcS5r?rM+N}A
UrZ9AE&>r)&d(0Q.ed)D.~)e<2uY(6t]&vFrw"MyL,ڔOeo
.5rvܭSmɰQPXNVԢPKe˯  :  PK    A             /   org/bouncycastle/pqc/jcajce/provider/XMSS.classOK@_Қ?޼	lYoJ/A`Q^%$Mn~,O?JVe`ޛz p#Bl4'R	F\D-3a\TI,F(i]Ib[tڐ0bX{X,fqL87{:ehzhxhyocW1pꠍ.+MFN7`j\Z-	Ap:>O5h{Ǜ_]dz}7PK|   l  PK
      A             *   org/bouncycastle/pqc/jcajce/provider/bike/PK    A             @   org/bouncycastle/pqc/jcajce/provider/bike/BCBIKEPrivateKey.classV[SF@$BMMQ!-M 5q -iy-I&qoiG:c@g|vܾݕϿ#R*Hgse΅h<CmН!v3՛%.[bt=2wK_9f,1.
|7|UX2RbCSӋBscKwĞB	(hefxF0(N/[0Ըˢ2G
LB1pUMa;Ђ(Tx$Zkii#dVh~-f+q@Ĺ0\X\M51=LYG7
=N朤CPm9XVinS&u3REk!{d]TrDM^'ӴE
5n;irQk6:	u$1>ZǭystQ}c\sL;T;qU㫚PuJZ⚰z=OrZ憞Vc`8t2#N^CÖWkNn,"h*\t#&uplVXqn9~Y	m%tHxWU	Ix_5	%D$tJJICDYNN$30pqBW"^YvP|<DCsȍZ?
AQ9r#n=^RS{s=Rݲ+K@ER93Ql@a;F,]+f*SUsy(SЍH(UphD+Fb\A&4`JA+=xf`NA=+8ϫ0/\1/|
.&rŢ~,ȸ'HbE 4CnK2@)dBF2kW|#c
5q8px:Gk𲥇iM$>i֏`hƇKzf
_ѨMC/hu0%47?m	3M|c^ѿ}dm-tC4
5*o/LW)cP^#9li?fW^-uFFcutM/s.`2 5s>66vV}Wu?o'5{kmyj)n_PL[5#yR2],Tt>ֳwc]`,w:;2.>v w`*և[${\k-nm)PKҎd    PK    A             ?   org/bouncycastle/pqc/jcajce/provider/bike/BCBIKEPublicKey.classUYSV.@%$tIM4$@R`@v$O<Й0}NBS|gW_ S-*]IO.2TEcD#͖juCw3IR;Pbk%Ec,1%J>_\Y3W\)FdhJ/gg= CsqY#\6EXf~h.kn5 2ahfZ)ZLVm=͓pC(xI5Bch(rr{u"A.
-k|&g[(8i0'BљwJ3r\7[tʔ=eYu<m{Ƥ*Fw䀜6oZ(3UWȃVҸmOݢSSOEaCS5TpLuE_Xr*QN,eZtQ-\sLJ~MXa=k_ӄWkr(<ˠ`zZXA*e,[Z8~8eU5jYDut#KBٲUvma<HS-$еp̅BAXܦ~}tݪY
	nJ%ᶄN	HPG>pG]	Q	]bSm![ΐ0:	(@J+u]tҍO/鏞.;EGfQs[($ZI?x[3;߉.DM0ZHAuPGRR{W\0=T^Tt	
.+ZP jQ	PЋ
0:#@ŜV|(WЄuxኯd<KW|-c 2+Vdrxdr1%W,Ϭm7sEZˇDzOs$o >'Aj=g.
4WhOF9激"M
OkZCGxz2xDJcj;7F~A$=ޮsU!u<B|Wm42c^&4c2 E%T؅/CK[Gۃ"b;A"5`ӒrrٳR(pM
Dtg\+e>MǺ?vD5g${1@fz<{k'O	PK7]4  '  PK    A             E   org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi$BIKE128.classMJA_%1Ɵ.7M$(8;B;{"X\x %v7nbT z7"4Lns^_NG^<|9cY<kݢ(.[<ObT싙E3S<+2@S@7+>%+CQSԐ&haFf'LHy.)cBתJ7l;Ru$?PK-     PK    A             E   org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi$BIKE192.classMJA_%1Ɵ.7M$ (8;B;{"X\x %v7nbT z7"4Lns^_OG^<|9cY<kݢ(.[<ObT싙E3S<+2@S@7+>%+CQSԐ&haFf'LHy.)cBתJ7l;Ru$?PK.C     PK    A             E   org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi$BIKE256.classMJA_%1Ɵ.7uDppt!w:vc(X\x %v7nbT@ۄz7"4LnA\.NsZrƲxRyQZ]2B7ʩG.yɟT3afgw[?ɽEn \/.
F)XMQC60!9lg]o,
]fv*
߰³f;HՑ PK[     PK    A             B   org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi$Base.classJ@ƿ5icW^%v$nMJX>%Nza
3?_ n0#dFConqpU^f˟m-l#UhknҶFnMx&y)E))uvW~QۜP.5˩*~^|;&YƋbt?!3$scK+@茑#?Ȉ}}7rBROqJyLGPK[
   c  PK    A             =   org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi.classX	xTo22ylǀUaX4	GV	H1y$7 ڽv*ZKUh͂i	vjvwj=7k$oν{ν<OX"*`
f(@ls(UP^AF,VU.H
@?k3뷵oZn{5S{-?;qb%0KC
3f
}@qMmВWjjm&Ⱥk[X
uA뱺cC;&a#lmwl!7-[j%MKp}ER勜ޢLm#jX,7=NةtԼtSHF"~E;i'j[ñn=n3Wsڔ͎Sf$l5#h	Z٢u-M"]xDN7:&K nXjM	ًDC{hft%BQ#D16g=z7ڪ]N=aƣ

ڰE:laV)~O^۠<ڜ4cI3_
R\TOWӮ-&҈V2Nk֘[!E,͸2P\Yv'@1K$#%.lN&ǌA8J==_3i^{M~!h$Lq\,Ӝv֦`GDBD%*Iv?)).G"ziw%{tliPtd^)BYӔ5XrQ3f܊|UK2=TY#	dmJZrmu~Gf e3M!oSr-m'C5e/5̍gm`R vfvS(3M-Zsx暞cb_yUavTXwEْܵ+kgv^bmζH^KMk+lY{u:uYz{[ֶmׯo\MxWhXM鉭zW&vѹNشn'kygޥSy.D|ןzW$R!8zwHm׷m#mB񻭉4O}+GYg܌d!L(pvGq.sVda/=,!e9']:\U*V5{zV4Ll ˠ9z)'Lf6_L4Э༷v>zJ5ǜBjCJpWI=:SpOX TfRJ;TAv5B%KtH\#qk%^'q$vJ$:%t]]a{$"1$		Sb>7J$7JIox$.q3_+a̷9Y5m8G"ƺGp|,]BO&VE杻kkjchCl}g8hM0Yp3
gOeHvcM>?bb\3Μ&kXRsg*be|tsZ=iy+ǽT?PJq:9L`~ɻ&X@?VRFO-3khh9&@rKDo!⹬(=liA(	 .K;/P]*~ꑳrl[dP!XIvx)O	*.)Wу!igT| U\	j\RATXb#v՘b	H%T^gU*0
QWxj<,TeE4Ľ/x'bbb+bb;j|G|W|Oj<SG?d#?f?e39n=,c?nx 2 #w1(^6^>ݏ߰l 9?xу<	!<%nE,b.2ƯY/Yopb,SyfV\zS
TXCڳQmS?w 	/8j)j)լrZ/((-ԫ }EuO	yT$\0C Ud bX+pcuWS	4_YyМ78p$ßɤa)
^rщ4*JcdQQj,@	gl>mE[XP΢Z镃>~bqL@X?(.f	r)QIt WmV4?PJW+PB̺qw619VWF<qI⠚۩ГڊƳ(By= X8!LE1(J3x+pEx0.k8GrPlh=C鐪%ѕX1\!ayz0&J98^πɼ=uy(4A'w4f{D|V^A"erms9SȹӫK_ĕn
!"9($9`"P$7zŌ@qNI(ӲȬhp<bTRBt3I]#wT武N锖.j=C[6 &;J7KQ=&3w\FF^Q|Բwvk,1XJSb97
g1-PP=aAhdA(*1BrJNˋAʕTK:v>>y̅A4.)'6
h:R^;RRbWgi7#bEK&78>-CP,Qv?AC4 /椩KE]$7S+a:Z[ӄ
(CP}
څQ(Q'm^qeq2k-9KIj[8SGxH#}Y|X"NЋbJΥΣSt"QPKC<O  J  PK    A             A   org/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyFactorySpi.classVVG͢aC !Ǝ0c@aMeF2 f䙑@YNN"+ȋp9Y^IyHR$8&ҙ^nU߮7 #΋/Eosjguv޿S6ybk3{OdЍC\2'oN*lWĪ#n#LR0ܩ&ģ%1	3nbQ\aik<M:CsQ.L0Ef:	qǶCWڶFx7eq%4aPh8oVL,:5άqS&-pkWKkaKHЊ9iB3jsI	\vmÌRF"&lz6܌dX\U![tײ)^CELgkUgTE</
D9eը29nBcaJ۾i@:*;j!qܱCZ\
Bw?յ]]IJ5	uWr2ӂj6Y"Rp5--ϟfq?5lɲ0/@{99z8xG#11ȡRq+e?E_!Rp~UB+
kk5|/V.-@)hrS<U/
/=E2rh19.^+ZWyz|=xH&w0
sdUKay*n>7H!b·!/e>cAeX͇>t`Շ7ÛؐG
'
}.<W0lrd1DKńy)-\Mᅂ'il+
fllclY&!?>薧{ޅaWV|e8kjY+ɩG7<Y$V_!
/Hb"2E{)F#'Y|tsfoe4bGh&
u[r߁iZ11117u6

?BY9Zv9HNt:ӂ6|\#jLӟ~Sx"vFjy^;v
~KY#wXo-ԣ|`wP)%O>H"u'0ա&;3F}O[ύSLG'psTCJ`PK  m  PK    A             C   org/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyGeneratorSpi.classVVW$ǪPKl xA
JHhS[ar8 A/V%mY?GC=YM}>3 V
b;
⩾{
{l-,
Fto$7HK̓iKW nY~,G^)I<5M7RA֓=4
3Jӗ,)H'tixŒmdE1[YcY*"E
D9Za\ipFEcm)蓶-
Ǫ)(≆ƼS/EB4OEiZYtVסd 
&=l~\UYRйIaS$(RҨH(Ѯ]3,[7h_$oSB[r̲i[nqrzmsN7Y,Ƣ)ض0QDԄi
l];PȬ`-I}|rjw`S+-m<]ү_a⎍gl'ɾX>FnRo8ywPYrN,@!=G>H
P#c8!HӛG'VDVI Tt*gr
>jrW좮樞Jc3fqmHLM7ơj@$e2~Ȫ޹4?wPۦ7^/O]6*E2U^c27"w
i\F5'ZװI;hѰB|*cL5
kL>ЁIٔifd2b _drU!w*!./UlT&ߨ*.⾊Uq	qdܦo+nb3LO4cx[(A$]\ ⒄#U
hF
űתc0׮TE]g$3O:1Gϱ'tK?G><ǈ}
Hv.dY\{`
߇a&6 m	H?h?4>kp_"39Z.T:1
#m֫
*XiX$1kU|F_">#Af"L;	lv~_ҝxFo`Y8bh\8#p
ݯ4PKLM  
  PK    A             G   org/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyPairGeneratorSpi.classVWW
A&RRՆ(FqA,"*Ʈ&qfb[v_AmΩK?o}C49޽sw}oEX
/ZxxU]34C@U{zR` $dƀ _f[2y62cFT3Qf0KqA6ڧh2L	{YTg{xL@mԧXJ Fȋ Ν0S;^3&|]*e_#4hp3Ya;RF`wZDN7,6
;fDcjwB-ujhg*r<fq>%[}SōAkp4=_)i+V4Oꨪ؎΂5j:`=L,MAfer0F4GXTK!ƚ"Ɛl*
^c4^dgR3yyQ"5RuZ.L*ˍZc?݀ܖn;PwkiZZ,+?rIA@%J65ͳ̻B"T˸g*2t͜2y*+}x(~Y]MgK>6k(>y<"E/A*E< AkDFD$b"6	X?WRRcHi~rly{CM1m)͙u;*I_/eK8E
j̀L>xg$ʹ=<X,sb|%B{wqkswpSbUaf+K.MS8t޼36m0lq
d\v+tg1](\Y+c9elE8,}258"c>jb>2Q9pLƽ8!pR<&c):<)cOXA¡L_:Çrq0Cq&SZ%/Khv	|tbY	1"$npFBp IEj<9F]zI=zsՄEQ_gXE8GwG*;^#ma^kH
C3>P'$I H_-|68.pãiyhRhU% *\aUIcߺ[/l {"p6U`{b7)M\ׁJw
)GRhdޫ7M	Gwnq~!lc9~&TjthqYO&0P\}-p=PKZOstUq1^:m.O+I?DIMa'@d}ߦiJ$>΋/3r-.0]T+UBƏg秥1-2zo9w\M5PK1lW  
  PK
      A             *   org/bouncycastle/pqc/jcajce/provider/cmce/PK    A             @   org/bouncycastle/pqc/jcajce/provider/cmce/BCCMCEPrivateKey.classV[SF@$BMMQ!-M 5q -iy-I&qoiG:c@g|vܾݕϿ#R*Hgse΅h<CmН!v3՛%.[bt=2wK_9f,1.
|7|UX2RbCSӋBscKwĞB	(hefxF0(N/[0Ըˢ2G
LB1pUMa;Ђ(Tx$Zkii#dVh~-f+q@Ĺ0\X\M51=LYG7
=N朤CPm9XVinS&u3REk!{d]TrDM^'ӴE
5n;irQk6:e4'|:G!OoI9GO75Ǵ38MCW5JE5a{z䐵
=%,Ǒ.-phd?l-G-牯p3X&{E68ѲUtjma<=GMܥ٬ܦs\tڕ1	+$K𮄫ޓkKH%6I
ga(煼D&V0nyHC#G.<T?8o;r$Fz5z4
z(SeW2_6;asrRgڋ؀ީv>CXV"UHŧ-,)P0)P+j]ш2-(WP
*+Ÿ&L*hVL+x3
zH%*z<VpWa_b^'\M|EXqO\rŊAh2\d܁.S+8Ve׮F(kqtreKӚõI}%0JьQ	,
t)Q!$_"aJho`Ecf,!7Ǽ!Z@hlkw1TG^*$RǢl37F~Esl#?.MȟP%R+[(Ï^:\d j@|гml৭F^?zNPk"Rܾ
jFL?eX|+g[K2ƺX%tw5Re]|<AvUH"6
֐[6wX?SPK!ސM    PK    A             ?   org/bouncycastle/pqc/jcajce/provider/cmce/BCCMCEPublicKey.classU[WWaP."E
	eP	PT09`2f&HzytY}袯Q]sI#e}Ohb
\P[fM;4[ehOi%5"&sK-ًLZ#ELOmIT`hi[7٢()`P6=0ei5#)-f3ɶ1ݲV<K$ZzZi
[K91o97DCCjPc]M촡3twcz.o/8[eۮ2
55oPy=YR$ݲ'*
jc07u4nrKRw'r"Yنe5Fh9)#()7fәZff&4NJ*oi|MWkrsv)f3tR^ӑ2|Z֢;It7UM&/g=Ai}
9eRZL
N]{L6s9aFE1	z$ܔpKm	>𡄏$|,ᎄ$$/c7ޝ1auP~\ĕ`_!ϝi7f8xwʍr͢`綪HD\k$mv0<K]E6o*TW]u*d)Ed[wcxR~<V V%G\vDP
>
DAf\ǜnXTЉ/K
	Xqxሯe`ECtĺ1|#cY;HxM&/)XuĚ8}fmKp?
i->е,\{g|=#KFPQ|N24{zj0hОyZ]%]
r
^ f40o`{_Ga^/h%>K>,#g0AZCn/7&A |Dw`{!^躪zh .͡Ξ
Atbw߯
aپkðHXBrWWJQ.QjY5,TK!|"|\5ԩQ^NlG"{6Hb7l>%PK~  '  PK    A             B   org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$Base.classOMK@}kbU",}.Ɇt7&,O?J<7o7||~x!L6e|pQ^nßm)-j55֕Fn]x*y-E-tvq"6纭+Z0^x`7 Ap:ySsڔ7E{)F%QwgQ.o"I3r>9=<:%~PK5@   c  PK    A             G   org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$MCE348864.classAK@g41j]i,ҠE(AE(nvK?%F/ua,>? 8dCڕNt~p23%V7!;JsmLX+:a{7v<Y+>I.mK.?+f*W6cJ1pjBE#NOOcU.j.\5_20 @[<lDfՂi9M("YoG$lyJ=rrꧯha4.xPKT#  	  PK    A             G   org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$MCE460896.classQKAϨDh/S$V,>4^tdfWɟU/A~Tt5^j3@z'P4ɯFjdFzL>w;v<lΓ4765ņ45[Gg-w" ;IL,IZj7Ks+5etuSce#FN>42\75l{(zXP	@gQB5>(EOr:IE2b/c͏[Xh]m1T_lJ_ax; PKTu  	  PK    A             H   org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$MCE6688128.class_KAϨm,=^KL(Z|*iȺͮ^ }*/sp?? 4/{RhJ'd3yo=py֔dȐVnݩn $3,"<i,ɬ.<(ƔK$FZx9qvjhh!nbI!aCу'и]1@2T( Fel%Pmu8&F*M37//Jǯ~Ce*Īr?PPK;I     PK    A             H   org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$MCE6960119.class_KAϨm,=^&I)Z|*iȺͮ^ }*/sp?? 4/{RhJ'd3yo=py֔dȐVuhݩn $3,"<i,ɬ.<(ƔK$FZx9qvjhh!nbI!aCу'и]1@2T( Fel%Pmu8&F*M37//Jǯ~Ce*Īr?PPKqm     PK    A             H   org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$MCE8192128.class_KAϨm,=^M(Z|*iȺͮ^ }*/sp?? /{RhJ'd3yo=py֔dȐvh݉n $3,"<i,ɬ.<(ƔKN$FZx9qvjhh!nbI!aCу'и]1@2T( Fel%Pmu8&F*M37//Jǯ~Ce*Īr?PPK4=F     PK    A             =   org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi.classX	xTo22ya6GL !+!1MB$ Lfƙ7@{ZPjj[h%	%Ew{f[mkfM2Yw=3/?q*q
f*`R,RXE
(XLAj{ܤ1RPp_ߴ}ztCR,گkɄq-EcP0bFM!оH@D ՔW	ʯi⦕
ʮiQ7<Ck1Ǌ<nׄ"!clli޴kijvef-D2
OS{]$a	F;e͡X8گCٻq߿%:kiEsEl5-l:y
zc狵pW42{N9R߭E:ú?
->ZψXA0kq)dB()X=۵H{թ'x#]>!^Q7x
NR{^KaFzhk҈%N<h+EN@:|"MnMKm҈f2XM.sέ_¦كF\z0Ӫ3'@1K$Hī]ј

-N݌B(J;{fZu	rQ50HeEtXaWlMO$43LԱؗǴRj=':3cab:pXd1Z7w4˞j7̸+dg^mVqL.̌id5e4ڍ9#p'ԜI&CFoMEgj-iwÇҜ
CgiN\֦gka_=%ڞv}r/V̎gydR VfY`M035MZ}xkRX6=a.}8,,Rv5z,n({dVck^
UXkIfumBaaνO٨szf|ҼeuZ:2@M4U;{Ziv̦]v+Db,!;q72֞wQ<G\:%c!r,
周I/L@(AmoP6	GcS[inh01̅q{7xtlB<
6k#{䱌t5IK{©rU}}ݪ󳱪ny}C@yب]QF6چ'O~.#I#6Nz7
d*4Z/%?t U7%+tM/"#/f3
&#n*&b+?*VLzM U2Jvy/BIF!U@p'z0e
I{@;$vJ\%K5WK\#ZI\+q%4AN	]bD>DDD"*qD\"!aH$%K8(+qčoxě$,Rydi',2Hf9]X91Fɡ|[3+=A{j*sn=sQ]yT!௱3\|Hqj0ph:*.XUvgZbertZ7esف5v ,Y/ɕzRWL֑9d%ʲ%E`o$>]sXK$F!19"]5&z{f}ux_bdڔpm9p~drJwy%cN	n&A%ٵ1<^
`PETt	5R.|Z{-T`>X\b?XƢTbwx7(QqNhưVXlf6~a$/hS,ΪO3%oǗUT+**
Mm+m]
x,~,~,~܂=6Ã܎x<,^!!\b!Ffq'Y|ӽ,?=8<O,~끗U_=X<x"!Gw=x1QqX<I"߃~T+)d"|d'/Rf}/ͿyUļt:>
%Y{%Y:kb;RT# IPSR2-%R6-eRReh4Gb@̯<)'`㋶N3+㩨Ճ⒴dz>www1+1o1
k*½ijýllpMW/UcNY.9F.o$NY{n;M\mBEYn{P9)$OP6R\9(y8(B:QBͣ
B߀٬EṶgp_,ôG\s
O2HR46>ksS[\}3*%'҇O⡣(¡TxKo"cI<z*ѓB%wg%Map:Ed%e1?e#G0-=rR7c!2!-sWSh@ꔠ/E+Șᄶ+Brט)ć\{v`
 @ASXVف>,
yi	Lys|'$Jg3
uݒn.$Pެ#qΧ>!vcqI}$WYL{p}6R|F<GR{,9@^AA,] 5juڀkvTkEbWpJ\"6 `
H|<}JsaP
(>9(V[pO:RӭHMIEjp4k43M4
އE/_,G1q|6
/Ҩڧ	ju_횒~ـ_IS6(V@7S+`:Tӄ
(CP}
օ^̨n!q987Gk,ʜ$T܄n-nR/_n$p$ݤLeev=n$PKc    PK    A             A   org/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyFactorySpi.classVVG͢m#!` "aMe
A3H,''E8,<$ֆ"V_0hrٍ7ZhxP?ghaSНg=[ƾaZNjt/Ã-N%hڈ;'|`RI͈1thF\7E,6,=MyvV;Z&BTyѦv`h޵̃`-Kykrxkw\sB	Ŷ$
Ռiİ&K(Jfm=ozPv-p{OI+nK#UKЊ9iB1rsI\q,݈Sz"Y}9)Kw2VzWf~{OlAQӢx"eEHw rc9,|Tb|dд2ԌNB#kӔmTr_Bv㒱k2ȵGIiObbOUTMNZfZ)GOv@|-C֨)oU.*7͂j(|ΚaE3׷v|rsxC~G9A!a_:ž*W-ו_\[+(1X>r.3HrfC\sML+
.&+Ǵ<dxh]HI+#W!|sdJay*nxHA!XE|KЃ.z=xH»DυMnh>0I#6E%#ay|!/yބiR-W]quUIn(p[SOkSϨo8?l{4X
	1Ebu`5*CYNa<z
[W_@7gq/YDKR{(Pߒ.KzyiQ07m =wVuX&Z}DgahYY/T'8բI$.麚N;:qΏ$3{nk0gpE)88!v5OY6#wTʭVn-4|bwQ-)O1@&ކSPJ~&衲/(uhIwQ
` PKYV<  m  PK    A             C   org/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyGeneratorSpi.classVRFmфK$8msqHh@54I]ڴB,)Lp/'L~3e?GC4=+2gsssv[uC@둄`keBB(2!b;cQ]2æ决9۶\u$Ϻʹn{>I'F|M\@3G.,int>ej\
ёL*1n-Gw2jKP|ꨙ,%咣oRn5oYOuuSOF<4nU<r+:yr-GsS5Tǎ9 m׊b-'aZ}^	Yjb4{٨9w-vߵiU7x 
5svgtlʙZ^SxL5ٜUuM]x17+$AgZ-CɅɩJyLy$ďَ'&~gp,>z:9W7b㎣IuT3eeʙ>3p"C%>d
W1D(#!&DB;;I @Kk('\G7Ӥ>֊[n-@R*I/VKEpdm};#'y\((åțlu?JSJU+K".95R=ooYoO1i$6g(s1%vQŨ0>QP3B4!M
΂)hƧe\	1wrZ`FflNA#1E!$_O>яL_@BB|)cP"6	!|%*cOd;X>x DBM1iE,_*5LRmcAeO jDhV#ZCDWH~GF%3/Lͭ^ @EoI*^g,g|4E{'Bs{HEmh/pB-	<u.M{"<z|率;K6uPXB
}A-_Oİk]%iZӽE7e{ޒPz<H^l<dSM|=d1Lo')[_ӻ;,%hCqC_zEgnp״10n2\pk<MFDPK#  
  PK    A             G   org/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyPairGeneratorSpi.classW	WWaBk[mKQAZ0lN&t}W[ڊBPZ/8O9Є!rlPZW]Bj=lFM{ՙɴ֎x܈Ĉ̨!afȈf.ʹH(ddN-B+Px,-e"aSvГѭE}D<ZL2taFhW+
۰qC_Y+a^6yZ4mnBɈ_qیE%:a-3"\j]%M34Ao[:rK8]ln777FU iaZbW0'OF4tcYk
t;I&њSY&ϡ&Jƥ:|~R(ÐVu.ŞU9[ٷ٩f\jʭ&]j2SmreH1+%%խ$#]-bրn#d&lK#y֯&NF	{	uGMd:z3ۭE./=IT8 +ו]3{b&}iu&y*$[hqSҩ4]殐pNSeĉF;2=tTOi[feNJ;ΰZԡ#rn2a{Y2Δ1G\g8[92jd,$c22eJjX#cGBXEp$fMi~XQ6X+ZSa)Inշ^LDϮgb3a{ŐOM޻=kʀII&+k"h߄#(#GXsG/pVhKo۫ÉRںꈦ)9Vh\O	{_nY"b6Gr\'鲤U^\E+TтT\U(FyV<<
2ME-0\Pǰaa	C^ʠ!bY0UT1a
a DUd@!&{*Vp#M73p+m3pgH20\p=`zp0p0<
6qmx1^V_l+
y&[43
n ox);BYPG\?K>tؚ.Zoؠ)60MPH
 F1RANOTK)|C ·3tt!`gt+c.MaxB- ]GSgWXLEC8p`[SfzSp{Q}æ(KFp|Əq$@|_:#/j-Z)bKh=cg=$3/QQVF3)bHayq/Ǳ/Ʊsi-vR!O]8ӳe^l.p|!=H#;3$!`M3,}fD0o;`u0y{`t_PKY$5  $  PK
      A             /   org/bouncycastle/pqc/jcajce/provider/dilithium/PK    A             J   org/bouncycastle/pqc/jcajce/provider/dilithium/BCDilithiumPrivateKey.classViSG~kaP@<f%n$1fKfٙuf%G}߇SJRSRy{fvY`(nվ}{t?'gshKړ*-:%TF/u*ъ	:㺩/JN`Lrp1	e㖭Y	fyfHPh1kerj6g.?ç%e92\s%s&#Ԭn\ad̶},K8w;]Òw}q0`S+is"H,6Z ͲD(_z,w=㚿zqm򣆮y1o-"̙H_Ti	'KV"}]9WL	Y?9i3w]J*E޴TןwK{=D`gQy3S])ŲӦ5O0lKhNby;W`sWfO\K4NIdt糉B4=LRjtyW7JH1͵l*FxB7yi	[[Bj9ۚ3.	3J\vk_,^?D8C
+,=fT]jڠtI_bufS9itP.$sT_[+*$2q@AOʈh*)d$d<-MaGY< Wܑk.!%ўvq]Y(=!ҳ4YYNSI3MC@BχTC z+r6$0xOc%Nx݆.r}
U>]B7HHApDm/
}m=rkIi?v<I<{I
УV\fTPѣb#zUz\EBlG}T	U*j xgU9p^6؏a{pAE3F%GF!U SQQ[m@
!cB+8]K"%L(-ě
:qUAy]xK!+B8BL+8)/㺂4VpY!Lgp^}&iyNwy+}k]]elW|ЍJ49l+#rG;"^KZJ,	E?h
X\R
JR+@>'W8i;X|G2>Km.nQ9Y܊gq;Ff|?0
L_PY1hG76Z鿀fg<û޺e6#SZHC3-SGu2n GM>FmZW!fJݽx5 l.
9|2/+k)pdSuTtxS+x%$۾PP [(}ZᒚW8N<1#5dn\s-/9PKm    PK    A             I   org/bouncycastle/pqc/jcajce/provider/dilithium/BCDilithiumPublicKey.classV[SF	 &\zIMФ)-h0P$yY2LtԙNʲ1)3::;ߞ= ("ў/%TF{%TEZB!ӄgX7(AOG^= B`jb;P>g&atӶ8u3-	7Yfji랄@(xQY-
-KeN,q+:ZUQ3:^f>t~4t
 e-l'h:,cl9,KZXf{ܙq]B}JD$Jpem0Ͱsa[ڊVSV.z"GqT+3vFY+Zd;i.VRLf;+-5Z}&OO)ܺVγ@2]-c{#FlL9[Yly0=ۡVYٚ5"es7de	ɳ|sadSp2%<,~QBY>.5^Hx<8lRx#LEչl619OUKЉ\;IR=9:U($u2dtx^2^񒌛2^##&#.W+2n0qԹc_Gtg/!.Γ#='1DOk<Tp;>$B܂$
[YJs<'	X.~)l:dc ,AnFO-aŕv8g3yy	u*TDT4(D+*UtJ%T6q!*bJ
L⁊6̩yxX!<!XR0$A(xX.Īa,+HT0OT`}e晙w	~c4=`K&G7& T}wtIV߰mo,#z`6F%^,Rf	3IPgT% <`8AWo`x|Lh;U;?0JKى?KVWiAf%kb>F  DUWXA~¬T@;RF _!+4z|RM/ܑ&|=0^T||~Hv\A^P M-=x==@X	֏7IA*pmQOnN\dhPKf    PK    A             Q   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2.classOJAku}D!"U!D}vvY83"x(q"
P׷ $Ի)urG0Ur7j~; %\Rprɸ}6/L
7JvJIc	?;23)U*
:N>Xg\"eΐ[9ns<ws@`ݿ{ujX @eBЈT9VZlU 
}Uq'>|h6<.yPK     PK    A             U   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2_AES.classJ1ƿ]ś"kB%eͶI*cEPbZ"83/_^cj	RI{FLe.흜w'LBҤ+^rfl.(3CN(T(+o3N32.d*4]-_RBT埃>3;
b5kzu绣"Qa6%HA8TJ(g}\qYYm7-58|B̎W[? PKfS0    PK    A             Q   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3.classOJAku}D!ě"U!D}vvY83"x(q"
P׷ $Ի)urG0Ur7j~; %\Rprɸ}6/L
7JvJIc	?;23)U*
:N>Xg\"eΐ[9ns<ws@`ݿ{ujX @eBЈT9VZlU 
}Uq'>|h6<.yPK(7     PK    A             U   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3_AES.classJ1ƿ]ԛ"kB%eͶI*cEPbZ"83/_^cj	RI{FLe.흜w'LBҤ+^rfl.(3CN(T(+o3N32.d*4]-_RBT埃>3;
b5kzu绣"Qa6%HA8TJ(g}\qYYm7-58|B̎W[? PKj    PK    A             Q   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5.classOJAku}D!`N`VC QgYgDҋɢԋ`7TWC^ߞ_ cP֡Tݨ퀰Wks-J%VY"0L2)(ک+%%τW4 ;dcYq
SNf0=;Cn @#@3@˻9uM#Fa Q6	B#.RIFZKZiW-|*\VŁ#VZCPKQJd     PK    A             U   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5_AES.classJ1ƿ]`OЮbl6j5&Ciԋ|d{{yp]j=&J%A3wr~ߝ0a
}Kbxə̨M8G$SB;|88˸xtKQ^0n]SI0̈7=<y;GW[םNh/|{ D>< WԢ"P)#;reeYݴ@	gl>~2;/^m PKVB    PK    A             K   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi.classViWe~&	a*ְaBX-h-EaL:3aq~
ǯ(R($Ͻo z*}Z%	(
	,FxËQ>:"JJTkX@Yaq5V`k뚾5F3uEUdKյFuIub	Iәbbn_*'!9f1RU5-2?X=>/fZR5fM8- fdB@Ui̠ѬnP9If9/ɬlo;)zQժ9jS)6ijMYRu)634o}Öd-)9q%qPd4dkLdڑbڦR+^Q֣2>Q.g WKEgWr-XN_g]6벹gfU߮IiYhʎ"VIuIˊY^cK0͢2?fHkk*uN- 
2~;jwhWeQr1{RV,ݠN%NsT6mS4:?zN5SϯT7"ڻ{g"D<#Y".h&]e"$"Dt+j>iMx]̇{k-'IǄ-wԻpHlS)BႪP
$u8bJS%C鴔#c$vX*s.ò>ػC#2NTrA"M^;Rh"Ws?
ъTu9p AǍ  j0rK^0a>nqxk8AGp pP9`-/X e6@RDJ9JO:&ps]93F9=nr/t1^Avos"n
9=;hJb[KF%H|oHRG2!πEs,BdQBme5x$A)m`B=l?m}KQ-j,}o /c'[D	4xwQ	vzQz|3%Cۀ;N-ļmBtoyPR)8NF5ڭ94~OqQnA9YM`!{OKpMq񆋷\f?i2~/N5_NkPKV    PK    A             W   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyPairGeneratorSpi$Base2.classJ1O78WH&P)mHE*c:i)cFpPb:`Wل=7~~|~)A՞nd"-?-5gZڜ>qûx\_HT	AW}QYsΌMrV,6t?7bͅ7B""VK9zd(z UzJ-λ̈	mpړ eJm=>		*=5n둹a/f3츒"n
Yx~wNw^w:qwqU/PKjv&  \  PK    A             W   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyPairGeneratorSpi$Base3.classJ1O78WH&SJT
4t2L'$Sҍt	{npSr=!D[*ciC;[2jϴ9}R㌇wL4߿rZ3.8:OZcYlMn4+!nDEYr*&P#&@$B38[wU5A=_Z'@{>|TTzj*p#s<$^̌gq%E.:vY@8|+4*t_PKk&  \  PK    A             W   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyPairGeneratorSpi$Base5.classJ1O7qM6v"ЦL'$Sҍt	{npSr5&D[ S3diisFJt%<Xt)yj*bChsC\X
`#dٌ;RFBoD>dRE"4JRIEyPPP5A
Nk0D	>|OP-NPHG;|H\ݘ#ΰJV]*tF;>pVi8UyU_PKdf&  \  PK    A             Q   org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyPairGeneratorSpi.classWWG1^D޸kEX.
YufEsߗc5wb(ʡ$I?O{K,F>?z
,,,<(SjMNvEUj_eUs  M(3aV4êa=6Mv-ڵ.y>yQĠA1.f3"Nf4ᨢ$7f*6#E3udG˻fK@^a&d
M,
>MLlbqY䍦hR|thF7uۼ	"LCVbUB^f]̰wUY٣JM!bLG5V:3P{UPK7$´=I!QښTZ%"`֨/d=yCqCV;YSa3o
G
GU,[g~aE"L5Ei٭Be
Y,gѡ**sL"8;5MOT"#ܰP@r).*U?)΂(]͔ӔVMUwkTIl4	L&D[e5E4#۲rb ;I8-:|iJI;YsQdF>]*Dt49G g葢Bi^#wbab$CDDxE,DRD,RDU"|"EQ"b"NzDlI7j;RJOKpI)	n$⬞Y/ducXTt}k-ZL}%S])|)wdS8n.%sޢ8zͧ7Mh4Qb['Y9+VҚɷ0-'͒SE4<7g48ǿ9t4^/t5(
Ng(Oc>R'tmTSN$2vv3pKX˸2ဌ-xHfȘ2d<,c8rqqL9xDFxTv"Q EF>T&c9qh1Rtx<tʘAΡ"2p68(l4`q9D9ts8f$$vY	exr>{*xoWكW8*/J[>[8,/IkD-ђ$ۏ79n<
л~d_%DF FoBϽ\e%b4d+j'Va1-WAYgR(GtZJRN(B)$K} 
eq7q)Џs2~5@3-LP`C4-zB'L\9I!ԕ>\8p?U2hDs?.Ml- x|ދ(oFEg _AN |(L6A\틎ӿ7;EBBpFs(UTPcWແӘAs/P~Ѕ#e(xܵ=AiϠ;Ջ>S4"p>Lex ?GP[7 me QR2˃fԱLx"܉SNl(N]Bovև8O$ɧ䣘$^+.$ҽTR7Q{}^GPK$S[}    PK    A             F   org/bouncycastle/pqc/jcajce/provider/dilithium/SignatureSpi$Base.classOJA}w<5vEb]$g#,׽%n8o=!ePQ(Xe{0Ϸ 8!$^Ƅ)ajR<خQk%}hPnY{QڄG=_57F;+%W/ςszu$C?v{f2^"rsd8 %VL]沖k3)qS$?!cG|PK#     PK    A             G   org/bouncycastle/pqc/jcajce/provider/dilithium/SignatureSpi$Base2.classPJ@=o@q)v#
dS$L
G7 ?J.\΅s=^	Fs@]D6d,̓-B'U>>LX#f&-HG[X4I_#Fܶ*H_\~&	Wk:LлY?X3?h|(
rm.<n	ݘi-4NiGJK<kJw3`w#B| PK'    PK    A             G   org/bouncycastle/pqc/jcajce/provider/dilithium/SignatureSpi$Base3.classPJ@=o,.RFp!
.PI~n
-~8\j܁{ν+ʍP4mX[N}'|ʙ6Gp5LZ6,"}wL0BiB{U&B?
FmU:P
3LPu-U5w~(!ᩱg.(Qb\=x!T*4:1ZhbNlxh'֔,pf{_G=˅ PK3HB    PK    A             G   org/bouncycastle/pqc/jcajce/provider/dilithium/SignatureSpi$Base5.classRJ1=kt+Au3)B
1
mt2&bMALUk͹sr qHT	S'p{"f QtHל%J#;	4¾`txlR{Dl¨6!35LAj.[4A}QG\
2*9=~	<j; h,>iRkr
+<UnMuTXIr.]&A~\K"[H+ZscZJݙȾ@,Pb[S<Ϯ[tځ]._PKL6C    PK    A             A   org/bouncycastle/pqc/jcajce/provider/dilithium/SignatureSpi.classWwTDQ
t	$:NBi`7',ȊԕTINvffʾ,j9>4/h/wweߵjiAB@S瀀PPY%=43gH'U ܩK@렞z(*YB.:4#-;Qla3zpif3eLHp
eڮFJ*1+Zy;wAv+r٤V[Y7{9Ӧ(*Cjf6$
U5мMq|ʹ8Jd"m
N)eZf<1j{l[$Y7ښB\󊑋P5MNu#'`DAg9E+Jf-Ъ`{(ʙxҘVzbY]3R*IrY@R7\|,ꌪ8n^+qCĖ3)MuW%IS@Bg,׌a.`BWxEN5):+:gIwٹN{]
I
6R)9S ?l}+`*%q(Jg,]%X_P=K"`l[a\=^VU5AWmhpt:s4&Iӎ4Ok犀ל$lxYX0q#b9D,q5#U<Zb!%X5WF׊("*GDLD>"qD(b""(`]jѱC@Wj?m	fϛ VFS<
-<ړ?=yW|U{KS]9{/>{-0=J
/r.ā8>PmT@Ar[.'wamW&ŶEzsgʶ]_~kS;6Ē}1O+pHv-cqюf;tC Ze\6^2\OF$#d=Cq&xɸ
2!䰌˸GYj0dűVa2)00LN030y@^<onC>3xT­>LY	#W	w~&2yBB3yR(F8$1	tn}Cop{ |w94@;Y*OUI8mg\E=VQxJyCe\S<N".N;t8K(Ht:ގbhs޳x1&g v`OVMx|ȴrt
]c?b$bt[|![)\ŭGpvxnyXֹ0}~ffI"Nj&KxDGjҽZC"?vTƒ@4V8cE|Z>f?B!g^MgVb#/uՄO	bdJx:;#6
FJDFpв5h	|_Ir^ڶroWw/իCAm`"y_f+%s5R5CJU	) hg #S<[l߫ϤY$;ƹWHp:@SU|Mn|м 3hŝĿ$~񯈏PK|n  C  PK
      A             ,   org/bouncycastle/pqc/jcajce/provider/falcon/PK    A             D   org/bouncycastle/pqc/jcajce/provider/falcon/BCFalconPrivateKey.classVSW
׬àx@h]5j`\+1cvٙuf%J>5`Q*e>*T*ffVm}7	$4ܔp鈀p.]||C	MGiC34 <-.ēp-L0-͙L1Ke 9e&dE7
dKezAPRYVw.,586*Z2᩹͐j(fJ3&Ȳ	04n&LyBu:]9{y1diӞ+	c$׈cZiF+i0loĆ(ҳ\M3wWuT+Qz~tc1&='sPۧ4if,1}SQ3fs^F&$ذ7u
\ΌX\g=`RPY#U],piMHNQjFK,sMctH6s])L1cLWL#y8qB]~aYGacZtXJS
RԘf8SToi-Z9 Z`Z6N4
80{zHͅ,6C̦z&~Eo+*mҘ>BG5;8K=ÙjřMSyc(DT8$qE񄈰&Q"qTDLS"ZDqnk/):-I!3)jB[ż@auᦾ
M;Ż\<pt5L>	^	>\Z@׿D SPOܔڌA# )\k(Q^IHL+g4 H?@cLᵯSocXeLPl6.WvTʐ/c+dz,TF
'F4\6TȨ(i\ц#2Ⲍx\ExEF=^\&1ɨ"cR[qN&8p
S\p8$<MB'Nސ[BiN%
	xS" ,'K8xMy%NLN2@2V7'3,VUI)YUD/9$h3BTg1˳HYWw$#ƭ$UwiTF~$*,߼	]&I#<E|D2 :]g.<JqV4Gq'l>YGKasNᒯ4F#l.z. |L%|?W:*-wѼT=:CW9L
E<Kqn7>N>p>bgg	_]w.N>@+"&g!6_V1%ل
>]W|0ox.{eFb%VCA6A'6yH>\Q$ց3DZWL]{ PKb${  #  PK    A             C   org/bouncycastle/pqc/jcajce/provider/falcon/BCFalconPublicKey.classVYSV& h%56B!)8КIE,I&--]C@x30}ЧGuz,c+P{r" ~"<袄P`VU0dvXI3H&[J(fYv]OIf600aĺ͙		2;Ybfe뮄&LHk{Vm+5RdS]nīB1:NlfH@\( [vZMe%,Ytk.\PWѭ3g=F^)"S.o-%-->3󴛴L	m9nq3q]Jݣl&<5-f0Ǚ3Q`Kfk
95}6ONOFzSt{'Z*3tƽ]+P,48]˦f
kI2;n%;K1m[[sAJ-&qsk%j٨mJ`1ɫ~++v58N2c2OmOsZ4c̡}z2$2dtxY+2^2^##,#"W2ndOc6!	#S@Gh#4$eŀ9͡Q!-Ro8*Cy
P󳒭uvRtN rp=f`Iǂ/3BoJXBX6.PWD.*MUb\TT\E BE*UԣJEd0T)Vq3*cVT*ڰU4Q
x,ȇ,)YQp+²al()xOD.ȺQ*Pp
 L~sbw,ۯne)~Vn;|T}w+F"1YVJu]:V%n8_}If$ϳ  I;>Z
G}\]>99!\,1飅n9ݑϨ؋Oh#:>N/=Gf|SsY&_}f4*Z_ynт)#*ÿhb38'ôZG )9³rHM}ɷ]$,_ü/lb._v|QOS3M1nO{9U*
mm~=H͎). PK`    PK    A             P   org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon1024.classOMK@}֦I@ЊFz((TE^eʆ[wU/?Jܤ^73xo/ &hSP*Ytg,ZFGmh/9E.(*	M	^S
9X=gwя2./Q
1^hSN{-+N:&w~ D] b
#p0qά2Q
W93-&PKQ     PK    A             O   org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon512.classOMK@}֦? xhEX"((E^eʆ[wW!?K/?JܦA30ofx_^bLRIwBMYŵ&\+^sf]%(*9u^
B('RKp>>5A:jB#Ɲ6x&	n]:te*h/$FQC#BIu!¯L)aҊY+,vz܈V}@o	X{lyOm  PK+[B     PK    A             E   org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi.classVmSF~F` iIBCR))@@kH6(#/
I=LGu'	cS{{>[Ͽ~`
?+sA񉈫ZE
s }WBi-o(Nb.m{cTmGSG3[zX(r.)(B33Ƿ*=H)Ayf52gD. 6-Űuaбi<MLN	ؤsyf0O5晳+M.c隽h<լV,󙀞]e_5SN/gV]1sĒv,'cAc3hiNIN(zHW&צzRzϭZkM'fqފwi9:Ol\\riY4Ԓ؎d6brVK]:3f|\wUeW%25m*1nmߋ}7Yh[QTǴ@aȳy+.w
:׾">qY1(bH51"bTĘBz#N-jƖ |=Y(':jx)=e~,ѹ:oe$ڐ57ѳ,G+I'
zWr>հͲ>ni>k:3@q&{ԢKtf9TS?:cABnKQB?\I.!!K%w,s*wHJ.k!|:[cÈ!E'\|$'V\Ls
c߅1m.gAn}
,@wbbdA9hA[Fδ{&<1H˜2zI|tɕEM18
j_7#"h}d瞿=X'+6yH`ج }
;$,{ޛWaS
b2XOC9!hv2vւZ<w Z\>md"wVaoaQZd&ZvBԆ.3I<
f2T-1X<f#8.Z4%7/NU7*N!xPK`H  
  PK    A             V   org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyPairGeneratorSpi$Falcon1024.classOJANb6Y!2>/AE *d	:3
Yz<~8D~UM;	^Lh)1{saހo1Z;KV<&lYxfHvZ[~/p'k*Tњ'57BWLji7P_l.ڄ	q&
tcDHtHhD\;'6hQוm3~+1k&WU_PKJ=H     PK    A             U   org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyPairGeneratorSpi$Falcon512.classOJANb6? xH>K8e:Ό, ?J2و x
vC?誦1	V{DwVL}98$̳gO	[ް]m-^ZG85|"hTMŐ+ۗZZ_-.OZuBj	gR(EI
VcDH4FXt^ƝrRfvhb
/ߘPM3PK
8     PK    A             K   org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyPairGeneratorSpi.classW_W.7,K*ZxC#VQHEp<=첬aa
/{xV[{4('i?9HBZy̼͛ysjӉeNq gjsXP45môAE'tKRus2LlE&BfrXxTHC2ARbEYG6n V[6q(+bHB:$ Ł'F
5AI+aCC.[z4U[]2NIelv4UTS	I/Q!
*vҐ$i4/i
?4ԀNUtVcHz:F{dְ9jAh7 Iq*$Ҍ=HY+}RC$^/P]A¹qKJ
P<	tyXLKS<1sx<5T٫#ִ=t)Ɛ*+fWMːf
_e%&p5E.xLkVșXԲpn36⎹lo?iX|F`Hi{2)a|CT9t=;Ѯ~?Uڭz&&rz⦇p
,Zv$<u`RfFY_bx%ZX/cKCn<(<VXc5<(Qͣz<6ȣ&yPTRRr7K@i皔KIJ	e[3fI8|WD{O"[t.*+1.K aJeU< ӿt eӂK 3V31$mLn`rdfТm%
Q2O:f4x5d*ei	+2ӟYC,>ݤOڤtMHV|6[OW"+k[)""W6DlA"x O(`datfDxa<'ElgS"3"
H"GFx2(Q5edD3"@e
02(QhA\#HcXqFN؁㔀fyFe=nNhd3/ٍWyU@^o؋4fV&
dLo2VIF`.zBo" 7buZ^M2M,Ikԣ)XACkE"(?J=R쑒ja<89cA3`+wa0q|7n(θQ\n+&W851<"0	Q`GwQv&d4Rd94^ompj*oF.!ZgKH8ﾉPSM9
c2E;E1|-p%/Ol:U&òHYLthCQϣ/-E}HPc'@#\t^B{>Rx8_KhҴOǰ)4g.1z4?\Eq;aI9[Gf	Zif"huZ+%/'ˁcuaNjtRQE8}}FQٜm·QN2nUqiPKIWR  S  PK    A             C   org/bouncycastle/pqc/jcajce/provider/falcon/SignatureSpi$Base.class1KA;s9vEfB.\7kp잻@~U@gltޛ
`B/XS+6VuEvYY1;ܬ_kţw[FH!L^ɠ3$Za
PvyB3f%[qo9<-e:
'E܍vyDPޑ>Qq;g#y7PK0M   {  PK    A             I   org/bouncycastle/pqc/jcajce/provider/falcon/SignatureSpi$Falcon1024.classJ1ƙֻWMT*nP(ƒ2NMALGqL$p9_o :%T[>~c]"&?>:N3T4OƒK;M2Ë$ۭIeʦ0XYHtGk@_4D6hBX=(e1,1D.AR U*\V<,cՇkZh5$ױF"MU}4\4_ve[^&wxw3lb}͗SyoPKCs  H  PK    A             H   org/bouncycastle/pqc/jcajce/provider/falcon/SignatureSpi$Falcon512.classJ1֎G݅+E&x)P(ƒ2NL*tSP|(1QW.$pN˟;j't9=X}xD86v8)2+>I.$uA~9aţrf>7DYHGk@_4[K5,_|P  Kts~)5ՏPEe9"VB4V	(BW]%~`7Y2a'E~Wfoa8xGx;+֦xn{esx7PK2s  E  PK    A             >   org/bouncycastle/pqc/jcajce/provider/falcon/SignatureSpi.classVw	-[N0a1aH &%$cI6 !m# 3HBmҒ6]7-LZ/=Wc/=
[bX@SPDY%5GN{hab	Oī@_7t -
'G&'hXf̒ɬ+S3ҺiaVNkf?&H7
7?l}.WRLU)nNֲLT) xVesԚU\-Т*Gfh6AXKq6cӚ;I<Mfi;j,NḊȇ#5Q$i3AnR68Oz%xՆm[QrmMszbcTruSJ@HP)3;˒LZ!Y0C:(sdYs8;UI*r^BRa6f،5Ԝ8nF)1;kǞX*;3n騄1g
ivr؈nR;P	^
jy5Puc<H:5甌jC<>8
\
5Ue^m.TƢj|$8A{Cʅg%,}GWn+u
Q9$ Z5&H30[Un&i5G9rfdpNOj6<ga;A]4Z]8$8J=%e[8eg9|J˅-qȢk}l/R6DoZyl>Ks]6E!N""Dq"Eq!D@n[^^t'k&?`$ޕ#tE{pһPuK7Y{uDjB*'ﮓU+v,MޕR))Ec]f9^)Srl}2()-{Gjכ}q&K2p]5&|tyͳLFسL-7[h˥Zl6w };5e܃21hID2A[+YFeletG2L29?JqfeldN}q3N4ĐfĕpY&L11Qy	1ƍv %<ī$q<#ap0~gL0'ZBW)o$o 0FזekJ9|*Q9aPF2nuUSu2y\BX*ǩVr	Ӂ4|NHtG;މ.t_ŅhU</ r@ko7Vz:U.D u	+>
+O˸}|E;xNyXxZߑ~g3߇1.as&x)<D?ԥʓ[tBcHufZb@o/FZ
<4?O!Oܟ'>c]ao+D^[j
Uq;lhBOQ]}֫JguI?5h"DLڪ|߈uĹ?[x:ФKyk<^oѠ3<>~yriZZHOX*UGTUƻ Ʒ-0O6?R:>LZӝ
xZ['+HWn"QІcĿ"?PK>  V  PK
      A             +   org/bouncycastle/pqc/jcajce/provider/frodo/PK    A             B   org/bouncycastle/pqc/jcajce/provider/frodo/BCFrodoPrivateKey.classV[WWNL7"!NV%m4\4ar83Aӛ}UՇ.}fC@Ҭ5/}yCg]m/C)bJ*i!zŴLoLӎMRߚ̞A1^dP9R.C[s5Pe͉e^)zw-1uʨhlٱK$&yVJrYJ)˰s"G\h1m;%NX]4O[-#D!>%Rh
O8ٲ0-j*If+P_i鹩({m1餭rzTmO"dMYT\vϖf*W*MU*:Ð%0wйkG7mǆn8ղg˲t'+2ט^gwxf47<ۡF[QZp~QvU3'0dCvw4ݱmQ~RëTh9\թ;D=pL^\RKߠu:MI
SpJ
>P

$$+HLΎd7puޛO3;1ht?4G_|(x.`|V7?h!| V3\5Åfo;pѵz- Hw"{s1Zv0nDӨϒIǷM&D-mJ4Ôbh+)C	D5tC1⦆wp3084EV~Ї{zЉK񹊋x *.aQoT\*KRWUK8r*aYuP
C$*nK)7w'm*xBkv5';q/KEA06c*~`\ւeahm?DhT`'/Q=,YB5yFO;yu}2K$%Dr1^ފ?2JQm4N&~CGZo~E5R3?PX7~m'QPid4v%6[wAdBS"L$4%Ax|/2-zl4dc"uvs#MhD^W?Ccoh 9B}iXd#zqa&1w%Q|B,>C	vSX)XuXPK 
  ]  PK    A             A   org/bouncycastle/pqc/jcajce/provider/frodo/BCFrodoPublicKey.classVYSVH 	!n16`!,,
	"_9d$>@gZC_:=Z;$0e.;w0hiF+CC?xCS|}۔hCtL7uwT_|l-fJ`hl]Lb|T0t)3KN:2"K\̢`ں+*Qyv(Jֶ
 p'ELS2"Cbֲl[i2ZhEOe஝fp\C[|;`\-58[&Cwe7H?eKK<PŒ[+
ni;΂EULcH.Z(G3S7ȃVָB9ЩOdƢ].^GjS	Um|fr͵l*k6;2e3k<	U7),ׄ$8zEѶROp,k:AXM6/ob]uyaX!j[^R9HMEM	$ܖ'c	HTg>pGB\B<}SeORz_[7G\O7?yzkݐ̑xmg_?y;p簫K:~wpvgRzԞ>|V'r"'߂/C*^cc[VЌFD' 
U0t#s
>3]XTpK
.WX1X%V<.^xUO(ccAcpI&^$6dL'G1xۦ-uWQ||my^|7>r <1MߨW<k<.BxDh_5̑-5rG!ZI$`b13a	@dW45&/%11>`8۰'㻊H4!UD#wR!rjRB ^힇X>4!O]=
6/u\G*cXPy)HW!#5y@|Ie'qo>1pslIb&4O̲>ȝ>PKe3a  
  PK    A             D   org/bouncycastle/pqc/jcajce/provider/frodo/FrodoCipherSpi$Base.classJ@ƿnV| Ad\EA/ӱRgLIPbڃ`B%!_H> c6A+6]2-i%ւ{%;
Y'뺰T/oR5º?ȍo^%$ήuawRkOnWF"pp-LiS\.V	lǘ"a{!9!3$({q^#EG!0OR{Bq@yL廘PKI   h  PK    A             ?   org/bouncycastle/pqc/jcajce/provider/frodo/FrodoCipherSpi.classX	xTo22y0@ ,ĵj@,GB@Vy$7 Z@-u.MZ`Z]V^bf$`|{={swkp`Y
f+U0_')Xd(XQAm
Kli?fDZ(M
uZBM=!Ex"M3uV}ВߤSI=KSG>xjS4*)SHin7.XRW;	0溹eB@z.},|GĽ,bDrEWuudsŝ:5Èd*%L@,6ow7RѨ_7B0uH_OmӢ|ordW #_Z+ZX:-kP7_Eb?C3a:Br׌pT!PTU Y5I3t/bVF-*ǫt#m
Ff3@dFA[`f6eSf!7<I
PPT{`'3	%qpv[n:7Zs3̠Jج>$Eē(u	ʚ>r"1BV75ɾ=A#*!MmwVGNiO=8UITBc6)'DQOHtgc34,ПEۦE)'r&d	-7	Q	]G*
[3I(be͒SeuʊEs_R0ϑYTRVdOĂPfO9'oqd];
,--윃jDGf&(eNumי'r֑ڼ9<3;RX5ﵔv]Vj1ުҩSCd|V
vuplh%6RFh0%ͨAjzb[$'}Zi8bú
J&\y#ų4L9IX%>ٖ.!@k%ЯZS EB6'bXJeX⸴VrOĶE8u:kK߀ΰ=mK7,ú;^*JHK#0HXHhT3H"
eUhm̘߹AYJJOCa^Vȹ(OZ
YY N9pݱw,0$KX'qzK$.(^$.x$R.YO_""U"*1 aH$WI$$}owᅳJ[w
Iu9"5>1
2p1>?qq)f7s]G3'
MmmcwMu%'P8{Z/)u.+.4+xΩȶ1*gc㰐nR,b9/2o*@a:1P?U'dH:Z2Y1Y
l)uErp4`.-oy%џ'5%r8\B9]ΓlpdP)թc1<YL&|H9_E؄GT\X:~T&oOEQrQц*v04Tbb2Ld)=4x+Y&Sь*.T\U!1#*`TE'8c؇/2LƙaI<|ɓL~Nď<»Xx7ݬ{{܆xp;݉LO0!e&dʃ{S<{~ڃq&b]>0mncUx/kL^LZlN0涪#ںFo3C# 7mzeVKaVKb8Π2q"j_FijjSiQOA(pnFzX~7S3}9^ޞQoqc؛QWu+m?6=lmf(xht9hV鹳pbk΀POpބz[z5=ڧQmO3g&G<*f3 hh!	MVyPAqiw\f*箬]jݖ14bO̦1x{#|ǩ{aW:
@c#|\(݇yM-Gp'wڈCxv?aw&Ud%m<mz !K4tLYÍ2i2k<eAJ7i7(<`!aI;WIմV0~}" ZaN-ƹ({n}B&4`7H\8gƴ1\q'ٖa^<nL&ʷ=70]XWhVG<|xP!7BQTs
ǅB,}ϰPz FÝlA\._!qB99cnjg
fۥsdO>$\>@d"5ÎH{<oz=40kF>v(%
λ~ݞ82q=`w
#\ICvڰhȁ͐*`䯅I|ڕ1Kp(>ueW kU`t|RB"׳\NM
UhR Ex/;rRfc;A>TPK\ 
    PK    A             C   org/bouncycastle/pqc/jcajce/provider/frodo/FrodoKeyFactorySpi.classVVG͢a@6@lC		`6$aMe
A3H,''E8,<$ֆX:KխU=`߻F7hq]C14Cbʆ\3;O}<4zLT}WWG7[J&Mb+N&1ܩ%:ĥ$ch׌nhYmXz:Z!O$t(vL0xMK1AIмk-KyKr
m3H47T3&,*vж$Z֞VdݔT-)C+	ň%esiıt#J鉘f14,KFZI1^uELnUEuL3_Ԋt!-sU\
ʍpda
Jӊ;fP3b;	MVlcDFF(m)ڨj˅%cdkchq9T'\Ş쩚̴NySv@|-æ֨)o3U./*7T1SDΛa
̋{`xr
mEy3_m8spr񀣏!#?G?GcccCW*~βJ!nUKťk]Q%9磗\Z*9r9t
'z_x__~dZes2]Vz$$˕7Hfk&w0
sdJay*nx7H!"0>y: F/DX-{66DD
%!"s|!aQ	B1)F.lfK#.Fx!a'ؑ0m	sLB_&<Ʀh5a
$Lw=ZKoz#6GE_Um^2 SӮfm3Oď..
VupeXx+"uv`S!gBguWݙEhŮ -n
wuѴ#111
6
?F/Y9ZV9	Ntt:ӆv|RB=\Q!)NH;'<?/i͓rUEr+[Aaw;X.&uw	?Ckd%?P8l4p
$W@E{	S	PKs   s  PK    A             E   org/bouncycastle/pqc/jcajce/provider/frodo/FrodoKeyGeneratorSpi.classVkWG~$,KUT,%VC7
Uj4]6C\쮛
^~H=S~O鏨}g77Lwf3̾ tv`CB{±3"3b.Fh0,Ûp]3l+j^PtxbtkϵKp+gX&D_䤓<e#WK覙^.˱\%|5P45#(ƴ]{_\hW5W-W]cGWkNZV1lh[jjVN7M̴'pl	*{ܵjTj{^$h%uL#[wBEȶ%ǳUBWvӎ!w9oa`@$֭F+ziɳ
0z6y)**:u*Aݜf-k{qܧ=v8"6tmCul-jqvyrkm%^JXcݵ:'d(v^&ZFU9ed[	'h^S~2=T]W+3jVT6-3pC?igg,Ç3%-&?%ax 7/x'(XlpP=װr>k֊xckK5Qm+#k466D~'+%{U8{-hfp+Ut_x
:'
9$L C=	^g?v~Dn*t|^ x{L)#`RaL)@XA=(8!veZq]A/n1XTp˝HaE[BH3B\Bŧ2.!#2FQ<q
x(c_W2Zv
n}\\Fko>w9w5AR$6A %H$X!
(	mG?A\']gz2_|"|Ox9ֆ8zƥП,GZ:]\Ƚ%|v[ lPK@
nV|F;?#'aK$v1ZrbhVvq5K_A>0h-dO$<šddLO[E_9;ȿ8^JbxN2\-H.F¿`//`i\pW0cW.BbIJl_PK^  
  PK    A             I   org/bouncycastle/pqc/jcajce/provider/frodo/FrodoKeyPairGeneratorSpi.classVi[W~m0T.*Zb P
!a 	}ܗnvF!(bۧ?ӧOϹ
6{g9N
 ͆Ba
mX`B̆$d`kp{
amn5=	Aj~]Cۯ՚P(	jIZuS¼$Pcq\Y&IQH)$xǄR77AK/S&YG~,}>خ&Q-	2a#،
	v|V!Yi	w{
pnuwh6a'5B:LB?@ӞR]t3חJX֧
h8Z^ݣyMOا-Gz2~:Re~yLmZ)vBa
:Z#7z=Z$lg$|8R(
a:PN-(pR&֎qt~[Y^6VQ&n2;E:uspc,S#i}nϭ\雷
iz	Q*S?qƨ+A
UU3LV?S>A'Z4vqCFA30`PżlnJb̧7HCB,34$8H!D4
>`[0= yfA(#٤ۨecvq8_E,\]JdTX-!RF522eQ#cZu2˨ A	KZokUOVkҽ$ɦwE,\$l3M6U%ye孩O&痥KhB=#KZS`N1wWMi4U8X4Db&$B7EK$<HҮ>m՗R'ʙR*$:'69%}SLmR&589qYgsiG$pimfT`+pFT؀GTţ*bEfXP...%PhbPnKXC*>،~𪸗a|~V	0V	f>:paO2<1Xa#8ax9^P(؆^fCͼтlVى7TІW{
ݼ1`/Ro+
zI0|Bx=aS!Xii~Ѻ:bPTUKT01RHE%̃ĕ E+;i؋(.GEtGpuC8{YKx =1dM2-(	"KSW৶ܷ߱VEpnfaQ*ŻøfϡxQ2f(Q2ۆa|7oeW|d͟뭋-sHLG,o	p\|74⾈".EwKE="yDy=pe{vCg(Z,\^WEף1)v9l(/A.(v<Vk~^eGpjrUng&Wy\t*/D|)$$t+!9 LH'H>X¿PKIm  |  PK
      A             )   org/bouncycastle/pqc/jcajce/provider/hqc/PK    A             >   org/bouncycastle/pqc/jcajce/provider/hqc/BCHQCPrivateKey.classV[SG0( .E1]fݙefGRCGr²ݧsT4ҙ,CYs~<2?*%i6PqG7tg=h<yWrKxAc9GU%#FEOYJ&C]J,\y,xjraEhC}{jUV7 9\eI8%pwY^)\h1bZNi0lZϐDK}-<p
QP,s{9N8s+|&&_h"дIٜtJyd)l6XRin&U3REk d]TrDM^#Ӵr5n;irV<k5Mլ|1e>q$Bb˞,s.mkiQ)0r*׵MA)-rMng}᳖8W"Cq6>&k9d3hY<O\oSWdNKUkKYf&qcdsu+cd	$Ih!}	%| C	W$\)!*!&K5LNt'p0dB"cG^~	vP|<DCs!ύZ;t]\	^aN6<	In7
~\S+Ü|/TN*CTp0_7ugK׊ɠ0B+?ܼIDIOC#
	
κ(SЂrըP⑂*h¸L(hŤ0O\*SgY+d2+dƼ;x抔+e܅&c
`Q=2>ŪL^BȈcE}|劯ec^{&nz,Oh-^I:\['|!-AnD)*%Fb\hThOc/iu0%4ѷ7?c	3I;!Ǽ!{in
7HGc`{ώ0drJiͱG@fϻa?nnxI*ZiB|Whd4VGw
~"Ps :^la}?m7z>Gw!fJ7ئ硖TMKު"}|!m6r׉]B0`#`23oxk}UA^"كD`XCfXtnaI?PKڧ;    PK    A             =   org/bouncycastle/pqc/jcajce/provider/hqc/BCHQCPublicKey.classU[WWNr(*hHЁUP@
"ar03AKE@xkC}!@@p5ke;?0Pr6ܳ2P^w6%i1"뻃}bbs
)-E!Y\F#E\O-IŜB`h^[o٢()`P˥
­dZN蚑IʀdHn\|+?M'-=w4sw-̅*kZQ"ȡ-71Ħ&
v:wzh/:+ʛ2q˚5| 'ݲV$*Jjc0*yJPtjjs̢Y*؆Fgc;~?DaiE;;ckaR9#VTټzmYg5ft+5a9)?
_0LRn2O*η5۵c6nEcKWWu5uNFO>X;Z6+.S%-='tlcPf[ǍY K&Ku	7$ܔ-	JLnI-!,GBDBa(q0p=8;эk".{GoynuU%7ŝ~(\B=<MU"y6['BָV8gUieV)/ѻUS2`:LiU*(
zDqmUBFS}xS
bZA'
T+hsMx@l(e#q!,x7X1od8|'2CG|+cB8"#NU3ϵsEZ=oM6K&oC$]ԃ{z
4WhO,..@yH{&M{rW+>ZDw<=ƈ<"t
_QW Lwv`z.ml
H]4UȾƖA!tvbsۯva&;m'ضkÀHlFrWQ.QjZپ+;-ɹPNLw̵SfiዙH.(H'هIߴ?&2D#;v=zJPK#7}    PK    A             @   org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi$Base.classJ@ƿ5icW^bE ( lqwScy< >8p700?_ 0"f&9RH='X
+hNVMiIV/oRA[pn]ɟmgJ
Wk)jIKPW4n+V3\w|#J` a8<m)y6l:a+C;]ҿ=Cvory#WG}0+{T1Tԧ޾/PKԅV   ^  PK    A             B   org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi$HQC128.classAKAOumK+A@鲗}ufXu	<Pۭn]l{o 	ՁILvp_nUu/پ%jZ%[l<J'_u')9S.D_16TQjy8P
^	ΞJw%D!j8#1ۉ&D$.KGoTZ4>|ɜr̭2PKtf     PK    A             B   org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi$HQC192.classAKAOumK+A:e/	
49b;&x·[ݺ<xkp3B)1LK^ĳ}KJI͵HJ(J3+8$xNL;O3?Sr]vblҩvο
p  z=8BJBpTGcB%MI]<k6W'
jh|9^[e;PK     PK    A             B   org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi$HQC256.classNAÿ^L&Dl$6hb!_
,c4ᱴ1|(ܩ
$3d_2{ hPd7h|ɰڪ->%j6Z[%ۥlK'u'̯\+FgB_16Jijy{TqwWQ@e0PA3B	Q:qLv	mhoڣ7U*)o+Zo8yɜqo̭2/PK@O     PK    A             ;   org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi.classX	xTo22ya0d0  H@m#f b*VAVڢV-v{mbfdA|s{9̋OpX`
PPR|\ZAZ
(UT>Qӿa[-AEh,O3uϒߩq˿+'1-
p(W0-hoVUYZWUܴ1f溹eB6뱺cA;"U!#dMvl!5-[iޢFh$f{#]_axu~#u#颽.n	E{m}Z8}_ӲqYhw]&ߔ^2ZJf
+eSU#ӻCZ	]3ȋLftu47M
G{h=3B`Xb%$FѾͻjF7oKH-!C_Y2fV)fjJjAXf4arSF豹mCXn:tse)cb0eQÚs{ZR{iACtZuzn1Ddg[7>iE(gi=ֵ'hӤmFԌ 24e{YIz<Yn-{ɹJhOtrpWV
={.
n-Nzu2gdi}ZC!c2mUs5%:̘홹D(gf|אj9d˴)rP̢2M͖`a6oS#I)|Q`'yl`Ge4c}Q3Ьu9)cY"v2숆ݦ&ǥRCYFS%Cy9kWʳdq:P-:0{)m
]{u:ur,}Gkm7nhLnHag$aZ)XM
zw8۬(eloe3 $^;v
!P?BzwPmohݘcqGT#OL2SJ#	#Y<#ay^yXd_lna]YZ\6a$2`e4kqz9V<pyp^>ܪFި|
[:sF,XL#O$/b@4w3/]elq{revRFUSnQAH
3TK9E
ɪ%GpjbcŚfIu;$^%)qx
7JVB)%vItKH$vK^)'_DMx$(&7KETV>+h
'7X:1vȿX	Pp2*Øwփ먪g,q˟\/tqrq6}D鳒fEsg2kŹcT=ຑvΪq26̀ƪ$LVMl|`^<0œ|/'$$_7rcǎK2֤󴄵x|b؝k5VSl㭱=ZlY^Snc\g[O,ߖ,WG~HYʲllsD"(t a"ǊPQ0"*	R|Ji0ST\d-|*3&~VI樸sU{4\E3ΨhŰ
L62mL8f<ɽ0yZŵ8*Ƚ/x;b1|]f|C<b+bb;
Q1|ɏă[7n?< 發ܻ&"q1^er{p?4<xeWO<|׃G?҃ODDL~O.&E܅_2K	>3_?2lvjɬH6j+S-N=6oPDQCj)bj)j)ڨҏ b
fZÒ(=%4h%  ,
G,)AH	tEJ"!bW2bpj.NGSpՁ{]I:]:;BᚪO
^$l
\1Ȃ	g.(pKkPUCu
)Q<y(mL+TJn,'P~k1_9VE̩]'~xS.Y"kP,>iy(j!5eÖlFnjKaZޢQuJxcIxnTP|$H`pMY<HǰI<zjSb)|w`@ԟ%Ǳ{S.-!-IIsgcXN9ISv3 1>q(՝ngjD|Ei5жJP<}\X9xeA70m]1&EDi,zŬ@q3-%k327Wk<id h薜pwKZH\8tp[3 ;z.!{=W&#ǈ.
1{AK~"; 9q,XLS5uP*rb	KKM5\C8O+%b9ͅ j*%^!`/>哅>yhrⓃbO9i|6ٔYSi2H7K$Ir&ky%\zhٹ)&iɀ_[S3(.3+r#禓[֩еgPp_'F))d\be*>Oeix?_Wu
ow2n0?h'DJQ8<K&@F!4$}nC	zR{E~*PKpI  I  PK    A             F   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC128.classJ1O\"E(DP6<n>%]{pI+]14{1C@i	ήxg@p75l{3sE)R'N<$
)0ګ%c!/DZBkT.-9t.TxcT1ۻ;\vb_xt{Z@.B,2Kh$uN:lV4BYޥY? PK+zD     PK    A             F   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC192.classJ1O\"7"XE
df(IDaK7ԍ_$>6}gI<#v噹עSSc	~\e~KՍ1~gsКKqN?4r<SGn >_cx/$BBtEeVbr6I-T۪FY3y3V4Ի4+WPKfA     PK    A             F   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC256.classJ1OQ.ZBE: EBL%iQҍ;+u7p9y{yUz7fh!uGp7lYw{od!'o<$J2%aLora|:<">T9Ns\Bf8w3v  ž==EGh`>B
QЈm1XG-ѩU}nk',=YަY? PK     PK    A             ?   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi.classVWW
K^FрK*V	#RA6L8'qf"v_?S{NrN}IH=~{~T֏:?1{CTC*ü+Tۏ
u放6Wio*qCӦ&`)cH^6'z+*4vʰҩTҴXi:=K^bGI4u
W34S!Sr{鱄
X3'(ȚFLŰJVɋi[2M5qfw' cɘF1,[1T
]fC-)kt˲8c	8/vBRd=)G{Z3G`kB1;a킥oÂ5jDL3lwF,MM=-G)%hk}Zm|G9	6pγЉh[qg	ǳ{pӶBTilNQ5
1"lGҌcɴNe'4Y+zvnSYͥT9=86v$6fRPiԤjn܈1 B+i'wm"RTyBU&TRN[+S18:
8:(⸢IDpcr}R8R8eV,CNfOz!F&f{ZZ1g8pCC'akJjR(.NйG)6\?d.2\hΦsuEItx]+LUs\	t_eY*{$߷T'	]E,v?G2A׿~^؋b(\+"aIw* Kmoi	;pFB;X(vᜄ
8/OrOK؂gp1&a#T.b".at	a*"E
ø("n\qp*WDrɅ%qq-#N9xYI"bϋ"k"Nagq&v5xSWnKruWEmEPR#!F
S:4FjRgQE:H{ԑMx/E̹(4r`|**h44	_46ƧY7gOΣwtwo?>csx+PMw	mDSĻ(FGra>hz^pa]va,6eXST
QgpބʩFpg)k7J|-`e`яgQVffsޥ4{w	(ߺ\{	-MMY`Mg4P1UlC?:YnunyRݘu
(E?:O*qyDhw]8kY=W?|AYM"Jm
#ԮAPK8}J    PK    A             H   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyGeneratorSpi$HQC128.classJ1mkS_@p
,.
BE}L/:NIt#|(Ψ;7B!^LheyήӃP~njطNܔF0cU̍2,URb\i8џS#S6a+^py9;)2?"#DuPa[P$F+]X%R;aBrKtgT!znkfW?d6eveWVPK     PK    A             H   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyGeneratorSpi$HQC192.classJ1mkS_@p
,nJŅPх"tӋNiy,.| J3M1{|{p-BGYc`8S17>Xs+`W<ag~j:M\rNnp{{A].T~DT-,'h J1V	NR0icouHnڮ`?M]ٕDPK5^$     PK    A             H   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyGeneratorSpi$HQC256.classJ1mkS_@p
(MŅPх"tӋNiy,.| J3M1{|{p-BGYctp8S17>Xs+`W<ag~j:M\rNnp{{A].T~DT-,'h J1V	NR0icouHnڮ`?M]ٕDPKJ^     PK    A             A   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyGeneratorSpi.classVsG-{9YIȲڤƀ
DO}S
 	@f2|	y{fK4꾶~
@u*K(iP.r
Bͦ˛פ7kMUfŸQ'b1ӲyDX)tZXm07rC-hKILzta;㚄jYffqoý0'7\NCSc:(nӊ%L%4'@KN$r#+V\jjqeTӮߊd=9h%?TGԀ@ma\_$5"剤DTsJg~(yf9q%(@1p6⬏y*sƫG<{+|9Ьјm.icQ	Ʊ,9zuqgVJdUz6Q|^yF"p) Ad6^JV$0`&mTSǻr4g45uP9(5H	xKgOg͝o%BxaZ& 5il	%4MB#O̑(!TzlmzuҚ"-~ڋ2򎍈1{FfFF/ItvTY:JE-T#l(̌RƐa2$=2,ba1C=!a9C3+V2bXͰa-CC+:ȟ&(6|E+5em\+_zKE
B=iuFs wOT1MCE3Wz}]7˨_绕ӜNX}e4n3BNV6JnrGSLLǝTg7O̾Ә_k?oU"9o@[|tYo-ͿƢjU (
fQwcJ)*\+
0LLT(qX CTB`@Bh
~U0b7$v0`L .-
hǓ2:Yސ^0:$,xZd]^я'xMV$2A*c;^Wd-dh6*l#0=;0S새eLxZMNmGmWtNAtӮDYJ(]Ts?_BO#we<?+Sʌa}|p9+cGCֿpON]1tGq*N%o.$m"X_x$34P
֔&~x//F,
˒0K{-MKaR#sN~#Xk[r
;K*q	YM4D2RQi=#}頯`{=W=
IJ1CMR8AR8ONcJKB5%)}s6t,~=.FOZDvj=q,y:>-T,FuBv0lgaKueq+jhZ
PKA&*    PK    A             L   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyPairGeneratorSpi$HQC128.classKK1Oi]"PE/Mi'dZҍot)	|7sxx}
|(ؤ'W!Co3ؙt*lk{g7<ԔuzO$}ى鐓+6qSu\3a|BY@S95I:\b @I`G?j,DaK!B,C{:6{<Ά˴U%c>e=Vˬuי?'PK	e    PK    A             L   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyPairGeneratorSpi$HQC192.classKK1Oi]"PAE/Mi'dZҍot)	|7sxx}
|(ؤ'W.Co3ؙt*lk{g7<ԔuzO$}ى鐓+6qSu\3a|BY@S95I:\b @I`G?j,DaK!B,C{:6{<Ά˴U%c>e=Vˬuי?'PKw    PK    A             L   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyPairGeneratorSpi$HQC256.classKK1Oi]"EE*cziS4t#]
j!
<?^ `C _&6	}cj'=v&;٠k
5%u]`Ǳjde_ftvb:$J>ㆦMe%Tj]+1LOA>,RJ$`.@1@$#zZ;BrX,#R@^ <61ϭ!x2qU(<cOYOU2k9uϣ	PK;    PK    A             E   org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyPairGeneratorSpi.classWWW CRRVbQSKc75ILPb}_KUп,dc+޻߽`~sBqbN2'KplӃi[%%G^/M	7$͍	qc0Mp$03`L 3l7-A&цI<)uXa	>҆#Z볌"'㶏QN
"#D\ѓ J1)>ZЈ0:$ǋsāZ3}KeCڈ	jflaf;N,l!S¼i%mf,.mF9Z'v"h=JxnB4NGaA6%;U	BPFөEha	kb	YO(j꣺̣[a;iS${ ngdxcֈ>0"cecH׆t 	酏)TN]H
#yBM:[t#礨VM'.p6l.)n 11b	۽YgvfjʽmE36$tO+RVel"tn
q_t0ק(#Uf%[`gWPrҳl7qsr:a!c2VX%u2eeFF2<2X/QF
26hIF2HXҝ}2u+>C+m&"YE#^KuݹMzn&NM^NrkfSMvv2nFL6L\HƯEŵTẵ8z~_س֚Wevk}Rb.ʶ
煟nSևHM7FjkFZ"Ynh7=Ʋ4na[
⪨m*AmxHE+V1XGU,Pa	>%pAVq;4qp_PQT܅T!U؆aT\81v'9<	 aq'8ǓpJ)؁9<m(;N.uqx
=xSASw{xU!o):7ʱqxֽz)_z
]&uoPDM+|~?p7Y=s:Q)H#IT1B/U 	qWI1\pq|8v%/%$CWO$&nD(T$/$F%,Ϯu,2u}'qO%=5c8pL/q}]	\t
9br_Kϯ._W8}$QV%\K#?bE{
n~܋t'1~1mXIb%$LΜJ<gA|pOaޞ8vY0å]'jz\$RG8GY*!W1!>stgc=O錕OJqkYN>D#(PKp'y    PK
      A             +   org/bouncycastle/pqc/jcajce/provider/kyber/PK    A             B   org/bouncycastle/pqc/jcajce/provider/kyber/BCKyberPrivateKey.classWYSV&BN4%:%qB۵|l9Lp&tyt,tNϕ6X@zFnw9#]x?5bHgc"$GIZݗp	
S.Jm̜lÝJhd6xX`m.wۜ|%QۘqKBK,3+aW0w.6 㶕fY.AnoɌ&1,^@N2<CegNDqYN=fYb47Sϛ.Sy[N9>w6
s|Xkdd,`J=ffXZbd`Vyװrn'rr)rށk#lh܄7[m!)\Ӳ'4sr]Z~Zw'U?5.]K˚<
%y^^3axe$ۂ8)kFLg:wb%.mF֌6-hZ_饌;ۡ
]Ƈ*X^dzm)×)׌7ZQ첲mvm0sΎN
͵܎32RAI22^qLq'd񢌈NQ1d$MHrٷGB{2<{S])r%G"
GHʋCF:4T
xjVCA[tdHH{6SUFWZU(_72awˊ
*'#	3WR**A(䈽6M"ԣ'!&?[W5S	M*dԪhE6ԩhG

*`X98*H8*PJ*M;x[N
xW&DZa(bJe
`\S[UL+^8
PPH˸Y+WkbRxHwۖ;[	}CR.ӧX6K2$QGE#E
㱈y-&#F	[C>0-">]w#E8hX>zMGW]PEcar"va40#us3Zc?]YƷss?zJjo'Zƨf۰o QOηy<
yϓGIi#6H7eot
xV:@`Ɏ(}ۻj WK	q'ĝY#NG=BP2>Ys
%0Ph"1E| /PKl:/  H
  PK    A             A   org/bouncycastle/pqc/jcajce/provider/kyber/BCKyberPublicKey.classV[SFM $ЄK/iJ(MLI@Rm0Ȓd{/>@g
aСO,
}=gWPOܓ*B=K*CKBY%FiBER
̔;,AzDܓP&05X씻Pl20a̺͙'xNBcr^^+=!n%S*CJO4TW;rUeLxRBb.빛.)+%DqN3SK}a6KS@x
4\JU"5欍QT*li)KOǶuqS)o5nfK%}Mgcg4q,ELn8
YL8=35Oۦi;ln2
D,|n2"meAl]Z$+L6[v.!z/c[[$
FN3=R&<8tOgXf9*`32dGXKnZ3t\|&1}v|+I2jetd.
d)#$GFXFDFdܦ=y|)E%M^#4oӀ!C=/yn	
x~nE{84>Yz\.|])  狍(ž:[Ă:x.IXDk/U	]R*PBŸ

F!hETG:*~Lx	Rq
*nbF,gU*0
T4I
FTXT.>bY=|* %CXW
6b|&bM(VPLA)濰ucvR;neFeeF!}T}b+?B;04UF*u,ZF%n8_5f,/  Y;>Z
G}ϓB]>9ه>B.W1H7TVFȯha$>@C|[BhAԼf%]/L#Z>2=?V/{a<W@;>LuC|W_׋˛^x,=Վ2:MBгywCdOt`OqhvDT PK$g
  p  PK    A             D   org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi$Base.classJ@ƿi"x`KR`q]q7&<'C| w
?_ .1#`Kލ60tO#y.6{%k?ؤmZ*Tea.+[HBU\\RF͊⢍3]f%f[{6^NFۃaRTNznbUfvM~;chw!WhcdPuLdb>9$'?<"}~PKG   h  PK    A             I   org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi$Kyber1024.classPMK@֦I@zYEK mAz-vmlܤB~V{<QKO^{0of`x_ 8$;1yq4Yx;;z>Y&aGJ/RH[qF1F
c+e8Ly3eŢ2Jtc	ٓJ4l9h.Ml}mB#03EFa)pY*cuTquvW?}Fo:
PK     PK    A             H   org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi$Kyber512.classPJANb!@!0::
Yz<~ػ͋*?? ctǄIMqIxwHYw/)Uyk=*\V$1h8J']h̕+>vbQNM]fWKgkɥ=<xhN8,#4Fh`5(5Bogݤ)ek~[{X
6jd[s?x6^~<[!*PK*?     PK    A             H   org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi$Kyber768.classPJANbA($	Ba2tݝuv"x(wћ
UPE~ 8	&dIphݽڧTJEEreVXzt+Lt]N833Wr:lfډE9eT7كvw!\-ݯ%M89Y"Gh"j QkV4!IS.<",mԸj7lxCUj7PKsB;     PK    A             ?   org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi.classX`S=ϖof8!
O
18`F$Ȓ8ݻ

$iVE3Bm[Lt3mZz_C 7xs{9	`XaikJChX\
4hhШaixDT0H853ҾɈfG̀<o4c$LnOwdļޘsdg(+Hiw87,PXS۪6GM&nZyfG:y:V] "Εp0Z@iio\}ijtMf#$d4%.+PiOsu7f8"_6=f̊#ݍ/{
hHɳ*ִ5[ΗH,@ѧ͐(HKx{pWFSޔ[(M%"4WFL8	0(ڷqf#NtD,G`ؼ"re0lʬZ3Fۃ7rz 3,驍D49N8agͶP5Pxڛv3^krzl*UE=3vmƷ+Ӽ1i}HIN6fZ(Bx2D]m&֤0iF([gj= N1
ZU
Tj?jP%Ԙm7qC!E+؝ES=Zd$"P6Bkb^3h[cjOp2Be.cQՙsZ%4rDLaZ>r)uq,<5:C*5}4fi W5h,Ϫ4Y26%W͝iOz>e)_+lm.3N'VxYv/&"&>HYknh6ͰL_YfZo+oUTr=ty6%w̉ferڂ:K"#]asWٕeι]kr6RgDJwu\򨻿ys˖׵tdx_$$ÁOt Unf|$Wb^t.
;,Н9qWUK#}40vL+Z֏87R^(mLu;GbWYk]ଲp*ـ̫c&	Sykj^*T®8uU)@[f;Ɉ|pEK^K.zF.],ag$ToQJJ`M,fQvxӧDf^/ktǭ8Yſ:7K5*2˵eҌ(#dW.\{ꨳ@eF Uʌp&euT9)iOhxDfv-[%IlxDĵ;$^+:$AHtI;%%Bač1DB")Gb>>$^/7JITn|Ws6NRWtƢ.xJ9έί5:;dEvc.3XQ{-5B#nW9}[\24L3jFB+</?*Grc@JaiyȊ6'/' O||؉կT07qBvyNuyudjX95xXΆ,CF<>Jcؕ=;C<[%XnWAl슍ےg1M^.<fͤ?r>'ٻU$ccqmI|u1<V":ӱ:уAp\ǻpB{+PËt,d&G1SN&fC0	q5uLċO29S:s:3<<ͽ3:ފtlt:K:u2و؄_ӱ/LLL~-wn܆_q;~%&s݁?2q5A&w2}{?`~! +c>1&tCOOn<qbo7L~E7>0yٍŸ?fb<2Q/JpG-wv=PICWVe*f-SA
^oDI#vHDN"RFHRtS-elR-3qN£xi[nº1O:~[ш+pwn29 tRD>:bR+
wu[̑qA^SǓim8hxvp1m$
KafX [H=q]aJoa13;ebr?OIQFq<LJTT}weU(̺q
41PDxEQ]1y cj=QQG#'%g0neeEbVY<vp o1)ʆO1pU
{qQ])</bPT5iHJba
yb[z_8țsid4pgGkPLrn<yNu*M"Nh+zpM#VϨvTt)ï$ 	Qio,+Øwf JW)bUIPJ4PpN]wH_hoV3(
ԺpkG{PhvE,-Α.bƲ~ܫ'b]#ރj<kg~NOU2
gP i@0Џ x@TP4tk,e#qz'OK$S: ),pɜqa
avȖ2ݹ6G,εv"[;H#|
ޱteL,EfG$U$q{`qdqB;K9]QcfWJ<oA;=
O#xBq3(|@]t\
J{`Y'CxB$80(<~ͣ]ihSqe$S^sGK̜j;$aõq=wQ-?qz:ӱ7,=VQ&Tx*XsCa#'iv:YgnZt9ɽ/OG]AG]	PKy    PK    A             M   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber1024.classPMK@}֦Ho~PH!٬etnV!?K/?J^xfxf^J>RsH(,E
\hKVQ!=*Eno3'\jq'*~X+FSP?+:/c
ǼU,տZB6g\'}	E6,: h\(aedm>a[PKp4    PK    A             Q   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber1024_AES.classJ@ϴib.ZHwVE[LFXf$X\ >8	"{;=`Mv0%莤1Ap[+&
=mnh8+ʙP!M9=.\r	Uk)ŏ~;Nsrn[26oиXTgT\ğˏOK61E=!L}haمCA'ҙ 'J	XQ|p-]蚝>b	̺U޵k;PKL;     PK    A             L   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber512.classPMK@}QZֈ )B"dMMݬB~^ 	zQ/y33
`J=RH8E<EtjF^ť9KS)JM'Axsd R[UIpòc4cqUŃH*18q̫Qtp)F5#]߯'N	h/CVX\X#x\
,yvadM4OMϠkjڂPK6G
    PK    A             P   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber512_AES.classJ0ƿm}î'Z֊
{4$iXz< >Q/o.{ Gm	\1QlksC3}xYi'RE48
(k)gw26#hRk"Sƭ6U:gL>w:<t]Ӌ軉}?h#¼a:΅H)a	+uZ.jɁ#8
_wPK8j9h    PK    A             L   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber768.classPJ@=bTV UR(J}5$lnnY"Q&"3903o/ M3!EqAIeps'8d.2N#-T
]Љ\)gpY[&8aY1(eA$\yW8(bE`)F#m߯&_&\
:๰F	'|)f<Zp
bQvjOX㧦c5rm PK    PK    A             P   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber768_AES.classJ@ƿmk/ xhEX
BUAFU6U6MM<^>%nq041A@iU2fowKK3-Jm1[g`eIQRuq|z'X&x&\j{J,4)Enxտ}><=<yh;翻&7h"h`އVs4[[ݓ~]\qQ벫l=b	K̊U*wPK_^Ϙ    PK    A             C   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi.classVSW.M¢P[[%)hmM7k\
L_ae?s7!/bXf{^{{G>a$<-CsCKZ5t-"oB3tSw&J?gLۜaE3kZ,/:9uMuu<}te<Y9i$j:MRs9n䧹gEj:rR0p4`+Dv%/ݨ:CSҜ>I$d/'FF:kc#dOP~38)2Cג*gnk<'*A	zRC53J)Iµu3F=õ%fyV묵_+kQ,WHhD0zn`xeld]1չ.CGE%Zy=MRNƲ7:Weg7:1D%47]y&Xb&MMY%XZii/+f\VJ~wo_zޓ[|kV\˦R0ķ)Rrz&0
Ѽwv{m_Vߎo;;Ju;Z&"a+᠄$pDA	G%H0,aD³F%I.5Ws`tcD擵&=E]NI&aUb8O]XpyI*.`nB80\VsJ-aa*r(m4M3+]&:i}d_}l8Ȩliu!*j4pFsؼ\m,,xd' $O@ _^xdtEP$,(2"`я	H1~W8	=Sn
`R@+2	vXD ef;&p]v<%zEPU .ޘI&>W
uWrmUz\:eϩ`A]ޤJL&A&D$&#뿏>𼨤% Y4mXE}'
I'蝁?`*^u.<'ksQm+jV־wo87-x42 *\ûT5xN%a+?/m!$ۍ|([1k5S	Ԃ'LݸVǿ"{^i6O^l^^g
$1E}W߭	=vRŻU|w~I8B{zWcDOYPKF`    PK    A             O   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi$Kyber1024.classPJP=֦I\n⦢"R҂ t[no/6ɍ7QgՍIWn8af?^ OwSB"LЎJǳi3^c
%<"}PB"͍#&8J+ck~,\*Ny
ڊU1gJtqmen]FpT54l8hƿe@8A֝QCۅC,4%0Y_8҈VWUgX~PKA	     PK    A             N   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi$Kyber512.classPJP=a|ͥ6]QImH$7D!U7?'Awn8af?^ ctǄYF9OB'!g콘TJEEeVax9V&6'\+9WZʹrVJػ,"\s~8h>O8Ahk4!IyA,\e{MvpgX}PKv.d     PK    A             N   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi$Kyber768.classPJP=a|E*TtQD%-B"ix|V. ?JݹQg̃syx}pBgQ?'LNzCc<T2/b-%-$f
ѭ2х9G\ɹԚhXSưPW:Ve&`Ap4)}BYw	?@>\Z3ӄ&Usr<&VF7ڭs=x6_-Fcچ	PK2J@     PK    A             E   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi.classWWwGm:8&JE툞&!`
&H[zwY{OHn	K9!wvllc3Ͻwvf?'P 6JF=#&zXY'F$utSwo4-7J۶<!SmDjW	
egfK`	r+#bn&uopwp>/J?V#n暄F9ƸpRaInKy?MMSiC$HZDdIR0Xԧrߎ
dwq/k5l
V!C<JcjĠ"DsjhT҈n&SYӺTe%n؂bg.4S\KSzHS
=QLː)3Y8٤<SDdɑdl׊+Xˉٺ~U<)jfI6kiPdekoᙠyf`&	6A
J3N
$#CV2r
>y{jSiÚ:R"e`ՠ}&g/n
y#|4Sa97)UYWw]E|2c鴿#^S"wx)]¼G_g;mG<+WKZb꺵w<UՍQ3Կ%D:G5*c
.[M5m֝fPl]F+djk1ZmV0dXŰa
ZgaÍt?-|FĄzs_;~GYռPOHպPk[`z+ntaW,.8pK
I*/
ͤ(b-@%$kCp=Ee ZsCWr q,PIkR+mY)}jۼ]=ym:<\Rm%ِʌ?gr]sKKzܦ`nW w(@U
Pb\.`
^Ad`HA4
L,AA$`(XQ13RpXB1w؄Gel2 #/*^<&c O؉#e
ޠ ]xR2va{xNO˸
_ƭxQ<؀qC?r-E5h6TY_vyJOty4ңVU](3UI4mF7Rh$F#|P$QNmG:su}	l7Nu?d}/78^	Kx9Őŗ}__QB&->-^o>u	rSO6:Y|t?m6B.WԞAbU8%Ko/CeeXf:R _"qO>3]q"_,⋾JiU?nbw48 o>]묣OaN'xsUj._CcqUک"
ayÒ"2>ї/a;1e@bk8+v'ɽ \D3걟	PK.\p  }  PK    A             S   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi$Kyber1024.classPMK@}֦I@zYŋK4Pz-"ill,<Q&'/3fyo7 CYl	4d:	\3Q
^DQ0(&ȢqxM4RGR𥰩VOBj*
CYNxoe&57J1!)'uA6b뛮?SMx>p{`
B$(-ZfedQ㞭蜾`g/ξEJu PKp     PK    A             R   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi$Kyber512.classPJP=a|ͥ6 "i t[no/6ɍ7QgFpQ$许gs03o NGhB2t00^c*%2"PB*/H0.-JBɅԚxXV3ƨHWci+Kc0)MqqK8Y=.? mZX b	\یW
Y,xL[
ns{Wl=sv}jPKw     PK    A             R   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi$Kyber768.classPJP=a|E*(nmH$7D!GB339||8O8+&ӥNgs±bf3U)YVyiD0Oh,LumAWjJ.<smŲ1F5FL[Y{Ǆ?L9l|5]tA Oha݃
B'4sMn3^5LdQh~,16bo5~6_a9֪]x_PKfNr     PK    A             I   org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi.classWwGٜ|>0v(1"JQL5laX.i&q$N'!7$'.BO{˲y̷3e 5
n,pNj^	MiXYMNqSg}C 	HYJhmb$fVаifTBYYFmaAH	[&zpHByƨMq($k>bP.5q_7fQF>*1eX}v0#	z>gjVh,uv0bpTg[:۰Ę+f73Q+י0Rd6IEm^^xpäP.bavjCZDL~O<뽬)%]^bU
UY*]v=E\tSSrJC^:R#aK_1K׵c2nG."2FS[/f:ul,cѣk=:yu$l9'C&k454+Sn27p4,2sBmgD,X8T9ƛ'}O$#xOltC&mn;"[)}0O[G't$Y]c'F\gTO':QHv-uf(]n:&k2+!c;d̑1W<wȘ/+ce2e,ᓱBJdQ#c2X/c92󑨥[,u1dk4|%ņJ ٮ.6k58&Utv	=ӫr߲\#T&s_%7f.'Ɖ8jGk5/w|
,&>f%IKͳ
Za]Pl)b.W
cE9:W0[rR+J1P}ru-6Tpjs'Ru3[QeiϚZ't%X,T>q
X̡qP"wqQa4[8R1*a3TqAF^e0UlFHVTTpPz9DUlSVGK1}p8ʡñcz<lÓ4xGUv%/+h
xCA3Ug[xEAN(
-INR4)rx~0*_]T~SF
K2?owݟhz/=f.a>-~MQ2Q>EK)-eZvI<ʐx2	
i{G9;^idEdl$kxUޥC0,M1H,0\*(WR:6qsl1bKueN"_檭heD40ul,"x!|y
G9mW!|`g}L? vp2&&9u2%/oT55Nrjy*װ$xb/#eS'lOPڋ#>8>+!#p3R
Kx?]Žxm-N\6QwVcxߥ+kQyNE:Q8pg+.υTS!y?.IʯtoT{} PKO^    PK
      A             )   org/bouncycastle/pqc/jcajce/provider/lms/PK    A             >   org/bouncycastle/pqc/jcajce/provider/lms/BCLMSPrivateKey.classV[WW  MЪAņ@Zr	 Q,ar !		B7ۋ{kٵ*Z?L$ 0g_f~@~*¶"pZhE%vH(p]G2]Px&	g%HBh3<aR=`M<.X383yPLR䍌E%l1!΂\3%TزF+B.h5
1#(Af>%ДR͈B}wD9\ԘbYD7J,6nƓ?6E %M}| *g<>ħ'2Nx!u2P9f'xg53шinH,aLJs@8tZ:{:uG.H0{oZū|QXm%s-A)kDɜsN>bio2ƨ1 9M{X<r:X<13}*9m,y9%5dɆ$ϳLa=b	D6R-9
'46qO8B!1g+bFt&uώ,֘ZbdayaSbq.y<a:wQt-3Nc\ڒka.wdhqPƋ2\2ee48$#㰌#2xYFc2Sr]{HTĵqVzܛ9Fї=\\Z+9Wa^.0TԓF9ZG%ǬZ͹@vc!nJ7&̏o(7vY'g76qoj]09oU-TIBpKE]1miM匰ySrs+MnЕ[
x	*vPSݐUDEjAjمb؎'PъBﲊxUU!{Mp
{J0U- A`BvL
SЉi]+8]CY=d\  z^pAB(Ŝ>  qA
1%}oΨb3=A{%ql)}I?]obF
t(0gpSd"BZingJ3BW<[gpWphQVdeʁD3*>XGȩp_Cp$/[ӓOmtz MȴDؗd^71:G*KOoy	ξ$߳jpQ4יٖ$$ j
-`i=y
k_.ôD
Q&nb0lCC+)IqrHdK蹾}[}%ilǅ.n.ɧhg/PC@E|ޜ\BUQ!TRRupϨoj:V/]'"
w>8_ [a+(O
cfxGHtTy?ZȬJciuZMY|wݼ۫ZACi]R2{:"rPKyu   
  PK    A             =   org/bouncycastle/pqc/jcajce/provider/lms/BCLMSPublicKey.classV[WUNRh)T[
	th)V.6mشЂ&fdЗ<.Ե\ɥ?}&CE.˙3' n`jю/"ю܈4*i|дM6O=}!$ck9n1Tx 6Z
ϩ0ܼeHC]Z,=<=0Ğ\H,(ak!*J1p"MiiqqW99ag=nSDeBV,(Wа׹n:zbr!2{Be	;RHŴMviq{Qx6;P9;}v?d&ߔFЋWwQ'6cY:9z<Ȭnd<GVTO4 G "H\N<ڟ]nxKc<Sj ExWI
6յ
%CIY7=&ÅcHa{[iy^S=phj55MsWq/Pٷꯩ?~]V)hWpI{
.+}(*PSWp=>p1ǣ2 ?4mG?L#yHscU!~^$m|l,vb,	zKd9mx2`4o%΍+5aDAg7V){-i;.F5CXC"j4\C5
]A'pj0LUbt>⩊^<bVER*naZg*PTHGBm|s*1#œ*@^ƅz2o[9y})S7Vy.!1\E%tЍdI.fPF^=
F&7	O#]n_QCB
ꆑ~h$Z&9KZ&QIaK:_"{{}.bb H0
H-ԐfFnҒ6JƷ2I̟E5*WUc	PhY8$^z(ot,e<vh4ҡqrgA yB62Mxf7h%)GRλOj1'Cl.;>$57ey[Xw `.nrxszp lr5xl[He
PK;o8  
  PK    A             9   org/bouncycastle/pqc/jcajce/provider/lms/DigestUtil.class}OMK@mbӏ6Z?EC9MPE)TViƐlI*RoqŋΛ742Pc<#HVڵz"l Ѯqu	lٱ]FQIPp.,;~3
kF01_#(e8/6~U{׆18
5ݽ
NJHJHJ%*تk2 2&!A@ ,
(F09qesMFC;
;:	~y8SK"E}ClH#ĸa]a9P_ܢ@m<BID	#,
hiO'%ޱ*a2|PKYAKS    PK    A             ?   org/bouncycastle/pqc/jcajce/provider/lms/LMSKeyFactorySpi.classVi[F~׀r
MIHm.AeHr&ɑd{W/vZi'CY`l1;3+o+j=`ك!{|'>fƷS6~%4n%׌mV͈68ښ'ch)'bP;Z*HԔ[aJ
-hY
ߊ.P-qjN86DYC55bXKvC%ڶ56G04*IEMyauPnbVS|&)µI#PBmkCwVckjҝ`$MY7dc,)cZ/֦)-rQ|kD>u
gCR=ӊ[fPSb;1MVlcXFVl'ʨjcd+ciq9T'WS2]UU59nI"'=&F*XM#YDKMlߖCgk3lIv%[㘹G{'aѵD]Ufb0D<nRە-'ݬ$xm;$]ϿTrha_\(	+/.+lC1 Xa'f\dpv̚
s]͂ʃS%Bl{+$/,@\vY2<v)x?'cP
-=lEJeƯG|\պt*^=Jkx#CR	eym!F7mǇB6E3h^4yQ|,^`ŋVyюODLO
	XMvh0&" F|%Ǣy")lJxUؖ0$s	A(٪8i-&V鋏^uGQ&	0<N=Ow4kQ_ӛAWV
V=}k8i 1@19FѦ4v~ŷiMfi`MvtR~ pK* $0ߨ&Tyy/~ċ2+FR.A6bqO|dUH|OC;	2vFhyN;v~YRMYJC/
jPus|;Dl]w?C#cM9vOkύLoe<n=z蔔g PKN4!    PK    A             E   org/bouncycastle/pqc/jcajce/provider/lms/LMSKeyPairGeneratorSpi.classWWG-$YbTBUDE406ږ.&.(}kT_[->o?c{gBsr{73wf
 [c%**Rv	ކ*tCwR3 x fF|#ICTˎr_E',:mnZ~	 :qӽH#CMŁsa܈:
n6'nJX6!%Aրm9xj4)HHT?vk&?$2G.AyJWGBra\R}QՈQQfdr3z ~#KDi_1Eh$F83 5ِ@M#jakLmm6ZZHѝnkzB֣ǸDDF8*)]a-T	ѹ;J$Y\ڊ$Tj8x %o-,bE^;^xIsxi.7y\)DbΨ6q36rӁʷ
Ch녦?HFV[$8xZJ.qі/Fƹf1^E,sUut+Uj|ϯC%AfX0#2cxqz62<$&
MfIXȮՙ'
f@2Z|ݡ`ˀCB(#	7/" @X|*7	S
,!{J!aGw9{3Gd*Es־3$T/h +Nb\;s9]/E\a*o):xKb֬*xLA++X#
Ymk7\B<SEePTaDM
qBcńax]q!N
qB.l!&e)ndk2^!NĴ"cSB1$pfvB|+F@N_⩯*d~5~Dr̍2='ZD;G]i$V#	kxq	|6Yk,_!~TXq<[Cr<vxfچS,~xO4v6`"ϣ7<oMoNY~Ke,'pWUq7	k]5niUup:.'uQ)'yp
%SJ"/*@2Ձ9|RBVͣ3\]7]9x`]q!M{N.O-N+&*M;{	-i"+xrRLdf$"zcFB@<45['-Oa8nN%iדS.=VPKZZ    PK    A             F   org/bouncycastle/pqc/jcajce/provider/lms/LMSSignatureSpi$generic.classOMK1ص]תM"Bǘ
!K̮IП婠GYM̛39DdIП+Uh`Z[I5gkA]7yG[o9/qiYJRh](io(Ep_FXcǈ	.yVjf$-UF}6Yfa	D٭	[9'A]St.H0 aN#a/[Q4;PKAz     PK    A             >   org/bouncycastle/pqc/jcajce/provider/lms/LMSSignatureSpi.classVYSVd[B&$1i
Ɔ8k!{ԉ	$݄|cBR$pt%}C:@)3	}LSseyms}9Yt!cۈ͍5X#/򚀺pp>|s x4Vu9KRjَ6U]dΘlsaM8ajZZܸ,V`,3[v4
a)zrʄVPLg$FE9=N"4stƙ%eu9frMpcNB8|gs2FO2#1MӱEj}ݸ%Q*"&).J.fJRl,˚"%嘒tC5NJܨclv5$JǦdv4S!o&" cW2WJ`xqZT1KrXTc?f|}+֩zf3<_˘WSr]b6LiZ}j\&UUV
8MfRͲl[N%)c."ٌz`{Mitc[GFՍ=TĔmjE1BFqU
Ґny.b"q@s":Et#WAǞ-Y"D+!%]B$tߺCM'6jkN\h{[r3Jq4?M.hi{"IۮAѫUA՜fV&ׁr $<XWͺX]|hc!j,a
vUVx["#N[Ƃ<1|bYǫzRI8	$GB³hpE@3"(AJ؄1	;W%m }.a;^$҄x7
\L 8C*r 0` ΂qqtP0 L.4Rti1E}Y^#u'5~GL*l^BF=M?಻R=ݕTPZQKߐF>Z"e+S?A< </!;{GVqnr82+/%|Xͫ85Vq~pzOQ__	']G9&1~;<q<_|Nw8@mA.qO/"Y^WEG~-7g\7ahm&ھgv9ߙ83IeC|Y MSs HZ)6?$ƋYÅ|C­`~~ZnLO	]D5G"Ve<#^:)Bt_0{.=~Գ|l@V{*NN	x7حE̷7JռgHhPKY0U    PK
      A             *   org/bouncycastle/pqc/jcajce/provider/mayo/PK    A             @   org/bouncycastle/pqc/jcajce/provider/mayo/BCMayoPrivateKey.classV[SF@$BMMQ!-M 5q -iy-I&qoiG:c@g|vܾݕϿ#R*Hgse΅h<CmН!v3՛%.[bt=2wK_9f,1.
|7|UX2RbCSӋBscKwĞB	(hefxF0(N/[0Ըˢ2G
LB1pUMa;Ђ(Tx$Zkii#dVh~-f+q@Ĺ0\X\M51=LYG7
=N朤CPm9XVinS&u3REk!{d]TrDM^'ӴE
5n;irQk6:yS$QǭystQ}c\sL;T;qU㫚PuJZ⚰z=OrZ憞H`8t2#N^CÖWkNn,"h*\t#&uplVXqn9~Y	m%tHxWU	Ix_5	%D$tJJICDYNN$30pqBW"^YvP|<DCsȍZ?
AQ9r#n=^RS{s=Rݲ+K@ER93Ql@a;F,]+f*SUsy(SЍH(UphD+Fb\A&4`JA+=xf`NA=+8ϫ0/\1/|
.&rŢ~,ȸ'HbE 4CnK2@)dBF2kW|#c
5q8px:Gk𲥇iM$>i֏`hƇKzf
_ѨMC/hu0%47?m	3M|c^ѿ}dm-tC4
5*o/LW)cP^#9li?fW^-uFFcutM/s.`2 5s>66vV}Wu?o'5{kmyj)n_PL[5#yR2],Tt>ֳwc]`,w:;2.>v w`*և[${\k-nm)PKӏ    PK    A             ?   org/bouncycastle/pqc/jcajce/provider/mayo/BCMayoPublicKey.classURG=6061F6b0cpX@b![3j	Ҍa%*TR5ʝE @1UrN?0P싺r.ط>P\r6%iIi#5bfM)-E!͗KlZ#ETOm	䅬TĢ`hi[6٢(I-`PR̦mdZ蚑	ʀdLn\|+M#-=w4sw-ZʷڜDCCGos5mřM3tvz`/8[,eۮ2:喵`P=QR"ݲV *a
5nYrKRw'r"YۆEC('e|0CLv:{\,lä"ﴩTؑ@E3P:䚰ܜ]
GMc;WJ>fkQ$kgܪ&Mj꠴"}Cl,T0<JSDӵ|^ܢ~n~}|Y
	=nJ%ᶄ^	HPG>pG]	A	}Bcm1[Θ0:
(@.J/v]^q^r3<[^;FGfQȹ*9^!Z;I?x[LRW͙J7
UzA9J<Y]-pTHUpс:+hFOA<QЅ911*tK-x@6<kVdsG|%^8k#X/!cȈ81Gdrʘ15G˘Ϭm6ʳZGDzZm3%o#(>' =g5
4WhO"F9B?{	3O
7=#0ih%>!"G>,#g0NZCn77&~A |xw$a{^躪zh .͡
At`gϯ
`؞kðHX\rWW\ԶkXBa\EǵzkSg|{}:)7q/?@5lĬoRá}XȜ>%PKծ~  '  PK    A             G   org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo1.classPJ@=m&Ʒ? hE*B
עd2ʄ:SgR!GJ݈¹ιcќ?QZU&%{rҢUɸ);nRjZH][%#З·<BZfW.d}Eel=[*fB߭Ofwc?'"NZI	L6[pJz>"j|vZ^gl`鋳1Q PKd     PK    A             G   org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo2.classPJ@=m&Ʒ? hEZUEd	uNB>K7?'ss97 %9{rWfD82efE%xRY&YzRi.SJڒ0A_>V^ZriY}]y9jT?f"/>];X/<Aq"HbN&d邗_	oGYuV[~kzwl>}q=ƾ֪DPK%V     PK    A             G   org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo3.classPJ@=m&Ʒ? hEJUEd	uNB>K7?'ss97 %9{rWfD82efE%xRY&YzRi.SJڒ0A_>V^ZriY}]y9jT?f"/>];X/<Aq"HbN&d邗_	oGYuV[~kzwl>}q=ƾ֪DPK%b     PK    A             G   org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo5.classPJ@=m&Ʒ? hE
vUj@('Q&ԙ:
,. ?JWF}pp?^ cʝ{^;[HK=d`gMVHᦹN*iK} X!x!|kͣʥemvBV\8cR&PԛQN D;dv=|L`m	ZX":\Ҧ^%hagA>[
ni36^Zv}PKn     PK    A             A   org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi.classV{SF`d@Ғ&#P@] .&H2}ϯStOL;=Y8d괧 7~/h✄N	]u'K6RӚ3SKh)]&gCs:W-MUl';t+͓e|5*$md2\'Ss	
,VMEҊМ:7ibj{fZ#?oѴbY~tHrfZg3Mcu[Sd͐cs*ψbhGVƹpIئ"Y-&Cc55;'=%%)Ւx-rhgh@IkU+ĸ[[eW NT
em--T	n34蜵DOkYKR]%g|#.e7̔idu5*bC*G˛\cIt\I&O3Ty[UUMcO"6/sӷ3;;
?$yE
1̾wR/c%y	1Fy(6
o	%&ᒄ^pEz$J/Ẅ	A	xa
W?[Cg=CxŔ m[蔲C{ѷ)#\wbFCU:KcYՒO޵e87OENdMYzOUp\|\=v(1,'fwlpj5>C*cݝ n W15A$$H R +$_ @b=aX$.Ȓ Y A!;d]{>ඟ/>c(6ădBƖQ$>LS.EEw#wzuS;=P󸃩1a+ΒY=((}1tVoU
!pפi##}<>p1."H}y|^kQZct=c!Y`;B}Ѻwp#aaKC<2Z"g)v'zP{R7!To>plE="_/$փyX'PĊqߎݍ;:fi1xz<-J
g@&؇aiOU
8vS"c|D
m6o;Ŀ#>K{?/PKX  <  PK    A             M   org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyPairGeneratorSpi$Mayo1.classPMK@}6M@zY)PD]dKUҋ'A8o>xoϯ cќ?whku
S]UQ2xpԭL^`"\X4v˿k[ϴ-,tg4<F/FOo60n,3tf`+A, ۄ/,!*dJW_E8F"HTGmN_ݗξ`*Q PKm     PK    A             M   org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyPairGeneratorSpi$Mayo2.classPMK@}6M@zY,Y顈
u;Ȗ67?%NKq|03_ F8$9;
h+7$(Խ{MetVGTQ3pbiHݳ]^s5O9gw%L=ctbD1
/9'mZJ#K63q&dW8YdUlc$ª[
Iu@;o}koPK(aK     PK    A             M   org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyPairGeneratorSpi$Mayo3.classPMK@}6M@zYY顈
u;Ȗ67?%NKq|03_ F8$9;
h+7$(Խ{MetVGTQ3pbiHݳ]^s5O9gw%L=ctbD1
/9'mZJ#K63q&dW8YdUlc$ª[
Iu@;o}koPK<}     PK    A             M   org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyPairGeneratorSpi$Mayo5.classPMK@}6M@zYd"* [lܬB~^ 8	/x{|~ 6\܈P)7eX*2*S5G
̴kK埊K#wvWzL[?圽0?щn60o,3fha+A,Eۄ-]d˒WQ%6o5'QWa凳/JUHPKw     PK    A             G   org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyPairGeneratorSpi.classW_W.׆eQZKz@#
bQ(K؆\n6({_VGO{WVS?tfل\`v3ffk V/lm(a
Sm(Y@nEWkFؠy&6
bڕ a)h~UTWuPNEəG54=P0s*	hͩkdE@!O^m7TwXWw*qdxJHQ4)7wUr~UG׫zo	T[
Z/`ڸRk~YL]ּ=*mu$jƀusy/Aɔx2%7@
%BмJ]	
(_3>T%k-YgI(qt~[	^F𑒮`㜐l.UjhBcQϭձ8i !M/x΁;)+)ĭ̖
e%zZcM5qOHr䘍LdXfJqWPr6]T{,5KNf)DJr7#4ثeV9A֧s2N0uaUoVBtMNZ~g(1_X(b"LCr5"jEԉX!bU"VX#bu"E4ז|&t%uv'Xj&;f9h3**RZYwzMBg)9.hLבۼ3x&*;[;3C	>O	\ޢF1[Z4>[G_X>mW/(: SlH)koSWQJ0v;[Uk;S%inZ!qYW<L шGexL(2**UKA7? `1n$ȘeLG{ɸ}20H2d̀_F2f!(c6C	1b؀BO1<L!0O0<[xy^	J؂^aC	-`+>ʣm҆7ޔЎ$t=	8.OxD,aޒoK}x9CNQnӱUB!P#xȷ|.2Av)^Y+'+DQ?!aW˜S9MIU6%Pe#4Qh >#23Ahw/"{'fګ#賈KR&WqA\Ig0F:obt-l\cQ\9erz(Ak[(KEM?"d<7ї
sI
?b(//
q[NjqV.IJO36χ0.QVn(`:+Q仒*Zq3lt	g)k˳Nr#85>ˋ,iˉ0WN&|iJX\zWQ$ PKh)  s  PK    A             A   org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi$Base.class1OApxǁњXkal RhEBB,o~& qV)id&yo&d? qIz	!ܔ[bf7JbrUQZ&++^YfkGx8J/\*}7sb!"ˍ	g?'j 1	Zz86s9gxk+4
Eܵ_=筋' D<!ۡ=p){HvPK!   o  PK    A             B   org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi$Mayo1.classJ1m;g.\	.Z]q+AA(\4)dLX)( }(MEk&pN? nqN6[}BIqO&41A;fRɼk)lF8xbyVNtmNو%T[ݟ#Gkf@5YLe	?ʅ>j><u>!~ܲd AZUD* '{v"@#DBk=<ު..we'|GgG8zt%PK     PK    A             B   org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi$Mayo2.classJ1m;g.\	.Z]iqӕ 
.cJJ;3SaK7oZ.Z87p	
Ǆj5 Ի&5
!Ҷ	ºxTJDY	ʬ{=˃trrJDߌRJ}1C햘Gd1sBoBC˻5KvY;5HPEa1"4b!zv	msͿ,xWz~x6?=α9_1O!PK[!     PK    A             B   org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi$Mayo3.classJ1m;g.\	.Z]iqӕ 
.cJJ;3SaK7oZ.Z87p	
Ǆj5 Ի&5
!Ҷ	ºxTJDY	ʬ{=˃trrJDߌRJ}1C햘Gd1sBoBC˻5KvY;5HPEa1"4b!zv	msͿ,xWz~x6?=α9_1O!PK%A7     PK    A             B   org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi$Mayo5.classJ1m;g.\	.Z]iqӕ 
.cJJ;3SaK7oZ.Z87p	
Ǆj5 Ի&5
!Ҷ	ºxTJDY	ʬ{=˃trrJDߌRJ}1C햘Gd1sBoBC˻5KvY;5HPEa1"4b!zv	msͿ,xWz~x6?=α9_1O!PK`1     PK    A             <   org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi.classVwT44Tjæ)u@BKői@-ͤC4	I0ஸ+
S~{tvj+_}/w{/s q밸7ա]j"փ:YU0rZliwM<97G4MSՓ4ޝq4zJ՝G1Q-qbi)]dľʏngLӰV
 ׫M̤ꑌ,HjYRaiΡ1rKn]1FMȺ#wY7C-&Ҥ¤]2*1͈ufueY$39*:Wbt4w𕀚SgFK'y-X
;[.Veq9%)"̒R̞pZSRa)ڻ%,Enc
]*՘lc6_*P_E*5#֥T+T
nb>4ƪdQc1nuf.[GyTekT>.eiԔfo5P3Kgj?N٦.l~ѯ<ˣoc^A8Z?|IEmTkT[KɞrV}DK(10m#st[]nVfúqT^7ٰ)6ytwgʃܮJKw/΢<J\JjkD\#Z""D.:1Dq
"6$bD(bimeTy}b'83xg"۽+0Қ(W~>["eκkoOg|]6U%g1R΁J%]pm̊Ϸ3OZB_W%i_SB5g
J/e;gvok;T\嫻!u	gWYA	pmGV+f'aj%th(ݨp5x$I؁,,V<(DG)	+qHrh,F%l.
l="azaa1h,X<vqOp;
!θ8Ox1;TXe//p'xų!1υ0<tw$p?zw~sڡouߍ,)S=B4A
oh9rG6J8H4ruhe!=ΩV%afh6
(:ۆ&YūQ,^a\ډUCzEtm;%h9*-ói do8͓j;':q+{&khqnc0iI>+zgP_p$k^ B~)KCw<E55E\:Dn5F:SXBoODr˳P (w`Q=^7rh
7Y4J8;l;&)eue/p0^	"9%/E"9Yh╶m-9U	_B;[Hxu;"yRBO*qބ|ߡM"kTD#~{/#M⎡9ǋ0/_lDY͛pd:dPϒ"#}郤ϡ_PKו  v  PK
      A             -   org/bouncycastle/pqc/jcajce/provider/newhope/PK    A             A   org/bouncycastle/pqc/jcajce/provider/newhope/BCNHPrivateKey.classURG=@+%v 68!! ##.F6N v2iAW/
<SyH|T*=+!@@\3=4E+E]UP_򇴂zZTi <nٖx@ynqv{snhL(	^Th	>e57Y)/V8,mlqS(h^0b2ușQ,UgjM'3 -fw@͓vQ0
\ܜfpב+H%Pps1r̯&/˱twv$҂Ҧ0J9<+dg[N!;n os!me~x[5
/ǰS)+ܥ\VYf
ǥIX!ޯI2ٖ
˦6ɋgU0>Vuw+N%β\`{N.ۧ6qڴ]WFtEϓcO[YE^}*>UqOg*>W/UDU)IվP1WGwGS|zCGS[;w%yҷ,j0Rj%KXwiՋ,5VVf緭1Yߡ\ˬ1W~x#	&MinA'UGA$t¬n<щ':Z0FcAE
,ͪF?|OyaK4?Hai
b]CwE5|g<"VYDkDМ^`gl#G#	!t+h4wA72aӨI6nF-f,<&O
;l}&owc#x#wъ);1D5B㿣!t?BO:BvsEK6wēMBcSx'3F 
)AtA%xR19LZZHl8 >!_W#=pF s5@4HﮣN>(n_Pg~9Blgn%LaAjDcqB?PKf<  	  PK    A             @   org/bouncycastle/pqc/jcajce/provider/newhope/BCNHPublicKey.classU[SFրe@I iڴ56Ar)-6PKCBRm-/INkFt%L:Qdc%mߞ=z? ܅@C[j(5F#
[gOO3{<562NIHpW=qp}0Wk-a+eۛCOIl? Gs]ɸ=,쐳͠p6(Ѳ4wmN.m!B-],R2}ΐ$+'*ܫ("Bnus/QMfφvY5pܷ\7-9fbwA	g-s_譓;~Q}j膻S+NUK
V24z曖ޠsw\:7rZloo|iMnY1Y<3Kml6;Fzq]C9W6g'\[k&:GYGځh
*xW5P0=+*a4p-U:I@s1PdQY	o9~272:+7XeE9əՊpa*:rVZDx;۴{\؛r4@&v
HӋ
@\C!Lks
Wpsa^;XP1{Ҭ}iRqy>IiVUaQx<TV恊	,ILsH'sNkܪXmtu>7~\Շh	R;`1RF'70\d./F~t7odS;!u^i/Gh-9k<W_D
&F_P3bgtf1kn8lP
U81ӗaKc+]=t.g{>#Ryp
}|W $`J0k:V9\cTkSQV,r[|{8qlE@D:PK(  5	  PK    A             B   org/bouncycastle/pqc/jcajce/provider/newhope/KeyAgreementSpi.classVRV]@$!`^lsQHC	B8M4me`ȒdKL0LIxC?}139Gkp.H]Y@{(B@ ^8p3{ږeA4J?o13m[A[u<cԠYA,<d{Vscfz|8jI쒀>M5z,vd䬕i9{V]pcFftYFe!5T9TlG˫fTݩ"-k*y
 r#w)[٦CziΫ˾P"gpCRL(I`9H{t$WǈtXA]eZѽ4TCƌE|!U+j
4fGќYJ:o9^~΄䔌U4jpsKi;
)cmY(j=PԫzӶNwƆ7KrdyFeya1曏Tk@澹'Ȍoѐ5}yT\L
8C;ז뱼<s(U{t ⶈAAC">qG"񥈯DDEDD0t^F<lӴğioD-5\Zi3oy=SͬU#Yհ])gurhu47?v<O]υ7m[Gi,ӼhQçk[nr(^3Zksk3+JzȵoC;WIyQz/[Hϵb=1!1dt# 2NAb\e|[q
2>HU,cc3X)).~'	wqos.~0g\r&~w	XJKxxVRY^=Qj`"`
gL6)y_S9HxHnitEaM|OHЮ;F1W{D^#3|22?q=XهS	(xxR5}HK_kG;	sU]ůC(+}m`o#FtYH{?[a-GF"Bˍ#Lٍ2
vlDj$I#z ow|+*+L|^[>zx7X_'Jk2GJꈔV|PKuX*I  ,  PK    A             B   org/bouncycastle/pqc/jcajce/provider/newhope/NHKeyFactorySpi.classVVG͢
1v$0[58dF3㙑@YNN"+ȋp9Y^IyHR$8&ҙ^nU߮7 Ώ*?֏:w93`h+P
)e=eh0Ml6kgXhÃ
Ӎ۶xb4N!Kڂn)ėI&>Ͷ(̨a9a
GĚc$#vrboQ$#D!#Zw4ӍջuNzbq4FG7\Aጩ[;Vdt=ɬp\׈vL":s[VLKcU^o_HpM҈f47b;ahOk\KfB;<˘[dY`輬s-C羥<K(#Н >)=mM=kTdv`xF2*uWf<.Z{DнL-&,tmOX	=#NɃAYN[fBPSƊ\د"78|iB
O_fun72^/
gej>6vw8rtp<xP,^Hq>8*Ryc͵A>zW KHUWIڬ'j4Vq+v
>%p!4\Ln<=\<r$w%d92K<\ Њ[rЂp 0@> 0+Gs(f,VxkXT/
MzlP0MR1"G>fC#.Gcx``[
&)|)yVQizjaue^R0vM4Q_y!t`	ei?'|b˝ݯaƫ'+gIa7O!SxL!h®V
÷eҴccco
i+5Bdifi-~vS0ӴWs*Ji"4_O$KGSљ8FK;gmRNqpBI:gYQQ
]dP:.,>b[F}.0Pq
Qjع!z~~nabIrQ` PK  p  PK    A             H   org/bouncycastle/pqc/jcajce/provider/newhope/NHKeyPairGeneratorSpi.classU]sF=(Ji+(i !LC'N1_}孢 KBݺ?/L3xxbzWƱOftW{9j sy0ɩ'wl׎6Vse]_MdG]1!)ی]72ܢWbHZ㢱
y1*g[Xw{܏leBAmGU=V]\r,ۥM#0J<Adl??葃^ʮY50rnU?Z"6Ӷ̓塈txPMnq F(D+a4(\XNрU׿:c;&}^.Enᰰ{A0,|LF
;܌T׋Ԁ~AcerR9W^SvJ\Q	'%0&ᴄ/$|)ጄI8p>cQVm %k,G׵R$aƻ:Q^_M$FsCAOBx6Lw<rGf.`wSbj'0w9XTAR0+
cH+PpU|]W09ø@ƼMan	0#w2Tܕ1!$Vd|%ܓ
q	K2.cQea24(cI{EKOp.2(8g觗Bx(&D>dȓ	m@rGX^akZ.2xp[$1un$?1\!Vku\D
=<
Hu}1i\rѾzN;ن/Q!	e%g֩|F:35<C_i
G8PKdm  H  PK
      A             *   org/bouncycastle/pqc/jcajce/provider/ntru/PK    A             @   org/bouncycastle/pqc/jcajce/provider/ntru/BCNTRUPrivateKey.classVmWG~&@EU֐X*%5V˰d7nW99CG	ܙ<{._ v8Hv56({NF=d4-a`'X5sG?"=1+pU`>++e-]9+EoVbACw{tF<Dۗ%7Zۄ[.1te*-ΉB	)q:Lz2Bg;D,|'|-#8,swyN*1U+\7m=5=eϴ-S UxY*Banߛxu"XnƦ,*VNsYFJSշ0`;y}$](tZw>[~jS-{nyNEP_cΩŭxf.	nxC$/5%^0nZ7^c99&Ƕg[n!٥^ɠN7FW^rرSwy:]ᘼ@%Oݡvu1s
༂w}(+H([g40p#bgc]oɰ|C_H
|,;eHߴ$O7RlHp׌oVZ4	stntf5?@r*q#61=[-Q|i'I܍5&+7A5ЎV
]tKsm"0{FZqLiCFLk8Ѓy
X8$H󙊏PT\#iVq,J#TW1"}#ȩ%`Y%*ƐWq_H%}^lǘ^Z}EؑdbQn aC`~\YQv'=&B
;x{0iyj~ݾ\'xb+ioL"Vֺ_ћ@r*
k.:[mYɗ(gh~	㛄oWpt4ta Z@?sҔOeВIbCaQ:P7?PYo6O:$Ջp+l"vӰaɎQdOWGSp=(p SaD+%kxkPKcO  J  PK    A             ?   org/bouncycastle/pqc/jcajce/provider/ntru/BCNTRUPublicKey.classVYSV@Bp!	bl!)HYYʚB,Y2Z~d%L:?ӣ`!)3>w9w{._ QXFDWڗ+q)H5fhS6M٥eBy;(R']34(ZbEw#*μk
)ƦМU7;* ު9jy3zmiY^P9p[bf,E@)*p6<m7EdOe`fbQUb[-noMW
ye͔sZt4`h+᧍,:T
3~Z7:RFNйmϚkd+l7@ilUq%i
n;*sw'rQVd*S6˕,e7Ծ'Lq1-Jij{
+&WTۏ/EehY
8)×qmjj̲xj-+ZV-+TV3j' 	+:|,
LH$sbȼ*y{gGJteζ<YnIUΚ!#3]|E|/^r6|iVbTl/raCj51$4<f
:}'{'7ו-LHG&O4{u Sz6%t`ZGx!sc^5|+&0E5uXI1-pOHV=1lKO|GO`&LquVZ<~#[tj
 A|M2
`ء/S}KcKۤ(&b+ʛ[FiTvyMZB}'DK!#<!xF0Bv/7FE<uљPw!=?]TDy;S42e{n-CTs퇩R^<03hB2t1?x{lFWM1*Z\ aodB\sp:BM,,ogX,K?g݇ȟ:(^LԶdbDL%P<@?PKE_  
  PK    A             B   org/bouncycastle/pqc/jcajce/provider/ntru/NTRUCipherSpi$Base.classJ@ƿicW^`u$nX>%Nza
3?_ .0 b'Tf+a6oey]M&hk.+m\KCx*y%E%)uvq\˻͙nJF3L<^؎я37<NjHN!RS2$${Zx<N):c=lSuDd|>9=8<!v=PK?   c  PK    A             =   org/bouncycastle/pqc/jcajce/provider/ntru/NTRUCipherSpi.classX	`^ov3@X q
QBժڒq% Mma3$6,z
^V
=]h&`ikK73;{HcK#ayj$,PiI8]Kh,avHʰ@CjISYݵN5AԌeX$6ԔڐYS)Wْ0PɘǰHI7cѲ95:CeÒE72x\&yh\h_N$buV>(oyL1]-6#7m.ogۮzTRd2a`WSNDݬx\hb]ʰ=mj<V+kr3Ъc֌ZkZZ9[!F\CbN{j	ŦүqMIfCvh\S
hBRtQrh'&R	4/k'.j!hWjf[<V_ViC6m&f1-F()=)7.\mS\\
¹aZ|%0
5jviQCif^L%(43ǉ%kY'#*DQZ .e=Lj6gSv,|R)UdDQʆ>
2؛d8)k}j|їtcةVQ)֚{bsmjk*5O0ǍL蹾DxFiX-fc^@^$Fb9NP,)ژ9Ժ"BnmRռ5,.SBMrpF!oM+wc3>P0K
)2%Qc(i&Z^gUSb[]ɘ+pn<(ګjn-T
lKoRf}d׃F[ÅEMۧ%j,mWjSY::wt_'w43&͉)3YMflEz/FC,ұ(/	׼]tOd&-%Qu `X]%Y%k(tH^܄q6+sY؄8%Ķq[0_g?CRe{meFZZ.jSSZ*g6cq+0RXaJy["Q=;´.N^L(λ^)ؠxۤT攜kU
UB>g4|iwc	8.Xͱc#&7qp
pJ8P96sD989bqA#丆Hqizt_O"DdqNT[֦ e'nd=aI95r˼%gMjMCgݺLk
+XZ/-֘Z.h5 O;l
o)#Ʋy̮s"eS <y&ZxkTd)e(J뷧T Y`.+ɯkd
8w<]]&y
]^O";+)΀)rSq<Y!M>F|P
ыxx>*cje(8Iƙ!mDiA0_F+Nq od)edlD e\bY&qFd\Qo!xL%N|^F; <0 _	AK\gF|'pTgq 7 ?;.An6A#lٍpP~~xJ Y <((~./x?&7V /UnU_+|
㛂<C/i$ağ'[Wn+i5SB$j)VKiZҠv6}ETWC
j#Wc0;@#b	13zF Me2^bv͛sewcd}Z.S`j>)Hz6jL2ʬu89O&,+*s*cɻ-[Jƃx(}._w,?ÌNZoFY'XH%Xਠ7~2*K?ƺfvwdÞ!g?`EWEq̹Nمitq2gZbN=Ac8g<={`;YK9`}~Q\8ڃSaDp|y>a*X:('OLaHLdY-=A9.  i"~~%i#P8`\@ޖ%/a>-?8jOy˯ky)J,h44q<8n帙v;@닢YNk4pcO00ߍ;ŶlKt,M,dĻ-xHvcq!>m[	Aǚ
h>"aAI䅭d@K&eObsFYUC9a@4b5ҙ!(C<,Qddt\-
pY?f?י-thǼ	
}V*nF	j.$28'z2U86Oauqou@=qJ'_M
㻎*XHUlevU${#NzfZa|yސ2ͰQ6#*1q¾&KtDa>=!_W8%k#OX
Ia$a#ZK+BaWCnsy)Z["E{]ˢ0b6*|j,w2ٛ$  duW좞oIONGh?PKaqX    PK    A             A   org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyFactorySpi.classVYWF9!PhhHjc@aIJYCB7!+0#w9=i9kRޱecl	fwHo F
^4zE-rjguv>S6yk80#@Kw	MtUqtӘfiD´m:V9I'4_#xDB3v4#ڂfhh떞ɓ;q]eh)%-%*hR;NPR04Ya8hм9V@S̵79b
ՈaM
QZt{ֶĵyZ澒RdݔU-!C+qňɮכ\4X'f14&-IˋFJ뻴֋޻*dKg軨,q-BZ⾳
UK"Aѡr}ӊ;fPӪb;qMVlcXSuGOQQՖEcdciq9T'Lž쫚̔NygF*XFL#QS&+\$^nJs6.gzs[aYV^ G+]{=px#䐩岊S_q)8*Rq]ŵA> GeIlZ4U),O{pǸ`pA0^-=6! ӅkE*OGO\	tļ.rj)<W>tI>t"D|B6C;hA4Ǣh>+>5ƺh>>>sṄQDE}./$aK¸PLٔň^HxEؑ0m	3L,W
x
<k$Gnyz+.l:z$6{=d8'-é]S
Zge3ď.,&uVBsd_k yzv8]0/3,=%)](}ji-,$0[j[Xui?A9ZV9Nt:ӊ6<uHZ_t='8g"pĐ)igcgEyZʲ>ȕo|+pPڻwz/%S	RX}8mաCeis8V(4W@{SPKEC  m  PK    A             C   org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyGeneratorSpi.classVmWG~@&,KEP,% תPPQJDf /=[ΩK?g=p̽s{gv& NZ"8P7kޛcMcR
Q"4Ii8iX7°gl//8z"௡BsZt)Nߞլ`Y\ȰSX9%WWٔ^:C+\MBwxv㖮9r«Y!C(Ǩ][XҖXg4W[S@MJʌkTILa4t_m&BgQ[&HifړVusVUn@yg1V4VyT'
!2d5EǳĮTM;C&w/g#OyDV-nѾ$QV	%킥u-b3T3;u.bQuQEPO_VvʩGR幅ٹZ}^1nSn<v^o<g^9v_>g	뮋/xu]HUլLPZVTCGG Ǜoq!G/Gc0%D)&^(vz'j_ss
+GݱzCչP~҂ݕ#o4zQ={)/ʰ?<_8SKZU+OG$|im]۾]'(LhL빛mQ/!	Wю*va\EU(hRCNUtK
Y\KRb/R*T'R:lFWfsR\Sp'SB(u)nH
Җja|$ENR
ⶂsXP0g7y;KR}pbigV_Ԝڼ)p7!4ЬA]46N42iHƉ_Pq<JW1䑘9h?bߟHx$Xzdf&mͭ8i`?~	;񽟆Qe+$Ԇ b#B将XHO5|651@[mlj|/1YǩLWS X-E}P;cX]	'8K3>TUҒ%´(ȴ~Ʈ&rSxty=%sr8qtS7ʶPK    PK    A             G   org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyPairGeneratorSpi.classVWGE!
Fh`KA
"*"a=2̎3(掹x$ܧ(,"%?oK/<UUWU&LC,b
TPܡuCw(HL
{ #b1H&`qH34KqX[d(9D^e4JVdD@yʪO[D>K%+Jxk	hjcAWºQ04W(M\뚣YSSV	X7*b|=RV(:N)U3=bX2p,LΨuΘ'3zh$Aed*sē!rW!a^:dñCPԺ-]BMښRTXP/@vm74Rg-uX!@$jcb;aͧZcuc#tVKWtsHUBX
1g1UeXj,=:kqR ,Rے/=KԖ#~\sɠnIMҴ":5qήy!l:Jq4,dæH2w5Yx˸2d}z0̔4y((EV)u"IRlzMCUem,bDJ"VX#RzD/ZD"6YODV?k[O$?OZ6VbL֔`9ƟxYu?^+g3QTfe个g!H6nWK<mgn)>So>wG>9m~w\
T&[8[\5QQir_joSڷ=S3#L&=s#v7YnhѾLci}udkU^KQ,cze4⠌ɐ𠌵Qp:{cX x7
.A
eᐌ"Q2Jq'Xe3GexLF3q
 L?,nFpbbfp'%)	8pU$t6.a;vJ'cx^N<-/K؅7$tn7axVB^/J+9p /ax~4wE[&%W,(qRy?QyT?;RܑTT"\		ZyPb;`?M9gg|zPx1`'Oo&uQw }p/l&󻂛q`cqu\/BwN`_n<n^uKPDl]IZ:"07X@J_Dw~?zƯ$mQiZ#	?Hn4?7rI.`ilnikc5|Pq%rM.pr;(^qB'7p݃#Wv+y7Erѕ"ĕ"ؕ PKߓN  p  PK
      A             /   org/bouncycastle/pqc/jcajce/provider/ntruprime/PK    A             K   org/bouncycastle/pqc/jcajce/provider/ntruprime/BCNTRULPRimePrivateKey.classVmWG~&@ETj[CbB-X@(j_ݰA_?O|TC;K ؜wf}3޹/ s3fehH}И?Д?.
4bZ7n2w2sfIenz"w~!&=#&W+H(yXppĴ2t9\Tikfhˋ%^)zgW1-e\
yɱKY.
+l-Zn{֓aEbŔ8qyr=n!3^"/}+|+#آ,swyv*Z1׸nzzv!ʞi[[ Ux9*BawlxuXVA(rڔEqnCuW¨Pivl/Q5]_/?4\}W
pe-ϩ}1Ksεixf.)nxCIIZsbCE!-qCuQEϭkf^8uIOD0KU3rs^2a{NMkucUZN:ݍG۷	)(U
Vw\PPЧ  ࢂ\bDX.۟nk4Kd]#ֽP|DG/nG!~*M/_UK= ӏa4דv:'ud^W
 Bu4(-CP'&7}̭(>4Smݭ2%"<L4äSѨMv)NI95@>pSÛh8
j8Y
i8:pGC+`wLG'W*p_UsW@E)*Fnyװ,@
C
*)ox)o/Vh־myx8˷bQЀ.~f͟ШH~OѨ&Na}K,Y"0Q
0?HAv=!#3&^`ƽGU0FrhJ]I
xa߭7ASŔ4?G)G[߮;2!xjhgOÔABZ@Gʧ4ChJdaq[:+?Pـov:Fi\hlM$0Ǩo?
KE|8	3lе3LJoy<PK
ر    PK    A             J   org/bouncycastle/pqc/jcajce/provider/ntruprime/BCNTRULPRimePublicKey.classVYSV@Bp!	bl$
)tȑ%>δCGuz8a.;YBb3Z}Y_24&6&ަ@#9clA[^\-,j%?xfv\3(Za%w*΂k
)ƖОW;* kޚ9ju3z6yٲKՙ&K-3b<E@i*qmyְn(_/@ˀfRYUb[mnoU˫	"f̞4AY:KՁͻNԹQ:9p|
w	ZNVJQk VA$pUƠG&?G,;Xcʆce^>ٸ꼖e"%:Vz5/*fP\[\QN]dV]-Z5O0|MXAv3,^RFaV
kUK*UZj%;EwmkBHn#஀^
H>{$3drFn'roB#Y@=7}W;w=x4įJ{#_02uKN }SP)Lҿsyu2
	<aWJ:{sdxs=?J.3%4QB'=с&	݈JApDBz0#<Љy	W 
p-ǒXĺ/
XkA1-G"HkN6EL'w6xnciU_DŖe%aD_CFv ~򒧹D{͘%&"4N~k
$i`^c'_#!HsdF9O<&tR_Ը?#:l7(~þܞOzhMU'd=!jj^R<CW9B2t1?x{lVW7PGq̅xW:CX7r!=5y@
"O=COK`C 2iWx212J%P>@_PKk  -  PK    A             K   org/bouncycastle/pqc/jcajce/provider/ntruprime/BCSNTRUPrimePrivateKey.classVmWG~&,
ԶĺZJAP#!Dت}6,&awﵿ`ϩ?wvɂ`sޙ/<Ν[(CC?x		Th=+ezc&='7,ٙal᎘Z+yqsŲ'\##'fD3gs=P%=/x[\:'Bn@-K]pB[xa&"C\lz2ZLNQ,,wxZm4N$`JY$@UbxcsݴcC<ӶA:)TrUhwl+{5^Xֲ>Y஛)nq.i_
L;Eg距e} ] tZzgηfS)ynyNP79Y9-CWw왅l:DLx92p૆M(-qC5NVru3/'&fǥuЙgB<WͥU榵1ya*Mt'uƣ[ׄh
z)xKyo+xG
.(+WPTpQ{
.1l<	oa5{ޮQ~P{|xz-"zt
CL0}~U5.p>(_O D@* ɼE \:C!
>V1TiLUWD>Wa4ЂF
RtHq
MΡYC+
#a75ЃЅ㸭w4a&pWT|{R|bZ>WqXB
bLƐWq
K*>J(0TLbYu|!ŗ
>孓[2ז^9gy6_,b8Ѝ֌<Y5iu|b4gX=xߒO,>Q	|~<S
;M=Hnaƪ;q_3!@d745n$įNln»[na'SPhd4Ml|܎HNC4L$4^&A[x|JO-l(dvKWg0"tM[f{4bOo]7=46I4,u_X!=p6qqKgLnC n]aVL&6xPK    PK    A             J   org/bouncycastle/pqc/jcajce/provider/ntruprime/BCSNTRUPrimePublicKey.classVYSV@Bp!	bl$80&11K1K
.0rdH2}!i	Ӈ}h1pHCÌ]wsu?0j+V342\eh
lL16MF39lA_^Z..i%?zr
[w*\ghS,;3fQUʦ)[&Cg^YRy~0\,Qkae˖e]*Τ^0	]h63)Z̘Vm;3pC	"xZt4vUGreUaoη"T-&׋|˚)g{Zv4`gr9T
3zZPqw=΍ҹmϛEqw@jlUP)qd*țĠTn;*s'EyGZvLpJ٢sn,ٸ漞e"'p1-J4VF44/*fP\[\QȽN_dV]-ZuO0zMب~3,^RAV
UK*UZj%3MwmkHn#஀~
H>{b$2nǲoBcY@=7bٳWbw]x4įy'_02
KA rJ)IQ߹@%lN9{[\2<%RZ,B^%D H	Cx"	}IƂXp_K6L 'V\.bC(E<+~1oE$eߋx.b?DDLbSzg62YzHHʋ9^^曺~"E(dah!'7yK׊9Z$]F1P~%Mkk&iѷO8BOicB7x/-03#Lr }7{yT!dSuhl}s'n kU*u@
e8M@{%$JwouuF|+~p8*xsn!:\!j頼A(<#|><DԹ	6/I!'!D 
PKtp  -  PK    A             M   org/bouncycastle/pqc/jcajce/provider/ntruprime/NTRULPRimeCipherSpi$Base.classJ@ƿicW^)
"B)hvI6q7)<	| JofopACg83t5C4}=Mfz
+8]ԦoR/o_jm
غ?ȵ.^$/($ήB9njT6#rJ3Xxb;D7Dp<l^(xZ;m<F;VAH{cKJ8AhwEO{f"vPKX    PK    A             H   org/bouncycastle/pqc/jcajce/provider/ntruprime/NTRULPRimeCipherSpi.classX	XT/3}ETtDeP"YH0M0:̼QIli5fѮaЊiئtI}ڴMl 1s;s9ǣ/=x٢^A
)J2Pp
V)V@b+xDH
@@=]ZTM=hpf%Ucz[8Z$4V#` `ZL!Fx!^fKի/k⡍y՗51#%Mژ3fz)X缠4/ u-=t残5k6x$pt&_7⡐_7~z`dPhB2ww_K	Z;g,ikK=hZΗhp4huR(Ӎ~
ak<qajFHG"@HעŁ"Ûuk oܯhx6ҍoUCܪMp`GOjVN1F}bm9*QrTZԳOJct1obͨ0{@T
%&hJPfSMOf]s)C35#) ɺ67w >~c1sLj"b%mQr9NY_-.:
e7|gd|wJN!DҐ,mre=%z(%˘VbQnHY2g˴VflXWϐYW&9ْVWf:=`ʧEق[|.?nD#fIw"c,oSNR-aayU>UYR=t5ŷm2KƊ.b{+["7G-3yvC:MJi2	u 4w^/}
4
[q#0bfHOc
=ztg0Ǻ m'Si8bKK{SncǼ9鐩J#̵SIX}!y09nCch3\9)?/G/rU aFt:{7wuӔ\mOTozVoɫxw;MiK]jbǺYfNLHF3MZLW,`Ȫ4Xd	Fa:SB"
LжK	]C|F,M9tcVk@eZ $;7"{bemPpj%%z$z%6K\"E}J\&&7K\.qĕVĀĠDPb!	C",J"*0%;%vm}{q-3Iڑ4.8N"
l/
d)Mdh^|ίgCy=򫜖a|$Mg^'ɂ|ɯy56_3Ybpi.YY
d|:3R:YU,q(ƭd-eyU|rXkVO±K<*qZn:?3hLWX)*.6<Dl0"으pY"<zhx$R9G
ٻe؅>"ᨹTP>ՙWbxJ~5c*tRяU
W|BEU\ď*`U43ia,RzTbc2y;T؀Ohcbi&a9]<TaDE+0ʳ18_Pq
8*:q\&<b=\<\
G`U&_c	/O?z|L
<b'&baLndr3<wG/>|؏o0wL~=:0L}{//>xa|cL~GW&+MN1ޏo16xɏnVRt@͠ۅu -mE8HqЬ+|j9@Y9h֌<y j!Y7Sҫ艥+qs8ſd//
Dڔzm)uQ/s'ml=!,a9
م%sa΢Uk/c5
kgcd=qY{->ueQ :,<<=g혨`>J,*LH]".TG!k*qRC(mt	zwG,=iS{L{-;Fv>VqWV8G`T&Ĝ<}?Q5=\p`	̄?$_9}XZSwF#xco*d%iѕX0Q!\t>bKYf*͂8n++	Q/E+eˊ,$<ceh,k$Rc!,od_VB{'bFuB΃nd.A8($nA$.s3y>ʼׄSrci+]#DdVǒ%ZѸ GHG}.vԝ@	'LPs	0!;vĢF8\6{VT	F+<*V@"硱JޤQ<>O|QqcbIc§ǭy{>7DlkY	sZ׋/kZ3Fn
Kk/pe=}	`T6uq		10 +G
9PEo!TkY=F6qG(.BЬpnT(E>*kfS'\B'i,7GBۍBMpBmJ<%|Bj-荺_TAU(PK!    PK    A             L   org/bouncycastle/pqc/jcajce/provider/ntruprime/NTRULPRimeKeyFactorySpi.classVVG͢
1v$0c@a
ǘl(bf<3(_|yN8'k>)I$ҙ^nUߪꞞ?W Ώ*?֏:w93`h3P)e=6L{кnցٶ'm-tc5ϰ6{mviĭBRb/L|msQQHPG^񭘡3޼HF
CCFh#()wk?Ĥh4.P-p
o*.BiS1ɜzYN5Enj	M5,unyPL43f<Υ1h8nĶОָB;T̄3)<tEM,e0t^r湖)sR|%+Sl΀J [NTݲ⦞5׋	Us~u2Oe7<#AF{fKA-=H|kW^gEvAuQS'z,,3!hSݦ\/"7mJᩥUE0sM7N
v߳2;.=6vw8stp<xPiCGbyHz!̪nK,$ko{Go`
v>p(m֓u9
+*{
خs3 c."쵲uG#'Y.\nda<J:p9Gp@  ZqC ZS)	3r4+hl>
 Ɗl>V>>Q{⹂ADd}&aCTȑkYW^(xMR0MT$͗Ux5<(]t]<tYVG<M[5yѢ>v85_ӬzF}e	v(KGŮ?;BG[~
5^?^:FO
'MO1qPW]?^)DRؑ ZRJb7sLrrqE<!mF蹅,,iŏNx
fBrNeS):MDԣY:?WDg-
#·A8`81i'gCgZ8ee&sE+0dCD;|o-EJXeqh8qe5=~~nb|qzCǣ<!^!PK#4O    PK    A             N   org/bouncycastle/pqc/jcajce/provider/ntruprime/NTRULPRimeKeyGeneratorSpi.classV{WGIX*XKlXEEJ!%Mim6fO9˞SH[)яQ{g7/69};3?GC=:-!z !ZenİoT{w5ϰe{lql)MXg=KhVڰ	ēy#U%Kh^.4t|5'35?ک4*#XcLۮ=,j.A	KeKY#K5e-K:׵MM55+Θ&Okf8tT4Vr)Ҽkf#hyuL#UwL:ɖyǳUBW&CBqO KEH2-=Q6&OUhZ+DR	5;gy]z&?!thsk,um]lGujnba5~Z=i1PQw<,9eVۙwPđEko)VSTݿwJO7fGgjy:ufaϬw1g`C"0\b2CE?xb}zߠ}HX"ӱ
\JL+.ӳt-(9*RbrxV\9Fc3;N\1DB.^%^i2~PI|e)L$`M
Ra=\?!joo/+)9#e2|D6uw0>VPFAZQpVu
N)h'BeLqgpGA 
NcFflNA30EA	$OʸL_ʸ \ƀ
`U-<+BMm<1e`ױ,HBrN/+o,h}mHT	( N#U$QЪFIp<	F&6 7"x3OB:!G=X?5޽m6D웂-	n]%[BDl	 Cm
Cl
PH@
:İ{CLr w{dwq#k_ACm`zKBCa>'"I(﵇_>n[It!`o,
)/l XB"\F%-#CBbo|IɰH_PK=Y  
  PK    A             R   org/bouncycastle/pqc/jcajce/provider/ntruprime/NTRULPRimeKeyPairGeneratorSpi.classVWWaB]UZbT* *F
48ؽvjU97I4{޽N? lD1b,)F[ՐnCZ`!_O>	ҎbOI5C[ۧ(EtA v+lWC]R"d=>L,JxCn55ji82AWBzD`i_4r5[6W	X=+ސb]TBmV0:v)U3m=lX8-c=5:Fg'+-z`(qI*sw'.7L
BC=Jd`b
(9Rö!ڴqSk.)Z7h4hRkb5o
zQCQҼ5bao[ddNfjnhV3Zt8_uUjA=b[
YɲTAUKsw&vg')vڴLK1%.>
*s`HFsn;6N
'iiWҙ%
T.\qt;
L/O7uErkN,DA:.n`LmQNEV[a_fu(LTɖ<Ѫ{T="X.^+DQ)b"Q-FG:EԊ +bz+|@[ҚIr_zO7"i͛$-Yh_f'l)5MgvnHEUul
_Gy6a"R=LcgM8s<#\D9\Ρ9qWvosֺvoPS햚lQTsUꌜ9-fMLi?22gmZ>3dn2\|v=I^87;ʴE(2p@fȐUQpj`X?yϻ~.A(A
E8$Gd" nd3Qdx\F=q
CL?؟*.0pd`!`3DNJhZp4kKhmxCC<*mx	xFB^oJN<.(a/^(W%r4"a?^.ax~w(~׳o+q(TB>
̧P-g9#)E8cf@BO~	|?1S#I%dW>h
T魔N?
gv
D3~joz&+psqG2@-gr81|u'FXEDrӒJǦIy<U:{(i)'mdeqQ63;2=inFgXoqtjc5|Prrƹ\d
BŻ7qGeGK#y%đuI>t$o$9wDPK}Oߺ  
  PK    A             M   org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeCipherSpi$Base.classJ@ƿ5icW^)
"1]
nM},O'=8a?>aG3ޅ6dӽpR^fŧ6keqUbq*Uhk&ٶFMx"y)E))uvqӸ6#Z3Dxa3B/Bp8[P	qY [1HNAH[cK+8B茑 ߥȈ鐽cm=GROOyL; PKZMQ    PK    A             H   org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeCipherSpi.classX	xTo22y$@ @J\[;-	G D&H<ɛq
Z[ڊ{Wlk[h͂i	VZo}]km=7[f7{9s fU
(`zK,ULI
+XAA
(\""Pi/jD|Z(L`uSczH`/LݷSdBm}Icw\F2_,-̈)ӈ6@xQ;74\\7̗	=fz.X6!՝[`{Gs;4ÈD2M`O	9lvoHħhyR#6ZH87l$|](҂֊&uZZx
Z?]
tBؖG!lWX*]_Z\,5B2~(6ifB65ѵaCjt=
/g43@WG![`N)iƒdn/O	F'B:3Ya:ƷZs3̠~$Iu	ʊ~pQɬ
d 9Ge4	S3B~
͠jsSzF=87ΤWJT~2S.6)ÑޯEVav-m5ϙ
A
[CۥE@ڲ&d)-	M^&#4v.cvޚIpDas-Zvɜ+0/`}AB<KfEAB*s%4/uE@ڧ,k̝LP``eC13֮9"k
	'K-eaiU:9R:ړ۷V#cEf1׽P-^Kmki}Y;u:u*3	u ;;6w\7s
EmۢI#4fDOc5A=+0-'Si8bCK{S.cǼ9鐩J#D[<a Zw!݆>R?䗥wYyzB)3 ټ;7v'q5nV,xGw,;K#ھkNĎı̴͹č,kz-d)i#Vm<%K`u<
+<}QhY:]ICFO3s
)'FYrh~tVa@Ҟ$N:/RceeP0$(qfD$JYWB$"V%.TB&K)1(aHD%bI%DRb=6LVqa6^$s5cu
F"KkORj+
 אo|㠆>
Za|Lg&d+'KLs;
Csg9
Px[Hҙ2A-ġ{-nj)ǫBrn7o*X=Ʌci
*?}L7I;?;HiLWX;
)]:14H\0WoZ쌂!8=n!rR9
;~؅>"ᨹTP!ՙWcxJ~M7*t|LE>8❸_E;Uć0Y*:t2Yd%x#jYnHۘIT'Tf'|L!&SтϫXyb{#*1bRqU	_P_Tх#*6aBUq&)=/3
GcU\{p~:'΃kw
~L^\z&cw[3neƽm&1S&|ƃ;s&.ڃ[7ß<L3:|7|wAL~I*q)ӟ 370uaH:+vMhF-ۊqQŅC"Z"Z-j+G)GXAjQiMx  Yi4bq\;{Gb7<UiG7ꪣ^J(ɵq3Fq؆R,GQ,lqjufͱfQQjt̟':sǧ(NizOCCOUa<<=3|1hɤDPD&$!|E)?TF	j[Q:"j"Cweތ.j}G9Fo=o8VT
Y#b09[FT.80΄p2W&Zkܖq~,nj9<SFŜa<{ ;Ʊ/2X-&j}8,ݵ]xJ(9k{JGa@YL._RBMG 1;XdQlXwg_UNkY׶xK(搕ٴR\Wh薸GH\'q{$n $.WLc|WVyF	,&<to&z*;0Ŵ7⽖͎9ɗR{XLc(U)Jճ{~DT]vcb5{[zbVK+Ȩ(.oa$B~7u"~u{]^YG.ZcUvt*켽*DlkZ42n~'Ve̓x)z%}ޚ#o0f":p̲^
1oTT6n.FD$ 7-GzK8P7Eo!lYh>B68n%pbB,qeT^9"<UzOs.
O24K˓F!Ϧ[VaBmQ<E\EЇmY~=	4Z(эZ){/펓P?PKR  U  PK    A             L   org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeKeyFactorySpi.classVi[W~/Kn
P
ui6к ZR0af/Jly._!Igr{so~i?q] Cc0)Z04W"ˆ|w
1,enlkX3t3,smr<8_`P,
ROma&:4L@<1ʞ^M:٢{(q~`Zp4MZk3Ąh?tڟ^4.B͘[	A
[3mfvp'\HjJL$ֵ:([&f[STʖ
\gLFF*!+cxYuh)#AUxc况Mig9/\
j
:RRW^\9rwrꪕ6^JkQZM32({Cw㴹f14O;XǇ5뺶vA뢦=#NMAUZfF^uPs6E%Htnc`|bT#'.ydPNOY	i$UYe^>w8p\q#1111̡rpґfi`1T+s#XklH^3c8xήΓ8ȭw(
UUbl|St8dcV^.5>e8'Q'yμCw¼ztOpFH%=- l)tc*x{HڦǲP3cVst B< E7>Sp"d`+aaI
lq _(>DI| ],.7Emא^ָ _8͠_`jF5/t`
h`v/vpuOrg_{tݹ}rz{0sH
rhga]h3JÏD߅>ǭHsm"Tx\U#Y|}$eerhM
RS=9$␜崡O
r~"[#/HNt;X؇o2-Kn}WPCA!f4^xxT;Bj&E?C*0޴2QN}<S.ak7OJv5PK.  #  PK    A             N   org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeKeyGeneratorSpi.classVmWG~$,kT(%VCDQԈ6]6cX쮛
'{N!m9/ПQ{g7`sg>Ν~p7]t?t?<1
FݻQ]2æ决9۶F3H`)u+/i&|OyT&$Us\sKΦ擦ٜzN[	gE1FZfIp	]V5@\v!^έ-hYеnqC5YiHǖm?ՊƊY.EBU<,r-57UCOz˝*NaלZqBW$l]B[U#R+RQ_F͹k	צT*<[kSO*!n93f]xD9؜:uM]x!F=3򲚟\,vV(R#wgZ)urg҃+bZg9og^A	ێSgl⩺'JMUZUՍy:
jaZͰw:3\`dC0\f
UC7EZ=U	1=#z>w~uHBHn}.Ri;]K:KʩT^v wE8_QPWb{*	,?鷁U*l
Rb=Rl>CZ #d[wDA)xw
T,H+B
Ѡ3D
2aB,Qpb6'f
Z؄,	rOe1|&W>ATu$eR <sb62n _2n㉌a|-VqIUƭ=r;=Ƣj?PW
K)N:	Qo$BZ(	n ~ATQ9]&[uH"tVH'@hl=`cp
.{@%#ـ>dk-;`	zaMV

HtQo413Rv`cxaCIZ,zvAvi70f:$>s	/pj8XD|#dq\JGg>{c)ֻ{8X
p.:`#a	pW1031`U&#"PKS  
  PK    A             R   org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeKeyPairGeneratorSpi.classWWGaB<Q&XA芄ja,:;bJOsGQXEK~ߔetuwuW]5zLB.ĲB4Iȯ:$MlP(ޞ}{msؐ -2ߴHoX9^cW3mGclPlm8LnHFNFEB/"S#ѧYl##NL-`
FY"5BӁ
n8
zKCڈh~-n#Ætԍc-	gmZ~bLuDAG;atF1փÉ$n<|WrP*"pYXXѐtG);Рa'i)a3fر5Xa1kC M$g-ǎܳF1ŏK:*wvy-R$ߑqE49ӈWҕ%12::5סng&0	iN7dJh.L-E\sVg
RX!֧fJPI.JXDZ[S[7H])hR76&M[fuY	z'SSO*o&+#a"Cd,q2VʸW*e˸OF52ʸ_2X/A2ddlʓD[g+uSOJ IwHNR*Hr&Ier~xIe'ӓxie+f{6ٔg쥥{>#9Wi4WY<{	'LH\DY\Aq.)'m;U4řgmi9-ggEL)?/mV!=崦o$2 .kO.GUM'K?/ٛmeZpGE5؈^
VQ>0˻^wKP*Jp@E#C(aGT,Qx1*Wр'T܅'U,b(*:b*N, Cx0`21+6Ca00PЌ$)^W
[yU<
:N`TŻ]x9xQP*hT>\87QI(pcQ:!wBJ
%FJ)b@Lʅ|2)o\SE8>pMqsUaO햑]>B,?Oo&t't	?@I\~oW<Lcg?:ŵ]F|Sh`>+˛&>⫛W(aA%M%sy4p	E+t&1v%EPJbZ}KX'16'3;<hnzeocMWůQ|⻊0rSFW5)1{qXH.	{I$'Br&I򡐼$HHމIbPK    PK
      A             ,   org/bouncycastle/pqc/jcajce/provider/picnic/PK    A             D   org/bouncycastle/pqc/jcajce/provider/picnic/BCPicnicPrivateKey.classV[WWN/Tj[CbATK`h[ LWVEVkTW"f}3'_ -heh'}_L04ERHͷL4-N/ˉiXQ-eP9R.1wE3;fJZ6CGF,Bֻ/xfniMP1=QR6,;vn"M~96^e\h1e;9NX4OZ-#D|s2opya[U2UNĠ5u֓sLb8[$|K{mU{}c[+DMULvK3F)3ΊDF஗:w=nz˹v7aS{;@7*W?xX|3yNqó*k Y\9j5B7-Ji
3);,$؛fF8Jյ2\?Ff5hs|Sq]<@R<LޡMA>(])x_%Q
b

.+@TVO7pG=@מv<>Gg?U}B+zP+kWiLJ5.5ÍZG=jڜ'j[,aukj:dEARybs_N]/5r~<hzptLihA)NJqM.YC
W0i
o#f4`Vyi8x5cx$g*n_Ƣ_U)*FUI2*ncYXU		/&n[eIǶǍ}t`
 "Fp
%4.Q#[V'B{	;߃o)̒Ki$!{CX|/`X{?jn(E5x)
M[=$fb`m`w[
[~?P</Px uFFck햿s
NN
'#a zBՓNm?)! ]|SL4vxuc>4v&	#ԷTuQfdL.WQ3
#4=Faxlv`UPKV6C  p  PK    A             C   org/bouncycastle/pqc/jcajce/provider/picnic/BCPicnicPublicKey.classV[SFրBN 	!bl4\%КKC)ȋ#KF	~LK>tkTG1Zf|v|粻Z? 
/W}SM)O)H5n8ŒF<fxN3%n0hx*`\]*mFi1g&/3>Z[uWTQ1;eӶ
 p'ELS"Kbֲ|[i6ZE'2kU[ٚ)|gv5Qtudhf.J3~ҶXrw}͜:mpYn;Tee
bw\C1]5<8QT.]K-_ݘU	W>x{ՍfZvO5ׄ&ׄf7s,mYaWa,\mcC}ͯnҶyz-'Y.Q#l+^:5/O>PMEm	w$ܕ+}	HPG>pOBBB~ۉ;ǈS#>F/S{
#qZji_7sD38]Ə.qy(ą<6uNa
~WQ
?S"CNcN:EO;o/\Qd|ihTvOtIA7
bǬ|i=S*ĢXRp_)g-x5b2\gX2FQo9d2z[ؐ1ൌM[pDkAWlګy^|7^"F98TaVGx+k<n-B|d7h7̑-k5r=G[!ZI`bO01B7x/M{?1CL'?5TPuhlMV=?r;n kMX*8@|p +ڇ&CH.'EKfH:W
xu MB&ĵ&#t(
Ae'`>}lH`&t
w&Fn>n
PK1d  
  PK    A             E   org/bouncycastle/pqc/jcajce/provider/picnic/PicnicKeyFactorySpi.classVYWFƀfMlK]5!tB#)lpQ+苝s'opBYo3;Q|C
>4C3ǻ@Cm flŔ
1x>e4>Rݎ*nS6
'aYjnnWG0*m
mA34[qu[ORG^䉝24֜hV'NPR04a8j!Vh+_1VH\qsjjİ&*Jfͺr=f(;qma$Y7ŵcUD`hŬ419湤~.n	==Y	[wST.mĺ"&
ټM.jE:K\.aR$:]
d9i3a)Uqܸ&+1"#CՓ`uu:r>q3cZ\&v5ͥh1[a*&[)/rrIje4:iZUCWpd=;8g0suY\3W-w9qtspqC GG?  L.U4@0BKU	+((1XVG/3`f\ײMt+<H.&ʡG<dph]HIo+TMa.pUGnG'~Aďa| ds~c^DXG~t`ŏXǧ}:<0hEqlII1bC4q1	Hx	3ؖ0$h#lY= >D"tbCUԃTN=ohB=/_ ~t`X	o񕾁W^e3Ln
b|֚4t{ke4KcOh&
u;r4qLqqC<%m-&鹅<<9OCxFFrNv"qNtZІOt~"Y
?tzPOqE!S
-iZe].r+@VBj6|NgH9bua|6Q-<g*g9P=t<*얃?PK8  y  PK    A             K   org/bouncycastle/pqc/jcajce/provider/picnic/PicnicKeyPairGeneratorSpi.classW	[V=%bURR(*Z
T
.]Cc0̌}_K(JŶv_@@@~0dA;ｓ{8ϩ G.\LuK6I]lVrY7ieHB`M`
F̠Ygv4C+A&\E~b	IY5XEB/6$niDQ|gE>ytۊҷMV-E»NS4Iު~[mvAva]+0ߨu`<SQn1U'r;㑫@ڒxO$V_/n
kUzdZ=,aT?'7A#m
#U6ı+taUԈt-Ì4+::)fPzaZoe;>aSxkQ2
%kF}p8.U6d7⒡*]/Z<M~]Fya'nQId//	g.}SؒP~!?sH:@o*q>#lO>)Z^<2{g^W@y[I&Q<:2aYaװkXjX(]X9NwCSGʥ#e&G#f#cdL1Y2Ș*P2dL1]ƕ21CLW(Q"'c)Nk>!^rR9,')MDꊡSϬHp\qI}MO,+'٤),Eū/d0sr\^<h`/L'^r8Hj8N^LNon5
d fط~iq.|H3{(HN)PZũL,(֚zuCt\ؠU&
6T2ca>õ2́Zk5jXVcZk	r0B(lQ!7(*qKq1UeA3BE0U\*F3!M,*C=ehgɰa7w0ܙd1vw1pý1 Ã1<ã
IUx	={T`9jd%exN*<`5^V)uxP~(qMx)+"_BMJnFjruc;}6Ͷi^NPE?bf"́ĻH+|ȦP+b׃:-ou/
=}DpKB7tKz$mZ%l8@ìa]9!kٝ8Tz?g1|݅þ8w[=zPE|RՍ3q{樈;aFe-鵩iΡ1Ih܃Q^4֓}u?I:i>nJh5^`'eN8ź4~ыzPCҠ͎Jc.)KhsF&/Q\R	>?CIw%s\0z.abaNf9%=ǂy̛`0`>3¿PKFT    PK    A             C   org/bouncycastle/pqc/jcajce/provider/picnic/SignatureSpi$Base.class1K1_ڳiӪuAv.P)8\8RL~,?JLN;UL~!7 8$h3ֹҪأX\2aEiX2Jn<3(Ob
Jh%]mSii	~$υ<T5 ^VVNEp_;IѤ((Zmyh,A$v$F;H;QI%;'Ja"p
mo%^=>:PK0     PK    A             J   org/bouncycastle/pqc/jcajce/provider/picnic/SignatureSpi$withSha3512.classPOK0}Yv% 2رmf>?JLa{!+34	5$0AAKuENdDy,ԔS&Jh("7ם~	9U ,ޕ(ĄLE*Z5OA'8蜟Z0-lXZ~Vݰ0@
:aˁMX{ xFPH"z%Lf{ڨQA%QFľFGs1 PKi    PK    A             I   org/bouncycastle/pqc/jcajce/provider/picnic/SignatureSpi$withSha512.classOMK@ngaQ A<͒n)IM,O -|3f7o/ Ew}BTe<#:8r$ГyRiJãËj"y BL	~SQLjɏ¶:Ts3X˨P'UAlg3xK
m	{ 5eV^'\eVbc!aNUamx{3)VghZZbKiѷ>hPK	    PK    A             K   org/bouncycastle/pqc/jcajce/provider/picnic/SignatureSpi$withShake256.classP_K0عCAT s2cMC9ښd>O~ ?T8D=5T=)WgHl	I 	JU;DiipSRȓ	C
Ec&fQX0FwۨXQa׿ؚ?b`X0๨aŅe.VxTۣHJ&JlcI"z[%nh~N@WbSܱPKE    PK    A             >   org/bouncycastle/pqc/jcajce/provider/picnic/SignatureSpi.classV[WW&LJD
4\
"-
((7i*5e@g&`_З>kUXҾGgf&h>۷ϙo øF}}aw&( \jW:Tp "$9<=US̩*'fe2?T59+ ʴ)fɦlf
8.&FJh..,2S}/S%ĦXNr6Kx ǪNl&4fv$HuN);,ZuyKNde-|0VuqpҬ}lvSrjImKΪiԗb|1Nt3XsWdβb
[OLx(/p4,7+?r,c]ff:6Lu
L	~'լ8EI]mcExgj[}t׌ce}l鮚7bwa[O٦e
Mb{
etcZ9u"][,'⢈ED4h*MG"Et%[D#7't?O~CN;o[ Z/_oecHwo(/{t2ftm_-{W5f9C|wYL6
	h?~u38X
RZso3N碄또PI		<ЀszQ!!"!*>$jWK)	Z$%4aZB#fx\Hq1BEwe\r1=,q񌋯#V#D
wS.>bι^h\OL0d~`JI2N-+31/fXUEL T4
j9
F
!ئY#ItE]]oy/ :E0ZL]"zhw#1
b퀛c.^3Z|景"n1hhBho*¾hN4d JrJ3M5w74!:pGxFloѾ{x!`O5ؘyfCK]+hA+uE¿4
/H;~lr,:<:- ;K.2^aTy:y!/aև<ΚK[(oI8QPKG    PK
      A             +   org/bouncycastle/pqc/jcajce/provider/saber/PK    A             B   org/bouncycastle/pqc/jcajce/provider/saber/BCSABERPrivateKey.classVYWF,!4mcl4,Mu0KpBZHA@`KFI-m+=!>^-ǘ;3w滟H ס*ܛ<Cuw1P^NF-02K]CqX||!&qKoyAcKyG%#&E՟ZJ&CsZ,|ƙ<=&4%=tG;k{ -[fvg"XfŤ,C,9^i&.0,''Yn,eIhy#TNhEKf۫ct	n9i0{rF.Rhw7wJ67VԱi즃}.y.[hykZ+AhNF6ܺfPlnCS5sLKR6(Ud9ųJ;zӢϐVLT+&i|Mne	'7|\F274++q6uX~]>,^ jsAV%j<J]$$(%HxOU	K@IK'#	[(O	gap雀;#ː*(4^Dk7Y~/-|W/nLOz
WpIwz߯@ .G8=?t3)}86(ӿFj.dkU1VERhvgN9+P1
]⚋QЉZ|<T.
.`JA\vcx	k>qZ,wa<s͒kpoi,>VeByMVd<>wq><i-?JlL9\[|)#C@wbBQ=
r+Wګ#?ńh#o`Fiک?%)rvAtk$#]la}GX`2`2BYU4^F~CMVoEGtXہ~j#м}42"	my'7
 |TJ	6o xzrI5`.c.@;wI*`׫fsY!O{ڈ:2{5ۅ3A|Bv AFvbFPKIɇ'  ]  PK    A             A   org/bouncycastle/pqc/jcajce/provider/saber/BCSABERPublicKey.classVRG=-@`mQ6,$2X$b	lQ#FfE~ O<8U	"T,dlP=w;}{/ BnE;CSt0UCKtcݔh:CxB7tg͓:==Xݱ!צ["]6D!L^hr9S5R$M++6y] W5KwDu3,\6Eٴ"/
%'B$VAe̬R3"'v'
XQen"h뤙+aKBcroq{k"Q.W|&(9i0VwFҌ-mOYFN-p^4ymB+cմrj<hNA6F]:5Y5U*%Tm~-->Ԧ̀eG/35Ǵ4*ȼ<&Tݠ6&l?i,JgHԙٓ2;ڦN;E|}uV^eӖ+[tl\N[X:/-/O__L"ᦄ[nKO$|*3	K#!*aPBLB\q)3܌y)/ϭӀڛ!ES<wGw]xnȿnh/ePs5$I|?MR83)v福!ߠ iR`;ǐVfYA+\э}+耤.+H*ǼLA\ƲKFUa
icxu_b2์GXsŏ2	w9d<1dreL##c/]-=1kzϭeZG}:^-s)!@Ev~vB{X Yu҅hco7Fy4ŶyMfB}#@+CL<&:1hߘ!bCGa5yzBR?wC#=V5]d 7ArF7NT|!G]= y
\#X@yOW
\Wkqq:DM4w 2OBl &(F"0
N6};}4PK0bc  
  PK    A             D   org/bouncycastle/pqc/jcajce/provider/saber/SABERCipherSpi$Base.classMN0iڴ!q $Z6ްATڨ$ĂHݻ8
v,8 3zfF~-Ct0i9C?],Wׅ	lɦef_VoRUκolc^
_WRJgwzbCgv\{«!p)LiO1z80BBbo?\R
%ZGΉތ޻+CcPK0jw   h  PK    A             ?   org/bouncycastle/pqc/jcajce/provider/saber/SABERCipherSpi.classX	xTo22y0@ ,ĵj@l#JeH&oƙ7@n֭nEIBk`ifoUWX9'	/;s9{<#*)`
j,VDq
*8^	
)hTТ`@ARv;$
,45"#~-c-
2,ޮ>bdBoIcG\ƠR,	J
fRfDwHոNn̫hnnP'K2q
asݼtvmK`^fQӟHbѸ~͛]d$׍PtB`yW86mkp7m{+aïeig-iie6kP7_E94K3u2?K*B]TFdgb#lԌA^p@O-aC?'zn"^{F7;#ж`
V0~MfVfXf,ir3ɓ8 E@|"nɌ\2ZgMfkZiƵCq7z	X".AY3YN8JX[!ٷ'hsXE05#ġ !NG~T
	;(8_J{Ou
@tfc:p$j`rX7|f-?;SA]a[Z[r-grIrCPuYu&Ñbk&͑PYrbLNYh΂K92Jʔ6'_Ҋ	h0)G|-ϟLPK``ew#13֩
8 g<0cag	'JSc<A۫uIu&l!ONbCMD{-icWspD1ަѩSCd|V
vwmtlhI#4fDϠc5A==0-4aD%g{S.cYPW$hKBHzkHmv+ "L~=HvƏJk]aYkUI-gxt{e`?)
[Ḳжts7SK襒Xq:,x\z/=FQ(BK%<ih.0~禧weAx_+I=NEY!w?a%/4d7g;\ÕveÐX.^b%$.Hb[$$.DoT2KhA!6İ!I\. =J*m=35$sT4N+֘LzGx*Yo@\pXvK64=E7J~וGoCLi-PbKQ+3gӬpfG8"ۺg4GmhB:yZKųHd!s@	L1k>M2 9hDt) D<o֎0i\Y"\J?OzJp6
ţ;"r7:;'c'E#ɠR3%٥GbxL~M3pPяGT\@
?Qq"7ç9LLWd5hB;\dTtc*01q&2^|C<sY&Sь}*TUQk1*aBE8J|A&L1yԃW{\{p-I&?:]1%ywn&3ɻYf6Y=wpNf
x	݅/3&xp7~W܃zp/~桝ރ| 3zAop{U&_c*f&?׊fsuYp>ԀA7UmtжuZlB9iÔ+tZ
Zġv}TcWK2j=MWS(O#z".Bх33h)ؗµ}x+fqsH=S%:^WmBT|²QCᚣ!ٓQ΢YΖNñ9sYV;B=ϙ{:sQn0>&j'Q<<_C3}dRK(XH&$%$*gM-njU{Q"&D~kwU]YSL-)4bOܦ}ފqQ>gGSؕ1c$_~ <{`QS!;}36.(݋)΄--<Y/d=Ŗs4˲)\+6 (.0pSv<#
&a b^Vzck{^q[Mk9׷*(jta\i#$nN7FW5f笕Әv5}^8^tmec9d|+ѓxYf˒?
hO:/h> Fh9jWP1JuDلP])z@Uǔ=vm]>O΅	1]	QSps&RsHԿ'gNznnoGыW1_Ｋw9qZ/C fىyWyܘn>4thgHᐾ
vMZ4[:I]I>C))F-x'Xr5+5v	=Pl&o P}Bj~I~ߑ7	pPK
    PK    A             C   org/bouncycastle/pqc/jcajce/provider/saber/SABERKeyFactorySpi.classVVG͢
1v$0
ǘlѠyf$P
"9,<$ֆX:S]uvUwon4Fnpe1y}zn@0kV7t	Cq`GFρ㚪1po۰i9Z:V9I5_#x\3"
mI34KqMKORCQpLWZ
jgEK
C[Ne)#(,0r4e)4nO-jBLmAC5#1la;[nm[J8-$7"림<VH͘#*<ה:ε!ҍh "Лؚt'%/I%Ghy%ޭ1ٵwW1-ʗ*YZ$|Wp17WB LVT	CM4YQZꎞ
-K=A=P"NE
}UW59nI"'=&F*x.FRNuV0B>=050<wַl{3
9Z9rx>G>~A!a׷Zg,{+B]
JvoV\Z>qyKUvI6enP)׍,hrQ=S/
7/=:rha9O.]+[WEzt=|[psUd^#JXyʛ=
ѓ<B;X`	]Ѓ,ޒ{Іe!>k
ŦJI\8BBd{_	H)saKm	\Y(#,a?<0
	@w=Zoz#6E=XS[m^rҪI~KVjɚD:Ap[|kL#q~4"!g@kM㛁_Awg6F4hTwS~iQ0wd#=u$ZDadiYi$/T#8UA$.鼚N+4O'R̝5z3v(Gu^Xy:q^,s;\R˗Q{N;Blk|#V?@&v2աLC>=v2O :yvPK>`  s  PK    A             E   org/bouncycastle/pqc/jcajce/provider/saber/SABERKeyGeneratorSpi.classVVG~$kD(%VC&D)f3ewlBz_JrNҋ}g7_(9̼<3oюvIHW&%Db+b&FhaX7.]3l+j^PtxbtkϵK:7,~["夓,e#WK8B3Wӽ4].,yn|%|5P45ڱ<#8Ƅ][X6%.jQB\t*a^,fMCbX65Ԭ:k<iOҹT<_XjTj{^$h%uL#WwBEȖ%ǳUBWvӎ!g9oa`@$֭F+zf4]Gkc*Aݼ^ҵg8Ҟ^;KMk:ACo
wuwz~rkm%^}yhӲUK2{yI2qM#GA䔟GxN<@tߔ:Z6Wr=LEkݲZQ8û}'N13fx!p}2|p<Ca*}Pb)	s?㝠\N{aI}"֬ckK5Qm+#k466D~'+%{U8{-hc̽Wz^M*40~U$:;q7[#r VQ'

jɔ8>RM+8,D"
zѦ(XL1X
qG
:1߁'Ģ>1,Ĉ*>q>qi!
11Êx #JF_˸Œi!Ŕ7\{1Sy͹eM3Io	hvHP
HЪFIhef*? `8%x3GL>!p<>c/K/?YR_jIvWH+TF~WԖ0Ӂo2Ԃb
B-)]m~ܟx$m/-emQX.fu*à2֒a>G$2]}oc%Sd>P/$$}`"o/6"	,"K!C(H"iPK0!"  
  PK    A             I   org/bouncycastle/pqc/jcajce/provider/saber/SABERKeyPairGeneratorSpi.classW	WWaP.*E[-D1
nlŮC@Hdb}m]VQV=LB|o^@TI,)uIȩv{
aHȮM:wuH&ct	
Sjݺٯl*nVع|VxtnjOjU yn?@6V횩
%(ĵ YˋPpVzay!ɃyNQ&WIiO[;%5WyM^Ѽu'4]z2>	:-yȢQ<	r5lzzG`qJ<kEi=I@,lԂ-Z@B'օ^k*i#L&ctMZN9κ m4
FW7QO N4zCAHcMF[s]pDBM\{Һ)zB%O85նez,5UV'jsaSNjԫ1+
(|f0$4A;m;'l	62E+CRb,OC ![f>ɷ|9ɷ<?
Zj%<ԋSO>G*c;dRF;eX%c2Q"TC:e )cMV4'_W"]bv6C&*`"[1[$[k~C$Iq]K:E)l..iIW9ޣdxsɴJՈULt}0gM/-v&Ro.aambںtUUJ'˙%
I2[(ELIviCj0*xEek$p4UU,E-_E:TS*p@ʐϰ.2lcΐX.v],balSU`*㐊xH<6<bC6exLh**ѭ naY0CJF.g0a0Cah.Ze`
3<ÓO1<j2<û
jNg,r^axU.`7R+h䧍xexMA^W(rv}7{襨Ŀvuii~z+׺:VvnɢRTi1RH= FjlH\'i@&̀"GeG]a\1GpƑ9ӗ`Lo	e
3z\ƃ!/ p&6=]qlf`Ma
s1GQ]P0
3Fqq(~ŏa\~IIYƽ-ySmjXh̠qN"1f25q76(4/~Evֈi~f'҇QD82줽tZ]eapR*NV,")W.0MqV0$0_`N&0	K||#S	,J0'LK/PKFqq3  J  PK
      A             +   org/bouncycastle/pqc/jcajce/provider/snova/PK    A             B   org/bouncycastle/pqc/jcajce/provider/snova/BCSnovaPrivateKey.classV[WWN*"ՐPhE+B6.[ 83Aӻ>@תC}KBJV9go߾s4 C<џCCCch<CUv1m1
/\0l]1)|WU\bl^
ڼh[i^ʒpG%pVoY^YyZh1aNZh1Z6/D ||p+
-HQUy,sg9M8+|ffƟjp
ɘŒs*uLɭ17Դgڢ.Jf&v6B1_DԔm-{I]ZYk;Z|9jkf:E9redm}j]ru	M-
kF:h|EnRI\NPս<9k^:>CwbԨm2qmKdo*'[k.Y#lsD;{t-\^(4w<<پ~~L,ᤄ^	$IxWi	Ix_	g%$$KHJHICo6̍sfO&^a[e>3џH+S#a=0}~	@"_Ũo>Q>x_ڭo%?p$ףh3%;!TGruJ"*
s?)P0>Q !'<х'ШM
TRp
cJA'`F;U0
➂V)}sO˸/<e\ƗXqd\CO=,4#n2CqdBF+2n+O|-cKRi\pQ\}c5r/@E18!𜞞1\Xs"IC&F|;zs03dw9D֞*TL6྄Lmjm?C6yi<JƆݩ-M%@aOa?"CŤ A42[8XOa]~OJ?oԚe~6;v[WJ#Պx[_p;4F/H`a4d/d*3omTr`׶`CydBaVL%7PKvT    PK    A             A   org/bouncycastle/pqc/jcajce/provider/snova/BCSnovaPublicKey.classURG=-aY1M[He0dHc
ٚQ$K3bfQE~O<SyH|T*g ˆt{nougt'<P^cMF-3ʹ;&I@q[oxްwŔ(2Ba5#wMH)9)Ru
 -s;튃Z!=;%e[YښpGks*-MJ$e@	qmyt\nş6ϑ?&yB^[2:w40f&Ӗ2DM[&C~x4usDySfǳqf-`&K|7Aia~1nk*y0wܬйc[tjz;e0t.]KwL-HYJ9Uj\1`MgkT{mwh~i1xzڤR`%mmJ/n%k:~];eU6jۼHuWS'5W;ͳKD=ub	]ZukW
)Tp]
7t)H
>Q[
n+(VUC>[2\L
'I@U"'oynޕ'+./ y;pg+K2~L޻RV4eI/wg!SؠP^N1G)߂ΙC,9
=xAAR\¨ЀZ

RC;&5\ŔLk1
_ihS
44Y=Fb ϥZx!7*cICbU U1$C^#$UPK)S1
bRӇ6-.l'fx_
tl!I5S0KHˤѨFU4Ro!aHSՄ'C Ec{С#<=H<"tc7ގ_cd&;Rza~\NɁ瞧FFcC`sۋ܌Lp 0Te(q4:$ntlٝiYvQե((U-UJ|.c&5!鮀6l;CHb"0ұ.]dNPKW'  9  PK    A             B   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$Base.class1kAxz/gb
ȂRD,b%;RnEVd{
T Tp6$]dޛ
s<| !tl'K6VZU	wUDn+E4K=W~J,	rFLe-¨
Pvyf<6ubfe:g"Ɨ^v'}GGG1y	PKuA   u  PK    A             N   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_4_ESK.classJ@mjcbWVF\T)
t()m&Τ>| Jwrޟ_$XfD$ijmtQa_ )sGs5rTz\(M؛	n*O7W%GIG0,*f	bNrwPe6*6lS1+5ǖf*d"V\8pQ#۲#ejVLk%3-)}ym)V'Om0^PK4n  :  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_4_SHAKE_ESK.classJ@mjcbvJp
ԈPJATa*ӡII},| J;=\; Uu	(+Bu4 d׍v+l6$Q}1b*ΆO/4_Ʉ,{HfRiTa*D=@l$K#BgIp~\E+6J6l	(ĖZ׃C˺UlpPvbPl&=Inb9ZKi^dN[wk|F<̰v{F]s؂PKa  F  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_4_SHAKE_SSK.classJ@mjcbvJp
ԈPT0pPRjgBK7'캨p7 @`!r'q~Am؊4
"v\FuG(u>~$|&Y:Igqe.&ɰHE8>qܓ4GJ,&t$gǵQdb&;{ b?li,xJBV,cͅr;Iw!ZjaL"sJߺm^32z~lLk1^/PK<菵  F  PK    A             N   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_4_SSK.classJ@mjcbwJp
Ԉ (
Wa%fLZc馠Pğp7
 ibB8`Wi%I0vASީa&Ƃb ABB&S#RovdXˤ&(JZC-Yf$uQu1%\;u b_3li*R=cɇ
BgvEg[XӲȞʧצl`	>~[׭PKq`  :  PK    A             N   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_5_ESK.classMK@ijcbI
Ԋ EPOe.%ݴП?%Nxgg@ZkJqg'Jt}:mۇg%aOnxKa
J3N3DDz+LK؝n=ɥѣȌȆFEiL8mEŜppo
N}op
 P aK><}MQ";VYlaGO]n	V<:9xPK  :  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_5_SHAKE_ESK.classMK@ijcb~I
ԊPJATa!)ۥIMYz)(QƏ[;;;:*Z(+BufxZMfYpc1\gCOjfd}=W|$34xAEX*aJLTax6V$y8߮%6Y]XJ-`P `.]$[IO؜h
R k7d𭻦7_5Q|PKYK  F  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_5_SHAKE_SSK.classMK@ijcb~I
ԊPTTRRj6,(qǭxgg@SEy:Q{\`We6H~Fn'
=I3Dyr?LjC8aq?p6s~ @RqܓFZ4&t$guQt%{ b?\E
\V=,c͇bK$!N֐#
bG6
ߺm]l.bSl=XmaPK(<)  F  PK    A             N   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_5_SSK.classMK1֮~^<	ZA"H/B`Si([j&B^

 "j3g@HT	Ʈ~s肱6Nn󁌳3r[G<fpe.%Nɰ!9/\i(J:C#Yf$Q1'\u b_[3\i$<DJBc)Dj5B+w=J-,⑋ҧn-#;/n'XyߣNCCPKWxt  :  PK    A             N   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_25_8_3_ESK.classJ@mjcbwJp
BE"(
0N2fLZc馠Pğp7
`kވ	#Pdw?9LitAQީAG/쁇\\&UCF0E.!lOD
M8UZ-LΦ$7uQv1%4/EI)4  %P!fCՇVASg
iQdOSWk~FW^ݎ1V}؁PKI2  :  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_25_8_3_SHAKE_ESK.classJ@mjcbvJp
BE(T0pt()5gBK7'캨p7UE%ºA3<>
zȮvfT}Ahq
>E~&i&}1Yw\G		s2,'BfD8	g#%X(XQa7 O[j(UXs:ؒ=A5Z=i^dN[k|FO);F]s؂PK>yV  F  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_25_8_3_SHAKE_SSK.classJ@mjcbvJp
BE(EP*U
t()mgBK7'캨p7UEG%:wA3<>
zȮ6(Q=1b"O/$_ɘ,{PfRizT}a*G]@l$K#BgArv\EK6J6lBYX`K-`P `k.]X'[IWجh
Rc+fSm578Sl`c_Q|PK4  F  PK    A             N   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_25_8_3_SSK.classJ@mjcbwJp
BEnE0NfLZc馠Pğp7
 ވ$MSB]Dga|7c.	{Jw{5LXpe=PqФjCV-| s
awJ%Tjџ=aZ?ex>Ԓe	|FrwPes.*.\Bߩ[Y
ޚaK#
 PaK><T}mՑ"+}n4E>u;6gd{u+OX`ۺnշxPK<  :  PK    A             N   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_29_6_5_ESK.classKK@mjcbq%h|#A(*8JJęП?%N|lE8w{W X!8FD%ijuto^|^;OPp$z劙T
8\jC	N*5OWWI[2<kf	lBrwPeS.*.\S7	>.9FA*d4|xQ#[-	yjWzi;-)}}0?u٪o{;> PK86  :  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_29_6_5_SHAKE_ESK.classKK@mjcb>q%h	PJATa *PRj&Τ,(qcE8w{w Ǩj- .$.	ֹ
yxn-&H0@SGjf׉qzP?#^"l~dJPax6T13';=%6Q_cK-`P `+.]X%+ubV4\k%3͋)|ym	_6u˨kz[p PK  F  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_29_6_5_SHAKE_SSK.classKK@mjcb>q%h	TRR0CI8tSPĉ]wr>>_BP:8 TX6hgIxf2dMK0@SGjf׉qzP?#^"t~dJPax6T13';=%6QߘcK-`P `+.]X%[+ubV\k%3͋)|ym	_6u˨kz[p PKwl  F  PK    A             N   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_29_6_5_SSK.classKK@mjcbq%h	 (
Wa%ęП?%N|lE8w{W X#8FD$ij&:w f쒰t'WT7yOكe
M<dr2'dXI&
0iKZ-YΧ$7uQv1%];u b_SliDJB=b5Bڒ\vEǍӢȞҧ׺lnc	c,?~[WPKw8  :  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_17_2_ESK.classJ@mjcbֿ+E+Hh(
0NR3q&-tSPPğ.j3_ b`I$?#<nq3OДjqʧ|$\M\:懅2D.&/Ȅ r6$c%,!$%Qbb&ME%4"<%P!VAՅMB+R;bZiQdNSwk|FW^ͰO]l PKCN  <  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_17_2_SHAKE_ESK.classJ@mjcbp%h	BR@UӡLI},| JSp7
RJgqg=v5zւ$dN;l&$F\g#iI_'r}
W^dBiPW0\}~@lKcBwA66ll؄տ72/jσC˪epPvbPlɾ xYqV4/2o>#G/png|[9l PKK  H  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_17_2_SHAKE_SSK.classJ@mjcbp%h	BAXa*ӡII},| JSp7
RJgQe=v6zւ$dEXPKT߿OƱ
5Mq2>+>Tp<'â~,!?| U%'hdiD,HFƒ
PwAVž7Rzy(rYu5.\'	UlV\kq3͋)|y61uǨkz[p> PKv  H  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_17_2_SSK.classJ@mjcbֿ+E+HUQT
t()5Τ>n

>%NY;=\+Sz#&T,	5v}_$(iFI%t?WL7PrLMy
?\jC8^ai?>4IZ-(%t$%uQv%ME%4  %P!VCՇMBzt33HiQdOSwk~FW^ͱۏ] PK(^  <  PK    A             N   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_8_4_ESK.classJ@mjhƕ$H*AQT\q:3iC6;=\+N*GIǄZxuv|pt?STL7Pكd
L<\jC؟	~*5 @ثV'hp6';(Cad}V+xg-ȇG	TȲExpQF(wUOԮ1`KvZS
ڶսS=auoUv~ PK~  :  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_8_4_SHAKE_ESK.classJ@mjcbvJp

R@UCIII},| J;=\;*Z(KBovXoa#dW^7,QC!b&O/,_ɔ,;̤҄%
cͅ#a*F@l$K#BExq\Ek6J6lB[Y]ZaK-`P `[.]&;@ج茹RfS}:478s`g_Q|PK
%^  F  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_8_4_SHAKE_SSK.classJ@mjcbvJp
J*B)R@UCIII},| J;=\;&*Z(BoNhga3dWeXPOH&	'5Kq2>+(34tIEX*Bk$HJ@?0<(҈_<^Fƚ
иw6AV~WR<X<@l:Xǖe.	n2:6+c8Eu߼gdz
/ؙcz`5=-8_PKXD<  F  PK    A             N   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_8_4_SSK.classJ@mjcbwJp
J*t(*\q:3iC6;=\+6vN*I'NV'>1c҃NS1#f"z*4z5Ԇp8'ÒA*5(PثV/hdYB8[EŒкw.Ažw҈8@zXƚU>jrO%!8Oވ#
bE=Oݲ]^=xw;g|n[m/`PK9,  :  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_49_11_3_ESK.classJ@mjcbWVZR\E@UCI8XuSP|(qJwrޟ_K͈P9M$?#<nAH58St>~}Y.}	Bob"Jdd
E8?lUI4JYB-IJjlcFņMh];v b_;KliF,xJBbÅ5B+R;bZ}iQdNSk|FW_ͱ[oQ| PK2  <  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_49_11_3_SHAKE_ESK.classJ@mjcbp%h	PJAXa*PRj&Τ>n

>%N)ށsgy{~P.T{Y9a]w{Ͱ~AXE۬CwrDӈl$!#5M3DNrߋL(M8a padJNP?ax6V1 yG^EK6J6lBQX`K e2\8(pN(d_ĬhB +fSm783l>acoQ| PKb  H  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_49_11_3_SHAKE_SSK.classJ@mjcbp%h	PT0PpPR$Τ>n

>%N)ށsgy{~P.TYG9atͰ~AXe}2&8Su6~ |i:N&grG2JdXԏ">檒Iԓ4J4"t$khcFɆM];| +b_lv=X<@:Xƚe.	Vғ*6+ZC8E>uۼgdzOؘaۺc5=-8PKC  H  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_49_11_3_SSK.classJ@mjcbֿ+E+H-T(*\q:igBK7'tQ{Νo.@{ވ	4KsB]I40vIj&p4гQB)Y\Km2,gRN{j-lK(XqQqW&W[q Au&Q=I]rc(;o?#۫G/zBmoUv} PKX  <  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_56_25_2_ESK.classJ@mjcbֿ+E+HںR\E@UCIi3q&-즠Pğ.j3弽?8BB,NP	nnËьꍨ]W#z%|O$ͤ9f~Sl(24pN&{P?}\]~@ðlDƄ΂66ll؄nDu^+yk-ЃC˪epPvbPlˮ xĬhBc+fS-583lLQaۺm5=-8PKB,  <  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_56_25_2_SHAKE_ESK.classJ@mjcbp%h	VPJAXa *ӡ:I},| JSp7
T(izVa%dV3lHF}/d*?՘,[@R'uc	g{j5:RHK69?XQaFY9<9P&AхUB:]fEϓD&ÒfE>uӼvgdzOXbۺe5=-8PKY  H  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_56_25_2_SHAKE_SSK.classJ@mjcbp%h	VPT0pt()5gBK7'j3弽?8&TB4N쌰Ů;A3zXE}2&H0@CGjf׉qzP?%^"W?\]~@lKcBgFr66ll؄ëoDeZ+c-Cˢy,pPvbPlɮ xYp4/2m>#{/pn'X}k
9l PK{  H  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_56_25_2_SSK.classJ@mjcbֿ+E+HZ]T(*\q:3iCVp7
[ވ$M3B]]Gq8nf@~xFn
=rTy
\jC؟aI?p @ثV'hdYBIJbEŅK8w6Agž҈8@,{XĊU>V	IBMΐ#
vdE=Oݰm^{w;jS?~[7PK)F  <  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_60_10_4_ESK.classJ@mjcbֿ+E+HZ,uQ(
0NR3LZcMAĉ?+]ށsgy{~BB,NP	nnËU]WT}A>LgC#s5M3DNz{Pp D(gnJNP?aX6V"HcBwIWRE+6J6lc	(ĖZ e*6\8(pI(vdOnbVtLkq53͋)|y9Pc{m5ꚞPK-;  <  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_60_10_4_SHAKE_ESK.class_KAum-COA*I=P=-8Ȋn3ǪЇfV`ށsg7
]U*w	0
ti%VZ.VbmB5V}>Gb*NO/4Ic_G,[HRiT_\U<	{RXI΂ymm,(ذ	'_'ҼW[]<9P&AхuB$̊k-5bY9O6}^<zs76fzuM`PK2  H  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_60_10_4_SHAKE_SSK.classJ@mjcbp%hIEAXa *PRj&Τ>n

>%N)ށsgy{~6TB4N쌰îA+<ZEs2!ԥwrDl(!#5I3DrߋL(M8aq?pAdJP?ax6R1;'G^E6J6lտ7	2+9ǖj e"V\8(pJ(eOĬhBcKfSM58S?amoQ| PKj  H  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_60_10_4_SSK.classJ@mjcbֿ+E+HZ,UQT
t()5gBK7'tQ{Νo.@;ވ$M3B]]Gq3n5v STL7Hكf
M&<dpe.!ɰdJM8?|(UIҗZ,!$%uQv%];v b_;liDJBV=,c͇rW%!vEwč{XӢȞҧn׮la	6V}؁PKFh+  <  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_66_15_3_ESK.classJ@mjcbWVPuQ(
0NR3LZcMAĉ?+]ށsgy{~p]UY9܆Q5Nft\R9N3
4ͤ9a~SQdBiтL
*9{BaX 	%Ƀ_Imm(ٰ	nDmQ+y{-ЃC˺UlpPvB(vdOnbVtLk53͋)|y96Pckm1ꚞPKj?   <  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_66_15_3_SHAKE_ESK.class_KAum-COA"=P=-8Ȋn3ǪЇfV`ށsg7
T
a=v6Z-Հ]6ڭڄJ}<Tp<_iƾ	Y\L҄9#gx
ӱ,		?XQa_'ҼW[]<9P&AхuB$̊k-5bY9O6}^<zs76fzuM`PKx  H  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_66_15_3_SHAKE_SSK.classJ@mjcbp%h	ZAXa *PRj&Τ>n

>%N)ށsgy{~pmUia]wVhV<dCI(&PCGjf׉szPp8#~"W \=~@lKcBwNr66ll؄տ7	2+9ǖj e"V\8(pJ(eOĬhBcKfSM58S?amoQ| PK|  H  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_66_15_3_SSK.classJ@mjcbֿ+E+H(պUQT
t()5gBK7'tQ{Νo.vN*Igv;nǭBSAxƩ
n
=rTMx
\jC8a p(PثV/hdYB-HJbEŅKh];v b_;liDJBV=,c͇rW%!vEwč{XӢȞҧn׮la	6V}؁PK [  <  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_75_33_2_ESK.classJ@mjcbWVtQ(
0NR3q&-tSP|(qJwrޟ_c`5rI~JWYnAP')rs5rTNzPp0'&T(BO!7W%'I_0,+f	 +%6!wA4žwҌ<X<@:XƚU.jrWfEwĴX1ӢȜҧn׎La	6[F]؂PKJ<  <  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_75_33_2_SHAKE_ESK.classJ@mjcbp%h	PJAXa*PRj&Τ>n

>%N)ށsgy{~pmUv	8sta48dv+l6H'GI4ΆO"?R4N,Ȅ҄_"sUr
ó,	9?(XQaDeV+}-ծ(eXq*ؔ=A.9Z=,i^dNS7k|F^N)6[F]s؂PK+!{  H  PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_75_33_2_SHAKE_SSK.classJ@mjcbp%h	PT0pt()mΤ>n

>%N)ށsgy{~pmUY&9aݴFT; :eu1"I('1Y_Ç؏dI_r}-W| 24pF%T(BW/\'~@l&ymm,(ٰ		2+>ǖj e"V\8(pJ(6eGԬhBcKfSM58wS?amoQ| PKՉ  H  PK    A             O   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_75_33_2_SSK.classJ@mjcbֿ+E+HQUQT
t()5SgBK7'tQ{Νo.1vN*igϓIEQt?SLL7P
=*4z5Ԇp8'~&5 @ثV'hd]EŒ];v b_liJBV=,c͇rG$!fvEgȍ{XӢȞҧn׮la	6V}؁PKv ,  <  PK    A             =   org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi.classYy@=Yxx 
7",xUF*FSvXF\\gY^iFkllR5IF0Iۦ}}g$fg?7{3;Gz! lc!o);.ڽw]kc((Ԝ.2ۢjT0'۷-97;CDm:VNxS`xSZ.$6pKz"^MZÍirqNGM93E5.$ֹ73I.˜kkx`Ⱦ=ۮqZ67dRn97%IFmӸXe$hIFkxY~Hˉ[b/3)PTUWݲ&VtEc(M9&{-z`49.u
Sj2H5]Y*o$e]f&(PXRTE#%)M)z[l(En;H|PQL7]jRՈiK5֓L[(ɤ<D:N7Lʆx
2T
#r JɣDJ"<}LV"JBEv&dU8T46(RvRg23}	!YhI%(G]R,r@,!ƒ)4@\
Sjd4"'jcXp@(50DT]8C#&x#8h@%h4a(0i{UYS^#gRlŭ35\H6W<K->mM#[}`,NoVUrkuw~2zBeyyIh	3wa[|4Lǧ	va:>$0XkfTO>o,x(H2-<xIa^vq9ye^pَ3()ze;20R^	%0HO.[cJ<e2^ң1o Z	ˑ@3Ttd:WDj@\&y-َC)H'P$2RGDT[}HN$1j*ke^݌GFT
Gngq⸑c^8ϱc?s8<09d 888̡r9G84$Α8qc/xǋ9^q3K9nx9nx+9^jpuxò+2Tv4Xąc{ڝ
\WAj'[M}FfhϯN嚛R_AUMN8C_gZz}:P"l.cĆCs3+7y9hA;(
W[lĶlCf6.^bk4ZCq=pUf7_a\!rIT\n´2݂]ã^W	ow%ߓV|_B)
$Y]&P$z+I»Q"n1b(ŏ$cz3	s1B;	[gEß1Տ._b'
k	?N
$+v8%;pZc~?bE~h`>?IX9'?f6x/K71}AuJBS"rφlG~8.*?Tt[ȡ9q<Se"tU&N8K¸ZJdS_AY uelUMx8}_`u+9̥@^y֍ꋬN#\c2\;qL\"[:v	Ib*/c4|1h-T0J.Y@z	
df-<V<rlt&<c+σcPkU ~O,}8U+`,;;3rʘX,ՏZ#L;Q|[(⳷AM:_4(FQ᳅!]bow78[FQdR>b0"Its帳q*:k_@QDKX=ӆK¸jswP[-4.{j8DbER	y'=i0{,sŽ'^h?fŗ}܆_,4'ȱaM҅ʹdl
HCou(½(& %a}'0.$"1
qń	>@XI aR.#a5C	/ |p%#?Nk?IS5	k	?MXGzx%l z@_"He&¯6~0H5¯~p7	7~pPKtk->	  "  PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_ESK.classOJ@=֦QC%|@
.نdeRgb!GIЍu#΁{?^ x%hAL*Y\a0^|N	r}GQ3SeFh?K2I*T!oІ|x4,ULFKFfu.$A/n^	socaBvq~z;%ZplчM(%?g}:Hi3^>}qv*WVaPK`Ɓ    PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SHAKE_ESK.classOMK@mk-ZJ<1T,ulVMZ65Yz<QbA|cfA	ǑS7;!wlɽ:Iʵ@3wRdP,d	NwƂǢiBR^#s%i#wkѩSɤhX2,z^\=h/o,-ab&$JԝqJRlۮ8{><[0PKNs    PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SHAKE_SSK.classOMK@mk-ZJzbP,klVMZ65Yz<QbA|cfAGO<?oɽ:Iʵ@SwRdP,d	wƂǢiBRđϹȒ4g_ZtħoTZO
4,h=/.qkCY0lD+mX%hI(	R2ug\kR-[p+f▩:wPK˩    PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SSK.classOJ@=֦QC%]J%]d(ˤB>K7?F}OCT$pY0'ѩ#/blFp;䏊<6BبM8I&x1M*\їf<x|%SQ*ƙ(c^dKIKpW[XذЭnnOogt0t`aAMT8S1Rej:hzwO_
UUm؟PK    PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_ESK.classOMK@}֦Q<",zjP(ȵl6l,5Yz<Q&zg͛70
^?&hI%?
hv<ؼ&G:~TsAQpzLLb
U[)rCp"_<pqqKsȩQzhTD׌:/$u_kG;h9Xsжn~77Oo}?`C6pI
t*R"aj[٨qv{5:zٱصjPK3    PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SHAKE_ESK.classOMK@mk-ZJ=1T,5l6&-,(qA|f`-z4co<`jx;Kf74L%/8SLPd90<EBu,2Ep>4,Zf"DFLz%8g<OW֢S%>ME @ysQ<"ݿ{jL҆UFI)2gƔ
;(Zڮ4{><z:wPK    PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SHAKE_SSK.classOMK1ۭ.xhEԢX*!%Mn[Yz<Qbvы
̛Ǜ9FHP>U`vVv`YX`_:Jd&)IGvIo,U_Xo'IXj^p2DcwkQ{˧2vaCh
_{_0 >*X*Aǒ )%Mwƭ;ȾB5P{><ng"wPK!Y    PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SSK.classOMK@}֦Q<",ԀP*a!גlVX6u7"xMЋ"73o`!	~D>J>gx~:l26%8MGKb!hlԀ&^$BV
m.N3gRd*45*_ŔU8ű\l)	1Z6͍Y8팀GlzhsV.	ZA
o"6FVAl6jܵÁ3v^?}i,vmp?PKC    PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_ESK.classOJ@=֦QCjP(t6L&$|n~%Nn^8u`mfRnOQtxDGU0!8Pգ%g	ʴИKogD"ME	ΗN32n\-DTK`4p"k<%[߭+-,Xho7৷S:Fk]X'hy*XJ{3EulԸi:x25R5aPK⁁    PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SHAKE_ESK.classOMK@mk-ZZbHaY5il,gEG?{0o3s׷  ;A8QvJrGcC!n <LeSA]pz挃Xl
EבH7Әk&()U2389Y,"W~2)[6P5Emw󈀶x,Z2R&	jN
k H)SJ(lP!z+%o@c+OX}kl[0PK    PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SHAKE_SSK.classOJ@=֦-.Z ĠX"b$0Lj&Y\~X¹rY׷ {X#w{A(RQvBaÑg;=s	ɽ:Hʵ@SgRdP,d	٧wƂǢi2BRDW\dIiDpo-:USз|,}4?ٰ!,Pe6L,4$@):@CUR|Z[XzÇgvqT;PKu    PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SSK.classOJ@=֦QC}j@(t1mH&L,:,. ?JX7p
1	AH>J=LQtxFGc\$T)fF
i?M2q*T!oІb>4qmLF勘
'y%A/2Av?_ЃU
x.:X:ASAڟ]T*Fvک{8[V&OPK    PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_ESK.classOJ@=֦QC
jP(t6L&$|n~%Nn^8u^?$h2-.$:U0!8Pգ%g	ʴИKogD"ME	ΗN32n\-DTK`4p"k<%[߭+-,Xho7৷S:Fk]X'hy*XJ{3EulԸi:x25R5aPKfb    PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SHAKE_ESK.classOMK@mk-ZJbHaY5il,gEG?{0o3s׷ =lT~(;%hg{!n <LeSA]pz挃Xl
EבH7Әk&()U2389Y,"W~2)[6P5Emw󈀶x,Z2R&	jN
k H)SJ(lP!z+%o@c+OX}kl[0PKcT    PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SHAKE_SSK.classOMK@mk-Z
ĠX"a%װ٬lj6"x$ŏ̛.ݞG<Ttp΁v|\$ArD.&r4 *#jo靠(h̢PTd)+ѕ9Yl\+[N-K_뱁9͢Em6yH@<-`ha

'	%5PJ΄k-56PbkzŁ#Y-]2UPKon~    PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SSK.classOJ@=֦QCE5 J6$Q&I|n~%Nn^8u $hK%K(:<N㈱	Ah?*^3Ac4ʟ&8RhCpD?p8BBSELYQ^Ǽu ~o^^s`Az܈ßh/A<ub J	bc.kfM;=zO_-][+U'PKT    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_ESK.classOJ@=֦CTԠP*"mLFI,v&Y\~8	BsϽyx}p]fSN0Qt2at]\8L3A.98'B]*&%/88˸*_PT|hPD7*yJ"SoB?XhYX6nWSg3~ڰn6zb R
͘Bcշ*bQcgl`Kcgfj	PK7	    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SHAKE_ESK.classOMK@mk-,xhEXb*H{6UMB~^ A|cf[n#hG2N	:xY~w/,g]`?IohKsLIٓ <Bfu$REp>4,ME*,uKtD~x;F|*M/TCCÒf窖;66="ݿ{
j0t҆UI)R{Ɣ
;(rH
7o@kkOXl.nCPKXC    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SHAKE_SSK.classOMK@mk-,xhEXB~@%s
ͪi˦fc!?K/?JLx 13y}{~p
z4bg'6N~;vɽ:Jʵi(;
RdH,e	gw<dJJ朲=s%if1տۿTOEhX0,^\aCkC[0hDKmX&hI$	R2u\kR-[p6+vՇz▩:wPKw    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SSK.classOJ@=֦CTԀP*b ېLFX&u&Y\~q݈¹{8.A{0	Re G'EcS\$T)Fy4Lb
U[)!%_<p8RBSeLYSQ^Ǽu `E ߌбf[Yoftgt0t`aA6IT81`.RuA/Nj֮6OPK\6{    PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_ESK.classOJ@=֦QCjP(t6L&L,v&Y\~X7p
^?$hK%K7(:>NatL2}OQ3eF
h7Sq"T.Іb>_prR&BS%AQ0g`~yвf]z(?_Ёu
86:&AAڛ1c>kFW@[/p8;%vZ?PKU    PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SHAKE_ESK.classOMK@mk-ZbCi\fjڲ[?%&A/~`<f0o/ z";>A8qzJFca%W

սg:	ʴҐ3gNOi|D|8p69M"DBTF]3$1տ򻿵hOA߲X2P{^\Fݯ=h/o
,
4abHXC)E̘BcZɷRFmh=b	-RUPK    PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SHAKE_SSK.classOMK@mk-ZbAADJaY5il,gEGIЋ=796ݞG<Tth޾|vag>c.n W"\gSIV}zꌃXlJEבL57NXX4MQ(SU2甕,Is6EJ|
O@f6<$ݿ{jLԆe*%Sgʵ[(rH
׊o@k+OX}.n|PK>    PK    A             T   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SSK.classOJ@=֦QCj@(t1mLFX&5,. ?JX7p
^F>WZ>Qt|FÈ	Q8{ԢsIzLTbH][%sCpB_<

R%2FgKNYY^sQdy `~wrmnnOog~<ltbd$Z<sc>kfm;=9|/ΎŮ	PKcb    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_ESK.classOJ@=֦C5(Jd&QLB>K7?'A\h7p8o F%hA,YyA ǣ*&Q3]eZz4\r
Yf(4/ӜZej5NEux*\d+&5]fuq8~;%臑ZplчMRAL?gZ}ߺV/͎
PKW    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SHAKE_ESK.classOMK@mk-,xhEXCRi\fդeS?%&A<q߃yü= cHE)AO|m]8x#$ArD.frlzNXlJEבL57NXX4MQ(SU+q$s.$ͽyDp5:USѷ|*S
KE˟:v,[2J&V	nJkLZjT!*(G=aóY`ePKRB    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SHAKE_SSK.classOMK@mk-,xhEX? RifդeS?%&A<q߃yü= cyͣHE	A'm>pFg>c#$ArD.frlzNXlJEבL57NXX4MQ(SU89Yl\+kNT-J_멁%͢U66=$ݿ{jL҆U*%SwƵ;(rH
7o@kkOXl.n|PKX    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SSK.classOJ@=֦Cj@(f1mH&L,|n~%Nn{s=gq?^ OCT$p<'hy^t16#8ɋ;䏊W<BX+&^A	^NSJy+E	.~ɗf<θE(V*ƙc^EŖ hM ߴбakݬ7asg3:~:F[}&y*RB.bՠkg`KgofjPKr    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_ESK.classOJ@=֦CujP(f6L&L,:,. ?JLn{s=gq?^ c3d~A3?Gh8U0%8GL>51D\J
/ӔTgKMʖNEqx"XH_Z}Bvfuq0LwJ@{C4`-/K3QJhoΌU5Wssl?}ivJ얳r5aPK~	    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SHAKE_ESK.classOMK@mk-,xhEXZ? %fm˦fc!?K/?JLx 13y}{~p-jԏ)A};~%؏gt&(ӪKCNϜq8<FBZD|8p69M⅌DBz";g<̛Kw*#eS=5P3d7퍺__߂eX&Xi*A͉#A`
3cZj1$J]r'?|x6slHUaPK{~    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SHAKE_SSK.classOMK@mk-,xhEXZZ/~@%s
ͪi˦fc!?K/?JLx 13y}{~AG=مqrC^Lp$Zui 3&RP4d	wN&"
eB]sIտhOEX2Pϛ^\fצǳ``BV0JPsPXCd̸RcZɷRFmh=b	-RUPKPl    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SSK.classOJ@=֦Cuj@(f6L&$6,. ?Jq݈¹{8>A	L+78EQ4`Jp{GKt1i91מgD"KE	.KN32nhVi"rZ1T8
`	Z6,Ml39EXtЀc.ll<g"Ƚ9ZhVEL7jtvPss>}ivͬ\M؟PKM7v    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_ESK.classOJ@=֦@qjQ(f6$Q&v&Y\~q݈¹{bs!E~I3?ED:(}O(Yb9hO2Ie.׆|d4cqJJ\S#*AS^,WhM ߸yвa]]o̼h/~¦luac5V)'p&Rr=pCTߪHٍr;99~v4{%vY?PK#	    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SHAKE_ESK.classOMK@mk-,xhEJ/~@K=s
ͪI˦fc!?K/?JLx 13y}{~0AǑS;z?f&

{sT6)iҀ3{ĂgP,DNwƜżiBR%%nϒ4wտTOEݲihhX,^\r'צG3a@
бNаPc)EjϙRBaZ)VVVh<b	-SuPKl>>    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SHAKE_SSK.classOMK@mk-,xhE? ifդeS?%&A<q߃yü= byͣHE	A'Av|\$ArD.fr4ԙ(*#jo(h,PTd)+ѕ9Yl\+kNT-J_멁%͢Um6|mzH@<-`ha

'	%5RJΌk-5vPbknvŁ#֞,]2UPKp9    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SSK.classOJ@=֦@qj@(f6L&$I|n~%Nn{s=gq?^ O#y&
A4OG7qN
uGQ3].eZz4\r
YfP|iY
U*KZ+Fgf,T.3_5F}BIw>${?ӝ_ȁM-86z6A/RAL_0!o]tAl
zyӗf`Ն	PKwצ    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_ESK.classOJ@=֦CP5(Jd&Qˤ|n~%Nn{s=gq?^ `T%Lp
{G(W4%/9LPKcN<?/ƉEz
	.~N32nʗi"2_2T8
E`Z,MF6,h$hyy"챔By3Gnm@[/~Y~PKCGx	    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SHAKE_ESK.classOMK@mk-,xhEX? %fդeS?%&A<q߃yü= cyHF)AO<|?C!O$眩l&(SҤg$FYtT|89yAd"J&F3%i#wѩ"eS5аY4ͯMh/g@ò-ca' 0FRԞ1JRlۮ8{><[PKL    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SHAKE_SSK.classOMK@mk-,xhEXڋb\fjڲXҋ 8ya^ߞ_ cͣX	A
G}<$arD.Φrl
z± *cjoٝcǢi2#R9DO\dIYLp5:USѷ|"'4?Wuv,Z2R&	nIkL)ZjlT!*\+͊G<aó^`ePKqD    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SSK.classOJ@=֦CP5 J6$Q&I|n~%&A\h7p8o NKCT$p,hyqؔ(w4/ylQM8$BV
m.~f<xEuԨ|SVT1/r]$?Xm7c-t,YVnV3E?XXwЂc>llt<D)yl0GTjЭgl`KSa
PKF1    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_ESK.classOJ@=֦CԠP*"mLFI,35,. ?Jq݈¹{86A	gL7(:90
&*zL3Aszq&x1N,T|iY
"MDNTF
'fPyS_%Z}BIw<(~;%pltօuA7cZ]TߪFvjtͧ/͖	PK.	    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SHAKE_ESK.classOMK@mk-,xhEXj~@K=s]6UMB~^ A|cf`v#*LO	Zhzl`7Nn+	ө\.=s~$E:JP&}v'h$x$r0	*s89id,$W~2[>LꉁUmw􈀶x,Z2R&	jNHkL)ZjlP!VJ\˿͒G<aóc3E
PKtR    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SHAKE_SSK.classOMK@mk-,xhEXj+K=,6UMB~^ A|cf
jԏB'-6wzޞ.ؐ`7Nn+	ө\.=u~$E:JP&}v'h$x$r0	*s
윋4N26	F|*O@z6u6=$;*L4Ԅe(%gʵ[(bHo@c+OX}o|PK9    PK    A             U   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SSK.classOJ@=֦CԀP*b 02LL,t#(1	BsϽyx}p]f/V˦~0
N0<=G-
M>=מ%RX\)_BDD4K*5:]r*↋<
6W+f̃52x#6LwN@{4`-/%3Zfތ#
Q}"e7jtm@[/~-gjPK	    PK    A             C   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi.classYXG~C!6`	lAvN(J֮+^\&1.\\ｗ\f}}Oٕ;z v~A:9p8 c
kuK3tà3uEvDBHoA$w.SB6qH!gyh)R!Y
E"ryFr.&i͝oFr.&TwFvFvd+eMpv͸C-e%眥xHSȕ朳qP+3n>ijR֜rGZ#M55o)#j;QhY[sz7K+kbS*u#8WOFRjǵbj	}W5H'Ƭt*dbA$AkO503(H)E7⊩bqUWS`JBbjAI5fO\1~{h"!4078`̈́2DoLTMR3xK+x0S͔wxLM1he5NitORZ*c>dS(>nd]	5(mj~8VM+55ǳ5ŰDj<8Hbq5zSp,Pf_LMtO'DTbJÕz&ΞLke:CuݗQmb^%j&R4~pCCm콭~}
C^7Z-z4niq佭{h(yӸ{[۷0nwGtVt|_Nx|H;C'ג2z9JuPޯw'</+ࡣMMe~s/<ec|_{
ֻCy-e?$
I2N(	C
9CK
R\*H.bD27RyFr.&T4Rg׌x
8䜳p1ek35匛^9匛ٟ⢃9匛e?$-e|D~W3n>3}H{9㰟C9s0&7ss0pp1pm"npr8Op8Lpp!!!aig8Lsxsx'rx'sx
;;4o-vrwqn٠r`ځ]TkbQkE9cgI4tϪYYMN$k.gT}d.VARgBp:B6e;rm5n] i]V9itxkggѮۭ54݁Ai 
?N;	"x&M</ x!^L ,=$x	^CZ
o$x	BV$x	p(*@"  _=kJ#=Hb_##'( ($(">b?
 JU	JJ	% $J*uW'@p5A5Fk%D`K19Vl+6f?̰~@PjPDpĚ0v$h\p50(ITߐ>]WSֵ˕aSNPsl< DnWysJ9jW7ÔYfG<䢺YK:Y .l,ChK2\f([ɶCBv<\,ZVp)e_]dYvAqP
9y8B,
71zsv8[꧊{3+9̌ϲE[|fY)K4sكߋW9|2wV$o5}L9ʃVB*ĝB.BKB|K{[OF!/ĽBO
A!> CB<(B|f!>"#B|X	-B<*Ǆ.ķ
qDoٷ)K#A}%~yW#?\ r)ːB^Ar!E0rG+?|ǐD8r'!?|'#
y򧑯Fr5g7"#_M_Dތ%-_Fފ""
@n@&6o!oG6r;ȍEnB#7# !!"y'O۠?PK$  b%  PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_4_ESK.classOJ@}ԦQKPc/ AD*Z"[n܍|^~%n/3
3o
 rBH*YzU~R%Aوm|9L=JV9̰;Q	c	鏚)gSs9x$1L(aXMVJ?\nGǒa	d<0B|D!X!S=\VXl!p&ek=m.8y3?w6*PKJr     PK    A             `   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_4_SHAKE_ESK.classOMK@}Ԧ.xh5zQJD9x	v?%n(7̼a;O	Ӽȫ36IAeQ.0}x
QnG
]
Mf<d
⅚aV|,Oq",Ҭ	pew-mK.:ë_<! ZX"
$}<rc<;mln9{/X}ΆEFPKd     PK    A             `   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_4_SHAKE_SSK.classOMK@}Ԧ.xh5zQD%uHJͦ?%n(7̼a;O	Ӽȫ36MAeQ.yXBW!WO7DTBeBSYC6xf,XX,ISzs}!y4+s?\]lEŒOǽ?i ~=|tBhj$	Ua'iN 9nk΁V_aѷQ9 PKEPP}     PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_4_SSK.classOJ@}ԦQKP 9TkXl],<~)D(7̼a+[?Ӣ,cWY~Gy36"+}ߪRԂ;q bʪؔjck~/Ԇ
>j5/&Rd=>*ͪpWvC8qAC >]کHBtQ7F p&ek=m/9{O;CWPKDe     PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_5_ESK.classOJ@}ԦQˢ^ATɵERn], ?J"^7̼a@	B.^|q
	ܲD%u3{JUzYV~'4
>^=/&|5e59Jʂp[?b)D	l<A8AB$1X!4S=\VZl!:ȣ6h<ak3ckWPKՃi     PK    A             `   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_5_SHAKE_ESK.classOJ@}ԦQwC%ՋE(DnIٸ, ?JzQo0󆙏Ϸw }ln/!Ygv}~zl.(p}xrQ	nʙG
]
M<d5SaVl"Os,1̥Ҭeo[..V\GW~pph`ՃGkf&\hƍlh,c/X̦ePK;     PK    A             `   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_5_SHAKE_SSK.classOMK@}Ԧ.xhziJr")5B~^ )<8޼a
3o z&8nBh
<+6GĂ]󔱘pCxrQ	nʩR&WsG\GYJmRDRy69ՈgBRRiVdز-M+.Z_?'v`&X"$W=<rc<ۭ,޴Bb{f˲osr}PKق;     PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_5_SSK.classOJ@}ԦQˢV/JArha%ײnIٸYz)x(qS<xQo0󆙷W }ln/#N"wB_]ggȃ!a_;vYIaLA2iif=<F+%?zRLF2_CUDnUp2'ÖhX	"^q^ @!m(BrQәVY :ȣ䎯h=c}ϙMϱϵ+@PKm     PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_25_8_3_ESK.classOJ@}ԦQˢU,h!kXl]z<~)D(7̼a+}ln/%yB'NO(ggɐU7v*Y Ui3q8K+!?j&OZ_CYxe!5J'eN+
hX"/mpFFh`9(D+fƒ]xʍ[ܴrX`uwκZ! PKVT     PK    A             `   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_25_8_3_SHAKE_ESK.classOMK@}Ԧ.xhAJ(*-r")5wB~^ )<8o0yo Ip:ݔ:͋ܜt㬗%x
/}x'
^qT#J#C]GLa҄hfل[,Sjru.
*)s?\]lEŒwk'd4?@\>X!4#9ರGS؁gum5@{X{ٰZx_PKg     PK    A             `   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_25_8_3_SHAKE_SSK.classOJ@}ԦQwC%hUPDnIٸ, ?JzQ7oyüϷw  8^BhdyVM2L㴟a|2S.*M9a(BTՌARBP3|",j)e5>ԼT,bEпY/	6VH%!є#
id1ǎ6h`k;}[kPKT'     PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_25_8_3_SSK.classOJ@}ԦQKjArha%װnIٸYEQx8o0yo/ E𺽔:͋ܞ:&=㬟16$+}ߩBT;q(bҪjcVk Ԇ>j5Re5⹾*ʜpWvE_	aFFh`5(Dkfƒ]dʍ;ܴrXbuKXsgaj| PK{=     PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_29_6_5_ESK.classOMK@}ԦQWA*h!kXݸEGAċy潽82B븐=!tҫ4;a~	JŷQ3c".xuUZf,Nk15&QfX⡨FB
ͬiYnwC>>|6 
,hcLX^NaM v\@{	X;]UPK@)     PK    A             `   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_29_6_5_SHAKE_ESK.classOMK@}Ԧ.xh?ZE(DKXl]Yz<QxЋy}|8&tSB4/rsFNoAvp^\a6Lb¾T|*xř6S<*u!g,Lj1J	gn|,Oq,չ(bF	pew-MK.Zë_<!;u  
,{phcЌX>MBcA6s\֜b{gâokr}PK^k     PK    A             `   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_29_6_5_SHAKE_SSK.classOMK@}ԦQwC%UPDnIٸYz<QxЋy}|8BkYyJb70?NQ.YXLS>SO7TţR&W3G\YJmBDTY68Ոg\RRiVdؖ%-կ
?zI ~=|BhFj,	eni
N 9vl9@{X{YZx_PK{     PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_29_6_5_SSK.classOMK@}ԦQůBHE\ú]dKݴ?%n/3
3o
[K	UyJ$WYv0q$#¾6wVsQ	n˙dŃ`TE17^XBf*T8jBM*j̕94&)~7cGpxkk'~^C >mHBtVZ p:ecm/9{36?w6*PK     PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_17_2_ESK.classOMK@}Ԧ<^ZE "-s
vwB~^ )(7̼a+ln/%s'NrufafY2"czD%-g	SfVgIcn,GTpE>x$1͹TR	7pe#M+>Z寽
hcЌD~gZiM %nn{Ɂ֟qZ<PK[     PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_17_2_SHAKE_ESK.classOMK@}ԦjB.º]$fn,gEGgf06	NZY'mvy 

Q:b1mxrQ	nʙ{
]
M<d5wo5SRDXVcSKKY\4],hvxD8AM84E࣍B3RIsy4HxvZl,pv[ϝ
ʁPK    PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_17_2_SHAKE_SSK.classOMK@}ԦjQha!a.Rn,gEGgf06	NZY'mvu 
ӔS.U7TLBWEB9Y#,6[DTy68ՈgLRRiVd/MK.Z;u  
,{phcЌX~M1`A6\ւ'>csgâokr} PK6z?    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_17_2_SSK.classOJ@}ԦQ[P+%s
v-5wc!GAЋy潽86SBD<%tU:Άl02&6~E%-2.E,LU:^8RKH~G^4_YM2g2ڰB7G>>|Ë_{;& <X#
$D9Ypk.7\6VqΊ'l>cs0tVy> PK֊
     PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_8_4_ESK.classOJ@}ԦQKh!kXݸY"x(qS<xQ7oyüW ln/#N
Y!^]gy0?Y:"+}ߪG+Ό|1UiUl8q4VhCH~L9rGGB)4JeA+
hX"/mpEFh`5(Dkf&]Hr2cnZl,%{?csgaj| PK|     PK    A             `   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_8_4_SHAKE_ESK.classOMK@}Ԧ.xhiQAJ(*-r")5,(qS<xEq޼a
>>Mp:ݔ:ˋܜvt%x
p(Cx/
^qT匇\U.䜅I#أ0BiBT3l-Ur)E5bPH9/bEлSQnU.mBpUǣ)Zh:fcYp}Wl<lYmU/PKne     PK    A             `   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_8_4_SHAKE_SSK.classOJ@}ԦQwC%H
Qha!/a.Rq7Yz<~)<8o0yo "8^Bh
<+O	;&8bń;JpSdX<P(Uhr5!q5Ԇ-L
KgcYye.5/fEF+{mhXq"~mpph`ՃGkf&\hƍX`v_MʁPK-     PK    A             Z   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_8_4_SSK.classOJ@}ԦQ"-ZPAHa.Rwn,M Eq޼a
_^C𺽔:U^:Mza6ȒdD8'%*m9xL(5J9Kjsd)%?jOF4_#Yyn.$EN+
hX"~mpFFh`=(Df']*r<J=nZll.0tVy> PKĹ     PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_49_11_3_ESK.classOMK@}Ԧ<^""HuHJݍ?%nA/3
3o
`-dQK/|tq>O1!%jm5L4J/8Kpd%%$?jfτF/4_cYOxaΤWڤeA+hX!/~퐰lEFha5(Dkv+s2Jnl-quKtϝF! PKr"     PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_49_11_3_SHAKE_ESK.classOMK@}ԦB B a.Rn,gՋ7Ń=(7̼a+>v	VZ,3~|}Ii//(!޿98LŜ\UE)}LQ
	ᷚ)gSnl"Wq$1ԹȅbTqnl4mhzWvxJ8AM<Xp=4碍
B3A.sy8cZ8fZlpt{+ΎAZe PK!x    PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_49_11_3_SHAKE_SSK.classOMK@}ԦB PDnIٸYz<Qxx7{{y0&SB(/꘰.Q6<Ȣ(dld%HF=T3".+Bysd%!jOZ_ŉ<קWJ2'\Õ|hXr!.~phaكG+v&xƍ;	Z=ak;}[PK     PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_49_11_3_SSK.classOMK@}Ԧ<^BhD$s
v-5wB~^ )(7̼a+v^:'P)Ǯ|t'I>m[(D-2.D,L]V:^58JKH	G^4_cYO2粐WڰRn7G>>|t_{;& d<ZX#
$D9sk7m\VO|Naj| PKQK     PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_56_25_2_ESK.classOMK@}Ԧ<^E$HE\ú]$ݴ?%nA/3
3o
[K	\	\]`Y?;KF}mح+Q	n˙dŃ`TEUzYR~/Ki,!Q3|*5zO*jss.4&)r?\GǊގd40B|D!X#4c=BVZ p:ec^rgl<~t*PK     PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_56_25_2_SHAKE_ESK.classOMK@}ԦE(DCXݸYz<Qxx7{{ypM馄q.򄰝\^ì?z%gxmx$83L=RF9L;Q
mѷ)gSnV|"Wq,1BR	pe_..\vxDt X"
 ~͘1`A6\ւ'>csgâokr} PK6    PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_56_25_2_SHAKE_SSK.classOMK@}ԦE(AT"ZXCXlYz<Qxx7{{ypM&qg	a]]'ô?H{a|2oC.*M9a1UQjCVk~/K
!V3|",j*e5>ԼTEŒd$?@\>X!4#5"GSn4؁gum@{	X{ٰZxPKo     PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_56_25_2_SSK.classOJ@}ԦQ[`(BA`a.XgEQx8o0yo/ Mz:Jnzy(A6~P̖<*J[,Nk2D)%$?j͹F/L≨L3a6i!	pe#Mk>ZË_{;&z
hcLLs~NZaM v\@{	z:]UPK|     PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_60_10_4_ESK.classOMK@}Ԧ<^KE "-s
vk!?K/?J^gf0;K	1\^'٨
0;M&ҷF=؅d`BWUjYRk~'Ԇ>jgROd5>*9scGpxkoc¨Y/!z Q66X$!:/#
i䲱m8>x3?w:CWkPK5     PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_60_10_4_SHAKE_ESK.classOMK@}ԦK/PBQh!nIq7"xMA3
3o
`m馄q.򄰛\^ll%gxW6QWr.➇\WEB#ՂIٝ(6[͌TE>8ՄTHYtR/M+.ZË_;<";u  
zphcЌTsi?aN %nngɁ֟eѷV9> PKc    PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_60_10_4_SHAKE_SSK.classOMK@}ԦK/PDnIt7"xMA3
3o
`m&qg	a]]'tKtQ|2J߅!জɰP(Uhr!q5Ԇ}
>j&RǲL\j^*͊pWbEpxkGanU.mHBpϣ7F:fcYr}gl<~lYmUPK     PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_60_10_4_SSK.classOMK@}Ԧ<^bE)H"-s
v-u7B~^
(qS<zQ7oyüW Cn/#NI||0.ՏWr!TEciSfؽ(G͜9w襜	U<ՔIs.0&-$~scGp|ko'Q^C >ml	BtɂY+,i䲱]9>z
;O;CPKQ=     PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_66_15_3_ESK.classOMK@}Ԧ<^BD`a.Xҋ7Ńx7{{y-ΑT:&˫HbxPlLjskl5qycnұUz	3NTXBfٌ;jBN*z¤9JVipWv9C]!!A6#x#G5B;SAΕ93k7m\%{OXNaj| PK     PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_66_15_3_SHAKE_ESK.classOMK@}ԦJ5PBQh!nIt7EGgf01v	VZgY~|} H{'i?/('ս's^q˙9R:5bJo5SΦP%DHTcsJ"#Õ|hX"~t &,Xw`sʉ x<13L6VmGO|sgǠkj| PK:    PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_66_15_3_SHAKE_SSK.classOMK@}ԦJ5E(AT"ZXCXl܍,(qS<xЃy潽&SB(/꘰.QE fld%ҷz(D-f2,E(t]V*458JjCL
KYyOe!5feN+?rvC^!!AO8E࣋B;VIy<Hxvl-pv[tϝ
ʁPK	"*     PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_66_15_3_SSK.classOMK@}Ԧ<^RE$uHJm!?K/?J^gf0!v^:'EYSB/8·G(O1aURԂ;zL躲R-9Kp凌53gQTⱬ'粔[Ӫ Õo|}FvL
-bNT̹1`6A.[+v݃'l>cs0tQy> PK
     PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_75_33_2_ESK.classOMK@}Ԧ<^E "-s
vk!?K/?J^gf0.^:GEYcB/N<4e7N%bT3G\;i6GDpTY1x(/,V*pe#m>:	?YaBtDh'j,	y~NiM 9n}΁sڨ<PK"      PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_75_33_2_SHAKE_ESK.classOMK@}Ԧ4VB a.Rq7-gEGgf0!6	VZ'Y:ǽ4҃4>DtG}[9yř./UU׹3?qP~p6*9B}GL\(VJFƒ!>Y7`6VPi-4vidum-8{3?w6*PKD8    PK    A             a   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_75_33_2_SHAKE_SSK.classOMK@}Ԧ4~Qha!a.Rq7"xMA3
3o
`O	ȫc:J^ENIXBV6Q7DJPS\;YIm񷚱caV|$Wq"!,Ҭ	pe_..\tů{  -{pbЎH~O1`6A6[3\ڌݭ',>csgŢokr} PKwc    PK    A             [   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_75_33_2_SSK.classOMK@}Ԧ<^փ"H"-s
v-5wc!?K/?J^gf0>6^:ǪP	^^eA^#®6F?V3{J3[9gicnGTp蹚HU<+s&ixMZ*?\Gǒ!#° !r Q.VDO$!:/Ɍ[+-i䲵um.8y3?wzCWPK}(h     PK    A             I   org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi.classw@S>bYmj[kE@hEmѐI{ewUAUe{];_\f`KwϽ\w @ah0X!`5 [#4A4 O|
FkPAN
4(`%ՠTq`s48\5Yqn	O@:.b9jG:kkVBeU(5|!:I(hY; zx z!A((vVIճ*(/:odNx%Qu:ļw+~Q$Q*,okrh/~WQ=gw?m^|+^Q^m~^[CF{񹣯$;cz%u%Q+& 'm^|+HKBEwo	}uУNAWXIQUOwtJ4tՇl
z)B&
L
A}˷gCrx\^OHڢci|_^.(a=Xc"Zjtz]
Wsy˂u
/<{>MWGc
J͓WBBOxEnEe:?KW=k[zoWhlW 8]oW]WuWܲЊzZI.i;Q.Z6zzh^	.14n2k[o]z@w_(w[o\h)*?]Q1HuΎiݧrRkΎ;f𸄃#]
l,cVw=m1:aI2${ĢUJ.oHJ:S
g*LeO|Lf+⾫*yd"{!2䥍rH*NYT$o,.]!~~&q%IFnOb7OYT$y1؍g!)˞$=znğ
,{zQ\IFeOUOdނ]
tw 7LGz~[@9H4#t=B'+Jz\CHXk`4(`L`4
*4,
*5AZGp	X,-` ],Lr^| QBp($'8ENp3),g8Gp\("D.p+\)*WX)`p\oezYJ:#gRwF)Jv#Eƣ53]MWVveA,ٽ]~mҘqbZ=0bW7pʱ0AG<Y.&Ő2zHS%_&tR&8)&v>E0L}{,^åV̍m ц-18Cο)?	bpiE+loNifܝmϋMu$h]`;
sp3n; ae0213cc$#1c3F3
'Q(ae213&0&2&1)i
L,F%c6qc0\\\\\\\\\\\\\\\\\\\\\\ a1!a١3pv5A120mva!p@҃7aLxfcgؗc c@A!a,F6ab2ьF!(b30Jcq	I2dFy&={1z302dNʘƘΘ`dbT2f3ss211f01a8q8qXp30tƑ:Re3|?#`f<b8-|<-|6<a
mf|u;62QO6xxxf#7<l#dЗY[\{|{]Na˽w-p +a4˘gR)'yD@H`~4pc#~
G\NϠ˧qiC#G:FlazdxNjk5oƏ߳{SqsGlĝU9(㑚ޟ	Hmh3~;Ӥq}ȠIhiʹ{
hh6'V^
?LH
lZ,s9\e?Cs%twl귵Twtw5bd/ZٺU(^<6<;9nyoIUT˓5#x&i/D]F6n-Ԃk2hMg:xxxioE]<ǊYQWϵ"[QXQ7/"Z^nE
ĊzxKho>ڊzxiUV+h_o~^kEx7hO[voT;
Y	0&%ەnoU{
\x.[	xμK	x6V	x6xn0Q9Cq6I,(3gtW霣8J<y@:*ҹXqJyH:)6\8IryD:(ΣҹLqKRyV:(SY8Hg<-UC:W+ҹBqUtTs<'k\8K:yU:(KҹQq^͊tnR7s&[
Qץs+-ܡ8H.y[:w*·Y8I@:)҉|."$,Oi!ϐ%}tsI'"}4ERK#H_&I
i髤H_#%}4
|7IGEZ@6i!;NwIH#-&}t%%cq'tgI?'Di闤I"-'t
7SI%FtIg@ZA#LҟHgLZIl_I PK@?0'  ,  PK
      A             -   org/bouncycastle/pqc/jcajce/provider/sphincs/PK    A             I   org/bouncycastle/pqc/jcajce/provider/sphincs/BCSphincs256PrivateKey.classVSg-EZHphţuټbHfһV}>N
L/?}%DHL3=s?_;]%E;&p֝oP<7͑EivN@aь>n'$}noܽG@WQJB	еU);TZn]PaSB]L5T{gt`s  3ZQb(4#j4B -DJDehSRInEWFJsӺS~/ݣ3֦
8(RC>2MjXUZjE#vXҹa^WHcn4a%2x3J%"4eԭ1LMcPTc7̫#
ޖ`g[Em@c-mTq'Ƞ̰e5]Xkwb>[3o{vӊ(#^bF
i
Ö&]Ґ0pZ(թ{rK	6dVay4,YuR21=:
fYHg+cQIO;eqkJ2EzFxJ=-Tru(DIf[Dlm""DDExDlQ/+b<{%Afe1"n!AkQ,<ys.g?PuI6ΞUÌK"3d}w.%Am.Ul2VƬJYdeg6+Ye)O&Svk꣞rr/ej& Sl]'ޖŬkjA"39OZb399wǲodl?Jw2r]2v[F
e!U<k9A!2VHmP>؀^qFj>8'
el"]'9$2r''`CAD8IH8V\i	>N%N^Ў\d%
	dT%+r\>Yꋚ[W	'6٠;XoԒCNA
	җ5qy̑jBc)a"zVOJ4rs?[h^  VјGdB6wc
F;]$޿[| gE%	Wq,eo^}pv
?}:\⦇I3uOfD]8''p~$EԡM挂u:.ХIrj^Fϯț3Fm3QdgOTo]4͢:}|ʍNcbOӎYyfoO].:i4ylV+_H]ga~mYYn3/s!MTilS[<ꆓv_ڵ\M!F5T!q>E*%7ܮ$Iͅ} PK!  (  PK    A             H   org/bouncycastle/pqc/jcajce/provider/sphincs/BCSphincs256PublicKey.classVWW
&Vui!\kQQ6
hm&0&qfjBS/}iݙ!H9ͽ}_~{!yQ+k8"r[@B7_Ikfu
N
c?@s	^`W2JR@j0b'YV@3e&j
eƒJ>gJ&ifJ|&X箝54-,V3n 'ՕLH81%@i,NniIS
)8̡R4Re,3|`GK0,y's"LFO*JHKT.`ªsTOgESMKe@&=
'HQ=^`~PM"V?e$BcdAͪi%YH1PWl
-tKט!8k(_BP⛼Eh
/v`wi
v(_5i+2
%QT+eP?TX5]NʤBNq+*ˇmolw9'9#*VAwlYa0,:U2
dMIPD{Hn*80WOn B'DlMv;D<));E<-b~A;[I_U/'|}%OrSn]N(<6co%ˍ^tr3d_df-.6TƒeEc2)ҦΞєzPD{K/ãڿj-֑޾z.X,3ZzK:lxUU~QkU#`Hxn2!ef(cߜ=2<GP
YI[eDF;áQRF=P%cfT˨(#>{/	26cHz⺧eCOt@޶,؈2₌5xO/^A8(AäC`.K*8%tb!aZQspUB&FVBIrCFsѥ̹ՅSuQ~_.f)~%=OT0zP3-^jզgɼx5Cϵ9?x7t>sD<KNH
zJq_:o_Ĩ$ݒg]6 rxsaoqy|vy?6辌7nhGPU9
#74f<XyYϬwkP)>@1O{uQ~;4k@5ғ=;nc]uc߱ymCOxF;shѠzQ޽G>5A74>wQRHAnz]owܛMNQC\?sE7qnlw7Rxǁ~p,jĳ{qUNE-oPK]g  
  PK    A             L   org/bouncycastle/pqc/jcajce/provider/sphincs/SignatureSpi$withSha3_512.classRJ@=k՘4*Jl(DBDn$fKAMU*tffgg	23]pG~YTras`-+EXb'p!_/9r
BH+LHaMJ@DUP8):%U
`-FUfp-By37co	7
4
}t\Ov\:OvA߻Jc4AW"1,F
3Џqmv3	Ҿ`jeb*99DLSΨ6teȞwGL<<o:Hhj`ЬI9PKqs    PK    A             J   org/bouncycastle/pqc/jcajce/provider/sphincs/SignatureSpi$withSha512.classRJA=ZvdQlQa?Z6Ŷ;X =Pz*5CHp7s3g
@IPj 22r\&	b̹e+dr_ok7l*-uqBma8QlHlQى?mvGlvokx\[j.όBޔW0Yɥ>A_YŶ*sK%>5kt`#ea#
Q'f!3C|߹W:o4994	`( &Ŕ

*bQǬ1ϚJW-Ωoj7c$1.A#ڸ"g{ՂVlb-ċ-Ċ	&;M,5ܱX!	PKd)  ?  PK    A             ?   org/bouncycastle/pqc/jcajce/provider/sphincs/SignatureSpi.classV[WW"/xA;^*IFUEi%AMFxCafmm]KaQjڟv!$$Ծs>Ξ3~
a| q$Ñk$k=hUZO䪄ny;)FI1{>nN@"qQs-,ձPzN	UBT3Mad-Plnhy	8+A&#,	k햦-M	K)9+wVOE.frenT\6#J
TQ!,Jh	'IwؗŌ-_"%> 'aø6󚑋Flڱt#SYӶry!ײ\-2EKwf)cZYʨVbJl ۞ IhG
E#3l'/mtO:/
Gu$kt
EIW̩"6t#c:2T8nxFP*L\ɿ'zaҧI	=83nR3ǴC7t߁0
fdt#Xt<
/x)xUISVґ1anNl[dU%JІ5vR2-c2^OFv12ˈKh[V]]b}O_WLՐ(hr-hzSze̖]oZ_Xwye|@ҵi!lZ+)IѧEPbb%tsLX|.N9}4,m581_]5RX?TҜۃW鳜sdHSRЌWy;J4(d
v `VPQpM
q
6a@⢂V67\gs!@..l
!Xty!`"d،!q6KrjM66Y6tU,50-ѼFJ%e6<_y:H;Zf_3/i#y~<T^顥R@$EWǢ-$7	W!34vctoEa*πq3.wi G?SY?Ǯ^@,n{+f1=;i 9X
aw~"o[񅛌DG3Sjiqf}+5$<E~*fb
2u.}סAW|VA[w@
}+tC	\y|R+Lt{?S3)T<6͐a^!ɴRv4{]'lѦ~ʼ~qnLh'0/;mwZGn2dhR.:OkbroPK1	~  -
  PK    A             J   org/bouncycastle/pqc/jcajce/provider/sphincs/Sphincs256KeyFactorySpi.classViWFc	B@CRMaIJY[CnBH$_
Ť._/`l	Y޻Νf$o>u}hx#P=c
6uͰc'ƮaZӱ4UUMc,˴]-^qf,V5{bYghьnhيz:b-T4Z&JRyӺN`hضͽpfl[yc|2j_Bs#Iq$Ha=MUtgql%9ZƎVdݔVgTs֤b$3K	umHSz2]9)[w3VzW|{GmNQ]Ӧ|=罢%"%UPŹRw
_|dpwϴ2Ԍ8nRg+CT=TPu:rĸ`lru-.GS[;1]*;&[֩.rՓӨ^Ȉi5:THJqAÑh~pdL>CY;bxz%33shq={9p8z8z9898d:Re0^s)8*[V$'^ rtr\x~raZWsMdKʡ7",:l]j"ȥ(%tSUdrW+a},o~Ha?n# 
۬y|G ؏6,VxkDL/FMnh01#/E!I%a
|%yV	 }{ʡdCUeZXtQgvM74kQ_s_ a%xrPKr_OxH.H`<֟E	Fb5Y"`4b[hFJu%;o?ppLpqC:%o-w+YY$d,,;Ś<BS59$✜4D$9ShxP~o2p#N/{GOOQʺ|*2W򭠰:ܹ}N-,ZBϐzIh,P{g~t<-k'9"!zT-PK    PK    A             P   org/bouncycastle/pqc/jcajce/provider/sphincs/Sphincs256KeyPairGeneratorSpi.classVmSU~6l)X	R!E	VS_p܆d7nGh_)13s7/&3s{=gϿ(ɋ^	hq]5{J71 tlh,фwɂiMg|W24ә+,+IFif/	J~=N05oEOY]j2vSK3pRKYȚ㰫Q4eGA4hJFXUҦ22V232ݞSmjzZ@Yxl]"LE2ib*Yf3KQ/4\+' @0ӡu#U)>5cLc)
Z1r3QB6BLMj
f֢hju3w4Y+,MnM,,RX!~E4tlv?[mU+*m0Ju-y\ɟnrP.hCMUTij;Z5h<$`,ՠ,Dr@k"5KL1kYIS9U}S>ݰ}_;JSC\bB&"Ί8'E*₈DD\qIe"
op~hni<ks1h)E9짶߿nxeWV6H6ꞹǞ#bK$QSfI&̹!k\][ߤAnCc7U]dGM7W.!! u/u+Qu\LeY fdFTFoq120+Ë.D/]/b2z 2`I)epm.bD'p:q\Ň\$+!5	CD0I9Gq\$$\&{&
0
	|JOQ#EIR+F]	[QܪaHGӱwm)H)rF6<-$&mW"/E6Pd/va~<١2nUϐFpܳf')pDdo[況}D{ג&=(`:X^-cS{xhD.[)<=!,"7tӿʞU ':hqv=<\>Y1F%Lsl%L9",EPKP  
  PK
      A             1   org/bouncycastle/pqc/jcajce/provider/sphincsplus/PK    A             N   org/bouncycastle/pqc/jcajce/provider/sphincsplus/BCSPHINCSPlusPrivateKey.classVWGMxl\/!n"A#QװY`1ٍ}??'>s*p9=k݄@srg;sgiNXOړMB)QK;
p/04rG1Ds+T.vQn˼ s׵;;4[>1m9i1I^.u5aOe^Q6b"NVqueJw)pE1Y^Yy=O`ȲvR?m:.7rJOJ=O+隿DUDм ܙNтR8f,W
KM
>kX&֏.mnΥQknd7Y攚*p(n]TrwS9VLͩ{cSQhsw܂r<i~밥s%RҴajNPvxd_۱P46ڌ$q͵l-U
χh|FU$&o?ÕK5ku{M
·V|fLMiPm9ڜRP]s;:m8KTVo&?&A-%	G%,	J8&!&GB\BBq	I8!A𺄓HFOt!]A&#̆wA;j/ɬyb
xz7)&r"$|Hn2E/,%
+t%|;3s*wn[t7vqP7*l^36>Aaoc7t䟽6[X_B.gQ}[I]DѨM=BG#BtYA$o`T)xu])8o+8
vxWA+ہ!/2Ą2	aqy!	Qfd$.	]2R/Bd\%
liL
1E/.Ւ;eշ}IZr.
>QMlрz Ï,E?/FmEq4Gr|Q&G3!e|c~#!{i
>~7XHVWelcohj\H_ёx(/~<'"awOZFxo6ŵ ; 5,!	&OW +2C|aY+4]zOp}o>_2,|w]|	
@l1x+t`<l&?:;dz/4KOqn$~|f<3	Lyi!Z]PKoɃ  
  PK    A             M   org/bouncycastle/pqc/jcajce/provider/sphincsplus/BCSPHINCSPlusPublicKey.classVYSW 4

".YtA[h ##k-1\ƞl! O<dy͏JТRRŹw=˝?Ћ!7.՝C}CC)H{~Խ:CS~Zn2Ϝ!蝳]bHvIn,04rG<*s#'D3˳B˳"gYm1ˆwCT `hn;'7gv9*M`P7h[+dZUL-F-ɶ9EVt4wx$Zt4v'-4-"wY:ǆURsS#K=2:wCs]Łܪ*{5漚5NZtYn݄PY7
aP-g^%q3]DS32~S=Kunjm]5i׆ht/.ߍ醺a65r_hw
X/hBMkk"uYێSJ`(ti7&*36aa{qxˆI;٩iVW8:7f(1Tr
Qy-z,w1om?&Ap\		'%%m	HxW)	%$tKHKHpFYk㯧Ɵے}#x|;/āT#惩><vv0Dӛy[58vEvQ8[0&Oe9 y)`p~$.#pE
[Mt+%5<Ucޓ@5Wv_B.$샤WЉI
M-fⶂ 6ad\'2>ħя2BQEQe<.#h2+12 _#0d3_|.*UZVpLky㧜ٖǵܾg
,th|&pO\F =.A^oK)`VM	y6G"άgLDәh__Йy(UQ	5|\8S@hE!au'm8Ca*vVE945<uJZ}T2V>n.F%&`uxsuu7r_#߮D~pmǅb2A̤>H%	v}${q=2Bfv&]U<ڞ7PK<  	  PK    A             O   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyFactorySpi.classVYWF9!PhhHj	Z ,i S5q&pFR$.'W;-tyOC;^؆Zh{{h߿
`yQE
^4z.G:|Pnj[!1eǺO:6}<4:TciD'ýMIXiNeĭR4ە_%xҌ͈醶ں'#%v\W
bwIKE
?'ڰÉyJڌm+4o.+qil\qsjhİ&aqC%&ݙq=f(qma$Y7ܑY"1bVWz\Rk=F\[7blԄ)9l$CY7_dc(+kڔ/VȵHi
?\_Sw|Pldpwߴc0Ԕ8n\g"CTՓT`e:r1lre-.G{f1]f*{&[ԩ.r:8Ш^YHjשne.jzc/WyU!6=)B^mUf8:98!GcCc.I:2as%P./x-6"KvRenY1׵,h<,b|aZ|lS@U]D!d
py(rJ%,?W>tI>#0l·V̋тh}#,|hÊoa͇.%O%x&adG	Jq1`C4q1s	H %aI!uL߳n+!n\tWk5SϨ`'l{XctO񕞾װ^eSG`71>H4_ƋޟA4b~F4vhTwP%m3C`oH[Cqzna5O0Okhct-eSTN+@j:h'y:?WDg~O_16NR288!vLke,s|{X$UԷ?B%QMT53?жiqhoIvCǣ<-n)PK72    PK    A             _   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_128f.classJ@ƿik<^ŃKZ

dݎvKTcՋmQAo`ü= 8l
Ҫ.rs]-R2㨸Xtj&Hiilb49i)O1k6MZ(?wӑh_oG?m;+FqO%B5QGe> V82!k8ֲu};hyʢi{#V6p5p}ڄPKZP  
  PK    A             _   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_128s.classJ@ƿikĨZ/R%-On%nn*EPⶨx70f^ߞ_ bPmҪ.ssS-gR2㨸Dtj&Xiilj49\i	k6MZ(?ұ\t,,a ,	xzyX!M?u!*X#aPv?3a-/`
rYY֦vhϱǏMW-PK;  
  PK    A             _   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_192f.classJ@ƿikĨZ/TzA@n
},{< >-*<30
c׷ &T[!~*FT˙8*e4b"4l1VZ"(MNq8}ʳD(s̚(spĽt,:W
,a ,	xzyX!~M?u!*X#aPv?3a-[w\,kM;K
4XΦwPK+  
  PK    A             _   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_192s.classJ@ƿik<^KC[

dvKݴҋmQAo`̼= 8lSU#\6gZ.eQq/Sj&Diilf4/4qPϚ(spt"ǝ%t~bۂwV"%U5k]B{k D>|<ljq>fB8q&ew6A.+G|ΎK.wPK-Ŋ  
  PK    A             _   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_256f.classJ@ƿik<^Ei%-OnG%nn*EPⶨx70ߏa^ߞ_ cPmzWiUS)lqTh,X:i5dbE6Q4qP5Q&-򟉻H7ض`#daI'CCskbk#Qa +ZA	kٺ뿾4<eeQݴ@cOX}l>wmPK/  
  PK    A             _   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_256s.classJ@ƿikӍQ<^ER%-On%&q7X"x|(q[T<yPg`3o/ MCBXg.ssL͔eaqMhΔ-ҩ
tp%g<6'enBesxd	ݟض`K#daEa;5G`o`U@ aPA~Zv/`
rYY֦vhϱǏMW}-wPKc  
  PK    A             `   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_128f.classJ@ƿik<^AC-=xu;ڭ1YwSe/Eԓuf~`j'ԏT07U1D
[f{I'Ml"*Vgcq,NOxeeaRLN/w	?f#dGaI'CC}kdiꇨ#Qa KZ\r8ֲu[hYʼisOXyYs5p}ZPK7    PK    A             `   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_128s.classJ@ƿikӬQ<^AEȺ֘ǪC"Ƀ:3|?y}{~pMB:ep&dj-S
GJ&6-:SH'6LEN4ڜpFI
MgN2w|h	G?m;,FsɎ 'CCskdmC`ه@
&}!JN_6nu䲲M7m-4}f;

PK%    PK    A             `   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_192f.classJ@ƿik<^Tzɡ-=xu;ڭqwSC"Ƀ:3|?y}{~p-BGJK8utOIaˌNF)&I߫c-Ҥ?8c%Bk6MZ(?wӱ,a-(,	yzyX"tN~?[u!*X#aPv_3a-[w[,꺛h=b	k;]PKO    PK    A             `   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_192s.classJ@ƿikӬQ<^⥴C-=xu;ح1ҋmAo`̼= 86jt':g+i˔NS%I1)[3&,JbOxKmenB.L
_t-bi-(~<T=<Fv	Q:D
V}<jQ>fB0TZtVA.+tRG?acgUµPK>&    PK    A             `   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_256f.classJ@ƿik<^TzɡEȺ֘ǲC"Ƀ:3|?y}{~
BG*Wep^r"-3FRxP6CKw'<I2]و0V&nCq˗ׄßVKw\$a>5M4`oC`ч0%B-.L{B	kٺ-4,ee^Wݴ9@cg'<~쬹>sPK>0    PK    A             `   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_256s.classJ@ƿikӬQ<^TzA@^dvkLTcՋmAo`̼= &j	cKmxO25UҖ)X#%GI?C)[&i"JbxKmN8c#$&\3q';;8`K#dGaEa95C`o!TG aP^Zv?`
:rYYԦh>b	kuWswPK)    PK    A             U   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi.class\TGXQBqKT,A"L"y,᲻ūj%Wr=Ϙ"{r.\6?70>DDkH)RY)-)%SPq]!A!+lŶ
9Y)wwMV#cDf+f8h96m#f1GA3&HcvQ#*Va k]5YxJ4!+ f npF
U)̌'#
ؤfV'#$7KӺJ8!,%XuDa!1yy=;8bj_\/3fT+h1dBF8k̠jA3101+Tl+3yVknF|퉙[BSs3ރJY!_5f5E젯7F=E|- ;@7ԴShߴ7
4g@	X\;'.z"0݉[
_:J>1Uj]h^%2,]Rt$?Dmy%w$jG,~Q32nonTL6$g\7br;-._Hr7/Jй|U
p/KᒳKO?#NТgDwrZG|yi'geNH{Ho܉)ݎdw
Hs;{tb+RnGN8wQn	pԀ~e'Qr2$2HGi_KqA';6R@-hFukըA5jR#F4ZQFk4Z:ktF4ڨ&5ڬjM4jhFݨA;2@V::1t6<Ng/GϩȾʳ<.W/{ՓٗrSӗ)u@52xmݔAL"QTxL9gzro2)];;`bRV{VD$'khvV9#rv_Σ=p4;YFyX`
y6[ѩ.zN;:"ҋuB`P\=@]M~ @7p
8
 0\xvمg]xvمg]xvمg]xvمg]xvمg]xvمg]xvمg]xvمg]xvمgF3tM/) hRuEZS*zNWxNWtꥻt*n*rz=ĽG6zs9N^]  A4ppx 8c9< 0|0p >|q'O0x+6;=
|Ys/ _|
Ukׁo |]{ ?~	Sgρ_ ~
[?z~x,t=BH
CN!6:ICϣ.A'C	*iϓ_0m
c:nuyMSzZ#SDt{fcF8!?a^%Z|bCK|nɒ3YH##!,nyD5*1&{Gϊ9qYQ->+'Ǘ&Eh&q<⦪QqaTǸ6*ODQ!E&^hvoIjrA+c\zXwUɘ躐yɘlˮs")/>߽T3NVs'/bYFEf\ ~syeI<iF{Tt0LP|/s{Ř1aCS^xywKν`өhwN!miވ[	3cl%;Qt\\*sB7/F~FTtX*RR-R(ۤ2OQZrJellE$JE,+eT*
R(ۥR(;PQvIFQڥR({XQJe2EQ*W+N,R6\(rtH:EREY!bEY)J*4ILQJ\QKe4JDQ|R(R(kQuRz\Pg
wp9SsT.#\>(O\:\>2s\PK=9o    PK    A             J   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SignatureSpi$Direct.classQMK@mcEzI/B,qKHFTG/
`,;xþ8Cן2.TàЩ_TLBK[JWY8|_S>\2MG TKpw& 'H}9c[i!4TZ
p88Zwү7x؟zhհsѮ'(Iފ	ipZVFXݎ%K-)| PKQ    PK    A             C   org/bouncycastle/pqc/jcajce/provider/sphincsplus/SignatureSpi.classV][W~7D6,h0hl-
#ֺla!쮻4'}ҧ7?E?f6K> }9s3Μ9{??
R%8%!iWs#Zyf=YF,dR6Lû%!6ͶifZQGu00)	oRse	G2KnrFp\55nVJ[mD^ |jek.7.S8`+9(/3cZ?e?K%YVTQ3;ua{E.ִOj u3>z1r*khE#Oq0FLcmH[N!5oLkW))۞5TGY		NN ۯKl6a~oZa],hnd΁X+F^8
NFFL:
,UT½}*
t{j<̾gGtnPg<0Ji2cv%ؒ(luE>Y U׎Rpi:WRe"㠌2>qFYdqAF22eHҡ,Jvo<!{m">]JHo7o/ovmn$Gj IzKvp`;._-}UNp~ړ6.߭u6{1>ξNGO*	Vq
a8"YI8*@UCFUAFE}1ކx$_)3
bVWA#`*OxoL0*d;׎O<L0MoݨdM][7AJC͚h?#y4ُ
q*܎0e2	.N΁5
$a'/C "XxwAw7'W<1-V=:6pm&ڲ=Hx{	aŗ$*S;x=o0+ V]"~D"$L8\Ċ5,T_]O1H#%#-_鞀\G7}: M+DO:6)S*
ÒKd7nYLs"T$c<g(w}
/ޓ8sԏeHMCi>f7"AA̳u1YNLRwnGWFՙ t,(Cn筂hE]^BPK0@  x  PK
      A             *   org/bouncycastle/pqc/jcajce/provider/util/PK    A             E   org/bouncycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher.classVsz&.6 %GҤ$!vVHMhY׻ʑBߔ<Z(δaswQlLw=<swuKs09aLE0[4=CQ#6nZ^Czahb
hzLf*L% ]2Ce<0[2+*MRf,)EXY
-)۶vL%PSzA<a2[.6C͕"4(b:H&L˳
ˑ

~#D-
VX=7E(@_q}Ym]7Bui8\e;Mq:YSSo6]M!n

aU$QERN=o9Mpv͵h#C2m(HK	Ii]f
+8Ȥds^xlމeXhU7jl%-ҡpN1Ÿ_ۆS/rMˮ	_v
R~L&iR٠fkd32uVpɂhw˛Κ̍R2HV#]*ޣ`r;%UYك]:\▻{΃"H-HJunTK_/-MlFb;؜߰L\u+}j.5j&M}wâ)5C.u*o2%"gͷu0UԲT(|*kMC +/t7
Dhz5#ֿF*T|EEQŔc*UWQR񘊯x\ITÕ=ʽ,H{0Y$)6Nݮ:haGpjbivd.y	^\^tHӽ#{2%ʉ}؛u^p4e405<}hh,j1a[fU
`QWAm^.ixW4⪆I\xcxL`XaXcep< (cp2C`12!CaZAߴ\t:0.ޢlRHy闊'gTI9RmxXPj)xsK'x A9>9\GGPih 3?G_;<pF6SnN2;ON4 7wW*v"j
G*ʠ^}eH!'"')`C)S?}[(/
ŝ[Ҹ*LHE_E3yYQwb'eѩXTbFc~Ա_t%g_'NFI!)	
!Fq?K"\E>{ӊ@O2>1塉6D?I;w39]jAit_luFua_N݈ϖn}LA:+EݶbZ?>&?䶔!AC487]Jp㌊l6ImIQ|X6?0Pf1zTv,KdƲ?	ot="hZqո
ی
2f׸f:9ΗCmaait:~6D&_aLlJݶȤ&m?]L>ytV44jkKFo~D'vʀPK
  
  PK    A             F   org/bouncycastle/pqc/jcajce/provider/util/AsymmetricHybridCipher.classURV]2F1ͥ()i m-Ӵ3B>#|M/yC3ӘL3CQ-	`2Sfξ># 7sj}	|,!HnP`_"9W(dI?o[%Ajͯ|m-\wq\BiUݡ-DӌJq-gO'|zڶjh[eLöB]TcQ7j]`InE멐mT(*춨Z\1nh}4aS4/
5.9{J5-"N˾fF0kv}CvY/=_1O(iUnю%KޒscN'43@T*Yv4a3Ȼ<zKNܩ8%e}˩f4<"惡(}ޚ([;m_L}4vMt}$\[}֫\˼WrR{	SKUkg!SbUt<ᇋIz|,~PnZ2|
(}|#	响PoM晑,Z]89Cf"VkU+LU`NE(:K#c<gkT1^3It E lPe
ØRя/Tii6#Qfz)n2&1$t6ױle3f7l)$評Ãؼj8}|bT׍G)}wJEWi%d7i6HDcw? ]5oǡ̿Q?~bCD*{R&,R810_ћ3$xy\zS"#
x:ă7/G 
&,~, $hKc!܃p
~n8җB}aW9;N9c3Q~:/DE
Щ$l0E7}ǩ-mM#4_j%rGQOG+
CkCC/x:K˩tVȾTSNt3Al&e[?IǄ,'*`[PK_XK  i	  PK    A             A   org/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi.classVYWF81Jh!$mHf"@.k@&AHwKrNc./}OC;1N893ݹˌW ]JBheأQp%,>iB3.gh]y,"<ܰV-C-G܎0\Z^&v\j#I="pXƈm:m2G%<.LKI.|޵40gVl |+k4*jrrSRl#rpRk %!<_/.pMRΒR?s,b.7k%GVWVD֠y]ꚭSb
nϚmnv's{ZXvԕǍm(	7L['ZBduJ2Ij&kK(5ƒ7K5+ >U;Ue|֒ܧ.R,RPKkj+NF9C|k'zl::§C&
NoׯXujcPZε#L!	+o1|nҮuG&2th.[Fm7ǫZQQ*\RQЦ])vtfc[A9{މ/\PD+E`lŤ%|5Eғ.qqrQ:oey!C9RDsG5~>Go5ޕ#a׸G{q v$1K|:@ܫٰ/1<RqTpB9Tq#*1m"*Z04&U4}&T>bJE3fT.R<CrX
R,KKFQXc@,[B
m| >b5LN?"@77q]~;Z=@_y8` Cuy=}#0L:'-i4hlX
+RIru.	L`x%Dhjyltl3?rr;B);HK*r
=K;hClbaK꨿)ɾȱ /-)ຂ.0}
hCSB	G71[JR"sP"y2'D%Ue"bثT*Ԁ<Pm,ڟɁ6^`2`)R2m:sZEPKH    PK    A             <   org/bouncycastle/pqc/jcajce/provider/util/CipherSpiExt.classU]Sg~l!,D@0jV
4X(G -jݘlOwp!
3uFꍝf%S{<x`(R#yGS#kI:v|QcJn y>7pғ92s~S eZ+6HEn*n,6ߴ
fYty<Uz̳j
qufkaliVR
o4{*jwCE,QG
r؄K¥FQ6jU)!H)Y)XʺxZ.ۮ3]k|CydZv6oP8c,׷<KU+ۺe
nBE0bڱD#|зhjW/x$55Z{2meg> dN/s}VRo|gFy:ڳgDr\*Sf۪R
-[~f7TeC%bЋZ%[uKZ<}EjΉ}XtHBY	_J8'ἄRF$%J@W75rϙlٔT&ۜ}R|^ BpѥT
!Wb-̙vC^XXq?>h~2!!'!88$Ye)b܌,qICNna;q=&YRYLywY,Xdq߳xb
XbO,֜s,j+5QM`+R^R8LStBzd5d|%<!҇G"ZZ=<(?D~3'f^#qM|˫b:]4	l%t,JJHIK;NZ 53m
¬ٲD(zR7.S,fD=Xã7k\OsR|ĠH2:ʯO_:̃c@,q{N^.M:]ǳ7 栣.z\ARxQjtڍ9Fuݟ\1
Ĩg7~zc?Ğf87nC	J)"dZ^̺nxЌǌ[A,UʩD{fy4sKͬGY	0N_m|;K>-ӸEA?-z/\XgΗ\(C\!xsF25#O3=}lrר/xNHs(3!j{qчS)]ܙa_ӊPKY    PK    A             7   org/bouncycastle/pqc/jcajce/provider/util/KdfUtil.classV_.-,kU8`Hr*HeV/E,]y`qz_i3M&4ppGܦ֟JB-|wf|w̼u JDm%*9#Mp+9Ǖ&Dl^o[p	h<90<ԘRmuNwt1=JYhZNqgL[׬i<qA5MT.jVjђjqk0$j2-`GB7u[uEGНd²
gzT9`$#3ITWb<1ѝ3srtnɈOϩZ{FG&ӳK4DzZ9tOOg{O=lC.ڹz곺\_QT%	%L	5k't)ǰL{7-zv169k{ulLɸnF.VuiۺN&i96%-P&yS[Դ5m+voH6-ȼ^LFQF#Ӿ.Y-GK(r`RH[}s]%7/f/KmcAMNo#Usf(uJejMgwYL+ѓ:;SmЇN?v"?rffdєGn%B#8%S|#.P@yXؿ=3Sz71S<;e[]ʼc$P)M>n/?jcmh
q,2OIp>Q'UD"E8$ⰈNGDIQ]"ExHěEq\[D/b@Ġ!'D>G@CSw!w5mKfv$[2KDԴ6X{wg~>DOD7R笻L;o}[䲔INựo=&ys˞
|l)א{L*6efn0dc>`xa?CC3C=ȨA=x#C
DJ
51Paf6+c/2^9)nX2:Eyiwa^F=.x.3,*n0}UxdxSU8+OK%2=×"a|IBI82|UY|_p_>>,w32|^OJt|\!IHyKGPGóosn}5j#j4_`	
 &ZuT
TVdKvrTik#Z2]{m	KFlѺJ?6B'܋[qLU!x-Z
^OTVP[V8 A=/gyǨvukkPc
Y;
!fsBAO*٥"k_G\w
:Csk[c,~+!baTnz*a4V/d+w}{z؞޾bo.=`W[:\	Udo
X<L&WCAΩ~_~yv	VmJ7I+x }d
,x|
$8؋e8,~x#X.켅=	*/t*	+wvO+`[nչ4Z&˷wزZj
͇/I._vPKEOc"    PK    A             7   org/bouncycastle/pqc/jcajce/provider/util/KeyUtil.classU]S@=JJBJ)j@"Z
XuDBԔ4閱
b?q7
m 33ww9??~J R ԇG^[2,_._t]sm>-i4Z~4ʡ,nv&	$WGDFmM55+?4".&MifI3b5IդnAIvc&U5]EچkgeߌqrlZw7y ;,լh2&(\3ܧ3)	ZӺyF:e}g`,%EM/5n0[\=ם1M%\"UBPBv	:%tIH^4JE7G0Y9啺Q!>]/sOp{3Sc$ƦA9!v4,4;Γ+ߜXn#s۶~FBӚOeeo$tVNN4f52+Ű&ވ"c
ч	q[F?&p_FHD!_^1!t`< hN0MZղ/E9fO DhS
|ٯnB#u;|nEh=2Z|	;d	xU:rz8QAr|Clg5@=pxM|g4o"%<
LAt$.Q5U\E?7KE<ZQvtyGMP=,/-_>x>]%īF?FPK̎#    PK    A             :   org/bouncycastle/pqc/jcajce/provider/util/SpecUtil$1.classS]OA=S"/VݶʶQIQ/&&t\lw춑"GTn3gs_GcoF{?axn㦒&BFQP(tEue("-UK^'i=Wa{A+#z[y:IFCþکI3;|✓H}g[y-ϗt!SݐVmh,UhPNľQKQ85k
[^U*{o0.I[4g20n༁	)LbȗX;[>mbtlˉ/X@S%+JٽFx{gvo.v߰u3X0W-â\`"c!Fqseb&ҰM\s!d7ª~
È\cEH6#eWb.x5%)wR)p!\>Y5c_価nG&H;%ulI8qa!
弦z2; .Z#<ޠUpuYڟoPKΪ9  c  PK    A             8   org/bouncycastle/pqc/jcajce/provider/util/SpecUtil.classR]oA=S([J[ZTƥ71@lb|00Y,8;_}h4>wW,ҝ܏sf_ PDzĐ~̐ڟ*[ː!mw엤i
cyZ`:0,j~Vr"=>Ê+3T0dͮjzN2/su˰BJcˎ5_bx(cs'ԞF5΀eHW0/~g`@%

g{F-*=#%EJ<Ƽ+CŲ=7 ݰ(j*Jm}=le7yr8Gjd+Y$"m,2nXmEl3$A_ C"h@6;c_ˡ8y@;Q!(6if2X
YFϸї!)\@rڇO攘i@vi\-(aK9h.'!Q8Ao6	Tcy܍ˡ1PK    PK    A             8   org/bouncycastle/pqc/jcajce/provider/util/WrapUtil.classU[wF
Rs--D\ 
&	8!
E%d$9~oisN[i{:kَ똦T73;;~Їo%tHK)aH+a"]銼. IIHc:58a S!3<uצ89礤gih3L*uV
fev467Y9F0]LW@W9vXRsۑcpv.nln+Ց+In͉&%GtTmGj<B1s֜su #ڢ6M̸+E3	%屎3[,lc1C"XL/R	JjZL#KlQ#(QնbKi4K-NN^53	N^tg<CtTl^GY0+gXUsRU@tS[j\kVs8Pԩ>htkƱG4G˻*U1gLuLW'2u/k>^4Ԣg*ݦI>|׾Ӂ
Nh%2ɳk}.Ә0at^:XS5ؙNω8&""KDTDLDUq'DqJD~E</"iognibg̫(Z̾8=q<IP$9vO´Q׫ȍGfq+ݭ6Su-A@T5k5iU
P)㴰"ߦ*8YAm
BZ;O(؏
51g! &<
1ű<i=OU82^b^FOm	2\qb\Eyr\h\q 
Lc(pȸlRF0ig+kݞ4}aT+Lh&a9mB+u(и5ZC`;-:	A+d镞_q;XB͐d2>_ {|>[ŽڽL+	-"%B_$&I;뱵jds@s2>lU`:P&R ~+XJ4,rkHO2y_`5\.m>H]"
K0Q
oQ"2#j"ꂜ6R48up
	B,D+Nw֋pSq0Ymr$^X ^nX" 2"h<O-Fc~Zlyt
e|!jBԞD
PK$3
$  1  PK
      A             *   org/bouncycastle/pqc/jcajce/provider/xmss/PK    A             B   org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSMTPrivateKey.classWwU۴)-,J4
 ږ"!( tL&afRpߵZ*(xwf6-{wwLloP+QSR_SPk:.wdjwLBV#a%Hĭ8#<
uPV):OEmMPB>Ɛ;L%%̏>-	-/t[B7i"7Y!xrZ+mSmrifDv[<$zlPB
PhܙГA*N#~%Pt-[KuN[Lmrm0-w#g^xaS]FTXY
.:3M-ƇĠF'$M.o?mD4+Aqf$,׆{:udBܬ+`0J!r@,q'm,6:q-
t5ڟ$҉H`<.Z<dӡu\oq,IL`B(g@dpLK[	I3 Yv\4+>ڿ;YD$lԀn&W^kquyOCAl(LNҶ/g7s$6ϐ7\?ey,u"`$ԧb	[gL!#"L7go>5aM)fme0:K?BZYm'3pĶSTy%s1OOFf-2*c
2Q&e-ʸO[%t;8=$lblʘ}6_״~{L(RFk@2n?ݓxf-ѧy)hqAZgdQ盁O:1$WMQt]6Ltvi)fA	o*FBv;}/Ӻ%D0lJpISNMLyڬ czVtyIY.ݳEYo%;*vAu8bX2+0,GTXkPU*ᄊ6<dME#zU,b!"*nP}*V"bC#ЯU܊A^Td0,[n<AU))t4/1`?exNA^fxS Vpi!!3ddxU"0fx-GE~t$gOXW3}+Z0_I/>Fb;!ae)A;p䴔1jC*fi*F-WqGEԖP1rWFNZ]goY|t8OE%ϳjǗ8M:\Q,~:w5<Z_:,+a)Խ=o@uKwE5\C(F,zZj_i}InqiE)He-n4l`;7Htꨔ;T@:(
1|}9{mx'<ٷ5Dyh_wZHIG˾BYhh^y(Nogv	juw|^ßKQ|$rr_z3ɑV38#ݫn^qTZHҿCwcU8>+։=mx3]ekrŅɥ PK-*$  9  PK    A             A   org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSMTPublicKey.classVSU-	,]Kk_-iJv\
nķ~vF0X__8nB )*3{+3R3ZB1ohLV
h:sApOz"LLhJͪn՜]T]f%]>Y2͙*t1cОbj1\ajjy,aefmr9CIL;if;QLEAqʫt-,P<SmWK̢}+]>s*i1!EOg^<A8BF3# Lެ*&ǖ4Vptp2tTTfdѩs9H+#9ն'LJhlm@tY6ӊTRJxa#i94vrLQmWJNa:(KJ(*S):zn#qUsL;Xz*ۺ\۶p5ݩNcrO]嬦f5UM70J2<#[\8smORQs9dYjҐlJ*.9̅ک;#D"8.℈gD<+⤈DDtx^iqZ###gr8
L/:{dyu[͐}HPhzLYz^wEZ8(#
(Jk6UqEz%Rsuk1	fvW'.llUe.)yksow2<OtOegdzd%'h㤝h"'G$^$daBaLk2⊌C4؃2v]
Nސp*'i	$#<nIxoq0SnKFAnrQ89IdTdA«sbH<B>C5WTIGjaZ1'kрCvAWkKXգ2/ I֌Y_a	?R8rV8zOx xZ% zG+S>+Y{1J6aayäM?hD~=Db<AF(}kxy&?z:17nA/t;6Km'e[gnAc/|Z9>Ѱ׈ʳn6~<wVª	BBtO<A$}a/l˞;+it/at>og?eW|:M9}h%Hx
N?PKns4    PK    A             @   org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSPrivateKey.classWWWm`*"wC hIp$LԮZo.]]V_K	===of!9g}{+zB.DI!ux-<d1yNC"T;%`=tnF>nSl )k1T)&;z
]pOD|?Qb!)^ʜf' ؠ+I.|AEl"D(͔UHV#~F"ji2-z!սa?PlU
S	vNSu(oέ:3NJN)m]:cZ4AvI]G
ڝ_!:6&#D y,,Ux,jjhp4fLҝֳdX{L\n
pR-B"Փo(JgҦS-HgR(ҧŗ3L+0}"#zMPb!QFOm3?Zt5>g-{KunAj $ƦLUG͈'fj$9$
=
Z^jnErT-m{UWe-LEef#ҍgol+GI/KY:6燁rДLה1$eQN}qYtb)op(V\-u"\"jDEԊ
"6$bz[Dlm"!bg:ѫ}$نZf<AvoDu:!定s<WrzSn?n^fg:#23hreᓎ
0k+~&w+kkft:ө*MZ4)qߜ@!=.l2ێ<h!lqǌٴ7S!<s!ZO'qtMMU=f4}1	{)dޝDF^Q2<8)
y2rXaeH(C9e2H.<.g8j(2[FTLrXAdF1^"2-Bq9#9	%p^Ђ.sxZq%	mx[#L	q8irxMs%oK8%3},iXwbQ[Jj_,)E!%؍bKBrЈ<$Tȃd'*"ZUͥr{CQ\q׍'2"pb%9TJ6q?؜QzLk쭎[6GqOl_"\>:3Nz+En@=<Y;~sŵn]m7AaUW%i1ܼ~s\%zr͕CIb]̪Ï#{!trr&d&)zGrhܬl jU	Gݵ]CP{]|u$~[gib-'zy? mSJȻ-7J׸'|	[ß<F0|eBlb{9V$-wH<W1bɡ䔓x+}*H{MqtJ6c	N	WKv;PKsmf~    PK    A             ?   org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSPublicKey.classV[sVD$Rʥ-Ա]D
-PȽK1JzAOl[2K??оvJC:OKIN؄3sowr'g"܈ؔhu3igR_;Sd}m2f	JZUӥE3"i.X%e=`màd;Z嘑;ci9nVg(ZLXvAsynds4oyt\Թ@hV vZzsr;X_9PƴE)sD a碶&Ǘu^t
dSJŒv*wn(xʼffѼ8SV235&Uz-%"QOl\/8fYu9nc驁 7]c6xAm|u[k%ȯ5eSzg(֚{}5QyTպi躨k:W
4 r(֒tdtCX
Ű#qض2 5ᶡg8+ޥrklQ==oJP$p@A	KxAKxIBTB%2$RA<$rM=

j/g+ڟ|;Z+_C%ht6fl`?K(AFb;|{D^C[Qw
6HeVoưؠ;oo-)c0蜞*xo(8
zV-(Sn4	EvH
⢂cH)Ô.L+؇`/
vᲂgqEPgpcxK2N]!txGx[gqC2Ρ cyØ1"#Bd»!DV8!eL@b^[}'Y-_b_iWoNj| 
"3E*@+/}Lvҵ/iG6awÌ%'g@1D>DiY{cUb0c`Uܡ0;SAR;hd4BD<Qt[
nK{84` (;eFdSCwhTb.bl<=+X>/B|H2+̪vIƆ7Ebh&jB:ŪПnTRv˾ʭ`֧g
'xTZxU|":/s!^%V7w!ptG;
>Y!PK}v4  V  PK    A             G   org/bouncycastle/pqc/jcajce/provider/xmss/DigestUtil$DoubleDigest.classmoPa8a0u*is	E_MJ{%Ŷ,hhCϥEd/&Iw? jK!% Zc}- 4xQ6Z*tF]6=J%eO<5m2nu{ڀ	RstkjivW}3/)}״i]lH<b
}GmF֕7Om??2kSuS:&MUΨcuep4|&₈"D\P=8ǾvdCr^iMף-\6$Ti-db]<b2҈qYBB2pY"	\Q5	˸.a%
[\PrM.
DktG[}K<aeX+;HWWC"c	r6o:b(}ʛl?c3 weR wrFLC\J3kFp,G*BHF2V	SrGOrp.K
{ڞ1by"PK(;  Y  PK    A             :   org/bouncycastle/pqc/jcajce/provider/xmss/DigestUtil.classTm[G=c 	4ZII)XKx`
/"vٌqpٍ
S3cS&%I	g=sf3?pBigTUSW_2R邏+}|SɆo
[xHntfs4HOgT
粹 l
+4aş5eT7+x0pf?݆E},~1/-dlG/܎ZSwKƶ[]ūW[枛	f8{ Zw*{uaWwR
aUx!ԫӰz
r)z_Bc!zmzzP^AN^b_<G/pvDNc.u황oƦIa|u/{M]
:
U	6Bîsөt*VI:{Is=&
K
>W0ಂ+
PRVQ0LדT*U<[Ty:mV~eŖ6<CzLקzcBz6;km]Gҩw~DNʷ8c|"ᢄO%|AD%h8M*-~!i	3oKN	(t܍ȢENF9,J'W!19pC8~q*tIj?	`ۼ>c&,{t-$B_SMO0pbdbw_<ÿ?ģ.~!f9`ncHfgNa|-_w!܃Z+M<4S?k*0x,v>ljL5%jk'?$˔
% Y=TTm}أFL&)z&2`23áW:;Gw8
|
	oQ)8A{PK|Q  '  PK    A             A   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSKeyFactorySpi.classV[W#E:@:; .&P`	"W
d6C3ٙI ^!
|IV9˫?:7B8`r/U_UU=o y0C~:9C?fhŔ
3<cp	[I$4cC3b-if)i)+ݸ2Ί$4-K18AIдoGᴣ,Kkc=1͙+ pP=6dٰPɬECe7-"mJJuS^X8Q#&]Hp҈cF,{Зؚt'-/)%Qxe֭1{dKg)eEJw rse>2YH]	p{|dдb4ԴN\CQ*ۑ)@6*qrq7Z\$w4ɗd1Weq*&',3S]䤣吝>:Ҩ^EyHi#6]"Rrsrdrx~{-`0uk"
ˊq4
=ҽ\*bKL2<Hv20)ڽڈJNPOr4qtspq>q1[~  G^&`
U!.$tZ*8Voǰ
`s>v2g6Tu#pvT]FaZ~,T\Ln<=b>rw5s(njZ%~˛^x1cދA'd^aQDX^c͋lxхM|(|"¶qDD}&%L *aR(ȍ-|,w+a;͗x-<o4<*t1{")-qo'e85_ӬzF}@?C.*\9?S;+$^eɳsLE2w1>x4WW_@'u1Y[=(o}\Ҵ#11
17ZZDh-+՜\S-:DIVGDg>`)R8:#v5Y63wRP+CA!ݿ+#E}< q/J~&m_Qs`YnoCG5xNJ0PK<  m  PK    A             G   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSKeyPairGeneratorSpi.classV[wUL:LV@@Qm鍖b(-
mJ%U	^p:9L$tfR)*~+<⫺h2k	\.\RÃY+g̟;EyՋm^y1(/ćæe#$D&ݽ}9[ɱ(=Ñi20-ƅŴw$l5lelyF3m	Ms'i̻glss3鹸azf4+LHhYS6μ&""-92agHEL-n:,F1fW)ڒkAH']Y5mkJ6-CMw9`,74Oh`.KXO)槭\p$idҗuq,9VW270̞[`Q%t

n/d ,'(0G<Qd!%Sg9f[[#Z81'NGYXA{B;Ww6V:Qz륗LeҪJ=
ȕp+*z*uAtcvԊy#r!	RI7ᤘ>ZИs	Ta=)JZ{f;zI;9E>e<!「'e<%i>22:eqHaGdt#㨄S
QLU/`dI}RJm`	sojABꠗv_Ty,Wϯzy+$N[^Y}m õX+"ԪrN &qqJk"=q7,)'~MUduʃoB~tT?U`qǴ=8Q{9<aC/fTY;UM㜊݈鬊] {qO*pAN[W8\jN@8\j4sLǐT0a.ǒ.=CZA)'qY(S+k
ta+8+
& =ML)~"{9j尖(m&64$Fʧ)4z ~G3?Hb<g+x+>\u
kQXUֽt]Cku4g1mݜ;:#<}h߶Jx6:
nhM')2`Ap69WrFq)9L7*9-'~A]Y&av7Wߓϛۄ*[ƀpO_ϟ0|No+ekw]tMY{.ڻ^U|p0tdoP_gqFȇ2*w*H7PKj=CD0  !
  PK    A             C   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTKeyFactorySpi.classVVG-@- C !Ǝ6 fARD&01#όrr!_A^OCj- $KgzU}{{=`كa5sZ`;P)bp<cp	[I&5#Цq5CG۰4ueNBWbgYD|yQR;APR04ZA(hARhF|xkO\s	Ŷ$ӈa=MQ̚t;hzPv-вY7#UK:iЊ9iB1rk˅~!8nC)=,Ԕ;yH+	=FX7_b敖-(cZ/֦)-qY|UD!uGUcÓ帇w̔fTvƈPtGOSQ}Ֆ%KƮ Wr$Ns{jr2:EN9zBڙUFZQ
ɗjۖCHd5za5̋10<u޶l{x3
i}<4L(SRJ&M9VZp2IjnN.8qxA9q<xWX){Ϧia0BK(	比C+ lI1XeW朏^ep̙
r]ρ+* ebl|Q4$c(6) [e:OOnGO\y\njan%-<\͑!Tuy#FwMB6EhQ4xш%|E+VhúGç}4lJCD4B8$LŤ'q1	3P$<ŎYlKgR4_	y^)O0-tft7DE_UQq{'h85ЬzF}])~эrPK`/'Y$V^!
/Hark0)3mBdu:,]-щ.JwhZx~KZBMӄyŏCxFEjN.v"qNtqO$G3{N{ 3(88!v\kg"sBu_|NgHybua|W{
Q-\8=~
~avInCG%xNr0PKW
  s  PK    A             I   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTKeyPairGeneratorSpi.classVwU-mtJFMS0
J(mhjSKm	HU@|ߠ~G=s7y<<n>ss;	`? .lvӅ!hm<+aM׬"\$L*sSԬ <MtƅK%a
g:3Mܴ̚`Z|*!%ҔH6,73s	MMXf6TR@fs^)vě"lV|MIh&QaׂU|	E+Q#I2tJ}#֬/g`l4O|>9JY̨u-ŔHa_ʈR]ͩi%O1~/̞[`QEγ򍚹$fhj@K3ECF"j*3gX
14b3}U>f@}MOGjӗ2r4}L[J,I(aCpNjof9R4˶kAK^PD#b(Z9pF(0gOw$	\ϊf3ZЖstyݝ+ǭ,KhڑdUkSD'E񔈧ExDG^ψ'_Ā"E3TD?P~+]ԏתWYabIw'8{
9;SVI=Gܞz
~q
i{b[4juN;NP5b.q
ȕ
;7*m;=$T;Mդu΃߫3ht uڬnqWۗɛ78320xVFfdlK6A "2v`OFOx/x/x&W8(8"x;0A0A KpK#,F0$pt	0Χ09d$L0+BxMBHSM|Kk#b)┒USH3
xHd8{#V<shEI@-G|o{G˸mYү?+F KƝt$A[(hkc黋px
nv	+x&|2S&-+ @|W{l6oCF}I}Rڼ7@7Ƣ[ǧTMm|!U66Kok)~ Ѷs9Jn-i2tRg|_V]!;(_H)`ҖuR!?PKyG6@  j
  PK    A             J   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$generic.classP=O0<ӏ4!|^bi%8V($N+*QBв@aOwNN2T:)C}S]\䆡gT.E4x#e˯gI2?2<=XױRe[$jn̨ "E3hq`;XOD0:߾`w>*)aσ}^	8`P1W)IVYg3+IWFE)tkFhln<jGK47BzтPK    PK    A             M   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withSha256.classPJ1؟m֟j<"HZ/Ǹ)>Vz1&df>v
dA##iW}-vvwpHЌU@oqM=M(/0<y4<jMLPG*H_FnJDǾ{/͐
m  qP p((ohƠVR((bͅ*	J!Zh빨d"v [TC2ڬ93lڱ9Cðmѵ3PK%    PK    A             W   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withSha256andPrehash.classPMK1}ۮz.xh"H=(=ݰR5IY
(1Ex3y1׷ * K7l{g'GD=]5X6K3mj:21
Dȵ4%~Tѽ%yӚ%WMU<W߅̌F?^LGLGr	C&C%dt藐R+.Xu&5l'8A\Zjgȴ暠hpP{M[ՐP-973ڰ1CSPژXTQ|PKMW\1  .  PK    A             M   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withSha512.classPJ1؟m֟j<=RAK1mʺ&i`ĬU^L`	2yy}zpzc@H#Ue4cЛxySk
ibb@h8O9A8>
ZE:A$Ag~g'껑,K3dCn[:9;pzo'<
(3JFA/,/x1(!.Xsᦰul7A<nȵz.j(Yi6=Ր6+dsvlPy0l[tL#(PK]L%    PK    A             W   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withSha512andPrehash.classPMK1}ۮz.xh=R
-(+Eq7lMj?J̺zd{L!
d>A-00uzW`/V!ҟL!LLrm4MA}tIﴦ'BA{!ುoSODw!3cŽ |'1;>ӑA wlɐzF	m$_+h5%d"V]	,c ۉNP:2&,5(9^kiqV5lTwds6lP~T,6&UPKX^,1  .  PK    A             O   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake128.classPJA=fY= CCaA2!8ضk3g$$}T4QK3p9{>H*rSF.u/dw^ǣțx\PPOM&6wާVk:d	E\x|YnfJ;YAAt|iȣ2d4:<7<RXJ`Ek.VP Hb_ۑBж0[qrvMە(Պd3lLQ|0lYtmMF{PKy)    PK    A             ]   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake128_512andPrehash.classRJ@=k1Z"o}5Yҭ1ٴ7ɧ?7E^v3>=?<a&v>Bwc{<\'1w63}9a4[i?pYUeTKoa"F#t,~.][-F3O-Z
Y$6S%mn/_U5ja9`f>,K&{|.{O=0`*

:(

:
_La5i.9_>7<FCm"HEЯBànHbHE/mFIM
],R2	饡H^H::|ja|
5߿R$$9L"FPK1VX  -  PK    A             Y   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake128andPrehash.classQ]KA=}heBOZR(AXLH>Nj_IHY͗^s9{?^ B V*	Fd5`^^?лiQں̏ZG6Sa[rU)lT~\t5{
璠ߵY֮򻐅i_ȋQcw\|Jr)@Ҁa e M]6dVEC)|%.,	r;8"Ejĺe 'VNi_1"/?ve"ztTDB{@a/G&0;Y<`3/_FS(6ҟPKd.D  D  PK    A             O   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake256.classPJA=fY= Q(AXLH=N:hY=		}@fA{.syy}z,JGܔ4.c݋:;=:;? *(&&S/0<~ix՚3DB4xx,})ν4}7tqq%+s((o0Ͼj/XuÚ7ҭvdk-m.2Vbeqved,J"!w5-S?[][% PKa)    PK    A             ^   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake256_1024andPrehash.classRJ@=k-"

BT쓬ɒlIͦ^>˧?7E^v30O JI Ϟӹ}͝}qa4{#4[b:yP;cUD$FV!]ZK!f;>	JW,Zfa,qq`/VP;XյkLZ*'8t3>KO}0d.N.n}kXMlzM
aF!/E^ymOЎR	dPaHEUd0#m6#@ЦG``⛱ ~)"+qRzE(rsYRG\V'1criYIΠSH7DszPK  0  PK    A             Y   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake256andPrehash.classQ]KA=}YS&ՋI
;ٮͬ?'!Џf5_ziνw;s}x}pB
	X!Iօ/S=zyvuqx|$BMi8"ҵom>l9PY3, `A)k %A})g]w!Ӂ z.εS@@)zlĬ>]Rn[K]XrWjNqD`̈́
bSO8 5gJqE_cUˢE֙5計ALavu	rSdlMk4"	PKݔB  D  PK    A             B   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi.classWwVX$8JC,@C[fweg}AӇ~mIVI=9mgvzX>g޹̝;w} niS-nH1v9H!fC,9?f,4H$xGН'ќѳvK#t4Kl	RHYCA[YpZZRI1U]+`yˑ!ZUɄYn=+
i
5`d[V:#秤]ȑ*I%w;4)m[&㖔D~1K_ Nt}Jk(#K們fH4TxN3g.y:ei"Y-rh
2b& ]-Kw	cASp
HƧ#l''iktaݜV(ݍ#~=`/;;34#WpF|!yq޶gTr|ONCm>;guim6-AF
.jVeYOٴzFZޮCkntS9=jܹw!+ˑrϛ2u#E}iG?EJԌ1o%ʾ1Khyw#K%6\
ua
1͜fB߁kҲM%={Up~jVwº¶W¶fZ|ʱ:rJ5P1g=P965ۖ{^*xs_-Et:mxH`Dzb	<*0 pP1O
<.pH	Gtk<^=9 6ZsmS'NaKdӺW5k!U􌖋w$'R+k^:SnHUO}jp]My̗iľB0VOA#qퟻs8;'rKrC <v!w5"[Xc#g"7.:w^nqxjy;[:_~7wLk9SHBFE1lR$U<Va3Tb.dU2يU*vPF^0Ut8L,||1u&!opq&LNcn%&_a5&2vx+L^aGfėe8G94"MK5WYM?4BMoz.QjBXG&*TuoenF=Z]w[;W<HUnठS҆VPO4k'yxs
zuwV;0GFC1{
~*F޼\å
~q[nd{bk
Z;R(aa'qa3zwܨ~_S
~z_ynnbl2"~r5XjS*>R?vy'Z+\.]7 ]NpՇG3v?(tW8
w4gd}$tI:bE?y[dⵃ>dD"?"܇ ZwWα~/:IccJ?'Slroy->r;
d=kROCp} o|
~2D2MWJW	O+4kl}
$={|Q7{L6ANÿ6,}4$~9o?O?M?CN#^$h?PK3Q  m  PK    A             H   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$generic.classP=O0<ӏ4!|^-&(RaT:V($N**QB@-;w-jyS]\2oaO2s)l(.</2H2I8q$ϏiTXX5L4*5'Z:h8h:pq,f'"xPF߁o;O|԰U
G=Bߤ$%ZeKхOj1ԅN]4A->,G`pDQZt~PK#h    PK    A             K   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withSha256.classOKK1ǶU"QVB(zLw6eݭIڟ`>|23|`[%	rfx,ciN*7WӽCVBO؟\HP_MF&6^Qt	vGNke3BU}>-UXBq*Film?EA1Cʌq.yfCK,(cŅAN2NĵYuxVb
a_u,j*|;ST];PK"    PK    A             U   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withSha256andPrehash.classPJ1=iQVB2	3)5SrUQbBl7&p=yx}pzC?J3*<?8:~6fl6%:dq&40k"C<?chd&8V'#
[P67o1Y\Zr<n#N\EY-Ul/Y972XJaG>Fm% (])Gm1T歍JN⮳tr;e2E~)|W6&(|*}WS*PKDV7-  $  PK    A             K   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withSha512.classOKK1ǶU"AыAPݰMYwkgy*XĬDl/&0߄߼= 8V	y\#(Xcpo4'>&WIh Ci}p?ѽmxӚfLPGsC}KU2PmܤJ$8yApAAсDot|i2dvrR.XqfP*Aq&pEfk,nWˀZJf(N6kէ/æE,;PK+"    PK    A             U   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withSha512andPrehash.classPJ1=iAэAB(LgLJ$\,~ۍ	{/9pO?^ a,AO.Ϗ۟{h7`pcz<	
e$5tFv3)	N{HBq;Ԃ
$iLs8W17C[o>WeVK5ۋb~FRXQĪ?ed[I(JWQ[}n0yk,nNLQ`}
ߕ	/߂CԢ'PK6%-  $  PK    A             M   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake128.classPJ1=錭j\	"H@e:
ӴLMj?UGnLs9{`9	Rj {(#i
7Wmӝ}Zڎ?6LL;2hz=ÓNG<
wZd:A$Lu=RdG6nJ$8yA.	dd8rJG<
(3JFA9>Sx^mB.<x	,b ݈; Yi#Zm۟뢌'kGY\]ˀRHpo'X³euӗaݢgk2PKn9(  
  PK    A             [   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake128_512andPrehash.classR]K0=iZ1Cc	
B'ɺev67O N nK&I?^ d~EOe<8$X6OΎ3vf=6J^ݵo(s@|{-vouOwBmٮUV-/3UpZޫitiPYkf2KU(V(*)Pl?|ڒ~^pkfs)}d
0B"IUbJE3*1+[+3ک+r	doO	",+qQPd6x8&H0ZlboĄ$1%Dۢ)>PK-  #  PK    A             W   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake128andPrehash.classQ]KA=}heE,EIł;ٮ͌o~@?*|֗f{s3RjM6>Wg3WmBYp8cJg#Z.TҚQ/fE{/RZx{'C{NE8.eT
Ji
SH0dd	VէgJ=ƏbZ;$"HDbĚVMQ]FoS)$(;Xֲhd 3[$S^'(NL>ۯ17PK&;n?  :  PK    A             M   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake256.classPJ1=錭j\	"H@e:
ӴLMj?UGnLs9{`9	Rj {(#i
7Wmӝ}Zڎ?6LL;2hz=ÓNG<
wZd:A$Lu=RdG6nJ$8yA.	dd8rJG<
(3JFA9>Sx^mB.<x	,b ݈; Yi#Zm۟뢌'kGY\]ˀRHpo'X³euӗaݢgk2PK$z(  
  PK    A             \   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake256_1024andPrehash.classR]K0=c:N"U>PI6tMiD'Nn{
@ItX-x kolk{/l{uLFU
kPrjZ.L=hn~ʮ:-Í cvšGQx]}>
\'넖;k%w֋i\]9e]L{L{2e
	
>
~U
V-zG-e"&Ani#:uaB~eW@
T&2K)5[&# &

a:&n`XTOĴ$0Y$YPK}Q8  &  PK    A             W   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake256andPrehash.classQJ1؟mjGVQV
Jcvݚl},O>%f=ۋ	%2#TrjA֊KL":'ء7W'/"n)=oҵz06SQ[rUrHbI)+
$8Md6mp$.X48'#YI10	zFh$E6ڋ'z4bHŰbĚVM:
4gJqEPN=ve zjg[zUEFw@eD0xljM]cmPKHjqq=  :  PK    A             @   org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi.classWwVX$8JJ,HCH؆dҵtזWݕJ6	MMiKZC9$Oi;sw-Kd}̽s;wѿ 8-϶`54zN):y
XυAf,0f,4HxGӦezh19gihV޴I1'=hS1󖆶5tKeLbw0ZܒmO4Dq;gx<]`g^Zҡ^!Ȏ+JT uj;4-]&cHBA"ܨc'e:Y=+
rȊ$2lc@wF`XYi{fК4U(ȼQxAbb|-*#6 ȇҕْczɔ5oZ]SJrSŒ]Wɬh{iOK|}FA=`[I;gzg
+WpF~)yyu/3[ttܜOEdLddT5`8)͜t==ntƍKS3t߽Y'WcNM
>Y
'އJ̴	
#bmԑӆ;)Ng'߿YMtq/lM?ʕMtPM?4lv'p#]I~wU-ZY/jiE뗞oZWxS\4<Rfg(:+2QKRPw̫\>G> OQz	8,pD	
<)pT)cOk^Wx ZqLCbKd􍨐rKtW,4!o?$/V+ƫk^>Z] ƫ _vmMEMϕKeāBϽE0QOAp퟿{8;/v+R
wq;*:]ȧ]M?5ȱi-7vM5OM8dkWwELm6U/Bw{{&t|Yh.x[t<f'Ъl呮ئyLcZG;ftŜ=tDQ lx!y&8E&`I&y|#HKbr04(Y|g|ט|#1|W|;qM2gsKd8r\ڎ/r3O(6C~i:lڰ+ܛE*]R߯Mǃuʿ^]lX;WS<Lq>/)SNBf$ooxrEamj=n*rf	ShƗh_Ưq^_k7[z<JSb?mpz=fk,zZG5(a)a7qa+Jwݨ~[³2~n.nat20]jզjWu4̿QnVR.=7q5j
hޮ7pN
GX-z8N.=INbKjBZ(`#t?BiHIhϿUߏH}wp+	'o8AT'pP"pj][n7X^C	YϚ>"L^.vQK7Q-~NI7@{H}[A'Dj=RL&YxaVy{l	N/'gʓI!~5I#JFcįH_&n_!>E-PKW
  ?  PK
      A             !   org/bouncycastle/pqc/jcajce/spec/PK    A             8   org/bouncycastle/pqc/jcajce/spec/BIKEParameterSpec.classSmo`=PuS'0L`%YYR+ֶhWTKQ(nk¹ϹK?|= A!J? Ԗѝ2WZ6WuZ
OxiGJ[u͡'En)T*ݔ]Kwzmj֪'E:G(!v%o*vbrr.uܛdê5Q{b;-M6_jLǐUym9_ESUڧ%\'[w44lqCǨo5(c<&xL8cC:QE}R&[=⒤k&ɦRi?Oԑ-gj!U= ӇSmU>ɮJ8sxIx3:(8B$g"($DJD.3""4dF6Y	,Epy**
sTяЫ>QtcgKP!̑/p+	kñEm1űs"M4,'h+OQ|Few)а{v7XA#zd%=np{E(b#gX`eyPK8vW    PK    A             8   org/bouncycastle/pqc/jcajce/spec/CMCEParameterSpec.classwdƟd]M7lj&
:
f!ZڦKSpOaN?Gy}ҔО}{7o (྆NiHi0aFì9
$ҙ
UQk
?mm^%U_JznݵժM38v׫{FƹF%ӼbyT;
&Dnׯ55nEǚӨ9T0bAMmoV:T(.bO'iv
X'uXX,f.o$췸rόw+sRo7ĺV4c\)_[vߊuM[9W5n޳pm^w
z(VšU0\8WkUisDKmw+=+[GńIo8"⌊iJtJeڦJ윑TS\1D:3hM+/مt5\<o%w59`q/\|#:DI[0ex#8OubSic1ǘg,00c+kUq|Y-3d\`|-"2ecg3.1.30c|`\e\c\Ob73
$o3"~n1~vheJ-b*SaLg80.佧80xkn!ctgBOT 0mBH!ԃ/{bYfj4ըTSOGMKwE[B4hIq[W
[BJ=A~ >vhՓJ#%pPzDj8@#RG4#u4@+Rj 7RZvFF*J=PK>+x[    PK    A             =   org/bouncycastle/pqc/jcajce/spec/DilithiumParameterSpec.classTmOP~6hWl_&o"P/CA3Ԅ!K)uҭ4W:T@gvdK4j?<}=瞴 x$B!2SbV3ͅkW2jV1*fcUzuA tQS';e]ʹru^]qm]SV̢ETy:T~n3LeCuK{uꟴj9EeǪU+kMќY\O5]ضsu|0۱IYS˚8m/U<Ǩdk4*Xou'v
8#O@L@BY4}_A¿wnaPm*zXoxpZHN%6t1G0ye0*C"(c\qIЍWꚌ˸2.r8tC&[Q#a6;0aSŦ%.b}lykW(%$p	])Inq_8IUI
2XL|B >"aV81#|@橖F|;b W"43KGn`~k{/#lcu:b#\X:QPKتDj  g  PK    A             :   org/bouncycastle/pqc/jcajce/spec/FalconParameterSpec.classTmo`=@`0)1LM5tc
Jg>-#>羞<??~`]ĸOeZڬk!5ZLg>˦ǡ3m'$ZFЩuEBkGU͊jkL8QZ)z xZTg&BNnۮ֕jkoC5&N|5IKUQvvShjˮAS4cچUs<ŐZUԚj\]seM۪6+V2OmZ;`enԖ72.pQC|yɓ-8-T8OS$Ĺxy]Cż8¹!KnȸY"nsq!6?ݑ++*H=~Đ0>EB9Dȗp fa>^,%Dp
>
.U
sd}pQ1`xt'߰a|~f,#;NOp(y17S~S<Bl\Qp0>V[EOx"2W#PK53R    PK    A             9   org/bouncycastle/pqc/jcajce/spec/FrodoParameterSpec.classTiSP=`%QY׶ J\qȎKMMJˌg/%qvw={_ 
&C!a?]=BČ6asQ	mXkfi(iYۮTW5sk,)	EHSCcQ(ZjpGEԌ6(njtøT23	2GGk]-``<R4V+^),VKusL{w[zu^k7ICSaUhWjRE
	|T=C/Xp]D3S/xpe:ͱӞԫ28.ㄌS2N8##[*8)a|H]'Ggw!F܆nhi3
~ĐVEJA 
e5j(a/"
`Vi1 8ηb .\"Lpj+TLL\#Np&0F? v7Ak9d	'jZ1q璐v[:Ǐ~1&bD#j+Ŀ@$ɾx@m1%[1V[qc~A騋'蟱܄P='C;"S $jK_λxcA<2%ȢGz s_?gt\,fubX3l1sulT5@ͦZMPK=t    PK    A             7   org/bouncycastle/pqc/jcajce/spec/HQCParameterSpec.classSoP=-8uS'0gmcNt#@R4WTKDg}wn%lDETXԚv.1Å2ZOԖNn3.l.?\EnCUڮ*OwFui'ѵU{J5eY5ZTZںMivjU!29<vL,VU5m+枦hVϴ
([˿w645u<QضzJ=%~KӆmbӭD0. * .଀	xeVcRFjBXیT5J{ʥNy>R@!}2uL8<Ʀ{x'2b,Ȑ0##A aYN	*_]!⺌qpBI9d8p-aY	I[p	a\e㵎ڛ!/{Oq;N(q|9z|t e1X#V;!1NPIW)PYɽ:DrG%yd!CLpojg}ЏX1%PKL'V    PK    A             9   org/bouncycastle/pqc/jcajce/spec/KyberParameterSpec.classTOP=cEd>pjoe(H&D
	)A֮ҡ2~v8(|||t77 I#!* H eX)zs:3ͅƵOI		}-t+yV4h3[UӨEVPMP~4:rm+Z^-tG@Wyxeѱ	rדԌH6˛Fn2:$\piͫ[vb
Y5Tí;-9mm9kUxۙӏwJN#:5z{ի&gg"d.gEq^@Lkz?^"uƵNMSvpnpB;~f'[Ǆ綵Vx3m_}+
1gtcXA(Nq
$$\DJ%TaqcLAC7-*20Tڤ8MUF=wyⵛW%cq`6iJ#6@,@5Ń<g	,USKUڑ|;#GbR{X #+%2j*ޫ7G;X'Yd8Y<.w@G
,c-ȶ|PK>~  K  PK    A             @   org/bouncycastle/pqc/jcajce/spec/LMSHSSKeyGenParameterSpec.classR]OA=S
P@>n!!B,d
	i:YLwGB&?
$*$3w̹'ޙ_?N <=QkQh^<oI~JF;T^GɎ"/;Ld%>kؚ8Ɏ#o	ÄJ3Oarv
<#i޶H.Ef󣢞	H`mCPJfptC1>tUޥ-6l;#-LX(X(
:n+ɜ$
V;vwK(!_r%f&0P$`^ *n}#콗-MXfn<>#O2Xx3?1WC<:|3)5^Y3YD[V(8߰t7PK*0    PK    A             :   org/bouncycastle/pqc/jcajce/spec/LMSHSSParameterSpec.classQMK@}ۯ$j*x^A!vĆ4VR<g8ؓta̼7~ .CQ2ҧ[?C>H'JQX^HH*^dJr*+
ubB]VV$EAf~K|ygqRv73e,e0P50`Xap\_4C]o輾&6*`6jXkb&LlfCzFBeB!chr9ShPG
a+>ayBA>gv}3=I;% PK-    PK    A             =   org/bouncycastle/pqc/jcajce/spec/LMSKeyGenParameterSpec.class{Eǿ2mSKS mJ
Mˡ( R,u]ҔnH6@o/[a8*[ѿy,l>O?f'ϩ :7|0B6C;Cr+V1\pC'Cn`a
Zu710p>l;n8cNN04T65o+i'wofǻ=}ᴞSkf¶5d\,dz:mڢLخQ+㤶X@t5{V,[bO.QKMe&tkM&K~aݤck!zGLC:GZn&i'֐МɚF.tGٴiDX	GV^akhܤݨg:uOb͵VjB!+m+ZXGp2\aT171E,7u̢,HechXnъ^vq
}U\RSSEz{Ybc:ySYV'oYܓKّVG9T:ZQ백n$N6F
=Zf4ǈѴDEF4{O'ŌʌC1I"R9}'ISZ2T݄wk_O|çW]=_1|~iu
e Dh	`i \@ ;Sx#SC[|?ɜ9}SsYM[VvVSټC|+.}CoDrKCjeVKWěMS^͔Zh`-
(ZR5π vbOQd$!IXl	7666n!l&	݄-V­>m;W`AWbo	#?%7ŸA܅aQc	OTS	%<GxpEK	^%FxM[CC	0ޯA`"GH]5TsďѺ^W7vWOL,Ih؍*̥"_	svG"Cu#xAy"R\#c1r"KП&(6Fc8w8|5Fgո
⺟L$~!,p8FS~&p?9-
G08rB0\i{ %(\;-q9?+T5ǷRp|'U-R9K8q|)t
p|-q9ƤT8NJ5T!R]8*cR5pХHuǧRLyTჅPK	  *  PK    A             7   org/bouncycastle/pqc/jcajce/spec/LMSParameterSpec.classJ@ƿmlcc䭉B)RvĄV[)X>%Nкo'2hMPf0]*}	iܼ;NKJ1L<5rX
&p#	'L:$3T0D2_gQ:h8#SH'~//ԹuߙQQQ&(V)s/cyǤ娿dsehY]:6McD,0˰v%q'D
d6@G@-#;2lSܧ=d}:F"oTg3Q.oh*}PKC    PK    A             8   org/bouncycastle/pqc/jcajce/spec/MayoParameterSpec.classTkSP=ä!HӢƖ(Z3:|rBi*!-*"3QIj:̜gg7 i< IH%t	9TN͵͵VjS`^VyU/Qt-ouWV4h1jQNCUMC/-Ruݦ>Ǵ7(-ϭ;k+zU@w;pYoXIS>OLB׉fym˪WלUa7q)ְ~_Q4azuxG5N7PӦr:]Hc5SD^}""ΊqN@4׾GoY=C7AdCROs_Ǥ5SZ=&e6~<u?lu(8	`aa*TΩ#Vpq
1`FH2Ġ1dfpaFܑ102fe\ƽ.\CIa\)5fw.<3Gy@lݪ @wb2e}q8r
#/6}1R"ann &!EO<tŒ']G`lsOv@D&V&*r[zʛ PK+~  [  PK    A             >   org/bouncycastle/pqc/jcajce/spec/NTRULPRimeParameterSpec.classiSPߴ@6MbZP Je!N4G9AEd?$cd=99i~Dt
-G@/ dRR8d4Ynq^TߪrI`qtnCV5y7s,dnNn*%vV9>*Γ"ˬfr49~R)a&}HM%}HOIFjj*r&ka2dJ.g6[i!ݰEMw'nP<pu2<:\=`N4bN7՚Σm<y\Vڔy2ʿOg_bnV%59/OOKp6~u.kaOن1{AjZDaQIEMCKDQE%Je/BDV	=x$c$$$$S! H$$3$$0na$C3|-<"yˋ+-c,MvG:vlg{=lctF`mBFbtZxX8K`c9	p|=(nc%'	bnn<A?Elclaͅgd]xK\Xt`Յ'(;VXѠKd#SuZl|l~PKmy    PK    A             8   org/bouncycastle/pqc/jcajce/spec/NTRUParameterSpec.classTiSP=imJQPiQӖB 1X)MMR~3TDf?Me8b3s;.۴?~~ ma]"b)\i-SAxe{yeOcA3tyGIyeRwJʜ1G25f}٬j<S.(˳4c:ؚU,sT957U*QۭD:;8-g2=!OR'BHɦDG0L39M3	u 赊*UkUV)W7L`rH5(JIOe3Krf]b'nWkl!Ko5cV15<xqG¹7ᖚdɝ%Srҍs:&KHF=@尔;MKg[620F6hщ"`XDDtD	zz	+W"D^E)."-wB E0J&# 
 A!L#$
*1H0 q3!\CG:1ʂ9\>jQlĳqlvll|4hy|3>a^X'jB6wDH=y;Ft!ɹC.y%9d%|C`ul,aˏ-b>:k3:kRg6] PKq    PK    A             :   org/bouncycastle/pqc/jcajce/spec/PicnicParameterSpec.classyS@hD"g[MOwMHSco?㾻S3:3ϛge7N7

z*إOn
*R0`DB"%A0j%.y߭\5*k*YQxGxfhQ-iSsedY>T̺oKZͳLSr-T
˟a:yo=Q[bx1URKڜ[KQKM<۬ڦ6˟5jiMKlmUFLmkX#)V;
3:;N\ݏ%ؘ_٘ol,46V61٩n}nF͒If[dl]Fa'8H`Cs8ܜ6XfMpw;{hUcr\jڸkڰmUUWC%"v	Aa0BHCNY:eu)SVNYѮ:Ud1"I1q	I)i$,<B	K˄"
*a0MFN!H!)%ǭ̶aIŞUc`?nzGu0CQj:=Qj_T:kΌ.:@V[Bw/О[F=D#ѫ:YX][>DDiv/xقD]tJm6exGc.U!WeQ.y.{\l!<T#.!s\<!7]ƳX`W	&[-b1T?65D%D9DQM	&L~PKwe?    PK    A             9   org/bouncycastle/pqc/jcajce/spec/SABERParameterSpec.classRPW^R)rhĶQ@4\m&PZۦA>Vex9qFҙogvާiK'V%'Bs'%4Nx79Ǫ*F?7:K
P.Eh
+Af:7^Z(eeOU,sɹZlT!k3Y\6VZNnܻ
ڜQ\09[
kݗLzJAjV6[+S3kkDLMϮi"!]&oys,3ud\'WʲmMqm~c93FŒȈhq\F+;};Kh*ˤ>V5\gZZmďq'|Foߚ4eZSpgpVApDN T2dVɬY%Jf*!)+⼂CE%FL$iPHÄ(ap0N \atzp=r781~r3},		aa؟TMcM^lbc^lb#a:U[Yg<:*&>cKl,J,6$?BϗC3h9<u^U|zvpǻ'<bQ\qBbI9.2BbUY.еVţ],PKrM  	  PK    A             >   org/bouncycastle/pqc/jcajce/spec/SNTRUPrimeParameterSpec.classTiSP=i%T,E*E
ek
".,T"CiÏrFȌgI(̹n}0=ab;Z.V<
U*+*h&ûJ[E.+Ղ_T١6y(k*/:cb>S3,̡ۮmŲ֕/f󖪽Ӭn}QUUn5FUfr45X|vks;GVu%U)I#qB--oj-`m=ĄGƓILOMęjf3;XRWxtqGP{9"̿Ϗ6oYsk&rAMH\b\+l8{Kэ;"aDDwED(+QVDYEюQ':08$t QcI,A:x0,m,<f_Jcns	!wGm;ڈkîmfll|t$Kn#~/Gݲnf9f[㟰NtA.>?u*vn	v){cyfCd!69d&kyb)yU ䷰~]?vXz,<YXBa<PKʂ    PK    A             D   org/bouncycastle/pqc/jcajce/spec/SPHINCS256KeyGenParameterSpec.classmPJ@=Vƪ/qD$P*XQTt+8)mT_)(~%ޤEs=}x}ua=|O5tکOu
흭dw
<\)|?p}׾IAHS#;n݀XwpC>J t`苑K^={BN*yˡrt,_
tE˴yՑѐ`hc(}RO.f'rH#,(X@ Taȴ[Ih~:?ؠ

K)U(IK'UbU`cTP*dHQ41V,ytj9c&334>PK< v\    PK    A             ?   org/bouncycastle/pqc/jcajce/spec/SPHINCSPlusParameterSpec.class[WO %JƭTVXJ]@pnUGst}EqA@w}߻_[9s%'|罿ιssgHCp7(p P(f#0Z@i!B]P)
)`ETP+`:BH͛ Q^X	M3TmD4k5zD_(,Z\	Ud4	@]8Ҟ,.LadF{L$x9eAn+B#_LH{Tw#8J	xZ}
Uy!ic@+Æ;)X2G5uf:#jD*M ec@;E5z3)EUXh~oXTVL:"I]K+@}5Wrc.2e^X`Tv:ޮiɦe4PvOK6|u0]>-t>vflZ&OzlӒM'_zlӒMǯvh>tO|P`H ݾ'>H<``mHHH<x@@H<x@EIr#RK	eN	:6'LqT۠<[Qz'&))ϯyuܼTɵSK4s$ώZiFRQ{Wwa7a<"b(%((PƣL@2	e2l9(sQC2ee!RG	,EH(Jer(
(+QV\Cݐ{
y'p'<	ʳ(ϡ<ʋ(/
ʫ(ʛ(oʻ(ʇ(|	ʧ(|ʗ(_|
ʷ(ߡ|eVC֠4z
.x6e+VZd`sn589x
m9xTSUWկlU:O.TJեJUc.WAUUUu+T]UU$UKTjcU-UuULՅϺY5|͚i蘟樯9JT~3?|#l^gLe<fu[ؼ3!R8-5
:J
ZɌ QƟm8G~^{gO^#|o%䏑A~$ߋA}&ߏQW?A~ S&5ϑבD>qɟ$?iȟ%?yC_$ J>w"|7;ȧo#A~+䷑䷓wIM~w?&ݻ	~2~KYD"9D#Gac!}D1ID2raF9E|'_CZ/[jx&8A`S!rsD1rF.q"9I$#f,'rD.w56޳	ZiVFH;vF:t0FvH6F6"Nd;#;dd7MPKz  [  PK    A             9   org/bouncycastle/pqc/jcajce/spec/SnovaParameterSpec.classxG*7:z];I:IcVq\d	YF	KBzdq!t[轗~3#2[@y?Zt]JD3|6SI4vIή.-sw/j:'=5Ng05FwE,7)OOiԙMG|z.lLn_3
]Dhz.KO[3g}ym;;*gB&fvɭ߳%hw?Y}d:9@Z+Afdj3ٚ[	ǝymdkV%h=fd
y4^4Xͬ-%YeŘm䲛ey<&.=;zL;O
ػ>vS.&g6Yg{tM_)/,%7ײǳ
K_Mde>Ys
sVlܘsS]EgY%osMs//f6rJ	*$U
T%ZPZAu5j$YPVAmu%[P^A}
4$hXЈQAcMJh:D3!Jh6D!v:j|ܛL/;+|yXmF]7ptaK+V<vnଡ଼x=k;pwFh..*D6"T!@ @"@P
 @P4 @ @t @
 @ 0 Q āQ`&PJ$It&MD7n$It&MD7n$It&MD7n$It&MD7n$It&MD7n$ItPB)WF(IElzlv*h<	x2rӀ 	<x6/ ^x1
Jˀ ^	
x5U5o 	x3O xN] 
8 nN n|  !G>|$)g>|"0Зô
WaZW1
E9{3={9{dYnfMa3lf͈jU6lڬYgfvm6[l6ldfn]6lgsaC6GmFmml&lٜ93L/e)1GUOr*>zȡ	?:˲
N/W$˝XU,7S|HWwzMq*I?#wh0--F%lZj|GKi1]-F~#?RogZZܩOf#kZVKh6+-F~/tv#2hZQˀ?h77-Q#2dZFE˰j5-q-CˤYqZFH˄r-3FJ$i6Re4^xgO޷ڣ8rwC{)t\aG)uފG*v<ōWq78z?+nrtAq7;`Ž>PqRnGу@q;}=ч*pcTua}Gxь1G8:Vw4x#HqѬ	G8z⤣GO;xʨPKa
  <  PK    A             :   org/bouncycastle/pqc/jcajce/spec/XMSSMTParameterSpec.classkWU MBlH4@:b)
cH	M*[KY]K_~qy9L#|{޽w;dV "~P4BG#ЀE̒u"nڨz7-
Piq.?]P驼兩|QvjdY\w,i0mwݶyuw<]TCdyP?]֯et<]8,Wn.ie~?75	P77_ޢV<u^qDmр<U셶x(^s8Өnoք+Kn;+M鶶8-g[xUevUm6w봽ws5שBPO|Q/x0t-L%V?UkUVO`21I/-gc4E1$Q1znpHC00 RI`N38p8. Ke 
d,p
L 
Oy < ,K2/;+@	X^ց׀=u
M-m`x'JOMe!f9
oݩ
y33rƢE</kHM#}J?_<%`Mdc=zu8()iqsX/fYYϰe=z2	֌	վڬݖzDޑ|w$nܿ+d}'7;O>	M,OJ#+`9c
SH >4s/<ѷлʆn65eul<¾ۖq=1;:ǷlUG+Vv;Vmѽ}@G+V ZOu_D+:Z=G:ZOhhe:VsѿPKjۧ  
  PK    A             8   org/bouncycastle/pqc/jcajce/spec/XMSSParameterSpec.classmOA@iRRԶKW "Mj~":YڔńdM(㽳h/n3ޝ4O xf!naB Bg6a`-xr,*DPFKLQv)8ؖ[3mΑ9~),*ٓ4'Ly53'؞R}dn_
TnhZu|tWdU/w*ڣYjjQ_'m{:Ѝ-+8ojޡ6{vs+'߼('Rc<;J)hko@cl
g7]m%p	\D=@c34c1a22Qƭn#1یI]͘bc15TWiWfւ-z)u qLPAZ|T$?#Sm_4-:,:*Mf5Fho*:1s&?'#'0(oJ "g/x-MSOqIqƥ-Jgq3t3taܼttnI:#-KgV3tkPK/T    PK
      A                org/bouncycastle/pqc/math/PK
      A                org/bouncycastle/pqc/math/ntru/PK    A             6   org/bouncycastle/pqc/math/ntru/HPS4096Polynomial.classS]oA=,E(J(O$D}@c$i
¶eIhh/Tc?)hnrf9w6W H@ i5RbMB*g,VUwAY%d[mnWXav65{Q̶[fdMb4\gx^صNîWCQM1k9mqq\,=`m8EXб멎kkrk4N1,.wR糏u9ct9sCy"aOpɏ	LqQS.7oYndl̵* d0ދ0FQ'1WP!iUZ_O~$>!n,JD[l'="QV>8H+IcRM{ΰJ-)к{]HvHGj8w$2L3W|/:%;7Ye쓕wkg??*ő&P*.ݕ^08R| D+OPK|H/    PK    A             2   org/bouncycastle/pqc/math/ntru/HPSPolynomial.classVMoU==qKJ4	H'4RH-
XLG3GF[U6
U[5boQsߛx"H[sg9޽z 8tĢ%-82/r+omo5/0dYYfzk__o0^mo[_eP+[MUwFa5]nFvjBknkJk;nycic;^ݫM(S|dFi;RJa5FzPo5}BFJ̀i25kc8/fLݍϊ;H@tLd:ydb \^ꗛ -N聕I<E?2Y<)PxZNgayCq
6
_&g6ac¼Hl!X
XnR=/y;Eo4i!>*~YQ`d.^%OIJt }7[4mLkܬdʌ:r&rڀJT#0RN+{*4{F6wPS>tE	:|4?<f4W@=]Bw6ubӕA8`c815)F#,99r#P$1BKڮ
A&G6dFZ%~M7L|}-R|+ϫCdb|~Pe2/X Q?R9)#UR;G[Svh`y=Rkz.<$4cJatMjL
7'҇Ԧ{HOǓTM++LZJ&ċLf<NEd]>-l!+?ǽrT}|/fX]SJZo0kx"N`4~;ya0mGeLA!z
wPK   	  PK    A             7   org/bouncycastle/pqc/math/ntru/HRSS1373Polynomial.classTMOQ=3o^)hUTlAZ	~1(Մ͌eTbǐHBҝn5+n#}-N$Əd={ FR
-b౩섺O5ىx8?_/20U5l(9ϽwʠT-2*wbn1T(s?HBL:}2y6y/¼g 7Sq
V뙙[7i"%'{⺤@QI+3tV˗+^abw	騖3zu!KݡmNSe890~.&v`nLl!*6&u`d8p4Ed8,2rқtMzŪ_yڧM;s7bKKѰ )Q@Gy8&gx^Bt7G^abQ}'6X=<-;Ƹvqp%_ȯvFbGxTB\>v՚Գ:{|̢fq-ՃFm% ]Vx)f*ܖ_

Y"]daKHaY&5^dKCYhѶHjia|g94CoOP8@'A&+7nb
7g1;Ҧ%VfO?)hKݒr,7K+q=ۢvL[U)oi*7$9V"NnK*ըVsNkz
]D쵌.CAsooמתj$燚旌sZvm0WlPKlR    PK    A             3   org/bouncycastle/pqc/math/ntru/HRSSPolynomial.classUoE~㝙]2
pb@q6
% D$ZƸa]{SG8AіC\ \"JU8WpFHF5ofw}oG  z=Zn|Q"[_Weysb2[YF\wֶr)zm{^6c^^_Bw	Mkri]sf9QjW֍ۗbG#RᴝVR{Kp&o:[STiHn5j7"fBqt"p7rG	FT1負G&ZJtReqU)	Os&B̄'II3 	J00j'0cҼ%ЛHf\S	Ҝ%i&.+Xց6bQ(]9p3 ?G{GC/ 
o+g*0 _Fq?>˴ى;0u,aȚ6CST{Kiad)j[C3_˝.%NlULAϽUP U0vҌZBw?#̖߉Ds.u[A#ܢVPTFp8uK![H!
	%n4ma,a+JzHu#@cVaW#>UG?l{0y}Chb) rRuhB&pFi>FBDA=2GZ0g]Ocwy标/*mA;׷^3I1 ڕO=G;ŀKhQ#1ƮHF
3/Y.wv4-O\"&|>@E0]aF
@`9uB0yㄟ`>#P0Uv٠-FV#ai};3o[W 
bK]"n^ˑo&pSxmoT:3,M@^b)VJZZՖRjwEP$ˏ1PNQB6W<UKV3*aSAp}M<US
,zW,M,X .M+Ҽ*SvgqǨH5&,>?*OaF	:>8u&.\IPKϜ؃    PK    A             /   org/bouncycastle/pqc/math/ntru/Polynomial.classWO?sgk/;1,MLvMBm0mwa,6첻cDֶ"BۗT
!bEF(mJQUE}KN{HTUE✹>3w x. 
aNs
ޡĐZpôz'u|eTw	#3U<Z+K#UVK/7po^*إr8_X@ѕBzPK4s4k˜UƑ-V
Gd\HƅD(3kB^(jł]NW}KzadŗǜD	
-f^(K%C14\W|zƗZ#z{6qmqT>[.-%J+J^MV'0p߃B]6#Fm&5qȮW
)MnU<=UCS3/~<@7q?;@ݞ{9H^9z9430π#DĈA5CDf&pBЀp0 
8OSƀG%
 , gBt g|9"CD@D#<a"/Cy <"	}4YY(GT
_>P((c(	C?"!z^/6Xɷa_ 6#o~--Bv/yL"Lv6B]B".]*%wG~	-EϨgcu8ˑ'X3|6[)7x+*!
oB9VMKϣoՎbKh~Z1z	#P88vnE7`Mࣈ9D2dYʷqVTs`\8WXNs'}tOOQ0I#Vs<faH@1Ԭfj&d|JŒ^@H
.%r6($~)/gCfM`&W5_sqVtaٿo
~2l=s"&wDE'`(O8Pb Pd2uXN&+x+,X>NWHƎ\Sź?[w_<Uu$P%,^aH~vԢ]8આ?tڀ1op^ۂL?4%n&Zlۀ)<>~K1.9Ӊb15Ǩ&+CMgǙ>jrSS~,[E~vd'671,삔/9
'-48[1p*/EQ0)ʌR!>+h
:Qę#mswUsrEqח21;"y0T'6S_Mw=_M#=3ީ!WYN7uh%ܪW)~JA+"/_4
nfVX%N|2Š
eT4u۟qHP4[ِ[Bf)
AJsoEU3,Bɤ[A-MgLcKyfX9qH-Ե'͙!i "OJ=%3vdӫ?L[?[䊒SZ18Ю(SpXQcp^I_]8;NaG~lo+V_;0-ZG:	 oɖs ÒieGD_:7錖:{/y{
`ju|i@%>P@M͝)ܽJCTU^
/g*y[m	uO"oِdhTǆױǝ;uω|)>u_`Ys//wse
[~&Ycydϭ6@$J+Wy}1kySҔvg PK    PK
      A             *   org/bouncycastle/pqc/math/ntru/parameters/PK    A             >   org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS2048509.class;o>nFf
0F
O 1l22K,K+KrR
sK2JJsSKRBB=L,L
,lI 	N-ag`ag`a`f`b`g`d`qOIePd`rA$'gZ@p;FZ PK\g      PK    A             >   org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS2048677.class;o>nFf
0F
O 1l22K,K+KrR
sK2JJsSKRBB=L,lI 	N-ag`ag`a`f`b`g`d`qOIePd`rA$'gZLK@p;FZ PKb.-      PK    A             ?   org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS40961229.class;o>!Ff
0F
O 1l22KRKRs*s3sK+KrR
sK2JJ=M,͐XRXZZT
5Ȓd0vVv6vvF]
Mf!lAH9~5x@/#s~J*"'L bFA O
b`d9+# 6u3pCUu10pf PK@     PK    A             >   org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS4096821.class;o>!Ff
0F
O 1l22KRKRs*s3sK+KrR
sK2JJ=M,͐XRXZZT
5Ȑd0vVv6vvF]
Mf!lAH9~5x@/#s~J*"'L bFA O
b`d6P j*E8w3pDjmg V  PK     PK    A             C   org/bouncycastle/pqc/math/ntru/parameters/NTRUHPSParameterSet.class_KAϤffiAo*žՃA$D[;sN=KBADu{fwa^ߞ^ a R4冨J@=\dz5mzvze;^ׯ{ƈT=1@wY0O7á#ӺMdHoӓ~=dtDuKNSigv2!s-G
C`\9ϟ?V&IB($!+XӰU!Y!9
	ǞI@@O|j	JS',O'NPHO#7$YmŜ1xPKS3ֱT    PK    A             <   org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSS1373.class;o>nFf
0F
O 1l22KK+KrR
sK2JJsSKRBB=
͍H 
N-ag`ag`a`f`b`g`d`qOIePd`rA$'gZ|
 s#X- PK\i      PK    A             ;   org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSS701.class;o>nFf
0F
O 1l22KLK+KrR
sK2JJsSKRBB=
H 
N-ag`ag`a`f`b`g`d`qOIePd`rA$'gZL{x@p;FZ PKn]M      PK    A             D   org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSSParameterSet.classOMKBA=OfS!b dHPZJvmZ&!Џ=l5Ü9}x},'sugÁ1Uj1٥
SPE)sdc\cNUtrh6riQ"?g\Wd?aCƜY^t9Y_ƪ5?[{
A-dJ$8@DXC܁ HH5MNs:lюƤ]Y8i%RLBJx'H=<؜U
"l1="Sl= 8E	O*#PJD#33MţW]B	PKm    PK    A             @   org/bouncycastle/pqc/math/ntru/parameters/NTRUParameterSet.classR]s@iCPVQ}P8U[%4gDg|Mi-39w=gϽ??<`]J~\xbڦT	Y8clg2K3-fwcnȖyl	r
M=g#%XeK>.qOm-'c~W'2Ͻq@GH;_ENKA߉\""2s8?LI3m	~>N	v볞k[>!o7F.anŔa>XeoF
(
,IPl)Mq@ OP$(, KB#a.p``4a;7	n&[w\¤-W+4GQG^G|Y`t4<M[CM+cjvd|<>Bl	osJ2L3iMЅag	:?
44˱n4դu**ֹXP);W'.Hf+x@#ʵH	6j~3(=YzŝPK0g  7  PK
      A                org/bouncycastle/util/PK    A             +   org/bouncycastle/util/Arrays$Iterator.class}SOPVmKe`AnS_0ddeh#_|A`$e<Lڤ;s?X@>hq.=]*-1[n2ar&WiZ}@h.i;qS[v~4
}
Ov~qE!V4j&`Z<[f-'*leDmJ*8zV2feèW0ݎ1݆m['pgXaEaH̆gԳO-kmp*6*~)_UrjmaV*"PջSOږk#A	V*T$UP1bX
\iNh9xz>Ȑ~ŠG'?(z'*)o
dWO&b	 
%ܕtסKaifH^&+80dJNLS8+ufmW.8eN6BHBȿFTRu+"Fh
ړia&||i"+iB1q1	J3v!~8auk?t)3h3XHNDNxv!Y2A;ke0XUI2I"d8ԫb?PKWz  t  PK    A             "   org/bouncycastle/util/Arrays.classY`Su>W^+Y6p
Hd ; N"XXQ*K,׈qۺe;@l+x	nݣ{t.mӵ,_u(]
>?ן| ThVEe*,Wa
~nR!BJ1U8&	
ߔMdBH*dmJm
KdStdp,NMFcT2IeG	Vn:2=V
z:,jN'
c)d@B16$#6KK7?ýˮnZ
XB6b;e`YR`SK>mQ`Yo-B}RnŘM%R}
)q"YJlLc᪥
$ņKPj
g޸leK5Zj9B8{xB<4g^T*8W(n܎BÖPi*iPxpI+ZLkaHa԰<%y	sqS+]\ˍ9IgӅ\prhV
x(q,5(Mǲx*$:݉T69ȧe2C|.5lO'p'{|hn8z^l|"fR<沸&&1Tz<Bئ\v4QHekM@z"܃ͅD:1H}8Svi,M3*H=:ڗK~zV|<jQsb=Bw2K}TpãB:`CS6z?֛&*Zl	bn>ɥq	m#F|:;w:I򋝏OR8l5/yNҙ}8}D)xT!Zts='Q!~(\J>u,jZ,{O&1J)3Lb׳+B3{`4XV[AQ C
M
d)0xSgxT+~NWc
2bGҵuT~m~3Xc\o
ctĪy`+
)NNή!'tgnQB5Z!1j	ڽh|0sQXG@/x }3;$-$af Jm7[pNo% Q۽$#
ArN>
ea[<(
^)g/<I43$Βxgk^8G<>IڧwiK|Ŀxe/Ds$cBH9 EEI'$DI|I|7]OI|ğ$7$WHGŲT/bN>6ѷLL$dRc?%B V d2sS@1*i1kHYI8'@΃$^@?Al:ȂTn%]xuy !;ܰo!$.COFݚIɨ51j9#ݝDfU$2b	Vä~v8l9%~]WmNvo<}/L|	hf.΁jσ.xg@~2D!ans͔pX]TݴOykn;at@대̚_O.^:KݶgWp=;/jRgELMbTqs`hrZeDTuR|<ZWy~pΫ9X9gNh
qn%HqGvʳ
q
rҥd Oc2`;,h,	c%y<7`ye$(m'p:x6ťd0|wV8q\涕%<sW^A jqĉa%ru] 4=f{,'*eHȟg(dVDJ_ƈ
juEa  T,C?i@Z"^ĽX~ϲ\T~+ ZZ.XZb{Ԇ ~<ڎ@7v5ƲF6
KUm_顉n_in&# 	aow nQl+#l*ymZFYY"ul{[f۟w9/9cuZ6qͦU{tidאּ?~c Dѻgb~vrx@t_ hmG∅f4+.՚DpTiM=t~ 37EqPhp@Nm^F}^\A"Eo@ko8s^uԻz9u-˃~8ɉ[AӮMU~t=ǱtFY7uK4vrrG$M7&!f}Bp@ʈH W @7+%k0wsogԋ58UwuՋkdUܓ,nWo_UqYs
TŝaqŽz
{};Lc
N._oH)E:boƑqEC9ʪ7By]fE8u wBam:T 5Sx^lڈO/ElG|7G\gQBI"4ňhA}[9՚۪{5vn_|;JEuF7=+n|lIXamVZ?V\?V~]S+S?<נv>.}|[^WӇ/_K%ms7&zCcػrp5IWâ>{m!\Qbh NC8xeDtBE	9nBu'rX9Uqz9n^[s\:<.m+qPOàaZ'nbR#Ie=D!1*Lُ邇0505D!B
D8H#p+V2
^Ö%Bi$FeSl}L0khDKNY,oRK&8	,Ԗ0)3ګTY2MM&F6W*EO@*aHWk[˫W?XN;wp	a?.8ωreֵ`<::\
>qv._ﴅvQfQJWOÊp4`9_ai .n7
tcqit%b4`5iӹNkzC`z{tcDJF&z3ЍKn3,5 J_#졆@;|-ujx3o.[uX$WryZ%}eoÿ,\BIO لЇR*TSʟվ[YªOamt_.@Sa\<6,*?LGuc(C?
mӠIWI⧢~֟'S'5F)J;%OJfL*?3P1J]W	n˭]fgwI=bEm''4vRZVlkX1"| PKd7#  ^(  PK    A             -   org/bouncycastle/util/BigIntegers$Cache.classR]OQ=CۏEʗ"JUPx1XcbQx)ݒG_|H1ܥH왹Μ;3~i	ln%'XV#+	GbK^
lW_֥V#t.!b6_XG6?HS/,74}PS-@4	5)6	o=3
^6Zm
ϷA̱5ߘ0׹Hӕt;tK諒BWݳ%4z5Ч!_ a|y\_DS̟dGAlǹ{FvQ=ΛӔ!uࢎAh:,HG]:
1+QDi\UUaF#C5־pQc8tK<[[U["Ê#CPy.^ݼ2`ئ]4>c.fv0m$"_p~SFh"Λ
4(a.5^M?ʄ_(bDm$(x ]x)< 0KG1ѣ۵7H(k"EF8}!,ئqw
PKp,[  =  PK    A             '   org/bouncycastle/util/BigIntegers.classVyxJbRl[	PJrdUB҆$)MКu\H^^]Jzݯ_J:ZJbV{oͼ޼}' w;βC۱ʎuމbA&4oNU\:Mfsy<);uB*Ҷ5p m>⫯`aŷ1V%qٍYg48Y:?N/բJO*
(A-T"II%Ո?SPPET4BL"5?Ta%!Ohh8!EzFC1_R
OjѰxHTbZ"FR_
RIKH, =dBITO2©X2
$Sjȧ#A%'X$"ePZL")US!>VIDB=E`؟ЭMfٴ֜x񬮍S8N-++ͥ{Jv\|&7ˎvw"3łqd;i@IZ6c#CT&ndn<a7Qm]9Ol5TAPT5dQFJ>L%sS+xVStmshG"hq}wO..˕ތǢf)/NdnbRkc9
wҸdDɪ	+*"S+H)
l-E%S ҙّʟńE')>qMd#aDՖcu|.P6,I٩tsImRO粔2uOQ'[r<ސO;&4=[g2ڸِ/NhYbS¦MUA*Dق	E]A.h"?=ʓ89[) êRm(tDI*lMbxju;O9Hǻb69Jh%ʮA>	Bgz:m:qBhOkpA~9;rr-,̈ٸU"U>ƅ(+o*,ń7%
ޗ*w-X2$YwQ6I
c<-_Myb1'5H%_$\!J	q	$Q-pY1Xm6pzm:݅tv|
?b+ʶgܸgMK[_i	u{O5;RYA5OKh(߾H.㋐cͧ55U#K^*UPՅKYkjj.52.ƅ2Zq6Aa>0:P/<4HQX.c;CMp
*Ζ[(<26c,c-̛`xxwHm2¸GFэɸq0Í1'rV|#e{gN
x	G(b2<̰`8I_`x_be2O:1|ډ]ã1|މ!NLNt(W1G\_KJgZ~cF)%Օ̓Po%	n-ܜwcl7Fg/g~uIbE<:hţ@8ЃwKa=:}beǜ0\Q`i霛7:;i!&ewʲF@)쇵svRI<ѲsE
.s O"y_;9jvnKT]".Yj̺˄a g<:Nc\~ԺEKGs)zfd2eU6SZ\65,u47Y-pXש&M&5In$tӤ))/oه-1d|ޚ9Cx?+4xAjm}s[Y탰Q'_2iVCE8GZNF-%ݦ+ U|ŭ"ʋf\{֑H{hn{uGC+,C˔-@	hݦ.w_/ekzH|t^[N֝.3D7Ri,&z:Cto_TҲcnMQ4v̿`/P5tI2>,lItg^k.luYg^-0T%*i_Ź664XOIB,y0ruռϑl}pl?Ut5:*v^!ӟ]/ƆkIjU<L"3o8e,P#lWqieFմG_왏U|tiZ0I* _
󗢓)Vꪗ3	$57%=d
ˌ{3_kyX1ݴ޺M3p3a;=Ժ^ԛwx԰UGQ>ݹg]T0wS898OJOg<ykw*VGŃ,$Ө	逆{Wf-yy8~TNy;[\[x$HU_h͝6GTj2uF9rlG~Qoo昈]tcX/C ;!pѼ5Y0uñ&g6&Os<-Gx	70Jjx%6pPKZʫ
    PK    A             !   org/bouncycastle/util/Bytes.classjAdvv4vlfJ	BJ9P҆4W
^<{< > ^| ;m
&ﷳ~=XrQgių"sIg~ߘӹNa?Ph
8=YXQG'N4vO(?6NވP؎$fH{bY,Vpn~v(~8{vہ
X@TaNm[o(YwS|-کUxxٞ8/9}6R|.3qS]V%$%j[ڵKŜkiصҮb	}]^&8qC֕V$XTVR>ϐJV+Dm湔)V#0r\|H_RV,߷a|޷Cohu`$9ۃ_PKyZOo    PK    A             &   org/bouncycastle/util/Characters.classmM
@531+M;&`g9ϘH.bQbFfvfv=N2J#"b~^<Bɜn7A,"<LIB%+U|KyR͞`0ꄡO^,@m086hL?IL`U3UFЭT_3>ss>koPK"{      PK    A             +   org/bouncycastle/util/CollectionStore.classSnQ]gN)-b-phZIjL>@4b0S3~_+&*A_M>\gk_QLA7u@Eoi

C9eԏ|[aVw4;>yf3v)ԇڎndm1z`eɰ8
R`[֬Y?chgVMp7*#NIede(2dd,X$#+͛B/R*Ts[/NBs
M
?Q$*nM\uLܫ{lI$F9o)=uڴs'QYH
XW0
xpE[
d\D
 60 a7Xƍ V&DA\uV\e*ĊBVȓ^z.	51._Huq+.n{o@$
)Rȗ0/!RG-2nǐAJF,s#ӡzɆ
!.ceS*P)J5TL'%鴗 PK) H    PK    A             #   org/bouncycastle/util/Doubles.class]A@ߨZ.K/nE7miv%'QbۈL2o7? LhM,UsGH%AH*ډXz>	\g)%EU*?;rj`1TlBwS\:"YCh)7_ѺHi74%PKε      PK    A             %   org/bouncycastle/util/Encodable.class=10C!4	Nԁ`J(J%8"t,{x~/ ۟D:6)Oms7}&X1QCO KE9O$3P4QPKgq      PK    A             &   org/bouncycastle/util/Exceptions.classN@@R.Y!.qWCbNꐱc[D2J5g;s}~yxUlc }Zu..>A5)U,Le>VR7cUP߳>6M>U]\E.rwo]:PYCŅ4БסQa4MOr|kfGi|q?(;q&2 Q((jB)
X$4ZH0o@9}BRx&<GFCe)LL1fjo^PKUѪ6    PK    A             '   org/bouncycastle/util/Fingerprint.classSUǿ
lH6PhmmYmW-6-
Pf&&G'OaP7$g,Θ||s=!a|%biyYf_}y+gc=
\R`_ݪ;]ݸzQU¸ ߤn!b5<ó6CKZdy´1IUL'eg#Y8ȲdzxL@YzirlڎW[^?5zSV6(|~ZаbGZ"OYTOFg,gvh߆V٘)DT[][QЬrigQr̢-@iB'N!.5ZV(˅xX-]8[%Sgt3:CWӊO|wR.@B^%!!"_TFl'DR2mO.i]Efn)i[m˸n/GF$2d\av<
P.QcՆ$Y&m?n̳<`I1I;,3,oiXh:,,M)Y9zo]U17eb+0eEG&.9qZ+Re%!Cc GӬ"1@[Tķо	BDۣx'&A^R B̅#B!cwuNxfQBR HCo%hMF>qr	zgwnJb_jx^%//kX:vGx;9!
p/ja}xM~;Oѥ$mᶸ}Cv|߮]1!Dq+=Eplg#lz *FkX#:-DjX]5JYuRhza덻սlWSj#{T́/54:{>jB_NQZ2zD&ۢeJ2L֧dJ2J*)7I}irԯh%G*+:iPɓ+iNſPK\phG  k  PK    A                 org/bouncycastle/util/GF16.classTMoW=/`{JBpV1 A-~1BXX8(uP@Py
EQ,JR./731Ϲ;{獟S(
Ź<,`#\H,
6'pA[v[G0k˧H^5ŮVscE
TmmvѸ(wݵ+7Z[@ncsmi6~uZ^Sp۪6L!l
i

I!458/A+
Y﹠^ybX0CAN@NgӹNL'przf1{8;GAL<|<{1gcs?qLNeCK
C,"_0 VMcsN̻/Eɫxe}C.7d~N`CB17ڑ`6;WrU˵`qcR>-B-*MZ2"'Io5ԸtB)JZޮD5jc'&TGT6GUt%웡=1ڮ%_ztNRJעm,vp^	<kK]{icoaArndR٧Nݐ~]~ݴn[~QeVIC1*CL,1Č1=%y#Ji1NpXk>s\&+;z*>e4Qe*\ٗ2
'8vEo2YXo&9)q8x?PKL(>  f  PK    A             %   org/bouncycastle/util/IPAddress.classUSU]+Y.RVҠֵRZiQKjPJkkXi:}hi3K:v
G3{n~_ =	V##hd>bP$ǃ%-ie)0b޻Lwe%W&^/ilws
9̣nCtyN@n?"->[n!c;7;{KS9 9Ds"Oz}
nq15Nītz~.z"CQյ|!+B-1Z^]L-,3_fܒWȥּ|!ͮJ%him:xˁ#
	
Nj84Uv`h85]tqb9&M&h05ЇA.dCHh!S@Zq C@ut:
-pAFt^?\0*0&}_%ĩIw妘q&&r%KV~	Q#Bu
̭C!K;$gP,8ky3o{Kqk=G2[^@vKnu}y.QuG\
<Ķ	ZTc/HUNQ;ޣ2xC%\ڒUƍIےhjʰAsC"i8K Z$K"C)c2De ٟ%8'LS#K$Yoᛤ9Gs|0#Z(\ĵX)B>Cof+#OX͠KK;.>m'*o7sy]dG&ռ
9DDVd
YC0PA5cNW0:^Quwf.\ЙO[gtqH11[1uE̞]/..vHJhC mgS='B©Rѻ$&b5ۄu"<B	RT#R\w_;Q]44nVbC1R8Q(<r{ѹ΍yG߮F;y͹εj+A6ƮS=1%:&j*k^u3-zEb@PK+;    PK    A             $   org/bouncycastle/util/Integers.classmN@$q 6/	].)RAH12cəN,U>@9iFֶ9{G|6
2>:4_:;9:TG3д60TCժR^cER
T"P}u{WO(yբ]Ttupx(d'j^6пˡ72ad	N(Zhn"QJb#Z|(s2 Kǒc;(9(;X'93ȸ(2\F1˨2jyd],0Q/^2^1Vkucf+tc=4RS2641O%ʝ'2ӎ}G$?;)r/=v了vSuJnZ=ktS=O34+8~!ݿ-޷PK|"x  P  PK    A             $   org/bouncycastle/util/Iterable.class;o>FĒҢTF̒ԢĒ"FĲDļt}O`RP^ !蟔\ __\X\_Zhbn6!!v֌bY%@%J@=3##11pY PKD     PK    A             !   org/bouncycastle/util/Longs.classmn@q8m&@Z>b>*.E!QP*Q8I7z'$8Qqx!`&i+kgg~;;?|`reG U=N\&.)J6yr,>O-kZm̾W騪ȑ4m͆΁v_ؒw/;kJYNWy@۞͎;t]9me}g#{j,z+)G)1ݝ<}$j7vԡ)::sԓ6
$! n`%K%2@b
(\`YfYar2),<uzݣz2[3mo|Ֆ[aKNS=Β?}?44nQ$;W8FpODS?"g#_E!n8GiC7BNoq9g(4$]-z!QО?3׊d̷iߟR;ݱ߈_PPK<    PK    A             $   org/bouncycastle/util/Memoable.class;o>NFJFĲDļt}FtҼ⒜TҒ}ĤTF֢v&vfF%
M:5ccd`c`e &FFv  PKM      PK    A             2   org/bouncycastle/util/MemoableResetException.class;o>.F6̼;FĲDļt}b׊Ԃ<FtҼdLN~iIfojn~bRNjPjq*B9;;3#̼tk0\,,)@.0!syBL@c#X PKr*      PK    A             #   org/bouncycastle/util/Objects.classmON@n!	D;+ql$>ihhDQ=c		ٙݻO { i0JPa&cBkcmHhMb9NGΒ)Y,ⲝY,Z_v**@@s`YA}w2ݹ~b 0comfb6w:e{s%wqtK?+_&Ħ8&ab]XPKԖM`    PK    A                 org/bouncycastle/util/Pack.classU_SW?&XԅlE
SZԨ)IJđV3:}/<8~~8msnl n ٳ{~y+ 8x%PRI	CdfIsK[LY勾!RR,9m)	i).0KnONٔ}l-p>BWvH;ОvbXCu,W/VR*U$t2ҪÒVNR%WNv	!ST
M6X˗VWq_ךÃؽvRqL;	4kA6r&+`Os
r;P4&׳o&ʷJ˛u\Mܪ寱&tJAnrB)Pf6a?`Bza/n,,+S*AR*H`
	ا (0HbpT 	 z	
DL$N8E4IS$ΐ8K$$.HDO>_^)`wVR0_\/.ΕJJR,%hV<.1Dg
/i >|x6c]ؘ4̪$^M?<困b|SoMZamkx4K㍃?w*#f|t*Ud/
\l_H@78I;.?xDW8
ǋ8!Tqe /
Ž4*1iۏrV#ՀP!tW$NqR(WƤҘQ.JuxA3eK_ǱBc54E|NwS?9DY\ov*\s=\o
=vsQgx_ҮF_ԕF]ͯ++Ik@lCHA^h/8^tܾH</B0y`T/TĎ=iG|nձ{7Idq/ެII{Me8gx貼BP?B8+(\T9SUl̇`|ɲ
}[~=jĸ{h竒5c H;^˚yQ'S	YdDM%]޸7Ųyy*7!IP%bε{s- tpCx6	cՑdDs乀R8-S\lW]
i!:>٪B.]6
)\*# cM	C9y+xy+_}8_eZUlo|iWjT+[U%_
I18X#VNJd^7%(Z_RIGvbBGrg<}*#o/T}Vcx
0Z$OwgxQʓwL-MO MA )bLl&cmUV*[nT>#jB-9Sew*_ح|[{w*PKMt  -  PK    A             (   org/bouncycastle/util/Properties$1.classQJ1=n[v[z"E)oP=nYW
G٥ू	399s
.Zl{I)8d:V0s};|.YsF
iz
E܋cBχ$4
^tX<"lGiؔqF,hM=cBނe`hD|u?JHPtO~?49_4dFFd#4YB%THáiHzAS!>~Gh2s I̤R7f9~r+HV6eٳ7:S(98XFp
>PKc  ;  PK    A             (   org/bouncycastle/util/Properties$2.classJAƿQsjjeej]DtX	:l#
UAQtPe7sfS4 }W>wUdyL9P/Ԁ53j{TpC&X
JvOF hҵ~(C1;Tܳq4OSdY35	36`KTjw?G˕*/}U2ad"b"5T(C[9c ut57e7B0y `: ́XVWa"}=1Rr:}BԒ1EtcS-k yF
{1@], ʤboPKs4c  5  PK    A             &   org/bouncycastle/util/Properties.classVYSWahF((̰DcD\p2YL;CkӍ=(&Ƙ}cB6yTOX_`0=ܳ|
`'BPuI!yRB6Y K5
J}eYX'qіx*![Ϙ5ʠKPT琞IlrPRm[s)cz@[HQ#>B%j8I3^Am
i;r\5|@u:-[Kڠf"NbpP;55Qmy%!;z5JŤ洕gaPLSwżZ]`vmH7ؚڟҪ!JUw)-h鬭#M-8qtmH\LkCn7xen4ٔ8gn#ޮ:|&|b}u\:%]bhf M+$Li+kGҪZ65TWkl5mȣ)KMrٲqvHXWU

ѱP
e5mm&U\ôT\R
C>\+e]ʍb5~6/CNƓ2 cM26")[elQ+NFFM2I-nƽV
#T֥74kZ](h?8MwʏLAsvJ=ɉ
-䈭N1wq{
m-
8|)vÝn+ym]dZ겧 QIݞZ!Vv?~R{aQQP	T㈂grUE
c={LjWPb-jq>T/+"W);z)^D:}
c?0bA^83,β8F·ǅ0^a$إE&KaJopX,.))CXdYxK0nSNUM:*IӤWPnWMl鿁""]5c
M2۴*ih,N_)s/h,,:ox*0.ep뤗@jiƁ'4(3QA!eX.F/JEDK&OR$EH%u.w9!hDyʽ+
eҸr\p$iY&aCKG7P)];N^]&6j<mgxF#0;sԟFpbŢ71Z[8Y?A(J qmЉWC5J^Jԧ;YA[5!HqqTWqSfG؈[(cOLsZRsf쫏HSH|b4~!M\M(2;+hT8m|}Mc"&r3zGqW-7L 1{1E5˟6QPn-݀D"jשAjr~p;7CQ&quJ&1FlZb	-5h	kۄ=̚6% o 4
Jij~U}W}s<ncƣG 0c<%9<%SᄈlCrAe-w?PKqT  1
  PK    A             $   org/bouncycastle/util/Selector.classm
@g5??Nk
!&	ċY >"]fCGQ>Ki*!Jq./RhYb&2LG_D>8IYY".B]<dZͶra]2Zl&&~~ЅBk,n[XCz/PK
g=   !  PK    A             "   org/bouncycastle/util/Shorts.class]JPiԦ]&w-.,]."XSBMҕěP:0ÜssX%Yv
2~"+QAe0[H?*|׆9`YBqP$U٨gmTwh98;a?l9=Gҡg^YU-	MnY	5LxcU|K-PK,ZR   ;  PK    A             !   org/bouncycastle/util/Store.class;o>^FĒҢTFĒbFĲDļt}FtҼ⒜TҒ|n<ɩ%y,6!V>Xa
12Xh0<5"Z
,蜟DHMH9`_ ,L\@002p 1
!,N PKE   l  PK    A             *   org/bouncycastle/util/StoreException.classuP=OA}s'BaHL,d;
Ckss,9wͱǿcBGǋ	XL7M2~@_jSzX+K$E&M*n
􃚼$ik6O&yMeJNgblNn}LXL]M:f^?'HF!M8"T^Gy	-
V<q<|G{
njroPK   Y  PK    A             (   org/bouncycastle/util/StreamParser.class1
@Eh4ZXXX[)Y	
`.!af#z5ĉ|f
=B?')$V0*\*dόya+]ao)g%1(BA'Q-VBͤ OPK      PK    A             2   org/bouncycastle/util/StreamParsingException.classuJ@KKklUw.
neq$d*A,S	ޙ6ڝ׊ɔ˪VKKT9m
ajL$2S*K+Q9+,dQj}|	'[W7}If<Y	fgъxW4	@v#5kO< g?.ɹOpO_1xjޏhX#@;b\
PKVٳ   Z  PK    A             &   org/bouncycastle/util/StringList.class}Ak@j4j&=&xKz),zfO,B?C@TqZ/| 1fh`F5V5M(Yj*#4iՔ6+o)pʴmYStë͎W蛵rgxO.{~f&ay9rP4Zux #zjvG
t9Z4[ PK4     PK    A             %   org/bouncycastle/util/Strings$1.class}QJ1=NGApWDtȘHWQqQb:vVȽ7!61C7w	#!=&tE,M5'bn;Zsm-{`ad^nydA݁ ãT;;Z<ǼY$a6~4JJaO2D؄IصZ6':<|%yＭَ~d|WoRᑞG# B}c+>X&Lܙe\%7O.4ap-.B͹׆Γ>axhnDFtFX{ҕϏ?c=]SdS

}'f
|PK4\  [  PK    A             2   org/bouncycastle/util/Strings$StringListImpl.classS[O`~n:p	qɌzUfGGb.bްD?/0~]lK}Og F/l7ek1d^̷fn:bwmJZ%Y>CꪟHзM5JGS
Vm:u&C{x=%uj-zmPk%"[j _>ݳ*>f$E|䦮$G5Èf\NR)uN)%E\d&d ȐpCFnrP9Lr1`,9Bq0!A0OcQ!c[u,mݨ>3]s-Le߬6ub^l"릯5D'3aН@>I觞BIL|K_nv4&ØL#1$)dÀMA~.ֳczˤZ~/uPCU&BӹUȥ1c-(Z\[$oөM\~zvӛA߀%aB/#h)J@xW;\H uaB{1<
W>JkHR5PKS    PK    A             #   org/bouncycastle/util/Strings.classW[pgVZi&kRjrQ"N|#ZZ;ʻjh)ה$>0c{pf`>0Ci&9j%9Βa{ss[@l+v 3<@G <{uޖִM8-GKK[ҭBQ-&f𠽛cb_c6VB,P1f't%`ّ*9-y`LL
FYv19pF9t}c25}QfsꜪwZ1S\;aT=cdX>K)$9a'p}[#ڜ2)k4ZNUtydBm31w:3&Yڦw&c̻V2bXa4Yfrn9uZ=]EqlsQ;vQqipޢS Ue[gԼT%eN&*7p)9;ς	Ca܄UgԌ x;mVA̛u#ɨB[AjyKuXZ)_T갚WLzn@+avL`ԒHNG#J+3Syvj,t*f,h)B>t	Del2z4`S>@k-cKM|4/Cfw;dEW]:|T]>& )
xZ@^8" !֭Q{&U!63Iߥ2q2|}K[T
-iw.gE@3
6O݌4櫛hQUŪɆ=Ei{8WxKeXr
>˺ywt"Q%BDЏ:	",avHhG=%CO1k)4lsZ1%a7	@,	-I#8^1yEFF`&#g9yF%FF.xU)2#/d#_b%F.357WD|_QG
Nĥ&u@N)TzF#9q%?LNR<J?H.iOq%Z:Z+|U|w'H9aCA ^[7+AG@KD9Ҿ_$y1<cl+Mۙ_Z{8NC5S19&W,;XE4;!S18o8-Qͯcd<\wm_7oґ jI/
zg@@dyxl20̃6R\/Ó6[!Wjh}9/_I77+~n+)B./}W|,\)rBՑ
2qD"-ankoaY9`;װ;Ȣ,A9.B/#:ƥx^o*)V ĐtL|.$=tEνe0߾&+V-.%w
R\]Q#`"=uڻhB=xƜSZ3Ni{{XF#v%"SCe~u|O"*/JM>z7Լ uCb?6C-r݁O"mJ6'6LeCcddEA$~V`{8FCmxJ;:LOE<ZT{m_[KlmiㅟL[
<iK"2?%H%O*}Rd*)0Nhg6	/-D(YXdͦeܥö[F`(Hա^C8n`#X3<Qs62D[eJ7:r|
YHoJd4FU2zZ\ (kt	Y)o{7{u;vO4Q0e?+B&(׊L`
C#kM=
l*nW*
=N#C=	r<3}a
:&ǹUL;9ⵒ4@%R~=Ng>	5^+XX5,66>G|9~7;,`hzn&v$ItnIzi PKӽ,f  ;  PK    A             !   org/bouncycastle/util/Times.classULAǱé D)FAl.+g7q{((|)fޛ|!&GU;BsB|3SebM[y"ZhU'IsIfVe܇9C``uB,Ab
y@ﾁSrژѽUű+zՅ/PK>>­      PK
      A                org/bouncycastle/util/encoders/PK    A             +   org/bouncycastle/util/encoders/Base32.classT[wUL'CJLB5i
[ڴ\ii
0*eX0y҇kARJQ>&b=vo}?>pk$| el0[
Y"%r֨[N9\j5*T^HE(-4jzmF_R
hW/SK>4{z(SՌm^U@LnU*\E01chiӖ?SضuQzNsle̞7;:'誛V5^;aYmu-1ju3-h٩v<ͻ" zmw?g:x.m)=ixV&pz[NC-5cMEE5T6q؈p1+bNOļK"EUx$g9;UIvM?
焊/Z͚amTrEF(6j&szxlun=h鿲SILCp(PT>\
٧YUl2{X
&PpIM)ħ,c
n3!x #eDqOFwe3m&r2Bm&qy7O63GLd鉻ϟ&y8t';Z96w+R(;҉}M*'
QIn/-#<{5Hs`eG(cGxjEy?N4B6#~'H.Zxm#T\᫄lT8ƏN<k	gw}{ib7>G_Qu/tL*T)"(HC"X>c',6Z'پ8}1Zaif(u=@puؐ(|A] 9s1~\RؐioDMSX!O/Xp <w;!P#2
[V9)k4lnT6MgNZoLzp;yk=!4MPL(PKO  y  PK    A             2   org/bouncycastle/util/encoders/Base32Encoder.classV[o>+r
)$MV,״i|itXvB"mTU*AC2
bhK>?!oIѢ?IlݥHF\%o}fΜ3~' pH(E 4Lt6+^%^ڨC	ƥPIC4*R\Na.!`4>>1ry*{}bzlf|rԄ Ӷ8UZ5+wpeRlb9Ĕd*[lI<5JdjSCf%-KM*93Y2B2s5hl޴&8)Jn7V6T/WG;/9޾#(/$F[fu)I-4IBHKfp`X Cq+oJ\ =
̲l]q[lq(OJQ/6VoitޠͲ`fD,Y&.X6W,x:?<eX^ Y@gsեQ;QUx9ۆQ3z*w,^.բezNexUd2!%Ðe :VI}َ܍qjNrjtSΩ V!n~ C^"2 !
Q@C~CQx0BFp*gLj;35xd?i
ހ489
N
N»#"xA2}c},l]1Jkd[EWqp6~"f u0 =A"]xF(-HG([8`ARв\<h
ps"=`4ƺ^#$':u_]"2~]Ӥqǽ-(P{<`k;6as/9>sa>O
oXPTxd8%Q00r\Y\.q\zUI\U\
{wFFL!:p8ן gd%b:f$&Z,k7^djeq\bac;QPAPpZ~s{vJ{ 	4HW.:cR-J:z<.Jf"qKL]a++\wN"H+\UPF:j/5&*%,l&mnD14S*`gĄ.qfC\zy]N\M+Q/R\'^kBJB(}Bi;<DĘ<k1u
wŒA)&~[ѵsk<zУtYW0ƼG[PuPWY}%gӖ=z3=#hf{Daa5_P"[p=<@EV u^aWߦvSȻ)n
m7o7\qƕWk\q_kէ"- l
gنbJV]z[%*C&Ojn'!u؄Y<Pk.ן9zbJFn$ӃLOӋLo#`D ^p^>~( UY=CJ]ߚ4Mvܟ+b{H:|-sLX{ӽk<2
~mv9z%y۵Kl.ze{я5^1lV
38?=9	e.iv܎,?>*/B|J5z1A#b9ڄ6!eM=dJYsjj<XgE+uOE]Q 1u fJIHಳЖ\rD+/k6~LB3KӾNg=w:YP3xv8b2xT:~:
݀֮:LCi_Q4'žџ>APHu	m=З,XyH6eٜƲ9gs2v:c;(
DT[;cS~v1l1. 26b]DK,.#rvEg9(8#X1Ύ &Q=LGˎeל/7PK9~    PK    A             +   org/bouncycastle/util/encoders/Base64.classTmsU~n$MiF^C[cTEEDSc|[`KX|΄Df([9{s{XCՇV|xS;	/AD3rcENo0#>2rY5sWoFQnV2PF[²Khf#,|F5\;Zc+n>ƽv[?0]5̬P6UHJUjzj͔SS욭k
+v<W޺ިbQ6%̽tkuAoBjR(Y7R]V;n[LuRą6פ?gk*.Jj=i6l&q~>iuznfx0=TTtSKF_9

,*)J`YBdbؠ3cmTm5Yh ~yNlUY|FUnߨP|D񈒣~e2u.<{G|*}
%4x4 ia"qj
nb&>m]m|"*ȩH$>T*>eQPg*UdY|b[NJo_qo>Y|"O}HzǼ5K)aIl'
}]&-zDI[ "싹cO3'cʘ[\:a!y;k#gVƯKv[}DB=|GJ<
+iOk}?#ૠO0A?,YzDg>=
"$)t:$;p	,Ez%qS٠LbbݪR M)G6!S!&2
KJ{DTE]!!݋Ńrx< i{Mec'l2Eg3faN: a! #í  . lZI|\\,7ua^!qdCB0ܔ9qZ}'vPK;    PK    A             2   org/bouncycastle/util/encoders/Base64Encoder.classV[S[^sёX`6 K!F7!$!) 
&$tpRxh<ԸzNgڇ>/{['V}"̔}{g7xDK7-[PHBZG
9và?wzSf}M Ag{~Rm.K
)}

B1?](*TCJtBOS*OdsS0e5	[(V.yP<QThTùQ(ObE<O)7U+^Ho|B<`._)ε͗!m
OssE:=JZ=rwstzpB8S)MjЎWf+*z*WHdUWjTXxTzrqbtONqgy${~rg}9|*t{7͙\}X7[Mb&3iIm&IJv~I$=#"X-Ss-;}^v`mޡzjEIsh5PYI!)Ea)9	8ei
Q\	$)ElꢳK賩tNC'$|Ji	$K(2k{Csk\pnc4 )tTĄc
b'³1t<k|X쒢Voz)3Rn oNoI>C"A)3kTQ:gG
5RvQ6x hŃ*0C@~`=d pgMPu`3lO<

^<LppS`O yo-[|6O;\v4g)g<<`|x^><ʇ.8OQIv4<L'4jgu>AYo YH$\#)t0W]X2
~'&%K!>U&[3m~D,aOZ2)DKyW睝@l_ pWt5*ݩٯ&'׾J^XF_RTQ/hдuV
2VnB2v+SZPMÈSƦ]40^M>$]]+Ϭz5񈎰+{J3k4HZa(Hr\c!@¤ߑeRAc^&29L8=&S[%M U=4YC]YIy.NR][uà'sڛV|= cBKNu7<!nD8nTD&"沷 `),E2ѧł%"pd\"`f0w3X械Rwm{J>b/nhPԷkL6~VرAB4,m^fȷF]=#1ƤIb\3_EBFcnX*X"5bRZC18ϓ:(c(JBUos]ݤ\T>!ZC9zi[jBQB_b	jGj
0̣awm8bku`k5;ZXؒ]AKa#'~,s'O09ujMFRhB_jgz7U|
@]΀b	4b&8tLrֶ/VzkĳIk`ADo"'N=d/`\Hʘkǔŷ/Z*{Hsk0xP@gcӀХX9H{cׂQ7yAL`jkWVQh~{K7vt<[ݵKX!)[$#+ʿ)\_	zJ
8&XDPKYϾ    PK    A             4   org/bouncycastle/util/encoders/BufferedDecoder.classSKOQ.SfJQRZ>H7<EM4, d3XW
.\|{!<usw=3o?? t$zDIFV,<!P:JY?<؂登	y>A?l.00t8v^hAU#%K5j<vp6[wڑ^%
@**u.CEyG-7a=_
+[<=~24-Uֹ'ΔM7Dk{nS<~3njn^}&BXݰ"Fy,Mmʚq
\0pрŐ{.3VDz)IFS)D&zeD\5̈́s%6э.1*ØR@&AHaݰq]qĂz=6pk>a
	iF(!Iꆾd8Pr\vS.&ӹ}bhlV;pK69KM.艹.>_H_B脁{Z!!OeZBV^cI5Uq[qx{l},A,2Jٯer^+1iS-eAK1d	SY,UO[FyrӶUcZHsi+yf[IHmdַ~SxPK,  ~  PK    A             4   org/bouncycastle/util/encoders/BufferedEncoder.classSMOQ=ig2 B;2Ji+tÇEt:aʿAKcbAZ_M(9)9aAJϔAI%'JD^p</1L-47}0
Ϯ!x7\۫	F"Cm6TZ5RV##P鼰
^Nõ
ի6,J`n!zx=cyXڳ=e7{CMkJ&f-j[fv7b8]0^5Of4ړ5N+QpEƐ]gy-ҳ>/^o>2%*u|%jV1
	qC$
"*.Ah\E?&HaR)n&0tc@3qKirֹi
ژ }"PD8'7%àxU%:cfGȥ'8'nΗLs숚#dS;C`HSRR~ѮSȄR!9$!2"eHnP!#1NgN`),ܓAaEޞ`߱@	|]vWyW*ȡ]SϦ1)ƣ-Z,U]JiJyQjrQ-:lJt-&~也Nv^wC%PK%  ~  PK    A             5   org/bouncycastle/util/encoders/DecoderException.classu?KA$9)$Nah!Eoe]Yn?ʀ"XPpZbxof~oY
Fxf
ǄHɺ҄aeNz#ΜFEA+}l	(XWJViQe%Ntc~	:	"Weq'WNOy>Xz3͖$'oHlDe)}"tC$3Lk5݀kݘ6 ?xv~h6ЈX	fOPK:w   l  PK    A             ,   org/bouncycastle/util/encoders/Encoder.classuN@ !EEFХC8%:^j< XJd}++(2sa\,IAL=|˜SAv}C>Y]Emъ|Ck.KrpٖkWVnM$EbO,6&2(:^u|
Y2lW϶oO㵉&k<'@ǟ}eOC~PK   V  PK    A             5   org/bouncycastle/util/encoders/EncoderException.classu?KA$9)$NaHB߬˺ݞ"XPp޲;6u	]|cNz#ΜFeA/	QFګ%നuB{U\I$$O_\ŝ\;=bJ4[ƓD%V)Z zHcЙqȓoB0Ůt=vc۬O@F>6k|PKQ   l  PK    A             (   org/bouncycastle/util/encoders/Hex.classUkSV=Kqh&<Jژئ	>-Fr~QmgSfQMv%1v{p~\c̏q	H4#O$%O~Z<djR6W-	VF^u	j6IqhS0.5\5[6JpQ3射Q.`E֫GcS_׵c	JI7szW/Z\M9YkԳI
hF)nYrGh[4$a;n+bn̗T^JTFḠ5̊joHH[Sm;Z
KޠK^ڰzȬvl=QҞ߬])2B2ɘ1+22XϾw8Y{#;wg#ld7*tus&6#n߮~x&uzWDwUcsW
ؓUP1&쑙'*>bsULĐeXwWl` /8ǚ{	|& )H4l6,2xly	}OqGۦV9vX$EXXzU; z`i{sOĒ&V563{Q#yqX#jK9nb+'Dls$(UwCns!'F?UQt⛀-=zdܔ$6LtA%KI_j.,ҿ"O%]Ҿok:ku>뭜mR=G
_~ >RnZg4
uuQS6UGI]u%#nל5NPEy;+N918ޟvZNݝŝܙ9_K)5"[ԛD[kyݼI7tn2b
9"˅wPKT    PK    A             /   org/bouncycastle/util/encoders/HexEncoder.classUMoE~Qힸl\$c{$;$CB> vB]g׳fОn͎g+(_V.!A (9^		@᭞xz9S~t>V} s	Ā&)<֌܊_cw.tk+ժutl*hcd{>:O$F#yhf'3ɰq.E=O(8ﻋhɯaRڂҌE5t5b46[Y~%MZMc T'q#?dɟRHIf{4rB	r].FP7ȯFMƣ*.Ii+5ܫ%ӡ
naLzí&2)9_Q05sy.QFYWb)<~m0U5O񾝬kUH$̽rͦ5T[u)9ڼߌaa%515Dҭ!C?p)0<paa\A.iD:+WNYS_8xH8t0"a'`; }O=o4^p	\LHQ泸h㤜yEM_\Kt'awNYf6+/'
Ôy

==l)iI-Y=4< pOi]Q6[?Wpqv[dHp.&֥Ժ`Z$8_,}BtFȡG0L~ޡ~:̀x^YVO:?U*X*3\lӥ27G&gm9BW3< C>>_WqIK%-',ɽ1{0ۀƺѺYYM"{X}7ֿ)nG	=(r$S#	eћ<GmX_+Zۡp%wz_o<Cqx~Dna3̈́ߒ36[_۷YB5~p\)v]IIqA`&4ugIemJu(1~țg3=yakA	knQxW{{̋$韔KlHrQ,zceB[|>̚Z5
SV|>2$!7ET*m*,U2Z*^
(#2p24R(vhwLq=Vؾ]63䓽)uyCyaj(nJũTa	so^OŴHbJi9uTթ#IIY ѝY#ќL,ħ
&%w$_J)%cw]rS}HmךtIM[n~Pw<õ#?.2#R\=nIb䴷<MhZD&
LUoS+'Wl?v-Lܮxd6eBYW PK?'  
  PK    A             2   org/bouncycastle/util/encoders/HexTranslator.classQo@~w/C?pIT1"1B6IZAJ1_Ȓ0 !C0@xD*{{ aA~}Sa٤%%mϏzq/πe$wؠ,~	Y~*2a|Yպ#xȋ;֓Q'n?W7L:Iz5`h=#/l}+((
(`	xTPe2Pg)${ԁ
raU(2GG7\9"ij-F|]:UTMz֚-ΰv2MT؈M_j"{Ѐ/]R(ĠFҋn&CfjeE)qzLђ6SlJjyK6.U#t65 uSC@E@d`_W*?h@e:1q?knkmUrWjxqcPu%4#\6a}"%	 PKcS!  \  PK    A             /   org/bouncycastle/util/encoders/Translator.class;o>nFf
MOF.h'OO qRRSR<C8=,┓YuCJ,KIKOJM.ad/JO/KLN,.I/-ч^TRWX_t' d0200iV(g`  PKU      PK    A             )   org/bouncycastle/util/encoders/UTF8.classeOGxb` .$0PviBؐ
i$/I:6ŦJ%D84=69pШBǪ9W'z"oߛ]U˰}o;͟ s?	(@\f`
f,Y[`G8kT)WˍIDhX[-q<iss*΍O1}a13a>CŵXØVqә .,8楘
b&d/$G@UT*oKo@Rz;RzmZv\ImTK[Rllly:
5̌U(תjv&[Hb$Nb$"IAO2J2E2ORǡ;ލsp&6q8FӆIB2eveIp_~xZeMJ_63,uA7>G$rKFnr{?@N!wDx3coDxe3@:A<[>|*.rO?DD?B~;xwYѹ=<+<RFFp	/|VQ|}եڒROuvM{pkm<~vK\&FZx9\;TPsk]S|/p%\'rii FpDҁS\=Z֎kKבCpiz"[k?H.)]!Zݩ=6.
)7#N#⃥c=iڨa71mA=%8L`]`VlY`кD>N
!eS)1)k\(Zx"8UQs8/E]5p8m4-nnh(,)1$D/K'k"bW꫊q-G֊VtL+X"L\%8AEIk?R_7n#H&iWOI=\߼4uO{.kb>:h㏑PKh<    PK    A             .   org/bouncycastle/util/encoders/UrlBase64.class[SPiSҠ@@"Jh3rq6Bm:I|L=dϞ= f˃+Jp[@܍
PvOf3@r"|^ϥHII#
++1팑L.-o˖VȖmyN<v24NicŴn閥о^S3=Ev`oئc+UkV˥:ku='ӆ+ p-d+VF!<LjՂɪX-X+nJ]	K8efN_['pQ7
m;afae11\c333Yb/ۥY;H0&`{`eQRr|Ҝ1UʆX6Lブ	A	n	h "$ULH)	PyN㞈aLsq_Yv,rX(Dq`ڋ;?` Y6l-y79%01IN$cU=t_^qu#ǿ!r?o>adFUDtZX8pOP6K[Mp. vzg%=m/ZC
Q.*u9dul5RJ^/#N?9UPM=v҃d`
/A! PKch_    PK    A             5   org/bouncycastle/util/encoders/UrlBase64Encoder.classOMK@}ӤMVų?R"=M$C<Gw#1yol 8%8gB^媞("t^eʳX,$YZUAL2㋢ɓe"ZKJ/ˊG_JȟJDjy<00t2t@=P0C>}ܹ6waİ;8./lip17
^0DpޮPKŤ   ?  PK
      A                org/bouncycastle/util/io/PK    A             4   org/bouncycastle/util/io/BufferingOutputStream.classuS]o`~^Z֍um>tPt+dJ"
[Lt7RXg*Qc%2cx?Spqx_u)$ lFr[;
9^ݴ(DJcmuv5R''j:n"8t;A{[`jxa趫+_V˷ݦQ=x.ÎloQ(z
Mcm߱.X&RP[l,um#ҳ}KgL*Hl]`67<{;%.Q'é*CBDVÈ1(*0"
baAbQd0y1Ȱp!sVb]gubǏ@˛
CiTLѷ!!Kp/d#&BGNii.d_GLYJd'	*E~kQ'	Vk0_O\]nZR>%e&j3&Z'+dKsZqϏ[O+~pr?iAW) S"v-Z$l,fÊp]	b}
}=-<ߖXФnON:Zo*+̐
*d}/PKr9i  3  PK    A             ,   org/bouncycastle/util/io/LimitedBuffer.classmPN@8Iݖ@KT*@S$$J #g*G/HE*G!f'PKy{oGz,{JӮ2YW*%DӮ@5ʲhvjtrO#%мFaՑdt%dhtMJT&W	iv'q4VC*Z ϻ` 32948d-#⅋.AiaRj/9*塆U>԰V
XO+|E
m2;+g"փZ*[7ПR!dd_ذ;jY?&Z<
ΚV/[녿ؾ9_[bv	N✱Q\BFNug7?1M{⚹13dPKG    PK    A             1   org/bouncycastle/util/io/SimpleOutputStream.classuNN0=N]L
vCl eaD Cb
G3(mh%uu\`Cl$'Y:{Tv *iWmn]*f㣇BVV`8ێ[[vbkO	M}^,ZU&jZiJX@bP=8sm:$w`MρDp/.gPH`=m8?g3tr<ڡ
PKޕ   f  PK    A             6   org/bouncycastle/util/io/StreamOverflowException.class;o>.F6̼;FĲD|}O׊Ԃ<FtҼ⒜TҒ\Ԣrv&vfFQ
9y y֚a<@XXSRX\`C6 MK{;F
 PK o      PK    A             &   org/bouncycastle/util/io/Streams.classT]WUݗM	CVaB*ZDQAȃ!kd*?7/u-kA
Ņ⹓I4蒇{{?y`dP_0fAD7tR``[e˹_6ҟg2˟}j!|pY۶+H:_fXeƮ*cj5c/_wugͩ`/[0U)wfi>7mR"u,8Jت˅qϱDݱ섫a{th?ZUTm^ov,, dh"]Lݶbva[E1m;f!ʚY)r~Bn
sa^}./)9$y{-oʹYvv{ ͫONy\r^tų)OrF
l-ѽ~~*Q1EEp𩘐(fUL"!!s*

oe>i$ p-q=
!B^
/hdoVrڿcY5ƖmMB^'gJ{:0髟"ӏcȿ At8 'rzL=;>'/-=\#OүQhP\#VRxr>z\Kɍ$Go,hUI'qnS.@1\]2or}\&|'n#d2xpڽP@)>O#OPx+GH
b?|ur4Z43]Go[n{5xk?ŸSz,;/7I{Hύ5ߝ$?8MCaǈ߉S#B){ț},G9D<Āg_'Sn}8t6s?#Մ/PK&ݮ  6  PK    A             -   org/bouncycastle/util/io/TeeInputStream.classuR]OP=mօvEwAn[5F$>h|hO4Zn׏b/A 1δ䞙;sܙ{ Pfu$c#[sP!y;QeTQRAC0eQ
BevKoF,Jh2Qc\F{S8tGY3 iQH0P`^[qSnXKJjzP븆e:
ftqLf6CG[5Xcyfӓh{(0W~
k4?%+
qХ]5
;,9ǆ}3'x"0 Oa#ӂqD%ZMJYxj;5"G,O(&]ea~,,P`R{tZqEY>U9Vjn_Q1UԢrFe?sh1Dfׂ?PK
I    PK    A             .   org/bouncycastle/util/io/TeeOutputStream.classuNP
Vx)xI
4w$&,4l\!VcHM\ >q$j=9s`qP&[8?dWɛ2ܷ{@W],+'nrifuصVX;\n>u;XfםYRՕIC=oRR(D0laY
KBCEeA%΢0K>
,EE%e{IcJOJ\HNݨ<:t3W!g-Te* [Q%/J7h+JHCUJkQꦇXe/DC:EBA!V!$C*#PKik    PK
      A                org/bouncycastle/util/io/pem/PK    A             9   org/bouncycastle/util/io/pem/PemGenerationException.classuJ@Ϙ&OV5Q*n ((O%3%V
۱3|.>:с6
MI^|u>٪#;3C$9scsJVZP`ԟ,)ueԨ>?)PKidKKt`b$MDX
aB0@g_]vޭlkO/@䡟<@sw<
3ڏ>PK{     PK    A             ,   org/bouncycastle/util/io/pem/PemHeader.classQKkQng7iMVMmFpQA

YtMzIN&5)W7Y(\n,D<:,|3[3C-w8L!_D4dwd)}{$zdejhT"C@ q'x:N2bA'hGqe[H$^D6ؗHq9`(շwh1,Qڔf{6l,ؘW"f
lX(b9C+9qY+9]Uv~-wE+XO}55K$[Az(1*>:=SC܏(Oa>3:*=L%WbXVVqJ4kXgwА.RrLcHB?Pp{JM[T| 2	OYB)fe3=L_PK_  U  PK    A             ,   org/bouncycastle/util/io/pem/PemObject.classRmoP~
lwʦ[)`훋#`\2b)]JKJ1|#M(9Њ$IϹyvO {S˯遂}u<'|`y?Z/'o/
IߑP#z湴2蓜6a4]eάZ^|:6ŬOA 
Ohn}%{`:fxж+7{kig>`/l/*nƼ0*tdmc\#\H\	dd:)1	ˋ}==kf18$Y|iM<>W[u\װ46)(lJ6kbs=6*rQgS@Y%Lm~g19((R"WGrE{ꁼ ]
>]IQjukJfbS
F8nFkKWT>FZLRyڈ!ND.tJcU 2I~Au* PKN[    PK    A             5   org/bouncycastle/util/io/pem/PemObjectGenerator.class;o>.FԼԢĒTFĲDļt}FtҼ⒜TҒ|\\w<׊A.PEL,Z>fdY @cbN H10  PKk      PK    A             2   org/bouncycastle/util/io/pem/PemObjectParser.class;o>.FĲD|}O׊Ԃ<FhNb^RVjr	#N~Q~R~i^rerbqIN~iIfHgAj~@j.Da@bQqj#wcg`dg`bg`fd!kMt7X32pX ,,@fe`  PK=^      PK    A             ,   org/bouncycastle/util/io/pem/PemReader.classUSU-$eYZL41W TmkZ
i
iC@Ҵ*]%]vM_֪P~u&TKnВ=ss9{
(VZAWNxt;j_kC(ǡ^{"ѸC-Eh/t'Ռrpu7Nې\	ͱH`hh8N0qh`024#d尝q%iyfX5X\):KfvWJI)H4G3$qɜhZ
%,d ֚btZ194bX3g2=0A%̘XWhqĄb(!EN1?J@d:dqXkaU6͔͒/ÖҥHeT!"Ρˌi)Sp9+C!2a2[ 	JN1唢rPAS,KU4rj)8Fc.9MKU:ʔaתC9l!`A!f:k08Lp[R5,T`c2iɆU37n&XzNˠ7){)<ǣG? v<<.]<EtvH+
i]"h)_ktoT_dS1[ 6:FV!H4ҹ*}|D]G{X"+{<XuvDF!rnsdO*/!	Mp?$	P'a3ְ݈xLB{AƝ2x28̞H'HG%͠A3O0현;qq	 )$l"x1k bRDTaG	bcp48$gE1}xND/8~</)xF ),kq	_ʺݥYd5Gx#DߦaKN藳#tVv"A%_G{SjdIu;ܤ_?8tIb"OZu
~wu͡f&&<މxkOyl`nN	Pnx[]@(<7tagr>u;%ǳ,lK;8@sNd
;)]F9Ս.J4
iw
"#,/
Ky25y|8f{xZߞæK8s	,
{7y$<{ U9QqOD"iAAL=Ne|k?\<D*5?^
KLWKkCUTW!X!+ZOry~_3PK|  
  PK    A             ,   org/bouncycastle/util/io/pem/PemWriter.classTsU!ٖC41
%hU6Ml6k
|G_:⌤L'q?DG&-;|w= I J t]'֗q%xc})	lI?[&X&Ô/BM'2^	/u nfr+tnb4g(Y0ݹ<,TBB$LQlZK0m9-H
99L9Vݞo
72dQgrA
"tٲ(JUE횖+T}~^TEbzZTFAX^1%tVZ!,%n$yJuNnF2k57YhniaiL׳DIΎmF+RrR7Kf­
:vZK86 ycKD=6ED&KpNVvtu$(M;ۢ9nK>;WٔYSEJub˸Ѩ2gdqPƳ22qH2 ŲeoX_vc>\aC{*[f~н)DJd{@X|~Vzjޛ!ء`zS_ʰ'C@QlSAM(㴂ǑQa21a^`Y{U
v61ׂt#acЃx	Z)\bo0ǫWJA*p,C B80!A;漌llj7v紭Nj֌6g짒4u7v@m:"yHgM$C#~PPã}wp.ޜ]j;X\F@%~{ʔ1a:֨qdAR	䚅%GS_kT&̫?`10=	_⌻~_B.qHh񮄟166P
dyl^8kE%~C^DѼ58@w(73$Lr
M<Wm꽥[jS-k,5qGa>!ETiF/٩]TH|{F٫_7WƉ8iy)O,&yA!K߳Oh[ԑ _	#V`vw4`AXAƹ269?E<PKF-A    PK
      A                org/bouncycastle/util/test/PK    A             =   org/bouncycastle/util/test/FixedSecureRandom$BigInteger.classJ@VmMVJ-BqpeMW1B$N H},W-.| J-ts8s> \@2}D MP7&dazKG9F#Q,N9Θ<adQnp=RZwe	}t\m0pXJ\lrgGe2d(2Tt^7׊\X4	Yp砛ƺPGEC
U
Tlc_*hH{@51#sEK8ϚG
$둸P9?
̲o*v.`0%J>S"RQJGCEpPK]P  a  PK    A             7   org/bouncycastle/util/test/FixedSecureRandom$Data.classM
@T۱*xPDBEp)LAJp<8\@
u$2T~9d&"CDDɆ":2a/FyL%2PP|φ+))gBk-pKt>j^Ep߆C:= PK-u   3  PK    A             @   org/bouncycastle/util/test/FixedSecureRandom$DummyProvider.classOK@ڴ15B="œ&F"d	+M1˓Go3jj`tGW/O,UVZǬ `nCZ\=͋>䕈(,eh%yJ%+%R>?[eYBU%4	
dEpZc:	'QN%+ahH
Nia'$/<Qf6j`?PK܅    PK    A             @   org/bouncycastle/util/test/FixedSecureRandom$RandomChecker.classRmOA~/=)R_jEi$w(?Dc{nKz??e/L;3>~_ lactː7.3u"}97[fH7r<xG	C^*H_1wz\vN+gXb
@%NG3~HCL*auǪ'
zE;;lP`(_{7OQxP&Uo."
2P`X~bGE6jX{:PxўjmO3	+iv-,`B,RLܵ0U},専{zo6&<4Qyk<"jx!/р2[oE}.1%P%k~w3<OONcpIq}BTkG_l.b5z
:?PK7i  %  PK    A             9   org/bouncycastle/util/test/FixedSecureRandom$Source.classAKQϝQѩ}LxZFEF`"~Tt@{8 xxDhW#[-!ZM\MnNRۍla쪍ZښW}(Yա(U`cM]B=nc,]]NJ$8D#CJAFS6u9\MK={ŕ8Syd$bD®Hq>yPKȾlQ   +  PK    A             2   org/bouncycastle/util/test/FixedSecureRandom.classVs%βLAB-H`
%ؑlZ->@>)ɑB:m)inڒ2'i݈N_føPϾ<ϳǇ+ 8I.#E>L<cYsLB,&K=tY:u *bBkv/Z`wpH![RM-W]uMHGc	M׌ň}/FFBj}hIz~<̸Vcɸ*mZ<j\Mi3:lhIbυx`*c1j khfsZNUj,V#$gʆ+{nd6SɱB;б.h8XLdA:NX2eJ&cI:ZBJ@cLmyVmY-cOն/eDFV5LƒV1-Wu5-jTU^
[AYӕtRSF>
pkɤdcjܴ-25MiKzIZ2П7T3둬Q#3\LMǔ&d=%j\NY:a,hxM4&SiF>rT]?]ȼYpR[gibT]L8[Mdgf䬦p9]dYLSE[DNDt8(␈nEqLq_qBD 
ፚ=\頑Kj9u{y46l <WǳT}	D58w6X>hJ}D]
4%!$v2; 0 u:'\804mu_aW&κ1wޅs_(.0L2S1"CP8	eCډS08FމadNWKNo!dx!DQ1ֿ^@Re#Oijs'R#Qzu4cԘ<PG)9@/8'_Iwd
fR*&:\i4v3OV-e#-kٲuwM\/ˤ؈>-|Hv[_m9{U	k5w%U$9#/nW4)CyD'e|o'^yv-Vk=83|ow'jjŮt;<Qi89?ZwRKxsa_X=<c_euFXYߖ/"7lSTF#eI:Iןici'-ḷQ٬S<|jc=yXz2޾/OGTvw¯q+D?.	3D]kwv"A>Cz*Dh}UBkY7ȎUTS:veIug	RgN;ȅ۶0ѳECd;w؎6{}wcŹ˜Tܱ.nRrgn6z}$+l{m]a2KWV j3];.N
@/nS~tcg$	c^#Y;]V]c{9N&ۉ[J
ӕl~WPJ-ow%^+9^5M5
nivǶZJ1b[ n	O@E}
'{7Ufl:pf29w"{qm	WarW}nr^"R"DF4JoQ":NPKq`  C  PK    A             .   org/bouncycastle/util/test/NumberParsing.classJ@֘T[m6Apg T$jjd*4 pęD(j]8Od
66AP)	K]!q*&ƨ{>k+j״5Y@3Y}plÿ:\*AӲ84mf۶8u,8AYGBɽQÞFi
#
TQ5w$M?x`r 7: :ґAN)iLkü0Y9͉;)S&H9u.im-L	T񬉷lȠb_0|q}t1SOX5,=qNu14B_If\~$PK-\k  |  PK    A             B   org/bouncycastle/util/test/SimpleTest$TestExceptionOperation.classM
@5EI8/!w5?cc.<;`6F8>%MsM~!%tB⽞J'D$lmz*9HXVCdhֲ\)attB>($ =<b"PK>     PK    A             +   org/bouncycastle/util/test/SimpleTest.classWwWi8vdˉc(4!BY.qcb;N䱣D[QR

)hf1ഠ
@Y	{gFʊN|ﾻ{{ ܉;rՉ6'v8Ӊv'v9^H_tX [+jShwѣ)s;et4XYt?S4&mT\%w}_rzΟbZ.7O4Nf/32z<ꡝ8rNՙR:V3-5#fy5AfJs$֘E8IEc9MH9)D{SNF15IQ-OPЦ3jn8MJqxjF82Tn0)O'QVt%+ƳyrrV}P펧g)}Ljj܄Rleڼ9}V,O	ر՟'fl|Nגd	Jkpz<='ZiNiRwTڟ,ҕΔ,;ٹ|*6SszB3e<w_u1LXdHPF̋]]CL-4WZ,mK	%|66-۔1GϪ1[R62ŗ!G}ʕMg^^.2HH8 [%CA	pwIx	$p^	HxP?$`gߖ@Ц+@\s
N61ٍ'*7ʶ*LǴ3}cR5=Ćҽ$I{Qnlo`ed_`..
U״R-C[[ԑLHYT
T*U;nիr̓֕ک9oѮcILѪ>&cnݫ:SPЇ+ d^0.<
ޏ(x+P
:pZ nŌ}Ch
e0(Yw mH+g2xQp܋,+y{pQQ=x.aWde	gq,cy	|O2|2>>-$e0'-KO˘w.3|2Nn'>$>4SUHWU.M%RZim4>jfaV}=qhzK'mU+D@_D4p,ڱH+xyA!
x
&t{PMZRk鸄톪i^1<C$
elz:/"@vR"g-p?Ͱl,,֎5ZmYvvZ<PӮհkpR\NZUVseI:8IHYְ3`MZ7܀xJfF8b~f2<`'t.`B!1e[
.3a֞AG0;,`uE<f%.4)K&+Nih=W~axxΕYzZ6Znv`_W,G>㖙oI.z^

Em;ANtXP]
^U(yKTW
u9+6ѫg_FCT©A	#t{g#kt\&w3+-t* `8\GIP>|מhM=sixK0A}~:}=b?
Dc.Kl(#=kū!OCQ~/,@	yH"CŊک$R<TYSW"t6R!u/~pA/d	TT;$x^'ļu[Oqry~Q/.bG?4?y!Q?W
ea٨<<:ʹ]I	'Ο2ֱ,	1''7PK>  Y  PK    A             1   org/bouncycastle/util/test/SimpleTestResult.classTRA=	1r	*;AF@xY1Z(A>xT~e7;)"nAJS3ݧOLO_ :4FS:B[rdz4&ĎK3kesZׇ@θ@ØZ3R.]JL/M,O$I4̥) Rd9rr9IΓ≴m3#txmMdD)"˒%мa1D7W)Y&KY+-Tڗ	Y0Y)ו/f}]ʴKFKNRwܑMd7LrY%:><c%vJwkWZwnkipAC`ZW[sݒo	{{5WTWrga~<{>c>UqQ3E޻ٚky\ؿy<<#."h4t1`@byM5p#n7 z1@0L2LpM0<d>~M=@>[.nɞ uFv'{*RƣH6f"ۘ1"#'12y݈KwCxŷ2G!)Š`;JoN9Jt>T߱e,V(:QYN`AmhKZHTpKIIO+=u>#\*Oұ??V>MVGb
Uq#<uD@mK_0PKtz
    PK    A             %   org/bouncycastle/util/test/Test.class;o>NFTFĲDļt}FtҼ⒜TҒ ^Z_ 0'(3/ݚA(LҜk6F6V`bad  Y8@B PK4qɍ      PK    A             4   org/bouncycastle/util/test/TestFailedException.class?K@k,L"rx!ʚ[ʺD[)(%yof~p	S^٦L+߿5F{*=o;{X{vu ׫Jm(JӰe5ۆq.
!SBE!/R@1&P!ŁLd-R퉏DF/@(W5~ PK &u   z  PK    A             5   org/bouncycastle/util/test/TestRandomBigInteger.class_KAϘ:i2؇#H!z
ħImCgawX=mPь
.Aù3;s7 (Dʍvm`<c[`yW³-䧮ˆ;v>fͶBrEǵg :diG3#'3w3p]Op?9pץ1>10k b053@	2|zLXfSz?oVw5rWQq̀h	iIƒ^)B*<(hYX

1\wj0ܭq#c	ދJjֱFw+Gqh"5!*jwïHf^h`UXBfGnjM週&(&{>6ҔjPw) ۈ}PKi  #  PK    A             /   org/bouncycastle/util/test/TestRandomData.classMK@ߵiצÏZ
A"VD'#BiMH6R?%N"E;;>3;C3v놡p+_I7$V
0Q+bH;~`K>G}!{EZ>sDJ(/g؟F}&`8q$r5LV081Pmvă#_
&G~MRR3`rXHEEMX6QMºTJF@ı駲4!d)jSw7X+JgTF9#TC
T~ԫdˤ*Qjעs
/PKo
7  S  PK    A             B   org/bouncycastle/util/test/TestRandomEntropySourceProvider$1.classSQOA
=ZN{(zIMj$ /MYr->|DGg$^]vvvxĐj̾TP]gvm0&0O
]ї*Pk]m6-{Ҩt0! qaA-{"6"\m"I  :$)TBC%(ZoGR93#5C=Up/xG$<h`pH$u7jzr
<4"	IȄȌGRqŰv~rE
5F{%=a6;%K..LZevm!Ƴ`vzOж3Y'f!=xX.[.bwjeXsFڣ	*m8I=-%WIGߊTt
W$kp|N]M
R}AqZaZ-t.eyڙֿ?fDgX$2!}$?g:cW4N8̝N[XA_]4+}_PK$9*  e  PK    A             @   org/bouncycastle/util/test/TestRandomEntropySourceProvider.classRJ#A=emF3j|e&7eV* *H[)BK
U!|%ފY@Z9ouۿ Đ)Ww#[JVg9mHK:6.Q0RZ$Ӕʝ'	o%ΥBduAa]&?%"%0ݶӼmHrFceeڐ43Rǥ-u̓+'D>`X{v\.?ǿ{
·j~a#1BIBctW7$CTSJVb(tSh.,3TgJYq+r'=`9.`7a !z(^{Hn0SQ̽^|$xPK    PK    A             +   org/bouncycastle/util/test/TestResult.classU;0D$~'@J*7t鐐H*:2!xjC!([hfVO| V0qgWNTfNJeiY-΂kє|[JҴ%/kM
KZqG,ܯN!ڪ)#8p.eX5Qh<	B-േGuPKcOy      PK    A             8   org/bouncycastle/util/test/UncloseableOutputStream.classuP]K0=quݺo77oP0Pħ#5MY8Pwv(̄ܛs|~؃A etۍo3yHqRV幜Ӂ%|O0i/H^Ȁ#{:L8K%s;yX2NyK6jvE0t"G
%N$w$
󯷔>`udtdu:rE6	jb&K\*C0Q4	
8(b`Q5G@;d!vpJ*nWKjvgͧDQؔ$zxC@&h~4ʇRŚꧩk?i4_И6VGS5PKu(Q    PK
      A                org/bouncycastle/x509/PK    A             6   org/bouncycastle/x509/AttributeCertificateHolder.classXx[%ϱıeɎ3B$Mba-DFM-{(mq[6 %@Kh.ݻi =gIFd;=sS/>|bs)l^;uq#s_yI^GSAt@I}h4O@<hk6{cat³'zcZ6
<CX;"р"
6y.ӃzXk:qm@{niCp`bPxT^!*
@7<)ߧG3Og5Za'gأiէG|!rzd`E&xz"6gե&a3&{'3{аN0Q?cL4KrnGHL,Le
鑈#	ID#5]BS3k7?dF`wtD`S
+	=g_*SgbY~{5_^b Vì4=AzwwϸWCY#M3ff'/nzǨoVC(Og?Ij'^4ۀ wBeyVB
x
}X_XbXCnfcQ=&v9(ӳ:O+b>m-#hQ-l2Z=/:w>п ˈ6 bF@oe~Zo08]9f^AxGGȻUYTt4g}j*Z+<4G`q!mf.)^=}8GUHdE.8}۲&D)mbkf:(:
vtB[Q
I3U0,"Q.JTH\ qEKlDbDDf-[%^"MbDDĥI蕸\
]}%HTJWI\-q
e{\&]\/uY~	I7l5˯1TIF<]~upIޙ	}F4Ri5v*\
M9Yʮd&2y>f,Q:]yIڂ&/ț]IS,:wF
˲=|Źz./&24[M6Ӯ̢}^3ȬSX:O
0s5#fdSKiJ[Een.gov˞1]&-E!|RP]"J{6DCQ5`Km'4ײsd4)nC46u׀ˋX[8;r^xᘵ*6vKPZ2Tb1CZ28ǰ RE%JUkT2*1b(Tqex
ޠoRх7淩XwWT»T,ĻU41=*^mUwhU`(T,!p7a0ý*GX<Tǹ	OXUaJ|VQPc<@
4V0
xR0N0<W#H2|E~z_R`r (⤂Vp
2SO+	CxFwA3<`g[eÏ~2
n7~k`6~ßfWc
Esg"Ws_2gW/؏d9F`xó=atcak~+_+b yic{mF	|x8Jp@KWOKp%wX '8,(Q%q`!t'򸘟Dx%!J!!fR*y} nfsD[7$<Eج;ʹL#=*em1JѰD∤Y:,:詝/<]	Ԣ]ҶZ:+e%MEF+oFolH"2ؚ$n>-ɑebmBHE<Y<4.q=bi,zq4.0U2mLenkS4.ıL0xcf	B5KY˭mNcFJTY[I^R%.*m'FGkQEރIA	Q .%jw\9
}jyw'llōpRhK*#wҘ$	gۺMlu/m7XߒDp'E%f$"<zy儸Py׈KЙn/p UnzE% uj+KroY1G17F8kmSxYzߪ`{76,or44*]V7!<g!QWD,_{Ֆhm\,ɖ'6]S6z$\"G.2:#؂S%u:6bg܏]pئܧp/e=mJW\؎B.s1B'aMIR`h ]/]q\,Ms6NWo4R	q5rTjIb$ۦ8膾9o.2v<if=(;˿^F)p,ۍ<B3$+T;0_+ݮx#<bDXzU٩ėT6STj4YŻ:[.205XPKX
    PK    A             6   org/bouncycastle/x509/AttributeCertificateIssuer.classViWg~&/cqjbV[Q@P!X*m#{b&]h).k{$sN=su H1	NOU)Jpy:yhQc=tG`Lw[:iQcnJܝQOaUG8v&hTM1-6To
ZRE^NKN+ֿ`"٫u-e	9%9I9(	ݚQ-ijhM!	2m7ƣ.ԖҢ)2x4*JkI	3rs6&annCuu.	,H=KYO0)Ks<d[x'm3A9ܣvG4QS{XZ=
o'M-ǢZ'fNLcl57^)R%a(qdB۴MK@ؔKX@anHz,XLa=EN1kmccԴES@W5=D9jPD5WYg#OOjZ7'&W7Sk
5Qjfy
Aa0Gي\=fzTae6[Sb"n6܊ICQL-Y2	dw'd$δ1mf\)	HLȀ&bY`2+V
)J`O/X+X'^.6ljk\Uw1VmnՁ	mDB{3߿{z]ғ-ʙ{3kN$>tR==~=iY骂Jǈ+l<WXLe|r<MǤ&&/+}!M07鳕I7x@^U0=.gဂ2)X%,a!T0.Y)b;XS ,F*t(C
Ge!J<^dUQt)(g!)<fѣ`tqa^JЊ^8">р~OxZFBH؎$2v	MɸϰxCFqϲxUF3xSFϳxIFNx+2vVY<Excq؁Y@;Ii}I/0s>fj.:< <gq)͉CiUIgx3xgq<ǰa2a3N2.-d.o5UE
S(ZGv__d%|`Ξ~vnx{'e xv-8Dj+_6"FW4+\qZA00.H'|<sDY{ϖ2xq4@`?K#89*]fȯ(B&f	lhl-N
@p5@}fgb9ȷx5l?,;Ɂ~ہmW=Λ(a٠6$432UkܕnUL	/n%54wM!һ5TH+?BH7{"\Oq_dE>{lG#ehmt]k%|p
n*so3	?a_S| *4}& \p9hlO߯tflvD̓@"2\QB
-$\Gڲ}D;i\֬뭦~WRbNf.̑5ѿH&ڢ'kjݡsxH0~LLH PKJ    PK    A             5   org/bouncycastle/x509/CertPathReviewerException.classS[OAl;ЖK)E..XPl^
DPV]rȻDMzf)P
q79g;3|.0tоb=t<G>b`E [r!Qrt9mIQ'(E^Ul3Dc?ڴLjfuErƺ¶-6{- Uؐs~ë[P3ZoY+`
ua7GJy'6.~P3Wc[u
әAsDZc*m[Qmdݾ7T-ThujHp$99z8z98Rz2 OSSp*WpYuVDX_Vm[E肖DI%сHZ)3ޅL(3G7PfSq2:]_ϥ7Ϭ%%Y**B/+#SdghӺ|(`}
cQб&j3
m"zi]-H/pH]2ZJ1Ͱr+%*12UCIE9F882iJ֔NRЩ
ЉO//*z7A>=N)1u<5><0x>PKL
^    PK    A             9   org/bouncycastle/x509/CertPathReviewerMessages.properties][oܸ~& '=Myq2'Nf"i[#xO/EK dȯUEX,ReESw}.ؗd}2\sxtO>ےݱ?VOXkWd_zw%_g
# r;F]>/nSt/w^}ڦ`]Wkۦaݺ鳲+.˾gob|K]vѷ0fjgnl6לnyUy8РPT;dV#NAkإPܰ󠭣cQ#uϚ+(9EU_ǄmSԫQZ@APIOPf.tX]`1K7XQ0_,Z!Ś6ybܦԳ) xt6A:j"IQ벻uw&e d#y8L&ƭlQcCY˘j1|H-wC0N 
	
ޑQ-Jt&@Q!T͸)4BV`m9"DoJ
:7o0R5a.x'q i~HSf\|O8>
>A+Ձ|˲;0޴ʙ2JO͔f°	&T߭/}W=k/o%tά	37/8(.#V'Hgf3Q h>*JEۼRqVkN=Ts6rWTWxbXj5VlWmLXF7hM6[M<pWe~FF;^DK\/I ¹	̍Uۼ*A!	Z:0!,_je	>/,,?1ȱF:*v/>78`/RA.{|CJca!^bMo *k૶WE=_؅O]v,}>t>$
SB{]4<iW^#:uKFľ)iFQӇsÁ-{Pi3錱Y?]MT!kI2 0
'5]jAGt8[S8GeޟKܴJ3 +L;b>fK^*PLwM\aT`2ӚaiU@.P~=l=Oh{P ~5W<՛H.vFSh}h@LS%2[B~c5ToW&#;̕CI#ʥBrxk,Ƽħ4Lq`$RNk-6l|z7/2F~
Pʓq6Mwv7guưP0ŸȗC%8@uXxƚSh3
7!ɣے}ɇ쟮6-~fW
zm9
0z*^/&Eyu
+5XI"j7{RC*E
t nwU-c}x'ݳ-[Ӭk=Q/FCu8EmY0aD4&.fWnqIMm@JVNȂVe-}N)-EʂTmRV@z`R=6X鞠v[Ϻ1ݷAK@,
MO\bYd8ϰF3#|O
]1E9Χ('rC}6{vΚ{ZT9y3>,lg'"`8^N/eo~,#OFs6	WS2Dm׫^r9 It?W0`yy#$?|9%{ٺA 柠i?䴪Xށ\wri @C A-5<|oǺ3OmyW}%=t;
)pKVVκ+yfQOKa`_ˁG(ribT3>xe_~ya8{y
u囥XzpV$eʆpcdO+쓻rmlEa^W̬*9]\uW+y[B{}AŎrĿM::*cSQ[VS4bQGD((ZKZI356'5ǬgMd:465$bѡ+nxE0:MH*TVU}YT&(u"
*GI$чQM:#Ύ,*MSy?rUEu:eGFy2W~$W<x |4[F)0af!lHz¥YÜWMҕ	m{ 40ҙ2\|6lyÈᅑ ~
ޓ-mk1K
r:D\
X$̄1rADL\4 B9imo<{.٢.!ϬYz AH]YؐO"O
"U'x`.Cc@}"`D>pRN#tC0	P	Ruyf_R!ct3aĄ6| Eoe]~Y1EϗoC(4V!eK %#t0WN,:F@f	ȈnjoN3V?W" ɱp\Mni!"K<ڱ6 H&	A>a9:a0hm#(Mrlmmc>.o_I^,\ r/E4 |=~N}|/heCEj=|Z%E8s=4J|_܁A|\߱WƘj`ȹ7i&Gt
/1:Yy.*8qvِ~
G0j9)KbiN(-lTc[͆ᕽCD;hx	㫈G[R4;b+szNaP&,ѕO{OE-5:BVxrNhBaFM_ˊg#"|wUh a:llq앭C͸^auLPd@,7dO1?AqZӛdu>G	IEܙx>Lpusq-nFrU0P/[&"&.xXnHG$l3㗼ǢwO4CnN@6a+KQ|̘4s-q? C1-s>w$D)'H-e|Ő{3.aL

NO垾BpRx땚| pL$Kûbث<&ņZ ߍ́
NTS*"nŌo0HZCr<Xa6U6옰V2% Us9Pg#x5^!u
oEx
Eo{miC
MpVpĿe׷%^''[>\|AUY()+a0_ИjEm3zJ̆>2jG)tI|3cB원9vLrQi39o`?(9t LLo"_(F669lmkiK՞5k8m+7n1i- ]8Ε-m>{A#B[wygB-+vF0

QQYLgZȍcMMB7-;,/q%9CfP%9li(%·e=^{lO2a۝H`/!6gFtY"y &S2d!qVՇ<"Le+ғ4
`sf)'dc
f1T:ǲ5Lveu
ƼK].1$g2aTże+ ޒ^Xt+T>Om$!ko˂)LϵXn14M2R[S'Bv-0
a57ɮX@kR:@F_ds;ĕ'XH;-i#xy:z8G7%6
	' \gBzZGxKɞz*FIA~tԪu߉[8𶁁r4
rZχ`qKAeߕcHa&.IG}aDf㒠SmU$c܂>LPٮfUиwO
6=1a%"MDy:=#rڒw,)8k"RҸwBtM}2!5eHps]ݫUS?n BtU\[و]L ^*<>b
'Lħ,#xV|pĤhF7e7\#Zш7%,rJ(U${Bn+t;O -"|a)WYܿ6֢]9@i	l1LGߋl
7
}kbTHw̌?o ufD&%fi-Xt?]Dab4P4vj9f(/C/&pHI'1ADO'`i/}>>cF,!>TEhA
8HQs=Ϡ_*p<QDTmA Z	l<^}dy/#jAS(=+ilHhxz7DVu
JbzS
X|ΣSFQ;8Xҏ(6L kF8mZs|p_=l'Vݭ\v=YfDq@M7JǶh
CQ}MV[}k}uh'm:N!tTDoUhVJ}bE*1m"aAug2mF=%ڳ+GbVhQZWIdݹN/JTuR/m d)/9r6%V/4Z
^`֋eT񣘠TȎdNVrn(2kk2Q{=\M}3~CS%Oe N?wvvr(tbQ̝TKKS?s{fF_QWߋw;x&w_*u'?6*ؗM
,Y.M>T#5uNܸ-;	x$u2<Q ?
2iX
0{ѡٳG_=9yc6KD0;Rfh&|OiXswGA|٬K^M+"%~?իW?z\_" {U!u '>U``,W-Ծkb/tU͟
IKU~7xmho2*sdՂjM'ig%kG6o9~;#f)IXp`KP(;`G'w	c>ClpD|?V*/2_RN
Z"
U	Y7EɏZ7BF2G,K5*U~7fG].j=ޝtZ+YǙ$1[yɎ7*E%uSUTf1M퇘Qx*pe4"qrPF,n_7$2 grde;7252VmDW%p zN
2*dJf ƿch;c-mYphe٩/zPe~uUBƕ&9L?Ӄnb-,x|J(c^jD)!<hٲeocA}࿇Ffhs^\=̆-%	9Fs"]Q>-uZ`yO: PK7Kq  t  PK    A             <   org/bouncycastle/x509/CertPathReviewerMessages_de.properties]_s6ק@/vm<LFvVGV,KgCd֟ap
 Ag8ce+F<zͳT梘`Üo#xE6Qbd|71OO8O8e1Hf-FE/
!--$~G]u$`(NWhuDqKٜKW	Yu9vO,NYl:s`OX*2H~QV;=_% $9H^ʶ\G $4r3YKw S6GOnbkvs%)',4$``'ŢP;!*I2)yh$a8oW ;LהU̠D(Hv0.$؇U0Z,.68l ^x6e2	wKJaH|uul1|ŻMVm`ir:Fʫ;ԖhQLuƀS!<,5U'.BVj.vW TB.{T 3Ba~c!ihi8Pt05!hRG}7lçbλ> Av7Fcz
zg̟ȟ#
;X/t%Ztlz<"̘]E3W︈ȡREMv>ֱZ.B9@Qw[&k~6Ya%P3FtXg(+/&H|:PȽu;#`"QDA[@zί+|}˒0Mƫ42m	<i({sL%5}l5Fz[BNxzLt}AC-X%zT-#2Z$AzeԳ^QSPw_<];j,=aipHcqf:ݛƣbK,~1ISNsn0YV
3Fu
q\e}xmճJ~Z{TZz^#CY%"X%5XO(RQ/|ʷF/V
>FO@ME\Ne`'yVW(Q /˞>tY쓋A`.*j>Wo){bJsld.^N1"NSdbTsZtƯĕ0b! 8Ўn6lӖN5hkƳpV2գR9˖keH䨝+{#ctWW/0fRԌ9h1[Nhk(Y|O>u~D4%󾡜ъt|8$Gڍ6FPc0{ƶ{s''Q_8Q>`XZ[L8N_
l?HδZPɦu>.EܛX^/@)|&҉j4EdY+;"?Q|W
nC;"R+gYfV(n
_JJXZ<]+P+ZQ2)[f c6+rj	
Hk1|!8K0W0T-s\X8tn %&)E-`#KyXqE֭wᖒ\f&ta1v~,h,ɷ4?]v9[67˰:3Yx	fQ+P	lBy!wp~vU$Y#)}Ҭ[ /YbQ91FL%N)yY\մXtJ=Dpv{ifW/P^@?q\:-RyTˈd)NtBΓ$?]7$
/qjt7!kݫػA2=Bz|krѸ*u;<T
Q.Ӧ&!i@[>leopthJfB	h*LD'%LD 0Ț	oE(h7EӪʛLpMagZ\2BTB{ʊ'`?Yf0eWƔl0OϵOWYe$5z^db]|b+8*Iͮ-!ZyDN4赢`8dOV7~T1^߾?a.6
D*b+ *+h$D(u-IA	!|( 7e6F1_k2JKPľnXyTឣqVFXl8\6è.VjW4oUSW7' SK͸F/ЀMWI,WF.$<wZnV ^hm!@^&	$nkq5E>vW뺘>XB!]Qlqx썆5H/$dlq
hƦ5*}۳8xl__ʅ]9aYm[V)@]ݛn&̀k-h8 0FɃNs'
Fm@^3NysU/$eU"Kheׂ
 젤vIF":SF!FeùS(>Ӝ5_N3C_`m:n9,.#It:0RI
Bm`گnnN%ѵl${li3N4+kaT[w	{נܹ+}.:Tj<
\ʋiכC}w4xgd{9pvCoǏ)d4}$ļ;(w⪇rIMiE;CŚrڄ+87y۶,fHCx
Xo!ko`nF
7F 9(V܂U3e.8QFivL B

M5D[bXB;ahuH7jmjH,Gu-1n1蔪jbEFshiZK+t-ɼ CH;2XkxmgT6nxn4KIm8waSB'*,.iFq/̲@ݝu8o#U8"H%_(BӀ>:Oi^Q½I^C|jQP)ızݡϮ'`(nh&hQ=-ڌ}7ݺm^|pU<]&T`Ѡhh.l-`]!2ýAO
."N.bIrOU{YhpBa_AI4BE{P	T` a
ǂVOd
Zk-J9RpLT,/7'Ɩ\I anF
d*dx'ᤸP(<(1:6Ǵx^W:
2?,GA4]vսM֬ۧN4a}]<GuV'MikfT;zWtC	ܺPSPYu.KhK:nX`sLp=F,IW?4/w<$TB*%o7븐~m&1x]/tQ.TC(CSA!$8IvQ՛e]Lc̎YyxI
yTފh0D4X\G| p5.ˣ2_R:^`Yr4VgVY'a0"f2S:12,k,BN+4GڪEP1 ;&%Nqm҂ _x7t	j+\[E?p\ag*v48R
3l)Q0شawwzȎۦvýdAWڎ5M֌=Kv4Qd7A96g9z/Ӊ̼ϻ+0%N'^mdG%;s~laY͏	¨~	ö˦:ڍ9PZ{
~]kΗGg;T_)dRLnPBHQ[h-,=/rjR[ZXUG)}כl&3AIUBj"K
k;p.֎k4ܒwඈ
1$
f@ST=*zlT8{i*PSS,b@LMaLj=.0iaeX@y@1e$odÞI4eiuī_MuP0뿠aBDr
.l=G\/i2OI¥''.N`k.x\n(tZ}l9nI%7\q5y(R]B}~j]4Qft?g&Zє(P-%dϚϱ6Ss:S{tA窓,ZL-<yq낔*	=zBT0>#TV#6!۹zmD'Dfj'+#M%A!5DTI R
4|T);e"tZ]68B:\m ֬p8XLi毯Rvl-:5&bB򩖚,x}7JJmA I}'bI)Qqu*jC13m4>q_tشyd<{&\=5̹vVy{mm
+j>%E`hʽ;軃~PC[hd,2uOS|
}JeToէ~X 3

vjwێ5C%mӻ+@^vtovmDszneD
j4oSar4SNt_*P5'z+6ޣt#JTj0c?pwLB`'T2펢;|ps5?\?cvx(GHoלR@ c"LB	k@#AB:$j;w$9om3fky<+N8K/Go0
TΣj\
rHhjҧo#r;wp8 ,7UwCSp:"_[w,Nvs'ހq@M*lち xʿtn`"{a6ㄞU[]yÁ-ف1+AX&Tt۲Y#\׈2,&GmN^ͳAk*OŞMQ]:Gp
xj7X<'lN{h:5T.KBL%+d}ܓ-{uBI|_U"-CVaM<tlQqvM<]x 4'JY
=%;,
wXp E#j S6˲Ak"	[69Xu(3RaZIxXm)aq_kWy7)6e,y٩1"&O.t}V%T+tǣI%X%٢Z' p
gLpae xnI;r;'SD:ƯeM*ӵ͋csqY
f!7k
(oDJɔpT2Du9}W~=<"'*Tr<xpl{|O~1U"]Hۦ$gŲv~nKBOyDY-9Mݬg>s8{B=/DH"ġnd%^ž`(/DKX:ZA+_
~,%U5Xoגv񚽌҅A-^?jP5E~iI}}Ś\7wDg0d`YU|>%}Q{kن60 py9=WT4A{5 Gjb{Вke)^S|czQ;tLEz9.bH$]f':vze@l{d+roե1su:b7I,h[)1f )M:
zx.~&+uwM2M1]+wRwSaU+ھ{hk!mHO|Vl0	܍O-;`}h%!.RJnЯ㍮| nH\!}jdQH]r02x4G-ֱQW87ZY$Z.c0^Λ!q=IW|o_]CobÅ*\pϏpWWZMkdXP~YdϒE=_&h-'BqH솿^L%
]
8|q}""n55󣨮G_c?(F+GCuqhY%P$"{%&<PKWL    PK    A             6   org/bouncycastle/x509/CertPathValidatorUtilities.classZ	|Sџylqq`|
q,1$!llɑdI)I4M6mM.mILӻ
$=Yc~~w\+O<
 m`
lPS+{%G9PύǬ%uTWn\r-mK?
ƮCbtuv7{:f
v:뼭>aNCS{wI6ќ`랖v>V
Z$	1=ZBᘻKswkp]llj;K7i!l%t#-E냡>-iHx=юCDܖx7h`8h`FmFc`ϵǍpvXawO8Bt#Z &⋼;ގf-|{;6zIo=ݭ4K
Dyg&v4!ֵ4Hg:8lkk}hdekuD$A[b>'h"#iEfҨsCncEP?F׶E]ڀhͭEkt
Qnܸv;Gb6dgL#5DtkXdBQ=ZSCS]xsGS{k]woA6P!6.Ҝ6Q{BC!wX'	IT؋*j%j&1_S9\:
,+R&	u
`!"?Ds s^uhK9fNH5Z4*wݳ{P.IbQ3c7D.KH,ôKC-|4S!.,-\%<@wL!6-E6y^-&cua3}^:%4,}1lm|[p̑ZK&BD4R|"4yM5ʣڸGG#Q)$ԓk#	dN;6Hu'/g5"Aك>1%leő7RH+J|viڵ	05>Jz5]V}{.mXuXG	:Y6}E4ѧ[7%GoG~	a
[wQ*ޮ	UlֺSW(ŻфL~7/9:ElMZ̠~^r ֥#PrI˧5бgwE&Frȇ(p||҆iVM1IIܛi'dpY3>
(WǴH?

Q,@X6{(fw罻B|T\har4nCCdLZfz=lӭM͗JDyp}ƷTB2pd8=1e)3I^:ánôaE&
6O_~Qz'5JM\.8'0ZmD9&5 x_y*!yfiiL6q,h,D	LCnEz媨Pǽ%`y*]C
^!I\uPK6-|a#%BC`vr|?'gQr̛tG}@0[rWz,y,P˪)35syc=z"I),!VuQ)~
󵮓O*tp[,%f9MT&xZ5
]J\G%&˄ړ4YBd!g4* hB<NiVLqي4C&cQ"R
ѓ	R֠(E}CSI$-hUژU<]4_qyB:~ٚ<eRTRL#7Dof0J$g=TY]L7-CeI~Ts	ξ$"ؐ%E)P9e$R}A鷐6<[v31
hTisqȻԯ0VM~0<B^m#3w5RM;xxD#AQnDCO|k;voΛ:5E9GSuhGT4DwP37~Jg!?DG-'TBp<(!G"
qvO#p!bVH8/cr ʐk6(<̷l+mmPb56(Zl6lZ_l}?P!J=^.J'~xWxPk<$:o&oo6opBIw
xG[{<&A
8%ഀQO	pF	pV'|J	8/Oϒ=fy甬1q	hěe<}Me&_ufߍPr뫪z땒.OhvQɚLgXOrqIvibS;G,Lea.VgHZ\_J6u4g*d%8D9K%S|RS[7e[^ծ!>Hҕ_%%%t"*UiA|tHY	-ZT 2m<H"[W生jLC_4	MBiva҃˵S*+vQn6ow:FM]hg\j~f(jd%2X/tt8%(^l>ϜQBz2l&/lZ\{MOdZ-ix7̄S0it"iՇZU2Kx_-;1iZ&^R_>#İm3LL2&?EL171kmʳr5g6/6e4Q1l+@WkoT 2̢,YeuϤ,
:8b~̘_]Ĺ:rw^eFī/IY<8Cs%ă5#٫B!^Ba."KK12\**lb0\pegxs0|{`UwBM(T11aNݐA0|nSMX:WaCW:A?d(FڱInW6^}C~
wЃ^~7ЅH*lV*TnZM wFnvvOC{T>:B?ÛT`
~
f-*|a/<ܦF3t9,s

{U8}*܀A!
mدM83oWgaQǸwuu/JsUyXoax+p$;ax'ûޝhnW3<^0^72vvga8eGvDCcï~m\Ëvc:;c>~ގ+v,$81|v,'];:3cx_`K;Kvϲ,q|1qodǕ	;2Վc	~ݎkv,3ӎC3ˎc^Zh-ގ7vVso=d"72g/1?1fe;n_V;Іq<b<pex΁.>8Çr5^31L0Њ%I13_vr#KPa9E>__"?8Lɴ~	 f"[ıTˌhFhbkKiE5W X9}1})(SHJ3Ro6d9gEH7k$ky9\{	c?<.=ED0p1xTtLYӂ參(Kyr
%(`7l:ew
hz=PB
<iQ%E9eʠ-ςO+I1l,Gy,X
vw4fRR>ԟU<P14Nγh<,))HecQ2ƹ]tPR%|,DF 1Hq},,!;B̻T(OX.Y\D\J+;uVlL(GVpy3o/;$Ƃ3
JlU,ͺF&/"`eIC`E\-pa\2꺅Ƭq}kgSc)=)+tZqL>OD-4i`ۯxs3j'bXJWMu7h)P`SNVSA[LtbKE|qȣ +[`XrjV]RlP^0[O+wL#\0Whƥyl.>?;/p\|3m<W+oLlA+oB-Oy2!,ȹvA?HVKrCGH<j(soERw)לqYGHUe%]6CV.i)Ng4K,-[YDraL(/G`5W{H$fstSǔ[F wd֓4щEE
IQEWד7E;'ehcw
_J+T}]*=cJ3)JnZƕnmvi;΍L>SpQydKHaG%j\;I;jo\M~5+>Mx^Gg /7 ̺(	(KUG4AH@`	gRH\f'%
/BNBed2B}}?GGpp\Lܴ|dqV5a2RdarQ,޲bQ5KgtيB@$UʡVh#w<lbrdr|dHE2x-qNjb=n־U
)g`^iJ#8	*{tBYr!g~6$
xS0XR&uD	r-}{,~Q!5jO.yP`B9Bw^dpr,\t	~z_<,c0n32G`GCt	?G`
K䖓c	>ɷ(NA8}ܬLsX ?OzW`S2صWR YFD*@t^2X^`M+eVl0-tr\}HR*Ә)^rȲT,|9r5~;א5d-/uYǕ_0'JR:~Wh\#@\Y&a;x锬>bM\YU2Co7Tˢ-fl=k1e &/sS[z:~2SzR*3E^;E^R
uF!*|'>`8gߢR6tXMNz6rS*ς4B-!W4Nםir2cd*ģ,GA&m\Ii36A˫}#X(`/wS@,<u ?-<Jypltʹ8[*~"}y8ҋ*&a1W
%5$Ho5Xb^7cf%]\V\'Zq<S3@z:rKFCiTrc91;7gU$'>c;:yDvO~_++8pW J'盅gdUuȴ'x'{.sKv
u{	, J=	BL'9X,pT$c4 T?aÅ-I9W)7'+@(jNAg/U,Z*k.GDqeטrC"*/so=G[.7eZ+9`9%Q|	QH3|G <5 I򔢎8FUdxTɕQ*;Gٙ)pTQd`TU@v'\uZO_	u:᯾N:mNN
H

5d1R?PK DPX  ;  PK    A             &   org/bouncycastle/x509/CertStatus.classeQMO@}*R
	
6iO4xCSffy7s0V/1Cɐv}W00ꨣ~C~vǃ[lg.4uD;V:
6KnyܟẔC3OIs狳K+>i{S
Va*M_WPA%{!\ϒ+hm^V]kbvUdʣ	okOrvb̽&1tZ!*rPpLU
X]&,H"e(4
S+P3
HA5LQ2u{NRiLDIyuFzC^PK$+J^  J  PK    A             ;   org/bouncycastle/x509/ExtCertificateEncodingException.class}PN@#IHR(Hh,wtaYw>WD!(PPݝٕٝs#B.<)R1t2oţ॒U݊KU8PҷZ
R#R,zp-2+)J+^OOyZ|<ë`.Lo
$Qkp
΢9xw8vJy=tB0tcإu| UOq@hLEabIшv`܌PKR^U     PK    A             9   org/bouncycastle/x509/ExtendedPKIXBuilderParameters.classU[WUݓBA-iS!Lw{UJM$6:Lk2?C벥KֲɵM.u!9߷w=? 胪P|.'[Spu+\x/RP~PѪeWTp\6M߬@QtD7mZ4P1zAAxP0(,^e5eJt-Ț[9˄hREfI
O)ixԪj^\Ԍ7)t)"6skjbh	T}`:vi){<WPfR!Hrw7S>xY?xI6,/a`"DI-{2GfXmY/6k=Zp9W|3߯Uf9õ%UR?Uay]jݯKݭz%p?P1bTŘq*8bRŔixLm$]\yV73u>mLDS+}${&
T<mmd/TK*	<I`lb7ah[5k.$S)tzz߮7c8)Ri=89y<c!|.8RGW#R|!NaYÌXM)niѐ'+Rܒ"-ŧRd4K<nkX@7bf|i57bIXjc\@&.P<sU
1G@,_~g1d QLlc)rOB|2$7ףX5,#<	Y!U|NGm_tҌI_7(葓l<ɌɌK#OD2k$I	ڸG#2I³}XlXkS2;HgT^>	$F0	vk"QzF5>_s|8Laӊ06dPK:    PK    A             2   org/bouncycastle/x509/ExtendedPKIXParameters.classWi`TWnL^I44P%(E[ՐD %)%ŗ#y0	ޤHq߫ҪuKU2\@n$R"y̛P1߽ls=O?DS1b:%loY2q
ZB(h̃X&PtՌ"&5QCommh4 Wym\KDcaE7"겄EJelg"cĵ i_Zec[W#۷{]Gg9OG^shS6T
h1}$M,bb$" Ӥ]6tRꊅQ?-lrdD<È!5]0Q9ƢdzP5ڲ,,]2ebe6ѕhݡ|^(ÚYha٥&Q7hD|Vu]T-͵0L
3#>ήh	eZ%D9Aݦ
Fs!_LrhTA	ly^%n"lj r+ibN|L
Jn$O)cݱR-
)Zu!Рm$1븡}*rV;wpDPlPw$ͲHTT.j5j¯j1ŤW(4tmʨQE5dP6v#lI]iDІU2ʹL1j8ܶ`C80S%Lnu]l)StFW=6\~5M+8ܸZqe@m,W@UFчzTiTDbY`jFoSA,F꭭:~4NN7
\-bMl*@9#9~Y;^eǥ={;=f_Xf\un_2-x=\줺;IN{uRfJ=/Fi(FvgNDcdݛ
7ɼ9%	gGJ{|pHI%HB%tHxHX#!$n%anCntͼȍ(M]_QiYҕ9DmɦLq+L6?ؚq6aQb9SOkꟳ( ~D&'%fuLvf0iljUK&+&J2l)T*z;dػeG)\YGyFvzZ|s|VVɈ/52v04M2"xn^(íx2˸!1<y3pJe
C	ooтXp-0C!cQw؂02n>/ed4cE}Gfkpg32^00XȈ2F1'Jd8ç>Y1y/qFu1vN|k?a2|CId830<n6/}ô=Lۇ	Gd8
]2G~SFwK_-Jz`x{j^Tz%P:WW͗|wPag	i]*Y9RcM4n{FsC5鴮r
Q.zZN_	\iGo>sYC8NA~ZE#A*P}]C+G/SkGoiIQ<@
8!BFO K)YG+2+|`HZ?'B<))xsR(_IQǿ&EK
ǧ2طwc_w`8a1$gNA1_83D;7KNiy\ZA	'6r\N9IsIIDm)J>0OL-'B(a]FgN^&|ʠ*ZqR
taHbt6$ӎ:u06O9xD^zDTGuf5W'EٺuR]B.RPS@g\e=,'{.?q}	昩RޯK(27lc>w\lNPN<Gᶴr>DPcaYO֜b:#dyTcMR|؀U.ye]z鼯(b3Nl3W!.qe >l+.
ϧTK;N4STu+l]N&#^sXs{=w0vQ$.c#bAU+.K({???5 ߛEX	7e;=tx)	Oy:c],ݚrܚխFt[.s5?55}Etk֦靜=E^-Lk5PK:	  ,  PK    A             1   org/bouncycastle/x509/NoSuchParserException.class;o>.F6̼;FĲDļt}׊Ԃ<FtҼ⒜T
SK}䌀Ģ"jv&vfFQ
Y%Ey֚a<@˸XXSRX\`C6 MK{;F
 PK̯bv      PK    A             0   org/bouncycastle/x509/NoSuchStoreException.class;o>.F6̼;FĲDļt}׊Ԃ<FtҼ⒜T
SK}Tbv&vfFQ
Q%Ey֚a<@XXSRX\`C6 MK{;F
 PKN      PK    A             /   org/bouncycastle/x509/PKIXAttrCertChecker.classQMK1mWkV޺ădE`PzͦM
/$xf7o N`AuAUΔL1؟*u&%,6^p#)O<Uo&+J(WpW\*<!38	'-Z  nS[dr%EF\_/OM|ʅP!a=
n3h}jÇc"c2^D*oM'X'*QրaZNhx)lQ0S@tj7>Ӻ`hR $myPK<4:    PK    A             '   org/bouncycastle/x509/PKIXCRLUtil.classU][G~,uQAM+h>JX-R(Dzɦ.fz;7zEQ,H§ɓ99Mk pDgH1Cx2W.)/d
nK%Swgg[ /΍Aن
#IȤV'}|UܥNFt<+[^\Q)	0gEܞKbSCˑ;.s2so`wE<߹!;mGAtGAl,p9p|],E3*#g2B%u=MjBch!L"}*w08Fr8q$G7Ǘ88Е/b!ih*SȎ2SP.5pZ,jQeI-![KyšⳡV4lEib->\>YA]ю4_hĐڰذ1fЃ,bB,c-%R9O4OalLUzpiֿ%_f=9#K)z_	30ܠ]}3m)ᇗ1$.ߢ-v߅Ao`_7Xr:&IiLJEnRL76sd9ag&GIMT	:~fhϴ'52%3ɷ(h&/
hj7V1a2&1+bHC{?A/Cț\<FRvI	ؠc0yzé_=iC LO0PKBU  |  PK    A             0   org/bouncycastle/x509/PKIXCertPathReviewer.class|{|wfw&dX`4	A,D	dmZ}',M[mU%*j-mRn@~ܙٝݝwg=s=sg /Va
*Ra
{Tx
Qٕ*QWRt&L|5	l^&rټ
Əxk*WYSZZ\(@EյVg.ukWv/_]ɠqu{ڎX76wmYX{֖Ɩfohnj\eJ׵54w0;B¡kCHK,6Y`ze=̓}`Oȉe=``o`{AD;Lt lDv㡝xxs42@G$59YT=fAPώP=,E6!CS%#4jo3$4{(1:o,H+R1(˦oٌ=#ј#h8,PX8o"{z}-[#==&4'Mu"h
k"acN3au4cLHe(ywOhHڷDS9RdSGnIc ǺXᨡP0[CzVw}-}Qz[YDdv3HzC}`зY6^}Ʋ9c:kP|\I6PoSDv	i'!hX3F@Q͢{m<f"Z艝$٣k{:\ꉷwLT`,$:p`AH?NcBwj7LAu;M-JX<
9i^P	2G'Ym.mydGFLUdS6
9T$n7ΉMy'"gvl
*[}~h6X?:вcФ,-[.^7{'*֒2E*2(Zm<`ǱAt ok8gČq0H-3jix(*jNlH$Zba0;x͐FiN:<1\}G#`ߚ;'7G%28M@5TNOPfłBN-aR͠9YY՘
s55BKM!3[W4o2b.[#&tvki_!B펖uk[V!7U]:W43kokn\ܸ~#F=/_-w):R¨Bե>QR6tk8Wl<¶5kP*,.k\A[3ܹz]Gcs7u*\pis#umsG{ږVkcQpJr6^o1D]QjKx7G,nق~gOO0cjvc?5JZl
0Y[О
o$bbycXE}@r<qKXB:@EH^^q{|4ͱ͸l
Bc	Q8C߅pcpkkR`GTQ6d)y^LiC[B[nhRTgz,6+\T_Jp/.,h<gfX+ji,%4 {<>qu3QdFlK-=%L
(-ꌆG-)^"q*FG{FQFާFDHB"Y|!sL5ukЬw0oɩPF?bTȐ,k"5*FV	W	
׷p}'.2=J`dVtkpFzcg[C@V.JT 8	S){PUډ3Ub1_U 83M}uKF_1e-4c֟˛{"b3DO
w҆*cČgxd tb
+oL{%M>oMZz
F&Vb'
CF_-C!Qty1IH'$7.??"Ϳ[Kj!JJR0,|&ݎ+~
HtR'E`o
7I_mN$7yxucNś>no鉛R	FQĸ.\aICH"Lrp4Zrx<	w<3`[dI~䑨#CDؘa$9)rІe,ۖ2y3Gv{Y/ ICVhF0buKSc*ͰFmCkc=@i{~zAF2#c2Ե{gVRCYdCǄknR>+{q>6	m`%d n!v{)āeX8lboazqP;}`Gxe{p3ݽkvO+ohӌywx.u|G
lep̾cybۛWRr8Fi51
h?-]8xŪp,et+m^⡰v,[/RL#5
{h4'ͣY-mGHܰ|&XMETiK__h[>m8DOfeeb`|:Y٨
T'K	eLKc*ʴZ_fVd-E
H;Lլ\k}ҝ(BMCx[Rɢ?Yd]Gk#
I-RKexE[p(@ﶁML'$$Y[tkRV5Fy0zK[9c7X6őԎMg1hͪQ7i4izzơq(D|Tݯ(+W@	eu1gc^SSPƶ*ya%l
'ۻK7.swjRr=&cur졄gg[Ynbkҏ!az6-bc>{*3"tc}tYCaH(ƲWX귗Zw3GD ՑjB5+TgKr|Qپ@d=1|tE3}71@G1=Rc'[14"|56:U'!m^k<C*cG%wʴ~):Y0vCcɾ9oj3%7ܱt?r#Ed;f=6!ja08VY`c
Y1ȯ13^-r~3
#1WӶ13kR0O}Y!.
9.SACW}!ks&í̥srn;xuBu^GA		iM}?n7mmⱛPnɘA&@ee11]Ǵ,r#0:ZTgFMV-2v9ZMk:;l2V
EDR4Jlwt3<ъI4Chh 
QM]5,p(na,}nkg-^b~cɻ}ƃ}'ҎBE<-7:D~1AALFVH
X܍ʲkDI?$Hؚ,^26-
k0jlٗc:Qct 	nˉ:o<-zi<R
mD";J}ܥ"Wz+s,#?!#x dp_2?*xUTUAWa
Tp
e*S\
*URZ櫰@Zp
TS.Ta
TTX*\B
*4ЬrVR.UU6UX.SCN֪^
*lTKM*lVrPJUJ
[TQW
[Uئv*\TةB
QY
UQe]
ܤ
U
|@[M*LaV
U*Ja
Q|-PX*|-RX.P؅
[(l.R2]KV5*Ia
[
[]U
kUXZakv:֩
[^Ua]aa]
SN+,]b
+lPavv+l®S
{ޫ>ݨvnQ^_aPح
Ma8!}XaQG1r,[G9cdX?˩>=FTIǀNtI|gFy[9ʥS"&ϺR9L*s/hF0l0^lnbXQFʳKWMԯ85H79ʳKr@;qR֘]nu~6&tnd]:Fs
I?9%dUaeU0gf-L-fo31ә&}yu&/<G2HwQHsqUk,XYlQby묓^M7Kұ1ӌ"$<ycR~xI4Ǥsn:T9Ȓ+bd"$uc89'Cgk>	ÚQYʤ/-b܂:#ENԔKb#cUy !\8L{vF)HNS$rsrCMTgMչAS1Ftd<s?eeBXaC(QcjklG50
aZ/f?q?9nǞ/lmGuv~՘j34VƥrhLnspKG]
;gpxiwd"%(Mzjt/8Npc6YfVҐSrʼ2ùH[!-qGB}FrGA^+dp,se2Ml?*NQN`\(g,rt!wEjgEl<
H%ã 4;r+2C48˸B]MYK	̙*Y%G-/?$(e}mӧҟs#gp9W㘿fVpEGjwWƿ.<=pqDXG5	F
5J0` A``n'x
_[4%CO>wjc_c}
>˯aث+N"x	&L$,~*i3
L&!&I	4^<@0D˅L'(%A0`ln("Xc6M>/" $
> cX|jaK/k5rx&=ίK_&~~_(+?%
o	&8ApAR74	M|߬~O?P\k )mj4M"v#Tcs4k{~$I梧/OhII
?5v|F	k2B0ߥ/ph7ߧ!~$8C+9H_
_sO/j}>4H/k;
jp?7CU|McSE(&xz>~B#|0~]c_G4<Ɵhpi
h.V}ßM-
4!^5w4.0>=/D#	~LW~J3}xUc_kT:/5Qk}Fc%'4v7#55<#H992E&PT<%yAn$x/%	AO?o'NKp4	'd/^$uxxe<|"$iRO'X%T1EçJz4"&m$!N\J%A/<|TDPJp!bek=|`ϒ:	6=|6:OzStK<JWJu	#(' $h XG	njj^#E	vB >_E0hl#ZiA-=;bqk	n `/$~=|=-v{t!E @e|K	:PCHzi7HDI[&i
&yx`3Q_!{nR-vx>᫤O<U%Yo>HMo>E𜇯>k$?=wON<|TEPMPC𼇯&^0	BmQ&O][	>BoZ	B}LOK=
+	̮	JKpof\@:=RJ_T@9_%8HCJm~ۤ=8KL%F0`A`f<@/<L	|7&xG?&	+?%	~A𚇇I水 D/?_	 M^XC]@j&XAK/|˗R[J$Kg _Wm<MhJߓ.N3ف	Z:I8s;
 0bI|Lb|9A)gBNXSSc+~1_^/F7[
Oq v'A5Ko#|bWzHVOHoT<OE%]!9hEB^uX~t|됼6 W&0tatzzaXTpNaGBl:~>*9"ݕ*+fC#/ٰ</.ݺ+!=!Ę8{	
,'qDoOH6"a'ᡮ#|SWaN!?$uH~h9jӼ	#|{Kg嗟F2'`iQƹ=z/Tx@K$9
^|e'^᳽'@*wl2B%LD CpyJGtrawǅ2!>?Ut;T!%YoV'Q$>DGa9Z$%UٟGS$qvNr$2I緍Br"qBr"K:$-(
MD%K: wJJK g/GM	0/HAe
cbddḲ!J3GttKL;3ShsOAؚs;vȲ:;dcvP$2oX(p9-?W=l/LZZB4YL)zPׯ==yԦ~d'N䢗`GU@[YȽ˦#T>U8ymkŰ~1y1:ЏtWxH]4_P`a@5$?ɧtIGH}H|w ,ԕ%	yY~~.qAa[Daxd#=zN^Ww MQ.ǟ#:]$-OI_!8?ؼicI	MJ7m`e)dw[\~M(SA?lև/Q8MCϿFNbrRcGqˡnAx^ SY1Ȼ
v|^h|'.0LPx¯b#o7_1\SP+%XخSPepٴdZ_:G$A
_Ӑ<'dТ_!,$|,Zl>Wq`ҒBmkNT◭e^EfMtUpއiާbu/0Sjg{1-ҽȵSM'[ϯp%N1YAB*ֺNVxII1
t=E 'Y+k{e]C]vP*eS_RcU`huToXluq¬QWt!6kw,-ɕ\V./e
Ȱ0ꠟ&-*epZ0,N3T
{"MB+6o9|$h:^0<uaCf|V#)Gdԧ)
YޚI`.?> ]VO.~Wd4HpNTFŰQVJzUᢢrSΙ3>'XWKnEyZA/slg
ct%YI]rK^B
r\9^A/n)WXZNZ-SGpjtXsJJȡ<aꄼ}Xӑŵ|=W
p0P}961%(b	.b:^j{:&Ğ7W
~KN.nRϥz:E\:uKݚ}*+:Ac{r-/<њ!%yڠMްR<ͷM~oH}⑛En@Uo컖WvQ%.CBrx=?4ͅc󿌫HMc¨B^dyi}~ouMbDDG4(bk*Z8=$&~-K3hҨivf4zۄ'66q?K8٘\䒣I}=l?,{2;e}契tS{#C>FȓO<
&>WPbb跙Og7ϲ>ż$?gK/KI+yrYƍU#!ɻ]V:x؍Qjm2ceacF#"|wi)*Zs7*=U
#'w
(wF0]ϱ1cTM
L&|,6=uO+|sNRTTSt8ЎtO<J<"t#7XQ)tOc-T߁+=!BVoȁ JI˦Vb~VT95I<%j*bˤY-=+Z(4:9R^:32T(J5c#=woE<V_]
XQ"s){DuG
1:,
'-(!݇ەTxK(>:,( 
-& EzaJ RO
]'~<4r.>]S6Ga:oU.ߒקNx=ŭ1O/0O狀/@_ hlkbi4~cX}4ւVrom@88
9(ҋW'_?çxO	C JB%M(Z`T7<O2̤'n	]O-My?q?4Y	Y6bqq0<9!
UO6hdB\<=tIn]?.hc"hC_ɁR8R/Nr Ǽ	ZPb=]LpLL"$|Mא7~=PJX8ҁa#I^Z]of;aGD	3z.<@Ǝpnkh7;CI<6d2aum	Y$m8i` Ӷ92D	E-0E1E%5,ފqEw	
ua>T,D(1&hR4I@_֓(D6~:i6W,4P)G+@WFna?]dF
*#~7G6cz^H}dBO"WҴ'_%.TaEhroBBwR%zzr PFMf'!!l4[6nOےͿcjw+4b׀2|),5})i@4c
<kx(~p:4	\^xUGbL7aV#66ginYxTϣ衧ҟWȗ|~	y_ps!ZTe\z~]O{}CTGK]lYdD&`tMNnxMa_I]Fձl
vch`I_ME)ɒ#?jGlT;"1|1?ҏh-[a0A]t'=
%lcL7FKr/^wus^~:lޭlRa
yn|:{PʰT^vR(,?	gPbnPeFĠet44wpUWxV@D։7BC8Lx1 #|cgu<t9y0]؂NlO9E$\<@3+Rg08$瘛a/Tq\
E⺔Q3KhXgz8^A0,8T0.<K.@XND8w1*l!30$(k;T9M"VVNBDR8}	b埁I`U"I(<nU./%t=M4d<cʌAdjdtw\[U8>{2F$axp;B߂~%cm8,A[6*MYA^țCPgHͪ<KrUN5eCG.Dbf^PNgl}j![ۤJ:,EǷSH=3RoI=x#Xf8/yf1Q:S'SkP[xW=o+tcT9B6.V
zMDtxu^mJ#$>$o|FC#ߦ۠3
ϸk$ȇ2e]ɂى]E+kVZv
*ޅgŗcݻpi(=IV@Z
htjωM!4>+-@E;+u뾀:lB޶/~ݺTB'lAO)**A͞Lk?(>Eu?3,.Sb>1z$>sD}B8F3#Iǚ;˯#kR!%
<yRc֭֨Mu!|`yL1otuc
V^ņ;u?(CU)}ahg7 .ߜ3p7*|t
.P1p_ݬV[S.U#|@7Y|mҍ1.
Rn>0*frߵ Fn=	h.Jrd<mB/WJ~:t!PV14q;<!\h!GLSO,Wt_Mȯf~$ӗF_˝;05ZƕƄLO}Oȑ"iB.qȡqy4k}^cY8j~kM%N}cMQĳ˟k݌yE_+	npi8+K葬(Jz>2_j8!	Hu97ӓ!7zbVB0c&ѬfcU
Orr]R_yԹ
2fU2j:g?MW=<)<chuHq8FI~~6oX,[.qev[ds](

l*(4Du
u̱zQ\>\HV2F\bt-%ϼ{I/Su:NB}~ zϽpv- {uW!KKs-$UTʋS"!/5~LSڼh4Aw+y->/#M;yt2qy-yO攺'WE=,C}g6Ɯyb#ע?>&}Bwbo%\]k~gvkݺ&4)ԦCXY>,W@cl|KÔ+Hsq3qoӼ1!$_QÃߌ),Ą4.?₹#/hJD<^	:mX<maS%ܟ>A6ˏGL7cWt-
*SSv;i#vmgQ[#D7H|I6^r ًRXnBn~1{
~Ż+
}?OTi4m҇x|Oo[q]^Zݮ\;]{a'u+kIf\$0OJFb3{r1EfV扙Jlq}לՂ`<Y,
Arȧ$jLqhm X8䟆9ƍ5L㘼o㧠Dᗜ|MȿZL5On}H'ݨBaYJLLfϭƚ' )4sfbtk}cf +k8;*{%ʈ: cvYo<8!o?4ހ[SF*3&/7?*QF|#OKE
eg<!届:!~=(l"Fc)/1D^YR>`A7,ܕ1p$QX>,4vqQA3%*3ĠQxq#2i>n
\[&S(L*oS@Acv{0qV%Tu%aOn:r;}gk02\m)>hKC~iU:,+]
Y*⒊7cݝfL䮃׿>];&!B["
	犧m_]C67Ϋ)2n!Jķ`y^\x([wIzbK7SzMvܵTȝUOa7n5>Mw]+κ_@$mJWL:nS
NSJE5>&k׃/Û' PKP4  ΃  PK    A             )   org/bouncycastle/x509/X509Attribute.classTNA.,[9V@YPP9AXB$^mcX]x{x-&>x]lfg3 H0԰[92y|FK,vkzЖ+K,e붝ghp{̓]tg[zviH;Uu Vf)14DqCYYED[L69X_pSӚڳyʌXV;'?˛oL.IhpYB+Rj4=u]
խ
+CUq4T5Lj"(Dݢ^B(ζˤS@**J^eA:`EBZe8s4⺂v0>4(hB+ং(0*"
mF1]
M0!ܑчIS
'>ݤ\nyn6)u)AE"&O#@0~L*>.-Fh(ӎз}h	sGݎPBB3UsRSFI%E,1{!=> ␖WE<5|HECE'?beO[p,	ojmr
ޛO\?_PK7  m  PK    A             :   org/bouncycastle/x509/X509AttributeCertStoreSelector.classWyXXN7́
H`iMm\npmcBH+z%i4izq.=A@-m6m+ĝY$$߼ͼy'l@3#~L<,^W9ꎴ1unBqktAFJ~%ٲV~%2[%_Z
~	%	ޮK(N1a
#u1$x2-%fŁ!5pЌQ:G h2-#wŔ -֨#FD	ԐQ쌸}mPG"
PFql`RVf$n1PTCċv~5B1Ѻ􊘆
Xh5x0(KJiݣF4
06d$4Hq),&wMl}tSV).Jen:ТaίSB.Jr1tGwH@
	7ܠw
!cRYZ)&kX1m`GPFU*}$EE[7]ݠK7zUì";t:`WbSJ'e6حDzT:PEבYqi*9!!3sߧ=];BcDTeX7^"p:2"ڰfh'5vnv(yBy6\Em=pDBò:=BLtCIYJVQ\MY
A¯$9s"0롘tpWhfy9@}ӟjr4cΔE'RVsESӔF0d%r#EbXhX杻.OAQ`_`f&[**U`Knx	).rיk4mM	ufb5ueI)[}[Qdd)Q^"uK8+벹TO^]6|T'3-'L,I60n)U2TCkI!KZ7K()V'@=jWȏ\.߳[rĽ`uRݾ*wk*|ڰ5_w׮Ǭ\7t=ֶZ2v.q;C)2^	CF-b2qBF	^+c=$6P 3b(¨
5u2z
2ndp
Q{exfpJBEƍ2Qp3*AKZ[ux{]ć\>3|fxqڍ`ʍ;Oq|nnκq3nǣn!y/0|Wj|aR|" cc8gg_;pD厥ǀ;J^%):]B+ڸ&V0)I&0>V=[K}բVuI|;xbg$	#[7oSp]@xQ\\@iSDPI8%3sq8)On
IRpaU
LW*8eJƯ%<RZϚSǷgzI<SSa}EyqՑ8ZD8fAQ)Z=qUt{\$&W)giF-N[IA8]Lhv.f-_ة?}8bq)<&}u
{5W .K"ҋe{$ɤ^%Ksɖ֎fsDGvQoڈ@|
5>o?	3=?,)+ӟQƭƭ;ˉrsm/&x%\;>{tRՉF㛓ָ4ns*R=ۃ{-&8̭lKXсP蕈MabW4-sD>x[璑Ӝa>4s'i0?4ߋ72?4oɫ-7p0$Yo
ߡގ	)a%tnKn7_QųʊauBa
S9]|(+7r6'" zIY3ȚKQ=˛i	v}C4#<i8FscX+O4{gx%}eеKC#?PK3]  ,  PK    A             4   org/bouncycastle/x509/X509AttributeCertificate.classTr0]4-må[nuą)dO;ig2d<98VLk<|ZN)v++ 3KV1UXOUS
'}Jtc#!,FWDQ3m(>iXA%uE1''p6W
Z{*h?tuc;\EBJ'ȵ6a7	g"bN8J:LyMKc֯D?,+9XF=KW~/YeoʡP<s =v2i)w/^6ǚi+RvW!07(0xd!M(SؠIDPJa5
	lYC}.|'J`t)"1%W.}.qQ~V7,j7V{wp
?Go*ye-BOrY}( k9rh*,epeexl0OX1Xpw]h݃+ƭ߀ӵ"
۰+J&>6PK=(&0    PK    A             0   org/bouncycastle/x509/X509CRLStoreSelector.classViWg~ C⨬VŐ@#.eB0:`fbjWT]]hk=5p9]91=L ~lÕ6pH@qL2_$ݪ{t(`YW'dM@l%nv)cPu=fօl*uGhд:Cєma-+Xt
󷦘Jǁ.]єQef	jXcׄZ<DE=ªJ6U$t A'q5Jnʈu2azXI
#CrT1x2:S5̸:0c_LM$'e
%#
Nqr֫Ql[RP*Uát5ѹx^Fg7D㊣	9]ae5\M#y,7iJDDT!wYJK)*cv5M%E؆NUs2.oi>?;3<FtdC,	zx2,dCo	Z29JwG)<VYyb
dN5hIulJ1Y7S'%⬬ñ2Rfٶ*8L
c2#3o/!ήᴞ+z.X{X&bF>~M""6hEVDl"8.M=}H}sz!NP
26d7.U\.?ɥYnsd4V\u4]lS?:< 
b=0p1g^%lV3ukw1Uw苫Q'[kap%@f_a'_y]PpI}̻q@ᒰa%D	J$4c@jCn}aPBRp$14cXBHjv!	Va	;!Kj(GܸCԍ"c*Qc8A`/CaQfx9܍=3cg8`2<$33"+KbGl>+3I	ѝzQY(5â6|
2^fu|UL3
m^خ=N=(䶀hvm͑lZ^m1͍-^(rFwjW0ZC.÷s5Ksp7`#:|ʇ| ۦ9ě-EJwb_Rᚩs
[J%nF'}qkv:"":]T3pù%JR;p*-nuTݼ$9rk:\.⍟!tx6&%{I|u	ݔaN3=tObT*JVMB}"
 C"J1cn
ؙNL2dzi.ѰӣRXtnw.Tzb|:N9t|
mym^bǘp-nJS9PKɿ*!  =  PK    A             5   org/bouncycastle/x509/X509CertPairStoreSelector.classS[SPNK	-BŖ T/p4E+ 3ZftM'[Kvf7߷gyc3yd8w:tn;O4fU,37,fpEM,+Q0$A/cAѻh6:v]>^"*{9aT׬JIӵcrZ?Q=A]]T_	ArzE;s:0tބv};ˍL[M$$A%!.[Btg/)4/k^z6=UWg*ϧ{6}vOΜբYю2z	cXFLFȈઌt`DFL~hC0ѓkTafcHbRRPfmZkEmfrP .EyH(s=#%E=<gp}8A'ȷO*_1
[ hF/|<CPPjE.{fkud
7(\guo:Ƹ>JV& OH}D$\U*z-zaEtdnW۪p#\cǒx&#)!5#Db%QɥDq^^:[9_PKҎ%    PK    A             1   org/bouncycastle/x509/X509CertStoreSelector.class{Ui)i$L]P$mH[)"trI3aR\*ϣzN2m4~{{ΝϿ
qX{%0/~8]qhNt?iNi4D
ݶ/jRdDeE9.M6,ǖHuܨiGR2WSQ
my饊ް9I3j,\ZWsuE4%]Խ,د[f<3zeSzh4Ct۠S8Sѭ>3S-,_%rֲtox	T\|Lc<c5Giy#XbJԭ!#n%TZK=sTŗWu^Z(Q{kXQg4e34>'M'3fȂg:QKɌeɼn|qTWDY5|hZ9^ņRFI4h{vl}Ndm}аq!hㆮ<K&i%+cTҖDnSsO55k<Ux-jj\VSjYMͲjVSuVg4Z}¥!\6!BBCkbfGl\VwlŔ5LɼtiJ[~6ǢcL
ǫLSzZ;
mSr[:$]žC[1uivKfHw*ba<Uk چY-W-Rv?*u觬1~p=1)A<64	,|K+؂f"aA	+@`1nhǍpN@FzZ,pG_`)
\UE ؊[3ZXHbPZ2X~kq:8 ؍0R8°O0#Gw0dCq0N0c2fø A#G=09deÌcQ`"c1θq?!ÌO.'Gp,}df=8ާ!K^z4to&DPx4>΀4 ݎ4RlMhjHCW_|$ޚ(i&6Bk)MEhZ/' 1E·kӛ8]ҴPpȭcY>&gsp&>^}|mp|i/Ir|_9|u_q|wE<ifx۳C?r|q>87}Ljt6l୵q?BCm®U7/PK Ŷ}  9  PK    A             /   org/bouncycastle/x509/X509CertificatePair.classUmWU~6YaY*RXX oiy
M 	֦huY.bfCۯ?P@C=G9VsMZI MSdf3sm?w `ÐIIޔ s:Bsؙ0-ә!ߦqMmY/$}W$(9,ZFqn:$[>KtR~|$f=9fђ0jӒY;W =lpÑ7ʶn;<s4tV!]zaí'	E;m˖qKNkzɚf3IkdFZQ<Ic 1ke,hsKdP/@sm.[n\9;گj
5i~!)R(,
ltAگ iZP?C? C,o0pa-oKziSG8 BBUߖ0
757kZܞmH=Ϋ%7w6wMK+)j+E%q="-
oЬ].F^F~g2mwP1"(UAVCt
E8N
Ôw3W>$5J*Ȭ s
.ຂaAF`Ia('
"&
Q*aI iA>U0&|Ǳ@
/O7=G7I{bxnI]t9Oct!HG08z$zH  >gb;IM>C|~Ҍg\!Io֍*!OS8@2YCnt2凜9B$+CܮC|Y[OȜ9AfX#ĲX~_=^>;ͱ
3D)ɔTL3 _3D^fN3|Pk}qxq˽-͙fr r;"+xZj=ژ';. #&C,fc!Ԙ> d=C&I]zU$V(2[zD=j
=eKԮ' Ip?PK[yO  	  PK    A             9   org/bouncycastle/x509/X509CollectionStoreParameters.class}moPղ	6;ݦ%_\
-)lJD}iRO)Ȳn;m vQ1-Cȸ c)ny#ܒΐ4خ<dx_GD NIK=;*pS㹂AeNzCnq-TNCw[s<%'GhGx82Izܵn`;#UC$zRz[fֱ;##:+`ȟ_cpQ&aA¢%	VgMV|c5x4|1gg²-#y??W1]d\	wWCs]9Y"`-2l斂ul*m2*^>t-g7
J2=P~I})qumW)ǈ@CBBN¥a8MQa/0	RG1E0F*VN%{{]Z]Ѿa^K
rPK7  	  PK    A             %   org/bouncycastle/x509/X509Store.classUkS@=)@OK( /)0	C)4$'Ȍx7Mᥴ3{=ܻw|+E\P8;*c`µlF뵴mu%T
f&u07&sH,AӞ-ֳRtUWLb>qUS#s52S)[5T3_b\Ӷm݋ƭĶ9n$-27SӻKg"9NF׭mST5XtՍrawy`pN[A$x.-4W_DJU"Q#V}uΖ)[ams׋%Xus5]p'\[7	_􄯓jv<HP3MƲ=ep/U/IOZouXt]_J1n'Rl2wb$tFuAQVx,#!d2DF1|)
![F	zd嫧h3>< }BB#^J+>Ih %<FZB0@Ӥߐ)FO_azP?>i2{P?8	W>n0"m"Q"DʙOf!{!/*A9\,u	W#:O(i]!&H|5zQg1>o;"tÄΧЁXۓs%EH ; r/4SV=A*9#Gxi,\9¤uq%rP+ir
oK5^Ɂbڞﲡ>xA[(PK?    PK    A             /   org/bouncycastle/x509/X509StoreParameters.class;o>VFĲDļt}FtҼ⒜T
SK \_XZZT  PK8AX   ]   PK    A             (   org/bouncycastle/x509/X509StoreSpi.classJ@ƿm*zj{zPP" BE! ^qHي>B>%ƫ?os
$ѣ@Z[Gdkm
Ւ +QUN­mQ&gWCUgf	Lʫ
"u:h#K2|b4o?j̙H ҙ{{FK ~q[Ϩ~PK#3   1  PK    A             ,   org/bouncycastle/x509/X509StreamParser.classUSX^
"K[Xݮ)"bwj4M:I3
:Q;{NB8=;9M/ CoExb쉄,-Ӧmw$t=qm2B/-'\	mkeygni+T !aM[d)7$/f,b?lIyTDIؾ-ٞ!ZEQu-1df7}1f.WjMtyFtb4QqM3+ui!U*#Q:\qubȼ'	k@:h4c\c}d6`pD+9Ҵu4Aon+dqFF^ge'㼌~dHV)_kX(B%Z5zcv:Mxʅ{Gw9J
ŵs, Iȕw|HxcJB؈8IhR,BDߕұr=ARCqOQhAR&U!B
M'#T~Rъ측T6mm6S
.W?bZ faV!}6C枂Q̳ɲSf s)05kto6uKa"#!})uz58{J?&p3-G[gRxůJA%y$M*͛ho(x3\	%)]`~OӁB.rL ]O#;H@ь#rHr%3\Jjdb\~VL3d$ӟ}wB즑4'?VF:tia!!.|ƥ1!xJOxW+#!;F>9]N=괗hPK  +	  PK    A             /   org/bouncycastle/x509/X509StreamParserSpi.classmPMK0~ݪsM=xzCa0P׬%#&MY(m	$yK1lGCr7-i2e<J1elݙd&SǶV&}ME䋫kLR<8W{+4ߘ̝&D3Db$+HNxeIXѾjM<].Jj{]NQkj+?%o^D:$B{4PK     PK    A             3   org/bouncycastle/x509/X509Util$Implementation.class}QMO@}WT@ 1<"=D/l%eKڅȿDb2N\dg̛ٙz p&ClrWB
uMKOHPIp}Đ3slߑ}7qW1gt)O#%|	ǽc.D 򓤝MCzao錸;
۫gRf61VMWvo -
0PՎ5L7J=)y(wP=B%nw4&&Sްk['4^IbL`d+I8ʆpc(boPK
u8  "  PK    A             $   org/bouncycastle/x509/X509Util.classX	x-ﳼ;JB#8
8ȎI6YRUZ/R#R-WhEK/zw)4V+y_/w7{؋= g
P)`j,L9z ٛ<LzV Tl4%<DP8&<pλ\#T4 Vrr`PM&{#*Ij\ŵkl,s_\K.FѰvB&툄$,ڱ?04wmuqWw?BYWco`{`{G3M3_mg``fuw\gEcKS
of8!umi@Gog7
e{;|;{uVMMi_M֨"،uC}Vd/̳M3^VwTe:zzmL.	UKzuE7,VE9!UeC=-sa6m!L"ȊC60y[Sb9!b{=!śTDXf6f:J:[Hcgtʕx\QT"TD@x8hpVPr	ƢԄF'
Jά<xDQcQ!h,CPGi}JB9n5*:LPrB;%_Һ!OBuȓPH-y^D/cy2L QUF(oEêF "ZU飞)Hɭr!1
GE"Aw4TyrRl8E
R@8#4˩q黁4TlfzǒZ?ҡz3!۞}:ndO,v+mwD84D9@x{D">Jl2i0&D
kbRS,T%vv	q#4DfMI2{cVvmΪ&6銬J#1،Ιa6ʬνԠ#
ht]䋶}s/zHCt:m1V~kW9fnsDfYE+y
hf #ގDBZ;JOgi^V]IΕi
=f@'HvrJJ=佌J#
7$}{45BVqYT==EGd2O'j0/=EDc~2-
*I-zdm[六|QMb1/D$N4(2g+zn"vg:E.&Q*`۷30@V!F7Q`=QD5@ QN[<_:4潬a*}"DqaNn+f<TLZK_z}ee"4K$xMM"X݄\"WGBt/TPMs8~e:kq8SS
-weZl=J%xnU<X!`sZ@5h(` &Z^@
6
$M@2PE:l)K@	.'b;$Kz	*	
Qk$V$xKp7Jp7Kpo-UIv	!;%xv	N	n	C|X1	>	>"G%T<-@
N'JKGj8U!s
͏,k#$)5/3xAL) 0榔IkXV;7J2zvԮ9ͯkAwfig)gmyj^NJvJSWC+24{fB4T5O?~%N;5pF=ѧq4YwPWE5&/Kϸjᦂ%	;JϬ.Ot#A~;7,Lx*YkK3a'Η~pgB.E22\ΰ`a
ëCa#fx
{nex! QO2L0L2L1gɰhIIcX
FO3Ca\,pg20b8dfXg+<GעG(.ݸBJ֞+CJZ0<"X+çp
0A(Ca)a760-XǊu C7//E|X2\a'C%=12\ΰe( .KKq.v2t1t3le/
Rv2cHx
7
a0
ϲ9A#n'^A^F7dW/22 ë3spȍŨE1nZn,$UnĽnnZǕW3\p5e^0\eL!˰]qg,Dh_O?e_4J}-hJ`c@w.?"jL몛 tCS̡g릱|0 ӯMck'Ki|$~e\)@E9rMwqn?+5k|]1S}ָpe\z4Ww0nA:^Oi^wP,/Y71mE)9S4PMvLIB~)du=QE8ߛN>u)ÜB$5O)<	n4<לCE	(=2b%ǭ-!ї&sRºG|2XU>'7hw5WC><DMk\5U	TkP4$TKK)?MA}n'KjOܚƚb3vI#.q.qЊ-.xZ_Rl6sMc /NIq=eiu	 FP4h	HO
?]%&(<Z%О::N`	SOf,ڋywQPJN@-vkcia=N<%0mzAG$s*=qh+ɎgQrfTQvnKJ
Of2{@r5ELHY)JD8Jicιc!KXO|<ްe
eR;^WuMziu!,zXKԀ(wxKXM;W.6綍{	}>VMsp𘹃Lԉ}.S*,ϑlI9]M2}Sp<~A{E> GMM;':sP~||;ﶘ'qk1?3H3;4b~mgƷ[̓v);s;;4f1_3_I,v4~bng{,渝No&Io_foGwx0wZOx*w[x||&[g-6t{6N}Fc?do7m-6}A4=]QW9
37o6~]d}[m}ғ}յ?olѾжW^dO	W?oPKh  8%  PK    A             6   org/bouncycastle/x509/X509V1CertificateGenerator.classW	|Ola	GrI6q`r(Ԡ=&ːuwZ{jһ-٠iޭ޷oefg;{}FR8Ë^EbKBPڶK	
WpB4$J8ןL%	oiKDdoi?mDMʤM
J\iKD[""4Ҩ%¤wHLĒ"%k1=,v-Ih5l9"aFRuYA,c%n%RD<Ď)3jRaazp	Ĉ.0ÌwlSª,dt.rO:gu\I67V<#G%dWZW23#*i	gzao
IPhs2uG2Ix6z,.ާׂF"3j62+l0םmwuGc
./BZlc**---
1p0z@i(Sz2F,El5koǈLKDyx=vslY)0dbFrQbl {V<p݊pKqR~9u#-LebnϜY:c"kf$A2F`)?XTΦ)+R3R@iZ]]o	mT48Șjisupcx`[]w=Jul~WcXnT1D0g
VP]e{UC5Kka8!@Z]j98Gejtm.NfFqAsz+jV2iI^srM-2Ī]nK*DFBWuՕԐiA'NkZ-73!♴~͟L
/"tJI	W:t:3\o amc=	[uϠn&0`ny<w80KKY96LͩHg.a>
)M.
i_3toPrGV@3&oLb,]F@FN蒱Zƹ2ΓFZ˸@se-ce<OE2.AF=2zeqKe\&#$cel& \𧉎Ϗ5FbûDZ*U7-)+%;v[m	V)ZG88?ZZ+-Tc.v5{z3mSRwX
|9/Lkkj<6iAsBqΫZcVnuR}CQ>Wt×TDOa~:6O}/@~
-
{SUvW}
eeUV:"ڹ-]
6=*Kt&a{U]ԓwIV|O|ֶ-S]0O)MBO3mwUr׳Xŋrs
/+U\Wx1^LFV,P
*fx	^ǭ[x*
ܽm*VvfENU.Mŕxxx+Xla,],jQUWq>l|Pc*Z!nݩb04!5f|YYܣ@Ǹ=PP`pk[<1/BUp G>`)\c,WR|MTpqq,>3,>s,>
1Tpnd7
^O*o6(WX|7Y|kR8*ӛ3O$S	=/ևh֛)v>^_jx[+o/*<H\Fꝋz'I08{<D1j?	[}j'nuP!=n83kţLY%$Yn&3Ǜ3a2SϤs*7cXMNbXא;Y?ew$}|1.n"a<b<
%b'93?dwdȿӈӉkwոt9y6^A1>ay	%)!1 Q !pKC!0q<<YyǮ0<=G?şCf"ȃB+>814|<Gȴ1諛$hB1~%%=^OS̬XUk;Wo{æjXKdޝ(6w-uf#ݞb*xz!;w^rߙ䄿>wN>xwn~Zo*9?-@Mn>uJuTA	ֵ-fW<pC1aNw$n54L?;[<txZ%;A]e\-#-:S)c
;"S֤@~dd֝Vd{Er=. <&#ht"h#hP(|8%hpCW9u9*_
tҞ35
iIT/vNw,~;gq)ę.ؐ߄!n.3X)lg
;'l~SGrœ+g PK#X	  I  PK    A             6   org/bouncycastle/x509/X509V2AttributeCertificate.classYy`}&L&79@8DфD$!nv'f7"Q<ZVQBkZ0Jmmm]{)^f	7߼lxN X*nЎvqev̳M Qb,`sTli4s$DOyԼNy[5L[V֣]Zzem[u{5wvul Uz|~H`j>
͝shz_?]D,t5A@Y|A+{՚]]Xs]hYkzHyP}jKnL'6%03*u׀ )6oԝ.)5n}{FFi UY~P W
(6Rh=j@#i(|DP_UQܡ4?ym +8h鸊D2o.]ɒ-Mt%UkNl1F)_MxRM`TJ[z81tn!EYumQ!ȏ7!Bvo_[L}nz_5!LW"PkYꀬAnܺ͐u<NʅfX_g)_㒚Bɳd0Q
6'UyUI	s.a6v!UrR#h=TٚT߼!(|f{\+VZz.K	Fnsth.Æ@5z@u߅떵сz]ޚ8l^Iˬj]ȧSӓ:j7jƐf\&Cd`Mu0N`y"M3&1p~2Ff&I$7qI85b\x&Jc1ԦfRTl0.Yc@İ)!}~52cTj")-;0|dTL拵ͯyIΟ[\A⚆ב⩘rGzT9DONPsSj/\99-r)+yuSQ09xu}Q*]OjRlUh1\qp%'MAohb-LI]H<
Xez"UB&6&g=mR\r6NH QHf<̝v%̐0SB:$\)aN	%lQ&	WI蒰Y	WK*	JNKBM6	%x%KIKCB@BP.!$a%0(	7JM5qw߫xu=?Q:~Gc"?(',}F2<vGFJ$n	7mLCdA3>(8&M%JpG㾞n\@SDp"5>]^ !L Sǂ0%@bA*QCT8bl30ǜSMK$>q3Y v%p)<n}V?gSg͌Q1ǖ$/	eQ|:	oq9)WO2ќԳ>UN(S3[tL1ŗ$a4++28/(vnfi
.`5vRP@6(x? WA)a%Vp%8"c,%Q/++
V0c0'¨9pRB|Fr|VAqJA=|AeE%750pvu,W5`>`Rp+`6
.,ŏ8c>tg~2nǟed܁2įeůw_2>'eP&aWdXCl2׃%31&	ȗ1e<3 Qǻ2[4O}O\DE'6ag0lx/l9
1ɠA)92>y2o8,
d|
b7ω22!طyt	i2b07Gd1>myIK>"ٝ˽5?]"R"1#['1%dnz
 GDWh
cbPkhv`_װXX¢aQ3,*F
R
H[,#6JCL62h//sO:&a<B/GcXfWaরztz֑;UU/dkbՋb~a !-ص#$suB<hT1zMpTbv"edg^b+,.]w#,zcʜ(UaqEWo[t+s]QkB=E_ccqcqB h-+2<r"r(d"Z6VBDNz^/ٜ'Yd.ٽKq+v| lġ7CuoC!A	a2i}.[Og(N#Û]V@)T\Q_;bIs84;aqFQ7Fp	bA@0$֍zL**Lf|,3¢LL>7-;g~nuF3%,BwAXcbyK!6
İ`IRC=]iâh:Zk'Or`{K#!kBGh|Vm=njrh\KV\Sh<&Z<EΰpbOX\1@!>H)(MQ*;2TRGl*،[³ wHoY$znJeKګ]g+!AO;NɺO]f	
f?\'#V7aӡ0ǰ1	צe}^,)fPf%7$
z"/y]CUQsh࿋YdΥlߵlFln%	k^P[9|<9#ꪚb{tc"=IxJm¥X*L14ṔSm(q
96< }\(
qq14dq1Fy-fU>`aգ4#AweV
guUȰzGHf᪓8Fm>.nn9KlDv
/H̤e!eޝ[*<+UK=&z@hJʄXm08PK:    PK    A             >   org/bouncycastle/x509/X509V2CRLGenerator$ExtCRLException.classPJ@}kMmң<QX%zR)^q) ?JT0ofvޛϯ h3TNc3+L2T#ip^<pc3Ԇ~ʱS:ti(2HQϥZT3e
C{Pl;>Q"{-U:^DXァ^C
kl4AzK'jZP Y&3lĦ[32jS,[%[Cy|}C{E((%sR忠4/o:kb7PKnpH     PK    A             .   org/bouncycastle/x509/X509V2CRLGenerator.classX	xz
FØC&Fl`bC$m* 2&g!GI惡ڦm6
86ݦ;tf+ɲ$L>;yfyo׏ ֋nT1ÍnwڍnL[גV]&PZwiy@I[vo4CZkDLn@8j{FFL4y8yc7a!jl߽]<b*#Q {_pj1O0&Sv&;qzFP-^4k#5/-Ռ`$+5i=GHNy=U6/LYWnǺ@lbv=n
r;ׂ46i g:7٘
Pfnw5ϽHL7wvv(4R3RAh.vkCZW O(d-UzfxZz|`Ԥ<u_;wnq䌆F?ktifho'5-6,DeD&3ԭ͘yCm	=bf*<Vk';@X]ecruEtwŖ?+QphQ*ωSRyL:y4$HTsif DͧnO	S;vkጝ@7Yr**"H߿/0ֿkU}am/q*Ӭ_zA*共F4ak R;CTT^ZgU@[v(ck"u:Ntd(p-)ҰboSø32jR$f[;ۂsM?CxC
s-N;\+D6ae5CO1-EYA2;ө'8vGW
ɷŞhȺ
x֥"0'>I)=k_itx2sg4H%k$J4IX/,q9$6JHJ+qHl,.!EeJl&qv];%vI\bDD	zglϽZZO p+OPYWL%bZj'eWKvn+{p:Ts&<㗤^S mz}ZjK칼m#,;~\ǻ	7kY_[麺"lH_ZtRh*0ivVҖ
k󃺩i,tnˑu9ZZ9+{uC/+jofcq뢵H2 /߶/kgro9x|}yY#=ȡ47SY$	l-4'(2d[S=gVNS)oؐSΜOr:
 ^[O[V~dJ(Ĭyu:-S%l(Īokd.c$"y=SL}gA_d7OX>QE oRjYEoQoU1oS­b>LWQb(WцXwPqYܩb)Rb%V1=*^x%PTeq"|HE/>ܫbc%}\Yx	I6?NrkLE>ɭOظZOOQ|gY|Y<

 O7,~ CC+X\ɸ+}W
WYP5kuQu<{=~
n`#l~,~,~W,~/,
nd%_f8_xBM<{3/y~
?;B1xOY,,VxqpGBithјW)}*/oqӠ=_f x`G Ô e0AUDbI<lIlf3h^QX)nu'5Ps	<C} 'l%llR/Żlp7\E	nO
XaɎ1a+)\
I1-)JF""|Dm^`y2riCLpCoeC88n#@u
y
#gFi,J%lմRz.ͫ2z]#<)݇m:{tGŜu<%qґ).e;žE p;vSc#8@R:եIQ1*f%cXR6D:Ye$''L;u	ёY#\hK:IJ
HtJ>C^G*.2߫phՏxfXLchftRTG@%3,%ѯDWU93rp+6&:'tZ8oab
_5=S܁cfeUgPP"0nqrDA+n; qn,.j[zVGmUn_}`-fN,K3Q]قs).`w]Vݴ ?+h~z`!a/B?s(ҚK[BՋGOmv:kih߈XŌߓQuZJpktD3k9(9E]UL12zZ/Fm/rҜ|y:mAINQo)el,]2r&-_Rp-SoIv4SM]=,쩷")q/)Rҭ5&P]?+Cӻɡ4:>^=-D{GQQ5"|9*eVI=vRoh=AWPKO0i    PK    A             6   org/bouncycastle/x509/X509V3CertificateGenerator.classX	xTo2ɛ/2 K20aS	d! 	h Gg &ZJZ{Ej..`7m^m}]-Jy,_}s޻{ן<`aӎIvT1ÎvA{d]S5]~!귶
mmRz:BM`jk	Ԩa3t%R3`{FY]ZZi.} 5q5fyұq=dE[FO{tUV"U~{Qgo8R;ԻhPNCvYNj6XA(!Q=='%v&Ñ-ВEFJ(iԪ{jD'K suvؓ(
<Aݩ	8.dG7)xjqG)rPXLn5~ei}G̲OH
S˗4-SP_үMnA}Gz_;5`G,>_ i	M|dT&[L{N5m[]mFsJJ?-5[aͨR>oFtrO	DW2@3FtDEawmKir+X<edWk<
pW#isiܛLPg3>m
.Q31#u `\u6nC4挜Z⽡=bĢnT@5bJl2oFw3Cc~a
J40+¨}b4JYЦ
V=G+1=zչ ͪ(scf!;d(
Qx%Pc{schbzT2ch,d3
aX\ yQڻ/}2F)+;:D@JOjq0yY
jL1#喌);zl}hؼ(.ȭ:벧7AYl	_lYSA%t?tWR\p,wt]1S3*nLy,㌢CھX,qN:RMZO*Ft:dUK73Jjv$;
I@ƥ*}%+	ӕdͽb%qJ9b9#iX̥^AT&
=lɥS]ꀫeG#aj	HX*Y2	JX.a$"UBv	.Jj	>	k$\"au:%A¥6J-a.p	[$lMpv䉺Aks4аv%MyF.KB*y).. Zh/AdǓ׎Q2K+s{U^Ș
slI~^z_1қfyÓa#*l&n^O~S0SWW RG?&hV`(-9G%9hkQF/1b壒y0g>GXh]UO
ƼvBft
dK.xLL)eewlZxw|FOhԶ8]k{'7͹JI.xQE#%H#gʬpBe1]sZ6ec2gfՉݑ3vl,yLFs~|䬖eS]ඣ4	1~1o0o
cq|Xd#2by>!c>)c"PXYsxd,§d\b"c2G12HȨqn>!c12S2i}8!#b:Ni32Y,dxFFE-eE%9e|}7d42[lKm~{Q|;,[w2<>!18kqm?A!sxف[w+ml6́XNt._[܃?:p
_Y?Yū,5oMExi="Jg>?Xg1A
8EBH,,X8Xqx^)ܮF*ouUAߵNts6S=H
HprқӗEƓRxROJ~INJj-G1!1=zĚA1^AQCA1^AQOf1M0MMTx\T'DޅLR؈0󨘔s|8C✓5exDcBB($A%َ!L)¤=$ʣMc?,I
	qnBb\dNPD1TKYJ+ M43${Xa!w	BFW+7N<"raym='C
Xv%LGT\!a9jjhzajzmw{Es\tAȃ'M~PLft\D;鲆\&]	Ԛ"&!rbfω

{)='`ntjo[䙾.LUHԌx}HY1nøaH43^*Cb^XP.m4Up%(fIUO)(2:#LʵD)O{'w˭)s4U
lB7G
ݘn8KHyͶ۳8wR!V=Yc;.5=jh\v4p4`VvN9OR?S	{ U87fƛY

b3)EDo1J}=!:il;pdP
pаe'}UVm>oZ4ݞj*.7@%\Bz4[LZRZUبvrrr<)	j
];@s$knx7%DO:,h7=kh`j@#r+rCJ
l3遞IxKMɐX{XcYoMvՔbh¼4ŧ;a+&	;񔀫hapbmIG5M4&ѳjY5xy\\¡Z8ԊԌBt-^mV+w
oHE|6jq&1ѬԺ8!.VB\.t]&%Ѯ#]-ør( qn*.SW0AIzWOX4		pH&iܒ\(CIoݱd%PK	O
  "  PK
      A                 org/bouncycastle/x509/extension/PK    A             E   org/bouncycastle/x509/extension/AuthorityKeyIdentifierStructure.classV[WWQ]$A)j@(Q5jMm`ĹP7{}OhlY}O{bHBKbgs8O S;ۡ*X&{YA(:5rum#myGMceg¦t<k2
O3,#vZ&Ӱ{pəu;{Sldؼ'mVld}r
v
Ԍl3sKPl-m3l[y亾t8|αlY4=
ǕR.T2;ied')\/O;1rYmIdF}+攛Ȭ]GLd݁ەXނ猬&Z5I˘
WFX+iP
b9'O|\0
Jpxrb`rjF /V^7|9P4Ow-Ǭiv7Sn"{NI[:1KzR_
I?TY=Si0e[[SYj@A*f&N݊WeXAf*!:Ig-Ϛ^(v.GvxLq]an'v++
o!^$:^}ɽ%Rok=?_ۗTZʵc9T{()3j;%dփҘ!˒2~XbzS0\yl_Cl`Zi+:G/3lb
v\/7XIR
;ikЅȪts\U{Pi_+	}zhe4	
۰F@Hzj԰N<a+Ni؂4l
נ,C&؜csMRC.CZhװW4l@JFƋ*`J ^feɩbSxMd3i*Uq\c3&&W)}FfUuG8ƾg8l+zNʼ#YAzw]Y#o<tS8GhCvWƭpx~a _I5O+*_FRj/Ho~`7^7㡮
[OuE|\/4"
 !R2C%1Q)
}
XX[wp#*|;rF<vA$6
.JD>N7[&4|h#3X&R$z;Uf%U`PӥŶ
~SP N]́PKJ}  $
  PK    A             7   org/bouncycastle/x509/extension/X509ExtensionUtil.classVWW
/LFEXZp
Z1
.H[GM&83A}lX?(T37D3w߽{{g?o.0	![)	ŭY$ThjTb{j%ΞPo^FdsKd"0f6P$Typ⺩%j<%q-nqCW-mw	nJXN2B-iz137fzIMSD=xG,┋IqehzL*1N٬]Sc]I	Ϊfg8Op]xҊC;=>-uG#|آeѸ|yhEu"291RZ<
	l#)C|nXvڐQ-ޣ&+bprgSKQ6}vIQxrh{2lU` RpCuKs׭Q+C	F7L鑱jZqSM#ɨ:fg9IEmH$idQlX'epvV/vkAʬ8#x Yif	|tgS(nӄ,H􁓰i!S㎿3vQCcܠhAZvM|%TE6+yG!\V2ꔞHFܢ;򛓍{a5121cXϰa#&/C=CC#|MgA'4\~	[oHW{CܡΤo>X\坉dNz{u1\ޫ)d*@>\윓ƛ;Ly2Nz;qmbfV꺰V/Er!9dڲ ӂ(/-x
\Up/%
cU(UP2-8`3+qBAN*X!J!b1,)n(XT<`N+PpF!PFDrDB	l9ڡ8/Ï2Za؋}bLgd&xV!B<'02BxJƃx\F2.(q!%aXQ<&n`]n tRמ?>lpQ_S{IFw}⌢x tf+	anEΈ ԫIYBߊ	||Íi|Dk6zKJN[d,4>Hp.?myOQWj),i軮/tm
mx/L3OӸܹeIh	|ٕa))ݚjWKpBLD@qѻށ+K/&U\t	|ƕ,87qd?GiYpWҟ>J)EiƛxFcM$K)}_Oa?qs2<R_)F]P`踅3=jgͿpIg#Dk^$PKg    PK
      A                org/bouncycastle/x509/util/PK    A             0   org/bouncycastle/x509/util/LDAPStoreHelper.classZ	x[y[(÷-(l'C4(D$ 
-PhKKP@Cݻ!mM)=(^@g{dIvZ/|owggvgfgwg? kOJ@	$X!j	j%@$KJQ	E \AUBUBNUuh]Ý+ڸn׋N kUѼDo^ƥPu=
\M5Ԩ!F|_G/@oTpMYi6nݵw΍:z{[vu^ܳA޴v:g_Gko]}vnձqYo׮-=:.Fcul꼜a3uAw_4GXdP#o4roΜ+#ށR5@-
LQԽpot^S~oO}C|]ȨQ$Ak>4^/6ߐ7%WB
`!0i"hECC$0i48ZoE`Rª7%ݣQ!ޮ
áH$So/
=nn]!y?j?DG[VIo)>ԧݦ^3
:A:e#ODh˂aSF9.VRqVYzh(91dW0ۇT>k8z!#Iyѕyf6V:%zkMH<]u޼:b^Tq#ҹs2Ί9H<3Wr{p̕13ӜvmFԍ=jϲ緩S6U.ӈB2J	mVܡ:Ol|i=4SCӄtghéQ
DYch|uzft櫂B0ЎDO
|5!(Lkhs(0ëDA[xs>au߈y]51ƺXSX#Ri"uTg.T=1W߼:O}gjg
x`:lpRuZ#ftH
f<|"eg"z3:[
w)w:4mH!rizvI\:RJMf3r
E([?tT[`:0eOG=901zpU^m:9UnDk"ZֺLߣg
%z)m7H/4wSOǀ5WɱĽKN1uCn^V<ڨarXsKG,]Q'ZnќDv*mԯifC:4Ѷpww@5v{C6`g0|i'
%H=zp'a}M,J#@7ՊL6Og&ިuKF[2ܘ%=c_0Ai;x'$y	6RQR{U?
T-Z kS.AV쉀JeHx,{֮Cnn.%g?N5mVeԷuuVcpYzhFй{}6wf#_nRGO:0%
uu(<
h@u{#&wk_OS~HGs'gdq^<?<Q-H/;4ÏڹEhŸ1A,WDg_5]l)fb-'4'KpbĲ5Eb~i'2̆ye -N,ڤH̎$I1Aq(ֆެF؛MY6ΰps0/ڙ^@F~&1>EBSEIȍp.tVPWXthim}>=FF<aVgE1:rʝ]Mt	+ht8$X&r	%I
tIaDp(c"q>!'E3"|VωpTE8&#"<*c"0!"LyD_	O_"|MD"|KE/+D?"H~*ȇ>.J4u"	-'Tc{=.6MI8:3gSkt0qSKuzTJZS(%_9TUg\̚j7MHQ*}9UKM钤cWAVY1NeJdK$,W+ JbΜ@'<JwUtsH̵XnM:ן~;n(ӜMh}DiEP?$fHӝvj^1@gh^1祖(}6jɦ`<h}ccVStYP:E=Ϊ<jR&'>C>Ӊ{/[y^i n;R!}&#g*xg4ޜ{FLkK9)钡{kx^)H8~IMƚ|Ns~=?xf7RiRU<lQV@/1lbǰ

!(Q0RB-Rbn.QEUTxN>Un(ЌE2<Ѓ+av2\pT=a5(Íof-oemogx-2NpWp/TbH0[x7)0
Ǎ
e&PDË7+p	v*DR..n+a-
7(p*Ћ}
lg8-^p;~f/Wo~p'T\RU`
V`CUG!Zѯ@U`#S

`H8@^v<#QQx2d!21|O0<p2ZY֊Sц(qSgyx=-2DMB'd\ev[q9~S2V.c9Wd\qda>pý1|~d(>0qO0|Sfg>pac0<q5pܬf7+YJnVqUܬe_X~/X_.7N3|26rG#w4~cĽMfwdo1e2`'ÿ\D..kdx\tM"-0,sG1?eK;ޕWʲ,[ʲF73a	؀O3|{ E	o_8=reAp{h?E}ޑmr2= $ƠVh".@>Mm*J\
yZB k&pf
BcZMcxaKG ĕ),v:ĸQ[(:r_ky|L	aQwQm1 hN:-_$ʧj{HJ3Qu\sX	e\[,Np?xiqS_@UR-z20.`2b&L3/Lc3?q6caq-9,]ZC쇓aXPc\4'v
jD:4Or/&7|Y,Rk
ҞIe
籺,;҄
.B?oA8&ԸEj_veRM
`̗='Ip]W1XNKR"VoQėDWsJa)'+zlkhE[qaGJhr1.8TD=6
sZNăesY	 uZkꍵw\/u&ɺ86KZ=
/r	!".X=E<#cMb
h_)y_:W5";G."!˘N2.ƅi(6j	7W
HNIs85bzHk2`nhy$#)0dB)q`ĮGB,z44s1.\>
Ndi'Iݯ4]ӰIAص \ivs²P̵Xfr0)6iph\ =\g߹Y;W4)>L{;͟5qxE[Os!f7ƻ{!
\+x"6bX" 8V->	K x%9%ƚњRi1ylyaKL
oWw4)+r}`<\L
%@"$*Dig.Q.Ѽk[Ǟ";e**g=*ʼc3:OCU̻JNA) Iȣ=|ZDYD[@K3`b*qr.n%Z\t?	kXQl%[5Dl%؜z=N띶f!aF<5iPk_8h&Qt\Qb&Lan.bZE;
e[}KN3-}RcI!sƅ}mѤp/R&Iah;8	a?@xc䱧3y'/l$@#0>6I8_
DSxғGUpڿ떜OBN
p4*'`p(+ߨ3U@N؈
p؞;))ՙ
*)SXR-1Hus:kf:t;8Y8
){|<d皤SXIԭ6VImB\7ZǱc^stVrFoRX7OJ+[1.|\X5xsBX=!\C;ςuh6[
A[vu$s.r
G`e4&NA.NBͅVlN@e
DkZ?w⺚ڗ̙^tc5<դuD
%Krq6m/zQoRS[WL7z5.+:O
+r
dt*-sIC|EW22Ww\I̨qILןe/˨qIMWeGpF~Z&K13i|68n
CzᯡGL<fu01!3~ɐM&C:)fɮ7oū2h\axI$oi|(Yz
7$4>45ޕQ4ve3F9&[M9Qx3iѤ,!ƤƵg9*}|I6-g+cDS|n
'iRWH(y@G}9&I] 7éaN<-QƟb腱=<K]@AV{/Ա/7VL.YʟEӒJe(}y
ڄW WL z
? 	ްNV<V7
ufʏ+*dţuFEG12{B5YʘJaNQ{E߃7>M3NaY?'5QO"s@)xB*AN)pXFC1Y!:VPE<-hE#xN>=/?W(|\щlPKsA  @  PK    A             -   org/bouncycastle/x509/util/StreamParser.class@R$IMB	iڬV[Ws JL%D|3f
B7g)L#
Z 3"
/̭V碰{k<ɕ!Lڌh]d,%ȃF
GoLk
VB;ɤ OPK>Ѯ     PK    A             7   org/bouncycastle/x509/util/StreamParsingException.classuJ@KKkRa*B*n;[CIg$h}+EpP!vr8;	]wvʍ"4&ȹܿR$b{!,s[)KXNEt*]Jf6N8?8죜jڂO0;g BDpF B	Av](yUe$6w=:/@	TuKG<k PKX   _  PK   Vz[몬F 5                 META-INF/MANIFEST.MF  PK   Wz[[[S6 !^              F META-INF/BC2048KE.SFPK   Wz[LW  B"               v} META-INF/BC2048KE.DSAPK
 
      A             	             ԗ META-INF/PK
 
      A                           META-INF/services/PK     A 8C9   p   (             + META-INF/services/java.security.ProviderPK
 
      A                           META-INF/versions/PK
 
      A                           META-INF/versions/11/PK
 
      A                           META-INF/versions/11/OSGI-INF/PK     A f    )             Y META-INF/versions/11/OSGI-INF/MANIFEST.MFPK
 
      A                           META-INF/versions/11/org/PK
 
      A             &             M META-INF/versions/11/org/bouncycastle/PK
 
      A             -              META-INF/versions/11/org/bouncycastle/jcajce/PK
 
      A             6             ܛ META-INF/versions/11/org/bouncycastle/jcajce/provider/PK
 
      A             A             0 META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/PK
 
      A             F              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/PK     A "3  :  ]              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/BC11XDHPrivateKey.classPK     A     \             D META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/BC11XDHPublicKey.classPK     A D   B  b              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519.classPK     A c&j  y  q             + META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519UwithSHA256CKDF.classPK     A e  m  p             4 META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519UwithSHA256KDF.classPK     A FRi  w  p             7 META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256CKDF.classPK     A 9M.c  m  p             > META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256HKDF.classPK     A bzc  k  o             ? META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256KDF.classPK     A xTij  w  p             ? META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA384CKDF.classPK     A #Zi  w  p             G META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA512CKDF.classPK     A +H   >  `             N META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448.classPK     A 
i  u  o              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448UwithSHA512CKDF.classPK     A :kb  i  n             ĵ META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448UwithSHA512KDF.classPK     A  g  s  n             · META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA256CKDF.classPK     A <#g  s  n             Ź META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA384CKDF.classPK     A &Ag  s  n             Ȼ META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512CKDF.classPK     A \a  i  n             ˽ META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512HKDF.classPK     A )
a  g  m             ȿ META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512KDF.classPK     A ;si   <  _              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$XDH.classPK     A 7
  #  [             1 META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi.classPK     A `a   E  a              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed25519.classPK     A Ӵ   A  _             @ META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed448.classPK     A 6!   @  _              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$EdDSA.classPK     A @]   C  `             & META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X25519.classPK     A 
   ?  ^              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X448.classPK     A xވ   <  ]              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$XDH.classPK     A G
  B   Y             u META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi.classPK     A u>   7  g             C META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed25519.classPK     A    3  e              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed448.classPK     A ]o   3  e              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$EdDSA.classPK     A -k   5  f             z META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X25519.classPK     A S7   1  d              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X448.classPK     A    0  c             F META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$XDH.classPK     A @ޢ	    _              META-INF/versions/11/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi.classPK
 
      A                           META-INF/versions/15/PK
 
      A                          
 META-INF/versions/15/OSGI-INF/PK     A f    )             F META-INF/versions/15/OSGI-INF/MANIFEST.MFPK
 
      A                           META-INF/versions/15/org/PK
 
      A             &             : META-INF/versions/15/org/bouncycastle/PK
 
      A             -             ~ META-INF/versions/15/org/bouncycastle/jcajce/PK
 
      A             6              META-INF/versions/15/org/bouncycastle/jcajce/provider/PK
 
      A             A              META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/PK
 
      A             F             | META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/PK     A 	  F  _              META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/BC15EdDSAPrivateKey.classPK     A l	b  )  ^             1	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/BC15EdDSAPublicKey.classPK     A ݲʢ   E  a             {	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed25519.classPK     A ٦   A  _             	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed448.classPK     A 
~{   @  _             e	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$EdDSA.classPK     A 0;   C  `             	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X25519.classPK     A )   ?  ^             J
	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X448.classPK     A -   <  ]             	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$XDH.classPK     A   '  Y             %
	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi.classPK     A $mO   7  g             	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed25519.classPK     A B>   3  e             3	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed448.classPK     A XAY   3  e              	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$EdDSA.classPK     A >q   5  f             !	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X25519.classPK     A Y?K   1  d             f#	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X448.classPK     A ~   0  c             $	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$XDH.classPK     A Ŧ	    _             +&	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi.classPK     A f   >  `             ^0	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$Ed25519.classPK     A (   :  ^             1	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$Ed448.classPK     A U   6  ^             ;3	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$EdDSA.classPK     A _
    X             4	 META-INF/versions/15/org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi.classPK
 
      A                          ?	 META-INF/versions/21/PK
 
      A                          @	 META-INF/versions/21/OSGI-INF/PK     A 7Of    )             L@	 META-INF/versions/21/OSGI-INF/MANIFEST.MFPK
 
      A                          	B	 META-INF/versions/21/org/PK
 
      A             &             @B	 META-INF/versions/21/org/bouncycastle/PK
 
      A             -             B	 META-INF/versions/21/org/bouncycastle/jcajce/PK
 
      A             6             B	 META-INF/versions/21/org/bouncycastle/jcajce/provider/PK
 
      A             A             #C	 META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/PK     A ZN    U             C	 META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/MLKEM$Mappings.classPK     A 8    L             	I	 META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/MLKEM.classPK
 
      A             G             J	 META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/mlkem/PK     A 07K  a  a             J	 META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMDecapsulatorSpi.classPK     A RD!R  
  a             P	 META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMEncapsulatorSpi.classPK     A R  +  U             W	 META-INF/versions/21/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMSpi.classPK
 
      A             *             Z[	 META-INF/versions/21/org/bouncycastle/pqc/PK
 
      A             1             [	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/PK
 
      A             :             [	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/PK     A 8  m  L             I\	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/HQC$Mappings.classPK     A )T    C             a	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/HQC.classPK     A @]    M             c	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/NTRU$Mappings.classPK     A @Do    D             Hg	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/NTRU.classPK     A ǂ    R             h	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/NTRUPrime$Mappings.classPK     A W7    I             m	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/NTRUPrime.classPK
 
      A             >             jo	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/hqc/PK     A  @  +  V             o	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/hqc/HQCDecapsulatorSpi.classPK     A ,%=  y
  V             u	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/hqc/HQCEncapsulatorSpi.classPK     A vE    M             K|	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/hqc/HQCKEMSpi.classPK
 
      A             ?             	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntru/PK     A :WE  ;  X             8	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntru/NTRUDecapsulatorSpi.classPK     A D$%  8  X             	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntru/NTRUEncapsulatorSpi.classPK     A P    O             R	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKEMSpi.classPK
 
      A             D             	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntruprime/PK     A   :  c             L	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeDecapsulatorSpi.classPK     A .    c             	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeEncapsulatorSpi.classPK     A 7%  A  Z             
	 META-INF/versions/21/org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeKEMSpi.classPK
 
      A                          	 META-INF/versions/25/PK
 
      A                          	 META-INF/versions/25/org/PK
 
      A             &             !	 META-INF/versions/25/org/bouncycastle/PK
 
      A             -             e	 META-INF/versions/25/org/bouncycastle/jcajce/PK
 
      A             6             	 META-INF/versions/25/org/bouncycastle/jcajce/provider/PK
 
      A             :             	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/PK     A Zݚ    M             \	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/HKDF$Mappings.classPK     A =    D             q	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/HKDF.classPK     A s  g  R             	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/PBEPBKDF2$Mappings.classPK     A Pmr    I             9	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/PBEPBKDF2.classPK     A RͶg    O             ǫ	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/SCRYPT$Mappings.classPK     A |8+o    F             	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/SCRYPT.classPK
 
      A             ?             1	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/hkdf/PK     A f$X  @  [             	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/hkdf/HKDFSpi$HKDFwithSHA256.classPK     A GVX  @  [             o	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/hkdf/HKDFSpi$HKDFwithSHA384.classPK     A h^X  @  [             P	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/hkdf/HKDFSpi$HKDFwithSHA512.classPK     A ^  
  L             1	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/hkdf/HKDFSpi.classPK
 
      A             D             	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PK     A <DP    e             	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2with8BIT.classPK     A ʃd  ^  i             A	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withGOST3411.classPK     A qc  X  g             <	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA224.classPK     A c  X  g             4	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA256.classPK     A uB)id  X  g             ,	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA384.classPK     A  ֦n  d  i             %	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA3_224.classPK     A :m  d  i             *	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA3_256.classPK     A o  d  i             .	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA3_384.classPK     A ?im  d  i             4	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA3_512.classPK     A 0c  X  g             8	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA512.classPK     A c~˔q  k  k             0	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA512_224.classPK     A Hup  k  k             :	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSHA512_256.classPK     A _  O  d             C	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withSM3.classPK     A Rc  R  e             4	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi$PBKDF2withUTF8.classPK     A Vw    V             *	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/pbepbkdf2/PBEPBKDF2Spi.classPK
 
      A             A             r	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/scrypt/PK     A @:    _             	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/scrypt/ScryptSpi$ScryptWithUTF8.classPK     A  o8  	  P             i	 META-INF/versions/25/org/bouncycastle/jcajce/provider/kdf/scrypt/ScryptSpi.classPK
 
      A             2             	 META-INF/versions/25/org/bouncycastle/jcajce/spec/PK     A !   T  K             	 META-INF/versions/25/org/bouncycastle/jcajce/spec/PBKDF2ParameterSpec.classPK     A qT      K             	 META-INF/versions/25/org/bouncycastle/jcajce/spec/ScryptParameterSpec.classPK
 
      A                          	 META-INF/versions/9/PK
 
      A                          	 META-INF/versions/9/OSGI-INF/PK     A 9_e    (             0	 META-INF/versions/9/OSGI-INF/MANIFEST.MFPK
 
      A                          	 META-INF/versions/9/org/PK
 
      A             %             !	 META-INF/versions/9/org/bouncycastle/PK
 
      A             *             d	 META-INF/versions/9/org/bouncycastle/asn1/PK     A $BI  @  ?             	 META-INF/versions/9/org/bouncycastle/asn1/ASN1BMPString$1.classPK     A 3    =             b	 META-INF/versions/9/org/bouncycastle/asn1/ASN1BMPString.classPK     A tdW  5  ?             	 META-INF/versions/9/org/bouncycastle/asn1/ASN1BitString$1.classPK     A x    =             	 META-INF/versions/9/org/bouncycastle/asn1/ASN1BitString.classPK     A >z   Z  C             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1BitStringParser.classPK     A uJ  :  =             -
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Boolean$1.classPK     A O?	    ;             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Boolean.classPK     A Q   T   :             T
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Choice.classPK     A tw      =             

 META-INF/versions/9/org/bouncycastle/asn1/ASN1Encodable.classPK     A 5B    C             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1EncodableVector.classPK     A z      <             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Encoding.classPK     A N  E  @             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Enumerated$1.classPK     A _1y    >             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Enumerated.classPK     A 
8   t  =             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Exception.classPK     A %sf.    >             G
 META-INF/versions/9/org/bouncycastle/asn1/ASN1External$1.classPK     A 'w	    <              
 META-INF/versions/9/org/bouncycastle/asn1/ASN1External.classPK     A s9   )  B             6+
 META-INF/versions/9/org/bouncycastle/asn1/ASN1ExternalParser.classPK     A <NmJ  L  C             j,
 META-INF/versions/9/org/bouncycastle/asn1/ASN1GeneralString$1.classPK     A     A             %.
 META-INF/versions/9/org/bouncycastle/asn1/ASN1GeneralString.classPK     A lQ  R  E             B4
 META-INF/versions/9/org/bouncycastle/asn1/ASN1GeneralizedTime$1.classPK     A +w
    C             6
 META-INF/versions/9/org/bouncycastle/asn1/ASN1GeneralizedTime.classPK     A CK  L  C             C
 META-INF/versions/9/org/bouncycastle/asn1/ASN1GraphicString$1.classPK     A l(4  n  A             ME
 META-INF/versions/9/org/bouncycastle/asn1/ASN1GraphicString.classPK     A u2J  @  ?             sK
 META-INF/versions/9/org/bouncycastle/asn1/ASN1IA5String$1.classPK     A      =             *M
 META-INF/versions/9/org/bouncycastle/asn1/ASN1IA5String.classPK     A n5  -  ?             T
 META-INF/versions/9/org/bouncycastle/asn1/ASN1InputStream.classPK     A ]J  :  =             f
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Integer$1.classPK     A 	    ;             Ah
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Integer.classPK     A BII|`  ^  :             q
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Null$1.classPK     A ʶ  n  8             ws
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Null.classPK     A 4g}K  L  C             w
 META-INF/versions/9/org/bouncycastle/asn1/ASN1NumericString$1.classPK     A t    A             y
 META-INF/versions/9/org/bouncycastle/asn1/ASN1NumericString.classPK     A Sj
h    :             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Object.classPK     A Df=    F             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1ObjectDescriptor$1.classPK     A O]    D             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1ObjectDescriptor.classPK     A  ?OT  W  F             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1ObjectIdentifier$1.classPK     A -  D  N             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle.classPK     A crx    D             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1ObjectIdentifier.classPK     A >Q    A             p
 META-INF/versions/9/org/bouncycastle/asn1/ASN1OctetString$1.classPK     A n    ?             0
 META-INF/versions/9/org/bouncycastle/asn1/ASN1OctetString.classPK     A       E             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1OctetStringParser.classPK     A =  
  @             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1OutputStream.classPK     A ǚ    D             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1ParsingException.classPK     A i[Sq  y  =             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Primitive.classPK     A hJK  R  E             \
 META-INF/versions/9/org/bouncycastle/asn1/ASN1PrintableString$1.classPK     A 
    C             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1PrintableString.classPK     A #P  H  A             -
 META-INF/versions/9/org/bouncycastle/asn1/ASN1RelativeOID$1.classPK     A =v
    ?             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1RelativeOID.classPK     A 7    >             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Sequence$1.classPK     A   3  >             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Sequence$2.classPK     A J    >             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Sequence$3.classPK     A _o	    <             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Sequence.classPK     A P   )  B             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1SequenceParser.classPK     A _mҳ'    9             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Set$1.classPK     A }    9             n
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Set$2.classPK     A ):N  p  9             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Set$3.classPK     A N    7             y
 META-INF/versions/9/org/bouncycastle/asn1/ASN1Set.classPK     A j   $  =             ,
 META-INF/versions/9/org/bouncycastle/asn1/ASN1SetParser.classPK     A */.
    @             S
 META-INF/versions/9/org/bouncycastle/asn1/ASN1StreamParser.classPK     A XJ;k      :             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1String.classPK     A A
J  @  ?             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1T61String$1.classPK     A ^    =             y
 META-INF/versions/9/org/bouncycastle/asn1/ASN1T61String.classPK     A     7              META-INF/versions/9/org/bouncycastle/asn1/ASN1Tag.classPK     A 3  %  @             
 META-INF/versions/9/org/bouncycastle/asn1/ASN1TaggedObject.classPK     A  U    F              META-INF/versions/9/org/bouncycastle/asn1/ASN1TaggedObjectParser.classPK     A @2.    8             ` META-INF/versions/9/org/bouncycastle/asn1/ASN1Type.classPK     A `J  :  =              META-INF/versions/9/org/bouncycastle/asn1/ASN1UTCTime$1.classPK     A WA"	  
  ;              META-INF/versions/9/org/bouncycastle/asn1/ASN1UTCTime.classPK     A TJ  C  @             4# META-INF/versions/9/org/bouncycastle/asn1/ASN1UTF8String$1.classPK     A @  j  >             $ META-INF/versions/9/org/bouncycastle/asn1/ASN1UTF8String.classPK     A >'F  R  E             * META-INF/versions/9/org/bouncycastle/asn1/ASN1UniversalString$1.classPK     A s"    C             , META-INF/versions/9/org/bouncycastle/asn1/ASN1UniversalString.classPK     A R  	  A             H4 META-INF/versions/9/org/bouncycastle/asn1/ASN1UniversalType.classPK     A 	    B             8 META-INF/versions/9/org/bouncycastle/asn1/ASN1UniversalTypes.classPK     A c|	     8             ; META-INF/versions/9/org/bouncycastle/asn1/ASN1Util.classPK     A L  O  D             E META-INF/versions/9/org/bouncycastle/asn1/ASN1VideotexString$1.classPK     A p7{    B             G META-INF/versions/9/org/bouncycastle/asn1/ASN1VideotexString.classPK     A 2]J  L  C             M META-INF/versions/9/org/bouncycastle/asn1/ASN1VisibleString$1.classPK     A @    A             FO META-INF/versions/9/org/bouncycastle/asn1/ASN1VisibleString.classPK     A 5  
  <             dU META-INF/versions/9/org/bouncycastle/asn1/BERBitString.classPK     A ׭    B             n[ META-INF/versions/9/org/bouncycastle/asn1/BERBitStringParser.classPK     A   l  :             _ META-INF/versions/9/org/bouncycastle/asn1/BERFactory.classPK     A p>(    >             a META-INF/versions/9/org/bouncycastle/asn1/BEROctetString.classPK     A G    D             #f META-INF/versions/9/org/bouncycastle/asn1/BEROctetStringParser.classPK     A dHT  g  ;             i META-INF/versions/9/org/bouncycastle/asn1/BERSequence.classPK     A D    A             m META-INF/versions/9/org/bouncycastle/asn1/BERSequenceParser.classPK     A C>    6             Lp META-INF/versions/9/org/bouncycastle/asn1/BERSet.classPK     A >; D    <             r META-INF/versions/9/org/bouncycastle/asn1/BERSetParser.classPK     A g~  q  ?             u META-INF/versions/9/org/bouncycastle/asn1/BERTaggedObject.classPK     A b_    E             y META-INF/versions/9/org/bouncycastle/asn1/BERTaggedObjectParser.classPK     A >⩾  J  7             Y} META-INF/versions/9/org/bouncycastle/asn1/BERTags.classPK     A V8  	  D             | META-INF/versions/9/org/bouncycastle/asn1/ConstructedBitStream.classPK     A ![R  c  F             m META-INF/versions/9/org/bouncycastle/asn1/ConstructedOctetStream.classPK     A  в     <              META-INF/versions/9/org/bouncycastle/asn1/DERBMPString.classPK     A H:O    <             ʊ META-INF/versions/9/org/bouncycastle/asn1/DERBitString.classPK     A Q{    ;              META-INF/versions/9/org/bouncycastle/asn1/DERExternal.classPK     A l    A              META-INF/versions/9/org/bouncycastle/asn1/DERExternalParser.classPK     A :r  l  :              META-INF/versions/9/org/bouncycastle/asn1/DERFactory.classPK     A       @               META-INF/versions/9/org/bouncycastle/asn1/DERGeneralString.classPK     A |    B             ! META-INF/versions/9/org/bouncycastle/asn1/DERGeneralizedTime.classPK     A `      @              META-INF/versions/9/org/bouncycastle/asn1/DERGraphicString.classPK     A &   /  <              META-INF/versions/9/org/bouncycastle/asn1/DERIA5String.classPK     A     7              META-INF/versions/9/org/bouncycastle/asn1/DERNull.classPK     A {   7  @              META-INF/versions/9/org/bouncycastle/asn1/DERNumericString.classPK     A 4A    >             4 META-INF/versions/9/org/bouncycastle/asn1/DEROctetString.classPK     A  EL    D              META-INF/versions/9/org/bouncycastle/asn1/DEROctetStringParser.classPK     A     ?             Z META-INF/versions/9/org/bouncycastle/asn1/DEROutputStream.classPK     A -   ;  B              META-INF/versions/9/org/bouncycastle/asn1/DERPrintableString.classPK     A Մ*    ;              META-INF/versions/9/org/bouncycastle/asn1/DERSequence.classPK     A VPg  	  6             u META-INF/versions/9/org/bouncycastle/asn1/DERSet.classPK     A v     <             @ META-INF/versions/9/org/bouncycastle/asn1/DERT61String.classPK     A Gg  4  ?             s META-INF/versions/9/org/bouncycastle/asn1/DERTaggedObject.classPK     A fmа      =              META-INF/versions/9/org/bouncycastle/asn1/DERUTF8String.classPK     A zŤ      B              META-INF/versions/9/org/bouncycastle/asn1/DERUniversalString.classPK     A  H      A             μ META-INF/versions/9/org/bouncycastle/asn1/DERVideotexString.classPK     A !      @              META-INF/versions/9/org/bouncycastle/asn1/DERVisibleString.classPK     A p    ;              META-INF/versions/9/org/bouncycastle/asn1/DLBitString.classPK     A 善    A             8 META-INF/versions/9/org/bouncycastle/asn1/DLBitStringParser.classPK     A Ձ\  u  :             + META-INF/versions/9/org/bouncycastle/asn1/DLExternal.classPK     A Icd  e  9              META-INF/versions/9/org/bouncycastle/asn1/DLFactory.classPK     A d'H    >              META-INF/versions/9/org/bouncycastle/asn1/DLOutputStream.classPK     A 6x9    :              META-INF/versions/9/org/bouncycastle/asn1/DLSequence.classPK     A z^n3  {  @             I META-INF/versions/9/org/bouncycastle/asn1/DLSequenceParser.classPK     A     5              META-INF/versions/9/org/bouncycastle/asn1/DLSet.classPK     A 2    ;              META-INF/versions/9/org/bouncycastle/asn1/DLSetParser.classPK     A s    >              META-INF/versions/9/org/bouncycastle/asn1/DLTaggedObject.classPK     A bjC    D              META-INF/versions/9/org/bouncycastle/asn1/DLTaggedObjectParser.classPK     A ٨    I              META-INF/versions/9/org/bouncycastle/asn1/DefiniteLengthInputStream.classPK     A )      E             6 META-INF/versions/9/org/bouncycastle/asn1/InMemoryRepresentable.classPK     A Ʀ?  8  K             Q META-INF/versions/9/org/bouncycastle/asn1/IndefiniteLengthInputStream.classPK     A b?k    K             Y META-INF/versions/9/org/bouncycastle/asn1/LazyConstructionEnumeration.classPK     A 
;    C              META-INF/versions/9/org/bouncycastle/asn1/LazyEncodedSequence.classPK     A węU    B             9 META-INF/versions/9/org/bouncycastle/asn1/LimitedInputStream.classPK     A Zw  h  :              META-INF/versions/9/org/bouncycastle/asn1/LocaleUtil.classPK     A ɝV  o  <             , META-INF/versions/9/org/bouncycastle/asn1/OIDTokenizer.classPK     A U[&  W  :             +  META-INF/versions/9/org/bouncycastle/asn1/StreamUtil.classPK
 
      A             0              META-INF/versions/9/org/bouncycastle/asn1/anssi/PK     A RЭQ    H              META-INF/versions/9/org/bouncycastle/asn1/anssi/ANSSINamedCurves$1.classPK     A 6S6i    F              META-INF/versions/9/org/bouncycastle/asn1/anssi/ANSSINamedCurves.classPK     A c   i  L              META-INF/versions/9/org/bouncycastle/asn1/anssi/ANSSIObjectIdentifiers.classPK
 
      A             -             x
 META-INF/versions/9/org/bouncycastle/asn1/bc/PK     A ~  P  F             
 META-INF/versions/9/org/bouncycastle/asn1/bc/BCObjectIdentifiers.classPK
 
      A             4             * META-INF/versions/9/org/bouncycastle/asn1/cryptopro/PK     A ̛  [	  T             ;+ META-INF/versions/9/org/bouncycastle/asn1/cryptopro/CryptoProObjectIdentifiers.classPK     A )    Q             / META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$1.classPK     A mR    Q             2 META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$2.classPK     A     Q             X6 META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$3.classPK     A 'ma  J  Q             9 META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$4.classPK     A ~=y|  S  Q             = META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$5.classPK     A PI ~  Q  Q             A META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$6.classPK     A      Q             E META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$7.classPK     A /Z  y  O             JJ META-INF/versions/9/org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves.classPK     A p!B  z
  X             Q META-INF/versions/9/org/bouncycastle/asn1/cryptopro/GOST3410PublicKeyAlgParameters.classPK
 
      A             -             7V META-INF/versions/9/org/bouncycastle/asn1/gm/PK     A 0P/    B             V META-INF/versions/9/org/bouncycastle/asn1/gm/GMNamedCurves$1.classPK     A ˳;    B             !Z META-INF/versions/9/org/bouncycastle/asn1/gm/GMNamedCurves$2.classPK     A 0A"  
  @             ] META-INF/versions/9/org/bouncycastle/asn1/gm/GMNamedCurves.classPK     A /   E  F             Ic META-INF/versions/9/org/bouncycastle/asn1/gm/GMObjectIdentifiers.classPK
 
      A             /             j META-INF/versions/9/org/bouncycastle/asn1/nist/PK     A @X  V
  D             *k META-INF/versions/9/org/bouncycastle/asn1/nist/NISTNamedCurves.classPK     A <1    J             o META-INF/versions/9/org/bouncycastle/asn1/nist/NISTObjectIdentifiers.classPK
 
      A             /             ^y META-INF/versions/9/org/bouncycastle/asn1/pkcs/PK     A e-  %  J             y META-INF/versions/9/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.classPK     A AT    C             / META-INF/versions/9/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.classPK
 
      A             .              META-INF/versions/9/org/bouncycastle/asn1/sec/PK     A iAB*    D              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$1.classPK     A bsp  
  E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$10.classPK     A 49e  h  E             p META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$11.classPK     A In  Q
  E             H META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$12.classPK     A 7Ȁ    E             E META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$13.classPK     A   X  E             8 META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$14.classPK     A  8M  0	  E             x META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$15.classPK     A H75    E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$16.classPK     A g87    E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$17.classPK     A Y&Q    E             U META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$18.classPK     A ģP    E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$19.classPK     A 9qoK    D             ܿ META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$2.classPK     A |+    E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$20.classPK     A `g    E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$21.classPK     A #9BH    E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$22.classPK     A i =y    E             o META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$23.classPK     A 1t x    E             [ META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$24.classPK     A Y  x  E             F META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$25.classPK     A *Ik    E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$26.classPK     A Ms	  {  E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$27.classPK     A ܏'.    E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$28.classPK     A |64  3  E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$29.classPK     A <W(    D              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$3.classPK     A /g%XY    E             X META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$30.classPK     A 2    E             $ META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$31.classPK     A М    E             l META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$32.classPK     A /6  R  E              META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$33.classPK     A ,~sF    D             4 META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$4.classPK     A <(%  	  D              
 META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$5.classPK     A Ji?  	  D             
 META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$6.classPK     A }ׄ:  	  D             4	
 META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$7.classPK     A ۸%:F  	  D             
 META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$8.classPK     A m<K  7  D             
 META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves$9.classPK     A \[M  ?  B             U
 META-INF/versions/9/org/bouncycastle/asn1/sec/SECNamedCurves.classPK     A f@9  "
  H             !
 META-INF/versions/9/org/bouncycastle/asn1/sec/SECObjectIdentifiers.classPK
 
      A             4             '
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/PK     A X@    P             Y'
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$1.classPK     A D~  z  Q             *
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$10.classPK     A M    Q             .
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$11.classPK     A 8$    Q             O3
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$12.classPK     A lb^    Q             {7
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$13.classPK     A $    Q             <
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$14.classPK     A p0*    P             @
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$2.classPK     A 47    P             D
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$3.classPK     A v
I0    P             G
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$4.classPK     A 
;.Y    P             iK
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$5.classPK     A 8Ǩ4    P             @O
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$6.classPK     A ick    P             R
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$7.classPK     A =#O    P             V
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$8.classPK     A ҂  y  P             Z
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$9.classPK     A n 8  -  N             ^
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves.classPK     A 5h  b  T             g
 META-INF/versions/9/org/bouncycastle/asn1/teletrust/TeleTrusTObjectIdentifiers.classPK
 
      A             /             rk
 META-INF/versions/9/org/bouncycastle/asn1/x509/PK     A hze  	  H             k
 META-INF/versions/9/org/bouncycastle/asn1/x509/AlgorithmIdentifier.classPK     A 0    I             'p
 META-INF/versions/9/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.classPK
 
      A             -             su
 META-INF/versions/9/org/bouncycastle/asn1/x9/PK     A l  R  D             u
 META-INF/versions/9/org/bouncycastle/asn1/x9/ECNamedCurveTable.classPK     A !    D             z
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$1.classPK     A xc    E             c~
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$10.classPK     A P#K  %  E             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$11.classPK     A <j>    E             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$12.classPK     A N.1  3  E             ̈
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$13.classPK     A Jt|  3  E             '
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$14.classPK     A ˇim  
  E             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$15.classPK     A )=  c  E             Ӓ
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$16.classPK     A   c  E             V
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$17.classPK     A *x  c  E             ٙ
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$18.classPK     A <9    E             X
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$19.classPK     A m!    D             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$2.classPK     A aVE    E             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$20.classPK     A 9]    E             O
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$21.classPK     A a7|    E             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$22.classPK     A 	m  !  E             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$23.classPK     A ̑    D             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$3.classPK     A ov  k  D             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$4.classPK     A Q/lw  k  D             x
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$5.classPK     A .dtv  k  D             a
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$6.classPK     A ~Tą    D             I
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$7.classPK     A @0    D             @
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$8.classPK     A #5    D             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves$9.classPK     A -*Ҙ  l  B             2
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962NamedCurves.classPK     A B  	  A             x
 META-INF/versions/9/org/bouncycastle/asn1/x9/X962Parameters.classPK     A fe|  P  :             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X9Curve.classPK     A f7  n  A             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X9ECParameters.classPK     A Yl    G             Q
 META-INF/versions/9/org/bouncycastle/asn1/x9/X9ECParametersHolder.classPK     A     <             2
 META-INF/versions/9/org/bouncycastle/asn1/x9/X9ECPoint.classPK     A 4q{    A             A
 META-INF/versions/9/org/bouncycastle/asn1/x9/X9FieldElement.classPK     A 	  j  <             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X9FieldID.classPK     A \  '  E             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X9IntegerConverter.classPK     A ]  @  F             
 META-INF/versions/9/org/bouncycastle/asn1/x9/X9ObjectIdentifiers.classPK
 
      A             ,             $
 META-INF/versions/9/org/bouncycastle/crypto/PK     A u  F  I             n
 META-INF/versions/9/org/bouncycastle/crypto/AsymmetricCipherKeyPair.classPK     A A%     R             Z META-INF/versions/9/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.classPK     A _^!    =              META-INF/versions/9/org/bouncycastle/crypto/BlockCipher.classPK     A  <Y   \   B              META-INF/versions/9/org/bouncycastle/crypto/CipherParameters.classPK     A `      S              META-INF/versions/9/org/bouncycastle/crypto/CryptoServiceConstraintsException.classPK     A FuS   %  I              META-INF/versions/9/org/bouncycastle/crypto/CryptoServiceProperties.classPK     A R  s  F             6 META-INF/versions/9/org/bouncycastle/crypto/CryptoServicePurpose.classPK     A       K             |
 META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesConstraints.classPK     A =ɽ    J             w META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesPermission.classPK     A zR     K              META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$1.classPK     A 3.tG  $  K              META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$2.classPK     A zģ  	  K              META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$3.classPK     A d%  i  R              META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$Property.classPK     A ~    i              META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar$ThreadLocalSecureRandomProvider.classPK     A G_sF  %,  I              META-INF/versions/9/org/bouncycastle/crypto/CryptoServicesRegistrar.classPK     A       E             - META-INF/versions/9/org/bouncycastle/crypto/DataLengthException.classPK     A F    I             . META-INF/versions/9/org/bouncycastle/crypto/DefaultMultiBlockCipher.classPK     A y9   5  D             .1 META-INF/versions/9/org/bouncycastle/crypto/DerivationFunction.classPK     A JLf]   `   F             p2 META-INF/versions/9/org/bouncycastle/crypto/DerivationParameters.classPK     A BH      8             A3 META-INF/versions/9/org/bouncycastle/crypto/Digest.classPK     A u   }   B             q4 META-INF/versions/9/org/bouncycastle/crypto/EncodableService.classPK     A "      @             V5 META-INF/versions/9/org/bouncycastle/crypto/ExtendedDigest.classPK     A yTB  :  I             C6 META-INF/versions/9/org/bouncycastle/crypto/KeyGenerationParameters.classPK     A a0    5             7 META-INF/versions/9/org/bouncycastle/crypto/Mac.classPK     A {   =  B             9 META-INF/versions/9/org/bouncycastle/crypto/MultiBlockCipher.classPK     A |      G             : META-INF/versions/9/org/bouncycastle/crypto/OutputLengthException.classPK     A "]      H             ; META-INF/versions/9/org/bouncycastle/crypto/RuntimeCryptoException.classPK     A @470      ?             = META-INF/versions/9/org/bouncycastle/crypto/SavableDigest.classPK     A y      F             
> META-INF/versions/9/org/bouncycastle/crypto/SecureRandomProvider.classPK     A  	      @             > META-INF/versions/9/org/bouncycastle/crypto/SkippingCipher.classPK     A ?pu      F             ? META-INF/versions/9/org/bouncycastle/crypto/SkippingStreamCipher.classPK     A +
    C             @ META-INF/versions/9/org/bouncycastle/crypto/StreamBlockCipher.classPK     A If	    >             kC META-INF/versions/9/org/bouncycastle/crypto/StreamCipher.classPK     A #f"      5             D META-INF/versions/9/org/bouncycastle/crypto/Xof.classPK
 
      A             8             E META-INF/versions/9/org/bouncycastle/crypto/constraints/PK     A ^*T    V             1F META-INF/versions/9/org/bouncycastle/crypto/constraints/DefaultServiceProperties.classPK
 
      A             4             	I META-INF/versions/9/org/bouncycastle/crypto/digests/PK     A ۓI      I             [I META-INF/versions/9/org/bouncycastle/crypto/digests/EncodableDigest.classPK     A N  ^  G             ^J META-INF/versions/9/org/bouncycastle/crypto/digests/GeneralDigest.classPK     A !;    F             VO META-INF/versions/9/org/bouncycastle/crypto/digests/KeccakDigest.classPK     A [x
    D             _ META-INF/versions/9/org/bouncycastle/crypto/digests/LongDigest.classPK     A *
    F             vm META-INF/versions/9/org/bouncycastle/crypto/digests/SHA256Digest.classPK     A !o    F             	{ META-INF/versions/9/org/bouncycastle/crypto/digests/SHA384Digest.classPK     A 8P    D              META-INF/versions/9/org/bouncycastle/crypto/digests/SHA3Digest.classPK     A IA>{    F              META-INF/versions/9/org/bouncycastle/crypto/digests/SHA512Digest.classPK     A     G              META-INF/versions/9/org/bouncycastle/crypto/digests/SHA512tDigest.classPK     A P    E              META-INF/versions/9/org/bouncycastle/crypto/digests/SHAKEDigest.classPK     A rU  J  Q             % META-INF/versions/9/org/bouncycastle/crypto/digests/Utils$DefaultProperties.classPK     A ^Q    X             J META-INF/versions/9/org/bouncycastle/crypto/digests/Utils$DefaultPropertiesWithPRF.classPK     A [  
  ?             ʝ META-INF/versions/9/org/bouncycastle/crypto/digests/Utils.classPK
 
      A             /             ڟ META-INF/versions/9/org/bouncycastle/crypto/ec/PK     A WJ    H             ' META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$1.classPK     A QA  \  I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$10.classPK     A (  [  I             L META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$11.classPK     A [8    I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$12.classPK     A (*    I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$13.classPK     A -    I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$14.classPK     A J    I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$15.classPK     A s+    I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$16.classPK     A     I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$17.classPK     A a8O    I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$18.classPK     A b %  /  I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$19.classPK     A 
+    H              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$2.classPK     A v4m  /  I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$20.classPK     A !_(  ?  I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$21.classPK     A   ?  I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$22.classPK     A 0o    I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$23.classPK     A Sּ  S  I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$24.classPK     A m    I             " META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$25.classPK     A .b    I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$26.classPK     A >  k  I               META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$27.classPK     A     I             C META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$28.classPK     A gU     I             a META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$29.classPK     A ԣ    H              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$3.classPK     A X/  o  I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$30.classPK     A 8    I             9 META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$31.classPK     A u    I              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$32.classPK     A j  *  H              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$4.classPK     A ᬛ  *  H              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$5.classPK     A $    H              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$6.classPK     A w#  :  H              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$7.classPK     A 5  '  H             < META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$8.classPK     A +K  J  H              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves$9.classPK     A O  O"  F              META-INF/versions/9/org/bouncycastle/crypto/ec/CustomNamedCurves.classPK
 
      A             4              META-INF/versions/9/org/bouncycastle/crypto/engines/PK     A X0&  "E  C              META-INF/versions/9/org/bouncycastle/crypto/engines/AESEngine.classPK     A zI    ?             = META-INF/versions/9/org/bouncycastle/crypto/engines/Utils.classPK
 
      A             7             > META-INF/versions/9/org/bouncycastle/crypto/generators/PK     A 9u  B  O             > META-INF/versions/9/org/bouncycastle/crypto/generators/MGF1BytesGenerator.classPK
 
      A             1             B META-INF/versions/9/org/bouncycastle/crypto/macs/PK     A 4ZVM    ;             2C META-INF/versions/9/org/bouncycastle/crypto/macs/HMac.classPK
 
      A             2             J META-INF/versions/9/org/bouncycastle/crypto/modes/PK     A =j     E             8K META-INF/versions/9/org/bouncycastle/crypto/modes/CTRModeCipher.classPK     A (	    F             XL META-INF/versions/9/org/bouncycastle/crypto/modes/SICBlockCipher.classPK
 
      A             3             _V META-INF/versions/9/org/bouncycastle/crypto/params/PK     A vD   8  O             V META-INF/versions/9/org/bouncycastle/crypto/params/AsymmetricKeyParameter.classPK     A l?F  
  E             X META-INF/versions/9/org/bouncycastle/crypto/params/DHParameters.classPK     A 7ſ    O             5] META-INF/versions/9/org/bouncycastle/crypto/params/DHValidationParameters.classPK     A 
1    F             q_ META-INF/versions/9/org/bouncycastle/crypto/params/DSAParameters.classPK     A     P             b META-INF/versions/9/org/bouncycastle/crypto/params/DSAValidationParameters.classPK     A !    K             d META-INF/versions/9/org/bouncycastle/crypto/params/ECDomainParameters.classPK     A `    H             j META-INF/versions/9/org/bouncycastle/crypto/params/ECKeyParameters.classPK     A zo  Z  P             nl META-INF/versions/9/org/bouncycastle/crypto/params/ECNamedDomainParameters.classPK     A si7"  N  O             o META-INF/versions/9/org/bouncycastle/crypto/params/ECPrivateKeyParameters.classPK     A #A    N             =q META-INF/versions/9/org/bouncycastle/crypto/params/ECPublicKeyParameters.classPK     A ܦ!  ~  E             r META-INF/versions/9/org/bouncycastle/crypto/params/KeyParameter.classPK     A p;    F             ju META-INF/versions/9/org/bouncycastle/crypto/params/MGFParameters.classPK     A  
l    I             w META-INF/versions/9/org/bouncycastle/crypto/params/ParametersWithIV.classPK
 
      A             .             x META-INF/versions/9/org/bouncycastle/internal/PK
 
      A             3             Hy META-INF/versions/9/org/bouncycastle/internal/asn1/PK
 
      A             <             y META-INF/versions/9/org/bouncycastle/internal/asn1/cryptlib/PK     A te  Q  [             y META-INF/versions/9/org/bouncycastle/internal/asn1/cryptlib/CryptlibObjectIdentifiers.classPK
 
      A             9             { META-INF/versions/9/org/bouncycastle/internal/asn1/isara/PK     A XHm    U             8| META-INF/versions/9/org/bouncycastle/internal/asn1/isara/IsaraObjectIdentifiers.classPK
 
      A             7             } META-INF/versions/9/org/bouncycastle/internal/asn1/oiw/PK     A [    Q             /~ META-INF/versions/9/org/bouncycastle/internal/asn1/oiw/OIWObjectIdentifiers.classPK
 
      A             ?             À META-INF/versions/9/org/bouncycastle/internal/asn1/rosstandart/PK     A \7iI    a               META-INF/versions/9/org/bouncycastle/internal/asn1/rosstandart/RosstandartObjectIdentifiers.classPK
 
      A             ,              META-INF/versions/9/org/bouncycastle/jcajce/PK
 
      A             7              META-INF/versions/9/org/bouncycastle/jcajce/interfaces/PK     A %Y   \   B             R META-INF/versions/9/org/bouncycastle/jcajce/interfaces/BCKey.classPK     A (      E              META-INF/versions/9/org/bouncycastle/jcajce/interfaces/MLKEMKey.classPK     A l@     L             ' META-INF/versions/9/org/bouncycastle/jcajce/interfaces/MLKEMPrivateKey.classPK     A Z"      K             w META-INF/versions/9/org/bouncycastle/jcajce/interfaces/MLKEMPublicKey.classPK
 
      A             5              META-INF/versions/9/org/bouncycastle/jcajce/provider/PK
 
      A             @             މ META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/PK
 
      A             F             < META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/PK     A 
3&  q  ]              META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPrivateKey.classPK     A WC  
  \             Q META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPublicKey.classPK     A B{    h              META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM1024.classPK     A 5%    g             k META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM512.classPK     A <    g              META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM768.classPK     A HҐ$O  Z  ^              META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi.classPK     A K|    Q              META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/mlkem/Utils.classPK
 
      A             E              META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/util/PK     A n  e  _             r META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/util/EC5Util$CustomCurves.classPK     A Wr  u#  R              META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/util/EC5Util.classPK     A ʞ  '  Q             ` META-INF/versions/9/org/bouncycastle/jcajce/provider/asymmetric/util/ECUtil.classPK
 
      A             <              META-INF/versions/9/org/bouncycastle/jcajce/provider/config/PK     A Zt[    V             8 META-INF/versions/9/org/bouncycastle/jcajce/provider/config/ConfigurableProvider.classPK     A jH    W              META-INF/versions/9/org/bouncycastle/jcajce/provider/config/ProviderConfiguration.classPK     A 	ZD
    a              META-INF/versions/9/org/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission.classPK
 
      A             ?              META-INF/versions/9/org/bouncycastle/jcajce/provider/symmetric/PK
 
      A             D             X META-INF/versions/9/org/bouncycastle/jcajce/provider/symmetric/util/PK     A BJ{    U              META-INF/versions/9/org/bouncycastle/jcajce/provider/symmetric/util/ClassUtil$1.classPK     A %yi&  5  S              META-INF/versions/9/org/bouncycastle/jcajce/provider/symmetric/util/ClassUtil.classPK
 
      A             :             R META-INF/versions/9/org/bouncycastle/jcajce/provider/util/PK     A J     Q              META-INF/versions/9/org/bouncycastle/jcajce/provider/util/AlgorithmProvider.classPK     A F   z  Z              META-INF/versions/9/org/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter.classPK
 
      A             1             X META-INF/versions/9/org/bouncycastle/jcajce/spec/PK     A ZVt    L              META-INF/versions/9/org/bouncycastle/jcajce/spec/DHDomainParameterSpec.classPK     A jѿ  R  I              META-INF/versions/9/org/bouncycastle/jcajce/spec/MLKEMParameterSpec.classPK     A @'  1  J              META-INF/versions/9/org/bouncycastle/jcajce/spec/MLKEMPrivateKeySpec.classPK     A ǹdW  [  I              META-INF/versions/9/org/bouncycastle/jcajce/spec/MLKEMPublicKeySpec.classPK
 
      A             1              META-INF/versions/9/org/bouncycastle/jcajce/util/PK     A Vl<  I  A              META-INF/versions/9/org/bouncycastle/jcajce/util/SpecUtil$1.classPK     A k(?  ?  A              META-INF/versions/9/org/bouncycastle/jcajce/util/SpecUtil$2.classPK     A 9    ?             N META-INF/versions/9/org/bouncycastle/jcajce/util/SpecUtil.classPK
 
      A             )              META-INF/versions/9/org/bouncycastle/jce/PK     A #ox  3  H             
 META-INF/versions/9/org/bouncycastle/jce/ECGOST3410NamedCurveTable.classPK
 
      A             4              META-INF/versions/9/org/bouncycastle/jce/interfaces/PK     A W^ށ      ?             J META-INF/versions/9/org/bouncycastle/jce/interfaces/ECKey.classPK     A       F             8 META-INF/versions/9/org/bouncycastle/jce/interfaces/ECPrivateKey.classPK     A 7n      E             M META-INF/versions/9/org/bouncycastle/jce/interfaces/ECPublicKey.classPK
 
      A             2             _ META-INF/versions/9/org/bouncycastle/jce/provider/PK     A 8S  F  N              META-INF/versions/9/org/bouncycastle/jce/provider/BouncyCastleProvider$1.classPK     A ܿN  	  N             ~ META-INF/versions/9/org/bouncycastle/jce/provider/BouncyCastleProvider$2.classPK     A   K  ]              META-INF/versions/9/org/bouncycastle/jce/provider/BouncyCastleProvider$JcaCryptoService.classPK     A n   V  L               META-INF/versions/9/org/bouncycastle/jce/provider/BouncyCastleProvider.classPK     A D    Y             ! META-INF/versions/9/org/bouncycastle/jce/provider/BouncyCastleProviderConfiguration.classPK
 
      A             .             J* META-INF/versions/9/org/bouncycastle/jce/spec/PK     A Ns9\  l  M             * META-INF/versions/9/org/bouncycastle/jce/spec/ECNamedCurveParameterSpec.classPK     A ye  ,  D             m, META-INF/versions/9/org/bouncycastle/jce/spec/ECNamedCurveSpec.classPK     A b7҇    C             0 META-INF/versions/9/org/bouncycastle/jce/spec/ECParameterSpec.classPK
 
      A             *             .4 META-INF/versions/9/org/bouncycastle/math/PK     A 2$      8             v4 META-INF/versions/9/org/bouncycastle/math/Primes$1.classPK     A ;ke    ?             h5 META-INF/versions/9/org/bouncycastle/math/Primes$MROutput.classPK     A W
     ?             7 META-INF/versions/9/org/bouncycastle/math/Primes$STOutput.classPK     A 

    6             9 META-INF/versions/9/org/bouncycastle/math/Primes.classPK
 
      A             -             H META-INF/versions/9/org/bouncycastle/math/ec/PK     A (r#   6  H             MH META-INF/versions/9/org/bouncycastle/math/ec/AbstractECLookupTable.classPK     A ش@    G             I META-INF/versions/9/org/bouncycastle/math/ec/AbstractECMultiplier.classPK     A b  )  ?             L META-INF/versions/9/org/bouncycastle/math/ec/ECAlgorithms.classPK     A -88    >             ^ META-INF/versions/9/org/bouncycastle/math/ec/ECConstants.classPK     A L@N    <             D` META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$1.classPK     A 0zi	     F             c META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$AbstractF2m.classPK     A &w+  	  E             m META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$AbstractFp.classPK     A )    A             0r META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$Config.classPK     A T   a  @             u META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$F2m$1.classPK     A %    >             y META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$F2m.classPK     A -¶+  {  =              META-INF/versions/9/org/bouncycastle/math/ec/ECCurve$Fp.classPK     A "DZ  &  :              META-INF/versions/9/org/bouncycastle/math/ec/ECCurve.classPK     A O  |  M             { META-INF/versions/9/org/bouncycastle/math/ec/ECFieldElement$AbstractF2m.classPK     A ?      L              META-INF/versions/9/org/bouncycastle/math/ec/ECFieldElement$AbstractFp.classPK     A Ҝb`  ]  E             מ META-INF/versions/9/org/bouncycastle/math/ec/ECFieldElement$F2m.classPK     A /(1	    D              META-INF/versions/9/org/bouncycastle/math/ec/ECFieldElement$Fp.classPK     A i  C	  A             M META-INF/versions/9/org/bouncycastle/math/ec/ECFieldElement.classPK     A TI      @              META-INF/versions/9/org/bouncycastle/math/ec/ECLookupTable.classPK     A >F2      ?              META-INF/versions/9/org/bouncycastle/math/ec/ECMultiplier.classPK     A >'  w  <              META-INF/versions/9/org/bouncycastle/math/ec/ECPoint$1.classPK     A !s    F              META-INF/versions/9/org/bouncycastle/math/ec/ECPoint$AbstractF2m.classPK     A 7    E             z META-INF/versions/9/org/bouncycastle/math/ec/ECPoint$AbstractFp.classPK     A 
o	    >             l META-INF/versions/9/org/bouncycastle/math/ec/ECPoint$F2m.classPK     A R|v
  G  =              META-INF/versions/9/org/bouncycastle/math/ec/ECPoint$Fp.classPK     A m$  `   :              META-INF/versions/9/org/bouncycastle/math/ec/ECPoint.classPK     A l      =             9 META-INF/versions/9/org/bouncycastle/math/ec/ECPointMap.classPK     A  Bo    K              META-INF/versions/9/org/bouncycastle/math/ec/FixedPointCombMultiplier.classPK     A ٦  I  H              META-INF/versions/9/org/bouncycastle/math/ec/FixedPointPreCompInfo.classPK     A     C              META-INF/versions/9/org/bouncycastle/math/ec/FixedPointUtil$1.classPK     A O#c  -  A              META-INF/versions/9/org/bouncycastle/math/ec/FixedPointUtil.classPK     A .`*B    @             T META-INF/versions/9/org/bouncycastle/math/ec/GLVMultiplier.classPK     A @Ph;  Oy  <              META-INF/versions/9/org/bouncycastle/math/ec/LongArray.classPK     A |      B             8 META-INF/versions/9/org/bouncycastle/math/ec/PreCompCallback.classPK     A kU   X   >             9 META-INF/versions/9/org/bouncycastle/math/ec/PreCompInfo.classPK     A 1  :  A             : META-INF/versions/9/org/bouncycastle/math/ec/ScaleXPointMap.classPK     A w'  
  C             < META-INF/versions/9/org/bouncycastle/math/ec/SimpleBigDecimal.classPK     A G  "  7             B META-INF/versions/9/org/bouncycastle/math/ec/Tnaf.classPK     A +-    F             R META-INF/versions/9/org/bouncycastle/math/ec/ValidityPrecompInfo.classPK     A m    D             T META-INF/versions/9/org/bouncycastle/math/ec/WNafL2RMultiplier.classPK     A >[W  o  B             jX META-INF/versions/9/org/bouncycastle/math/ec/WNafPreCompInfo.classPK     A -em  o  =             1[ META-INF/versions/9/org/bouncycastle/math/ec/WNafUtil$1.classPK     A _    =             	^ META-INF/versions/9/org/bouncycastle/math/ec/WNafUtil$2.classPK     A 3    =             Me META-INF/versions/9/org/bouncycastle/math/ec/WNafUtil$3.classPK     A J$	  5  ;             i META-INF/versions/9/org/bouncycastle/math/ec/WNafUtil.classPK     A FJ     F             t META-INF/versions/9/org/bouncycastle/math/ec/WTauNafMultiplier$1.classPK     A ->    D             v META-INF/versions/9/org/bouncycastle/math/ec/WTauNafMultiplier.classPK     A 2  d  E             | META-INF/versions/9/org/bouncycastle/math/ec/WTauNafPreCompInfo.classPK     A N     >             } META-INF/versions/9/org/bouncycastle/math/ec/ZTauElement.classPK
 
      A             4             ~ META-INF/versions/9/org/bouncycastle/math/ec/custom/PK
 
      A             8             ? META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/PK     A *E  [  J              META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/Curve25519$1.classPK     A k1=  B  H             ' META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/Curve25519.classPK     A $F?  
  M             ډ META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/Curve25519Field.classPK     A V9(    T              META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/Curve25519FieldElement.classPK     A Vrm    M              META-INF/versions/9/org/bouncycastle/math/ec/custom/djb/Curve25519Point.classPK
 
      A             7              META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/PK     A 0M  e  M             T META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/SM2P256V1Curve$1.classPK     A W5Y*'    K              META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/SM2P256V1Curve.classPK     A '!+  V  K              META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/SM2P256V1Field.classPK     A     R              META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/SM2P256V1FieldElement.classPK     A a  H  K             ٸ META-INF/versions/9/org/bouncycastle/math/ec/custom/gm/SM2P256V1Point.classPK
 
      A             8             ۿ META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/PK     A Cp  e  N             1 META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP128R1Curve$1.classPK     A m    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP128R1Curve.classPK     A   W
  L             ; META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP128R1Field.classPK     A   y  S              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP128R1FieldElement.classPK     A ?	  I  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP128R1Point.classPK     A 7S  e  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160K1Curve$1.classPK     A   Z  L             ` META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160K1Curve.classPK     A /R  
  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160K1Point.classPK     A XOW  e  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R1Curve$1.classPK     A     L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R1Curve.classPK     A 5'    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R1Field.classPK     A g?    S              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R1FieldElement.classPK     A X  I  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R1Point.classPK     A {;  e  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R2Curve$1.classPK     A Qm    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R2Curve.classPK     A >|  )  L             + META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R2Field.classPK     A     S             j META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R2FieldElement.classPK     A A  I  L             % META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP160R2Point.classPK     A 4/  j  N             , META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192K1Curve$1.classPK     A O  a  L             ?0 META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192K1Curve.classPK     A .b  <  L             6 META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192K1Field.classPK     A i09    S             = META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192K1FieldElement.classPK     A .S  
  L             D META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192K1Point.classPK     A mrQ  j  N             J META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192R1Curve$1.classPK     A R|    L             zN META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192R1Curve.classPK     A (k~  o  L             T META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192R1Field.classPK     A ʕřG  8  S             \ META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192R1FieldElement.classPK     A 4  K  L             b META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP192R1Point.classPK     A (    N             i META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224K1Curve$1.classPK     A m  k  L             !m META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224K1Curve.classPK     A %P  D  L             s META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224K1Field.classPK     A sH]    S             z META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224K1FieldElement.classPK     A uR  
  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224K1Point.classPK     A s  j  N             Z META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224R1Curve$1.classPK     A N    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224R1Curve.classPK     A 6    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.classPK     A Ji    S              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224R1FieldElement.classPK     A 4}{  K  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP224R1Point.classPK     A wQY  j  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256K1Curve$1.classPK     A <f  q  L             # META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256K1Curve.classPK     A ʹ  
  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256K1Field.classPK     A QxLq    S              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256K1FieldElement.classPK     A H_g  &  L             r META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256K1Point.classPK     A ڋ'  j  N             S META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256R1Curve$1.classPK     A ,    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256R1Curve.classPK     A     L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256R1Field.classPK     A q~C    S              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256R1FieldElement.classPK     A "    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP256R1Point.classPK     A U  p  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP384R1Curve$1.classPK     A }Z  [  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP384R1Curve.classPK     A d-  l  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP384R1Field.classPK     A ?  ~  S             & META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP384R1FieldElement.classPK     A K    L             l META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP384R1Point.classPK     A g.  v  N             x META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP521R1Curve$1.classPK     A KO    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP521R1Curve.classPK     A Ap    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP521R1Field.classPK     A 2j&F  u  S              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP521R1FieldElement.classPK     A {p5  v  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecP521R1Point.classPK     A m2,  d
  J             3' META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113Field.classPK     A Lc  I  Q             - META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113FieldElement.classPK     A v.  f  N             W4 META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R1Curve$1.classPK     A [6  
  L             7 META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R1Curve.classPK     A TuV    L             > META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R1Point.classPK     A u  f  N             E META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R2Curve$1.classPK     A !   
  L             .I META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R2Curve.classPK     A -y|Z    L             NO META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT113R2Point.classPK     A   g  J             V META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131Field.classPK     A R+  k  Q             c_ META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131FieldElement.classPK     A ZE  f  N             
f META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R1Curve$1.classPK     A    
  L             i META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R1Curve.classPK     A 9    L             o META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R1Point.classPK     A V1+  f  N             Zw META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R2Curve$1.classPK     A j&  
  L             z META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R2Curve.classPK     A     L             # META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT131R2Point.classPK     A \3  0  J              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163Field.classPK     A j"  M  Q               META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163FieldElement.classPK     A <&  f  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163K1Curve$1.classPK     A !mȤ  
  L             \ META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163K1Curve.classPK     A _M  z  L             z META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163K1Point.classPK     A Mr  f  N             Ǩ META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R1Curve$1.classPK     A ^+  
  L             a META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R1Curve.classPK     A Bއ    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R1Point.classPK     A F  f  N             ! META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R2Curve$1.classPK     A |'|  
  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R2Curve.classPK     A T4    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT163R2Point.classPK     A :}  R
  J             - META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193Field.classPK     A [ė#  L  Q             " META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193FieldElement.classPK     A BDܺ  f  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R1Curve$1.classPK     A Оn  
  L             ^ META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R1Curve.classPK     A &N    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R1Point.classPK     A ;  l  N             2 META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R2Curve$1.classPK     A |M  
  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R2Curve.classPK     A B    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT193R2Point.classPK     A es   '  J              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233Field.classPK     A d	t#(  L  Q              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233FieldElement.classPK     A Q  f  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233K1Curve$1.classPK     A   
  L             ^ META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233K1Curve.classPK     A h    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233K1Point.classPK     A 7]B  f  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233R1Curve$1.classPK     A W  
  L             n  META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233R1Curve.classPK     A 0h    L             & META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT233R1Point.classPK     A 4#  ~  J             - META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT239Field.classPK     A IEK$  M  Q             6 META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT239FieldElement.classPK     A `|  f  N             7= META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT239K1Curve$1.classPK     A !  
  L             @ META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT239K1Curve.classPK     A ,8    L             F META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT239K1Point.classPK     A ?	    J             FN META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283Field.classPK     A F.  n  Q             `X META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283FieldElement.classPK     A _  f  N             
_ META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283K1Curve$1.classPK     A <    L             b META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283K1Curve.classPK     A g    L             h META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283K1Point.classPK     A t  f  N             *p META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283R1Curve$1.classPK     A *h  
  L             s META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283R1Curve.classPK     A 2k    L             z META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT283R1Point.classPK     A 1
	  m  J             ` META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409Field.classPK     A 1  n  Q              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409FieldElement.classPK     A ^04  k  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409K1Curve$1.classPK     A     L             0 META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409K1Curve.classPK     A wE    L             d META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409K1Point.classPK     A 9K  k  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409R1Curve$1.classPK     A &  
  L             S META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409R1Curve.classPK     A =L    L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT409R1Point.classPK     A r&[{
    J              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571Field.classPK     A P-(  M  Q             
 META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571FieldElement.classPK     A w]!  k  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571K1Curve$1.classPK     A j?I  I  L             N META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571K1Curve.classPK     A m  t  L              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571K1Point.classPK     A Z"   k  N              META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571R1Curve$1.classPK     A 2Zk    L             $ META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571R1Curve.classPK     A SU>	  A  L             	 META-INF/versions/9/org/bouncycastle/math/ec/custom/sec/SecT571R1Point.classPK
 
      A             2              META-INF/versions/9/org/bouncycastle/math/ec/endo/PK     A x      F              META-INF/versions/9/org/bouncycastle/math/ec/endo/ECEndomorphism.classPK     A ̚F    G              META-INF/versions/9/org/bouncycastle/math/ec/endo/EndoPreCompInfo.classPK     A 	M=    B              META-INF/versions/9/org/bouncycastle/math/ec/endo/EndoUtil$1.classPK     A D޸    @              META-INF/versions/9/org/bouncycastle/math/ec/endo/EndoUtil.classPK     A ȡ      G              META-INF/versions/9/org/bouncycastle/math/ec/endo/GLVEndomorphism.classPK     A  -  !  L             1 META-INF/versions/9/org/bouncycastle/math/ec/endo/GLVTypeBEndomorphism.classPK     A <O    J              META-INF/versions/9/org/bouncycastle/math/ec/endo/GLVTypeBParameters.classPK     A tNf   #  M              META-INF/versions/9/org/bouncycastle/math/ec/endo/ScalarSplitParameters.classPK
 
      A             0             :  META-INF/versions/9/org/bouncycastle/math/field/PK     A n]      D               META-INF/versions/9/org/bouncycastle/math/field/ExtensionField.classPK     A И      A              META-INF/versions/9/org/bouncycastle/math/field/FiniteField.classPK     A V/    B              META-INF/versions/9/org/bouncycastle/math/field/FiniteFields.classPK     A (    C             > META-INF/versions/9/org/bouncycastle/math/field/GF2Polynomial.classPK     A ;z    U             b META-INF/versions/9/org/bouncycastle/math/field/GenericPolynomialExtensionField.classPK     A 7`9      @             _ META-INF/versions/9/org/bouncycastle/math/field/Polynomial.classPK     A L9      N             X META-INF/versions/9/org/bouncycastle/math/field/PolynomialExtensionField.classPK     A I4  u  @             c
 META-INF/versions/9/org/bouncycastle/math/field/PrimeField.classPK
 
      A             .             _ META-INF/versions/9/org/bouncycastle/math/raw/PK     A 	Z  r  8              META-INF/versions/9/org/bouncycastle/math/raw/Bits.classPK     A ϐfg  1  >             * META-INF/versions/9/org/bouncycastle/math/raw/Interleave.classPK     A o  A  7              META-INF/versions/9/org/bouncycastle/math/raw/Mod.classPK     A ̞Ye  5  7             u! META-INF/versions/9/org/bouncycastle/math/raw/Nat.classPK     A 2G]
  "  :             ?6 META-INF/versions/9/org/bouncycastle/math/raw/Nat128.classPK     A 3'3
  #  :             RD META-INF/versions/9/org/bouncycastle/math/raw/Nat160.classPK     A I  K+  :             nR META-INF/versions/9/org/bouncycastle/math/raw/Nat192.classPK     A 	!U  3  :             b META-INF/versions/9/org/bouncycastle/math/raw/Nat224.classPK     A 9  A  :             t META-INF/versions/9/org/bouncycastle/math/raw/Nat256.classPK     A t    :              META-INF/versions/9/org/bouncycastle/math/raw/Nat320.classPK     A g3U    :             c META-INF/versions/9/org/bouncycastle/math/raw/Nat384.classPK     A   \  :               META-INF/versions/9/org/bouncycastle/math/raw/Nat448.classPK     A 6T    :             [ META-INF/versions/9/org/bouncycastle/math/raw/Nat512.classPK     A MAJB  V  :              META-INF/versions/9/org/bouncycastle/math/raw/Nat576.classPK
 
      A             )              META-INF/versions/9/org/bouncycastle/pqc/PK
 
      A             .              META-INF/versions/9/org/bouncycastle/pqc/asn1/PK     A @wx  
  B             T META-INF/versions/9/org/bouncycastle/pqc/asn1/CMCEPrivateKey.classPK     A [Ӣ  L  A             d META-INF/versions/9/org/bouncycastle/pqc/asn1/CMCEPublicKey.classPK     A Cͼ:  c	  D             d META-INF/versions/9/org/bouncycastle/pqc/asn1/FalconPrivateKey.classPK     A d  M  C              META-INF/versions/9/org/bouncycastle/pqc/asn1/FalconPublicKey.classPK     A Y  h  H              META-INF/versions/9/org/bouncycastle/pqc/asn1/PQCObjectIdentifiers.classPK     A '"|    G             [ META-INF/versions/9/org/bouncycastle/pqc/asn1/SPHINCS256KeyParams.classPK     A g  	  I             U META-INF/versions/9/org/bouncycastle/pqc/asn1/SPHINCSPLUSPrivateKey.classPK     A *    H             3 META-INF/versions/9/org/bouncycastle/pqc/asn1/SPHINCSPLUSPublicKey.classPK     A ۦ  |  A             y META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSKeyParams.classPK     A =    C              META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSMTKeyParams.classPK     A ^  B
  D             . META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSMTPrivateKey.classPK     A k>    C              META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSMTPublicKey.classPK     A .kP@  
  B             L META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSPrivateKey.classPK     A Ƀ;    A              META-INF/versions/9/org/bouncycastle/pqc/asn1/XMSSPublicKey.classPK
 
      A             0             4 META-INF/versions/9/org/bouncycastle/pqc/crypto/PK     A 9U      R              META-INF/versions/9/org/bouncycastle/pqc/crypto/ExhaustedPrivateKeyException.classPK     A ;^n      C              META-INF/versions/9/org/bouncycastle/pqc/crypto/KEMParameters.classPK
 
      A             5              META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/PK     A Pt
    E              META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEEngine.classPK     A      L             G META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEKeyParameters.classPK     A &r#    I              META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEParameters.classPK     A -H
rz    S              META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEPrivateKeyParameters.classPK     A hA    R              META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEPublicKeyParameters.classPK     A 9Q1
    C              META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKERing.classPK     A \    D              META-INF/versions/9/org/bouncycastle/pqc/crypto/bike/BIKEUtils.classPK
 
      A             5               META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/PK     A A    @             ? META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/BENES.classPK     A @S    B              META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/BENES12.classPK     A <eR1  g  B              META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/BENES13.classPK     A KXi  B  E             
 META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/CMCEEngine.classPK     A      L             - META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/CMCEKeyParameters.classPK     A     I             . META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/CMCEParameters.classPK     A N     S             {3 META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/CMCEPrivateKeyParameters.classPK     A )    R             6 META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/CMCEPublicKeyParameters.classPK     A t0    =             `8 META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/GF.classPK     A XT7    ?             9 META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/GF12.classPK     A $O    ?             D> META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/GF13.classPK     A 3}
p  Y  @             C META-INF/versions/9/org/bouncycastle/pqc/crypto/cmce/Utils.classPK
 
      A             9             F META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/PK
 
      A             C             ^F META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/PK     A h  O'  X             F META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumEngine.classPK     A D   	  _             U META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumKeyParameters.classPK     A x&    \             W META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumParameters.classPK     A u{  
  f             "Z META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumPrivateKeyParameters.classPK     A Cϛ    e             ^ META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumPublicKeyParameters.classPK     A 2ǀ
    L             a META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Ntt.classPK     A -  l  P             l META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Packing.classPK     A  N  +  M             (r META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Poly.classPK     A >    Q              META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecK.classPK     A J  
  Q             A META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecL.classPK     A O@n  :	  V              META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecMatrix.classPK     A K
 @    O             L META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Reduce.classPK     A "92    Q             	 META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Rounding.classPK     A ;    _             2 META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric$AesSymmetric.classPK     A ~c    a             | META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric$ShakeSymmetric.classPK     A 9wp\  u  R              META-INF/versions/9/org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric.classPK
 
      A             7              META-INF/versions/9/org/bouncycastle/pqc/crypto/falcon/PK     A 0N     P             D META-INF/versions/9/org/bouncycastle/pqc/crypto/falcon/FalconKeyParameters.classPK     A ,:    M              META-INF/versions/9/org/bouncycastle/pqc/crypto/falcon/FalconParameters.classPK     A wf  '  W             g META-INF/versions/9/org/bouncycastle/pqc/crypto/falcon/FalconPrivateKeyParameters.classPK     A H|g    V              META-INF/versions/9/org/bouncycastle/pqc/crypto/falcon/FalconPublicKeyParameters.classPK
 
      A             6              META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/PK     A c$
    G             l META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoEngine.classPK     A e     N             ֹ META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoKeyParameters.classPK     A }%g|    f             A META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator$Aes128MatrixGenerator.classPK     A bO^x    h             Q META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator$Shake128MatrixGenerator.classPK     A ³$%    P             _ META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator.classPK     A ;R  	  K              META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoParameters.classPK     A N    U              META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoPrivateKeyParameters.classPK     A "hc+    T             l META-INF/versions/9/org/bouncycastle/pqc/crypto/frodo/FrodoPublicKeyParameters.classPK
 
      A             4              META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/PK     A kM    N             k META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/FastFourierTransform.classPK     A E  S  Q             s META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/GF2PolynomialCalculator.classPK     A V٣F	  s  F              META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/GFCalculator.classPK     A xv    C              META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/HQCEngine.classPK     A      J              META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/HQCKeyParameters.classPK     A )8+  a	  G              META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/HQCParameters.classPK     A     Q             # META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/HQCPrivateKeyParameters.classPK     A '    P              META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/HQCPublicKeyParameters.classPK     A ,x   I  M             a META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/ReedMuller$Codeword.classPK     A Eg  c	  D              META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/ReedMuller.classPK     A ,RnK  )  E              META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/ReedSolomon.classPK     A     Q             J META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/Shake256RandomGenerator.classPK     A >    ?             )M META-INF/versions/9/org/bouncycastle/pqc/crypto/hqc/Utils.classPK
 
      A             4             +Q META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/PK     A >c^  P	  B             }Q META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/Composer.classPK     A ˘  t  R             U META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/DigestUtil$WrapperDigest.classPK     A p    D             SY META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/DigestUtil.classPK     A Iwd    V             ] META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSS$PlaceholderLMSPrivateKey.classPK     A 	    =             l_ META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSS.classPK     A R|Xf    T             i META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSSKeyGenerationParameters.classPK     A y8yc  +.  Q             l META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSSPrivateKeyParameters.classPK     A %M    P             ~ META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSSPublicKeyParameters.classPK     A Gh&\  F  F              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/HSSSignature.classPK     A |N<  U  K              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMOtsParameters$1.classPK     A ]pt  U
  I             5 META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMOtsParameters.classPK     A '  s  I               META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMOtsPrivateKey.classPK     A RH     H              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMOtsPublicKey.classPK     A jQP}  3  H              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMOtsSignature.classPK     A @ZI]    =              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMS.classPK     A Nn    D             ֬ META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSContext.classPK     A    )  O              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSContextBasedSigner.classPK     A       Q              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSContextBasedVerifier.classPK     A K
    F              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSException.classPK     A :   =  J              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSKeyParameters.classPK     A Yv    G              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSParameters.classPK     A ] k  \  Z             n META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSPrivateKeyParameters$CacheKey.classPK     A $}/  #  Q             a META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSPrivateKeyParameters.classPK     A eq~  Y  P              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSPublicKeyParameters.classPK     A مӃ    F              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSSignature.classPK     A     I              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSSignedPubKey.classPK     A ٸ~  e  K             " META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSigParameters$1.classPK     A WEP  *
  I              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LMSigParameters.classPK     A ޟ6
    @              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LM_OTS.classPK     A M
'  I  B             S META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/LmsUtils.classPK     A     D              META-INF/versions/9/org/bouncycastle/pqc/crypto/lms/SeedDerive.classPK
 
      A             5             ! META-INF/versions/9/org/bouncycastle/pqc/crypto/mayo/PK     A :     L             t META-INF/versions/9/org/bouncycastle/pqc/crypto/mayo/MayoKeyParameters.classPK     A Xk !  
  I              META-INF/versions/9/org/bouncycastle/pqc/crypto/mayo/MayoParameters.classPK     A !    S             7 META-INF/versions/9/org/bouncycastle/pqc/crypto/mayo/MayoPrivateKeyParameters.classPK     A 4    R              META-INF/versions/9/org/bouncycastle/pqc/crypto/mayo/MayoPublicKeyParameters.classPK
 
      A             6             p META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/PK     A XJ  %%  G              META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/MLDSAEngine.classPK     A ѧ     N             D META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/MLDSAKeyParameters.classPK     A ɻn  C  K              META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/MLDSAParameters.classPK     A T  ;  U              META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/MLDSAPrivateKeyParameters.classPK     A yH    T             H META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/MLDSAPublicKeyParameters.classPK     A Dz
    ?             J META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Ntt.classPK     A bz  l
  C             1( META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Packing.classPK     A lg4  )  @             . META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Poly.classPK     A X    D             m@ META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/PolyVecK.classPK     A 5  y  D             F META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/PolyVecL.classPK     A 	x.    I             [L META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/PolyVecMatrix.classPK     A R};    B             P META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Reduce.classPK     A =    D             FR META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Rounding.classPK     A g
v    T             U META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Symmetric$ShakeSymmetric.classPK     A Ic@>    E             X META-INF/versions/9/org/bouncycastle/pqc/crypto/mldsa/Symmetric.classPK
 
      A             6             Y META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/PK     A yjU  $  ?              Z META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/CBD.classPK     A 7/.	    G             \ META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMEngine.classPK     A `"U	  r  G             f META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMIndCpa.classPK     A       N             Op META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyParameters.classPK     A `0J    K             q META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMParameters.classPK     A     U             1t META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMPrivateKeyParameters.classPK     A ]    T             z META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/MLKEMPublicKeyParameters.classPK     A }4Y    ?             ~ META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/Ntt.classPK     A ٬	    @             ޅ META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/Poly.classPK     A +    C              META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/PolyVec.classPK     A YFi    B              META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/Reduce.classPK     A C    T              META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/Symmetric$ShakeSymmetric.classPK     A 6*@    E              META-INF/versions/9/org/bouncycastle/pqc/crypto/mlkem/Symmetric.classPK
 
      A             8             П META-INF/versions/9/org/bouncycastle/pqc/crypto/newhope/PK     A #٥O  x  T             & META-INF/versions/9/org/bouncycastle/pqc/crypto/newhope/NHPrivateKeyParameters.classPK     A g  w  S              META-INF/versions/9/org/bouncycastle/pqc/crypto/newhope/NHPublicKeyParameters.classPK
 
      A             5             R META-INF/versions/9/org/bouncycastle/pqc/crypto/ntru/PK     A IX     L              META-INF/versions/9/org/bouncycastle/pqc/crypto/ntru/NTRUKeyParameters.classPK     A g    I              META-INF/versions/9/org/bouncycastle/pqc/crypto/ntru/NTRUParameters.classPK     A p*=+    S             s META-INF/versions/9/org/bouncycastle/pqc/crypto/ntru/NTRUPrivateKeyParameters.classPK     A !+*    R              META-INF/versions/9/org/bouncycastle/pqc/crypto/ntru/NTRUPublicKeyParameters.classPK
 
      A             :             ɫ META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/PK     A R;     W             ! META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKeyParameters.classPK     A d    T              META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeParameters.classPK     A }W    ^              META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimePrivateKeyParameters.classPK     A 6)  ^  ]              META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimePublicKeyParameters.classPK     A T#Q:     W             7 META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKeyParameters.classPK     A E:  /  T              META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeParameters.classPK     A W@    ^             q META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimePrivateKeyParameters.classPK     A ,  (  ]             = META-INF/versions/9/org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimePublicKeyParameters.classPK
 
      A             7              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PK     A 	bW    F             I META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/KMatrices.classPK     A >=    Q              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/KMatricesWithPointer.classPK     A ϶    K              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/LowmcConstants.classPK     A ŗN    M             g META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL1.classPK     A C_2    M              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL3.classPK     A %ܿ    M             ( META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL5.classPK     A 7$    @              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Msg.classPK     A HHVN5  x  I              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicEngine.classPK     A m     P              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicKeyParameters.classPK     A     Y              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L1Constants.classPK     A y    Y              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L3Constants.classPK     A f|    Y             , META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L5Constants.classPK     A H)    M              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicParameters.classPK     A *t    W             m META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicPrivateKeyParameters.classPK     A }    V              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/PicnicPublicKeyParameters.classPK     A _Q  0  L              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Signature$Proof.classPK     A     F              META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Signature.classPK     A F꓏    N             /! META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Signature2$Proof2.classPK     A [W`    G             :# META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Signature2.classPK     A (  
  A             r% META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Tape.classPK     A s  $  A             	+ META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Tree.classPK     A 3vq    B             7 META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/Utils.classPK     A %02    A             	; META-INF/versions/9/org/bouncycastle/pqc/crypto/picnic/View.classPK
 
      A             8             < META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/PK     A 0F9  `  L              = META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/ComputeInField.classPK     A &0  
  F             E META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/GF2Field.classPK     A {Q  *	  I             K META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowDRBG.classPK     A V
  k  S             Q META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowKeyComputation.classPK     A #z:    R             ] META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowKeyParameters.classPK     A @{  	  O             ^ META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowParameters.classPK     A     Y             c META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowPrivateKeyParameters.classPK     A &]  .  X             Hj META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowPublicKeyParameters.classPK     A   [  I             +p META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/RainbowUtil.classPK     A t!    E             bw META-INF/versions/9/org/bouncycastle/pqc/crypto/rainbow/Version.classPK
 
      A             6             y META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/PK     A 
  k  @             Jz META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/Poly.classPK     A I
    G             H META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/SABEREngine.classPK     A u     N             D META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/SABERKeyParameters.classPK     A nC    K              META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/SABERParameters.classPK     A B     U             m META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/SABERPrivateKeyParameters.classPK     A (SI,    T              META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/SABERPublicKeyParameters.classPK     A     R              META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/Symmetric$AesSymmetric.classPK     A [cf    T              META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/Symmetric$ShakeSymmetric.classPK     A ˖n    E              META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/Symmetric.classPK     A l    A              META-INF/versions/9/org/bouncycastle/pqc/crypto/saber/Utils.classPK
 
      A             7             ئ META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/PK     A c  c  A             - META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/ADRS.classPK     A p     J              META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/IndexedDigest.classPK     A ~r      ?             g META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/PK.classPK     A t
      ?              META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SK.classPK     A }@  K  T             Ү META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine$Sha2Engine.classPK     A ]q  	  X              META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine$Shake256Engine.classPK     A G
n
    I              META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine.classPK     A 4L      Q             i META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngineProvider.classPK     A W9o     P             v META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAKeyParameters.classPK     A R˳  P  `              META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters$Sha2EngineProvider.classPK     A PѸ  `  d             ) META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters$Shake256EngineProvider.classPK     A \%L  &  M             s META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters.classPK     A &S#  (  W             : META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAPrivateKeyParameters.classPK     A ]j    V              META-INF/versions/9/org/bouncycastle/pqc/crypto/slhdsa/SLHDSAPublicKeyParameters.classPK
 
      A             6              META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/PK     A m<  	  E             $ META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/GF16Utils.classPK     A ,P  b  E              META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/MapGroup1.classPK     A w>    E              META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/MapGroup2.classPK     A s  %  G              META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaEngine.classPK     A &n[Ú    L              META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaKeyElements.classPK     A Ed     X              META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaKeyGenerationParameters.classPK     A  -  +
  Q             7 META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaKeyPairGenerator.classPK     A <t    K              META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaParameters.classPK     A 29hVV    U              META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaPrivateKeyParameters.classPK     A 'IW    T             m META-INF/versions/9/org/bouncycastle/pqc/crypto/snova/SnovaPublicKeyParameters.classPK
 
      A             8             F META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincs/PK     A 2>    R              META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincs/SPHINCSKeyParameters.classPK     A ,0    Y             Z	 META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincs/SPHINCSPrivateKeyParameters.classPK     A Q;</    X              META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincs/SPHINCSPublicKeyParameters.classPK
 
      A             <              META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/PK     A jdi  m  F              
 META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/ADRS.classPK     A 0O    R              META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/HarakaS256Digest.classPK     A k    R             0 META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/HarakaS512Digest.classPK     A q      M             y META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/HarakaSBase.classPK     A MCW    L             , META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/HarakaSXof.classPK     A U   $  O             ?0 META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/IndexedDigest.classPK     A k      D             1 META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/PK.classPK     A |H      D             2 META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SK.classPK     A w  ,  a             +4 META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$HarakaSEngine.classPK     A 
    ^             9 META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$Sha2Engine.classPK     A  [  _
  b             :B META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$Shake256Engine.classPK     A *     S             yG META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine.classPK     A Lh3      [             K META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngineProvider.classPK     A      Z             L META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusKeyParameters.classPK     A }    m             N META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$HarakaSEngineProvider.classPK     A گ    j             P META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$Sha2EngineProvider.classPK     A &n?    n             R META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$Shake256EngineProvider.classPK     A -b	    W             rU META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters.classPK     A i-    a             Y_ META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusPrivateKeyParameters.classPK     A r    `             c META-INF/versions/9/org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusPublicKeyParameters.classPK
 
      A             5             f META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PK     A    K  L             hf META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PrivateKeyFactory.classPK     A v  x7  P             ~ META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PrivateKeyInfoFactory.classPK     A a      M              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$1.classPK     A s\    Y              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$BIKEConverter.classPK     A %    Y             b META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$CMCEConverter.classPK     A P8  	  ^             ј META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$DilithiumConverter.classPK     A ReN  .  [             ܜ META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$FalconConverter.classPK     A g%  3  Z              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$FrodoConverter.classPK     A }.    X              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$HQCConverter.classPK     A }0    X             ] META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$LMSConverter.classPK     A '{  E	  Z             o META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MLDSAConverter.classPK     A dt  B	  Z             r META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MLKEMConverter.classPK     A T  *  Y             n META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MayoConverter.classPK     A T  $  W             x META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NHConverter.classPK     A Ґ  ]  _              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NTRULPrimeConverter.classPK     A <  A  Y              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NtruConverter.classPK     A D  <  [             s META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$PicnicConverter.classPK     A .<  E  \             ~ META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$RainbowConverter.classPK     A y-O    Z              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SABERConverter.classPK     A 6?x	  [  [              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SLHDSAConverter.classPK     A   ]  _             e META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SNTRUPrimeConverter.classPK     A b\  C  \             ~ META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SPHINCSConverter.classPK     A     `              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SPHINCSPlusConverter.classPK     A J  3  Z             = META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SnovaConverter.classPK     A G>=V    i             F META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SubjectPublicKeyInfoConverter.classPK     A n=  H
  Y             3 META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$XMSSConverter.classPK     A -  y
  [              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory$XMSSMTConverter.classPK     A 9   @  K             e META-INF/versions/9/org/bouncycastle/pqc/crypto/util/PublicKeyFactory.classPK     A n  &  V              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/SubjectPublicKeyInfoFactory.classPK     A px&  }  @              META-INF/versions/9/org/bouncycastle/pqc/crypto/util/Utils.classPK
 
      A             5             ( META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/PK     A =V`  /  >             3) META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/BDS.classPK     A   @  F             ; META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/BDSStateMap.classPK     A F  6  F             	D META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/BDSTreeHash.classPK     A eX    K             _L META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/DefaultXMSSMTOid.classPK     A 6G  	  I             0R META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/DefaultXMSSOid.classPK     A 1m\  
  E             V META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/DigestUtil.classPK     A F}      L             [ META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/HashTreeAddress$1.classPK     A !*J  e  R             \ META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/HashTreeAddress$Builder.classPK     A 3O    J             =_ META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/HashTreeAddress.classPK     A ͹F    M             b META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/KeyedHashFunctions.classPK     A Zk1      I             e META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/LTreeAddress$1.classPK     A Rj
    O             f META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/LTreeAddress$Builder.classPK     A `#>  
  G             `i META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/LTreeAddress.classPK     A bz՜      K             l META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/OTSHashAddress$1.classPK     A     Q             (m META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/OTSHashAddress$Builder.classPK     A 5W>    I             o META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/OTSHashAddress.classPK     A %  v  C             jr META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlus.classPK     A 6g    F             ~ META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlusOid.classPK     A DA^H  O	  M              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlusParameters.classPK     A ́J    W              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlusPrivateKeyParameters.classPK     A DzS    V              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlusPublicKeyParameters.classPK     A 
Q    L             V META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/WOTSPlusSignature.classPK     A      N             ! META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSAddress$Builder.classPK     A 52  ?  F              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSAddress.classPK     A 0L    L             c META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSKeyParameters.classPK     A 9   f  N             ) META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTKeyParameters.classPK     A   5  K              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTParameters.classPK     A e|C      W             
 META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters$1.classPK     A G0    ]             9 META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters$Builder.classPK     A q    U             Ƥ META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters.classPK     A <zB'      V             F META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters$1.classPK     A 17!  	  \             p META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters$Builder.classPK     A OM    T              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters.classPK     A i    C              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSNode.classPK     A &    G             ļ META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSNodeUtil.classPK     A G      B              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSOid.classPK     A h
  Z  I              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSParameters.classPK     A Gʥ      U             P META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters$1.classPK     A wg'  
  [             x META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters$Builder.classPK     A } Q    S             ( META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters.classPK     A SWL      T              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters$1.classPK     A cB    Z              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters$Builder.classPK     A 8>{K    R              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters.classPK     A _$
R      W              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSStoreableObjectInterface.classPK     A [3    R              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSUtil$CheckingStream.classPK     A :6	  &  C              META-INF/versions/9/org/bouncycastle/pqc/crypto/xmss/XMSSUtil.classPK
 
      A             0             z META-INF/versions/9/org/bouncycastle/pqc/jcajce/PK
 
      A             ;              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/PK     A o      H             ! META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/BIKEKey.classPK     A T      H             3 META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/CMCEKey.classPK     A x՝      M             D META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/DilithiumKey.classPK     A       T             \ META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/DilithiumPrivateKey.classPK     A u      S              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/DilithiumPublicKey.classPK     A       J              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/FalconKey.classPK     A '     Q              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/FalconPrivateKey.classPK     A ΅      P              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/FalconPublicKey.classPK     A Oj_C      G              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/HQCKey.classPK     A kXc      I              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/KyberKey.classPK     A y     P               META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/KyberPrivateKey.classPK     A U+      O              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/KyberPublicKey.classPK     A xi!N      G               META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/LMSKey.classPK     A ֪   I  N              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/LMSPrivateKey.classPK     A  
[      H             E META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/MayoKey.classPK     A Ap   y   F             S META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/NHKey.classPK     A       M             7 META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/NHPrivateKey.classPK     A       L             P META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/NHPublicKey.classPK     A 3J      H             f	 META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/NTRUKey.classPK     A )      J             w
 META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/PicnicKey.classPK     A @ L      K              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/SPHINCSKey.classPK     A *Z      O              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusKey.classPK     A k3g   &  V             
 META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusPrivateKey.classPK     A ʘ      U              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusPublicKey.classPK     A wO      I              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/SnovaKey.classPK     A MQ      H              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/XMSSKey.classPK     A w4V      J              META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/XMSSMTKey.classPK     A }:   R  Q             ) META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/XMSSMTPrivateKey.classPK     A T}   L  O             x META-INF/versions/9/org/bouncycastle/pqc/jcajce/interfaces/XMSSPrivateKey.classPK
 
      A             9              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/PK     A vX  n  X              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider$1.classPK     A ZoQ    X              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider$2.classPK     A <83r    V             ( META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider.classPK
 
      A             >             & META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/bike/PK     A Od    T             z& META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/bike/BCBIKEPrivateKey.classPK     A 9  '  S             + META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/bike/BCBIKEPublicKey.classPK     A US    U             0 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyFactorySpi.classPK
 
      A             >             6 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/cmce/PK     A =    T             '7 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/cmce/BCCMCEPrivateKey.classPK     A }E  '  S             < META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/cmce/BCCMCEPublicKey.classPK     A aq\Q    U             A META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyFactorySpi.classPK
 
      A             C             vG META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/PK     A 3    ^             G META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/BCDilithiumPrivateKey.classPK     A zQ    ]             M META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/BCDilithiumPublicKey.classPK     A !"/B    e             YS META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2.classPK     A `]	    i             T META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2_AES.classPK     A r    e             V META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3.classPK     A {Ko	    i             #X META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3_AES.classPK     A Ye    e             Y META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5.classPK     A BC	    i             W[ META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5_AES.classPK     A yI  
  _             \ META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi.classPK
 
      A             @             c META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/PK     A   #  X             ac META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/BCFalconPrivateKey.classPK     A mY    W             i META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/BCFalconPublicKey.classPK     A S    d             n META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon1024.classPK     A '    c             rp META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon512.classPK     A g    Y             r META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi.classPK
 
      A             =             w META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/PK     A ٛ@    R             w META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/BCHQCPrivateKey.classPK     A B2    Q             J} META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/BCHQCPublicKey.classPK     A J#     Z             b META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC128.classPK     A Z     Z              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC192.classPK     A ֍     Z             g META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC256.classPK     A r    S              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi.classPK
 
      A             ?             ݍ META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/PK     A uzQ  H
  V             : META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/BCKyberPrivateKey.classPK     A ,	I  p  U              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/BCKyberPublicKey.classPK     A w3    a             q META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber1024.classPK     A ap    e              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber1024_AES.classPK     A uK;
    `              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber512.classPK     A Ƀ    d             < META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber512_AES.classPK     A F(f7    `             ҟ META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber768.classPK     A ,    d             k META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber768_AES.classPK     A 	  
  W              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi.classPK
 
      A             =             9 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/lms/PK     A ME  
  R              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/lms/BCLMSPrivateKey.classPK     A 9!l  
  Q             Y META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/lms/BCLMSPublicKey.classPK     A Ig    S              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/lms/LMSKeyFactorySpi.classPK
 
      A             >              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/PK     A >a    T              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/BCMayoPrivateKey.classPK     A l0G  '  S             = META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/BCMayoPublicKey.classPK     A y,n     [             Y META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo1.classPK     A ᳟6     [              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo2.classPK     A i9x     [             [ META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo3.classPK     A Y)     [              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo5.classPK     A d=4  O  U             ] META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi.classPK
 
      A             A              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/newhope/PK     A p\  	  U             s META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/newhope/BCNHPrivateKey.classPK     A .!  5	  T             R META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/newhope/BCNHPublicKey.classPK     A xJR    V              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/newhope/NHKeyFactorySpi.classPK
 
      A             >              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/ntru/PK     A nOK  J  T             ' META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/ntru/BCNTRUPrivateKey.classPK     A 0  
  S             i META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/ntru/BCNTRUPublicKey.classPK     A #U^S    U             k META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyFactorySpi.classPK
 
      A             @             A META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/picnic/PK     A $:  p  X              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/picnic/BCPicnicPrivateKey.classPK     A .^  
  W              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/picnic/BCPicnicPublicKey.classPK     A T    Y              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/picnic/PicnicKeyFactorySpi.classPK
 
      A             ?              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/PK     A ]1    V             # META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/BCSnovaPrivateKey.classPK     A    9  U              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/BCSnovaPublicKey.classPK     A Vy
    h             
 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_ESK.classPK     A {    n             E META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SHAKE_ESK.classPK     A r    n              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SHAKE_SSK.classPK     A     h              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SSK.classPK     A ?6ѐ    h             L META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_ESK.classPK     A q    n              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SHAKE_ESK.classPK     A     n              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SHAKE_SSK.classPK     A ò    h             O META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SSK.classPK     A $
    h              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_ESK.classPK     A b0x    n              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SHAKE_ESK.classPK     A .Ӎ    n             F META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SHAKE_SSK.classPK     A )s
    h              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SSK.classPK     A <+H
    h             ! META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_ESK.classPK     A ;	    n             ># META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SHAKE_ESK.classPK     A J'    n             $ META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SHAKE_SSK.classPK     A 
    h             & META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SSK.classPK     A &    i             F( META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_ESK.classPK     A %&    o             ) META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SHAKE_ESK.classPK     A {6    o             + META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SHAKE_SSK.classPK     A 91J    i             V- META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SSK.classPK     A j>
    h             . META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_ESK.classPK     A P    n             0 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SHAKE_ESK.classPK     A 8    n             Q2 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SHAKE_SSK.classPK     A e!
    h             4 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SSK.classPK     A czj    i             5 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_ESK.classPK     A 
ґ    o             L7 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SHAKE_ESK.classPK     A C    o             9 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SHAKE_SSK.classPK     A t    i             : META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SSK.classPK     A .    i             \< META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_ESK.classPK     A y    o             > META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SHAKE_ESK.classPK     A $Z    o             ? META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SHAKE_SSK.classPK     A F    i             kA META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SSK.classPK     A i    i             C META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_ESK.classPK     A Qw    o             D META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SHAKE_ESK.classPK     A w*    o             kF META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SHAKE_SSK.classPK     A '    i              H META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SSK.classPK     A .
    i             I META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_ESK.classPK     A Px    o             jK META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SHAKE_ESK.classPK     A c    o              M META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SHAKE_SSK.classPK     A ?v    i             N META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SSK.classPK     A kY3m    i             zP META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_ESK.classPK     A SwFZ    o              R META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SHAKE_ESK.classPK     A     o             S META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SHAKE_SSK.classPK     A CN    i             U META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SSK.classPK     A xȟ	  u&  W             1W META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi.classPK
 
      A             A             Ua META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincs/PK     A F-J  (  ]             a META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincs/BCSphincs256PrivateKey.classPK     A VC  
  \             h META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincs/BCSphincs256PublicKey.classPK     A +M2W    ^             n META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincs/Sphincs256KeyFactorySpi.classPK
 
      A             E             t META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincsplus/PK     A ]f`?  
  b             9u META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincsplus/BCSPHINCSPlusPrivateKey.classPK     A T  
  a             { META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincsplus/BCSPHINCSPlusPublicKey.classPK     A `#`    c              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyFactorySpi.classPK
 
      A             >             ܆ META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/util/PK     A rz    U             8 META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi.classPK     A NF    K             < META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/util/KeyUtil.classPK
 
      A             >              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/PK     A ,e  9  V             W META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSMTPrivateKey.classPK     A ]`h<e    U              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSMTPublicKey.classPK     A o    T              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSPrivateKey.classPK     A JZ  V  S             ڥ META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSPublicKey.classPK     A }7k  J  [              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/DigestUtil$DoubleDigest.classPK     A 4  ^	  N              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/DigestUtil.classPK     A 
 S    U              META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/XMSSKeyFactorySpi.classPK     A NV    W             j META-INF/versions/9/org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTKeyFactorySpi.classPK
 
      A             5             E META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/PK     A Rc    L              META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/BIKEParameterSpec.classPK     A "o    L             u META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/CMCEParameterSpec.classPK     A LO y  g  Q             ^ META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/DilithiumParameterSpec.classPK     A e    N             V META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/FalconParameterSpec.classPK     A t_    K             7 META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/HQCParameterSpec.classPK     A R$}  K  M              META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/KyberParameterSpec.classPK     A   [  L              META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/MayoParameterSpec.classPK     A d    L             $ META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/NTRUParameterSpec.classPK     A <T<]    N             o META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/PicnicParameterSpec.classPK     A D

  [  S             H META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/SPHINCSPlusParameterSpec.classPK     A g+   <  M              META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/SnovaParameterSpec.classPK     A Bh    L             Q META-INF/versions/9/org/bouncycastle/pqc/jcajce/spec/XMSSParameterSpec.classPK
 
      A             .             3 META-INF/versions/9/org/bouncycastle/pqc/math/PK
 
      A             3              META-INF/versions/9/org/bouncycastle/pqc/math/ntru/PK     A ;(    J              META-INF/versions/9/org/bouncycastle/pqc/math/ntru/HPS4096Polynomial.classPK     A 3  	  F             b META-INF/versions/9/org/bouncycastle/pqc/math/ntru/HPSPolynomial.classPK     A w"    K              META-INF/versions/9/org/bouncycastle/pqc/math/ntru/HRSS1373Polynomial.classPK     A t    G             ! META-INF/versions/9/org/bouncycastle/pqc/math/ntru/HRSSPolynomial.classPK     A 7    C             , META-INF/versions/9/org/bouncycastle/pqc/math/ntru/Polynomial.classPK
 
      A             >             o META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/PK     A e      R              META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS2048509.classPK     A ޓu      R              META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS2048677.classPK     A h#     S             ! META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS40961229.classPK     A DM     R             	 META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS4096821.classPK     A \Z    W             ! META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHPSParameterSet.classPK     A <3eة      P              
 META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSS1373.classPK     A :<      O             ' META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSS701.classPK     A a<t    X             L META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSSParameterSet.classPK     A  lq  7  T             F META-INF/versions/9/org/bouncycastle/pqc/math/ntru/parameters/NTRUParameterSet.classPK
 
      A             *             9 META-INF/versions/9/org/bouncycastle/util/PK     A 9  >  ?              META-INF/versions/9/org/bouncycastle/util/Arrays$Iterator.classPK     A |  +)  6              META-INF/versions/9/org/bouncycastle/util/Arrays.classPK     A `/0f  =  A             
( META-INF/versions/9/org/bouncycastle/util/BigIntegers$Cache.classPK     A d
    ;             * META-INF/versions/9/org/bouncycastle/util/BigIntegers.classPK     A 0#    5             D6 META-INF/versions/9/org/bouncycastle/util/Bytes.classPK     A 0s      9             8 META-INF/versions/9/org/bouncycastle/util/Encodable.classPK     A 99    :             9 META-INF/versions/9/org/bouncycastle/util/Exceptions.classPK     A gyc  k  ;             ;; META-INF/versions/9/org/bouncycastle/util/Fingerprint.classPK     A 1H  f  4             @ META-INF/versions/9/org/bouncycastle/util/GF16.classPK     A cx  P  8             C META-INF/versions/9/org/bouncycastle/util/Integers.classPK     A      8             E META-INF/versions/9/org/bouncycastle/util/Iterable.classPK     A 5$    5             F META-INF/versions/9/org/bouncycastle/util/Longs.classPK     A 8]}      8             TI META-INF/versions/9/org/bouncycastle/util/Memoable.classPK     A ן      F             7J META-INF/versions/9/org/bouncycastle/util/MemoableResetException.classPK     A 5     7             JK META-INF/versions/9/org/bouncycastle/util/Objects.classPK     A 7
  -  4             L META-INF/versions/9/org/bouncycastle/util/Pack.classPK     A ug  ;  <             ;S META-INF/versions/9/org/bouncycastle/util/Properties$1.classPK     A x˝
e  5  <             U META-INF/versions/9/org/bouncycastle/util/Properties$2.classPK     A [  1
  :             V META-INF/versions/9/org/bouncycastle/util/Properties.classPK     A 3     :             ] META-INF/versions/9/org/bouncycastle/util/StringList.classPK     A @]  [  9             _ META-INF/versions/9/org/bouncycastle/util/Strings$1.classPK     A ?ר    F             ` META-INF/versions/9/org/bouncycastle/util/Strings$StringListImpl.classPK     A )Hٖ  ;  7             c META-INF/versions/9/org/bouncycastle/util/Strings.classPK
 
      A             3             l META-INF/versions/9/org/bouncycastle/util/encoders/PK     A DČ   l  I             >m META-INF/versions/9/org/bouncycastle/util/encoders/DecoderException.classPK     A '&   V  @             n META-INF/versions/9/org/bouncycastle/util/encoders/Encoder.classPK     A Ň   l  I             o META-INF/versions/9/org/bouncycastle/util/encoders/EncoderException.classPK     A Cy  	  <             [q META-INF/versions/9/org/bouncycastle/util/encoders/Hex.classPK     A ZnB  
  C             >v META-INF/versions/9/org/bouncycastle/util/encoders/HexEncoder.classPK     A 03J"    =             | META-INF/versions/9/org/bouncycastle/util/encoders/UTF8.classPK
 
      A             -             ~ META-INF/versions/9/org/bouncycastle/util/io/PK     A H      J             Ɂ META-INF/versions/9/org/bouncycastle/util/io/StreamOverflowException.classPK     A fy  6  :             ߂ META-INF/versions/9/org/bouncycastle/util/io/Streams.classPK
 
    z[                          META-INF/versions/25/OSGI-INF/PK   z[͛:f    )             G META-INF/versions/25/OSGI-INF/MANIFEST.MFPK     A ^P
  #  %              META-INF/versions/9/module-info.classPK
 
      A                          g org/PK
 
      A                           org/bouncycastle/PK     A ł                  org/bouncycastle/LICENSE.classPK
 
      A                           org/bouncycastle/asn1/PK     A MSK    &              org/bouncycastle/asn1/ASN1Absent.classPK     A ~/J  @  +              org/bouncycastle/asn1/ASN1BMPString$1.classPK     A 2a  g
  )             > org/bouncycastle/asn1/ASN1BMPString.classPK     A Ĺ纇  5  +              org/bouncycastle/asn1/ASN1BitString$1.classPK     A >X
  Q  )             ֤ org/bouncycastle/asn1/ASN1BitString.classPK     A ǌ   Z  /              org/bouncycastle/asn1/ASN1BitStringParser.classPK     A aoI  :  )              org/bouncycastle/asn1/ASN1Boolean$1.classPK     A #Qb    '              org/bouncycastle/asn1/ASN1Boolean.classPK     A ~hScQ   T   &             Q org/bouncycastle/asn1/ASN1Choice.classPK     A gx      )              org/bouncycastle/asn1/ASN1Encodable.classPK     A dǋ+  
  /             Ź org/bouncycastle/asn1/ASN1EncodableVector.classPK     A +f      (             M org/bouncycastle/asn1/ASN1Encoding.classPK     A L  E  ,             A org/bouncycastle/asn1/ASN1Enumerated$1.classPK     A xd  |  *              org/bouncycastle/asn1/ASN1Enumerated.classPK     A ~R   t  )             * org/bouncycastle/asn1/ASN1Exception.classPK     A ,,T+    *             v org/bouncycastle/asn1/ASN1External$1.classPK     A 0P%	    (              org/bouncycastle/asn1/ASN1External.classPK     A q   )  .             t org/bouncycastle/asn1/ASN1ExternalParser.classPK     A \I  L  /              org/bouncycastle/asn1/ASN1GeneralString$1.classPK     A }  J  -             8 org/bouncycastle/asn1/ASN1GeneralString.classPK     A %N  R  1              org/bouncycastle/asn1/ASN1GeneralizedTime$1.classPK     A {Ed  %  /             L org/bouncycastle/asn1/ASN1GeneralizedTime.classPK     A bX   !  )              org/bouncycastle/asn1/ASN1Generator.classPK     A aT+I  L  /              org/bouncycastle/asn1/ASN1GraphicString$1.classPK     A [G  !  -             g org/bouncycastle/asn1/ASN1GraphicString.classPK     A J  @  +              org/bouncycastle/asn1/ASN1IA5String$1.classPK     A     )             y org/bouncycastle/asn1/ASN1IA5String.classPK     A P  _,  +              org/bouncycastle/asn1/ASN1InputStream.classPK     A 1I  :  )              org/bouncycastle/asn1/ASN1Integer$1.classPK     A Sh/G  o  '              org/bouncycastle/asn1/ASN1Integer.classPK     A b_  ^  &             3 org/bouncycastle/asn1/ASN1Null$1.classPK     A   %  $              org/bouncycastle/asn1/ASN1Null.classPK     A (犄J  L  /              org/bouncycastle/asn1/ASN1NumericString$1.classPK     A 6y  Z
  -             d org/bouncycastle/asn1/ASN1NumericString.classPK     A [^SZ    &             $ org/bouncycastle/asn1/ASN1Object.classPK     A =E}    2             r' org/bouncycastle/asn1/ASN1ObjectDescriptor$1.classPK     A     0             O) org/bouncycastle/asn1/ASN1ObjectDescriptor.classPK     A :S  W  2             . org/bouncycastle/asn1/ASN1ObjectIdentifier$1.classPK     A &Eo  D  :             0 org/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle.classPK     A ޓn9
  b  0             j2 org/bouncycastle/asn1/ASN1ObjectIdentifier.classPK     A ?\J    -             @ org/bouncycastle/asn1/ASN1OctetString$1.classPK     A %3G    +             A org/bouncycastle/asn1/ASN1OctetString.classPK     A ^B      1             FG org/bouncycastle/asn1/ASN1OctetStringParser.classPK     A 9I"  
  ,             QH org/bouncycastle/asn1/ASN1OutputStream.classPK     A /     0             mN org/bouncycastle/asn1/ASN1ParsingException.classPK     A oW  y  )             O org/bouncycastle/asn1/ASN1Primitive.classPK     A ="J  R  1             wS org/bouncycastle/asn1/ASN1PrintableString$1.classPK     A ~y  S
  /              U org/bouncycastle/asn1/ASN1PrintableString.classPK     A X,yM  H  -             |[ org/bouncycastle/asn1/ASN1RelativeOID$1.classPK     A Bp    +             $] org/bouncycastle/asn1/ASN1RelativeOID.classPK     A b    *             )j org/bouncycastle/asn1/ASN1Sequence$1.classPK     A ڹ^  3  *             k org/bouncycastle/asn1/ASN1Sequence$2.classPK     A N)K    *             m org/bouncycastle/asn1/ASN1Sequence$3.classPK     A 8}Ԗ  ?  (             rp org/bouncycastle/asn1/ASN1Sequence.classPK     A N   )  .             uy org/bouncycastle/asn1/ASN1SequenceParser.classPK     A J%    %             z org/bouncycastle/asn1/ASN1Set$1.classPK     A  t    %             
| org/bouncycastle/asn1/ASN1Set$2.classPK     A uK  p  %             I~ org/bouncycastle/asn1/ASN1Set$3.classPK     A xD
    #              org/bouncycastle/asn1/ASN1Set.classPK     A ]   $  )             | org/bouncycastle/asn1/ASN1SetParser.classPK     A VK>	    ,              org/bouncycastle/asn1/ASN1StreamParser.classPK     A ,	l      &             ) org/bouncycastle/asn1/ASN1String.classPK     A 	K  @  +              org/bouncycastle/asn1/ASN1T61String$1.classPK     A SB  2  )              org/bouncycastle/asn1/ASN1T61String.classPK     A \    #              org/bouncycastle/asn1/ASN1Tag.classPK     A N  1$  ,             P org/bouncycastle/asn1/ASN1TaggedObject.classPK     A 1-Q    2              org/bouncycastle/asn1/ASN1TaggedObjectParser.classPK     A Z+.    $             = org/bouncycastle/asn1/ASN1Type.classPK     A >]I  :  )              org/bouncycastle/asn1/ASN1UTCTime$1.classPK     A w1    '             ] org/bouncycastle/asn1/ASN1UTCTime.classPK     A vG  C  ,              org/bouncycastle/asn1/ASN1UTF8String$1.classPK     A 
'v    *              org/bouncycastle/asn1/ASN1UTF8String.classPK     A K<;F  R  1              org/bouncycastle/asn1/ASN1UniversalString$1.classPK     A );    /              org/bouncycastle/asn1/ASN1UniversalString.classPK     A C4q  n  -              org/bouncycastle/asn1/ASN1UniversalType.classPK     A     .              org/bouncycastle/asn1/ASN1UniversalTypes.classPK     A zd:+    $              org/bouncycastle/asn1/ASN1Util.classPK     A pL  O  0              org/bouncycastle/asn1/ASN1VideotexString$1.classPK     A i  
  .              org/bouncycastle/asn1/ASN1VideotexString.classPK     A H  L  /              org/bouncycastle/asn1/ASN1VisibleString$1.classPK     A   J  -              org/bouncycastle/asn1/ASN1VisibleString.classPK     A Zjm  
  (              org/bouncycastle/asn1/BERBitString.classPK     A     .              org/bouncycastle/asn1/BERBitStringParser.classPK     A h
  l  &             9 org/bouncycastle/asn1/BERFactory.classPK     A  %    (             " org/bouncycastle/asn1/BERGenerator.classPK     A XV	    *              org/bouncycastle/asn1/BEROctetString.classPK     A oa	    J              org/bouncycastle/asn1/BEROctetStringGenerator$BufferedBEROctetStream.classPK     A Ƞty    3             p org/bouncycastle/asn1/BEROctetStringGenerator.classPK     A e]V    0             J org/bouncycastle/asn1/BEROctetStringParser.classPK     A 2      +             r  org/bouncycastle/asn1/BEROutputStream.classPK     A bq75  D  '             [  org/bouncycastle/asn1/BERSequence.classPK     A E\  _  0               org/bouncycastle/asn1/BERSequenceGenerator.classPK     A t>>    -               org/bouncycastle/asn1/BERSequenceParser.classPK     A brW(    "             
  org/bouncycastle/asn1/BERSet.classPK     A V>    (             
  org/bouncycastle/asn1/BERSetParser.classPK     A b\  N  +               org/bouncycastle/asn1/BERTaggedObject.classPK     A <aB    1             K  org/bouncycastle/asn1/BERTaggedObjectParser.classPK     A 
  J  #               org/bouncycastle/asn1/BERTags.classPK     A 4߅    0               org/bouncycastle/asn1/ConstructedBitStream.classPK     A 4@  ,  2             J  org/bouncycastle/asn1/ConstructedOctetStream.classPK     A 6     (             !  org/bouncycastle/asn1/DERBMPString.classPK     A I*    (             "  org/bouncycastle/asn1/DERBitString.classPK     A !Rr    '             q&  org/bouncycastle/asn1/DERExternal.classPK     A \    -             )  org/bouncycastle/asn1/DERExternalParser.classPK     A q$  l  &             ,  org/bouncycastle/asn1/DERFactory.classPK     A uj      ,             .  org/bouncycastle/asn1/DERGeneralString.classPK     A 48  s  .             /  org/bouncycastle/asn1/DERGeneralizedTime.classPK     A yEb  N  (             2  org/bouncycastle/asn1/DERGenerator.classPK     A j      ,             5  org/bouncycastle/asn1/DERGraphicString.classPK     A <   /  (             6  org/bouncycastle/asn1/DERIA5String.classPK     A :%    #             7  org/bouncycastle/asn1/DERNull.classPK     A }   7  ,             9  org/bouncycastle/asn1/DERNumericString.classPK     A &?   \  *             
;  org/bouncycastle/asn1/DEROctetString.classPK     A 6o    0             =  org/bouncycastle/asn1/DEROctetStringParser.classPK     A j    +             i@  org/bouncycastle/asn1/DEROutputStream.classPK     A    ;  .             B  org/bouncycastle/asn1/DERPrintableString.classPK     A pa    '             C  org/bouncycastle/asn1/DERSequence.classPK     A #  E  0             I  org/bouncycastle/asn1/DERSequenceGenerator.classPK     A h0<    "             tK  org/bouncycastle/asn1/DERSet.classPK     A T0R     (              P  org/bouncycastle/asn1/DERT61String.classPK     A 7ٙ    +             Q  org/bouncycastle/asn1/DERTaggedObject.classPK     A Ɛ_   )  &             U  org/bouncycastle/asn1/DERUTCTime.classPK     A ơ>r      )             %V  org/bouncycastle/asn1/DERUTF8String.classPK     A OZ      .             ,W  org/bouncycastle/asn1/DERUniversalString.classPK     A 0No¢      -             +X  org/bouncycastle/asn1/DERVideotexString.classPK     A 0M      ,             (Y  org/bouncycastle/asn1/DERVisibleString.classPK     A #W0    '             5Z  org/bouncycastle/asn1/DLBitString.classPK     A nW    -             1]  org/bouncycastle/asn1/DLBitStringParser.classPK     A gn  u  &             a  org/bouncycastle/asn1/DLExternal.classPK     A HxX  e  %             d  org/bouncycastle/asn1/DLFactory.classPK     A 
d    *             f  org/bouncycastle/asn1/DLOutputStream.classPK     A &8u    &             h  org/bouncycastle/asn1/DLSequence.classPK     A mF-  {  ,             n  org/bouncycastle/asn1/DLSequenceParser.classPK     A u    !             p  org/bouncycastle/asn1/DLSet.classPK     A mR+    '             Mt  org/bouncycastle/asn1/DLSetParser.classPK     A |h    *             v  org/bouncycastle/asn1/DLTaggedObject.classPK     A HM    0             z  org/bouncycastle/asn1/DLTaggedObjectParser.classPK     A 8     5             }  org/bouncycastle/asn1/DefiniteLengthInputStream.classPK     A *6'      1               org/bouncycastle/asn1/InMemoryRepresentable.classPK     A T~}  8  7               org/bouncycastle/asn1/IndefiniteLengthInputStream.classPK     A EEm  z  7             u  org/bouncycastle/asn1/LazyConstructionEnumeration.classPK     A ]6k8    /             G  org/bouncycastle/asn1/LazyEncodedSequence.classPK     A boM    .             ܎  org/bouncycastle/asn1/LimitedInputStream.classPK     A Ʒ~  h  &               org/bouncycastle/asn1/LocaleUtil.classPK     A i  o  (               org/bouncycastle/asn1/OIDTokenizer.classPK     A f  @  &             l  org/bouncycastle/asn1/StreamUtil.classPK
 
      A                          ՘  org/bouncycastle/asn1/anssi/PK     A =e6    4               org/bouncycastle/asn1/anssi/ANSSINamedCurves$1.classPK     A _#    2               org/bouncycastle/asn1/anssi/ANSSINamedCurves.classPK     A 1   i  8               org/bouncycastle/asn1/anssi/ANSSIObjectIdentifiers.classPK
 
      A                            org/bouncycastle/asn1/bc/PK     A Ѵs2P  P  2             :  org/bouncycastle/asn1/bc/BCObjectIdentifiers.classPK     A {    7               org/bouncycastle/asn1/bc/EncryptedObjectStoreData.classPK     A  m  n  6               org/bouncycastle/asn1/bc/EncryptedPrivateKeyData.classPK     A s:    5             :  org/bouncycastle/asn1/bc/EncryptedSecretKeyData.classPK     A XEv  p
  ,             J  org/bouncycastle/asn1/bc/ExternalValue.classPK     A C    0               org/bouncycastle/asn1/bc/LinkedCertificate.classPK     A +k  4  )             Y  org/bouncycastle/asn1/bc/ObjectData.classPK     A t    1               org/bouncycastle/asn1/bc/ObjectDataSequence.classPK     A Om  P  *             D  org/bouncycastle/asn1/bc/ObjectStore.classPK     A :G$>t  p  .               org/bouncycastle/asn1/bc/ObjectStoreData.classPK     A č    8             k  org/bouncycastle/asn1/bc/ObjectStoreIntegrityCheck.classPK     A Dض0  L  4             ^  org/bouncycastle/asn1/bc/PbkdMacIntegrityCheck.classPK     A ٫!  D  ,               org/bouncycastle/asn1/bc/SecretKeyData.classPK     A ~iCB  6  -               org/bouncycastle/asn1/bc/SignatureCheck.classPK
 
      A                           }  org/bouncycastle/asn1/cryptopro/PK     A   [	  @               org/bouncycastle/asn1/cryptopro/CryptoProObjectIdentifiers.classPK     A #    =               org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$1.classPK     A ,    =               org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$2.classPK     A ť    =             N  org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$3.classPK     A aK  J  =               org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$4.classPK     A |d  S  =             X! org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$5.classPK     A H(d  Q  =             '! org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$6.classPK     A ׵~    =             	! org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves$7.classPK     A ʛڊ  y  ;             ^! org/bouncycastle/asn1/cryptopro/ECGOST3410NamedCurves.classPK     A ?a  3	  B             [! org/bouncycastle/asn1/cryptopro/ECGOST3410ParamSetParameters.classPK     A )#    9             ! org/bouncycastle/asn1/cryptopro/GOST28147Parameters.classPK     A 1:~,    =             ! org/bouncycastle/asn1/cryptopro/GOST3410NamedParameters.classPK     A   )	  @             _%! org/bouncycastle/asn1/cryptopro/GOST3410ParamSetParameters.classPK     A   z
  D             )! org/bouncycastle/asn1/cryptopro/GOST3410PublicKeyAlgParameters.classPK     A y6  n	  =             7.! org/bouncycastle/asn1/cryptopro/Gost2814789EncryptedKey.classPK     A !p
    B             2! org/bouncycastle/asn1/cryptopro/Gost2814789KeyWrapParameters.classPK     A z&^  c  ;             6! org/bouncycastle/asn1/cryptopro/GostR3410KeyTransport.classPK     A P*y    B             :! org/bouncycastle/asn1/cryptopro/GostR3410TransportParameters.classPK
 
      A                          >! org/bouncycastle/asn1/gm/PK     A p"$    .             5?! org/bouncycastle/asn1/gm/GMNamedCurves$1.classPK     A S!    .             B! org/bouncycastle/asn1/gm/GMNamedCurves$2.classPK     A   
  ,             &F! org/bouncycastle/asn1/gm/GMNamedCurves.classPK     A gk  E  2             _K! org/bouncycastle/asn1/gm/GMObjectIdentifiers.classPK
 
      A                          R! org/bouncycastle/asn1/nist/PK     A W
  9  8             R! org/bouncycastle/asn1/nist/KMACwithSHAKE128_params.classPK     A %  9  8             +W! org/bouncycastle/asn1/nist/KMACwithSHAKE256_params.classPK     A k,  V
  0             [! org/bouncycastle/asn1/nist/NISTNamedCurves.classPK     A k    6              `! org/bouncycastle/asn1/nist/NISTObjectIdentifiers.classPK
 
      A                          h! org/bouncycastle/asn1/ocsp/PK     A 0x  =
  2             (i! org/bouncycastle/asn1/ocsp/BasicOCSPResponse.classPK     A S?    '             m! org/bouncycastle/asn1/ocsp/CertID.classPK     A f0  :	  +             ;r! org/bouncycastle/asn1/ocsp/CertStatus.classPK     A UZ1l  
  &             hv! org/bouncycastle/asn1/ocsp/CrlID.classPK     A :    6             ({! org/bouncycastle/asn1/ocsp/OCSPObjectIdentifiers.classPK     A V+s+  '  ,             }! org/bouncycastle/asn1/ocsp/OCSPRequest.classPK     A !ҫ  f  -             ܀! org/bouncycastle/asn1/ocsp/OCSPResponse.classPK     A WfZ  h  3             .! org/bouncycastle/asn1/ocsp/OCSPResponseStatus.classPK     A mΉ    (             ! org/bouncycastle/asn1/ocsp/Request.classPK     A h  a  ,             6! org/bouncycastle/asn1/ocsp/ResponderID.classPK     A (X  ?  .             ! org/bouncycastle/asn1/ocsp/ResponseBytes.classPK     A %W%    -             \! org/bouncycastle/asn1/ocsp/ResponseData.classPK     A u3  	  ,             ! org/bouncycastle/asn1/ocsp/RevokedInfo.classPK     A ϓZ  I  /             '! org/bouncycastle/asn1/ocsp/ServiceLocator.classPK     A !<  <	  *             ! org/bouncycastle/asn1/ocsp/Signature.classPK     A iO  
  /             ! org/bouncycastle/asn1/ocsp/SingleResponse.classPK     A e7Ua    +             ^! org/bouncycastle/asn1/ocsp/TBSRequest.classPK
 
      A                          ! org/bouncycastle/asn1/pkcs/PK     A S    *             Q! org/bouncycastle/asn1/pkcs/Attribute.classPK     A "  '  2             ! org/bouncycastle/asn1/pkcs/AuthenticatedSafe.classPK     A ڭg    '             ! org/bouncycastle/asn1/pkcs/CRLBag.classPK     A Beh    (             |! org/bouncycastle/asn1/pkcs/CertBag.classPK     A P|  ;  5             :! org/bouncycastle/asn1/pkcs/CertificationRequest.classPK     A     9             ! org/bouncycastle/asn1/pkcs/CertificationRequestInfo.classPK     A ־*    ,             ! org/bouncycastle/asn1/pkcs/ContentInfo.classPK     A g/    ,             B! org/bouncycastle/asn1/pkcs/DHParameter.classPK     A gר  	  .             ! org/bouncycastle/asn1/pkcs/EncryptedData.classPK     A v[    8             ! org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.classPK     A     1             
! org/bouncycastle/asn1/pkcs/EncryptionScheme.classPK     A {c    6             ! org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.classPK     A s@     2             z! org/bouncycastle/asn1/pkcs/KeyDerivationFunc.classPK     A )    (             ! org/bouncycastle/asn1/pkcs/MacData.classPK     A 鷪    -             ! org/bouncycastle/asn1/pkcs/PBEParameter.classPK     A Rç#B    0             *! org/bouncycastle/asn1/pkcs/PBES2Parameters.classPK     A &8ݔS  b  -             ! org/bouncycastle/asn1/pkcs/PBKDF2Params.classPK     A $    -             x! org/bouncycastle/asn1/pkcs/PBMAC1Params.classPK     A 
D    0             ! org/bouncycastle/asn1/pkcs/PKCS12PBEParams.classPK     A ~ޔ	  %  6             ! org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.classPK     A @0R    $             B! org/bouncycastle/asn1/pkcs/Pfx.classPK     A N#  u  /             ! org/bouncycastle/asn1/pkcs/PrivateKeyInfo.classPK     A E4    0             " org/bouncycastle/asn1/pkcs/RC2CBCParameter.classPK     A M    0             U
" org/bouncycastle/asn1/pkcs/RSAESOAEPparams.classPK     A R&    .             " org/bouncycastle/asn1/pkcs/RSAPrivateKey.classPK     A pT    7             " org/bouncycastle/asn1/pkcs/RSAPrivateKeyStructure.classPK     A d    -             " org/bouncycastle/asn1/pkcs/RSAPublicKey.classPK     A o  
  0             " org/bouncycastle/asn1/pkcs/RSASSAPSSparams.classPK     A _6}  %  (             s$" org/bouncycastle/asn1/pkcs/SafeBag.classPK     A -    +             '" org/bouncycastle/asn1/pkcs/SignedData.classPK     A 5N    +              -" org/bouncycastle/asn1/pkcs/SignerInfo.classPK
 
      A                          2" org/bouncycastle/asn1/sec/PK     A Z:pF  
  ,             2" org/bouncycastle/asn1/sec/ECPrivateKey.classPK     A 97  	  5             8" org/bouncycastle/asn1/sec/ECPrivateKeyStructure.classPK     A J    0             =" org/bouncycastle/asn1/sec/SECNamedCurves$1.classPK     A xT  
  1             @" org/bouncycastle/asn1/sec/SECNamedCurves$10.classPK     A gyS  h  1             DE" org/bouncycastle/asn1/sec/SECNamedCurves$11.classPK     A :m  Q
  1             H" org/bouncycastle/asn1/sec/SECNamedCurves$12.classPK     A En    1             M" org/bouncycastle/asn1/sec/SECNamedCurves$13.classPK     A   X  1             Q" org/bouncycastle/asn1/sec/SECNamedCurves$14.classPK     A ~Q"  0	  1             U" org/bouncycastle/asn1/sec/SECNamedCurves$15.classPK     A Kq5"    1             Z" org/bouncycastle/asn1/sec/SECNamedCurves$16.classPK     A nI%    1             ]" org/bouncycastle/asn1/sec/SECNamedCurves$17.classPK     A Rz6<    1             a" org/bouncycastle/asn1/sec/SECNamedCurves$18.classPK     A O^;    1             d" org/bouncycastle/asn1/sec/SECNamedCurves$19.classPK     A sQ:    0             Lh" org/bouncycastle/asn1/sec/SECNamedCurves$2.classPK     A 
/    1             k" org/bouncycastle/asn1/sec/SECNamedCurves$20.classPK     A >4|S    1             n" org/bouncycastle/asn1/sec/SECNamedCurves$21.classPK     A 19    1             r" org/bouncycastle/asn1/sec/SECNamedCurves$22.classPK     A ah    1             Cv" org/bouncycastle/asn1/sec/SECNamedCurves$23.classPK     A FDh    1             
z" org/bouncycastle/asn1/sec/SECNamedCurves$24.classPK     A "  x  1             }" org/bouncycastle/asn1/sec/SECNamedCurves$25.classPK     A w `]    1             $" org/bouncycastle/asn1/sec/SECNamedCurves$26.classPK     A   {  1             " org/bouncycastle/asn1/sec/SECNamedCurves$27.classPK     A R]x    1             2" org/bouncycastle/asn1/sec/SECNamedCurves$28.classPK     A 
k1  3  1             " org/bouncycastle/asn1/sec/SECNamedCurves$29.classPK     A (    0             " org/bouncycastle/asn1/sec/SECNamedCurves$3.classPK     A ޱ<B    1             " org/bouncycastle/asn1/sec/SECNamedCurves$30.classPK     A T     1             " org/bouncycastle/asn1/sec/SECNamedCurves$31.classPK     A \޸֔    1             Ě" org/bouncycastle/asn1/sec/SECNamedCurves$32.classPK     A !  R  1             " org/bouncycastle/asn1/sec/SECNamedCurves$33.classPK     A J@3    0             7" org/bouncycastle/asn1/sec/SECNamedCurves$4.classPK     A qBb  	  0             Ȧ" org/bouncycastle/asn1/sec/SECNamedCurves$5.classPK     A |ey-  	  0             ," org/bouncycastle/asn1/sec/SECNamedCurves$6.classPK     A ^)  	  0             " org/bouncycastle/asn1/sec/SECNamedCurves$7.classPK     A 8 &  	  0             >" org/bouncycastle/asn1/sec/SECNamedCurves$8.classPK     A 9  7  0             ¶" org/bouncycastle/asn1/sec/SECNamedCurves$9.classPK     A o[A
  ?  .             Y" org/bouncycastle/asn1/sec/SECNamedCurves.classPK     A bSE  "
  4             " org/bouncycastle/asn1/sec/SECObjectIdentifiers.classPK
 
      A                           *" org/bouncycastle/asn1/teletrust/PK     A &;    <             h" org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$1.classPK     A xh  z  =             " org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$10.classPK     A z    =             " org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$11.classPK     A `    =             " org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$12.classPK     A =|    =             " org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$13.classPK     A k~    =             F" org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$14.classPK     A y    <             " org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$2.classPK     A I7$!    <             " org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$3.classPK     A GJ    <             |" org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$4.classPK     A T٠A    <             " org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$5.classPK     A l    <             " org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$6.classPK     A B<Q    <             " org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$7.classPK     A l8    <             " org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$8.classPK     A Y   y  <             {" org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves$9.classPK     A 	ɛ  b  :             w # org/bouncycastle/asn1/teletrust/TeleTrusTNamedCurves.classPK     A u_J  b  @             z# org/bouncycastle/asn1/teletrust/TeleTrusTObjectIdentifiers.classPK
 
      A                          2# org/bouncycastle/asn1/ua/PK     A FA<Q     2             i# org/bouncycastle/asn1/ua/DSTU4145BinaryField.classPK     A X    /             # org/bouncycastle/asn1/ua/DSTU4145ECBinary.classPK     A LU  F  2             9# org/bouncycastle/asn1/ua/DSTU4145NamedCurves.classPK     A pE5  |  -             q$# org/bouncycastle/asn1/ua/DSTU4145Params.classPK     A L{  r	  3             *# org/bouncycastle/asn1/ua/DSTU4145PointEncoder.classPK     A 	DIe    0             /# org/bouncycastle/asn1/ua/DSTU4145PublicKey.classPK     A 5o    2             =1# org/bouncycastle/asn1/ua/UAObjectIdentifiers.classPK
 
      A                          06# org/bouncycastle/asn1/util/PK     A g
    )             i6# org/bouncycastle/asn1/util/ASN1Dump.classPK     A frg    (             yA# org/bouncycastle/asn1/util/DERDump.classPK
 
      A                          6C# org/bouncycastle/asn1/x500/PK     A Uy^    6             oC# org/bouncycastle/asn1/x500/AttributeTypeAndValue.classPK     A Z1{    0             1F# org/bouncycastle/asn1/x500/DirectoryString.classPK     A   	  $             
J# org/bouncycastle/asn1/x500/RDN.classPK     A w<    )             N# org/bouncycastle/asn1/x500/X500Name.classPK     A K  s
  0             U# org/bouncycastle/asn1/x500/X500NameBuilder.classPK     A 8^7  8  .             Y# org/bouncycastle/asn1/x500/X500NameStyle.classPK
 
      A             !             ![# org/bouncycastle/asn1/x500/style/PK     A 6  
  <             `[# org/bouncycastle/asn1/x500/style/AbstractX500NameStyle.classPK     A I    4             a# org/bouncycastle/asn1/x500/style/BCStrictStyle.classPK     A q    .             c# org/bouncycastle/asn1/x500/style/BCStyle.classPK     A 8T  *$  0             5q# org/bouncycastle/asn1/x500/style/IETFUtils.classPK     A s:    3             # org/bouncycastle/asn1/x500/style/RFC4519Style.classPK     A ]h  W  8             (# org/bouncycastle/asn1/x500/style/X500NameTokenizer.classPK
 
      A                          [# org/bouncycastle/asn1/x509/PK     A 6`*    2             # org/bouncycastle/asn1/x509/AccessDescription.classPK     A  Fp    4             # org/bouncycastle/asn1/x509/AlgorithmIdentifier.classPK     A 7ͦm    6             d# org/bouncycastle/asn1/x509/AltSignatureAlgorithm.classPK     A ޝtF    2             5# org/bouncycastle/asn1/x509/AltSignatureValue.classPK     A (k]    .             ۝# org/bouncycastle/asn1/x509/AttCertIssuer.classPK     A $a    6             # org/bouncycastle/asn1/x509/AttCertValidityPeriod.classPK     A )
%    *             Ӥ# org/bouncycastle/asn1/x509/Attribute.classPK     A 8Ul  	  5             P# org/bouncycastle/asn1/x509/AttributeCertificate.classPK     A !  e  9             E# org/bouncycastle/asn1/x509/AttributeCertificateInfo.classPK     A =b5  
  ;             k# org/bouncycastle/asn1/x509/AuthorityInformationAccess.classPK     A 6  b  7             	# org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.classPK     A HzG  O
  1             
# org/bouncycastle/asn1/x509/BasicConstraints.classPK     A k2  	  -             # org/bouncycastle/asn1/x509/CRLDistPoint.classPK     A f    *             # org/bouncycastle/asn1/x509/CRLNumber.classPK     A %,o  
  *             # org/bouncycastle/asn1/x509/CRLReason.classPK     A *[    -             {# org/bouncycastle/asn1/x509/CertPolicyId.classPK     A Q%.    ,             W# org/bouncycastle/asn1/x509/Certificate.classPK     A   E  0             # org/bouncycastle/asn1/x509/CertificateList.classPK     A 4ޔ(  _	  0             # org/bouncycastle/asn1/x509/CertificatePair.classPK     A а4M    4             i# org/bouncycastle/asn1/x509/CertificatePolicies.classPK     A x  w  -             # org/bouncycastle/asn1/x509/DSAParameter.classPK     A 	  t  ;             
# org/bouncycastle/asn1/x509/DeltaCertificateDescriptor.classPK     A ֦  D  +             # org/bouncycastle/asn1/x509/DigestInfo.classPK     A '  /
  ,             # org/bouncycastle/asn1/x509/DisplayText.classPK     A L    2             # org/bouncycastle/asn1/x509/DistributionPoint.classPK     A 8\     6             $ org/bouncycastle/asn1/x509/DistributionPointName.classPK     A c߹*    1             4$ org/bouncycastle/asn1/x509/ExtendedKeyUsage.classPK     A NP
  >  *             
$ org/bouncycastle/asn1/x509/Extension.classPK     A 'T    +             e$ org/bouncycastle/asn1/x509/Extensions.classPK     A X~  <  4             X $ org/bouncycastle/asn1/x509/ExtensionsGenerator.classPK     A VA]
    ,             ?)$ org/bouncycastle/asn1/x509/GeneralName.classPK     A   
  -             (4$ org/bouncycastle/asn1/x509/GeneralNames.classPK     A =A:~  O  4             `8$ org/bouncycastle/asn1/x509/GeneralNamesBuilder.classPK     A v0WA3  
  /             :$ org/bouncycastle/asn1/x509/GeneralSubtree.classPK     A ItJC    '             J@$ org/bouncycastle/asn1/x509/Holder.classPK     A /Vl    /             E$ org/bouncycastle/asn1/x509/IetfAttrSyntax.classPK     A b@#  o  -             K$ org/bouncycastle/asn1/x509/IssuerSerial.classPK     A ԟg    9             )P$ org/bouncycastle/asn1/x509/IssuingDistributionPoint.classPK     A vs6    -             yW$ org/bouncycastle/asn1/x509/KeyPurposeId.classPK     A q  d  )             \$ org/bouncycastle/asn1/x509/KeyUsage.classPK     A :G     8             
a$ org/bouncycastle/asn1/x509/NameConstraintValidator.classPK     A z      A             qb$ org/bouncycastle/asn1/x509/NameConstraintValidatorException.classPK     A D    0             c$ org/bouncycastle/asn1/x509/NameConstraints.classPK     A 9    0             h$ org/bouncycastle/asn1/x509/NoticeReference.classPK     A     1             m$ org/bouncycastle/asn1/x509/ObjectDigestInfo.classPK     A h:gu    *             r$ org/bouncycastle/asn1/x509/OtherName.classPK     A 
M4  J  <             u$ org/bouncycastle/asn1/x509/PKIXNameConstraintValidator.classPK     A 3  	  2             I$ org/bouncycastle/asn1/x509/PolicyConstraints.classPK     A L`  	  2             $ org/bouncycastle/asn1/x509/PolicyInformation.classPK     A RmD\    /             $ org/bouncycastle/asn1/x509/PolicyMappings.classPK     A J    2             $ org/bouncycastle/asn1/x509/PolicyQualifierId.classPK     A pFc    4             K$ org/bouncycastle/asn1/x509/PolicyQualifierInfo.classPK     A 3     >             $ org/bouncycastle/asn1/x509/PrivateKeyPossessionStatement.classPK     A Y5*  !	  4             $ org/bouncycastle/asn1/x509/PrivateKeyStatement.classPK     A ?\    6             1$ org/bouncycastle/asn1/x509/PrivateKeyUsagePeriod.classPK     A ,3  _  6             $ org/bouncycastle/asn1/x509/RSAPublicKeyStructure.classPK     A 1g  n  ,             $ org/bouncycastle/asn1/x509/ReasonFlags.classPK     A ;y/    +             }$ org/bouncycastle/asn1/x509/RoleSyntax.classPK     A qG-c  c
  8             $ org/bouncycastle/asn1/x509/SubjectAltPublicKeyInfo.classPK     A V;  H  ;             $ org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.classPK     A W]  V  5             M$ org/bouncycastle/asn1/x509/SubjectKeyIdentifier.classPK     A \E    5             ;$ org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.classPK     A ik      .             $ org/bouncycastle/asn1/x509/TBSCertList$1.classPK     A d\    5             $ org/bouncycastle/asn1/x509/TBSCertList$CRLEntry.classPK     A |
i    =             $ org/bouncycastle/asn1/x509/TBSCertList$EmptyEnumeration.classPK     A     K             g$ org/bouncycastle/asn1/x509/TBSCertList$RevokedCertificatesEnumeration.classPK     A =+ԇ    ,             l$ org/bouncycastle/asn1/x509/TBSCertList.classPK     A Z  X  /             M$ org/bouncycastle/asn1/x509/TBSCertificate.classPK     A Tz  a  8             f$ org/bouncycastle/asn1/x509/TBSCertificateStructure.classPK     A Z\  r  '             F$ org/bouncycastle/asn1/x509/Target.classPK     A .|    2             $ org/bouncycastle/asn1/x509/TargetInformation.classPK     A Db    (             $ org/bouncycastle/asn1/x509/Targets.classPK     A =Li    %             $ org/bouncycastle/asn1/x509/Time.classPK     A ݢ    +             S$ org/bouncycastle/asn1/x509/UserNotice.classPK     A #{    :             N$ org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.classPK     A $A  M
  D             9% org/bouncycastle/asn1/x509/V2AttributeCertificateInfoGenerator.classPK     A *f  Q
  '             t% org/bouncycastle/asn1/x509/V2Form.classPK     A ^u׀V  v  7             p% org/bouncycastle/asn1/x509/V2TBSCertListGenerator.classPK     A 9    :             +% org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.classPK     A jK?    )             t% org/bouncycastle/asn1/x509/Validity.classPK     A p    9             
% org/bouncycastle/asn1/x509/X509AttributeIdentifiers.classPK     A ҇  w  9             ^"% org/bouncycastle/asn1/x509/X509CertificateStructure.classPK     A w>a[D  ]  :             &% org/bouncycastle/asn1/x509/X509DefaultEntryConverter.classPK     A jb_  p  .             *% org/bouncycastle/asn1/x509/X509Extension.classPK     A  r    /             1% org/bouncycastle/asn1/x509/X509Extensions.classPK     A Yך    8             =% org/bouncycastle/asn1/x509/X509ExtensionsGenerator.classPK     A y  >  )             A% org/bouncycastle/asn1/x509/X509Name.classPK     A t  a  7             ]% org/bouncycastle/asn1/x509/X509NameEntryConverter.classPK     A Vt  <  2             _% org/bouncycastle/asn1/x509/X509NameTokenizer.classPK     A ~=j|    6             b% org/bouncycastle/asn1/x509/X509ObjectIdentifiers.classPK
 
      A             %             g% org/bouncycastle/asn1/x509/qualified/PK     A =Mr  <  8             h% org/bouncycastle/asn1/x509/qualified/BiometricData.classPK     A   6  B             l% org/bouncycastle/asn1/x509/qualified/ETSIQCObjectIdentifiers.classPK     A 2Z  $  >             o% org/bouncycastle/asn1/x509/qualified/Iso4217CurrencyCode.classPK     A y  N  8             s% org/bouncycastle/asn1/x509/qualified/MonetaryValue.classPK     A v}    6             lv% org/bouncycastle/asn1/x509/qualified/QCStatement.classPK     A 2L  M  E             y% org/bouncycastle/asn1/x509/qualified/RFC3739QCObjectIdentifiers.classPK     A 򺈘F  
  ?             {% org/bouncycastle/asn1/x509/qualified/SemanticsInformation.classPK     A &EX    >             6% org/bouncycastle/asn1/x509/qualified/TypeOfBiometricData.classPK
 
      A                           % org/bouncycastle/asn1/x509/sigi/PK     A yy  
  5             8% org/bouncycastle/asn1/x509/sigi/NameOrPseudonym.classPK     A 
"  
  2             % org/bouncycastle/asn1/x509/sigi/PersonalData.classPK     A Ԅ    ;             % org/bouncycastle/asn1/x509/sigi/SigIObjectIdentifiers.classPK
 
      A                          % org/bouncycastle/asn1/x9/PK     A \"Y  
  1             ӑ% org/bouncycastle/asn1/x9/DHDomainParameters.classPK     A ?r    *             % org/bouncycastle/asn1/x9/DHPublicKey.classPK     A PFd5j    0             % org/bouncycastle/asn1/x9/DHValidationParms.classPK     A   {  /             {% org/bouncycastle/asn1/x9/DomainParameters.classPK     A !u  R  0             % org/bouncycastle/asn1/x9/ECNamedCurveTable.classPK     A m]Y    .             % org/bouncycastle/asn1/x9/KeySpecificInfo.classPK     A h7  T  (             t% org/bouncycastle/asn1/x9/OtherInfo.classPK     A 
k2  6	  /             I% org/bouncycastle/asn1/x9/ValidationParams.classPK     A     0             z% org/bouncycastle/asn1/x9/X962NamedCurves$1.classPK     A X    1             % org/bouncycastle/asn1/x9/X962NamedCurves$10.classPK     A gt  %  1             
% org/bouncycastle/asn1/x9/X962NamedCurves$11.classPK     A ޲,    1             D% org/bouncycastle/asn1/x9/X962NamedCurves$12.classPK     A ~  3  1             % org/bouncycastle/asn1/x9/X962NamedCurves$13.classPK     A E%  3  1             % org/bouncycastle/asn1/x9/X962NamedCurves$14.classPK     A (  
  1             3% org/bouncycastle/asn1/x9/X962NamedCurves$15.classPK     A 鵊  c  1             Z% org/bouncycastle/asn1/x9/X962NamedCurves$16.classPK     A 3  c  1             % org/bouncycastle/asn1/x9/X962NamedCurves$17.classPK     A ]1u  c  1             % org/bouncycastle/asn1/x9/X962NamedCurves$18.classPK     A $s/!    1             [% org/bouncycastle/asn1/x9/X962NamedCurves$19.classPK     A g}    0             % org/bouncycastle/asn1/x9/X962NamedCurves$2.classPK     A b3],    1             H% org/bouncycastle/asn1/x9/X962NamedCurves$20.classPK     A CvA    1             % org/bouncycastle/asn1/x9/X962NamedCurves$21.classPK     A c    1             s% org/bouncycastle/asn1/x9/X962NamedCurves$22.classPK     A /7j  !  1             5% org/bouncycastle/asn1/x9/X962NamedCurves$23.classPK     A YL    0             % org/bouncycastle/asn1/x9/X962NamedCurves$3.classPK     A dTc  k  0             g% org/bouncycastle/asn1/x9/X962NamedCurves$4.classPK     A b:b  k  0             (% org/bouncycastle/asn1/x9/X962NamedCurves$5.classPK     A Vsa  k  0             % org/bouncycastle/asn1/x9/X962NamedCurves$6.classPK     A (Zr    0             % org/bouncycastle/asn1/x9/X962NamedCurves$7.classPK     A R     0             w% org/bouncycastle/asn1/x9/X962NamedCurves$8.classPK     A Ň"    0             % org/bouncycastle/asn1/x9/X962NamedCurves$9.classPK     A `Tz  l  .             & org/bouncycastle/asn1/x9/X962NamedCurves.classPK     A lf    -             & org/bouncycastle/asn1/x9/X962Parameters.classPK     A &j:  P  &             & org/bouncycastle/asn1/x9/X9Curve.classPK     A i\  n  -             :& org/bouncycastle/asn1/x9/X9ECParameters.classPK     A Bf    3             |& org/bouncycastle/asn1/x9/X9ECParametersHolder.classPK     A '.C    (             C& org/bouncycastle/asn1/x9/X9ECPoint.classPK     A E    -             /"& org/bouncycastle/asn1/x9/X9FieldElement.classPK     A 4  j  (             _$& org/bouncycastle/asn1/x9/X9FieldID.classPK     A Ks9  '  1             ^(& org/bouncycastle/asn1/x9/X9IntegerConverter.classPK     A RJ  @  2             *& org/bouncycastle/asn1/x9/X9ObjectIdentifiers.classPK
 
      A                          :1& org/bouncycastle/crypto/PK     A x      ,             p1& org/bouncycastle/crypto/AlphabetMapper.classPK     A PJ   Q  3             i2& org/bouncycastle/crypto/AsymmetricBlockCipher.classPK     A >T
oq  F  5             3& org/bouncycastle/crypto/AsymmetricCipherKeyPair.classPK     A 6     >             5& org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.classPK     A  7     ,             6& org/bouncycastle/crypto/BasicAgreement.classPK     A     )             7& org/bouncycastle/crypto/BlockCipher.classPK     A d    ;             %9& org/bouncycastle/crypto/BufferedAsymmetricBlockCipher.classPK     A M  
  1             %=& org/bouncycastle/crypto/BufferedBlockCipher.classPK     A       1             hD& org/bouncycastle/crypto/CharToByteConverter.classPK     A ¾O  |  0             WE& org/bouncycastle/crypto/CipherKeyGenerator.classPK     A 6nY   \   .             G& org/bouncycastle/crypto/CipherParameters.classPK     A    I  (             XH& org/bouncycastle/crypto/Commitment.classPK     A jh      '             I& org/bouncycastle/crypto/Committer.classPK     A -     -             wJ& org/bouncycastle/crypto/CryptoException.classPK     A ܪ      ?             K& org/bouncycastle/crypto/CryptoServiceConstraintsException.classPK     A F   %  5             L& org/bouncycastle/crypto/CryptoServiceProperties.classPK     A ͂b  s  2             
N& org/bouncycastle/crypto/CryptoServicePurpose.classPK     A 
G      7             3Q& org/bouncycastle/crypto/CryptoServicesConstraints.classPK     A KCc>    6             R& org/bouncycastle/crypto/CryptoServicesPermission.classPK     A vlq     7             +U& org/bouncycastle/crypto/CryptoServicesRegistrar$1.classPK     A .D  $  7             V& org/bouncycastle/crypto/CryptoServicesRegistrar$2.classPK     A ܧ  	  7             0X& org/bouncycastle/crypto/CryptoServicesRegistrar$3.classPK     A   i  >             4Z& org/bouncycastle/crypto/CryptoServicesRegistrar$Property.classPK     A ͭ    U             \& org/bouncycastle/crypto/CryptoServicesRegistrar$ThreadLocalSecureRandomProvider.classPK     A f-  %,  5             _& org/bouncycastle/crypto/CryptoServicesRegistrar.classPK     A ,6!     !             /s& org/bouncycastle/crypto/DSA.classPK     A p      $             <t& org/bouncycastle/crypto/DSAExt.classPK     A @E      1             u& org/bouncycastle/crypto/DataLengthException.classPK     A Y  $
  8             /v& org/bouncycastle/crypto/DefaultBufferedBlockCipher.classPK     A f8    5             o}& org/bouncycastle/crypto/DefaultMultiBlockCipher.classPK     A W   5  0             & org/bouncycastle/crypto/DerivationFunction.classPK     A F]   `   2             À& org/bouncycastle/crypto/DerivationParameters.classPK     A =5>      $             & org/bouncycastle/crypto/Digest.classPK     A 0B      6             & org/bouncycastle/crypto/DigestDerivationFunction.classPK     A jJ4      9             & org/bouncycastle/crypto/EncapsulatedSecretExtractor.classPK     A Jl      9             & org/bouncycastle/crypto/EncapsulatedSecretGenerator.classPK     A *v   }   .             & org/bouncycastle/crypto/EncodableService.classPK     A r  J  .             \& org/bouncycastle/crypto/EphemeralKeyPair.classPK     A ,      ,             *& org/bouncycastle/crypto/ExtendedDigest.classPK     A ȱ   V  8             & org/bouncycastle/crypto/InvalidCipherTextException.classPK     A 6A   9  .             R& org/bouncycastle/crypto/KeyEncapsulation.classPK     A )Չ      (             a& org/bouncycastle/crypto/KeyEncoder.classPK     A r@  :  5             @& org/bouncycastle/crypto/KeyGenerationParameters.classPK     A &u      '             & org/bouncycastle/crypto/KeyParser.classPK     A ]y0    !             & org/bouncycastle/crypto/Mac.classPK     A )a      3             e& org/bouncycastle/crypto/MacDerivationFunction.classPK     A      7             H& org/bouncycastle/crypto/MaxBytesExceededException.classPK     A 6%'   =  .             j& org/bouncycastle/crypto/MultiBlockCipher.classPK     A VJ      3             & org/bouncycastle/crypto/OutputLengthException.classPK     A ٭Y    4             & org/bouncycastle/crypto/PBEParametersGenerator.classPK     A V  @  1             V& org/bouncycastle/crypto/PasswordConverter$1.classPK     A {Za  |  1             & org/bouncycastle/crypto/PasswordConverter$2.classPK     A 	[  {  1             ˚& org/bouncycastle/crypto/PasswordConverter$3.classPK     A }    /             & org/bouncycastle/crypto/PasswordConverter.classPK     A wկ     *             _& org/bouncycastle/crypto/RawAgreement.classPK     A 4p      4             f& org/bouncycastle/crypto/RuntimeCryptoException.classPK     A \      +             |& org/bouncycastle/crypto/SavableDigest.classPK     A k+      5             e& org/bouncycastle/crypto/SecretWithEncapsulation.classPK     A Kn|      2             f& org/bouncycastle/crypto/SecureRandomProvider.classPK     A slk     $             B& org/bouncycastle/crypto/Signer.classPK     A 0   D  0             & org/bouncycastle/crypto/SignerWithRecovery.classPK     A       ,             ̦& org/bouncycastle/crypto/SkippingCipher.classPK     A @}u      2             & org/bouncycastle/crypto/SkippingStreamCipher.classPK     A 5
     -             & org/bouncycastle/crypto/StagedAgreement.classPK     A ? G    /             & org/bouncycastle/crypto/StreamBlockCipher.classPK     A gE*    *              & org/bouncycastle/crypto/StreamCipher.classPK     A U   ?  %             i& org/bouncycastle/crypto/Wrapper.classPK     A 34      !             & org/bouncycastle/crypto/Xof.classPK
 
      A             "             |& org/bouncycastle/crypto/agreement/PK     A &    9             & org/bouncycastle/crypto/agreement/BasicRawAgreement.classPK     A Dqb?    3             ?& org/bouncycastle/crypto/agreement/DHAgreement.classPK     A VN  	  8             ߷& org/bouncycastle/crypto/agreement/DHBasicAgreement.classPK     A n8  <  8             & org/bouncycastle/crypto/agreement/DHStandardGroups.classPK     A 0  T  :             & org/bouncycastle/crypto/agreement/DHUnifiedAgreement.classPK     A V||  
  :             Y& org/bouncycastle/crypto/agreement/ECDHBasicAgreement.classPK     A bX  	  ;             =& org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.classPK     A }  f  <             & org/bouncycastle/crypto/agreement/ECDHCStagedAgreement.classPK     A SF4    =             & org/bouncycastle/crypto/agreement/ECDHCUnifiedAgreement.classPK     A   +  ;             B& org/bouncycastle/crypto/agreement/ECMQVBasicAgreement.classPK     A 2'@    6             & org/bouncycastle/crypto/agreement/ECVKOAgreement.classPK     A cC    9             2& org/bouncycastle/crypto/agreement/MQVBasicAgreement.classPK     A \K>/  :  6             D& org/bouncycastle/crypto/agreement/SM2KeyExchange.classPK     A GQ    -             & org/bouncycastle/crypto/agreement/Utils.classPK     A #  z  7             ' org/bouncycastle/crypto/agreement/X25519Agreement.classPK     A W|D  l  5             ' org/bouncycastle/crypto/agreement/X448Agreement.classPK     A  wl  Q  9             ,' org/bouncycastle/crypto/agreement/XDHBasicAgreement.classPK     A Iz  R  ;              	' org/bouncycastle/crypto/agreement/XDHUnifiedAgreement.classPK
 
      A             *             ' org/bouncycastle/crypto/agreement/ecjpake/PK     A (Y    <             ' org/bouncycastle/crypto/agreement/ecjpake/ECJPAKECurve.classPK     A F`  p  =             ' org/bouncycastle/crypto/agreement/ecjpake/ECJPAKECurves.classPK     A &  $  B             ' org/bouncycastle/crypto/agreement/ecjpake/ECJPAKEParticipant.classPK     A C.c    D             ' org/bouncycastle/crypto/agreement/ecjpake/ECJPAKERound1Payload.classPK     A p~N    D             !' org/bouncycastle/crypto/agreement/ecjpake/ECJPAKERound2Payload.classPK     A  H+    D             #' org/bouncycastle/crypto/agreement/ecjpake/ECJPAKERound3Payload.classPK     A g(ׄ=    ;             R%' org/bouncycastle/crypto/agreement/ecjpake/ECJPAKEUtil.classPK     A <,[    <             0' org/bouncycastle/crypto/agreement/ecjpake/ECSchnorrZKP.classPK
 
      A             (             2' org/bouncycastle/crypto/agreement/jpake/PK     A :Sv
     >             2' org/bouncycastle/crypto/agreement/jpake/JPAKEParticipant.classPK     A KL  $  B             =' org/bouncycastle/crypto/agreement/jpake/JPAKEPrimeOrderGroup.classPK     A uc	    C             3A' org/bouncycastle/crypto/agreement/jpake/JPAKEPrimeOrderGroups.classPK     A K^%    @             8K' org/bouncycastle/crypto/agreement/jpake/JPAKERound1Payload.classPK     A 5    @             M' org/bouncycastle/crypto/agreement/jpake/JPAKERound2Payload.classPK     A W(    @             P' org/bouncycastle/crypto/agreement/jpake/JPAKERound3Payload.classPK     A 9
    7             Q' org/bouncycastle/crypto/agreement/jpake/JPAKEUtil.classPK
 
      A             &             \' org/bouncycastle/crypto/agreement/kdf/PK     A ܂@    E             b\' org/bouncycastle/crypto/agreement/kdf/ConcatenationKDFGenerator.classPK     A     ;             `' org/bouncycastle/crypto/agreement/kdf/DHKDFParameters.classPK     A q$N  E
  :             b' org/bouncycastle/crypto/agreement/kdf/DHKEKGenerator.classPK     A <  	  <             bh' org/bouncycastle/crypto/agreement/kdf/ECDHKEKGenerator.classPK     A !X    <             lm' org/bouncycastle/crypto/agreement/kdf/GSKKDFParameters.classPK     A jt  '  ;             .o' org/bouncycastle/crypto/agreement/kdf/GSKKFDGenerator.classPK
 
      A             &             s' org/bouncycastle/crypto/agreement/srp/PK     A ;qy:   f
  6             Os' org/bouncycastle/crypto/agreement/srp/SRP6Client.classPK     A AJ    6             x' org/bouncycastle/crypto/agreement/srp/SRP6Server.classPK     A }
    >             %~' org/bouncycastle/crypto/agreement/srp/SRP6StandardGroups.classPK     A   |  4             i' org/bouncycastle/crypto/agreement/srp/SRP6Util.classPK     A l  5  A             ' org/bouncycastle/crypto/agreement/srp/SRP6VerifierGenerator.classPK
 
      A             $             ې' org/bouncycastle/crypto/commitments/PK     A rN    >             ' org/bouncycastle/crypto/commitments/GeneralHashCommitter.classPK     A 2    7             ה' org/bouncycastle/crypto/commitments/HashCommitter.classPK
 
      A             $             n' org/bouncycastle/crypto/constraints/PK     A Hjyl    B             ' org/bouncycastle/crypto/constraints/BitsOfSecurityConstraint.classPK     A i  w  9             ' org/bouncycastle/crypto/constraints/ConstraintUtils.classPK     A dp>    B             ' org/bouncycastle/crypto/constraints/DefaultServiceProperties.classPK     A fh  J  J             K' org/bouncycastle/crypto/constraints/LegacyBitsOfSecurityConstraint$1.classPK     A 󗸺
    H             ' org/bouncycastle/crypto/constraints/LegacyBitsOfSecurityConstraint.classPK     A  a~    ;             +' org/bouncycastle/crypto/constraints/LoggingConstraint.classPK     A T*    <             ' org/bouncycastle/crypto/constraints/ServicesConstraint.classPK     A {}>    /             {' org/bouncycastle/crypto/constraints/Utils.classPK
 
      A                           ' org/bouncycastle/crypto/digests/PK     A Z{    <             T' org/bouncycastle/crypto/digests/AsconBaseDigest$Friend.classPK     A Lc  	  5             ٰ' org/bouncycastle/crypto/digests/AsconBaseDigest.classPK     A "&  	  2             "' org/bouncycastle/crypto/digests/AsconCXof128.classPK     A Lzr}    A             ' org/bouncycastle/crypto/digests/AsconDigest$AsconParameters.classPK     A /    1             )' org/bouncycastle/crypto/digests/AsconDigest.classPK     A 
$    2             ' org/bouncycastle/crypto/digests/AsconHash256.classPK     A 1K  w  >             ' org/bouncycastle/crypto/digests/AsconXof$AsconParameters.classPK     A Ȳ  #	  .             ' org/bouncycastle/crypto/digests/AsconXof.classPK     A {M  `  1              ' org/bouncycastle/crypto/digests/AsconXof128.classPK     A "/    2             ' org/bouncycastle/crypto/digests/AsconXofBase.classPK     A I
  =  3             ' org/bouncycastle/crypto/digests/Blake2bDigest.classPK     A ut5  
  4              ' org/bouncycastle/crypto/digests/Blake2bpDigest.classPK     A ,    3             ' org/bouncycastle/crypto/digests/Blake2sDigest.classPK     A I  
  4             D' org/bouncycastle/crypto/digests/Blake2spDigest.classPK     A 7  ?  4             ' org/bouncycastle/crypto/digests/Blake2xsDigest.classPK     A YT ,    2             ( org/bouncycastle/crypto/digests/Blake3Digest.classPK     A n8Ƙ      8             ( org/bouncycastle/crypto/digests/BufferBaseDigest$1.classPK     A a%4    H             ( org/bouncycastle/crypto/digests/BufferBaseDigest$BufferedProcessor.classPK     A 0=p9    I             ( org/bouncycastle/crypto/digests/BufferBaseDigest$ImmediateProcessor.classPK     A gi   I  G             l( org/bouncycastle/crypto/digests/BufferBaseDigest$ProcessingBuffer.classPK     A uά    K             ( org/bouncycastle/crypto/digests/BufferBaseDigest$ProcessingBufferType.classPK     A N7  b
  6             ( org/bouncycastle/crypto/digests/BufferBaseDigest.classPK     A |   1
  2             #( org/bouncycastle/crypto/digests/CSHAKEDigest.classPK     A |Q  ,3  4             J)( org/bouncycastle/crypto/digests/DSTU7564Digest.classPK     A Ȟ      5             TC( org/bouncycastle/crypto/digests/EncodableDigest.classPK     A `?3
    4             CD( org/bouncycastle/crypto/digests/GOST3411Digest.classPK     A ֧u  S  9             N( org/bouncycastle/crypto/digests/GOST3411_2012Digest.classPK     A Jͦ    =             ( org/bouncycastle/crypto/digests/GOST3411_2012_256Digest.classPK     A BUO    =             ( org/bouncycastle/crypto/digests/GOST3411_2012_512Digest.classPK     A D13k  ^  3             ( org/bouncycastle/crypto/digests/GeneralDigest.classPK     A iЁ  x
  5             ( org/bouncycastle/crypto/digests/Haraka256Digest.classPK     A \m    5             ( org/bouncycastle/crypto/digests/Haraka512Digest.classPK     A I9    0             -( org/bouncycastle/crypto/digests/HarakaBase.classPK     A     7             ( org/bouncycastle/crypto/digests/ISAPDigest$Friend.classPK     A Q0    0             ( org/bouncycastle/crypto/digests/ISAPDigest.classPK     A :
    ;             \( org/bouncycastle/crypto/digests/Kangaroo$KangarooBase.classPK     A ׆  P  I             ( org/bouncycastle/crypto/digests/Kangaroo$KangarooParameters$Builder.classPK     A l    A             ( org/bouncycastle/crypto/digests/Kangaroo$KangarooParameters.classPK     A h
	    =             ( org/bouncycastle/crypto/digests/Kangaroo$KangarooSponge.classPK     A %E~    =             ) org/bouncycastle/crypto/digests/Kangaroo$KangarooTwelve.classPK     A N߄  	  B             ) org/bouncycastle/crypto/digests/Kangaroo$MarsupilamiFourteen.classPK     A LCC    .             ) org/bouncycastle/crypto/digests/Kangaroo.classPK     A `
  "  2             
) org/bouncycastle/crypto/digests/KeccakDigest.classPK     A Rh?/
    0             ) org/bouncycastle/crypto/digests/LongDigest.classPK     A 6_P
    /             ') org/bouncycastle/crypto/digests/MD2Digest.classPK     A TP  s  /             0) org/bouncycastle/crypto/digests/MD4Digest.classPK     A NW
    /             7) org/bouncycastle/crypto/digests/MD5Digest.classPK     A f+    7             B) org/bouncycastle/crypto/digests/NonMemoableDigest.classPK     A F˔      2             (E) org/bouncycastle/crypto/digests/NullDigest$1.classPK     A \    J             F) org/bouncycastle/crypto/digests/NullDigest$OpenByteArrayOutputStream.classPK     A ,
    0             'H) org/bouncycastle/crypto/digests/NullDigest.classPK     A Xv    2             J) org/bouncycastle/crypto/digests/ParallelHash.classPK     A #    ?             Q) org/bouncycastle/crypto/digests/PhotonBeetleDigest$Friend.classPK     A 9  f	  8             S) org/bouncycastle/crypto/digests/PhotonBeetleDigest.classPK     A w,    -             nX) org/bouncycastle/crypto/digests/Prehash.classPK     A /"    5             h[) org/bouncycastle/crypto/digests/RIPEMD128Digest.classPK     A Աr
  %  5             d) org/bouncycastle/crypto/digests/RIPEMD160Digest.classPK     A }$0	  F  5             o) org/bouncycastle/crypto/digests/RIPEMD256Digest.classPK     A u  '  5             y) org/bouncycastle/crypto/digests/RIPEMD320Digest.classPK     A Fw    :             b) org/bouncycastle/crypto/digests/RomulusDigest$Friend.classPK     A Nq=  \  3             ) org/bouncycastle/crypto/digests/RomulusDigest.classPK     A 7Q  <  0             ӊ) org/bouncycastle/crypto/digests/SHA1Digest.classPK     A fp    2             ǒ) org/bouncycastle/crypto/digests/SHA224Digest.classPK     A y'2_  t  2             *) org/bouncycastle/crypto/digests/SHA256Digest.classPK     A :4/F    2             ) org/bouncycastle/crypto/digests/SHA384Digest.classPK     A  2    0             ) org/bouncycastle/crypto/digests/SHA3Digest.classPK     A [XV    2             ) org/bouncycastle/crypto/digests/SHA512Digest.classPK     A ھ    3             ) org/bouncycastle/crypto/digests/SHA512tDigest.classPK     A &zt!  
  1             ) org/bouncycastle/crypto/digests/SHAKEDigest.classPK     A W~>  B  /             ) org/bouncycastle/crypto/digests/SM3Digest.classPK     A ǬT  o  5             ) org/bouncycastle/crypto/digests/ShortenedDigest.classPK     A F    1             :) org/bouncycastle/crypto/digests/SkeinDigest.classPK     A TP    ?             w) org/bouncycastle/crypto/digests/SkeinEngine$Configuration.classPK     A 
*    ;             4) org/bouncycastle/crypto/digests/SkeinEngine$Parameter.classPK     A &
)    5             ) org/bouncycastle/crypto/digests/SkeinEngine$UBI.classPK     A X_  P  :             S) org/bouncycastle/crypto/digests/SkeinEngine$UbiTweak.classPK     A     1             ) org/bouncycastle/crypto/digests/SkeinEngine.classPK     A ~p    :             
) org/bouncycastle/crypto/digests/SparkleDigest$Friend.classPK     A !	    E             ) org/bouncycastle/crypto/digests/SparkleDigest$SparkleParameters.classPK     A Bٯ    3             ) org/bouncycastle/crypto/digests/SparkleDigest.classPK     A o@'<  S  1             `) org/bouncycastle/crypto/digests/TigerDigest.classPK     A fO    /             7* org/bouncycastle/crypto/digests/TupleHash.classPK     A A5]  J  =             	>* org/bouncycastle/crypto/digests/Utils$DefaultProperties.classPK     A 9    D             @* org/bouncycastle/crypto/digests/Utils$DefaultPropertiesWithPRF.classPK     A Pڞ  
  +             uB* org/bouncycastle/crypto/digests/Utils.classPK     A G
    5             lD* org/bouncycastle/crypto/digests/WhirlpoolDigest.classPK     A o    .             OR* org/bouncycastle/crypto/digests/XofUtils.classPK     A ORx    :             T* org/bouncycastle/crypto/digests/XoodyakDigest$Friend.classPK     A     3             
V* org/bouncycastle/crypto/digests/XoodyakDigest.classPK
 
      A                          vZ* org/bouncycastle/crypto/ec/PK     A :    4             Z* org/bouncycastle/crypto/ec/CustomNamedCurves$1.classPK     A s>g  \  5             K]* org/bouncycastle/crypto/ec/CustomNamedCurves$10.classPK     A u,  [  5             a* org/bouncycastle/crypto/ec/CustomNamedCurves$11.classPK     A .    5             d* org/bouncycastle/crypto/ec/CustomNamedCurves$12.classPK     A )l    5             g* org/bouncycastle/crypto/ec/CustomNamedCurves$13.classPK     A ų~    5             \k* org/bouncycastle/crypto/ec/CustomNamedCurves$14.classPK     A U    5             =n* org/bouncycastle/crypto/ec/CustomNamedCurves$15.classPK     A +P    5              q* org/bouncycastle/crypto/ec/CustomNamedCurves$16.classPK     A }L    5             t* org/bouncycastle/crypto/ec/CustomNamedCurves$17.classPK     A gA    5             v* org/bouncycastle/crypto/ec/CustomNamedCurves$18.classPK     A |^  /  5             y* org/bouncycastle/crypto/ec/CustomNamedCurves$19.classPK     A ;G    4             |* org/bouncycastle/crypto/ec/CustomNamedCurves$2.classPK     A H  /  5             k* org/bouncycastle/crypto/ec/CustomNamedCurves$20.classPK     A }5>  ?  5             a* org/bouncycastle/crypto/ec/CustomNamedCurves$21.classPK     A 2@Z  ?  5             d* org/bouncycastle/crypto/ec/CustomNamedCurves$22.classPK     A t`    5             f* org/bouncycastle/crypto/ec/CustomNamedCurves$23.classPK     A ,  S  5             )* org/bouncycastle/crypto/ec/CustomNamedCurves$24.classPK     A x]    5             8* org/bouncycastle/crypto/ec/CustomNamedCurves$25.classPK     A >/q    5             * org/bouncycastle/crypto/ec/CustomNamedCurves$26.classPK     A gǻ  k  5             ̓* org/bouncycastle/crypto/ec/CustomNamedCurves$27.classPK     A C    5             * org/bouncycastle/crypto/ec/CustomNamedCurves$28.classPK     A d    5             * org/bouncycastle/crypto/ec/CustomNamedCurves$29.classPK     A 'x    4             9* org/bouncycastle/crypto/ec/CustomNamedCurves$3.classPK     A N  o  5             * org/bouncycastle/crypto/ec/CustomNamedCurves$30.classPK     A ܃p$    5             F* org/bouncycastle/crypto/ec/CustomNamedCurves$31.classPK     A e    5             ͧ* org/bouncycastle/crypto/ec/CustomNamedCurves$32.classPK     A ~  *  4             * org/bouncycastle/crypto/ec/CustomNamedCurves$4.classPK     A ,  *  4             * org/bouncycastle/crypto/ec/CustomNamedCurves$5.classPK     A !q    4             p* org/bouncycastle/crypto/ec/CustomNamedCurves$6.classPK     A ߚ)\  :  4             l* org/bouncycastle/crypto/ec/CustomNamedCurves$7.classPK     A Hb"  '  4             d* org/bouncycastle/crypto/ec/CustomNamedCurves$8.classPK     A Sa3  J  4             * org/bouncycastle/crypto/ec/CustomNamedCurves$9.classPK     A q  O"  2             * org/bouncycastle/crypto/ec/CustomNamedCurves.classPK     A r0      ,              * org/bouncycastle/crypto/ec/ECDecryptor.classPK     A ]  d  3             * org/bouncycastle/crypto/ec/ECElGamalDecryptor.classPK     A (  ~
  3             * org/bouncycastle/crypto/ec/ECElGamalEncryptor.classPK     A ]W      ,             * org/bouncycastle/crypto/ec/ECEncryptor.classPK     A (<]  	  1             * org/bouncycastle/crypto/ec/ECFixedTransform.classPK     A hs,E  
  8             * org/bouncycastle/crypto/ec/ECNewPublicKeyTransform.classPK     A Ejh  I  9             * org/bouncycastle/crypto/ec/ECNewRandomnessTransform.classPK     A ʮ  D  '             g* org/bouncycastle/crypto/ec/ECPair.classPK     A 
      6             j* org/bouncycastle/crypto/ec/ECPairFactorTransform.classPK     A J      0             h* org/bouncycastle/crypto/ec/ECPairTransform.classPK     A     '             `* org/bouncycastle/crypto/ec/ECUtil.classPK
 
      A             "             R* org/bouncycastle/crypto/encodings/PK     A Y5J    9             * org/bouncycastle/crypto/encodings/ISO9796d1Encoding.classPK     A z    4             * org/bouncycastle/crypto/encodings/OAEPEncoding.classPK     A nN_  W  5             * org/bouncycastle/crypto/encodings/PKCS1Encoding.classPK
 
      A                            + org/bouncycastle/crypto/engines/PK     A UHw      6             >+ org/bouncycastle/crypto/engines/AEADBaseEngine$1.classPK     A :
   @  @             9+ org/bouncycastle/crypto/engines/AEADBaseEngine$AADOperator.classPK     A S[  N  D             z+ org/bouncycastle/crypto/engines/AEADBaseEngine$AADOperatorType.classPK     A U    H             + org/bouncycastle/crypto/engines/AEADBaseEngine$AADProcessingBuffer.classPK     A s	g    I             B+ org/bouncycastle/crypto/engines/AEADBaseEngine$BufferedAADProcessor.classPK     A T$    G             + org/bouncycastle/crypto/engines/AEADBaseEngine$CounterAADOperator.classPK     A ^-$    H             3+ org/bouncycastle/crypto/engines/AEADBaseEngine$CounterDataOperator.classPK     A ~d    I             + org/bouncycastle/crypto/engines/AEADBaseEngine$DataLimitAADOperator.classPK     A f5X    E             + org/bouncycastle/crypto/engines/AEADBaseEngine$DataLimitCounter.classPK     A rc    J             s+ org/bouncycastle/crypto/engines/AEADBaseEngine$DataLimitDataOperator.classPK     A [   B  A             N+ org/bouncycastle/crypto/engines/AEADBaseEngine$DataOperator.classPK     A     E             + org/bouncycastle/crypto/engines/AEADBaseEngine$DataOperatorType.classPK     A jc    M             + org/bouncycastle/crypto/engines/AEADBaseEngine$DecryptionFailureCounter.classPK     A &    G             n+ org/bouncycastle/crypto/engines/AEADBaseEngine$DefaultAADOperator.classPK     A ̓A    H             !+ org/bouncycastle/crypto/engines/AEADBaseEngine$DefaultDataOperator.classPK     A s   q  I             $+ org/bouncycastle/crypto/engines/AEADBaseEngine$ErasableOutputStream.classPK     A Oe    J             %+ org/bouncycastle/crypto/engines/AEADBaseEngine$ImmediateAADProcessor.classPK     A kŔ    I             O)+ org/bouncycastle/crypto/engines/AEADBaseEngine$ProcessingBufferType.classPK     A "  0  :             Z++ org/bouncycastle/crypto/engines/AEADBaseEngine$State.classPK     A     F             -+ org/bouncycastle/crypto/engines/AEADBaseEngine$StreamAADOperator.classPK     A $    I             ,0+ org/bouncycastle/crypto/engines/AEADBaseEngine$StreamCipherOperator.classPK     A 7ٜe    G             4+ org/bouncycastle/crypto/engines/AEADBaseEngine$StreamDataOperator.classPK     A ^a  E/  4             r7+ org/bouncycastle/crypto/engines/AEADBaseEngine.classPK     A #%  C  /             J+ org/bouncycastle/crypto/engines/AESEngine.classPK     A A!W    3             p+ org/bouncycastle/crypto/engines/AESFastEngine.classPK     A bu  +  4             + org/bouncycastle/crypto/engines/AESLightEngine.classPK     A |yy     3             + org/bouncycastle/crypto/engines/AESWrapEngine.classPK     A 5E{   h  6             <+ org/bouncycastle/crypto/engines/AESWrapPadEngine.classPK     A s  .  0             u+ org/bouncycastle/crypto/engines/ARIAEngine.classPK     A      4             + org/bouncycastle/crypto/engines/ARIAWrapEngine.classPK     A n'   1  7             + org/bouncycastle/crypto/engines/ARIAWrapPadEngine.classPK     A d"  L  2             + org/bouncycastle/crypto/engines/AsconAEAD128.classPK     A דT  M  5             , org/bouncycastle/crypto/engines/AsconBaseEngine.classPK     A {ki-    A             g, org/bouncycastle/crypto/engines/AsconEngine$AsconParameters.classPK     A vt	    1             	, org/bouncycastle/crypto/engines/AsconEngine.classPK     A һ]  z  M             , org/bouncycastle/crypto/engines/AsconPermutationFriend$AsconPermutation.classPK     A e^    <             , org/bouncycastle/crypto/engines/AsconPermutationFriend.classPK     A mW+  B  4             , org/bouncycastle/crypto/engines/BlowfishEngine.classPK     A gkN    1             C, org/bouncycastle/crypto/engines/CAST5Engine.classPK     A Ƨ  g  1             , org/bouncycastle/crypto/engines/CAST6Engine.classPK     A Aˋ(  K  4             , org/bouncycastle/crypto/engines/CamelliaEngine.classPK     A ]t  !  9             , org/bouncycastle/crypto/engines/CamelliaLightEngine.classPK     A a   6  8             , org/bouncycastle/crypto/engines/CamelliaWrapEngine.classPK     A 6    6             , org/bouncycastle/crypto/engines/ChaCha7539Engine.classPK     A iӦ  }  2             
, org/bouncycastle/crypto/engines/ChaChaEngine.classPK     A 5ro  X  ;             , org/bouncycastle/crypto/engines/CramerShoupCiphertext.classPK     A 4R`    Z             Y, org/bouncycastle/crypto/engines/CramerShoupCoreEngine$CramerShoupCiphertextException.classPK     A ^c	  )  ;             , org/bouncycastle/crypto/engines/CramerShoupCoreEngine.classPK     A xZz    9             ', org/bouncycastle/crypto/engines/CryptoProWrapEngine.classPK     A S
    -             , org/bouncycastle/crypto/engines/DESBase.classPK     A Ө  "  /             , org/bouncycastle/crypto/engines/DESEngine.classPK     A Rg  
  2             '- org/bouncycastle/crypto/engines/DESedeEngine.classPK     A S3  8  6             - org/bouncycastle/crypto/engines/DESedeWrapEngine.classPK     A V|(  Y  4             .- org/bouncycastle/crypto/engines/DSTU7624Engine.classPK     A 6a    8             F- org/bouncycastle/crypto/engines/DSTU7624WrapEngine.classPK     A sx   b  3             uM- org/bouncycastle/crypto/engines/ElGamalEngine.classPK     A nI      6             T- org/bouncycastle/crypto/engines/ElephantEngine$1.classPK     A 3Km    =             U- org/bouncycastle/crypto/engines/ElephantEngine$Delirium.classPK     A g5    :             Z- org/bouncycastle/crypto/engines/ElephantEngine$Dumbo.classPK     A g1    G             \- org/bouncycastle/crypto/engines/ElephantEngine$ElephantParameters.classPK     A Z
  /  :             m_- org/bouncycastle/crypto/engines/ElephantEngine$Jumbo.classPK     A ꬷ     @             va- org/bouncycastle/crypto/engines/ElephantEngine$Permutation.classPK     A w  
  =             b- org/bouncycastle/crypto/engines/ElephantEngine$Spongent.classPK     A   P$  4             vi- org/bouncycastle/crypto/engines/ElephantEngine.classPK     A uO    L             x- org/bouncycastle/crypto/engines/EthereumIESEngine$HandshakeKDFFunction.classPK     A 83    7             }- org/bouncycastle/crypto/engines/EthereumIESEngine.classPK     A 3  ,  5             *- org/bouncycastle/crypto/engines/GOST28147Engine.classPK     A eC    9             B- org/bouncycastle/crypto/engines/GOST28147WrapEngine.classPK     A     9             [- org/bouncycastle/crypto/engines/GOST3412_2015Engine.classPK     A F    4             ʲ- org/bouncycastle/crypto/engines/GiftCofbEngine.classPK     A GZ    8             r- org/bouncycastle/crypto/engines/Grain128AEADEngine.classPK     A   `  4             - org/bouncycastle/crypto/engines/Grain128Engine.classPK     A Fo    3             - org/bouncycastle/crypto/engines/Grainv1Engine.classPK     A BטA    1             - org/bouncycastle/crypto/engines/HC128Engine.classPK     A >]Zh  J  1             (- org/bouncycastle/crypto/engines/HC256Engine.classPK     A Ī  m  0             - org/bouncycastle/crypto/engines/IDEAEngine.classPK     A _Tpr9  E  /             8- org/bouncycastle/crypto/engines/IESEngine.classPK     A     1             - org/bouncycastle/crypto/engines/ISAACEngine.classPK     A \ĺ  \  ;             	. org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_A.classPK     A 쨫    ?             ,. org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_A_128.classPK     A ˮ    @             D. org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_A_128A.classPK     A b@  !  ;             |. org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_K.classPK     A P    ?             %. org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_K_128.classPK     A dH1  6  @              . org/bouncycastle/crypto/engines/ISAPEngine$ISAPAEAD_K_128A.classPK     A HŤ     :             *#. org/bouncycastle/crypto/engines/ISAPEngine$ISAP_AEAD.classPK     A ?J    9             $. org/bouncycastle/crypto/engines/ISAPEngine$IsapType.classPK     A O7    0             <'. org/bouncycastle/crypto/engines/ISAPEngine.classPK     A *Z	    /             Z/. org/bouncycastle/crypto/engines/LEAEngine.classPK     A rB`    9             _9. org/bouncycastle/crypto/engines/NaccacheSternEngine.classPK     A D  
  3             &F. org/bouncycastle/crypto/engines/NoekeonEngine.classPK     A Ͼ    0             3M. org/bouncycastle/crypto/engines/NullEngine.classPK     A ^    2             OP. org/bouncycastle/crypto/engines/OldIESEngine.classPK     A     O             
R. org/bouncycastle/crypto/engines/PhotonBeetleEngine$PhotonBeetleParameters.classPK     A 0 E
  9  8             T. org/bouncycastle/crypto/engines/PhotonBeetleEngine.classPK     A 	Kj    /             b. org/bouncycastle/crypto/engines/RC2Engine.classPK     A P    3             n. org/bouncycastle/crypto/engines/RC2WrapEngine.classPK     A ^ m  	  /             w. org/bouncycastle/crypto/engines/RC4Engine.classPK     A   ^  1             R|. org/bouncycastle/crypto/engines/RC532Engine.classPK     A !n`    1             Ђ. org/bouncycastle/crypto/engines/RC564Engine.classPK     A ND<  
  /             . org/bouncycastle/crypto/engines/RC6Engine.classPK     A {    7             (. org/bouncycastle/crypto/engines/RFC3211WrapEngine.classPK     A ;>քi    7             v. org/bouncycastle/crypto/engines/RFC3394WrapEngine.classPK     A '=  <
  7             D. org/bouncycastle/crypto/engines/RFC5649WrapEngine.classPK     A <w  
  6             . org/bouncycastle/crypto/engines/RSABlindedEngine.classPK     A Se    7             ު. org/bouncycastle/crypto/engines/RSABlindingEngine.classPK     A <b&  Z  3             ٮ. org/bouncycastle/crypto/engines/RSACoreEngine.classPK     A o    /             P. org/bouncycastle/crypto/engines/RSAEngine.classPK     A ]/a  _;  4             ˸. org/bouncycastle/crypto/engines/RijndaelEngine.classPK     A dx      5             . org/bouncycastle/crypto/engines/RomulusEngine$1.classPK     A 8^k     <             . org/bouncycastle/crypto/engines/RomulusEngine$Instance.classPK     A '
VP  }  <             . org/bouncycastle/crypto/engines/RomulusEngine$RomulusM.classPK     A ]p	    <             y. org/bouncycastle/crypto/engines/RomulusEngine$RomulusN.classPK     A j$    E             . org/bouncycastle/crypto/engines/RomulusEngine$RomulusParameters.classPK     A 5S    <             . org/bouncycastle/crypto/engines/RomulusEngine$RomulusT.classPK     A ͸  '  3             . org/bouncycastle/crypto/engines/RomulusEngine.classPK     A kv:&  \>  0             / org/bouncycastle/crypto/engines/SEEDEngine.classPK     A ig   .  4             (/ org/bouncycastle/crypto/engines/SEEDWrapEngine.classPK     A y  ,  4             )/ org/bouncycastle/crypto/engines/SM2Engine$Mode.classPK     A ]*t    /             A,/ org/bouncycastle/crypto/engines/SM2Engine.classPK     A {U9    /             8/ org/bouncycastle/crypto/engines/SM4Engine.classPK     A x
EB
    3             E/ org/bouncycastle/crypto/engines/Salsa20Engine.classPK     A '	     3             R/ org/bouncycastle/crypto/engines/SerpentEngine.classPK     A Ji	    7             \/ org/bouncycastle/crypto/engines/SerpentEngineBase.classPK     A 7/	  H  3             ~f/ org/bouncycastle/crypto/engines/Shacal2Engine.classPK     A !N
    4             p/ org/bouncycastle/crypto/engines/SkipjackEngine.classPK     A sU  )  E             {/ org/bouncycastle/crypto/engines/SparkleEngine$SparkleParameters.classPK     A kgW  v(  3             }/ org/bouncycastle/crypto/engines/SparkleEngine.classPK     A   |  /             Ď/ org/bouncycastle/crypto/engines/TEAEngine.classPK     A YI x	    I             / org/bouncycastle/crypto/engines/ThreefishEngine$Threefish1024Cipher.classPK     A 	  	  H             / org/bouncycastle/crypto/engines/ThreefishEngine$Threefish256Cipher.classPK     A     H             o/ org/bouncycastle/crypto/engines/ThreefishEngine$Threefish512Cipher.classPK     A <	    E             ܩ/ org/bouncycastle/crypto/engines/ThreefishEngine$ThreefishCipher.classPK     A Ğg
    5             X/ org/bouncycastle/crypto/engines/ThreefishEngine.classPK     A ~	  ^   3             / org/bouncycastle/crypto/engines/TnepresEngine.classPK     A Bҋ;  )  3             / org/bouncycastle/crypto/engines/TwofishEngine.classPK     A 
    +             / org/bouncycastle/crypto/engines/Utils.classPK     A e  
  0             / org/bouncycastle/crypto/engines/VMPCEngine.classPK     A ^z    4             ;/ org/bouncycastle/crypto/engines/VMPCKSA3Engine.classPK     A e^Ɉ  @  4             */ org/bouncycastle/crypto/engines/XSalsa20Engine.classPK     A ]  N  0             / org/bouncycastle/crypto/engines/XTEAEngine.classPK     A h\'    3             c/ org/bouncycastle/crypto/engines/XoodyakEngine.classPK     A 
7  #  6             I/ org/bouncycastle/crypto/engines/Zuc128CoreEngine.classPK     A [17     2             0 org/bouncycastle/crypto/engines/Zuc128Engine.classPK     A  /  {	  6             +0 org/bouncycastle/crypto/engines/Zuc256CoreEngine.classPK     A *{e     2             /0 org/bouncycastle/crypto/engines/Zuc256Engine.classPK
 
      A             !             0 org/bouncycastle/crypto/examples/PK     A Nz    1             0 org/bouncycastle/crypto/examples/DESExample.classPK     A jb	  '  5             0 org/bouncycastle/crypto/examples/ECJPAKEExample.classPK     A eD    3             0 org/bouncycastle/crypto/examples/JPAKEExample.classPK
 
      A                          r(0 org/bouncycastle/crypto/fpe/PK     A k:η  >  +             (0 org/bouncycastle/crypto/fpe/FPEEngine.classPK     A T  }	  .             ,0 org/bouncycastle/crypto/fpe/FPEFF1Engine.classPK     A тwZw  	  0             l10 org/bouncycastle/crypto/fpe/FPEFF3_1Engine.classPK     A ŔkL
  .  *             A60 org/bouncycastle/crypto/fpe/SP80038G.classPK
 
      A             #             C0 org/bouncycastle/crypto/generators/PK     A ,Vm1      ?             &D0 org/bouncycastle/crypto/generators/Argon2BytesGenerator$1.classPK     A Np&  *	  C             .E0 org/bouncycastle/crypto/generators/Argon2BytesGenerator$Block.classPK     A y4  ?	  G             eI0 org/bouncycastle/crypto/generators/Argon2BytesGenerator$FillBlock.classPK     A b   L  F             L0 org/bouncycastle/crypto/generators/Argon2BytesGenerator$Position.classPK     A   ="  =             N0 org/bouncycastle/crypto/generators/Argon2BytesGenerator.classPK     A ?wg[+  @  /             ^]0 org/bouncycastle/crypto/generators/BCrypt.classPK     A /%  I  >             0 org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.classPK     A {z    D             0 org/bouncycastle/crypto/generators/CramerShoupKeyPairGenerator.classPK     A ՄKM    X             0 org/bouncycastle/crypto/generators/CramerShoupParametersGenerator$ParametersHelper.classPK     A O.	  *  G             0 org/bouncycastle/crypto/generators/CramerShoupParametersGenerator.classPK     A 0w    8             0 org/bouncycastle/crypto/generators/DESKeyGenerator.classPK     A M    ;             0 org/bouncycastle/crypto/generators/DESedeKeyGenerator.classPK     A jj)    @             0 org/bouncycastle/crypto/generators/DHBasicKeyPairGenerator.classPK     A  /I"    =             !0 org/bouncycastle/crypto/generators/DHKeyGeneratorHelper.classPK     A KqM%    ;             0 org/bouncycastle/crypto/generators/DHKeyPairGenerator.classPK     A >    >             <0 org/bouncycastle/crypto/generators/DHParametersGenerator.classPK     A Vk    ;             ĭ0 org/bouncycastle/crypto/generators/DHParametersHelper.classPK     A Ύ*    <             0 org/bouncycastle/crypto/generators/DSAKeyPairGenerator.classPK     A #6%4  6  ?             0 org/bouncycastle/crypto/generators/DSAParametersGenerator.classPK     A BE  *  A             0 org/bouncycastle/crypto/generators/DSTU4145KeyPairGenerator.classPK     A "zl  
  >              0 org/bouncycastle/crypto/generators/ECCSIKeyPairGenerator.classPK     A   |  ;             0 org/bouncycastle/crypto/generators/ECKeyPairGenerator.classPK     A H^    @             =0 org/bouncycastle/crypto/generators/Ed25519KeyPairGenerator.classPK     A X [    >             	0 org/bouncycastle/crypto/generators/Ed448KeyPairGenerator.classPK     A =q  	  @             0 org/bouncycastle/crypto/generators/ElGamalKeyPairGenerator.classPK     A 6<D    C             0 org/bouncycastle/crypto/generators/ElGamalParametersGenerator.classPK     A ^X  F  B             0 org/bouncycastle/crypto/generators/EphemeralKeyPairGenerator.classPK     A  s  	  A             0 org/bouncycastle/crypto/generators/GOST3410KeyPairGenerator.classPK     A mN
    D             0 org/bouncycastle/crypto/generators/GOST3410ParametersGenerator.classPK     A İŀ    ;             0 org/bouncycastle/crypto/generators/HKDFBytesGenerator.classPK     A pܣ     ;             0 org/bouncycastle/crypto/generators/KDF1BytesGenerator.classPK     A vB     ;             0 org/bouncycastle/crypto/generators/KDF2BytesGenerator.classPK     A N)g  g
  A             0 org/bouncycastle/crypto/generators/KDFCounterBytesGenerator.classPK     A X  
  Q             0 org/bouncycastle/crypto/generators/KDFDoublePipelineIterationBytesGenerator.classPK     A 3"  
  B              0 org/bouncycastle/crypto/generators/KDFFeedbackBytesGenerator.classPK     A 
:L~o  B  ;             1 org/bouncycastle/crypto/generators/MGF1BytesGenerator.classPK     A W49    F             1 org/bouncycastle/crypto/generators/NaccacheSternKeyPairGenerator.classPK     A 

    6             c1 org/bouncycastle/crypto/generators/OpenBSDBCrypt.classPK     A G2  
  F             1 org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.classPK     A <h;S   
  B             P#1 org/bouncycastle/crypto/generators/PKCS12ParametersGenerator.classPK     A n7  W  C             )1 org/bouncycastle/crypto/generators/PKCS5S1ParametersGenerator.classPK     A õO>    C             ,1 org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.classPK     A 2    =             j11 org/bouncycastle/crypto/generators/Poly1305KeyGenerator.classPK     A e    C             r41 org/bouncycastle/crypto/generators/RSABlindingFactorGenerator.classPK     A ?|D  )  <             H81 org/bouncycastle/crypto/generators/RSAKeyPairGenerator.classPK     A L  
  /             2@1 org/bouncycastle/crypto/generators/SCrypt.classPK     A , m  t  <             mH1 org/bouncycastle/crypto/generators/SM2KeyPairGenerator.classPK     A 0̇`    ?             DJ1 org/bouncycastle/crypto/generators/X25519KeyPairGenerator.classPK     A X^^    =             M1 org/bouncycastle/crypto/generators/X448KeyPairGenerator.classPK
 
      A                          O1 org/bouncycastle/crypto/hpke/PK     A {eǜ    '             P1 org/bouncycastle/crypto/hpke/AEAD.classPK     A 9
  $  (             U1 org/bouncycastle/crypto/hpke/DHKEM.classPK     A @%  	  '             b1 org/bouncycastle/crypto/hpke/HKDF.classPK     A ^  R  '             pg1 org/bouncycastle/crypto/hpke/HPKE.classPK     A ]if!2  t  .             r1 org/bouncycastle/crypto/hpke/HPKEContext.classPK     A K5_    ?             Uu1 org/bouncycastle/crypto/hpke/HPKEContextWithEncapsulation.classPK     A Dfm  2  &             !w1 org/bouncycastle/crypto/hpke/KEM.classPK
 
      A                          x1 org/bouncycastle/crypto/io/PK     A |g,    2             y1 org/bouncycastle/crypto/io/CipherIOException.classPK     A xj  _  2             z1 org/bouncycastle/crypto/io/CipherInputStream.classPK     A pb\y  	  3             1 org/bouncycastle/crypto/io/CipherOutputStream.classPK     A S    2             1 org/bouncycastle/crypto/io/DigestInputStream.classPK     A 32bx  y  3             1 org/bouncycastle/crypto/io/DigestOutputStream.classPK     A ;t   /  =             o1 org/bouncycastle/crypto/io/InvalidCipherTextIOException.classPK     A jc9հ    /             1 org/bouncycastle/crypto/io/MacInputStream.classPK     A +Gr  d  0             ɏ1 org/bouncycastle/crypto/io/MacOutputStream.classPK     A 0d    2             1 org/bouncycastle/crypto/io/SignerInputStream.classPK     A ioH  E  3             1 org/bouncycastle/crypto/io/SignerOutputStream.classPK
 
      A                          Y1 org/bouncycastle/crypto/kems/PK     A mۄ  Q  4             1 org/bouncycastle/crypto/kems/ECIESKEMExtractor.classPK     A f6    4             Ś1 org/bouncycastle/crypto/kems/ECIESKEMGenerator.classPK     A Z~  
  8             ]1 org/bouncycastle/crypto/kems/ECIESKeyEncapsulation.classPK     A {Ê    2             A1 org/bouncycastle/crypto/kems/RSAKEMExtractor.classPK     A vl  
  2             +1 org/bouncycastle/crypto/kems/RSAKEMGenerator.classPK     A t    6             D1 org/bouncycastle/crypto/kems/RSAKeyEncapsulation.classPK     A |  <  4             1 org/bouncycastle/crypto/kems/SAKKEKEMExtractor.classPK     A qA    5             1 org/bouncycastle/crypto/kems/SAKKEKEMSGenerator.classPK     A   e  >             ^1 org/bouncycastle/crypto/kems/SecretWithEncapsulationImpl.classPK
 
      A                          V1 org/bouncycastle/crypto/macs/PK     A 8J    ,             1 org/bouncycastle/crypto/macs/Blake3Mac.classPK     A J  o  1             51 org/bouncycastle/crypto/macs/BlockCipherMac.classPK     A 42s  	  4             1 org/bouncycastle/crypto/macs/CBCBlockCipherMac.classPK     A %Fz  d	  4             h1 org/bouncycastle/crypto/macs/CFBBlockCipherMac.classPK     A Y%  0
  '             D1 org/bouncycastle/crypto/macs/CMac.classPK     A [f   ~  -             1 org/bouncycastle/crypto/macs/CMacWithIV.classPK     A lL  	  .             1 org/bouncycastle/crypto/macs/DSTU7564Mac.classPK     A ATe  
  .             1 org/bouncycastle/crypto/macs/DSTU7624Mac.classPK     A @  &  '             [1 org/bouncycastle/crypto/macs/GMac.classPK     A UPT	  
  /             1 org/bouncycastle/crypto/macs/GOST28147Mac.classPK     A 	`  
  '             1 org/bouncycastle/crypto/macs/HMac.classPK     A z\^  
  1             2 org/bouncycastle/crypto/macs/ISO9797Alg3Mac.classPK     A *\  G  (             D
2 org/bouncycastle/crypto/macs/KGMac.classPK     A |o  "  '             l2 org/bouncycastle/crypto/macs/KMAC.classPK     A {z
    4             2 org/bouncycastle/crypto/macs/MacCFBBlockCipher.classPK     A 5  4  *             2 org/bouncycastle/crypto/macs/OldHMac.classPK     A .	    +             <2 org/bouncycastle/crypto/macs/Poly1305.classPK     A >  
  *             a)2 org/bouncycastle/crypto/macs/SipHash.classPK     A 5Ǿt%    -             /2 org/bouncycastle/crypto/macs/SipHash128.classPK     A 0    +             32 org/bouncycastle/crypto/macs/SkeinMac.classPK     A     *             72 org/bouncycastle/crypto/macs/VMPCMac.classPK     A 3O      .             =2 org/bouncycastle/crypto/macs/Zuc128Mac$1.classPK     A O5    A             v>2 org/bouncycastle/crypto/macs/Zuc128Mac$InternalZuc128Engine.classPK     A Q:}    ,             ?2 org/bouncycastle/crypto/macs/Zuc128Mac.classPK     A O     A             D2 org/bouncycastle/crypto/macs/Zuc256Mac$InternalZuc256Engine.classPK     A '  	  ,             7F2 org/bouncycastle/crypto/macs/Zuc256Mac.classPK
 
      A                          K2 org/bouncycastle/crypto/modes/PK     A       3             K2 org/bouncycastle/crypto/modes/AEADBlockCipher.classPK     A N    .             L2 org/bouncycastle/crypto/modes/AEADCipher.classPK     A Ez@C  7
  2             N2 org/bouncycastle/crypto/modes/CBCBlockCipher.classPK     A       1             CT2 org/bouncycastle/crypto/modes/CBCModeCipher.classPK     A zm     O             8U2 org/bouncycastle/crypto/modes/CCMBlockCipher$ExposedByteArrayOutputStream.classPK     A 	+a]  0  2             V2 org/bouncycastle/crypto/modes/CCMBlockCipher.classPK     A Ġr      1             b2 org/bouncycastle/crypto/modes/CCMModeCipher.classPK     A T)    2             c2 org/bouncycastle/crypto/modes/CFBBlockCipher.classPK     A c      1             i2 org/bouncycastle/crypto/modes/CFBModeCipher.classPK     A Z     1             fj2 org/bouncycastle/crypto/modes/CTRModeCipher.classPK     A '  
  2             pk2 org/bouncycastle/crypto/modes/CTSBlockCipher.classPK     A  fN  ;  :             pq2 org/bouncycastle/crypto/modes/ChaCha20Poly1305$State.classPK     A  ~
     4             &s2 org/bouncycastle/crypto/modes/ChaCha20Poly1305.classPK     A 
    2             R2 org/bouncycastle/crypto/modes/EAXBlockCipher.classPK     A aV  
  7             2 org/bouncycastle/crypto/modes/G3413CBCBlockCipher.classPK     A M  m  7             22 org/bouncycastle/crypto/modes/G3413CFBBlockCipher.classPK     A "9n  m
  7             {2 org/bouncycastle/crypto/modes/G3413CTRBlockCipher.classPK     A ըG`  	  7             N2 org/bouncycastle/crypto/modes/G3413OFBBlockCipher.classPK     A B  I  3             2 org/bouncycastle/crypto/modes/GCFBBlockCipher.classPK     A 1  _!  2             Ȩ2 org/bouncycastle/crypto/modes/GCMBlockCipher.classPK     A \9r      1             ո2 org/bouncycastle/crypto/modes/GCMModeCipher.classPK     A 8_      7             2 org/bouncycastle/crypto/modes/GCMSIVBlockCipher$1.classPK     A 6    A             2 org/bouncycastle/crypto/modes/GCMSIVBlockCipher$GCMSIVCache.classPK     A y1/    B             K2 org/bouncycastle/crypto/modes/GCMSIVBlockCipher$GCMSIVHasher.classPK     A Ҹz  F   5             2 org/bouncycastle/crypto/modes/GCMSIVBlockCipher.classPK     A Ta  	  3             2 org/bouncycastle/crypto/modes/GOFBBlockCipher.classPK     A BC  `  6             2 org/bouncycastle/crypto/modes/GOST3413CipherUtil.classPK     A f     P             2 org/bouncycastle/crypto/modes/KCCMBlockCipher$ExposedByteArrayOutputStream.classPK     A }"/    3             2 org/bouncycastle/crypto/modes/KCCMBlockCipher.classPK     A *    3             2 org/bouncycastle/crypto/modes/KCTRBlockCipher.classPK     A ҋ     P             2 org/bouncycastle/crypto/modes/KGCMBlockCipher$ExposedByteArrayOutputStream.classPK     A R}:

    3             F2 org/bouncycastle/crypto/modes/KGCMBlockCipher.classPK     A >t    3             2 org/bouncycastle/crypto/modes/KXTSBlockCipher.classPK     A ?z2  j  6             h2 org/bouncycastle/crypto/modes/NISTCTSBlockCipher.classPK     A ]ZW"  $  2             3 org/bouncycastle/crypto/modes/OCBBlockCipher.classPK     A *Of  l  2             3 org/bouncycastle/crypto/modes/OFBBlockCipher.classPK     A /#i  
  5             F3 org/bouncycastle/crypto/modes/OldCTSBlockCipher.classPK     A M-  @  9             73 org/bouncycastle/crypto/modes/OpenPGPCFBBlockCipher.classPK     A bZ    5             #3 org/bouncycastle/crypto/modes/PGPCFBBlockCipher.classPK     A I
l    5             *3 org/bouncycastle/crypto/modes/PaddedBlockCipher.classPK     A i    2             W/3 org/bouncycastle/crypto/modes/SICBlockCipher.classPK
 
      A             "             83 org/bouncycastle/crypto/modes/gcm/PK     A H)    =             83 org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.classPK     A @r    :             :3 org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.classPK     A "P      8             }<3 org/bouncycastle/crypto/modes/gcm/GCMExponentiator.classPK     A G      5             o=3 org/bouncycastle/crypto/modes/gcm/GCMMultiplier.classPK     A u 	    /             U>3 org/bouncycastle/crypto/modes/gcm/GCMUtil.classPK     A }  1  @             |H3 org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.classPK     A lx    =             K3 org/bouncycastle/crypto/modes/gcm/Tables4kGCMMultiplier.classPK     A oQ  <  >             vN3 org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.classPK     A w^  b  =             Q3 org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.classPK
 
      A             #             %U3 org/bouncycastle/crypto/modes/kgcm/PK     A C,*    @             fU3 org/bouncycastle/crypto/modes/kgcm/BasicKGCMMultiplier_128.classPK     A HnT)    @             V3 org/bouncycastle/crypto/modes/kgcm/BasicKGCMMultiplier_256.classPK     A *    @             X3 org/bouncycastle/crypto/modes/kgcm/BasicKGCMMultiplier_512.classPK     A _l;      7             -Z3 org/bouncycastle/crypto/modes/kgcm/KGCMMultiplier.classPK     A t.!  	  5             [3 org/bouncycastle/crypto/modes/kgcm/KGCMUtil_128.classPK     A N%    5             ^3 org/bouncycastle/crypto/modes/kgcm/KGCMUtil_256.classPK     A xLR  j  5             $c3 org/bouncycastle/crypto/modes/kgcm/KGCMUtil_512.classPK     A =m    D             hh3 org/bouncycastle/crypto/modes/kgcm/Tables16kKGCMMultiplier_512.classPK     A R    C             j3 org/bouncycastle/crypto/modes/kgcm/Tables4kKGCMMultiplier_128.classPK     A x4    C             #m3 org/bouncycastle/crypto/modes/kgcm/Tables8kKGCMMultiplier_256.classPK
 
      A             !             o3 org/bouncycastle/crypto/paddings/PK     A X    9             o3 org/bouncycastle/crypto/paddings/BlockCipherPadding.classPK     A _^    8             *q3 org/bouncycastle/crypto/paddings/ISO10126d2Padding.classPK     A k&h   5  7             s3 org/bouncycastle/crypto/paddings/ISO7816d4Padding.classPK     A 	%  8  3             sv3 org/bouncycastle/crypto/paddings/PKCS7Padding.classPK     A kf(    @             x3 org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher.classPK     A l    1             A3 org/bouncycastle/crypto/paddings/TBCPadding.classPK     A 'tfk=    2             3 org/bouncycastle/crypto/paddings/X923Padding.classPK     A i    6             O3 org/bouncycastle/crypto/paddings/ZeroBytePadding.classPK
 
      A                          3 org/bouncycastle/crypto/params/PK     A n8  c  3             ͆3 org/bouncycastle/crypto/params/AEADParameters.classPK     A W      7             3 org/bouncycastle/crypto/params/Argon2Parameters$1.classPK     A _[3  {  =             3 org/bouncycastle/crypto/params/Argon2Parameters$Builder.classPK     A nEN  y  5             \3 org/bouncycastle/crypto/params/Argon2Parameters.classPK     A    8  ;             
3 org/bouncycastle/crypto/params/AsymmetricKeyParameter.classPK     A     5             `3 org/bouncycastle/crypto/params/Blake3Parameters.classPK     A      2             3 org/bouncycastle/crypto/params/CCMParameters.classPK     A Zvd  "  G             3 org/bouncycastle/crypto/params/CramerShoupKeyGenerationParameters.classPK     A 8XӶ  *  =             ė3 org/bouncycastle/crypto/params/CramerShoupKeyParameters.classPK     A (ZS    :             3 org/bouncycastle/crypto/params/CramerShoupParameters.classPK     A &    D             3 org/bouncycastle/crypto/params/CramerShoupPrivateKeyParameters.classPK     A mf3    C             3 org/bouncycastle/crypto/params/CramerShoupPublicKeyParameters.classPK     A ^9  (  2             3 org/bouncycastle/crypto/params/DESParameters.classPK     A b    5             3 org/bouncycastle/crypto/params/DESedeParameters.classPK     A  R  &  >             3 org/bouncycastle/crypto/params/DHKeyGenerationParameters.classPK     A <)    4             ֪3 org/bouncycastle/crypto/params/DHKeyParameters.classPK     A <%   P  ;             3 org/bouncycastle/crypto/params/DHMQVPrivateParameters.classPK     A $$    :             s3 org/bouncycastle/crypto/params/DHMQVPublicParameters.classPK     A UHu  
  1             3 org/bouncycastle/crypto/params/DHParameters.classPK     A 
M|    ;             3 org/bouncycastle/crypto/params/DHPrivateKeyParameters.classPK     A G"'  	  :             3 org/bouncycastle/crypto/params/DHPublicKeyParameters.classPK     A E#$  N  9             W3 org/bouncycastle/crypto/params/DHUPrivateParameters.classPK     A %    8             3 org/bouncycastle/crypto/params/DHUPublicParameters.classPK     A Jѷ    ;             m3 org/bouncycastle/crypto/params/DHValidationParameters.classPK     A @=    ?             3 org/bouncycastle/crypto/params/DSAKeyGenerationParameters.classPK     A a     5             73 org/bouncycastle/crypto/params/DSAKeyParameters.classPK     A   W  E             {3 org/bouncycastle/crypto/params/DSAParameterGenerationParameters.classPK     A -&    2             3 org/bouncycastle/crypto/params/DSAParameters.classPK     A      <             X3 org/bouncycastle/crypto/params/DSAPrivateKeyParameters.classPK     A X(z  4  ;             3 org/bouncycastle/crypto/params/DSAPublicKeyParameters.classPK     A M8    <             3 org/bouncycastle/crypto/params/DSAValidationParameters.classPK     A ~1z    7             3 org/bouncycastle/crypto/params/DSTU4145Parameters.classPK     A E\$  I  A             3 org/bouncycastle/crypto/params/ECCSIKeyGenerationParameters.classPK     A Ʈ)  o  >             d3 org/bouncycastle/crypto/params/ECCSIPrivateKeyParameters.classPK     A M
]     =             3 org/bouncycastle/crypto/params/ECCSIPublicKeyParameters.classPK     A 	i.J    ;             X3 org/bouncycastle/crypto/params/ECDHUPrivateParameters.classPK     A cj.    :             3 org/bouncycastle/crypto/params/ECDHUPublicParameters.classPK     A \
c    7             3 org/bouncycastle/crypto/params/ECDomainParameters.classPK     A FHWG    9             i3 org/bouncycastle/crypto/params/ECGOST3410Parameters.classPK     A $qID    >             3 org/bouncycastle/crypto/params/ECKeyGenerationParameters.classPK     A j`^    4             3 org/bouncycastle/crypto/params/ECKeyParameters.classPK     A Dp  Z  <             3 org/bouncycastle/crypto/params/ECNamedDomainParameters.classPK     A S|  N  ;             3 org/bouncycastle/crypto/params/ECPrivateKeyParameters.classPK     A H    :             3 org/bouncycastle/crypto/params/ECPublicKeyParameters.classPK     A :     C             3 org/bouncycastle/crypto/params/Ed25519KeyGenerationParameters.classPK     A 7M  
  @             3 org/bouncycastle/crypto/params/Ed25519PrivateKeyParameters.classPK     A kV  $	  ?             y3 org/bouncycastle/crypto/params/Ed25519PublicKeyParameters.classPK     A K     A             <4 org/bouncycastle/crypto/params/Ed448KeyGenerationParameters.classPK     A "=1  Y
  >             b4 org/bouncycastle/crypto/params/Ed448PrivateKeyParameters.classPK     A ğ/C    =             4 org/bouncycastle/crypto/params/Ed448PublicKeyParameters.classPK     A   D  C             
4 org/bouncycastle/crypto/params/ElGamalKeyGenerationParameters.classPK     A [$L    9             4 org/bouncycastle/crypto/params/ElGamalKeyParameters.classPK     A dfAQ    6             4 org/bouncycastle/crypto/params/ElGamalParameters.classPK     A ߄    @             4 org/bouncycastle/crypto/params/ElGamalPrivateKeyParameters.classPK     A }"    ?             4 org/bouncycastle/crypto/params/ElGamalPublicKeyParameters.classPK     A %y    2             4 org/bouncycastle/crypto/params/FPEParameters.classPK     A %C    D             \4 org/bouncycastle/crypto/params/GOST3410KeyGenerationParameters.classPK     A v     :             4 org/bouncycastle/crypto/params/GOST3410KeyParameters.classPK     A 4'    7             _4 org/bouncycastle/crypto/params/GOST3410Parameters.classPK     A #+a     A             4 org/bouncycastle/crypto/params/GOST3410PrivateKeyParameters.classPK     A |o*\     @             Q!4 org/bouncycastle/crypto/params/GOST3410PublicKeyParameters.classPK     A b    A             "4 org/bouncycastle/crypto/params/GOST3410ValidationParameters.classPK     A t/~  ]  3             $4 org/bouncycastle/crypto/params/HKDFParameters.classPK     A Jg  0  2             '4 org/bouncycastle/crypto/params/IESParameters.classPK     A 'uz   =  <             )4 org/bouncycastle/crypto/params/IESWithCipherParameters.classPK     A K]   6  :             *4 org/bouncycastle/crypto/params/ISO18033KDFParameters.classPK     A =  N  9             >,4 org/bouncycastle/crypto/params/KDFCounterParameters.classPK     A ;    I             &/4 org/bouncycastle/crypto/params/KDFDoublePipelineIterationParameters.classPK     A [    :             v24 org/bouncycastle/crypto/params/KDFFeedbackParameters.classPK     A v|	  }  2             54 org/bouncycastle/crypto/params/KDFParameters.classPK     A `M'  ~  1             C74 org/bouncycastle/crypto/params/KeyParameter.classPK     A 
q|4    2             94 org/bouncycastle/crypto/params/MGFParameters.classPK     A K    9             H;4 org/bouncycastle/crypto/params/MQVPrivateParameters.classPK     A m-    8             >4 org/bouncycastle/crypto/params/MQVPublicParameters.classPK     A NE    I             A4 org/bouncycastle/crypto/params/NaccacheSternKeyGenerationParameters.classPK     A NXG  +  ?             D4 org/bouncycastle/crypto/params/NaccacheSternKeyParameters.classPK     A :;  i  F             E4 org/bouncycastle/crypto/params/NaccacheSternPrivateKeyParameters.classPK     A udZE    :             yG4 org/bouncycastle/crypto/params/ParametersWithContext.classPK     A l    5             &J4 org/bouncycastle/crypto/params/ParametersWithID.classPK     A Tf    5             K4 org/bouncycastle/crypto/params/ParametersWithIV.classPK     A o  H  9             hM4 org/bouncycastle/crypto/params/ParametersWithRandom.classPK     A ]3    7             >O4 org/bouncycastle/crypto/params/ParametersWithSBox.classPK     A g    7             P4 org/bouncycastle/crypto/params/ParametersWithSalt.classPK     A ݞj    6             R4 org/bouncycastle/crypto/params/ParametersWithUKM.classPK     A yy(    2             UT4 org/bouncycastle/crypto/params/RC2Parameters.classPK     A /0)    2             U4 org/bouncycastle/crypto/params/RC5Parameters.classPK     A J<    :             X4 org/bouncycastle/crypto/params/RSABlindingParameters.classPK     A ˼  ;  ?             AZ4 org/bouncycastle/crypto/params/RSAKeyGenerationParameters.classPK     A    R  5             \4 org/bouncycastle/crypto/params/RSAKeyParameters.classPK     A <I4  x  ?             c4 org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.classPK     A h    >             8e4 org/bouncycastle/crypto/params/SAKKEPrivateKeyParameters.classPK     A     =             h4 org/bouncycastle/crypto/params/SAKKEPublicKeyParameters.classPK     A S    D             p4 org/bouncycastle/crypto/params/SM2KeyExchangePrivateParameters.classPK     A ֤T4    C             rt4 org/bouncycastle/crypto/params/SM2KeyExchangePublicParameters.classPK     A iRm     8             w4 org/bouncycastle/crypto/params/SRP6GroupParameters.classPK     A       6             |x4 org/bouncycastle/crypto/params/SkeinParameters$1.classPK     A !  L
  <             xy4 org/bouncycastle/crypto/params/SkeinParameters$Builder.classPK     A   h  4             4 org/bouncycastle/crypto/params/SkeinParameters.classPK     A j!{3B  Q  C             4 org/bouncycastle/crypto/params/TweakableBlockCipherParameters.classPK     A N»     B             s4 org/bouncycastle/crypto/params/X25519KeyGenerationParameters.classPK     A '7    ?             4 org/bouncycastle/crypto/params/X25519PrivateKeyParameters.classPK     A RWb    >             4 org/bouncycastle/crypto/params/X25519PublicKeyParameters.classPK     A g)Q     @             "4 org/bouncycastle/crypto/params/X448KeyGenerationParameters.classPK     A 5  t  =             G4 org/bouncycastle/crypto/params/X448PrivateKeyParameters.classPK     A J+^    <             4 org/bouncycastle/crypto/params/X448PublicKeyParameters.classPK     A SE<  J  :             ŕ4 org/bouncycastle/crypto/params/XDHUPrivateParameters.classPK     A pـ  V  9             i4 org/bouncycastle/crypto/params/XDHUPublicParameters.classPK
 
      A                           P4 org/bouncycastle/crypto/parsers/PK     A \ac    :             4 org/bouncycastle/crypto/parsers/DHIESPublicKeyParser.classPK     A  /M    :             ؞4 org/bouncycastle/crypto/parsers/ECIESPublicKeyParser.classPK     A 9  0  9             4 org/bouncycastle/crypto/parsers/XIESPublicKeyParser.classPK
 
      A                          ɤ4 org/bouncycastle/crypto/prng/PK     A $|  $  ?             4 org/bouncycastle/crypto/prng/BasicEntropySourceProvider$1.classPK     A ֏sA  j  =             4 org/bouncycastle/crypto/prng/BasicEntropySourceProvider.classPK     A 6
      /             4 org/bouncycastle/crypto/prng/DRBGProvider.classPK     A b    8             4 org/bouncycastle/crypto/prng/DigestRandomGenerator.classPK     A       0             34 org/bouncycastle/crypto/prng/EntropySource.classPK     A BǸz      8             04 org/bouncycastle/crypto/prng/EntropySourceProvider.classPK     A ㉚  g  .             4 org/bouncycastle/crypto/prng/EntropyUtil.classPK     A 
Jn    4             4 org/bouncycastle/crypto/prng/FixedSecureRandom.classPK     A       2             ֶ4 org/bouncycastle/crypto/prng/RandomGenerator.classPK     A 6W    :             ӷ4 org/bouncycastle/crypto/prng/ReversedWindowGenerator.classPK     A a    4             4 org/bouncycastle/crypto/prng/SP800SecureRandom.classPK     A h	    K             4 org/bouncycastle/crypto/prng/SP800SecureRandomBuilder$CTRDRBGProvider.classPK     A B&;    L             4 org/bouncycastle/crypto/prng/SP800SecureRandomBuilder$HMacDRBGProvider.classPK     A 'i?F    L             4 org/bouncycastle/crypto/prng/SP800SecureRandomBuilder$HashDRBGProvider.classPK     A Xb  b  ;             4 org/bouncycastle/crypto/prng/SP800SecureRandomBuilder.classPK     A U2;      :             4 org/bouncycastle/crypto/prng/ThreadedSeedGenerator$1.classPK     A ./_    F             4 org/bouncycastle/crypto/prng/ThreadedSeedGenerator$SeedGenerator.classPK     A 1    8             4 org/bouncycastle/crypto/prng/ThreadedSeedGenerator.classPK     A K7  B
  6             4 org/bouncycastle/crypto/prng/VMPCRandomGenerator.classPK     A ƨ    *             R4 org/bouncycastle/crypto/prng/X931RNG.classPK     A .drkf    3             Z4 org/bouncycastle/crypto/prng/X931SecureRandom.classPK     A   B  :             !4 org/bouncycastle/crypto/prng/X931SecureRandomBuilder.classPK
 
      A             "             4 org/bouncycastle/crypto/prng/drbg/PK     A l,    4             4 org/bouncycastle/crypto/prng/drbg/CTRSP800DRBG.classPK     A Ih    4             k4 org/bouncycastle/crypto/prng/drbg/DualECPoints.classPK     A ]    7             ^4 org/bouncycastle/crypto/prng/drbg/DualECSP800DRBG.classPK     A eR  
  5              5 org/bouncycastle/crypto/prng/drbg/HMacSP800DRBG.classPK     A lǿ    5             5 org/bouncycastle/crypto/prng/drbg/HashSP800DRBG.classPK     A 1      3             05 org/bouncycastle/crypto/prng/drbg/SP80090DRBG.classPK     A $_  G  -             45 org/bouncycastle/crypto/prng/drbg/Utils.classPK
 
      A                           5 org/bouncycastle/crypto/signers/PK     A ;D  
  5             5 org/bouncycastle/crypto/signers/DSADigestSigner.classPK     A 
k   8  1             5 org/bouncycastle/crypto/signers/DSAEncoding.classPK     A 3~   0  4             #5 org/bouncycastle/crypto/signers/DSAKCalculator.classPK     A m  k  /             W5 org/bouncycastle/crypto/signers/DSASigner.classPK     A W)    4             !$5 org/bouncycastle/crypto/signers/DSTU4145Signer.classPK     A W    1             +5 org/bouncycastle/crypto/signers/ECCSISigner.classPK     A .  }  1             35 org/bouncycastle/crypto/signers/ECDSASigner.classPK     A S*    6             <5 org/bouncycastle/crypto/signers/ECGOST3410Signer.classPK     A 9ߚ      ;             C5 org/bouncycastle/crypto/signers/ECGOST3410_2012Signer.classPK     A 8~    0             D5 org/bouncycastle/crypto/signers/ECNRSigner.classPK     A       5             kL5 org/bouncycastle/crypto/signers/Ed25519Signer$1.classPK     A fSU    :             fM5 org/bouncycastle/crypto/signers/Ed25519Signer$Buffer.classPK     A h    3             #P5 org/bouncycastle/crypto/signers/Ed25519Signer.classPK     A +є      8             JT5 org/bouncycastle/crypto/signers/Ed25519ctxSigner$1.classPK     A hf ]    =             JU5 org/bouncycastle/crypto/signers/Ed25519ctxSigner$Buffer.classPK     A ;jO  1	  6             X5 org/bouncycastle/crypto/signers/Ed25519ctxSigner.classPK     A tk3  Y	  5             \5 org/bouncycastle/crypto/signers/Ed25519phSigner.classPK     A "(      3             ta5 org/bouncycastle/crypto/signers/Ed448Signer$1.classPK     A @hVX    8             kb5 org/bouncycastle/crypto/signers/Ed448Signer$Buffer.classPK     A Z@  	  1             )e5 org/bouncycastle/crypto/signers/Ed448Signer.classPK     A ΙQ  A	  3             i5 org/bouncycastle/crypto/signers/Ed448phSigner.classPK     A jU2  c  4             n5 org/bouncycastle/crypto/signers/GOST3410Signer.classPK     A T6FQ    3             t5 org/bouncycastle/crypto/signers/GenericSigner.classPK     A 5*  
  8             x5 org/bouncycastle/crypto/signers/HMacDSAKCalculator.classPK     A x]W
    8             }5 org/bouncycastle/crypto/signers/ISO9796d2PSSSigner.classPK     A G
    5             5 org/bouncycastle/crypto/signers/ISO9796d2Signer.classPK     A &qo  1  1             5 org/bouncycastle/crypto/signers/ISOTrailers.classPK     A + L	    /             ]5 org/bouncycastle/crypto/signers/PSSSigner.classPK     A fCt    6             5 org/bouncycastle/crypto/signers/PlainDSAEncoding.classPK     A CP	  v  5             x5 org/bouncycastle/crypto/signers/RSADigestSigner.classPK     A +E[}    :             5 org/bouncycastle/crypto/signers/RandomDSAKCalculator.classPK     A >p   i  5             y5 org/bouncycastle/crypto/signers/SM2Signer$State.classPK     A l҂    /             ׶5 org/bouncycastle/crypto/signers/SM2Signer.classPK     A O  n  9             N5 org/bouncycastle/crypto/signers/StandardDSAEncoding.classPK     A 
Ծ  <  +             5 org/bouncycastle/crypto/signers/Utils.classPK     A T  
  0             5 org/bouncycastle/crypto/signers/X931Signer.classPK
 
      A             "             5 org/bouncycastle/crypto/threshold/PK     A )mdx  )  2             75 org/bouncycastle/crypto/threshold/Polynomial.classPK     A ,H  \  :             5 org/bouncycastle/crypto/threshold/PolynomialNative$1.classPK     A 2G~  J  8             65 org/bouncycastle/crypto/threshold/PolynomialNative.classPK     A Lnc  Z  9             5 org/bouncycastle/crypto/threshold/PolynomialTable$1.classPK     A Q    7             =5 org/bouncycastle/crypto/threshold/PolynomialTable.classPK     A s      3             5 org/bouncycastle/crypto/threshold/SecretShare.classPK     A 0!     6             5 org/bouncycastle/crypto/threshold/SecretSplitter.classPK     A 6    F             5 org/bouncycastle/crypto/threshold/ShamirSecretSplitter$Algorithm.classPK     A O    A             S5 org/bouncycastle/crypto/threshold/ShamirSecretSplitter$Mode.classPK     A b  
  <             5 org/bouncycastle/crypto/threshold/ShamirSecretSplitter.classPK     A [c  	  9             5 org/bouncycastle/crypto/threshold/ShamirSplitSecret.classPK     A q٠P    >             >5 org/bouncycastle/crypto/threshold/ShamirSplitSecretShare.classPK     A QY      3             5 org/bouncycastle/crypto/threshold/SplitSecret.classPK
 
      A                          
 6 org/bouncycastle/crypto/tls/PK     A %i	  |  3             D 6 org/bouncycastle/crypto/tls/TlsRsaKeyExchange.classPK
 
      A                          O
6 org/bouncycastle/crypto/util/PK     A     =             
6 org/bouncycastle/crypto/util/AlgorithmIdentifierFactory.classPK     A @@J    6             6 org/bouncycastle/crypto/util/BasicAlphabetMapper.classPK     A 4  !  0             ~6 org/bouncycastle/crypto/util/CipherFactory.classPK     A i"r  
  <             &6 org/bouncycastle/crypto/util/CipherKeyGeneratorFactory.classPK     A P      /             h+6 org/bouncycastle/crypto/util/DERMacData$1.classPK     A ^@G    5             Y,6 org/bouncycastle/crypto/util/DERMacData$Builder.classPK     A     2             06 org/bouncycastle/crypto/util/DERMacData$Type.classPK     A Y,-\  n  -             036 org/bouncycastle/crypto/util/DERMacData.classPK     A 6      1             46 org/bouncycastle/crypto/util/DEROtherInfo$1.classPK     A xz  *  7             56 org/bouncycastle/crypto/util/DEROtherInfo$Builder.classPK     A :^^j    /             86 org/bouncycastle/crypto/util/DEROtherInfo.classPK     A #d?T    ,             :6 org/bouncycastle/crypto/util/DerUtil$1.classPK     A '+    *             [<6 org/bouncycastle/crypto/util/DerUtil.classPK     A 	&  7  2             >6 org/bouncycastle/crypto/util/DigestFactory$1.classPK     A &wH'  :  3             d@6 org/bouncycastle/crypto/util/DigestFactory$10.classPK     A u +  <  3             A6 org/bouncycastle/crypto/util/DigestFactory$11.classPK     A [1+  <  3             xC6 org/bouncycastle/crypto/util/DigestFactory$12.classPK     A \j:&  9  2             E6 org/bouncycastle/crypto/util/DigestFactory$2.classPK     A H,  =  2             F6 org/bouncycastle/crypto/util/DigestFactory$3.classPK     A >]7  \  2             H6 org/bouncycastle/crypto/util/DigestFactory$4.classPK     A *X,  =  2             I6 org/bouncycastle/crypto/util/DigestFactory$5.classPK     A 
,  =  2             9K6 org/bouncycastle/crypto/util/DigestFactory$6.classPK     A \&  9  2             L6 org/bouncycastle/crypto/util/DigestFactory$7.classPK     A 	
&  9  2             KN6 org/bouncycastle/crypto/util/DigestFactory$8.classPK     A n7&  9  2             O6 org/bouncycastle/crypto/util/DigestFactory$9.classPK     A Nߤ     7             WQ6 org/bouncycastle/crypto/util/DigestFactory$Cloner.classPK     A   r  0             _R6 org/bouncycastle/crypto/util/DigestFactory.classPK     A 1&b    5             W6 org/bouncycastle/crypto/util/JournaledAlgorithm.classPK     A @ܛ      ;             ^6 org/bouncycastle/crypto/util/JournalingSecureRandom$1.classPK     A <O1?  O  J             _6 org/bouncycastle/crypto/util/JournalingSecureRandom$TranscriptStream.classPK     A ʗ6!  :  9             >a6 org/bouncycastle/crypto/util/JournalingSecureRandom.classPK     A j_!
     8             e6 org/bouncycastle/crypto/util/OpenSSHPrivateKeyUtil.classPK     A ~S0    7             Ms6 org/bouncycastle/crypto/util/OpenSSHPublicKeyUtil.classPK     A O      1             {6 org/bouncycastle/crypto/util/PBKDF2Config$1.classPK     A IUn    7             |6 org/bouncycastle/crypto/util/PBKDF2Config$Builder.classPK     A _ӵ    /             6 org/bouncycastle/crypto/util/PBKDF2Config.classPK     A UE   ~  .             6 org/bouncycastle/crypto/util/PBKDFConfig.classPK     A ap4    '             k6 org/bouncycastle/crypto/util/Pack.classPK     A 8]b  !  4             6 org/bouncycastle/crypto/util/PrivateKeyFactory.classPK     A "M
  7  8             6 org/bouncycastle/crypto/util/PrivateKeyInfoFactory.classPK     A hA      5             6 org/bouncycastle/crypto/util/PublicKeyFactory$1.classPK     A R!    H             6 org/bouncycastle/crypto/util/PublicKeyFactory$DHAgreementConverter.classPK     A |&C  +	  K             6 org/bouncycastle/crypto/util/PublicKeyFactory$DHPublicNumberConverter.classPK     A \>%    @             46 org/bouncycastle/crypto/util/PublicKeyFactory$DSAConverter.classPK     A I3    A             6 org/bouncycastle/crypto/util/PublicKeyFactory$DSTUConverter.classPK     A 
÷    ?             ڲ6 org/bouncycastle/crypto/util/PublicKeyFactory$ECConverter.classPK     A Q    D             6 org/bouncycastle/crypto/util/PublicKeyFactory$Ed25519Converter.classPK     A 8rS    B              6 org/bouncycastle/crypto/util/PublicKeyFactory$Ed448Converter.classPK     A w    D             6 org/bouncycastle/crypto/util/PublicKeyFactory$ElGamalConverter.classPK     A *  ^  J             6 org/bouncycastle/crypto/util/PublicKeyFactory$GOST3410_2001Converter.classPK     A   b  J             6 org/bouncycastle/crypto/util/PublicKeyFactory$GOST3410_2012Converter.classPK     A 9"    @             u6 org/bouncycastle/crypto/util/PublicKeyFactory$RSAConverter.classPK     A zL    Q             6 org/bouncycastle/crypto/util/PublicKeyFactory$SubjectPublicKeyInfoConverter.classPK     A #א    C             6 org/bouncycastle/crypto/util/PublicKeyFactory$X25519Converter.classPK     A DO    A             6 org/bouncycastle/crypto/util/PublicKeyFactory$X448Converter.classPK     A     3             6 org/bouncycastle/crypto/util/PublicKeyFactory.classPK     A :Ĝq  .	  1             6 org/bouncycastle/crypto/util/RadixConverter.classPK     A zV=    ,             6 org/bouncycastle/crypto/util/SSHBuffer.classPK     A wY    -             ^6 org/bouncycastle/crypto/util/SSHBuilder.classPK     A ؂/  M  3             6 org/bouncycastle/crypto/util/SSHNamedCurves$1.classPK     A gvGb  k  3             6 org/bouncycastle/crypto/util/SSHNamedCurves$2.classPK     A 31    3             6 org/bouncycastle/crypto/util/SSHNamedCurves$3.classPK     A qYB
    3             I6 org/bouncycastle/crypto/util/SSHNamedCurves$4.classPK     A òĖ  	  1             6 org/bouncycastle/crypto/util/SSHNamedCurves.classPK     A ux'      1             6 org/bouncycastle/crypto/util/ScryptConfig$1.classPK     A   
  7             6 org/bouncycastle/crypto/util/ScryptConfig$Builder.classPK     A b^    /             6 org/bouncycastle/crypto/util/ScryptConfig.classPK     A v(V
    >             6 org/bouncycastle/crypto/util/SubjectPublicKeyInfoFactory.classPK
 
      A                          7 org/bouncycastle/i18n/PK     A  $  4  '             7 org/bouncycastle/i18n/ErrorBundle.classPK     A ac    (             \	7 org/bouncycastle/i18n/LocaleString.classPK     A p.#{    .             7 org/bouncycastle/i18n/LocalizedException.classPK     A 9    >             7 org/bouncycastle/i18n/LocalizedMessage$FilteredArguments.classPK     A 	    ,             7 org/bouncycastle/i18n/LocalizedMessage.classPK     A 0    )             7 org/bouncycastle/i18n/MessageBundle.classPK     A {W  z  1             ?7 org/bouncycastle/i18n/MissingEntryException.classPK     A ջ    &              7 org/bouncycastle/i18n/TextBundle.classPK
 
      A                           #7 org/bouncycastle/i18n/filter/PK     A ]~      )             ;#7 org/bouncycastle/i18n/filter/Filter.classPK     A >NSC  0  -             $7 org/bouncycastle/i18n/filter/HTMLFilter.classPK     A ц(#    ,             &7 org/bouncycastle/i18n/filter/SQLFilter.classPK     A }#n   w  /             +)7 org/bouncycastle/i18n/filter/TrustedInput.classPK     A 2p     1             }*7 org/bouncycastle/i18n/filter/UntrustedInput.classPK     A aRQ(      4             +7 org/bouncycastle/i18n/filter/UntrustedUrlInput.classPK
 
      A                          ,7 org/bouncycastle/iana/PK     A D{     )             
-7 org/bouncycastle/iana/AEADAlgorithm.classPK
 
      A                          /7 org/bouncycastle/internal/PK
 
      A                          /7 org/bouncycastle/internal/asn1/PK
 
      A             #             /7 org/bouncycastle/internal/asn1/bsi/PK     A H  L  =             707 org/bouncycastle/internal/asn1/bsi/BSIObjectIdentifiers.classPK
 
      A             #             37 org/bouncycastle/internal/asn1/cms/PK     A     6             37 org/bouncycastle/internal/asn1/cms/CCMParameters.classPK     A n,    =             r77 org/bouncycastle/internal/asn1/cms/CMSObjectIdentifiers.classPK     A &    6             :7 org/bouncycastle/internal/asn1/cms/GCMParameters.classPK
 
      A             (             .>7 org/bouncycastle/internal/asn1/cryptlib/PK     A 
^  Q  G             t>7 org/bouncycastle/internal/asn1/cryptlib/CryptlibObjectIdentifiers.classPK
 
      A             #             G@7 org/bouncycastle/internal/asn1/eac/PK     A q  M  =             @7 org/bouncycastle/internal/asn1/eac/EACObjectIdentifiers.classPK
 
      A             $             C7 org/bouncycastle/internal/asn1/edec/PK     A Q4    ?             D7 org/bouncycastle/internal/asn1/edec/EdECObjectIdentifiers.classPK
 
      A             #             E7 org/bouncycastle/internal/asn1/gnu/PK     A ~E    =             >F7 org/bouncycastle/internal/asn1/gnu/GNUObjectIdentifiers.classPK
 
      A             $             I7 org/bouncycastle/internal/asn1/iana/PK     A E˥  
  ?             0J7 org/bouncycastle/internal/asn1/iana/IANAObjectIdentifiers.classPK
 
      A             %             vO7 org/bouncycastle/internal/asn1/isara/PK     A .    A             O7 org/bouncycastle/internal/asn1/isara/IsaraObjectIdentifiers.classPK
 
      A             '             EQ7 org/bouncycastle/internal/asn1/isismtt/PK     A !"#	.    E             Q7 org/bouncycastle/internal/asn1/isismtt/ISISMTTObjectIdentifiers.classPK
 
      A             #             +U7 org/bouncycastle/internal/asn1/iso/PK     A ̩  @  @             lU7 org/bouncycastle/internal/asn1/iso/ISOIECObjectIdentifiers.classPK
 
      A             $             W7 org/bouncycastle/internal/asn1/kisa/PK     A Y^n  U  ?             X7 org/bouncycastle/internal/asn1/kisa/KISAObjectIdentifiers.classPK
 
      A             )             Y7 org/bouncycastle/internal/asn1/microsoft/PK     A !  H  I             &Z7 org/bouncycastle/internal/asn1/microsoft/MicrosoftObjectIdentifiers.classPK
 
      A             $             b\7 org/bouncycastle/internal/asn1/misc/PK     A P    <             \7 org/bouncycastle/internal/asn1/misc/CAST5CBCParameters.classPK     A 7  V  4             _7 org/bouncycastle/internal/asn1/misc/IDEACBCPar.classPK     A  j1	  <  ?             b7 org/bouncycastle/internal/asn1/misc/MiscObjectIdentifiers.classPK     A 0sl  [  :             l7 org/bouncycastle/internal/asn1/misc/NetscapeCertType.classPK     A ,rD  -  ?             o7 org/bouncycastle/internal/asn1/misc/NetscapeRevocationURL.classPK     A Bu  
  6             |q7 org/bouncycastle/internal/asn1/misc/ScryptParams.classPK     A &gD  -  ?             v7 org/bouncycastle/internal/asn1/misc/VerisignCzagExtension.classPK
 
      A             $             4x7 org/bouncycastle/internal/asn1/nsri/PK     A  ^  {	  ?             vx7 org/bouncycastle/internal/asn1/nsri/NSRIObjectIdentifiers.classPK
 
      A             #             |7 org/bouncycastle/internal/asn1/ntt/PK     A g|    =              }7 org/bouncycastle/internal/asn1/ntt/NTTObjectIdentifiers.classPK
 
      A             #             7 org/bouncycastle/internal/asn1/oiw/PK     A XVI`    9             H7 org/bouncycastle/internal/asn1/oiw/ElGamalParameter.classPK     A ܕ    =             7 org/bouncycastle/internal/asn1/oiw/OIWObjectIdentifiers.classPK
 
      A             +             ~7 org/bouncycastle/internal/asn1/rosstandart/PK     A @O    M             Ǆ7 org/bouncycastle/internal/asn1/rosstandart/RosstandartObjectIdentifiers.classPK
 
      A                          67 org/bouncycastle/jcajce/PK     A 6      7             l7 org/bouncycastle/jcajce/BCFKSLoadStoreParameter$1.classPK     A C9    =             j7 org/bouncycastle/jcajce/BCFKSLoadStoreParameter$Builder.classPK     A O     H             7 org/bouncycastle/jcajce/BCFKSLoadStoreParameter$CertChainValidator.classPK     A )    I              7 org/bouncycastle/jcajce/BCFKSLoadStoreParameter$EncryptionAlgorithm.classPK     A ;0:2"    B             7 org/bouncycastle/jcajce/BCFKSLoadStoreParameter$MacAlgorithm.classPK     A Z܈    H             R7 org/bouncycastle/jcajce/BCFKSLoadStoreParameter$SignatureAlgorithm.classPK     A V  H  5             P7 org/bouncycastle/jcajce/BCFKSLoadStoreParameter.classPK     A }4    1             t7 org/bouncycastle/jcajce/BCFKSStoreParameter.classPK     A k  t  2             ؟7 org/bouncycastle/jcajce/BCLoadStoreParameter.classPK     A 1ĕ      3             ݢ7 org/bouncycastle/jcajce/CompositePrivateKey$1.classPK     A {٤   	  9             ӣ7 org/bouncycastle/jcajce/CompositePrivateKey$Builder.classPK     A U  D  1             Z7 org/bouncycastle/jcajce/CompositePrivateKey.classPK     A LL}      2             x7 org/bouncycastle/jcajce/CompositePublicKey$1.classPK     A }<     8             m7 org/bouncycastle/jcajce/CompositePublicKey$Builder.classPK     A D]u	    0             7 org/bouncycastle/jcajce/CompositePublicKey.classPK     A u/r    +             7 org/bouncycastle/jcajce/CompositeUtil.classPK     A 13"    /             7 org/bouncycastle/jcajce/ExternalPublicKey.classPK     A ̻3    2             7 org/bouncycastle/jcajce/MLDSAProxyPrivateKey.classPK     A $k  $  '             7 org/bouncycastle/jcajce/PBKDF1Key.classPK     A 7R^  ;  5             7 org/bouncycastle/jcajce/PBKDF1KeyWithParameters.classPK     A ]Fo    '             m7 org/bouncycastle/jcajce/PBKDF2Key.classPK     A u^  ;  5             {7 org/bouncycastle/jcajce/PBKDF2KeyWithParameters.classPK     A \n   r   &             <7 org/bouncycastle/jcajce/PBKDFKey.classPK     A |  O  '             7 org/bouncycastle/jcajce/PKCS12Key.classPK     A i  -  5             l7 org/bouncycastle/jcajce/PKCS12KeyWithParameters.classPK     A J\    2             87 org/bouncycastle/jcajce/PKCS12StoreParameter.classPK     A @     *             7 org/bouncycastle/jcajce/PKIXCRLStore.classPK     A ^S\      4             @7 org/bouncycastle/jcajce/PKIXCRLStoreSelector$1.classPK     A o0  D  :             :7 org/bouncycastle/jcajce/PKIXCRLStoreSelector$Builder.classPK     A .;g    @             7 org/bouncycastle/jcajce/PKIXCRLStoreSelector$SelectorClone.classPK     A K	    2             z7 org/bouncycastle/jcajce/PKIXCRLStoreSelector.classPK     A k     7             7 org/bouncycastle/jcajce/PKIXCertRevocationChecker.classPK     A ?    A             77 org/bouncycastle/jcajce/PKIXCertRevocationCheckerParameters.classPK     A      +             7 org/bouncycastle/jcajce/PKIXCertStore.classPK     A w.      5             57 org/bouncycastle/jcajce/PKIXCertStoreSelector$1.classPK     A Qxjw  8  ;             /7 org/bouncycastle/jcajce/PKIXCertStoreSelector$Builder.classPK     A 
L  
  A             7 org/bouncycastle/jcajce/PKIXCertStoreSelector$SelectorClone.classPK     A FNHu    3             o7 org/bouncycastle/jcajce/PKIXCertStoreSelector.classPK     A S֞      =             7 org/bouncycastle/jcajce/PKIXExtendedBuilderParameters$1.classPK     A Q  m	  C             7 org/bouncycastle/jcajce/PKIXExtendedBuilderParameters$Builder.classPK     A b  V  ;             8 org/bouncycastle/jcajce/PKIXExtendedBuilderParameters.classPK     A EJ      6             Y8 org/bouncycastle/jcajce/PKIXExtendedParameters$1.classPK     A   S  <             U8 org/bouncycastle/jcajce/PKIXExtendedParameters$Builder.classPK     A +    4             8 org/bouncycastle/jcajce/PKIXExtendedParameters.classPK     A f{T  !  8             8 org/bouncycastle/jcajce/SecretKeyWithEncapsulation.classPK
 
      A             #             :8 org/bouncycastle/jcajce/interfaces/PK     A R6Y   \   .             {8 org/bouncycastle/jcajce/interfaces/BCKey.classPK     A ν     :             08 org/bouncycastle/jcajce/interfaces/BCX509Certificate.classPK     A s   x   1             U8 org/bouncycastle/jcajce/interfaces/EdDSAKey.classPK     A ј     8             '8 org/bouncycastle/jcajce/interfaces/EdDSAPrivateKey.classPK     A l      7             /8 org/bouncycastle/jcajce/interfaces/EdDSAPublicKey.classPK     A       1             48 org/bouncycastle/jcajce/interfaces/MLDSAKey.classPK     A #c3     8             ,8 org/bouncycastle/jcajce/interfaces/MLDSAPrivateKey.classPK     A 67      7             d8 org/bouncycastle/jcajce/interfaces/MLDSAPublicKey.classPK     A z7      1             d8 org/bouncycastle/jcajce/interfaces/MLKEMKey.classPK     A i     8             [8 org/bouncycastle/jcajce/interfaces/MLKEMPrivateKey.classPK     A c      7              8 org/bouncycastle/jcajce/interfaces/MLKEMPublicKey.classPK     A 1ԫ      2             !8 org/bouncycastle/jcajce/interfaces/SLHDSAKey.classPK     A <KBE     9             "8 org/bouncycastle/jcajce/interfaces/SLHDSAPrivateKey.classPK     A k^      8             #8 org/bouncycastle/jcajce/interfaces/SLHDSAPublicKey.classPK     A m7Yp   v   /             $8 org/bouncycastle/jcajce/interfaces/XDHKey.classPK     A ww     6             g%8 org/bouncycastle/jcajce/interfaces/XDHPrivateKey.classPK     A $wh      5             i&8 org/bouncycastle/jcajce/interfaces/XDHPublicKey.classPK
 
      A                          '8 org/bouncycastle/jcajce/io/PK     A l    2             '8 org/bouncycastle/jcajce/io/CipherInputStream.classPK     A +    3             ,8 org/bouncycastle/jcajce/io/CipherOutputStream.classPK     A סuO  /  ;             08 org/bouncycastle/jcajce/io/DigestUpdatingOutputStream.classPK     A >0%O    0             18 org/bouncycastle/jcajce/io/MacOutputStream.classPK     A +F    8             ~38 org/bouncycastle/jcajce/io/MacUpdatingOutputStream.classPK     A Ҁ<I    4             *58 org/bouncycastle/jcajce/io/OutputStreamFactory.classPK     A ^  o  >             68 org/bouncycastle/jcajce/io/SignatureUpdatingOutputStream.classPK
 
      A             !             *98 org/bouncycastle/jcajce/provider/PK
 
      A             ,             i98 org/bouncycastle/jcajce/provider/asymmetric/PK     A +$    F             98 org/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$KeyFactory.classPK     A &r    D             K=8 org/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$Mappings.classPK     A e  c  ;             @8 org/bouncycastle/jcajce/provider/asymmetric/COMPOSITE.classPK     A T    W             C8 org/bouncycastle/jcajce/provider/asymmetric/CONTEXT$ContextAlgorithmParametersSpi.classPK     A M,_    B             $G8 org/bouncycastle/jcajce/provider/asymmetric/CONTEXT$Mappings.classPK     A n&/  	  9             H8 org/bouncycastle/jcajce/provider/asymmetric/CONTEXT.classPK     A 5  >	  N             J8 org/bouncycastle/jcajce/provider/asymmetric/CompositeSignatures$Mappings.classPK     A |    E             N8 org/bouncycastle/jcajce/provider/asymmetric/CompositeSignatures.classPK     A sJ    =             
Q8 org/bouncycastle/jcajce/provider/asymmetric/DH$Mappings.classPK     A P    4             <W8 org/bouncycastle/jcajce/provider/asymmetric/DH.classPK     A t|v    >             Y8 org/bouncycastle/jcajce/provider/asymmetric/DSA$Mappings.classPK     A kc
B  ~  5             ;`8 org/bouncycastle/jcajce/provider/asymmetric/DSA.classPK     A B    C             a8 org/bouncycastle/jcajce/provider/asymmetric/DSTU4145$Mappings.classPK     A @$    :             e8 org/bouncycastle/jcajce/provider/asymmetric/DSTU4145.classPK     A k&    D             tf8 org/bouncycastle/jcajce/provider/asymmetric/Dilithium$Mappings.classPK     A p    ;             j8 org/bouncycastle/jcajce/provider/asymmetric/Dilithium.classPK     A &K  Q  =             zk8 org/bouncycastle/jcajce/provider/asymmetric/EC$Mappings.classPK     A 1h  
  4             }8 org/bouncycastle/jcajce/provider/asymmetric/EC.classPK     A     A             a8 org/bouncycastle/jcajce/provider/asymmetric/ECGOST$Mappings.classPK     A N7  :  8             w8 org/bouncycastle/jcajce/provider/asymmetric/ECGOST.classPK     A 7<g  ;  S             8 org/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$ExternalKeyInfoConverter.classPK     A bl&    E             8 org/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$KeyFactory.classPK     A ,jXU  n  C             8 org/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$Mappings.classPK     A Sh    :             8 org/bouncycastle/jcajce/provider/asymmetric/EXTERNAL.classPK     A Hh    ?             `8 org/bouncycastle/jcajce/provider/asymmetric/EdEC$Mappings.classPK     A .X  Y  6             N8 org/bouncycastle/jcajce/provider/asymmetric/EdEC.classPK     A ͦ#  
	  B             8 org/bouncycastle/jcajce/provider/asymmetric/ElGamal$Mappings.classPK     A - )    9             8 org/bouncycastle/jcajce/provider/asymmetric/ElGamal.classPK     A O-Č  
  A             8 org/bouncycastle/jcajce/provider/asymmetric/Falcon$Mappings.classPK     A ,o    8             8 org/bouncycastle/jcajce/provider/asymmetric/Falcon.classPK     A ͪ    =             8 org/bouncycastle/jcajce/provider/asymmetric/GM$Mappings.classPK     A 
:  Z  4             8 org/bouncycastle/jcajce/provider/asymmetric/GM.classPK     A l  
  ?             88 org/bouncycastle/jcajce/provider/asymmetric/GOST$Mappings.classPK     A _
v    6             *8 org/bouncycastle/jcajce/provider/asymmetric/GOST.classPK     A b3#d    >             8 org/bouncycastle/jcajce/provider/asymmetric/IES$Mappings.classPK     A t  ~  5             a8 org/bouncycastle/jcajce/provider/asymmetric/IES.classPK     A 6j  ]  >             Ż8 org/bouncycastle/jcajce/provider/asymmetric/LMS$Mappings.classPK     A 8\R  w  5             8 org/bouncycastle/jcajce/provider/asymmetric/LMS.classPK     A Tu    @             8 org/bouncycastle/jcajce/provider/asymmetric/MLDSA$Mappings.classPK     A J[    7             +8 org/bouncycastle/jcajce/provider/asymmetric/MLDSA.classPK     A w  D  @             8 org/bouncycastle/jcajce/provider/asymmetric/MLKEM$Mappings.classPK     A 0p    7             8 org/bouncycastle/jcajce/provider/asymmetric/MLKEM.classPK     A w:    ?             N8 org/bouncycastle/jcajce/provider/asymmetric/NTRU$Mappings.classPK     A   z  6             8 org/bouncycastle/jcajce/provider/asymmetric/NTRU.classPK     A ?%N#  "  @             \8 org/bouncycastle/jcajce/provider/asymmetric/NoSig$Mappings.classPK     A |  z  >             8 org/bouncycastle/jcajce/provider/asymmetric/NoSig$SigSpi.classPK     A ?c    7             J8 org/bouncycastle/jcajce/provider/asymmetric/NoSig.classPK     A @w"  E  >             8 org/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings.classPK     A [rϔ    5             8 org/bouncycastle/jcajce/provider/asymmetric/RSA.classPK     A WNp  '  A             y8 org/bouncycastle/jcajce/provider/asymmetric/SLHDSA$Mappings.classPK     A m(h    8             8 org/bouncycastle/jcajce/provider/asymmetric/SLHDSA.classPK     A b
    F             68 org/bouncycastle/jcajce/provider/asymmetric/SPHINCSPlus$Mappings.classPK     A 0l}    =             8 org/bouncycastle/jcajce/provider/asymmetric/SPHINCSPlus.classPK     A   d  ?             18 org/bouncycastle/jcajce/provider/asymmetric/X509$Mappings.classPK     A w     6             :9 org/bouncycastle/jcajce/provider/asymmetric/X509.classPK
 
      A             @             \9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/PK     A !	    T             9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/CompositeIndex.classPK     A H`[  .  S             ]9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyFactorySpi.classPK     A *  *  s             99 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA44_ECDSA_P256_SHA256.classPK     A 0)  !  p              9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA44_Ed25519_SHA512.classPK     A 2  6  w             !9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA44_RSA2048_PKCS15_SHA256.classPK     A oDXF/  -  t             #9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA44_RSA2048_PSS_SHA256.classPK     A a-,  *  s             s%9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_ECDSA_P256_SHA512.classPK     A  o,  *  s             @'9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_ECDSA_P384_SHA512.classPK     A Ue2  K  ~             
)9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_ECDSA_brainpoolP256r1_SHA512.classPK     A DT])  !  p             *9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_Ed25519_SHA512.classPK     A !q2  6  w             ,9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_RSA3072_PKCS15_SHA512.classPK     A .  -  t             .9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_RSA3072_PSS_SHA512.classPK     A A2  6  w             Y09 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_RSA4096_PKCS15_SHA512.classPK     A 1}Ƿ.  -  t             029 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA65_RSA4096_PSS_SHA512.classPK     A wBe,  *  s              49 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_ECDSA_P384_SHA512.classPK     A $g,  *  s             59 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_ECDSA_P521_SHA512.classPK     A 2  K  ~             79 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_ECDSA_brainpoolP384r1_SHA512.classPK     A Ǣ^)  !  p             x99 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_Ed448_SHAKE256.classPK     A n&.  -  t             ?;9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_RSA3072_PSS_SHA512.classPK     A L{/  -  t             =9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi$MLDSA87_RSA4096_PSS_SHA512.classPK     A k]w    Y             >9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/KeyPairGeneratorSpi.classPK     A ^W     T             4F9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$1.classPK     A Oz     \             `G9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$COMPOSITE.classPK     A v1    g             H9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$ErasableOutputStream.classPK     A K    l             yJ9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_ECDSA_P256_SHA256.classPK     A R_V    t             ^L9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_ECDSA_P256_SHA256_PREHASH.classPK     A ͙J  v  i             VN9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_Ed25519_SHA512.classPK     A mAV    q             7P9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_Ed25519_SHA512_PREHASH.classPK     A WT    p             ,R9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_RSA2048_PKCS15_SHA256.classPK     A ^    x             T9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_RSA2048_PKCS15_SHA256_PREHASH.classPK     A x/P    m             "V9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_RSA2048_PSS_SHA256.classPK     A =[    u             
X9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA44_RSA2048_PSS_SHA256_PREHASH.classPK     A sqM    l             Z9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_P256_SHA512.classPK     A 
WqW    t             [9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_P256_SHA512_PREHASH.classPK     A 4AM    l             ]9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_P384_SHA512.classPK     A sX    t             _9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_P384_SHA512_PREHASH.classPK     A zVT    w             a9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_brainpoolP256r1_SHA512.classPK     A An^                 c9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_ECDSA_brainpoolP256r1_SHA512_PREHASH.classPK     A xJ  v  i             e9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_Ed25519_SHA512.classPK     A 1b&W    q             g9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_Ed25519_SHA512_PREHASH.classPK     A `T    p             i9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA3072_PKCS15_SHA512.classPK     A B$^    x             k9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA3072_PKCS15_SHA512_PREHASH.classPK     A P    m             m9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA3072_PSS_SHA512.classPK     A )~Z    u             o9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA3072_PSS_SHA512_PREHASH.classPK     A Qm[S    p             q9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA4096_PKCS15_SHA512.classPK     A 3z]    x             vs9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA4096_PKCS15_SHA512_PREHASH.classPK     A Y>.P    m             yu9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA4096_PSS_SHA512.classPK     A p9Z    u             dw9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA65_RSA4096_PSS_SHA512_PREHASH.classPK     A ;,>M    l             ay9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_P384_SHA512.classPK     A 2X    t             H{9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_P384_SHA512_PREHASH.classPK     A +bM    l             B}9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_P521_SHA512.classPK     A ?W    t             )9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_P521_SHA512_PREHASH.classPK     A H{5U    w             "9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_brainpoolP384r1_SHA512.classPK     A ,^                 9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_ECDSA_brainpoolP384r1_SHA512_PREHASH.classPK     A dM?*S    i             '9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_Ed448_SHAKE256.classPK     A PTz=_    q             9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_Ed448_SHAKE256_PREHASH.classPK     A  P    m             9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_RSA3072_PSS_SHA512.classPK     A o[    u             9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_RSA3072_PSS_SHA512_PREHASH.classPK     A E<P    m             9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_RSA4096_PSS_SHA512.classPK     A 63{Z    u             9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$MLDSA87_RSA4096_PSS_SHA512_PREHASH.classPK     A 3    w             9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$NullDigest$OpenByteArrayOutputStream.classPK     A     ]             R9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi$NullDigest.classPK     A x  J  R             9 org/bouncycastle/jcajce/provider/asymmetric/compositesignatures/SignatureSpi.classPK
 
      A             /             .9 org/bouncycastle/jcajce/provider/asymmetric/dh/PK     A ,  W  S             {9 org/bouncycastle/jcajce/provider/asymmetric/dh/AlgorithmParameterGeneratorSpi.classPK     A >  
  K             ϲ9 org/bouncycastle/jcajce/provider/asymmetric/dh/AlgorithmParametersSpi.classPK     A 5x
     C             9 org/bouncycastle/jcajce/provider/asymmetric/dh/BCDHPrivateKey.classPK     A 𨁹  m  B             9 org/bouncycastle/jcajce/provider/asymmetric/dh/BCDHPublicKey.classPK     A U    ;             U9 org/bouncycastle/jcajce/provider/asymmetric/dh/DHUtil.classPK     A v    @             [9 org/bouncycastle/jcajce/provider/asymmetric/dh/IESCipher$1.classPK     A r<  D  B             9 org/bouncycastle/jcajce/provider/asymmetric/dh/IESCipher$IES.classPK     A 6f$    L             9 org/bouncycastle/jcajce/provider/asymmetric/dh/IESCipher$IESwithAESCBC.classPK     A 뭁    O             H9 org/bouncycastle/jcajce/provider/asymmetric/dh/IESCipher$IESwithDESedeCBC.classPK     A ]T  n%  >             9 org/bouncycastle/jcajce/provider/asymmetric/dh/IESCipher.classPK     A &s    T             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA1CKDF.classPK     A n    S             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA1KDF.classPK     A >Ti{    V             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA224CKDF.classPK     A /C?t    U             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA224KDF.classPK     A 2~$    V             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA256CKDF.classPK     A #u    U             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA256KDF.classPK     A Ye}    V             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA384CKDF.classPK     A xϩu    U             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA384KDF.classPK     A bl|    V             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA512CKDF.classPK     A ?t    U             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHUwithSHA512KDF.classPK     A ¶T  K  U             9 org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithRFC2631KDF.classPK     A nS  R  S             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA1CKDF.classPK     A ŸS  W  R             j: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA1KDF.classPK     A  5U  X  U             =: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA224CKDF.classPK     A V  _  T             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA224KDF.classPK     A RouV  X  U             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA256CKDF.classPK     A 7V  _  T             
: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA256KDF.classPK     A 0V  X  U             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA384CKDF.classPK     A O  L  T             w: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA384KDF.classPK     A V  X  U             H: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA512CKDF.classPK     A tOIO  L  T             !: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$DHwithSHA512KDF.classPK     A 1 t    T             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA1CKDF.classPK     A Wn    S             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA1KDF.classPK     A ew    V             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA224CKDF.classPK     A ٿRs    U             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA224KDF.classPK     A qxw    V             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA256CKDF.classPK     A As    U             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA256KDF.classPK     A Ba6w    V             : org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA384CKDF.classPK     A -s    U             !: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA384KDF.classPK     A !jv    V             #: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA512CKDF.classPK     A w
s    U             %: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi$MQVwithSHA512KDF.classPK     A 7A0
  M,  D             ': org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi.classPK     A     B             5: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyFactorySpi.classPK     A b  E  H             ;: org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi.classPK
 
      A             0             C: org/bouncycastle/jcajce/provider/asymmetric/dsa/PK     A 1dW  (  T             VC: org/bouncycastle/jcajce/provider/asymmetric/dsa/AlgorithmParameterGeneratorSpi.classPK     A УXC  
  L             H: org/bouncycastle/jcajce/provider/asymmetric/dsa/AlgorithmParametersSpi.classPK     A jC    E             iN: org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPrivateKey.classPK     A ?!    D             V: org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey.classPK     A >K	G    F             _: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSA.classPK     A L    I             a: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSA224.classPK     A ժw
M    I             fc: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSA256.classPK     A UM    I             *e: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSA384.classPK     A P}`xM    I             f: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSA512.classPK     A *WR    N             h: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSASha3_224.classPK     A $S    N             j: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSASha3_256.classPK     A @LwS    N             Ol: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSASha3_384.classPK     A S    N             n: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$detDSASha3_512.classPK     A OV    F             o: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsa224.classPK     A u    F             |q: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsa256.classPK     A  %    F             s: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsa384.classPK     A 3	    F             t: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsa512.classPK     A >    I             ,v: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsaRMD160.classPK     A N    K             w: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsaSha3_224.classPK     A      K             By: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsaSha3_256.classPK     A 3B    K             z: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsaSha3_384.classPK     A u     K             s|: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$dsaSha3_512.classPK     A     G             ~: org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$noneDSA.classPK     A '    F             : org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner$stdDSA.classPK     A l(  T  ?             : org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.classPK     A E캢    =             : org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.classPK     A 0N  "  E             : org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi$1.classPK     A hn  T  C             : org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi.classPK     A i~    I             &: org/bouncycastle/jcajce/provider/asymmetric/dsa/KeyPairGeneratorSpi.classPK
 
      A             1             :: org/bouncycastle/jcajce/provider/asymmetric/dstu/PK     A Q^  3  K             : org/bouncycastle/jcajce/provider/asymmetric/dstu/BCDSTU4145PrivateKey.classPK     A NP  50  J             `: org/bouncycastle/jcajce/provider/asymmetric/dstu/BCDSTU4145PublicKey.classPK     A S    D             (: org/bouncycastle/jcajce/provider/asymmetric/dstu/KeyFactorySpi.classPK     A  #V    J             : org/bouncycastle/jcajce/provider/asymmetric/dstu/KeyPairGeneratorSpi.classPK     A vF    C             : org/bouncycastle/jcajce/provider/asymmetric/dstu/SignatureSpi.classPK     A 
B    E             : org/bouncycastle/jcajce/provider/asymmetric/dstu/SignatureSpiLe.classPK
 
      A             /             : org/bouncycastle/jcajce/provider/asymmetric/ec/PK     A r  A  K             !: org/bouncycastle/jcajce/provider/asymmetric/ec/AlgorithmParametersSpi.classPK     A   -  C             : org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.classPK     A 1'F
  '  B             _: org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPublicKey.classPK     A Č    <             ; org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtils.classPK     A <C    U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$ErasableOutputStream.classPK     A au   q  D             Y; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2.classPK     A OM    O             ; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withBlake2b.classPK     A ,h    O             I; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withBlake2s.classPK     A Vkm    K             ; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withMD5.classPK     A AM    K             m; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withRMD.classPK     A *:    L              ; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withSha1.classPK     A u}Y    N             ; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withSha224.classPK     A \0  $  N             #; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withSha256.classPK     A lH}    N             ; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withSha384.classPK     A g    N             c; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withSha512.classPK     A Y-    Q             ; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi$SM2withWhirlpool.classPK     A h"
    @             ; org/bouncycastle/jcajce/provider/asymmetric/ec/GMCipherSpi.classPK     A Uq
    R             *; org/bouncycastle/jcajce/provider/asymmetric/ec/GMKeyPairGeneratorSpi$BaseSM2.classPK     A Q/  k  N             5; org/bouncycastle/jcajce/provider/asymmetric/ec/GMKeyPairGeneratorSpi$SM2.classPK     A 0     J             6; org/bouncycastle/jcajce/provider/asymmetric/ec/GMKeyPairGeneratorSpi.classPK     A %f0  *  Q             !8; org/bouncycastle/jcajce/provider/asymmetric/ec/GMSignatureSpi$sha256WithSM2.classPK     A If     N             9; org/bouncycastle/jcajce/provider/asymmetric/ec/GMSignatureSpi$sm3WithSM2.classPK     A 
    C             8;; org/bouncycastle/jcajce/provider/asymmetric/ec/GMSignatureSpi.classPK     A     @             A; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$1.classPK     A QW@    D             C; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIES.classPK     A ]?    N             F; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithAESCBC.classPK     A 杝    N             G; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithCipher.classPK     A 3`;    Q             KJ; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithDESedeCBC.classPK     A   "  N             L; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA256.classPK     A S~    W             M; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA256andAESCBC.classPK     A $y  ]  Z             O; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA256andDESedeCBC.classPK     A ٣  "  N             Q; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA384.classPK     A P    W             )S; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA384andAESCBC.classPK     A ay  ]  Z             -U; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA384andDESedeCBC.classPK     A /Qs  "  N             .W; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA512.classPK     A ,~    W             X; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA512andAESCBC.classPK     A 0y  ]  Z             Z; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher$ECIESwithSHA512andDESedeCBC.classPK     A Ֆ  =*  >             \; org/bouncycastle/jcajce/provider/asymmetric/ec/IESCipher.classPK     A EP    C             l; org/bouncycastle/jcajce/provider/asymmetric/ec/IESKEMCipher$1.classPK     A IaPM    E             o; org/bouncycastle/jcajce/provider/asymmetric/ec/IESKEMCipher$KEM.classPK     A Wh  )  O             p; org/bouncycastle/jcajce/provider/asymmetric/ec/IESKEMCipher$KEMwithSHA256.classPK     A L  %  A             xr; org/bouncycastle/jcajce/provider/asymmetric/ec/IESKEMCipher.classPK     A /2    F             m; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$1.classPK     A |^bC~    `             }; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$CDHwithSHA1KDFAndSharedInfo.classPK     A S    b             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$CDHwithSHA224KDFAndSharedInfo.classPK     A t    b             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$CDHwithSHA256KDFAndSharedInfo.classPK     A Rl    b             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$CDHwithSHA384KDFAndSharedInfo.classPK     A nn    b             Ռ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$CDHwithSHA512KDFAndSharedInfo.classPK     A 
    G             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DH.classPK     A f    H             p; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHC.classPK     A ٩    I             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUC.classPK     A e"Y    T             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA1CKDF.classPK     A c(    S             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA1KDF.classPK     A 9B,    V             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA224CKDF.classPK     A     U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA224KDF.classPK     A 1
    V             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA256CKDF.classPK     A u    U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA256KDF.classPK     A m'4    V             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA384CKDF.classPK     A S\8b    U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA384KDF.classPK     A M9X    V             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA512CKDF.classPK     A 1i     U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHUwithSHA512KDF.classPK     A 9_0 v    S             ħ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA1CKDF.classPK     A ̨t    R             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA1KDF.classPK     A 3    _             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA1KDFAndSharedInfo.classPK     A 2
*    a             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA224KDFAndSharedInfo.classPK     A ==    U             կ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA256CKDF.classPK     A ML    a             ٱ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA256KDFAndSharedInfo.classPK     A n    U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA384CKDF.classPK     A ۴    a             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA384KDFAndSharedInfo.classPK     A yx    U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA512CKDF.classPK     A Fbc    a             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$DHwithSHA512KDFAndSharedInfo.classPK     A Qg    [             '; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithRIPEMD160KDF.classPK     A .q    V             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithSHA1KDF.classPK     A eu    X             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithSHA224KDF.classPK     A ǹv    X             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithSHA256KDF.classPK     A v    X             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithSHA384KDF.classPK     A Cqv    X             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$ECKAEGwithSHA512KDF.classPK     A N    H             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQV.classPK     A Mw    T             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA1CKDF.classPK     A r    S             y; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA1KDF.classPK     A     `             l; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA1KDFAndSharedInfo.classPK     A %^X    V             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA224CKDF.classPK     A `u    U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA224KDF.classPK     A -
݊    b             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA224KDFAndSharedInfo.classPK     A Gߐ    V             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA256CKDF.classPK     A ylv    U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA256KDF.classPK     A yV    b             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA256KDFAndSharedInfo.classPK     A     V             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA384CKDF.classPK     A ?v    U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA384KDF.classPK     A a    b             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA384KDFAndSharedInfo.classPK     A yb    V             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA512CKDF.classPK     A E7v    U             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA512KDF.classPK     A u\    b             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi$MQVwithSHA512KDFAndSharedInfo.classPK     A l\
  0  D             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.classPK     A     E             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$EC.classPK     A +-    G             o; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECDH.classPK     A >q=    H             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECDHC.classPK     A     H             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECDSA.classPK     A  w    M             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECGOST3410.classPK     A c2k&  !  R             ; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECGOST3410_2012.classPK     A "    H             D; org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECMQV.classPK     A Q  %  B              < org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.classPK     A v`
  x  K             O
< org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$EC.classPK     A ot-  ]  M             (< org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDH.classPK     A -  _  N             < org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDHC.classPK     A =e.  _  N             y< org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECDSA.classPK     A [,  _  N             #< org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi$ECMQV.classPK     A Ec    H             < org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.classPK     A kT    J             ] < org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA.classPK     A /!X    M             )"< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA224.classPK     A Y    M             #< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA256.classPK     A Z    M             %< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA384.classPK     A 8 3Y    O             '< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA3_224.classPK     A l[    O             {)< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA3_256.classPK     A ͝[    O             S+< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA3_384.classPK     A =Z    O             +-< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA3_512.classPK     A Y    M             /< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecCVCDSA512.classPK     A ~S    G             0< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSA.classPK     A 2X    J             2< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSA224.classPK     A ڧ7Y    J             n4< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSA256.classPK     A |Y    J             ?6< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSA384.classPK     A ޻Y    J             8< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSA512.classPK     A ɾK    P             9< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSARipeMD160.classPK     A ɊD"\    O             ;< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSASha3_224.classPK     A {In\    O             =< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSASha3_256.classPK     A T\    O             \?< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSASha3_384.classPK     A x8[    O             5A< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSASha3_512.classPK     A z  O  O             
C< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSAShake128.classPK     A (v  O  O             E< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSAShake256.classPK     A FA    K             
G< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDSAnone.classPK     A 0JB  a  J             H< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSA.classPK     A vaJP  i  M             J< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSA224.classPK     A 36^u  i  M             L< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSA256.classPK     A (ݗx  i  M             N< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSA384.classPK     A £g  i  M             P< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSA512.classPK     A P  u  R             R< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSASha3_224.classPK     A 6  u  R             
U< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSASha3_256.classPK     A $  u  R             W< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSASha3_384.classPK     A E  u  R             *Y< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecDetDSASha3_512.classPK     A n	R    F             :[< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecNR.classPK     A $<V    I              ]< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecNR224.classPK     A Zd,W    I             ^< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecNR256.classPK     A =[W    I             `< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecNR384.classPK     A j0W    I             ib< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecNR512.classPK     A EMyH    Q             7d< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi$ecPlainDSARP160.classPK     A 7    A             e< org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.classPK
 
      A             3             k< org/bouncycastle/jcajce/provider/asymmetric/ecgost/PK     A (X  1  O             k< org/bouncycastle/jcajce/provider/asymmetric/ecgost/BCECGOST3410PrivateKey.classPK     A "o  ,  N             }< org/bouncycastle/jcajce/provider/asymmetric/ecgost/BCECGOST3410PublicKey.classPK     A <    J             < org/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyAgreementSpi$1.classPK     A i!@  O  N             < org/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyAgreementSpi$ECVKO.classPK     A w
C    H             f< org/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyAgreementSpi.classPK     A %  A  F             < org/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyFactorySpi.classPK     A "nDe	  S  L             F< org/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyPairGeneratorSpi.classPK     A xI^    E             %< org/bouncycastle/jcajce/provider/asymmetric/ecgost/SignatureSpi.classPK
 
      A             5             < org/bouncycastle/jcajce/provider/asymmetric/ecgost12/PK     A q,B  }3  V             I< org/bouncycastle/jcajce/provider/asymmetric/ecgost12/BCECGOST3410_2012PrivateKey.classPK     A p  r/  U             < org/bouncycastle/jcajce/provider/asymmetric/ecgost12/BCECGOST3410_2012PublicKey.classPK     A 17J  D  T             < org/bouncycastle/jcajce/provider/asymmetric/ecgost12/ECGOST2012SignatureSpi256.classPK     A  t  =  T             2< org/bouncycastle/jcajce/provider/asymmetric/ecgost12/ECGOST2012SignatureSpi512.classPK     A 5     L             < org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyAgreementSpi$1.classPK     A MT  k  S             < org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyAgreementSpi$ECVKO256.classPK     A N1T  k  S             < org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyAgreementSpi$ECVKO512.classPK     A /F  d  J             c< org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyAgreementSpi.classPK     A ^z    H             f< org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyFactorySpi.classPK     A \[)
    N             V< org/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyPairGeneratorSpi.classPK
 
      A             1             = org/bouncycastle/jcajce/provider/asymmetric/edec/PK     A aS+k    H             J= org/bouncycastle/jcajce/provider/asymmetric/edec/BCEdDSAPrivateKey.classPK     A      G             += org/bouncycastle/jcajce/provider/asymmetric/edec/BCEdDSAPublicKey.classPK     A }%    F             n= org/bouncycastle/jcajce/provider/asymmetric/edec/BCXDHPrivateKey.classPK     A E$!    E             b= org/bouncycastle/jcajce/provider/asymmetric/edec/BCXDHPublicKey.classPK     A C(  Q  ?             &= org/bouncycastle/jcajce/provider/asymmetric/edec/EdECUtil.classPK     A (\    B             r*= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$1.classPK     A 	ŵ    E             ,= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIES.classPK     A 3z[A    O             /= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithAESCBC.classPK     A 9d    O             0= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithCipher.classPK     A k̀<    R             P3= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithDESedeCBC.classPK     A   $  O             5= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA256.classPK     A WU~    X             6= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA256andAESCBC.classPK     A z  _  [             8= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA256andDESedeCBC.classPK     A !*_1  $  O             := org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA384.classPK     A DK~    X             9<= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA384andAESCBC.classPK     A Q-~H{  _  [             =>= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA384andDESedeCBC.classPK     A <+  $  O             A@= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA512.classPK     A z?w~    X             A= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA512andAESCBC.classPK     A h֫z  _  [             C= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher$XIESwithSHA512andDESedeCBC.classPK     A {  +*  @             E= org/bouncycastle/jcajce/provider/asymmetric/edec/IESCipher.classPK     A U   /  M             V= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519.classPK     A I\  f  \             ]W= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519UwithSHA256CKDF.classPK     A rQdT  Z  [             CY= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519UwithSHA256KDF.classPK     A MY`Z  d  [              [= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256CKDF.classPK     A d:R  Z  [             ]= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256HKDF.classPK     A C\\S  X  Z             ^= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA256KDF.classPK     A B2[  d  [             `= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA384CKDF.classPK     A Z  d  [             b= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X25519withSHA512CKDF.classPK     A 6Axp   +  K             d= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448.classPK     A ]cZ  b  Z             e= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448UwithSHA512CKDF.classPK     A ^ml?R  V  Y             g= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448UwithSHA512KDF.classPK     A AW  `  Y             i= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA256CKDF.classPK     A bEW  `  Y             gk= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA384CKDF.classPK     A OW  `  Y             Em= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512CKDF.classPK     A ݵIuP  V  Y             #o= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512HKDF.classPK     A KQ  T  X             p= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$X448withSHA512KDF.classPK     A _"|   )  J             r= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi$XDH.classPK     A 	{  c  F             t= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyAgreementSpi.classPK     A +   2  L             r}= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed25519.classPK     A +ǽ   .  J             ~= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed448.classPK     A ~   -  J             = org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$EdDSA.classPK     A p%   0  K             i= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X25519.classPK     A    ,  I             = org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X448.classPK     A Ixu   )  H             = org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$XDH.classPK     A k    D             W= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi.classPK     A &8   $  R             = org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed25519.classPK     A 0k"      P             /= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$Ed448.classPK     A gQ(      P             m= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$EdDSA.classPK     A G`   "  Q             = org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X25519.classPK     A +Ӫ     O             = org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$X448.classPK     A WK     N             /= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi$XDH.classPK     A 0[  t  J             n= org/bouncycastle/jcajce/provider/asymmetric/edec/KeyPairGeneratorSpi.classPK     A WjJ   +  K             = org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$Ed25519.classPK     A c   '  I             = org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$Ed448.classPK     A  Ĥ   #  I             5= org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi$EdDSA.classPK     A M/5  	  C             z= org/bouncycastle/jcajce/provider/asymmetric/edec/SignatureSpi.classPK     A     <             r= org/bouncycastle/jcajce/provider/asymmetric/edec/Utils.classPK
 
      A             4             گ= org/bouncycastle/jcajce/provider/asymmetric/elgamal/PK     A     X             ,= org/bouncycastle/jcajce/provider/asymmetric/elgamal/AlgorithmParameterGeneratorSpi.classPK     A Nx  G
  P             i= org/bouncycastle/jcajce/provider/asymmetric/elgamal/AlgorithmParametersSpi.classPK     A %7]  '  M             ޹= org/bouncycastle/jcajce/provider/asymmetric/elgamal/BCElGamalPrivateKey.classPK     A ,    L             = org/bouncycastle/jcajce/provider/asymmetric/elgamal/BCElGamalPublicKey.classPK     A GJ     M             = org/bouncycastle/jcajce/provider/asymmetric/elgamal/CipherSpi$NoPadding.classPK     A     T             ]= org/bouncycastle/jcajce/provider/asymmetric/elgamal/CipherSpi$PKCS1v1_5Padding.classPK     A #F  $  C             = org/bouncycastle/jcajce/provider/asymmetric/elgamal/CipherSpi.classPK     A |    E             S= org/bouncycastle/jcajce/provider/asymmetric/elgamal/ElGamalUtil.classPK     A   r  G             = org/bouncycastle/jcajce/provider/asymmetric/elgamal/KeyFactorySpi.classPK     A 4V  6
  M              = org/bouncycastle/jcajce/provider/asymmetric/elgamal/KeyPairGeneratorSpi.classPK
 
      A             1             = org/bouncycastle/jcajce/provider/asymmetric/gost/PK     A a  
  U             = org/bouncycastle/jcajce/provider/asymmetric/gost/AlgorithmParameterGeneratorSpi.classPK     A LIQ    M             = org/bouncycastle/jcajce/provider/asymmetric/gost/AlgorithmParametersSpi.classPK     A 'H
    K             -= org/bouncycastle/jcajce/provider/asymmetric/gost/BCGOST3410PrivateKey.classPK     A u$    J             = org/bouncycastle/jcajce/provider/asymmetric/gost/BCGOST3410PublicKey.classPK     A +    ?             E	> org/bouncycastle/jcajce/provider/asymmetric/gost/GOSTUtil.classPK     A $kV    D             Y> org/bouncycastle/jcajce/provider/asymmetric/gost/KeyFactorySpi.classPK     A d.]    J             !> org/bouncycastle/jcajce/provider/asymmetric/gost/KeyPairGeneratorSpi.classPK     A v  /  C             _> org/bouncycastle/jcajce/provider/asymmetric/gost/SignatureSpi.classPK
 
      A             0             > org/bouncycastle/jcajce/provider/asymmetric/ies/PK     A S    L             5> org/bouncycastle/jcajce/provider/asymmetric/ies/AlgorithmParametersSpi.classPK
 
      A             2             M(> org/bouncycastle/jcajce/provider/asymmetric/mldsa/PK     A +z    I             (> org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPrivateKey.classPK     A vs  
  H             %0> org/bouncycastle/jcajce/provider/asymmetric/mldsa/BCMLDSAPublicKey.classPK     A      N             H6> org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi$MLDSA.classPK     A D$  ^  P             7> org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi$MLDSA44.classPK     A IK%  ^  P             R9> org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi$MLDSA65.classPK     A {!u0R    P             :> org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi$MLDSA87.classPK     A     H             <> org/bouncycastle/jcajce/provider/asymmetric/mldsa/HashSignatureSpi.classPK     A 2ۣ   Y  O             FB> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$Hash.classPK     A F    V             C> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$HashMLDSA44.classPK     A wD    V             LE> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$HashMLDSA65.classPK     A `L    V             F> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$HashMLDSA87.classPK     A 
I	    R             H> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$MLDSA44.classPK     A Q2
    R             J> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$MLDSA65.classPK     A  /Y    R             K> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$MLDSA87.classPK     A jC   Y  O             .M> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi$Pure.classPK     A 
i_
    J             N> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyFactorySpi.classPK     A b    U             jY> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$Hash.classPK     A  8B&  $  X             Z> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA44.classPK     A I~:  D  b             \> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA44withSHA512.classPK     A Ѩ'  $  X             t^> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA65.classPK     A x.n;  D  b             !`> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA65withSHA512.classPK     A e'  $  X             a> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA87.classPK     A Q;;  D  b             c> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$MLDSA87withSHA512.classPK     A R/    U             de> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi$Pure.classPK     A 
ބm    P             f> org/bouncycastle/jcajce/provider/asymmetric/mldsa/MLDSAKeyPairGeneratorSpi.classPK     A `F     J             n> org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSA.classPK     A D8y  B  L             =p> org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSA44.classPK     A 3  B  L             q> org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSA65.classPK     A q(B    L             Xs> org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSA87.classPK     A ٜ@  Q  P             u> org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSACalcMu.classPK     A 7  k  O             ow> org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi$MLDSAExtMu.classPK     A E>    D             z> org/bouncycastle/jcajce/provider/asymmetric/mldsa/SignatureSpi.classPK     A ǦX%    =             > org/bouncycastle/jcajce/provider/asymmetric/mldsa/Utils.classPK
 
      A             2             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/PK     A i  0  I             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPrivateKey.classPK     A t`  
  H             9> org/bouncycastle/jcajce/provider/asymmetric/mlkem/BCMLKEMPublicKey.classPK     A Kl  v  K             e> org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi$Base.classPK     A 2     P             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi$MLKEM1024.classPK     A ~F     O             Y> org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi$MLKEM512.classPK     A 
     O             ϖ> org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi$MLKEM768.classPK     A I#F    F             E> org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMCipherSpi.classPK     A N    T             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM1024.classPK     A 6    S             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM512.classPK     A \    S             %> org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi$MLKEM768.classPK     A 8  0  J             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyFactorySpi.classPK     A Z     V             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi$MLKEM1024.classPK     A bڒ     U             7> org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi$MLKEM512.classPK     A p	n;     U             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi$MLKEM768.classPK     A 
`ly  	  L             5> org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyGeneratorSpi.classPK     A 6b     Z             (> org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi$MLKEM1024.classPK     A G/X     Y             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi$MLKEM512.classPK     A ++     Y             .> org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi$MLKEM768.classPK     A ѩ    P             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/MLKEMKeyPairGeneratorSpi.classPK     A     =             > org/bouncycastle/jcajce/provider/asymmetric/mlkem/Utils.classPK
 
      A             0             &> org/bouncycastle/jcajce/provider/asymmetric/rsa/PK     A Q"y    Q             t> org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi$OAEP.classPK     A bT    P             l> org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi$PSS.classPK     A      L             > org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi.classPK     A  P    H             w> org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.classPK     A /  6  E             > org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey.classPK     A   &  D             > org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPublicKey.classPK     A mٻ    P             > org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$ISO9796d1Padding.classPK     A t     I             > org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$NoPadding.classPK     A }     K             > org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$OAEPPadding.classPK     A P{    P             > org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$PKCS1v1_5Padding.classPK     A ۟2  ?  \             > org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$PKCS1v1_5Padding_PrivateOnly.classPK     A &1  =  [             U ? org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi$PKCS1v1_5Padding_PublicOnly.classPK     A )  /  ?             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.classPK     A   4
  I             u? org/bouncycastle/jcajce/provider/asymmetric/rsa/CustomPKCS1Encoding.classPK     A S Fx    L             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD2.classPK     A (8x    L             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD4.classPK     A HUQ  9  L              ? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD5.classPK     A |  (  R             "? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$RIPEMD128.classPK     A 
xT  (  R             $? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$RIPEMD160.classPK     A Lܔ  (  R             &? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$RIPEMD256.classPK     A ܞ\  F  M             )? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA1.classPK     A ܅C  H  O             #+? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA224.classPK     A ]:  H  O             >-? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA256.classPK     A 1  H  O             Z/? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA384.classPK     A 
v/  P  Q             w1? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA3_224.classPK     A   P  Q             3? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA3_256.classPK     A v  P  Q             5? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA3_384.classPK     A a  P  Q             7? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA3_512.classPK     A &01s  H  O             9? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA512.classPK     A 9  X  S             <? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA512_224.classPK     A Ц  X  S             @>? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$SHA512_256.classPK     A ]]?  k  P             g@? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$noneRSA.classPK     A [eV    H             $B? org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.classPK     A "گ=  6  Z             zK? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$MD5WithRSAEncryption.classPK     A P,    `             ?M? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$RIPEMD160WithRSAEncryption.classPK     A z\>  9  [             N? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA1WithRSAEncryption.classPK     A b(?  ?  ]             P? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA224WithRSAEncryption.classPK     A @@  ?  ]             R? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA256WithRSAEncryption.classPK     A E
@  ?  ]             UT? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA384WithRSAEncryption.classPK     A {x@  ?  ]              V? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA512WithRSAEncryption.classPK     A ggF  K  a             W? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA512_224WithRSAEncryption.classPK     A 9dG  K  a             Y? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$SHA512_256WithRSAEncryption.classPK     A 7*    `             [? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi$WhirlpoolWithRSAEncryption.classPK     A 7u  
  E             N]? org/bouncycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi.classPK     A VMV	  s  C             6b? org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi.classPK     A _U#p    M             k? org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyPairGeneratorSpi$PSS.classPK     A xs    I             m? org/bouncycastle/jcajce/provider/asymmetric/rsa/KeyPairGeneratorSpi.classPK     A ,x  +  S             rs? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$NullPssDigest.classPK     A D3    P             v? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$PSSwithRSA.classPK     A M3=  #  Q             x? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA1withRSA.classPK     A tŨ~m    \             ;z? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA1withRSAandSHAKE128.classPK     A MЁm    \             2|? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA1withRSAandSHAKE256.classPK     A LR)    S             )~? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA224withRSA.classPK     A ,ly    ^             5? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA224withRSAandSHAKE128.classPK     A ?Cy    ^             :? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA224withRSAandSHAKE256.classPK     A Q    S             ?? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA256withRSA.classPK     A jy
y    ^             M? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA256withRSAandSHAKE128.classPK     A yVPw    ^             R? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA256withRSAandSHAKE256.classPK     A ZAP    S             U? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA384withRSA.classPK     A ٷ|y    ^             b? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA384withRSAandSHAKE128.classPK     A ʘ&vx    ^             g? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA384withRSAandSHAKE256.classPK     A }    U             k? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_224withRSA.classPK     A 9t    `             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_224withRSAandSHAKE128.classPK     A &gs    `             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_224withRSAandSHAKE256.classPK     A  ,X    U             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_256withRSA.classPK     A Q^z    `             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_256withRSAandSHAKE128.classPK     A  q    `             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_256withRSAandSHAKE256.classPK     A VI    U             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_384withRSA.classPK     A g[es    `             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_384withRSAandSHAKE128.classPK     A as    `             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_384withRSAandSHAKE256.classPK     A C    U             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_512withRSA.classPK     A I+s    `             Ť? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_512withRSAandSHAKE128.classPK     A vs    `             Ʀ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA3_512withRSAandSHAKE256.classPK     A 
K    W             Ǩ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_224withRSA.classPK     A .q    b             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_224withRSAandSHAKE128.classPK     A 8k    b             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_224withRSAandSHAKE256.classPK     A 'F    W             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_256withRSA.classPK     A L    b             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_256withRSAandSHAKE128.classPK     A TE    b             1? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512_256withRSAandSHAKE256.classPK     A bϨ    S             A? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512withRSA.classPK     A x    ^             M? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512withRSAandSHAKE128.classPK     A x    ^             Q? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHA512withRSAandSHAKE256.classPK     A 0)c  p  X             U? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHAKE128WithRSAPSS.classPK     A Yh2pc  p  X             >? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$SHAKE256WithRSAPSS.classPK     A j    M             '? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi$nonePSS.classPK     A N|q
  +  E             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/PSSSignatureSpi.classPK     A I  \
  =             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/RSAUtil.classPK     A 9Y.    a             R? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$RIPEMD128WithRSAEncryption.classPK     A 톷.    a             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$RIPEMD160WithRSAEncryption.classPK     A Ļ?  ;  \             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA1WithRSAEncryption.classPK     A -)e@  A  ^             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA224WithRSAEncryption.classPK     A YA  A  ^             a? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA256WithRSAEncryption.classPK     A T$A  A  ^             .? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA384WithRSAEncryption.classPK     A hA  A  ^             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA512WithRSAEncryption.classPK     A N1H  M  b             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA512_224WithRSAEncryption.classPK     A VTH  M  b             ? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$SHA512_256WithRSAEncryption.classPK     A +    a             x? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi$WhirlpoolWithRSAEncryption.classPK     A `i  
  F             2? org/bouncycastle/jcajce/provider/asymmetric/rsa/X931SignatureSpi.classPK
 
      A             3             ? org/bouncycastle/jcajce/provider/asymmetric/slhdsa/PK     A @6    K             `? org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPrivateKey.classPK     A   
  J             ? org/bouncycastle/jcajce/provider/asymmetric/slhdsa/BCSLHDSAPublicKey.classPK     A ҫ     P             %? org/bouncycastle/jcajce/provider/asymmetric/slhdsa/HashSignatureSpi$Direct.classPK     A 	NVe  	  I             ? org/bouncycastle/jcajce/provider/asymmetric/slhdsa/HashSignatureSpi.classPK     A `V   ]  Q             o? org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Hash.classPK     A TO!    Z             ? org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_128f.classPK     A =<:!    Z              @ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_128s.classPK     A vO6"    Z             *@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_192f.classPK     A 'w"    Z             @ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_192s.classPK     A )@"    Z             ~@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_256f.classPK     A A"    Z             (@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashSha2_256s.classPK     A #    [             @ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_128f.classPK     A ]8"    [             ~
@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_128s.classPK     A ]$    [             )@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_192f.classPK     A X$    [             
@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_192s.classPK     A !#    [             @ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_256f.classPK     A 8q"    [             /@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$HashShake_256s.classPK     A Sm   ]  Q             @ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Pure.classPK     A S    V             C@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_128f.classPK     A Џ    V             @ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_128s.classPK     A }s*    V             t@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_192f.classPK     A o3    V             @ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_192s.classPK     A ϙ    V             @ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_256f.classPK     A &    V             =@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Sha2_256s.classPK     A op    W             @ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_128f.classPK     A `P    W             p@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_128s.classPK     A \    W             
!@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_192f.classPK     A v    W             "@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_192s.classPK     A ֕(    W             >$@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_256f.classPK     A J    W             %@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi$Shake_256s.classPK     A <  J  L             s'@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyFactorySpi.classPK     A М    W             /@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Hash.classPK     A     `             .1@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_128f.classPK     A 5ߔ    `             2@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_128s.classPK     A =V    `             o4@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_192f.classPK     A 5	b    `             6@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_192s.classPK     A     `             7@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_256f.classPK     A 9n    `             R9@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashSha2_256s.classPK     A %9  
  a             :@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_128f.classPK     A -)  
  a             <@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_128s.classPK     A   
  a             7>@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_192f.classPK     A ,6  
  a             ?@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_192s.classPK     A 1  
  a             ~A@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_256f.classPK     A   
  a              C@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$HashShake_256s.classPK     A [C
    W             D@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Pure.classPK     A ',G    \             TF@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_128f.classPK     A 	    \             G@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_128s.classPK     A t    \             rI@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_192f.classPK     A :    \             K@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_192s.classPK     A -J    \             L@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_256f.classPK     A g    \             N@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Sha2_256s.classPK     A "    ]             O@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_128f.classPK     A A    ]             @Q@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_128s.classPK     A dG    ]             R@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_192f.classPK     A Xdn    ]             cT@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_192s.classPK     A u&    ]             U@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_256f.classPK     A 9    ]             W@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi$Shake_256s.classPK     A 6	  "  R             Y@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SLHDSAKeyPairGeneratorSpi.classPK     A l     L             ec@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SignatureSpi$Direct.classPK     A Ş  
  E             d@ org/bouncycastle/jcajce/provider/asymmetric/slhdsa/SignatureSpi.classPK
 
      A             1             j@ org/bouncycastle/jcajce/provider/asymmetric/util/PK     A   m#  G             Rj@ org/bouncycastle/jcajce/provider/asymmetric/util/BaseAgreementSpi.classPK     A `rg0v    Y             y@ org/bouncycastle/jcajce/provider/asymmetric/util/BaseAlgorithmParameterGeneratorSpi.classPK     A |  "  F             {@ org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi$1.classPK     A g@    Y             }@ org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi$ErasableOutputStream.classPK     A 60    D             @ org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.classPK     A %,    Y             M@ org/bouncycastle/jcajce/provider/asymmetric/util/BaseDeterministicOrRandomSignature.classPK     A %/    H              @ org/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi.classPK     A ?F    >             ;@ org/bouncycastle/jcajce/provider/asymmetric/util/DESUtil.classPK     A 2  Y  =             C@ org/bouncycastle/jcajce/provider/asymmetric/util/DHUtil.classPK     A     >             t@ org/bouncycastle/jcajce/provider/asymmetric/util/DSABase.classPK     A =    /  A             @ org/bouncycastle/jcajce/provider/asymmetric/util/DSAEncoder.classPK     A ҍ7  e  K             <@ org/bouncycastle/jcajce/provider/asymmetric/util/EC5Util$CustomCurves.classPK     A KYs*=  u#  >             @ org/bouncycastle/jcajce/provider/asymmetric/util/EC5Util.classPK     A Mk
  ]%  =             ?@ org/bouncycastle/jcajce/provider/asymmetric/util/ECUtil.classPK     A %٪
    V             :@ org/bouncycastle/jcajce/provider/asymmetric/util/ExtendedInvalidKeySpecException.classPK     A .    C             ˿@ org/bouncycastle/jcajce/provider/asymmetric/util/GOST3410Util.classPK     A ,u,    >             j@ org/bouncycastle/jcajce/provider/asymmetric/util/IESUtil.classPK     A 0r!    >             @ org/bouncycastle/jcajce/provider/asymmetric/util/KeyUtil.classPK     A GT    T             @ org/bouncycastle/jcajce/provider/asymmetric/util/PKCS12BagAttributeCarrierImpl.classPK     A .5*   (  O             e@ org/bouncycastle/jcajce/provider/asymmetric/util/PrimeCertaintyCalculator.classPK
 
      A             1             @ org/bouncycastle/jcajce/provider/asymmetric/x509/PK     A ctM  o  `             (@ org/bouncycastle/jcajce/provider/asymmetric/x509/CertificateFactory$ExCertificateException.classPK     A ̭  U  I             @ org/bouncycastle/jcajce/provider/asymmetric/x509/CertificateFactory.classPK     A WR  }  F             @ org/bouncycastle/jcajce/provider/asymmetric/x509/ExtCRLException.classPK     A q{  +  A             @ org/bouncycastle/jcajce/provider/asymmetric/x509/KeyFactory.classPK     A x
Y      @             @ org/bouncycastle/jcajce/provider/asymmetric/x509/PEMUtil$1.classPK     A +    I             @ org/bouncycastle/jcajce/provider/asymmetric/x509/PEMUtil$Boundaries.classPK     A I  	  >             |@ org/bouncycastle/jcajce/provider/asymmetric/x509/PEMUtil.classPK     A ߬s    C             @ org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.classPK     A %a   /  G             @ org/bouncycastle/jcajce/provider/asymmetric/x509/SignatureCreator.classPK     A n	    I             @ org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLEntryObject.classPK     A \MJ !  5  D             0A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLImpl$1.classPK     A W  \  D             A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLImpl$2.classPK     A 8    D             J	A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLImpl$3.classPK     A $  c5  B             A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLImpl.classPK     A B!  
  F              A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLInternal.classPK     A kvP  Q  U             
#A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLObject$X509CRLException.classPK     A [SR	    D             $A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CRLObject.classPK     A   (  L             [,A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateImpl$1.classPK     A 'O  |  L             .A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateImpl$2.classPK     A   g  L             1A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateImpl$3.classPK     A   EA  J             4A org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateImpl.classPK     A (@    N             ;MA org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateInternal.classPK     A `
Ye0    m             qOA org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject$X509CertificateEncodingException.classPK     A ;Ɲ  ]  L             <QA org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject.classPK     A .\
  Q  H             ]A org/bouncycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.classPK
 
      A             (             hA org/bouncycastle/jcajce/provider/config/PK     A *%[    B             iA org/bouncycastle/jcajce/provider/config/ConfigurableProvider.classPK     A N>̈́    B             kA org/bouncycastle/jcajce/provider/config/PKCS12StoreParameter.classPK     A     C             mA org/bouncycastle/jcajce/provider/config/ProviderConfiguration.classPK     A u K    M             RoA org/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission.classPK
 
      A             (             otA org/bouncycastle/jcajce/provider/digest/PK     A G  _  =             tA org/bouncycastle/jcajce/provider/digest/BCMessageDigest.classPK     A EF    @             wA org/bouncycastle/jcajce/provider/digest/Blake2b$Blake2b160.classPK     A hʍ    @             yA org/bouncycastle/jcajce/provider/digest/Blake2b$Blake2b256.classPK     A 3א    @             {A org/bouncycastle/jcajce/provider/digest/Blake2b$Blake2b384.classPK     A     @             }A org/bouncycastle/jcajce/provider/digest/Blake2b$Blake2b512.classPK     A GI  [  >             A org/bouncycastle/jcajce/provider/digest/Blake2b$Mappings.classPK     A f&d  ^  5             тA org/bouncycastle/jcajce/provider/digest/Blake2b.classPK     A `4q=    @             9A org/bouncycastle/jcajce/provider/digest/Blake2s$Blake2s128.classPK     A !    @             5A org/bouncycastle/jcajce/provider/digest/Blake2s$Blake2s160.classPK     A Nޤ    @             0A org/bouncycastle/jcajce/provider/digest/Blake2s$Blake2s224.classPK     A Y.    @             .A org/bouncycastle/jcajce/provider/digest/Blake2s$Blake2s256.classPK     A 
4  [  >             %A org/bouncycastle/jcajce/provider/digest/Blake2s$Mappings.classPK     A `  ^  5             WA org/bouncycastle/jcajce/provider/digest/Blake2s.classPK     A N    ?             A org/bouncycastle/jcajce/provider/digest/Blake3$Blake3_256.classPK     A mI    =             A org/bouncycastle/jcajce/provider/digest/Blake3$Mappings.classPK     A h+'   \  4             eA org/bouncycastle/jcajce/provider/digest/Blake3.classPK     A ^   `  @             A org/bouncycastle/jcajce/provider/digest/DSTU7564$Digest256.classPK     A Aq   `  @             חA org/bouncycastle/jcajce/provider/digest/DSTU7564$Digest384.classPK     A 寽   `  @             A org/bouncycastle/jcajce/provider/digest/DSTU7564$Digest512.classPK     A L͐0    E             FA org/bouncycastle/jcajce/provider/digest/DSTU7564$DigestDSTU7564.classPK     A 3
    A             @A org/bouncycastle/jcajce/provider/digest/DSTU7564$HashMac256.classPK     A O!    A             A org/bouncycastle/jcajce/provider/digest/DSTU7564$HashMac384.classPK     A ^8    A             !A org/bouncycastle/jcajce/provider/digest/DSTU7564$HashMac512.classPK     A     F             A org/bouncycastle/jcajce/provider/digest/DSTU7564$KeyGenerator256.classPK     A >o    F             #A org/bouncycastle/jcajce/provider/digest/DSTU7564$KeyGenerator384.classPK     A Y~    F             A org/bouncycastle/jcajce/provider/digest/DSTU7564$KeyGenerator512.classPK     A <    ?             IA org/bouncycastle/jcajce/provider/digest/DSTU7564$Mappings.classPK     A ws    6             A org/bouncycastle/jcajce/provider/digest/DSTU7564.classPK     A H21    E             ɪA org/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider.classPK     A x    =             mA org/bouncycastle/jcajce/provider/digest/GOST3411$Digest.classPK     A n
    E             XA org/bouncycastle/jcajce/provider/digest/GOST3411$Digest2012_256.classPK     A ƴ    E             WA org/bouncycastle/jcajce/provider/digest/GOST3411$Digest2012_512.classPK     A ʾ	    >             VA org/bouncycastle/jcajce/provider/digest/GOST3411$HashMac.classPK     A JRX&    F             ٴA org/bouncycastle/jcajce/provider/digest/GOST3411$HashMac2012_256.classPK     A U>'    F             sA org/bouncycastle/jcajce/provider/digest/GOST3411$HashMac2012_512.classPK     A B    C             A org/bouncycastle/jcajce/provider/digest/GOST3411$KeyGenerator.classPK     A "    K             A org/bouncycastle/jcajce/provider/digest/GOST3411$KeyGenerator2012_256.classPK     A !    K             0A org/bouncycastle/jcajce/provider/digest/GOST3411$KeyGenerator2012_512.classPK     A U)	  
  ?             ʼA org/bouncycastle/jcajce/provider/digest/GOST3411$Mappings.classPK     A }	     K             @A org/bouncycastle/jcajce/provider/digest/GOST3411$PBEWithMacKeyFactory.classPK     A 0'    6             A org/bouncycastle/jcajce/provider/digest/GOST3411.classPK     A 39y    >             A org/bouncycastle/jcajce/provider/digest/Haraka$Digest256.classPK     A Ko    >             A org/bouncycastle/jcajce/provider/digest/Haraka$Digest512.classPK     A l    =             A org/bouncycastle/jcajce/provider/digest/Haraka$Mappings.classPK     A z"     4             A org/bouncycastle/jcajce/provider/digest/Haraka.classPK     A    V  >             CA org/bouncycastle/jcajce/provider/digest/Keccak$Digest224.classPK     A +   V  >             vA org/bouncycastle/jcajce/provider/digest/Keccak$Digest256.classPK     A {   V  >             A org/bouncycastle/jcajce/provider/digest/Keccak$Digest288.classPK     A 
?   V  >             A org/bouncycastle/jcajce/provider/digest/Keccak$Digest384.classPK     A ln   V  >             A org/bouncycastle/jcajce/provider/digest/Keccak$Digest512.classPK     A     A             <A org/bouncycastle/jcajce/provider/digest/Keccak$DigestKeccak.classPK     A ]K9     ?             -A org/bouncycastle/jcajce/provider/digest/Keccak$HashMac224.classPK     A 
s    ?             A org/bouncycastle/jcajce/provider/digest/Keccak$HashMac256.classPK     A CD    ?             EA org/bouncycastle/jcajce/provider/digest/Keccak$HashMac288.classPK     A w]/     ?             A org/bouncycastle/jcajce/provider/digest/Keccak$HashMac384.classPK     A 608	    ?             ^A org/bouncycastle/jcajce/provider/digest/Keccak$HashMac512.classPK     A E6    D             A org/bouncycastle/jcajce/provider/digest/Keccak$KeyGenerator224.classPK     A c6    D             yA org/bouncycastle/jcajce/provider/digest/Keccak$KeyGenerator256.classPK     A ?    D             A org/bouncycastle/jcajce/provider/digest/Keccak$KeyGenerator288.classPK     A     D             A org/bouncycastle/jcajce/provider/digest/Keccak$KeyGenerator384.classPK     A O}    D             &A org/bouncycastle/jcajce/provider/digest/Keccak$KeyGenerator512.classPK     A   P  =             A org/bouncycastle/jcajce/provider/digest/Keccak$Mappings.classPK     A ѱ  t  4             A org/bouncycastle/jcajce/provider/digest/Keccak.classPK     A h}y    8             A org/bouncycastle/jcajce/provider/digest/MD2$Digest.classPK     A gA    9             A org/bouncycastle/jcajce/provider/digest/MD2$HashMac.classPK     A #    >             qA org/bouncycastle/jcajce/provider/digest/MD2$KeyGenerator.classPK     A Dgt  V  :             A org/bouncycastle/jcajce/provider/digest/MD2$Mappings.classPK     A &-Z     1             A org/bouncycastle/jcajce/provider/digest/MD2.classPK     A y    8             *A org/bouncycastle/jcajce/provider/digest/MD4$Digest.classPK     A XqGb    9             	A org/bouncycastle/jcajce/provider/digest/MD4$HashMac.classPK     A g1    >             A org/bouncycastle/jcajce/provider/digest/MD4$KeyGenerator.classPK     A PGs  V  :             A org/bouncycastle/jcajce/provider/digest/MD4$Mappings.classPK     A ]     1             A org/bouncycastle/jcajce/provider/digest/MD4.classPK     A MDx    8             7A org/bouncycastle/jcajce/provider/digest/MD5$Digest.classPK     A 9g7m    9             A org/bouncycastle/jcajce/provider/digest/MD5$HashMac.classPK     A Q@X    >             A org/bouncycastle/jcajce/provider/digest/MD5$KeyGenerator.classPK     A p|

  N  :              B org/bouncycastle/jcajce/provider/digest/MD5$Mappings.classPK     A rb     1             (B org/bouncycastle/jcajce/provider/digest/MD5.classPK     A  l    >             B org/bouncycastle/jcajce/provider/digest/RIPEMD128$Digest.classPK     A <a    ?             sB org/bouncycastle/jcajce/provider/digest/RIPEMD128$HashMac.classPK     A O    D             B org/bouncycastle/jcajce/provider/digest/RIPEMD128$KeyGenerator.classPK     A C'  ~  @             	B org/bouncycastle/jcajce/provider/digest/RIPEMD128$Mappings.classPK     A   	  7             uB org/bouncycastle/jcajce/provider/digest/RIPEMD128.classPK     A 3    >             
B org/bouncycastle/jcajce/provider/digest/RIPEMD160$Digest.classPK     A Kp)    ?             B org/bouncycastle/jcajce/provider/digest/RIPEMD160$HashMac.classPK     A -`%    D             PB org/bouncycastle/jcajce/provider/digest/RIPEMD160$KeyGenerator.classPK     A   -  @             B org/bouncycastle/jcajce/provider/digest/RIPEMD160$Mappings.classPK     A {(  
  C             RB org/bouncycastle/jcajce/provider/digest/RIPEMD160$PBEWithHmac.classPK     A S#    M             B org/bouncycastle/jcajce/provider/digest/RIPEMD160$PBEWithHmacKeyFactory.classPK     A !8    7             B org/bouncycastle/jcajce/provider/digest/RIPEMD160.classPK     A j[    >             &B org/bouncycastle/jcajce/provider/digest/RIPEMD256$Digest.classPK     A ]    ?             B org/bouncycastle/jcajce/provider/digest/RIPEMD256$HashMac.classPK     A w    D             B org/bouncycastle/jcajce/provider/digest/RIPEMD256$KeyGenerator.classPK     A V  ~  @             ! B org/bouncycastle/jcajce/provider/digest/RIPEMD256$Mappings.classPK     A   	  7             #B org/bouncycastle/jcajce/provider/digest/RIPEMD256.classPK     A ҏp    >             |$B org/bouncycastle/jcajce/provider/digest/RIPEMD320$Digest.classPK     A Ǧ    ?             h&B org/bouncycastle/jcajce/provider/digest/RIPEMD320$HashMac.classPK     A X    D             'B org/bouncycastle/jcajce/provider/digest/RIPEMD320$KeyGenerator.classPK     A 6β)    @             v)B org/bouncycastle/jcajce/provider/digest/RIPEMD320$Mappings.classPK     A $  	  7             +B org/bouncycastle/jcajce/provider/digest/RIPEMD320.classPK     A ޺Nz    9             i-B org/bouncycastle/jcajce/provider/digest/SHA1$Digest.classPK     A I{    :             J/B org/bouncycastle/jcajce/provider/digest/SHA1$HashMac.classPK     A .    =             0B org/bouncycastle/jcajce/provider/digest/SHA1$KeyFactory.classPK     A ޙy    ?             42B org/bouncycastle/jcajce/provider/digest/SHA1$KeyGenerator.classPK     A  O  <	  ;             3B org/bouncycastle/jcajce/provider/digest/SHA1$Mappings.classPK     A 8    G             7B org/bouncycastle/jcajce/provider/digest/SHA1$PBEWithMacKeyFactory.classPK     A -    :             H9B org/bouncycastle/jcajce/provider/digest/SHA1$SHA1Mac.classPK     A ($@    2             :B org/bouncycastle/jcajce/provider/digest/SHA1.classPK     A ~}    ;             `<B org/bouncycastle/jcajce/provider/digest/SHA224$Digest.classPK     A M    <             F>B org/bouncycastle/jcajce/provider/digest/SHA224$HashMac.classPK     A 0~G    ?             ?B org/bouncycastle/jcajce/provider/digest/SHA224$KeyFactory.classPK     A  r    A             8AB org/bouncycastle/jcajce/provider/digest/SHA224$KeyGenerator.classPK     A d;  r  =             BB org/bouncycastle/jcajce/provider/digest/SHA224$Mappings.classPK     A K  N  4             @FB org/bouncycastle/jcajce/provider/digest/SHA224.classPK     A 
]w  
  ;             GB org/bouncycastle/jcajce/provider/digest/SHA256$Digest.classPK     A i+  '  <             IB org/bouncycastle/jcajce/provider/digest/SHA256$HashMac.classPK     A ǀ^    ?             FKB org/bouncycastle/jcajce/provider/digest/SHA256$KeyFactory.classPK     A  :d    A             LB org/bouncycastle/jcajce/provider/digest/SHA256$KeyGenerator.classPK     A pT  M  =             >NB org/bouncycastle/jcajce/provider/digest/SHA256$Mappings.classPK     A L8    I             QB org/bouncycastle/jcajce/provider/digest/SHA256$PBEWithMacKeyFactory.classPK     A R#3    4             SB org/bouncycastle/jcajce/provider/digest/SHA256.classPK     A S   L  <             &UB org/bouncycastle/jcajce/provider/digest/SHA3$Digest224.classPK     A s2   L  <             VVB org/bouncycastle/jcajce/provider/digest/SHA3$Digest256.classPK     A }@   L  <             WB org/bouncycastle/jcajce/provider/digest/SHA3$Digest384.classPK     A #   L  <             XB org/bouncycastle/jcajce/provider/digest/SHA3$Digest512.classPK     A 8]    E             YB org/bouncycastle/jcajce/provider/digest/SHA3$DigestParallelHash.classPK     A ^Y     L             [B org/bouncycastle/jcajce/provider/digest/SHA3$DigestParallelHash128_256.classPK     A      L             E]B org/bouncycastle/jcajce/provider/digest/SHA3$DigestParallelHash256_512.classPK     A 큖    =             ^B org/bouncycastle/jcajce/provider/digest/SHA3$DigestSHA3.classPK     A ҃K    >             `B org/bouncycastle/jcajce/provider/digest/SHA3$DigestSHAKE.classPK     A *\   d  E             wbB org/bouncycastle/jcajce/provider/digest/SHA3$DigestShake128_256.classPK     A o   d  E             cB org/bouncycastle/jcajce/provider/digest/SHA3$DigestShake256_512.classPK     A     B             eB org/bouncycastle/jcajce/provider/digest/SHA3$DigestTupleHash.classPK     A *q   t  I             gB org/bouncycastle/jcajce/provider/digest/SHA3$DigestTupleHash128_256.classPK     A    t  I             XhB org/bouncycastle/jcajce/provider/digest/SHA3$DigestTupleHash256_512.classPK     A ݀   P  =             iB org/bouncycastle/jcajce/provider/digest/SHA3$HashMac224.classPK     A l   P  =             jB org/bouncycastle/jcajce/provider/digest/SHA3$HashMac256.classPK     A _k   P  =             lB org/bouncycastle/jcajce/provider/digest/SHA3$HashMac384.classPK     A    P  =             CmB org/bouncycastle/jcajce/provider/digest/SHA3$HashMac512.classPK     A Fࠤ    >             xnB org/bouncycastle/jcajce/provider/digest/SHA3$HashMacSHA3.classPK     A M8    :             oB org/bouncycastle/jcajce/provider/digest/SHA3$KMac128.classPK     A <2S?     :             fqB org/bouncycastle/jcajce/provider/digest/SHA3$KMac256.classPK     A  '?    @             rB org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactory224.classPK     A )    @             YtB org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactory256.classPK     A z    @             uB org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactory384.classPK     A .#    @             mwB org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactory512.classPK     A kgd    A             xB org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactoryKMAC.classPK     A b^     D             zB org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactoryKMAC128.classPK     A     D             [|B org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactoryKMAC256.classPK     A e    A             }B org/bouncycastle/jcajce/provider/digest/SHA3$KeyFactorySHA3.classPK     A zp   d  B             B org/bouncycastle/jcajce/provider/digest/SHA3$KeyGenerator224.classPK     A #Z9   d  B             B org/bouncycastle/jcajce/provider/digest/SHA3$KeyGenerator256.classPK     A j:w   d  B             =B org/bouncycastle/jcajce/provider/digest/SHA3$KeyGenerator384.classPK     A Xou   d  B             |B org/bouncycastle/jcajce/provider/digest/SHA3$KeyGenerator512.classPK     A \z
i    C             B org/bouncycastle/jcajce/provider/digest/SHA3$KeyGeneratorSHA3.classPK     A J    ;             B org/bouncycastle/jcajce/provider/digest/SHA3$Mappings.classPK     A #dbq    2             B org/bouncycastle/jcajce/provider/digest/SHA3.classPK     A Tx}    ;             6B org/bouncycastle/jcajce/provider/digest/SHA384$Digest.classPK     A h;\w    <             B org/bouncycastle/jcajce/provider/digest/SHA384$HashMac.classPK     A }w    ?             B org/bouncycastle/jcajce/provider/digest/SHA384$KeyFactory.classPK     A E    A             B org/bouncycastle/jcajce/provider/digest/SHA384$KeyGenerator.classPK     A Ƭ5    =             B org/bouncycastle/jcajce/provider/digest/SHA384$Mappings.classPK     A d    >             4B org/bouncycastle/jcajce/provider/digest/SHA384$OldSHA384.classPK     A P+    4             B org/bouncycastle/jcajce/provider/digest/SHA384.classPK     A q~    ;             EB org/bouncycastle/jcajce/provider/digest/SHA512$Digest.classPK     A q    <             ,B org/bouncycastle/jcajce/provider/digest/SHA512$DigestT.classPK     A    N  ?             B org/bouncycastle/jcajce/provider/digest/SHA512$DigestT224.classPK     A Vx   N  ?             LB org/bouncycastle/jcajce/provider/digest/SHA512$DigestT256.classPK     A v    <             B org/bouncycastle/jcajce/provider/digest/SHA512$HashMac.classPK     A -x%    @             B org/bouncycastle/jcajce/provider/digest/SHA512$HashMacT224.classPK     A #    @             B org/bouncycastle/jcajce/provider/digest/SHA512$HashMacT256.classPK     A 1     ?             "B org/bouncycastle/jcajce/provider/digest/SHA512$KeyFactory.classPK     A _    B             B org/bouncycastle/jcajce/provider/digest/SHA512$KeyFactory224.classPK     A >    B             B org/bouncycastle/jcajce/provider/digest/SHA512$KeyFactory256.classPK     A x    A             B org/bouncycastle/jcajce/provider/digest/SHA512$KeyGenerator.classPK     A *    E             B org/bouncycastle/jcajce/provider/digest/SHA512$KeyGeneratorT224.classPK     A     E             B org/bouncycastle/jcajce/provider/digest/SHA512$KeyGeneratorT256.classPK     A J  
  =             9B org/bouncycastle/jcajce/provider/digest/SHA512$Mappings.classPK     A     >             6B org/bouncycastle/jcajce/provider/digest/SHA512$OldSHA512.classPK     A 4    4             B org/bouncycastle/jcajce/provider/digest/SHA512.classPK     A %_4x    8             ѹB org/bouncycastle/jcajce/provider/digest/SM3$Digest.classPK     A G    9             B org/bouncycastle/jcajce/provider/digest/SM3$HashMac.classPK     A i!    >             'B org/bouncycastle/jcajce/provider/digest/SM3$KeyGenerator.classPK     A (Z  p  :             B org/bouncycastle/jcajce/provider/digest/SM3$Mappings.classPK     A      1             B org/bouncycastle/jcajce/provider/digest/SM3.classPK     A     C             )B org/bouncycastle/jcajce/provider/digest/Skein$DigestSkein1024.classPK     A     B             (B org/bouncycastle/jcajce/provider/digest/Skein$DigestSkein256.classPK     A i     B             %B org/bouncycastle/jcajce/provider/digest/Skein$DigestSkein512.classPK     A    g  D             "B org/bouncycastle/jcajce/provider/digest/Skein$Digest_1024_1024.classPK     A #6k   e  C             ^B org/bouncycastle/jcajce/provider/digest/Skein$Digest_1024_384.classPK     A F   e  C             B org/bouncycastle/jcajce/provider/digest/Skein$Digest_1024_512.classPK     A :G   a  B             B org/bouncycastle/jcajce/provider/digest/Skein$Digest_256_128.classPK     A Y   a  B             B org/bouncycastle/jcajce/provider/digest/Skein$Digest_256_160.classPK     A $   a  B             NB org/bouncycastle/jcajce/provider/digest/Skein$Digest_256_224.classPK     A ȧ   a  B             B org/bouncycastle/jcajce/provider/digest/Skein$Digest_256_256.classPK     A 8=   a  B             B org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_128.classPK     A #   a  B             B org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_160.classPK     A ^   a  B             7B org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_224.classPK     A v   a  B             rB org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_256.classPK     A Y   a  B             B org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_384.classPK     A im   a  B             B org/bouncycastle/jcajce/provider/digest/Skein$Digest_512_512.classPK     A 3Y4k&    N             B org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_1024_1024.classPK     A *    M             B org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_1024_384.classPK     A }S'    M             fB org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_1024_512.classPK     A ӽd(    L             B org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_256_128.classPK     A ˿&)    L             B org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_256_160.classPK     A N	~(    L             MB org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_256_224.classPK     A t	z$    L             B org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_256_256.classPK     A Cu(    L             B org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_128.classPK     A 鮤)    L             /B org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_160.classPK     A =l(    L             B org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_224.classPK     A +k3&    L             tB org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_256.classPK     A E(    L             B org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_384.classPK     A w$    L             B org/bouncycastle/jcajce/provider/digest/Skein$HMacKeyGenerator_512_512.classPK     A 	3D|%    E             TB org/bouncycastle/jcajce/provider/digest/Skein$HashMac_1024_1024.classPK     A P|*    D             B org/bouncycastle/jcajce/provider/digest/Skein$HashMac_1024_384.classPK     A Dh(    D             B org/bouncycastle/jcajce/provider/digest/Skein$HashMac_1024_512.classPK     A `^)(    C             "B org/bouncycastle/jcajce/provider/digest/Skein$HashMac_256_128.classPK     A Ԃ)    C             B org/bouncycastle/jcajce/provider/digest/Skein$HashMac_256_160.classPK     A bC)    C             UB org/bouncycastle/jcajce/provider/digest/Skein$HashMac_256_224.classPK     A O#    C             B org/bouncycastle/jcajce/provider/digest/Skein$HashMac_256_256.classPK     A 6m(    C             B org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_128.classPK     A R)    C             B org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_160.classPK     A 4pf)    C             B org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_224.classPK     A |VK&    C             PB org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_256.classPK     A %1%)    C             B org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_384.classPK     A x $    C             C org/bouncycastle/jcajce/provider/digest/Skein$HashMac_512_512.classPK     A F    <             C org/bouncycastle/jcajce/provider/digest/Skein$Mappings.classPK     A y'    R             C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_1024_1024.classPK     A }&*    Q             m
C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_1024_384.classPK     A ^τ'    Q             C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_1024_512.classPK     A *     P             
C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_256_128.classPK     A >Z*     P             dC org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_256_160.classPK     A })     P             C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_256_224.classPK     A !M&     P             C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_256_256.classPK     A `V)     P             WC org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_128.classPK     A Mb*     P             C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_160.classPK     A xU)     P             C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_224.classPK     A z'     P             MC org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_256.classPK     A d$)     P             C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_384.classPK     A %     P             C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMacKeyGenerator_512_512.classPK     A i    F             <C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_1024_1024.classPK     A CN    E             C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_1024_384.classPK     A *%!    E             *!C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_1024_512.classPK     A Kw    D             "C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_256_128.classPK     A .    D             $C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_256_160.classPK     A q    D             %C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_256_224.classPK     A T՟-     D             'C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_256_256.classPK     A N    D             u(C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_128.classPK     A 0    D             )C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_160.classPK     A x)    D             b+C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_224.classPK     A 
    D             ,C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_256.classPK     A $V    D             O.C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_384.classPK     A RMn     D             /C org/bouncycastle/jcajce/provider/digest/Skein$SkeinMac_512_512.classPK     A ]w    3             71C org/bouncycastle/jcajce/provider/digest/Skein.classPK     A 2n,z    :             ~6C org/bouncycastle/jcajce/provider/digest/Tiger$Digest.classPK     A mF    ;             `8C org/bouncycastle/jcajce/provider/digest/Tiger$HashMac.classPK     A 4    @             9C org/bouncycastle/jcajce/provider/digest/Tiger$KeyGenerator.classPK     A mw  2  <             ];C org/bouncycastle/jcajce/provider/digest/Tiger$Mappings.classPK     A dfp     B             t>C org/bouncycastle/jcajce/provider/digest/Tiger$PBEWithHashMac.classPK     A [~    H             @C org/bouncycastle/jcajce/provider/digest/Tiger$PBEWithMacKeyFactory.classPK     A ?I[    =             AC org/bouncycastle/jcajce/provider/digest/Tiger$TigerHmac.classPK     A yߡB    3             CC org/bouncycastle/jcajce/provider/digest/Tiger.classPK     A JX~    >             DC org/bouncycastle/jcajce/provider/digest/Whirlpool$Digest.classPK     A Xo    ?             FC org/bouncycastle/jcajce/provider/digest/Whirlpool$HashMac.classPK     A Oଡ    D             !HC org/bouncycastle/jcajce/provider/digest/Whirlpool$KeyGenerator.classPK     A ʑ{    @             IC org/bouncycastle/jcajce/provider/digest/Whirlpool$Mappings.classPK     A 4S  	  7             LC org/bouncycastle/jcajce/provider/digest/Whirlpool.classPK
 
      A             &              NC org/bouncycastle/jcajce/provider/drbg/PK     A |    2             DNC org/bouncycastle/jcajce/provider/drbg/DRBG$1.classPK     A [  Z  2             'PC org/bouncycastle/jcajce/provider/drbg/DRBG$2.classPK     A $    2             QC org/bouncycastle/jcajce/provider/drbg/DRBG$3.classPK     A K0    2             fTC org/bouncycastle/jcajce/provider/drbg/DRBG$4.classPK     A     2             VC org/bouncycastle/jcajce/provider/drbg/DRBG$5.classPK     A   \  2             XC org/bouncycastle/jcajce/provider/drbg/DRBG$6.classPK     A     A             [C org/bouncycastle/jcajce/provider/drbg/DRBG$CoreSecureRandom.classPK     A P.    8             _]C org/bouncycastle/jcajce/provider/drbg/DRBG$Default.classPK     A Qӱ  N  F             N_C org/bouncycastle/jcajce/provider/drbg/DRBG$HybridEntropySource$1.classPK     A Bc(  	  \             saC org/bouncycastle/jcajce/provider/drbg/DRBG$HybridEntropySource$SignallingEntropySource.classPK     A +'    D             %fC org/bouncycastle/jcajce/provider/drbg/DRBG$HybridEntropySource.classPK     A B  Y  9             ikC org/bouncycastle/jcajce/provider/drbg/DRBG$Mappings.classPK     A >!    ;             mC org/bouncycastle/jcajce/provider/drbg/DRBG$NonceAndIV.classPK     A >\  f  M             oC org/bouncycastle/jcajce/provider/drbg/DRBG$OneShotHybridEntropySource$1.classPK     A >E  	  j             qC org/bouncycastle/jcajce/provider/drbg/DRBG$OneShotHybridEntropySource$OneShotSignallingEntropySource.classPK     A uU    K             jvC org/bouncycastle/jcajce/provider/drbg/DRBG$OneShotHybridEntropySource.classPK     A aJe    Q             {C org/bouncycastle/jcajce/provider/drbg/DRBG$URLSeededEntropySourceProvider$1.classPK     A \    Q             ~C org/bouncycastle/jcajce/provider/drbg/DRBG$URLSeededEntropySourceProvider$2.classPK     A 0Oz    Q             C org/bouncycastle/jcajce/provider/drbg/DRBG$URLSeededEntropySourceProvider$3.classPK     A If  w  O             مC org/bouncycastle/jcajce/provider/drbg/DRBG$URLSeededEntropySourceProvider.classPK     A m
    0             C org/bouncycastle/jcajce/provider/drbg/DRBG.classPK     A ckGC    9             )C org/bouncycastle/jcajce/provider/drbg/EntropyDaemon.classPK     A qϾ    ;             ӖC org/bouncycastle/jcajce/provider/drbg/EntropyGatherer.classPK     A Ak      D             8C org/bouncycastle/jcajce/provider/drbg/IncrementalEntropySource.classPK     A h  N  N             gC org/bouncycastle/jcajce/provider/drbg/IncrementalEntropySourceProvider$1.classPK     A -^    L             C org/bouncycastle/jcajce/provider/drbg/IncrementalEntropySourceProvider.classPK
 
      A             *             C org/bouncycastle/jcajce/provider/keystore/PK     A u"    ;             fC org/bouncycastle/jcajce/provider/keystore/BC$Mappings.classPK     A {AO   u  2             C org/bouncycastle/jcajce/provider/keystore/BC.classPK     A 
    >             OC org/bouncycastle/jcajce/provider/keystore/BCFKS$Mappings.classPK     A }  ~  5             C org/bouncycastle/jcajce/provider/keystore/BCFKS.classPK     A U    ?             C org/bouncycastle/jcajce/provider/keystore/PKCS12$Mappings.classPK     A Ҿ]    6             C org/bouncycastle/jcajce/provider/keystore/PKCS12.classPK
 
      A             -             C org/bouncycastle/jcajce/provider/keystore/bc/PK     A ;h,     T             YC org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$BCKeyStoreException.classPK     A \N4^  
  R             C org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$BouncyCastleStore.classPK     A      D             C org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$Std.classPK     A 0`    K             
C org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$StoreEntry.classPK     A MQq  !  I             EC org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi$Version1.classPK     A kQ  1  @             -C org/bouncycastle/jcajce/provider/keystore/bc/BcKeyStoreSpi.classPK
 
      A             0             C org/bouncycastle/jcajce/provider/keystore/bcfks/PK     A <k   t  H             :C org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$1.classPK     A \n  
  J             C org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$Def.classPK     A -&  <  P             C org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$DefCompat.classPK     A **  :  P             pC org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$DefShared.classPK     A n+  H  V             C org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$DefSharedCompat.classPK     A 2}.    [             C org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$ExtKeyStoreException.classPK     A P    X             @C org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$SharedKeyStoreSpi.classPK     A Y	_  
  J             _C org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$Std.classPK     A Y8  r  P             C org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$StdCompat.classPK     A   5  P             ]C org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$StdShared.classPK     A /(  C  V             C org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi$StdSharedCompat.classPK     A Ń/  ]  F             oC org/bouncycastle/jcajce/provider/keystore/bcfks/BcFKSKeyStoreSpi.classPK
 
      A             1             )D org/bouncycastle/jcajce/provider/keystore/pkcs12/PK     A J*      J             )D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$1.classPK     A uD  ^  Y             
+D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$BCPKCS12KeyStore.classPK     A ]  @  ]             '-D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$BCPKCS12KeyStore3DES.classPK     A 72~  L  _             6/D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$BCPKCS12KeyStoreAES256.classPK     A R  R  b             A1D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$BCPKCS12KeyStoreAES256GCM.classPK     A %X;    O             P3D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$CertId.classPK     A   e  Z             6D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$DefPKCS12KeyStore.classPK     A Bժ  G  ^             *8D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$DefPKCS12KeyStore3DES.classPK     A Q|f  N  `             <:D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$DefPKCS12KeyStoreAES256.classPK     A 4K[  T  c             R<D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$DefPKCS12KeyStoreAES256GCM.classPK     A y    a             n>D org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$DefaultSecretKeyProvider.classPK     A g    ]             BD org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi$IgnoresCaseHashtable.classPK     A 7    H             ED org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi.classPK
 
      A             /             t}D org/bouncycastle/jcajce/provider/keystore/util/PK     A S,f  
  H             }D org/bouncycastle/jcajce/provider/keystore/util/AdaptingKeyStoreSpi.classPK     A b,    Y             D org/bouncycastle/jcajce/provider/keystore/util/JKSKeyStoreSpi$BCJKSTrustedCertEntry.classPK     A x-    V             PD org/bouncycastle/jcajce/provider/keystore/util/JKSKeyStoreSpi$ErasableByteStream.classPK     A Dz
  )  C             D org/bouncycastle/jcajce/provider/keystore/util/JKSKeyStoreSpi.classPK     A $  b  B             D org/bouncycastle/jcajce/provider/keystore/util/ParameterUtil.classPK
 
      A             +             D org/bouncycastle/jcajce/provider/symmetric/PK     A $     >             /D org/bouncycastle/jcajce/provider/symmetric/AES$AESCCMMAC.classPK     A v     A             D org/bouncycastle/jcajce/provider/symmetric/AES$AESCCMMAC128.classPK     A e<m     A             D org/bouncycastle/jcajce/provider/symmetric/AES$AESCCMMAC192.classPK     A p     A             cD org/bouncycastle/jcajce/provider/symmetric/AES$AESCCMMAC256.classPK     A ιK*  ,  <             ̞D org/bouncycastle/jcajce/provider/symmetric/AES$AESCMAC.classPK     A lR    <             `D org/bouncycastle/jcajce/provider/symmetric/AES$AESGMAC.classPK     A     @             D org/bouncycastle/jcajce/provider/symmetric/AES$AlgParamGen.classPK     A +(  M  C             ]D org/bouncycastle/jcajce/provider/symmetric/AES$AlgParamGenCCM.classPK     A J  M  C             D org/bouncycastle/jcajce/provider/symmetric/AES$AlgParamGenGCM.classPK     A UV     >             ׫D org/bouncycastle/jcajce/provider/symmetric/AES$AlgParams.classPK     A do~  
  A             AD org/bouncycastle/jcajce/provider/symmetric/AES$AlgParamsCCM.classPK     A   
  A             ZD org/bouncycastle/jcajce/provider/symmetric/AES$AlgParamsGCM.classPK     A )0  k  8             lD org/bouncycastle/jcajce/provider/symmetric/AES$CBC.classPK     A fe9  u  ;             D org/bouncycastle/jcajce/provider/symmetric/AES$CBC128.classPK     A #;;  u  ;             D org/bouncycastle/jcajce/provider/symmetric/AES$CBC192.classPK     A źz:  u  ;             HD org/bouncycastle/jcajce/provider/symmetric/AES$CBC256.classPK     A  lK:  v  8             D org/bouncycastle/jcajce/provider/symmetric/AES$CCM.classPK     A 0C    ;             D org/bouncycastle/jcajce/provider/symmetric/AES$CCM128.classPK     A -xKRB    ;             7D org/bouncycastle/jcajce/provider/symmetric/AES$CCM192.classPK     A "A    ;             D org/bouncycastle/jcajce/provider/symmetric/AES$CCM256.classPK     A [  G  ;             D org/bouncycastle/jcajce/provider/symmetric/AES$CCMMac.classPK     A n^    8             D org/bouncycastle/jcajce/provider/symmetric/AES$CFB.classPK     A uf    ;             DD org/bouncycastle/jcajce/provider/symmetric/AES$CFB128.classPK     A P@g    ;             D org/bouncycastle/jcajce/provider/symmetric/AES$CFB192.classPK     A z(U*f    ;             D org/bouncycastle/jcajce/provider/symmetric/AES$CFB256.classPK     A ȈCH  k  :             D org/bouncycastle/jcajce/provider/symmetric/AES$ECB$1.classPK     A [     8             bD org/bouncycastle/jcajce/provider/symmetric/AES$ECB.classPK     A RO  t  =             D org/bouncycastle/jcajce/provider/symmetric/AES$ECB128$1.classPK     A X     ;             mD org/bouncycastle/jcajce/provider/symmetric/AES$ECB128.classPK     A (O  t  =             D org/bouncycastle/jcajce/provider/symmetric/AES$ECB192$1.classPK     A >     ;             D org/bouncycastle/jcajce/provider/symmetric/AES$ECB192.classPK     A sO  t  =             D org/bouncycastle/jcajce/provider/symmetric/AES$ECB256$1.classPK     A 9
     ;             D org/bouncycastle/jcajce/provider/symmetric/AES$ECB256.classPK     A Z3  q  8              D org/bouncycastle/jcajce/provider/symmetric/AES$GCM.classPK     A 1tm?  {  ;             D org/bouncycastle/jcajce/provider/symmetric/AES$GCM128.classPK     A B>  {  ;             AD org/bouncycastle/jcajce/provider/symmetric/AES$GCM192.classPK     A Z =  {  ;             D org/bouncycastle/jcajce/provider/symmetric/AES$GCM256.classPK     A %
4     ?             D org/bouncycastle/jcajce/provider/symmetric/AES$KeyFactory.classPK     A }$    ;             D org/bouncycastle/jcajce/provider/symmetric/AES$KeyGen.classPK     A ]a#   J  >             D org/bouncycastle/jcajce/provider/symmetric/AES$KeyGen128.classPK     A OW   J  >             D org/bouncycastle/jcajce/provider/symmetric/AES$KeyGen192.classPK     A ~   J  >             D org/bouncycastle/jcajce/provider/symmetric/AES$KeyGen256.classPK     A [.X
  R7  =             !D org/bouncycastle/jcajce/provider/symmetric/AES$Mappings.classPK     A }cX    8             D org/bouncycastle/jcajce/provider/symmetric/AES$OFB.classPK     A u%_    ;             D org/bouncycastle/jcajce/provider/symmetric/AES$OFB128.classPK     A {_    ;             jD org/bouncycastle/jcajce/provider/symmetric/AES$OFB192.classPK     A du#^    ;             2D org/bouncycastle/jcajce/provider/symmetric/AES$OFB256.classPK     A mC3  {  B             D org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithAESCBC.classPK     A ծ_(    U             D org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithMD5And128BitAESCBCOpenSSL.classPK     A b*    U             GE org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithMD5And192BitAESCBCOpenSSL.classPK     A ,<u)    U             E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithMD5And256BitAESCBCOpenSSL.classPK     A ^H    I             E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA1AESCBC128.classPK     A &` F    I             _E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA1AESCBC192.classPK     A U/F    I             E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA1AESCBC256.classPK     A aL    K             	E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256AESCBC128.classPK     A 
R5J    K             E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256AESCBC192.classPK     A bG    K             a
E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256AESCBC256.classPK     A E&    P             !E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256And128BitAESBC.classPK     A {&    P             E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256And192BitAESBC.classPK     A &'?$    P             iE org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHA256And256BitAESBC.classPK     A sd'    M             E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHAAnd128BitAESBC.classPK     A Jl!'    M             E org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHAAnd192BitAESBC.classPK     A kjf'    M             OE org/bouncycastle/jcajce/provider/symmetric/AES$PBEWithSHAAnd256BitAESBC.classPK     A ۉ,  2  =             E org/bouncycastle/jcajce/provider/symmetric/AES$Poly1305.classPK     A  t
    C             E org/bouncycastle/jcajce/provider/symmetric/AES$Poly1305KeyGen.classPK     A 9D8  R  @             E org/bouncycastle/jcajce/provider/symmetric/AES$RFC3211Wrap.classPK     A ,^?5  O  @             E org/bouncycastle/jcajce/provider/symmetric/AES$RFC5649Wrap.classPK     A _     9             _E org/bouncycastle/jcajce/provider/symmetric/AES$Wrap.classPK     A   r     <              E org/bouncycastle/jcajce/provider/symmetric/AES$Wrap128.classPK     A j     <             "E org/bouncycastle/jcajce/provider/symmetric/AES$Wrap192.classPK     A ^6     <             #E org/bouncycastle/jcajce/provider/symmetric/AES$Wrap256.classPK     A lEPL     <             $E org/bouncycastle/jcajce/provider/symmetric/AES$WrapPad.classPK     A      ?             E&E org/bouncycastle/jcajce/provider/symmetric/AES$WrapPad128.classPK     A       ?             'E org/bouncycastle/jcajce/provider/symmetric/AES$WrapPad192.classPK     A #_     ?             )E org/bouncycastle/jcajce/provider/symmetric/AES$WrapPad256.classPK     A F    4             *E org/bouncycastle/jcajce/provider/symmetric/AES.classPK     A y#     :             01E org/bouncycastle/jcajce/provider/symmetric/ARC4$Base.classPK     A }    <             2E org/bouncycastle/jcajce/provider/symmetric/ARC4$KeyGen.classPK     A ?~  	  >             4E org/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings.classPK     A 2l,"    I             48E org/bouncycastle/jcajce/provider/symmetric/ARC4$PBEWithSHAAnd128Bit.classPK     A {NE  `  S             9E org/bouncycastle/jcajce/provider/symmetric/ARC4$PBEWithSHAAnd128BitKeyFactory.classPK     A f#
    H             ;E org/bouncycastle/jcajce/provider/symmetric/ARC4$PBEWithSHAAnd40Bit.classPK     A тH  ]  R              =E org/bouncycastle/jcajce/provider/symmetric/ARC4$PBEWithSHAAnd40BitKeyFactory.classPK     A jG  `  5             >E org/bouncycastle/jcajce/provider/symmetric/ARC4.classPK     A .    A             r@E org/bouncycastle/jcajce/provider/symmetric/ARIA$AlgParamGen.classPK     A MӴ     ?             CE org/bouncycastle/jcajce/provider/symmetric/ARIA$AlgParams.classPK     A "@  
  B             EE org/bouncycastle/jcajce/provider/symmetric/ARIA$AlgParamsCCM.classPK     A ER  
  B             :JE org/bouncycastle/jcajce/provider/symmetric/ARIA$AlgParamsGCM.classPK     A zO  
  9             ROE org/bouncycastle/jcajce/provider/symmetric/ARIA$CBC.classPK     A o0  N  9             PE org/bouncycastle/jcajce/provider/symmetric/ARIA$CCM.classPK     A C];    9             hRE org/bouncycastle/jcajce/provider/symmetric/ARIA$CFB.classPK     A {c6  1  ;             
TE org/bouncycastle/jcajce/provider/symmetric/ARIA$ECB$1.classPK     A Ƣ     9             UE org/bouncycastle/jcajce/provider/symmetric/ARIA$ECB.classPK     A k@
+  I  9             VE org/bouncycastle/jcajce/provider/symmetric/ARIA$GCM.classPK     A ZJ    :             XE org/bouncycastle/jcajce/provider/symmetric/ARIA$GMAC.classPK     A 6_I@     @             AZE org/bouncycastle/jcajce/provider/symmetric/ARIA$KeyFactory.classPK     A p$    <             [E org/bouncycastle/jcajce/provider/symmetric/ARIA$KeyGen.classPK     A    M  ?             9]E org/bouncycastle/jcajce/provider/symmetric/ARIA$KeyGen128.classPK     A u   M  ?             p^E org/bouncycastle/jcajce/provider/symmetric/ARIA$KeyGen192.classPK     A    M  ?             _E org/bouncycastle/jcajce/provider/symmetric/ARIA$KeyGen256.classPK     A ۖ     >             `E org/bouncycastle/jcajce/provider/symmetric/ARIA$Mappings.classPK     A Oޕ;    9             ^gE org/bouncycastle/jcajce/provider/symmetric/ARIA$OFB.classPK     A x    >              iE org/bouncycastle/jcajce/provider/symmetric/ARIA$Poly1305.classPK     A {p    D             jE org/bouncycastle/jcajce/provider/symmetric/ARIA$Poly1305KeyGen.classPK     A 
\!    A             lE org/bouncycastle/jcajce/provider/symmetric/ARIA$RFC3211Wrap.classPK     A  Ŝ`     :             mE org/bouncycastle/jcajce/provider/symmetric/ARIA$Wrap.classPK     A h     =             oE org/bouncycastle/jcajce/provider/symmetric/ARIA$WrapPad.classPK     A 6-    5             fpE org/bouncycastle/jcajce/provider/symmetric/ARIA.classPK     A lD    C             rE org/bouncycastle/jcajce/provider/symmetric/Blowfish$AlgParams.classPK     A i׌    =             TtE org/bouncycastle/jcajce/provider/symmetric/Blowfish$CBC.classPK     A qS    >             uE org/bouncycastle/jcajce/provider/symmetric/Blowfish$CMAC.classPK     A Q     =             [wE org/bouncycastle/jcajce/provider/symmetric/Blowfish$ECB.classPK     A      @             xE org/bouncycastle/jcajce/provider/symmetric/Blowfish$KeyGen.classPK     A HN=    B             9zE org/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings.classPK     A tQ"    9             k}E org/bouncycastle/jcajce/provider/symmetric/Blowfish.classPK     A 1=    B             ~E org/bouncycastle/jcajce/provider/symmetric/CAST5$AlgParamGen.classPK     A *:R    @             9E org/bouncycastle/jcajce/provider/symmetric/CAST5$AlgParams.classPK     A "    :             E org/bouncycastle/jcajce/provider/symmetric/CAST5$CBC.classPK     A Kc     :             yE org/bouncycastle/jcajce/provider/symmetric/CAST5$ECB.classPK     A "ǎF
    =             ՉE org/bouncycastle/jcajce/provider/symmetric/CAST5$KeyGen.classPK     A >s  5  ?             ME org/bouncycastle/jcajce/provider/symmetric/CAST5$Mappings.classPK     A 3#    6             E org/bouncycastle/jcajce/provider/symmetric/CAST5.classPK     A C>    @             E org/bouncycastle/jcajce/provider/symmetric/CAST6$AlgParams.classPK     A ͛@8  5  <             zE org/bouncycastle/jcajce/provider/symmetric/CAST6$ECB$1.classPK     A DIT     :             E org/bouncycastle/jcajce/provider/symmetric/CAST6$ECB.classPK     A SCK    ;             rE org/bouncycastle/jcajce/provider/symmetric/CAST6$GMAC.classPK     A Zŏ    =             &E org/bouncycastle/jcajce/provider/symmetric/CAST6$KeyGen.classPK     A 
Ic  d  ?             E org/bouncycastle/jcajce/provider/symmetric/CAST6$Mappings.classPK     A --    ?             lE org/bouncycastle/jcajce/provider/symmetric/CAST6$Poly1305.classPK     A )    E             E org/bouncycastle/jcajce/provider/symmetric/CAST6$Poly1305KeyGen.classPK     A Y9    6             E org/bouncycastle/jcajce/provider/symmetric/CAST6.classPK     A v    E             #E org/bouncycastle/jcajce/provider/symmetric/Camellia$AlgParamGen.classPK     A     C             nE org/bouncycastle/jcajce/provider/symmetric/Camellia$AlgParams.classPK     A D̔    =             E org/bouncycastle/jcajce/provider/symmetric/Camellia$CBC.classPK     A AH#  #  @             fE org/bouncycastle/jcajce/provider/symmetric/Camellia$CBC128.classPK     A Gs^$  #  @             E org/bouncycastle/jcajce/provider/symmetric/Camellia$CBC192.classPK     A M#  #  @             E org/bouncycastle/jcajce/provider/symmetric/Camellia$CBC256.classPK     A ŵ8  A  ?             E org/bouncycastle/jcajce/provider/symmetric/Camellia$ECB$1.classPK     A [Q/     =             E org/bouncycastle/jcajce/provider/symmetric/Camellia$ECB.classPK     A 57M    >             E org/bouncycastle/jcajce/provider/symmetric/Camellia$GMAC.classPK     A I $     D             ѮE org/bouncycastle/jcajce/provider/symmetric/Camellia$KeyFactory.classPK     A tp%    @             ?E org/bouncycastle/jcajce/provider/symmetric/Camellia$KeyGen.classPK     A ],   Y  C             ұE org/bouncycastle/jcajce/provider/symmetric/Camellia$KeyGen128.classPK     A    Y  C             E org/bouncycastle/jcajce/provider/symmetric/Camellia$KeyGen192.classPK     A ]   Y  C             PE org/bouncycastle/jcajce/provider/symmetric/Camellia$KeyGen256.classPK     A D.  7  B             E org/bouncycastle/jcajce/provider/symmetric/Camellia$Mappings.classPK     A *    B             -E org/bouncycastle/jcajce/provider/symmetric/Camellia$Poly1305.classPK     A b"    H             E org/bouncycastle/jcajce/provider/symmetric/Camellia$Poly1305KeyGen.classPK     A R%  (  E             NE org/bouncycastle/jcajce/provider/symmetric/Camellia$RFC3211Wrap.classPK     A ,r     >             E org/bouncycastle/jcajce/provider/symmetric/Camellia$Wrap.classPK     A 1B    A             IE org/bouncycastle/jcajce/provider/symmetric/Camellia$Wrap128.classPK     A L     A             E org/bouncycastle/jcajce/provider/symmetric/Camellia$Wrap192.classPK     A ]f     A             )E org/bouncycastle/jcajce/provider/symmetric/Camellia$Wrap256.classPK     A I.

    9             E org/bouncycastle/jcajce/provider/symmetric/Camellia.classPK     A VL]    A             E org/bouncycastle/jcajce/provider/symmetric/ChaCha$AlgParams.classPK     A VM    G             E org/bouncycastle/jcajce/provider/symmetric/ChaCha$AlgParamsCC1305.classPK     A %     <             E org/bouncycastle/jcajce/provider/symmetric/ChaCha$Base.classPK     A \o     @             dE org/bouncycastle/jcajce/provider/symmetric/ChaCha$Base7539.classPK     A NT    E             E org/bouncycastle/jcajce/provider/symmetric/ChaCha$BaseCC20P1305.classPK     A B+    >             JE org/bouncycastle/jcajce/provider/symmetric/ChaCha$KeyGen.classPK     A ^    B             E org/bouncycastle/jcajce/provider/symmetric/ChaCha$KeyGen7539.classPK     A VuV  '  @             AE org/bouncycastle/jcajce/provider/symmetric/ChaCha$Mappings.classPK     A O<L  e  7             E org/bouncycastle/jcajce/provider/symmetric/ChaCha.classPK     A     @             E org/bouncycastle/jcajce/provider/symmetric/DES$AlgParamGen.classPK     A F  	  8             E org/bouncycastle/jcajce/provider/symmetric/DES$CBC.classPK     A     ;             qE org/bouncycastle/jcajce/provider/symmetric/DES$CBCMAC.classPK     A     9             E org/bouncycastle/jcajce/provider/symmetric/DES$CMAC.classPK     A y    :             qE org/bouncycastle/jcajce/provider/symmetric/DES$DES64.classPK     A YM    D             E org/bouncycastle/jcajce/provider/symmetric/DES$DES64with7816d4.classPK     A      @             E org/bouncycastle/jcajce/provider/symmetric/DES$DES9797Alg3.classPK     A /R    J             CE org/bouncycastle/jcajce/provider/symmetric/DES$DES9797Alg3with7816d4.classPK     A Z     <             
E org/bouncycastle/jcajce/provider/symmetric/DES$DESCFB8.classPK     A O\[Q  	
  E             E org/bouncycastle/jcajce/provider/symmetric/DES$DESPBEKeyFactory.classPK     A ;      8             TE org/bouncycastle/jcajce/provider/symmetric/DES$ECB.classPK     A ]    ?             E org/bouncycastle/jcajce/provider/symmetric/DES$KeyFactory.classPK     A t&  *  A             E org/bouncycastle/jcajce/provider/symmetric/DES$KeyGenerator.classPK     A !b    =             E org/bouncycastle/jcajce/provider/symmetric/DES$Mappings.classPK     A %    ?             E org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithMD2.classPK     A NL  [  I             bE org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithMD2KeyFactory.classPK     A O%    ?             %E org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithMD5.classPK     A *L  [  I             E org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithMD5KeyFactory.classPK     A 2'     @             z F org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithSHA1.classPK     A lZaM  _  J             F org/bouncycastle/jcajce/provider/symmetric/DES$PBEWithSHA1KeyFactory.classPK     A * &!    <             F org/bouncycastle/jcajce/provider/symmetric/DES$RFC3211.classPK     A QK~,0    4             _F org/bouncycastle/jcajce/provider/symmetric/DES.classPK     A n    C             F org/bouncycastle/jcajce/provider/symmetric/DESede$AlgParamGen.classPK     A i!	(  H  ;             7F org/bouncycastle/jcajce/provider/symmetric/DESede$CBC.classPK     A ej    >             F org/bouncycastle/jcajce/provider/symmetric/DESede$CBCMAC.classPK     A _    <             RF org/bouncycastle/jcajce/provider/symmetric/DESede$CMAC.classPK     A 6!    @             F org/bouncycastle/jcajce/provider/symmetric/DESede$DESede64.classPK     A P    J             aF org/bouncycastle/jcajce/provider/symmetric/DESede$DESede64with7816d4.classPK     A     B             )F org/bouncycastle/jcajce/provider/symmetric/DESede$DESedeCFB8.classPK     A      ;             F org/bouncycastle/jcajce/provider/symmetric/DESede$ECB.classPK     A jI  !  B             F org/bouncycastle/jcajce/provider/symmetric/DESede$KeyFactory.classPK     A q)    D             F org/bouncycastle/jcajce/provider/symmetric/DESede$KeyGenerator.classPK     A ˝    E             F org/bouncycastle/jcajce/provider/symmetric/DESede$KeyGenerator3.classPK     A 'SK    @             F org/bouncycastle/jcajce/provider/symmetric/DESede$Mappings.classPK     A .2  <  L             Z&F org/bouncycastle/jcajce/provider/symmetric/DESede$PBEWithSHAAndDES2Key.classPK     A W h    S             (F org/bouncycastle/jcajce/provider/symmetric/DESede$PBEWithSHAAndDES2KeyFactory.classPK     A w0  <  L             )F org/bouncycastle/jcajce/provider/symmetric/DESede$PBEWithSHAAndDES3Key.classPK     A g    S             +F org/bouncycastle/jcajce/provider/symmetric/DESede$PBEWithSHAAndDES3KeyFactory.classPK     A rZ    ?             -F org/bouncycastle/jcajce/provider/symmetric/DESede$RFC3211.classPK     A I#W     <             
/F org/bouncycastle/jcajce/provider/symmetric/DESede$Wrap.classPK     A yp
    7             l0F org/bouncycastle/jcajce/provider/symmetric/DESede.classPK     A Α    E             2F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$AlgParamGen.classPK     A qR   m  H             L6F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$AlgParamGen128.classPK     A \   m  H             7F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$AlgParamGen256.classPK     A B_   m  H             8F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$AlgParamGen512.classPK     A 4xhv    C             *:F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$AlgParams.classPK     A <	&  )  @             ;F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CBC128.classPK     A OS$  )  @             5=F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CBC256.classPK     A (%  )  @             >F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CBC512.classPK     A w1  0  @             Z@F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CCM128.classPK     A <h0  0  @             AF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CCM256.classPK     A p0  0  @             CF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CCM512.classPK     A ;J    @             5EF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CFB128.classPK     A cdH    @             FF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CFB256.classPK     A J)H    @             HF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CFB512.classPK     A yr2C  o  @             YJF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CTR128.classPK     A DB  o  @             
LF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CTR256.classPK     A LB  o  @             MF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$CTR512.classPK     A FI  P  ?             jOF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB$1.classPK     A |n     =              QF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB.classPK     A F7ε    @             }RF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB128.classPK     A ě    @             SF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB256.classPK     A     @             eUF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB512.classPK     A     A             VF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB_128.classPK     A /    A             OXF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB_256.classPK     A  "    A             YF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$ECB_512.classPK     A *1  0  @             :[F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GCM128.classPK     A B5m/  0  @             \F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GCM256.classPK     A $0  0  @             v^F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GCM512.classPK     A ,J    >             `F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GMAC.classPK     A :NM    A             aF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GMAC128.classPK     A 2K    A             cF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GMAC256.classPK     A `JL    A             @eF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$GMAC512.classPK     A 	oE)    @             fF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$KeyGen.classPK     A x   Y  C             hF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$KeyGen128.classPK     A +vX   Y  C             iF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$KeyGen256.classPK     A ה\   Y  C             kF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$KeyGen512.classPK     A H	rZ    B             OlF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$Mappings.classPK     A AM    @             sF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$OFB128.classPK     A * K    @             tF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$OFB256.classPK     A rL    @             vF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$OFB512.classPK     A X)    >             GxF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$Wrap.classPK     A WD    A             yF org/bouncycastle/jcajce/provider/symmetric/DSTU7624$Wrap128.classPK     A -m    A             .{F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$Wrap256.classPK     A D    A             |F org/bouncycastle/jcajce/provider/symmetric/DSTU7624$Wrap512.classPK     A )    9             ~F org/bouncycastle/jcajce/provider/symmetric/DSTU7624.classPK     A yj:    F             F org/bouncycastle/jcajce/provider/symmetric/GOST28147$AlgParamGen.classPK     A t!  
  D             XF org/bouncycastle/jcajce/provider/symmetric/GOST28147$AlgParams.classPK     A a  @
  H             ɊF org/bouncycastle/jcajce/provider/symmetric/GOST28147$BaseAlgParams.classPK     A Kn    >             ZF org/bouncycastle/jcajce/provider/symmetric/GOST28147$CBC.classPK     A pu    H             F org/bouncycastle/jcajce/provider/symmetric/GOST28147$CryptoProWrap.classPK     A "P     >             \F org/bouncycastle/jcajce/provider/symmetric/GOST28147$ECB.classPK     A 7";  c  ?             ÕF org/bouncycastle/jcajce/provider/symmetric/GOST28147$GCFB.classPK     A Լ    C             kF org/bouncycastle/jcajce/provider/symmetric/GOST28147$GostWrap.classPK     A TG+    A             ݘF org/bouncycastle/jcajce/provider/symmetric/GOST28147$KeyGen.classPK     A ?&     >             wF org/bouncycastle/jcajce/provider/symmetric/GOST28147$Mac.classPK     A Is  L  C             ӛF org/bouncycastle/jcajce/provider/symmetric/GOST28147$Mappings.classPK     A $8Y  	  :             F org/bouncycastle/jcajce/provider/symmetric/GOST28147.classPK     A 't+  /  B             xF org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$CBC.classPK     A UD  s  B             F org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$CTR.classPK     A cw@     B             ǦF org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$ECB.classPK     A ﷃI  v  C             7F org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$GCFB.classPK     A <wR    D             F org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$GCFB8.classPK     A "05    E             F org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$KeyGen.classPK     A K)  	  B             ]F org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mac.classPK     A     G             F org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mappings.classPK     A vF  t  B             F org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$OFB.classPK     A @K    >             F org/bouncycastle/jcajce/provider/symmetric/GOST3412_2015.classPK     A 
     >             PF org/bouncycastle/jcajce/provider/symmetric/Grain128$Base.classPK     A .C    @             F org/bouncycastle/jcajce/provider/symmetric/Grain128$KeyGen.classPK     A y    B             4F org/bouncycastle/jcajce/provider/symmetric/Grain128$Mappings.classPK     A      9             F org/bouncycastle/jcajce/provider/symmetric/Grain128.classPK     A 
	9=    B             F org/bouncycastle/jcajce/provider/symmetric/Grainv1$AlgParams.classPK     A      =             VF org/bouncycastle/jcajce/provider/symmetric/Grainv1$Base.classPK     A /    ?             F org/bouncycastle/jcajce/provider/symmetric/Grainv1$KeyGen.classPK     A wql  
  A             3F org/bouncycastle/jcajce/provider/symmetric/Grainv1$Mappings.classPK     A tH     8             F org/bouncycastle/jcajce/provider/symmetric/Grainv1.classPK     A W    @             F org/bouncycastle/jcajce/provider/symmetric/HC128$AlgParams.classPK     A Wg     ;             ~F org/bouncycastle/jcajce/provider/symmetric/HC128$Base.classPK     A ANQ
    =             F org/bouncycastle/jcajce/provider/symmetric/HC128$KeyGen.classPK     A Z    ?             XF org/bouncycastle/jcajce/provider/symmetric/HC128$Mappings.classPK     A      6             F org/bouncycastle/jcajce/provider/symmetric/HC128.classPK     A Uc    @             -F org/bouncycastle/jcajce/provider/symmetric/HC256$AlgParams.classPK     A xy     ;             F org/bouncycastle/jcajce/provider/symmetric/HC256$Base.classPK     A b<=    =             F org/bouncycastle/jcajce/provider/symmetric/HC256$KeyGen.classPK     A E8    ?             uF org/bouncycastle/jcajce/provider/symmetric/HC256$Mappings.classPK     A t(     6             F org/bouncycastle/jcajce/provider/symmetric/HC256.classPK     A T    >             JF org/bouncycastle/jcajce/provider/symmetric/HKDF$HKDFBase.classPK     A x    D             XF org/bouncycastle/jcajce/provider/symmetric/HKDF$HKDFwithSHA256.classPK     A >    D             iF org/bouncycastle/jcajce/provider/symmetric/HKDF$HKDFwithSHA384.classPK     A *>    D             zF org/bouncycastle/jcajce/provider/symmetric/HKDF$HKDFwithSHA512.classPK     A > C  5  >             F org/bouncycastle/jcajce/provider/symmetric/HKDF$Mappings.classPK     A 	>  r  5             F org/bouncycastle/jcajce/provider/symmetric/HKDF.classPK     A "    A             sF org/bouncycastle/jcajce/provider/symmetric/IDEA$AlgParamGen.classPK     A     ?             F org/bouncycastle/jcajce/provider/symmetric/IDEA$AlgParams.classPK     A u(  B  9             F org/bouncycastle/jcajce/provider/symmetric/IDEA$CBC.classPK     A RA!    =             F org/bouncycastle/jcajce/provider/symmetric/IDEA$CFB8Mac.classPK     A wj     9             F org/bouncycastle/jcajce/provider/symmetric/IDEA$ECB.classPK     A     <             pF org/bouncycastle/jcajce/provider/symmetric/IDEA$KeyGen.classPK     A     9             F org/bouncycastle/jcajce/provider/symmetric/IDEA$Mac.classPK     A ĕ    >             cF org/bouncycastle/jcajce/provider/symmetric/IDEA$Mappings.classPK     A  ~B<  f  G             dF org/bouncycastle/jcajce/provider/symmetric/IDEA$PBEWithSHAAndIDEA.classPK     A #    M             F org/bouncycastle/jcajce/provider/symmetric/IDEA$PBEWithSHAAndIDEAKeyGen.classPK     A A)l    5             F org/bouncycastle/jcajce/provider/symmetric/IDEA.classPK     A     D             F org/bouncycastle/jcajce/provider/symmetric/Noekeon$AlgParamGen.classPK     A tѵ    B             F org/bouncycastle/jcajce/provider/symmetric/Noekeon$AlgParams.classPK     A \2l8  =  >             ?F org/bouncycastle/jcajce/provider/symmetric/Noekeon$ECB$1.classPK     A V|     <              G org/bouncycastle/jcajce/provider/symmetric/Noekeon$ECB.classPK     A #J    =             :G org/bouncycastle/jcajce/provider/symmetric/Noekeon$GMAC.classPK     A `f
    ?             G org/bouncycastle/jcajce/provider/symmetric/Noekeon$KeyGen.classPK     A ĭ    A             iG org/bouncycastle/jcajce/provider/symmetric/Noekeon$Mappings.classPK     A 4i0    A             [G org/bouncycastle/jcajce/provider/symmetric/Noekeon$Poly1305.classPK     A (/l    G             	G org/bouncycastle/jcajce/provider/symmetric/Noekeon$Poly1305KeyGen.classPK     A <4DH  Z  8             yG org/bouncycastle/jcajce/provider/symmetric/Noekeon.classPK     A ҉a    F             '
G org/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$Mappings.classPK     A *    C             zG org/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$PBKDF.classPK     A 皱   m  =             G org/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF.classPK     A ܣ/    D             G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$AlgParams.classPK     A ʄ*    C             G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$Mappings.classPK     A    l  :             G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1.classPK     A fӾb  	  D             G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$AlgParams.classPK     A (t    E             "G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$BasePBKDF2.classPK     A r'    C             (G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings.classPK     A W     I             #-G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2with8BIT.classPK     A O     M             .G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withGOST3411.classPK     A i!     K             /G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA224.classPK     A 
(s     K             Y1G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA256.classPK     A      K             2G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA384.classPK     A 6\     M             ,4G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA3_224.classPK     A S:q     M             5G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA3_256.classPK     A Zz|     M             	7G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA3_384.classPK     A 0S     M             x8G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA3_512.classPK     A xO     K             9G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA512.classPK     A 
?<     O             Q;G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA512_224.classPK     A e     O             <G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSHA512_256.classPK     A mQ     H             7>G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withSM3.classPK     A $     I             ?G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$PBKDF2withUTF8.classPK     A     :             @G org/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2.classPK     A =d<jp  F	  D             WEG org/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$AlgParams.classPK     A     C             9JG org/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings.classPK     A st   l  :             LG org/bouncycastle/jcajce/provider/symmetric/PBEPKCS12.classPK     A ^3'    @             MG org/bouncycastle/jcajce/provider/symmetric/Poly1305$KeyGen.classPK     A V&     =             OOG org/bouncycastle/jcajce/provider/symmetric/Poly1305$Mac.classPK     A [    B             PG org/bouncycastle/jcajce/provider/symmetric/Poly1305$Mappings.classPK     A >)     9             SG org/bouncycastle/jcajce/provider/symmetric/Poly1305.classPK     A N5  r  @             STG org/bouncycastle/jcajce/provider/symmetric/RC2$AlgParamGen.classPK     A 4  /  >             WG org/bouncycastle/jcajce/provider/symmetric/RC2$AlgParams.classPK     A n[  	  8             ZeG org/bouncycastle/jcajce/provider/symmetric/RC2$CBC.classPK     A 2u    ;             fG org/bouncycastle/jcajce/provider/symmetric/RC2$CBCMAC.classPK     A ѝC     <             XhG org/bouncycastle/jcajce/provider/symmetric/RC2$CFB8MAC.classPK     A ^o     8             iG org/bouncycastle/jcajce/provider/symmetric/RC2$ECB.classPK     A 8E	    A             4kG org/bouncycastle/jcajce/provider/symmetric/RC2$KeyGenerator.classPK     A m*  N  =             lG org/bouncycastle/jcajce/provider/symmetric/RC2$Mappings.classPK     A e#G  D  I             rG org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithMD2KeyFactory.classPK     A 5'  *  E             tG org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithMD5AndRC2.classPK     A VmH  D  I             6vG org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithMD5KeyFactory.classPK     A H*  ,  F             wG org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHA1AndRC2.classPK     A uI  H  J             yG org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHA1KeyFactory.classPK     A 8V  g  R             T{G org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHAAnd128BitKeyFactory.classPK     A R2  7  K             *}G org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHAAnd128BitRC2.classPK     A 벴P  b  Q             ~G org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHAAnd40BitKeyFactory.classPK     A l6.  4  J             G org/bouncycastle/jcajce/provider/symmetric/RC2$PBEWithSHAAnd40BitRC2.classPK     A 1)     9             JG org/bouncycastle/jcajce/provider/symmetric/RC2$Wrap.classPK     A ?{  :  4             G org/bouncycastle/jcajce/provider/symmetric/RC2.classPK     A r    @             G org/bouncycastle/jcajce/provider/symmetric/RC5$AlgParamGen.classPK     A [:     >             TG org/bouncycastle/jcajce/provider/symmetric/RC5$AlgParams.classPK     A '#    :             G org/bouncycastle/jcajce/provider/symmetric/RC5$CBC32.classPK     A ؗo    >             BG org/bouncycastle/jcajce/provider/symmetric/RC5$CFB8Mac32.classPK     A      :             ˍG org/bouncycastle/jcajce/provider/symmetric/RC5$ECB32.classPK     A Q{     :             +G org/bouncycastle/jcajce/provider/symmetric/RC5$ECB64.classPK     A w
    =             G org/bouncycastle/jcajce/provider/symmetric/RC5$KeyGen32.classPK     A ٰ
    =             G org/bouncycastle/jcajce/provider/symmetric/RC5$KeyGen64.classPK     A y    :             zG org/bouncycastle/jcajce/provider/symmetric/RC5$Mac32.classPK     A [ç    =             G org/bouncycastle/jcajce/provider/symmetric/RC5$Mappings.classPK     A ֋p^    4             G org/bouncycastle/jcajce/provider/symmetric/RC5.classPK     A     @             ЙG org/bouncycastle/jcajce/provider/symmetric/RC6$AlgParamGen.classPK     A      >             G org/bouncycastle/jcajce/provider/symmetric/RC6$AlgParams.classPK     A U  
  8             |G org/bouncycastle/jcajce/provider/symmetric/RC6$CBC.classPK     A /s:    8             G org/bouncycastle/jcajce/provider/symmetric/RC6$CFB.classPK     A 4  -  :             G org/bouncycastle/jcajce/provider/symmetric/RC6$ECB$1.classPK     A      8             5G org/bouncycastle/jcajce/provider/symmetric/RC6$ECB.classPK     A ίI    9             G org/bouncycastle/jcajce/provider/symmetric/RC6$GMAC.classPK     A ɫ.
    ;             6G org/bouncycastle/jcajce/provider/symmetric/RC6$KeyGen.classPK     A 	b  X  =             G org/bouncycastle/jcajce/provider/symmetric/RC6$Mappings.classPK     A c$N;    8             vG org/bouncycastle/jcajce/provider/symmetric/RC6$OFB.classPK     A 
    =             G org/bouncycastle/jcajce/provider/symmetric/RC6$Poly1305.classPK     A ],    C             G org/bouncycastle/jcajce/provider/symmetric/RC6$Poly1305KeyGen.classPK     A 6q    4             )G org/bouncycastle/jcajce/provider/symmetric/RC6.classPK     A A
}    C             G org/bouncycastle/jcajce/provider/symmetric/Rijndael$AlgParams.classPK     A K9  A  ?             oG org/bouncycastle/jcajce/provider/symmetric/Rijndael$ECB$1.classPK     A td     =             G org/bouncycastle/jcajce/provider/symmetric/Rijndael$ECB.classPK     A v
    @             oG org/bouncycastle/jcajce/provider/symmetric/Rijndael$KeyGen.classPK     A p    B             G org/bouncycastle/jcajce/provider/symmetric/Rijndael$Mappings.classPK     A b     9             iG org/bouncycastle/jcajce/provider/symmetric/Rijndael.classPK     A h(  $  B             кG org/bouncycastle/jcajce/provider/symmetric/SCRYPT$BasePBKDF2.classPK     A i?    @             hG org/bouncycastle/jcajce/provider/symmetric/SCRYPT$Mappings.classPK     A 6      F             G org/bouncycastle/jcajce/provider/symmetric/SCRYPT$ScryptWithUTF8.classPK     A 8QG$     7             zG org/bouncycastle/jcajce/provider/symmetric/SCRYPT.classPK     A     A             G org/bouncycastle/jcajce/provider/symmetric/SEED$AlgParamGen.classPK     A #     ?             G org/bouncycastle/jcajce/provider/symmetric/SEED$AlgParams.classPK     A <f`    9             G org/bouncycastle/jcajce/provider/symmetric/SEED$CBC.classPK     A VW    :             G org/bouncycastle/jcajce/provider/symmetric/SEED$CMAC.classPK     A ^
.)5  1  ;             G org/bouncycastle/jcajce/provider/symmetric/SEED$ECB$1.classPK     A Ot     9             'G org/bouncycastle/jcajce/provider/symmetric/SEED$ECB.classPK     A A&J    :             G org/bouncycastle/jcajce/provider/symmetric/SEED$GMAC.classPK     A C     @             1G org/bouncycastle/jcajce/provider/symmetric/SEED$KeyFactory.classPK     A m    <             G org/bouncycastle/jcajce/provider/symmetric/SEED$KeyGen.classPK     A YL  m	  >             G org/bouncycastle/jcajce/provider/symmetric/SEED$Mappings.classPK     A ,
    >             >G org/bouncycastle/jcajce/provider/symmetric/SEED$Poly1305.classPK     A     D             G org/bouncycastle/jcajce/provider/symmetric/SEED$Poly1305KeyGen.classPK     A 
     :             SG org/bouncycastle/jcajce/provider/symmetric/SEED$Wrap.classPK     A zE  m  5             G org/bouncycastle/jcajce/provider/symmetric/SEED.classPK     A 8-    @             G org/bouncycastle/jcajce/provider/symmetric/SM4$AlgParamGen.classPK     A IU     >             G org/bouncycastle/jcajce/provider/symmetric/SM4$AlgParams.classPK     A  eA    9             IG org/bouncycastle/jcajce/provider/symmetric/SM4$CMAC.classPK     A aT4  -  :             G org/bouncycastle/jcajce/provider/symmetric/SM4$ECB$1.classPK     A      8             aG org/bouncycastle/jcajce/provider/symmetric/SM4$ECB.classPK     A 1";I    9             G org/bouncycastle/jcajce/provider/symmetric/SM4$GMAC.classPK     A >    ;             bG org/bouncycastle/jcajce/provider/symmetric/SM4$KeyGen.classPK     A 2    =             G org/bouncycastle/jcajce/provider/symmetric/SM4$Mappings.classPK     A g%    =             G org/bouncycastle/jcajce/provider/symmetric/SM4$Poly1305.classPK     A w    C             MG org/bouncycastle/jcajce/provider/symmetric/SM4$Poly1305KeyGen.classPK     A WS  ~  4             G org/bouncycastle/jcajce/provider/symmetric/SM4.classPK     A ϐ    B             G org/bouncycastle/jcajce/provider/symmetric/Salsa20$AlgParams.classPK     A @r]     =             G org/bouncycastle/jcajce/provider/symmetric/Salsa20$Base.classPK     A x
    ?             gG org/bouncycastle/jcajce/provider/symmetric/Salsa20$KeyGen.classPK     A /
  
  A             G org/bouncycastle/jcajce/provider/symmetric/Salsa20$Mappings.classPK     A ܜ     8             ]G org/bouncycastle/jcajce/provider/symmetric/Salsa20.classPK     A jJ    B             G org/bouncycastle/jcajce/provider/symmetric/Serpent$AlgParams.classPK     A ߫    <             4G org/bouncycastle/jcajce/provider/symmetric/Serpent$CBC.classPK     A S$     ?             G org/bouncycastle/jcajce/provider/symmetric/Serpent$CBC128.classPK     A 27E$     ?             IG org/bouncycastle/jcajce/provider/symmetric/Serpent$CBC192.classPK     A ҙyV$     ?              H org/bouncycastle/jcajce/provider/symmetric/Serpent$CBC256.classPK     A 5=    <             kH org/bouncycastle/jcajce/provider/symmetric/Serpent$CFB.classPK     A UF    ?             H org/bouncycastle/jcajce/provider/symmetric/Serpent$CFB128.classPK     A *F    ?             H org/bouncycastle/jcajce/provider/symmetric/Serpent$CFB192.classPK     A dJF    ?             xH org/bouncycastle/jcajce/provider/symmetric/Serpent$CFB256.classPK     A 
8  =  >             +	H org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB$1.classPK     A '     <             
H org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB.classPK     A 0;  F  A             'H org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB128$1.classPK     A j     ?             
H org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB128.classPK     A  L@;  F  A             7H org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB192$1.classPK     A N     ?             H org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB192.classPK     A m;  F  A             EH org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB256$1.classPK     A {.B     ?             H org/bouncycastle/jcajce/provider/symmetric/Serpent$ECB256.classPK     A -/    ?             SH org/bouncycastle/jcajce/provider/symmetric/Serpent$KeyGen.classPK     A (  
  A             H org/bouncycastle/jcajce/provider/symmetric/Serpent$Mappings.classPK     A X>    <             RH org/bouncycastle/jcajce/provider/symmetric/Serpent$OFB.classPK     A bDH    ?             H org/bouncycastle/jcajce/provider/symmetric/Serpent$OFB128.classPK     A p^H    ?             H org/bouncycastle/jcajce/provider/symmetric/Serpent$OFB192.classPK     A x.H    ?             d H org/bouncycastle/jcajce/provider/symmetric/Serpent$OFB256.classPK     A <    A             "H org/bouncycastle/jcajce/provider/symmetric/Serpent$Poly1305.classPK     A qb@    G             #H org/bouncycastle/jcajce/provider/symmetric/Serpent$Poly1305KeyGen.classPK     A ZM    D             7%H org/bouncycastle/jcajce/provider/symmetric/Serpent$SerpentGMAC.classPK     A x0    C             &H org/bouncycastle/jcajce/provider/symmetric/Serpent$TAlgParams.classPK     A  >  @  ?             m(H org/bouncycastle/jcajce/provider/symmetric/Serpent$TECB$1.classPK     A Ai     =             *H org/bouncycastle/jcajce/provider/symmetric/Serpent$TECB.classPK     A 8'    @             r+H org/bouncycastle/jcajce/provider/symmetric/Serpent$TKeyGen.classPK     A 6#O    E             ,H org/bouncycastle/jcajce/provider/symmetric/Serpent$TSerpentGMAC.classPK     A g'SC    8             .H org/bouncycastle/jcajce/provider/symmetric/Serpent.classPK     A V    D             Y1H org/bouncycastle/jcajce/provider/symmetric/Shacal2$AlgParamGen.classPK     A 7    B             4H org/bouncycastle/jcajce/provider/symmetric/Shacal2$AlgParams.classPK     A $    <             6H org/bouncycastle/jcajce/provider/symmetric/Shacal2$CBC.classPK     A -),    =             7H org/bouncycastle/jcajce/provider/symmetric/Shacal2$CMAC.classPK     A 9  =  >             9H org/bouncycastle/jcajce/provider/symmetric/Shacal2$ECB$1.classPK     A f     <             :H org/bouncycastle/jcajce/provider/symmetric/Shacal2$ECB.classPK     A '    ?             <H org/bouncycastle/jcajce/provider/symmetric/Shacal2$KeyGen.classPK     A }:he    A             =H org/bouncycastle/jcajce/provider/symmetric/Shacal2$Mappings.classPK     A >U~2    8             n@H org/bouncycastle/jcajce/provider/symmetric/Shacal2.classPK     A 
    ?             BH org/bouncycastle/jcajce/provider/symmetric/SipHash$KeyGen.classPK     A è(     >             CH org/bouncycastle/jcajce/provider/symmetric/SipHash$Mac24.classPK     A |}L     >             DH org/bouncycastle/jcajce/provider/symmetric/SipHash$Mac48.classPK     A LE:    A             ;FH org/bouncycastle/jcajce/provider/symmetric/SipHash$Mappings.classPK     A pyI+     8             HH org/bouncycastle/jcajce/provider/symmetric/SipHash.classPK     A 0    B             CJH org/bouncycastle/jcajce/provider/symmetric/SipHash128$KeyGen.classPK     A tQ     A             KH org/bouncycastle/jcajce/provider/symmetric/SipHash128$Mac24.classPK     A w     A             #MH org/bouncycastle/jcajce/provider/symmetric/SipHash128$Mac48.classPK     A B    D             NH org/bouncycastle/jcajce/provider/symmetric/SipHash128$Mappings.classPK     A      ;             ?QH org/bouncycastle/jcajce/provider/symmetric/SipHash128.classPK     A t    C             RH org/bouncycastle/jcajce/provider/symmetric/Skipjack$AlgParams.classPK     A Ӥ     =             TH org/bouncycastle/jcajce/provider/symmetric/Skipjack$ECB.classPK     A 
    @             {UH org/bouncycastle/jcajce/provider/symmetric/Skipjack$KeyGen.classPK     A Ay    =             VH org/bouncycastle/jcajce/provider/symmetric/Skipjack$Mac.classPK     A 9`>    A             vXH org/bouncycastle/jcajce/provider/symmetric/Skipjack$MacCFB8.classPK     A Kg  
  B             ZH org/bouncycastle/jcajce/provider/symmetric/Skipjack$Mappings.classPK     A .!    9             \H org/bouncycastle/jcajce/provider/symmetric/Skipjack.classPK     A {\    K             b^H org/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider.classPK     A X*"     >             `H org/bouncycastle/jcajce/provider/symmetric/TEA$AlgParams.classPK     A 4e     8             cbH org/bouncycastle/jcajce/provider/symmetric/TEA$ECB.classPK     A T{    ;             cH org/bouncycastle/jcajce/provider/symmetric/TEA$KeyGen.classPK     A Sx    =             .eH org/bouncycastle/jcajce/provider/symmetric/TEA$Mappings.classPK     A f+     4             gH org/bouncycastle/jcajce/provider/symmetric/TEA.classPK     A :    @             hH org/bouncycastle/jcajce/provider/symmetric/TLSKDF$Mappings.classPK     A uP!\    =             kH org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS10.classPK     A C8    =             nH org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS11.classPK     A e,    =             `pH org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS12.classPK     A jnS  y  G             sH org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS12withSHA256.classPK     A H:  C  G             muH org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS12withSHA384.classPK     A :  C  G             wH org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLS12withSHA512.classPK     A 'a\q     M             xH org/bouncycastle/jcajce/provider/symmetric/TLSKDF$TLSKeyMaterialFactory.classPK     A S  	  7             FzH org/bouncycastle/jcajce/provider/symmetric/TLSKDF.classPK     A $    I             BH org/bouncycastle/jcajce/provider/symmetric/Threefish$AlgParams_1024.classPK     A H
    H             ǀH org/bouncycastle/jcajce/provider/symmetric/Threefish$AlgParams_256.classPK     A LEf*    H             HH org/bouncycastle/jcajce/provider/symmetric/Threefish$AlgParams_512.classPK     A tm'    D             ɃH org/bouncycastle/jcajce/provider/symmetric/Threefish$CMAC_1024.classPK     A m&    C             bH org/bouncycastle/jcajce/provider/symmetric/Threefish$CMAC_256.classPK     A bu=i&    C             H org/bouncycastle/jcajce/provider/symmetric/Threefish$CMAC_512.classPK     A +%    C             H org/bouncycastle/jcajce/provider/symmetric/Threefish$ECB_1024.classPK     A Ѱ    B             H org/bouncycastle/jcajce/provider/symmetric/Threefish$ECB_256.classPK     A 2r    B             xH org/bouncycastle/jcajce/provider/symmetric/Threefish$ECB_512.classPK     A MV    F             H org/bouncycastle/jcajce/provider/symmetric/Threefish$KeyGen_1024.classPK     A     E             uH org/bouncycastle/jcajce/provider/symmetric/Threefish$KeyGen_256.classPK     A 
    E             H org/bouncycastle/jcajce/provider/symmetric/Threefish$KeyGen_512.classPK     A :q    C             H org/bouncycastle/jcajce/provider/symmetric/Threefish$Mappings.classPK     A   H  :             H org/bouncycastle/jcajce/provider/symmetric/Threefish.classPK     A B}    B             H org/bouncycastle/jcajce/provider/symmetric/Twofish$AlgParams.classPK     A 9  =  >             +H org/bouncycastle/jcajce/provider/symmetric/Twofish$ECB$1.classPK     A ݬ     <             ЙH org/bouncycastle/jcajce/provider/symmetric/Twofish$ECB.classPK     A K    =             )H org/bouncycastle/jcajce/provider/symmetric/Twofish$GMAC.classPK     A l<    ?             ߜH org/bouncycastle/jcajce/provider/symmetric/Twofish$KeyGen.classPK     A R    A             XH org/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings.classPK     A >h(  +  C             H org/bouncycastle/jcajce/provider/symmetric/Twofish$PBEWithSHA.classPK     A DH`$    M             <H org/bouncycastle/jcajce/provider/symmetric/Twofish$PBEWithSHAKeyFactory.classPK     A *    A             ۤH org/bouncycastle/jcajce/provider/symmetric/Twofish$Poly1305.classPK     A 4	)     G             gH org/bouncycastle/jcajce/provider/symmetric/Twofish$Poly1305KeyGen.classPK     A i    8             H org/bouncycastle/jcajce/provider/symmetric/Twofish.classPK     A u     :             ˩H org/bouncycastle/jcajce/provider/symmetric/VMPC$Base.classPK     A G    <             )H org/bouncycastle/jcajce/provider/symmetric/VMPC$KeyGen.classPK     A Ha:     9             H org/bouncycastle/jcajce/provider/symmetric/VMPC$Mac.classPK     A   @  >             H org/bouncycastle/jcajce/provider/symmetric/VMPC$Mappings.classPK     A i     5             wH org/bouncycastle/jcajce/provider/symmetric/VMPC.classPK     A 
%J     >             ѱH org/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Base.classPK     A fA    @             :H org/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$KeyGen.classPK     A {:    B             H org/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Mappings.classPK     A ."     9             H org/bouncycastle/jcajce/provider/symmetric/VMPCKSA3.classPK     A ]    C             qH org/bouncycastle/jcajce/provider/symmetric/XSalsa20$AlgParams.classPK     A #     >             H org/bouncycastle/jcajce/provider/symmetric/XSalsa20$Base.classPK     A  
9
    @             MH org/bouncycastle/jcajce/provider/symmetric/XSalsa20$KeyGen.classPK     A @    B             ȼH org/bouncycastle/jcajce/provider/symmetric/XSalsa20$Mappings.classPK     A E    9             FH org/bouncycastle/jcajce/provider/symmetric/XSalsa20.classPK     A      ?             H org/bouncycastle/jcajce/provider/symmetric/XTEA$AlgParams.classPK     A      9             H org/bouncycastle/jcajce/provider/symmetric/XTEA$ECB.classPK     A ;    <             sH org/bouncycastle/jcajce/provider/symmetric/XTEA$KeyGen.classPK     A `n    >             H org/bouncycastle/jcajce/provider/symmetric/XTEA$Mappings.classPK     A L&     5             [H org/bouncycastle/jcajce/provider/symmetric/XTEA.classPK     A l`=     >             H org/bouncycastle/jcajce/provider/symmetric/Zuc$AlgParams.classPK     A ]l    >             'H org/bouncycastle/jcajce/provider/symmetric/Zuc$KeyGen128.classPK     A eq    >             H org/bouncycastle/jcajce/provider/symmetric/Zuc$KeyGen256.classPK     A 2!    =             H org/bouncycastle/jcajce/provider/symmetric/Zuc$Mappings.classPK     A ,m     ;             ,H org/bouncycastle/jcajce/provider/symmetric/Zuc$Zuc128.classPK     A y$     ;             H org/bouncycastle/jcajce/provider/symmetric/Zuc$Zuc256.classPK     A  u6     >             H org/bouncycastle/jcajce/provider/symmetric/Zuc$ZucMac128.classPK     A t     >             XH org/bouncycastle/jcajce/provider/symmetric/Zuc$ZucMac256.classPK     A h\     A             H org/bouncycastle/jcajce/provider/symmetric/Zuc$ZucMac256_32.classPK     A      A             $H org/bouncycastle/jcajce/provider/symmetric/Zuc$ZucMac256_64.classPK     A ,_    4             H org/bouncycastle/jcajce/provider/symmetric/Zuc.classPK
 
      A             0             NH org/bouncycastle/jcajce/provider/symmetric/util/PK     A V  ]  >             H org/bouncycastle/jcajce/provider/symmetric/util/BCPBEKey.classPK     A P#  ^  U             H org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameterGenerator.classPK     A @  !  M             1H org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameters.classPK     A d-
    \             H org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$AEADGenericBlockCipher.classPK     A m    \             /H org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedFPEBlockCipher.classPK     A AT  )	  `             H org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$BufferedGenericBlockCipher.classPK     A .1  n  X             ^H org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher$GenericBlockCipher.classPK     A    X  E             H org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.classPK     A $[>    F             I org/bouncycastle/jcajce/provider/symmetric/util/BaseKeyGenerator.classPK     A ;B
    =             I org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.classPK     A ԯX    J             3&I org/bouncycastle/jcajce/provider/symmetric/util/BaseSecretKeyFactory.classPK     A ڏ+X    F             *I org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.classPK     A @    Y             o7I org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher$ErasableOutputStream.classPK     A Ff;  "  d             69I org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher$InvalidKeyOrParametersException.classPK     A n~  &  D             ;I org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.classPK     A (ߋ      I             JI org/bouncycastle/jcajce/provider/symmetric/util/BlockCipherProvider.classPK     A     A             KI org/bouncycastle/jcajce/provider/symmetric/util/ClassUtil$1.classPK     A t  5  ?             (NI org/bouncycastle/jcajce/provider/symmetric/util/ClassUtil.classPK     A 0K    C             aPI org/bouncycastle/jcajce/provider/symmetric/util/GcmSpecUtil$1.classPK     A Q    C             RI org/bouncycastle/jcajce/provider/symmetric/util/GcmSpecUtil$2.classPK     A ^> i    C             TI org/bouncycastle/jcajce/provider/symmetric/util/GcmSpecUtil$3.classPK     A C,=  G  C             WI org/bouncycastle/jcajce/provider/symmetric/util/GcmSpecUtil$4.classPK     A ȓ    A             =ZI org/bouncycastle/jcajce/provider/symmetric/util/GcmSpecUtil.classPK     A EY    K             ~`I org/bouncycastle/jcajce/provider/symmetric/util/IvAlgorithmParameters.classPK     A Z9{	    >             PeI org/bouncycastle/jcajce/provider/symmetric/util/PBE$Util.classPK     A A	    9             7oI org/bouncycastle/jcajce/provider/symmetric/util/PBE.classPK     A vŬ
    I             NqI org/bouncycastle/jcajce/provider/symmetric/util/PBESecretKeyFactory.classPK     A lm  l  >             tI org/bouncycastle/jcajce/provider/symmetric/util/SpecUtil.classPK
 
      A             &             vI org/bouncycastle/jcajce/provider/util/PK     A 0y     =             vI org/bouncycastle/jcajce/provider/util/AlgorithmProvider.classPK     A N  L  G             xI org/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider.classPK     A Ң   z  F             }I org/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter.classPK     A R}e  u  =             z~I org/bouncycastle/jcajce/provider/util/BadBlockException.classPK     A J  ;  9             I org/bouncycastle/jcajce/provider/util/DigestFactory.classPK     A l  ^  9             I org/bouncycastle/jcajce/provider/util/SecretKeyUtil.classPK
 
      A                          I org/bouncycastle/jcajce/spec/PK     A Ԃr  >  4             .I org/bouncycastle/jcajce/spec/AEADParameterSpec.classPK     A )Ts    A             I org/bouncycastle/jcajce/spec/CompositeAlgorithmSpec$Builder.classPK     A >J    9             I org/bouncycastle/jcajce/spec/CompositeAlgorithmSpec.classPK     A Sˮ3J  K  9             zI org/bouncycastle/jcajce/spec/CompositeSignatureSpec.classPK     A ss\    7             +I org/bouncycastle/jcajce/spec/ContextParameterSpec.classPK     A +/`    8             I org/bouncycastle/jcajce/spec/DHDomainParameterSpec.classPK     A *H%  A  ;             I org/bouncycastle/jcajce/spec/DHExtendedPrivateKeySpec.classPK     A P"  ?  :             @I org/bouncycastle/jcajce/spec/DHExtendedPublicKeySpec.classPK     A     3             ʚI org/bouncycastle/jcajce/spec/DHUParameterSpec.classPK     A nC  x  8             
I org/bouncycastle/jcajce/spec/DSTU4145ParameterSpec.classPK     A ٜJ  \  5             I org/bouncycastle/jcajce/spec/EdDSAParameterSpec.classPK     A D9    3             I org/bouncycastle/jcajce/spec/FPEParameterSpec.classPK     A Hp#  	  9             QI org/bouncycastle/jcajce/spec/GOST28147ParameterSpec.classPK     A =-    =             ۪I org/bouncycastle/jcajce/spec/GOST28147WrapParameterSpec.classPK     A     8             XI org/bouncycastle/jcajce/spec/GOST3410ParameterSpec.classPK     A 4    4             I org/bouncycastle/jcajce/spec/HKDFParameterSpec.classPK     A ĠE  M  ;             I org/bouncycastle/jcajce/spec/HybridValueParameterSpec.classPK     A +Xr  '  6             I org/bouncycastle/jcajce/spec/IESKEMParameterSpec.classPK     A .u      3             I org/bouncycastle/jcajce/spec/KEMExtractSpec$1.classPK     A 43    9             I org/bouncycastle/jcajce/spec/KEMExtractSpec$Builder.classPK     A ~  t  1             II org/bouncycastle/jcajce/spec/KEMExtractSpec.classPK     A *      4             I org/bouncycastle/jcajce/spec/KEMGenerateSpec$1.classPK     A qH  a  :             I org/bouncycastle/jcajce/spec/KEMGenerateSpec$Builder.classPK     A F    2             !I org/bouncycastle/jcajce/spec/KEMGenerateSpec.classPK     A _1)  *  -             -I org/bouncycastle/jcajce/spec/KEMKDFSpec.classPK     A 
4    3             CI org/bouncycastle/jcajce/spec/KEMParameterSpec.classPK     A Vb\3a     ;             I org/bouncycastle/jcajce/spec/KTSParameterSpec$Builder.classPK     A rL    3             I org/bouncycastle/jcajce/spec/KTSParameterSpec.classPK     A -m_/  V  5             OI org/bouncycastle/jcajce/spec/MLDSAParameterSpec.classPK     A Xˆ  1  6             :I org/bouncycastle/jcajce/spec/MLDSAPrivateKeySpec.classPK     A MR  [  5             $I org/bouncycastle/jcajce/spec/MLDSAPublicKeySpec.classPK     A n2  I  5             I org/bouncycastle/jcajce/spec/MLKEMParameterSpec.classPK     A c  1  6             nI org/bouncycastle/jcajce/spec/MLKEMPrivateKeySpec.classPK     A %?\R  [  5             XI org/bouncycastle/jcajce/spec/MLKEMPublicKeySpec.classPK     A >A    3             
I org/bouncycastle/jcajce/spec/MQVParameterSpec.classPK     A 0qv    8             I org/bouncycastle/jcajce/spec/OpenSSHPrivateKeySpec.classPK     A -    7             I org/bouncycastle/jcajce/spec/OpenSSHPublicKeySpec.classPK     A /    0             I org/bouncycastle/jcajce/spec/PBKDF2KeySpec.classPK     A _5      4             uI org/bouncycastle/jcajce/spec/RawEncodedKeySpec.classPK     A #    8             I org/bouncycastle/jcajce/spec/RepeatedSecretKeySpec.classPK     A ʑ    6             (I org/bouncycastle/jcajce/spec/SLHDSAParameterSpec.classPK     A "y    3             I org/bouncycastle/jcajce/spec/SM2ParameterSpec.classPK     A א
  3  0             zI org/bouncycastle/jcajce/spec/ScryptKeySpec.classPK     A x]ܗ      7             I org/bouncycastle/jcajce/spec/SkeinParameterSpec$1.classPK     A   
  =             I org/bouncycastle/jcajce/spec/SkeinParameterSpec$Builder.classPK     A DBu6    5             J org/bouncycastle/jcajce/spec/SkeinParameterSpec.classPK     A    ,  5             IJ org/bouncycastle/jcajce/spec/TLSKeyMaterialSpec.classPK     A     Q  E             J org/bouncycastle/jcajce/spec/TLSRSAPremasterSecretParameterSpec.classPK     A vNR    9             
J org/bouncycastle/jcajce/spec/UserKeyingMaterialSpec.classPK     A e:  V  3             J org/bouncycastle/jcajce/spec/XDHParameterSpec.classPK
 
      A                          J org/bouncycastle/jcajce/util/PK     A Ҍ#	    ;             J org/bouncycastle/jcajce/util/AlgorithmParametersUtils.classPK     A $    6             bJ org/bouncycastle/jcajce/util/AnnotatedPrivateKey.classPK     A 7e    1             aJ org/bouncycastle/jcajce/util/BCJcaJceHelper.classPK     A A*0  
  6             %J org/bouncycastle/jcajce/util/DefaultJcaJceHelper.classPK     A [+    G             J org/bouncycastle/jcajce/util/ECKeyUtil$ECPublicKeyWithCompression.classPK     A z>    ,              !J org/bouncycastle/jcajce/util/ECKeyUtil.classPK     A ɟ    /             "J org/bouncycastle/jcajce/util/JcaJceHelper.classPK     A sh  U  .             %J org/bouncycastle/jcajce/util/JcaJceUtils.classPK     A A17    5             )J org/bouncycastle/jcajce/util/MessageDigestUtils.classPK     A #c=    4             R0J org/bouncycastle/jcajce/util/NamedJcaJceHelper.classPK     A 6|    6             }5J org/bouncycastle/jcajce/util/PrivateKeyAnnotator.classPK     A 7    7             ]7J org/bouncycastle/jcajce/util/ProviderJcaJceHelper.classPK     A (1  I  -             <J org/bouncycastle/jcajce/util/SpecUtil$1.classPK     A t1  ?  -             ?J org/bouncycastle/jcajce/util/SpecUtil$2.classPK     A !V    +             AJ org/bouncycastle/jcajce/util/SpecUtil.classPK
 
      A                          CJ org/bouncycastle/jce/PK     A жl  3  4             +DJ org/bouncycastle/jce/ECGOST3410NamedCurveTable.classPK     A )0    8             FJ org/bouncycastle/jce/ECKeyUtil$UnexpectedException.classPK     A -p#  /  $             HJ org/bouncycastle/jce/ECKeyUtil.classPK     A 7"  :  ,             QJ org/bouncycastle/jce/ECNamedCurveTable.classPK     A =fH    &             ]TJ org/bouncycastle/jce/ECPointUtil.classPK     A <hLX  [  3             ?WJ org/bouncycastle/jce/MultiCertStoreParameters.classPK     A 1rzT  3  5             XJ org/bouncycastle/jce/PKCS10CertificationRequest.classPK     A <  %
  %             lJ org/bouncycastle/jce/PKCS12Util.classPK     A Wo    (             rJ org/bouncycastle/jce/PrincipalUtil.classPK     A 	ox    '             uJ org/bouncycastle/jce/X509KeyUsage.classPK     A st      8             wJ org/bouncycastle/jce/X509LDAPCertStoreParameters$1.classPK     A 7n    >             xJ org/bouncycastle/jce/X509LDAPCertStoreParameters$Builder.classPK     A BmFF
  `!  6             J org/bouncycastle/jce/X509LDAPCertStoreParameters.classPK     A c    (             J org/bouncycastle/jce/X509Principal.classPK
 
      A                          J org/bouncycastle/jce/exception/PK     A R&  1  @             J org/bouncycastle/jce/exception/ExtCertPathBuilderException.classPK     A %&z4  X  B             J org/bouncycastle/jce/exception/ExtCertPathValidatorException.classPK     A     D             4J org/bouncycastle/jce/exception/ExtCertificateEncodingException.classPK     A ]Mj{      1             J org/bouncycastle/jce/exception/ExtException.classPK     A D&     3             J org/bouncycastle/jce/exception/ExtIOException.classPK
 
      A                           ٖJ org/bouncycastle/jce/interfaces/PK     A E      0             J org/bouncycastle/jce/interfaces/BCKeyStore.classPK     A 
ʂ      +             J org/bouncycastle/jce/interfaces/ECKey.classPK     A H%       4             ֘J org/bouncycastle/jce/interfaces/ECPointEncoder.classPK     A K      2             J org/bouncycastle/jce/interfaces/ECPrivateKey.classPK     A f      1             J org/bouncycastle/jce/interfaces/ECPublicKey.classPK     A ={      0             J org/bouncycastle/jce/interfaces/ElGamalKey.classPK     A dcΨ      7             J org/bouncycastle/jce/interfaces/ElGamalPrivateKey.classPK     A u      6             J org/bouncycastle/jce/interfaces/ElGamalPublicKey.classPK     A `_      1             ޞJ org/bouncycastle/jce/interfaces/GOST3410Key.classPK     A O
   @  4             J org/bouncycastle/jce/interfaces/GOST3410Params.classPK     A l}      8             J org/bouncycastle/jce/interfaces/GOST3410PrivateKey.classPK     A ɔʧ      7             J org/bouncycastle/jce/interfaces/GOST3410PublicKey.classPK     A WϤ      ,             J org/bouncycastle/jce/interfaces/IESKey.classPK     A jq   0  3             J org/bouncycastle/jce/interfaces/MQVPrivateKey.classPK     A <И      2             /J org/bouncycastle/jce/interfaces/MQVPublicKey.classPK     A iN2    ?             <J org/bouncycastle/jce/interfaces/PKCS12BagAttributeCarrier.classPK
 
      A                          J org/bouncycastle/jce/netscape/PK     A Z6    7             J org/bouncycastle/jce/netscape/NetscapeCertRequest.classPK
 
      A                          4J org/bouncycastle/jce/provider/PK     A r~    6             pJ org/bouncycastle/jce/provider/AnnotatedException.classPK     A ;JQ  F  :             J org/bouncycastle/jce/provider/BouncyCastleProvider$1.classPK     A +    :             J org/bouncycastle/jce/provider/BouncyCastleProvider$2.classPK     A R  K  I             ?J org/bouncycastle/jce/provider/BouncyCastleProvider$JcaCryptoService.classPK     A Ch  U  8             XJ org/bouncycastle/jce/provider/BouncyCastleProvider.classPK     A 
    E             J org/bouncycastle/jce/provider/BouncyCastleProviderConfiguration.classPK     A -Z    N             J org/bouncycastle/jce/provider/BrokenJCEBlockCipher$BrokePBEWithMD5AndDES.classPK     A nC    O             )J org/bouncycastle/jce/provider/BrokenJCEBlockCipher$BrokePBEWithSHA1AndDES.classPK     A 4Jo"    R             J org/bouncycastle/jce/provider/BrokenJCEBlockCipher$BrokePBEWithSHAAndDES2Key.classPK     A     R             ]J org/bouncycastle/jce/provider/BrokenJCEBlockCipher$BrokePBEWithSHAAndDES3Key.classPK     A }    P             J org/bouncycastle/jce/provider/BrokenJCEBlockCipher$OldPBEWithSHAAndDES3Key.classPK     A 	    P             J org/bouncycastle/jce/provider/BrokenJCEBlockCipher$OldPBEWithSHAAndTwofish.classPK     A dtt  %  8             1J org/bouncycastle/jce/provider/BrokenJCEBlockCipher.classPK     A K}ʪ  r  <             J org/bouncycastle/jce/provider/BrokenKDF2BytesGenerator.classPK     A FTfN  N  2             J org/bouncycastle/jce/provider/BrokenPBE$Util.classPK     A 6     -             K org/bouncycastle/jce/provider/BrokenPBE.classPK     A =jE&  7c  >             PK org/bouncycastle/jce/provider/CertPathValidatorUtilities.classPK     A 2b  R  .             -K org/bouncycastle/jce/provider/CertStatus.classPK     A ( /L    :             .K org/bouncycastle/jce/provider/CertStoreCollectionSpi.classPK     A >    :             s2K org/bouncycastle/jce/provider/CrlCache$LocalCRLStore.classPK     A QL    ,             5K org/bouncycastle/jce/provider/CrlCache.classPK     A Z    *             2=K org/bouncycastle/jce/provider/DHUtil.classPK     A    j  3             @K org/bouncycastle/jce/provider/ExtCRLException.classPK     A     3             aAK org/bouncycastle/jce/provider/JCEDHPrivateKey.classPK     A f  i  2             IK org/bouncycastle/jce/provider/JCEDHPublicKey.classPK     A   m+  3             RK org/bouncycastle/jce/provider/JCEECPrivateKey.classPK     A ܳ<  /  2             haK org/bouncycastle/jce/provider/JCEECPublicKey.classPK     A tRf    8             sK org/bouncycastle/jce/provider/JCEElGamalPrivateKey.classPK     A 9t  ]  7             yK org/bouncycastle/jce/provider/JCEElGamalPublicKey.classPK     A   M  7             &K org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.classPK     A /6J  
  4             K org/bouncycastle/jce/provider/JCERSAPrivateKey.classPK     A ,D    3             ȍK org/bouncycastle/jce/provider/JCERSAPublicKey.classPK     A 	RH    4             mK org/bouncycastle/jce/provider/JDKDSAPrivateKey.classPK     A kY8O  >  3             K org/bouncycastle/jce/provider/JDKDSAPublicKey.classPK     A o:F  T  ;             HK org/bouncycastle/jce/provider/JDKPKCS12StoreParameter.classPK     A ſw    5             K org/bouncycastle/jce/provider/MultiCertStoreSpi.classPK     A L     -             ѨK org/bouncycastle/jce/provider/OcspCache.classPK     A Nxi  q
  @             K org/bouncycastle/jce/provider/OldPKCS12ParametersGenerator.classPK     A M̭     +             ˻K org/bouncycastle/jce/provider/PEMUtil.classPK     A E8i
  "  >             ѿK org/bouncycastle/jce/provider/PKIXAttrCertPathBuilderSpi.classPK     A "  c  @             K org/bouncycastle/jce/provider/PKIXAttrCertPathValidatorSpi.classPK     A e6  o  /             K org/bouncycastle/jce/provider/PKIXCRLUtil.classPK     A Ow
    :             K org/bouncycastle/jce/provider/PKIXCertPathBuilderSpi.classPK     A pē  r  <             K org/bouncycastle/jce/provider/PKIXCertPathBuilderSpi_8.classPK     A e^/<  -  <             K org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.classPK     A |@*  /  >             &L org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi_8.classPK     A u  h  ?             L org/bouncycastle/jce/provider/PKIXNameConstraintValidator.classPK     A *A    H             L org/bouncycastle/jce/provider/PKIXNameConstraintValidatorException.classPK     A Nq  
  2             sL org/bouncycastle/jce/provider/PKIXPolicyNode.classPK     A ?  _  2             L org/bouncycastle/jce/provider/PrincipalUtils.classPK     A &1  7	  <             !L org/bouncycastle/jce/provider/ProvCrlRevocationChecker.classPK     A ԋS  
L  =             &L org/bouncycastle/jce/provider/ProvOcspRevocationChecker.classPK     A *+V	  k  9             BL org/bouncycastle/jce/provider/ProvRevocationChecker.classPK     A 2  y  <             ~LL org/bouncycastle/jce/provider/RFC3280CertPathUtilities.classPK     A lŁ  >  <             L org/bouncycastle/jce/provider/RFC3281CertPathUtilities.classPK     A 2  7  /             L org/bouncycastle/jce/provider/ReasonsMask.classPK     A 9v#     I             oL org/bouncycastle/jce/provider/RecoverableCertPathValidatorException.classPK     A D    <             L org/bouncycastle/jce/provider/WrappedRevocationChecker.classPK     A Cb    6             L org/bouncycastle/jce/provider/X509AttrCertParser.classPK     A yy	    6             L org/bouncycastle/jce/provider/X509CRLEntryObject.classPK     A e7S  ,  1             L org/bouncycastle/jce/provider/X509CRLObject.classPK     A RY    1             L org/bouncycastle/jce/provider/X509CRLParser.classPK     A ?JÇ    6             L org/bouncycastle/jce/provider/X509CertPairParser.classPK     A h%  
  2             L org/bouncycastle/jce/provider/X509CertParser.classPK     A /PX  m@  9             L org/bouncycastle/jce/provider/X509CertificateObject.classPK     A 4  %  8             DL org/bouncycastle/jce/provider/X509LDAPCertStoreSpi.classPK     A L)N}    5             L org/bouncycastle/jce/provider/X509SignatureUtil.classPK     A ra    ?             M org/bouncycastle/jce/provider/X509StoreAttrCertCollection.classPK     A x޶    :             M org/bouncycastle/jce/provider/X509StoreCRLCollection.classPK     A [n    ;             M org/bouncycastle/jce/provider/X509StoreCertCollection.classPK     A 'QJ  ;  ?             FM org/bouncycastle/jce/provider/X509StoreCertPairCollection.classPK     A C
  9  :             
M org/bouncycastle/jce/provider/X509StoreLDAPAttrCerts.classPK     A 8h    5             oM org/bouncycastle/jce/provider/X509StoreLDAPCRLs.classPK     A     :             :M org/bouncycastle/jce/provider/X509StoreLDAPCertPairs.classPK     A 3G  	  6             M org/bouncycastle/jce/provider/X509StoreLDAPCerts.classPK
 
      A                          M org/bouncycastle/jce/spec/PK     A hs     )             M org/bouncycastle/jce/spec/ECKeySpec.classPK     A f&   e  <             M org/bouncycastle/jce/spec/ECNamedCurveGenParameterSpec.classPK     A 7S  l  9             xM org/bouncycastle/jce/spec/ECNamedCurveParameterSpec.classPK     A cQ  ,  0             2M org/bouncycastle/jce/spec/ECNamedCurveSpec.classPK     A L%n    /             #M org/bouncycastle/jce/spec/ECParameterSpec.classPK     A Z     0             &M org/bouncycastle/jce/spec/ECPrivateKeySpec.classPK     A oF    /             'M org/bouncycastle/jce/spec/ECPublicKeySpec.classPK     A nI   7  7             )M org/bouncycastle/jce/spec/ElGamalGenParameterSpec.classPK     A 1L     .             *M org/bouncycastle/jce/spec/ElGamalKeySpec.classPK     A >a    4             5,M org/bouncycastle/jce/spec/ElGamalParameterSpec.classPK     A $Ύ     5             -M org/bouncycastle/jce/spec/ElGamalPrivateKeySpec.classPK     A f(     4             .M org/bouncycastle/jce/spec/ElGamalPublicKeySpec.classPK     A '	     6             J0M org/bouncycastle/jce/spec/GOST28147ParameterSpec.classPK     A 5     5             1M org/bouncycastle/jce/spec/GOST3410ParameterSpec.classPK     A 0E  \  6             6M org/bouncycastle/jce/spec/GOST3410PrivateKeySpec.classPK     A b^    A             a8M org/bouncycastle/jce/spec/GOST3410PublicKeyParameterSetSpec.classPK     A ʜڶD  [  5             :M org/bouncycastle/jce/spec/GOST3410PublicKeySpec.classPK     A rL    )             A<M org/bouncycastle/jce/spec/IEKeySpec.classPK     A /    0             >M org/bouncycastle/jce/spec/IESParameterSpec.classPK     A U     5             AM org/bouncycastle/jce/spec/RepeatedSecretKeySpec.classPK
 
      A                          /BM org/bouncycastle/math/PK     A yY      $             cBM org/bouncycastle/math/Primes$1.classPK     A Gaa    +             ?CM org/bouncycastle/math/Primes$MROutput.classPK     A AՆ    +             EM org/bouncycastle/math/Primes$STOutput.classPK     A X;    "             {GM org/bouncycastle/math/Primes.classPK
 
      A                          TM org/bouncycastle/math/ec/PK     A z?   6  4              UM org/bouncycastle/math/ec/AbstractECLookupTable.classPK     A z9    3             =VM org/bouncycastle/math/ec/AbstractECMultiplier.classPK     A H4  )  +             XM org/bouncycastle/math/ec/ECAlgorithms.classPK     A Q2    *             jM org/bouncycastle/math/ec/ECConstants.classPK     A *:    (             
lM org/bouncycastle/math/ec/ECCurve$1.classPK     A ttR  6  2             goM org/bouncycastle/math/ec/ECCurve$AbstractF2m.classPK     A !Yy  	  1             xM org/bouncycastle/math/ec/ECCurve$AbstractFp.classPK     A *E@    -             |M org/bouncycastle/math/ec/ECCurve$Config.classPK     A W.  a  ,             M org/bouncycastle/math/ec/ECCurve$F2m$1.classPK     A 8    *             M org/bouncycastle/math/ec/ECCurve$F2m.classPK     A .  {  )             M org/bouncycastle/math/ec/ECCurve$Fp.classPK     A R6	,z  %  &             KM org/bouncycastle/math/ec/ECCurve.classPK     A PH)  |  9             M org/bouncycastle/math/ec/ECFieldElement$AbstractF2m.classPK     A I<      8             9M org/bouncycastle/math/ec/ECFieldElement$AbstractFp.classPK     A s.2  ]  1             FM org/bouncycastle/math/ec/ECFieldElement$F2m.classPK     A     0             ׭M org/bouncycastle/math/ec/ECFieldElement$Fp.classPK     A `p  C	  -             'M org/bouncycastle/math/ec/ECFieldElement.classPK     A 3      ,             JM org/bouncycastle/math/ec/ECLookupTable.classPK     A @      +             8M org/bouncycastle/math/ec/ECMultiplier.classPK     A    w  (             M org/bouncycastle/math/ec/ECPoint$1.classPK     A h9    2             M org/bouncycastle/math/ec/ECPoint$AbstractF2m.classPK     A &c    1             M org/bouncycastle/math/ec/ECPoint$AbstractFp.classPK     A 5h:	    *             LM org/bouncycastle/math/ec/ECPoint$F2m.classPK     A =A
  G  )             lM org/bouncycastle/math/ec/ECPoint$Fp.classPK     A ,3
  `   &             M org/bouncycastle/math/ec/ECPoint.classPK     A :n      )             M org/bouncycastle/math/ec/ECPointMap.classPK     A 1V    7             M org/bouncycastle/math/ec/FixedPointCombMultiplier.classPK     A b}  I  4             nM org/bouncycastle/math/ec/FixedPointPreCompInfo.classPK     A u    /             MM org/bouncycastle/math/ec/FixedPointUtil$1.classPK     A .5U  -  -             M org/bouncycastle/math/ec/FixedPointUtil.classPK     A t*    ,             jM org/bouncycastle/math/ec/GLVMultiplier.classPK     A u:  Oy  (             N org/bouncycastle/math/ec/LongArray.classPK     A Γb*}      .             @=N org/bouncycastle/math/ec/PreCompCallback.classPK     A 0U   X   *             >N org/bouncycastle/math/ec/PreCompInfo.classPK     A Q  H  4             >N org/bouncycastle/math/ec/ScaleXNegateYPointMap.classPK     A `ݕ  :  -             =@N org/bouncycastle/math/ec/ScaleXPointMap.classPK     A "*:  H  4             AN org/bouncycastle/math/ec/ScaleYNegateXPointMap.classPK     A   :  -             CN org/bouncycastle/math/ec/ScaleYPointMap.classPK     A A  
  /             DN org/bouncycastle/math/ec/SimpleBigDecimal.classPK     A L  =  0             JN org/bouncycastle/math/ec/SimpleLookupTable.classPK     A T  "  #             MN org/bouncycastle/math/ec/Tnaf.classPK     A )_    2             {\N org/bouncycastle/math/ec/ValidityPrecompInfo.classPK     A Y2^    0             ]^N org/bouncycastle/math/ec/WNafL2RMultiplier.classPK     A p݂J  o  .             bN org/bouncycastle/math/ec/WNafPreCompInfo.classPK     A T]^  o  )             dN org/bouncycastle/math/ec/WNafUtil$1.classPK     A @/    )             tgN org/bouncycastle/math/ec/WNafUtil$2.classPK     A )    )             pnN org/bouncycastle/math/ec/WNafUtil$3.classPK     A 	  5  '             rN org/bouncycastle/math/ec/WNafUtil.classPK     A M:    2             |N org/bouncycastle/math/ec/WTauNafMultiplier$1.classPK     A uK    0             "N org/bouncycastle/math/ec/WTauNafMultiplier.classPK     A ҳ2  d  1             eN org/bouncycastle/math/ec/WTauNafPreCompInfo.classPK     A      *             N org/bouncycastle/math/ec/ZTauElement.classPK
 
      A                           !N org/bouncycastle/math/ec/custom/PK
 
      A             $             _N org/bouncycastle/math/ec/custom/djb/PK     A y  [  6             N org/bouncycastle/math/ec/custom/djb/Curve25519$1.classPK     A 6R  B  4             N org/bouncycastle/math/ec/custom/djb/Curve25519.classPK     A G  
  9             N org/bouncycastle/math/ec/custom/djb/Curve25519Field.classPK     A Y    @             N org/bouncycastle/math/ec/custom/djb/Curve25519FieldElement.classPK     A (    9             /N org/bouncycastle/math/ec/custom/djb/Curve25519Point.classPK
 
      A             #             N org/bouncycastle/math/ec/custom/gm/PK     A \(&  e  9             N org/bouncycastle/math/ec/custom/gm/SM2P256V1Curve$1.classPK     A     7             uN org/bouncycastle/math/ec/custom/gm/SM2P256V1Curve.classPK     A $  V  7             ѰN org/bouncycastle/math/ec/custom/gm/SM2P256V1Field.classPK     A )    >             N org/bouncycastle/math/ec/custom/gm/SM2P256V1FieldElement.classPK     A Y$P  H  7             N org/bouncycastle/math/ec/custom/gm/SM2P256V1Point.classPK
 
      A             $             ^N org/bouncycastle/math/ec/custom/sec/PK     A Ϟ
  e  :             N org/bouncycastle/math/ec/custom/sec/SecP128R1Curve$1.classPK     A P9И    8             N org/bouncycastle/math/ec/custom/sec/SecP128R1Curve.classPK     A a  W
  8             BN org/bouncycastle/math/ec/custom/sec/SecP128R1Field.classPK     A (_  y  ?             N org/bouncycastle/math/ec/custom/sec/SecP128R1FieldElement.classPK     A tf6N  I  8             \N org/bouncycastle/math/ec/custom/sec/SecP128R1Point.classPK     A /  e  :             N org/bouncycastle/math/ec/custom/sec/SecP160K1Curve$1.classPK     A (.:  Z  8             N org/bouncycastle/math/ec/custom/sec/SecP160K1Curve.classPK     A y&Y   
  8             N org/bouncycastle/math/ec/custom/sec/SecP160K1Point.classPK     A HM  e  :             N org/bouncycastle/math/ec/custom/sec/SecP160R1Curve$1.classPK     A Zw    8             N org/bouncycastle/math/ec/custom/sec/SecP160R1Curve.classPK     A F    8             N org/bouncycastle/math/ec/custom/sec/SecP160R1Field.classPK     A h1Tp    ?             O org/bouncycastle/math/ec/custom/sec/SecP160R1FieldElement.classPK     A _O  I  8             	O org/bouncycastle/math/ec/custom/sec/SecP160R1Point.classPK     A  <  e  :             jO org/bouncycastle/math/ec/custom/sec/SecP160R2Curve$1.classPK     A      8             O org/bouncycastle/math/ec/custom/sec/SecP160R2Curve.classPK     A `  )  8             O org/bouncycastle/math/ec/custom/sec/SecP160R2Field.classPK     A )-    ?             !O org/bouncycastle/math/ec/custom/sec/SecP160R2FieldElement.classPK     A 7O  I  8             'O org/bouncycastle/math/ec/custom/sec/SecP160R2Point.classPK     A u
  j  :             -O org/bouncycastle/math/ec/custom/sec/SecP192K1Curve$1.classPK     A ]  a  8             91O org/bouncycastle/math/ec/custom/sec/SecP192K1Curve.classPK     A ǣ|  <  8             R7O org/bouncycastle/math/ec/custom/sec/SecP192K1Field.classPK     A /֞    ?             4>O org/bouncycastle/math/ec/custom/sec/SecP192K1FieldElement.classPK     A 5   
  8             ?DO org/bouncycastle/math/ec/custom/sec/SecP192K1Point.classPK     A G
  j  :             JO org/bouncycastle/math/ec/custom/sec/SecP192R1Curve$1.classPK     A ه    8             :NO org/bouncycastle/math/ec/custom/sec/SecP192R1Curve.classPK     A ǌJ  o  8             |TO org/bouncycastle/math/ec/custom/sec/SecP192R1Field.classPK     A 5  8  ?             ,\O org/bouncycastle/math/ec/custom/sec/SecP192R1FieldElement.classPK     A iO  K  8             aO org/bouncycastle/math/ec/custom/sec/SecP192R1Point.classPK     A $    :             mhO org/bouncycastle/math/ec/custom/sec/SecP224K1Curve$1.classPK     A LǸ  k  8             kO org/bouncycastle/math/ec/custom/sec/SecP224K1Curve.classPK     A 9|Tx  D  8             qO org/bouncycastle/math/ec/custom/sec/SecP224K1Field.classPK     A T)    ?             xO org/bouncycastle/math/ec/custom/sec/SecP224K1FieldElement.classPK     A ʝ!  
  8             EO org/bouncycastle/math/ec/custom/sec/SecP224K1Point.classPK     A n^  j  :             ̅O org/bouncycastle/math/ec/custom/sec/SecP224R1Curve$1.classPK     A r9.Q    8             BO org/bouncycastle/math/ec/custom/sec/SecP224R1Curve.classPK     A Ԍzw    8             O org/bouncycastle/math/ec/custom/sec/SecP224R1Field.classPK     A ?X];8    ?             lO org/bouncycastle/math/ec/custom/sec/SecP224R1FieldElement.classPK     A =JP  K  8             O org/bouncycastle/math/ec/custom/sec/SecP224R1Point.classPK     A <  j  :             ǥO org/bouncycastle/math/ec/custom/sec/SecP256K1Curve$1.classPK     A ܞ  q  8             =O org/bouncycastle/math/ec/custom/sec/SecP256K1Curve.classPK     A ksM  
  8             ^O org/bouncycastle/math/ec/custom/sec/SecP256K1Field.classPK     A L'    ?             xO org/bouncycastle/math/ec/custom/sec/SecP256K1FieldElement.classPK     A 74  &  8             O org/bouncycastle/math/ec/custom/sec/SecP256K1Point.classPK     A    j  :             SO org/bouncycastle/math/ec/custom/sec/SecP256R1Curve$1.classPK     A P    8             O org/bouncycastle/math/ec/custom/sec/SecP256R1Curve.classPK     A .    8             ,O org/bouncycastle/math/ec/custom/sec/SecP256R1Field.classPK     A 27\    ?             WO org/bouncycastle/math/ec/custom/sec/SecP256R1FieldElement.classPK     A iac    8              O org/bouncycastle/math/ec/custom/sec/SecP256R1Point.classPK     A 5
  p  :             O org/bouncycastle/math/ec/custom/sec/SecP384R1Curve$1.classPK     A gd&  [  8             ^O org/bouncycastle/math/ec/custom/sec/SecP384R1Curve.classPK     A 1}  l  8             O org/bouncycastle/math/ec/custom/sec/SecP384R1Field.classPK     A -MT[  ~  ?             IO org/bouncycastle/math/ec/custom/sec/SecP384R1FieldElement.classPK     A <a    8             SO org/bouncycastle/math/ec/custom/sec/SecP384R1Point.classPK     A )K+  v  :             P org/bouncycastle/math/ec/custom/sec/SecP521R1Curve$1.classPK     A #U    8             P org/bouncycastle/math/ec/custom/sec/SecP521R1Curve.classPK     A f@    8             KP org/bouncycastle/math/ec/custom/sec/SecP521R1Field.classPK     A Cl   u  ?             P org/bouncycastle/math/ec/custom/sec/SecP521R1FieldElement.classPK     A "Z  v  8             ~P org/bouncycastle/math/ec/custom/sec/SecP521R1Point.classPK     A 1  d
  6             P org/bouncycastle/math/ec/custom/sec/SecT113Field.classPK     A N+  I  =             $P org/bouncycastle/math/ec/custom/sec/SecT113FieldElement.classPK     A V0  f  :             J+P org/bouncycastle/math/ec/custom/sec/SecT113R1Curve$1.classPK     A x܃  
  8             .P org/bouncycastle/math/ec/custom/sec/SecT113R1Curve.classPK     A gy    8             4P org/bouncycastle/math/ec/custom/sec/SecT113R1Point.classPK     A v  f  :             ;P org/bouncycastle/math/ec/custom/sec/SecT113R2Curve$1.classPK     A k  
  8             c?P org/bouncycastle/math/ec/custom/sec/SecT113R2Curve.classPK     A H    8             NEP org/bouncycastle/math/ec/custom/sec/SecT113R2Point.classPK     A K  g  6             LP org/bouncycastle/math/ec/custom/sec/SecT131Field.classPK     A eU  k  =             TP org/bouncycastle/math/ec/custom/sec/SecT131FieldElement.classPK     A h  f  :             =[P org/bouncycastle/math/ec/custom/sec/SecT131R1Curve$1.classPK     A   
  8             ^P org/bouncycastle/math/ec/custom/sec/SecT131R1Curve.classPK     A {K    8             dP org/bouncycastle/math/ec/custom/sec/SecT131R1Point.classPK     A <  f  :             kP org/bouncycastle/math/ec/custom/sec/SecT131R2Curve$1.classPK     A jQ  
  8             hoP org/bouncycastle/math/ec/custom/sec/SecT131R2Curve.classPK     A 8F    8             \uP org/bouncycastle/math/ec/custom/sec/SecT131R2Point.classPK     A e'  0  6             |P org/bouncycastle/math/ec/custom/sec/SecT163Field.classPK     A c  M  =             ׄP org/bouncycastle/math/ec/custom/sec/SecT163FieldElement.classPK     A 4F  f  :             .P org/bouncycastle/math/ec/custom/sec/SecT163K1Curve$1.classPK     A   
  8             P org/bouncycastle/math/ec/custom/sec/SecT163K1Curve.classPK     A u,  z  8             P org/bouncycastle/math/ec/custom/sec/SecT163K1Point.classPK     A \k  f  :             P org/bouncycastle/math/ec/custom/sec/SecT163R1Curve$1.classPK     A   
  8             P org/bouncycastle/math/ec/custom/sec/SecT163R1Curve.classPK     A 3    8             P org/bouncycastle/math/ec/custom/sec/SecT163R1Point.classPK     A Bu  f  :             RP org/bouncycastle/math/ec/custom/sec/SecT163R2Curve$1.classPK     A X̮  
  8             ίP org/bouncycastle/math/ec/custom/sec/SecT163R2Curve.classPK     A tq'    8             P org/bouncycastle/math/ec/custom/sec/SecT163R2Point.classPK     A QT[  R
  6             ļP org/bouncycastle/math/ec/custom/sec/SecT193Field.classPK     A ʕ  L  =             P org/bouncycastle/math/ec/custom/sec/SecT193FieldElement.classPK     A :dd  f  :             P org/bouncycastle/math/ec/custom/sec/SecT193R1Curve$1.classPK     A z{x  
  8             VP org/bouncycastle/math/ec/custom/sec/SecT193R1Curve.classPK     A Jt    8             mP org/bouncycastle/math/ec/custom/sec/SecT193R1Point.classPK     A -  l  :             P org/bouncycastle/math/ec/custom/sec/SecT193R2Curve$1.classPK     A !|P  
  8             !P org/bouncycastle/math/ec/custom/sec/SecT193R2Curve.classPK     A %{ߝ    8             8P org/bouncycastle/math/ec/custom/sec/SecT193R2Point.classPK     A ai  '  6             pP org/bouncycastle/math/ec/custom/sec/SecT233Field.classPK     A e)  L  =             P org/bouncycastle/math/ec/custom/sec/SecT233FieldElement.classPK     A *R\  f  :             P org/bouncycastle/math/ec/custom/sec/SecT233K1Curve$1.classPK     A ǚI  
  8             P org/bouncycastle/math/ec/custom/sec/SecT233K1Curve.classPK     A RI    8             Q org/bouncycastle/math/ec/custom/sec/SecT233K1Point.classPK     A c  f  :             Q org/bouncycastle/math/ec/custom/sec/SecT233R1Curve$1.classPK     A 	#  
  8             Q org/bouncycastle/math/ec/custom/sec/SecT233R1Curve.classPK     A Ӏ    8             Q org/bouncycastle/math/ec/custom/sec/SecT233R1Point.classPK     A    ~  6             Q org/bouncycastle/math/ec/custom/sec/SecT239Field.classPK     A w  M  =             r$Q org/bouncycastle/math/ec/custom/sec/SecT239FieldElement.classPK     A "O  f  :             *Q org/bouncycastle/math/ec/custom/sec/SecT239K1Curve$1.classPK     A   
  8             F.Q org/bouncycastle/math/ec/custom/sec/SecT239K1Curve.classPK     A gucd    8             84Q org/bouncycastle/math/ec/custom/sec/SecT239K1Point.classPK     A f	    6             ?;Q org/bouncycastle/math/ec/custom/sec/SecT283Field.classPK     A *?  n  =             	EQ org/bouncycastle/math/ec/custom/sec/SecT283FieldElement.classPK     A 3a  f  :             kKQ org/bouncycastle/math/ec/custom/sec/SecT283K1Curve$1.classPK     A s*    8             NQ org/bouncycastle/math/ec/custom/sec/SecT283K1Curve.classPK     A }ϡ    8             TQ org/bouncycastle/math/ec/custom/sec/SecT283K1Point.classPK     A >  f  :             [Q org/bouncycastle/math/ec/custom/sec/SecT283R1Curve$1.classPK     A ܦ  
  8             h_Q org/bouncycastle/math/ec/custom/sec/SecT283R1Curve.classPK     A H1;    8             teQ org/bouncycastle/math/ec/custom/sec/SecT283R1Point.classPK     A 0K  m  6             lQ org/bouncycastle/math/ec/custom/sec/SecT409Field.classPK     A VNZ  n  =             uQ org/bouncycastle/math/ec/custom/sec/SecT409FieldElement.classPK     A   k  :             *|Q org/bouncycastle/math/ec/custom/sec/SecT409K1Curve$1.classPK     A )R    8             Q org/bouncycastle/math/ec/custom/sec/SecT409K1Curve.classPK     A "4Ow    8             Q org/bouncycastle/math/ec/custom/sec/SecT409K1Point.classPK     A ^  k  :             Q org/bouncycastle/math/ec/custom/sec/SecT409R1Curve$1.classPK     A 9̴  
  8             /Q org/bouncycastle/math/ec/custom/sec/SecT409R1Curve.classPK     A i㬫    8             cQ org/bouncycastle/math/ec/custom/sec/SecT409R1Point.classPK     A S~N
    6             tQ org/bouncycastle/math/ec/custom/sec/SecT571Field.classPK     A   M  =             &Q org/bouncycastle/math/ec/custom/sec/SecT571FieldElement.classPK     A a@Dz  k  :             Q org/bouncycastle/math/ec/custom/sec/SecT571K1Curve$1.classPK     A \q  I  8             Q org/bouncycastle/math/ec/custom/sec/SecT571K1Curve.classPK     A ܦ,  t  8             Q org/bouncycastle/math/ec/custom/sec/SecT571K1Point.classPK     A Ȳk  k  :             Q org/bouncycastle/math/ec/custom/sec/SecT571R1Curve$1.classPK     A 3N    8             .Q org/bouncycastle/math/ec/custom/sec/SecT571R1Curve.classPK     A #H  A  8             Q org/bouncycastle/math/ec/custom/sec/SecT571R1Point.classPK
 
      A                          FQ org/bouncycastle/math/ec/endo/PK     A |N      2             Q org/bouncycastle/math/ec/endo/ECEndomorphism.classPK     A |=!@    3             {Q org/bouncycastle/math/ec/endo/EndoPreCompInfo.classPK     A nU    .             Q org/bouncycastle/math/ec/endo/EndoUtil$1.classPK     A '3    ,             Q org/bouncycastle/math/ec/endo/EndoUtil.classPK     A \{>      3             Q org/bouncycastle/math/ec/endo/GLVEndomorphism.classPK     A    %  8             Q org/bouncycastle/math/ec/endo/GLVTypeAEndomorphism.classPK     A C    6             Q org/bouncycastle/math/ec/endo/GLVTypeAParameters.classPK     A 2  !  8             <Q org/bouncycastle/math/ec/endo/GLVTypeBEndomorphism.classPK     A AF    6             Q org/bouncycastle/math/ec/endo/GLVTypeBParameters.classPK     A w    9             fQ org/bouncycastle/math/ec/endo/ScalarSplitParameters.classPK
 
      A             !             rQ org/bouncycastle/math/ec/rfc7748/PK     A EƮ­     /             Q org/bouncycastle/math/ec/rfc7748/X25519$F.classPK     A C    4             Q org/bouncycastle/math/ec/rfc7748/X25519$Friend.classPK     A \  #
  -             6Q org/bouncycastle/math/ec/rfc7748/X25519.classPK     A aZ    2             _Q org/bouncycastle/math/ec/rfc7748/X25519Field.classPK     A F     -             R org/bouncycastle/math/ec/rfc7748/X448$F.classPK     A     2             R org/bouncycastle/math/ec/rfc7748/X448$Friend.classPK     A #Q9  	  +             R org/bouncycastle/math/ec/rfc7748/X448.classPK     A C  +  0             R org/bouncycastle/math/ec/rfc7748/X448Field.classPK
 
      A             !              R org/bouncycastle/math/ec/rfc8032/PK     A *  A  ,              R org/bouncycastle/math/ec/rfc8032/Codec.classPK     A bƒ      0             "R org/bouncycastle/math/ec/rfc8032/Ed25519$1.classPK     A Ж   t  8             #R org/bouncycastle/math/ec/rfc8032/Ed25519$Algorithm.classPK     A :   
  0             >%R org/bouncycastle/math/ec/rfc8032/Ed25519$F.classPK     A dxW  z  9             Q&R org/bouncycastle/math/ec/rfc8032/Ed25519$PointAccum.classPK     A 6  %  :             (R org/bouncycastle/math/ec/rfc8032/Ed25519$PointAffine.classPK     A XJ.P  c  <             )R org/bouncycastle/math/ec/rfc8032/Ed25519$PointExtended.classPK     A r)J  N  ;             g+R org/bouncycastle/math/ec/rfc8032/Ed25519$PointPrecomp.classPK     A ̇0Y  m  <             -R org/bouncycastle/math/ec/rfc8032/Ed25519$PointPrecompZ.classPK     A )5  #  8             .R org/bouncycastle/math/ec/rfc8032/Ed25519$PointTemp.classPK     A 7d   -  :             x0R org/bouncycastle/math/ec/rfc8032/Ed25519$PublicPoint.classPK     A `z"  S  .             1R org/bouncycastle/math/ec/rfc8032/Ed25519.classPK     A $      .             UR org/bouncycastle/math/ec/rfc8032/Ed448$1.classPK     A 2DH   J  6             UR org/bouncycastle/math/ec/rfc8032/Ed448$Algorithm.classPK     A m     .             AWR org/bouncycastle/math/ec/rfc8032/Ed448$F.classPK     A 4    8             OXR org/bouncycastle/math/ec/rfc8032/Ed448$PointAffine.classPK     A ۂB  @  <             YR org/bouncycastle/math/ec/rfc8032/Ed448$PointProjective.classPK     A ,(iq    6             [R org/bouncycastle/math/ec/rfc8032/Ed448$PointTemp.classPK     A I-   )  8             j]R org/bouncycastle/math/ec/rfc8032/Ed448$PublicPoint.classPK     A z  :J  ,             ^R org/bouncycastle/math/ec/rfc8032/Ed448.classPK     A :@ 	  /  2             ~R org/bouncycastle/math/ec/rfc8032/Scalar25519.classPK     A 

  !  0             R org/bouncycastle/math/ec/rfc8032/Scalar448.classPK     A ;    1             R org/bouncycastle/math/ec/rfc8032/ScalarUtil.classPK     A 1    +             R org/bouncycastle/math/ec/rfc8032/Wnaf.classPK
 
      A                          R org/bouncycastle/math/ec/tools/PK     A qK  ](  :             ߜR org/bouncycastle/math/ec/tools/DiscoverEndomorphisms.classPK     A l	W  
  5             7R org/bouncycastle/math/ec/tools/F2mSqrtOptimizer.classPK     A ]P  3  3             R org/bouncycastle/math/ec/tools/TraceOptimizer.classPK
 
      A                          R org/bouncycastle/math/field/PK     A 2
      0             ,R org/bouncycastle/math/field/ExtensionField.classPK     A nP!      -             %R org/bouncycastle/math/field/FiniteField.classPK     A     .             R org/bouncycastle/math/field/FiniteFields.classPK     A 1Ԡ    /             R org/bouncycastle/math/field/GF2Polynomial.classPK     A o    A             R org/bouncycastle/math/field/GenericPolynomialExtensionField.classPK     A XB      ,             nR org/bouncycastle/math/field/Polynomial.classPK     A ,      :             RR org/bouncycastle/math/field/PolynomialExtensionField.classPK     A <  u  ,             JR org/bouncycastle/math/field/PrimeField.classPK
 
      A                          .R org/bouncycastle/math/raw/PK     A E  r  $             fR org/bouncycastle/math/raw/Bits.classPK     A L Y  1  *             R org/bouncycastle/math/raw/Interleave.classPK     A C^  A  #             ~R org/bouncycastle/math/raw/Mod.classPK     A #g  !  '             R org/bouncycastle/math/raw/Mont256.classPK     A G  5  #             pR org/bouncycastle/math/raw/Nat.classPK     A G	˅
  |"  &             R org/bouncycastle/math/raw/Nat128.classPK     A 
  #  &             S org/bouncycastle/math/raw/Nat160.classPK     A U  4+  &             S org/bouncycastle/math/raw/Nat192.classPK     A <  2  &              S org/bouncycastle/math/raw/Nat224.classPK     A J0  A  &             {2S org/bouncycastle/math/raw/Nat256.classPK     A g:m    &             mGS org/bouncycastle/math/raw/Nat320.classPK     A 
BI    &             JS org/bouncycastle/math/raw/Nat384.classPK     A q  \  &             uMS org/bouncycastle/math/raw/Nat448.classPK     A ~yI    &             RS org/bouncycastle/math/raw/Nat512.classPK     A P{q7  V  &             US org/bouncycastle/math/raw/Nat576.classPK
 
      A                          XS org/bouncycastle/pqc/PK
 
      A                          XS org/bouncycastle/pqc/asn1/PK     A +?z  
  .             YS org/bouncycastle/pqc/asn1/CMCEPrivateKey.classPK     A 	$U  L  -             ]S org/bouncycastle/pqc/asn1/CMCEPublicKey.classPK     A c$I  c	  0             `S org/bouncycastle/pqc/asn1/FalconPrivateKey.classPK     A [  M  /             BeS org/bouncycastle/pqc/asn1/FalconPublicKey.classPK     A :r  h  4             'hS org/bouncycastle/pqc/asn1/PQCObjectIdentifiers.classPK     A ¦w  	  &             nS org/bouncycastle/pqc/asn1/ParSet.classPK     A _L  ]	  /             sS org/bouncycastle/pqc/asn1/SABERPrivateKey.classPK     A &]$ }  m  .             xS org/bouncycastle/pqc/asn1/SABERPublicKey.classPK     A M=    3             zS org/bouncycastle/pqc/asn1/SPHINCS256KeyParams.classPK     A NOF  	  5             }S org/bouncycastle/pqc/asn1/SPHINCSPLUSPrivateKey.classPK     A J    4             uS org/bouncycastle/pqc/asn1/SPHINCSPLUSPublicKey.classPK     A !1  |  -             S org/bouncycastle/pqc/asn1/XMSSKeyParams.classPK     A HYa    /             S org/bouncycastle/pqc/asn1/XMSSMTKeyParams.classPK     A n>3  B
  0             S org/bouncycastle/pqc/asn1/XMSSMTPrivateKey.classPK     A o$    /             S org/bouncycastle/pqc/asn1/XMSSMTPublicKey.classPK     A Y?  
  .             S org/bouncycastle/pqc/asn1/XMSSPrivateKey.classPK     A "    -             S org/bouncycastle/pqc/asn1/XMSSPublicKey.classPK
 
      A                           S org/bouncycastle/pqc/crypto/PK     A L    -             :S org/bouncycastle/pqc/crypto/DigestUtils.classPK     A ֥    8             S org/bouncycastle/pqc/crypto/DigestingMessageSigner.classPK     A m$    B             ҦS org/bouncycastle/pqc/crypto/DigestingStateAwareMessageSigner.classPK     A #N  @  .             fS org/bouncycastle/pqc/crypto/ExchangePair.classPK     A       7             S org/bouncycastle/pqc/crypto/ExchangePairGenerator.classPK     A 9a      >             S org/bouncycastle/pqc/crypto/ExhaustedPrivateKeyException.classPK     A 83o      /             )S org/bouncycastle/pqc/crypto/KEMParameters.classPK     A 
._   *  2             S org/bouncycastle/pqc/crypto/MessageEncryptor.classPK     A 搴      /             S org/bouncycastle/pqc/crypto/MessageSigner.classPK     A Ԛ      8             0S org/bouncycastle/pqc/crypto/MessageSignerAdapter$1.classPK     A ͼT  Q  =             0S org/bouncycastle/pqc/crypto/MessageSignerAdapter$Buffer.classPK     A     6             S org/bouncycastle/pqc/crypto/MessageSignerAdapter.classPK     A 1      9             4S org/bouncycastle/pqc/crypto/StateAwareMessageSigner.classPK
 
      A             !             HS org/bouncycastle/pqc/crypto/bike/PK     A 3ε
    1             S org/bouncycastle/pqc/crypto/bike/BIKEEngine.classPK     A э    7             S org/bouncycastle/pqc/crypto/bike/BIKEKEMExtractor.classPK     A ]yZd    7             S org/bouncycastle/pqc/crypto/bike/BIKEKEMGenerator.classPK     A ꓥ     B             VS org/bouncycastle/pqc/crypto/bike/BIKEKeyGenerationParameters.classPK     A ;#  Z  ;             S org/bouncycastle/pqc/crypto/bike/BIKEKeyPairGenerator.classPK     A 
kw     8             S org/bouncycastle/pqc/crypto/bike/BIKEKeyParameters.classPK     A [mc3    5             IS org/bouncycastle/pqc/crypto/bike/BIKEParameters.classPK     A Pr    ?             nS org/bouncycastle/pqc/crypto/bike/BIKEPrivateKeyParameters.classPK     A .R    >             MS org/bouncycastle/pqc/crypto/bike/BIKEPublicKeyParameters.classPK     A vCCx
    /             S org/bouncycastle/pqc/crypto/bike/BIKERing.classPK     A ~    0             S org/bouncycastle/pqc/crypto/bike/BIKEUtils.classPK
 
      A             !             S org/bouncycastle/pqc/crypto/cmce/PK     A x    ,             S org/bouncycastle/pqc/crypto/cmce/BENES.classPK     A tO    .             7S org/bouncycastle/pqc/crypto/cmce/BENES12.classPK     A ?&  g  .             ^S org/bouncycastle/pqc/crypto/cmce/BENES13.classPK     A v!"  B  1             S org/bouncycastle/pqc/crypto/cmce/CMCEEngine.classPK     A (ڟ    7             aT org/bouncycastle/pqc/crypto/cmce/CMCEKEMExtractor.classPK     A kn˞T    7             eT org/bouncycastle/pqc/crypto/cmce/CMCEKEMGenerator.classPK     A e[bu     B             T org/bouncycastle/pqc/crypto/cmce/CMCEKeyGenerationParameters.classPK     A gҖ    ;             T org/bouncycastle/pqc/crypto/cmce/CMCEKeyPairGenerator.classPK     A a     8             T org/bouncycastle/pqc/crypto/cmce/CMCEKeyParameters.classPK     A Oz    5             T org/bouncycastle/pqc/crypto/cmce/CMCEParameters.classPK     A       ?             0 T org/bouncycastle/pqc/crypto/cmce/CMCEPrivateKeyParameters.classPK     A 3&)    >             M#T org/bouncycastle/pqc/crypto/cmce/CMCEPublicKeyParameters.classPK     A {r)    )             $T org/bouncycastle/pqc/crypto/cmce/GF.classPK     A Q2    +             b&T org/bouncycastle/pqc/crypto/cmce/GF12.classPK     A I    +             *T org/bouncycastle/pqc/crypto/cmce/GF13.classPK     A 2"  Y  ,             /T org/bouncycastle/pqc/crypto/cmce/Utils.classPK
 
      A             %             "2T org/bouncycastle/pqc/crypto/crystals/PK
 
      A             /             e2T org/bouncycastle/pqc/crypto/crystals/dilithium/PK     A P
  &  D             2T org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumEngine.classPK     A M 	  G  U             @T org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumKeyGenerationParameters.classPK     A OY  e  N             BT org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumKeyPairGenerator.classPK     A oY   	  K             ET org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumKeyParameters.classPK     A 	4    H             VGT org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumParameters.classPK     A j+  
  R             IT org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumPrivateKeyParameters.classPK     A ۾L    Q             +NT org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumPublicKeyParameters.classPK     A y    D             VPT org/bouncycastle/pqc/crypto/crystals/dilithium/DilithiumSigner.classPK     A hʊ	  s  8             ST org/bouncycastle/pqc/crypto/crystals/dilithium/Ntt.classPK     A ix  l  <             7^T org/bouncycastle/pqc/crypto/crystals/dilithium/Packing.classPK     A J	2  +  9             dT org/bouncycastle/pqc/crypto/crystals/dilithium/Poly.classPK     A   )  =             ouT org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecK.classPK     A ;*>8  ;  =             {T org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecL.classPK     A 7-s    B             zT org/bouncycastle/pqc/crypto/crystals/dilithium/PolyVecMatrix.classPK     A /    ;             ]T org/bouncycastle/pqc/crypto/crystals/dilithium/Reduce.classPK     A â    =             T org/bouncycastle/pqc/crypto/crystals/dilithium/Rounding.classPK     A ʞ    K             T org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric$AesSymmetric.classPK     A  b    M             (T org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric$ShakeSymmetric.classPK     A ]pkQ  u  >             T org/bouncycastle/pqc/crypto/crystals/dilithium/Symmetric.classPK
 
      A             #             \T org/bouncycastle/pqc/crypto/falcon/PK     A .#Yϴ8  mk  2             T org/bouncycastle/pqc/crypto/falcon/FPREngine.classPK     A   `  4             T org/bouncycastle/pqc/crypto/falcon/FalconCodec.classPK     A w+    5             T org/bouncycastle/pqc/crypto/falcon/FalconCommon.classPK     A n;  s  2             T org/bouncycastle/pqc/crypto/falcon/FalconFFT.classPK     A `4  ms  5             yT org/bouncycastle/pqc/crypto/falcon/FalconKeyGen.classPK     A SZh@     F             iU org/bouncycastle/pqc/crypto/falcon/FalconKeyGenerationParameters.classPK     A 3,    ?             U org/bouncycastle/pqc/crypto/falcon/FalconKeyPairGenerator.classPK     A ;     <             vU org/bouncycastle/pqc/crypto/falcon/FalconKeyParameters.classPK     A >d    3             U org/bouncycastle/pqc/crypto/falcon/FalconNIST.classPK     A +    9             >U org/bouncycastle/pqc/crypto/falcon/FalconParameters.classPK     A "	A  '  C             U org/bouncycastle/pqc/crypto/falcon/FalconPrivateKeyParameters.classPK     A yt    B             !U org/bouncycastle/pqc/crypto/falcon/FalconPublicKeyParameters.classPK     A O    2             S#U org/bouncycastle/pqc/crypto/falcon/FalconRNG.classPK     A Q6  c
  3             'U org/bouncycastle/pqc/crypto/falcon/FalconSign.classPK     A cȆ    5             M.U org/bouncycastle/pqc/crypto/falcon/FalconSigner.classPK     A D     9             62U org/bouncycastle/pqc/crypto/falcon/FalconSmallPrime.classPK     A lUb-  MI  =             p3U org/bouncycastle/pqc/crypto/falcon/FalconSmallPrimeList.classPK     A Q0_@,  J  3             =aU org/bouncycastle/pqc/crypto/falcon/FalconVrfy.classPK     A \~Q   P  3             ލU org/bouncycastle/pqc/crypto/falcon/SamplerCtx.classPK     A &7]  ^  1             &U org/bouncycastle/pqc/crypto/falcon/SamplerZ.classPK
 
      A             "             =U org/bouncycastle/pqc/crypto/frodo/PK     A -
    3             }U org/bouncycastle/pqc/crypto/frodo/FrodoEngine.classPK     A c^,    9             U org/bouncycastle/pqc/crypto/frodo/FrodoKEMExtractor.classPK     A 5;P  O  9             U org/bouncycastle/pqc/crypto/frodo/FrodoKEMGenerator.classPK     A Ｅ     D             U org/bouncycastle/pqc/crypto/frodo/FrodoKeyGenerationParameters.classPK     A *y  f  =             
U org/bouncycastle/pqc/crypto/frodo/FrodoKeyPairGenerator.classPK     A o     :             UU org/bouncycastle/pqc/crypto/frodo/FrodoKeyParameters.classPK     A Ym    R             U org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator$Aes128MatrixGenerator.classPK     A r    T             U org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator$Shake128MatrixGenerator.classPK     A =R""    <             U org/bouncycastle/pqc/crypto/frodo/FrodoMatrixGenerator.classPK     A uU-  	  7             U org/bouncycastle/pqc/crypto/frodo/FrodoParameters.classPK     A ɔP    A             U org/bouncycastle/pqc/crypto/frodo/FrodoPrivateKeyParameters.classPK     A pb'    @             1U org/bouncycastle/pqc/crypto/frodo/FrodoPublicKeyParameters.classPK
 
      A                           ƼU org/bouncycastle/pqc/crypto/hqc/PK     A (ub    :             U org/bouncycastle/pqc/crypto/hqc/FastFourierTransform.classPK     A _@K  S  =             U org/bouncycastle/pqc/crypto/hqc/GF2PolynomialCalculator.classPK     A ŝ)	  @  2             DU org/bouncycastle/pqc/crypto/hqc/GFCalculator.classPK     A a    /             U org/bouncycastle/pqc/crypto/hqc/HQCEngine.classPK     A 5%@I    5             U org/bouncycastle/pqc/crypto/hqc/HQCKEMExtractor.classPK     A i.}  	  5             fU org/bouncycastle/pqc/crypto/hqc/HQCKEMGenerator.classPK     A i7     @             FU org/bouncycastle/pqc/crypto/hqc/HQCKeyGenerationParameters.classPK     A o{r  r  9             U org/bouncycastle/pqc/crypto/hqc/HQCKeyPairGenerator.classPK     A 0:Xd     6             U org/bouncycastle/pqc/crypto/hqc/HQCKeyParameters.classPK     A \h  a	  3             U org/bouncycastle/pqc/crypto/hqc/HQCParameters.classPK     A K    =             HU org/bouncycastle/pqc/crypto/hqc/HQCPrivateKeyParameters.classPK     A v&    <             U org/bouncycastle/pqc/crypto/hqc/HQCPublicKeyParameters.classPK     A ׼a   I  9             ]U org/bouncycastle/pqc/crypto/hqc/ReedMuller$Codeword.classPK     A Z`  c	  0             U org/bouncycastle/pqc/crypto/hqc/ReedMuller.classPK     A .Z[K    1             oU org/bouncycastle/pqc/crypto/hqc/ReedSolomon.classPK     A :)Nf    =             )DV org/bouncycastle/pqc/crypto/hqc/Shake256RandomGenerator.classPK     A y    +             FV org/bouncycastle/pqc/crypto/hqc/Utils.classPK
 
      A                           JV org/bouncycastle/pqc/crypto/lms/PK     A G  P	  .             JV org/bouncycastle/pqc/crypto/lms/Composer.classPK     A l$j    >             OV org/bouncycastle/pqc/crypto/lms/DigestUtil$WrapperDigest.classPK     A 2P7    0             QV org/bouncycastle/pqc/crypto/lms/DigestUtil.classPK     A 9`    B             UV org/bouncycastle/pqc/crypto/lms/HSS$PlaceholderLMSPrivateKey.classPK     A P7(V    )             PWV org/bouncycastle/pqc/crypto/lms/HSS.classPK     A 'z    @             `V org/bouncycastle/pqc/crypto/lms/HSSKeyGenerationParameters.classPK     A Y	  _  9             bV org/bouncycastle/pqc/crypto/lms/HSSKeyPairGenerator.classPK     A eL#  ,  =             eV org/bouncycastle/pqc/crypto/lms/HSSPrivateKeyParameters.classPK     A G\Z    <             vV org/bouncycastle/pqc/crypto/lms/HSSPublicKeyParameters.classPK     A )g  
  2             }V org/bouncycastle/pqc/crypto/lms/HSSSignature.classPK     A }n    /             V org/bouncycastle/pqc/crypto/lms/HSSSigner.classPK     A _Y2  U  7             نV org/bouncycastle/pqc/crypto/lms/LMOtsParameters$1.classPK     A Kf  U
  5             pV org/bouncycastle/pqc/crypto/lms/LMOtsParameters.classPK     A j'  G  5             9V org/bouncycastle/pqc/crypto/lms/LMOtsPrivateKey.classPK     A `uh%6  ,  4             ~V org/bouncycastle/pqc/crypto/lms/LMOtsPublicKey.classPK     A fMP  	  4             V org/bouncycastle/pqc/crypto/lms/LMOtsSignature.classPK     A d    )             KV org/bouncycastle/pqc/crypto/lms/LMS.classPK     A O    0             gV org/bouncycastle/pqc/crypto/lms/LMSContext.classPK     A '߫   )  ;             V org/bouncycastle/pqc/crypto/lms/LMSContextBasedSigner.classPK     A HN      =             0V org/bouncycastle/pqc/crypto/lms/LMSContextBasedVerifier.classPK     A -g	    2             7V org/bouncycastle/pqc/crypto/lms/LMSException.classPK     A ϱ*  |  @             V org/bouncycastle/pqc/crypto/lms/LMSKeyGenerationParameters.classPK     A o    9             8V org/bouncycastle/pqc/crypto/lms/LMSKeyPairGenerator.classPK     A    =  6             V org/bouncycastle/pqc/crypto/lms/LMSKeyParameters.classPK     A e    3             ^V org/bouncycastle/pqc/crypto/lms/LMSParameters.classPK     A n#j  \  F             αV org/bouncycastle/pqc/crypto/lms/LMSPrivateKeyParameters$CacheKey.classPK     A 0i!  d"  =             V org/bouncycastle/pqc/crypto/lms/LMSPrivateKeyParameters.classPK     A `    <             8V org/bouncycastle/pqc/crypto/lms/LMSPublicKeyParameters.classPK     A (    2             KV org/bouncycastle/pqc/crypto/lms/LMSSignature.classPK     A W+    5             tV org/bouncycastle/pqc/crypto/lms/LMSSignedPubKey.classPK     A 6    /             V org/bouncycastle/pqc/crypto/lms/LMSSigner.classPK     A \yg  e  7             V org/bouncycastle/pqc/crypto/lms/LMSigParameters$1.classPK     A [|  *
  5             `V org/bouncycastle/pqc/crypto/lms/LMSigParameters.classPK     A S	    ,             V org/bouncycastle/pqc/crypto/lms/LM_OTS.classPK     A y\)  I  .             V org/bouncycastle/pqc/crypto/lms/LmsUtils.classPK     A F    0             sV org/bouncycastle/pqc/crypto/lms/SeedDerive.classPK
 
      A             !             V org/bouncycastle/pqc/crypto/mayo/PK     A 0X7    0             V org/bouncycastle/pqc/crypto/mayo/GF16Utils.classPK     A ,4g     B             V org/bouncycastle/pqc/crypto/mayo/MayoKeyGenerationParameters.classPK     A zH%  +  ;             V org/bouncycastle/pqc/crypto/mayo/MayoKeyPairGenerator.classPK     A }Oy     8             V org/bouncycastle/pqc/crypto/mayo/MayoKeyParameters.classPK     A 368q  
  5             gV org/bouncycastle/pqc/crypto/mayo/MayoParameters.classPK     A o     ?             W org/bouncycastle/pqc/crypto/mayo/MayoPrivateKeyParameters.classPK     A H9=    >             W org/bouncycastle/pqc/crypto/mayo/MayoPublicKeyParameters.classPK     A 5-  .  1             W org/bouncycastle/pqc/crypto/mayo/MayoSigner.classPK     A qti  |  ,             W org/bouncycastle/pqc/crypto/mayo/Utils.classPK
 
      A             "             U!W org/bouncycastle/pqc/crypto/mldsa/PK     A 
Y[  j  7             !W org/bouncycastle/pqc/crypto/mldsa/HashMLDSASigner.classPK     A ߺ  f$  3             U)W org/bouncycastle/pqc/crypto/mldsa/MLDSAEngine.classPK     A ͪ    D             7W org/bouncycastle/pqc/crypto/mldsa/MLDSAKeyGenerationParameters.classPK     A NP  O  =             @9W org/bouncycastle/pqc/crypto/mldsa/MLDSAKeyPairGenerator.classPK     A L     :             ;W org/bouncycastle/pqc/crypto/mldsa/MLDSAKeyParameters.classPK     A ކ
  C  7             R=W org/bouncycastle/pqc/crypto/mldsa/MLDSAParameters.classPK     A g   ;  A             ]@W org/bouncycastle/pqc/crypto/mldsa/MLDSAPrivateKeyParameters.classPK     A 
"i    @             |GW org/bouncycastle/pqc/crypto/mldsa/MLDSAPublicKeyParameters.classPK     A   i  3             SJW org/bouncycastle/pqc/crypto/mldsa/MLDSASigner.classPK     A U	  Y  +             :QW org/bouncycastle/pqc/crypto/mldsa/Ntt.classPK     A 
^N  l
  /             [W org/bouncycastle/pqc/crypto/mldsa/Packing.classPK     A g	  )  ,             .aW org/bouncycastle/pqc/crypto/mldsa/Poly.classPK     A 
  A
  0             sW org/bouncycastle/pqc/crypto/mldsa/PolyVecK.classPK     A O  
  0             xW org/bouncycastle/pqc/crypto/mldsa/PolyVecL.classPK     A x+    5             u}W org/bouncycastle/pqc/crypto/mldsa/PolyVecMatrix.classPK     A V7&  v  .             W org/bouncycastle/pqc/crypto/mldsa/Reduce.classPK     A ^J    0             W org/bouncycastle/pqc/crypto/mldsa/Rounding.classPK     A     @             W org/bouncycastle/pqc/crypto/mldsa/Symmetric$ShakeSymmetric.classPK     A g7    1             W org/bouncycastle/pqc/crypto/mldsa/Symmetric.classPK
 
      A             "             W org/bouncycastle/pqc/crypto/mlkem/PK     A q9    +             W org/bouncycastle/pqc/crypto/mlkem/CBD.classPK     A   5  3             W org/bouncycastle/pqc/crypto/mlkem/MLKEMEngine.classPK     A *    6             W org/bouncycastle/pqc/crypto/mlkem/MLKEMExtractor.classPK     A 4    6             &W org/bouncycastle/pqc/crypto/mlkem/MLKEMGenerator.classPK     A `  r  3             W org/bouncycastle/pqc/crypto/mlkem/MLKEMIndCpa.classPK     A e>k    D             W org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyGenerationParameters.classPK     A zN    =             W org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyPairGenerator.classPK     A X+     :             W org/bouncycastle/pqc/crypto/mlkem/MLKEMKeyParameters.classPK     A     7             ݩW org/bouncycastle/pqc/crypto/mlkem/MLKEMParameters.classPK     A ө    A             -W org/bouncycastle/pqc/crypto/mlkem/MLKEMPrivateKeyParameters.classPK     A     @             FW org/bouncycastle/pqc/crypto/mlkem/MLKEMPublicKeyParameters.classPK     A obtY8  L  +             W org/bouncycastle/pqc/crypto/mlkem/Ntt.classPK     A }bq	    ,             ?W org/bouncycastle/pqc/crypto/mlkem/Poly.classPK     A ~    /             
W org/bouncycastle/pqc/crypto/mlkem/PolyVec.classPK     A ^iW    .             W org/bouncycastle/pqc/crypto/mlkem/Reduce.classPK     A ٔѢ    @             W org/bouncycastle/pqc/crypto/mlkem/Symmetric$ShakeSymmetric.classPK     A P;    1             W org/bouncycastle/pqc/crypto/mlkem/Symmetric.classPK
 
      A             $             BW org/bouncycastle/pqc/crypto/newhope/PK     A Qd  ^  2             W org/bouncycastle/pqc/crypto/newhope/ChaCha20.classPK     A $GĖ    9             HW org/bouncycastle/pqc/crypto/newhope/ErrorCorrection.classPK     A pU9my    5             EW org/bouncycastle/pqc/crypto/newhope/NHAgreement.classPK     A s    A             !W org/bouncycastle/pqc/crypto/newhope/NHExchangePairGenerator.classPK     A ?PΞ  ?  <             YW org/bouncycastle/pqc/crypto/newhope/NHKeyPairGenerator.classPK     A Ѽ  	  E             W org/bouncycastle/pqc/crypto/newhope/NHOtherInfoGenerator$PartyU.classPK     A =r?  -  E             W org/bouncycastle/pqc/crypto/newhope/NHOtherInfoGenerator$PartyV.classPK     A UA    >             KW org/bouncycastle/pqc/crypto/newhope/NHOtherInfoGenerator.classPK     A L  x  @             W org/bouncycastle/pqc/crypto/newhope/NHPrivateKeyParameters.classPK     A [
  w  ?             uW org/bouncycastle/pqc/crypto/newhope/NHPublicKeyParameters.classPK     A f      @             W org/bouncycastle/pqc/crypto/newhope/NHSecretKeyProcessor$1.classPK     A w    L             W org/bouncycastle/pqc/crypto/newhope/NHSecretKeyProcessor$PartyUBuilder.classPK     A -E    L             W org/bouncycastle/pqc/crypto/newhope/NHSecretKeyProcessor$PartyVBuilder.classPK     A mS~X  a  >             wW org/bouncycastle/pqc/crypto/newhope/NHSecretKeyProcessor.classPK     A VW
  ~"  -             ;W org/bouncycastle/pqc/crypto/newhope/NTT.classPK     A R  R  1             |
X org/bouncycastle/pqc/crypto/newhope/NewHope.classPK     A s!   a  0             wX org/bouncycastle/pqc/crypto/newhope/Params.classPK     A :
  R  .             X org/bouncycastle/pqc/crypto/newhope/Poly.classPK     A F!o/  P_  1             5X org/bouncycastle/pqc/crypto/newhope/Precomp.classPK     A f"4    0             FX org/bouncycastle/pqc/crypto/newhope/Reduce.classPK
 
      A             !             GX org/bouncycastle/pqc/crypto/ntru/PK     A !  M  7             GX org/bouncycastle/pqc/crypto/ntru/NTRUKEMExtractor.classPK     A FB  /	  7             ZLX org/bouncycastle/pqc/crypto/ntru/NTRUKEMGenerator.classPK     A 7P     B             QX org/bouncycastle/pqc/crypto/ntru/NTRUKeyGenerationParameters.classPK     A 
Z1-    ;             oRX org/bouncycastle/pqc/crypto/ntru/NTRUKeyPairGenerator.classPK     A C     8             UX org/bouncycastle/pqc/crypto/ntru/NTRUKeyParameters.classPK     A ʔ    0             .WX org/bouncycastle/pqc/crypto/ntru/NTRUOWCPA.classPK     A r    5             ^X org/bouncycastle/pqc/crypto/ntru/NTRUParameters.classPK     A F*    ?             aX org/bouncycastle/pqc/crypto/ntru/NTRUPrivateKeyParameters.classPK     A ہ`)    >             bcX org/bouncycastle/pqc/crypto/ntru/NTRUPublicKeyParameters.classPK     A $  a  3             dX org/bouncycastle/pqc/crypto/ntru/NTRUSampling.classPK     A @X      9             |jX org/bouncycastle/pqc/crypto/ntru/OWCPADecryptResult.classPK     A DAI      3             kX org/bouncycastle/pqc/crypto/ntru/OWCPAKeyPair.classPK     A 9    5             lX org/bouncycastle/pqc/crypto/ntru/PolynomialPair.classPK
 
      A             &             LnX org/bouncycastle/pqc/crypto/ntruprime/PK     A `T;x  
  B             nX org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKEMExtractor.classPK     A +Gcz    B             xtX org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKEMGenerator.classPK     A @m  :  M             byX org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKeyGenerationParameters.classPK     A ,  4	  F             J{X org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKeyPairGenerator.classPK     A 3ʄ     C             zX org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeKeyParameters.classPK     A     @             X org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimeParameters.classPK     A E    J             X org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimePrivateKeyParameters.classPK     A L=#  ^  I             X org/bouncycastle/pqc/crypto/ntruprime/NTRULPRimePublicKeyParameters.classPK     A {ra  `	  B             X org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKEMExtractor.classPK     A     B             ,X org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKEMGenerator.classPK     A Sj  8  M             iX org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKeyGenerationParameters.classPK     A ]  	  F             NX org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKeyPairGenerator.classPK     A I1     C             X org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeKeyParameters.classPK     A `  /  @             X org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimeParameters.classPK     A m4    J             X org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimePrivateKeyParameters.classPK     A B(  (  I             GX org/bouncycastle/pqc/crypto/ntruprime/SNTRUPrimePublicKeyParameters.classPK     A ͪR)  #  1             X org/bouncycastle/pqc/crypto/ntruprime/Utils.classPK
 
      A             #             X org/bouncycastle/pqc/crypto/picnic/PK     A TkJ    2             &X org/bouncycastle/pqc/crypto/picnic/KMatrices.classPK     A ҈q*7    =             жX org/bouncycastle/pqc/crypto/picnic/KMatricesWithPointer.classPK     A mm    7             rX org/bouncycastle/pqc/crypto/picnic/LowmcConstants.classPK     A aS    9             ӽX org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL1.classPK     A P    9             X org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL3.classPK     A !rR    9             DX org/bouncycastle/pqc/crypto/picnic/LowmcConstantsL5.classPK     A TP    ,             X org/bouncycastle/pqc/crypto/picnic/Msg.classPK     A  屢3  &w  5             vX org/bouncycastle/pqc/crypto/picnic/PicnicEngine.classPK     A d0   
  F             X org/bouncycastle/pqc/crypto/picnic/PicnicKeyGenerationParameters.classPK     A gh  ]  ?             , Y org/bouncycastle/pqc/crypto/picnic/PicnicKeyPairGenerator.classPK     A .     <             Y org/bouncycastle/pqc/crypto/picnic/PicnicKeyParameters.classPK     A Œĺ    E             WY org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L1Constants.classPK     A     E             Y org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L3Constants.classPK     A H    E             `Y org/bouncycastle/pqc/crypto/picnic/PicnicParameters$L5Constants.classPK     A :z    9             Y org/bouncycastle/pqc/crypto/picnic/PicnicParameters.classPK     A ɽl    C             ^Y org/bouncycastle/pqc/crypto/picnic/PicnicPrivateKeyParameters.classPK     A }`7    B             
Y org/bouncycastle/pqc/crypto/picnic/PicnicPublicKeyParameters.classPK     A |;M  m  5             `Y org/bouncycastle/pqc/crypto/picnic/PicnicSigner.classPK     A ~4  0  8             Y org/bouncycastle/pqc/crypto/picnic/Signature$Proof.classPK     A #*    2             Y org/bouncycastle/pqc/crypto/picnic/Signature.classPK     A C    :             1Y org/bouncycastle/pqc/crypto/picnic/Signature2$Proof2.classPK     A ,_    3             Y org/bouncycastle/pqc/crypto/picnic/Signature2.classPK     A    
  -             0Y org/bouncycastle/pqc/crypto/picnic/Tape.classPK     A -jU  $  -              Y org/bouncycastle/pqc/crypto/picnic/Tree.classPK     A B]~    .             ;,Y org/bouncycastle/pqc/crypto/picnic/Utils.classPK     A Te,    -             0Y org/bouncycastle/pqc/crypto/picnic/View.classPK     A yC# " 9             1Y org/bouncycastle/pqc/crypto/picnic/lowmcL1.bin.propertiesPK     A هgP W 9             Z org/bouncycastle/pqc/crypto/picnic/lowmcL3.bin.propertiesPK     A  ֛n | 9              M` org/bouncycastle/pqc/crypto/picnic/lowmcL5.bin.propertiesPK
 
      A             $             0k org/bouncycastle/pqc/crypto/rainbow/PK     A s    8             rk org/bouncycastle/pqc/crypto/rainbow/ComputeInField.classPK     A "  
  2             k org/bouncycastle/pqc/crypto/rainbow/GF2Field.classPK     A #N    5             k org/bouncycastle/pqc/crypto/rainbow/RainbowDRBG.classPK     A m
  k  ?             k org/bouncycastle/pqc/crypto/rainbow/RainbowKeyComputation.classPK     A h8     H             k org/bouncycastle/pqc/crypto/rainbow/RainbowKeyGenerationParameters.classPK     A [    C             Ck org/bouncycastle/pqc/crypto/rainbow/RainbowKeyPairGenerator$1.classPK     A jW&  8  A             |k org/bouncycastle/pqc/crypto/rainbow/RainbowKeyPairGenerator.classPK     A Z *4    >             k org/bouncycastle/pqc/crypto/rainbow/RainbowKeyParameters.classPK     A N
{C  	  ;             k org/bouncycastle/pqc/crypto/rainbow/RainbowParameters.classPK     A /"    E             ]k org/bouncycastle/pqc/crypto/rainbow/RainbowPrivateKeyParameters.classPK     A Vt1    D             k org/bouncycastle/pqc/crypto/rainbow/RainbowPublicKeyParameters.classPK     A q=     :             2k org/bouncycastle/pqc/crypto/rainbow/RainbowPublicMap.classPK     A '"L¿    9             k org/bouncycastle/pqc/crypto/rainbow/RainbowSigner$1.classPK     A b%+  <  7             k org/bouncycastle/pqc/crypto/rainbow/RainbowSigner.classPK     A s  )  5             Pl org/bouncycastle/pqc/crypto/rainbow/RainbowUtil.classPK     A n    1             Cl org/bouncycastle/pqc/crypto/rainbow/Version.classPK
 
      A             "             l org/bouncycastle/pqc/crypto/saber/PK     A m;ҭ[
  k  ,             l org/bouncycastle/pqc/crypto/saber/Poly.classPK     A G
    3             l org/bouncycastle/pqc/crypto/saber/SABEREngine.classPK     A vZ    9             Z'l org/bouncycastle/pqc/crypto/saber/SABERKEMExtractor.classPK     A @&  W  9             )l org/bouncycastle/pqc/crypto/saber/SABERKEMGenerator.classPK     A YI     D             m,l org/bouncycastle/pqc/crypto/saber/SABERKeyGenerationParameters.classPK     A k,    =             -l org/bouncycastle/pqc/crypto/saber/SABERKeyPairGenerator.classPK     A Mp
     :             1l org/bouncycastle/pqc/crypto/saber/SABERKeyParameters.classPK     A <%    7             W2l org/bouncycastle/pqc/crypto/saber/SABERParameters.classPK     A uKs    A             5l org/bouncycastle/pqc/crypto/saber/SABERPrivateKeyParameters.classPK     A Ӣ-+    @             o7l org/bouncycastle/pqc/crypto/saber/SABERPublicKeyParameters.classPK     A z<ڧ    >             9l org/bouncycastle/pqc/crypto/saber/Symmetric$AesSymmetric.classPK     A     @             <l org/bouncycastle/pqc/crypto/saber/Symmetric$ShakeSymmetric.classPK     A $k+     1             w>l org/bouncycastle/pqc/crypto/saber/Symmetric.classPK     A om/Q    -             ?l org/bouncycastle/pqc/crypto/saber/Utils.classPK
 
      A             #             ~Fl org/bouncycastle/pqc/crypto/slhdsa/PK     A ݈Y  c  -             Fl org/bouncycastle/pqc/crypto/slhdsa/ADRS.classPK     A pV=n  f
  -             sJl org/bouncycastle/pqc/crypto/slhdsa/Fors.classPK     A $.6    +             <Ql org/bouncycastle/pqc/crypto/slhdsa/HT.classPK     A zC    9             Xl org/bouncycastle/pqc/crypto/slhdsa/HashSLHDSASigner.classPK     A <     6             3el org/bouncycastle/pqc/crypto/slhdsa/IndexedDigest.classPK     A *M      2             fl org/bouncycastle/pqc/crypto/slhdsa/NodeEntry.classPK     A !      +             gl org/bouncycastle/pqc/crypto/slhdsa/PK.classPK     A 9	?    ,             hl org/bouncycastle/pqc/crypto/slhdsa/SIG.classPK     A w  U  1             kl org/bouncycastle/pqc/crypto/slhdsa/SIG_FORS.classPK     A ˽  W  1             .ml org/bouncycastle/pqc/crypto/slhdsa/SIG_XMSS.classPK     A MD      +             nl org/bouncycastle/pqc/crypto/slhdsa/SK.classPK     A Z  K  @             ol org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine$Sha2Engine.classPK     A rԷ]  	  D             ywl org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine$Shake256Engine.classPK     A 9Źh     5             H|l org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngine.classPK     A ϏE      =             l org/bouncycastle/pqc/crypto/slhdsa/SLHDSAEngineProvider.classPK     A -#  
  F             l org/bouncycastle/pqc/crypto/slhdsa/SLHDSAKeyGenerationParameters.classPK     A YE%E  	  ?             l org/bouncycastle/pqc/crypto/slhdsa/SLHDSAKeyPairGenerator.classPK     A "     <             ͅl org/bouncycastle/pqc/crypto/slhdsa/SLHDSAKeyParameters.classPK     A ̩  P  L             *l org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters$Sha2EngineProvider.classPK     A 
  `  P             Ml org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters$Shake256EngineProvider.classPK     A N  &  9             zl org/bouncycastle/pqc/crypto/slhdsa/SLHDSAParameters.classPK     A 	  (  C             l org/bouncycastle/pqc/crypto/slhdsa/SLHDSAPrivateKeyParameters.classPK     A PW    B             yl org/bouncycastle/pqc/crypto/slhdsa/SLHDSAPublicKeyParameters.classPK     A ?ֵ    5             @l org/bouncycastle/pqc/crypto/slhdsa/SLHDSASigner.classPK     A Oř  u
  1             l org/bouncycastle/pqc/crypto/slhdsa/WotsPlus.classPK
 
      A             "             ݥl org/bouncycastle/pqc/crypto/snova/PK     A <.  	  1             l org/bouncycastle/pqc/crypto/snova/GF16Utils.classPK     A   b  1             l org/bouncycastle/pqc/crypto/snova/MapGroup1.classPK     A 5    1             l org/bouncycastle/pqc/crypto/snova/MapGroup2.classPK     A   %  3             El org/bouncycastle/pqc/crypto/snova/SnovaEngine.classPK     A     8             l org/bouncycastle/pqc/crypto/snova/SnovaKeyElements.classPK     A AE     D             vl org/bouncycastle/pqc/crypto/snova/SnovaKeyGenerationParameters.classPK     A a-  +
  =             l org/bouncycastle/pqc/crypto/snova/SnovaKeyPairGenerator.classPK     A )'    7             l org/bouncycastle/pqc/crypto/snova/SnovaParameters.classPK     A VTQ    A             il org/bouncycastle/pqc/crypto/snova/SnovaPrivateKeyParameters.classPK     A Q    @             )l org/bouncycastle/pqc/crypto/snova/SnovaPublicKeyParameters.classPK     A 6  Z"  3             l org/bouncycastle/pqc/crypto/snova/SnovaSigner.classPK
 
      A             $             Hl org/bouncycastle/pqc/crypto/sphincs/PK     A d1K    7             l org/bouncycastle/pqc/crypto/sphincs/HashFunctions.classPK     A dVz  `	  /             :l org/bouncycastle/pqc/crypto/sphincs/Horst.classPK     A ^k!S    1             l org/bouncycastle/pqc/crypto/sphincs/Permute.classPK     A O}"a  Z  :             l org/bouncycastle/pqc/crypto/sphincs/SPHINCS256Config.classPK     A %    K             l org/bouncycastle/pqc/crypto/sphincs/SPHINCS256KeyGenerationParameters.classPK     A Ϊ9    D             Xl org/bouncycastle/pqc/crypto/sphincs/SPHINCS256KeyPairGenerator.classPK     A 
    :             l org/bouncycastle/pqc/crypto/sphincs/SPHINCS256Signer.classPK     A M<    >             m org/bouncycastle/pqc/crypto/sphincs/SPHINCSKeyParameters.classPK     A +    E             m org/bouncycastle/pqc/crypto/sphincs/SPHINCSPrivateKeyParameters.classPK     A m*    D             >	m org/bouncycastle/pqc/crypto/sphincs/SPHINCSPublicKeyParameters.classPK     A |~  -  .             
m org/bouncycastle/pqc/crypto/sphincs/Seed.classPK     A x    7             
m org/bouncycastle/pqc/crypto/sphincs/Tree$leafaddr.classPK     A *`b    .             um org/bouncycastle/pqc/crypto/sphincs/Tree.classPK     A ]Y    .             3m org/bouncycastle/pqc/crypto/sphincs/Wots.classPK
 
      A             (             m org/bouncycastle/pqc/crypto/sphincsplus/PK     A L^^  m  2             .m org/bouncycastle/pqc/crypto/sphincsplus/ADRS.classPK     A Ŋ    2             m org/bouncycastle/pqc/crypto/sphincsplus/Fors.classPK     A N@  F  0             <!m org/bouncycastle/pqc/crypto/sphincsplus/HT.classPK     A ϓa    >             (m org/bouncycastle/pqc/crypto/sphincsplus/HarakaS256Digest.classPK     A V    >             +m org/bouncycastle/pqc/crypto/sphincsplus/HarakaS512Digest.classPK     A ^h      9             /m org/bouncycastle/pqc/crypto/sphincsplus/HarakaSBase.classPK     A +    8             Dm org/bouncycastle/pqc/crypto/sphincsplus/HarakaSXof.classPK     A F   $  ;             pGm org/bouncycastle/pqc/crypto/sphincsplus/IndexedDigest.classPK     A #      7             Hm org/bouncycastle/pqc/crypto/sphincsplus/NodeEntry.classPK     A S      0             Jm org/bouncycastle/pqc/crypto/sphincsplus/PK.classPK     A g$    1             )Km org/bouncycastle/pqc/crypto/sphincsplus/SIG.classPK     A 5  Z  6             -Nm org/bouncycastle/pqc/crypto/sphincsplus/SIG_FORS.classPK     A eJd  \  6             Om org/bouncycastle/pqc/crypto/sphincsplus/SIG_XMSS.classPK     A Ru      0             Qm org/bouncycastle/pqc/crypto/sphincsplus/SK.classPK     A   ,  M             /Rm org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$HarakaSEngine.classPK     A G    J             Wm org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$Sha2Engine.classPK     A 7a  _
  N             _m org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine$Shake256Engine.classPK     A yN#{    ?             dm org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngine.classPK     A ƹ\      G             hm org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusEngineProvider.classPK     A 	  5  P             im org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusKeyGenerationParameters.classPK     A [;  R
  I             1km org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusKeyPairGenerator.classPK     A P     F             Zom org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusKeyParameters.classPK     A JY    Y             pm org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$HarakaSEngineProvider.classPK     A NN    V             sm org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$Sha2EngineProvider.classPK     A )    Z             lum org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters$Shake256EngineProvider.classPK     A ;		    C             wm org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusParameters.classPK     A <    M             @m org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusPrivateKeyParameters.classPK     A y`    L             ΄m org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusPublicKeyParameters.classPK     A M`    ?             m org/bouncycastle/pqc/crypto/sphincsplus/SPHINCSPlusSigner.classPK     A =x  
  6             m org/bouncycastle/pqc/crypto/sphincsplus/WotsPlus.classPK
 
      A             !             Wm org/bouncycastle/pqc/crypto/util/PK     A =Sl  s  C             m org/bouncycastle/pqc/crypto/util/PQCOtherInfoGenerator$PartyU.classPK     A t  X	  C             sm org/bouncycastle/pqc/crypto/util/PQCOtherInfoGenerator$PartyV.classPK     A -#  T  <             ҝm org/bouncycastle/pqc/crypto/util/PQCOtherInfoGenerator.classPK     A ,  IJ  8             m org/bouncycastle/pqc/crypto/util/PrivateKeyFactory.classPK     A ňไ  I6  <             tm org/bouncycastle/pqc/crypto/util/PrivateKeyInfoFactory.classPK     A /      9             bm org/bouncycastle/pqc/crypto/util/PublicKeyFactory$1.classPK     A C	    E             bm org/bouncycastle/pqc/crypto/util/PublicKeyFactory$BIKEConverter.classPK     A ^s    E             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$CMCEConverter.classPK     A t  	  J             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$DilithiumConverter.classPK     A %W稌  .  G             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$FalconConverter.classPK     A Kc{/  3  F             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$FrodoConverter.classPK     A 	}c    D             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$HQCConverter.classPK     A ݅    D             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$LMSConverter.classPK     A Thk  E	  F             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MLDSAConverter.classPK     A b  B	  F             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MLKEMConverter.classPK     A 88m  *  E             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$MayoConverter.classPK     A C!  $  C             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NHConverter.classPK     A (yI  ]  K             
m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NTRULPrimeConverter.classPK     A ҹ  A  E             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$NtruConverter.classPK     A u`~  <  G             bm org/bouncycastle/pqc/crypto/util/PublicKeyFactory$PicnicConverter.classPK     A   E  H             Um org/bouncycastle/pqc/crypto/util/PublicKeyFactory$RainbowConverter.classPK     A bzk˻    F             Mm org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SABERConverter.classPK     A +h  [  G             |m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SLHDSAConverter.classPK     A u  ]  K             m org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SNTRUPrimeConverter.classPK     A JX  C  H             n org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SPHINCSConverter.classPK     A ~    L             n org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SPHINCSPlusConverter.classPK     A af}  3  F             |	n org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SnovaConverter.classPK     A M54R    U             mn org/bouncycastle/pqc/crypto/util/PublicKeyFactory$SubjectPublicKeyInfoConverter.classPK     A P  H
  E             Bn org/bouncycastle/pqc/crypto/util/PublicKeyFactory$XMSSConverter.classPK     A h䇡  y
  G             n org/bouncycastle/pqc/crypto/util/PublicKeyFactory$XMSSMTConverter.classPK     A kK  ?  7             n org/bouncycastle/pqc/crypto/util/PublicKeyFactory.classPK     A .  i  B             (n org/bouncycastle/pqc/crypto/util/SecretWithEncapsulationImpl.classPK     A Om
  &  B             +n org/bouncycastle/pqc/crypto/util/SubjectPublicKeyInfoFactory.classPK     A ߏ#  I|  ,             7n org/bouncycastle/pqc/crypto/util/Utils.classPK
 
      A             !             Zn org/bouncycastle/pqc/crypto/xmss/PK     A Hx  /  *             ;[n org/bouncycastle/pqc/crypto/xmss/BDS.classPK     A /hR  @  2             mn org/bouncycastle/pqc/crypto/xmss/BDSStateMap.classPK     A 
z    2             tn org/bouncycastle/pqc/crypto/xmss/BDSTreeHash.classPK     A C  
  7             |n org/bouncycastle/pqc/crypto/xmss/DefaultXMSSMTOid.classPK     A TA}    5             n org/bouncycastle/pqc/crypto/xmss/DefaultXMSSOid.classPK     A v    1             n org/bouncycastle/pqc/crypto/xmss/DigestUtil.classPK     A ӛ      8             6n org/bouncycastle/pqc/crypto/xmss/HashTreeAddress$1.classPK     A pH  e  >             7n org/bouncycastle/pqc/crypto/xmss/HashTreeAddress$Builder.classPK     A '(&?    6             n org/bouncycastle/pqc/crypto/xmss/HashTreeAddress.classPK     A q#0    9             2n org/bouncycastle/pqc/crypto/xmss/KeyedHashFunctions.classPK     A       5             ɓn org/bouncycastle/pqc/crypto/xmss/LTreeAddress$1.classPK     A hFf	    ;             Ŕn org/bouncycastle/pqc/crypto/xmss/LTreeAddress$Builder.classPK     A O</  
  3             7n org/bouncycastle/pqc/crypto/xmss/LTreeAddress.classPK     A Y      7             Ǚn org/bouncycastle/pqc/crypto/xmss/OTSHashAddress$1.classPK     A uX    =             ƚn org/bouncycastle/pqc/crypto/xmss/OTSHashAddress$Builder.classPK     A I+p.    5             9n org/bouncycastle/pqc/crypto/xmss/OTSHashAddress.classPK     A a    /             ʟn org/bouncycastle/pqc/crypto/xmss/WOTSPlus.classPK     A zx    2             +n org/bouncycastle/pqc/crypto/xmss/WOTSPlusOid.classPK     A V(    9             n org/bouncycastle/pqc/crypto/xmss/WOTSPlusParameters.classPK     A 1)>    C             n org/bouncycastle/pqc/crypto/xmss/WOTSPlusPrivateKeyParameters.classPK     A mM    B             ĵn org/bouncycastle/pqc/crypto/xmss/WOTSPlusPublicKeyParameters.classPK     A KwI    8             n org/bouncycastle/pqc/crypto/xmss/WOTSPlusSignature.classPK     A 4/    +             0n org/bouncycastle/pqc/crypto/xmss/XMSS.classPK     A $:    :             kn org/bouncycastle/pqc/crypto/xmss/XMSSAddress$Builder.classPK     A <ଔ$  ?  2             n org/bouncycastle/pqc/crypto/xmss/XMSSAddress.classPK     A c     B             pn org/bouncycastle/pqc/crypto/xmss/XMSSKeyGenerationParameters.classPK     A `{,    ;             n org/bouncycastle/pqc/crypto/xmss/XMSSKeyPairGenerator.classPK     A =H    8             un org/bouncycastle/pqc/crypto/xmss/XMSSKeyParameters.classPK     A .L  U  -             #n org/bouncycastle/pqc/crypto/xmss/XMSSMT.classPK     A ,5a    D             n org/bouncycastle/pqc/crypto/xmss/XMSSMTKeyGenerationParameters.classPK     A ]o"  X  =             @n org/bouncycastle/pqc/crypto/xmss/XMSSMTKeyPairGenerator.classPK     A yl   f  :             n org/bouncycastle/pqc/crypto/xmss/XMSSMTKeyParameters.classPK     A /  5  7             0n org/bouncycastle/pqc/crypto/xmss/XMSSMTParameters.classPK     A ,R      C             Wn org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters$1.classPK     A N
    I             mn org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters$Builder.classPK     A Ge+    A             n org/bouncycastle/pqc/crypto/xmss/XMSSMTPrivateKeyParameters.classPK     A s4       B             Xn org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters$1.classPK     A 1  	  H             ln org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters$Builder.classPK     A 糕
2    @             n org/bouncycastle/pqc/crypto/xmss/XMSSMTPublicKeyParameters.classPK     A | 2      8             n org/bouncycastle/pqc/crypto/xmss/XMSSMTSignature$1.classPK     A ҔI0    >              o org/bouncycastle/pqc/crypto/xmss/XMSSMTSignature$Builder.classPK     A vpM;  R  6             o org/bouncycastle/pqc/crypto/xmss/XMSSMTSignature.classPK     A 2F  +  3             #o org/bouncycastle/pqc/crypto/xmss/XMSSMTSigner.classPK     A l!b    /             o org/bouncycastle/pqc/crypto/xmss/XMSSNode.classPK     A 3h    3             o org/bouncycastle/pqc/crypto/xmss/XMSSNodeUtil.classPK     A 
5ڢ      .             Ro org/bouncycastle/pqc/crypto/xmss/XMSSOid.classPK     A '  Z  5             7 o org/bouncycastle/pqc/crypto/xmss/XMSSParameters.classPK     A F      A             p&o org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters$1.classPK     A 6s
  
  G             'o org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters$Builder.classPK     A gnc7t  i  ?             +o org/bouncycastle/pqc/crypto/xmss/XMSSPrivateKeyParameters.classPK     A 喆E      @             6o org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters$1.classPK     A I,    F             7o org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters$Builder.classPK     A Q.    >             :o org/bouncycastle/pqc/crypto/xmss/XMSSPublicKeyParameters.classPK     A u;q  4  C             @o org/bouncycastle/pqc/crypto/xmss/XMSSReducedSignature$Builder.classPK     A @x1  &
  ;             Bo org/bouncycastle/pqc/crypto/xmss/XMSSReducedSignature.classPK     A       6             Ho org/bouncycastle/pqc/crypto/xmss/XMSSSignature$1.classPK     A >C˝  1	  <             Io org/bouncycastle/pqc/crypto/xmss/XMSSSignature$Builder.classPK     A X  
  4             Mo org/bouncycastle/pqc/crypto/xmss/XMSSSignature.classPK     A y	  ,  1              So org/bouncycastle/pqc/crypto/xmss/XMSSSigner.classPK     A SHþ      C             \o org/bouncycastle/pqc/crypto/xmss/XMSSStoreableObjectInterface.classPK     A Ol    >             ]o org/bouncycastle/pqc/crypto/xmss/XMSSUtil$CheckingStream.classPK     A R	  &  /             ao org/bouncycastle/pqc/crypto/xmss/XMSSUtil.classPK     A  oRUi    7             jo org/bouncycastle/pqc/crypto/xmss/XMSSVerifierUtil.classPK
 
      A             "             po org/bouncycastle/pqc/crypto/xwing/PK     A     9             qo org/bouncycastle/pqc/crypto/xwing/XWingKEMExtractor.classPK     A ;V  
  9             Cto org/bouncycastle/pqc/crypto/xwing/XWingKEMGenerator.classPK     A zB     D             Jyo org/bouncycastle/pqc/crypto/xwing/XWingKeyGenerationParameters.classPK     A ¶-  
  =             {zo org/bouncycastle/pqc/crypto/xwing/XWingKeyPairGenerator.classPK     A 
w^      :             ~o org/bouncycastle/pqc/crypto/xwing/XWingKeyParameters.classPK     A _  d  A             o org/bouncycastle/pqc/crypto/xwing/XWingPrivateKeyParameters.classPK     A Yk'  O  @             ӂo org/bouncycastle/pqc/crypto/xwing/XWingPublicKeyParameters.classPK
 
      A                          ho org/bouncycastle/pqc/jcajce/PK
 
      A             '             o org/bouncycastle/pqc/jcajce/interfaces/PK     A E8Q      4             o org/bouncycastle/pqc/jcajce/interfaces/BIKEKey.classPK     A Αq      4             o org/bouncycastle/pqc/jcajce/interfaces/CMCEKey.classPK     A 1      9             o org/bouncycastle/pqc/jcajce/interfaces/DilithiumKey.classPK     A hj      @             o org/bouncycastle/pqc/jcajce/interfaces/DilithiumPrivateKey.classPK     A EFA      ?             o org/bouncycastle/pqc/jcajce/interfaces/DilithiumPublicKey.classPK     A 
3      6             o org/bouncycastle/pqc/jcajce/interfaces/FalconKey.classPK     A տK     =             o org/bouncycastle/pqc/jcajce/interfaces/FalconPrivateKey.classPK     A ቍ      <             o org/bouncycastle/pqc/jcajce/interfaces/FalconPublicKey.classPK     A qJ      5             o org/bouncycastle/pqc/jcajce/interfaces/FrodoKey.classPK     A Ji      3             ߎo org/bouncycastle/pqc/jcajce/interfaces/HQCKey.classPK     A S      5             ڏo org/bouncycastle/pqc/jcajce/interfaces/KyberKey.classPK     A t[     <             ֐o org/bouncycastle/pqc/jcajce/interfaces/KyberPrivateKey.classPK     A [      ;             o org/bouncycastle/pqc/jcajce/interfaces/KyberPublicKey.classPK     A ;E)<      3             Ȓo org/bouncycastle/pqc/jcajce/interfaces/LMSKey.classPK     A 5p:1   I  :             o org/bouncycastle/pqc/jcajce/interfaces/LMSPrivateKey.classPK     A Ũ      4             o org/bouncycastle/pqc/jcajce/interfaces/MayoKey.classPK     A *:p   y   2             ݕo org/bouncycastle/pqc/jcajce/interfaces/NHKey.classPK     A 3ud      9             o org/bouncycastle/pqc/jcajce/interfaces/NHPrivateKey.classPK     A E4      8             o org/bouncycastle/pqc/jcajce/interfaces/NHPublicKey.classPK     A I<      4             o org/bouncycastle/pqc/jcajce/interfaces/NTRUKey.classPK     A +      :             o org/bouncycastle/pqc/jcajce/interfaces/NTRULPRimeKey.classPK     A iʐ      6             o org/bouncycastle/pqc/jcajce/interfaces/PicnicKey.classPK     A [-      5             o org/bouncycastle/pqc/jcajce/interfaces/SABERKey.classPK     A u      :             o org/bouncycastle/pqc/jcajce/interfaces/SNTRUPrimeKey.classPK     A + Λ      7             o org/bouncycastle/pqc/jcajce/interfaces/SPHINCSKey.classPK     A I=      ;             o org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusKey.classPK     A Eۑ   &  B             o org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusPrivateKey.classPK     A #       A             o org/bouncycastle/pqc/jcajce/interfaces/SPHINCSPlusPublicKey.classPK     A >      5             o org/bouncycastle/pqc/jcajce/interfaces/SnovaKey.classPK     A :  i  @             o org/bouncycastle/pqc/jcajce/interfaces/StateAwareSignature.classPK     A ݑ      4             o org/bouncycastle/pqc/jcajce/interfaces/XMSSKey.classPK     A U1ư      6             o org/bouncycastle/pqc/jcajce/interfaces/XMSSMTKey.classPK     A F2   R  =             o org/bouncycastle/pqc/jcajce/interfaces/XMSSMTPrivateKey.classPK     A    L  ;             o org/bouncycastle/pqc/jcajce/interfaces/XMSSPrivateKey.classPK
 
      A             %             ,o org/bouncycastle/pqc/jcajce/provider/PK     A |  m  8             oo org/bouncycastle/pqc/jcajce/provider/BIKE$Mappings.classPK     A s   l  /             o org/bouncycastle/pqc/jcajce/provider/BIKE.classPK     A W  n  D             Mo org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider$1.classPK     A 	a    D             o org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider$2.classPK     A ˏ1F
    B             .o org/bouncycastle/pqc/jcajce/provider/BouncyCastlePQCProvider.classPK     A @k`  t
  8             Oo org/bouncycastle/pqc/jcajce/provider/CMCE$Mappings.classPK     A E"   l  /             Qo org/bouncycastle/pqc/jcajce/provider/CMCE.classPK     A '%    =             o org/bouncycastle/pqc/jcajce/provider/Dilithium$Mappings.classPK     A 
7   {  4             9o org/bouncycastle/pqc/jcajce/provider/Dilithium.classPK     A   :	  :             o org/bouncycastle/pqc/jcajce/provider/Falcon$Mappings.classPK     A    r  1             o org/bouncycastle/pqc/jcajce/provider/Falcon.classPK     A ujǭ    9             Jo org/bouncycastle/pqc/jcajce/provider/Frodo$Mappings.classPK     A O+   o  0             ^o org/bouncycastle/pqc/jcajce/provider/Frodo.classPK     A OzdJ    7             o org/bouncycastle/pqc/jcajce/provider/HQC$Mappings.classPK     A w   i  .             fo org/bouncycastle/pqc/jcajce/provider/HQC.classPK     A 8B   C  9             o org/bouncycastle/pqc/jcajce/provider/Kyber$Mappings.classPK     A "_   o  0             	o org/bouncycastle/pqc/jcajce/provider/Kyber.classPK     A h  O  7             bo org/bouncycastle/pqc/jcajce/provider/LMS$Mappings.classPK     A j   i  .             /o org/bouncycastle/pqc/jcajce/provider/LMS.classPK     A P5nX    8             o org/bouncycastle/pqc/jcajce/provider/Mayo$Mappings.classPK     A    l  /             Co org/bouncycastle/pqc/jcajce/provider/Mayo.classPK     A aO!    6             o org/bouncycastle/pqc/jcajce/provider/NH$Mappings.classPK     A 'K   k  -              o org/bouncycastle/pqc/jcajce/provider/NH.classPK     A #    8             xo org/bouncycastle/pqc/jcajce/provider/NTRU$Mappings.classPK     A ySi9   l  /             o org/bouncycastle/pqc/jcajce/provider/NTRU.classPK     A ?c&  
  =             Go org/bouncycastle/pqc/jcajce/provider/NTRUPrime$Mappings.classPK     A k<  {  4             }o org/bouncycastle/pqc/jcajce/provider/NTRUPrime.classPK     A )m  	  :             o org/bouncycastle/pqc/jcajce/provider/Picnic$Mappings.classPK     A ہ0   r  1             o org/bouncycastle/pqc/jcajce/provider/Picnic.classPK     A 7  -  9             o org/bouncycastle/pqc/jcajce/provider/SABER$Mappings.classPK     A #a   o  0             :o org/bouncycastle/pqc/jcajce/provider/SABER.classPK     A |^ڳ  j  ;             o org/bouncycastle/pqc/jcajce/provider/SPHINCS$Mappings.classPK     A 뿀  u  2             p org/bouncycastle/pqc/jcajce/provider/SPHINCS.classPK     A jK!    ?             p org/bouncycastle/pqc/jcajce/provider/SPHINCSPlus$Mappings.classPK     A pc    6             	p org/bouncycastle/pqc/jcajce/provider/SPHINCSPlus.classPK     A G  VV  9             p org/bouncycastle/pqc/jcajce/provider/Snova$Mappings.classPK     A QK   o  0             up org/bouncycastle/pqc/jcajce/provider/Snova.classPK     A e˯  :  8             p org/bouncycastle/pqc/jcajce/provider/XMSS$Mappings.classPK     A |   l  /             9#p org/bouncycastle/pqc/jcajce/provider/XMSS.classPK
 
      A             *             $p org/bouncycastle/pqc/jcajce/provider/bike/PK     A Ҏd    @             $p org/bouncycastle/pqc/jcajce/provider/bike/BCBIKEPrivateKey.classPK     A 7]4  '  ?             
*p org/bouncycastle/pqc/jcajce/provider/bike/BCBIKEPublicKey.classPK     A -     E             .p org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi$BIKE128.classPK     A .C     E             R0p org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi$BIKE192.classPK     A [     E             1p org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi$BIKE256.classPK     A [
   c  B             3p org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi$Base.classPK     A C<O  J  =             w4p org/bouncycastle/pqc/jcajce/provider/bike/BIKECipherSpi.classPK     A   m  A             @p org/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyFactorySpi.classPK     A LM  
  C             Ep org/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyGeneratorSpi.classPK     A 1lW  
  G             Jp org/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyPairGeneratorSpi.classPK
 
      A             *             Pp org/bouncycastle/pqc/jcajce/provider/cmce/PK     A !ސM    @             Qp org/bouncycastle/pqc/jcajce/provider/cmce/BCCMCEPrivateKey.classPK     A ~  '  ?             NVp org/bouncycastle/pqc/jcajce/provider/cmce/BCCMCEPublicKey.classPK     A 5@   c  B             :[p org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$Base.classPK     A T#  	  G             \p org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$MCE348864.classPK     A Tu  	  G             7^p org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$MCE460896.classPK     A ;I     H             _p org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$MCE6688128.classPK     A qm     H             aap org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$MCE6960119.classPK     A 4=F     H             bp org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi$MCE8192128.classPK     A c    =             dp org/bouncycastle/pqc/jcajce/provider/cmce/CMCECipherSpi.classPK     A YV<  m  A             pp org/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyFactorySpi.classPK     A #  
  C             up org/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyGeneratorSpi.classPK     A Y$5  $  G             {p org/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyPairGeneratorSpi.classPK
 
      A             /             p org/bouncycastle/pqc/jcajce/provider/dilithium/PK     A m    J             p org/bouncycastle/pqc/jcajce/provider/dilithium/BCDilithiumPrivateKey.classPK     A f    I             p org/bouncycastle/pqc/jcajce/provider/dilithium/BCDilithiumPublicKey.classPK     A      Q             /p org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2.classPK     A fS0    U             p org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2_AES.classPK     A (7     Q             5p org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3.classPK     A j    U             p org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3_AES.classPK     A QJd     Q             ;p org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5.classPK     A VB    U             p org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5_AES.classPK     A V    K             Ap org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi.classPK     A jv&  \  W             p org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyPairGeneratorSpi$Base2.classPK     A k&  \  W             Tp org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyPairGeneratorSpi$Base3.classPK     A df&  \  W             p org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyPairGeneratorSpi$Base5.classPK     A $S[}    Q             p org/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyPairGeneratorSpi.classPK     A #     F             p org/bouncycastle/pqc/jcajce/provider/dilithium/SignatureSpi$Base.classPK     A '    G             p org/bouncycastle/pqc/jcajce/provider/dilithium/SignatureSpi$Base2.classPK     A 3HB    G             p org/bouncycastle/pqc/jcajce/provider/dilithium/SignatureSpi$Base3.classPK     A L6C    G             p org/bouncycastle/pqc/jcajce/provider/dilithium/SignatureSpi$Base5.classPK     A |n  C  A             ȭp org/bouncycastle/pqc/jcajce/provider/dilithium/SignatureSpi.classPK
 
      A             ,             p org/bouncycastle/pqc/jcajce/provider/falcon/PK     A b${  #  D             6p org/bouncycastle/pqc/jcajce/provider/falcon/BCFalconPrivateKey.classPK     A `    C             #p org/bouncycastle/pqc/jcajce/provider/falcon/BCFalconPublicKey.classPK     A Q     P             Op org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon1024.classPK     A +[B     O             p org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon512.classPK     A `H  
  E             Gp org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi.classPK     A J=H     V             9p org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyPairGeneratorSpi$Falcon1024.classPK     A 
8     U             p org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyPairGeneratorSpi$Falcon512.classPK     A IWR  S  K             ,p org/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyPairGeneratorSpi.classPK     A 0M   {  C             p org/bouncycastle/pqc/jcajce/provider/falcon/SignatureSpi$Base.classPK     A Cs  H  I             Ep org/bouncycastle/pqc/jcajce/provider/falcon/SignatureSpi$Falcon1024.classPK     A 2s  E  H             p org/bouncycastle/pqc/jcajce/provider/falcon/SignatureSpi$Falcon512.classPK     A >  V  >             Lp org/bouncycastle/pqc/jcajce/provider/falcon/SignatureSpi.classPK
 
      A             +             [p org/bouncycastle/pqc/jcajce/provider/frodo/PK     A  
  ]  B             p org/bouncycastle/pqc/jcajce/provider/frodo/BCFrodoPrivateKey.classPK     A e3a  
  A             p org/bouncycastle/pqc/jcajce/provider/frodo/BCFrodoPublicKey.classPK     A I   h  D             p org/bouncycastle/pqc/jcajce/provider/frodo/FrodoCipherSpi$Base.classPK     A \ 
    ?             p org/bouncycastle/pqc/jcajce/provider/frodo/FrodoCipherSpi.classPK     A s   s  C             &p org/bouncycastle/pqc/jcajce/provider/frodo/FrodoKeyFactorySpi.classPK     A ^  
  E             9p org/bouncycastle/pqc/jcajce/provider/frodo/FrodoKeyGeneratorSpi.classPK     A Im  |  I             Xp org/bouncycastle/pqc/jcajce/provider/frodo/FrodoKeyPairGeneratorSpi.classPK
 
      A             )             q org/bouncycastle/pqc/jcajce/provider/hqc/PK     A ڧ;    >             q org/bouncycastle/pqc/jcajce/provider/hqc/BCHQCPrivateKey.classPK     A #7}    =             H
q org/bouncycastle/pqc/jcajce/provider/hqc/BCHQCPublicKey.classPK     A ԅV   ^  @             0q org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi$Base.classPK     A tf     B             q org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi$HQC128.classPK     A      B             q org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi$HQC192.classPK     A @O     B             Aq org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi$HQC256.classPK     A pI  I  ;             q org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi.classPK     A +zD     F              q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC128.classPK     A fA     F             @"q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC192.classPK     A      F             #q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi$HQC256.classPK     A 8}J    ?             %q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi.classPK     A      H             E+q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyGeneratorSpi$HQC128.classPK     A 5^$     H             ,q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyGeneratorSpi$HQC192.classPK     A J^     H             .q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyGeneratorSpi$HQC256.classPK     A A&*    A             e/q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyGeneratorSpi.classPK     A 	e    L             5q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyPairGeneratorSpi$HQC128.classPK     A w    L             7q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyPairGeneratorSpi$HQC192.classPK     A ;    L             $9q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyPairGeneratorSpi$HQC256.classPK     A p'y    E             :q org/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyPairGeneratorSpi.classPK
 
      A             +             !Aq org/bouncycastle/pqc/jcajce/provider/kyber/PK     A l:/  H
  B             jAq org/bouncycastle/pqc/jcajce/provider/kyber/BCKyberPrivateKey.classPK     A $g
  p  A             	Gq org/bouncycastle/pqc/jcajce/provider/kyber/BCKyberPublicKey.classPK     A G   h  D             :Lq org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi$Base.classPK     A      I             Mq org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi$Kyber1024.classPK     A *?     H             Oq org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi$Kyber512.classPK     A sB;     H             Pq org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi$Kyber768.classPK     A y    ?             Qq org/bouncycastle/pqc/jcajce/provider/kyber/KyberCipherSpi.classPK     A p4    M             p^q org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber1024.classPK     A L;     Q             _q org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber1024_AES.classPK     A 6G
    L             xaq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber512.classPK     A 8j9h    P             bq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber512_AES.classPK     A     L             }dq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber768.classPK     A _^Ϙ    P             fq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi$Kyber768_AES.classPK     A F`    C             gq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi.classPK     A A	     O             mq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi$Kyber1024.classPK     A v.d     N             nq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi$Kyber512.classPK     A 2J@     N             pq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi$Kyber768.classPK     A .\p  }  E             zqq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyGeneratorSpi.classPK     A p     S             ]xq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi$Kyber1024.classPK     A w     R             yq org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi$Kyber512.classPK     A fNr     R             ]{q org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi$Kyber768.classPK     A O^    I             |q org/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyPairGeneratorSpi.classPK
 
      A             )             q org/bouncycastle/pqc/jcajce/provider/lms/PK     A yu   
  >             2q org/bouncycastle/pqc/jcajce/provider/lms/BCLMSPrivateKey.classPK     A ;o8  
  =             q org/bouncycastle/pqc/jcajce/provider/lms/BCLMSPublicKey.classPK     A YAKS    9             Ǐq org/bouncycastle/pqc/jcajce/provider/lms/DigestUtil.classPK     A N4!    ?             q org/bouncycastle/pqc/jcajce/provider/lms/LMSKeyFactorySpi.classPK     A ZZ    E             q org/bouncycastle/pqc/jcajce/provider/lms/LMSKeyPairGeneratorSpi.classPK     A Az     F             q org/bouncycastle/pqc/jcajce/provider/lms/LMSSignatureSpi$generic.classPK     A Y0U    >             /q org/bouncycastle/pqc/jcajce/provider/lms/LMSSignatureSpi.classPK
 
      A             *             ]q org/bouncycastle/pqc/jcajce/provider/mayo/PK     A ӏ    @             q org/bouncycastle/pqc/jcajce/provider/mayo/BCMayoPrivateKey.classPK     A ծ~  '  ?             ԩq org/bouncycastle/pqc/jcajce/provider/mayo/BCMayoPublicKey.classPK     A d     G             q org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo1.classPK     A %V     G             *q org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo2.classPK     A %b     G             q org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo3.classPK     A n     G              q org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi$Mayo5.classPK     A X  <  A             lq org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyFactorySpi.classPK     A m     M             q org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyPairGeneratorSpi$Mayo1.classPK     A (aK     M             q org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyPairGeneratorSpi$Mayo2.classPK     A <}     M             Qq org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyPairGeneratorSpi$Mayo3.classPK     A w     M             q org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyPairGeneratorSpi$Mayo5.classPK     A h)  s  G             "q org/bouncycastle/pqc/jcajce/provider/mayo/MayoKeyPairGeneratorSpi.classPK     A !   o  A             q org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi$Base.classPK     A      B             q org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi$Mayo1.classPK     A [!     B             q org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi$Mayo2.classPK     A %A7     B             q org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi$Mayo3.classPK     A `1     B             jq org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi$Mayo5.classPK     A ו  v  <             q org/bouncycastle/pqc/jcajce/provider/mayo/SignatureSpi.classPK
 
      A             -             q org/bouncycastle/pqc/jcajce/provider/newhope/PK     A f<  	  A             )q org/bouncycastle/pqc/jcajce/provider/newhope/BCNHPrivateKey.classPK     A (  5	  @             q org/bouncycastle/pqc/jcajce/provider/newhope/BCNHPublicKey.classPK     A uX*I  ,  B             Hq org/bouncycastle/pqc/jcajce/provider/newhope/KeyAgreementSpi.classPK     A   p  B             mq org/bouncycastle/pqc/jcajce/provider/newhope/NHKeyFactorySpi.classPK     A dm  H  H             q org/bouncycastle/pqc/jcajce/provider/newhope/NHKeyPairGeneratorSpi.classPK
 
      A             *             |q org/bouncycastle/pqc/jcajce/provider/ntru/PK     A cO  J  @             q org/bouncycastle/pqc/jcajce/provider/ntru/BCNTRUPrivateKey.classPK     A E_  
  ?             q org/bouncycastle/pqc/jcajce/provider/ntru/BCNTRUPublicKey.classPK     A ?   c  B             q org/bouncycastle/pqc/jcajce/provider/ntru/NTRUCipherSpi$Base.classPK     A aqX    =             q org/bouncycastle/pqc/jcajce/provider/ntru/NTRUCipherSpi.classPK     A EC  m  A             r org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyFactorySpi.classPK     A     C             r org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyGeneratorSpi.classPK     A ߓN  p  G             
r org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyPairGeneratorSpi.classPK
 
      A             /             ?r org/bouncycastle/pqc/jcajce/provider/ntruprime/PK     A 
ر    K             r org/bouncycastle/pqc/jcajce/provider/ntruprime/BCNTRULPRimePrivateKey.classPK     A k  -  J             r org/bouncycastle/pqc/jcajce/provider/ntruprime/BCNTRULPRimePublicKey.classPK     A     K             r org/bouncycastle/pqc/jcajce/provider/ntruprime/BCSNTRUPrimePrivateKey.classPK     A tp  -  J             "r org/bouncycastle/pqc/jcajce/provider/ntruprime/BCSNTRUPrimePublicKey.classPK     A X    M             'r org/bouncycastle/pqc/jcajce/provider/ntruprime/NTRULPRimeCipherSpi$Base.classPK     A !    H             ,)r org/bouncycastle/pqc/jcajce/provider/ntruprime/NTRULPRimeCipherSpi.classPK     A #4O    L             4r org/bouncycastle/pqc/jcajce/provider/ntruprime/NTRULPRimeKeyFactorySpi.classPK     A =Y  
  N             9r org/bouncycastle/pqc/jcajce/provider/ntruprime/NTRULPRimeKeyGeneratorSpi.classPK     A }Oߺ  
  R             ?r org/bouncycastle/pqc/jcajce/provider/ntruprime/NTRULPRimeKeyPairGeneratorSpi.classPK     A ZMQ    M             QEr org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeCipherSpi$Base.classPK     A R  U  H             Fr org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeCipherSpi.classPK     A .  #  L             ^Rr org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeKeyFactorySpi.classPK     A S  
  N             Wr org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeKeyGeneratorSpi.classPK     A     R             \r org/bouncycastle/pqc/jcajce/provider/ntruprime/SNTRUPrimeKeyPairGeneratorSpi.classPK
 
      A             ,             br org/bouncycastle/pqc/jcajce/provider/picnic/PK     A V6C  p  D             Ecr org/bouncycastle/pqc/jcajce/provider/picnic/BCPicnicPrivateKey.classPK     A 1d  
  C             ]hr org/bouncycastle/pqc/jcajce/provider/picnic/BCPicnicPublicKey.classPK     A 8  y  E             2mr org/bouncycastle/pqc/jcajce/provider/picnic/PicnicKeyFactorySpi.classPK     A FT    K             Hrr org/bouncycastle/pqc/jcajce/provider/picnic/PicnicKeyPairGeneratorSpi.classPK     A 0     C             xr org/bouncycastle/pqc/jcajce/provider/picnic/SignatureSpi$Base.classPK     A i    J             Kzr org/bouncycastle/pqc/jcajce/provider/picnic/SignatureSpi$withSha3512.classPK     A 	    I             {r org/bouncycastle/pqc/jcajce/provider/picnic/SignatureSpi$withSha512.classPK     A E    K             Y}r org/bouncycastle/pqc/jcajce/provider/picnic/SignatureSpi$withShake256.classPK     A G    >             ~r org/bouncycastle/pqc/jcajce/provider/picnic/SignatureSpi.classPK
 
      A             +             r org/bouncycastle/pqc/jcajce/provider/saber/PK     A Iɇ'  ]  B             ^r org/bouncycastle/pqc/jcajce/provider/saber/BCSABERPrivateKey.classPK     A 0bc  
  A             tr org/bouncycastle/pqc/jcajce/provider/saber/BCSABERPublicKey.classPK     A 0jw   h  D             Fr org/bouncycastle/pqc/jcajce/provider/saber/SABERCipherSpi$Base.classPK     A 
    ?             r org/bouncycastle/pqc/jcajce/provider/saber/SABERCipherSpi.classPK     A >`  s  C             r org/bouncycastle/pqc/jcajce/provider/saber/SABERKeyFactorySpi.classPK     A 0!"  
  E             r org/bouncycastle/pqc/jcajce/provider/saber/SABERKeyGeneratorSpi.classPK     A Fqq3  J  I             r org/bouncycastle/pqc/jcajce/provider/saber/SABERKeyPairGeneratorSpi.classPK
 
      A             +             r org/bouncycastle/pqc/jcajce/provider/snova/PK     A vT    B             ˫r org/bouncycastle/pqc/jcajce/provider/snova/BCSnovaPrivateKey.classPK     A W'  9  A             r org/bouncycastle/pqc/jcajce/provider/snova/BCSnovaPublicKey.classPK     A uA   u  B             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$Base.classPK     A 4n  :  N             7r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_4_ESK.classPK     A a  F  T             ĸr org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_4_SHAKE_ESK.classPK     A <菵  F  T             \r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_4_SHAKE_SSK.classPK     A q`  :  N             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_4_SSK.classPK     A   :  N             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_5_ESK.classPK     A YK  F  T             
r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_5_SHAKE_ESK.classPK     A (<)  F  T             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_5_SHAKE_SSK.classPK     A Wxt  :  N             7r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_24_5_5_SSK.classPK     A I2  :  N             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_25_8_3_ESK.classPK     A >yV  F  T             Or org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_25_8_3_SHAKE_ESK.classPK     A 4  F  T             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_25_8_3_SHAKE_SSK.classPK     A <  :  N             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_25_8_3_SSK.classPK     A 86  :  N             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_29_6_5_ESK.classPK     A   F  T             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_29_6_5_SHAKE_ESK.classPK     A wl  F  T             0r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_29_6_5_SHAKE_SSK.classPK     A w8  :  N             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_29_6_5_SSK.classPK     A CN  <  O             Tr org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_17_2_ESK.classPK     A K  H  U             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_17_2_SHAKE_ESK.classPK     A v  H  U             }r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_17_2_SHAKE_SSK.classPK     A (^  <  O             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_17_2_SSK.classPK     A ~  :  N             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_8_4_ESK.classPK     A 
%^  F  T             2r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_8_4_SHAKE_ESK.classPK     A XD<  F  T             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_8_4_SHAKE_SSK.classPK     A 9,  :  N             ar org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_37_8_4_SSK.classPK     A 2  <  O             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_49_11_3_ESK.classPK     A b  H  U             |r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_49_11_3_SHAKE_ESK.classPK     A C  H  U             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_49_11_3_SHAKE_SSK.classPK     A X  <  O             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_49_11_3_SSK.classPK     A B,  <  O             =r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_56_25_2_ESK.classPK     A Y  H  U             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_56_25_2_SHAKE_ESK.classPK     A {  H  U             fr org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_56_25_2_SHAKE_SSK.classPK     A )F  <  O              r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_56_25_2_SSK.classPK     A -;  <  O             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_60_10_4_ESK.classPK     A 2  H  U             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_60_10_4_SHAKE_ESK.classPK     A j  H  U             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_60_10_4_SHAKE_SSK.classPK     A Fh+  <  O             Qr org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_60_10_4_SSK.classPK     A j?   <  O             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_66_15_3_ESK.classPK     A x  H  U             nr org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_66_15_3_SHAKE_ESK.classPK     A |  H  U             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_66_15_3_SHAKE_SSK.classPK     A  [  <  O             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_66_15_3_SSK.classPK     A J<  <  O             0r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_75_33_2_ESK.classPK     A +!{  H  U             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_75_33_2_SHAKE_ESK.classPK     A Չ  H  U             Yr org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_75_33_2_SHAKE_SSK.classPK     A v ,  <  O             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi$SNOVA_75_33_2_SSK.classPK     A tk->	  "  =             r org/bouncycastle/pqc/jcajce/provider/snova/SignatureSpi.classPK     A `Ɓ    T             *s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_ESK.classPK     A Ns    Z             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SHAKE_ESK.classPK     A ˩    Z             K	s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SHAKE_SSK.classPK     A     T             
s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_4_SSK.classPK     A 3    T             js org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_ESK.classPK     A     Z             
s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SHAKE_ESK.classPK     A !Y    Z             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SHAKE_SSK.classPK     A C    T              s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_24_5_5_SSK.classPK     A ⁁    T             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_ESK.classPK     A     Z             1s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SHAKE_ESK.classPK     A u    Z             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SHAKE_SSK.classPK     A     T             ds org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_25_8_3_SSK.classPK     A fb    T             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_ESK.classPK     A cT    Z             us org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SHAKE_ESK.classPK     A on~    Z             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SHAKE_SSK.classPK     A T    T             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_29_6_5_SSK.classPK     A 7	    U             0s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_ESK.classPK     A XC    [              s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SHAKE_ESK.classPK     A w    [             X"s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SHAKE_SSK.classPK     A \6{    U             #s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_17_2_SSK.classPK     A U    T             ~%s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_ESK.classPK     A     Z             's org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SHAKE_ESK.classPK     A >    Z             (s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SHAKE_SSK.classPK     A cb    T             9*s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_37_8_4_SSK.classPK     A W    U             +s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_ESK.classPK     A RB    [             L-s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SHAKE_ESK.classPK     A X    [             .s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SHAKE_SSK.classPK     A r    U             0s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_49_11_3_SSK.classPK     A ~	    U             
2s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_ESK.classPK     A {~    [             3s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SHAKE_ESK.classPK     A Pl    [             55s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SHAKE_SSK.classPK     A M7v    U             6s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_56_25_2_SSK.classPK     A #	    U             [8s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_ESK.classPK     A l>>    [             9s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SHAKE_ESK.classPK     A p9    [             ;s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SHAKE_SSK.classPK     A wצ    U             =s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_60_10_4_SSK.classPK     A CGx	    U             >s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_ESK.classPK     A L    [             4@s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SHAKE_ESK.classPK     A qD    [             As org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SHAKE_SSK.classPK     A F1    U             kCs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_66_15_3_SSK.classPK     A .	    U             Ds org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_ESK.classPK     A tR    [             Fs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SHAKE_ESK.classPK     A 9    [             Hs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SHAKE_SSK.classPK     A 	    U             Is org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi$SNOVA_75_33_2_SSK.classPK     A $  b%  C             FKs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyFactorySpi.classPK     A Jr     Z             Ts org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_4_ESK.classPK     A d     `             *Vs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_4_SHAKE_ESK.classPK     A EPP}     `             Ws org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_4_SHAKE_SSK.classPK     A De     Z             DYs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_4_SSK.classPK     A Ճi     Z             Zs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_5_ESK.classPK     A ;     `             C\s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_5_SHAKE_ESK.classPK     A ق;     `             ]s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_5_SHAKE_SSK.classPK     A m     Z             [_s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_24_5_5_SSK.classPK     A VT     Z             `s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_25_8_3_ESK.classPK     A g     `             [bs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_25_8_3_SHAKE_ESK.classPK     A T'     `             cs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_25_8_3_SHAKE_SSK.classPK     A {=     Z             ues org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_25_8_3_SSK.classPK     A @)     Z             fs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_29_6_5_ESK.classPK     A ^k     `             whs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_29_6_5_SHAKE_ESK.classPK     A {     `             js org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_29_6_5_SHAKE_SSK.classPK     A      Z             ks org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_29_6_5_SSK.classPK     A [     [             ms org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_17_2_ESK.classPK     A     a             ns org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_17_2_SHAKE_ESK.classPK     A 6z?    a             &ps org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_17_2_SHAKE_SSK.classPK     A ֊
     [             qs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_17_2_SSK.classPK     A |     Z             9ss org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_8_4_ESK.classPK     A ne     `             ts org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_8_4_SHAKE_ESK.classPK     A -     `             Gvs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_8_4_SHAKE_SSK.classPK     A Ĺ     Z             ws org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_37_8_4_SSK.classPK     A r"     [             Uys org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_49_11_3_ESK.classPK     A !x    a             zs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_49_11_3_SHAKE_ESK.classPK     A      a             h|s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_49_11_3_SHAKE_SSK.classPK     A QK     [             }s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_49_11_3_SSK.classPK     A      [             zs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_56_25_2_ESK.classPK     A 6    a             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_56_25_2_SHAKE_ESK.classPK     A o     a             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_56_25_2_SHAKE_SSK.classPK     A |     [             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_56_25_2_SSK.classPK     A 5     [             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_60_10_4_ESK.classPK     A c    a             !s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_60_10_4_SHAKE_ESK.classPK     A      a             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_60_10_4_SHAKE_SSK.classPK     A Q=     [             @s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_60_10_4_SSK.classPK     A      [             Ës org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_66_15_3_ESK.classPK     A :    a             Fs org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_66_15_3_SHAKE_ESK.classPK     A 	"*     a             ֎s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_66_15_3_SHAKE_SSK.classPK     A 
     [             es org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_66_15_3_SSK.classPK     A "      [             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_75_33_2_ESK.classPK     A D8    a             ks org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_75_33_2_SHAKE_ESK.classPK     A wc    a             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_75_33_2_SHAKE_SSK.classPK     A }(h     [             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi$SNOVA_75_33_2_SSK.classPK     A @?0'  ,  I             s org/bouncycastle/pqc/jcajce/provider/snova/SnovaKeyPairGeneratorSpi.classPK
 
      A             -             s org/bouncycastle/pqc/jcajce/provider/sphincs/PK     A !  (  I             s org/bouncycastle/pqc/jcajce/provider/sphincs/BCSphincs256PrivateKey.classPK     A ]g  
  H             vs org/bouncycastle/pqc/jcajce/provider/sphincs/BCSphincs256PublicKey.classPK     A qs    L             s org/bouncycastle/pqc/jcajce/provider/sphincs/SignatureSpi$withSha3_512.classPK     A d)  ?  J             zs org/bouncycastle/pqc/jcajce/provider/sphincs/SignatureSpi$withSha512.classPK     A 1	~  -
  ?             ss org/bouncycastle/pqc/jcajce/provider/sphincs/SignatureSpi.classPK     A     J             ^s org/bouncycastle/pqc/jcajce/provider/sphincs/Sphincs256KeyFactorySpi.classPK     A P  
  P             }s org/bouncycastle/pqc/jcajce/provider/sphincs/Sphincs256KeyPairGeneratorSpi.classPK
 
      A             1             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/PK     A oɃ  
  N             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/BCSPHINCSPlusPrivateKey.classPK     A <  	  M             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/BCSPHINCSPlusPublicKey.classPK     A 72    O             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyFactorySpi.classPK     A ZP  
  _             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_128f.classPK     A ;  
  _             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_128s.classPK     A +  
  _             =s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_192f.classPK     A -Ŋ  
  _             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_192s.classPK     A /  
  _             \s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_256f.classPK     A c  
  _             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Sha2_256s.classPK     A 7    `             |s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_128f.classPK     A %    `             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_128s.classPK     A O    `             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_192f.classPK     A >&    `             2s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_192s.classPK     A >0    `             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_256f.classPK     A )    `             Vs org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi$Shake_256s.classPK     A =9o    U             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyPairGeneratorSpi.classPK     A Q    J             ^s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SignatureSpi$Direct.classPK     A 0@  x  C             s org/bouncycastle/pqc/jcajce/provider/sphincsplus/SignatureSpi.classPK
 
      A             *             $s org/bouncycastle/pqc/jcajce/provider/util/PK     A 
  
  E             ls org/bouncycastle/pqc/jcajce/provider/util/AsymmetricBlockCipher.classPK     A _XK  i	  F             g t org/bouncycastle/pqc/jcajce/provider/util/AsymmetricHybridCipher.classPK     A H    A             &t org/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi.classPK     A Y    <             ]
t org/bouncycastle/pqc/jcajce/provider/util/CipherSpiExt.classPK     A EOc"    7             t org/bouncycastle/pqc/jcajce/provider/util/KdfUtil.classPK     A ̎#    7             Kt org/bouncycastle/pqc/jcajce/provider/util/KeyUtil.classPK     A Ϊ9  c  :             t org/bouncycastle/pqc/jcajce/provider/util/SpecUtil$1.classPK     A     8             tt org/bouncycastle/pqc/jcajce/provider/util/SpecUtil.classPK     A $3
$  1  8             t org/bouncycastle/pqc/jcajce/provider/util/WrapUtil.classPK
 
      A             *             o%t org/bouncycastle/pqc/jcajce/provider/xmss/PK     A -*$  9  B             %t org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSMTPrivateKey.classPK     A ns4    A             ,t org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSMTPublicKey.classPK     A smf~    @             P2t org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSPrivateKey.classPK     A }v4  V  ?             <9t org/bouncycastle/pqc/jcajce/provider/xmss/BCXMSSPublicKey.classPK     A (;  Y  G             >t org/bouncycastle/pqc/jcajce/provider/xmss/DigestUtil$DoubleDigest.classPK     A |Q  '  :             At org/bouncycastle/pqc/jcajce/provider/xmss/DigestUtil.classPK     A <  m  A             Et org/bouncycastle/pqc/jcajce/provider/xmss/XMSSKeyFactorySpi.classPK     A j=CD0  !
  G             Jt org/bouncycastle/pqc/jcajce/provider/xmss/XMSSKeyPairGeneratorSpi.classPK     A W
  s  C             9Pt org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTKeyFactorySpi.classPK     A yG6@  j
  I             NUt org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTKeyPairGeneratorSpi.classPK     A     J             [t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$generic.classPK     A %    M             \t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withSha256.classPK     A MW\1  .  W             6^t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withSha256andPrehash.classPK     A ]L%    M             _t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withSha512.classPK     A X^,1  .  W             at org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withSha512andPrehash.classPK     A y)    O             Bct org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake128.classPK     A 1VX  -  ]             dt org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake128_512andPrehash.classPK     A d.D  D  Y             ft org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake128andPrehash.classPK     A a)    O             ht org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake256.classPK     A   0  ^             ijt org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake256_1024andPrehash.classPK     A ݔB  D  Y             ylt org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi$withShake256andPrehash.classPK     A 3Q  m  B             Bnt org/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTSignatureSpi.classPK     A #h    H             ut org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$generic.classPK     A "    K             Vwt org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withSha256.classPK     A DV7-  $  U             xt org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withSha256andPrehash.classPK     A +"    K             zt org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withSha512.classPK     A 6%-  $  U             <|t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withSha512andPrehash.classPK     A n9(  
  M             }t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake128.classPK     A -  #  [             t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake128_512andPrehash.classPK     A &;n?  :  W             t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake128andPrehash.classPK     A $z(  
  M             ]t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake256.classPK     A }Q8  &  \              t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake256_1024andPrehash.classPK     A Hjqq=  :  W             
t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi$withShake256andPrehash.classPK     A W
  ?  @             ̈t org/bouncycastle/pqc/jcajce/provider/xmss/XMSSSignatureSpi.classPK
 
      A             !             Gt org/bouncycastle/pqc/jcajce/spec/PK     A 8vW    8             t org/bouncycastle/pqc/jcajce/spec/BIKEParameterSpec.classPK     A >+x[    8             Ct org/bouncycastle/pqc/jcajce/spec/CMCEParameterSpec.classPK     A تDj  g  =             t org/bouncycastle/pqc/jcajce/spec/DilithiumParameterSpec.classPK     A 53R    :             ٙt org/bouncycastle/pqc/jcajce/spec/FalconParameterSpec.classPK     A =t    9             t org/bouncycastle/pqc/jcajce/spec/FrodoParameterSpec.classPK     A L'V    7             t org/bouncycastle/pqc/jcajce/spec/HQCParameterSpec.classPK     A >~  K  9             t org/bouncycastle/pqc/jcajce/spec/KyberParameterSpec.classPK     A *0    @             t org/bouncycastle/pqc/jcajce/spec/LMSHSSKeyGenParameterSpec.classPK     A -    :             t org/bouncycastle/pqc/jcajce/spec/LMSHSSParameterSpec.classPK     A 	  *  =             6t org/bouncycastle/pqc/jcajce/spec/LMSKeyGenParameterSpec.classPK     A C    7             t org/bouncycastle/pqc/jcajce/spec/LMSParameterSpec.classPK     A +~  [  8             Rt org/bouncycastle/pqc/jcajce/spec/MayoParameterSpec.classPK     A my    >             6t org/bouncycastle/pqc/jcajce/spec/NTRULPRimeParameterSpec.classPK     A q    8             [t org/bouncycastle/pqc/jcajce/spec/NTRUParameterSpec.classPK     A we?    :             t org/bouncycastle/pqc/jcajce/spec/PicnicParameterSpec.classPK     A rM  	  9             *t org/bouncycastle/pqc/jcajce/spec/SABERParameterSpec.classPK     A ʂ    >             Ft org/bouncycastle/pqc/jcajce/spec/SNTRUPrimeParameterSpec.classPK     A < v\    D             it org/bouncycastle/pqc/jcajce/spec/SPHINCS256KeyGenParameterSpec.classPK     A z  [  ?             7t org/bouncycastle/pqc/jcajce/spec/SPHINCSPlusParameterSpec.classPK     A a
  <  9             t org/bouncycastle/pqc/jcajce/spec/SnovaParameterSpec.classPK     A jۧ  
  :             t org/bouncycastle/pqc/jcajce/spec/XMSSMTParameterSpec.classPK     A /T    8             t org/bouncycastle/pqc/jcajce/spec/XMSSParameterSpec.classPK
 
      A                          t org/bouncycastle/pqc/math/PK
 
      A                          t org/bouncycastle/pqc/math/ntru/PK     A |H/    6             t org/bouncycastle/pqc/math/ntru/HPS4096Polynomial.classPK     A    	  2             qt org/bouncycastle/pqc/math/ntru/HPSPolynomial.classPK     A lR    7             t org/bouncycastle/pqc/math/ntru/HRSS1373Polynomial.classPK     A Ϝ؃    3             t org/bouncycastle/pqc/math/ntru/HRSSPolynomial.classPK     A     /             t org/bouncycastle/pqc/math/ntru/Polynomial.classPK
 
      A             *             
t org/bouncycastle/pqc/math/ntru/parameters/PK     A \g      >             Rt org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS2048509.classPK     A b.-      >             ct org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS2048677.classPK     A @     ?             tt org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS40961229.classPK     A      >             t org/bouncycastle/pqc/math/ntru/parameters/NTRUHPS4096821.classPK     A S3ֱT    C             Ht org/bouncycastle/pqc/math/ntru/parameters/NTRUHPSParameterSet.classPK     A \i      <             
t org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSS1373.classPK     A n]M      ;             t org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSS701.classPK     A m    D             %t org/bouncycastle/pqc/math/ntru/parameters/NTRUHRSSParameterSet.classPK     A 0g  7  @             t org/bouncycastle/pqc/math/ntru/parameters/NTRUParameterSet.classPK
 
      A                          t org/bouncycastle/util/PK     A Wz  t  +             
t org/bouncycastle/util/Arrays$Iterator.classPK     A d7#  ^(  "             u org/bouncycastle/util/Arrays.classPK     A p,[  =  -             cu org/bouncycastle/util/BigIntegers$Cache.classPK     A Zʫ
    '             u org/bouncycastle/util/BigIntegers.classPK     A yZOo    !             u org/bouncycastle/util/Bytes.classPK     A "{      &             \!u org/bouncycastle/util/Characters.classPK     A ) H    +             e"u org/bouncycastle/util/CollectionStore.classPK     A ε      #             %u org/bouncycastle/util/Doubles.classPK     A gq      %             &u org/bouncycastle/util/Encodable.classPK     A UѪ6    &             &u org/bouncycastle/util/Exceptions.classPK     A \phG  k  '             t(u org/bouncycastle/util/Fingerprint.classPK     A L(>  f                -u org/bouncycastle/util/GF16.classPK     A +;    %             0u org/bouncycastle/util/IPAddress.classPK     A |"x  P  $             y5u org/bouncycastle/util/Integers.classPK     A D     $             ~7u org/bouncycastle/util/Iterable.classPK     A <    !             x8u org/bouncycastle/util/Longs.classPK     A M      $             :u org/bouncycastle/util/Memoable.classPK     A r*      2             ;u org/bouncycastle/util/MemoableResetException.classPK     A ԖM`    #             <u org/bouncycastle/util/Objects.classPK     A Mt  -                
>u org/bouncycastle/util/Pack.classPK     A c  ;  (             JDu org/bouncycastle/util/Properties$1.classPK     A s4c  5  (             Fu org/bouncycastle/util/Properties$2.classPK     A qT  1
  &             Gu org/bouncycastle/util/Properties.classPK     A 
g=   !  $             dNu org/bouncycastle/util/Selector.classPK     A ,ZR   ;  "             kOu org/bouncycastle/util/Shorts.classPK     A E   l  !             Pu org/bouncycastle/util/Store.classPK     A    Y  *             Qu org/bouncycastle/util/StoreException.classPK     A       (             Ru org/bouncycastle/util/StreamParser.classPK     A Vٳ   Z  2             Su org/bouncycastle/util/StreamParsingException.classPK     A 4     &             EUu org/bouncycastle/util/StringList.classPK     A 4\  [  %             uVu org/bouncycastle/util/Strings$1.classPK     A S    2             $Xu org/bouncycastle/util/Strings$StringListImpl.classPK     A ӽ,f  ;  #             [u org/bouncycastle/util/Strings.classPK     A >>­      !             cu org/bouncycastle/util/Times.classPK
 
      A                          du org/bouncycastle/util/encoders/PK     A O  y  +             eu org/bouncycastle/util/encoders/Base32.classPK     A 9~    2             Oiu org/bouncycastle/util/encoders/Base32Encoder.classPK     A ;    +             Jru org/bouncycastle/util/encoders/Base64.classPK     A YϾ    2             vu org/bouncycastle/util/encoders/Base64Encoder.classPK     A ,  ~  4             ~u org/bouncycastle/util/encoders/BufferedDecoder.classPK     A %  ~  4             ҁu org/bouncycastle/util/encoders/BufferedEncoder.classPK     A :w   l  5             u org/bouncycastle/util/encoders/DecoderException.classPK     A    V  ,             <u org/bouncycastle/util/encoders/Encoder.classPK     A Q   l  5             ou org/bouncycastle/util/encoders/EncoderException.classPK     A T    (             Ĉu org/bouncycastle/util/encoders/Hex.classPK     A ?'  
  /             u org/bouncycastle/util/encoders/HexEncoder.classPK     A cS!  \  2             yu org/bouncycastle/util/encoders/HexTranslator.classPK     A U      /             u org/bouncycastle/util/encoders/Translator.classPK     A h<    )             u org/bouncycastle/util/encoders/UTF8.classPK     A ch_    .             eu org/bouncycastle/util/encoders/UrlBase64.classPK     A Ť   ?  5             u org/bouncycastle/util/encoders/UrlBase64Encoder.classPK
 
      A                          ݟu org/bouncycastle/util/io/PK     A r9i  3  4             u org/bouncycastle/util/io/BufferingOutputStream.classPK     A G    ,             ߢu org/bouncycastle/util/io/LimitedBuffer.classPK     A ޕ   f  1             u org/bouncycastle/util/io/SimpleOutputStream.classPK     A  o      6             9u org/bouncycastle/util/io/StreamOverflowException.classPK     A &ݮ  6  &             ;u org/bouncycastle/util/io/Streams.classPK     A 
I    -             =u org/bouncycastle/util/io/TeeInputStream.classPK     A ik    .             u org/bouncycastle/util/io/TeeOutputStream.classPK
 
      A                          Pu org/bouncycastle/util/io/pem/PK     A {     9             u org/bouncycastle/util/io/pem/PemGenerationException.classPK     A _  U  ,             u org/bouncycastle/util/io/pem/PemHeader.classPK     A N[    ,             3u org/bouncycastle/util/io/pem/PemObject.classPK     A k      5             u org/bouncycastle/util/io/pem/PemObjectGenerator.classPK     A =^      2             u org/bouncycastle/util/io/pem/PemObjectParser.classPK     A |  
  ,             u org/bouncycastle/util/io/pem/PemReader.classPK     A F-A    ,             eu org/bouncycastle/util/io/pem/PemWriter.classPK
 
      A                          {u org/bouncycastle/util/test/PK     A ]P  a  =             u org/bouncycastle/util/test/FixedSecureRandom$BigInteger.classPK     A -u   3  7             ou org/bouncycastle/util/test/FixedSecureRandom$Data.classPK     A ܅    @             u org/bouncycastle/util/test/FixedSecureRandom$DummyProvider.classPK     A 7i  %  @             u org/bouncycastle/util/test/FixedSecureRandom$RandomChecker.classPK     A ȾlQ   +  9             Gu org/bouncycastle/util/test/FixedSecureRandom$Source.classPK     A q`  C  2             u org/bouncycastle/util/test/FixedSecureRandom.classPK     A -\k  |  .             Mu org/bouncycastle/util/test/NumberParsing.classPK     A >     B             u org/bouncycastle/util/test/SimpleTest$TestExceptionOperation.classPK     A >  Y  +             8u org/bouncycastle/util/test/SimpleTest.classPK     A tz
    1             u org/bouncycastle/util/test/SimpleTestResult.classPK     A 4qɍ      %             u org/bouncycastle/util/test/Test.classPK     A  &u   z  4             fu org/bouncycastle/util/test/TestFailedException.classPK     A i  #  5             u org/bouncycastle/util/test/TestRandomBigInteger.classPK     A o
7  S  /             u org/bouncycastle/util/test/TestRandomData.classPK     A $9*  e  B             3u org/bouncycastle/util/test/TestRandomEntropySourceProvider$1.classPK     A     @             u org/bouncycastle/util/test/TestRandomEntropySourceProvider.classPK     A cOy      +             u org/bouncycastle/util/test/TestResult.classPK     A u(Q    8             u org/bouncycastle/util/test/UncloseableOutputStream.classPK
 
      A                          u org/bouncycastle/x509/PK     A X
    6             u org/bouncycastle/x509/AttributeCertificateHolder.classPK     A J    6             u org/bouncycastle/x509/AttributeCertificateIssuer.classPK     A L
^    5             u org/bouncycastle/x509/CertPathReviewerException.classPK     A 7Kq  t  9             v org/bouncycastle/x509/CertPathReviewerMessages.propertiesPK     A WL    <             v org/bouncycastle/x509/CertPathReviewerMessages_de.propertiesPK     A  DPX  ;  6             G5v org/bouncycastle/x509/CertPathValidatorUtilities.classPK     A $+J^  J  &             Nv org/bouncycastle/x509/CertStatus.classPK     A R^U     ;             Ov org/bouncycastle/x509/ExtCertificateEncodingException.classPK     A :    9             Qv org/bouncycastle/x509/ExtendedPKIXBuilderParameters.classPK     A :	  ,  2             Uv org/bouncycastle/x509/ExtendedPKIXParameters.classPK     A ̯bv      1             _v org/bouncycastle/x509/NoSuchParserException.classPK     A N      0             `v org/bouncycastle/x509/NoSuchStoreException.classPK     A <4:    /             av org/bouncycastle/x509/PKIXAttrCertChecker.classPK     A BU  |  '             3cv org/bouncycastle/x509/PKIXCRLUtil.classPK     A P4  ΃  0             fv org/bouncycastle/x509/PKIXCertPathReviewer.classPK     A 7  m  )             v org/bouncycastle/x509/X509Attribute.classPK     A 3]  ,  :             v org/bouncycastle/x509/X509AttributeCertStoreSelector.classPK     A =(&0    4             اv org/bouncycastle/x509/X509AttributeCertificate.classPK     A ɿ*!  =  0             jv org/bouncycastle/x509/X509CRLStoreSelector.classPK     A Ҏ%    5             v org/bouncycastle/x509/X509CertPairStoreSelector.classPK     A  Ŷ}  9  1             v org/bouncycastle/x509/X509CertStoreSelector.classPK     A [yO  	  /             bv org/bouncycastle/x509/X509CertificatePair.classPK     A 7  	  9             v org/bouncycastle/x509/X509CollectionStoreParameters.classPK     A ?    %             v org/bouncycastle/x509/X509Store.classPK     A 8AX   ]   /             $v org/bouncycastle/x509/X509StoreParameters.classPK     A #3   1  (             v org/bouncycastle/x509/X509StoreSpi.classPK     A   +	  ,             v org/bouncycastle/x509/X509StreamParser.classPK     A      /             v org/bouncycastle/x509/X509StreamParserSpi.classPK     A 
u8  "  3             Hv org/bouncycastle/x509/X509Util$Implementation.classPK     A h  8%  $             v org/bouncycastle/x509/X509Util.classPK     A #X	  I  6             v org/bouncycastle/x509/X509V1CertificateGenerator.classPK     A :    6             v org/bouncycastle/x509/X509V2AttributeCertificate.classPK     A npH     >             av org/bouncycastle/x509/X509V2CRLGenerator$ExtCRLException.classPK     A O0i    .             v org/bouncycastle/x509/X509V2CRLGenerator.classPK     A 	O
  "  6              w org/bouncycastle/x509/X509V3CertificateGenerator.classPK
 
      A                           +w org/bouncycastle/x509/extension/PK     A J}  $
  E             iw org/bouncycastle/x509/extension/AuthorityKeyIdentifierStructure.classPK     A g    7             w org/bouncycastle/x509/extension/X509ExtensionUtil.classPK
 
      A                          w org/bouncycastle/x509/util/PK     A sA  @  0             w org/bouncycastle/x509/util/LDAPStoreHelper.classPK     A >Ѯ     -             1w org/bouncycastle/x509/util/StreamParser.classPK     A X   _  7             2w org/bouncycastle/x509/util/StreamParsingException.classPK      a
 3w  PACK200PK   dO\           	   META-INF/ PK   dO\4㿎r         META-INF/MANIFEST.MFMLK-.
K-*ϳR03-IM+I,
"KZbHdZ)We$*edc1#/%-4/,44J!J_?=$4I/9?W?Sb>/ PK   dO\              org/ PK   dO\              org/mozilla/ PK   dO\              org/mozilla/javascript/ PK   dO\              org/mozilla/javascript/xmlimpl/ PK   dO\{ʘa  1  2   org/mozilla/javascript/xmlimpl/XMLLoaderImpl.classTn@͉k­KJvąr+ACJLYW.
?/Qc"+myٳg3sfwC4eQEq@f{b9VŐV<z}~laoz(mk8O
T9	3g(Nv߶3H`1<4%Vf
E;p<DeQ	gx3Q=[6ɕnWqG" P?
Cy˸k+MMqH-7=jJKMRf	JDɰv
&zcn1,͐vDhX;2l'CpMnwgy	ZxI:M)cHLMwD3ە(ۂXL
ǴAǲ?Pq=LcEk]^D@6'й!P]my"]ooSSd#4Ia\J2jV=[e(Y-/fp80]l@
*L,atPp1pVG#"%K
܋n*ѯX_J)܏4.Fwg
PK   dO\8  E
  7   org/mozilla/javascript/xmlimpl/XmlNode$Namespaces.classVmWE~&	,	@
R@؊Ć@V0
K7A@ϩأzo˝6$$;sws?w |khA+Cq[ȺSe貆6n5f|;5tx
v./r˛FhWf%</"
\y3u'%pDm/Ra zЫOypY©c6d;qQ:%:ND5'(8Ñ#6=iL/4@bcPX"@n]*C0#wIjʓh8+4m|?e8nKt\
6a~F;3(ᦆ[:x]Մ66w6C_ܤg'	)
6|r͝sU=wtLc=QN!ЌҎfuܕ T2%u|*MmdZfIȄtK^΂E'2|kQ9qKH:ƁPܓҼckT"
l666C0c,lbr~NnF ArH^⛦K2
w۠aiҶDlyef18K:2.>x:tg<#?=SfM5szw_V9~U&JM5Lb2J7檜N4-w]t,a'L82kܢT2d>:w}3CzҁLGԺ?g`֞!3Bͮ/?,'d+؄dGL)B#Oq>D>*cЏtUz_%GH"~E͢ K?O"WqX%3D'G |܆(Bv8r_9:LÁygRp;鱃'?ip߫)駌8Cce|=nQ#F+e05Gg"p!p{?IHˑ#<
=GX~CWDW(_"0֑dXda:
Po&D_F"
P EOteW4Dw7k01Q5䢤أg?۩y`d5PK   dO\D{  gR  (   org/mozilla/javascript/xmlimpl/XML.class\	xչ3$ن,@XdDj4	KXF'3qf¢Z[UAEx[nlTԶWݴ{{uw3&2\'̿?NDg;IG^
91/vE8	ξ4+艇E}vv~i'َ;³p'.
[GB.
|Tl(b915HW7dE@VjQ3yxƔb
hUZTEL3	'BI0GZ"cXx(djo	- G=
bDu>l]>0KVGiy1m]$ʝnT
^ړlVyKdx;dH0cvw2Xtr!{50mOcb&Ʒ#%H%$rbMhEsiӴwu5dX[jcq#࠭/-*iΰL:iIXVݶb庮LR~ZYHwDEkuX]8ꭃh,YDbCCUX2&\1y6h)Sy6bj>jhVyMv 
߮`d v
mfOc⡾..uJ2
ɽ|jM>)d5QEki]^>fR	Ew$wjŁ7XtxTkV6YYd[N/*-G,L-yzɊp$)]iveǢ^G;=;a;Ñ^+M:vdÛvXLɘ#]|wEc*KpPBHHD1r&Kwh^K2%,J N$ݴn{CP2ʯJz/(O(?17N,ZhQ$tEеK\T+tn!h"  &hOOb"AzE[AJtmL3sQnۡX0>fwݲ&C&]-'c($4aw
DˆaAIRRt}!V;>A{*}Na:`TD3򒐖˿YiBTxCL\ 	Fd~,ok0ZF낎'Y]Y0m}Abb:J_/
nN| IdM{3_XXɨX<%:~J,r E_׉_Lya+)-g-zj(۫ÿƕWV~EI/ x;]S
"7-`@kqݖ.ܤB߱軒}mmm]kEr߷Ez	b˳1$E? 1[9-KkL?Al0L4gf 3~N +(E ]7dgU~+5$lZcvE8ʎ;E5`M$MWW6iǂ&!F+-O_D޼a?M"{KH?;٠ѿm;C4*)+rd5+=N :.7<bD[c}}v~bG]x kGmK,.5t
yTN8j-mq~|lLXU[\cdb<Z]HAFG,(zEِԕ놄x1O)OiAol Qur?πrNC zt h]i 7Y<:BGZAK*mL<ӄ ڶAk<k՚m]Սum.nvX|	]CbLtZFS3Xd?cVRaQr%ϺTk|ˣ"VXp?=6+,~,&VHOD;'[|wؗxK}{ޠt.WJQ>*XnZ	=:t?ʀy7YYAI'=2K{\(b8hvcαvBpAٵC|wXS9m uZ
_&pI,tfVYL7QN.*|qFAT	ڣh2[oDwngG7ЋO_W`lL+F2{wmO`_ta~>55`?{I%SA,o-ˤNϻxu-?dlh5֋bs;\
P?k1޽5/ƜQ;!X?ƴ~}(|wqǪR%d>Kfz7%?+-~?)AZI'F0]Ïfe yXa>dˬW!d$Y<PlԷ#t}Є 	Q(E]Kuct]?iSi-_	=!_?dY0]Y떰,~ޠ2
?Ly|
q2/3-9x:@߶;]p_2r+#`F~b+/Р_DK`XNǡQΏ,sn4#D?hk.@"
3\] ka/Wv.-
v{zȿ~-TQi;/ Lkr}wṵE@,1:_GPBowݮXu0a/]!f1Ji~~t~R$_g6GyP1<gGJzffkPh#C`]r<6um8yr#oV.x}Am}poz;pipXm$a<g%gg@nK:
	X_zrFrH
 uku}q!wENX=6IBvDA9=;zMX?|0WOQ >BmCfysC;sG0@Aew]QFXOfFUl̿gR]y>@\GOUP7ylu ;.󂡽K:Ie!3Nz)5TԝLT]m{x>iIR=x3
ĥn;)s^"J_yӟ>ߘ/*b ɼ<yrJZ%"I{L8'vb	H:&/%w	__#^R0eb=F @/nuAXJ_#rT\D[t/K8]3sƮ9aSS|mlMZ5{lѸۮ߲%xHSh[6
qPK1
g`0;ӪCK
:ߪhzE3[9Aw+\ݶhtKl7vJUCR%+W,Y
[%a~;%Z8Ⱥh<
_ꭓna
F 8uptW첐l7v+v,ѝFB	}n3d9$kPᤖ~{4kRa\Ej|#yS1M|a/:"U
O<-r\w}j'yј665!nM3JVjUJU*G#W*ѪR-xEz>(cT"8k`patrj6^PXIao yhgB]Ah_jx4fj&NP#D"tdj\{IBTc_gQKMjIQQls.$0Ol2j~[ TQ2ƃj[&]>@$5R	mdW td,
pV$y# 0(tdW yR!Xթz"&OUn y=46]# _@ʿLjAЅEB-RXOB~5S;{1-⟍QZ֝-Mp͐Xj\"w8b/(73]vZQd7RM*0ю:0b.
,f{NE2z%] bo-[ͦ\c~ۋgC%J:M1?
D!d@E)t	wzΙ|A<i]}&kJv=Mth<Ufj
8uZ`l<EoS3
DdC>Cw:!FaɭG=͡Eg:tT>.Z&7;s9Bk)\4yBZ4f<Z'{^0t˽4wX)){!ja"} {h/<HEM no+>0yNp}%DG1P8^A,@iDxCl]<>㷶L?Db<Ey̑:)DH:ϐhZRTղ.<^L:f[@g3dG麇Ď,E7/GER|dp7xǑ&z
TUwh6-jЪޣO3DcW_Lʢ7oV;w\PΦ棴o3tٕIo8j`CYMY:qח)M}BX>|b64OdC!Q@&P)k`W|&1GP}v"{ [**K.%WB; lܓ@$l:JOWTAi
lp߹pCBu
lY)WҡTnx5KX|&_ass@wk>ZeV ͢)оY ALkjlJHQYsyGS`lD4B}:Y97B
&ŔՅlI纷i<+O~CE__3|ir3&}'7?r#痣qpzMq3hfllF4[jZDш觮F"wAƒjUlG/q-qu_vꄔ1Ȯ)[Z6ei24x*xM4g<|LB!-2cE4W6;&XR`kOWMa<+3\}Hk1n;PM퇯<HVs#BK:,?FiP\bu	Du;M
p02L4v\lYK\lu3 3algX^aCDCCU4
Ndj#oٵVy	R^o1Yj

r)Ӻu!Ygo/k
eMO[\MlT]."ikwG	>^s0TF[<mufzjz;$CXzǋy>@(];W4!tIǚ#j!(&^G7@7xzoFs9H:9DkxmKbB oo4-j)lA+"	U%nnCL'&oBQ;=Ups̥%Aq:H-kLq~*G:
!\XM{ȾؖۚLj\(z"*,r.}feQô|f&QO~=f[5C"z\b,rB\
Ffi-2ҭj	V9f-^C83hzV5vK`4rtCKZ.veC:&nҚ3
y>OJJOee
һdVYcgh`x?M{|tB~T=EsPmg X'?7.Z$.&!Iu-FgpNqRm):jCyg)VDap.YػÞv
 wzj^(lO q']j#NTj* %i7hbE[@1{s$K\vYb(Kv߭+_0$i]SP0oP5ʷ5iq߃yXmX܂~.^P_k:<o=[6U
}]Kz
܅"|4zǂU^A-mrǨ^F.)Uϐ[~7Co%{tܡmM5a!MP;$d}.f+N!F3֎Q\y-ЫTÿsYXWka+iLokF2Cqڵӟϰ$c(
vBE!LUnCo,j<8N~2qˮ&_R^o@!~ˡF#jjP륏%(h7aTe6Q;iFhPBr熃`p%Y%~E}@G1yfvE"PQY6F]
zkSiv(m)V\
ԮSN̦{qNzAo V*[
zkEXހC,Y9Fw1f8hJ较!c,PMSQOij&W\66@F4aEM!C1ۄy
y#x6#oMq^!Cbۑ7"H3F9SsQ/Ӝq&xXVm-CXΥuj˥;WgLG	'*fYij;DɬV-g{~*Tr)u
f,Ύ4GYI]IE2*n]dTQ3FS|mv~B:s
_>~cvߏ ]A{N#j1nRաݫ79vs3tو۳b,roE}NRd{JJV~;IR
FbLKsw4|d)e'"J<\B3!s˛b
;^o;'5D?a_M:Z~Oբە#Yjlw71t b>}_zBb㚕KBA)j?f(c{AZ]$z-MQ#|R{>On!:ridS1Ub#[pnM糥!q3-.M&AUEdo4?>t;6w_wϘQ(IYT>84v'ɻhj?Amlrji	W8l2fN#.@^~Đsf/e?k/jsI-VRA{<]JK)TԂi1oޟS#&93A\Ga{-W!Gb1f
y${R=Fԗ(g1$%N
z	JLjL6֠ƿRaKTX}}2^{CGڻ[f\-z/\|9/Hug*$0IOlh1)_6!n3)@ǳspdu2UN\?j_Mܯ8[QWUW ݕw
"G
xx燱VQu;?PK   dO\X[  o  5   org/mozilla/javascript/xmlimpl/XmlNode$Filter$5.classQNA=+ࣲ FLtcZ`lFc,3Cv||GBbsclAօSr*zR}0
0?FRDFz.	CDB2dkmy*!Ӡ1o
OnTa A"L=i:/R{d6C>m~8|3WݑvlxQµ&!'9(Nb~R"]qW]|B*e!4<67cn(0RSdjFv9ʋV`	8/OY?DVXةTFѣNl
PK   dO\T3	    2   org/mozilla/javascript/xmlimpl/XmlNode$QName.classX{pTW&!KHh
aw	R %5	jśfnw&u[
T)hIB@Gmfk|Wq3;l6-Й<ټr}
;q~QG>yU#Rq#ʨz֩ZjZ?CƮaCQ-iMaa65LvP=Uv5Q2G6ƍuw"ی]^f*IG⺮Fġt4OZC	=Hꑽ	v+P)_UL
ؠֶRj$O6Dea̴܏%bea\uQ`)M[ 0B5wwDn.gjaٔ]b)$4ASaA2&2iK[52
	@RЀN׌' ܯQHBB6FTĭ>ҖjX
q4߁J/>*&mPpT m{/B4Sn kޡnCN43g/hF6ba|/x(؊fl]ga[MAg({Nai)CfFxhU&pSӔ͇^f;ˋIIE#=f""3(id;$r(+l	Y;wp< ~-o"栂@e(%PSTaREE.o5QK>>J6F"CCC
CıW4ґ \	s:KЍ~PRҚ"s3p׬U<'X;b5!j"+f8*U`Pl N)0Ru܌th8-Qur~^ZNTZJg	tmKh=fkbpoa.oZ{&ѭvۂw$"O
24
Rmjґ{bWFOAF$Eڹ̻8YɠzQEFY{GDӾ2'_. \֐PdZ}ZJuO.HzՌn܀ds.L烁-%l,T%"ۦېdDY3!53$&|NqD;R	(.^:&ns[JԫafRQ9.8
B]K[̴ų)$kVJ63{>|ߤ3D¬ }x:HgSPdid<ňh:uSQӾըeOs6gjZU6W4݇3n|W;"6dZf]M5v&Y|/0zTaR7
Kx}+izXxщ1zU $J/x_dW/b(淅Q]DMw]=RXOJ8Z[c	ZQ2騔H>DimF88[Cc;'*=Tx?X;8>*?}F254.	NWEjp(	Ʊ8L((b1?#EHm
^VFkQQXy^='*|?{&:-*/>UcsVsU8x: ׄ&P@,+(P0p6Q*8u	|
>%T{nLGqABl$G|/+jYKIԿWOKG_>#|J*1R.&|Xƿ	u4QٴW#~];ziq>z	5T|-˿b- >:Zll|aңwMiw!%b^^Tvʅd"	e6^6J.U;j*Thu7^|q htݒh[mFO29K>rg~W՞kdMsc'Ĕ`:MGT?"򟢞sl&KlF3
E'ߣ1*1Gq$+Ȁ>bSj
&mE
~'=˵U$bMsdwZX3t)wTW?7cq=bױP@f;x؁^%sJD>- 3TϫRN_ρgCz|4~	_v,yD݆PnAXt;\K].TXNcUY;8HpDQ$:hSf\Ϭ`viykxF8#u}V~K~ØwQ%%Kh2^UTPK   dO\u  
  9   org/mozilla/javascript/xmlimpl/XmlNode$InternalList.classV[OGƳxY(II r+@0IZI/b/dnD4ϑ֧^Z"ZJ^+'oЪ3㍹(V9;,? .`5
ECwzFg_2mg}*ZӺoZMϏBF
141;Z<0-KψF2rٚuJFO
-àXrhf
8H0o=TbH0Ko_EONF[`vja(;(߭8NВek)[Nlh8STe P[Qާ)
-Lܿ T1!'^X34JYv|7!W3[C/q^Kƪi%gk40EZ+eόhxCC\d-bq.G%/2Rb±=_EZ7~|"s暭.ŎK5>J&bhʓ.Ý0j;E"-՘ada36(,GIEO-BIpI9_/~Ru?؜䤬]좵	T3FuRWzjq9T^C!SȜ[*/wηsݢ1e

@AP?kx#h96	K<Ó]
MK7qMe>?zi>!W>2IpPo>A[DK)x
OiL#'a,$<R AsKXcގ8m GX3xGbK[eXA	c;h)_W1E%{bU(H.Ɛ:axx	q\=R4Bu#xcCl>-P<(?VyM!
BՌIK{dG!'Qpp8$GhMJ@@!$F4'\A@9@`^B"Y|'R	Iy':SIAϠQ8\MRq,X +";z~a\
Mܒp b.j\N?ÙM(iDo)|s`!Jdu|a`GR;PB-&7 C0P1L(8.>$F5\X3k#oHHV\lqF1Zbz([_>=:dХ
rL$w=6IPK   dO\QE    3   org/mozilla/javascript/xmlimpl/XmlNode$Filter.classTmoP=wjuD961|	_S(
5K_H)jU>,2>meФ=O9 ⹌%D`X9?ꪭjgxfCrP*IH2:˶u'
gǶ;杘CLP!AJ-MwخB
+&!:V`vIB$-lyOF&|S-W7n/L/#QUF"lU큂bdAPQ-534>%>}Ǎb3v^|zT7;`Xp7Hۥ<u0GT(SPO<G張;a'By0I4X|0q 	Cq>t]ӯxlҢ%	KtbEdyISBb1D^:`xHJx97
P/eh 6c-<+¾ҀR_#E6vByC?.ڡw<28)gPtc9L>CSS
9Ѕ,*X&j/4R~U@m	Z*IoG1c.|PK   dO\uh    6   org/mozilla/javascript/xmlimpl/XmlNode$Namespace.classUmSU=HHJB-m,P!AjhR
V$زٍm:8~Eg?8>4v`r_s=? g8r˸md-^NZX5w\n#/J1DK绦rEyX1ʖJF^s#&
Qh<mڦ>þ\oFa!ppP4lOYF~=eNF]eY	]g7Y,Yم5Do(Z=
ʹޫAG;I
T2/*q4tȸkщ(hxڶ 4KثH5W|K}Ћ>Ec]9v< _-|~M3sdG i
]'e%+P~j`QU:07(>
;dmU>DHq8TL';#\Ӱ̻ƲE<G%?7y]`hJȼaEɯoߥ!2F{r-e@zAh7{f|*)nMoEZ5zLI2C^IS.@5H%Í&\w/	3	Y6,ۼZ7|5)t
Svbܔfi!Da;<DSGǧ7(M	)x1\B®>AKFK>	7GqSvi:nڷut6a`a,g\;wpNI	_ӿ/B5cIexjh\:
2oG;PwLodFp]z9NѓDbC-ɗ"ߣշh?`8'Z]64j'H\D`!3Og>}!<QDZ8t>|E>T3
gH)F[B|"!3ӏG4gn*@#)>N>C|AB/bftFh di_$47qrR4M~SjA Ɣgq.<<OFҐ|LVGiUy{>B8qL#	+P8#7c2Ļ:>,!QC\#}R:jR<4?م$dH	Xbh^_ Dyw+v_دpQ<
tިz{|ݟb,ľ&JvMvOԟm*TS_֤AAWMɶKROV_)r퇿s8+Q2ޭw_qj*U;Y5Α+RĂ\Ĳ%ry")`kPK   dO\5Hj  I  ,   org/mozilla/javascript/xmlimpl/XmlNode.classZ	|\uxJz3ӦwKJ[2޸i2mNf̄*"ŮR"6)(⺋ʺ^K:{/;3o<-46d0MM$5&_Nu%}惽ho_yGol};R@L^|TsݫVlY{GGhUw_z'SEH7}͝d4oqSIT&ܝmLE"魩HrU87MӘaϻ#]METƔ*OBnkX$8`ϔ{ϭ9<˷$EƸJtU1M.h"±}]t4/TkQC%x44}[!/iIShNlXՊ.'Z4&:h#)oNMcjͱHw-3Mitc*ҘQKc/4SH2 |.clδfHaMi\P.@94פy͗~c2IIxO<r C".3Gɛև{XT_k&; J+-5iEiӬoI&֦+hI-ZCA_X$/ݣ|]n:E%1٬(dQg*JFXDti[ǠnkeˍmLXt!$9#@U6 ֖MMVӤ]]A`$&wDc.gؽӢ6w0hu!X7:mPĢ	8ӢPb.3$,(Fh	n9PHXGW2tm]9uZC|m0yX*(~5{,a*GiO$#m^;]y6yZ'/]⼤%Sd~w+wDv$-̆tF2
J$QR
o۪l-Ov>ꋨ6	t^Rz!X+M*+5uu>׷$}ԢǱAok2af**/CєDI>e}hcr?R&_3&I-acrl~hjE2Og5KEЃ@>E?bW"|ɢ/1+ޞU~Bo)18¶''YHQ@D>n	Ad7qUDV~̢"Ya4%q.Ba<)EOۘR6MNoXM`xs[8[W]43$͟a&"zN	X]YMX<;"f9~iiZ<<k\LnF%Բ{ƈ$5SY3wh*ycaG9¦< A󷯜|w~aI(TLyc/Y2tsN=)]ZGO}Ţ%koL_~+g܅(lwS7ޢ?H\ E*'Ϣ?џ{Ird\i5ʧr8k9z+#0aDe܅:1!hZ6f/?%UtqO1C,6=*b>e1 G 0-RV
Ua5x+f\aq%ʳ (*FWr55y5\4{ 銅ŀGRc@Wr|[|$dܽу<
lBySx*vr9H-Yک,~ZEJ;hic0W\g_Lk.X`xX7vKͼE|)gW}Z`4h/x	Mr&/Cx3-}3AT+ 7U(@W!en_˙z龖<0wЙ3k֬fe[7K^ۄf;y MV%lx;@`jqF89]_!ӇJ"{Kh`,|aYXg`zh"R\gqp{>|aʚ!kJ-I5VMm"]ѽHwVڸ`9^#r)8(3앳~dj>9')W,>Jd/25eU:Eh_;|u~i&KG`p*/zv&d;BBܒsLFZd,([mۥr}^ϛB(7>jNLMMW+=38-geR*ӕL@>iR[8ޘ5ލGX	}Z

bg$uK;A~>j,ܳ4bTnu 	8h$RKRmd
ι}CG?+:Vwn\Ѷ3{%)U:vVo[=vyU6@KCxd}Hr}0nozm#NU`Ik?goӭSneȿcf@ˎgJufta񎅪EsL
W
#3`!c5D]t;fŝNN2ƪT`scĖ/
>:)F/MHGI_yio1L%b0F=gsǻ#P"yS=1"5
ɡlۅ/j/-JggL+F :"dtCLsRO
eA$Y'*%WܞgTGdҞpJ-tb0t{]Ls/]EΊd=4iq
îiWg]t8	!.edNlǳ58P/ڍ0tVnԯ{UaN@/]X;fWvȐcOo>P4qBٕ
l5B+Quc2I~vM|@] %#)Xy$%kyCW]Ҋ]qJVQ/V`殐Yknth,w5Ƶr&ΕzO9hJlˮ##w3jWπy$xf:*SR/_tv&]X\~j}$H2 rT3yiy<EsMc1^44
#\ǚx8f7e+4.I$S"D~1hFc+-qӍ
.Q)u ؿ50R-\g,/4V+M͢;
tFD^l<]J'(vEa+sjrHMr޺P>빚IchZUx$CI>KweeD4eDo*_FbJTq%?DyV~Z
?\ˏcqRo>*?}ƹiГ	|G~O(r*Md-yALP {iCB	,j}MK1/_hwyk4U4vq9!	jxƝ$ƍP(MNД/BvH83i͂zgp\h樜&IW{JRI|*?asȻ P58,+xg0H Q*luP%/%&
ВZyUx:JU5^,X
f9U֘5i m7h{y!+z>~-Ԇh9tԾNh}BJ%m?t+VFוnoI<}g䧠Dhwi<O;o9
|M?Gcq4dI;R:FVjO(
ZPntٱaD1xVնgAz!
vն(Q< .XCC2*`lR6{y!4+ŵ?Ҭj+zNлOS//Hz"R<&s0G;ge~G8%J W?V7jN9Is@`(Crx
ay>eV^\~OEGt%$L\a0y(DLJq~b/nezn'.Q9Mk֮/Ƶ,^T!x!,/CAlӺT3Rjs7#>0ntT| eLj6O3lS8$d*`r nxC!D6q*>HsGu(u ?
qE%XZP@ }PV|h7_<Ix8=z&۰@w"!|xyNNNFOC0_| 2IF'%-fc: 
gO@qW똦_#b_4V7ǈm\
R
 +N<Hv?t=xO1A}sA}_{~R$1\'觏
1L(DE(s>0΃H[_%
1)SYY*cet0@!8O~l~Givg:2Eƈ6SUDȺ'h<4TI㴉Xk%f (tXi|{q)fCS(	3T3Q\HQ#T/uMctF
nͨT2n7z\<6j:yicͫ}	3|?b2,;v*-SE~7Z@U5
'P]9@oژ<⧸~˯jT555[>88gTN~ǿלlY^5:CRmPUAT9{V= ʢ@؛ܡ7lF:*z#_xtPx׿D80}ŢFrp~*`%Yۨ\(6Q2{]H;"GFr$-I+t]
M.E"l01
P;BpI#AJhh|
pop6Z)b;Ň~rvCŁ'|
Z|yUy5AU
rk[s~FEt\ 7iޘ>uH_
g _P'}
"
tvқf	9k$w<YM3HGSI3)_Tq	}+/_C,=G~(B^Zq!C~?.Or<1$T_T
<C
0Y(џ<)/C飼\.#/Bkx)F)S
/h p%-jǺB)<Wh$40jS%P};U
p`pSp_+:ukswAm*fEWQ@"U$=TW*w\"&r>, 4*VY"c"mG\4+(9 Au܌BlKSߚT(7.u:޷0,,=w_4y`+N*l%EN՜Naw
Q2
׹'b^M3y+1y_n\嘋nK4fgdkY߅V"to9T51ղrv3l"ݷ"!ߎBQmt 7TJ/le*!ЂZ
Eq9![Aߏ.z7$2T\ׂp姜xW+t+'5v*T}vjQUJQoCe}?4iны,lR, `T7\-i%Bo$N;f
-v<)#W&VK=]c.uê2ZI[
F(K5M>X%qmtY9%8@+?IՁJ^|CDKQT[c|7(ki2딘\9,SC40J*[4Ckr7
346mT3z 5ˮ)>
3|gaˋ!0*0ߦՌ+ŲSX?p@LQgWKv+%m8l= {0G@+.&,)ͫ`veL'"9 !RPE1K
RC]8QDOc6
;
I+ɉ(bw(NHCT`[8	l=6=RESW
`4clgʨV
'&=<52\adqӞ}1-@
{[534>$j
pQAB٪lȳu0|J)z*2^ߣ~=W>GQ	t=]Rw.J_C\JՀ.7864_kpeou#O^Z;K%&.Up9KaqPm;\%1'mxfKwK;BLށ+ôh](tx8vhQŉIEYO.:49.-{;&h"
V]"h~O]e'zh=kkT\4	RV;LirG*ljEFuzWkȯov6[r
+6J4nmOK*^T/Wn^+I~a*@78xp(xzi؛ixhVCtڼiTmC_ʯB \RIr(3$2*J5Y>x,4(_A50j-P$߂uk3-T
%֯%+x.|ד|͛"40R	ͨͅPX
N(No\U4Ӊ͎ܛ;1VI$c0i?цWW|? l:p;r2y%s?q*bux64V
Tc_n:v#<ՀIد٨%84l>*'{(cD̌<guLoc:gP!C䡹934]GLMUqR.[`O
)v*UhKw^nKdUX>|BLh;pl8hk(+t04dgp1h!5W0Z m>!{,1bw as	IV/s2p}1fis֘Ky׹EN=ݠ?xU ,R3ZnL4&)BD!cCIސ;Lc2<TO6asxQhè瘠T ?0yDՑQɘ8*4f9")r5CVI^cP/Uj=`NmZq~"v$p^e6.~ y>92PK   dO\;8    C   org/mozilla/javascript/xmlimpl/XmlNode$XmlNodeUserDataHandler.classRnA}%D!%`s` ¡=n9f1K~.~ Q	s@0Sky](@CFᡌsTM(ڃ 5#maTبIKNeH6o(&@(ދÑNùa7tؗFDa"?i:H[J ,G*i:Ōh51fsG5`5;oIQٸ)<D<w|fgqGǊ˸̚KpW&-?z&OQyQj=N6I7e/ˤ&Z",!,a@%fZ
pʞUF![r;@}0!7f	8us8_/۳`Q<%	2UuFU7ns<`BPK   dO\T,(  5b  2   org/mozilla/javascript/xmlimpl/XMLObjectImpl.class|	|TEU$yI 3Ko
AnsH$N&zʮz+^ꪫxx߫rv7//!ߟ=;{3HHɲ)@iLˆ?6:dEtU*^ӐfegVZ"V`J[SWϤ/Ƞ)æL:gQǦST9!ƴr+kc:+:|Kjciӝ1Nmʡ0Svc,qX4K̭oP;ג#צ<<چX:2mFݙeLXԓzA5KJ@TDM}h_)Vg^+k#d
A~?HlHxCe	QoXMT.A"3bEMCh(ʚFL$e i폙cz~%J]uHmnِd#m:Fa>-3*Xg|+k
hXƏ77[6&n7Mu:;uSl"HYhlVŴ`SlJӘUX4->"UajcNkYmsFֱ	L:YrOM35eml0fz;ha40e.6V5&uU)ź"XODrѹuL9Øۣl:UT*ZѺҒ UTMY"kc:&kޜyѵٴ\W
LT9wZTkJBޝ>.[4)Gɣ|2f5t<af+ckTI{g% i5;pD+hcb~M]b9ƦZn<C	6H'a'$Ԇ"wMЩX
	bZlL>gR-ֺ>ݦ1O.=RwU!:˦h iTju<:?Ht!]Ĵn0Gf;fLq~KmLs	Kkbհ:5ܦ+j3>cS]ҜikhJIc	cQRW)ǥ,egznJu6
'6D` 6B4鋵?K9XCwLwbc87U%jZ[=`95{#cQi^-]X>^pһ{҃6=D35u*Tѻikb
ZƚæG1Q^zcU{aܪLOIS͝9xILЏ[LOz>ΛRYJ׷A_Llmzzw/ri{ᶆ^i>gkMLjZzݦ7M(	.m얧)S<4wH86~cM{П&1۾,uR|hG1SNlMC}1w
4uXJF:i?6?OMw	rc+tlly4>)
SB ̍!PU~5V-!ځ
_`ⱆZ6B@p4ֳ2
*YKCpNMq!!5u! i%X6fZC!XJ7/lD;~s1UZɮ@뒇wh}|	)>:$Q*nZ5n{lFbuSLϹh1oJCXcDpA@x4Sih2'SگPJC<s.[Y*+?
F ff4FG
isDNexG\Sg,G5c
19>T8ie,u'XUm4Փ&3ukpPScSyZ|0<J5%jjx(
ghqS< WsMlrvu;2}l,m&Ϙ6e1&\ft^[r@S~7H</bߩDkk;iH>ޙ<sJd*K72N}[-N/ks`'9jÀ-6>uGcB I'ȿ\Ϸ3c8`Vʪ" ǵAYWqɩ-_414yem9asUUUTfjI}?"Gkl^J3zO$
6ݻ)FNT>Mk)gNZS::n6ciYZβl>ÙLZ6<DpT;PGGGlEوg|̪hcb^h@/(\nBKg`~ͅ^l#	x^زXTV-Sy񞅘C|
XzGNupZ&\H%$2J!lBmA<"pn6
5pJJcv=-6<k5Ɇ;{z߆zf^l;QW?4G1W=nC8Os3x3߮+>m)ח9|{7y`3Z1
ޭf'CtzE1_-q`˕9{?M_7MOR>~-EB#;:fڹ{-kh}mmvm1nbn{wF݊hHW	K)'W'sxWQwgҩn(UC;m@)~n!e6NmUt~JH-dasKW ;^^.6	|T$tpjj#̫R~giow hF(HgǪVFգAMǖ>:T5XmMJF=LkK?jMK<>OR,uLDll(@koLHJ!/PnkbFx+2c}£u	ӷ&zѕ/]Q}LC
ED9&STkjRfM?QuKj
/ibK:M
$7ܥIIҤyCjXLGV_$JSm^2IX+]A%qL5ymB:+'Y]G煱d638v	'\a)AFԄʽ ;snN:a)&N2I.dPz:8NMLN
.P%0{3"]N=qg}qCMTw+ئN~94iG2Q\MpjjӦXIs؜Yf[tشcrX95uH%<z8taAKkgSy[/3F*s`jX3mpEՇJ<]K\Y:H;tG5kު[㱥5kRQbJ۾]3\J5uo2
ְ},0uFc+t954Tl).aM5e[pL7wtm_xlx=-,&zvҼ.ӡG);L_ZybqJ^VΓ1jZ}y$U;(WS
8gQ{@#I]4cz11+cZω-5Q=3Xꅣ<yfLu{aHtsۼ&LЪw6yf5Vj.]5LГ7ƊRsXTZc;g)VwPQuE*Ñ LN]r|"0XnDo@up>+uE[=(h|PӜAҩ<׷z_Trj#:/Ohp@vyOQk1mBc^bpfM]CS"y&O}:8㵳<UjuoO984c^cܵ6.~vbq= Flҽ~X}p8QO)rbOdt*o7ꮽq&ýr# >҇|?h>X>x>D>	d>T>
t~0C|x>P>|&0>><>>|>GÏ~_ëW>|>
~ZxÏ>	*	>D' ?هT~}oI~Tʙ	%e-Ӕ<KɜP/eR?9XS^ΑsI3Clhfr\a'PnKW"G,*)k4ԥ	
ZRRג{nZAH;2Kk0RO"O"O"O"G ~с|T(&A'CF3
C]ofu)l].K:ܣ]aT?Sr+P\B`ts
y}Oɥ:_.X-u|٥% [hƛ=;{i4$cw5*0
n;-T^≾..;vq;Fu,9ҡ(ch[2(zԞEoezdr\@bh L:븯\*W:",
]Gfz&.Rs[h:<0ǽǽQ:ix*MD%^\- ]Fޞ,.]9JJ7ҌVt
ʨ		pdf^
ӱ  uB;AZY:סBZ$c@ɍوrO\aGޒDcЩ'󽆮5ߛhMǘb:BspBRƬdcga^֪i\	]]aS#s/3zBb~aq[W_Oo
}_<-7鐾1~jnPw>٭7=Kw+SlЃr*dbMFqWQ]tJ_[ k>ttUjl^eŬYNa(Dms=j?T
D5UkMxU:66O0G%cgF10Xp-,,;.3Jn+_ `0}8$
N{]ivmo.$hQˡ\kkgss1g3+-)-fΖn[;Ck3G`νBwi֪}
DOgjT81B#i$+#xޘCEZc^8S`OaRTZA^Yezr^qlr]8*<@I9ZgWYR`V/F,Ly܅zp.4󩘻7eip'PO[C]miHM}Nv޸prЁіXUg{mu"h'yzw!G ZKjA{kfwnzˬiןry u%*bǃi R	uX<<ysggzb6ʝd3ʜIvc{
$N]xϠ:ђKOfmEM[e(m)**noj]zјZ8BX	>$*R,wX$;ȶ3 ݻʆlHmd;* [eM}&UN=[H ZGv~`t?L|.lG3V7gz:]L4|G O
O
y] ӏ,f=7&bތ4͡@D7[nr=*
髯ik|~ ?ns'Wa|bk)׵Q^Fy]tm2$7cӵBpԝLZ&YS:dϾ^\dT{ʵ>g..5G=~mL}CqؖN{6qEՒΧ趶m0NONhK/с
d*mʥVA^k..d|#:.%غ`휀)p";TħP>?I9XeC˛B\ "c.C^&yc:IԎ!w`Cٙ|$O5[C^jb;YGym:3;I|5#[o1EUXCs.CңH~@㽑vH[^LZt,ҊRB_pzs3mPpq;y")NFkZ]~[$ǀ7rG½Z,팄|5	V3X" XF0A<mjj֒>p0r̴dE/K<N%p`GY6<ΌCH8<Ή3 gST1)4Ix@p>j_ypw@H'{$
|ZʢPYD +HqUuE!p\9FzԈ4ӕcaE03X }#a/wBDŀ@_hP$PkAxGJӒ+Mvi$7YOqy$+xH$Ey<,m-7GDyׂPby|@$L1sALhALR	p}x\$P<	 ""@tOYG!Bt	(c+gyE:_3e:M+t9J7~Ѝ6݊]_ߥ=Ooz?73z?}s_N-\?\6>s5弓D8.5'IO.|db͗H_&aBryҕK7AzғH/~C
->Ꮵ/&K@ARۤwJ\lO2De0#e#e+-1+52NR'%.I&*'49Er%r̐R.\!j9Lȓ\yQc+^ ByVd"?r-$Q-!U5Z^ʏLIY8%*OVRzK/Tj4JjQZ5SNPDuS9Mt\PrT\Q\VS'\l'MO:J}\E@\I}H]AHI2WΔL@GrqmU4l&o>َ3Eϔ 㨆o'CHPHLަv 'B#O:IM/aѻ`$}/ ?R9,)O@:	uVL`RhxqH#aHA~!ar%,K$	mdd_rЦM#\W\E}C8yf\qem9zp{
^|5r^" Gk;
@Jk|ONՄ^ h p
d+ ~oM@΄֔! Ӕ >A 
 8 kۆH =5< 	  ?i e(u N$ k50@Xc4(0S`wn(
@α 쫁 z,s?&>v#W=d_VKz {j_d==*벁B_
?H3pʿ=,llL~" w@BG<d3'Ti*,(A<xȓ%&/!
ϐW9"[xs
^(obyXy]{\#!lGö«S>Q>>U3+>[}/`K|WϰN_&E|U)CY|J{T7߯2ɏ(SټY*TUWƯoBHj\T_FTI
mjTªDkPIOl5DjRBX@F 5Z1R+\5AF2RMQcT$Xi9D͐PJfQj,Wss|4-W1?%/rn́~ ys
h//m[ơ$-ţey
'(ףʕzAm6ԣhyimFģ-hs=ڱHVb-<ډmG;ã.hz=ڥxu^<
^;<ڭ^MG{=6{=^oxWr{w<mG{swzm6pti$l!hoIG1£
ʍh<7dGxsHoޅx'X"-!ES'aHi!z?lK4?;(	|,7]Xb_TSVTZ4|7uYOi8fߞj~#*oyܾt9M#?St64սI+-ĵר|sãK|&^pL
s\a)vnXG9l^=2-?ZO%e: 
-|Bs¹)C^-|P~s$n d$/Fڌo7POtꋴt(< Qҷbڝ%(e"]Q8b%yJԁȻ$-}PA	K
p.~fA 6-|ask 䘈t2(¿e6U>A 蜫[x}<@1L1}3eׯf `|]7&zŕ񯆖	Z._<k(Dsw(D03|&;Kon>6Zϗ3SU
Q=
C'k&j<gdfA(? l,4􈯩~mx̗Sڪh|2-
"ԓ쩶&GWhf/πeH|jvE]З. &~P5r\G)|VSz	g~?46VCYG
NtH,YS2}+%_Z?%ۖv$_̺
uf3Is
@he'Vk?$e$!KudD|6ya۬4OZy~PTejꦖRZF}r_$UGzQq4j\5<TQ7<]̳|-תuy^]7K
S2ޢ.7UZޡztQ7Jgx7pr]VwlxJsԃrzHnR1_=.ϨzBmlUʷ_Ջ*Kz-zM(RjzOW+jPF}NSgZI}nQߪwazRU?ݢE}gneYiVǲJ.+ךlYVU`oYY}˭~5(df[Vbg`
GHsk5f	(k| ݚȱ+i_!yM^t>qhw!#Uÿ2ums{<2*67%C /L?JW'\
M
nt
ҼԵg!n#C}oаft&Y:
u
;? 8yR
\
ze0@JI>e@>LTeN_Hyڃ1O!Ao$;WN>vУ&"+3{V(+;k;u
Ϥ`dL~"
z*f!TWio֝5^AedٓYYA~=;PP{j1u@2f½J/r
X5ej)HbtAtmwogɃ­΃N3߮tyPyɃBy<Vڳ	-.O3By@˪2Z-og("L>g	Nc9n|AFFrI$[W!R^ͳtT}+ksש|D|PK   dO\eo    5   org/mozilla/javascript/xmlimpl/XmlNode$Filter$3.classT[OA]]w,R`Ţ<`|iPa+Q_̰eu/_K2c2Μ9swsfUb9d(YA}n<qc/w}zv+ʏ<_`p@0Tڧyw6YŨ<L3e<BO>d*<c@
)ۆkFz1{BR}_($쿖q$^+LdJ/
0J ]0YSÞȘ(+jaD8I;r_}Pmo{wO
c/S#x ktuE_*'x=&,=T19o:?sĄ6Rʙ^]?J;BE&`azsk8-˖t6
=[w|%؝2j>OA79C6K
eI/`t>j/`o0>)Y3dm7I6S9̡t !I	Gj|t'&:`Gbˇ!h
D
S1Jt^T*j0,(XU-Ui
׳
PK   dO\K/  E  ,   org/mozilla/javascript/xmlimpl/XMLList.class[	xT>>d߆&	a$!lUdNfD@[*V,VUpC\b-U:Rmj.Ukֺ
;ww?=D4YӼEvd;@}G@5Jԯ:+_#ؚh1	%NeZW=oצ7t:Vli^!7y\)tO0@=0aiʪ:Q>S1ӢX+KlfpK-8̖@gp
&dJs$EaQKT,n+aU(ө|yH$g:9[a2gT:U L=9wq_s5¶j!:UPFkV`N#$b3<7lz@"0vS5`g //'5:R
15|Nee"Z6^L.H'hNǍ&O¥]e6S|TD8#642jlTXn'#ᰋf0UڲH[pM(lsL(ѝMx=$Ѫ0W%VuFc@*	VΪP
wwuEc`i.:]f:igpqw$3&6tbӤ;.IBPiZtZHL. -9󣭁qY\=X!h	S~ge:-Lລ9᠘PlQYzY:azҨȒc!,q:Et>zÈyxSRN;UvNm$ViYCb]BXv:.
)
;H*]TʜQD,bE0)ADxcb=ez~[G]AcOt#,ĥ_t	[uhK`<%e$]
dhmryEs~ .)hP,u)GT+ʤAVn<P%1AJ9SWMtp;'֠Ŏ*t
]E4MwunACrN+56n h\96+SgW2-:*r 6cܿMt;DoHxɟt꡻ 2*-g\tNߗ*6#?^nQj]:O7.Ю7AU%}^߸Aqk8[:b#b2dS_yCN{1̷ިd{>~*YN>ӓ	-&4*d](>-b(s±4d{U)Ÿ"NN(Q)&<_"2'ucua \sl^9qN
]ƂDp0uZŭgɠ?5Ȼ::No09I:M4(kpIv-%&ާ.zH;
7b
ޡb_:/qZ}(G&dtX]t:HEɋ}TSch 8`cfAMg1 xAw3N]pt٣sPRYlnF*6t
gEaYQPE\ OtX6h=,!2XG=$@X٢t.gtZ(uKJ^йRPh#HV`yCȔH.zTk\y<ۢhUFp}kU\\õX-'A	㍧ip{Ź)hz
0d'd7ˀ=E)rLqα6]9Qii<S]M?RL1it)XID':F}iJ"]T}V9]|DxW)L$6,T	/[*g}z0eҙ:/ⳃVX*TetQmD6uQmig*PꚥFYt^61Q زF*kppxϓ,Y3>&$Ƭ鎘˭:1`537{4>RQV\ny-#aalFuU+Y?g1OJE܉ΘӟT6\(5`nB=;sַ5	IN$@8.·y]d@bKyHbjt4_hZL,%coD, mI;&=ԯU3.L|9qHuE9Gm6+L&| S	)0ii>;}}.r
JG[wcl.Ǵ&1_ӿRE	˃85f3@WPBzfp}W/|R}HP$hKB<pm޴'Ju
B"ZuA@qXmxDJUq(SBbZQO>g
6(qՅݛa%@L'eX׆ٙFdS5Ĭp 7N+<}@Kİ|.*"YpӐ%נ2T'1Y:@Qи5o<->b7
OAЮnhJV	sᴄhjkVTypܹq
9NLsA.o hlvpuw0?p$MƻØU]aCyTgӚCBi>O\/Bq43 LpOkl}TEP:;Dx҅2o,/}Q4k_cZP[ L)NEos|
g\D{PrC4v֒) Kz:PI
A
PU/SI=R ;
NUV:#CRP~ܷ*e,7VHKpݜ]1ݩz.lDW+0`O>*x

u3}ѸlD1E?+K*/XiC>L6ܤN|-[Hp|r.1q<9ȉoq䯩{K?Jg=LEQjUHPwDo$Rg7vlDo7E?HP5nHM-[s5"x-OK̣Kj*c%eaNw@A'ӟ"/U$i`okլ(kV/=y%]ju
|۷oKҰ],3Ԍ^58=>C|cV[b34ڜI	L̐odZ{cI=K.f+D4AKo$QeLz>TX4[4,p@*h5ђk"߇6C77ELQ?KtAOS-5
2j	:t%w"S:߶q,6s^ՠҊ<@13R!3^jI[jI[J8-ĚƒL@k4+B.{m;*V)Lub-ot
*n<S C"k"K-R	UMڧS8mA
Gӷi;pn\m~ڄÀQI.2ϒt-g$-m%i%tVIZCk>m:IcX.4M7eI#q&2+D^|-ufO#hp1KTL_
}FʯߠDgUt.mٮ]|p-޸t%blD6[nN{vz_^{uک|v:Hcs!0@o䫧7,߾a`G=L-$3sQGA+{wLH5u*](uZ+9&_2yN7~7>0=̹DVg
`OYe6x65[ź[pK=@$]'HȯipOpaNSYh!ϙ2h/uWᕯNę  L u&1N|}Ա1[Ӝ=
.C=-\j$p/'ϭHd<$6`+$oW
A>hWINī߷b%[?#P1;\ zVUXyvfTB/1ga!tuuYҺKjWQ>*qb!bHje:4#<ʱ >' 'OXz9瑂^ B8
U{'B#ЛޢgmzA;8{> L>b>	78,$Ÿ>A׭fGɗd_^szS.g_b;q9>+Us TSg@{,NF1P2.8@x
6aPнzyp%d/N5)fRg(΄Zl(&?8lȤRtQ.ޙAbOq,<;SOi.9sDPʋ z\2!aIlRO;R)J*
T&GIqf=sB*\V/I@Xj p4s
?Vػu7j _,\
oPTa\Q,&kT<%:ܒoAJ*/A@A`	d\g˅|R]	C'R!OeN
nbh2%Gu*`鷦 .rl?kP"0ZpkMenznӿjҎR%M+9\c-aK'>ˊ,c1,{r OA%nJKr Cɏ0̗o20JkM+M0Gjg#=GL}"x)&],
+aePK"0PARt)AO҃[kc\_,M H^K_li]tYf\
8:]$=F\kEH	"Zi0'Y0`TByj%QxH8^ל}{?SC>:t!x~4KZ2d0[zi
CupŖ] @J#L2v@gpS'A."[cVA7Rvd]q\|lo#]bVaUdHdG 27 W~h o 88:2\O6t];9F+k	q6Y,q젒ĩʖVltBT&I W[S?1]esRp+uPz}"&<Dw;i-[d
0\Y	rοdGcpρVg {9t&tc}(F wTɆƨ_l0ẇ*˹JHDGͼKft G&8cIbŴ7oĊbed# ȽE%|?>XA.%XerIV)1ȯLW}td
4yD#z(a(,c~w w.PpW{9/X%Ȕn(ҎMD$k(VP7*q_Lo$q,$jOOl?=( ,%vov{%hGѧMU3WFlA x x	?o}MfUc8H&XM2 sC gP_bK!)j,dhHEq#?3;`{XlZ6r{hr};$18T@+QSPx"-$TOoð 	8(|T~Do)15L>dgp @uVUHm<T9epJڇ\#D 
@[@j4NsX7hVVe8l;72Ӟ4h6*4PsE~M4MM臝^UEsYIBÓ:
:ESI.l"4B@%姡z*P
Pbk͚g٣@#EJ jrZR3hJ;(#KM8T'itd/H{|v4EHI.J㹢}t0^hՔiVKeZUicFxMӴ4ԦZVju!>
FS4 , r<CWUpG<4M#rh3)OE5Fj@J#}lFJ#\*R^^z>Ƀ.oꡦ}\$b/_TuezMU-(7ͽ&уwH<Sf*P[n:+h-T-BܝIõ4J[BRq9VLmΆρϵ'ŒOeu4
)̸7VrMevdIVg])!Wad'
sE|2~t*1u^5
w5TP-d1
})ٺb}<ỵ$J3qg=ҢNmZmTdO:R,7$y
%K]cFZmҢpLĎO-Acu M.ڗ;jY4Byt2H94ʅ\<Q4s*mΩkI`]vYviniʹltɝg%[5$_rB</*Q7ɭmM^z5MuvX/;*'ImYHQ
;Tʖы֚[دЬ<&Dlj6z
\e|&<95jwT[ˠ4>M7ST~ep;i"q|v*AڝȤw!{h=jYNZڽԪGkp(NveMAObu2KpFY(S	zvK?dӮ03S2t4ՒZ?cEexzv{wA?)jOOÞ4nV3-}fZ4\'VghT-C*Z=7ӝV<E|">)*\VV_O|O蚳l>ݼ:kJ_09`.ĞPeQSg:'=cTJ;!*<4B⤺=pkWmrM.	oQ
=
hy Nr&
:HDl["}Hx	׶[\P`7)W{+ӿc`ӏC'ԨcRw'9&b\Kg6ݻK6ઓP;,[>y|#S4Np3_nQl#|sQk_{uk71k/_dorP&F[bhF1'X;H˴JO];BlL_hNߴ9*"6
my֖I;|(r>7VmL.NUs'Ft
`%cV>"~ŜSz#C4\}OS_ě
wS8m:+,%}TUEn`|>Gy
&hLPK   dO\u%  -O  /   org/mozilla/javascript/xmlimpl/XMLLibImpl.class\	|T?&G&¦hh[0	ȦR&F&3qfbmmQK+Zn*2"]Uk}],?y2Aۏ7{׎<NDNX|K}Wp$&=]pWwV/19
r [jul;;c]2P'
H %	m	D[zBҝPw2zT]Vu\
&Éh,YVc5^	JkKa(*br/
GFց&薅37T4sxZ-R1
25C3tDBATAc
;uX7Բ"/CsceJQݱxYqLh$̤ǔZPiHrwEVcP"c)4UiM}jGit"lCͱ.1oB0lUf߽tk8Jt!? ܟl߷Hv-D2T\Au2WvZ%VI̔ͦ9Lݖh'<9L%`N537ʔ'S&NAejiz`.0Tf/2-̂/-:-/\4eXP˔KVt1Db&pEYn*ZTtm4%'c]B`ptI;,&:Z.˰vx_27uPFx9?*UI|m4
$2糽Z>>mJW&dTU;=cAAꄚL[	W2W٠-2tm:E(4]DEu&hynJXMtӵ:
J@殦{1}:<g\aM60Uݠ&0/Z^:ۛ媗gb*TϓL|,ct#Cw
˻~$6#$Vi0l-ROM<єX9HuzwY7J궼V	AJJ.		:؜G>2^Kl~yv|@8Q!tu!Nz=֣oGC0F *i4MP}}>贘m:yfК!5CKO)>M:$Lhd\i"C2KA#Hʡk{DO!7 pj$VoǺJ
J74Lq#Nr>?Hy&fthc
[c؂=ˑseSd_4KeiP	I^_
uÞ4+U
=vׯia?dxA$P[nF$>@U^E6bGO<,59]3
0`lŻP<C.}%.n}.?A?4Gc8zЮE?5gs酒<UkB	;,+Y_+5oghC RN⏄4+H(%UOHFlY=JhM3UoA# b!E9SNV㶵JC'tzՠm@ig
]2`Μjk5VgȨ삒vpj1FȺHxѕ*B5
Qrbs4'-Uf"#H$2Pz5se<A#1F]7=-5xWӡ7Cd	\D'dIg)7pԡ/-0
O1x*OCOS6o#k,glxlgʨ%wwsϴ)Vg\ϳvdX8ok<}׈Cg.`U8:,yA̗o#'B/(T$be܉./e5ʍ` 4/pe<5ዙ[pguO"TۜyƢb=d`KzQYn[dUK06O$L@<ʍv
R/QcP:5}=(|G:_4N&k.-/oZLEk-Rx&tjNsNVm.%7Pr̤rF^g=쭬g;0CuH<qNupu2&sx#37=xOIS#1syjċjN}4r5o4|UB;}%#t<9ف:ox#ӎ(o|y#
}ZP$р:@ߥaw4&}nS	Lw%z:vג@ɛ<,k{
'Yv1͖dꮰzUɃ{ մ%}?n\#a2c͘Es
Opk8	

K)?HyN4!;k|Р;!gt*6pK_91]UXχUriB٧@P
QJ	1 Ƙع'i	%	CR6'u_姘10LbxӞRn7i,zѩR`1?cG.ZgO ϋ}tRToߓg ;ɽCy]%p8}8V6^g`'[ yK*TTC=E(n
GC9:sV9+m
`@p[[ۺ3g	8s`|p'Sp |7<7 $GDAIXO4/d"0<cRsjO .	uCA9lXip"|7V*29f}~ݤ>T>?S2+,,:}ٕ@Zrm79*؇x:aD
5tV]ځJ"z
	`1yD^@P	(דvD3ک1y9c}hݐr4μI@ی2Y#(&aƳ9O$aqa IP\k%fbOЦ+ୀa3ؙwvdkS"ZΕGZpnuBygɯ
)ڌܳaOeDW򞪐y$p'.[:]u1ΈJsUlw,M>- W3W'{fgdةçu,W,l FFH%kp]t@`&K9gG$hF9U,OƬ	)ےlEX鉇-erAmgʁ0B
]-wozC2wm'--d&oq,4	t[c	U٣C?d\9l
ױYlzF^T$_H6b啨beڛM0	
psm!+͗)X|ݙehJ"팄[cm=ݧrL>ihD"kIU[P\\%Ƞ # \y8k[K]CtM:TߜLsa4?Bisa7TڪwNVI4s\KP~#1+}ǈ{q%҂CTx7k|a*T0
ſ/\̿{н sǿv
CU=Jŗu)tO{ޤBZ*!?~W7?ArVW/!aKX+BWiNźQ^k"
QՄU?*xՍyj
s"I]=M!ȝM<;r!d !W7$lrAyrጹ&VAOEn>c~y\~ƦV({/ɹ~P^!ơ/^EMPzfߔc&Z^/Z.fߣ4C UjRˀiJɉ>Awf6QJ+*SXtŶYd2b(Z]9>SUe{ x;6<Q&O^OkStAKQ dp?R-w[
W!nww#DFMTI7S
݂кΧwхȚvdҥt226& Ze
~ &^p}c/tӝ2}T}T>tXO=kѾTTW@ەuޤH,ހbACP5}}G' '!ߧQ =H!z	.BD<ǯ%${F8	*i(x
\_"e)j^o/~ ~TLm!K=#X*D")!DV?0EGP]ƼW5XX**cJL\BL}iiJQ^jq ڻڜekӫijp%Ek3]I\a/\!`zx&))|<OfoJ|9)OkZ
N_PN{݀JBdBO!Y}
uo?m߁|J+ө Brb]zѾ
G.135s2(rOT.7JК֚
уS/uZ?`UpO?ah0>zί,M/ws޶]3	]N*pa[Ch-R车Z3rJqZJh|KX+taŨAy
KU2,dZq
+Q]ߏ 5 , ㏨/߼<oC~;%eEȘ@M"F}0ڃtQv Ei._^`^Q2	.fKXR\U(yowfxͣd
]/}w}fi^L<7xM}JZq,yjݐdmN{6/>+gyJx^GEůA#O)(~׀q$-"=sTA	q5tCFiVZYYtW%tOK{itHSRҚ?EopQA/թ5ujCU-e]\N7mԩk0ZphǓhOD0	dt3 ϦQr:CfnMyr5e4I+A墕! 
睬VcN.K+T1ڥkZ9VKy^%N{rkWك7A3`g9K@ō-iu'$8)zG*]O^Ĵfj{䳕.Qy
W.gUsg`/_ HBM4CYKet,{>EL̽.rBl[-8Ƥs &JZUʥT8GN$w.NnGxx.j5=PۨR3JifO@*&&"z,զxt˳^>Dq\y
)j٤MJ_c,RH1I*@m?Wӿ&>l)J$/TadGZms5sGUe=M&Y	Ńk&'*UL־ӁyKv"މ`EE|P5㷏oN6~mV
N4CM8EJ]9ɊKjKq]ayNIv$px6cdpsҾL؇66dvhQG)>'{dޠЂO
!{^6ۇ#ʹ| +Lhע)˦|gFtٔZOz4-zGiW4ΠYj,Z{W_B"icqHݏ㒶>_{	:ō6(xY/yx%Z2nMqv/Pt~Y=*kc^hhS
S G?ݘmRQm_[[Z=.\n
bpŲTũI
aXIuRGho/S~TCPd
w ݣFi9ͩ6SsfAD6_d3#2yUSZ6&z082!5T(.rLh|~N1{HΒE"+
2me(WO|`/"M}	iHi?	}Zߢ+y`oSGQHǶigS6BM(Q~mQt\۴)4
OX9!y/Qb%E*JJbPSWluA6YMdGiCm~qԓ%/,?~٦}\K;Qo[/Gߑ[ʦ:3@NT%e߽O.uܝ)'@?`V}4Q6L#Z
(u8{ ?"H"U/W.䗁	oZ_-}vT5'tK+c(t_=Z\-C9зmکB?O[yl2Ӧ[*wLuǝq	X^>nZ2aau-FWϨ^N5~եH  >jHfBb:P"T:307p.i}ߒT 8h Z&MFhU?BiԄblZx5*6Рh:IFW]@ϩo2sԥN1̫ck{]9wkXb*m
E-=<cO60
JO5[1tdٶ2T귴S,KP/hDJxm.|jt4::]tg<9/*}`Fnv!7[ND\(,kY,
1dGL?k>\aα&8u5ÔKږRR+hJiԬjZ˵uJF(
]yLЌ^:a+#T}PU*T#2hп5H wsiK\Cvcm$9JZpiIT^yT>MtkvGkQ
!H=M[aI=UN
H/UHk
.89hq8@u;
2S*5J?tVX' R]6V}-r6.wnEr;#n; oCvӛF~PKdQ]a\kqnŸe{*MTπ_.Qkzy\}^I9:ԮwM-LmֶQPK   dO\5۶  -  ,   org/mozilla/javascript/xmlimpl/XMLName.classZxT~$̄~	3MPn4DCr$L(Ezj7]QPjU2du]YUwn[ֶkW]mjAsr2	Ag|w?{1 'J~??_R?a+:r/|0P(БPqq4ml$[TX3VwVScsz5\$R#	a JAp~,\~cE*o5j_],PwƺMfkjΤ)kJA}qk{dq"ёGNS0*Q%l0S.CkC5Fx0( 3/Ē$^505f76
\5D5ąV" eaW2V0zV0uL10P{$OƣWX	N,Alkh3-kM,OH9h\'eKDsSƵDD>	$,^H0xu,+DdSq#~fL. 1t`LX-Hlj7[[T#C"/4[E X5|,cQJbd&%p*e^V`%hB{EzsTD'Ԃ	JjUy!d5z1NFdoSIEM9ڞYJ
6"Jhl7fȣ\Mdetmiƌ,|`0Xy*U,lQSEcGk$Nyp%t/VDcc
(W
H~c4֖0ら550Wx{GRͤ:Y;|m&)7ֶz$Mz>glTLdMB[nThn7W&ܮv7svt؁+#	r!dH_ Z`~G%jtKP=-[h%e`lxvW{UYJ+])̋aB.7>:|cuN>ڗىv+o!<L[ͯ8h6p@	*3f<xx>7FTW㮝qOI&+@pJ6V+$6d.ټxAe
/0%%3SIY?ʢˌ%K~kAMËxEUUjǿwƺ=٤y$:{_㸭(QƪSєٮRoCuM	3ޯ_ `*-,O^5ە[_dj'Qm]\ZL}z~nO[L/WA09S?#$*P@zN?eE'S2IhT:>!܌Np>="G%bHHaA"䉇%_ۢJUFHA
1.y=#j!tYٕZ
R"C#̘2_xdbaLuR!ș</Repf
iv6(#Q5QVk8u#""[D4k1Ib=*Оjĺ&,,x#gיu1~hIice޺)iEZu%;22Xp>p(J1GoNmڠk/0L;vynٙ0[٘sDQ `B)ٰΐλ>Hڟ^Ptv#\&(h뫚ggsuk:x4҂YNjaFmuY7lL_fY׳t*NQUoth߲D?XA2[(v]}bNiڂ-Q0|
RV}aѺ%$M/y<T|Ͽ_ryVnZqx|aN?̈́tYx|ZRΨ4d~Vtt%Z%Q<
;&+|mD},LI\En@KN(,\L[ G}TcyI?ύ9>5'pW\uő0][Y.Uم\7.ϜݘG1#QwuZoKww]^2Qqq
Vb0EnLXcnT8w78.xT%!	 0#e@9Fw<*11#03W
sa$B(/<OiaaaKjSm+l ^qx;+coTx@#Aww)ĊtGY5Z5hlfRnLhQN$f͉|;	b"nvJQ448cP/S0چO<4؃=N<u
?Jc)|	\iL.[=NUsKy׽Z|n.k|45s!t:J>DMѮ1+Py8>gsyZ˹yLiELx5w)%d&>}#HsWs4.9̓QDzGN/FSrN9Ƃ&x HW
I3\%WË"G= /
`~sHi7`~lrH@$O%v.M1P
̵$6p0dqs|+

D<֥(ɢG81+9[Q!2W<Ksou),O/}h>/7 5a&<C.#_>}O/CQ(Ri[]	c{'Fq_u(r-]ާhaq.D*zը65<a
4
zߵX3(dkNE.,Y[\aT|JTjQWaۭ6HVǹcmm47-ҚBkɂH03QO-]zT1=Aug_{,xj\Nl{L&crԷ*Co7KFđ>EFQ3<a1n㳌f~qa}}d,6CѦ]jKD^`M<54KS.pMj`3sW1Kg]3sKs+܏ݍ
wi4{Gne}	&!ry4oa{7GYN&
Vg\"KQ[c|if|9C杫#U*3<zdD[JqC~#OkVVc$z\VPgӼhYnk4hLGciKj*Ö>!nRVkvtkS -uS[}z`/GtS֗XKU'˔b**˄aK-^JOHO+ۢ(454yN*od
E"g_'>õGq99̚}WqdU6;Q=ݫHm:̯QaHU*m.E!!בc@_M`w{jz~QC=k	qcBS߳$sawÃ1
lF{ۡ0O҇u	~@W.{^%+	?3>qg{1vvP88dg yC@9hOUP
YikM0<H؋IWBNTͩE JZ,99Qn =(?G׫P-}lSQǳv}e(v݈x[QY~[q7jUrZۻh4^Si1;"O*x?4~{Za`RrvnOfS4KNr+w,T[J:o4ۖG:ui!w܇qs!-^Ǣ C騘募	5¦eK9^-X#լGBd,8Įx{ϹRq<eHGNG|,@e6zFM.i<\JobW9ϳfUFu
,P5lr!gWd^<DݧCs|PCtOQ	ӈ9rb'
QFs3+K2*9Oη+^/66*IgrK=nqm)5jst׏[È]i$[G܊nxz$NKQFwS.#PB V_NrddɠG$U]:mmߋ:h]O>Dx+]-1c2pȃ;lN{ӣRz)k/HyZ*WnB2buP'Pq~U*yGxux5w,i㥝7}ӥ$Őے&\GM[##]dr -m
ltUwHCZF^!lcj5D2Q,%j9UUk^#3D"~XW\4ƢdӱɅ+PrݲFa+MؒrC:ODV<U;~2!]^N;XSjMQw	{Pȵ7ױi[Fͨ[pmމ&pܛQ2@tl5X9Wo4RK=aA
)/ɏs𽽃ga'(!y8BCaݠd3{4i~@OGoaP8ZygNNI0|DPK   dO\R  =  1   org/mozilla/javascript/xmlimpl/XmlProcessor.class{	|Tսw3ɝL.IH0B 	!DՍIrIF&3qfmmvnVURZk[u 
][7Z>sL&Q=߾gN?85>1᱐<@m0R:#틷ƣvG07ځNgYS1{^Y(%P(	1;]}P]G)bvG!L[AU$U
I#+LP֞hÎ"QR!?bq2bv|mǎ:=(ITlw0ނ_+]2DL21Yi`h Զ%GiR"sj[ܽj8>&fZ
1{]v/%o1P-ub@b>r0B-.tD;]\l;\|զtRa>@FlU-k"vP U/E(s6^aYla	JCv8cڧL\zRm_<%k]vPck}}2,Јp0fe,\<sG")&֖f*Uo<E`aw<[WwA椃t4]ux&z9k-z2id"li-*O+&֦pGFszntm F+vؽj`b`0eֽ&XNfl-nvyG rPy:W*E]z8oi3me</w`(/SBvcP(j5vGȋ#G»`'eC@g
Վx[kMt.WjriHKp͋kGeW+]V"(c-ZMCBoYօƸP
]X^Dnk?dǺm;Cq}^31Gp?fl#
[WF@3dG}؍
,܀);mVx~'ԫ n7).{p5^7'Η`,,ܪVVקb}J>8$[q'K[-y:#nWѳ($J0q|BPB@)\8U-~jqR+,ܭ ziSpVzӨ˴Z7p?0ϫ<S	4]n`%wt
q'}4/[
ʕ@o$/{pq#$S1|KJ[ZH 7

FcL`L2YDG1!F%-	V,<36
.<Dŷ-|ueo\ќ1"*oTȫ|((YWخ?ď=;31Ud	QMlpaS8u7y)TEykZh&~j?CsPQ,Kx,WL:ҵNQGc7>>Z1J//&~iWzd]6bkl}=J6MÑ@;Isvwl([hdpl*΀A3j,Yl3(Ԝnѣn6bP]qXx'ɏ:D-mY^ﴅ3ķݩ|z$<5aI	FH5MᴗhmIM'Oj4ђ'*p$RX;`{I%ERL+xCX?@Dכ~tP
h_OF:|^,+hkt(QM,ɝ/L0e%UA)LULd\XҘ,S6\hL<fE2ےJeOhOT)j1e%rQK&%GҔ2d;2Hu(2/Ãe\B&Z^EP0[Ub=]"py ^#a<LVdԙRobY"q"UR-[aG
L􉳠_И Yr4S,jgzid苆3\-4u3ϣIPr)NgjZ7X
=kSĲ(`'WkU?KǢ\q%ds3h#Q?چ$Ckq'YEGlQY
%[W}\&sbֹhT*W5ks,ivG3\0
dZgZcǼ*HO0^CD669v'ǒ0}MXvNX!#vAv7yA]zGǹ;
dt"DPōYuhkcVR64~X{,y̰aYk	êzS	G֌-ɺ+{V\2ؒ_H8{DOFLNdkٓ$gY_>eif½v:~Zo]j śe5K>+P[ӏhjr)#5-
3|rg*~ZT-*
i*[İ|QȎuzu8jۗ,yXLz;BL	N-~UKabj;SWdDd|ݒGe8d Or4uo9%c)e궢@|S7W̵!rܒJcR7<|ے]w)B	DM79yҒQ>9?iu-Ppئ).4/!?9U{b}Zg?y/y=a;L
ȰE
˖L^!0^|̀`vϯ$e
/,O]X9m.LUz@(O@}/>732mjZAe>,r%_C{k+^{;;ֳqh3e0
*iS}=,,J#)@NzAFҚ梈$ߕ&*#WP>ү
t^>%
5u)A̔6h:tH_3F]qEY{[dEmg;Y|^5e4MINeX$F4*zc9V
*5V1'P.8{$vMHř~F&ߛx߭aQfc.[Y]U22gq|[hޢ6^Yy76lHuq]vޭۡn;Иzl:s!ur_ț
d07,ku;DWesڈf]0ơwAѥLAADuɜa&rwp>ܬd-7R2L*
Rh9Uզ,C<~U鰟w=zHFoP	a<uS7ۻmڑGC
Gjש3MSN4Jݎԫr
S#Y
;7}m8VNlfWUbOu*HV%5껕r:[2]/ŵRF׻xZMk=x˲EyFj&QcČAû#l׼owGСȹ-hDvf	
gۨba+ݬ(!θ2Ma^:/*ݍil\x^Un{vP:r"Ʋa`oX~Pc~}|߬J~Otw	wnx* :~U% Ga>Q_(Oꝓ8NOxSₖ'`UI`~+j{j%	v/<e&AãXys
>Ⳗ]\RL%$vfb!Rclbl#wT:ʛ'@,[?̓[doB0<3GN/	V˃Es=Q$U!-UdsAm%[`񪒫AxZJq>Eh#q!3QCmC\	ҷHZP+[c3w\=hls1
i%sTӢu&
~x滌}ea,igIw9LW&c1&1r5*v&Bz'Bz7)
4G5G)j8D{a4RmGouWA{}	kD{mVdKNʴ::%tTS܏0N7!RqhrGޏxWeZ0bg0QHO*V?o	d=qz_=>T]Cŗjz,KO=e)OQ
ʫ(>:ѧg!Ưicv t6\ĕ ##5;;2q=F\Fu[v\3q=N\Gu;VdL\&ꝸ\\GNӓO).78Cn#s3Y7Y72snɺynPn7&sY62*up@e`KjxVMN<eQ0jg}wc}	< |e5z_<du~&3Ix&:櫌V2$e2fFD!k
+_:4dBo\S0ϐ;I\	?FʐkYn^&:W&8\$
6KUO[U|bC;qx,y{Ppƙ8ӭ$}ڪC
{.x+8'x<Mۡi
p
Y !Y,<b6!%	ƨ4r5&+EOC~TU'	Tќ ~.*/Qp^Q$T|0 E2bˤ$UL̔4Hn0
"
(IiWS|r:u1,Ufedl<	dO&dL0&x[R}oQn~jjobBj1.Ԕt䴚Es2S4@rf
s:s
b&.Y,_+$U s]jK.|,ؖҗ-4ʌ[j<*MDy1-D֒ԁe7d(j7&8B1z<	5ĳm{2NXyLFo;"uy<?+d2^X)MS`R`Ay<tI'PtF*j^.<nW&y Je~,8*w'.I	x+k=:v󨪼TȚ·uA=CH
LTo}M:.ۨDQz&}P?Q,ŗF.iRY!Ynr	+aloa}	Of<+[GيӲMD"J&2C9CI4dM!)bDJĥ[n urEǪ:9wSjsXϙҊΈ|w=٘dLf,BŘJy/v	dQӪ|Zg퀪w,%M7FO%G)?3ǽʿ_{T=&C)ƬS(w2`_4/_gH')/of_4{?\ 7n6.xltsȍJ 5Ҭ"AsUBֵT)hy!LV+C]9M#8eP8i%\Oũ>F}L}'P$JnHMo\5UiELxNLIQP=NG[9<af[I붪#leؾ\\ZCQ-ҝ԰T0^*IރX8W;pXr!1-XZ{Lyi}YN[Y
a?aǱ>Q>Ohamlc1q#|iQ#BS)zBtJR5;*F1~wG	gHnK&SroSn, 'Hc5opUG喖j`Jф޿T>0 bP=h*>\<=! ܹ,ϳL5AϽi.ٻ1U؇g1WA܋r %ҒzQk\DsVy,hƁַ/c.WsQ2co+}˘ϑ9XёHK{Wշ^Ur{Ciȭ"	#]K)-Zeye}(R8&Ay=H|"yaL/g
䫬@c<
kiJhjhhjUG4o(3XFd.,ѠDg5M]f9-qǆUųԪZiJg@2pB涨t?+sj
yPr%:qqFo]LI5X@r.5rdxTsi*<ƖUWzDaGUP\]\[N7t{qX]CBU=uՕ.ZB[tJO6OS= c] }L>ǽ~	(|= I)sLJ|Fy)ƭ}= 4f0Y$ϢY~-Ut藟"np+x@^Cs|[~'J*R؃EXx3_1Qb^L)E7ycGƒMdxOcY#RJOb)Cߜz>WkkInMvk(:O΂2}őrnlY`,ytʼ,02,yC&#~fYxG>Xf|}?/!އYUwj?Wײ2oB^`}< /Λ$5?g١-9d(&p<Oȫu>ϭƧen]A`:3*B%ih,ۡ ;~.5Vc!BZoLYDmIM'GN00|<m
߯xiÔQW&2%QrQ(;"b7ޞ*f\Iգ\lcV#/1pdRFJ}:].'
83iB.2.n*c9f64!M[,p8Y.gEUS~%᝵U,?;lS(Q@o8櫐.sŤV1}|EI4p5Q:UT<'1c<<\m49U'vWV5t~:czu6JjPK   dO\KŞ    5   org/mozilla/javascript/xmlimpl/XmlNode$Filter$2.classQMO1}fl,]*
pT!!H!Pl]vM?5ܸpT:v">73ͳG;QϤR<"ef߉Ij궘ݔʈ*Si1xsU*@%D!CrZN"Pc?p= ыTgu7Ԑh&G"GzC\\{ͱ,/Y!<Efw&?2Ovx֛ҧy,.aOl҅L;;6C)
`f'4E!tk3 M":E]tvwpy-]5:G_.	:n=Owu}ks#cN5L:d
;)ePK   dO\ڡ    5   org/mozilla/javascript/xmlimpl/XmlNode$Filter$1.classQMO1}fِ,I	TB(
!ZR*EX]vMi5z'QUNTr<73oy~u`*%-D_Ixt?"ef/IDu@ʈF1xV2&TBT2Zq4IdCaw5`!zT׵td*ɉ"1W}K9N}$ǱC_OuLܩ~?03<>?xJO_ zznv..d:<T]Q0V6;~LS+^DFb)Z=ezeٸ³t0j䇣̡1.Dٖm|NwGj,PyK߉nX$뻂%,%ٺ브ULPK   dO\c    F   org/mozilla/javascript/xmlimpl/XmlProcessor$RhinoSAXErrorHandler.classKSAuрQ\ߨA|,cG1,MN4zEz#xeݛǲĐQ<d{w|	\4C@B)mUpCj]5*i6>)iflaȪݬyvțvm.C1tD]`V!WC6WZVVЋ>.٨Mcvba$*X:ҭ+͝~dQZ5C1ZO1WZ?ԸFA6^cN
ŭ={ݖC3ȝEhLt^Ԧe-t8[L󹊉8``A0[GA!h>{Rҧ&aݵUue!]OG΄X2$w:-D;ྪp!|~!Q(mʪg[RmgB-!Õ6AI1_h|{1YWH]ow٣,MkAL2nB<S#A1(0FvwGZǢM2ɱ`uMϔv>1zZ 	?}i$dDelLsvbۜ$N;)-kEIŋ.VJuXg6zIW`MtXFQe7]tn8sἶy\тPK   dO\3    5   org/mozilla/javascript/xmlimpl/XmlNode$Filter$4.classMO1_K6$іJJʪj%TU%TR j|K/=!zGB>wfF{QIxt/x23Ud0Qm+[R3>T^yPE#*!ju!:lC'3r:gU]o:xK}|+R-susi7'`xzf
Ǳt<#bc/hlg>*}ǂt	l#44VioWe(Eaua,2yZISo*^.2F;}6&Y*7`FuӘ ;I y-wOҼqf85R^}!^f1G杲%:2_PK   dO\i  F(  .   org/mozilla/javascript/xmlimpl/Namespace.classZ|[W}};Jĉ8/?d)n&}$qNԖyݖ(D\INvl0({Q$cch7mAh0`(m0m,ˍȯ=y~'p:T|&(ShdZ3$Sxx.M[}z?zymt2ߦmj>` 4éH5r#U^4abZ|_"3b)44u"l
QeG|&lͶ{cERDbKT)lCéXfZ7]2QGt\<%EJPPed}x4E c`փ;GӉ|2`u&֣AᚫU~A=g
liMC}l2=7hH:<-Jˬw4
&Z9{+\k:lV.ͣ;G)RTpY
Rs;]o[vmYa9%Xo᝽c
ǉ
ʱ:MtaU;2O+RX=VٽDTwwup<GB$'~:m+/RVz(<p |qX?	O'S$_&ǒ)LE_h83H}ª))Tu:aWZMX8ưK!7EQ|D'8+
h	-G
&2& ߟ$ik~6yx,jpځљ'n&N.-q<mgqiG w& ZUD|&k =;4:4TFě㔠=V7R2t}"{wtoUmߥ_Kpsj?!+{KUt!ѫ[~f}$?>$yw]
i+숧R
Vf[ؑIӳ/sXrG+7M[aMgLd'rSkV='dlA'gxx>z.}TxԒÓ#fx:7upsWCk&&EyT|#"C
(IՃJ+}e*h(~f
%c
J>n
.(hqPg"lMvA (ZHt*SI8
fǫ o,67Iy)LDOKPYJOs&g?%+,j|+1(;_2e>
Wn('uoE*3J_Z_R~c(m_+2m܅:PLՎdjVe^7M|"jXipvij;7,
Yg|@l\]ETw>2µr5yi,!k7Yd<uX<GyPY'}[w{MxFm<FE9<yJ=Gc}16f"q>'
~%'&W&^dx	Kd[Ͼ6UuÍ(؝IP83ٗ޵s(IT.=6<SDƎӒUjuW)Z$)ǦDzs5@FڵA^6ɞG5I6ǖc\3{,kFSl:M;
Tiιoq;LSނOsɢBmy_r(ϳ
Rhq)@~u\_}$x>OgS̓$UrCt/Q1EӮ
2+O(^~#Y	FZyEKfraNP7(|}YBwQ䢺	jk+FYi)t̺	*ΚxԶD];0 bG&gW\@Es0m5dәzcㆪ2u[V=`^v3SSͮ;㒍h+LYuݙёO6X~#B}ɼXɌVVǂ3Ծ9Ty;<'Eo_KEŨg0KWb)?O$X&r=kW5>_zf%dgz-z+xl*򣌕L+p	G ?2UO^*4\cP+/¸}Hh'0?2`$j"ceG AҵQ5-MU*oJy$Ý|yQT%GX
%PX8;yX}q88ED~=[ZGj>>G&N@cu1
.7Trq7__H%1t%g>1=#̟q\`DbPK;сm	.T
\/G-b%6A>h#EУ%H󩥪}
8B~l;h?uUasb__i0_-+|As8jx_׵
dm|)4`@]p~JSRk8V6onYc0Wt3| 1ɰޮ"dϹvcz=྘9T|#-,^֝Eye=qC {Ρ"0}v;r)|
3Ӝ`!F]dFb
rXQ*{
87b oo>Dz@*:jH<`%yD5s&B|로J{a))ڨ*
$N8Mbxh5I/`3^-Дؑ6x;;
!
kxJ[%6w9 :@P5Nz^dLnd
b&3؀؂
 tv ,~A;ÖsTkՁR6[uFt~$xJ{g_}}yct>OTe.t<<>DqZ.eYk6י3	){].k eVf2RK
Q)_|{k.D-xo9~wEgCqq6G[X܁O30?YR}"q|ؾ"*Kcd`5刾.S:ݹwn;N.kݶP鬓Qx3UT
W\NM-4.h-Tpo;PK8RO[Le,p;?j}^1!aep
oo1Ծ8ﻉ ]5J[MZ>úuhBg	Ge`,~e
u򟺑'˒KBڦ>'sDy l	SVYS+=D1F-6]2dC7jsT[2Tp
Ldtj`;_ah	Llm><V!&"-4vStmo	oq@6 oE|qٴS^R]nD|bwgw"ѓJ\)b&Qf%	WSʴ{Y|ǫB^5j	f-6SVt-;m
;حw nef9hG̓/HBZZ)FsXnR[ӝkeQu¸ڦdf40^cf,\v=-y^%$8Ơ}@g8,e3ʂta{5|1[8%ް6⪰/bQ!71
L50 ʃ7v=pI|
R}pI
|CU`M4XĆV5x-Z3Fu
n`Զ1u[m1n&h+HiՆj/p~6U`>a%,pFΝtGe^uݫ]6&k>[9ھQ/E5y'],ckH.//9d5U;<^GCNwA{PĻi_<sVeap18)cTPB=XbS{AH+H2]6]%z$e; qN+"2{otT7:_R,/ ߝDwz o_Png`һ "֫t08]ӹk^y[5PU7^dy8C25c`
C#	hQcخcJ;*UPLj~PqdJ,RfpU3hcvѲ{h,էPK   dO\R    1   org/mozilla/javascript/xmlimpl/XMLWithScope.classU]SU~NM .mE MXIEMMhk 2NfЭ!7J{?/qƫv/9_D8q|9 vOe$f'Gzlu';4kD]FX} %]|ae%|٪ުYOD眲f)i*t*0,]r,68Q	e;Fّ.aL X,7m;S"#.$Q+C2g	cn8A1e\aF@e+*f15ROVAO{J*bH^Z*V"D *&,BxؑD@^Kj-x}E#tyU啻!ЯW*;V;@(Ocaz`
Ӫf626ZkNA6
ݟw{CҾ >߁oêtCYfl7K##f2ug7О[Fz
zjP>WM˹4Gn0w9A7جWt8
ED&`4zF0
c<v2ee\\ccy+X@+n򟯡;>wz&grjķ3ַt8^:WZoapg2pgxEb;xkɝ	F.Ȅ?"9N[W0sj7@O][,0Q̓aӸYKH
,g_.RJ F=d۸E+?O1vŻ'5w.*\%&|!EnaSE	|I-HI'_A[_WONU K;N*	g	ʼFYo¼m
.[5Geڌ1"iH$`ޓ&]X&)|2?>AQuJ&;PK   dO\YKk  @,  *   org/mozilla/javascript/xmlimpl/QName.classZxT~d$&3@Ep@Hz!9d&L0(ڭVvvmmXC-^nmnmkəa@#s_]_ݓg \)D<&|곹s;7C|{.UhՃa~ /JeR%O]!NtS]-N<ALnAojJNpP2QQy12l%U7
(	FA+-dɡ"31^`*)(LLD aιzl5H~)J
i8~**LLAӕ׶H'yƺ0hQcuwflw YmD=QRG5w%:h
	
&CɴM{)s޹\*wa?ĥL03yZʹ'[S}L!}iAUb>0ĕJ0bEצiM;*&*U<ݹTJZFU4L)gae» V$XebO\ړQkL$Ԭs)%:MXOv'D`2J! RJB%'hE&`z*%nжs+]4\G5l5u7h`]H
F,fV2#mڼJ0iBuD:[us{ {&
@!k[GᴉNF5a^Ih7lȢA9^nZ2{X@p~#5=aĺJT2E=2}/aqAlG0H%VI3Z`\nu,SQȽx?/U&.O(ĝ 'EydPS44*AwCTS[\nGi}2E/^۸\;l B*ٜi^T_x7J!㐒fÞJ<OC@WOxPEOyU;ۖ]]Uݪ*vZ@/
|gT
(SB[RgM|TZ=V{cE2D;d PV%p[$GS:ujU'+?&5C/r6gxsV2ݶ/TPN4l/X͗L|YHQOx*kg9MeΟtWs1R|ߪX&<k6Zzx^q`M; vUk;4?@a{Nxk] o杖:uC32VK?PuCߔlm7ug
Nw2/qQg`[iIvKV)*v˿'ԌuSTKIhT??1ngOMj\I(Fxc&^/-#A4WJwxJP{2_h8˻S+W7U&~gmޒOvuYxm݊Ҽ~]aiXe3(!S	p҉j8)J >l?ta*F"ՂL	*їd)52Xd=AIjv=Dy+JX</T]^>W5g0ѱ$< 
smV!ZlDsk۲v*#^ڝ8sߴ
%S46nжmF׾V5R4wwrm6[TΤ4_3}Ȏ-)^O$ADxj?>Pd4Ŏ):Ji9Dʵ%OL&[-BƖدxB(dw'jx۱ӕ#R;?gY֨AnmW˞sÛY7w_*CVc>c7/.`kjo&Y`83/N0xwڟ(ePw
qH0U9{Pͪ+]G
iawBY^
9z+!&|wP,`iL;Rww4Q~xT%}Jt=ʃ%/TٺiUOX2REik|~VU02gd}FV
B8ˡJIz9lRjo*s({r۟LW'U&<PFњd#mg4e_.9bh:$gTAl&2+r+A}W7!1MKECK=V&({3Y`01^"2uh?਱K~A~ND-dLqO%%>}FeJg)샟3iczK~=9IbZ%Au/t߫Iѧ`l?`7>ʈ7֋oc#D']	0A\*L#dfb6fimpI\hi
=R0z9/<G|f4l-jY"yX{]*icC{_@3R=I28^_uND5'`5Z_[RS18whrVcsy
.%|JHה@\|Rke9i-=\&Irͤ|e\#:2vY(˕jbr
.nJpY<=k-Sq6Y{aȴ!`#Z9l-pOW"ac>#ŵG<O
6O`鲝T+4YHYЩ	B
@MXTjĴ*V*k8"'`JLrRGqB[*ۇo)JDVx
Y͙k55N`:Y`=U%RK8Y,̭8B|o	Tx>tCO1ӸhjUQjqm`	m}zvWn/rT}%ÜGYUa	>*q'
dP<H
:a".	YK*1[ֱ:y#M)rAܧlfQBާ=Xp
d%`,#;k L-`3.OF'= gyO1G?^


Z<;Z}L--J1SܚrA(ȓ,_b;S"<Wyex
#Mv?Z\GQʭʯi}&psWRnv 7+7(7ioaM/a"=%`1~d#16e
:e/ֹ>JWS6؞hm20m沒)eo}^iMPI_!4Ӛ厥Nj:|K?)%9{z
l؇cgOGOĆIxH76F`ZЫɟ~Nz
yMQg5.{%i긩wfsss9d{>5juk|a?8ZJ3F{qxƣ'['k%Mf6DQ7V)>uRYwtFT}쩔
/jŇh͵%]27ոSdSV=6z]vjY
#cghMڃ1:?&康UlcR/2 {%@(6pɨr	iEfJWM6WlO6>;>UF4< _kǹ/W5TE>ЇSR @jX2ǒ(^}2\Lk%X犾NnΧF;u.T~}L"ݎ)\?p00?8s1tl|)jes͇xV-}'ݥ/6˕k4@0ƻ̏	_@x(3xY#H/߈&S<Qj7$G#|ɷYt6;:(8>sxG|$ة6{mSm,č,Y:=k1lG&r*CLo'
 O~
꠆8yȍݝG:8r|\,I^k2BЦQ#5x*x՜z#2nCmgS
FZVWFH9j2%׾+Q,k-f*I)ŋK֧4lx:p='gPu%πM<Ľ9xlyޟv2OB$1H:JT(
Jpѣ#=}ŸQaN=;dy)V]׋_">U׫XԗaB"i̒Β&~|.f54hW[cbl[|rT'xa~>Qj2^=[UzfSbCO(b"ҍrs0-X,GFnFyW	-կհ]am+Nkxo3FCqfMyǕ4RriṌ1+];+(ADz%t刼-=PK   dO\4n  g.  ,   org/mozilla/javascript/xmlimpl/XMLCtor.classZ|Օ3/a1B	 & 0@	2ad23|aUl}RGZU|TݭvVڮ}tvU}&$o#_{s΍| ҃]NxkNwH4sQp[0JF@XHck;.
tsQ$	#~FiN4c4UQGC4X;Dtι	ZWX?+Sx0*g
((FG1M'd2)¬cPqo(anLz$`zN6czxސEѰiSiju¨`OTo	z$֕M0	aCNr0s'#hb) oI&iDba}sp[!kѓ<׆1M%SiMƻq2+JBI"u;⡤5QCpNV'h\q-s҃uaX{TXҴ؝Ƕ>}9$e}%j:1GZNvw^+O7lT"
vFhۖb)=٣/^B둾MFߦxw7ĭEҪa
1땄_U."`wGg f
	]y	/`p6DWz0Lv;zt95yE80׌VV4jAùh#&5nbydp>B"fduU
"PFXI虩b0xCe!
 5	|AH!م0eDX/\5TӍq
	l<͛MNƲUV䃔=Ch݅љx4vf
#t᫄ə@4
FR;Bᄱw.ƥw.Sdx]WI|Wpp5.3T$-%<Nc2w^ CT0jRq-GXQ;§Ν7}W
ƞu.Xꨝ/no{[q{>X/2@>x;z;~{@l~
V63#Ni}PCb~#Gu6E&T=x)T&X1v/?i-짃zO?zp
\Eܥ]j8,5S>m\Xf<ʼDx?7^&%$<t9o~pG	G\~4b"K]C6/5ԫ{	ą8sz$O;o70)YaTA5.ì7Lkq3mʅ_kG{
ug:΁Ee`Y>h-p{20	
;
&4':?eI_[`Ǥa3ٛAem~j>"8y9@O$8DJۧ>W9k`|Q!QDMYN<RJ&F m.Lvc!yEFNW䰅sbFp5)-(zxeƅg1h	pAXnV2Q9Eo￀XOB)G;Qt'Fi2/9!NiFSEER~/Y+blp2ŦyNsDY`'f7whlltoΥ%ns\1aPِg!VAYi7Gf6BAh[HS%8R!\U=kV;Gm>zdAwV͂>jbx.XӘʼ|pK=T9!Ly-W$&^ΗO]=S;?3s
}3$M,J6VPYph`BYKSxO2$W
Csv63=y鄅c<GZ<T `@6ma.[L5
Mxo1߽(5piQY[d|ɫUggLʋG9id]nQ o[qHq
{pԋpER*RU{K
y/犯J%U.iݪk"}]ÝJpjFk5ܭvtTۍ"pjI5UmxVEkMڗb,+ 놷gI0gU\=)*[uF9mǷ$p=opٟ-Nxy@,ND.i+.3_,6j$v6vwe\3*P@h:Nbf`8>)T]%U߃^e`j
YRG0zV/\Ϡ_S݇1O(- &0Q
5+
MsČt2QTK4JuϮJ_JrɉBx cߤ8U4xopf_3^^jeZÉ,MiZ4Cʹ=Vʳ%'8լERجhӥbY+I"(3yjY[PUh@a]خtWapW*H>x1J_3{wA|љ)4x1-FջNcTtZ#4<K+mjRaY.w:{^h%˶UE|(Mf
YLI&3$#&J2e%R:35/F
ZZHPhbDmuR^[.wT/w;pv:;285˪Wf,d)69~lTgәf<3j3x\#LeciLUB4ddv}w;Ħ<7:wGs#W~`Nݛ
-]|~7|K{܏:Ar"rg8D`y9E\d]~X?j<5Η bw@Ay%/V[_~:Nb'6wVo~8=99|qҫ3yuѿ:\Z^?JWSLrۅ?E#hhS=1Z:4lbc/} ~ GS1#8KiNJlCg:c/:x#8"l_k.X7\^Vz$[4eo7o W[u~o}.︠Yoa}#w8}רڶ ],]}nnTn'KW}P%.}7+)f)ݢ^ݦĳLJ\΋J-dqw{=,NRbQ~=yzy~J:5~	x2~Un?{>^ۻ\`/s.?*ˇ|O\~קOp{ꇺu*idjW)
u4<L(PPP/HSU~_Aog
~~Gm(YX]}ve\g4î`iTjUk|s2ѢDD(mfVf2t4I}G-Z o@^,@nU?V]	SU^m\ V&
55Ub*@~~(k( G,PH*
uJT^`i3,PZfYXJ-P*z;^k0ǶOۚj|`a}:&~bS~>O:Ka~XH┎
̈i^et@DsݓѝczbjeWgDt؟ݹ\2"6< m性HŻ}Cጙ'-(=Te'%)an:f=.wbC~f:.wb7~wNӋoc@.ol؟>.r'_3=8NlP}[nz
2&K u/k?Jx]}4;Bvs&qLz+,ӮW T̬<st9z
] :8'.+ˤoMֹ$O^M/<&;2j(Q0pt*BM7MMS$knO3e2(3CbLjd44442LI?62L14)p?6oiKշ9}u-m<VIPbLi^ "A!-@1텃:)fEYREJVRm.j<튬ڮj!f~ȅt=o PK   dO\   j     module-info.class}N@B[@EG؆LLɋ׵f%Pa#NdI{0AׇGh&[|WCh<MsBS37}(UXPGh'^c-i̾D&lmB1kwy&~%Yn}tU# X.^],&WN	7)>_PK   dO\              META-INF/services/ PK   dO\-   -   6   META-INF/services/org.mozilla.javascript.xml.XMLLoader/JͯIJ,K,N.,(ѫ-ыOLI- PK   dO\           	          A    META-INF/PK   dO\4㿎r                 )   META-INF/MANIFEST.MFPK   dO\                     A   org/PK   dO\                     A   org/mozilla/PK   dO\                     A  org/mozilla/javascript/PK   dO\                     AT  org/mozilla/javascript/xmlimpl/PK   dO\{ʘa  1  2             org/mozilla/javascript/xmlimpl/XMLLoaderImpl.classPK   dO\8  E
  7           D  org/mozilla/javascript/xmlimpl/XmlNode$Namespaces.classPK   dO\D{  gR  (           	  org/mozilla/javascript/xmlimpl/XML.classPK   dO\X[  o  5           (  org/mozilla/javascript/xmlimpl/XmlNode$Filter$5.classPK   dO\T3	    2           *  org/mozilla/javascript/xmlimpl/XmlNode$QName.classPK   dO\u  
  9           4  org/mozilla/javascript/xmlimpl/XmlNode$InternalList.classPK   dO\QE    3           Q9  org/mozilla/javascript/xmlimpl/XmlNode$Filter.classPK   dO\uh    6           ;  org/mozilla/javascript/xmlimpl/XmlNode$Namespace.classPK   dO\5Hj  I  ,           A  org/mozilla/javascript/xmlimpl/XmlNode.classPK   dO\;8    C           W`  org/mozilla/javascript/xmlimpl/XmlNode$XmlNodeUserDataHandler.classPK   dO\T,(  5b  2           b  org/mozilla/javascript/xmlimpl/XMLObjectImpl.classPK   dO\eo    5           ً  org/mozilla/javascript/xmlimpl/XmlNode$Filter$3.classPK   dO\K/  E  ,             org/mozilla/javascript/xmlimpl/XMLList.classPK   dO\u%  -O  /           ԭ  org/mozilla/javascript/xmlimpl/XMLLibImpl.classPK   dO\5۶  -  ,           F  org/mozilla/javascript/xmlimpl/XMLName.classPK   dO\R  =  1              org/mozilla/javascript/xmlimpl/XmlProcessor.classPK   dO\KŞ    5           T  org/mozilla/javascript/xmlimpl/XmlNode$Filter$2.classPK   dO\ڡ    5           E  org/mozilla/javascript/xmlimpl/XmlNode$Filter$1.classPK   dO\c    F           9 org/mozilla/javascript/xmlimpl/XmlProcessor$RhinoSAXErrorHandler.classPK   dO\3    5           ] org/mozilla/javascript/xmlimpl/XmlNode$Filter$4.classPK   dO\i  F(  .           N org/mozilla/javascript/xmlimpl/Namespace.classPK   dO\R    1           ; org/mozilla/javascript/xmlimpl/XMLWithScope.classPK   dO\YKk  @,  *           | org/mozilla/javascript/xmlimpl/QName.classPK   dO\4n  g.  ,           / org/mozilla/javascript/xmlimpl/XMLCtor.classPK   dO\   j             IA module-info.classPK   dO\                     AVB META-INF/services/PK   dO\-   -   6           B META-INF/services/org.mozilla.javascript.xml.XMLLoaderPK    ! ! l  	C   PK   dO\           	   META-INF/ PK   dO\4㿎r         META-INF/MANIFEST.MFMLK-.
K-*ϳR03-IM+I,
"KZbHdZ)We$*edc1#/%-4/,44J!J_?=$4I/9?W?Sb>/ PK   dO\              org/ PK   dO\              org/mozilla/ PK   dO\              org/mozilla/classfile/ PK   dO\(w3?  
  ,   org/mozilla/classfile/FieldOrMethodRef.classSKO@v$8Є
B쐸Q%$$  9$&S=zzJM+Pry|Ͽ?<ZdCktfܫ5!4 8bHhưq]ˬV}⸶^k}kXƦwl3m$aCqkpru:wU
Y
#=Řq
@_u,͐Wz[_Si6] G)hr4YnZUW4,j9|~<3hu߼,`P+p!DyH0$|r:I~c!quZ5{o^`%i6B'
4ONȑPڐfI]!9f|3.TEX"m|st!NRˑ0O/FxaBP$q02YB0Ir!LMC

gzӢ%Y.F"Ub;e%9*--#n	|EdQuX7D,:'Ui-/MB"DT=%*J`p
C=3\٘] Xԗh49miY%A(
$M"8R(2W۫PK   dO\C  
  &   org/mozilla/classfile/SuperBlock.classVS.҂[&lI8;]EZiWY6LC;Ӈ%qɋ_vēf}럐LESfG{/s cxBy?Xr)Z[vF&AvN00:g/L,ēЮy׾gmoy]*'\
/+|8`!38l~qU!z%羂*lgE0V Α$
p%эgivжXH9ZH'q'Z-t*
vkELbЂUhӗ)1(.W|TxƭkN!,$2r!ם:sÐI#puR֪N+$m?(1<3S.$\<8"baP~Je}N{k_.Xпh\v`^qS
]kǨ%ԧM!sX
8R;s8<@Ǔ%K*d3tE\Uثϋvx
Wnr!׶B;0yl/isn+KN5-WW\X7=a}	
C3]$l's[8.oɬFzbFsYWm2d	FmGxίҊ>ҤY~((փ +Xю
]WXanYb	dr	/uT8iY]fIwtY%>ͬ_5`yQZ\vu	WRO[,ts`׻:[
xްlbCNW=MPaݫb.g9Йd@yfm}
,0}Eeᗜl}o\9{%m &s_GS^#Wנ0Iꯈ&rn#
tz?Kl c!ep=9C's_?GNzx袭#|"ώqwc^yB6n$&)MS)J?U`#qLk#ƅb:bGc:!D:qSaÃ>3׊5#x[&i&z>{ѭ	CtG^WqxGxVΏmҟ%n1Kpf8eʽT,+Z#Z7mkX"1t$7'ŋ8˯<.z	W2^d/1X+pO)"?!nηP&XHIum>oHuxT&KrJ}_#ԑRV;dp'[n

,ܫp
w&h:"@H=#e
d7u$e~='jT!SG07^chV+O3Ŝ>fa
s1Cq
:>{$fPz3괺tZOYSʸ>!UQE0!3FdEƜ	1|+%7GM̀uUع
GF	.Bt+'?ӃOGAEJ2\`v Fݙ
|9{/K-vBXR$|!NdMwi
v^w	_mW\^
#>wR!fUfZ:rz#hڑӻ#eNG24_0F! B PK   dO\     +   org/mozilla/classfile/ClassFileMethod.classTrA=,JB.Dc4	,&$F%	TQT|ȋ,dS\Rˠ&gUR|Q=+U }Lw?_x|>U4(2Lh3'f3ųd0*"n@cXlL}n5F0:03{	2qʠZo4MBV%ri:ZU+1
BMd98;57a*@p2@\Li!7zGkW]N.|Gna^m
7mR8BoReQ*D%H1YMaY}zƠ'qoPԡٝ\i U$pjfٴrC]1mKaX.knQ@KeuRN@z&OS3t%yuF+-\RV
nй]QZⴺsS%*ΆŒ8CNi[b]b)ȅ5Z"bMO'vRZZ\i'];Z8*}`HH|
LOJD>"3ܣ2C
<D*ô#X۬ 'h||'/qR=Ħ[ae:"'Ԝtq9O*R1E<B>9('f0뀷;OYĩ)bγKPsئӊI*[W[%!TAgq	9rbAy :>s7AS(\	^-Xs: zPK   dO\hce    3   org/mozilla/classfile/ClassFileWriter$MHandle.classToEn̦8q[RM|/hڒ%i+J%0qxn;i՞z ץP{ɡHH61o~ޛ?~+c. 	FyⒸ*d[1ON1dX1Ql \wzQzSkӤ]]%Ñ_$A(f>r5_ֳܳ*tIVѯ_tvmƎx{l+'D_^Y^P67YH*:`AƵ+Q^#bY6-eWQ)+N<Vj#	y^Vޜ]mNCu\_ol0q\i72C&T0V]
Vö(fS	PH
"eÁPH	"`lj}y/`'LԓS>_
eJ3h pIOH+WW^<
/]_ۄͱ
7K5S7s>]l3Ѡ툴3^J7+	A+U ov,S9KtqouvHq~st댯;c?jo9zſD?
5~8AB
k	5%kM64͆^!$yqy6;eF5sq^R{{O'Vb4Ȯf6Aj9-LpE~e~U~G=qA?yZEbؖ/	0L/4aMӪ_h&ČJT:NLru0NZ7GoSqۀA
4N7`fЁQoP,(Ibޥ#D~VPi4>* PK   dO\q    :   org/mozilla/classfile/ClassFileWriter$BootstrapEntry.classToGLL	R#!
b~$qIRTR۵}/һ5?k_xPTU?=;pNݙٗopc10Ŷ8pDd;VqAiHϓ֢+{eiS}(1GMqGnoZ
I!/ڮ-/3D2urц״Z%$rHd_#<77<aHaq1)2L|܅Dbɖ\n!3*^zkqJsg80ՑUW)1LVfׄϑf8@x;Ru-+8ő1Eni;y*sG8Uj-2eĠ%Bx:mgN9zm ]e۵V;+ꪶe!u꿷lzdT(CO2a=h3Ր
>G>Tlr7dahM/gn_->(#)9*Y|
K!1B=ܨV@.yQu],}IOL4!FH$C+ܧH;C.,8/lK\*ÜzOr1yc7JՕ))&U!<	S:Q&Wg{1D̼
t0f3]5=\1M3d{'/0K4$΢Bh%.U#z;2880r|IPhbjcQXx<VC#<z0Iw4I¡nQWthGhrh g\eυ yG!aaXkbhu
_2%ɐ~U:K$ؿPK   dO\,i  n  D   org/mozilla/classfile/ClassFileWriter$ClassFileFormatException.classQ.A=1xK҂L$XxueURU#$V7XI,|%vH$6}=9[}^,b,&4т,aD0n7W\3&dVH蟩|vU4[
J([csHH8w"Tfov/%IDTqJMBGhU5dKs抐)CI(T[@]q1S15;V*[s9QO~Bn4lM&o uK:n0LJҦ#q*ڐ]򌐜k'"s.;7K5Rvb4B7z=џ`0C4/`<WPK   dO\U&  I  9   org/mozilla/classfile/ClassFileWriter$StackMapTable.class<y|T7yI&˄IH$0` f"Ԛ!3@	k(ƺW%Fq[.URۺZmE6sߛI?;s=n|黽 0I9`|4ztcچPK˪Tx$6*];?\Z1f#^W2d?09x,HwMPWMrj%4Weh֮ma0x1fr{MљdA6x` pl`PCyhlme}K <Z!AEALIuD?Ă"@0%1XPB9("_nXah$ud>-$'r9lqP 6	#PC+Ab[0Ě|>͂n/ό#3ZWĐLd3Qh+*F,f[0,8#_'A̃ʄFOBke}S(*bDͰ#qI2tUd`즰N%Zp*,c?YF4gKm9>z^=൒[j#h+PYj[i3COp:~ѦP|i}khRMqdW\<[U<Vߴl9H+Sc!lA:8}Ì$[З<(PSؖ2F ]#6.\%J
X^
EIZό-ġA$ߖȢhXq(z6F$1[5#gYp6YfzdC5Yx5a?ׂ|o*HyXZ{&t8O7$ˈ%.Amu],b.9\aOczc3z*Tp3ׇ QHڂkȭQBƱp
2XgMF&[,&Gڶ.22@AmK࢙*pe&²wZd|'U6DbƉp)LQGYpAhZi<)M{,8A--xrKjQI)Yuuuyá݂G5Ӻ{1M1R14ς_
5{)'VUO9τ'IOY4<c4Hm2ы^v\d"y9xH(7Ýe
/S{W+
%}6Z;r!Dַ0AQ(m~K(k7VŪze;>H,MȆLe->BP	U>'a~ApXǈU!7H҂8:i|e|z}҂+IQȤ($͎Xo4inpֿ !ZLk6d$mJE g>lL:.F[[P?ZLc:d`K`n1nGcgqR,fDP,N
9Z2,ISۀIAX6b(OX\HjKO/:avcV@*ѧ^
-VDsʂ++Ϟu'WLQ9dl.NVGgfb=NsOXIOf⡣G]Fba} b߾{N}!06?O1l&H-,69ѕ'ɔYl
;eOUB1l|XNSA/48%rաR<ͰL6u2ea29;(HUXl.~ZĪq#e s|zק,g%ƻCSNT_m@)2dWlNli]"'-
gn8bgQLi5NC\B:b5$UJ2]Ǒ	EVYl5YQ[MVV[񙸷;hX#kBn͔WFVN\fb!X&3%nVhqZD@'W;"z=pj1v.hÉ%>3boP?"mYmlưqrXbpjlC9G3d;]a$5
beWYjZнdH8<®uĺZB`)lTĤ3vŶ,즙ufiŶ[p
49Dmx`Sƶ'0imhp:Ѯh$|c=rn;,݉C,M)
\FDr~FBKІJgo=c{61~=@04	#bF]hY
{Ps{b
ݹD\jhd+raG#Vie}SdAkJܣjiI(V/[)?l)SPvLoMG(ג{JnZs!҂YנJΞL*&wdDŉ5EZZK:;9QAT%EfDh\زymj@7	L
!emy_MM$Z|")r}R
čr\5E6ؙ ue-# e#]tf2HFj֒M:)#rJ&IdM,7dhGo8gSd]ԻxqX{iFLFbcp^Ӛv83Dr1sO,o9bU~\:T7r7HCN<f*f
rᑧjhw99I2o^'!>Z.2r̐CCÑ5)9Y{}b{,{F!H/	CL4KU5VȀQ(1ԏ.OhPDB	e0
fyZRʊj
ᢦhhe(	FB``N[	-aP0;Fx&-,bEu&Fھ:PI+*M!c<&+:	Eұn(=JPĕɘ*1;MgDFj1/­9іoR)91]}E(fPVE. &"-\$x"+hvgx?ƚB'uW>t g'ccy ñ{k7Z=`{ 5`@k.=PH?gҟ(Hз4}'껠@wp}7wX
]0Eɱg	S/dIG&S( F4%́#>c~`|iI|ٵ)@-zyPkoV3*Kj0qY~O+yWmRX[׃vELILދ90XFA0@(DVrdi&UH̞
Ur=5F#X~Fs
yvFbطh2
ڲ*+:N+NPdx܂0'sNPt䃏ey{G B.p [߆lPǿb0Zflv 
9"PXjbЅiWĶda(@rvV> -ql҆,[Nwګߖ2nvz+4Xn6@JV2IAnrn&*Fmڼun2yZ
om.t|fj t	3042thpir`W5Z*g$v$20NX7ȂtT\֥
cp.tfo]FY:8hGM41OqR"厛=7|~f6Aͧؐ0V#M:c,(8x0&B#c4&K&\ٸq|VF)ե͎aL^6@FqM
!Ðά)ao4Eka:SqVX0/S*Z4ZzL/,<2Sƕ~s㏩{mLa ElkAfO2c.,62NzX")"bHqDI:.
:Q
-P[ͻZ{sEVk<̋;҅J055t|.j׮Gv>͇F0ŧ%?E.$^wP/		el9[	>Dpqv,{xtl'"	퐓@;`Oj'\<	<BqUN>a7-ڤwIB))-93p-t'd
ì$;`՛E\CB gJFl4c؈Aq#gpq\lv86΃ǌa}ڸ^7.+'W2qω5lq-m\7ӌX7sr|^c"Cyb[A{4vv؛-9p{[9Z.:Kb[9s}Ɇpo=fd	nؕ2g̕m٪w{B@LmtB
(yr#氙A)T8#
(9ۍ!:IaL|4iaL],rg ~;3Z2p_'%Xd[k׭ qk@.\8oHqL3v,N8hsv.wT"[R hS/GcR\NU)~90֫!|H 	w0ƕIm/	0<0Igh5ԥ<m0u8nt^xlm0ڳ%7'{W%j2\g+Ԁh_SVtEz}μ;3Fʅy)١dDK~HN>Ŧz{)W_Ơc!̪	4_(k_*ىU0=K36~(QٕW&_8L$	
j2̦|)4E?l~N˼>σm*"R(W_B-y[&3
jFwg
HNȸmS  	sy`Z=a}Phl>Sp|jg0 >~<\d 7/ό_*g·{e|A#nBc?+5`x`dsClq-4R/p*[5v>٥`qvq^ lWx{c\Axyˋ|R+A>TÔ<[1Q8elqxrpa*@q;~K:=RKgW` 4V
WQ@e[vca0aXإ0}Te#a&~@L籏fa(N@ⅹ2@[J8c*d!]>ܕkkvS؟dV)?aU\>yW9N!?Cw?B`:.'cI#w0\RaHFS1}/g^F_!%	eplAa3i>	,$CwJU``GJmpb	wϿhesz0R;J)Me˵\Jɓo^
|຺bǫܴu8drCTT&1hتx/AX)zl;bO<Dr(W;eGRy)NqiKξp'wܳ1,܄.iKX>ľh,g[EܫU6,)˱Dm#ys?`qt}=˱܂徤W^[z(ˏQNmUB軠K|=VgU}Mֆ<.6܄ZHBߵlӦL9M_ʤ,Jp	)OR1$t+p
4:ڙѦuSv}u6-l_.~f
vbخWvi
`7e}wJmӦayaYi#r
{-!L	Iajj7u;
"Ԅẋ0[(-!T,#L2im[ք֑֞z} v.,>k
u%l	Z60+u/JHO1*ut?JRl|	IXƔٸtz˼v{v0C
f2}IMwF;`/KEǗ=,vΦoIvGgwnsIF!ӗAl,QvtvV2IKʲYlYYV?'٦Y	ǒ]ql1'3Nb0!SmL1gqz
>նaiҪٜi-N82ۭ9!408@9wD3f=ș'7l9_+r}¼ΗSv؃܀g'֟R_mg	IHy<q#'|~+OGmAΖ}glTU
;?SC3SU'qcR=שu_ԕU]W:~שFYV/{ԫ/sM7-]uH?VQ_W(BϊE,OO~--E`ôqb6Qjb6]֖1ڏD-"Z'.bv!fhmDqXEcdSTiOjyqX*N˴rb8]\h߈Z"OD~XOkYQMzhuzh#"׉3L<q~8GTowG")IC\V\).տWUG\mdk\q1H\g덱$n4fcɘ'+Vcň[m5bE4]nqqh3wO
ܧߋ Wyxg3W<=TQ^.:b/O$_'gO3jK~x,?/%[#^Wx5\;QZowwx&~{~XA(⏂EHx'"G|*ş gQ,>bB/'*7Q+ukVC4_
Z[l‸WC)qX$WLoLecf	LY(0Q}/^l{Q
vMO5o+qOjö@R`{
??!
rߚil۵YbykYbxM}iF t#c5>vevXby#ؚ
gl3w}UX`cy;&_||dpօ>~r.ewߩ݃Rj"d)NpB|?mȁ<>E)!G[U:e' W2+`-]a~q5LS4@EZx+i'9b6&:by&pJzӾDMғr3pc`33 ܌.'ZC	n˳ =&uanճ7}TY)N2`Ɔӧ݃9 Hx`8n/$߷{6) {@qԐ`KI@@S2Ѭ-ƜS݆@^;NǤ˷Cv+p.; N;qϤ$!?o/-$%
g()f.2!`́q=-)Sy&HS =N#01$$pzyش2j1iM:aSz)cɈE(ϭbT= .VJ5dKWUN37yno'i87'MXNXx	d̶'L
{gCO9#} P~[o9ǜds{F+0aCR*YssR)*8fOt?ޡs
tEu
9
I:p	ɰ85L9Z]o99v`LyLH:,)+%
#曳9Q''@y0ڬt-;
1.qc\cFbZ]\HsѹC>u:y83>gfHY y98oaoW\bnf5L5Oq
/04]%4K,r/[hWz]0OXvgB jt-
f][t	[!HW֢%gF\dE.E)PSkLw^\)$w:Y(b{3ˋ>:k14I:bWÉ3/?ÐzǬaL~:Huſq~U<@>AمzMl/A	\$_Dr?JmJu&fZZ^.<4E<jpޫAӻ6)r4
c (ybئE߈;*%JFRlolveAwS._A`siLm3hJH]årK})lo`l'tÆf<yas"<G½&[n/rkLD0ot[t{O4ȯW5yCݮq]P577oBoA#̭0%-0μ6iyNXܞb5f13̟FgWfA|7GqxO'k8bȸ2󘯰T,˼פD͝(-
j dҷ4\zD
,y>]O6:8PaTx[ɑ(2pvnHp, ,
@zd;F}]`:O,q2	_'V8q/ڌv7zF3MrB7,.WKMn߫(ʎ~Dum0{:'ar`-Si	-᳤Xs+o RvT'zqB~M$.Pjg-V}D~8'&

y'DX!IV$ octERi
hg.
;r۩!0cJp;SXaII"En,g]$Mt:bIg~X^fI!ďb$P#(F1aG{\>twuj"j[+?¼uGWI<I3\d-Y#buDE{9O%OrHD8%t-PR@VoRqJA>~ֳR^=<Gg8HsA-HϳluA3+	yٽP)!$y'܇ю,(a
03M'+cB
 L);L߀-;N)h,NU(SiPK   dO\1cC  +  (   org/mozilla/classfile/ConstantPool.classZ|TWNK$@+IR H %BK&P&$2I	U\mZ_!ҮZںZgZsW]GuwUwd~3sw??	 W{(ˀۄ^[uhnK-x2nRpUUo3S㉺
A?1	&J0EP_@`<u'ýD%NGSB Hœ}.mp@0j" 'qSgw	}Ч%zzs3L̔RmSY&fˤ0;QibNcV<[MGenY`dt06,L,F1ݯxV>mcCZ鐉0j,#dO쀂j+LJ>NhWL\eblZXzWX
/tH-^Rv5Uрk4h11:
(GݩQPզVVOךhF%Gb
*=MDKcl4q6e=RtO7E#-
edi?ڱ4OV&qtҖFaE'R'D&nĎ^6һpיmTo$}4*ۢ2m1ZJG?DRRɾu]b~qBI==f
AV6Tw	KoZ덎$bAJ614]:SCi#c$m
FJ9`b'poS~gKt(ڝͷNp=Լ-^?c9hҏqwTˢw{cx_Cl11wxWo7 Aa$wn6Z|5L_N,e5"0֑eʲ_xB%%7D=08MH[XԚSҒZ,L$b}ڡX2@wl0O2C'
X>l#;Og]hx,4I~<@~hn	OȈ{d__:mY<Get0'S=ܰ)>(MGC'L|w-2^0)dwot]-3&>1TWֶԇ/=#Լx߼ᜳd:=gĵb_%0-"WM|M@/|554 ˿aMI﷎Dri[La_}P2#p^
Ū=7Mn&{xV_[ɆC?L%B7BQ?^OE)TX&x1?M~쐎/h6K9֒ɾ_
^ߤ'e3?̝$(B?ׄp(Gg'+=gs&,<)z7sX}SR%"=a(C<耯.r]bf.OLΞ#~$УeK{Gdm{d6>SsTPW&xP 7a)`ff)o/SrK,Q;MwBuY)!zAȼLϑ!sBqS/f7eUd\Pa_jol(]/-nݼݝ[kkvwGZG/M붱a_RSª|i쯔gbl. O67Y.`c*DOƬ/խj`S;&q:ĳ_aѩ]-]ּaҹjYV{}q-]KVf#tpKh^cXp>+&NwN`ӱQ*/Xn~<q+(a0өTs̅;bjv͋ꑙ:g]%goV[ dڞk=(XVu
ILr=X)ֱR]2/USɢm$a	/i"^=1)׼CNa֘7ƹBAZEVI`;cFjnHup)QB!Y-}`R=OMuVf-^n,%i{
3S{G/-(jXfMt-VH%ƈ0ls0}IB9_(Jv:E,kaќQ21SM/r8ƥOuOsst81lǸJxsy__|xE/vbTy^!!.q1(r<sxs+xR'go@^8^_uu0CFK8sHTy;N$cY<X<>!IT*|w!I,yJ߫/6r7'PJu
6CA݅0Qj)"jwYJoDEyZUMJ"gP`45ϒX4VQEyyWU4Q
>y	2gxy^Mk$ro^kȗ9|vCo$4[
HV4nz}
E/pVb֜4n-׻lNgCx`Hhn^m`MZH"rVRH-de^90>YA]Ic

5hErnPרFJX
ou-lo,;CҘd^YX[vcr=Z^ҍ9I7RՔt6Y--iFz߭Q-Fƞe7Yz_scلJlF-ڙQ-yHwkN|-%rhcFۣuxl8
3Sψ
$*W1m
yLOrXfV,+%5?;Qm;;q-vrp3`C9_ŸU5kk."IBCҡ[ ;>6T?CG0%~eI٤2&}3two8}n=^+7epIgR&E3xwGBz(Gd|)<~nVVj/ODta/LI6#LO`#<Y^I%dtL
N
tt^W˯r)SȉUUtg+q>DE(ԣ6xy6;!晻ZJm`N쯥}(Y#ن/̒:++zl*Oz4GPzŇcz;8LF>a}2p{v8U/L1q+Ooކ+vw0!0Gj%7PP6Q!/alqgNN[qyjTڢSk)֫`LaW&qF54,E_縘H-
IEbƦJ1^}\]w=VBXR/6!aOG+3*oUYet|Uo
Bp7h,}G0+6}Dc$#ԏc}>?R]DH,]}DGA~Am-{gOHSkν'hnCGA$|lPV0>āK*苒eΊ=LR§1@gQcPЮO0=>azG(bx1g'kL40))'Sl?>ыF|I_V}WA3eAme"NG},>jd~oPQɸNmӳjSBz5t>M
$nRCR穷Oj;9'bY?"ynoPqy5jM.lPrtOoΣԼhgUo2_f6oӰa.{sװ.w
KSJ]أvn2v]|:l4*8n^F-+We]uLyzoePVoD&36kN
FX#+,?f,a
~oK6w7̩(~+^`|́t&wZˋ9C(MfE7<n"O1S*gZ{Rnm_|+~zGccKz/N<O⠧ml5ŹE;z4թ"+M}=YyRpU~<Jp]ST'sp>i)O{_STn2T7Mq`{4ke_e鲋" Ҫ
iDz:2"=H$DzM+"=B't쒑&f~ȆmA)$)?${mвYuE3)/P1]-"W*3Q!ƐɵS?͡6rasPAaKؙ>or-xeGi2\s
?.XQ5.PUu1(yPW'6j9zu5[*Fx|XΡ*z<QT)fyLݢ|	ީO^mq!jW=~?73?3Cq,G'LqM!DQDˌ-qjcS
Ա&%z̤SWFv7bǾ}T݀=>Iadg]/!.
瞺]0/JuQJrLUE:k#TJ
ڍI&sgVBGh2%G$*rLMnLV{ϒ[#-LP.
:ݥ=^ne|}p|1'Roo=5V|׮Tֺ7ړ}*gx.a(Sq V@Mj0n찾΅(i\!Yxﱭ*:KFgɥi}qm!oI,WgoF&?PK   dO\-	  z  $   org/mozilla/classfile/ByteCode.class}ux9@ZQPP*v.+	%
I-]qwn\www{}ϙٙ9o7{gC{83ET:NNS.ΐ%ŪbǼ-Omh&Nc+WsY[{{h֪ܶݭ9L3+hgǢbGwc}qko|#NH4SdRD~70Azڎ	].=Q]z"d5o/N
mqkL!WەE*N&0t՞!7Gi_	Gb%DJ.N[qm9!d8wD@{R@;2&¹'pmm6w	
hshs
hsƭw;7N@UP"x(h	T_zP4$}Mٸ@S<@Cn.vSCE_ڮzBCHh_4?Bxh?_ׅnh?6?7)}ۙ8dF͐3i(d	!`.d#6L:e8}Pfb8VY23:.).tQ+ЙkQ=}WNuu¯gEsh_j_~
k_i_/~Jcn߯;߯;?ojk߯߯i*^ub%ڮxVe޸\qn%hw:ew&^}3^7m-hx=ӫon]ݔ:ږs	-N}+^+>	~+dXi
5<d5<l4V9-Ga{B
IvҸ*yڇyF/8V9y_j"^3x}5
X4:",OY5զiW6M
e6n']|&5g@2/d±KaJ!R]*zݥBn FݥBnFj3\kd
4&:n<iO6
uM5n6_ط#eQ܉g7l";4x{3n/F{l62K~}T$ڼl&fDzݢu-q*]ERxކt-[c༥M|_ru' lnyżI(~`OI**
|x|ωl<RIA}2xvCm7פx&H|s.Qoַ,R|s,]CgGkfv4WhYeT^p]s	[bB`qO~W=mqa7Р1xVpmgv勳124Rlo,v>ې
#^*sZZm:m`8r*qw9C#Ca#Gǐ' HD	"B>>|:|y4<<>||6y\EO Wɓs)s/#8Jqr%.y:\ON
&g,#n"τg//%__Nn&_	ɳ<GW|5|
^Dגדoo$L||;N]{{$??L~~8	ISggϓ__$L~~:
x9y
^M^%ד7ɛ-V6x;yM%o߂&K~~!#cASOß!_D2WᯑM[o!k>}}?"	?A%+ߐ{?"A'/aB&p/Ly/p2_(/A _B/P_(/A _B/P_(/A _B/P_(/A _B/P_(/A _B/P_(/A _B/P_(/A _B/P_(/A _B/P_(/A _B/P_(/A eOݏVu?ZEh5Y5dݏ֒u?ZGh=Y
d?7uDssnޭ=ֻzX֋/dNTlNG6-ۅٍduYPK   dO\~O  .  )   org/mozilla/classfile/ConstantEntry.classTMOQ=N;m,-P,H;T?k	jĐ8-c;8vJčİ!h"'p{AP}ws_ ND<2$^BKڊ75\\Ka9O:A0Z9l7LS˗L^mz~ʶf9ӖS[eժfϰ.aSgwjU.𪨂UABLF8{hn0+Z2e/ꂸhݯ`xpPadӶDx^
`xwYggSܐaM\mXO+Uǰ-?UoTv%W$W%4r\}
,0d33g\+sְK^Mj4sA%bЗ
]\;WuiUCpnJCp8apFFOG+=);E8"!"FS򽴏oxh]5RcR5m'&R
6Nk?dZ Q u@(b3LPvcAx/g&<#<V<=P#k4`\4iz&?eV%0J%{#j\ydstmVK1zKHC'kDB	mbt)"N.H3FBI 
'Eb#0rxDnPRnBTv8AJv3M(@gdJyݐ
dT}ZPK   dO\F  c  /   org/mozilla/classfile/ExceptionTableEntry.classQMo@}1!+=TU/H9/f-vd/QSRRQUg]rȡvy7?}
.\/P@p"".+B񝊔yO2P.PGu?+EjWJ`xh*Z#ʤ#3s	4bjV0Zd{zE2=c@p9,8!zhҟAbm"i$3CPHT)zKpӽq=Z&IIBA٦d_+2⋆j\eī-F_Ts[-G~٢v]QA5QEc;uyG	]f:8]sF=aS0,7PK   dO\{  a  *   org/mozilla/classfile/ClassFileField.classSNQ]gze
roMPn⅋XP$LqphI;	_⋉Dd
s:k{7  
:B$Wf1K'{V/%]mGрh1˕Qv3[pjh;VvMuurtۭnGVoyIG![o=t\"
t;AU:N$׭{5ת23ySG-靖dJG*9#WYIuaŘ?}Z]57Wr"Xmc%мaўU22-l[}2辰YtzA ZsԽh@(;)ZE2e|;YZۏZ'+
),y,|lU}'zCfUmbrR|䟥Lʇ)NFC+&-Pߧ}[6/D52>CsD9F	#pGunxQlBI2A$BS<%&!
bΗm2!5tK
d"Zx!I)LƵ|1煪H/"y_D'"쉔}w}9?葾]/\"Qx3|GuQ<U$*+QO+փ^VOO0-14UXy
jZvcxieE>ԥvq1ai ~ B%@и]U3[
PK   dO\|~    $   org/mozilla/classfile/TypeInfo.classW	`&{dwBJ"rA*J@	.	 %$Y쬻BR֪jk+EJ[6m!G[km=zjim?3,Ivw|{pC\2*<J(ڬ]ƵDwmkf=bJ.%b	u.`xXFF׸4kNwzm{_R%PeB	s&^h$Ҧ0WF\EbNBqExԒ63KtW` NYojlULk[7۵n"(X>Vk}qC
T
1afjBo2<z6Hl:6
zoHugzٴ-'͘Pp2ےm%$R>Tiqy3QUt,'+!1Qb.q"ңLFeuT(	&Pb!SE`6EФW/XtC8F߉Ae\KTt99eJh:9,k6`F+L3O/ct:֝:"aZ81ªTqBeKѭ(u(pa"fez*b+9bbVk$\o{5bBڱV:az~X8q>q+ѣFe)PQ$b67:rb{-:#1g$t2o2:TL# A,a* .̚aĘq#ѭ`GL<2	QbZ<vd
ËU@c唞[!,hldT\"2Q2R"D2I(l62hȸTB5ճ>rQ>Ŭ'elȚ zU3xTO.;%HJUIK&DTIۑFWSZJHHN771In1荡Oy7xl}K:C22Zl3jW5Ozi.fa܈bԕʸMZz;{Kb#[YJ"[l[O]kCuZ<jioZٴFql6"[ѺvyIP.se9nYٽ%j5CM+6j3TkL ]aȤBF_%LojF
a:-tc|?# <CM춺F`<KZwS&q.k\gGRkWWZ7Erlb(DViIndX}HEv7`TzT7*+&3!Q~Fi)Sz"J`Wy5a%doSG퉲V[q8ڂ-;t|d;L^DsUL#WBCGg(L!:jI(Bs.W8-pr|~hf&qdzTb\ yCNbۍ$tqkj֍,ofU'*M.YC_IEtѢ3OA6SZrnQ6H-wV^k&ke,ͭ(ʵD\*>e#<S[t?c7kHIؕ}%4Ϧ%oi'Ѩm%V4x癔,~by)X1unSdE9t?o"z9=͡C9 9O~sZBZ}Q-fS0{tr6b_)ۊcDǃq#\poEc̶8`>E!GǷFgͩXcMIV|Gt*]ۋ;ݵnOirsrd3?Q,gaZ81s7)".K{68i#^lvI,o9wp}kwY/o9_ouޗ9x͹~rV8YU=YW0K\hN~*]q¸-^lq!/rOzoRJe]͉_5f]>2b2`y]Z/BEY
=[
_b혱J{<Rr|%Cb|oiάˬR.FvF9!}urPɡ<u"^jTlP$eyL׈uGP,pOnJp^Z`-=0yx}dy/N糛@fU"1I,LL~AiLR
N_,7svRw:Y?oYnhxz:/oV归"ʋ~+
9?Óx
'~NL+)e~Q>-G;PS<w#U$	~cV~kUj1GȍYR@&ȑr{9W6=Gl]eu=G]"]# 4IZ&x,?Lt$x
"(#rp0=)XΙzIVIY
_UEXA@k 3<$I~)K4xZ=u
`=lT`#]湈
s1Rfr6&xwt93T6OY w<ϯ0K(:r)%UEE9>
qNQ5qr`̞<^֗V9/Vsy)(eyn<bG'qzBwl?77i[U'N tKƚgFCULLLLSH͔[$Iؗ4!xXH6U;9[A=^DU Q%KSߡW(T`䯪:\]}&_?zKY`?9o^?Α
ymѷJ؂{-wUY=/
b`~fakZ"ž2y*,$T5h 2-:b$ts/Ku$7qrYQPK   dO\+HV    +   org/mozilla/classfile/ClassFileWriter.classܽ	|T?{Ϲ3s$@PMlaI		d3 *+U.TbU]RV[jkj[}νsgU9Ys{Ud "KPduڪ
UM[:V&_T6Q9xQ)#@C!ron]5
Uxm}ClxǦ#-*(-^k\-.XV
SDP4*[	]-ǡ\&AY-[$wr{[}U9U-zwzPOA^\^[C1M	P/K6Zav}ͦ<2qC kStv&3P}z}&ιϹ<&𡶪:K:4)Cɔx[kUXӪ:U`m-euUI
ʸxCA9bM֪Xfܪ2g'YZߴj\F
:h?knU5onnifu#d8W3u0:\PX<RPI5{x (XU>1Mb>fʺnPT[ϥS*Ҝ^%iMia[adC*6VǘFfHfs ˺jUܦ4/@:5bV5
6xvqt-EbKi8xMGӒ -uhi<AG?\c9V`Z7hEӺV:TM=*/++/^嵬 d!/@돨
6n
EUTT/
R;!E ICT<
A<:js֢a<6
4loyH@93
h7A'rI1XfQUXUS:N\:meNZ%g8t&8dδʙj5<ۡs 7|F
9t>[PD6~U}S]HbO:rC-Z[}S<|>7cUt(,R0ۦ¡+骄 BcBO3Q5?ôj5`)"MVkSwLbkjsq
cɭ2aMdnqt+*u<T3/I!bWZꛛt':\lkq~".:Xq2kϮZk֬UtC	pNU
~Њ8[05 =Ìgm}SUC	km4}ʪ
hCOpĒăzʡW`3<)6qeU7gz~YG;[,Ǡ5gD[`*P^qUơra7RJe 
M<0&$\skcU[t,Pj[CXMtE
ml[ "{ǡw=TQʦ|mCJ)5Iȡ?3!W9l؛+
v]
]7dSS>3
Yع⴦
>/CpKיꪧs}kuKg/c87iM5sh糏2!֚(0݉UVV]WP0mEMmE51LXMP
2չݤ+a ]>(2Iթ^+;D(/̮sTtwDXcSE/G}ڨ/z;O;D_GrŅ?Q8~}{Krj@G}sO(=:uU{#r	ƹb[@6Y38E1dq§iZJt(U51(rbŞ!;bhZ7UW-oKx-J3露	ȫA@/
M<ỊcUlN2fj#QQ9b:i4=# N?
#쀘㈹̞`O7$晱.2|QK3b	Sh߾Xk=*1؂Eq4(g<dGe	w"3~8ǉL0]MzBY,*Gdy<fO2mvyʾ}r1fI)sDXIJS'ߠV\[jה);[h_ۗh_yP1锿ֳ<AwOId#3	X;[9vbb5<oq<oq2Pӵ+.NMqzsHӘW`RR8jЅխ16&AqҩqؗxP#(=#}kaiTt5UrHRvhq#*jl&{lYP\aj'"#.W;0y[@*G\b7v~U+6pᵎ;C5빆~AP`OЧ=owKy#kyNE,>~sqbUq̷z
/jmo*ZK_4kE#{oZۼ&V(҂yh[hg@`0J,H;;]܉mKPÁX~s\'fOw;$9bOXڲFSq#8YAG<$Bh3禺44"QS=*˞tS\=zxų)"H%/pɋq(_;e
8ka[&P1fzѹxuwPպVkjc{TI]GG%f>6Ac5:ɇ:]G'xʸw}Pe*(RO7(>4P4<f77(aiM#>kP=
G|.-.A?YY^C+n>{ٙ/ckc5qTTUk;GsBkVsP8'dx8F7ə\aTCxu{}[@(hdag_VT԰u15k4"ͳ ˼OunF7󩽩;^~ͫ`Ëښx[?V'V֯*Z
ւ
9_
+r;FonLB"Xi΋y{qԥlh[r>S4즊F1{U5)n11^Mc诲Y=MU
|؛Cplq1=ՇF9hV 
fQ1;!0߯{;f8YySfM+dv'Rk(X?Qd12f
*81,3|rn
'O#s0];10zYLAc,4@x4uGrqc,1Lr]VaGf)8V2t̽/.wFގE_peSlڨ	1 C%3絷w3l<!2c549dSQBM[Fw=31Ql4XXl{u\v50s(Dxe1N[Z0]zs8<Ѡljn	gW͌]ހYt_O#9|&	%S( 4.JF-qI25&h\Td
8dˮNPvm2"U׼>BM|,AgǽvPS4)DGMHߎAFWZ7qrٿ(^?'0&Аh@<')$jmh@E	$O+~m^h[vm~'
?6hXfZ/5^CvY\^cޑx?ߋߋ{Xt	&E&S i_25*h
VD;LFMLd
2XQvd
2)'ShJM.L]d
oL]a2v})
1<5-6ȺHHL$"QHG"HXs,"dմ#PY{8*`)#wU(̇몀k4!֠c3ձrƥcGr=Asӱy\Oǎz:VBc-z:ԯ
r=[tX5k5ӱU\O깞zMUAX3ӱ㹞5uAcܼ֠CD6h:z247zsT-Pߌ3Fr,cp-;ꛪ\$HGjKyrA̻YEW_#(En4lsxhՍPݵ^b]Eɨ4wX^kh*=Ɛ[Gy]^Ld<L2ILJϥTFnb2ɘaf&:ih1 -{3^"hh;
k[9lmMA-wC"D_{<	6މ8w\xcmwDcvͿO^SC=6xA~V%V]Y݊obtN}'ho靨ͯرlѷXA[
'!(muv>.VYP*.Yk
JzM%(aCrIX|&Y0meWZml-&7	oH|)s^	sMK3<ecKMeDPA	kO##'^
$_#鈻N-ӻޠv9n[ؑ%rpG+ޣ>6W{Ó㉇Û.oqAecF%F4\#9G2">Ệ<}$utr<TO@,jXk7O	`ZfOX`i-"{5g˱r\@w90S*Co0rO:臑/C$GNS'mii'qh%_T(O"zS9MNgeA#`twȜd#wU
!g9H9Z5c<h
*JOOࠜ?>MQHΑY!+eScPVZvFgc]^ż_dg[SƶđKy%ɛ!q8p
Lz>+dU@tdIq5rObLW#W:<_!Վ\#@(SO(P[6lq5PJi2	-<ܖq20gqUk6ha\|H!EqT*SFUnhh7DёM5ZE{KKk,a=S'b\<
ɲɨMkm_$7:i`BҌTyCJqhx`ZꛚU׮V[پʽGD]^H0"(f86Ƶ/`e:*}xiP^atKŃ'P.ES<jRRXV "/ړʖ_8evyIDXC:gAɕ8ˀܬy*ML鵬\bpgsF˨X8(r3-`Ӧb9Efl$VO[ə"&k:yJjq-n]LaFRQ
y|4YS/A\9x3c&&INL@y>LkB~P]_rns啓̞2󲧗p~J6Kiؗ39^x=DƎR9{Rޛjً{>-
uYvq]I9Ev6ט=$V7747oC~L\#͞QT6}gytdtO疦A]կjwXLY܉uSăā)M205
S$S|/GU׵7qIOkmrA85Q7;=4O2?_xĚjxEW'llZDFBM};R5u/Rd4&^|*	s;2s;4D]B\fu'z|De_gͥփ
GAk y-BW+Zq2OSlDHHLuW~? DTnX6R_IP%SdzCm?iDZA`{_DƇɭls`fib&Lx,t4eAKz |$^S࿽5ζw2'
|Myy<OOOMO֔9NOF&h{2RW퀾n0yP<~Oӝ@Kb.S;_nw .eUzz剃yޜқNUk5_nܼ=xj}{K~jݷFK5\7v5o.`$Í
Txj$i)&V`&]?@'wp*d H}+U$iB,l'Bow IW˴FFhפ,ٹ-AmU
oyid{{We
yשYUԔ6o P6?H|
4' Qc=@\r9ΫS#Qn,8XSVjCh>߯C[ X#@ya&1/EZ1k4ϰ y;ª/e~{
x6AJU
`Z
5]sˆf6oR_PkwTc?Zo!&cЎ/&Ʊ$;}R9,
?QWTK[i::7H!P5eK ֣
WV]=I6cē<bnQ7p*FACKKxP]L)AZ"m&p1|]cn{zz>3s=1>}EUmÏo|Ѝ	LywA8b(3Ja3nE~&>ͼ{߅fЎ|T-u :RaAEQ}-^_+*jit}\[rMEU
|`(>Rb#qg8۵5_McPJ][A=!ˢΫ Qʦ`vVryg ݠݡZ8sO#ѹlբxb_⿄FVD'|!lWl
Wu,h^9ruED]7mǀzcۂ%1:-00ӫA*+RGUtwי?|ҩ!4j*
>d~VGI}#lmymUmPcjW;Bo[m%X˛'pw	Xf=:vԧĪ;lWE'neKA2,(O^.&>XW }eJ*NI_)ޚކ)Kϐ9%[R?G֔mu_ %w L !o_mH٩~/ā{C[`d=ɒwggwV5s^>{POuxݨx{7ۉA)黑^I^Xvt'(fDuy))A=){Q>ȫ7 <"#H_sKv((PbLedz %Sޒݔ
Ѣd`n3$2K(8GҒ{tpEu|O$uzhME3J"}wѬ:YHf=r_id+4!}'Mh-RZY4AD	L%.~l\ 4EC:0bx> 
h?dgG_]AՄF@;TxΜ{u
^B>Jw{߰A=	\tP|lYʠ<m]RӒA1W==.z4Sg{v1:V@cZI=)15QA:.c
ܡfd¡qK*Y*`+#öQ"7K}GKhbwJ3o+zm0R0Gk)ЗC	6:Yu4j|,&
loԊfˠ2+Mc"*ҝ}hBh'%-BXyj&R֛nITFUnZY9z8gCN瀈s1"T,ir|b-;mW"5ox ?<KME-@^KrQdBJg*> L#)=_+y%赘W8VMw>=}zLol)S?RSf~u
hУIh44V4i4jFt4x+FrưƝF-ƀOcP =A	?HC#QKh|4>	i| hG;=3-QkU8oƲΞe%9'N	Ma-jF
y>yNKW.߂r:Gwc5#EBld@[wXD@޶6]E;i4h'u%Y{ܝtA%փd,1W,C*@3֎lqZSs?]dpTі]
97%7Z{h3Iθ#ȡ`	+O O!h1ܬ8(~b|N<Nja.
4(EC>	#yW
C:168)ʼn_sna6[I]Iݐ{)=fND'Ϗgu+&'?I9:UĮ[Q*R5IًVԺ*z/P+	!V"*WD
M<-yc7@pl,u'YNь@4.
nZn}]CݩSEMNqY^vq4K97Е>#ǆJB?:_~LY	*
Gce1sdG3JfuwLFpz|v4SB+EunhՎc
R	Ie3)=eF39;&Wܜvڃ-:Ze2A
ҬhVԹE4Cd="rƆH^X+a9yakXi.2SS-Yd4f'Ifa3#:!QM6IہO<^mD!)?s]5;*#BA¢Q"H
,TE3EZ(ri1lq'Չ|Z#
Uѩ`,
](%b ]%cO]|ZLIorP̢#K1[b@C|1F,E(b!=N,bhGSqX*.-qX!UER^TJ[߈5
FX4DCVXč1͘$ڍYbP3VF`lDYl'6S&6qq8xXn<+63wřG,q8Zk|3K\`~"s+6ĥ4qyyܬWM\knיVt<[\o^ n0"n4/7׈׋͛v6qy9[t1[ɑ%_($$9#)NZWĲę\
=,fV_F)214O~XȘEc姌x+cu3b|l8
[5Mkibnט36L]c}dGRX\͸B~5jTSk_z5l֫nk^_0ޓ_SOx6ޖ /Hoɽe@#:L^vRO'DR =S`/`n(w/>o#O?qq$+ݵ<LF;S}eC$NZv<YXA뼝G]ö->\r(D0l&;}7P`JO]Qm}01$CQRp	 ބ%RN1JfiE~6=B|vr'We"g$WwR{hϡk}4WOZ)1yNiQ:W<>w]ΓZP3vj1fR0g/ufVVϞY!吊CKKgit%u璞BcX!8YQ6d[oî\/p
{xaO/R/<ýp^~'"kZ/z6/o&/Fx7{@!c<'zOqZ(6R"7%TUUzk^nqIAXT g
rTeG9tcoԂvPjXjA^OhFsN
aQ2b\oh[`kbkIdqcJ17͂As :͝:9U*pX<V{#[)#?mɏl#$QS鑐EF@!'^O=Jq8?7v=B6	cQ"zL$:+,_*E%>*-
qT!>zY|)X__ū0{ŷ}X{aA#
ۈ!c%F123rqȝlt7f=b#Xj+Bch1F8l3.2+cb4apac1x(5>27>12{4&d3(3fq9X`5*FyМl,6GGK͹Ʊcܨ2fܨ64b:/cV/FVv
HKԥJGjY2{gOS>Rb.Ӗ=RMîiFΈ{!O
C$3lrdɰ{9vnO;:)#o0WߪRrCǁćJ0=m%.	pHI-8$*E%vKl4hFb#N4XK4@Ɖ48hZfJph
0Ǽ@ 3fG.#D;^|Ft;	=fUG22Q{p81
ˀC2\t =}u@u#}Ew1
R!"5FI/[b~jŜO󨼁lGeټZBYgnv"-rNG IǒBm#Wy0hl^Ltdgj6&l]ls5Nեc섍[;ar=ø`a*3Y/xcF<AmSt4m<Cҥst
\E5\+*ocuxCmQ2EbR7yIVM-aj+%<I{;vzf!;Sk=gyTUZ2Gt"L'n<I| "D!Dgc|L_aF5ԄY6;;Kwt1&
)G5ܕ`>b3b:?eaȢpX/{hF1u`cwC3;4UyE|,lSQ@m')K#wlBo!< 0lKQ  -C\VH|^XʟX zStLfa <;f.1,3JufOj6,
f!d̾tylL.s 1 z,w%9]_NzrYWe"&i(ҲS4nWY*},Ba?4^el/|KEBR=1lǥ{eH$X]R`.ЂѠ+D<)YJAU: h@RהfD3,-`/_D_MnpjP??xH}GB!x*6'!D($hNZbN,:<6|sm1|jE7hYAw>hz\8^4􁹂mԊB!B*R:,_`eJuRL/VC]U,~JLv8;2ܳ
b=ÐE*R==ZfZk:]IsvYd
,[ [w4HhӘ kL s}I	d[1b;SN<6|.}˒{h@^qC+v5xk6YLd3_g&W_/Th-e
Fg6p>Fc͵TfZiHIfnSSs]hJWAG΀	97ϡGsI|z޼`^H?->|_}eoXs
c!OҽZ,swj-mQ7jSJUsT89߱E#4e7A¬-|v7o ܲ+ٯ$Gtv˿MJ"mdy	*f^E!jLkм[iy=:>MTnޜY5+fG$^_*ɿ,[]I@)Ӽ5,,tpAr'>c2x^yѝ=쉅g*aG	9>dIy7&<?s噻yoI[<}-I <<I7b$
y`W,#lκl"x_~%vϡRϒHJvJd`x4yOBfO`a>K$fҔowon,ǝاPigvp;AtK!öջroJ0~D:%%*o7;R*H❱VITU>^Id1*qvV^.o_ϹcTO8>@4G=E7(jI?PC2z,4JsͿb:M8XuI'Wt5VosfL0d1T>3d|pꧽ":YkLZfzR^0|H
y38Vo;&)S'#GT|2x%qRwsL`JglUFJ;"rh:|݁Ǐ_Yt _яߌ
74##cB/GaD|~tzGW|S!l#F7 3GL$qGᗈlŁ[RU%kR<d9rws
4rы{2ާ6}`I>{+7[oN'vy\EE4H6pH#e3.[hl2or]K9>sh˝ƸkX@FFoJ# vU?(ۙl~}Kƫ&!7}ؠ F( e㴍02V\Q6|[^Q4jmDʨ1rڷ}6[2gV_ߓS7.|?#O$GDaTFSt<gJy69NKly>]"/+Etn[ny	+/e)"/+Jy/ԡ>PiAM3:z%j3Njv?Qho89{0y+dg)qڋJzSj@⾒$߻*7tOyVʗ:S z\}NLAv`?}ބ>>oFS\ɱ#4ČgYcSlcOER[)Sކv*Δ93rl?7!L>Kߗ\DĬ
0/>p|iʂї)ۍLR] #DjF{X3LK6I?j#&VT|ߗEU`Ek
kU<A\Iݘk{i46ɇa|{bq̵g0Ϟ-y^DwWM"SMֳ}>5HQ,!KQg"702ZB%֓s6!o#Eػ<93{/%CPKKBv1/?W,ؔ4Dٗ%%_`1hi|fwi|ϟ#(bb2zLP4_MjA2<I[L{ddDx|>6B
5<꽞32Fd:'>3֯bMa=d6SMV{v(ÄVT#\Rk%?ױIZ)b~J$ +k&e
tgi}>(t|);;؎pO>:7vOXr9Pj@ht	T<!f4Y$K
Y3"E
8u~RCJ	t(Eae (PAMSULZV1Ms(rT?_J9jv42>M24߮ڤ=> e	P>#mlsBsȣ/>oĳKU߳ͰjW|4gt磹h "O)DzF4>۽$]=>Z`$x|P
nl6g];R=YuWPS_U@%Q}h:&cϺxO׷"5wB}(}1Vi)K՚s,R5KmbҜ
niQ
A\j'梶P}]6jtϖԜtEaƇm<7HVEo(5!HjI{6Y_|~ɺN^]I1
`U R	!PIjfm:JO My A_QdLǼsDhA.B ,5'G2w
PbE6d~=A;{_]-H$$[eÝNSK4,Z~mՄ|lJn:Tu0
*cR]ڒ)Ұp\4#SHhP)_M4J-Ru,WaA[NsUUC1a+1
&JYY/h{DU	̇!3;:kjwMYyؙPî}8kn_͓OQNEIUFn౼{MUXT?Z'Pu0 ?<KȭpjС6ZکFj=5
t:DNɴMB?W.uKx{>wBfBs
NJf'xu<E!q+ݣLo_C(%,F^Nѻ龩\c| r	Hn%=b$XW\NC]e.p+0w͘dgĬ={.QA·]@BZ.XP֩Ki̭S|k8_tERMZ!~MםG3y!}93\3>@i;`jdHَ;"SvD*vDwDfpUx:8:Ğ@#ԞLe4ޞFG3h]N#i='e/p217RKhR"QY!ݩ8[_p?p`_]a#2ؘn쒿!%+tmӵl]ɝ%{;}%CmuAt6ڍtݜB(VNp@JUt>?$=`ùҟt"W\aXSDGQ8q1v[iܡAƤR94R̡ʫ15	6EoI%v%ic
b(x</)p_Jx_RBwov*
eJ2y`)yȲD}=ķ{ͤhƼhc1RyX}_hps 
'Rۧ 4ao94>"|Za_@kxb:B?"h_#B"*zD?z1ľAb(F?D{l\i*ٷ־]wfNjߥrD/S5
j1C	kC,(V_Bw<XX2la=X3xm]$zc`wxab`wZ5FnP[9z8Z[c7tjvoi ~{	=uޅv<XŃ'e?@~vͪEYxU6{BAxzƕ4ר7 {PF݊+7_od(*OX
xǯVVVhH=I;\?-$2_Bn~OS?h?K%s40/R-E~W~
*eNڿ-R
~HoM۴~nߥUj"mWb~,M]}5^*kw/Ir+1Ea7'̀lJA6'd&La4
VђgE%_˝nm0tbVjOy73:T~H5O[U8!c+ouO׺o]ൾ:zCuA
T>˼*]љ7۹{Ľ&u_ǧ^tUJ_4DJ!6Nx8J%/PI#2O)bFt5o{|GGh1T:9dҹ!ImY
S !>
_!GPB{(,"bL([r\+CqP1S\׆zBPxC}oBEP_A_@
)tŧ`{[iB~1
`t#wwVm&FlnO3]Pc4,TkأoKp٘!ߓ,=aK	;;n|@5
TLEAۆΗ]ޑROC}Fu
zaQwwػ5>DF$u0vvBIPVP{
$[oLd?ףϛt+Fc;#dFo0zʉRNnZc'N?uӵ)S<k;)]a㏔kNNnV?KYi_wH<#˶&sSRJ]OO
~yDr=KԕJ>㻑2)MhEwEt O&N7y
e)جh"Q\QU7ZhtrB3(74lCCsidh>:	UUҽ@h9=ZAUtP->[-	55ZQZ'V֋ա
1INibmt)Y\:Cl	).
-
w>tQ8(?(xR'j
Idpʤ!FDD+i_)ijv.1) A1Qm7GP>hޫP>)^~
#:MR5u+w=Ϧ,nR"TRYV$
GC;N١_g<K蘩mpwgHDǔ߹;tޝOB;-tA(Q
VA[\*ǻr;7h&d
SB4
7E gXvC=OAvm8Mp7UP;ax_
^֩]+QeY,seJvΑEĹHq.Ük>r:ݵSrsFFoN6xV:{0u?P!zуB:M>Vs-cI #ceNf"gɞkrk=ҖHC|tg{( 
RCx~7԰+DSZ	25LՋҏRD^YW?9ԙ?9?AX~h?Do.݉vE@ٻ#wA-!O)dXM27<X;d^2?,*}˾YKR`+#axT%[@N1E`+3\#(%3\`@r}QC G@rH<@`1``9~~VOr
K#p"逳'ɋ  .\
pįXI c ^B 6?$1SfO`@ՏH~W_~W_~W3[R_~W_U@jֿE
+Я@?G
+Я@
+Я@
+Я@
+Я@
+Я@
+Яw@
+Я@
+o~[@-o~[@-o~[@-o~[@-o~[@-o~6@-o~[@-o~[@-o       Λ5 Y5N38p6\~S  l 	p3_  x /<
x+ /^:7
x>O 	3? _ 	7k^ww0 `   @;' P80 0P800P
80000	00000000 P	X8p8
J@
PX
h 4Z 6Zz	  																															%/!	K_B򗐿%/!	K_B4KD)dAx,
ϐrPH9$<G'G+B9)XN
/3r~xWɣpL5zY^#%,<).7
)r[,ySyK<#|3|'E	_"_&	_._)_-V*_
_/_(L.\~M5|,|"|wn7KQx{U0|rHa-~LPET3jP95$:$:,~MM
VM
NfRw1Ԋ&gUX5ZjS_js+uvu~[uqx4"S]Qj[$nd["!#=l'D#Hz:~)T/EW#}둃՛@~X}>W_DFGF1Edp+g9	V$r-2)
"Ӭ_9cgeGZ"%2kvXk~dUT[Db֊*&RoEX
F%lEGIvkSd9:;ru~d)֥S+"[DΰEβncuw%Qavgl[v{ЖTe9
C9RPDp!b$""r@jVE@A%ED4Đȥu$n67̷{_}Cow7-vRh@ﺇh{ָh{ֻgh
^E*w

ms:ro&UwiU)A5Gu}U
}EtDg=}t\u}*Ϊ|:y5.B^
KMojS=d,HN&lA9qCYMUaqA?".COH+HhE>-,9Qr^`"+;bTWkcWm":HZ*qA2I_fS
LhCgd.݄n!n-A'ǩôK^W}n}&^LiLg&Ăo-X57&yKÊV
GÙ	eGP^8m7l'DK'zdx+ [(Y
bC
y%^ʙP{m*Ά!$DhHU'I iڏֺ9㎚裓SbNXI:uut6f(խXĝNFilvhk!Yf.̋>,6XAg&/y9| {	~bh\;5PA"\-:ٮ^HY_	bs[(1Xw3/{EjXA֘ѿA,DQabi11;'ԈQі~_JomFFރ~zo\3BL.rr&Rp;D.G.u!Z8%bֲT#{&9hb6eeIze=d`-ʕ<Vw>]o3DT.ۊ(<'W#Yϫш%y⥢a!Paif__PL)xIub*ZqEN;fvuh|}NNcRтr4Ќhh>0ѴN-*=2+&nSnV:1wt@Q%J{ub[bA/ GsbaN@,\KJbfc.J8X
1ݦ&L\l<aãB~Y YDPb}Cz!"y]z1neYԣEFo#븼Op)]˺u
nZuq'R,B"Q(ى vya$u[|.I3sI:ih`SLhsA-(1IYt'<{B2.`@hgl@x^4c@naXaB9;Ѐ
jX%7Yb[-nn{-Xm-6X!-c')y澖
Llm5y4nO^G C=QnM^#oPK   dO\              org/mozilla/javascript/ PK   dO\:OE<  c	  4   org/mozilla/javascript/InterpreterData$Builder.classU[oEqؙ4W666.˥&vbqڤCalo6%<  $HDEA╟83rҙ3{ߙ={uC04l=Qo|`HlSYf7mE8I.R4jt0kp2eX;@cf{|Dv.C4ߛgR&(a;nްq'0oNNg!faDѵ
KSO)SdIKbX9iøׅHħk5qO{<jjq	3aa+za[a&VE39(b!9.9#Z Fswma:x	g9\l2P^8^K/hղ-
ʏ^Ԓ7F(]M_i
8޵ʶVuGROI7Mjm/cy1vZS"ۯ@Mlua+E%)8ߨ!_XV)>[R>ɳk7m[J*G2#LS#"#\͉(÷.U^<Kz>.'M.E.:5f-l:BXR٭ݔO2\?1uR."yW$z`HNB^liFU#P_[58ny1c	Yc8
m Q3aPu1m3N*gZTlZcv)6ZvUxGݳҝ涜9
,Θq4'g蚀M=iF+NS7h=o(yt(NFq)/||^ߟ~{6L^nۇ/0	=Ň~Ψ=(	}I|i|@܋G$gx0H,cv?q3`P7|
!BtykD2DYQh2-CqWITAUȨt_R9_a
_	3E^QKqU";B{_Næ:a(؆ӜD?PK   dO\    +   org/mozilla/javascript/SecureCaller$1.classS]kA=ӦdڴjMmEER
,

	yi6S;2;	_;icJvg=;Ϗ Z=, ϰMR)!O##۰%
0{+MOⰝau=0tDd{2vaR% X9EoXmĊx65	ð^N>1Uʰͥν'[#RXGVt+\CRS&ppͻJfuU`eʰۼP|ubK	R f@FVO52J`'!&]4It*}Ͱ}C@N~Ut<g\	0ss%&(煉?(Ծ)Um3bOWJ%wLѽ5W1U_j}8hӗ\1Ȟ}՛apFj_ҧ3:&t
cduw氅2v3dl]/PK   dO\I  D  4   org/mozilla/javascript/Interpreter$DoIntNumber.classTRPN	hMZZZ$RaیMC$U%|/8:|(=	0ivf;ݳ`bh!hEäVs{ӲܾVt׬9
Vmwo:v<m޴M%ډqQCk-8.B)2e-APݻe4[2Hȸk o曺U:JۅC"|>3^b1vKz]
AsO5i`M+'Aᖈa10-jZtN)$exb5]B2W
$wjJq!<%Vk
GBJJٴжU,t]v4c2&"$y<hzwSS]t(GAoX$=WSQ֌w;I?=9˰;DxSxz<D_Wiөlbu6ye95+G]#m1`w2ěvGSEsd4ACwi#H}|7%)Ӹ `8#sώ 
/A8-{8M?0a#Cޣ"yOI遤"!cVL4>Y1l@{H(2"1zIhD$'H>&B	PK   dO\w&`    8   org/mozilla/javascript/AccessorSlot$FunctionSetter.classUrG=-Ҳeۀ] G	`nqxuvG@Tx )(.UPGҳ`聇Q9}5oU	$M6RHCQVr_:>:EHKYd5a0k7DUPճ#(^fKd	$g^m aGv"yQaGB+q,F<+?09؅1BϞ'BpwzlĊ'<m|	#^xyU֭,&1eb^yW]חGJ3&8Cm)l]gݲ=!xtW¡VB]X6Q"쒹=XVr"[Z,=gY~nmjfYHe58ѝn~.ngzo6-&ps?7}&TbGT$WWypMlD̋)I	rUk}G/J@3luGܨQ:3,on'ĪБ.lhs{]FR)Y>`_YODirY67BW^_|}R(NE~`k_ʕ0  e`PYpF8*{:+c}`GT9%R8WI8bAd
)d<s}Y` 
kuTYLap=c؍lj.f>]%1,ǉm6;s-O;:)D':8(NǠDb:vOtK=dlDxjpLBE\b;^,\t?PK   dO\3^$	  1  7   org/mozilla/javascript/NativePromise$ReactionType.classSmOP~ѭy_+(`!2S0XBTut-i;OHh4|GϽNbMss{|kH0LaP޸g#;rB0.ٱ{7 F<m'v!OA5DmZôBB)e -6KK[ùvUXۥ2Ce::nY>gɛ(x_-p'&nk5Ї~__Q)GWfM˞EMr~u9n`:]p}7^d_\5+)$u`
iF0*!kff+?`Fi>_vyezy̖reB!v+I2/xm!qb2} ]vC
Uf͂5Xm-THrP:B(~Dܿa0V}y&]Tu3NFwB'ߣbGk"Y6v0O\i5`bp\%[AEM*B*PLdtq-PeK]O`;	z|
h=i
MNH*
wNwX*ڨg:`1
PK   dO\ͺ    6   org/mozilla/javascript/ThreadSafeEmbeddedSlotMap.classXW~2*`D+,񒲀$CD`I;2;+b&m6%bۤͶǞm#zsCmJX '߷;Cu aGѹܓ/ްs9y,g/Z٬g̒h]A
	1xOŵs=b!Sq䊙q̗(?UVc5t,3;n^>?,5tkZ<6hZ
/sg9<e:0-yZ'Ij	@:c%eΜf*/	:c+t(7;9Pֈb`+i]3svt-xyYa`%@]ċLT&$vGmfl9],eb΢>n`z]><tjy.ulu<aL,\9<g~qNIjEy]Η9bxA3+
b־4=:jUTrң1]beHMfZb6dˢ*30?S̗*nU0BCWc%1%oEb_6؜8Ϩgp|b9Uӱ͝4p
6376RϊYI9t2wbO1{DQD2e (21=($dಐ @!l:f'}\	Lte|
((x+H=!-
m]Vʃk^gPmECs*ێ
 .Yv5v:QawHDfntl'M="yV3f4\dhs#\rl0h8ڎ;=NFP+4z՚xM4euvju"[=

e)*Qg!;΢}|ӥ,bόi->n_.
oI5RG'Z^{6.!T˖;wWprѱrY%/^v-3Lο%Ƌ'c=iKUjn]btw}T`3o+uxx㝑#r6%ߏpwX>iJj%g%@?7GH$0g||h4N#pC(e|_(}4\Ǳ9q,g1>ը,7{ھey{	_mM?#x/HCfQà̴c!z[>?w}D>ם
 oV2TI$#izbo)Jvq7SX
n:p,^
.~+QuRB=oNm-?&TcvT)sSi[8C\-˾ϑ.f%|t3s)K}e/1$Ň/+α׋}Еj]štYhn_l+&]s=l:L Wb7zo^Uzm|Go(&ۛ|ZRa(D}BQ:
:iah<^hCLOCս.SQ
*ǫkkkX
1P[!Q'1g~6ۜxҧܦY<G->"-ѻ^}ԇ.bهh{j&6=EҜg)}X>ǫyy80kM01Ui˲J5^-xa(SÔX>d(=j-ڨưHmOjr=n\`)IUT #3[YloaHQ	8( z+5n5TL=u߻&|j$}`b!IU$5F`Hj$5OI*3?y=<"<	@z\꜑;t9+J$U'wXxg J"A"h	h4<_M3Y,B-lyl߬ҏ??PEN{|ZϷN-"d%a=O<'&]Ov/rYy7!a&l	ܴ5njOPCka'm-Խ)Ou!T˿¯d
m>PK   dO\F  >  .   org/mozilla/javascript/JavaMembers_jdk11.classWwGҕ͘ECHHSɲ욀! ƀ9fq	<Ti4]&mڴtKI4}9/ڿx&iΩ=s/< N4A"$p\-͗Zm6ZjU\fY	Ϻ/#giERo6jk,Ѣct{q0/˪.VU,F<Įv؅//ՉzζӹU.PHG;ݗ1**$hGoQh)ΚCUs6NTIщz*NffH@t{ؓ-?Y5V16G[.",{9O9hэZ>jFݪ+ILG7NƌyS5xSJE:HWOǗ@X* T`.
XJ)4깚/Mb'4d؂$%t|Ûn3?0AҶ)jab
=B6UgtOw*L#o9gcl=c.͊cK-E/#-;kVi<Ǯ10/MX#IbLkmhnXIbQZϛ%g%xc)ƙ7ĔQeA"ǈ)m`I^Wq yiî3u-|Eu=4ۆMrȄQ%3TLwp;pPa*V*JT5X)긥<*N^1y`rJ[%s攚4`O32-J
;(PgMy97$}bv`r;ID	csޭ6i9kKSRdB!y?*w!FEc2:g|-'oU֬En%M&	,4} rmoGW)L5 ݱHx̯AH_!8qxJm n09*s<s`<e9cgck#ڥUrԖ{W^Ivxt4@T6%T\sAGUzdRɬ&D
xi	WI~Y\[QCA|ȵ|HanO6];aPpW|Օ5^5>y}?dCGh]2%Am j~;I)b_Ro??tSavMc ыp!ϰ*c,B/vbw(΋]ƀZ#:u|a:T{or{)JDD[ᯠ
/g^Mdyj;Le<]q}H%e,hz	adyI+"8=F2'tl3({U$TH;ÝARW8	Wqy@E2
vu]Fq㸄ߓ<l3{Oʱ3@`}R?a{vGا1::Lg%>O9JyL]:&IڿB.]	T`m.-kx+Af5Zm8ri?b~raWrP=-i'71֌7`hղBV{.k֩)0?<ѶB)Os!1Bdԓ+8ON1WUN
9"pF7Ƹ[wۓ ^^B"v7(>:QP8XZs;N]α`xQ@Yҳ8aF;BEI
k;\Ⱥڮ΄8ZKҥT5vN^7O}ةyujzj:xR:|]#)
7DxRכ7roܦsG/PK   dO\#    7   org/mozilla/javascript/Interpreter$DoDelPropSuper.classTNA=C[v(((*kED!"IS%$_2N}_>oaSlIE̽s3w/?}0|
-[HaZ
{[|߱NJbJNcJ\剠;az<5]M
I)&,&/Ig3$Bzt;]Oݬֆ_Q"`ETX138k9gKyO;	ZZ(UґIJ^?.ha@'/{Jd-fզ;'UAV4e|_u\;\G@X'Βrm{gͧ?%:#=36=:ҩnM'q A*A>|h3|2Ji6Nz1~HTEԤ˗<}^QS
C@
ᓙbp]^FotLDւ;H~bԃB/u!СЗMM} {M_QOaz .#\ůH 3c.1xhKL=cZH?oĀ+C5h2:QE3jo݈Ӛ>	70Mvf3RrEv,dPK   dO\1+c    4   org/mozilla/javascript/Interpreter$DoScopeSave.classTmOP~6(+*8D߆~!.3Ż:];*?
&1ےemssy?~. !g` l[;wynGZ5_
H]G_x1+1dA^n`FZƾlK.ÈDh3Zc`8	Uy!!!%goA<ଆsΫ̥3c]=-F*.2$w2L+k~z()WQPzNСxgӎ7=Qp"XmK̹j"htw"|&=
U9ƥڮH۠
&z2~>2Հ{_TR[Hcuc>.rJ';D*=ku
0PA7tĦehPCDqI
׏`|_P(&=8Q@#hHO8D4'C/]M#ПE_>3U0bd#Q
71oYZ
/-&_}}ӎ_0ߘ2	Ec,b)e-I#y%f1FX$.%ti>g	> \PK   dO\nP^     G   org/mozilla/javascript/ArrayLikeAbstractOperations$LengthAccessor.classP;N@}$а
E*+RJ`
n; h BءS̛Ѽ}}|4ǀPتnj_t2nEU1>r$jQ
>[yBqD8[ӾUfFE$,.{P}8]ux1#ђ܆$9NKyqtJܥ3aި1." #{,1D-1ɊoPK   dO\.!8\  	  5   org/mozilla/javascript/IteratorLikeIterable$Itr.classVRG=Jbed8NblH,.F'`cs18a5]jwK~ ȓʔIR[Ig%.6R0URt>۫?w pb !#Cq+iY<ΟrpMq虓.CD^Õ	l"!
:CRg,nW2uaH7mSN0ӽ%)H҅M9``1pFCNe?A![l$P*/8CWKǖ[|gu2*˾.]lDC7z4|c\fO{5[UrM[<ʾXzѧ_ 0\8ˠ-<BIȽGEqd0aX'pXܽJ
۫a4jR^E1J,uUuC[Ey:ĕZ{05J3fbnˏWf
K)T3ILi1Z .eĴEYInp7fu.ymǱ:QE^ܪySSuW޹]	Qmq t&%niX"n|՚4L)֌iKT-)MǎcQD^0lôD5锩Y>_
w^T֡7]S'q=5l2'S.
"m{yҬ^'Վ](
&d'd}*XѬ\{pU_n!ǋN5ČkܠO:ٶp'-yrRGpAQ#P_% T_P:
IL	Zw^AٷyDi0ٺc߅Hj'
8=_tu%
{r\ƥ_#ۿ.1#m
s
0|d,^
.Vq4*f%:=I<a7!J0
vI@07k/AםhgB:.)c
q}zݮvӚU)7
JHZi:w<(sܗnuԑRGnku }PQq_PK   dO\H@1  e  )   org/mozilla/javascript/BaseFunction.classս	|SU8~ν/yihӔa,*EI2 6Mʢ"J:83۸踡ιM|?{?u;  GX[W,"nm4Eш4
+BjBX:m맱<dA!2"
pcmТDjϱ~@09YՉOB	>>6R?!iYB%ë⍵%cj{Oй:tE!@7 !s쉰j_,hY:IС/N1G)?Cȩ	/g6F$Cܞsy0!t"np*Ҿ'wCxi	*2J%)	JRݮF?Ҁ@1"djh͜Y1o#<0jh['$YCѲLDWF&4#3"j8[NW`'4ikj#5~i0&"xiZT.ٛoLubYE<Y~pTVE~psQY,3u8ʀYPPnu$ԲU*'ҸBcs.havJqړ"M$EMpdf ~BuJ3 M-^EO;)$<7#m -硫
UP&X~dn؀%$4ՙEQj1Xn@ԓR59h
395N eTȺ ?Z8Ę2W"K VV </dDNߒ ˃АvfN|~ڑmNIlV+l2R
8DєgG*+uUQhS3hq69,Qlq]mHH>Or.$]7CYp1\å\gG#f.GL<lYlHӴgwW6{?ńzk
M6KyPlG_A2`;o}qY$
Dfz]fXX5{Vy!ݴםޅ0*d*JӲHCk},yY3f/2cN$.߀M\j4Շ#u
جGB0qZ!ZX;Zp>fp`쀝:2X:qW
kٚ'YDve2)O=>`NF`:.{/"萰YMxm=\X(-5j"`{a3P^,/C6lx$E<h|8Nv^3ux{~ 'Y~0e?twy^e<;Dg[
>{m&\8ؘrP{#kF')[!9wʀ1nM,Ka ka;k%?^{~IQ&PN}V+XIXLɉhBI?3c2
Iч"vCZDs4PCB.U$\e7\(Z	,if
ѦH͌CSvRi.@m60O/RZVEyYyEoZh,cW2^]=ȾjjñX(A!{{"VӰf3uفHL$D) ͽ/Y:ce-{]Rl ea? QH	M١%d+TT,[V1f8^;3?XapZv<ܤpZyI
#5P~:c]rXf(rQ<8:v~*'o>s@QH-*P1`<PS>JBXq$^;uNpvO?2'Z1M
f.'qER2T)d.s8r<tزؤp]x	/L`Bؒa,EG[fo8+ɵm;QnG,Mnl6NX]^zMۥ=C
8Gǹ͆1pf}Q!nXt\@vʮOF¡[NQx|zx@;j$)B2,OGV%
C/Qp9IUm,< 9'=YάQZHԦQ-2V80yUuA[30M9eFceӝyh_vedp%q'Iju,Wcchuu4z0ŴSDEˢ	l)x*7Pظa~mbD<_"]֩e#vxgfFDuzѐ"ЕJ#s<raKn5Ֆ[:^dxIIa.kS1̌9cpZw"/
ī
)^[7|rZJVmk\H	ģx@MQ#_gxH4BAΦBXqo2ff]h2yτFȐPΧ@/-\,t#K첽1h.fhM8*5>H62y3Y䕙Fc&옯6f'A-n6(b+>lćkCkX/֥n'[M};ˆa.O
/5ŭ,b>h'
܅4OJTEX
duGbM<)U[3:9|	:&DH8{Y83|c3-_gfv_>4GSY:ő\@Y\Q&ew!SDߧn+'XL
 ?
3Kx~d@~pi"tf?GhyRǯ9'A+U16r>jŏ/U% ;ބg;oc]^,ኼlZ#$4:Bp:_qɉEM-=~Ԅ Cta' kFeżfLGS§qRpɹGM"+!
D72b#5̈́ac=2$oG$(PXMff#zopk@x_3&aJCW1^b {]gf&U3_YOpb;'7B~iK7RcvЗ4]L%trx ^1
bt@1XWvZtjp&[]Cġ8i'o7 eg\87Xe>cYfB!o^)$6>k
i4(G<b=\81bBO.mX-/єh=Yl/-O(r

TaLY!f9֦sDpU
r
qgȫ}V!c!w$NǊt`,G(hd(Beo=\TBX$IśWjLhB겈 +.B&m_#(ZB>Y Q¾'f꺍3D kC`}3qFҲY^ NE!bPDQY]+k<.o3onMb.VbڒF&ui(FGM#N>c}h~k'4JҀ,>ddͨFzBLT# &/tzY$>z9y
̀
Mq!-oM3UVť&ժfDs/f!;jN'*%JR7n79N¹!>L6Cv;ȵ^|hNšr<'ryoq!6q5]B.El;m6D3w2ٙ뺵yxXnAЌO=buT7ceZm?0=q4fb;Bgc_#B[F_niƈgKʵ"z.31Og77~~M=E5.ٯI_҇	NI'_VAn,8UZf\W;YF@-r3?;U%w
#~Ia
*i'#]|l_b,L4眃o6KI</Ŀ#7,}hq~cA?9gϨ[.u2B`}cN9Ev@"ݦܮox\ocL(j}orz$/wm}g̞7sBz9yy+˦OػfcJ 1,E%]N%M@W2,J.tc-PV7TpmHy쫛_7vy7BW2:fӉ<|r<1VQ	W6/
7fdfF	\4V^Efg7Ɇޚ9WtՁ4_K{hԣJML5X߽x JWq<08huйmRjNk skcԢ,B1Rr|dhm,36"Nƣ
D6_Z _+_R\vegዛr^6.+ζ@e=gH.aʫ`
Վ["SGa@&|mշcreG3ZtѦ
b1hHX;-
h#
Ͽl~stSb^#G#X+^327"o$g̤<P#юׯyACggmD]V;4,Q-e/ր22h߳X.e!]Eg+arm%m5m" CTy3v-H)\Pվ4{rxxcZŭtҾH}S$ՅrZ;v7X_"*nHDH"IaEdMҦ9/R]8|)?M!!oʏ{)6[ΒLr)2AMNIPLyExc#?v8˽&Qa53뢋ӞF;?(1wK;ty^+Uͅo}HPa)V\tpY` he;7
R(Lr.gr(rYzD;ZbS}di^Pd^Vra@~V(8rY62C묟u0)83E8٭P\(2aw亱j6r8U{
FAm1
zTA3!UУ0Y
z
q`IC(1*>m+c><.x
^䂗qx'^Cܢڿ놸VAo2!n\]yO
_2E!k=#B5
ua]A
9P:Ņl^aam	'SC^&/'}nyvQW\/C\,񿗩?\!֊W}U*~4MjUʟ]CCMJ1ZɴC$Ρ!|P]U)l"5ud*M
tdiVZ(~&^kGs[ëw̯D>UCvܷfy5kh]jL(͋uSlgCGI?%NEHe.5_fb2iwu>gti\cܦ׵Et8A]06Sx@,ikwJÂ	aKru?9L-
DqSr ŷz#jn{Oؓ(0Dd<	zJtBo)`g`v;``"뀳	6Z=eV{ʜV{V{J_+=e^|~OpW\@pV/ng<#깃L:i t1Wwi[ B6ȭTZ q+tZ@*q5~%SW.)i#JG@4RRGhg`|R
G$pYW&tT5f8&oO%hICf-)ك΂
p  $<`4̇1JV!p%0n"AZa#k3L%'0]A&dOً1zMP!q+I.~To	6@Ґ /p<d`Qq2<`.dю$^xPo!/F%cPk(r3F+)0rW#m<r`0=dHT-RS=<Brrx
xƶc/.P;;ǞnUu=k6\,r0=(@SW>qbMRfP>!(?)dmp-p`IZϢ]ѹֻ8@]?d\W53poy#T{t٭]M{*Zh\7Ӛ >ZM,=	z

' 8p5$g6]CmϦ]q1Te f\I*v2eTT$04BorNo.H94@;tK-XNxQMpf@Pnf~7vR%W":`B<|rѤ-ֿAoHy B7>f2p%GD4R~3~[(ස	,Z.$ҕlgDPOu'zA`EP9Mp{c
Ԧl\nR{+A6K;\>QZӷ§V|snju{}7-Ͻ <H#I'vǲM2iT:5I2Ej_]@q=[t3Zs(k#-Cw'LTO8ӃS,y=/G)0NN0]kc:"L{ڢyցeqh(,P,"n^W6F|wC
4
_Wk9DlP-OaED?2ߤ_"giSOv;U~_L5apڌO9-V6AoYU(5"XԌޢ'/=s6@3߳*K\nO~Џ&}N_PNZ+7R5"m7 c.C	\ߛcrB3+
ϕH5cvfk`I͒<9VC{6ҍN&[ ."/X66`-u4\<m-yh٢g`!iĭ=Lt?ʲVNȀlo-A8Ȧǭ
)9)C}M&Ku 
:rW' x.U`Wn 4+	dh<Ҁ: 1e$9ŇSK}3X3mg@ÔhL<"x'S,'V
6^)N̽Eo֥&r2$3br~$ȎY+`fO́T	Y#קBWY.e	n:Ĕ1Em֭]UN)n+c;A4]VZ$0<xiA;汰ћbtYxXF2akn6'9dCa6tDԵ؆wEʽ-\iw.:ٶgHxl({*Sy4k!+'n w>Nn;yDy'eO,Yea]CT0l-E䙷w4>O	jڣk,\ݱޱBCo)C?9WHQ
Ycx9"gzUZگUhyLүB~Gγ1omU)h%tCl	ߌ8d3vC/u9~lB!vgc!-8#j.\;pa3v`Ŋ ҵP\W"P2\\ƧC+k-)kPGRNuxɨ=wP<FEp0^S8Bx5,#':8	Sj;6Hs
qhvRۙ>Ck3qx*D.dnZrӖrFʯrR]zaBOMtd
-yxLV}u\ۢl,ud^tPR&m
;oӒmFM[_C/ B]0xbCFHzwؚ̱8s,.a<^hu"돧7b1O%'1&Ok|3,S"-xF[9h6˲˲˲Q[[2
-\G39ڄ॥k/p^}--xm6L݌7nT"a
IN>wI?K<&yM8q%Ij$-bb7KP	\?Jef}=55Lb45R32hdt+c|f,>6}l/ϥoRcQԆ< ZmW%
=n'VB1s-|賓?ւ	x?qRW@c*n'~j<ͣ뀯n~v봛$Ʒi߅"|dmwa,a"v
#FGGZfOz=ijmFLB}OwJN'Zf2/_M8
q[wo#NO4tŌ|TIpM!|T GZ2;f|bzɈ<E7iTv'YBBРpA?;ޖ)?QЃM:N&mWZw	9۵Sm-<IЋHQH-(yMIDWrP`ȃbw8=%VbF O^/X$Xqm7k+')"ec_NI \Ez݉g4͢E>lMS7_S	_k/~W)aAHkjE%hT%CȌY8M{I(ڸȴo킕`I38:+mI3~ා\V!aOn<n/Kzw	 }h̀t-xm
rA_"JE1L1a!11p8VC`8Rq\#IELbbq$'WRK-JaX>VT^h*v%~p	F~D%V橯u6QYlU,a*$*
'g_́bC)kSעCB{)B{kf޳3ۄg,$Eh@[KE^?%_t~rlzf'9#"'RC0K`X
Z$;vA=reQ;S(2FSȃe\})r墘˧zuVK]M~w3'Nճ)mJGWiZ*DZJf/RAK^uJy4k@BiBcT*F)hkGBQm,RgC@\=FOkMV ݝ'!Dmiq-[gꋙ
V ݏQV%[";)z(jk
Y\>u$גٹ1~C:chO=\lуHUV$r-iT.OL"#yγG@8R*c֭dJ鿐8,f=,M{E-խyiaC
	6
SKbn-NrQN"Hgoh![Ioo#00S*,e);9p*]5
F:\4Ll\9_~]voc7;V6K. ?eᷖinI#ٸ	!h("^^lcfqPeN1f-o8d^1hq1T/_\*ez7fMJ8X}5|8Oɕ'KZvH^QaJJ>5XX|q|÷Fd<\!br]i5@
M\phnܰu<4!k[11p쫐#+nao[DE']LNKmsXUDK2?E/nǗct&jf-b7@byr5N'tLJNg$_3
0N G$AKq5$ap<˥d(^f]ҀlGd@kWuZOe_א?9GD8v,ێ%vF}'|t/d6]Sa<UF[`=5T7-QX)ςl+gs <?A$AC1U;Anh?.>W糡Bա6yv%9{X1!Sd·rPL+/N3,ϗ$H
1Y"ZouYWR٧Wzn*=߸sӗs6Ǩ?f_AWu>!tz+88=$ڿǳ|_'S{o"xe|zЗ7pr}wL>2ϟ}=Ճ|(_n'rK)
XLi
"+0M`g*Pm= |!K}%</|q_f_	D}^o"2_&P>J+|]n /|<<חKLS_Ѿ<G||	|ݾzi{`Wj G&|A"v}.ϛ$cE9>O&ӖЧčk6}~O
s)}+eCYֽܽ{So}cx@G`آIm
n&mLDˁ.׉N8й1ѩGa5:3Itt;ѭUmt9ѝ@w]NtG6Nt98yՅ:3#nzDt2Tzu%I3i+9[f*F9
q-G.M{JNV~蘬|́N>㘬|t+rItMtPu:]m{R9ѝl?9ЅSc9x'W\mt~':WށN|@'q/	tqDsrNNt8x'Pwltqݳnݱ&PDWfR7ltMt/t:||Q,>D8&nuLRltTu'2|M|(x'*Y3E]q0:yNty@9It<@nJN{Z̃b`g;<`p0;us0֍{m y.k<_KV~<'9V?B
y{o= o2yʭRצ KOIf#t2瓳~dH*
QrzR^ly,UUF%(uZս~OT#ȯM:cm8\C`?:wt)ey`zHRoLۺ:&Qo'ŧ?
E2V*\ϚW3%`6<? l*]$W}6:C:mAAA\'F)tɊ4yi;}~yb(o.*INM^n
Dd˻t>	vyv



Cw9F|J>〞u@/?˿8ڪ嫭Za(ow}w!ê>f_Lr/YZWzгg hh! c>CKBzO~ mPK   dO\q    1   org/mozilla/javascript/Interpreter$DoEquals.classTmS@~m#"*"B(UԖ7meLa `H0ItdF ^
s{ cAGq	
]u?XK;|gox-3\jsgHX15
]T.`X嶽]72m4qvi#̠"
 ŐkM!QӑF+a8Cצ]U}%CoVXp
Y
@t	M{cTaa-às%2BEEEa,Z'-ITz#ZMM;kr{{>Lo,r*FII
l#k.(Н>d}B%mNg0]ĜzvmACqOPm:<S,ZfSoIK/;uknm&>hwؐG[Fh@'F/(0ܡIFR
9}VZH7ȣb#4I!ԲBrU#NYxnOaAER#-`X{za0~D6j"K! rFAcdЍI<JSaiR$<O:L|Ө!9Cr<_PK   dO\]Uc  s  1   org/mozilla/javascript/EmbeddedSlotMap$Iter.classS[OAe{fR"Ij}iovfwj0AI47MMxf d3s|ߙٟ?v	boq~'0\g0ʕv)-dr"Pu=*5rB'zw[t:淤L_t,jaaVK׳A=;' #1[CA ː
EI2$\c)Wga/%ˀ̖&Vڤx#fyý6]eNSE*EZˣn0]+|Kr5F(@r1a[e?ykůfCGlzjH>
"i63|_"A3)ܡ[M:zMILgvOКUka} +4ày2*G@f	ws1m!w004>iq`wKSKd|z1^/XRxd #ߪsQ];8)P$${K'SKq$&0I)_06/XM	WNsbdڥPkUְFWLLPK   dO\{]h  C  ;   org/mozilla/javascript/Interpreter$DoClosureStatement.classT[OAN/,-TMiUD-RXC eN3_˃?_d1%Hڅ|gg9`
Y$42FaYF)9k^[o,VN+(ռ@<?Pm;pWq-';lnȚIXbnUYMAHl1Nouk\Q-]21!{謧z㊁&Fp0S0"=ed?Gq
717t=NH P-q60abS	fXjӅ#nW$ur

V50CXo+n
}NЖvsOq-wRN
^9|%׺ke!:n)xr>]x^m6b'$aiQ-/EzxA~˶E	k;*-fңFɜ 3|	H("1i&wHO.1r?0˴1V0#&Ra7	-z.HVcLKSBSpIM=JbYk\q<5l#6q	c) PK   dO\Ӕw  w  5   org/mozilla/javascript/Interpreter$DoCatchScope.classUSEl$JEV-5I R!te	.s?_NoRǷ-̽g{߿?p[Iaa+};Z=lߩtUү#97P~Vf"o8n2t6A#i5Q->J((aSj,-2ѧ8nY6e%8cu0LFp/~)%RI2xcYh45U~M3i Jleym9V\@C l嵛tU=i{t|{b*9w-q01)ݩVX6Wp;CJ({!,j3zU^WdwMOScDr&]]CE1:At\355їw\YoK;lQ2ri]o&BOˆ~'ArloE~3ASMՎ\n0
UNsLZVNx]_	RzZv@fwiʮZjز*OQ`UZ,zuߖˎ^Xm^>͙Ԋ(u'G`\WdAhqo<ml/5MW0&a1yZ2_~3ǰJAMe6Ns8<7ʏ5;yo}$ F׵8-/LiW`t{ #l?Q/` ':>AӿJqaDtQO;	kIZ_5,%k26V{k/X!1CP.<-dC,
!c/ O	һ<aK-{$cjscOrB!>DɊKFp]Hc
sD %ѻHPK   dO\qHP    0   org/mozilla/javascript/NativeProxy$Revoker.classS]oQ=G*[|n`|!16AjDy\mdw`ј(]4J wgΙ{?~p4bkHHb;'°gZ<"+^
HiH8Ps==l[aoz00:"N3)?'#Sܞ^L!V#&tQ$t\D
'U[^˸aEe		u/|m9r@?)	75\%'KudOX̢gGHdI/D{y=LOؘ0Em»͵\'9ØfHyuV-BMw"hN$za",ta>ñv{.r)%H?xǑ^/_K-~r1?>;~:klKu}Tju6Tuy$b[G
|
N!*ʀn0<&o9'ɾT;Cc>b=[AoCCb	P؈0PA¨}TT(
¦"Cj4s_PK   dO\O2    Q   org/mozilla/javascript/AbstractEcmaStringOperations$NamedCaptureReplacement.classVmWE~lTEڦ@x`IA*IUϰن-=V~'x=b?7y<
59A?${{;/ |obAHC8^Dօ[ķec{k:2ssϓ.^%vu1\.Ma{ñn[2Dm%LzQiя85RFSI+z0RT2 C.00F&ԾkWGmTMi4:Ӕs{ﱡ\~	jc3\;#^ݴ*MdGR3,ҁ.M+r
8UCTʔ@f]-2}=ȵhlj5"ݞeq"10^Թg}<mIrMu_
8b<Nݖ0 |w ^t{(fx1yAYK˵.
,Rok{[V@:vkq&iٍy,wveH8$Pl))ӅCr^9ƥNKv6۠HJ&`k3\g2?l?zwT//}@Ir`;>
$r+:Kfl;ǥ"gXI]X3NSrQͦ2<.GahE&8/;;Sy4N%5U(M80 su
GD#0HexutiNLT=!5ReL@|ö
`qS}|rhxpL4|0qz(]g`LMV .Cb<dXyb
g?&CE!Xw[*+r=g5a\d/$ãHRKF|äp)U~>Tf}8S*)"rfyLc:+ na0a>> 0UF~^tV#!ʓX"LY"	nB#X!+BC֭FeEHZ?0Sl~FoV3-zF	=]$0auMKs5PK   dO\              org/mozilla/javascript/regexp/ PK   dO\\    1   org/mozilla/javascript/regexp/CompilerState.classS]O@=.,Y5(lXp
&`HPmvꋿɇ& _G❡L46=ιs_Xv:!k]T<ụ׵c$]+WCfG79Xa:R#<O4v"&HA#TH0Zl%z^}g9aM'AYuU4u°:Puܰp0pn1\Um\e>w,ռ&]y(#;*{t!ZW}:
A7)EC;QV&GPa_4d,¤(hI1LDy(*Nz居'Xd%-8fE`wd(e)ZPdzq{ID5JɸѴLzӑ	SrRgȖIWUi6j2z#j18)M;:M@4#]=l)u`G$TJwt44  4XHf)8RgR0H7ueevbpP?m6ڙ6mC6ۜf\Imlmfx3Xd{Nn;:\]\G
E~9a7} x_8/0T́1:OW⛦_PK   dO\!{e)    4   org/mozilla/javascript/regexp/RegExpLoaderImpl.classOK@?ZECxx!<n%nIajS驠CiR(e3~o!=,! _BEB9xNO)x,crFہK+zQęIʴ(a7"<%$B/xWh:X%.`f̈́
Bٗ;BNd&U_<js-m?9 Z3aXOgV
u Υ]]mZ;' =3f:fǠlj1:ZQ6ApX~kkPK   dO\S    -   org/mozilla/javascript/regexp/SubString.classRMo@}k'v:M@
G .HH"^ؤVڑA+HH"5,x{3 
"	3$
i2J(X؂Ű34F%4\i0h14gDWHƚ:0>
ؠ&vLZhSLdW6J 	ZMrd9
ϓ>to$
dɔGc8O-窬;flSȒE:%b&xJS%\v6R	>}j+#E"eQMNӢ+.m)[ o[tҀQ}!Gm
N*wp-:0=}?5]@@(S5lS+^z[JR
υ")B])AŦI*oT o>U)!OK+j^@
'Jk]iUyw׳5^.ۧeBF&PUPK   dO\y  m  /   org/mozilla/javascript/regexp/REProgState.classRn1=N&OmB QH6,@,"U[eQuL%
bĂ`!|ݰb]\k;]F9*r*vX	Cu!luK(T@9(xGGOX/V5{;q4KdXMu49ahwʸb	SH'jrF뚋ZtWVNb'2Q=eB;X:C'2k.H&_ȸo?`ghgL.$꛾/ut&eohމ9Xz.:ɑ6OSދ&qiҖLcjW
6g;Z|"*Xqe96hj 3#
7
in-'vhX)EIq^
).Z1%QϥX|_̩nYWpk,wX??.x-9be*kr,#'9K2r[=V
PK   dO\e/  +  4   org/mozilla/javascript/regexp/NativeRegExpCtor.classY|TՙyL.p!hx2H@^+$a_}ZGOEZAȎHvn[uv+>R+w<d.I]~ޜ?|,ytH=rM0j6k۴?5M66~
H|hMH֤
.gf	JF}S@F,7"1
_.숪$\x\~-bh'j5\z:AP,0<̃BZǰv~\uiX0Z//fej{"dCa
c[FC;Cn{]ڠźaEFdU'F)(h+ףame@A2~U,c a1S)wb<J2LdhhPQ%XÇmT!B20ōoS0ni8s[mfr1ǩ(0%\
]T`>CQHo1"(U:0(`k9˛1U`]"c¥V+h~
4U1H۴PB_0aBc_͸L:!Jو|%kȗgV/	=GPq?oW2r|!@ۯa t{:FZvDk2F$S\GX	Sunܦ.BY!3\N IIIl$DFj!"&!@aRls|՞zvtHء\0܂ZuHhzSWq/)206i;b5aAۃF[jy(Iܨ`'iCz!n-p}&mԷ顊 Y8y=·P
PqX ϏF^#2/|G~% "kܭ|7Du1ko5>O/(QvTtQnoo3~3Ӿvhȃ񐄇<¯	EPF.|rhVh:(Oܦ#]tӇĤ
nVL7̘VW	O*x
N׷&yUie#A~;2t<cjk+xnTh޳v4y>]_#v}e2v3dH1i2͔qj\(UNRѶ\<NF7AfN23AS~U˂ 7_̣xkz=E8q?a<az//
˕_x|{Mְf$b4$Ì~%wy߻
~ҲJ2N1Lz 77c1HFB|HdxᎿE,yÍ<&Oz&4RD=#ǩ^r̋!U8zF3O$|F/%GV-D4vztv;%Ei
a-5SHOCĜtVVX(<Jzw
aEL+Pb[vtgY	"G`m6=$
I
et*C+*6DRW(V)aC)a{1B,{dnaѻ=b\VCB#2?	Z3NAmc&(Qv_=Eӣx&ʙnw,A{mY0@MZI݇"#}ZyJ)Zhߤ#µG#6F~<S"\	e-
W?Zk/H鿿DG8A 
y[<O"cNi5[ką5Vf
s%b4ibR1b0/(=%TxV{
ݸ$s(_@;I ׻MTtHd/-'^_RčyD8E##6*x8I
x_~oEa1EB
0GEVb
}G	ψu(8*Z}EAR9ک@7stm
^Q.}.o4{<^}Kas^vQpH&X9
7h@HW4F"[| L\#k|O1`q%è^k"2R '%Fscrl'eY5DjPFZ&S< g:bH--#"*46=5$"ʁ`+^Djȝ 
],WJ=?m$-݉1i\iTDTm6MJB4lMb@q4#Y&Kb$1D7т$hq
&ZDc
K^c)u
xrKpwkKff)ٌR;nT`8|dɘXK@۰ ;8{:
tgXwISXXXX#6f	66mNfQ7ձDl@]Al$i68>)B{|$&nRTd}pU:eYBF{-x%8
JdW[+IU;bT-iʛH#c`LeFY1ףP]ϡ)x8|]_F @"֭JeLI)SRm-!.$DZ0qܶ.\7_nmՇ'N#7BoJ"ЬCRk;hJ!RÃڳVpײ.{<Bz~EĲ6vANe1#s^ttx1׉G>YUhToL'Ri*OvQ'/QQgjKT<Kd*?g6R@sޣTSQyۍ['m&Tnr/!*Ne;?uݬ9{+p֧>&[~U@]ޒاu+>9^>|>S|}>K;o'
^oO}I

>{^@pO}YbW-!XS^
HށK|?XUg#M});8ntK;U%;N\E5ӷ|ނ=CǝۨS_EL}[cT7?Dn ނCeK,TS,T-T,T%RAPw>TS=Q?iRTWśr6r7r=lJBu)kxƲT-TWYV[YfY&G2K5ʢ IP9jR9_7G-T,TOXvW>KuzVnZoZ.,UjjB1AoxOP-WdR9^T#"R}۔).S*NU)#$b,ՕK-T-T3-T" R1L*ITfR-T-T[P.­,u*`ZgjPZjjB5BL*^
6
?4p¤Bi%fT]w
ߋBEPQ79K"T3,RMPE}p:U8#C/_0nѕ%NlE:ZO
 ,.?㿏Yc:>"u1N&w1ORI
Q.Dm%4t!7RK(!9<	n2aaI^`X!iPaQ^#`X
yye8dulxv^7皓vUh8ûب+S׋8!ά<n'Θllwq.E6břWq8zCbjDAnʓװc./`WҗAW3>/ךӷ9=/f黂A/堯栛rr9iM~=HC=[(+PK   dO\    >   org/mozilla/javascript/regexp/NativeRegExp$ClassContents.classSkOA=CVSQ>Pa),11$` CߦdN	_B?e%bؤqs<o? <fc1zOwt-J͐[Y=,ReEw{g5d]%|qm4^n<IQED``
0Lt㔍iЌwεFt7L眍yYB$ac"x,~Ƣ0
_~
,٨BuPh@Tw@!}Etl3l^i
}]#7wۧ/F4dKuzǻ!ӭ!W`^I+B|'^IpYދ]:PQ%nܡ+lџ%̏U@d{ddkrF>}A.Evs0'<C5gz_]B;[k(YuZY.kOxH=B>tZ _".PK   dO\v   {  0   org/mozilla/javascript/regexp/REGlobalData.classOAǿӖ.mRV@
 Uіzh" ᠧvRv!hb&O&zF}Mfۙ>Ϸ\4bkHC!ivӼ[ϐm_ek)#!#xM<Mڱ<'b5oN7	rO;琎\hZf$KP3WbѠ8}PX=X>~ǐjmپej!
Sr-sZgShBU(?/0ՓWJ"`bi*	[jՅ6UnL<btF&b;(TI=ܨv_u_,T*WiI;WHSz,qS%m,;R<A11x`'hW}'"K/4'1Xzl4'hS)LLހ$'4mp|=YL(yQ0ߏ)]5ăLH,ӅeFgTu219e_c_A±㻹'5Uxp(W0i|eGһ]
eg>PX98$m_.t7PK   dO\]&    8   org/mozilla/javascript/regexp/NativeRegExpCallable.classTMo@}8qܖPR>a	*qR\*lqq*~.T8B%Q"lώg{;3?~r۰P$è=;"R؍dW&}wߋՙ<ݝO(P_^W[u|٘B4^_Q;Ҫ洤yBחXp%U6=az-)D0eOv[^u_uN{?}6	Sl6&0 XR:2:mn
?"שӊߪa{JǕA(DgAixf4kd>humL9*4Psoċ\1y8?M_m>0rW)k
x7a^]aky 939\>.b(p0V7D[i/.ꌂRP-Nް3XWٲ)C)5=dRXZ`Xlu[N{)!#8X}\놫>˸ɸÐg}PK   dO\/;    >   org/mozilla/javascript/regexp/NativeRegExpStringIterator.classVkSg~^r`*&EBP0kZ˲e7](vg#5kg:
(IE2C9yso w	4wrfydZYV5Ow͊qVLijZ%ﻦ]
W7	m"tj$/E~4	͟{A!Y`1c6gsKvmŌL@t8]d&퀂6$Fڶl
tW3zG$zwƎGqr$,l׭zȮl9s% J<<oaŲfmSw
? cP:v[E=(଀$te'f&a=Q~m靵m |ěȬ=o,1Obkn$lOc0L"g7
'sM`)I_RpP7S_
Hb&0`YW
]PjU&KL9I\ؿ)Mסa-QG
0-%v_h%$R0<8m~tAv,,	VPͷrjUV,yYr\KJy/+ڑ{kjVp=ӱg'膙$g/rZ1B@(dgF
3#rOJJ%G'ojeyplן
8yS6 |ŧ:/z}&	j
Q:Oޔ7ɡTCJ)_u-R3ڄ;ߠO9[|}NV	k&m$\As;+n~10LFnD'>Q489+~ei3,ۓa
[Ԡ6&4'FWE=;ĝ爴%hY:,oR.C3c<i-X"x*i$W}Nb[x͈o$"S	 ]BZ~$8)-$zzՁ
QۣRcU#ۊCn' ,
=r"ycad	ɝ{,o,m8!j3ҖiH\Nۖh$E_"CPLx]}'E;LGOWi?C8AQ}d]?<𨵙UqqjW\yAiZ(Cvoo7jGnGJ|D#T1#K_ԯQ$$0nn:V^
Og)"5ty£K):|HeqRiv}47RՉq*O6c6cXQ<QīpzB(PK   dO\]P  +  -   org/mozilla/javascript/regexp/RECharSet.classS]OA="e?jEhQo%$Z1iPi>2Yf)"g
&gƏa	QC&;ޝ={oY1An>lm0.J%CzԴ00|52ph_edFl(l}w3ܑAyZv/;ruCU#v"8
'N=և&lL	M'lDaxUCe2Drwy+-*NڏX(0L$e6<;`M#=	L]1Ɵ_.7]MAu/F|+KzڈubxʐiɸԳKs/VjR*u\Jt7[B?+ϩUǩF̘$?H_86®},@RB'Dd
íÖdmq(S4yIavu&9ڝ?\<)$E$<f2z0GDi3];XOv1Cv͕={8&(Ӟ ~AQ3WL9PtcΧ.aKZHT,˸	PK   dO\TIO    ;   org/mozilla/javascript/regexp/NativeRegExp$ExecResult.classO@ƿ]([ZY@@@(n%%C02)mz!O>Y(.4iLo~g_,ណ
zPO{Iz/|R0Dz(/j2NthCik/q[͉H	W4C{'@l	wέ5%ԣ&i$bZƎGj.vy:JF0J	Qd6^;cJU/C>O]^l'LvLL;6d)PܖUn9,v_2<8hy@PX
vflfSJ4pWTdWҖ-܍;#IIEqĉֿ#1/UǱ'3tn9=T0tT݂*9\>П3l̾NB`{h(SXpa0fM0iͷ0&I)>0?`1`ń!OQ&LzEe:yM_hΥr+|#D#:Xپ]ϼ6PPK   dO\	o  U  A   org/mozilla/javascript/regexp/NativeRegExp$ParserParameters.classQKK@֤mZc[[+x=Zm.u%Mf# ?Jē<w7 X`V	;~G#|p'Pܕf*.&2jG7id}%F!\{q)FWPXhR/"wΔ8RqP
GELf8#a(l=D7惐2^'xJ;i[I{P3Ci0Vo0+R}ev	
y
k	<̫喑P';Mލ9k5WQj61z=؀ujljbk_m7ag|.aljp>PK   dO\b    *   org/mozilla/javascript/regexp/RENode.class]OAP("۪rE0$M5`zt;lY+/ 8F7y9=gg}slUCBE0,3\
̮TҼd7[2fQ.RTIt.Ð{kkO@LcpC.XĔBn.C)O刼hb\uFbJhw"U6nLr}SNyN*$Fes#ġq{7S52TQupCfB3f(8ˊOĨcjJGiܧzwߏ*ЫpP`TIFGІ-4;k^I%d([>mkn`ƒP9R}-^y3F(%_$%l2߾}yofca.
Ȟ9[Q\rx
-o8-Xƪ5x,;ahAo6[ik|B#Y9<yyB}.V=b	m*xxPK   dO\e.Fх  g  ,   org/mozilla/javascript/regexp/GlobData.classuR]K#1=ikkhPoQVXW]
Eef☒iF+DaeoAi 'so2-TPm`u>y^D}[̥PٽnbZ0lk~JХb#aT::SD0C-Ӊ .cKW52O1Lrc/c{x%Ϣ\7<RNlD7-һ.KaHTvDi~vW"a\nsu͍t;9`ӛ;#VO&gҥ/Ez:,:Y])*Mg1q<~'GHEK>f/ B_T1gU8\jiPWbkκWnPK   dO\*LZ     3   org/mozilla/javascript/regexp/REBackTrackData.classRKo@M'61>x$N[(P(jʅƬk[U		n(~۠8Dd|;?ƭ"RH`pde(=w΁tb]w{Z]@g ڇ+MҞalG+B{otPĂH}Z1 d:'&c"G_>!Fr9qmy)=:T^֥R91KEojס9.1{۳$YGX/<ɥ12(H31FjNncczx<MחÎES#f3pKpЈ_B{id(~G.*orOv7bN9I2ݯb%"SC燨2֨Tԛe~9w0
cV5i$*FV%jU	.њW	%h|UVB0_0߀oQ6a|GOX5?Zxcj;Į>޺Ҍ̥5#{fd0Y*M}PK   dO\U!  D  .   org/mozilla/javascript/regexp/RegExpImpl.class{	`UյNfp *J
U@( \kK[[:TmS"Tq @UVvUN|mN-EMI=k>y/A!+--]K2!L876bp''6^jjJLԩT[fb:٘\6qn"Zl6N4dD5-*UAEɜhԚWbiSd	`ViM4$fpɽz!w[C1]9hJ]Lar0T4LpO.Z4ut"a8F:bA-Ք?Sb@vgdT3gk6PXc0Q1õ:sTkѷGnQbcR	/L79TfAַ%{)9L'jBpGOԺD&C9Q>&98ixͭ
T|x`(ۙA4s^$+9(s>Q]T|gڞ|d`_s
51|'incS1hs[O'Wtamvpj͉LyɶD}R$ᴵO٫{wT&ʐjL]"Nn]\p gc+n]Z}櫛jJ4G+ih*MM-\bT:y8_YݖN)9T39aQ
.EtNL8!yqES$e S.iN0f *:Z3tw*ArD҆eNbja
!6.qЄFSd}ռJj&(Vm
\*Mi`%;8;D;RM
ɴacKD)yqFW.'H?FEQ|i38魭MCQpsyGc$pWhrEG]4|ոFWGm>gz>oz7BR|ȶ)ҘYKn-Y]_
>PSS@4t#Gi:ܡ>-ڀEeUѵi`#6QmtW8izѦD{,+~E0f@[!muҩe:W#xcV@D[[{ϠREÀlSX]0'<댔WT"mwus.~{Akۜdi` %[x>*Y߱TCʁGu71|L4u$-9`leQ˒yg9/;xE#Q[YՇk+hӃ:itT cr`݀6}46pKiZQ8{6~CaguJN\rh:Wa!^OYUwk6w4eRM4GRL((C/+j?=τsX=y>
:!A^̩0	yϩYYGJ,a	 K識z>"!H	\8ikԑ2w3mTfv9{cb4s$_
Zdw;))rdҊde|`aSS)5c¢!bfRe#Gȑ&Q?Zqq̕q-hώT\dK	#4)uL)p&$
Kۚt+/Kg7U
|0fH-_hq?{T
NI#e]U{lZr-;roс,QQ[$۩I=)*][TT[>
7$ղdڿxmM)5i,kmhNd?)&#_h_61+tSN=9M|6-M4)|I_L fiwpf3dOvƖDn."+NyQyʏ/xڷȑ7 1g˅#MMDӴtcGs%#`30ֿ3ېlϞyB)Wa 0h^L/JVsz1YҴl~T1P]eFܞL{ހqMA Xe#v5&]N2xٿcjY}}5y8a4_pt/;"gǶb?rSILԻ 	[M涫U&lѰL뗙r|	mcuqNUMƥ>c,Ve6aõD%g&ڌUr ,j	^+ы[{3ڲYZMfLT~fZklY+5;!hU6
ՖfVdq&NYY)Nd,i*xm/XO41lgTe-wsf_>uP_/-ʘ,X=]vLdlD9tt륙e66ٲ X`{[YշJ"`[CbfXzkͿ@.OQl7apI8G2%nN')ܸ 8=&=Nֻq"MS`Y>j)ZgJ,ȟښm~HmϗyayE   X~bOyC~v@Ͳ/Lb	ZehpU?{?-Дlt[/huDu9;LkySҒLl-A1f;=̂-fsa#eP{#6Ƽ;ξ2!k5ϥt,Yg4z>4HoLly/YXV7*5mpG/ǅ=CwߖFYf.)n|-I챔g1|A6d9%Ҕ%s;RV^؎[tTfi1i-Sjc)@+$~!:3+8fJHh(orʑFoR;eKe_*\OO|6TVڊ^b;ۊB?P粿
?^e+ذ	 +^е)SU:^{U]|heo;ף&:a7{ksHlUTG:ڝ(Qm^g?kOڎs&D.غPűQ
䜄	GRxgc|.qm9^,v>Hߊmi<\7mEX[ѡl(\يqWCbۍϮI[JUy^{ [򼨾򭪂@UVnQn@UAtݼM:6na7*0C{Zn)%w'pB/7l}[qU<o0=
\-l fDU
sQ$>{X׍-ntoَOSKj72bq,}q8U4)R
p2.t8nq.vl|2Gu|,, .aXʱ Sdz~eLfz\6+ȭ{RKeV˷	y	km|Jç7\X+(Zyr9kV5nFk&nN-<j-mVnŝV'3˺q0.U<~D1*+1)*D("YMTg{oFr{cP> ]a[.y~R?a|s󸇇S,ˇ47T=}TV|+d9x]c^Yx٤͉
]w4^>KrիC?d
4AQ%\0'(K?xmXW@+:Ez"6c]Oѣ>K 
͔3D#!m6DslKN4}]N>SVof`3/?@Q)PZ=(HS18T etu|g'dz0pW.v)*WY3m'..߹	EϮ-/6M.\uԳT,!腶KG)0cTlxtt;xƿF4x
9n.|4
4j(pTiNYI˶eFUJFmaJhI2%5Ā)@s	5¸Lntz9ʈ(5'kgON?4G85\/B^ OLa
K˼AWG5R1|+ eҷheɫ:?mU1Nl@$!܅
D	27_{b.B.Pv,ϰ̶*ǋ3NCUe}X@I7Lb:ck]ykc3c꯿v
>\i<W}_8FxQGTױ?zM)2xW0|	o-;.OQoJx_r_RxC*{9Y)+4`?C|gdF+s{Ց:tOYRMASR/2%U0#l
lRL/MevIc)B|Ĉ^h-O2*M{3@S?d߬+n}4OYcbn͟*bUԱ·UJʞo}v@p/o	f;"R
:r&:r&17ܜUgH*֑>]y
ڢGS$W{
@U`%sh`tڵ$l(S|r 1Fpq?é25a2
Q/4j,DMGbLgd&ںQ&f9wu
K>-ǱH2
t)3h!h3=w;y\c`}_iުȅre8Cn4pS\Gܗ/s_6g$~Z)}!SZO],٦A6ZIfwrMҿP
o,υxVmO2LMSK μveW40 `
^ظ.j*ة4!PuBO槺khUFڄ|}|fnʷh
?2r:&s0RΤ:B`KD}t1m%fL)c}N	'$5VV
bruXw cjOD(N0^ԧ
CJ:X RS½(n-s8$<NN%X"2Yu:&g*&T+'3uvУwylVDikX*x6IvO`OqV(r\qe/:1Юc~u)yO[ňǑ4UZ|jM-UѲ
t:ލn؋_
uUaTUwFEs"*;{vCnX7Y@^y{,t#$H`EwQdQ-떈!Gy]r_x @+THFM_R$Elk`Ap9S3y_^Mx
^$|eġE}?QNCtQ̕[e&v9Aɉr']t(鎖ݴ{*b@ٳY*cЧ`lJ;dcqǤL^Py@KF^9# 1ZYW@ao0)e dVNGpH1CA5Hɒ
4
/$Ox&VvX,[%Lb}P
?y]Q=
 ,~4Ň<Q!bl,<\0- l~$ڣ0ܵMR?.5N|nQP^lal@HyFuntު.C;?;;
O2U!Q
]MnVȏe:flޤɵz^,ۇSN4Gb|(,胩aV
tp$@+nW2z}ynAU$	qzq'7eM篎ۊd6ޯeW1Ve&v+nԚۼEEPچ\!ODx3Y̑G<ryMɷp[ /G|;%jR@D_$g*~!?Ox>GP^Kސ\yK2RޓY /x7Ird|A>4~vƪfTƭm;̥R1}?lwqfڙ?zٗ$OZŔoYz,)Ye>e RrZHIMZ1$5Huੇg;Z;L<G=4S:҃vb]:q:_'ƂQ a>)!s)Y@UPCauRu>v"^-
WY7W5ht܍^S]z<48ĠuUAx!ఆ`.|guj0xrm%w]D+.Bf#X1cq+ӭ\̶0GUVڭ!5zMHtZ*ƃmTc(eN!%JLnJ@R/,R!-ʷ gcT8H4()%
EF
mzc4-=GO?`8BϝuFk|KI	¸{{Sx(Վ2f=Ԏ޼x1e7c+SKp#`0{gW^@aNjJNWH#Q%srM^Bj%0'^-OY^P|J/HmuɝCI-$ɸG1.Vށ7ʡwq7WrƋhiE]ȫrnnJ5B^<1׉^A`Ϊ!*aPy>;lsɽ$ֺ'.ru|vF@Ub4+ҠAkռc
eUĚD>'Z1:0ϪF5XCqNJkV[ӱƚSyk&h:k6N<l\<k|:ZM<gYŲ.QVLrU/ӭi-K|IZnȕV\
.yкLvZkY}:fqm1.DwwNM5	&ս9K>\oj͒')5KE<RkR(V\nǰZΐK9#5r|Qҡ<wcdwk|w	z#Rhy;wOa2<JE9=N|ZaܻSb\
7Ndo5EM;{5F>`,`b(r߳X).Q]7 q
XcjopT݀_#d:q6oc;5IǍnB?ksU9nN3gC$`_t{
Oo&neTŰ
v
당:J/|z
mm*وlQL\Z#l!Yw&iMߋ}8tZ<!Y c=ʀZH&tYS
^~׬3mZ;xz~?Z;ɳ~/#?]fx/!^f*-1vcҝY*14%)eMiX\jI jJzMCXfy2T(E樓A<2hT06CwI~L#^мB~bn9iurYbˎM[AYLNe8}f)
8YER-gtdV<SYERk*GrNo*CYY5	Mmmt.4~
a|/tCCyk#o˻PK   dO\D8ڸ  [M 0   org/mozilla/javascript/regexp/NativeRegExp.class}|TU " B:"!$&ɐL213+X@DbN U,Zwe׶uu
w}of^>tfn{myݏQ&p9ƚuӂ)UHUc!:1PX0
,iea	YD%&M@c$g (M,H&<>GÍVz=xD79>lAfTk:qN)!ctY1X_IJEw-,*/c8E_F߂ɠ
G4چ<9
`d3	DѲp7!e(0ncC`=+O	TE1sPDiGA# Ǆ\`$Q?녚d>wdS\⯫cShcSv$7ArU"ńńL#q+4
ZÇh8
&0ق|`;_؄LWsTPP_m]q?k~L7hGP\WT҇wĕMHs0Ӑz`#&&\c{0,p6JMo8;jq&l"lm]e8T
"	ﾈePn"'$fquթĤӓ\O`	T00O415SxMQ-8	NFIGՁ5(:b.REQVL^mANI@@	A)]_y$*:)#N!YPaNF{[{ߘҎ8Mn;	!bBԂ&B{v,U5OP	D۳@L8݂3̮QA"DpSc*lsKmV>ς@(:~GޤyЂO4lzbTuQQ6T+K0&ď-D#!TnP܉_p]`ίbo&:腫:Qoh# ;ܩ5jH53"vY7qtsչNFwl6،ӆoV_! D|lY
L#Xw"P=cT]Ά'fҭk>`ʼ I+l[vUvN!P#(*ReStS4m{{NM}#)vz}'7Bh-ϯ,xAkH6|tuNսG)VA
;>~قWU@US4.	ojǎN^ߚ;ހ7ۈ&'`? "I>݂]@bنpM$x>0C~h+F,$t`x4uSRџ؂OS6uDS?3mz!:9O&ق;igb2&:P}E-(_B}iWԔ+=5?c~"
+,1s|b|qR;=9	K`;E<NLbFق"3CBc%1/&ֈ1|Tlcb'b.P=_ra`E$h04ѿ$AR`X,֛ǰֶ{vRSS|]
)URPxf8e,֫dE a`
hRCTTPeül1Y=Zh0\XDhI
&
8cM`Ы(nmmM
N=7X>(TbR˦f;;df`aQi*Xd
}壯^Tr.eeEˋʐJ<x|'u4X;m7/鯨tf⒙VNP-(*yť
JbI'`/XVPR`a¢<-mӂvbqN&,CK*,;',
iWLwdSv]a)0v6*,VG$]3[!nj(b0YThŢ	`3xEAeD[:3($CM
 JfGcNccpcTvՏG;Lo
Z0ϱع<;]h
~~.r+XnXRq2/-v1AjMbGFXfph&,:u?R9^v)]id=EG]]K#8qTznDl\[FWpmcҔdd-v
A
 '{mON:6fJXGJ_Tmef^Rmk:Sdڨ D"D2cmԀ؀NbSi`0كH}BoŶ(a!k3΂!rZ.X|;6Bυ^ԟ{a?Jz䋍"랤${دMl_h&=$xeQO/Ǟ
>8>	ET6`zq(Rs:A,b#
5P޴[U
`=C®UBJlJ
b OB$8Ėhh;d1rC#FFFҍx٧O4?Jо6beh`gFu0ޝ=}@شǾW4l_ca̯-		YnGiь%7PÏј2{%b?P3JuA=?Z'jo]Vc,ΨLj2h)r͞!6
dEvWT ^=ʪ?ѣ4jbbE{Q{rmPM
rBxOxok "gaь@G)õ=R|pj>1ڴ%/&3-ohDkBE#	kaL__Un۵apGh63Xwz|sx.J02$X(4m-BHRZTQU`~ch@1i{QCC	RdWQ`\fG|OH|ŧBeMhb9h+2AGT/)UC)->R,ͨHcŏ%044$>|WL:Rh
p*Zcta| &k-BcO ,M
U*,<Hd	ʺ<_nq?-H4]T,ٖ1D^#j,^K0*먼W<d:ZЙZ hmEuPSSg9G9=Pm/mf:hcv yXdK"=Xw{*~3.ZgYl~^tī"agzsЩD{u}\~/@MyZ~Sx_0`	7"QШ]f˩PN
-28WZ*QiZ
kM~ů'"EcI%2V0_o
&$_"92aҝ~i5c
${of=9ڸ-z#%.	IY{SjW*$xY^~K-Q';;hqtLqM;.ܦ4gUo?pxeSCz$nT_:>(2"(i!?fljUkWEPßbp^'NşPGg?E؆횪@xh<YyPH5C%hs
㿶5PT%Ltakr_#wyv1-ڕn'o_ uy;8vMac` (#prA9i?X#EI6M 
@D
*g8/zQ-fW_YÿQ7 0nI[feA$RÿA¨C~tT!|)"L;	R?Z'`<\
!d54#:/_)%˜ukxzN|/ebX"UVq2ܭN1گ8љ:4%#,*鷭i/J6pNBk~"Y~gY(&ThiɄhAZ16q
4mDZ_^8bd%:$_`,9HyhiP2FFT]F1{|^ 	dB}Ac^~&XH1sv h
kBdK7j굨TTbZûShK#
ЁWW;x&mtp6d3),1Kl[ŚxtAW#]rUlXA$Zn\oTxSc0ĽE'	W̠%HT'Su$IJfRlXdɃ:Һ˓	hB%w'Qz(K>=,4\j K'M˅۳fLDlje9vnxE#Tu''*wDE 9B/-c+,QC47ELd0ZC||j,d:.Ę`=R
[Cւ*4dr4f{'&KQRUƠJ!"[ka3,q8釹^L?_l;d~%.t{)RzY%.ETAZ9B`#*x2#.EQXvUf̶5r喸iJ})*K\M,	B<Jk,q~c
Ej9&WpqX/6ŉ1n*j7[q+"jv!4봻:2h-RBn,7VZY.S]2zj\~R#!NCH|%zm_g>KOأzY/%YO!tvK;Pke}>=bGn3A	fţ}CYqMTud'-!)iK<#Ыᘫ6c3;Ꮚ@nnlҞU	176rTMte+X%2NCKg0uA%~k)mJPΛxKiöZ=1n(ɜ,=\D'iptS`:DYc*fdeDZ32$SS}Hj
hԆCdImi-^V/2}'F_A$ϲbE$@KK|%N2)R;åCUv3leG,O+vƆ7V|GLiB k!* ?Ш
pڵDқF$L'Mx~IaIIFDR܈TÒ&	>Ǹ!5#3u$je
V1$/j0mtPEѾBju!: KfJt4{Ŏ;+qӃd4r%%:mNz?{8zAc>1%ICMy%#z.*j{c#d)s-Gȟi{Շ(KBѰ>Ik#:qQq/'`NW\]B4<Jğ,'|SNTaݶ@Cד^:S@8xu]@`03g60,9K>},uD
j,fWrnvD",AxlpnrcڻC#gt$W<F|WnExԞ3Wgt曠E.*Ԓ'ʓHg5UFt.1Z\N;iӣpDMVđJ)aj=;֒AysILk`	D،ꐆ:!eF-Hi5Qђc6L%WŁZJMVD -y[z8eɳQ#j	-yYw^f$(BҒu,PK
8/8x鑴I\)#!W>#!G^!̾neEU+z:|gM^(7[CL].vchEؔs-[BHkWJwl`F;,&rH;W䝖Kލ(^ok>+Ft)mݧi^1~K>@#JlID]ȇm˺pupQ%ط[;	']l؇~T}Sr/=aFz[	$2Jz	8,tЋf'}YS>g]_//"Cas
0cexH6KQZHD%_@6\wkQݩiUqWk|G#xd|
eEx$JFF'{ϒS9"?DK8V1Wt?X#*{'.EBIy[NG~vp%-5Vט8.PM0=JzWl/Mֿhap\+ߛK')ؕi_rNɟ,٪؋!wvɚ`\n#'-%PLJYP&&hO;(sX8W=$K~Л??\W5xe*{DFQN;˗͚t.yT5nZclIǂOTvTѠCBho*2"ho8X
EZjF	@4:ſGDw2IK
%T*()j @٢S{5R9իmsͳH-2F[jymM,5me$QGZj:ʶUϷ4h0'Cyȣ,j2}]5*&IjҸd04FMCn$N3BBX!4)1YjBۨe[; I#(ъUsGKS;t?KUz`8.H-Hz,9tVέThmy#O>= J{NI=HZ\d7֌GGcSJKUYa:<WhKw{T^!c/7
47ЩzKU}ĭhMP_{ZQS?5jTSE-դV1EZSWE=AR 6!~kFW75oնXZ֚4KNWWsT7<8'E/sXqvuWtZ&j&־R.pjw-uA~nf/hëo]n+Hgw,^UWMRרkKlԹw%tZ%Ѿ2+tI]oԍt[]e]-~CfKݢnA!?df:3G\`1x#|LP[,uJqq1UtHԝ<>4XjW/a'$?OQ[N=@KYs!K==ҍ};eFR"4;GG,[6F ۙ?<-hv	zL='+fWՃՓzJ65hG$m/7W	JV{Yog>fޘLw>J`_;(X?o,z7hrF=ufDwU5֮tثzMap<?Z	OI=-I~a,z>{b84G޳dw\fCK^9^->ӶCe?ԧ3zR30
g#*hܣ̠Wcm><J>>W5<i"X3z!U/a*QJ$׈d@{%j柆|s^6dl)̤S-*)/.).-d<s~yAI	yieŅ.4m-*-.?SWΦEeDゅEO@|ʊ-()6
mLӯk!Ȍ%`|ݳӏjavyVJX
F~VRX[[}-**OƊ׶(%U,h!nl
RZ
RN(G-JK)=)AԘ 50^'5ֿTZTX ^w2JIQOꃲN*W4=,RŻĀWF&gjJgjTC;%%,(YȌMFV%
%-'
*()8w<
asU48N`HͳXs8qjXu;cc
'9I=E9g()7a('F(v4˔<AZNv̊~JvY.܌so{3VZ8gBbm'ҙE',+)*E/^zI7	WV=^a?I 
'G 5}: s: 1eť8sEHRHx́Ę5A!gGlM@هY{MЀٻH9g[ݒ252_%l>hwP(mT1Ҧ@cZ0$lI]@ꢅyDEG>;k8=Bڝa&&c,z>l=k:6o$NdmʦSfs8HD=@teGO~:Im2GO'Sjfe7zl&k m.8UilDt;l+d"K'ǝS2YGbtؠ].jVĜL%X#S%Qz"mAaGB#%p?ڱ R˙#bEs.]4kqm錿焎":ׁ#c'4}+9{Nu\]ig`Lʏ7G
iTR*}Ag>'gĊ+_:iEg}SB:Gv\KJYZQB-}5WȤw<5!A^EdEzP=2H{lr8]QR/]ҰUA.I$KNJ[zN?MUf5+?'D>d}ktt[0S)t^?WNTt""R=VmY{5`2Foxw
I5|h1QAãd65r\8Q=39Oua=~+tbrBk5Ҝ:d
9,+6U)*B
RC4P7c%DUc_hs(n
힖p ^G" .j,}#bc3Ӽ*}&6pԅ7뎌#R+f6O
6W;ߛ	E5}[FyB7kaf DJj(;|鋽l?CG.U.acEM
(F6(<S\o91|leGP=eAz}`:͹:ǴJ% }-*me!2jx<Aa2pw;L9$NA5Yz	!gHDP#i!6f#huMsBU$b~0bhҶB{& ;&>nѣ}2dkACvRӊIl#he4T$1MТ;+v1uWHĕu#SXG:h}X[x~u|Msy'f-:|aDf NFy:v=$&Q 72Dwb&biSr6Hts"W)]lb߲:Lx/UUS~:v)fvĻ>;C]Tm=:3]BэX=TC%](c!ӹJ	"N/9i,О*sͥ3ciˡlR_b?6"1w:~
޸&64CfǾ%^sAal4V1u+TqQ1zTA JNE3ÈbݔfBzghO*tc6۪Ȍ\E/N
ږca/8E
 
yB1p8JS`Ǽ'g{̍(l1oC$Y۱sO;	+wa]pNC|@ު
бw" GzI:~hFk;u,,FBac{norޅ4B:גutO/QbNO"d!x'a"[:1AcM=
se^c^3/8IӲE%=*ۦaLǖ^(ov% %}^:?V4>hvxEv6=&=>f"Tox7ͷLm>1AvMx~Uxeau򓥂VٍBMYsա@ٞ<n:r !]懖{m85Zֿ"6:w>uڧwzDL
؁TdSErb }ΛELssSAΒMo\W(

0 $课T_Smk5|b_7߻?`|+#r[!ÀD`!o۟ןmy*ߐz&=0b<0xOW0sx+ޮx:}1xW| 3],t#1~+>C\?#\`<HW|Gc0>]|+>\#1>?
\wŧ`|+>
]hѮc0^x+>E,v`c]sK1>_\/s1?W|1+\0~+bܝm/rW܏JW
.`|E[>4ji]~U6rҕOrŉ\q6rv5vEm_S;Vou;ִom;xNsI<8Mв0tU<L`YtБ@N-h^I0k%;!kdnlrdv¸Y3ȝ05s=X;#CYHf(ɐ`G8COAYa`G0nIp;
w@4C1	.X`)܇x8.؀z\<Gϱ_6'4~~&ڙ0
؀3>'<w!>(e'T>+Z`4` SCY(]let(0R)s!ېD:inβqY'U*5YF:G>&oܑbܓ`nęSBZf<l;#R᪑Ѽ;כ3_6C^=jIvX΢ɘ")=& н/A|5[XCjEb͐K.i'P&)Al3/,U
A!%[7 .\ E{$ŏa|G/o6/A"7B!.BCDOgiMLќs¸[ r ށ=S`1wz.&JUKv\p8Nx'ܰv͋cys{7qL _WȒGFF?a|G;cd*jOFpn8ЮA*Z joUvRЕdIu$N|vZwZDiƇh3珐?0h8?ĄkxS5<iiii$*P"٣CDEB,"I W'S.LuzuZ'zmq$Y#_E	'멿L|JY.eNxwF,$;4//7+Eynrj~w£es}同%Jr1@$q,rXba"G0cY`p2de{N+/+keи#ס6(ncȖ`b2!$KkܻN wP6ea񽨾"QZ(Cm}F,Ai87b
qB >7(ΤhI7p[/L&a .fz~+{sr2T%俔LHZ8gNW^hFrQ
He#`0ClRXXR6|$RDX<6ֱp[tYIࣇj瑽q׸k{mC7Ҍ`]zc`\2"MM
-cVc#R:56'0؄{mOp&<?Bi܆^\&/f3q_Sq07az!xonP!f'O̻H͠M!$:@9~c)*I)|,O
~?Sq
2[?_QGh0!ۖhs~ұꁟj\#7q 
C]NN[|?Fw:x1(F(تLcLOatXLfNĬ,o0,GĲ&J,{VF!a͒ǋ)R)l>2pJtc3dV`MJ7O\`0u'HM]ֳM41#ͲX!ޕUjʛMOruI]yuUK]yw]źZ71rw#P#z$r-ʵv#[rWLHz`ha[بT?ZO*s7ʃx>FA</7`#g27BL*L_M1KgcҰMCLLMcGNLk9<&2<6M`aiIS]hOC<3z2]OC JOMO>6AR6MIg7J؀؃V{骻Q3Փ]"MMˬuAFiDvX)nVqeSvn6+CA̎g_]})n6'=bzxR:<O:|WpBLH_.S3}txI3Hli~fs:&ь~f'
tOuH4s77cp?ِ`Őv,lX)8֟Ύg#b6-aXNd$6-˱d%TajU_fYdg;ճ_0ʮel΢l+[`#l
{ek4&;}bbp-vOetv.䇳8K~$Ob2^.Ϯjv5?k:~n؍vn{1vm/Mmvm;_Vk߲;.6=">vHc,a!1mlvlǞ!k(NgX+b{El`5q{]~'aog؛9x+>`?CLg~9})ky$?9CNa37r6Ver(kXpp&\^ȥ\Ǖ
$^OOrK>{WxO>^c&~.[yy?3T>@噪?Aj?L8>TMᇫ5Wsy*x>FǪJ>NOP~:OTe|OV7|u+Sv>]G'xzT/"2V4ʮE`32n's}-2ٛP@
HpH3N9/^Y3<݉$~y}CE݃!F;1¿9Qfga6Sc^ࡿ2e MO'm[<-ӟ\^trנ.4.@`+ᐦzr|ReCS]CP] =~1WE/΂e;1_.,7 6K䬪KzQu	8%''
ǄN!A8i@.defm+@jpFd4x1,4vVHVH
I]4ZZ#s K0#{9xO/&6ߍ{9##o&XkedGX}VQB[!1pj9>?]_鶲7{إKv͐M
]`=:AήP҉
Gua7HSh'؝f0awcVQ^J`7{N	[;ihw;y5Ulvsftcݥ?=FMj/<@Ksݏ͏|!L0/xXRD'Ck.Up9
kq^ x=|@#lobQLk46ѻΆn%ÌJF!Gau635ABf1b5e<i@{0d'c=Oz[׾81Mb?L4Y~kSl6٦a~H TiJ<v9$=vI.h卉JL4ڻÔpI^=ĤfX FE0R"0^b9[K121DlHc{ZH)FzY;$3M$Ы]iYX,=>9eR;isغ[!mŞ7	V({z6rwaa+zb`g7ĄmMW;:$v3%G;Gp%xOaf$l@ RoAFMGMjO7CW_#^8,#I`gO53(\ dHGinfYn\ rC#QxR=롿˓w'
ԉjtPq~,Yvy6u;y_J8d&s{/HBbxv9QF6X5o ֫Wh.OC{0Ks⽜x*~LkejQAgK\V/31^4AgϐthAj:;u
jdo6&x|M$z?yЗCp$_~1ᗠD~9T+~%~5ͯKu_au7S|3	w1w3R(Vcl2a`!A[t({UhO,{?^ϳ39}_f?׹{<'wx	^?Q~_?WOF)û^g&2E.ZG;1/*$?^0qrakG$6aiI$Ϡ-QGv'u܌~Ka!xxp%(\>:TQ=xI6zɐ2 C[imՍ$h[d8/-K؛kP-LVKap+vëmd3fY)))o?L0پiɴ؟SZd2G~Gc=(WZ>ώR&HmU[/|mvp1ǹ%hhϏ&2}vb(lSvJuHxp@W=u8F@Wt+YwAcb͎۠t얰m<y+g1ʿpFlz=qz_n[mt: 1".F) ፅ1#!UiΆUٻJ^l?dKBiAG HS1RA 9H$yB^w-Ŷ4l瓧g=]5w&˜%&ِfC>,v>Vl%CռCW	|=6AE9>ukSNY7jh}CͼMty{?&l_m|,}`3oJqFǻZiZƱrqYQvUQu쪇KLC=: !btOR8Jǈ`82X"jbnEQ-SXX5l8g:q.ع|v,.fQ9ޥ0)@?CovAK  '84^Ga(V,Puҵr~Sj|RV5z	Y6LOFf2FYd2:I#6AV޳C+ms<9y+k2)DJig&k~HgƏ|#LPN(
}8>3H
PͭwgRkP^3z#L7$Tx-P"nR	Nb3Blzq4f8]	(w{Iq?<-ԳE~PU/>-ٳ㷘2hVQ^=@i#R%KJ1B;ˎ0VNǑp<c)=;*]em#]MO^NNjO4g	dFyx
 D+ta%mxc'6
JVHSU{Xʙ썐;
KYrybEWA+.vPrģ0R</$'WP!I9L/~
e%F+pxX& oGmx*ރ/PO
CVK@.qdHZW(&^nCrgb7uDvނ'jV'2Fn5dG.hGHFFߴCkc[~OL8$hʱM#4Վ Vur, 9]S6Z$D"C Y2Y0R ZIR!~/ρ
HL""Og
F DCapq37Dok(['<35WNShPJs2E&LLdYptTv9-ElQl"n4>2f鲺E'*s<ȑCr4c9Fq0VN#P 'B<
ɰPb,W-C<N[x|cHRt=_p8x_hL$rIX/l)A/4fQBO`X(orZJr탹y<7u`Fc7B<*ъʣUü\y%#5Nߌu,YRFxY
(2(0_.A
=۪%;g|!Z-o^I^uK#NZOpB8]
wه(^H۴Նb	A2,R<[1Oc7yvZD;."Z̡&J-|o	RckINGGC;its'?sq3[N)	-ˉ}:p\4;s|C7tXl#p2.7ؑK7,\URbm3=%%K܍r	(YLEÉ'A\rȖU0NVxdY2g:\527$O2[*Gr
qy:<%π<>'\\Y%˖a+/e#lWjHculA
4!.q
4oN(n8q<PJ!mGl|'ȯ|S{-2>siZUMͤWjwߏP!M}Ia RR-@%i@V~?˩Kj$76w;jQ9ū%|"9=Eptb'_ `jvdOkn}4sD.[.'-Hp7 y;j;`܊F˻H
=(,^* 
ʇy
FB9!#"]fF>H8d+:\7^;W>4fYɗy	"C#m -̢L${r(~g;q~sQhwdh'}{{{{{K;rpH[kYT*݅%vxW. ߺ|+1inOH [pw#Aދ1җa|^"oH;ȩ§=+ZGLʏY/	r_X<
?
8r''6-y3l:,)JjfqUŧ85zy=hDn@]<ȿ#rF%	.Ey?L$yHŊ,L	sꙐ@Bڜ%[Sb8$Th&?9XiQt+6sn_<eWs(Id'MWqYqekrutoؒ.̵]sfvT2x#TO|0F,*>PADe?\ej \z
75SC	5,."0oq!R^h1;4^E?rQGh!~z~=3
HkZg>&8b[8=fiONy>5k]ߴaKqndƛmFm:͐.׃l>ѸCBj<Q W	$PR#@TM34P
W8"+ak}M
GZp@\c.qnЊɪi7Dvr2qW?w{dKu,jRN)n>8\.MNTj -z&#\6?KѲW	NkC$|
,5jpLr4Lۀupf^Q3mDʬtֱtSNgU]~ڠl9lJ?r gFL-	/R@Y=2P7WTU<)\ A*F\A5!o{ZخN
-Cu<ΆwZ\:?~ q\pW-6&xS_Sa;m;Bo蟙_ws.Vcaاeatƌ0Vt,IΦ乵ʠ4gZ-V|"DV&J_Hh4Ǚʑnϣ2gg
f~NCe/9:cb`'|{7ek?{nߧogZ4R>t=B3q[

4d9d{

>k/sKWb/9'ЯnZ3$+[u'Y	S~͜m#?(ZVlNaK_KQ#?
z?A;1;'cΙv1ISlx;n3liugiF-!,8ysG]=(뮂ը":Vֳv]nf[j#Emb[vʶ~G=سa~ao}^e؟s$zz}ԳT/$kn2^k[^~稷6PJVV3gBG~Jߨ՗|߯?Uϫo[~_+Q
 5kq!Pc
SL1<b,o
#UTiOa֮^ٺw,^NTFKw4?fҕճ[VOʎ%1'鈾>fk!CR7'
۟xcp;$fVH(]hOJpHE>vvۺY\#K\#KkzF&>ҌAhwd= (3;won6E @( tA*
Q,*  
A!5
(*ٞ.v
;3wsisfP͇jc6A	0Tm#UMR(i!%d0$b#Q
!ǃQXp2
e4pvt5q!)ڙPSS3)IF%z&kE	j;a~V9dwhR Z.		aI+2a
Jk/>wkkV,ǍOvePB6WK;S\2@:GZpG_;Rm]|	Wؽ5.J%# 4J)z>Qj;fRl<·a;"y6}!W|V|`Wc,O>KgFa.<ڄ!_5Mzd$Ό[{GHnPt8v} Fؚ:YgU'0થPO
F=JM}8oN3Ծp.WOJ ԁp:5uUOa:g7XHBOH:tQ&}s@u
N%g璩trz!UV wW-\z5yYC'ȗdz#V]H$CIQoZ.RL&MRowH7+e*iZ&V˥uucx±
E1Pcv{-VtIINZ֐Un7X;GU]7ZH-b
1)(KMhXUz5qJ'MŁ&NZh@44q
fqc0ރmQi-X.G@G=4<zlMEI ѷMSz8xCNSOn
bYsο㢂:IW~$ QN 7"F
|: ibUW
~9/I
jgepV)G񴎡2[+>.Õ"4C`xVЪeXZl(zL9K-+r][mR%Mf܅	8։ڀp\6z&!
z*rV[˯d
`eV.{b9LNQݽnkׂ畖#'hn#*ۘ[0iNLԉ4$hJ߅ff|v?EA:z:巩[T
_)i8+1C$t²1Kh8,aжRlĘ%D~3[fsB)/ú\󴎑!R#Ih^.jꋹ3Khze'gaj	m/)kY2dMZ!ErmHgl~*޸ #~9T!!wjJzvڶ(

 D|Z:θ /4.H9D 7j9r.*I-(N,p[p|eeTWNn`ed[Ptڢ6q` 7`D2ФVA&.';alzLNRj3QEOu]	^5rsJ,HQJ\(*3>(^'7ϭ%ol\<Fɾ|װQ
rq&jd'
m~l_Qí1o
R_8ӥ 
	Z~8H?N0^緀( %w&Xޱq:qG0vj%w9C^!>3Gu,RjTz6;!qxB}PwS4>K5BMP_#4}p6-rr6]G6$j]yQP|~B~T# uPY_$SUB7z#5@FLb4QbJW2&4fȊat˒a6V_f9~@5~cd5㬉`M-k!OgEXgm嬝g*I~u?e]oY7W]a'RzRDX/ڀXڌmة@Oep6NclNWaF6Ful$Fml4}Iw	yv}Mo]v6}MTovzB14c(L+T9]as\e:J]\U딕lR(땇
ʓFe7[)ﰛORe?[+
7vZV*'+S;.u$[fNWg<vmRod+ؽ]>nYd[؃j{X}=>ζOq+ozdbS,=:gIY֏=ǆl{Mb/)l;.ejV=0{=>>Ősb5}Qlֈb?iٿAgmE~.i0A
2TM&uR!UQ&_ѥKՒ*p5*vw
L<R%DqFx4Pb@J&AW(hC$
		TIl7,WU~>!|]L!dgegn(i0nDI+2gm
~(ǄJn ICh׹ya83hph)BY?ss
MdcJrHqqQx*ո^_
30Sz/XegANnj{	U~Úv$m+wbW\=8&`Kcyߐ7(
:!4H3VTp׳!{\ֻeAs'U˽y#<m9tB9ʄڅ,Q44hiZZZFELm<hI zԬ~5_iy}MVZiT+Lջ?­FzrKp? ʍ=H(:|GB%s$΀0||<N7i>Z	͗j*ǅzhmSv迯ZXBN
")*X
z|u)M*.(-݂&UV}1ߩxL<<Bs;F=k;NGNg8ytRwVHof]$&wGþo
iM%IM/(73W8AA}pxZp/¹k,8(TR{<&`ʃ%!o<&|'F5	n*$QyOQR%ŋ q9h^S"nxj8+?K҄'iƓ%i6.j&C}QEėsxp(fŢucX-0PY.pDn
$1c-Q&z~.kaTHVPGpl!xDt]9bA`8ЀFn"=(=)=%N \DjY`hkk>|ZC"iHOjIքtN 椏ւZZ	ZZ+2SkCjm5Z;r֞ܤu ˵$]D6icZ)yZBu%hɧډC"ZON^R[*NzjHpt6@:K$
fkCkimT.ݥ6jALI)m6Qv6Uv6MN.] .6C.kr6Gn]!wѮOʣqڵm<IN@/[[Zm\$?,"-v+Ж<m9-Vv}UtVFGkYڝlm
rZwi=~^E_	bl/Ra2yIFı/O$=.E":27߿d0w1	RR.ڋoY
GÁ	ww1&,U&4XeA	27rJk0;M^.vd!tnbLImZ(`	/&o	фcN}f7*Ә<x SmHehzl	xX 9NPbέq&5?sKcl$|G**[<vm+7m;מvg`Rf0Spj9BVE$"=EX), 5CXr
*.׀­XڳU=Bs`kG7<Q0ˇÌg.*҈g<>u21
1t|.._Mp^Ē^+-587Q87ˢgbə󰻕%:ioF0MTZfTZf
@fٙcpLjX͖ys'TX3}go92}1*زG	&wQ~xhC;tw>EEd;jOof[	 	XWY:e	;URج!A&F0w4O57wr,qn,4k9~Ծf}ڏcd/@A/6+7IИRcD\71¸c(lE)ߘzPr|uB$NB߰2'h|鸃W_qD ?-ߠviG?
Id!0W' YgJ$^^¸E;.\ͩՉ|L.ŷ
:h)`qF#TƚoU1|㨯FÇ	|t7u2um8YwgH=-7
;EA3rbNuʨSF4:NĮ`bVAN|5' 95]W9諠1޽$z\ďb
(&Lu_umE<=Ɋ}J^Zg>ؙH$oc{F;NkKSlqBz	Rwűa=^ްZ}J? x[ޟ>xP#yz3o>0Npav%|>]RS4LA	i(
lH"	<i+	 *Tp=rA68aKx6͋k:F˴l1u\N-Boiu`m"^7-9jkU	e>}X㐝bq)&RpӮMYMr9K^">8A9fZ+Wzи/rR˺n@C^_+L<'GTz~<˓ϗfTvA?TB<h!@4|1_sX,S9KY"'TXȲ6:;^@^ի*p3d|slӇ mT8jȣ-).+%ET6x|*'i9@+^	>|jh_ҥ1Z>qތ%a|[jJRZ*cpл=moN(Q	'Blg
I,?t@(^J?tGEB
hB:OK+lς36@ WJ|uRh bZQxTQ3}1'֟w1TW9M@<Y0[e+wqW:c]*BkBLx?|pi_w̧55_ǸI(犀u2"=J Jτlc|?UR;_fJ8o7Af߂b/AV/K0[_7C~<UKjx]wgI_K$h:$?+H$mzS#R?D+ޫo!S}H.1l|;q=}4LZ?#?'fG
|#r	Cj><Ԅ'C\#rV<NȓP?`ȇ)$ \$I:za{wQ
7KIXCUiXAH4hb<7K Gdu
ϫ8
'hNuV⌋KP6ʌ	;"ňeeC$H T k?lkg*h[(hN!u%وLyJn?"WEv
Bu8$P|>I
*1yB8\QOnۅ2jN*0H߀&r-o!w|aܠ|.3xA^ӿ7/qv_	\p82!1O+b .C_
|;Vz4~As)-{{7:Ox\>]OK)riǷ.:y~ t/7-ObO	0_ҋ)WCQaBAlW-o_Ѥ&
-_T|%E*y?AsF<k&a;h}x;$*#!XY$"|fĹ@z3 _-	+>bۂO >syHXnE?u[yzbݗ]"ڮBN2htm"ڪ xz6S@Xm(lO=毤RJOVzq֮**5X@sW!/RU{uccb;ƸǸ;UU1n1bɳ8ǘv|zyerI}qȪ1J>24A<~$b!j\c'}~b\xHR"fI?@iV"+lUڲ*j=	_0FQIi/#M	gbBN>[b[H_R-̿[a5dHc9w$3ʻ.gz9/TܐpGm׭Y|9Nt^l@:Zaj;H
o
jQ ς 6ln9X%vc
%"eR8/!_Bt
wA3ǩکiz"39P1Yk|1_-wq!q#VKeK tÂ
M
4\8ňA#F0aQ.20ȅ<h$hBMIc%iiF!e"}֤іf#S2Hdљ\e2J4Ǎ^I6zI8Y2>m""c(u3JӤ0Lc48C%]kƙc՘,m7Ζ3ΕaLӥύwEҏR1SYa̖mr9Ϙ#71O0;W˧kyuBcX /5o3n0n%6VX&d,+w;/7jq'U56ificc#mfC{i>ɸv176:èj<JW;c'dOc7m<O_1^o/ѽcx`E1Ao+qceSwƿ"cLi|j|f|m|0+_+*?)+/RW85*!A7a	NSQɔWMMyԕMK4Rc:dffYj¬64j!0Y><dR~#Pf3Bh&lـ1K8:tnO3ĺq<NgM+A[Lyv\lQ	snR%	`RNQ:JxDʅna(ŷӠiO):V*´<(d($A0DW@fp0̪BJK2w0*R8
x(wj_]Z`<WVq(Y%
%Em@
i|n}8;nIAJp1g"\BF/KAF^"Y	E!^/&5dQteYy A['X<v<u`S!.J/
Tq%ohDj4;np84gC'e!|ß@=J`\Ld
9>I&?Ag	\cUVNr~Z7x<*W%-ߺ2
CૌX&impzaVdZʚv`tlpGQd S]soYU'-o򓌴jEaQՑa(gk73B.Lʿ_@ Oq?(G 8Y-|$+jix;>8kmwV#t"i]d9ljp
u94AZk\2(;cV`4<6k}1	Q"0nRwB&X-[tI|'Qmqmюa8bԷ&OG]$TbVFLs:q{2;Lw2&@d@zc l}2;S)`wfа_
vaAC
;GZ[^
qK/w~h"%4jsh\%u/Ym9	cZ	k+%5pM
3k|A`l-;RvXùs8!ߞ33U]4IKJp"i.	)w7GwY/陸ŴZIX_tbhͧj dhy5,DD_#S6gԡdI1ѽV	g+ŷ)zZ'
0*_d-	L~HtE
F*P5'E?bO=d̷
F\ h3F wUFJ}"ʌ"5'1[K62#VNf~z,~cfhWu`Qý.5M|#&X*cҝMdŷE
+JUc'Z|&-&,G-ՍEq|K~WqgڻiDc8 =MX}[8C~D7ǩ>cR+a>-D>l7mX%UE8f,fCF7Cf3hbB:lCp2d=L1;t3	aY
]
wݠ[	1O^>0'f? ?d"9dCH}4I֛gQ!s4yK1Ǒ3?	=s"МD0'̳%<Gͩe+yRyTh^ 2/ښnlyt9Gb^!a^)M6JK7H+ͅM<fzVsTf*c.7+*9sVz,4I/͍fytW>Y1r!*w1=*]d>*O4']R56
]s'W3{?͏O(1<@4nYQȬ%ΖDZ2=R0ˡc,btI tEgXtUγ>]fu6Z
hOwXV{ՁEՑ~auY/VB.guW֩J_j
T[CEiLk2̱PZk1uxzLe5A:KYbQV[SMֹʽ4euRi]<cRf+.W޴({+ϭk<krZWuj[lfTͳmj3kZTK5jwkzU֩k:޺[cݣεU[7YjzzUnVQZ[՗mV]ȪV?S[;'ldeZ/d}5^bEˬ2Wk:`ɆXo?t6ͷ`X_Wl=-7	;={b޴~eWaMͶU-f3iy`ZKJlK޶
]maǵ3L,;K̮]n'k
vV
rvH{nBUHkkحOvvnKvucwٝ&vgElwջ=v/dTT>nۃ)`}=D_c`J{^f@zAdB6kk	VB
D?#a"<qǭM
!oXrO(<\dxZGYEgE-Ê4
1೤נP,Z᭽Ў)0,E~>-oCе,JχQ߫S[]rQx̉F~G~#m5)B,B˄N.l5eQGH\֚+pez v[qq[	97~0h#cż4(CGNBѾ
Cc^(	4{E[
J(CTV%L*R7Bɗ+RzPi髅SO#=owOdKCfB_,ԝ:4Uhϳv%C0A*taliĥCY	.=!0`n
!8^HGB#<SVP0BAvDϖſ/|2ykJ0+i_.ߍZXVqF\94i||B5
O=Q@0ƶ|LxzecAYG1#n-ĺ$O=w@%#(خAE[2|?4

	0ӬEwn(,&aIsH|eqRrJWn5,5
¦!䧣+-a%[]k3y>[&5z^_Yk-уMSn=?DJ3i!ԯ

}ܢr%B7;Z.wOp_Ym[(~0;9͎
sS >y>B=N/,fυ3Lhχp}=̵okp72f{	TKQ6m*2۫a}'|dkW|	@bFeMRdKZٛIͮ$}YdY	.\1o@4{_[eМG!+N'NC)|P
=A)D=p[8Ƞ/\y!b/QƑE:g&=E/|8`iryhG.q#I;Bn.Q'P!~G*Z8]J7XE	.Up*kE|GhJ[TR(=I'TѶh49Nd`tjnD%7Jq=jQڃ~4 UoW,sA}fl:>s+a$Bs~@"*:i^,%#֨2l_NW ~f[~J8	w`.\`!?`1޷?/ϡHD$q+Mub( h kګ;Rn~%3-R x_:O\B].B,~b$\_r@m!oV ju.IX
A o>K7g3(d@8\e: _|!*
2Xdf?#5jR֟|_LDDXAPh~hI6Nz޵C@9"7b&|=&XVoUa|u321o+|}4arMߞ4-Gfn#K
hٙ<R7p/	dXN:N RWJc[z ̫DF8FpW8xjVfrDXY	UnDNdfSqp$jt#BP`8jd7[Ƿ.DKxk&E­bcn7dq#".b҂0rU27	{F'\I,{hZ۷3kjsxFron^Y"
dov9p",O9NHTs|+0}ڄa-z t be#[|]G4;Nv$0ơpiS
f91Xdmk,dN:9Ƀǝ~pӘNR4%fs$}rSH;EdSLwZ+dӆ,rڒN;R-NT9.yLvJ{N5A8H[2%#5rJ-~R;T3@:cXlgt3Yҙ"-pJs2g0IQ{Y`5 [%㄁	NeY?@o1ĺqr>a]Db!/fVқu0~8ʃDXw~tW
Kw01]!&Jab11LK	v+-YZQ:'KgIY!eNb=}-<厠ZƧP d|w<KB'"\*sBxh S:qD
$!/GXViWe??'A	$.՝KP o;ٯ^ط}wJnM`&T|&4n-eCzOz?L?;r
<Cƿ39ڍ1<s	Lr.άhW}NS]'s9uV}0rEX~%&OE|WޙsEڦB_u(Ʀ8e}*JtSZ/a/Qz=E8 ARWQ1WTrJ|oU 7x|Oz_o?R^yI[VM`!?
rʿ/%\O[(w?ƿ{m⻳ƿK{nQ)bJx0O;)"`%RqG4wŧ'@ GU@[Ti𧱆?yG>"w冣FN8ay ԟٝgA I+ߙ[M
C.RYN;fs)pV"v$mH{g-I:夳tu6I&rsK;Af2ys!mVg;YT#xv&kg&gwJ#xNFoy*\m#W2ru\'EkPZ\DV\B#zO2F)6?ϳK(SJ"uWoc|	t|Χã>#$pϭJ Xs`GXDg	>Y,N7ֹoy	;NΫy
z8o@o-
}0y;iPǧ:ƋZ`SزHxT$X룰eӲNak
OWArL%]*ȳU`->*CtM#N5Hy*dzmt/v䲶	vg;t?vp
vaoX99qGhxREQZw7ԉ=zOe!=hR(p⃼2:߰jygaQ5R:8.<W.MMJ5aةb<Zl-COEk,V9eZ鬟:O|r+u|'k㷧ptׂ
]7}kuԞFAi1!(wA92pP9Ec8q}fAm FOQ j;GI.T?AE3rh9y68Ns0`-!!^4&2"rW9W<By>/*xZkqf[GKyJmzޡpL)>2~ei4s=N?X]et|_#;FG=(q?*{((vnkr@'N	nGvRv1nWvb\w/wnp@x0xO.w$<Q;^r«8x=w'Y#
`
r?F~ߣ!B0z0x|&7bZGbIOɄB*zߛ4#U
Gp` BP0C\͏$}|uD$S/ A9*UVw}G0A&裊)ם>8UJlq%+;Y5\[XKR^7^d	-a< AUJ4WТj%QY[J+R1?tV8-: H^4uu:[:Vr#B2SGLEt8=q/0ϝ	ep{lxѝos /p]@lw!uo&%tsWJ2- :yЗ
AC{1~:_/Lx6A͆!/Iݜ 	~%rQ\9	2CObFF\>a$FB.]飜bݍXc~V'$r_W+K)i$tҩ8UJLc]Z#N^qw=t7pINlh(vJ:6DEQoIi6~+ۭTI'׀r;WpQ5,(U
3WO@]ZIxU2\v7%JBEB]YPUJ"Y!08=`zetx@^$',-|jh',תa],%˭Vx95<
pb!V9ؑB#0[B
jw}nwM.ľOA4<>/EKLUņ)#"rOMIv:?wo_Mi/lD ǁM`ȁbUh	`('.d#y0%`@v1I8G dޜEl3wbtNB(NA鉅r|9!blq B{`$Ja15Ko[F18rAւ`=KVqC1&TM:U&8cFHJܗ!ᾊd&]סt߆^$l]澇Asu [ 
m'3pHU-R
	l颓AMXA'w䤺Sb8G!JV&SIynqEMy]QSq)2JA4fs5!;{JZPiIrQV6VX\Q<lM舻fQ(5A5FL!apv(W*Jpsqw+W(
~?8#trOG \Kp53Н  `g ;# R(job1Tp5øp.ScF g"P6p)
<LX
R6
11W2HdnYY,?LܔT#p‷1𯂁Ż V]Qʠ$>E] FȖ71>Gy单/U\;xQ`rt(0Գ9l荴iV/J~/1 aL4cAB(Ԑ`(zrSjdtyЌ,LF7@r$8d&Nb2ƯVC\jT++JtGTfȵvبʪR.u,HzJ$cqc,.UH#3d1n;e0?[*K4f#4^8(	IfkD|ce\4/I:%DQL<XMCif"SLγ[--7_P=4JԕZh=aK||/X;]|<D6z:'%E*9ܫEi.KRK
BpIaa0Zzlhh-1Kҗ!s<o;-;`kFc=P3AߦTnPwĠz5@OĹ)ZT8޲d-{q2Cҫ]tC/gMi^Cd1\5E^3k˽PᵄǼBx+bxk
o{m+|﵇/Iב8^'JIJxH;i w"SP/JsFo Y
"{o;Tzt7|$xg_ђ㍔b)+I9xw̛$zIˤӽYDotw4ûBě+񮒮nq3QD׉_ilvp.[B0MPC/CFY.L H0Ɉ])Ov@xMQC*d\	JP86 7,^hn9bbnyH2|骐dJ4|Z̦%)c	fm5liRϰ哥ւp!<x6"N<`*e] _ӕcd 21x], fsH1P]v.)`3YPnz"D*_F^*v	Hr/4k8pT2aF]SŽ8P5cQD
Abք법0ҡJ!h(֭DL5_
?y|?&˜0z¢P7Rg_J)BB: 4X3*lp)Q#EpHN

p^Hг$JDLPoBeos38+3r+j֥h$=4zߡq^!T+u4֫;f%eK㽘ȡT
/v_~G
n$~<Ü~V+p,"qk4t~RQ7wiÈ:KHSZOA~SGI^K41OLH*j4QDMQGؘ\	f#ob-r݆qHWtfxw\.X⭁Zx+jo<mgoU^x߻o *7!D!VRۆQr''R>INv3H-"Sy3d,{n{^DYLFW.U{N o{o^r~_KMo"[^Jz?Jݼ^A)!&Qʑ)JI\*Rtr$|
Cje3ՐKE)2]YHw
Y\Ղf&"Wd43
A3:X~
PgC)RFd|*ʍsQQ)^BKjRR~H=JNH=K,3gaoL'C9GB6)BQ%uIk\G#M}6Ĉ>ya*
!']A w0hH2#"w6D:<ՀEFtClYh&&"*׈:Sփ$M;a
MPq&؆bXBX8Z$ob&:)]IÄI롒O\>,S"PH
}ذ""'jFɘТ}jMv &S ?B61
tc&༘
3c\X#A7`2ɰk"vM$îI}g~S;p\@s598tsB߅+0gVʮVd07;]4M aRy֡NDC臃/DC!P[IϮBȹ[@<w~8fw<^ʸAM0>jO\4kZx&iʼh!ȏ ?h!ȏ ?|Pm\rnO{-酭[WiϿ!#Dyf]ʳ|byZBr8Vqg;pĄ63=]~r@M	[%lkB>)5e$bS"C$2"]S蚲p\UqAr%{A8h	,V X16)zAX	u$\źӱnb;b'^q쏝?X?'
cH@%64uW)_d]O(bXOʬ>ђSξdgߟKiIvJH̔FHFPx	euU7vՄNv=bӰ݀r`\YPx.gZFm.<Gz5b(_!b(+o6|
eR"'b27**.(7nV`rW)oXX,ewNE8^1FP9mU"Ή#$bj-2(8˸1˺*l5" eVvDFΜ)8󌬌3ϠYb'yԿOLL:!Yڂ(㊚=y5:k%t@A~yl,ҩ`΄xlԋM$Wyl
Ǧ":AҮ'vүaxScűaN!v),]cl][bW\x2v5<
vǮǮ7buEl>[ Gb@؍Ċ-"n&"IVl	ɏJĖFS$LˍbUhˇp
c
"Σ"?CPL
ĤϊBhoUIjpoU n*\'a7bJyt"[0-FE[0@N@̣Li
(6"\wozw~[{Sk!%խJbM}_<5 U@QR֣%jFRZ	iTZ^JA#~޵%|t~;gIXa
_* 6cMjuPR=B*Dq)ڽ&VH!R-eZc{,a-1qZuS
Ƒ)R(xDT,+ew$k"|6ۓqna/0ZQ(T2%|tBqh~qqcH4a	a+vx$u4L_B3vCf =ЃЇ,p
Ӑoa!g`/N<#<+8$x	^<b% ¬ƋǘaSĥV-AJ33e-p@h^a>dDFd>OQɈu>PL
piPl7՚iSKÀ:ZE
>H)C$?h:FiPC%4O5y^FCwM_Os:1I52/"`ĿDVPiASj763+K]tEըzJWJ:ơ	<--XkYmrlօzwT_BЖF6c	3ww}¬#I Ӱg`9h#NoZxoUޟG;Zs)Fj1 0dǀ	gRķ:ӣ߂T
7(
ەx#ͱX"xi.3cW8m2^Cq*e
_JȯuA/C/n(ކ  \q2/N&(:@
<RU?5&5ߚ0KsMGVyw;,ߕt|ZpǼ͢(
,2a_ay@Y3S|eNweLIu%1: FX,2Ue	clئٶ=$N_fa˶lOfrPQfَI'_䔛m5[0$ijtR:K9KM3FHސ˛PK   dO\W%    <   org/mozilla/javascript/regexp/NativeRegExpInstantiator.classS[kANsm.MҋƶDq"
X%N.I
ԧ%٬
`
|3gw/_<VK!CIBq$Nwh	gU9!VSHv`hqe;PZL!<Zȡ֑Tvp'4'gC0f%Zgqj.j-o+G7}PLaxXmw^@cI(t+ޘg/eQ1OԄ!5	>%NPe0QKj4Y\֠6!~RQ_z_HXk[>pDB|$BM[PPv]C}l3_[18}
iyp76*_yosd.c\;݌#E
#[M0T`=T#!2Ql&{lĺƣ:Gf[o#PK   dO\4U  '  5   org/mozilla/javascript/regexp/UnicodeProperties.classZ	|U/IMQJ[7+ !@Mj"CHH$Ep}XQQGqfe=:7O%ry9{{n~OAo;$SmS:gH*֙EwNiI"5T3Ģp'T&LmSOF29D,3`0qi	JP˅2#ޜImg,l0WVM7;sWkr׮:yyNȱ]yڙ̞8oL	tNr	|]X<)L&JdGg,%N/j-&BYGG8i:<Tsh"GSCvkaNwap!6*kHF	ܼicj8cіJvu~m2I$BbtG46M!L(]8ډc\8pySۢ;ǎɉ<c\!cs311K-Ll65曑TW0nV[b5Ǆx	0#cr<dJ80G\{Ť>N֖L%qb
Qy
x<Sm]Dƻ>ĒI.47gN+v;ëXcho
1Ņ8}	nfY>.J ED4{h[2eg *1sI,8~A-Os!,FPr|ƅPK[+ƢpBҏLs&'tkPi,]<3QAp!tv.7w#Q AOtL4-bgֹp&dZOQgp621M'qbcf1D&AnЅp1o:1E5&ƊcK]nD.~ag_C8O\LKT\%O5|ĄCD2^as
&[Qqiimn*qtRqK|xL;!O&doG=%cFLrݬȌbǄ*2ǌ,!P#<1!3T<<3z8zxpU8,&~'YU .9yzRɸ¡X,4&0@ŋݪ%D8%kT,	卩:ނPX낑T&ܕJ%ۘWW˯Yw}T\z*asUrX<o[Cry`-Ck8CVe>J?\^_kwR
Z
*&1ٱ+D[(OZlV%o`OK{x2tLWjURjh$a˲ oƬXp*Z	NRre]H+,JyFNAWP3LWƈJUt{_nQia=!QF2{GvJc9ڋ
1&'6mtF}S7"9lXOқU`}C7y3e̵*qP%UŘ'*-r<yɈvrf%P;]Kpȳ.WVH
mpg,*&Cf6&WjqR۹h]7aO;P߸]
zpHg%d㒟w7[4꽂j˧\"_P"G.AZKAw)Y5pI"HyBȡ}Ao1I%M.
4-R&_%dpIE6)P/`Ynneys[ʊB-.451I
eeTX[6Y9/X3Ff
%2zx>P/mH:~O}Yt
k"Ѵ4y(rk`/婺H-ѰL	=w>~4
Ep7/.W{CDٺFH~_w(Z$FH
^!}
uz|]ʓ{'9\,mt7+0JyV&w⾬1☋Kti6e8/f;JqI~l`Ρ/Jo. xqr^%AQd$_N'? DEdrx^VXl/a8f枬ه~?;7r>{R uÕad-;:p:VtgŦKrN4fuN$9ٕD?5>ěG	<'eeNY2b$v|r03JTq5ǧ0T	bi^8"5ne&v1	x;$`p'3Og
*]gؿ
U`S`<		_"	_	_2	_x`|b|a|cY3A[(,[o6ƷJ6%|;n	`|d|w2[0W1%݌Hx/%%Zxe<wQ	sBec^T=aStxLb	=.J fe$,;XYU^Dɤ(
G/@FdsV&cA!0Yhvgi
`O`=я`EeZi}?f`eO-n̎kPjv	~Nkv\2-0uAYa>6WfjA*9MpL\=ۏśUQ쥿;|z.5h4k~exx^@%^Pđx7k7o!q*~x
-.pC܊^O{|`+oͽlE	ٹ	 l)2cYzca:sr"Fs4G/U>EfNg\'J}~}1ʤ	b*ipf.D=<ءa
V~kΊ-gspؾYq#WkYBLsC8y
m71ܾqm&kz^m=5yw{j1Ht&hǏnVa2NZ!90aEP~w=
Îbۛ=G8@c44lJI8@qj~`+~<Hh5?4U7]MSB3l8_fDo z
 6\'eND{p&$㰤s:ZeGAYIlbysCؗd)UgDy'wFn,b*?g5npc3pfDnø
6aqb)6[Vn|)ӹmvG 9ۍඩލG7nRk|]G[:]ik4V\K}ihbsl9TK/˸̱e2]I}IFFE+YSPI\RߐԯmP7FhݨK~,C0/2g6g9dEURZH}I~[?v Ny
uZh>Rs.ܿUs6Nkhtj'?igV2?MWpq~wr6r.?-]L-I-J)+6nWҴC9R}.ڭ<F{gi=KלR+{bN3Pimso'.$6?*pf*4nռH&UkS@q6s'joɷe+4Sً	Jdfk~Ppnz^g}@|
.zA.i^n7Y}~__]wZ}U߬HABNFe!UYBVJ[T߮ZwA~fM
P~סJhKk%dh?(
aB}c0Yg佟I{J3u|$tJS+TsoHqoIL[ _$T+yDߓ@Gt}	$$
)IR	CPVfjS	Kh6BKhVn?$t	shFi-4ZABc"MXlgCoPfXpA'T
$\l GI ]G4Hl)
Th<ڠj	cPm5h3ʂ%Ѫ-8àq<ޠ	Zg4I:Rj%9MՆY\ӆ[pA%8ߠt4KuюǠ\`|mIpAQ\dB	.6h6ڂ>Nkc, 
jZ&yfFaaDʧX|ȗQ?$&lKJqSRܳXOxkORVhhFGsňJXϏߋq:mZqԃ$O?)i
]xSLŃIؠpҁq	*7cr7S|Y\q	.V%6'.U2h\n;ln\akĕ%p\\c
nul{^
w1n}vl7p}ڏ6|j6*lwv9_mþwr~;nG%upC.HvLyǩAxqvl#\RqCe=;
z:_U8SWEPK   dO\bY    .   org/mozilla/javascript/regexp/RECompiled.classSNAԖ"e5EYp5,2I5\ ^D3Cc@H3s'xRF}E+(w(p߬o?e蟗LjN	P*\ *5dr׸&qjm-yPl0RS⭒2cjpS-a UϴgB`c[2ܚW%!ZPU;B'REW+AOEIʣL8{zC9ZDLNĻbqiB,N(eRy<Pj Ɔ1h$=jT>=@/h%6x-q'if*ZwM)k?I˺dXkhR[@Fk'Iji)j]as7:Dz0nIq6qo/I;AO,K=S#Z"Xڍ'5nPpe\8-+pU3k05TN7-o?.zvQrVH>H:`>oǅw!O4JYt>vGcpf_PK   dO\dÄ4    /   org/mozilla/javascript/Interpreter$DoTrue.classT]o0=nf-ֵeha"(LTD$7-Mą_ ~ƙʴ	-["\sm_ ǽ,HfX-s},KJ}Ar
?mC!C\`Yg`0b0l|$RCu7t6nφ0#g`Nf3NgQqy\`X']mʧ{d"C%F?!m%ڮMFCС|׳};jMҍbŮ&B(rWO&nu*qzcΐvJeNu.X=S+'&%6r!YOHK+1P"PoY5-tT:T3'tmdEz/A?`D=?Ԇȭ
F䀫JƁbm=jo^}W,|kk*F4%,b	7H˸,n#2$DE1V:aBԲ:p	6PK   dO\  t  A   org/mozilla/javascript/ScriptableObject$PropDescValueSetter.classQN0}W	b`,d!cRHpT\_d;i| ĂpDE
~g߻w ؏ b'L^U2U(}A5S}Jy.P⌽gaЭ$$Dyy:\S?]7W̓+iYˬ<JbnUZleʤ9_:qy]@q>dM1lZ9ǎptsM4Ea[DGao [h<=v1:8PK   dO\    B   org/mozilla/javascript/Interpreter$DoTemplateLiteralCallSite.classUmOA~Z([U
RD4PB~q9ֺx5w[mF?8{% kr3{;<3;ӿ~pRhA$f?ImN +*[*HUPuÐmAzR-1&aHY8a*bJwCRnqƋ'-eD'-d0ύGp]T\DQgR&=)r}-	pA'Cŝ&.⒁>[==Z+9Xk+d0ܬHMWt$-0ڥ%jkn0qca֪eDKI`?7=OT.FGԶ`30~yDWQzb)u]n@Ǆz'6,ŸIs	G6J,wjw[-Naʾmth.ܙ uա>NjO3qFcSP=CeVDM<FǠo7|_ӛb))&Jb6pЏ8VYdr'طh{zӤ[
̐~n֮k#iOa1$ge7~w֗up}#F,g:1IGdK
=21`lܥ?HB2)G\CGE<FF"II.\A?PK   dO\Rf    /   org/mozilla/javascript/Interpreter$DoIfNE.classTNAnYvݶP*11Rb42v*
kg1Cn2gn;߹͏߾XMPD10zO
e<Y _v5=Adem,
n3D
+bw^x &+#bb`T"EnoB98N8iTH}3ҝ[WVJzaJURƤ<C%S-1(Ew$*#F]xknN;JԢTN©m]a}g|.ieCI+$sa(ѝvRs9A~"v@
ovRܖge+\y~`GxM//ΊOzbJJ㿧:	8$hy|R\DJ\dG5FI3>CT~El,mF`}I(Iƴ6RJ
qEZN*$N8&^
0#ȣPqd@uE1Y1Gr
c$PK   dO\^b  =  ;   org/mozilla/javascript/ThreadSafeCompoundOperationMap.classW[WW$n&JE+A(`zCr$'{oϾm.OE]0K"V/3}{=' N jQUჟ0b9㮞jm66rLYz^"
Y"ۉ<7]:ԢNA@E*C]&2ImWEa`;.k#6&VT4B@Wp89?ܱ*2k5/lF'G5#G}*:Pe<*BR!Y\
LwC*:qag+Y|
ԣU" s<m)66*;b"pqD/j3YQeh]pnb4
3.Glub*^qRG/
Қ:d1-,^Wq;rFF-3M6+RD=
fUfYо.bgԢ~P&:v	JYa#e_]Z%e)Yz6pm{"[YGaL;gBhG 0ಊwq6P{6b# Tq)&rmT 1`Z{9&U2<//DW^nVqC'z_*f9)CkٔfݙZ:!9U)Fz3TTo:Nj|Q1tT-st:ý}4_b"|I)լ;QJ0>WPrkrQ&TXQLƇOz$Lr`r*W"
KݢZʫc^#/+<8_,jN,gȒ'tdE˧ՖvPŊ`:Idy]x?&|RċE.ASyRN;^Tp-s+hW`C7Z$j*.&K=ۣOe(ѺeG{;#Ca?&{ԓ4=~oJ^i4@DqĨ3WD4mgSW=+AԻkwHVzv1ds#61tyWpЏ{(A$D9Da؏2
v1]R
&$0Ȓ6JN`jV[)vCz#' z?׳ml:~_J:-2=_/)y~c裫tRw)K<r$yHC_F_[]+ZIJ)";pV&Tz(On>U{޾D[횲li sbe;Jr	aIJf.N;Rnq޷<rT(t.tW1!falKވ<R)ex1Oe[v?Ol7!r^z$"Q
vPm8WTSɜ*!P>s&Կj}(#k-/Mr5*1sQ1|%k㯣Z|PK   dO\Z<  	  T   org/mozilla/javascript/AbstractEcmaStringOperations$OneDigitCaptureReplacement.classVoE6v|gMR8-%NqB8nMn
 m΋t%<!!$*?҇
B;&
vٙSC@<~$ʮ,{Ҷy6_KO.疺lxMi.yJN&<[%eHJG9X~j9	I4fX|7K$Rھ"%`C8à_h+i2 l<DH+117-+Sp͝fai嶰T1'50Qc؃u!>h0	w,rg8R	Ϥq90(
#"m1Sx@^[b8Pqh
+si<(
VIUp*߽1J)9Y6(*`Z~a
\ܗzQժ$'Wm1{m|Ukm;nMԊ3{lϺCuoD(y'ڢŕ1qLE湁z`9%-Sszࣻ,̒vN)n-pNdQng6`DǘmRub=wSEnT>F1]t]ނPn#0DՔcC	5u_g="-uwMtG?O>\.ۻӰEZ?;6f;&JܶkRzNWG%.73L(<[.ӗܤNWIz֏Ӥ)4OsIM6}+_="xfcgp%m.
Whl8K<}FSc6C!M&Ì5@G>G"FOohȷ|i`lCFH'b3&"~"z(nbųL?<x3ae7X$CiCKf诌dNRy\"eӈ3& a"PpMrE,qqCrR^M|PK   dO\k    )   org/mozilla/javascript/JSCodeResume.classT]OA=Ci

*/iQ(~l"@B>2N;KA`Mƻ[|w3; fQ@RP%3+ݩpǕ2ہk)[)#!CCÀjh;}[Pwb,%Ly|Yy[3rWux`FbN$lμmD\QD5ua

XX_0ƯĥCꮰً%*qȬyKa}n:X>ʝbHUQZTn׫[|W\C{e
+VzUxD^SZ7۬L*(OHzW=C<7[!ZXe-l;:
c*2ĲMׅ\kYQ<OQ,Kv؎ӏt:̦W +B-?O5<#'L/Dތ.ܢpY?ug?5pw)^0΄Æ`rllle`/|
s4T4ܚ	@NC?Zک裝jít*(! ˾#}r±IWl.7!B^"oEiƇ}N {:7\IiQhM9LF)0MߋH&Kx?PK   dO\npt  
  5   org/mozilla/javascript/Interpreter$DoArithmetic.classVoTEݻwRJKRV-K)(m-t([v.wBѨAcB|0QyĀ1ADƘ'L|=3R)9gwxB@?\ΌΘRڱn4QpStӮeb9Tb
eTG!
13s̼`\3}v<)Gsf!iGj2R|*P1QZ

ajOS٠2;lXBG=38`h\AH:_fG'7taKa;zBh
l*˝J3Tg>*++ٍ٤gYi\jIfۀ-	Okxh=|/ՙB9/y؊~{5PO	hEvlehZAaJuCkU֔\L+].Y6l0_ιV1wI
;
@ƺ`e=gЕ%i2.Rj٢]EVnZtFVnك^
{
~J=l婜5set<8h3p'崦h_nm\
9l>6scN[TC:VC;àY.['zef룥WVreY@s8DI@YYoU4,{,C!NZY2K*WS
{.R#Q(GUrQR/\vKY`1=B	PxT+ J3_}N-c8B ~` [O"|n?t;X66&oxêH{oح715%
P/uuOA}`6RKZZqj)jΡ[mJ{xĆwuaa=uap~-G)C' 0ʇ6ƻ|1|ďc~qw|?~,~(z^$a81)n) D#,@311hD'1:Nqv7@5x?NO<ټȊA{ne*]vt#Vu6)bKhݾ@Zh=@@}0VI(-J!
"R|-m ěM4Zy&,fe/Wp+_UWqI<8:EH(fd)$PH2SI<|@1_#&&ho3L;.3sfƤxZCPC
X$uzzRbRSM*̭^/DJ Ha
2R?MB PK   dO\IJR    (   org/mozilla/javascript/TokenStream.class}|TEeMn*6K ,J
PDa/,DPDł+c/@s,1<}/:;gwz9m. j7pP&h3N
*
`a5}X<T=} AL3+CţkBEJ7P\SׄeбWYi@/*WUXZYݫbEKe\5vMR'1 ?DH®U9Vh(kcB
20/V23jCJ&V!A[A{@i]aI+ hB'SS^nn%v5da_KBcc3!zKCՁJi&Ћx򢼒@%}LKV˫Uғ&'y5U@`l|e:nIc 3ԄaTN(p)`	0AI*\YݣdFMyu,8vmapeu\3Ƅ0V08#(.ZvPE/yǛok1=h$9/B0n3M(Y'lK%r˵c\9)osXbRZVbs`.3偲 x\Pػ6e@Pu	RUՁjܡ^H+N5a`kʖJ1Z~9IU&T/6HKzX
5Z:eb`TW#1ՙఞt:"n΄ڼbbpݚJ6T?{spd)qҫk&co[<rLVO/4"Ղc`r+Sp	6J
3`mJqEjU-:asp-n@k+Ak0rQpyڀ`i܌X0XJof֮Ĝ۱OJ5t
ˇpŘa܋DypI)-52X]Sۯ	UsTxJCz`r>"ŚW'c!`?הJSbX3Ks2\@!vye vE̿lM˘ Mc	**D4M(wo|V,ߥyg
`y&2TYqI3K+XgXd)AbX+rEM$(s-N2IB"X<Pk+(/6g jDŶW
W1;%*C4?ʊjH4

8}*7I\')>וTVNLÇ՘\c0A+Id\
.ByUGf0vr8+JbCjXiLP|(VCE"Sw$,X0%	'd,.5Pլ/FCCJG>S%teP
mZɋ5Y;ꇋE^
@d:m3ORv6Y)V:ru3Y	#T5A:}&&ZZ4:PJpO,cMև0-T5>g=j+V&hk*%[&BxRTO1d)!s8dA'hQO\EuTfdBUfMOFn+DMb!wF`lz8d'PTTP6d32:A</'pTee43XoYF&ckǄCRiYҲP@i('XUXt%l`-c2Q+tVVVTD̦*&[N8^`"$KKŁҜRKBxME*HJ'T؏UV9ֳdJx+ǖfde^snVVdkiƻpjC5Ȕf+PиN3z*Ab|V
Ǆ*?!'|I)y_?/g*X,rqnU*6<vܰIM^hDTPKLv)-T56LssSŗUo2HU&Z+}ɮ]F
HfEz'K8{gY(XHN
vjvFikMv+F6RQќ@eTٺwl݆3B-!9d;LVGSP;M੮QVVѹ ߍ,d-˗"llX	z)JiSN`TQUC~kl{HMϠI6L9FQD
)>1=Ξ/.:\fE*ɞ"na'4*=
5tP8ϱC+Ou<gAKQ/aO'xd/[oS:Jh:̎s>}dɿ`T]5`oM:vmw8'1(K
y
P7Q\R:/}DIS>%@0s<B>7xGO7qIɓN)0W$iZΫӶP+={Rb,<i'~YS<wYUD͠VTVCo&-dG6!Ɏ20MɁ3[p%+{2O[2%\wVnʒ
1./
 KNn{_%><gX&8u9	y~l	'
O4y9P]rTEnzj4b=:I\&m
\㕑JKa7hoRCBY%}
Tu'w&4EVwuTrdRA
g;6[-JeQEADc^7ВPqT1Q&GҊ54YL4*~4䃥<\>è\,\.7$1kgy=5h_,bS;y<lҮHzM'(SL>jsJCl	tq>&)-L>
@ޘ܂\B|RBE\&IN|7g>s}H몪`*XQoBqEn3kY>,FfZL̷</4yZ|pfs.7y1[ֶOGrs\O-xyL
Uʟ,0J╴kĻZ4-dT*T\(w_Gln8j|
(TzNz)qǄL~Pddؤ	l~|#?D"ZՈ΀b
R]	r\q
~1İ&N:̴U']M1@}.m~J5T*s-O+m7|Ej0!w,-&J2i+XB(2(k4Y:ㆭ$tEU
ΐ荝:nIȄĶ&c6c촩3
L5yKM19`3ΠǱ]2u|<9wDTApX`%3N˝[`	nəb5i?QQGe06?[[5pGA
RՌTJ@e5;ŕ)\qy]qjն46/Z"݆	I!"GĔĩ	bDWh?}v̓H2c/.Zv6&ʃkhlm9P5N/l_ #@/)}6H@@a_=/O@;:(}ahU]_̧cxy,)[q|D_/.I@4_]tE|dH4mڵ/.m_}v/.d>J_jCAd/~(JJ_Jhwr=a_]XqcC
R![u;rp9¹Mrҟggk5HJE&Txm2vIl ѱIFTmKv>ͦҨTCC;[a|;*:XTomjj*ȩ;<(*?VJj1At]Krfڳdee>;#}mUHbvb&c5tGH)6TU-i	`;U9*I\I6T*(@f;BeL{eFZ@Zh7n@-8XASK8Y"r\Us[%wuln\*3cOY:N)e8J6tk|M ^KNt)ƞ|y+[
LjE;]QZ43ꂔi^,	9Cjd>suÊpmZQ8ʎPBU6|Fr.]57]GduRGt5"];Xr0V;꒓Sޝ;|δ(jZ[MX0g"jh^EiMaΫn{-IiE9sFWTT[99X]RQTe(deKY7C!mf홡ЮJ,VWJʩ&+Etn^"4%gqnrvE*Ԃ*VԬlE:YA9Ͼ#Ny$h˃R
9aۜD
.Րۭ?g=cgB6mr~oJt#f9wb=1+AI42^2*/Kt$']}ʟ2/{lӝ:1Ћ'2=X'|~zC[snd<.OwY2ﲷd?v䧐`A0X}nՊ4~7k)!ro0C W}VଇH'i$2}S}t)&/$x:|^>ף|qS:HgLli| î)^\m3T}0ĺ$u^ޮ7amzFXq q>3'  =a9@.gl~p)Nu绰T~\T2I"rIѲ*VHڄMh<-lӱ\0q"{uzQ
afd[0CĐN C~nA]HAMl}p&z슷vEf#9tGq7&)8;`LN3*1h#sQwcJ(!]!
EC_z^8c+T>]H{MlԊjsٞ<f
 zi&d|z<
^8އ
^P10G5/HTy*a167=,.p8pDWv~-xT".V_+Li
{Nk[g>?jOz"8̟qp?͚Oj3#>%vDq1v;Q3}t-.g՝>|M=DG/M}/}1>1>`kCc?!?7uT#\"wNvĦnBڸqAٵ<|ʇ}! u=;o'F@~Ӱvi.zCNs+ಪ|r/9<$J'c/7^;矋.}Ȍ5Vjs?ӣK6>N0/D o&XƏ9/vXOc0;k1a߀=
[9<qǐ=s5pU^!s׵yBOS_?,
5c<Na஧1EyrH2	_Zwؾvk$n U{>w1^{BoH흦_Rw|c#z.YrfZՔ;~8pшG]3V0[&qvqc/o+6I?N52V0}_5Jd3bzL.(2oJ?[dAVYlՖ,r)IEzvH`&TRC<vJ`e0z	D	b.	dX$!p<En+3ʊ'cJ-+C3V"4KJ"^Kv+[xLXm'$pB<)J+<-F|4+|J`A ^@I@7^@&:xE&rJ4B[~A5	|mu ސVG#:8H`ՙ]'V"p9Fg ,JTˬ,@s	L|L@K		e  o$I@!@G(
:$o |/x"Cɂ!(<#PQ	\g
 `%p'`CRJH Y;"	Q%2LxBtGC"(PL["0B	1%"ܤܝ~f= 1`HCW R-6$Pb0`0 cgb8,|݈a;18ȳؿ0|Tw8lnaHXN{Qc@9bXC5x&O@UT-?y7	G]?a|ůNAW`vq#)CR0Jףo`tFցix1-Q夁`wFsp+a4
%F1M
	CH'/%H3#*';]Jpb+4&OHi]ՉwN0?rN|_;KF'>݉ԉx8$'ÜQ'Ia$u?2iI#iCD1@|лq'BVJ;Ի;C	!4NEkeZ)h^hZ#+Ѡ\S̝lPvjm
^9TD,ΆMp\fnAt;wp7\Es=h!=
p9^+m>Zk'~G(lyF7D-,͘v ypv(c.c%gTZmF,c>xW0nƭq;<mq/<o=lCpx
^3׍Mxx1ބww}e|_'7=|n_WQho\*|˄\+~v%ïtpu?]]/W6uqW?hrs
e5<1vdlu-`1r8rZ],UڸVTz2\Lu9躚ur]Ǻnd]],6u;vd=\wqc}]' Sl z
qfC]wlc幾fc\߲q)_Y:&9TMsl;t'YT6۝۳yNl;-tgpcXiw5wA
DPZF"ԅjS>BnPjwz(B=PD7#M%B
Sg"Tz#T54BEjfZ
#ԊUGs#%ucvF#ԾIu8B>P_G"ԑ0"Tjjѯo}Hq0ݽCH)_#Hi#C;w& ;?YD{zcH nDʄn?F&b`X?sHw R05T"w}_D*	>@$Cm2Rm(s!
h@4tXzTzT&ڃJho"6o!qFlvm nqElwm!p]G?@+ﺘT7:,xuk=)<Z6uȆ]H]e3@T*_ >p-_">q_!tꋼz*7RSO ~w"5 9(R?t }H
f' O?#59r'{0H
GnCj;bGn%g5)Y0W`c?11ANAX'-h3z,<nk3^0uEUi7&
R]%IE~lR6/}ĐKʱq'bjbjƚF^J\%InG$~ˣlgꞨL&n;ߐ/oGތfxd-L]hllikmߗRSl{}}%;׽kR78>CKھ.vfOKmZ&u1ikvۧ}ZRؾ+R9
])پ+9>m%R:ŋiRmŴ`OtJi
JiJ?iX@=ŷYčHoҒE.F@YuH  ]|!`'[&>0  V0ftqe=Xq1O] oX	H~;z`۬dBh%Ʈ@.1vB:*#]J%f`4Bfa!%ct  blA 8)ƺ[tD@:X
N1&  H\_|OHS!Z	x8'N<}Vgv"`xj.lFlp!gՍ5>2+H',@㗮GhK/!	K"tz@LHz@?xjr.>e^O1|G,@7'0 `xNY6~b0t#bȷX5t1\yVħrf{0̐_0ca81chxwl0-}Yox-W[:VB$`0K2i$f0;\6&yqxw'@T=ǡȍtP.F([}}._(0zƇP2atFP>a0nFHJa|7	*o'Y$0%F;7i]tC/GzCGzCOAzCFzCQaFY(04xc'/sKd
\KX
*+U@<[	m*`ЁUAW">Vj֠BFuNu&a;f
0	Y`gC;Jp[5|X.3؅p.v)dµllaWVckNv-î#FxO9vȶad;l>ݡbws]"V/eAv^J[a
ZG?bC2_=_ׯgؓV~{Fc~/{A^+${U?_bo]>@}>ҿdf߳K~[ob
}'Ax؏",/"&R")ڳ#;*1͚DobWPQ\yp=b*7#X1ǉ<^,TFTtg
8w.rU\}bx/wnOn{ , &#A>Ryu>NO|r1PG52|+>75JPxC:*ċCҼѠxA7:dgy(xB:tHC>4_}ŽPDO씆"}vi@O,7JтIzi24q4aɧ웇34gW$Δ&#}b4[=(;U8KFK&**;3pM^f9" ǶpX(vp)!i]kyX}׊)x[D>]}[iuHiu;iu{ iup[}{E4ĺ#4|(MlxJpxNI'(E4{[oxGGeMaqGSl;R6GI'+7}ky睆ʰt_#LFf
O)V+Zge[R/VHȻL|&Yl:RK55Dz#e2pn>,>
tg@w>F0σq|!L`_yoynOi4Ύ"8':gt{o7L%_X
FL;	GaV+Է(\jcf[^Jao-]j&½:骖MWEåH<t״ִ&K+^ٲ[-um3[-Z{ZXZGZhp/iХeMvT8A{_#;,B7vb@-S<[-j`C%Fܵç4]Oliښn
@ӭQ `{BUSpuu:'~3Z8|Ħq[Kjgl,Adlfgp|F6}3
3jA$m/ג>'i7'IK`nK[M_OVȲ\|:kz^}IIQ״#Sp=կ5ʹB>o	t+Kiac=ruMi.q|4?X]¹MR7CUldqpeތ3"IlUIwnwւ/mk-G[M|z#;Sr[o	Y[d:vfp{CtBUgo8>X=h/^Wʩ?\1,_[+7^-_Kz"mn-$Z֢R1zRK>ݪ9R1rKk!A3tu2dP7Cl`wI>70Sp멖{+
m02jMll3T2}I*nkka=;˭gW=9t+lD-؍h$V95udD!7צKIz-t&&#n90v1/AOLk!FΈ!­N[0ԌM_vO	DyBt+[>Y|éas8OVwrR]R]֒FvߝƳjdw$ե~3LS=If҇,L6>xK(I=~+If^*vos>IlT^v`OFw-ե${ك=O8倻|

F(*n(E_%)"nH>t^BN_n_q,A˲*5x&anwiguֲ홷@~hRJ0^ r1 P`k1vﵳec,sE2ˋŖ??ggvdaKP8lcoEQN'
Od+ό.W)k(pO%NIv-Jg.Mǽݲx)f'Sֱ>bcam0yYs$<B,#(I_a0=ɰm'n"<I0Pz~Xݱ[1AڼvüVnNUЖաt7Wt5a9pP@ܦ{UףA}Hou#ԉ)H_yX/ŲS1}_E`:%{\wǩ[%z+Po-
뭢=W.$rv;82wiv,(|Hy|pIVu}<To`!j;GVTqފ9zk=OV5+*YRo1ٵeS뭵QB'ֿ2z+ZJG$2g0ѣU}YH}O~j{,q@քZ6ފyl/LD/[	Qɸzj>ײzkfTVzӢadxv7(Ba?u>ksJ_P9Bt;(ƚYL5<UVJԈ+z+=
)G:ۡ[IG.tdQd[cxmR}	FMeNB<LXOijiۧ":g8 Gox~#3z[ U8K9b
vovXw@SP9h^^kn?|]aY|?4G8<ʟ'8ȟO3EW([0/%Y2bG+㟳6
Ϳc,`%_Xcg?yOv?.M(c[qV˛6
g(
kPt/}H񰷕>UJ2AIaGT)myҁ')yҎg*xG3tJ7^dJLOUrxҋg)}eJ_~2ߤەA|P2?Q%)c82Ae)2YT(ie2ROf*SoP)sU\e2O٠W6)"eX١,Qv*Ke^e_)V(_*!;TerD)WRVP֫}al5O9G*FX]\W.SW.W/R6W*W;+ջF!Z1:Yz%-errrUYU[5U٦4K]KSvhZgNͧ+wi~^mKUNQvkӔmҨ-Rh+Zv*k)j7*i;ǵgǔsSAeyrHH9}Q>AH7un)gz>IJ|P(_%oz^V*G
*LKUwUU@T/Tjߪ^5VY$O5Y?ff
Cm+<j;vj'N,:]D7fjw1P#1I%f<X QW:PlT+:|v:ZlSq:^ܭ:Q<NOSSTqP&ś:S|9+uF]$~T_Ԁ2CW
ZdQF'uCSS$ܘVj1O652uQ5*uii9z<uqzC=ةn4Q/pW/rT/qQ/sW7GWԫkIfBu;>U]^ֺVou_ns_nw_ޢYޡީ[ݨr?~YTB}ݤ>1<	O'M}Γ骾髾U{ƨox&ozfoyxz{TS~٠~9[ܳQs
[f;6{Nꏞ՟<?{Q<9yS=+{
<hxk)4aZaj.3C4Řٚeh@-%õsj%ZL4Z{\`:ZWseu7/|Zyܪ4wh9Nl o
4kCoOwmi-&iytm6UN!Dpmw6;]-
s9ޥ\o6߻\[
iKZ[-n
gkAF-L;{{VݮUx뵕U=ZwV}B[}V[}^;{X}C;vfV<=Kx<6 [!*&ݽLRC_e2KO(A
,kj`bA*x@QДhO+	U\]%|i~UIvյTiP׳v%pi%we,(ٮCIn`OA7%:LQ2P$kK#2J SC5*a)Rȱ85F޷{`,'1f+X]W뎂ΎB,ƚ&]t>uܙf8tuEވ9w`#efQFa)b㵣ЁiM)L%,IoFL1Hg,'{7n^(p mG<K=ޣ8M`4{ MdK4w0+Ǳ	ʎA'&`Q`sB6n.KR/4Jg'18
C==q]Q:Jeس|KЍw!ph3Pmx}{y(
u븼/AwtrJ<}X@_ƽwe6AvѮTZh vնVmm0Qfj;`V;`v'i\-ȗK٣.omDj5R	s&dʰ<٨Lвwhr{<Ҵq N{QH"I~͜}] 	PwYtй{fVn٭ 4jƹv ғ8OG]ugܚ5A,}~.iRlVm;PYudI4&iZ- #~I@;A{zj/ O݈\Og4=ٱdw&#ꝶ\iVֿկr|ԐQ3ZDj=%V9>vV
LI+|JOtSOV|mۜ큍;YcG5j 8=.eN{Ӭ3C4VHJ\[q-S'iqP7e}}-nX	!W2_іzFv~Dkص n:v.8qܙM 
i-7J:\zӭU.}#ӭΏ#W+a91z'(Y7)#޾q%ITokòka,%_yujPGԁ"d_Yy]U|VtZ@G
#!|HD^YUaJ"uadDzjsN^Fn6v
ro#kX+$iJ+"'4~gд_P,w7B'=qsPkPp.`n
nخS.=X8[ ?mพ4=	=Yz&K۳,wdNlޙԻs,vc7٬Vĸ^zG[5,Y؛J)4vX*ߐRIm1['wʒq%Kjt:B"i%>GQ i1X
QbWR;	|7
)x!A(>)	AɎ:y'o=e'4[aXp##h?EQ>;|asMF"nYԅhYȾ\
q.ȓSP`NŘCQ}vuiu_礷xJ>L}"ק@>
&a>fq-VPEMg
uXuTB$Rlgng8Ov-dڕڅ I?5cQqf 赋AzTxǖ@/q*p NR"$(=

1Q
NyFty[һ8R1VckoK{h'l	~<
;e͝&B#2>R.K8Jps/5&Vʜ(5bbZ+u>K
Mz_&1^"2>sYws{]3q?'=0/t;~;w;/@3q*#⟝csl;^LD`cZ&~asU?WX*~z$IC󢓯wւw"	]5V~zoFy9nOXJPJ2}b]=b[J1N;uMTV=tcOl,(r>VRO
XCqT^ovNɮFgW0wѯ[;>R+}`g ? ِ0M?C~,/p~	\_
}+JWpHЯz@ݡ=^v ۭ?}~({LП`OO3eYvX>_d_/ٷ!~quop][<E'_~ܯ<OOֿS,g>WZ?Wu1~~'8L(:Bۄ!<>a}11aEC"!;"'E*JLhΊKtQ<#]I=Si')`daJ_1\/b2LSr|O]3JcCt<0;+;d)9%D
0W( wЮgt) J:h_aX#rdMÓ'IX5<?O}Z{oKSۆ?}7|a-Lji$tp+
 ÊbvTsNԍ2'V/d:Vid_n(lf\sM׉;1%; 3< ҏp	MMGQ#8Qu0~xqpvy[se7UV՟ƶhRz9|Fc!ub\vm(l-pYdQc	z3Y'䥗zB㶰t\*17N(h"IIaIDA-N}V\YE/0qp.)[`݉}ӷ wH=IjΎBJ$$/ߙ:6&[GŤ``xAXRPeA^,-!N
_QOU𜨄C
^>Wb=|'N88)"'.fA\ʺXOq2dq5!a:N\6عb37Ml+na
b+'j=+nc/ٛb{[d'}+f{XbTq?o']n-x=|ǉD&QPA,?U<+AV/s+"q_.^Wu^o[6Jxx?+>ᯈOksX?ߠwg=?&~h	*uԣБV)\Ӳ;&IF|׸8K=g06b0WVh#=aSк[-QS+ߐHEi	M8
}űAj,#vO_ĪsBղQؽ~ձx92\l$x"cAf3dnσB_008
b
t2t21.jac8`T#`Tx鐏5/3ԁ-:P?j*5
CfPPPP;PPpq>jz"C}ًa8ލR$to!hH`к37-Q0P?Ig7pF_3pᇾ `Ɓ<c7Fdc1r#X&lbsMTc5gFFYvwd-Z8me%p)q%q%'JN}0ИÌ0Θz=#7׹X_\ hTjX´6{4hc6Ɯ(U-5<O:~o3/:e#22k%kCTPdT3Z!8#Y$%&,IK3ˇD6{IX 'o$wRe8i0$c95J`u{WORS#m3,PrϸaB18N,e,.FF4Ꙥb
|.Trݪ(̨A7
[6 vmNhq]OJN>)׀*H7*qKTGyF&b`N)OC:GasQ%Z$=i_85HkqAq$CqFW-=rzīҫxխz՜W[zՌ`/jd>
4%-l&#+w®Ċ98/.ꛈ̈Pyb<`Wcm^7Z47Dy&?
C:0e&Ff t^&}?Å_ba^[ |70,o-gҖ5}z5tM#43/-SeR
}Xd=3Y{yp3uM)HlO8cf~L060@Qr%t4߸Q܈&nc+Pe
kmpq;l4vƝPk{=q/<c삗mc7|h4FxGY0DtoõpQFOڻ@R#~80;tI9
ic89a<V[y-xk[^S6nEWp!;^F0[a(tS]~"Vg6Bx xTvmQa;gnlKV[,,R(JbZ!X(J ШD@X^^}ȋ(QbuMe/g~̜879T
E~L'LTN)	0"U>\J	:kf3{_SL#S8(r[2߭z G{ܠQsEbp0Š/դ6.2+07:9{.op{$"'>!_B51%F#yuʘE0UZ4W`]#Vm6<nWV?-;{,˄*/<Iw`\1QSD	\Lxh)99cXKجH-T0Y-sc6ӱeq1Ȍ_Ė12p_ܠ֎Ţ\VWjc9?lñZ}rxg4 (4Yb2$eJ4l-l75U->'nTAdd!ō@\Cs CȐuG'5$;t=krļ^,*3i*.<N]pJpi6ʫrO%7p܆N.)-Rir Ge)0-ػ*
xW܃
\&H9ƃrLPcXAsYUhXCal觅K8D58B8Jux`9G
Dė|+jOԊԆ;ԎZKv'#(ג`̖ՎjTYZu7zWU#WT^z=j9ǫc-7=ԝ+-\_7k5G9$a&>vxfTJ{G,Sf1g	4@|+Ҩ+9'u)?76<UW.եfǺmuZqJ cHNd:QfQ7h=dqzi#M8@O8am0ms@vG6b8gA!,xƄԞrO	1Ԫ{$Wޕꔕ+?rwN*{B^G[ؗB&I*Rmaqv=e~ߨq{^^' &-	<E͗ODE*=/)ݣCB!^OŎE%^2y濤FB&'29N']^e՝plM#r@l.syܶy\~H.b5ёn}V8zqfm1QAC0N=n:'ױv'?+AgpGBj~&-c5얙cv%s9+zR8L
Uȝ	D˥L9FQH.QKiM=b8vȃFեu T7wvKz9Kw+OKeUwEzewk~Y)v0)
	B6ڈ^_.a<5m
sebCKTY6Jڤ6)՟}3d/iPwvgi7~ڍPK   dO\6q    6   org/mozilla/javascript/Interpreter$DoClosureExpr.classTNQNee)
 pSmijb	zv9n{F0Q8%`ָsf93s_ 㖂2$1:nKk;Mҵ]Z֥	kӱ˖ycwLtf+(b2PE<B!jۼXUA2*NaadD	TH׎1+;d䃁u˪z4*];N)qFYcȏ!	x0+kn]n*.zNGN:yPM&kvzӢc֖~PM0: 7~z}RA:Wg="KXYPNaqdPN5x+ ,[u'Ԫms7xğ86A:CnYcӈ2Gw8E/Fj_ ,bi
$R|a'L܎0]x${{ G`c<sF >˸L*A)dmQ@MQ(5YÏc
Yq,57ބPK   dO\E
  h
  2   org/mozilla/javascript/ImplementationVersion.classUWW.&L`Xj+a	-jЂ	V@aI&N&tj[^Plڗzڞ>M{zJ;I
A8 pnE	(TͲg#	aZd^[qH9DzJvPGeS~Q64Zr6CEm**P)Ppvj^;=FpNl	5@j5XU3tZ`۬ӨM@0]uP/P
DbÃc?CN[fC{F:C<^>v1H2mnṴ"ga+xDţ8Pޜ1s]t.J㐊f%N^cIvRw"G~]EVJZB`/M2NN@jWHLK3zI^;CKB;pT1<.x4##AZt*%,X4G挤q4cc~
zUB3̫ykfF89U܏Ox
EU\(RrF3& !NebaOhy܇=o9?Tyq$,}RN>\a("l=ejq4mC"9)yo󤥢bX?\RaGjRM++H\csuE@JekӣTi}z-%Q{rD&Tz(A9+tY,ԇ3)9ن\7=[P&
j<,R:ჸ)[$ђgmz5^fӰ#]Ϛr]
Qqem1
R$6	<:ZRLK-}=q3P=`
Y􇽤LeW-?g
rf!p=r[(_s*pRWPCsvr
G2%Yle";+p9i,w1^.OГő.o+
dq"ӷp.&+*
fqv)A>vd,㺴1-H`iA	/%N"vvy-.ofa=^\9Hrxx igw6ñ	gNs`Bv~
f;܅nGlX1v
MbN:H̠2b'~a
]ݸƨ3dd\K
*^c>6N-q/
F04[<iyzCĻxR{ypU떀!wr29PWx`P=jũV')||QBKZ9$%Od9qM(edXZWLPK   dO\z:y  !  ,   org/mozilla/javascript/NativeConsole$1.classUnGڛub@!%?&؅јR4PH^tk#Ԫ6ZSR<L ў!8E-yϜ}?|{)0f"n@Jq]Q"lNOUB9{sW"uTvd[U-$2aM7Q7	c▉	숓W+;B426N!K:RE/$,h-WVMs#p+"}3a
wm$J"OH}3jY.%z=m]TTC)\1k.
 sÖ$Bqr`cQ;H*_k%\6MipG4Q!\<ւ@׶Q^͇NO6ݖhpD2;!0)rkt:P@[CHs6T򉪞N <UX"G6w]{鿈sl=w$		qA<uD CJair݉V!
xk~ȡmJ6qgtSƗ{]"Rē4:!C<;'+P|c<	@<xcUޯ!Zc.
*=s[bl-G8u)αd}/_[6sϐ`r￴rj?0S,'h Y^a>1_C*o~s0g(>C̱2&G%Oq4	,$SV)}#ANKg7γj0Z-gQzϣpHf5^
F3^"a"+sv-:=gf@#,E^PK   dO\  p
  <   org/mozilla/javascript/SlotMapOwner$SingleEntrySlotMap.classVsU6Iz-hPB$T
&`Uբdi6awp|'ޜq| (///:^W/iZBHts> 0<J#rF91?8=wF9aМot& B2 3`2U휥n:ǕC1iñ.U6)Zff+sg`'%ldزȲTڲL+
r2ڰgA8R:׃4y6074*c3{a̫"SzCBa[CMW/N[d dFb4l-M*~D%Ȉ!*JWl*z4+ѓa򼗇?ȰN&ãbxBUTtD-7F6%dر2꼢gQsj!"w.̩ͽa0,!#xa:Rle뮵T8}13H9P,9T-;cd,j)<aʬᤏc.&+mX0Q	228мlLe̫fj"lA}jIhn4Oj:UY'1n}F4s42x=s6YW,5ӤBwG'W'SY'PV7(0nǑ?ˤ.ivPt.
f^;MgɋzM-t){]lgUCXqK#P%CRs%"΅Ȍ][	gHS)kS'SRq~dcz{!9rfʩG5r$;΄iMAiwxH =#۫."o; -[˄6!KvIxh>+h}%l]D[hN^Lѷ
>黈NܤmLJk	@̸O'i-gq!2h>;p-dwwK]=MP4rﯲXSj5՜Ɋ'Jz!rWvob+_ז3-"ĺeVMV|^2#/ė8	g5x	xQqNg/Gֆ'ƋT(PަQzyUB{j'bZ
mHVVbp5=L!DK;}5ZŞq8eUA2msCQCpb2Th"F]!qUGjЅ/_(/a7ZuT#P9I}S!k\&R2'˰hOteMo9?W<R@iQHWN<!t`Ъ{ghmtf!H_{߄tCnȣt[ 
bL(%):k,Zl*BPK   dO\K  w  E   org/mozilla/javascript/NativeGenerator$GeneratorClosedException.classjAƿiv֘U[kEJPm'1); ^yCo|
>xfb)9gߜ~5<L!"AaIp^8.qrτIO<1e
O"PnYI>Ȭ(sFp^9E"RnTr5cEHmHsavzG	.}gGab@CjG
P:#i9-RH5733MMj:V,~쬽zːom!+gg~8hTO6fGj{bq3ZS5L#!͕766.1[[fBy3Zg>q,.5* sYsZ}c`pgc.E&
RZL'(%<~ό0VOH6ѻ2&0wBXCѭ*MS~PK   dO\ns8    (   org/mozilla/javascript/JavaAdapter.class|	`T9̛Ldca F
 Ud`HhfպԭBU,VЊC ljufvVE~7I2YCw]=ܳ)VM鄆ƕc4lY(n]SiuWG(&C6r똺H1n;obm}m|29jMY&2>ol74aʚSk"k<`ۡlaʬNtd?r6Fj7I2!@'x3]8Oۺxcm	>2oСB@,KPC!Ի&>zVchc|=Ӝφ1|LD6
v8*d*z&-V2uICx94F0
M5 厞^ŘrS*uCd"*ġ4ip':ula)#;"aQΌuh_/lX;7zQtfOslcɝ޼H,*NSm:͡21kcWy&ky3:E,<M9/?F>LPs+18419hBo^L#zD~eƢu+4ΰLi6SvvsF.U(GL]Q51ATa<YL:퇙
:'
iSpMl舫Fo664-L,3/iP_nN8zMĀ+y[BR]Y75FTEZJ9Χvi
4{oC֙CzLVFTGZN`h}\^YDeQVJsw謦xmCȚhLUTA)^[7"jZM2eԻ8TOlIg&i]*5 Y0g:מD]dmxt
Hccd=T1i6<MUx"@U@_
x)өǨ]J+fw}١r&{Mth#2+rWJUtuײT !u[XjUv
]ku]O_!r'P3=R
:sNpZTˢFKhYځDQ*76H;cEtJ$-"зvHqctmCcsIQSu{Q)\W]+dN_Cw:2L"3vOkX7AxtCwwM%]r>R'g+4I<mm,
K}}Wۊ'IhCb#S}ڠKXԔAXNzȦ]=L

O>zqyҙRjvhX'T<vEG@m4[]bӣ{Uh?p BT1jKGr%C~_%NŚZ_sܠu\7!IC+2I~1C?!fU
OfHYBjMmwBlzbӥsয়bjW=#{(Vs^_=F!"jd(
xCbXw^`rCx"%,zաkژtujYjC}z5{įC
OTLIK8SB-GQi*m;p(;C	c]xϡ
	
*wJAm>C#p',
km4!bx5vdCGܙ?+0EM.2
7x[gH!ț@f!w:MXm΄зPT H铕*,|~Pq@"p6Ean=	|8jKbI1fq?sXU.l%-悶T3*<^P8ju!:O0dvݚNǷ۠:!>c^|Eَ+g1.bWr1=r1Jn
ꙑ*D.`8>	2?Kn)IAN%\C?Q__ȧ9\@xqcy'dO6)ezmz0r	Osx:π"
w	Y|g"ͷVHf9
(I
1#ǎY<*l>zM\p%/Fods4<̳*1D.&$6ʸWE(ߥsy8P$b
5ù#eU5l>\:MSu
a	ii'qxϜZCutY/;T
4En;+j.Y(Uai3}DO#Lp
׊JXtZ|zR3jDf8uGjɮ=BRfߓ&E9(ɥxq8&}GN_tR.%GǌKN˅ h]Q9JU|uWh&U߱V3YP1kV5;5LVmL7ǚZS#tf1/K&o[m%qEgw[x|3׬w[?Z}
xÛ[n":gDʃlg}dr۲8jH] X.#66#"TG-,Mu~#C땼wL47!rGjcs;1Zrx?keM:: Zʏ8{xS'mfh7<tH^witB>DbSVqƵry1A&#viy??(X[#2ɥ;fۍ#,M]я뽔qY'1DQsyIJ9%i뿠
_t%~cQ5}ی-+oD@:v$fJWD=V=*l}"Jx/f
YL{?9godwo#*k-oC
aZfR66e>H$k1I%@iB] 3;|{LGK|
ߵ+ΦYŢR쾇4@iGY*	U)>GRqdLU v9^lQ:=n,9XcOhX
l0 1u
MQ['bd1 rTPU?GW/H$^k%
Lk{n5Hfwv:NjuYICuWȍ1ZӁܖX'8n5uF:jDE0v0uQŪB/FM/ΤjN/`Ef UuX!y hs !P[|mx c8ay.ǫ	&{ʚɓx7wq&ĳH)j*4Wu!#$NL=8L4j&yMt=Y[4#pԙڰ	j?ǰkMN2᡹LeQv<GWgi59Irι9PY*mQ[ۀ#+Q1L#]t+LRKQc:"?֖O_-cOϧF-wT$PbH*|շNl]	Er䗺Uɓ\paT9ܣ۪
$aZSm,_}{QR|~çBQ9bu:/G^3;F{b]_kկ60)l.v'V[Pr4urG]6$/j2a:ĞNWR.|QWŦDKR<ia3p5-k9~GtwW7g(=2@&G,LֺW_gZcS(}ChMOU Ix@B13vQw
!lH|6vVaLY;;=vM9{2	gmQkʩƴhZ䬙~ïvDjz͡UI1~zH)]rկ9͞ЄuyQd]m5ݯJiLLDhe/nS_=#u~zOգ~_=kSi'٭zM6+hW(C*b.RG9,l+d$N1t9W"A9 kCH	zCkpOLit rU~.y~41g;·Ž娿MUZ̍`cROUbG*S`:;CXX/DTkZn`zW
/*\-/4lZFpl>TD 	U!-X}t!ǎ:
ݞ tYNڔ#(>%=SQќ,OTjG[ʹJDDec{ٺuĶ̩ŊjxBӚe`G> Y:}$~)R'vamd>3ɌC%Fi&D3S@m4܆PT^~=ǋkc&C&u=BN9&fmC=.=ѣtؤmEź֣=Fn?ixOM53C(M=LqU$JRm/S[hsjk))R<3tIL'2tGO顷.OgH]Ogt#:۞P>傲׽ڄ9+
}=!(m6qSR4b*@:5XƖ
C+u^U| J<b]esDq`h5ӆ5VM칵QQY~7feqûWiWvw*-_uU#*̘ɧf5+y:slxO We<R}aEd~_xַ-׼^}kۉ ,,vtՒ{risG$L.ERbM֣YFwH\ zSf((8B%e4^`L>Zy%)]DP/:V3}gD0soIg
d
lNn1+b@9t]1PPN͜9SFJ{	tQ`u+vؠƈե"d>785.5ƶaRd;ܣOw3=)9({n[UO/ K ^*5	O99n!gYډ]7Dc,LzV1j4ƽ委+zx;]b:=2U҉ 󺝵9Ws5rn k)s`MYq#}̜֘/5ޅKz|!芔k]M(wm=۶zޗC]_EWuC@hŞPn{k)Q{U2y?kHMLKGgYt6Eݒ\IQl؀׺X-$ob.MQA;h	!
h
Ƿ	+z6S=%Evw+B<Vw}9ˉ5{rݻ=PrLlݷJv}
C:l(nXöNo4hHb0ŊX4[X=|~Ig˛6e>)0?crR@o{&KDvI~ nZ&q~d.fats0ц1yGMlyb3A
*"1Xuӫp[]\D''`o ْr},-dV6& #y
ѸQ<|Y!ܪk$':ը4/ͅb]o*#=TKm+,:͘aN*_i=ɹ݇%&eZ/'wS͍.2$i{h;PIƁ݋"`|2/'zBδDީw,GYz&E~k9q*S2X%].0<cdk5o$gV)SEukG'Z/,B#=1,`M&$ǚl&s1˦XfdE:SH]MW҈K3#5uذ

6uMWݻ)
xBk5ݶf8\edQ ݿe>PK^к~ϖtlљUnZJghѝ]-yy}q5PK;@Զ3
m6_K
v,[F,X/s =BAg*q;xfe:
(/GPA.i>,h~Y})O\JAF!ICh)BuAuḙ}0*Wԫ Vt
ٔIU,E,(h
<N2xg;2&g@f.y. 

"BE%Ɂ5&
>}[Ċ4~I1(y%f:dgyPi!E)4ׂo R
(u#Ȕ?z7̊f3
s	K4ng:_/oK1Mk'dE}/"X	wzML.L֏BSՒ=*Ҍ`ƸZVY!_<B.fX5;i]03c`BUȸíe@F0iÒ
*,+(sBN8h
ݐ@Ktn*X-tkem:
tGv;]t{+P*2?-!+>N7PK1	VM4@P!bRػ3)Z詃ئ<O'D4/-&E 
4PQdd&zH%42-rF^B7UuHt
C}(?GF:H7Jm	m;xaOwd0:0%4U3daSo9n}ţ
1S"#ޠflf:N_,]J3`2|K˨%J@2@r̦!=Cz#dj(ˠ"1>5`j诠5Ӱ
s^ d\>Jߢ6ٴWMU,E,ݦ
6]bI6YhD!^Ôqu'`#j	T'jRY`\g6o;a3'.ss`o+Ef7j~	.
 eԧK]*A{!L鷛('mq_F' XIϛ萿hȟgmQ2EPv%0[OGINݠ^ؕ}45ptNCyLR?ӓt=E5#CbKYpOς럣g+@" ex
;W j̅,}
^$SסUa{6WO \B0ӗh^Emf (y+'u0}
cz߰b᩷LuFeah<*J]?RxC,ӞY[\3
nEQq3Lɼe.fJE(379eET=TK#q2M=K za_;N?_ic3QQlYzج@nqW7zy&}1Ul3FiABi^u\G1{cG.m8LVc[-bԷ4UP':½<IYV@X"iRCVQ3[H2$	сJޖoTBdao9{{1I̐e~bkŌpeYXA0hy|G2h>9{z8
Cl@h0I dlS9kZO 
)m nlVdnoytD/؄:LfÅU#Mz39YXِ:Ҡ
@3=r3l3?4سVkbz
q{11ΦOHhvCKt:٪Dh3a*8

M	DTLϭI/-CVJO>#Xm5w?@T>B
=No0C"|"8)q x<xėϥhhS NbS帿.3n mh|<@4>0_#h"1UP>hQЋw;3cDo6cWZϋΠ}o)[s7jd?&RƧ-K8jL07;.I9s;sb@vx<{^I^`Qf>EQ{>^BeU!~>πPyy&UM5UV"
c@)/\<Fm:KO|2ZȓpئznD8UdJWA>qDB.oՀMߟhSeۛSZh,a=RLS:.7M_Tf?,rS>ë|^
^'%OGr,9*AVTgIeHA,7
 gtΘf^Wf_gZ,@i@f46'D3YBb3eCArZYS75BI[YfM /fM(u.f{o-^qe9f47[6ܺ.{7V㾲p(o/PrCyfYO('»Q-`(3lE yX4Dyc6,xrq@A@i/];;k+m9ʲCقzN0*͕7LHngC]`7=]v7	.Oo
|Sse@y/`~t_=˯{cz!_HӤf89Z6&rC9]4rc.fz[PA0;eo;aBJ<31l,Sx1d

Z
Hϣ9GXv}}q5}k)xk
9EPy1><`^rF^_-|5o{`!AK_M?;* ߥP<V5VxZ"Y-=RnQ^Mާ~ ?|@EOa-S`w9܏.n	}Sr>/Iz&(9nл#ЃɁ#?ݱh;Velo
3[
5y>Cj'J]C6*1+[{1Gs%~n%SR2A2%ǌU tI2MLjzUMWÀJ)Lp(EfYFq)(jG%ߥ\QJ`dc	N<<QrM/xNf*C&L{
\c,1gi'LQFOr:vc5L l0߂Ņ<X<bynwRH pQ~{AFA;S>G!M-p<4OyC]߁|N{x",OnI5owMx}"Nԁ3R?qev6LoOc|G3|?iuFH d~1\iY
Oϥq&C(D:,@?kҪ~OO!9p{~gŃabt`,	瞧:|Rh}rH&h֧kBha vdCTtP%lR70܏dqt^I{j~!IMy#gqȿW)1BH풹bjNMme(2\i| ,^G[ٲ+Jdx/@HiBgAVh9V0~n76tubTTx&SQo1;HhUYd=O%XE T/Cd?܏Q+a-[Ee+W9P mtRj@%$w?d5
!Mpq"cE{pMn`
+
eބNߩ
xw!Dć?9 ߈ɏzRԏF__`zodJ4jj$jӿӯf19z52edƴf~Ye@%jm{%/YE^딩N{.N\
WRyS1͔Y\Ԣ,Fz
cðnBl 4HeI1c7 fY@[ Շ.4G|D2G^u⽪+\;[ZԴaOajv+&TR 
2W
5NPéXF%E(72%IjS/fbODxq9d#ArjG?mrsMNauW~h'I8 fU.
wQi:DO^j]`YOYdJ8u
V|*nLR98ιιʔڔ)	-\F>BKKV_mRV<
R6:Ok6LN(qhN:
Nr"xz?>9+J$>(H8$[Υ=ŦYN%j(ɡf+CB43R?PjQMUC|Y]R%/+LxǃpЏ[]oB׃R+þ6+H@C=]#EnY}5R"3&|um._}MJ	b	7!v!58;q6
PPZiYJ4C-UVYIj%]VѵQi-Uk	UO/FUQj[L%VqP]\Tuk?e=K%&m
MoEJ~
i)y	Ji(S;b1
f2y~G5m3+7+J7	9ЖCJBo)@IW>/^ShQwuiS
4?7-(\-z&j*ŝWI=VWGM-DvCl.*RߦԽtfRAK]ى!ZvXB+ܽ
uasfVǵ~poPI렄ܖ6 s[a<FhCsM4

PXSՓO,#Z<V/ZHHt%ݨ~EPmuzXA?TJq(ICIJJ#?2]Tyӥ)AvXYu$GD!ָuײJo^i-a?C]ޣ!꟰Ow5c>Td,aJr
SLM]sHKc딛 SL=>>/	{[FϞsW#ɐ	
lV۶s_Jm|V	Ja!T&zИ?bCۨxbwz$_5?tA$AIrW\\ݬ}׬Vq2O~{ޚ&?RZ
n9}kP1y ϫq9"cXCET /r)_k3h6~4G;@ΣOM]@OzUGЅBtDgGp@(W=&!&KjؔeQ
o!& !A<#?L| 81˕X.uhs\)p7IW0&Tt`
8_=:ʆ{ 9|t(+I){{^=oNi)?0\t[ҍnL`4>sKYlQ/xM42=__ߤ߹Υ٪MnapxoOmk2iAYt
/}>-gQ>u%xn!]5\>/2z_/UjاWVVq?y^뜬?e'8W
\/ܨ7&y2ѭ`$wGrcϔ>)<ݽA+<5	CdT%x;L=<8?dhoqs|%\nxe~U6fsw@V+[AG1SW*)9ТVr gwwzǽO`)#.(0HFʹY뮼L#lV&+_} PE(oi㩮zst΍4TߊT7D;szBQb}Y?H]50|ݴU?B;Pޥ[E?J?O~:ބdۅIKgM_1teJ{ݬ7JGuԫg}GKh&7m%O(d}J׺Nt$t1_@t&@5l0TkGq7zc-U^F>Q$'U qځV3v謃&199:[8-i#m龍Pq{?;#ah0&WXS\%
C/>B_}4Gg{ɕݮWT\Eq+moK!mɫ{'_L)uՖԃ*OR79AJD	R~6CJ@J>[Q
b)jYteH~z
$x0ݝ$nWץwwˑALh7k,ģo}:(d
,o^ 8$Gm(u(Hquެ6ՁA,n`l[jq^ cGBk
xΰ|k$kjV[%F'Sc1JH&/7zD.ׯAil'%(>&l'fQ3EQ[6J	<'6&4/ h`~i(
70-U,_j?L5IgO5b>L]$2zl֡*+| FcwP%{wAP<FMQDMU)>TSɶN#**&Dk2TkMN,9\vfudJG\KY'xe'PiTH}UbdRJ[&1L%SYI%SɀW^f=dsʊ6lwxa9wF%/\&!4D"cERL^,gnMOu(y&ʩ5

fͣ5sb- e+AE4ZL*ZdCQk	YKY'2-6`|4(oI>5fORO5{|l
;GCG,pc]
'IaAȼQ6p$>@+.p{_|s@Y`e"2dUPFXQi4YVm,o<>>vs
}{76u_f`(s!pV/"/'`[}Ӌ3ܬI;?n7	ܢ|}R>y`Lt I%314wF|=wM|=ռizy9/g4/}2;ђiٹ_W,&OǏiޚ{	
i>-
f-zAEx^dQUq$tP3([LQm^ZJ@+h&N
,'|IFA;lМ6'y $$䁄Hd`~Y`<Tc%EeXC3:Bl4,V5?ni5޴l~%8Zj%?
_5:bPK   dO\T     H   org/mozilla/javascript/ArrayLikeAbstractOperations$ReduceOperation.classTOA}k<hKmA 	PICl^ݕD?'	$B4>Ggkn_fw͛;I<Ubxz\`6m]wf7:હY7̳:"hahY-̯O<%:bY?a~&ʠBI5đPѪIaБcN5R6|;pCE.dhPp5Ҷa"s.z?unxS:AHnPk-
f:3#("%EL`~H
>B&۔SI-\*+6ls'2,/).eeH0-w%'0=;زb%QɖMvcgHVra>+GDҴl*&]
ϒ㘞v/ȚA
lJ1@H!ك dGۇmǈ"-Lw>BPjI6t`?VYQ@d
:4sL**$S,D@eHB#(),=
lCهRC-],FaFXWJRq 4 MTvӚ"=2cx,qOd319PK   dO\`6  
  '   org/mozilla/javascript/LambdaSlot.classVMSV=񙀁 $؆4iPS5q-,y$9t.h7,L)2IdH={޹}У ( $"QNWoU;#,JJTbhS4ŚgMdǴ*i\f3DrD	l"/a'&+U
%GFEk":~$58#ٲlY0,EMoմZ:WVUE6>1S,eQZMqC!M~lfyBndC.R1~K*S\|IvFF0"*5IA҂Dd\ބ$Rv۲Pd&(F1[zͧ|7EDEJtzO@s,t]$kJ;<!WsOl$6Db,{{wp=Gyazu9=IS>eʆ"y0I%BZ$83DrJYAy}8YW;	<ED<:&*X2Ӫ(Jt	iRrV&AWK&:6Ŵrfd
Q1sv{
*^T1|pâ{?6MTiH\%7ѭ'gIŇw-Fo!@ec([_w5~dWF1׶
}zFFGsz(ˊj;5JhJ)*WϨ8C5mE-Be{!wwZY
B&SC#_@hY:qUC}|lGӜ$SG^GQdDy-C6*
X{3zzb6
hCtw!zS1:@ftQ9W¥S.шX$J a+ICtzϐ>1S|fDBq1΋Q^/).1$D3
m{qcؤ]4/PE|)kZyc
AgU@ siH4&~F'"@h?LMNͷ=DIh/>̑+i}>`6PtGɦG2P&7rBsbtn~q^Sf]"LnG$fo쭂`]mw0ݺt6;<B PK   dO\N6#   =  /   org/mozilla/javascript/Parser$Transformer.class}1nAE!B\ ]
h2U@ \`1hѰ	G 
ep5BlpΚYͥiEY^bK]zٰ$x <Wq\ך@hCv?Y
]w\	HΣ1}Mү0B:e
c!AoxBgR,CgUY՟o (@\9fD"C᱙PK   dO\: B    (   org/mozilla/javascript/RegExpProxy.classTN@/&GF8͒6H|_wP8`z|ә7/ S9v>,3
B0s˞{U`@:xZ6ջV@5o| )H5juYg	ʺ/e8f/	}<UhbNz'p>Gk.[GqņSqKz"
fH&U-xϞ3{)9D!cx_%Ip]=XFSk
JFQ0\vW;f櫠8i4
D);!8>WN^]lʸ2{/cd< 'PK   dO\OM8գ  }  )   org/mozilla/javascript/Synchronizer.classT[OA=@/ꅋ\,Pc1!i,f?j1!_zf |͙3g wq' 8^1٥2^ӳ~Uzc㩕557ъJD!.0h+\޳Ija2}˖$P=rbH#NtQt١W'5qMIzna*M_`n꘾:1bpY dy[rؼ	ȳӁ;e--۱U֫Taxם!Ӯ5pI>L!tC ` ˕@be*J٪:pR@b7K"#?ZbqHDJ&54Ԓ]si-jy2
ahIQV6o,+ӯ#ɏh06#DbVo
!2B[yr(uE`\c6=5Mx3t?"Ih}>Gh*N"!hOsouo23 F2mNM/ ,t˺j]GDLNgp$8jys8!E&2NAmAb7z.~H)Bo4PK   dO\e    :   org/mozilla/javascript/NewLiteralStorage$NoInference.classQMO1}&l|JS@b9@{	5br'gc#S:v
	Umk<߼7O'XO1Z&1#жn
ZfZVSW>+&W':9 O(Y`5LK3ȎTFD`_cɑ)~`x˕b4ʾܖRS<U	|Gl_θ|SHKG2^
41Ȕ^YS!~Jz<ؑ+Pc+O:%IAb+/C@˪"j5FxYu@[DӈulsC/#OWcc!,b	5FDao:hWƏi*pa5ߢ)Mhd
?PK   dO\N    :   org/mozilla/javascript/Interpreter$CompilationResult.classSn@=MbL\wHm@D!IWV7ZHW<T >
1k7%3gΎwX(aX*C~ñ4<a%C
;2J(Ḹc> )FZNc jAפֿLecw"JtNDFTa@M՜4\TPS53{{i@4=9yhӰ7Tv'&vvGJW0o^Wx0ZeҎOe|)ڟ3v*Frk$;\^{{˹Gz?4ݿ)rz*#/!3EVQ\#=C;"A?AEȂgtI%Y:JeXi|k<>GW?Q`SWYP|=+MR34pp-5cXw,on.ig
1K7PK   dO\#=ď  U  4   org/mozilla/javascript/Interpreter$DoObjectLit.classU[OA.-tAwR(rB"Pi0,..T7/QF㛉?xfKHTm2wsEPZAFw3<5-KOmtp͂Hem݂iڞp0;c4mSL10VQQ!YƌnYЍ-st{3ugm"F#DUhh}~EV*8g?Ι$[+qM4CWO5GЂ68ˠlrğPZc#Bs*Kly*rO^Tщ.(.p!WR UYI3֓;9x	1q	0Sn,A{9ax1u*PwD
SA*Ŝ3SM95J}9ЭrwLp%*I[;(7bȮ
}x5b%8Cy7J<t J/3_񐃲I㒒D%%ښ$C_'ȊSt
>oRGlI
4='O(0t'm{҃3\6'V}3Rpau].4O4密4AE](#L|_hОaxe
F1'p
љ.]4DDph(;oڃ_pF.r0@>G?GmKk^#-;6q\񝝡5?\j}.f;2Iܠс)Q=I(Ig1G4A
Dhb$EYKPK   dO\R;U    1   org/mozilla/javascript/Interpreter$NewState.classN@?7ISB72X*!*Ea(~	rUTwWx+&$aE8)>>ے?c7B^?F.!G)JYMm>S#t/u;<Nj3YM-^8128diSX3Tɼ YNMS݃;.Ѹ^B]fFtz.ĀpB<*eVvjњGL>s3$fp
zaAıFu`zl]}$-͌A
PK   dO\`  "  #   org/mozilla/javascript/JSCode.class}RJ1=iz_>-Vt
5JvWԿS||(q[99dϷw {X-!<S 
c^Z]s+PS+At^5Qw{:
%Ga-Sr =2zRqO2806/q#M[t4U&'0~щnTPid2v?}wȶjŖ"
Ykl.̉Z덿SfhZuWj䉲JC)\Qۙ}7ևp,1lfRKsE^Ӈ3g
0"h)E켂PBRXN8į$)9Lc&Y%r"9V	PK   dO\
t  (5  .   org/mozilla/javascript/LambdaConstructor.class[|[Wy[ҵؖ_6rEvb:	u%vnkG,:hi2Q{ƚ:M۴Z`l#%0blc{ut%Y&ѽ{k?~) W6
UTzg6u4H=Ff"z@*V*^
>j:s>9aSI߶x2nLEKLƁ7̗{FrgJǓ}%g鸑y!.`ir!pYEegEy5:P/J13χm7n &:Z*Д1)+e-̙43ݎpF2',J
f3['rؚLmra@}LƻH PĞuĘ5AtsM
сNe{>iyZ6bG:J_08)0-\"rYC.&lfF2a90[16ANL\=N.B9mťͩx\J=f[}\\ӂx5^rWPa@
LPs&\P$OG6
]iq|k8$LFm ];z	,jy/
긞Q
FLZ25S֗]$GtT<i*2L`Qy[ƩQc4ғwE+L]؇7
LvpW%[ɜ pp3Ué"u0ZSo"zda@*1d.ʙh1<RB@#rqB1o	ma$Lo=p=:#pyi_H,JY$^0W4%SG`2{JBYUX@v0:vavI|dS+
:l9zӲt6.+=tߢI#d|hw$!Ş=.dg3^x7|G?ϣl;u܃w	TKVL+Vr&0Gǽ|:auI4,gH& >K!d/:ѯD^|XGt|#m3LJB̠f|n`3qg
/+:>gH-7K|Lx&A_#e4"sBĈ$dDՎ_M_CS'#K^33ɨ왶H̛M?ٳ%#cm瞑ёj:y}od>Lt;3<ηf?EԒu^RGIv0e3=np^&w碇.+U:
ԫ*0iH
ULN[5t*}tVKwbf1'KKs.ZI\E2Kx+hiDjLܩG:ӝp)-	H[IL	#4WSn-uԹFFAD!8h_Tp%xڿs~O)W[2תּ1}{97=&x)MpǺ]a+B.H`Ҵos*}ȟc-}R42.9
v(2|Up,߇'~:Y
h뿯I
:ZIWPThʾVgx+/'`-A+ .Th0)q[:э
[I-z:cm(Df-m\6yixx_?ŧ5Ʒ_]ۿ7ӿY0OO;6ni+@
TʢkƜ-25B<IR&tӢV#ON͘NBدbwa
WHN&Lp*53?WȮ-x8Kp&-V`2ǐ&bA{eM4x-"Ys5V~C>ߢo@^}}}t}MnA4oix?)}8X(1ߣ=!WxBe.W`
D#t5\ 32gi6#j9&&[h}6)B`h7HdEYhVf1;6bL%DC&yAx^yyV_&gD qB8`،YϘS<cgLϐ%Ϙ8	Ah}ZC/sܩ+tb]7[FJxo<6aWyWCCGт(%1KKKKK2~OzW+G/QW۾<sy|Ii7R)L?irZ9ձE{iqݎ ae^Y܉vq7߁
x'6"n׎W!k]FGd,ۃ&z:8<+_ϽoaƊ}DDV^HT:NIZhq$~r)\?a)\[\At?Q>Rӡt(:5_k\F)l>(y
.6^"v]@)JOt;npN>7=~	{j-5{	tw"稴HT9#XOGF:r&EkIڤ&k^9zF>Z}-Dr=M|K:j\]4|w}{w7KxQjm梀\V*ZX k#jG0mi'R=vsD,#go3TaA,%7Z"ۣ(=l"ۣDUEcI1IϨJ$LY黯H-|P+?5UYUꔈS"*-[_ےB-_3cɗNH%[ɒ$kaI[GTL^"TrLei˜KuA
9%&"luqF#٪-2>[j)?D-|֊:l
!WJ߮Dƪ׉ZNW;NҦO$ -DkZWɨSDӅ3 #agî#{Q	ؿw+[t~_>npQ'.q+zuի=TO[7
q;	w#n*˖ƽ=+I,#hJtH!rHYJ}!s%GYbцxs @%\
֯`
2ߗ3fז53rfs8FIAɧM'CaoT$Fet"ш?J75:'FtɡcwΞ-l>w%ZPQ*
AE!(
w!Tn?|M~[2gRW2.-lR%Cԋ)mߜߦ[ɚJ&&>cU
ܻ~w~<BPE^qޓPX{Ge;YRA*Ω#rgD1GiOJVubQN('D(QB;iVm>Rjӑ/T,9V0"DnWTvE]QmW]ɖv%[ڕlpd<^S6xߪ<_԰*cٮ6E<A̓<E<Yt{aW	-FԖ)^ #];d#1qqs'v;w=""Uk_-t rI_A7L#]5T	Aፎ{LP+p1 >=r/
H~^qxrţqWILi竅YᵯˢnDOvH4ghaPK   dO\           !   org/mozilla/javascript/serialize/ PK   dO\s    K   org/mozilla/javascript/serialize/ScriptableOutputStream$PendingLookup.classR=oA}㯳H$@a+SA'~
]v""	D 
Qw3ͮˏOlf(BX>/EC9v]G(;7p
$ajǩTDp	1J~榙Tɭ'R(GƼȦIhFv,ZV&us=vf3UF?ۻOǄ	"dɫwJ~g=srKҲMF2}:3hFf]8%\Y}[		ұUU}j_ZX`#{Z˴k%_vᏙ[P װey
hǛ1xZg.9S~uo@׬r\Dk5gj\\a}3{oU<yef-LW}:4?PK   dO\`&  p  <   org/mozilla/javascript/serialize/ScriptableInputStream.classV]WW7D jPА )ժm6$jGk8P_賬jjtٵCT힙4I@2ws{ hST
-[ܢ;Sf[jtSwE5($gTtB8mĲP7-Z^rei뚡?'nmU-%C\sn%MWv]-cE.o.Ub)t*zIUl[N]v4:؊PM'.O~`,	qT2薙2r9miisP^
,&n :6{[XA*C
z
)eev:T"㄂Az'K
q fkIC˙*fab5/KnZQ'țV>xVz_f~-kR
a}!|
Ψ8OOdV^Pm^?Sw(GՓ9U@ߖf&;so2{#sY QEҮl=[a6˘`i.kK{~SwVv4aoQgn²kf2sPnъ!L!bPo|ݹnBY;np](eH;MLeyN3~i+K5aYhIn2Ms2Jjf]9G/Mk%KceA,nedzޘk|[BESs*6G߫υuY+&5"f-ŜUrRwsiG\crdYNٱҴtB@ǋi9yE*%ˌ0ZlzHw;`qWE
+\d-(e?xQMѧpE3,=I/ie8Ԭ<t5f9ݑ:e!Y"]zx'
齹**2xاJd^3p9~1ȱ/z
%sd_36\ާ8g:a(|d 'QA78A1%nqaͥEn1RA
Rv{i6'G*q>t7|.wbId	T.KB>=$bl㱦$gNQv֣th^bywCYG2 cNq~{.Z__bt
C0ZI2_㷆^>F?ְSU|~0%5tRZ:sgnx%l.b)v/u'$JnwH{܎pgGC"ڰh`ce%M+L(/RPK   dO\ 59<	    =   org/mozilla/javascript/serialize/ScriptableOutputStream.classX{W~foY&$LH   @$4r+,ͥD	eCB+C2YvgPV+RѶ֊h%b)Bko/?j93
I$g=<.^

?iܻ͆s>`tΊY]Xkk<_Gk}	(R0
Uffy<h$Zd՜341{Cۙg̴.aQ*
2Ka#YFyjJQ.![`P0ToKJ(.Q5YsdU!̓P:ʈSj7I-5膫uNĭq|XA
HSf=tAn[6HA?G?%Z&0hzV	#:hPFD[^
4U앣6R0M
aǅ@-r;BEGI\e1&G|F3JdVp'HB햔7iJzzvtnip*y~Zv%ܐ
)ӖaBXʸK=.cdjڒZ6˨bo2ѩldo8 S	qnpT)8%mfj@,kPcq@[!G26	CJX2YLUw%Dl">lӃv΃ ;tS:cZu M\j@$Աo\8Ђ.`}Q
%ߐh0,LWf&mwdK[]5TNtA~ Pޡ9>%6oler%Ts?1r_;/pj(>{uȭn#Kc_vxD?bbCKO_SN=z	)8*Jk^<g}HF͌n6q~\JR~>y|C
)[ƞܔݤt!@ƌf2︵7pov[v~foX#;\4j9%52;R~(r%w9Iz'̼{nH&TU}C<FB28!X1,n8GSdV'&As7Cjs8n<b}|{7[,-ff\w52sV{fsIf?݄bf.3w"s'Og&ѳVTCw2Z:[Cf"oefj%j5RIVVS1,/{	o",$wT,?'Y_W	}tۍsuvj=V(OrI=[$-8`'$쓕DmZ23,QR)=c?!r(7Fd\cpnHsVVÌ>oxW9mA	i?^$w?@cCxRCK(ԆWFԪom3S\CFDCXe|:-.Ok2AJ@}NW%F.UHe:G-+X,X;A!tF\E
e%
m6#zOl<vs5Bz: (cTG>Iܨ.CxN	UDbŋGY̾x82u#h.`H@:`:	Ffz».uнtc.},~xs.AΰA^D9N4"T<p"TAHc>Q~lW/P!fBrxmap	~xf!WNWS!`i.R+rI::vk啯bqܫm_?eX<jT$ijUkk WU4
!3ź5J(l. wH{T{<4^^W+}m	4TFC~%!C,x`xcቈr(S%"i I!k8b{[]ǣˢ~_~ljg:Dizd_6Ήck|WPW;z.)^tׅT<Zxx=xs@%|LmsC?w>?/jqKz;kY
Q*0C7no+GZ4ӗp"6i~!γE]8/_uL;-;V<m߸r]PK   dO\1  L  6   org/mozilla/javascript/Interpreter$DoShortNumber.classTR@=[!ߊҢ E 
3qi%?| nt !Lsn={v_ &$!VcsZnyoZju?ھ]nCM.Z11mӟehI6hC\$rTĦ_5`h|MG'	]fD@,jj@1lypZnc~> WE\b;y645^ZY/_<[]b/ȸkWZ!&C$C+Q$A㶈w00-=lBSHH"꺄42"FddJ5ïl;OHnԔ*.h q[HBHK)έiUfˎYko${By3TZJϫ(iƻ0JPOcNz?{MK+U&/WPTr
_t<Rڶ%oGJ,BeHL2>R?=A*Q,#:sy3v/ `S!<0=|>:Fh=/s}"3V3=JCSs^tBR*	d.L)p&i<?<fM!fx@ }Q$;LX/	4!QHc('d>PK   dO\ԂE    8   org/mozilla/javascript/Interpreter$DoShallowEquals.classTmOP~V7LS7ަ_&qɄ>rbi{I$~vd"Pl{No}vϏ߾x:bHPdvҮm^7=k/(՜@x{5_sk:>CrrCP\MnnۋpCz]ll;	ڴbUjYRncH݃W[ܦB荀/׫5
בSqMD=a*V=V1*0Coڗk0nMlaX(3LEz6;A#ZMM;kr{{>L3Te
C
%5q0t+uWk(ǖAۜZ<d:svO^,xAQqOPp[)-Y)I	Im$Fq^zy:=	SW9ҩ3VACc
i
/U"H*_>*Ck>F CQ8M ?~u^|r"SsǸ`:Y&6ah[j֬mÕ8&B<&X=Cb o$\f	<
1,gC9Rf8B	'	83Ng3(!@)PK   dO\B  P
  T   org/mozilla/javascript/AbstractEcmaStringOperations$TwoDigitCaptureReplacement.classV[oEqkǹԍSR78)ԐBZH݆:I6뭳zw;	m}GH U൭%(O}/ \
gv]7UH̞9s|~ b! $hFaruE7%,+6O͹QT~R(fy&hZE3yMM24gÐQ)e:*6_ru+Xmh.D׍t^w6W4/-ϴ38h^h1=C1M0BBBw{лE3fIZAM+J@x#z؏Gv7ș\+k@]N:&8>=eQZ:'Is/U X)K	b؜1CgaO3k#lO2PR2f$I]'k<:TӜ2gxZb*.Ue2-~{?qϵK<zlS7oPJL.%KU-;U΋5n"{m{@M*K0JE+ek&LgX6e"T+b{7.eSp=Wmڸ.ٿ]_T)%б: <nY\ؓJT3&c!xCZ usZԪ[oq﬿=>ƄbM-kqޞ
q_؞jbLSs⺢C;?w[.2$3ޔVtk(UĬϐfqMdSC
M4~ B_ͺ|k<aDTQLv"YҐ;7Pˉ
Zn"Fuz9o:Dq9XZ É$·:"gxx'xlqR5`oˀXڏqr
r;"浈Zi!|KwH{GO03/_.~{9WA_"~j,a{,y8^p'
8^|4A$W)(%zz:<YO/䘄T]tC$uLN{2!wgU79uXWon%
eHPK   dO\               org/mozilla/javascript/commonjs/ PK   dO\           '   org/mozilla/javascript/commonjs/module/ PK   dO\wH U  S)  4   org/mozilla/javascript/commonjs/module/Require.classYTyyٻ,eEEgw/3]^m&"jl-y]^U4Q4iI_&iƦicQsgfgaFB3~c/ Npmc`F*]ߛO$b[cctϮ_XMN;J
|ɸHசV?JLԍBg7ܚXWª_gO[7Oҝ]`OĒv:n00Fp	.O]ߘoezVx2Jb`/IJouZAyК>CۯjuT8+N4$?u:
W֙ݠf^n
LT8gmXNmwYi
-Ehzi.(MvHђ3F[Y!֑Lp$KvuvZ4lR#U& "0ֲV`՘URTVbcLՂT˱
m9vޥ)bN^kb>3c{\Ym\q`(2ĥmIkt:K\CF7)xbvOƏM,2.kK<ib]k]<f"t8<˱@rX8B$z,paMVeC͉K1$5&6K}{ر.<G9vЂVw)')FbiɔT6AïdbpDQӨ>IZvug5|g Q)4˺r`x~ T'L,4tjG>b=܄FZ62KlMĞB h5+\ݺ+iv=>-3;2DmJLerSM@%gT5=>d`y:wmwa[nH̦#H:L| )ڌR5gS>i>|djrRQ5Bd sWک,T
o2!".-愓Օ	V8e]gM6[3SF ÂD,F^9~UWxbK$;)66H7{y0i Dn0rTU{>6eO# з~GgB_ėe*m%TqM)U'#l+*u쉥M=UspcCN%ɔ6+˄cNJv*]C00h0ʆ$zVA..8?b۶z찝
>	vm!vxU5ե&N$Qϭs''ZKWv
/Suȯ9#:;ԲR$Wu֑L&s% ^k^7g;5HLk@VQ-t|Gp6woíW&&\2
.#?m
ik{>瑦O
MMb2H.;EpllZgqVuqs&~՗zS-	?$gƻx6W?SeȿFA($:+W#/?S'2爉x2ǎ*B92F\gy!PX.K,GUTݩ^):\SpZ P*
)1% +;v%})Gz)3e_7=veerwKsxkwT2^&0Bi1Ҭ2eL].g$r(=jufJc6+a楌]:K[^80JZɘݯX5
w^/^窋|hc6,.VvXJ/M-FOwcĉjIc:FڱmLvli+x9 R_J%k/*<~ϖ:«*
sXrɑqCO1w?ĽU1;Cw5ԤR~fK FP9T7=0#hXf?r *Rto*c//q ^agມ|x0sҐa߂4s.AiހczΗF;OƝomʫ=qyUs£Jv;ag"@k?i5iܛY۪cR6[e=_`h*%vt;]enI'%4ƒpށrKЎ+3/tYNme֑qڒ&k u>E
1V3\|m2M0g':6Y	-ԶU& 4uvFrMk֤ٜLZi=B
US?s&cm+
a*$SA)+{"].g4ޘ87]7B$u2=\{`pĊDd F8| c٬`s &Dj09R3J fDB̎A ŤHu{(\9EGd?jEr#slנPkTd&n1yoلkqp;qV`3NC:+eDteIplitKխ[|R2OjپaozG
b?衵ޱō}y3Nczi/*]<a;1FD(na~TD=!ω86<q4E"jg 6G'%fkc[Գި79'&8jfw{Ԛc	QWW"<-G
#T(n{	B۱Oe[5yX>J~q#>A{@D:Ô,8=؃/} ϊIkN`D\<X [װ0ȵ2LMڽZXqQ8iGa7yΠxxsXʋg6~wpWԭ9Ցl_;4ޙ/lD";\y^<Cڑ#I,z%ꓨgۋ2c1}bluM{v =}Q?)%?B˔Q~DCFd_Ѓ/eT?3ILQ|,,IZk:7Uz [ćxD 2JZrT^db^|
iU<D7g]m-SrYkd1Pl<Nj[tFܺu,&jq	gWQ=-Cce
x5(oܻ6_qH,a-h<U5!B,45kU'MؚxE}QY}e|AxsĐq&GFXtTt$oPM	 @ [y9~/u
K߸sJl>/uCQZdR1d?eG-%Ա~RODM5ܙ!ϲ2Ce>;D˖dF+^Y@oǡo0!ȉ?fByW'2M+W{\=>WtaqxI)3㘘8%Ld2ސˉ+LSLx.!)a=:2b=8Wcl7x*2D-eZx^ wŃ:rXd+Eiq-n=ZVP֋rosJifbͺG(?L3iL3PqUMrʐb"VK
(YE}P̲s!ź,RDxD$/L+%N-ϟ(TˮاTҠ0~x2PIQls~8GT@J`i$x&sV]M#x{KCBuvDk9";DiFȵ(c'3H
b,rRC0QK#|~tt£tS_yʤUs0O:sf,= 2<-d5] P00;)@d
eK+z
;.;&:[}%sk#Q1P8FF:Y.k<rK4k5ܐ1<R,.u:#u?(C9s#[/zϰ# Эu۪ʺ_׳s<>\}|#g	8"O3DPMNR﹬{\]7w"$wJ:P-.x1YOL.ubOI@X<":=g턫KYqJ%]NkU\\kVU'mD6H[V&+<s"$ 駷}Y@qj?,?ՋT]o۠.Y_vܬwglՅ6BPK   dO\oə  z  ;   org/mozilla/javascript/commonjs/module/RequireBuilder.class]OA)e,*Y"ZXmvK;uwK~&%$x?xfvvlye@nw=pLwxWVzdvЕ͕zу^
i}cTž8!]}˳kajU>U7uOSCoh
ۖ:00zg{rx\0қ62a0Ԅ<opa2+QcMy\zḭpm1	)ٸ
x#XwRf&qʦOYΕ4\sRb=t}Տ%p?|F6LλCr]Tm`mZއ4TqL8Lla,U1Da؋=D͝;>Ji$7cӈ?1N|>?h?JP	0uZlR|e)ZF (_زOJ 0MEWg0)OS'p>z-U8қaզȶ[ߤъ !X>y %F'ezzhYdB,;@_
8Y=$[abc`rv=Rl`Ob`clFlj&X!֧clΰwo$\RlҞ9槔[=z3ȢZ>y>P PK   dO\           0   org/mozilla/javascript/commonjs/module/provider/ PK   dO\	]v    G   org/mozilla/javascript/commonjs/module/provider/ParsedContentType.classSKoUn85nԤ-M4w)$m!-uݠ#jb_9gqUa[ZW%HP;v4
?<sw~p0
	u2mwwe3H\];.:Ȩڎ:ҵDJ@lPS?CÒBC0KS{VP|Q{J)d&] p)എ}E8ng=dxM93
#;Ȏ)A%4yp	`W蒁Eɨ#ݶf](X2*Mr'FYi. t2uxUk^6ށ8oBuP;}%}sKU*{n(pӞ8-3>oI6:يmۖcX1AtmH?=
6aɲ6,/5?$wjJg SķP8W[]rzꑳb渕G%vWYffFoSpsD%oMyVӇ/؄U>]o*H#ƁuICoOIwMԗ~g?Cx)3  ӵs2}rNK'^`a-M|RlBz;L3W/eHtJGH<z}q	V'X1J]
d23H,86O<s(`\`q%,!E=2>+5P&m߀LnQ+rP}j8h`._FP~gX1G&w:UcIQ]+>QT͉Hv14e!Pw#PK   dO\]B    W   org/mozilla/javascript/commonjs/module/provider/StrongCachingModuleScriptProvider.classUkOA=JK)P(

ؖB" 5Ē"j/vRlwm&Dgζ6%B
q?LuϜs_ p~@z
qe׸U0Պr,Z+V5TLxaWK[t-лꪽeoU P}3@ڪFzjBT[[Y]G dx-mz/RJn^x51c^\ɌXz#p 0xYcI<ُ(.z1%\fh[%l:lգ4(xW|Sr][Ǆ;ɰyoEH''IwJN}&'B0Ui*mt}u;ǵAcZҹ]5)?r>%	y:ɻ79B*<)(dҨxV-5	g㤑ƍIRefwj	uʰq>N)3/.i|8WGI$,g;ٷ'=`[0,4eykjۆ.Y6lR̩y !]ZׅҸe7.)&5tQ0 CO$gԧ4z2.K»
}G+>;QԆvbGv
͌qb6w8e]`ԅĖl`/{xKx!DC߁J`+N	jBGвIgwxD&bAb(?PK   dO\0\z0    U   org/mozilla/javascript/commonjs/module/provider/SoftCachingModuleScriptProvider.classX	WcqdFmk\섘Z6KlPc 
 GHXau&Mz%w=ncq%N.'i7#@,ة7ow7 ÿp@[h`<@43I#NF'@81>K]$3d4b&]Fx,U!^F(<GN`CχHMa3#q@CN) 3⣁98aI36ʹtDq[PLG9nPbZSR[PnY˾
-i+x8+Е1RcƄ!KulM1'͘3EvHk|C;h17Ͷ2%YG7vHwE{"Og3PX[~рF`TQfhhq{Mxb1ӰD`93lu\i9	M/{̩Jܴ'OVf3cfGF3m
:>}$ A иrIN&p\F6lFk)tj8c8Ӈxv/Q٥&udT<CLO8"wi%zLUY$YyQ「~>3icǇ
x8tĀO&=8U'b/OcGlYL^i	141u!I٭>.֟Y
a`8G(jIJW|t) SÈQ	T>*Cs:\@7+s6 	0bi-R#-K35\ yS͋ "oI,Ka_uhD)OGu<YIɐ,p!OlFxYsz27$ze9O[Kh]r!Inex-_-)35bf2MOGIS)ˈی'(:7t\3SQ:Y_@p`oW:Y}a3y<ݘ=03΢9~M!UyPϲd0v
Uص^?R4m*VF!W{0êLcQVLYF~	T؜)
ʔM?rTlz6KTLM
S9xpwRӆE>@<@fsIF5 
XCJYέ:\>ףmY.DB&x?KhUWHVw",ɸ[niWmε	<sⳙ#kd	I+x)הq303%Qia
yvc ;<8sx\9>;
972ʑS<tک9_aũװmyI	Ր]ETVo#hŋmw;.	y;tJ55
}o/lN_,nΣ 3yWҊ셼wn>TN*ـei}-kS~"9~,nOSJqVc^̱wR*)|qLȿF<6]\eg{C(]]Y#ki<*c=h![(Q]_uhnnX!8bKn~DѷWf5Bf;fr{vEGsjLͳ8ޖygZf_GX@s#.=MrIgS,K*ҟ	`jLҗbAC80ɻċ*	2Gs#x %^zG?q
'\p&
"Mpo|>:qIN_D^y|q94A'=>UT,hU%I"D(R|)"wyIiǓ8x >!T2g!iƞ,$!)Bh$o@R݆3&1x[Y]?b?PK   dO\x/q    M   org/mozilla/javascript/commonjs/module/provider/UrlModuleSourceProvider.classYy|nfHFDhЊ
9(`+aaFW-ZZm	VzՊ=bn[[~dwA.(y~~wv<
t1IK`k7օ#a6%plFtuP27@8+d\4Ѩ4FtX8>جEɈfbUxP(P8;
s
EbI	,8PnMuxP_xMohѾVSk}V޹9ȮK&aspѯiufIC`* zm?QEb@8epB|;P1YPWjH\#KB#ܗ}:T)'&ݘP>Vq8^`bB-qfj'LeѾp]Myfz|'bTLc%xrh4{ըQPi.YKUZC_kZ\hPq2NaG#Ҽ3UV0dMGuaْb44gMFdOc>gh,_OhU|_8sb.f8^Z$wVOU*a@EFg@5󼰹EDl#eNI/5\XyEҔeiS4ZUО6ɱSb|@cUYivXe9H";,m8OB Ӻ*O~q0.6`6Gͥ~~ePzƈѬlʑJFr 8-l*ywkpATчUEZ,	뉥urr5*W`(,i*|Tx	0T\(uyݠ!e%TH
&cD;֌+ia Rk/.RVj	FSq1.avt.]9u<9
.}(,$ڏWқ}D׬T3olBhZ*W,{@ݻʬ6ҏT^`p=!R|\@WU.
n$Ͷl1A=&Q)@%ɨbA4-%M&]ĺM'-z+cyըw3Ti
Mͫd
!pz3w4rD櫫
>#p:{O!2exP~i,}X T<">JxLv!dgc@1^L8N[8f<xrI+gW)fGblv;dA*QSK~QSxZh#ڢ1C,\~Nmy"J6<9|,[eոK/xA*ա}	="z<e,b@I-5\W/8pSoggg7jVͳe"ҶpTHf	T#\~&*[|kӄ[-(cݟ5R7/*-ʹJS]tah.Tx9զd@=grr3'*]QS[`Iܒ^ghg@c(4Y&d%NsyIZ,
tl8QRĥLF"-0RM%=(}5PMtP*!NNq{RʜnqZ&B(dv?rK?n3;XP~,ȫvlL˖;g
_p({[KJNw]d!m7˭As벢3'cfkv\e^aB)^QbސfTz8:`So_[x2wdL-ٟEC=10$cyNFm,7vXF¦47GDB(8i+L}/eًq<%%Tb^WWᗿKO>S8@ e~s\wiMmN([8UW,BfUu(M#)؅[$%lPY|)w-%5#PkjKVLߊ{+*GTVEXDTmv*a;䠫tUɑ4D5qg tWf!6W}M!~V$Jq̐LB,we{E!wL:IyD;)P{n8ApoGFTtg	xjqjS7M]chBr[N`k%j^FM3,Y:kK8
<7cܔr:}X`KM^
KK.EAurԶ+k"%iN4n8AKQWW?&Oހg95Q2FqG1rt_S1a~ÑIu
-|;cQ
ۘQ-"
Sb6D[O݋P&(tOdMm9scER1YE\onEhn}BqP~91EN{È߉IxC;qiu!\;ٻEPnp{5/{EL޵8+bn3hyp9ĕt55Xk
䶞9s[p?n0n:,2(yօ7'=oM>i~ۛoov9 e>e$\=%CF@{	k.%lBMPж'qk*|8+X߬_Vxz^AN|NX#{
	p7ރ|T2$e"C[nfce}N'?w~GeAڅx|#
CC'FЮ9^Pڃlb]ux
x,34:SY0X˚S#2
Sp98flJ%.gWYX"@d'A[(bs`)`R5%0I~a8:
c+Vtʔ[Zsn;gG(xt
mA;*PHO, %'=ѓO;4Q?jgpVʗ
&r<CKasF"Ű*y%,yx~#7]9%|7EUሪضE!

ʳ[]`DGPK   dO\*  I  h   org/mozilla/javascript/commonjs/module/provider/CachingModuleScriptProviderBase$CachedModuleScript.classSMO1}fӅ-*IZuOFhB%H=:VpFM{C@TձHEx VJʨ0
1OVo .Sd(6]Ujnc)I14̓P%Ja,]F2:hpGw6m^L,ΧJ犢YLcpG<ϕf;oq-T.C"PTlx/FZ<r-~,;2cZ?t.E>16׺5=tZ:ODSZVC҈-)|Ce['T4,urD@Ro<yEd`447iizX	Y-+ѺG>\|,`"O0,`a3BF6Ld&Wn9<%WK8O	Epxh#љ*KpPK   dO\6~  P  U   org/mozilla/javascript/commonjs/module/provider/CachingModuleScriptProviderBase.classXkpTg~fl.$` Bl E7)&,M͒mOv=]VԻRڠb -::Sf8Ꮳqtqv7i(6ɜ>{w_`3AJjGHFz[ع-MQ]Fv:mFn"k"	ghvy̧p9j'lL`ڎ+ݥL3$;Y+Pkvz44eǝ|6atvWY)iA+EŬdT`qn\&6[Z%2J:`Nʹ4sNV(43(UXhXcT(n
<3odmQQs muA2u.LIZg[F^M=tt:c;?A4cu:#"0":s\L߳khبc$~PԨ2U-h,D{	QNb:
SjwBRk"at)PNܫc<'ݦ{Dwl˛i533iء!c_"tYn"ྫྷM[֖sWn zװGGidtP)ifAK؇uT.n%Y;w2JqGhdr/DUKHT,6b:mD,ybKn-M}J^eq̕{<p650(w°@d2Zk%ʤf㨆u"S.Ie[SqO2b˾AY)Sn\>syj6Du,8!KA*I2c]Q+i[h!5<K[Y7qU~+N/F;R*̌VxG 6`ާ-"YMv잢RVɤf\6aěKٌσahB)!r$f('nhzg)^s7viIt$?zD)t^dKZ;]<sEQF,)snFhP\
n56s)i@8Z7LZR95cNA͉
lH=}:Amt纲k
vڒѪ9fFj-Ytdl{$ns`fRyW="/ӃpM|Ը4VqS#?89|<gi<BWNb^g	'<bto;˷*5>Q+PT6b5ǵ^|I[uHy&Kۜ3N2~H5,y
|KTbE"Q#Y֨4a/FQ'7^ҋa+gUT
|4 JS>ٲ/ZۢC3t^bC'hȨx~#P@R.g_0B<{pəyhuxQ-WFuf*3ZSf4((h4
ptEYp~{R5U=;/k|ñI>3n1fN^Zټn#N=C}pЏurR^J:#£x8q	IC#pAjҫr9Juؾ</QދB|g9YCɖ<)~~9w8{' rcDfg?%
5{3RJZ6~Fi>7~_pg#hb]3J
<6>}tIʃ6kU,ґ.juL[ϻP4=boq9mU7#"WK?ze˅W˅A?tp/
_&FpLORӋ3GviDP~X8Fnp%N+ĺbHs<gF\`,UT %I\.0r5/$nc|֟:*ZmKIN@,񎴍v9-u9h-L#$XE/EDZMw!6bOC'`݄	դ w2AD5:.ь_șo ?PK   dO\Xa    B   org/mozilla/javascript/commonjs/module/provider/ModuleSource.class]o0_wMCKec1#|i4iP@Z^"U\񔤓D?8v[4Bȅ}|>s 6ldX1{{>޻VOcܶd0U5󸄼pU\>5j4ڪWA/idGnAtt(8elԕ;2-]g,3hBW}.r=IieW0G$&H;9:4 Љ%]!}
m\g4D(i眷|-Ffa$Upr^1L y7?FchToȴEuI{C0u~K#r]#lAF;i*Wkɋ1HHin"x:IOtɍlۥ085'ma(PU"݆>0\Czzߤ>d~{233/%ϑmys4!lwmiw}[1V!*wi\Mdy<SMTX^}<0dŰ1i4ߔ4aD"e1GvZW؟`Lrהm1XM1O'ͯSkXO1TFy>i~jRnQ=
PK   dO\<\i$
  (  Z   org/mozilla/javascript/commonjs/module/provider/UrlModuleSourceProvider$URLValidator.classX	tߖ4<ޔXg8S1pXl1%4=A4
vަRڲ
,%@K
-tBW(ҖtlK
=>G?y߿M=hÿ(C7<5=FkH
6㶀g+}§@*3:k%F\gO%t&633՟eBbF6TrK*$MuhUP``#LJ
Tvca[A=Q2,рFJ.Lږ=1`dͱ=MogHҤc
"+JuS9n$⹄ai+3!pɬnc/Tf%:Bn3j:Fl"85e)~q:Z͢t*5;Ræڬ&S58f1C&+uBkLnA-k>6ɏX]Z+Iyg$Ҝ[tIaXv&6q:<>JfiRI^dܤIqM,c(=#	>'E-:b2AOdmse2̹kanXYIV>@/?6
:N1Q?fWt{q;JP\D7G+nI*̬?i5c:PjU",aU`,yvvyS$)HH
Ԭ9޷K]*2hTnj:rm憲kΒr?:Z
zvz1ٛ62Y(hzFonl2c97yuouc>0kr`۽xV+pw
(ԡN:Kû&QYYYW=:lXڞP
A^`މܜu(kߧO>,8,	'ZoM0O8<z6F:m&GK

vқ(/?S8`ԤNBʏۥ}\)wNg^ִ&o~W;#/ٓ0#G]TҌP%=:h&U-k6OEg|.5(Ԁj73Pxjudۣ򞰍Z!gB`VxA[1+i:k	 KZ4.{|1@^rj'EbQ8۶! sGri6
~ۈ_B*J+0g29}S#\),tyC^;
y)^qɇiaC
TM6JLYe3ߝiH_qFDT]T(=h5[[d%j	)DŘ*>|`kbUbHaV=KLrKJDz,9ړuc=7`v>nN2)y
LZ9>A6-I*9x*1dPf9K^T_"A`vD	6PbbVe<پ"ZulgzCF-U>uK|J~14t7D0P8Ø
Ø
>Eqڝ̗oZ+
>Ώ_	,8Ƒ u})W/Uj}ъl=L@5|]1	PKV7*Բ`sUBTk
O3D'_4N!iTjIe%~?qͶ+ù*໌}rm#r?Byk[U~0t|'{Ws
%<4\@4wjb8~죸p-28#8{?ܾCzq5W`eԀ$r*wYl>6/a=lm`y7d?YdAP7ڪ`VSV^31b؞PAhGBG8B=JFQ/<X 4,^~RT`.*%$j1(!`TEJa>ʳ׈& \\[ٖeN|{Ѕ3}0?dK(I[U,+cj	Uytɖ̞rFs%~ʣ>4g*+́85~[#6蔟}%y_v+eC5h$4i':^k[ Fރk8;}P`|*Th4b	_E3B"̒1B[)q&zY.ٴsasOE
wQzz2xgHzqȟtjDSs'M}G2ձc[dqǽ»qC+ōRWq|{؁>NDIAFX&NbaX8lFq.vEHȁVHjl>AX|?=T
~W8άs39):&
WunZXQSbLBHB|S⛒g(!h<c1̓<-wjqzqCX_>2>R`tZqm&%c@-ŇnNd҉m@w-&(XNdSϿSS<?PK   dO\Ɋu  s  Z   org/mozilla/javascript/commonjs/module/provider/DefaultUrlConnectionExpiryCalculator.classSn@=uc[H^DJ]@$Qi#]v;xx*	>u^@3s쌿=B|n#.XatmR)=zZv"
)+vt'wvhK_H}ʕ+{E2z+W
,g/Àq[]`Ȗ~؆RC݊=1l=d(jATrOpOL/eCQb*΀~kiF0wUmcdWpA6àkMZ6e[dHZfU-0	2pBK!V:ʭ5^B
#GMbNPIMqzX<D~14=5kc-If#ޫ:|^=D:9_DڲS<FkO<}hIld0EV6b``E=dg-3ɻ@OvQ] ;	I*ac~5f=^9F~*-z?Yqů:Jx
0̄gbQ"18I0I:X 䌅\.Ŕ>GUc;;Ѽp=%3JoPK   dO\/p'7     Y   org/mozilla/javascript/commonjs/module/provider/UrlConnectionSecurityDomainProvider.classM
0WuPtRqUP, Gs<؊ rz}&
kI7 Xeii8x>T{viDқp^r!ۼ- 	+]&	Ld@mz>
sB?+2VFt֒D=TUkS_@	PK   dO\:T    O   org/mozilla/javascript/commonjs/module/provider/MultiModuleScriptProvider.classUKsEƒwVq;/=,{!`Z`L"S$%YvG)3+pUʉg8p?P%&rק >8&1ym7`PkeH&Ρ2N-a;v $@DCfy	Von8jKQx>x&[~	UjhcHuP0M3XvDXq*	hQ7Tup18f0<o{ڎc%vS5o{s[WO54{v%IL%6uT4;o68G
/%Ln:w}TjĐF#DNl땖#^S$Icaa?fb깂8@*|m5%n:m?l/#&{f0:xf5O^vlZk{o7H٫κrV.](شkǅyX/̡N.d?~V\_.:}Þ
MlUkO^7=Jоoؘ#jR]6+U˷_(j
3
lb1CNj
sJ=u-UZ~ͺjݞ>)d0fiZ
8ĢIZc~Xenq]d$3<d!ע0u?|	&a?H4Mi`V!zgޗȚ#k$Qz,b	="!>2ڊL	aQ4Gsze_~L4JۄB)PES.ȒRSd4%^*Ĵ\~^jSPkߡhߩ_!GBb2Ȓ.GT|&Tҫ{qd.">*(p%dZU|N9IP*K:,y8؅Iw-}2B_ PK   dO\L      S   org/mozilla/javascript/commonjs/module/provider/UrlConnectionExpiryCalculator.class}AߡשhlP^(HX{^v.Nh
)&f 5},RkHI7Y.)XfQa<L{sZ	U9 
B+],6	=Eg0ޘӹoW?l$tw\xjIiuTEM	Akh PK   dO\z(:  
  N   org/mozilla/javascript/commonjs/module/provider/ModuleSourceProviderBase.classV[WWN2IĀƻb+)p)83`/bt^@I.[Lb̹Ϸ>Ͽ{ nAAB)i9Dt`|JIUW%5PaNDUU(j%M5cGF:mS͘ƴRh3NY3&;dKaتj+JReMMɶj񕨚kd _ĺN!!zL#=hӪL(tYbd	TUNư G'MSe5NL8y\S%nqȚ6.'/ƥvI؍=eySesv56zp}G}
D" 1WslBŴ){.X5O@
""j%0ÁgR)|1v5rWD8d!hJ---FeuE] QhEzx6^XNMMIB3Z(5aSV5=W!|S"fI$
mеpP^(Ѕnj[8W7"PJkׇ~ph*|t_۞vT-t$+}v0Jjd(^	 7%G!S,K  U|xEE	B&)z:ړkp'%x ICqe"P>	T颸ENbZdHnPIeǖu{TֲucBm㪮g9*
jʤƹIT_y^ r1 +q+C5T=G1s7a.W2"ry)aS3">dhYd\x)Q
V(oXNw(`+sQ%5ROܚN=5xʒr#㡟	0l)^&xO}z(QL(1:;Vrp&g,l#)p66F/BW/DjiI
udœIG(@{K"TX

¨&E-%u8xGLssxFوiGxo?M}V"=Fcרp$Y>΅~ip0D\>κQ\'yC=}C:hm.C	R?<6op[ Vޟ0YW!?@Mh=ũ&ؿ;g"bE4#a-u~nMS Q,#俏|빻x"_-ܥ3
P6SL`[sBFh'Nuэ8qA1rI/4}A{nc2wI'@m9sk !MIW=W\e1^ W%:1BEDGx
S<N)Fp%Y:^ą!FwO8rc(gBp)#K9
=+(tT=L!bZ	#ppy{"y'xVhrVPK   dO\^]    J   org/mozilla/javascript/commonjs/module/provider/ModuleSourceProvider.classSMO1}dQQ{ " k\5d!%KKŠc<hGg$h`ut:3|}pC	;99חӪ;;>oDCY0rX@!]Je۬~B8$)Z]F_]YEdh r8AOH\ӺmXYZa(-Xa!i=ax4ggT_<1/'񂥰#W@]5=1ɰ?[^hj2nܙM:-i]S6ev.h{-_95g2Z8z7ed)<1kH`#6v"%`@8o`7,/H>x|E*F.&pPK   dO\UC%V  b	  e   org/mozilla/javascript/commonjs/module/provider/SoftCachingModuleScriptProvider$ScriptReference.classV[OA.HATD[uߊLڄuŲK[>W|	D㛉LWl!h4>t̹|ߙsf b2j#phrĝ鉂q(O8`؎2\NT-	OMTDE(ӱ:+KT4-[⛖:KeWJ\U;/<e[SQ[ep?NkжU=L52G.RNNehx6CGUh~Z)utKP\اdz΃\HOA"E3'vigE"|4ani}puqj
c8zF
ɤ3\?KdcIý_j&3ǉ,ë-FH&<dgvle9'<Wz\ܳ<Xv6$)K#MrD
E#ƌziXAmH:+y{_O9Zyp}cS3>f
DySce܊gI[jRgYQ2]Gr3ӎ#/Wvp69jBf@qo^[0i'HzCs#3No@3lmo筲3{>&')k7@Iga)IjQD֪$-$.s8OQ.pV.܂B5I>p:apt!iutmbMXW"EZDުǀCԌ}E$_Ǎ ܕHC[S0eZt*p4IaD711VZ(!	E;PK   dO\lzTd    9   org/mozilla/javascript/commonjs/module/ModuleScript.classROAMemYbAR*b=p:uKvx`#(jJS}ͼGߛ_)7aXH`!Gv۱_72L<R#+HHYŰKᶂ-_v<]{_$ J-6maiRa
"otCBN5Mb5`
w3|PcpxtTL7,"dxN?z&_zvM;7Ol?[{^2Lxnr7lp/v)5bA|kLUUہlkNv^$m1$;"bk꯫ͥ#f0-aR5ѦQBz#˩[TEfкb2h0%npcXAV=Tʳ1A=	{*z
`		k'|Lw;<u.!I*Ӥ#"x(Δ.әRLi鴂H٦o0ЇM=IDkXocQX=,F=pg+gWJO1{0O0⟩1>D;D^kevPK   dO\A     A   org/mozilla/javascript/commonjs/module/ModuleScriptProvider.class;o>sv&Ft̜DĲ̂b\JiN/
Ke3024$'e&02𧧖 gdXԊk1%EyP Ot %&ZkRg֌\ɩ%yeKS2sR$H##30Ê
gX4sL PK   dO\}    8   org/mozilla/javascript/commonjs/module/ModuleScope.classRMo@}/!m)
-J )B*2nwnx#{	~HH(ĬA
vvf߼y3?~~)
(Z((°co>()4LX{j싉*d,sb	˰/hӔHxsXOHo^,7xw5
+4䩨QVT跉J0A~n0]'06bD2ixT$GHRUjG(cCo{hi_CW|7h(CUHb8I",Iozei"6;μvz>Z_eI(^J#WG&;"ڸM0uj9[frYI-&ȶݯ`3X3ݽs4ݽ9><[
k_G
6M7Rs2
ɨ0aw#kPeOUڞf4p&M޾0_PK   dO\EZ%  P  )   org/mozilla/javascript/NativeGlobal.class{	|T9w73yI&	%!$EB l
a$DƵ+`eո`EᾶV[}i뾹}3	$w]9ܳ7<BD6S֙낑X6dixCSẺhn
7F/Џʺܕgcra$7yجq&p$d+E&&TPZ4"dI^&{uithz^l1I>4UXIu
+ ҫ&*#ձpC[mOZZٱpvRŷX˔ByC}cC$eS!P$)"%} ٗ&!P:&tarDrHp&G8ZƉ.p9Uz1lf5%cKwV=tCWs$A#]uٔFr*M*IL]	{r{$pwӉ4͠2S9ӐC+V	݌fKl4ӤYtdoq:1[tJO;R*I
"JNeAt?硓iIT&j]+1hβ9b1_EؠL:0tE*h,uPu-Z[:uPMM
M"& SZm(!Op#$/4M!p
EML
\ҽZ![P4hIuTT

CuC,w~B˺#Inn0jd
M&E	N	*qPEgtqJ	lqZL{rT=ӹmݜTxLoŠzLExb.67{&]@2
8B4v_]khb7  Mn%EtAt)]4L=4>FTڱh/]
?VF!]DכQڦPm0f1=CfI?pXH$WiͿzRֳ
>o6i;`JF7a[
9gcЮnpv@n*+kIŋmnCi^\jzB2iʋbKśv_Wyйۤ}tqZ4G
M~$
p'wSOMz߲Эl
kݲϟ "D](R[-ʞh(XHozC-!t=Iψ?˴#-XI7 
Gc3fFݪr\<)S'!i|^Y_!J
AI5S.Qӯozä7-nЮ2R`ulVSC%w cRtpz}%mJszCC](Y*x$9L>Avkj_jƛ̐\3q|ȐA&DuVY備L9]Rՠ4~1ð..&>;X"沮dWʐM_*E].1qi71]/FlbqܸL}fvl]NuJb#(,iK2D+F3u}N8EF)1X*DkRgsL	G1T'*E3š6ɹGkBavaRkt+DoN|=&7y  k	ƪWK -Rg{!&aH+qY.ZNB8.x)hHݖf54c3Vu>Z;jefQ9&;olhJ:'.Bu/~If q<M%ctC0ѷHiŧitιұ1YOa*9DuQ
.aL
^+5Ֆ1
>YJAT)NG,+p%1<T7:%O[;#\F;U&Q+$Erm$4O%@!Cas'u]%F]zJ^fwɌ.^>z<>hU.BePYңLl^ir5Cw3wx˳9#ڈBnH&Ldk
1kJ@`yF,H`r#	-_ذ(;Mm´1qXZ=sx-tLxWտCAt3P7\ހ5GJ4؍&o+xq :C}u2DFD6;ܦmS{;6D/F.=iӆM9xJhx_Wh:N=HVT&o[9Vyjy=t]Ĉy[M&73;&#g7	%PpjjnY׏LY¢ku0'bTɋ`ݼGYh7YRߊ!,>ŷYCG^0d{!F$]c#q}VGZH]|T\4R=
'irh!?d"β;~XFH?L?X'/8VIRF]8oQxɻS&?-q.ʔϙzµ`	BEu-UʔctGc/ل%C%c4W2ֻa3;[_cKz0
诨ʚja)	ܛFN;P4mI9!$BbCʬ
١+c/$L5
Fb۱pe֟=>y3fϝ1sf_<sF	qPe3/Z8@(Mfe8/ZldW6T xVҪA.>Q/~6l	CE_,^M)q|?鮴.uX =!i/{pb됕jcN"XDRﶽ)P`9Frt=}ݿUrUcouoyUs(g|
/	dMF8:۵U\yia
*:}ԭҤ\`6h)XƩB"\Cr0R^rU]>lFPe*p,Z+*$aH@F
%X]-<Z4refh254/Wp6D'0pD!ro]J~l[ٌO-^aZA2V:i5<!i~ozqܵom򺯎KƎgF)T/h"ܳv$ =οUCsSuJ%4> =Ǣ!־nQI3*N7q/TaiJ-YafV	V,JB`{#7Zґt,57ݔ<ݨh]Œˬx8JcsU9!$ȋ4+lӨTPzZ%ʫ,!kD*@wh,LMj6QsZk(h@(w^t@(}D#3/Du%]b2.7Q	+<Ju65Nc\X uDX8&K0PtHeCÚƣ[O5H<\ZQ'HIWrjv@/oCU=ڇ i>T5|&.(I?OԟX>Cg
E=ԝ}۴&xOgkWIo웝f҉(@ o`@( 0(04P F  J q	`,F'LmtTF3FfEmTKͥ#6n*^eJmw<p9w~[ȭl_]R6j.=Һ6Xڨٗݎ}ʾF[i胴yaiƃt㒑8@[KG4Aډea&f~͟^~M~O оg_O<n!QE-JشJ#|r_ʃ
9&h0-!'L^FN^*{ql| :N@Dz&TJs&fp>#$Gy
ULU>Vq
r-FjMW9|=iJ.:
0ǏF~6tBS
jѪ~e go3S:J?З	ޣ/7:aNǟJw%byFr!Z<8Z`-Va]1lJeW#dӟepX|r
w)aАː{Cߠۿ`K|Ga0q%Eo?@O:Б:F+>tTk)TIҭN6WyTفL9y~#r-*.BǯS xn\Y\x\x\x5Ep64Nt %p/)eq
Ǻ&MZ$'3@NKe#cTGDC/>"ÒG6pk~W%݃ߢq%2~ZTZT/ږ^Ҧzx$a3r=ɡ*y `_Z$.6z%Kvw P)3(֠$[l
JMQaMS!/X*<bE.pw>ĚSbOSSOJ-G}M27h_фv!_qA2z\<;YIYIYIYz@ޤ`}FQj۱/%R'IP$$$d(?LcGׇS|	_(v=AX@Q^rG#@b)=9NM݇p>~v>wo%>Ϲw>wvQ{+mKrb
x|
8Zp$txУA}NƾF	yҶݎn;9ZRVt4
8yܻi 'ܢ)h?ge
u,,>Gvܹi紒#YU] /-Hmܻ! 	·Hl>B1O>{?PHϴB_i
pP
}	_a!# i>̜eֈp8dH&
FFdpG uh9i T?%~pg?p 1(HP8
qdiQo' ~vgMc:DȴWC䳕H^	CUiMՎ
D6Gc5Sq"N袻ŉ3<ytWz+vPu9vSd϶y1o^<PJ	6{l4AWjAjQZi=?o9S\w+U<<Kc!m:iY's[\@Zu.nfK7yrn}Ʃ\7_JAYPOȏ/i0pKciPF00:S\Lg(G##C?ⱴx"R1O{x2dT'#<2~<_eopͧڮ(y0E5**'^\pD
F5
pLy Aj*M;ZqsW	sG2lU7w܁ܢ6m'A,m@
PCWh+01w25h-sK~7#8\"5i;]NW3-#M928%ŭ>npF#0N+^#'CK:r纑^m%%%n%|vblQmx84hZvވ͛>:gzH 2xY=t2AZ&1m;GvX[
`  ޮA.g^ǞJ;gh<n/͹ PF'YmbE# |.?b`CRg<@/^cd2Xoeez=(
.sE+xAԫYk8£o`߽:ňcl P(e t
_jZנ^m*Dvwx'}ŻX!%Dx ΃N.B62	|7Lg#ݞRF> o"~H+Hs\KiV&m*B˧x5.<)TR%4Qdܜssܘl|SF2ZF2F/Ҧf@RSicX5ᬦvF\Đ0%LI 'x;}nGbv\Xpϰʗ}lxp)2L既EHx'J
a!Ϲ·<-nyCuYtye00k8tXslPQSI>KoS-۟ҷǧ_T1- @`,߾Av,|pݡMr7ȏC*O@O"y
.ig⟥Mi2@'i!HKT/S-!>M̻
ohA7󛴋ߥ=ԕ=-Znktx5KqN*3Ρpآqt||^-MϛHQn=HZZ4	pAMSK&Gy<q7}ىjN&YA-y[:9A&~GMVS%`O׎rKYUTRRV@Jr{bSxTS啛N
xmYK;K
g
ngcIWǯgMM! ijqj+R)yhè*CSoLT3TZ̦+<5S{
i'-StGq[X/ީ*[^SbN,%!=o*y,U"%P<yJ$Ȣ^C999sxnBB]{PkvRZmY5CykRKvRa ؓY+9\"`K	lڱvѸ,j/mxJM7scim8hmwcOFQ\)]))Q.R~8y4T#bqj MՕT\$PPQhAkUmRt*(R8Ex:5^m&&Wjʅ)Hh4n6ؠT*@EoR#dmiz|3TO;UN5_NhINѷ
5Z#^g%َNTU<8\LQRgȜ9dE`1хqE[O˓ÓOlu{M"踝,Γ4NyY:8Kt&yvSVw.[=[V龠7}yRݻK^BȜl
h ~
Jsh$-d\]jSQ)uSn~XT B8EbdQZ\![b)թԼjxǯ(rq(S;^HWΞBux
P)_}EbWYROC9E6ض٧(N{vUtȳdu5bG΢7np]Hǣ0~IްWFz$SF\$#J.#N=b`>EF&H
z2-? I߮/~^ݱ'$,i%$6
2L8+'ܝč#SZLI9>v)K-+%!)</Ap!IYcIRl ׁcO}#+ u">-4*/q|
efI{v(Bׯ[5]b[?d]IyǮcW`UMU
VﬆNRtj*HYԨhT3|zڢ6Џy6V=qu!=Zs/ߨ-u	}.߫r>lSWG]jQp<ZyP[PJoMj_Kͼ]mj'?vjL¯[uuVQwN>*Vw+ڧ=(1>u:&61breڻM.P{`txrѷ&G?I5Ub*>QI&GbsL-b Y+e^z!
hjU\
jgiVR}QJOD)DxRU(V<J!FI^wNV'"&!dRd>}2gB
}IF=dI/UXk>l<)u@~i:R8{s<m6hÎr`Gl]lF!a(US@=AE
#7F.3-Ӳ_Y>NgȒsֺ߸>
sǻ"=08I5ا{3._*iv}E[{OQ|x1x]unI-uY[څ};Dkߠ>Mh[_
=*V#NT'NS'aV_i@D-E$&̈́`2	Zp)M_KKDb%/y_@=;SVT-5;X7	)qw_$*Bϵg;ߕ<FSOo3Oi=<Xξds7M Μy/mdo;>۔V-ixV
^ x%5xFwj0f l xC.+ ޭ^== D~
 >^`/jM-|; Rda_cK8{Ɏ(TY?u=#9~~b. O3~Ayïh`(T|g⛗<_ }Q_^*T|O-(*)O=O=OKŷ;
_k2RT|V[osJ+J/7-3J7RS)'nMŷEzwy*R5Nŷ8<BLW$_A*T|Δ/d	|Y
>z;HGSKВ2V엖ՒNN7%ߘT|SNϭ? $8oL#>sLPUd
a<C˔W4+{_\N
"
юh'݈Cը~Vp:T	jE;Agwu6t6u.]	4]~K´I]?-i~w7Ɵ;QnFAݨPK   dO\$>  %
  6   org/mozilla/javascript/IRFactory$AstNodePosition.classVQoVnb)4eP

$iih)t@hKILjH`;C{^&1MmĞ&/L\R~|? cp9*41Do+z[lQtBexbAEa4UZ~nV*zJ,uYsSiV;iǝcfb+F)gZUe`Y]=޶u׬Ҷߙ2n
bMAv\x7}\4bTvȻis/jV
 C,kO< 5NVQm@n&㖂A;nʧci؏8NRw_
!ᥒWΰ0Ҳzr" !Vh;T؊qi(KKl"q
&4 p\cnA\ιa/N2h-qL5dDԖC
BU[7Ր9^pzlSei @ Rg5	wn*i#y#7ێafmX-yV]rSfҬ۔DGiN.6$y1"֙r/酊 ;W-67J0^ou"X,/wF/ҕ{Jgl
V!~AY)ϧ M0ӦXJxD,}g=[u\ݮDIֲ;S f7dF0lYG@ ]p8h9Ktq>Uhv
AzlK>K֠$Ccl\C49GtuHs<.a+C,HDAE'^i^jDx%+pjNŧ@ȇ>\/iദD G}&Ȯއ-$WPZ(CoFIvDy3p;J_8(/HPgA)} =N'RL"KOi1I
#BC(*>}=$&1Ӄ\(jB'?>RVL'אN0Jk1egb>Juz-_A?%2߅@DE7߇ߏ0O`'qA02?EGQcˏ~_+>I|O;<iyja*5|FKM%F!AOq+HH(H%It
Ls0>.?C
[״qM n2
d@.v 	y﹌*=iq.6?PK   dO\CS2  o  (   org/mozilla/javascript/JavaMembers.class}	|9;3y 	YЀ(DKXT&83APU.`j@
wZmk[khwmY`Ϲ;I2htrϹ&D4͸G\)iT4~Bcp$19Fqaqm(gʚn
'f2RuGpm$4}TOO+-󑇼&dl.n'RC&YOLcX:ڔmI
'LļHtm04t\_[>l,6gBh9@NуiI0Δ=jjmhI`-HZGTLMaQ	D=db`ci jKMgh:1FcM0hs83Dmbiǭ845׏ׇͱp" $**BXbqKS"Ec40-0=cz9i	sԇht&0)ZȄ
>O^/E'ɠ[cRtFkEӤWN<L]S-LVKاY4Ngm熂*RoEEէ^%zR`c\Q2w}$tӀM.^$}4ζh>-!

u-1p0IJjq<TkhCQLX9ZԆqjS*]XRLg 0jֵoSΦeܤs-ZA+qnLEƖf^U,:.7aH>T/1Mp}
-0[k,
Z0{=yҬ:>'RA
Y60<J`e%.ZZ{&Sa&Z
mf˨I}١`9hs(E-jZ0^[>	Y
/	X.b:r,jlNl[}h+]l%]JunM
GƱWI1McHfn8&
ue7R7avk`bfŻyiI-^gtn{3a	>jEq/2^A7En[sȚ`Y0$FCklD'h'Ϫ6ţpC0|k~wD:bWn\(X9E}3渗3~F_]ڐXpIyAhs(RWjRӔ]7դoZ }obn؄^)=dwa9ٞ6miA	KMjؔ6,ls	 Qz e1M>Ɓ2B-ګ]H\}L%Qʹ( =qbze&=TP#4nNQӤ d{ַ4"JILE0MxMr[?]$~wl$桗'k7þxTsfx J? '6	I
kh4*&Ȣݰ`&b T4谋p0re/46G@<᫇~|M1~-"E©ߵG'6Ԙg=n	GDlDovL*޷LlnNVkΔe=ݘMG&}lѿd]X'4
DQtLc;3%1;؍%$&t~z61kORػة6RZp.Ԥqnp~.fgsZ<@DƵ4A<ؑ:)3%aBΦЖEl pbr%%Q:yUXxڸ#Jkj2Kyes,gʆn<a/-,3YFJ{`->%Ўî-&7ȲCJkz!<ib8
E"
|U"ZYx5mbDlx:τ^e
#fY<[h0X<p4$[|Kȥ41
-g!Y&s~Zρh룛C1q-¤fPW+rI!\lq#ϒRVuF}d+iɫ{
|Ѷ{0\h,54yr34NW1xsZ"Bchc!f;3T	B
);fx)/ox!E"i-n(J2)A9ƭ1Q.5`iHXB!"M;考X~-Y1_j ˀP^LF:,MC-pbkZ
䫘Ia韢
eD|׈$F~y8Aہ`S>a0_g|6PcMfՔD|+1f _`OR[Do9Wq/[|#t7DFvSu0;Ex'#t7b2:Ǚ8MZ_I/MKlX|/%y᜴tk hj*sn,(QḒo2-¾{ovɀ<گXh<LI hɻw13ɏ[{a hChvqxa
xFAI
 Cͳa36:at9&21 fi)ߛߵExT,E&cT/{Uu?0(z_u!|bA{Sf㡔7 p -~C=$!?g}eu0CBho,[ӭzs6mXli9,~+o?-J^o_PG$=uo2"=#^43Nќ߷b,RP>ƉUZ[C(4pT!6yX`>B2|f8V;@^c`kO9':Yr\,e(< ,S/9NDA,K&i]K0HmʱTD#!ڨ|Y@(a4x`5U
C
`5D.06cvZSC0SYX
v_nص Y Υ@b0M2zJ*Q#M5R	ɋ;5\hђT(I;5R'RL.^zliޙ
.	Tˌ}^<%.5&\ufSdcIFj~hVZ,u>8*&{\|$"9RYR,5[!oJslo9+ʾq{*.ͱ\0ѭy]ֳ#AITB"k L#2#ǔxRUNE4BeC5fkW'c.YcGiaMKS TZnsՊ.*uQgGK

R\oՀOoǈ5
pibwK6*s͐2:Dhj}d.3L+4k~)
){hM<;ڣ5ZIE]U!.2](	B/?4U01`,EgB"
~yRK}^Rm,YXfٜ՜)|W>^F+,RR۝eѰFߕ#{C]o$]Mhn;ns<X?NKu4]־R/9ܩ&
X,u8H콺랠?a}K|]=pGz="[V;@i5891}	%䔺R&HV}Gj}J\K
|eC4zP4<>8-G*/EQmLC,^zTkqU]=WjSzcæI|j7>j7^Ku}[`Sp8/Ⱥ7CLWLu0iNcUDbш#or-zVE"bay3tA]myKߔ>0yCie?Y.o&Ư̧ՋzIxNT$ΔezEi{J،)ݵrF^ȸ׿cȸe aц7j[K7C-C"ߝJWbCyBT~liPἝE>;r>3|9_3`M]b^]]"X	u2e1ȴ֌cC0.٣LVJM?.-݌nѵm-p1ȖL]Pi3+сez1B0}.SpK8sZ_;[/Oйgv_|A:ͦ(~?7(Wg1mF^H[*3+`*C3=Zk	ku)	1tFQر3LfX3MigѴQ*ۈsXNo:~ !WxuxMIdz 7ܕir_|1g.QҎ}QL|zFjt?3ܔ9iɩީ)(]5}T
֫rʹ%IR?O,2VϔwuN8sP"N8X)϶'iXf[{OS"X H4ؐE*vmZt(?[bq ue3syp+zhw(9޽T6.ӹҡn 4ӣ5[O:y !`]?t+^a8U
!H+ZML65w:+?/u.!h<
uiFyJlNBT0ίɀ8z~xZ_KE^9d.L8nVӌFQrYFXK5d<6:]h"Byy=|lm"">Ȋ-
aF74;QΎ+7Zr
[l'zv3M~u\_ qeCn>k96=.h4@TR 
Zią8꫋Cs=M|P<7?ǀ4UG["
%MDIuQI0u/^ K%TDKև%AfHIf'tA<//˸Gʸ2*|clCҴ)zQ~2^b=L3hoD)?1ieǸGɯߐo\tj1^{K% (rϸa7[|E]{
7mn
9[_m0ȝw:=0@۟ct(6"C&3Eu0C<Gg|ifwtK86ȯ%$$,5MM&V@slIL*Ә~4a~0vg*!E"7TQ*}^@5Onvg(n:~y"C/+0FP?§Q9T~RO~BK?U?#{*&VFvsYy&jv%v*r\4pQwE;QvRדYaH]]=UvƯKI])e)W~N;͘Up錀lX _:_;N5SqZBytJ9:M@4&X=BXo?3Lp~Y8 ZRWO<<W__cN!E))#;Zrwb,I
&IMMԉݪ	:)WyQ_>_7!;"!wYp$Ӣ宇XL>llgRdaߩc~xbDHuzsBN=FSZďIh)%s*+/jUt S)Sp-lOG}	0(0j20v3mI6蔡7?&-;J4c!Iv{y~
0Y~;uCV*C+wsշ
W=4E<cԔ*Y^bMl.AvJUz*ik|vҠ=tSW4}1> t3.A_;=Dw}i(> KBKCOV@@Wit8=Q:[@Q1k3ckhyF-=EDtl#

x1&KއR+]oi+]#Į<,J&vv!V{NvVkJn$Eiqki,˖Z"S^'(5m4Kw&<8B&JG<ڹDDHDB3nHDR-Szd'
Ny%ot8%`
b+Sn(#b*MEo7Q<WAD+p,gv:$b+[thr"Oይ.|Ysn?JpMz֑bV2pr WC9t-|u!7A.v@oBЭ%B_Ewt'$h'dg]XMz/r&z9~טAvѷ%w¬.&SS/JZ~
>Rt?NZb+WHj
Jh
JtDlθdQΘ] mЅ,S)."EGi2-2i(M\!JHȰ2=s`>zMQ[/H
V|w)IY}Piv5C`LdYh\WN?Ak3flgFum?va/k%omPwΆ5S]O+!8]v𾷼w;Psa7Ǧڱ9 'ӓ4z !ħA΢i |8S]M	 35`e(3Vfnf`!u5a>Jao
:N[e_*<&dK,(/meX1ќ%=(G)iL<PhlYJvfq2gy7~D?PaCPG?Y O oRKF!v 1<Po5|8
B(dr+(ژluȓc\~WBkB
2+z *WQ]GSY;Şsc<Jˍv
"seTmmIӴf׫g^p?8cL~4=`\Y]Ȇp}߹㫡ky_v/v>]Ŀ  H`o@ýC#]j= A/]7ңq@:0EԽ
$̺TJlLӌ<*48G]6)7
B#^KYR591 *a`iKwy6*A)5ѽ`U\)/
Q3LQ*GM1cK?D
6*B*a!VSXOI'+^>MgULH߳F]j,r+D4 mT{FD@Z y>Z@hbNM~`ri48.IpJ3x U@~Z̃h)y<P:.t7bd2I	,!Yj1I}_`})Xx_
ޗ7;O7:p8]e iNz_D$1@1,_rBrhV:m<*.} W
U+W	pAIiaiCRA׽WJPv4{lf"s5q|^a|) CDTӘ{4/Ll
S}~ _~!ʖ/"ܼlW;Ƿ{`E:0E2qO41Ke_E14j;dAk*7bvHUvWavVϛaCMy=y!)JSô=K᧭7WQϠ!|4π̂Tӹ|&ygQ[y]i'."=+0bzY x
EkM>G߼([8r?`aSi1vŚf3FB|@h1
xw	{,3+:tIu/ڽAgP|cFVTUN >gX}kEW UlcF7P~mki1ԓAdK#\G7D+=?N̝֎ g3+sƦ<BQW)v}%_W;
Hj+T~\UfE,ߞA|ww[n7^Dc𳜷pxCᭀH
?n:QH3IK/g1aHQh!
u8vkȡxǊŅeK;i8ϗ]m?CqfFYɡzRaT:E3C*k@.k~?u&U{W N&(c<vC4AI"P2R^Ѹ~6fk;ֆ~hz i*7ȵw^ 0sngm'涪V gn[;v޷\w\{,o6댩tC)
cW^O0XՒ{Uف},s9NzKeD-D/ԵbiIsz<=ΘCv~	
?_OW5|X{{U(;[^at()&zi.xJ~/C¨N`8pm{/*ɪA_q
< ="y/Y?T
SISJU(|\zxuBalnW˺z'O.i 
v~O֋!} S4,bk7v"=iǓ (wu}i6|\PvX"/PQj.G9vGoFY{U\[I'
SB*y̏t~㴄i5>@t5[ g~1	~	Ne8W7=8W9C5ί4~'kg7r_-K_巹◸~Ŀ?WS=5Ww5?P+_PT?V-|D]Z/w+P^-Slա,U<&~
o  }'>V
C .mLiDtUjSŪ&Ua\*F~+0&1vQS:#N-ZHasX=Vr}',  8	L:Kshq29#=_D Sz/^oL,uF	Fy@_Te~*5Nǰzճ*tTPSx9\2acQ
~+@Q*ދ:^yQN%f]GPAWq1ng`4jeZ0NTc&h^uͿS"ާxVMMVgY-|&NᠯhGNsIY,	
厑9b\	s؎4t1?9&?	Uhk"f;"P]=sdNȰ0	 ݫc{QL~ݍH}oդG[nCʙ
!>G4*4r1O~ab!ǛTnV&Pv CwҀJ m١
!WW&nU5	Br )WӀoO9AM^H3qKɨgJ0ygpyN;~H eF֡;iBY;㺗jL[܇"4B'tgLDs(GũT54ZMej>jSt4L\(Y8$>52X`:wAH7/;,
-
@SQ-PSԩNGJӥߚlwevPv'n01G֐Ey'&;^uӪꌝR鴏N8 g
|;DK+YDjdv&vNNK(K1ǩUi+@N0cR,ڵOިlWtEIa=n'Yq_&<DĘܮhđeh}/}=kdλV:YuՕ]w_{H-j,rsi|ʶy^-j
ݤE :
j#WzA5ҋ~􎺐btTY~Hmb.jRWZu%Uܤ:ޢϫzu#߮ny2?ng|X}_!ll\Z,ˍB	^j4B<W͢|(I;(yij;U+|6Bۺz*uT0Vn8Ln0VS_F<BzM\5wP҆F71>QU{3#a^IRQYIO"!.&_L38fnVSg>B-W@D!5XţTQ:C:LqLNre0=jzaCW-LrAr9,˥"ةX0ߠAaEC4J=CUGS&~pit#&qJaLVW|8<dK~JR?mwZټbdm \+Y:gOn9Yy1|߫gx'
ELpaeOxILʗTZ;4U֦fRTT4?AP:E=KN=OAmD]3.V/u%^}?t*7iLw
M(J5ˁ]\[s
SeouI~FTFp|
)rLФO =$y &>&oLy̩/ BΉ+[Xqp1wOU~dB;Fa٨Phs=m>]W_R4T?agDnmRNˑEAX	'TSemy2I~qT )MGַDsmy۷FMnr%NKfcLJ
jT2ktwzyrԯԟ!Gaƫ~GI,U#Lx:[*=4f])FB'%;h@=G6dtE `b̈́DG(/GJ5)(Y2s	ʩH-@9JrMh(*1~. 07Dݙ/RYJ:榤cn_1XKGUyNz
}.qI9,YZ u5T :{bngrltࠓYR*\kx\]5<<d+M!L,0iQ*t1留o/3#	rcq>K ۯJp9:,ZČ_eP%R
X-/CRfGBP:oHmM}LnXk~bzY*UYUf24/뀺Cg<UR7(	&Q;/MJ,P¶*o!*hW_4VTƊz_"00
=
q>UTyҴ:&@ZZE<G4GP(ËVc(i8oS1V&c
mj2Q8.q7#՘M#ډ`>,j7j	cj&AދdX׵?
NuysPt
P><q5a$EDzU+8	A9prZN>'Ӡr%sQ'\[Z"820|s2Ց0\9xئ8ڢ=;;)ڽhz )]w
:1k,B%-M)Rin>mgKlvul.凨]_zr'=ܣjW1p^Y#iDtbҌ̓
ƕ!66
6hGMF 1}.a~xκry'tSitkG!MiI@"fc\}
:wU9^^W}Q$8IKe4=FBXF;-bcqcqyyB]el7߯7$$p̸ӴؕUwͯwRPK   dO\*Ү  u  5   org/mozilla/javascript/Interpreter$DoPropIncDec.classUmwE~M2IlVƶV4	P	)4iTv-uw#=U~ ?J3	䜹wyz2v GL âܟ,ۖG直NT ;FhNٖA(Y.3榶RH"ő80ۇƲU_ gkrޖn~4¢2Ҷ+{F,!ikG!W;
$=aO!iA
J
G׉F(CғԖ7]USy	dqӱ~MpR`m^8(Ǵf&z448~Kk>p2]TޘnLՆf.,SyGHd6g=ʔ/
(2wc ?q,y80Ȇ{'BM)YPt
ioIR/E58GʿQgŜn->:ا8	9wQs{=#nܳF@Uq+(x
^	醪5re8VqCN*Ԇ
sR96RAx
H6Ҫ:oZA-NtGa51G[DKO'ʈƧM_UC\5ڋcE+(	Q5Ӛ= /i=]H<t
lw|	ŘӇ$fHd>i]Z|i{د}P#T/!JWh~,S7[bDY#:BuXV%njGP-ҭv=1&0Y*PWC8$YhV׈:Ɍ5Kw8cԸ0MXt-[x@D!QI@_PK   dO\Q    %   org/mozilla/javascript/Function.classRN1=o]IWưİ	ƍR,to_wبX=~~ 8^d]8%,!ǰM'>F׉Ba*}i
=FOQu@\,3T3/a߻
.
s.Jڜ	pFؚH$18D/4ķѶx[[)dxo/cX.KpO[By
{\OknT&{޴rʳLC,(LCu *j!Q\	!#t^i\>&҄-l'򝄵
PK   dO\C  
  4   org/mozilla/javascript/NativeObject$EntrySet$1.classU]oE=i4uHG8;nICKH[\^8#gn^[)OT<4I$*G$!;qX;sϹ3%".pQt3<_GW}{#ȗE`7录\Au+u:@q	=0* oyRi۵.q
}&Na"'NR$6R&	b&jl&etLDV~g^u%#ӈQ*7XQ}PhM9=n2`1Lvt!,&TdXttaxmJ]0gtPtYN%۬ʍr+WM\S}5eTz;q&	2	7ϋVI{$J1<3fUW]YnHXqjW΂m55IN#3/5oź)&eM2C/IU}DDSѦp4W+O7k3}NP56[#BOhx
*oۊÒT5cέ:^vk-Lq!fw:u^a;VW'Q͢J$c{0s
h?Y i."tӽ #n T2͢}hƷ]9zwpfCoyua~
8{OqV&;n*T|-|H
3 /;[5
A7[aYM+y+u0C>M
4N*C^|E_]&"
v06%k|bٝRR|c'
=BpH9mltZH0~Ev1ˑ"
Z})!;(Cp-nNQkoj	Ph%^z%#<k >T|m'|PK   dO\4T  \  S   org/mozilla/javascript/AbstractEcmaStringOperations$FromMatchToEndReplacement.classTNA=Cۖj hÂBU(%$Ф
n2dN
0>wHA	1q7{g̹;;|`	z}5qxn˖=Z|6[Jzn0Bnp,CߊtZeegwb j!G?IMsuv
 -$㸂/&7RIc##ahB
a:[-Spa2Y^ۻUoͭș!\a,]nք_5fReNծTE?)] EUb_[=SLtreڞUF0ImlEu^#g
Qm"-/cJ4yK}A]IN!!&l[KGO)H
RV(Z
PWVWc;/XkX:ى?%%~xu_txN
}3a#t!꧇^Ap2s>1e1\'?2&nJobd3to:2
i~B W dHȂMu<1:R:afpFsS{ɛ!/l;Ȓ(bk."AI,<y`}H{l)(屌OPK   dO\dX  K  (   org/mozilla/javascript/MemberBox$1.classTnI=t$	bflCbfsؒMJG ONa:]Vw%$$~`c^o	!U6A`L@TUW{soϏ 8.$ra#ɰSF҂/]K<"JSbaNDFn!qn/EO>;]t!йă\CfRGJUam4ktAa
8SQ?qsv\fs]EHasb=VȐq%f]"6"`%CkB]j1ú˭1N;%y[XhboE=ַDa$g>qFGkǃYi$W!mv:e
I%Mꪜ#jg%":"6?m7orkKՄ"3vJxԵ+$ZRᑣ%TWF~yM7_g1k{קxT
C~ZM\r1i_{V:`N^ c
mNR)x8ۭw}5~DsZꬌ	?"xtѹt&i}4ӕJ;߃Az%ziw+fp{b:hLX'Ym¬vӪ{hKwX#CQ:i.U}=TI
_Jz;'kgY5b4mph|AD^Ћ
𖈼3į	tV	O{䕗Ŕ1}FLb+8@e 65;E#Q_OH;0A)D>&l~oغ&3&(cd0Ns
 PK   dO\qm>M  1  ,   org/mozilla/javascript/NodeTransformer.classZ	|յod$0,aAQ@(EC2@2g&X(.hթ[UV+P򴵭jkuι$$@_&sw}_}}Р0%eplQK")uB4MM E#
?°xbQY]hmmL&TٌxM2%uj}"TMX8*`|UgpuHbJlY4%a9ȵtnGxmQ$5m/I$bFBaxbiz_h"6;VJDA?z%8bf5JXz"p0P$d>6ĪxCL>%tI,-ENL!-HW!0^A	J	fm<^bϛ\AQ#PSb5IY<M-'Fcu0VvBve|i$fs81	NvK0D$9)'98y{!+)^Q ^[^PB4X	^d(X20gSqT7{E2a?
|WPx,9V	׍9'[-Gj #S!`pF%!fa+&jMFƈsޝ|
Ktq+Tay>]`$djhm
QH:f1*4TX|z,b
|
h*%U9!55p5CTȮEHH:Hyp#	~\6V8v8xH":Ȯ3p+R.v0˓^)W9X/p)jonXtmGoRf)"X˹(]%)8	FqK;y,~`naD6\ܐHDb­]k?5~m6nwpp@f7$Y8]0]
u^4n`#X*X$0bo½6s#ρ3$G|bR뷰i/Z:R/6Aiq\rz^D9xXҎ&էڣSW,<!z}^f?/^xV$ɜ5QIi&O\LCC"E\\";&+EK4e/N6d^ݓ.3nAD]SB/	+rǗ\@]%hwv*	L#g-߉Vwѐ_*Iaш	on`yՒ"-ZMFSYS~x`FU?FbY|uqEQuߔ%rtUdY.j'"ue%gb1&btvM5wmI5ֵS"-R0P+!a=bzD7;'&![(h:E<D@"µ>|OCA*¨5d9d#pmp[!S\K$PP@
8Vc}<WQCAc<kmuwNԓCmZK]´h2^܃R_ΏwTPr0Q\5>rPze>4ȡd=ԡa4n0qa\FPM%HQ'g[Uj"[[a΃#l94Zԭ3<ơv*$q
cGIaސLA-73QC5K8+)&
m]&pE'fkeE$*Z")MViZ4uwF:ái7ΔJuvR@ڃd	Ύ.S
	66'tylU+5*tZ:\{N8f48ʪvl?;{CÏ7D$Щt	A[A/
ck@C2+\ַʹ;TDdIiNuJY?R6F1.T
`kkܞ#]EJ$LԺk([f1඗$1u8^ԥT-E,C3*}[iPaz6a{rRm\M;Xbm/kK:V>Wns)n#j6UݐHJg%qds>.ak2DԳ
zIVTt~61!XODdY4 *s9nWf&]EtDDC5sTH3isXQ-:p:f=QH\6M5ʜlZK*qeWUOLA5+zH}Y1
0Y~ 'K4q("O8XkrVq	jYKzOF	"RXw	JAt6?it?<GWӼ3x4Ty TEsỹe/<%zi>E pp8dv>]zh>]y<όqR߱ydkǚ&߄%fʭ␕/gMJ/銢a=0=Y\,bdxOhEi|x)LX1
q0Iajj&s-5j z3zR3#܋؏/v<+~ۂ1btd4F3W61q|ai~weL،Iٌ)%F3KJJEp4`}cp~ɘJ.]mkcw^cPDy+&KaO°QU9W498וA, `or퐵yV9!KV2_nɆ/c=F#a&tq&e|	P݈Ɛސ7}UeAyIVڂhOvsgP=Nπ#OrJ6PfW@,
b
I%n`SmB1;y=l=\wBMȆol䱐A6؟(WrKx6%ywqLƳFP7״m<^w-Y[>7}w/Ξ{${OO˽OaDzjHSؠvۮVjX`oŦ97P]}!s~q쁉~L<֝?ݍ9}	AfP<Jx2mnSn6֛m?d{pGvhF>ٳl?kdJLFur [ۄ؄Ϣm-x<7r[il"sB(tMt2Psڞ]([R2%G\:;fYO7"=lrYd,Om%|Cby46PoT%TG|0qAge g+^-8]Vyqu\'	7cSd <dsҺƩʹ۝%}.>/k0p<WSWg..ms;y]<bĸ9+.6}(!U]/B˸>V4̠G@r*j+ms/-Ŋ;؋WštKWGZF
|#,O2W>
"pGwR[pלMڂ`	]߹L/nb~><}^Y&hy$<.lv3Y!@$dUoD>CZ;y_s6	/-xP{mBooKl:rHxǄEɞ<Qg67&(Q.&Q#Mhǽ.	:*eVPTjhz+VX>w<wư3^@Xe_eEVR%:H^VFxI8uOrbWTgr5V%s)~6U`>VBN>aOTE0~x[Ǩ_"z	zIzXN
hVj\qB\
5ZՎm"nf-j	ܮ];˱Awk7Nl&X{icx\OhxRbO {#[rLSsӱMvB/z
ЯKءN}^إ??OV7]x[-ѿƻE⇆~G@|l|bLį|eF-a,÷emBܻ#2֓el x|FO1SE9ƫT`E=)1>gz̥f
0i94MCTdNs:4(s	h3EGhƙ7qty`CSij>Mt5:|ta~M3fŭF壳|ky :*4ߚJZ3iu6ZUTgOV
]d-մ̺[kRZiF[wz-z^k?ѵA[-ֶvht=GӝhϤ*`iv=h;y@1)8mۡ(-%[RlnjygKMu<s/nŹ-'P=yٞ"J))g(kl:5ZpwV؆ct`fJy`<VȽl%IݘƣMlo mr
2L;+.lϿy3#HW0f*E)])'Oq:7rZ{*E[Hju&j&5kt:{?GkQ5[rY#3;*6kݸNgݏU
ߞrGzrbٷ
|(~zT[mxmxv#ijvL!CͤA2wgI=fǰfg7[٨&Rc<Xs Xڸl/fa3
yi/GN4k%eXZUݰBۇ.o۲d?BeXN{PXzx6c/s_y=.ptUUۇe`~кs`^ݻSIv:>ڸzwŝ\F>eCkaCv0!{a1utl㵝 ukt뉓Cx:0'!{򈑽\dv4M	Rə!}G`#,5%qSkni*FWo T)ɧ<Rky^m[`nQ=ԗ!GVwUN- `܌Bz)d53?dIΕـlZ&נGގ󃡜gh >
37l!|$CP,6v_lى_/w-\KQ:VM<R׆<.Biޤà[	t"m%K2ۺ]K
)r:ӕ`sytUw_D:	 .	,ك-bC
["֨#Yjm^"Z)d5&Q*Bެ
@45saq<O'qH=LA>mA_ڊQ,sbv._j.K\x~mE]->qwG^'Fo1&?͢Naz]ZA*z>{鯴F/G>~{R+}Kj_Z^-LiKYK>b^[AkicMmfjkfk4>|_J蚖\CZ>P릗h$r&\O?unᐖU3ҕ(q|MUYx>Mv.XCt*<\ѝRCo9ϯq5"/JuP[
ѓrmLv&!5L7Rl3)t53>e8G
{F>kvnRg)͕YOJ#>n)yCRCfW1z (U?Bjze|/PZeSmF.C`/F֡N?]ѩ fضO]ً}(s[؜|ӿ'MYad'zsz nd/_Zm$C#h3AoV(0~rK!@kiTl.Uf}b6O7umnR8)ՁґFhVpKx4N;:U6,b:G c6,hviuLchC?@'h2*PK   dO\M8    7   org/mozilla/javascript/Interpreter$DoGetPropSuper.classU[WI\
D Y@w&d	 $3̶0'}]]ϑ =O DtuW׽>|=_@"QWljlٵ Sp<IPn䫦3ħln0DR:0 Fڐ7Yܔ1?0'qj:l=H
B_~ٗ3 ZA٭1BGp80BcUe5+<Z2pxG NpZ0?dNjN
ԝޔ3[H
Yev*+JU8*[kevIs*5_J xS8N-Oc2F92?aazvb5T^sX+.|+hycfX6ޖrAS:z#++*MeVLVdTݭ5e)CrKZuU70ȶl!ۢ|3tX[*q&F͉\.@U]
wXN0tT{Y0k:6Cr/%G=Ùk(uϒ:$\U̹>YNvpXGzK_;	
<|{v.}omu ivO}iz
2إw`UZ5D?^4i12ɍ.Ed?_onzzhrxm?$%5n@	!0%qS̅XCS~
d&S[CdNK^byLcD>31998:9zXWrLwCL:K2J/=j_4?
F2K0PK   dO\Gg\<  &  .   org/mozilla/javascript/Interpreter$DoOne.classTMo@}8ucL>C)ICHQrHU	qacű#{S"~"~ 	8"f*TPҾݙ73o ᡁ)th&ҘfX59˭]C;pjzR@иBl^a0!U,mg09I'rWr)fB7[53EVG*	u7> tDŰ𢥔-{}:M,?Eݑ0,11=;ţ5Wٖhﹴ2mnQEMv(VRu
Y=RiX]'ñ'$3b)k	m0e
'EN݉+\;!P8y(@՗FtTrjZ-B*ɞ̦ T"H޴9QXgX=EΣ`cIP(
,BF.m_Qm#H6c\Ǎ!Rk/?A|UM`OgIٟ0<q+r
nGqw-IE
E#a52q)z*|Vp0Opp_PK   dO\[Du4    +   org/mozilla/javascript/Kit$ComplexKey.classn@:BJZZ.)I6,R%DۢM¨qveɆg/$[	!L-@H,<f|3䐁at0IBiO<]_${^%	F)80ƃ;H^R_G|*<M(-
U5ࠌZ>;~L4Vv⠊KxH젆YSWsSyʊk^ 7G}=}_3oSq4ǘ%BNa2w$Xi@o%b.Һ0ȇ
lrKewCɣ0N,w%8+A e_ıdo2<eCh˗b+=Q¶~1,3FZ	P&"
T篞^ڑTii^+cL'/:}@
*924N4((=M3C0~1p]3\uN~G݂IMQ
rQu]2jWcL?gfaj4Nϼ2^񲨯&6f6j?PK   dO\uN  7  .   org/mozilla/javascript/Interpreter$DoDup.classT[OAnt\(X*KC/mML,!1]G\\vݩ6*/(Yaq7̹|̙O Oc,ratP=
?zTNF^_VہQ?4A,+0hN3z'1d<Ƒ7-\PIV	l,~G)W}'8>
W6+&0`ĭ0c3&Zٴt$aw>kPLda4cbgpѮieD,G5;i4L1@Z]3$ál;*x*jKivćD2,ǜNMkK"iUGT'ϻ rŖi֚rDM#bDaHV;Dӳw''n̬n5j&"p.k9U	aYoӨI(`X<1&ars3K\vSƫkݹ\՗z
S(<E_Aa
/1hI:%tGcwujup-,qˡnZ`EG-ڤUbc
^ép6nPK   dO\Ak
  !  7   org/mozilla/javascript/Interpreter$DoCallByteCode.classY|U3f&mZWҤ
)ؤ#mj6Vۢt;mMv>@h{/jA/bЖWB*P
*Q^E]Zߙ$v,m3|;c PPBHnL\l
o	"XW)\K i3ٕ4bx	1)J'3t,_N+bXJZQ? NPJ#	#6Kp|CMf$]')Wm`Fkx .*Tq(N3x:@5.1	8_`tHR%bKDc5Gm
Z&!*4'5'3]f*ӑb*B5dw^+*dI:jpAc춍1dgL[WLf N3q^:fI&3Y4mJ1}y4,y.hKl6:;:sOnH'y"lmcSSey/ѠaF,"L*CMMj'Z1
7`d퀬s!e%:J".S,ӱ\n$#2w[¶VEJĻSwDWIQ[
XG)ֱ
ab+Grr׭!,T
W9@
):ƺlPK-M{9β7L659Q@^?{uD{{Mt@[ǙN3fӱI,ٕLR^tSC\G]ChɰaO89Lc|\!y9{I
}Ý0keWDRo
=,
ۜVPtmŵ:> kw[87U;6|Kz+ByEc:>FsFfT[Ld
31
muJneP-6yұ79'a°iGNr؅InؚcYsܷͭrϲy<[&EdwQC]T/E.+ivrdYh(wc;q46bs,45ܣ:N8v[zHK)p:,u|_eǯLVZ\+prCR:*!3IX02~dNrϞf#:C2o
9+?<QJ:ˮɗIe֔r=&%P\tՅȥr" kʨPE~pU<x3<x\wJ"Vvix0 &aR(ϘG'}y~0ѭ%ڄ	X-ܙose:xI1HpUWpH1<as},nFϮ4DO%;iYSNoƶk n~db_eoZ/=MmKWEm[jZB^-V˽_|il%8=^#b\4r4(9#aD$ܕ$r
8<!Q?/oqf`zy<W1VjLHM˝/+~9[2fV9
'c;;J[lNu۸hFb݈p{ˆlӼsFkЦ8uav;0y09uL0S읹K1+frlORB>iF(S>QZx%l
s;yDP:~e
`/H%X1Onsqej7/?.-Gbs;/j2V}aFӆ$
%2Ɉ8&?9͐n-f*4]oͤu/o,s/=9o\5撓asA9ΗsP0'^NW
EGAk4?r؃XH|'Y{	P_>`?Kn
jGP
Qz1f:'h/&x4aqL
z>T5=X>ZxEA߿0;X+2PpK*uj?6ـ7P0 DeqgS7tяfd.4Bri
G[7=({*I:
`k>Ah)/v탿*f#`,%Q~WG@߱/D^LMon/9v̵Qo[
Wmy}Bf)L
h\чp
3\j}K\,E(uS-
R7^vIu݃rn4H3lvv
}Nڤ~3uYrh$M'd2ˋs}LE'"KMSXf"d]mx{%}w?˚C㾠aQ|ЇCr=TK9K%[(ñ~^h?PڏGeV^|Ջ<'V$)n,{ Ϭr?
|;Ǽ8{b1٬ge]ۋM^!"J7HRaj7F(j? %̀lEjVG"0xUzpJnn>/A/
hr0l4"n<vp0Gy㛸5AOc<cj2~+6~KxFkTaZo4;'J-2NS,T!<Kx[P0ht@(#11%1^b&.tFLVbSѢB(*b2KPYVBbZUSkDE\\/+7E-b[,Q~Ѥe7rqѬ<)V(ϊDDyIW^TTHȨb:FlS+ujA] >.7:CԴMR?$nVw[]36>9VO=vqL`'F?R>18U{4\',*s8Nnx5̢b@(n\L^B=s͘F5$GGQ1|<*ScRۏ멌^i$ï.\E!pof/R.Gcbrt	[}N˗>%ͥͧ>IxNC8gbW4+cz]B.Wokitܩi2Bc`<NjA04Q?Y70OT
֨rgi[mZ}QVSh9i`̯ tR1GAl/[f{[ythk!^O3ਪٞO!ETh6I~σPK   dO\
2
    +   org/mozilla/javascript/NativeGlobal$3.classSn@=:>x
M҂XbAAYj)j<-HH | vRUf>=s `> 00x{{"r3OCZQ@G)@CA84GR)&qdL;܌teXnentэ.b|,2hc5i句LC]TZVˆ+G	";;R>t铙kI-ڣaO7bD\u9U]35q;!3UFF5"aMӕWτq; a.CcF62paZI6#eb5}4PE'İsu
m&&6cc5(\249Z4B,K<`UgR5ڃqY5)(olֿ
N@>N@$۸˸{)2]F2WRUP:'
6Ȗ7PK   dO\݊3H    1   org/mozilla/javascript/Interpreter$DoSetRef.classUYOQ.^.UTTTVŽuVZ@4qI0^pt3S%W|v㋉x50nYo8#r$H1¬vpǼooB
_%}n
+=A:fvx'%692+ @,3⛳!ua:\pLw0>uGZaI!hG!T4`-:oւ?c#4CM_;X5ql،Nˮ}!'˧kgnO\`Q[NVl؎1

7s2|>֘>CGO%?GraS܄V>-=זW'؝q|)Gj½}prڐ!ã8M8qd.~bTA&^51){q
aMͳLjk1޶)-uG9i5Tv=r/Y%M^j1 :NeQ/ǜh:*3"u垃eT嚼o:
EAW[24T폚un8Ð]Hhx
ߒ#ʋ<N,1 8O`yDu;4K9qBd7c 
$d+z{/}6{죱`5ΥI/I,rɁX=T9=R^cĭwYlU=sm9G^#o'۪l'!'tȋ/8,)ވhh~Lਸ਼@%TcXU&pV;ҁ8N;q*s(sTgD;,iYƵD竊1$I^$9OPK   dO\!c    >   org/mozilla/javascript/Interpreter$DoPropAndThisOptional.classU[SI43Un\/&ȊDLd5&afvf}[ teE$&U}z9 ZCHhH"p
?qF"AQг"skkkGsÅZ#Hsd405qsC0$ȴ0ߐetκ|P(q8G40|"3#*los;1D2lzмpE581N3L0h)칑-<LCP/q/W%4ݓvSmeEgACv)Ac$f
i0uEt7a2+LEytC>4lq7'=)U9dD{;.QY
1mEYfZLDdPt׀U.6ՓXq{^/Uc fYNujmR!톜QfwoHz.y,amle.ޒ
bեrhY[T-Xbі6#u,0?-v̠+nEn&~@](܎f(#!($CG$[j{F
,.\pƟHoJF'
W9F)pӚsϔH;ZVqOSRz>^BQFE^Vxq̯xqWyTPUǜ5\'r61$iEt,qJAy379ju^T|JCr休K[``
ῇ<jZ$WPK   dO\5    %   org/mozilla/javascript/TopLevel.classXwg~N;Bȏ?,	eiHL@
4ƙ4Tih[*(rQx<jVq!7^x<^盙l6YBx;3~>>} :p>Uؘ5G[ǲ/zTЬiۭEN{)[ v@YS`992ki!jiۚtkO&7֯+Pq?;ާOurF62VX&1'2iͲ̓FDr+P#);kZ%BVEńoj~TU<U6KlȌ&$X5Q~̎}L`wbO;,&Qqg4KeRH׫؀,xUZȵ'Q+}(b,zF75=F z'DE\&
Jnp[)d
ݒ--KIj1&%#	RfA
a3Jtl)E&~uvPiY>" ģ
T.5Kf,LJJ3=SK319vq Ѝ?	vxfYZ^O29|!#`'&/
#I"Q䢐[wg&P"U
فɜaVq\}LJe(b9=#: 6RBWఊAccch
M%52}R*F ۞]s}z~[ۍCQ<G-ذVa#5`kvr!*ZzP7-v`7#PI-Z;c4C&qh;JdIL0Zr(wvD.>#'scúmol,iޠ>b5KcuVIgLi#,<4$")(îGNsMwF
-}7 ےkΞQIUcej&C/S3R;BݒaIS^f$ԭ\ھp
&&Rܒ|IK(J?
ޝGEI%{ug	Ǘz˸lԬӎT{/	
dsfJ5dűI;[v.[׽;Sɿ|#la
Pߛh@cɇ,?|
ggNx_mWk z	bʙw\	~<I^ag"GL/896"K)f2_5PG2^h0+5=OPUWb4=}_b̠d@\ϔimiKAm"Vq)'/o/+U2t3sF0}8!Sqndexqg*5LN9|="+(^DE7vpcU}s
^:
olQV?QnV)!6#4nQrȯ9Q,c4y!"pCR\}~χx,V~G#]Bϕ5TUTL7@bSÊȞs!gw1FΑA|9zb C#]'ϛD\~Nm'^|
_ws׋oГ֊7邏Fw(9/%8+Ȩ/eft5f+'(e!3ޑA'᫭!K-_,PF]QBMcP[.fkZp?2O ?,_X̿9IS6n/l)d+qs' h~-*^V9A:+:0?˅z~1mIwptMK֋)#)t)\aFFiM-(B
yQN@1J߽ !dXFHƯBY"P\B7ȍ^~Avo,GqO+῁j!o`yI'ڝ̀H4=Oe?Ig]|wq	>0,}mzUPK   dO\ZM    L   org/mozilla/javascript/AbstractEcmaStringOperations$LiteralReplacement.classTjA9lN=zP1^&$-4!͐N.o
JVK|f?~SX@B4^0(WqxH_Bp[=}p%=7>m1jUJUc$HZHeFqkZRvfncHRw
C0-vu/[{aOsflty <QFա>9pWs8Vm*kcHIܒu	[Ugn>f[|*e\هO*ƐP_khs_A^97âˇ_dSaX/_=̝"v:H嚒Ktz5
KQ`nE>ҧ{"T^,_i3d+Pwdaؠ@Sz*RY" YkRgX2KQCBWiVF(dӜIN[J`} 1tqvbhSV3]qmutPԠEFq85uX*&h&Tc۠x`<gMyzp汃OPK   dO\A'  
  +   org/mozilla/javascript/SecureCaller$2.classVkWE~&
%hE+
!ASm6CXٍ,ǯcsw6$$9ٙ}{}'t)Fäe%0xrG
b47aOarcB3d,6åO,$ҧtЫ!YbkaH{H!PpAEȩ=]Rqz!0\M,⒂*#(g
o7ܠum,\UpM۸07CAdLQqcH+0ISݵRa1iG霂xƚSq	j/ej}s\noȈOCU]Nґ+d71v$TCy"e3Ykjqg}ϼH2R}
 [=XvEs-Nb)[Ծ:%2!|c+o׼LjpX>IA>C_~[fJO{Zᜌi aJبvw
e,9n'}J3ءe]"X,hơlC7JɎ"j9Odi xǘϺ]/@Zq}IE_Ivualƞͪ2P+b-)O]65rh|օoU<35qX>i[Fo/`x/kNɆpUˡONdɲ\D^awzAfPP/?aԚnZE;qq\X?j`*7p&2UX;Eo- 7!]A5צFfe+('#
,kҗ&twP@$"/( tOLa<uv#)`ٗP\g6	=Uo*hԓ3dj xbp=l#U5i;3017D#1wTqA0U|@Z/d5E`db!S[,R{Q/(\<mMa~9I0H3KīImѮ"ċ"`?Н0
+(?][wǋ
kNk/I鿋z@do$݀2PK   dO\!    ?   org/mozilla/javascript/SecureCaller$SecureClassLoaderImpl.classSn@=8I㚖%QG	Hm"Mn$C08v4vaH,|θAiJ<s̹3X@*Bw|kk-ϣ
yWH̞xqjσ^m
┎M,"ia	PjD
	;}!gJ5a+xAghLlzA^lvE+ʎpJtTsVp"
ф>?#0aťFGSf
;?SqYC.A̰qT<qf?R_5o!kq3L8Tg䀆EūpuN΍{:s-bxJ3~婲ӷDE82\'=f({>5ҏꀢ:U&S|h4uV2
5K2Dgʦi˕jz{\0Nq`|^ZOmqK۸;ؤr$><E$Em-!1v\BE")PK   dO\Tݕs    ,   org/mozilla/javascript/NativeGenerator.classXyt}$lBl*  B@63d&Lܫ֭RZ\,hKv9==dtNfv}˛_ttKGIHcqs@0-^]"Xq7Xo.0CfGj@(7e,8d"KQ31CZ_$4kU]4gy
F3Vf-cFs̀FNl`Hk]gPÐaǻ{cfruEE
e#1JàU5eu5
uexJ8
5ǩ)\cqayhl˼VjfF^_}g'DXu\aJ=-'
kh.L!o Di$k'fb겢6.70U01T͠B,N3PE5Pg pɫ&Yl`8j:p%!27;PXS$|DXCC РB<
E[1|f($pQBrr	4<,_q/65D8s7XSدaI?eItR,Ǌｏ6KV
WXs˽(#[:p(F]OIV
1

XMWjVU/W
E[#fʃi%죍~A]5T11+G ۄU07в3*d]ZSHhFHG@Di.
͵IM;h1D3*ܛ7/d
F"
E!57Msި5SuxeE$(8+
_W#:i.ܭsZדc3-?>$.Qߞ$܏Aڨ6=mB3BmC	ڪ5&oљ%!v˄#h}7c #׿HPQI?бcx\øB
9qHz[O1 gdz`4B~OWKϳK^i~d`pMa)QzMԌef$JK=h^V02mkb`A]lVTͳrRJkj˴cBY;<әZٕ
%Ndqjvi_TaqMu]u]*UC #iWe1bQ$넓8CG=zMh.@0*W`fKwA2}%rw+XS^5c?8^v39s*44!pszCr5k"c5d${#,GPdʭ
7f"O]TC4Gcua̹}ԭ
FQ6@Kur:=C\g\:B
t߿Nd#)	RVzl_0f͊g0%d*3[d7Q'eË]1LdhN ]eȾ{Pr~//qܞ2}z^RƇ9HhE_1ΐ_ːZfLGU	erx6X qo1hG`Y~
G݁G#qùjW!p#KA	=104y|
棓c^hI
G#*c
{YKfz6G`z$(Ű=^Xfĩ9Kjeg;5]pnwaeVJeQ\qZQ/G/Y)Tt*`?x*fqegNȄ8;(*[fXB#W\ѕjl|&.PVvZ3ړܔ[YSƷjde.%ƵJ7LN7_
[8Kl-ss^jr~.ۜcW?(Ae edT/ߟDJUxkJZ}V",

ԢϧXJu-V||\ǝsWg|DQwDO!j	}u%f&Jseɹ99Orn~rJ͏_(7\A
@+dX V62DoSE}9Be;\_bwY1v1ҶSi߭.v&ݸM.B<ˬ jv)dl`\å¤mP$7>AW9
jUPh]-X͓v 450OQF!F[͸00݊'q;]wSEw1.KM?{u'[%6~ɯz¯뼭ɢzQ#mNYv]rѕa
4ƚ!\3/uqp^GtN} 7->ldi )q,XQfu\:ڶ:>ںڶڐYpҸԻl`Svh-]@e;ՆR;[4Dh9CVFRIE(Rg;|[c tKm;ih	S.G*=:UgaYIY	YE6[Wv*NJƈ;W -0n݉|H[j?gB'𑚏^F1!F0gm%mI,SOO3l'=h/62ds[w=e}43[NbyB}LOIo#xۓ(wQ)8L0d2׺"	3TOޟŪPށ	!gB	,iOfd=S7ҹ*.se\)_I"tnR p:*Z؁V	_`Pp[]b$}xnZJm]蜭S2,,tQÉ6)t^v:窡]/ZU꜅G"x~'[%+g?9:Y'	B_.Vu{Ycv#/ /iWYb aPE>ؤJ^L'{Ta2V)L#ǌiU9XdO,,d$:d]6FEbگUw=џҖF?LUfOdPK   dO\   	
  4   org/mozilla/javascript/Interpreter$DoGenerator.classWSW]HJ~ ւ	DůB$	[qYnB0dF(S/h0uN/9n $%t:ss=w/ n⹄:/+lV/Ԃfd?s
$=xs&7\4sZ(08ngr.C}Gg	HP1_
j62ENRsl7KhTN0tנ>sPM`hHoWMR#REIP'-fhpR)f88|od&1trc/M  lm@LexvnY	ޗЪ
k}ںX˭Z%pX|8)^\ˏS^GktgD0j..p$OϠCT'CSǻIW]Gyu"zS',ኂah5nu6K3D>C~=P4
}ID#e-'bh<PpwՐcpRSfh!ݨ@!<Aܗ0 A9f )iF*U[U7.	(FD0`/hzpof\LPJbF@QuWxCɑdxT
b
D 9JxpjfT$1`Rzx8ˍD)#f[6s>C
r-QѬ_ZQ0\S%zR>"K?D\Ӟy$Pv]9t9@{㮲Un4^44ʈ qW(r!@J8GTQY1+ 	+C<uHżwlfG)}2KI:<_ؔ{1CkĀ'P-J,@j
o
дZn{3S^_W5B~pu`z=v+\ed;{P>ZAtCF<~9aycr	y̲nɺÍ[$B|ydZ'=qv'awY1s%%$x>d$v$,(b7ThJzu2T0ZCmnMpCS5_1@b/pN|B'/z!'' ?	y
y')֒
HV$*g\'L1mFh/]e3/AcЌebjƗD=D"HkPK   dO\[w  S  5   org/mozilla/javascript/Interpreter$DoEscXMLText.classT[OQ,mizkՖ[*(Z[wO MWqv4-7s>|]VPDÔT+4yvpWw,)#*Xtj4l+ore5,C1t3!" "aynKAWr9ΚܪdW7._ATENkKKJ'(UV8N(8N3n/j+{kvZgpV9q!¡䋵%
(f,K*{ަR4cXMC[]r+!xe
KԶ7S&YE[w}DZQzͻvu~ZE+d:q[/p.N<jW9iGk1 LW?TNTÜb+y̫m*b1KvŒ]x)Ѹ9[oRM2S=hBM"zxf2)0rkn -FEZ`HoYdp#;sgľj.k	Fwor&OH[uwDb?0d엟gk?O
id)c/?QQO#E&Q}dI\
_p0<}&&l´s%9H69wPK   dO\y(   |  ;   org/mozilla/javascript/Parser$CurrentPositionReporter.class}NAƿA;XY@UHB\rG|(.\)|_ۏO 8K"XWZ+\)z틹r5ވs<ڊgIpHDKO+a	фٔM_^64=|8z-hSr8gu|u!t|<qcG#`GvF1rhN|/-x}8PK   dO\p    .   org/mozilla/javascript/Interpreter$DoNew.classWip=[Z07U
&+@VMXHҳX**؁wipzib!NfC[YckȀ_Ё
֙V:<b>g2ZvD%-=kc-%7 
|*0l]c}V>iѕr9g5@U2J)f<&fްu#Q
U*\wDqf[HĤPqPG̬<9ԍi?VcTE#C[tiL^6)sW3
I;`C=yÑ9&Wq60I>E^W
]fJÆj&YhE2bE8i8Fhza+ ݬb2>+\"@cDjqZn9`){T+HH-#n0"y(@v⺞z.Šr'chTlǎ4GDwEӆ2"R(:K.w<ӝ*ba9q*EH	j-ҠU*LL2Ij=ݖeZ;b)Xh12kwrDsEU$0 s#ifŒvL$UT!%K%-AdC!7~%nWq 0xrѡCՁh Vq2e
,f>zu}@ʸ@a,VAҹ,(%JwRzYN;"RBŰun$V_V!+`t"ȋ~g(8,#-n-/iyP{Vs)?L@=gߟhߞ޿lNAȫ8TpZZ6TBx쀏x ǨQu*'n
sG3{4)уJ,*/ջc
>$CZ\#%iSzn[zfi/*#df	c&~m gT<4ԲvZ ]1sT-9OT`lҹ향I{- XsZd𔊧*ɒ]rx-=g/2*]Ԍ(C3@2C}Hdm9"FiS@/HUF)qT4#I:ԒQ2BJKk'Es 
I͕4/)j,J[qЇY-LxjQK9#o{['~f̡EM*ֆH4@dhy'y1:=quURsr1	3o%E.?I.e9rsj0 E^,[{,mɤN(z
qVܢ'U+Uk}´2Z-gQseC<B{q<*VDzjvl&.up7ѶߙDCE-ޠ2q%Fn(8_o
͝JP¦il![S萧'x"+gF
<ѽZ~LsS}D)9;_A/%sP
k
3P7OuZ[gH$Y觥*g6=$VHz|sTKRT2cC7R
%FROUh.I6'Xw*25
*Ov\֑^_D=?|-||
Y91/ _(4?s'9/[+_w=[,:_Xv{t	p<:k؈o/X,MѸiNU)hwh1g}RHw!VQtQFzcC%~gV¯:nM
)xMx
ujL:y1Pu)9O rV8Oi 93B	Z/*PK   dO\P	~    2   org/mozilla/javascript/TopLevel$NativeErrors.classT]oT~Na;=YMFKhiXҕfZJ,-q@nvrq+㿰LbhH%{N4PJG~>
M0°v>95,NTCD	$.lZhaưZ&պ̥s2WBiRR1'W/pI5U˯qdT+UPk^Qڧ}
I{cF~䘓b"ycAYАӦ8ߓ9pA[oC֒ed5\a6t}O<\Y]@~P4C]V9Jk8s(z#vnd]^0p`@3$7	7&#KDpMӑ1cRǌ9ҾqrA6Z67䊨Wmmgx9:A>pI/]-)Mۭہ#F}$\~|Ga9-;Ʋ:ݵo&UNY~'hG~*cTE~;԰0?xD\2VJOq^ )" ycf"p2"\hNeNPOMu	'x%.DaΤU?0J5aq%m:y%!\%{J1l0F-_}'ICYN2#4
)y#F1S5b]ĬFj$(.VC´zIiS$][סc^?Z?B27bSWDS䃄")E>L*V#MSu]l=	>6{Sm=Y>1
柣O-b=Q4ja_>-NqHG
(N>MF,LPK   dO\|D    1   org/mozilla/javascript/Interpreter$DoSpread.classUYSPnQpE^W^.UKK0$UGWQg|p|?{d397s-~|8*אБDajE<
țz`s"X{E!C9C|`p665dtl0"w/Pp1CTλܫ-ؖ(с:tFZWM9a:%[~kv]تcz:yXyMj7PQ'oױ;SaN&ۍ=tE?ÁhfDY-vO~Xݒu`P뤕[QE	>IuXF)!Ur)!
n^VspVCa8B>
D9;%g,wgÿ́w(IQ`(֒,I{uRQ6ҡXuǬCF,L5;q5[Wq#'SM2k
E:ZŚ%jAE2xڑޘԥ6+ۡBe)2فrBd/Y5܈s6
yџ<[$#N<azS8.8cMcNmSY6]6k2՛8d'.cīcY? כn# ڈ;{K
2/&#D!3`xF336RQI0Ou$N"X$
*F5"Z!},p(@Ew0K'i\R5֥DPJ;HIF:ɛPK   dO\a    2   org/mozilla/javascript/Interpreter$DoIndexCn.classSMo@}8q&)!H69 ŨRz:Kʱ"~!$ 	]TTŖo~'(Bu0o=#ZDfzDZ0P2Qi@K5Su'QD(?O?#;ݽ
,TMj弊%/Ky@ DCyav@0l.PyϧR}=+P^}4uGdH0B8b퐃zGTb<6oR:.2'^I<?Ep`	3Ε+UXXe,#";jNHѓ3w(+YMtMdv&6	TRbj:_)˗&

lR.a5+EխƷUczIXh@3yR3*Z"]u܈l&-,sEN[`=2ؾgXOy3>`07`PK   dO\p=
    ,   org/mozilla/javascript/EmbeddedSlotMap.classY}tTg̽3K	\H
@	imBC)RM5l(R%2	37ůjjɪ]W-QA֭G{ڃ77i&TL{ߏ}{>f;Ux:
TYP3} ݚK[pu|Rlj"*X
¡l.nbvm4dL_G"CR*q*1\j5Vaԝ:EQ(n3NX()R)^fQ%Nu9)GXX(iM+$.ƕ))
ln-
eo+7/B=X62N*hQWNR.hpY-!mE;1Χ){&Zī-\Iٜ0t^z3;unByzFEbM65
NuzZMe񣣶ܕwslf+/ABJTLB7z<,YVaʼl]roPXqc_n6n`a[;sJxB@axdu6̖\ƺ:n<pfˈSLB^[R&qJynt0eSswX؍4CA*<
D)U@Ƅca//9g`+|vKAQdq}rR/flP0:0d$x
1ϊ7U(dµ0*YYҙ.q7IVt/]n-_n{/	M,	P8E'˼.񰅷|4+c-	]ޮ=G{YDCഘ.,j]
{JN #'ϑYSm
wuovG_j&&獅|Mtnԩ!8TWwgNnpP]HŬ!w(JzQTf4 ^{D}"@֥U}1)=ć-mMlvT$TqO ڗ̧"_7ueꢌQ[fa'kUs(!zhi1^.zsc%9n`]C^ҝf~S#i8Աb"Upa˅`Z^V$5ʜ5HIAi&<<]^yӽBb|o֔\>H!SKEq}G~u|>{23W+:>~f5OQW-87g%pkD+gSr{)<YsSH2V1 n~'?Pvk)"7=\,Y5<)?ݸ9Sa苘ԖA٢we/]ݘXGl$Rϴǀ2_&~fVfro3k*ت|.bv À~.E~Vs	wR3< ?
<	{ø!4"fy!|O_҇[_HXʜ7i1
7k*5K_~9=26uG5JEobThkҊ'`?Xhɍ,=?|x>M	U>	<M<_Z`EՍr$oykyPYqe.;+Щg8wD>=oԝe84 '!8ԷK6m<ڐBma;|	9Zy^8>	ΎtGa!{"NlmxǷc־]Gw=@^Eh׶Q+96|oZQJX<Px PIm\جզl0lVׅm7kc'Ӳ?;u0	<
9I,%GJӖ<	W"OLJD%B19sHs;Mq%֚~AJ?@j?>4R5fztT#%cYS~cbjjaT	vjϞSJk󨊛^
dvha<21ߠƱx`^-<jTa2Sѷ	"lx7x/z-4<q?1͉PlVVYbvMy'O7r
3sǈfXu5u5u1zc~ZϘB*h*Bk
wx\4H[GԎvy:6}>yM$&wIsl⧲طԅmѺ)<>9s
i|v%R!A[iȜB{o%%V/kҊVͣتr
9Ϛ5W+fIՌ᪁AG&nl&g7	FF&Y,hMW=M>0Qģc:<
(W@դTܣ,a4<׸&pDQqht4so}ΉZ\ۘ7;z6U!%>Dɮ#1#CL(uvTA	}cUecX#1;v	5exF*ybHsQ-;z<)孏1%1~?($q~@~Ș	ۄ xq'~LK?bk:7!K>C`7BF	/:p<px}h2_0ȋiLʔ}{k_8xf,0G
'hв~U?#Sla*jUJG>?ô^>0>0~Z&eZp+q}Sb]Nw|$_!yD/?$d"FPe_)6yO1Tc@\Ub
KxkMdηo❌k&P#J4RNҼ*؝]z	MT|0~%N>{&Mz#$2*ZUAJU+-j)zU#2R˙Vh#=#3[J#S~h^a6CզE4=NQٮʵPhJ}"36ۣwچtzRcOMBz+j*	U3}GUɠd.u@,?'vf~J$?Tcs_T=~

xCoHMpuu-o|uq1z?5:|K2g|EP1`h
]TML,rv))">}&pUk%opRƙBzMFjooNߚIOt
Z	s	"ӈ2q>ŤiPK   dO\dwώ    -   org/mozilla/javascript/LockAwareSlotMap.classU[OSAz(*xEiRCHM-RNϩ{'_ɨ2^|93;of:?>0	?PaD=Uռ8<_Vs%x+a;~ɪJjaTL:DJzEF`%"3oW{
\k鹔'8D! ]Vҥ.]nFXZQn5#:cGN@Kju`ͫȭcӎ*2GyZBKw+HLci?ܩI&
¦^UlYun(u~tWªm-ZjJpK'YJ8uF5W Ku C	^f*IW<o6ZI q%ͻ)m3tM׊3=aX[2MUF^ԨHek^%&5TY<1Ҟ}d;Qp)t/(0d@Cw<b@..tWzoW1Z4ܤpl&1E&Lt|-3!FL_eg&>"L1mP
 Kn"MBpYҰYF9&;$
o`)D ]U;PK   dO\Cf	!  	  &   org/mozilla/javascript/EcmaError.classURG=76`I<&!	rbgH]b`4iQl2JUIS^;R#"}Ϲ_=|D8"18n-Wws{lξi;kUDC{`ڦ\f3$#ik:_s]eHU5(3RYܮJ5R!(S {C10 ѷꨁJЪxM$00XpmniGw4pW{QNӖ2oa3QK}R麪}a3 ~N3J52p7.;v''ɓܖb_6{8>m`Ii'~,C;m ,i[-=)yҨ8Vn"gP%maɭp=ǅUJxX[MpR!w.-=KwS!Nl:}RsDft/M=kP)3\4Dk:nMY
#.EaՏe3zŶըRP60
MT5!R1'a:)u[};ʩ
inӟ	ze_
gX7U5#:B;U/m$?ņc*U,	}VY?uGKѧvtq?FP/<;hQeLal[y{ؗq<ev*2%+A	@^>>E//=I1ҸKҏ$i}]LFc'g^b0;5N.`8oaiLKH>>}@K*ӒIa-eD<JCgQ--Y0Q< -1hOeGUr/
95i"i'ڡev(Eڡv#%FXK-R->ըh)VhgxHi[$ʾ4@5~k{ӷ+lyohWwQ
 G@p4Fp7{t#@w.>>svw+QnEb\wpzr/b~Ikedxoo PK   dO\    *   org/mozilla/javascript/NativeArray$1.classUoExq4Ib%u]~H(-!ǭԜ{][)pHqHu+Qo&&
m,g}fo n 2%oWWm>۽=|-2aJbȚ00`S
B.32wc(8nq$:mWol2˶kWMIqĤX}?|'qJǔi=]P%Y/c!ouug=J3h¦s~h;զѷ:
7\ݱD/=rsۂNC㠭%OßAPn%a,75ɧM4 GM̐%+?E
&m;
jr_-EZ7ϻ#a]};<hPs6|#ἷ'DMc/'l/~5$Ď"^2f|歖˳rs't 9}KٲB	M]u-l
&tMk:>όM׽̺
A iy 3-BA8棕8eeMHYĠ:_9?WN<±J!&!f}`0n|iB
T#JuzSC>o(qJ[FFqқ'twhL+UR3w# 5v&N٣,I<=_{3'*{[!JĚEAF9KL>f0_Kf)n0U	~79f)vP+l񀛟qw59EoڋLQpEɈ]%XF"+1
V¿O:~)gL+OH1*EeN=cfÛ(2iXUkV9L!PK   dO\"J
_  p  *   org/mozilla/javascript/BoundFunction.classW{W~^2d M(pKB* l&I;fgizZҨXE	<>3%Fl9ߜ9绞Yp~
AD{~.N헌i#tRSn{5sVMٖ@c)+GõVCz*IsXQZp&L8cѴ!рjGT+qۤc^=Lw==mX̤!MAFlZb1	wRm6Qآ[(2jMƸ&$ф٬cvbA[{l/@rSS -c	kᘖ+T@:*ض\[G~LG3S)ǱIǾj:+bYR]X
UElIc;	kܮ_@cI6
F6msfHg
0tfA_Ѕs}'K#+3>J2ELq'1s<eWeL;#`UuMH]4<af%S:qZY%긪GfŨ*Y#!$t<HV`tDʔ2S2sE~gQU*@@zJbǫXRn+4V.Cu\R	 yz6Gb?eVg)=g$P,M˅ɺgqA`Mnu$Y;:)ks*18ҨKŭ1FDMАמ,
١&tL"%PE*DWn423eK;\l0Ee`W@cgugkfT;LҞb2S	\q
d}.7-՛ˈd~^	6yAmN=x{ZVH^)|t撒3|y_"JH{;Std)疾+EG餌dOx	&R˶jמI~V0n=F423Uxn!xB)=ò<5W σY/04wT["=V3<h]#yטR{CmXÏBM5i1f1Su(UheɚlC-ii
P`'Og>R3Cph4W&L3}NVLdu/
+Y휓4S*CO2yuٙ^ӝǲ!Q,jplof{ې="_i8cXci3Ƕ/:VJCleW9ErUH$,tF6kf5,2_x?c4ؽjsݗ2żصkf/A%4ɋ3&yU#jՑc=2_	qv:v"6-aM,Cc=f7s~c,_@K|ѣ5o)~!\!y:M5<'ٙ'_f?!x6bߎh@oN{pDx]VxS:&oܟC%WK@Q2A<{x}
jUB=+"C -7[iy$,mqSGnFAۯ?o)@R?!WO	X9+ 7a`%uAm
P 7|읂7(x:M8B{*h1OlZ -^WZ~chE;=dg!QnVq:N@
OJNŒM$7bS^i;G1HUo,i%O	y3?g!f30hD2=,/5/<q32Iݒq[l1x[LrTk1^#C1,fO
~[R %)i_zh˃qa_2̍˙-̛y%rd^w4ZL"9j]'ڊL(%1ga6z]ͅl·f5뙺7^oi2Q3ݪܠ҈S\GNha/l֋Lwwy{RBQ`5)dA\2#yR
|so."_PK   dO\Mg  f  /   org/mozilla/javascript/Interpreter$DoDup2.classTNAvMQ "*-rƘ!4i*Dˈn;USiĘ!|aq7s̙ss}e&2dpx|p=.	ݶ,V})v(h;tQĐ}|ʐ7rCpLeCP0û5\lu YR/Y C&<n%!l
FF㷥-mvX5|;i/rGFk/ÖwGZ^]
3KI%Pb0őp:
],tH<鄕$}NrBNGg!|;脎XwUNh)C&uɍ &&`U}_zPD܉5qF>G5ژ8Ҝ/E?M:FiW$ʈ`uZ1<no
[nw/$I9ss͠ZvԘ=`U-nf-lgFW珆Xؚ}_0>0M/!˗axa?KnĘzxClihb} C7sEYT/IxO!i3D'D́TTrJrD.PK   dO\e    /   org/mozilla/javascript/Interpreter$DoGoto.classSn@=8qb~oK$AHZp	QмYF"| Hb.U`K{fw眝7 wꠀ
E	eMj Ex+?EZXEGTEw(Z_EU#p	+fl|sVgV;9bw=-l8F`<TV^HNh+gb7䕹Eq-:DĔ"r,fڿm̱nn0܈@>`g%SUPǄ"'^A֦KIz!<SؗAzW3<R1B+X%zQ$cӸ21ΓlcyB?f9|54 Tmy_dI&s7KQ~W9yd$Rٞ1Ffv38S{>c_ܟ{+Z83FY3!Y8(".XevNk*58To0+p~PK   dO\|Q]   6  *   org/mozilla/javascript/ContextAction.class;o>sv&Ft̜DĲ̂}Ԋ<vF~Nb^RVjr	#sQi#~C5}Z32pg%226"$G&
,;ls%e BH9# +11p 1PK   dO\3#ݩ     *   org/mozilla/javascript/Initializable.class;o>snv&Ft̜DĲ̂}ϼ̒Ĝ̪ĤTvF~Nb^RVjr	;#X43_?8+ȉas~^IjE5.`02:J@{KS2A
8ZBFf fvH21p PK   dO\H+0    8   org/mozilla/javascript/Interpreter$DoLeaveDotQuery.classU[S@چX
ސ;X(
)^Pi))8#>h+CIR(G}OKt<"#efs6{\_¼J("pvb4غcXw8;S93l+aj3,ûP(:%
N@T>43Թ\,%#z	
T42᤯m\{3 Iht
O-q
N+8j3]8n'ڊ2ZqNyp'
gB~5i{y0һ\35k-6u/.<mSpCӓrg.tS)>2l/#*SÔ+
`P'gf3SRaf+bT3$U
z}ưxE1cHs^+Wf* "j&E/^]YW"]ލUŘҦڎCN+9Q*R%&L䡊:ω~~f%L2419<i7eqP<rכ]URrr.
ax{	Wȇo[_Vlh  WC`U(#{o_؆+%\u_
;ې>`s0Oh
VfK(-t)x=g;a;>it#LCV?YB.uCGS?#~NP#LӍ7N6F}ӈct{Y3t~bIH$4B~:"T@;0B
ee$:7PK   dO\6(݋    7   org/mozilla/javascript/Interpreter$GeneratorState.classR[KANk.]c׆
">/@Pdf&WyA>GYE>3g}g.=:uP b<B8GD(jVA=D-c9Si*b_%V]Nڱl}ZZ=pIB͌ZM'lDAND3BrDo˗ کS!1G3WZ壡b&@XwParD~Q =]
Vo/AzEvRejh̓	~6[bG
tJw*%6Ɵ#/P/0m^"v`YRᗱʾΘ*oPPK   dO\    '   org/mozilla/javascript/ClassCache.classWks~$B^;`I&"-ǆ"n^oyH+MJzKt:ې~n$e	3u:~ʤ>h-et<sv{y}{ׯ~
`^ h?k,dS'fZ+fvl@?>a
]`kM/ڹ%hH(Fs΢Id3C1fĴNzNG}:ul@UMA^ܞS/XFL{WB7FuTu4f-X9MH3Mhx@`[}&Fn-[{*v	A|!VbsƂs1 oچkjl4'VK5ٲs1)5c1y1#Vr=ɲ*Gӄ[F:>aѫ;V=4AR%:H#'"oM	7(RSU`\7U>_`}D&I؋}SfNsoeΥƍRC	*!Kl|Pǣr9˨|.ixL`G͗wrQN9`Aꐎ@grYӄUwypLږLk,mqR.X(a<Njի(5;`/VXl/IX~y"3JpG\qU<y[	;nH]cyVf
Iz.W=5?C<i'!lUrUx}ȭ\jFm:^ʌMRjX{C]%_#)6e®ZJhV	01hQUs+DKXby
^Y9ZPt|R@>#}WЩb|Y/)4(
1~.e9x<<FFB2ex١5il.N.l.WX}T3LMzTM&0.;VJ6مFlD@
{CXyJ
3+8lK:nEp2s-32/M밭Z>$:n\05\H4_zI,BxiEw$cjiVfc+ &8n4o|"sos-\V~~qxB9o's}>۠D7 k'7@'Bg8+00q-OtӳrAZh{o"<DutWv=S7Mn`XrMDcUmd ܊q"=A'ykq^L),1wRz1TRO@o'45̽CzM^η*@V"1p$awJJ&2zA;Kl%G$Uq$gQ*=Ǡ|k9R(1c.//힟y6SZK5hW֨}-V|E٠GjŞW6>\`|/1|wWF^?@OSJ 퉩ەM3#%yUǓwnɵm2.OܼܼD،`'~{ÖU{!.6kj(CMYnrrpe J F	
gփ
䀗@>>3*7<>"zDIbM_E5KJSWY{i\Sa4tfFAի?z"īܩ& Y{ˇj'^ro	_!p< ܪ
E_bW]Ю;CƁ7p<Ӌ4eP*^E]i}oظ~O?`#g_0V[AT#:E$gϱ%|֎лњV/

u	[WABEU5nuv`xAu ga|oPK   dO\v@  Z	  0   org/mozilla/javascript/Interpreter$DoYield.classVmSU~.lrwӥ`,Pi%6&JBjYX\vݍ0/S~ZN;пX@b̞gy9Ͻǿx8:θJnݶlȭYAhwE
bq*ţl@xPam-
:u
	ut$C&bްgZm0;=co[¾;/hHeS:zJtZj`}R뇜C?ǫ:^s/F`^-$?:V0%	ԖtIlYUք#H}:Cu٠sx+X560qH&LTy\xS0GVCa,ٴŴrX,gCLbTGFinJ7ӑ[^xX,g?͖J!%l10c
:Bd9X_^S䚆]7<K)`բS\l	!/A~N:-E[n%A~T]WP"pwiNnq29x>?4gO~gHT݆g%L1iˠ̹>EV$и?i̉0~o0zc-SWkAmr$.:?MϸT_ޡ.~ә&NB!/0ݷG3Cԫ~܃wqvg#Lc0_1 CH_ ~!{PǤ?bF)nA+&1F\e|@4>$l9DNҔUu(OqVsp$8+R -
G$֊Dcf(dJMDB㲒8ԇI&I~B@rح\qu$PK   dO\+p    1   org/mozilla/javascript/Interpreter$DoGetRef.classT]OA=C]_ iTC	/>-뀋n;Uh$h2ޙ dݙ;;suБ4ư[VyzcvtD	tNߩk#scta=Au&dX\w9v8C*aES:]*?涨qC&."WknKPA`0K#}xV+㚉Fxv=o>t?w\'ѻVst1O(C$MVwgkֆK#٦o[8p0)^9t~NQc.r{?M(8Խ}kBe-6rgw&RNչUiߒZnCe&yc)w/;8Q+bga0uyHO6<tʝ;*(	R Ԯpʄ05죚A_9
6#+I<\I=T.UWi_p>􈳴>4;*JDny=iP֌b(+j$.f1G#	U&yBҠ[=+X$%ODoPK   dO\e  #J  /   org/mozilla/javascript/IdScriptableObject.class\|ݝfBB$ H$ &
	D	>X"n }[j[jꭈh}*>ZkKնZk_VZs$?|;g>{Q '>h
L!LƶNi^r~hG(knKLWB[u7&9͑<^>iP
,BMj	9|ʶP0|llR5GT5Ljk8<.RiOYP#LϴڙiG7i`$F"¤>4PHSM$E5%36FN01ںu-;v	$H31e|L>cj2 %'hb"	mh"hGX}B[f0PiJ`uܔذlMBqIK 2,jF׷wn0)4SLҁ5Q-\&j.aA;Xos>j	7)ob1axk|hSquRB^OB>,
5&N`fq4b-ۢH54uk3ӗKwChlp[9Q22Q:x{.,X(m3KD?*ebp$[:N=G[>Pz>>;gJ`;3?3,sĈ6hہc-3[bbɆ̖ӘXm
{L3n
±D͉m-[c-8r;ZcjYLȑ(fǙ2А츱5ȩw$|Y2XAK.wvՎ]c0amuq	
X`B9wl(JE/B+hnnܔzV&&55WJ9c.w![Xo2R>^mmGB)Vf74Lʠ&a[&8L2P,ohȤԌFѓ)
Jnlw9v˻r\k͸n;p+P,huǽYDncIݪii	o
,mmo
GN|va&~ `HLma/Br]%i^˖PNZGNx ]&ZBQAy>hA<J+8Wۥ2)`;~d<J(c	)a "
c7;b4-k4
zBhlDwF8)w'zɧL<zC1Vs=
{`~+u=cY<gNL29g&~.ܚm/pb(vM9wŗe~MI*:=aVli|R(%ˢUB`SI;`%T	KxY~nr?Kq,nG?CglEһ5&F!`
pb[V ѤO
21)	m+;-JVa$"ᝩ	17*m(/9
fv9\ҡBC~jHD"I|dc|¨4,N
Ո|j3DVIiB୤'	55-0yL2$V0HfPI>f_uk2h$튊\ÔöMAPKFUHBaN>,|F4DԢ#?4ҤQR$lIغS~As|acc8R.ԋL*rKjIxXrك;1ƲYXG]l(5YV>IJL&	1ܑeјu?ǏAqI2FqFTAq6'oIdET/"t\5't\4;aTf,Bi#SD/jN޴:S;(vUu4Ǥ4+&1pHR;qAhIiaT)^R	-hdIKiӢ藄tVfjێ¤:ѣ5tΠl+f"FQG0`y0k7aO@|MZGgXszu#Ǚ&%+K/rt6׼)-YaetX
-!E!hfBQ?|I=`HF~kdʧ8n=GjV"&EMQ{KM=PC[ká&/0)&oQ
aN!8;D|
:H&]ont*8 .#LT)d<k|팚%\$Be=3sڎ&+9նnYFbjپJlkf*Pts:[AT lmgöBޢd50O!"\É;Z-oE&:3tDКDD(OUuS5nQ.=f GbZ8
bcԦϝ|z,$wcgUC-Y
Lm4Ilv
ְFf|pQe4ZgDbНlTC8ZsWDjV#ƮpcM
]o?L:-Z
wJI0MΧիzPs:҄y{5i(x-=|ݶXte7kQ=`&U[5sKZqwiedeЍpzsmmTv(zϕݮNW=@^IE7
 *C[B^ȑ]JF=7Yn<Ir[#D{7YWyɢ6xxWVu銫ߚ5qaKy0sJ+߮S˨~62Qgk;jkea]읩JuOӫ;bqh{1Ybd*i<ͧֆUa8`-F,zKƽjFP陋h4&?T%+%szG?
ză/n-R4GvDm ,ސnFHSK8^2ޖ!G$FdzVqM$)IúAr=(ilfXKh_ u" t|S|?MO{/o\Y^o*k?VTz\ɠ9܋U$Jm6	Y]IW)}W

lޭYd+\-P$-i$oHh=-nM4^&Ēt?U&ס浩ɪvX] g+P8g.N]K/%AcpKBG'ȑ~W&WQϓT*H-|T<Z}chz̤3rڀ5ܭ<,0O1ȧx"䪕Kw=ˑ,^ՃtөS>jLP	p	Gp42MGyplc8g83-G+v\p
G_ȱؤV[rne-.G>~w'
 qVj#ہܝlͻ0:QL`<G ]iU9,RCWy=EN3@YQep@&oj<.y8 L
4Ӈo04W0424o14fhghn`h:Y=͍w M^M64q&jҬm¼N_zK6%.݃q{rʊʪڅ{,fv7I}SPd:iAy}!&eHnÉt;Lc h?;8b8:~O]Ap=!|	k, {Pe^VIQf(1pScd+g+ Q@;OSZ/^O~nA?NL7zb8#c$cc1~8z9,9l%Wh#h_2zW+~kU9kM$w;F~zb?Naa|&.wbsy%FD{ݖC~
]ҤKVa̖k=D
ܵl
 ]g_9Vɹoq*ͱ6wٳcq.}|q̉!cw 9..[S+8a	s<2
S`àIlS,`η$̜m
}MMOscAElLӆa9ZjXJ+zm$Qi4kE8_;QmL6sҀ<r}mmz8 rZ/ /F]>F-t*}vH7.ƥDg0	Nd@1J`1Admp:+.ٳG0&(l`Z&-\Si,t`0T YyC >
vKŪVbD.Uccs-lc-^_
JUZT1å-abrVTDtk0E,XAuY؆h3,nv_$tȲ҄G\²?_/J&׿8B.K<S\"޼uz+I}w8;v` KJ׉~68w
}(+?w~C^՞o\aP 
}N,eϣ~fj.+$y.=AZݓ^D-bvFvkX
!Th֚p|mk[RۆzآmABC kq\ķ]ցkb<]iEJWpyVϑUl7qRTs68W)ԋPB7->_^5V>QEGGVHn}*Oy3~%\9((1خ4h?V?L30p;/?GT:J{>=p+iҤNY輼]E|nͷ/J`!e9?kY؝FCslqc4o
4aPt`nNf:LG(M.=1 Z9
k{P[6sGA=?A</I{v^qvG*p*p*P!
P9<kCMr?`$kj%%]K`_fqep/
*%UvAڅE$v.NRPboWɯߧ5W~!Wp2WPoQ׸`=fk
'1+`頍b%V*g/zŶb£8<{mَcv{N0j4αWDв7|mzw0㔇,:7V7>nQ;?
V>	UO샯UDuf}<1nhѥwNo1T6ipT~7x8L!avχ)G81葏pIlv6*PW0@juUYId17w>bz^	{CaoW*VwwC.8ksQC	Gi;U:U:U6\j!<ܵ%yP\zP .v+XCgIԪ.+uI!clƧI,"k(u4;RwH=^j]Rw..HJ}f|R)f$0뵙=­'Y̭XTܞmr-s-s-s-s-Miŷԃyo/{x[И+<ޏqBGo{Cd˯)F*R	RkyY|#P`^947׎^b	+1?6v[QQz04_qqF@Mmrf.uAOx+.qsz)yԲZER'rHe%+&5`|~X)rz ҫHCTz6lQ
%iQ!IZ_SٿNfshPTDۯijl.JF
e;?s+*}l	"|dszAST5iU RI+]fG҇qx$(+>@&\+𤸰YzFQu:G SDR':٫^<0vbYsiŭ>1&gU>FtC4=ڨ.
C VA5xy8GŬj_,ץfIy`I2)_V*93ue%?$n]UM<nۇ/g,LYd]cʇ;Npɫ)*n$^C߀~}#ٜgA~.p\}3X7^Y߂X߆+Voz7Qܢp}zvwY}~w%B_~	A˨P_h_EJjտ,o?AG޲9p5ѯ%UXj,nkUa,.WhP6FOo~=c?qn࠻Pٯ}xj=bI4 V{Xx^kgb^
gpA!.a>bY
KaC2ϛ&ݶ1E|-|xy3EkƌpCaE<H;1t2E.Z+몔ϫ	\goD7a~3&dV)m8 
Se(TJc3HE3H!IqNo)~Rg)d)b)a)e)c)8A
RKi-Eܮ9lXU4[>x*M,Y#;^8ŤU<Ѵ@?ad32
5{Ц0>kl{XgK`5W<>L
6\&V>lOVgY;8Z.
q	'S(֟fb,Xasl_6/"QΙD9gg<=XF6bBtq&e9+onrܿv}xR|KUCpgUid{q)hpW銲|5#Ok?p?b'VП9BJ8[EDIU0F?r%Me~KVviQAfTP(Ų] 6^,VAG/~No?џm6:l6>מ1a[QEQ>k·0?qKEeOK.uU%ۛ7w8-?uj$:>`7>FPK   dO\sY    1   org/mozilla/javascript/Interpreter$DoNumber.classTN@[*EP(+"vEanΖq-Y
?| x
d99g `IG5ta]<=xR{y2hÐxchmfFFnFRĖ&Pr*tc4z& .|:"(2λܫWj;ଆ~p!{iu^g*l,T?_}0X=ɣh.3reh*ի!K	:\rV&Ku
CH27nGeQs)1ESvm\u
	N/7vk"J6Yu<EU&~+(c%(_=OMYH"H"-TrIܖŻ؜nNʜ2fԿ\C	KCVS
h,B#1A(D=?̡>`r2j{o"u:5^¢<IFcاh{f
s Fl)2V8@z-+}3HtW1@*
K07G0aFoŠnb&J¢٨}G]J1E>
,b8a)aJ^#z'#@DroPK   dO\k)(u4  @  :   org/mozilla/javascript/Interpreter$DoLiteralNewArray.classURP]҆րAD"(TAQ)*XD*8#pH#BI>)~eNb;}n{/g￾|p$ШBCaW3kqxf1\aߢ49C|vmq15$&$T$5V/޸(llm-XHGUjƐX^mNQx>_%[!^!TghG:q!]98s> 21'Gjܧ7K'IRqZC7zק&(#fmIO)Aj9g)ǖ4pw5pe2EVbPZK!Seb,dcDèč".j$
7+%brvOi}A|:]b%J[3.*M&v,Jޙ>XEثN{7F:ݯF6s 攬gQyΉ(2<W"U(K;T=jasQV^M{m5gI>*`b{Sg׵zoխ,U1!ok?5pЕY$#>ܾB_
}4֢\crW$K#P?y2wzǶEwD<z;o;JyDV#t,,/ +wr6K8[UkֳXЧB=%d1.npӄ)G3Bȑoݤ9KkqܡOLhg
saP	)
'9D*rW԰<@Z1I>"PK   dO\1F    =   org/mozilla/javascript/Interpreter$DoUnsignedRightShift.classU{OA-=8CyWA@(Ђ-TH((&(G9<nD?Fc~
m3;󛙝 4XA@G!^F6ܗmug<kG7MϤ9e:1}аX|mAE	TR ۞
!s#j1%#d#3fGye(geh1U
uԠ478-fMF:.2CɈXZqs6Nw4VGCirxoY*ѤYG34?Xr朑%)8Q
hSЮ(%9-^Xxۤnoeseʮ	#jYrƲ2)7cg _\ΣEsD|86+1pxtY+DpRQ6_ũa2[T'yN}o`q=}g=ew8ЂaSK9/cNX">״SaI1=9L_
ZꁩSD> $:Nqҧ<tѰ"ӸC"D`'w&W"^6ЮF4ѹ
e(H빡Pg6*+;0H~W_uGGTǵt]HܨQ_eo_B!}@Xm/Lh_O
~%O
pBŒF-٘xsvhNllAJ:7$/h1'x@ q.&NBPK   dO\2
    *   org/mozilla/javascript/NativeBoolean.classXxWf7;0*
P$	ȣ,$0L	ewWjm}XZ[P$RVAZmֶs&~sϹ{g>w4y㇇*
CQhROujo{$KtԌ'2T3Y5xԘB-(KQ 7C]Uu08-ZRW
}nhKh2.P hdV 
pEwjL걮2V1anѢ&7mKI)\qsWBFBKLݞ6EU5\ʝQ;xDpA!jF-Y a2d-)@J*eL4Si&w0t;UYdTS0EvHk;x91!3J£3Ud)M5!*kpyalWݥnJ!,o"^"\EInh+7i
2c	btR[K"UC]=K5ce:EX~A
D/(NLv5F U2P#&׮vpjkF s֩
vԪ!҂~ъز.f
S~(Pm2lцMT̸cBYW}kՌ̧$$Tj4	Q_j 4t%#8z8A]dECI

>2zAv\ҫn%.u[;5f	+==Us\/26қ0Ҭh{;vS.3bڼn5E;4	{h{RCry:@{eb-Mpܩ$>HBLp!2嚵Juȸ;F9ST#3dD KxC"d ^?nII2>uVי">|oѻbIGAi
!Sijl:D;Y2q#d{lzdlˢO0̼ػQ3\pE^;/L={_m9WKp&ǧ.vGCRdWWvFr	{Y$FwT>Uth̖9q~NT35ZѪ%Sb]d)+Feʩ8|Vrt,ilhiд,Ա1`ghV6ҩ֜mגk;~JI;}h_" J&U,B-BZL5IMfOJm֙HWzxo+;0p*@/^C|Nzz'3d9&ORoe64i,9D*4v(
3l.$3zkMD5aUT)S~=8X@>R__ɸ.=%!.VMw\qPIWULQab4 WsR62ةtRQѕD5̜8Բg0Tec<58;ABWE~f覶G ~߾^mzG~&QJFb1-)rEKq.#꧌ƤO&c&1z5p-$HFQN|'R|ޓA@?M5>՜BƂ~ÄRQpTL!a:	!DB7]Ӈ+3aq=k87p>c
VzL&Lf%bpDVQqZ|p^~l[ӨP?^*p.%ޠkQDNfb6
]|Mb:LVd;YDm Χ^>)z ? . !fUfqn۪	,!cp?9' Ie\c\FqGς`-fG0!:z z˼%KB<oŦ2fzD;B|`㇧xn^Mm&&Mҳ3q1Yw"`.+()"KZp)wY$f@fAO@ROij6٥1h:Az[৷ ?lkl8!R%9$G䨒lU~lR} 'eKKRh)=|IV=P⍞pG~#>C+=Jx]4C\U]3Ma> ʰ6!yI
i	aeTVn_?^A+`l
q|Gil5ޭ`oS>$a#D*wv{,5M@}\]*>)%ndh?+
u
gY,+<e~ԑ,+!*ujjpAmPZq<8P\P]P..2"q;r$[=S$- .l*_JXI?AcDdd!D,~'铑׮x:Gz֖'&K0WPK   dO\xH  E  1   org/mozilla/javascript/DefaultErrorReporter.class[OAۖvXxA{x]Ļ	I"
WdEoW"^ye<3]P4ɞ9οg篯Lv!DTDc{7xZeq{Y69p PvܵJyeZ^Q-˻纎d;g	('B6JE2ܴ'U;9P@K2
U`a x]۴BuS3G!Y{i{|SH8N(8NwIԲ=a0ܖ֎Kʎ2
.I	GTEv
T9mslՑ=MXLǖHc
Ů(,yPքIT&imtpj;
KUi0ZU]yUG
wMdX(t7"S6fI4fi:-W7.EE˸X.tbX7
y\Mgu˿taM&C`􇅑]ZdcN],#-퀽.C}\ⴿ/8
ʣTˑm$ʥm\iD;HY~Hhy8z^Il?pL\?qXV%)Eڱ>XMcFvUZ4,"ru|Qٙ9 }4bIE_:}ns p*OݣD]"%&ɚybׁthAZЁt p& zBPA8ǰ
GcTc>`10A47a@}әM9e~PK   dO\J   y  B   org/mozilla/javascript/ScriptableObject$LambdaGetterFunction.classPN1@rܐJVp/n*U~>B$˭B=eg`i޺ۣҚŎ_7NATpKM7(Cnu0MPdiKh6[3aDʊJ:ZamyyJ$=FT>y6gpO4{/}4hЏ1oX1g#MMPK   dO\v0    !   org/mozilla/javascript/DToA.classX
|TՕ?͛y37d$3I0	`ѐ%$3I&313ڨhۥjRnWيEVֺt?ծ`uŊfF~%s=sk{jNU2ɵ!)\'6DL%D,TQD4=m&2LKK|S.SM_ر99b*ɶdb1N1͕+Ҙmx<\-xStusgD8}4>'yȯRx/UkeX*QKTdKsukYb:B3<Pucl5FGTFBCLfPFL3.\5
cD-ёt,pC!sTKULѦd? ᄐJm6[%TI5yuq\^rR«M´d.(X51 &kj%X6Z5vj&UZ_	x29jlԪ
n/tҐ[r5ۊfaZ:TZMѦp|,>XHu~J]tPl H֫pUiIB=Ų6I|T"%<2M {9k]2٦Nl1 rMW#PL
ƍc*h^׺J3|>?IjD;6ӱV3_Eeih;Dp8LWoݕ7ܢVbah= 勞(C)OK܄ȱDgXtr8nJpHxH8ntX_z4ܯ*= baa
Sذ֛Z;|$lMR"T\-e,=he 7
SQh)Ձ~O|@Ywwش_<	闇W{R4koyn4'?kN{	FZliysϙMo#ڻ7/xeLkgg*Tb843^bqH(L䁁pj#R</y6A .A!7)kE,fwnogډ2v7(0)7&"[3Rے;iyDpx B[b{2N7ƣ![ל3NMKDW
EG;zv%5ј3rz(]Fؠcu:ܿqex$H&,IdK!zr` 	9W{e钛01#$!9bl)R#>:sW}T42(&!ZhɥY0+JA6|StN|z )`G4|Jq6Eil.m'4HZ>4+"X:P	99*ܗ|j>$'wH9eU~I&
B{fpT?쫓cіM@`gc2#+d$erÑRqP)Zx\"@qĦhT-jAfMBD$M%F.;D/C2E-jMPښHDGOaQ3(Q2KN
Tt(!OH?5
,+<km৲ہ"kcOf"yp_M[৳Y??/j
FHd Ucd13yYGTL}~jGza^jwٿMvWwWw!:ꚬ !	A'5Ʈ<Kа/
d|ͦCCC%c\K.םKy4-q\V\q
0H3H8s@ W顢˭ Z<j_$nb@7ʩ<Gn%\zpNPzG_FKDiumפ36Į薓@@~Xi<LJUή=3Oim(rmm]V3z+(o
ݎK)8'$a̌BY)%lJ6lBUvZv	ZvTr~u!~Msda泔N#0^;+lvQUEr/Cf@V^Ap/>wCcCod>zYFRs v0Η+;:JZ*:4b(T5平;h fu;L5$kQ-Y3A%>YjujȖ]GXjmA$K&ͪLb$Y[;ZbG9qK)h4Q<ǤLׂfmkr-I4#kEͬj!5'?OwQ(h/0[. 'zzh?5㈠'%O
9\)Ipџc{>M}
~\,s۾q8
s5ƌsZt >$ݘe>OYC>Z݇4x	=J[ ٰ;VPGibNŽg CdUv'ENC#tfAq#l>SyJJ*;4{	^;dʞ#zOdqZ4AyG]7IfYM&*/+߼
ͅ=Wy	y1pzQ)$OhYăks-ؾ;OrG6)oU')@<~W]^uV=9N9Uҭ!sr}OBIrk9!&Sr)ZuQ,>t{l>y®)va}pqNuJ<=ۗBͅPB̓}byv!B^-oh.D>b
9=aA9|nS;t_h>NQ2 P0EOAOy	r!oH$-B3)+X+yPݏرZ1" ˸o(W+GUrV|>_Q )0ln5q71=g=s/C%jqx_!很pQ-"_GC5T7Q'rP>N]Ծl/'Ѕ=l:#谎zիBu
]{NCgEkxIg<--܄z3[VXj;xx=vxB~K	.<k1'ykx.jF|i_/R
/8(bi.2(7HQ&i[|[EFhYΉ9M<~@nH8
zZ|re՗;wAog\"ie?E"$HdRUҢ]R5ja1N//O¾ós.o$ʁ`3:tk6=zvBkca&U,T
}kNׁV#/A TOo`
 2l3T5(|Y9jdtVe2z*sN&H ZL"wA?*̌|Uc?Y\x<UVDyQn(]f;|&5Up\6vtm}[УVvaj?'1 `Sr<gT}C!>c0=tC0x<tc:,h\'u_1h^}]4ãq
(;C:s/PK   dO\R   .  (   org/mozilla/javascript/RefCallable.class;o>snv&Ft̜DĲ̂4DXRN*;# HN?'1/]?)+5AnVF"A%>T畤VXS }aK֌\Eɩn  yKFf f	#П 'db PK   dO\>    a  *   org/mozilla/javascript/ErrorReporter.classPjAq9
B@48*4~%%}覫jΗ	;FZJmVm)2K`!<'VY*Zs^3"ٍ^`L^.o4.
ו/:NF/š:r`)X&9K=TD=@~dL-PK   dO\p!'    I   org/mozilla/javascript/AbstractEcmaObjectOperations$INTEGRITY_LEVEL.classTOP=nt(P7Pb!,XdIÙӕ:J$he1lzr;soX]k7]cLzjf(w-3,YڞLK[ڳVU5=(7˯w@yKTątE+StMyZ_j7 }H1DMs-lNyp3ㆌbCVN*cXȞ^s X:P	}m,~ZMP˶k+˙\5BsIQ1	>!`:3!K3mpZVn[Fݡ?L:T={T
#ѴޥVm0|№ύ;6Ab7\#l*esU:j˦c#WȐRZiy^\ P`PkW`luNM?/H"q4jxĻC8!(P>1ܥg% K	bS'~
]TXapץJ{H(S#>BI}ޅPwQ;"e&{n)h/&B"+;!vZBY[1nAhD	ƎhI.3Kq|9x,;աPK   dO\a8]    +   org/mozilla/javascript/ContextFactory.classY	tTd&ʚHHXd	nFBP`[}̼$&3qf֭nPŵjqKE VX{mm9=Uy3$2xN
ν{>zY |!^Uz^#uKV2	3b&5myE
	uuE0aN^cfw)I}z0(1bhp@Y@>%"
(!ˎptҒuL(M=DkMEapÍ.#8/ht'h$6nM	#XyrYA<Bj$F;$*Ǧ 3Q_FjNIwh,=zF+P ef
Rq=qcYgCza%>o|]	E S}8Y4(cIږfKΐr"O~_,<K}c&NNhV-i\z֙a9Mō`OLkx\ҊE
1-=?ft
#$0˖ǹz2vp@ 2\q4ZI`6$vD`Lsq@QX=THO>Ь\'Py&@y'ۛ$ӌDy#΋5"&[A=R&cF<5E&KR7FuHp4d
rTC^EN#zq4ja#TA!Etn ٙ޷IŃ]bH/X`Bf@q+|d"/D4#kXCPCP
\)eH)kNSKҰYp搚4-NzЭ2ĤYg52LVGm@BC$PlXj
=nk4dƥBBgeㅸBÕ"Cg!pV%I^I(ftE{$U:
_XqQ F={c5:[i#f_7; eEí2qMUgop;QOptrq'&a
Wpj_@nvYyZY$C+TES4ĜPbF=]+2+9umz̔'i2p۪N֤N	t-Y!/䖯i$مW/һmc8-[KApldx%0{b2yXWizhp礵[l#!7J*Udb[Y]FQuhv.fn:lEET9~2b=\~7t\FyvR?2Ȋ:{#EMbؐQ{OIwC*;a0^@<Q%)#4kn[ߦg?uɘt%,kdp|	RBr˱́Mixی[/=DVmPd.^
֗ŚddEaβeH&عue5d'E]n`vmf$Bإ?F{bAc)qE,*i!h܇N978߶J@TVPK	.[>WʟI8Z8ϓ2zTKvjM'@߈y?
(k9]=n<Kax>ȕfCkF8lG6B<	>Yu
QLOF]NF>"1yk|˧(@Vq:Uj7ĘSR%B2oX*с+9j*}`'؅"!E-x&:x>_NWhX
Q<[bpRۢC)qMk2(Kűc/>pxx-pnLj,	mDqeId#*K6{{g} ڀRlz$u8u[K_tol~:4
u~{7܌w6oBa<-|xFYQ,FUQ78-wQD@٦XzVV^:[xRYͷ.1Cth+>	kyήW8=3[=hR˟KǕ3{pj?8n%NUG[gp%TJߗ=v8K9;4̱ɔүvۗE}0
K{~{EnH/ȍq?sSq<bTpXą8S	UUOB=0JJ~:!n1!0rOy^,AV0˽)ns$(.!Ks,	x$JZۥV0j,Wڏd_U5`F
N>y9W){q996h@&4qU^wV1-}WrV9@l
/'o\
xwKrayeya.H8"msF"w~U)w3J=p[l^$#z(\a+Y]JK#ۑZ૱.iEj3.K}zτ*⾚!k:⾚?.ŕQPrMt~)Cw.O=:ySdP@^`	q3
Zu0hoeЮO,x/ZT>+5Uǅ⽓x"޻⽗x;~%j/9ޖ~.`$ECSmxcء@-x2x xyp#঴,\mCF1|ȕ*5^ڭ!X\")N;'vQʷ)?VVIi&LExڽU1]$YZ\ʊpϧӋ_|B_+~Z{nn48vvgq!nVa}ޭ\[Nyl]4cP\KgOj0]e4h\1,uYvw}ȥ7؍H[)7۸<\T#O̯LxCu&.r}ӛsx˛?PK   dO\Sh    0   org/mozilla/javascript/JavaScriptException.classV]WWݗ$LBTP hV%A4
j[a4d~O}Z}@]5>tSOOjdICfΜ{>{_?( (hT (|b޺m
Z⚶$(N[Y}1,SaΠ@4f3\tl'SL*Pe&:../*]خ--)۶	Ekd	b#hV((xAq1u@Mr8v؍Nb@tm^KE7	d23ٸ{UiQ]sJ6)GSAFAuYg~:i+p9,C%TCP"ֱX&#,`xi~FCx)8s\R$!;֝d*NuL:ZyZ4r?&:o㴭-,VbHIsە̛
Ek̇Sk9ۺ)贊3H	lwX+<W5rVE*5;Q(nK		ͭ713KBAFU-s4oX.Jzu6.LǘgkU5+x_cMW@q*r`9}V+J)
uGIAȫs{QJv۔~\Sq݃3厧mhnbjD@/:d=fh-2lаcՍ4%ɎZYטߞvj\)I2/t='1chҐq#00B@2^ug7ͅrMF>-e(g;ݝ? T&UhdٕQC25e&t!^>tyj3Wn[ᚂ5Di\@PTQ"J2Mo '⏙S{p߀)"K{@=(c=͡2zpڨ"qaO\;W/cK_Fʑ2F4{.oqMNAEZpEFI@}?H1.0fyex]88;HOohq#.m,gq
Q%G؛W:
w1Wڽ̈́

.*TZ[<]	MA1\mg<bR+!Om%te)}*2\
.-+KWQJOpu3˫V<~Kan-&i1^d|tuzщU
PiW>\|xcZ$2f7:5kW^#p7g] PK   dO\~    2   org/mozilla/javascript/Interpreter$DoRefName.classUYSPniI["*ljY$.-J)^xpBb4$5IمQ_M7Rm9'~,&Dm
*bhgz²mCb<7|ӳ^tU=N^,ن3OZ`hK.%GBARET,.xga>e\.	nΪ>A68@SqVc+tVX1CRpXeibqѱБ[]~0;5?WDVqLq`!ON+Qы>&f*Rל$=Zp+l(\TYVX(CƊ%iظ<y*V1C4s)
kVZ-]e-EsCJCz'T5
{,
[Tˣ͢,ܬz_-w_hl<V!ѬS9UӣC["K-- EF<UDKUI0j[L^D?KU_~pwA-:4s2&F{%IAa2'U`ƸEAd$cC^t>jeI㸲uxp$3#Po`ߥL;/q8tǆI'{U+:&=&>CDcLh_e7B/d4!#Rbl	:RҷE7-Z}G){1-ewINhC]3$GIHΒC'PK   dO\/#    7   org/mozilla/javascript/Interpreter$DoSetConstVar1.classU]SU~$$],--Rm-h!Ć	)UYaqw /
_3Ȼe
-fHMf}y?~Mb@'GHA]i۩j׆ij]mOsuǨ{	^[4tϰySs]ۆexZD9b
AaoCf9G	yCp\83Q@+8^"-ٱ9'~Mӱ3|c
o2/{'kK4K*
".1D4l7&ۈ8?沂+2T4;'\IP}CfALUM-Wv:
cي)3gmLZ&zjnuBtĖMkIc
x!m-;*VNʜ
x_-0\>S*C%-31
>G]2؊FYv47D>y"eU%s*X@b6UIwDvRXpۙ*PJV5nf64~l
#~߬u{Smf.v=JuT0SjDQgU
Co5y>y;-t;SM7r]e4jcÞɷLIxM<a>ڍnT/Ȟ]=T:h]-qrp+bp';EzwmFrJ޲"җ%zmޯ=/6w_
!,c(:2_~Kd9	W,cW	J0+_n&=qGOї~}C3 
>8@:=z'B IĩpA~F+u?.y aOtoWqTJr)<ETV0`ZZFS]7}|ᗂ2V>.Y=ɖ>E?B@/-	0B&8Ut<&gs|qPN ob䈎*bt\$h%h"/PK   dO\    ;   org/mozilla/javascript/Interpreter$DoDefaultNamespace.classTOP]X)ۊlCT|lCD1Y#a>ZXv@}H/Mxnms{9>?~}`,#@Bøeo%wa6j77]ͮ}U-3cpahMݝah'փhEPFHA
Pn9hr9CFA'
nn%ۚꦃ8vQ\rKZ=V8N\%SLEU[[|acB=HeWp!dCF6![AzN)ydjHNhbulX|vZ )۔CGs&nTJ xmfO#cQtVEFadZ)nj㫼l'VTns[N]6yf}M꿏#GڐL=_Fݧ9
Ϧ?D#g:$rհYJbxūbENQj9]=rЈ-jh94}ePޢ
[?څm)PCsnOu$QFT ֻF3°0)	$:<|Ԕ%C+D%Xc6%qސVg)F~A8=o~GVSŘIq/`p鮇0'qOV1E2^lWY 9qHvh"KE~PK   dO\ìSUw  T  =   org/mozilla/javascript/NativePromise$PromiseAllResolver.classY{|TfgwfsCD6 d@
<4Ь HMpw"mmT[}XZZ*,(Sk[kie_VgnBBv(4?Ι3g|3g.Ox(lCe,[&bZfm#f}PZެL7p(pPb(]
-[ogp.D#b^UVa4#F}c<mo$HO98*
0an43U_GzEl4v=3qsf$CQky&(DޯfCף&bepEL=1;5It]PE˩&R$WS!m@sKj
̠hca].TYq77SPug4=5#:ø^ݤ)ZÝU`'d[CS,j̬T}>i+Zc-F0p.b(OL3
樸dK0zY
kkRH*b>YHTF
S,Vq).c#M}Zn%-Qфl.<2oCiHXWuUu.WrOXaY aU*V-;ciTс5&2X tr13	62oT3,K0MFlJƻfdتwehH쵇q5-g\?C͈\#lmW#v!0&k73[ԬtCXS1 <.H1!"qs{Ia;i	ȭf6U$UA1y
Wg۰]5*ueg(~uZsj,ra؆w!"*-`S{`UGMkږ6/5/
ءགs;V[·'7guFܤ*>:D[c[!Ra(#8?`;XMp>ܸ)#5m'}M.ρ3x
9OE:Mk7w֬B*>&S*ĺݣGtM8$F܈SL?hXK''ڈxқ-AP3YB}*3k?]gT|VqHoT3qS/AjziŻ*G,~[<=Y"bx@N5Cl6pS J~$\n1<'_q0iz!D
ʐClr.\"_'LI[!_	|K*U9@<ReWGZhm"~G_(.I=MC^V4ߴ}@9ȐGF\kr8LWą[᦬d ozv+L-߭;,xZcbnr6Mo ` E֝~4OnY䥡2ʑ'Pĝ-[r^t<`[-m.[H,7q_%Fmtb
o1Wl <FiӨ<C[Vh
5Eb]mގ5zBũ8[V0u$#i3码{212V	dC[!V`,"
FlL jfK,a*̞ǈ'-̄:Q
s؍8]rjT܎3&8X&B(戆iidҒe`"
j 2<#¼ٓLaB~1WG^3¦PnvN(l*gJ:y22Et	lm?ѳދr2JeYz:_*}C#<܃P}jW{%(Q|s\$m/v^"_'6Ts_R+ZoB&%aMJϑ\JNJֲ,Y| J<F^y7<QcqTGc7EN{RAhмE~hl9` <p9ԧ VRRh_iNuSXwCsZgy!znKC/FvouQ3W>҄+s`z]S&t;\1=*XF&V#(K.i 硈>܃J^Yb,KOj*Sy%/EOA/V>/mZu8/2<_y;;
_G.N]Ydϥs7~C%R
?O<K#)ͅ}O3rp` (#w7!fc%'yG>ˣy^ D]MAM
@vv}
)xBhI/IIR8H~Dѯ`M
#5hU5g)$R";jjĻ,{Xw	W o]$>KאU	^Ha%oǲu.&Rx_mQM
Qslɢ*^x5ݘŸ.YsMC+A$S܍$|sw
}$i)"ysR}/JzyPʦp1(h5T^4LagS|x<r_>6[NۋmUrl"^&
T(
l<N"+o~m]
N5}a<n	:wu9{ᤰ#_ydR";@ᗣ/G	ozRbM4Dҍ)lRR.q\9oPS.l%(WBh[;AOp)JOY:ه:;*Q'ZN_i*.ū\\G^LW 	%:梜C?S[(j˩IZ"e!Z k%

xFF2YxZqSbc&K@ˇ9B?7MtX::.зMP6mTHRY+gPK   dO\Y
q9    )   org/mozilla/javascript/BeanProperty.classuPN1=eaDA0qܹиЄA4/C3S)$>ʅ1qQہDC>9)=ᖑGbDp"BP84N5(a"26Qf8P:
Q1,4
RNMT0Ժ}e{$]F.5n+P5 +5"jW&78A<p-
f,Su
{}5סHYbpB#pvHkV3)˰MUz>zCjtW\%;k,ze*v# PK   dO\֕    *   org/mozilla/javascript/Interpreter$1.classPMK1}in]Wۮ7AɃ(ֽTzOl
+O?J=x{f'KE"Ù6t_eY?s[9wi_9aFPekaC4+/I%l$#$.x9FVRTZlW@/L!denW&Z{R[&M8Dppf.1}Za}*8@H7OW%\'zH
Ū>6KKM [:aB4'PK   dO\Uf2  )  &   org/mozilla/javascript/Context$1.classn@͗qiҦ	&HEP%@
-RP;J\9veO*Ċ'`^"$< 8c`3sf??}M
Qa؊3A:x"N
Z[1=v:Th
t+0L)q7:c	b=C_3F_C56/p7cݹvdmZKN9~^vFԉ8C`2;hFؗq>Yd^BT\n99ZEMNA:Upg7àI<+}zA0n`g;/.dA=x%F<C*Nc
50Ӕw~"+X
S_^o
3E\BP272*5I֤:nP+s<#.PSd7Y&,0$~SĝaӌǏ)49[j;iTE{L6VnQ>k4רh PK   dO\g     +   org/mozilla/javascript/NativeGlobal$1.classSn@=8C[hO<!A4 E&ȝ2TIUo@BQk'EQK*krcߟ Edux8.
à+|ː{,Ci0d^y\=1T	C}(⍸4ܳr_l)j!CYq+Q8hYm)зR"cŬ93,hØ< 0"vimZ:6)k׬YK+tqAa$W0@d#kF~iEg4zokJz8##Փ}&C?j,}ǣۨ¿XĬ)=n_1zd|)c	5gt$`[=pqBcUԨ{<S[g!Z!}#^0-ţHDX̀.J+O-};y.ѩAŞWI2
Wh	kdƤ^7?x@itx	q'T"RR*XS"PK   dO\W    *   org/mozilla/javascript/Interpreter$3.classPMK1}in]Wۮg"~{AR^*FIIR'?%@y3o%"PXCLI:ӯ,yğ-0s#(vs2p	ƵT0ԏO!AOʤb6摏JRLr#|)n*-Q+hw2T+UETz"a88C3kRJn{#VѧK	rFbUF %&a-Bg^`0!V]PK   dO\    0   org/mozilla/javascript/Interpreter$DoSuper.classTmOP~(T@p(LEDlpdIDb)(vv!1&&c8ms-9s~~9`"BhA+ÜeJ0ԾVu4[/rlsLǵ+[fPuI7u7В܌
Q$d90Z⎹n+hr nt!@p
5wj>xb߆-%\ACqU
C׫'2Ts7UI@=Wu)
m
Q\uC10TwtoN5RM:{LH8e^mL2L5׊TfmB({k7΢Ʀj޹zvtdDA\xHM7|ڔMI-aPj@!PmyNLłKCz(NǆMzZWTC5wh>W@aԞ䶿マ]Qњ#7G(nb	ڦ/Dڧ1S(#YDx)f}nV&I <pvH<q:wͼ8DooA##GeP'h]ݐ8&~,˃ԩYmߵ,pǏ.y%,[ {OtE7&Pڏv	>)aVj  G4AtcO  PK   dO\e_g    /   org/mozilla/javascript/Interpreter$DoName.classTmoA~^kAۊZ
-*_0$
&i~zx#w(^Ӑ"{ffyvnf~@
	Dաard;Y7?=Qn=3t-a{n1ajvm]1s0V&`l]ig{%ˎv%q"#e<ғj=`Zz)^0pddí1mÕ+CamaHnz#c&%i\
{yG7bG5Fsc!7AFz-%Mkxo[[wd42]ӷpSl*8:p/?3e6ҩ7sk;C0,*mX]"l3݇.HoM[~ԐWIQôx yбʰtr$WÁĈ|jIбN5s+,lizVeBF^g)_#YmwpW,#wxXn0r  30S\ z}>b5'k>b 
Jp%U=}_1>@EakyvMK!E%|DHNPK   dO\}(n    5   org/mozilla/javascript/Interpreter$DoLocalClear.classTmOA~TPEZ튈hkRBhRkb
ujOWh1??dq4b8Kݝyffwv|
`4F3H ɰ-s{k;0wkX̪KsU7P~RVk|a;Q9N3,F`ŞdHJX&մe>ٕ*k3cȐJ0ko&c9󘌚@n((Qmcb`.b%˚q.Z i[Eg[+fP6g	H3+^ٮvD82jŸzi%D8ّV[g]ȾQI(fu0bufEOD\W>k_
[rַ^քT}u-/PV{dUו~Le~Ǘ9Z|"eX81DbzFn01C}F
z
lHp;`0J	OKO8;O$$h{ _#B_[=n`.Mr(`<kinw˩+,"C+1,)EE"'-Ί4u"	CPK   dO\8  ^  @   org/mozilla/javascript/SlotMapOwner$ThreadSafeEmptySlotMap.classWSe}䲐KBJn
`D(RRPBi벻Bl0c3>0Έc3;|B,`ud廜;sη'/ ^Z 
a079cOfTM-o%3Yú)vt]g?5,hdTEI Xkh&\XRe+=;Y-ZChz0-mdu]泒ҏ)]R ա5]mS:RCE:'!30.WNLE[eS'ث
#CK.IQf
"eWBÓ*6r\2|{VBT5]ik7WMǣ.OkϽ`Gƹ2~j 4*$YuḞu xUFC\@"H2o\UdY-MUަ\t˓ba]F*߄/5U!\
9<Z$:D[9Zi6*9MW\ֲ4>gRvY25ۙZ`,U3:`].ur@TtEfee>Atut_VI:&MSKh_ 34g,IަZS8g0ʙ30˳i70Fϣh|)	A)mU4I㙱>OT&bvκz6]7ۦfj
#%cMY ]8m*8F6CB:T(
[JXS ]Ԩ$`ԽI/zv@ho^PiƐ&x/fc+N!|ј1~6KGha_~m#LilyD`6o:6h/8++qLbt5yILUzD=]踗h,N:ŏo:=t#mfd[xDmd
6X7M
6h#ɔKtzY<v?8G|9(=OqBP
"i>A+RKy#܆H6zi\)f
xݦ7eG6|戈Vjw;~ܴipݵF1BM;ޢ)q+C<3&~DtMĀ4Kj"os97Ed8ɼp,m9^9Ĩc(sg=8npMA'anصnFem[r|]gxK[N1PK   dO\ߴ  
  9   org/mozilla/javascript/AccessorSlot$MemberBoxSetter.classVSe}mZ
4Zj@io˲.m_|uKtbqF7g+2:/T%.w|/\#0"ڶ4;n!2b&c&b" *Eͧ6ei)鮹Snx,+;.!nJ&F4)hVтVS>
͍m<o'1g$C'Ц]S`>!0mC+9+pJ͘4'<bh<xLgVv8.C["[ !ᬏoLJxҳ*"Rtv@:+e{Yjp}gRI*8bfzs,5T<'2(8k8.T2Cᩂsӱk8;T0l$*
|/39. .F\\QFX5,#qcޡ9,+xU1EL{٠d\I\>|TôW1Ijk+6~bnUkz-}diSxMv[dLAd`*jY\6͘1W7RkqtZ\SK!~ۤξ_Íhz_Ь!-׈ڪ%vJyC=fYQ@Uts!&=Q=HAQ/2<鼠Y7"^>R12x,5}cVےh
V,`:EQwDѵrYsNՍ)STy@sǧ+$/5kySpǿij_5'pa>%O?B	F)3,9)Oh}7"Hߒw{Ү(9\J׋"t<Ʊt(.ÝN"bu
Hf a3p344mStL?_CB_ v1rNÒHX^
CC+)#~&+;yL9*V9˄MZ	C,&YjE::a.SR$?kx=70w	/G
!7WUPF]
zSEoGPRJ<?.S~%.JUPiPL2.&~	uT(]\}X>bendaJulȧ]ten$F[" PK   dO\JN.
  K  1   org/mozilla/javascript/NativeJavaTopPackage.classW{2,:H@pIQ6Hk#Jx$d3	uvB
j-QFԶe[Zmk_(JwvY6Ds==̉w9
r[C BPWСBNgu-L՛-f&$nrMlXi7@`~"pTEZɥI3Y:Tg]!if2lrf
(#PyVv:o3S鎻7F
NV[71ےV݆?WmnlS1V`09f:m9P2`<s՝!W`|dfEC&Lyte:glwv\
@DU0	BL\&8Vv)7e-r۹jk]`u'WnӵEq+&T]S1ME:cEGf,7klcv}}X)b)TTTs":fBt:P6О%R{j`@YܭiƼt\2,1cD6<_/q0FjV:̧(nwu٩96H:>ҝۉ[m%	E*Yk_ܝRg!c[c(뗰RװT@cPFY2f3+V+NDlkt,Ǌ,fI82sȢJj4	M Ak1Dc[3|Ru:֣E dM"2zl1)[ig<lV
ײB3al:B^rCX\v:7fSq>*nԑ&zevG{Lf8K^w6e+#ݓb^Nw.j c)s;[УWVl($%|7Y-1.D]#o;nq;v~ter0?G/^2
J'

{Q.mmRq735|Z5|ir$+%	[×(2ݍeSE_!M$5GֶDZdɫTCޱ2v7ZF׉IL٫$3=	iQ"s|qtPuf&c9	3r2䭉-eܵ-[/"<cyxriQQ0)]creeSTosLݘ31]{07'5ǽ~XKW`|
K`l2M33y>
Lob!A䒾L.|mtnZ	Ȯn+VzڜtXU6#oO܁Τf&vIVgV.
ٷ΄lFN7^IDH9ƶ֝t%+SёĄmgco_}̏'sߓ&.NPk(>^K߉6CI;'S~9AN<M+2Q4|e!`:4!R=x6nU2~T]]T{ 9C'*9kH!@zUW(C?C'pT1QZv8Jc7/W:r/y~*PͷK9|AsYTK<RQNuXX7Rfz4EVBF>|oZ!~Ľ'(/0NbX
	)΅OxaZF fD?j} s
%ժaa
Y@5\}e4SNèo1hPʖ(J,?eр8JgVk|y*)	Ǡ4Ԩchj~VC+W=AU`
5khg|2_@sYxbFVj~4r^Va-z<	ڙw9o6zu:'I) gq?B$=*(U%,<eU>z2~A\(ѡ!+
_+0QyhX94;(U`IOїI*v\E*~GNmQ6I\@^s:!ՔJ>':W̪ڼԳ2ql)6Χ2ez򀟂?00Q2)%\OQd8QFQ}#
 _#G~t{6cg~(Y FV|utI~	V>DCF8vߋ>L2Bǰ;x;?)תN=^vWT(^*C/q#"+q3­mV?;ws4c%zhqrNt%3DEr]vMP>{fOu)j{.8Ee"[Tl1Q,%>ٌJO_p9h'OYV{>jG8-O5/lId_$#P#C-Tej%Ar5Qs%g_SSWShMF܁]˻/PK   dO\kh    /   org/mozilla/javascript/Interpreter$DoIfEQ.classTNAvu[J.V-\ĤDk(2n
|5> ^>e<;`ɜ|6?~~`WuDU!0z˶y	}ӳAkzƱ^,),
3DsU
Tqox O&HbPEك`}um\"enj~MaQqБB?NͥʍwV*JaJu\Ƥ4C[nurA)Ddf92߰i']sMnr
M%xlQ*'zԱPbPE[0a߲K_{l(i}EdFb$u?'HCH4Z^nL`ZS!05O]mO=TQISi4ީb^O2*d$c_>34^`t.,ƺ/i7F2[|ꚲ+0X]8C9
 ň2Aڳy\$E&e&%)(I\"9NӋ4tzP!9K
PK   dO\l?  I  7   org/mozilla/javascript/Interpreter$DoValueAndThis.classUYOQ.N
jVJJZ)Ђ&<\0SgQ-_d<Lɜ; 7Q!
aDflݶg_ot-/[<ATr=oxmMu"
2t3Q pxi.:`x0QYSٕ͗^
}H0ҦеQ'4bSv5Ol2[[)$95 kup6_Yx\X]bX9J"9pR5EV}3dpboU70.eĨ}4\uk D5ӇhSv|&aTŶ_UH3Lu`ho}mI'cÐf[3p#LQ1nw}8mv*Qȩ;kߜhύ n
Q;Txeɡq$80$2SliEC&>ܤ
{h<ѐe	G0*[tdJtap7ݿ_{{\.]DWzf8&I%$!Dȍ7>I'OO8}Ɉ<t.|.V"exZ|
udO00b1\:n>a5]#IzdyˁqFcfmbp-HtEhKDPK   dO\vZ:  	  7   org/mozilla/javascript/Interpreter$DoGetElemSuper.classUmwE~M2v
(6XB-}A A&-&-6iv;ԭݸ9?CG';>s_;s 5`#"Eaqw
iYzvW=5~dm%ݖᛎ]tc]5mӿ0l&GC`bAeWoHW'e%t{'+
?,8$C+nYb#88/u}r֜&+%0i710m~ݒ5}aX^r}}l(3xc\e8Cal9tdeefC.
TgB]h8MvW,Հ[/Ma
fex0W[M.Y]a1{;tto)Hsg7В-i
"lܐJm:AniVcK5azQGK+ޞt/d[-U*_5/|_6_*	ũtd+T/R71*=!
WM53	-UћQs$*C Z[G^A:-א˦7Ɏ@f4U7mP;mK7"1n{'91L%=/M>0|@oYht7%z*6}\p@WCeGrvOsQzb;Op"}Wo o&b=%R	)JL9\Gb-Gxh${0wF/Ą!0&j!bECX #B:
Տ14gkױob6Lzju,jS,5igp,s4'/c+e_8OISXXs}`48uTZ&Iַ#32Bw։އPK   dO\T<f    5   org/mozilla/javascript/Interpreter$DoRegBigInt1.classTQOA'T Z䒦bH/.Z\|iGs{Tpx7;;ef06:{q]i~4Nn %mm8<WlזvCHkgvYOc#:Fc(3cefius~.hG\q
cCdd6=RY3iڵni
qDޒ\uzWy.cJ}#Ȱbiڮh:?N>,lsǋIoSu+1J:&rf%z}HLxS9ySvbIaz .CfذjeB"jזH
KS{bM"P/{fn^40]Ȗ&q
y]05ڞ1FnH#q_0slVS|!.W$]!W?,f%WGȳO'H3L6Q̙O-39廄2U%,P	%=8$W"
kxH8K\лR#d11$:Sd~PK   dO\P    4   org/mozilla/javascript/Interpreter$DoRegIndex2.classT]o0=ǲa++eڱ1:xXHUB&UBů	?NBH$kck'Gx"4f<{l1f`@4WpsjW73fvla(P5d1b0L>gH]S=lf0y9
3cE`.8ڕhE,f㺂nb4H{\nLGFȠeE
%w\j/yOz=C%hmacFgΡ۲6lFL.dP[C)?(|$qe5JS-[qrѷQ/	
|n~H7`Po}[&+7UDT,^ 4u^Ronf.Dh(%2QD%觧+k2tؗp.rUP	*q^;rKqjL9<f#*t=%]DcPW,`PtdnXc)7C-6a0sU<>%܁PK   dO\C=n  
  9   org/mozilla/javascript/ScriptRuntime$ThrowTypeError.classVmWE~&!-Д+/mT[|)) mIAo4Y݉^'~_j9w_l(@Bp83ss{繳㟧@8:L0*rڕ_ڎ|oWUzbYʖC]hrb@0Lda%x
a)P0RI[6|/~`lW*.9ߗ>@R[V0@UrWVMcxTʷ5%d^C+dʙ>>qWM\0Qya$<}GjL.2ĸo]Q1-V)4CX1=f~p9`n}慪,o{ې~]܉hL0r
t1Bt[dQHA.ƐpNyRMqǑۢ5l
L8nxo1#1Rz\!w
L\,pΪuRr
*wj"LᯯGT%ԗ=Ts/h
S
"^;TŦBMn{K.m[bVYSي62'OLM-#YJUsiKuGRRl$vZrTπ.fXD('5c#Nt÷MN6\b.G
E,8%J(j|#"PIWdͷļj9Niw%J 1~gA|*@0$ӑޖ<w%NI!=nFeG\^X^Z5shvP۬l}vnԳb+f#Iec{&	{l\AD۪W7í]ZwU}4624*w1Yޣw4~ROSę~ϦcJ}W_0Zݔ:`zu0sM?=X 
85!fx1XO,naZ{,442ql j]:1"X#D0Gzɪ1x	~ R! n}#	g45ʶ>
)g=NS<PU8}OB!ZҮM
tvÅ8/PK   dO\8    0   org/mozilla/javascript/NativeObject$KeySet.classSn@=8;&MϦ8.`	UBDT	vwNqldO*$(H| 
[ĵc Js}sg [f"<C{Hʗq%pUx!veXgXqh0P^aa)c%= R!wՄuSRuֶ2
XDay}Jn+.>M'Npau~jO1ygL9-"qehEDԷP߂#}"|UNro2^E-7t2T	<!	%Bb(&I~ϳzt*͖v:a\Cg<JݡƶsQe<ik1D"x	2R~J%ip(PP40#
hEz7\>A rBeTMiu=X'̰~bh`3\TmdQ{FPH	(j&蠦n%@1t3O1R&$FXXM\aS^KPK   dO\qOX  g  !   org/mozilla/javascript/Slot.classXiw~$3Bݖ%aIJ0xI`Bұ43bf4KK&m!mgiC[h1u[{N@@74},d;wy}3?؏"j2KF`c顑fXe[ֶ3r
	Iw,=\
#-z9*lΘmL
ՠJZ >nx=NT2B5hHZv޼2
h	]k	N=(X/ڿ:6a$i^!׍n*7$7of~v;d,..jhӑ\\],Y5I9j
I	tSC4ش 鵖Sr]!B[2g䰌#:vccIOXw#s)Kۆ5uߥ8ƺ&5:Ű0!tkxTc/wd
hs]=2d*Ǻm!ώ&
GaO@cnM0V
Z3mg亣:~BG qj? mأN	8~Y[[ר:t3S('t<	ʣk~5

xgܗ?mH~UMh$yIp^xZ,Y#5 X#	4O&3ϒc{aށR?R>VJ:.ۑ}te tKWpZT D=u{t=˱Og1+f\Կy(C*(-,MDCvxqASŖ0t<ya]2`mNJLE%՜B>%rc=U/cCgE<v%g}Fyřk|J/:%;_^%pV+ۆpm(l[z\:;5:)bʅ}O
b	RYVx7q)jtj҂g̒}G5(זqAe@y>ը7C;NX09a`d֪:Cfsǫ5VhUHFwV&N͙qH,dG|(xY8'wU^~)|ٷK΄#(սF^I4\0|;DXr/j,0(/ϦyU1Yu~-Z`nX~
RoX &P`l÷p57nuC*ߜUUC{cl[RHOCK
چŊiԧ61\Z,uLVGS|eI$7z%^3{Q\b"1
q
*ǜ'.JH4%P?K46KK-ɳAqH|в!7Ş4q&:ʑHfoiUO/ޙ3&?8*
2qJ$mbdmdN˶~.J z7aba;;p#+°^|F!2ҧCJ͔+S
1 ֏38Wi.i+ԡPBgUx"@a`d	Lwt΀gOeIzz_$ϫ4 u;Mo`}S٨t2;|	y2nF+|:AyehI 1N<	̔	e鐠콆ҥKF7$~
_YT	mU!+۫SrX¤CJ긞8n>"~J-Jyz<xѽ)jTķB>
iV:&Y͠ڿ+6P:T;n0}38>yOsu.o@C@)y3)|5Ųgc3U}7F'$ˡM^v_../R~Y	a|וh>sԇCЫ
d=QCGؤܿYleP":d/VlZEaz3C}b*QP{?^bDuSm#(
oPK   dO\F    &   org/mozilla/javascript/Undefined.classTMOQ=32JAA򡖢%
$1	LI`pc;uB`D3Z
6N2s߻sϹwg-Lh@	BфfUcHYz\XEyҴMA.  4bZsL2R]sO-%´y!dڞoEg!upѣD.D#懆2eS8ͧ3O?<_Mfr3KM3⬎/Mk2KMSO;%@s&Aujd\CL,s4,sK袌.q3{1C9#/V7~ďojEU{sw*DS$h_uF)rQcm2=Y7
U6,T*F#c/RMVE:jZ)E>kp-sRd9(ms7m=@
}8H@bhi'l"Ked`;:&3K+$YF+Up
Vw|;\UkqtT ;@[T?AUɫ1%SO%$VW%5=:nֹ}L[ZgYɦQ+.{Sp),4p)Y0p}!HзC5)!L~hYvK[Trwr%.4PK   dO\x3w  :  /   org/mozilla/javascript/JSCode$NullBuilder.classN@ϔB)(*53B$D
eǔL[}*]|(m	`͹K#P D|z冡埴g>pwՏ]ntu*q;e@6Rf-1閽CMۺhjm*ь&egw(2$gI/1buL*l{kL6jLqmu?*6|Ush//`劎^ѡbu۹lGCz!!vkmt6S(OEVW4xNI !Bblh ]#]I6IXW$6:bIX҈-ȣl;&k
KYRVPK   dO\ۄK    .   org/mozilla/javascript/Node$NodeIterator.class}S]oU=$$4_n@Lڦ.
uFvnm׻f}^oZSJ
$^?*6T=wϝ93gf_;QcQ1ThxێcZVM]({*#Z|°ۭ;ҀF701
cGCULa$D81a igf 5(ݯDī&&%"ձ LW
X@/oi31/p<@lk\v^tTC&2$^ox3(UazqԑT9	=K׭VtY@oKWSR}=Z폀'ܕ+0<,gi"X-`-Jq굨>g
7Q]Un7߳#[-!5#g3yv{[Ps]-s-;  jvff:$K2ebnR|١r/66b9-[
"nj^5]W[<bfR\⑍;ozHA`3W $;v|~?cg`i8ⴃ$bb*&|M 8IF'q
_R`(gFDL	2`6!@5u
~&|b9=å]%:X;+Ğa͓08W0kL}L7%@rʉ&
b;zKqzO!P}I9	7}Li:X
;rq9u-==Ց <9X"WMj.}Q'}&훡B8XW=9ߏ1B(-|8>c`_9PK   dO\              org/mozilla/javascript/dtoa/ PK   dO\R    .   org/mozilla/javascript/dtoa/Decimal$Mode.classSkOP~ѭLp0T#dcF%]k~'	$B4>9VE0flYy/{ \CF齳go}m<]v;[޾j .m)V2NB f .zׅRTEݤ=Qw
WEBC>$us-~3]Fwh
1DI(&upĝU~ðh^b9Z6/WR?e.Frk+ufCTS1øX0ko*hVܳ*sȳN7),zuԸoPUuyk-+8O9 ^.>Q3]՝pe+u
U+^ۯ[hsFUJV+x
ĦZ_Qhu~zaj q8gDɞ8M5F(>	@%c?iDdI90+ߤ3idgD]rtPcBP̌a?J)R<B@f%e.3
GJC#E*'P*	bb.Cgb%)g
ETihxx
L~:a?4'x*q2}:PK   dO\tF
    )   org/mozilla/javascript/dtoa/Decimal.classX{pT}r.1d$hA5<BR +lͅnlبm/iGlSJdjX>im;v;N;u:ZPsۼr!ã/~ ސ
9:+m6kd
ÙT* /f\C"7p<!
^׮6yXa>tMXI+7* qD̃#b)	.A	i3YL(Gԏ

X"$x߾cS_uv2N
lxuݳ7Kj4,nRf:2YL:¥C@Izlxnmof3SUXGX%LrVwC{S䪕#F)3/

qV	]~_3c)#rfzrկ:wXa6PZ"
rH+ɭB-^oKa|GFtBV]R:5tj8$v߻@/{4lE6{LYIk$2^
Ifz$lp-mV
vj	&>:jfsV&=n	Thyf86gڲn)|=.+'8yy0$oSq>*Oi؏c>odqI{ ֐2ZʹICVve8'k8ǁ9}$/11MTS1Lq[q;m)b%P0Gp`scSNϦޫw7m5OSc`Ϧ۶lԩdvum'hm
VULHD3x֒{Гny3AyuX)ry 0D_0EfpO|V&dϳ%SͺCaIfֺBZ1?WLͬєAv v/?{=`8J 	\0,ߎ\GdKV޳zLlòNqܪbŞ/x [rEEg30N+qr;)+pM0L.	4ӥHf4R
Ği,r4yylǓ7b3[bϠ,jg|\WE;r+HjZ	Wi.-ڳJ/eReN6J}%h2#x$x8F˧^O%W3Fil3$}.{JgH\Ҷ)mI2sNl$PnT?\h2ڰ턧
lk_`q|0&VuIEū	)o@P>ń~2.j.>p9n/>G'q/ sJ\;|ϳQ.<zeyy5ŰZ3vG1y,>R,:chz@2CM+&`"M~qob
} iMÚžCU0M9}Z!>D4V@Me	|8X>@\|ͬ諃O
{.	VS#PTrD8bjo5nuPi:P]G5Ha=B p0I8/*|k5l׉7>|?<ɜ"O0fqP`k<<<<<i|*(W?'Ekf`IU-NwX7y
Dw~L_I {	Sv	,XlfiJ7Po-K28ζ8ζ8ζ8ζJBp "fH\rwRfJ7<>yjCG>
+Fmi|3~
_W+|q~+#X(V-pjujujuj-|2\84iUyOb3>?彟Az/*****@m=PC8\7/x6_W:K_%N[I1>Q$kzfŎbeP!$g%ۀƤ
	,CCMiw;n&f
X̲ޤcoQ?_̆P;pz@`8js)9c>
|N/J,XQ?o;C(v!&3#,P9DsN٠^	eP
{2nYPb]TO!,$^sZ\WqpQxVA&h%t0vv2$B~(u^w63M]m5pygUf`#+-,T*KObQ,;ՆlgQ!ϊG9c:<qX͢
EM ak-e56ҭ&5{PEovHaQ[cD8ٻՖ[z\}et}#X^ ԑ];o3eKcl0=aPCq'*7s
qz 6<|.{"?j4/#K-ePK   dO\bM
	    2   org/mozilla/javascript/dtoa/DecimalFormatter.classXi{~G5< ca#bH	 l	A,k\i4I!)4$4!@Қ6]B><{gF9sy{νz5 2<
J<
i5j{LKn6KpGR(VTÀqRO4fC4Ԇ6-#;0V崬\S{ZR@eFcNy*Ihs%TM赌mfl s`dGOuf~pܗG
xFB,4{;wtwuZg)%TAIX24Y=^rX`%V1	N#}rz*&n7'Y	s5ar6NBhbFXk52ve`6JPm3Ize*okw޻Lסaf	hl:X	ѶxQ
Z&$PyY81!P!fcl
b
^vi42ZXvVEiz$۶}!COn{Mvcv:7oD '{>➋{W%2vtVx8BCvrӭc"e	I6zѢ'CWpLd18U\OkW֚V0P5bPfT3fNB]-*cVtRc3̉	+«F2IA'
;|8!fXyJژoHeѲFj43r5
,	+4K%]\@B8O }jŴiky˸@B^k=Lj9=%=jsV0Ζ;bD5I5tV;֕ղݪuU
rxŷ#}:MI?ҚNm@c1koMhVM.h)ԇD3\Ueb$ߩ:1NK(5c͏H`B7|TsT6kr@ķ)v-=F>:tIh*R=V0@uS3d·{rT 2~'Js	.!_s<YG(ƷdZ
??d->1Q?4IdVDN
H)LFZluZ%,2,aUL[\.>e+H}~5-]RmKuO%qOV5|o?؋4èY(}9"0r
eUAŷ8}t
gwsO)] kV<MwѼr!n>d<9!9RsnóVAP0)uf>6[x<i,Ƹ
!sp@}LVZw>ZZcȝFY{k*!ʔ-җ%GVQq+TQ-a9<
*\/_]l``OPFr{Lvp*l+	*!6yheqAӇ#u!uX0"X9hDFw'ܘ {u?um*ȫF_H!910%0lXoR?(_P=\G9x#9<qc^$[ElEڈOK9mNv OOgI$%_&D@b-s$Ce?5GF(d8'+tZ-RS|`cb[`>GQ?gF%旽(?f%ڼ:)~)[LCMIԍ%5è&"WPG?=q0TR=r_fUkB%L[q^~'ᵰWX<b$x	+W+87ݘgqsEgcjol4]0!qj ?xzXܼܞoG?c`Ғ5rqOܸE`m+K%/_R#(1Kd$(-c.E#׋=LF7r$(L8T:O3`Ià&ZVت\?fv=z=.Ex?.	e|O8g,JnVbd)2a6GX)`$Cʝs5#wȽ9R}Y4Uf+{..伋B־Fw,oZg1蒾lVgg:+$`vNMdwXᯬ_ط.pr	~
PK   dO\@pB  U  +   org/mozilla/javascript/dtoa/MathUtils.classe\k	PLPDFAiELD.1NBy}of`߇03XT;cx`d,e`2aIIV,6T`䌂ȴSb%L0IeB4+&3itIlvFGTvb@vRj茼,Å]O	9&7 W-w@nJ&3@.?s⟃^k{PV:G=\^O8ŧ@9=xqm*9P|Rg-sן(ޒq\^,x)=2f5e_T-_X
Z*Z	 ֩*&okx7!`snvul`H(oetu+4ɗ_V7	||Zb+ӜwXj~}1QrH8Eǰ0[:a4>񀾇.kl&g?=R S&e
_xR>-LKUgs?`74oB-KKB0s|]c[iE݋@q[~\cތou!e|knWciyApQE 8t8rhV:{doXne|>V*~sl'A
1ׇ-
ٌq`w8E'1̹2#t2҃-]0D΀]y#a@'ca_.n0QwuMk
خR t$IN{3/&Znwf|x U#קן#[NJ큁l2Lfuw byЧ ~B.P c_tRn|#;T6H(T}:?<_O/k׳qh[ύU`7bW)@ f eθ#koD]?:4nzwok=3ƬKKfH76O_=@OA=1&&5}|Aq}v
AuWn˿諝
4
#Wu[%$Blǿs--PUx#(رdh|Q	vխRain"xtV	|~p
Ȭ|:4{
zvnI#.e^DXb6~>d඿T;gdL-`>supb`ԫ~9#o9z3}3?-[f9u){=ZM}I	}?No>b+ÕJA8aRW nҚnCjfع>6zw?= A>hJq.$ogTBRUG߈C`A
ڦa`lK0гB?ѹ[<omQp])_}iKi#?=qNWl3"g\,Zmc?؜WaЀQwB緮ipLޝ =Q\ z%Ap̼Ϝ~n&ߚ{զ\3FrYj|b{ҏ-W!t	;-}3Fo>S
JG
5x9w8uDuv3kt!!ԱZsnқg*L9	V>蔫.Rjy-
"ʃ?ձ#g},ø_T{} ڹ	%VVk
|/̨\&\8zůB`ķlB|@ײgo{newGS:iacatNe҇w#<fٗi^W07|< bnmI3_QqB~r&R9yrZ%r=rtLQjRU1Wk$/U0Ȟ	Cb¨!wo-
s@37 \!WʐkUm{+wntAhY7LٸS_a`~^Up*[ [>{i.m`Ԭ=B㼊\m_%>	g^/IirT)L!hmy RۭiS-E]ӻܯc|QmE>ʷ@g-*q?ڠ#qmX{/8nZIw
x-lk *O^_Х+Pc(Z<[l	e+!^5e0_p/`LxZ>*v2_Lq`ۯbFE4eJ.H+1e`uO B%W>+qkgeɻwY2k,{R`>'!<W7zJ]k@R?C4
#?/C>0vc"SD>~੷<[p.,4\oeO=t-6SJ>R۽x3}
NW,jyЉ!>>@ŚsjYNIE.r	5CN<{\/ᐳOIlvHg7 'D0k:?Ĵ]p"o/p
}<淋p[`Rz/ѴK{¨gWI_h6M[.cë->
^; z[@%.Bt(JuZl}09tdY([iZT~*ġs݅ 2=O}O%Ŏб>a.uͻ*'oU aRpߺkOl3tOQGmyUIm.ڥ-j㸧#-~̓mKIu՗ujvӪѼVV
RgY{^YQ&CxUnC6\TښmU|@-uGmYd_J{z{xV<
ݾhV'pzsۗGV`Ş5&/փeE<*z/9I:hă&0<0p@sK=+ź9!bɕ ܢPU'3 *>8p]b<r_szʢ / \:O/^{ԧK7a~	\p\Z.ƙ͉q:"v\ai(D)4/2?rQ	چԦ@QIwn+8ٽg:[?u3^OlbޚS2
a篦{j%[vB߀A@fMu}}N _6񵤫Y0N:LNUչ5CdН:ȒE>3\y6ˠ
#ݦ`Kxʒ4H%^l}mvդGy4t&-]儯!]yk͌!\׻j=RΪ5shWig_zi,c
8FW<}9Ze5}7\wě,n_cZA! +if\H2Z!8O"s^ǲOg
w[{Bk	݆Aww{T}'C=?|n_6nNT0 j7YUׁi'/{˥K?z{
xdm۾wE3
8<&\
NgKWq\P1=Rt&^<Ruxy|l|;u'opQ(|2¾27Mn\:&d|>~|56\ȫY9qqXof&AKLBG͆S:?_~
e* j9KymOI 9c_ܠSF'}_k6j%|}Ev}A&ơKHcZ͔8~q+0r7G
9l~5
N[ 07صfd]v/v;:fbOhYг@_)8e4\+32yt0pw
g::qR^]p1[i;hy)*nւvԀn9 מ.n+JR7 yr3!A볣/@~?!Q^El5g٤57:1䧫3Cf5f-Z;dPyms𜽡yTp:t"]f=}X
	&`JoՎcAs^xj {YN,;[͙ίA'VTuL@U-hj<T
<
w
כ3k7,..[@.QlLuR"\}ܷ*$ni֔8Ly6>M	0ݛ
!$񥂰$Htۂ6S;--M-?<zpNZcCz!ȶYw'v\Af厱@\hho\!u!1az1߰a~7릯}:zuIF	8grTVIq>GdCˍfO+à}:a^un}2
t߹p¼Vw wWcWId^ms7ɩۋ\h_Sd4}}3ߋ5m*1oģgy> jX&I1MFemk ^-`|΍%uOAQZw@LI~c)swGkӢEԺuέ;AQꏪ`jU%>3)۬7+SJ]@JyMS,^{ݪ
dHLذ9#
iuu57WWmܵ'r_G%!eg߀̡ju.wZC94F$bاZj~_?MYHGW7B{~pғ,\|znA,8xeRFwq9,ߣ̰0Zg.K@۳ʯ++g=yk80`uDJ[1ݞ́Є6ٌt%ɓ&߀+.y/&&x Z3Z+9s6Q\Ff#?wv]S_7K!OZWz%?r ?QnßN)
'^Pv^wwJmƶOĿWW̙`dm5!a+t~
4=2)WMk\^]^;U\I;自|_{VSjM;[oHz{y"U2ͨ:tf 5eQ<џa!dg WZJjЎ>"pR~`2혝
*8e-?NI»YC\'kpw18Dm?Q2?9|^O; zf6~%k0\j cv//kl17z]WvV;# :ݟ|sy$ptU=D'Nq-g֙6S\/TV&kVJ]>%D|} 5N0˟i'MI9W1"^ؿ>
mT,ɁK7
1iCzTu3M}b *G
V]1߶ ˵>2Sܹ\/Z/zN!=6heaur.Er
xm]3׷Z%gøϝADT3>6ro`v,O'Z']Q.04 <l_ar|C*(8ow35z3xi<bxoAcщk"#z\
'LAt˦5K*jBj	/T/O7;vDQ׃usp㠫Şg	VׇCI|Ɔ/&WAAߔC{rb6Wm0	YwK<zayF.ڵB<~6. {v}-A¿.'r<)q{T#;9Oߜ<V"Āke1٥!]nAs?Q*}pS=MnX-2њ+O	Bd{m}*}2},s!vL۟M=nVn	ٯ|?&$WWLgY::j;ʴzFG =&ORy_>,8󗭍gzqRcLaV0n!ϙ܄+
A4&o }6|kP<s>r6
EK@ 6؝0dTii	KBgN=۶m
N[w	_?}[[w姇WcN@'M|-l[GOMJB_Hj	:co&B.'U/W?_6Uv[r\s;,!/ 5xbSyJW%EC~yγ/?>rFq58>ٴ5]Ԡ$}U`5T'Ԫr>w؍N6Ʀi)%;!YK<#{O5}KGPÓ4M 31wQ}ݻ:+!tsQQo9}L!.gy47_xive)3
Ovr(YH?ϻw²'?!z!W:

jn	"=g<Q
<&)CYBcM,jwx'-A7IóO &Sek!ֿ^黭au>7sۄ{Qc'"`fQ_C\S>˽U}>#Jۜtٺ≆`c;Vbv ƔCиeܿt7]7 ۣϲ\@]CU^sv$7T;A0zR$kYss>-}hm96.?i,F`Ylyy$(;s䦳m2FuhfRUp.Ok_߷mm}BW>kN ?kw]@dN^>Uqi{6kEep\bG\~{b-9iAZ1EwZ%wG~6'-XnlO;'hoDsﮖ.QfmOXb+ڀf<Y
-oL{[te>{nZ5rYSy+r@g,PKyoG@k@C!~QΨ2C=iu1xsLSG&}w#`=/~=޵[vndke:\sYqѡ໶}"0puhE$*-.EH:4lqa{}]࿲ &Be)r
>.F;eXtW!tsUj`ۿ|d
L4^o7="2K߶ڹ `!ýoG/:A:3wcJJ~P
?C;AHӍkE;Npީn,
=ts ;e~=Fn|$Stp3ӿ@lՠС i;w
ɦ[4vhyWG
8(lR8"t<!7~P Ao+Bbҕrqo@"ŇF@6e黠iߧ_uSjff;å{)VmXb2<#
y^U}=K(qg˹Pts}P4>qa]Mw*}qc
mll{vXY>a_=
GWns21-j5v=%Ou`{bŉCuaRb͋bgzqhF0?qh\
1sجvaYoxt>AynҺ  u]!qB+;/%z$MGl
Fۦ9N8>ttF{U]k]CnϹǨtP5ѸmoO8mO.vv[WH˖[Rs§ҤZԨ@=g_@pxD)ͼt!G}ZpW%_#-IIGLM ]N{CЪsw:tLɂs狯kjqa0򞕒,
>9j1,pW~W17=PU?=stҘE*(aQ={\)iyB>[anࣸmyDmH7JK?jx cjjz@Bsϻ[CQzxw߶iOj5mlr˘.+`F5_-1[%2:gg4Nrŧ00n\H=6Oi%Ι58.FBuCL@Vk}}*kޫn_?A0[8qH <mmGPpr9^sjC͐~UК8U.=pgqiTkр79>xV<:qVk6d7$T:o=͂]oiecv^30Pc~IfB#vwQuCZkU}ɥ?pV7?'
ߔ\|#l%?rW~8Xޯ*}
ۊy1o
+Yۊ	IAVg9Gҗ6oدao,=}z:fxƠ_c*κs5mxzZ}k62W]0Ւ	g!i3ޥ{[΍év!	3.FK
r1԰ xū;vuwvcVpXWZBHQc=P0l^Buhϯ`u[p\VY!+ ɷ}mC=~WDN/?2kpv\ӽx2߭]podm{wtF&>ol5m$FT*Si,c&\aS$Y\Q":DL8nvqAvx7=j05lÚOY䮝ڶu-"!Xcw?Ҭ0~BǘQ`z,}kLP߱ xM(hwT(2niqGޥ7j4>q7فOMB:FOaX#e;pG6$)4%}lPˠbސ`jB9V~>|hlf
$W<o^65XYq}wn9}fܱZ0jrG`P{؄)(v
 mĎg{$]Da Є; k&v|3ڝ\BB˧=.Z@Ԍ3ʞ+nM=dvqu7C/-Xx82ʲ۫Ż`{OtixY:<Ӓ#Fg[l^ۓk
7
+wv5@޹ֈ^'A# AO0څ+Cz#NIGO }+CsK x2Exa]{n8ݸ.}>&|.V*~}5P
bO]Wh	zfَY]>ɫZA?}XGTq]6פm3$Fawvփ38+6\͘

98-=ۣ키͕a,m4[{iOeG:;8dyV:Q9hl4< ouzT_6yN;3u9n[{juyNyܲ!hٓ6V\dNUh4j YY_7Ύ)F~zd80ZԭpV
_)픶<:6? IK=%d
\T٩'#@+7MYF6g^rhrJ6i'qg?oH#5կe dqIu w_sZǨ{
t8~m0u[\2kyꄧ.ׄ65woex̋zF#g?>Фҗ4	fzª+[&6(FBZ[##{8^»X"=\<YuaeԜ8ϟߵ_&gZ2OdSrl(E_e]CzDHvfU2bX{RzgNZt\TttE=#&*50*3sQNLb^_k)AoCS33{]^Ňɉ̎@_?7_G
9bRv~91qISɻĘ2r>vL
Va#`Moη|_;J9gwwK{r5FtC~Y*yIW:3a~EoAO^T'+op76nE^&͈:&;[I
5
@F/Sԙra-uo1[{dGom6GD-Ibbӗ)f4t~
_PR8=C0e߻矨A:7RUUyhy2ext#*]*E]tdCEdHQBed c*=2fRT1 =&\!OGf}}0|+|k|ۿϷ|ǿw|׿w|Ͽ|߿)ȄI@&B
"3J&2RL$JLdRtB&]JgdFKE&S2R ++2R!3NJwdKLLd)LRz#3S!2R 3G2Ef~,bb)&ȔJ1ELJdK1C\ dVI1GfTHz)(e2EfdKDR0dGf+dJ>)b!)JC{dIq@N#2'8!sZ32g S/)n\e)\5)^ܐ-)>4IE?dKG桔 dK	D橔<)ȼ)ȼ)ȴH@泔HdJ7)Q/)1,#%YNJ<deRKIBVdU"*%
Yu)Ȣd%}AV򧚉P5Y"0Y"0Y"0Y"0Y"0Y"p,D8dd%%LDv$d-H'#;t
VS&-tdIg H:YgYȺ#N:YO9zE֗t
$]li	!
#]lbdG.A6XҥƓ!HdȦ@6Ѥ+$]l6jdsI OqȎ']l!zd'n@v2FdnBv:fdgnAt+sH!;t;Hw Ť;-%BtIw#[NU{]CZl>dדGv#d7Dv+!d [IZladwAv/QdC qd![Kz#'=Fz
:Ȟ$=iҳȞ%=l=i=
瑽Hڀe^!5K -FdH {*I!:Io &Io!6H}Czww@z~&}W҇~#}"}oҧ1ϐH#'6#'#}%rH_!D97ȩENrH9-u irI?!G_N~C7w@/OI!gJچoI Gr?"Gr?#Gr?9#Y9r?϶Cg#Y%V9UAg#Gr?j Gj"GZ6r?9 G#.r?vAg"Gݐ#l'r? G#!r?95Bg"G#Yc95Eg#Gf 9Bg#GC#١r?kCg#GV9⟵Agm#Y;9u@g#Y'9uAg]#Y79@g=#Y/9Ag}#Y?9
@g#ّlr?φ Glr?F G(6
9⟍Fgc#X6y⟍Gg'D6	jl2?<Ϧ"Oil:?<ώFg Ol?< Ol?<ώEg!Oxv?[<!OOD<?y
TiSӑg OD<_<?y\yS O O/D_<y	)R2eSˑW O#OD_<y
Z
uS둧7 OoD߄<yVmSۑw OW"ODB߅<y^j}S OD?<_<_<yQcSǑ됧O OD?<yYsSS瑧/ O_D<yy
UkSבo OD<y	y]{S O?D<y	Sg(PQQ_@D
[w(PQ?@DoA
WVo(PQ@D߆
?Ǡ@s,
?ǡ@s<
?'@sP 9⟓@s
(\;NSBQ 9=
?ϩ@s(
?(&
?i@sP (
?	@sz(\+
?
@z@s(
?@s}P 9#/
?3FLP 9S?
?g
@Q ( n0
?7Y@s(0n8
?gύ@Q 9⟳CQ 9sBQ 9sCQ 9BQ 9#8
p,HzY.@vga(uY
d#Hz6
\=FCbQ ѳxvp	, \=KFBRQ k¥ѳtȦpl4
dY1,/\=FCrpy,,7C гd}	lWD&"NOF {MgS*qtMz6,7#f# "!# JNqNqNqNqKNqdd2S2SrS
StV"НZ@wj5ݩ5t"Н@;zSNmD;	fS[NmE;
vS;NU"Нډ@w
.SNA;T5ݩ}t#Н:@w ݩCtjN"Н:@wݩt!Н:@w	S'NB;uSgNC;U@w<ݩSN]D;u	eSt Н@wݩtn Н@wݩtNA;u=SN=@;#SN=A;3SN5#Нz@w%ݩWt^#Нz@w-ݩwt#Ѕ@#]G}FW;tq!Э@WݗtY~!MiCk <2<2<2<22<e(#(#QFW@Yʈ^e?2WFϫۣUQFj(#yuʈQF(#y-6ʈʈ#ʈ^e?	e?e?2CwAwEwCwG@D료
PFPFQF(#>(#y#|_|?1ʈe?o227C@ϛ燠燢-PF(#a(#(#y+5ʈe?o2⟷CۣPF(#y'3ʈe?2wCϻ=PF(#y/7ʈe?2CPF(#(# |0ʈ>e?2Cχ#PF(#Q(#(|4ʈ>e?2⟏CǣPF(#$|2ʈ>e?2OCϧ3PFQFcPF(#,|6ʈ>e?2C磌ǢǡPFQFPF(#"QQ'HOF"?Et(R3QgHHF"?E|(R%(RQH/F_"_"EEr(R(R+QWHF_"EEz
(RQ7HoF߂"Ev(R(R;QPwHF߃"EE~(RQHנHעHF?"Eq:(R'QOHF?"E=y(RQ/H_FoD"Eu(R7QoHFoB"E}(RQH?F"Esf(R/Q_HF"E{(RQ[P?HF"EEw(R?QHHF"/0('Ŀxr_ Ŀ ('B;"ʉA	Ŀr_PA9/G9/PN('
4QNZ('mBBGʉʉ3ʉAĿr_r_r_r_r_r_r_G9/zzQN}PNF('('~('c	ʉĿĿ`r_r_0G9/D9/B9/F9/A9/E9/X,QNPNQNV('('k
ʉĿ`r_G9/8QNN('gʉĿr_pG9/x<QN^('oʉĿr_G9/QNC;Y0<gq>[;d)!$d2dL(T;|w۽sMdddEdd%ddedddfGY,,FXEXMXCXKXGh''t?6?6?6?:[[;;]ddn A>d"? C#?(c#?$SFYd#?/!
dW_C?0o  G?@(G#Sdϐ#@d/BdoCdO"B?   5f$8?L]eҟ?PK   dO\*	    1   org/mozilla/javascript/dtoa/DoubleFormatter.classWktTWNΝGnd%LQHx%fj!$ 3I00I'wB6-TkB֥.]K},Z#V(;g&d ̚9g}g?_x QA@=h7tos{&וJx	d{2ǒ,5~l8:<x
ÉnG@ N:
v!`(C@U2#>ڑIM:Zc{S܍q"( Zp!d%Pd>;O	kcMw9ʏjL l>̺9^'&ӽƦ U^1NӋjeC^-`}`1϶Y'I'l&Qi4ЄyX/'&[',f3|x@}deA0^wXHqRp~cLS Dbkbw3vt)0]ҟ9DkICI+Ρl"5gg-T:2A(Kh`q
lD@Iv؜*0m5
Yl_%)zG{@der_.$SCdݍp~@XǊm)"@I$Nn@mDb,Xig%\p9D)ݺS5>~<Ӻ#ߐYWvQ#;b{h%i*mR_VZپb8w(r,eZ2=2d:љJdwH;2vjMJ ԜCI\Y%`S䯝fԁ!xƔt=41{G6jY8þf+AUD77g:k;A!q/n\2'PɕIw,GAJClPB ''_ΒͣDuPlHcjt
{&NOnK"#fpzsHa$"SE|t!_?B>[wGz/"?T4~
L%WyWR=VWfk8NJlazo3ֆ*ZC`ىӕ_@|gF+/5X2]Jk/5μo"ѩ<GW\i=yӰ<mc/0Vbh25>+7	sIR-:Q
,4QzE%|7
.!f"0玢-sQO7yb|eIT}X@xLo;Ҥ.)
Q@)^Q>VxyIW];t-6+CXp*q4z`̴<~<|>dyX[c\
Z.cq{KeF0Gi<TyV4$KEQPД&|K8lc'0f_sff"u1dQX4-UzO9|8es<͌ha5ue"LY(IcIj)Z:Xye|Bu1m3|䳮mfXid]sʎzZf#ĉ?<OFtmapư@4nS4`[K7ˆư%T-ptV[!8s],waw2h2OV=tEx\:=֤ެ3>Y6n^+-i՘Z~f檋H뷛5ksUjjiq(ZVֆ:7,d7J.7,nilr;5T
GZ?
I@wy0X ~Ixpz;mg\_hZCtxB疝G=Kk~Уh۠eaZ92| z-sArD%gԉ-)s)JR.P&,3*ыX!Z
lxT-ưT 
/
"'xTs,fCF#R*7KHeRC{pT-[(ǈmrhQ`NPBh3wVpqnuLӊWbD-"qܕ|u$N~Yp@+t|gwX\e%^giɨ.-va-#-`o?S߼/*o&#?tM8@ͅq%/
p,w,EzX*	%̼܈egsuF5qZ]%$yM
PK   dO\`^mf  6  <   org/mozilla/javascript/PolicySecurityController$Loader.classSQOA--="ETVN(I$ᅧ]w௒D12nKnggg?x)sAa?n,C%c
Qx{o
Ő]L6<^-1|1#r'9d'qw@ǍY=
Ps\5E#:T >ﲶzf_835;v53/l$Jp߫2E7Pb4>2CeH["'yz{gPoA@<J}ϙIKҼ8j4W"L&eM%9!ot	gHo2!w~
*W(_q[A'&zVw0Ξ%0#u'9<epq"tCG_Pyn1KW5GoEis*WNhm2*h7
5{-M1C5RMWϜ/ȝ>Cd]@.ox1g1J=]ZSɩb-}I7zGbHmX!R!`ɬ.\˰~PK   dO\y<    '   org/mozilla/javascript/StackStyle.classTmOP~]/
&lL:B "IaSJŮ5]GI2!
Qs/Pn{|`e1a?{u⮹g6yд;N!!$C
è_Z
)Γ7*/u}.iиO|5!ݱ<7hȡce0*z+KU\z-l|A焢kzbek׶Buq
8XZ
Jg-򚡔?^qf|a3p?a#sEEz RC
R
4n4Lb@Td:ň4xfe-<s)БvN-ӭÕ"g6l~vA!a;3xYC2gRPYhT?AuN5V`k+sv8)K34~zK}|TZ~<ocxw!?'t#YtO3zQEDBUsl}`<>[]k'Q=</9>P HBlP"'qsJ2eNFJ/	lVTB\4(ImHF-ކlmf-FڸإBH$_H!7*b 0nŅ!c<!UIa?@v4A/HEfy<'PK   dO\(0    :   org/mozilla/javascript/Interpreter$InterpreterResult.classMK@ihqAR!+o+iRv7
+Oț8
{ݙwy}~p -8>ڄR_A幈oŝ0V3+LK[Ya%}
eO	Gp9}!M[;(دBt"|%e&Ъο.]{0ϰcB0*+3U*kB'ƞO!âzciww>o>38v@,Z8ް:,`.1,7U]Xz}| PK   dO\šX  !  1   org/mozilla/javascript/Parser$ConditionData.class}QMK1}ٮv~=(BR{
-IA /?Hz@e^f3O A΃`
yڐ0Ux0d"!Cns번 %۩
G魌cT)96WZF;M4938uF%@
8b!ɵ	[ҁgpۄծLDo2u11n+i/5R3[T?O'*j>vmC'9I°.CI1ZPAph95LniNv=uZ1| k:)`lJ/pW7|`Y,zK.cЧ PK   dO\d,Vc    5   org/mozilla/javascript/Interpreter$DoRegString1.classTQOAg)EER"jKM>XCbxq9zkH#?JkHfwgٙݟ ב8ÚuCexq4^4/)-i7-ǒ[nHjHm{㇂!apJID2:e(F3cH[Hr/MZask;0A͆{@c{O,븁YLLb4qGy"w$Dː=y#KQ!=ٲot̇qƢV#/?uM
6\zΈ}8(fm>TRyS۵r$_Pn!q)vZJ@D|R:Og+ӗ<9rK3gW
8zs("<=J7F?=K`K3&}QmdX YP=EP&#\P&Yz$_c}>O#FePZ5g	w	eKP1%,$W*py#7HCR#<c: PK   dO\Jn    9   org/mozilla/javascript/ES6Generator$YieldStarResult.classQM/CQ=ӯV)E}Xx4!Qiby[7uyO_$DbQbk`!63gΝ9s2f! C)':mCHm(_MBTnfFA6ˁg<ѰչqҗZ@)72zVQA}:a-7	jp,	^%hyҪm5V	sBJD#͇ݱR7FmYSvWEMHq0EBng\DJK|q`c !j\l	TYxs9!΃WH52ta抽n DȪQ5]ΖIV}ʥ,ILo$ٗc<*b"ʓ$g0PK   dO\U    D   org/mozilla/javascript/NativeArrayIterator$ARRAY_ITERATOR_TYPE.classTmOP~֭[-2&((E-d9:,~ QGIך#O$(ת(ĘM{o~CT\io-=;Mzg*ܷ͂7%z3j*ՊBmUkl`PtDePZT4X6#.hgņ!t/uQ Tz懏R1:&p*]l;)vc*uL
Ptmҵa%u*{N=ieOWJU\sck#t=F#!.^o鸍Y1)ðJ=RNYwwh4e1+M9N&ܳD)Ȑxn&(f"V~ףp*]kC_kE3ܮ4XB9tT̎*1e8'wXsic@ɏc&&ęS4YӄzK'H'3*:yd2jI6w0#|(aF%;JaIH&T'0y&D)$!DRBG"h)E46Jшh}, y&paiL+Pq3"
38řt_,+eH|@ix,g^E6?PK   dO\)H
    5   org/mozilla/javascript/PolicySecurityController.classYyxTL2oɈ`AԠ85b(RR)XxyILM߼ V[֭]\ VZ}_n߽ofh>9,sνS/z4(CPq{ΞD2iw;͌&^ݶ݄7<I&mW ؜H%hm#[nt-[.P_DF'&PSl5ѶojS$To%if2mٝ|5vꘉ*
8M`~!+-drm7nbg"iG9\iy	'T;yW
4S|#49.1й"-e{9,
s'fr;sK$tSX1	trHhmU`J!&;i@İH`FDna9AnY=c<NCM/0ǅ̚^R+  Vy|ٵ{N];e:q|hA	
4,bԒݢSE:IbY?'qRM2_.xf^۲2RSTzu}Q](R2
\5(#(N:#:kxyHRHTm%Ms]=Σc-bfl9ypg(%+{ u
t*R
đ⛮{߮)El9!،5tx0'u`s^Xa%l3ial3o^6'>22JBv`	T4)5={ez.+ DVj;C(!(e0Ƴzs'$]"c+R2s	hllՐgtA('kj 4F[O6)r!R"k
N~3:;^J
#̃ڶn`g&`4fo@ϑN]@UnӪ{mufO-lwxd7`1*exB&;cD%[X1)#\~$76lksM/բLٖHnt@a4݄],Lnp5,0%׫3RmndW}K2Ϟ\'կ\u!iWGw8
v6fӑ9E'9i[X=2&drlH^{y;msz1[tG73	ݼMs3?!T7UnI.,V֣gOt3&'\6ent"t{xp8K/3s fU~DyuE݁!$*5|Nj5'@
'
5|,p	gqhggm't8k,x6/
_34w5娆Fd­3Kd{'*1J
v2ٖUe<a2Upf?}gL?a	٩C3mgu
9:۔[cZQ1ze^gvqSenK˩yk'Mttgy;$j_{f
nȒOӅ&^k*M,
N#sB&hiEI6g% #&gsE6]!\sF +ų.>
 =ރJ2/2ھ	@}\{?>38V.hPyTrTqLYrA|HmV#f7iਜ&%mvecJiG1_F H|wtJ3h1QC$tq~ Gm,GcpHyD;%o4"øF=?Q,h`z-yGQG Zؼh#pBmZ1Ry8/^)Eش>K,25{kiA5*gm,>&܇9A	X$Vw
/HE2Hҙ-q
2۱wܥ/8ZA뤛OS|v}HJ0[a<TGq=*>
r gej\yh}3cnav 7_σ|t:rmT"tά0_ãpDտ cSj/`!A16cjr

>-a<F{ig*
h.~Nn {SaWbkW!oAw[,+F"@#urecW/_>~!&uyU{QGbH0FEu#'T{bøi*4*AV9,5Xl>3K	e
vaoh2.1Dh\KpѶx_>x
_VOsDUJ5|UV>QUC-Q	▮6APz8Jy|
PBlрo
(e,:a6]'/i}OR9Hjg9 O?\U#_PK   dO\a>\9  	  7   org/mozilla/javascript/Interpreter$DoSetElemSuper.classV[SEv4h	.0,deeaZ28̬3	eUެ%AXFUF_Ē7_M==Pɋ{sܺOϟw~1T#$F
C7%s'#ilYtϰQSs]!2sBD9bq
G5w
v=MR^)MZKϬKTGPr+&CR6F8&ЄF<#]d`(N ,8`h-8o䜶̏.L
N2[1Chx
me|2[<C%'vъӥ04%=9
܎9xI2u{U^6uYTU!Љ.U ./_#Vwp*^>3WzRQ:c`<X$e<Λxz4uP\?-0s=gM{s,CoG!kCjC]ްdUƼk0Jg-
ҎR/sQ.R0KUlZ^$\̒.J,5(6GaػAyHrx&Uϫv.R㮪LMBmA)Cps1O}VK.
{ӣOKכ]{!QYtH>)~?ܿ39ȏ·
VЅ>U+zJeDOҨ!bx(E^b8jIu<6SwFC_'Ox;%jw'3{/hID|5Sah/KH|͉H"DG[ Z=ODNx>
cG	j5&)Nϐ_\ǐK
,.ማ"U
ķ!n9	w#
aYz\icd+ӿ^uq(Wz I>B9ZqlV`@0C8A59fB#Eg{!11hdz??=~
.bhB12`#w@t
bPK   dO\:T  &  1   org/mozilla/javascript/Interpreter$DoSetVar.classTmOP~.tl:(%(L@D7P`l21a/|JbiH|_ xna9<s? `94r(*b3LyVv{e;6vꮰoѷ_wLa{n1!>kx88@I2`8ΒoX]/{5$ytۼܢBCAaX·+5aǆEVцvXжQneV-S.N%(Vi]L*8zOD.CPJMiZ[La8O9X+WE_7F`RʖX7|JmdJmbk2C䙆C:\TsoJ3pk2k2ᯃg<?=cbԩCy̩E]+If;_(Weh?ݱ
	8 IeY'F5,G&MFd˒N_V@<AC{>GUw][rI=SSGǣzC%z-Ze	alؗp{r>IV#a8t0#_Ph}  ͹X$Б2S'eRV?Zw*LCD5a@{!(	1cꔗ6&ȧ&ɫ1%{).F'żK-`Xqs1)+I1$f"a?aHoPK   dO\GC  =
  +   org/mozilla/javascript/LambdaFunction.classkSU'6 VBHUTZL)%
Yd7
#8Eg"~9'H"q|d{._~0]pJpp!\4sB@ĮD)^3JY[
ۺ[SH4^	>~#-<VVa)fNR-V5SWfzI$WэK.C)h_+F.LȉYA=%f5\~0-GhfXHpmΤW0(M\e*>1TKa5Uz͢U6
fxiY_ZfZ"ьr7,#k}T)iJ%o	(kD-y]֮xoh,mv٨C >iDf<c _qo3P?ij^1Ziuq$+=L0ۈ:]%ۖ)kI:yP΍qCZ$åxȘGݹ_{7m,1?2f0+5oEsf?eHF7mZP;Zhf֒stF,$%l)Qͳͮ?~xJU-f;RSE*PF!oeeHN.W)|
|aW
O[RVu'!srռ2l[4J{VmK{K'	6cX[!;=gPCхI
Ӥ)7YQx_lSM]}dГiS'-Zp0bT艹ӛf/0qa ssO{AE ~3~o4Fb/bCHCtBĎ?}ŏ09ub~I֑r|H%NG#qROiT?Rk	H[!,v	kt`		i	kLMBBnhz""js)Au:զT~oSkT\ܳZ̹f2z	 $]&W	e$JI[f6ZFhacC$,, a
rw!9p A
uZ/9$6ZFh!pSkYB~a|3qG[C٪N	#>($)/𥨎B뫊䁳^u'N؂[0`L2	,7p-W'\3h[U%dq,>iئ`Kg4UPK   dO\
 6  w  0   org/mozilla/javascript/Interpreter$DoDebug.classTn@=KݸN[7ܯ-47bE<"R;ٛU <?7U()gv<̌ǻ~vu֐1a'{V?xzm	݁ n5HCG(",<v}W>!Ni
, TPl؞}Aa/U*ehX5`b='P$顴_627.}$륎s
*!8JE{س
ءgFpVUu&FJ濟<'ә+zVoޜ:IZ[RΈ>rBx~5(Dx_p@MX:ɼ`:bߍ7Z,NXlH>
"Dؘ`4}_꜉H}rGK
ּgtwV.
3P96_0/b@8;叠w^0"8 pY	\Մ|BP|
i%4'LN$*M7pSUZo\6&V"ʌeJF盯*tqx>?PK   dO\l::A     3   org/mozilla/javascript/Interpreter$DebugScope.classXiWU~$0PRڽ "- 6-ڴT[
8/unݫ~POx9A;IH!>z/?_¯Nz$[HlpjLt|ᎉzԡ^E@CCwNEf2᪹mfHr;k6bLSD&k0L{ƪPQ.ϭ6jh*5353CӘ wtV= ոA̛dlQ(G+֨\X˰RSV̎1qbĕXbİyE
FfXоxA[UlІvbWj2v@'X	-GGTEznv.
;M"1 EZQwQq6*Wk.bAtY=7bSK!D?7^@,y+%^d;5܈~+9Xsh؅A7i
7,٥1rH0Ai9ܣ UFqCGE+W*ɍIT>g:>;<>*í?[3[si8ۨOsq)uȥ88aG$T'Ƕ9NX%CQQsG
O
ɻ4܍Drt7
Y;kDAZnب<*O0Vj2NfҝM߽K=P^
qKELϴ̤ar2	=MޙwwM6Rt&j
qGO$o$P_iMW%3'J\47ڪFTq2ûdX0!֥ne]@3xsPqc0
&4ad*ߥ=&$RcZI~{rPZa*Vwt$ܣUb9s9̸,\ȠFbR# *M^|edtCW%Z$f{#/FmEq?`g3|z0\ׄ2AA2(V/[%jt-o4+MlY7;r2Fc$yEYF-G}gv5\ZU="3n䜽3-+
,5fPWzo`0$u3MѷݒOӊI+B@w`]~#Nг>	?zNZ+4f ŭ0Z=9AXy
h5m
ZR/h4`	Y3dnoUC>BmY:yl#:}<:[ߣg9g"|J#&QVaҌݫĮ#[kzŽEVe|聍nBUf1K1s')wo,֨hUNuHA<$uXrTå)
r0'xt%@<Fq8Ey R(gDgpJ8{<FΡ[-	eZZYKI#J)b/bRE=$!zx2b	K}ϒ_ſ\KO-<&֡R"I8gɽHv5{xD<h>K2Hb;%&3, C)kH6y$_	Suyy;d"M<ץfӁAQ;SW%CE	zq
zvoHݲ _)-EhQ_L⡽$ZbƖۄCҋw$ƫr6Wj>Έaq7^xK(U9uJmaog݋GJR"\vyih)p/˧ Z4Ƥ13xr|ۇ+C$H@Y|.P9PK   dO\NT&     ?   org/mozilla/javascript/IdScriptableObject$PrototypeValues.classY	xTuy3'IX,-3dHe##	ah`4#ό '5I,6qbdFiKbۉ1	t[wK,mԍ&mmʒ4mׯ-{9r7
ۄ@DrW]o@4
"h_.nᮘkIA76a#P ]uwx4RUYa'0wtRs,f
ǚ{xz՗&+Vc1&7(lJ']U
x{o/_t|@0C`4whd"HYXCE4&fD@W*	fs*߾<]`Yͨf3Fbgb>*\'mC6(jFr|4Ln@j| cEhwSv%
ZesUA3!wgLf-&nET:I'NM䎽nZ_IǺ˻rI(;`u{/:4hdaZ<5ƊPXi
E)!'ab*T)K~8,F$u5ʩ4

v%bD:bD6]s>uL'l'"U]'
M	Ś{&o`A(N[,C;t/V&o
Ox~=L|m[Zw4l^C!@)a۱C`Zx9d29RUC*nKIeS/賒i4&Ș˗
e8}^1FE@DZz1wۘU؇3z{Ux$ X%uӜplR&~Kih(&>}-^+vuS229>,M6X6
7k;&~{R
)!#&>O{V<՟t 3k[{s >ksxeb4ɬGƔs\VG_d(4gL!H[iOnentq4JL+)l$ݚTW)Ń'Y{SjjGVZv'S 4N2ek?r<kDIIP$_NiHoXbxfRiAX4!Z$k:SĈk9}=YIU@ ^;d񷹙MESGҊj]3MJS
.$=MՓt[T*hjrE-uSC;Z'd7%_6>VȞp#T&V#X2-HLVYsNplbOg5hKuR۹B_g1kڵۇڨ+Q=>YŚ1iEl,ӚCwB?e	;
i'AVZٽ5%˯ǵ=)Edpy7 :IPS;Г'RoIaYy$cD&G)3r;;iTjkYm#	1
%kmT:xX[S6+^HqED~ZDwʃ~Q;𤋮*fOtvR+D=|7.pW\eC[1h|obĕ
Kj܏f'Hgp;f${cSIO'XBѴd[IqIKM*nHyCYn=D'`1R|<1i13(ɼ_pS!Kyr⽀?_ KDj. ex往ڗZ]sEե1 1n^ц(B={[ְ;/lsJY'u9We` NO y<,{2iOp)7M{Qck%O"DxʱTZ1y|>9PA%(9S~
/RT<%ΒNW4WkGNcũ@XF(l
tJVk9hF_j:q
XǳH3.y2Vۤア|zJROWMA텑+W(Ttz(.JwBҋ`Շ&BIj3nlVtm؋  OP@u8a|:Df74ؠ}[_@aK[֭,uWom0bw}﹀s0$ڎ@q&m?`#<8*o6/~Sd!zx}
N.(MCb^	fOMHb϶K*a܆?'i]t4U Kg K;_=:w܄[X%1a@Q[
x	L'rtjI"wP֢/(m̖0b^B?L^n30>6:xH>>@>\Aǔ1q'㱓DK6Dty\eZ7̑++aڧIOxUl%y
Qw$9$dHb2u"@Y}Ԉ_c?
C:jb#

2?ƍ'OdcMF]:ˆOWsŵŊgv8A\22
%r_~k%#Kq58<]FJ>Edf>9A~9Jf*trӌ7KG'<wi	IQ	%KbM;8	,+t
y|VQo7aX3~9?9<xAU_g4  הsW37Xߢ6(mIf?J<ˢ~zll?hau-vd'ۑې}l%1lAB(s2|O=%XeM38	WT=d9LJQx	Ua[ !B>vyXapCJۂ`n>Ҍ|!
J3|eߠ}I:.:Z;bMTV) 0cu2
ǷÛdQ` -g]20sk;+2X s?G#QI:YrGg<@78)>nW)-=C<0\8+:_N =:h4e%RR1~}BeƩ(-xkyGx鑎 5h~O*\s=15	)g3ow2HEF+T!2Yp(g9W͵Tזݲ{4(an_^3
wE^"WwߦDnl^҅BuQ,O=r o|euqu,vݮb
"M(wF7\n3
A>Y fKIIv	.7?Lf|\b3s
	Y~/
7!v^Ή\|Cu7E(;b!ֆ,E2&<.aJJ?fJ'B|z;jmF3#x+F.-;7ڨZ*%_!
,yg.	s$oL{0/Bw{dH
N?J$:xH=kC7V(_ƶ W78{]_d9
6Ղ;S,hhfM%
FV,SwLh&Y%(r1fԉh$cz !DF`&j#dugfG;ͭ%F:2d
mX5s8*9 )9d C}!T<йkPK   dO\zb   Q  :   org/mozilla/javascript/ScriptRuntime$MessageProvider.class1OA 	J
ڰ
	1&T9,YvBO{ĈS̛⛗ & Wb޵1Rl^(ʣv6-8x^"kZiXlBq<QFOۿT2*WM22qBCs\iA>Z8jeBP*x,]Mi7FIl^PK   dO\v    0   org/mozilla/javascript/SecurityUtilities$1.classRkkA=n6Mk[զmECKBhO6vfLW) xwКΝsΝs%v(h䢌
$eq0~GC%4R3{ģFaǡ1JU\%]\/ciVM,XX?X1`B(3fn>ٚe+Xg0fXn΁YðuHF"Ȅ+2>a-cq2z{QV$Q+sgɜI}Z1T;2*1¤9ul>$Cc]4%Q J4
s-l34fEjO6M#⾉c"ؠf`
VK3\tsv/:W0;t*>bPhu5}aR	idS}]cO_4r.xǙDl	[A+lD,EPK   dO\
N  B  1   org/mozilla/javascript/NativeStringIterator.classUsE~6xm0 &WJP@xZlbqm׻ݦS?PgݻM̘޾<TvͣNn2h!Aa!,Cr!]s14a0;gym׃&FquS|+kODG<<eC-=wЙZ[i4]U1"
QjJF1Ɛqu9yƸ	g^9ĸȒ@jYLa1IyP>BA/ߕ֎2-L"QGBa>Xח_u쒅:.3E]Ucj2Dr-
J=$e{=AcZ\k>je~ՔdJFrosM-etH'14O^fNEc${bxHtråL?hͼ}?X9'C>K}*10eTX->/
)3ڈoU:oiJyzo%no1N31Yf;bUrUBǴk&]Y
Wi~
i304ѩz,n.!h,g v
CkO#tpbsM|YK=B#1cp$14sP% N8i_|S/0X$(t	vBc>(F1fXRB6M?կәNwdJs/QgOZ/zILKT6m|4p?	VQ4xo$i؋"NP]MSZWQITS&V(i]$<ZPK   dO\/  H  &   org/mozilla/javascript/Hashtable.classXkpTg~&v$$!a	&`K)4!%@%%	9do={6ҋjEjXBQ5(Xft@?^댎v|oO6[|{oKp/Q_ ~Poq3sVU趓ۣkiRa^ux&33LoB0i`}!;7;E"u촫E\soܢƄVퟢKt6PZ!Б[ilKA-<@f
`ҤhO.$Ѹe::3!KY.(#z]SgZkN*7An\WYP6uTsvIp"hSDSte|}3֩2t}y\ZDo݄iԌgRMqX{BT5dfELG֯6FpDjKvQxz"ip%kXě`gFMsO*J۵M9
-mj6lf4j	dҙlrBxv0`A$`SȇRNa%bmAq}[aF6d	?% 8x#
m%jbo Q10g&)e3+gh5lFW4i$uZNuXmCb  {PMXuF/,Q+\3JܹO?u%iҡݯHݕ}O37-k9ܬOEI_Ma/uaPLt#RaeQNR}&Q}OqpZGxG6	k|.Ls)!QU]A&
UĬ%H
=\B|UWӷ x0=bOݷڢ-Tq37f6
'JRvtNWwh;hM
YD1dT։ZmpV~2c~l2VK
S>r3cZp*VO
G
|1X1]kܫqbqHUNU|-i6vr45bu\#epB§rm2iOFB\52g沭S i)ɤb2{M/i
[
n}*M̏2a<qː٘l>s<-qܫq3g{^q̋\\F`Exzr;u8|^"ѣgC}-%ݬh8-kE਒zOh{%GlO]񶱼
=Jc'g:"HG%4hu3шg@NnmoL)$J鹠3.bDI[VU,
u\C:q6_Og(_"hDMy7<7!|@qCPo`~ 
cZq'4FOFQ]_I;8	ҢTޥKӳR;ʊLyy3&><z&SL*Sէ^uP`wƣ#E%2%w\.o$7t#Wv9C[د-<uGQme$ZD^	kb?L=8qtIpI
},
WYgװ	?Q6~F3A^įٽ1g;
is?utJσ{>)uK1?·~\
'Wc:>ub_,ўH536=?#~h?'fsx=#3+;'y`IDMaxQ)RxEUhRVBRI9':
%j^^2^Wv"a9rH{kBXEAE5*j^j?Y/rb1<M>5#W%ȔWzەq/=MIojA6`xr't1ek3E|s6&I1>Ե	:]r6 fM.cHit%KyRWBQn3:
k|:?'sfׄO;ug

)i(3
9<sY|N/,v>wB82dqU!!oL PK   dO\7|v  &  2   org/mozilla/javascript/Interpreter$DoDelName.classUmsF~.uR4$`'qKyiB&q N^>0r%J2tKگ}Ç~L[hODC&sޯ>,r0r~eٶ_1Y _6%8cNN 'h);~rm>:e9Vp!N 	Cы>.,
۞`a2_ypsaR˱O~
'<`m2rq㰎40`qѱlcA+-^\{0{e~aӎLǠqAKu~)cq##B2rK&'jQ@ݔHwBIdd.MIێw22omQ8]環יFzѥw^tvݡ䖄]
ѣ	QB}}4ۆg[<l{Huad~6J{+l7۪b-R'<'<j"*bsl[<k4ʐڪQb8rq\gT5bڒ&'.U7\V=>^vᅝTѭ5?w69jcሥ[ =k <DS~OѨJNG
8Op.!N$rOf2oDHgh2K3ߩiBZMh
3dk{:0:9LQ@?1y%*_XƪOɍ 8O'B$
dWrS8@PgDKĩM(dw
4ǅs8I#!r\{ˇkӯis[MUjwQ!,QrF!$!)7":Ot7PK   dO\n-	    =   org/mozilla/javascript/NativePromise$PromiseAnyRejector.classX{|Mf<X RM $!!$e5Ȇ`NvffݝB[m|GUj+hU[E$	}Ծm>ljk[+bϽ	
Ge;<999q1 K\SE
7kZeL3"k7!!{YԈZxiYDˊ*k	1PsUA|0,1Ns{4*O2ƭ&͊vkfg4RcӬftꉄH25U-LPD		S#H}L
X@(R10ФL
4Fn龀*`*buDY %41Z{4zF1b_Y]IzҌun̂Olߨ4wVSgȏIݥou Vg24,}?&e4tśdW̪(\3LLFmӌyiG#	*bm-A1+za@ȍlیՇ:5)bx>+Xb!1d`Xoˣ`3f垑*X%
.TUD#CK6e6n▩eӐӓJҫ}Z 	IZidtcYە* m+-K07V!"a _֔Mc@xb4ͅ&Am$#eAV:43Ŭs,v=Q]ZaED2뷅5
7QJǔǁl{W3a/S"xP@2	Z8,?0t޸ A4b3Fmu(mGL)^=ƕj;vu&E-dAbz]2L33b(Q-.YGaNuÀ%v2
K|Y[ɏVn33aS	Q̯R!'k[jW4_ie}C~e.5
vdq7
\5qWpFQܢX۰
j0M8) ͸EGU܊ۆT3uԙa]΍I=>Т¥qw(!]Z,)Sn!~YGx{Ʀہbrtr-Ŵd҅{1qCH߫~!$r!"Si~hшY]	b)>ⳂIMm0esxGĻ6?D+
o7TهS4bDD4@Gt #.a:n
v`IXOn8"
7('E9pYI}V4!PҵkVA<2MEV-EY3%tתe#.'g{KQ;Pv})hvSWghѤBFԤӒo$B\a AȱYK͵%t},OA+6I
&>C۪tK(ts2	~!6h6·p
$XfnU3^2gQЉ+/hi-D_RW<cjRKGj#*.yZm@YIJ}cX2JeKYc@ʛi8mWwJLa('(MzZe&-b',VZnB,PO7r]8錜%~PW/^SpR859giԕ)Ŭaצ~fcz2tG20S$:#*x0<Ț0GMzLK~8pɩoYӧ\tg榎;R¡%L0Sp=9PBᐞ Hz/&9NT9N%2Q;֏^^{1_ыss{Q)IxNEߌI
xyy-_ץvA0I	:A6	d~ߴ-r$*C8SR^qU9yJC?	a?ʪlXEp⬢PlbHك1;%frfEY{vF,(>U
j')l^WkB*(ַysǆ㴸6LdQ.uWx'T:h۴~lF[98ЏdVi<fsYR`[uivp+9:r:ehA[)4W_j5w|~-.a9F4𛰎Kh߂6t۱m滱߅=8 }xK19M}2w ϧ[R<MPAp]TT|FBww=wiN!Ph΅gЀIߏ,%d ^D?"^6?T(`dóȟK^)SNA9R`_W 깓ȧ7Hx
5~ʨ{lc5CtHspC򊃸2gq|8Nd!A?J)fcϋlE)V> y<=K;~29z#o6:jpC\,\ZiPM-!xoT!B>'b}w7Dk~_~g9%v})ǨLG-s]:@F%pF|8_G{ҫX/].boֱ{f-Hy\o6āA=0<k;b	L&)vqNI"g	ta''oВXxBbzreʐ
]@̹x	38&`=;!bYE
7SX˅PK   dO\;W  :  0   org/mozilla/javascript/NativePromise$State.classTkO`~^֭,0'r[A-dA,!~*5]?d$B4>N1I<O_<FNEvS7FշzkvJ3bP4Pbqy,KD5X"e
+4F7
/˛?=zl3cP~I8"Us-tH1ݚoU`PŐaܠYLiXH^vF#{Q|ۭef`?&n	DrkK鋑L%p"iq,!3͂
U]CaVY߱Ms!Od:K4TLfɶu]PH=owX>]s͠Sh(rN{rK7IK7^~Z9S^x@eZ
uX&+S 6jatbɟ83d/BG\=EYtj0
c]?OxRL]S.Yy񞩴I!Bubr#QR1]HXd'	VDݒE4j!TVZPEsvgMBSJnX}[3)O|vXx*g$ZD6?PK   dO\9AP    4   org/mozilla/javascript/Interpreter$DoRegIndex4.classTmOP~.(+f8ǜ
6#&>!1|tYӵK{J#D?xnKcVl>ޞsO L
Rfn}Ǭ7?}Q7\j=A0kxΐ(ҘAZaC5btq1PjMg#9+h
a-a:zA"hط"
nhedaJD tg4XQPp[*>2RÇ/yWZ}
fHFo.oz'e84<tLߖɤxgSE7c|ȀxMCш>jX0qhm1r[C¤ȩCFZ&DP^A=lY̘WM
Qy ^xf.#ʃMߍ7;V`%2(H׌|襋42Tؗ]3X#[pP9y)S\!~ǵ3ܪ&Sys,<R#YP};R籎jbA)M%>$AE|9VHK*]&9\UbH).?PK   dO\V>    3   org/mozilla/javascript/Interpreter$DoStringCn.classT[OAN[t]"KWƗbӰuvٝj҈1xvBXM;3sw\f~cwOu^|,M0f o8a"]OˠH^]s)]`uL6R0օ+	cXhAXm^nϚ2PP
J:3a[G.{.iF+0neafg(L\cWC(a`yO,!W&ʓ~HQ#Ch~N/5!GA| u|XTgSYkTҘDqN]6Ղ`0{j̶yzG4a%CG˽ 2I+o\_/#_!W&2;lFb[xh4,[S܋	pXEcysLO玷a>LF1UZv!]x(c#mVQA6ְn؈7Qc5ʱ3ُmgww0>PK   dO\              org/mozilla/javascript/config/ PK   dO\k    /   org/mozilla/javascript/config/RhinoConfig.classVYSW=2=-"t\ FQ&-=cOQŘ=1/yA	E^TBsnwÀ[b|߽} Ce(WQ!5=nV:~vH
Be
;bFMl'
5tO֬3,{[+&&#
c7YḆEP
S	<-XG{jqcXXi}-]7T#]E|q5K-
o0QlOY=ot3/Z3jnhNإa7(b]JaՎ7=J?#-mhWOCbj0b3NO æc5yBB  Z'$Crlrn*:b#RqizDC_gDpTgpҡѴe;bX	|U>bSٶ)t+_5RAJNN~*J"NCpp]4(^U1A2j"-˔H){`}2戊	;K\MkVφ&1E4NRQ+s"wZ|1SIpQĴkI˱cį
z:`d=c%Z1;8=VsYbp?Kɠ똖RI<m6yՓz6#i%EϓocBfzEX9u-K붨k] |jSS<@Eդt7HToIbl`Z7PN8N('ࢊLy')NrMQ3Hw+ݜq٩\
AϢ!|(o4| B!>VY㦊/4V	
k1=3҉KՓp6e.&!p8[)S|>8GS>7^;
yF-K8o=Sy*{t<֔go]x)h.\\󋇿Sᳲ7(w([
y-xow.y_vyur/T*+qf=to¶x:f8g)<@ʷ*z]Tm	MwJw!
R iZ1gs]u/,aŢNv7ehh!Pv7U4Mjex&͐+< L(?4UGc=zш~J^7+gyJ=AF/\Ϲ~ΑEc,O+LXBCĠئlRqP!=;2wƶeJ@m+D{'
[-%\\}3Vqy$\ۈf`{TWVa~ZVӐiSeGtbe-k||;8a"6oavGW1V0hzwa܌rcBet*k#X˨]oWJ^C#[}\
Sʮ|-k|PK   dO\h      9   org/mozilla/javascript/config/RhinoPropertiesLoader.classN103/H003UR^x"Y`Yey 0̑썸:'E%U6P\yѾ-XH	NFlOV!u&,_ّ0:+N&?g)#z,*PK   dO\+  t  3   org/mozilla/javascript/config/RhinoProperties.classY	|ם-k<,cHHm `dC0!`d23"mf^H[I0qnvwGGm{&a73l@?{ϼ GA:Վki-3ֽ}}L^/P־GA@YS,;PUl
#ecƝtZ2VLe99;L#vJwOs%R{o XGsc1giMY|,#kn4KKm3m/X+bU.+%u3VX5X"ϰnO%tw/rbiͲzʗX6@M6j~[Ȁ7[(:tr%Lf
'lRZ+eyeATb#iǵHUEXz@|'M7 zЫO:L[&=$D7؈M466صUALHW7Kl_&BG\&<"AIG\ڶ*nʥ=Đ@C!SWENUѲM]D4]^<wQG^iYZ726.$bD~C7o&qPm8NqƄ.JJOh4u&RFw*q	ISKc-t9=\s솔\de˙-mA1 @"B%XyjY'5
YZ2{mB5[OUWI*NNVAŜ@K[e,3{Iv'ȷV oX2[-)FM\8j霭	[0Vȸ?(Р74lkA܋HlZ |FAK[w*xw=Mga+i6kE$53s3+uw"U-X-b~ގJD뽗ey> Y惒aQQIMUDڰt+,(q6*|Bi<HY`ùl-KOJU$d[N$83˶a\	Z=N<ϨdpҬ6˒/#xTYEqU>eKiqfDw1yg:.,y.M
	|@I"0ZPV"DEOFZZ:s|
OT<o
kԝx ?3
[C {L&Lqtn?" \/m7m*WCjd aeN<Yv$cؑQ=ɥA|S}?9]
lS=2!#3D	\LCD|dOT?UU=[mVVgkG_Yۈޝʔ.tUnzů*g1lZe8-BlxS.vΑUZόA<t,½G_oFF۝;T*CғnKYN1ҥ\g1!BH!NǍ;i:Z(a\V%*^IQE@̢&ۘf(&֫B
WvҢAs\kLsvpAỊ7GsBҵ7sUU@Â	]:{S8,<X+Tq<4UqgtFq*^ġf@\ͬkµ-!a85DNU{И9TFM.I<ečޣ))vfez)(+Hv+$!7?=l oWd*~/gdg8{ڃ{	,,V~|{[ps03<}ϯ~pIeʻ|V+ｒ'Jk<Qe"	gYG*QYkWvDWe}+׭S|ڔH5%|g[q*W/P5ʝd%-ħW*A}HpIi\rGdeZvPǍ#b_
BS(Gzd59n=7]>'m&`y<ukI0U6K	ʖS-kHduK<*WU/.ܽk "(/|?<A%Y"$
!R~F	p<Dt
yzhh$B#
\
tÇT|hQX(?CtzEr)SB&<NaMᡗOb`4Ԍv^jC<6tF/ V3
rc<FJ">f`nMFta#b؄>-3C[ "tBt1c˝PZYɑUPAٜ!P}l;y<}C]OծkkFne?qkᑰ<Fg.~'JBı<nr;8 !- ];Њ[ЉXaa-`AƱB.
qXMYGB3ٸU'Z[RT[<^!FCw);qo},
uM#qv1<NAY
xWJ̧J*G|\ijY"U~30#;,c6uȏr6A$c-p~	kf3Gu/yj+XI"։NO^6qWA.Zk$Vx
Hw|!8<FwJ;H:`R9%@X) 6: ˧M HF7'=%L/ӈ؅ci 0Jz M,}E02xwQu7PnJE{(u7ME"EZoEbK]dM^33jf:'d^&2/!(G}>2[ Zn.fm)-wı$NJ#NwzPGK_u]kh.zaeaQ?&{Ňt~K,EGO ~ُq]O{p
O9rX+8\>1Q1\2.swU?3+@h$O)N R@S=,x?ޒ

J혻|<~Nxnϡ5fYο>u,a} \7O$'q]!jro~t{+/`)f|?xCO>Mzil1];Hu$.Q757"vJmbXӄڗf<Ǵϓ9k(i<Nf /ZJ%rl?L!eם+pѧ$%^
=ˍĢsKi0%KEKEK%cwN_`ّ&a}7_>iC86
8/,U$?o!c"PK   dO\3l    "   org/mozilla/javascript/Icode.classy|SϹmi(-a*UQILeЖn.>}AAQPDETDEQq
onқiw枙̜3)=Fd1il_xfm]]eskb5YN!2Ôku
UsjcLF6NdJ?"e3̯Q Vc1
I%jfUygͫigT4j(fʦn=paS&ϫ	d
Ϣii?#L??SkZW|l>tO+t7˦C*k<t[dRCG`<4 ~<Бx
OB;β %!;\xhWl:aL*/P-=4)ۄO*#UbҤr<pz
?-I.Tf㟥t
E#c}aِ~R	$ôUx͓z"`P)|)Q/_Jxϴ_j?Ƅ'<T.p>STevϼ4D)X):)
<#"UbӠ\IdU`((/-1xG_Z&Eqv!w*SW{C!$#\ѮB,J|Ӱ2/>
{h.7d =4O.y@0%yΑ<C32] ./I\&o_!_%%4N Z ݄ZbG@n:&d;НئAlw<?~ &Y<tY h7es,B'Lؑ` zؤI*L%X!`;  ,s1jC"tkIPC+0|LI1[+AV:i%a״2a5|^HUD/1إe~oSbgԥE=ٞWй8(E|
HH:Z`` ./3$α
loQ&
ЦcQ6SOS*ͦLrJ/^sDa@U146̍U6*LyKC&s
CUL1ʟK(F
bȸR\̑"c;d1\,:x~qE8~vG,FFJ7E?z8Gnb-%~p])eŸw])UŸ21.!-ͷnim~Q3ma:q4ڝxY6Sg$ǗLym)mwSXq)FmR6zB&)F(Ʊ?!ԫ%Bi~TDNE8>p3$n&k1mugVf-mF>Ŋ9[U7[N7R"+7՝د՝'z-WSȍjkՉJkMw#ᤸT7y_rϔ}xBJ\#>f{-0d%I{/$W^`ɍ-3Y ;`z`Ur0ܮ[Fաg].}an7)z]3x]fBr-k[ڎ7[Abb#uw|iŸU;q/vLî+Nc\ܣ7~1K}0XIzomCM`^}UMs|)il5ck]m_>k2.U_rp>)16g_Íkk3G})Iԋާ@,O[
&3炿 o%x_S]/3;x?	'/ŔdFdKp8]pLGpGpNl9΂sw+ <> W'.p	>JA<<\1G|x >QI1"6Xp	x`x~ LxpHp\<<Q0;O<<U)i+U3׀g
-<G:&|:g
>|s
>|
|K
|+W

|u
gw&y<Ã2Nk#fuo
{f|⼕q!uYE9eXz-$!}py~)la:X-l&6v
l2l,NٰIѰ`Î
;v0/lX/Xue::Ɍo~ l߃m{
l9j*Jr2أ0	? v.Bma:XD¢,$"$!IHZBR׫C:\Z
(i5XZ
jV:Q1ZhUUVc_VeZhUD&k5UiZMתJZjVsӪA&i5_3:S:WPT˵RV뵺QU۵Z?[{VkVjVzD+2	VjVOkZgZ:^jVzUZmM6's,l3rc3,n7-8Fi )i5Ku^%5mU~6򓴉7y
m浴_wy=ϯЇ>7h+om}vvV?vW=;?/3ƿK>gV:[V&[YaYV7ζzrg7Z}XYrw^Vγ> k
წɇZpoV!e ǃ-?<
1V9kMQmMJckYsتVߚkYgs:#օ\a]yuOi
<ݺxgZwlK/b	ǔXݲ:z{_	P}).LdJ4&q-h3<fPŉ]31'/w}3&bv[e.NNnq;?U{]LlJ뜆lPK   dO\&r  
  D   org/mozilla/javascript/NullabilityDetector$NullabilityAccessor.classVsUdMmRRK*IlI-f#ij$t6Zx`|'g|qtx3|p+|?p	28.}sN{17"	.+7UMcU3ղKUIU5պ1XJ26ٹ\NT=[N,OSS0=xi.h qk\"3E+D$샟ad0MuqU֪J^$vp`5ap#~A	U+@5RN㑗MW8x7TxiEpd+ɸWU+]0z2SʖjFmu4V(@@DT:{zыEx\b:Ƿ׹.:G>	89c^dp$[ÉڑPF"8	qFU]{E4MC'&C+CM+U`3Je$443m	UWRRV1jSO9Y[Muk6@J_f'-fFeMȓcܚiIپ3d,9˶kSSM.er虏esjPRḭk*lЉq:jQ7L;
v4[F'orU3̨(15kT,/IC*ULTFé67kx_BI9wp,r.;$m*T	)[BCI.@gj(]r-d
v[7E:+yMR-4(+MYs|Hv0Z
uŜd]=Nz_(if
z6wҙGC-WzF)pt9B$ٗǣ]w!>{%|sB\!d4xXpp఻;_ÒhbO|J/x1@4 o7knAt]؉":跇݋fCA(ݽgp3a8ObC(п%SQ?>Y|	,7ݸNҍӽsD9ir
ci1aM͘%IfImp3|a@pՔXX?@v
ާaMZCpw%YGi)ܺQX༿Ymxv)N4Ρ
CPŸp?(+Ge!=b?m}hו;jv6<3G+9SnfunKђ:yi[CeFB0_4:oHlVP8>٠XKBU\}5MJޤTd鷻u		Ti`PK   dO\Rh    2   org/mozilla/javascript/Interpreter$DoIfEQPop.classT[OA,.xCDERXD*jHD|2nS|D +Zw9g.;߹;k0C~fm/:C;pʑ"AcbGe]Du@`8^Ě^x$Z2HMCt2=U,|cA$]w:"\qG4t8*I5b+ฉ8ɐP|祭rozPZv)S&zqcrn{3bqn0Rxrp>wYx_!myFIJg޷GwS>Z&6]jd}2ތ2UJP^&CA̩֫+A6LCe-[fxyZFѯv}ըVat#3y"PZUkh0@Nߪ^kb4H2/`967'ݬy\P 1kV$өGЖ+;оRЕx.Ʊ=XzȬI[tУG\_\1!E'aTDi`f8.)lKemI$@@Bq$ W%IO$o#PK   dO\wV    9   org/mozilla/javascript/NativeConsole$ConsolePrinter.classQNA}""SWXXИ&4jLrKvWb+[?2]l 9C&3޼p5uxaJe'*m>9v86*ŏ9g!BpRfSvZVSÄƲ$|%|=*K6%'b3zIeJ_40:&tR2 
ˢК֋.݇<g76{޶GKrc5EhITG[:/@"f}/PK   dO\;  #  )   org/mozilla/javascript/NativeScript.classY	x[Օ?E~ĉ8IC[V
'^GAIIh-K{Sv)ej8&)Lδ33iӝ_lK&vt{g\94E@s&69L̶!3&m>sS&gL6@UzkJ@ aRm;@uY٤J5M\,?먆.0%Q#B&45kd~C>nK|6_?#3\=Ee6v!0:̐f8kk+1
3rV~g6ZZw=`%B':N䓙tXIB%lRO`J#/`D-5,X8)XKO˥Ku,GD@D`i%-	!F3f|m:VlYikߟ,|*:^tJaZ?B8O@Kd)@@ӈumL.}e7vӱ9L"llױ%CwFsگ0] 2s.Сc;:g ô>LkYYFNaU2`Y
*}wY#7n\GRӆTY>BыdhI(W5^\-0~&ث!䖦2 d@Np1/~;ow&sL5Q<
I;e]#5w
kK6n<]#}OP[!:l93y[WqPG9t-(LmI
tY1vԔwP!0%tOWZl*(|kx^/KJ5^Ү:ܨ<Ak8GĀ0ӌ#RVk2ݗRn[uoq[&k?6v֖=+pgm0.O(QxwI+UiO4VnQA:2*>߫}x?+
enսKhy)er5V܏ bԕ&\R&lf+o&e4)u!ÀYkݔQ%}:(*٥ʴ(-ޕTC(ٴgKHUeeچq<,0(OIy1rK'e@>ueFNgr5|R0%ѓCk-@LٝV)iolf'tU]hۿ)g0zऎO)!3+sm!m{eKCu9
.Y:s:Rҥ|y_˷f⤬>3aK僵T~_o4z!hrWu\t뻒i3O;FmRIn.A?:K;w|hw1[+Bu{ޘ|ZPO~3՞g>nxو(ɾͦ>+W|}?=ҦPzd?=lkӮ/f@=V6G6*|_l#wfbgqMΡV[#{{h;}	6rM@0ⷨk;Cj9,L8E`jU
tK;mn7jמ͚Ҋ3BRV?69ɛYf@JU^C6[l	ͼ[$sIhO[ѶyՋTVilM>! @~z|:Cg_EUUp_TK\Ncb.vܽv<fR֚R+m.+uQDYKFƫxr^htL1-{2؈jN(v<K+#4>\\ˎ{yL/E2T`Qzm"|Q[έ&XͪVD٘䙙ZPS%V;g,T|}|}Sjj9[95['gu<fEبM,[ [mJ7YUIif*?%\g{KY̵ClFÓQgLd^O>+KHa)IJo<RMts3̇_rƽ﫸W;NBF
	LcjI㘾:#oi`NԘ;hu!h,qU
,kQ	 hd%'
s99_M(%8C]ShaeȯzG`>걄&.e'.'De߂+Њ> qHqo@!/Gğz\?%l ^0)gU	̃xКm	
?B{)7͖GAZhO=RTuQEi~5
)ԒG)|"m\E<qxiq6%^d@'Pl_E[9S">iJ괝R:R4zԖ"CSQEyaJ=R !g&6;)\9ʏhI	`1\S#[+3ٮrU5n񩷵ըNCj(>c)ŁgƙrWyQvE ә6~qE;	U Wɝ7Rixg>fsc#̍G^8qqbq$z72aԨ^̢ٮI8%(Iok"	!f;Ձ(r
Ȇ@1%GHG^m滹6_Osa|fb*=tRJ Ͼo* 7x\
q8òT:Bv^3 B2nRz7Q)<x_*UbYT'T
f)滊;&iS4W@s5\7G7bO!㦇0%_9;:#v,W
YzΆx]LwJ^ObF1W]sw 

SpRuT=P7'<\YIg;&vyHV>wl-ϓx;"#wD!
V}Шj=ĹSq<@>oWXff$Rϩ,|g)_,d.bTQ1[KڰX*يr6POtEGܐo<g9<?o瞗W>Kq
Qct'aC j<fm"Q5[l^MlZxV͂ںyW`mɞ4	b'uڪA嘰8Wո9j7.g TA}SO)o*(/f oZ٢V8zS]ufaTu5V}u5ӣw{qΏYJ["rOŲ2T	/?`9
qXv-#aۋ*71Ac
mm])QU\f<ϻVqZgqKWPK   dO\U^(    0   org/mozilla/javascript/Interpreter$DoUndef.classTn@=8uk(4!KPHQxH8ֱ#{_ť>BnjbK{fwg??x,RHLd0ðF{ c;؍[04.XD#Wxa8fO<gH+;faȚ f8C&{ۖʶ{>wE<tX&."4֩ v8d`-u\2qWfd0FAz3N*C5Ah/WAk}
lMѠǣmsD-jGW^k'w`#yoY6C2FiiBUIb')wP:+r*IwIy_ eAe(r'eӪK"V<Rc|c]ac(:16U%,R/E? `F3f?4mXOqdsJ}d| ցbCi|WL<6)є%QNX]gpi%#GiTc+
VKʫZ^m&\$|@p
ٿPK   dO\3  	  0   org/mozilla/javascript/AccessorSlot$Setter.classQJ1U[/ЃzpzBQ(z)
%%M$z<~lJ9dB޼71\YWWKB/zխu\p)r9vSiaq 
OI^/floA5u\DmWNAY.ȃS4moDy.xI*sw1C{cM<C2}Տ_x1GT~{C#(+~PK   dO\IUP    .   org/mozilla/javascript/SecurityUtilities.classUkOA=CX(<E$*\I6SOI"ѯ&c-nҝ̽sf? <f iщ.#XOO?dZkxbOC7Cv}"LSOpDQr(9BKa
);egk9+NЇBAcaqHap]-ئca<?`X^d63Nd556H0?6׶nꮛVfE[:
+qLhn7*y.ϫo떞W.Le5mi+=ݔa/ì~ƯaLH0ۅf!)N7i%
E<̶[ 0̥(rGf/%*h%{|KFK6&Va''D%aщr܍Hsjr{r"oPJQgjx !ǮiԍOz!CgcMn9yл]U[Q_[w<)2TL]N,E#3
+~ܣwRTΠ} S"	f&,z0KX(U(afT`b
0]+=NS*jjSm%a3gZwXZ,b/U"sQُ<͞ӯ^PK:6u͢4Py"1VPK   dO\qd*  U  .   org/mozilla/javascript/Token$CommentType.classTmOP~޺MPD|݋I:]KD?d$B4?^N1>9<O_FA!ilzRwnַlzELv[#ayZbHO~zT**RwFd|Ty\+raZ㬌(Fyyr b0*&HeX0Ly^PvM༄IS@	(U=a)9]4n77P[7۹aN e\/0<j
R~s+%#0Lb$+S6hnj^g]Aԓ:DlT:'zL#lZUb9:A@ۦlJu'S
:I1\O^
g'://(bxiTju	&ceLSc),+K-(01GG5d(oB~|7>Ű@O(~
YD-B
FY o`<WuZ(,MK<&܂lM(3{DʾSE@<K"e9v<)X݇[izO#OEk@L}-+aH¸FPs>aCd8!=$09ĩIVwCN`+bt<?PK   dO\EQK    '   org/mozilla/javascript/NativeDate.class}`TE+Krɥ^RU"IM4Ip$GI3wA@bCAƂD{{r	Aۙ>;;;oWйOUҊJ_3||`I`"h_ 4mpEuEp(Ȝqhj}uʯ'ȿ0 
RGLb_\[S_4 L(mWfg/Sa`EMgKnE/BqlrA"uXp#tH6 R"uevGc'*THl)݀БV/W*i3)F{+8ـ.5zD#NBi^ki@d"x}-RWS.Azla$k]~P'cc@_臐US՗knTkۑc&N44^R[5V_\p"WD.Dɓ1s!JBtfBMҡ
!h᥇A0CQV7jJcEb'/p͖N/uA'S-kDz[hfM	EVs.R-|X"BijU;zpiN6aUĊpBnTbe)|w82K'VB
ipBZB6Thj@
Ϥ
THu:h,Θ8YĨèsQpFguVu/S)k,B\_Bh3Y
XR
&J`ɓ"*ZkCt彤j~M~Q<yv9F!s=BwfJ]EU'N:gF8G'5l=mՅhP-5VV|#1K"6&60NԶMRv
f/"r9]0Q06Spܩ6Ir$0@MCJv
v4K
KG*+vwU}	{S$vjXX*-B1AMt='KD<ϪN^E.0 ddӛHք	4Wn!Yx\&;;VҤ	O>z+	\'	u*ZdwUHLr'7
x^$]zF lG8_Sm7$Kw7FqdX)an,Cto6#50NlgPZ))17Қz431|ç|*7Zf""07["|%+.Zou΀㫚VeTYX&;yڤ.ͪ@Y	^PS_]ڻZ[qKПbУ=؞ԍ\"Ja;;AB}N)h:OI#viŋ!W-㮨&Dn*_U\B;Dq&n#HJZu4]dEYF.$G~"P]U{׆F:zRs<hZuOS .HbB,ϬS~DLyhGX\B[3250t1*U\HΡ^jy.L	rEz&g|R3$`wr/¸qiW31KՁ:1I8¼/׎&->ydܰZ'_O"]-[7p @a1[
\1'x pyX[K|r6֓hx߃*rnI|غ*P:Fq5$GOvX0s6|vy
8\INmFI&ԨH97b6
&~BGm3efYgm"!|pi.΅twU Dֆ7~`B]b֛dig 9.QѨʊZ2jv%MA>UoLӴ38^dY6QҎemwegnFn髨{ːTDR3B.0B!mPuվJyv-DrZpT*x)^f`L2#Ev\w%X4MYMj#][+:^g&Ğ55uE/~ӓ!106gB
,gn3vT$͉J<%ggECL_(Hn"M% wx\	~_o#q!!~0
RzZZfI5h
|h?/	U%uurYG4/O34cά lb,!\hz}䮀w"xrIgl+epffTcA:o#xBSYQVu\Ƅ WYqY-1
TYG~,ȷ$x6|PHf&+@F|kwTRxԆvޏvCr
jor}ڨ;\k%e!+*E
<Gm`
UZE)K9+9#2 3ͽ)[\mHḶ*UX[5` e"!6"h(o0,'POIMH`9(%,XKT83GCQxAwT泋vWUP[UPUS][RD|ڂuXPW!O%P/K᫮Q~|u%>2*	$gW.)՗a[5UfE(X@YU^_R"`A	%WQ\Eq-ŵȺ`^A-`:cI8OΘ޹[EҐ\/tKnzFWT l-qgͭ8Ic̆jkե0'$6
J
3p6d*MuƨcP!(X%DX9};WZ/F{ЛxYƓu:ibqѯ9@UbJr\)T+2X1&-$B{}f36͢!m7V9-u$5ܚB
T6Ggt6i)Rhj))J_᝱Ɋ|J-Gxێ4)`"tݧB]yMҪV`#JJȚ!=
D+
xUB1XJvUlul&lȓPj[b-Y"69aUH{Mv^Xqjixl9mBGL"Jve|-].97B^ɮ`tvVZmNQIdKd(qeב橖^}MQg$:(<0;EKlnݤ6#+d#|<"~yꄶI඲uvnej	y},CDɶ hUvN<𞉊6=ҕXl)'	yPƱ5db_?>ۍN`4uJ_	U?իӚ;abfV랦]R}c'Q[7ѷd|}eE%I5FK\oQ013c*|A7̞nj	) ^yl+\(o0H\Gb/#eW}tjׄǴ9RTK*\
ҥKŔe;d,"^2c{&_^_@RT%}>g}A1mZmq.|l
+};	Y Ebiˎ"Cǫ?
^4ĴiFhڦY͛4=JxV8DЙ<W/eLMyKLNM+m@{hyU.-JﱧyBڛpAnدʉ`%Q*Ytq㔠k,ZJʄߒц6|[';Ut$V#fzRCLLskGhf['H;^$=̴Q"GX
97D
]3$F"C"P{~D$ ZWNld)r:)/R8(kD5IH"nA1.j5ַSDBn芊 85:$F"($%NP%'N[rIZӨ_A7P&l9DГ̶
brx0:KP-NDJ5oqidP@Enq(2;F6j{/"5@th;.N0Vt
Ff1>Khb{:vS#'9,.|ٖT^N!JNh8ͺB#}h~'ii})}N:xr)c
lld+w=+ٙөIsL['>n#WtD5PR#^tՋ7O~4(x3P}O*8ɒfdīqMh1۝oJhp}%'jlEecA2"8;u_!.$\d4UqH(k\DyKJq+#P%Oxظ%WHp-Y	PjK:b9mp]E1`#U-̆: zPU*}&%I'OMnJ
TU]EEt1L9`l{P.(TY*Y['Pv*Vd"%(J^dgdiEYE00V7ۖZͫ꘩S'O
fA:qq{ʸӈ'NgV(#xϖ*B0@D
ū|K*T#X鯶*qMDXAmPΟ!bVX?+8r%#:-J0GPy!ND[ZcRk*յCW8.&,Lc	Ħ"s	
BqϔTaĂpG?
Sixc]<R)aU<w/9rJ>
8;#gYeB+gTEפ|}uX*b{V["/[4zu}pڊZ:h[ivv9a]Bq..o-plTL-GZ6.,ʨb|1v++Q)dukCE~{(K>7h3W]JLU?+(6v˛E
q}Bj:ھ
٤SWu}ɽ'b"/*d?Ct&/v	?Bagn	ÿ hΚ!|p%W	ʯ&CxD>p7tGфǄ&a0<po@xbDxrBxjFxzށm)Lx0+{g^ax>
?@	a@s	>8B0|G>:C0$ǅᅄO&|BNr'	B00|g>;?9ai%|^#|~^Bxi'|A^Fxy^AaB+*«k3	kZ˧x]#Dϳ%v\k"3yIⴑA^V
H/w/d<!7+u̸W6pAk
.1'_,M/=Rxn jnk\LYae˨0P0.c构m塢+%d?  }$M
iE▩dM	Vn&ԍV/$EE@_.a3\f>MOlgd.|&#n|,%0O/Snb;`Z0z0Æ/7C?~	˳w@Ӕ3SYLRr)@M
Rx%.
&$
(dP+nQNa)>GB-Oa%nmh
$"j}?AQg>Ϩ}F3j3J>s
R|Ń(>|k(LqC)KpgP<$R<qHxP<O#S(Nx*1SS<}b#4S<?(MϡOQ)~Rx).x7gP|2SIq#oա:8Hq6Գ(^LYğP|eTns)>TB'Sⓨx%'RK)㿜➄c	kXYC{Ì{YMpnغ_JJÅIp
cE@!- !>L`
|0b0~̂a6so8
09P	~ g`2Tb*TaP]Lu	A27,~̅`Caq\cB,x2Ip1+.p)΂TOUXW+Z\a53Z\p	ǳa.؄f%p3^*pwf؎[^vp	ݰ&	{p<{A>؇||
g >K$O4ϒG"/2~7~O&o6GLY|"3
XW,f-KXuYWY&ʲ7~gO6 bpaV GP8*.xQl,2V
.G7H0Kf$U6ZN>wh87wC;HlIa"ZCshZCк:-ۡ:mC+phc(6ɡЦ;"vC;ա-ph%ڡ-thZ-shg;EmC̡qh8ڍVաthNϡuh;G:#:#:#̑?s9c1G#̑?s9c1G#̑?ȟ0@Bf
AKO@2CE?H6
^a?CfZ)]p:$ٻ`g6aщ7׋o).9640	v7ۓU^z<lQE^v唗/廒];&x3?"9axw-tL8 I&hDd&:ߝ?
)_ԇYsy,%5:M&[d{PS!?29	 !YܑC֓}7޿#F0Ưd.Lh#00uDa	Rݍl`.v-ѩ؍&y AjҶ~Xco
02)F!.,T*;;V`vۡnqI.9F$8n%sc>'BY&y53z#"CAKDLc1kS<&n \x
!A eyF>lUq
u&Ӕ2ŵT^&oL˔&Ӭ2%4Lm2mɓq~M(Q(,m<W_O)kJ3Km`t$^̋%1k!"ZΒUw7B|;4(,XSdAI@49yHηFڶvŜVg˵	//\ !yw'H7Y	0fU4S3#YɪWs
搕ܛ,>d%YZIטS3C88=8NQq !IqX'D,I ')x5NuXP8 }?8@%f,c۰ݏgac-{؋XE}\>Ƴwxqw<&J/R>c*>Ÿ|!go+q#_߄򻰑ߏx/=m/qwfܣ4ܯtÇ,<ǕRO)Ye>,J|Y9_Qr|_Y(RRפW:*ʷj"V5yØ4u"sX:KH2p+hס	<|n{|)VAb~Anj"|:٣qE^)Z%ρIlǭ&B*0}kDk,C|nan%Z	N8 EBQ)r
~@>_o6\3%'BEelaZ+JkAHAq77.!=xz0PL)p<!é#"*c/1KMQܭ&ՄvWC"ףCcDҔ!:@aDx\]ӄW9c"$
P<2^T(̈'"{BTJ؏@=z}uGRMm_d}Z-bᥦdڤEjui|VXSx^>۝,4ey#m[JHf[dJA:݋ }YN[l4a#1na)j
Bv;(Fw|uE
FnSדɗSVI
G	,,ACVp3͆ɆC:]8bЏcİqTC%ޝo%H\wGqȁ'処ʇfNKQ+yC!9EfZRi)jTjXri
-փS@eEɊ!MT62LSalnXχlHHH	D摂1ôrD+@:֊:X%iM"v-SKIRMn7,ՉY<j$-seY&&\fz#fڶTӵc"kKyB<[~Y֪-bx[@D&$II!؝FFHc٪n~tNKQٖ&{gUٶ7*sb>'oOa	6|
gP i\n3;檍p9DD9"3,qV,4K,.XMĞXیքO:Dʫ(aX-IЙĳ $zC6[BN` م-el\`[	+٥p9dW5laFvĮZ;p7[;:^0rF+_nQe!rƁntttDiX^r P7AĲ. g`0
Q?%f#4ZBM̴y
MFDl	"	I;Lxm)PLa-4<
pk:UIX"Tiv POR(MT)N'-R,X ]W["N@)gYP+ݫ.gwC6q6I$9FrvvR0Fp>^I"Oru g:(c[p;{bOvǞ=9x ؋$W/x
/Uބ[!{>߲W>#SD9jK\I6)]nrh[.v_mC;:gKMCԡ}"I;eK$V?[I{;YHnD!MO?BQ$Ӝ} K@Mt*_ }1ڣ~FaJ,tՄ\*3~.~C٦螢O=zҒl'7neϐWIfBO˩]R.|Mp=-;Zڭ&d4C&G\hБlkav;HHD`!Igi(O3Ppޗ"*}TSԭqN:8y 8
(0*V?-VD1
mk	vU0.^`= {#.?@0G(<Da'=R'8^ɮ!ؤ@G&DLsxG;Cpπ<6^p3
񾰍<7LwSZ4r>?X/ qe͙>]^CIŇ%m,T^3t/[UNU<qNe32ҲJB$f9G2CSn%v2L#$l~zJk&y|l@1m`hv[oYXhlq*XD-O[Ú>aMyGwMN
D9j곅%♤P$ٳ,ٹ~lC@ۤ"lE&Hv[w	=h,_I$BRl8OX%o\IZ:S֢
S^%$~ɲ UQ˰9bsH=`¾ڒN]_]lψKxĦ	cKj[нA1l4<#@pZ(h6]"dgD5w!J4ɗGC7љf]fI،IFg&E'ӓiIEY^rn8wwREʌ&!!3.	%t8",YM4$Mĸd?9'!iFeYiy|d;SKf$Ʀ6B\	i1iSɻml~0g	[F6OO%R/[헭eeZ&J.	TҠQFҠ!oZ&DrG8<).gi9Zp<Kswќp8^p]M?\M!n>9yQNl־uXDiTjE~bC"J-~d
Ur5Wr5=WwL-7sݦ+7făY<V1yLRY:S bxnJn,dbFn7n-wxox3g. ca:.qI(7A\.Onʨ^md󼆩m"f\Q}72)ʻFj[ ΤEZ^zבYk42Cfz^eRqX.ύOɢMT~+	1ցCU!yn*G.o䶺d@㕝yN[5ĻZELN @2e
RT.ٛ`trIBO!4)-!'ohY*]F~vJ"DqĹHcYӉ튨njKD-Km#f9Tngr5Bb+iqzD-(?dx	Q2MJbl"Ib6N⽅(sQj܄(wnbr;7)9;7xN1sSMǱIf Q3p@!hM,q+M4B6Ǜn&o5ޔ
p7,
zEt7դx)uTY@
6x
ޤorl}{S&bBZ蛔2$҅mZI\M@6BolBJHJg7~FmiI
<>J1RB"6'h+x
NO9Ɵ9Xȟ:_"24W,n篓)߁ !<?>sRQ
r-j;?`;1}d_8	oTތ9
b°NX(Xp/S\xƵ)1[/TY%	_VM%)Jg+][΢L6\(9l҇U)}Yҟ-SreLgjeNv)e${GWư_e;Qcܣ.~2OTfSe߫}R?QJ
oVRd)EZz@T{d$=% !@- /Bg+@<'/qUϰɅj^~%;	J;$>1RX!^oJ|Ai=R/¨KR{!HܘA`J_C(J? b]cғ?".nQ
L3  A.HTRE@ 
H2Hr?OFǟeORfsyLWŒ I3G@{.vQp>x)؈-:نh!H8$3#꞊4(H\AdNFqk'yECQHCx2(;Qn) YL3'gPpc}ԱHiSVee7i\R*%\ˍn.-:E\nf{
9un&U6{-4~o5;[6?nFnm467yd4KiDYhS)-bymq޸
ͯ56/[ %m=-͍@תgV{+,"'3RͯzMk3E'+ʓ(\E0AQIy 
̍J&jȋnĮTdH}6Tz#Lj78Fyܒ}I6FnWzrFx./}=ʥwe7Y^uB)«6e&ɭ4yՙh1]yBO-ЉKhtR4%X"^F2QZ!Ҵ$kb)rK	9r%?t@ߐt#he7CXaK!'*W*L8uf	LYMź&y[^śb=׊bIʼ	T݋WƆKbQ:0qmb&FxlNо	G%jwy_d3i!ULʍ	zwm!
/sARd^J
⥟xWppD<)exX<񬏈񬟈;x6@16]of4r%d%/ͩs#dS,AUjWk
^W7!ZJq _3+)	Ͽ'IP*q"l_ehy՜1EQWYIŴ4@e%tV.nʥS!G+`r%RVCr5Pqʵ0E5P\5
p.W5FXGveܬlmpr<
+wʝ
PF҄~ 3aTKGɴyV98></*OS4~<(2T#yrY?%6DyMV^eX:[79[dV*˕ɼݭ|W>f{O#ʧi39A|Aܥ#?y 0/P7zV9*XU,UT7?_旪&Rk8NM$QSj:H?U;/k+AV{?Ԟɛ,]Qj%FxJ:@IQ*\:H)Yj[S+uRRc:V9W,WK0^E 	НaE 0^E*!!L)3dx{)%@ZeAR,0s-;铤,;铪,J3EY%Ͱ31&,#2}Ri$>AQ$s8|$)Pdy tG<	Ɠa}޲s:\1#PH;M3aP1TG-M 2QU5t%lɢ98L60x~z+q 3d/8S<5]JڄEM,?Y1;bCgXMldk	a)R8&rͫsdū1]e]K~Kų%$Ǔ/UQspYZ.y\7AL
wg4B'	
溨G.#+Sv	$5;z%j"j}`S#lz+]l.V*יVw3;U7AO uDNDu:tVg@:@
cSa:lt΅25|8G\-krبV@zPaz&<jVu|._%z6z^]1G]
^<MD.ZZHZ"187<
"{ُ"aЁ?Wj$|	D\"q&Y,S[~Ѥ2
dmjĨAjx>3/\ʼ"ku֕{	}&('<H6_ALibdE^\͢&x8O\H
9O%ܪEqڎ!^?O{e,άN8UR(WHSB'u?'7A	F2EfPhErHÍĝ`$]u9A
̀H;Z!O=׼_̈h-iG Ւ)>a|jOp[oſ`Wńҭ%8:Kf|XA8=(g	zpRI?W#gf.xE[SavZv`[)A.GXia3a#xDb[ĶPvi](hbŧ{]cd.]Ukl~& \ɪ]e}ql.ЙxdbP^^>H2`0 LW9SRiTzy8[}V*UM}
W_&
ثI]xY}~R߇?PQ?(#4O0Ni[W3v֏6Ё|tD/U_t67 KqW󜵞guAҨ@%<g\owe{tLt;\A,؊wRV?.8<i1#uWA(d]+.,p	+xQ2Ε.8Wk\reYJNT/kK핮>*gF1\VHQOL:S%t$?SC0KaP@zppaʯ~lt)N	f\Wr-Up-͆^ASQ5B؞12bSUeښbc;$>[z:8t\E@Z$E-Fi0^4-h׼P%@hIBK˵NKZܢ6C
݆F1%ǉ;6K]oz9to8v`W4JWk%{,gPi7eɱJ%Jjz弫95v0URI>t|
=uFۿ
ĪĪeB-2^ĲZ?<m /Fk'`j0WeP8SDFҢ_E 
[*?Ps0>MK3ӈyjw8T|0*ZoVtR1'm|)EG\T;k7nHtt];w#~?lz7z7zw
n*]л?;XS.$!֜kW%WoN6<m߉(5<WSZT$	Mj`z>/YD}Lu`A,7Xz8-?"""[ED%GxDaOM]: ޹v-*rFze9=̋fHF"iP~y2.^~fxUvY
y^Um'iӐgzU;܆<O!.0$y]Aܝ 3$.Gf%%D.|h UAC[ r-Z%j`V'k-S%P-ڹ0[;N.yr(hK2RX]avVm5<J5v=៵hh[0^{k`ֈSpviwR.lkI!ttIcS:';P@[<k WʺT[Aa`6AF4-i$\ ձ[n{ JV/R)5p~
p?Dga<bX	0Eݫq~D]xU.ڽ	^-^v~q4%l$fNG? S㯑>(?(9+:r"I1^.#^I4򏆟,';&oslN:oI6Kh3}$4mCЎ>A|jy2K)l
2CzOumKSBj},}G
>*<R)yW9R)y'F*'1Q*TiBJR9ô4X4V8Bċ(L{nR8Mp$G _{,aQOX9(^	Kd
E0]{hodHWj
{p>ܭ}MDۧ}FsxB
~ #hgo;!L h8|t:Ǡhkw(@78*fb>U?F."TH\ਘG4*OpTٶl ;*f2[<
ٽz*&/fXm9hxNNB$c$"BZvtAxr{%5]M!zו~7[z½ErhggOb
9ψ+DmXۏt>q6Q{i8P$Lnk<C_|#V}꨿	}gŅO	-4L$GGv'	~j>U';(9S<~C>tW=N8[)e3QW%~wR<h)|U<?
q+Q}V?A`;{o@~u/7mۋ~1+(9d(ş
__]k>>8([YTKO>MQaǾDlє'S<m1玝y;/~sFm~OD_U|gDjݟɗ.]s<%P`WxK|)_)Ŧfgr<c%>t83#>"3^LCr<$awsgēhxHes<S&SX_(3]o)'8?-&3^xH6+pL8Wϗb3I4R/L3E4r3SN?C4+%a_-$eS#k%_=5"Nǟf'nfgIMi%U4o2	o3ƿL7=N?_+͞_(fi%^nf
gY83[4K%>%p0sN_%$cs󒠛}B_2Wy%)ڒ?Z(B/
TF|$_c)$
ؕB< Hl$'Q =Eh]\
~
)IAX;s	+)\GF
)4RC.(A(C1UGFX)p4 Dz`IOLQ|ÌKf=1Mz4csGϝf<=2l4Lf=3yBKTz^d\3gyّN9BYfWz9>D|+ڃ#̞,039̤g3f6=n3MX=#xU>$Wr=JǨ=j.нj.ԓ*=YS:=M;zguE@.׻
zOR=CBRW5zFﭮ~F}E?A\;<n=_WާQwCH>J}T>Uǩ5}>Y}G?E}_~/L;}~~~>O=fDcz4^EZ~Wjzh)ziUz苴L}K_he <@@_ЗkIz6^_M/զiEt}6K_ѯhk5F+ׯkj}v^} Ui8PU9P-ve܁.uƁ;́v:@;г@;Ч@;1r9P;Purˁ; @hMq4ǁ;3[ZC0B?A=-fJl(9ׂ81/oxAWm(U>,?Mwׂf|%E[
;>ԉq~	6FAmz}`EB?$Nq&N6=+387}(vؗ;YɖJ,˵#C~ū
ϡԿ,+
o O?H''$W(?apb"F*ھP+1S( PK   dO\7@  2  2   org/mozilla/javascript/Interpreter$DoGetVar1.classTNQ, ^B-*^(
4i0DvYqqmvOL }svI%b̜3ȍ_߾RIˈ ʐ0M5u-Y\wNߑrqö
92<C(ڈ1	q 3x,䨻:CRʐ,oW$|gHq:
\Iq$5V%\qICWuқkpE b{SF
O^*cU9CfYeM>C-LQeQ1.t.eoSʆ6vkL:.ۚj!0fKm3HzS/MM?A63_J1[_ꄸdH95WzϮ4\DN\%C٤L|v{CǇfK;]э;~v%,3L W/aEį!)K]OW\CyE׀+:<$=h5nAjtQ=OѓG^n!1h>IG	MWH䨐اv2"}$H)Sޣ|@E%'N&ګo#qwЋ02YSq).=DIG8
"	.]A7PK   dO\օ    8   org/mozilla/javascript/Interpreter$DoLiteralKeySet.classU[OQmY,rD("H(i9enA>{K|0>qΖTwsf9ǿ 0%5(jav
}a<_s7E/<AߞzN)42NM3"э0Vj_bCx~e3#c&
ܮ{0QAzg=:]d`0U5
qe*5^`O'2s/fW2ie:5-ʙ5)wpWANt1TddyLzri?'H*z&G市Heq1(zBE7kxR,;D膂^*rOXVxv"3%nI+;
d1TSRSqB|IH%M^Yrըѹũ6TyN}]`2=c9(;''bC/!)5deS._
24Ǧ%'/
Y&Mg|lS޼<>-mYǘp}-|f85]'JP8s2Di˧^ ,eDC_>s ^+`C'@!?2pP[#ZA64
'C/
n}FéOtOֶն{O(r;ن.PoS/On`FY([<&a&01?hFqL`@qL'_
IzƏ~t$Mbh/iH~>lϠM$/TJhiωfPK   dO\%
    ,   org/mozilla/javascript/ContextListener.classOK1߬u]Z xz=$ՂPzOPRIIR~4~ ?Tb`f}}|Qpi줘wUWUs_C<kjNԋRI8RBw;a 7"Wp;w="w<,ӧj#Ը[^'kOЪ/
?<P%\܍BA_
e8 \^B";vCI1C	/m1f5
PK   dO\@M    4   org/mozilla/javascript/Interpreter$DoRefIncDec.classU[OA^h- " r),\mE
&^\n;U҈`|37x34`&s; 7!
a㎻o;/bзggVI9[

Z{s'ݲ)-
cX%B+
GG#8CČQ,λƶ`x02敱^4Mږ0B>GY4gɒ7EYsheC%\Y'nu\@BCG;:j
׾^$zer:ڪ,
tetN z9]V~z9(u%301!#ʶT6]M7+LAV
6񜮶q( ;~kf!Yg'K\Ay5.iWR{/Ee<ZC-U^3͠aUR_W
qg'd}T k8(TCq̩69A?L?DPuI
rd8
bbRmQ}'5ds-\	=8*FXo
N&rIWG٠ГN{o봪m/%1`FH%wMEh=3SDdx>	mv/%C_!7a/$@oh?0t+0>}n^0)|mCBn	e";62,AVpLc1i#$@2GbPK   dO\o[H[  0'  -   org/mozilla/javascript/InterfaceAdapter.classZ	x\Wulo'Kbycf[x89RbKRdh$=Qf6@CSP%ibZĄ %Z!JR!D7H3#Mߗϒޝ7~$n7<CfsԌ
5EdR IvRĠ
8knh4<dF[Cp,~$ME1?4uxDbVEϏ9(Pc.j≡H4j6KP"2jQX*2B֥CTo|͌F{BQδ(p-NZ
mh?*QaL`Y!mfhXZtdE)	XE$=isC;9/t?Z4,XUt~Tcu,G-)`P*8*PW[X/뀽2XZh/})$VG->;é oqm,=(mIQ`ZN"39N Ѭc
,$c!f:f"f*,yPX
б
m(x)#69=D$6"ڬ#Ə9U.pZSN&T$GFSG:jśr)rS(;N$eYIoAЩz 0/'2֞HێvRݵ#zh?dF&aZɼ%}Wxn	"ZfL&Ḵ:zKÇdf,ˣf"؃7G#G;QI<w&{&j,|x.yPT (V"3=EW|y3%7(W2HK4P`5k؇һ!;^%rUL7CfubU.K̘~j}CEr
;2{"TV㠎(FDpkrJk?">@rS&wgMC\:VBdrr[R"JԬ]D9zR,MHK"X	ߒ6I?V
oqDBct60->[kߩ%Vn"hSw򠶽'leqk;%[t܉	.ʻ3~g.1.!OqG)U%k>i[Ǉ6W[lJHS
nKg֚pB`LA"1|"\ȠW!{bW'd Ox4	<YWs`cZIH⤆Ok
;âb%-^m.yAE3)<ᴎOyBL,K)<㳲\{mﾱZ/d
#@FDT>1Bw'Q
[}b<`5q癓V۵Lĸ4+h'	_YY;J'bG5"t|_Ύ$:g${s|ŹD⛄_K5p5^Ƿ{d̮,|G]t<
UV?tGٵ<Hmx4l|GH?1~R8,duuuwѺ~Vg:?zv0?	KAW-cR֤LK<; VbC?o)}xkp(T)~DXݽcEfFVdA%H|+{yuc3ٞwuu|$b/+^BȷvrV%3MM6u7f!vճQcxvc=jo[^DCK|xf]PL3H<.js	W~KnJqK.'tp9j
KPOd(f<-9%/ݣV34V	ȂP.Cn6eS2S4㐗tu`:L'.&&'2?5amHc]ଅwvԒcy.aDs+4ռv]T)B#%5~L2Ug ,%D8I$m!axdI(yWd3viyUSL_˜e,N~<lzKrRۘ|鉧Xt@]?]$+4|c3jQP&orjvTb.RnKon3{.˼;̴⁑O_6}¶$?s}-tP-3]U߲ER2X,PNj(42Xƶ IY8<ʆ1(Z=pq͸Aw=)<V\Z΢VЂ~ncQҫ!hudMǱ%cX7+1lq='Qi&oɉ'{5QfĽ\'rnWO
{q\䳲8ﺞqt/1m,3
ѠT4;ymYD
`%/2ЀZA6Wk܂+VlĻz c+> Chchy\oG1::K>_N]]?Jp:i%?JQ@Sx;~^Gڛ0! _a4ȑt$~z'zYx:_
xA(/QőϢ+ \z3%584|J)
kxP(4jX2/m8`@
QAQIMԅq,Gʁps}W7630eZ7<=cj'1?58p^lA꼡~ҿ0͈Q;V*.䶗+Gvwe[㷡oWENQżӸ#Z9#kg%GBjdpթFG.R,JԋEb1gZ2<tҰv-[	
IKK;+ެ1"Iv:M,}MZFEBH׫<z69.-=>!h?Neyx7=XR-*tQ:.	#TD*_UoFf{??=fAr"_mhIQƺU*R3]WwRP%!mpR?0tD)?xH8T*CqVq:M%Xǎ% 1˵WĔO(;uqEFre&%=ԨF uYR%X4rJ?[gnaQ[uVɵLUe%pLP$J:MkQqmFjdQ!ho\myJaP{TQp-nPP#䨙sR
'n5S.ypD:x+dspNh_ǒ5|[YgDc
>8>/7^#LӆtOY:~Ň[dy
<ݠ$:}K6*:I	;|k?8e۰Z~sKjʥUT~"ݠSD$tï^]ѩ`5p8{LL/b3>S/_%.}
"ැƷm;]ֲga>z;X~-?~rFZNUb=(>R7+FJtMtĕf]Jp$Z F&#0#ÈsVq-խKlWQFlYY&V)ʭy䠴`59Ryt	ZSW@[Z]VgJ2<&(7fF*f8e^ɘqN=+pdQfj$PfQfs9i6I{*`hU	:ZNC\^Δ>
FGPK   dO\1ۛ6    ,   org/mozilla/javascript/Hashtable$Entry.classUmSU~n^^kE
ڴ7KH0m Zu	vqwT%q#񃣟:㏲>&i&ٳ{9>so	;b&hhݰwLv
Y8	D@&_lyNdgTjP03m롽Rn/Xg["k ub֊
Nxe0.Щ[vn(WP:MtmJnҞ;~4ftA@ӪdRHMƎϯ	t
MN5'q
E;& I^ICKVEC&a	Q<ò:[ʢ:;rYi]E`\2>.]

4B~^բdtkQq7
2rs]k+WqvR5qQUYZtwM-MFb08jadO
r;t<sx쪑qI#D4#ЬHԡ]{/b|a(z>ʌm_T&%GU*CPAО
`XAot>vA}6P`ЅIp^$^/)GM8^Vlڜi/
|}HԲ̬J_&2UG0Ћ)|iLdy
V#m?ENYm[YDkCt$_!!uy^Sz1߈|'q<TV{RO4âiI}4YCt<EJ#ojG/GJ_{:/P=E_;BzIY*>Y1G51YJ
lOYFpo=
yM+s3(S]QT*tjTB)#X}/yC@_*K%څŪZWIܠI'GɋuZgRU+vۯzNeN#+t񱺝5P<2N29[MSG(sFmاJGϱFElpeRSU&C7=[Ѓi3te
y*oPK   dO\|  n
  $   org/mozilla/javascript/SlotMap.classV]wE~MvPj͊@AЄ &iQcѴԊoRݸ˵?xSz;/OL~rygxyg \ŧ)a\"f"C?(tnm_a3pQ%rs0w~ktdon9GGHJLa
GM."G~QF\	Z])ڶQXY4R Xc
JtGLL@Cf1ͭIL	z;m'c6f&Vv'@&[â[K#K%'b{ 2qFhA {8UgdPj<),V;hSǾɈ!+X _!{Xd"Hd^g	VN^WN/RNCEP` X"⊮\|# jC ɜ̿)>anGFi&ݼ]D7#lB(-sx =&4q6MͭX-76]~v8#^<\o']nZ^%`@^Ve'Jx͚G蕶͋&>&΀!1yאcAq4^/|>Q[xL
+V|?aeXr-w:f2^%+rwy-RJ`%FW< -7	SIoQcLKWƵƻ_l(qL_8-DKC"#1&qFH\:8{#;w7xAL1B?$x"A3^A
|C)u椲Jp_j}'%PG"6@1>cKcԹeJ)-eb$PK   dO\K'  (  /   org/mozilla/javascript/BuiltInSlot$Getter.classQN0-m҄BH- P)C7"W&l~Z| pR8X]ήf^V/ NqC:gR*ق?qiYYvQKegEJ{|-G5xBdևG8ldВ+s%=^U0ْаj8zÔ$2/[;ݧJɟ=d
֙1'wOBV{SghD8ڜ
a0+
/7FArR&WuƠ8Ğ^PK   dO\hp    &   org/mozilla/javascript/UniqueTag.classUmSU~.IeY
$}@iimؔ(!X$Wزٍ?3~UN;~C㹛"ꇻ{_/^/4t  #NSOYN9kڦ!HK:CqSiY<%]kVT6uvҷWGN1t7r㿢kTGtVY3
Ayܽ++sk
bxTJֲ6>%QMYtǅT]&j"%ÙD6i7HkB\8{OEA
㸬 #	*^6p| \Hf]پY9* -{7
T9=h5J~GU\c]qImcզ6uB
IŻa"&!	L'-	߲QjQQ=@/Qofs^BT#cyyK-c OC'C|2-Vk-qD
D08!qwLb&<)ߌ4*ꡯ+APfKV"iyĒ)}zS>-y=8eOݎN5({a(i9%^1wmvޘ8jnqqU1xnYyi]n'<2\_P|F7MY*cH-i߇~E}
#yX>H>Q(&+	!mڵ?CyYo/䌎et!E'cJ;!5b~C~OP~xV3?iZ/1!c _A}'
Ɛ@W1&Kx($ӻӀkĹ8H{GG/|A5N|cԟqIz1E(57CH7QeJlJD%lP^$D1ʫ4 '/npGH1OBVN"GJVk>'AW6coPK   dO\djM  i  >   org/mozilla/javascript/BuiltInSlot$PropDescriptionSetter.classSN1=DD[C"nPcȆ]!3?+~?2vM!.ss{o/ m!E8Vo߫Ad\ߓ*hPǣkiB)fؒ};2
e{\&ňu%'dXGs5Q/{͙8iMk˚_JJi׿SNg(wCyhMO"ƭڍl3W!視w4AL dx]tD \I<$TUp"Y$-%ʘAf-d.gv)VPHpװnl,2vy9
TPK   dO\Io    2   org/mozilla/javascript/NativeObject$KeySet$1.classTOYng`("EEqڎH
?Xj-&5K{-2sK[D4Y}4fn5tw;;=+(aхn jsx)Q9t7eȥ%ןL;%!rÍdę^ nFl<Ws
κ+Lv%$,$m ӹҞ:1HΆ0l!ec?0LtCU!a8}T13Gl1*U@q]_,?ژ@rT2awb.
~%Z.MøFץA^XDMrՋ3jDgN=OTW\۔ݡ[tkk/PYR\!C.=*`RN\_u>Pm[ᡫޛASmPIOІ'FPC^8
Ŷ;vT~voIϡW@&St/UzHݜmGQo)eqU&<WEXC?^M#RQvE8(ԭF31Nۻ0kD'ݮW:@2>L}2.*1Zǜ`[X5.Fcc% ψ_0bK5#xUˍi!鹋%f	NQF|xIQC˨tkzn*RĒ7hsMmJQ.Jkc~am'(8w8p|j
1L#cf~e#u9dq":]ڢrQm&'?쨊̫bST>j9ffV],A	7Hna^bAOv ב!х(6:PK   dO\|    2   org/mozilla/javascript/NativeObject$EntrySet.classS]kA=M66jTf>HqnE?@/Ww6ƚwٽwΜ{;3~|
9$rFa#PwH!?a_#iPuՋ} ][6YaX2<w>ZnK_CRZ8P?KYMyL,ުvmq.0ΐ
剈*n2TfI(n'اE{4	{!Ͻ.WҌc0eM8ے
BϸC"$uJjV4cr9)JݙJڞv8gzRE2쵦;Hci0ٕշE!}v<W,S갰k!M:],,V(E^9\$y
	vmXw4J`0eKc*yhi,`%JgdSBsR{JuIꍈs0:7BN#ߜ>uR*ʑ]íq2f
y*q'	PK   dO\              org/mozilla/javascript/debug/ PK   dO\    -   org/mozilla/javascript/debug/DebugFrame.classRMO1},Y~H(ڽ)i"Eā1ڬд굇c)hYcg{3 F&F21N:ѩ'i#F2D@XrQ&4:db	?VW9X]SۙMęI,1!SIhU.LF4G.׉ȎQP	jɔQU*6o ذ%Lʼ%"	wtu|*sifW!P#&1<yUO~Mr_VK݄|,pR>0	s7r<졹R\ҫRiVX99جd;6^Ju
&:ܷ4؆77 bS"[qK'y{hq;-OXA{e}"*8 T=cOlσtY!/Jx{Va׊YXPK   dO\\$      3   org/mozilla/javascript/debug/DebuggableObject.class;o>sNv&Ft̜DĲ̂Ԥt}꟔\  RedLO-qL)fdЌAWb_Zꖙ
TnH##30-be`؁$ PK   dO\=  a  3   org/mozilla/javascript/debug/DebuggableScript.classQN1=Uy/:эWF!!`qLJf:a᧹(c){sOϽ
+#He';c/f+/XG
b6t%1?,T5=	[`ZjPT#6)MAN~}Jr4JܧPkL۰wbBu7Ljx}i.CV<{dIآ5.4O&37|;[ͻ-uGբ{f쮼׊qF<6c\2A{;@fZnᰉŶw#=c`'{8PK   dO\t>    +   org/mozilla/javascript/debug/Debugger.classRN1}+  ^Ń{GFݺ춤,W^=~-Md3oޤo/ npREptj%SOxH)UxFS΄$=D
d_INH.
}{J|Y,]BAwLz*1lPH~#m
ec?.b"愋mxI8M	 z=(2Be:vSPIh|[nq[#7@U6>tm*BLUѓj[8ŮWkub>'i*l!qc׫PK   dO\41  +  6   org/mozilla/javascript/Interpreter$DoIfNullUndef.classTmOP~.(q'{!Qc$-]biCOWB@~&=> 
	>~	43Jf麜Ye[)jU-}vhefh͙`"Z 
JhĐ`1/%ۑwec%liUUshЎ\#;u0oVX!pAB7.2`q˚VZ5Ъ+~e%	8ɦ""+J5ڧ'~08].-REn9<xdK5]wb
]S[",֖Tk^^ih*([_o@#r*5/M2?"Og_JA%ss*ziDW<Do]y)C[aVp!c͚3w4RCTyl
ZPPm8)Cn,:ZF>ZeH2O!n&R~]	ބ@6!Pv,zA_F(H`іH6"l3.o)멇[w*K
i}{HH!0n~۴i#uc{b Ḟ	84[OrC1PK   dO\|OC    *   org/mozilla/javascript/CodeGenerator.class}|efL&d%	MAz@@@%YB$$!X#P}$ b.g˳KwΝ&!{s3wn=sp{ (ta4AARYEQeKKJ=,
TTW)(+2W
b RzLuLpɠK3C`E48z ްbQU%=*]3!Z20**K*ߤw6JS\SZUi@\whEE`*N4!	HU^IN!N!j&teʋK#K11}GzWV]MݛGu~`)Uʯ(6	=o@	i,	[RY\$)_\sϫd;'byNpnYECUEK\p	}0E|*@J$oe={LuA?8À&dA6l+PY3O'(V2ʬ)hScÁ=`@ݚN;V` 3Ą03y
)ӼT@r"5|?ehàEQjTuiAUqYfي Xs	`<2ib($WS܌6wlވU,2pk	Й&L<9Azskh\y
TN)"G[etWUR[up	E<RdQΧH#́
M\O)AQeeニ%)iQOS楦?te	dGEna	%"=Tw[e&BX]UQ],ٴ'Zx4
7l.;4=I<MXKj

)=\4=iWըI/0a\@S2`DI4qtE&\Lv/n4$PYp	
4ŕQ3r+EUi,AdXIY|kw'CV\cµ4WI2!\\QY5|Hr	7+:"QKON*Ʉ5O.mb­p(0&ŝPQv~і"IyZo؈?PXSZ\<c1&{8Rq2E͂LѴaxJ@]
}ЄhNAw&
z؄Gh& :&ax+c&l>}&F..o_K	۩KpFwi)fn9eUewyFxz҄aD(ˉigxr9u	iG1Uv	E9e(\hhU9'R8Mxp.+	Lx@Bl(0i9DΛ
}?UMm;oYbI^Y(cUރ
#^Vj06Ǯ	'|jg$M TS/LݖbM1c7
t绌Mk΄im\PUhOT	j^E(aہӀL>iFp#˰"=xApbRaJ5KlaY5O(\ՌYQJ6ۙ0d>L.v{kZhc3'jBHd.$.0
f,ZZxd~c8BZKDұCK*b)Z,pTIխLZIU= |&kK
n5g|O2Y2{QRPE\XudUeB39ֵD;&K!cU;,`i&Kg:_XVU9#
n!K.cX_̪J;=7~'=i~䳈+Pe3RelXJ!]l d&6!EHgtjivlFlF'9,-6l1rfQ^YXAi`,'3xk9	,@BsL4$ST*l23XɦFYYxM'L6XciUj=X<}5,!iH)7eT"+@5l
]I;yXpJ2~bōcNaJ8_2CʔC<4V& L8YS2YRsI
v>ͶdK	
G8ub2NMv-FubRv,фP9"ϔ[hd
]Ig֔@Qp*"R`Lv5yJ3"ص&"*OuyR8I7F[(٩"X&!\3Yb[]^]ez5:ZެɧÓX4*.v;[NSl0FveUkkpdЕ
Tђo-a\7Qf=Ll P1?_ͧpjɶVPv³ɶ6U_T5Ԛl;.ZJ,N=Nkn=x 	(SAR#z)k\*+Eb/!2?cgI,w}d/P޴NoMbDBm/%pXV^
G"WAn7Ak0N!-|.#p'0c6ٻ/
V++`Dl	,<L}`GQ1pX :9UfFFe3QaU-.C|d'dW5CZQT(0ٗx޲EAthT؜}moY-#)jGsZdG4u0H+~4O *Y?&%#:d?PEV)9'Ο;_&5QrhT%6l%h]\X][."լ\gjMVGRqrtf%!"C]A˥5[)҂A4oO~B;+Qiik-|$SFX=&@+a&lC4[ɽ5[x/yhϦڳm2!I<TAX,T>1&;ZV7
"`;0nǶn&N,69=L'Օ4KZSLd&z2yoQЬ|=S}J
Vl%3Mޏcn0/Ha'xɳ	&DBDb
1P
2&AX++KR&хOj:yyiBg;;A L{x|!O9_F	=x`LOy П0ь6 0ͧftf&MU$7PU0OYO:'[&?ٺёex'3tL>!M9%+0yraS5y8PUzC}曼DA_]^oqRq
W}%Z/Tm+]4D8Β"$NӉ~KL_."8WhUyn~!_nL~1ABT'@UlPq~W[dqɯ.C	L~5	U\JiJcx<PP\D@=fuurM~m+	TTQrBM&_%wL͙0ka#:lYy93F"
IN

 `s֔IQ}-iW\T=?L͠$?q'D,63AGДcQ28E}e
('CerFZ5=Q)Fa-:I¢ct2
ʪ+
֚LV]QZQUU*¹'yI&bb6<;sWcDTW"Ю6)lOdK
'yB9$OQ,E="48yℑ+t6r	HV!@ADrS`+p'#~l4ND!C7fVmy,x+Qi3TsKmgXq̠+@ew<bʹUO>", %jpdpC@Oخ<h8 U)B"v'^#|R{whMKҎSyʎygI 2"rY/+lGXTHPy^:[hD/?#K*d?jȆqM#*ڧ*'(T81.V{"JIe#(T&aeɏKaXXXBtK g<_]D'{xEhtb/β$8(K9304
Tbt*,4)-&r)lhVlcRߣl!leuUpjM[Ĺռ@R7GFѥc`;ڱ*7_\ST^ApvڈCmV
uU- 6..m/EpID5+CJ-r̱8qTr?un܊P6wn'Yg:b	mun,S?cQ",͊u3Rq<+wJ;SIKXމ/
*!	ю6*'I^INXX00ХiTڥ7n}.`v;QS{
jo^F˗Ԭ^`y.Z@dPwd2:U,VVVf0PneS+=bx31e"˃s;1g\ &b)tt2E
\`n+CZD߽=ȂJdW-_]~I!5ZK|lI$fN)R`8`!44d4g^"C/Chysl'2<5mQ1AwEY:Cp Ǩ7	߂wߊEݯ^#a;a3:vy;~W|4mJ1u#ĻVQŪ" ZbϓɑqKշsū:l'A k;0?ÿbo5/&`5}5v+vn<
zABWpB
$@h=XkZ{}nAV43h(tZZ״Z. JK7k?M	ßW?NIX߆`Z
̤am0+=uPj;/|Jt
z-
3076)>i:(ÑG 3yh)Lp,n	ٸ
}-tYȥQ*mPGceex6la`8We
,3v(EJ\xY"
HkaPA!UdJLRfi>ɍ{;WHUwqܽ/Qz "
!<D2Ds9dBDU%0.@D/ñ,XEx .JXwWpB0p|<O8(W]6DU5qށW|;`Q("
ɠwOf
;qXà

-ו/=*aK;`:p=kaq6xmPnG]+U)zjuK5^
*
OAn	2M	3X9-fI,@şkLZUg;i
m#kAq݆
q#kB40ӱκG~Bo?Ug6̽n̱ەk*#4sԲ5,޾î;ۺ]ض[eû5Zk;Xzt{525ߍhV^Zfp;
wـ°΃M(wc=ps~x!60GXya+k2?lcPfB-Y@5=O=
O47<"o/)+GM9 ||<Rp$:2.(c㊩	$kCH~.%;5&Bf$F%VB;ZtH8
:ڀpf( qڙް#0{kD2+-9 qȭb`R4?Xvl.pLzeIĺvh#}2TzYzۨ²l`Pc7sL_*rk@3~Uԛ)oAOxTsFnym{6GE*#(&*%)p(bYB(P꒬QyW|+l?^a|ǀ8
1(0v<mcɁ]fZXoam
%E=WecpqB^-=ͧL	y+4D$Q>Yæc႟ LA|pK44_-_1d3:gdGa>3<2q0q`$M όT;Su8XGVchCok{u+q>'Yan:X
RCr-;Ga'w2yh	tàgZ4JFY0ӽeEyQ7确|--٧;lEǃW ~B<8կߠ3jnr؟o4؇QOA+chG%,ux2rU7WP*^h@F{ElC75kGWDahcwvE 1ʀЧ\VjSua[_j-+16@Zb;@ٌVO"	yGIkTN$5!	Hd:3R̥0Z.=o.DI^_n
Gqxpt6v abk'#I b"S-F
h":wq1p tʒ)G}]].,[N^WSo
i_V~ֺXxM`Cp:5x=zDK^Q^oM>kCb_o
x
NS\`e+?Dg9SF0c՝!rO$PVcu|:q#:!qz'}-udVgPX!j~J{_ǛT^jIoρ!b9<OY+SB߳W	d/eS01"`wvOR&Tݜ W{
4O0l~9\BꞆ<=l@+?Wb3i!^լC|jtsU7L=4|fmV>>HƝ'9->T-נeБtghC3h3KzFr\=\lGFux^8)Ex{2sGU?^S
-Ĳ,zb]L{0![*"Ǳk{)Z0deqLyΠ~!ӟP2qI$֒<y0]?W0j
e|r?~02ۈPapٽ!pk#LE7QkN`q1*l<kڱT֞el Ć,|f=NbE7+a2Q%b6b؍l4agwؙl3cyleS+,6>`3\žF~Uy\xY	𮬔2އ~cU|4+l>-EB~WR_V*v5_ͮkunc.vɟglmMKvdك`	m-e[E{TtbۄՊ^ld;D6)hKɞؓ\WD9{Z\ًj,Bm/aC}$Ň}"cğsq}!Ka_˖;ن}/۳dW~W9&GXa9qɋ8s.BʥsM=#-> _^*Oo$1Ov+Q~˻ȟxw'OG:mYkTRW6C/NiJ'BZga**%=`إ{ѧJ0{ƊrhÒ[܆d
/l,"	֢D'%Cc,9D&\Awpsagvˡ'Kn&Q\!ƿP5zaKSC/U!*-ÿ(Z;:@c(v9ƝIoK(Uqn]|ˣК]gWG1AEU^aQHց`o36#MDS+	ZԲK\cZƴҍna+aN. QN)L-Aѽ_ x9Б_'Щ^Zug̰zW~u1Ně3ɾssf	=>ym?Aúwq޺.)f:׌~3zs[?C'O;ЙU]ô$\Fq8y}ľ^nL3}.NPT[ hGR8<`w(yW&_Z!}g]{
{,{я
./4"wM.֐c=8/ӎ|v2ue${m{>tj>tI|6q-ڞL}zw+tqѼdO8\~W^qUhhH
!5*8"u#$֢C!蕮 iuTY{X:{pX:jط;w21X '{lӬcLV8D	mݧ/a9՞|=Z~5ְ7N5&KsBc#$+?{ފg?iHXLX&s:!WR
EA"ڃtl;%HlhKBoH[Nԯ
iOru]	ɽgH)մmUMoL^hOQEH`߾FH:0hqxջ	Ʉn~;6B;8Gb"=<&'E=>0	7>u3DڍuҮ=}rD65ѤmDX5F=ڒ-{"8ؐw 2W0bƟ\co wc6r>d`_ִ
;6 5,Ǟ8lim񜵢'uǎǠVw}~AVδB{YkCq*ky{0L>0zjyp0A؆cBǣ,V޴EDihn,-bZa`ZM;`v87QHMLTrqudF
T+bupUäשY`|#o͍]FbtWɭs
m=+BO0p{iOWp)bx?mxE*(N|#P>Jbg\1O"'LQ'|Oq/yȃn>W<cX'|4//2
/_*|/2/e,RW9|ǯ&y=E;:o!Qnwɭ|;<$?{?,[1@|T1ŷi^Z"ߡu;5?\wiZ6ߣOjcSZ.N|6r-/k״ڍ
v[j{}%*iCڧ3Wv3_-zFȿ{'/Yw}Cgo}.?~>ӗ	_*~uB]$%v֟1^U/鯈["EO?~S#2EOOK?*zL12"ۈ6bQ6F1%Fb1D#xc5Lc3"(Sb1(gc8׸D2EX#kEq"a1xD;y1xxYTo*}Qm|*߈b8":nq#^\h).q::]>Epd*bc1J\'uL93jqcXX nvuJqqM]$s< B-~vIYٱ_lq9_w8&v:5%v9=bxƙ$uv93C+^ufם[qmo3(>rV!JsyyƹE|.s;Wş7_wSqd%w*;K%åK#c\^j+=d"4se$@#ۻredu:Wvvn|Z&S]4ו2up=]^{ekvm] 9: ^\d9Qw*s]	n!'Lwi,w<IN}lw?9=PGɠ{,rO3d{\.̽H/+e{t_+w7e;E%2\~W^HFAޤt[ 	CUN2!BJb)M'61
tpbWUJ!@cѲ)&͢	ƒy j~"8Jc!^~φϷ[8he3.;CG+a0}A
ܥUZ٥-*b­`+k+T6VuC<?LuِΏ.EЍŒLrb4"4"[iD743+qyJFj;@qD+%AwΊ7{}:;>
	CFME2~'jS9?H4@mG6^G`(j+vfvqfwtddǠ?b4{h#DӚ#zVmM48cc|1c1G`8{XW.cWgZۏ.~ݠ+ߺL^gzD-v˓lϩX_M!9DSrc|*jyJ<5S=D8,B
.yʵ o$yt ]0X
c0Ig`|f(c?ne8C)%<A%D](BW*D߾q$=O
W[P%lS>
q1U+kdxO5Or""tJ,[۬{ ut"߉b,(
Nky-~kBp5EOg4pfOs}MF}M{ɭ^?)Hp-o#=w5tNH!C>IȒ{Os0C2̓@|Dȃp|oMM` fl`_^
<+;xU~o=|,<z]5tVX0[H"XПni=#Z>^?b.<
)2Q	!zպ
ޛ\X"ap3ilc\6PŌءIi["짓oE\O/Z:ֺiR54LJ=Be?
8}fb8kyPrzLdMbi^Z^i=[(XfݶlX4O_{jVH7c_$F7-J\4IH?-q!8i7~K#F;7n*rtM;KpB6	YZK%@Z+Pk
jm`WkpnÝZبu
kI-z~-^2M'O~N_v3e1b̣
a^m⃥@]%
B([f^}h'o	˄
KlK_
BhgaN052,G-y:1vzLJd~R,x
Xvlb6{=D
tiLj8] kyI%m^)#
@ZS@gxƀ ,b,T6]qb!E D-FkS W
i0E	3zs`6jEH˴~%p JVY6iհ[;hKUm)-wv	|]
kOڕvѮ!PK*!"#mFbJt8j1^(7^TDIyk|aelSgAiZ'{r·o;b7zд>j7AgfD'؎Maڔ]؎
@G%fsl'Ο==ѭ:"@dji(e!0ҽZ:y
VlVQ9{S8x|#":W=-D㞂k)=A#ֻg2'z<DraD{^/ESȽw@Njv*Mhڽ0@k '?3Ar(ն"?
GQU!m'lvnT{8B*gppEhnT/`
uUp+n[-uEQnCB'n1Gam[n1Y{1)GN h{2eJk/r/:^
c}&}8sX[eM
ڦӐ'<{fjd=_9d9}NW}N+ϵ4։O'O\J{	t^F譽* MwH7TkR}%GH菑ПzS_>Ǵa
<}{xA	^~aI[5BW#~&	
vڄn[Dp L%/Ɋ
QljL(|P{k3Ap<IFODP(¼|\`xVf3r[Y Kc>}0,y+KAd:Mu=O:2Sdڧ{^c";
i409u&{Q'(찿fq0r&zJOLT;t7hn{}zHq2n=	R~;ߠ|2cpv 5 ht]ٺ9ԗ`}nBKXLop6	p
BzkxHo5mY=^Г
wNջOzwK@OUbG)C''dC?xlcDQelPxVDDOmђ
 V5«fѪ!ܛ@cֻ{u#<ACM}oHW9"n??L@!:LP}
Gb
TlxaE8ä3@{}~d}~:<i&at }`T4'-XI9uD	cmڸK
m$z1+):ЇX}ԇG&&a'IrI<^<4:$*	s+
8p㡅x"z"
#Zۖ#ۣQ{]5_{ъ=sT=oɁ>	?3*%~M9}מi!-s&
%moP7$HFXwa5!HV-ڼݮ	T"\LF]ÃT'&yIq䪩ҧ!gM8}tgB~6Y0F
z0SJ"MF2'2YBp=PH5Qfab|%K!A/GXn#aQ9"{ %[hĦޠ1(tW=X4OJu6@j$ʏlC@=)5|A:$`,
!:g`{QWO^īdR,^訆x}C}	N/D3A~1_2XeB"^f1;x9Jh/(ʁȆ"l#K"Yu^Yxh0V#O F%
q#>8ng)MIHH9WfWҋ7+3~ƫyQV`hlD^=2iկE	zh I[WCz균~%6UH A7^t@ @{Ea`'
v7(3:EPJeP*^F7Z>ܠ䤻&%/l,wGM51Q]Qzmmݘ*uO(lXPbIP{lv.Q)7"\Ak=0D`j֏aZ_ )LԫpLl$ٙ29
$v0mojr_|ibB>$g'ߘSAfqK@/oA{鏡.A]zt;ݎG!đ-gmY,2H+*Aj
yⷩh 
P&"HF3϶aq;YƄn}7'2NtoDA-{+Un	Vދ+?"&+w']k#oEs-	JC]D_xc?,<UMMz%h@Ej֗JDGP &@;E,>4=I$Os!n6T??fyؒ_{]h܃}xnOíi
wԍHu7C.v5(A]#dW쪭+궽F5܉aMx'*iûӭ
w14DSԿ@KQնwa07ZD{<!Tt01(yq<Cvh$oNh
zzOd3>i}<ꓻOHFwz~ț?Ag4^-oQWj	ΧLRy~4~5!CSɩ7Fr_HddGdỳ(2#mN2%7!92(ay|oYgR֕0ś0Vw{hh֟H@>_+Qu"	! 4C̆.ea0@AVPbru#)iEz#W<
!`ʻqBMd9il?iqz<QůitIH$gt4H8ތ!'&!V
D]"FwB5JO (6l6OLyRo^\˯mT.}gjOR7NK26QZR2Oݨ(</9&Wu/Zu9`Ff02H/`t4c0ȄF?lg\#BcpF*"Paf5HEYtvl$xYLi/	6^㥶	^=^6˖0^
`x;;;#;#;;c;9q\$Ι<8ȏߣ0la_ݣ	wX1eGW7}bxioݿaٻݺ
at82sq.d`15
|	}NP&40
cm	&=JX**}g)sv^>3]Y"Cs졌mWR#B!F2Rgkى*g'6;Y]8@U*8f{~g0G=B<da(CUQBlT@OU0ĨI"n,2ڸ
g[pȰQ^s;E/Kojć`}vfzVߦ"~胡Ot~}!v)ף|=;07*{5f̏lfmlzpؙHIa>S>YYȒ+%/G<_]+!Xby50ƵQqڹ
eHDD48(x,-h;Noco&"kosPY}>uO/mF^q#Hc5kP܌sA/c]DwAt#[-2IWCQb0Y'luz]| $jQvOc|u
&;]zd
HMQ4t5.ڳRJ ԆT!EɛՍ_n>>p!he|rZ7YuðE_]
V'hnQ_(8Ȳֆ9ZhKb0vH6"ƃ1Zƈ)CS4b*5P;!ps+% |PK   dO\p0&  c  *   org/mozilla/javascript/NativePromise.class\	`T>dea6,/
4I *@FB	
;ֺPRV*KݵjkZn[V7/o$ҿw}{zϹ&|kMR"A^t|}Qjk#΋4U5#6:wyѪ8X],>3| )`PФt2R`VG5֯5EsxɘW2gFS
ʺor2)ˠlzȐ]ʔ$oI=h65ׂPtU[1"RǤ4k"uյj&^l1L9ys<V;1,R?H&
AL˛kcN󣑪xWY'PǙ4D:e5FexAC ,jYud:~:^jQGGLD#Gbvy1a;h\*ET;<eGU&8Zoխ\ZaG,G42
hA\>Am)x/Ov54ѤItVEjkFu~4vH/2i2ԧ:<Vu|v4^SX%ҭqSފ`T;DyTǡ!J%7%=ք'lbBdH<7&*Z`BZt$W1.[-)#TWY!Z!է^NvYiUxM.D!%2lg/KNYRxH&DAa2(`G:MP¤1
J5M5pܥVCǥ$ GJjiwiBjӘ&wtmU՛ ~?ZѤ&蹢cC5FYI
i`**'赪iuō^͈G
w.K
̤Ծ>IntIcc}5MoIG:R:Ufʢy5Ӥ.XUa6MAWzSYFW,+5n0tcj\Pg)ҳ|yJ.3df8!]Tn[Zoҭt\MɌ5	߫뫣:rX ;LS&kDGʫhpnTsW'K{LJi5m\:Tt/K.6=fMz)/]z4JGgd!dԴ$FLaGw´~z8H㊑uxܤm?L:C04)1,ݑpդSG]z+.JXar]R?bJj1g2X'n_1>S]r#
eX|M=tᲸ½x#VILzYhf,u?yA^MIY
%@,LΘXS~	VFuH:}O~l[Q|gRG-7btuɳŒX!eަwE?c>SU.-X$3-*4S_}h/M,%uuZ1U7i{>?XRŝI2c3#
azhN?G}	}j_-&9ݕP9~es|&CTը4XRO%9ήܤ4BF.)/7It{L}p=uiukk2+NKccR~YGxAd
E/H]u%86~z98&8;!oh$fu}Ʌ>Ƚ}L|MS<96H<:1Nta
eQ;A<A&σS%Nkcm'y<a||:5vzhzَN6Ngp\8$Ee|#Uqɺ-m;6QCMNki$ݞdך<{noXǙ<'vw@N<sAҲ20kɓĩp8}#WL,,/U2"HxS%DSL.Ӏ́!M%h\MBc]bO54.֝mΎU5#M+ﬓ$?|ertij6jәk[sL+[-aL}'靇 #90y/D8*ҸıȐ#Z߈!BQɋy	S?uъ
ha)>R,ds94BϡlD5For+iO\Bn.N:/3yI49fye#=JYuv3yu\ϔ*2ZQi3&Q;>-d^(ʖyM-LKteC;!@L]QwBrb|cM%dw_j[|SV>L
Wb%V^3D|8k6vq*6
wWdنo98ڳPl۴&oT0RیXq=jm&w0)آ.4]`y0] Ì L@099;I> oo1^/9
@0ŚR?kqH=&~dEo6[LaϏϏ.6FuZS.ЮV$Nw
#/_jC-LM\)T)@ZML)41
]eb]>CLKϙ~G&(\MMQq/

$2ORw=:_3&.nC[]2xhL(]PkRM^V?嫮`Z'N01c.qfno;1:necKnOX]>Aڽ5$Bh&ɿHX]ɿ$(Rty*x?>ng;HkAG$u~$?1Si?pc+"Ft,fߥih͙?MD|<u·|+:JCL[W}	(6R+G"&\.n\!kt	QH!Q>NκF(GUWG)jobLڪKkk+"vh][WLJŪYNdPu)A(B|ګkT!S)D2Uo3*FЏixveKWjJH.hX"7xxplifgwNf8u2
&bu9ͫE+MPY}UvalWzz{}X5+_	dggL
#{1=9SvAّxؠD)N;3"ZUz?-ИtbW0q+6Dke
ѪdmODV&<U1މ_VE,sǟX؝z۷̊'fy$V;3?A_ĵSe5Xr(P.-4w%"f)8_rMrM
iXf@yhr=<,וQ^c[֪YzPڊIG;L鉠Wr
UdzM.G*j m;#rzܽgbVbVêŐNngV f,yԉdPZdpkҽ<=۹eXp&C&!Cː(jzv{ț?--h0w=nFm[}.$ڝ"ꜷZ;`$18wu7`l{;\mҺ!jJd1\/"N2';R+iO"X^13ÞipsMQuڨĮ-{Z}}\\)f
AT_7iQ|Q6mƫVE#!'%&kh@4CClҩWLo
I5@[M~_Coj=fO4@L1m&_LuP@;Lu zZ]&+3&3j5	5@/@/^
5SP.ئgA
WFxRŵ%X^;7>k;Bcwзp,M=o
=?2Տ[r$Kk=X@Jꢍ:8QHA)1UNw}K+1-Aj-H1u=ޝ[~4KB1o)1
LR0x{ߟϾρ4X
x+(%5Û GDy;ZNyBy;o7AӱmOhCx>ydc^trƴpjun12Ћݔ[MEÉvPlFywV: ''S LK $ NK  NO e]4'ś34_L`T-pޟ " ,C|t^
ԣ9Vj.r<-s()D`Ky>QUR!-Dr6z/MpvdK'4U2bO7j
vў]sZ?z٠\K ւ=,O7RFB3v']Uhݔ	i_YMWU懽;蚢ZWk6B?ۋWG'U^ih+
Bcv^%c'WJ.
{yTOT4|O}%PS)3+6zG]NqiY@^xsƠ8jNF5^ibԳx5SDg|JiYCacdj2
 QĠ-
1	
昒OW2m6Ṋi`}s]A	
Λ04<omo[ r}(Jj);i{fFvL:Bt1WJ	"	iTwN{P/
ԫ0t^N]
{mio%淃KS\^>":m z>|V#"\MSMTdL!iCtڅJ	!`NRSlQàf7@82E\X+.uiIYbPw	Ds|9rJ2LܡQ#|KD0PSAX,ՀdEz=v$>u4
wЛEVQoO&35Gʰ Ep /+
v'פEڏ<^.@
`<:7e`6u`::TFnICósNK.  &
exl~z=OV- 5bc:YaO\4x-v]@YG:zAKfV]c"9?@}+*q
2^ 
5/z[7W9YmOxH@z`cpg`bЎBxߵwԀááá͡Lt/zPZ>=-Xdd=Ğq{pvaؓ!c6m0>16LRM`/tDoeB˨.%]"Ǆ΁'&~L(Pڃ/ ^>s0}0硊/˫x׀U`5pu`}n7a<?GFokY1+aH#VGfZm1T0%6eCTm*W7[;XA@cSGLp
|L7@q:u}ah('ݵVD_/
?Ew#+g[)TЯAhE/F
ZW)qAqС3-p0/ߎeQI-zjq8~"+
bE,;@?"}>A\)z|SDEw?}FK Ҝ/erT/r]BpViu`fӵa^z\t(G,b9"|}\!n|Ct_">@휠FAer\H3 BvNd{ X;AI5{Z6oe=$/d%i(h,	IN#(Φ%C˸5pZ
Gע|=ʷ|7{X	>㹛h52Q PM.߲Qw|~Ƿlw|˃oY.߲{lH5ФfH~w
zݪ)JpӜpZh?X+6 '<285ry,8:SOx+^a#bȥɶ
۴Dߗj!$܅Bp'h\Ha'۳{R>mV6Nzqa؊u*0]4)S`1hЉ|4˨QJ^Bp]a"iNM:$GQ:\6OD=Yr;{.:YwL!μq V2zHy.~-|N>n'X/="6P-!{7ƫoODb'§ [h!!ұLE(
Ju>!ꙟb[idH<r+&SiHn.ޠ{y2B|
Z:WAum|xF*f%]KE/Rz/.[rm
DKH?E<uD:>nqGC>:P(TED"Zh3Y}>H<?H/Eؾ-zol̼V>+ϻz?AI|-:uԓ	muve曎;HdgA(s'/G!_,7R:0COz:]:xXoBipKL]\#4z
B^u(~/IC.=ӬY9,rfYd2=tZ"Y4YFkJ6t6˫Pc.퍬ނ4ol'$yLL!41 
\[f|	݃ĞpŗnzlW|4A:)V߂{|Q#|vHpy4<*|tyQgk~#T|
sU̛)Q,ޚۖ jvkZG-Evoz58%x
*yhnSAVkM	i]1ugb;SuR*j+Sx${iv0\q+HS<%bLOLhb#|a_~A.rևރy	^MH	НX4'4?j҅7'8YAj9<sŎwzqY;F
w$a}H e|H:[ͷG`7#Xm6fĿ%'O'I,BJ/030s0`0 yfSRXB<t:F7*alƮwazfl]ֹ8$^cMpV9;֎ϕs9d~@}e;5_؋''/h;@yS "`Nkʠt[ɦ@,~TztՋ0-s:F3i>:n"\;aҹutL,ه$h됤zžj<!DՆ> Rٵ:jӇ%}*k

|egNYZ45Nko<Q_?7ޓY>oya,90{錻K6yϋIJr+?.LDrF*:THú4X$2T̔tdC*&H"/Rg>!yRنl<専"QLg
>39]KC"-}V;(l»ѷѣlg@Ph/|N~m=tj r䠶fʣ<^
GǓU>OU<M5K.Sxj"/Rx:QEQ'qTM5͉i^5dmbD^+QT+haxV|)[9g|hq3F&9Y/SS-B$썯Dom_w}/6ms˥s3o35Ɋ<DfCwއtg{%*Bm?O|Iٟ~#?tք<Sүs

i4/iz { =[m
_-/j)[ZM`uv 9hS
Wd3
N<5<><2?4EC3 _hWv&P}YS[vY:n `-| m%O3>`̀mx/320woH~ÿk6
X=9_sx??6}>.|\;qۤ8nr/Ʒol}Q7Սo__7砾C>Ϗ]</yv=/g86wڍ7ַ4|s,|wk`wgdK(	|_\SvO§^}g<
ѹׅa7oFzihU/8*Nv7ԍ>>ąol6V7ҍn7^*4RDLy^y4DrgAd{c\L})(_]7.|G{%n|Ʒ΍".\r2=h C܃vO:Imۭ9ܡ2:ulfb&;HrO~2MMs;ph.fI(/筭G4=#\ǭ~.%BV/*vK7V;PM.G,	l`l:
m*Ȁa/
rz:0O-y?yBp7)?\~	hɓCdt0'^h!dse&ΣKW&=)Yef\2 c}T/ʐm	p]mζ&!ἡ2=;T߽k,]KCC>KW`^AJy@@^@^<
YG ($~_fKJGr9([J}#flX.KwRt-l\b\ WtgS  0+uVuF2[ygSF<ɫүVאյm#*xfJS׫sIC7[inKL6$AH$A'A&AJMcCo@ٟP-XX-v&ߝ~~/OHv3̙SUxC7l3OI]fK{W3)xz0~xҗףSkBPK   dO\tP4  )
  .   org/mozilla/javascript/TopLevel$Builtins.classRSWƿ
 V,	AP hkjkဇ&9/ho7}q:t	gk0Vaȏk׾? `ޜ}fc(dk흳W暙m/ZYBBم3jL>i!_58eHHb>Zv^u<Mu$"lsMM
v48sD2V&L8͉Hl+[!SY
Gͼ픯YvN󮲞O:v*ʋIt*/.-DC^=
'Fn\'1ITop/qgVIeD|=="qx#W~m#	5RG#*lĔY(vL3|Gט̋<)NцϏ%O'R>
c8%13Y;oƒ*7k{Kbx)2( /hkFh.nG˲(
2t9gPyWaЍ[y}<s:6/P@@DIE`6{$̨boIj'h)ViV,=9c!Kȿ{)"I;cd
R3c5'Lxp(5:EJb3Y8/rf
좓1'-G̘w.A|a0/GjsL}tjiNnmU߯ 1S|gn{|yga>>|9LUQp{.	{MJûYc)Chq!4_S?TqM+D%#V][;Q)T\)TA>zX/[PJ<S*OCm*Cc*L @VBvm.B!JECG=<"="l0Jh0Ah0Ia!z|>RSo?PK{E%  ER5ZA:E#K/5ZK^K[Yerz.VynV.YEY구XױaXt +Wo`5ĪGXd7:ꢾ(Kz	VfVYMzCoa7b!>;PEuz簏bpu6=/+=1?pD E0QSZ1A{)>c~/7?"~oֿ PK   dO\=<qx  p  /   org/mozilla/javascript/NativeContinuation.classV[WWN2pjB@"(Qn
EtapɄb/Ч>اɇk{VWkBHVq-`e̙}g~} y .}dxeVsѼҹ,)iSvg,>!ʜ-hՓ|Ul}II[Ofhm&/2dT0Ti)Ӳ&N3b%c	3I;)#wU2vR_Lڢ0W4dӑAGGCݢ׭bz5iڭLD2̰6nT[-+^̐EmLT(̄mDO0Й8ʞ va{db/þR	"VPcii[p
r=D`KϫUo/^Hip(8CHFm𼒞Tu"gv8_y38#>v
Gծg/ΏnrLm+RI}xʷ.3-V"éx 'C~Qg6vGoWfi>rF)ެQg0@d?niEm6z4$,bmYSc(ujI^n
6:1,Dԛqor0ΰicJZ;PQ//GnI.#I4Y<;~qlrlrz|`[8$zR,i$H&ޔBٔyy)AJ=C%k	O1eIfP߂ajߴP˛s	͎"t eN
@&UBN0ps;W[IX	*{MR-v ܶΣ	ȩ:ƫبo0т@8ڈrViBގc(RQ
Sl
DG=c^!unj8	3cڠΣ߹!n Gqa&\EZOraބ)\ʽL+hMtN3{="WxrV oMao9
$7eReK*Gk
%|u`[V RN*iMܹiw&?~ֆ"XpQ#inuB:cxZc;,7;#	Q;}gT`
E~,WHKio\D
̗̗̗[#,9.2RھǾUxmH#sA6Ѽm,}EȲZ27Rɼ=B罂P%'Ҋg=XjN4d5౑z͏CzʃjnߵW(!zi#Rh[#>s%n֬_eVD˹k}܇clοFQj<[16Xu"EDFA!@sF8Lf]GE٘XqҸJuĊCx"6?z|N`O
'@d-u\N{x ^/^U܁-IB` J'>ٲνzaTA/#X4X4J84(Z($]A3פF޻}>M"o0=9[IO?PK   dO\(Sw  3
  <   org/mozilla/javascript/NativeGlobal$EvalLambdaFunction.classVWU2!N!k("X)jHD۪%y
tf;7\t]
st9+=.xL
$"w_}iab)*:"ECj,rb
6w^uSya!2d,tat)x*h9^)|,e2.ǰ=ҝxNrR2YN][7>JaCK];A7zDUBc-kS%ef+UcIViWC?uvc@WCE:w3V:0N0)O͔
yR:Nkn?qSS1,}6n$>O7+;(2w00$_0 )3-3atJaylrfӡIZQƢsۇǾ";VdS*ޑA4ԙf2w-`Xn9[FΨxW6v
N]'k̍vV;]U	ݩI>R/XI8SKӗ_(zCs*0FXʆs[#eCig$h]ٓM\*E#rK^Wub+#ftVFڸC_|/QǊ3LPՌ(F}p,ɏFfl2tIۼ"iK.}MR[5(uw?g5eḋbYڼ귅dOQTq:t*6a4M=|?h4v\˾
Am},,kVmkup^®8.Ԭi
ۛ2*Զnq)7FKVF#KϫƂm)I5zFvtB}s,aك
>FpA#;8&wއ~կCkoR;)ٳC=(ܖ~:F4s$FwC̐<Mxgs<Ly'|y#7٧xg/~VH:
zN UZ?_7ȯe?Uf=BҪ''~'Lz	$Kt'-s|(Yߡ?}_ӯ
i5_$b.PK   dO\J1u  p
  0   org/mozilla/javascript/Interpreter$DoThrow.classVmSU~.$&l)RR@,}SR
$J-KX`鲛n ?זZ3g7x]Hsy?瞳?S E
hRFe]Mm8_M+fOioנ^|ZMtchaڦ1@FDBTA3dtw
!z.4gNY/e?5!O]J*)8v6u_gMoU%NRyg%cMƜe<$Mt3$YuksDm=?W,z/e1v /oGU%*x}v2DD&%mđ.):EĠ!)sq-8+.fo1֓"a\pEU\c!;gFQ_ztvqftvem_";xW4n0(0[}ߣ薫WrՍ%mGL=X,M6TQJ㨂(6X)5	ڍ=Ih`?]6*|2p*Fy7xpVC͘´9.+p<VC!M3Rv?Ƭ"Ȼ:dcꖍZ-i󺩸mGE	->O-*-Ӧm*w%nɟ!ͤiFNA2r߹5͘CK
fsԭej<u,l!/9'SvEJԭ*h^`jd3zETCV!M^8/לGfۆ+	:r`J{p:p7ݴ"!?
GWBgX
с`2):򳃎]vZ~o
!gp^}/ڕ@㾵>.<H`	eD0(	!WHC:&#R FKR.:BO.tJ8&i1G:qQN 'F忄wGy/s*@~XE[i	(iW0	1*:'.qFF-bE"TLHFXn(J"IxAI{V	nF_PK   dO\Ć    5   org/mozilla/javascript/Interpreter$DoLineChange.classU[OQN/,EX/xYDV*"o" /Ë.F}x m5ń͞3g曙3O 0+R:`Zq./>yhN]-OZG,/AÖ]s[lnҐ
]w!!Q@UF^-OHHujQXoj"hq+jTK
e@q`H;U.9Cv?p+IƧ0ᴎ380όӑU*յLi8cF!W[tٵy+gu"F5"0tSwZ^#f_)-YrEةfνJ\CɷG[p&cTc&ݐtXm<utcq̖ŋ:R66wq4K9q\0T+-
ЯG;^o-PkPԻ"~(,A4@D);UƂ^e
jo{cD3Q(&!TO~4@AvEhz
ثgL7Hr0+-m$Ism=D>$rl'-ͤ8?~$
H~mi2r7`/4([tnR SP_	fW18zw
	Yq7"RirIMt@'Ak.2$31OLPK   dO\9#K  
  (   org/mozilla/javascript/MemberBox$2.classVSUn&aR5VZRIB *@&Z627L3:m|n҆؝޻{s (P4f8㸵ܖiYznC=5EnorwڹcuKvzAڏh"ѭoqxIj,ݮ5Z!
*z4aiucS(mTX~ZЁJz18p0UbʭUnns
puaZBCB	
ǧdx>D
nS- 9h9]8A
q!FFC*]%Fu2jZ0MsH&ɦ{*2Fp3GL!fg9ȩ2϶_!
ɐ;ܕ6[ʌc~CtR(͙*.(^k*5lZW5LWi'txb؋# Ū5]
'ehIF'RVWEG`a%svهCzJ`ƩQ5_+ڈCuה{BESɶ1'[3mZ5Atm|NuAwl%
Ec1|T*Jy\PEwk;b1Cm]ăZn0Jfʹukwٺ0wxwNL=P'Ѝ9}ϗeSPŇbc`޿tR"RN5)k(KU2s6,#F5T!s{
8f8t-Sy++msw={*LL,estIk=75@=}$H^L=D}<3r,PB͜~j\6F/Lm,Qho>+(
9zFAK~RPٴ8Jb%_!;M(Dl ?} EC$;do!
^G;	|XKDWo!O!_-/)D"'{x'CG7R,ic `bzº6X'd]$<.U,@H$'IG@'I
VX6$mP
$**&wq1}DUT,X
IZ1>ip2q~<,
{@|kX0Ky:6PK   dO\:'C  >
  7   org/mozilla/javascript/PolicySecurityController$3.classVmSU~.	,mI!`B+MiKmA4h*es	[6
f~gTЙ::~G9{w$s?p]hCDCTG;:n8n9[q6-gmY+e;Ea\;:%Ciz$\hQ:'wBg[IWpxI/r6tgpᬒrJ\C0B^h,9
:`h_^$LO1Dңnq^ڹp+GsO&[5H""!k^A+W(fhE5r
5I\LT ;&<>)n<FYRHkՑCE`:h5wi:!]-Bc[=
7A=@T()nrb" XQN踋7N&mՂ,!A4p9i(>6D7!"I%ͫ(Kʺpu(*wMQG(ȭ Eo:RE%E]Elsγ[y;:Vpl:35a;hG'3SOakaFٟlUv͙ҷfxIYJmXGg)z1!dq*$7JgK#	[F)CQ
e9ݹb\?xt9ħǧʫjڙF=XS|s3`Hh3mgK'hs\_c2]G5lժ>LPV19T!\4}A*NAŽ_3JOAɬʌd[k7/@#]j$"xfҘȌewe;=*)vNM!wpPv?M3໸2&߼RLnd)X^y7\x:
=zBR %1H'ޥ@{^sx<<ȋS'J(Q,e|R(bUQRx@c'qBV#ц'Nq=e\PK   dO\}M9    4   org/mozilla/javascript/Interpreter$DoRefNsName.classUYSP.
-A"lRVZR`'k
&2 ϮoθPYs=wϖϿ޽p7cC0"[J-8MSC3\rݲۙ=߭K<96(USw3e
g{nghᔥۥ<7tЬ@S-ź}'
Sf`(v`]*vcC[
S'Ccv|Jꝱ:iE8؇!/;k1dc8C
T$7Epb\\,rag"U`[TqGE,
LjkMm098Ke^1(6gexX5vj8Ur]GZA!:$^
BgHs޴yIዡ%5XLpppEnTDLl5kȆWBYVqQca=TcwMnAl>PtpȖ[V	ؔ1, à*:æȹV,)d!
GW0JM>`5gܕ{ʡz9XUO
z6@	9`ц$xKSTдJeDo>$j ~0G'zR+(}tr(@Sl:}
ͽF?H<h@<0-Ew=#W^7hѨ}B=j_׾A׾k?$ 2pC2"%q
<Z?m\E yD\|ЮK:Yt9ݤ'kuHsyIcDDo PK   dO\)d    *   org/mozilla/javascript/NativeArray$2.classS]OA=C
 Vle0&ѸI
:ݎepkvDy	?AEδ63w=dߟ>[Y ecc(hOww.OXRn++6☿1mTV	8`]kdldc("^Om}ק*2g9idnOh%*jD;2.CZʢ48wǐFzvrƌ9⚳qd!z-
`cI#(]t
xqvjՓܓGD]ڂa!Cu["~[e&σ-K&-	WIqSǼ+vTZa%rOkrO^Rhrw/(ag@hc
I5hT{i:KHԃH#l/E\xt&-X/0%D*Dg-r̙#w>c`Edb2
i?G5Ci-m=5Z1ЅeA|Y) (~G>bb˄WpuH_'X>P$_
-U+nL	7M53VPK   dO\/~E  s  8   org/mozilla/javascript/Parser$PerFunctionVariables.classTRU ML`Y+KlBad⵼*5>ULYW,,$UNv__N pw@g
]ϡ[
#u=k
k׬ JM9aP;r)B/zNWR y{UhVsl|#J!#pX`-5@{Q<s
|ۺm8*q֎$lx~([n|L%^b:=,qz\kSUM8T1jF_
i3oH*-_&xY,	\6cF`\"n2!H|?!
2eKL> .H\4=ZuQf諒mz/ㅖ!I@J~P';"1˖)56߲[:uKay5lJNݳf@vʣF.܅la_|
ml$cڱk7I>4:]půYo;@`}O] y]W`?Hs-&f#PT͠K'חDd>rZC6Y<̻V";0BCےǊIImNVsӄKKߤo1}dx@LIjߐvHn"F?+1N2P1h1VFY!$+9VǸqEVfXcW
_*R!Ujgȩ1>ƌWԧXPaI}u%n
qJ
2V #qHXoq3H!Ɂ.aGD<'c\v"NrщxKN"s1>,]2ԷSQcD=z̩~I&IjDհ-s`^a6PK   dO\    <   org/mozilla/javascript/Parser$DestructuringArrayResult.classQMO0~ܦ_!+%:6V2ӴIU(ꁛYU A*Ca?`?jkwh;,󼱟`E
%3~Ø'd&"P>g*j1j;<4,RF\eB}Vys%BdyL%1ve`T
\0?i3lCӰ1pv*~a>u'L#ev14W$ڊdC}N3]6CԢ/I"T	2C*i]<dMF	-Tv[XD%8XYp=Цo{ւxiSZ6$le[xm7.TPK   dO\I    1   org/mozilla/javascript/Interpreter$DoRegExp.classUmOA~/'P-*/Ki`B	Xk#-k4~[h/rrMnvfyfv_ `)b&`k;o<|&eW
z@uKڞ[rx0tٮ-tf-N$$M0gۂ!nopҕI@
Ha,Cʖ\h*6r{SQ&y[
\2qa	jKʪv7D1"芉*x AfrЩOVR2qJj3r+U-#
I▁1fJݕ=Z/y[CBqL+Y${Je]]\^bxwָoaLԹQ`0DCXuU˯g&ؖ}
<h,vZ0tZiZphugLP2ϪW-hTtmE @x0|zfuG4Ṗ80za`1\DZbЏ0vyd<<AoFr6[
$e=ON4a4q>DlvWM޾qH}n{B<Dѕ!kOZSS޳@%Wя!
f)(
,֋X]ϑIXDd</PK   dO\#-8-x  p
  @   org/mozilla/javascript/NativeJavaMap$NativeJavaMapIterator.classW[WWdE#REDKZBAj"hk00ﷷ>kvyC._bW/3]I	$m\3眽}p[? 8t	dtl6{ds̥\{΋`	sl6Yezhzm	:"cAPףAa`U;ؿAt	*01R:s*c`D͔#r31t,ṶGƤ|mf "RMجC"^Yn{v&xVx֕
-s#R%b6;^ƫve+1]qMS@h-%,H5eR11I6*	@L̼% 0Vۺ"O)
fAZͨΌ.y*+'tl|Ћgt2,VQ3mkZypz<~G`P`[)͂d-6VdU_Iw30*GInZ	x)Me> 5pRҖ7lSN˥ dܤIg0&g]snL1pWGU]K0c$^*ʠEWU}Xx
zYԚ\ʤYmf,7gg3CG}*L;Ώ0'OK-ϲBa$cz.T
Y9ğ@}cg-ٻX$S$Rl E.6F.gYb;'[㋐#5ZDĥvԀ"
iϘܨ9kb"ܑ.u	L]d_Q,p(S7WJnx0:4,6Z:te]ʷ̤Odݔ5h(nV:jcٜ'Xپb`g^gux)sy[|x|uyK;O4gGqhn
1~~ojkjΓ.ֈf	V'}T6zR5e + \? 7!u"wʕkc5'ޤd-lmDؚG-JҌWQ\".?qPKwJ4c:Q
Gb2	|]+qEX*aI9n1.㵼 0:KtvoOk}}W<s`x{'yHZ]qGSS?{Կۢů@Қ]}>	moooK#?*kU.ZXv`m4
z M>-~on!
yH+~H#WH	Hh',a>B PK   dO\D  !  &   org/mozilla/javascript/Arguments.classX{`TW7i2@LRMKR(	!ȃ%l0i'3̄GVRu}juUQ![w[ݺuڪ֭v]h+-;$C"{S~Q ׉=ȂM]NyXoM_P8%#BNl
[o1	
H(TV^
<:&AᔆX@I<`"#E#[3lh@8\AҐ#!k$bs+2IJHI.b
_r	PA:M򩆉X4M笚9ԶH.&`%:fb?DcP$Mp [cV/]8[G\nps1OC
R;Z"	׈	h;cQ+ԡU:1_6"GHƒu,B׶Hpjl))VI	dz
uԡ>3';wm)kźuY^/]DR\+j0(n,CF$Pᴑ=ep"o
X3i0j5iJ
t`@8kNdl"V!$EIhG:2xj7Sh)OcSg"fTAK]:c#ħ߈%k3ã8Q?
.ԗw7c)=2.ޫ}LrLۃ j("PJ_ŢN+3<8ޕ@Hخ!*P|CͼJc#WjB1SEu6 F"a:b)p}eG*wKGRȀ)M!
	u aef(WR,h2_ߪѵc}{w>pWfJRm4kV#!kHy/N q7>L+ 	>.P2س1ސVT[Sfh"e܋0Kǧi&`8"3:>N@I>n{Wɠ[=%&gl5q@)=/:!?}HʽHh*d%ӎ\@m$㨌-2-xp_pBI1A\J!Fq@ Gܰ$C'lp:$Čp h0{cRi+#8fEwH&U;oˏ#LHԿx
OsˤҾ~jwut+IlQ.փg}
};0FN%-Řr2x^:~L`՚٫IbU|QZ5gŮo ^SI3Yʔ$?2~.0Mv;##50D1:>̕e)I-mQ+:~_RD}o5cҿɍ+
_kL&j$
Oo[i[K4t$_aj~
Ɍe<i\WK%ᜎ?<7F<Jڵ3RIxGKśd7b@j-ַlx<QKxYgykCgPR*МKrj%&̎65ʖ?$߭9jul-_&]3+74gWw\Ҳ,03lф'`@<n6AI8Bkl
BM2pRUkcup=aU^K)0+ŉ~"ݶ-.o!Z̈+l6uL,/
楲=Yb	k0gm&Ks{Ols4P!(Op$qE*8:'IRv#h3$iA8ZD#iB["#("uWsin33 81.l>]ոzNeg-''g
|WV9v&1u(>RJƜTMﳟ"qr
q0V䯩~m68=
7bG09uA,m>}sdSXr.:zF~ATbTBuxy rALB~:FhlPb0a'`n679(G!D
j,"4c!Zq
}=j׳m@rMWJ*|-Χƾa-^`G
::'S#\fǋjpaq>=b:j.Ȗ, ˅W9xC<بwD>5\:TDҐWC;5Q݅oA3&[h먢()nVzgK,yvMxZ+"v/&u[HԀ:so:b#+Yrn᜝<V#IpGWCǒW:Ç7w'M7ɑ(KG1I6]KۦDʟ!|$i`)3͍I>Kl%HpǹF">:V}SIS|!p?ƽ'|iaUg٫u<KtA)^7F\5@-w]$n47&j4RNʅ=<J4<F&aŲ8ϐ/Ak
uVW{je=i͒4kez'u ?*EKFܝFeIKGw5)m?h9@>~N9#IL}	dcozII
DD~o	L	lC(|4E!:U!~YDb_˒ʔ%)3bTRˍ( (1Z6 #VLW?	+˗$_zP_{TU˰sڷ ?|j/C8q~a?bKH_	 x }_d
sWI1FMoI^N)VQF3Tn]R~2؂I\.vlr*(^[G6sy3wQBm)oۭU4BCȦ?OaJ"T}WkPcKg<XԴ("˃RXǇ-=,=\J)T4S4Y,(MrcKxR	OQ$2Jv2lW*#gĥ@>Qx$'+=(p朿h)")r::mWݏ>W[X` \1wߩuۼ(-|{>i㼰G#Y5q*W۸A^Kz·<gꨅͧaOj]Z%w?-Tu{<EN8Cs}T~%}yᇬ3߼GL?fvK/);^iel0~~.5|bz<~8=Y&?8Ǔʷ帽t
RrS"QJ~ǭR1sFg1GܔR̦_$8ϋ9b.};ϊy*IJB3dQ%G6kQ%;+Ŕ\.ajADl8(]'!9@F96`}?rIsw>xΠ}ॣ{k^G>{W96QuN>Mydsī>iƯSNWW66p6]+t,!dMLm"
m>dDsw%ޥPR~MB@[J\<;j1*A"6!s~
(e[1ͱVb$tWg03|=W>gLڜ0,뱵2	]3ՄA'J0bQFzrZEfVJDfr$AK$AKXɑצFאvvAaw2!o9n8'D4VeB,۰n,nXc\g%m13RLPK   dO\~  O  <   org/mozilla/javascript/NativeProxy$NativeProxyFunction.classRFZQӐ@ӆ6HqB
*(1G	䆒δ%7kz0=va<Vss_~p
+=md)̑XSGٴvAp\'0ؙs`ϯ<pZpJCDG+te
ϔ\+t<̚5}{g[7G*C2>԰3<7
q:BA}0	#]ɇ㮍tBḆ:_n,{u;-Y(]djFjAH+SzGЋ4q1nX(a`'ooxc,!5"	/nЋvXݘ:pni|ikÔ?0`5$jW!V!~*[
cY[#x_eCB	s7|fx9~SY-efXc1ʙyʜ	M!9(VM*)-HGB#͆vt4COYrYު=YZƏꮜ-.ʆ@z2tמ+m]!,#+JciO
eehϺl:9T+Ichb
1(G!uLQW2Czt,%Ǔh'Vlc#^ڰ09E3Je8B}3* xb>뺶?U0;1F4b(,hdg4?a>]ۡd>V^FnrEmj&:n_@bbZZIDБ_ѵl(%R~'{8V
>h>n5%S"`,7K~T·H$&x
|~Yϐ5y!eʱϱ 9btȃJBdOG|	
\T.d%=Oei5" s&^	8*sf՗=r,zy|^.]WUl04j#iс	|IOUz"5	vQ	m7YF[v*
\;hK >{IM^E>zT]SQIC̄M
WP7,Y&D˿PK   dO\7؄y)    1   org/mozilla/javascript/Interpreter$DoString.classT]o0=^f-Z1] ⡈JU4	x
dIP@!G!&2ھkڿ~	!vsX@ʄa!Na<n<rBw$/E8
[m?ؑn<EGr EdM,PK➷`HG;V^uq`?
G6XFDy:{KX㪅(1diU?x.9nȰ@IG0
);/a_	E8;࡫G|^;gh2b"ZB[Nd3	,yf$+>΄a̩08"RC	Rq=WTaΫ"OHf<]j
&=ysJ>|cX'@}# KԳ	a싞LF>+d[&`fK߰Tb>|tn5c,Qz7J	-amI);*jURvыTEԖ	m5»wPK   dO\`P5i  w  3   org/mozilla/javascript/Interpreter$DoNegative.classUmSW~.$u)I-)``T_*j _tY۸vb~:~_
ΨmB=H
ds~'(Ѕn,rGe]ϳ;=;rBw%6-?J(=bQ&N~ճ!w,CRy80J Vmϛ
dF|ϰz]	;҉+
cDez~mStߌ`Y(r|f`/>g8qD
pO2tX};Wu6+ǰ80`Sď]/[:ѱ͐1°[/9㶔-0/9cax|n"ÎsPJX$ǔG6zGdٓKH`5&;n-hTH1S
n魻Lme-١-f.I
[0p*De-j\^t"UWu֐?tU*<c]z\DzUzxAuD3!PnS3SB*i#9gr28hIYWB:/MKA3PAiñnm<}p,0F')aL(WOhf!}D`cVOqx#	sRef X,{ʹ|=e^1Tq'jobCb.]}*`9x8$+ԉ5-QN[83:ngq

[V(M*qyH Pޚg9.q]	Z2h::	2 A4 F<iJ	PK   dO\e  '
  4   org/mozilla/javascript/Interpreter$DoVarIncDec.classV[lSe}k-Φ0˺`c
p];NOxI'	VmL1L/>fqAX1m߾sߋ+^dTB6Ce܌ThTأiiZNX2aˈZ"]cq7<^Ӡ0,@c7ӧx^t?p\ueIK'I|Qoo+Z,RڹG[
B3
a`f,ܶ͢x/J;<9ѥY?,<
Ȁg&FV"Xҥ2e0YabK$6b]zK9)XJٓ3%v-0uK]SumLmj/V`%*QP:@mɘemb[=i)t9"Nݬf({4ΈDtӋ5xVZcȽ[';zMv7p3Lla=He_xBI{kIhSV 4.Ĝe+hUTN$;-S[m(nwhf0n)NE4jMFLO']FĐkQ4$=z贺
å3T3ᤜsNG}p=LZivS,#2#i"hhz"%"+O#7UĴ:vW\i2K+WXdOn%߱kI4N!aTYKtӃѱ?hVACr5kv?pcy8r9
88ʴroXoQ%Z􄵁qvY肱nך>w]sY_.KYl(fc3]E_" #Z1q;Ǳp%̀<e+x[οD.>Y<>_Fi0lu*\ʕn5{ -xr,(BxY7TUJ
^7*\ǩB[yE8N R+twtKlu˶Nx(mF~C%^(]D!ZI:n	P
5WUb6|)$M:gץioU_薑RR*\tB'hBT,:욿?}x	䋓(`#ԈSQ'`81<t1>q	ħ8".'WqI|k_Oq/C`B|JlX5XHvX7įm;-~gv?!;bÇ#x1gv!kQ,D<i[LN߄ӳl:in̤sPN4%(7װܨa^Բ!^Աqx%#d\(f&G",Io`X5 ;1ű
c|[AQ#ԬI:# ߤu2}XkI?$l3L,(=%؏l8	.A:` _ a/| PK   dO\@?    8   org/mozilla/javascript/Interpreter$DoGetPropNoWarn.classU[S@.mT^QQ[@xoVZ
>8!5ی ?﯎g7SJٳ9{.ߞ۾-%Ѕn(bG\]tYmdF-9u4u
Ӗc̵8zHР3v``g,
=e)
]+ /-ы$C/.]7qclmr;6X)-Hqlձ
XXbި3h٫oLU/3)O`'vq؍=CmjTN`$zF\\@iQh؇qʓԫ[3#avmH[(:bTA9mT0<NLJ\\JRJfCAѽ @)(ea4;4kg_HpǢ??\XfSVދZHzyKN*a(N}g.Qcvcwp[}lng*u53FCCHrgH.MӖ{٘Q~pKfK#<5>.񖡘\9zHn1,=EzpD+gxVy^pǔIK\uX*z%6x?'M$k :LqZd[	N~?"}}ƀ+r7Lhj7I)q95'qgȦM`"4'_+Ng #8KS$28
EҞV񸀋p0Yr$A8JAq	YDV	PK   dO\Ҫ    .   org/mozilla/javascript/NewLiteralStorage.classYxTg~pd fjh	JP!9d&L(nZoժmiZlu*!HM]ڽZu]wu/vk3 }} |w(jJ.
xLxSٓܟlK{v
kST~a Thd{3Φ֭-M3dM{
*!2MLAB(75/VNCfb|Zɞ{V:a3^ yh9敲,bb]_Zu"?7h|uzS|G&eeL5O
5-*L,`nVj

i?ؿ3DaJm`:#L{>J*\QΞWbRX&#&*RAL:oȯ6*ZY)&WX.*M[-75xB}7Rir%OeS"ĵNǧ ~G]W ojכX^[hۢ0ri3`$zQ
1	16g3V6O[+F4oZhm
.qZ)L,Qv&N%(@ⷰe2pˍ~=O5,jI7+*.ےki*؆N)˄zwAP+'oa"]Bveڄ3v's±D/v
ea3/[=!YB@Yɞq$cb@:/cbufn߇Ag&k D.'Y>tK+bqmͥn ރ7^zI3vĢ
ʴ.*;e>0sK|\-&6*~&el1>n[''E"S&>{6Y¾pR`rrUӌL<PO.f2鞶e
3cbl{-!	] 6eX;;ˇadI1

,Ι-I|T_=juX赲A<?6U**XpL,xRK Qvuǥ`Ss#NNq zSEXk9=&9Pnk@KMOciψs/FI9Jls!eBRڅ2!Jw3Zg?Ut.j9.]ADe[h0!Z8ﴲv֒aSܚ̦yȑߝbVڿIZW6a[uZ{	gǐIګ'iPoГ<ʐgA,h+<e_L>α)JLf&6gr)ALr|Ycd-84BлʹQY]S_rE^Ѯ[/ݳhJI2+nDQ,>sn-REgеw` ?9p˖YqdQh=56	ZN/gN5s>$}z(b@ִ|CxVeK:C}v)rQ엩R.[/!Ql>O̜b3Z\FKb&i+/ə.gBf$}:ԊǞG~-@#~}sC0}~O#ł
oC)^!z*>#J.Sccǌh3Ѻ>
<>6=Oc|sQz>f @1Ԓu.'yZ؀gXE)|_[i~ui/qxo3N~/)l"9.Q(r01술D1?F=vҞ.FH|tii"F9bڇWh뢞GO
u=63Bz5W/A4R5E5ESY|%_}ɏ%9Z;DC%#xk]o#VRu%j}/jfs4բ!]KdA=:G#.wd=	3(RGYJA
wogxu;W{@{?nMFMd4p΁WՍIg-V3Y2,U<ϓX5uMވIl|GߌxbGNc	lm2Na7#ah
D'qaDbi
FH$R.l,K!6erA F.81NVN~ɅѰ+
.i/,>aDg(	C?;]1%yw
B(9F>[+nzR=ǖBK;
3IMf4bR񡐢C$\xPGP	CW
Gx**w<߉n=G1ͬ`}`u	Kfbg;ɷ;;qgnJdx8x8"/c7)+ܯ _TY595yUru7vQIҽxڃPw>?K<.K3_&Z71~BtLJh)z3"OW*U<az5js~
Ѣ(iVW*SW5G ܏bR/K_k>z	א))'H9GοANɾfiCzp=^e^zW+]atd6`5N$&ֻ<tW5h_&zY^((R%cxA|{Aa Y,=MF1ܞa|c\fg8H@4iv1u&}:Gg+^^*5F~w<GDg8peSP/(jq(_j
c@+SmSƷ0lG	ݏ1>9|՟OB{X#Ox݁A{4>ρaC'ѩrMjP"泅MX_O3vgk:Fh<yPbC9[l(g@|e9ؠ-Vrߋh|I`z]B̓*o$)kF=, 9->rHմ8+/?y̏euYsgjY.gQ3CA;v(8>Qvd+jq
UKuVy[**ƉDQmë/j'\BT3%Es,G}*⾮VG^KW{Jjpǽao\:Rޥ]q!/3GZNS]m\|8;ZIF"3b*3Ml\/Hv-v+U˘Mo!i[8)7y+j:~IL(:o|RoV)JsLC}0cc#Q>?9DWFp(窯9K.utçϕ>TZù-LL(v9UUAB )).g5Ӧ9ydWE@tOMŷF)sOOM~k"V"̆9z]O)`0UzcJ5RTBR/J<.Uz}2s{<fyPU2_c݅3S1M3#fjPK   dO\ 
    (   org/mozilla/javascript/ES6Iterator.classX	TTf6Ժ$6QFYTF3D4mt[钶MӨHMbK4w{9=8e.P5x`A<]5Mfޯ"hªi}ieD,)ڠ''˛.{kMq4/
YFRInònHƭWkI^4&5հ/(7&oG&Xẋ
Ԙ1`hb
q
"i*)ft RObPJ4bXZ`g.6Su״[h6tE{\xbGHZ{aVl/ֆ*:|`};¨[PP|
Pl<z|pC[]5.arPRuc5,
­muk5MzSOZ>F4%5,R	.q x$[FnK]RqB|&*
/M
=.JعYC=Vw3	ƾFZE5O4)+HtXa=2rQ!t5N>ъ
^ܢ
'Lx,e%YaD~y'v@N&x6j&j.RrT~ʑU -SqRa6'(V/^acv`4c'(;4D@ʼhju<F5W|SCG(2bL#nMC)֝
wfM^cmF*m2h\

<VRHk9zФ}P>
vikZ@;/~܅Wyj
5tq452de	%fwb=׋jx^s1Fg꩏w҆|Ov
w"ဆ7͌OcwZ7c܊N2txVV
obGZuwh_h6ɝzĐećC
*u xQhxY60]п_ۣ1J'yՊ˓lͱ܅>4܆>*rQF#/>ƛאiݺYN01*cDLe]FjCƏGpBۏ_@N:Tti#≍!v]eI1yf=sa˅ngҰ9!J҂խ-
6nhhoQ0!%çIlaG]l|*
zrnڝ9Sj'&vt#gDݡ8;ȡ:RZyB,}eHAGzFd7KR2pR\	V#˾(pEX.TCOvSc'nxnE=xܑ4lWU,;i%cUjo:}fNxocMTDGQ\"tWO=aTL∛oHZF~I;?~?xG
G(uVjJ+5j1laic]b4{Ӊafjs@v:BHy7vy݉I8XEhMc8' g.B	>ՙyY;8?5$gpĨ}U/'~,>M d|EUA(U!xQpE[4]V%g324f[SAq<jm:NYn|WaMG>DPF2o-11jlsĎsxR&G=5	(o8ϑOK{<u^m>Bm`f)'4_
KHH8M/K
N_v8S~+2U'QW9` :r5XyDlƈ-WPz̦o˩sT!-*<Q	o@⌺Zw,"OԏRk%,.(
MxZ+y_zd-5fa.
0Prw7-ͣS7yF:~UbRBHpe$2\UO?M4@>_98XkO`kKJƸz{ZF3ZTʪbu=C˄~ۍd`La6Z	_sʀ`*yw2TE<i^<IyEg85
.⮻^۳|qDn$+JVGlPfSe,XO	uuR)I2=4^~晴)(cwkG/keҌҌRGҧT.Te|ek%0狄G>oq̬wAe
x!Lu<}rQWG`ㅃe-Ey>x ;pCrlrx;qòfՐ,VYfe*b/3xdKS8D&4mOg³>~yc(`ݿnPj#8-_:_98PWD PK   dO\&p׿  7  2   org/mozilla/javascript/Interpreter$CallFrame.class[	x~d/|Y@EE$!
-Pd	H@
2ęI ڊVqKkAuMBjjlն.}3 Pdvssνs>8 |Ȱෑ,AP{9YQ1oJ>!ȚS%c 96raʢ-s͡
[Ցk95#<+jqP"$(syU|X(2mF֐gyۊNLpTo{*pR.E6@̪5żج or܁nU2N&V0Cq`t䡸'sz'I}9uhygRћ'8#(=J 06B`d&8,9ip{(FiuXF)X[&GǢ68}3<A 
YŹL.3Ʊ͉ևq6ҚX[կZmZ6dVN3OBkupt04sfبL^X>9L
"p3sMӪ0;lTqFpȒ9{Нlc

ݴD"^ޖp(ߒJ0|"ǫ7koXE]cd^̵/j7TtAN{(VmSc&݋Yf3p&h
y2X03ϲLm
Ŝ8_n^5ԯkN8PO:6u4۝5v6Rb{8O7*j4F48kvQv4pK[KlcUTilCTN0ŝ0mx	mh9X"i넒4##+z
3Cm!2ݰ`sl{l(pFT{6l|I"ۚ
/Jc8O\YqCNC{|UCڥ+m?I6.WoDWYdnK+ ꣭k5і 1=t%Kh]}4}U3`csX8a$i33NA[6n·OW%bfoqjZظx41jInEi̚wڸN4UڸG՟hEW+BYxP0B'Dд؊`jO[RՓ<{(tTthHnԫmu40W5A}s(fXe=GHsDe:](HnZCojvOj	|3/p*,acvHE؊:7W<,xA0j\`h}	%4EW'K7
>iAuuu}QG6~f߃^/?Ww٭g񚍟৚\0NFSZt,agjiV>#JU6JD'4 /m
&1/[z o;ͱ(5ڃjWxOE`O$L40LI6bfiO\gOC$F/6>-Kz
R;7d0YBUG'6v_{jN=jHFAד7ԠCd/ƇnsV[4}̳N[p2uoOPxI-Ybc֚ƋJ[Y³cK@vg#-yOWqV{֛g[^O3`AfnrN?TpDŰ/l9Lx+t"&=%d`F&,bxLp[p//Xѣz0t6;Ȥe~P,wk:zԣl)h=HЖR)s y;#bQ}1Bp8ڭqW&3d;֖J9jԷ G<OBԾ組CF9^&2YHjhmkqLԌIjc[_PinZ[[՝7z/єgɉ̶ZNb0bXq<γDSnՃds9̕fR=MreΚ6vX-e9
q}Nlǽr-	/v}E/)I0Ė3\㧒REsze2	zz:RJK[e*F+%^]IBؖ6>̳AdѼug+ct7D4ۃY3G!lIP3V:p9|NȈ0nX@VT-Ie~K;;[/
m1=iI>n'S> ~r>ԓ;-tux)fam{~}0<H^okIgeۼ
.t
d]+zO~&pD]\%ʙkmD#qYG/MDGGU5їEuĊ*	0KJ@SJϖml;Dl.uļ<2R0OJ9yipeڦpc­'m2]ٹόIˑ&=!?ejKs%}tr MlEWH_gAuJzN=V\'¨uD
DM5zJh?	riH&/bW͐ђdcg^P"QjU>+KcxhH_/4V]qip֓7Z7F}EO)aL"qΦcQ`\q[}Y{"dMeVD4h 5N<1;*<_":hCP^,_D?	
,fK?Q(/3G8{:5[3gRzA-yӖwS#UNc_1TOcghmIo=ο7ɕPىjkMOioFMT
[}G2zFsW>3',
Zjo%pdĥ
0HV^;Bgʰn8Qf3g;v}۳Qm`)SwaR.;i3MK8ϔ7ۦV-^.?%rx!~Jn!ohQZ0<.]ف1CB[_onkbUd5̿l.L=5Xd=_fhvN@M,u.Xفř;10XoB
[`sܭs+JielA@W|ei'ZnEN" Vw|;je.ɐ/2& S1%0ь6|D(Vb	j
ЎX۰wb-¹xOsשӷq!~ϙ%J.p^"c%Z['Cf,gjj{fZfZl),]nĲm!ߒ,jaifCTwag(_J1=ϐeP&S6\g!XťipIiq׸
 ևj#JI)v%kbjW_>#wSY.KYdڷ+Ek<^2aXw
'PL^l_e
e;1XV]`XI\SWP(XZ+JWj9Lr
A:!3,oZn&-o-ZH,omZ^D@iyGݭ0Q0ף 7n8.Щ!tѝ[.Cÿ}an|[	+Oo6<.<G2[?<?qOcl4tՔ\FTIRh& s7Ԯ?1߳=\8C?5
E*5{2I$MAM֛pCi?Qx	8*&5LO0
?LjZK&/
BZ="a\wiI>jOtn
㌿F\]\)W~Rѯ}-!3]᜷3 ZZZH?:EL|
_ɠÓ-8@y8(PUDnMFeLN<AwmՆY+fƬn^\П.S`^4TCu3:R^
8U˟o<-GzQ(
[08(Љ_L-%3]/%@~. [vSީdTno`Z@-\Kʷφ̺LI*s3*m蠢\Jfg(EY(9n`G(2(ˀ6r:)E<n
"To&{VQ~sy_ʬʂ7ۏXX\ >y1]gO)
keɺ.
s${b6|^*bc
ԂsEПDPd	tISKWH8Oeur!IF-2
wP<(%1xA[r>qTƋ%P2ND9Z&weY+SNNLGfJ̒9lf7'u2G6r̓Ge`<g*xMZ,ʩ.-uYˑ3|L`97}ceo4@=: 
t&6Cq\gc}Z/r=sBG7W r]Oo<5y|nmimt4nSľLS6W2MfFoLs("\?wM͖[5omWt=Ka'8it]y~FYb:tÑ|29ۅ},>Bn;}ۙ
̍|
&p:}z0cgnNjY&.m*fNsY8XZ&^,3%MyE{ނSUJu2\-5jAPK
ZjR
 A-Aeg3"hoq-
%N[y'l9y<MO;c.c,%ŉ.
i']R4K7`@SvSv*#nU`#R;gvAJȿZ߂܉~FNXDV-q,S.Fd)иw14键`Bl$LU''՘FX
N!=iP p*pJay 4K%GO
+q>o=rn.OuZ>ȋkts3+69֦ekuʔeSXY:"oݚJ{W|>bOfjTq|;JyT$c}n*ߧ\H#0q;]8XV{&չ72I3]r<J.b[9;QXLٲYW|3
+u;8u^
Mx9|vileDzSYKo|_fZSHldd,bqfogV$SOHOFN%?HHVH'
y+wl+fs,xqyf\C3hKe7)Av
8;RݾKn2xϐ]4h6MMo?c^1#KX& *y
ɋi_248\:Um^F1y[!hUsTgenj`zݗ:Ps{Z/inN;-K@"$-{RyQ-.%0Dj
;Ђ-ڽ)*#	~{Ǧ;cOk+*Cl϶Ȧwo)[kWqgdi+8_O.eVJ%;=e"3LM߬x?0=++?t]N)=Ok{^W'T*G+"w(PK   dO\~    *   org/mozilla/javascript/Interpreter$2.classPMK1}in]WۮWE.xx)u/mh#ۤ$ʓgcl ޼7	{jbp$WY<}F]WNx8CZ*n'M
oeR|1	G%)I^U7([eC4S;Y畉ުVɃpS=0?uq_)az%VX_
MU	׉^9}{#RCD*
c0jmtC.	B PK   dO\|     %   org/mozilla/javascript/Callable.class;o>sNv&Ft̜DĲ̂}D@RN*;# HB?'1/]?)+5%Wy%%ָ
bD;ZS+8(9-3'	=J6FFf`
b`L PK   dO\    8   org/mozilla/javascript/Interpreter$DoEnterDotQuery.classUYSP.m
-AW6el-ЂTQIMRA3<79&Jɹ9|lw 0A2B80`٫
njb]}:Dt]9=;E-3mpjD7uw!/Q UØ
r\U{а	C5W\sSaFr=X]%՞yaA&gq₩(yu&30x:=6-w܉yp!d
LqEBV1t{bhNdV3ōen342C1՞WqMR
tK^]6xJɈe,QۯĎx6+HdƚT0mrDƢj}_tt*r* -E|CH[th|`ZYp*[6Mߜ
Nۢ>93	{Ov	kEx>DPcXsDUd^4Z).CԌ#omO"Cnz-w)q%dw gMޘZ:W踩+&	46N>Dh\_i`$PWOv/=67
ȾnHv@Am2m(j=\JCh]<&}pe#xm(oѪCAX%q>EUj	KG!	0BwH[
apϻ=N`lӸ}3Ҙ"E2K"PK   dO\  3  -   org/mozilla/javascript/NativeJavaMethod.classZ	|յ||!2@ Y"
&H4$8a`3*Ԃ*-*bkպ.]ֶ.m}]__cy}_&3~ss9,s/?t`F,^!%*6x#YH7.Prm;:4S2,	$Bu`2
pr YGPh+:HE0
vhbAcx8n8d6XmA 6$(m^s=C:F'( ІP&v@k%gTQ)W4%h\%:/X6S1xutrpDjc2ffX	V$7w*.>&V&cʹE
Kjgfai)Z	s7{"s`Nup>3 C'j:ÑP܃8\)G;#
g
ikbH(uajv4υJ0a5;SB)F[<i2~=py-&
pP#aъx#uԢ"uF7qt.i]GѶPbaЩL HMG*rLiT01}BYISك\CX%a#)`h
G8pZI`$W
\/&_dR˫UP^+OMGHa+3'hZ
a밞Rg8P0#	"vĒƆ5K3Et\puBd >}E'{LJ8Y
NՑr,u0:+J<>}={%n$AI2qnᄉ)FX>s`MCȃ[
r12xYU+v_|Utu]}<
YdN|a\F`N-(j`lh2!T{m0aF3GcJHăp{-JԱ;x.6g[<T2tmr4PSJy].P<S\ԱtsQn˓g򐎇~C`Rs0\Ne+Di=4]hfFc7X%^x,3[Z:bdMXfs=oY*$ڍHg4'sx=AM[-V=9
ДǍCxZa<#PpPk `iĐd(j[e=vX3mͬLՉGrX$P:h/AuF+!WW*SքD='
DTi'lQDm#YdXJ
tMbh,j8xc?3"rR;Kl#~x<aOm0\hti<%
VlLNC81KK#if~oy,I.G
*02uK/vun?RV42t/7Tg} /C',(8m8pvn8tQHw8C~]l*DO&@gQv]G9Bĉ%E#Nq̻	%V:\&q.#W]t50ˊ/#=yeyw->]F<u0ld8~292!UhT&x-W瘨KL@B+5iVkU.?/-ū(^TFBVa/7IKK;[#
EJt)2)CEU(C9S*49Sѱ]fӂPM'΄ArQ57N$yquu<fR^lm]«S)m|U%c0;#tPN,`ĸS,AU;flh
w:.YHjL83nUE{m$8)+r47VYHwӀR].UuHX!i2Esq<4cTPz\P6ʧtfSψ^Zu0ܥjj6.]]{,5`~Ye]愚0T`I¾IՋk/Zdyˢ;Z۹EeP;] fFCW!2*[x)j5DA{rm8q*uK'%9w8l,a<N>zAũ>6A~É0PƒF4`5A8m2^C]3x	ɶz
JL Bf\ϚղBPTT?'tQ(ܚH]ɓf%,J_יH6rƟ%Ƽgt!*e/M'7H{Dmvu|:=Jdd>8)֥n$bq;eLi kNcbH&yƷtbV֥,gEHxi6]O=d^{df*Շ
j)OlctVf2zk('͚QLV+U\:%Maok(wASgS,YֻӒ	'5},FdgkT~*kժzB ZmVk276bKd)gٱ4KGQ=eQex ,w#*;}Pg&g<!WQ}#Qﱁ;.5C&FqRO"kE
WG4%ߺ0d^Mx0Tg oh4ɨX,ɲ/ag[$9Ny#oțX~|K8xd(mSb~P/
i bA
G%6,Q59SRs&1&scJr
T5Wo6b,ꏓ;\9n̯eulEJ`bd<	wx^R5O`tIx=v[D1S$b[J
Q`%CUʰ,iWd*4wI5V:H$Plqq'E?)-Wk*mJüb^JedZ>I\c0d1Wq݊y<ZJcL-;<g!0K1# d Iɏgh\6g=E(y8JnX,\\,S'zD	T֐u۱d/wgQYw
{g9doꝧzٛۅZ/PW݅qGP}U`饊x̿L$Es}<JszpŊRWj+K{gxy-*n.U;6Qq!Tr,l,l-{uEXEXU!\4`c+qg=A3j7Zm~Oޛh";}unUjJ:k'zɖS/Z%IE֘r^N>er\/7К7GC(
GMvKٞ CI}eƲXӃHg߆q$F&gsuFg+Sp`Xff)4@nem4I&iI|uZg"InRhnمK<rrKy
4:rC4lPcKXhy+C}A%>n?.^c_9.TV
<}V40_R+#5(zsG-1{`Dm.zqPy褏on^KOۂl6J
V,/EXRذPO9GR\Mh(+**7
O⮖`3%Ʃt52_;ʧ^:o1h=E-Y~yF9fU9{xFt8ԅC*,tauGz݃xMNݯ*b.ՍUn5z~Sp̔M-^n)r=~W9~AK&ó
m?Fsi߭6{mfj|+q
q+fD۰
_a|ar5N܀H޽Ćp?iv><xGV/_a5<0>$؃`/G\8@?'gyx$Mk`$e*_ۙ! G'
ick"&}(ζZ"_yˌ"}5lI::[YF.$_=V
zxU.Jpgxi-7i'=#
z
PP<ŽÔ^dv3:9s4ixbq@\
SO7C^coIG)ெvZD\q$a}l= -XX~PGI$Xqtx@^ɝoQ>;1Iq1Uv5Gq+
VILyh6?'s.dJO[i4v#\IjVc#,H9gPL	Q?(*DL8|nE)aSzؾyeD{ej$kmT٥!UάJ-s)>׬*7*^`Pʬ{s{X<ԬJoVnexٗ}/n_r(W
;}ٳrKr{d2Ɵ#n~
^Ɩ:I#9^)9w(hxR_Cy/++Bd{Tm >%ԍe[fvvZTL7*}9J	J0l{SPOçin&[]}Q*iA+Uln[mMnx{f%qpUꑹFEt0P
jXyBwaH6"؉ܻW9崢q4~>ϖFf 9A-!R>atGS
	=ӠbbLBFaƕ2&: dd_S,yWd~$E{RI9,grd.#g2F.rU!r4pv1GVȥ\e/KNBx]Wĭ[%\&#Ed#aɣrW
(o&@6Gim3rTB(<r?<~\= A8)r:<ͦF/ݜuSsjq|^r<Ė2Yft<PG1j}W[)0Z7=tA-_1PЖ#{͎)6]͖mn%ۜtIeI7(~%fyh
<9_]4^A>Er2ktG1_bhz]3F#nd!jOy}I
crʿ087RcJUACA*Y{^(W~?J.LYAmo;(
6&TU2gjj^8pn
٭0%
>W\3x/qߞl	rD7jTg9ǧoClcf5'
戱Jw_OWj>m=vBXo8YarX-e;x4`fynMG|.W(3?b%o~/O$<#69BxVFd</LW!\./^~#,?JN$/:#53[JH9X%
yR4.Z/t)2BF)
x6ucYF#,r&&$eI-UXb="Tϥ
`f4b}bSQQq	K
ߑx!<ƣAsbBY͓h"hq5DA]ӾVSF.}`'Kxw)9b@9
ޯHsV~{ i~MU>aYEG.GX$cq9ǮN*͕SNV|gJ@mA?Oh
WK
o&sVm7cP(&tЋU?|/RL<^"/zUec+q/yxB;/PK   dO\aظ  y  /   org/mozilla/javascript/ES6Generator$State.classTkOP~tōqec@/@%c;?2(Zu|ߐh2Xf}{9o/ `IBCv0M-kc<wӊ:[3@!nJaUY}RseRHFR9W2+bW/ʈՕͼRTCFhi9OZH%nHq	i[:CW"iS=%A5Ja_33	S3'T1jd. d\0C0kXГ8KBD!!D1Ȥ0H
ӿbP#yڶmVP]̒\ѓ[ZM{gb뺻kljq\鹻AX56r%%lZ7\n88I݇vݕ00ru9gѳ	4EOoe`` aC(X?wΤ	&YÄi"]_,:{EA&3#g
mY4nqi%Ҙ'Ħ	}xjW$Q䠧nr e.4(iPV5S&$hєMgїmΓxOa>a\Cƍ0"
C~衖F;{~cf(.	,D]Y,. PK   dO\<rW5    4   org/mozilla/javascript/Interpreter$DoEnterWith.classUkOP~.mE
WnET(
H`LW*K;N?^ ?M.L{}{ x(
a̲2ցnJfG8WLt5bk(kWUW̬8CӔn4C0XQ1<fØ]!츊cȕ3bne;\A IDzz.K V"N]":COk*[l1fqf%C_"ㆈrre!
ы>:nJYΓݳRu\&G>7 \V+eC9"+f8C=wYk%bH7P䜕86έEroEKUu	3n	#3ھVyG}_6!\Z%mW&T/BNM]dK݇ 
/ݹdh)A^T*^)<cΪȔjs:T&ui,i`9PĂij4szvFjt~j:I ΃у$oП8-C
~bH3$D_b!!CN_m欑cܞI^ y̃^.
)G44	i09 !=X2ѷ)`|$	ZeLߧm^|ܻf=E \(JY#J,& ZDPK   dO\           !   org/mozilla/javascript/optimizer/ PK   dO\/uu_    0   org/mozilla/javascript/optimizer/OptJSCode.classR]KA=۪eYCCID"$Ċ6.B;g9u> 0*H29,S5וG8C,lWgm+9
@ԛ?+cօeXN״ڦ|B*oQbZS%|ʭVBf!V8È)kXZ82@vyM\"0xN<78R.{{Ȑym.y~BѹcTDa/ˈP-!#L>)#Ec2"ԁ8ppm*X1
"V6vGq.U+1*PK   dO\Ny  f  0   org/mozilla/javascript/optimizer/Optimizer.classYtTչsI&<H$$PL&

B
:$2̄ <ԢjKmC5VQ	Ej{׽.{o{]JA93yڵ}xW^p=@0aEVDэ+7lZ
hت#%k<HC0	3c[b;HB&ZN"*մ)bCV}W
Ǣc]QKik YndxQ:PbegJXgń%Wt4Qmx|7&I(gwr5pݨXGP&#5}T_\"7MLt쫔#vB^pZdf)qN%j-F"&JP*HPd(Camyxܨ xp{c8ayP]fqkp-5[A+%$ϧ8YsF͌8ZJPJw`Pn'LC1qj	n+ JJ5w5#y 7",&̺bEbxW>۶0lJ*\7fxdaz`<%d&Bm
Ѧ-BűӒDжx
6Ϛ`<  i4M)V%)i*t\Wo53Quĭ&`-(K1h[NBlth:
'R$pOSO<%ZuT6hbZ	'śp	E%}gW!dYsglFIRTܥXɡb
2m&Blhw(n
Jh.tw,YjXCENeTdT9U.wKvUNy풥pWj)ctOKR >ΰSxZ^⋇8W8Z&övRJF:"9xRn,
|_t〉Sg|3T;Ym@SLn> 9c	+
JKN+`F'?uRjGC|4Zw)̇@UT\j5U;Ͳ2^i}
8 Cq|vv:d햺p컵p̬sIsO7p1gpcք	CcYr^;VǗ	}wl$jVRu8+L]QFӃܢ`5w&:aIn,Ռpq `Chc2=3v3i-OtPhꊳPSq%ݲR=ͱxk>,rɍb>4m.Lޕ=u}xq&7lZN?
(*x$;:؎)srq㿦̀R$;_bnb?ܵz]aQLƸj~ޯSw^]̚}pMx+^@ٺ)Cp3Mq~13kL,DX&;{#հtyexQqx?v|Na
I/;ej*z?pu!\ObIZxk^wcWU}^7;}]˥By_,[Oit8ɉ9JNP
Xm2E+C[%ݎG}x~C%\nP9
sX8xɣM{ɉYDenn乑F/|}Lq3_Nȇ%>vkVfrWfCˀ~|i>qHU&-:NzvvvP1xrR򡟝$U2{>N
$	h8~}z߰Jleml>ĐFArSSʇ*c2w6,ϟt-ϳBC=f8c&
<f9c38x/y=U{3NrF3Ncgm4<#됧mU
zfGv*4{<?QGOgh>BMs&/:;y
Ur
XȄM=X.f7SӔecτTf&ӎ?4I.<R`glPulfl$;PGK-Oy)ӏIJR)ӓOEp ;][[Czd]ll
IR\sl8d/&يq]H0>qPSf*wb?0ɠ(aC/qJl?07XK>-F-A%mՆ#R-w,&t给57	k(rZ~]^FeQ^*dW;à,zG?JM~|[Ȕ>9b1MG^O﷕S Q?m
$h<,6;w,Cj`^v?`/CY(S7@Ez R^Uze<Ngœ&ӏ._Kt<x^KZNhV98]~8-+Z^VZjxCVmy^|_{ ?x[;wcW~ϴmR)MO_gZ?^{r']=LU _^*\C}=.hC1zw$>h臨@?Jq?KE	*O4:ߢ/h+*C>Be( #5"EՈAV̥:QID-tX@7 iXME5
Bl&M]qijZqZZ'9]DSP|B<wh9mAa{,ޥqN1#:d^fLb(F96c=h}ƭY2nGVF&ߧйRp
Y١v}lSvWx&ڎU\s+af!vJH|\m>><^o?v:|WT|"YY`Y,`o؍פh,귔.~|gnqcő}ٟc0)2qtZs{]=&'Kp<[89n	AנxnT(᥋(#јp7;=sO˭Μq	MG&姛Gd(c3]BG%lʎ}kIse^~g
Ρ{{q'YvΡLվ2}ƛ+S7AΥQƗFx/`y	kH`E3oy=ʵ~t9t"z3q̥'PGOb)7XFϨF!Wdq^s2kSN5˓3YAC)>Dp}?AzcE>n(krp(y8pwǒQ!;緦s(3دakq|0PoPo|ŔK(k1Na!wd]M^˵]-i睗Ll"0[s~f?PK   dO\zf    @   org/mozilla/javascript/optimizer/OptJSFunctionCode$Builder.classVWGMYE4Z!<bMZ(Hje3nA~Z>=jO[?C~B4svg{?=1A u2b3\"ot]I+ZZIGk78[pd,o,jz[М0	2!Ն3R4TG3a~
or`&las۞T%֙	]1rciF*cZWn3c3QPǍEcNge#B!/U3_tu]ehrEĩ
{%<ΰyhTPGׄ))a?C:r[R؄dt"ΰ)˯iv=`I-a]3<XjzPhXE1֡LObk:WψfR9;;O*1	e@?bq_OZ1T.(It%#v[nj2+:}8Ͱ| >|Ca)1İUwaXF)jVfSJJSjF``&0)ᬌWpk,e8<'_c RUt+)\`ؑW8[U3^1:!ǫJIxE
<w̬ )ėeSKW+v1WP|b._)q"k0\$SvjJSNܚGAdT}Z4AgN{5xjvqW^!l=U]ްFSmo12^ZЖG[@$7fE]P
Z8)Z4yRNjŎd̢MxZ^aIA3fe4Ja-=Qf9o)O"I\/qӌEs{*Fњ~WX`L1:ӦP,<dUQB ]h{SJ7ܖC|0HWH [KaU)%evĵs:IR!Ż~fhy 4k-iaw,`àoŢ#9p%~h2j{.㹇꾏uD@4Xږ2<D>RnwD>)#CE"|5	4K>zq.G1Ns8NV'p.1hLf+Ţ7K;[M/EgaH@Aԋ=2IJ7I-ŨDz]zR
4&"vKI{uomeiz.=oK೏p<zwq46|/ipwq_C&qo~@PK   dO\s
Ia  <  1   org/mozilla/javascript/optimizer/Signatures.classŖRPҀ\*
x6b$_:i'Saa'p|? >&mʙ4ՎCwΞٓ uc0D`ٲkuhjF6w=PYŨ5ǵFN{FkTի K&6$Uo8ZycII
]jG?>bDW(8Y$0Q^f`(t)r-I>+G:>/X{w_;JYN%!0ӯ]Er4ʚ	k
iA)tyHNM@ksDRoKjo:P:`ג</JKxi'ؿtW+W%'!+_\
!@|xKi)+K{m=Dsje0F T$D!7<'ؓ(oY3A*rcHZ8l"b>嵐T
J0Y(cjHt*`uNTVv	D[nU,׮£z	Y8H1!FC|1	'P<|i_@_2U!ߠ&-(N /S|yb~h~5?B~L$ϐ_e_Q!) oPxoPK   dO\!  9' 2   org/mozilla/javascript/optimizer/BodyCodegen.class=|Eo^ 	(M	
	UNҼ$4{"*X^!;ٻ^>ߛ+	㲳͛  LΠo}x5աYPS0	,iU,\SQppÂMPx&xK
4VC
MB	U'W.bB}ݔԢlj`h?Rט3=
i&ېHq^MgzhP2m]xj+WV42`EenbaJYSEb̶!"3ꂍM9`M&z0ғ\Tk
5-\ѸhJE*z۰;aҪ
l[quWguFY`*`	r!τ6=%bMvMRP{Cs6܆U3-ij܊qN(HFވKێUA3چ10Yuq#61H_lZT_URQd0C./pn\lV,NhjZƦ&=X2IeLb`MeMcK?lRs]%{Lq[Zn!gxjcv,5`(/0lC79DK2c̤	)a
MHVRZXW60Uk6	#P帮&6ø5N64E.0˄6́ms^cEykm%`8Dc39MZιw3CmhP6Ti2Wiܔe4O6,EDQ$9fb0֣kmz$5
5L `pP#!6ц&hfHmDk>UDڰ;h&4s'p
8ʆU+*_ޠXdGTXcRE%s@:цnA%STNt8mDMzFpm961ح
5$qBBCvAe#clRSl':nl5mDTExac,v
Q	.
5*ʄ'7<[pv]\h\vRVY߀%KmÈ
74%8F/JX-l-prQ-
lBM!z
wQ)ҡnֆuЂj,*hzf.w
>tojs"Zs	Qg6<HeU4NGc*B6hjClwB	6#6<J5uoDY8 .h|jwi%?fuގTcܹÇTxʆ8N䮐(rC#ogmx8n1:砈d!$ˋ^`Ë͏&ъR^J!JVfDcħDQR͍PMPMBm!K!Қ$Ǚ%qo񧅐,	hRTІh>86IĆO	i|n;h.洤k!&-?*U08"ek_f`
[M>g~&<=ko;bPc(`d=-rfVDOӃQ QhBpc,cB$ѶmQ.)3lf:G":"TH=6jAu~]m槊;ˑ_Jʦ57YҨNxB(X'$ *ʑ#+:۬p>ʲkSKDy7˶n=

Kb=l֓bS
k!zlw]lJ]9bAPWf4WD#)#=!g:}ahY8֡=m6;5V,	VMmVg6FN;
gPdbhBFlMHV4Kè}l6f%7>\rh)iYxsZʄY+l)T`B]QN,l2EZd 
bdSlVBlOH5&cSm6M1٬\OHelfE/rglF"- :\AT|ߡaIYfZl˳, &[hh.Y,Qk2Z:xFt1i\RYj	Ǖ8nSգY#Cy<XN-[j\N.Y--:cV#%뗖'7"I0u*;fGcP-	#
0ˎcǛH=	m9]b#\`mv
3_Z]p:DECE)PQdը,5D8,$bҤJ׀po(f:0dRd9ܷ$tV}JO-fW+iΡXX
*vӎ[ԊPح42ivE8%b@s&ān٭63
Z̨
VU;7a3TwN¨@O
UZғӣ`*>l1,
,v/פ'v'Z	'ůmƓjeA=9CB=c=zX19Ќ\~i=a{qcٓ&M}5*j,LN=v)Yz( \a]U1V]=6{3NJ
:(_XDVٿWuA:955^k$qdgpF"I_IV4o5{>uLr?oRFIiJ*f_-
h{EcS9QEٷ;G
*F.ފ2.~d?!צ+:Xc_د&~ӢYkLZ*dlNUFĘcvQ_yg"`.qWUn-{ڜj=${HtJ`+,rm~djMy*u(b<<`GZس'u3mޙfTоx仵&<+wmރf^Qlޛ,YQ4yͶIp{|#	ǫW~TPLe)CAkG%2|m X]\E&`cI$$bcaz4M{|3&땵/Y|~	_)'"%_I|_Gx9f@1e!bY|'R|4uU5m> eLRBm^pCL't3Bgr#Z-^B!h8 9	kdmDm>vBҚH틑|JEDo96K9KԆr
M8S
=͎p~I0b;n)G*2yuFh2;A}[dG6O@tW.vel74hQ^yC5H6oH8<$w[b^HKl/`qw5 ?kԶq;'
=	BV\92w%֊O
;t1#?[DԊ%_nJ@N2l3HFw?UNVQ(+GAT_`.?E6X7_LҼ޴JY-@,>&u
_W&.auhU6*NVMu5=Q4{7UË4%FkS6ߊӪݿ]]osm~zv:,>m&ˌ:
ZCW=#-hᶷl
lQZÕA^i=bGQ8cm<$v瀙('mG-&
1
E7v)+-<YYdQED1idlX^WQnŬUͮ(Nn7[5N}"Aß[*;ٚ *eG;	k(5UjIp)%c
PE3}wwБ}lOݢ+ f*w쩔3NԡS̨=-%y`M8QVD5
{6[ǿwDe^?'3
Yw7	!IvQi`'V/7|ͷmd7Փc`-`d7!!7zwo	P%L:)3Y£!Z~ki1l'KҶ&#SD:LQh	s;cLB.*p,:=/LF2I5WtEq_]bopYSlkݡK@FlD87~'1ht`sC*dذD_	Qe@YR mKǉȳ@"4Lt=m1R]ʞECm1LWKJ21#I8L:1Q{b"P6!XG tĸ][*^ꨇ:7*&b"9mU+-Q_>ytyK'QdȬ[W-SO
Dir+SMC|c/(D2fUj\Kbw4Qz-yG.6ܙB$]3wq-ɩZFT_Gܿ(:x-7(Jvt@bA[TkgSrP.w89.EH;'"+CJ}JԶYo5nU[o,搕Röh$3R'lU.t6SE-PԄ҅;b9Q)G~AcIsMMi8)Q8wP",PX[<Q
:	ڒUPlqrt5Aq-Nw.a3b0!l[CV%g	5:2_d[Lĥa/Lm%IfSr2jJ'[knQAmƷ`S!&Mˑ/E,K\t>KD[$} ,qEB!WJ\VsL(i9Nw#;:THA?fi738o_!x N
ꛦ5-@!߄oAsSu	9d<\i
<,ƆJMw7IBmw!XPwJl![iB<Cgs6KM^:uŅS
KfL-nf:$~YhgJ

g[F]
쾁S^x+P%o:%ޥ#>Ӌ}ͽ:`j'7	+[|(]tUID4޼'&_q`p9Ƴ #} Om$J<L}kH
Z^?-KT՛q<=A#/ldH]=v
5\jk-	eq]T̵B;S2wjފRRFO|GL)6id"+à%GcMrז>i;.Ed#'k,tsϽglLe:mE.fKd cW-0q9+]lmtN,yڽAfn1(), ='-H=P̴dg?`^ߴۋC%۳ݖ}Y)SAr[Aߖd.]T9ЖSpi_fJl!ՠ1P0[3[ˇ6oXe0>(dI%3b8B8b,,r?[	`Iޗ5Um9)lY}*ɟ.KS(S- !A$ԡS^Y,ĖrjGfNm5Kjq	&N杜dG^ 8s\l2iGZKePKQDl*[j7B~PlQ%hluSUtڦq#jgkIakRty:Xj(5>:G%Cyo`p?Iwߤelr+nFp9Hq Ӓe\fKmԦˎ<Gʣp0~Ĥ;hݲލ<Fi f22h!y1ٻ<1ǒ"^E	t[!όwy_Al }s$3(=+m}dS5O-2= JMȕ{&jElG3_n+(sVՇkגpK^EtacHד%a 3ͣ=0OɋIjEinM^վ
>Fnz磡Kr
A6UAx0RNP\4ER _b,y%דoˢb 2J{<	B$EGڱ#excG\$w[Dx-"q7΋5Ə N-^f
 -׷	TU6OXEgO.\TV:$ؒ/#%$dGJZkmvgۿ]!|/.MGVK-s,$!͒2gF# |ՒaP?t)hj~LL)C2)_+R=0>چJ7.>\#G\f$t>]Ѣ!d[*,aH=(wB݁S-r5.ht-*9C%txể2;km[F)[>wd϶(VM06 LQYl[Q~P~<*Vi,d@k30Y cE,թ}ߺ
b;۪3ⓜCPYڍ:dal[吙Eq*J4(K[,vRXWe肊ٲMnT[U{8W$

QKF&*f>4jy3VCIWF-5<'^AuIE8)(jmT0({AKX}R_@pXWj?[S*jڊeR;[\l?\_awļ*9va
<K#:/cFI̕;AwT:3:aӵٽFg7IʱOA>d4Lޅٻ?{Rm|`ui,'>`@䟰%wNemUs#SDrMRUj!ΥΈ!ll^@Y\-n#ZprT-]NfɅ($D
:hh{~i`@,wYr+X/5-
5KJ-u$R_T4|v(ԱȬ\_E%x|;XDld)CR
Ϧ3%ճu顅|j+Qlu{GP_ԗV[b<Bå8lqPjUk+vTV]a+jBвPmCM+51uUO,25z8״+Ƹ+Tm>'ON ?-[?
2 v'"Vwv$i-Ҩ_-Q{79.EuxSHK=aߠY?7Еct5ĥn!znևm>NdvF>8,1e!H܅Ӌ&Z]W+SvidG^5kz]`.:'75"7jhOiJKʧO?nq!>S.Po-s9H*ld:$ǅuKOSTb'Elp/jca:2K}`w$lIwy_Գs g\}.lGGkLݦJ}mol-v+A%*؈XULH͘eM-_8{b6!*G&տ3KǳRSOo1|Y['	铊JP1:AbSgS&ʒShy؎pIdcD<b\/0tb~q6$q9[qɔjw?^	-ƮyT8X;`U''IS㧠-.t̏p:z5)@{! I=Me8,׷{8wJ20`(&miCzQƅN8.$Pm1!-`:Vq2:}pԷOtm]hh5镴7Un}D*MAzݼg7py܁Foɽnd5%T4|8DoZdX=0&bW>@=<4'1x%%yQ*oqhV}ʴ\/h'dPNDbtz[INe>ةOhR75Njb2ㅛGg&f,.Pu"95t7O5Қ[
N]tΤ
\AOKKԚ6皬jj=Ӗ5`=q*R8LXHu^]'u4h; ݀0"E^G`B1ӽ.KZ4Q=*G\㭤ArYR7Ccփv_ꄻz2"+8{]nK tñҥ`JqlQ/>_cܩoҘZHen!Yp:nt<\68N*!]挬UI)b<TEk"vX1x/tx=z! -^Hb6g6*ñu婌wat3RsZ]]XMچ蘪bpI`~eecX!sW!PYk@gȁHZgţ/rȬLPIJ#":*%	
\ۉV"BʊƠ3F"1X ~R4^[r76Bh0}CuJE#[wAJ&ƒ&=ԍN<at*95em"-+tE+m'JKsJ3hS	)	@J!)GnhvҪG 	!	pkkSˆ	>(3]_`MYM=MaHF*Զf]fM_Ap5z[[Y~C)qu]DX:2ESFxoX6i1- l,X2^O)EeN	E%o\3PBt'ڞ2{b[X{hR	jFK;8;c<]|>aG<?Lg]bq
S|o'V~2::.pEFʧMԱchҒ2cz
S
gi׆oGW=r>ѥAG4mt=vYV<&ɾ(Ad	vQjW@,5-n{rQ5mG9Z`4QHBRQvSA`{2CǄ_ׄo	;$omj+zdPoiӃNXgWd`y*;yҗ8}JB_rt6Ř0Toq-s-7{č/wt=s>wsr_wvn:P$Cb|G;i]õ3C!m˽D:HJaR9@uN]E ҿ
2~̌am#c۩>@Î6~bԦܵ^0|zcwdyZ`ns`=%>m#BG(Eܼ*C/hӪ	!lMhfS(<+J#eYc(Ӏٹ-pL"`g{{Y'r~
AQh(
=ob{s/ȅ 0e0fap8R
'9sab\pL	={>)%Ow(35g㗹8gw OTD'	+P#
C4MN	#zo[@VA& \E 3Ởassup>8s<XEtX&k[z7M.^bn{o'=VB
-0%㱌'Z֭;)YOD|KS"ġӾ&SR0݌[Xǭq=wWj
.01Fqb|Ĩ1pNB$3ahp8C ]Mp;4㈁/eXo	c4ıӑ8ɼp.KX\EH.Fr{	+KTXfUl\=I~t#=gb7 Ͱ6ۉM8 @4 
+y=Fʉ7q껭5^dZ~k;Hzawz#
nD݄`U!C\JƖw072w@lEuw^1y)QWr:$Ҏ\.ݾQpu\\TZVBV,m%xs=]i-̷!d)+'ee"AMʓ.˱LwupiZǺ\sk?uECџ\3(S@NHGΚ
w#2"QuHZރ>DD !$"=	8)X54\<<KS
luF KgtUX]G,25:K[T ǁMzؐD`ˆrs&b3jg}3##._οxZ91jwW	qo˧6qtҮϔ-lΏ\嶰b&\[v	2[	c3 fc*Jh*ˍu ;B/isbԌ2*.b Jɼ515*!ͬ_;BNZD{#T^o (_ǚs-lVpd;V$NxwB\d%tukavf`l58ǱBx9)Wgcgع /ыIXђTbifH3Ⱦ7
l%#6mfn҆}4`Qꪕ,ioa)-7+>{EoN^:%n4G*tVm4W(]h%졧EЬ%-6ef3t$J5ekP`"`==׏f~`-{:cȲ<^',;Ÿ %& dq8gI">\#Ǥl=G#2+DI|=`1k
$~c}*>`R{دߏSJ[ۅ=@{FrPĭ+\^hu`ZJ$N1R {+މݩ('_b`}0,K( j&M(wHEQj0@QK}7(^}w(A>W䖿(:md~Dwa4cݘ`lO`#Y'2Y	f.l,ŻXv9"v֏r,
bϱ!6}F_h劍~/yo6bެOd@6`%Mul:_fL~%ůgl.㏱yv(UOXΪl!-XH0v0bjD7V+:15p?R(fQ͖T4eb[!N`G3<vXɎW;ENt!9;Sr7V-{d/vܝ]*2岘]!g+Zֲ5rJ̮k:F[:5k=,AC;{X
`Q5=&4:eثj	{Cc:.f﫫F}c٧Yz}dߪwjސ#hd_9J89ÕO@C,誕)Pᦦj#d$nwQmY`a#CjsLxq5+6Bgp?dtpˌTdl&g~
'J>Ì>X(iS7B3
`Pm2PF8J?Bƶ`&p fu&>L#
Xnwڎ僄тZ"ޚb֔6u6Q<v:R%4XnvIݎ\,l|0CPt%B#<}`#R
PٶOW"Zצn7C_甏sp{p+&cuQ)EPF 6C>lÆLOJPsp(D[	_hǯI~6.NN}Ϡdz3p~gHWyYr=aG,Q(p±	VpZ/
#crUBy
I۟IbrDWG0)w-O-X;1XWt:ɻayngc0'>ZYr-<r,Pd֢+=nf<0IpN4a-|/0Dxd|-v>UGfE<fl6Q;N.Z>ֵcBY
1eUsq#\Af<Dq"5nN
O?_7	!A
OG
@O	L;] |78w#y6sl.=xox'xxoy.<Cݕa{l(Fᬘ@=5Ql	Gcxv
ߗ'N>;{ {g:/eK>6>+>Y<<yx%b0>`L=oa8O?
A#20D*8 iۥp'2&͘! ٞPb%F0]˷p1IAO6Afv>򍑚1{f,ߵQ鶐p}u]rl~&fz
ƑUs5{]21a;Ӕw37wN xF7L.H?09kFgi2Gvrkږ9'
)iKW`G@'~$tG%eŚX6|Β#CC4TV#c!9xOHh
GO8M!N1sZxYqd-vL8mf~эZtMOv7ܧ>IY:|g>'z7H|yv8H 8yay1ƗW`;_rQ.R	٪#e\gk5_9d,	U[QyݪLu<L<$7yV6^ݒ/:&XzYiE!We=̃ZxQ&{yHB5*6ڠkׯ/zSޜ.sXd1`xUR5[C<%S~/S
F6rB?6" <^Ǹ`:۩$5wS4_rZ!fBv?m֕wbk4᧴)B0g1'?+zn4n쬙ր)i$5;mҌH@3en3oFk31<v -ܒ&V̥勞[CiDPKP<&m6͟c(ВW!Κ/2$",-QJӫ+mmlGI('<Ehp 06`D,cWhtIbyhe#;--.$\avV17*Y('IZ.5um|Fx(?RG/ꚩ4fXg~!/f=%ݗJ6f6_
(\fAzv( X-締 s+;NwZv%_Ǯ-v~/[׳a(=7S/6QϱoG"~[5yo]jxEAmu;~8~	|3owm|%Q0_
"<O[TCP)ƊbEL9 ]Taő8s#`q"RbK+F
bxTOsb-cGbVL?Ib(8@)(E*bOY\*fJ1G\ e`y8D,E\%"(:Q+u9Q/_b|K)?Wq.NR8YSU8MugLOs<U(WE5[\EQ\*uB-֨5"qZ 
b8(4j14b#+<Ůnx+p'(K
bUEH.2uh;iLZ'IPUaT-L.RW9Sڪ10z+
)i[?cFiĨPQPeofA^wS^?Ûzgvΰ}=~2#hVPݠѴ(BɄXԻQ#&Mp	E/ _q1ѫ  nJ:õע[%VﶤrN}э.wۨ	?bYwrX?n9;ޣ4Nz0HE(⁄ΌTq,dƵڼ|#q[!H6ϱP>bO:{8}5i(zQ+D$97)g R܏|'?j/1nk3B/w9o
WϓΏڥ/yz^r߳'y{eٓq}L<̫_0?3O2ފ%,&(;`؏>#z` 7՘\݇q1{%o3>u]`Qo3ѹ$X&0Wgzc9n_G2"Iڸocbݥ}78ZZ"-2\-4`5:2fOs-or^eHE4Oa!+/!k-'-<z"'Nr2%^-)6ik OaoQmծ(]^}wCĻ
3bDr{,!FHP)5Ri
w%rLfgc$u;T?>Ն#ia^+7ljvDwHLB1p[	OR&\wOa=$O:r}@xgۿKuocj'?yFJ	"^PEY*BsVtvE{iSt^oѹJ1 d2K_GVV@S@>qL|# "=EnE'GQmCsǹiژA""m%hJ@4(\b|lg~ĬM,* 
brҖ_+5"EiZK>Lola;զ3B-bH+7KEL(<QYﳌXjָ PO.pYcz Fy+Z$ b!Di?5 41C}D1Kl#CRQoqhD=̩GTKn"ߨ9Y8[Bl鰀-ǶƦEDa|$e82mR,Y
9N/iXD
UBd5pEP<ȭ;K#ăYVQoҕmtm6I$F<[<2#rvDĎF1!7/^x(FGt씈	8"bqMDcύ,6Õk(&_+;s̶*  DݒN-AQQFE({v5헠=À* յ!~f6 ̒q5j#>ڡ.v#-_>%7f[%!:[3cd?6ې%1ۿOh-r\w? ϱFqh+]2* Kh+B&>IYfEPgd/`@<]IH4ɏn%8<JSy<Y;/Gb#BonWK	OɹO$}x6nT_|xkN<#@<+Lϋl/^b/%-&78X#Pԉr8Z|&bJ\-׉oqYS7w)ŧR!JKzOe,2]r	"3LL/ZU.#n#ϗ=\#țe_y$=F9Xk@_ʽOr]Q|O!PMe*S9M$U٪NQ˃ԉ`u<T]&+Z "ue7>ߖu[T P#Vy!ц_ccnx<+O3^c_yQ(2JcX(4Way,7yqX%o6;]Ƴn}\3-O>c*7R>df'E>nvOF3O"6ͽ9Af(_7g7CFy|<Um/1W+u#y|P~jn/ͷK+_7G~keL-Zo4U.7[+$[5YKS:Q9ʲV*uJQ֭*ͺGeXc*ڨUkQ'*Z
~T_՞V5c	=]>>jg&zFU=bU♧J=TOHM42ϑs9A9SUx.R<kTUYx֪Zσ<f[j]ZNMehWT{Cԉޱdo:[NPygӽՙoHmRyR{OVzQ{WKשKw˼U'gWՕ7j*{ZG:FoVfu;}Jj/UvSz
Q oz7J7^=+TJԳ99_zwz׬^^>]>VnTnQ_T_WQ^VU}~}~mVmCmSV;ːvaٽ=H'l#ݞgtL;dd
nF7D#>n_l[uF~on7r<3cOKc/'cό}1ڟn1GGq	dF cԘ/7fsyAҿԨ0G!9bFQ1M{#G3a8qkTYߍۍSqqǸ$%͸42qYJ?cUJ&eqU(5)F$eqCJqKT֔9);Rj;SwgM9Xrђrq_u6a0a+-UM:.I:ߧ؟09a1(¸8@⿄*@m
2qz78b:j)T8*yqʼk.-PmLŐanbc6e:,+gac}c@ʇ	:z3u"l̢v=kcq~ePfxYw28qaAZ}"3Q}LשXFn{yt'ŕB+7na,&gS!MNM@/PJÐ2ҐPot MCMBJJ{#R|m_NOyVȥp&0&A[ [loQm ^Off(ۂ+zc-03^f8ʓ0-06AͰdK.9>s[3	y6
5xac[`_3?J[cmK[ڡ3\b.ݻ[:a8}6xa@; A:fR
G\=pgx> ^$ƭdy9 ^~|y= /qg\F00t2A|qa<h$L1ӸОKئƶ))Mgxp'Fjd>%4^ODvk=Ʌt͊20Dc{' kդ>m	^-0ކoÌF=<6ѭ=`TrإGn>=::p`a`A
'ZdFPph33_ g+6ƷHþ}#6~>;VcVa!nn!\1٧O\uzX
~W/~.iGLt/HC>hr:'> js0Lк3q[mY>5oךU/{
"%Yy-8υL \Vjlv(2`Jj*(7}0CLz3q`f41;fgٱ`O, 3 Mǣ%QM0(yGmZ<Ebpv{Ǔ=:(&'9גtY+8E${0ReMRryzULZY%l:Jgg	9Y7F{^G8k{O ~"YFVlr4NV{dd'ZCp<9tVViK<jlc>vG/^{C;4@/2f?0Ed dEG$scͽ:s02'f!ff	|oTfNc9e,,gͩ9
5<yF`-HW%"\dLXYj=Tx
'rW
@!ghT vsGx>7@'5lCI.RdTbtĝQ3le+GX\ZsG>b{CK
9Sٳ/s,*z;TU;:fLH	t6%t/y(x
0=j5C0<ƛ@f
<FK(s"r8\p\kU@(ګPHOy0=Xt2R"<~-0;/[\lEخp* V{߭y<' \N$ǩ>ǚCy2/H`c"	ӌǗAc׋8TJ\ڣ=5Mx
e>g
䇻qKp ѓbH2[Đ3jf*J׉&"-IEJ g8)N?L/u{i R;le9	x9y1
mcn^gWpy
܌:3	Fx	^6w̵H/=?$B8#uIL#1\Bu-kl5Xd!1`mcI@ll+
) Oa!d@y=EdF@vr:'39N׶:NjdteJݙ,jܛ
6@bLtONfc-j5X԰3q%{@tI
:I |z gz6PRe\x gzEPjx0@B2߅kN? 9Gg~|f~l5Dd=&G\Ħ*;ӡxmآzG\y}wUVWTM20(@@DP	
$ATpdDEaDAT0bZ9J|
3}ǇU]usA]AeT
˲U^<r'Lnp8\GCђ̐dȅ0[Kn̻#:A&I:3#3JlG]	=ۡU/C]a/qQ.$⣺g.vq*-+-UrA%P\)WɭSYΩ@Tĵ44th5kQb84i	Ljc)ftQCV@UT-j]f~$kn&16uJGOүb`xM/Xp6v!5lXZr\4ZCt8	K	QG$DJ/yE_eK~7[Q{3;rb.mTQ49޴d=iRkFhH+@7=zkh;ꖤ
lT8Qv0J,V/N\SRyÁفuui`]i`gz)$N,2C[q@ls/!TA!qDm2X]ę5UNny<2/p']]'py˧n]:mH~lV<RxNʏQʧ͗2pڹ\*I,V~!׮@xW}u#'QN]#6o>.KtQU
ؿ,]anVܬ"I|qg	X*bpoT}|KTg}$Aո~%]; DAv.
aCE|bܡJ<VR}m>Юt|]i3i3Elm6ay\RJXw[gk(m!\[ĮnaӵlݿQݮ-awjKٽlv'۪viEm{K[>Ҽ\Xab&Vzflэ*^zm?=[(M!%T:U[9C
kp
lZMaaz nQ.ym!II">ҽCHgԢh,k3)4JHH-AOIy5$$6O#{Jd:]^HоW"2-!$du+*w^Iċ;/DXVXFq`!/A5w8]QsTU^Yv°?:k>K
kgxB)&CG<]/"ARRAi)U5:!g	/mZs2,~Õ'm/pQK{èm 1s?&6n!J<a#v>N\=ڳM{^a<vh/Ew	Jۏ8Ø.3X-o>>`m{?filO6^M~d7if_0[;ӎcI]e{Ot};=	IkI,7G:)%B5jBto"٨}` c0|T!)V+A-:c02u|ת3xKM9IV#<C+C!C8##gF?Һ$yG'D
kjOIyŴ`}-'Ng!iM wCۏ|N<sh4bZ~A1/?nca<#R84#vfF:nrsUg%vF+!<<UI7sW7}OQ9藪&C'hSaqiRǥи^d- [Cc!:Eo2=Nb#21InXw"n)Gz/lO4«  |MJ,C9PcMY>뗰S2v>
Ǳel~9T]g
Dv~%Яbk}ۨOfw>=_CX?UٯvT_("Tү+D(|!R%P$Ueۀ҂!-h҂Loy0ʎ	#uSYm86?t
CNKWP\.$Y:/V
k	y	yJm-|}9+hAW~_.[  B|mQ8L޷.}=}=
v=(蕨?(NSB(TS\>4=hF=f*I~?s𽋧1u2eE~o*|-'"ǳK?̈́osD \Z9oQ<ǐoA-*pPcghCŽx18P $J`
6D>ڼȵ2P´rM'"E)?tRQM"2=yEnC:nUj8 xTuuCOPۭuR0-ᨫ"3Ty_K+
DO_ru&MJ4#?g9,WkZ?R'W7J47Gt[l(PZ#=biZZPKj)}-dk dwzZ 8ʐ $S'OO^VN.O! T"/sܽ^1m/OIFmduDKÓy*DVpARȠ]Q~wWRw9Ꜿ"c(-+ lܛWU?V0#Qz <
hVFEis8:~K$yEYڟ)5;t6
I}5
rG탞WWBĵڄw8F+gkg[g;g{g5:QF'kbelzS±O	>%=In7굅tWyOdc;
o|l[^N4}9hhE\38yJ~?_!SFS+Br Dj.A&-UB3a}Q<?
n88s18c1Ip\k,c$Nc5.F1O`1xטO)!
pi?
Sim*T]"W%=_nґ/w篫%H9Nrt2I`%'MŅ~CDB
abܮYCOk-	>X;^?t򎄼3!?rkaLA
itסq=EczqwF&qWdn\V,2R/.wa;xѸ~0S|g/CX-qilcM@Ak!jlf72Թ>p9I"WOeȽMTӏt]<|߭e2d< N	pCKM$E?PoGv̄[Ea(oO7~lǔ9;\VwWy1c/2hoiܧ[B4jެ1DbwwLh4ҳS`+Ra	9&,9\ Heө"Mt\A/@2MR{^>RFMOH$T^n'sۡgpSyOb5%OR=UOf^\iT{;Is9ꉟhc,(4<e,g4覚iҍc[&qQ75*E+'ʤP.x斚%FOP|)uRZ= Ee	:ʳ#	"'hl|J 9$h|I7k|nHOjL_DA"Cǰ5}SWs`8df04X4Y3uXc.kaff=b]la皹2>l̆l٘-4f3vY6-V{l6۰t}فhf'),.RmL6{H͞RKhzJNCDPLqI$q=<R@dYR'uP r8+ey
Qu!7Ƭ0_>\Ob#x10ψ80fAH33mǙpw{c֋{hP$>52Q<r/
{97S}Jtd5*yͤKG=:[V;դnr[˕w`d2ʋhYnyU.<z\CǍuj0_s(TB$3Gy1Z86@?s<q9̩ܼW0ݜYugBnވeM4oƣ|l7`ϛyަ7Ίӡ\T܎-5*́L䃐| GBT`k=­bKC8 _rn
s\\nV-a.Os11.aLI%gz0^1e7_	.Ͼu!ʃHÛGrU8Wfx&e_~g ^gj;7p܏LpxսI3N^Rܖjte*;y7>h'H
(Z1GOn9#jnEkn$s37Vs+V۰܎l33N7.0wCi/s?WF4
V|55"kill~n
EVaz^?#\SlI$&ƽqP
!:$a}\uSoy6tQQt	#R~
x7#4u7T&o2Skj-]WO.\B5Ohbi0a9|R*j8~C!haG2he Xi/KK~L丼h礉~fJBTG4bZtOzJfFf*e?{Q7SsbU23Iu/yT>q'F#
{\JCاmW"񮈚7H]]CGnbBr"$=)27Zr_L;l[5;D`_nȏ$N3S\d,JW|nLs/2Mn|BOo	5N<C`BI,eN>̩F6P*lNe3xS/]\Ѥ25e"~ªRY=	AbPȋAA41.h}m<6Ąh#̌6h3,6GE4kEx4Zіmmq DK}-hg2-gͣXQ;kʣY>h_64z6]nNdWeѫlCt&^vEg磳٫9<Y&mfKt!;]$Ţat!z-ztFnhtat4*ztyttu>iZtMPO].%j,QsB56g"G<g*< lV&;_ĵ,<=𔤒$MQ$i%<|.agj-VSU]#`嬌?ޗXz)C{ўɣ)0ZgH",zWsZ3"m+eARt	nC+A
@?n$IrxT5@4/P[	ު`EN	4>]h}=iq]CU]-t$,Jfu%^U#8!=h=.<%z($B2V|KIa狹B}rt/>ĢÍQ/G_F+4ȏ|EG(*SRb~^'K6%7Ѫ6_?V]dqۈ~ΩRrS,%cAmۊx
ٱǑۆf1ۙ6]"RE2aupLF
9<d܇2?ŀs|i]bĞFԏ=C6$<wsvP﷡	C$y~I>J_^5]~(]\hBۆEj+ci_^N3&_iB4B	!dUܖ	!V\HÑ##erd5Y2y!e\Jiy{jV.wH;WU6*P]"Jy2'AmETwfTD&v¨,¨ RC7r~اhű*w}c@w#cĘGcbbV7̏Ē!,'s]6ҽ<eIa@L7jpv|qz`:TQ8ǫE|vQu9IOlḾN
>.F{Agr/}['EBi۫2	.UɭEc[ 
<ҡZ&L+e!۲gheJUYIjc`U̐^t${K觮%Nqqb88>w31Z]ǹ?4wD- :wO+R˲~-bQBi-<''ٶ/x;%5Ay58\b|+;o1Q|FH}VYP~JZ	m\DXȰrhrQǪVhjS8jo5T9Z`%V
*cV1vZ-jxjw*1SP"竕NE/B"y%g|k>1ȇђ­rn
5RGoUJk$gz|Jc@c߆	'#z)wϒ)eU/b Զmujc$+LBo 8BPLGB9~PCiՆ!Ǻ$*V ըwHdH)"H|p/("(ﵩȳDZB'<!\AGv4
;#BqzCVfV#XD=8Ht] |pgv,:!9
7æ8AӮbk~Ȭѓ$1,]T1[kS_ 
	+QJKd{wwz>/UdxXR
굁b
XYf
"Sy(}J_a˺$agj$	eeXzePB9G]w^꼄rx!)w6X#^u1ȵ.A}k,Zau9&YW`57YԚ֕Xg]*j&a5ZS5X:"35ǬYL氘5նz
u˷nfmZzZX_k1`ζl6ݺͲb
ve-gkak%db;l`eoXYsk= zbm`GG$(9&)zLʱH
R&uKݬ>.i[i=-HW[KSi+,ktttTi!mޔ[I;=Gқ'֧҇gҏX_Db:ֿ#CH3Hu4Rfolm
B!^	l`6
nbũ*
ii(Ѥ=8W}"
HKd7X93"gx!>i'#G#|_Ӻz7vO4\'$W:FH0\cUԃC~gAOc=ݑrZ$#=%DakEVW\~q-CO&)/k'D8a@BPѻVϴuXÙ)ƀy'id<I_8%'ܷ[~v>K>PedBEF$(l@̮v:jEo;0p;j;S<̲bwڍqM"l[i^[M=ޱ;##K]vlkf=Y݋uOeg t6Fgv_6ǮY{0[fakR~olmE6"X^hDJ
Wz-ւy	;Fhy,R.jx#twrjD2\	;˩zS'J)B.B	U<]:++<S>9,ҍXG.j)/\* r+ \Cw.eqn3As(ކF#E۔˼ F.2&3mџ5ݑz,^P	V׆....]L.̠O)p4CGö/A\{,ؗ}9Nc=gW^$'r{*&0͞uX`R{&*{6\l߀pҾ?طgv`d]H1=;=;=pK#EJg)LQˉҿ#}80=/;@N}<=ERJ(W'"K͇ 爔Tok=4+h^Ijkp}?ΰa]D#c	'4Vh>P!J#t餆32YX	MLpY?Ȣ?1`sR͕khA_KL.sQD`ofoe?uhl?b{:AqgO8>cpQ$5Ƭ	6"p=<vjShPO(^fu܄rC[kfЌp| kуIGI\
ـDo]D1/ ],.^E.X\liTjID
=ܻo7'=J߲8S4Qs(D0"L"LMa^¤}hf?M/6~¤W	^å~훘j۸~:{tT}ψT}_EX9O?,7kbd-C>zGu؍c[NGe+Cqq'v86e'u_	+!{%$OgϦs&Ø x08P$?z.ӣnePY<8,ڀ*tn]V!j8:QǩN]8hdn-
C%gڐ۞Z<; K4fy])|Zi@u[إ.(*V{̭a5K`Lx)kp:xwwf39
X5_]	>nT!)t;-hQSN1qZ\5.r
-&:1ENgtI#+ZIM4_"?lfGsп 61Ȟ%/ynʉQxɴ
7QRq:A_盩cC	?
zBYs$|rT4̠g/rIMܕ)Hf+tZ=\;I*<{rO% E<+rsq
 vgkcMz
M$
֕ZM~цgAh؆oi^B0
?)}풊Ǫ)!CKʪRauZm'uFpA]dg8q2
I;hᜂNOtpzs*z8Jhp&F9}1Ghpu`3`;CpsV8csvas!^b[\g<~ud̹,LbMɬ39S)5LZ6ԙF;ױ6ՙ8͟E46[!z?<Ϲ8٧B}~rnj9KL)۹Ss;RgT#vVH휕RZtJ:(>6zxW}T8$uw>2i&7G2aHyaEXjJ+q]w""JC.AR'b˒Ǆµc1s;nf]aꚤfrh&2Ʌ"7"3*t2#Ʊ_Y#׬>ѩ)<Ca֠S*``e$U'Wl%-L,

	z/{+ eFMpd=}%:QWa9//3uDDHBW$F
BEIIq>0ϕ%cDe>gx½s/&1y^T	Reً
~PZ//~^4=EF͞%4+!5D"B]a:لclE?
mlXgvNq|),sv>g7rg95Y"+g/~v<;/EyHkyuub;+w :[|ns>!13v9[|V9_l
o3wM{43*."qظtv%4é)4*3{s{{a>+UZ_yp'G
@
H<RPTwR˪QPI/{TEh/ی`Vad5~CN\ҙzrc~ne7qhte½ة,V~<hg\	jȅS#4'Dwz/h_IJOPp*P%`MP<
/
'>C=+A+ݿ5jm\Ϗ>o\f@s5D]qנ>G1q7.Hw{ 7Ih9}󍻼@P-uNbӍ@[LF38PQH#援u,HM(&?ep0!W>[xvCU[~piV,c]JEB{w%CX=̟ZSsS<9#G]24#HZI;P>ͽ9[ư+նJ+Er,'fL}.OjN3XG	.hVQzw*ѐLw3x\;6%hn|tr-D_b\x5mH>hn;,q~q;qϸ[8vn~pqdpZn
SY+4=g~nvۏ
w܁l;pf!A`q:^F/``8"w3,93,T4I6E@Vu'?I@';mh+vz0#J7X"I@:%Ï }9(fxk3w7S@FJMz!J2YsU9raZ
LrZ[EF0%F@{!ppG;gwƸc;׸`;Kq;8T1
<>w"^t[UĽ߸;G)Lu2ý%kY;ױwbaÉ"Q7a@ R'!0fӽyЇA}2̅V >8X5R Ā3O4LE_[y vrVՌK#i9W)L$VLuHaՍtoBCw>
TBtso!6VbSbw	pb{u9]2B l"ܐ
ܴS@THpIy,*}b(l_Sf`ˮ2x[pN{|Kx^mYy(tWx}&_Yg>>"t \ƒY\]YI>s
/Er嫼<~BGQT#-m9l>ܫx-^ꘓ	=<}(MD%6Nu[	ha#-ʜpf9b$Q&ɓcJ]\̕TM=ŀO5YIxWpP*@>O47avwӎK*vӔ~oy8,T>wښPhR''-R>I-.w<p4uEz{iya
1}^-$X羃M 'p?G߹Wsq`5k~ڸ`]vB"_|2%LQw	ߡY͉y:`Z5/qqQ;C*`UKmMdBS.Ar)W;y!U	δPȽO=8xT!VgXB7"$K9g839q
UL7ps<V<wӴ!)zvxi/B3
|'ô3*ykA'akPwЉUTʐ,s!*$>YgEvJ*mi)IY}-LY$KAg!+Fs!^CxC7xc&:4N
wf$w
"D	#I}DsЂ 栀栐栈栘%N xk%4hsp9h&#p*!Z	x'4vv??hW!</	;ʙ>L^yARd	y)rjS5=NT;\{'}ZbRrS9&rMq<+h.~}K[F9~*iȌ1> =v]{v]#Zx@ ?u[Byjz0i mDN@oοgS'Bԟ_z=_ނ'Ab׻5N|L5r4{,DWg+/ 8W`JDj%"p2`YSNꩀIUv5T#z{9!	a'D_W!(0QGVyO(yӧj2AA8{XY  +U5קvR'|/mpU)Oe~S 5?hBJk⦴9Q9Q>U>.ByY}вԵDq<ȯT%K[Wը_ȣFWyĈr`\^H%}nI9=0G+ԩ0(*TQP57DͬF^̓C%[ǀ,YM
aqPP>ߦ|
ǽ{Q7~rQ?~+Ǘ]|)wOΊI|e)je(cpy>L<^>;b{>^o:Z(.,2	
?'[YլB3mSNQ""0"* Oޜ0es_p
skHO|M ^byD8!̶4KO*<yWN?԰dZ~X[=f8nOV|OZɰW}*evL*1T +vc!$~~Y}"M_}.%3|S|%>#L|~!>_owG7p"zpLt)U:VhԐTCBʐ3TdPK   dO\t`  	  6   org/mozilla/javascript/optimizer/ParsedOperation.classU[WUN&2r)mf[K+6
juHF:fƙQEy/}* v-۾oRLsy9{o?p!x Jб-'gK]V
6ZT:H ("$!aT7cT<*aguVwǊ#R\5SU]cN=NHK:LІv"27Ȼ
`b=L`2iJDm-P5;Qlå}*nu-~_PY8'<'
<C,<4^\-z+qܞp\KH?fN4㧉t0ClYՒ7KJm2?(ː"ƨoZ4MaB#>.3D: zY\>W%|kRJbFИ0Vir%o2%Ng^?Avp[ćQs*+ߖSwH|zn7>BODܕ{uK5bU5[˖i"՞S5exAr)/*_^J{Lu~
ty7ras5`?wlѬz3D,najVx4	;1E-E	1<OJZfAcMpiiнC߿#ӵ/~bi-:Z?R}qf9OЖʼB>?"/л>B?!_Cd"V~AjCF1rFyS{	O5c+>Rvcsϩ:/:$mDbDC8J?9|FwNG@k`B IFXe|/I:hO 4הO&8|҃>gE.ox#䳉BE@ ;o@8
SGX-=?9+nՂ(QnWI`sG8Xrwqr#SY,{)³Nx%!n8Tz8Z!	|7BY;>sScx3)t'GXahF\rD_h {._zpfy\PK   dO\
	  @  7   org/mozilla/javascript/optimizer/ConsStringLinker.classWyxTWd;ː
 H҆$&*c1yd7ЪURBpVZ \Z^׺VO=d2K&|ߗ̽s~s='s
me(pI@%ÂZ4{*[TMv17rVF4OfPVMP@JA"~DR5
ݹ>|ϰxd$91U	uO0IUMTK9|4غHjP EՈ&f٢wb	K%,
+	TmTQBkX쓵HL!ʘ$`6i3
E',5ɆDz![IXIu:Iéٶ'c
Z	АkBlSZ0,͕1G˱^e
Ũ
%lB+
JV7 hf4rl0JX9	9L\[1}I؎>̂=4Oh)a1g}]>wug:Uf!R{9:%CiW"kpM$ގnzKbfq#%0(44gisCL,a)A+dFNOvZq \D8;8$ƝktT-2`9rͳDJiv(F"<%EXl'NZD6"Yab랝cQ	PagGmg`QcDBL\
j
A	-j
,S$r8C,σ䌊q$4p%/fP}2nX$
Dm=f24^Gȧ]A?^"xâzPql]5E#PvKqZ3T^܃r^{9^-5iSɛҮ1˹&{tzZހ7δ)Rzss(U9-2"mY[VͨKaj	^匄1eXGa:ZRE,wnZ@[R1!bZNגA>"QJԋ񀨔ghm(>ᜄw[zxPs
fbHs|D	|89ƅ.̨]DEL6te6NR.nn~N_D1UCLHI2ݐBqLݑmX:l;p&8]mzn|Vz1贄nr@l;貆UbK[-eM|8%}>,$ػ3ZZ\3F5A$ Ē`ZNo(ƨVt4FŢcV5
(CDiR-dgو6
/%ust*䍥!A'Ίs0u%-G*PE/'p^2? C*a%a2ͦa,rYIˉq{(M@	>;?]-]=Ũ_0ús l_=ip[Mn$Rn!'7n
39E|Q^8LN+wL4uY'// ed1KNQu؂%9*iuf!XY?0MI\42\5i,~!C4-b_a:$iv1hSb34-1=9"ʂpKR7\B#wU>1\q= ə{.bqkˇhe%C
'l|Tɚ8kr*Ʊ9["M)Hr)x
}cXp6qYpNlQL#8B|D"#1,N!"Oc>bA8|ghxtâq7]@:}x=gkk:TK*܄HMh#f2u#A[$p+6܋M8CoтIE߃/Sh/4:m++Ty<A)ٗer^૤Z"kDu|bd}P*IG-|$AnopW~yߥC9n>QX\#) ?"- ?Bc9믁a۽u܀OY'=Ois:ۓ}(d&G 5C믂oK >t>n
fɪU3%&-ˋeZ@W,>C\ء,X~`̞!7~;;B
?6ܝfN.=@L$f8D!OPK   dO\{'J  b
  5   org/mozilla/javascript/optimizer/RhinoOperation.class[SSW 	r(b%"T(ѐ$ `lj[	8N;u|t	>vA|&^{}9_ 8(C+ٛv:mk|^͇y{žʅL\M嬼XÑب.s$B§9)LB*W0Y!PfXb,W~DPU[|s"1cz^-Q5ƍXBu<7jhژ3.(sDSNOC1cq6KoI_::;xYF:B	*>"ѧȘTBchԜ-JGq,O> 1͎}JhCalJ<c6ͨ=<+1\o}GwN<07qkƦǇOHL94hH`rτFc,.x1-kJLIgWT
bȜ[N)^
x #B\)
-{#ikmm`T?'1
vΟP۹sdkFOk0'@@@@@@@@!}G
0&U%>m˚ήݯPWC72V\
m>6rdhQ;̥r	k.M񂦻v]`4;ogɋ3JJ=1}<_.LX9ɧrn9욡#:8v7s[9ZOyr
wDv=7:c꫶Qɇzi.c4
51@sUp5j6jv!WQW:iW]5\s1W'ӯS	)nS?y{D>R~EO\P~Om_ҷ,D+|M[*%<C>2d[gQ;w<WmOsKߠ%=<do<Y!H:('xR8'ujIk !`/	-MI$A'I$zHzIt$ rpIZgHDHDI/=z)JSG b/R	.e(gX2WCCZ/2^lf>L- SNLLkz9A^ôz:S?z%1z
$Mii]{zS})d>ƭ%@T6w*FC%;XFX
?
FE9F3-Z{}اUDvh׮zPK   dO\FPQ"3  |{  .   org/mozilla/javascript/optimizer/Codegen.class}	`SU9&y-
®lmRiBTLP"mSetQGEq]P[*(8θ36l mRߏ}m; `h
BN0T_<#+<ͷ
#H1p?TX4!]%|UJWC?h!6Ԝ母 8&)2'w  cL1s#ZΟdBBf/T,),;櫊Md#x<)Eus!_$lN
O6/Cp7k|
s_` Bo?5(J?e:Z'af0O$G
e%I W?Rl	+}t'';N	4m@vbفXo,W'⤅:fKytGX:on64 }O3ހ#(v/4o)-qD d@#:P7_;M$e*)%I1`
Яѷ_lE"*5EHF%@=$ĩliJ!e	h0TD]5o^C#0J0f"uP#u]Ŷ<iJj6&]DFPIZll&$Sy@Wc"ʒvJPgsH0pqiE(Jե0IV?ni8acW!S
%~"SL17`,DH/4-֒+rS!x,`'%ST!!/7EpvJL*}h4K
8|9L:0} ׽:V/Pր: )NX"CZ5pP<N/	{C1V#Pb4NGMF5PZĜ$S?f8ǧE
p2t`5fM_BX2-΀358=\ǒiecKB!дb}n\ _oZrMK L%E\PRaňhԻ\-@CPȷ<&_y)IsJ49C Z~Q4HFntlF%pFazNCR:D*.$ftŕ<[AY)qN
ax
07pIl?(wY<<sݰI{d)	>.jlH0Vx"YX\%	밙^Q#Czvh6b#ȲKN[݀a%Қ𜤚Nx`;a"-4 2)',QQQ
O4E7R:N<KO7y*WBDs\^0Ex
0aۯ^
R1IWtXeX!:APF105TO6&°'q"=Uj]48C1ǆtVrx>T#Gpr&G|{I#!_SxY0Ԉ42O4ԀX%%WMjG),$RiY/
sE&2B6X1kկ
_$hZE(NDe?_|cq%"q΀JWZN,	4>Q rĤ?B12j/k*
C,RE4qmİL=c0:8I:%D	tr'UMHKׂ0͎
5aY؛ל:POE2U5Q]A7\e(M(X2G3?;l& Gu)48PA!S
E@WC~s+
2'w:
3B!JPp(hd8򤑡ViQVQqƫŜyz
#RaZgsc)\֤=H
2p #	N%Cf.ہ$v/"q
qNidV1ѩez	<q3Y3Hynk80WG㣟j&Φ sVމ3P

XPs:p.Th08`lz+&l!t\Kr-]ҖR&UH	a$VS
a
9˜Pb )<Q`2.Mhaiʚ)Wy7$o Y-yz.e;/[=FpK*k޵CN*ֵ&$I3_6Cg$t<O 
_jx&ʸCǑ\sqEf7-XMɇ)[F/\s^n#el<bUet@\eq (xե`PJ `7	B~^`u	aO^[jL0YZP!o68Mod
%gLgP.f(abxusf3
M8e\f[}އp5S8jUY?M.`[yaվ.>Q&.fl1|7|Ԛjr+f6bԶ؆[#Ob]GsW$.q`W'Ir"Ȉ;yoM_s}ΎUǧ\5q+g
,t;5>o"-bްDln/6l+*]w7c%Bvj ]ѯ/`io-r5jˡ:H4ߥNa-.*E~:M}sך]0;xE%G 2k1(짳Gg
>/3#G&y:ߔ_!8B1G)cbqAeOTPokh0t4:~GnhiN?c3D~Q)V&(%>QY+Z͕q/ƑLQ	)4C"H]0D/y	0Nyc{%E6K2TvE 1SDYe0<p@<17]]2za!8tq8.t&	M4(u(6QRA%rǗ0yȋ<l9}aޝlzfcBq9hc b5'M?.ǋq
<Qfbj
12[_bCL~%Kbc =3N|
q;NNDb:&ܖr~Vj=+<M~NY<<ZaC1s^q~y~3D՝TE|+40OWHhETFį,%8paql[SݥKuK=PEmlrǂƱ&ׇi7rhUD4CXtјtHH ;Ctqg]P5iJffo-N̾c:*>fdaAƲ9krzɯCL/8sFHEY.׮0in(z."d@`z!.[y~YQ2N3cv!䶎⨴Wf&ٺ:uq:q0]M%^ F6(ˉq!~5.JC܂J̸M<ܮKY:Me&	5D9ˬ^q&7Nw!$p߇LIXw>iѠG
zQb,NE<fV^X(VVI%ΞrںOb'!@$u̒*rE`'6)C<-!EқLC>ɒ|/t׈/X57Cp7=AcbHuS[j8H7C,$ⷱNp]@Bq!CHP;.#V6ZsTS| >GX1k"KZJ_O꧝O"#|!>7쩹6
6Qt7MI$QUTH8WsLt7aI[-y"/Ӿr27U[C|)d!#JCY-+`]6}M!A4Mڻ:uWUx&TKlZl	;etj2ݐXnO.3Hf'2#eޒJ#``8ObW^8!3o*v>ҭɾ'GuGP"3y4z9D59`&t:dmtX>a<\cadMT)nх#]$<1;VWy3hh#UŜ	c|NAS{!M')TYg/أˉenX$4
X>S;2겘wɘⓖNr2+1"U%=/jrjr1B̘>tS*V̨5gҒUUd  yͪsg3[VNA]ʦ/--Q>ݺ0}FUɼsfVN?o.g!Liт7f 7c.-,c%na3*OzƼ	@O0Wɜ3ƸӒ9U0X3r܃m1(<̮*_YR]6$t{.ķ'FD-gPRG̜QI`b"-VC"LEN>
I!%?Mxe,^XCO%%Z__(C[dywk}L˚{xmcx.˱7~X
6&Tm$D-!a|)i窰UgH="Ƒ>V|ob9'ɮ!uزv#MXT4z4%郰翠«B#('W=fu1-[eI#'n k|aEر3 3DFCǜO@h^TmtG߳	OXU_уӃL21#J(
rNK+1"`N!LU9fL&|ךǹ	O4#A'1]ŷwHR__N8(6M$<_/$|ԫ+HȎMd'8nt\]:O\2ahGBhrC'zVZ޹1s^44Aķ
lUUUy)OE\FwfbĲC$`8 c	s*ס|@I:MiָC4p~gP	
fZlI(
ҔC.b 3K3kԬn~V3o?2
9JోoR',MwHd$'ZS%T$I?5bYΊڻ!uv{/=Y\xZ@pU3͖Gjukԙ1gsܱ^[|C0:/;PV+SC55A^=fޫ
[\#X!ՁB簤@pYD=|F
]HOS
Q"a^Q}:G}{RT|3T;NRqz֍G͟H'`	a;M-tޝ%M,b&hW;2}esYej8Z|no:zS5Xﬅkb[	Y7-{摍ɷ{8h#]-
7[6Z|pḪ?R~4k|#~#c$~{<U@XUqkX&&|ei`gr?|)60O&:p)fD26f7Y6MbLݖFKiݖNiT^|o]dE]k"RC~?<	66P
2`m0s_)y57ƓӁ}nlY~sgUdJDPm0van5ewR1ַ,JPzchN؞XB^DATfil9)ΎĀBs"QGk6&w_k#VDFCcWv$AKImBu%c3;a18Nrdѳ{gKr&ݗō_OHǵ?Lb5Wĵ?Cqߦ9]ύkHq~AB_=ak'ƚ}@RX[/Y~KXI4.rf}R߂
~ fCy2MqHy[
((}L.+*Od}{Vpp1G}>xuԎ/YJ$i'Ru\(y\")I`Ua6&
%=Ql	-HWy8+	R<"&$|t2$>O=m.zO{Oo"=AE6#n|M_clq0&0<mC}Gv(!$g<VU4_ඵE0g=<NOV8a3ᮁٓo2O IX 3PB	+\8Gqlp)jeNlŽJTW!| WS:JF3 Wd@B\ɍaY%$EOy4GP
FRaYj|թ0tE2<GkDw<.C,v8q3=ud)v䙃bL
ǠzKSY#|rB
bkuݛﱣtEJ*wBc94Fʋ,)ԤzƨhtBC|r1"WL74v^ԴbLCc>!qX#Ykm<.^^ѓ+<6
/=mkhI]<1=N۞E2{KU<tX$a+m_hvܽQg@=ozl@m<Y^^d*G}qk};c
$2Uu7oYt'H]Sܷͤ@.
`mp<Ka#wp7\^	%{m 좈9/@+[hB/{.!<I^*/#(![^.gG^)~ϐ\-!A@^IW omyR-=5y$7u )(JA&&cDL&>K9"9ʛ5r kpF<hf{tg?_RHE޺[-SpBѩ»y{|q=d={|Uídb䀿8Ġ1ckE;}ފ-
3H0{s	{<CE/hxҁbi1IfÛPo{[	zqLD51Z|PWنkdS(_\C]bv`J0vCn'^+5z~'71x
=!};]ۉ6<7xT)rmJnbON1ӆlAu=Ѵ?ǰ|cp
7ؖ2,ъ%qǰd+UxMdʷ}M>oK(KOBTc9b)L|Il_W&%!Va?Y쁘X*aܨX{4%wLEF3˻rgL|w r|H`oe 8SR߃=,V֊U<1mAyIq+c8ao-[?X796vJ#ɚ,zp, `"c ]R
aZ
{08e}!u9m{7
O'MpOV\.JZ,ľb.krn4r܎
0zx[ڱ
jD5@4 3a0a< ]0@)azz ԠSa0&G.酖|/S|ȇ0[H9K#zR^Wn
Jә`ȅ+no 9pv׻ǯaXp
_ɦ=g!9%]mŋA^֊W?z;Ë@n8\ϾւE[Am"
𮸇	=><XHռ`2At6@׭7NoEN3ߓ֎QjZdfUHѤ9$\y^P0",$zgxplp
$h"؅Ű'ëxK>c.4Ww@H#O$wi#~^fޘ~J*>m! #R ~|MiʑԦh.M錂!Ga'b0(RڳҲgjx>R< 9K" Ј$۩# D~eEI>'\ŏ\Dm n;r.ܵ	HbTRw9NΥ_v|ͣo:<fg,>X$ߎs O#pU0
O2*fOv"b,%YJS$:zv>:]ȧUCUat`f=2/"W'RΙHN_bD&w.|;y

[sloýԲ
?ͣoµ!A.&dhCrqeDE%afÙ!%O&ͼiR
jQ`N%*,Dؘ;8C?&y^ϘLNfcc%b=M21@FZi l$Mh"l0WM4UkTB]]4ɿ>`~W}΀O7A~2R>()2.)WAx3aE
r6PPu}.xAI1*b$UH0IRCѥH]_aW慦?ڠGS1f].CjA[~ODF*> M*ҶhsS8<μVA79^i[o.O}=N*V1xrpzqntOzȣRO:'bmPl=>Rŧu1Q}c8t%K(\]Jx9L+`.^	'U&Z(C?|x_Íx3JgJakIō:	]}5`?>|эq0؆m(||hSIw
iiT_.{CV*r(yAt%B];a.|-V,p##1ת)	r}a!G!3?wԭ["Mo^q7^ƪ=e9zٳ#NO7 MLA
wmbkg㾽a-~]Tzxh'x3Dʡw;FgB^xMk)
|뾸|s'~@>E	/2LWŽe)o(}T[EЌJ=H<]߃}?#ʗ4>O%JfOZi%K^J(L,_zS gp&:(b0*baDoQ/rL8*D}cS'Lq]dmdS68%j\"\"M=q`wo!^JD87d9KXk"ī5'DYLU
WoXoBzojۢ|dNJqTˁI)(wB!aCp
BsE, ^"\p~D_h`\I׉pt.pxFWx[h\W"%Q61&abUzf*L|U)_J1A0f
Õ֋'v6Ѵ
Mĸ6 ظM|=VOwe.3F+DKLwBBvK'q*;e"}fqbS`8rqqYTn(r-~e
Kߤqh<FNpn6zZI9E`o.%pfSL%QW=jgNalgg^8%~3al%Zߠm/

}%nM\PEi%EjO#X)VrʓNY̚ҼW"Lwk\W.qGAdHy;hwCA|.^b&x{(#̆
	d)\T	d%J,3R8G~Y,E=lBdsb!wMd!AT4B"dgK,Cš!ţ/q8c6*ARjAuhSo*lc|U:l3[jzXbn;>nVX8-yx|[- q66d$730`8-Ujk/YWX^=9r-S酛t`rnFWඏ+rD.Ruv{Z&kh9;&F=6c%LvM<\"$Lu릺=n}#<ܤ4P-QwQA܉Px\܃Nv-EQ BlL gުWjtVbm:q*fKil}gu߲=aE:[QԳ0;:(n$YGp$
ǉr6RNwEs/\(+d5P\y60Ŗ{#x΋V)mGlb;OW<NݤO, b*Z<^\+^Kīxx
o⍘Q>ā}Ȇ~/ T$R@DG}zNج* x_e=;OSJM1K~,l`YXtX*?C
0@U3ֳ|洨EY4q?Z+ag&Gkb{3ĮcSyl"ذuy'1Kdϵcbw
6@m;luxsEףyte)WNHs]߾&u@%x%^!	zy91n ^w_UM?>-p)=iȇy=/އ"LB扏DVt/a-T|׈ؚP,{'S'AdFKCԟR,iZkQ} %?XtQE#499r!1ӽdvHu41l\
 e3
} KI<9{7?s2s[.iKN{jkx7:zwNx}?'eHo'up
?5&:	U%;E9Cq<;	!ݶvYWym-g^g­	T?GkTkLYLa.ÈkdabB@%ӥNn 
LX&`ˁpWɡTaF{xHr<+so<+_BV8*c<	H)BJQlp#UahGJJإ!yRqXzQm~8/o8mXRu!O#	K+cKrd)qrok=?c;0QW3QGifғl69S@g+iP*W NKMK	-XuL((c.lj~ J8L3cf]vagL#ho#]͏ƿwfSpmW`/ͶmjmP;9fv7ԯn+BVg7х./^RT<NtTPR&u\W#23Mӡ x-^."@."`lQtȓҦQ~CvL/ȩ)(qU 6"Q5E[Њ69laKhZ{k.їo7A:]Kk}{w,J*0V!j jΤl+ρI|*14FGES_Wi@7=3gdV|ѕjsD7@o_*1|D%DDeDDDDu0M^O
P)By#zwP䭱OK|k#gBZ0`cY1EFb~0;NdT,*r&vqv3Cv=ٸ>v?OسȣGgYOH䄭h>!qxC0ŚmjU{؏MMO0%X-XQ"'-ҙ
-NBNb*Įy#TKɏXB-1rL v^x*֟>؆M|oէS}3C}flG}T*Sd`c/hˣ/bs\c+PR([6V}ePK   dO\@dH	    3   org/mozilla/javascript/optimizer/StringLinker.classX	xG5\(067m0&"-biWV.Gz&mz1Ӵ4-M
-!=6+>һMIJB%|_3~֏]>f2r@T"CGڦjn{
рiZDJDѤM0T\/a|ˏGUрQ@$FIzhTj	S>U,S,IA(fIʹT4]F<aUG@bݲ*$d.83E±anD1jqS'>H(޸bȦk	+p-NdmWlN`X)lȍt"rpX-a
jc[H[
kudߑ襨i`XR[n0au0!v)iˋQxЈ&
6bCdGTMcJ".Hup7Cc*9-6K؂j"GdWxxЂm7H؎gޜxܩhm9gH
ہ]vaT"sp^天-*'F9%̐F*z+fDΌ=rxFdc@-p0-44^
{1&fuU-<`R(CtgeFJ72p_k8,`v	9:!	!n
{:H(6Aqp1Bҕn'4w &AG\\f
p]qu3g&n aJHbܫ1XTGDpI8nXzzZ{ܸETsE#"PJx!^D%LbR)m$iJB+ut&6#>{:ehFC«C1Ӊv5!"	e8^˰Uaw̃7of!i]ɋԮQӾI;vzV.	89u$80LORR@դ*r
;$,$auaz^|4G{q7CuLUt-$C9B+g1L,{~H8R\XK&.
54}HԒX(!^܋Ӣ~DKgXQ$"&ݦG%KFZR\8'~4h:u5Zh(p[	k!\xX SZUf*E]LS:?p<"Q1^˻cVCT$ѝ,AQw4YAL
eMSG{';RʣdCQɊ@鞟۾ZχdMl~ZYzҭj|m[DQ#E i^Ieln3}o)J15Xo6GXvf	Lr.HI21F}lL8FIdx	TvSWm*,;bԵD{zh[[pu6_RgARǱ2uԢϾaU=(gr̴Az8BpPaG;龑%j!
%{?`=D
d:6VBmhc;'K[[l	nU`&LCۙN4A$,=y.Ƽ8sRWftV`7]r>3UeU5DHI]V``,bQCh''g_uX/Яd=`ReYJ}Mf-+Z|V߰V·m0M
0Vΰ,dt6LyKd9C
+Ϣ<Ś9kv'>gCv@{
n}}Xw}~W
y#6Ss' L|,H.jo1jimˣxżw_Rx8-E$^JGe|QT\g&q,[xy.a?gؙlBN`Qis+Јhl@6b6Qr6cNnVhF>Rn6܁;p?ZiiqHq=N>/#UAۀ)*i+ 6e@z?a!~Df?&lPF~FR\9idKZl)Tq8<s9~ECK9n
#|5n vߓI}7ҳV6XSpc}fM?VVO/UrvPI^5j֪ox%FCg]UY]UY]Ui]^f_x1_J-ϗ)d4kay&GrD"]i^܆t^!I\?Vayͬ?	ÿunXOS'Ӟ?kaO@).3bPK   dO\0I9  Y  4   org/mozilla/javascript/optimizer/BooleanLinker.classW_;8F`[6N.clqMz-֬v	ݴMڤWz$q[BZ z$mR/mJ$#͛f <QJ*v^g[k"1N3TD8BB=m
ݒZjMawKP[gt۱cZD%cYK7
k:&unn#'.YOB2Qpv&c)azLn&#g"9%ߣ{It	0X3{cjY
{
ϑ]h9Ȱe#X5C3a
C,SM	B10=zd=TF5pר,wuMt<c8p']ea"6();yV M۞ΤMJTy唆>m/4:&7":)tn5.述u0W)rꑳG4tGAfSRbCЏ3>LJX
cŁA8^(
QA\#A!
8pxKc_5G&'ɣ]sd,C.<1ץF5\R.wI\.q88-|2>1
'pn&/6ѝ$9!B>9'W(C{1ULhHjF}+'2ʛWI;!PY
85RSyz|0T\#:uedDҸ?aΓ[=rS23W+3\*5|PͻC}Jнˆ7E-uʲ+K(3,4|_ KLL˞iTÜV_R!"yPDI|YV[tt,Ȣlg<G8)j5|Csm108;rnG$k8"g=")Pd`T:a	Dw^;I~P&5!QxSYq|^(G$_XJTfk&!Iu]UY0&-!ݤܰHmU|P@8#1BД=bMy"#x`LNy=I3T=r U6/Bʕ)P2:ߤɷӃzZr,4Li?iU8VrJIg&%S'ENstB]	3A3NB1TR
%m\ӾEn'XS6M49Lwv?9ޑ]rbѱ'3zճ/ɅyCxkRzp9Qu
A
0|l^Y,q>Oi]{xA5=5_ 7}z3 ?$)xRe-65+,߭EeG1$ZZ?SZ/-
ݶW*6]Wa
KhbQul2cG;9N3.kq%	>`d r/Cչwn Y̕X/㱎[xhMlz5+W0Y@2;<y!P/ͳ<PcO屑M<Cu8<\FJ63I<v0O#A	W.~7
e"n~ߓ}i
5/<q`$[2.?_c	;5f)7BoIVm,5ß񪲺Q)kPy2A۠#K`k2]@5*y0+llZ ykή	AzPX7of28͝DTM5UcxÿV~
PK   dO\
    3   org/mozilla/javascript/optimizer/Bootstrapper.classY|SMon!Am#
VӤ4.饍IL8CС**9&M!m>6cMa97Ii'sާp} R;,PThDo]Q=	Dbt6k03lr/DKH"'ґeFUS餞HIЄL~t$#(vH'#R%]bz4[./͇jJ%]@K$앣*&Zx2l#1RF$^3CUyxҎ8YHjaEϓGbmՆH7XcHM[f ຄQ.$=^c%L285LDB(DBUu
+FvgɄyɎM0
:w;gHԕ4:=6r;JPLt `JD#lzQ^Szq}	3 Oo1FSÑO)ͧ0%[WﯳLbR/2	h0M+/H,@C9!ؚTseѐXcp%
X
z
<:O
U!55F 5~kC5e'3yk|UmuLd=V
J+-7YJE!i8@IO6ǟ!+}S	=	uyꃡMfa
`5tsuxR7W g	*".A(>=HݟoK<-kXu]{l=Yv-}S*P*Za	PmBk8߄ЅZڵ5ԛ
&tHMvDc*lIƟ` X_Sɶ4J/5l|oA!V@"6CM
h$n]Vp7//W^^sp&_'X<Kmr79ɷBNc
3ZYՍzm1Rc#ݡnSz{5lmm楞p	p	p	DM
гv~.l՞o_hx+ɿ޳^plWY6z8ߊ$>:[,5D7&HLO'$H"Y[8Z[(򤊿Q=ZK*$Z(QWTK"wsY9xVΊg,lx
beb~*\)bPׇ"W&SQ|s7n_Adz7ab=:;J\[X)@HBOKZ9M{-9-t"90Uc{4L6;>óec`QCe	Fe05XMF2HByT[bY_`L6X"xFNfI}]y`5+=F*GeDpZ׿zտEECLcGNeG\t6|:`/Ri<?h`lXFM0Mh*M2uHg7z.qDP)A'
=mdNKJmØ`Z[Vɠ鍇r=xXnƔXO郌9bה-".7r]-OM6;U_ #yTqA>yxRH*ͅK|b
?45L<'qB]eFQ'j9|N=b@56d>de[ŌLFJ%~iMTqr-01h#½ *cZ	̀o$h&%YkGq0"T6sF'Fvvֵ AvO.:l#HsLmũt̓BZcy!|*ypcJhz3kpsΞсwZ.2:g?W+~l4DG[ask~ßNqiwnaЈy_
ZT'WrzೋxȊk)9G8S%euc<?Y N*WJBθG7%&5H!V1ICr,cB$\,ULKG eRI(ua2pc g2IP<H|5R`~7!eܚ]RV q{nB:khǗ;rzՁUK{t>-$1tY"]5k\>}=P.w~C60sS/mel+m֌
36.*c;i9j64g#K͸s62_O0ejmf)l6O)=[=7ZnwvGN
j']x{;v1L;O6y莅3~ǯN
c'>VĳGKqC{¼$(㓖zc׼M]ROHu0}:{$U6 RG_g|į:jc|ģ(ƅY7~0j֍ʸ-Ədܸ(ƻ3nl*ьt+3!pp
&L&nwrX;:MqAO栧r99g9Bz):u`oDPQDrrZk0*zM,a5(DHПp)$hOFG3eB\np\cqe6e
hd
,fK6[3܀[-:nK+gYkq6%{W᫱]+C-x@*wcr v)[dx/(:~ǕߡKy?`6R~C?ʿSs<c]gyF`
/Zl>b}7aL\X?/ٜֿY03Hm>>VL_09W?T:WTT$~9DsZL9<'\=e_T1wB32
_d;ƖWwӁweCcHyCM!lh!
6rʪJ^ObJ9
s|xup'ߐ҅Ϙt4*±P'Q d"CPaYR!l![
a8kwPpGI4[f}ƅb]#4N{5d	;ٌ+QΙɃ-X̙||ɸ*RqT)h\k	Usd.Z.@&aPK   dO\l    5   org/mozilla/javascript/optimizer/OptTransformer.classVOW.2]_UR[(vX]f֙YDkmlLC&>DQCC_&}k_>5McݻYt	6mg=;=s'_~
 nQB
Av:D|ʹfRF1mxIJ>gr
w)uX(5:J8iߚn?UϳFSfIH<^9TNH7e:[2	ӧ}d}07T:.>7<u p,ֻq
Ϗ*Q5X/M[W2cT+tFlҰY	X6U{4l̳uȹdal
;u4 &P1J	m9iWo,%>s4uFT@wNcgYIlޔz>.X>ثc^fXؾaٞbDl|
ڙ8]˞XǰJD<e,:C:^:alZ,d9T&eLLKA.̣O--?zh|V%{L*y&0NWI}Pָ/[MkLu:<&N	TwӆܢY}Hi3H?:<fM9%:^gqNyHe=A :ѻ:1ƪ~^TG1&3Gi=f/HŃքm18۸:C	
V4֕}S'ЩYkf_fjt6hIaõ2OZmk"MM.""*@+i^)#4kXc_Elu	Bg7eϋT)gH~)svFCϕ<dܤmTUfu4Go2
LIs/[7/QO7=hj~ JQUjC
(F-8Tn
PR֭)(Rrmri͢.K2Q9ȹ"Qb65̡χ%2XQ2K$JSJ᫳Iګ9xit@5:(_<YwZqmy
ZQ:`48H4[qߪQ-t<>ABp=x1:J
(},GH|#M
>|P44@4ts8>E6V"u9R
aP>Vb>ƈ~Mc\(hZCi\f>Y-ahca2S0zЅ8i5^\ds]A?<}!ጺK/0 _yQ3wqs,+1ZEh8dO|e	Ӯ,Žޅ.,ZhOPao7G>PK   dO\e   y  Q   org/mozilla/javascript/optimizer/BodyCodegen$ExceptionManager$ExceptionInfo.classSKo@6InC@KJ	H܇ŉCxH$(Ng8hA'<	!~ ?
1붂
Ee7;3wϯf	Paxw+yi7i
n'B\idOlkO#-.y_߆zG3Ǚ,6
&pwv]_>CZ똦
΢`Vz/V1iS	<oa@& bHh%Kƽ NHjtd|-Lyoz4Û?`Z8x<M=U0Lnh]n@b3x7ccCk6ڧNieLv[B3PhM~7+Oa&C-"(hBm<Dý:zS*M@	̢IqK^(F;Fbc	\!M9k$/9,8o	EMN%Je)[wceIdDv5
!:YI܌B5Fa4
$~PK   dO\dRc    >   org/mozilla/javascript/optimizer/OptJSScriptCode$Builder.classVmWG~&,"[-Z(J	Jk]1,lv
}־ӟaϱO?o=@@3;3w<s{?=qA 5
1V>Q0oi&f9ZZIEG+h8Wtd͜h(izNX~М}6a! ±w}8Wܚ)96`K2Boh@#gPWm{L-XGZN誑OdK36hf_wuLH>-;Fs70v)Os^cB!+f"TAVSY14XgغH4m\STps
S!,MvlA;b3lɉ!Sƪ?9PupR"B7CX׌YsJcBr=q=>-ӰuLu46YBb:MD9ƲιRyW<F檑x2;|~M`ӖyCi%% YAXIr1ȰҷKn:i!S0dVK))38K9q"Řs<ሼ}uA0숥VImT2Ȱ
rvVu.iδvp~r%K/q*9F
6s_ᘬ]W]%RA,j_P+R;,r
u+Cy*gR`.\IQԐ+5.U	i\߷ΒX]~1"_ܩۥ^8+v@2~UZnEuh4ԖgCrG%ټXO~}QjWg:%Ƨ=KK[r$c\+-wǄ팘67CuT-	g#(3g,k>g
>4cΜm
Đ*<Oy+zFNv[4gK'ʲ2n?g4ǽ).na+!X0(KϥH[u1V=ǫR <e"C4;AR);Fhv<xZ今0
0hX5$Cu_@}>M4q<c]`
]t
$;c쫍Gk'//EgrdH\=4PIn4!AAt(= ,}k{HOiv4a&	|Qěĥ
a&6^:,(aqF7pvS8I<[I1o}pisߐ~@\_
}}3DE&]7j<𩕸*p[}Zwqnב>ė4OTAܸ!MK7? ?PK   dO\lo    5   org/mozilla/javascript/optimizer/RhinoNamespace.classS]OA=m@)RB|RIc	iخe`K[y'	$B4Q;cɽssXԑ`p¨cGF0vXű9Dn8g!i!.zaԡƒI[0zaLt[àOV
2N&cY뇁0KyPs6w=7& 0ŠY'#Gozmk>o48Am})sakY"^a߮|cWH4\1㘐PyixL;Wǀ"8p_ZX$oY-Sv.~GBē1ڭ-2^V8I 0ʢQ+t]5ܝGܱ:L+!\/sttLB[@hH/EL)EgK}!O.f6@(fM]`LS0g徔$t)9BP=
%MIǌB)	jqTlƔ׵Ւj?l[;VNB/,Mf[eV7
&U_̓+^徛j!GryPPK   dO\:   F  8   org/mozilla/javascript/optimizer/OptJSFunctionCode.classTMo@}:6q]=b	!!RUڀzqVVkT$3?
kE[3;y3o߾9laނƧ<{L|"x"yOpu#0x6ơ+=FqdƂ"<-wb'O 8Dv/0;}mvN^&0`86mLtu
,	JKcԡ	>Ax	OC*^
ygEYH?&Q<zE
d"Y(KjT(^JsUũYX$X8`g-5k/S pvn@)
}Cu VD[۟@Δ2e55;Xu ʤZP^K@WXMYiQ/M=Lˆ8+YqTqne q'wqJpfg PK   dO\}v-    8   org/mozilla/javascript/optimizer/OptJSCode$Builder.classURA=6YBDTzA$QjRQJ_d;|0TiGY\, ӧITTl
4uhx]3Mìr;gX7'QFqQ`
Ϩn &;geUbI1Dkܛ5u-u0O, ԭVêeÈ1>148l0з;Aux+i2܏EܻOYvXDWk3m
.EqWvH'Z68O[~z0C,0G5P<(FNDD!BykDeC9TeRνUQZop)۬s?tVɓLg10T)R4j5u\
!9Bd8`XЬ/s/Re1ĺV
a࿐_vx[lHb4]193-΢5E:pF(g̠t9ͥ\)94μ2}P}ETл-ϸHd=]O5xyf[wdU0_bJ7w5OgLen~}Ⲇ1&xjm{moᶴw0bA^ " t;jr,^@2҈fV~4IlUax@iPե}G21fUzDXT~ka$շUZmcc7ZwH
3%9" T0NeM0Y<-bPy̓A:ᓦ\_x&mϥ}v^ė󅴯PK   dO\)    5   org/mozilla/javascript/optimizer/Block$FatBlock.classTmsU~ntB+/"$@VTHmm4
hjvm6>'gP#~AMdSL{9ys=~
u3@RfFodΓܝ	-57ZHZM)S#rܚw+Nd@G0u°@vrUy2"B;pQίGn}gWeOaNA(pt(K^e8nbTv81&)V(t7\֣Gq
iB2E3{# ΘxgRn2q+ƺش0s:Λ؍v!]o#6Aj4Gm;XK&.#'8kjhz 쪉9u8MDԕ7lgÿj.XzMOw&F@WbH'DPm&pɭ9Fu	6Ghɷ)WF-uyծ9@-_~UYWI;	x'G}N'`%uYAuT7>J&o[eze[қԝn
'5ubÌncQJ# N!,jN0tڧ3|:	$;["np\v2}\sguF
gߠ?hMG~yB_"W^8nb1>Ʊ J8!np2!ӥM(_zw'XвS%Ą+?W	QY=,4LOLnQ*C9z|HV=ܹUo9>
ٯT>01(t6'~RS-
<W2Y\Li|ϳ)sҖtų;ě,)W?9@ێ0uY.W'yUF<N㋘qLcƿPK   dO\  #  4   org/mozilla/javascript/optimizer/DefaultLinker.classY|\ed&w6ͤi;m)}i)RH#M@22GZ
L'ɴHZ
**7T\PaAj[5V@q]]PUWwU;3IGW{9wK>`PÉp},laD2UD4sfC\(PctAh?Өo72uDwHsq,ܙT״-m)(0UG܂3wtޓǢꗑoNcWH#łьj#h_&,T[j*4TicfTJ's3О>+FK	4i%8;꩏'bz%mOet#J݁>#D	eg`@`p
<:<գI$."
u,YZjlgc63V|43	vHn"p4RջzZlV8[c9Q1ʿiCrjAl,Jfs>Ka/NCVDfd%pF4	ʇPǍ[3h[_(bDs'7j2RUWR=gE'~d}pS#>\2mhڴJcY#]z͖с3FK2mfz΄Mg.r"SlX B؀)}-Pa<
f
[t\1ě^/a
]ogK0mlabq5`4m2~lVѭW5T53RlG^Qԏ[ZDҶ3~Q]٤l+*h+OhoS)x{8;(!+8k0'l__2ugLѱ[+WU-qc)50Zm}x74j>lfЦ`L8}Dh?Clp%RV[ަv娖:~|[4mώIfF56MzxY1K[Sݍ{4ܫ>?ab]d;`>\xQcrc8PvQe[׳]ՀYjPJ*I]`J@ݡhZ>q%[i
t|sO]0)JS
AoȅiJA3-,>D,>JVxۼ^?~6ö(iq\xB&߈ \=،	 Y)y-_'%U'i[\,w_ح_
3LA[^=[:^1
7;祿|r*r~:ݏƩuTjgc𶘡<G)1vgYÿWF8Ff׸%8&R,'p~IUOTu$Ei!*4^|7:~qbٌaӳ-wjh?'rjHsw῭PL?V-ʅ?PJ[<wtUaT5PV}$,R?roTeΆJDM7nŘn
Wd9mFJLե´TՔ1hezNhu md):au ,]f+!-C+\r_2I_"A	˼5sLkG"tYDOKkt-QqM4yZKِZ͝ޫֆ4d(
e.
,;N|2n.1-ȍ4
٫rPio\"͚֥EZ9nKlZ1veLc\c"eTi#8g!~]K+
Ô*>oC{tҸ?w۲=֕LB^
lMQ2I&G{|f	#3e3z|Px4;ZD9
vBm<fb©zV!8N#N0A7zמQTHG#FzXwso#b8
nCq\(砳h"F38ֹxƘI\
	n2gp	M
׵&Y?Fz-
R\K<c1'kP[  {lu2*',|(WLkFa>j*cGVGR8ɆcVr2mxXU{QўD8UorI*}.&&j6!\~)]rJn4S@)/erܭ=::^c,3OFkdjC&r)>/ɘ}2s`~	_t|yA%RD	[TO(JQa>]bgV-R_%L).8Ǡ~lt+:(lt.8<,h,9J6gr$ʭ4FͽE
q̵
'QI`y<4NO!Tlq&\y&X:Ƥф%gqU5:Q^g7t
v$'r7
dv3<Gzkn$ ;d')$$pG4
5Ldxe|R?Rfb$#i	m7Ӏ\y j-CvNEI)GGBg\}p3sp>moMfj]Xmz.&My^d>)ϋM(vWTs;F~RDU4:hu /sAo=}'"213qoI̗|yژ3"ɬXJ0If|~5_-O_GA7Iy<}&5S8Zqp!LfBx-gp)sS	!JG Y.İI][q+p%GOԞB#؁\q;m#$&W}xą/Mi^y2YHv3ո^vж`Г#ѕ#i98Ʉ#=Mn	*Ly4v3CL2P&!'ѩ2XXČuuϝbeW`/*oy*NxE]Ş2ugʺ.Gq%.UNvܾΟ+	|P6ci,T4yJT9X,;܊U)%9ǙGsTƣظ*q;&!%n^O0$"|Qo	qRd>%xJiigxAs8$pX>/A|I⨉lX!כGӫ'j?Q@OPz'JivXw'_͚5sx
5PmU5Zr-H42l2mwly3dxl9ycd̵1Xg"Xgl"c(]:u4(*U9@֑zAZN'uII-7)/+<޿.{kCz{
܀o/u/1|<2_)Ed~.cYH=~jM4TNS;:4L~sOUU{X܀1dG]kElGīzLĺe#*K&Aҡd:&-x/9ۃpP$^fnzerWe jܫ[ZpX6XR[S<S
ͩl=p=Tp"}>*S'{iOVs`XӍa>}4'*C\QԫÅ	]鸉~q.0/4&U$T6C'n5&;>on*8JSIPK   dO\-     3   org/mozilla/javascript/optimizer/DoubleLinker.classX	|3f3rp;	B@	Iv	!]fwXzZѪYb-(6\-jiZV{Z{ٻj733W~If{>) %d!aNePqcNf_Jz{l\CF!d"/05YY}BEq2Q0}W|F
}jR|.-CaS6I(cX{K4OqrGׂag KHZEގ+a-dL$W
GuTS23̪nM+TdL0UF%NLd1+&'sHu)*z`R	U 0[s15}?Ю(W3,n2j0PũLwDzPS",f60Я:p_Z{}*%P/yFn5ƪ,g3A2mzf-P3cX
zod@Tޜ
	Xr\
.WOLh2qtfXѭNT^ZF2Z0'`pޮ0YaPAO	ºud-HJX']#@* [ƵSU
2.F
(vPьک#Zff)L5땰5XFۀOv(PO<<2<:CF/,Zڱg3e'Ò9gvu~;hi]Qe[FeD
mv&<W%	fB]:j6PqY.rs'd\PWkiS0,nd>6Fnø-nqƎVwCg8`eínq;3LB`0ER)ۛߣv0Fj?DNŶ@=q'7n
#UCy;[0y8A_ {I$뼤%B6z4£2zUiri!AFE1I#>5DQn]A,0J8&8״0{Sw(_,a.wcOsN&H8t
s7ƛεTTTeS2o&Ju2"tsӝ{R+]	,c8MG	o}3wede|ߖE;dbIGV~Ҟ&[|T<Fipe|Q^ehʒY; ጌϼFYϣi\|5׹x^Eoe?#G[2~7(qiɛd<0ΐZ]ƣ3SM.;{s`o$`[s&xՐX	I+tQmQë~Z#4O4mM/SDߪqI+-ok4(~a45inNHd1,YjEzީ^?EA'ÕQqLIARCK=gzj(<qS@/EJ-`iuduuÌ24Hgٹ8N=@6{F$ݡ@ldc(=mJHfhJl<zTj=5h4M>ahNSӌd䰺'lf*==t!x0Tfcß6rRMO{#wRvg[f!B6HZ2Ҽ+uW8,a,u%hv΢*PbQ>[`NHb2sS2lqf]x>,}+
?-%OQi*@%/`&s!747zsғ񑚣`|Zo1X_x¿	Ņ)S*q
	&oߋ#
1(lqa؏<v$J7'mavVgcuy0sU).Ϊ:;p Ƙں|Q[)J\%X]g+}u>wP8(%*xQzc!ۏ* GeǀA)[x]1
%%`o|OGß 4H+JWmzMZWYm1'DcODcO?HD:r8+!=qx p00 _4 
D@i,#0<ƣx!|e?Jpb1<yO'r[yQ|;l2V{
0
E,̥2KQP5A7h:,=XC%%8Mq2*G=
d؏4k=UٛXA5x\ CmztBX'\Nft	[88Ax
a6	oc.y*"q*sqx..[+nA>rR%0"}s㙍»TE,ybh\@1;+
Tdl,+8S[+&zL( Q %aJ$J@"X|ֿJ*&	F%w"Uͬ[)&Pc۱d;\C&M&7aM7ajӚM=-y07|xGZҞ8Sid"hlɾœm1O:-OF<2]Ε+r"~6\~S':F1VNlqIk}ہ$7őLLJ$`G#eYF[s'͓ٝ@rG$f
H͝ܕIHΝlqM͝京ٕiMϝdZ㹓ܐՓLkr*wYERk\A E([0:p?rE!"l%&|1}VAW;-B<4omԑ_D^B1^s"ӵbm\ =9ٖۅ1Pg/ͨ⷇TF͋3@qkֿH]4|2!*>ͪelgKZ-EPK   dO\
Ҟ  6  1   org/mozilla/javascript/optimizer/OptRuntime.class[
|[uK,;Nؖc`;5͋D$'Q
-A
ݖuM]%1]~V:Үcknv]GϽY~4~wu߽ϹϹWw9	"zЏp+𠐰"iMޤjuLK|\7p3Ʀ~/Q?etF҄nBK\MlٵGePPERשrǮ8KrǸI;d"Md73r.*PU&,ɳĐ6'!BHgD5zq:,$c7i-OX~mlt
fv0nKP=ezQD,'uFr}93 2@BJ",L_&҆k6yؠA
ԸVAakRɱq?ڰEo3)ռ`t%y?ZVXGɮ~5>Io/Vp	}0B	(9hrQAW(DV8oݲS=s#\`R䘰a_,9wQq5Ah4Kuia3QG0z	ψN5֋a4;hTJ=;@9@:tE

lhߦ<U쥟}Sڣ
wi1]$i8Ln$!v(x/v	m-s?cZKAL=ݫr j8@`7Fܝܵgzhtw6CG\T_츞Φ~/e6ǵ5Eli3H%ƵHfW+[MudhS
n̈́!-Ҙ;Djmi0*&ݢV!w-e쉃g3>ŝ
ݬD2-z.Hr>X`k,o=*I+pjcOhj̟Mk~AN-qf@Α
̒
i~O
!sNa#+Bk-.\eS	3qr[ǂ𣄥snc^?ߔ^5ӢQq6f>TEy՟~8aͼ&؏Cc"p)g|2+p ?>?9q^^T4{).VX{ܗQ3GY!/WǒaZx^|N̭ݬڸ:k4[ŋcy&n[g)S:<Mmtemm=00=I)g^is/\}
_*'PH[^V1+Uj 
X?d&iۉ[W;v|
j!MMc)MH-5~T
~m6<|OLeyc{Z~ X#姽!axxG~s!4d 	OBX4p/	-F8vL@
<뵋J?L{*ozb<䢉nj.-ո֯ttg䉼9FN%(	YWj\&K#DI(KSgt,G3OϜ˧qtpM?[ϩBB|0QOg?GJį{̓NeYr(*fJ˧
	-sZЌ~=D2#?V~兰uūyâMS.>')kgArKn6%Ggq(Z.x\9l5%:#~Ng
yѹ7X5a+1w2X|wZ3O4qG KsLi87ڡspb4gDL-hXkVB^KwV{sʸ4c]L}]L?Q)Q
i-wüݤs[5FwpZ`6Lj/]Ax`~l~.rJJClK:
?vTēkz:#`fT2]jܺEg-j]m64wQoϯGXȒF+	qiwST6srTr>[!hDK*;M}*GÌs,&=GXt~nU#AOϹmi7杀	%{}]wߤ	j+ӽjγ-3WOh\L]C
Y+>Ӫ 
G}!$S~MrEcqw>ޕҬ2jL&{GdI[2C2:HX;ҭ~m
э}~]
MؗܫtKduxR=0jIЫP\KN&9y&
>6|+eP+[g\MEV)aђ,%eļهъZ1 Aq!­r1%j':zBN[(;k+5?}G,mgq(~ާh""!c o6ޑ.Ab-3;pG牙e}GCH$jRqZƣ+m,ie2KZ!\r%*bnb5^Psv?EH~a)q1ܒXiIBTKRK	ne,gm(zS总Y:)w1ǒ[kɭ֒[.V p>0BE*qަbIU,
)Kbi[Lbۤur;#X	#AO(Gŝl.no)^'AJLBt"6x9Cul<$UJ ZJS5lZLQhoXt7#AL7vËk<Hx9Y6-z0j9e+ކ QP܅&*P-zyg0t/gޝA*cezg [M?~XPeA)7?Xba}``]M[m7{QQÄ
|`oכk-+4;:i49uMh}Ú$.:}폢ڏ{Zw䪕boHcGI	R%r2S5VH Q`2X *b "0'U' ng`wLpL`&G:L$V-54UI\K5S{EԄ/NBa"nզ5vWbX?L;Wꃶ-XRK,%&
/?DaS )tn'瞞+R:9- |}(#6VR$JjŹ\EV\ԒS2#:$ek#m<YGS\GȅE`"a/C;A)⣼@DȥUAoUQo;,%
Z-H6%-%[Sv\@kdP.:+bKD9l_;\l'lᷰ[|RߤZcbKDb1%j-KQA^bygm_A3U.PDs7Y4
\'rosmXTwE׹݋'Rr|h;mE}qB /Y+lƯk\%~K
4<[h|2Rʡ#*2irn	E6S]!ݨ:sꢍ̝.^~,?2u	;c2'8YcQ;2Cu{4,
UyTY7;yi#Y;
˺=#s>W?`z78c:8]&mp!)w&3k04/
*6ѭTFs'1	=h8ua1S&KSʩU!e7eLK[p֙eg
dDgFk=t	mUz+R\R$=g_d:uIF&)h@XJ
m}4HSa.pI*/'a$?{h8><6.=|hPDQO~,P̲e
gd0GdyQ<g8
VPX1Nl_'pd si+d>ZG	<5n'~6UyEfrIMm+L.鷢R,]CaY?DE-dϽ0?_=9b>.4)3
Lʬ1d%SKRDO,s%d<Z3 dDOsEl:`M)D~1W) LKW|j##ηiRciRaD:תG:
ümdƴ`R?8=欖rC\r6|*(AH(,([9] 6*([\Oq5l<H))\/Li23Z>mo$o};
]Fyk4W}9qo~o<g_Zocu5XwP.`LY2]+%(ƱJQ*<3zy*J.0.e㿄+%~It N&ۙXn[=#Χ} it/>=o PK   dO\6Sa  ;   4   org/mozilla/javascript/optimizer/IntegerLinker.classY|S$MwBJѶ	K$&&c1Nݴ8E@YJcn:unnSs^wMI[$~?|;N=`V	69%V*Nuvحzܕ/``'Lj	-(5Y[}|L$	2&0k=P@S|/F
1/Ԥ]!
+;nf	S5A+NAh38.ae-z;TM	_"S^5R
ɠF[Qٚ`XP0]3qFL0-#U\,ltʞ<<	e,B3c(:wv_

({
aI-QjB/2Q,b	N5XB8c4;|>٦wkׯr Rj\VR˰0nikz+dsjz#j r喱ɜzpU8/倵>	 Mz4._܄-ݪoE;Luk%\ mY-vA/M~%
k@oK!
xE:NzJ(T_U8BM8ǘp}(BlHcI.~v0jz7~ٱ 5x%T_W0Ύ<tpZƔAH@{+y]kZ[;6׋||MX6Cg~֮#`Zܽ/h]5M3MGeD-u
vc<ES[ꀌKP͌lլ>$D]n;ȸ:QbD?8:>NtzOqhhu7qA3>-6c0'UEZQ4/WB.D-<jN}PR-3q;
mN;(lP5{LlicTe|Vv< "ȕci |^L
&Ng@\xH	|P4W5h!/$;;H\&L!rkZCa'%xDh\\N%r7nhi<*+2	[@(sFRlt:j*\4W%<%kz^8.{ yhl,32g	JxF_x߉L)A)B^-|6q@#[T+"[|T-pX8"'./*2dǕ=Kf0/
wHq]<SLU]$&G17V{N[XpK8mBo-L
dk4jL%䛱2?&~|hh\	7qTH%^5Tolǉ	ITI Ygl=8e\yѓxVvV؜w؊̇J=/G	юziI"5ϙSVVaR:FSX@RSj]QI#3=p@VŘ4͵`j22qA>kfNw=!ٿO*
kt	잾6e@OJӴD%*@~:7:fDk=!4gUEDX62ϝ/~x3.ʦD(2wGrSӒf~-͕+<j^}b!jPXSi/py0[rZ"Q-wkZ<&j4Պ'ncxgMqNX[Uknr>Y@;`8?9wW3U'A\}o ]=F	6Z*J;Ʒ82]Ā}tT3<$8YF9E`WT?	AЉ(bsdIj:,aTZS]ά:;ߞExv&ں\-} ʤBW20ChFw]>,OLJ(1XpaDIZboXc֨D0^bOLb&Kt	$?~y
71)פ+\hJW6cDcDcOu4&Pp5Jxpwd@#Mft@8(=Cx
rAim:/=>/pSxg;7rN'Dtk4Y⒏y<9X3QPx3;Qr nFrf9Oa^9xuieUh%Χ4&4Rh?\tt($гhWZ-9hݲeXgqa,!t[܋c6Yfby[-cm\dyۭ9:	uvXcz.T>kv[Ϻ~c^8*s%	E7z4.ā<kS(pidwiVd^Y֋(αn)|C,Ty\&JT"H,cpK,6,+$Εv4;6Z:J߷d;
5]/7t	nߑ~WNRx>t^9&ZT=?#xDR/4BQ1
٠`x.lMc.
"0^e/'4ٓk☊bLE1'a熩l`\IxiCucAyVȭ/%81fLz6rjjbo;8Sc&[/Fc[jYm\Mq84QQs\4G*Ǒ4dqm&{pϞL~iH_3pٓ\ѓҐ<=
=#
ɓٓ&IfMq/v+u~\#	ߢa)\`&]RbCOԟ?Ђ?ϛ%r3~<Iūq*Mv-ӟ ]S=_̊N섕*cjWl1Τe,(/PK   dO\VnU  88  4   org/mozilla/javascript/optimizer/ClassCompiler.classZy|T73y3L	l& b	"[@ %:L&ad2LX[T[VRqmE+u_YKmm֭L&ws=s橏hEF4
G"`$Ht#Rϥp2w":3M@i3C$hF8N$jp
E"@dv7MnX
.Te('4f$,x/BqS>/N(ZzB]{sX4˯ ~lPO(Dԍu ucqi_rYk!YHK
Cɵ.%@oiPG2ȠQj0P{Bd(ڕ g+.z8Ĥn틄D<z7c
L$#EYں-mC=ado`]hn,$WkH$]ЖM:@<!VC\v[\N50
GaѰm+h?Div",KG l[6?LܘEc3/~-V~-!vDݱxog<[\u]W*.aKgu20sGSjpP4$YX<R`ʍyh1	X8 PrY`CSU,"c \2I"hOrMD9IXfW>mk%4p23KvX1[ҎUS*Fĩ*?ctqjqÑp )nxAѣȿx0O;b,>aN8%%9cqmaaz0o=8S,|H1Ћ(Kfrg,E/}+(H|p80cUu,8\#풍"t惠OAdIXo`6vMd
MX&B}PmyYV<?=}%Hj\2iZH]scX<k<O5ڃcl65/nK(wAy(;8YZXV¤ojan\Ku|e<D3&9
"쫲!-+\v9QЖ<A؅[
\+9
0
<8%2G+szܠF77.
%ex(YJ%B69nL[Ip~hZ(͍悝F}WP{c1,y8Q{8]l7w8<a`+VB˧UXd'~@pFT*S42MpOтaCP`;+bO0
܏x偮X+2	{!a50gS2$#X8;ϧ..Ox
ODiWj[,#?<3}m $1)?53IQnpqn*8VfNIɃ+K]!zjA~ke3NtC?U%X_=5o~hNӻBf^=Zd"W?V߅Rz?b݉dt'ݓƉ8-0׉D&ҝ@DBD&HZG\mu!'gt19]=̕9a#U'4E|w>:BlvZ:pԡӈAh6AY1RAq"ˋBҠ*irrr4KJ#aa!\ RB5teʰvd k@p-_|tth&0&Th2}Pd9n9jT,JHMFl%dT$4yy .IXª٠/!5ȟM&HilU|k3Em@foK FV˄PĔ"]J:ԞP%-Fw8kE$Isi8lcq4d*f6kc@TigAHQx,KnI*V+^"k	:͠Ϥ,5K`<jY(A]rEN4w#ͮx,aΔ Ti퐤B"Jj53O8٣^$nPB(GzBC%dA/"TZ.
$L.gYE &iAVR煺3u+5gB02l8Jf5-1EX&Ʌ}IHjBMPDZxHzYtRNu:e+Tt<fTw<U#n*rRj5wݸeໆx;"7ei+]u]/wJ>$EntAߤ	Uj2fU㠐Ct
I̞4CxAIl3h;qz?"ʎJok*2$tAߗvVIw,vgkrSu'mwR<C'K#>c^CtzNÃ{	y<`ЃKkvbzWȠ0ΐZDspFV萭5#В5lUȭx>,uўd@=><%Pu,̺r~)닂v.KHuB&%P`[K9d$Fk4H仛̧<!RJD@Ł:Rz)Pp.u3&s_D(bfI(2lA
f	R,	h(c21ؚ_7ddsx7C{!gq2PLs)ѿ/2.tC0'ހ-eh2s}VyMpWfP͑6OߚKsIweV=ffuK3vlq%qPMl5[_Wp@929EJm
]y#hj ;X'b#uҡI{B(<J(\u .r08*C8sr+؟)}ڧ6wKѴ^.ar-Qч#sb3;xNUT©e#rjfI6A4H֎ju@V1cHvl
a~":(^L{b?2hgaD:X=F[4jA3R5rxebM-yvڑ~fn?rn];VuXa'$(jK"Fk0 ?2=L? <-ܯ~lQP@o'zONT6zpg|BFa2=zQ=e W5%:frgiKE2LSU<1Ye&(gy 9|$u~;F"8K1L
яy[
L;'<OgUqMUt*:y?-]Vb5bKjǡ6H1qb̬d^m.{C+n1ޚ<>59B*}n}'eٳf-2JzQM4*/4 iWl;5@EcMN22)$S2oM9pb$㢽م~k^LW;]h^[±~4pVTx^_m),%N";Su"`5UVvlYi~\{fu
n^B?BuRo1nKa˥)º[~`{6{zl-3M͞s|_ak܄f2U)|_~,P[-__Ik+TҶOwj^-+yj]R%T(U6[eV!bUXU;20lͼG`">FcpC?`.pVbKťH8c䖫p5	_p
`+ux9܀}r76lJm6P=K~nۨB|:VNG.:Ѕ-Ie#_f+Fx=*>ZnM;?%TMmK4mKR6,טΦJbv9gz1f$%/W|}N7Mt$ƅh2*R
Mm쮗Cze߄{JY/?}i$Yk,uw!}H30]%*JF9K9X fF,,^>]t1N+4fч,+)7I8.T]:ztͦk?LG߳jC OlǱyOjo[x;b;w/:&ux]N됖)u>)PZڍg-UJ?!<.?}wfT~XcۆrUstU*w
l;K^ʝ)`DyyNK	SDGJEQٔeTy߳>zA5[՞Ǽ19EcYի[$a)u0,EL(Ji-jn*#tdUy֎m s5C?1xxc>O1<VгfǸ?nn~"~_;ʻxɅ ^Mj[4ox]ZhI}
k_-lgc  7}Q9Gqtet㒸ƔWhNvEbͥbmZ1k-%4ntcNWlj%<S9j=ӫY̬#xVW+cV<e(:SL;;fU`ٮc3~{٥hfiwfU׳tNvva7UkXoHѨ=4FafM`)۬5LKC$MڔTy}4G*!^QfGC5ߌFW9W!vKmqp{NgYS4OosXϪrιAu1M99s999Ss׈>ke^o~E0@o[dȒ{>z3͹9//Ȯ32sRAk6޾kR-Ƴq <&[;ck/VӍT	Rb0{83Rt{WgβcQm;pP{*+hG%VQ;Lxc5!}j^)S!"'F)/k8ݙDhhfԚE|j`	U!gPBI#9t(.Qjp=̫Nc9%:{ix<JS}4	/zu8@A
T"5QD4NL~NH*V:nch'K~H34^WC\ƴyZ
j
4_J'hʹ@IyXkERZuRm
2-BZ:sdZ]F+ZZhv/=Digy
h+^.ޡ"
m%m-o[@mhnF^Ef|uH1KZ
-G݂$ؗu[kRm&KSK`:VP]NSi#yQIp%o⃔mЦuIr #ȢpPKN!6`p*3!9kٯnsښ
^;nO驪8!8ʧ98#|ڿ'-(C̫\UX3'iSu%04ՌY#5G;5rF1ݫu,`5Uךl\Qݧ+z؁F_9Ō_A9]ǦK/|R
L+Z- 2=Ni*e})ȥDsmtMF[96$3Mrxdȡ(
+OicpT*&yZ=d	.m6MkRzX^]~7kh~xPK   dO\5#f2  `  8   org/mozilla/javascript/optimizer/NativeArrayLinker.classW[
H,V8CbFX-@e 4mH7m6_Ҧip+uiKH+WҦwfV{os[ ~\G;.jZ(3ya8s58ٴfBqi!`G,=5G]-GU6ư}]lOLm:Hl[11~2խtv`QͰbt.]0n̅BazKInbQRiwQL8z\B5ѡRQ53Y]Nbo+ӏܩ.{ИkG!*тawo${h-Fa+8A6:լvBh#C}#cS͉UB;CngIh'8Cw+G-QgƊ*nGW1|!T#afs&F	HvE"KѢ)JqcƙTtAX	f%Ψc)ч3
Ϊ% 1ZR&;ܬs$
ΩĐMD79:ǝY3z/P4	u
%̉T`a-$Ȩ=ťNGJ&$e$UU|0ےs_1% #>)T\D´$#@6hDK(%a\PBi궨$:îu9]kT}eZ~̢܇
tz-s\1x{p	[ƨ^NMLRq09y@3ŒB /x_dks4"3;8;v4g|+xDŗµbBŌ]J1bAzGɝYGxOqK|N)
ΰspu_3o2Զg&%@ŷ<'fRlFwS*٠6mLM
^/Ƚnċ@%Y9O;Lsk'a56YxOozY"X~W:QD4Cμl%+7MtsO$zߨE$uy/hL"/j?pu%(5f+QJb렂wsJjKM% J{kVb(3
)qRpgH2o-(#s約tMy;]
X+/>A/PCᗋjJ-ISCYJKhSx{4hz=/.Q3iE]S}9ݦ؎%\4JO]5Q'Wo~POEVZ%
p&?O~--bA-YL*F](@++h{
ѓWiQoܬWu	C/6YFO%L
-˳wKZ$.V?uRF	^V?#XTc;"l&j赎!;V4:<۾qVq,E
lOt
85"0WRT'3zϻ85Zŷ12+ _G=<Ė2@L	Uhqy]np+F4Nat2pst`$8
~I.\W:*׀Xk<හe3
.)ZyBx>
j_]unоܤ=7q ih{דMƳ/tuO/5=o ji}]=Ҏ6߀ԹwR +ɶS#YqLX
_y͍Z)24+??ӳJO)5PK   dO\b  6  6   org/mozilla/javascript/optimizer/OptJSScriptCode.classT[k@n4uwkZC^"(l)BeRlvNeL?A$mpU	3̙|ߙs|gXv0i
D(9aȽc%c-#y$-CuMR3LٸİX\q`ƆbL>mq(L~W&S3F/DP) |s@ϚVϚL
MQHx{AAlNtdz'cEv
a<J2exZvҺDAW-(Cc[d+	-5_b3EOX)Sv:;~@lHؠfvD?嗙B1q,T7i*(Ɇsm`B+$3'cR0Os57ֱ@[|X\U?huBlzfïVUڇSĳ7b̨#䧉~r?Cɹ\".䚃 PK   dO\hm    ;   org/mozilla/javascript/optimizer/OptJSCode$BuilderEnv.classRJA}D1q4s"[gҌzz:"<~X=]WS`U9(0aQ]tz7uIsj;S[(J0JqϦP]$uwa_-+M
Ơfh7<]ҐFhRv0M+&1qH%GAf&BtZ2k*9_PHe76CgoH4aG+Q͵`n$qk
/NE+XHi"Vj/P:"1tUQh#
tP?	Lz%)ih$<hef讐vB>֞jۏ(>dt{`s~Du!fcyKXe^u8PK   dO\@NBo    @   org/mozilla/javascript/optimizer/Codegen$CompilationResult.classTn@=`ڴ@RTJ p铓VN>!Bv
IY3ǻ $
"*1$}C7
W{1Ċ^!4@\AByiPKrD':;zmnv+L=+͞0wÐɳU{vRAxArT1$Cemt8L|sCgT\e[D!!wfU\5Āka}]o&;Dqex=*Q^/(X:nwg3
Hf",4S72̆|xP<@{?=Xrb=lZARGM$jviM!UQ=/@:^ڮ ÐU1ʲSWO>%Cv# CVΥUmt(xm!~$B5
rbYFO)y_FklE-Ǵ6W
㦌AoVq$QTnj	
0=&{Owȟ-1rE
>6
͏
id=c!PK   dO\.Ls  D  7   org/mozilla/javascript/optimizer/ConstAwareLinker.classXy\~>ve]A]B7

W 1wGYgf14mƞI@nԶ葶}6}aX|^}^+UP(6EZ/~u
I/૬QP$Ŵ"	k`G-#Dܛv*{AQ@UJnkMm]oF_R̄@YeKY]1KϡMsA e
Tc3Hl(ō@D^t+[~6t-d
Z<e8ZI+nCrq:4c)ݢ
fR_&(ӝIٍiZ+ZfؕKTX`ؐlBU*B`Uo2֛nGEE%J(SDْjNbl65*#"ɋ\g4۴n(Aշ6	h?9]v؉]4԰v:Oձb{Uq+nya%cpS\cT+]c	k*PP 2fcEMݽsZtb4ᐂ*nG3bz~mљ	]sB074ME;:t,;HQU't8ښ%_NwkX$kVh4Z鹊g)YQыcV7cC)
];x#9h=Tq70&fS)r"G9'r<͚SL(_ٞwUכ*OOA
gdGMO2>ZwcnH(H0bC,&[->&CvxDX*leꭾtwC9[Z>1s
U1|~ZKǝɄ46<rX@pz-^c@אl>3M=3wXo<MxLnFXOlΓ
q<yHEU`EBYQ͑m!vYqjox;ޡ*ޅMLɷ8٤ry-9=Eݝ+G^e'P\D)>Q{2q3r3004U|HȲ
nI+FÖc
Xy݌I&2 /U1|ЯYc"tT)<mOY޳",9>I|!|sSOn7k7r\mcSP:i[rD 5NnF$d)Zw-8[8jaR{4ːEo]rvdՒ^&-LLդ˨/&WBtUKeȊh->٭%Od#SAɬq!w~@tkЈv]լD9h} fކF>îS~`tDM@&M63$CBG?cKڼ`mZظ,yҝBϩ`_49̴RiyvolPMӱKKyFE=BԮ/J ?+B%9ztH(6$hޮh1́tjIr%?qgHdRQlg1=`;IXR6vWէ]ȕO _]Kqw	,&dx/}eH:R0Kw-ՔGծoF|mJ\2Z<,W
s+X*0|
_sY_3q2E|=~wm@q갿f㸳6IGk	N@UBt_p8[[40Bcf\[@]#ᢰrbӆenQDg*PSX5yPo6G
a} ;pq"nT$؞Ss؅l/M|MKS1oEKKWa|ߧx/ƣ	"PPezQSAHE7G^o,
7<erT"Ѷ>a,JmFFe%Xe|Y(m5cK
	?__Fܯ*/)0KQe~c8I/lu 
@Zk؋.G7z8!y.ƻi~OSbz	?s\Sωp~_]]g$~5U]J`isT.̕ 
TVv?'s5	g"?PK   dO\ǻ.    C   org/mozilla/javascript/optimizer/BodyCodegen$ExceptionManager.classWYS,0f؎m!H0`Hr3#
=GrK8Y~q*9QT-ۃKsΝىX|?|<,XBZ.z1mDa-Vxan0gd
>@Pض
\M`覞5,
{>Wl{D{^v
! 4
j lbti#93g	xc4E%;O,}qdP*v^CX43@vG',wzN*-,
=3|~Ƕ7EQ
-+Pjx̞-
i~'}EnuY
9m׷Ev|m=> )ܜ@}x>zcgBtXԉEit?V3 yݜְ>kI~OjWxnE<A!?=L><0z9ׯy'U㨆><MH,cphPF[4G?iw(	[&mo\R92[pRdy@`^/3la3iLiŘtɲs5;MOkgS-S9//몗|ymT1%P?ϵAl-rC4gƙ
2-"ZIi
0CN3Wb&7ޔ#F0!
ReU.DJc _{2jѐɧu`biј('c3."OvPWY[y"158tT9˚]Hc˺{䁊R{N2v8g¬aMy.nxL'}Ezˍ|anL((KڴvTXj#*'Lľ*NF,#'0@c˒ZIU6Wꪢa;:+rM<˕	L_ rrU'UƒYXX@cn]LySCT]&v~*+%1SaWu+Oog@&GL'̚A0o՜긶kKJheJVC$iߔQ
Z4
K+"Z(a[ Q[TK55|9>?hHR;ޅ7~;wQ+ej]_P
P96'C\jҟ&`	!	~BD;"#w:輍R[ZƁsx_hVg˛8gqE|YדcK%m/#vطw]͑Qnmn8XRHvI/O|l܄븡oEjq 0/+4o_7#x2?3#*$|FPZ4Q?*\<hyS
WB*޻5KBmiIu1))R2TCh^r/#"x&pP>Hd0Az̅s+
m41UR].Gm*Y18F0! :׈=kzyTLɧR]	0ESCa!Xݑߣ93/J=adDI3rO#O>*ަߏb>
@@D<'$NSI92Y9C>#{}*3ϔ|CQov)|!	w`?h$#$PRKWX	Htuլ""8
MZO/VizB#fDD,4hL,k(J͸͸{E(܁<mt %;Hw01]7y<Et[8-|EyP+@3W6R鎼cբ-64˫%k8*_iyyC2T20Xw)[*#TƨP؃*<R]vq'-Y IM
~$oI*U?U+U=@K
xPK   dO\QOG    E   org/mozilla/javascript/optimizer/BodyCodegen$FinallyReturnPoint.classR]KA=7ɺ5qUi}!bm`8	
 -Hla瞹sϙٹ> 5D1)na/"x̆2o14J[ΉiJ F,S̡Exm0cȃ8us{XKm{ <QFh=(ęVnJW7SdX $^,D_jXF(Ixr9exvw.Z2rw2K)L%d/
_ͺ?TkSqg'n wT*#4vexJx/gtZ	7YP?jȈ1b9G$.sLCvz
;q/)}<a~U}Q9WPK   dO\`  g*  ,   org/mozilla/javascript/optimizer/Block.classZ|Tՙ{̝LnH0$ATd&lT%@C
>	fҙ	ZVŊ/Xҗm]k]-}mZsL"@s=|8ǳo~ j
CtfuD22.m$su\bmbc<S73n_
2YYV-Zue=??JꚥEP:(PebtG9ߠe+:
E(PGHaIY\ԝۓj%)!L鶦elniA(aQ0).ebkg{R9-~r0F(
Hu,e*c""RYg88W$(YŪtO3r09w%Rg;grzONKL;1w܊暥`ATzUP9DNx9gxV9ĠkO.v-u1I =db-l.sb*γ>bȊH`mdJ<tSsc9-Ax(T-&*L̲1%šcwQy^u˱.;#5oMsЌ$PTrY`hRX"\̍Tll>6+ԽCK,2"5G{+.q+=ͦɧJHV\r7.;.E+N;A<߳W`vP~K:ؽS{<ϘSpp%*(&BFT7gin+a'Z}E"d}%y'=	7R68$;a<䜦<[WCSǘ9$$r/~σ{?9PޑnX^fn\6Y3#+!.[gE|-2wۼX住5Eşrp;>&LahKHqּwڸK%_NXn-g܃QX6Xa^٬Vphu07Y[wAEvr0c#2y;eb('ht&N_pd3+S/KMdY]AW|QKjID'Fd:=C{B뻰I8O:+H^[ߐ`wE]ʈՉ諬Ae|]\L&ejמ22m
|9.gP8[݈`ZX#%^?>XCIg"1gCw]5^vb#hyhv~8v׋҉Nisf. KT,E%{&/$d#g$D{մ5K{qiK"w+6t{,wou%RspnII@An\gJ+=/_O3In̉&YC`KnW@CƊf6x/%}
k:-?8lK3:W)K&ۺ2=m^Q*Kw^Ihsx3hોoKmq#J[X_H
ӓ$?#jd?~ǚi"S眐T ^6bۮ<'*68*ҶFP9V*bxbRKd91БN1ZSux5ml8PY"[kw͌*T0IZչ.7(BHd(S2(s.|':2=R$:ƒٸTzzȝ/7+l&ӑ.NIiZEEúܱ̔wEkL{|nBƙ(x6 .:sSxfV@Li1RÐr=C^m~kYu;
?!R%W·e1g~%]yfb"{PlM(wnoL"<{#y{g@ fmέFYFLwʦ*4l|E}j?U`7hzѽ8}ak/;5
Gqb}_4fy2B16^}?rR^FJAIhRcGJمrT_ş_Z?3/Z?eg>=GyF+e
*uC96s}P>!6FAj0'\SMf"HȪC.I>beԄ,eu4Jm(%{
3L,
e!i'[+6[U*r`+jcmiN-Om.܎jCZx</ۍ(o	;d؎1r!@p@4d[QƿEܹ
b7bh8wE@?\E"EBHqCy w9^y;mö܃nۃa;ۃX;6k,!#F*^&@A==tūq|7z܄f܇[ >{M/]x
[Xߍ,>?ǲo;]y
_P<.u<qՎ'T:gvu-R7bOد_QpP}_UqE|C;A#gM%'^jGizCGyX	MvVcEtnPgCʄ\c鑣OP]V0L
)ԯot@CU@ܖ5"Rt6֋#(ыm̴q.E`u8o4)#oՖSհØ#(+("(~p<rZW-u'q>ZCo2!?#u^G #(@P!Q
l
u^S͖%+ܸ.
v8s/6Za@ϔmHh>O[2.4[Zm{(t5jI߂Eۍ3k4͆Pq(EF'Ɔn/Bv$\Lfߍ!{BVvfѝG{jp}{a*r,۳Z⩞H:(F ^.&R\F5UzT9nQCq{p|O0
|]U;t|>#HÅ2A4#A	nRZ~7f^$=I?IJ2QKOBzƁp:M#oY|E:G)}]bUGQxsN>CN)uTp}u,OHh ЙV k qu,"Q
zm(
5=N~-B1M@](5ժTLfXF,RӐPtӱN5:ߤfxY5_]ȠPiwZZ=h*@kWZ
AO@r(Z2 Z  x{CݠMTtbz~`G]̌ҪUqwiuɟZJ*tiѴ%`	70ӻ_Y	+*X|VهlA0Zߋm6CR&e>cՊB0X5Q3@;QY	6RjSC>szesԙk~՜u1 5`+^>+uXs-|#

4m2bwc{EO ߵP6}Ⓩ4XT*EudrWvwJ,rAw{hw3(w	T'.PkXH$qZ?Q=eAuZ;ܭzM};&be1[ײ8>gpH݌_UvM4\zUJRd1VޗhYy;j:Z`:t8c#-mOp!/D@I>qIՓxz>ۀ*H_kXjE/B&~OdPE@muf파;cZ~ +|WW镧dXA1TQpQ}s
v`;7t?iZMU1:ZU(r[>|kw
Dֽ2ZT!ߏx~1)TlOI	Dy,m	7N^A2eZ4`\ߣWtߊ/Fj2Ad_Ho<{JIo{:ƨjB;C^P>ֻZi\B$Ez5<\c_>Κ罱WYx&ma<;f<{{^8?f~\_y'[<?ڗONg"_'|=}:_wlSУk&r"g鐒qtBMzVeH^BMt'P/WoW0~a5~e,"*Mq98niVx3jL4皍ds1\`4F"6C_k$0%y
HYs8kZaf%kx(ե٘b,PY"A#_KtWzL7
ŐSdVJT+by?x$f$n/{#"aUMM};&Z(>[@˼(@QY&iVFͨ6RRUY,65D,_\;k4rbY6wYΝvm5?M0#`\rc*؎7f͘ˍy45*qъ[Ÿh%g,/""i#.1%Mc"ʋ\8=+".&kx>Dn,u"f&sk]vẌ́V+5	O
/}F]oH׹%XSH|!+-k'~5
J5beBюf1'"QxW*ޫ"ޚL6w)u.d^\q ziTDh(o(HTh=QxiDPK   dO\~NEn    @   org/mozilla/javascript/optimizer/OptRuntime$GeneratorState.classTYOQn)t(eQQT(ȸoҀ6B,ib\Rot%' D
'9w/ $zRH:Eܗ']wcgO5@ߊy&37_ L
Y98Opm˩Q#--@F˼nW4AX3(l/P62S9^
e`Aۧgќl+8°@)V"QfϨIZ7dKZmjM`rDfB.?27uUY7TQy7Ҍ؂iLzIb8'w0x:186e1x]VN"yvQ\L;-+/9v!|] Y
>W
˽y51V*E6Ժ%D硪""L
٧f%OFA4]<p^q 4ace"|Kph6j.}l~c~&|,aeb-B(DDqTqTd#m%ACRGF|ئB%J;߄e&,b	xx$Ỷ=g~Z@҄#PK   dO\7G    9   org/mozilla/javascript/optimizer/BaseFunctionLinker.classW[
H$ֱr8F8X85p@HtY
f+ﮨq4l-!	8vG}ͬB"߇ٝ޼{f__Q|A
jTQǰ6%L͚NLPw̰8Cmk|LAaL'%4PpuxA
T[p5ݦ溴v1mi&s4CCkH3>Qmخ z40:M-4لǝD!~!]7jݚi\OO(pGgKdlPs\pGwiᾦ :J:#	7+E.4QΨJ`xnn=7V)اq[	{ҜTnF	`8Csrca~p{#;Tq+yT BޑάƝKQwD՜]O85p0-%*;+fb&B.9ql3\Rq
SNw=ǰɏ^)8^^۾ 65fR76uCRYɋ֜=g7c%MNVL۞f)'ܒ-b[(_hlEt*%Hf0B8 _ M92՟gZ)}dÀF`=)TL6]l&c;^TZr0Ot>0%2*ôUc\lo!
@KFh0\ӵ*8j0V`Uçc=8
\+{8%v΂F?(Nki?VqBs%`n+	ҹ?,-]Ξ[d,YC_*xHů0Z[r1#LKWҙ2 S)ʏqqR<Z%Uc(xJxhBRUq7gy#]|nʺ
*-h)!CiC_-@"Jϼ?Έ&	sLs{fJם9E:uM>|䰽(\΁bcmI><,nF^!f2	3XEL- w3g\2fjݷIMPݼ!R:íU Iwe31Dڇ'(43t Ui	o'-TY-#Ӭt^yFrV@W2,U)#_>,`g.%BEהY/[Xm	
WElnܧFd::30Mw@ ?i۞9ZƇ
Sk$橜Jǭu</o_*z]x*d/oy◊߿)3@-;wt^׀9m;űMVP4KěhR:r~GU_ hd##)|hZ[;|Z7-fۿD c'H1qq
ngl_B2pfpd8=޾Y+8Q:ء#ѱ:Q
~%.c[,af|?[Kȴ_U\5<2Ă+xl-?qC؅0e{zBO{먕
th#7h!8Bh݅qp08C*a;Fk%#nxoO(;ndK D4*xz ;t@RNh19'JٗHǄ\!>l,חDCQ:DzBxqU._?]/"4/PK   dO\x    6   org/mozilla/javascript/optimizer/OptFunctionNode.classVSWnX@ m@
Q).W&l_;S/Pg4t:OL؞{w,HZf]=;99׿` |!)膟aPTUY޺,nCW"~=8&#
DͬdkjU𣍒׭Lnc,׭\(Yz(C[T͊f卲9nPA?2]mX/l Vq3G<ЬlmW5sQTHbi
fa#
1:xu)ĽV\NP{7r {2N)83#I]D.7+=xM$Ԯ<*iuNh+TBaX+nkf[ }V9ddU"XQIynu^$۵
>!hV
3A/*C@TbTY|{Ƃg5b0Oe,7
+{OEuvFDjf2hŉġ 6
pb7ŴN}EpThdj1qy^G?+eJ^
VnUiepVR$w%N"Mvrq.RQPb>?^f;aNͲ3hNΰyTfXXo#q\/)TokZzpS;ic48pYJn8Mv@J
n¶Ȭ٬]ܫ텨<TM/v:RRbrGzݺ}2Vk%-K94X|t7
Oē_y.g}[)qp'%T%ҩB*}@J8Fq<=qE|"FvxY73GHE[xxG?`'lkbbb>OғѳH܃SmLN|᜿KR-ty@F= }NwD*}_"enIN:7A"'8~;SQK*(2tq(qA#)M~b-89"M=~Տ257ވ#1]7]m^ȷ{{CQ`N{	񄠻Y"1]E/ϑ2!g!TtjjR
#˹6{v-oi5qSO8ݞO~^bJ:C,ѹBrW{-v[DqIxHR
66K9>1S\K0AHOѓ.<CGoD
a)z2-h^qg[^TvB'4+xhbxsMY7}V*yT(av~VoC$Mй`E7"]#r1*[Fi?ߢpPK   dO\  >  &   org/mozilla/javascript/NativeMap.classZ	|T7˛<B@dP%e	$1@$$B60d&LTZmEZn"jPkj[jvQ[m]ιM2		d޹˹g}yý}409hFLԴ&
7n8;J#Hj11da\?sTt8ȃc|RC0972AñT"N&n~?
	"d*7*FN(~7k<)JT?*``&xCSJ)"TЇ+>Kh06
k[PW7eK±pD<OmCG8Rb:Sbj町Ύ-~&)
FiԟgT/5PrQፑXfԦx+aeHrSٻl?oI"3EQhy05
~80Ƀ̠M8djS0g2
En6p.d
:7sG7&?ҒXz+
4Ҵ}C<"k]]ܸz
|j4FR*	r,̛ڇg\'N5	p3c >7>/_&
1Fc4xqԱYFVb츥UM>$a"dIOyrF6fc3#m"yZ0-팅Rx:.1'aHI>}Nb#9Es
3O"ٯ\VdlV\.hC)̲jՊ/&l>I6p;q}S꺆e뛫D.#п;ڢ:`X*mC(:!UGn[
.,ŗf4o3|3Z[:\XCv>%ukfɩc⑇odE֥x{]<K>V0^|7M_3'cOE}9zq+nqo;%U>JՆڃFvEPTxEm5u
ɚښfETKwuewfCX/G"hL忶HtRwJ`Jq}:7Ѕݜ˲HES"r݃:>Ț&x"EY xr!5((§u2GDq3(ȒVd#xOeܵt<N]I~n	Kū gQSJrqS~_1SFF㟜j0zOxFp%&<%17^K,yso82gDvger\78i6=g
yNVYI^?oQzpRb]8bě[Eơun	[ƿ7h9Ytc]'ڨ*%s0XcqSƍ֕yDi"##A.r;ZlaNiw77/yȫϠ<e7ὒ_fP~ZH"dJ'O~kroFQNGht֡آ$4g5h4{:'73phs
LWgxړ+%hA'(6x1{mU&ilirV76/ש0m+zgq>*i|ڡOY92siAT`7,[43n6p|iNyZ{=65nΟ:G
2
D`y|᳖
[kRZ@&D:Ʃu9C);)TgHRxR+aYޠ4?0VS.öz$7+tAh5mjVם\U]_~MIKjO"LΧr9*it*኏̒W}-IrF
:Δ<{mr,V
&
A)هL$kjPXIUTj3hE8#lGUՄQ
k`PLq}<cu8lNň͌!s
%2nw̙K&?:ǠuP(l?n>
[MH'iI:
\G_&~%77hmc)!UAkx;qu+N]B:ɱ:*:G>}>e}N6"sÙ{pyjnк"@v./E$xrS

ޖ-<,-1Й<]cy倇Y7i+E<tͨX^m5ٳgxz`ƃE
IdE$*thM_`rn'
WǠ;܌{dAwiS	ʤ{ڕN).IuI_Q6݄C}puz0v܈V%x/RKw tpl]):qdZ7Ӄ>+C~$gxpֆIf!K6]=ܫjjZP6:Z~{%|&-D^sxYqNk<V3*dznxl'>
'ˑZ|ñh2C[5/Գ	qZb߆y5#0y['
kJCْiml̆^4,ɣ\a!:͘Ytx$UyG^Q$%%&/1.׈EّpʒqeX'.ǈ,s\0~ǻ- &Jdk|5-|X$7I۹:&^#:(W
&oń|O΅08NV8UN{)N%,)*	ҋ)ޙFd/gRT˙:OF&hp6SV`0 _(Skt7-Tˊ:Zcc: MQㅚ`P:ޠY,qPBj\5]#*f	5`\tj熹0ܚTO[-ԵEX;1pZadS~0j,G,ZFI+~5QkMPkt}
F゛nGi.9܁T8
+f#]˺u=
d4PH`G4C# 1SciEMT͛󣐿ɟ1QA~J;
81R${)ɔ #[E^v㘆U'r@J`bә܋&楉L,H{8MDUf4QsSgpu Jg_p]y?f֢ntT{N*JɀE.؅KE.|;f;FTt
\+uk;deڳ1wƲcLLz[6b1W;P[bwc:bϢy7tTSjh8N *-6]C_KZ姧i8!/=KϱF;=O/۟eN>:4A`ETpvfǭVaōO53݇<ï7T89
_aln\ݍ6q *6jfJ)&?YjowE2P*y@O -Λ݅o1YY*@O؅[qG[Zȫ=E>Uz=O؎CA<R--x'B=?#'+}>׌|]xCt1S>sGg`6GlB+"EѕK1F#6GLWcmk4$fs:q3w'~rzgk:y	VlTY+W0Gne9p:-~<XpǽwyW[s0c^[e_;]mOYi[ͨ>6،cMՕsbv9e)^sxŒKܓ*ī1 ^vkv@߅7+ߥ<u>8C|Ҧ$k[?7'==|,֊
br,ˢ]W|m3Ϙ.ߊM^[k,Qp"9^j"s\F't	+Ą.*Z#&.ce#wGzWrB2mjqE^<_~.g3z#/?>G4`U<E#idofߴUL%MiGZY]zsqJ]\cb5n;5ZcƤkyO5V3	MW즩W-Gf82Hz|r47W_:tь\pee䟕	2[Uf){Oΐ)ՂiEr-ɀqkYz;
~~ZmZd*hUѪV.e@5-L yww2#-	zA܁@!-t=@[M-ΊnZM'8H.縭a[e<	B!O,,ހr$<<W\e[qz仩Uڴָpnl:S*~Q	=?e8J3,ix
gW׌nE*<ϡB۬1^-sv*zF9Ӗ+HTO(3)z)At_5CFT0(nC#k[a@OlҲn:l++˯lt]tv_{7N'c>|:{̢!՛|%̴(ӫ21-eU!B%}Qǹ_iO7+[/%[ytB?c@>쀿.pH)SX޻~|>d9K~O\,?4.м8*sǖrj]Y_ ]ye.βYa9F'^>DP#L1rZJ>lwA>M.1*[Ekx}N4NۥFώ(e}iBQ/3/`sHI^SQYM7;ۼi~'<\EWnNǢq'_VN&c*E~L~Eɯ)23g{<ɫ@F^Z ×0Cs
dtI^1ME.`[v-:k'IjKs~ΟN؎ {ɶ}c/?\H~sķNEw{*;^E\}-n"l;3NcW72
󃍟?Yu=j=`j;սJV;v;W78~v~c
6~nw9?zƏѽv~mWWG~_0V}(W!;&?N|eU嫰7._&Q^i~x6~x]v~QZ~;/iίEeloD;";?ܹRHwlbOjNe߅g*p1Ò8w	gzjtr
: 
?j\&5Ez瞍G	dF 6:ԸkU<S){< C!<;<iyM@iTå
3B+Pɟ,jL56EM̢&eQ%YTy5-iQKX9egnŝ%Aޫ-s{kؒcD[d4mZZրPK   dO\K'ֶ  w  9   org/mozilla/javascript/Interpreter$ContinuationJump.classU[oEf&Ά8&n
Blǎĥ8
q⸨#Eדdz%&./D䩯 Px
GO
g7*"=s̜3o'|*"t2b]Ma/R:cHQt[ETC4a"c|Exƺ,ږgX>ٶп*Reʦo ._!K'#=Y9눦F* Ùۼl1)GP00 9z1!ѕS2[
p"i	x	Cx0N2$`:n崿p?\^򩾦pYBbTEJCR#{٦%嫾0MT'Ր88$MٲS$m8߰K1ilI*PXy"p=ayUaRi|_U|AJH7A {35PSvpGo)}eÒY{U˶NE	*N}M	++Dfӏ}{
g:j
6;^ʢhqFlsANt9TF0V,MẒM#-+(Ә NQK'3'
'
/ЋO1轁6vfCO@:\T$"'r
	Ĳ`|*PIW*	esz#8A<OEZ(^g"Ap}G_Md;< C?%)gh/>
k)9"cW2X3dEY"4![-<A.B.<[ȐA?6|oQP~%(	HPK   dO\
U  
  .   org/mozilla/javascript/Interpreter$DoAdd.classWKsUμz&LL !HL$(ɀ ytt"tc6.| DݪYntmV*
s3HCꞓ|{n|r"@PCHGK򅂑<c5ʦvk9ӎkGTvP(	]RMvvEL!zVq(9F"ˮa>Gh:5K8cn*:khqW->.o6	^Ьc
ZkD<V?_ƌA̡=	H)8Zu܇6B(1Q~
tlD?F+%70㝋\BR#ȝwS]]4<@hW<4e8Y-uqruftǸ0υR]
:H\{;n»jҰrRAa;!,Ix`о7A
w*9ϩF̩ةNsvI5(vZ\4Jn´Kg-MvamEϧFU5ci*´qlgB%2RK`W~k
/\Jt<<-vx(T,vH8a8>d՝%T#:_=ؙt-N[(sCޣ%4dOrvo;f8lFapyaȝ]Eu2+s[I[劬Sm:E(7M]:sSagRd@
ktA8}|;)~L-oK</iIfToIЙԺ*Cƴ2XYǴU5,%~j|=S*YD[e/vl۰{%h/Y=',dJLc*58Ƽ`Oxztv1{.Cz{ɏ$w`M\ݶSG<aSUBY:8mjCx TD<%߄`Mu8e벳U6fW0]_O#_`S<%sWfv3{"yqXe\|tĥGn @\rsAPU66BGsyՏV+\EA5d6@xuM#*1>1XAKUZ1Cbul1~i5#PwWxA5B/W߰I>ğ/q
Gu77Q,x]jQ-c*u|+lO*SV6B	J}llr&r#]-IޕBe}#6QuPIVp`HT0x]A#W'q
qO)`BTe4,s~o٩.sNaf.{gG؇"s\<ϯ!/hxnoiޛF[CTCfZ@\G7u7ڒ:6]Csk8;A٣.2.$:ePK   dO\TF    ;   org/mozilla/javascript/Interpreter$DoShallowNotEquals.classT_S@]H
RT-"QhaL)3 &%I|Ց ~Ž(von4# !)!0aۙV75Nn`]5ڇ
ڍ[fP!<;LdA(!bN5%[i!Uo6B9cvfUݬ|]A|1tqPЍ8:69A!,'B?ˮjKPnS2zล6zfwm^*V:+DЇ
a24dVTE#10K,;%=K6	TGQ7RVUbIhUUcMuz(;:]VoY
F;Ԫ
OL"+n֏RBϵvTƬ2_}DLW<PU֨Jl,mY{f;x)[
-j港,eP
~D0
O"+9(ɢ4E/C
|艇ib5< ^i* g`#H
HgBτDS<;n\z)x;e􃞏8ل\GXރ"ۈFdig֘#qxDdWizIc48!mS\0=)3jb	i].
1xib֣1<9)BcxM^$:OthPK   dO\e'N!  ?  *   org/mozilla/javascript/NativeConsole.class[	|T?daBl		QP $	I *N&dp2f&,.UmEJR5DP.jV.k*?M޼!Ѷ_~w,{YODkuҘ&mHtm`} ;udx}*M"!/1M"p4,g:ejPNLh2SB&eJ.m^
&cXrSgiрThaH2MF&BN$CkH0\8h!;XW<|F@D"LS1"DJ+i:Q+.QhcXK5*>j46$8msj>55+ǔ#iNǛ4&1TܻHpzCP],Z%aJXð}|u`;iv ۣ?["	]H2ՠXjjFS:r	5|r
xԇCT
㱸<BsH$GtÀ`+
ɫv`w`y\ĤYmQL"fՙ]"XBv=GQlLg|wjEM9i*K^:&C,*-46ȠL
 Ca4pN0ܕAm`)T8 HW Wo:XԠB/S VF:MZGPz8zC2SW<j`u$<OtZoڈ=>$jCC8YUsCN͚CЅ:]dt	π9$Ec5NČdhcrPv~uMi.\M:]aҕ`ˣi
G@4+]jZP]tIInRϫ:ɤ՜:݂0vV3Lp?_b}ʮPK_&1x/AuӤzJ5i¾;_=&K_[qM}L~ǉBK%Q8~v5:ӘƁYG l5yD
;KI =&}G̒^nhd.vYmXWA1i&yiuz <Iz*2IO~@Yk	)15=#L}S-mؠm5z^ڥ~`"XȑBqjÏLzI8d[j*IHoջ03=s=4}_*
[r]W,uFy=^?Lz~&d:@7ڛ&~hmIigȾrr2i<P-.]4O$=RȩU_Ā!W7s5^ZnN*ux@GHW)0zߤ:/~;H6@	I2Mͱt2cYhi)SK=f5v@]L6c/uT`<{2\ar6{3h_ >l<QyxÉh]8`66+><(Ḡ]G<Kd%U.w{<Ua=uA|"e\`xYpv|¨ek-^XSW!"O8,\4aZs/v

L'|4.dbL H/hȳT!<X2<[!''zy6!m9l^:3y>Wwq:R$܊<~J>Ξh#=nDAZJ>Euu,W]C&![1;@%`_*0$𳡖T546˥Թn̢6%
MX'P,gijڙW ೠ=L+
F*Wؒ7BZA^0q.<4,`B=utv%C5	yP	IaJpB5!jrh0iEt)v}:՟A]4W"Luay3PU^e
&od,
Dc}*[_("L-ժ_b|c}sK(_TI&oU#B|J%@(,*Pd!!Q:7+57P7#+.3߂oe*br.=7_FmMMCpt}}_j
t4pfZj::#KBX8Jkk,a8 |J6Q94>6:;c@Ed&֤o~~آ œW!Q>j+*OkTm#1Ӷ3۽&t^/YB6)$TM
n
;`2&GOl|C-HvŁсTp;~9`bL~^0S[&^0Ey7:c1ldȏL~_Roܠ_
twM$jD0KoƊt\Ma 6|A6^jdL!/%!UyΤՉ֖plip95_ߨ[ƎNDAj?>­%zE(5y1EoүRR;_m]U[аbIufvH5+6űqeyxڠyrX7YC	[2}r3)=ZdV)(X <TgVB~kkdU4<y@. Q;NXG@m9LZp#|ΫtcNpmCi.`gĺtu$p<֥9w7n].YRbC s
ToV8Q ř\㉤<npKu>T8.o̔q1~@L{	t-=PvC8B_>1*8V>#oOn!/"ŉiLo!w8!p@OM
&4Ȑ04NFR? {er쾌>]bօ%!)X\_ITN+%rVRC>BB%_4BNM$<@PeB1+	5Wr9P0	U%ِPBxjBqjZb"JJe&29j08	\&jM㨡khgKˆv.6AsilfSM&8C[C>J `
O)hX 1HN74p@$
l&}fB򈨎yNmM-%3R沶,*$3:g[[K(mp
:0cG	,سޫm6&I}k.5}z.%..ŁpCi|`"FCq	_UPۺֵ`
XIX~D[P[^ZA!Ms߬G'6
y,e/D+HtxerՕM9%E4sQD.O7yde4Vg!:Rttvt)vgYsNVotg=r~Jw.;;O;kҝmAΣ^MK|gdP.`{ʦ4vY4NާR|DэP+TN=4^PMMZ㩚'B.E|";\d
oH=aI-??1 >ȅ:Fh򯦬Hh=hrzVM{w"vl3 },c]Khiŋ߇T+P J)%BJ֝6S:S11)&^	©gȿ4&:𤩧|H(b|-xNG+}kPbeYEQݔYO&KӒKpZ
KV[|l&*]X=-DK=.npc I6|{jxJI



)4I\| Co	~	^[XAp%xoDpr <XKOі.0ћp/pcccßF%zFKnX,Ѯ߂?rsd￝<[w/lsrfe-SmsYt{g7j#"=H=7m=QG廋CFYf78=:Gesi߃KʋyC:Z8}hhv%?)-=p2w2*z[YYB ; Eօ=E{Yf d,%O_O|>,)Cy:V^iy}*z?~Mnhw{K.t=3tF%~M;$&O<I^.C46#^\Et5b5{CF`|F[p.nu@_Ox1m3Nny5}FZz|1=ʗc|
[|7=S
=}[g(Ksafi /O6{Ps./-Z2"v&7kth2^zt͐/,<bj4kٚir0MpfK[lc-8Dy:mҵ%ZLtmStmDj5d8B9@Z΀Sw}H4Ĳ:Hc!|-ғ5?Yzg
C.^;62T.7f|}^H_cGa m#s %[= NP%Wp)ػݠX_4sn'/P	o甛z8?LBOϡ/h"
5䨯#{ӑUZ_FB/4ܣ$
u_RFuE_<ӺX[hO'.2qA[+_ \
Hcwmd	Odr6*)~JyZDP+{$k>O+B>Mze-xF/Tn(b
jfLKW.rDN>r->ĸ2ȵqD') a"M|Z)V\m}A(7;cܠqqe#N8KJ}go0#{]4v/E筀ǵ
xw{C6ʟ#j|wStGG=.g/{;98-o(.EH$.r>*2.syi乴BGW[J!M?<d[<`lv
5,eR?瘃t
>lEw]8sA<nR^FT~q94SdYN8:g S% `p
ŶQeReReReR2%kcPҌyȕQ:iW5K<AyP)=b_R2*B*999999)s&a2'\ʜC4Y>aחmq V]q+!vᄤ	EM'2	֞kWUv5t?\ՍՍՍՍՍlKcX]Nm	*Қ:j[}iiS}=Z"+naA+0hǩ
;0h1h1h1h1h1Xbc0cVl>ĕ }|7"*Mu2
<ߋanw"M
oԻ7KU@/
b@z	$\O!ހh6/DyBlَtCr5I nnw56,|\*H,PKYHBo 6Uln1e܃ek
 sxm˓*歵iV5X@4lwiK.>I!ѓuCh$sIhbNYhЍѮFچiFp[0>'v?<ޮ҃g\sw>w)rC VY y"oWYy)e5E@?`k2|臬z-W
^}V] zUUsy@~?;όg
W>F|a}6֡;W۽OݼO7ķ9ETn_@Mam_k|:vV'߫|7jv]wt'ii_sگ9OO՜kN5~iD_~i_sگOr:!_~?uNNN9{%N|;r];wd'_l_KpW|E_z6ͷ,͗pf'+|;|Orwv=wqN#|kwxedi;LZ#դǥMLUCtW#hGRsP$mr*L8ҵ~؝>/rDP"CJR&7nyjQ[n-aQ
VMyjYԖc(ei%t|NfԬj^UAUgP2321EukM{^.$F;O*E}vV}Gzn`Xbg[KRJPK   dO\+Oh  x  0   org/mozilla/javascript/ClassCache$CacheKey.classRMOa~~l?(Ђ_"/hJI#va٭[c9/^F/Qy-Ķvf<<;~`[)DUG!wpNx:fر+e$T$4@c]mgmsCguns߯s#VC\ߴ}5DXV33Q/L|cFMk<~!
(*X԰hBq^=)1$ÃG(wZib)lrA%ekr=KXбj,)_w@W{x;(OL>yϻޅ)Jn!u<S<diw 
6V834QG.MN8<E0_MDqrqܦz;'?K(za2<bdKdHBG}aVpP23D`DEtd%#Țe#?1''̒SȽW2![(aHf <$6زH%qG
cT~@=GYέ|Jα(tPb^	M-K`#P":NnvWHQJPK   dO\<  #  F   org/mozilla/javascript/SlotMapOwner$ThreadSafeSingleEntrySlotMap.classVRG=.JP@tb;	0l+XaͲZb{>"yR&-!\~	UbF==˿
،!
aD	=}k;Qxd|cTL.Fy+ђn;b
];#M4Icۅm)F ؞EMM	37v|aX%X%:8ttKDqr3$7Q{~pgKMEK:Ҹj",7Q4a}9Z0MQ0w\(;)ޞ;\lЅaj!4sad	#V	4+WAxvYbZeUO#a3AFTBґӑeBw%0^{zTE|0<սbb0$W<p6
ߖpcs3.åQW<V]<uڙUntBēcm;ٕԝ+z扲0ݡ]/sNbk'*l}joRl|T3{Fifb%{5 /fKM[wwj:&?Ww!J^7M[I%,sMT^%аFiCA/<.9F"}3:a}LW\/>Q
<cG3Su/W!Cj^G
%*c Fֱ@HgDsh9[Sg\x/Ù9=~DHG0Nz'#u%0Gƻыk),4H|dlZIy7B_Рk~NvY&g0:MG|O89QԠEihtQѹ]jNal8_n`AMaK,EcZR@U\2TU6~!깿8)xf
)zrrcZA-!Y{-r5w\r-&)]i1EƐq2Sh쫇d::^w+j\:Ì _r}<~.%^PK   dO\QH   4  '   org/mozilla/javascript/JSCodeExec.class;o>sv&Ft̜DĲ̂}`T׊dvF~Nb^RVjr	#{*P$aSJR+Jq)"<kthJLIŢ)SHS383=/BoۄXY6_Zꖙ"?">@j@l@>;' PK   dO\    =   org/mozilla/javascript/NativePromise$ResolvingFunctions.classX{l6Yd7!iyDBY!b'00YffcVoj>RBEֶڇ}G~֞{gلݰPg3q{Ι}?gX!'ï  C^uT0Tsc^-2oM]kiA52
j0nj?m=v>f[#Ŷievutfޚa`2+QG3iߠ`6"j\6]Uj-ٺjAC&]Frc諨ZJ@{JA#ai%.SFB"hk<5X&)*pnf!qfGzÇЌ%2*hA+CO3yLWs+*zT
hѮ`:*=ڨf<۶ekdeT*{+zgtC"90n
Q^Hm9GqvGO^e9BAǘ3浔a7aV:1D	f"Vx?]JԠN&(ߕ^-!l<LFIlb8ĳ`HV$Jħ\X9aXT)̅߫`+nnLK?]ř/',bR2lG?õ3"b?-zڶ\pUK9ƭaN
vMnQkVZ˥)ɑEsX^߸-)ݸ]GRe
=h&C:rbtcVwfVݸ2R0EP۟S
'Nn>;Uͺ᫦|5NH!5uC3$.>bsw8'=lLy)}T]!bxJ-eXWp'7B)80_)(ǛN}O~d[dnyNS0\?94mX5DnD3ci-tՓ(,)9Q<ۭG4Kħ|𖱏ұ\"&.LyG$o0ISum4mfPٛ>/BӯRd0ISje^]+JSeX\%Qg'z%ՙ (],S:nձ֥\5o-l
N;	oS9sbEWlZ7Sȕn**8P+[JGeFh3	p=LS&ShRVNkt)
/'onނjYjKN͒q_dpG/Gjk2~͔YuRt-ZzpLW&vU3chNǲeJJE )պȞ7=U;P>RkWHZD|v&S$MSE+")ܷO[ҷ+f*?;љ6P'$}] ƅb9lqu9;⾓gQ3᏷,G$|?HKP#mBi'Ki<AkMw|O
:<E9U|8Hs^_|	\;R퉶?ظ0VHCaJ:B
AQ`O!0hIP\OPb1q:.ZZnІ poM&om'i/rC4:fR&15h 4>&
ͥ`x($͒6bCLEtҝX#݅nnlAJ:]ҽHÕFhE
As]4VtXEcE9MXoj )jɞp[=K??}Kw݂`<>#MEɜ7OИqi"C;9QOk.9⻷A~
DDyNdTЏ}G䠠$c}Ñ{}y{_N^[zy	YgqtgS=F)Ӭw {-dfu0@~R7STxL≶<6-u"D!	 VokODD8uG0&a[yH)1b.O(E5
M&&>AH_P'Z;Bz,c_yor8f%^ϫ3#vy}ZHiqR$x>J釅i')} H3D	DPK   dO\E%  	  ;   org/mozilla/javascript/Interpreter$DoLiteralNewObject.classVSU]%BY
eW6HYMm,tlq벛X/>8tw^uĖc=w72%0swN͟t-qH
H0̺nfֲm=@F
*	L99~Ur>CX5X*D+W0L61-eiIGU8i._|n|EJt!
.n兣;՝d%#LN
bCfVF^x]A?X\Jq?`H:($J &tdo(xZNܿc(ǘ7bH5pS0-NTwBd͆rb<`Ujd~KIpm˱d;JB+;
0/
|-mݐ.㸢 T\<uGҩ:E|}&u]sM|[ܪe(Jc*{;&&3{8WRE,4ѻ:Ѳ7_D -Ҕz׌ӲJTRD86i}ٿ--0tmEoj3[sV1}M
~ّqL/|!L?t<;NSñ0q6G,HkzpNh|)/u>5.,D
ˡX$$9{.
|6MsļW$	}5
qt!40%3`J<᳏)!|fޝxxO1A1/)XX<ڨKR{0"c^Muu0*S:tX
UMRC7U[ >ǄU]C y
Q:@!)Fo0"{^pE>VvFb&~\ֹD 1m!]㔬7%ޜ
lA'r]$/ރPK   dO\#wj    -   org/mozilla/javascript/ScriptRuntimeES6.classWwG$kmi؊6[;Li7DUY۩JXMVjQʣ@lx#< vH8]˶,nN[3;;sk7  "2eh.iS
鉹+\sdchF8d)
4մ8Z䦧,FySG*_ao°&ׇipedhg*UE_Z`hOmV-(cM;WOE^{Dq*Б%q<lD5Gܥ:^fɗPo >UOܨ-Qs&&YvO⠄^mMi6j1HY{Sv >	203HZ'&/!t	
✮z%gz.)K9.f	
8""ҩ*1TӸ!PfhCqjxjfޑYe8.t1<N >8}%
|6*O64tu7љi䞸fww\f58c[.^׌~bzVX{FƇq%3q|V0s2>U*I_Q!ic#3}y[չ!D91Kq^Tk֢}W~b(&eLazCEÑyA-/dl{5=׌u'0I?y~BKG,/P9ۏP-몫jȕμ񌩖A5+(=Ҍ#bWޭ+FR݊Cm;	o[412J9 <ٮ()w۪KFA?G}B-7{]%R>MzD=:/zMa5>MK}y	w&3;TUIb]0yͣdCQk8A5O.+H=/2i$^UP:ӭCqUZ
80vnz&]q7\S-:;ȻuծT֨1܁`m]Q6ir6-T隲h({Jَۚ-ÞZ~K2[_>45yp(zMQ3
IT/"S ԩ1Ů8?cl-A;]]
r+uod<bM;ޒqP>hR#"RMw+u?Z:P2oW+:$}l׶q++2GYw%vByGH%:[Ƀf rCQH`[~?EOi-F8>M/34\peZn;b Bg⑦"4\ne&BCrCÞ$\K[ю:飶)xC܋/`ы/KUG?r gDh^QCXj' 5QU]Uލ,^tvF*x2F{&|PHq (
쿋ѡ2N]\^2DJ-!;xjʑ*=#I̷mBق ŀ]dCe<0wƓīJU%@wn{~䟤T{|2>|=v
1sDmO<.t#72[8NsXC477?@s+7y9Xo 3+v&~KkΒqT(h	
ީɖ:BQ@ZocOSyO?/hl]#-D	zM_c>,cPK   dO\    '   org/mozilla/javascript/Scriptable.classTMo@}ۄ8nCӖ(_vEziU(J*%h,ƕc{
qPgK-Fogw۝o J5Ba5N|g;gO$J$
>g}~8j֛77LTaV	f֮!t4^(j	y;ޙdm5_ȃihٗ`(k]BNUðkRKxL&xɳ4ho'K5>ex3Vbn/B!LKCr'!yoPQoNI?ڦ5)QY'"/VD<~jZ'Cg<aE_Z
f'#.8go{6CMF7V!{^Dܧް}
PoheHt'Oʨ_Q顨Fò4/ӹa>wƻ}xCXh\^SϰA
6)ȶ`Ӹm<4^!T'ZKWhsPK   dO\Rqov    5   org/mozilla/javascript/Interpreter$DoRegString4.classTmOP~^(uPQ86Q!6Y/^u֔viɟ?e<mɂb{ys=?bSEI)
i0\-;gn8Rx=Oз`8\asgYKn0$KFQj m{!mqJ-gŘq
c(ƃ1d-鷥g9ݗ|&f`IH~Y\e%p4:h3"
niiu
RJMld0

-2~eȝMJAAEZfHE5-G;\5=+Xo[:c1FSgPā0A"_
~]O_g(ǁćȜ<`9Η+ԶLm?aQ/>f8]9mHd<e;ǕD*1K+xCV:IF2]%<78F9ҵ U̇!( B|!.FbwX:+ҕGdY$r(B/Kz.b	0"YXMޓ45<eHV+)MPi<,
OH>PK   dO\ȶA    3   org/mozilla/javascript/Parser$ParserException.classQ=KA}ibX,T+-	s+ݰ'߱,Npb!ͼyogW hACG
A 8CqpZ1vn!Pdf"$64rn0P#*yl3cVqz<E63ZJ0T;Rn<s)ɇo1箥e:j|cCT&[I#C+;yXdXәo+%L+
ڤk %	+2)cP&%H9x{JKER	M0(}PK   dO\Wy    5   org/mozilla/javascript/Interpreter$DoRegString2.classTmOP~.(PQ:qmU@|2Bl3$f_tYӵK{O$(iKmss=_ *ƐPԐ8ÊѲmoz@#7}KohJu6}5˱:CTIcis1ܶ=)%g(5O"zRpYb<3IKmYN%ߵt6wzz_p	&h]RlY^pPu74DaH'tbi4p[AAd$%`!zٓi)(11\QSMaWxGm&wgßI֢XQȿ'aA%=YC?XǏn㘵ćH¤zOM%A~Tʇtjzضjeh"͖sח8oC# }gN6v
2,HX"y
1zihL+*V@)ŐƟ@qe#&kU}Erf$ľl
z1qK"_$%	C<
1Ǆ
zRyT9<!'\' |PK   dO\>    ,   org/mozilla/javascript/InterpreterData.classWYsGƒ,K`cA lq`sX>Y%!dyAWvW`	)!T	T_T*=k!TB*yz{p __~ 6l,_arZvU2QcS9y(a__L-hgVGW-غY2u?C!c5eсCa[)4
ٴv1Gճ	a-
٘+
U+i4;&kFk=y͞=:xesB66XF'˰LMR te=cK[jIRNE-!cfh!4~2zI\D"<1(%SfJ;9v	6wىbl^!hu)[\*?ajy}4B,*ᨖ$JDx:'G8b!+!T\lJ+ItF9ƤCӲFA?91ɡ8mPKDZ+蛍-HB1G穢H2lޔaĩ 9RH3l^(,cq[_r8aNzFp+N#Kjj,8CؚU%.77|Uݵ!ׂ8ǰFb,3nG#bnZt^NcԎ-
+끉4_У&մ:05r:zblBb<y,=*G)8qJ<=~(cj2]-
lA&yl	
[w<ӆ1Xz҆ \5XByvN{my(Z*jȖﶀ6Ecx

⧮@n.{ES+XPmm.&"zTtˆxE:}L٦aq[5LF:лԮ(n.ÖRЯ53+ZLhNIhAtP(/e1epWMWt
Q&#IbؠmԻp!rFawQ֝L;SŲ'q,kdBހu>>n9`c}pklĳz4ҩ ;DWYtcfnKFU%!:">]H(rZwIҜ>$7ҳ_ȗ#zo<荇<}z`W|Lʛħ3h~`wi\EsT;hSv8X8R~Q%pA6;ؤD*}JW+ t:حtq6(vCJa+ ~
O,P8܎>D
6R[J #a$v	sGIO@sCA@R"LR"	MiIJ$/)D%%HDD*BKJUR"!\R"%mIiHKDB"(yGx=yZe&*iXz^0~v2U)m)T! t,Y'.|Fv}8&:f:/p-K805,U/HS@١l1m~-K˓J#R+)CU&^0DzSX"RI\&]OI[ˮr*yG^W|xW|x\I}?$MH
KpPK   dO\w    =   org/mozilla/javascript/ContextFactory$1GlobalSetterImpl.classRMo@}lc4MJG?hJ@RDK"zܸv-W
"7$~b!7ofgo? l`FE%jGp}eHz$l8u!PJIBEиml	
bTHW/J'&4F.҃T+`8fKe@2LwP2z%zG{BD$qZ0ӿ}n2LҶI6scoFCkw+Y
><$I"y)+͡>ppS?[wm=:tvPFm%X.NJND"}sɲY=;%Y:W0GFYkb6~rGXk_`);STnn%5TH:3NnfUֳϰ?]XV&iVʺ;i)±DN^2}5PK   dO\|1s    '   org/mozilla/javascript/SpecialRef.classWwg{nIHX@ لM,KK&
)0l0tfg#Պ="hk
ZiM+Tx<~G?cZd#=<>w c, >xxQ"0z:6TGlԇv\dѭpo)(!`	us0&jjιz,H
BcDL"
Ȍ:DdS7`S2`K XJ!WY"t)2RVϥg2XiHueA#=XsXKrxBSimu蝁	Sڰj9숫>^4,?ZFNbzcTNMgbeSM-cI`]X:
Vs07D4Qh4Ný><(vylQ҈jCS{bCv;}Qb!S׬;Xy׻McX@_ԙB*H/nah;j-ӜoSR^Q\
LZ _#>ãsOGu_ru~fKR-X:yVCvjcdƏ6Pv1u&S#j:;Ĳ^*!jS6qe3,pxy0Qijfq<`&<'(kHFO[Z&%{ᘂhjIr֫Y겉b~zʠdQ+I<@I&Qe߱wjH6`yGQAk66fj?ˤdJa"냥 '/Ś9T]h*ٞuuFF;b^U_Rpg씶ܸ
q>|ea<3tHU2emXz5_ǳtOd-5v
)-NxNxsDڐqo+TZ15K+[L.$N^Qt?3h{?4ēDWOD
^@&ufidXtsC4'?nFf4gN6B+R&/	_x_ϼ撓˕:_oVֈگ;Ap;Cz3p%sV2w68=-ՆM-pgC!՚Re3uERwjuIVS	%rht;O=x7pyۉH93u2_KVedD
)߇Ux	/a+=Tբk<_(:\0'W[KiS'U7!nW#7Pu 
)r!y~'$
]6$uSg~S87{B(Hp6\Dg*VG+-4En"2QK(qoނ/Y%~(mizנ˰zmR\(?	RG~iIH&.>&YD}v<}/"@gN0^%mؕ5}T2d;FpvB(VVDʺ;Զ~V%(<]Uʒ&vȷ]>wBuؑhi
RT	܎/l/K
z:z7@d "DhCdSC=i
Ioq-ix|B
!fYQnp{_q"j%{aj%_FYPsS8'?^ƋtO5{FkWmTJ8F\F$EIl(Ȱ(t!TA^b>"YXB^[ E?3Zzk
bB3F(Q}?!
y{#ssxy|?"V.0
8A'7|D!\8%<X9QQŧgE#WxZ0qN}8/9pN1]Z	}"-n؈QXEuHȩCBw]6$+mWVTՔO?g4P{!~>JBe>pK(jo]\+nX/W6Ec%(z{ר]\vPK   dO\z:K    B   org/mozilla/javascript/PolicySecurityController$SecureCaller.classRJ1n[W[Ƀ=R
^<k)FX<	| Jz(
b7!C_^a> %S~CœIx622PlG>*]m&LKxk%Ps#kRgs0x}}%L`>sǊfcFH)C/ϥ!k3rJwe'W@3bIr}I1Ԇznbq,]y=tHNM1I"L_4z>[0]V	a);Q-gVUcXC"z7EX#OmPK   dO\  t  5   org/mozilla/javascript/Interpreter$DoMethodExpr.classU[OQ].^T. ^KPS1D}q`qn1/9g	6hdg囙33 ↊t*HhH"0F渮el[OZdsQP#
skit!@pC
uadُZަqw}ۑQ(5CoȊK5VT0OYk*qoം3bah4;mVJVR1'Z./=ysFЋ~ʭFK
Ux|^]d-Y#λ/іCk'fA
nmlG{OŖ5m6[Ocu0tP4P.xDy)
PWy<zmmxQm0^͗zS3lѲV<]C6kЧqa2ia_ie.NQF49SZQIqaP;PwН~D_>9LNSRx_H=xL^__1˱=.b\&e.9L!NMKO:@?.g%.K<IJk?C_ve׈N4OtOPK   dO\              org/mozilla/javascript/ast/ PK   dO\3y    0   org/mozilla/javascript/ast/InfixExpression.classWYW~<6@B$u	N C줍icU3`Hk%MҦiO_4$"MNۻ\Gyg>F\oy}eF҂:рF
n1?`ٶ1tX5l*Cx354?>yjMhE>R8Zhz:܂Y4|8ziAt@j%3fkhHf&t!
q_G?jߣG}/rы#Z'<Lt??^ }t'@QXW1װ/oeʘ=#)u*byJ g	ǟ\m
]qq6dN~M3ߧcH5'/t<(ha_x>h8a
;6.AYörV~= 2m
{_Y6l-k$vV:.`DCdN,;7ߓ(Ipش_<Y=Q'xPI<EXvPhh:qtBk,ٙ5aU'ɕy(Z:fb)H٬9APt\ǳ,޴3P/(RurTΉP/Pn0!3Keu o
paێEXl;ߝvWYZLHK8
̲GDb
RA7cE*ni8K$K-Uy\`wթpjb
3UrfwƘy>f
{(ZrcܥwP5VlWnK+Mpb~q+EˈrU74xr^i.MEY<B8qV zۇ'#QΛгcfW5aa\xgU"UE=h&LyMxgUf/lڈx[;SeJ97,Akx`)٦y.N!lvmO[$F8Y{{.A
c/zdsM-ޝƵ%	-U1ZLb@3y^*Z'%_=rO`P(Ly1ڮ^hD&jZe0>X#*__t
%tzb%t]
~ag.MD.#ʥ$N`Q00ۢ,%.opB$YOVnhN@yE_(\+FwNҧr|!N=HUU`7ǏTPҩN77RGEC*3#ǈ,
y8?/TLG8QiET+Lto'U!9&А*;h'Qw4+T&>
%>%Fl,|m9ۓ2n
	~O[7
W@Sgxuޏ0*Wk|co1&.+<o0	sn!~^j5DPi^ҹJ[ƤW@l9YꬿXZ2y1kp/S
 `Vc~*[T@l)1rkך8(K	F<>bw>
t$gDWkl_կ5+8URќ{[=x#*Ը|miiKK} l(U[.plM-L;Z#݊AMK%s_
pN11u1D5A"ku$*\&Ho{?qGyȥb4PK   dO\5  <  ,   org/mozilla/javascript/ast/CatchClause.classVSW]ؐ,$AЈabbk,Qkڈ(BKJȦվ~i?EǾ!LL;N]Cd2{;ss?p 7O_F5j:
soθrj%uA2^T#1="Z	A!vff8[$_5,֍<Kq72GU
2bi$lbh_YcVsf^,h\X+W6⩞q7:㩔C}3H9c;dta'CcjYɕXGuKiY4)aö
8]MS]Lf9		xOM]2nE_NOw14 z1+3Z=Z&B~g8Tꀌ8.RrUr:1
Z2HVIC51$?'WaüK8°yǘm#z.Q<x<8&8SgT>+D.LrZ(hy:?|EMpO.qJ(Ƙ1of PcX gzb\)}^L8
ex,b;S]&m8&9L1$*gᢄi3k*eXCsVtSzy<f%$hX4pZk#sSy"C4mdܸj|nL+,WIB)+Q
Nkj覐o <deYIj UYIQN]q"k`gE=t.he9+{JK:uuV+3eF@]s!gR829.
:r\۩ʓI
fUmzc|.OF0~G&=MYSnC:(
yM'Bf X?ZPVN#:CȎ+!O#dݮec8;ȾA	&i#	!9bhG?Cik_!yE_+"D1ǙBYf</tZ[oy 5bsoQXYwoW5q_ѹXt/4(KA
PR3yC5I%pQ=)"lQ|Y)J(+erR@	(!:W1q$w8i
.8PJq,E\qG]% 8)P6fV1qT^2~,v+AZFyF((vdcԈ%)%b%r<H)dKWuCB~z9|_/4㳨[y)|7Ju~H63ꤿ<{n!ᓽJ2.hZ91bso}zc{wN,1~˫"	Sj_c7_?/T(I)_4I ؿȚBn&y⃻1VN~G<'?PU\W:33m{յ_#
,#
йvpα7
ը3z_PK   dO\dY    6   org/mozilla/javascript/ast/TaggedTemplateLiteral.classURI hQ!L!]\w
h),א82̤&
U-JCV P[{Ng	#ݧ>;7 4>ǀl֝yy-wes3tڑMnՠno	
	
LU-!Ta,"QUvÓZU\B	7
ev{QP^Xqd2EXm$NQ-úg+krj*L'|()yV?iI:Κ]~gj*Lb$Z89Ref)A2c
`SP~M|׍b#U8`'TXXB4L.rW,\5CNhm:P<;d7X⡘}2TꑻaG+Vw7TXEҕ`Sz2ty+)p0LW4)zulwwP	^tK0^S
J!pg
״Zhx".0!N4 2nQ\h{|G&}G$A?yg{?!"QF{e _o&h"2MDU1rM!݃!|δޑgIH1@ݗu=LEQ)Ep
Rؗs-e
wu4}QMwupz8GQHEU(}̋=̮,ڹδ0|-Bbh$
\ =!i:qc_J%ʂ6HO#YL-0Wb8{ ,#g3ij_mz M):ב1@ E+PK   dO\:  
  .   org/mozilla/javascript/ast/WithStatement.classVKSWCpDH4b4'߱aZhWr2"VšTeE~S*n{?Ө&A41*RS,Z'S[p<?{*[Sv
lh#iBfs4[]˾BXUP9qiKmT 'yՖz%>2Y1B,,wk{S)+ɿ=$у!lvjXT-Z'?08b})yruÙf6fq*]xi)l7	Qaz@0ϒl7#sIbUj.fFO#bai3K_v,ȠPy\P^\J)膡JE0_7b.+ldZ9F[zuJ
22i`Jnq4ftqnE+J91
a,LiBfWNmwƚ/ҒW:r-);E0,`Z!$Z93Jux6csc^|+<ZƋ쪿AR`IS[9*A^ufr?&@~ZG^k^;SmnЮkPf50HҸ;rO0@=h
.Fpx#ZX5A>{䩋{1.B{CJaǈo|[pDG|##!w"Wj@
_Z1ӠL#5.iu54G_#=jpxhZǉ>AINRS
rtIvz)46.}&H6FBj|k+/]kJP!V3Jj$1S
DZDZH`)Dn5%9D戹
bwo8\uR>>
m^wf'MWX,yOw069fk8Zԇzp:?7Rc[N5|?a4x%9pZw5?/뺣җQY	v`}bY!}*K]L]̿
k j]UbDClX_LaK(Ka-:נ/U:4`Y#ZPK   dO\EL    '   org/mozilla/javascript/ast/Spread.classTmWG~H$ADELBh/mURр֤豟͘,9;9|מiNNfܹ{~O  -H p1ŝx	ݶ*r!y]u!TrNpA
iQ1\o07m
*	dR5K>bR}F"$xT[J9l,È	dSqCNa>
+wGvD[eJ:肍06˗H2fs/4ꢍX,mQTҍ\S7
^FNtBGd6>'g4F9ETng3"ZfS\gX-MW*vw_An2,
C*lη<dýMz+T˥|\!ըJys)jW.Q9;wy;fhPQ2}qꗨkHGڃJ(B^40*
6ģX1=â.Q#qabtN:ɱNyG!j)+/²Gr_T-6;M
0Zip$9a[c~X~v7a-ip[OĜ[<JПK|_g 8i3Ўb@{8;Zӟ/5L~g9f0D9۞\xNh64 cv/XcpgR Q
w}cҤ)~C.iD^Go']1IezĠ?dc9
	iL٨bW5@cZV
5"ӑN<1g*fPK   dO\ft    /   org/mozilla/javascript/ast/EmptyStatement.classTnQ]KMAh`o*S~I5`_P&t03MO+`~qIp.;{~SlA48VeXxU}qԦi|!*	$*c`{ΑaF&I4	.?:7b%Ae5)(7mYlBJsPtrϴ{/54y	(3ѴL[Wܒ%awױ
CDK.C;AìjKPP.190Qŉ&=Dgeΰ1=cQrt{?4k/O:ZwqŻ5D3k6cyc
{3kH@3񉃉_
mQ.)#0%O_Bi"Jk1䐡}CdPqvJy"r/d }c>lHG8*1d)Gw9@fC^qz@_a!ʡB'T@soJ7OQ),Ӳ8+zHb	stW9ӫ$S_*ZS`JU.4(uF3<h PK   dO\t2C  %
  -   org/mozilla/javascript/ast/XmlMemberGet.classW[sF6/1"`7bnqR.mB\6$
PzS-H@@}g`sT笄z2#irΞ $_C1k4#}Cw+
Vؼt%;oXwA \#!0dJk ICӰ'vfڊtKO{ܔfMf<O	D`f?ie׻mWl/k|f> p+vyǘrU.אax]z%YlNd'{3c8N`%DO'4dY:AFő8/c5dbü`V9UnU$Ga4|5}U>ҫYƜը>B֛MiUNf/܎
Tbq1P@h;v/jZ%gv;^$jIi/Fv,&p:&@I/6lMSuS__$]ݬȦGMSa^]g8g[ݻgx
nyne,r.qn_e9힒aKI3]e1=+c]v	c&DĔtB<ݩsR2ȚnaOlQ99:
20Xx|"ynJ{̇OET
]wE`k
^jYo/Ϊ3+6uͲvM/ZiT3YkNLFKbq|I6eX	x[^lBE
ݪҥ2Wכ;5vLYy$+bN7EՊ%9Sw]jOVAK8?
fSz@gs-\
Ooއe"Bacy/>ГRWP;7.dG~3Z'P@D8FFZHw=D!
~\f|D;!]}J@aQzHH Q%r"P$|)|),omjwЦ
~h(и*mS[
"QJ:TI*<(@+-zJَ$q8At/RGBs@
T`$AF&^wxI^0^eU/n/֦#6ϼ@As[xgMs"[˅pvW5Aoir0NY>C.LPFVaNlSm!* 9TL5FSg[^W>?_e+J5&Hs5Lށtl4t}*O=~ȿPK   dO\O:|h  /  -   org/mozilla/javascript/ast/FunctionCall.classWiwW~F%E/QjDnRBH6I^;8[34Q@m.PPn4,e	`pԞ<$vܙ{>ϻ#p::Ѱ.e'B\0/kY2o4Dڎk -Qu$k'NγK	P*5hY#!,[u$M^*vhQitirD|rvq)N2qLЙf}qi.YcqJIeV*yo*lғ")Rff|AT,AӵOʓXNIE"+kwډRZt:*2]-.ZXXg*RW$Tӯzv!3iW1ic1:=snb>(dOZ:8WLWvqjٞ^Пlc	}Q|^GkHBfeں)DbRcGM߶u'|~"693e1 Y3xh$L
sk;Kǫv!oqEXQ/Vɫ11'[%DԱ,-#c1JU7gpv@XTiaUQ(Sc7ǹMacb]
(:nŢsFpb%O^A6pAO(|@@ybD(om߂8YyN-e`T
5:fQh5e7(%h,rjRUXۏbg])g%.{aJ:NGIN
3YʙyUMƷ@pDprvv:6W߻<3<eul&*;r^eL UMtQ)ݜEY	F~2OI.g+3kne3o=)ʢ/Kv.
 wX9D`@hx_!9o!'Ϛy^#|O0*1=~=ĽǝuhFhQytC+迦}WP
vj܉{+	9
J*@QOC0=;iy]0#5pvG}MBtDy!ą?`gvQM{0RćjAjn>U$}OIK5N	Z6$C".UD#;Xd
QGyinx?
ԿϱC>BVD!JF}|y@6Fj]S+\vOXw~rMSx1q^GVu
+8T̫Д%]D$f}{~S\C>Bf^4Ψ];ϰzЏ0%sπ7SM+>0|}6H{-	0ެxP#ŚhR\)41ET;6$Jݐj%e.mB' NO^(c`n>M4Ut4X'o=AE$M2bt{R}k26R7]zOz
=ūf Ϡ,3a#U#5<vfXzL|+'R&U8\pk҇,6S|jxQw%>/_n>!僤:F>76gh׮Ue`&~_+ln*z7FSd}|iAh7&8M߭45:Q
*0M!ꉱO% S,ŋƑk*~nw*PK   dO\5[
    6   org/mozilla/javascript/ast/ConditionalExpression.class[SV
	\0IP02Ӥiڐ;
sI\*lYr$9ӦK}eڗ>43zc:b# wYYq4 C&Dmg%[e״[p\/{.=oXwQ oA3Zb+8 Emhxmiˎ4xP]6OjWDCTอ۴g1Ej^-}IA6zu^h2Itnd
lhJrե*8#=b
R_8ESpDݛ@g:^YSVKkzR*xC-hnyU
FNEf橌QJ,kc
8)+P# 㭊%r*eNRp֪E2-ĕcX+W+Yԝ8 ºo*81xI[sVQ$_9>\%:\֭wٳv)x.5cXm9S}MƠLP@1L)ƌŻ4oPUC{o
d	PMP˃>U)-Μd=o4s^s~ުA;xj/гK)m|S#rhE%p%gw\M齉n1Iom7T9wwo#`":iI짶HggU]޵H=٩"=sP+j*nl4jf!'
tiw[jb|iU*h"ޥk h$
{;yJ5 9xHץHчzqH]~tݖTS[xEBZa1JjP"8O/w7~	Dd /MŐ<Ml⨚@*nb`2
jM\d&7Q
ף]	Ep(
$M6}֣
E@SC]BGhwAіPARVE+
USTz@qi5ɧ @l
Z d9|HANs?!.8MXΩrkƎ?A7>
W~vFY>O3pvrTMmM_ez,ǟن#5۵g6fz맦	|FϩfQ|IUa}Mg\Ƿe)U yk%g.ȨF#ŨT7Ͽs|RO#}GyP~#=l@M~ TKBf-OÒ\?PK   dO\X:1  	  7   org/mozilla/javascript/ast/ArrayComprehensionLoop.classUmSU~n^ؐ.Bjݾ&+R%6
v,dKػ{a_b_cяsv|ݳ9=?_
`Y$42FeowN-ty^U'wq}W Y(r
8ŀ).T	1pZ*+Q~۞|m7<ۗQܷ
c#3cw=jI~ꪹ r~H`P;Ⱥ}ݘa1pޣ{/w+jT>0%7۴]U*y@<s
5Y-ݦw+'K&.c\ hYw@/ T*
&JZ-ma3k&fFri=2m։ubS&c#9vChTn4-β.6~YcBQǌ;&> 
"Nwآi,D'03 Z	wbVWdMH*}c0/0Փձ:C#)UڶKaY:*Kx>)$'p0 ݤK?ecsAzaK>8st߈u"W`3PYt}-غAO]Bֺ-QB,/𥁯x#x@qwԦ3|^65}xǎQm퀎z؎qE)*^sJU׵J[ޮtGθ@Dc@V']pH!^@־>f9ӓIJ}&ϑ0Hg`avUE~^)n٣F)h,LfEndF*Y	?'qkq	.u54WBdX9oG2Lv5baU\S{M{xt*=\!tIF!]F_ԓa1JLn7qy"q22X
Yx&k@29:JWiT3DgN=|C<R>sȃ.<NB8}O虡s|J- рѿPK   dO\ק  '
  +   org/mozilla/javascript/ast/XmlElemRef.classVRG=#b1(\AZ.;N'b.@d%ưxw!NʈrR<)J{%d,/3{OڿO w"hG`M拿e$#fM|Vs{ftL+h
 !MFc%*
yF_a!N,0#
WR̿GOdÎ^|~B_'T,ȗs/Kt3Xܑ4"&f8.Z@W<ͨevK}sSL:n0aqI#eÖW`$~^L @kCڑv	41q
H
Ɓ9E	>L1斆9(daG`<bJ;]әqmЕ3t51[A|E殤4T~KdHF/w>0˕]{[\-974gA<$
ܩ i!,:B hXp#ԫnīKwx]$ц4qxf+6r0ә.+c&=ggRF9=)edNƮtPQ"IKH@}`TGOY5/Sٱw%[ٳ
܁tG=CzQʹf(y#KK'2KMFN%`]A&zҍC+ߌF S-_O t1h7F6MЈ6#V
L`Hr|L[;Dg!]Wѻ+z2r^/rF||QT}TB;%-h(%b~O^ʤ {]MТwjtWu1˞.hce$)B'EI5ګ$ۑ&3vPv\]jڲ)ZG"
)#<!R%Ң?K,Dvi;Kd0xD2ȆUQz{WpoB4Uǫ7>7~ yх12nnPWoBhK{ɿcT:T̜2<Nۊ;exZi;A@Q줙	 GI=G5lW٦\Nc1@eK߫5"6â[#̆x9xS%Y9g/HOp!L?4,V%C	кSPK   dO\bM  	  .   org/mozilla/javascript/ast/XmlExpression.classUaSG~	1ц*PDZZLII)eIn.saj;v?w77!$1drټ>; w"j8ò2uqx%?Aŷ"٭;y+خ-2+e	2!&"F:ØQP+Sq	cp2,Q-jeWʓT\dZ ׆ɗ|/鸌˧ut(2wk'/c
Wt\;\"m킎E|0e$%˸NCVUfH6%qkYeE)'W~JPo踉UY
lq@@pW^ޕ>5c>>$Gr6t_޾E2t5sJZ[}VE2m;\0U8c,G)@3"Fa8R9iQZۗa9c8O*t'bcU!V6"Tr,і !D |شāW
&X_ox(iؑNN㩑l;B?̙N[-
V+S6}ĝW
O>"d^p]942,
EU5Ph[X`N}NS3-h˛WFFy
jSo 40h3u4;Vg)B؊
+e
K
DR4[am0-G:}*_X4E1ΝBOR<Y耏cmN##?H%R_&o1fk$1Rs3DqCxd\XRY7}EN_jv5滛q_4,L/[RTF%1Ih4"
t+4MD.t!AR
2#:L$v:ORn| |b	z|XIM-ó?9.PK   dO\Xŗ  	  4   org/mozilla/javascript/ast/VariableInitializer.classV]OG=֘4J
N?B!	i IkmӮ핳eר?Oh_ЇU1j#K*7UU̮!=̹ p	>IӪj#Mוܗʁ([Z}Ր`9]1UE_͚j_պF}ÚqZ%i5iSW#$a˚WRG۶b2"21İ؃ҰsEҔ	OTAjvR2$S[l9F$rbctR5lOℌ33l9X#M&e.|c!睸i3xT(v]payX[{?I#'2/#C?sOdSI^ihGZK0qך^Q0r|[;x!\SRz2.}GU°%lYEIe\Cm62	Cn'W<Uk.dpn Nt*j
6:{mCĘ4TՒ9n\uY+V9b,+zẀPk0\8)_Z&/edVJMA<
a[ͲtT#)R=S#ǵ(/5|ql#X!Qb
5é';n"4>FjQ`$dҝy.1o#AϏ1JOyn,xt[4qc>E03>#)׶dSkM~>f4C3?Ty(p &]x>H^x<o#kNtb]@FHat"<ܨWӊ7úE/~)#_<K\ |ѫ>v]ȜO<JNr7:"50@t&EcNqOg(-?J6{ݮd?ܪrzQtswiAoУ7(:%ztu~p
CVdgJU*YH4>@_2w<TzWpPOz@q>5/$ ^G;dҿQ7Ly J0tT\Wjx\fr4-KjPK   dO\S     4   org/mozilla/javascript/ast/VariableDeclaration.classW_~fYFU6R,bE]kEĸ-m	5MޛFzZ&imO?7_qa9>99 gA5Pz;TiYz>;YtӺ{w71m= UUY]JJ14
QAz/X	#g%5@(4lEdT4+^r0ib~-hQP鼒Jm&"G	uɬ'i'4܋
6c;4mY
ZnO_hLh#>*viOtY^]{4ERAt
Y()hMvbL#RTѥaWnQNΐq1&=~f{-KaU|j}ȲЦn39sPA/mQp 9Ѡ|֐zN*y j<KͰi3jFy^Z1[)_EZᄆ~TuJ4
vNwϙgۮ#>fvK=?ي(ua_0AVQxTl*Qx}Ok8rvuטWM0"Ǆ#!}h(ΩxXȳxXRڳOMKQ|Iŗ5|-naQ"IX%=*.0ӦV
{HvaڄsbѰI}%x(@a
%ZE2/y<RE&]J0
E)JV&2#Q=g.kx
O3㆛-&ѦIVeC¥g5<'Ɋt)gD<-$c/jxI5ϣFWMYÆ5k-u32[Q^#)\S'dybq[wK,h.4ⷪG%@XN<=h'R,P1bB/Vtt=(8BӜ;Lm^JIj͌ΘLt?Mrz1_ic"*3px֓k6jcUg`˶ǐՙa-NU-<qKzqp'
y'w}L{YȷKSj}]X?nh~/F
i餞3
w`on_.WjRU?-Oa>pYa3QqKu/
]{+3_l?FP
??9߸6
"5 %u4D,ՌWn"~QNbZ9.%-~J[*ֻc'oDa~+NJV"}W3=fi+Q̴ e332!g5opi.bo=aw('u_7)1~8?9킴v^ح`k
5Z8I+;Wo3xM_:d!|gЃ#娒\)~ŷ?/*+qN|Є[\{7G.V;>Tsy|2t$ y*Tֲ;]]ذt$X9p}m͡6z'nXz}A
6y>Hsg!eW(/Y;vWp`C[Pk6rl¯Zo
缺4p~U
z5Hnyw<S3{F'WaߐɾрM- Iy"Tr)꽶K &}}ʳ<j*{`3L܆ΖJ%摟.2uқ2]x79?1Y>CYp坞/,S~z"<O<n:,מa}dKa/D974;\cs^F#
=k|f^	zJOgj_˪-fhﷂ*ko:ʒo{~){{#<#?x%#1-6P+PK   dO\`d,g  
  %   org/mozilla/javascript/ast/Jump.classSUƟ[J	o)ڄ$*mA4ǪMv3Ɇ/Ko:e@Vs9'~<ф ZM`,o/bQMj%_KVJXk,hm[Kͱ\ g\˚{ю B(
6^/	XOK#A씙u0Ƀg+QXȚj~O`,#-^pny-WFb*vjjXvVtX*°]`^#⨂135kV`aAǅ UpQb֮`R zTK%li%JJV" )BYU
lM)SCJ6@o'cV:2mTkȓW9K=lv
30x!Dּ@'#JoYkß'"Y9%t,y:2n SZ՞",tguK)tC-:~< dL@hR?iJPoEH@\
e9hC୯9CgVyMT5Sl
;klU,84C`h+\;gi-\p
_Aě^;UЎGKq%\5j_4Da*J}$wOؚ}s
_#<DIqO@>RtqDCuS2}%\u.pgwrv?G=5]9;CEV$Űlz?(3"$:M/j&74.!ጇ;%K+Apfqrr$,6쩥5^WkrV7q.#9I8ψ9#WXݫd]NySXf=HXxi[f'0U+0Y#Vp	Zco_}|ao͛w7.`Vm.c>s$ߖ-E:#tM1l'))>c>3OOgwLSR^P~C!RNgm6ʎOXlq"ZڦnPK   dO\yV%  
  4   org/mozilla/javascript/ast/ExpressionStatement.classU[WUN.$$"!ZAm@ P!̄]OZ6,u-}7Խga<$s朳 0"$Z)[1t]UiU;nK!#hSAT`ꌽeg֤eifHTC<EAWg+f5CS1R7Rscz1bIj=V]Ỳ(/I{մ4;TACNyi2S\bQarE]U0F$(o
n E4-0
#d0Ae+u]O9*F)xgOlOՔ,kh'
jųo*x[3aM：]0z`Yﲯ^뮬+;Qa^ZkZQ.$y;*#mkvM3J^ۈ3= 5^+HvEKx@}V(
LNn<qENuHA]7g获S$cY)x5׃C(З:Bc#M[xJD0ņF=kRx~$
d΍PPS.8粓y]i'oT}CiMFŞ>KcN Ւm^~u)S_V`%Db.ʪ]X;lb9 fHܾ]XSNq8Fbt+  h1\мg4ݍ_"3c]V$w%w<%}v5tKaxX{;ҙCt&!nт>4t-%0]v#<4S
(qĿ ALx
'gc"fw	N0Ie(y32sm]i{٥^J4
8CvCz+G4=ΖEf8Ti7IۤxĶ4[ƲGul/IL>7ܬX3cx:2TI~fn`H p*tŰNl-_FFyEG5 @¥yz+Or->tV}NGC<C
m͉ 	~-8V_4B	$JGb:] MU&i47#|!{jhթj&+x8˥o?a%ۦV9%**(CCөX?PK   dO\]*  =  3   org/mozilla/javascript/ast/ArrayComprehension.classWkS=.;X^(%]+#ɖdI`/	kXip;Nq$_/I]AW/->3˲Itϝ>}%j!uݶ[7-K]կn1K^NwD.u͢3S1ZܲgZSMK H=bhаWg쥒c,E״m\f{Hm֐B@]SbD>j.X%y{NubػIQ?ѰO:D!	!={Gh>=z&;.[nu1{J3
زe	m[zq!waQd{ሆA8Ի7;Fzӷ+3Oq_k,Ş',Cw䪟ixCq3ݳtFP'p25<SKb;fTyH3Y_T֍p^`+ڒhx3>7'mNQHcplIrd.iP%3oZOtl:LxY\8lZs$9Kh'髗JFsCm ڐ5<gyn=a/;C3$?GmwRcS*O1XB1[C	مfYS&ZEu9❑seSF59Po'̅-;
9~q=Z1oYÙg-ZRy[ScM^2lE,bX`x5quVl8 KpjKG+8x0SK2QfJ6TxS2LMXnµQWHs}J7
(r#[;O=J[g<wQK	XQsg:wvu[nj}`>ձ}Jo㢎W9\W7Wc{0v1ŵɮAd@lz
7DKG8+Ѕ(upT#G@eVlv}Ռ&mcڻyϴ=ʴ~ +p( D8]{p$0[+ۆn"=
A;Dp"~`)l@m_8YN{˘
-\-۔[E&wG=qd'	%g/Wh{AQB!2:ձFq\hW87X?W!͔wM-NOΆuw5tǛ!Tiy8g/}N|>?YzzC석eIx%ɣ0F"/Hn+W=$OV= 6ʣ5GT=i:p~UcQIO	`*Qd .Ŷ+s1Յx
YՁV)H{ 䃪@:*U|XHG%YHg ߕ~,.Xv
S˫/$s춱ltC(r?Gןsq#Ljհ2;-2(nY'STǩ'(
y[cGmf8'mV
jIxKj0deaD?<wj3TI9H.A=#	χ$Ї	<cnۏ14}րh;4#;/#PK   dO\9    &   org/mozilla/javascript/ast/Yield.classU]SF=kc
$#IRҚ:S4 3}Jg
Lt?YI54^ݽs9ܽ ҈!OGIY]~,=1LѶ[d5i	$خ-	󅺆iޮ#
A	Lw޶@<lGTTuê:B]9RK|%12|KMgK)ꪸq$A{TUUo+~>4ۖ+S!Ρq
s,Lz5o (eTf1RMmwi,ȣ pyܵ=aGܡKӕ|sPu
7tDY]()u۷Vs6Ů9ghsr0HZk{[V{rVͶOT?ۍ!2G14XEɦ*)i5ibS`fcwlE;5/ɪ[M%w4,~R$;spVlUT:|S%{/fkՒ;^O+-iI*4){!?-vxO[1d<E!m:oE?>Zzb5f;X6fK`V{1}5z*UwWr`@9 򕠕ǒݥ_;`@GnqB>qp|HYJ7&N9k̞
KY3N"T11y3 v:LFV, 4"	~"Ѿ3$.1Fa< ̲	ٕBTt*"U:x`qHwi{E؄bO*S&]YTw)h0~Cy!yY%:g(y#:Q<BqSa_oCL?=LGbSD!Z]D#qUޟHeaXc̾`C\>C2!bGENU
KՎ~h#<CҼHS<ƻZ.!r\V~	U
wiZ߲uPK   dO\(=itW  $  :   org/mozilla/javascript/ast/AstNode$DebugPrintVisitor.classTSUݛ
)P*|--U>Zi%KU$KXMG}3NLM;:?3UϽ	v|ٽs~_?
`
 B;c=Q֭RA~(xMSez3H4׌ Z1N)gizBǬx	VrkzC֖AQU0Y.Τ6+i3pAϮ["|KTwIEsA0AaЇ~GT09Ip(A1\o1eRΔ0m
#>!kc{~j9D5D>j6g$i[ꫢQvAmA$Hfk/P4*޶J0WwU4,O '4
|p kf
m+ft^FS+Ds4ss뵤MpY,hXDxrz*8E VA/Z5.Õs%hb)5S1 FΫx/8,,f"5mt^n2<i^pzL]91ža{ۦp3.$
7pdn^}Ҡ<H5&%~<<"/J&+Swv)IS5&'c޲,Ù/kHN!$+⩤C-+څ5i@dIJ$^?Ay&qѷ
bxH:x$es(5x$<!:r5_3{55gO#`In:Z8
OhiE>!-D#*[ЏOe.2'

؟$g9%F!ᗸ.RCcL0'8)
a=>ag0UÌ@=d84ㇳW葧KT
ePFSi|4[|)>5>G|_<os~Oj+q85QSE0E17ƾWp@/L9;ؕeiiPK   dO\-E,    8   org/mozilla/javascript/ast/GeneratorExpressionLoop.classUmSU~n^ؐ.Ci`-MB%Z)TRK}[;_?:G	i@}8<9ܛ?zi4H i e"2(oV.?w*ۡ*ˠդznn$N^T0҅*!N\|mx@9%	lJoi`@6dӱ3߱WeŁֺ,nlfч
juYLa]JxFsO	CRݶt<4⿉&obo!ukfpZr.
4qW2H.jADWQ0P4Qz.wq(Y;AaL*
ri=2%I;l51OGi֞8
ə2ixn
TװCWm*Sw^_1?1c@s9֥)ܑ7tuӻlpN*7#&#05Z;_s=gqg{	!lح;p=S<^134s`Q%xfH
HRM:tՕZ}o3M]:'-NM4s.W4
fT
lQf}EAQ,V<_с9zrˉF#9o7;F4lrB:xrk>}V:qCحVNȬzԖJC'4I5&p+]ԑ3.qNi2=:B*hz<=97Mޜ߇qh?yg#8[wqOuvUE~I^)?dtF'"v2#NVti%?)nDOifG}:˶dYvsA5]Li#ϑɝU{#t	F&:/qBx5/(b;33ݜEgo`ozMc Rm/.~~K9=|-<ԝdOQ!7;ۂcIZx@kjo` PK   dO\yb
    (   org/mozilla/javascript/ast/LetNode.classVkOG=c`BCHbuHJu<SҐWݚGq
i.fwMJ}HUJQ[|j{c,sϜ{g_ .y!tEЭa6orkڦr˖UÛJK}E_QP:uoƪ@ȴD]/H`UvxGav^:s?Gɐ*Kl8Ɔ=B/C[6uW\Ӓ^65GPRI	h;of#"#L]^^ɜ+8$i^Τ:Je
28K,[suΠ@y\nhzZ,G(MJ{Q]GpI`<U3̊Dq]\Qpר4֫lj7nt&ߋrS)}R
|,^i')fh딂[MYlu垱ӥ^ܥN'YOX^ϚjNY}Q
NѪྂDp
rh<:p,F9HI ѧ)	<Һ%rhTƲ,$p*k⾱[5}
ѿt-2u:I<s_踽vi%B3%xgۚ20ii!-/ƌƜ鞊n{,VaUw
,plϢb+ݻN8F
5x	v[Z_iG>&A~]fsdQ +DPWU-wN~}aI|J>?&of5Ʒ0/8	D	>FG^$ϣ/eHt]ERI	sCiHFGOhRW~̜ !2\2=2_Ckҝ5fxOͼB<qj0i
\!$5$$P@rH曩,܆Zڝ*H>Jg^eY2͐,XV1Y}\tO҆^zm55qJ^Qi]$&FQXl%2JI["k)Oe"1zPrSj
ޫhZSxK^>oZtOqnO\\3ٳu\~srQ;DCY=O_0NP=YDӦC'ץ%0璲ڠPSR&6#DW	&l]nDE<|2	'gt飝moId}c4#N힤aM&cPK   dO\-ٸ    4   org/mozilla/javascript/ast/ComputedPropertyKey.classT]sD=Vb+qbiҴ4)Zp)4&j2𰑷YHLït^pW$8juug{߼}M"1
:H0\qvhZ/=7<ӕ%]_֝`H6mSa	3ξ'DJc
kCTۓ9}q0.]˪
hF,2IͰR$EcS	zϲr5U.={&Y9c&}!w'lp-7J>ĒXfm˹|_=[]ÔU:fKl>}J|\B]qT.UКU3vӑWi8=9QqlGΗVnNÝșB	7VTKjMx>VI>a(KCCZNL[{=5EL1=SGq12n.uԵYT:rO$I܍[uU Z2T8̆H_z	T&	!$jPWrz@x>D*l~mE!=n,SO;=w
lҘd@kpjR[ڶ*WGI=ܕgL
0Zi.Axޤ&L +⧗|An){ugiSzF3`w,}N(C[;ҿ'B  ×?S(![(DX8¹z騗&z
s>;&9_QQ*jC~%X 
R4Of#ແKf_5bS(b#(SC'>*EXx~AJ!S]>zqL6u"}N{
"Јz̀&*=*:=÷h;,PK   dO\-h  
'  (   org/mozilla/javascript/ast/AstNode.classY|Tՙ;drCy@@0	ޔ@H"Pd$83,>mUjwꣵ>mmw>[]u]ݪH߹7s'ݕs={|w=sW|0*κH4%;T]k|rMW(ans<l)GbTq֦<i c4L-Mlx2c
Q(չQ+֙
+ST2ƛJXP8(GB~ڐLu)RȓճN4g.sg)xQ&f*c)li{2MYjLphECH%uBA(jFJDh(Y}ՑZ8kkbH\MÈP8+
Ɨ:v)TUdiжiUg0S6ccc<9M,RI*MtXbhS[RH+|Xib>C	B.qwhBNucr4X#=ݑTuhV0Wln]ڸu8QpMU(Ԗ^Au$MÅ&ڰE0뻂C4v\0qO˜ }<٥cakYglC؄%^K'qI.Di+J+"Q:Bԇn1]!i%hP_(k3ca>.Ez)r"gq
p+CF4juKԕ;9e%L{L'tvY㱎Pjs$ŷd*K%>I?W?}2q0ٷ==*UX,jb<؏|
2}keS$I^K&df|Iٮ{q>|qBBfkwJg-v_(s^e3z(eL+V=@:F*%IY'a%6?_=ׇL܏
e#0X}fe<Y7t[`(uLIe>5([:xr$[-zʺ7MԇL<,1:?j∀9a%gcvĬX\&=nx:kԇo+9y
s7')
OpOI?͖a}k|*	QHuD'%JOgM$ ;ǻ M؎xtӮ?>h K郲f	O䣿3)MO/
:o-;tkܧB|PDtr?[؊Z)&b\/_}~~.?~qL?~˱Ə79Ξ[\pǻ8=~\ȏs>?>$ZO#
e]W
~
O5~%3fUCЯLu~S3kDKHN+iJOyK?p8N&O^,̔|vjւ/T
-(s9url8CAp_/Gc_5|j	SaF1֡jD:cToÔyR`/@$ZDۼuS\(緹JKP""zS]g<6Ho&9jL>mY7:Yg4+g@:S;>X扑RI琖07%	.'KzvIfh44F@.Ao0GD;x2<3H=2[[4/7Qn:X
)^L&Ȅk;{J?x)bZڪCudllH׽O1 F.<(%9P%͏g2Ցw9YxK
o=y=̕Hbg@8]>9Q^Um̬:Cax#R]0oFra}GԹ,+6m^BrҪD|#x%hu
OAIE7ExyYض&&^wcl#᪁J-V<mnk_$e9iwB\G+u&Vbᨕ?g|;B9sL:z)wX,E-LY	}_;Qb6Ӳɧd:TB{w*6J-f?x)zz|Ierܥ|72圧
Mwބ>]eU0HEA(kqyA>W}J /98ڜB^V1uQK@(Jdr}x{IֈSuxq,LV|~Cy,ͼa.oM|Qሩb;f#v>#mwcwn>Nϰ77RY<+5SDz>J>~L^g広)=ZH ߡR3d=YT?Lq0<l?8KPlUO>Jmް~)e~)˫T#jNAC
(czvxF?BȰ Ͷq`M+E`=_f'_Ӭg'PPוrún:or\7FVC2>c c?L#9Қgr
b~y*G>~8:wא9iCP:&r+)"q~Z>gM틂A˖ȇkHzO*cx
1Ia*d5=tQ`)(բZ"r&^R4꿊|lɨy
nAS
nz%M0̑h隝CrxmZzg`#SN
zѐj^ƾRщ⢠|HǚgL-е8b9J]:~}?.h)ڏTxe	EPpGM߯h穭ibƎcz<mM5ϡ8n(.[n3zLS2.e"WoO凘63hm3>Z{4WN?B;7Gw6"tlNu$FqkygƏP֙4Qw#n1޳ϲ>I0>&:.opp!lْk伺AO`z2f6SQiݫB9U!?lyUhۍ,o9r-
wa}I1qNʕ\ڏ;7z{U7|7
jK\(4.jKSES4H]gQ^<}4Z
ج~-UmIR:AKqښi
+K'j>7pꂘIwxx?Bbt뇘>ƼOw=.֔qvVZ~R'6|TEnٰS*R朲ee-ܷqDn6V{!e/n ե*1K~ [IJOaW_ri)݅!p"u**FqWd)o|zݣ(B(FQqX0(E1s	8ט%ƤtPtQICYRD9WJ5\

ur	STI:
'1vUJ{|0vvWo%ƴ&4_-xd7^2!#+Q`\
-CA^rܝn@.q8{~sOœM}٬.@ʈ
%<{^\>lKBVeDkվtF6gxE]y ?Џg_g(xJt:l{߶q(^};jm`-[J~փBW	3^(]za}Bҥ/t1	][_ݥ
K	.m?]\@߹ۥK
K}ҥK>cIUiq
D
$
@
]L.P.PGegkk`X;4PtN
Lu]88bq
Ը@fsr.
s@JfH:U}(x/c"i>䲦?Wݖ}&`5Zffc.;e8-Hvl½،G7A~<+l{Hyqmj:.QgcZ*;AtcbQazxe6&#f!n,|\j#a$4#e܁^~Gq<v?k|=&y*qg,U
5~-s|
7xÍ(nHW3ueI?28m5Z=~VTPש۟!>m0i}@}vu:IPK   dO\ݰ  "  ,   org/mozilla/javascript/ast/PropertyGet.classVRF؀$!!`d4҄&	(^FH%(}Gi;>T!`) gW?[фPa
4Nv~J%#5Urt\1]rlmyB鑥(bΖimQhqA`|)o	) 5F/R0Y@"鼊r,Ef<v9`NeϜ`>M?+9cR46mG>5`4rJ;6۽aKYiNgDKЊ,FܠEJ[M` <|zw4eI?ը׉2`\b\ɰb';V@a5< w붱ei꼙I|1о0e.?1Vŗx3
Y)SBTEK
3I1
Q#-Y9i<:r%Ұī
hT.@!SZ57mspThb{&y,1%Z"3κQZ2*?`۴\&NIڗe Is8%j-OO`,<
L-p?<soޡ[Z`M&wM q~{ʪ׷@goe7|fCCƘC4;zz@QA6>7zlt];F;a(8MT4XBӓ5tC;+zG'$kb] #diO$5ж+Z4jJ=#th"\Ch!\w}L4JGElJl鄥]W%L˾"I5 n$pu&	)(DKJLcIT&_隺J:$}d
f*L)Mmˢ	>zN+ѫ
deV]kEֲq[j3U{a&90׬	>׸2###uˣ:/C;'GL	^<M_\ꁉ?1Rý٬bGo\PSs 6Īxq轏Yr<GK~SDf?~Q+peQ*w5t"%tu2`ƫd]]dvH`W"E
PK   dO\A#=    0   org/mozilla/javascript/ast/TemplateLiteral.classW[W$<20`NhظP8\Ivă41BR5#vimS4%mxC@Jtk7xu=
.3}ξ|{{O  ![zŹbɋ%N4l'yv&Sa+g9#
h®
Ԧfn+ѠhBB.Bpq1FV!\)УJI-d+T]!Dt؁
a3k.9Vh'ɒce7ְK[cm{,͚i稷8WDC-_kEk£ŢnD>
x }
w+3>/*te;ɇ#GLC\ 6oؓeǭYHė+nًD7,{PC8@s3RؼQ4Ҍt0MwV#eEJ|ƺ`Yhm~.8&4mHgMȂ?8Uh+E7C8#
MmE8lv.uL˭<nQB;qhȶwM?˘OSK}r,V{*|mZ	a)Z9 8o1,KSf
O*5pde3&SwA^YoX0%\Aϵdt`
fNc:<8cA/B},I@a'?/fg K3Z{DpW4\,SxFXU%YmGg%ɋ
{Ta)ɡ)k.g8";`
l.4mVΜ,-Κi,|E<aș8efKoT
fN3-E61]Q;@"/ȣ'SMKӔc&gsn?V[~4k;S!+<WW0b5*ÐT9T+ݤuh?	Ŏ_k<a:;~Skdc7l6k׆ObQ7ZR"Ui8kK/s{P2B[@Z^wO~fF"|*'^wJQK|6źWmc=βgLVorͶ{f'ͱ]+hn/!^oٳ+7'b,?=:>1>3+o\DUXET=~OL,˭X ħ88tqCg3v^@e Ώr'x.>ᅾ'm/eFIBhհWCM)o[}D
A{ pCDx
]n?A'Co
O{%OWtc,c|-^s*Reg^F!Sc	_3n	XK`[~:Imo.fF0 +y	<u~"䩉?Nf&/ep>J4(IxGI\xl_'9>˧iO7Ż]UR˟Nzu\pR-LU:
Հ@y6gڦV{H-j*TQP|}v"Is瘻&bxzmsb,	
!B:
.#+:K9Ж}ەĳ:{
B a\b_=.^p]wz70	%b|f	_`
S!w t[)u7~ӝy`<g	Ry:ANqo!+W~ȃxx p~RwPK   dO\a8    5   org/mozilla/javascript/ast/SpreadObjectProperty.classTNQ]zJhJE`/IE6mv43$'H<~qT9^k.?] a_A?]UOFGکm!U͑jaZE RҰL_2c35UY#%AQ	*9mH/}j<X7LCn
'sT1aXǺB7Q01r.g˳. r4`SaǍݳ*44ˆTplݔ^-Grl;C
S7-`Uoa ǝvleyRmFd(iN;Tv=,+PqO (մTH2ʳBU mìf#X (xG=Z͉eSOywm\Q9LOLWr$āmClX۪TX*kf|.fa+W=RYAUk撩kH$*zChOm+H|Fkx|eC)B {>fԄ,3-Nt03Ͷ0 }Xu@0%80C"&A/mrlXU$qrڥQ8R.]`O?A,1.#ԩ#T)ayTL;V&%0K a .x<m$%buU
PK   dO\uC^  Z  +   org/mozilla/javascript/ast/SwitchCase.classWs%[~DMȲiXIحl6f-mudI쮜)>iy!:ZLOaIʔ~gw-+2v^{;9?{Z!m
%k1Rz,Բ9,;)vRGmg7̢+C!P+5 
q1{trKM/ABH
㙡y.xqѫa7nQ˖af/J[5c@6t(:
h{޿Cﶣ;
m*YHeMIG1Cاay1ݒ[416ҝ9d#DJ!BhIg[Sq -]zq1²sKpHp|~v=59W}Um۰3S)z
	KvnvԲsi k8
Ed[?Bq9mi(.:K5rޑ"K{N0{`ֱⱊYVX'4<YVvE?kdy=aQ3-:hI6^.EoY17蕂3	qabK,a4[X9#lQsACM2łY4&J++nwM0934GKL;Dcsn?|_,cEC%xmab_t;AE!ެ")L*$%u;<.xкil
tQOgu$[WeP9%Ux^\RV
;5Sš	4֌4ApG}W<,֜P$-¼n%v7f;%xy2Y7;ߜ;zwnǽtg&n\{7	Ab3h^W<F&M;MZFYRh#iM,m8ݼy2eJ]S83ŢaMd3h]`/_߅PQy狔SjkPݛ/ى r}Ynz
~Ulme\@G0 Շ\coLv=囝hv&!$SkwQەݫ_Cr=jp+.Z֯cuWbx
=7NT'rjuRj)	
7,pC{asn-#KI֘ne¯}#zP \^Ca:y	]
e&1Rw|o&躼NM$xkd	# vgokB
;U}Tc* >Ck8(߱Ӈ,d)2-8PA\`9γg؉[O_X-1-^~'n
q \<Xӌd;Q#{T~]A:;%#n
ĒO
x+#83p|dd_pC/X|n~*
!"+_3YJ gX+_fS,Z$Α8x{Y!
pu4"^!T\Ẇ??^}%_wq&9#_/vN\S- yQYȈPP3!s:_|I6lclIs!?Ui>/w, 'Q>?PK   dO\    -   org/mozilla/javascript/ast/ArrayLiteral.classWs=+YZ!
%$Dn &6 繖X^Ni4!m&mCҙ;3Ijfo0mϷ^ɒ{v>{!Uti `w6\1e={AŚYudJP=`Z3 JTl_ةʬaC	n(ػZM7t94a\ daH*1EV|FA(s
6Bl޴aw>w3ѱ>UаSгMˆ^]5܃{yTj
MFrp{WEJC-
=n\r\ONɉ
pUZ%nd'/Eg8N	>/(ҨM{q<atmTA	C
65$q8s(,p )V@%!6za
Gpmz#☂{(9d\;WVT4Yb8 aUv.E=QxȤS3c1A[3#r<-e
_T2lV/:u֌s^<_gϚ#i
gpVz>|<	[[iQc
a	>kx/HLk(ժaq%pH	1|^T+Tk.<RV
,jMiX5*
u\Tg4.P֜S˸aGF\VŮDIoo*_@'=Ƭ{R.3Қ\d3ywHñ
evRc$'K
Kk8ndye禍)!N+E\k9oRczUfOj'ebWt^jΚy'0ojpJ~Z|"W2)'ownuW"Ihbz^v)zc˹֞֕ݥRzH55iVl͵Fec$:fJ466'}]V} ȏok={;9n~'#tDfJf[Xwc^{u ]|9w/Eч:S!ّ[XYOcܧ}IݙHvz<;v2g퓣ȹA/e;]+Qw&$}V>\sn~ÿñd喀y4y
,s
~Dh<oTw\91=J.9l	 (K>8gˁYy_wUL,Oǯh~h2_m<xvSPC8ݟyiv3
ȀT@3WH#WqԧpTg]
__r#
n`6+P\k>nmM>Gз|HbHd_hR#PqW!@EW!A"{+M#A؈_cL-l2\ib
Ef בd+:}g"D^W xV%bJu
^(OL 5ɱL<~z iȰT2cf 9>\#=fG /Im3+-vԣ-C#~[Nڒ<1(wVY,|4-e?H;Ŋڊ=d+~i.wXe~loS8~Z'~e$6f5om7]O7"׿ѹ?PK   dO\g:    +   org/mozilla/javascript/ast/Assignment.class_OAϴj Gj1l3Kʘni ~(㽳ے@윽=w ö
6LX8{
^G0iHz"TۯO4ÔY9.̶_VsJa0.)O\~X36
LgacQ`k7Uh #u	]L*n Q^Bw2
cT(^PDMT3P&A's#Q|gśso&a$^b?	<Zf'&QRi\,ӳV
<[6VþvtNyM(F[%3Gip&aԴa6%ƺ%-9M)NS1̪EgYjodr*X#c-B4nkPI:ظ#8DKG[/BlүbK_PK   dO\L39    +   org/mozilla/javascript/ast/ElementGet.classmSW7B(PH*
aFD+U65
EҺIְٍNF_;E;S´&pv9p^B8
pR쾶lGFY?cT̝M˱EpjzQtGMft/"}'|
tXႆAV_UL`GHNo`cD.
tWMJ0ʽ;%
Y?F*F*QJ|eyL)
)Lժ_=mT22k}׃Jk9
KkI}rLǕu5|tlٵ{DçպFa9ozg>"f=FPg9]4n!V5,JP80N9tUsujXƗ8R1lU^9Ǩ﮻^"K=CvˊU_6D=x'k7gԐiU-xuNf@L&7T~jey\z6M[0MóxU%<4N#7\qm:NN$jDQ謪OԞ<PE]Rom#sNoVJpq-V覈RzU閔s\qxiܢC	:F^ImIDGэ16Hju4e|jXOwXB(bd=Nև(LZPy~ƔaFDE?JYC?9KqG'MF#^}Ot\<kH357\_DF%i
& a\RBFfį.)TΠ4=R'6ɬzi[6O6h	|JI-Ph:׊rHuQ:'QxU G+JxkMhZ"q
Zhf
KOP4bRt@.y&  mAJAz[ASxH\j>,񽦶	xW'>O.[['XX5ܮp
fS\Cj5~l 	=%X1J?Hq *3.0&	75W~Mi)Չe*PK   dO\()3    '   org/mozilla/javascript/ast/DoLoop.classTmSU~.	I4ЦH R`n+ld3N?HuƏ~?q<Ra}{܃GBQt#"pvv5;ӲPsK̙uӛeE\A/eǿikz](t7LPae`Ճ,yb̆KlH
tgE_ڨ1zv]:\pu[7
q_V`u
e	gJ[Z}7¨z0(*OB\	\DW
䉀-1뻋NSvUAo뺤DN# T[0ًgk!faV kxźe֍%V2ً%+y}T
+qG
湪ክc,D`	zZ#7c2
qeK31<88䡂O#+{()c
C$F٤jC>]O9-&uĴPgPKJZpE]լޞ
\?Z|aݐeRK'Jq_iRݺ܊U״F]
\85Z1uM
yQF{DZ?UcQi@1ZD;dQ| >PtSRMe~Jdb3TSD0AQIi"8_b6Kj[#?Gq-ݭ<< !WsGɩMO6ep-Ȅ,"K
_#-)iJ{*| -(y'Z \HKHDv|EApN0i5D;wxiSM#KI}摐lrk%I*i
(A2fB*
HzVwMFjWP8u LJ+xRAR9ɦnN_5 yInKe% .b{PK   dO\ D     %   org/mozilla/javascript/ast/Loop.classT]OQ=vm@A[- Z ѤICPL_|qi7tbM(uX*i:s{Μ_ XǦ QtvcjmtW6]p:@dnޖ@Pp(4q!t-2ʸe	iPZs`B4c
7ʁ(0WnvUѐE.: /0@l-2ˌYijzGiʱױcQEٵڞb:u*Ԓmk1ZIל٪]*lW`f;OBtlYT[jّ\( Hj7i<jU՞_=%nziY<ad!0BOIA%[-ȧs#p(W
D6M@`l1$3{{0,L)ӊr,aȞs0	$qə'<>RiAF6w'΂$tӏ*z^Њ;*QY&7d !>V*Fnwݦ3py-/4g#;OX-ϬЧ;҃)kWw%KuRY<MFW7/)"'~<PHⲐB,B+y(#aR=#m"kx'xR
HPK   dO\j:  {  ,   org/mozilla/javascript/ast/XmlDotQuery.classSkOP~n6.MUXUP2%D PXm΀?g?h"[?e|Y̖sy C A	!aDT-iY.^=vM|qjմ-ȪiCPv!.	17 3;lyp/n2\:Ȉswz/G%9^H2<U$1$9V֭﹦Uڨ0`XGdb!VόU4,"W8fB-LRVaVſ
W14T2qBri%Sz۵d$2rǓ0D={߮FwV4(93K^2y	Ao
iʑGe$
^>]b;5JFfM`٠is<Sh8)U=b6tf;&w&(M@L|i}XtzJuFϸ S8>\3X5&хa~*reXt\4t`S*gh"}V[JL ^55@')4IyZL4-^_ӎ籆/	i ~El[VOZ99D99̷iY5\s0g3jQ8$f~ײWQܧ1H.|,I<MYQ
d*\XX,m`Sd%PK   dO\j9  	  .   org/mozilla/javascript/ast/StringLiteral.classUkwD'~;%u0mH[Y.1-B$&:8FI(9piJ?Qf%᪱hݻy{hfчD

dvʡeۼq𬖨p_T}6MXb!)rL',r)(
Ġ.<[q_<oQ>VUɨJ
i1FeBeE#n)pdMWlEUvEASۮ0}Q})*xW.SwmK>UݠzۖD
C{bmS_j3US7܄ʐԜ^@C9[
,փ#CD1}znF$6^1|G
Ís ְ|K<PVK;=]v	v{|bߢCCU˥m:=S4B͍=gӞn7M)EcT{.q[Qui>ރRa
Oܠ۩K fpn3{i>C\cdfGt).@-[YdZr]M64fcilSaI|T[k^,NDOxs{s1;Mg\ݪv|V
Oznv'j㘞na.C|Wڡ3ANЯO`GӐY'@6OvFϜv
#{	ucM	Q=%p0HFZ&X%wԱNq22N0vjЁGr@;|%	N[:=?bR
_ h|	 /t,`	:Dm?ri%b7_V>iyʲCusd+tTݽOzEU
ǘ|]L2Ŭ
Iv
Ib(AvHcҫ^z×(TVB*
։Xb'Oj(bTs;}>]h2KI`3yLDɺ
|ݰa`_PK   dO\6n  ?  4   org/mozilla/javascript/ast/GeneratorExpression.classWW~.;,?`hRMD!XH;,Y+鏴ј~_D8$S>ȷ
9ie]z0ss\pjQ']
/u'gE7;nz"W(uͼ%SʉkZS/eMǍ"Pb"h԰
M~78f!/Pk
EG9A[4*5*5tW5VQ>Щb];71YjO4awhH%={hHdS4#Dӣ	C%ؗbw0gEЇ~FqvwdY	oٖ_Hb! 0C{puVoAp%bxOFSUضqe趜3
0$Po
t$e[C14N	"Yԝ1ㆫkFzΒ2.%s,.Fóx9i8%G90DhLHˢaBͼiؾ0f~tɴ;It,hx^,y(%3цd2~ŝs3$>CqۻD=8U$%
0jr!b
+k(lA)--=pu$зoK4[e\n+dTIvFjæ7Jf
{Rhg9ݚmS>ưhR>d6	tYap/R
y <Xsg
X`>#SZSr'%>h#ɔt	W]Ջs2#.H"X]7Ҟ)`Q2:;K99w7OaKWQtsf:7 u~j=`>
;PjxDj 7	Wީqy|ZD#'
4C4Us&/S-v~]< ][_'i߁[͋%̻̺0\Eok:.jA3Ӷ3cf^e/V~ÙB=xOv`C#K[ke6.DЋn/v #rTÒV؀7HTeLLC8g6L2ǹGAz"J&.9 ٬IBwТЎT᫴ ]B 2*8.p7Rwr
a168j?Mg0A
OxSQ?jRmK?=3ŧwʧ#N\$W<Jc$<a N(I}_$y)I`}_>
M2M_(CjRQB9^x͟V\AեV|Eu>F Q/@*U|XH[%<}
 *@@>d{%ʧ:N^,/9X
-~SK˘/$_mc~Xc0'rE5vg\X+-cnPfdPb,8i7Uudb"`?Bshr)6	zݤ]R%|UdiHVy]f/+5gn1ࠚpC7E=h҇ݤ|'	(=cۛKᬿ}ֈpx#;*PK   dO\q+/v  
  /   org/mozilla/javascript/ast/KeywordLiteral.classUSW.6ACDEB$UPʏJBAVd
n3oCg:SC0ՙ޿wwA={ws6/ DQP/fnjvI]Uܬaǝ
@n@sVetD#o1chDBs7Yva\w5[5GsgoٯI53ֲf*8ݬl0jfW?k%Wj(	YQQ̫.r\tC6شkf?ChZwF͉R8I\"s)FAhCHJz&TTʙ:cHURK%,{U][zD>C7T>+Wr\ԝ0γNa\Y60.	D@7B]phCm\,\
8ӮjUhb-x1a4uB}xbghճM8۱Wy8=Y^YuNbʫƬjw?,6WLiM&@j)@ΈejVFe<}
uQY8F =%R_o c=iy	]
Sh<
a,WD`pVK~8CД3WUC/v)9hWR"l'>Zᶜc1
K
kok|o15#>zG5,>nYR}]+Tm\XK@1QX45{PGsX߈OZve8wI
']^ބF
&x6bט^]GAzKtrvt=L#a+@		+`PɖMDwcPKn0% j<ػM@6~䴗 T4T4	5M+]ol(]d|j
=xv
dg
5&}khN6|e&/?К~J.1F.2.RKUzUylfHqG
hMz3V }@}ГJ:UEoRxOCА,ah6L:Ko $ȫ4uk:ϵ5%yK$z$cLe}5I[E$Lof3*E_d60-$F|-\=a
8J/loaQT'F
WuzD|.Kӯ4?-;A冃tX
vU]0>L+Yo*֤ޓs/$M2)wIyaţ$`GPK   dO\uT    (   org/mozilla/javascript/ast/AstRoot.classVSg~^XHx50XTz.
!^ޗ[m
CqTg:7:,!ʕ{;;`~ .n(n&#ڤ$RV lvQ]7#._]Be4{1=^
TX#m/GSYӴ=V+/T'Ss|\[)vi*0a@LZz4[A/6`J -!#ZRV؄5,=YfRWe9lUMų([,"hNe4(5v	mǴpkhTXA9jK!
*KEβN_>iIn<'PRz:'b1[Lz@B=I]'
ZWΪ,n3eX'fA3\,\琊Ðux9AWqRխ%sŁh9
N8;VP}cΟo9N^_Q'ˍR4[`%a+ićMN$T+ZƟo.r✊c,3lN$#LK((*^Z"ǙFbźN4*4uP!hLx*1dk?f{s(p7u,'Z˚s-br:]	d
tŤyՇanR.P^R~Yac8YI\j:eN	r\c݈CzGq݌h>-iogmȵd&Lg[foxb.LsK9o*Fߒn$y"JVC<I!8li-|Y]%(%2?䐻Mi؃,',vP^}Vlis׉fZy&&Zr};FFXzVƘOz4$wS1MSOY,EJx\O&ϲE^p0TypBx#\|)nAm[
fQ
/oJɴ<۶}^[!jI,cl!XEZ1&ޡKW.I[sb}|L:k\{;F~gk}xʦ,
EYT	t4bMe=uQ?m;pw3$3hH[|hܚIGr2>w%P`Cq|<9_YIY_?G{<0}3FCͳ"iD
NP3Y	d)HsA۳Kզ4i&9ܸa},h?p4@~[>4.24֢0CcST>(/Ԧl.dr+
[(;B
ݛuypޥDC~ltD>ntCo4R{4EPQCͳl1Ag2_	to%1_M|(6d)WHrJ
Ϟv'sN-U`lvɖ+y)&Q<^bQF&w6cg&L@=`6SX׳Zy~"-#n؝'xZiW׋PDz3R6PK   dO\dv  
  .   org/mozilla/javascript/ast/BigIntLiteral.classUkSF=k@h#e7mڒ -!I
}	[Br53/?v1S>kg])12	cIDUУ1iǭLU\tCi|!͕&	v;$R
T}bŬm^2C >V*īdseaalQZHC3xY;-	۵wM(1`R5L1tPax]XU+]	0ːy&~C&PuzQ3\T1O9UCyKMJ޾Q*>]Jn/Б!?Ri<Qڟ}16/% ,xa )p6qsE*>aViqÍކ1	'!!I
>SQQ_0␔M+z(v7?Z4߫Llg1p*U]S^7EoEC!Qp=o8qJNyMcV;MBU!T+z#!am:)%#C.@볯oӿ80xݩzqT"̎OC-:LbfOkfGttM+;-pIujlq</pݐ3bU-JmpW-qyx
h.%UAabW
|g2M
;M
gN%}rhݤdgªiM:?
у!q9;^sz
Ժ$#mXq,"?&Q-}1aQ>C>%amؾ ViAM||#bɴ)Y :H3mL4#~~M=~1ja;%O^kZ/vQ8`*zڦIcҧ<~4[_#׭rth2%	;2DѝnEBw<^
ń;bib:Bb$$$X<&ZP{о,'
!3!iLd/eOvi?R	"
LG?@A"vz8r%\	|o	&deO"{rHp#2PK   dO\Wr  x  2   org/mozilla/javascript/ast/FunctionNode$Form.classTmOP~.{6EAPD
:|؀dlƎ%JkMO$(׊Sq]'sso xEm*-iYhm5xR=ӱ+ή1[rVA!"JY0,!r(g	kK C.uQF\w
HbA?+oUU1bL°K-6FR2U,n*՝}C(vW$LʘUW@˩삥깦*p?-:fɜi*X|fA(F A[iX2t!ye6*֎ִ<RS_d5&'29~Ė9/4b<z{&AT5u\J
u:Q9c̹
]%t\(ġޘ%Orm8mO`7mp]P~_.0ccb~IXd'EFN1,
OAOȽ$?)-}Q.=Kw<,,C &qL)} .DeeEKSgFv!PvbP=eV|
ݧ~"1f͠0$a
	#&0O:BL`FaEڪNHGHcd*FwPK   dO\_jz    2   org/mozilla/javascript/ast/ParseProblem$Type.classSkOA=mv]Jt &R$I*k2%]2%O$DFgΤjcl7ݓ{s{O_㉉t(n#|>w!j;]&ؔ/[oDI)t1V%C܉H(	ԕ
._Vם)[AD^䩾UnZL>\3oc 	AAUr)60ڢW|EmJ,J@ٸaE/%5FʢQ8bccjat8
J38z^ ֛!84rX~KOouvI!B{.i'RUyWxܔj*botaDJؔ5S%s*ҭ(~F9L`z5U}>fFiP]007NRdcxw%T?Gd,{g`	͟%T^+&pLYp0I8㽢rb3995|(V]hLځ!ŜvՒn7l8QNì\,
Vr+l3EouC0p/,xzPg
Y<`b4PK   dO\G:d  
  1   org/mozilla/javascript/ast/UpdateExpression.classW[WWIE0*WB7jEBbAhAC2a&R~?v
Vjg$+be>{ 1T! "j]횷ou]vץ^;ogtexB	a@8,P"z, бr^9%$g3Өb#umyLS b.S]#3sݬbj7j'%R۬w;[YoOٮbuu^2.Kwa%HNw4vXG^-˭@[b-^OD	 I:pwո. ygN{7rAATtR5	42#oZA7A1X)Գy.wzZqx6kszm5ofizT{I<ǰ=1	.e	\>4(q_+ǤO8Kfr%Ԝ)搻
Α{{3SrS1a91Cʐ!x	/ShD:+(@aqMȧA۾!0^1{IS6&* WU+0 "2ܷJ8fPy梞fY>d6%PUP~Ȱ33͘$iӚ99?°7kPvvBd2'8\rBJrS)
zܻ=KWYucreC#XddKXL&64-]9U4Ӎd)U@ӊeHc%/,i
'^lKm-7{vƭ$MYyHOb}5>3|6_R7V(G
R4Mݥ`-z+_jyO31)ҝ>QoJWNU4\k uOW.I.A$ծѵZ
7a tgh`|Jvy	J:&MU"l^Y8 HtƢaJlnYBl;`ZL	xeӪJ=J%ԕF
HयX  8
GGlph FMnc%rTod<^Ķd"Zlw2~6&qWziuT覿~;c觶`><\ʿG5aVEPPE8_3I{t˫gt/gWzt´Z.6<ѩd1
2; 1KJjxKx^Z8-FWKohPq!z;/Vq'.b=J88D0vܬ@<+R{`ױ](a*B| $/jO-tcY2Y2]y0%~''HM-ڡELRNa97
wtoI
<O;u~UaT}bL,x.i6)LZxs1LcG\2_Z]'En@b6}!kh}$-GPK   dO\p  	  .   org/mozilla/javascript/ast/NewExpression.classVRG=WH%
`nn\[0B8'4eW]Oyu*(Tx?=ߐr%YEeggNw3=-ﯿ?,Ë+7s#c$]ʛjN*-y[5iEUuվDs|`mYF+"
d~EE"{d9ax_:4YD.! SM=&C, 榢^qu@ۏ6)iqҲFtb;)Fr6U}cjnH}$3wmN9L	
D钔bكgnԔqX{BH3[178Žvf~ĘOd|*z7gKFs>_ȸ;-/oyVdF씐讌qP=-r|F}a@TrF,*99	ed0ܨmNT۠٥fM(<b7ԄIcKXf'OsS 9Hx*ckmۤS:tڵZ[qXYo;]dM eQpO땮<7.ґih3γun.+Y#h9T56ۛ>PyRT GԆHtmGIPj)NG]=<ch]Rt	yho24Y=5O/*zZeM!Ϊu
 !/@	~K3#Bh5NvFc v{hل
C>4#LnI+r*]WXaB9*]_bMD8l{<u&vmu݊F3x _zUu|1pV9(es{,1|X="?OM~	|ڝaA1*5c7_.o_=B".cD0xSgb ӭc	1&H%9tDp-0DigQWմǈ30jb="q1c<ޑPVHa&d`\B mQtL4cGoedWGx°83F[!(fvD+b ?!<bXǋjI}*9bϽ"7\y?PK   dO\  
  %   org/mozilla/javascript/ast/Name.classViwU~n6K-B[vYҤPYdhDEtH3!3-I_H99~sMn{g+{}]>N#x-ZѦ٭W
SMZ5W+_0=pGqKxw,1u'-'40,R
PSooԸ8\<[Aa;&Th$NFagq˶UWXBt*_AFOk
zU_r*(
lR$ҿILO؂
i38 l7E/]4=Ϫ3tSXe.
z@v0LJ66-h]حb'rB)ؒ}2g<=hBWIx?Av&\۬TOa!-^<oľ:Zt@?X)s*:$$$HCr@/*~)Y۟M7qY8M;ca8j"OUH_/6NcX+W
{(wS傁d:@7edzUoEL\Rض\.ibO9\Y&ܣ楪%Y{(l'lf}br5q3}tf&N!ݸuQσEd%2KYSYn=Kp`aI-2VMN5:;am8D/OCf؀.1fJ\){~ݬ
[;%BLem([8Od>4
m,	3^-C;9]k2~f8ʻ&fZ}IQt_KvW
WeIe^CrOL.5u\|0k{Tny]~|/EuhMj2*\jEuRQ#s˚cm~77i@?ĒF]h'Kr=k!vV
10`iRHp-\3sX5ϒeCޭreĔ2!Я9+gkWCr}W6SweravE]}&@y?Y56߉ڴ`Cq[RTwYvi '/BC;"?;tK7ULGB6cm\"hV[m-X.x^lk&7C|==
	5d+xޛ M74dMPkڽ4\3%=
u\*1vP2G 2}$y!3
=JR$QF3dCzQg-+;OVC&
հ=9H>wBOTLՈaY,w7?yBfpR/Hc^3XpE|||sx
43uݷԾX/͐Xu*pva$k3X·	;]5Iɇ|gC1K_Ů PK   dO\.  ,  *   org/mozilla/javascript/ast/WhileLoop.classTSU.IHK)!`Shi	M
)Jl&ف-f3/<[_LFQgsvIa{/	5K`Piך+'ʑҪYZ)-;W4ͦ_*]	"$0S6Tca!IADb;$~iSemcdL6cø@ U 3%L
i5[3
*Zm%jҡL銱{P}<xHJ9'!Y-R,հ.΢S{Q`+`۶4coP<|rC1A*3&#!E*lF]`1ױk>@+S2ŉ*-yh	D
,S킡kn6T,Y65A+|G;\aլ?e*!e[!_q/$Dj$ZOHQA0$Hz,4۴;xv?>fmL_)j
i"tبVYd͚WKgZйyJkӤ>];%Q׻WLjgM{ߪ
L"i۶R;T$q$p戩^16Ѻ D $iN˴Z!QO 1|Ci=G)0>>qc*F	F{8!@೎qmpȉzMRHq_p&]Do˳qПbc9@@~:SQ:Q9E3mLəmv(sT+SG;"NX
"w1NXW?:ͬhc
y'[rkk{;&<&f얳6Vp#fO8k.9IFgph'w	\G7(ԛ&X-,5AOCj4wabGX7Q긓c|*$uoһ?Ƈ8#TX5;ZR4/a-E!U"ub5 PK   dO\K>    /   org/mozilla/javascript/ast/ThrowStatement.classUksD=k;#rcip:%MeىڐGiCMpia[8j#)'̿0G1]NV{9ܻo M!((-iUNv[t^MatŴLo!Q/I;
+ƢP$qxcqbXCCeƷ(VuÈZr
&q!p]Ӷ/lG}[AB
n0n)xsNw]ásn3dϪuU=|i4<e^^O$"doVnN*`D?6VS%jg.wzcXM͍oJQ<޻>v
gۧNÈa!
Q`1LԍGl0_4ng;振n.	'b(]GCMi\gbfZɡmkvCou2L(bxȳpǦp۠acPpMNǰ{fz2D*4:CK'f/	"zGGiN-r$̂ -*AkYU3zi`Z+>59r6K񷣆mKwڢ,Nhsƚ9ʞX9Dݧ<H-P=9J?!MJXڥUH\{RvV"Hʷa'? .ѿZTPV@"N(RZ_)ـ"d~)O%w0-H{S:`JKjO(bԕY#5}#3 Y
3%ۯ]U~yx7tJKA}~m ʳr@pGJs1ؠItO-#^IKB8:^э*})Kϔ?q$nW]|hU	h2@_,WBPK   dO\)ɮ     1   org/mozilla/javascript/ast/IdeErrorReporter.classu1
1EX()-%nd
x(1Dbxy<ow t"r!jRɝ:c::nJ,;uB7RU\nv:w
BOG .+S`.{8%i:\bZIfO)5m7iBh"h<	PK   dO\"+  O	  /   org/mozilla/javascript/ast/BreakStatement.classUkSU~d	X(`	hVjR*ijncزfvf~3:~79{
!+={ry \A=Db1ֳ
G˶Sg4ZVo
Dҫ4`Jξl#tX
ϻM_6dhI	L-Gq'l=17f+i\,͆1t1zaO;oy~ѩj-踈En]_ςzY[$0jzti/شTm6{#:Va$/'Pۼ8^:&]YXvMqdaa˭fM[~d1T7Ւ͚zՅb՜+CQ,pr:nwv*5P⬸)F1>ᎎO>-jF%7<:s+<fwYsL(GAjՔŃFE%bLTMlDs#"thg1j<|Zl;
<b!|UV&JQ]^2+BS-zʫL=!\T:5~cΝ,eFҕ4o75k|sӳ@_7i^[7CÿC3$zyeg=au?ຯԀ.cǄIH`^Nv) qwmHKHaY,t:J40(f`
g]\IcC|KAFhi	*zO]xDxP~O7o/o`^ȴy_ձDc≲BiṃX^3f۸ƻג#}U5ɟ6wV|^m|"4zҳD`@qPO9f&S(iYj`#F+5p$d&cɎ~Q:[3S+֓LW{U[iJPK   dO\޾݇    *   org/mozilla/javascript/ast/ForInLoop.classVsUt
R<4(*hJ4>@Ael4vUPQGt(?ȌMGorϹ٦!lK'3{{9;?7CB<xay^,jLl'UNf,?t{XM7# B
Z\GaKU!4aX%f#m
قK+t
asʘJIfVWͱ M`+	tsxF ۚچI3?fcF^KHOhU-K3In-]k%ji69߉]VQ;h4{B5-'\ը
9jTZ*؇$-J	"
$ O<'гɤmّ$Rp/R*9-]K]DxQ3:)GpG-R^`oɋO:^SAL,f>Ʊ	U+M_')(4Ƥ` N>@Fyh7.cTpfU0-L+=Eu%C8s(8xM}^`sԅ !!-0@y؂h

 39'|Z-ne2ñ:un(63zI[j攚-$1rjqZ5u~w^nQyM[6躧Dh!ӵMTn 4R:kFVڀd֓2l>\motHlntZEQke7YYkV<ܨZvNIujTc%_A^+
r;+
ɵ?	"h/CěGk~D'M(9 J/cE$UPA+[q'mF,E̷nĤ	<%;8*C?`K<һLϧyJDvt앞6j8xwvL	 _wD~9K:f|5fl
qw#>X"
Vk EGDp52eZڈ+u\"A%hck@{ρFZh],!
($gHl
_ ;rW ܁oNv
 C0$
Z=$L:W 4G@Z,ux
 WmT_܉sx~4TB/Iyz|B\=&oPV5~~ộKKswN}_g0vU'!w{qEw<2*x37Ena+nHC?zK5ט7ŷ4#xE:(7d*|bO woSCढb`0M3C|w	^W}׏'h2\
&9!E?moɄPK   dO\ú  
  +   org/mozilla/javascript/ast/XmlLiteral.classURV]6ͅ48@rqk*lav%i}Kg<3N}7dڦrɋtkoǿ.\?<*h]m5-Km;Ͳ76R`0;
G
kZ֟Lx[UEnmLװueFu.9n\A	H-YTt#sI3KL{x'#YMᤈ˸Ъ;aSnb`ҋڦsl 0ຊ}mn2tuS"Gd3ܒ2@ðQb<	;iW`U1۔ZQ*`yz
f܋wTjwz>g!TG	>1ipnSdGy>`9 θY,<VްAgxbS
RTsl4/w$U|r(hJN1"xy.%𱂌E|rzxY1E4չ]./q峪@CRM2f,<C&qjχb̢lfQ3UVVM,>wä0t-{eԂ̑C$c7FuQt2pι!&=i͸znkN/穣oF`8k}'5Mҝ3hO5bh:h
OГh5It"s
vPVv~?@bgt턏t
\/B"jm;	L\BֿؗioiPm櫯&X%KXtvz& D⺠ZIiyaL _~A<i53.A~;3
W1pfn0̍!=1γl|
&qFqMlyN0ydV~A+\S,Ex=Bu$=*<E
億Dn&9In{%fV:jj/e ˤoQOsW(		GcDexPHכJ`[?@Q"ܞ6x{Rw<0\ŌYYFi1O=:b:D-YѺQucelQ?PK   dO\*    0   org/mozilla/javascript/ast/ReturnStatement.classT_SW!!Y(B	V5(65PL:Yn	͆&~>
ч~Nܽd"ҼsN~
S @LC#soV4~7Ξg}ƃ6-U۱{b@R`rFB:M9	gHlY~s}ӷ-/ۤ(j<`Vjp+Lċ5I!a_u,? k.1,jf4LcF 3Cp=GH`V`!Ftm߳]մ
y
 :4Ӕ@w")j(An4'~U$*
nq_pM$}wz{V"Kp+L`x4nNU
+pFj
cG}<zΆȚ@LL5Fh]Nrn;fpvEuwl5L
vGrVv	mY@&tXs$waxj/}]Gz$0thBxdͯ0 $&%iOo}i֔~'aO:Ec7ruNZd@1=&+cdN/J\x$P[cO#{*k.#d-!Xyv(;FxÅLW"qRHx(4x5R!ȿ	eFdP+r<,2=
/BpFJb*::HWO$JizkkQxv>÷=,Zɖyaߟ0Y. =AwraMhiFAߛT[ԥX, Vqsk5eAMē`|r?8o.Se=nEz)my!K.[h*ԞxzR<mPK   dO\I  E  7   org/mozilla/javascript/ast/AbstractObjectProperty.classAK0_numnS`<({ZftH3A?J+_~~ 8þ,"JR=S*HyTCP3V;6
.3؝`elc(vrl1ESxoI[%/ĻY<ZLX0!>O\	M[??I.H%ۿN>B^l>ӮO,`o$
fa2PM(%Mk/e*jIrV@h::Af;\~`N3E@z7k}PK   dO\VA  Q  &   org/mozilla/javascript/ast/Scope.classX	xT$dB $kLf
eB$̄$n]ЪUZ[jMݡ%HU
ֶn.jkkk"?y!~wYs#>`^djpã0%ol]DBC[Cxè%S;;<ѰD!l>ٳ6֦GGR:XitK<
Kp,h1vW֔U*OD2Ua<&(dwz԰eONf
Lf]L0ӈ#8'-?Jv0haSk8l*O(ʮN#
'sɥxKQl\Cf+fƖZR#hKi&l@1
ǉܘЍթH*u~O`C6xȈ
KRܨ竲 X

]m
%mɯcOSvԜꌸLCCHVM=OPS}1YjBu^k8M𕦆;.QFhPoX#AYaAFůfْ';QpBL++fibjb4eQf2 Z4"Gq!Ibߦ!vZۦw5e:آ!">ku,!5}D2*Kk-J?keIo":[&`Q#ܮ/֤w.
>bq1zq &qދOp?sƥ	}}](ҩ{q´7c;>
Ɉ&wu,jX-&"*
_^wyq
OS
Fœ/jLutiI>Iz!(kndM2qJҕtV
75nk l5~K(49A'L(q+yvǠ2kK읈n
]O&mӓaX%-qu=ڦ7J'~܍т2YϏfj{}:?|
czհ[LB
8}IS YI{!PCx=ԦDͺ4X0e>
16ѡGbE:ԏV"hNXgIɧ4Dx~߇g]Δ/~ETi]E\:{xvZ,i'^%(ܓD"-ѐ⫰b`]|,#`*,-ڤJ.w7qƚBuxX~ۓFk8!(&O#F%yfsКT
x0nr,;wDBMJEl+ap9rS p#9
~&lGz3"'3?# 7ݏ	=oV35!nk"gRyhǺ6N<Fd|;K[TF JI6ǊNh0C+INI؃S>:"rp@+(t>
cMGȔ6t	!.oŔ4d+c>L'ÕԭcdG WQ=lUq3~jeVH(63 z xρ«A[9;5r솇_sf	Z`7T  k7|B)k
~]VZEde.)?EV`BrPh%pxF[~KNx1';0a7
{0ve\ 2ASTk#4*q$c4.p{)y7Ł`ab7]܃biFs(f.xwر،صQns\{'s@zcd!-J>ei GU;@t|!0*%ve&؇2쇤"U.PzLm|:V@3Áfvɀ*G\,k]1O^}PWއ`E/v}Zt2\cՇU
~kKFZ{|6Iwʱ<PFNb%)8Ǐb3{iX9ypPZӲKJrLNm
r{){<f`_7[5VV-o-gVʏM=$ndE&?>>2/`lcĻX
.D.b0/&X7-#0Q˒,SD˯<.G=[c=g)"Eř6#Ȥĥ>|Fy=uyL])SW{pmw}B4=r^ݼqrwSJ*x+F|݌'Q57c?m#-8F|QجvkAgA~VAʜLz̿fLeV|?ȭ`~El;Y
뺏v8.MރYIo37..1
varrCY*CeҌ#6I5d6\Rn,sBKWu#OFmVܙElbzs]_?mCv;֛*%h1B~swW
{	d8VQ>©m^prp%s_eBVVZ!}8}EPy8hcVdk 	ܽJOm2a4wEn)rZ֭2}`>촚
i2Pp0fzY9&,/Jl|r3TǸ ofx 9^Uh[<ߞ$V޲{hu	ۋG֗H^tdqk.Xti=!^^8;o2}tȧW/D	D_f}Y*V5\u&]?%]P1EassG	
[lQc#aU(%W*d/-|<HV]k@~.UD p:vQc絛  ̰96)!&ػl#9qV#JDg;VE؎0r8omh¥U<YPK   dO\]"  l
  .   org/mozilla/javascript/ast/NumberLiteral.classUkWU7!HGԪTyT@mAאa`LXյZ(;V2sss4"&Х ݬJڱTF-i[ZtMp/I۶u+42	(
qCx
fhOoVWoj@A|*{YM,wx5r'~H:-+Q25^rU!V:n	vPn}Yco+xS]0*_,qO^3uaT1)L_qts=9ʸ}KxpU2UGo$͖iv4ށ^uI8?P>VXr*4S0~H;VM\F)K#vEDYےepmU5wpi帚:Bث[b-ue|"p:wp&wWc[v)nYa_59lŮj4Tz%ϒ6DɁԪ0cy}Ő(bӟxn5
zU7/~ڦqc:ܯ@W
ٻK=D:K:nSkl]sG-
'PgKы
;~<jU"}.c@|]jVl1,X]XLs~(eқ&O'C$5#[ׇ)ƏN7
SNwt~Ӿ{F=P{NUWzQЅ,S86uӇZd5HYK~/g'$jEy٭ϐ
z<nWi>AߌtϷV'OKo\S^
#h4ҼG'c^&0ngQE*jxTz+W<d*1_X#6uwkIS4fKm%Oj>SIbo(6[O^͓Q'Nq_8As8OeEV9vE@B[WN0s!;Wk&$5_e)f?!}~EmWi/|)<N`_J$|]3ygNMv;y$+p;_LȜoݓSCbPyPK   dO\C8      2   org/mozilla/javascript/ast/DestructuringForm.classe1
0_kuPzČ^@
NCBIIIR<،{	`E1a+9k;a3<K `UTv)b*PLaK+'.τ&EYҒF!h"Axb66y} PK   dO\`Y  
  (   org/mozilla/javascript/ast/ForLoop.classUKOW.l$%ЄGp}&)&4֍qh I`lO`qgڠ&},.[R&RٵRRU=z0s枹ww gD)h@I^
#+ںdm5Ǎ,(8n;!P,; 3ofhCQЂVӖ]sudqddG%N*8Y
8kqVNO	~\A/Z4m|^;bT<K˙=&X	_ k'hrtwVu8>rbsbMYQj,ia5̬U؎96̥kF>ADPy(E\ XVrc^U^kŢnF7zQI=ka.Y8x5;0&P`lN(xڗt7i
S
3'pCM	td4YA{
:2V?Pp	)?#H3NCe?f|Ȭ{)y^m%S0{8IG
%Q#`8k6ۡAn	Dkbv!#SrBRTZ!Z&OΔmseUhn
ʖ:B;眖{e[X+VTќ^tiҜ@ρSKeWgX8tEIIYŴXū(C'WV[ڰ|
6&/*&ځDCVGW3EY
q%	ű[M@6@^JeGoY'$mG;O8F}<wR%|HVru\"eDA}FݕuC%뻔@<eݮFKQUKxyG`'#t36ߕ|{EdKY*mhɪҖkH*S$m6I3JvBU"mv- -I;'%([!r}љ[BW:ߐ[]_mP_hǗ`C:&?t	|#BgҼOFJIF*FK0Vv$·+Ab,9hj;izhDBuԹ<0Y>
:~	eAU*U٪vxIH#hx#7ZZx/x6U:|!65cgCfq sjCT~ъ(eiSd*:rPK   dO\@N    0   org/mozilla/javascript/ast/UnaryExpression.classVSg}!ADMhpITrSuI²w7T~{ҷ>ؙ6X9K@Lrs9ӿ wa4! YF-GMZ1jUYZI)l;f^h3$Hβ[
4'@0u%.!"c:ĸi(ȃڶfV-
Lu]+1&)]1
%5礽{eta@[AuL[s\{2i+F)2lU'cC2s:m$,ˏ8r#/p21Vrp\	$(Y/dc@ sY\d͞Ut-d$jdu]-(eP^Q
gAN-1TS2N@FNq4H;Qfv5N;fa:sd3go[\$sc;!k\ޔbQ)zU*aF:*M!<d<YV[FJ*h"{=˘.
,qELfL0i8grS,B9m7ѰXumޖ	؆=nVaZt9Wy^`$'зMMjawni:Q^YTeQ'IǘSY/lvbvD.z$7n%ѸQ
ՌE@<X&ʻ%<|BP8زkS
t=M-{dU`ǜF5A6t3؎Uh>$iX!wx\|'Tg<@>S3VIχ͔Q%G ~?*6ts\J[j~KEÊOk.g
Cu~8#8*MOG7]5OR&!~MTZ[\~K)޳idtҦuؕFI3zix8zg_YHhlzgq2::{jUgwKkr.n!zp~Ɂ
vѷ\3w.j
Vp0U"Dk?1@Y/ N4:C'g]PC^*>xC0HL:a.H%b$دu%а$%Q) E <|):>qzg 
tzi?+TŪtxӏ^mS~E}TdH%+x}d}za蛩b2Y*9ekϐ_Ǖ~f`sdl	&WO$G?#qO9
f}WzrݸMyEzGBq&=Ud2V)n"WF~{
Hu~2|:v~Dc#ޔ͊voG	R
SU x6A˚KCO}D?.PK   dO\\Q    *   org/mozilla/javascript/ast/ErrorNode.classooPƟKPL6tln]-%QC{L|ױU%mGJ/ ~(㹷6os~yν?~~`y eV̰zCc~4ޙSx$0L?0=}{lgc}oQBUqE-{M	mJԺ>
CFRwXVّJ=N7s<4;9e@u⾊U4q-}۷ףfS~bzS>^z:Zމymtg{LOz	uh%3VֺrDNU3ؽ";9&9C{`6exacۼk `ҫ)Kgm30=u	3RX
(A0Tl%UN6\ԊHϓZ#?5)	h%:^)ʩ0?jhE|C2T?`Y	ǙرvT|9%dߤf¨KK(b2D!i
r	RWRxsUrM1SQPK   dO\%  S  0   org/mozilla/javascript/ast/SwitchStatement.classW[w,i<`m7,cD[BvƁ֭-.!0H{,3#!i^/5mz/}(if>5k?++#Y>X̞gw if n"B՝-To9岕nݰBZN23[i0?Źo]b嚂&D?lS[΅]&vB_"ibRNUmbz͚k{
Nm rՒ='L|+tXgzГ\٪\n4Ox{Dagg-Wgcf37Bhy5 Trn94dJ\/* rsX+ۖ+>k0ۮW]&'|:j	0н1gyysI441^EwܷݜQ
{ȧ	f@5a)3TaB̩)lo`w]kQiIF`⋘b4.q匉8G-XdۓlNeQvO֝rv861q_fY]!jSfFRZz:_-TnN
1;-Q\N8/lpVm-Xsp\71vɾ
/TqاB
m.	8*mF7h
_3
wW[w
<gউEbg&2+a"W,TKγul}4i5[V,O$qh'>'IהSk{A0j*XF
C ԝ!9Z9
SMt󷉺Q[AibYU')/'W$6inex˄0G[oH{g.jz.NDz<-ԵH?'5JRU(w;m}¦y-t0JN;-4:(Vع)~o{rm><xS}EkK/,{PnK辫.zc/`:飇/Rj^*ֿZ/R[i=ۻ=+](?LndMZ[v0_П"I-<܄6}[C-ᡡ2	xcH8sy	V]awb}2Mh,w|Yք&ݡWg y`~*}ZLYa>0}(=܌*'e$xSŧ\}8Ǩ[?i}?"ILI)
_#,"
J23AtfHd8wy.Cn]\~XMEDP31ڠvqt
"l!&^h?))7Iku7!JFUkhR]khSțx+uNڮ0ة_--#at2x
WZRl2<~!?|`_8^ۖL ,'wCz?,û˸*Jw>}Ö^QltAI;O6GΌM-8\`ҋz$CwFB~?ɉ6h{;*܆G7KuX7Zw>:
lIu{'5u7қx;[F!ůc}a#F9DJ=W]U9a)PK   dO\9 r  .  -   org/mozilla/javascript/ast/FunctionNode.classZ	|Tչ7䒄@!	Kd	 2J&!8$C203ĺԥUD*ą@%+>T֥}^Wb{s33	y='K ΥeACp&Ec-ڢBp`@)jOLwDh6$int@[PTOHӪb֥x7a͉.xtdC'8"<BFF9ё<~473Ru8il`Srja<_0zxs0u4%:bHK@#wP؏<"#qWKQ(tHG1F񋣱6{E
eK?"Xㄨ<98SxL hvekRkwG(ZCtS0" :#]ie,(A4q6!ƃ	@ҁ;,$	qGstȘ'd1Hy@ʰ"dB`
`tr'*8 l݌HPA .qʪ]nyU]UM}6jP2%rRM` &tԣ]((4'7+ш.\cV^!Z
qQ۩儒Re&1W؀n n#'E֡RVt%D F#:`w6oeG'l&0euG]C݊jYKU
?[tl6";X]ÔZv㢅kt\~xX0`X;bA	M7FBC2d~9YǷ4O#-VQɭ:n@v BwJ0KXWe:="[>k
.vDك3K~#j^1K*?SFxu쒳1Ab-m[:v˕P`RGd?IJ9zL^9cWԯ,.]:7շFc@YD`AK*e^GC>~@CKMl3*)j{G-	[y߃div[3x]=uۄ@-a9HK%pi8P %/(+ó's90S&WJqA
?cqޚH_tO})?2

uU[֛:R[5
K/M9mx0OYyaG(y<:>khlC6w[`SiV#-l/~?S=dJiߋ}aMV`Í+e#6܉n|}0{mgd	2W~NntLTpY/,Tnwa<×:N+#-Tv"A[T_sm#bOLŇZ3.cP. Qn/R$O<QNN3IǍ	
)P6.StI6C:
bu%
hFtyY#,IcSͲtK}
Hl.je4k=?ePnÚBN	tN%W,&4I0Is]:$\[e\)m4ΒX.ϖC3i<˜^k
bo\➢WEp8IH[;p>aG|]}CUCuMu-7ZC1D P;0f%y)G\^|r9nu=WeD	UNg7g02l7{[ALۻkF6X,R+ kXfܥHC|ؓͤqc kn:H?e$t9lՔǵ	w
w#3nH}N9
B-|8SW&֋)H`}X<\#vK"\7<21Lfܖ́KB`y6dx2ⰾITn=i`$.9;.7;"ʽ]:WK/)Qq|J	3iʹȭ^j9/E}o~JI
!Vgm1$u۬0[fZ53ͤۅ	cv5Q3LG,[2Iç 1q+mm0y}T|ӹ drvJ-q4NW	6h-&!ApS&罖{vi zFowbXJxtđFiskU,
k OAҕwV0csp"+CVbIރZ5jU7cC&˩cb-a ba]8CHg|Lnij}a"~??齚'_EXKԻd-RhW>9ɳ|5WOgnυ;,"w܄4vT?K^<{o+>g|Vo P ש6/b@[Hh
Ȁ4ɫ=תgu$;eR8zP!25 \
"'B\:(c
Qj	t	4Z%x@j[qW5RZkI8Ce'E_QVQ^*P>6LD$II0MBju	C|fɥ"3;aiQ"?}y%(YX8.FPkX']d2!t2b_3:HB73ҋ1	`BEIa -$$3Ind >tG^[l!w[K,%&mY]
 7H޲lc7Z̲p1r/߇xpnr-rWc^6aI"qG7w!3$n-H]ІVx%(cqx!HB6gGj#~}6^E)]GPvjʏ`q+QMFEDq>ǼeYlNnn盉Ւw8a{
N(S_kbԆ2B1W3XpehհRL5"1'\@	$}
Fr#yM6V6ѥ\AHo԰?b'aA,в M ¯7&C,ۍ+qU'>G7.+bZ4wv,qW&"9SLg\?5),QT=+z\G3[}E.ٟ&"G94W)7E'J$J2ͩz
n4F(Ӗ+Έaad${L\99[	+JA2<xhh-٦tR*Wr&kq;0)MetF&*<as̚9tF|Si˖tSmwؓߙN~ÜmK~-ϲ%ٞC+Җ#gKJb|ߣxH3M|.-Ig1זGZj{|4][5ܒ#YaV{Kgdì3mLMfHsOȎYҺn*uIbMۥMnկ&VCmտHkmOG_$b雦$XC_vʸ5aF_7XpR2c>ό@7,7XH Q[l٬IzaGRĵ}eŹ\=,ë0kc؊!5=Itȡ["Rbxm{%UtB7S̑+zȘCxu/F{Uū7##ba{&;1:c|EJbp7qo9
<CyW(ӡf(<^v%s[	[xǣ1[;7e;3SzrsmK~2=1m~
`m㑉f>w8[#cpNQ+Ϻ;),Ysdyo\^3[![.*TDÉ&dzN|yEO=BS>sESvfщ
#S(ip{2ǖ#AK]V.<n}Yf\MC{g;q&+9yz܋D/^fӏ^18U\F?F:8
@ozI즷yH)wqǳ^59ޣy>_S5!'#TJY{esذ/\+C=ī{URsgg3hd(wE4*o8x_j9.3t)~m
+ȖGY7uSqS1xѻ,Ű;0Syh }]gJ7̢<\iZ+R'eȢi'#]dN\1=;
vJ7M<Ǽ#lN,Ȥ
78nfgrZ4quj8Fٝz=JΌYn*YPщboQTtc~:iz'
su>VTNysi]_D^Qdg9s檪m|?44޴<|h0L/+Tb6
ӵB,ЊL+ehJ[ܭثMD<g5x];h
}KC0[Pi\l7LLǝ]pb!y'KKp^rS^WufjUw$c]IBǓ1pcdL|g[bڜ͆YCBvU~(zJ^PK   dO\J@  t	  8   org/mozilla/javascript/ast/ParenthesizedExpression.classU]WWݗ !h|LԴJmT$m@Pگ!MFƙ_v
>Q܆TC9s>_{RC,~$=Q|潰*>v-UU\
ԚW[kbfSGmxD
CIqB1%-_) =W (34%gd;se9e`R{Be`׊t"g%+'a+pLRu2
3k`)0K>3$VHjmqN*Ut,Q|Tb4K.3Aq;♵-nRwToEf`Wv̐$QܚڪIV,W7r{M,&qm揙fӦ]|.[=ocY(QKz,cbrmٖ7-<WM˷];i<pyX$)<J9ˆU|.hbuRM:m=t`SGP點[U^=5"r"? !%11.)Zx.ct`buGtVAN']Na8U[HJ
J`'I|#=>.(."/ hAb.&琹a^bWzC:8F	fћCXv5
eq)ÜHw0~CSQb>ŉu\V)3ɩ}dNR?>ڰӺȚ?*ψǴ}xaS\1VygAv,4gɾx%&<x/~%DvVlۼsg,s!#3l3ʴb1~YGavDw~{/Ǹw?m.){(Ie/w0ݦTD'5fN
+BDovAǰE})~~S@Ãv/Q#@o94CzS|F9xGK|oqPK   dO\8g  G  ;   org/mozilla/javascript/ast/AstNode$PositionComparator.classSKo1yl64T@B=TBIf
\\Hg~bYJAͮ|]<(AECY	DCvO3A9]<\ǰ?U2Q$gX0fJK#U:\ĚK(3<9rt#nTA/1Z:.-s#ώ.^H@a@5"TS:sb[x0,>Ɛn[Zֺ2t(rWى3mf]`*>fةvuS_
sGT:?C/'!7jY"wo%B_ͣx&c$aL*M}uPDk-YEWpp
6иA4#hCnјwMl7w||:҅'M%as ĳ-l)j27sNb&g. #;@	VҸovP94Όhʡ/PK   dO\R    /   org/mozilla/javascript/ast/ObjectProperty.classW{e}Iڄ0-m
F0$W,m	Z2Mtt&;3{ryuݣ.)>M>&~/ r1Z\t2-K/^֗t58,v	GZtZ,YQխaZ_4lěe曎GH)</]s?ϓ)*]ӮGZVh
Ϛ3itc[=zѧ0.euj_QHz?}f(dE	b'`zP
y3[vQHiUݻE	$p);xTK<O8Dݲ!41ݫa΂Ak{۹@+0(bKU7ȣ4_֪O:)I,'5<%*v̰uXwqT~ĩ@@)p:ix!cچuHóQǪ/ڢ阆^LW5`44LJNn{}7y88+%
#&0]M8nWIVX[#uӪ	Kg3%Brc;赚aa)>yV#MOJV]7Y
{ABwI.R3ݲ!uRP!w\^j6BhV.c!l+h[NGC
?PؿAJ$3&KqB,Ί+L~C&3>+Z8Ao*kZHsʺ5|	dQ7whb솵)_//H_P]71ەiS3
ʝFf+U/M|HjAkoazjh;ZaPwyV7mQ6ZTX'M{pP$zFǗ	^=Rٴ9JV}4uoiH⟲ؽ\pZp\ލCsXq|;i'(ӂBu^ŨnYS/YJm/m
jRس1+"dn|LO1YCcmPcKv%,-c7_7[2+:i`|!AdqEƛ<ꥅ#(8T<rG0#{kzncfM~d[k!{]TztRbYeֺ3YmB5jITYc 0˯\Ax,W$厑$'.Iv'VpHX
Vp Xށc833=]8\y4ތX(XG,$yQzo:<%xFDN{b0Ɇ;T#\ۑgI5!DFUt/7H;>.eKX7[%-anf;X֯ZºV*-au`]m<'aE=|4_gѾФ=ӤxM >i*ru4mKkU
XҡW;/2K+8s5t^o7B!]BAВjCg8^?u%rG7V4t'>E tIpc
8$hl
6!fCgzFKrIE¾$&៭x݊_#7bijwkzN;EɩD1V8n5N)W!ﵣO,wx~kW\yzBGk7
!]PK   dO\jÝi  x  ,   org/mozilla/javascript/ast/XmlFragment.classNPEEJR0YА&-`-&7~C31n067s
@AVŖqκ<{o?4tq׎e[G`ݸ' q(xp<
(((A8l?-x
X%Ѱ:cvX	d
pV3\'N8') ]SQHosuA_p,éwUUw< ?W:w)*(*
¬
W3өR5N"=\ף&EfUSE.Q2[+7dL`!mDة-}mW4US.ZzBhPK   dO\ziR    -   org/mozilla/javascript/ast/TryStatement.classW[w#ɒvRc&@]PbGIBiXKG#hn4iڤm>%YOd7d33ɲ1β}sg	E B*:V0X254eV+ZFh5;sf*Q61mĶ*bP՘5[/e[AQLqR3lRV"R3%,UHݨAܡYY%t$s9{ѧӶJqI';*'lj5]d^2V^L]֋AWg4`r+\8
ԢfV5nmQGd!)-L]̞>tCఊki)fɮO -[]Jj	Gb8Si|FAbEVЯڎ2΋ňQ`eU߭E0&d$H9N8,[)HopV
v48iYZC؉)gT90(ưOpZEAzv$fӶeN
s^IgZ%=WwK%-G權/PV2
'o\oEėqƀ"۹iljKbN2+ӕU;A\J4KX`QҎbe'	SE	qˮi: :U݀Waq|-*$YJqE煛$ȋfKg(^UFA4VLȔP/*%C3u̬Meͮ[mGFct:gB<O9ݚ(PRYry!{ MzL0@ZEԩu0XvNkU/:|vX묂@`˃u--<<'$\Ơ4DrsYhi9>mc^ڋ̶6`}h:{rhz/QwvLBFO<𥥃9<(&:x;:_Mxr-~kwjJ*pTۈr,BLsx+k7^N糴=$6q tͣFr
=r]' #׿MܧqkOx{2E/RƉLSC'ZXY>{g<SeҷP:v>vqv*+Pxxy]Dr!)8-8'Zp&6"twW(?=^xRmq~
ҜwCww˛
Bjx%אQR!xG1csl?v430i'~&:$|qC8#*7!_b4PHM`+>:	f'+Lg2RIKBT5U$b%}I]`A("w6T]P
羠f<AEK]tzrv9h\}^܇w/7Kچ~w/cC6UuVҦт(#
;sIN::׃WT2[١y0w{H}D!
%GaOëb=ފl46Q]w=2f{	%eJ:|x
:XHkL-3b:-Eg7|:n1Z%YoE0u{=|t&8.P_sߨQ%6tL.b p8D9!'	{qM6Anw'&;S=}EϡÎ*a'E򖣱9E&\?PK   dO\шLa  
  /   org/mozilla/javascript/ast/ErrorCollector.classVmSU~nH!l)V bՆBRA^KXԶ_M;
h?O?ܛm2{<9ޛ;ECXGQgLn2;3D''ZU
1.eT
3suqhhiEt
t<CvK0M>^5?=?3뺶;c&]"#2pVkY^qlEG7lkQA8RC&S/qKir+zqA:`ncG0hkܵ0?g6.)~a-y6a1}Rmx4xڏʋEdԆ,;:ޕ5fiH2\O4]1̢pe!i3=P㒋ce Ҙq!f}ԑ}
:>G&ԁm-GJ!=:&pZJ"QS:n6*z۠Č1KcGXTdaoPls,.#Mi!}JsE
~W)'F~ťfDRMf"97,P)o
wGm.ps\ʰmЖLFw/D0'R,<gW܂Xe	$>T饸ŭ-O G)j
o&P2ZHݭXQA/+CnV׎8Zlp^v:d٠<ۘմ9x}/s>/<N0Zjru|Fe*nβ;crD4,>C~!y3B#F2b'$ZH:WVwЍ0u$U{,sz3rHQzAa:ň*?Y	{{$/IV"*AFz'~A ]Oѓa ]`)cYÑHp$U#I
ME||o߉3M~E|7Q +1C+|K7wd#AIGV G
/`p]GA0#}3|~n0<CBzdC3O$WU4O{cc"@DºD6cϹ `7mfЪѯaPõp(`ҝOWpVPK   dO\@@_    ,   org/mozilla/javascript/ast/IfStatement.classsUǿ$M$З%6DQ"ZZ(l6Mbv[-:*vgpTq7'&i{9s+?؁ܨ@U
XLgx\Oh3M)+Vxi%cc0P[@"g,ҧ%qSOe$"V(𲕊x+c:D@KI=

VB5j|&#C,haA@u0¯U:h24{.7)oP
jInM^
ǵX NLv,6/ۡq]ָ 7+B;$d-
)mR$bz
Dڀ6c]NlX],;mczڍhN!ʿJ鉘@(bL(ƙ@[#L粒tTwae=
CoL"лSٺi/'X.'g"q`˻KFR	%q(Tp-p)8NPsR)O3!A}v8-GIOm
NDĠ/]|!)&-Fcd\cI7"'Lr܌mo/	F6'7CZVY)$F,,PשwqwsÙC'sIf'.%wCZJ2zM0Y,ozSrQy57:q,R
sTl{Q
%hb4#MlW3pofXG'=i|Ү璽yR^)k3N$6sj-8Q;ٺS
iV5h
B+H%k	Ihe/MK,0u<5r&^ԑ&!kJӶkv*&PIe.&z6P#I=j}eVcȻ48&zT9'[Y\,K~)ڑzP3h)6NAY_gLDSvDYM-Cm?()ў)*F-lmPy*qYmfc<D*ok7%V,]z1zɒxr[9f|ܶ4hDniv\Ib$AjA&HgWPW,	r4"2 ~	b׏ҴzK-f?Kϒs/ۙFʚQQSYjs	[Os`pe/<=;hщ:0C+qS_e_k.;&GZj7d՘?|ɖKB"мvyҌ	7rʵrKP2WЇ5W00:e
z&x7n];#>L	_iUiO+.iuF"Hi	/1\"NU}Nubkgo1YXdҘ+l=g\)^8ٟ澦i|KFAaT)(S%gQ<ol˹٘o5Fq͑eZmR+PK   dO\Ǵ    +   org/mozilla/javascript/ast/XmlPropRef.classUrV]!ǘRl1bC/i\|Iqcn_b!i$OLLotЀqH^t6g{YB"2ZImZ|nm^ix"0rK7u@8^!.0ԡu	HH e,W[eVby̕\"L1%c
mPSۄVpDU]Ws:!00hIQJL>1,bQfzka]"oi%6uY`z~9yэHXBa]@jZlPc2
ؠ-ܻUEqFӶMua8+kp;&jScn%=8M-@hsޖqw{?KIb;1ʸZ@~uW,fw݅cI
b.PhLw) 0VMi74PmIWjUG d0 ¶ņ)<O'{<4pMіf{ϨYnC 1{tӪj3v7{:cu_c]: NE2ݦ5C(HE+=ɽ㨠ꧥL!JVf1vye:?O?T|w5:'A1rT;G9g~څv4H˻GC@P	
5G5?&U=~PsJwQ1Wl 0Mv<$]AȔB>&'αR-(]v<!k/ _opoLx
wqcpYXİ/m	I.2"v]\k\5O}Uq?N<hD߁;pi1^`89"y}7E1DeaY}b_"∸XB߁PK   dO\#=H  |  &   org/mozilla/javascript/ast/Label.classT]sT=(mb.qCrRC(u\HpHlk5dd9'x
3ęx~=NE^]sox! "	m[weީf+jL	s@55{ΑaǑU.dWa	Doۆ('tuDsr`oH1=ӑs*p2wȕU\AJ@ގ"\n7k͒yU[X j[&&%p
Vq7GXk.gc
1*4HuW:#^u`E`qGٲnn˰oF{HrMXFb3CxK)-0?q״-٬{*}DK?2v8XZ^恊V6y֞9
XZЃC}by4
|`S>X0;NèKȓ@6WS,mP$pbNU3=f;uݪa;4i^(B+JOI-yGoAv=~Ju

!֩	\~9&ű.l.!| $$bӍBϏmBh3_=2=/ LyD˞'T$n#f.EKNqq KB)	1`3X?N'`Q
p5id0Km3OG<=($?
SvDZJ|m7GN= %}|a:*}j"sbBjC.G.Ӎ"~R!S)	5DaGLA)C+ M̺M7BKC.P~3.9qDb
M`)]eWpwTw{x[AѠS_GvqI<ְH3Z#=ij|	κ%?uT5`Ǘ8x&kPK   dO\N%  6  .   org/mozilla/javascript/ast/ObjectLiteral.classViwU~nNH-֭*i U`JkiA83A
⮸㾋D/'x<w=ʇy}w{w*":h̤}*~elwAh
mʖ-Nvk	]@m},/Ct
hH.ab~-t@ěОI/WH/0RJ Q"4XKbfɜ4˞+"/MdU-{kt{{q.p+eDdծj\CUg;Ɏ9Fr<[X!)+ڄ<QֱeYW`x.떪Ԙ9FqxSqF~$7^?I
5cN$`.Ń7X-rMnKlX9cLq326] e4؁e1ƺٛҫ	,ܝ&cIQ
9ճ<yjG?223W.*Bͬ٣1*'_\XưaK\fnH1NVqY&r`a0a8=zIAGl2Ȧ̞|x#+5cBa3+K/Jز=|.!ÁQAKTPor-9уr>*KvHԏ^omB$浯2J
t.i`O#&fa{R천I]B9Y#rL=A	ܻ pE4}wQ/ylV'Lg4l8*@&,ZؼOM092F%mQ.6zw.V..l5[`E0?|/4tqK4sf'Kn$$G孆g{fE;&r>'F&}Z(q8Y!*Ab*w3c|-sMB8yϐCsOiDjE4R
/𿑰@\__Kx$VHHcex]
ٿ`+' uzR!vnd<Tߤ`j
ܽʝ4SA+r9o
aeNݸiNq4wh~_F -m17,8'*Y\+>i\w?dK3#/hc]7MrmޮE %Ǹ;їCH~;A(LuNO32*)a[CLMSaxwޅvcF Ys5wXb51)Rsq%G#_V +T>Jw~]=1+<}q	LtuOcH:1$pw:q̳HK$MD	1 h=\<RtM*τJ'(4&g)>&Cт
0+u\ǺT=s+,0GY	M.RO)J
>D-'jy1B͈Mv[4dTYBPAtu&IG."I#As$1yNXj--UⳀwêb6/7(^q}S3jvU;_(b}/PK   dO\\"  
  1   org/mozilla/javascript/ast/LabeledStatement.classW[Wg_.ÀrhC "BJ
C'*b_Z}KתԵԇek7x`ɜ~
!| |
(ؑ63雺aѫ꬚MzƊY+ڟb&PvDOV7>@fh4gF4չ=kw*P
:V	?Nj[h)84eGнlh~NkZJoV>k.CbX&[/3m14>.
[I-hQ	T٬f2i+3P''j	}۱#
V-ʸ	CSMT	fV6{+FG 
"#Pi7,c}Rybbt	UB![5B#ky:VЋ#F7)8c5vwt!qd+mv]*xCTrJbV*Y2}
0`TT] US>7p3~8-P_k I"xFYct<3ڊp.8RpHGduV>8R	j?Qh
鶭w\vgit	rbU"vקR3)PWɶ8vrjm㈞bI<NԌ1w>kZfhěIkh)rfw8fw@
:SӴys4Kpwjy\ L+qmT8JqUrP5ܸ:md})ۿf;e$nf-g5\"Bv\Oj'\`yI-cMxϝMVlV`#!,A]֦H_.
?fV幒6:ûQxyGǆ7y`;x^v+-HӢܑu~
N-4QvV֡뙆]Wwb˓ZF(MJ(^~6y]0
eô0<eyl!O		 w"MNBfi{7 ?S	w,#E~,{rF;.p<D~ǁX8{OIlܭD vA^;M.opNMiw\bt˶xk,cbrxQ~n2V́_MG8Ke?JX~(n˧Qw0/{b|;тŒ,IAIO1|{Ok1,cDc|;ŗk鶣k#Om	5(sԫ.RXnZ]*ҭū[)>sh@LݻkEV~=NNG}"Or
=B[X)Asd}<8sߝMy\<.-դ3(]Y#zsh%0۸e]~CNCrK|E޷=&=_U,~XҎ&=$we+EXiN/JX`M*MmVtJ7ݴ0ھտ?PK   dO\5T    '   org/mozilla/javascript/ast/XmlRef.classR]OA=n[n
~-()~ 5J i
}ZWn]||A}GNڔ2sΜsϹwVS "8CW;g6Og_5=Zfp-[IL @JE*>Uoc1gUh9amK\R3(F7ybF#(zKmaHv͎L;c7]-f>ffyO}3,-ҽ):8]y9Q22-L*{1?=h^㽋.zlK
 ha)2i}5{RswN|nYI)Ѡ&t)L'o:pOptwQtwk
9E
mbĞ9:mkFf\s$9T:yH,EʨtK=Br	F႖+9	"t<z p)EiܸBu^$%A? CCx'IJP*
1;q\A,AhFӕߘ?pLLdU?xm9(p	dR^% |=
[#
_6&Nn|]ڍ$R"Ea\M^H!a!#<-$3,d0WѤPK   dO\э      ,   org/mozilla/javascript/ast/NodeVisitor.class;o>sNv&Ft̜DĲ̂}԰̒"vF~Nb^RVjr	#kHA]A% 5KS2sR&"Y @Y@,v  PK   dO\sZc7  7  &   org/mozilla/javascript/ast/Block.classU]se~^/Li&1M	,ڴ1MRXBƯ.-.xS/λޚiqzs2{89yy_ Q
	^ff5S7t]SV5Ҳ2-`VTЬw|G@`l۬ !IĐ1)t\X_5(16JxnȆW0&lK	1.P*]M,U4ٲQ]ۣ j3(ܜ`R&+55gTT8E/#0I(P
bu<uf8+&șIcJ,XfS w{gr=B)	idG]J~i٭a	o"kx/{jqI GN֑(M(`[^l%dqVUk)@#\[rM:_5C]7u[9btN
/({G^&
4[=>N<[;@XLOIƺ}ІDa^RJI'K8o45~wkWk=.}$W-KԎٓTHAloh4?'!6]VI rmSi8U}H:S16hf }o=z~@o+dJC(~zzwaCp3
"Ѻ͞|"kԉ#L1'"E: 'nÎ9a	ȡDl>qSD7wї/lԋnTv͖.N,!X>o9DlSNژhc%\!	HOz앣ޘn9mci (b˃O{C^uB>ňkA:roJ|vE+gÐ)	XB8[@\t\F1#l@z,QsQTsW;q
V"<Q?K%'.H^%L<BE̱T#ոT	E"J]FDTUw;3ĆdL(B_0Lx
PK   dO\-i[  	  -   org/mozilla/javascript/ast/ParseProblem.classmSU7$%,mIKBH[(ZR#AA>Ty`v~}ul:3v~n Ł̽== K!
q	$.<rVʭ<B^V:2[)Ԑ2CarJʉ[t^rܺSߩU͵omۙ)nl9qA!8+Z%x7<\+iżhZU[RbQRgk+bIuk4CLaLTvz1i`DS!d0*/	Y_]Y5L)]8(Wvm'Iܒ鎁:=}06UkV]2xg
$쌄UdByYum,hX4d:{+$:NѱĀ3:5~m95<3,pXFAA¥L;&X15yKhKr^=Φ8RUٲCe{ZvOKCt[S`Օ5XGeKǛH5gKͶQ;
'ClxVk?/5o(l.{)cU%2,V,׵z:_:cȔbҎ<l/V8rI(s6mN6cd&xg?k8#8AIW!u>K¦|Ib$|$q_-78g?b$}u;#0S͒s"kG3GX'C`Q j1#AGL'w)oGh	r1F+]L QG2	6m@ZdO"AVH+ f+} 
AoX\Sop؞HOs5V^TJ<zH5C@^.XG.b2wk,u<!|1e~^<A_8ϹfavU_$APK   dO\sIk    :   org/mozilla/javascript/ast/GeneratorMethodDefinition.classTsU=/i6Ҙ - A-4T)nf3I[Ƒ? ~(sw3iwͽwy_
c|G
,dUQy\=SՑ>L+8

RQaZaiDnpy1ea)NMn9 <v~Zn+"JQn 5)X
sLKZ7KRY+㼅?1I0x%\&ENHi{RSէϝa=%r֡jaׄ>t~na^5y
	6Np"zMmmVdo"{p=gԜJ,ƺژHkR='bM|!ޓ"+Tacd0U5>t}u|zߣӡ+sq#%]SH-ϡZiЇgu0qoXo
ΓOfy$uU(<
Ph_$VYl}gZ8±0O"
f
?p?~s">w6G%8#3^iH~=yQ-ՉfTMq
"t@C+C;.Ҙ`_Y.,1̾otpbrYBE|D.g?b>!XJŖM[A*WؿcWerm%h%wh.ؕ>X}\y2+gbn!&T8蛤Jǲz%V7೸JF e~ UXcs\
	G?"RE~ƬumMPK   dO\
H  H'  +   org/mozilla/javascript/ast/ScriptNode.classZxujAE#!la!BjƬv՝Ҧ$8uR?pژ4X6IW&vj6ƮzΝJ|_ϚǙ{ 6(B( %әֱ13[oV"cۭe'@f3eE
{"j(&t~K~{z"0m=cTh0p2R(&"^u6]dHf:eqhi0%jQ'޵{`-=,	e2R,gVzJҰuFcIe5azFJOl7jKMP&7khZ"Nj)ֽNxɰ}t X
6b$}9*S#vLHήc繎b
$\T5lC' x#˲^:}$aˤy'R#pnGND22"{x.
}GXC^,y(<hݡgbEy@`/iևYtlj/ cGƭ
>2kFFOF17jxn(%	2oAu<Vp ;vGR]9
⠆r@N=){w#Gm	I68R>&/`@(Hk<g ?-
6&3~ )Crz(npGUmZIVo0^7c
oaZ=EApP^ZƆ0ɔ3kc{Ŭ3{RޅIhZ]*61djx7,ۍDrҝgGx/ɝ4\TxJ.}
Y7{NgU%>@~>aT#LA!
ƣ))pPlG5%ÇuڂR#xM1g'7Mr\zWR5>AN"=6n&vk5')*t22Twdrb7I
܇ڜF$m{vEb!?\12Єn3QW=Ů3OMOiL4a[Y
c̴vhzxqqZG9
BA)Y|6
m352wD@Ĉ,Tp&RIDlo)v͗3;~3W2@Fi(Tz	=WUW%ۣ&Uxr*]go8"tUtY+#|y4
L+בW6SQt{'0CT<;W:=АM-͜s-IY5+&LkN//X˨!
Ϝ'7PvPq9F3벻 w\bCewBIJhh)5?8Bϡji:TA^<Jp+m }tN5J]VbDoaւLKsQau4_
22IHg8ŝ0X>#7dJS.ޙQ$ZŹjΩ;8usʚYYqu}[jKUYlHS
AmrĬS4h'THiB.3]sRn`Z=s9z`[
p@P(Asdv2<ۮ.ʙ#ӗh
0jyT7WZRc6Ms[uRnFUe)vR-錢Nk@yO̗R}g}_ii#,cDELqsm@gaʣD'<Lm
;}܁`MTWq]T_A\ZCCAU4^D
tHNMMOO&r
h짫ғ~*D֓J$&jNP#K`YT#XA
u
Ut-FO!L۱I7{LɻQ~WQz.tw:O{\}_6Q~C-$"|ϗSX?rWN>^4U|i'h;-]D5(TJjԣ@_i?h"$
äIמ5/t
5
µҊk]3]02Y"ܢpw8?.W"#]#T;h4/QoبvҜ.H/^[) H@ v%@i@n ~ C@-|?ac {
1tb{4*^\~#)RJ;]e:~b!z`]z;i>2vFѵ(zK g?$|;'>}QV"Ob>l3U]6wS15&/3%oY=G J?QhF~];Z9DNBs!p]AuvYOSSPjϡ7gz3E͋ɜ,>IANoP~ăڃ2PyW7]4/ͤQ5=˒{{&ŒsaPx8QڏcmN9\CJٗsȾ@!y[9e287}2]傮¯O~3[*Ϣ[7xܰ/
Rq	O%B x$_\ _|zplpqlx菋UK%/9钀|"qD3D%Y+k]{?Ubk׉ox mtmBYE" ќhB4ûD_E,lcYOOZhT2e
oѼHYFI%u%1j.H{;;|+X""JeRQH+.{
K4Dp<BMen|+<v]8=\ 1姗R.Eo/mb;tt  dTE|\oI/<J++UïWY)
GEeOܙo̔Y&53iXH=MEbUAӾNA('D-=ϢN,Uʎ/Ξ=~
|֠R%W!)e(8Q5JO*]qwF$Fhtzshu@.8^IJJnoZ)C/fhQySԻl}WѷbC8A0};UME(e_j
*ǯ/O#К*O^fsn~5LSIhK+(NouT'OsB=UأO"\4R7='/=}ZRόdolJTF\'ʹZ$Ɛhmb.q
qBlc$;-6I6;6Ĥ{V.&i<PpϒeXCL>s\RYoU 
¯bD{N8R!bS
$GT"2R4рR{^V"jrBՒ8"ʞg8NBMvb+6ʈN,#%	m\[Qӯa<~;<ȫ\-P?^>;Hp[>X}OkKVXZtݫ:MsLtu|
լuQJD_˳9'/xC7^ڛ"nun=aXk]$k:J e
W
r
h	q-m[yB\/:v,PK   dO\+0  s  '   org/mozilla/javascript/ast/Symbol.classV]SW~VȇP U0
Ek%ن%twa}A酝)3]/:İazs>go pN-h&]e_IQHn9!03@B2:!3V!U2t]IqW;gie'Njm횑W_2LB7dΊRRZ5ҌBzlۆe\@/C'>TsAGN"Id܄ҺYT
	ZE`J,̩eG30%犌b()Eu4r9;pl<3v{0I^1bç2VfdX!)c7r(T l;W$gUbx)C[7y)$LF~s{W&-l4ΏS(jnUԑUN˘I)ԪvFo'A|B3	Ŏꚡ΄0d,b!rF
:(XSukp-Zc<e8K*ܼ+{mΚ9EP,?{mΎFsR,(ԏŹ5GC*	zCг:$mƝנ]݊a V ryZ_{i̚+T{Oki=+.jMMnNwߜi:c)e1vTc_ѵ|䖹e]h!(ADBj>5^dXTri0\?bu͚fq>]flUz󊮯iϽ1՚Vm	eJ*bz)50M|ݮK7ZDtQB
Gy0mzsFk(qh9];6ASz]k|hHk6[EJWp.OQQ/^cɋkO_0VGJ~m*!#ۇEz!hyu>D;\ڊe?#q5"Xt IpL6&E~dSdf|irW}=YFjy4L1
TDFyM|C$H/-rHXu~V-GMEtU<&'MTt
T/#FUz	z|D%3+k|G$Hd|5!ȤG$țwlKe[0߮f2Q=	Ϻԃ|[/'OcUh3Y7	"G]B*MeoWuB<z
ySsWDH\\90B4DL|PK   dO\cd    (   org/mozilla/javascript/ast/Comment.classmSWuјh[6YmM[44mi
;dδ"yd*3 LLϽH_{ý_ _cGFa	#2,8n#t~3-K^5[~Nܪo8u!zôMÈZ,b+Ξa!cT`ÃfӰ}kb"O(Hbaٮ=4,b6ϝS0D}[$,qIFnwMR.*,DnvVE~c1=/{UeB}Ӫ.W.*G72qwbh0M}(uQir={K
 Gzeu%Im D_HXVpWZ=kiJ;rFh0Sff{us&hbsԈs:V%)(KCrLqHe4O?fX?{*Q1)(5܊ktjU]#scXFx2ӴR6,It>V;&uӃ括ǂCz)4g߭dn	ySg|lzm3CKAh*gHJ.עmn=Ϡߞ_,bEK\qw
Hi3o$^"-""z%y^ ,ݕuXW;NPķX=8Bb5FXqQ@rG?4*>AA@|KIZ;5XubFI>NL|q9 Ir)hB3TI	<Jvq-d/`\im|2!?{K6ӆFv;	~˗NyJX\d'HgjS,`Z4s8]TD3HG"9{e&э0\
h6Y7cVOn81	'yBx\NPK   dO\;?  
  2   org/mozilla/javascript/ast/ContinueStatement.classU]SF=k60(6lp)#MKjHR(4	jef_пtI;<7u:w.V{9{_'# Bvt8bhJFf84jUq3F<+-rCpLDC4\etev-nkMhsb%B0ݬ1&О\Yd^
W5\qjk9_ /vLq栆8W3ݜk&R֌ܫ:LRtT5	D\Z$<!WB,cMhIKFfV5]HL_2)a3Ovͼؓtrɛ;'8a[zKrnis:IS*uMԵXm{ݭZvqn
f5hYrl+vARQ-r3y<ifg*l%yՈa,Skx2®ԫyK@6¤5|<G`kxS
d+[ɣMکRyvag_
&F պOh"˴ Еls^5nVzrN(mUbgf[19db+t>'W.p,:
3!O8UCk2Z*$dR }2"jTQ+vۘԇ%MYL
L__9hܤyZC1t_e16w|yz2ְz@ctxR鰄Ͼ%*!b
_/m'УrQ%qG&$Ϩ+Y@2&3ikfL5	Y lȒMD1鹷WM,''145Ӥ>F}Q	_Rt,dbgAIٷ$)wxLAZw)#7aO!4H#vU2SG6/Ll"Og5KVzJ]K!Ȱ`[M|U],F1BKnojZO4p[~wH,E~
6ЋB>XyKCW4&v0H%ǧ92&K֜ӂ/sEY0am!\>}2J%b5JQ~P%O[t@gDZ&>w[4HӒ,U_PK   dO\o  c  .   org/mozilla/javascript/ast/RegExpLiteral.classU]sF=kǖ?H`dFbNhqjfڧ:"֙ҧ3LykgQwW$ؖVw9ܻw7mrH aBG
i~еsvCab黎IҐaږk{YנcLvя#쀻Et9--Q/+CʨSDf9<.Pd}"Rr׵"pn5GuaaPQbR1nj$|QGI	n(5u\ߵ^O*
:KR\<sB=2|i&2"meXƴ]nk	yrph{hGjj,go`o~-89N*5ǩ*
Z'Jҵ=Lhgu" #YnE"kr/#K7~&bcHS)V+2Tj*9ۧSpZXiQ-=ҚeI$G}_"
[0:,LU
lhؔa ۧ#MoS.Fv~o!ny~Ĺ;)Qۤ%zjxpTV5l1\["kKZ=&ߗtIO(N'y ̜^y
!] I"&
GGp|O.R*!̹Lֺ@gֹk-1:6'
e穞쥈0ejV4N`@i\953܉ɏffK{3X*9?W#TG:Z8HGwǎ¡hngeHz`$C&+TD̹W$#LaWhr i19dP A]\ )!}d*%2nVʲO	<;^dt;;ȝE
_Lg6?-k
۷PK   dO\     3   org/mozilla/javascript/ast/TemplateCharacters.classTrV=7!8
_2 PL0543nlM,H:$}v)? }Nw%Ď޻{ٽ?
6^0T\t=ղmiyPWƦݾ)g9/ֺYVOG,4
s6%E<ŔdO/0
)h1SsVˆ/PHW[dT5,Y=6'1l;ʳPa'g_jX99Gm,U /vߚ=\p
rl9}Qުg]$/k
evoNOWWQTxe|5Y5\5+Sd6v-R:N`7jIf0ۣ]];I+=ϑqV
,˘>MХm:ԥ=Su~'?X a+P$nOrqG^9TTAPh^l[K<^u8u<9|nsx$0#D)i-g럊CyQm-N?N6	o&\qK$rk|,\,YXJVK*gtVM?p?oH(H
qhedJ'.10 W'rۡ8+GX<wJ*S |G>.|e0@ZK:W}w
rKhߤ[R31LND"+ǉܝHnLID?`٬>&f[	FŘQ1fgZ,XKu* 7#|]:Oe.IA&Қ#c1hcPVPK   dO\7vGU    *   org/mozilla/javascript/ast/AstRoot$1.classU[OAlT"(ZjKw
R-E)Qe(kfw ꓉?>nMvg|oN~	qTЁ:ҫ}qx_M_Ք*=Щm?}˫@:Iw[O"mVg"l-
64=WP5})%c7-1Ll.=}*x[vʣ8ΝJ޵DSْb`&v"GUnP/qgQL快RȖ(hػMA!dU.zܛ)Q3!ҵayg8_I[,-i mLj(ʩkY}[Iaf-\ŠeŅM$=eiq=[[¨*XH4!Լ%FG%
r
rdoQP75Āİ8d5&x>xsX{#}*vU67q1ּ!
J4^>嚼Hx3t1F<T3HI/<b	݉Jbદ\r]K"F1nQ1:-08wgS
ecن3ԃ핯XE;NV-fuWt$5A5paʪ4Behp ,Sm=0LkvgiՒ`-27Azw%#p`}$pݾZrF|X5z#oc[.>`/k2H4Oi=C4O4CwsBǐI"
lħP@p@rh%L(&*Up
SPK   dO\yD  1  *   org/mozilla/javascript/ast/XmlString.classTRA=HpG@4@Hx(DhZXhӐLnjw/3J,{v*)vg3=o ::4t#0k;Ll&c*3ܕs劰$CdŰБU$]!Й̩nzt"ΐhϺ#*+$Myʘ*ge_ z
GlY82=DQG<u`cø	q@y*}֜⪎)Uk{{jH0*P䬒0sğ1$ègm;CJnIAZӼԍt,b5\CCXYs|5W*tYyʞp=S("7wcy)
k{IMpcIZm Rf(B.iGN2DUdmD3\؁a{k-)'juۖtxuK}v!b,6Bæ
*;QưC/R/% *Mmڢ{*Z?fYn;,dMu_]
y0J'1M/DwtT,lzh,CFp'72BAc[Mu[c8ZGR?սc!=0(zøpQ-=)bu^oǈ|#5TY;A)RR֥SL04;`-Ԡ@ 
B.Av)F粉ײc9Ps+Z@M~a>w]NE<|u8^aPK   dO\]d  "  0   org/mozilla/javascript/ast/EmptyExpression.classn@9)i6IiS%A*T$KQo;7ҥmۈ
\@< uUJ0O /9dTd0plNum=aaڑ0"q8eHk <Cs8^ErPUl`)q>	 tCFTYiBA2PCVHuP7O0lS~OV2]"޸[94UpƖl{#.MX{X]}m=vr}ʥV':9uS>ҮCCҿ
ˎ@\3t֚]꯫hSаpivs)!OLj>)E13*/tO2Ҵ֑A%e<m<]*	"a4f\%A{1>$0yzBy,ltRY6Vp[R1`Xp	W+>NReb\1߰yAVbE{ɩ *8N%S߱ۿ&א+,p1kN PK   dO\           #   org/mozilla/javascript/annotations/ PK   dO\w	    6   org/mozilla/javascript/annotations/JSConstructor.classN@ϠPW.?1,w,\jPoȐC)	>2޺1i$s;_ z8PL.6FɹZ,NI$)mɇ<v6).HiT2tN8)_˸iLڐ@",pz֙*Ùc傁%^Ny9qt?
WG"1y^*>P(#?hѝ?
l85x?u۬iCtPK   dO\Z+    1   org/mozilla/javascript/annotations/JSGetter.classNAƿEA0ѐx	/ N/K]rGfPƹBb3'{(	tmsL.ej|iu)k~rCQaMA&GCUNO
TR$:=D͜ћL@mb8kZ<+ p0NSszVj+$ǃz6LdrϣbfL	VtAVAo
Ŗ@9&OՂ2
{XlrJdYیnsa#4n&_ {h PK   dO\QM/    9   org/mozilla/javascript/annotations/JSStaticFunction.classN0?:0C
PKQX\c"W]%Nh< ,DB''+T.]{>KD/<:/v6aK9Ȭ+9̍1OgJ uNQ-ͯd-Ch_3
Df<Pk@$^ճNԨ)e8Ns2++}\L'!Gg\LQᨼ%I<}BTq/tjBF[Ne
TI-lSCq@rPK   dO\Ds*    1   org/mozilla/javascript/annotations/JSSetter.classN0B20CB#R 5
GuĩTDb?NO P8Hwm3Ti腓)c{'(&!ix:yt)@mLFӳa.6hlTf ~%!h yIfӳNPQ!8NԏlN+<*g&`H16:\1M@$"IP>XZC {wPS/}mpVM@,+Bcm;xaPK   dO\ 
*    3   org/mozilla/javascript/annotations/JSFunction.classNAƿ A-	5 N\/K	>Cb3kz.$Qb!W2
tBZ;tlS0f6ȵ
B+Ǆ6BC-nJL:D.ؾzq8K5ԆbhY#S=7NG3 uꍻ3S`H)6:X3Mp\ne*Y|0TnoʧFmqVM@,+..{x
-W:PK   dO\!4    0   org/mozilla/javascript/Interpreter$DoFalse.classT]o0=ne-ٖehCUTCIn0#[T!$(MRiZF"\sm_?<2ȪP40ð;.7w{ځ3fד"ڕ`lK.CGjm;YU4``ls|(rC9.v]aVXPkXD1mS/$X`1ngQVqNy\`X+]=JoRBֱɖi<;
I]io,p ->pih6wyDɠ"9^Š}a~+SlaN*;҄ćĝ!c3TNʜNmR2-"h{6k=`T<?lqy5#"3?*'+1h]A|DhC7E?^T3bt,ћ}U %Ꙅ0W9Lm4
+dkZLPIƋ)_~Ӕ,z(鍘p=	H+Y-F6(P
4	٦RR'KDxpp?PK   dO\vI    M   org/mozilla/javascript/ArrayLikeAbstractOperations$StringLikeComparator.classSNAmY(ˏԪQ
-+Hb"Ԩ5
${?]'upKfg_k'5^ >W>(lf3ssv~]dч	cp<7Ʈt
MʬRR=ZM(鴂ySCW=؎|Z0`onґvj#0frǎuH4=N@,d(U,Lr
~U=hᚭ=Qhh	Jd\<ID㋏ɲ.uO*	0\f#|S^$3׿^?St9xiUͨՐzM.fug3mP;NU	3=գu|'\!;;aG{XSM_(>Mk';]gl-+\Sgc1&uSQK+eODBc	0 \B2?>\Ak*8Ę\9v`mHB'cn+yi)NzOWYغD%baQ!Xe+\:12cپPK   dO\'kO  k'  +   org/mozilla/javascript/NativeIterator.classY|S}%28!	dcB\ 6&b${-_@I&@ʚ>iӮKM)M&MlZB֎i\=lK׭mkι@$t;sOX%k('"ѨQoH"]fT:9NǓs0ґfkLEwn^E	F4*PW-R!?jnd臀%EINyLP`>(_pM$Ix:'Q+dw]Ԉ
u`cq\h#:B%T2e%x`CL6ɻ8mxխK{|paTej\G% aj+<e ^,^1@ڏxt,Usݑ٣L]dVM؆6Ȱ!5(0T֨9zlŴZӱ\ޗ2!q
f9DvB|XрFA4OD
2l=f2ǔ!Єӱs td,7	ܐ}Ndʶkhl6
\u0 }1@m԰Y"᢮t<a5Y6a:ni>s1qojئѕ-
ȭvH#i]aWx2t܌wrݝ7Q-ٍOǻ`p##F1$gpyȀS):ȳ*Yum~3jV:!T6bBLG	̤yp$1n#ɭnϹ깓\HH<"XQ:.9}p@`6oIqXd9K['Hnrftt܎w3i$6R9(6'q<z	\'u	sևøC&
4Tg#pW8#ml	~Ne#?!Ü~}ґ!z/:`;n0яe'MƎ+pEQ;QcG:*Ǫ1Fa䍰v4baӋʆRbe	l)
2T<IyI<DtܪXT?gp+S:ehI&[T<kĘ.(>8N&'Ϣs:zx<jfSyOi~=mo+ϰǨ8&b(&ISxrVU͖>uLh!~֮2㜽`u9!sO'u<S&eЮVɯ?i-w?VɤUu`blzD}ķ4·)Y3X[Ov.
-̱̺-f*]x<iV`Y4@ZW$Y.҈ou?(Tm*^r$9/t8dXN]h~.fWSM2:G	3sB`^$?\u\Cu0dM06+¯5ҙoڳ!>lieEgtЅhʋ4Δ#x)ko+]}pI"
Q.

.XXڠmq&waSyW>t(|>KDʎ>K/ٺ(k~Wd0fWU?YRVCإȱi2͋b/%3QsЈ6'ẍ́X@l'@UTwՀDW!JT"bь3zh
ˎi[hK9}ߑ2lc2+vuwnnԭRvm{綖ݽpSY鍼ԵrrSFmwy:OJުH6|&KbK`Vxʝbr[5<k0x^z޹gxwv#aĝVu<<[1Y|
tix $ly;m}NhOۛ/UL?SIdY&Q"[L
G I?Kt	yEHI؋|״,a*ΛӲ/	oayM8j%N͍LbѠ;TݴR"M5VL
Ba@:Uw/"A9GWLrِltTJĭ".bxZ`Dw%F4=,jn6bQ3-78i/d:bi(3bfRyHyw: yLJK&j֫<BUb	[KP>A쇇q߈uJbXƞ:@$q' zC~8;pq-0\4k1̯
\q%0l,qR @g#(2~>1#8exX('ح
'4-c	
xư31'Kܲ	r~`.@b,D߫qZHAA#B&q
`Yĵ
8Y>5hX/&ZK1bF:;XɧbYjq-j1
nֈ5	3~}4tra.:	:eg[ućZe{F
듋B(tMdEhUHlOdl1&u>h֧io;T:I^'$6d-#50:CC	]6/By.5zPhu'pCa4jv7hv{mF\
Z@;
CVׇ%Ⲃp;ѦO7 mN.ʝ{F?-}35WKI[V
z>)QmbkLKphVϊxbk
ʢ(x5Nz5l+;A\<`먑
sS}sݶNG1P[+3RTdP8{"?G7jN_Zq:>5'D}_HG]xY2vf{rO`>I~N0!}Dr;iR&R^s|5u
iJ&
tA7Y>
du\
\	YfFwFKxopxcLgz;_$#DIƊJl+*"Ow5Re+k)A!%NI9LF{U
2TgJA_>O̟f:ȣ=Э3pʕ+3W2ZW*{qc;n(+QFn
htVǈ;3"U۹4@Ths*c42Nrdz2ZZɗ6tm%5k&SX2^/1KO!̸Lxe'^~QgM_-{ue@%eI&/QB	TD)BAl'T5Tj&I@"==Ogq=^f&g/֌ ZBw=~+C`V_ T)zRb^2Akv6\
-c^j[i~GO􈝖v.'8/2[[Am[$cTXGtq¡_%1\MGYjZl_Wr[%!)l8[`s)% 1~N$8&DiDBE#
_(V*6JEjQ^.*TKQը:Wxs=ރ<5v7_5.Wogz1ɯoB'^_*BGOrQ5.|vF.r4Q1x|^ïDqqa2UWB!%Eph7)YS06nXOP-Sg'">[CKz陇)mL!nPK   dO\7S    >   org/mozilla/javascript/Interpreter$DoNameAndThisOptional.classTNA^])EPԪZ	RDI
ISJH?.XfwVhhP3SB*R(ɞwΜ~<VBDCTGqϯO㘅X+9}se7~h	sK%۵2C$?@7:@g d:ΪoqX LkME:ӭֶv%	\E^;z<	SPn`k0D	vΐn	^SE
)IZ^UP)cn9nk.23Oe\T +{;XkjAjX<~_oa9r\v:BG5d:ީDK6S]^
!{l-GQA=7`A
e|_hmG'{Xn[cUe3dcN&/D]*"(U慾WmymI	D/9r_
I	JhH$3
mNqX1]&U	Cd0L
,]'


dw/j;G_
}M<Cd-caD߾c}c~nc4BŐFSQHQŘ8&,&pD)8?`JŘƌxLv<x>$]$ųxBv.)͗>G/PK   dO\KI  M
  6   org/mozilla/javascript/NativeObject$EntrySet$1$1.classVkSU~IXZ
o\E մ !e7=aH8cuF~/g=.!}yy/Gl U܊ZD9rvش,׹Wp͢Nsiۢ ct7Bϧ3D7w<A3G!έXM9囵
|a^!
IWI$DXFچL۔#ZwϬV3{W*WpIc-$Тb?{iex1_NxǲWʕSC!ŝ<U-igȸ½QgIL&Ѓ^}8{ tM{A4scc"k5*F)$%ɿ}JxaU2eIL[L{/ZBS,wMu#jhP\qq	)\ϛ6%BǼu_P8:rE*Gضl9WsdFȩ>/ya!6&NM= wJnA+<un.XGA}u\a?^0Eݵ]zS06-<9xR5G _vI}^yz0KFq#YxW<*8/HǥOg$'d	/sR8G5U7<aQnYyS
*1i	O{}ո!
FФOu,2t:N=J :0بNp>t:]Mi7AZ[2[`-虳[<@WdKо˴o#
w׀O}2u]4C:2Wfi`|
- !SGCJίa0t"-b/aFK@BOH}Z^HMv;D2(y9@{G6Qj3tĵ4hoռa_s}F:V&AdIBT)]RI҉&y@]AZG:Ȣl#˧JnPbѤNZ
T͈ԍ+_U|]u)Qҏ-[t+"ZTv}$7q}F]tW1[f_tCU2497DW)|qp PK   dO\&.}    8   org/mozilla/javascript/Interpreter$DoLiteralGetter.classT[OQ],ҥWnj[Z\DiҀZBb|:]eq"4&>Q9[lMCMvf\ov??~Xú!k"ưb`;/#XݒŊ+=*n %m-;<bOmז3ٽ8Fנ c;Φϛ!HncH*Fq~(,Y
5$kWI.	`$Z*COmjS wjyCHb5\g[๐dgHezf4`Xw/_v.]^wdY㾭O#&T/Ubı|P(ű,
@Sd	t,}"4Xo;p":>CըE3(!1g)HymHs-RC3~xE&=gnjn/
/ϐvGҴopފ$h;|ۤ0O?b|ZcKkBr=ߐbFH/1kBά[]<f0cR@iL B+rY(,☧!"H*/GtZXNp$$\#_PK   dO\u  c #   org/mozilla/javascript/Parser.class}	|Tm&7;IE
@Ye_T	Lf̄RԥVpTKVkڪjZkQޛdyws={]_=0 
Dr͸X,<p1mMKFch2O!51c FY6]!]7?LEFa(ozAo%k"id" ҚH)ѣtYN	T>TRz^eN
XI5.7oiƴ
"Eux 01(klK&#Xx͚Hzπ5P!0xS94MD"\@0<[s-t2_àtv:l%%a4Uw,J1xUH}WP
5fhȠُҔa##|hϺTvk<)<Z1p,^LlO,rR՟ a"Lbtp~"讲ad7&~Ep<LaPਯv/Txk Ύפ)N@75G4q,cF-44;[@FS:9*}3_TNqKbX"uN$
d1QUJXFUT$qRG*`eT NH%ڒjG©ޠs!J6Jh)
6KXk14	57""h
	*Ȟ>	=N O_w6Xo	aʔLdQUI'<R>.qTf;=%!gJ8$OIjS<8Mնx	RjΧV*L!wMԆ$\s`{vS75>꬜::gj'
`fjO'@$#dEEKٰe[ai/66FZIn*0p
ɣkT@.NIXӨ߶K5F1GbYnZ[:7;Jc+8%o7Atk{ݜПJne]_OF-(o;lS]e]D:>Mp/bh4T|wH耝Z1R
mjE(Xu7]d0e4rhSv>GV{ϫ#zLωDSMDc8vB>1uX@duj	OӘMJS
;涵&c&U6Jsk\BR'lU~G/ݪ*
P߾ E[["%L$("pJG	a)h5	˼IW7$9ti%/6jˤ*ާiѝɰ1KV(S
5YǁKxlD0BEbJȢ}Zb(#7֫-N7ujhtgaVH>Cߒ{}/ef%QW4%6e}8E؇=ؒZSlx"]^az0=y} LWD̡̖GRi6yz[d
JVDod%dŬzKV0^6&Z]=i܀]/~2L<ÝnOM/ B<҈yj9xUTğ@M$`69Nh-.ͧLJka
'o#k]!`
+07D%"m*'J2Z1"ՑX7 ]ŉ 
#Z*6fՒc	idY
RՁrXD*bO&S^y+]Î1jsM)KV]Cdq6;^l
aJQYa!"p:/$`3XHKc/	""PSH6X#>͉- {h<Zi"lc
h	TaKtH[*d2TÌb+$[I$M-HMN*Ne?	
Ƭj6J"DUelP-|eI5T"i]k&-q,;Mu9T	A$X܃gXHü:dYf)Ҭ.2"~jҵT\W1/@`Vπ|tFp"&:b
יFb?/9	4h[=ogJv+F.TaKvd" "LJMde#PI7ĳ-tc
-Gu(
nr5vR[pUmep|7/X@ɮ%q"hmqdەxHyB,
M	f+/BOd䰛gQO)J8Yȴ"c)*VnccL,BcE@rdw#xvQbjqJ.3\>k'*m`pvs0yh6-J'MHkxHdJ~{P"E.d&kkdls~Gѥ_0lD)Qm[P}DKp-N$`dO2ebmD[SiRgسC,Z7fI1s?$ʻ_Bip'߱md/v)?
\d/?+z<d״7
sgH^
17%{w1#Hћ%{ӛTĵiͻGoS .44DD:(oSpczuiUM%l3%
@'c>[Co?s&p*]R/H-a}$=yLsQT`8&G'SX$X`4T	{w$ Nk[z~ \C3I@#b{ynId_ ܡRHH+δ_-xHOGms_*muq[NIUܭ(>Ta
=
e|j
IBn|V	7QCFەTrB[PGѺ\%o
")b^%XB22Ql>kW|y5?L@N%(pPn!%y
?jc<R}13R?@>A$JP tFFtFK'K>5A䷆b9"kԸM/ֈG9ƧW9 ,8(MǙ|䳩(偏4ϣ0ɂ蚵/ FNϮ5d-R%_A-TCE EHKXIO!'njYuɗK<lՒ7r2!P JQ]ح+-Y56s+qj:c`#B$qB'`[X<HIo$j`y;o|=	*M,F|1
T&EQӦ\w?U4M&Ws6?O	e
rG#p4/@%XSL,bɿ/'Ga|QI؃-u3(0Md`L}ɷpR%IOƠ	(ͷGNDE*~>wfE6Q!ɮr
3j
BS>18S`Z3SV XgUH(]qzks*ȝ8Ѽ+ui8Gb+XrشH|{+
e;$qG	)m"Râ)15Dg|ve.?#GiQ8#3EH!G|=&/%Wbay|7%+-|B@ T$tRg<;'^h'-W?G:,v4)C~#o	!k>5ma͌H\
y_V
A-{w3Iz,	'aOKԴ?*/L7r7W%
h)i@o?CruReo#rАݕ[W% A~Y*&	oІD[)E WJ_T:J
NN!lqm4]LTdO]'o0ڏ|/M`.k?UibRo(=~ {)E^z))")$s(F7Y|px-JpZZӛJ G\C:Q+noz"sfGR
RhJ՞2HVMC]J5Um[(saa!Zg)Lxstc6MҔ^	81Ϣd(c uä8\\N߯lQ`}+oRb>ő`8☌BkMqbyry#1IH	,1˵9s_
K1CluD+43:,)'H5b$-(57cV'J@,I>4lFD^j:yhn\#A*ƿ(漦:i:byFd*R+kǵKCT5#VKѨ)yif"OYX#Z"\57HOb`lΚ3(*1	J󣙌2΍2KJ4KDuc,bKAlDӔЩ)>'=Co͉Nۍq<SH`2@2,|QVd͹R'LE1n2ʉ@Ej4<9UVߖq)M"Erߝ)/3 2Â+)<n?;"" !F7tcix>CURlU'5zlquaY'QfJq^!T3/<5wSdQayDsFH=*ndVngPHk/kO	uۤ1t^RSRܥg #q+tvHA,ܖN4QYlL4z%$}(CRWoZ:'J"fׂ=yArыI=`\ٙU,{Hܧ),P<-/ h""`/>X)xNiW4(J;zK#Z)^©/Rs*]`-^)D|P'{zFjxSB4-{ߖW*I"D׌Y:z3z-VR|hBKN2 Jluc8qnqM6nF_Z<u߭VEDśt9P`4tKH	V/:4lAH5L.*z@WV#("ɂѴ~k]/?ACb>(5ʐ{TH)d!ů览2$mF䚊ޚ J᳴!_)`iQ+|
6-CC
4?z{jݎoCq(
'sٙRRb50+c	g:Ƹ۬VSIpI\Q5i

4x9(GK	j2՞Q3eGF1AXc4&nMNW1bJ?cLt
S*	N4}D1f7ʌpw1f6ɘm*̛h	4u6;\w3;oltnzlEʜ:Г8/E#M&ˤܛngxc4N"T>44S(,Ք(%lMM׬45XK0|E|hFS;
Ƥ;Zlĥ 
m%FK搽'!Il	 #Ic=9Ѹ"|4m[(:hlncsfhɍ1tVœO\liC<9 go~2N*׋cܒI:VGR58|c@-1?
+h;KZ6SQԺX
q9rƕ>u1^HS>~[A85>{6g8r^4MB+=Hakñ&ǸA7P$Inܬ99Fœ`"[)'t֥.;w
o rl.'UIt0εƽF^c=\ykܫyAi2B#lzyaW)(xT?'N!zъYScx\b(6v"mcOajAI\Ki<c<.(I`I״踗pO&+=:і&S1^OcJݿVصAEjˋGYZh*רMm>3^n#1#F/m/9px[4(Blc[hC4>` btX6hY[Oښ7F/si|a tbÔxmp/]hџF}R):h|e2&'۳N4
iJehϚ6d[̀4Ə,SJRiD`?ỷF{EPpc(wm^6VP_Eefx}dَٜ9{vcK1gɸg;P66]ed0|sy4G%i>%*QQa4RcVH|UcYmP9<HZ%&}43MYJ,jhqX
B2f⻒].c q<ޜ`rsz&zx4	<J&tLjfΒls0 F&6 ]c.tmkbG"i\ߡdJp=DTG|h=	ajǪ:Hsy*&~G$p'QIBt1DYl.gA35#4rOcЯ#lfLh$Yc8[Qċi)gs}&Rc[2ɍǘ:͢7c1?bLie҄Ǩs=W绫fGpv*ᄠyym^$͋iܽTccyKR:iM1/sR|}8q?J:-F9\eJj`4^yfͫ$d4l"b]#k3Xvhklw Uy--
5yCV?Jkɰ#[H`NoOhy4Pk"ɐ"DwInhjnFF[Zc̺(
zac"A;}>gY[
-TҼ|6f3ݣzD:T%b	c>L棅
DZ~I7͠qE4':bh
m0ʡF,Hܛ|aȬ-p,<	`"Li>Y9km-Tnmec/HE'mG6N5>4_\su0%|b%
y%M$m7[ץZp|KmZMKzoKC%w<%ߥEt/ԫo4?һF^DW3ivK?ܫ"[O?bZMkZKH˰L$jh|OeKˡ92YVln"aK**/vqk#d_⏲w*b൑uSM
F4Yh,g=V*O&blǘ4YnKk"(W5kYK̛ƳB$챭]\l
1akhz2ƛ.VŋJ>C
[=#jhiϙ=%Z0[Ҫ"ddnx #piaлk(eلcC)RXcumxmkBaJ͍lȦT-uk4oNz˱겶42!6ZSmZӤ5g xsNfJd/}vz=g*f4Zsi)APj(BZ*)H=6"dv>A!)h-Ad-VHk(RmuZ֕6g`
(2}b-Am-=VE{Xe=c<J4k1/ᒺp*EZq.O)1:]Md+K	e[mإA+I#(I#(ɟw(jB=J4y%|)3gRJjRZ5HQcϖ9ҭw:5u^aSX炁?TsuZ:Ǳ.q=	Vթ6-BKT^jw]K˚0)'Zs])[[px#Q;ZF!(u2`53F$׶mJвji]=|кΜe[ց~$"&w˔T~֍	u5ζ(Dm맅YuT/fSAZwHNY0Az
_?i#3oI^uwf)DR:sTJ?,G,A Э<U
YQnz_+An#XXz&:Bg,9Ie(kJw@<^JnTg9yޤW6*Rn^2PgV&Ӌ7m\m-wh8qzWZb"ThcV>?*!gke='B\H_D@lxFGևDO)vRޞNsi}A=Z5uH89LWZ_z	@,<a-g};(+-jiugqGlKڶ{۳PIN;಩թdz-Zip"UtLuɱ]AGq
GhDܵK}
m6dmᐬpx~&Y
":)s^C+w=DC#ȩ*pcm_.ڪ(,6>tn|2'`*GI{4T:Վx"wւ*cۮ5J+&U{SBXWbQ|qk죱WD :Cd:M6,c=;=@jzS'z/hGNO٭ rlp+,ٱ<9i=Iu1bYF?JAewa^aމ;pG<Ʌ#u0hD]q=~IvLn.ӧm3#D&B(lǥ a_vWLIاF
!*F`\#C[X^^A;eGioRYoobpdOڼN?{
ioVILieMRѸW&z&s=a:6"qRߒd՘➙
+
[=y#2ļM^
ī}ȭ٢Buޱ/?DD18XDH#d_!+Ie@a
Q_bވznJ{}:]b
Ǿ6kvN{;r>6v7+s;"d{}bߤ'հB>ӾFM䧟ط{hNw}LEPɶwKzӚO;2y,c?yy<(]<&-X&Iȏˬ^X!j"K	ZQw:-OJ{aJ23f
u/Dj6^MPW~^Izb["NS'kan=]G-fb/K$"sJ5OiѯM
B7h44]c!?tMp0 
SM6[hg(9ŋHߤ}5
h "hK"]?	}SV^#ߵ%	J=\-єky̋5kLcifR"BWGD(>쥷v?
vR +i˪-p4tE[)0KGerTL)pޒ3#KA_NE35!9.KK[OO\q'0ZnpN:;!;}q|vt;tSq2g UaPԫds}zd5\:#<_|ή~`IoaX"ݴ{h|-1(Jp!bZAgtդךJ!0^:WQ9ݭVPr#S4ޘtHcv)<_(tCv%DLr}M_"Ӵ3tQ5Eᕝf9N;yТ7!ԪiBT,6{iUψ3&̡z9839N.leuV_hnw;BSGkw҈P:Zbk]["Rov1C#bjI99E4QjdZvNFyJBwI`w$f鬡%{gLNiY.j}<Gqcﭳ{oYkv L8q'a;90Fˆ>DA)t!H^zы>ӹI:g8PF
j`~Y\,FQ#ϔY-wK-,bp~NNjӽD;W:9yXuP5%Ib:*xC/|)i9f\Vĝbt`/pp%8#eÝH4N07[͹Zŵǝ),*.  *>a/;ߦw,stntaKk9cm67
S@ZJKQOܬ6#;ۊ[lvٵsbb {OݹG{0z9w _Nѥ:/;ws!qttvy0"=ihg9wϝ_h|O XWi쟕8ývpqd"\:	<M sgosw99=eGl|G7(A*("rŴeʀȺy~^kM`fK
B7sME\y津1 AԁUdwޑ_iV&pa 
7u2<H}mx.c;H6ZpW:G7MjkvOm3hW}`+U-gɬtRLuspd^F[6|`Fݪ
s!Y=τ,=mʂUV͙6wS/`մyqciuV͞2u |v>ON,|>	x`~;H(#.jZSzP毚6wт ReƴE Nd0s-9> r_>y%@#69j葮n@:}-OIQ>^hx_dXTL}WO0OsG0R:Z}=LZD
mrQAh`ctB}+lHFMTaJz15޳a+1bj^nD}MKT
,7؈#F֧9&LfY;P>Vw@~>Q3>Қ4|!W-X)x"v/4}0e\7(3v*Д Î 53	3d%
6)DY4g,[oń(҈ޕ"zlZ3{~Yf&.H)!jGSSh5GqbZI5[jX9&P+;:&}tm=>:-NuP5R GӲC\1 L$|`HAC+U
c|'T׍+	cзہHݚN'> سĜYU@KŌJWzПr:8 Dx)(WWc\DS9:	zf0i+GCy&WgZ՗}j.Q_k:;QyIZoQjݡ$+1C߃\+jn0E#8ET} }a..Tʹ_dcE (.quYKG-"ؘԃg¡ Ӣ0˵/[dStZ\2>(,=G(XYI{p=D3!͂MO6ǺQ<TFetg)5#P&DjD!QSOiiux:EתnΚpIÏDU!Z7;/N*7; ̩0|KDOn
9 T#
;'HTȲhmpyN#n&PY'0= .F*6 OpT,*Z9"`lnJ;1f]]؀?kABI$VVNE앖pja;oӡ(OwVfRicK,
;+CAsH7vPtro"8cÕJZ[z9Muuv@qecŋ{z!ZmFM.7R}N`SK_U3%diVh-6P?(9EoU{~l$)aH߁LM5ME\~@m1sٜQjE(zԠ=Ta-Mksg
ݤ ISmZ<{2gDw'v7_$8h̆(jכvN7o`M7%(|OcGP\5HҎ3;^$2uNs0Ns;&u7􀝽DTjﷷSZ3GҍbʛPÎxw4Qe}K˓E]MTP߀ O6=hlBw>$Rjmpދ>z1oU
{ǽ䬉@;TiUիUA6?v
#U5tmu v@JE8k$'`FA%	nՎjKA*!TL7ɶ u oM;Ce%5Z"<Lr1>5+J $Lw;וDO3O>!XF$x`ĠvĻ.r֌EZ݅y+iVZjnd_<lɚL4=~lׂCUTq│6nm:rr5LyPĵwrP(R߳OۆF
ptb d}-Jұ %]NA(v(a2R/jV1f~zuWO09@x½	{=A1b,`ZlT#q"I?IHgyWIru~BSuPs);Z>Y!#XRE3}- NY=WYEQ$)E>{KxƓ7zէP&+͞05d^{u?[*)yY>J܅*U3ӎ[#5nU:ZRT!8wA-˧4ȴhU).@Z]v%n
PAnQݡu$ը3-_ndWsd4`ʉ1rSG{VWMY\!$%S4hm)'x2	xS@o~J7V|NvDtT^5U
eOG|LXo+xg0xWn;xE	i^4AMYOWer#05um"!Q+Bfi9ETN:dV:<`O~_1ѤLa✥{vaxvQCGš#p/ TB.;0 2A|yEٜ0N;PcXu=QX"0@_a"LR1_ν^?Vk`E:*TR2uv;#/+g:[]Y~97<\zvCu:ڛ9mn}톏v:0/碬gYϽwsI ڣ2X>Ղg Y v}JQA:";PFt@ Q)r
hVTVv	%ءrc{+u8혊PV!v \Q:|Tw3rTUTU[Q8rPB^u	5
`;r
'X]p4Lp.ۯ1n
鎸=u&6860ZTa%	UTVU h}*f1 ?Ϫ@ȯ@(xUA' }1jH2e<e[qN/_F@җ;C5Y28-ҧO'buA HJ6xH'?W*
8gP(9
lK,55QlQCFKoU&X|5
V{Ĉx7Q\ M-25꾀%	
V+
5tE&F&F|ENķ 0f'CɸKGO'5je<?`5<_"Oc\i?t2Ʀ*~Hϭgd22{(?զbb &lUnǛuysyƩ;Y\	?} x^6?V U >ߏcOQ~?0B|^_erI&-i./,^ ȋc0z\j}VGbVڊڨშBHUmNWm_~UV㝩`<K
0!L|_ϰ ҷKNq|Q[sr a*PȓCFA)# ĺLf`1}%~^7z%~^zH$9bn+}*igw~H5acGc`V@5:Vz~{[ﷷooR8<>w]v͝"E6.[T:;,K&~lvPf8mpՓЫRnޕ.U.T{v͎A,5/i_`MgaS
_ӒG6,6\c{e~ 6.U~8
_> {6(W!lHSù k2v,Ugԝǡs dnȔ0XWuޖvz00LLU9 ~Uu.\lOv&jmt逻}cwp	txt+ꘂv/w!C]_rX!Xg`KfKq/lVTvD~]NAe
,jk">q/`]{A`ҨAhް.l	MQ|K♘I
-̌mfdkcf
82qT0}0
s0[o\r=?QLd\A}0sJI}~i+Ё[o^՗xَ}'bMŠXT;`w(I|O7gd@_v.c߂0
m1"8m%0]
>>}ְ+!f\ӡKclK6Ac_ aE}FAoeG1$]QkAa%m6"M揁Yctkǝ&ǘuO!!ץԝrǏs%%
,p`mKv۹hf$17a	PnFӬŉ2w"mPon#|vt/TS<h\1!̈́%}2z0mdd g,^l}Ȁh賝88g"ʒc!>&0c#U%b0YU>EV#LS{3iL&nTOBTu|rO3^CHf|O
Z1*K^pP+mڡ>	$	WwD[:x]F_Šr>V"ϣp{K)ςk/0ƭA@*]Oԙ̮}QG˺lC^U|
Ud?e}we`&):D>5>;tli^:2)Ϊ	h2A*ɏʆ]:FUv09j7!wҟ{~Kq#XQ C8}F=>*P
;!e2+˽]"5sΖ_@O'ENvyʅ͘lRHx;"
^bGp]𱒮0=ʽ``B}0+03sMn-+!{efX́8W, .|6kO}GTJ 6r;XC}B/j7|J|J.6zn44(2j`Pv".4lE)w_RZK
E:*0[؍S }-ޥdNr $YcF!Kn6+./cw$%r9#	OVW`+o_^*d+v;+懌j
e'K<Rk0$IPu19k$c6П|<$~$ca&^g`?IևsP8BU>%Wt-UjJf9%6kiGQG#X&2%ʲNѣWEjH[K%.jp0r.1kHӑ
36	,a2#qR`yHYrecǪ6/ۼ,͈J6c{3)PK	8L$&BiUj vmZ>h'Ɯ;7Q)e9N7v-ɱF
NvIUẵvK( z.'TRcׂW%#'4@a?uaumR]iEãpMC($uN*BGPIr@I(ڷjNDURcTvG}ߩFhvEp]^l6(,!&g<UԷ#%OPUwÂcμ:үP
;![[a ݽ0M*UUnj`"uR31_`/p,GIاRp<N\E|	
e(h+SP;
'0WGZ(4Xʓ<
p 6F3nvoCL?WxM~!/	6|ο0_ʊe?ec1|<^~%flbjv]ɯe?uG&cv+u՘
 r'8pM
uu/`xx]8	)HlN8^e000ìSS
Ah'"S)pLZ14CՁ
`ְs3<I g
xgQ}NɆ& B1[!dd:Yo\s
W6\cCL9CK	~9,vB֢p8ToS;~qp mG ~ { ×#4N,1w;هQc+,YQdVhOkqs](
%{1яCPїU)XՄg?]u3gl?Wrkz>V)Pno) ɧPOv;#TȪo7Ze| RғV|p
>-Ӿokb*Je|8:hАU(7MDrGɫ|<diȺ4ABWU'H~
Cm(M@,w7J{P
>X|G 4@i\wÏp߃)	?3Yx^e߳e6UW8*ᯱcxfl>-aa6[a	.K&7v&;;.K1JO˞_=34>?W]'O%_K fJ/}J<$4<wywss	@Fx`>VRƄEDdv(z e{a4cd4	."-?C2E.|D|X>rhL|C`/T(z%Zvr[\'0Q>Wή|W#|Www4A?
laBoaA?aPvo$*`4\==
g-լKT$p(5ʅ0UDG884w9l.~X{$Brq;kbS ye`Ƿ!S=IqjU$ӰsBc|VX3;	{7qK+w!Jov%8KVe." _%`Xum;TU,MYؔEUKs㲙56AHQCP8%㵚)(*kt{FQ4JrI@D-pz%҅
@tm5oИuJ?CmЫov%b{n=Egɪ-hV+=?P~Q*YTRҤ-U]l򒦝ZD7 !Dqb#ȯY3v7Fq0rcD}(;/G2k,2;8me]v(zC?ƸGZF\U/gF0; (JqojQa?!B0Qb04!0_qA¥b4TT
caYqe*&Ûb
Ǣ>L6\s81#:MYXlXN7Ilq2;O.eTvhd7&vhfb-E{M;/Ng$\>
ǊMF|O,MXM|~'.◈Kq*.7'
+q%]loVj׈bq(AGHDb^犛|YT866;Te㠯N8Zeh,	,ŷÕep܁J5Rlv|`%^6MwL
Ji,d*MاVA |]@l~#Xa&4<?4ᝀ@$Lv;4)5kD<ysg.BUOUYW0t̟ZͿ#Q7z/<ݴN4$c[lQ}	lQPm0Ϡ?Q=ʙ
ʶT wMŋv1y=;^mw,j
8ٕ5=\n)K2ؕ[a]Qn2IF!q_mDe0#*Y2i|VkXN IRLea7x)`jEIP-Jv{+@cٶoMN~iJ4Jx
`5Fa^BnGy:UQYU.eyrv'	Oug>qHY<	-#//-/RS\1xRb]ެ*
`9~;7gMoR	_hyn;PV"Trtx;S7H_Tc-ڡOs#D^/16arCpwɐwT{_l=Mt}	O%Lq'P
=0DE)v$q?ԋ`xb&F)sc(e)GxB
x/_+&%^ceuf#_amvxMeSĻ(Ɩ*ON|NbGl7]*>a׈OOgN{\e_WC[0xo}
0|QGaF^kP>P`X 4W\9Jط cX/v
,VAoި;0<|.jP2L>+Ъ
E|r5ЗOw5rSGXw`8H)+ ValEl%X
l2<}TM_ĨRb9XNf{Q#PTgCI~2Kʶ A/]G#+q
Wx>%qcsf7ЂS<"7Jf +q*qb*Aa63Dϒ7Õ
dލ-",Ǆ,^!h(QllG!JH=&l>GrpĊvD!F'3ed?IʐtRsd1Cb8KRX8%d/(B	ֻ?	[+l2!-z~$H;PHwVT^I-|ŵ%.Tf!{BDw,OHYF}H(B!$,KE/]5x=,c501*Gaq4Gbh88ct6\c|82&٘gLxh]c50ngƉl1
3CEln,cl-0VI,bN3V]b4kZve@u~.lZoTza.
o4gЦ V JP	-S3ؤh;C/7»o(/nVBĀl"&cQl
9"
/+ [X;ribZ@f婠q\`(_A3hJ,g	E9ZB
Zl MX
xA,3"kRtȪ4mUbX4
M^@j㉭VW=t֨XVĲ5ϲF-FU YB̆P۫\_UlU!ۭSR qQ
ΰ#Ѝ!a, be"|h7{qWqr6e2c06cTg7`gPˌs|B̸RŰ6c\w&;p=xܸ~e|~ol??Oaq
ײ>ul7~j wIIB)tAt"+MQ
"QT8Q^ڮ\Wך=g#9̞fFS6aLق۹<x+n56v(n>q}k[pw]CD1x`a(p+4ji7xmFQ5ڌ*߂
=x)xf{-;\9RqG~#)If02lr!J|p~|j9E5;t	^P6r+Ê"\@bŔiM$_rg6E5BUWy!c4TB;e*0(S 4uyN$Kcq4r\!StX_ʒ1POƖ
H=sj	ar{6\LF[E峸$Ny5ɐc'_J3Xά;UCH;j/%w-@HKIz)+)w<0!-L(\+NJz)`sb_"
`}r(I@)&ՀU7
X7&抝eߊvϏ˧?H$*F|;t!$#/)O{#6#y,	FyOg$Akm'mƅa˓IuYدi3GshE)_Xd$W|WEKU1s~!L**?Bc'hoh]_WZO	qpR
w |S%ؠjP*Q~Ձoiّk\ha.T25V#8z-@m_NU
=ASJIW~c0[a(0 H*if ƝY]BP+"e+VV<`>pz,byshd\̹H@
@\w&27;@Dm ?r0(`+:86͑}uvs\NП+ϒ!l$˰<X͜gWmt
qPLз
)ĵLɺP
nl'dÐ
ګ7&')s+MC
0x</<u'ZȣPՂY}?_Cd-juE#w~<%y&*[yd0XWʏES_w&a([̓Ld
;%jk8cL43.St;T{4V_Ú}YڟSOg:R0v:MRG(v:Sǳ2DȖfu2ۮNa;	,[klz>;^S/b?1rVΗuJz^#uPK12iBސ2C)1(RX/akRwh^}(v4y I=CZ&@^	89w뺫d1bǂjbj{
;?	&Q;9Z"
2yB),u,%GnU=BӥM
L zA^T@<ej$5qrӾԥ3qu><)D]	
,50HwnM0GD1*\f.lYA=]KOM1jlY{D~9	>f?vW*BTϖ8ϡB~nxOCm/n5cfŃ4릜/%}(gfЅ@'-3Pcf$3"ֺ̤|/q F\~+Px7PsI'~3!m>-G(tgzPqU	]pZ	'F)UH)wã7Խ>V(pGAXzp@x4gk^ix#:ÃKҐxn2rV7˸f7usPj8?һ^dBKoj-0#_$()gp?~0U
-AP̚r󓐟L)3.¢9>)9\gOBq&,J̘JzI5Òl?U4!J?r"X?|_9Xo*HYL$3ߎVRC'BF%e.ʯ)f4{g_p%6} lN"m$W'`5FV-UT/+jŉqDUP%p7DΫ.{po,~cP	$dH\l*žP| /B24U_IW߀1A8S;LQ߆w`XՏfL?Mg>}|~	k_H[_=|g
_: =z 8;C=&l5ݢilLf5y-}ji+-}eLo-1,lII&JX\a`?C\'wk^U
jN7o F43o2oFc<7ư*.x^x%.JS=bv"xa6dǡ'bA+.(
ɸrϰSǠ.9Suآͯ)5NȻa^Ef>ٽʥeq9KBN8V/	(>"%(BJBl/Q
I]ɤww\МC`R%Pؙ́0!ԞNPZCHAjM:i͡Dk0RkeZ>
\hR
r:q-Cdr
+LJLEWdT*t{<_CxM;3O30Iy4/-Ⓡ{iҘcd4]-
T>-xh*f%Rj+fUb5>ڞI!/`WZKoKm[x.d¥K	3.E\ݠj0F
K>\7ja%cyv:ܫ
Pخ
3g;2
B(ΥqbJBB)NwJ\[\C}fўatRP3Q'E({E'i#AFƙPE`,)VՂ#ܽ51잡iSoaB`ݞ\X9FLP	H!UdM4h͌T!ݘX%!W9
J_!/z5|Z
AU	{ !CTlJ+YøueJA) ])`\+ _]$H#ףZ'LRJ[r(+	mD
>ep3Bvĩ`9:nQgڥ+;ӈxl( 5qiAY%Az\Ҩq2oNWp\BϯSR#ӡ4E{K?lAx$flfT,_Ǩ<erSNhn7~>:1Mq_0{pG4" 7et2hgbǕIXhqejZU@*e},[zuVXq<z!/\@S>R/Rɢ+q3coFJb+:b{/fƐ$rʥǤK!k0F\,BŘq;[\&A3m6GRwji]K`v)۹0E$o>\-+.rj_֮Jm)<-m9]_i+
pLRv+kf`v6A[ækwu"m=[nF^Vmfk*m{^`oh[9{}=*cȀ=.KjťړR)tm4B{Z=#MH>2YitL{AI/ݦi/JhJkCߥǴ'wWwkIhKa	kI<},3SY>]s9C'G 
,syVݼ\
ڛw NbiޅekuX{kS~Bz	$3sP]ͤ(CKsgoͻyHk_=rxvinggSTKdqJr4]s#eއ5KA=\zb(Y^	RwYǠzNgoD;=2Y&)Gmcc8d疁:bt"(AsaK
!$7lU4|EbF$)G<v
09BdVƋ#E@	$g"73%$k7j!Ok&j?_`Lr& gy{C3 \ cgPuBri_k9\g4K͆$xDڈcyeb@+	 [o1 
L IaDĒy&b']lMnb^q9sCqe	_*NS4L:n+Lj!OzaFnLX<a^dŲ,
hH
Xk.=rW
-O{vM ;\ĄQ?HW*w5LИ'   'wh8dQ2#
\KkE$mC25]Y!T+DT^ȇfj1R$JYɫаb鱌rk~Eێ#gL+W3'
8j,2,]4ęKHa-%FLX\ƁWKtS9X+|܌;PN^EqxamM<bM? QekLŞr)zf[QQł{<I+5&Mf*p	?CUCΠHBA?]ɺg&[0G݁W>\*=
VFz=ӳ`
kz;z}Xo z#EoM7cޜYz-Yފz>Xu۲z;6TF4]wf]ؕz	[`=7ۤa}z?SAo`>}ea}c$_+x)W 'JR>U:M.
gH)t\\2Bi>G^HZ_"/K\i#XL/=/k"MJ#}D:_#krT/ɭr'~GI,Wet}|~|~<O_#_!_%ɫ]=Y$QƤO5= C~6{QT
(,AjcnYAL8+,)̕R%܊tH 2X$!m܆L2x|,	DQ&R!(OG5"</X|b//4Ld7v R*O6wrz9udǌsel	ٗ5f>bz'W;S*wfqo{hUCkB>(@G[2w!W)#׎A.pWXmv3{R(Y&.x%)QVrϪơy"wmk&kBIPܝI|,jσ#ǈ4r2T);rvJBVoNifhAJ􇠿
'9#Gvvn
.LBi,kpz'pk'R)ϊ!!1m@R*O,*$z²!4$-^|ԓ`OW!g:%)p:'b¡<O<B-;5HQY^	cGLXHƸݎ.
R!39ށz J)~|%ӕrr)Ү3m!%P#
tar^T^"-PˁN!zv00jt$g2CFDN_Ch9C7a6Aj.,߃Gp1<{a]׿JʯQn
/{
ivq՟8Bc%{q4li|p-Ţbn.=\۾e)V^pSA]9Pkoo
W[jW+(P Niz/;Ǉ.G|}Xt-	pmB] 4Ԁ{!d|(dhN4E0B÷
!4|BÏ
 4
ߠLQY&<t!Ga	
~6l8j8Iq</#(#x=Wgt<&c8<b>B3~C:Zs*tf(9e
C֕wjǭj5
Jd5Z$Ia~z\,'Ԫ/bֿYQrs၌Kh,ׁp=Ew7SIv80&|3uʟbCk-2zooBF0ȆaF=i>\n4F#hhp-aO<`EkWc?nK<,Ncx@Pu귆
Rr.Ja<s`H!.1#	]@)^CyJ\2׉+_zm6-@h2FHEyJn\DtV.($gUhQ].(FrS6,h/{ٗ(7?ph])G?azW喃ƺ3re/6^Y2WKti1{rt76CP]bLW~"S.gkv5XI$lLBV`U!
4d$!,)&TV$lyq9˥{]P4r~-6i8˰N<%~.WJB7%f)ka:ci
q@A|KBm-DM[1RU9wdIrVm0J|Gq{:@/U8qu3zi
㰰SN_
B%`Ѝ! %(5F"#PfXjcl7f V9)1^6·x׸>4.31ߘY[
XĆWQUlM0f3%B:v]k\n2VۍFFq{X^0ncGr߃Ќ9&jFzQx"m-CGՒ=a\)aw!+e!3<}L<KMs>I	pQ/7j㦖|kE
&܂y7VcPC3>"B%Ha0g.YwnNrEPBBZJs-N_A\˝gHF#"z5I].ZXM
Ƹ:cq/46hc3L,'$4HHBM4j"me:0Xx0TegLT6֦jf'btDԑ2=]
j|98Z@^*-BlTqj#bYSFƁ(qYՖ+JI-5{s[.=t!2A0ݎp9]Ɠx
2
[;܃] FwCj5;E"X%.G	ӹygI7E.4d)BL{)RN&GA\m5E(.I~ndQB.%:EڹRWQHW"S?(E
^FXvM`Np#}/A
t3P3^Ӎ!ྎ \bZ㝈	[8-P}K#Rdm.ޕ .оd";yEA1rGVP˻CVB1{"ENNWU&.7OМ $WaERH䂢Uф}X~^VS[Zs_@$t>ԸNP+wb- QKM!noȕ&CWx~w+[N
4

DINmJG+?PJrMF_6_=:8 p"@
~֜!æT
|g ?LshlZ_B{+_(1d[8.5~Ə	n4~[zx*)oWwPd)O4SaM57MV`l	&k+]xm=^LcOlɒ`ptG!@
Q\_Ħd	ߒz-	&|{0
6ߋXdg[tY.АDMz#OY*'T̵)Pgo6ϓi G4/s\)	rk;Ğ@A97Wr+A9qqIuxiG<gw:wIO0	b%f7nmMΕ@ߧ5]ȘSbO+Ń\)/v#ϔ"4kLomm~"TM^tiQOMrЀq\&p
S)<S0 )UJ2JulOGt[9x'#a%xu^\-|3W'~̎!n3IU$@h'
Ԙ4rW'yy¦M<}[5t0@P8 .0
b;,6Kz4$k
?Dϛt8d?3bd9eey8<u4'DϜ[w
kNcl96b\<6g6>k^{{N9l&3@_DlpN7'V0L90q|54ﱎ0{'E~ XBDڇ<0A$brcWa!1hc[ L#
m:i1
"6gI'"-t+Y'څIHg)<YPa^UY}NJU!=zHUg
[_\%)R/KrB趆zXOvVR
GNr[P=ɬr̼"B qu8҄r&<cqGkGdiBwE\]h%=4P;𷱇Yc)T=t
2`^y)ˠy9t4យ0\g*k.=s5żka7Suy=ym7J8fb`ކg
1ۼyXf`eHbCAUX{<\!}8R<k~PIљGX#eBRz?X0A]=tB8QaKDw5HBcD$N9|t~.IPؙ`pTNەE* p1qdAZEZa\2d۝@K~8_ -f4=#吓ËbXL׷n>RH7T@qT
ke4ʿ?n!͕!u\CVr+)qy<0KSw&]R+)THZxJfأ>^)>'{&ͧ~u6AK\ȻCyr,s42H@/F̇q<Qmc|x	p+m]f%'Tn&O3|I^Vryu0_d%KHv^ec̿!>\[.E.29E}XK	 krߖ
2?CY_^O\ii6	پQudnRdK0.Cſ!BE#IO"]>)kvꃓX9!fV'XH<Pp/Xpvda"녑uDߓ4 [ɡnA)tG۫e)3I#{LT^^LXD *Ύe~琇s磇%2_!qC0.7|(V#0OrnEIiYIhF!~(J&ÎDq/kN86Xl8H:|IY6{)g#sR.HV
T[L(wQSwӔ4|JucWQܽs?=(57Jȷ΍(0()y")2Sl8`ϐf#<
柸śǡyJQTd1j)0Ҡ'vey	[6\kp*+ҡʀLʆ >rs+/:st\/0)rN6TA+"QcxN6jT24X ::Q':3%?ac+C<);7HNr>>.tbk4"WWmZݧ+	"V#0Ɛa%єwLrK6
^ T=;$?p{nL~$	N\vPcJ8-8!eG?z\j:}bJ=PFፕKtBA\JeDFŷ[+搂ܗ#:2g j	

4BS[Ue3R$$kuC +RwZ=aulz6OdGk)g_`
 i8X4@
w``
匑B~@<l~˭ȏD5+
(jC;WF5kީ>i?Q2?pg+2bE+C$a
DJA[$𣜭 !g
0:zY#`5Zc@li*	MǨH
6hG5Q/#ä~=/t㺔ӌy4''aL@8Y$˂ݚ%U6&Ta$ ՎV?scչԹOLYعYعsם"͢sHO/su^s&uK޹ꏓOղ]7wncaI}MuvvҪu_vr\<|}'v]UɫK`'w
U؍H3zzWE)c8+9vEQFJbWnn+ehZShc^UrҰyk9{Y7@wkf}[auLnYZXd8>MU(YE<>EWES iA8Af	j)eI ԋq?1ceey'e(SEI,Q6:gZ&4-˥IIL҆ړ]#r{q6k3bԇLk|Qc=aXtLh:O4
?cfw4ϊ@6]変 
oB"/bxkXpx8'ڍii=z6ihݢu6 Z嵐ZsNoȶc?id)r0sS274XJ?ڏyԷ^+z:Zo$
"?Dh զAd3d)cp92:oA·:|9_bdeul^:F
(%]bm$R'2J2֝eGK8CK~awPeW{%q#a~KhE]ƫXpTG;CǞˍ|.rVJ7mlPHa^S̄@9l B@	(ÒޝvYsКTjȨ.3x6ÚUGVj)qͥ4Du}t`%<u-'6ǵvW,@n97ea9.RtDR%Nk`e`0w8' Ӗ`"ۀ%	m6ll۩NxݎA;޶x߮ڹpn$	̵&vsV``얬]؅.b}l݆M۲v6ε;K.lݕ-{^f7[ka~lݟ%{P|=Mmy\hb
o<KbtadUû;kt(טOx	=@ewYwЗ?lG|tl&v';]; .E&?)oa#=H/q)خR^yL2e>2\ϞN䯮҂J-' #0r^7㿭EUZ^3*q!שO'ܓiӐ{%aPfV**=C74bRkNƋ-Z~D׊45NQ
.nYDaá}#=c=ep=Dɞk)p=vӠʞ=>ςY}6nR,;ViXt.+P݅M̟q"{g9'ckA=JZٗg(WM%aZiv]'LlBbńPO?YCJ2gJpMd~D!.(G+m\qq{ruPA0և9MX WRѽؗcσ{>\E¾
q͖@}- :g30)p}3\l- ˫^
+"ZZ-b2`+lu`׽HQg&k>Xq*jRpɫ( r;%E I&tXGRС/*`!1qj
J+!x$dJ;k=b+:$ڤߓX)ݾ]tҾY+II6qk}iwdr]Y@j4|x>l""r*PmMe߇r3t@{+6n?Gpuk~Vۏ#NUލ;ix~޲>cB)E{?pmX
M0~#(ȳ>͡U(]k<Wޟ1=>y6
OCy\h)vg%/>!OtV
1 -Vw:%|=yȶ{y' L<ӂ[&npk,R%yNX_ nQ̙DwXuTR/9Ӹ,KcG1`i2Sx1P9K<n&ԮƖ켙x.keXqmbp_LCpJMk3n2(0zy^*]8(mvWkRwvC+IgHV >MHA@=Ac$@*s'_}_#װ>WoĿ=` ?B3쟙myoH~g
?XcO>Z'X{urdQXoGe}
ut61Xcͦ:\g;lpG  9G`yB9ո
YЄ
"(FFȋZh"	`STK&G9j[#q%t jM\C4W0)&-65W*\Ӭ{½\=9ylRkJ_8Xĵ9U%eedߗx\sK~&yS&!yfF˂Z,L"'
~E}M],Pl0 ҝz89Ʌ"'9a t9N#8i;Mi/e")Մ\WRF~%[9{BjD8^]:tD(5"(YiViהUjK-+z]Qd5VդR%hN+|md;)JJ<Qs1"
jKBȅlK4=dlʤ PiL"d07ݐd81!'ʹOS13<8ˡB1DՀ>W/T#&̗H]]bTIHmVuJutnsE+j`N\ȉtvڞt_H0Sm\mc}M[/&cNz^n ރ`U{PMSsR+ڶqyp3m.Ás;?jSҴ{k;XD-tNWܲ%t<;4vzB34(pzAG78}pm|:wgG3O9c9g,w
g|LI38S3say,ۙXsb$2Υl3
sB$.W aY*vweeg9չ6:+Ymsna[jsֲOugd;$߹[vʥFs$uw9H'<rЈXl*8nX5ږgcKXj&LN
|!vYKNt.i91
<~S\Xdj`K3GGp%38;nNccu)rSҙ-HI:Q3g#0^NIv^%bJ+ثJR<!}|'=Ɋ'nzqygЇ&ΣPlNف pvx'yS`#:!pjX80\$_HPQtgy| tfRN"uCHIZ
!kD8~!(z^bGY@EɘC<R77sמAH-r
+Sھ7ٌgu.a
Lwa&,wޅ[}X|C|
"Nu(w@QɊ4ѻŮqaGZ/4^k:N][#}6EN͑Aϩ +$PZi9HdCA@	R,M<iׁ{Yߦ|Xu/`mtEM<WCVi#h᪴x
^3+I&'{
X-8? m:?!]Z;@WW(u~H |\uux5ׁMt8fonp47e
Y3k6e]fۜw[nK6m&ޖ" 
f6^AU?5"rxcfrtʆGBĠH#4oA]uh[idϺB˶E<~XP:QCA-R@VG+0JHN r5FV4a4Q'6*2pߥUGG`"+5 &9gZ[ngvn	Ltt;w{#BW$fPInd>hY @f&pCѷcq}m+Cx*Ǒ^
Zo]S/c`P^=<%,w XbL{HDj(3^ w,Nh8;1;qvbI'!EBt/;=)
@BCfhƓ·ڥ@NtbnI8.ߴȭEn%qڒln/<;q+D1J\tyy4NH7\$
<C4De`X]k≵uᏜܸeX%*y(4 |$QBru"xJUԵ?ڟI1aډ](ZH-++tMq#H)	ߩo9E]յW'k麕Pa4苛`n`㑒	dxǝӑ̀/Yp=~uσ#l8^$w܋\|2.`܅{R,߽vb:6]Ƹ׳i
v{[ȮtW%-l{+[fkV{'{ndM#>qgܭR}PqۤR[4.
wƺ;2R>!p|w}VZ ]npH7/KHwK7j9Fl !XlD2TXYV6L<:z[RwR]m.!7'm0PHa6"caeHE2hc&T,Q݅%Jj6,&DsZ{dJTZju*O*_I^/Nd3Ʌ8(v\ =fM5OUq吝dkDlPBFJ2顎WH)3-܄1s-
*&%NXspQy^t*R qm!"
s߃& (c~
<rGܯqKXƭ-voG'd
02=6?HQ~F&pf'hp	-2"
0ʡEt4GX<>LHKPXE<9T7էga:ٺ3k_'NWE\]V99']vU9GRnU\$(gz
zGSBH)fK8,po{xd8S`gyry.H<iZh2`ǅT,ζ5˃iV('R5)2)&>DFkƃru9/5"ѭZ%7,˩sJ4 ҩ]jhr1}\+ԓj&`^N"z&5UhB
05Rܸ f 
wj̈+`ب)xU@irz1[qOj㩍pf~R&2g~^PKlcZYccṇ\C^ zkJN/؁T|>+NRND\"B@5ʩ AzS(eŠ	,eCO/^=`/Fza x
a),*ᵄVpzmax=#ubWt3.,+a^7`w+z^o{}gsl7-k&o[
elw`UH7FycG87xTu?h5&[&@mG Yng j:,`MhsGjHUC$J*JԞ[*Ĉ-6j%fV\n=37#ɥQ"6xUIMY.lZI,P=Wr[z09t><tb<EN[^!2^pZ|lGmR}X&.N$OXnϑgCg%.}.iz7
{1o/t;uEQ}`2o*4HCCo&4΂,gCᝋy6·pw!\́K`w1,.[KawyR'
gpU+/#\d
Ǆ<PP89yp $wXP:p8]RkIM
<}O>FiT!q\U	1E+ГOiq6)ujF4BN#'Bl*ʦ<A	!)MF/#1&AƵ>)<ǅɟ(ɡ>7PZO:aTROâ4S_+ %;,$/>*shK"N@w,>qN AKl^yR0uvQ#[ +zWBko1t ^ükaaz"V&X[Ao5ln;;E|Soo3;W{N6{uclM∕+\	v$[=nZo7{==öy{v,w`/RD-b6dZa<ԁZY~Uv?Dv/w͑#N#OB9-f+qGփSTr>@ˤɸ-Q~]p)ެE/V)gQހR\;v FAjuVnIpZJ(HW@~gUc!y2	O'#}
S)D0i̱ƱαоԤh^{ҽנ:4ހAh:yoi[{wab {"F>O?mqK4["o-V;n 4n䕗pBKCT
 GJdA$P"}qr1k!3	Bb'5HJ?HUz*-?F{ՒW6x/9S&asx^%\~ޮ~%yw@Md4^bI5KaY8WY,R (
׈A}_.}ݼ5	z?Eo(6Xk?a.M	͗n_moÏ.=>s⧱,#s+0Ddu!-*BZ<@ -*
O(~r	v+S`q=4yQ$EI$aXԹRZ%*:O@+a9a6)qdNx!9ht9bT.=**qCP\fd&Vx/N}Ҝu`S9lJ?Z_^"0'$,+l?l㭥^RkP?-dR¤|9s,[XJw
A;Z8B~tK
i9=K%JRkM/cZfyYb.-1` REF>|Kr.	/zѵSOqH9@4ׯr?(St
Q&j`H,:Ol߀3 SDFl4
h(PWQ~SHe9:WRPsNS|$1:)\HPo o~c7RCa_ #BT5~;oNp_a6]n;w^w~_Gz ZCX?uǳn~;?'3Il2OaKl[
l{̟*ٳ"vп_>/e/g_ط|/J2R}_.7Ha*iZ&mwJOwIu+zm\οW$7˚r?,[vN{H	y<ůg3%y&l}b
:YHwΐ"juB*[%@tc?IC#՝Ɏ>KFi92/iy"yL>k /OJ<aB|ToĚ}irՋtH7GG

w쨍ق/WCi˒6@ZxA|npU!OM^KmP]	stO1]=4˱3,",0r.rp9EKQD(ʢh<pv	"lx$&j4ш  W];k~URſY$}^0{|0(pr)K[%tbn<mA臑8dHǱ.y)6j Oq&z695QL?Pu6s"jZkQ{2mBwJ1b:NK@2IvaynwLqPTvֳK⿔lUy[C[!<}a꬜qϺΑ`FAClȎ%,?A%r = c@MU5L\M}΋GWEpKX}[c臰+F?ע!;G?_u0|; ~:GɺF GTd5f6;kR`Ky-!v=y{x>粇68/I
uqLCsUR,@fY"O ð[yF/>Ɲ! E0g`4uYXݼ/d}΁*ݣ~<GBB챬¡t]1A26Ȕ
Y9
(G81z}@I뵖oԕoH\=ջiW܊ZDh?uw=Df|Ta6 x@Z\KR#75SR۠o$T	y:ژ$QZ^/mOۧ$-SdHߡC7(?{*iSb縴PK` Cx)Lݠw=尒ya鰓4R y9_
2 "zn6QJr .{y޷4HnʻjVH݋LȶD{I:%	:Id:IQOvg(j{J{*6D	YOC/,HדAN&	3yވOZFm7Gj"3!ʫ.|8#`
	(y|,\Tb^Wp
?nV>	p's`͒6cn -P$AQl׀υ0{Z9,bHR1G]ԅ.߂P[rsE<m2;Μ,̙}=.A9:wgОՍMHJ].$E&W[CBqL؝g
&wK݉Q)\u-rEi@7^
%P/|/_)%0_gqԗ_*_KrXίG*~ou欣ѽ)8a(Wꯕtz9].W8r(FWiquPp%
ҕ7_a|@1m{úGU/kYz3zZj_	BjX
=8mY1C3`͡*8,lٷG'oZnsiGCO-j=﹕R8&Q07keoE}XD"8x#z?Fɾg*,-4蟺:9)sYY@s'$:xwa
c=0^OFf <7x?opoÈb1_ZNB:VNJBIدB_h7a' [q2lPg2}[%Q::$a܌˰`yG?{&	/jK%K/NS2Gm|8qwB?uD^wE36'C͊=lYn~^A2HE}"͸֏zwCM8Vy?׿_l1q2p31vcD2Bm0~|!ޫX:ʆ#|?p؉7b{`fp>	@K#Ux
76/#Ea8gTm9Q
2	ruiJwa.ҡ__U
myR&^5{N"πv@QG6,mv*TCuga2֦h]
V7E"-(n=@8c$	4"7[߳8ZJ}Ƶj盓Bv^;'PCP.jH{mn-Bנop<,ee.*+ЮMz1̔v/BFw,NDK5U(j}o'`0?,HY8<-Oi@4lg]6k60k?w*[**3ɴsBz{MPf8wb}3qc1OnFԄik
q:Y6!j4	iAʇ|+
eíXL;3]Jk?owMag#,+hU\Uu]q#<ͽ:~k0V'}e-+ףBj5'2ܿb#ɞPUVsI ~ܝ1ktLi
߇ׅ3ZDkb­ ^?wLV7Y}
+Ls+(X%Do= -0)0YER8{B
줟5A+Xs~V7g YyM`+bgEȳ`mSXg@{kt5y(f
~֙0Ϙ6Yהߦv3X(".·^xMeџȘ
=oJA̢1$xQy׼FJ=!2s_pX+r$mGz- MYgT#)ԀkM>$oMT8תW|dcb#])@R~9ʅZ{H$ډ<5^ ~|oUe7r/ZvP<QL¦֨f[x555:[s!iּ,*W_@Yz6gH*π>ΜsY1g!6QwD9{dN!VMfwqeRT.+'v}x6&nt56Y[k'N'ɜh@ט+JTDUGTF*Vs1og)DSaG6ueh%$sB2c#!߼ CjyjŘyl$6YfW/ϯ^^zXE٠
R
NQjSoKKKK͕e6cS٩ZL	D
vui'jj1\K
s|#AOB.876.B~rY*)Щ$:q#
tXXCS2WW%uȨ6_]M7ӱiUϕ=;Q2]=3"HLZߊQe'Ab9K0A~ڸ_ardw >tS.p0;al4V72~LL\vƒFwvkQ-c\bE&|ŝ*GF']1n,+R*%C6@Rf(`E
goBOwPaZAQk
?ށ֟`.\hXBVYZ/`%W/uZ':XX';ڹlǪmΦ;߶;Ʈjmgسvg]^vW;;f'5iZG	\B̼ؼp8h^Jt|Hl	l7bSs, ,7cf	m^!c\ݼCDIRJeR4CRdr/fIyGl$,C󤤳9#,|GMG&s.P&\^0.t9p	c\Bh\<ђͫZi!ȱfo>M*>?LA,v+He<+bCf+#E7*@eN27PIX*P}']Ikq
)|˵2I9=k%'zc&.|Ɔ`en̨MRݿIy@e(*Cx ,CƦV=QINn
ڒ}}Y$
V摺? u~*Ged:$0LS
d
YVTEYؒM̦ba6(lc}V3+%#@7122Sbv$Kw2v1 Ƹ6]V_YƼ71[wc,E|bH08gcWC]Pl
	Ş#p#dO)tcπLXlυa=/
Eվv9{+x۾>//p^4ja,j\&Vbz۷lMװm~ڷelf!>vug쀽aoAm0~Dzͱk@QfF`xWg	0l `y50xF^K,.uxi90

MZF·M^

_lۼCvHyz=``#IR}69ۼ.l05tmP-b7K^R1L]IU6C88s)@6\)Ok#U6ajA'J|袝!YgS:=	wWa3h7A∊Cz9Jǜ'qfw
0qGP{5(׽Xw]XM8f\d-'KSh{*G]&R
W2= %U);m<톐>	j*wndpnR 41h*t&ϑt=xpq7<sUD.H[x5R#nyFk^O0"xA߁`1\fWه|ký
<kGE_	ډ0+:!Lv3D0!ᰳDo3%mL1\XUcyHmڷQW	[&e(9B2BީQHQ	<*H	I"`-s9mU@Iܰg`||sG\
:1Ք^ꌺ:h흈֔50&ɝbt;}Z2i=>[&<aFcnk^AEAtn$Eg'J`EW0]t/B<'ހvn~\ҏy
!loP&yqß:HU?
Q[2RwCFp6MljI$iϣe(pCJ!Q c$ nRRAK{y8H} (C8]T1Fag41
aq1B!0&jk0hHl\yG.8514K,^*gqP~>G^uJC:M"|Cn:z
4^BΗפ/"C;ݼT~2J^@]5#3^MYqh#7z!Gnhɹ/S)GaJ"	L*	Bg*q։]L+YwV4~!~Ρ6Pxo+&l
9
9-O|ԐO
;ya,g"1izNZ P1L+fq.L`bq,Rq)\'6EXψ%~+.RN+Y@,c!q53uLدg	q+7d췲1b*V+VjHaWJm=#eaQlf{xHgH,k8?a&(vy9adv<T6_sXΊ,j)W_XmdحOͻ&9i̾)0@UK4C2N.,'MХvH4e=0u~G@x$t-I Y,0!h"y
yjkQ$D,hr'ҊGpx4X6gQ4<WxOA7OVN/tu,o,q;x"/O
H\/pGd4n5VJ
TB߷9lOg-2f2f;Y1
6uy+miYBAx؇4?irKZjZ{%Mo;)YVL^
7!m{9>6R^K4noIlrXSc$Rkw$!ir<]J/qU{d-o*O+rxa]*о:HzoJ审kƘML67AUrxSx7exRS|EE}!4&Xnm^Zi:Eu1)#Ғ3"ko!Xl>0H|#şa+BO*)$>-AvO&@Z|ĿUq|%3&N8츙qGcNŝc	':
q6҉I1c al"e>
%Bه5] [P޾
R+(ґ¿RҧL{ˡz}v3Gg2Cs&Yi hΑ0!B,EgpG;@yO!ӌ=m3Na_d}& n:I};v~3ImC+{ZQlMrH.ok1bN1Nw:BEٗe7>X#۰XiU9>dSdS

lGt2NO`L>TBݑ'G"m|JSe'TimB.q9eU_XvU#'Bfj$xƗ N~ e̍0^BvHFNMfQae6L}Ns$q7=k)KäuQMn3,RhALuFB;g83֟%Q(Uf?EHeDKb`O
m;rjF#g惾L_[6c
gnePhCq赹"'c$Ep$zCiSpi>|P`6u
ڹfc8X9Xa	"|>g6PK   dO\S0ێ    <   org/mozilla/javascript/Interpreter$StateContinueResult.classRJ#A=7vMb2>&##.(DF!& .T.X%n5GjdsP[}G '@.a/׭a|PnO3ndӒcT&C)sD7yE@6FvȨh$L?JNo
c{m(r*N5Ǭ>WE"y2^J}..CVʽx ¾ʞ_Eܨp0MЄW	Y<y]i7|a9ERwB$0ʄf<c;G-ˠl7YNXb̧Ps^ssJZ [D-뵗2,`H k,sU0VY|*c+PK   dO\h	  X  1   org/mozilla/javascript/JSDescriptor$Builder.classY	xTWdydri˾H&	AIL
Y 4,4H(/3/Ƀɼ7VQZZԢ֥uݢ-]hn֭x}//m|swι{{y*<D Y%r+PK׫zzs.#֚1ө*+0E`J:f޶}f	BCV!5\!QB
n5Q$¶w75eMшaƌcDcZqEJLt-FjZj%&ðha31K YI;lLk6Oc5,L(f3j0y,b&Xm):Q*KhNڦ9*&IaxD9BC5Z}˚ WMdjx.Qީ0ɶ-;寕urxb3#5jR"j2D"Ǻe4kD
j))nXC7}cDz s]\V>vFE(Ǻ5KzX[:HwLpVFXPj,Yb&[;v2U
Rٱ%P!m(ՔL.ĠhFe;\`&ڮ]g[Iff4ӻ$Lzbm9/ΐVskh{`V9L*2-UѨT&$,~9r,鳚\$Hexk15ͭTLJۘs63UwŤaѭ'bPݽF \i$MHua:,S==1M\K̎(H}bPM{4$ CNoF!iZf$8	KiiҢg^V|4Y-O`VFeD3AIUmo;Hhơ&u	B5pĻnx<O@,vPx$ޏP4N}z\`uY&]Q
>:´\k\A`x%>)]:%ӌ),
RFg4	0כmw>+bvzWpu^~G(NqufͤNҦ#2#.LP!x[X؏:^v:'[͘)el8n|,Ti!=bC'U<*[Ť,tͤz(6Qy0r^qux~:ܫ:߼S'iMI6rX9'3Lv~1{z(I=^fʥ#zPh6?mIPqx?l%-&ҷ\8e'SOyDATS\p&Oa舽նY3af9nnQHm!2DD
z	7NIKƒ
sK]Ji
?0 ~?hğg:1cnU9vw&Pߗv!uS w5;ch dϏ.~lXnA^-15DD/ҚgR
RF5T\a, G7f>CoӖQ0Sw)azA-=* N{æY
0]%=%^mÛzc)|X)Ϳ#I '71eQ. b1
	hϑ#(rPE߼iiBbV83j W1=ٌ
`EXx BjjBhlb=*EV
ףQ*K\%<us>!?>OO_cvvT:`	,V(!Oc!EbO*Ai4iPB=A |4$H):M$ݔCo|FP[yO+jWSU&0i9bVE<@N$^8G/=3Dk:BUK	@2/'	"=f}qyQ
$zu#x&x-}TYuP;VU	>x>u
pjتkȮaf/zP&LT]~qJ܉!wジO8<R#@%kYl8)꾮J ǰ ZO5//-gEa%l54h8)O
Oў1>B\"2jFfn$y4?{#Dho\;,AQx5l_24 W>cx22ԓt:N#X
7g^-~_/DIo}xĳy+ PK   dO\T@    3   org/mozilla/javascript/Interpreter$DoBigIntCn.classT[OANoKJ+ȥE4%j,!6i e,cdw_52m*AIw̜9 2)?hr]aDH
?&r(X00DX;O28
$
/ACBaKyJ?!d0qɀe2	u;HB^-v۬Y+Qe\!̥3#+>Wm^%]<dGe1aઅk6C}yWla9X=B5$4'[ξzє#=h[CSF|>0uu-
yੴϦXHc֒uB9&L:9wߛW.I7+>D#wTT)͕0Ԓ~}`oy2cҳxn^O/$,] Ә&2{
ٌĘ_x&h[,[S܎	fpg\=A#c/}*-?>]`"m汀l,-bdQ̕cy5gk<33N2n0>d|7PK   dO\5!  5%  -   org/mozilla/javascript/ImporterTopLevel.classXxTuG].H,<+! FBX_VqjWx:?׮u,`b!1NӴM;m6 ?sޕ
Ν;s̙yS # ./<(>L1c1N}&ͮtMKa
q3H5J$F2'e~.IƮ
!JeRksZ՛4TjNt5G]Ʋ! 6p
%61s
*Z"EH-|@ެ1b~6ꝛuJLt"Ҿ
puj
Eh+Hz#p+r&le&;jI31?V0ITЖT* J
!#j	,Fbƍ5D:e2[[>HYC$iC,xk60*35̒Oz̢잣a.	\a23rfY{1_b@@ŨB
p#C"81AʮװK(W7WᲴ̑ubnҰ[J"2Ddis nmg|ߡ>aEsB歵nČ8ȳAZ5-\zJ`{$u[%۳y6
cUMVkj+=+Z(q(Mz*_-bc[4t`+}D=Mzam`dnw䇉N[m9޾`ڐ'R}O;SSϘSE}i
!K',}m]vc!펧Nci2H.Z̓#];XN/5f"N<wrў]6Ik>j>JDM#Z)89<k1V;mjI}wkn
^o:e#B1_'+eD.;lOF؛A<$4#QbHU>Y[%c8Qi
A%ɝoՒ0
ZV`^#Gd)QXujM'|xT1f̹I#2qPY=+^85Lc.nmjGG
p3JS%c+cSs`$uq
OIV)sٝE	MNs4wT
2tgP8Yr5A++Zi shILjd/xm
ꕉI:}-DLh9%
/;USݛS>l)]\Kǿ߼w
ߗfVmSD`
$fUYh\Kdăz_˜t3T/Ҏ5\`WV_HGk6_3Wr5lJ]
o
CHC	Wlvtw$f6$0|#뿛4/ڸ!75z>|>Q*:o)m7RYlruj$S.rR`2Si`<;Z(C~Ҷ%&ld44uwn1[.G'x
mթv;dQ

 ]d@#Qf^-$39ͽfezra!-me &LkZyg&oG_΍+\.h)0iclrF!8'E,W\T*K|EۘLdq^|\i"4%[-[=Pd7+_28';-q^1|JQYB2iR}
`μܜrONʛ<?ŝa[O^-8Jns=>u)tJ3
BҜNFe\d8H3`.kHrIXP3\v(CF~Yë
/։VX[D[m[gD
:4FnYҽ:˦z=f7&ۺ~k7iZ$7jIWl<(üv;WEEwH˷_g߱aJ9R[
vȥ	8B9] JD),ٓoZ
NWݳ(f1f(S=(LaҒPxtZNPi.ܘGJXk#*[@^l
Qe6ВГ(9 _0<cw= /-KQ{Y:!(e=uĵ}Ӗէ,jAgZ$-\z
'0tOa2A|ʷm4a̐fEmsB8	LzNaPɾʃnI,;d
WG.!{#uA=b)цtb=}2݁Ӂӆ*[#rgQb4XO\q(9^Y^rP'[mȑCm7 X͹eN~qn+ K2ҡH>#WVfP$U=}n>Tff#R'rWd"Fr/g*w4U+]cwj`8SLi\n<d	pAK9gXli"J<ȻSEi~TU"uȓ0j=Ai[S[,|f5W+>`aozmQ,Zre8XyP,n:сilosUgjns$v's*&=40F#L8|qF!{	~|}sT8lBQ!n`7aGSFVt;t˝7un)&6(r!^12_˘M#ޤ*ئ/<#x.,Y4
Cg9鳏?;|>>#)&'	!|'*dOgH2X0#|4r]r1YTҤ)P!v
U*"&\WTdG+
]I8>XNWf\/*+fZÝ(q·DLUk![wjM3u*fY1*f+,Nl{l:
_	Ek]!D%ɟPR'è}f<:A"p-Lu8C=;Qн_Eq	RI	fۣF_g6{ɳ#!.JTorr&'nR(b,]f-	%Eʔao+ޱ,y:j:cVu	"-R_xϡY$7⛤zy])&\砫s9%<G8M$X5``֗%_X/RK4ea}^$}1T-
OP	kcCm΅rNc}_^o!t@_V?0.9U*x=gSGYºM>['B>0?f:	WY)5)5VjWξV9˦tNrF1IZ8M6!xI
P]dA^CWhr,C~ydYJ,>UUUS2^l
UT$w=b?ߵRaUU)+!Q#ޠa*~?b9"V>Ub!AP/q)F\ufGeLc)zfcV#62^cB#\:_yYS^ϊpG *\7?Qoen

~<,%h;J+lGe/_ߨyj`GHչǲ!v!ZTZD>S.vuI+z*W"U;wʄ8!\gлɝ(x\"p.$V-f{X6e&>%Y:,*$V{[kmP&PK   dO\Bdp    5   org/mozilla/javascript/Interpreter$DoTypeOfName.classTmOA~/=wJKDE4%Dq.k*%tvKr&>:
tא0Ò}㺖gB;p¬y3_Btl^յad-l09Uuk3$Cao&_֥Z^㶨Ƹ	瑉g7%(
XMj`".ȶ&[!M֎˕+CxMbn튎ja&rov<4C
lI[fy{oc`x)ۖm\o&bqaq*?vG~/C\DV$Rk]w};M9nvn{,}H{w;kMy-H"j3?fN`<jP&lK42̝!JsD4/FjIo`<=k6FwpW̢p|8DlC%^1ZNwL5٧Ha*G{Y1eQ¼қi+20ExK
x@X$.i$t^e<hiGӄ	+OPK   dO\  :"  /   org/mozilla/javascript/LambdaAccessorSlot.classY	xTof7<d!!dYP52&3,lŭ֥ZVQUjVjj7vj]LfH@O|s﹓9,FdG,
*r'P4vaEz#p=	jZcC@4ڨ{cM--fcS51PP 05BWFC[>PE,zZoOKp豘YzcPP:2C;!ؤ`a J,(F	aruӔTG9EՀ'P
V+EcG4m
*G݄=	%l*L#d!3PJ9QB@-C#bu"+ZU2-K4Of֠rhqhdPħGt_q(NWqhtH(Gb~ۙu,
cd5m	vZ4X	<[E]ԸZX,RE&-!hk=zl[*0c9Zb'J0䷭Z{U۱+yeN8GX+P4 tV(5EnNW	Z%Pq.m%\[˽9w!>"le9nP90ӂ^iKz0ޫG^t<zCnO\~ݠ;!2Ry66n^vN)G ^A!v0TqeH|BlV%à2p`XY8(تbx"M$Wdq8qu
G#*v2[
L֩Oz)\}@vΠrMN*	Uq|RImbc)2fjf4&pqj@0"v<΂zį;"r%Co%&s-#rp\?}3n?;p۱>NY9pYJ=o(ݨ<5Y-=Wn~Q6Il&¥4o
V
!_Ié,mТw>݆0
H[U4-#+NuZY]U3Xb/ь9YN(eĻʫF6txݧc^U<ɳ.U-t:F5(E6p`8G<w
󐊧gefAzN,?xGH'@2><d{$TsU|-Qʌ^xieiaoa%
D?1Pm)-ޣ(T%czǆRr46zO&*'D4*0C)LI[vkv鑵<
݄?{JM@P]
[MVgAU-Mq0F4秊Z؜Է
QYot$'?XJLK9@"[y"Q: iS֙RKjtZS,\ZN"H]˥=6<|êlN0\.= t^q)Pi-$iTz
cU?aa	UaXnpQGa [*NaE==x~U{n,ha4DemJQãXe]r(Le))g
zhD"&ӕBLɷ-c@w3D\z5g׳)Tޟ1MpM4*&+Z5v Fɭ֝C~f8ePdiwG'IDǑâ"fRc1/c2HUE4i7X+t/JaLT^("8e;QEUCzg[1=8((OWiF?Y)|z瑼Zw?VIBZ-1VK̖V_njkuN!~?z$>Lq#Ut>d%
)d0)Ls9 z%ɷ0I},}vfCp0nr]݇jn}ps[߇znGa}p>tYGAah)gs1M9v6~G=^<cٛ'GI5?մlΨ'\1~?}VJ2._W=ICoԆŜ.p~o&gP{`̵¬CX	,$nmPQ4z*aJ>ۃ)	yCa2	GP1<#c:`4;{jOEnS<TnVVrmը9k`3.v\ˡ6tSЉ.e4Pj(e\'z،k.?&݈Lſo\I·P,hs8,
Po~;FnaSp@3/ɒnUY}%G5p3dGx8CcˣSd=~&g"gu3Ɛi3n@oam8H\I1{E6Y	odɀ{ɗNG7`3莁qHkˈϯH$Re_>MW;IMj눞`J!\yA\CJu)ЏOc=$U4韛p!e;]rB4I 7V&$L"$H*#LHn!$w	iH;&f]neٚ[fq8TvV)	C)ktᙸ`L%c0cma.14ݭ9̏<J3?eon.[v~^Z+X. }/݋{o?wVt>#RYd'<"au$Z~|ye^K\bra9)&])&'Hߒ"d@&ȾCxu;s$?aLQJ1>Myk
|S0iJ1嵞2w^f܃<|J#wQ.LrєqЕ<#ʉ('&G4#F3aT uo*̈́EL:Y\yJaץ@#ߤPmI$T	"F5ULb*rS%b+5ƛcjb؅<Uev@Q;X.f#@<r1eb'@ٻPK   dO\              org/mozilla/javascript/json/ PK   dO\J螞    ;   org/mozilla/javascript/json/JsonParser$ParseException.classJ\13ՎW"sa̰'$c/B^	^ >It%-U7Yg%7?bn =MP(a%NDLWFJoV~Pw*\[hF_ &n+(rɢmms\A2}rF[|}-T"oH|G-`h
wdY{PCIԕ۝{an2qYGVnssg'ݹ
L~Pga9	}
|i«O(oj-m-IП,g(cW=.pu.AQ3g(q=KǨ1fC.+]z<μdSӼBgPK   dO\o  [%  ,   org/mozilla/javascript/json/JsonParser.classZ|TՙIf2	@xdBA  HeL`d2g&>Z|lZjckBDU[W׶nc]nkF9+4?wϽ|{ǙOX,8a,d.wA=vKޘ@vc -V́9v85B	_Z4zcDá5#QD#i;ys85H%{3δCA&K{cpȁ	%޾'B;<=^O(l{B}(3I-iE`ebipT@:QvL4hנ?#SٵU!iiY/шWpNP*_u>kBŜT5Jxáh_kg ^!q0OY/0G3z+ɧhLŢR9(B
PGu;Hb#il
R@АEN7hhL{2
qCήHeҔ97\
͒XX~9ۢa%VŭnjX#PU~vMC;֚,l-hNaL7B|iFQ8Azt[kˉ
责KE(0cJcquah,P!K~='t`@4*#Dr_Ұ
AN'
z3%/ȥaVߺHkgXS1ٟɯ|/?Kإ!(0'%ǐuI..EĎWd裗+Z[^&i0_%eB˕
n'%Hl5|h'Z@X`:\qxB_,U<W?PK؏q
Iv13EmΔp7&ǢZc3
Qܦ&ѥ|#jX|M!P4>E0VEC$ܯӢYhamixbEkbǷYuFN${aø~-ףlGWGlI.MqH$L6*y=+qTK4S}X )0EIT<ߋGgG"9H#F_1YD[d]Cq;Y-LBpOfǓǟCY$uؙvts}@rj:?lNT]EԎ4+^NkVT핌oN^g~_P$I+Cwn9VM5I %wuˊTcsvYx́*SO,_`v4t7punǁdd-NKY+:ZBdB{?HM3+N?Rb#:?}鱾`7	<cci^:i氏>
 7ca[ث;H@ e8# @)-煝!dDc6fɣE^S6gP^^4,`qdu_a"m3Ͳ PΠ*RE7aѺ-*YF.0匩.*Lj+G#r
>cVs.
OgG/Hy%9W]v܉v1|bRmv}Q(%ϯx_2F?s(j,vi%-}$A+gȩ}G0-bCW-too8"I
yÑ=x!*³'W9R10;b\q.OE~IBF,#lwJаj=mކJf bѬ]
#*Q2CȌ`9&mlYM`413u6\h|4Խnuwd',ǿmaqCTV򎨅(=
erc,w@=I1zX#|̻8%$
6E'+0j%P&w/BE;ʣre1AA**8UPJGx551-"ث	WGToRŚ%uv櫍|$sEJ.꛼Wn&66HwLxW
˟DY}y_`Eμ/6gzy
o׭y %rX*&9J6w:cʧ됧FeG9(Q4	,X	?A3^_xl#:&ve1SPt)e%mMۤ>K]`+Ly
a}[Ӕ;*?'ȥkgu$3WU%]wRp*^զaQd;`yN	n2E-
u{k.p_[}ۗdO1J>T<^R;nljɪz5qEi7p[i/[^,^3q%v
؅Ѓۈ{Ћ<Fp13G/s؇ϸă/*<
J?(,1WBU*lL^1P%iOEGA9&l
-b;.=%COIӌ&~1+
A;-l6>@ne*4ŒLE~'uW1\8m.M=e҇TDJ^[y1s-Qi)[v SK(EaQb	jAmnv'6nLxn"bnf¼Q}+	@.NI߅kp 72|gfyIO2@57+<Tr.\<.C]a:Az"r8/'Ip}*4_ yyHd*	->ƤkV%iSZĵpQ(W%ow>$'Z
E.)D.
CN2_z!Q#֪dX^+b+Usf8ծ!S׀ծ-	vOUo]Fi<\3vOOJEB>a͚m5*I|κz1'acϾ\9gONeSlE{0=u'yCH]ڱv!i\Rz'"bcM&FFzO|ZtZZ,Yl	\agDsh/`]g簃	s?xSKb^n"U1xMoF%Kx[S|~-6BKy
{
ڿ	Qk@?xNPK.>|lO,,ǧi</rXBjlnUgS߹*-~efIq4,̔eBh*R.Dٙ-@051&Xe꿷|;D/aypN^Gh*v;W>8bW!/vs9
إn56	fYȿYjςv?47RZmEEOAfK3eK3#nWALrKrܮyĀR)?7Ua=2 _Rln?jRJg0KgӕP.h'QjԷ~䌁}9qښx6vs]vQɶ; (8^l;גkC#
1['6&8aV1D1:D).f\"Wxp}7s@GDx^02j:g1<b!>E6jb(
#& Nbi1`yV	]D\+ƸaL%αrs0UUg g6tb<KT
|CAďr)41qHJ'pq|1;)R&2Q	3rт\f":Wb
e[S|A-Ϗr$1HTMQbjvF_9Xc@\n%&S&35,gbXf@JD>ũ]cJEiNQ]LԬl)eSUn@3v]1lyb36-)fcٰ|46'WB|!>]`Buz~M*TFt*
yV}gRF*ՑԚx/P>(*1#A*CBT LR=Ms<27&;(oOCyWvP&=ϼ{=x`;2p##``/V/c
.WBq-.%ЙU,؁
͔Ԓz:dt^x7х)"+95F|?ףT܀yF,7NܒZ٥ELTϣTa_K0B+PP.m>c*b,kML?'j]ƩjLj
5V*WY\ >S"֟zLPK   dO\ߔ      1   org/mozilla/javascript/SerializableCallable.class;o>snv&Ft̜DĲ̂ԢĜ̪ĤTD$fg`ad )IKOJM.ag`cdaB+#Xkf>\Eɩn $6@02030123 #'db PK   dO\M    /   org/mozilla/javascript/Interpreter$DoSwap.classTN@nw*rY,-a
	lаlb
4i|6b(Ng9sns~qt!BѐEav}BDhA^dMt(h[{UW!C9*CfdGAp
t
Uطa$};u)4l+H74tA	kMkV@/TЏtF$":600CC)8T;oh[-"pɢ}p(iS'TTȶoRyU<URM0BYG×yNAjA$#ӳ_q}YG-j^wd!{Θ)K%M;60R3\
fx7cWػIT<BUboA .ziH:!#N~o&*Wqx-]܋
ǃߴ	c+YWr1nί	P58jr>aNff
90_bc7͍wRf[BG`b$217([9(
 ~1&bl0I)ثiX,$I~N$S<epp	"_PK   dO\U  Q  4   org/mozilla/javascript/Interpreter$YieldResult.classMK@MMcuVh</bTP)xܦKݒ&%IWD7iq6*μg̼̟b˂	݆,AIx'}c~c/sw!?O2	CVCބe UJ#jW5>F`,aZ3p(J]l2%BQB}I?zr-cE8<і
S^T'4k;N8dÈ&M#hoji(IIV 󞔆Ed 1GjmT4STZ'Ӿ:jJw[&wPK   dO\r  6  +   org/mozilla/javascript/NativeGlobal$2.classSMo1}4e	 "R!!EP"p6.]yꯂ~ ?
1V>؞<_xk`m]ޚ#hQdNVOLґXSx7ͼu'(a7jHl&o
S&owgVIVGe)c iX"ܙQ^]mSvqǎ$aO'toJZfBd3cU:֯mB>n>1	Rjir?&P^\zοDeN
/_{2c̻B/}{7j0	LP?zn2mc;&<ǭmV|搰ԗiuEQȂ}QZ@ ;W'?ǟABN¶,GY\@Ip!`5.`!.b_ƕgXDcC8z*C<
\]>Fv]PK   dO\,c7H    0   org/mozilla/javascript/AccessorSlot$Getter.classPJ1U[/փ{aO"T4<4$OQbvP*&$fޛ/ 1\YWKB/z協u\pyG!K0l9.!)<ämj<Ԩ+icdP0kD2uΟrt;S%m:G26NTh=#x$)N.vȔa`[-'ϐI >ӏq#>DLuxa=p1}dPK   dO\&^  	  2   org/mozilla/javascript/Interpreter$DoCompare.classVSW]Hrs7F h"R
J%M
&,d2oNuFgTδ/C>RJ,d{wιw W@A9|*0\0M-=(9t풭ӳ'],;vV1ij2CQ4ͱy "aI4'lm]gm!#V\O3*=Qqa_97RhhWAG96膝J,-pQ*)<*JMύgn.NޘН9bTA'pt8n.C#
zIY0R龜rSbv@,S׊fVeX/SAyCxG#eU&R
=1qcH%\GzXYmֿ6hz9*yvV1cM}.VC"Qª0C,VY/q+Љ}FՈ2HY7'%%"G3FQjnuZ3VA35ې4["7BEKxR{52e0ҿi.Mj{#lJTW83ݽaŴ]P
wI8Wt@y)5۫yT{LՒs5sc8T0{&s˱GƠd]'a]tNeUvtB/b׵E+9oA<]WkzɁDQ`8=6$^MnyM~$xӳ%/±K	N=|K:
q1]G|"-}Dl,YB_B-&B/h[Pn^(*#DQ.WݴgNi7# |P@bX
2"BEN!/Q|#:8Sx&N8Mqn§##4ZB>(xDq3ą''ɞѮgA$ܒlcUƧtfˢ>*/-K@,ы0O\S}FW92q#8^~@k:)Ǘ-A}q4]Gh?ŖO8q[+ecDW]PK   dO\'(p     .   org/mozilla/javascript/Interpreter$DoPop.classTmkA~65Mm|$Mr`_"@his]]hH"g7%3;''xh#Áã(>vG?{ċt(4nuDcOQ	x0/wa[\HA`0ɽw=<<v'<l`Ŵ,hшu-2TS<^*rx8REy٢!z/6%&@Ve׉p"ixgM}>]n-ٞ0Ugx":ֻuCLDTu8ĮTj)"j=Q"-<`ؼ
C!Mzڼwc,/sTJt՗.4%df;}F
{Iv
Xú&(ƙ'dIVf|E`}#+XXK}g0~2nL%_JL97+iG5æ7Bs^
	K
&PK   dO\J  Z
  )   org/mozilla/javascript/SlotMapOwner.classV[WUL%XBZL B)PJ
	I.JM	kfb/DhU>\.chgov @		^>:+(ֶsbif3x"|4Kh0X1vcZĄځ˖+֊rBCjp⎐"h|fr&ybY@]f@}[%b0nHCvGF/=LR|U3x)~UG{8Hėx2QL綊Z_1hO=Y)b9q
Ejn0]/0Ȉm
SC'*zSs<
O0.aBgݸDnbPu*UFm`l2qC.ZGT\HXܐ&E2\ƴ& Дr&qL/14>u+*aL|c9QLųb6]HzAݱX)q|JU0rv$J.rD{G4PEլWb/hN}QqP|Y5lR_3'Fg-E~X/ߤm:~"4;A]Jq0C1T
'5-T[^妵E	L	_2,_dk't8	_1L],"C2i(奸rZIN$^,+ŶM{+.u:ߚhN|cs4hׄy`qwts8mY"i.>G`Þ~FmM8XU
8`ijrM`6eu0񔲣i6mؑ30	.Lf!EN	eFHG|-A}C>Ƶ1uCcDI<BGiuHGbgeKgILe:cSX`iأ:xDywXک^	F1^-,zGln>'-M`r:j~7~l؉;/`-8_4jaws1ICǘ7DDqnrv'xJw$aۮP!n J4KZ9Zw~$FzPK   dO\`])  &\  -   org/mozilla/javascript/NativeJavaObject.class|	|T9L!1#$3ZB $T03a+nkպkkkA1J*
VEV.uL&D=s=  L". t`)ЊFC7w7\7E+Z,nZW!e_Ȼ`#y9=Qd♼(p2 doV0	S4-G0#,U;>A
u
My,<(Kq2miC?&x὘Vc@&d!Vڕ `@6dpY'4 TA1؀!0{xppw#d'ePX6i )ji9qɉ
63Q70 xN@֢imW77Yd5ĭ6	ҰGͭ9΀0%hDoJ'0	&#d1WK@}/2X67yڜ房!ۤHj4B'NB]PĚ9qDB
dJT̄2!=ѺqYaoPټyUռ=.-
΄lʡʷE:TҴwDmT"̅jjtX)/0;]/ĝ^uE,SxsK1c;`Z`K
azTJTV[RZ5uPπ!%oG$hGv,2S~Vj)Ie0Rl#׍HcnDu?PLi4  6
FbFd& 55fڙ6Yfuva0}##4방gkl"N_:DX3Ԩ(M:]py
~};Euu^ܷ	ٛјw:\dp	BN#ӏ(l7D6G	QMp4MAe:\no
Gn|P$TOnWp5\+gwX;sp
zZA6+y]^D?Hd;$ m*ֱ &qp
rt@m[ױGG	yag`?2c\P
>o	;4`őɱ-aB.pwl.6UfJ4Wb{Xye愵ކf``3sjD4W-67DƬf3<gz
ec1jR"SmB'?*1AgP6dDxbi}u
^	2,lNxƀg9vƦȆ
a/K,u_ \?tQ,!(JR?lVxˀ7BAF˜|o>@&f5fWsl-jy
>f,u!7[=%C4P|
b&ձk}!Ӻ	{5W%9|aJ7_<AL_8	fHgQC^P[9f^uYS0LlgnK
8,=𜐿/Fh 	9eejKVUTJ@VcB@`rʞIDi۲&c`IyM5jo#=jZ71BŁFode~%2mȁ3=vEuŦ~HcH7P2AVD!t­㰞8&őKvrcɍ9Ժ?\
y7u 'g([q9;2ɜ'x\akhΧ㸞Ϫm' ?,D&$L~ʜ88_;-S+
AoĉSS{Oy0	u8Չ3øZ8[zzQv'VJoU"7jq%H0?ՋYrgih*!q`̑8%T|JV^-{8eIQ.m˦&\#ב76}XABE:.л@?gFCW_Moy. g<z$V؂kI2"ޡ9$R+jވ͸MJo\sHD:Ly\oܨQqp/
<7w
YqH0KByU<h
e3UΓX9%"B/52|23G(eqWUY""\ex-na*ʭZ;Sԡպ.o0vYTMի2ވ3 /ʭu`୸:Kmo7`cS0{f֝==]HP0p'S֥|
꘦]d#r~^L»w؊{i70DE`N7TmU":cChNdnl/ebEʮ.-=>$F_QUIuQItIuiAQɒ%]0>0l9IkWm(
x!ټޔպ
'GHec3[|)|ZGb>g{!uaǲ
|Aؗ䍮A-3|ő'ŔZM0߇'b񚁯#'3H0VNV]N|UmM3@]4uILbfephݳu*H͌?'Sq92f.(iI~)vL.p#Ri<
d ~]61'?f0߇mg0bI3&4USAPlXK37;&>_v8$
J	y4e4("AxiPg݅Hx^	/"Ņ4H(,'t)j
xD]eq|&yhazM/1[3tA'I{it(Q,-4ـKj4쾛ӄb.``ܨS]]5TJ3Lg!L?Jki.TLu0zp\!X\l
4a@D? sQ%U4ǠT!8<6bb7JڻjN8Bۆ
oCA]/#WBx:U
13c؎Ůd-6`4HopTb@02jpND3h9N k+Vxylw+iN
j
Pij0bf*VF3;0(HJE2(Llb{MgDY+zH61aeUܧfp괡C
DgXNr53
ڬʪJvlΑs+wsy+~m®*q+V[eytAtc$ĠL<"4zK9k≮0J:B6<un+-{zn0nU;ջl$ppVRj]*u{#c4+Vvr*ݕR%ѫ
	qN0'F~MΨ!_},rSN^]Ïp=vPHelCb1CccQi)>RA{dd7B

tL>v!j ۂJ,t@m瓅ϖ=+FFKc5h'gi#,wQoqǿE.Sd~eqIiYeiyV_riB\&)c%Ҩ7EXibYKjjΌ*UR4Oz:
).X(zЎF9F'#/-)\ԖI]^e:ضvl/<u1/LP?Mfjִ>3ƙggj9؆Z/o*[yӋK9Z
RmEVJQǱ/Xur!m^qlnOq	[`31vE xdT$#\>m\|d!_,Bb{+[kV%bJw1>i{Ǎz_/ҹ0ֵr( )`&;
69ZuR/+~)!ׂrIu,CVI߲.nI˲Nka?*p`Ro_413S*WҪ%؏(ÚpEyx.Yccm?йx.IZ$i(بά)d#ދqjR4X
L{M{L$sjRnq LLٛS*[A^]]&ͼւɐO?7BqW{MP&w
RS8(z wtn?Tӻ,h/YgOr/Aɪ6SM9lWNAum&Klyz98蝘J	'5l 6hň:㏋MG =3Q
euǱJ8f唺\鮒$!cؿzuUa&̊ZWg#;-_8`w$	y4^ꛠչ I7ZܥVViͶn:wyFLbcדl
2g
7¬}rWw;yG۵WR&Zqʅp8/uSk<pБA068
Nǡ(=HOHF3ls|bKr_W7w!ޣɤ}? \ro^K*yzf@yY!a1MKYN=#L9|xG5
=
.cu#2>I%pcCɮpoN{@oG
aп335ϭy*n<mLK=F!qy'sJ;H	4E_5c 
ѻ!ÝvsG+kwxw"KXHq<x=A2ePA1ZYț쑍ÌAfG!IplvïB.B_S=o~cvXP2V8i7Lmyɼ)
ә(BE&/hܥa-"<f}imJ}L`*X+Ɉe.tMIJc|Fyo[~oa_Nu6;Ű ڱ#gf{Za+L< [nۡI
nk\fFM\2G+ӜK/ 2>(óT=
]j3=nѐdʅ{1KҘ6>fiFŨ税Te
UkRbEv)1V-pW;|̎L?ٱcfb˚x5!fV>ioq	]+yymxTm)[_;%m ICC^JSXXϪ!3.q1lZ$E1k9&uY6Ej-v N7ѰN~F<of{y+lρfïlVylYU[@ QgSKqvu؜:@֣izQv8i'͚5ff0ԭ_ⴟqF-A-㤝o2Pq4TA<=03^2bA`fSqS8
~#椡M̚a ?s֨U5KwC]@ډ#wW'>]힐΄Ä>2!pl:S#&q8a!IOnk+Z<_Zl73C=*NZ*KOfmKii<n45ƌN-SX$אoF%=-`58yqC dFx*cRyr";ͯuOQpyZ`϶hsov[vlg}ۡ?#O>py=2ɖe; mY${7 ˾ہqN6ь3Lx{?pmWCBQrF@j[Ty_^b2;Wx^exMMTx=iswe!-'k.:×{k
)ndqe!Ҡ" cpYstig|ѶEjCMdJ<
UC^8Xw}\.!qr߃v[&q(
1	j-]t.$˞mI{dqʛPIME#;hSR*h$=m߃n6θٓc'-^p4S`sv{w|95vъq^yJA~΂ͭ`0_G؂wv[~mA&)hba=a܆gր-0ȳT A 9iCc		4Lދp	ɮD!D-xAދYlN.T׺`laVt^w+-'o?݋*=yQZtDps5HN"+mP-{4нveum
&LQLnxd#FLZnR\#&;ͻjca
ŕJ̃8XX`?NxDp"gbp9Xc	܂3v;q6r+ǰ
ù.dx>9k=ih%(7p98W3wVa.6	)Rlƙp=
Xe3gx.^V ǋV%xw᥸/j|U_-?ÛC
fi̴*)ec~pcfÈCоr8\ΤD#1v(N#HOq98(IϵZ>nII;=
GH?-W/(Md:>x͊#*-8YLW"/EDTI]T}:[EJ9jtŤx7d=0 w0l<y0ix?>lJ-)CA6`9N˴zkR|YӜu;w(.KE~#4rņhxe!ɪy/O+bqoG׌,=	(|2	a<;i8a<9(_`Ǘd|kC=Z4wc}Vdr\T}1FCٗb*Z6&M6&Ct+%.6}ҧ<bMse;x!dna[]cT7'FMgGXzl͖|	{pׁ?OgCBFit~nFizHvjs[6$
w0pEڰqW
ڊ-0׵l؂g빻7-!^ڢ&|+1ݟӭ -:jMÂ{(~˖)r8Wrw?aNi.cQOԏh¥]Z8nOzR;q(܏)oŭ^o)?أ<ءo`2le[
tmە,#+!djÖT2y0b[u[H0~+o8Gns~8
7xvBп&~)%;]ڷs	J"lp9?w=VV}dC)tx˔o1>;)>FdAC1'Bb1YUj4WS>Fh,ERWI&b+Mh*>@*gF%Q_P~C{"9HՔN540:i!4NtIxDCөjZIkN/3"j+(@7PvRZ(LmLOZzz6Ї6ѿh#}ƣL/mt֗9H:W+jH[@ M;}+q
i]hA-PMN6(d,iDI8Abu1fȠޔL@i΃iX<,`:uG	}LD=aK"Zbl)D߃s䰰Ei:%|?jc\V 86i,nǭ4ؒx?9eo$nϕo+:H!ntw0n4s7MOAҪ]`6EYOClЦ=1bh".H1P!"jn)m痤tkzo51*Jg7MXGnϣRF{}1^1<ؘYmVH[t
MLgktDEiK-C8$OH#Tc^"n!$#\622LI~mt̬tvigb^m>D3(42rm(qQt'@фbTC6?~;a0#C{at>͊8|`)=>:zY	_`e\MJϳ|iz+Kow+z!1O0~5ñ=Np*30s5j\A3p
?4%3Y6)/Đ0Eov2p䈭PD LSa*lɨ*YwC!8#nK9.
IK*Z30OtVt[UssMҳ͈<uwh㔢Y+Pz<nn+o
mdDmӠh+.9ߊ}UѫΑk_-iX-M 
a;(q6f9++<ixQ8BV6fc/JFXAp8&i! *ktm}߰L$l/MLLP(υy	}MLHDNkLǁ_3'#%f7M`>Ld>La>L|0^+*Ҹӝ[UFM$pVo	qthӄC<[t;?-־:J}Xp,Yh%H:iZ E6".ɊћeGQEIl! WYy}E@FS{^-OT gΈlf}iVn.zVi۠VjBkr*Dк5{hփmDuJ0~y+dYܳe6ʮ`*xXɼS8;=]2w0T5LVrbj~(V~6b-a-;@9iF$VhUK}a`xɯS9 kel6WAiWjYĬ;L@nXDYwbݥ̕ˣ3>Ÿݐщu,6S%nTb1_ʕuaLfYYYٷÈM̾3}g0~;w.,΃S_Av>.ӵc1l{lc&FT,|2:0=t؜t)/
K#V HcFC=8nR6uPahiBn\L*Z5wxy삇YLK
ݮzTԩ}WrJ;^d쒋x}(k6%-P\Fxp:짲;zDr^FQeLGW~_K89SofL6LQb-z&3[-LMj?mnKw 
讻q}FwnEnjܶ4j<inZ#=͞YE*!bSڗqX43nҖW";X_K[0V{%^{P2#i>dIr^fXDEʘk;R})Ѿ;13Iյ!f~'Sq?%6kՖOK9DJb.K,- PK   dO\              org/mozilla/javascript/lc/ PK   dO\           !   org/mozilla/javascript/lc/member/ PK   dO\^  m  6   org/mozilla/javascript/lc/member/NativeJavaField.classTRA=KrqAPAx
ĊކeK6nĿ*˃GYLXagzg>3~	
IDGC+e掰|9btf=V$4$uAgr~Z<ꛎeM+ܷ+*boi(Ol;T.$:ЩK}1e/[61z5_1\Ы.bO ]+0̆,m@؆L↎b8/EExvPD΄d/m
:par|rWbe-pwR)bRyYҸ42TRo,`HM%	4uLa5	P3ªER*آEEwXٓ
7Z1Jŝu?Xol꣙D
<C̡qS,)u$nr&[iX`>):(sgDpϝ=Ҫ}e^
K{%
9Ϥ4uc^(zeۦfjQ .#(ͣٯ`l}׿c8#-Y{ B#4ޣ:e410<F>o,/>7>EXBFU̅S`h%OhB%dd*3{`H֝$8OOɎ>4b|Lf9hU$̜hD2HzNVJ{PK   dO\,  {  *   org/mozilla/javascript/lc/ByteAsBool.classMOQәδB
JUce~Gp;L5OܸqeRLH{yޟ {20lEda[*컻ߋ	c	Xlu{pQ*ϭVTZnkE:af[Q,'7~C6g[5q_RS~k8aGOM	LЌȈ?6	סLk{UvG}~e;sq4&e
.H*Kl\5Xfɨpzz~C&˥>Ll>npeP~f4ēysvk*)sҡk#cs1^~:^v*`a_RK	lLg[X̹s	t
l*%)Ugp"+TOShߴ|-PK   dO\              org/mozilla/javascript/lc/type/ PK   dO\o6c    6   org/mozilla/javascript/lc/type/TypeFormatContext.classWkWWWaRTTHШX"Bh
b}^G&3q2j߭}WZZva_[;"*!w=d?~ThDFNe)yFYV6/~:n^zݎ<*Y(vN%N$,i'2k;GM+g,'TFCXG-tu<*JM:>OG"ayF.؆iaD@B"%A,~:&%%:^@3]+TVI6XեݞA
O$b?(]SY9JZ`^Ԅ@7҃5[rpte׼`&gNGZYN|hzj	5\|$tlĦ@N@ڞ:-oە,o~6Ug`L͕gmHEDzHEgE:vZML2(=x:=tc8MIYL1e[Gg742*FtټFW>&/M{3judTܹf18sNfja#PSŦjۣlt]]%4S_C⮞ޮ͏(
CېVߗԶ=ĝ/X2)aXItaڦ7AkDbS]tW?ٔ!frf>ϘöF]2LGscn'u)6ң!:U4dUn:b;iRD'oe(cjrF֒ATKƓّ~Y(x݄$X+S});f:z#hVqG*~8㌺YT,&
!5qBtrJ\
Tmsü!?RDYzF)wYW/t|Vueg#d|yEO~cJtwK;g㌌5wB>lniYX^gۆh5fOw6e|<`U^:$"4gXo)xmqnVE؃Zy55;sU_(~v
q#6cǸXV4GS\m|yki]bs|o7|*^CXDЍ8V1l'=L| /"Ϸ,e@H¹E-2`dOc<r6G]J&SXI6h(gPTA8.~''q8:>~;H
s9;'#m i#B>
DP XͬbI.b3-Ole6Jx/;x:7J̇Q7cJ^|.+9+2Z1|J6TOM -ƣj3UuȦ\$w]e~-)0e0e0/Im)弞2XFtՏۥx	&}m7q6Qܡq&N)Xb֖c~	,S]"Kه|-
IPK   dO\/
T    5   org/mozilla/javascript/lc/type/WildcardTypeInfo.classR1 (hOQT)PV(3^e	tj}&/rL8$36''_NI 6(]НE`1Z
z'؜6C˳twԫۄ׏E2
B:lr	w`>}П8A/
; k$A~JlGƯcQi=FE}Ҷ<V0!A;vxء칉aR(j.1LʺWS0LF2tìӠ_FbK08!'CiT+Xİ$c=dd0ߕUkHzRj^<&dgU!$WCN39i9+Eͦ3 6(o哏Գ*4bIqA+]1wc-'UduQPNF*&	T`*<bev#1z8wd=Uq)Q9xe9F.ĭK!؇hED-.ϒ!H F-!q<(ë215EYZccNcZ&,j47TcEkqK5ֵƴ5fƌji9@5Fl̫FYk,8xUf6VTX7U2QyT5\k6vT8PK   dO\
6x    6   org/mozilla/javascript/lc/type/TypeInfoFactory$1.classN1EaHB6-ʆEE\ ATEE(];'1uv"nXQU@lھ~羧`,XBu>7JkTԩq:a6\ƚER}IɣPj+ŝfg,QHNMa=1DǶ'j2l2Jw%ĦBwSٹ00Ta>=]Ho;$fϻ2
TTGJebZ@~1^wWCk*g҇o鎵^zl{, 2'qZYރ/IKyiXWx߯b[B~FWN;xGk+PK   dO\           $   org/mozilla/javascript/lc/type/impl/ PK   dO\-    ;   org/mozilla/javascript/lc/type/impl/InterfaceTypeInfo.classU]Se~dM6X
BMH[R
6Џf2+^tM/{^93/xK/9G<&mxyy=_<0;"SIW/
TwUWsu/mj솧gܬmDe0mins;eUӋYe!<mX7НsZTVY !&B,mcwgjV}pA*,3lK5XVQ]fMe߳DVY~=2zqA_\-ngf48Qu}%a'7_Idp3e{*󚣻Nmc
8aJ{fc :p˦y麝BP17zHysPd
!`BIH-c2C_Dj/jG`\L0aykgh>o}G$F7Λ4-]Dʎ]#ᖕ`!jEdex1,"\Kv^a-:5=raٛf	W cW)CA	4ަbͤx6QH9,Kj9}:u@MIz`fCKޑ7,}V]՝"/
CgTsIu~n(o͠N{鸙!28]Mi$y=M#MdKK
E[>!ͮQo1<tuOA1h"ӚXvR9>oJě71qևDk9>ph4Ert|N$	3'1KaExnb	}HY|GD4=%SMT)NmOw~}.֠#p8-ngqbV!0%B:cEor}$mcJp;8\y> tb|[8;:Fb'hϷ X[n
lkd
DaBpS>v[>L2Hz(sO)D	mz!.SA_	Lid0H[bJqR
(!
٪E<mүq)}^$
C|>Ta*
>#BŪ_Gk4BB9"s{B;/F	Oc|o	-km4#ǥ[h;#|J؁)L.1Ү PK   dO\@  
  >   org/mozilla/javascript/lc/type/impl/VariableTypeInfoImpl.classVmSU~nXHbѾmv@+o3~ڄ%,lqS3?hkܻ%{so~_ G>b20%|kٶkU=.㪩[媭QsнhU,o!Adt'pyõm6`7Ih!tۨtܳ͢'7dx~d-Ve٩Wv6nh_&!Kq Lo(5rkUJ1SdZ*)Z=xC¤7dn#OCu9cx5
Z5ASZ	=bmq
0(w,#W' %AaQeImw36V'uqea7j+ή)s+csuݰbW.R=Mfg{Z!g*Ww)6ݻ.er6y$3VܪP)vHwƼ}XhR^Mg.Ka4+0˷S.s\13bǣ{GS:Ugiք>f<'ޝ}y"Qt*5Ƕv鱠dO%
ꕲQ)4
iO[Aζc N]FS8?ݢn]4yw]z˗tG2ɖׅy-ЯC~{@	L՞CRrEbsA?ݛI a>d7<	"РL
F	ћ?B:k*[||xakA
{P!^g8Ƶ9I3
y

nd
À5r^b/&UnD8zoE@
jgS{53ʤ	0MҡDt+qVUܢI!jSk叄?1+acU'KMlz<$X1nG!7ZMZȡ2)}?|,O/;O(>wafNP
*^H{w'#H'EE=|S0$rTU&Bd#}7PK   dO\$D    <   org/mozilla/javascript/lc/type/impl/BasicClassTypeInfo.class]S@mK|(j[(|L»%v1d;I?HoFg&jDL9 RHч,â -Oӱe;Zo$Cv]"d/UUp%9c@.A`:bp?TJCC].őa-csh,u4
3Z)d~
Ja`:VHNl:du^ŽKP1mydgUɡp3Vŝ:ZwLԹuM(vta2HyM˃G)S=GFtȐ._3j>{@yjtFNO4pK'
/h?k܄5{][0WmϲL6lAf觠~0}^S7/1G\RMvַp;dQBHyP]`]쒢r0Fad>!|f
CWXݣ#yQC,I∎8D\t$
qBGI">tĹ$ⲆxQG,'W4K:BqUC#.%i3:j8#n$4~PK   dO\:䁟  }	  7   org/mozilla/javascript/lc/type/impl/ArrayTypeInfo.classUQSUn`KؐH@,RiM ժ
 
!UAFyr	۰t7C:оg,qSgO:{sII{s PjC?uϯj㘅};QzPp*a*صS$kͽ-
v`Ad	4DuBg!
v
vJ`oo=tpsL*݊%
C$$pQð2襬;o><`xZn-["1
:^Ceˎ٠5!^QIA;fCd"2&Yvo!pJFq

YMt:D
0,5f:
zFöu76eoUix!4J`{ni2gxns]3 ےULӺY/JS'Ȑݢ)ذ4}`S9c#B%۵ڎo;l͟b$سIÛe=DLW:H5|pTT}^SWi-!=Qhe[f[咞8]Σ+#{Α+(?ҽ|^ӯX+SC3#L9
QXtaN .Jָxf~,?T!+NEzJbpK8M&q8}!yqs?A<FD}BOA6lWօ_'k>(#'u}LtJ(g>i5W#\})~Hjqhtȥ7)sYl\&RÚ43~dO$0sϑ1r
BY1+tOHH|*:.rԷȟ@7Oڭki
գKdF_8ғcvφ'2XtE*r;v9f$Q>""t]sxWA9?Ce<H|=gL|W-Sī1!Y!a|N?GHiw~r66h{SX_PK   dO\           ,   org/mozilla/javascript/lc/type/impl/factory/ PK   dO\MĽ    F   org/mozilla/javascript/lc/type/impl/factory/WeakReferenceFactory.classR]kA=|ݤU*I7qEF8LNvY!OSE ?|]n"_=ss_ [.PrP*C31>Lւ"J-!Tr5L5?M̈+"	PmXC8V*8z"H]8(`X'ZЪ$QF&ձ]FK;;XfxpV+y v2iЁ4yy{ư1+bJ]%9nXȇ=i	Yi'!R|
m5QHaeaXnNaswB"Cf=x-Rܜ-hś#U`$!hy,w
qlc"p+Dq9D{^&Sd+O>)Wh
ZHh*:w)gpޜ`#3HԦ7ƜMuH1*TnPK   dO\2>L  u  B   org/mozilla/javascript/lc/type/impl/factory/WithCacheFactory.classXwO2`q8Ė(P $2c%!vXfԙC[
]^KK%$=ӿ͌#[di{{{]koxWDa	Q1.ʳrRɋJfUucwveDlfzH9,UM|5բԲI{$BQKms	՞ʠА5VƉ!04vv
;J%Gbj3iEBb[feS'E
MrކIRlY7miKIJh͊^*8ԝnv@
245'۪¢OvKhZqc/	hЁ8%%wd;;}TrJ^Օsx[S]5M8N]He:as8{CHRL)vQ(\ œ`.]:ׅ|N	wnoΚQϾ{$թ l}JB/eh,%=-9
R8pe!cPtĤE`E55t0pFKKxZZnCv0<Zkfmjmoq,g$5Ղj
9	c<BFOK`@Up$\;=WJK}r^pJ >H(H=]U\2&d%x0G>SIM)P`hK=a2cJoo-ߞ9Z5IӢ(37Fҝ0[ܘ5h,9-+1K!ZF1-:S4!?t[팬h/M*c.%[Ÿx_UVuc/EB'kpo^~9y5LĻ%2"yKE$@R9wj¤bsqFnQUj}vRs:zd*-
3hV/_Z1nRn7<ۛ+-ggv|E|A0TGdv2&0Z
zܦ*H4
Cԛfaxr|/1_Z6zWFC~2xm-6ʏǲJ.r2ʰ{@CvTڲs
&?\Q4Jz.A9ý,wsbE.3KdQ2ʠeuˤN|0l6bO9+M_~e8AU-6E#]j1\e8Q8+-azQ5:ҲP.
^WW$lC*oH'nzI3Jr	Z
9Z_^B6A46R1xצ̡Zm#1r]+Q9%xN"o5'?TLfwU9!DpIc^`C BYg~[hѼ50Lqlq0|V,G/,_p[glsUzQGA
#	viԆvc!J>D"Ɉ۟&φO\Þv_I,<b8
pxkG7p0S2RPhNHSı,"A.&=h!-IQ܎t,t-tFOe|"k>Ӟgh\[pjkk:$8DfB%ran#4ї /=}/{O%n"h
=<8:.ە?>*Cx}1ѽ8Wp
A/'R>q<׎[
]sQO*q7B@\FI;JP?8BPG~@&E[0O{9zr?s\<Hρ,i8eyʜED P<@uDc!^d#i|.>֮ 9+rE	0~?9C~獮oO3^u0uPK   dO\Z1    =   org/mozilla/javascript/lc/type/impl/factory/FactoryBase.classX	xTl/2b"Y&L 	DB`]^f^!9b[+v.*Ŷh-!RQ֭]mֶh֢LfIH/_޻ssϝG^%68T88}]??WP`e"
o'
Fz=Ǣz԰Vwske([A2Kb$3k~%H?$"_İ^%)HA{D;'.:1S**P)1HMuSf0uQ
O
ZBSfwp($mP*\بLT#@*&_t֨k34&ܓJ3q8QnEC
}걘:aeCU
Z"tXKEIMcqdWQnlpcި`s,p5ptuw
=e3\+X
,X<	/CޤX)e+!4|nCHJ53BVKX{]RC*dvTE=%걲דbrZQ`~`2W)!4LXr`HVKM*.ɑX$آB
`LJϫfZ^⭸تh25#f5<hc}nR*.f	S UcbK&[)Ku>a\}TjZ0"
*bS<Pru$n*&T$J,He{Wk*v
et5XݝRT\(;1O]*5Ň.`).n\`w]0铕ŋȍ&cHB =2Tk}*ޏQ2</wiύث&Ѯ*&adsN~XGQ.	
ެcRAW<e%?⓸%~'b{gf-:~[^Z8sr"eK)Fa=:`.ъj݂X/C*>f%9Kl)]f6ӫn<R_ė-ՌK@fz8YLU[q=^Gn	WMT#N΁7BNB;v1>f 4SNlyzJ{<k
iXDTǂ<	+:CQ+(g^tZ8k50CLcS`@QT0E/jLI妥#3%Dm0i²1ch!VK3
e\4냦iŅ4,.@d{m$ۛɏ,Ԋ*ܛtmS6`ٺ{BQH%kӑ9ϕNY&4!YSԓ] +ࠖɐ!I72yml!BIamIBFm
2CZOz?+vk,S@kW<_ ]"BmѪl뒃bV1f%$NF8%/	=5JffbO,kBtV^NPzVP׸op	Gp
"Uw^n
N-P\)"_'ɒVzXl(mҽDs;EKë~QfzR*;)y?/GJZ.ޔP.W_߳G!F( mHx -r< s5|7L!|1W+'i6`p9<NCj8HeM<hpzߑ}싪|S.jjyCSf-5̣3<ըw#o">4	75jde5Zo;DxRc8gv<qL)+P|y:X8e!XwVE\nbB> ںd8FBU>w9I} 8Lys(XF3Z3P2+f!6#S9z?>?X3.iϹ\lnK90V
qovpÐ5;N؏<E-ˢw^n<6tqtI0z##8uY7xJ<~<%Z^gmn;-KjH`xq}Hqw8 l|Iūrשr!A[J.sAԘK2`ڙk8 9|3щ\MH{nC/e߇9Xӝ>)QM⺛e5,:;xbePMϑNwx^{(KGҹ8o>KѬY/d)Y/DZ(Y\
JSjcqf;g>/
jO{ʍ/c~rքCK2[onKuWY:9c}<u- >l2yVw_^>7؛©5xe6=H _f=dǖ
Ydb "4J](,	f0"؅!\ךh
0mo6{"D26ʸ0#E\8(Y#н#_cIY^8KaWeDZh/Z/93GUv;玳	!KC)e\T?PK   dO\ؑ  3  C   org/mozilla/javascript/lc/type/impl/factory/ConcurrentFactory.classRNSA=C
"*j.č-uQ$*Uk\N2;&>/OBm !7ϙ9e~0B:J(3|_|:
HR(5VaGȡڞ 営:
IU(
{eD6|)*qpsbj&Q>ξy^05D\>?~1;nO14ڪW|O
!]'IGS:cx/MOz%yBh'Ě+By<!au_L.gZf/iI޸
g$b>j.RmsDe"~auQn
DqNQ.?;S)m\X딗Ċ)ǳ7Ta˙?c-]ePK   dO\I_bj  _  C   org/mozilla/javascript/lc/type/impl/ParameterizedTypeInfoImpl.classWSe}m ˵m
 
B+ZmMRJOTl_;'g|pzfBJ;߹|;p_'\]7dR\V)鸡-d"x$FddV#Y}@I#ZJgkFZGQwZ1y5
u&{vjŔj0M?hAh`,Ӛd4c!^`iQVfddTKgx*amh_-
VHzĢ<#agC0)z=cl%v؍=InN*Dd|D%<'b|2
4i#
jV3Ԙe콾rpxЉ'Jz0IۖuM-ش4U{q@8H̰Ԑ!9xl8
.JaF*c2Y5>prhp?(E	ŕ:3,,h@CQH_Fd)
^x:(ꩴf
6}0Ѝ%{4&#q*J*A}'F8gx Nxg)o%UHI cN,y:.JxCƛ$sة(\iݾ҃W➿t=TK87Fg,1ꧠLhR#Uk>
*L'hRj,;?M]QGJ<Gt2s|Nod6o]o6-Ku%~o><n&MVv$1qeZeeݎ)L mzvQsԩGJSصٞ#SO]ټ}em&2N+9OQS8+`gL_rRjr_pnq턞5G'6Զmt:i&f7MdچY+\e]'WpߧQ~}@pR @xUP>mU6^x6=wߓ=w<  5hA=݃[JҀ&6\&^Mf 2$s1ݲ+v̎{:;`{LN+ؘyhƲ</VRu	,\n̙4]%`3f\E
w^j5Vi_)B=L$3R)}EX h	%qBeXE)ۨ;ppBF]՝9zp*N~qhvJ	}N9
{
@i $mWSo7)M)hm"gE#[~ Wˎ\p^;`km5K(9]40@q.C>"0ij |lM_ ?}amQkg49:$Ai-I):[cӄ<UBd޵"ソ~멡b}ՕDj{VKWΥ}dl!8^|'̊Y)L'#X(|4?=(l'|˅nvipPCk,XDtٞl$ՆO
*w6+Q-pWlX\t>% PK   dO\'p    6   org/mozilla/javascript/lc/type/impl/TypeInfoBase.classS[OQNwaKYhD@T.I5iRJB|ږ,nw"OZDy0'cmR{37s XA(	=텦UP<oX -EB@F+d))EaCy(WݣŒfJ[;Vz-:vЙ/21HZyeX;$NtIFCֲZA*'ctGnOMȔ5wٶ\'f3F{m%6:U`HŮU_\')a䯆U
s[wJߑ1()@+tka5 UI^A24;v)CⲽM_NV˙:WM1v(F
O $=	p2PL*,жjkZ-!	<&URB=$dgi6}'Qpä[cJ.MM	ک2Z7d0IfPkP)LJZps0ek[*1ڄx)qW~Y7tS|AD%(o<#DF+	i%gCĠƎ[p= ;F$V$(K~k
WޢU?
?cxk	#"ǈ{NQ"@gxSsHz= PK   dO\:  	  @   org/mozilla/javascript/lc/type/impl/PrimitiveClassTypeInfo.class[sDK9n&NJi)BRMՐmfFQ-Δo> e> 9F3={~g?/|G
2d1'pqzAYԟȧ3\u떡L],}ǒwH}k([JCtKzaZP*)_=5'
[~GZ}S`)"i<Q̡Ty,	'XPސ.T)r+XI/\\NmFk\eőcw{g^77rm;eJ[[{{75Îwv>u\_{쩌m욮p-jcH½Ϟ[gY#SJ7]7>}'͎sL]l)|$>ߡcH#]p2*FK)d+\R̽Q۠0.-NbSC\ۗY(a&W/)}swcSޠ4%0!~.&*m#UK\A!JK<>r6]'^I]rvSfU_9N va6tiUdyje wdg~L#}jkB@W	4Z>r|@`ql@

LAv
P,\gdɑ	R@@zu0^v =!;ڻ4IY{<yxGB@h KB{hz/#aC=Z;7\6\pJ!'&|#y-	?}8é<{q\KFR2␷88$8d5HB>C!z<CގCOB~C佰/PCDAq8zZ&(οPK   dO\Hs+    @   org/mozilla/javascript/lc/type/impl/ClassNameFormatContext.classURP]HE@ed:thc
&4UG ?q$-0K^kN V-2Z`<⟹s#:<R6C hCdpBAʪvTHtz϶4#a	20eZY%gh.--o+zZOÎѤ1<ыdcwբbx>HZ^ɾ!	ecaܢت,E&KF1&a\6 Nu+M+MӰկt[Uشh*Iܓ0%#"4LqKㇺZnD{kƆY42bMPW43fbPCz}?iD/]A&k^2LFjlX,Ue;=Dl{Zv"H[`KgE_6Jृh
˨ixj]pDoOW:B:\gǐvea!Wպec_]j&i2g	C>'0F_h4NN>p0K0G`z/iO!}EKEp`Z}zTxh쐯Њ7Fsxz'n0)zޕu=DЍ]ȡ	cq	Hx?8 t\%1H<`LwY#E%"˺S6	/[78垨\`'1E4}ێDyφngJT0PsPK   dO\0    7   org/mozilla/javascript/lc/type/impl/ClassTypeInfo.classn@8BZ(dVRJ\705&uq`;&< pXny({ܤT<3gwfɯ߾[Y$hPu$bwp_َÍ}g1e2F1|ŐZvʠK;ѐՑΰ?r#MU0VEf=X"~
:10we=ﭻOf3j1kVo{JH-f}!SM=Z3ҽdJ)#'HP}nZ[Ʈm]"CUl1A5س}ꙷƎ+҄TAȂN~8f.zI7U'}ֿ(;e=osF)\Y=St97: i;sN>hϮƐmϴ6tΜP)%ҬxLԞQHQy_jE^\L7O-HGE~Y\XK( a/Rhdoe\nEN0A`>4D U\"$r^TBSAU)Ԇcn.\5)H<-L?~"v\KBHhXtbe:eps:eRYt閫N{gb¹pԥ0PK   dO\9s    6   org/mozilla/javascript/lc/type/impl/EnumTypeInfo.classTMo@}떺I'-
[|HKR(H)9icܰű#AġHP
ݘ4MZ	.7oolCcypfalÔiUA$A(2:`0QisGc7]'ylΎxadK"ٖzl2ȣc@kR@?A ;ډ𝊈ҟǔi0<VU&O#%1o
}Yyܴi!zZ?ܤ<K㊁滒pa<%OFvDZdئ3k6NvE{SdܯHudjchׂe]T30sRR!S-[^CqFoQĲ,Ði`y'9aҁ\5'-
C#{$dVO#ODM>~ia`	%ܠYFvvC2;҉â6'+d3D_$oHegU4O?b頰VZ]Fֻ:[\IUjMRv;{NV۟ma_q3r2x՜'Ts4=)²T=ڼ PK   dO\Pe5    4   org/mozilla/javascript/lc/type/impl/NoTypeInfo.class]sDߕVuB?CMC[&86if&je#;+
7-0tz?ᬼM;CcϬV=cwϿp-R;OCGvvEѳǮSt;]
6?R`HX$CjoVZx$-`2׶*6rLX8epL6ה퇎-2Z,Cs=`PW=E]4syɲba.;lːv1𾁋.2e-ɐYaj牠k&írD]ZmY촎I%	jyN>r(ȂƙVKj8/)oJTrNvM1%ȍC+yǑs#+P
7|CN(}{.usIgs[2,7F#*M}OGK}771u&-PPnT">_:7'Z!΢~ ˉu5Hp_9=͂PS
UeKmOGCǸ<X-F;腶SwӇ%)[[Ct"{%hH_W?soz
W+񜴟2C娙aH[VX!p
,M^Öש7/0H(bRJp#2(oЗaD]ʢBhCXPL0  5 L#pb,(|[x
>W;
4 C;`hb=fPWba$~ABg`,_KoȺCK)tDl6;}z{t%U\X)3}?0('5qPK   dO\O'  S	  5   org/mozilla/javascript/lc/type/VariableTypeInfo.class[S@RXy+MlX23>lK(iI~}M ~(ǳIȌ&gvo߿|p
;B:GZǭ
獴,a<WsoX55MJQ
=m!;M{a|dMƑC;CzrpG8޲l0GF*W+ھn8^KSa	ncǕ)s/5_T=m[k69,C{U]Q)Cj-1B92cQb~*1BYw7R`u*rc&Xr
]嘍XҮs܈J_r|W*%X˾+CG>R︮b{ŐEdkwCfʬE9Xwo.򚾴|reYti>iNoiZ[EG]p*IOGEZ=%&_Z;va_SCe_^<5?ctkTYI5)3X]])=z	3G7]KtJ=ڞ`}l=2M][X+>_R݋]Y gt0|͍cO2Ǎ)A}W5Fa;\x=7&'Ƃ֠oSq*n,i:ōN6.č51lč֘H61lLƍgZc&٘U1l\uq#ٸ7,1l܌/Bq+ndc1n PK   dO\ܣ  5+  4   org/mozilla/javascript/lc/type/TypeInfoFactory.classZ|Td;I.< #KLBP 2	N2!3
L&ad2&ೢآZ#Jbmjnnns{3<4tsw
/I B WMG	0up;{F7ܓ ̬U#FηP0Q?ۛ"QPGtX++uu`]bgw.O#&b"#0[ZEhA`EfaƤ5݄X:R^gr0ADE5Jii=ڲʣjQlPIJ4Ƣ=HHcQvU!N:Lr	VB4L#\*vD(j -T1&v$ms:Vcz1ŭqwu'8rg/B
j5Q̜!zXg%%J\c>r9N՞CDգ( 
83ա<)D=K(VXF0!Ck-

+uxACQk[f^Ë&By0Vn>-X0غ^"S+5hcuCD|_YbĚ^
2jhؐ")z\cA4Sç	uPmF<llRɺuސHr;p><F^/D'nL\m8 Eu
ciD8wJ_1;cHIvvV0Rapeaaz>ꈰ
ADџ!K"+-9PU=
(q(q-7	a/aP0l":ppӑ}׆#A#"d#g!7[t|rh5	qyޱM-u\..ǆ,6s;GjVA
(U%>9ݥn#;*4SwHM.Wpt|sMoE#<mv*nZЩivXf!K}
܍Blã:=(w<'4<)
lU[,-ӤdHu-&O,+@7UT
X$dD츎~!+I5|^ '4L줎oְ..iy!
/MWZ8#T/e&Bн{B7&EifdE;t 8C员rŒ~*Te^N!{EǫB6.E̷xM^؁͈m1d3-7,Eڸj[tjf(o:~#Z2HxSorNBrd%W㏊tJ9ep9g=RARGޮ2)W7ijļD"V"M'BZ=J*ԩHiuuA*
iN\F3[وbNQj41cpG{xf
NنM~w@ʈh0&4Ek]0bUNF.Kuki_;<;6)uiiz9<rZ$)ingh3~0-P{8h|BҖV2OK]||~%bdU:ZNkMx4/uYR}4jDa&p\Q4@qe$5;S݅VtYRW
>Zho~%71XwHF<S30oDF,&;!vZ!ǶCU="*KT%b]!ZA/fi=A/bt6
Ăa56_F6gOdf.d/0}#$,	iMsU[̪UxCNqlO ֭l3*FBWfgό
)L}z'o	b:u6n+f&z*'I#]b8×yZXHh>[Z"fџe#_|hԄٙ|5ȜX;gXo82G+XЈ$E[bK˶ِ-/rqO$a!YpF3B
f|oՋc,cHBp71.ZD
yr:9iLpyu
aĖ'JOe&iɣ>kʋِ͐oL6䟠#;+%F#Jv
>43)OffN%wei4#Slǜ3|̓kŅ	#h	E8mC PI_Ӣ#-,	y{(T,g	Mc.;3:a(䤝/	k!rkF*c2}嗶GaD"ygpQ0bVƃa5O
4G8r7l$B2ޫ{P\U穾L Ak Si.`O|CZ@}KoWoov"I؃"U?pCE|_;*VxtNkpzӵiÓPɔ&_~c_n	$?aD{lRG-ou:jQFGE_Ɂ4B:1}`ݙRlV82lF8qgIjzZQx(fjg?f!8	+vU,Gn?.)7:rm9vq	ԯ3iaq3C.b
[?y@Hx,̫3Eڇ?xOO,]bޏN"<R<®~Sxqq1<xJhSeqtC6\ݪmR~^GsWc.}~ߛߑ?&֝%~]{.P6nL++ًB7;,k~|>c/V.y8}>%&Oӕ1\8pSQDYsٵ$(t~t#T$(ioa"^|6VZ.e܈)_8QIw(RMS^QnA=}n؛Ayo$$$}VFm̂PSyBA0W)ލv)lGOxJk~4Wv[+qZӏϚ+WT^L|3g_6,z:lLVFgJ
y%a=Vz&3yK09O.|K4wm~Los8rFR]x;ȯ%=[9C28M*9AJ*L1Ez24z25(?}nYv3V;O>&R\0?9SzÙk&'ypV~)'(\F-j#gHN42͠iVy	!&qF"tsZ(9a|]<3
<&s
|^S
QwV*'?SY
%C*Pп3tZA(HAO6C)]>QF66ȢbKX&%$#`	8St(F:rKktC)"P+L
Q2|xw܎R*,BIRwO㰐JxW+Z/s
4,<*EgcMnT44Fyh&s cT'i6!|j%S~Hs:<Mo|.»t1.TDTJh-sh	MKR
h5EȫrS ?|w9".NV~fN>ZxYM7P+BU!^bfJ
OASXׁ))vE)ΣOP2
o:h(m8{6M(L+2LOahy*7XC:N32JfJRt@95.O;ҤMgYJ(5A$``fKVo]ƹ8ؠ3sK	ݘ6Y:& ?lg,sG(xWI-T8{)kүBa0}CûW1=_@aCPK   dO\c    :   org/mozilla/javascript/lc/type/ParameterizedTypeInfo.classWYsUl=$Hj̄$Ę	hDIX@3M:cw]W䅲JhjOdR=I&$e>o.g+@PAHEV$ijM;FKw,'wj6{cGk>y3\/U((PQ	U`eK,`W.U|\%zfe;i/VqT-A
Va%1-ԷؔZuX%hVSsYԤ|cz7qe3jX-QH͉S}d}{5ІM$pU^39i=ֳa[Q"{"pܸ,$K|viFmlxVW &kT4O#w
ޣO:I3k`+Q79̖aV6-
5
Dyr̺j4,"UشWvSfc}s.-POxږkƈ&[֯e~m]v1pmVУl*٥lQ}lvgc9<PPS.XHoѩN{*#ǻ[5ؔ(ɜ)`x |v=D{T>e{C*#|l7$U1"k2M9XgW騊ThGe͕vò+Ϣ3}b\cۓR9Vţ<FƒT8@˂ECNBfzg"X=ȁrLfx\,qhXr~WAYs沯V炫ݒcVԻp=kKȍs:>;%-!OF|Iֈ>! ziN{2o?QSTz-Uii-lhPѣi~㑻zSfI[=WV@etN3wn2ASx1}e3Acs)(2+y\_U?haSW68
=5P1h眴cH%H ~7xɮ	9>yǦqZxS4_p>o]3	!_!VշLB8ITp53g$:,(8 I<=z/EZՒ%ZN_IAn5t̘^Ѓ?5PߟuR[(Z')Zڛ#ߡa(]DPvp(w5nd#RX^@$#|ыBgXi\m"=qokPmX4:0%.}'ܕꔺhuUrwc'ʍo:^vԉ!Rģo'э3؎ыo(-6e|KlRT[jx
|o	5oAfDP+)ϙ;x풭nZ~+~	%1j>4#$|@U*
TlSΛFO)CfϋHAm|
)4vg+~鈿gG2X9ƾY1x)`t[<ef@AVK-Gx)pJ~Ȉ##3qA1G0c&;W-`}E5gT>PK   dO\GSY  s  -   org/mozilla/javascript/lc/type/TypeInfo.classXx\Uy4IB)вI[^mifl$MrnGiQQDQAEDQJ+4ZEy(<|QD{~~_f̙gΜ9sG޺ 8UTKZÞf"{L<me='s`r(%:	*hGOuBdpʓГ0
8LT鞢2&A0SFJǛN;'LVO
bClيl14B.k&<!3ŸRC'Oi0O@S.b]pD	hQef2pRߒ0:өQ8Y)Pl mܴh0AV;d<k %|L@
9V[H\i$w_*0$Iϐp&ILG*1kBx1*	g43cY'Ak$uѱ'*c]0XˏTeƸi^+*13{6idí%`=$t܏v3ifڗq\PF޹ocߣAHi>΁0X\Z!+!J!H+hۯAՕҝ6Gͬ(ɍ<
&&/eb>%-.;h)=6'YhpS'	v8aGOCU.3$0vz"gD`vF>L	[_$
xNHђvf
N;_	2N3lZB,t_O	9^3b#4VXvN*X1(3%.%j+qe7W]%)%Qi0%\A
0_I,A(vUabTfȏJ,Hx!̏31u	Ag1(3.	ח3b	k53N}p?KR`$LMH/v!WZT#zop_rM0$I3
.o	DiKiڪq|E]$逻%e%U	FK IpM;ʛ)~nXv%<@"gIIxý|-Iw,6ä=	r./%<θQy!o,K.=k;=
pV%:=ǍBG	^ $_L)KO/}=Sv_[gu_Ix⭋^L0!uI{d&7j9	s8pwX´,(ᅼe;$?[N%	[v=HX̳Nf\m$mLk?$f-gB^{^0fdIV&}08!jݚEVQpztkͯ'M4Q7 ̍Z!y 2!aaQ=;ê?IMYnƈ]66Nym#6``/k,yjaCfҰ^=TP*'Ic%ΎЫL; qv.+Ne6LR3Ieߔ)LT.15:l)P3/X;+ztҸ!xf|5
0:J,X>7~ZL:cPL-=Q$53Tq	x|g3)h96uCz.Ly&	x`XF-kEt;oT^Mb=Cy|`2!4	ׅe0`1E9Sȫݡv4cc2J%G->>_qGwGURt4O\F(\K7L^VE3^^ެ蝊+z{G	E*zH}@чu++*/(E_U5E߰(MLkWjA?q3,(@^{x~6E)61ζ1Fܱ8#
:z 4wV}TW~1SؔGlsa 㙇d=Qr5hX?|hvw
q{XrWrvTّP8˫ZVq8EхH)$}]U-Z:zkN@c9čEg^Z[/Wlq[˥X\ǩɧmfiSArS%8vDGm}\{HsyOa<ƙxYX>gJE[+*|reF[APlsUX6F[,[+gshSeWajQ,<LnyAZ۷I`Kֈ։
l:&]{aPS=솚b={:xY:ZISM㜞*dޓIc2mƂp<n|LSԊ[%j/AK5#r1n֥nqG랼_+Ep3~Qr$#tB 8veH^XAX ӿæ}}b8|kWM F,6$Yp%Ȣ"\l	ޅ}	>b	>V?ײS
ih	>"[2	0c~1/W2k0-2 a~EGxx0T/ykk[/Z?̮yOk/i
C>g9@H4G*i$74C+6ŶÅxY]up܊a%</̟byVoBpZρ+/!+ (&q$@X<tg\.պPK   dO\3    4   org/mozilla/javascript/Interpreter$DoLocalLoad.classT[OA]ZFA.jDD-
i	Ë튋.WiĘ?aw)iaMΜ9{;9s|=&A(Gqyx/lmLolŕ[$G*n =Sڞ[tD0ėlז:7D@a*bQ8β/v,X opjۖ)
$G7zA0D6Kч~:mׅcգȓ O㌁)MI!s2B<q^unjZ[	\ĐK>CҖ}~``!_ɫzpS^vWmZ۩Y9dNl1*t3!`X
Sx=:ސ0譎}J
0VMw#0tsj6/f_,W>DPuW>h5o7e[]ZOwFR߭X,{40|tD^q]
4Gh{=?0pa7)7U2$П.K+56<JR}0&0yp#4&>||䩼1pGo0tڥSiezn-;%ӳe+_WEEڌV522\Dk3E0H㸧(ı&YzqA45:$̡$ͤORisI-Z PK   dO\%6_    +   org/mozilla/javascript/JSCode$Builder.classRJQ]GG[YVvhD%H胗x#㌜>*3*Ty{:	֡Aamaq{`4{CazѲWa]1cG
,-~k*9V鋣B1h~ɐK[4&Pm޳[]_H{.i})CxtE)U'k\ܛ(?|rXK
jT^rH2EMKN/|C!\q=Đmw]AϞBAAWq	a셒0$T@pߙ4PaL`mmb+,a:ZPK   dO\(-Po    1   org/mozilla/javascript/RhinoSecurityManager.classTMOA~е壴~ +h
iB)XAO:).j^~w--Dp`;_;3 wd!4\'Ӗn7TEGUʐT7, ap9zv<h
N<R~Ї4ԑqQXډsc|Zwc3g	GqFS1MM*<OsI6V,QalUt7T\mEU0$B+p!B#o)_h+%nJ?hG#ع{E
b1FmUX/N1ːmV*Ϲgn5kڧubQ1Lq89a{P~R`hd$gO"8Is \IӘ(ddުo%cj%i{X$> _}E6w`4S	BQ'1E2y5Hgd+W0KLHK騫:(yzlb'R?(F_=cE #X
#PK   dO\-Jfz  e  9   org/mozilla/javascript/Interpreter$InstructionClass.classRMK@}Ʈƪ~U1/bԃ6.u%Mf?J" fa웷Ǽ8AFY+	
N8;EV!wBejc(= NZFꞖzalt7*
@1FגaBwR_v@b#EZ%W27+Ii<(W"ZtHFּ(mMy?3ؗQ_/
?HI/dS<
"CoqR8vc`/cQc؛KKc18tehPIC'^c#LSg YR<).`LNecp	7	w`PK   dO\,W    1   org/mozilla/javascript/Interpreter$DoRetsub.classUmSW~n^XwYP֗KI(+!I #:xn`?~~~hGH:Mf{y}9 
Dtp6R[m#}ӳAp5<A^,nY0DVT@W@0[M'
vO *qο8qC)qI<m{["m3O	d8b9u*	4F2$c!nyO/KiC:>\MAVˈ?q?wZ^jllGէH(c]\-;㦨pB?[\֗fKTn9u4	H1>5`9obJ\e85W.re=w+baēk:ClZV~cZiryKr7;؞cn*aY$Y#'N[(4j«%ܦXrv3lZ~9H3(%̦9E&٢n{WԻ߶ghpI^s?C
2&(	Z⍰h
a:ؼ4~ebޒugsRҕR~$#~(|J睪vSpC<taC"_*Ecx<K_yOA64[?%I:dLTw0{I`t|$ ./pyN?SOwqm_nE='0IzEKS_!eǂև`USguk,TavGȓ-$bH`
%"jDR$U
*A,#Iɯ4J:%Z%Ft}ho PK   dO\	o  q,  "   org/mozilla/javascript/Token.classřyxź&bD@@vdLf$,"aH	faWQQTT@
PEq_v=z=zѣ	{}oկӿ~@1D>&$UegU-(H).]?^53Y!lᤉF"M$ʲ3%$(,I٫(]E&啵Ĭd
	!fiyh!I=jѰDڜDE]22D^?6[e*mI8h4uE;#qũ^%H@t\0NPWH鸁h ^
+	;7Ԃ9W cxؗCi,
'Qd<\?+U]1^F}A\.Q|>n"0}Dx
Z |4Xa+Ǡ,rE>Mp=Mƫp sE!
bW	@ )pM|B7Dn :QLI=#|<Cű &D˓Z?Lh/<&XV wTJ>u*{E+/	S.sQƝv!Ha8;0sD</YZ˥|0Z2byL/jTWzk*70u9	7+N]
tϋF0WbXx)X]ǰXl_Epš=c|}}F?8B>`8/oKp*VQWB^fm^)c݆[Iwb|v3I\@W.̇wPEFq8n
c
AwXA!'Y#@?>?}	㸧c`&?Zyc)NzgXu u	<(f)^	+o((gEf/3cʌu$?70X,y|Df^\CEP$7+A74tۅ>$cGy3q=/x;ېn`o_G{ӷyޥo`5͋DƸoBLЯ?qg-_n"+qd]rx솔Sǃc1HgO՛R#{ğRkom-BqyA$#.!*Y92u
ƸX#x0,~߱ϻG#Px&hdEљEػ?8 
*(y
D :v\1	!;Ut	ECp~DSBjaMF0`ψ?,AīT^
c"ve{83"YX?Tl'ؖ-Ԫ ox]B|sbla '!ȥ	 q.=)NmH.]Ha?9;˛[pt
3!1'~3,c-Tl.!dm=!f5>NޣFJvG~T.!ly]BJR0o)U˗BJ}yK]4j(aq C8 ፘ-҂ y3(ƾbW_`7+Ub[
yh%D61o|ym>8GLO=HY"fym#ba0XQ,KTjZG!S9WK7`V'3]ڈ]ItfXufLi"Y-ri;~@o^v<iU.݉ΦU\ڍߔOs..ЛKQLunVYWQA\:Y[Wv^3dKѢvzyKGV̓| 9Bb*1dK9	QSUCcsWO EOd	՚I9TKu_jUe
Fn49ۼ]z
k%h_N­VXS+yd&ޥL}@L+/_::-Kˣx{M75>j.''"*Mr2a|`+j?LolN0#caQ
Uxքx44l5bKcs2e5ak֌9[6֒[k6lmNak֞Tlud֙t.l]ٺ֝[O^le;[lg
d6ls؆
e;mpl籍d;m-ϖ`aecfbg@m,[-g+d+b6mD6Ą!|.dV6-6-6m:[9ll*٪f]VVÆZk܈Cq:9lsg[ml-f[v)Rel.c[mlٮ`[v%Ulkٮfm۵lٮcm
l7mdvf-l[nfVmlncv;dŶm]l{4>lf ۽lb;v(}~Ypndu<1GT$QQ.g?1?e8G,N-j9&Jf'fUե`Q`*/=&r(;MF$SΝdxձɚ$&M"F_5kV+LV+55Iq80EOv-%e;і.%v_8_O58|߁= 0Gp/i?
|/
bos
<%y]o~mp`kp#p4]p7<	7_`ps 	[KnN\fppm3
><`VQep{E
1s
op'B;/6tb/5+x|x|=Wk>~
d fo5x <|gw|w<s{
gpG1<f}! 18|\C18~Ѹƈv2t2'?ep7x,E
_58~B2xǃ3x/Oh<<	T7I<i'߿,;\xdLep1x8JpU71"p3-4:9`#sF!灍|C\ 6
lr7`#ߐ|C.KF!C.\6y?
ȕ`3X6flWc
?U`3X6fq
?ցZu`3lfq?nFlM`36-`3
6fp/n6Olm`36`3lw|N/n/wἙ?~
'#
_$Htz+}^FVnxfL7/7
}8fy4?I#wYF%m!㶂tT+QM2&Ps%ju:A]Pt4
΃FA~(
B!(EBh<t4J@P4͆j9|hZ
]Cffh
p&XGG'gנ7O!L;G%(sPYx֯?ٍt(qv3HASSP7: 
Я}.4:ʂP4
Cc84]MA|Jc1kVC[{t=y@BS+Ǿ|~z<A/ACM]g}ao 0t0?֠¼8XN{s`9֜:sphk)p֗3=;_^ܫZrj)ZתVUi]Z֪V@kuVCFj5J,*OZ
kUUTVEZjVjU4k5C
*UVZjVZ%Z-jV˵Z*VkFZuZznjV7iEUZvjVwiگZ>kuTzPzTǵzRViV/iVigm}>Z}էZ}՗Z}ߵFAYinI
5\(ʄB!@@PG3uzBP?h 4
A#((ʆr<h4PP4M&CSP)4
̀*Jh6T
Bsyht	Z
-V@*j}M^ZnI KͭƤjAmVtՖ[uu:Sg+uS7uRO?R_lg
phαiKì4ʧVbeQ5rIghk*$T`ͤUIq"*ji5&Zhu1MkMVPu9Mtk-ͰQuUZ7lkU[[ֺXiXw"k]biZbAZnQZeôzgh^WuhI7Y}n>gn;oh=eD[6Aۦ4:lgQ	=`7݆vzDO]Oݓ^Kv?z>^ӟ!=޶ϣwQ}jGs;J_څ=n_@ؓ;;A?إ]F?3_vfHaϕ^(m{ld/RfWL{lj_+7VV&Ow.+;dg^>"dw~B}e?e9~]ߒ9rf!G_ˑr̲2Ǳd&G;ei&NKYകQTw:">r_Nv)9.K4/;r3FV8Ylgv.NyN\̔*yS#8sRg\,+erRvW54#yDr?Cs2|xhs2B"8q oGȟ/B%:,2LA1h&JbT9!1NE	%b&@J\rʭ(o
s<N,Aĥ(	NX~COrsQ"7#I  \CD|F _(/GY-DFAy-+Q"y@Ah#ږ&h3vA{> tt/t:^^^^ԐAnr3u[m4@FN*r{([<B {(E=^IMS<FCT!1O<-,-*"/UZ/_t|nv^+C;WfYGAr'T{|5mBܿM;>1׌P:B6E**DWKz˺9@SOӇE~
_N8Mdh%:yWh$.avދC!j\ PK   dO\y  /  )   org/mozilla/javascript/NativeNumber.classZ	xTU>'WR!A0!1*K)%TbUQ[hm!(6j+*.5TLLwk;ΨcO(^z~չv?CD'G.bMj^
Ikuj9HLjPuZCg*-";Sjun4O:јLN}+ެLjb!5@]bxN a4a<B	%%?T369^4O
IX(6-xTf\4i܀-\FkN
*"Qq-(MDwhѡN@U	-7y0ApP-l4RQtS"Sk4֠6xhuq
8XI5EjCt&hgj++TJrZPĴ8t,-~ADEKM5+
.뽦sW$*D&y1Cv|hYGoi܆Sgg,<hi|{e+f/qns)=`룉4ډkޒSk;瞒vƴ}fwfQc~aszwJLPV
OY/V0[-:t==lQܼ&&G(/CWP<Ihm"EYLBFU3}CŵpTM-UZEL۴ĒhGNb
8#jViN7a3rM!H'5a)3_?ikbON"ZE|t7tf8K	[;~Z֣%
Zh{֬F4 5YCLى袘?e" \Tl3$n/W
԰ޅ8;Ut5Ӑ>,}lPruWzzW$aj7+t
Μ"xxeIP>6fu	-A,`)꤭-32Zmt'0R2?֚wo\tBv~,
-R~_t!Ȼ_h$8CQEGD>!W	6?)8=o^552P]ǂMB]
%	;B)AB!z-2K{9Sh==܏-:h]M$%`ˋ
D/|pFl^zUyu.睳ɛyUjKyGᓩe^nn>W .qMs~1BDᏡCŢ`~]d'>OW8PbP<SeVPSY܏ňW*9y9EWs\]]+|8=X-3I{LΤ?OGV-ϸ `}Mo+7xK5Q;)Nda
}';a(ߋ8,gsrNPgP.TGF=VXR-%AY>s^QND^..Pq+I/@Mmn<x#yPd]tfEacpahPEɞR.<*<f} H_k-15SG(x1ڹj8	1"sDapQgˑzA'@9 %Oԇ*/7d6Sr4(k<CW.q)rF?[9L^B[pؙMjX,kU5܌Qp^z}uo#7(P?pCm5S1]o3l7 K,x A&uaDKA!e^&
26bLG{w 7tOAEv<Ÿ65<;ֆJ3Y߬uK㈏
Fp8B-ay[xʶs-.R4>I/Q=G,uTuMރ3~vc㊆j2Sw⚹
,oGZ#]7QO/2M*l4:(<b7*UxI%1pȋikxqjj=2mh1uzj-x orX.CȆV/l`5Y-!aT$Cm!QM8<5]ֻv1|tmC)J6h
}WqqdGVD>yc>{|ՙI}E6#@멤6$4׺ib:j\B#Pǧ
vE	MA<M "{D׽
2
rCH*HtBzXH(HcBzTH;S!=.'$A!RRAn!= }
i!= 	i*H|B'$"N[ W1e/¯5_72BANWZp0pQÉ+0yj%Gk;; c\J&NQQL=FA0=
z]2`G}mh0b2hhqsDdŁS<8ƭ6HY\1%S5ZSv@ӣvFZσ\g/^Pr#>DӁ:'ɶ*ve>W=I<g
>2N:VeC"I
jiiT;楥CޔJ
vMpܝ=tB>=-/iL!$iTP^j"PC.*:C֡jаB,¹)!a]J8sO	@YJ)2G.Ee=t>P^](vQHDx4NxVS%ͧq۫YF'*ZI'S+MxFh*%ht
Uӥ46y5ͤ4$2>3q[?
(_
O+qRًZy,gRh
/0kEswҹ3u8'{Kz^wmXsV{Xq#ᗃ/|@_:@E\.
j1]o.e'GAȞN#'*y9Qb#n). mxE1ƱeAltSݺ9mW*'[٘_?K1:<|I~;
B$@
&
&ZHmus,[`.[`.[W%沍ƲeIqXJՖ͵͵͵<(^0bN޵&Mq>NwUy\{g+I=UU9Iڽ<tw=ߙ=iE87Q!L-8}pr6#"wPit6iY}+C.ox#~4}i
j_ Ŏ5
z?9~r,O@ 4äiAAӰM*Xث9SzS<v-E.r
12ߓWzuԾd=!Eډp8-@9vKZ豘/rbF6_ ʛi&EIfRtAjhr6қ#iCt{< 
"r/m66Anuqo:p?c-u;tRTM`%nNki2K$2|a%
<Uxy"MSIXIXIXI l.h4%Md;@6
{ƙ(	lKٟۆ°wHIt+MⷨަwX0}
1* "zʒnAg"赍4IQKJJDs'o1r
tHҟ&Io_F?²?!,\Ұ%%sK-NFЯ$[FxI~ˌ3ӻY\g3xKmdXXWj6uU={9LK16|4̬Z)^j_3*\'\l@pbKI_!.	[ＺlIIKIKIKAr&P6U#
O5,Q^*Mypt mX2[dQr@Bݴ}n@Eky
jC=tPoCZ(r$9XY7~`;Ε1ՉvS{Qr)*MB*MB*MB*MB2A⬇#<14y+!8IF$ٝa0Y9 ?ȃ0 YvTTTTTWP'^ʃPy$TʣPyOup*,1=<x,WlH$Ǧ-䲋
Aʨ8`9ecn,NzXN\%p. _2ptxVP%g?._9omR1bCLaWZGfZ1||+oyh}֌	=|/ [>k<Mûg+Œ.<6WӜKK`\^WwPGϙ,|5\wx>>!q]mv@,vC,MB,eNCb1
q57ĕ+ArOd)W
S\@.<]>/dRvgx@ "D8Xl*&)xڃnQY>6?qm}!R
<^$O!,RxBS=dfŻيw|[-}gxgJawZt<g|b
7ȪYƂE˓^֫-xYVxZ/=LxVVF+^o|£<a
)<Rx䑯kRx߰?f{-xܕw"+^يd7H&T+D+^/ϊڻ_2io+=Ŋw+^܊j[._xO9x.^lf$ی䎍H~

9G
w4;Z8(mEy$*Aj|>w]ROJ-}[;Cz,Cɐ~!=!=!=gH^֧!
_PK   dO\c'  W  !   org/mozilla/javascript/Node.class{	`T{=Ln	B{L@Y ,Pd [g&V}ҊA%`j[ZlkkkUk޹s3͜}λs/?Gm4A]u:nF["ش֐$ܔb<{Z{sݴ5C-1A)epl x
7yb
TdNdlswH,1=5uA#h$ ^X3y<aA<6ƸРjЦ
Eq 
j@BQX`bqu<n3aC5GOłf,JO:7
*>zɏp,	{)@.sAGtA]c=ӠY43cp:Aӱ	M3`u#C*ҁ5
3At<rcFȢ!**hPheWT|ȩbZjN~ (0PvUAuT`HW7o9ִ[5Dc{Hʱh[;BUZBݱpWNtbEhQgW(XnoRdVt
*(jvc3n5àEhQ[(j΍;cahmW$ĔKPYvpXZK'Z65c}
CsAEMmSvxi=u:Y#R۠o6NŚ"P.z=fPmvCY辡\"zhFl1L`kCGBB=t.|EK0
F":ccdhnF5!]Z8ک.p
ArLvZv
jtC9z*A]JǛífޕlÝ-PKjѩ%kiktu0=&ԎVw1#x9Y7͂|-]HVw#P4|f(.i9P4i0ǛǚCbm8cws `zG[Z<}A# H([ڻ=8¨@xw`۱PGw{0jn7#X$f-.jzָp<.TDr͏@բ=!S$Hlss=4wmw~g=~fB헆U-P=jS=AI&-5Dk2k,l<E>
;g9kVA?
=,~*=LËE]9k1c7 AߠF2
z^EB]Cf(Vk^WxCGq=֠7w0uidނO X]X
pU;:7	ZhusuM^zVrApԅ]9rA_PƎj<A17jϝxHjrѯrC>MifVs'U/63 *B-'й	=ݩt2kΊSLPr!Y`Xcmf"	h)!\*=j!s
#Sӥ6"H0},"{ܜelnΈ77C㮴xWSd37ĈsO!F|,6[CUkBE!FI(bV9]EfVQ-Ó&ǅ=P61+1	N艅ۧ-	Fj^1sY!/{b]Jcxk`D)^1MGb:9 M3
1IC#r2v5%BK%+=/0ql^V?{Ba
sx`!"eTےdbG>XT8-j`C"Cp:x!.":Z'2K8#gvDZBE,%D,
"U9dd(昙9k!V5dbVCsbUg+jӸ/GPOgYdqFz' ]M!CUFF=
M
:7.0̱^Q-:)Lqsǚ&8mQ{ķBEyZ[&zF8h9P
͍Xzh&-r
q2`	[)8s98OB9oBb<b ß=2h+NjP+
q8,
#jרQ*IHqӊV5{տ5W52׽[y4>dY=q6ixtXwS9Cw{9s#kfWRa{Wh5S\`=Ad&"N	NE cv{pkv]ӑ𺶘G+ZE){QBhjsǐLO@ 'EG<g>-	ws}#us;4TyG*@C</~Ru0	Y&5~|)xu*]j$j޹痆{ v|KmU^a2[ S&N@wn߈ߚZȘM<?xI>yZxlWl4Pݱ8>Ի+
v)r;&^oxbY
!e]f\<]WX{&.{&`-hk^Puh,ht"Fޚ5[84[gݮË4T-:y$+Wڭ.,Tްi)|aMFcucڅU
v#rꆪ&H K˪*k{!ƥ˚*Nj;ҰNNsue`u
U	XbIscE@kV`	1k榕Ypu嵉l>>,+okZRX*xzWU5774W%z\Y԰iyCuf5Uu\x#N#w
嵪o
kDPSQS߸!<hwsn]VST\S݄}$Di{SCyu
ӯ-KN	B~SBoŒ:c45._fOUC
1\Jn/j,.n+raL䴲jQBFC%ͬF*U+ʓNnBTmQMbՃYN!򦦆9!|
55F,N*TUZJӈ-"NzC8W4QkU- Yl&kJ|5AWXWyV@<|lû%2aGSp#+CЯC'/M%Nw1#"N>tZc$зOxoGztE^	Y6ND]Y/3&[h -*XJbDm<d_F1YnҐT"4C$0-3~Ե(P3-|7`=bn7nD4gg|_o][ݑR4B3"`KZo!Ry՟ᘬP6uc=Lr֠'!`<4NHB:/C٭0N̓~r<+<g
|RsfZyos+Гӹ<\ZQ-Ԏ?E!ܼCfp]QP[yɶֵz}Iza3.=0605땘|fR༡m:6
Z/2rt; o`1,ĺ^YͯcHOFV;W:qˎ4g	
Tu_x@ZڭW<m=w^lQX:nBXz=2;qt@VU"S\dǟRVǩPQ?D]C3Y;uQ{QOs
3,Գu90sᨏpG稏B=Q/@QG8;POB}^Gݏz@Q4G(ԏvԧ>Q,G}6sXG?E_6P_I$?.iII++(oSVcQ:Y2Pz*3G௽o;VcO>*	Ԃ7~mL磺S[gSJQKRCTʡ5 ֢\HUTǀOŇ"V] A}y7D}-hC_MBQdo(PpmSlيo! _
H)(O^ݐd::)@R&1\
TVิ%],`>~g

3O8X'JiMHpfmt<$lCeCeC-SKh߂C/(1	s`A'ذذh
(11J'FL꼡~`736·_ VM+R).5Xs3UMl<YZ&sek`R&].0tlY6,mE%,:snu
J+;Rl>m
J
M
j+,4K1Z]460\b_2`shKb-|o"wTX0E5O-dCSpZӛ1]9ulmFӂ|j í@wvɵ3J0J4^\ElD.##	.?&gmiA	l^5-@BcT暈5%Ƀm/N0VX=.Jӂڢ$,Mz%UYfZFS>Z,[Ʒj!ke
lgޟq{hkY'ZRH[w7!=瀔n."-xw:H5/yk/&Umɹɓ_l2drAէ5bMʲ@	㾗\Ur
s?KM+}+vOa ^
2R/0 oM*"^ҽ_tS썭3_S)jz~R?@C'X5VM
M%KB/`ZڤβQsP:swd+W({0׽Oy({ף]+҈Jy(	<|b	lX_beC;oʏcH	)b߿i}11q (nql\֪`@` 
@Ji;#ueh2NFK4`dHHre
7I"	6	&"BAZ`bJ_f46 NNSk$(L`ʢlSƊ$d1Y!F:r6Zbn)zcnsv.ژ/ف1!k2l YM k!D)ƀET"&>xԖ捖j`oB~fBKi
.p1Cs4$:M1FIT$&y4]Lqaa$FBpZf\u(+_N' 8E3]Jj
= 8"4\L#	b:M3iEl[#V*Uf 2{lW['2@a:ac"Q,ƈN4[.R -1m)pǪ'NDnQN^(w_RP	=|^Z'H'r,jMjf,?|gI<?D]7sx2Pq.dwyE39Ov_Ul*^+dYH܁n⤍gݯfyϏ<)<	x^!K&ϟ3||;wA>%}|]绺wm>ߍ}n绣wW>_o}|=շvHaet]/in6]SDVOlSE{hc>=-b'=/Au_WQzUcxOx{yx>/':}D]?Oy(g:|c6xGރ$%%h׫pRE+Lkߦ}妧r@uI~np/=Ok8<1]c0*UF	Cxf?oS$$X
,2	 W쫤'-3'ΙD&ew@~~Y|&ᏦCR$B⯔&ޣ7(w #in߶J}jsm̱;,_Q,8@Nbsf`}!Y//_;m϶EGHLQ&:0UB-S4$I$˥՝H?3 lcͶ -ñBg;oF;6w>$Ә85i_HJ5`r\iiH|gYJ02fH8N;M18)âR%6%ædжztM6ֆy%4/LC>%٤(g#Z~uN2<o^yr+MiZRf`LG>jKUW<| ~m`}^zsvHt̠i[+,
BF..D6o3G̙OHAAsͷ毰5%u:|ՔqS0}1eiKМ~1/%2gpJX3FǚX`c|ܬOXpl'baV8`ذ y/O@)XM樂)Q&0VjGÄm4KYDUӮm2~GL>
ƱLq`PƱvXtDD8[A1Xkshͣ)Bs.﬚-ьӧes7?+휛q}e8}bZeI3O"Yna/j З>=wA/
U¡=*\?LCGXu7xru3}G-4%@5$)?YDR/O8SQ{iijq#Z=ìWcZ#=և%9)%wE8:DӲfl'OA/gtI4JB ЧQ>Ͽfryu
	
NWw4v1eV,]Hh\~~abU8w?9~UP^I**Dyl
6V
kue6\/<+ˏ)8eszP4W_Nnp-@M2lV~:XS哰h=r"z<[8>/-n4p˸OY01)؂<g'Ώ;1ۯų<V36}y7iy`#˳#rpqP`MtԼR/!gNDxSVdwbHaocckMMmz::KHgy9t~]OWmŴM֯km:~#}Do.&E^}86!`"CHt7PF)"}#<RS4!3흇hOhFGݘ-HHL#
?~1r(v?eY%?
F$zUJKE{{Fܬ^:4F]ڇ}GӿNXa鹔a(ԋۤ9
3L߮DLʖٔ+sIpQdMF+k;ǳt+kDkb+?^T(G8<Jd>M4GvDc4('d4ߴesM̊vTW[[LQ4xj0m	QG)r<e	4JN1r$ҮV\<0Fܼu7c2#`R/fV*sO
@>Us8t?rD97
sW;JogV'֡\OΕd9۠~KEpRa%SZE3ª!T^dE~q?Ft+qU31A3Օ>*PH>1
0r7=&0V:S.4C/WAc63J	ONKJ{Ε~\W49z5Oʓ)y.ZFu۔@yxL^ )Dkv7@.KJpv/Xշz;0'*Ι'7XvʲM𕌶rIHr&@l	L?PRɕ{}|Ps%dr\UWmߥUs)S
>P̼|(<1!s(>bF,3;/afmG[$c-uqngsLG4Bاv"OWi$\"zh+M5d.s52K,tL]WlOq 'Yg ,<94"h.\93iM
riX
ɹAΣ,PGWFYNwɅtGd%XVѳrL.d5%OwRz_yNb\&1[6yI$B.O"*Wr"W)
y^&nm2(zldH&׊:lȰL{*۵٥nmV"Qkgh&-,7kQyvv<[T]-h7;ZP{P^=*/֞ht뺼BOWj= g98yP~O?AޤʛzܮowߖwȻe~9b~~|P+|HC>%wnr2U/*@܄T]][ـPqviԩ]@KTߘ-4[.J.1>ԾD~;ҶfTY<F.B/KkORM{ #M[*P`iCfu4Z}IGT%^hyC9vUXvFhP/iz^>W?u79eX-ڝvv)RBH+DזtóHVE`Os/Ono
w)-z${Bpq9ʲZ? <v
/O` V'lH$~n
 :k;sa˳S)sy(;w}
ī<덹ރۮN@FEl%h{%/=22h5-S
5jQ|-ڂNA9rRh5Jw[6VR7٦jQl#UZe"\)JZ5^X.Fm;r
UO}IàESPKJɣ-A{։s󛸬@	x	v'`ӻ`_h"~Kl
)=c}9UmTl+-p6;uX ^%Y>)S慄%~M~OG~(X6WV%
`?S'͐ysh?Pfo,n(%F/f`[nk[cǠ/t|I/t\b:~|06[MX|{t|J$fv^SCe=O?PK   dO\]}    3   org/mozilla/javascript/Interpreter$DoBindName.classTNA=C,._(jVD)bRJH?n.nwݩW0QB#F2ޙlJa73;s3w`Kzӡa&kV=q=϶7vnCX%_rNHMG_(b]t}W,1&6CBa"	!cЮsx$l5Uily_T#
	`Pǐ3V"lAJRYp^zv\_[Q`W=\41K	xaMtEM኎&!0_/\;:ٶ(t!.vH3`i``pyYp]mء+&5ʥ:9KAiz ]Y̩Bc<۷ۖ9C͐:N9VQL*;yH,4Cڬ%URGq	s=1%<R[I^_XdȞ JqkƩɧ^j}§?3	e$͖n"wHv/G^<,͍wq.W}ĈzJ~RZ, C^	Oc6ў1qICw](=fPכ}}	aPK   dO\#Q    5   org/mozilla/javascript/NativeCollectionIterator.classW[SGzu`WA@E4FD#E.%aIe\F23`yC@R>Ī<*!"? ]nh*E1s|C??RcN22m0S)=rU݄cxA3g.;2i[Qptv`P4aI2~5ҭd$9lo	%*J14@ꉵekauLDJ,q3gCQߊm[Ҟpʌo>O?o]o/!vhB5C^vZb(Itԧ
Z%n{44`/Ccqx~+g
>
9ţdWҷn:JF"BՉAAc	5<#۳eUe_UN	R=HcBIS-ZVk8g12=pgTPq|a Qѫ,(uuٖ'*띎F_KyTcot]8G9?8ش%JԚI{RCf:i\)OfE
1[VqiF`ϫH5+2ueFxz~}Uʪ3B(XSOK!_v30ңz|'̤{iNT:d!W\{G;é'+]$1oZ`zzp&^v)8z~7aVTzʘ$qO?n'!o7S<YZrn
C9(14ߗRrnmނT0e7Ss匎Z)o	1'd֞|c^j!Y^*oreWCj=s	cF*T˰-k}Q>	Iik2gP(H>̀촓0zM.Buxv:hހ[}-jY#ZU~ԅC7b*Kxtza~V$tݠ&QIfЮbb^$\;H[BK(
߃0gF&vgq 1KiXd}WO;_ZBY2Ec*(#5(NEp3^sW(i[TV+|z@b-C2i@tB#'0[3ru#BZČ]$fUKsMZÙGkiJ";ABNMbYg%똓iA\#B@URt;\e	b7ɇW4U%^wr bxAzi\Dw:2PV	?p'ѱnα"SZl][_WeeІt<A?"Ƀe䂈炈 $<R(㐊VEAcxKY
EqydT#tY)J(z"hϲlktYޣe| /I
	/b<u<3Jp:"WApJ8[GDSG3NWƟKTPK   dO\E&   %	  3   org/mozilla/javascript/NativePromise$Reaction.classUOU;_C²۵T-b.[]5>avìƤIË&j}ƔDҪ7]hte193sw>oӸ@V@CemE4k!va{
ezP!FT4Ae8i;%Y*i12gdFtϴղADTz Zp@AglgU!ydzW)@%HGTE;YŒ0|ɈNNѴ 9D7zxw'"1я/8A~欢iED65?;N;JN2)Z4!aQ`#|Y'Lٖgz:c;鿗v|h'Ut.
N18!hZvrU7~Y0V
^e's-tnONv"~	k5l{P$aiҼӖ
c[eote"heZ+R.']xѣrxJC3]_+Cm?@Iss_ʂ<v`F۞!LˎnL"S;X?(wv5eY(ikPԝEz\o衱Oc!i_
`qާwdg!XM47Zt78=;@'h⟢C&:xUWN!Lhg	Ç7DA*lL_" 
?[>!<FutѾC3R4#NAK=.oc`{IÑv[IF0BJ$Z	-1¿F,@`n7po6ɻr!$R(xC[yDodTpSoD؀>(#:?q3
.G0#-n9!GܙTP(PI^D/PK   dO\1bP$  rN  '   org/mozilla/javascript/NativeJSON.class[	|T?f&/!$AâH%,ZIH&13aUh
ִֶ6PRZZϪZmb7&g޻{=s_ٵ&8647\
	Ū"P<&<r^&FSycI^1ky+V
aye=PԷЊ1#+&Sp5Fj
kI}BP5ʪư\X䘔K rU(gMP]bYb:'Y
4NbʩDi͑x$
ML5LBڢxS$Z;s12f1yczrfxh6-PTчAPdF0>!WLMyP%cpyyrޥǢ0tb/SA&i,Ӑ__nn[^pAi9N=iX
Iqz*=]OͦP8ͤbX8TprhaЙ&D߂h<Rԯ":/բjРL{sa,l{vzC4^lGI;Vak5)a+Ū^I:ǤTڳy-Z\}DcP
[O-\QӍ_I!A\ke \iWf}RSIiDP]ͽ(7{}*4D=)r}4Z7-L:. /IX,T^p*q&]H!XUv*	u<K3CVj&H<:bGk-xh%*ZmPI9`w	sc3I%KMPj)>p"8b22($~xC֘iۆT~I<Ò9 wMgRnk[[!\&\Tv*ZW .7ZMtIW508WWjtSNҥp]&!QΑe
rp6&L ׅa¥`mҭ&F3kdO0u6Wf{LCK],w3٫=KeB{&C[.TZvǤm4DI.eŋI\xCߠ 8ys<RWMr:k"Λ>]c#Tb6ؠL:EճCadFJf~fR @fiHlόű;iAMzMTf<*v]jcנ}&=NO`cVbaadMzCܨ#ʺֈ4\Ϙ,
BGYoBziq]вt~{	@/xTPM d˂lXtBBK59*b$&q-_oЛeL|鞒B.ÌX3T|ߤ:նTf_#>k7/ЬciNތuIE|OAoO7d,itDŇJKǔJH=hgtnbSeGLtiFɊR5EOQ?	k}{P-VC񰏝lt%F*[lDdnxNYrŔ(l1(iC
/G5P4qɹF@ M/ 0x}T'<im'ӽ"e^0&Ur"3b(%MNcLT	rSl \ޅeAhQ4-RkÊSTGLά`:6<OHhtzAH23LpЫU	6=ϋ(M$Y6Oi

uPԋg<1vPH.讉>3Lɳ2z35Dq02	)]g\*-gex׌Jtq)'B+kr+Nx0+=وJJnm
5)3_*s7a2V^fy|>vR*8%U^n&$#<=ұHLW-/Km尤AxV:/GxMnUp`wbɍbUE͡č75tf5rעYQaj]ZjpJxɗF!ދ×"ՎUh|l>
{2+LI>k^2TdJE1ZFAV3Yr'7~*BR}HMĕxt;~f}"1W\Ydޢ&w"
\K]&Z!=&o'K̬oG!~2]%T#{UJ[C6B(, +kiM??9jfEיp{>Z$<56qxj5\K5wg8Nw[6oA*īP$
E٘%nS.R5V=f^94V~'Ijcsle4^OuxJ9ӭD4l3P/݀uLs&F0ؚ>4'd֋&Nf	j?(ɯљp+m_fޚ
Rzp~ͤьrKR~t1$ɺtKx?t9jC~RWC*_ޠ10I̲ܟMvCT'Eq7(9O׍~r'RS3=FY6lA%L>G`ͫ>;#wOnJ\r;}ʣtJwMaRQNZ*Mڠ2^p}	ʯPy*Ƅ?O(2ͣru]'׫SI@`Rj` .mT'jBB15nzNa 0B=jWxTk<*_Q*{G|UT5j$VUcfWmH2'Y&ƛt-l
E	B٣;G2~p:TdpZT/g639f\ 7;djBvH+kRZ5QEǇ5P9/'>K*WgvD4'?ᇫB+SF6ձ*]`J5Z:A/6y}\]jeIx;˖)T'DS
j0{!US-CRC2~d㍯FC&LjI5I-.)yT]n7}XKMU(2H:	CÉ;UǭH4N[T:P<?Pthv{l^IZX_>\'.?ge3+Y8!I2\G~^B_
걲H>]^h}35TADó<ȷq^&5qN:`^)	32vP2oxj{*#^bikkɧy%zߋ9ZTΦИ<Rtfօ>"rA.V3AG+ LRt\,4\1t&oK
Q%	jǕ.edO'.vqԣ&Pc`VDwT^Ÿ_aZS/bh҈s*_ʂ=I?X_BƦÑF~l1\-1.yxݎm=ٰbU{%¤p]>CӺMXaL)A+0ԛLSȔ3{Bq4W4Ânmtu˪bi|4	5
`u{+[xx|,UmX{7$"<MĨv/N6ewe/OpI'V{ǤþpQ'@jQbWMz
Jw⫐٫ ema+@8k6Cf*Rv2 YqN+iX\+̚$F+ǲ5ӭ>V.?/Z=.GC%/CExG@ЇAK|>=@yL}pp9
[VKBB6]g:NeK١hu]8\nXx"DeI*D!:|#
D@8vV<+!#>wqpHh>7ak|bGڃ
JÑp;C!`:$T
P&jOJN<P<Q_bl@~Nw/A`A;m,h`څ)F0нNC0pdp;uQ2m4.MSO>\GʡQxME4ΤNti.zfF>r\QR_SB TAz=ćhJ~ZnUgA?fܺs^ȴ+@0J';C5T='aOmnY"h'{'W
Ѥ/84lvک׉=	Z:ڙ9bҸƩRu5aP<u-BMZ
urh־x7()ůIavewptr1ĩD6׸%SNs:Em'lo͢9c.De4aZrIq&$řg-]zN.3D/Tףւe_o4m#扁vS4l]N_}L/"m!2䔀~.eҤfO}]ݠ֕f	SaW~Tm
mD
a %|8
-4I'幝:Mѯ%*_&.bN2bE33	\Ed1瘅p+}k~s/ڨ9;J}tFt\*bݫZxXw6PK6ѕo7׸N<ۗn*
%iPAH%fGұ`YƟuJgz-&`wy-{ޝNB[鶀{'}%gOQxІ'7.%O4ya^lg@$mNJt[;,fKgRxSN:i[
VXO(
m6YĩkbZKWz6Эt	FRC3"]E/c[t
kMq]yu@7"t
[=@}( 047T}}&V9E}A'
k%*ju3|^nAJiZiVAg8uL-0kl+1+ݺ}jfK-(hp<L,;@&pp4[wiUaAՂUڌkVoƠ!|>Cß,'=*/N?Mt6C(jVkCݩگx1n](+Z9	Elז 9J\b c
cuJ<BP{系AJx;&޷bi=ɴm__).I-KZit6qfJo!q_F4yxE^XZXPK2FNڕix^RnJUɒ`vJ~ueYvG7{7g
&8p'k@kY{)=vd{7;E$<cKٻt.*h66vΒ]w].nޣp=<N#	KOx9-Y[f4ȯi3 -/~/_!J)z`? zѻ\@<>egy-}jɷӿ5EF"=8W:n5XoGmO"lo^u>s<RV4CH&{Kҽ8ty^u;ot 4M82C@RՏYԏbpw?%w(&xk?=h&;LRxzN㐰fH
R(?,BJ9>}3ܦ 9O~h#˰5^-
i؝M>;_,nYbX +*OjA-tVDU
7yPiE6~J#gpqa}Eol	3f_՚({{!O0%X55hE
U}[B 놠Ə4<Ǎ`sr<y;ѹRh9}*sssYÈYBs~/8ċ6@/L}6^l&o	9,蕉i+Z^quEp?Aؚm-t<Ok>f1/i vX_4͗A;ʖgv~3
onm2&O7Xfp	' ʻՊ*eݸk3|
 \ 0 OƊ
 N̂Y/`-c/L>u6K[8\z<^2<=<39pB<(cy
>/q\˧q#M\p[\H[lO<5x6Υqr՟A@
Ej/V7Jx9|.!
@̩@<t*Ճj@jzoIn`-0aD@jz*<3
iLL
@ei; HWf'+IYiF;` *XJ1gUkg|esOFߡҌs
 CJ']B_R.-=I0mhoe*/9fݵ]Z3NHr?Hz 	vp]r#tfq
Z+i<Gh2y\tcڡu*P픣G.<a(<GT.d[{kcvMه\QP{u
.i|3C*˹"okm'ogZZQ^0?T;Z6?baDƣ='#Zh@lQC7*X;L;iIJKKF~V|'\o֎&!%@=F"P q)J2g`kJ|b/.*5$RKZ;
؛`On{{K3~
&kZU vG
]bCZ;N2|$qY׾Oj#*o#7KWD	^kɕ^Ɵ%F+Mo2g$F xW>d]elPr.)8!i{zIm)0F$M!Iju6s^Gg
TƗR*KD?h|==_&z
@"y3ͷ >Drx[ iC˦<>V~#ֿ;`K
?o><@<q4==4E=Q9ʲ>KۍB=~|-C\J7_ȡ1i3y:Rr	ZǷbg^ꯞEOSZ~=-k>'k:]F>?"YuzZ=^ 7B}5Kgb߁5%oςGE*	#
~ËȈ.PktBtV$c#¾0Y#
>Bg'_rC̓0<Aww$ >#_BPΝ`W)UZTlWFcHv{r<9px9vev+=pηZHD'DdJPB(6̍>!"Pmx%~$ίgbnO'}˝TvB_+ezEk?|!y@
LP_hWj F
tAT OO :
`<aaOm  ,L~h9?GUR#?Ok ͋t
}+L??ĿUz_CBT[M0Ey֛!%xW˟r|Ia@nS
0'Sɋ/C%@Q/C4]@m @jh=  1
uAj4m7m@'NIy8c&oc9pBR3}68<ɤUn>[J}:ᢃfKݿ} a)<Cɏ|L>HAtK?ǫf/*p_V5M
X"S-<*?٦r\?7O>x;	(^D+=:{M++V(~ ؏p#h9jށf&AyU]@pB}BpڮN,e q}
AJ串Cٚf1_,}]$5}ה+zU[sviUHڃRph2a4RePPeRC딟6tʡ7-5 $S
{ԪOPڮ.5UyG|zCG>SA<@Xu
N38>K4γ<Oc^G3AǗ.c+9:fב2
@7T4+H)ZK,yoܑ0>mo}d)Png@at<T&w:g˺HF#?XMAlԞN=>Y;PΒ8ѦTJ':fS߭BmuXX`,Ώj&cfJ@͡b5ISYY$ݲph8FˉӯlNoҟZN'.xcXuQV5QM}5JlFS?
}S5 [$
8DY>zgZ'oSeejrA@8?w|2WM-llV(O.2%i9I3LU(=ڌƹ<}r#.VV!pNljIYoKЛӕNJoxWz]ygmUlݡn-Cz֧܇Ѽ4ڀQJ'fz
9P~~2
׿?S}Czđ+b-rGɿȤ cEGY^:\
?PK   dO\]    )   org/mozilla/javascript/AccessorSlot.classXwTWNܙ%MB'$12h[^IE ! !@&\:7LTK[ak}cUXU\'t2~ޛd&C\sg}O}v!T(#3f"7xM7&@q2ӻVwn
7>kӭ~i-(MwXk_E@m=JIF4<ry=1fT{!*5,twH@c!OQ;ڎ*
+PM;oaUX-XFn}c!7հNn(F>y
>Ze<̞t:iK)_}3ؤbz Fm/*iӇ~#2mKEB9~:aѭk7;i
!4I
2+";s=(>"	HR
HR=*iy0tK@u3$PU?`h*'Mj%ACaEv
!PM^x>ϕ :U;iH|D5ZHg2ҍ5AX_@5h1ȓV*[qCFWZy)q
O}.84; \NjxJ:6#&-S>)Zܶ1gAi
q˪=m]n$wnJq˧a_rH00
n:gA("yOD$[G4Xyٶh_7QmXHc8b\\cV{=cY,<YtN)
Ƴ,\3˚ϭ"cxNYVﲆE0n^to0ZY	)#i	-lg':ȶ-MŁor~v6{y=6rH Ҏ@'=>c2Io\klvb=jL9OXW0BNڣF2}q>x ݼ%2Ma~+Pg/uR:E1?E|3`61u#9oHANӇQ*&q-q~r4)`d54Ԗ[p(3]WX<{d0%u+E*F*}ȐOxh_3k_x{<(˂i1m	=/9y`-[R
"Y*T\	6@6y,>T!2Uj|P6Vf ~z2|7 g4Z/K6?3<,%\\Xr2V2V;Vٸ=[, |aZW:Mc+Q!4"11&6\#៕*l"Pkh_LU|s&3dcCsW3GzN%wg;NTe
7~W*ǫP	(mMlka>ܢȈn{YQ.ģ9ڹnx@Xo`OK@*Z9oa-jRCM_N4>6Q[Tʥ5
|Qz_	ԅO(Se:(mgw0;wZq$A.
:_7Љ$)Wto?pQ>'#CAuxo@MnfƜ勳omCξ0~wY>zpճRE}L߿wȁp0bTUlT*
g%]r%wZ̒EJW^cE*y0(P,j\BzIJfYqȂ_;EBStqdu?AL_KJ
M1]Xc-
&8(30'3[ɃdI;y5&$N7GCǜ$yH6J{>jGY[H`J6j(s
ѫalOT` *9EB
R$MDܨŔsq,粮H'{9qī	1᧋"V!VxDyᬍ]ùwwMR6M'>S|W9Dsy|1+µ?j3'^6Ce{_B/ÿBW	ͿN7/ͻtʃo"?/H6
gF~Ϡ}
puMf/%e-t *<~VtϿ78MxQ_PK   dO\HA    <   org/mozilla/javascript/ScriptableObject$DescriptorInfo.classWkwWגV?"&6ĴM7!4J;Ď*x,OI+\RJ
-~6s-t-7,
k;cYG|}=g}o7܃Okhؙ/,/r9clkV13.Y' B
a(/°;/ l9$HA]G+Eyrj3GbG&
1qy8j3Bʾvi,
|
ngPB6<!L1KV6\cs;Z譧
%\H%&2R!ƴS셑F<]t E)(r09[ǝ5YXVub:U|>g ЕT&Uʙ4k{jA^qD Q}3	s-Y9ǲմpTøc_`GMOlZ$Kn!<
:2'Ğ?eLy'	7\`:Bqk/4uIh7/XjDb6(n>yAf0>̈́߯:ήe4/|@<N3ck^00'9}f\`ج:Lhȑ+:aEݢVGtx*C`YO906D>kF=0\(n<!
'I1GNK^[LG:&#}vLex&b8dٹcb"U9.8pڀh$WD}Pd"V)ok$,XJEB<f縇'͢s<_Mc9XdZE'i2ķfY>a/yK[q@va^m܆ }6
kh~}П~;xXBE
z(RQE{TԟL,Z)3ЂC02@ChE|q)%_ƨ
&W_ì:.o6˭
xE8Tyēhe1c{V0kٕa[#٧A^"CS߬!÷_~wpL~'0#*9e%EqEQTĆ	lrf4n&nW5\`O2RJ^*'C}w˟~g?GJS(8&_RwGoOTԫPHE,TgBS.	Yc*K\_%(mڷoL\,ZH_7$oq|cQAt3/k+.q%)w|ih71J6½z*
OÄ<{pC`ЮkFq
P\! C:2CRvB=
$ϗͤFT+F78+AMxBKf^
}?IuqjR*Bԥ6Mx%,G5皮#bHQ;2o'GqVܸ94Qbr/S=q/(3U#BSa|Z>5T8Zxη5nWjɯӷƧSþ5vר^'|)kPnGyƗ(RՠGi)O(mwmȟvwmGD-xs.ouy?VMU.\E
VWdm WQe@(s ǧPK   dO\1    @   org/mozilla/javascript/ThreadSafeCompoundOperationMap$Iter.classoAǿW""Ukڪ@&41Dc4h.5[7?g(a*egvv33;?}`HLfWr۷v:{+қk-d`,L߷[qBo;KQ#ovFG|-ϐҸhWlv	ț8C>ASaOTDi474˕t[5g)xҠN)"2p1dZvr3:<2~YPiSuGx.8d)4.wܷ>6jr`&jJߌ&;WwXdlUݬ+ \SHku1
 t*$s y&+%hpe<& iTU>A@$@IZQsdhWq+@EUҕ,K]!VЧWޅ^*[:<Y&(S=&lĄ\D8 >H.!VIU?t}-*J(II
PK   dO\'M  C  1   org/mozilla/javascript/IteratorLikeIterable.classVmWE~&fPڔ(坚,	bEBKlB؍78~kz/_ޙ,m,ǓsߞΝ0
'2
$:ϵLYJ[ۆ2gMtz!eDAaRf,WYq3KhC̷OcϷٖkYC9t2HUݮP+(`}ØBU1\ѭ WOZ\sb(-Ǯ[ŵfDyԲMV){Z/a=^yީUVjf#e
p(F
ġD07	
\y#
5|5Pi	)@22uX13t?{Cs,?uLȘTl0r*L(fiuؓ2d;v̌,f[Xt״ǱQiSs^9-Fl)"yo#GeScapA"eyDuh m˖l"׉l9&c̐9C^r9qw[-9N;\h&ZV)gp^M;t5:ÝQ0׉Ҝ]$T+-Ykmb{]sLWt s5:7z$.ȉʚ}ѐC{eր"=8%jG8=W5,?͗̒M'C`f5O#Ƣ#WbTeH4)Ke8V|O*eְ ۃ^Atш7B ܡ D I`h=ML@:dD::ߥgtK`zJ:.EGoj\u\!cgAaj )`	#%"q#͹Fb1`bQ}|Bk|
|M$\o2Q@OF̕8Hɉ 	Rͯ=Ai'=	IxmAeLs04N{BHH>E4A.ѴH-ŋ&Kᆥy2`z24w>kR0vP.,pEI#%FIg8PK   dO\"[1    8   org/mozilla/javascript/BuiltInSlot$AttributeSetter.classQMK@}Sۦď_ A^#
b !&,a˚
M4 I=HQa͛7o ΰ`@8URH9[Т6u+T*sxeykxʍtdU>s^c~*LL%%'X],e\CWb'bՖÙ=flv2Y%?^Z][Ip5&1w#LF
_s:Fذod/BU6뷉i[ǎE]ݱ	PK   dO\Io&%  i  ?   org/mozilla/javascript/Interpreter$DoValueAndThisOptional.classUYSAx&D+$ Ux*,c\]vJ|ȲgbQLgzǯo|
}#pu8"Bۭ0_uC|Iߑ~d[kw$ ɑ2Xqf}.A(WkJ8_hVXT@!TCj%8q z`s]EHnhK^U8Qpae~%d[YX<+->b8SQL$Nq83#,Fnh+pRo|њgVr[0jppS+d][zn-ug`kfESeN9RQkQ97{sFlW3\
8j%jIc*=ܐVS&8,fjM[Zڠ9uڳvǍ.v*xW>k
n-}G6Cz0D݋|Kڪ [܍+Yy 䘦2Qu]&mtKnX)r<`u߿C;(Gat51h/14կ4](#>H_u1Fim0KVR?>OkN%2KrgG~LB1&a~:{OQ	S@δp\1,lPeL
ZWquQl	:b7H,=p$}`⠙uh➦%NZWb))a}Ud9~PK   dO\E)
5N    3   org/mozilla/javascript/Interpreter$DoSetConst.classUmOA~.RA
JR7lEEu]wqvJMnfgw}fvfӏ7oE9&4sta8踳9iYFq*Yn)؞*9<	6Sͽɩ(ZР343,k5C]kE8mlzb推Y^G+!/?c14]Gцv::omvҩ2B[تc3tAbjbҘeW.]d.摍a'vqtB7CO29Q7\a'1c	:!Jiڳ%A-A,+ڧ2M9tzE{3D+OdH5pyH8snR[-dMJ2fbXSk16},R5n]Ko4zyegFŃ`9uTeJ~5Ԩ\[Axlfg.MYrjwɰ,~̨S9ˁNͭSG|	Azc\xX=8`U5jbK2CZ1Tt"E5џ^P(M{WNC{8Á3kuQL τ.IS/a(6?Fk""
^cd;δ%Z=,*Kl`OY馇DеO>#}Q+7LiE8Bo S1W)FY	lB(ɧbQY:I'.b0L>~ q#Ǒ'U$KP
CIHNDOPK   dO\Xz0    ;   org/mozilla/javascript/ScriptableObject$KeyComparator.classSNA=w00@  aa38:@ q[V¦tט]ƅ1?p~q&&Eթs:55ABF}P8Nk_0|e6	JuB0TlˠE`]}p(	FwZ0Ds	'bnӌA<T0K>Œ0a,9'=<J;M(ᩣH
B;kI(մ=ud[?>'jʗ۝vцvYGScW!a_tdœKjѫQ9}s[k>iMDIn-GD7y)gԝUmQ-CsCByˠ0<*J3(ci8?&xQydHg1e

3$#,fga\\~	&Wb(/nb.S,a0dĴ	31Xi'itm.)qYi* y,xIVX1PK   dO\ucj   -   org/mozilla/javascript/ScriptableObject.class}	`T[f'-`0YXDİ=Y%8$DB&f\^k7pjܪTjE[bWbk*?7o^d-ͼ{{{o~ 8Q `TyØ͑

1gM-cкugk[&Xhv~ij\ Li/47M?sksaA&d1Ȏ74C-׌^حd?0ȱ dԅ74G-{X\߸ar~f̄H
ĀmB
Mc˜sjM-F?!2
A~qh! ÈéFWF0*bp\j,
5-nf JhA(Asi	7F(^YPN/p!\G،%@b- '05ee^g2q̦HKe[
&y-:|v"[5&lZq3a\a`6mpG'Ef4oA,`0[(ZIxZq8͍١`sj͡mT^ԂeE<Ն8=-p㆖U>X	8ՂP`XPxڹWT#ssktΰ`-``,ACVG(NAFwGYgA-ԡ\Him8
lD.٨ϊ4@jm&whVBɂ،mjmIW>''R>Sٚ5~@g[QI9q5j#u᙭i{I_R9j*dJh`lEQ@,P&m`\;Ԁh)4[p\:ep% m}.R5JWg1Q8up_We0(MR}yiaxK:R%<9Ҍc_'di	`µc
0Dl+GzNa0p]ul
hMp3/,<tb8%"ۺNgG-;I	܎kX1HJf]Nc7622285Bݶy]Yp?<MݣwǠKsMmCvB,:<^1\:bKkZ9hIحfT^"eoV&c%q
dv-XAG:--8a()g-GOҞTiE^;*eJ6G7ׅ+orV-˽wPC4L/!h2|
*u4z`NN/[p^A|#HF4}5|1Xh
Y:-f'|o,x$]dcPcm?0H_.L`O\ąoS۞*_xFeRuV&Cc)qʣmbOO/]Pzf~H]m=j^q9p5|h?8-Wdo.>J^VֆH3!xƄriԕ7CuƆm4?:Я9iIX'-B-Yk0`hs[?i0E-L0v01,
<͗NlH@Q6b:ϲX6˱ o2zȳX>iM_PX
`W'Ngg6bbubˆXl(+]̡ܼ:I026bǱ"5ZBj$3yqJc!BHbŨ]1݃ŜdƂ`+0NQ_
6v#[U䎕qώG[ԌDK /> ̣!hc/8V\,m߶0SI,/M
6*qF4fSMM͵<6Gdޜk+.\vy˱CSsx}ĘEᖍ:5,e'3XR1y_:j- -.B3k	N\br[)TEZjjF'PJbֆXHg~*!OBhg5;Ak櫪\܄Ii[-x\(Y/	"O:z%چ1e0[mX=;/e[e-7	f63Ի6Ԁ6WHS%ẜp,v6
UfzXKq`[V5pX+;bvƭͤ:41d
v.$'7U6ٗPlD	nZ|v.vXNPY+^z{	Μٗ-vE٨SAQhL"	׵W-v
E%$mjv}rj
;a72OcFd}P]9H'Ab[ôHS3ˢav&˗1M{]dKȂ>5b1XZP*j}P47AY!RRVVo'I`6i`%{bdboii_qenE&.v[)4^6#{\XOlyqkQZh:HEk&Ym?b,
9zPCZKp1،EraTӺ!D:{tTGYZ[{^嫗̡_ثwQXDV}~f-]=UTZp=p5Q~`7hhs+.S`~d a[">Nf7[ͭ-*=8x*a?g
4zh_9|{9Rʦo,[;URb08E
P`w_5>%#'3Nw-gZlŞ~1}zjo9*hKUG>45J7{zO[hFBbnsd3	jySCm^!Qb:~Hm}C@[uQoT(A	pf!HK%ϸq^
n,zFȔFz(jgEci-2ם)vy4zdye&jl(3:f2O+($U5uב6XZhQz7g=O] -!l+MZ{P=[]5 ?w|3ZoM
P(aQh%1%?P'vŋȋͬ5n#fH9?+x1(|t@S%/e(-
UzE U*|Ĺlmo3?݈0qnG7VZ@A[Cm.^o$nu,^A*'5[iIs8n%OT>Up+0гo53'g&tnhn>;NY:|䴊&EWSFF°y/'|!Z|QqgֲO*aŗS81`u3{Ib'y9_fd-h90JVZkQ+{F.ѩ_MDgi"YSu,qµ?bG<N;:s	q]|hKpak4\WH[QUpjV<l|.H'bY*V^Ӊ78xUFjhpM~O2xSJ\僤[V\j7"vk"FDV?j7aZ"ʰE[A[~)MrE3Kjgʬ)Jɯd 9 UWl)!v%,Or_MN12oBz][;XFR #!2ŋXW
ߥX05Nm|bi|"<OӶQ+yd͂_mL-?$w6?FlQ<n5oW)'z1WwwQ`4q>7օbһnS67s;|[glG1(˟uM(fqUiT7iF?`oqNSC2ǐCKɿsC>἞pʅh&#'ISgoYe~2sH:/;k'Z3Y<gm3#+;,*a}9Ztq\^ߵh3_ʖG|[AFH=.?BO<r{϶}p=J8m\鴥h-fs"M.
67&y~gyze8qnB`awŊQ/Np>0x67ݱrJ}P>ٸ(qhA9+g<emT7)LojOpTM1=2KmON.Z3~XRe7rWl=	KHETB!LdI,?n1V@K*njE]~f"tG)b#"Wz2DZɂδfU5\+YUy Ƚ+b&
,1PB/7|NVMOeCLާA6CE!N{GCgV")|Ap1&u">7G19eXYP G2x2lc3B[b4	9k_=eɷn'q]AqZuxhZq/G3(vIn^Rq')&@.!&Y,ԩUuU<b,1]uεP@ݫIRX#fZb9iD=!Xb.gG8P'jtְ0`!NN~<[e/|bF~(y6)kK$NM6p(RiӉsms6/6noj׋X%N=XR0G6fK&PPF2xoGYb9-uCSC<křᦆPmB*h(PCZ2}4R3"9tP~vOYԌ>b9`zZHbԭ/tTl?lDs'eFR9<͂urfmXsc3⬣Q
%\tqzjs6
xR]}>[B=Ms-q8,p4EׯHK콣&EN>R"JHL\|fC~WQüz)f0TS"-p-5֕Ǭ:J5L1uhJQu$Pt21n` (7YfoR]6ŭFP%	̔D[*Â~PcyO';uCOfpq(ghI\8_,_49S<ӳJĳ;,6K<D@/:K)Aӕ6Jzx_7KOtoCIS<CMJE$Ou:YݪnUbu'V{ųgo:[Uӎl_%^H㆙IBuЬ{/1:l+Udc(we'1mfw,Y>҉aw-X=Φ3W(ǇK
-#c!dF79Sԙv_ۨڰo2`'i3%~N	w~/(tζAXOOZwO:~&=9Lz@Fl#h?Y]ٜvfs|!|,ʿ;V)I#޷_IflrR,f7i:n,5y},~8 aJ]zd؉3ilS9@Qt4	[RHs*Ѭo	T?)&uiҴfMN*JոP4KZp&.a:ULYkqcZϳd>k5YP2,һ%->:QAt?[$y,tveQJ&[8Y`*԰	GK441c-GZr#GA>ԝ^"&@M2+?щ#$7r<^N@)?+< kKA[F<9ђ'I͝V54l)Y$j.7Si`	!;Ò2Ig(;
^,9pSujkys.\`J}8eQb:~'R㕨Eku	z]PJ,)\*jǛUgLijh`ky%=FJ~:8c*ϴ24gxd0Z"je[o
=j?7Q:6fd_/BPnb03̷A=-Yڱ7b{IR5lW,TzJU|RP^j-~&Q-
9Fo(?sw<[(a"K^(/R7
ԷK?,%/%Rڎt/"C藗[
-BuCgGJ!)2VC&Jy5U|A1嵎_Dgܿ ,C$n䍔H"Ur%l[4ݷe~yaȝ]m:S)^0a{n˒wqELAs^Kާ6q\y%
ukg-^riKCɇ
%uʒSZt[(ғ`V%Dd9/9/Or%ܵOG45a2-9^
x'+wXr/%U-i0W2z
K>Gwmx^`&tX聗[doptEB~ВH{j9.cUNޚ!OYx]7,ZE/MxTWؒ?}v>lkz|Ӓoɷqy$V{<>wa_(u*P,`d_얿=*o[қ~+h!DS>}zAbPRٍ0q3o/J5^BdY636\z^'aR_"4ݳtWpK!jCڶ6(cK~"[SmA7ΠBi)&QIrٯ1K`Piy8[R(4MtC3,1P3L>.josę?==a<oiiWRrkҡ֨;\:/k_(K3--K˶3c^xHJ6\C㯫#Zk7/]/;}<?tН khŬ/o
I~,.uØw77+zXn"+f3` YQ©CM,m΢%Wp^:r;e;qX2g9˩@jyUª9Ѭ^^/8ƾet"LqUgmJ*rdڕHdS'hNsUDԤ.n`_*Y09a{[m}B9GY¡0GG'A͑xet5W"5mU>'>ζMk<P_"OnE7}f Z>NruMQd 6U'C{Fuֲ=*TCPQȖP{*sՒsѳdkgʎ
Od~ľ}DJ(=Yx75(&j퀣@W֫DΨn)GC\(:U$)AQU{VQ&6M~ܤHi2BǸK:L+{˰aq梁W|ž\0L TWgoqq:kRuaKutCgN{(q͋v˒~-0վ$AwsNnCnD']Y0igs~`ŪkWSӺJ[JZK~;a>Z[Pַ6S=opP4~QLj~|Ȣd\MW
~?mYX/_,&kF
+U9NDjZYԺ%ݍ-8Tcmn.IK9",jG_<
`ƪƍa2Iӽ]LtY"R蔥sqUNwwn3vZ-%Cqи
;*AҽDqt*q7.-dXwP ~hGM펨{hYuGv:¹"žѰO{_&}Uao^Œ[&Ukx1~9̈XПtEزkW1vcPP9(	6jݤ^
҉ږ2;|ֲQĔ3jp4
`pEBepgnp2[nA)yd9tD4Mbbk햪 pUZK}޺e[C؞8V2Xbt2NkHJu&iG@y4Bj	5m=hΗ~`4\Ϗ{"J
OS\2{U#ֵ
Oe'9
:~1wٖO#4=vDH3z
rk)|aόEC#]agԽ UO+AG,MzA{PMo/Mڣ}/z<NYhwhu+2QVGlۃ<r'h%I8)*iOCM8Dk\OPįO朣$0a7G
W1bZ#Twk-jZr	6O*=wjzRfl-g~{T9jGsQf=}UəfX:fG|Qgw޾n֭aG=Qn0;AuE:MR_ݎzuOTғqL|i1%4ey/ŝ-5
}$NTpmGz0~|دrz2&ۿ'klf۾E:2qL<
N gt)ң&Ŕ[YkdjQdm&ЪXA;6ֆLS&8uK6	l-5B
@'*'pNtx#D$J,Ia{xED:I}boSWQJIMy0qvY$Xu@bz̔l9QOI:8gؿ,
sFmץHtƧנ;I=$2+&']9oG;M=p8'O/ڀ*#
u6Ց9m
vMab"	9;>XtqfĠ!mh.Y1|;0&:%<fe_imj]A=2c'ұBbϾ<LX'C%&-2_̥'tpzPܖ˹^~ە<'?!k:̿;wۛHɲNM$k6UO+VfѢI/FRNK/hYlu,~,۠>Y-i!`[o3?"ͩIv\-&UlF%c0ύņR<=J٦Yճ{`bRY]{6iWݡyx2^Y4~ŏ'܂J'3,ķ|ekJa4)
0
		Hksmxn=~2:@:m~)ǲQgu7
ѧ26$E3u~Goҷ,=gqNE?i,q;EL}
0fϠ2HҳD>Ksmߢߊ^o,,}S:#L4o/[
Y+G}ۯG_g:pR6{idƺpha$~d
綣e-ab
GD1nm_snِZ+IhU56:	紳y
;}PͿ]U;͈ik[/SP~E1gB==9D6Şb7H뱇.-A0	%^-y8n5nDwZ?`0=$KhK$)Ot`DJ3?b08ve9pʂ+M
W!
Z!0m׆C@+9}(^>=K{{~/|&	Űs&aƪz}JTrYIWCg
		zTrLbup|]D# .NĿj,j\=i]IZ:?{
C&!;?P^ѵIG(,! W`WB B2jU
OMQXvH.צs3G E:B a0X:WS&"ĽYS
>`d>'5_~I8y%+A:Ш9 b}bBVP<(=P;6[id­
es}jN7a],9HXy>XK8MC/H@.w{q;#(H/|)>Mm6RT`;̜mLbCB3m{Uc'{ľRL3gyes<c] <!*%*_(2|mKNL:ՁukLi8e7>b *,$Xd"E߆x̓1Kd
1l|
@lro$^MJ=]/:lx@Uc7UVԖ_`5o!~\.l"C~
Pk9I8C=#CvbHpa(
qxNO<OuT1*Cn2՗8d1T0LKHw{e$N&8S?Â%env|4 |)	]4!l g(d
sGv>EFH0olv9Ŕ`(-˗pcicE
*悲CʪpPDll%@Hyڠp\.spjsͲ'̷ķ;|+4$`l<0 #ى0Ml`Pf*6ds<<
\<<5@>mލl`.NVZol}u#NE8ݙ-pK
U(Qql""Wċ\|JԽKTmb]P=C51OϢQ{)
VWx	=vDE 4
 <q> 1gx]W*.A"pب"w#?KK_Ѩ
;`o; ;y{qxtj˾*a_Aj(fAݠ0s`P[Tť4*SX
iD;Mf4؀+uW[ޅHNT} ^9/Jȿ#QX	TMא>|6(e	aOt8o]i|*G
?8~	KannݽCmJ~W' /aOzlRRN2N;蜏
pϒ h1nF>\<.$,g3fL6thK[Bec.viW}]:ueT-i+`g[]a 1W@{+mccEpf'd8ʃ	@2yj7o}b.m7xh~~ҕSϻE
4A_\KWLSvuO	y]~ֱUjtR8G,B jW9v
)=т#	a6tOB'!
=W3lmvya{e8'?X2_;`֠gPֆ6iAJU y-z./5{M+58 c; 7cbu3L6Иz(}>>3Rr:{)
|
lB*y
/S`#_
[J8pp?v3<Xgm
ŞARp ]Ӯޞ;SS
lpz	jt7SXC]Ef?lOCe(+t7
8Y8L51BxJY6O4Lm--%᭐ͷFma?]&ξ]&"'B=Le*dQÄg^c\fJd9gwk<ģ\|.j>P"M,(-p]gTE;V!Y2`d;=V橯h cll@{8rI;CPӵ
8^[RRRRb ?A#Ns(LA|bGІ=XM";dǌD|`I);eNdQ L~kbSお
x0p'p3KshPЎmAiǐ]cK).6)I=Alr@+æt1I(m5t%T z2edYV2보M!
{
f HA`/x'Pvx$wt.3bK㻒	ج5:d'gG7(zrAHlfd0U]" hE BdRT;!etqs-|nvqBE-7<U-9v" j|4n$-oy	ТӘ6xMׯ
nm\щ]LVyLhYE|]DwE&Fd|WD>DD3"EN_{pH*Lvv"}Ue.z*QZW]RҘ:0(1y
2~9@#]]S1ZQ*4;ׅjINB9>HB$d}$U9"aa|D;؊..K2[d9`>jCHfĴ}QF:86f_$Ieh3*`@`k]N۠MK*t}߻(`t/Sp7۰mҔ2"[t%A+!G ?~4?
puP{Vf< RڎTS44V粋lLdH) mpB(!bD10[$X)NQg)S1
.Q	׋YpuQ~Q
	;>?\HNp
됦&5)pv6h[MuڅheY"g}f]\|M?dj_^gv$q|
Ҁ,wS |0dVΏqT`Q}A3ga=G../.u&ϐ
_-逋^\Qe(j+$=d0/Sb~,x]2r
_ѐ;MqK%:ę(~!H OPQ	9Ilb#,gVP(#Twv,7a[:.qSOazqpl*KEYle@err33%nk6OL+<9E8SXlk1m&>vv1^vǪ­
ⷝ+
,ѮĒ/m*jgЯS`wEGcOXt]O
	vӈ GňvOH2-^0iDX@#ȸ*],0B<6WkkzvԛC[A`)SPRPge쁄t
&}ͦ+߈0\<JQ?AD.&F~<1UΞig*{}{Ux|"i҃p=u5QK/[-VkXcBʾ0Y~
YۏA5vx\YݩjQ)Bc\UcDSL0`cl+ߥ>l+rs/hv fٯ_ԟ=&LZ;({=D^BPkgC
ի]?xLŞ?HCi;>aIX$fwT_` ~vpFkc_EZ.OryzEz.Ϭs;x~EV  AG^[Mj1]*|%ի<z|vu ?·}l
>ÇVdp\>®G1YYF;}|3|lEn@gջpVr@ etTRsl׃04PeTז,`@EN{;*jwz ;VYE@Z&I; y\QFpsxt|4}W:e*Ǿkq 8_;C6IEi4*ʥt*be4t\Fir)|W18`^]1$080/UB%330zժ ^z_0 Z`ikkө݇$<3;CЗ/%Eq6 ,`8ClZB|])
|zSwi&j
l34*F/>}.2ATQe(f9,OڄHf7+"
vvu;Pe!a0NI8X+GFYr4\)KzY
7rxP'8+7C9"¿4XNO&LfY@e<6V.`l\EYrA`Jv\.+jva7mtv<= ױGd-%l<헛؋"7e#{C6˳od3{Od+XneG9\xsyP'y!_*/gKFy?_^WW.~Pߐ77;E]dɻy(1kb_LABu!Y>,GeQq|\|U>!n=I-Oi/~!ĿȾKr&	9E*oZ&uA~_Jcy[%ovsK+5͐Բ{Z|Wh_CZكhG^m,QOjm-|\Yڝgv`~v
>ݍրntާav7DKq̏-݋{!?ji_~]_4])SA,
jmv|
a(o~4-G|b
>9
>9
>֊Ckruq~(WkO :ʲ	`$5dwm7Rcķ6(=dWD֮X=O
QuS&X՞,~&
!_㑎~#ߡCzs:l&tqy1ОG.C;_t BE;G La^Q(:-
%tHVG0hG Ko
>*8H9h3* {X؃/+wug Řb)699<4V?jAXA7|1g,Bwa9cC?`	Ub_G `#	=WN4nf(	.*?MEbCJDM/uDȓ`mȗh^SOv_K&g8Y2VD8H>;Q8vr -S"/Tɽ?Q2_O62&gQe[0А!ggh."}RUZ,2zPogʯ<	< Ő1(E$M4M)k56ބ`fZ:ܣea-[1w)I0}|*Jp#4{A(L=nU<&6ց0N{ğ>;WlUج+Kb'IkZOqk4^2XAqvR45w@^_àepa?ak0_A[U#~XC5ћ(onWAUiNŻlѸE
DĽ>FeyX6}ckЂeA-yҵ(@6ExL,mTkCaV!m4háQ;hEp6JM+xZ٩lWa;PO;֮VwӦo;	faT0,?åS3W9ywy
	5eh?Ĺ	%6',Y΄	nG6:a<'$XR9h5E|ynx*OCw
TqUre>@P].Erl"	NXw>e;Pv
-J'vz[]>O=%(C-0T^j?uC..&&Fb,hF<R>%嗏`)>hr^\|!
Eԗ\C`c)t=҉!jojo)ڈMi
(hj1:%)*45D.KehN_abcX.6`x{O
*cHF&q$n	KW۝ʇE1~uQiIPeDSd:]oqq5P-Y8QaڃoZm+mm)mDYi&Z!?3Uh%"_ho.+ڀeVjY-+"+)0J)@@zPQ7chZ|qm͹@[N"@mоcYt$fe"&z-جA
5{ɦٛ܉rz'ר10i~#i:'ZMX6>Cuz2è&HANk?ګp{#ךmXoxm."`N´IMDnT
{WVg{,ԿXDt
2$=oWF!C;!+3s+|mPEhQb|EZ M'UJ7w|?>J9-bd/ya? rv2р6"BeuEԥcTs&᜕StOtQ\<tXˡÊ[St;N@;M DQ?!;]MQ(3t:`>?y
W5z;6%i׀0_πj=YZφ<h \WN76}(ܩz<v}$G?z9},,M2Y>
Ob
6ZSD}:Wj}&[bsi\v>*U_ѫW&}	ۡe1}9{V_@%8Q4ƽ]6kA5B=~&:-,&)ˀz:ՂN|rtǿglB=PYcC,Cd~odBJS)A{}6Ϲ5t
)_jtu|0u+
NP	=1hww;JR\SqRMln7컲ρ)떯V^Z/`WVtИV?EKD?Σ0]N
K%URU˂`4CЯ<Iz,p`,Mp3~ޮoVu),b?dgqNNPۀ8Ek&.	!⿕p.vمr2䧻 ݡzA:t8];}X5`^O]XVHa,2 >f#)9ͨϴOLI^Y 4hpxd=se[A$ctķ#4OJ)oPySJ}n>5τtMZb(= _)%/j#i};̜Sv.Th(wv&/; rw/\:EEcAIS|VM\8Wb0jR
5O}i'Bh3\v;7"<k@ׂ_&%0^*;JjGQg?[=p~^?&T }k*1&+.w<]Orp:DiF*QPmJSJ%QdQ?02`ͧX_L&6@ְ+$	*
]1M34磝_R(Z%1FdP|-AYuVK%*Y#G*#hi%֢B792c'ݒŨpq@s5ZQa\Q^XYNXz)-&PZOwȾ)MۙT#M6%`(CUK_(bjLhr'䗴;5
y
*3mYvba=q>ƅi\,e(1.I0˸W)W d\k\zĸ1nیVk쀗;ƝqҸ1W÷W~8A$.:;O`WCJ9V5)':rD>q4xC?`pU1M,p2VG,acg<\qƳ0c	S4,[آd~TatrNK?V6.N}"וC(jy #QI8\Cx>X*hm+ MvqzW2tgAu153uG"v~.MH\>BT_3Ced0C$gnc9$p4!>F}:Tb8A?GtpZYJPK1- U-A.#5BC=KK.?AF;(PԞUV}"D3I@!D,M^ݢɘy_>d,a@mqW#z6bCXOpb=z&(%@v49H܌С2D9}X!)h!,k[(ڎi
sŐcFBHHG4<ݣNE"W4\(rD#
y$`<=blQ	5{J4K:ąs%XcQ]ԮQj(U5:e; ?ĥ"W|%Dc4`s79'lDXjN
OT,[Q	OaRO\;5+cOajǏLTi8laYd&d΂iXh΅U|a*9u'l"l",O4nvcgzr]2EٓL=9XHDm@|!ӞPz Jsŵ18Gـ+n6kįvjaNo5'R4HC==A*r/ePWtQpG]^5u\vqOOFO	ޝ~o68=_UYJZآ]<?쭯^.Uc;*)0Oi.~rV$s,1Of
`6O̵py&\ms<`G
zx<~j6[fxl2aFY[s+`F`a
"-5	^(+lxQ]p8!&0섘Pqo5
0FfBC)KC?%nf:"\lռviSyg!rНD^v;ING5t$]/si؟_㋜h=M>VTP^wQ]<<I!:мOl::V,Oeoڡ @8/0Zv䙷Ump<M͝.@r'6qW p#DkZw֯Շ8~KS#GhZׄC4E/Qc/6&J343B^4~Q{za\4 ND
- ۘA0Ǡ|FO@ƛO3vg>'z"3:M!me|pd/&<(sQN9>|H&/y'`/P]"W@Η8%:OWKi޿齠syNPDɜz~'oW/trE}'Nqe.N:;]t<?IKjn]azXHՆ\}'}CTqX1QK6Yԏyq0m
Oi?# |=u-Ak3bg-*Nl|?!1A`ͭlq.R,_;߻w	'B^f6S٧ ,߳ГcoRNNl,SI >)%@=Q/t_&eA/|90ۗK}p|]ךՎRM?)Y:WɮG*׹;ܝ5vҦg7pg7pҤ>hNeg3׎ ;@N|1;Q=itbUC31JsN}d]].v⯝P++Wd=6uCHd:.:]:\RMa#; PJ'RMȽ߂4L6Hx7|!7Bo}D_TB[}]߮ إ"AHKA2=´@21ӵJ72zJhGy0Z_+Ґw\)	1XXrJNn;jw:HZH ӷ=sFQ2'"G/'b0ЅRivCk֧gjjkcd&! <0"C`QtA0WOTD""
u1汬^Oիp*,1ꚚdX~v{SU:>gVߜ/	ΰOUEϝ5!/v5cxgʞzJ qdˀI3`3ˀavC
Xp3YPci,(Ց`!pZ!je%
itijd"J=pNS<@eTDYeJD9kXת-(%3`ȋ9[i02£c/r+ s%`ބ2
j[PWC&\<1ym0߼ʼ֙`y<`
	x
^[Rt5A0)	H^*kT59Jba ^'!hUI*e:wk_3NkςrDBZ7`<T6SdWP|
+\	ޚG=dVV%,volzsgvlȲ_A|ԝ@9gE"8
X ôD;U.r
f%|p~_47fGWl5;]I~l@ OUCc5>lhO7ld#M)\U[U le"r,yz;LJ8&&tKxo`!M(3߂>.6TꏨĘ	Fdsr-كbs?SђH1Ad*OCbjz(irXUImJh ڧ ̽Pbo?5?sJG$!Ϝ׋<D;Dm
X4kg%$
4~lX6VN]GyF#avrA:gK(YO
nUL.@lE|e=CM0?_҄=ZPX|UZJ|CbS5 Ӫʬ~Ǫʯ	?Ag`*df5u2P`T_LSRӏR:ӝRɌ`."dTeLhzvhғu2KO<ʵkj:(΁5X`5[ELi4Ǳ12(>V3<BA3Bp4J-O)GQ
>3/m;;&:*Dst~#7 UoauKKJ4JT49BIyBqr/KA2&[Z~k-:ZʴI(&Lo~
ĺI4RE$z2TQӳu'g.nĉ&NiP@V+ĉ8n^*oygk>Pn=O\'+qMg>$G*p)$==dچdj
X&SL&Uh#2KCI3b0^FE(/ڮQ>(;ͭdnrȪ#ƱDY|[h3Bu%d`$7=@,/tнt?t5+vq#uLі2ؔ`L8: u~0i 1>xT+lD9.(v jR|Dcʧ	Ig jY`,hFHs
7&i\ص?:t}S{$t|A]'lUb_VZJwԵϫOfEP?&"v^Pa v1{;a©ve`<α0׮v%\ǫ~Ԯv#SڐL54R4/x
^ZW@1Wyd8N.\R)ߒ 
0*8aO Lg%rX{"GD3  SyFijeK"jEcJd&`(bd>tn
KD9*@lPq2s6ٰkoadJ'"S$eQ+CBZאזnV%[3ϔsO{<RD/hm4`TRĤ,dԿ/R9^=<4(C=b9.ƥ-3e<_ɺk92A ?G sy(d:
H%6X>B2B(/>BJRZ<X
Q_55*v$x-h^rd^Nؗ^}!=ERs&>eTO^gKHl+Ai%e]E	tsvk>Zq+*hnAf݊Z
q{ol"2	=p$X+
Lro#pvf[֐H?I˒Qfi#G䣨 z6{MAzjrF!z]v-"$A(NgAٙDz+VT&@e-r&@luIڜ?ZHmUزgR%a_+!֡7 v;2_#CaNeca
+`ٯUFpXm	`lCEa=:---kzFӢ|RK"yPgzaxUg~U0F)7;ح(Ikv:$0b\<(<E⻩^dGZ$[}ݹ3/ ;cěg};^~y+dO:\kek<^XbG3h}/'
}0>a
|{h20k#qM!Ctc 8\}NmH	vic]4wisep2oC}"errQqXYڪ:] WVrU5,n$IBG	PG,zB8AU?Z}MD2MI_'o"#I1co%]`YRa!/ m c1M-d=GJފ'vG\y0S*RanO4c=`a*+LXʷ@T8U(<|ɨuCPe5&1;O2{EMd7kg`cs|05uF,/ ay~/bgÍNp4PXeöGYSԟ%CǠD!&@CE?qLA)"$i NM'B0x[?Hip@!1~gA1񒳷7wHKCa񚉨.<^9~⦎d*>)grO	8Z.1<BvS`PeRRVbwzщȌ.wS2
)8%f'gjH?]SiajStJBmS
'H,X{	Pe3]Myd`,%ΆebkvJFCUzJq{Y_ ʵe#¼!#jmPBp7n8/8o׌u"\p@pw[OaFSJ5
خ7֢VCq<`-MΔ%iI}GSc.Stc0~|+'0bK
2\J-jtbhĜ}1
`$czuQ[F~	_jS-jM81~t__~&g}Yb`Kot31i4q[/7dtRpoyA4;&Gb9~`H 'le5cR	2!/KhQ

53BtB
hU/+)	_25H,QNAd2&V_XSHTĦA2CٟٻzSNLab.Iw/5P9Fw (LwaM.Ю95'.$D\^>yXo@Nxo&`e:X!{p<5?ߘi3"Ѥ&H&%=隁#1^+uBw{+/ˊ%T<&Gϲ{0ޜ	[qlv܏C\</D+촟z4vPear\T 3J{
F!KݍL
'ƴRr`whTgOQėIQש?5>ɗ;OV_]roPoTP5P6yXG>F	Z}$9D1
8tWTaBef4]~U~Y~-#VOKD2/?GI¥_|_:]َhTUZ@BP'eKoT|Ap5״kʳ5|->WkъkqM带rܡzr>|m iKod%⼩3qԙ>UV%deA@	pJ,qAۥu|8t1:fW]uroX,
.e;#"R) %[q}92(t΀,  QgoQUYtVҪK9N~*>FD>Z|Go~AXDHSnc`<Ҏ'h僓Fƣ[z܌de75v]Up0jgI"/uL?})8
i4?FgHφ`>,/d
祍+\зlxgF]Gggݱ^?7iFIԀ<#/̔w Q-')8Sn\e Ă04hugتb#e^c 8qDd_dfh>\Wv@:Bcs?@EZ藍2}h	I~?$EQ,ߊWᓯc	9gOm|;}g[vށ/WglMBnqix>D_!S|ǽ>s'ߏ>(M0?#lQQ>o!k<~oCPK   dO\  `  :   org/mozilla/javascript/ScriptRuntime$StringIdOrIndex.classR]kA=7&鶉Z!IE(Kt!4`$dHlvew"ZB)>Xh|;X >;s=~M<."E6|	0z^} :`?T/JU@Ep	qԴkr)kMȨwu!!*Cܖ1墄2!'	sj`m]A(e$H^Ph >*Zj_gNj^O1[s2h42/G(6A;gʞHn*˄1Ip(vJ7\)o4AYge^9+վjWpj+L^Ӛ`òOPb>,4q6d'-8F߱{q	H3wnWZE3!cY<0xdV8|?PK   dO\ńg  N  K   org/mozilla/javascript/ArrayLikeAbstractOperations$IterativeOperation.classToV=n>xĤ
+$`lk6+M&.$sm8ն_?iiM?jڽ^		)s|߹? 7bHŻG?{v;4j;$v;IݹF"xGZ
9̶(m
z5{
kb=Vom=2kk,(٨m2?-Pb[&gFPo4o8:ggyR`傔37+	|Y\f5mksHŬ\w(h/Ŧ
w=Pl*.	\Ԑ7fۧܠ絾Up|ljv;pwx6UOp~`|re֐ө3U

BCQCIèq
SfWKXº
˕A5J5=-?/vwRO핁/YQ
ns4e6t=w"cKD7ݘbȑKO
ݤLҦ		8vD%vԋ;^Ͻ
硲^7Y;
{!
D#XJ^de+WTEL{ ,(R,XJq4Ra4&&`kf	qW_)yyo/cC2:!zIk(?[tQ0Q'yICBF1fK/p[T.Sak%ΏY{--ߡ8>2C\v>Fl i	}
$$?k92\JJr#'.gyI%JbH&Ɉ$_qc}iNH`FNs}vT<58Ee1I4;&!={Ȧ}!Mlɡ)݄27PK   dO\q3  9  8   org/mozilla/javascript/ArrayLikeAbstractOperations.class[|Tՙ2y\hd$@4@Њ%LfdQZeh[[ڊv[u}nkQ?N&&"u߯s9uf«O=V#\p
FGjDwέV4-p_Kҗ	@>d'+GjҾh*֛O";[c۬ξt*MRt,aJoIvԗQC2v?U94ӓsE:x\z8ϊV+ѝRZ}}ԒnG (B촴'ұKM'U0Z$U1U>ԃI,h:'8[W#PTN10UW[otn`pe`-Ȏ+8e\``
GUME`ʺ?l6$T4F	gݸal@ȃJUԿf躭=&h>XB"谴ZN=YcK	)+r/ Pҳ1p:KtKX"媵Mc6Z@Sı~
F_r1Ǐb`bO_7Ra0djZTbrYjfW`9a/TJ9[=JZ
B`&ͱEڽD_:25ވvH<nOu֞a8\ezz\yx8do݊^r|L
Gq֍RvnnihjWyk1!eED~9)<e<g)@
X{#d<#}b*}]Vwlj^я8z<HH66{k2Al՛' WAS m3`[,f4`ݯjNVvbMbH\	-*<xeN.K&VlxoMl0]jo
7QԾ~۱a26iA:ET:;6)6NCOEz{:q%#AEΝ:yA~I+ꏦ)m0^8aM#)h?3	z~wcΞd|Eܞ𚦆0y:`~P!q}-s[
|Cc}MRðR?G=xTc'Ǎ~NҰ=L?7qd&\dN<2/U,h^"9ٟ5?	&wڹ.Z["11<ei|R0b`OXkI+(V1pRpT/O۱Q7iB`a8:+
g
<eHݴcx19-x/i`rjo~Wяe_W9i}D|=~,y-M2Ւ؜E|]?}ZƍsE\,eW&ۋW_z=>ZqQ}b
+r3w_Uo?M{E:ujV_-gU(8멖>Oՙ@QV?3sBdtG3-Xzp⟥o:q^¯<ෂe~VMkX5qxTJVOozAγU{/i8J7${z#\L5={DOmR$kXjWՍMk[;65^c5Š?׌Z .bH8:U':twqqCdr[owK?yNT˜_>&Ó4|O`mTcH@υ)2X&&)PקÒ$ t0d6bs,s!dNC#=GbTRv#	8
)K!/᠋Q.Vhoib}Ї|Xw"WJ¥vZ
.)heyM5x]$SϙAgZ³KD&L^Lҡ#	gk?VJsGFR챠%B9`Yd߾|&O$N=o[7V+M y%Y3塬`NGVEzm7%vh*aLDzN:Gȅ3Xf\R)]MWBO%V^GoT搘:}.x-TOpW>*#)9DFMb#%)+㖍yf8KTOnUb76lGv7aEEb.!եO)`Xj7KH$_w =6.ĎC591ͯ+1JL٫C,8]8chO~x+RvBsUx`<O9(ؗFBTjJsii@Y}UY)edZ]PJ!$sXؗ͆OV#[!8odQ,=ͪi#:%s=4wfMH+ne)Wca^^(OԷʚ±2cEexϢs>(poP'j6қ׉MvI#f<.	{=Jϴ'c6xMQ]DՓT`:\Q?H#5|]'!)tACԧ=Ae>KMfV"uIeU4]!xK2{\(/2,\LȡER.$X'^ZȁRx=5@ȥ}&!OC24	N
)\R$Wu̐+	:ogbbC<AL?U2C8o&tBk!S;4SC"a5#Lvh6β2,K+,̲2K
z\Ff|X&sX&ROi}S?h4d	
(Q柬k5,E҈6HYS\iwhhA"MKCvr-hQzQmG!WY5כBJt94 ^:Tb'bWC[,mYڲekז-ßnڨu#֍D7ԍj.1E ]%xÞ())
cztt>~?  Z(	X]5C8AN1A8 *5헺|@f7_е{ N"^j|_3[8W8aWk
js;@mI$Xg/^u`uduI| e\1I8aO+'A9)lj6A~3x׹P7=}MB^Ky]k8>|7'}0^
Aj f,"5\"3w 1Ԝ4%wᮃd8R[2pk>K2c$_>|T]jOd_`nA!nT,.,; {$܈q7{x?>,>aů(āL<.e8D;~R`H.aYm܅#0>-3	|V9(_Ɨ##|-oWow*q4o>(-W!=\.SI
_㧲n$=ߓV$b_VC|%ʷ]P&$2BP&R<~,?y#uL~#B|NO50(ZB qYGuHee佊r~zbxpc(䧱T	9KPt۷WrcGJ^[<#;^֑pkh:҈*x}{*3뜦9tyYtb>G~UT0_M?J'=ycCx8|s`XUxO	UN?'Gt&I1ß/~I{	k}~Nۄ
F6P#* !<)<SĪ$=EJR/~cFs?uYV"|gڪGqua|>.cO<+o,0^2K'@
5!"Q,kKc2miyi89
"3TcQYR+s	y8бp4^tRwOkunŸie'IN'>P9k~gY`1C&J&ctiX.Xقn&*Dڗ<3+Nd)t<
E0pOU_ovHU1ӷ}ȟisef-Cj\@J0`k*REt"/͆rSS{Ĵ9*u`zGA%,ñc'ڋT3cZR`&P%p!RkV 'e,DB$*5tc}y!gVpnْNFtf{UBqe"kDg=)m-cۈBJ#3V+pzQmg⫗^KL&?k\9ԒѮSϧ:kb8uå8?vp;lM<R?9hEMаj*I
Bנ,@G73?i7Ԃm
p]]"ajfPvQ-,%kHhAXKmG\Fb6F3vոt+n`tYtwd{-RW*K1i`u,z٦Ѭfxt8Knfd1ɒUzv\G3YKcs;3kC!O+l''+p]LWQ2E4㭲vxRtU4*|֍!/Eұ}MOi8˼M%fHi+YsNV>PC!A[!q9sT~Zq9COI!X-UP@IEn@SQU&K[M=Wz$A-ŒbJxz{M!שNЯN2$oT(0]tu_:,hݐ)!_JYs<x,+͐lY&e73[Q)Zn|ٍrǨNxRyiJh\'f0SkSu=sh;n+_U4
xPl4@2{ÓrR}T͛KȻ۽nf	K2%F="!o#ԂW\jrWr"nz/KM	~mE|dPK   dO\s70  r  &   org/mozilla/javascript/SymbolKey.classVsUlByTg}A"i4MB6-/lvJQTo|? 88茣3)4/Lrܜssnx?PJU0N!C5B	-M/m~ԈHXIf0YgtPCRs1M2՜& +#+NA7ǺVz4դnf4ǖl .?PFFZ[:!3Mi;gW a
;PmGђLGwU{<be	guB6Yfۖ(:&l
Dp[ۖgJ[ۂTV	mh6Nj̨aݡ8yҎ-ua
.)ޅީ;ZAuB
v"$A	X޽L^K !`ػHRtHԳDB{9kZc$<kӉ%}#pO
<켖5Y%t3kQIF#rT񣧌<ڲa̶WB
HY@S\ۭ/hjV5߀kH"	Gd*	w?>8vJ3C̫RѾ葤ܬ=cCylu2%iyЊS83=&83#~<]ޟۄ
H8f#X̏2-o./Y	0M1ĵ}u	̧D)QÌL	NIM;crY+Dqp#4Uwn~<:l2dj R:rêQԪgֹM3Ν1GbnT+]`Jh{UθNVdc.q>t[9ߌlGLyw܌JG0=7͛vtg!!}کjKLcĒE^sH2	(Vzu@	`(nrl5g~\V .3i
r 9eMj^zU34h^gѯYj!z1Y|"k	t^[",%z%4BPm[#NXE|#`=E,;7B'>E<z!N<G
<&6|鹉L.=ɘ'yrؓ=y''<iy2.\݀b@Qvc!Y~B{
7P{"wfNͮ^⛰'F2^	dU_GYp_s(^=, Q\ɀ* z"*"oMUPwa|ؽs``E[x{Aif^9tv%u2*ghe%4vM`Kyrf65	D(wR;yqgՉveyk8@,	/FF_aOP樎7BvMҡ96| pA}Gװ&vGvquI=HIr`IMp5UR\=\RrWՒɒ:ɒj222^=`#Va1@cDNE9M<6G_'J|[#|O	-WA":Є-GPK   dO\/XZY     0   org/mozilla/javascript/ContinuationPending.class[o@&ʥPnIZ'U%Ԓ

WqWf+ǎuU xďB̺V0#_f|3w pU*0V	=Wr$wXg0/C0Zu`1tеGy֐	XٻQkKIew2Cŕ`XO!Dd9[&xI'ZX8jt%"H{ p܋Ee7h(|%v
s*Oq4;1lL+R07j
°uیB\>6"y|\lGA:'\ZojnO/Җy,pD`NAOm2).Qԣ>W~ASm}h 5p)Z>US+@-k)Nb	L	:C;!3gdЙ#ĈՔz,v5H#oGgsօoN7ȝDuPK   dO\IOŭ
  +  (   org/mozilla/javascript/BuiltInSlot.classZ	|T&oy	a&Y H 	H@"HP֫^-mZVpXmw}ˣUK&
 7|;	}I Ml3,J4eYW<lEvABeDY@0	{DWM$X0'X#P
&q6HE6uB6(P*cao
6,uƠl\qKx<xEtU}j>`@QW;%t0T^2*eTINM	&UЩ|Z	HVFGN`L!	LQ
ܨ_TfFi2PP5q5[-2.GaAFrN`ڢ=2{,al;qX6|2ő_N\g-Zygsk!߸LOl\dJ7
Su+1❳B`K﬘#`eq}-c)KX	6,9XÂ\'!
DoT]Ebgz pgyCəQB Rx5lr+G`!NS6o*ƹX'a=`#_-GKd0.bhxb3|h	%!2|yoWJ*[Dl8T&	oKlA. Ѧ/N>Z3h(kWt Bc	%X	E#ɰUM9UJ3"2 =\aA:gZ{B2H2T-*X/Tɽ8ieǩ7vH蕱z`ب\#qUx&SYEs46\Ke\S+~7x\ȬʌAcؗ/qfot^5P+c)ixB
5T0~hη\+:
l?]JkQįZq#&QA4[s
;e|7Q)nM*Ab,~АNa*ǊH#P]@y	|2>5RMKaiŧ.
*mhN>Nw5秕eϿGƽ|{a%Ѣ
|e|/u:R>[X q2(tYb^	1$DO0v*dH
'T)c	Skj\w	6<}?2ԯc(2PPʿn]%%K换PN]08Evfڵ =a9%ەP[ˉMħ)d-z?Z]
|4J<
jJ~͢CAXWB'suJfje.
Գn{79#
ػQ+9ra_ir9~IMgF>UV_$ګL~29OBfǡčcY	Wd{M@\Tiyk7sfE
ϒX$y:H*-Re|&ۋskQ
<;FYo3|E՜:y
ŕJu{ʨt7# 
P-n	:^^KuU9tJg[x9~lS2f{9ď>3Gt%c1*b%0gt*f88ru曱NצktU;Պ]+A$c>uI署esW
Wq>!I1%~e)dd@hHCV7bCe܂@+ex㝼nxhѵưÎ2lhbcef皐ibq6`Ys8PΡB#-IKyT	&|*[j[A5N'Hwr~̵._8YH	ʅLD6*	SrT'*Y*C\\3ّ0'ҁ,1CIQUb2&
?k12-`8^CC^^z	J'<IԻE(0a,8HSjX}(Kf<EO-b<KkӖi<Sxzf{_&xPPF{t,D5#[*Y8,vTbT[g`20WU*3q
n},@__r|CÑ)b=aba0pB8!]"	qfc)q8C.qZ	M!X.[Zlƺ>T}va)ai+-$anzQ&"(*?_lH2wһ].Cz!KxX\\\\4O
M#i5r-&M#v7<\Nڠv*/x$g4!ԽBim|zLȑ;f3rw^wo+~sF>gXN
{8v.ˀrIr+m`{:
:{Cp H.F*ێ:?Y̳~\
n6w?,BògY@F3]a3'̘B6Oiwdq#NrH7
ZPH#l=,z?OzZ6]W d6>?ET2+;2pU*
\JW\[G!Qu+r0Su0w>lL)DXC0@@G4G8rίe< h;Nįx9~-N3,7^MC{KnAQp ݓY:
NNWNLJ6g=
2@9uP6~Nг4Ys0IB^&&ئ!6=sxAD}Fwfek?2+@/D5qmnK?.l1LۮS,pGl)=zcúYCn.rZEi=L4%JLd.B(~Ҭ#f+a>WDUxS41͢P"qcY]]Ƴ"s,o%a;;N$%ƨvHEFiLLHEͅM@hj@r~|A/PXBys/v~~|lߏ	
[J췊Ь{Hd}N,Χ]G?'3>џBߋG'ŶI15MmLb+Ҥ4)v R:rz8SRWd  9l@7)T{ᑍ`w`mj?-k2	װۄ7,XfT}ofv.V9r{gf&X+_ꭈJM!"()nv*N54Z8tjO+:f3PK   dO\((Pa  g  .   org/mozilla/javascript/SlotMapOwner$Iter.classS]OA=ݲ("
TAm"I-5MmNN_L}#&(&,T;{ν?~}&,R0,y10sAdXO.3J3Ad,d!P>|;*4v##{$]B	Y0Pz[\uEGzaEFEZ8ǘb2!F-V8dI¸a\	?|.CS*
4IJ5/ΦM,~G:'FSny1DI)&-uuE

G@1ww	#݈WO;N_|0bSً;`]nKC2C~=uq,PH7Iڤ$YhFY̮~N)\y)2xi:ycޕw;X`a{d04쀾|G	ܜRNqFժߑC #D`@74'#~$a$TA(Z(ܦ엓N&mx֣"
lVq]KLPK   dO\?     )   org/mozilla/javascript/LazyLoadSlot.classTmOP=
,
Smls\L!cF*5}udKu/ڇmϽmdSqB=9>~0!) 0`m0MkuqJ+0g1aԚ[zݩ,.k-ĩù
d|MFHLU;>ZZc# SAb}W]pXBA7z~H7I}ò7NF?D{w)ǲ#Ha@ Ҥ3bx))F!;5vO.8䈂QnOU$_#CVTFS_^UmYuͬiE4vn*5m
͆~dl~ΦqڕkR8
4u0Uv&[HSL1DWfIixʐo].CwkuuӶ܌7Ջ5bu3`d_5	8$Rs4!GCYf.*
'"bghz=9+Ap2k5.X(G4R'Ds(ՂSDq>N.$b	ҍ8%ы[riO.LOь!m'8C,!W'pGCbFjK_'D',giId#@B"\,}3_
*$N,2/_SC<"?}Y}\Nx"cF&c':cD:$vJmRϐmV\\ PK   dO\4E  N  6   org/mozilla/javascript/Interpreter$DoSetConstVar.classUmSU~nHItC
2E	&@bK65%m`$tnfCWؑQoejZLf>uz W`D GPCiGS
;ӲchUtSy)=/+UteZLtj8aYòVC,6.>AGAoF
וf
ZV
q
0NmeTDT]i
CX:xO7SkRشkSudb	UN6Z$e()EMT-+jB!m||
EjgN`9f5\BCu/p$Euѭ򿊙(0ϱ!]6t]\zf4bnǸ񉆫Xd>P:R4ڶk6Ċ\6_c(%;ʎa
Bҩk>U:qir|0G[圲p	w˥PfeA/Xk7*Baa/cazQm>9 n?oOS&3fk♯NS\0LöԒP^_>IAڽt&j!n*jDEjź'5ro:-+sGcd-]ZƱl荞xpE@,&DП>?`NQF44+sO|J}kyVyӛ}}-|fxqgFX>1?
fP_*(»?`nlPHohfc~>J8_b? !#
z
׉m0ǰuS/ƒ9nzq!O>w_=+`ADac
#qqwHSGrw9Jd%KlxtΐMl!JKk.PK   dO\,  	  7   org/mozilla/javascript/Interpreter$DoGeneratorEnd.classUmWG~vWD+jڂ$mRZ	/.	%Uvqq;S?9Q=+1949g;s}?7YԓC8f\-637=!#8}t^lc9tf=	I
G1LFX0l{3Lmys0Рcb[UCbwst2	|आabMA*Aۘ>pgh0	D
+B×a80q;UCKo=s8`L\_ 5p`&BtƖ)&:[	7deH&4\$e7=okl<4
pW.t(zuBd8EJysac)9<kN-*$:Cr){({KNnkh!0U(]`BL'G+w)^sNnbE	UܦgRM'rjdyFC
]v2n)568ëZbH9[k:ª.*4PTͯ-޼X.2LExmA^tp+Z/5ܻ#D5
{,~+'{1(|M?;u%;^&jJxOhl醜&V8{5a]_!nzCa,Y2yCm**
-קѠe+x~L=aCԇ{A6å"9`WFJџq0*KO=خWnC};kz`~z A]'>^Ob
 )"31_?P|yFRwW0Ĩ77WG ~C<B=&1zqqMMJ
Y<%i觰$=)Ԉ.}BRSZPK   dO\  -  3   org/mozilla/javascript/Interpreter$DoEnumInit.classUmSU~.͒ecoU`
bKB(!hЊ3+]Xv}i[IB~sw̀R=gϞ{GZG*]o'>lLY [t5<AѢ^X,ۦ3$-
n3$2c)"A7ayӶ=s_0~`.lr6֮^9
yw1_
̀FjnSx0&bqݱf0Y]cR:"'h.3(~af,xj20+T#R	Ml-1d
cmQIz-g[*bG`kLL +&y)(Y+Wֆ>`	Gfxu|(G6ڑNƨ[Ig
Tp"
"ntw)Vmъcjcbq~Jݦ
ϕ,Gč %nڄ%ߏJScmQrhz(><]i<{.ʢAP9Mw~"m#I|ٹSq4rUwVFT
e~҂M
Xdy[iKV\?PsvFqmjGNOT7Liae-l䯇t݀!GoY:<=gpo
O"Xi$iNB:Dڜ:?<hޞSbDW13(|).Hr Nl)zy :<:2N;3|U)l?CBQHS=s3<M<o.2*VkQM2R,ɭ
]6`٠[ɒ(4Կ0a޷@㉵yD+'3ɯ+:
~I>M PK   dO\|_:    ,   org/mozilla/javascript/NativeJavaArray.classX	xGNb811l)!qqQ0vl׎YUp(GJKBZ%CRz7̎W,5m%ٙwm|˖`lvjRb8%aWEc1-^"F4i{43SzD
nҶh<j3]tXܴ͗1->ޮG֦AI(Pq=X
X$hJ~⣉
ZL$wmG7ip8ESPb)jBcp溘J1T66eaexQK0":C[}M"kqV0hu5
zq"40z dTpSXX.%Bش?`X+gq3:wNDM2,$AGXӹ`8.aӈǄgl81,l1		Jp"[rDEuG*ZFViW\@ģ&1L]h,>*a=Cyd⥸Aԅ
B*6ym9ЯHkT[HEzmZJ-"Jzp1UcЙ]É؅:QQ
Y?ٱcmw'CCAusGыb*.eءN-{GC-wr_b'T1ڟ91"«hC@zQ9*il$̄)_Y84yv;T0^8A3'J]Kڒaϋ\mu}xjlǇu%0[FO+TXRȾmLW[,/ةJ DuKYd@'9W0#aa٥y½ŝ<L4vޠj\.A4&Ii:To$z](Op}oV\Oŏ]bhIRXg>q#nRV7mG\W/
FÜQN/}n;SŻx'}4)x݃[qW&1]}Tk*#w`XN<nfXa'DPA|0nO'xex}XGp7ղe/ G)^r̈g'Zi%12
I~۽'|R}Wd*Mi9U,iS̈́VG~3EYOaϪ8/h=4c-\xP	-!<<Jq+W9]>7|NyFS!;F'pC2N*8%Of͠!λWT|_#?+1dŔ7MǷr,mFcTڗwU|'vIm[RWiqb`(Q-6)*!&q|(y홉g[,BR.Kn'V[r}݉H8.s[,МO/R7tZk(I @['
=B+T<#NI]Wg}$yS|OJæq;#3Gf?`jɹ55	Qg:;G\Jaϖ+"S'.!GkI`8icӱM"&gE9'=憣w/\\jɠ{e<滶E|<2ZrŴ'kfs:'R_TMyL)򮲨<>`WdP{É7D=9y/6}8~L?OZ}Պ;}{ҵ)~5ӝcSSt-K4]U5~_Cc?NJts?p %ꅄjk~W c[wtgJ`A	 <WfA+.yxVtVM|*bp>[Wj^h)?qL<qbT1Kֻo>&-e3hڍCXr =_Yu
~tXH2'CAtBv]$>_MO'#$̥U
%V^nu30
{k/\lTğ09R
*L{F껌	/;߃ˉwP )!#-R2Jਐ6HMil&	Yݶx7[g?
R9貼52n,.^y4g0ŶݨKB'bW <PQ	BtнeeC%P@`!3Ca7P3$8qWpgqٿE+3ajo`P021 .Ϣwsir,?K`0A'X@ĩI|?i/eqe<ŨVWKuWHjDMsYrQ,X7ERTIhIV#͜Y9wOD(F
DR<Zdjz^C?nnnMվ޿#"f\Y
!f]qT+XJ`yJ0-J5dduY s~ɉ0=YuUxLas*Y빣zǑ;Q=\ ~@޿pݔkq9*n%P2p<+M
ph<&A<1
U[<`{x=,Y/(EO>`)y0}q_ޏJnJvY~{V[^*up&h|]SG8'QC8tN,K$؍16NۤZa}_J<Qɕhu]YfTfAR6]$"e+PK   dO\@  e  4   org/mozilla/javascript/Interpreter$DoRegIndex1.classTOPQV*l7VDXhf|pdك㋥bM..<7iےeۤ{s=N'2ȪPt0Cgvn_/x9}W,?n<;+1d˕<W阁PKز=o7{!vma3ۓq;dcs*
:(11L"ZA|f<A/踌EZfqT\qCHҋ×P-z
-dP ڮ;_ځc{v٦"޻TwdP;&|(iGMe}>mMs*3d0&EN.~QRϭ
03h{ t+UK"jċ *6'{b-a|
yUAgA620pF|20Ldk||Szb;X	b|cߵcǸDbWjISޞ`}"9J,1ÄcoVcmĒEE-f]G=&6IVKF4&(&H>"PK   dO\    9   org/mozilla/javascript/Interpreter$InterpreterState.classRMo@};	&		|)5B@DDz۸+g@+~ ?
1MEÅbkwf޼_ x
(((ch<JJwcTҼd(v**aOgI4_dB83,oP
?[zHu$>
^
B-UnylV==WFձLNIʅE"D`B.L	D(qO
q7+ [L2SZ礍uGH%ӱNa:gҞȜyDjZyr5$Zj[]!+{/y.URWG{Hb54SX˸޴pX*c&y),6/\7h~x7cvPEh{q'xRvgbγ
γZn9λvmW!dPK   dO\MQx^s    4   org/mozilla/javascript/Interpreter$DoScopeLoad.classT[OQ,]VXD. XoEx(!65a{n{Gi`|D5966ٙ=;73g.~6u`PC@C+~Sho]vdIAϙʠmK.CUsVh
HK0x
y,vX%Qi0
8C6cfDv\rjY288Mc>-*."%_1L<*tNeIe##]Ĕ5}T:aD?͐Op]~]V}`H9:"xƫ]Q)ҡXJpnJڔ}wd)	{扬\2Vobs0/r؋K"u=ʇ[ԕubQ2{&&B[VOFD;#w3=#93,棐c&¢~
z+d$>DS}c."rOepbI%\Ζ>]QIWf`aȫQݠR/G+WH[[:tZE܅N>G"Y"Jr
PK   dO\ 7A    '   org/mozilla/javascript/ScriptOrFn.classN@A#&IACin%K1ѧ𡌳X|3@

GJT(?y,4(08D	C=ɍ>90GPRrd,S_h8MG<ZJG9g8F9	Ix)׺K[iӿunReՕa̓M[i 'Rnfx^ɇODܚ:#i^)0gEH-i85i-Ti]6{NalHk是YXQ[8HPK   dO\UK/    1   org/mozilla/javascript/Interpreter$DoBigInt.classT]o0=^e-Z1;x(⁢JU4	x
H*qW(BB\;[5Me$ϵ}9Clg1	B[A8'}?	ݑ۾(nHcGx1?r}W>fH{, c"k,ZC:yϰmy@8r&Σ4יݓ\
FW,\@!wB}6M\d&}QF+xKx.{4Rx!]zMSL3VZWh+؉l&G"{lu؝aΙ09ǻHg[D\Uj{z(AU.^0㪓j(" &+1XmE"Ҥ'Vdy::VPlBF|/S
V쀫	c0؃A@6Y9Ţ7,֧X36!J֌qԌH*ElNMBJ[Q h+VKu#KR
R["	W	#BPK   dO\N'6    3   org/mozilla/javascript/Interpreter$DoStartSub.classUnG&=eCR$PHJ!BMIdw1L{[FT%Л/zf!B1s̜9;?s,l# RsEnGyM+JFH=Qb\Aq̐?=aa  ,D!6+Z9狠#]UЖ:0C".|͒M;8m%+{-&Ňaw07&+k8G|cTwoN߄/ؖuY088OT*"mLcca⺧n˭:ñ=Y^ok+mW6uqRR
)HU[5*L3U@55vҕ>fB}Qz/
BbCV^`Oo@<˵5yN&CNm],_݇ӳ!a^M)a+r劧+9ƂvC
&cu-q08 +26Fߞ5֞a1߷h
{ @&џf#Ki#Έ'g7ǟǰcdSX2Nc{
#AwI<A#~1C+9UKuIl?Dg_|z#W,l))8n_ذ1!waPX0#y:(}-]83Bw4qcIs}/qtK(^4ՄM@JFGgE:UPK   dO\~  Y  *   org/mozilla/javascript/NativeWeakMap.classX	x~MfLBX W  4	&Q
IX	)`JբzۂGkh5wmӶVfg7ay2<c,b|p-##xOC4aҧ$h/KSumW&C51fw	> 3TҪ>UѢ2	SngmPPO5$ͨ(mC!12Kwq%2T%ĺ"JD'æbd'팗1
©MfsHG-+aˉFJ0+AyQqGS=_;_<UF1'Ts}0
swJ^5nn2}WT/*I2fV14;mv`W˨A-3vGuE5T	aՓFTM5U?yL/ͩDmS~x0 Xy2G#\WuEn¶u
՝mM/uF(gewrRaX[=Sjlp7a2.DbzCR719t.CXCj8ʽ)92GbfeWXÓ/*§ʸA,L'i>nb	dЖ۪VȽvVfi=:d\KIDVōXT5HIflaImۢd.s!9_zNl<=i *Ջ.aPEqo*@7z$lv/-+CS!oUS0DA16xb#//6?ƌ>G
IOђTʪ6zދS'$쒱{r{]n ME62b+/qgkm;;\kdM@IVu\
]AZ[?$cnRgXE#2&cz%Sf!$D1|7	ʸ
n(G}zrQls<nW&U'9DkN䀌\ޤq.&MP&P7+>s'2>qJ}x5g+5%nn6bYg%<$a{ǋsQ>	iIUbtUIjUyCEҨgPFPtb	*ܾCSc'eW6ɷ4"hF^t3dr
;b''}_?Tz~UƳDZ]f-@;ޭUl/PsqsorSsOȋY|28PGWdp{SP4(/l+֡XOZcd zaΙ6^Le+
UI8&4MQxO2f˭ůe}MDL6ǇWYa0U;)dcj<AgZ
E7;x]ۼ`S(<ٌ;`XkH2"wt_k2֥۬4(1u($;]̑2\n|SOfpwQ䞎=u0Gpe-vN*\O%!S	s=غ&ʶ*ԤʱY\P%*@JPƗSC*i1J^D[EB*_ܩ*t7W]&b#1u+!99YX)qXm5UFR8le:UKͼ(3 sl hvE>T얄5?/UQ-C<ȧ$)VMl*~B	/L4wͩj޿sSuTVS|l>[ 2;-l,CEJ]|C&ϢEK5De0v${|:Fm骒}P't]PeΧZ;"$[fTP rU?;t= x/E \߈Z
7`'!UpQ~ŏE/`^#J'^v(X/s9QLj+1?fDy!E!b^OB8seXR]S7`L]?Vx~;ByB*nZ\:`>b"tES%7pGً78^6?]<f㯣7?vT/dmǣ>z-	E(Z!v Оl	,'AbӜS)'(qө2"2LalKA8Z?}#=qp\k3n,rn,rn,bnĈ1}wצ@9O;9{ z叭g/Y,lQ	hp*ZNygqŇk?`V?szr%Sh}Κ=+D;\8 l$rȑ/'vb:.!Tz
cF.GBܶ{`,TQ۶Nt;AAc6aSJ\>CvLO<:ϼC'U֝ '; '; '; ' zH,Ob-BTW@7rE1̯ci)&#q|Ur.+KB%F=ɀ4Q[4b>!I{,>`9f˸Ni% |8rXr]F+!En+,Irnjw ?
oKbӶ,͍TSߜ
N#YFƉ$J')<ɹX!+Y.FP8-W:Eqgw;-fY198+A<kFu?	eG&=y]lanj6>߿yk~sk,u/=5/
CTu)AU5\Pc*?-<i餇nX?\yr&dRq}l'
_?T?oC1nNjBV4+fWESbҬBIVgW[k.be*XYmqX5gHu^TuRUd*͐@CF/'EUi:\39lU	BU^6F
RdǕY5p$6k0ͥMg.J64U5BbQ;5PK   dO\y    1   org/mozilla/javascript/KnownBuiltInFunction.classSn1=N23$
^HS,Y ""%K$gjM]MhQ6@!qF<D`a{=?	54+(T$=<xgrb>TFj_JOZ3|Nߦ$L)u+bYXGdrVrڴ׆e@9@2/@U9'$so(>b`wZ+3Tx/_=}~_IJ]-ȶU4'ųdȜacQyڑB^	/ŘDURC
ʓLmҾY"͕ڲwZwfؔvƼZ*)Pie9E# lK
 kG֝]"MB_a\F(1y:sq48tp%睁[YΈ!xmx7kLN]PK   dO\tCW  r  /   org/mozilla/javascript/BuiltInSlot$Setter.classRN0=M

/@G$@BT`Y 7"W&l)>B8)BE`_:|{p#-¨{.R)TҲJ*;cUXX+6!)L<cH.y\)ATpGM~6KLGS,ҮcՒb빯ִn!JV+tV{a]a5!d8υQaݕX;_ș"E-hvop
p0@PK   dO\j9	    '   org/mozilla/javascript/NativeCall.classX{TddfaȠCEIB5jjHf`0@/08@bqK5<UZ.E@h[[mOjYH>͇gyϻ' nT(\qm㙇v:lN2[neR(xMT§=Nw(xeo
Z{2q)6zk<T(6u"wCv	jG8UQZuXFU)-'tPQf9D=
fI&i+$hݽr-em
W"BIܐ$㮂/5
jr;h9vguKQp55FY_Hq2ǳ:7p
h,9icBjwǆ-+C:1a5,Tz@Bݥ	
&xTεǩ8=2m\"K1:l(,+*2P~K7ƚ杔m05e|q_z>Lctεq-
.Ţ/:MlA0	Kjbx6VޕI$OG:
E]6M8|3яżu1QTAIکs6!6lbg/irtQIH`8&8\hvӨ{y\S
0t&n	`?L8pqӬV*w	b诃
k6bK{g2ngEAtAa+5a qbR&wuy ;gk\ĵqv
^&cF8IS&?KK}N+!s
{Ҏ$
eѳ@ah	_3r㨉G2ǵcc~<8Kl̤SS8RC0y<±.\=qLEDG&x3c-WR沎/s@
3E|)yJ Tضkv	4"&")yQ:^_2vmy=u_vӥJÒ/V7?r_W5HSy;vNYwt-De;yeeJ	76
K]ˌﵽ'Nٔ4
弰XwCeMm,CL-ۼú${Ӻ-D*U&	TOJBfHxg𢐅mVn-Sc犵--ujDՐk賲:~^-0{|U߸Hг+G5EѼڋn>$R7HrG;'RU/#T	L8q{kR X;70Mf+
4g89o>W%|-ο}ѼNB8(^+Vq|'.x!ٻ,ixZцY^^o&Ǯ$5C=wh'b*Ɨ[AH?iMO(y+	
]E.(w5l<3?&=Բռw,VF#QugP񊰰ҚgMp4NiLEoZ;`Dl:v3l6gqSGu$q	s|'qkGM4R1fq㦚p-,e}yڃ`UPX`UȪ:1#՚UPXX<Uv{9:hiJl0ȟ'Z}X%J*hЦiTKRߒ(ytMRQja7mv|3F،[7O?:`s w"0N<Ǘn(v'|Xb;=zw!uT{Uحvcc_+5bJ??7H*`" I_gm[Iyj*)VzMWD%GzJN
$G<zt2z&R$9}z4ˑG9Y݈3Qh8
-ȡUuz5pNOVG`
xCt+uAq*8Zm`-D_\i}@;nWrs>~9,H
cFZ03z^+a-&٬ȓ*@-~H(JTTU.X}A}}3=H$O#N$2
-fCJr<2b]CZ; Ȯ a\/iy:D AS<W@^e%7?6SY>h3K7Ry>A=hϦ=BzYF3xО3xP;zqB
vl(((cXǱO0d>|azYmjCkާZz/~x9:ϑW$*)mOϊZ$6 n*`=Y|R=?`&~t;ywPK   dO\_w	  P  7   org/mozilla/javascript/Interpreter$DoSetPropSuper.classUYsGƖ48l!`ɗ|DXb&^LVYUvWsRPyoJQ̺(a*O1=_ Ws}	đ`v|jo7B
%#U7ڞ[v `H\];ПoD#-paeq}sG2ăд~e8USt'
KdbA0mUR8'1kFh6ݮ{MVM.7\\7UV7ko-1\QJ,q.
&k-7Ur|کKa0Wɷ(b|qI2r^Cny
9"gs-Z\R)8CokԎ)k4)P5	n3z3JjtEk\eVSw|U.Hn6F,k=b3dbQ_&5ەQIוWk2Mӷ32E=
vwO%JܕVKu_GoqO`EmE>[t9BNmK4Z&?-h\x~qMkDpP#hlr*Cf*
k\Ud\O*Yg+2o{AȱN`t+}=e1G>l0-OFm1o]R}	E*eD㣯%Z1e\-nhfN8W8l|y/1M(|I<}k٤>op.iq4$|	'9N~5KʧEBAq	$D7iŬ {0iNIX$j=bI*n
9L%D:'y2ѹk :J~3&mww i*{D};PK   dO\sd  
  0   org/mozilla/javascript/Interpreter$DoBitOp.classVoEM{w{;]z*X^9JEAڣrRZu{ݲ+{F`0#FF5EJ$bHdG ??蛙6f7of{~o7^9JPg CS.^ǌϛn:o{DֳyDgmv60֮(6qw=3}rwXul&ڕ^<3xa(QJ
Ta\O0٠4ۓf`	if۳cf][;6۶{+Ê;hX5Xusp:k.r/n^qtv6km9}km~F$Ve[uH-A
x;e'ڗ-Yy;6g>oBuRVCbϢ0)BֳE]kSga]t%^mQ֋#BzN%~Ԡ*;V=!m6rdn;3&5gX$@Έd<lMh&3r^)XRǅf<),PB,VDۄkז#5:쬥,#6^3oqQl*)[-uJM.I+{;AWgݥPuSAQdN13f@rGٟٿQ`h>e}XʤdO[pVT:-ےsif+^)պ|z%Պh2EUn(*%RNEg뮀]$P.zi4aC-3
X6d"2
-X o5aY,U_ί4TƱtq<$(ذKJ/c!U 
tjԶP롶(愴Pp+c9V8*pX5W+V`Cu1=_G),P9C$C%lDS,Eo8G`Q_A#?&~Hא䯣qo~_5;:?¯#?4g$*dLP0K&Ћ	.KgH
O@$CIW{!<G(H>^B:eoI~
MܠeVV''SY1hXH_HHP9dx~3_*	vNM,VRT]m͜U][V)
;yEOSx?' b	_G
oq_q>|'|ȿǧ\0푧LA"H0U"`xLhLgb*EL58!E#7GbZCPCSRHH%ow?2z;/4ARXA0ꇨρPK   dO\Q   a  ,   org/mozilla/javascript/ConstProperties.class=
@B ڸBJB
5ae͆j,<ADWw\o &x(/R)̳ԲN22:Jyg'1[n"zz(a1~hLb?A[%քNe"^hd@FB3'T{VjByUP/f7罄PK   dO\w&^   ^  1   org/mozilla/javascript/GeneratedClassLoader.class;o>s>v&Ft̜DĲ̂}ԼԢĒbĔ"vF"ļt}FԴ̼TJFu
̼th'M$ABkFĒҢTF-thف4deC0Y3AC$_ZꖙV?@:@	mV6 c 9|n  PK   dO\K"    #   org/mozilla/javascript/Script.classR]KA=w$ujk*է,BQJЂ)y2f&NJW xg7Hq={0UAXC	eMq^$-2꾋APIVk`\DMBny<N;J
^fÄ?G\-mԷALoY)3jan,!a_MJ}~?AXS%SӁqt9pKOF}Wo~lf˦ͭq4]# eɪ>'ٶT/?xH4= o
<8o@h\B\q{
jo,e<a\㋼ⵔu`i޴/
^nV+#} PK   dO\#=7U    +   org/mozilla/javascript/DecompilerFlag.classRkOP~κѵ6x&P&^b$&K?CkIO$DFg=ǩY{<%x*a(5>?-'Ҫwu740$
ǠU7*:L'yY4߬nխ7+kTmf3o{4ՑAVEAR.C޴*BTy(Uw]'&nU
ݤowO.[rׁG^(wgҿ`&ͫʗV-NP4^g@~+.xn&2s~GpX&tc+7w_8=@FvDRŴjK#]EJa;ruO6t0'K4<4* fb&E&7Mxc0pGѿOi`	B(N+aL&_,X(ΊtAPiwHyBP-Ύb?N*.v R2juZ-
Օc(v=yվY%udRn)}Ew2PpY}?Y.ѩ!u&OPK   dO\ܪ      )   org/mozilla/javascript/ClassShutter.class;o>sNv&Ft̜DĲ̂}Ғ"vF~Nb^RVjr	P,83)'5$?AT.(3/Z3+8(9-3'Ap=z6FFf`b1I& PK   dO\!S    9   org/mozilla/javascript/AccessorSlot$MemberBoxGetter.classT[OA-n](xG@R@$	`bIiXƺmvD1 &&j2.MTfvΜw;gf~! QM&B2C8.AUpÄa<cTe~^ׅNѴ芨R8X5m!]H(Ѓ$I
a2bfH.%D}W0,F I͒FE0Ro杲5N<.?ڶ(h:xLlx`zzk.
bx\ajY'MA"y5`p"?TSp-ur%ȂAL,Xy5[[f;ʠM,0BY#-`p%w挜(«,^ܠnW{hGh],^lO3q|W+lW*O{:E]G%j&Zp]MzBfzU"4:p4)9~GB(=T|@Vuod1a<tr}('e v=9D~ ,-zj
7HП(禴FDH_"Ue;( ;>PݫmL8W9jlP)G=՝#{M;U*&${w})ihN#yԤiFcPK   dO\[n  T  7   org/mozilla/javascript/PolicySecurityController$1.classT[OAE
-/ jն\
ч"A$Ij}aNʐ?I&g̶&Rnsfg%RB,a$J7ݖ"}GWNkkkiN7U`}e9a+6珹aZn<7 n1LZ@%}Z\|p$<SI#$&dc\ue CP'1b:t%10/T
QSm4pǪ˰Vab1_vD)=#sasQKo-u0^k|ak<׹auPMr05o	#4jpm7W(^ʰu}zs֯#6(ݩӻbTP͎$swiӂs"o7Ϊ_ɷE 47z#{"4;*pvr<u_dld#K?ћ<bO͕JKH1Z{q[x@tĐC<pXqD'xJ
YOL}*Q3no7tܻ񆻤#["8rd'i63EkHPK   dO\Su9    )   org/mozilla/javascript/NativeObject.classͽ`TU?~!! F҂ 8"i&tu-kV,* ]U׶Vs{r'@@ys>gV"ꉆH"/ZܯbEIiiIe⪒x"]PXq\oTIyIAOߙ~
hd3 ?uo YX~Nf[ZԊ<RAfcU%Ғq̟#IPEFP:^Utn&,D~j,;Du}2mdnW-_ܯ(^URxdwfO{ZVӢUxQqEeLPlu~bQW&Os&G,ԆWWėWP/-a,Ҋ{Yԛ`cJ
}4ic6(ZߒZG@?|MrM= 
 a:51NJjXn[32eZ4/UUT@E-cXu:yeD,?enqQhXzJy:L	
aKc`pPe<;ȽӠBɽET?E%VTS)(xLtjsY%c%I:ʪ20bI/*(aZҋb8ł%Ehila:sIiBUŊMe`P5ƤS+eQU,X2
ŘЖ	%X`0U5cS;n9K+lLmgZtCHw΁+wcAKk*㱪juUvu஋u͜YR~V'36a+LB^ԙ;t
kbUQ-.}-2klWnY-EIu.wmTTcrwfH'Zc-t+l.#7cཧOa!h)];EwNFwMtqlfHqL?|AYt?= ,
Ya:[@jʋXhO`Fz8V?EX[TKZMCccM8M6
sE[8
Q)O6i#M`̓Izeq MŗTì8ؠѢtV8D?mv/@-x+;Y?=g\szMy,fo:ZS0񑂆6+ZjH/o^ԥ	$ǖ{J
(e4}«Fc$򣛷ai?-,H	w,'s"0*8Tv[ߑEr+88La~HP8j}bѧd+RJC7B_wFJ4?5	qjb8E),LǵG?d|X+__hnIjL&zE+[]ڙض<eBabyMii@xqlװH^oE/gėh-WTn4EZ%ihab#ڢ./XMkeQŋ%EGz,$2E[8BNР&Pa~F㼄=s*7ʶ
u BKhE{q_tKvD_?dlEEi,Zci;ؔ:/袇m"[艈&(i?64%v\)"9"JV@O41nܣAO(aX$kaygab_`Y 7_&C}^pKb/>F=,Uuޚm9ˊ"uאG[@ xF0u}dpzqgsy8UD,d$_xqTΔ3ıvYjÛR
b%9Gi	ma%gבvJUq,,1_3s A=Oi <ł`r@1'"/XD"q"*
\SRI*bU%N]s"0fT%8:[
Ne=#MTYZ?"*;?t¶XeËqka^qZbXqQ4ZaiF٧?8U~.?\c9s-2b%(UYQ*Y}2),q~:o(a)ߤw9}gşu;1UU!q$r.xrp_\a+fd"5Z0ܐI)֜jN9eJPJAXt! UFO@eG%b
遼ƭM܎@@aC<ĝZO
74wx#Xqlh؉f̟1(fzܜ`dl1z
:U&H
8ؘZE%e1ۀl-F2Y%[UL)XXͧRVTm'-L<v;AssyG
NIL.wZYͳu5+bJ!ꯩ%7%^$rxIi?2.WT.!R)H%t-^hx](/u9~cK8]MKCåх*
pMf?w,O.<xCMT?8uUZ-/Nrj%׆Wb<NVjt1}/ɤ:gNJsKiGqiEu/_<cIU)̂B_o,TVV!a;|}VƓK!-)?XGP2%~aWxˢ"[PAtmPn|QxW_
Nrl_*Kz$V@gt7ۼW
pcIkB7߯Df+[
iJOؒe:%RjjdQ6BKfʶ]`x(`͜h/Y2" '\IQ]w@@vBD3^w)РÊSbeKv";eeo6De8eoK}"*739jςȱd.3cAO(	w3^0c3'8/39w )9Qa<V勪ЋfXihglo%G0|O_ey$6 AncN1dY>}S>28aU8`$E#,39J9i@2)ILD)'	{hSPЩӗ&MUy5;4K#ՔhYA%q5!˙%4`xROW0\L>uZ=(0iαh+˘y;|ifaA9M 剖!|kyge42M.1\drI\=!PهX6in'ɥ~Yj2ΝAȹ$Z]^
KV	O9*)~{ݳidd
ڕ2A-Gs&r# OGv]\Qdqr}}QeɳI'
t0*ѹY|y]hx//j2%%%z㺤uG\w&xxP+^2֔-Ub;gf]kxy'N(-gjVI7ʛfKaӺ~(c'DKy[߶c}Ka;Z`Y+cMKpn[^AY͹
}i=>חY16Ih}7/DߜFV^OH+
OSUJ>Qn[K>sKʗU,vbSvmԾ"TVK>D%*`%J?ȧr@>
3Fs)5 wأ+SPo&9Dho.	욪3cWe{lSN&U{Ds<uA@imPo;u]yg5 ߷v8ɀPOŒ6׾_ڸtȯq $ݽ&W`{^?H?1ЀZڿ4 wٛ'[[E,
8H (Y#0T7yʲiKmcR--Պ J&/֖Jg;;KQR٫Ec
L@4h|;Rx. mZ﹯EJ}_(:W+Yz],Օ׳fSzX'MbxksnUlA7y{o8T+@ P"dM#=j} er~&$j88\GKT-dW5RPr]J5',U'hƤ_&I"?!c*@^d۬n<h~)p_ȃfL_
6fz~%:@#hs'qڡmAB3
`_RgBwBjAT-ނX`>0e
M'&Y% ʢxx)RjXrE*
,;O;BϢ$8E5NqUהb32\А{|+AW..S>~[VWzK͎oW\,MrJZ>KM`J	T|XcU!qܤ S822~ikDktM6HlQ&j ?+>gA%P̰Uϫx8a[w
+:'ҰF#@T7`[`#,ǘ!' VL.
K
Ú=sd|7{|źwSJG_GKʫ'Z$ }hk/XKcv'FʹN*DR&6YbN]Y/N@΄w(z1hpdKL{30 yHNn{cAҍa%K/zkJX[|OjƪSbATUPc_mif.GH]lm:mbN؊8[+ԡ:L_'CTOYE(i)s=oO2%%+jz7,[ܥw%{oɯ5CZʧĒh3>/-ז|WC2</C?X'
ϖLC2˒Z[<GZ
yZ*!?CKCi^C-ji=
3ڒ;5PKYj!RC[*uPK~nuP/K~>P6C9|!&?7Tꄆp%P-ȋW8~[2$e
j##B#=1gg\RN8M@CȰq^շƓKl>:ZdUUEDIwԙf①'?99O^˄8)H"lyx
L?v;%=w_"-(/U#+M OmRՕ`29ĐF|;&MrV
e	OC0,!=Ȑ;{(SW
$!O /WcXjS{1jh4Gê ͂IhH=d2tj
Z U3cj.G?;;=ͳZmD(
DFx"ZF<1I뭥}1!rC45=sG; QG& &q  G' d 	`*ct3#Y	8 0p",H  b	`-I % &R 		
	)	T +ij3 
K 0\J  ,\aW$+\ *\ n@M6͐}n˪;3sBXCjun-#(XK碇ַ'?4: <
fCi
)4ZL#Qt6NB+tF<xы4ކN|F:J(:Z@t"&4Y)*'TtG*Wq3+Lftxfh_h$:AhLeZ"P̡*ն2ض5]qX<T`me7uM:ˈZM[SIƱb
0bjQD<^0t[-&X)):_u<̓3gT| Y'liڙpMgBj!wZYMDg\	
\J)	:ݝZ虆/LBR;}x=w*JUuU̂ze}Vnx^U[j2.60gD&!v<%X]E$l+;[F[[i[[[No&Vx2ir
l҇~<':zj
F<lGx#^lg#}>R:D o~IpEVԋ;<^`w]f
!E-UZ9q,wQ@wW0ÔWr&s&;ě]E}"UK(YP5*q=<a}R6i`4@BakP;>6<S̀{0"WŠl"]'$OtIhEr7g8Up(0 >tN(!`kɗ!<[X:a=SOH[GqL
?h܍p7: cAdy˧!:^d2wV
naFxruM�vN4ɥaK$I~4KSӒ|5icm AU o$	贊l]"mSfMOge-u*{b_C户NdE|1oh<R'Fyxd<k<b?GeI{rVj։)k)Z1>IEgB@sփUHiҊ^^^B6wpY"~Lè>Ef&do'WBЗO߉_?kF'O[Or^j*:|kh<9ڂ'G[,57a/mLM>F4/ZE{i f)St^xfaL=
yf E'ȋ]Woj/i$[񢾆;G	-yږ@P΃<!Bn|6d[s'=wEL!@eZsPlȴ@|Bhĸ@r}ȬJ LdLdL[=3iC~G)vS;pfX_8⚎%'`6oU'HNήhC((]GuzU*^\rp#DVzZ=u"SN
ub*|hB
։Y\fa$zO/Ȣȥ." Snl#rU#<(zՂUu8©-NnΉat%t%t%t$r\c?plGџ xzo%긩(:N]r 2DW;܄5X)jiE gx.ٺ%ql'r!~^4Gj|\,>_.VVK8)KL(hQHdZ*
1$RkEf"N +-2#\^U ~bf* .P'CȔG;ɀ>E¿֡j݂]/탄<?4&$\xdqۄNwJ&tyW: !/
zYФeCBo-xF#fF@
}V'iX

#1E4XxqH+WBNF]M $eb9UT#Nwўm˔.SZղ厖e]8GSe0U
;[*CAvC6%j퇶|J,Ň]ql6Ǳ׹WN
;ڋsKZ7nRk;E\Pq>i	btO'ɫ꽕e}di2E[3pS"}Zw8q"ڃ9u?"ލ8fA0<$.r!u@.2*.#şi
@3xRI˓'C5mETM"NÑ̇vQfl#Mś>|2COD*م۩w.vbzV<l3Fp޷rp4qL-j+n}FpGwQg=tYG9Qf
{Os4kZ.)S4d
&z:%oj@|[ASC8b|[o?e*}0ھ:!:#LMpe^ʼyk\;gZ^&7yEE WǯD`z_ڼP;6jH 3QVyq(O	FAm:k;LFh i]0+Eki;	"z䑌F/A!3P=#[&hYތ0uF+"
|||z \xFp;` LI+ųtxaF&^0c
WGPץԇwZ\Du4!HsB<R_zL	^WOzՓ|Gm	Mu:֘p4&BE~+B0TgkFbԠ&Uǣ{p#-Xebx~'\_.qK A.ك\9dws17<wJ^hZ黸JQBSҰ&5Z++~=%GG
#'(P_R)b
6aF-GOɀ@VlGAFP]|Εs|s+-Znp.W-02j9Qvrw;!J^# ÜaM+-leaKgKgKgKgGnd?Gsk9h׮F>	}idx#Yd7!\E#j'kt
` د2??Zhke~H:4|QldR{ٖvWFhlOc|<
UBL|c:e9.cq{ؓ]Z:q*C<;'@
4 q1I|ʡ{!PC0@
p)(ՙ9")׆5[
͚Dv&=9e:$eeneo6pt=6-X⿳VAb@SWdw
B!,3eH2<_-%T?ºV1Wk\qes+1Rg#I8bv˹Ns=ob/"	ncӈo99+ܯ4ti8؈lvA\y:brvx{uW8p
]9`W8pR~C<G=ȧE:<m57/t:b`98U;fYm
DlVAǬBq@gί"#tra9"B;.XD'|`~JqCNuupAmFlpLMG7Å4HA~!	-AiItL)0BBNr= Mr:(g󉜥e~ckk.YZn-,Ս]Ս]xՍ\F6=.J{]W&lkT6&6ֶuZg&aHYmhR_}V;;MbK"FkeFRt!yN ;Fh)r'
e+Xb舥?T#u6٣)0N6^wy'2~kuv_R0Pwye'ˍlKP.C]{9$Q&YՂi
;44
-|A<t52d:qS2 AKP/y*t\{Aӑ.MG4tKSCSNx4ef[7
!W@JʚR/NvC^&eyr6(;Jz.t%
UvH+ j.S4VIk-R ծ[FxWZɶeô۩鯫<83Wψ^lb0OpʗRi&+ik]L4ޢ˞y.{gr,إj'#~xxx4]B|т;e,myurp@P`W}Ƹ$&o[^-߅-ߍ-lttH#"v#Gh7ix"l7bRLC:\>j.9]rFvh jf5YmWVE~qLF&	${
mq;@N,{J&N!wMNܒYwA<LJ[Źށ֊1IoW/82őDH532]˥4GT[ՐPf(3x+]	db|;GGҜ׋D]Ϻ@uhE#Z@DZxص4HU4"ƥ*葺T31C٥cG^;2`cGK:VQ\h^^vOI"ZLq~!j=׍WAr
|kA
{ަ|OURi| tcSځS]9}RHk'H8J,Q"r8W=ZW܊~Z
e-Yu~MwHh/eg~C2wAuy6dgÈ9~O׺.Wƌ({)_+]/;,..npompompompڦCH߅_II~/P5k/"1W]UK.
c>aЍR^~o{/.ڢtcGUZÉvSi+u]Yr]W뺲Jwmq} qt3JRTFYT'gtݍ<Ae1\Lz,pK\6y rfYвTĈ3Hi$f?ќ)O3kޫ8-&:t0ɵ(:LuD(ىU*Q\%NtI^ꃴ/=8*Ct!
ASVktV+]<iW6kܦo*ӏMEz
mgr/
L?ڑAM)(nqv־c~۾V3V;"zyց:R'y~j@LP#X)7;Ix(S_>5)M^gaWCwQbšєtdʋMǑc4v:tAG>8t/jDG׆tƔ%6){J%AI(y ?%S#JV[%)Srq";ANa.9'9*!u<tp^3+&vkb;RHkeg5hbzg!6'8`&Wuj%U"r1vک꩖{;ߣ].yH[-\舴/f\%hJѮ0;Nްuk~h^UE=Tոw=YN_y'xG[mζ.rm-SlLA-w4H
~jve9rl<;.j%jM&6ݏ{fgm\:K^Cݮ܁ƈ`D"IDwlh##z!˚D<.+s&|x&x2pp'{v9ʹ=UҚ8ŉ#cȁyn2t0C>u="?
MC.^g^PkK8x~{tex"אy]7,a=q>\{p|Z,~oA·,Sg7]ϣHE{ ]>V/U:u3DQ>-fO<.Mؿ5Yy۸uE{Fs5|pBѲUh_y̴34𹣎:xsW0x}vlр3Ot#'7Uof,:|;uo OMvV+\%I 1 n@/\h`'j`+k H ʠ!k/i0 ]ï1^
ook!;i 	[/ |jxY%JixQK3a 	րGXCTý \mm a_80Ck?Fïfp0_
׆fC3?kpL>/0ӿ[ 3{5(0WB3] ~4<!0W^
	w_ý~pp_iyx{[_Ot'>i %38#8|/0߇>c 0?Ab~Ca~a5,V֤Q2W mh`9Cu 'zVoޮOKG6(6ʹ=[.&\__gȝzzz5ݭ[mwķ7[7w/?||nfe{=6w/Oi\2Scoz#./xةbķw<rxI&y&i&q&!&'\|M|-L|dgl Ͽw߅\|+L|e&M|E&	&7\|Y&&O|?|>H{fwo%|g?|7\|g?|"k?k?'\|k?ֿ_3^yM57"c?<8o7POP1hg?2c#!.>yL1y"'?\|SSSSS;ρ$)))))g?\|SSSSS}/LLL'M'M'Կ'M'M'M'M'M'/?34444AiC4`??#>ӿ'L'L'L'L'L'VoqOOOOO蟽qOOOO~ֿÓG#d?[ڍd?2LGLG#Կӳ5lvIz-+5p?ZkDSn1վ~~3M
䜂mΗ'd׬Yk֬~f'D߆uGr:8=Td]~_|D1po_	DiQ~tNzЭ u҃ =0Ӊ<!]zXm@>6{fQ=#0e/9jzv6ѷM+	(	4	wUM}cKۄ& _L$Ue&A풠CNIP$G;	Jr!O'υzyjh<	DRaǕs(5q|I1g:>|Aяvzf@>"N,|,O{(AJ$|n'\m#cz{NHPK   dO\yx.f    7   org/mozilla/javascript/ScriptRuntime$LookupResult.classUnA}%8$vB[ Ig$2&3,(~+HrBl$=	YUS^ի߯ 8$"*sVMͪrch9mXw!"VImPN8g?0LS+TWwWHsݷ<cm_]xNd+J]E:RaOy]m23KT9)Z̪ȡ!1Cw~0T@#ZRat,WCNb،$e{{m;0\̯`u$\f6> *%=*ƽI5oFJm~yV:E̲-SOcKnhR0Da.Vch`+_qIcl!EufyUyXT37:֨}j(fsQUlUJ {tKƺxxoڠ:+䆤ػC=525/SO]Vgel͜!3܈!v]ȫ95꽫	>Cb'9eJRwvI_uҲ3jj	Q
EP@0F?@hEdąH~F\^vzp<v^*, T"@bٯh~C{;?p8c/`HOpG)z'"Y*^xUfJL<f8SMS+5M.7H$wSrH
9zV4'izD	gt-9_}!<
QEr	!C<-ĥs¾8V˄^PqAq1P#(%.I&iuIPK   dO\Ӏ2*  C  &   org/mozilla/javascript/MemberBox.class[|\UܙM%i&iB3}H߄iiHJNi2e2LD؊(QtKi *.P([;d&Mݵ?͹|=^h!E9LrR!SɎ@u8i^mG%T 	%1O!
TD&Ө4x,=D{iX[0,B@<4|Z}z!4ԠQ)h#/6u
ڎmؒ&tey}>`	T'vO]d{tE%ߏ+tLrZ.Apmty&"١K*|tNbcX]pxY0Lxh X`[(JMBh$&L,cnqKK03]|L¤)Ր@-FLܤiT7bcmqme[IU4+N&,[jLfTa+`,Բ "&cʧ]C:f,f42M?fĂD>ұ+
WDIi$1ߒ"">D3H˹.Ed#*ĤʳeZmN-
V%8XYc<RVQ=yN/hduiry'4ZӒ\3]XW}v;"ZG7imd:Hy2h3Ֆ#4Xx
jf7`|7br5
ˋ*jPmԒ'KԁA뫣`:iAm&Sc7&pZ (Y^mRX6bmm׶pEN&ࢰ,mLH2/nq
2ˤ݄4Qag9ME>l5&]Ka|1K2 `cQOI9EP"~cL3}{pKB F*	n*zL*YIЭ8Cxw03dJ[M`MP|FN@.gs}6&1ntih 䡻cެBH D]5gv9dA]6y[xȤC% [NZZ/`y+AU"fC͈phWCm 	~Y/ZdF:lңҮDԚ=,&%_LVtEZ$Ü_8IO7WHUb;imCO0zרu]DH;Da9lV*4y[,
z!J=-zɠonc&kKƢhBWxE㡓=%tm^)I(g7r^F,t}~dҏ't{ wAt㢟*^r:{ʠ7sz.,l|OKS~N0M~IBٓ`%EpK[MK+ƤP#$&dom*E_ޤd7 
?I
H"MeF"8@Y9gPz$s!Ҿox0kiN%3HǗP"G9@#>0]]:&'4%wRÊvByL hEw/gE(.$^ MAv:`|QZt]P0a=&1*R,YeEi6B.Mp-JK44ĥ&HTZ>8wHϓG<RguP|yGgboʃdZÉN6|.C_δ&Wlӑjp\!<GK8W']+GƮvUOND԰ϸ;:A$auA;Gg<KIks
gr-*wS>fE7#mv9Q'?y瀫˱uL,f=\(+L^A;3r87[w~[ʕ?\ojnv`l{Eٗ(HkMYZHs^^n6v[)4mBڔ&MHcWg0֢Kw|WʵO#	EmE:5%f+&j-#"V
uZ}[\Hk_V&pe%j2xWLYYӕjLKarc'ŚWL\%;Mh4Y,nbm]	xN'ML5̋D&_&J:INOgL_]L'ޏnPcKWL7JNl&w#7Kf>O|ߪo,Th6?÷}fV|6j&)x[wMv]AiG./ wI
BvM<I O=b|rI6Gc	I(jykc4w|/IaL,opgW c_L<bo"XJ|cI樠|Z|#Ai+wXZ֖7	F<6DخPK3
XyP3tS'L~+K؆	%o^Kйd'bmn~A^̪t[`n~IVu,څ$ҿf]	7_V^bQRV 7Y{%h.?Bdm
*_ҤP 	$_7
uP_dʍbΦEc~](5%Z.WZmkp=⵷.Ц!:F[P$%A~z(##L>5AbQċ-j=&%"ټMx
gHGVr^?}
ё2	gjzN\ܘ\
:єRRa]5\ėjk봅iassal%^KKnGrGD>)prLvrJ
@ֵ=(e
)G\5cO[ǝ?|1hmTpO?I	$V尯e&4(cP㲲a.XS>,Koe1gc^7f<DɝyZڵ,%?[,N»ՏEGP70,
.rم
*]J td|2uFn{/4s1z8~2]pc )˄%.ȺjL4D+]֌	68B ;|9KcwkEP.*OU8gynmW2ƂqtL3έgrpc[k̺/nKPYu-h	ۿ4F+BCRE!O>ϕN :-KԺwMPZ_DSm+#L&yx#hIUъ-SK]*(ai "Puk'KA0o5XдxT
jT{ֵzkh .;2߾{Kp0^V^ՙKR0עEr.
ÍH7u
=ԏǫ!e^+Ycz${Q
EP-`!TD5~oi ?
K,BϿtBcLGG[#qhOFHat1<m `Zq_!!z`yo-_$nob={@ $Z -E6.2YR-F_diϼLI'M&V@ڄl2)<B\a()̔`&426f,a)'-4~<GhQ*%(.R8yma/-UTQQus>G/]D&:$Z Ӈb*4cfÎ.K3-RnIɻ%%K^w@I$Z{;.f)#i	ٖP[؜R<Kd*]WC5p-I	U2~ScOŎvGfk`>P4Y+Ezxʵ`6o|<}28SL$`9x\ߑK>oS;s*=X8Eҕ8$< }͉$J66Z_]^CQ0# їlLG:/?Rb3p2ƋbT
SW/U9zIQ`_HdxMOn4Mۨ/;4+_dkIӕB*
N&%3rBޙnUAoOЍ-DՒLnOnLOo{MRD]Н
U%{.2_%ӗsTYFt7xFRE
 H[ >]
-7җ =%[9G K`U.mOir('[N#T2takE۔Kdvm{E5M6ɠ} {4o2sGlm_j`@#t'IGQ㞌<*:Tjz2d	a*^jVUsDMq }"JGNLފ'dsE%?Fzz	xFS,Gi*Y@䟳ȿ&oG9YK7[<wky
1Tz'ʓ/ǩ| M:faxqyJ?:ĥzg5Q/ӟw{N$NpJFt
!'a<=Ɓ3X)~-+#<bT:+u=oף]FKRF	C:&(j|1O<x26
=\N	Fw%}S,a"Ϣ<	q,/Ї<.PtIuJ
W#0w(Q:Oܳ0ʧ
ԁFk1Ias:_OEhAST'
^?Msà!p``49Pc'~$۔_M
vRJƞ:{X_x*Ih Ar
+q6jMTkUԺg(KLk9
j$Ch*86
DN	Br-&XaM^2vQS3Q0?@^rk.<H*ǉcx}y"_ |!2NZgx].|aIRI
GA(es%븗NGZd\'iC"ibeaWY8ze!rو\>mulqll=><^>0=砇y[H.ėv֡la&F*&f-hg|%-h
o@QJmZ~}NNcU#&^#Zz?B4_c<ofßW𭼑?m|_ն
Z&hofI=HdؠE|XA_Ū4^}2p[rBizi')x*N^"s!Mj*-7\Ga|''4ڡ*h:b&MmU~#3j&vdJ?b4<CYG)%кSޥBDI&,2GOS7=*9%EѺȇ)N'Yeψl:T!=|1S; `1f/dKCTMM.~[8
J7݉ ݆Pa4T=@7v$^UD9mxi-!^awnp{!'ط*<Dsmg~_eA
Ak`ӇyЙg0r
mB*k
Hwl
3mQ>A@r|MCDpڌ(Z#L0]|t#")>N$(|x?	s\F#t~f{!Ukc-H|x2:j
F.shpqjI)<nRN~5S.ð~;	ȵEmP8W)o[8LYN΀%!{<8$.Q'jEK,%a#79vSx}'W?WDMUT n=gb	sYj
_2DU7M忡2<V7
Pfn=j_:sy/Å~DbH}p@w 6E8j!0|m;?D:@^Mho]x
n{x<O~am|(oM=18,OPk`
Ĥ89lPݛ(
	_S3vBA-jZ3Ɠ%lY¢,Ѕ*Q,ayX?7W[cwCqdcJCBB>\|hZs#p1i0S|\bɘqW:HbT?#O;D+D|<~?ΣRT|9ㅔ0PxRT͸5NA֭*p)/g6pwVܘe#I4hP"
S=EʧneA
J"
Cߏ"̋x-<@fL;DDx<sk/wċn㫇h~5/[E
]I}U IקԢZ5{<5JdNBLVsQ/Am`:6Цh}wʬvkrJ6ԒT@R#&Գ,j{42mv0Z
·Zcv0{I/X8[6Zke#|?Jcӵ*'F%Ce0	ٲLMG
դb:#ͱ)%뙔Cq<"-m2`x`[ѐOͼR܍T!Z]8}75'Gf#fw\`1`ǍCbMm
OG9j-AZcIE/IVkաQL5MYmVW"V`	TgNekP;U\uPK   dO\{l^    (   org/mozilla/javascript/Interpreter.classԽ	`T |73y	ְ)da'B@AH0$CLLXQ\Qk.-q!nW֥j[[ZϹ͒0w=w9s9w߳ N0p}G\l6DGUCh^ \T[_@6H34!2쬚h(	_fM(:'2
10tf'P3*KBV08l&׌Fjk&z Thm݈eg`o%O<2f"7dCz^ݡ*싾<>'Tπ-`A}L
ѦHhz8rr>	b:,~9wRӟA&!:lU)_S	7N,c1:R˱҉GfQkGRg0	
T˂pPcS] ׀< G<+«B VBeNuƫJ6ߍ6afUǁY B	9(2`	D:czS}ajU$Bu>h$$tp^}cSCC8
UW4cKU(`	P JoOe 筋:a"&0hAJN%g4a38
hcs2jlN9PsaMX 3I
FxMkaohT]WȄ$=
(le$p&e6rT[WMS{
LҪLKٝ->R@	+V[U =lUVJ&D+MUD˦wXA(VIXDXmBP9`Dz5ey&Zl`tAmthՆ,K9Ks8ׄ|_ (Z(p	!gUFU+\LM ;R.#E.kj\S&\EMrRe6%2
Al%t	?CHT@̋DYn1as,KY}uh4~;T\TCTlKj,JCӄnk	ՔkY즴vLm l ̎"BQ|Ю:iCƧhz
ʧ*DBuQ<uV?ʪ
vbVJH$;늆c=8~hS=J_uTTLO+~R4)xڒ!%&q	[B{p05KRV膇<<otO%0zhJx<D
;ip^j~_^[z/5Mb䲲2ok
tdFgo}r7lӒ:WfTRT&JPp("MUXV5DsLΩ7Z|<ɩ$wuu`8M~'GLr|Κ9%ظ2ϠӼ}>
cYUYqzfI	/~VWwq3}e¿kEc9!eQ&Ԝdc̣[fOL6c&LLsdL^l,GuK tf3f\6}&P\$<XQ2L֍eztFoDBxy&|Muh%i=nz8J欨9+HRԄWV<m>4f5TYLMRML֟R}I`l~+"2~b3&ʆunE$ ph#GIz3Ng|ZTMp]l8*,c]DÓ1<pЀq$NvlCu
ơ
-q4ƣ 01mV&lNdQHmt<dhm(_fGhDwF;SL6MSK)2\bR6{V"SL<delB(%R+CBU{T,:t
dCw0c~I+KKcghqk/0.٪z1A}bKPǴ<k~*(heTPOL]Snj(%.&:nlZ֨ڂqbd+LVF/
){~^{2qG#/t41a+8ja
l"&kdKΠ"Q=sUFדfHnc4n04C2-cs"&]
x*=0E60
B_l#.eV}&+<?s[9qb9RP돣\mkHvC]:R2jKQ%{d7:w}Z-(4?,ѲESo1fv+s
$pn=f#-"v@oO%UzBA*Cڥ.K"1ٽ>TDuu?7zDvb["RTQ"ׂRy#
'NrS1"*&<<#-:b2=~e}xm}`89QI|d;OJ)q:Mb-&Zq~S#Rͥpq$Ed1dҌ:^JtqD%hvm#aIc'L82x=ɞBSDmnA~dϲh\5@p}hvWQ@+p8GQq=Ğ'
e|Թɲ&yU/b_Wd6R
Zꨮ +%U"1TW0
^3W-d-bmjeѓ*Fcw{8a"IxԥbZ홡5:RQ:D;Su8>O?9wK+Zr`6Ǥt6ZLPR7%`DA3V5x_اcй|?]X&I`"?L%|km+0}Eڍd"WyFjI}coaB	Mo)	I&&k	Wᵖc7±bYewjrnrAwGcM~pir6)K	|{IakD: U؜LnS@.PLɻ)or	<TUL+cg4?'JM{ ARe+1xX=yo!S<Z`<+/6p5|0bL~<&/;)oD<| f\eHr'<zj$8 5::N=|GqcV^ 3*-ҪUH$1xQ,&B'uވd;;T_L&lh mO2Tf;)4M^K^겄-7Sg<h7lSx*աeM55qUF_4~*iY&/,i+bz^\$ǹy4ᕈ@s%V&.*nȫL>/Im]̺vN0_hEO,
0nx&1J\2kΩ*Wslgm$PhUzƙpL
MTki47ׄ-qnUVȉƨj*<u`|Cr~M|
$=ڈJJ`cD_se 1BBUMԹ~h7HEKCkm"^/0"disJdfEl].b_BdY̘7k90_j8!Q-isV%Ε*o2dv8s?f؊!L~P5;Z3M
6j&jꂲT̛e#42&U%ll86~;
PlA0( ;%ְN]8oxP	W=dCˠ?nް.ތfҁ#f"~kBɷ#Ofiи-KRw,A1#&W{`d#3Bv?4F[Q&o%Z#jԺV{d1$wk	3~~h} yf.5uΩvVE%S{B n1?C-+!X>r/<vo˖sW]2b^y	!	uCKRnܿ4봵VvfA{-&Vj;KEmYj<k"nXORZ;$HgTF-lR9S-#Ǉ2c1Z)$lb{~F
ϲT&(JKr75ƿ2&֝$FO]Z%JH=l>n}E8)xSX)gٳ +z.L	I`]9!r1@7)\0#ZT|~ӹnƟ)҉ilD)2iXQd`l$Nk
 UmzunMِVVE)zK5kM!8l!Pt8/e4ZRA]'d%MR*b qsN)+șW9ҜS甗\c
XU[=k9I:fie8hpIj9hr4=<_.磺'rM'Ǘ}v̪>
 ׋)FY
l/ck0N%1c8;T{-̎8bPi]lǀDL13tS( Jk4DQ羌չ$6s0,^pTYkV:ZFS[l}m(Z9 CPl8&&$ɼ$/?b(V[sKƌj%(wͩLP~I/3M1K/2"UǶl7Gb	vJi=-	-LqXnp.N̝3m3HZtK*LSESgVR"(Q`EnxNT"$PΩ@u3q_,&Ԛl&YPgU:ISqjJ*I/6fh0jU|Ll4E`/kEք:i\cb
䵇C;w%?(|DaXty@܍̬d"rpSԍU!.|UA7β)&gxUZg%J ܹW=2=:Jq7Μ.IsԪGD:m/{fS%ap
Fhq-v3/c	H^w}Rk]m{ĽS1	pEpe6"GP
pRWp:`jy9
G	fs<b:%$7x.kmwԼ:=#><A?鴏'pc2x9D%$2)(UsRC)H pb{+Ku4a]țN ( _;\z"w<%&:TNقYN"'{	ON*/_h^}cm
sjkVD+W.j?>uγÍd0y'SPMЂɦVwg 
VUOie_wN5Z#N>}"L8eQYlh`uǒ>$6$TtTGM
GK#nN̓Cd7qku^أe߹MjowjZU ގٮ^)`Y}UIʣ%]h96!0.Ǫ8~FNC1H;:68FTS($
jAMp:e#Hk	pS`pڣM$bStLӜN$:WGJwBu8i4JⵟL:=	4Q*iăgiNkOM>tx.&Oe,r{.mUB=i	Azv.u<z%RtI
j1aAYSc k
8S]aj+	4tW #N[ZMPM5Zy(As[\K0:AZD9yA
FFy	vcJ$`=E3U%vyfUeuUfz+	.L	:< 1J opJEHأ]O079*7fTr)%:o#-N
3[[TNiӃu{~=4!L3<"˺$Zߥs|Ա
Zmp*kT{ w9JPgEBp{;qm7A=ᴝŧ	@Y!K0'{)7@"ЃT,=ׅ7ZG/:TT.V"x	52CTݫc-.	k@No9eYp+|۩WخT.%NϹh&9U
uX}0ާb~68iFwZ'h$28y ?qꕰ!qz+EJo.Z逰<ڗIɾCUEXpPI-9.,S*	-6)ZcC*䑌cAcfҖ5ȹuQ42̪x23r}xENYkh'cqGfXw粼FAH*h&^]|EI}.\cb.Cb'q]^!aΝdgQ/\~j@y9ː9ːQ9(Gb,=tܲ%s,\R9wꜹK*gVe/T9+?󗖗ܔڥ2dfx*_٥${"ifEԙ4]ZeqElW$.,[TJI:ne(V\Q d$ (f]8؍e6zSͮ`2G-	v=n"]lf]JEx(<`
6v絿|DYN$*8Q#AXW;lMQQkEZU
];q\
H}"]m.Pnblq$5)w2W7tΒc3GˤBlײcװ:w o}U/DlfV*t/XpR紲NjEIZQc*8l>M6A/AhPW	wh(Zαyɮ"$:բ 
׭n{p,Ԉ`
WtϺiU}Rv$'ׇ.VWUEJBU78"iݢp;\Nm<ѝn:cQeJU!t-7LuKBxW4ƈRB:mkQդRD+x¢r4%ƨI}0;鈬FEq]lӤsgJ, \]Y[S3yܢ"^1fuut$
52g2&FuoZE0J8:g:'	5Umɗ(c&SCLdD|Aߣ Vwp us>[wݤ ^p>t(JUTq#ohR&}LhZg9%)BD1st vh#2.<DDo\ uR+cWJ~'|y#Q>GJM$9fODtM$Ԡ.G;CԤ#H1]:\QQ*W26OO]|@38Ҝ+RukP`dG/;I`0ÑP/qƤ5 G/'RZyZLjT'5эFBIr.1Iee8:ڱ/r<{I& n.Tn!nZώD@BE"h٨;S~l;Nq7*`Yao"4N;\5ѡ9S^8s(+)ug~)֒sO!wR0bzYԙ3Ƣ(OyŒ_Y7Tܖ<'DaKOVup	ӻqf2	6s@ÊR;q6
\hEkQjBvVZJV^ԡN}59[Ӌ52ly$:'Yw u(ν>v"6u2QORq
j\+aIrl+oVTrkD
zYAitlۺ`bʳ(ɨ[
yWւ2QءHh-EmpeGZfM,l3M83~Sfú`c߱
&k&̣trme!S&txl>n?h!ҏ,q!diK>='d{2/W-.J)=|}J}E+&0YLiLZx/*COlwKQ;?ՋR.,v&MCzg>MӠ3bFTr}6Il$H젼>bNF-E./dm?tvlפ:weF-t+I_7B/1km#/ɴp8OkK?A_Z!'sq2cQΉ9̥W"b?hC,fgHrFqqaϥ/ƺ]LE0vl>TU*8
t!]:Yc;~UZrbY@{7=|"+=zMXNwmЈSYӃoܒdgi8xf8![3@~."]<e(NwҏLg 'wgg6'2QGK
?#Ʉ d{Q`juGG)ʆ~Q|7Ny޹pRf>j|]?DxD؉t0[ZQyŭu.*Opmw,j@
PSфQg92VuX54~XŖR *d?Z6'qVϪh:;>bRU[ҏGGU*ٓ8dTK
*}pRL>
n،Mjmh&TO
'VK4)Z'T2ά)2UVȘ"\a.)w|IǮTǰTR*_S'd>ڤJL: !Y@k KO;?2&KUlXKN*VቈQ4W,cxvtZI
U)Pݫ 3TJ2>ҠZ|NA%ViTE{6.&v髁zo	7^eKl1 ݖ6)Ғ6nm}[,̭jOVk[Z^jN7H+؎ta+5nh89k{a|ϯZF^nwUD[h-9Waoc;ۛj-ֆS0.v_}k?Gklkcd,stϱ`#0|=+
+3yo&B&0'ЖC9'$}ĤI}bd>){
~OMI%߀p/Y?OnM4Q>Z/7&F*h쑁3y
~ю] UE.G[A*g#grx!p w/d嶂;V4`&
+TC1i*)
r;hWs]MV-{fP޶x{GӁo 񻓪ʢנuy9HD.P$2/"}/0]0|[? OUvU(
͕rj y:4,B/l)H.F!Cvӭbir	Q.A铰t*Օw r\v2*YmԀmTRyϸV資#PZrv
acrYgڌdŬژgaQص&#	Џ;JYJ%]5Y(B:$h0co>N>قSeMO]XSPPCꡌЊYOF]c2]r{kKdAmտ&@P5&z,rs2H?IEϒǋǋ/v]lguKcuIeH,/^Y^22v+"ӃiP6+VЪ'BMJQBog
tx~W߻}'P{3dbt"`_!~wF+T.;Q].7zsۍ~-!aO.~L=d
~CF
iP"L8Yd<
NYpCȆ>AKE?a$r#FBوqx8MF1P/0DBz[aHA\%B9+
	uҠ71$D9ҕxa0m(2]d33a,3ҾAH<OtE:vXx+h"Θo2iwyg(*w@}=hu.Qdw_=p9%^wAzC!Q̍.w?!C~9qǍ1gCbal/C<GۃmAhXFOCy/']Y`qIam(>&>g%kgC0p7S<)(|0Zt43&=ެ1?J)W+\T.LhI.,W,D
k)Dka:P K[n?o[mhYD)G~ct+ܳTibb$hq;PEQzjKVA0G2(=
۩V;+yC%OVq{`XMvAm<5Tת'LӚyro{b3vmI
@`t"7v)fn@G4MKH@)o	hz
(ncȢZGLX'}2>>`%EX`~Gf&ia!DxZuG-{%Os+Vk{+nb+&ePuh.i9go=K.[*4MC"WuڗW'>s.4HIĀIlO1`` ǝOÚo 3V;ܨ<&Z4f]p?ʫACy`|&
P#a'10E21E!,'R1	P/PMb)&$1LLT1A'Yb(ǿEX tQ-DK$-{{1R<)3^
]EXy:-[׆s|q6M\KJQ/Ҫ&FܠOōE&qIܦmkj[ĝ(vVqWܯ=#^jow#_6Sة}/Z)vnUz㲯xB}r/G$!A9[</dxQֈ_UUyxM^ ޔů-yxG&ޕV|D|([n|Z|$?/T+&߉/LS~%߈otM|{a/{jLѸ>\(Mj.}gh}2Z^yͧl"~ozh}Z?}_J
ӆԆk.mF#xc6ӵ|mN4&IyRmqVlܤj<ﭘg6إFZ1yiJ]BaH6
u	1xmK0.]wc0Q^X
K6Aw>Vg =0n<
t7ڬЪxhc<t[,=b9>_,KJ_Wb*M~Pn8)=e
Քh	Hy-3.叨ƵO^c!MG')a
hKVeqf< l	qBdK?7A-Z9-tG8Su`SҸWiapK͖kFLg6h|f
XOGۜ*1nwN0,S703{Oa~虙ٻw@~?4`@b%K
#R䊙I4ImcVNl{tK]9fF~ֲE a?Vk<س~ûS=wm?lKypAkEgo6m?NK~S<v4<t_-GI?-[ߪoumn7߫~uRwths.ߣ_;?]j6*]Ю-MUk}?mh;AJ/2U `G"F_x{fޓ0c3?}!.Vm/y.Kyk)_-05sre72?]zrdMvr|_ʵ}-=E7JlbisQ-46hn{7o)p6N=k =	9S0'ڳ0R{k/dE(^Y0W{keګPk_
B{6io
گ&7S{kSڻ
BZ	0$Z5a.N˔k1Ȼl:Nnkڂgj@y);n$*0.WSp$ 8Eh_\jqo Dru7䃾86/L;*/p$
h	ygFE,mVA`YaNo@}cP@k'h|h"w!h}?ABmUz]=\>,i\u0NS4خmQu*5<vi;Xn6A`/2}!cV4/DE@܄+(O
2ϐ>GFkBIIN'ʏ邱) HX
 Evz
0ڀlEwh
1fl6*Ki.6HZل"Ɋt\DȀqyF;ja'zSSK)
V\Ol2),}	ihSqX
-lAXfh[	;gMD(x3}w۠7f-!HE:"wsb\Zd4@ka!Ef<~
u%
r$0 _r%Lӥ*	KToenJ/J\&IfLd )}
ޕO2P\r0)c9x6Xeyr.s8|V"eRTwTGH?ÑNd·(9H8,y+٪TobTڍ8M{
k+G

2˕
c3$z||/F@6I( 3rۏ_cc< <5^ ka5bmi=s7FhbE+L݅ok#=naရMd(nna2m$fш_c@5s9N'@sX,
õhF5aڹrM>%FFu((ϰ
]m谖oc.J>+EV![ƟȼhCQ]b5(#rd.":(׿``NlCƸ*X-W7y3?$s$j	H]l,VF*GZpbw6eii@yxaZA\$AA$U"|񫷒/Dr*d}/kXdvm.	ְ Ȋ/ 5.f%$z%C[Nx
e=@
C,#ˑ7*Pb̆YHrTJsG!,+#b,πʳ\/ʥ*ڨ8'ƻZ
5]097̆@%rd8C5P	YI3~>s݇6e8}jxfUƋX%{JA3{*dQihe'Z)r_1/ RNRbQ2֊m8s\X3k9kEҾKRM	
v|.v{}`n^~_.'>naW<kۄ絭	FmՐPG#74$)Z@Uw^&prNxP*_ÒKAv#0_o4R_oe7[Ȃ\k@騁[)\dϝ'ٝa}ޭs;5
>	:f	vƟ'emd)X͐ޟٱM$cvn"u'۵{'{<_d oG:T}\w]dO!M|//x!
8m_F(@Ű@^e
k "V"T/5߷6y܁v6y;DEz|F=xnTk䛬Z~A
R}A
R┶J!Epj_ߝUK^oHJ*2ImM#LNZa 76?r08Zo{ޡ}.\;qBn@[:QeI\p{Avfrz}Uw,{[;ُ}{M'ױ##BlPФ9yQ;j9 )j~D,aa
B3PU`||/DYTRh5&;
IDDDm)8>fa(	X}HJ78G*]{&>'s"Ğx*mi(yTmAvp}`eB^<#E^ +߷ESVI<wZ(XΔmen+w+5ԝ"
m9Dp\}B{NYjŨ1K+8jAi'?@|Lq\(`POPAtZ|iy6g*<NCmwXLкACF1aO,d"2cӉSF/4J0,Ivh3?rjk6e&Ŗȝ1{^yYhrd f[\*'2+`.R4wpL^hТ&gc3d/+r<#s3*6ޫ(=`'
o!@)}- }Ll/`nZн<.>|-H
Ea+ʤU>7BVحیGG?&>jc"~X|-~"bH"1TiS0۔)
8Bfِ8)D$wkaPn^fu+@,Ul
bO(k5azQv(7sm7%1YyV>̉;l+c댙y"<| s?=vCju*bDI;}2#Ϛ!yO.lKQͥ/$3\o$bw'.|{;_r/nʗsۊ|Vȷo*Ti(9ExO\W7zç b>		s[!շ| \R
|א[chߐ0!U&i00Ȁ23
T8U XisW#(
?3Ơ~876v'xxژ E1^7&{;|8>5&×I1
L3˘Ҍ,8ee,``l1F8co*%la2c5YBgԠi]iԲ댕lQ~jbwA=ff{hdM쐱X~m5e?W%+6
΍+4>Z0CP<	/0n#6>޸?峌9]|q?_l<ȗjc+1Gv~_bM#q~j?5Og6x4^/WKƫ5uxhdfaǿ5`#=js>Gv_~$/QY~+BD%C4C!T'ICCwC{C(8<S~nS*W T^-=Yl ?#ӉfɥƱsއ_%gT	>?PN X~)Շd*B{t`&%S*AjH"]LXHPXSxAU;0eR=H whEn!?K:DZ' UiNnP&h%44zx@ Qa)rSd6R1eeegϣ	`j*GŕvԺifRܨ|$XܰW4u
/_
旻J߿='摔6EҝP1zc{hX-|UfM@k)>X8I(,vSZ59y|
n/`:F9*vk;cUU4:mk4xҋrTR`Zܵ0@[]g̅y;xtnv"f/0OަlX?DK~u7VoE-Om^Wc3<.P.ҡʕ+]ݠ	k\^e.?\}W_x^w
_{u|:v
c:~W>r\#Ph65wc'NP񵐁GOZ-
pb`</B1wA/YK 6+&0{%(ԆEPH]H,Ijts[ݾ</7䭇CПL$?㿁m#?5uRm6KV<:y?vǨ{vjdVXk;{/)J׬^IO.p{z[@&L"r+
=]M0ĵFPZ%p\:·eu!vmHrD`4n*4r`%W2f邢ãt'Eb5ȏuL௹j\
$`軗[ѹ1ikm]>,d̊-爷G)Ov\Su]u]WBUpLTP]7"nf6+,zÿFᆩ8
aib|~PSw0Le'D馍֔.B.@F)%~)
	MS(W[:_&FXl )f
嵠
贀
_&si2v9}`{>LuEؽv	Ch2=]PM<]RȡM|ZLZiDSʳ
Kn"`mL ]h@ePTy0v
uch-C$(ZEVo_˧
&
x@S/B?E?#A?w_ #B" ܗ@R8}\~w_@Gq8Ύ2=.qCPݫRJ"8	wI;N$&aK;!
NBib5tPA
'Ƕq
q6?tl:Vrۖ/oVެ\/w_+0Ê7w9yk [=g 
}ԍ@:Xaeރz*%hfRdGaVuFHd_t8%(-8/|cv]K/E[]M䟨W^%/_A6z>J
iKu dVFe+rZ@[DZs}G' #pWn4>V֟FGsѺRmjrh)3<%AU]< %0Ȼz/+`J
fz7^?:xupv{}~x }~}>nsv1ֻqmeY	û
>
Dsl"v 櫝p3y',S܉`u𴲳$
bl('!z\W)T\Y)Ml9g&ƹTr̲F,ÀV?zvބR6ZL4&ݧT\~iuFS_E*s}7'd[	8

[5d{߆>w1!'܇"iuvWtJキlR\`Knj
яSv3`xc[uQvV!aix/d/ͧE@Z 
A?vxU7w00;ʯ/~
Y^_mO~SmwX?vk6UaB]r퓌zZZ)Z{<WBԤ觐d*Ԝ
zi9-
Q+``/݆:6+%Iq}X~)Br&m+0Jq>fПh}[c@?hl#*F(n9gLEhfOɽT^@QNdJ,@|t}?|<p;)lXվPu|P76r._~pZ 瑻݊Gڥr^>p><>Mw6}=^z^߀7x|~u2Q-D>9l(A3Pr-;ʛp(~b5Բ<Ϛ {J*$Q`Խqiu](vs6Zen^qB "žwMyipBw
͂s|3\ߩ7^כPF x6*]Bۡ2nt@Bix^'q]m9F;mdr%raTEҦ=乍n+Q{:swy[T^dR"90Xz=ɟGOdk׋N10JW<<hB[}g-M9;noGG"}Մ#-Qv?BHD쓐}+d'ϵ*uB᫂,_56pyac^<"Oۜ};g?}p((/m["-HҾh&NрFb~څmMЯuڬE V)UyU!e%oB:IҚ.=B{Psz<qbAjڷ\:q44@o5EtQ8ѷɶIQj}:pbw	w]	}W)
q3)3q~&qlҦ
Qh(H|OY0f@_Fzj2Vg3G/jѳI'=ULٚ*J֙-(y7COmI7Ν}UGRll`l@ 眞7P?nBnB&܋A8t#ҝHW~_}V	GAUbx֡	8}c&<UM('e
I&	h3Hmvq[-Z5cXXr+˸9~7ڔyʍ&foU-xe˷򔥴	O[|` x;po'Z`okY0׷g۽(F$V!PCڦ86&!m [HCRt v*DH;=7OV52g{IW/)4Ət$kX%+YHu
Nb~xEm_bUE֎Ծw@Be5mJӾjھ)E7ju!O{yp^D|/~	^95%RuiUX{+~<xψ}뜡O%MM3N$rLY^}"Mpn}l_
%&F,+]CiՒk,]Sq
n{ 3-"Bf81mfX}"joQ iĥgA\ztmx<y~{,2,͈(K"1QED)Y#ٗ˵\˾˾4sRk^>vsιs<c;$DbE*dEzD^[I8]cJçLdܚ<.<JMk x*;Ot׶zW`j79W^k5+y^Mj}R'skW8z{euDZڰW]vа
L(+ I߳KN{w;V>*X .5)xŘ5S?L]Z+:}XLn{IZ:ftg|-ߺ]LO/s.3˸jS
e7vqa)ևa_0gO`?0VÁƿ/`c833-\aja#(cN
c㍕8aQTeN3,88΁Rh]x.KRܸWjxS.
7í_6#pvva-5AxxL3L7|aIcx
6gY9xX ^,fz
,/*
j|1]"Ǜe_:K51Hх6 sK\0xK0K0XE?X0%a)cYX1
r<ho;]GaeXxV}~X|x
ր5g`-XxցOúl 7~'ac̀OY6ǆ0̺aas,la[Vƽ%;
l
_3>
7a["|c
s`q9?0+`7x	?6^`R~j\όc%826PcM8~e_h28K1@ĔxIh]	,8`
o5Lm|(zp6k;bc\Jp\c<ozxn[;Vxw;D7!nx5	|x~oOY6<2>/;\/_Ռgl,;@g|
TccqL9`N۸man
sKFɸa:[Xh\0ׄ7WfJX
b̂eiaN
33)`+ۍ`%x'^Z7rh+^qɻUjz繍8{SWבޜ
fpRZ;{vCHA}$RZTֺZ/PGkHk},A|
#Qd>Ƒv}2rD3")?Ч|/Y6k3Y}Y~}B[E_--OԗI_qWO[gU/}ͽm\7}
7(m벴[oM;oDRLߓAӎ/Ok'iM@>.vCdvCkOA?
<8ȭwPAj$xJ?
v?誟u@0R?"l/}:(8_uҡZTiy+#4CGjKZ(h?ͿLuW'iWuR4N)ѲStZfE[h3}uVtfG'<]su^Ώ^.X]Kb5ui	]{A^ue
ձ&6W.6vB~
nM[tsnH=wԝ޺+>Dw'.Zwq1=(pIУz,\'ZD=襧|w>,O47zT
*2ADP,(|AZ3H@\rQz9+r@n![eU\B'edIL2FF&e~WzIO&]t򖴕6Z^TH4@J%5A_IU,wmR^Ji))ť_H.Ab~uW%wsg)wq>tfs
-r7MwSd7u߸n>w_}_1?/.+9ҽ:k/ʋhԲQj8|2|*lZ>Z6K-//-5^oxښUWGooWMBxȆj}oxOi[I1KiMZEҷux'w}O;z3{	9^kk;qyoڙ~B?i9J!NӑMJۓܦ@?i/:rn:CgѾt>|ʘ"ڏ.[A? Nnn6:tC}uvPz)cpWAQ.Я%:^JG{	P,4@\m yDN)D
)43iq6tMΗ,Z$"zIlCLiU:VlSΥyeK-֡i]6t1mHƔ} 9*MrڔO9]I[U%eKt
}}eI-mKS氲=H;MSa\ӭca.vsan.\ݔ}a_w}{)R¾}(F#¾Cm)Z3¶գm(NC¶R¶ѓm)a=ez26e	c(g)9aGʺy}+sP/rzr[ʜL^\Q{^|w1gb&(s8Iyx~r eN<oE+ehFP224-G͠"1TJPK   dO\vVr    1   org/mozilla/javascript/SecurityController$1.classUOAݲЮPKQ(xI*`a%2%ɋGc_уe|3 a潙}{}3ϯ >$a9H$Uܐ{~ᑧ*WUJPExӏVگ#:CAv088~v<YbiYb\#5m_xX/J91`c٣T]?{Bq-	q$.0\Pfx[h[21&vJeuarB[6&m'v=ek`Un5?+ƺPI"w+_6-}Q=Xs,M+PѷC7FcOx1$]N	0"OnSOfJ%6ҫ<<'b^B/9q5n&Eoޗ
ǋ:-s٣V"q8a(T5Q$"LQɁlVw<$5/#
Izq(%Vh"9Z`l;BZp?c񙡹" yL2 FKWIY(12(¥Y~I.d	vi/OÑMPw0h%̚9Q	͓$˲X"IKN!$0(PK   dO\)qd  u  1   org/mozilla/javascript/Interpreter$DoBitNot.classUmSI~L2.O9@3<!3DhYf7*?շR>\}uڳ+Mjwf{ \DS)idA:kX*A70P߫V2d.;0OMECbrݥHt,!;5Z^z mU?C*\;、0k[zCY6.3F8dgf8mDud^/GGpc1gSΠh9Jars/1p Xj贵m0_8Lca|n{ΣH66þڵ{7)ya˂,`c@vzG5ˍdL*S=d/:+bLſOփ5Ǔ	p"Po[8`J;^Nqs2Ҏ4^JO7z'5z0'r'{[SނH[wCM?N092\:.e)Ñap\DÏ[.9	Cۼ6-2T761LϓAe/sۺ:&{8V{q~$*1O\?}VU$Hgށ[OC<F :ϯ3)h,/=Pf8Xycl>/N<`>gsN6d-N;0CdCt0"<	'E"@Y.[(;m2~6q֮bϠ/ 
̠5tgEpQϩElN%nykYaqGuXFr6rJ(tb<?I"ـPK   dO\Xc  6  ;   org/mozilla/javascript/ScriptRuntime$NoSuchMethodShim.classTmoP~.X7|&]"fBb\XCbRڥ--Q&.$Q|ccm瞗{N
nC\BF!m>3ut6B=۵uxIkDJAZT۞޾8o!7{Þ1zv!%Qoumעs*22¬i9kmvki0ଊs8P)Co5/Jmks"V
0M:hS"
T\eS* Y2)SSd<.j-ʧu{i.om?%kxjP(=;`X;$1kȰtZv(`a1(,4.?n.B*iod2$hFM~1mv<3,b44@aD:J?+P̾Ds"=a܃02		.
&>	zM]9/0ke)/J$P*Օd_RWXk`}7 
 
qC&qqhIdS@8J{<$ב	PK   dO\5AO  
  B   org/mozilla/javascript/NativeJavaObject$JavaIterableIterator.classUSUltKZӇ-	MS} *H,>a12KStZǡ>X?9#w7!I)4r{	
V9BCSJrYOt^:{=cfVwZ|Ny/
)=ۉ!"6!2a?QhG;COs(:9TpE+3-sR0>-gf[tsLIǰ;(r!rSN0GWpA5ԅݬ&۟Q6< AeǨ9r+f'^Gㄊ8UPWt7kd;pUяCEֲq״ezUl2%TCZi0=DkHǠ7qxI-8^,d8C-j(%\渢*f5|y.á:r 2xG0m=u_$ie7iOOIy)SpL\0״16pByaD:ɏLַ6p>e@uiLghrkK6cNI#n^'ٲ5JH8O^
PȈOrȴ{!Q?*c׌CTHOYKPCt
)oA:aCŰR4j^3/Xk8+T1k^/1DsS4&Lplԧz7mXa8ɲG4\\;=JLAc0J8&:=ovz3'i&iН<6?Ac4EQ|.L=ݍ[XH<Ed$FoVPoY/"  QHjo#<C.ZP+D^UDh(rȓ'<
AT@S^ݬTCP	X bG$}3|~H(=v~iA6bbEBtc|$kӛdl@2=Om-\۬}Srr8|vcPbpaƑ$-#5ZL#:,6i ol_M`YZ+e	*RPK   dO\/T}  b  9   org/mozilla/javascript/AbstractEcmaStringOperations.classX[pW겲Ų#GIil9KS[lNXر^Ky]I+V1^LZiCB;؄0<0x#9*x2F|圳WĻnHɰ+pP5>LuhrZ[=[.)o.T9
67ʡȨP
k
[IIZSBXoWzR.Rgo6Fdxz
3ٚ6fTJmrqSZ]9TVO<e5St#-NjٔZZj섏,烅)5
hcznTcGmq{
Am+hp hjj"nlpR}30jㄌ VkaK51Z5oͅfa[DTkprd<0UӅѓY+ x\AaC[蹮\\׏I]Vq܍#q@/E3LWV5s=V&=ф15kMmͬkOlQIQR1SЏY$3Q[;d<зjZKlv'e()丑к{V|ZL\raԝS	tc6O+xϒoEW\"=\2
<Yȸ)57XISuA^cs1e<V@]mH+`(7W.5P1(gpâQ'SZxcoD&5o;O)0ATY-CyD@*zU+xgɣE(|Pb3`>=1>EmWS#"nMdY[)(RV=m\ªP_z~+Qũ2.`#ʢ ћL!Vi<N4fj,N+0ii[g3UW|^$+ʙ.vzi;ɔ
Z
٢a=Qyaٜʤf
n ?ʹ&dd?XxR <F= B6]؀PIkKWUͺ(AC)(ԯXy;bB;W.uW׀4Fތk:}wG"5_7f2I\ov!Jo}һ&^P2:`v0~=R˨uޥstw
Y+|爋_
Yyle#N`+\ҬWPtcfu7[hO!dNUӭ	IgBWпNuw߼P.
<F¼i<cxm?۝#~Ux^hޒu
9:]>2jHz׵ EI@UsuJQ,g_~v 8H0OE\fܱ~g'&;^</YqJ\;"x!nwIB%LmjЇZ:7ةcln^tu:T_hbo XB-?|A7+>>ٿ0 mÐOJ0"Ĩ(NIxJ4gd@LĥqFCRzSҫХאހAxg_g,]"d&2?<ާHvi=/q>I]@4;ba|8x@cn+x*[	t
_
IQJǖXrVS]]!|*	؉oR-*?kr驜^{3UPES!
ٛ8*E=ډ!s6{>.s-Z)J@ٷ~]/	|"
^PwI#D{xCa|%{z6E!p9ɤ~+dǴ(~X#ten%lK.cLrdT
WkD\DD.0'D ,""` C:L[(HcS	hA#Rn?!z7ѫIO!q
Oo	:Ǌ ~=! ~~&
{ PK   dO\8    1   org/mozilla/javascript/Interpreter$DoReturn.classTkS@=Kk"(-}">Z:qa`0V|8?n
!Is G":b3̸V~lo
8Rx;ukrm>C|r,H'ЍtL%ö=)b4wU
g+_olSUs:z
k@?4qa+Ґ;p.	eK
2$q)FaT
1̉?Yyj̐(&>n2LQvWlynR=UV!5aUkYeT1fKĿ\ڻ+aRwt*_.VR*eHĜD-h]g!J|myXԟ=SH5%'^pj?ʉ#g8tv *8uuM)O}	>OЪ>?G|4&d6BBf\ֳsp,}eʝǥ+rk;8#8`b!_Kre0T4fncQʙV8SËD0ޡlȦ)F&Ks4ے('@vC?PK   dO\OT    N   org/mozilla/javascript/AbstractEcmaStringOperations$ReplacementOperation.classSMK1}kj=xRXY*{v
5fKS<<(1+ͼ	I֊@΅S$+zM=Ae;XlU.6]L'u[.+5A9;e.SD34f&'KԓFPd^'b*|TSt%'_LOp9z"
1Vi~0hbLO^*w"(x[RSOp8_W_=bvw]vl&82/~ A!%SuAf6\%uv&5NyGlhm>#0mm/88,ʖd90yXp	+VZ)PK   dO\u    6   org/mozilla/javascript/SlotMapOwner$EmptySlotMap.classVK[U~O.3)\
BH -iMĂU!I&&+ܹr.|||ɐBHqfΙo~3~U_~hQ܋wYG@[,LoЅn N!(0ԫ<-X1%g?eñKCyB^`?y#.*ٲUr♼ЃZP$.LNo~T47׊Nyߕ?(0Ip܇q6sxSB!)ߨ=UF񖎱 q^ `BvTud$=[
,S-ɽnWtIV8P-0ISAȫ6/mU6jS=#EFҵvalSos;i5DEVU;JQ-Mc7OI(egQ+9-N|'ItY)X{EérӉ\jeUǦ{-gUT4yY_ss7vm&;@}*I)[X/6hYk#1|S58lZ'هtvgQf_+maBgkt8_똣͌/Wߗ2Wi?y˒y;
iNzaVu&JEJd[SO)x4fy|ķ8W?s Ԕp)]\_>%e<~[k{U\l.Õ#<	D-}Kxϵltѳw ghX{%I 7x-
*z͑Dq]MZ
j>w>z95"at6HI|U{DcZUԱzTU+cZGU%I1܈Β;|n^P3
_AAT>TDq&Ȼ.>
ZX{3\C*L
1UDux^9A/>g:%~Feǘ
'ԛbnyuCgA%ϫv+<rGdKl ~eMouhnoj:\R~ G	{G
R_PK   dO\j  z6  +   org/mozilla/javascript/FunctionObject.classZ	`Tn^ DBNEE
$!h  d	ݸCUjUATXK-UޗG֫({o7lH;go73v8zn'aR$^Ye+c`g
ƃ0yz0$
.p!(Zk:e&<2D0j*+j	~320ÑEp
P,@`(JMÿ,YMteaYn/H8v"y	CЭt,D+#=ƂRa1"0yoXyu(b<a1CpcMq<J:&Fz@|EM>Y~.er4Ub(F	AgKwLMa,e	cs}ΡNɄ&\mib8A+cqSpcai=\P3ęgoAM5V~20UfV`"10nlx;@
X}$.K*fLf7]Nz#XqFMh&dSDB?yj:YKQ=Vj߹<:XG
tFƮp<F#55mѺ45/,C@OYBN#VWXF8戨6<lBwv0%\x
P[R)Ebmfs҅BPYo+UʈN\̦)UpSPM`)Kb5R)2D; o`".7%nĻaݍ/\p{A$&:<<sh&[#[o0%hkI$M"G61;nWtbV1c{uyRY_3pxV{d,lhÅo$I4j6Sh4[ʈ]0YZkXMwn/'|p~4T"!4dMD׋%RǷ#
0}.lq)DZ 4$xHqJ܅[Ü-xTm1=ߺ>z
lGWk$|I *pѐj9mj

T\N9H8 	kn<pJO&!(_
<x^a9pe]"N$%X"~[sk	3d~"s*jP2S\f{%*yJ^aG̝
Pw}ӣ!]8e?5$kLBQlDǟR%
Cl]Xku=\*	׸&36db1bzj*^{b ]P̅F؇B,Q%j
v)r𱁽$FP,`꒡C}1)֟P.Gd&1d8\DcC'A:p9Ke;;b<Cra|dIX0)RL]?e-V!$"CAyeh,>:wT<i0O4:~IhAch,_%ɚ.uxDҬæq	nԦVޥhDpD9W+2sd+mVa)_`E4crECU)TjPBjX,L)8::M"4>td4t;5`6lR^Kt`'KH!F::"1k
OC]f4I񋝩yb'Lo
VTE9{I.jꢵïȩ[cYt2KX/bCk,e@< ulXEkk c4TkPs<ĪG
ͧs8r"CrKQAR`L7-:k"Z<]MtjMlN::.`ee.;X
ɔu,, ?qAgo娟fxNN\M<2?f{[7)QAbҠ)y@:q rXe3l*)ؿ0%hWEhdUEl@VZئhEV?\(D ;	@~Ak
Ą.tܠ/OqF,-Մ;?l׼C\V,
C8`!ZjN!@RnǶ?y8񬦥ug7&AR%fe *7̟\={<ljn?+9N[7'5]
V64VW''l	*Z*kvvtzUc9GbOC~&2i;I.ʳUEڤ8e0Kf0/_֠-BY2?&0ٚM{|E
sP
|eBz|5O'13טtz{L#nkf
~)TŚեQ{3yߌAN?jݙMqEuNDxi6K?{\i$,|1y{5THp4H[|7"O8uHV+,f7f8P5[uk]MaJC0O{6|Du60٬Gm#9h>y;,!b}
:̛ڵLh @̛W4rXYAuYT	l;]g/늋ŋ
.L'YoĂQɵ<@?.dRN,cA&UG*$!')@>ُJ(IUq'0[A0\XUKrNfIP*>t	CLWt[WN6Zd硔!M:`#"Wyɑ?gs4L93>fLD.ʋk3:}>H#9mUL)m
	=Jez[foBWbL4M-cƙUFETU_G$rȫ}t.L_NR7s}J+ܿ%+oKEZJRN\WW:j|r:o09<N>A%[!^[8rBϾmUh߆q=(DՋ)<m
EPj;}ja4vaT6`0ԍ}Wuc׍s}N[b&zҘBUy`i
ٜ:ks:[ѠFb|>,z06߃?<Yo
L2*%lRSÅ^^.r	6l]^W^WZ87`jNa0>Ջh"{ţ0!-\s!󆺺QfV|^\V!~UBl=jrk+n_ o׭ՇKl}aUt07db!p.&cJ3qjp.A,mh`+c+lXIX>qt|\LDiעm5;潖K;vrz_
++Cۋk5\mMZ1nʰ^;_Ѫpւ۴u'YLw2Һ>Нri.7ˮ{t7\pjLu/STk2FbͳLz9p!oӃAB贙	MEMZUsuӱC-:H4 NO}͚SuLg|@ 8p+6}37}mf=ي
وprnmN8.f{7#FLŷpA5EPWaBVV1J#g$G>D6qkΟ¢|6m["mV
EK%FGU,qGI」 TO%Z_?σ;X-[ڻ{-<sȔ32;?1Ym=`a[cY%-[
Yn{-EԓeaGQPGn-`;X'ÓSOc=>ĳ|gpw<~w|w'ռ;ݖU!ή.z.Jg qst1*u7[4Qӳ.g1't;Y5)e:b耖Q$$2m/+)t=ξin>ڜB+
S-z-Pv@:49=iQmN~[ϷSJ}78/z+66P\X#?k6pt{~7,̟V9CYыnL*~cs7V
R0>|u6Q*e3X|!#ثm
wQmcԫ]ܲ+iwj-<0:M^ӳ&ҽفv+> k࣢=j``FVQ4>t&z0\:>m(Qi'16^$9il|>Ms0Juvֱ3|d:K&c9zjer239~8F	agR"/i$i6hGc#jǵy#Wndf3hsȑj-~~ 7*say^q0^1 eC(I(?Ӌ՟]@hTSl|W\H>c4' .a[2g齔QTs]補;?	yt:sc"s+P^z[b4bƌ$㳐Kg$$<~b"|nq8Ir>QXK8)gޅE4_4ZRτs:qc0LJ
3))$K	?K]E4)%HN{5ұfXD5-6G2;i	2<悔0%$Sglm6>1*KK'c{){b4ǄB2_/_oL:F%6aQ+M^4:BTYmDEi%`>KǕ;ӝ=dIv 5i~G!=
ѩåRI2MEKqɄd7QdK'\%t̱MwsݘPK{}M)RtK9{yBJi6Be2r7X7i"&^8V26a3ߏLwahZfn2[Ճ&2_"{$09<^i)5@IVUU"JZ7 }m	3rl*X4t0$;"NQK1NNWLZh-t)Ve\\Mt%$]]\2]_
x79}n¿8OFA_l
Tľ}#}4jOi3QI*]Izwn]۹zWhNx=г6^ҏIVD?֦Z%;61bp-'..8<=F9i`uN3mֺIgPm̢?7^\qg(PUnep٤T,2rYF0R4gB*62SRdW Tk*k#Qjlc=%uru9Y	h)٥Su%عU9Wj97APx>a I}t
þ8Hc݋1hY923i,c2]8U}
B7XPx`ցRXc{^
^}2ZAZR/'PJċuɿ8TQG&Re^!qc2o40w(=<tU0ބAu}OXGd[I-KO_)5v·Lt++2waTW'oyON3M/_?f)V%QǕe%2
K̷rV"}Nn?S@NEc怟,pf~ի%XijX̖}|F6R5W;JO`ߏcrCw5Ͽ?TGO%PK   dO\|  6  -   org/mozilla/javascript/WrappedException.classUrG=cEl䇊y6(m\)RcMOʹKURYfG-ۣ	[XLOO>ݷw/56 j f"SO>ɗg9;>b1åL5DTBt4b!E̽&H2(Hզv+(Yف,	}N)vue<~ճ\_"p%cEtTR8cଉ4.waZoB6]O>۶ )oa&B51q.R%)ʲU[Zފ'eū{bGwS`⢶$XuL\pd9bQC,SV4"k"i3SKsvEx>!w}HEo8W!-Y#o[6C$S"cjעӗ-}vָM.CdȐ?83svQB=Xn -bәm8OIُȗ	&Qc~pU˷HŵhZ@[t+F34xn.wNGܕR&Wڕ5;={PJbku?`l峜}'BGſ«T~nq;5[%)qkn<wE֧/ml)}&͢`s2gI5P&T5&ݐ``ED(
_׿Mq:7}؟ՙC[]&ұ_ȥc|ENP;>aja)Z1M`I\%զ\u i'2Oҧh9no<.n e`m$).pyz p'
M@R9|Cp!XRYY	wJbPK   dO\              org/mozilla/javascript/v8dtoa/ PK   dO\6    4   org/mozilla/javascript/v8dtoa/DoubleConversion.classTKOWg/CLh0L+/hBZSf&63<t׬e
QUQuyaJ4s;o &P!"0rCZ5r-^Ynnbu\iV2ku˱PC\ %-rU^-3K@e[?@RGtV=oNmè
w4x?
@"vC;8B?4ǲkӖ[Kǻ7۴] zt=f[wakJSU^(tcLy$q0c9
wJ%Ӫy{^ݭ:NM Q)aѨWļ@3]w
]1
4Wf}싒Vl^r{AՐ^zHW|;)sM[FBuD ]9rpSqں`ƪY[6XpHb,[+8c2$,I5JEc3p|8׺t:vɐKFdY<ssHu4F0J4FAx7Op+N_
$
ᏉuZD%Ӕx
#g2wCoW,_3%}$~B,^I4oF=J#=^+Ou;!]Ai7kJ4kd%̐uA$ƳgoyNxJc5jNB\+bЦKWҏHy%AL݅ei*TT,r!7_\w9.'?2Fɮo?@#3ݻq-x$3O){~F{=Gˏ׏"ɒB$ۢ4MSX`Fqۋt1,zyژfd
977ȁ\,e_Cj"TBD$Hr2(c'2lˏO$<n#9|lg? JBSo>PK   dO\.    )   org/mozilla/javascript/CodeGenUtils.classY|TK^rI -#$aCu\^#p[UGjmRT:lk{ڽ{wRRoT{l*5U!3Qu):Ҳ^!߀W Za~\*A`OʌƪÁX0nY
Vli[aRWZ4b}4&85F+p[$3P0s8 c(ju(813oeĞ:Y6+mєkV4ʕ-֛1S )K{,Ǿa>ӌ6Y3,ryŎ"1b	8֞ɾ
H\#eZ1;Nʆt!ۋ2Pc+[p[cPTu;e]lB֔muhj}U8\eXPl[ă\=A\nBV0a0:춄JUBh|w3ݬ2d XuCh3EjFlT0HG̾\`qw&43R\`(!Ec?:m~ 6~Q?/u~Ǝ$Z5k&$sƛ;iBٟ(sVq
n/"2²MB;
l4YPoFτH9z!^ԝث%>{F,F16$Ba	o^G>ݣql~Av1q7MHiOE̋Kq5_gPhg:dҸک'nBT"xcF@.mcv$:\9kAz?<&3%ƚH~n;)wcQ=
cvivׇ۶x&*)-3TvVIWk15AVڶ`n
v͘WV:ơxwj܅9#llk+ONܯ|p
ҀXSh?qa5p=G5!C»i	xD³tu	X1˩Xx	!kxGCkv3rѨqq`uG8!R8ϲM!z&M
b5>':瘂.BAb"
-i;6Ɨ~=HjjNI#u4P߁Mgnb6j-ӣyw
 "|wFQ>n0/Gv1'j?E{zBӌHtğj?F֞xjlo:iClmL>$NS,	2VQ`y5cVL'ƯR&f|6%3B~ñ{ntn[
AS$$!6}ȸ=l|icɒT9EɶGn:/+{5!g3M2)ݭb"pf;qeV鹰	hM7>
4{CUkP9"vFOJNՆglSs2NIl+2OPF\C#3Sf(&=5UoE5ME1;LeH+v.=f{]x[iΙb
}U^XQ--N޴eS_Z8ndeu$ ԑ3n$!\݉,wN,N*NJ&jCDșT^1qrf9g9g!OوV]ؿ,R+VG"1F#B5_~%*ʧL5PFW-PUZ"+鲪l7%69tz?$+އCOS$*M3 J1]
>m0C!0&ÜBf4jE
uN_~=%:7vU8mXPR%3V*LYc/VY?^(ow1G?u6"o^&U T\yz1WQ/}xq/!x=nN7L=ˣzW/[538J[1|N41S0S4,tz61a/ÆQ蹄hGI ^J9SJlR*Se6w;%Uz%NP*u
E10-Sb݁Y\*RaqkPXnӴ	-	Ȼ.zB|O<6DXp';ޝ\_+?ĢَE1U1&hŴq.[uyŴ=ձk\x _(T..<SzZ<s1Ӽ]^4;Qj4Wcty^t:O?yOs<U*+?%y>t$1#-0$p_CWa7'pߚ;8p!]tu1LV)@7
t6-vmZڴصiMRr~rSz7r%+$pKC~ 	|Rމ9igxR?SJܺ!jMm&0aEql>b`ۙjluy2òtSPL*\82wDަ%nZ/^xA
OC4WXwa\tz&ύi/iTNR eL35q/ZqYKV/&H	={U;|Ǟsyfhd^8~ Oĉ9rչ%)a~I=]Q)uڕ-]#mxl_QN=Xp(nƊp;FSˇ^֙;waa ߁ sLWRl&J2+wI\d혨K~ǣejb6wg:wlyEay

P4)<̆$%;>i4l[X랩
S\͝~ZK2Uɇ~Puj&PK   dO\c
4  K	  '   org/mozilla/javascript/ConsString.classV]sU~6vI-4
W	XlK	l%]H"kgg3^eƶ8^9?k0]Z8i{yI~_ D%:T(v˸c+F>?u,:
Z*
6(۪5LUiQ/֬ԪuWm3tjآc+)LvhάMk`G,kD:c@ż$w;a;j[iGdѱbVδ-+TӱfG+(Bᰎ#
&O!tesUIٶ1?,~1$uRiԲt5"/!"c:5ZMGU2NfBx'Uue!)oOfۜ1p@ӄ(66!EF@,ψx[A>7U
3&|iȾƪm1U!r[0U^1kʜ~gKAoULJ/0L`[sV՜2Kn\siHoGSw'՚wqcsl[yќ[F1K""Eh$qB[.<\Tͻ8P˪55xl:ZՒy}Doh
n6sU"[Pdu,'Ky-cx
r||?o\srϋY/p +PB[@BL)Wr))O$ЖH-#mKrqc	ф	{ѱrLj8Ȅ!dJ)\B.Rs@.E
\pGϫ.Ye\ lZ𸌤
^$Egfa{Uhvhq6ۉy{ޮH}m⫃|)'辺DoG_  "اFT7'1 #s
]OFe-~JFYF}h<B	R/ȪJh
؂r1N!C4Ctc摥c%r]!qh}Mf!?>9z>ø3qZOr_}zQK|17G`S/VZW$_*U;%ECGs6Js(4JPvnih/7m/~5xƷѦ5\هkM&~tR,`D.H&[(Spe/
|d/6DgKFNkxGVE
AGEnInPK   dO\qX    2   org/mozilla/javascript/Interpreter$DoSetVar1.classTmOP~.l\6EP@@`86*!RS!Q\Zڥ?Qs[20ls=/y9@'GLC]ێcfߚ;f`vMf
W
n %m-8f0tݶ][.0tN6F#4t`ۛ4-f>^}a=3n[Fۤ/)'4)k38!3Ϊ*ҔBEq7EcMl 5\0Cb^ݷH!FWn.jU4wKRv.E5\1cxYT>neT
K>402Ga 0吘UGD>Tm20auqv/{e!7LcQR}*uYCJcYV<
aU?8W2~TT;f%S{aȩ y5E''B3C\OY5Y1P%^UQhbJ"^ 92A3\WQXA?H߿?b5.!TO2#)KO^W]Cpx-Rufd̔^7TfM&zϛx|W&F361|(>lG
u)ƈC|_T5btFU<Ǡ`DHu,(
߇"\-|Gy6_-bTEE?嚢,1Aq4{A>Y5{ՐxDt<(KcD
'D]CPK   dO\Jx$  o  L   org/mozilla/javascript/AbstractEcmaStringOperations$MatchedReplacement.classTnAfB)[WjQD!$ؔۤ˄NLC*BiLM9go|+gh Gvd[=毹kP{Nd8ޏEµBU;=POK-Jfyv.BkHf`v`XPMH|蓥܋<DOcVIEMd6;Qŉn[aly8vXiҳK<N!(m#^|T}**C!L㱞$ڱ~:Րbԙ.)Po_m<Em,8䆒sk|x.$Ď4n>1h*Pz7R:O/pJ0IJl,[*ϡP+hd$s>}"
V
tUKp	kʀߑ`0?ИAV, Nqٲ9(
6	k
iY]5hq8v(ӈZJ[Vm+kx@lav5QPK   dO\u      )   org/mozilla/javascript/RegExpLoader.class;o>sNv&Ft̜DĲ̂t׊Ĕ"vF~Nb^RVjr	#G^jy@Q~E%#^KS2sRmacd`d`f Fl ;db  PK   dO\x  g      org/mozilla/javascript/Ref.classSMo1}NliKIRjU	Q97uYGN8$3?FBz{o<3_x.l8+!~Xy*#1덮%\pÆP0~JMX 	s@;*T1[YK%XP^(ЉYvEHy^2\ p,'u'Z-#j<u&VpRi#0lKrmQG@62S"$i>\9[.oWbp-ƑCѕG\S8 wn~ǘ|k.jDŮC'iG~CPh:jbO]\6=HVpt=@+dW1K2v3GBcEi,d \:Y*4IfGds)z?,f9۝0ulY7p K/[f2aWMeܚDGYy'BULfBY
 .n1ܝM!?RnV_PK   dO\hA<    .   org/mozilla/javascript/Node$PropListItem.classQ=O0}צMZ7]J22X*!*E	ԁ
VqU"_1!1Qs||{pN>T	xQ*It9*SP|]O~Vi*"'0I6;ypyX9#x|d^_	k\h@̎DಡyU;=ٍЌU&X7blt$reӳky\9r|P{CqB82Sad獰xW&Gbc+W'%q[9elMl]ƀ9>{ PK   dO\s{=    (   org/mozilla/javascript/Symbol$Kind.classTmOP~.{V&|!(D.N0+,!~0ݨkMב'DFgTks9/}+{)sZl{FYo^q3َB !R?,3Lh25pPxUX`*|)4"Fif^Iq)iǀ@j)ПJ
YUC`XC)o@i)a7SUh4YN-{:HQ
WpU _LeB*=A4k	,!0Jw4\uޢkz6ML<^t]6<zAǨvFU wG."խcMTLg#WۓZkN[|6ºOVOkf6|i

h1=rayfMpyo@6ڶX.!BOai@$}r-N%sd9!}nclR=C! f*S#?GIB*E ;Sfc*vKeKC/[VE
h]̶ɥ6y3q~tƂQs#$ҌK~z'0@Eq9K@nl@HлPK   dO\dk    5   org/mozilla/javascript/Interpreter$DoLiteralSet.classUOP]QVCT񚀈0DXc:0a\m?>??7㹭YI} &DD50[iY<_sU?S}V]A߾n⛎mXMg"t9Z16`|^yбQ[Ǜۢg8v	
:z|Se`8΢S9
qu|Uk|5x=W<Z$,GCF^\UУ)df,ՕΦp:SY}:VěIVw\%T\M
bWkދ2jB>^tYA?CnOY3^4mF7-ZI
5Ũ$Hԫl=?YEJMT=u!]?ۈX6$}jB5:PpQ%9WOD\<(&:H8DK< )dK.j GmKNͭS$q(a)K"<|y̓3d
-`	/0ztaF8 E4D/b-eDc_>ۃg1D
`s#B47ehmSGtNK]ri.Oņ}m?q}+7{	<woZ<zy1/,acA9xdw=$b,&G>B
#I
'
/DU5.	P
D-BPK   dO\|Xl߭    1   org/mozilla/javascript/CompoundOperationMap.classWwEmӅ~/!"(D+M)`)R)TMPT&KYHqˋ/+<z@N㿤ޙl
iQv;/8r5te|adFi)3x̻qdDr-h] m;KeU,9wvT-ZvQ\iĂکaNt<.W]"ײQt[.=X2]`"KV֯c Qw!m؃ױW u0ؖf/eQ;crpMJ,$ebo8sV)7NoA2,ZNN鴨9IHˢ6*ӑĕVX,
S8ƔN#J+FSrܕuTe=-cuQdU,q'0"Z
.oӿ͖L7)u[l4 gk:H
UʎIg1%brl^.]ubf
{5LxOҾN?YW0+c|sV+f&ړEb)Hlϵ<>cKEәaty8o8|:CMY|zbsk{fCm*~L+wd|K%msEue
܃X֐$&bEr	ɖn笥!̷㹱&^ɵ*hޯ!^V~p}FẎnN摆{xs}res;B4gWyΒ0H!ĕ7]~5J?H4oC{p!g
mBÓ
/?|	掋^U5K=HCKcG* fy v'Zk)|aJ({D_yDCC<vG$R3$iPvBkB?hp'BT,xUC?kяpK&V
K|SzBs7c"vrp_zdHk@;t~F+A~ΝIn2V|d"lSL@h#+
N%p_|:QCY>kW|
>QřDeE}Ɯ¸-cآқWy'"vG$c$=~ȕ8G=pMK%Pzeq1|
3E}u'՝TRwRt,RlT)[)_E'$MTSUd(POt])tįFPoo"ԹP<yP_d<a?[/zA37"եz|c~zǯ!n^J9KYE68p9D$vi:6w
yЫFPM^#P:YbMHȴP`n?PrW- OHnjSF@?mT6*]e~HPK   dO\_p  l
  %   org/mozilla/javascript/JSScript.classVYSPnBk** tՅbP@)>)$??: xn:6sOܟ paDC+鵔.KRz}"]sjU5sV	8aDKN-4W5d]b"»tBC,}у^R*117uۙSVac@9qT<8dJvT#!qIeW00Fj!Z-/jG^ʁo8"F0ЭESWy
Ucgj
]`zHxtQҮaR8h{ }5]XUe]3%cQI)LSJfKVҸ.0ܶT}@&Q:}b57/yKE\-+ m_]뎸)ET̺NXrR܅eV\z{HR|!`׬VzeG77&K-IWa=$(Åok6{Ʌ#4dԔAeoa,5M	wM0,tdxGjqh;'|0	CА2IZ4%yU9_!-VeeQ0"ǟf8bswh{0ܣKiOgbxY{ɯ|"s#@Hk!3j!E8cη
(D=F	&@h	p]sre	:l#{EZO6r𫆃ণP~	Og#d$0Դmr@0xI&Xj3
\
|l$<Jfc]HԔ&GIb+Vy22(`ՂUN'm!lXPK   dO\M    -   org/mozilla/javascript/LazilyLoadedCtor.classX	xn&9F
&*C]Y$!BLvԪhWV<-h% w}V+fn ~|}s=9 d/A@%f2b-+.1)X4XSj(.pJ<2,E&ÉP%dpkk(nDT<!ICIqHbY)\G* }]D4֯}:&&M2#WnO1Un{Q7#rVt̐:ܝ8/P&͍VtIOORY	{#kS/pz5"[fǰ뜆|k3=^ulƆc{VoAމ"oFd!%{|fQJ TW;\AcX]2]ڷ͡T4A4pAc4BLX*)Wcs0_LB$VP:x1=+Pڱ{ò;]8eц%e_:j]uCc>,suK1c9OM$1>/QaI3NDS[[.k[X:.GH
X)phpL&T"8fH<C`^ñ0W:gN_9XLˋnУ"J*2VD2{'6΂2beƯH
#|'Є{89A;`0̴H XͼÈh0ulDq,RjY2ɕe	>F-*Q`;l$ɦ!]u(W[m:܂<ld-1tNK
	sEW1ܛ4D6C%y1LZ9fUeNû.Ϟtc`iJ?s@4A}@]N[aT雃Xvk9J9u*8wj
^M16H8}*dEC
35S膗iqt׏l#^1l,
lޖS3/;ysJ^7pF1/MVrLwWtۤѺ."C:>,ӑ\1,ՙ6aSX	.M.wKYGT1#Nh$I"Q+v<2ʜ
\>-kRɇu|bNmI"m~`
{8џddh	eF䨋I'/
;|ٟ>34ӮyUn3$UР'(XmG㙺/J[3"'Fu5z`	mWw[w%Vvov]>@B`y.>(}v_VmWE(3;҃}fbz*ggӝmyQpf7;COl+<9KҴ[p|l|8ن705|C`rkE-l)*HXGo22ɨ9ל$
ʻYcF֡Ԙ?ya`մu"orQ['ǿzfڝCTgis48W8aA!	pxNsx#Z2A-_F^ͽ]t"l.ʨԌSD%x*JCebMvɿ)];Xn62%*m6uK*4")_[>5/^ĨFi[G<ܰR6)a[X2x|Sz5:P&u|euES悊b
hBd7%~E]6booܤRHxuQ&\?֫=C[if*G`,f&TɛIMTpyyh#c.W~a:Iw,>烘y>r39ϟO~#_ZJNFZH~.PtÃOO{?i/&gEƽ5~^LzbfG2J%1|7.E1oZ	gZl%54Ӏ稆E
ʻ$w+HQjQ"/MfxjprV+Nr$zFg$OJrH~ޑl(ڇƱ;T٨eee
!&+#.M)w Cre2R}T#u$c_%%_G
=;Q$%< LU8(D|Z+d"-3oFeG`Ժ>Js6U\WaZ]ʼT0y,0hd4#F!ǥXHgMC|_r̨~ܤklx^,
E&T_~ZG%NT.jҟp}㌥{2BnU6a|&R[*i
9`1`g\~0˺\
fȕ9짌f_E7ғe?B13UO`+Ӵٛ$'vrl3ceWA^ɯY;o<翠2].~-'ݮ"F5ۏVw0Z,~XZazJ+Ìۥ6wx<DkqmSؼŇnxZ%J+g<cyU>w2BY/w+<mz^AYz3-FNN]vZq7C}Mb9D7v+uzF*(|׊|Wn_}	
)5N+%GNR;?4A0 z)'CuU6ىXX<lEJ2읟qQ/+'^$"3
-
㚇<?:o%Uqx\f>E\ IXMvرI2;}(x{}+x.v)x6Pp5amy=>89&ߏ_7N}}35lW[Y$[ǁ-axUC]0jxc%#^Ը;T%TE)~+R)ȥ?n?N|rJ/xYLRLrQ)|PK   dO\si    8   org/mozilla/javascript/JavaMembers$MethodSignature.classTKOQn[:mEQS-"1&835{qc
qAtO2x-Ũ9s9w .Zx%d4мpEr{aI[aY#xb. B2@fTy:W7KEZZP
oJPVP|e^O.׌ehBNGdDLV(d5_c6s̅Њdб{ntYq(jMdmD# q-dzdljNpTT?葘=ŉ";NTd~tZK
$NI  UKӕ1䗈7:XHH!(r8^YTN0kkHe898INWEgnw74*}VQ'T&"CWq;0c(V\痧`hR5
M4dTiմnVLKC߫ O˪ag&3\hzh=4״$]i[4VH,vX2R2
Ry	L >AgHa g[t̖$j2qB8G&uMshG6lCA/&tѼi0]`CZݜ!TF&!FR4O[{wݻ'Wkb~{ؿ.đ%؎i	Q~37!r8$DۏwS&sjq)l[U<4E$PK   dO\%^:g  @  ;   org/mozilla/javascript/NativeObject$ValueCollection$1.classT]OA=.l-|IvQʧ ED_IYXvO_|A>Me-X&Ms{9?}`aThA-øһ;4yzs7{^z{ƾx-r^bE1g&mJ3z[+ƗCau1De^V!]J i2`2F#"*cYC})JEE6\cDiͻ-륋]e5Mː:5tư ee^$(wGeUʢ5F@TC[ANIBXJ0(%jkjO.zz0L&45eȒap^MSȶ7׸c}9e\b8C#,-;;|WPDnqwExn04ewiƓ!j,BNU횮FQݪ]trbMJ<Y4oL5B
sx2ΏĿ;"\ov
-kY3
j>r$tB_aȋ_iXhT~Th'zZ5@k>pB##4z`C'JڔQDq:|!:oza(m&qR))tЯG(O
22JOe)I@t^;d0]&}ՇuM뤰F6s睔$
G+&"~g2G+yT"452NeXV XࡿVxy?ǂCbqrtPK   dO\K|Q  [  :   org/mozilla/javascript/Interpreter$DoGeneratorReturn.classVWEM&,-Z-J"RK*J@ Jx.twC~U+HxGC;-
@}w?"Ã	^(bh5̅RjpQ]V`T69Du63I[3jYE5];
u>I+(Аn55%NMclJ(:0J
-[Mpd:&tS.G$UPcOتMve&Qa!'09dr+dYI׊̦<qZ|Cb	5VmmG%6̚mʳ8'!9TU#pgfkd*Dȏ4JhRcHZVSgDb;HC5ZZlиڜj\e(BKRpO0'Fl+mqQpIO	xI?QЃ^JI_!pѺ@`(-p-]d`M6C}&mJ]|Vy=nt\]٫1Qcg8C	 ]A)9eh q ,&%L)s]21|GKئ["*bVBRHqPFSs[`8el$ߢXPp*<58ǩnd_myHD-GWiTp8|84QTS㪩ﻇ^F3=v+<6gwdt"/~<ӔHRW9
yk:X&sCKci{hn!
~i/j	ԴS	N7]nˑZk{5,ϛ/
anEJT'8	n9;GB,Hl^;fO{{OK0ro[PEzd?3)
h-!/ѯ C	:Ҏ0]aK|6x7 54qe-8.>i)ʚ7p'
%;}"A:DsG!m8-7^Dnap}gDE&705/pnQ(rWʿ^mmtO_8o
*2XvkX!bc-X˔	T:+«DtP¢$ʩ%drwHJK:t2v0ޡw~Yx~x>:/9PK   dO\K1   }  7   org/mozilla/javascript/Context$ClassShutterSetter.classJAI]r^L/KQSدp^XoewG|(q7XCB/ 3StSjj?cZkDm+.s/_V"J=	aV%WBym7(on&OW(v*můd/wK!𱁾o[v|XAԑt3s!29FPK   dO\1    =   org/mozilla/javascript/JavaAdapter$JavaAdapterSignature.classTMOQ=S:PEAۂB $jME
Zvp3SY/pJ7lL_[1;@}{﹧ ,b5Q
m	$w[ҮJFLWTz[EV=gߴ,sWv͚'s}G|ÝhfŖ~5PM kaI)
\YviFMYʲAg	✊>
B7-}uK
"#jotmJ?b5\@-vw8e;p	*.sVY1
"^^u1q$_]h4)
iz>EƏ;-N.%&gDkN6kB}״+&O~f90 ]0mcW2܇d-]ϡ3WMosCHBWY!,?&Swɦ32<*(	hyGUDi)ѠC CVS4i::_"
g,v'D58ӸA `s0
?jW~@}6p;ħ{I2;iN_p1w*A\tʂĩP1俅LdQ,$<!a5Gd5/̪P׸5z !ۻNG&GēL@S,7I0VVQHF%{ PK   dO\$MC    .   org/mozilla/javascript/Interpreter$DoNot.classTKOQn_NwEZQRRdA
I-0L33E0QwI$.ܹG"&Ϗ_ǒQf]o㾲l(lozV#(@x
O9Qvk:%}آXC8]qMG:C
Ēa+#~`/Tp6j}[A1r@@26XYC8t\%
iuma83J'!

11
DvSn2e63EC
ݪ0DJ3
b9ܩoͨt3PqM^7<K~]F6Nh@\{lkJJ.)R֎JSQ-qǐ:sjVNwDez+rP6mwMc*qa.s9ZmzXduNOKGOGxjO{EJhHaO	W@澀}Ri:3qx%	\W 7pH;"$	>8{D$V=DxX-RwRBd4rTǔ%n܈Yn#t89nqtq0`23OaDK*;S4Ds,F8{$(I,-} PK   dO\au      $   org/mozilla/javascript/Wrapper.class;o>sNv&Ft̜DĲ̂Ă"vF~Nb^RVjr	#[i^9P#5#Wp~iQr[fN*#0=B6FFf`b1I& PK   dO\  5  )   org/mozilla/javascript/ES6Generator.classZ	`~dfCk#a8
gBPqHL:3j=jQRDkQHU֮mm[RڮP?hu	~{}oÿ>b K0*T:'m	o'ԤҊK ^ّX$5W=~BA@+iVV,UQocǗwBBMQkM4:+r:*OS;ݢӍ9j<6|N7Մ7ƪSx̏Eڑ
RM@hT0i|lXH8Z1:XP۝SIpnRE**XN20T0;J`ToUYYH\7U6ʏѴjLĂR?	͉ T@{CMHʶ+FcI&.dθk/Ⱥtʕk#;=Dz6J

u~h=)YrcE嚲K6V_E66lh4r=ŘKJW̫tswTj[`b!Qmd2^	p4s1UO`2p`B7ctEr+V*]t?M3Y|r+ԮޤR=Luܓxei*MU$۬:&.SHG$7[۬3?SS
iPs/7qXE'$n*Sl2QmͱOWP:MDE0K\%Sj[mx*7G6nz4DMԃ'4j)ld 30T&¬I=#<}8V6ΨVpѱ"+©6
"\m\K)&dc5S!Ug\)ԬnH#w/zA"k4OOMܠa3Ed&߳
j`J4L|`$@9؅;
|][0K4RzzkUߐ9?QG&K/om>M,]mb`dpPk~vwoWybty<a
UN 2
p=,)|؁J:x{,+lLX43:2n.<nbEEi.ǬRxXO0nSgk6GbVUmi4	vzMg{8D/0.=;jE1߆KÉJ3qL59W._U^ZY(MV&z*׬-%sƸ=[=S	lV~I}Jd.'&֥#DkUݘ~ďc*X%_D<`gYnQg>8Vׇ5YJ?1OJ+Jx
g7:ZK&vp÷(@w5+.ɲEʂQZ7?SZHו/
Me M:mU}w✿4
)ҶS}&ǯ05I̿1xA1#mV؝묺cVpqnma4j\5;AAg&ǪV$L^iOTِosY?_|kRΊMVB?j/)SSϘ+:S+⍉jQ8BZΖWg88C3׍nAyzP:%9jQԬ:;*Kz+yDp+^uBuB)gH`XgԜGePPIR7cu@4^躄G=$(y`J-*nez#Z'Db[-̪
!Jm׬[%
cXeyONn^p8$7S
խg}1Mw=Q~l,L&fe?u)rڵ-[Db5jt)3q4e2
:Q/	
?3` H>۔9Jȏj<Sc_y:jZȔRth,5Ԕ25֯]
0lUGYױp#X+e`hYilfxT+zxL]ۿ,
VCK5oIX[жH21Sؔ}RS`u7Bc@{]حA}
QNo~r8Zzjll^Wr&zh?f =pTo]npIn?u]<fgKC4zf|X۰r:z~dU+yʰԵ&~ߧo~[2\@HeY	1afCC>>(kݲVea9,1ƊtuZނe<tNe;݌Ki}K:sӮY{GdZ۫j8$t+4Yߌn&I(rFu9]uYrޙ(Q+djg=/L1-q:'s}r/rɨ78W}_Wyj7TaPULFSf@}|˔Dwasm4of#jqS]D+]gmVϗ8W(a,F1j(69*1tzg:ikPH
9̥ݒ!tɘ@Y-k
UZ̈́_4r.6=~KI2@v<Yw^B^QA3hF1xC?((
)`=0c@(8*iˡ(86m
!_A|fLamZpA@3JȍYpsXiQ͖u\02 &B<@~Ea
F`Fb9Fc#yیqp#wŸ5LLcH֓R[A.Wnrbl
p
U&YbĚ5p(dFȀŵ0
 Y~[˖4]|h=906b9	WRYAVAEaJ<!pp]6xCظ!HCRoAEH D>J:zby|BlF`	e[FW`VR[ƕ2\IէtjNk6,]SFMe3G==^"jIFYnh5= o"[pq1)+Md}*C;EBG;HSXA! [ɨ*kR*jOGS=e|<zBB;TUծk5~(]E7,ksmz-]a^ҵ0}(qC*C+̠2[,Nb@GB2SL7?fp-<V>SCLu1=T!w~|>*<mUqsS$H)S<E#U3Vxԟ
)#,joj
Q,,,,-x.?j[9;yܳ.ARv+(,R@_ׂGJтoF9T~b~ZJ]f"
ʗ7ana߭Ĝۈ13Il{q)ح~9rn4pՓs&a$)a)
`p]46-ZjD68Ҫڙ
O%l?˚_AA}1,x2H`iyg
&97{-۱M]KPBFx3Tsz2+gعHSgƴ.܇uBNwyKoIkfP
2W
!.]ZǁƌG+ⷈI $bexmv"äLrcmy	w	rZCVF.6Ј|Bmʣ6׵
m@/1?hkdԴfzz%moam	goGUH%j뙣藊G15XBz	<t=_*4Pd4+V}zcvedbJt9񺬝W}ޫיOx:W+~A~E/}q7.*`G=i׻2_|}
S8%'
iy~
{Ppүa*Ndw8zM/k?WpbJceaQ6
U;Ozs7O97JҿЮ3ΤDj(Q{3	)7r>8P45Ϫ.TCLx毜CϹ3ܙ

ߍ>l^RTzx#gŁ0;rnu$p<M5."]u2.?]xWRRt^ӥWUCkT,eR٣cn$&  ~Gx|@#)~ 4_	.gQ	
%=qL$^\~Hz`D!ay\rqR[1~p@b:D# Bp@N/eR	2QwArug##%whOŲk=Ƅy /I"*)?T

7ҙ(Ҁ`PSq\/_4:M%yEs\>L
k|@dyYnV
0&;oj9Qd#dUO[1Pu~?cXS1FV?6TqYY{cT=w8Kq
mُi,ŏqC<1a>:*^dڙBަ4yJ|C#=(9S\vT%>:}w.][uWt\vJIp:DBWK_ێۺgV~K
>jQ,xuъVhephE+#VF+Z>gl	EM~?; 2[	1GVٯ'L#cE2Y:"R\AHlK+hAV6Ye

<I;{_
;ޔ+[f>k#;$WW	6U-ӤR-xk_.-zlf_;y&
rI>85}4
/ O2So

ou[I
Jj/r%?y˙>yQ@/4OcOu6ν}*7&2ivZ5Jgk*x	Uf^ws	|Ӄ*1o~ۙHH`<+7D
܈r3AZŭ(`9rΌk"nNqsFܲJ)s?:YFtO߼|Enw.=#t

yYg)ll=O^	*Rn`dǬ~Ͳ0_5^C1E9P6'f/l^^ߜO(c?WШ ˔<Rʴ|,%Y2W7qq,Ѝ|6bGeɡw2z^=4gۯ^]z{2ݞILzLzGY޲Lzs2]IoT&~ro1Y._ʏʊ/9c],D.4@իп`#_tGj*ys+dP7_3uoM+_n&(v6ڴqZ x)T fy
iFIE PK   dO\ւ    /   org/mozilla/javascript/Interpreter$DoNull.classTn@=8qc\ܯi ^*"ECJǎ5D|"$ >	uUE.gvw<#ܳP@фa2(u'G?ċt44DƩ'(<IʏЗONlA`(%{<u{
΢jfc	,hєMchy
 `0zk"PX|J}y<ᱯ懋|Sz=tL1^Ba/"˙!'7u<fC!Sg(x3"J*9!Qy_ UQƞUjG:d(,J+'{ba(b}%DIߓʑFݚLtgNtm&bh;
4s	aig}F/\$p	5\=4a:an<ǢW,4R/	T=t29k]8:J⽅VP'7E֌&q)eX4hn[:C& taPK   dO\Q(    .   org/mozilla/javascript/NativeJavaPackage.classYy|~ffBL+$V H0$@!uv6ZZ[z*VU}aadم~>%/=sBhB|h23e>Ҏu[zCߒ1l3ҮEe!"2Vt1VsaU1 W ?Ww
kfZz
MX'(zZ]0%k=Ɍn
i
HZ
'b:=~Q0@}5D34ol^C_IbSpʤn[0Yyl6t
p$M,f3f4U:fEa.sCLU1_	^
)4*s=y5c;vv+詟\͝ŦʦbDuvVHYlIhQ0XYqw*X]_9m09&4g+wubeq勊!y8pgH
:X%H|hӰLhg1wPNZG-m`)A=
tsu)8TxV&/%Ў*VhX9fJ>Hpt)^jt*~!R>щ
qˑͻo%0W5Rѭa-.&5M`"4gR7-jX' !ݛaܧa.!e1y;P VMجR
rC49鮳ԋCC;t[4>LwY|&`Q}96ޤdpU$
FmagWi2a^ZI`fhc4FLo4`0[
dyC# ke!^ؽ*N-kF	[*q5Q
:gW~r̛R'D7hQD*wI>*n;>ȫ 9~wY̭ދ8=FKxhCR}.HM4az7c׵P!)N]VWLN,p5b̫7]DupL=g89n;)	-{ kXwXO`&MADx52[gN;M:#I0ʵsx21KϬɓIAӱ'4r#
rZ߮<J\jY+QȸN[Bz΢aֿ̮; 3_IlS45~c+wqbOI.)ʬVI_Ǩׁ%[y^
V;aۃ@<
r.YyT2]fr$X+<	ٛYǣyjnl[;i)y8W?ő.J-nSgc3I龫e!TJ8e"Yʐi)y!n9?QppGwE!vJ;oRD-mk	땦(h$.Hl͹s1Jgq7R./b+8iC?3  =%=t?cd{(-qD+( SBUov=5]1ZeR*E[	!^"8G~B8qo$k|oE%셚jڋT^<!5:j P1q*4Z?q5aۧ7IHX\|
ϫ3
76IRgxifyr7a7GS)<={ZAOb=ǛFqZ	wXUJ9ylS=sO`B.-j׾Y{Oa(hyBx?)[[Q+˧oCb>QdJ`L	BS|cm?Kff{|%j焟ƼDl"/Ĺ"h*nIg`= kqз/lI"Hm$>{EwNWaT7?.ĚClO)T{6&v Cm$#\![h~,dtV%{$Dtg2^b#~3¥X+ݸBF؋$O32rxV,s6B+5xQ|AIUP1C}j"9~N+gBE2"TV<3]*哏GOkEb[U5ruRMF`]EaF<5	fƓØ#[D"d|YF1r WSwaWXNYd5DG0-u7m܇w
yWèdɘhKlhC.lN? 
7va9,E	[+y̑#m' ^M"Lr-q^&nK7o7nHSWnE|c2џgD#G 8(Ì|_\⫌?M	ԍ1.=/җ "hD$׈_U\p]%Ulg@[TV־0.1NDQ6=
L_	BV^6A $G񾔷L%5w\Vx~$CǤE\}R8FAj+MnkoV>%o$֚HݹKZ
?<5rU+lt :mӡH9H qh`(ȸxw,="#Pûe5(T)HuOxᡢGyM^,ӯ{ш@߿R);qHPK   dO\$`R   R  +   org/mozilla/javascript/IdFunctionCall.class;o>sNv&Ft̜DĲ̂}Ҽ<ĜvF~Nb^RVjr	#WjEjg
H	#6
A4ZR蜟WZ[>L%&$֚B@_%e22\b1I& PK   dO\4  3  7   org/mozilla/javascript/Interpreter$DoThisFunction.classT]o0=ne
>:hal"^**UCIiFFT
 ~ڙ1T#|s `@
i<wc7v3<FB3E4ru߉c^gb ydu&dXw|9ΐgX~ݒζGv]QbK:,WU
GPyXSj]1q
y0D]EٚB8tFPqaw;/nufZ=|KJZ^ۣAG=HDjn)Ơ1wGr_!1Em ךYĝ!.RNisOrHM	dtQ':UDsma,tl3l\l"=g^o/:1l_VL/E?
0ܠM3`_Mj4u"Lpw];]Cq _9ڛW߰@.<a
V+֖bOVM$o]EcJhl!Q4("J
˨K;A*E[$	W	PK   dO\ˉ)Jt
    )   org/mozilla/javascript/NativeBigInt.classY	|='!lB 5@$H 
bJkq${XVĻZ[WjHm=iZk"{ofw'.$&ٝ{<w KXH&mʀGZMVVG1-k6YV(Z`@]5	>I,l~%d)+oʀҦFJ0K
i1y ˘,I`.sȃX\{2_poM
{|c⼖w:Qp)ykڦ5.Z)pzLG#ZDٯҠ_j;5+1ES4҂#;x`!Nq:`ҭªU/PnSu{VHJ$-z`9>SFxqRn_	9Z)B[%T@xԯz`5tڀ=8 ea>8P",f(PW$xaR{ֶ
5[0(qbǥ261vcXYɬmȼ{ wT%O1XɳecCAoo`cp]rhee1dw:$WFj+	ytV{_ mkuP2ڊN|D1uC<Bp
YB(X7Qnܖ
5Bp:^G)#>31[qyJC4󕍍ұAHpvNtPѓ;ºcR<U'#mJZ_02}.r( qn<(	^e\R|F`𖥷|j9&q9]¼'.DSBvD1t(0cg/R>!Rl֖ї$hMjpQ/r_)cJ-KmahȤO~kqeX
2>OQ5H)d'p3 0'n9oU9W>JjO-;	2໥XK*<;wnĄ21q/s2~)"dTV)q_?'I<SA'0=z1ާYU	Pomx!e<¸e-	!aJDP0^۰E,Z2ka<	ÙK8inntNCp$BTzӣ2BTֹB|2=fZ V*ůj#ᛔB&̸p9wd<Kң&!OǮţ
S(MݡenDMKV4^HƏpC6>3/0I"܉6&IxCmNV_0Hy#X퍇԰ְïskJ5u05ݯKXB6ƅWm6*Exg%-}kTtt+2>kQ&T1:w[G-Hl&kg_G-
#;5jzx2l0l%-6H&jQZ.5Ws~xߩDD/-bSLq׼Abe \	gR7+C'ɭQLa\e<E©7*^O,4٥h5>wRl4P;Uc ݧ{P l旦<^B%fWP{#hY@>w鵢1
gb5G Yhd4_OW17:4B6]#8f`_pe*S3d<&Y*1$]aUΩ
Uɩ*GUé2Ĩ-CZ+/%]l[dKd-uq*99JPbO뢮UA5VlgNwScmM#y\l9[d+fg-n=Źzݘ`Hq^2Dը?5dt=.Vr'_JN/\*~VLݹ$ʂ?'9Iww4
Fo~lcxATC\a:ȓ(!bfe=ٜCDQ 0cwaI>U
>gEVW
YJߋ1PHo9eX
0lݛ-g)F*tw&?Ib>%}"=:8K+4:=]qNq4>*tɹ::g9BZ	| Nuco`Vq&U iօ	v<a;
hYHd@i@\1UGlwCF~8=wjII='/-bde6CNXrW9	vhLǕl{m&ۆqSo'K'&OXpRvг>!(Cr#KH׻V9폡^dlF$%i!1-;HNt$X&LQҐ|:9HWlnpcvӺ&zr
;`)7ߝmp]qʋDsyAi
ٵ{ĞzeR|+!\VkUE݃UquJk3)Z 4օ9&UTk-hvϐ}( FOe,TD3lBoᐹ'l':Ikq!f@L!x;*lsecb4;@9"`& F.:7FTn׏ރߠ(t6MZk,ZeKp[6;oCNEw^1XAVQSEJ^CN}9ݕ9!^O
kuebBn,ePCy{BIBXN$c
jq2{ReDoo1 =],u	iZ[1{,+V_zͳg =s;_}7x<3>nWyNnVC>l؏竂jy\P+D-z
j(5Atu
$r'p;V?ȕk^Pi2}6҇x,%r;l3g}FsWLx_(`)~Χ{bzI_KAyQPp+6ݗ5A]]&:$ԅ&(l7A-Cj	j	*eIAmE

)(,KA*&&,ѻ$n4A6A0AMPGB\Q5^AԨJ-"ZX{MN<&l{X7]sMF5:
$0I$酉Ї-FV
㷣4a;؎$#HbŶÞ1QlMM6gl*+O1;MP3蓠llAUT-5"y2VVPK   dO\D  	  2   org/mozilla/javascript/Interpreter$DoSetElem.classUKsEzXq/a Ll""?lC׋alWU
\"(_+P8Pŕ \E1;u7ݿ= De}0M5{]R]1^dySutJ953l`7,ûJg!ΑHB0XPMsQ7uڇ'V8kFvnyy|L)[\3VqtS]n5^T|v8	3x	eܨC84Yzfb
Q;	Gs8dC53$9mG6t+](9x%]mkȠս)Sd<x-4q[4H0piZwnj{Ѯ菹
u:a.Jxβdػf6,Ck5yH?i-Y|L+fnj|RHvE]ޣ#Rd&'J%\rl3(,=3j?cx!u0W2CϿGEbM6IcXZS]TNA,Kwb>WS5^2T"KJ~K
#%HF_Q.C"0KL~%v| ؞*8>
O%*'Ft]%5#mSb
f`1:K(	Z
JLI(||{ro\L*@. (
9M"ExBi1-ǘ`EBbKƮ|)|ܦ]|.搧M<98^y%S70A6n_L3]!sBXEUmHK`p&~Ǜ9J<P#'N!ɑduϧf?Yr$)$W	r?ErIrd2wH^E/PK   dO\5    0   org/mozilla/javascript/NativeConsole$Level.classTkSa=/ZLIKBv21!h@i>:n,|S?)q&?m+˦8}y.~XbHV+6jiZ;]VlLcjT= /|jPd+]\~a^\yƙK2dxN\|̉+2"BSV+U\q
#R/k$QI
2nꦡm"Yʴte@mڔ;nɘu;htCOѻj5r⌺+NQ-heV?&#fh*Hr+Yc~ļ>D3t"9FO`2B%Pjm+:14Hd6Xt|=Vs窽oP,ʱUgk2kԝHleտU]nhY\Nj4;<C"a8|^Q0HpJ_n?^ aA(?R]IH4!}O=-MR$%9	Ox%daīұ[-	1$B8\4ﱐ0;#e#>ܵ&5|}RY$_qlhD1sH"HzEA'!J"`ÇE,SG-e֒<PY<sXe͡PK   dO\  B  9   org/mozilla/javascript/AbstractEcmaObjectOperations.class\	|$}-=hY@O@nZ(GBЖ"Սڤ&)nnstݜM
֢6]N7͉s;(<4mTh7xǟ@
)[==3[=5M!Bb*%Xrá©!a?23S
6u˳Uߒw ?!o,QDoζMVfH%1!˅hK~%HG125'l	!yN85LDBΠgj;|!oc0:@YA̅aޗ1Y
!0w$AsOa:r	6q*B&EC[9,Ng{gDhc9۫,ԲbXHмAk`P	'*;|5Yq![iJ5,2-zU<jǼ1;e*5_*8Y#ZA]JBZ[@p!a=:ZV4#'JϷZC5jxZsoM`C;u:񾐾#T!ҷLZZuꅼB7mt.^E6PD=M!wSǸ8"`Neu{emeUwGEmM=_<j>I%>"N=!O/UbqE7>
rc&1=%]Laj]fArB{y܉-تaZLVGP{Z;lx`O>
~^jMQ\ע7!v^hk՘(߮22v0"L
Iێ+4|y6^t+G^8Й
$>%0qToYW
Qqkp-!;u>l߉`SF,_+g5|N\iy;n`[fx-3|op3>jٮYgoƎHu"U21d\!H^Ǭۅ;TEtgw\Ժ5JwaY
*%!/%WMYX
*PX95|b\	5T1>% ޫa/cc,uȒF#%y@ÃǱK>F`7iŕÂ7ʼRQ¢^c rVwxx\0	EgÞt|GIsD00˟_rmBHύaڧ5<g9?Q=qGj8	sF]w`v$a"t*]ް][VYS!oL#c~'~&N+G<BciȔd%Q񒊗5`Vy'K;3(&>:fP~E'd,
'a"xЌͦ*-!U^6y'qXDXUHʐ(1o1I|=~FʻMcD\Ӈ26NM
_Eja˜ܸ39@I"TC?EB+^v[<jFWxB;‬fCڮWwm	eKOevO[gy|;e
Rt!HBǕY<Id6f2rˣeoLsw5r}f]Ym+9cvWTV˙a0(Jb	=&tVc-13݁EhR5Jt²-Y'֬qo ΗՁhiXri4Vp'΁4^	4	9]{\P6[ɂTgYMUt!7Ç9i
,*M=j;i*jG\5Ki
-{,Ԩf-&Q4:f]ΓF<JB
-z$#6O{{+IQ)Wgc}I"-E*kTB28/hqWnfIp	O(U_R)n=J%LB~OsJe\
5NZAn*h%'sVc5.PB1^ЛM^Cz0jQiFk6,XyDBt&Ʒ"zQVRY%.lX}SyQ!׋@IEԴ\G%:c iv(So cyh4*9ɡ;K*.LhH'ߧg63Ǘ/ligDd-m+k7RoSmӨUu/Vy%(.( y/BuyϯCNeEf/
1kY'4ӕl!Fߊ>ѧEȩ"GUFkp?Oa9zZpMU1R APL
}^$%bV ZJrȪӶSlS6AwݜJ_69Q޳]C:Iee. >ErsݿM]7GYdc:L:aH
#_V	װW~!rUo#\1,]FD$pfY~Co~vM[mz{Gps\GÁ }KG4z˾hNjg+0ꡃ*=E. W͑4.	u̱(-376x^lNZC[|hHNصiܭ<+i^#AiA6β8ӲGEELeMgV6m*8LD*}g
xĴDWtFYX8i,=Z
ߑ<vYl&vɫup˜O<S軍m7{:ZC}6ӪI&aYn*5qK,{2 7
?4*@qNsBc!^=l&,̓ lHBz]t:6$
hPXЉr5(b(?li2'm9Kz@

cJtD _ hHЂ"Ccf;YBp(8}0#?C(RfS@*\ۢZל=iOaΥ	
Fk&A$5AdK.`imكs<4;QwmA8V!	/FDC!GujSG  vvzmrx^0prSiug,>*}<6CV:GI
&L7W1\lE>:Kې8ӾZm7SClƜJNP&:qT)iJzSyJLՔit._{Oy}aFgGGLmO?n2[5A[G~AFhlU+]VYU;y/l0yh*335;7Ǥ&LUe.;r
`ldR+Am~O߶@@gH񚱁ay,|PVFu"Ʌ1 ,WWe}AJL<^a?5	z"T/`1LE	Q*Qk9z
2zG
3d'c
=K?zSw0VE6 ɲ{v1	Wuc^'l}En,*lVk7011eX GXu%nr%rYm.ۓ,5#n,v2|Uk$Xw/2ŝ%?*ViY1QBT0s2C*L(bεXzx[р.
؀x6\"y	w̦G|VG?Sf]0&]Q2f6oTOcTH'X+@**N3j|/^UHo-֞D;^
Sg!cayzβ<CRlSLָ<6qXh
9abzp zPt
xwﾍrKs7˶;%\;q~|
x)BG.H3lȱȱ<ёktďs#
J9	~iZ&= ΢|p?Bz@`zpˡ?{%ܛ<>D5|e=;zqV]øs&(39d1/g,`
~b~s(_=)WWX,_`{*NP)iFb>H1e #t$#w"e;{aAQ=>\q{فsWט7P7%99K)t92-JrwԬ|B=Ia=dvYIѫ(߃P4ޠhh [&E?faN2E1E3%AQ(IQ"Q ΋AIςoR\~t9Ld3ɥ$VSj]]]n:NIJcҕ1]kᷥKPi8=f)45
6iM$I7LlMJgl"o@
N"a9;!wxv|]__۶moxagNl/pIXsi7b#F"r Ily/T>8d@='	Ѿ_pTWAJ8ٕpEC]X*bׅ4>$>AS6<F9\Ghj'2]ɇij7M?@`?@3.Օ8ӒWkAZ`}3isr^NH+Nt9]"b:4r(DزJ]A4N:0h.iflZ*fU+ӋQOKR\FKqZr!7
징U.]^
jfj5TѴ2XOS4_dŷCQ_d))wz)~Fq4f@/|a㑩p<AmvY9zP8	ճɑP?k|9@J'1&2&Ʈ$-mi{")xB9>aQwXNc*Vʸ(:H>fSpZaF
yGhE'8Ҋn*Ί'竖{z7{lΧ\Jl^$j;'Ah~6[`{ֳ2o(Vccl\1Pcs1vg}煖j1H IYڸKȋ<^E@HbBQ>Iq5ʹMWH-kggY뛍l9'rԮꊸ.EQ,qu)VG	|HΗ+6%oو[=8s1=`R
VdM2a&p.l ͪѓY"Րj519HfA}SFSXg額+&?IaE]'/pfL|;Ҍ2 TM
q2) ;25nhHΉVsx0Ϟ+UTuNMM-]"ѓi*gvH|uanP|ow|f馏wbĨ %b#I?z^1)Uyai/7L4Kkg;E|4{	z0^TI*M7M7E#4Wn+]|y O;蛘HYZt
0.#X%y-ߋog~cC{q
9L.6=(FOqucIvћx}Ӊe_HbzJ#.4l<:NNKXcd4L秺i."=t ۤHyKʀ;10uvӗV]<;{8EXJ
Te4JRt*cR218IH{$pT*I(`qY*&zO\Z(ٗqCVHzQz`_~=Tl-<N*\H,OARHEJ>&)XʬB&}3R®T&yj2LQɜx8E7$i68?}jrٕ^|tlnzu/oѸ2`eOeI2Nd3KbNXfs;R,OU
e1N(31vS2QPK   dO\uc     *   org/mozilla/javascript/Constructable.class;o>sNv&Ft̜DĲ̂}⒢ĤTvF~Nb^RVjr	#g2L#CnJR+Jq)=>Xk+8(9-3'Az =l +$8 PK   dO\9spޜ   J  '   org/mozilla/javascript/NativeMath.class{`TU9MK2L&!!ZC @0Rj 	`!`d	Db,(*
lu-}euW׾M]w-H}o^H?}0w߽s{g=ݤ1[V57Dcp3­-Dp"zFdN8GLbr6E%A^1VFOo'Ck^'?cq%?0(2QƐ
%$d	HS>PHm-@0WLCWigPʇȊhSJ6GZ뙆]bᦕeuhqJ)a\M"k[P!bLeCT%E7ub lSh,mTlqޑGp}v1
0&	\*F8B<cDVǀxr<^lyK"@'	Tjm>R4fR1CxY@EWƑx͊-񶦆 eh"/X3+D4X9m.Ke0_@h4
d##paJo%zcx]r$|'PPs|m !
ZM
 勊ulW3!5	x6z/й 7	F@h+'PxhU0N>@_t9VMg|wQĨݴàx}F8dZR<I_-v\]jᚬNPvnk҇ëCAy3ʧ&}=#:~
ǡnT3᡽СG.ݯnE=t/Z}iypӃ=Dd*no\͎`/nႚ3.TKD2~}]+kcI!~CO)gHښƈd׹m#COjЩBo
zǠk[ߙSz
z^
cm:rHAC5TWםO4h&J0h4O&OǦvd,6T7/ZӴBl!#>O"-yBR")Y	D˿71dfSdp=00hN4CN.1۠_4IAPrCr*N6%F^<,*'Y`$aA䈌y&l:y4l4hY1h(s>'Xv]
D2M\dp1Č"um˛-"jjf98!cqnff[ ףVkR0N5X{S+6rR!.
2@H}TYH&ghL3x0&t-^ip
ςWc7Ɠ$:ZZ눠×tbV7x!3ºY5='Toŉ0K
tAqtA-fi}k=Er!,#n08C]FYdUG	~(Vt9bA皥AĭpsgZɝvDΈN6ܸ!!	il͉$V@x=opS4p)4Fth7늬iZY=KINUhvA<¤|<87cb&[V#SbVoa
i/v7_bq`KTYPhWzj_	
'Z"δnJ%dt]Gq;5
gAxvų)-ruu!cU-+qp>,|a2kE
b2"m||-߈dkd0{fEVt=f*#} pSbȵ,ʟ)ϼ@Sp-[L'7&gI~2ɬ	%j`Ea#RG[}H֎eKpҤH|шGkLKW	7[9fp1Y-je&.6n1,ka9xK	b#1v]gI7#Պ&iܱխ##F_k"Zz}T)3xX-ci6-ֶXlMǯps<5:=	a
V^jCbD-tعb"&c.n81kC(1뵊|	1=*B!3P9Xxz٤V?ot'bAx.S!&ѿBX*W}m-~E)A8viHmXc9Jȍ<T"@%2JG(Q@~B(Q@J+P@E)Q8dT(P@d|-"ӗh@!
49D#ih-(F#+BL$8d'hP$d'U4ZiMG"LjH4[ZM$+<%/&-96Ni'iC;Y;%eΌ6Mg"ނ%R*."@)ց.^	uq1"	
+¨ijH~bn
M^6rd&߇o=!oa6^ac<,K?/k"^|?sKCGi}Y~PAO MP0<	 F&A9$06	u>H%8<&'A$
0=	f $,$0/	,H:`IIꜜ K, 2	V!1	 `
@k$$X`YI=	8/	 	.Ql(	.KtEm7g8pMD?	
 ҉Ntg~։~:=AFwk=w'Kc{!ſ/@h{7-^Q_:Q%n:P2*7h3At
z!4Ы4`pΡ2.^1F*Y)N@cx
i,_Dq|7GG<G
b4j-hhiZ%Mf,fkkVk^p,f./#|(4=Z;A4h/eJe,aw/撕ˁ?QH\juzUĞlu\2gIAt:2E=@qn:!gC<g;'4ĖXJ@勈3P(i_?sHxI?@ݨҡ[,Fu_^u츖L|W*{׏P5GƐe(lh[ѶʣmG***I;@%
1
IUwC:seQAoa콛Q|@RcPS!~Cl
+PCb/=lx	
\s˖?(
S~\G<}7}eoy}#ڈφJ炏e	{ۅ4D[Ӻ9uslͱYrm_}W)kU*A[JV%TcWcd$ƞPaC
ҧ8a i;*`4v!7M:Ŕy)lS٦̳Mx#hc.ZijEymX)Lu}ލgo؛(nVɳɳɳɳ	؞oQfuRc?_ƮNW {e;IYV`Y\ߎu帼W2k
O+H۽WM(hX46y9.ULi9.UNq!|ƅAa\;jWP&އyu@j.ۇP5=J1Ӊ-_cyőѳtm^DDׂna_.Q..v=jl+\,~@/VC%dӛYYYiivpl;t
M?(Rd]d]d]d띟b5Sž4nH|?UζǾb2{ =-PIf;?Fj	6`WfWfWfWf7QnHOSYxSϏS{;
_Q}M-
Q䋷ڶvuV55RsXI$?zc+Hb@X_~=bqp&BlO7{A0z߃yab/֑q;$:qw?4}Tit2g
EEgrڹ7m\J"tv~am6%?̠!4
J^I<0DFnF?r3Th\xO/o@颡{ȑ!)@zua>;;#aY ǜ[Up4k,z_}r>qa
||.W^CAzr`kGJ+,`VBrqe`*!HQC*.Ei)(WPWDm]UvNwLzkE#gw楊58TΕ+%1WZsPP.s:_ӡ埬ٓVG~g\CD]jQٚCB"?֑r@ǵbƱ]T.	WTCE_ʧ۫Y9k
VmbKϚ+ea\o1X!՞E\E ^B|2çq~-iNVQjFx6rfx5t5:79(6{fng6kfh?(9@;̸(s/fܗ9DGz_8_N)^rUYx)A|:JRSy<RIeeRaBʐb0闁'нL\>ܸ̟ps)ěo|=*C"}yڗ|⥹5ZX,{XWo׶#wކyL,1l̲3i1
>Zk3о)d$1ҡW
wq<#^}F&6%#אQC'{8\J&9x{'doߛez=y}#%5&
rZM|- ?_O|7d	Hn4N?쵷r̯	p_n;v`vˁ3 67Qr0NV2]ߐkrdT;ҍB~gc4g#۹ju
@aaaa~ڏI%{yW6[䱰#ޚ4u>Q+dƏ+M}O|Lmaי?	M%<}Tڊ^a1G5v{5CNGn_͔e^ [A2le?rJf)٪oKIv>/v<
ZpwI`XGo Ē{ۈ7i>I"RvKV6662r Ě8wGރKz4=> F|#އђ4B<Jp$P+%)ۗ.y`y8-
,G<N	Ev".muea|ǐk4wtz:;ǹ:JOGr<	^q
0:9qn7&^2D5[fݼYNf%!yͱMx63y}&PN9,%"' VܧXSCҿh W4NAmziŚk.VҭiifZ:eۚ/ Zirx֛Gh<FZ>V$#p@DإYv 'WXEɊUXE^mX7]EmKٔѧZwb"
j0DS6T|uF8@ǈdU<+R_im;s[ĥK'^֦U>NqtA|r\[}MNL7_2`j^Fn-DR
AZj4ZE4ECӵJ{VLˡmOmOmOI# ꎌč	Խ]2#:xeoɵ	0i"ej(GL**֦mf7+-y{ӻ(еjs1u?hCUǗot3$ܣM݌}*>
c/=8vs7cc9c_d├M~YbNՊ*Ŷ*Ŷ*Ŷ*Ŷ*}9D;bd[j	}N(0=޻>g=x'[~5x]? >w34G4x,-
ߺ CO"Y
lҝⳃJ_ycRף4w 
kh/~hP
	xyat/Ec *Fם\}#ow^r48o9<_\)p>
@Ld?'݌Ok8>ogصKP/׎	?E?=ީhP`@|1aJos1X.ѫnBDOy6H_4'/~P	Cr	/{/I\
$$l
Ho .$O
/a?p\(Xr&1	~~F	^,	=t8g~
#PX	|9Pg9O$|P`wso	Αp?PDm>C\
L0
fHpI(Wgk% 
\,(%@!`P	E@.we?Hh1M!~&qGߗGY!w~D|:#F7{߃{I}蟆iaw]v
d֝i ۲2	
 ~WJpUzF}kE{[{I{Bۧʻ]JRmS坣kUP-WlyTyTy#TyŪUWKWyN}R}@^ݡʻVw*|Ug[ʛʛ˓ly>E""""󌼶yP3U+Ty+Uy*Ty%b-*/]G<<<hRYEaE{*&UU-j-o*QLWʛʫ)myTyTy~Us}s}"/&T乞WSQݪ)o6UyEy֖K?.\*9^*9UsTϩvy'֖S?N*9Ķ<*9UsT7*9TsPϡyؖC?*9-O?*9TsǶ<ttttg<]?]?]?]?]?}mSOWOWOWOWO/װmy***i*i*ioIyyYߖV)/TTTTcy{?)UcX?VU/ly**qoSUcX?VWH?RT#H?]]-O?RT#H?Z,ÖG*y_}]?ox>3:gwH{7:ȣݼOFO?iҼAFE/jo"Vl̂w%XOj+BOA/RЗ)t V g
򤠴z`
Ꝃ~) )$RPy
MART)hV
槠:*"X;M[-PK   dO\j˫5    +   org/mozilla/javascript/NativeJavaList.classWy\~]Xˑ#F56QBݸv'dȲCZm5&jj[aڻV73.?3|{<o?UA\2
ґ!aY4SPպ^u~M5.wjACBj=@Cb.Fz,
u`Vd[+ȒQ
E11iaR5bqaGHUF\ӠC׉2$,J4u%<X @@2HA1JpMeyP2J2	z5hDcķ5о) "emȦ#,Qz4=kWޥw{ GcceV+KŏԥtaglpOw$RCA2#CanpqJfrNAZQ'![k}Zİ욿L/!s
L ZR*'d6A#GzQ;@
ڢZUq
`}'%ﳤ%cBT&NUM4Doэ]*Ꮔ]̩JY[ǲT韗l`V&5:9ۗKY؀dlD%
uGçiLBǹmMvi] )YЩ
Z)poԙiNEY|gتL%!??bh=ZLS
h$
s(G)@SiҖ]ԜOYL!v.Oaa=PɖcSkHGQ8_ALa.R`ʅs+)S
va0uRlfn#fꑸFw.yC2.Va\2kѰFF̢o&	/\B"c
t7TBUpuإB^c"֬Aaq#O'ϫ$Q'8Hꛚoo%\bec3SS,^\p;܉OKX:6
D4m}ݢ:!n^sf=b8A jC:a\299hY_g*ln5$im+d>3U56jڣDfv;#{;`JA3'Q	+4TI
F1rFJT%LLb넂Ŵd`9O"u.f;u29lo4/xVsa3!-Ǵ3gw17;VU]
wi8ms6Ha%*=Ŋ]wDw=
Kgz6ލ
X,t

Rh-:[
*ŧǃQ1= Ѓְ-rLpFߴD%uX2~.7BIPDKiSEVAHb1zNb$TnMpd3!b^:0[fSBZJҔhw/";>=(.?[#(.A!sP#!:g3Ht16
f 5f`ؾs{:^7L'^geiq#Al#-fXܝgݧps<%Ѝ2	-
/+.|"yC8׼~oOQkj @o3ه'1?9(q׻}%TN҅ \dEzdԢss/'ZM|Kp>}ߡ)K4syhZi"22e@ƃ2~e	?Om_j/D
2̥SM.}TK=z'Ea"2r됅BjJ\br%YiRn<[]tRj[;S[aړ;Ԗ?]/z[V.	`lm|T@[gh(ScuXdk^mt^O(>ӯ3Y9I~8Z
+`_"¶	&!a[LgdBk[2Gs隋MͿ5Ƃ+lD}PLT'Гzws(Eo-35F`$)g ;wHa"$x58;h"&%nڱyÂI6"-f5a!"'P. t&`A>_X2!BU4\.r5`hzw;%	|$
[`}(5Q&Y%ROX/W-:\~
aEaxLބHa׶cPU.|.Q?|MVUdbXv~3ǴgIr*wXXUdI4q71=(޽Oݟ#_<K6̬pۋ
'3ocռ#:4:7Nup#b1b[2㻫qrwrebw!s;
ăx>$cCOKsb5sg\x|B̤]n{_bc^<k#=?MՍ?t6_Wz*ۮ՛<p#\m?B+DHkhljd:zj5Y95eeX&_2K?0n(J i2DLZ{yxV~q_u;F9H{%2rd!4٦wTZȄ-L.pO$a¤n5?đQoU)!2eJ0+-1<=S̳I?D:|ԛ9{A5Sn(tÅ7om3^9`dxHPK   dO\N  .;  *   org/mozilla/javascript/NativeReflect.classZ	xT~30!ȰE
 %h H0
0$g&lRRmVnQCPAujVkKk[ 9wL <d,η3> &9z'ǵEcиsBBp"ږ7/,,E)?.nx)hjY:Qu/4GRx*ZԔu@~"U{0Fd(@/>z@K!TC8H(bpbq3IDC:LX
hkdF{4H"V'<שqPkT"\U{Dna /oMTPB|e
:FX$epQT7KQW[1'CfQ㈴"	Tf4Y&iMFr >|_zjd-橖ɂ>m*j,={
T+jZZ
a:fx1,TJږe,_ҰpA9KN#ޭ3s|8oi|Z6]F̩JP'8{+]Uk<GH(ˇA--Ԋxؖh2I{JIxq Cz?cp@c1l_שHs$VK+}1!/HdjA{k*Bo/PJN$kk9`P.\n	i*%'"]jL*=T{q`a)iUMOD[*+Xxm%'"eCYlfYbDh6g
Z.R1VMyL<C汭xz[Kqp!w_}sW
ab\"w23{zt*MT]f`IiOݡuP~HN-tь[-/6p
rӗqx(Rb3< 1'4	(+$/>$X+*!Q
1]HÎNO4Fl20ӣT@{P1̓ӕ&8>h/njF(VfG]מJ9Mkޖ(~l`{Tw/57ݧEMN'"+艾\C\e%NFL.
U]G(^	\([[0GvU~@`LXF/>dy2S3MSJP	{)lя?7dZ3X$D
YRMR^KT3c$Lhݤ#ӯ_sl*n+Cr?MK/תÔg`T89tdX+ķ1A#ަ`6/Ƀǘg]Fy̮?},Jލ
env3ꪗp|y՜5G߲[EJ0!ISKkWtS*![	?=tmNG
t9*uFh|*Mz=ZVj	D]ǲ/I9:C\7+qR^uWjK]b(jOEc'ud/~^BAd*H͌[yK"ˌKWsCm!Eҗ;Wh3bρxq/7$G(pcd+3W$L`CPD$T%E[3ReCFWp){1
\躈VIj.3\hQ{ceWrLrӆTA"m(឵9ABN0DH0Y=.kdɒ]RiH
rd$$Xp+CA2ѽd!3d&e#ˣ	ݪ-Ն̖9z[;UraoX(XCrԚmO)G~L{< *O<2_Np4 w2ݒVQT`B95gr療J<jdB9 '_39%W>Y-LPP5̜6Iٟ/Se5	k>itlX_VH+Rxֵ|uU|eĺ4ՅZ5̳]mK[lvRXuJ+mbD4$'rn{(9[ej55{S6ջ֐u͸O(C.|xُk_hE
$7z}_bȥjmn
ԡ&}Ӑ$#Ag8TU|K|\#瑫ŗ|[0vEC̥@pM'Cj[YGJbJ"Ɍ~i^x<PeʣF91PwײFdB[	ա]z=M_\"cApHp!95lH_f!Ќ遺x|=t#Tr8fƒkB1e1SoQ!dFT(5Ez}WjE4iڦKս;bHIiQE,z~p6o3p'
Twf:Wwai][dݺU7c޵,llt4]a!~U麗Wͺha-V]QU:[TiXqD)Sf$Fa]vW:u-N_RFiy)4pyN<ҁKD3qx/cGvFpMuc8jC=̎jrj>>#O63'#oyYN nQm`\CϊzGܦ漧(~GyTԿ_Q<oiSE}fD=sEg Ur*e`<~:ߑ2eM*i
^X*aC=b	6"ɑu'&*s=mbz*)"HBG
W;2`^w#<x衴;s0PQCSp`|Wn:nRl"}1l*
{^~h*;@~EyzW@cHʞab8{FfcI|%C(宇Q!Ʋg|8=gHLH!*1 _5890ӁSms+qWN>Q( `b
E-[	Cڸq,M܎Ѹ<K_Xr+L6|J=Jۇel%?f/z9¡WSBw̿_+M1эsI(LXzrEz30{S'٦:S*n5?xضb6
مE
\3+vwbQC'<VЉH5	D7/#:w++7<wi65tܹnvބ~uհDTU]eA[A7{/D|NN|5e6bkp&NEuHac4swv6Z(w͡[!'r4}Et@
&)]v]~ʴL9|;-gFJv6)a'nranGIT.)i\J^;#ޠ	ܲqK~X٪ANluhU=Tf]!TХ'	zƌ
J_4*8zH;`e^0OmA6[ vzEQ˩eu~wn\ı	$饫kpZރI\R
qrG8޸^
2[	n
|O&2
jZGSem}~<L D'ק!ck|KҶ7SyH:hk`{N"{A_٩WSwq~^4c>c?j>cVYbx=R.މGk;XeO75(5nzxRZ]^zpSp~BEEEoE)~IY`N*|P-xߥs66/[j9|rJQ'.8U))TZ	JEpRJȻ(^njt轗0n>'c C2.#ډjqtϫxS2?@G'rxY9FfO0ױ66dkc`1<e#^d}e@`xa]toǟ o;
Rt 3ĿrskcfWh_N~:m
4M[Z$h?yk޸;K`-* sJoϧ>tt&#sڒiMCށ0IK"/fLlIauӟ%ڣĵޡޥޣǿϲ&ȿQ27 퓭7rhɥђK%FK.mr
(7aFAQDj!EՁ]Չ_/.ͺ
)bʰ2,<iSɑy8<QyV1c0,#iQD%4G6i	+5ɳq⠷AoyNJD08jo:1*ݙg0ӻ> Ϥ?*b|$I;dP0ﱠW'9'yaBWPY)$8p*H|¤//VcA~,e""FA3)j٘=]U*A92,ӥ: H/
%Rr}E]XZߑEneU@/?-.O7U\kjZ]ZUyxxF9yo4w擟sv?b_ƿ_y^$tCWˋ~npE$er;$|
O7ud4>&;~uнOadUV{."LP`sEYQeJG.s;=T<('iz˔;TUZxNg̲s&t\Ġ~AtOY[qЃRG4ne-uEHϴ28iFi1Q&J&cz٦<8OfRf;H
J-vʩxVjNR?X&Z0mxXY_/u|ce=ZXjy&t3(L5qUb}@2KucVfSqX-Ys:P[ZסusbAK:d+KSYvFsgUt[nJ2NzU
	W[xetSBtE;SogLz3X-\if(Z3e%B<$β
\\%KxvYsW9V,MuZ4i~Ikj=KJS<#9&7r)*Ǘ}p2SO07zRgf-sNx˲-Y{3YIu9Syu.%׋(b.rD
&Wi99ϯhjg=Cw_^``_^_8isL-9s
:J+.zߐ|
;o_fȵ|L02W]MzϷ'ݿYX@񹣽T?kAvHbtN݊"@@S7I]_+=.+^R5#-B5tqy\B5xJyXM_GR]irdXM]IO1u]4Ҙu*q_
~^bϹ<A'+{{V/k9s74!2MMbC\WI\yNnK9kǻՎwoo|α}͎7ߎ7ӎ7ю7Z߭Zxxv<91z6xކeslȎ];[gk-5f8I_[xevvB;ӆ'}}d
Ov-&};m]i;ߎf;mҎWa+<6<|3x
o
Oa/Wf;vxI;r;􅾅wooo/Oo{D]T$yv_/k~2}(Rz03'*[
n07yKfQʢ͢E-0wQI/N9iۉ]q (sAGoGGPK   dO\h  0  8   org/mozilla/javascript/Interpreter$ThrowableResult.classRMK@}[Ӥ]xh 
EAq[WM&eU_y?%F+Ͱ03/O "!4lH].m~
?P]%]ODܓ
@1+,2:p=c@ZE)E_0}xG0lq)c=!<CVE
uSK^ͶhZ?5*
]Ci
uZ\6
LuӘq6=z%#wH0dDX;cXۃ;CjǱ~Yn[#J-㓣D;JP0B`F(ass#XuNu#IxRf4,{Y{v/aS@
K12Ӊf,bHy,Z,b.PK   dO\F_y    7   org/mozilla/javascript/Interpreter$DoArrayLiteral.classUnG=Y@ZtCBm:
l_`6Z&ԗT>*@ꏪ*< oѪw-͝=ιg}ߟm
m}_lzَ3X]*"b:4t0L5úR5_8`떴=7 `]][2WHSZ玳M
$68p)KHpLqtռ,
:
350)M)KU*:zq*\eHQ)o5ӭmAZDëҠOǇ2+\rڦp8yBR8ᬎsJNY	Ru*:lEmIT5VMƈQ1)1?H&td:˫皥R
_sD.i\dxRݕ:ؚ}ߧ j6cHmkp
&[(yuڑ<].ʧ`X\
pYYᾭֻ#M'0BSA³ꪶoZcrml	
˙MuFcNw"&-FOQLW>DP5
dY}<;HYE^=D٫X"g	nnQH
%gM~ؖՎ:&ǮK
;gȺ166C_k?}_)2dS?_gi\o pfqe4wpHe,KECo	>zc0vp`^:)pol`Q DGt`qxC?aW_hҼ֠f	c.^Sbj6/)-"U L)}'ؿ֐0D_"!oDԗX1ILv2ٛdo!?PK   dO\s;ф    &   org/mozilla/javascript/Delegator.classXW\y̅ID@A@BJ$`Cp3tN15ZӇ}h&MmL[5RoZGײ]3w.3YYY,8o9} `ޏ
AO)==;>}Hd:iwtNV
aD4D	eSTJ塹D6`1RƬnf4*3}L`ۨl1Tj5zYN鹜"+9FL`]Iouب

4~HYcf8Ι|BH?kMQؽADlhЂV״#-Z¸b-v]Lf2
alհ
7!$Q0Es.9y_R`>m&獽!6;7^nA@DjJkPXiV֞(
[Cnh_sV1}^7	3LJh
S~HGU\硏&kt&Ub'd"&;<Qɧb[C?7X)YfC jC휞cvP{u~^XE( F)<%eOrc>.
Gg(h/C$Z&z%Q 1bu|Y.f̌`]4! ۏc2%(C249Xs^+t\C
;q.,
Y$%mEEjת+e9˧\`'a	I٣z>eNꩼܰqڀh7ʔ
k[<,t8kN詔YOx#UkT~-ާMsE]C6©TTY
Tcf
nl.T¨
?/Hx;=4/fnDL0/dOC։"6TԳI~Ws.Iq"3TU<R0B8--*5%Ǎ%ZlkTVLLgVaBd#sInVO6Ҫ2GlZ7Y2(<l(v%gZbpi y&г|wI<Mhd"&}I֞[y()}sv2
]wZn9zH2D\ë~N#7ћfY	PHFwЩ%!a
MO)2jn-*.v]%5`3/G=wwOoU~__e2L^j.v0!yCs&Pٻ< dKR1(>E$Bl_A@)3D`A4F^AcJbYv6
?w
_ݥp'뀚c=W*v;%~48B?JH:%CB[Vo)|iѓ_NVħqe[-<1Ǜ%1K{PX;(Jf7ɇBr"N;k=65{(G/GdEC&v̯Rg#.giYG056x-__aHq),$a) \ZW/PX/Rx*{H_$!?YClY@QKT4,5y#n-FVu&*5^yjt$f
0tK-kY<+[_tHQdFآ5X-LGs+X	y/]K]K~GŃoT5?Ei\)%=)͖S;tAQ;cJnldO(J]F]%@Ϋ>	pHcvp;WeѓG$6%PvOR
'*]R*]OP
s1UXRpTûjIǰ,3?]wW(0C^EMW2Wl)Z=/ߋ7t!$6 *Q' 6M4#.Zq،>EFp/
+KmD7;!;!;!WAgW̍mèX	APK   dO\)isb  u  (   org/mozilla/javascript/Undefined$1.classKwTRn
-!M`;mLH)y)qb b"Ii9
6|>@aQ ,P^)*'>4ό^-<")Y gCd^icw_9y)_fȴ͆H7FY(8!q+X醡8ɩz-mO\'ÕCn-7M!& bl~T;hO{ù`յusoP>2[YJ5q!Z5p2vvo02zu':!ꄂIL1(鸪YVU).oY]j"/Z
NT}[ރܚUWj|onSrL~՞jUT^~|g-t18Idؤw8|AcJ:tv/ZmɤbzFYFjy ɆfhiX?2n |}q߶\}"I:3#ym*OH.:vҪnn
'lMȴpx6˂,iԶּM;m\a#Fl8+Γ۩ֿYW[Y۶i>Ԩe跌ti=Ij߶UJ#YM̐Zm<ʡRp۲Y7,b]s]p渫C5Qʦ"}>?*ЬD#;~IEMۘ_3U\a|kK=Ά\|ih_ ]csߗϮm\;xWS>x]x71ݢ=ނKHDhBD@K%B;=i]hGޣz*`Ea cAḣHcu>`?1-G,B|EpWG\[5uSA.bx2!ތE|/Sz_N|+$/c>\!77/p)s,HCw!8W.+u\ r%P;4/8A6i-?4&b!%C%Uø^SgE8Rc?xI&!)3Ws%O1FƎz@WW4f:+PK   dO\	u    4   org/mozilla/javascript/Interpreter$DoPopResult.classTmOA~^{t9Ry-U)KBçj1?e#
A
Żdgvwvgfg? <6b:4q$=>َcOf`vW~4.5@=Kڞ[w `Hlۮ-_0r$F
`(n:ΎovC<ahO=)l
K֔ƑbЂFa9j$1Iw
԰4%^5}Ә|0w>sBR#PI{u__@huٮu?0ێP؞e:oŢ&ٔսtVO5uemjk0Ȝ.3dcN6͂Pg!xرe.Y#*}]/:#1M~D:R2T:or"EjZЬL}	4m4nDX£c<8|t8TΑ.N'vhVސЎI<@[P^|C#Pn4`QEY,UQ
qRZ	S(UՈAVԈh%FA+U
QƩKT>U)u<#d
7PK   dO\C    +   org/mozilla/javascript/Hashtable$Iter.classT[OAl@) *A0jRB"oC;fwkg01&zf\"4vfgr?_xiPв̫=QptSwVa4hh0dٻN7N+nf;%J\>dH%"FVM>oD*Z4!^_CD:Q?N:Uti8&/*#)hEZpEmG(egWVj{*1ફJ(]=([fRb*Hs"
5&ȗeHhU;ެէ-km]!;c#H>r|WJG./oP-q'Uh\ۍR5]Uy {ӋzXU.i.OL0pN8Qm4lpr`T F	֡ۤxOVhŢ=ux)?r 	A,K ̒uaI#4	({@ |Os֔FGKAAL)tiYe'	Qv)5Ckx4S}ϸ+s:B(D~dfI5k 
=K2c){
+M0~+kǗ"?C'[B?{A*1V<"]5(<5w-ωѴ(kV"
_S	Cx蝚#o|L_\91K,asn
)zPK   dO\    1   org/mozilla/javascript/Interpreter$DoGetVar.classTmOA~JDED-R)%R4i0BbXqGOL|1?Q; h8Kvfvg晝_p:RHPdevy帮U޶]Qnxu"k!CvQcH&64@S8crݥڞ&~y۪>oD!
~пٔveǭmnH/oJrR.ࢊK04GE!="8kS	/ذoox|ri'm%GxPIJIrwQePyy/}ʒDd&$f+eNEN,3 s+ԬkqzܺKDٴLmCB,Fx=4FNO>'b>Y57f14)䗢f($2o`c1F+#7q;Dk}L|dӯ	CZ/WH䬔gV٧#ayF(`~"Yю"6
Qt5LPW$
4̡ O; 4]\LD+Ktt$?4c*f@NчD PK   dO\k6$  T  (   org/mozilla/javascript/NativeProxy.class|	|T{gppdMIX"N$3qfoUj bZVmkmV{sܙ$o%syݞs΅?ݻf4hlӤᖖxc,ܖTLǢo;p{z&e>5!1'b	´	6[ZBoHcD6rH81hQ_er{RK0iRm"lUvas11k@3K?ayB,5(wY|B0y`¤q&8Pϻ˂
MAGh0)1	ݫ
%M
g|*}8-z<`'
dcMqs"JB`PdbY`%SC (F/6$LfYmm!l>8SMi	g~~>7dʠJXʍ+ᶄز%G@&f&%W[C^a52i&N<GfYGh[@2CEXLJXS,A	}oPabρ6+#pkH+:?m	#¢=8
N#D|xlؿ>6+MjqE8ٶbmCV_	~qJ	:LQk=Xg,'L?a98K1=&83D`H<sX
&a-DJpH"N53R%6hFXl1W	?gW4{X[L@^+17^[Q$Lc+apC%}Sul
d22},/'I	4#P@0'x@s@So=FChDGnEјrlԅ/'=q_Ŭ	nkmzd
~AypHvJQi+,Uly3BبWF5/cHp$v%7qn$
bm[B*L&\X$(Zx@{|ԭ&n҉P3] YI=iy,
Ipݺ,'S_o%cԜqгlU8@\!ZC|0%|pr?k!		fojxHdXc,R.cw_!x@V"J<_!rHƸƴE#M5E&sZ_d?[۪`_טpѩlbAc];!Ce!a+#2%yuBAjd|,(a1|ljmokqCǥ
<L
%xsmCF_hKK"B];eb7U9{>p={ޒN`8hjokQDp v8˸ǳ&#Fg%2<$UoHlxpB
8GV9C xJ}ۅgdX͞/}d	Q'u$L\Tsؾ_z+)lɂ8.c+0(Sd
w,+2#axzo	%]8Mu8D=d-:/_LStF|XXu~_7]U{zG7O3Z8ܡsۃ-q)ֲh0cl@"LP .E\	g|EOC`46rEc)EOL|*I`CI'WFh*EN3LM<F	 ye,c}aR@dQNx(<^VYffl7@$LB>I'W4̤s.=638i>p4294usD(I<4М=x1~ggtIh<Ϛג3Yk*-JF,)lM4٤)*#/L*W=H{2|EtIu/*4T*籓0?3n(YNL/ƺgb/d%R'`[[Kuy	=Npʋ2"$W
MZB\-M=*CV<幗P,I=C5&-3߸JnlƖſjyIU5Vlr}=#SG;ZNd6껩ޤMiWjc}O^^rAhGP\,hR52Hb^бK9^H]{)difY&[yg^&5#^@XxzJMkS"9:AĀL:W.XQneVV/XTY]K̺[&D9uOL%v
9Uэr|p6oli2n\`IL}
13ml.1Rf:F^SOe4[$2&]Eyx {|
[-c~/]G!FiU[8C:su,5Q<t[z1K*ŵ2㆚Ntɵ7фU3?Swj\u2I.kTf `8i^p$&,X+@QLM~ci=hCXF0YB)MzĦ6}ݤ]
f!gc7o>K$o)2+:zC"9VG/=KU}8
n# r}3¤yizP< Ox{FJ-{uӳr|wMzNV+Y5up=omkڻMeTjS{6o^"_ٺ;F@b@X	4
y%ږ͍eݦmW~$gwS#9
5Y&⸲:C>^SrNo^m⬿KB$d_+3&yk~#I[!1RK#LG>̧_4
"y>^dI??HkÛ"A.__	E~ǤwgywޓgC{&77T3{Qॗ<!WS!6*eÌ2T-hQ$:9U>O$'a55`6tn{(ht˳_	[YRfWɓU]g=5,^f-_Q~Cݼ\V[aqEYWSWbC͢>
k*k+WTK>e?tY]-C-XQWaa"kV0T]," S̫M^ ZL.lu[f;_˗{BjQ_R֭X3{͐xenom,:,mg&+VndDvyن]6n
30)WBhCs,yhY|ByP9pU}1@+C0[BuYg+;Rv
a{;ɉ Cvt>Qg<e鐉QjRrfab̛m^3Y;9Ť|l޵O>kiݝ~oP4yGo>$3^=v<%W~zNȤCƾmKLe>MRE8mQ=L_fCfE9X*&bƦX!c{-!SX'i2cSֱ\ቱFcEa?/-+M1YP<QDh͏Fr|fx%M \yR[2HlJ˫qhMBڢ6ilD2ՁH;PFe6S[*sr6;3z5oe~xέ><|..Aml+X3TA&d[=n\KĹDeXjÉ,>Mڥ}Jk}(ݟ:J0+ؕ[q{)TWbKn\Amnۣ]	n@xx+&35MA-Msqۃi6MYiKk7q{PZ{ʹDngr;'mMkp;?.H!MsƩP8
ӎ~n^u}|h/<nNe%tpD<e]^ɽux9Q g2+0(JmgFJVQZ*0ڥNAcjgKw$ƨ'1I/9_A@N1?){SvbPqI|kXzda-rpXςn@)JЀ56F-6RWXdM7a~U>ɶo_qNYƢک#rԓõQ9i˞{Jk<Yƫ.Ο݅83i̯j덒.,ƒBu'+w݇0ֻf|lw d/nl<PUZ\eUe%]ؼAm.re,fGgmGjvk0bL\ϲހ*܈ո1@_R.agb6^+b=&`6. ݬêAZ>SQH<:T+0OQ
<lW|xM-}h` 8:{a^/3~RG$\ze1~Osh<2TP| Y;/q^F^q0<
m0pm6IapiA6mk#_QO;:tݸw%:zc旬ǯY_'}샿c=v?r3VûЈ+Wpb`8c:aa6Y0lu0lv0<GiS9V{{6<!ZxIƂgQ ʪ'.C7M \\~3`?Nn$7rߣ-]^(O=/8.<'b7l.y`:͏{`>)y3f"+쟞O++} 9yS`|!/t ǟ-3+hfu@D~S?G2La&s]v{=Tff/ˈ>#)8eXYGGw3~O
ĞJQN7~N}C\Z@ȡQ@c0ƢNT9TT%TU74P96,l\\<La7iBBx}ZL-lZJTAé&
SKuZMi
R=h-]@v:
>ABt6s.=~ZTo6]p3Nfjbh2oTA;YR@Wt{u_WnOxXm.w5jqHgEHtmqxU6lKhL&{)~"W5nHJ.mq,I*Yk֥άg8s`[)ZyԚ=DƃLdQYAhˀ1ʃG]</iˈ!S !>F1>W0gMwe"L<#G=ΛS]N};>ջUVuMgZK$Jԍ?w`w?wwIrp>yq7wppTWg"g)kn@>݈b̧[QKt7Q.NZz 7Wq=Ёb.Gs8\LVE1pJ)e9ޔjcJeٙY!xl/)>_pR nLȓwA;w0a"}̢@?@^#\M?I^ǽk|~c".l%ӱNtcY{/zmkm5.fHQ;H٣Zx/\)05YjƫYz]k:^7<Ky-}
o5ﭼνK>xsdllcGc9MK"}h^/7Ŷ]I(aW@I+繓<2MY=;`<7Fb~w+R2<66Rߓr
<H+#!q
*QRZECSKU\U0W+E\w'3pt6K-j^rZ
Vj+ʱd^vcV*xzEJ2s%#Hvf_0>tyl"#lmc,r}O$SWF$mbSiql&iglXLcvͅ8UŘ]5eX]apڕlpv-:vqv[v;i¶1H91H9Fz1}Tiq#%;l:Ij?9zH)3P6lo`3=㧛gSl9~sy 9Cl8~^y6ϫCefN<NtQ<[rh4LH:1T)v.]2kS4}S(4>IA{mR-8h\EcS(mvwAawc/ڿ?#TiAv+u
ku]6
73pM6 9s9`q=V)ddr\7C)H	2
NGǆS:r4wQQ
E7 @>1Jq'a>S	c^z)QO:dOGP UbJ `ǿVjT~l.D(=Tŧb
ZPbVcz=0C_٘*=0ؗ0OMLMvi!KŜqd2A F0\;+{^\ElFvueMT6*v}vnfC{v0C쵁WG-d~z9rnQn#ڿO4z[M}~_'uZ,q:aR|nC~;
;jwTnw`~/[>ҿ Wq5\7z':q-<dvq@Ƴx^ߋW}4~?_mGxVAWY>ٿ?<U+|n1Js8K~w~C8lߤcЧ8͡%@<dW9l^[O_tRv,RF=E+zTKUR]Eo8<z;Z%PRMkT$[8k*ܳd]>^ʬg	9[pA6`綿];L|
fpr#7>e#y4c֒b##Yv]vD6\7i#E/&+q)u44O1Nb<ȝ_00dmXkv
?:zb֡Nf'z[yx9c]NԹ#}vHDaamL`5fbq*&nI;ݛ`l`eDVY!'j	1FߟmvVRM))A|^u_d`%k5XԳX0XSs4h0`~58Q&9gSd#3|$b'-~Rм[2}e*sPDm7w/.,7,rR.6;F*.E>y1cv)cvcv9FWbqb\5g\
]i܀&2nFq+mh6C:eڙyb^Zx9xoqnV(39Ee+ܜeCV
\i%ո7WrMWu^m0;I9I9Bx\+R\c*[@]^s4~Pf4Yb<=2^ppϫ[4̳m]wbRʃ 
qm.z 'еV!(YkAnYyO>n.5WQv8Cn(wD>Vj')=]t?_v^X2F?h}#ǌXcG&7Z`2/	6;_lE)5t8`Wa'I`:|6O%?/3ع#-J1U\Q(TVgqQwqy'G%WGO:wA8&xM?1 F6;»ga뵕®^)c4f*E
(UA~S8I/aV-NC8JT}XU](}R[=d@>Q!Q?IbSjK5R`5|/+ȿfKZ
K+"2]^]6c3c
RW@9{j;_c$Fi͑!].x\n丼iY&	sNOVEҋe;,r߿g~vN窖˘3B#_} 㾖
v.}n
Mո[@V87.FnCxKWXK5&[[5Ƥ7z>G0-h7}|m`HN;0nQ|t=ls^|>݁5p+Vc섡i6\ijنkgYS
ʟтtiyϭs45jM'mTMZ3Eov۪EU?vE1\j^hWOwqk9tZ]ݠPK   dO\*Ǝ    *   org/mozilla/javascript/NativeWeakSet.classX|SNᶔP@- PJKP XZ%*pܖMnMn*c{87l9D,Lts==ι{9wM$P?59w:^=||Q^
>%(m'{Θe[~#I1-{qJ1g~NW(1"(7יƶIqD1'LlP!0AJ5,V- gx7&ݢa@}]ڌxwXjSd:I?&
hEdgɘ"P$pfbɘavJr@N
XEXF9$cޖP䏝%c:NMEI۱}&}fٱ!|w1SМ.?fU#
BNls%bX@(m
:1=U`l=RD55-1:?D; +Ù8K:iwĻmBs@ygǦpPMKVVT!E-XȈAǐ?*NB'MŖtb|KpxM:fklJ/e# ]U@4,wE>^c%BUbǰ!ڲ k7hС"\\ܫnQZ-wK-xRºViFtyҎ3)I
e]]:6Rwn1.mYD-ul&&!M(yэKu1ߣJ	6`<;HK<[-iOF
V
tXerFд{NlD'yWHdN^#DB/ETk
RhfZG?da\`ۖi$X;׬mvZl;tUL4ƍgoѱKvKTJJ/i#ߦzI3nnA;N~\]aNAx^Bޤ2\ư;,7x|^KM$Xif*AT,}DG1I~"0Cע'6K-#*Ę{xX"bgl|p[ebvF*1&c-giDiwNCc~{mfԽ7܆nX^w9wa߰r7C:cR;j;cȏ]R_W
+Ǎ~l>TL~	>\c\Ei.O'"NNVU4cDLŴGO@Gu<(ѧFl+:go8֛0tBµ@ގ4B0 ׾[rz3,'{icO\zPq253OLxˉ,5%tL8#f?:
hfZL
&$~$?ќeSŕ2)J
-[*"H8fmKMKVndzA`qᗣ-Ct1|nʎmㅵ=6%f"uTCnup|Q,lg֞
(R`(Nb7U3궔%PLMb#p'Le[f}V%9nal
}^pp	Hf7TL9Ff"	A6:+#:_,Ӊhvegrti;)ҭ
U1`eZٌQ ДNF1ug2;b%/U'Ɩr=D@B%xT%rV-geH&dye8Ujb.PFeWQl0RaXΰ7 uZfjfmoKD## [g8,CT6Q):ҳfLC}x3~켚19NR=߿rLh8Z?^%k~W@x<=e<7 ~glih	Dj}c[rr8Jm S3|1ᤉ霼ٝ4E51i KY<Xմxh/p*>08
	)p:H\5{<'#?ʬD=D_x_eΌM2`,c<2m2SBIM>`[PNmk򌬦*WETo1jp~1Ycjo;S!Ϙvr_<inp .Y#mJ&&ಜ}nD,t+˕]ɬY
O<j$uRP
_hG$gk=
F}g-A$l8H`CAB;#af0t*ݪ]")LSH®ёpHӀ
_	$r&OuIQhyBhfCwSOͳ1Ț<5*_1~ƿh;Y'wZ$wOZIઆAowgq3:Uxb«@pqw"~sBۃqݙhV<wd^IGWLi."jUL'S5#^jQV!q5<Ze1XeU_ey*'J\c=~bEmmmE<3w#?#q둈Y[<Û÷{ ߍfhhW>j*ԬtQ]B9Db2R
{8~4
9?>s/@AA˃Uu,yPAmσ6Au֙jUPVK*ոIA}WAMPP2ՙ?>8"]B˄d^@KXd
,Q&] 1Fj6N&.!f٘?PK   dO\5    6   org/mozilla/javascript/Interpreter$DoNameAndThis.classTNA
E-j(E45D㲌uamvg<F>e<3%63s33??XbZ~丮߱>X8u/y7[BDp|ZaеxXfF6SFJn6gH²wޔs޵ZE!j3pr=W%(AJXI"^1pRTy)yU-dY7$iuºWnA!p]gFGpdzj\T!{Z|RE-؍s'[ݨ
6?QBoSiehoo[8r~*h
v$OkMl+Zv9?6b>C<t5dgE4^l!U?
lk@*</PhgȜ(yPTVfMw|)ɩyBiXaU!&IcAA<YF69WnÌ>a(@ChīC8_[U	B8SÐٍRYHY2Řʜ8&&p\R;cZsxDv<x!n1t9<!HK$4JeϠPK   dO\J-Js    >   org/mozilla/javascript/Interpreter$DoElemAndThisOptional.classU[SI:$$,Q6ꮨA.\obB$@	PJ'83QϺZ>MˊHL{|鏟 p	"j!ps˶܆Mj	Z+x-3\hj9Vp+;DIF`hv36C	Cن[o3(H˿iF!6C~)C8}{۹M(nU#@+%uŕSKs'iR94I
5-ञ{FsYCo4܆QHV
j8!6ITxBF*ae[-6c_lREف[%ط:ۢW@\~
PcrѢ #B0e,iثgh@NŖ0[Uvl=IooB#jy(NgnQw9õD8$<~)
Ps[ߐEj05FSUCHsdHoנ-eK^tq)KcdAh5VqA*|ettM,9&-/)}
Ax Fqy}hgFilSP 0L|̎\(ko1Z|<{dg?xHx?&LBCb&yWx&1BVOÙ{MTtCҫ^B\ѯ>z,shU0oѯ/\P"=u+d[Cz$_LZ=(*8tJF38scBi1s%"2f9ګ4BS
i_BPK   dO\@h     .   org/mozilla/javascript/ExternalArrayData.classe
@e/zi:B&)ƺEhz*
f`|Xb"+ҢzdB0+
o˒aL
A+S;<Q
^Rof~MpɺI
?4eND޾Ȅo3sKqaÔp`]~O_[~PK   dO\at   (   org/mozilla/javascript/NativeArray.class}	|TۼY^vf,,&	B3@ѺKUp_
!UkmZZvjAs{2		~}{Ϲɗ@85QJf$AGn<>4D뚢CѺ5z\iWZ&4!mn66@Sqx	>0xcMQMwP}9eaS*LD kR]C]t
UYv/ͲWFO,=G,T ̚C
& A on6F7f-[n2 Ä3Cac]	kµu
ƚy
qbpmEى"c`kW7c`ElT3lkH	4\D#]M
ps$nHcs4\TŦȊT08hjlJ7&"OGVbcK5ȖjG3:-LE}X
<&P^7	H5sChi6j{8N?ʕqm]}4ܜ
)T;ml.	U#T_BӨtj~qTSq
'X릺2&ҩjXݴ7կBh5-4 U4$+>T{6mxA5ޑAArZƲFp9V-4p?:[jTOUק *^[ش~Q]tO&U^"G4Hz*╄Y,%\kz`J5C|	շP06VXHN7G*nG:`f!AuwhkTȆp	O	!JJ*UVc'}{H0a'<̠E>lu	YGkCQJu<jnǏREKCnuArꩲ)\4aح~C
H\=e!Z_	LZJl3Ix
9V(YX3[?4`Pss4y,ـ1C
/jXGO&<3o)]_Et,k,d~/>r]epWsBj)Z̄eH8To=Bue=|ńW]2GKgk&^wm}Toϸ0&w(o;Z{oաuu[V0=#̳RbwI
_3>ܰ<Xb!pC$<^]b_Q{u&	3H;hzoE_>jyKIc>/	¡d-ѺQnkF,I|i&,\IM&ѓáhL?$^FL2e23`XOxA;c2/Y=hǶZYK4XɒY
jc+*WCxmLg1ƖY`&͂Bi\9"ʎj1pace-u53BЌ5sRI=UCڻ*mm$aLп-(>o~񴲒N,l+/KeM6
Y
aچvhnXB(b,`ȸmD7aX}#c,`#M6(go Џ#X3xO1ڢE*Q"%ĊW).$bP3B	ClrUfyɦ2h":@߅8bw覼epMc%&04  684H)
2|ƈ9yo0tģ5l7@*`Mogޤa95gDW>-6v2VP} 1:i&;:c<rO]<Tnw	Md5 ~A]CtlO#ѳSpsttj5F[]月3ߥo&k&^X3.,XP:3yZ`Mv;b~`pJKGzl.0م좎>
F"vAvWRE>gd.]i/ZR]F&е*/7TX.1D4Uj&ֵ4}
=-%Z\ब=c#zd[uՄQ؍&ajT7F:hTN7#7ocV69ݪMHyѲ56hݷ{McF d'6Gdw-m_ZB9V`4.c徏lsiB䠳4$]ub0:aeut
d;|a=v!9$z)MZ1j1K%UΞ:_6`L$vh	PZ=&0RYuz}(NPWM$aE81pw5s=-n[B_ qQU.OM3DֆZcVrhQwa
s_٫H[聻MXW&{AνsH\J<A];ڢӃ7Mȭ2 e]WtMCa Ǭ
׀IwM'1~i{q-?`?uXq7߉AJE!U9:7judHmxoP
5>cz :PN[_ZC聻k]_bQQ4pIs3Qt!TɎ8C(j^L`
9lɐYFqA=Y{s4wћߣ7r=ԅuAbTvGȔ4yOt4KN`I7vkŻ@	 cIs>O6y
OE[jj:VؕH1t'Eh`4'Pw&1*0cN̽6>䙔Q=͍k^>1P>%[Q(gA{g|hPT
<y|$-WkOcx^tv;r21y>N<45׷gc&rߠ*񰄸f(\UW)'O:t"Qq'k?L'|*w'on>
Cu2#+H1FzYs$jKL5j=nҞBl긽.Rܢ'u
Zwxs+tJ.0gW7E7/x0+M,s|AK.|_ôW&_3O:E8:a3R䍆Zh*$#'zx/3xkʂKk1؆jF&_WI,߻DN ^vWK"P_`@7li&%捈dաvȆ(l7st2{UN(_Eץg,-/`pOC||
_kQ
kuu
_σA}"n2[/ZIzPu70"];QRu}}u/2}	E>$^he9ݻ+ϦG1Lխ
{mP60$0"v8&.CϱX!>~5ך:GX#o^٠+&7v+p|+f[L~+A~7	UeȎˠZj鎘H@4]n)3ܮVӍdk8M<V&GJم`wt/oDֈ9߅.Y\b><TIpCd]uX<^W	(]d}2PvN{>G2̔ln3vbFaB/0ɟ&MAРO8R/&!A'7"K,4s[WH*nOw+׭u2|	_B"y|Q1ϻwGbF_7z4R3Y}crJ^Wi.iEܮ'[ˀ
M6}8`7gBɶ?uZLgrƨjD1WI'B?rO<Rcn7靓{Ƒ{$ʨ/"Bf-==Xɿ kdDlQ!U6/ؙ4kq6S$M9df,:)"B28[rnz	3tׄBGxL>CMMھYӏDH`s3"bTh<Al狮zDo4DSdP$MՈFy؎%(7{lMr"@Sq-
5d-tCM1L礴jPblRظ"iGGنAV䢡>r"GU74(in\v1hUs3 k4T)b)
D!@sيܞ|'JyQhx`KEyLL1ɤGӣŦ&[^'m9'&dG=Xl:xB>9Ą|1oNr:ӳb6RJ_tɦSLQ&b܊\?=ʇb>msLFjl*	WVC*ܯ?>#bXv+{ʚ1g+b	}ЫryӋVί()A&tSA"{v)!k=d]]t͉aEzXMjSԈoi'嬞jIM]YjD+MJIL
U6!Xt		Q7.|ߐ푯Fh6EDiPs
֊5&;G%v]8GP^2tay%(QG|Sl\aОWQR\NziשHĥ#Ƶ%gk=bfS\.@,.ĩuǹW8HhuxI^˲bA	azS@G3rqNW詮[Ɇ55JRVqQ,TJͱ2']5!3#wrxҪYq~Aɉ݆XyGeCj,,X;NÉ0N<hcp^DUquu8!ɰ;èb#_eLmd]x53T9biITj=T)ϧ^S죲7*2Ӻbfi8`T᥊ɩTS=j5sTx?1ŋ}<ToSXUQ2ctp3
Z;u%S,~6q+_Yם ?UShaZh\ZQ:kv!~ i҇GZnߘ
[SzK#ƾt]Zx>RRdfF[o$~lx&=iBۦxPeWUTRM.չ-(4{;ݓuO}SE| BP3%WZ[^ӸR9=n3LW@^Ka).ck]n1->!ߘbƖhfcmGS]tS|&>׻.Nzs5!ZTsė8"$ޝa/?Yr))MuRV
Q,ᕆtcJuH5kQ6R;+πtd&(U#LL3we/czA@V|F!h^+b)Ra}:*l^5D#^}iO`p\i@fbr 8˯kd?אCjQ3)}rfji}{죾q#r]1lntg㻃=~?(xC~'N?ce"O2ѭb_Ɔ<	a4DZ)i_T(Gq
s*LR$9!OXx.lninFXSW[WWΖcSHlo:J}nL&ɹ,ˉ+B˚[Gf}u-+ZB[.D+T>X2r]hn\햧ӗqzV:-V)&ˬD}^[X/!nYk
mnIOq˕sR[;kZeUkMV	&nl`*Q-M53\GHa+Jx'wy#8rY-/OpˋcwˍEMB
 nyECIJkW;P̲qmC@14㓛6޷	ol▷U:ۓkԞTP;zl!cNkQ^gxV-jh%#TO6TtŐqc&'WC <l6v̊[@2I,w1v
">aV|qCz@m:M[u}|:vwC_jߔc[ޠ	&za̡Ygϙyz0gj-_d0ގ-_b	Oo}O[bT`
p_epO9knK{"sJ|x0`V2o2gmB/ffpח8  "യ%c]o}gPα0M{3qV-?~1>rrˏNrÓn7ĵK&7,nl-Qii
u5^TuM/}u
xt{AWY
|HQꗦ<(7A!xù}#M=Jk>Jg[n@=Cŧ.s\ލU%:ˊ++-xD0=df2V-^<xzibO ߬y,cG

7d~RY2o1,H{a!J^SƦ#iΘwJ^=N줉V#QD{"HhzF
6CeBT,'m:]tS]Qc1BV
aDV1ːц{Jj􋿪gqGztJG£}OIzu8t𞍻9X`ͰNsW;(V}n-]
!<fBCcCICj#kL[=}+Ƕv'FY~Qv&}@m1G=:֝fuNMFN,:i#戳d,Q27Ťshh;c
vq"=Bg@{KyݝMOR}\ۆYA\5,
@qPBG[|b,<dF:]E$<12-"tuu"y̞}B:=(tn*}kD߄Y,^lXh&O_Z %~~4D=FW/[gqNƟ2eL1x{bqVotY;;kY\Vj4M0c^w,3ՇkB#duIwYwXդ\L-²$&ƩKcgDzgQWY

c/Нw&ZѦ6)`$Q)G>;qދ:}:+<ml8Vm6vPkr>.n)osݱ;NǅYBN؈!],kUGCK#bF'c_ZO3~YrQz0h	 7$Vvemc*pk')1!b#-EJ	UG[B3f#㪩o,ז{}Xh5ǎܸ6I}>=hYxyd?P5hHu6B7t1;!Xbi4W75
@5pnj"QcFl 
 99\o\_\BSxB{\en[:OM]sl>ifVi1s%"T+Tl9H¦]Zǐ]4'=icd_vZGo$ڕ(69>ڞ}"9պ,k5;
yط,`0-?4_,N[	,(9{u֯=,"vO {@,s.:b{؅f]ҕlDZYj_X5l4]GP2HҞ	[}jݬ0w
^~܃۫nWP(bXPnRu(^ksf	~r30&( meM֪U$W&\¥LWRBE	/	yϔ@DS.ѥd*r.Q)ϔ/`)@tS.b)H>QR)gڮLSFuiR]Ja\KYTa&]ʡR)}(S^Kcom8*7TH	\KETh[ui2YRؔui:fFfRi)O%:45ǔ7R暲AQi)WR*MYKДWҩTZl*Өt)ѥ3Ԕu)De|X~%:r6ź:׵J*2ݺJ
^hlS>K*EMEPi)/%u)yT:ߔTДt1.1坺Jr)Y~SܡKWR*S.Mv].OlzuA
= 5OocȺn2
n5f2Kz]8uQ<K<ӱTNӥTzTQ'\k7?idfa5L;1Rz8j@2Yn޺]/19PzԪ؇iCMɴc{zڵp0]]t8mֈD
Qq=mv]li١pvv)syHzbu<?J!qcO׋)G3
of
7h1a){:Ftbp[P8`;/,\
ZvUKiQΠ}.7Y8v0\o2uA<>Nkv6;IGOb{z1zAc7E[a xk$`ӗV*>
QnՃs~@a[^L|HQ!?/^clXEEp$5)聝) ڞ8'ՐʟسRd^PBbhXM
C0<VB6r0+'ccqX(
IB&
ɱT
II0̎J)BcyXNPXa
baIpΈYBձB
jcXVb>VXX	gL`a]
F#c4H<F#c4H<F#c4Q*
X(V;+l'
+b⓫b>xDO$>xDO$>xDCkcpC7
7aak
;5V
qpGp'
[v=kGsIxbqP^`^
?BSm[!%~ V(B)x?RNPF<v!,@-Sqn<DpNtq΄a)Qk/ zC-
Y>`'C+l1bP]*hbla@-췰k٧sXϓ#<^ 鰁χp!_	p1`#6Rga3.翇+G]9\)\pHE&\#ZQ׉YpDQYwNq%NGTbmU/'ՋwQrHUo>*M}=(y1-ŊT)xsrգZA0R;Q>><xU?@TElxƂw 	kZ7Gk|jHѐs4Q3<fqc&;c&;c&;c&;c&c@=f_@ 24K׾-AX`Vy~۟kLmE[X+zJcv	S vӖA'0p)w+;%1>x7
>neSI}S8_``
_!̄xSXjSd@wCA8
9QÿGhD!/P=0:rݞj=GhɌ<roBctY ~g{D
?jxVj
}egSI-r9>/wٯ 9{y6pgVnGsGHɿbOZZN(v7xӳsZyΕmhc}wE2((Qnߕ_dfV6hF~\ʆr )qBѠc	,@q60F\a>1X^6T񟩑~&$f;i=ee9ʩz}A2NgV嶲]AoqePaݨw𚑿+yfjۑE:0	8I=lQ8S0CQcCfxfHdƪqg5Ytaa0͡l~k};	H1Nh&1әLg3ID3	2޲ΞB@/~M
lRӶlilF;eg'Sqi( 0	P5B
*=l=l%ncsX%ԭtʢf?pLHèIWPG5QO(ۨr=dC8
xYVyŰABf/ނCgv58,0E6"޴%@ &p7.dJ=>8S=P'Vn6#y;`c@yI?7O7pdNDecWha+I6̼=>7~AʀD;$ !ҸgM'XS6v6+OA*}$&H6ƲbG	*85i0}g&6k"bx)4{avF܋OVeXtmlͤsN
orQdgmFVl&2,RlNnP90B)|gr^Ip5vZ>Z3IɃXim)[HAh)||[1bly @>S#õɫt36u"c[yV+V뤋WA\t
AM$7lAw-ƪ7[ B`!;3?ep	YE!c+iW*!k Ά?`4¿8S@:S>=*2 yF#58^E]SsE"i,xs594QWîoǗ\d ] 'cS.K_DPy.SS({N#4:֞|[ss>=tEWqC&:C&TFmq{?h.iǖ'meշkD#lַUŮ"z(C-f7Y%Khԑ[3;bJQ~VLltWvN~{EP?~\AtH4
KpmWt~w#
0^, 9{6vOF/CMf}bzD'^zA_'(~MeO;t&`aλЇNBe~*{ݏo;2܃0}*Н?1~ֳP@p=ۃڦq|"&">}p	$I1)]]jtn
	t1oV'ej*.RŌDUӰ
%p<0{u^M<0A!85i0q1LY` -KLdvbx/D>I{CssHA˻aB_6@߸=J5k%)o =mTH/.5QcO˴hr8Lc?@س.#3'hP?6:|G#bYj*̱/[dPp?D4
fcbgT?c/fO~N؏wQ8b,''(/C/B
 rD s5j^{xn>oe<4'ˋ)BbW:x87*?Cr^c;_m{Yꟁ~RLyJ v"0da{#n,g,KQ7$ԛ	m&YCmcOl ӵ@uʇ|"5r߷|{$軽p0H04
$>w&w}<x|V++r"U@?;:59ҥfkU;h\G
ۚj?fu/a+F7=Ei\-x>zv"_Q~^ߐX|	L`S\8}z'_7.
.phLVh4V+>7L=J:`rI}h}T)vU,<aDTpf%v`Mm`PveۂD5+UY%w|Jux<>O"Ai{7m@3]dQ}q	(<DH a0O,
x(}TjxX3!ʇhĝ\AU ՀKUTD)*BdAZY'8y5jϣȤJuUC0\!@M'm,Ö]d>$=(nNnς~|t\ߦ6J=O6IGqãٌю+î67m'(Ԝ6vʖ<B4zVgQxV;/rS]4Ep=|p} łC8Di5NyI!O ?[M)|r6)hkN>U-jT;v9}f"+[~2eA	>"'70<}#|?!ϮΔ! RK(v_k5 Ae|AvF+hV:u^3N^S3tLu⟮"4#K%cb;qZp yRՍ~e߳B/7!=T~W]
zM~"]쥋7#FBO^|YC̀V烂cf	AF0i9|2V2 
RxDXVdAbgٯ*H#/Vȧ[OJrv0Ir+#ROAa@|ae͢`B0p@@E<Ts`.^
,w4q$6	˖os)D.Asy:ÙK/?e0SY|9j:h7Enmxe`~|k /_F/e<^f4o~JP!d$慀ZwɰT5YFU
%^oI1ǻҜY»3-wY;ZMp[1]-W+HZp|34ykX+-aM;.l23*]چo!K8!TvqP6^4_Gatq]_520Yȕ/
3)|`8b	@1,vEFA^4H(rm4i|!S8t=sRv0vP7)E
W6  uף
-(`$~#7NXq\, jGhz
Q[^ɶ+fFޣrՌO]R7m@44ߕJ=e[t<~yGΏUfhAioC%ߙ_<1{Vɼ]W*A]g"
EAiA{N /rwQ'ꤩȃHRQM{:4Ϟ`WУ (ʟ۫+nB_#E>O$߸ᗢCvyQR0i/VFw3(J&ҥ4+ˀIOa/`*4Gݾإug%ɤE]{
i58)L$[n4Ʒ%
GG@B0H@8yz$srSdPCXx,ߧ
+|;0 r0F`߁aK|Tݰ?PCEg~lO)Ο|?<S jg1?a"3O,/*J/Y;ƪE7Xnoi		U`jIC)hP-j
p|<,FztʿLo$2&Ƥl»tɣ@]$Z`k9$gP0y|  eS`Q/+E>SKE;vi-o?:x3
rSQE5XJ	GHz;*Ho4P%!5C,t==]~//!gu"d2u8(ܿI +~|<
-Yky<+])lh=AοoҾ2uZP@j%u/XiVw
]C{0}ރyT#k#SVC![G
@]Gه}ϋY,dAķ頾, 2eU_@q'ʞLuv`g=5xu,:_VEVu	/ٰi	:6=Y?z↸50fuXt{$6Qg̙;:.7^igeZ{J٧"S3_ru[ܬH{ӚX@vHHߍGa:B׈`zK:es]2܋?9BVܢwCE{ɦgAIhZ
Pl~X+bpFJ00 ]
IZNv cg.4!.@w{#w$B A	C@C _Ib8,#L
g8_%b$\.F
b4|O61[O"o1bfi,]~eYlu(c3\V.5_4j'C\.:·D&4!`v$,SPJ]lɵN#Ÿ c9RZ<
7\+fۄ$jA>J~zb
$ҏnpEni?
bx'UP!l_y9Q^	^QY B,Nut!5T]f/gi?e@{3tX-v+9M;iƝ95>~a+Ic/
8_^JWwR6ʳ3<gD/MqoRF\>ihATK^ɢr `X	*%`hl8UDbԉsQg8HSZCE]U#.hҁ@4YIWrpmT)xWLeRH,ex'q1vpIܺ[F`4EІtS8F=9FmӀ- !^6Ю6
j%zhwzV/ȼG#m'en.~)!8r5v蟉BlvLR0ZLd4
V [ĝ
_}f듴Dx=>~2ؤ띓?=d:p̴;:%AGz;mo`\w%Noj"7Doa	1$
Kic+EC9Q7wR' x2Cqp
q5ى3Zֈ$8hPryz;J}fg;02n($xVjK4Ax9
Oѯ9YGK'V>El}G'QF@AD#(^B{?lyCT?B0ngLpP߱8WXNq{=N{._:6A^Sڀݷ	^)5pOI0#"w?;V^&"vpD)e?.tY 
'Dv	4tmXM_+ X:"	.tn(gioQP|:
'm@0%>Hx-Q%Lzy;L
&k-KFͪEMSd紉!E)l"<->|ۏ&'LO7(n]@ `")Xm3J>t|JԲ	,"F/PD^Gyc6dw`#3L4!`+ڿbwU3X+Cp87/~qAyA
t
I'}1ƾdc222`q>l&exdUr;UAt(['k<ܕs
5JP^SQRjhBQB
<vJFvO$t'):ݻA]ӽnF݀O$m]/SjڰԆeoxa"L,fCmjYo>`.0ZGBÐa@q,pPu>+'g{`Q^'*ۙ1nWR+
F@M[P.;PPqtoBd"7жG(ӡX
=bBǸNлzy-%/ȤAf;0ma;z6pH)2(D7`QQLh'EEGB9of.oR~oE	t]Į~Q	hL wcL
9(_2:FTY3('BYgȉANur
/OM`8᳃r<'^W;𺬀?J/ȅ'TY
|y:$`LV*be-Nnu3lgtjSՍ(^u&t<p)f+:l>AVe1sĴ:YHD\q?߲P2p1ܢ(u%PC"Y	)_OT%((G`:$	4m>e|	_З=2[˨`oLlXhIF|Z:f,k
c4U|L7;bW7AwFh~ewo/1qu)<
Ā
xp/(2}	xm`"e=61i.A~
=zF4M0@
ce3L+h1φa<"< χ`NoV|t3"h2Q~6ة\nM2S
.aVd~6|#B/u;%?U`ڇqb:N^ǉ$xUPnﲈLuCrAY	yUq~KHC7H7`b&s$=3:}!D^>y5%x6ะĄ};]GnM^kQ횵Օ{
\d`Li%hIsD Un4P}t<gme7.Y_rhm̅{uy%Q!Fo&y[a
:Kއ ̗Cz{U!8S@{Ζ8jF"r&j)oR";K	툃؈Fw:Y5}aX5RnF,?2#0x(ImG9]_G
6W:ጠC~kzYz.\~w>[
A[7mz*lnuozNLkhQ*>Hz(h?4{/o
*QdXoTr54ڙۢcO ceʽ@_}|
p[z<(ڲ5ekahQ:,uF1ʾPGd^qDGd^E"<Au?lII5zog?#94E=Cw+kIҶvrEet&'
#֦=X7ڜ^A+N\]D0>ʺ(ڭWpwػx,jͤ5`|
k7d[7t,orz#jf!\%78Y\v]lS :P:RWo-\Sj8-E,J%(S6gЉ.M/P,.2eNжhVXڄnIC'hXDDBw;ܚp֓\/>g[n֣7vvo?VOIFB	HCH0[~.G*$lR
T.F=;T2܏X|{ۇ~_V5ߨ>;$˟U?g[l	BFEv3,mp9889~0&1|@o[pb	_BJ,1hE"ЉVtŝuv>8o.yVۯy4Q'~;teQ52Tc@G(d4d*ϖ[0(S:Ua7qkݛސy vhˠ7*AVC Y
t5FeeAglXrEDF1pG},<
a IcU5~NoR3T%BQ:i֏1X
횵`~I1'EǜKp"
eqZ"؟A;%F&ѰүAq	C	J&XYrQy'%w
A]Z#hP'M!ݽfV~z|/
6za@B0i;Iz~RJZx
)&a@R0H
aj6K\VI4_$ylC%2ߍ߳R~Ѐ@`@$&F0*YCoLbޡN"
.E``>
 C($t"L&?tڙG]~G*v;梕pFked-(/fٞ6ICjVH`/V(lh=w]06CAfHYc3$5
RK>%7$ji5~Qm޻&?@f?K ?`8̖k
T5k`bv"!+k~U<PѓxTƒaZթ0G}΄j),W`jj:LBSW7pjT#ja[Ϩ=Gt|΃O
PDu	믮a9:6^]&UԍZ\jOضUƞn}`S;[=.v1~zT|	*7}Y=׫2u_AK?~ğUWE)+BWE0k^'@}
չ{ĹrU/lBY5ջl}5̀
5j=!n|ZHgǝw/\&Bu!3>">m?rIz~j'!CTEz<P5A?vg{zY/zEB,#=`.	ڛs
~Z=%:`p~rCBo=c3̃cC
Ľzs{
STxs_ UN<o+1+d+=uy:i;
i:j3sĲtZN_Ђc6ӻ0TԇP>0M34Ըt!	>qPg9,I5&;Jٹvn`˶5re~zaKޠWW
zET.&%n(2*cB:PZ`ƪ饪X2B
Q
!tCATy.	\
pPrzs^p׻͕`y-@aoEATT{(CV	p1:/>=]=K3dK0D6	;DPE"r!l^PQPpwP7Ѐ+rB@@.*\nxU\QߩꞚo~z9US֮P&J1OgI+5ƀm!Wn=nBw-hy1up?!ƖC8YXתԫ^HƵ"VfX,b|:03k5rB
JbٳHCRG}Kl[UvY_Db%̘uǀx(C4?V_$ы8(0ٙb- |:6p>b	(<HmHmFو3|fzˇ׈/_8ܹO1yD$,;V!
m\WY箲~DXmGl[v꣏wlܽd↘ǽ(E{"Y.掣Do:Ir	uL
6놆r9Ѐ'tb;;e}7덙p9bb
{%0
/eC`-*;sDWRRC].:ϖg| 
:>o#&fcBˬ^'zu2WʞNBƻ]MD1[d}0@grx=R_dOk|
HwdS+ZYyǬN?4,RBr^
	]︄NwYoÇC'3D Ros&!4Pr|y<v_+LI"g
|-Gscㄿ)g")h;nFC Mصh;-z8 }Mh7Sa$Ʊ[`"6*tXx}3[ؽ{ E!iW1-E#|6݂o܁B?os#;B!e&lkٮfo:1.sg?r»N\]P:
!O*F?gu=9bOM3hpIAqcdpAѿgFnނL#v7kwxnUې97tJ&7ܿ<&7r1A+G&W&Z={"8&hj/metV"MBZ4«x-bC	>g>*`,ͭPinӱ^q65ϥmVܘ47&͍IscKsQ;CknyZOQM{kۋ﮽=}
k|n(wW ܆mX5nzJlnh7n9 ʬrۭAa-4Dd~}+n /JUٻXYַ
rhއh>v#>ا0B'u7g$̾i+tRX¾A'[(
l/Zh_v3|!al?c쀢}J9[ޏyLTp}9z9
"'Y~v׋LgirO<K١-{+M9/܊%vKZnxOs<iq9OYg=a!nwE	`iM?-,jq=naNV:]-]@Afχs8oP
ǭvv܎:v"{lطdHѴ1cW@б|ܰ#zahpFL0pFgx|֨/-,,dEU w'<T:OKT:O4(<oy\0z}h*݄&''滆3t0)*qwV|ŞXu*l.gͨ+xS<L'<L'5b"^CBkaZy-fyȌgtތ737h<<GsӊaD3p<V9>q5VUtN.	ǜxO
s9NC<㽬grcsz`<˞^%?y|09%D*U|_x/q2q
F>p#&hZIjB/6Zp5\nIF[hw`]i+,3J80z\	^qjUT7+c0.T
QN{ƥJ_c2ȸLcU1)7#;L+1qEԻEnI*~,x1GgG7Cɋs%/Ε8W}er*ʕkWsc0X颿.J[Q]UXݡDEʄ*̉f{[m
dlQ@OR攪TRe;@6uV9kY`I\*Dz	)֝`0&,G/@R|584+ЈB"Dx5rhkLD3&F?2Ea$
6@RyJ$uu_UTTwTHW;A I+)7S ۘ-ظ]R{교교교5uk~]Jז٨~>h:ϭ.K<%n _{luZǽ;
>8_YG4ǔ_p#ku순2/E4J6I&y/T*+
[ncr.:%t0{HfDM{L>he< gB?c622aǵcL79|Xl,>
jR׉K0:K߂)AP%M`Ĝ;SKdN-ͩ%"WxBwL׆r`6C[o1uw/@3Apgemɷe4mD4bѪDG5`m@%& 
hJw4YVxjzkNncd˃ޱ\'3s5a&2"В%"hGDe,aAx\UI%48S$o	ӌceto&Ӑc<E39k</0c@˻XX_+XKհܨºj
l4F50	_^c=dlFb(sJ0|ſ(*Grq-
]{˂pF[gXGh:	LuSTMQY7Eep"+y7ۄ]nL/j-/#j} jਘ&6 %6(&gDjsE	j>ͯ[{wy#U".z(b>KP_.,(,Z>L>WcQ&Y%:&KtLroLyz$A
uٟi5$A]B]'A}qA
8IPW+$O#Q'	j
O:xA
>IP[V<(FP$?	*zA?IPV$jI|ڟUtAA
t070*uk : 2   f0m'4#T}+ԝOkggٓ%C˒eвdhehNZm_	B]tMcc7gfl-˖eDu/R_xw+dr/6ݤ~->Ԡ~JG$0kXU	o02k"$7,+eV^cftL65Oz'&}z/$6bs,&+Q Ǽ@9ژBsoNa6o9^ph7æ+_@3A?dLbo˕	[GGTtA;(\0<Ԏzv4[SB#LEd!'}|2;b2"Nts3Gi->U&8	'ywBP`
m͜	}Y0ȼ_n>pܞ%ۋT$S=69SQO\*ɔ!җn-SCw&zOi&Iy&&Srs)mNe*p}6룦cqYb.PIw27Fs\Mv!+\Rg _vVyOp		.s299X#(k,_ԖǻlYD8n'xێ^ⓕs͢XVky{ZfWngp.&rB1F*}mb>6961mb+G
8OA'i|.4ws	L4T9x|5_E2Xj͗a֛aYkcs-6Ks`8fSt%dd)
וf|Cii%hvŸ/:ɳ`;EG"2^{XldCܽ"0mdl´Me*%O@C\;e"l?qyn0
_(g^H4aU*0VhhZ#gu${d˪wlQW1m#'~ b|^AjhGwۧ䖗<-ϝ	
m"E9Vwރ|sv8;b>	hci.a%<V{dJ1T1$]ܭ0$7Y$7UJnzֵ|'&@/2BG(>kHsXNרnI]NR-J}<٩,,w*]I?g]٭]L=%ڦMC=&ش&J=إ`}ݧ(LURJc`?oSw!DbEG
!/@6ny!#mQhjVxlg)rzYC,b?sSk>CDcetX+>:cgz7^5@BwBfd*-&\c{q4Q6]$&2MnygaO١%Pʑ5Z_X r74'1
n de@}+FC)Y5D_]zEXX6V|6<۪%]|k;p	6H}4ZWѧ
Uy"3+Ermh$#6[@ʅV=hjՇV4<j5|5To
ݭB>H^8S*UlCա=C#;}֬Fq6d z˯p8
vKH7@4KȏP߹] n
7ć31[lX[ŐAyW,Cl]ЋKg|TK';9-C(JA}AQ"|7 ,*RÝS֯ZoWc~tc7Ա;xdZ= ax:
ި_%Vctf G]]إ!E	9:J7Krul'Kp),EڙWvZo~ЩH\s./Muj-T)M]pȰʠ5n~#"vP20ϫe٭j}j,$Ôn+jST%O"I3sʒoNYҪ
YsDRjnZ}'8_9IИ>f߉my2_K\O.s)rT[H\x$Ҹ+)}2E[urJ^]^.9W<vu:eԷLѳ,ݜ2zNZkD1QX/gW^/b"(_7zg&_V}ZԿZ{~'2Le"m}oN;ͫMz]RJ9 Q|=^؋I;OIųc`馷g)Z\<5\xAgw#x<TytC?\)Y}wqrasV|~v36D}uȆN0y}6|z O,o^_;w#>ㇻ1p@?|{ce9V0x!]5
燰oݎ/x)+L{|oH"}::m<ݥ㱺d-8כam;
/7|S?3D+g|ɽ0۵)ņ7\Ǉ
lQL<:txu˿>DIU]*|^ȡ
^BG_3n@X*Ja%!.O!*<? aeoC\&dB|
#- ;x i +pB73!JFl#Z`fۈvf
g
ǎ ލx;(_/f;F7
ʎ!OxGYyv6be .d;c:d"-pO.bznbGO 1?[|?kݰKpx}b\wn_.*1bMsx1Iﲛ!?-d9b3x]_!pO1vbs7DAݢdT[&0[vTY(pτ9(׉>/F
^aY_!Nʢs>c3&>c3>?PV e 
s[φ!?|>χye|&>G>n,<;1|'18fOAo<y9tk?h`]T(@>MQ5^OݱX+/ޑȋy<"/%ȋȋ}G>#byW**oZǀ7ʻʻʻ{Sҵ0ȣW+1<-/k)8 u'5w)ח+PyMZhTKˋ%/yѧD^."/zG%~o$C"/ȋ!"yE8{y+@#o Pyy
0C|6ݖҷ%_ȋ#"6W%2yzՊM˜IeLe^CeDeW+2-ϦgS)ٔlZ߅$~TMTMTW+G/L/L/L/L/X-;&-/_2(eW+NG/_"/G^MD^*"/4o _OyiyV"/DyrZ$~R/H ]s}\) 忀?ȣ__ <~~~~~Liiy=t}HD#ֈJyyy~":BY?y֗DȳZMkٞ;Yh
;ƯƯW?EϤgRDR^gR3)L&?G^?򟱘3ʽ\3qfR% \Ǡk5??F?+(1l7ȣ2/2/2Z6iy:?NOO&y#I(i4?G^įOZFOQ(iy-DS+<yD:+JORS]R|데/)O_RQQׇdZ>C&>(k<PW(+
+Wh_<V+"@_XI/ "?P@\M [j</Dy|3rQB^znT]Rb0K>C?{ ~eH0L4Ol\F?ZFCІwEz3x6]o-ƒUn'<Ʉu,k	}}GG(5>A ^8l&Jg
<|1']U]/Y3>OU7ocD9k\,ҎHx3};ՓI6{`G,"|#KYJ*͗l{ҹTLXEXGf,e[
,5#eKmFr5#T
D`
EoFq
G|I~	vqy%=gZa"k\@ӏ
1nZm`?tdՠ3S1C YFA
{PăbAT߃zP#jAI*ƃ=u=AyPAzEt]AC=h14փ=hM<hA{4f_,+كǯas٣r6=.IPg"V!%<˖s{U%RkV_wa	{]mC+ێx|;?Gү?F
>McA\
	_9U`7eIB@*Ihmqcsd_oطPK   dO\2X-0  )  9   org/mozilla/javascript/NativeObject$ValueCollection.classS[kA&$ƤF^jQl	H@(T>NC:e+}?/Gg'֠s.o.?~~!:e/rQ@a'RSo ?汯퍸H5A"QP eܺǰ5\~ׁr	)K'X+?d(u!K8C;\ex^fEAKࢉK0X<fC{ԊU2d6#cdgI+=ڜ3)c=0:x	-Qْ,בbh;4TVޗӐDݿ湀S/ףE~(_<ӊxy$b,iA
xS]tmzVK>yyVp͑uw>uh-ߜ
QpʹKiw
eQkb_`00kGkJM6ݏ`QX&Znᖱ
&[7h_1ZPK   dO\lm     8   org/mozilla/javascript/ContextFactory$GlobalSetter.classJAI.9O
X
9l,RBHbh>%&MRna <bCxRovSJj_]6_2ѥXy2v͂Eإ8!2|RמжsVoFkT0Űh!dJԆ	Wh$fzIqNmE&/MnløLB t2:EU^PGζ=E'ePK   dO\^   N  4   org/mozilla/javascript/ContextFactory$Listener.classAKBAU{OB?8-$Ƌ<-֢g2n9p9p
9+qZW/JWTqj^}a|zl7Y/	ͷ'7ȖuHb^iepqbZ{2sAr 긿:HMkD3dHyo?:(~R~PK   dO\8|  S  -   org/mozilla/javascript/RhinoException$1.class[kA&֦Xoݶ]"MDhd۝*UCg@e39?g#8&RHX"ǰ¾sK1?acn|;HDʑ߄'Q0`Za[OcÖ~#coCq=I+uT/P7-L`4ZuaX@f-a2UؓJÒr|jAM
W
Cj͒Zkrk}uNuki^2P/f?|Y"a7@4G']]<wx(5SIStec6jz&5̝mN'WW
TڅD6E煮*A ]G4ezdX҃;*YҴj~_`|WdZOp0;%o	~BcWP"udbɦFzD'EfiPDBg
@&w&ɚIO PK   dO\>
    '   org/mozilla/javascript/NativeWith.classY{S=O-?6cl1`6&@RS",6@(y,)OOfi&i.Iۤ$]hBӒ4?ӯmzfX}|}77sϹgܹ ?piX]Sh:nɠI]}3Da4xtB
Xި6(>먀OÜi1,3f	SCskoeEnaCl/蘋yZ:gq3hk
c=.@wZZ5]6,XЎc
Zձ-h5b.gPw9Q4$A1|~ۊ*m1ѨczalIcIJ%$4'uDܲ$ePi>_ü\BXJѰbjթZ!ⱝ@6ַkVdxtG3+݂
ۊUpx,ZKZe9gC﹋4nkCT*vݾ{VW,fIBb}:vcI{S&t۠f0ޯ}0Z-IbV> qS̨is,,ԓb
c3^kDP@()^c:0CǌT4)[M'j$D5Tr܌X=ain 5F6lsɠiهQxDZ|Z:TF##އД1y:jP $@95Ԍ&ëF#]"L^<9<fp<XLbvdfYqqX1"@p:^ė4xSXkh^)"YxY+Df,V3AM
硢k.ʢWE25OcfTe7u|"ݑi0ˋ%^|WCDĻM+bD#o^R4$Glՠ0[9f35G)TCmLPxH_o$fFLkTg$ߪsVҩ+D!VYcvrǇP/djn9|j[ql.#8xHR%j)KFLW}i;DŦW$4tLU({dXzIǜY_"YRΩQKLBזcչ77r|E$3!y9^)I+1l{S5.2}I3ma[ͼC
f^h#A.kx1 -ǰP`$)6Δ</eyB|OA
G*,_/06.돧="hnfӯ3y'zvU
74Nsx`#'|/A9~qď"y^pOῆ	̿P㩪sbI_g֟swEuͼBwr,l}NF]'x]oO8`H~w=3%fT~N{%b'K\.5g]ER&;%/hW0TrHsd;+cJ\
:ׄ9X)M6:ӔIj%v}+N]Uw!a[C2[jIqt3 R.(V)ӣtzOchzϧw>c=ؐFl`8]
=9_["7AlWEPwW*Ӧ2]?razcݸfzԓTFIW3ܮ W-!US+/drx8ҒҒV%."Iwf뉿3~b{SJK 
Mjs%..`&ޓx$+Ԧ1kӚ*LѺ4➎ޯ_RM3O*{8|Nқ>E)M	WMiJMYՙ4!()QdjfT\!bP\Ip!||[FTG#ࢴ󦄝aW?c~ǳHVk%SOܟ"Xj@&TMިؔ+˜J42yky Ds9!ҩ䎭uɻ\6odل1Qޜ 3]Y1vG~=m^%lp+8D7D\y'ę"0-el2V~,s7s,ͲTTNKJn7қ`κhӨk9v|5nqjT}?`AwQbnt1[=le䖭?呭?}d"9mFi4of&<Wz>WM\)a d}"kM>`9ڿf_0_Uw
_n:䍷cW9.q{{5|%g'y;3b`1<*\\Fjv*ZedUha)U<p}JC/^||Jd.-]6HQsQnLX2PK   dO\oB    7   org/mozilla/javascript/Interpreter$DoStringConcat.classUYSP.]b T"B
jTf(::>8ik0$5I..oRsoNb;srY{|3F|
2LN%j?5LSMOTWs[Ty1Ue^2,ûo!	a2<fT9p=U{}jU]!GNtu/zG vC8)A/C[/9xk0w
ni
(͖L{0㄄gh(RVj%a8Ʒ.Ns
NcʢٖzblEbc-9k=ǰ*?L;
ב-%$][S۪c?BР6hk5^WfH{iƖw6X:olA_S7hy!xP.Q)sz
-BG&?j/򹺩VEM%\bT.5Gs/{d[ץ\]ov=	34^fP;bps=HFoKIg8
uQB6JCޒD;xK!^+`ABqC"Zy
i5SM_O/$±
KBڽ)<״,7p8zWA;{Nq| B
d-z
DH1%BN;Wo|2bLܧqLqsS;ɸKt^p R"m?@'CEઠӘ%:LVô`EӘ#:D4G<¿PK   dO\[  O  A   org/mozilla/javascript/NativePromise$PromiseElementResolver.class͕[OA]ض,(^T^PURbmhG\->LD%>h/b<m@`|099w.{vg |!htugh'xX
Zf=#15 !ʱdѽm6O^^Z~rք8'ݢ<aps	!-/Lfm7hFC-ZF2M@Cg
h5QXB&`-þosOp$<e'%߲Rɜ(:@
Ȱʪ'%]S&V)jU2Eq04S*x\@<W#Ҍ▟|8|i[@KϞ3yA@\=!+=e;J&v)
l[6C⨐*_YUPӢiE-hýÅe]/-XE9O̝7˻T"\M/gx`d<p5jl/1	Xf%VlWѐS1t/u!36<5jMX[HN!bG$5}
v ͉'`	mFb4Gt:%1$@OiOHS0x	|SXIr~e
]z4"ڮo WQt 57hޢC{^=Q_,Q
q( J0)%r-qbː#'y'COȓ;$ODȿW"F| 'k8+Ӂi=LgfJ !PK   dO\鋲   {  B   org/mozilla/javascript/ScriptableObject$LambdaSetterFunction.classPJ1}nڃ^QބRaigc()iRC?̓Gz+f0̼yo>? cRb@xt~%6na7mmJƫ7+*Fg;+vaa?%
ENk6zKpyyROo_Uv^΄BaP!]HjN	tIUp*$N鑔^Pb!)Pg	+PK   dO\Q|;  )'  )   org/mozilla/javascript/JSDescriptor.classZkt\Un2ɝ$71iC&mCI)-dLL4ipM/̄yR*"*>J Z(0EAE
*
Dkǵ\,>޹sqYK~{s}>{w<8ZTRMB8Q96;0>}2P^
*{&k`GZ	u'fhT`K3	u>598hd<!6(|i: cT"=C L$-y9hWgZTsH6,RyL	<$lL%,_.tormF@)6DRt	g	E22	˱B@m2N(j\L	+ܚ|UOg^	}Sr"ņVIgC1E8[ $l1:+<6iN˳ʤH@{ʷ`<.a-僆x儚I!a#t¤2fBQ*FUV,1(a:yl(>'|iHؕͤ\7Kx'|tL)a}.ɡ!Sjt&SjǸ		 E$Inz/t$l$!*Bn81^6em"6MKx1!a'.Qfw27PII%Ș&C42[~D$(E!\d2go+$an7+`RݯIsbӖh,~:\-DBDRB
i=Vn?ʎФ&G銵b
D\-a?%`7RdsگO)4E޲noW{|j=Qu<UD\+`LDNg(!C7LY@=OFr,5)GJpHxn`8
xCa{Kމ,HD<#'A*8:CƀtOCmc؈ϳ;Cܨ+-wo ele݁  l`3''	4eis/-	wҭaY6$7+0e7mgI=CA;
Vc.hڲ٘J'G{NحmXG9ZbSwde-M*N<aSxoO%^o)ח"oe3 TsbRe.vjmJ\&CyWR$I,=q&'RX޲rr"OSlb}>|=4#@Ϝ;AS+1C.9MM2Z(A\Mlp?mHb6=G%Uk?)mF?,J=c|H~'(N?"۲Q_kos"=_/=MycVךk$VY"Wg	HƦ.f}i%VHUfm_SG@XÜ0
b
q:4>4y`b2A()˛i/t7*\ELU)P32rlT
	EhV[\	/׬,XO5yx!9m,9ƔxĜ_Z3iѶlREeβYmԜ6/l$c
|EZ2gSZFJ=oQ9dPwj¬5XFX1~t
5#&q?a?ILϚ[?ho%s&6?o⿀fC7h1ۉ6,">.
]ty=GߵbK;RͿ\P/ĵzkU?zv[W^rVh;[ΊVX;b9Þku7i	$hgIpM&pd.gW]z\Φr93p[N޼0[2p9[3Xr:38l"sQ\lp/`˹4ᣬ6q[PI4Rh64s'eG~_8ub{(Բ?]xxz@ſ bNGLh&|>\) !)M
c#yvdS3oVrSK8ujNMȩ{sQ5ZNGT'JDs(Q
b)N1ofNhVN(prAX$,ԃc1"Suv)3bQS,nb#2Ka3xȰ!Î*E)F%O7'H<)jw@M VX}|_'o{Jك
r="*3PͅY
-R-g$,h"%aaY d	Xo!u'Lఓs@#vڮ
GWQSpIAcF]#\YEFջK먲quSZh㦅#_A=pIC}|
u\Cå)1n1)q)q+iJPTrgRɡ+BFK%w.\&\K-w4iiȵ"Rˑk9IPDѲp>Z=a9S|F
Nѧ(+í9R XpO;2~PBe$ܺB˄
$>۴)^<-?%[;~"*ֵ'-\NrX<KapofS/rX2)^V7V{1ּ8mzyO"EyYYK3YԢU"Fb0NVZXy#O`=N^"{9޷Q
Sz/w@&{t
)!9NC:%/Evq?[co_-sYςa-vk-kiažp-įJxȆ2/
bMp2^,ćMh-%J(pݵpS&=]
ɄW]Wo[`?ݩ¿Ǿ?RaQv5PK   dO\p|R    -   org/mozilla/javascript/ContextFactory$1.classSmOA~=^_H{ _0VIN$庖%;%'&"& qZ=<33Ǘo b1[ȣ׍0!?Iq[⁎ICAȤF\QQDtW"sy!:^3IǼ-T-\Qz(B6d$&xgaxCQgIת9J+J21VkY%En:|J>v<v#2&FmL!׌ۂHlB!y8W9syq{+Z(we'⺧q3zHzw;6$Qڍ{*-i
=U<0N/˰xm>dbHyqJx*"=0-,NV["?tE18fz 44qMZ5(|
殜rp#0Oрgg
|Ez:wSC4 5:BDb	?<JE~\_iGe5{y3fGC  EKdsaF2z~PK   dO\{:    1   org/mozilla/javascript/JavaToJSONConverters.classVS.òQ']aĮ9K]I^XvՊ6i<>NbNәҙN'팧ww, =sw]FT4!(б-kqSS=
p	4zHfB;bjŢX}K9Vm*!ϓgu*Ɠێ@l'b5j`
Aur`F6%0ǴIn4`DUqsu	eӎ]weT/ݰb=תUbi8whe'uxxS}㾔C*])XZ-%aVe)٨ǮYW1	(L?-1ОMg\ǰe*[PbǝϻJG:4'(tiUV]+Af)/'qNy ZUF-BB \7tOAEi_C30W	L
t||ɾe~I,אouW
zqlgx%I蓱Z"DnIܱSVpIEj6MPF6i5،˸ઊ`V6A/[y}ΰt2Y9n-R
pMŇd\_&P0WXM̕,/]Ҝ)IENA^9mrLFlkHr33dxzp2Thb2pGhI%Ejbrzfxbd&F_Qv̌^N\OSFIŲ'.!c[[rX3px6#vz՝-kz9ͼuImZ k݄5rݧԙuf[ [ڝu/տ: f͓:|xwqw`ӥDF; Ж2aan\2緋4T;cޚq"-<
c[S,]=Y9Q9NTrfa%'_4ޢ_fs1lnu; W<ꇒ=ǒ<gZUGBRT)uoNmpEڜ&>@-K?[lg:YyS/vOb0#L%mOtD3͌[MZxw^Tj{
YWAބ#ՀB/oUL
9q~sě-=!|O@GX6o,LkGנDebIq={^Tgg::oɾΦhp
UG5PV*k\X}opu4U@/2
ah
v_d0V9Lb1r)>@^(=6>|:Na?N1˟F<-%|
U@5Y?Ise\=#Djw
Ȓy2\)A|+?kש2_zhT{*Rn$_R A˿"/n_ Ampԙke|6?^:{-+|⳿wHvU˵oafm+n5>=cBj\$@:>:X_sQ_W(K2@vp]fx
{Z";.O+;PK   dO\N  c  ?   org/mozilla/javascript/NativeIterator$WrappedJavaIterator.classT[OA-,-E(EQd 
BSCM42ٝ+0%wh|lFDv̙ssoBD5twoLHE˶CH@\CBG'tyǫfV3կx+3y.m"ǥ?늵d:b2K	
*T2cck"ۉ>kH@(4ؑARN3 +
;;J˱Y
t<ĉ
YNX9is[M`#qqMAz]ͮ<c:1$U{TZ4jhռ$T$,[[e=RwԵS",un*cr#vDT'̥ yewxzRaXmYeVo!Qp^EܵoTfML^Sr4@u$iHti6կs̜ڃfNe`hڇh8_1EqF8%@̐j:@H%CDZDFL)H:wǅˋ}ߑ˟F&+=&U\kƜ=(0Rpۯ ",a[qf'!ܢ=A7$#PK   dO\h    5   org/mozilla/javascript/Interpreter$DoElemIncDec.classU{SUݼn65[l3ŀՒ6"vYnw73Ψ}؞L$&3<~q~pz
D9bq$&w3|kZҿ=5~bҭnM.Z1$M/1D+8R F:X-kշ%CuKSkU%t{3%
JY~IiWZ"k%{R^&msCulh%$U2aL!i^lHaFC/^8#p}&OvAKNU4y~71m~ՐK&ñL|s5sp1BCaoPbMU]W7ץН-
6)4&۪S'uKz*]xv6ܒ4wxNEr	Re,{J\r!jM
vKWմe%d1tkEwMf̿cw34G๗#}R؁ڼSjSk'؋+hux-mBG::^SzNg8߱q4GG!}2p
9kNI7!S4I_q<)Vm\z3^k%&=$I?J`(W(#z 8UCiE(q)0>
-)/i=^Hzbx!I>?+P'x]%6iEL3Z&9LvG3S!ح}}
`X?C_-qL(GX{p><+oa˘	E s(c(#gz)5z@i[л\)Y׈P%,"O	(=sI^Ʊ1'P4 X	u","ױF{~Nt
_3PK   dO\Ah=	  -  2   org/mozilla/javascript/ThreadSafeHashSlotMap.classWisS~-5ؖ9&0`jR K5HtOKZHtЩIS<iMg_h;{t%hwy_x'2#"Мu/$&WtJ\.[+?1zǭ@dq>ֶQQmhbs҉d6r];%|bĳ&sv1(@%LU&V`@"OMIMcķZ&oPh%֢:OV`")fF;$כٮe]um%&
JlD&,PcʟxJbb+^[2kU~	chAD;:hh2V.	tTZiǛ8|>غ#5<%n)X39ϙt<x+Ae2=PL{MX.[i'eyѶ1I{D9Sȴ~pP 6y዗,211CkXzN6[iǄ{ĐOjvJ5qLiIS-F@Af\"{Il8ɜ7#2	b N<m^`MfS3ehh*})`Ҋ&>s7MI2arSpN Cl^F96+ø$KSKgno]@bΛ !昸(C2&2+*4vw\;dە77@"eB\)Fb1'cS2ubxJZ#z3M8TݵGo!g.:J4,n:5N)MId1Ҁ%5˴4Fƞk8/Q~ϰS~N	~YY'[rҖLʾfgy댳$A
/&<i
@cU3%YYLGоS#}-68BzحGKog<kN{_
*nTVZ\..+/^$$ѵӶ׫dZ*c#)7ird/ؚ$0Jelof)64/@	w>5{.WQ90^Ců˽2'*2}L2G)Z=O>`u~BXM5V	\3ir6+)Eh/qO}):A&9,{.tmyߤʂc%:Ĺؠlԫx3jڣ ע>!T05?i+?S;{AO.1l3
"LE''E(yHoffvF$4 @ g@ÑO\V/!\Eck&4{ÓL}rx{n"pǧS]!M_CzQ&4OdS>P
QΪE&>ws|	WnRY֯FOSg^en Y&8c$> :hyj[ ǙJ@w;cʉ{iWOIh;nsB:rb{nQ=;o?O ʃt O!:0OyGugEtПf|Gv
59rozΘWQi~A2Y:L󤏠cvR)zW]>ޅ/*"]xME]^,Di[aqB#*տd+B |d@ߩI,Bd5>DٞǶ5J%,sv* [wok
[BYf)lru|CšEA6Jڛw,-	M
-նC6UE9z0޾aTF³:gԈYt6e*^5fu9(.]bt]⸗ O
\uHEtK%)gS.d&odn#9{8[t	c6VXwl^
WI`_'{u"\<f!g`,e7j7s?j2ʉ 0|ˋߪdjZRFZwRJ>fzIy\3k)l)l),{.&ܑ[]4@X;Hߐ7Jzq8x|?X/rW&O,hT$Yb J,:M,41ig
YռH$
lLApW"9"!Ey?)?Zd>;@Bcd-y$V^зRF޳;"> +-
w~ef ᧊|?Szl-~7PK   dO\v    *   org/mozilla/javascript/NativeJavaMap.classX{|fI6 ", 5
R^AD	6awm}`ֶV[|`["(IA[m۾[Kܙlv͊l޹sΝ_y	 gj\(PVQ"eX@*#Zvhx0f-iFm7f7fFcn#bMR?/wЃfֺQ@̈́ EY] OH;צp[6ӏ?-VS/&+(S1|$Pq=fH|g!UTIO4-XAUɍX4A%
j-83Ui4`UcĵtQp'М 9D='еzU@`a^*F_7b.pS^$NeuwC	PAE#Zvc9=Z`qp@޺KZT,""*H
!y593NPJ8ԇ;,gT2	i!V+Uj9FLJ:S(.$b1=b:ssks״*:N]53#ku[KQsU^ljF$A`r	؈N:D$M`In3fDs<-hYy8_&L楤	yNQ&PE`V1r`?/%eT\K34
KW7wlZk9<rԋT\.-w%p9Se2/Ѹ%
:YcAnֵ1STc;yd,`v*@,X1Nw<e?אlcݰK]jyx!|wWRƊxp9]dW1zr'~)l5*ގk)w7G9	te7B*n	3#K$5ŸES`EboX٤(T*ӆFdQq;Cg)n\-x/$wZ鷇׽Ox?
*$|֥5&4E *اC.Hn(NEY՘&܃{|Tǰ_|J;eU![y*5"f!|\'T|7%@PȃO
>Zޔ 9،ZOX`,GT<G3*BVwQV1k(Cq,3WLپ&2o6"f6*xR,S4[9)>*]=eXY,Mk	/	H8k'+xZ3*P&L9XH1=t&ur}Ms:{G`kt'ɤG$1cqv-OIM-bpPyg7P;mGul<$N:*_ ޙc
@'V{0rәӚq74ɛnrZ\2qvQ{G2!r9}=9P+*HQbefPAMvs2o˳+$b4\A*s&=("KcHHH'1/fTӭO ʎ!",06҂Fγ̗6K,sDvP-j/ɚĢaXZ|Qe'AMĂ:C1ǢylSJ;Q]qՍ=ΐD^Qz*&)«ɢ#;So	HOm[M&KZ$D7[_ ݙlҜȴKKkm7u	q1yNR^TY]"}Rjxa7 M-[Ccqs9߫鿇{ml:`q)$9ߥQ;q#Kߓxv.S
?#F?ٲƦa(1iB>Ce0o|bFao}Mh.X,FT ͆B5[Kw%3-1~"QO	?Ϥ
vY4[	*-q+*
~Mom󚤹"9XjW׶v{u3l:MeGf/!W}<7
Ag%DRr2
[B
@f<"Ylb1Ir.mن67	!43	)3jҵ4t`>C4
gیo>oMlGe=R	 +vR w!Ksf/5 f.Ͷ:C^afQ5l:
ޞ]%Ga\FepC".$.{q.Nrp
7K3}sۀGI/M^Y)<)[kQi8w8ft8w8f4=iն!z˄U:S*IXJ #<tar,^ô㖹'0ڝ<&v6
 <V{G*?Y&w7RέM؁ءw
AcJ:ɟۋ$mڀ[0>LLuz|#a)
s`^LwG(3.h8pK/møc5KPD@Gl3='?br#G#8h_}q([[OrP$J6J]{Nα\MAYOKZ-]U/ۡv
_"!j(/q9-8]a(1Ɣ$)EADwq[N]
2ܛV
-1en9Geۻ叻:#x1z{̣x?(HKi>ȧd-;~|xUt(XTPV@u( G01|8DfRMefUj.Q .j\r@	$W@3hWTyTQ%PK   dO\Xl    9   org/mozilla/javascript/Interpreter$DoInOrInstanceof.classUmSU~.lrsӥ`hUX^6%)m4$JZ:sYt˲w75~ү#Nsw3#i2s=y/^941]odٶ,<OoxV;(TڞIߩ^,)7,
n2gs	fX}!cPS[:cJEH1h~efzP8:Ҙ4u3Mn[nUBm2dcl]Jk׿bR;O{xcR0GX
'1)"vcrs-wt:>F^f%0RnK1'-*fasst\<å-mJ"2LdNՕlŭ:
uEt51#Zr&X5)=KL-xdQA/|(4:̞ .Nc e]Q852%bŦ-*㐊0eF^WX
vOptAծ#_%`VG#MkCHqPΪP6ݎg)y%Kcn=8>?zqL/=;=ũMu-k$6w$hi2~諎!bz$@g(Fʬ
I>/;RgbsOqi3F3qŘ?ƻċݧL$2DZKF*c|,~Hw[8lF·Ձ!.,rbEkZbR,bO,@,I{/
$#|aGBp+$VeLPq#ht8i젂;-*=\KhQ%>K*\!:Mz]KD7~?PK   dO\Eڳ    8   org/mozilla/javascript/Arguments$ReadonlyArguments.classNAƿzrTji*%$KF3mǺ%- Clkfݳ3ߜ9g̯?~x <q*%摦"#E`i{vUaW!Q}akAJ,Ȱ`_'CDйJXM2
[ə\at	VOhᙄTHе#Y${oWpݫڄ[(Y#LpBF)ߑ5|
^E(%p{M!lV2{XΛUlq=V%ݨ͌	)b0*ṫQm/e9̞fL֖JП6B	KSAUؒ}$	AM)pJСER`b˾"^u-
o
Qn7<$9f*uM94WZB #+K7CZ)]T*w˭K뤚-?Am{/?@O,~=?c#jVUDh
Q-bc15y^I2| t}86:;w>:~5O)zpbu
N/9=,8>+:׌N3:MC@\nFg]ЏWJ%+)FM`mUd?X3"C0d2d3d!:C.Z	/8'<e
C,Q?PK   dO\O*)    /   org/mozilla/javascript/Interpreter$DoThis.classT]o0=nf-
h6C/EjH*qWBB\;S5mH9ɽ;o O[DY;at/sy#)Q$b]Aq̐|ƐTCD%X-{
\,aMG%;>CfX4a[RZӸ'$9-G.[2)?x1)1ltf04/&2TS8xhH~;DWDNrG4.ښBf &I~*lT94ߒ*R74e]9IgȸSOzqI$ͥ͇)q=O'DVCQuE,_4Ű~$bMzzNllS0z&!ְBg2ti k4ra|3nPl%	[6V}(׏`n:¼pǾN1;e;w)c*ecC-cw=H)5RQ^C	wPPK   dO\              org/mozilla/javascript/xml/ PK   dO\@<'  
  '   org/mozilla/javascript/xml/XMLLib.classVksU~Nih	"Z.Rmj# 7[RZi)77CXfvO?8p:2d8>٤M3=gϾ>?bkHх}zrnx_J`Ǥi@|xd%$5AZ`q˹iYzW׬R0\ʬHTT;_, zђ#ԩN$,oRn
4` =$蒡VQ#\. Ntc oiؗ/p죊#}T8S_se@f3i ?9+YZѭ~txRn)r;a'0 )W7ԬT^g)S~1GCW¸q4aX`|I@ڿP*Qd5t8؊3:nxg\q.1ݙLw!t	

\[,֒bR)z2pQ9
SzMJ#%Y5۫U}7eiծ[xF\ 1h`rV)JwO_[+kbB3=#j@k閪y@m@`'j<ӫ!em,B|ܲ]ZvBn#yNu셰ڥ䖀fS+ !BcDt71+=C)`knj榷Lʡjr.˻zR7*&\}\m^I/ێ+JEڊ5" XH~T
<Xnit!o{ʭ~yuEW*HZ.њo,3ϳMo#dq񡓹LC%6Q(o@4FZrj!gMz=ov_e:CyۖRE-8̳-Ƌ~嬟st<ǷGk9Nbb/&L0O8vdP]VȾBx\CS?;`1 A>G	3qdp20Rg9ۇK|KBB76i`!'3G!0r3|%9Z`&ˇ(MLGP`VZ9`/>mrQ2 scq} 	<)nA4Bo#?Ǖp,q!EX
)O9Ki2=rC΍t$XƵTV"#A6H7"#9 ĭH^2@
_H'(#@Hw"V?#VJs$J-HcO}l e1}XAT\	~PK   dO\f΂     *   org/mozilla/javascript/xml/XMLLoader.classj@ƿmRG<CGAHAKHXezP]B|0>9~  IVeJ	(}Ts-Hzn˕(R2k(IYEJ!u$f"9887dbXxw&LIBvyQH3U,eLg	j5т{ã? OVl PK   dO\J?    1   org/mozilla/javascript/xml/XMLLib$Factory$1.classRJA=lYkVDR(AiRa͋"N!NQ~RC?U3
Ԃvag{,oAƈRPgX7vTg9
+O]T^qoϽWs\
ūjK}KdJ=L@3Fapo~ҽe}=64{>Zʱ|SpuȭY1&DTRhǝ4z4dߜBH?tH{](SnOs	Vqaw~/L#Qr1^ʐj-l%S.tiC,;B-́E)d~
62`XC4	ٰ)CFV^]6mP8d
,iݝ yϣfF
PK   dO\a    /   org/mozilla/javascript/xml/XMLLib$Factory.classRJAIl6c#C"<(zDaE8Y8aav"WIP(w
(*sik~y}|2Ț0l!P+<8G4CnKRo3dSyHu ϝ{Js١v}{:R7LaJ?JDrgIc7cE:m*%7ʕL/eL?Oؤ7{JpM읟,K|-1T;B=_"\(`͟8㨯<'\M-(&jKZePt2ލ%شɂ%Aqn!#Z~ $1XEހq-L< bT{yN'LS3iw)aDMaѲ
PK   dO\N    *   org/mozilla/javascript/xml/XMLObject.classURA=Lw-$[
2
ԤC>h~'X+)kt߹ܥow#K@QF1d=)pj5+bYUdꉵP3+z9nD7 mh~PV؆$#%0F >=38hzB ]5]ʷ.$i;`6뫵T3֚حՄTՉb6][.:{r7X~Tb@@߸6媊UkX5N'Ƹg3T<ϵRJ*y,q

4NbW.
τ꾧<<.[tt2%Uac^̭"՛MTĶqCv2b;{g|U.mw60u[SR-{v#]}^A=PR[7$lT'/qI.vs囶&&i	O=hJl[F78eGG/5r@dւX[d'u{nlHf2)/VVw~
4A^ *CHqǃaJDAC*{0Aɖ&0'=٫)Zj!E0;	"I,r1T(e-<j<!^xd+[&D-J̵@qCge&kBbXT_7b齁oN~g*tr[!31:wPK   dO\rs΋  +  )   org/mozilla/javascript/NativeSymbol.classY|Tՙ̝B by&afr&3qA
*ն
V_U"Tv][nw]uw$LGrws{%tBE2U۝.یF:X
Fw{QLToJppѰb;Ȯd\C!^?5qBmEeT"f*fcq˳c"&1űDZJbD0d6n$j#V* :1¨E11ekjfF-Q-SҦ՜JZIkWɋ3e
Z,w{e|
\TQ5/13gtu5A߰v;hkHW MCh%mzl(gup.ÈMP*/uC
l$T5wq65ׅ[B#*AQ1V+r- \;.sI򃙏]+z.q(95WWt鸘s6S"O,*vթ0ôƒ <ӱK'ΤBܮL2S+{Q{hQN]iǽrEX+tcs䘏1w3P\ZGX\[C-֦?'Z
XGMeF,#a:lGv<p{fWTiLLјM>E4FCPDC+N&[.
xc3o#5kMF`c}HÕ\bi2jXB(%[t\%S`k[%\\W}-fWhgo>>ZجTr5b1iK8
+U0b:	g]~6^qyБT`CkX7l:,ePsCP/m)N}a$l3tO<fO npۛHG=bet,G&o75I[t܊~ÎA{KCǝrgrqfyLkm,MQRZASYIP1$%L&;8ZyWt]婼؏^ܯx`ְ>a<=!΁VJr_C^<G7aźM1hZ̇^qro*Vo,Y%PxpY>8хx
Oa1㝄5q݈;%	#b><xHǊ[Wb@81WO8()_\Ŝ/xƴWœF|ñk⵼U@!XiN.5wxEw<D(&{xwfӨ>Oč!ǅP*Lis֪1ie9%^xPlmM%M[nu|f!{3Ҧ5{qZF)k7,ux%&~ѕP`;*7{KD?
%;LU7K콥`CEx[>4&<ܮ?|.ű=?$%tC8L-#1ءhՉ+n{,=B=cҧCdH:} XlP\7m稭ׇUN^s5Ft1X!?MI^*ҩX؝3(Z,#H{v7d>~
PJvFSYm6ʱB9
{N܍̏zUG-R1P)o۹:+zෙgÜ`N0Q\x
zNzY~:-sG;2ޔB¾}$oZXuH6[]enghTGXaokpFS[-cSiHcP^Ap<nv`ZjYu,Wy!9zkD
3}OŴV<#|YR#cV+Lcj.\{1jRDVZ?d}U悘ޕ蒐JdYŰ9|pFWB[
f*͌ևb{{	k:o^3p}Y}C0ik
-;$9es*ӹ/en|JXQJUv3*/EdMcv6;c2߅qa߻rْj_Gaˈng:bc 0//||\z)큱1oH䇑b%y-c"Nj^]<_%bDH=,<{	O0⮤|$UEsWqgP3
r{F)_@8_[vG!do*j':|<8֌1iaQ!}k3r AyS:$z@iC_!ǪŴ7,_yZZ7xl<[L{y	?=I_S:=MwvXRNpO2֐[xm舛dr{o׺!cNAH2X>x!!OrtTN$̔*f+#Ք|tҸܾG?f9|,x06&^o-+QJ[K->|t
ЋOqЦu7@G1ۏ5Ձc8Ǚd`V8#l2p­~̯.
\zRfV@&êUcU>\a6U[{Ugګ}W=}H٫>\kէp#f\dmοg
(BYTJTD5a܌O܋0.b%xu\7YP_b1RerdNUJ]Uj;ٟ)%/	zl_b%+৿(TU?ۏ(F o	44]C)
.ڡP̱Yޏ}EI8sk|W3)4z_<Ư$oe;ǵX
j%"8+OibܧB~Cb y	BnO_C!ge͋w EC(E[J}Q<v8d%U6LDzˉLX	^(ju-dfr ( >D,-/GfFڼ<ُõݚcM-V˲ղl5_a>.éwunHPdG3&YΚ9&Y("tGqX)r&<pp+Ӕwkc;KY1լJUY*U9*Mn.]\=t#cЋI!ۃeHcDaET
a,"weQ_9er?&fL|k[_s>fj1z.Gp#ĝ\o$q"TpBlƻOx82+6k-YlZfcbEV06TNX;'1O>	g0lVvx`ܓJ? _; nmշ0]z2kMlIx8KЍɶu|$Jxs9~0L_d 3_lbv8:x[cΞI?[$'̦O7F"%oGhHqH4Kt%:Dώ ѧqIި6zw
DϳD2g^/!Oa1	휀*ȶMdr9Yt-p?6WsM	e^/Ńv0'.ky8K'N9s/k8F"UR(<9<t{S<SavX83\tIo(XO~-xO~7ꍏskԮrUyE|-=$qV]BSi~4ZP`bK`
38Y)^<[mǕRaȬVRj Xs*Ey	ObjP:_..(_3p~=zæHMo^-Q37l59aI|X#ôSW|rQM=*ˡG%{w=+ߛ}?Wooӻ\Oށ\zrݐK/KӦT&uHWǩ~S	ҪêD+xnۜ1E
.4IMxM&ΰ=I苹	I]ݪ>Z̺y}}N^t;w3w6|U8rm:JMiGn_bd#;}i~^
/=.>G8@
==L@GW =Fe:CGyN(oet? PK   dO\*
  	      org/mozilla/javascript/Kit.classX	X\{aH faf"&**I0Hd0y$nָŶh[&.mSMLcf{>|%x
TT^[z|uuF8#P)d:-pTۃ2x*]Q=F~=fiWCT$>%8oF
V̛OdzHDq
uy`$>ݩT"Z(#ME2QcLnMecF<sK4,^V;Ϩ`B1RQ>3FA32یpTO#]x:ʆ3	_ؼgӅ0(qn-شэXap@sJō0q?o΁VhOiX3yKC&K,
;o
^8lR-RP6<gdA	KSam(:Ճ^`u"5K\FV&NE֐9di̻b1dztΤU wbf-vqs´uR.p(pCz#,Ծ#՟F65?JgSnd	[UC]6rCc꩔>N$'5LZvWhA W
BL$ڧ'IJ`m}EL
zЇ~nLf"2_wTD,5nd,:og)&h̎,CFˍAa(l}ͽX2?H</PCBBD:{}@ʆ=3DO&8[2ֿQn`\&+!y0!I]
GiCS&dp<دG
7Hxċl}d$M&Sng/-D/.W}= KccdMn"jm~)QxH^:k5ęC2	ZxQ
7!#B=cŅ`[C~7^,W{	646noFnƛ
m.F6.izisQY[$oWeExbu%FƆԠ@uݥ"ݞT2F:KM&hء?$[mi(23ϦovPMIK4jRU#gyxGp\ '`..~`rFj`<OƨLrJF	SفmHf0ifY\	2=ƲQݺ4҃6^5[LL>679{]ܾE)#gUCgp(j$>b
pnW؛gO>A0eH\ĸ,jA=舌s4^<Wlٜ.k6Hz+ti5lpVc,ޥvΎ t'=T=cÓZ!-2ʢOٖT7DԚ;O9>MkFaWQ-!fA`dHI}2WN;]8ogMР3diIp,hٜ; 	Ff9-s!"[4OwTHrϗX$>C
\ٙHdI'[{څӦN}dEQW o\(o74a`쫺
-{񑨑^L$&"o$[E"`zqYۦgKn
'-,*x'9ʷV= xK*K ;9C)y?WRXaUX*?D38,o-ϫJh(8ӃwV_]ݦlQc7>Zg[#-
{2G<kVpe%9˕U<siMe9ރvYzuNۮrkGAMKJ̀TȱWZ{lG/.2]qϽ`VsfQd\wZ{i}SJ7A[w/TfH]ʷˈD;q9մaFJh
w0xZkᜅ8\>=`㸹򲻱 l)4T܍ʭ|m<rT)=OAuߨhAzaŻA"cH^%@BdbZEr
6b<etmANla>	e]f|5ۄʎf06=ͷ_'NaFe9!zc?ѤޕԤXw+Φ#^i^<goaBYNV},L-4әã%o!]L謓Uxs&Q|̄bE%J<\ufH7a)AɁ",;}p	R8
!,+(;7P߮$߶4)ZSd]2"AS	UWj$F$*jN?U =laCÇG	գcqfc̢ǱO`4?<Mu~AA	wA9@Ъs>D#n"l倿 :zBĽ${Zg!k
-L>UL[zm1&Ӎ!Aet46PSHT?g~+ݯYvA~N'BWp5NHg uZOt5g! 1letN=ᲳLt|Yj9{+	Tx})+}랜]]dz?mb}k.c ,4	V
j'y,(V̶}13q>9
_J=a3-SXc3jO2->1[LQ$U.У1UX
IXbMEb[X§r<e<UTqN:!Fv<cOjSwb;Sn*V^JRl"qEH2{-!ZP*>4u&.&[8vq}++{JW&ZϙY+yֱ>/K6mPEA
_0tⴼDi
'eof8wٟ唊@	|o@vȌ=!i|)}q9;&L)(BӇhS;PӬG\%$ժdAUo侩QXDϧub(|D;SbVh-X/щvх6tn\)z+ы"QчGJ\E7AV\7f\X|1P	2wJ5rsrn}3oү#>Ȥ%ЪOAcq5knNX~BxQbqSAj*paTp榪SzS/lC'03X#7}M&b	,ɂj'je@QpBޕZ~M޵v}2 ?u)^BmoW PK   dO\  y
  ,   org/mozilla/javascript/FieldAndMethods.classV[WU&.\Bі!	
bA"0ad&L(苏\ޫW}r]۫ H}&R`$s콿>
%!TAPP&r֛ajy7殾͐ *C͈n(Cwdy*V4{]2B
NB!+cj	a^A?CM<}Az^CY
uq[3݌j5Ì+FaЈ24??llhДdT]2l˵m{"
t6ANA1+8s|tU[uԬM&<ѰX
.!$~6S-(.tQA/.D"1iвSUqT-/@C[~t5F7H04-<`ORL6(WSxZ%YV=襹H|C2Y3+g}7a-S-Smӄ39| Lmr]ˢۘqLP .D|xS
xv$^y>U-~W[
f2CbTbB'@is"2(+sf2
Wa8,I㪂E\cOjk`ȡ~mGun,jCpuzP ͒귥[
Gh*M-]jP+K%|Wpuj{8(N 鬀$m\@묀1c#S[Tu7aN=J%Jy*Er~m3znqP		#(
%uᣡt-*H8%UatsxdK˫47r4VDm4SE~YܤwYAzһI^zxEK>!bHÚHJ$Κɧ\3ߠ:z7z".E{17$!/b}/K.1;XB*~t		{1
"҇JYaIKqH_`H%RW.}qE
,ViN^ Ѝ[0H/G/'BˤEFUF}^ 9PK   dO\DU    U   org/mozilla/javascript/AbstractEcmaStringOperations$FromStartToMatchReplacement.classTNSAN)PRsᅉ%ML#I6oO7e˞A_wF>EjE
H$;3~3~^8Ca+V}/ >S_D{ϻV/QŵtuG$E("=27d$u!S^-`BS(2h/Q1ar<Supu*ۚ+݉_ra̐=p)#=Bux7 K<JOcVɔU2LޗOۢGZinu422GCZ}	`F!qB[9_'4=S6Pu&8c4yJP_f'0P꣐x~tWnt:-p۲qel8x.@bSd:f5{[z+NO.p
(45=Y<`	to~z@WfIF2WѺgh[!X`seC*]fr|I7  ;ày\.crqh7IZnFC䭶p2"f|g'V+c
,ټ+xuPK   dO\aR    2   org/mozilla/javascript/Interpreter$DoRethrow.classTmO@~;po(y;NAD-x@h#5~P,-i~7QqڃjPCMvf3<3;?>~0,RЈ&a_-nxluooʢJoּүZܒÃivmy!ӻ"UAVhIc}Ar)2"jb*Ѣ Z L|.9C~di8
NjhNƐeOk8?zt6.:]--Ka:4U_vsLut)!K]bh7?5qY{XYz\*/seBbb+CdeECP&-+ՍeWr,Pp{k65`ZqA5aUÎy-y\FoY[=T]CA̩כ9Q~%Qﾰ<#6oi;oV!e/""߮ƌ?D
{:M-| +d$>>~FH@PkOl6ڞ@)~@gC;8obfrA+ro|\tbu%
*":.i#D)Mu7"&>
[,S$IvOPK   dO\ß    +   org/mozilla/javascript/NativeCallSite.classX	tT$%(mQ	AP%LfBf¢wpEQǥ6(7DZ\PXZc}7BJNO'^;;,M
|~`g'm5<aB}$4!^ "_XS-_$hHD@1.
MBNT3ǯәv|sshMp0QOF*ph@עzX]"=p/P?Čh$tH
OWz\L,
rMѶ$dfGNO(:Q"';[C?~wE*bC<v	@7`S<ƪPV2T@\h4b Cj@
R=<7Xk@C#}L_@/kns
6p!W/oIPUѯ/	vI\B'
Y1V`@~^57*^宒p)a&
8N5/oҳ9/	E$}lްR
e(.4dwPwǩ]$LT;*5Ta.q<%2kLi5\)}uJhg:֙ /3/}uAӨ80kh<
:ܵ*Fh|`WCR·R^
J]
JtuVjD|;zVzHD#Ѥ!P`Я{Fb:@IJŅm&մ9q 	Wc0:#"#|iVfk5\c6jv7s2Tߨ&yteU5˧]j
^6՛6[5܆
nOxexp}:Ǝ`Bci"ߩ.u1aD)pNg	p - hkd$\tz)Գ} d}Hʇ>ܨ}?GHoyzSOs_ʅ'10	eTn}ٌڸJwUqMU&jwmMLFHZŐmh[0'mƛhx|tȑJnJGc3|h?K!́L)PJTx!cv)Q⩆hKI(ETL-*QQ\#/&33EW̜jLKnʨ՜%A//ë&BFm5bB/㎘)`tw1d2a˭30qMUqR0m
CΰvܮUdڥs9lJ3Y|SԄy]O3P)urrj6OS=~D%4G ӸcڕDm5BBm]q+M^]
5iUCd1f(7cNM*bcq~o<M)O%L;-1fϑ?O5J~[1//91NȿÿA~w$x\S;w@
ki#-7雕^Dw/tM1
]@>U|>>YDVYBiiV*yHroejEsў,8MͿL^`x1x'x:4}~F( 2:ZW`?5f QdŔHܼ7::I8f!eyZrO,2+ՙrc԰F& CC'dQm2[%l^l!n`a{9֋K7AHIsHIHkH]IHI%@z%IIIHG&Eڏt4i/KHvhF6
+ά(QgUG9%?؟
1#Xw_I;u
oZ/0+(
RLYMu9JqgXWa*+*4*r
r}hlF+%<sx]GOKK+ o=(TTFp_r׌ǟVކUfLlLl-4LlbbMl45&6؃&=nbMnb&^61Ca!9"'{aDQbo;d;d(?7
99ZQiy[FVTbxóBx7Mag6+N\y0%ö
sSWgk|"=!=>
`-8iŴxK.cZD[^[NY߫2بyqGՆsYE*ZUl% թǫNCRO*
k'cH8snA=w.nV\bnH"Q!QQI|O먧X=rwBEJv\#0y/s,nh}d3\ǥ[q0;暌x)6/z \0Vc*(2)
:U曚M*t5Sd$[2go2t }HXvDpSKV?v|M_TZV귝@^&//
3{4خ)nY'Z"69wRרT
*8UP!W*=TZDt*-op<V,ye6/ʄ
1Onuuϩ~gݷ?u
i
S?<!I޵~rw\Fƹ2us䚳?EGHGxF<	F'i劕2o1ߤ[a
XG69H$]q}Qx>r)1dr9]] ٻ\Ůp(k]sȡ]_PW?ݑ(
PIrT|#YC]Q$^;\Kowی 0_j$HWMcVV&g|M07dmm&L"v>'Q(;$RH3Ǒ@G2}ԑnT>i|YGy4Q}U| ^~=P^|"!La1C\|/Q|)1q_8Ϫp\|oN?I|OkŊ,%',~ŉ-^4߷:Uwh5{w5{q;ֳś=9zҕ{2K/[#35S/-Әmg~Z鴪[9/PK   dO\d    /   org/mozilla/javascript/EvaluatorException.class[OAӫ,+-"zX/JH`R`!] ~?Z$}=s\
^[H EF l<m\G>7ŹϐّTs=cJ]u`*KS[qਧ6޵1l(A: ʶ$3};inwBMы6
XhO9!C㲍h7gfh4tֱawE(aF3jD뷩?K^Т\x䙫Mp=vԩ2T/Jn	ť#3&ۙӠFjH[すZ✶ŕh1,|%;!}
0 ɩFstM[N,V}-A,<qr쇉yBe3:Y(
O0V	14MreȒV15+G}5GVXT4ӱ2ySoyZL_QP^TQۍrjZմU$_X+Ĉ5Oot
W_e3ƹm( 4[qkKcp߇p;^O{9f^PK   dO\D  H  2   org/mozilla/javascript/NativeJavaConstructor.classURE=eadD& .Z
5BKKfhL/ 7ViLI|T~
v;gs9{(`aZEڮ^={<#յ%F/T!Ő+Wڃ(bЁa|:rOĲ
c|"|]kfl["ZR.c(1\?NႿoNsZ<f _5|-avowFQ9qࢇKxa4Rз㮠KJZOˠ֔&I\vWqҝAiҖx@|YKvB{`)'IDKG2ԋ(x
L{,qɈ*sM,dCj2*Ewɟrh=aXwLdKx)XDm
t`[eއyvl9R6zYmg#MY04O8Yq:ےY{r `{99uOW]
&IdQ5J9bJ䑋e$DZKm^䋆4@YRJ	"V7S|梉5Fz!=#Rgu6!&p+LS^~2j?)2	%BAdV;ř\upߡt#$`9.I0Mj镡6OsE4jК?soP{9j'h$qbƻV:x隆ЎD;uPUv#y uaZ[n_}QIm'{fLZt-b<=C):KX19ip{ K)]XTR_Us} / PK   dO\c=  l-  .   org/mozilla/javascript/EqualObjectGraphs.classZ|Օd&|@ y%@2-P*`hZF&3afhZJZ/kwnVf&3ߏ|sy~KxDPleÍAMH ݴaMdY8N.wX 6D}p%&2X(.r1IPw7n	G"&Ltýɦgޭ	g[43j^p4:Ku6q7zzPPN1
U	h"v[Gk@difY6fb`Z^*;շv%xPbζQsHPiucI;<Zl9b喾hW26Iu@oo_0?SsOn>9&2Bhے1grR]l<ORk2a"#5GD\%%6bՠ
2G
3ԃxlPEs+M ew\NA\XN6GBAl"1֊4x</ZVXqK>)vq6Ɠvh'xnjTI;B)kJo(A:mlREwu{6׫F,,]+ -D{@׶@7Ɲ4k^ G+zԵQq3gGAm܄mi}FލC%;>D\/C1--@='~ˏ>Hy"S<LyO7-6ށ[KG=Nd ;m yd+:Pzn݂#4DRU^u|sZs)+ߗ;0~{AI;'[&jٸLs2T5jj<H}OE.6"[Pwъ`7*̛?O-8 Y|ƣ`;4Iilc6>ǒd/,~UTm|BLT=]^"I扖G?ʰ)|	eKOo$CqT~,hXquREÁHLeK5z1`i	Ӣ2<m<C=]OQвђ
5n1圱+c}ь2dH_P*Ϟi:Yp&,MCOt.'wᄍE+%dgN`Vd*]8EpjBYx55OK5hݜToﮨ؍c|Y3ar(+;=Ώyu=@9*߃WYY~Cd1XqYL~
WucPƿgVH5oiB?lb6wl5䵣y\~c]iuGtnO_.awҬg0(Dժ
Z!on

9;xWHhe;={<u RlKtGsbxpXtؐlgJY48rPҠmKLd^<4l,Tu#tjŗ2Y`.˺iS^\HLd-Uz.TA`W$Y2#NSt9˖]}/,A
Kk9jCV{-5XX<d"w>mS.NxE8U-Mr;u*j#<eX|b[P7K*J-5OGG[-gaՒ*G!竐|5W5"Qws \}sWלr!4R[RF(5clZǸ`i}o%_>ޞV# +lYLU0C}/=-YC
s%`e,	g?I_]<n,YMcUdCΥdM$rWmE-2kbږ$K|F^ݲIP]"StwzKnrc(2[
s*Ռ9F];JkmMk˞8/we?,.7t+
[V(gϨWs,ү>hgs(ޮ7wIWrk~Nnt8۩ctvF;
 ~\M\+xIYz:	o"^ƍ|]eK8Ucb5X\;O,zB[C;-9$?nsǑpP9H͢b}pTaby}˩jW}GQWM:gx<-tu
*س8맖:=J7]^/nyoZH)Wz2ű);Px)~Aٱ3Fny	Wai[Ό*PIg&u0ƐqQhMqM[u"@mER=(Y,늤~)s*5aM$Uc6B};Hrj}(5LT''A&<m~3:T&rDx?wdptGl[(O-L8?OOl3RLΊk`$mŶ橞
1jt<=oط́H{<CfDx$|̴`Iy8XnYDf/%qsq)#		3G ޣ:(V<mls"pa	E/nl]JIZEٮ|~Vߋh:
^نA6"q(6\Ju]ǽ> %<,t.e|˨
:h%)Wv
.d{1^m
-B-OqJ(2\"1Ήflwy??E(\X2o){|^SJř?uX
/]|<P<}t -:sflۋ2f$<9q0R:|èʶFgƯR-%j3_ʼhgj/&W}Oskuǫi
~5^m6\T2d ӍPgZR=]ʹ4^5r@\IӑWltҟЌHq=
olF]H"-ŭH.Ù{s1܆CCx'ŻxC9އnNPRP^RL$;+⪻d'{&7
=7ΓTb Q
˒*TL},d6%o`x,)Ht LS@04;n k?\27`o`i仑,7as6ClTll 5fDmpQ+owdmONHi8۔eò+Ų,qgn$)$Y>{IprvRl
F3'܇F|@!f	G	x{3@ %Շ$xO#x	ū1$>.5,>iƓe>)\frV?)ر{vN1wγT;&?7a[
P5%!-}CxxdXb&n<vXw45N+9o{]N6twSi(AhW:|bdp}Ͼ!gESN@T)2<la0Id0dp
Ã84u `<MG=ä}gaL!3qނaG_`Fz@8ƌsK4/_&l^ ^$4x_~	ŷk_0u|W&er,[<{&˭rd=b6)w碾wm '1v;|$5{TĚ, QXpqk8Ʊxl߱'0}^2p(&~9&q1s?k_#njRuUB]&. n{*}MT.jS6\k!iėm
YjƋBVRj/^\O&9^g3g1)(@0%ϫ__|hhL3chDC#r{EnnZTVy{.S`xM gOzu$'D_忺V긇,)ݑ:O2VqCo8͟Bxu;8x':4f0w&?qE(4/t_YY;+RxB\a)#l%> >JL A= {E\aW*p@(3eJb&,	I-C2Ay+nQ5C&(~k,@T~.,qӛMSe1Gh0|H3\nawj=$Y)7PeȦ.19gV[g9߱WZ%&Z:CƯT#MB"InFa.ȣ7*rH-.[+2KwprٳVc*{e{<u	v2kkj
WZ}coIa>岬+hm+G>ndBTξB	)-Ov|.נLZߠLi8
Gi[CT7'	4ﰜ+JUA8c -ɀYC.gJ_lq|295cB*Qr%uJ`aGtJ3V蔛^}c).=/-!c;(
CtйW)	伃G#r#LUiӥV]˵YY
BXFqŔIeYOf{kVZ9]b{^f-)ߠ,;0]^Y䌫)vX*;i.#_y렿Σ8Kx
lC<ڈUWH"?!z Aȥ.KxZQ:<(=\'L[. |c0<3(MUi(fPC<*:+&<;+eU)kJY,VU)m	wVpJ6#r\w|8ˬc[g#sĳfT,1,Ng8|ÜB{_-)GPK   dO\=H    6   org/mozilla/javascript/Interpreter$DoRefNsMember.classU[OA^EW+(j)BzH>iqq[wB|ï0&o23Tm279g~	hC#!(QۙN쇆ix ܪcԽtSw$yF3l+k
e6,;JMЎG\C4C-X
sDM2D\OT1lUP)ʌza=aZuQ/{#	1lf-bCw-~CNiܵ룅/2-u"خav2\dhc7ptk^&fʾ(5,PgQ/6j0lNpljدj7)9WA
I1jRKC#v9/k ~-\^&xA=E$/v
vU1ͰwנjISG.d}r\[X-_\z(g8XuyȩM7oI]9_PҔ5u{+ ]Ȯ0tUÎ'5vé1CݽR/]]"a3hy˒?]>bKrtQWH?@E7R4կ4A$H#[ 5g$] =80Z X@H$yOj' 5<Dtht5(OU D}pPL!?A@z_aX[fx/Ϸ䴘<<cاq>}'ɇNa#OøӤE!8rBqR+ٸ>/s#";JS49\Fry)WH^%9PK   dO\'  3  +   org/mozilla/javascript/NativeObject$1.classTMo1}N74li
P(I6^"BzXGuTU#88Q%H%`ޛ V@.Y**#u"Ðׇ'~,Ǻ^7Uxk3H}v
k'Em!zW2
T%59mZ<ο³ay,(xBZPayg|iqcJ0sĽi`ܖLF=2$+mS碣2aJ,{!jLq}GVܹS"
􀁵G8TCq
<ӓ/&͐uiSVrľx.M3tD"?T	U
0
:]e8~RZQ$fȓD$X=3#=ۮRGuFPqZWq{M`[
ZwFwɞsk;~Cp
nO]N]ܣ4tZ-6ivx]P ܒePK   dO\p|z%  `^  &   org/mozilla/javascript/NativeSet.class|	`T97,yI&A,)JPY% 	 L` 	
(bQTZW"@uij[[{uKw{&C»-{{/>DtzKR\jP36P]
X\U5*&864uPU)p$?)_.r3s`lK.JP.4(ۿ</Up'W(obLGN>-˔HUhjVs\ԙ_;J&UDqQCcU<..WaL	LߞEp6TUjԉwTۯm,#Tgʍ
IG2ŧ5DQqW+?M`uԗHUi@玓iTHELC5H6`J( ZʹqPՆ!?M0RD:)6lSNH%pĢВLN$ Si
~59$HCbIݼh&wYeQSz	Ɖ㙎Of5hו5ц`?3@6LF85Đ"шܲd81eȕLpMM!p+;g1ƖՅ`KX9:cSkdvY/7Ի3eLYplaƌkkx]2L=ىd7#>ZqS3	EB
CEuE(ʔӲ&Q_7jrE)3y%{eP!RaăYפ2<\VF	o=۠s3J]qn::?ϏbYeEЅ	/b_@_ v1]]J+ڇ،	e$w0Lgd9ɮ_rn
<WsS6E:ʊ$^:km~^ku\K++攊a7a72-:EΖ֠Ėʩs+*[9jXtXtӱGu}_&6Ewt'u 31ׅJ+2PM*MKGlw/2{Z'k#>b'$1/=Kz=jՁٔ`="xNMAjcm4X-ɹ,nBeS?&CŠ
og+-9[lr=Ai\V.=7.ojNzʠ_.h#L)EMϸ7=KeݑGkYyΠd	ZW2,Pp
	}'*l+b4AebzW)2/՟
5wZÔoN42hOb~5h.1]51tP{qЫEt}]_ҧ.LLWRoJ+ćtWFױߨ5ٗژޕQgV0
X@[f:T!xMx+RGObF;rݜ{^fp:ۓKxv@^\|h<
6,3-~tOS;$	}L=ڻEʼr'$H4

ȅ|NU^.CVq]H;6Ƈ}l5rnةp1Z>z[%Wo>hGQ
</=pOӁs?s@Ře*G\:wFqeZ:Ei{nsng `+7}x1+$=tVc6&kv0i|-1NV~l1n	|"@-SʃR[7+H@S#DqdaH^(klPĤh(#3x<O0gnXyq7O4xOL"&AiGXUXcc9Ou4OLZjĊTf.d*lDO/
%(+xYLw
Jn2[!"}`K|3+i ,Z9wT@yyZUFc!Y!z*1x>fJSX_AWgW/4xTE#їIxԃ&ne7GpÑh]}0~$4AHg1RZ@KK`tYGGISi;V:+7blgLhéRICKWZyki5'"!Ji:QiXZv+^nlY[%x~g,X$~t*%/7
^/9pm|Wj4n}"q_׷bJcuOFU/7-cq mc~8̏Xn^kMK)⒠#Є]|
"5/r޽{|Am?%GKʭBE+$7~YyӐ*ċ=O<j}
+
Ǘjsd&$C BCv6Evfʓ
fcNX C.&y!<a	-/@ȯ
e'X[9gX>|gQaCq-ȏ5C}뭜1hwxn~~ϖfӽ"0%=[,.
ُCL	|g(˯.~?ʳ_[X``1ݼC>1dղM{ܴ5;ܼMn~M9OC7we60bEk3'#z/a8ht򜧡&X_ʒ_oQ\qWw~Ex~$Gt`&i.eRJcyݢA?ؗnV!PgLG:ֆk(=2(R_5:KMWQY*MHn>|p$tU\TX%ؐ1y?GzbZ6CMgvs30ey"5givqk~@8f򨊊壦~fіx-/~P|g9ٓÑY+M2E![;SkxR	fNĤD6VՏlU-=
|]Iee%b
9]9ҧTL}D*E`բ)JuiU㊛-,Z$4̗qI%fy&
o`(yXZ1 BkXUӀBaJL>5J	ǣ0_9gQ?qGB
o
V9,@:*ܚpd\'7^9
$$H#fS}O2w2ZsBU
"PlP-j@Dޜḩj>Z`GʝBDix0ɡA۵T/YHqhiHg <Η"](:hb.YKEZ!RRhHWJHWtB~./tH	n4C-/]fCݢnmU,~` kmV6jǊ$kktB0R]YZ;BhVtQDB
W\iAÉC=EB_V>[jK= 2!߸C 
?X0OA
qNa;:RG@W=2QWud̊GO?b۟Xę D6l#DނM{Tߪ7"ARe~u$üPQ}u~T]C.G|64Пf^^s5QŅ^[	:6QŐ8䁐;!)[X<&miMTs&@D5pd<ǧ:i;
3Lȧ8ِOuȧA>!υLM4o'@A m-lz2^6Z#]PH@˚2uE -W0652x/
k(Ͻa=Xs
xe9TH4I9Q_j~t!TL ztE'?i$ќM9@(*A4$Dy&MTa1%T^F3
:E3PT*QH`aTxEh5 x7jnq5X
4k:FKj(.FP \|~jybE}1 [oxu#SJ.]b{6 V*/NRBp}Q3=L!yIUpz5^R`jJL#kǿݔ
)zz?݅dY˝$0B,U"㱖^-0d^i[g[aHlIuYbV%4ߎ08GO5_v6ѓ֒`#y7^,X/baqYDbz#i64Tm- nA
1#bfa|p#	I7lfSx[昞aO@lftdVoեnƗDc*z{Zkm5񷭉8\uvws}{ڞ*Y	O]Vv-frV~y=,{Y٧[WŏuaVȐ	5ߑn
2ZGH$a`3n(?
?5?F]Ɍ
k4gb[>ooaƜW};?-ĝ|dy:|#Ai\VEmQ3<N=;khJ#`߉k%(Ot~x{])Nt猶q($F[Q8H{=[ÜR{QS*)Չ"e$v59/(f&g3(^Qg%wq3(%iMyhW̑L;g0Z̽J<n蜾ҋLb.
ǹpvJ+fZ۴-<0f{Li%X['̧]1g@_Ens4tf:H%Ax^UDH$5	j$Fn+Yn_F!hRaC\Qc])JAq%:8]{{۞nd{1MOS&f[CP<$T}EM\'5(M\%	l)%m\1 3Jw"Xa}>@:JxK2.hO5#nQq:
Ȣ鑁=~((RA-\Et/RFcA&-4.8Q>F?h}Eu9HKV@gg>j<F^\TT^M6R6H٤&O*=2ݢ&%DdabqE8%^ZBJ^),zPuqpj>v7u"U!.H"mRF3wRƔ:sy
+9~/(GHaGp'=*%Ij!ˎ-,O1ZdJNwL{2EȴU|D`elڋcgl{S4YZXCcB|ĸf>i'?PnpO3_(eM|I`Mcs&>944si,jg
Xf3\pΰr5MVwNihʏUq^:"U.cT%Fn<z|)02J0wB ]r4)ӛyareOd	5ü]5yo^C\myD0fvlII?+e,;g7_aQ1<kJr9кH>YGu),D%k%$s>Nd$+ v7\|;d_q_U<0;S}4n]B(~ԏX艏F;`:P5Z>xZN#O<kECOG~';<>ੰfdӹ7W¶n*ID)Yڀ@cS31!륋U6·>9UglNt( vዑY4at&L2큌$Thj2[u
Fdl-Wst	Rb{!{@tN,KI<[@'GI}#;}	fZh(tQ5%_kcu!䯦DJ)reāW:`V@.#:.IW oD;ip)4exZK0J3HR՚T	J}w$lkdFqHd~ ϵ8]TV#aϧQ&sr-:ZQ:FZYgj>nH.]Q3/gb rL_v|%?rXq*>=W^`p)Am'xam6F$HeU.\,׬rq-^TF=nR-R'&f#G4p`a|K'@{:ُ	nn[ck[ֱ~[:n:d٬>u?:ebw$R!PZr#9'`~Ҭu	Ɓ'8фCKk[%{q!c1cx?@@7osل̥eK3c܏ s	˯\v<w`./H_{yW7
=o7KÊfyڕ|;z}Əy!|WgBCZTc)f^`> |0oHڹvkWٹvmVfmVfmJ܆OJp>.m؟6qps)nd6c1\?bNH;͙x۴!6ٹ~Ҵ_/nh/&!@gšbdKe[`"&=B{0OU{c/uWاPJU
W4Vyh2Rei*\:WuDݤҭީpzTӋ'ǑcՇ3Bv60UCѠ4x`1vnQwEm.Cez
E6T@MMT>|<,Qx`q_@Ur=J[53 Gjr/Uv;@y&va@M4)9Sz2g' 
հC	ȫm!o\ykc0Dz	p ] -<ak
u@2pm9@_n@oz?'"GR5ho7+CK0*$j
WN15\DJ5~Nթt:Qڬ IUCoZ@_0}T)`aK2,
kEmmmm3ɯ-<u4(E?Q|UM
D>10ͱf:Q$PiE3Y5ݮdZ"jC]vbu:d=]=KۏŃ.mjZjdXȐjȔjx/.@S/롔,kdH.)ڡ1B[]yToUq68xq>qq	z4Q]f+(VQghXMWbsu-qݮn{yz
֢EUЇ~nO1ZYVW{VA06"6"6"vQ6"/؈c!b4C7R]M2!
jbh!hy3.6<k'ե+$Cn]Tr	^h8yMfth]^2Z]^2%sV;[``RZ@X%GJ?׏e-	xslO"UsgAx +xYxαF\ĳвU\|m<?6ԽCFԺMuMuPQ붠mEۂZn0VOOo>Mnڤ~Z[ڥ|>R/ /ku%W9W׸38<Kͧa;Wy/;vUsk6DqQ?Y=(*s'yb'y"\\VVDfITtjpl^54ӺLw&mG5Qgُ?mFS@֫TUrGRSWIv&	Й$ dy7WN,Y[)6 paBHE	9͢&}Nh^TqK-KKzT?蒑,.5R23}^u:ɥ4ՉMpo
Pǹ7rÛWn>۪]zYkp|̛}y?Zlo<j̠89~Q; 7
vgʆ߹ۊYq{rȢIa?mh#0_o?OSN\GANohiJ[Z=Z
6okzߴ'_-/rLL4iy/Hkyπ<Z˄C-  t_k6?9oϧH@`ԋ|g'Q?gg:_mbi..k~\Z{ |KU'l_#OߩfN}8-v믣m}s8tǩ/yRwKԡ/o}):FЗթ!ۜq[ԷDan[wS41N}C/m}ݜ2ȡO}ЧЧ^_'g}jSߝN};_:9W7ΩoZWwSϩ/šr	}'>~Ρw:q[wSN}N}UN}3oJr	}CG/:S}w[ZO߃]t-\)bN}5Zud
[D}':贯S_>
۔gvج2wU1j{jBԕr2=]W8KN1iԎĭom	Q6	|+F
>;LQ4/Rw
OX-"U)Jjh%5i%JtY+VҕխkZI[Tط=Az@\N՝XwqrTZPPK   dO\}  i  5   org/mozilla/javascript/NativePromise$Capability.classVYp=gZ<H
BHȖcClaI&#dqyVO#&awKD$!$!PX&Px)>KQPITRo=IHc)J{=.~WN؈PQPjkvwi[Ltv
 q
7כwgf-1|6@c
Kޠ:ɛi!#=uF	:*9[4|}Ē1\(paӎ#'
"q|hp1Z+#fǞy\*It,
2kڹe \JE
HVY
tR
e	tB%+[aְc9>IuފjE4$M.L֊Q}9dg*
=j!Pj\*a@Ryǘ5l	
3]$bM.gj7(8oJl5YEԹ bR*q1CE8a>
Way5bΘ,OfÔX~:_?duήeإ"\;3hAoJ0@PVpN-vݰشnuڭ:&^-o)Ǟѐa.]kY^^V+IҔC~ݐ}y1(}v7߬K޶0:1jWmٺ_thDOb7$$J4lQ
&-2#2B^Pc67^D3i˒9"b^	CXnhMl[?mYMavXJ5zprBEz\ֹ8ynT5!ja,j,Gw١NL4GMO`y!|G
iD[3SAL@)9r
,~ ɺ.؀^HxB~vU<D휞^#.X 41I2gPVpT[>ھ͠hTy*֔q!wA	hRxr<;o;s,Gow>z!^#t5`$BW*j0*tN<L&GQ_ns&[@]8cBj~V2Ks7sjiۖn$C|2T:T+̳o,7UXR[*|f}7/ޣC8ut#`#G]H:QL5(/ԫX>*
.N`hri4up9
:8ɗPwlf8ɓ{hXh9,o|܉VL䠼r
$ߢYڕ?`&1}ʻSCQyw(C_5_Rm=DGw@#:7KG-Q*Wʛ-*Ґ|( Eb~/c$GTh}ēݑosi}L* ʇhU>"#aԲ2Q9nW#XSa|ໄ6Sy4H|KSr4E!

S6ߔr0@$`Ec#?_L\i~i22Q$бWa'
'*ӯZp$dr-*bODrDXǂӬtPʩx*/J;K
t߷'d|Y{ߥgf^O;~8~5PK   dO\TI      6   org/mozilla/javascript/SerializableConstructable.class;o>snv&Ft̜DĲ̂ԢĜ̪ĤT⒢A R?'1/]?)+5AYh9D3Qad
/-JNuqp:Ah#3+;02pI&. PK   dO\Uz    5   org/mozilla/javascript/Interpreter$DoRegBigInt4.classTmOP~.(uT8q
*o
A7Bl/:jviɟ?e<mɂ&}νsw QW1]wms
}ӳzR7)'[0_z}SZӰ3X%WV#H+P5Pල`HY\rRtuҬ1
e(3cXү[wlk7}B4\8
wԇ +b=*d:=AB]7FSqK27%^z'0=1%=K4C2i9M`}{u|rƠ}ad>.ZA>y5Ǭ%E>iS˿Zz$Џj_PnAt)6ZcǴ|KSj/*c؟M'g0H$ip4PNS3_>3
,Z
Bjh@\ Gp qM9qAط1}BzY^sX/r`K=L#
ZR
Ty<&&\%\#|
PK   dO\A9^    3   org/mozilla/javascript/Interpreter$DoPositive.classT[OQNva/T@PQxm%6V0^x eewOh|d眒B0693;37g._|rDТC3Ear+uܺeVl\vtPUK8Wp0dM9#n3hE\7!@ĂӁa3DCaZ8Znn["/#7Ў-,V\r1Nt8ifP)U.đDgp
W+.,7w<ΣWG1_U{\ch+./?Xy|o<10 lQ*Z_%^v<{QSY-]2G>3:"H{(y޶C7wX*H#n3˚9uME;95Z4Dm2W>DP6aE>W˞vd:9Ș43v(.yaCe|ppǿJDULj*R}%Ezʑd$Cުϗ蔟2F H C:8LvdcN|	;*w87ZRco=
14`hgQ:lY+*Ү*Z6щ1ڞD@\x&Amנ¿N\$nJ8a&1	N1<~S$oPK   dO\[n  S  &   org/mozilla/javascript/IRFactory.class̽| |nv	&%%h(% K)P,φ<włhl(*,(*`Al}>ٞgC09wf'!}ܙs~ 0żA@*0dЧ|S+B%ucjVVU/1H/Mԅu7z<.*bЭkV00UVWG0Xڷ)8tP.0=\WY]ҕC,/B	\|@S.
f AV뼐	4J[ZNb?t@tmi.dkT(\\SZWT{#tte`ZtWz2j
V'A7Ja=֐ċ5L W`xzM}]Ip")OA>ga4]9n|5Hk
X	rpA
#H.vZM
QjeWchG (G1hSY=3zCʫ\v*a
SN6fq-
ϨC8F`0&Kz-ʚSY!X2
s.P*[Bc{X"	Y-A&tMR0r
R "⛪x@և*p_Z&zW0CL`̡=Z'}svHA+''2OLa`Ł'C WxReuFMwR@hS^ˊPQٸ啡0r[D(
T*XD$bM.kƊڠZY?QWXA.XiPjd:w1(N
tCZWjΈ*Q"zX݃}B5fFWUc@;Uip:44@
*o
$Hmdf/<Ћ(4PdH*X	ōD}LLp@I;<eLJqlc&by	SSRzLNA%J8fRMM-ukXҳ1$WR805uEQPnPp#+=%޻hǤ ݜX@QpnQp+܆z3
-w]q}Hjul
Z㖣E%ԅ0^RHUi96!`3(dMO\SϤ0ma;HSjju6P+xv؄PtM
c`)s*~?+;ɪRkCO&2)O&F_QY$}Z.xρ,b8MHS6ѳ3/qŴ)hFu%t@RXkR9	A}Hq
ނjK2$nPx"wM$+v`},++>f+K2:'S9	\R[d
/o;18.!ͺ'2fF<X*G5@--iq x˧ˑ~b@IK,X]u@I-^O
ÁxS-n6!Fŀؙ,7
	$Y>7Ŋ4m
33+$%٦
*OM2\R)̧b)qpN6PI!KKͨYXb,+i}9m%+;Y;nEPkTLiE26v uL̮
F?X5qn'AIꞘgW	bauIFq$Ozlne`Xˍ!}NIO{48Pp60VKɜL
Q8\yu!GdgRN,fVVęVlbmԝf#%-EC6JlLz1fc%m\b95gI YƎUl+
.H&b&YT]V<i+fSbSwJFJ
sV2*86XRm+6͌юdI`P"9@i``i<*6ly-c`i?. ],k91n[x$)%yR`a*X'1Mt^8yPV&M
i7[X[TH-)(5(ScXgKz%>Qbe-g+bVdZgRNcpD'5ceT(`ol;l`xsh\V<}/Zw]EUU@ըz▦"[.p]&@U}p
\جB6]erTdyb+TS6wK%-$~*Ű Պ]~_۞ɮSl
Y	صOߢVey}Fndt]\d7+݂RY?åq)ߚnSl=RK ˴[tzb
:&\/Eub
ȗ!+#l%3fJdQaF`$ ͊ERWDq8./~XG6$JkX#y^̈q=LC;ɞ@K+PZ:=5%{jHS=v1hgD%`U-m6Mf;\j{ښZbGwN	/ZfAkuJcF!WV
T
7?\-I 56Iuz[wؿr2ĳ;Xz{H
:&e(!-և-]rb!$X-TψEʣ+eaPK&&Xj=o}
 ÊhpqiIPLE~&u]26E{b1*Lqn_qkYf5:wjsH^ddh.7wQ24n\zU:l@OHh(:" oyD)<]ZhZehl0/	[r
R
,;Bmoۣ"VnwP#A//m-C.	yy7{{"/K`9ݶRþN2xofQh9$"qK.WySweux[R\ԶqBt?IEsZeyE.(>.R֤`]hPCu%5KA
%&n>\pZp$> סL
(L>:G*>G=UY]#;lr%BOhOfPE/+u=8'J!f)ELVUE(V|JT[
/+>O_2Dۅ=kpyF/T|1<>PBXl?GZYM,*㗄[')
@i#<BPIy1)^+lMlkSDUP_xKH0e'55SP/WUnbCcK *TB⥌l^xQa
ԣoܭ=[sn&MU+?r\S1GUQ$WRV%SB/5+%_JהZ_t+{9 Xv'67&3uȯS|
]6)O&7od0/M<}Z+y|\$cbdM5u?^H?&xAŴAd G+P|$HRi;B/n]B?DiߊC%Pah{+]X3.1v뵒ؙRfxiE)ş2kQFjP@8v+,AU	E/?T̷0/("$+Ƞk/)2U{msȾ|!U/ 	|5I.XF5_TSʢ3P'+ۋJ<pz/%9EBiMu5RѽܜDJ}A&4̥_*ZUKQ 篈"oS}דaqzk?st\;Zie$BqMRfYS>][K=%Y$Th)*Z*Z*$Ϣ!ݐJDe)VU0X/Jxݜ
(+Ĺ^P;E1$RH#.I57a^ [#WQ"*~f,귇~^u	\%:"ڣ&/h߰:P<AR	S^͌`5b;L{+'z}EuZ8!M6x"X(WbduNC1Hֽ G*182b1DѨ,uΠkFVE.18@/Fc\bBf^B$c'[A1RpEV|PZ9.@\5zJJ*jeS8xzo%K,W0C*5*>>O,gW/ NRb6#bK(Q*1Mׇi	ҳ(-Y'IbQJVh%*H+*b%>V(_.Q%n>a8E:b=')LV^,exm!\de
PфVJ]4aѐ88%Rle4ipPŜhǊUJݖHTV-ПرuPN:]BsꄫL)cu=|W#ol_׊\b׋ikjԪrƴG`>n=rRDSIݡ@z|³v@"A;)EKܝMhi 4q
^Zܧ䵛UV""+IQ2b[xͺ*JY46%"qhq)3Q~ەu,S"+);SR,xFvgxN<h+SWU,2%I-3e\?M|)Mtt?i):Q=D+e\܋?9A[SmPmUeԏLVwLn=[}%>0MV8ʇ17_G=wP$I.>K.^)$>_*
k:H$Ȗ &-W#l3끦Ii}%U55R	6w%;[
t4?*POh,+B1PRF#hh/_$]I8h͚"hrINOkhưVMiFlqHt1іt^I?EV="=^DLpd7zH{1 }/ʞJٌPA}d_d.hvri2KqG$hDPpJ*	AJA{U9EzzGHz /;
MF6TI])TkgsT\Z1QJ/Av9~(9NN	*<VNpE%hݼT0UNDs{

tAj*Td+)%t> 48'8%gYh[WxpgZ):˺&"n,Pdp"V	A&OVQo7ϳYt,VX%QurKoB EfuJ#Ɇh*z%%r|qI3YXi1os&O[@KX#u6T<mMA/V x\FqaT:DR%/[شuafŮ(P-Rj,24.N:&Q
P,=kR7(y#ZڤdSժIS2nq<}듎CI=mH͸%w9E`iWJDd{7ZKޗ^"yM1ځ?r01]ޢVMAeB#JnJް/q%S7%ja* ?/iSs|Z]+i$w'U9c2cj-/="ʑbw8OYR'X:
}eqB.P(|.<Jm`Iju?|]v!M^%ߖUމ!](EZGfH(!wffe8GJ~LtNfRq˾󙒟pl[4EJtyXJi8.^p=ߘ:15UU{O(NrD-O`}ȟEgkktd]>
cۯE0:< (.vЩ^Sմeb-^A G8SXH'wd(UH͢P@i4WV!o4PHAĽ,A,`Ȧ2	Km-F2~dPڪ*%3t3vPt	*PnNKZOeҘ VFB]k13TS觌p;p|e7 }P,"D:!duJ6|1%@}U^JF%k_Q7+Q8(ąkG";VeSpcFHlhlG7VTK7}ê.jۂ,BLc25}Av7IʘL"S˗@ypVL=1AVӆ".W42cB^,A	*PL2O2muA4Pls<V@q1)ZϨaѶآ_}XmYߡ
(c!9ߴVOQ荲PwԺ9tۨPF%U)S$Lc2.MS{׳5Ї
Bfg'\2F2BFy:\SIߩ+lc2˛դi[ /IX4%R4en|Isj]P9*i
g*,Eԉ%Y$J+\*e8?(o@c\?1OGgzbe\
YYTJ^~D1.SZ"*u2hG(eҔ)S`I<*AW)Y֨IG͝ FO2i(\[Q;E#(77FLc3
ej
e2)2HIt=̙C/}ŶG7%އ(n z%%v~Veq2&15=C#jOgA}n5dwjj~FcHVL|Jo:Xp
H(0\Ʀh%^M1՚
kn,#2FupWq IVP鄦w<m"kCd>@	ڝG+JMRZQzW':%<hnʀ^t/ȅ5gzŎȰm<{f
/3_yWjŕP~BQ#)y|XࣁR[Nej6;&ꍾ0bx#=`N|zB`W_VCPEM}U錺3Вkqo,wn(p!,Sݓhv$so`"-D eNeMц&\tO&K_#%W2*)2]=Π}HbWCP]g` ]OQܛ`I>@'}pQmK竢Zt%,EaeE積Vs_PWىԷyI)yL)BQZFZAWX+Hr:8bD#
đ38ߑM%.!ud޼[UzDc?,ɀ.{:$</&O !		+o%3:L%	6RB|dѮ/W!B~d0aU@I}Bv/D骲EH/u$V/ODܷ/$e&B-GkE>sBpîh[G/uİTr-V	&Ct|!$s^sCu	ٳO (u	%BK͉+Ԛ?F]'adÌI&i^p͒[[uKMp;Кd53]$`FVyx	NPI)3khy$쫉JJJȬELInU1^I讥:h]HMll폽6,>]KyJN>֝څ㴤_j*D-}ԑ`0)鄜ʲ$u!.	ACUψFPy	
ϦOI&ao<RUaBk}|IV 2NWB1T2ٕ8yY]<	9q$b$Vϙ<	4eT6N=a&PM],#Qoΐ]AҋJ[ ~uS- D	R<KV8;higXjTF1BׄkZ=Juif\Ǳ2;u,-ǹ+pUjoz'C :ϋZB,<߆U&7݂K~ctni_X\gǼ-?x¹c;
RkJ0H/m	jr
O,-;nB%`ʐϖV1Uh)urn]uHk#n"ZG?
N	ފ@.x!үZbx=8Sf==oPqrZ+z*XgwsmlrzISD~kʂ*ˊk1{R<NӪuMΐOF\79ZtpEW40C <4~dJB6w
lqVD
˚UvXvLT/Tz7p|%[S/"zXb⾣kjdwZ&6GbLOcvcnCTB3Qu,)zQw/atie~e59+Kkm;^ҳ;ZMDBװfq}mo!=Hl{Q;x(LG5e~>gX4ʢ-={CiMD(A,FGN/̟NijcЮ;iC蜷rZrbܪ3yaW.A]a0ܐ
 `\f\IU*<:<6:<_17 J8ґ^HoO/	K4n'n³b0*'FmzK(@%`q3Y}u-.֭DZ7};=L[iA$sg`=00p;qu^u8A9[ %gd-f3ósΛ[&<6C/jEotpd2ȄV@?874
hp"%wea&ap~Fdx<EbsJL'Ӆ8~,dnv`>ǹt}'k
{&Y 1a%%0ps	|<RTC[>~
[FÃȝ\Cm&̲d18\V99~Q''vǴkZSEo;xN߯Xr8޻O_'7#}N铋ǿ}G01-|߯'f,8ĉeoLǴXD "b#	3Y8G7VE|ݸ(jcܝp;\o:X;tܫ#nD"h?Fqx"Oivo$9'/xS7Fx?'L77CF`n̎`<¤n#̫m"ntN-zF닫ayjX^A;ΏϏB:at>>a|}>1&T|jMYCv/FX)WΫ}t~}~jNggE9Ussa laWlx&`Z+n^Idpȅő W
b
/" EY`8#"xT\
Z)YOxUwM)%7xGrxW}>#>3y|!Gr"|+<AG~TU
wy9hw3&`\>¤sW[e^/X},`,,#1:Fwa~c `NZTPTsak50w6Mr7/-?jmC'pvn]9AL:uk
o	
2:zv6v|9]K/6FئB~Wmy{7XfN.{oF3~<
=qy=l,F
B_l <||x^e{,eО
^(g0
l80l$,cct6Vcb6ְ"X&}8xMT؁'+-vhvCEFK[U0x[n^ywx؆6GQl	I1~?l1Gx#.ts.9iS>m|	I`@D	^D3+7];
#
l׭>r\>//T~t
SX] ch+)DIH~7<EoV}bS ]*LҞ~S iiQZHd{sqEWzYC㤜fYJnb_GD^H-'ZLl$_wA[B
~[>Q] %;HqP<8D8p!T,B O#W[xխn\ŷ
е0]ddgˠ{~/vo#<x^@xБ
c7x̶fo -6|ld9БE6D0v2Ld8-yNdAd28UlfV
kYNAv6VOe,[[T
~b0f<l%kc]Yov>;]^e26]NbW Y
ձkb{\W/ngٽx|݁x܃篰[͎A;8vdh&Lp؉Np^d$q4RM0B&Lca(VA,ejejj=]6Y-/kaxE/؍w]'g(.axxv|(n6^'<e%0i0%,PNd.PC]]݁RZlӢ+dI>>q
d=EN->ӈhju=vK!;un-ϜL>UU1+6򴀻N6,r{(2u7Ѯ)t堺B׊*?/"<[(fHϡح3Ns./ü+
׳ӳ8_cRfi
e[NYiO!~^Dv?FZBն	)`3c(`[`
0iuۆ<( {b;<.aOɌ[PuÞl7{K-
RT6^
 5 Uӹxz	`I|(oGDjM sTwoox:k?4Mk/{o=nTFhcS`lEHR2A<lXkN8ŸA&`
rˏ
e_. DGhȼV(Y5,4fR5$*]H͡.cy,Cd̽ѱziFΆs2c!~%+(^65@yނ!0}{0} sهp7TѴǳxL4ù6T.]6O7&\}l	
lIUƇpp
Ѕ$;퇮xhD좍c>t[p{811UdgX
Ӄܼg
OXyO.4.Q_S9|*1.'&XGll4alAc՝>0P.sqxߵ8hh\1>žm#ُV~ _+d#9d 6>X]OphS3dPb|7T_Uζ]eo>F-@7&b1;
'pn9Qznt&
Ǎ&OqK̙B=z)Fc1Uü(V5CAy=ͫ3A[xVek~!>aAc&/hh(к"YxXh6df..]x_e=3o#x64NwyWwu;{N9~/w)9z{& G+m\\nĖuh5Œw6{_wNl:
*bM_!}.Fz\kˎh4K
eh-KJ[3;pI"{*djbjErZ桴m%؊?7HǄ{93=LiGN6~īIttkY?s
\kA1pU}GWtAtsE^>c[eomD7hɴ$wppGB
|,!x9y?J4
zyF,d/B`ve~Ut"Y'/q)]>LR܏ymTBW-&܃n~$ЕC?>㡐O|FΎsxM0hg0euEwY4@N8
Wu2Ѕs3[6[=D
: scRc] X5Xڅ@&[[-[qC|8tGq%IפOp5 ̘Nh
¿guEƵQ.h&,iZH@'!@;ɃːQV@x|<.crZ&L6 I;}6D7Cבk4j6k"$X m^HOIeN#Z)8ζ;dw(0y&~%lmJTnrPE27VB`>`PhI(SIG(k!DaН/\p?&ag1pP
+ pxYiDD:*EDQ5f]_Q
Wk]eM|vGlOȜx]gmOZTɟA
.'ekJZh<ï˓7seD(3V{%KTZOJ;R;|
GԺVV9Ѷ
Gp+YzS76r4k:XRt}@ZLD"=R8O╏.8ﳬWrjjRĠT-3͟OIZECSd{a13ەF@v{USF9`E^42uaҷg+L
{z/Kq/ɸ5'["AS7fz3c;H
g`x~4iM>2a,^;L~ʛ0a| .Fc/B%jW2~5_7k_x_Z'7·|=o_p8o`>~Kw,~ka]B 7cyM[\([cqv.VJȟ`wؽ v[*~r_6x|2Oj."SLtKeiHC;i+=?4MaRL>VC7M3v.ys5-Bw:BSr0aϙ^44l5}`h6[f
K!D|j 2T3Ҿ|a3}N2ۀᘫz.3;:|Z]D+ʴJ:l`Ř
V0O=}q ,#w(Fʩ	yqd}mpFepj.5QjJ~@@y8/:\-m9wjn5t@?%߶һ:ͥ|mj56j-.KntC΃LCKAmO>E0l_!}
e[8px	Wkӡc2 l* %m6SPhˍfoPkmX5~)e	n}p="aKm
"FD#oDD
6Ѧ:5<^`!gp_eʷ(pofY\$l%I@r٨LEu˷$41ZE7Vm!p-<9^(}One%2ѪM(=?GI-!#퇶hu@+oA0DH%0Ix`IBbu"
tHd
M{D{,:#ln<>/:+3+×|'z;s+cY7&h"DFZ`2
'YZydIZ~`-8yH1/nQ4[2MibC-L]p.cw-GbD #e'>dQ#n4@蝘	lm+N5^<SD
ÉFV16Q44&]-
<ٞl2Fa=uA'{CFEG;L4*;Ө2:WLiIii%)Q@Sb3QvIG!:L2'Q<cJyotلN[N_iYZ4(=%q%:OJ-FM͵+}Vj1U*SgWFnwR8v/&}4Qw/]Ӷsw=~^#cx;kBs.xE;(PQ E(*b(àLZ1N|8I[ G$) x8>3,]e<Olqb!+AV,l`E%[.Nag:vXzvXnb9V<>;ũ4*`Sf'S=P+a(wS,;C.m(p#7l{(=ba/[g

tdoYCr:k肁J5tz{L6KMbypUG3%OPHZ\rPI{Zb3ZdaSf
w3v fV* &nDܙNt	ē9)w#΄Lqd8z1 )0t&_(~ˎfCw+21
ď/l
k۴b"'
}ED^^jotTNƊ2Oz)h<cb](@/Ŭ\ p+aF/h5ql@nČ{zACm^Zw6,,coCy #hq[EAdڒ-b8ڨNڔ7@:A@?q[5䙽tRӋ]̾z
Y51*Ćg{+[Ř8v2Cb"w =x1iRIdc1X78x;Ep C
m=HpB Gax q<Xl6sF-<Lý̳b]@^80ES;P ])	@[*VYbrDLm"TX<ٶwW1oXg*~pj3̻`#s'Sn4mL47fXnbQ eTuϖOeP$ʷ,<oV>yM+'!M<MTaϡY</:t:PC_9Yɸg48ԞpDueI'i}'yYs~#6!踳[s21*(2>'|DqD
V'j3
t![WX-6Ze)*{(DHj{nb*7j:B=RU
:htԣ(*: MC>(]ޝlGzm7xvmy3Ȧpj_rIjcM}skO82}v1J*g@_mcwËw:k %hb>Yؖ([9.&Qlſx>pcX">j9\&@sN|Wp[C{xZ /UxG-~aJ:౳Y8I@=H<&
6O\Xtӥ^vT*ʮfI
Xt~y"!hBu&ʔW42Rp'ZGkCfx<JGgd̣B<O흍d$uVb(ձeױ0Le,ԽvH7H\+~g2sŊQ).Q.H{}z4B;լ;t!و\C{D:E۴hD_I ZOeЕ*rdn]=9OWQa;64~hӳD8`ȶd;h'Yv޲c̛_}7{O뺈3Gf
P@5<l 0:<T6򶰟dWn1imqQxJ1GiG`=K5.i-͂Ǜ#|bqN2	Nwk}4֪vd1O~d%
eh_ހc>G*YbVqGAeSeIeҧ[8ow:qذҰ߅Nb6pdncnc>0Xqr LGty$ C<
ɣ`$h1"ަCsʅkrP7R'Lڴy?MTp8>Ow𽍹vڵ{AVf;ȧ~9d[8C-J)V"I7
k!,pH! krc(9T5rty/'98.lOc5]mf3`=
4
֕c.C">"9_lg[)NJQ<ۜ廬Oc8Ц Eh!76z|r3bha[S\s'=E< m|皕D3gAhR\*g0aDMsC ʂ~8G%soXD~hS-lѮi)һ kԴxa3)H|;%NZiOizz;Aw]͏Wcy'B<	Ed F˅0E4Y
drl9,H]x4WڽBlQ0臼kbyltɠ.$2,de#c>"C[
2ڬA\hV[@Y۪!,4S,.l[r4߿"]lg
|ޑؽЊO?B~O-yEV]2]гM|Vhzv~52zԲe{s{gnSkh\U'r@$\x0ђ*ȷ o@ZMHkz; Wމ.{`J(bB!8Unsf0h[A6G1
vG)<#Kx|Nqt~	e0ۜkO1T58jC<ޜ9n2tF\Bt=K5^hJ\HV
7-XK|cb(:;	1=CaMUf,&U1ܟ(.DpoH:llȽ-Ij![nȓcdR3L?LK"r-Skv*
;`ڧ!)uFm="y,1s񛺌wL\)mUxR@m[d
gOA_﯁%1 鑶H*IitIrBw̌v`^@
숗S"EdKH5L/B{F(*hd^̣OtQBrU6d78"(A{%$_+0L5/߀h%v/P+߁仰R69'-k܉oY,ȟ}|*ol?1gm
u1ܬaG
f(6Ha46Hg4[~srnhyak1"?y	[Cs:%GD̓t\9{<|g<a]r%/bI/vRp	Q0iZV	l0a99:_'Y5ƹ`.On;T!K>@NZ6DǺ=Su,7p25:壯޴ך_
eFi2?t0:k7_j˵ȾYB
Gk?;h6Ɔv#4Uk(
tT[#,T+l1ʹgionnn4na.Yn
?·@MǪyضjdq(t0IjM^Ȓľ>gdiiYTPT/ѩ9S̀G섈R4{Y:ya:C:]Kad8Qa\N-u}T0FB#Euha1&Ѱ.cPàˌp1Vc\e
x`AĘی	c26TMK>p]pf؁p88COܨ64#lV!,+fxMP#GXA6պ"rJ/6raxºX3-gL9vfEՙjH3!ݘ
~c0Bq!xȉũ~isIi֋f/S8	yER0Ĉ<9wVM 21ݙ;nXEƙfܝr鯷G,-?G ,.RT,Kt$)zѹ&l00ʠQXG9Bj6؃\
zR@>ߒ+Y="lYT-	
<ۨB-i+MXVRe;(Ii]pEn*VZAXꔈge#"ܝ'K f<S/lgf~8Dqy˚5w8(W@߳U[h6@Fzg2stpT
C22F_GOQٗ%/^x)\YT鳜8Ϛq|*N0b=3AOc9aIi08g@788Vg ;n4Vyp
X
Obx͸1./aq0dq50em5qSs&t6OA+ŃД/t$Xl0 f=\-RsEX'鄤)#y21<Uf~3O3OןL<C57^Ա(7[cl#lT'M[}@x xePKB7Gq7$Xrt+yAb/
8+׀gfɀɖ
dN~^6R&آRu	۸1
FĞ5Yc9/kz
E@vP/#ٹ1G)>K)1" ہ'9Iy.@znoO磬EЦ"'E褐CyB#oi
t!oH
ody"v^D,o܇4t?56BgeloDi:KZpL_۬K'&L4W.:+4ϣP8NvA/&;xGKgvo}e#1NwKm]}I7v=p۾8~\%fsďPY96.YնDK;bπ>!mr8'wY7r| |C]PΦ0B7m2v=9GkQ0L8+ܲuBǕ}oa+]E:QDĨH,?#`AԨ]EAA5V4QC];μaٔ/x{ܹssOqwc<1S?D
ȗ7_UrKNif;X&orq>H
 -N+ťVl
bw,c1:v,ƤoΌ
7=ZN2ַ5~F~&wD~POCݏO,Eo#IγRy[R}VIˉ}ڔG@A4Gy!?OZcEyXݲ
aͼ?5%m+k+
S+~^Bk65۴VӇ\	S隤tW;Ϸ!):u4mr@<=DZw,t|(n:nV{b_Ĳ{ uН)-S6"l|rIRkIYT6Zq){<;J3Ϋ+mj経f8eV^y^Y[]T
WSsճ'ZķޕԲ?,U9|tPIhGs$+5qCÙn2=d!j#d1e	$#aif/pL>YGeOd({N94
[Mj &NՎhv;a8T퐿S
M.]}zɻշhLwv^hHYq g&wѩΗ^|Ǥ3U#Ҷ\kA+#)ȾD9dAScN%s4rdQ#mGڡ`ǲ:[0Tj>|Ղ !n<愝)c:^	bIKc}ǜ=,O@<E$˓[)Tyo:`dHSζߜغXv+xSHMYʻ}mn|2lB
Am7R|FF %<GND|dB3iܧDCeUXhmةcSكqRV
ԟ;bwORVsLT9-|>Aݻvag!楞aVJ/3ΓH\Ya׫3"v	kTrg/־"q,=P̵]8>!uv8]ʫM=`E].Jq<.אl7\K
98thFGWR{]'gJ!bZ
 yRC[\,gry&MZn9xP^GDz#fȝ&"o[|,oWr~qH+ﲳ~Mσ8]oO3|j?# CrQ(&hmBåFKr_.ސR}G%hihUNڒHfO (PXXAxt#X3`\#1\Ni1ʹ=fA9haɂu._9~F\~>Ɍ^ӄZ*nD|YG 'Z'knɼyNɼ:Sc+uQs5k\w(Z_ |l4?zCIM&F
m
"C BPr{vW^c9+'fTlGq\?qYTz!t¨ʠ%|?qK(FC
dF

`Ƥ96{~>K4C%a)inHf$4A|G4}7NwbVߏDA0#7!)\|D0X.qrF1V>AlSJ'$־
sӸA~[)/Wc\GZ,|OgAnfi%nkTޭ/b܊mVnU;CHȕrD7[/z1T"F?uq|C/ɷč=X,?OʏZM~"vOT)N~;|^>l!B)LV|ړ#h4wm!q	BK*F4TD6q5l}'CGԷ\('
mGmxb(J4T$oۨ BDЏe"@@zR&c|MPL/ErҖ
#ݭ뛈׭=\!tIT08
mʯ8Oʈ%&g8(/e_ܡ/3pF\Zk}og[ {@	I#	M5[,S|TrZ/miVe6a-&Vc^s|Ħ':a'[U+
x]Uqv]Fj(2nGBŜ|݅ )z@9KX+~ICҩ+hB/KDK&DWҒAD;*)K%XO+Hnre,8P!?gIq+MSɂmJrIbp$pO~np>-5޼/	`#EHTrPz+#U.TQbJ0I%q*2VNu\UgܣNCj<	XNj"Va:
ح&uuU:{չا	G] 
ՅX\"Q.eb%F	
1^]%PWub^\nՍj5WU7jXn;2uhVw~B{uxU/>PO?jN=$~T>)P!Io[Nd%gJ6a|܆܎%sL,a+|Q{ĆV2lq|nw)KFB\eEe2z9t"]x_~Adt15&D".&")VԐx
UB A@=Z_>OvoxH擀lD^2Wߚ``VKByrdN'?c9vZO}YL j8oP䡄TtH`3T 7oJ]ldm&.N1YL-RPE78JpxIQ	"9AAQ@-;@$D^;qE7uҍ7|HO
9KUuVmSL-jR%6"%iiI
@	H\~`(>&P{R=En
3hV^zԫ
诞|&W/4"&-"
v\~GDjnT/aڅnܫ^ƣm*Y^Z[.nXpRV}1e'eE8)Mr]PN{̔4S'ޠ꬐b_!͹?k'āV]ZJ7|Qo![4vo#b!&~u)엋rۇy>CNv©Yk..a!a@lasx'{u.)>NH_,om^m#{9R18RP
3i&^Ueph?Rp?Kg+0e"ŏ5FS	,=FLYLUƮ1KY6#e'rzdxHR^:c{ӻylqZE9`B0|HS/Sa+īS/qkBoX}wXj^PcP7NǰO8PDO:O.uŢVL+`])(YL]$ULy:f!9yַti*:_FwoCG.ǣQ$wwEy$D;c1c1GnDH,4.W̐[HVtʭ[KCZP5Irf|hGӃc>#0\vV]	]	<:-zEHU0r*˳!tOt/Z$нYAZ
Gx8C9z0~F*J	iGPX(;qʞؑQrع:89áSݴc+l_gk^4#9&x[]:|C.A4X=hĬa[C#8c>4J?ŉd'L}
֧FAnΡq"Z@}bAH
F(-MQ#^">P1:ېފ%Ig!"/G#GUjh6qG%AY ,䄷PDMX4җv%8tFU6
NT
dօdX47[4laF̅@*K&p'DΟOOg"_R}6:sp>z!tPL"=cn֗N}ӳ𰞍&}V+*ڊ9,G>8vˑpx*oC*
\U7'?`Q
$W}st?&,}O>Ygg#Z/))lGSh7])\m+]XBVTZmWTEzQʶ3nDnb	/lĔP&n[н$Z̽^M1ݭ'Mڧ$~k/6'eFemT6/x70,==K2B˃c04w"qF?@xbLMD?1\WD81Ec#G9/yh΋Fs^q,g%(j	ئ+n+IZD{C6E6 	"<ѽJ'(E)rJVx=/cX5<q'MYfB2PM==N&$,tlXEVnGX%VtKEL܃ZZp0Ϲ,J{ֲ	/gnb|?XVuYYyU%\ߪ	|sd*_cƿԙ
o@'}:E6/#ɜVpF?ٕWX!bk1]9\uz#n՛P@4m3[ފ6<c~ӯb#ЯC>o369ԟSU&z}bB_W$}+e 11q[#0Joh4ES,5IܔxtkL7&3Ub!^IvX9 <lӔar'IP]#hA,
n+B`"ae+
#߷RINZ%=Xſ -߳Nfb벫ӹ1R̰^[q̆/BxܛɔL|\ñtMܜjoΘ3N~T=~yW7Ys1@Rs=ß08ϛ/Ӽ\NN.dWq^1'NyINz{vtsRz'qR3ZA,|6>R|o Λ@@l_!XܠEbM	WFZ|)'ϱڪ}\/+sczZO+ Rg[r%0} ͑5?ACWSLi`qf(ͱxSf2f֙Xobl3'b)v3S1}s:>235gs3_9̹h1y"n.\(rQ`.	s(5TTEW3[o4s2׉
b5o<&^7s#BHEGB|J@"hcm]ZAE_#ڗ8zI*:$G(7Œ9q֨čbX^V~3DYWY)$b'A*dE" ?S&P2I	+l)U ԡ"Pu^8@Oقޢz?rPhbFwV챻)$aܕ_V>鱑+9+ӄ30⽚K)UwtcI6ق/ˌ{u`ʣnhgC,BwӈY~!4%bṢir)Q^f'~zefGblYoŰgH$RWعu(I;
9bJ	U~*<樂yV*L+w)%־'ls|].`JRvT߬Cyͳ`ַtdYYA- ~zl-[^;&zfilWC׮R/{vf5-~_nPpe?_׆)jo[ae-Ʀi5ۈP#yoo`/BWxt{-<-0檡_u֦[=c˝$!ZYܪ{<<<j.y6H!-=f>pgF|ƣAl
E	SDlh$6s8;w{3	n6:[
o"n0eC6;m}]n[5`|X(-8/WN_{ˣREV4o!H;@Hg=z*>৶emx5ܑom'U[޵k$.?ٿHf0{Glߑ(S$~+
N;>JIrԲEH?PK   dO\p     -   org/mozilla/javascript/SymbolScriptable.class;o>s~v&Ft̜DĲ̂ܤ`0'1)'A @?'1/]?)+59=Hi54kMtӭg$32R(i@ǆS4Lj12椖22(+8(9-3C=@f `21⁝Ls2pin
F^  PK   dO\v  ;  &   org/mozilla/javascript/Evaluator.classn1!$M4MKSÁ .!*-bQp똍ƎPx3BMIc{lo P!t'48S1-&&OiStZT&3Cx"RN~X"St_NV2M	"<RC
2]Lsj %gh $
?3oEőNΌ۞+%PG"t/GB9!p\3~2aZUXCcj؈Z[i@wr# =F$I1ΓȨqc4!WW{3g<Γfw-ɛ,BU{B!Q>~eb4=Z~1X5#!uYW⏆3^`W}
ܿ<_N p	lisj`:8ۀUgUgA5h9m\+밅m7&ַ}b䋛u
 m]GQ{jPK   dO\II    3   org/mozilla/javascript/NativeError$ProtoProps.classU[oENlgNǀ6u
BP.)K.ԍ81qfk>#">@U	Z+gƋ&js<3g| ûFmVeۦp_-]qu0j@aBz[,l\
0zβ-<!գ`©\uo6>\s͆X[SYjHDpt/틦p	ڶꈕT(iH=hC}tL!-'Lez%O☆qp]~aN!V'[3N)Bff+rY[^پ*+db
xSvEtE,!!-uo9v)(j5_7SMa\['j/%B
U|EYDBRbMٲ\滖,92T.a1TwEa¬cHo_\ygҫZ=Qq|<K>Mz2;8/#:l[}bI&_=BIo^s:nC,Y{b@iI]R(۶p[	N'/	eE	|Fpi77yC]Lnw#ʯ{,,H^#-<tK<7zxʸ\PR1i&HNH!aڅFPS8/Vp)l3.(g|_2y| U B]LoϊrZL@)Uq".`0!-;Rle	֘8MNdJ; /1 ,5U]&lcp:|^J QsrZ9^ٯ7wxixS=ƙ@jPLZa]YB]՗PK   dO\G    ;   org/mozilla/javascript/NativeJavaMap$MapTypeVariables.classNAƿ.][/ZmoXbb1AY	7\M2mf$V@b">a<	AM9{|y+t*(ʄQz8Yl؆:Xl&醈mj	w۵ݬa0
ÉU:(>|L{6"Zdav($I+
۝-cQbew)kfQc#:eVps}UG'vB[>9RcBh{p@ױVovO(_T"{@]gOw҉r8]̾O3yJB$1.9q,>?5Gv<5}Feti틼,|G?X`)7ZF3-<+Gh]PK   dO\ԇ	t    1   org/mozilla/javascript/Interpreter$DoDelRef.classT[O@mZo\WeADY&հubiI;D#㳏&^~6T̙ۤ|g' KX6Ѓ4 ܶvW֎V<9}K5?anW=;f0L0j{jhr\$l9t<߶v#*yC~QHk7-(@
1C	<|%\q J	Mm_2-[+cx<QO$U;ca*E+	 j4]7ڻ-n-F
M;t`V<s@g wr{%|VnA>~ȕZ9Ͳ38ӔSunU:oIe-g!^3<БڡW]yGf+Gb-a0kCuyH7;,(1SOԮp,BF|VM_dQ8,~,t>`nfg?c`YAm.6ٛ.qOd-&)*p7qKi/bed54ʊ%+SfTYM	'GYZ8Ea»KaPK   dO\˜C    7   org/mozilla/javascript/PolicySecurityController$2.classTOA-,+(*Z-*<*Ѥ I	<MvtN	xOD4`<G,MQ
f{~̏_x,RH{8mAWJ`84;Z!#kRWmG>!Waa#[e>(0Kx^7EhkMFҮ3Kpôka?a-̭QM8klrw?LU7;B#mni]ԍC[!_u"T]\q#_qcx:j**u{K؎npû
CDنlGqMʜMS!栲~~Dk	Ŧt
wa+/PXF=kQ$uS\wJΨ邉
PF"`fgNeb[HXt;}0\GPp I=)E7iWsTN*'*_pcxqML<y ٍ%;ϒ}!d{8$Dϸ "	xH2EhdP$!PK   dO\)  X  5   org/mozilla/javascript/Interpreter$DoEscXMLAttr.classT[OQ,mi^
U[nA,$t=eEOw/$|רIiZlof9gf@atSA@E]]n[t-k2[4kgh:v5[f5eLg6CFHAXE*H0l-sG%5YͮV&!@r=˒KJ'XjB?N*8406a/\ΫՍ{kV0✂*."CCk)u񚘗+pɼ>z*(,}W3
.e
gV
m߂hK@zB$zK)V튰y KdiN1ތ_<yE
nCUy?诶Ї{&_̴"^.5S+OM?v"SCԛ*~zޘ,
&aښXҽ6$4l+-G*EҚ,Z4MaE8~&԰.G\ml&sǸ=s] h;z~%z˒d$C>#IW pp_#@H 5et=D= ϔBӏ'/ľ#O$c<XyRH#Na>F0Jq<m̏AN
IW36!yt L"a ;$gIE/PK   dO\=6|  /#  +   org/mozilla/javascript/RhinoException.classXy`[}|eOe߆L		qb;sMȒZ:(P֭K!s@%+=X۵knN޺ gIa~޸p,eJMxP*w{pG,؜k,M+h&AIc6(33QS MI*;V%i@ZPIZer,i񿠡owcp:.&P-/A Kg`:7>47$hh<5[BrGPl9d0G9k dbKfY`Yp4i|rpJdk <j	]hbn,2{GB3ؐ^4
\jlmxl̊	ڊY<ma׭X+.~uq{L\M'CM,W+oR@`QSo,fc=ɑ̨Og]
*o\12s$m\V&VfS5kðJ"t+*FXbdFh܎:Xgb
ޠʪ~*96؄Q_^TA[}Sn7q"Uy9-DǪ}dO2>=Ml١~A䍍/=y{T|N}^0*-pI=7GS2U#&!JZ|c8g
ilR Y.@8ZL&ʏ& PA}#ߦ{g%Qqo"	B*'AOQ&f8vuRigL܉Dr4<E͍l5ċi5N*,øGL4$׊d[X4*嗃51郂+gM?j~R@L3ڝD𠁏xH/|O
B^|b
<>ea<BPg
林
{o"exa3&~UN7\#hm+ʂ5!j5LoWV=fq&x%Cx88OIO~[4`_JcX~#lMB#G
zrMN1>YG6«3I,0U:4VESiC&~yc@886sM+>&^˂˦z۬ǌ]Z&N$ds}#!G98cMgE
}M4tx늪BwĐ:̞==*ۿjp.d:=7Sqc_Si8ژ_xMR<QOL|al3g={lYy@˥Etg0lq3`M]-|USd%[5	7y6Q?;{i"r'jb5T4coI&2c^1#+ޤ-tJ4-;36/
9MTPrxhȋˠI\JO)dW©?gPeחHQ1j13J}uW)K.ceϮ"0Yd;K-wK22DMO=px)>бVxTxeHY|d_`'rSLF
;{zԞߔJټw`Wilonڳ{*5
u1"ѱՋER+sA
ruyԙ2_.#ptFU)P]<V3SplL12e̩]<MMӞy%Oo恷[0dUb́Ɩޘ~?JD=L\;(Y15"Ѣ~:o{I%{3Y)T$"7$#QMSWX#qVIB	roXt4ʠyR`XK(J
29s:G_=O|!j&2[,F?%.ۢ('Ơ1IѐC{%,h	0C6<zQ7b}f[
;SpE[2p_tZ@"c@
m C,فx,4d,@#
ɷTRs&V\7ug}IY0k_dݸSՖ{8&U9rA.]A{R6Av,s,V̊Hh
P3K0~g'Jǹ a4OK§މԳȤa]5~d^σRrjS0Z|
.Yp/B6Wr2VFzaJ4sWwye`Vă#.Vm-.r.'@-zؑ'z[֠ZiP>zPU껓7E<h~Ꟃ4rWV_5zP7>		\5ФXրv
XB_\IEiJW<kuh
a5:Їm\+WQCmt!cYWc:a6zsb)U>(J<
N>-l93a	tf\Zs+_[աK /ԉn'.Oph=PTM'r%lISTZםN`kvs׽BoC ;NaWK/ѥ<4_[T5)m|Mk
5R۩<6kihfXQͷgdJo"S{)!SdJ@ڥ
o{Tmw=
OɍD<osK|Ci`}eA崰k~8r1DO?Ez4£h
۹TnҺD?)<U0:I\z;]}g[N LS~B 0ۚ[Oa$J!1T0~J!$=mygQAk,q_REoWj-*!l`8^CFK&+Lp*CJ@sulMAIs||w4d=kU'd!gjKՑ8_}$>4pǯ?_?*[[t7hӭrtKrKviRN_$*8͌U@ʿ!V=aGT#~zR/?o/Om6MUqQxeP96kH
YD}SMaF|=<Y<ew5rtytv:,Wr?/74֙w̸ j#JPrfUoʥeOjݓGecxZMmyxRVMñB?/Il{y[sL/HP{@5<!ϗaCu]ҩxh==yC]e`ywTʂK̐9S]l&x\-λ#sUT1o<{.qO]?TLP0P%Q)TAn7gN8øʂFQ*[w*mgpdG(kNN]~Ȑq|_kfҺž",b%xydi??YYGqs,RJ[CU/Z
elUee
0_=T.η#mNjVQ.TK)戁+ċf)G*)~H
u-J2'sr9&8nU"40A(-Kfo+0y\#p~SQ"BgӃ8:	Pהⓟ0[d5Au=2Ve
O+c#VGLɼ瓃k|Zq+Hc'YMn~!Y&LN	6(HIǠS?3dZ`VYəݺ>?n0pgE1Ve=%\wE8(S{a*A"<܅	AY+ܛ(ae͂\:b{n`4<)YsByP
歔;ۦ+#o_5=GhH(r\+]}3UcU8JKK/awʃ*&swف׃%:/eA	;MTJ=ifuB58)/fG A
EZCbi
a}Oz?PK   dO\{3  w  4   org/mozilla/javascript/Interpreter$DoNotEquals.classTR@KBRRED@l(Jj)30(:2#x/M%s{~ۏ/_`I~ B޷ꆡVΛfWmYsz-3kChN7ugOlHh!+h`1ƲkV^1topPZyO8aN\`mdDqUAch۶^Ub>Khsmz㸮OӄUe`y16~],CSM~umm!LZ$2)XrVr~e&	MgA7b}j٠HƆj0IiK6dvU"OE"C'Y7ynl>EiSV.BNhh	 Nm2tD{Ur3ϡpU+ڲ.
n:ԸEX5AɛfA

Շ[A{Spd.QJ hƉG_(#ѽ]\CZ]╆ HF1v~F@2y>c64Bwq>%VPgJ1*\/v|&i8HhM}!@Gĸ%
LN& S$ 	Aoe9QNHk&Y7M̹4nR.?	zO )!D PK   dO\ܐH    $   org/mozilla/javascript/Context.classս	|T8CM8EԀHHr$*.+nM8<Q[okժU^VGk[[jOڻU{m(??}3of|w򟧟Ah躩B6bmPWԪH;{A;.}FGdMTm^ib
2O"ItȂl
rF.*;#^7q96lUL̇P Xd]0Cu͑h[[0rOwcje4R<'CdSzg-6չՙhа4>n7	P$
mFuecX '^tI4tIljxN -ꃍkb`*`"	vt:*z:m.j~kMvZiC	PNOKE&6?Հi06.TTDfIX1!"gH{IĐI,dlds!l?
v뱞(s`T\taWi|^鬵GȜTڀX 'Eْ=́Oh0^itY,2`1!\KCā*r5KABAh3{kvH4-2:6cKXK-Ylep\?YDNwA%JS'N*Ŏ鉆VVi(ۂbRH[k/^_tK%uXDYQ]DV;U07(I/qXc@`yo(tPUTF+Пu%^N;VNZ
¥HwiO,xd-NNĂ^bpbUGh)͡nY5]1%RF#0bqe@A9g$m^u&:S
f` O
mx0*P,YO]/QFۋ
.5pYu0u)@GOq-_!8-kt/GH7*S\f쟥Åp)I5\KLɵN;k\_GA%X4]M0р(E8Q,Zd[n`+ὍTb0s1o7DԶHM](Ij=Nǀ{>.p($Os!u!^S,$tĦC5>
gvxP<>0EuX79X4?i䚶TG1
7`<4=*,[/'
x
vχR#FxtUNmROOAF4Fzht#!n4["D~L>;hK[l=\ہM5[@|^;I+ 'ـ<Յ?_$ɠw5x
5xzë=E.?"[QZrx?&IH#'Ti.{#T-ކhQAt&Mڀ;(mm\O`]pY܁T&֚gtnW4҅cK՘~tX5K-SC(GqayR?P4j
}u..=:__+
bvWWaW~L4j]
>%wy%"4;}d!~ۀC9 `W$*IJ3gAYJd޸S`r:pn5ǘj01݉v̇>Q32$(彃\-r(le,ǽGt3}nuA

Vp>|^$LzQsWb.+f#466IU!FB`ǥ:emFFlƇo	pM1Ҏkplj71юN[f#
&19Sl*w%ӂ1)aiDi)I>`h8)*4Iic0{HeK֤el;Mcs
v:5!Jڦ@4-NϪv ʒH,Dj`A4)$9ܵl4iZn5P*<I;58n|crW%̗s|`_	u5-EEIi$pXM-7
艭!4*Ҕ5x΢^Υ^NZ m q@Bcm&І&2[ÂDp5`N댨eM		t0Auh`aI/K#o8t/q=ŹqqOǈ,Ѕ3ũ)}G@!! !zd|ZD	&vҴPb&c2-
v&S`S?|pAQ/WX"ؗe
prJӮW׆c
v%jHgW#8b)lrh">;]ͮص}K1z1`P-
v1`t󲄾2
4ҔYlMʶH;1ET-ԱZxJ֢t@LJZ(hv^VWfKc!'2wZ:Y~k
;>mLrv`]gjc2(ep`=`A;TFEAi"p,mIQ=G>RD:lB *'-ۉ{Sf_( hv>jtU!,Ue}`c4RJjwD*Vi}0\JZvB*WfۜRF.3{8wK@5*`Ur4ۺ"6
H{Ħfe+ݔ
A;?za=غȻ{\KQw5=ξ`zx[faa2MlbcRs/+)i[v8i~i_8)qNGHWۨBv8Zp[/
+Z&&Ea"b3E+WoO,	Dc4yzwd%yf:#tĔXZĺVƺ" ?ϴ?&dJ
΀cG8)Zv!!:Chh,[LY'}F&E
aJ0_zW:bw9W7y3xM()^npZw*tɘqލO7E~{bn\S`4Kli<#}TQuptAG`3yƳ
sk=	GfvWf
^CZ.8s>h'+a|d
2wr}\>46ԵX:@K2{f|,ǀG֦`<d
KYJ;gLjJOl2|2KS/@SO<ʟ~h݀O3t>p֋%Hw2܎z[_8ѓK|O⳰Mq;N9F!b)ũ=&
3NК%#t^OC%'gѤe$g^IBE Q^mڱΑ
]-[8g|!|eH1J/˅g-2Zoh+!֘[Xfnsnlol_wd~$)K2.ӹ	]j*/_ſ(emڑY_[RȢfC hBk"sLVi=)&bצ_8II[U@uo0wȸ*.a#OUn?Q3װG]v	9,d|KEGn$ᵈP3t@Rk9_
%~Q!D	Sn8fꇺ%RduMٔyΨk_Y`PXBW+s]7d=rtҘ`
e:^_7
fhB!n"AdrӘV1ĝ_/1f'}?ֻkJPa,2|3ʇiݖ 5؀1hnuh,
[hn7
~?.taQyjnim8˷3A<Za	*Cፑ68R](<| W4xRth~P8/O:R;]v;{-qFiLd$Օ<%i2Λ^3~en4"yo>̳yҁ"K#=ݱP{B`P[鎔vv#-ӉڃY
uo!tt8
cGjɔ5"pj]3 
&.
nuFK#֌(4CA97Fx} f,3= d~bJfh^Ӎ|L¥mgYGs?7//x=Z(\uOˎ_w(lNדEvh@;ob̤3۾fX_lsDWO7n	ǌ!iO#BEw6!9x dYdjUaC 4g{7a ,`zzw	*$֊"cr3,AI+q#Cd,͝uZV4
m9,7uE}YvvClD~J(I8v#

QD3
(.c*BɌt
QLvxb-;dqg!J(3Mm1Yfh|#8C1أ&[\2[ic,Mt3xq<Q!Ӫ&8$4LSXuQ&51SԤy$vpx |clf!f"@3$b!N`v-Gz',IFeSq*}Y9<*fb!_N3k{\%4~+ұ1X*(m31СH3D%ͯEUSJ M,/Ø4l3DXHQ:$/
UC>Mzxbriu~U(%HމLAdfb
0\W,cP7Ց@(\tMPO<qLTCO+J'r̆i?J_gj,CR#XPGi H!=Id4!T
kifc
$iPݮ!Mc
#M+ȣO~o.uݡu(Zhd6"΀c怜2Ĺ9K:|WJݢG5ePdT[52W*sY_mhl)m^dIcSKM5!$.5=,"YjoReԔ&&85Cx7_1Wf[wtqRWjqMU)^R uWu;.5GN|MTh5hB.j&%i6y%mf}{#CЦCGn7Ndcw41

%qY͢0/Kl}⛚P vFѧ9!uX<hS=ÆxD<jNѳlGEXK1qCOb')tГ'h#fI/:F)KML>"cn>G=xZ5;$6gLLMV_FųxNCnĸKFNx<ĺFTV6K4*:KtA#R7
6_|A`cCJF3U4|BG)!^7Յ3tbҾM╵#o%
m-8`I+u&~jI]3@iP8hqPշ
sZZ6(#I
Ύ(暅/}<.fsגhd@D)3ćt@OW.x49&d?pnJjڋ2ja9O_'c.
0?ſd
mK^;-rM|ou	dgCb&>OZRPf!^
D9
7ǰPCQv5uK	oB}Win(dDt%jqCd6♴(gJ~Px`>Vx8T

*jB`}̟pC)&Wҁ6CmcH ]sWeOFB]!Rj<5*2taJ;K\(Z7^V\ذzi
(v[Τ89U,\Z" AϞze'eMpRڜu"e]5I:nNʚEYw'eLYJ:rd4ˊh쬪檦%/lYTzխ5MT>_ӴfŒՕͫ,mj&*k,G/T\ӴzMTvAmlYni\mnPƥMUAOȒ&zIS#ƿKjZjkV+m1Y
:f)RlZZP2*i:~1&uf#S jf |YխȃڪUpIU^V$U^P_5VUJ6,hl?ijjSX-g0b]kSӰ
;jQՕUU5LyNNoi /}XW
ꆥuu["َ"5
Kk*[jPPnj8%`aSMeE5U-\GjZj@[^۲qiϪʺK*Mqs\WRGk+%1	|*uk,iF.Q4Y%k+8Cgխ9M"ϰ[ǴSO[tr;QZ'SoQnVr̝mFNsmtG"4Kk/f詵TJpcڳS%9oĪ>Z13;&:urjXzK8jpRϜL	ʬA]厊;͜+T&(*蟉!7{)"Z4cGʲs"OJܲ@4Di+S^"}09DAGZ5ɊD
ͫ*B)1Vs&vc(2ILA9Ka_Th1o%?pm;<fPp3GF⇍`1Σcw^߅>es΂)נQqi4vlѕc!TyA>wXIlzBɐhʃ,4716/\`@%)/Gi\>A%wqHCZRVVۦ+7b^B6D揌3wi_z7@yhPH`8(vf=b^[xܯ:8vnսGJ.t3iXX4hCL4]*%jmڻ	˪;y%bllJ}hɺ6ٕR.@f0؞SE, ['O;kG) 1i;Z19bfpP8HL33
TsC	 48$7`X#+hf~tw7cʊK<1kA dďPv#N椶Ֆr%TmٷS\XqLUp|榜)-osԫиk%ˊO-,'(&{6fmaK4&!vBCĂpX-m0m@jԳvhtSܖ5:*mh")d4>`@XIa<箏mvz[b6/ǖ-.ZBOd'q;/׵vwm\Vy}fVZ8AHa?#5kqKΣT`%!V"QsBsȠv(Ӈ.$J78;:[Z\
ޠ}fc!n4Gg]Ɔtr-	63)|l@Р-#]k[$b'L<\JAIW9
F/f(L^4-ńʘsNhyճۊÀ7uɈ%s_f߉,Y?(+@>
p&K+!:=НJ.}Q;;f'&|8QKZ,^){]j3ɖԎuv4[8i{_my &2אַlk~rͅ^h[U#w);5#r{BZ:O-;ܙx1RN+Z%EDsҢҢ;O2ڜMb:G=luD)swкEXk^\#UH237'ۂ@zqH)~>dꅁKl|8
Mu?g.xZ;'%&?hIN0|nO'XvYyy>MYRIci#>E4kV(L;*o!ŒY߱yCO+tlI1/ִR#Ds}-e~(1XPevs)~ؑ͂]\9<`~r¡~Ğoc?]bn#kzi,qYHQq13\W&¢GyM0NL;Zn$M܌+e\O1xO
"9mu3[FWT{!RILSf0ԴQ\MW]w*JYy)ClUVuW}@{i<+=,UfPAlu_%`^QB8rVM>eʩgg07e4RjJ_GtQ?;'5).WwXLt]KǘвN#d4P*ȆWRE
Ϋ~MȠ4ݺڧԧ
uLWur\ ؀ÌNg=yCi@,R['C8B''p(ڟP_H
gԗ7PLT(FޮJi>*t^jJASMI4񏔤-Yƀ)`+I|B+0=ёi#]rGz28S1=͑􉘞HYɘ>ő>lLqO\GtLs+1=ߑt#]^HbzE<,zbT=+
^HMt3[饘^H/
G+U#}&rWclG:5t :0ޑaGz;NLsi Dya "эX?GGGR9&[>j{@cgt}8VB1߷Ս&yYtFnV_v{bKf},-;ft狄s>btJRgL[ĆrO[xXx\dX-8{~~>C&˽?ˍv%ȗPb/X'/c%_I8@wzWM>%?op&&o&
LB<
ʕo={DBr5(Yh|V	jC7d]Ea.(Qx.(]0 d	yvC>.υ0 hvP`?]00Ӡdd/
2FqS`<30='}09PϞfͤD2Z|065jTl>&XEXN3w1]bwF|N4}PZTZJsG?'pc:Ga[_~ 勷AY_X
nnYњr7|q_W0۠zav(p=bXߊ/wRB6bwǐ_0}%S>s<vr8ZgsuImI-=FICU<">(&įm,Dr/h}prH6а6%p4hAŐGp^(G,^jwV,q#b}]BBVmZwy`~.l5S}pvpdDG$ ?F`: |"rZkl*dn-[S8P{ȢSA Ow4cuWN^u\QB"EKo$loIzuyHðl|r42@$,//_!QiV>)[mamk||-"rEz:bGxScS=p3Zy/6y=vȨP^{>AԆÝ0
Ht5~&xY(3a⁉))
<	ϡH껬Vhn`ybgaլ.G]ݦbAi"f]<酝[Q@/}Aym+|jEjy޳Ā}bXo
^xس	^x	sBlq|N(asaB-:
+FT4(<ɽ&$wsD4ܧ|Fp$S
v:0Nv?q@yHS
Wd
YmSG,)'3T
kp?=F~92IU㝐06L<2˒ƚۥ\-QS,VI
X%~9ղto<R!dU>0R7x<%taTFBam_(O:*;lXWZfANnݟ~c%W`ȩyϒ1c0fHr E8;񧶩}8LH!ГU7p{F*_t6Sv;VeeRk''=~wo5;<zG%XGq6QU/8+AvSy:+͒ +O"sL+PU_o֏Y$wxXV4mۭ߰3U@!:?!?qp˜H=
ty5}{R4'HF<
'^/!ӭE*OVS,(}ϔq+(G_ѵ.`Ot'g=O14Qbt.)(P
?R$,i*+ rn8ϼe$i8?+O !EMLĩ$(~)ʠTX1&P&Ib&T$~-js8Ud8!\O& PC9 d/Wc-,}A]LTEz\;x#jw:)f!" ;Y3AT|_b1:ǀ*,RC)wgY9&9wJY>09)$@SЏ iKC~L/ZSa$Re}l.x7LI#
QCMaS^Tl;^
RH#҅CPZ.[V(0
88R,<"'oQ+eҴr n
z [Wa$fejGAlblVU&Th^6OnVMpʶ~5XjKB܄X8o|+avƢȽ|G+/"5Tj'*|"j|zYHO4"@:`gؒ>xlQa:Uy^9F/e%Q-we@:@B~){ӣfw?O߳\y)'u&H_C0#k,>\yFor^LLaU'|DShz+vC&n!Ey"	ʏ$C݂,#b*-xȭy
{Ym*E$u@Teı&g ury?N@@<==#gQ?0Cķ9YXyMhsD{D[`)?Q~dRg[Ou/({W{H^#%QߙP
d
,¤I6
;YdsHȡCBO#'.M4$Kl.M4%hT--GC"ڕpLw~d(Ȑ>ȩ/%?ʯX̚-Y~,l: uM8պjɼʯXPZ^4t(Yd;ȳSޑ13N+w,k,ϭȯZ0[r00>W
ȂKOKka \1@AԲ~%~Vu2aA1exxXxa(HqCFXn_KSHpLU#rc5Fk=}D
VAmInOT	oBNF9e mV`nMg4?lcʔCu= MRZ}Gl	enлMMMAgFP?<!F߱>vajC9Xܿ!|f]8WؤO3YMXNvij\/_w,h
_%w d{e]ϣ0PshpIkL>FK]/RQU<c8l
_?Y˯q~~9%*OOW=Z;yvV)ne7?϶m,"ͭ3|QL!@̓5
B8N-v$Iӈ%m@#^&&RctC{MetE^P*^1m𢯿[xojYyة0e;=)1cR
#}]lo'ʝՠz2uLTO*8Ev^m^mځ;bW S8HNjML}HHd"0ƪK`.S\kSPks訕~2,q0kT^r+bnͤwho#u{&?:F.?_NF멞zè;Tn;qBT!"q<Uⴽ-a2NQ~1Z'fQpr~+T崒A?nA '5Ε*:![M(_7_
[`z+LW݂XZU=**$qPjRد^Շ$kB;81PLcoi=5"C#wjX{t,O&#0SAaak[#f1ֈFLh>mvђ3$}Q
eIE8"46Sǫ-n;+u;NKK'1ɿ	%1~<Sk0R}3zR3,dUb׎r)
6r7NA]$y#ZbJEFc~||K)qq8VC.d%
"B#'k	:Oq<|b/$/Sű(Tse*sK,
%f|zZ)yd9e䥵@.&AT+1k 'E<ece,ۍɲB=, ^mfVYyZ)hG8O=c!3
<c0+F6aM٦llP+,jictFT~4ONøUPz.΅FX͞k:c˞^$}y;"ObYK橅"bԱ6ԱHtiǚPYG`j&0d'/㥄@>xV!/9{ζͨ:Z9P(IFc80~B&+,.'vI}|jyjw	9p\>.t/3*m1tOLv-J:V)[.V^'ymz6V'=
tƩۭ֒s&#oNGLN
ݐX`C,I9% {^^/plym2>ϣy
=h866ml&(M\D
QR'FSGYRyc20TuᣏKR=;U:7ܮxJ_Uo"@^JWeV
k9S[SkrjbjroY+~vHPd
q̡gP:%yV_R`}2q%f#{`yӶ
<>޹z2NK3h878^;i0S[h]6~l,0#}nj5f{RXk;Ũٿʡ_	6,u*NsvX.a^kIs]*W:oqBMq$޴4
$44-5TC ؐQY`Qi-@=LHIbՙ}	12Kķ f.cZSV%a>Anlf(nqбK$`)EG,|q <h{o?Wyl++; FYNf/
~>|c|ށ~g7*O!GIB'`ړ0UYnI\Pg+oZlDr0}Jj9nqR|Wz^pROc'#w])ګka7|{i{q TDtCc#B4ǁ]C88//G;S,B[AA%uLD@4+)gTm䪧"<x/`Z,{^dz!{Vc-kQ=}Zy>Ho|9}3;;>^IHr%av7ds#ħη9鈞%nSqyǃ{3z\5n^J{Ovj;JK5p@6ka@{#{zRL:!;fzCxӽ͎awƖlDkzmZ	z8(Wvog2HH	A۠A]STpyBm=#7"ѫ,DOL6^?67Sۂȝȝ]_ދh#v\֩.7{PLWԸod0}";|k!{avڇ2w=rǴT9c88@_p&aoY8嚀e?OjgS쑷{c7r3ıeaO~;T"-vzѩ(OXdFixAcA?AEV]TCe 70;^b2:`+,Zq3D-aKZ}t<x\Df)T|ȭߥ<U]2>>KuUIgU8zC䒗CwѧS!BWDĳl)4mj>Bd᧍̽F/!:mzv	$xmkpv2ˎnƠj}d&޾):3lM[8ldՠȷĻ.NN~3#YީIO%x|$z$#U׺XQb`}
ݽ6WYǡJDqKK	F8|[}mTFm{:T}}\kn|"J||ʑ_v˹ɨ
#Oub[jʠ)fPS)rws%dry5IRdebtʾ
9xٴj:>n6hL+M(cB-AC 'ԗY}(Rܘ'ND;:yGY/Ot;QOXj,1*gA&bx3[
P%`n}a!XzcI	-*Nb6\)asN|K}d(qon ?0]awh=)hb{jz-<X){EYSṙ$7ͷEI|_/j>=po/qHc^R|(Q5nM[®#RA/O;hڱڬv=R7_:^_WGߧy?bߛX#,XnR+>AЛq[iCХ8VjS)5N~hgSSXC<|[b|]/;>Ij>E:EEnѰϟM("nNnq2UБYPا3v^ o/(;b)RYvmUküB/i˼X/V{bA^[Y+U]f[gWdk$"1?гGS}"ҿ$`\DGD9Tdg1>q{}
=8̋5YQ`;!Rb!k@FZ^tZ0F~7O9T
tu0[τJ=P@z>ыSQ}lp>O2C/{]?	vsp@M}ZUq}͘^kA[b
p:[`%"|:ͤލ)zy֎%>Y;dXRKP=5D[^tJfOd<<[zݰďeqI9f6 i-1!2MפNW!(S^t̰| g5hE,30B
(VU
Ш}ŚK\VeVx)bo v<ks.rI˞0W2lKZCYƲȣuk+-l*vEoL0\_cV9jXQD֡7ylebeg1ߔޔP^O1|2-dxUrV^^ݶFe75!+2?{tYohq'S@
ItZlǁFem?GcȐn~}o,K ʤL3t[P.b-ďd3[w,;mxfX_GI]Yd\~1Ε.lR(/QW`~Cߏ:,zT\b	8%R5|Ver&'q^x  t(/SqA׿
P߈vxBzG1Aph'aHū6VOq;[wzw˟+f)ʨ{Bey?؊s AfǍ)o]'6oGy;a~6Ajk(f3k,|)|P5kz=c1`
nZ-/~+~&~|guJ CN(w}$}]Ŷ&f{
wl?1%ޥ)(a=4:yU9
CgflE#?p=+4v B@4q5v_Rh@FYCmc|d !nICљu/ebsz}%jy>c!>A9lrP)
2"
询  i~Cp;l
Zq$pؚܜR|r@QG-6mQd$Ly5Q6Qϐ[ [NM!ۈ.EA?O)Z:O#(aI|6fBתb$4;(aãHhIcti
%[+W2S|wې~pdƩAVfUyT6۫#AaRVF>	U;T:l;`ϓ0+_Cbb1Ez þ
r(aXv[<f0_gcXGP۩-NI6WR2[^o~PAS=>WW_W%;Ot/`Ȼ=y|w@PK   dO\ۻR  '  '   org/mozilla/javascript/JSFunction.classYy`l`I%EMB1!H0m;٬nv=0xzP^jڢBHEEm+h/Ki~ߛd	mG{w<0GQ
/3־dRk=O[eD-/ΧD:%PޖH%rƙ!bT).F
n̦3ӻ\)Y汔
Q-7%nK꒺FE-S{}u\urWD"툜x3 #
oa#pQBZO}@(熭"Υb+	$bۦTNȹیvf7bl1l7jXv!PG`-I
W63x5⭆1F3&x$fga7h,X.(1hecYM?IF̦Ib m^9*NZ"^y-w,5<#FBsqvSv G`D*6f$TV YF2dҨ}8Utzܒ$≔\S֞u8ME[2[,LS2y}r`]g}q^b5
I/%+u8KkYGCd*UUtB4k9ZAm`u*	dH X-Rh8UeQ*?	|0$~R*к̿P|J2kI2*
DW >\b 
.2Wb:e@R\IjD]}D{qQGh>Gmo8O
{,,RY)YtnG*ȡt+WG*>Qs>td2):Н#2;}d'ϓ`#
bC4yx׹>Տa<yyrIeIщ>b6i1W[ҨrW	6Selm,)}хթl=[1D@Tw	X(hoi!-95S
K#
=fq.6T|[:JfevQ"
텴}*V4Ps#(ݧ%RYˈb;t-0á;Y!\8.%9btZZGZ[Ih䣽(A<'|/qZV\0Iq@d=fy.rOpЁISD\Z
6MV+Nb=]t-3,|T.'椒*ec.P3@ Rǒ矮ϿU!VW]"=Ԍ2eq@[P
tX	h?>0T>Hv}}d=6"tWUAwoOR
@
,&NJgZZ]>g7u'uk3}C"k"( _"T<KӌfP]\3v#(~=@ɸ@7FT׼8zgpJR剞&~j?eHÁ`OZ)B4-ۻbDík:w̛i#gާ{uْ^btgg7\rؚᮌ_tR`&=C,NKR^o-*SdkD+}tJ|^Z9e%qOU[4i~;+JCxX6YL)t,x@s{U43@DhTC7O=@	n_8pȻA$i،@yF
#	$r"=p$&aь
h7 G_7!xer
x䈡+r&UsR΃}4xDa}7Ңag9?kJ[֢\NNH
)^ivg8M
L΢xl|$ce.?u?AxE1DsSǙMi
[PP-uo-?ޑv?$GC٤/nQ
Qr|bܒSv8J/u';h7Lfmo
-Ch;9<Zsv,ztBF6.+P3(w"(WStwcL~Z	T,8/ˈBg({5T4 .7K/-GK/cAzb|JlK}A	\x=ޠԩϥ:b<uʔx)1)kc0_H
raufq&Ge%9;\+Ҡ?G5],UȢGi<`cWi'
J8Ҋq]˨Eq7>z1KG#+ԓa4R(ICj0&i4n(-s&5!eU+躊jۑn:ڭ#G~N4xNY|	05x bZbռOyGpnZćI
1W1w7!zCǱt
yƹJH)u	!o_Kuf7`n$7QuŦbR1bTH<D?]*LWa<{/#7USVǨٍb&lvJЦARN,E_閠=PiV<! >Y>{j-P{j-oTI<rwr"GCCU,A_x$n',,ws'>Ð͊ApPvo,5EwU[	a"Jnju5^͒U f,f?{6qo]ăl
^0ׄvbp+[Ǔ${e{mlQF٦<!;3%$ǲz&\Lwa(a|7e'`͢e'_oRr>gF)gL|s5VĬGɲF'	NufRA<<k
yEHabr{ ,.1-,$yXzVV 5#%p#HR0k/2%qyBTcSz=ۊB{e|1fJQ%PK   dO\-CP  *  )   org/mozilla/javascript/NativeString.classݽ	|TE?^}7d2Ʉ98P%p0	Bspy}"* "뉬 zz뭫ry	A~W]U]]]o]{ q8./\QV^0$RSR]VU}Ldy5u%^:6S{\lIb	:-@DtuL3TeѡX>eA20aĞPH,`AŁee'1Kԇzrw/Tn6wy:N8,o.Ԓh,mk+k+kWE*Z][WRu	-&aЪ&uъb跳=a{@wĮ-\LM

l	ЅAh)ielvA<6cש$C6rd@'TUӄ<:4Po,
}.Ti38y-&w6/qC0Ű._/bT-T:QSU^QYS7~*OV\^M"U:*VjQT|8'MUVD*D-FͯtT8R[ x&F HѪQK*)),/B%W!*RCT>A	Fw42BXrCs+GG30&T8y<סUG/¶3,)82
xh?TP̐eb
fe]5M}6֒Hy]t|	%;)	B+*;lYk&|)u>ɵ+ȐG^#tnrҎ5xwnyYŢ 8knM]U#NA@hZZYQ[SwpPQIey%r'*ی,'x+2(Y@;SX`[r*U؅ai(t%pf@ʦ{۱1vqr>DD8&ZORQHEŵZv9pRX%<ZLxIU͋"8Zjie8S៰^bSԃE86 =GZ9
^FPzQ+H*2O1DE'
B*e5Ӣ#|*;V}cg{R2'4ip؂OS{8Uh>Цl.?A!m4@0f|_3RZX9XX{
jaOhOTj.1V_`Xp!4H]mY3䄫ʊquvrh&0 cbaH-m>pi]EImYeE*d̃6ȼ&tiΞy8M2x.>~,/KX
Ke7{wR]EmbSj+uQTxLXm.~b^I@*MǱ/kW.Nbęy#Y=;NMZSo~fY'avw	ʢ^'6tͶXUM[<7ZLa~֍uN=c&``&Fc)Weެ93bdvX}Y?/o6Az"%lf*yn`l3AO'~8t
t#aHr
b0
g#(v'|S^8@;\oEEc6¨E:C6H±iFycl&Iq:M7d62-<<p%	:e>M6"Jd[tI }Qa4LOcOWyi,"*.dVYGfS̱-Rй4fJh`
mf+Q|
de$f10[drךያ(X@gНSW~5:42SKDKQ6	uAa+	g*oYs +ؙ^v8w3<')G5;]>BOYV]H4]eXR
ˮTF Ie5."I.0SB*#UM\kL3l5;P(uӇٱ[/ ivvNF,a&	Mt-h(5N:*v6[PvSx/Com瞲uQaҔf~Ҳn**kUW]S@<E8[#r{>Oo) l.2?:5Z]a1Ŷ zA=V-:"dTRHS.t5n#n')L>j+(3 	J{eO2hi'8Uzqj?k{h}#ى#&L9%e%*"f-{YŁvLgSI	U*Iq<xWFңhؾirEtiauudo͘_EG0jj]3q?q$-GXIyd1:uO;쟱p\uJ1e5Yn6RR>g_xٗyؔ	J"Q,5v_Ԣq],/"Y{ctM E6ifU~دS%#i>@$q8ʊ%8M^PV#ZI*8f9GUOdi=u+sJg&
ǠQ]J.x-\FѼ\]0j [V$R`ERWV>/ZA44ohɳ*ZpD z%=ъAq'My:`vV3*,8w`0م,譛sw>錟#,bgS_6Vsɵx㭪mJl鼇{rtbAM#c{xo	qsCo?C޸HTX| QM#uъqz$cݢy5mnqyh(86R5`ƌC|Ň;kj)EUTVN0Y%(¬G2ha,QǨz)_v >	:55^>9:$>sژl)|*edRP~ŧb+w	c8ECc~čĝ)UV*c;P("QGhq<yG59%Vƍ<{)lYA
&S1,^p.AWVe5Zns?-Z\qse*Zx^m v
Unk͗X|)TS7quW3,ω&;RzL?~;[jV;ς|eR~?".`<B3%5EeYpK+,VaƯ*<'
Iki2WUD)I'):|7jB:{bQ~o͝bpBʘKa$bиS!@Uo&~3
8]Cuŷ[uª)l\pJEvN*0pȘч
Q4n0daOw<HYmmjo=6<fc{+5mv-6oz#fgݚ;aEyd~
Y7j҇]c'Wp:݀)cm4'P15Gm7P7'**/)F)/şiEplv#hNs@iNzHӺ%Ke/A*0꡺Z5: +(f_-:fYET:Qc7ɤΜ$-UZ]8fX]ڦ3ueĻ7g'(:u#v'b5.mq)ҟXS:Tn޸-|Xʚ2t_7
UVbD鈆eſ]O?*|D4R[WN
,n'N9%KיCij}DmYͨi(jW)NV/. } ?`	L=3.v঺A7b(f)Xb&	I'aȺYO|#o%imUVDGB%TA1z(-+fDǎ)־Quύ'NȥahvB7Ϲ_aEKh}	-pW<<x1Acc5hm}e^*-D{t͇;ʑxCt;2󉶮\
,,e
ڒ8]DW(:FfwQG"b{Z8f4r|8r8)(zZDыa*j0bЭK]!X"_ufgΘ02N-1 +1AQ:ޡk$qWD*x
ZC{q[G2[`֢:}IOٻo~{%
)bi4RGQbWX1W[Cc`Y͘hdvIq]uuH-%T]vA&Xb"QJHY^+Nx,I𽏭S-1M&O2I$N3L8yb>ĐZ=;
1sycD[D묭ytX)<,^ o
\X,(/+][熏qxcL35m?Q[jBgnM°)HsĹ^q%Vs\#%A<=ȊWGݾ	tDfv쨪).Ec{Ubˀ6gjf7=nUNM)VSH|Mq]5ءaSEMԻ&uа)6ԴH.MSlB{躹l7`6[j)n#900rNM^v?)ۻGN=Mq-L,6]N[))mSc;J
n?fbGU3E}>msS±No&86)pS<aOqOYi|YL4^60
OZE"e>0)bL4Ѧxɉm1	uf-C|?vM)ޱR'Mÿ}8=0?l_0G1Kv_0'vC&c6JLcsqxcV)~0~h{etKJލGZu)vMDg,/C,Ɉz	>/-iP~q
zȴmA=˒*όLe1͒An2C#U$ּ1Ƕ~~Sf?s"6)J`)lɠ}фdSQDG0o|<:?RQGQSIz,bUٖ$3^Aw_S0fON.0ͰT{qx),.=p,FQU`Fש 6tlh`lTNqjyA5%IoɕӹI6Jdd(
F@%0ublYj]3EfU+Qdveʍo033%l	ħXhO`tgʡt8\p
+c"'Ux'Up{O"zK9H{5`C(/[l#^Tժ Jya
Z2h<dR񉱉^g EJשnylN$"/3WŬS
'
jP5^BoDb԰B1ϡ
X1GTGkQpkZviء?-y6j%: SHxSEe
zVǰxDfچWQ[]t#jXq]<p2ȳgbP'dmάlൽfdcnt~*ô=jaMq̲muy9:" ғg8klUӓ~PhMU5;n¥T7n **Q4㳜j1uR7bs6*2%yr>!qmMT
%S䨮I.%%j_JDmZBL(Ft&0tcwb0H@/FH9^zZ҇FPw-☥UaPe,iS$҅r^Q)ηg~e"R>QK-Wm9>C'GKQs3TJЕ,*RV=^hW~ֹUC}z)j	:'Rq5(Ag=:uEzx'jGKzY}x۬.oQuid~DA.t#8ϡ040&^I _," _m֛tBoz´{xL	O(-VO	}fЗxZз 	`a^L'B0&_-ZX1=fLDixy-qB>B~KlS"lJ%.-L	eZY-L	"w*ԖP;K\q:XANă
@%S(P%Q(P7KlVxY^z[u	=
'T`Hh%6)t2xC!ZRaI
&4Gh%(4$KdBS,qBjAh%V)4xJ9"JB,B[-	-UWĵ^5K\P%Le[bBg:?WTQJK!SMtōf(mL"x]p]C׮q	`ҹo\n\5Uq34RD&Hym\	\=GF*Gk0z\TWqR|zy2btP$5qqNu&_1yT7&ÈzXk7XX>[qo;"j8}"ZTQV	L9%lgWZ/73y"/KHs^6m*NveqRvqy|RA ̖9x'gς!wa$:67େPnӃЪf;`N 
p<rb A莠'm`">I'{vA H
D<JãX
C4<kx2ޟikx4<l
A<W%.E4P&vA%TZK,E1p~UR]KGJGN6Eb8Z$0\8*$0R8#0pG`t4G`ᨍ9y11p!c\\!>"!#16"7#% -nGd4ifw"+fH×꽽Tjwc{cD:NT8=N>bD;lx1c|x/!sEj1:x#DCZn=??#h o$ X)!
5]7C'u΁
j6`8>01?c=L`=`"(f3`2s`
[3bY8]
0G؛eC)s<xKXOE7BXA	|T:8jx=,ORw`9VL!,gpȁsE?8Ob/f."q1\,KfTn//p UWZZa˾V
Kt;J^=eoy">eo:$l,bϞ19m²>{@!yTsNo	Zdt%q_T jk_M[[p*~feik/dEӑjy~3~!!)39b٭8ɴ~⤭,a+XVakAcKУUD,COS<yԛ MR{ܫ$
`<~)O|ݳ|'608
0NsbAśrmbJ\'ɓQA'F0wzQE9 +0\ B<b+RePY*Ȱ|׃BXd4U8>EB?$ÿĎ]!$\Ix$N~Bɔ
(5B(wd Yʠޞ|rxm!Q`|O7C(l<y!vʅYxz:4JuT%|-$>q˄Bc'=weߕ#>H"l?^9Y(c11PT<&)$Z7m`ѵ/2X^;q=$eH{wqbC%J!
BDH`4$ >:92Hg0lf@O̋fKRz*':B?9Qܜ
=-O#B2a
W+\-VZ\jq,-jq4; NH>扃/1oֵ	HL
lTJlˤ2iL~ZJ@]&KddsF{Fo.Q2RnҲ\FHiAv6c[Xfv9{Bl- #]B-|;ЇuBFN@\Q&*=]	X@
}g@9mp'xtؗ!G0	L9/E+H'lԳmg8VqɺM'˳
6킔6'akճJ*olTH2Y7ĺɬ'*DzcGSW)]S`3*)XN+#1r"ǣea'0ZwMKG-J-Ԓ'TǫՇnMKF
t 50b jad1ZQMbWbWbWbWm ߑtפO~ z:ҧ䟸q#J%SO<

Hy{CVt=fȓ8\^בP*8=ٖr
i$u4
u4u4u4Ʋq0'@%jVZ<WW4]R\]5眹sRמ&ㇴFZ!oT}9Cb:
:g35
p
6,p}"J2|[06Nײ:G6(s
>qvziei'z8>llg76M
lzhn7aAOy
l4ِyUE%X	tcB>~o+Wunr8
jP$Y|(IxQCAmG9C;د8iYDk|Ux2v {=;
B(0vl۳	|vH#o+@g;;iB>Ξh{J=̣ac;"A`??a{w?#C9S{I'5[QئX\i-gooq('6@4k+ӼT^~r+B8>RvL>*HP 5@pJ(P>O';g='?ԝ[5T2#n	jX1?%fdJa(Qak'E!-XnP
q^1gtqHe;X
g%?O`ˡ/[#ٙ0`vVyy! VK`av5<ʮgصg^gkn/8|f6cuk϶lvnz+b[Tv'J]˖%mgױ?A|!Svb
Uv'5~aq-&E)S`m4y*`0SN+	TJ{#,c#^+OòTXщW+]>99۽t2PÏxAHϋZi˖s̏1A^jX*"jl#,%x¾FWr8OE~}pƿ!bMWa˺.QDM?a&xD3?c>*A^e^hPX/gL9Qӿ@.IYuqh>%@髃٠7vZuQ)-ΥNw,#W9j9:;T
%9!ȞӢtçS^;奻9nc6p?åj/2jںumiׇ|7ն>k
.OOa'FOבi]v.;aNY+[<N\GKIn:qg7N3hr
硼zF n>R(ct:x6tM者Itӣn*{FwĜ1zp~ݧ|a_cBRi(F_LH@W)ijꪌfuPCtE20
^"a}bY.;	S`1ăRCk{M0E1F_4<<y-=L1c`UQu^#EOl%((zhu+meŤuu+R~*wؖyAshe/@_8AV)>T諩9z+!MA>91Z>lǂ<Yܶ[mVWU87EO~BG΅!QwiE2x&opk7Ͼqڽ
YsNz-A
,yZ#';xFFTHKdvEkBge*'u˵ً_V7g9Z(kv?8sifἱzf
y5IÞV8/?BAEd/{9$p3.Жw<
y.ωh==4PYi)'njR,̕LZ5eNT)KꈁI5AKiǙkJK|Y=0=q~4ʉk0qy@oŷB.}hzjMTvXǜ
B٨$CaP  @Ovg蠪k	d\lmJVVIzC*.G`5v1X.<rvyMmhB
BZR$'UF5MeTM&ʫ(Uz:8;j 'U*ݘ(Ur2$%3ILVೳU"%`i'_ )f-c)vIn2c\$>x8On|"b8O|
LE۞0Oeς(9V> u%P=
Y,T<Blz+'f+'f+'|&Rqy6	@<GM`1|"'<rJ,S4cH`=ת>Hilbj\mP 곸U.VJZ:d*%ȴ]gĭK-<|rHg<Zs` ?Ŋ\Nzd_yʄs2i1wIj|:+V|#O	j1?h

BCw$QFf<iғ$v4hn`?Tۋ#jTcj'O¹
e+P"*!_:N o~#7&o+1_7u|ZXlg¥`O
r;v3nw;v39+-pvYIX0@L$x1(ȵ:CD9c6z~nc{P:Euܯ-\[pYo*;Qބ,lMYxY؁,#
 /b9blp\	d"mRB9ZvUVc0>ڙYYFwIQZ7ȆPٰt߫@>Z<vX'RfyWYF	}hO{Ou)Ө?.Y	?CwW`p.BV;}EOz6=Mnv+/Q;BGU{f	d>eChϯA_*Ak3<A؋N/Q بzq!cȐ!7C$0nS:#,\f1/d:7sqa9M=ߦ6/UD/䣇3D*Ї,UK?;oïƸo1c8_$G@ouo,jPGr.ϵZR]1P"U9BΪ9(+Fg7=U4s(U5UzCKZ7

:x;p;<t`qЛUqG;PB8R$
Ix7;<#,tX"RD*iUH~"P,0W5T6\a86p8ɇzݎw;;!:C9TbڨI>16
AK=ۣAggѻ%.$wF ɼf|7Qfs94 o?J-aL9]$x]QN@g9[78YѢ']5"Kfʛ*oj@yM;Cyn'Wdh-
<1gK:1:@vw<\=ఞ_li듢?T$>


}$5*
ӫ5G	8"'C'w5))R
->kdR8q
$Jqbh(c1{<L`:~`(e\LĩF@rl~1x^b+nW̲$[2eY[vkn_9V~aZu`6İR:-6h}M
{|+da	{FEX9&䫁o.+4ȀDVh36x΂p1ZSJQlQ{gAj89Nم4o)bJ3I,bΎ+`8,8]Ĺ+J8?W
q	ZehWb5<)A^+bEQS7Ob"63)naqY[q(dl" X*dC\O߅L§k(yur&YG֠Xxx7Mki珝
r
j;j3W0yWY/^L>ՓܠpQq+G	`9QJ7, &ZmGId7d6Qݦejl)sdH/|?d1NU\FL%R]?pI0쟆{{PGSҲi$;k(Y}F:/0qnpژ6w7@J:L03*#iB:Ss$fG_z
JjO[17bN#p@PJȚCgRCt4[1XK6_ ?˔_d+c
8RzrONsIK
i.)Qf8
HpuI@8]5*qԭK	:T:H F| \</z	0MJ^@xa
76wGoC=~SCxoOC)|&>ֿaq5oYeX;#"~b 3:_iNk?& %J.]'%AawH{B&d5ސ!l>+ٞ$ce%;Ly<(O 'ȺA[(<!tF&Aܬ&Ip[.ȋ0HpuE"oAl,C9YfDNr!v,[,}-aHq+L:====5JyXSW;CvJ?cW5oR/SX+ەL.oW;n2r)l(*)KISŃSevTfS{mЧѻ.w0:?C _P5u>1@bf//f+}ZCѢiO;!M-&W9;:Z78~uO|fi0}8蛇O<t <9@	;!̡<`.8M)!pNݚi4F^ѩV;t='e<^ɘϖPhBע_e!*S`	"Ho8 22!dg|-Qu\7u\79.6
Y(<IAZ	T<['=Ӄ$5F&~@vlPhAV"ksZ~͌qBWm/e%zvS?FeKgc7A?3cCG9[K{It/7&ѽu㝕ZAޥo\:G)Ku)[
WL{vbiMVЁyd)Ec< :2t,w[Vy@wG*8/0}Y(
HwQIw~S@jPjC閠tKQ{^t<N%[*G筡gdy
_b
=C ozm?KZN[3S#(9(+!K91FK`=p
>|vSRC'y>)eAP:D
W=J'^$Q(5(u(z|J^x+`Wă]Ot%q%J$VAO[yrJMfP[Q݁o.MBWBWBWBW^Ĺ]q[IjG[1P81νJ!
7^ۅY/~zHBT`l1EJ\i
oiqiT|?Ej7s=NQklG t'wIrNϻqj~Γ{0ObNN͏޽^wvP)n׬wf5ݗ0ϐܧBloqt7jw)O:/YYF\E
u5׫7ԚEYe}T庛fWlZcfz/=4L=42V'$Vx^htgr	ayqӰ˦bshc6Μ/9E7;ހTʷa|V\>\*?O,?SPCnGr;b1r;Fn
QP~R	6|=9?=@YO
߇az+?cq׺~c3-{)aǥfєVZqDu׋Nq'Q2Pq_7*kT7ZR
_
_
_

-|~BBu|15qa:i":d7+.Zsնt]`ͽvk]pηWMZ cjbzr?0!L=Lk}7
ZAvdA!.&lTj`F:ad2#6ZFKָͬ]*^*^hcN(|hV:U>!;x45{ّS~;]qkRDѤѻ<vh2A$Qz<B۞w{tSD?
߃
6l<TD9f4]g5Uyi?I%|ּp2Y^J8)v-B~$!oOȺ
B։X1*n='䀇FOОzC0Ì(2Dc0NYPa%pXnSc\nXgŰӻpZ[ޕkR%C;h=PS ԅJS#ΗJ.,<,Bovg>\tM&,)ЂΓL4݆v4-i0:ܡra
VPlCbÐJن-0'R2DzHUS.)'|S.<: OgLThaLd̄i9f@t(4xc.L6J`ER
P+vw֔Q$nnJ9V
hS⣔_5cj#3Ҍ_&IW; kfLŤ;47#4-{g?U=#WQOkSL0JtrHrjV9ݮ2f||:si)"6{MzXNys|! 8y<&!y?4E_(B
Vؗ.~lrKKP`TuQQֱeCgc0΄08Pe}%aql0.MX6rϸUq5X
Ƶ߸,͸0ֻ>a :Y!0$ĩ p]i.qlly0}
=wSt_$RǔOS:g?EIM̱,/m?d>;E-<NE8$fzN(cy
bQ&m6JvV;݁F%lbeLĖh❄M\.H֣hbd	$xIZ,mr[x9a/OG	[*xU:I-:Ku(Zؔ	[x(ZxmaB*>]ԤD<56666riF6F$jţhᄍܜ.{'ldjD6gv#ھ]/ԋFbKރq̢o(ݽ?ƟJn_mm{z^{hq.'"{wIQX
I_~K1~n~cV~+޿qSfkB֛9B/\)?K:#9\UO/|>Ã9nA$U|7U{/:	g$u[܋|nw߽s
|f/̼EXo@:*,ouSzg^<oZ!=~Nc8~5cb)s*֜U*Ǽ?}
'Uۆg֞f){qTe&埬<}3+i*~X\V9ɻ...qUϐ^\,W(XA8U
"<
1@xT=P > ^G
ʿF^~#QI"I߬p} 6ķ(|G fķ*6x58@|
/	!BKAs߭@:	UxD `+!&Ps 1G3-)	d!&wf?2Z"&w+zbFL?p}
bqEL?@;$81K!&S41S/)<"	1g#&_Qs3b53' &'17c렭@ǁl$[
ALӁ\$
+|GbC#&ŁI^艘TI腘RވI+胘Z΁|$
g"&W7]5O~=a-/8kqf-8?<Xσ<b] f'9^ ~$%NWad&"?X7uX7uAӱ~g2ĺX7i-nºaYst^X5t]/E(0 7] )v8Ůb:=C?_hZk=уA=у=O}q^j^ߩ:uNG7^?i24zwk27i2wL;Qx,$^F/McߨFzk5z4ze"u&kK1-1zj2>exAGctkOkKKF/qTޓ/]K_ҏtu_PWQC:;uz7VV5w//S}ѺKN/35zijK@}1~iWOOiK_KQlQ/kt/ititޡX4<::^qR?襾KݫK}RZ&U:tz5:Rt 7KE/^4z)OkRvӻKwNoN^s.:::^::;
.=F/yF/k^?4zɯkS[!F/yN^fu:uz8;[㯥_h4z=8z=MwNoN2*:mt:BF/8zIK_tĸ.靭ӫQTu_~uCc ?_uz~?1/Hϧ?|ϧ?_Y<=tO>/tg?Ss虺3ug?s8.:Y:	::|^Wg[\z3ugϫ?oqs,%	+4z=b=oxzϫ?<|,QGytGOtGyjzԟ9㷰?C3OO=3?CIty
]^C5ty
SUB-bHOOOOO.ɲ8zǤjOOOOO<GwJ#=?????5jq=z?~[T4tuuut>l'Z)
9Ͼ^MA"ώht@xz@?1-[.o_|f[.ަS?WW,M;FtW~?]C8,
= ;'7,_=rJװa{[B0'7
aNQR>`=,d^<x	0'!3/K//pEƜEW/+-R"zz	H5͡2m*o)q3eur/;!__
M?1|K|7}>Cǡšwq8sqȈCfJC)q(-eġqejǡqsrP8tbšq8TšSШ846MCqhjNC8CТ8TΈCqhiZᠫAg]~Sq}}A[28da>ҍy@Hac_gl>VvPK   dO\tx    8   org/mozilla/javascript/SlotMapOwner$ThreadedAccess.classTkS@=KZUEVR2	BpdtFoB"Cڽ|	`2Ш	;ꁚ0Umpeh^0,]d2h +aJ7YV-Bxzr4SZ".$'4ՄghQrySY;D;	a
z+#KA7zꊇ!mXjqXM&K8 چUHC"sMʹB1D~_+ԗ?j0\嬚&/fJӸ԰ڪe{a詍~hCu"o 10[GdU LnC6|e1!aRzOekb<ey(ϱL%o x S
w+YWjNa-nox3BSMwltUy/|1Rm:6<WݞkDPU]K h>cgERyT5N*M]]!L7ĵ
.hfe^yok|JQ+>iw;nZ84Upc^"5:B;=5ҏF'!K<d1m}s	xǴݩw}
)
;Np'_g!ܭ}]$Iky<`$_tu\p`tbrK}2ϱxHѮT_Wc?S|_ -n^c_CX5LNzCFK/PK   dO\\z  N  -   org/mozilla/javascript/IdFunctionObject.classWwW=Y$۵q[rn4ijd'DKZKcybiFNJiײ/
kHvL9o?pX8s ͛yw+c~4
Xvj$c]3imvEsuG&4Gə	װLi'4	#iLDi=T.ZBϲX
U.GH
s䖱3KK&dBKI$v_IZ8ʖZUa/t@[2V.Pщ2b%In=<lýʎz{i@t|hKi}%ClA}P=ZF7چ
qH`g5<OXYZPCA!aDZk=8kJU~,Rq#9G ;v.Z6"DţxLG3-rfym@Gfﯝ/EA<c*QI}0K+zίeo`Tq	MHkQrhps)'9dry7b-d0V1StٺRNxQO3<)т̫8Dkz"̿lDYj՞RԄs䌌:jZQrA,Vqh\t
]i۶쉫ܒYg
Ӊ&X~Dųxz8w7ʣM XBBARmv+Z:YMgG_yHhYQamU%4]]B3]nUNV)k[",-Y<OlEsW+Ԗ
r*p??nyS]!-Mn6n;S8n[do7:^ndU5D6,g/omkf~TϠw꜖8veumYޔ[bԁ:|Q먄,S<<Y%DH$3}J6٫ebkrlt5TQkYv%$zfL}'&w?LF8'IaνU,PIpMO͔BuVhۣ
ʙR^k/9!ʮ{
^XԨRGO_6Q(KS,J@#ӄ7L81>7s~~r!zf/:5&ĞF6
n.rѢc
󊵪{o,3WUk-dZw,k5Mpj[cp9ԨidZsQ&ꂪ`RkCO;v_2/`
W͇kt3+$t
s=ޓIzl 
]h3wv8`xxu;CK	%(@~RJ;ю} #8L_
>	Cr`}r)Z G؏OӸ
(hQS,?0pw}wv  "n[sT'>֏a	!Ik6o@k@k@k@k%=~9b9>FIu|ȤR`~_ TR%|c"_9)!7\F7<E^ B]KFÒG_^]ǀD*$>?|*]	&ߒTߙ_TP,C)|zF;`M<&ըVR\rǪ
B>h	S"#xNAnQ<N:-:-?<-cx4(Ns¯Kߐ^,|As8nD)4aꖻ4=%=]T1ʞ+TiFnei96OΖ(ߔp9G NYo۞%B`82PO8݈8/i;B+C^6{4jp-}g!{>8M4TɗVR===% L]i\%
^"K«Uy³p+{Mm	ňeKzB=I>7<ҭj+\ZMho!jyr%ʷң	?O=}v,D{~7ghutzz
n[ms^xi
Ӹ~*H/K/VNҝ7%_d-e$G PK   dO\{ݝ    +   org/mozilla/javascript/SecureCaller$3.classRMO1}K6.壁~EmդDZiK+ʅ#cWD/HG!f%Rg=?5-G`.DcU#~u|3Tw~aG" 1cJ񤀺ʟ>ldE+%,Ú2|wEf⻕'R\V`/Cw zbYJtE@KC0,R@|ȳ>8?}z/T;Kv:]+
{2;_,bHLtewyRFOO3eW0FN<YwھpqvwN8MHTI2%dYp^-gxD{7
f1Oa';'eS<+s(5īS#@DPK   dO\ؕL  )  ,   org/mozilla/javascript/NativeJavaClass.classZxՙ~dI	rB4A4\0 fd&3afZڪX
]+[F1Vnݺmmw׶{kҽݪ}$G}2s.=oK remx'~(Cp"қjR~zNlkSϲH,Z.pZ/+->jY
%j
,moΨԦXwk꘷cDv;nH65;.p7W;RIhxA{t׎USѶƼ`b".͉wh&	*GDG)LezC	+FYEH+ԛ(em`,Kui%Y_49zQyΓBjrlԙ`I;tY1jL4rJDhWskJq5RhPvuEX,IX&2^,a2E\hd)	Q`BmT"/	ڕծ]Xk
\g+U#!k_(J53x*CXk*yNRC>Mڔ1ήg`
h.Zx,eB˹̇1鬡-j`0Wew.*mh{8k	Qab'n"(hg["
≃*CUkR$͊65o۵2aawaf} hݥco^pxD{8K'h\Q&zcĺV2eu9D|,6NqUz}mB~p`%¤ڨ%sVEL܊Vo<9;Ob]^n$7Rk-a74nIfc>ozh&=en|J(vi#Jp116@p?0xy7ĀǳyQ#xTMӧp+3Ie\GPiE~8f8>E+YIg-lƵN(`J~<ix	νûU>'+L}z'po9x	XIxBNr[L!']QϚ2H8&k~lL|MwEvGt>x3xQ0)k#aHCZ9Qb;fHܵ:L|]2͝2)Y"(U<O#]&8WrĄbߕ/V5	V6nGcT_[7*ŋ?ޓ^/P.P0Z/[^e/L@
z,uhf=͂iVK$[Myxeu(_Y,`CQ;TԼ"~1~@{&O@paϊ/~W+d߆Dwҋ@qћ&~XW"jԪQVĿ̝K8;kE6:j4NXu.)@2/bXSܧ';b?d3$o
ZTSQ-xڋߘx[˂6jٰ%Q:}xR2;S"6TхPBp8K--!2)3\|E/AD*L#NqGqk5Z	J⼩y=/`DS.`v.C6Kr- O6RBtƬ龤ƙd)e`bOhŘCm,"!9:ov!2K)L?;_\X	IQ2WjsnSmPb&۔CQ'CR/ؖúZ"N__!X6'ZbST=wO(`wY,L+x=JZH(?oi]ţD=HIk+f魯</lOЦ>ax?xKiY
GYnV[T"1n7x	qSLS{"^IEaL̒00a7<$Ə]Vx1ftJڧgZ8:PJ4%X-Px}єfBME6BTMOu
>r}1E!D~|nߣj|%b,7\xOD=q\"1Ip~_9qKc.lUnPmj~ق
+fyֹYI?z(&GGpE(Q)q(1$G	f^7|$s#Pڥ:ǈ!qh{w"NDjhNAfE<R^ry`Gft+gyWzryP:fQg-Gb}[djܝ8mkyOZIӆ	*γxvTdGRdbγ$+iEjc_J ؋1~	{%pa\%Ws7h
Y&-b~VCϱiL?Һ %+ѓd%_M{|p	7 u`(yW
0fiu5ZZW!kX\u]c1±>Z<sitjuҌQ_ƨ6F7Igo[guTmiԜɁ _
a&܃Wd}־c.h'=?z0KģN\W29Z683r1Y9\zfuS`~nɌ׶ʥ9)d٨pG70%IKj\)xõM^i)Zƫ.AJ2^CJjNB08h,M;=_ZweA¾Fs~ ⍆ߨ;d	mi_gnu
k%`fa
kd-cg8Z 6`6[[Owa;Ǎ8:Z;QFy.j3cd(d"x4vialXF6ldСgD&Nz6HiυwHLbU6oQZg˨*vU*m5ڡ7*[v:){D	9P-@5N/tP%7j)7Gޡjo]{鈮9NOS O8j@@vQ^Lf jaUgT:5B픰SjcI]_AKH)(ps'@R1=gEr껯g2T6)oG-p'q7q}&Ť\}X_)ed7SQgv]cVh͑KH>c16:6p);-Tp1`0M3H:n疔֔Gi6 3|cQc<CVOJ?ѥd~mw_̯{N5!>PqTTť:2m$3~z~%wt0^CU
~BW1˶]Glo,{❀/;ϠF-+;_h㳡֎+׃x
i@A~:l?DzY|8B&{u7(n<ןB'q>Kx
s}i"%|'xopM<_+)O61Qڨ~'
BgDc(q䥞*pso-*jtF8rőBVޕ-IZ+~FA<(}ldynapx
Ob4ƌy4._KrVUL_?$Fw@AFᴣU3Vct1__q[nKAҽ$=: P89h}V<UW_pZ_A.P7(،~AF}UjC#eHL!
U{20pE(W{i
['i:l.7=6h?4 .*YgC<fp=9i2ʬֿ
!7P׆,QN`xDc'l39g4gPRng˓Rr=abwqQ3~;fi O/s+LW^T<K֫>*hЖTu~<q$rD>!PK   dO\y    F   org/mozilla/javascript/AbstractEcmaObjectOperations$KEY_COERCION.classT]OA=mv]TP( &6k$VJhm`ZlwIgPAh=3{ݙ~+E<QaXF齳w>Lk f껖,FMdlK	0Du*m[er\GB(kRh*tfP3յ+Px}zTѭ)xП^n#&A~P1cC=	j}[lGvAԱP}m,uVR?&FmW3s8b
%GB਎1H]xOhۦmh5_uVpҩgr}[jWis5/p>qB Q.[>*\NٲG\E,_
^7g=zQA6 |0#'^juNJ?(	ɴ[8qMP4F(>!9E&%2=D$Pj)6u`~BSӢ.-T:PCBP9J*.R"B@Ȕ&Fr\B-,<fikϔ܉@=#hdz	$$m>y<`PK   dO\!ޤ    0   org/mozilla/javascript/DefiningClassLoader.classUkoG=5؉~6,#-Xu%te-CTk*vHMQ;BXbws=w} _PGQ
1#3|Fqvugoخ-6̑Q$4n`/&FPLy c&
$1010F.Hᦆ`z~~eF-Qܱ~
{F+z+(ta^Â;ːj:-~cےS'sw&]{!GDq0$h`	7+]!%
b<둤B$iCRTW~Ճ]a%F¡|Egma5՚OW`r-@DmnR\t?u(2Uj9-A0&~I|Tbr(X1h
"wyS	Oku.8Cd
Oo%i>
Z93ry
*^ek!ڎ
ׂƪמ>⭀Wf *:n!s-~ugK[!
.42|L)y:Bc:yf[j4/LSz#J1Hhfts9Px=ʊ[Wx$!M!i4 ɑTI/iMbDjUEs/ȿq<y:t_')sSCoVbUtJ]zGxwd&v١QeFy'X)wAW`c%&bHBewyƔeG]|qҭc*J]ob8Q@"U"NRy١ȁ;w4g>+j-PK   dO\\<  r  9   org/mozilla/javascript/NativeIterator$StopIteration.classSn@=qnMyCA!	BUA(43'Y )Y BbQĖW+JU,<w|_ ]	m?[:#ځs,H4,
LH3lS{$lɐzxcʕNY&ȰvÁOҎJقQ,{}k^Ϡ%EˑߝsՖp|Aqw((1,<*"pAHA!{BRN7'߿l=Jߧ+M>ܨ7	G:C< 4Cx+<$Fa9V['V7) j^yAqC[<rX>HD}D(!<":}$p`Kt4нN{4^jYR.B9DZq7#KS^)â
׍
m
ScalݭiR55PǉeJml[؎ŻX+J)6f,Ok?Q0#SI|2=PQ*j
nf	tPK   dO\Y5    1   org/mozilla/javascript/SlotMap$SlotComputer.classRJ1Tڪ'/z bZp{ƒ&KUÃG/mQgsy$o Nph(gǩ2{;f^@ףx03Dٌ=Nzd0xBraFSy69(cr/,}yoSJu|MHMa3ѕiea^NĝtrąO9bBgUO#?LrZ8if)_{v(p(ߦp}TFVGchaAjPK   dO\$I+  y  /   org/mozilla/javascript/ScriptStackElement.classsT?Nr<mB$N+ӤmZIQ"[f]feYfH:3,ÂJƴCfss}o xIPч~	f1݃V×пb*!P0 #T	<(zwm1"hG~o6X:ʾX[%A>M=(*DUu6|sE8V%	IvՔ UdH;]jvfēLWE͐qH2Az]R1I{᱄L^W0:bytDU	:*OE9Q5A@]D`
%ryy]9?+ at=Ρn%ޔX~f$tm:-	#ݟLYzmv{'.aE%q	!0+X#PiIv6(f{ŚմMǾkKJejqr!!-t鴭IG{w*z7QaPSNݤ0fW=e~\kWB7Cp07Me*(iE0'k^ٰޱbWuQ<H`WN_}1,/aFϘ>r@*ǐH%T(3qFf1@AL6[>@	])r,v|iOę;2<h``;rʳH\7fEz
d-n,]T{^9¯ivhӱ1lK'xUN54#MѤu	
04O̢Vqjӄ	fo#R(=lDڂ4җC0&+AF#|3d2WJҳd#3?UpR;=Έ++t I[8dd#1Q
{;]Еt99ˀKo(!t#ZЫ#]R{H9mU>
'.uw!c12f}m_PK   dO\-ST   >  #   org/mozilla/javascript/Symbol.classN1?GB;0 `!#{aRr(	Hh <¡xf3kfbK{WN ̲~$j9LǄ˫Jv̭&\JYv]gZǴ	g;&sw&F"#aym#E (1\9TOEޝ|PK   dO\ř/j    0   org/mozilla/javascript/Interpreter$DoGosub.classTRPNi		Qnw*"jPRRf~@IMRe|}Eg/9̜s_`
"hUC+Ø뭧6זm
ᛞU	RY'^d?f`N6|ur.C6PEl8C%2CB.t3$@L=P=+P8ezj@q%8} E/Lnvua0П;HC?2DLfd*.TLqKb f
KrbgH+e]e	{e
 >v,竛e-eNsiˆga4xfQu$qnBg7a|O3V7(>TN9-<|ZQ+0=9vRt:wI@Ԁy\?`P={K0r
Y^ O
CKeDc'z7hī5 ! +E-xRt#$i"Bڛ65,t.PbP%]!6i၆&0Fr-')hmL
M8t(48$zAPK   dO\hf    9   org/mozilla/javascript/Interpreter$StateBreakResult.classRMO@}
bxxHB8Ғx#fg#l8H ippʛJ/||WJ=PBs{_h+<uʐ,6Ұ-8.2!R\3)bZ`(7Hr߯cd6Q
V9u<6NCz8uFF
:p iPpYk0"Ra,,2l_UGrL(;ډ5Iؤ!'hc&;CFL;3'b	dA0
f
i"KW4riUZ(yXmKdWȯPyVɮPK   dO\$6b    6   org/mozilla/javascript/NativeJSON$StringifyState.classSNA=a]/e o1h6ÚMOЮKI0D?2V7'>NUSBY9yvC5ͭhª^cN0۠O)~p_ld>3,ƪƯdr$%MW{Qm:YJF
젦DHȊ8bC`ac=6㜋7q@&%լ[!RE\"	d-"br!swŨ6x|5%!bʓI16U"zZ/+ŚlD\Uukd%>MvNC]3uzMEWd$-pΕ4G9\&кNIQ-`U8nRO="C$H1jrnC/]0 /iZi`#K#d-M4(cG^Y{yF1EɛM1ͥS\ʹr>U\H1:"o"x2GE|EmaҒ%Ǭgeg
Zϔ)*o=SV"[dKtV/Q
PK   dO\h.  5  9   org/mozilla/javascript/Interpreter$DoIfNotNullUndef.classTmOP~^(݊u'{!Ac$-]biC?_B4~01Q4&c<CBFeKzν==s^~`S!DÐidUy]K9٢VRW4lǪ+f]m1Мq"(0$Yg,yMeڎezYY]6VOVUɋ8v	@8C .Yc`΢[9	qFU]CQ<=.r""HUɴ:'z04]-%wny׼Y\.NndYL(r}mI%n:K"닲eyQ{a׌g
U|J`
'⠗<Y7G<U5I̩
9]#AuY;ҭm>rͭ;f3PŬ[:Gd-UYGMR0T]
7G)`<E\jhGr`S$#徾NOw ]j	AoO@.
!h0dhph>=EDG\ڤ.R @XnqqRod=}p R.ȸA(kЉ -~҇m0A=W0Jrhk0m'd$B PK   dO\ZX    6   org/mozilla/javascript/Interpreter$DoPropAndThis.classURA=I](j&D(J M/>Xun(쳷*- o왥 Fjzv{}p
)#!%oW7X

G
7ڞ[r `Hܴ];b斓C#a4X2g7WC<MþwL_l+,ʓ5 
q9Aدavy-4Crֽۧ38a
GpaˉK-faOyqNvǰdbPSvC[z훭jCCrh(pgtO۬
B8ءZSˊάI-ENu!1P5CS}5>?)fVݼ<~ܿu9xދv*9.0\A
AJS"gb".1HV=tMߖ닱PMvQ5aeF~/IioѕN:Rz֨`CN,*Iϕ +Kb=SlfK]&ƑːެLXھ%fmygRʂ^r<=`p]᫶*u^hr<d ?
yQgE"У)'FzO!}I2s_>I6Ds-Re\Q\+2Iz}$?4D&~3Nxw$ů8Fkj3i<5Fgbqp{	4(c'PЇ1(<<Ӹ
4
(0qL9iAFxp48fHrw8JeU|}%
̑$;9R<R
,\$!R
BBRPK   dO\f׬h    2   org/mozilla/javascript/Interpreter$DoSetProp.classU}SG-$$,%*EM IAlmb@	
t9.[xܥwe5w_~ ?=@df=Ͼ[ a#rD1seFa2|ӳAkz^,)ن3Z3fs#`cɰEؓQ?0̗J9oN~m!͠<$0C/o=[.Ǡ.w[ѾnU4p!cؒC_ymIu_3Vϲ(&12w0irK|޶\F!	KbjM5Y&ۤcR31msi~_awz
'v2):\j~gy[Z^9> ݚ< Rr@rdrtM~nx>dF].tN
Rdr_-uȞSoPWlUޙt1ʜ
瀂U/{]G`V+FSCp8RMܖgEK=rZY~g *#==Dј:9Ggca4Q'nA?=`<QF4:oZ<KC\=ڋPs|J6fH1u ^_wpaw\b̼
ia>[Z|!GZ!N
/7(N4$w`~h:*!n`H#'nbNd,FPco,*h>U5P@QC|An!}SOq/#.'d3q8}]BEeTNG_$zHD_<ѧD!PK   dO\Ag<    (   org/mozilla/javascript/WrapFactory.classXW<00 l @1Ff1@
d6%KLL$Mնl*Vkmڒ9xwfpr9}~~}o
lRP*-S7D|hlJK;UzFwljP	PD|<vgӖ:ӧӚh,}ZwY_	5C-
W;s3Z|~gNת'C]Iɍ-Mlȍ
-Mu4Hr9CD{2ҢBߎZcf-$Jqu(h
kkpS]%q픞4^OfmG^""pol@5H3m*uǆGS'SC_.vOAl]vdpWhﰄE&UY2
A4ͦT#ai7=,E-zOh4CE[:zTain]o$<b8н"^i@M9>"HxradGWJ7T_	Lƻ	?Gp@S8cQ'ǼqܤZ׾wbzZXL^	"ړff5qyNwp39CVa|.L8
v>	TcH'tn$FtF	ڒbnēp
&yڮ) P0
=ηvmN2II_шOHzOU!ÄŧW"GJB omb%K3
^bHDes	]ׅk+,,	Jw^~2	U\bJ/ ~S2I7}_S?cf-K8ܞHIQ/sEjTCɷ^p̌79u(Kd1II:c5YgU#Z:OIV
IՇ3H_@6g(B96% L_k
:VGv>;ɾfۀa%q#~vAҹtZq#mT9h䩢[9}L`p#LL-8{+pOK9k."'Sf[<bf֧R_즻[}DRAzg?yA
_
ܕ;B?'ų;?'2K*iG]CmkZE4hv]g{yat+좵kP63{.v/# }!)̎ >yT
nAZC~9vuc"
Btyh<4tqyhc/
yEyП੼r
I|"9DN!J v^$E'Q(.^GW0@+"t! t! t! t! t w	V|4fgfj`w+pj:鳐;zK@ P}דҎwIjx˔ԇ.>_1gX>$uP(<}7a>åagիYU{ٳ˅8?>%B|p2:O_H-(]Sx
"\.b&0frEڨBhMdeqix]xH rUATS6Ugޥ
DfU6ѿA8R^:TƖx}Sv,󨺁7;%ͥC)0h&Oߣ%H:#Ѧ*\ڪ!>GXM}	PK   dO\qD$  !  4   org/mozilla/javascript/Interpreter$DoRefMember.classU[SP
-AZ/Zn-R@Z-0CIáӤ&2g^pd||c$Rlg=^ǯo\tuDeEnjbE}:Dt]9=3e-3eMݽPYa	kR
cV!踪bVj0Y"ƺ\%
y2aB2(CGwMqϫ݉;]ٽ4d	uqJBNt1tW1\tuQS[-͔yn3=5^ej%:910\ 2Y]$UKYTU7驆 'I	}*m|R%ܜMg6
f-M5T[P6G7Ir,sl<k5w?JY6ßpj%mvi/	Ey.W> 7xQݎޢaWrb*Ւw3(9lk|JTx,5w[JHp11Mn{{;-\$N
z!,:KXO<-A
~SCy8 g`Û?	' 
ix4
~h!QTqr48p4]?h(#:rS.\*/ШD
}k(oUBUy!
Yy\p#^%4@]&VrHR#imSµ
ғtnxǄGS$Kz
Dh)pLQ,:K!C6,"PK   dO\     1   org/mozilla/javascript/Interpreter$DoTypeOf.classT[OQZ"B˭"JR f[X\vV _)&^߈sN&gf|3gn?~00j+ 0d;-aZbS{(zNX
a[)Ss]a8/_	!:(U 4Ӝv-!zZCjV('LZO,7ȪDn:o2ԬChDyh|<r[+.E	"
.2C[ex^җudv,C{,dWqMu3tT0IX<C$'hV^wcCMtRYE^c茝LQۜz#SE!/?e?#X&IvA3W4~oàv體|$JLcLS6xjۭ*͒ī1׷Ԥꢳ"_+@=<4"=
PpENt
C}NLǜVuP8""ǕGsv)ӆ(x䈳~K6ތz4*g̠d,Kw]	z|l)}L:z226tѲӺCD@Nq
+zW
EF|h
F}878ʣ.FC4({B2y{co'ݵCTCQYoba#1$_6&<A9 8
m^4i`sr#qx(RD	Ai´'0M#3D#PK   dO\aD    J   org/mozilla/javascript/ArrayLikeAbstractOperations$ElementComparator.classT[OQ-nTRB]m(Cf
n5
/&>ϾgO+izfo3s>}{I4"l"o[B=fnO4lڦ?BMELA&Aǝ;e	-8YŬyHx+tP2\ᛎڊ2ܕDz0AeߴPC1UA\E[n`yӚa3(تSqݴYBԴ=_غAh^(څ
Uz6+J!f,F
S&n	=CRE>yw=q~V4\SXj'ӆqG	tМqdF×{ݯ9gOֽF3gZ\|yap'ڳ}Ml[9_=h_H,~n6E_7sTÙ8[8ƢSvuc"$PC nK۶f,yF0늆#<v!^^c?{_z#rBu~<xgۈ|J.Cys=@p(CaJ@JՐ?!=bǈQ!ڠD?%Vc3#2&re?Dg
+X	U"TU^B$v TI>Gs;è>f&
-!N/x.znZ)zsi(KT&qtʄrɩd	xmGx
<!)u `gPK   dO\ޢ5N  0	  A   org/mozilla/javascript/ScriptRuntime$DefaultMessageProvider.classV[S[U6	هpZhJF[ڤJ(XodNIɜÀW}7s:茗΅@(L뾾wW EBa0t?["Sf%`,)4$ChphE0dٕtѨVEpJQWi[:V.I'=/GTEs8p3`)[dBE|ö^
o˹fu\@TJj(܃8GB%(CTLuѨ(xKxry)va]!`Ǣ
;֖s;#|žk-'qSޚ
!%YWer\em/5LeԚ1:]7.Ħzh
Z9JJ<a=#Vp\'qV& ǌe%x0|Hp[Gb:		 )zS@Pmmeisd8#UzwS.4jk^k.b^WmVp$8ۜπpE)qpZj6Y(&bn͕i-JFL_leGx͐:	#ՠScǻkꓛ|Wn	I|J6E+ 41<ѻ YQ+ϳ MYr-RmXeG*ØiDԺEh:V]j'ź"x7;'a斵)h%e;?weVt
٨N.eS0ȋjh(iJ;_#	bB(;Ϋgcެ7}f-eAf=-ehf4D{ܦ3 wpfh1l8. Or6J?!#Oq
o0{Hg6Ϥ#H,+D0`LD1|Cy'\_82oǴgOqb"^ܤߏSn&4W )
gGt%NdN/(]D#K^ދX/f<zɧq:4E:PDPK   dO\X    8   org/mozilla/javascript/Interpreter$DoLiteralSetter.classT]OA=m.eAɗږBhk|!4iCI&2N4&>Q;b읝{9g޹	`C1EasGqx̕])/Pv7-i{nA{l|0JA\n`Cv wM	h arswsv%q\BBøjkK"		+k̐S+6%r&=6pWF38	I~Tt]5 "zx:xGRѮC;NzlFMEX\Ƞ|IC(yђA(l} iTv8Ðb9O95v-_TgCUE(!3ӏ)IyMjS**R}3e~xES7un%δg(4o4prdh;}
9nhn 3$04	ѥd#{_1B,KFa}rL&̗5w0e¼Mȹrf1PG%G
*	DhD"#Eڏ)d\*<Y֫
֠8\:$d7>PK   dO\	}F  b:  (   org/mozilla/javascript/NativeError.class[	|\U7˛L^tڴLZ(%-tIZt4N2qfRBUDA`E
BX
*((*!Z\AP|{d̤)#yws9#{8͘	xyZKh,95lLDRӪVBxC,tHcJm
\%Ls[#x.pKć &Y``Jzˑ֞ZEKw<-nm"6g.]Cl$fJ:L h,R)Ǣ
na4ƘkanME#	N5k,(ZR]Zӫl1I0 IU(T$t2B	JTUc$-+"JsunZژ[`(C
S1M0Ob+z~)O%x꒶H>fZcs%*9ժ ֏K{t1!e]Lmmi,5@5C8iMhW,Bѳ6q|E8b8G0.ǐM<M<dF$I[G
jMYXe}fy{k*B@}Rmi{r>iVH[XUTc5'jMN3'	w&J5Xca-֑Rq9@6q^n^x%'^iSc=.Pp̄-l@"nBmRTʹ团B6"6Uu*PYkqŹFeX&%nPL&fO@lNh~ўƦU%KjIX\JYHD틦AQldbu*1;j"~0нd2Md7}:52cƺyHI`q%3?{fnjR}p5>
YR]q->n:1}O`Z#9eY2'|$:Iu4n)bds*Ԏy>mVYycdgAߔ_dmav|nxhokK0P9<sA[S%L&_>V(uNp7UW<4D\i͇{~]n:HFV,G]} bEKWCw}.uK7WmDD`}"ܨ#EAJ]v}Bu8·NhRhbNdD4=*&q~>&p OЦTdGt.i[:ij-Qw𔉧-|
5cأvGxk]{,v|4<㊏k>-FGQEz x#@Qj
rYE?QYαA
sN)S3$p>ϩ%/W SJ7eUYIyNzvkoI
!i
W{0=w*ñNN	'kL"%a}Uz8ۉ
K}g2bp*L嵦2BJ6V:.V¿.}ҼPImͲuIC*`27+{:b@!~qIe "KMյh$edUMk)>FV*QNaLL[/c<ډ$r)@K
0ML.o"cB!d
+V\$]6
"j0tڪ	Z2B%vHUK2ڒ12VE39I1A=8 L떉qL-S2|ԞC_%2ImsIU	Nd8AUWդ<çSȈժ6ӢO>MP|sө
b*/e)gX2W}'S7(-6eAUIgf؅M$USlXR-d,OSGgyɉ,wNq`[R-t?BbYF#紖&HYõRcI1"/ӎmA]|e<]j喬z.Lu7*KVZ2r+z5{*3d%<zFodl:(XҠMTҖ$=liS.5SM:,fVW
cGcdW41M$zْ-SI[[qFE;^MΌ4&w)F,ᘾ}'|c+sH.RU-&W ?})[aIK	;\Kb6>'g}oUxʛdnu	Sg 7T8i]@-Iyx%p}8wʉh8*HQWV/󣽠&~nimE}%FcL^,\TXS][]:iq
KeCuSCF (ڕr&#ݤLt4=JrZӰlk-lPv+z/8qU@4S:؟FWې`B?I2W

vT<m%bY1
'),4*Аhjm(:jnN0U_+fDfV
D9hhO<9N<f9EKVM8::&Krjv1i[H0xTDƝ5(ie=r|KKW%usiDn$"vx5 VZSy\'R{mm3T[SA(?ɔ)CYq3`I"1}|8\-fnLF˺.}0AP՟p6nc٨sE	$A!
6F[z(,j91ՅߦEQe݅2U$EڈŤ+f$#3K"P^f^,9,/WW/v9.,)'c.<Kur[G3$IOe,Z%/>c ѓqR5
F141,ں5%2&ܲ)݆7[2kd8$ɿ-m}HoK{ɾǖ~rB2o3s
2^޶v akR-[[#	si&SWQ0͞QLfזMc`L]Ivg![nܦ#`!!(Sggbg3w~wFKsfԿ遗-4
ꦖ-ݐtW7~UGMU탹v7jՉ!9ypub.=
աus	(D$dO(,,2wU.=((s!Jm4/ao7e`0B]Ey*+B[+-P"n| _DF`:2_'K/^,i\| 7fppnm1쿽U3=E]Wwbt"*
".Q݁A,Aw'Vdv{D{iDMm
~m`n߁]:VGh#~U~&N%sQp6P1>6iDGQvХMDL
7WlNZG}>\1d>3v {`3:|Wx,l{Uyϓ
*DSw6
܇O4;VT;TK/߃+yUG݁yF5d/ׁ}Ā]ĝhz/6W>ZW@
BȭZWcԬEQSh.Gp
hDMTo	>۱Wv=Zp+Z mxoAkzo;؊ \M+?#9L|R|O88F짔Wry%ǈXr%ǈ$ˈsk
)qmVG(~ךeb)OfwD!LaQ|v6/Fwwsѡ=rmø^*Cȇ2և'+	vć((\A~I>m5z9^h(E^Ư1^"jt4T0n#nVa-{_m(qk;{;t@A;ϺZ~Eel7~p-utŸ~3IӤ[I17Z>%<Ep;.dw;3u*}[mc<%O>DS`oqs궓;ɹD}Svn`M1P'^){w_v w¤]7u99=Y{z!>8ȃ/ޙܘ
?ydL/sO<p˳}=Ռ_7HLO{nڝxa|g>m-[!nI'<BS&{yQ0<Im;Z^yq]mm'ۦ۸k*Ot?
 xFy[Q#9d[wQ*+8Cdȫۤn~6gjdGeAOxv<A2yʿ¶NS%5}e/)]0|`~Ί+@#[.'3r͗q9vNԋűURjV.)krV׺Hu
=

3-CifvVQOcXh$Q+F	_53fee.1D2E&*Rn>ze0ɪ9RX"XL;=)ݏ9w~yңRJo9SWtˡCή4CAQ)
,p_/zmwn%ɽMGQ8SX"<?bdvHY8{JW8ُDD	:Ҝe3 fs
)yߎ<{>
x,Q}>LvV)<\MSB*Ŗv@eL|d]u)5_K@nUISjk:eI]~:nߍT9 *Aoygz<A<[T׺B+#k=d
NRQ(/cPtgpd|9BB"$V!35ZK ox܌oy T<!Or
DC(gPS#?=BRJ"AXYB<*?0ҽy-tw;eHpTS<+"M22PJ4B)'Si3'T9sdɩ$ӸYX%ivtx%udW߱c=B2C(yM<!x)<G*BJ"r
S]F{WO3Oec4KsDW+LRm.A~ߋvS4Ǔz@ώujd5£GxF='g|;GEk:KB\ڭ gQcU(y+Q"pMtSk0^RfE\ꐔe̿M;dz+^Y'd-uK4I8DO`֯tZ:{M۠_+0,bM| z,HIa"L8,Hw/M%JLf-$ά*S\v nTw߃s@:+`y<`i1j|ɠ<O	}',)o&t*
TӸĵ>m:I	C&HIs%$5p0+qlO2?94-
4pU|	A!Z5KC:yd{A0c!zL7BNm'B;Pq.7c[(
:PT擿[F<k򦣧Ю)3f+:_۫UKu[m?O;S;05|6"U"z=3En;ER+/<3F}WpUn%r#Mt74V\-M_ml8,]ڞ.qipFW;XvGǥAf5}?7F+L2""7u.ofK`#oһj36ÛnOİ"M:#qxc"PK   dO\mek    6   org/mozilla/javascript/Interpreter$DoElemAndThis.classU[SI:$$HfWWD pQ/PTnN&
;0ęJoguZɲ<cYIUwϹ B]Q
1&]o-cٶ[76|ӳAkzց^,)چ3ħ-
n0teWH ɑp>,
.{Ʀ`an0{\9pruain~n3D8c5@~3vF@nd`$~AW
$C_ˎ%5C's3{iR94A?@[N`IpR=9ڬD4؆QHV
h8KmN捺-T@Y
pxM؜qKYTKpouE1c@T]w\~
czݖT6%ѪkY+1(NvtT`bK-ff˾w6{vy<!3h
m5у%OCʹrxVA3G6Cz
Zmy([6Ryw]?CwZq.L+;od5ޙ%nԷ5'CtJ=<Cx_|ar3c{أJ6IbZ(1+Y%:<U38mLyAKC;"'2	ي J3!z.+ԥ{hU01pOFC"3[䫸*ULуQFv)D)55<QzIo
9gp1	'i%kEd	j/-Εh˸eܧJ7<2T2yJH}PK   dO\~  j  4   org/mozilla/javascript/Interpreter$DoLeaveWith.classTn@=K8
-[KhPAUDykȱ#{S"
G!ƛ*H.gvwزBBAs |[q$"7ThZPXjVD(_駄t<rly8ZƖP%!q3îg@xi,"OC_CΓH+}H)'pSIc gAL+x-t/wc6b'p'BϏ3Pao
g&#5s|p+`n&a+Bf{Nu廱:!+EΗϖD|bOG&ؽ`r[+Nic2|WFz'2ato24/MF痛z?['}'3:Ypq\"Vm&Rs"Ę~}4ۗxQ2XWp\ccPZ3o(|E&$qcC9XyBT
4²FHXCaQa2W,W367ul%=&ؿPK   dO\'    0   org/mozilla/javascript/NullabilityDetector.class=N@߆`c'@)pI)
BBJRZ3^4FQp X!%43z||~ apMi-|6cyTi^Q
ԞD2Oҕsre}x8ؙ'3rOf9<|5<m':	FPy)]$w5m/L('-@oNͨHm=۲$hi-YS  : MS>nwf~?Q}PK   dO\qm'r  L
  /   org/mozilla/javascript/InterfaceAdapter$1.classVVUݗ$LӒ#X۔&UR%I
z.df:3k	v#u-];3K	6j֚9wNw}Ͻ37 ](!o9bV7^ĭMn0;ɐFNMx]4Y+.ol+I踊$ze,ri1Tgp[bh[WNK/[țg9{~rR9TeW5No@
Tb!bn4C$_M`(xUka:
wĖAEխMsجflpe8Sw$o"B9KA'")ő%:an "	A0Cuk	a\(ˣ27˴4As^6T-xۗ=9'f_1
["\
*(bC7qawƽ{GLGZk#be*bQuؤ$nZ;6?:lV;h6I5Yi
Th/TQynnL۸SU^A~!*{oA7R!<JJ>ΨWש:%V5{M *3,.uM4`oZ"mzG]Ϗgr@IgvjZMGs|Qtmj`_kڽEt_N%/	כ\:ɓtyp;эe}J]6#`@aUW$v]]j]Wl&%BaTuOPj4jp#
,n
q^i0#Lʏ,}^쾥w4]t
ُi4K6Fv0v V?R8@o!=@_WY{7 "U<%,oНY{T14x}*\ebD y~߳_q)OMd>=(tJ']}c٧9#>߂>l"lc}50l|ׯiPdcdDe
arYUմ9aDF4b `TA&{H9mW>+KpS&~@]v)E.?&gPK   dO\c#3(  0  6   org/mozilla/javascript/Interpreter$DoReturnUndef.classT]o0=^ۥM36oc@u؆x(B´jCҤrU0xV$D򹶯Ͻ_ xuX:aa-n7w{{)*!{RPc%OQx3L>C_=fȔ{Q`;(aX80^nw}(<U/-88))D6xlHN8	uy\`<Mk{%r+ߖuVRx!ۈ:$fEQn%ݶx;:f;FFuK(bRFD}UO?Le* aXe)gη6^0;1<xH`c`MFQ"=#9Yd-(VN34EGTJPcX#if?}U9<\o~*`D=*>ioqlgfbnbWLaӐB',chC"n*f[X0ꊸEduw%a,l0
aQݖ	]9kPK   dO\em    5   org/mozilla/javascript/Interpreter$DoNameIncDec.classUR@CkޯFx+2u2(!`H:V'ѱ?| ;lgrnΞ;= <.UtÌ״]8c3ӷ\]nuߢgZw7Ln{n1Ԝ|![O	I2d#x,Cw
-Ɗ0íi/v,8>gkKr@XL\ϩ8d0oU
c˱$K*.
CaUF*⚊A
L'6eÃ`H0юQ6Mtm,

*nu$0`BEp-
T5e;chKlt:T(=^ǎ]ƠE(v٫"C<?bVek(gκb}olX{cR}6D>"U90xs͝,NW<DP\dkdjY#je/
G]`KMDm:	R/9*]
b?b0ܡF
YxTӤffqG(M(/oG/-&8A&nL5K6#}O-~	k2"S7nsr_rp(`1=bX"J$ɗ$ͪ" I%9OI.|oPK   dO\1<}    5   org/mozilla/javascript/Interpreter$DoRegBigInt2.classTmOP~.(p*(NEeAķ!FM`H̾xWkNI!?QӖ,msy9?}pUH)Hk`aF{o;7<|+
ӕ
߳5r!U,me1U)h58>%g(֏ǭe%a(p9=aؖAnrx.wD98<dּm2hVL/h	Zv-f㲂+bah-n]bj,p]AA
I7%`!cOMAHM\dH70R]uZ?\ݳ};\lM=0(bWX0쇚G]YIBDGb]lNMaQM'u'KA\ʇ-n=d5Q6D xdL~׋ 2>:
?R;\afOpQ,IL
zixD+$#):oxS̒(c."@!Ҵs=({8$ƿ>_yq>?D9
˭EM,Du,b)
^'KmL
.E2$g++ifN+PiD4UI>PK   dO\}b*    2   org/mozilla/javascript/Interpreter$DoGetElem.classU{WE
yLv;@J6jx666K9t	#]͆QQ=;Y3ˉ {y{>w/4чGT 8uԽq̞o5k2E7~×+osl2oۮa7$`p zgѷ!WrƱ9y@`Ih0=.p
:|%
a^
\Au700kݒUk\au^iakk,r&-qaAE
o5ʭ.G0
1w²5l[>{kۑ:8&weB:7铽8E%H#׏$1~ҫkJ`3l3읒XɃc\!nѼClW*C%f9oCa4xjYߩAr\e6Wؓ+bVBuڥҠ tk#g_c'4;
T4%FGyJ)(+VCwCp$9Urȸѯx-&mUGQ4ʲ,{Mr)M`EוᲩƑ<946a?]'A.!/]C`QF46+؏zyjb	׉
Ҵ1;  I{9x6Fl<|ѝ,OwLŧI<o,2h[\L1IF_l{'sbMfq*Qa?Pw^!#.@
M2fC򢂪Xǖ@]<¾ԵCqhoa Y`:qiڸ5m|d{(!櫻X#$yQ0F|3@7yYE%?1Jhrd8s$8XG#K[+(kJu _kQbB]'A̿PK   dO\JrN    (   org/mozilla/javascript/HashSlotMap.classWS.Zؘ!I jSSh"?&Yo;}bgLDӿ?4EfL:0ݽcF:hh\2#hЈ#޾Y

;ԦceVnL0|@Фcۅx־je2F\S+%K2c;d|F'7JމMC)w%euTLH]::[r̂޾
z"اS/к~v(NW%qTSWeW5W
0zяM%(ªpW<#Cc{1?3sf!QU!K7Oed=:ҬlY01ײƢy\]	HqGiĂI}8}[O81z#P~J'*=_ʥ=B8chN|1'柘+9XU/R	IjEK\9KKe,J_xhR`C*3|d<%PUskH8L8!$Eq/YعUٙZKÇX~xjxN56T)wC-!ļ-Fo]ZEKWf

vr2p@&NBGZVo~=x^
_l_Ik!g8FCg'e>FӔLAt);gNs%;edf%{AtHlňL`䍔尡.JS2sΤՀ%Q)Eњ(jL{μNKf
VlWNvښ{áz[
/
aaϱ<溑RpU`pSИ*<pӂkf)Z;C7r*O#5OG}Ϩ#RQXKΥ.oXw=$wc}V6Wk At?LL
jG.R%sq?(rm;E`L炝.hsȃOu|oYg[prK9|;s'Rëa7p׺%{ьO*<cH1-ـ#_18aAh/TwوQ6wUYo1#IȐ9fX(eS+E
e_oLs7}K6E^y(wx>K\9 )%{ڹ4M[hGwfe]\AyMW[:V#p7vPn%eJ*.RO{,6	IGncˈ8 L21xIb] ؇6t" c?8ur_xUxGF">FL'݆iB@CDvo>$OxJJ*Oz;Wc"\Ϙ q׀s i@7#Ӄ!Z"WFuaetxوqI}_9;9ɪ9=Eܹ_]T`-ȫІz"G<B^_Of[2OK1}v,*2q:i

R
טkuܩL >y^TBwPpQ`{G#^݋J^NQA@Q/
]a)|$[wwl-(PsRnSU~<ɚb(lOغغ%|YaV(I+*5bB 4ropxɵ8y^5n1gz̽mfbeX;j;X2͸8/p7fnڝH&O[fgp[BkolW3&rWL/隼U.2ʇznaA½*h{Y];MU%[h	)q.VR44
bhcNz(jxHJM@Q22AEYR/Nx$Es+߫~"&^G ~d?[?䏪2|-ZPK   dO\ m    *   org/mozilla/javascript/NativeProxy$1.classU]OA=.ZEB)hh,hRB>MIY%|/}0>w|)+&33{{w#ht2d=V{۲P_@;|y۵l9ī'^uDwkmV,5mn	KCqos>PH5E	kz]!n&h*x{{35!׸Oc l.Ck$C~$ã81t[C%&')!i
>z&FWJi;h3+t"=M)Z)@%JTt
MQ8	}ʊ)*ƢASovN*ɲgqgSѦ!7m"CGЈ QBwy]Gnkj1G5JTۧZ&SIR(ԥ%ۋ{+U3#ESgT$CԫnQ\@m2WliB)~Z+Bnz&'YZ\b\WDajOIF+dVHw;}vwiTvFh\nX"Qy	0^M"C0M1ժ^IG>:L"6+~!5g
ںzt}95]	DP12hp'43ф#z좚#<&
}S<٠>sqBxPK   dO\ٮ    0   org/mozilla/javascript/SecurityUtilities$3.classSmOA~/
^AIѤؔcmb71mVKfo^yfvۏO,b)-dlda
H=6
>x/<>Ĳoaǹ>W_aq)^Y͐lsGx*Ry C^lKt$a yCfm
]kPa"j>"b]*(W6c\yh(0R1LC7!.ؘaaKY0$/bkńC&72`KѺTb)ufxࡌeFoK*b~]bkȦP<`8eӹ,@Cs*3n*iFg'.=(ޭ캌}bF
=XU:3CP)"Bo[0^<PG5'AD+a?UJ"^0\㥥=NۏI\ɜS |R	ff6pu4^Ɯ`_0pDW
U9!2wpUb۱	~?u ěIDѤcBfɯK2fu0~xJ)$U6)ftq<PK   dO\O$    /   org/mozilla/javascript/SecurityController.classV]sU~N6]-PIK&mPiXZ>*mQ"!]3^duux%3wl>c.vy3~\4a@g,g<2m;IfEUhIg
צedf,q\ǲK8yY--T0T5Go5n{^LV-Űn\ūYE05۶%G>n\=NvӉ HM
R{D7pyi'YW`xQx<jC#Nm&"ŢepoKyGωp	.Dp!KV6Y5.W\ #%ns`r
"acHc[/FUЬSMp#['Q!:pvHە|\	3X{&~ڢ=ZGm>͖2|\Iu!÷#HeW,`Iޤ6QˊHLhC_
[컎eכMe+460F>b8dPD>$JN%V,qJg!48Ciraׅ`ؼC(Y5ų2䭚%Utɟ4yo1t
^
U1&Gdv
Uگ_U$1Wij^c&fۡHOII&`1$T"dW2)T3/ܦ5,y[.塿aRgINϫ%G|˞mRӴ7jeHA@?kuZQTy,Y^t!䯕m,Y2oZlQB@T#kpTcرKд9zG7/i I` H+tyzН= 5"_pAn̰y@~B@y*I{Ѕ@#~Y	%OMl,y*
.c3GP^`&7\uobr,SBpӤx1+Y$pA\Zo=ua^^aGq
]/=Z{M_ztɉp:#=&Hܦݡ]uD$ w
=,yHg) cQ#wNp{c|n^" 
n2a&ɫ+@!ǎ=Pe
= mk!Tȏl-=:wdj?'51)6%iHK/3BHYZw񅟔oE$95mr*#pZ\EYTꞌXUbXIH8ruyy"}PnCZcWkj]IU]5v:y`&,m`yPg.(gXYwo4;JPK   dO\0-Z    8   org/mozilla/javascript/AccessorSlot$FunctionGetter.classURA=B
%	(^Pㅛ(eӰqqE|--e/Yn.FI0t}wvׇ 0M
*`Xxf.u}iEh!p^7uy)_A!PF-;[Ou)7l}U&4M8eg
KLM9+6Jn!G21Z

"*W}2X#U6cVU=];-4ܥj֪`8T$-| b^0cč)<aE~U>s.]dk0c+lpM|QC8ఊawF2=-Hnj"DU$0B:88ñ45rC,ERvZfg(ÅB~I7]	ܡHEntujz>|Enhn'PCsF=P/LI~>mzyah؄9@BڃyZ;J[7s\&DQ|eu'K^fUw'*.U51uVJs#\!i
{#hrڶ]E!IO{ҵG$E5xy%|	~?PG	i-zc' rQipJ$|A\kwh_HI.W
F)$/+!{p#tr>>>Z#8^JFIC29!puVRR{?D-Q!ƽ *G=0
]Qtzb/*!'zJ
q/=tea39\5BV,Ik&PK   dO\@_^    7   org/mozilla/javascript/Interpreter$DoReturnResult.classSn@=8ubL)~/m$D  Pa5JQZEBBBYF5D|$ >
1ޔFBu=;3ggfg~=9(lrQaC7Fz@#b-H	^8*
t(N'	a~\ojfqq.ahF3Z@=aGZmnx,B*$4WpƢ">
߆F7	 L/dnGѦ򇢐!yR21U	`LX8*rBua}$1n"|8@9"Ǎ#S0{C~*~׋cL2aeB?l	l	TP;m|i50GXq+S޵lsfj8qewby2qfyXa{g?p`BpP6e\ᵌa̕ɋ%p8*n2bl06WPK   dO\nK  g
  +   org/mozilla/javascript/NativeFunction.classV]SW~NHE |TZDhU
""Qj!,nvݳN:xag:팽kgzљNs$1$tz{vy}uo<!("hf8TҴ,Z˺fQsOvV<nڦ`hJ/Ђ(bv`8 !-͂`:ҙsW+l`%߂FДcK)Kh@'(-pinTi}K
ȇEיܫϫ|jqe]dehtA/.ˬ9\v-+{a/:q|7KXv>b}КYP4-N$J¾4Ԍ2Bƀdh#^r|
Z?dZ<</w8°щa8#`avC`Uƍ8Ci2I
^
j@kHSܲ(n'~'
i;jP̛6&ݼug{6(1x{R) a
n\:fVJƉ+< .[j51<`;r,-QbB5(Sbxɭ 7)9/QC=mDEdϿ&i!<(M[,PO93d	af;jB궰n2*oL+r*2g_ֺ͔9jq*uʗJܭQnSx61GY"HGqRɘyK%u7Q5j85ŪU0UBX)wA{6WSlZ]TtT֒IJG[k++:Ib畫LD֖SB)er?2|n{>S"S#T&ʂՊhk r0VK=&
^&+NN[$l鄢X$fz8P
-(`8s;hEH9Ztzmpsz. L@_ȾCkrn%{?K6iޒ @?t~mTV2qE~p0G46@R030"O#fÚJ\K#hEnxIM#Y,ӈ:2F7p,DІ%"nӚ
XƧړ]zD32q{o^;6!WF/00}/]7H*P D79m/NӾ0@GjP?B7{7qT
iNm;BV7š(3V>ɋsu!KM۔Ǟ(Qi@fU02X-*PHk;j.4hVi8s
]0Q*'MrpѤ,tb+'efX]Lc_uhԵTMͥ7-.!H az=4)jᾮZj_PK   dO\h=	    0   org/mozilla/javascript/SecurityUtilities$2.classRmk@~rFE1P?JU*\{%ݒەdU
Z 89
<O_AT<`tc=Ic>Yʏ&hJ郑4Rd-֔'(Rf	Wq,vDˁaXD#4Nw2̰XcXyjCP=R1lt
a9TእZ$2P\ECm_I%&H0rOG<Ts#I.mk_ƊI*n9J9εߊvk.Ѻ}=I#JZW=TK%:*~+̑9xйh7Idh̼MF)Ha	
vipnn
y7x
,*IAH[d|6_sl懬e"osW\\<<`>+^2q/OF#mts,/?PK   dO\3@  )  /   org/mozilla/javascript/Interpreter$DoZero.classTn@6qƘ:mR Ih .Apacű#{S"
D UZ7_x2ȪPt0Ű}ku\[|vq2Ða9CTcy32NR0Lۯ!k1CEA,)u7> \L0-{}k+lpU,Xٿ/u#ðPj
)bz?Ϡ4v<
z"=Vھm8`QJJ;-EPa'˱l!3h9f&3d1Cȩ;I;DQz<`ԙZp:5qGJ5=1-A|Dk%ۧPF=s&*0U.,d	}}hw\!]O k1ACdi0kO*/>Bl&ϘwEWLOM,F2n񚸅ۑ-i%
E!V*$+関[Uh䳊$MH\PK   dO\)#  %  6   org/mozilla/javascript/Interpreter$DoCallSpecial.classWwEMIM:S%hIG@iiJ6,a||(ŏG^|`x<yYwwvCۘ@{3ss7g esL+0hiaW&-=c7
[2FOfr?KY%m4Zj6[aR$c2Jت,uPcfm5M*7U#ѷKKT*Lcdc}iNxOޯ*C1$Oi38fbüu;o%Zls8jP[*	[O3lH1~|(fpj!!89Kp,2 8c	]%q_8FzZѸRgr.3#9O
uߩxM
9VEg6=9KT:[شs#QPX4
hA+Cm3tJ$,5Ӟ,P$c+nX8aJeX8}=x<Zq
(ٛ43}M{TҚsMھDFK*qPAދq/*x3/3,)6ܝtj\`3]{hSj֯pl6vV̻ĿUb!]D^؁^v\CRA?E-9_ĸO!"{'t8v"_SYYII"aL%]#I8?*x,>!	%dٚtCs3Em&Et'SK7oLdՆdN;$Vђ J0kDSN،ßg朤JurrUD.JH*jI_`=
Q1ZX͌O\vM,Щ֝*5OFJEWk!^=K`S:#	Y7

)1 [7O%WyZ$uiv-k7ㆡYNCe]?M_x~]g/l=ԥʿ2>*wV
42u?MOќ
؋}!wA6`#hsJ'xK(+LZ^p~{bnX!S~w]:|"X"օdH_EcK&09쓂%XI2JQĚ_aA~ׇhK\ADN}klR=kAT"T>ڠ^׳oIfip10P#2{Ld"ltR lq!qAeqW1\8)qKmqwy&EL1KN0N ޠ]F
'a²{XDzGP)C|?4;c4;70rv'fr.DfʟD1
jPrjH;dG7iugHVawQw*`]jwPzi"GCij?Vaaz7.S?G_PK   dO\ճ	  ]  )   org/mozilla/javascript/SecureCaller.classWWTܙ;D@5y5fPRXibԶF;wlͣw>B҇؂J+4&M?oZ~΃gյʰ}gWo^
]E	Jx4\~Jpwi8.PZЯUc#G*mq'!XMA6Yg"IÎ&`IfֻUTJZZVUҦ5XFmX'p+JD0dˊ;%5
hA;z*3M+47c~pV-iT ͙d#Cޠ`۱Q`
v)KR`Uz{D[5Y"P'	YL]Tܵ3x06ܩ.
hKh5H9fP`調uKP h&4*&Y@kA,uݶ9쳆I&-5\L]+N#tϼ{m!gl̰^IԹ0'MٿY%ix#:)=&K஥Y-<Citی0`Qщ7i8n/ߥ៞raE$u8
xd; s9s%U䉜X!GWVGd&~HDnKZ3*V'4
og4/Ⰰ5.cGϱᬥq>=3;a0A
Vs3jdzR#aDoɨT
Njݹ.:}t間,0o+B
'::[CR]eFJrBJ)fiܔ
&-$q[{$+H/H<3̈GMǲMM}azUeާj-Ƥ"6FA
n^\ެ/:
<@W<9,
g}Egj[#]Ѹy856h$aگQ8#Qsۊ l2}{eqSF4F
(1)Gr$RzaK)9jmd ؼ,נCq4CX EB(DaRfMd0o-
+@f*̱:5&
E_}n^w
4S
Rr/+K=k<Ca~.&3hBgc)xHE#j2.͓rH>6ѷ睭;<
I"e3b;<Z."OIǔ3+)2<c$[OΈIVyU9^/4\lf+oV{܋OYf0bA-n8z-LJ/zHGbfrkزFS[beg%p<mqv5qj
<VmD2=JP+K#>~
yA	l˶OC\pE>g>	xŧ鴒R}W/A	Ϡb P>UP}
C~Zk|/NRـw ^xel/DK@U?PM:A@@ٻ/a;(gΠe Fe$C)ƛgd@lʦs{ tmOsxz\b-;8͛~jhg}|vpV'epo041YQ#z'}_@?UQYG)>C}g9C#<ҙ%xs}_rv_W\J\W5o_}{2:{x·Iv<M,luK[-I>#(s
λ/(*XJ WLJ79іUPt9nͿ|3V]τN*P9#s~<{ˎJ;˹sE/8_]W?<}
 BEC=SnP46Ma,i}
x7m39UɾI75OLlXQ+S]>;dYݶԵuuaȹf;^ʄ]uW%:?ď[0ibS(D^	Jp3|?OHD(cd.oٟq_^hrnWٜ\쓏U<2)]*S%_Қi)i.'6g{h9ߪH-lb]wx?sG<x1Y1*wH}8:oPK   dO\-  M  5   org/mozilla/javascript/Interpreter$DoRefSpecial.classU[S@ZBK Ql+^xpҸb0$5Ig0#?8ݨSd&g|{ٓ?~ph@8λ޲>lWozV5N;Pp:9}1˱qTz1f$$U@eށŜaۓ~`:ۆUVd؇6vtq90r,̻UVH`?t8I-[g&J'ȊpRqGb~b34,8
zU@X"8gQVЕʧbeT)rKxwAR-T1(nUuQyVpV1QbWiv?dxښn<\Z^ !YgF%x9Oɹ( mEa,/94Eó2<FeP7k?^7_l!2fNkMَ9FaṸAqʿU ZˢUK9m3*<OZ"ZQ>2
nS#؞*Zpɞ}its#MuBmkRKI.r'9CB/zf:IF2>\>G_%X
%	D23ed2'tG;zf =qnWh^O{[\I㡗2Uެ<XcFhHu m>7	缅I)P 9H81Kv
HRgBNr,ɻHPK   dO\S%  t  1   org/mozilla/javascript/Interpreter$DoEnumOp.classU[OA+w$U/TQ,VKL2nW O)&{ι?~p7S 3Gðeݧm# gՂl	W$={xj`Nvr`!DI-0z\+$Crfe㖜c`$ڱ4;Bx.xb\ŭYtis	%9ث
8Ό!eh20D1{%e3y$AN*NBM5QIs8-t+ܪ;."!|Y6鍹K6\ˮkKT"i}'(Y:_6`Ȅ{"Obyw
VYHoZtVMa,xhxCb5FˆH?JYa\B5Q哦:C`,s]Mz(AZ]X0lA5Gc\LUܺWK!\͐R)K?}1EǑ^NKsKXqÍJ{uM=nWiNoYh3G-|Fbh*8Nh'1l1wu;/iv k]wе;fN|HjX} 7QB?i@+0_c|qNiv5<NaDiE4wȧF:F穔tC	82c	q	엺
iMF_hp)Z !Z":It
PK   dO\Hտ  	  <   org/mozilla/javascript/NewLiteralStorage$NameInference.classUsUNdҴ۟I)R	AM)Zmz,M>3ZxQ|bƩ8E:ݴXL{9;GxMAY/_)oMgl+d"*!h5<3َX2bևZNf-U g_{('J2cIGZڐ[.c
g*V3lKX)=.TW}8Hh^!Esk}2ۀ9Ċ)'Gя
h8BiYby"LN;Q<{\ 880<yEb|R0a	Q1¹1z@EG.7JbbH㔆0APx_"BW"Yi
gp{TXDrA<M'Ćn^G',C?WOK]-pS8VcCW6ey؞Ŕ_ʱSqY6Y'U֑+jjxEarU15,V3w
AaƐW4|lI.SZ^-8RxZhpPpq`KKyYܠS V@?pLkpQRw)#eG
W̑{1+ʻ2Ev)ßԈ2Ԝt+[}ʶ=sDyVzE{UMcQ,#[P`\"amr7joψݯ.
)ݡmoTuZ¹LRL̳ ,Lu%7Em+Wy9+WǿӇHGslh @3#)"|u m>D"UgfF|}ϳ{:#Z~Ct	bwz0zgJNw|ޙc1O5CGsS"iCq&z';x.T:~3v0yt`US`z)/f\!}+ǸcvC|>E/'@k u!хaio/pc .1|I
k:oh۔/4?h"P"gs!+O1X.<">;,1+p[`9hKA3t+3
x'ZegAVw~V,lACPK   dO\           #   org/mozilla/javascript/typedarrays/ PK   dO\    4   org/mozilla/javascript/typedarrays/Conversions.class[O`/]S7D
B9(a!MD(v#,1^QJO!Y == fq3HQDTP2[|6w6[3(,3H9m%Q$T$2ކ^r_[uV*r0=v|d2D}S]bs9 U"'ۥU;8<tB<	t+n=eH.qA^]DryC#bCT5y|ϻΎU,שPywJo-Zy\sjI{5=K"hazmopoCx?UA(j2[7O:Cjƫ%^t|i3BbXv=\E!qC~OLtWhhG}EҨ*105\9lp":#Dh9h=d-݆7Ci.lz3dDZvZ''ĴVZ{*ZUPu-BR4vziw]G7)!,xtyD,P"A(
ečbV("%%!IklY52v!=U5&SN6OIG#pK_9f
PK   dO\ri
    @   org/mozilla/javascript/typedarrays/NativeUint8ClampedArray.classX	X~v``Y@D%C(+hU@	V];bڴIM֦ik>1=Mmݤմ73.+Q}}S!CB,Cڡ)%Z}tX+2mW;MP
A f3ƊִjTvI#P7ze2+6NNHp\ui3-24i@ìm<L%HU+-`DG}z("]#c!r|UEe*ͼj8hJ8CE(eXRZ5nA+ojJp֫2Ųw]R޶ݪOg-Xrk#=C7-հ>ڤ.}Q]	i^$c*êu]*wX\8«dTc9	8:[W
@n<
+(;VwÁ^*QG!jX@Q_nq52V ϯ1GQW
N"\ǸLA2nBӥiG4TwSC}!;7`"c#^GM2^Ib+*g""0Vh#Qm!yF`e8UK2iNl7AշɁ:et2;[n%S\3吴n=)0GU5+9!^*vRxv6 EF|Z# <0 c4d6'Dߨ*v6H=$hVpn$@UA@C"0b&w{]ԒX-%2FQhX5db?;;̛	a2/]Qe$$'~qMeI#Ľ2p 8$Zkp8E 8ڣz7+y6Uە!uzYʁ:	R2 El	Uc$dA!Fںu}53do!;I鈌Щn
2MѠOP4(ܯT#n۱x)NCxfc!.v*:Ea6
y%dxi2Vc2>*.~hWbK8)$!h5MP@tH
}>u7 ׀̌2t
qQLiab'>606<&qN9&\%/]q+<rtIY;=Il5D(Awҳ![Z6f9ڦY-[GpɧC><z63ucmL߄$ӦQ}.GWM
mYnIRIFKȊhX$<E4!zM˪kWW|{ڔI.#հ[S9gtFdtsv# x%h0ɠ@+DVK`nHQjJI"fnyHa<Ìn,f*V*I+$l o(ޒXcs(St(&'9)A͠/,s_ȘV~HYyDfF~]Id"Kا9+Lv
vJ0S4}$hY	55R
'!! hQ4K0A+ٞ̚C5d(QɳWIY4E^bRjبjDy7Пh\J@`SD!MiGE4e]()0S(m4P}獧/D΂_ZUGLWY'*;ϵ;iIqHqCkM̤<h1W`gS0D["6Ӛ9N]|hrF8KZBv-5$cWZcY*<>e	6gXLrP-B2L<jW= TkWUלu*k\5/#h,914ӟSsʬ"@b]#7mkWX
X&Ëp7MN|6wHyql}sv!+j?a>c٘ ͂ޢ]~r9'ޜv GK~	8^umtߵk8PyF艇@i,Jc#TB&yoɻؽ!	"K3[Pnė[y:k#EL\Σ?@ZmSlD+eciF}/qڕ`r^Lf~fEݸy3c-pg*17cL-9D"*&{q&cxtMq_6NS#(L+-.̞,K%~e1lks	׳'i(vqo:B/h?7-z>B<>hkh!GbZs}Xϣqk?ǨOn'1x,fto~fHx@8
29˸.6.z)dg*Ur;8Qdgo;qzB:ȷ˂p}'PK   dO\D'Km
    8   org/mozilla/javascript/typedarrays/NativeInt8Array.classX	xlkmeaa;p	8@b)c4f-`-96ҴMCgzPJ(]hzkJE6μ]dIA8۷3ϼY?G ,.8 WEaha-Fsߐ"m_S3zϴLOP#\U95=ϐ+j:x~=zk{Lh~\(drkVNn(TYzCr	,<i[j{1M `@h`_@kf$7ykY('yv"|z$Z'م2T2
Z7
-43# tbٛU/)oc.osUC5Q	aCzb.}1Sa^b>j#ftһstl4sDשƑ.prBnSk6gCm0m\(PҺ׻}so{G.:U,A-s7>Ga͈ʈq+dP-Uz0pyJCZU43J]XU
^&\*6BfpPo-pko`_
 Mj0=-T\늒cb}`@@X0myl Qn
ok<m`$͍*6fR޿S^m+]
U	dv,)_V@Ҷ؆Sd*trI*KU܆^V}6c{+TO~5낎~*v"(P}
['^`Z֔k0/M:6@j㉫߮"ZZ'4ukxRS1̩u"$UIĮh 31-ByY*^;5*fW;씼e ҍ*n%՝Z{:W+0gu04ޭ'.$tsg8Щ
GNc.܇
ޤ͸rLZtg[8ț(RN5WMKKcUۈAfD'6*BS]U<5ߤב~ͯc
,R{!݃0,x|GU^l/8L|JX*fUyL;,+	M*hFKd 6~}ǧUVT8ÝܧNxG|/{L%E੫+nw4\cenj
-dp䁽o<ǥlОZlQ=Eq`b5yuO4Gd)ܦMH|,Gy]
=dg+m>ܖ!h?Uȋ$ʛVq{!QuKǺm7hC'^D7vC*52+3i5qD@u(9hDIP;r&-B>4J1z,w薽T%'	ajM4v;iخ"TM-K"W
\*Bv±__dQ7wIq
Y$F8^Ŀp<>B3
vc -Y'n!7GqSDp*BQE(H)d-wo:JRfagV=Z
eDY}܆60|b
ۣPQLVURrR/-{1S){C!="3UDM/?
^*T`'x/fE̤>K)3Y1NNZ/|zϥ(qt
4]p^xX.9GWUkxyƹt/2T Zh.$ruA)]wF攏8]R5GJ*'$%*[Mk6VxJO|m96H-{wHSϠlkԙw3Tt687&Ӑ;F>i|-Ŋ#(i~g1;o	)YL* h`Wh)ӽ-^zae6#&'2Ճ6?"9i6YbMǸ6r͏#X=I8lz\M4\u(֝;5I.L6Bi+|­t߱c1m=AI!PJLyK$>mywsV`VM(rCbLl%<t---I>NAf)-^E	3~ZC؈"V˞cK+{	iGE	Ewဍy3cmq<NZ -AyK
wI,[.B&8^[c?<D`.9p3	,OH ~چ?akv.v8Vƣ2=Q>{A%#!8*%z!|4x=q8>7sR|' 3:ӏ&iM;7sCi#㨝[Ob
g0l:YY?ɡC!?ӎ\E+&?dO~OEH9<#2i,zB$<NUL4bfPK   dO\F  G  >   org/mozilla/javascript/typedarrays/NativeBigIntArrayView.classSn@=IcWJIR7UEHFQd$S9="| ;@GPT%s}o 6Q0\N	.Q?<Hzx$yar-Şa-{|C*rj۸N"CҜmA(P."fVqjYx*-aZG۲(P4:Ռp}g:ѧ1<,fKEH
3H%+a*l~.FNO4#=	oF]F#2ax:24XgGwtQG#B1:C-&*k/4E&*YǼ*d_q4l?-ZQwi{}dg%<.^), 1\!'dn쳕\{ޒE\{)
B\%%jK	
<[DڲuȔ#-a:{[V6E9PuwG՞ާ3"Og֬>*PK   dO\(Yc
    9   org/mozilla/javascript/typedarrays/NativeUint8Array.classXy\Y "*G uѸ@ɰ;KvgQL4iԴi4mއ5.TMmݤմ73ŮDؙ~٧^88lK(ae(<4گjܴ[#:7c#J@HSJi;=Z
Z.E2Y!-:0[^o}!P̐_D ߛɰ,gjP_eHfh3=3	if1e!P0~=vQHJB>SW$VeM/kJ\hQj5ZV|`Mla58H]ZEԷ׹$,D-5E!3-F>֪-Q].0D"18u
n]v.ص,)-<\g8:[W-@kdKJvty|}[=<͞.Kq%,C3$%G00*kQe CA1HVbCq@P@QMM3-^~L+p.eV\JjEZ/pZ/OۢA]V<N9
4߈Wyބf3]:^m&%3:mOEL<sM:BGaxM
y59BɒI[$ldH>.zpCMA3:*e+
I	0CNTSӫn}ԯ-Ym\,~
Pa`^
JPζ1]BS	avζ,f4 %9o7Q*ЉC!!U]nlQ	PhX1I~cwoQz2^LREudf~{p/
g}
$Ps>	x#E^-5xa~C
(JGؼ#fE
:a%YJăxKxSI'D#Cb?^2zjy]ռ:.a	o[1厨EtD۸Tc7 	VѠ_̐5Qx@+AvK/Yxw'k!_̊:0XG8AY,t(ÝW2̔f&Lǹɒ{T	"%*qdXZkx0:u>2p F7HU
ԘRP"A4">&Vrǆ|44E:iц%<33	óW)JWﴁi3`Ǭu62*ggw과9w|}=
uLZtP'+.n&IL׍Avy.$3HMD4sgmAPIƃKg(iaX&*|r֕j
O{6#.G*aЛtٕA75B@5g)FSHUZQ s{ff联f*)TK)Gf&
bL}er3hZ$kV8 7*	))^0:{:Wg f-	}hدWy\ӑ_PH|GL #N-|p4vgus!ҐrGx!2o%%vDfcy˗Xt4+̰v2uq:RR,kzgA4%R
퉎d!#77sk.kF_9?5pgzi8\
QᕈnzА;X)Ö+ܠs?SxVAI:ĘO'F'Fg90|x=OƟPB%i;u=Aeڍ9xI,9Lt/t7TUWCH
k@!mZBi.74
wTW9tM5|CSI4r/,yi>_s%
xb.ÕӨ*l`UN!S$ot5Oo/OZ@$X]u1sb67rc'zh5˰ZUtok+n7KO>I¹7
-|p!m$I9uO ~Ö-|liKf#oq6.']	l<g:$Y>-	d`2#N`qIl?[+~$*hȑڙƏ8gp1W~.YVO`%VP^P/@R܂؞ڸZK=_l5?5ryr~U뉊;Q
e,M`ifm$iWq^KͤUb\ÝIhZcǅXBx6g+ЛELbc;=e)7/?GP&Zع0{fKri˲v4ڣFyz1/J\oMGhBZSup}DiZ9B'9>hi!G|Zs}X_hԊ'1D<to~ΈfT	xec#9G&
wݰNagZ"*EU{8GOqjmo;3$=9cu\,%F
>YPK   dO\  .  :   org/mozilla/javascript/typedarrays/NativeArrayBuffer.classZ|Tՙ&	A	EAA#*܄L h|"֘Uֶ]nWUumZν3!Duy|{s}Ѳ@dcVgX<n:lXWfVfkfR&+l*N/(`huYt&$Sa4Q ,UՍChS1+;j9N"BAjHFGlTóVcVs&KtohW1P"vViG3JܰRLHۙSLR]v*6CYZ3vZ_P&,^C0D9r2jY45D&ic	㚕vfcM)
DQU
x,j1JI&&+rrDb IY4.Q١Ntd6B[3vvЏ&fpmuuŷ
}d'ٙZڝfbɄ6lG⨜YVҬAޒĦ\si6;cE7ma0 b&AP'llMWeՆ斓mh]&8lH{EWY$3t8^m3:QOm+L	|UR˰\0cD0:o#PVQ_Zi	X<e톺KyI&NVSVεFl:T0pX(6ԊZSb:ɬDi]VU_=!
ab$n?;uڴþ^J%SUK7@og}Q085K)1c&&IGV!DuH I[%Niwq,|itN[i5ӱ^=imQ|Q:9?pa?ћ3v'׭+bDA܈%nfg@jKgo',V:=(l3q9ұtmS~4X,~q|ɦV;hz	4M]nn2U/ɸmEf+mjZ]Unbvr1َsXnXX
3bz[ĝUgc<<}5qgS$@
$ NFΩ
ăx"J-ɮF{ofaxxd'-{X<KJE>`-ٍ
1)8 ݽ8*oHa<<O5-9V"'+QuR,hpˎ`	n<U= oYxFUR7xmpx^nN
,T$ċ*]'̌%Xbm3x_UH[vw7
wکq;&~h^VnϮA!?QoTkhpߚxES
w{`q0Y1*4vx.s^3OgamC
6buRZ=K&X\EKJ01iV*AvDe&[;2kF0O,*5X8:eR?ˡxOt4QYU=3=Dm|-?Cpȹv,
ѾD
xgAٳ!(d!>S]Kـ)28fKWIjA)|{b\hWθA#L)Q|XGt전|u`bxKFR0][;CcJ	S!Tb8"rO% ^ʤHSw|Ce฿B=<:@JC 
6+΋Pw,92S0!gZ6;&$5r8r-{^XcܱMWN`^ר[&aLh,`[XܼvT
]1.Z`D#sEkq@P1'gxӅ&,8uGvp0sc4Bk\d{_ԋoxL>ElVZ]=}dT,^<hpB86Shz}`zi.DR=c@]q0-$?>[bǇÃUjAhC&|m]JC'GWmѐzZwqtr_ڎK'qP7XPFt!ap ;.wq ԜNE18ybǂQ.Ktfp_}D:WM}$t ub[#u.2	DQDSJ$&AR&a$(ײLJ԰WVIue,݇+r=M,Jۄ,oMUCn6k_umXZpLDV<oAXghɍbw0nPxWggHn[
Zҁ1u޿.*sR`oVYܐH)P촡.#9Ð{	!*|Ry3X-G2"'sP.G1Y>U/koo=¾ݚ|~$9ߦ3-d!xYl \4kk¾|^)6(1z0rFM,/z0ġ\0QۋiYD!"ᚽGy^<1a_$dFan-|.=
a)8xF\F	C
,ԚFmV괹.RHR3.Y&yVQȇkPt!ש=f)ك'q9C:Xt-xzLQk(~+)@/?Ǒ[iq{^l\Xqw[\v!x&ph*Hs5X4IXۊӵ:ZŨz:AVP1Yek2u#?DXT%t_7qK(T?BќNZ3tg7byHryry>Ϲ㕜kr]H?8t򼄇C 6rs/RF`aR_B*D7d(ɋ#=o.AO;QEW/63ۊOSdms!kˌmOa뼠,P䏯ŗ˃}6U|!U]J/c\ R\719Iz:O>^&?O>ȥ{WcޠB!ۯr(OIfI5Mw\z5.4}l'ٽ->A쳚*77yj\99KYs*ec`"+@')&cg8~t勤scsGj'%D2_H%~%i{y=e'wzqsH挜Mw-Xyc(%1F_ l+5`FGjz<܋oyfɧpk}ex[x6ʋ,0B=Ƌye#
AE{~e#ԯ^'T^P%Oqǡ.{1a	g<j,<Vx q<.|iu\p=vc;V\4gXūx/]|Kd2^Vyb|r'|g- R~\hX_2eW0=xZ3Q(v9O!JwNBu>L}`׳&9)\u#t=Ca,#0{0K<Y/8`"$k)g[#́s" !1TӟҀ 7U04`x0"?TlQYf+PǮ2us#P%/1rc@b*1e~ۏUFށQ:}n(P}A#s:W7~Kkhww	1=!qLa?<mvG\.W+غ:X"ҮO *uP_
PEZEO`(Rrb
F$̐8\&`ij02ϐe+6Zj//'pRyv}(݃E(RdG
K{c."-v6m
UNw܊݉+]h>i %'-$YKwc^N,IZ+1%)FygiMF^>_TMwDŸ|o6-o{1.ދݺOv>˛M}5oN9bgUƟW2Ԅ}vaMMZOjyMO:Oj^MϚ:"@jzMCMM2HM	ESeAR%5MJ?:8 2635Hʋ_*A~g^PiDqԄDiV!2Vokn'?}~ة9~W:&~rMDo0M4{v<|3Uz+8&+wvMspUijM|=?g!}#ȇ<!o~SwW^7oWRaRTf<%;  kR锄{hwR*SK㡚#SL	4[x]ӟϴd9[hjOu^?~2OuK)ŝ`w[^T.} PK   dO\"
    :   org/mozilla/javascript/typedarrays/NativeUint16Array.classX	|Ivg3\KG
B IRVlN!ٸ;bkmK>-XDhlk[{Vmߛn
~|{{oO>`DFr%)+2i
CmܫS>`5ZmOM5[rkjK	,ݴ=2S &4i6sK[7A6|LOR/Wv	e|0]ina@Af	L /wE֘Ɉɶ
#9'okj')u]M2fJЧ!>n4T1lu\:ϩoK^-b
.es5b4mu"[X~
jQ'kޫӻ
ctJi$]IBG~[~i2N6&KJ[v»m2.2	+  9ң}ԶtԡqvR]`VEnLR3>2N7kYʌqq%KhVЂsӶiZ L~h@Wh&v1c86
6rtoRUe=Yrkj#&c̼YAP6#C#<x&(Yipm^-4~utïUpvTMt;SvfDזOv*7PTT`p>
@"
 ;n5"(.PLh!ݲ-`Fuմ[^>	Nª$ZSjv;_P`!)xZHT9a+6dzxkM
2সni#>6;
^u@3ɸf_x
7a>8d$܂C`3ߪ0n#mQ#XeOU-q,-
ފ#/֧u
0(b57mSwѭg2%ܥXWMƢ>AR55l=RXlyWwdERvw=vcR5}z{Yhc(vcҌXŻՈfw>,|{	HIPp+ʮ8
L)fKF{Lբ,̖fc?Ȼ`ݐa~W>**)%Fs'ٯV`D`|M@A:r*%F42C<=<&M(_	09Gң)J܋i;dS~;PC/UG('~fjpxw[-N(QlKwivYbRRzv,{=񥄜Q<QOC3̶ک}]Pvf:BDչxLBOxFeo
cR#}Ձ	n牭Z<`h|evNf:r:@w&/0Qa)
Rz:g@RI,V#t2Ac֩	k&!#5x6*Eo)6K&0H%m΁-b" [b12BpLx)yGqo?PB
c*NWny.>L#S|$
Q 'Jݜ.͜Ea:5K9hoRͨ%CX_r o1[8V043O"JF]$#Qyv޳J>hZܮZBֿhJbܨfLF4@N*<CI<9M[l<:g<JϏs9=/zi>Fpi:Q7q&&}z}*]k.ւ9s<COm:S琺bx]`.{}J.s\ONAQqE}C(ɭ´a2[2q%7ˏs]!C)28;^IBCP"
bA]}I,
F0ʌ}c]Q6b4
cR6f5lX?haVXDk#k贉C3D ]wGBOl:S\S9;C>H/p"c`ڔS\NNK4P$@6xWB,Hί֣@<]^uF0Q+!ovTsiMT^ǯ8cs߂C]4ug`m>a.%ID!G)vQvF5'#:)[j][xk K=DFq{۱5q#QGElAxi\FٹI(uaʼP\4fGB
[hCZ
{4C$#^&$ve)GK\l&̛!$xu	ײ#uxS(gm v=Wr{~c&w]GiZ[y.x{K"@?4*o'<?NA<߮&NSCé	ͼP)N!=9]箦psuN40/kiF<ln(w?lY{Mk5rDj(H?ډ<᥿iΒ+dW3hElQ)bPK   dO\ƈQP    =   org/mozilla/javascript/typedarrays/NativeTypedArrayView.classݽ	|E8鞙N2Iᾏ$	\\r
x x!x^.ʪ뵺^'@@w_uիWzGUu/;w 
<NZЧbEIiiϢpuaUIeM啑pUUxyuᚒ-.T(,c\R^R3s3&F;Jnki|ABHM&:S1X(TPsiK5!
"5=
z'4}JL(RX3A!ӄbХ>)5%e%҉eSkJ0ՏU8Ϥʚp)vքvОAZ*%Փ"Ց9Ԧ	3j`-z$]bţ*jF|z2ڈB=ؖmBbT11=FTCeP`xM[3?W0R鳀F!ׄp20\{=ϡL-&uQИTrj)0騬Ŗ㎍ #L	Hi&B@f0:Nƙp*g{_P^YBY.%O*f?,]|pȒHy!L>L64x4zM3a:%51Bucp#r]QMEUAyq%j,8˄,/YV
?&̧բzxaa**U%5vLXH=5/.2a1ԖZcKK/&T@%(R\R|rUEef9&-&rvME9v% ݛٞz	4Ĕi'珚;|ʔN>K`	g!
-pdaI&Rd˹[f'AAeȈꚪB%;3|=vg2#ct]:r.Dy4tMXaQbأil&¥%+3<+bz097x	YK9ÀKщ%.7
1O]@hFK8_94`΄k:pRD40,n8,eT-/$
&
2k*bۤigK0(GQߚ{#j5*JCc΀[I@P?
$pwfС)ͯ(=5K6iiS
&!SDGJC_G$SG-0[Mx[mpfD&n7CGh)H"W
4z
**,YXR:l5`,VDp4Xgdi
ͮ'=I|5d/Tz_^&/&PŖiDe/[jd{27ZdWMא⊪p!N ""1J%hRqXw$bQ* 8 C4юMJ?X,\U)-A&|)%"-u녨?FV}ܫ.-!,	/RR]Q`+
k% v~r3H_D@TLFnwB&"F*H8OK_q@*lB.td{Y	.K5Y`Z&MIQY[4V~UeiЍh_Z
k Ӛ.sX҆,@uN-aL֙uAʝ kfu3Yw
*relJp[,pa:ha~h|Y_9oK'NbV2d'	65AF`iqdl(%%ձT`RmͤE:Ơ;&{vaDA6d#&ed
5qTd QNa)] k6N܉e)&Jðr6ބS1ʍZIˢNC*MŌMcPvlDȈHN3L6B	dqhMg3tv&fs,qKKTBfTdǕZ&-*2Y۫~55D݅&+afPLG5l7h&b3RVj[5=?\ԻB7)]]"Bm*M!U8H~UUEՈE9F+
Nىdd<|%գ"5LFMt*
1]d"lDp"\l%y=ZichV&Zd`gЪi&[t&Fbl-+˱:?PѴ>±Lv9-Sy'N6wGyٕ*]mkESr0maċdױ1FX1Qڞc#75*\6F
`<˰yna8*δ9bngw6j_)(prbj0*m2FځrK:r^0	OvVwTvUg3`m^5~+oi(DX]Q[U
thF,@JmO@=.+..ɫ3ɪ?6wnvlQ5snh|"=dп磬(k}jsԸTkO*Vc_]a{lɞe*(hB9`ٟTI7k-,>e^Fb]~{d?h"RYj^ek&{CJB(ME1&Ucb,B{ۄwMwڕXƜ2H_T=7C?Uj!fTI`$qu!m
GԖap> ACdO2+9TK02'1ԄgGpb&eBNOZPA#[&ߙ{Zq+^^dO>|{;ŵS"յڑMۏ=RVYcx$:=vPg;&	^1:rTPCV:L:oڳ.ͥ<'NR?L\|sPcpJȏ\4&OySxA~S~./X=`NEK3f0)
!yftނA|k"89Dyc>3x[<[1w3hYX*,A:tD8f?fc\ Uے=ƣۛ.qS+#%8
ɻLxɻS
YTYTUOF9&E)NiEwhQG~O4I<7dɈH㧢iI%I~W+Y*d|m4`2'RUAgq<h:È 9m|ց2"d!ҊeK|&ǣ댑0qZGj>O4$>1atemq0S%O1Tr%SIM>d.&l1#aOQS.陒?jHTQbLD,dXa5ӨobبM^Hb1-ΝR0f4bH5ĠvtZQz ;СC_,5EW´L^+@qB: b
l
X.1y%Is +h/2͗	a0jƑ\(JIgٜ:iB>Mߛ
OϟjUi|
0_KZg`,/8֙Dr:UKtǮW*J%ίaо)u7~
Xl􎜍ΩV
~o1ɡMiWT+]e^ۨlM~#	}j
m(Y~-Sbc
Joc
EgZU{:w%ePSh&('c{}jeGb&[
j+'FI}|&ItVv/'1yA9Rc/9-1(t	;.@*8	Sfǈ)kF5|ɟmZxdעŜF)
U&=CYR=yR@^4cbâ7/h_zr^1hv$npK&ZҲ񑥑ҩ\$̠KkpnTs"{ة>Tڱ}~Kip6y|/@kӃۉff9sG&2Wo)ƾ괈ŠkEHaAUre?k(M,F,5E{gKr>Eg9kN 9sAD#\
!bYIu5R)A?M8m;xc1g\jhQA!ASGN)<msc\(P3tPOQ+cIy%BC#<f	ʄ
͎/Luldt-AIx,^& ,AvMQHT^`q6*"#3H0EhI۝7}4@T
V.ژmϕb'`n{StMPY
t)F")7iZaiEuD=Pb""BUnK]d>	짦wuv}ܔNZ'lⱝR-JgM浿N 犁V#B4/8>A\[Z)(9*BS$Ahj%>MȒp*kA[QBc@U)G@OLuq)q>Ub"!#ˢ`
܇MFguSGkXŠm@̈8U|bt6+iԗNGVc0"(}bOWV*"(oJurHJuXYpyُŢTe(MǎV,8"E>+;,(,ghw3jq!0-k|CXH
>!(bCQ-
>+GTu6`!G~bˋ!0773Xk<Xأ=N/0ĥ9oC\nYg
qWUE!ڻxbUN:kta4kQjClP[7Z5VClb6ĭQd1@7l7]?
qEBC܋TI]
O0.'b>XѓjD!z,0G
Qob<!h}>`ݴHMrU'c
+H=}OjƷ'\ƋÅe.lӞ?ёQB)^ #M/ep,(|69`i E.xeč;A`rX-!?n)xjf5
{բ16A#wk3Ӄ*D7toXyW¥qA{Y2EGlOhL!(][үMZG:@
kFؤ]=0UGVqݔpyQE.g[Qt>{ikzfr=mW.a:<b9f-Z)<#e:2 3/q=VM41>S}|1ͩ(.ƿщJwhU<\krۮ 2] LP<URԚp	JGb)o(B9,DIGmD?au֓-Hԣ?̠I:mαO3vSゃH Zce|b"Q/v<R:\j@c4&2Γ^Gb09e~V@UNM|W2W|BVl(sv;	3N`nId6hi
+]qx,P8}IKܧwfY]E~~!L׉|M-j*iStKRLk2Fu:}_Y$k(E-R7Bh[eX}`)[Ga<%ˠ1N%oNnSjk7i#JuWU/@BVԒaax5UDꈳ,pr58 >¥su9!vL7SĩH2
Q88/Zr
]7q&z11D '-*z-U&GfCjꝯ\.s`/ʜrobpW)mu<&nOD2ZmJeWm_xpaM--({ey"D#Fa>8]E_+G6U`(-Cm\zI2*-mٓфΦ,h-^t~87%KzUW7PN%z6xaMbHt*%4U5\͏[WӧM%`QzӪTp!:uD=X]n&_Fv.YKԾCoTN4R~$0Ei[QW{yzA)THL,la&m'ܭ[QC/]HؚeK)@F)V"IszJJ48NE)rEf`@1ۋu@(\cpa}u1-6`>
?MFk?uLUBxo6gbfB{u{6'E9NVZk/#!7Ž|  ؋^WbBЫئzw+M2M;D
XoLG#蟦X	)AF}iջ(5}Oآ	w(gb~!))!qS\J4IfumtSR|MqJ6RJ5ō
J')V*(LSL#B2az׆8_P{:VAMVJP7S< )v+:	1
]o.@P?S|D%WO&h)*RAC	:gɆ6MryXNkK
l֤KO|Sdm*ڛ6N;UƛmbRm,{Z.SHGå5qk$K,TYFhH3HvZ dv6Eצl6
#ƖNk]H2::~CA"ij(27_nK÷=P1L)(/T\vrN;--ܣ_zs7,l3;$%.qu<ۈ][~A0 =|Uʲ#töwJ(~&kghAds+UA&b[#?@m ?0PBȴjK+y\	FRڸWOVvIYm$h'իI'|.:m:a1uQ-ƪ~;X5~=kcH?Շ'؍bb:hO=ХCVʍ$"sv@oE*ZZ!5 De2Ӑ);|i
$YJǡ4eE))e
EsYof] ߥ"d ; u6{,%6_'l ]n[Z-q-/#|ezրj\V/,u[)R<iKVE\0n>Y}+ssV:<+sVb%*A腬d~#+ƑQOFVk)S,CӰ)4XQS`;fIb6?+)6zfCr	q-1VA;Pٰz28	+ʇbvƀm*]8 _N7G'2s4S-<Wed1byaHe#]cπ4bބd^cL8#!VfDc=|
CC审9c2UJiRݎYAǋ!mq۴1SWqпcF%CIbDx	o{!A6m
 jE]k.aȂ

E [,y&ȶIyZH#<JfЯSsy=Q[z:<i=<0ZT
SPJHg%^^b&`"+=˵HuphnDs*-0n	&hspwѸ>aSpp=a@uOWrɶܑr)[*-!TuZJeK-G-@NYkxSD>'l8EC\
m6[g>XZv t͍4-Յ5y-زlo%qe%dRAu,+HYd]Υ]bvH] BVvkyҴ:,e]Eޯ'hNݼ@DEmpN
4~
ܡGcNʏ=>B,S|	Wb|5c;1]ߋ#{cv_'O4~1KDU~E^}?9ʿCb'c8k.Pz]a'i;Yoc|Ӹi,хPY+÷,0ձJskN뉊H=0zËh Bse^
Û8߂soh4A.ڄY*CrGl(|&'[>g7l3|_}
|| G>~3?8	5Wxh~*:\FOpLױWdr|-$e7|vߤxSo0"'':ևxc󃏙8/#^POQ{Wv^~%n<@8|VwuZ]|No>iܸzsz{bRo
{kk7ԛ=6ʺrd/7To
{~zG֨7IbCBYulHi!_k
nKڳl{9.-(t
\D:}!пqA[Db=wSfwXxJeD0IЊ
p!u#ZHZIFb~IBWOܕH:g6H	(WX<9KwFRw
C1,1P-\:6eՑ̬ h\i@<Ƨ[+I[\dnʾćk{QWQϦo^;l!es$ln&=n ?CGXa'+;	z OEc=Li{Z!JUQn!rA*-C=Sʋ1?Cz<Oٯ-&%ՃA%LS|
Ƭ~Y"TKF-s
8Y5ƌlVǩ\ޠ^l胾!//]ݫr#("=¡!)UFXz!_CPDj=\N,Ye1c2LƂM0LBm;Q{]JY^Va-vãleUHv%zvzK$Գ,vѴ;ݛ #*~!tvg:\y<jX`B#0ZЖB'V0J 4tX9,dPJVj}-mtws	`{|tƿG
~f`k]%ueW^Jv"
fW1lĮeSy&n`l#[nb糛5lv=a/~!{}d6cVl;}Yg|{Og,c{"$_K|{_7&<Hp@_WB{yRy`%$AWy"hVɓ9"[0_\/dp<0j_ZǾyVoex؇
Øb7~'U/~aKU|R#C*:ʃr0iJn՚jy
Ң)+O05a8
|' 6-@HRg9tUu0t6F:CX2.'y :C_C, UrD%Imw?h!蝠=9jr8J NdXVc`
W#_+gS#(/f:9)ezZoكVǳ`e[(zG]0&H3OGSfQ-Bzh2pjyT2
ٲX#>ȦaXXذZx(WjQ?[ЗzƱ`{(E]>sǰ-ǧp=6_c_kx1NbCWBKm ODeht=|.GI\2nikr꾰KQf@KsܵHeX8aB̴Jٞeq[k29G,)P^95&	/iBc<9٣yzvHg
0Zʠt!Zʨd{D?_a:
{=ʞgf)C^LCqJ/
G~8Н=#9\H]s+DC?B79B%#KezzOB=$
J	aoud}#~Bσ,%.+($nFK#qṼ8$OW`8\"&*0'Ξ^82)MF0x*.z;؛=-}8o:iזzmx'RQϞh1ZCt*'G(llY%dR=]
%NI6-_#)7lx([.7x_|3
;B[vmE7bGs!fYkx2贏
H#dF2 Ca
"dB2H_I
MiX'/`"^CJNu,Ɜ'EߝL~ѣm|:'o(Yk4Ww0sۗ	i֛UHAYձgJr&rW3.%RTsaWV~5JI),H!πNLgA.y&0B!/rkx(s/'
[O}
;+COi[#'I҂N0KNَ4z7^
TA?fr܅Ym1ӂr=BZڡleiOMlu52yY :ަm:ަZ4y2J;Q3`@W+FavvHn|7NZ'e(%r-r-p`M".AtT1C|ȴHH-ze!]>y.3333SjD]uERvj&
ʶ65:.F5HeHEВ_"Zlllخzˁq`Ⱦ0t8^^$CEg^9Q]G$j#u80D8Qw!QǙ;CTሺz ڎD=p~zGH.$jq&N|l{Q'vO}3x{~]ym }?akݘAzЯW\1002px)CEl50.!]yz4t*.T1 ? ?$@</O0p*+,
:oZ/s@H5V@:4ᇅϴP9ǃ^xЫ_pRۨ$j#>
B|n.%p9]0o {k-4CL%͗6NPHP%m|ԝ^>f X,LǡJ>
p/
C?>8
Cg?{
5Ty޷af#~bhk	qqG[!nqx#[!^aq(7]bRT$\K[0Y!QօAn=0=w\):
gB:.J<:6IYIuucM۾8MSG؇6z1^e~d	I"ڊ Gd	EK"B0ORph&{EGOrR/R;K,ST:¸QMR_m+J}KTHQC2OZꥎmGxY[fm.'8=Y"N4
+r/Q,gYΈ#Luqލq3]X$ȃt18;㕇!*|8NA!QÑaǙŻQ}尯$ I89xZ=/-oYU\x3z_V"ex);z^z51Wc}
b	\7$iݭܔ` q4!k;JA~()61<'6/q*xh#&B{1I8OI>N`ct/,q:3`"BFFBxX,:(D9^Q]ICML|`SY2	ːD 3L@NLBs>`sTa
9MAOiS0E1p)̔c$gMAc,sb6dN@kHG=N-	z90QX":rg9@VLy[Gzo[EWx?%ML[yNMaMMo:p_NWo>jYDCǴ]%NhAoȬtT+z,
n!w8/A3_2UeZL4_bکk<KpNWq5\ŵ0_\%z7
,?_l+ō8?of"n6%6q<+YW	8LsLG:.{mםy#Ilǝʳ˹ryaC4f#9g0,tYTzL-kTǫ Օ4s46AoE1-EzyUNdLn؂r [xr6ՃP +~c쎱qًVn̙	d#D
ގwx;xޞbų.L0ck9H3Ϳr&-NA;-[ql4Ot۔tgeZV^Ϸ#Y\>Mlp{i
RZfiL29w
3]:
)[B3x%%GUx8Q<(g1}f!"xū^u
E
GWR}hfP
>8)@I|IG{qǑNG3μ*
NOAe6Ʌd:ץ;]z0×z &2tB-[zHy?thhb:L_3O7VVv:~}(3Դwu">T!ʏPc//>034@t:[H#@;nrlNF[bihsF3vFkC%w'W&N+՝r
yr3$7M>i'$I|N[tCg}ήC*"X]ήCgס=[DLc}ba+uUx xu~;ߏPG{rwLꑭ2=^4=v3YRFRY,%YR:'5#5$jNMR&)|Rľ4M)>D9ÇO0>4|_Z>	!NK|
$mH	fSeuEpWT=GŮI	ݤza<:HzaDLE2 U]#p̀d&\)[n
wʶ Ɏ/_˞b\b^ٛ>˺Xo, ORj"Q1ʔm ZS
lmb:KGAޯ%T$]NF|'#>ٓlNZG˞XYc7BV*8
~)%ǙϓLsq` \jJcVT܃!NrAhG졿| ZD-f#8)uy@ȚӬʍ>d@|Í5ZD
S:]Kb[ju|fHS2z*}Ҙ,@Ԙ<h%a=PNAD0O;#
N;E,rfc6?v-V0Ks2+0r@&rv@'#$x>O;g|<It@?IDrSsf{!Seꤰo*ӂZ̣O'[*sxs=_xh,|͋A6텠~^֌vsZРߴ2k}Yy*FcD]NY=
e5Y8wfS3LgL1#xMY,ecw#w[qvX2<ێOu:LckӢ^gX8nHW;NKǿ~d-z]ɞ2wZikFS2tu 9z!\aF	MI4#dе@*MtX6aDG,dVB5u1%>h-kkmN=-Oio<Y!wUb(.hȳzmBo2lzANv[F)/Gm-'?,y"#W \H+!CGF^ͅ8U0S8u-ɋysc Z:!Z'$Y$kke
z4:qŷΖr\%!lu /,[uLbD7@"PAڰz UZ
T[TmۢՖjWJ٬~EMЛztx֌W5գe豎M&VARS;
ͣtv(J:j$SkQסr
z o9&(7CEF1d`LsT:qIX́X́9E~.GMJ>s^=(`,G' r0!Yv%'^#JAlQ(!4,S/ߏv}0P{0 ނ|
q<q;
Y
)X0xW:^f38ڮrg)V{`&`b,s+z}<c6#띀}r:KLS-+|j&M1Z;l;^t)QBd*HҾxI,i5-^AsuN{s!&MCIMC`TrJ1ֻ܃ISP(Jy|0|	c6
ݯ+"a|+dR|m%pZW}_{j&$'~Nr$'~Nrg֜|gNcpA&yJhXwiS01]W$a(*s4tnJkm &Z@jb^jY5i,0ӷtҟ@-w>v<R6꼐|B`" S/~K$Fe)y.6{hG"1ԎA^rJ~Tt0LVBXz2BR(N%=>)hE/#}-YL
&B[#b~Rn+l
,&e
H*?q_I&pђ0Xڅ^$|J|1_^J,t	6B)&+1FǶj*N*ڐUq
+cc;ΞdϰS)>)ND$? _~'0FOaΐ%Fzo|u6y6yy/4_i!yYc4uӒX-ilւтl[b
[u`7kۮuaOj3ZW֍zwW~r]kǓ4k N1d91Q/{Pd"=kZZgݠ=S&_b`/9eBt5H2DSU jF2#r5ISF`c"gO˵y*yM"Hx٦~)#cp
g6?e*fh[B
XwGUNC0YtuVECHdu?"sb#i[ H#d,= ~|݉֎}t1L]6eel['ӿ5orv7xRa7{~47)ܽ⨢Mm ɐAH}pv
h#`6h 
m,S؅mE#B'	|..$i}5UiAc1*%'!IV@c~&/t;o/m볃F%-D<FV:i3Af.JxZw_$/vO`4NgK!ZEky栻B^i%	ɣnُ&N-3GY
tCGHVZkQ[]ghƫ3n*\듶n'mkxq;_:1͊m6\i3sQfvVӭ7
OxC+UBZs;ơۻjۡ[\饺 Kr$ؘC89sq@ƞ琧_!:6"cCtȣ&o}UPFHfQdZ7H})m55]vN
R
n
RAYk=}aF̮cĩTT/&&m-U_oLI~|aي]gaw^ ծv5$kp(Ci7ImS,_9Gz sm9mg5lbG,c
4ldLw:h},[O2}$ Ʀb:}"lO
XyVfZηltIk{]hM?1?|h,霍Mte76TD	?kw}^~sdɲth9*qԩR֔U.s@ ՁvG{Z`^ۍ6qdo=	CysV3ڑ;#˷F	x
qw֑4x7RC¶D`ghm3
V
Ћ?OV{ř&ۄsLol%!>ymdeaǞYb7ɯ7Q{F܄,oi6w
m6m6)G"A,48rNQnvu	.ﰻeAhЪ<` 4Xp;I`P(qz&;}'wVoPo8Y?ؾ=6;AS~ýH}NsQ(4_ܽm;|@`3Gy舣~%%z:s(&hq_L7s<¤&0[S>RM+\{20nuߊ[(U>>Y'wX|KgT=N,χg;܃u{<YBD\1/>;?xU;r5"fWwz#R>xm>/
_B`w
]9i؎%Mz_M~_>Oʞ	էW{5!ժGx_ב'`.;Mvo1Ov
X/$?p:%{ڼS~q#}Ytr]T_j܉k_k=uo_tQY'J1d3_`3U
	.SHC\u xv@\fv )yX}q^/TAx
ރE
oEbHBV_e
^HA|P@ JRpq y_4'#|G

@/-DƿQi7)DC@MBoWVT7+.a=
+a}
.a
^h0A/
t@?NQ@gi;0QwtEƿKnS'}H{մOVPM?⟯QO+Uu/h_;J6@yU:l:ױ
lo`{{{o+j?c{?7ͽh{xn5WÓJx2K/*`J(`*NUh^.kŗ֍/'\?XTz(>;.|]{\Ͽ^]čo__7u/ύ_7t7>o~RwF>s)>_>=V7wv+v㛭.us׍_W]g҅ϻׅY;
xT݇׍&7+.t[[.vq7̍_77s3_\7]ԍQ|N7nuƍorucoݙ0t˵Yoz|%}.|Ǯok]\n|]w/n@uɱmtOw?.|OQ|m<ne_<=>m<nq?Om<>'uuK\ťiu.Q7;Os?m4OvinO7ͫnn'Ot?> mIn'Km>n'Ot?Rw;Op?m(>ӥ/~[]"OqXwζ`ۿ*mm7=>n'w?>w?mՕ>nw?>PrɃuɃ\n~pɃ}U(>m1cW;s?̶)@ >cns?Iݡnnnnn0[>)^ol%>.>!>o}b]ګ[`AFBY/H?֟a>,:+x-]HWGd>в._=^uJGej7̐9+ZB<մ\(svK՝#Po|.ƢzgEIbП㠿AoAsAʿ888_qqпAAAݐq<q72㠔8(-
A-qP8c%eA⠾qP88h@
Iatm$!x6ܦftigvx`ha@P!.8hBZȰV,*%S[j PK   dO\c1*
  >  ;   org/mozilla/javascript/typedarrays/NativeFloat32Array.classY	|ML%	h5X%QI0ٍZ+V[jZkCۢ!Vmofn6D˼7fy򥃏X%xBb%p'F:D
CخԒDt0w-v';43S,W@TZ:	5(Y0uF\3Waq
y6e󰈻Sz3HVΆ޽
?/TTK]|ͽ-^(Vej
NhaPh=XLf<r*0_4|d6̤THOD5#z6diNӋyX(j0f4*d
AP.wZl#d&tbe,=
C)lRq
NX͍d\OL22=GGBy&KD28$uwPxp$TwomߴmPRř8!#zB@٩)}ð@]v*}8KQi;ya54{q>*RэciS*fFtvUiHhPMa.;m*M20SX@E 
Ԍ:[{̋EK*cnIoy{-I䓦bQ=#7X~_RlhAfkw4Jtk..ҶiSTR&m*5rm햂*"0sHkGT"*PJi?j1
z11Z
Ъ{x)"ykw`0~
*L
A:jRcCҺ~mz_b+DӚx&vVūe-cTB-_:ڞ6"UA
^O$ߠF-g/m3? ߨf XdQ^GoVq+n#qMGݎ;Uphlg|mzNϼo7h<ҧIgT'yq7ޮ*tGt\c5,9M4rʡYMKfxR!փҦxEXD_]h<2'ne>$x+
2H»U1)1)z ?yEGbIz_޷ɤ*HU3=rCr.+*i|Z`qF5}D3#1=fwqg>G#6^#zHP/gd8B/_zm9]xBŗevFW(J'܊;`d@O$@/}%B*ޡO_+lO+׵ޟ]񓠘NAT;oJx4
廳XlZ-f.mUOCж`m'KOD,~h<{dM$1.Lv#b.7c;kGOjܨ'.eb(Q3aƉ372%Ԋ`Z#DQK0LDʜ\v7?Id☯݆S9AbLm8!-#R<)E]=-瑵7O%?MILh#U_>엗D>P%xy8xI:nᖲQ*Q*WÃ9TErQJUT ;}Z?3kaO޾@E=wh1T7FУF
tiO*jE3X_}զ-G3
bzzR'	}?F=2UD\yMgQBG[(}
'I|\ߟu|_=4*9/opy ֑o->U pĵ%<W̱a|e JXx-p\hi:l컸b]QC5>gES!AҚCPTPUT sr-,4ii5gipùݱW/9LJICTJ%hګ	,imk?H.D[CryUƼG&q^^TO:E}%T*s.*lgcΡmi'qjZ!f?-/'T]X4هP޳\@BY=?rpqWr%W垷G:z}/~Mh/~CYmƽP}1W+
]9IlZl5!r'\,Nb1~cYZ~#8"#ɪe$/<-
;Ŕ`+/C9q^mWRhiI"gjZet9*)iQxa\?e^His/n-ϋ)O
e!SL,4JKd;rAQ

X'U [rn̝DXxKеmw=xȘǱw޹՚-sRXDCwW>89?5o||MZZ?嬗Zd!<~<6݁Y"-5B61"KWڶ >F~1Ygdĳ9ipF9(xcDż%|\)%3o.O̷ypݪ8(PK   dO\eN?6  9  <   org/mozilla/javascript/typedarrays/NativeBigInt64Array.classX	|9ve%	eIh4`I¢ClTN68;ޕh[lM
ڻnm}3K;|~tQ kXE(P".moPTUj#KmĘCI2.w)ѠfvEZhy)Ci@@db!99|3wŇe#rsgs޵֟"*9/CocӀYk(Bze+En]F<lꆗՉb>kʇ*$*7HCo:ܨUWu6UҢm!P()ub18-C{Q681ͭnԴ
s$,CqSqo h̐%DghN29\f-hp6dX3K
yNF3͎BRh, </`ض;w	X-b
A*V(l03TzgPXycÊ273vhl"^,Lr7:%[FN⚩ʁj&Ft54&tav:t]&r^1rL*QzD\^hDm_L	pQѱIեT+ElCN5idP3\~[bg
.b ;H"vc'qfh#sfGDjB!ia;SZ9I-ZHsT!7PN]%,"rx₢"Fо><L5{Eeɽir@(fA7t	N
æPuMrPgOe1]]h*+oWWpǍ8L歲l3*#mv벳8)9(U"^04\Sy0}3WVz:k^c,pQěp3p2Vf镈"jK2ܥǵH,p}X3]sc?O&xjOlwjAf-KwlR˫+|eUmNM?YW8H,I3i_p7E^.GByN,cf#}_fqq
>$øg6bDtg2OA4ٸU">CdSƸsts`PzDC\:z)%²UI;)<  tS">72i9gD|ӟ{2$3nС7+W9E1/2V$~_aX*G%ӈGeLcy0HDxiȱi9׳	N>*I>O!2m݂oK
Upjcx,yka:(lF\=[Y"$ʹu鳷>:ޅݽ́̾8^5.zGdcG0H(;%
p=2^H"i
gVe͎m+wp`^@ԄNŞ4AYɑAlcF` GL)w46m3b[e#<i*d<(K?	`&@qF!)F`XE%MG$4vJ1Ū]J+TQm/钹;]uZ8XwkK$#Azʜ7&&G]n1[ݘUgy/x\kΰjɞe{;_<,QeUY-[ы7!I)	ŪBR͌sm%-ʱ^]Jn<@!wi>Ev[By>rVm'?{2U"5M6,aer[+<O棑 OI/ctW}5_ %y̣u)\Si+u?	E3vY9}6~/p_It%\xld)nAo:|ꗐ,"&EW*HuTn*NS\7Җc>-i*3W׸(_>/MbI9Y7ѧWg1lVJ1sZ=BͭGBswl
o6Dek<	ln=bp.A}ja[G;q.eڎ@wֲځ?(gIs|({gܗm)O,K䰔 h;Qgno
[O/}i+sMė+%ø\(h9|LAl2" H~1H˒ـbA߬ YNwʪ"$"@Z	jD_:*rkהdc.RȖ&Zb$a.P	%i(HP*!_WR'E|uIʑD}:Я<1jsaI8	S+,hHץeUmN-mqmݑX4SVK!l#aiYWϓIx<$ mgu:#l	Nybxşpc3='cJcV,Fn/8yAvExaޏ$у4?d*ah		<rz{ZQk'_hEg*VGᱝޯNkǓ~奒Q/^z=2]j)Won9oT澕m<[9EE1ƭ]8E+a<龊,b}lUЇ*|4XQ̖-wukbͨ?PK   dO\i˥Y  D
  A   org/mozilla/javascript/typedarrays/NativeTypedArrayIterator.classUSU=7?M)%Զ` kIRM%];aqn"t|ŗ>ؙBgdF{6w=|~=lBXADCC3ua`XnǠ" !!o;ܾazNu+Qr:ꎣ?usg4yYDVDqGlA3u۴]3l9
8iG(h^4\:պ
.jxK
Nܪyq"
]]t81*&):)ΖWä7<̭[Tx]c
aA6=A M7
*0\ Mts=ޅ0#0}S{w5)4G;/-QێǫuqE &C[pǶ{
3,zͅr9gX\(m*UJ:K;);&ER%ۺcw?v
Hl@;ty<ؚ'IT^,U܋X[)%:K]"V&3+G
Kn3S^3evtjaP^=*/ֶ-T#CX0&}*V#%zoQ
6=Ԗ<!8=Qܡ4YdGC(ٹC$yI05n M'h".9\E|@y" g-~1cw-n*iF}~oe.B+Г|ߠD~G$iH"5h>_KCTD}(sՉ䶤 
]idxag
-.hrG*[Q\z0 **>93\n#Lb"
 
bcL=yk'Gut7)[pGII.Ya8>bD<)~Zꪤ.ɡWoIo#1NcǸO)>% j9ǘ!_2wW/)AI)0?Npm$&PN-k9_װ1eEܕQ@RWjOjP3A_ϻQDԞD O?6	K_PK   dO\ź
  5  9   org/mozilla/javascript/typedarrays/NativeInt16Array.classX	|$&גD4C(j IRVpl@	
Nv_!8;e[{GVmжHiUzg^kߛ˾7o}ݧ_8e^F
%)˰,f
kRw񈩍Xm־UMSoV-m7'd0xkfd(ll*ǰ8oYAZԖ%̑-7`3w&%K]?CQꦭ2$T*)״Շ.fhD\H]1#n3dZZd(9'g&3)MMյjΓCTTǠOR^l8nUc-l1@ZzԷoXs1aV[͘8f־lKX<.BEA*hB33ѻՓctoJi9@A+.#e"L
mV{>RHzwB/b	K\D
7+&[|C?C5A@a'
UQޯ@QT'Pډm3\
!墤̸˸$t(D׹is°a_j47#<1vǿ5q
L**ʁNǍM1^A76P6&oay^.]S&aA
Q׹}*&ѹp;QvF3'j+&m\jʰtjUJN7B*)EDAvxcTkXPx;`CY"Ce<`D5հ^!14aU>Sn;xc&
,$.C|Fes5T5N)(ߣ`/(=fq'"wW<툋W)&vwĪ2낫Fk	,܊`+sg
sn^.8%Q]l+3->CvJx^٩;6ē
GMGEa}]ݒ'~UT	A5>r;Â><HW4pŒK#K	a)x'&M	UO^ӻG(4vfD)xpޮIRHEm7KdXxm_ƇG2=SG|T(˭81GܳчC([}8psلɣ
ƄɊO;xW>Pluz9#!)hP֢uNEyLPi1}&+MS>'3_Дz̞;/K4"е^(]p/SN\Mz~B5bgǎ1V
u;;2B^P@
)e!j݉>n[K,BTRJaeŗGkPQuFI:7Ķ)}]H:BFݹ3x䡉@zedes9E1l	йLcb,g#4g4cQ=&=JMlTM"Sʐ
IbM@nǜ]"^
fjr\r5!4|,+I%_Ve~`!:c1rAq`h/
QqU=嬐a΃RSeͼ/˙!>_/nɔi2SXJV3Z~'脝JmͤneȑxkU#xC(Jb2Fan>K0
Zg*YUt#9ʳUA]y\b3V!h=X
Æܡ$o$6&Ǽ#:NJ!o6@!.2(
DcW|-\M_G=7褍V&Dc67k^oѧehR;sgp)mLZgbRW}7آ{da>
m%\%!PVҡ1֌az٘z[[ÓViK []Շ<y+~l9Z^1BYݭ(4|`-68eiv"Chj{	źöRaU(csp%	
hmC;c9`+
-Q؂?#Ds<GNҩbp]Ty4i00ɢKT8B' eJ WdfJe"5xn>ޣQ]ߍǮjՔ=&f3IA
y;T^'R~+'`ӂq<3mv
(A^d;Jp=*s'hӢӔɵE~mdk߈bP!bqvM\CT£Ra~xM
e^pԟiRg)~ދ;p+scC+s(^C	muyRh+T~? .')2I&-;)*3GqImg@q.t1
{p6a4af'uײͣxS`E({kE{Q}-hZQ.xʽ#@?01{JٴWy]MOēɼA͢Өp?+5s(\¹Y`_kQZ<K7ln(?O(¿ly{Kk
LjN4NQN1VA'NbW
Y
E=b.֙R6PK   dO\Xh
  8  :   org/mozilla/javascript/typedarrays/NativeUint32Array.classY	|dg\K`&!@b@A$	KYX	JPdwY݂+b=-ZRJO[}kLBeoyｷ/|*Qye-*lޢҺK٭1ml5%S[SۭvI;l=՚kK6Vf+.X/+S$!8m#10 P|.*ז嬋O a]v/$Tl+׸݃9EiVK'0^P(Q#na3nU21_0<qN64NSHiݢjڼ٦}JBb1UW֐ӌA2rUޖ]jd-e,bqQv4mF՘$]X} hD'*zFMx6t\B8ud5ۦfӷp@yǎno[?RRKp C՘[JrupT˸W
DH09N쀷jW1ʜ$Jfܽk%@i[0"ʔH$o?Fհy16>\xq
L*7`@`\~f,[(tTvۦpWSW,IF6Hu}zʸ;jca(#
&K+$i;e\p*r*pp!>7A`vvHwt`j2	&jP3M]M10t	#2DU>S
Ssvvzs:f$eH\2
Vr1a2|F`+Lu:m2^eH5≘jE_!xymWo6;68r$jB85u2n9}IC 2nsa'2NԝCuIxnkV
N5.FFͪ9t)#juuJ&0zM@nRCшjeXꖜz:\ |Yr{@; yP9)6[{Xh4#o+}ln]0&%sm
(a*	|@`ٹ}/>$0w݅-8Ra03чAC1)S=8.p;s%X1'XeL;)̈JR	Kk*z{l01oXex8
I&'4^<O4q'>CB/bhJ=fϝ.<!"x_85<}tޭ1mtlKtO`uŖ0Uph SB}]M	Z}/ȧl 5֮Hf]%&q
	g0ߴshi[O:%}agv|2W?$a7j/PD}a|$&M)!S	oVF'O~ߪWV`tƱsȱH=4{8a
$SB}UQR̪Oն^`Uz+jhivN0 +ӷd4:+k&bau!KʨxOq?]-<sd՚R( _Y&<~1s5<Ey,%Q"RQӜA'):DZfg{{bDt5^F9~'1t*]c{fɢB̦1/3zi<3L05fUw5.k_4Nl%Q%<h9SIHufRM61}
hpė@i@O.|Wϕjk(}u:iUph:E
t[)M+3v%|ZϗN0O&u`x`AỤ}vyŎciE);n@	Uli:KZ͓Va!rc{X,s@
OH)6hUNh^R&aaSsI,kƱWۈdke不Q;M-,̕(<*q^
+NjڅЙ?Ѓ?#}Ds<MSsI$K1v't4MrpS~mӐLCW͗%Afɺ1l=tk:㸱J]MǮ*){kȚm܍*vKE~m3I~pC@ոtgРRaH鰀%((Ǎ}u	nJNcRFG;H-n;:nNy>Qĝ뉊-*anᏗƫS^JHi$ewνw8א<J̥cxma-<	Z\e줰ὄLc-;)*2F#@ߤxr\L`4ay'1)GCMcxSuU9B\8ϥ10MVWU̥

 y1|0QG}>fkiq߸MO8V59v
=vOd/+Xފg11n+nj^zF~>YY9ewF1G>eqZ_Z'$9<((ȧ?I*%ÓKs"Zi/.PK   dO\SF    =   org/mozilla/javascript/typedarrays/NativeBigUint64Array.classY	|dwga@Hl6		Xdc
Af`2wgOڻֶmtBkf&{eKۙ޼f8G fk](B ;kHPzEU}҈ŔaQ?4,XL:oteDnS"MoK|^2b_m 'aS&U0-10 Z b&Ct0\Qu0|j{]P0L[^'2f.7.i?,GKhCU:쫝JS$U^W'>iqa.fy)
7/7i1EU/hsֿO\Kp	EqYQk1PN't9En<*~gLԞAmGCWRHaq!գA2X~>pfHa8>i|Po)$.gʝ;R=;vBV	hkhC+T3cF$5!o`8uMa r<	27+&ZZ<]2\榸dƅV	h	㎄+CrG-CCQ58,th1\^]q
L:Q:E\.HDe_dư`tlVRtkE@N5idqgiiW8,v.;4(|F=")dLD6(<"0CJWr %tDA=m\PD ZPc`n~*f%rܡI3>phvHQT)=)\WOߞ@_m0&N8(	>$}l̴uZybnq3ӹT.y@礁)H9Do c)MDoa)$	zMY}d"QQznс˦Iwwg?`XY	hB;a]j.A1DG	/{#/sjF|@]j@k/0aq%C	ʂC #"Q/&5]q"m$_N5
r<Y`hX*pc]ŬcxH'E|
Ts7`{4l%q:TCN
?k4l5׬N7ƹ󸭏4.\hW(Z?=%s*z9x %(6 d9m\8eap?$\7K5&aB}{d\E|,ZϾ-;YEVTR.âSU9"HbHT9}j<.JkA1Iw?ʁNޓ'q)C4in/_~Iez(1<*E[cZ(̐ʱ8dg`3
5g;nڑ XA+hmfɘEMCwb_p]9I4D$JskѦk#u(BQ#@WULp6ߕ"}y
>Q7={{<D-%YH
{Tp>:/Յ"ԥD /oc̳BYfK:5"GcbuR4f!z@F%=׬Lۥŗ-gvMȦ/jm3Lqd;)u..ZaIW*O	4
FY!̇elFu
4lw,C]qgxn6ʜASnv1C|wIE.l.aKN&+NftwƔ>W*z­ybz{U9^O3!W7=]R 5ܵX=%PJJN)g3s@Q6ү,ԬNv)ö|2̝VQXPxo"bnBz(.|
O4+4
~WR(3Ec;t4ҝ:{{:jğΉXW>ᯫ^CIPb̀7Z|ϐ"%_hTlHĒeZ?qwm(?wqfJ[٨1U4)ign_Ź2S1c/bI	yoS7g)]pO1Bu
'G]g9|}mdm(kHb30
X:ҵ_Rn=ނ؀UV7пhG+.GNtdx}~؅_Yo9<o^Nd1r;x3\Hh7{Ǳ4s}ݝI=Bnq1tW%sq\9?kNPGÁkǱoZ%w	w#4fyۛčJ[]'@\]}]=䀫(%}%C&zKx4-\z3`+Yp2Z|KlDv|HK`E8؝i+㭫mW,"݁1L[sQ4!;Ҝ\aiGŸȚbohnKãL}[_C<*-gcxϣ|8V#Iq0#W+ST2sk偳?YV}wv#	6yMꔰ0>rE)V{7-06źHH⃹0Ȃ	lqnބG6.|v|l`bNVb9	KI|hC]>hToy:euQ7T?hM`ިD;v܃|>Gb-1nW=_7i
Ϸ?a%p~h*m?oD"cv5UqT	r2#LJ])iRVfe<EBlVNlJ%]ļk0R̖QF,wlWҽ55?PK   dO\q6$Z  >  7   org/mozilla/javascript/typedarrays/NativeDataView.class[	|T>g/a,6/Mf
d'3qfV[UUT4ŭq\pmJZնZiwys'Lb{s9{;'qcd#94>]
#V5PcbDbmc6G$BkST4cKB\'"ĉLK#9LJ|IӨ.HD2yRMݙJ; h
LFXSM"0=S>SNMilޣ*¡upb0KyT(v(b
wh*uQHp R?*Ea+t7ʛ_:X-{ԇ2bDT`,vjT7%q&G)xrJ@G39LS:1V;L
&̦HM"(
2:gm.	SC9,<2Kk9H}b^!uuTCiF4FF	^P
.jyV,:MQ+:#L׭a$qн>cFAH@84VO6D:Lur:"vS+dLn4VFc*[f[Mb45iZ<l^iJnҶz5+ҸTkr4(O)'-+ 6n)]&!ISlJ*CVAxZ9n4A1(*K 	y,bi_P%/qHPy'EdΦsz EBqɇi@<>)4/3h=}'G(]-֗f9y0"tE/`
ʒ@,D{"M]L0
6Ex-Zg2Ρ됖'匚bCnAWЕsb^zBP%Zlƾ2j1Vb[Xzh^@#QO&5D*eÕűMvp&_{Bc~B7#O&R~X[	, ]ՠ[6s9^\mLŢr-*5,GU(xA͢`j4#Ê85KLS2M:|K$5mZ0]ge~B˲?k8=d
%ъh4D:erAH@"2)1"{hS~Ճ}̠Rz+6Iz[ =əʿ]yƠ,myܠ_4#^z^t/
4b*PNTFh@첼R$/~+Jg0j$`L
xՠkjaQir>jU4P0Mz39%@2@;ޑ!)cFKGЈƌN,Kxnc!A)&]O}Hf$J,w5_WZȫ%lVUԈ)Gf&?'}fNxr.M%2G0_ob":ZfJ):=4 .	fd f2%8ZKᦠp`3.Fͯg36dޅ7M,qҰKֺx>XT48\<1c6k/J1/KuMNL_f
81Î6xfI@;:cijr3D]<YY<[8F<GsI^cX>ޜqkN.%sM(8-&pl
1	҂B53N#Xknx64ͽͼtq(L
 V⫦Ek>JgIϓ<){xG2Z{̠Q5u#W"TNZ~,%{O3f@>=|ZGBxi%*#0դxZ
:YJVWeYKMZG2ZDP)>%(WL52VO	EjZI&bux[!f+|dgOǟ&J
HYP}$h!61]ߘ]U/qKI6n_!ϊ2N8/>aq]y_4py7q8;!m73]@';7tV'@`$1㜚`re%AE%x["Zc}ovDWi2	$]b	+<I93^{J'9SV̛:wF:)!RkQ@U89H
@pёP1ب{]WfY0sȾ6B]WAnJT!g ɭJjΜhLZڝ0]1a1'64Fg~>]qd(ppF6$^lYPZh+=}t͠tͷR70RG$cVEb5![~f
;h4v7twR6aNlG甿;A	bCo,Ǜ4|dA5PD	A?}fBAA_)ȆL M@")e$yl9JAAy2
aPV6l}l}3b;O` yDZT^p"aS0qr R͉Fljv@>M+{r6UD1|q,ٖbm *.
yWٙW~yAw
f*|W
AGA)ZF 8-A|r}Y?rPwى*9IES6on1t(3%9䮅R̤z{d<=)aXREh]XM9{8̡>C(Cù|D;`0I48u_0j1Æ;i4 0"H '@%))0`^
N
,XwSTe)8`e
 jR.B) @cX+5׸zRbXXx5VN(8DH:N4Pͅy@i-&BOËp-c/JR:H8sνO+2~[%:pĳ{w"<܋w14|Kݔ@`~
2v}!Wd̼vmP{LP'i?~]vӆyCyPfr=@嵛)1F7=[ʝB64n6P=pss:66

?M+raɠM"aAw}}!ã%r:&SfQ<=#GڀO|.7t	mKnFct%H?U_E?	<qhzJ%;t?;',*ST
n|
 qWt|e21(v
q~3k݈c=,e{౩;Qێ1^$!L3Л#zJgBYnC;HNk&.t;5oV-x	tjެB[qV23GLM^hU4SRQ?6B/R˃h&]J;$L吲rD?d
)L.vܓZ7+ٖ(tlB<=sm|K_HǞͅ6zжUCLEe]Jd(?qGDz3hs瑮^D%D/aO^uzޠMXV;4znaӅv3ngX9ԝ8	]Fosx>OQ)|f*)^~r{/D,PZWN	%{ڇ qz>+|VY}d!>:x>J{G&n#=ޝŎxwdƻ+{&JǻsJ3wDp=+]mC>94㽈>F
߇p;3stcxgLnIᆻdN,耄U9!g
2T s E9Yw~>]k9:LlVȿi_PnB5X.]`wduvv$ۀ\;"ٱd;]xDtjs{{Cv{Dujd!{NtjdB`.;69t6e}ߴ}WmXjǓ=$ڜK-Wkk-ͶeU<ƞroJ!˨ۭ6m2GG4"ha6LȘ1f@3c	tkdLٸ)Rc7STjcG2hZc+=y<5Z"L$Si.gy:3P:>_<<syy>(\Ӱ<3T.WR>:>3x૱	OZD6Auk^c+!OQ~JF>,Lߎ$︘ʒwsMN;01o2RfUJ}V)/UR{sn[z.TMZo*(v:O;G2%>EPOL#.n_m%d%Q,9#8霑o|+g[9#VZ+g|%EPVk!{#WoO ўor2U\ŎDbrfOTFFYrLuBH"Χ|!$J2崁Dst5&䵘/zzoL*XxcO{d4n8a>]::SȰºaϮS=,/1BXiXA}q:1o9AL2Y<oӯ϶k[>M Pnb6;Q3	S1wՁ_;70a|}^d3V]<7Isl	p-	ǜg5^ӏ'<z>﫸^}о^׶w׭v\6~Մx gKsqGp~<߁YRӘq|s6Hf8_QRL_.H?x \k>2rI+-+ӗ8>/U5
ou>8\p/x%pH%<g*<x
p>Hz  p+Ojrm%W|-QӆU )]>{yFv9}aW>Rϵ57Vް5|% F./O>qW_[|οh|w4>i٪mW--&ߕ&U
g]@\3'KA7[oH]:__:\H9h|4>+9:~]]B$[|ctcubuFay5ؿaߧG 'gߩݫm6|kŷV=;L|7*0XEY|5s5IOlogkn.UL:A[U|3u	+|>ϮY-n6#;2oר|KtJugzc=h:LH?JowwΧ?GO?G9꘲eoY?7'y='yWR
Ө+zȍ]W]cho?Gt_(_!k!(9_jPhN3fw(2YNw{P̱uIEA!,'{"$Oɇ%y%yt8#Qʶ?_zv
a؊ɿ{Rm~inګOџ3yw:֑3#37f _O~W6[i;ʕc+mDPK   dO\a   B  /   org/mozilla/javascript/typedarrays/ByteIo.classV[pg=k벒x#'KPPYrS8r]k[ZMH3m3ڙ^x<#/13wW2Csw_?8[qt3PaD4kusbVWF.-k"gr휆l:bQBBϽ]+i^7+[Kz38'
CDհ׻]J+%[C_ž('Ї-{edz\#{s.oFj%ӶMhiZ%f:'|87<AG1 j W-eDSơĒu.M<	<y^<}:Y^)Wkǎ^ZzIQ|5g5+~fr8x@D2)g
%B,B?=i1Ų8n&bb(tMγuQW^|-B@z8^b"[[ƨPKybEq?oLx\H".1˒s6cMl"˸(x/<zZ"VTZPgL=9e-Y.[je|fsO'p
,XpP.YbX]ߨ,׬3Z6JC\ɥ_R*KeJ9
5ssCJ*pmIY[Db<.^gIL'mҗSr.R9,	C-Tpp3sڸ?vT9q43>mmً(`Ds:D4 4~kgBg9~&\sM|K[$f5%	s]0y?Wmޏ;L:ϸ3CpɕvT%^UXYKz]O@w+^.KQ\Tr(<@f\+qI3.^.2m97x%@5oycyJC)c:=N CNq)9,DNO2|H2?cC1
ACZ;tnz%q))t8+?,D;!tcW23!
$H61_g֡Z|{ԧ@WyuWW
t 5\/K.zV݊zEQ*su7}Ǿ}U}b?úa=۰f0F!9)o]?#?hUXU*VCdSaAPVVJ-@^,@ʿ >p M}9lDN^ .aٚ+ /P:{5dV̪jV5,R1J\Rli6>|з:=p-CXھO_nXKno@[)2;1?)#~lv -t;6[4<3B34Jl7`y2ɬ5u
;$jT=ޱq5_'Jo]魳ɺ<y1̳c+
d[+4C;"c@i7sL;}כQTx ^:
A<=Ii|쑪#UGiC{̐/C9;b?QJiif<9-Gi!y48͹ t&BFnۅI$6w»܅p?KǬ܅p?S珍|Ƈ+>KʎƎƎڕ߮x[i1nܦܗWNppF8mj5_|5! JWwE'dFgC
^\?^|w%^R%KJ:
0o`["K=xbOI3٣ {D]I|]I\LS˭}=s=	ܽMQ5.zPK   dO\˚W    >   org/mozilla/javascript/typedarrays/NativeArrayBufferView.classU]SW~Na! B $ZR)PwF"`[=	'amܥ
^u.3:Ot:9Y{}9'o5+x~ .N1,x!cn%5\I,0nZ;Ʋ:Fu6wUN,pSr3])a8a$ZƎ5|)%i5p
m](6!ܖ+2*e4lWmny"zTnAL1p-Ș[s֚-6Q"ĴmRAᜎ. wDn3q+1TGXn6UE7p(u^ܭ8M(a$t|h2FP&/Ub#0F
|$GUf	cDU)39"ekMLK14VV NJ&ISf,R!=[%pL^
lrz{L*j<{iP|G9ܑwGg	=殛D~XjO1z:2x)tMٔL/<ME.E{Ǝ@ƴݗe)wiI;Eu[sIZϗ-dW7eu+?,Qt}63|GP^pZ˗MÛݠ|V@%XO+/BrhC3E\ADf`ySqN*n CFT7=wD%}UDJwwГ"x$`8֞@מBۍb$DI\Ap~lFT,U>/ZZJO,J#NܢU _y44h֡3}gњNqK^	0EZa2&+p*y9}9UysA:!9;<|78
7ooCm;vv)Ua8GZr
!".]ʞ]ҒFH_G_bK7]=OW=#;gO{|n)VqOu_Q
1I7^JGyʷUPK   dO\}&͗
  	  9   org/mozilla/javascript/typedarrays/NativeInt32Array.classY	xg~ML%	@$,e	M&$2Mgg
*VZ+QT@L(hgOV}Ql`I!ϳ3y3Xfp!K@F^UN92!3eÐDdSݩfө*+U]5W3dv
0,ʘ_7-xquDKʚ@,Xob4~A>л!eȮY[)B@	(ehrLeFP3<[#z4b!3bxI
	'ckj'R){MsM"1TŠMhRкYݨz_c4T,r?s]VަJZVK3̌*f#bF8δRsOIL%]E{AJEPd_wk'r^ct@x3:TvM@iLx2sx.`(njmm6E,"%܄%t nWO1S62ԁq'Z&a9V0^U;R3>vl7ycU8Tk4KhAiKL7A$p8g'&r-}86l|+F1X_/[J:mԎGLl8F	mDڰ30[59JN[%lA+VvםP&vt1TM CU)e=0xK%i[%܁;D5eX2*K}퐩q8\[[0Hwj
sk$Ce(Ejê[
[ 4tDj3Ъel.lmwϩaJ0c$)U͈ùf<~.	AQ%2TSq{"r^z=3|ūm}z+jiJO|x(kS(GII8Y)(AA%	f'(T}gd@7,%l\J""i?n90-V<Be_F1~S,9ռT/[hqOohI	;	1E'`7BSݠaͭbzT#q^9X)\i!sG؃\pUz	H=?.u:Tt٤(=WfoM'*R) F$R_9IAiJ5}AE7}CGOש*;^Jt)8&Npyȅs0%Α.|A%jĴ5U?i`(lt*F\_Kzx%BN>5;s!}޶mm}MqZPQFQv+'HLB69H|
!\rU'j|tl+wdw2OC4=T]=CN4Ds$Q0X7|&/M94Qp
<Y1|3;
B,5iqjZ,D^@+KrdÔ4Ӯ>eHbdJu(Km1]&5g̀/p3[6RiҜFxdhlLjb.#1#S_K"'"Z"AD#E	qkr,)7n",}0D'`
Y.'1姴5' lv2rJ)7dLٸ?MhD@l(oruqi r{$V̼T5|)9K^T~]W+Q2y-Ф;X9æܥNF`4=f͠G:ه雵@
x_
==?ƟyPH4u#`'#_ڬtIwN\FWW_9c?o&gYlXۤZ}VY!Ғ*``EY#2VL\KZMVbq~
Y޲c,dy$tEyW̝sf5	Ø[Wpм]mNF4iDGNcua7c-}^v%+tPd
bڄtoJ,*zvnF3GW?Z$;}B?ď,:cL;O
$x1vK86&L.&r1wb0IDw8DH3˳u|I;SBU=	(z-dM8wPwRv$Ŝx\/8oQ3~GC/K,L
`+ir)΋rv;>rwj:կE_[qF"/b::-*Wv^$2'/$
ø/
SZLqS-~WQ3OTvPELlAQ6$?!E )Fl\^;'?8UxQzucZ9݋ode.{܏Gx?rZ{Z7cz6Oz?eKi=ZY<=;<6g*<ĒqGccr7.~(#??I_:e#߉",_7ݫ<C"+ Nc>bM)tr:=Jit*LL?PK   dO\B   T  U   org/mozilla/javascript/typedarrays/NativeTypedArrayView$TypedArrayConstructable.classAK@TM7A=*Ām-kRv7<݀P<Џ!L*SEi-B6F-p%?Jcʊt\AUuΝiMEB˲قsG]{rqjp]lYvwܡ'6LhC$Ӫ69()~;;	1[w[Yc0c(!ʒHKk9[D l!<AuU]_ݶ5AIqPK   dO\;     F   org/mozilla/javascript/typedarrays/NativeTypedArrayView$RealThis.classQJ1}Su]Wջ`=TDDA*ţ0]5%$OQb"277o N[Ejv3r&l-/G,2wZnQ~TJLRzB~	+\xbdxJ&CBU~njv|xR.	?HlOEє_յsI~B !>
g@4Ttk6[̱0CɱPK   dO\gQ)    ;   org/mozilla/javascript/typedarrays/NativeFloat64Array.classX	|eIvg&mifBMͱ
t@Ni&3l}T@)E-IlEoy#*(M
%|M{# ֳ/P,Dn12_ԲG'%b2a'dDKd*>wZFES̋
<kKVh0lD
aw$e-sZC\$0JQ6op
,f3pC`i|(.uZ41S7FD-2fI@\Hr4)N͋%XΕcPT*j,nQ%m%j6B:XO*o9fr"M[ao7	PҔYdd?Ȣ"d*kn,;\x6h9$>Cs6̶BL[hypxaھ;	z8	hq>сäȈl0$5)of&SGfbCY\V+!c;-m	6Ĺ,Nqcv<Y<mOj2.OǣǇt5:!7܈nK7AI"fhm1/V ĉ{Db+j>"0\z)ީJ	
|\.b;>6*Z\ξR2|+n8B-i1?[Z)I%J\Ű@JSuåTw5!WѮ.(&"և00vD(dB(!-H*`\ TM9LgQy+um2pd]n/a"IqM$oіk#gJ
]Z*j`\RrA+Db/${Uޛ
-5"^%O8 fočk
Ŕm{xo$ͼ/DҐo6|'{*eD;E܌Q˝<"VF.C1]G8H݉
x.OS
T=؅'wHv9pJ>(C7+ndQ)1کe+G]VAyCñuk9E|Ȏޤ&p c">΅fLaruk햤3]T;a)&[%ǃO29ձO~YT;1-\p]~izPFgNt>hI1NGٕ/<ON!N9dѱcL%_荒/++3#n$e]'<xFC..'fx(Ss	N>	>~!c\[oK#e~,==1<2yka(lF\NF3BK|s=sw3m	e7aiA_v%v(P@d5D8ooܽp=2?H"ibfvtr0O'1u'cJh2cXU$|#¿ ȏQSH3'"M6BsBS=[
g]T!hÎ&e)TZM2ȧT^)bէkl_OqYLhz9]u:8XwkK$cʓ=M؍rF(ŋg;NEuC-X-I"1.~>́S}H^?cUd0<XDPxLՈ-rN~'I)#LRͬĞmK%-ʉ%'d.B7E)jdn\:`+g|e9ӞHU*aM
	Űߙ[OsӦ4i,=k!G<ه_q(ƙS~H?Sr'(nvZxN=h]f
~NW>_Is*
:WOk.yFP .,%xx Y_Ѫؒr#%Z<
qgM(f
r"U4)igqùQ_}8G;LJ7(lW]GҘ²f0U#hl<Xg>ѡi\T{͓%Ǳb5r8PFFqBnh#(ȱ[6btb3.A;.Cѕax-v#)G3$Y>=~d1Zy R<iӈk^@ǾF˕hLbApa>k(h9t4nؗߙ$NzEID?}~x ;ZbPlw&N7+NV),PDfp0 辶i35L]]׳4$MBH@'h{-tu?H"z߄_w1Q,n
M|Q1/o9iy4FԌ<*KI/ÿ<9</'܊ϦI#ӽ0zyiÔPk'ʎ 8I+7"_$)lk9w;Yx/8? ;M=BW4?<QlS!K]r:,Va"|'MჸS#ֺGX>R>Gw:KElEZ,yaMܘ.K`c|\k2ڰLcN)cE(JO"bn.0(fɲK-rVA?d[eq1'"[MY;gPK   dO\Q  *# *   org/mozilla/javascript/ScriptRuntime.class}	`|!YCQQ!H @%lvVGGޭZ{jj[#v	i~|sy37o{o=J9 9`tXߦch91yNgp4<e̵6IA8'cH1%
G"9X4&ƢIg;IN4J;|$@229h2 ^>ۺmN3j*',	gI_3EYJ,A*(9h<رɜL!S)Xom0iBղ/	HќFQ9{Q 5@23kM͢ J'|ѣ(9,72M$3̚kV>',ʕ@"d6'Ud%%#DpbU<N:b[d.g89@IYv$mêz*!!h9Y|q,qԇ99EhE:B~'5d1Lp&o"c=1i=@8ǺJ҃%>d)Lo
bhd	#w[Dl@9Y$kݎIao6!jbVNJrbyC탿g9LNqd[▚
ͫ;VCZBFNN'gPR(uIgm0Se<?$t8T69hg'$Dc
X#s	FtquJDA`F`Φd0 ȕkiXC+hD9s6n톒!)wӧ='ȍM d]&	4H'[6JfZ1td1N<ُgt\<Qǯsrf
[O3k| D_m^R!XυlH/!6gE
Q.\hƿ0Tj`?*qr9cÉh(wNhe,(Dsw%'_"WQR2= 0{aDuF6~
bڡ:mw;0u@lr=fab0Gc[rS $7Ƃ!'T$_ޮ&Ki'aGKυ)8#l𲹳fr;nwPU8M̵&_TJ(MF43օ6?T^l!gxɃ[yWðiId(b<J3T|Ґ.|DKdVkYЧ9y1Tw6\&>{
C<%7+&>Zj8M$?d&rVV #;L	%-3澔~ɋ%N0w$Y˜Bɘ=
 7gFwQA~oqrBZV!h=9#]W5}Z'9
&y
8b1uu9RL`,_Jio@ׄӉ*&(H	46JV:&TS+7M41}7k*ԏ Û!wn
DbHEA)0c%r"8׆mH-IR{6"KɴIˠuxZe7t"%sSX$,M
N/:>sA'
8.H: &=aN)HUv4|_R馈<e2D9ĥd&KnA*HӅH(%q;i՜<՘N#@@.`z*KEɒ 2YTDOTNOEj()ZZG[]@P0thn9g5tUsЍIɝ#7E
[¤ ߚfBˤ1GM(=7iD_}YV Hi[_I/SZ6Nеk
837^@zN7v M0X8T6,u,a3bIςOM	f?@jR.XIAPTPI! d=m$ᴇHh

B~9q*:h]w8w"'9pis=d
mn0
VHB5<1]Jl>5:hτͱȦOXYuİwVt`p)O@M&Nls~CrlZ	z\^nO9eIB,ɦWѫ
z
/&k!걌r?^AA^﯂+;ހ;q	\D9"n,z#[譀f/#Fz_^T00׳f+]vNwB_B=tΠ͹g-N99.{}ޏm$|ӽX8pڕ5s]ANEJ9]H҅H垟> @QD	+Dl&}֓\5	aos
lv<0~7,S]2~{+Ӝ>C\mƣ5b}ɦX+W;֚xIxg0E:dU2Vu }`M7F?su}gOPTH?D~Ov[Φ-ͬJ>8Puf1K09sX*ѥ_p
%Ld,C}b~b)k79\gӍz{N@aU'm.Vt]}??êU^$V=#o'6%S 
>xAZ@,	G0C.%8\O#e@;5S8r>bJ&w|fI7]C1&"J`VN%d#63YgG9i'!8tc,fl,gz+	iʷ(+M_V6
ܫlT	8&<R2NU8d%a6Cpµ4vxy%N5M
+
mʹqvx3rq;6ۃIC4k@{d35LVLɾcwl.'lJ?t񜝀TCu"vm>.#-&	r`S0T9%h2=}Td
ObjXɘ{UJ*wnl8[VdMHpg̨V&5sfZA~@5$6,zk
OzL@`tl3z6vd82GHذv.!)qNܵ&k⛡2`gqdtQghsameY
 q0`c:!>]GY7lζ0ͤ3j?dF~EY`Ð4lc+҃N)3|s꒨G
bۄ1ׂQG?gJJ8Fcӷ\g X8$,;P9Ů8.ڙS]
̸
3ggy'b[(qI+mx(Ǟ֎
_.rvd,!r]	G"!<)5ްkRWIܴ,Ϩ+cx"q1cbOk`0zI)qʾj8ە[|1`
mkhmkihZVPsyeЍ}c5nmAn|Y8`/L/%nfX3<{L5TUD_E~a{
P2tKɆ%%;\; ՌC`(ev- D[b8*}z͞dOiΞa =LI][_0m
&8'sH1g){M}iw|~ُ؏aN;VS6?bg=VYx{/+;]:'#ݨ%Y_3d+BW+DIczSnu4+"mY0
6-ъ٫{?;&$-e &Ly`(o*N!4XٖZ9'j0":7g@}`5
]CnjjnXҼd cli
]Їz;@#E.4IB	LA8"䊥bCMj7P8W(06}Qg+Ge睝i2V)SZ{ (Sq\/uEmY}#?(hT&+6crQۭLr%
?شX\2UG[VUa\9\9", oAҎQ
s?h/aMDO(3(`DÕو3]QC3ԉ'mJmKu9lrRO:iiW=+Id.ʕ02L\Uֺx5B%ȷR(K
eW幏ZTM 5SR"[iTVJWUN+Y(tm*-._nE\%mJW(k#0r;ծWYϕ
J2d82˂ABN<+Y `H9>/V+ҩRGbbyYAn]\٬t-~{8LS8_>ʓ0ŀi.*RVJ+=J4	H.{ }+(qI\,qzŁd}!q&ҧlgv
u@Y/w:-U0AbqL+,NOŕ'P᧍z{b|J6<nlfoҲ9R/`Ks4E\TqK1M]ŕ>
 딯S,lF&Cɕ[`N D"XY`Ya_m`ehtu|ҋPɷ* $m2W+wbA1 )nnkE^a0zh)ikI1s}h7#A;y=s&@eʃʷrK@1v}ODh9B!:IƦ0mtD::P{+)L0)uʷI{RxoIWEt<
T	5`L!4T`NvoZwsSFa>r)owwވsE\y	cqr<}arQBP~Iy]r]CHtEyI-W~ Uv>&֌^+*z
&2d(yN(o[`epF%aD|{,
)x5PV^WDϷL+scg3iͪcVov1t3\r=4\!Т8]@ekS	Wʤn\0*N:UMե4 HBt
\3 DOG<"l̏No}P5IC#j)U6|R `~lZǝ1^U/!Չj܎W:Dp#>ZS[)hL0FnP84eYC,0x>)4,Qs2%gL7f"/d`
a#pu6R1ިH&\f=.-8ẍzWWOd.e,6	d-)%Poaz"W(9<4bI]s|2YIzjAGZjXEžu` zlqȅ,,Z7:B+ڨ3xܓtzT' T46Y*wkZ6JN-,WCku5Ǵvuc殑aqg2S̑7NT'c9a9 y!n56رcqmA"/Z!B\rYGj	N4wo[a)(_TnUv;3Y=DtrF
q1|*i-w*|Zd[$J_iK8鼐S@Yszh2K
2Q/m=tQr|*})E^~	d]a5ACo_kk)QA0ah{(9bhŕz=WoېEhZqMXh4a7Sbëwt`[U6HN:`D%H.
ޮޑ_c:N|SiĮEG wp~`tꍻ{p y}\_} ݬ,#W.д# t\ur?~GI3MFՉ(WS^1_m~G}f4Hh[d?S i>>x/ex0~$ǃG36chy7~?P0p[ !>,C)%s:iŶ8HVȉpgdZ\
t/;]'*fk7v:d2JgAj(uw3Fr"nt5D"Z%q3yLdMO0Ɂ*;qLpu)e.eTE7{C}/Q0շtt]'YMɸL+@qH_%5EE?\/ї蝑`\ksz=+^Wdt&o&94
k_>
kϯYCS)WlC.[SfifpDWJlnsO=zp3?+-Z),6
游׽6kx`쒱#Q
q"@ȵ
mvDm7 zT%GWZVm
צ}1͸&@(Rg/(ε#!]hGr(hwHMz_"PLUjyէP	6ogD+nX
!C+rx X[ϵI&:wi.MoJ@m .k%d
~JqwUbotV75)RR;"Yɘ'6i@Yĵfmp/ωq3Vk5u> WZ.WʲHA
=D9[o6hG?{-6t\;Tvrd|QI4daٙƱL 6lf@slm B)x^q
qI
>01ooĺ0$g{?gqy@xi ۹֏H,t,oT\@eL0j;	'f6*!m"}B$%9uOʛpM4֍.z6b.>-21lrς}o菉]]|.^8=&%;xvL+EJ9y} XSWqje^僠;̂\ۡ]'b97;Ĭk7h7׀ywrf9}fJar6z?˜G#k^$cC%'[vr:w[C7FMIp
jp^>2fcaAe/G"ٻA}K{HOݵ#H봆H&I'C{9ǹm#k6ݣ
}kOq`"يzPz|kiOkǵ$5C<APrnw>~KeJI
N5*+kC{1&%iq8]/jpگPR])q׵n7\	|u~OX,ȉ:L cFS{
{X˟u<pTshU75px,_;]h?#oa;6[/[{G^d7{590Y/ޓa5 
wL#1;s;cѫ!ǵֶ4jYX߱~ICS}܇[S]Hg\WP`z\]/+ M[-\u(4HXMls}^,gQ3PRWOr_/{T`	$@O{c
?#\OdgQb0,o;ٍt;tNiaCp&Y/u8>QL_ЏtHyH8ҳxH+Y9CJ}Vn͚{u@+FW,^/<4

z7U:ߑo<<ntR2!ܴh,9
B0lm~0ץFjGdxbY=(%\Hlul(<'맠EK7I9~|d
4>:nȇ C_Z.
HwIvs\7HgmK(ѥЗ&hYK\_gAuJ7!h웻L}T:N[Y56x~M}-,W
QSgs\
ugrAI)Ixj6QR2B⺣w
.;˳LFcaltT
	 PnQp3tL͌"1&\SΡ{=	.ד"`"YN[
n&6%1J&֏l@=q|QwlDa෰1\~BatQuaы), \&Yq'oqy.e"d1+@֏EqSBWrKXh%P/Ws
A{cWC)h;@h'r0fK@l~o)(jwrf|gFVU|.߿]w%.7~;"%[$W(b}7WC3^t4s.'E~ 8Kןх&TĽ\ߧ?KiІ=W.#8:6c\\ӕ+Fr p`OJwPx`lo"

BG.ןwr,v׿&'cUoX[o?ub?~ϭ|
{U-W_q UC!U_/WV#YV+ZS#s r{gG\ᛳ*yBSq%wqtċ?hEqI2>z6	^ƨSBlBw c͊,-"wm|ɾ~\`ʔLe.14n!ܯ	[lSH7Ţ
g as`$ViqiϹ>lQic"zQt
n&ysi[u8m``sc<k2icmc"7*l:,`OԅCH
ixuHS&ܘƍÌÅ{¡ˎNin=?FlU6B=r(8!X猺:H*21fFϲq~ƱP&AHT%HJFصY1ǣ_/Txqhqi\/t
7]V<
dfY6N6N1SqQ'7t&lfԳQ4<0O2>,}lP7ca,/n_X?NL
Γfn2V\.>qh~zAL QEy
隱imlFQ
)ϱ3sk.ggFb1K5;xc7:0.vB~3Cbcdg
x *O.7z㸌mq'C<#ƍ^O2!	NÀJ0$7CEk/JEf#?h9gtF@v0y(DY=}
MhH|n\EzߛYDE"cWA5>ɍOAQ֝GoX-1>]M%B50bfs tX'?{640.*EAʱ&%;s6>
:@g|	>_- n\nJ^J1n\e k%ܸe0qH:x#CoTm4n6[8xl]90nP\.)82]ܸøSso&Ll&7v%-+XN!Í{,h]5>jpcN{8qAr$j+%9x$gռdI<qJ5@L~m.A226g,v מ2m'$OqH o7^0/ 2pF7'\d?2~T\,PYƅ\0S7pL:")ʉ%|xyDi >j+n@
i-o𫚾L44{?rMB47p_%^kw̸xaofȮ<U6W;0a\QLݶ/nxG\́h>ǚx/nwv[y9EcZ*3MM}#TKsPTB
}B~&Pf4M
XiN70JnG	g47sE"nr2Mz&
Y0&kag.caDH?f/ffGG\f97#=URcjR6%Qú,_$nN6HVT}!<䎜F6ߟI8y`"(@,jӹyǜdr@Ṃ93
\L
WD2+9i3g!^a
V nk΅p2OS#4WςI<1p|^ OHǆ饷#C?Bn.B+"'8,1O)L6!=Ѵ:W hYf- @J63*SAꤼbss	`v<ec2n6rnN:RJI+dѴ8:%f3,'q8ƝNjnOɩÑ5|\㘯&\i7כɋlWf[Tdn4:P;Db6:A	W`ndh64a'[^md77q
4
RGك[7{1fiQZ¨f	3>wHaGogn6s{V?sFyǲ9N8Q#7{7/LǭJMOq'!@Gþà; hPL#n$U
q$64?UH|>LR -rӼu@E4NE/q*NcP]v
b򆆙
d
m׹癃k
GMzϓJfˍ.^ė=84wtiM[Ab)ʈnQr$b=$ZWp&}.>7\X}3Zly74Dqh&6
fVRƑ^dͻ
nދ| z-9]h>7v_~{/6rsH}dz!M ,lvѓG(y2a>> ޺g|m~PUyIn>Kl{e>ka>SR(~SBX!9KuCVmCGcFJ%-Mpza?4WF:%#,`
V~t
G3menlEIhDd/qN3fTB_pP"3<_q&F*qP&r3;ltc:GuWF?#(Q~||iF'n/(]_ͷjXkR2|YsbmA;9n>9}́'pZL^.\!o)M|,K4ҹeXfkE_VR_gR"rU-c5oUb0RU8xn;GJ]RJ7f8n#Pv"gM&V'&Q2A4o
w:
2g^NZ5u`t?ϻ̽Cnu[8b6 l!7Mn"HX8TKTַ647du$B+#5Ӛ/u+:`cܚe#%a'`.g#CG9u,yԄhѤaH:Q/z({tvĬ\bH<k]l
o1Ep,QJJdng֩iUíŨD8,]o85
#sPcgS((u
=@(F[BLtBIbX2n	5Dv)\u`Du;yj	cqVckLm][kW`/i(vՀ<Վp_.
Nma! VXLnu`Y@p67VgnU
!q24u1-''%Eiڜ\wG`+Hn-i [T0<n[6*	,yu%on>JNNYl8Ux[n/#[.j>m&k6N2rSdƞp1XӺh^d!9[1Kr3A)C/?3T-r72 =NJ>-$\t٩uua]έ+s[p\{"0]G+P͕!`"ܺXBDDm.~[;
󧯻nn] q8ֳF'#}@oEoHM<NT⧓Ž
n݊&&6W'!s"!X	Xu^Jue0ɭ0-Rܼ9K1=ܺ3ej3^QHq>uTs?ĭ4'f887w`FTV{jx[ϊ$z"Y0Hq~?fɁ=xwcs'^Lp̵RU{z	󗤓R7,ܴ~)bqma_s7TY'I~U<X/SHUn-gXS
[jZ6t6>&z[oZG`|:l-nzXslݫְ@\TA{yoar=Ըq1\	`d})<j:pt؄@djziR\̜BI,㢁vXp0

w`/YV֬D+7*72qMH0o5--50Iٕt45wxN1X<*0*EbP5
M-u"SY~1e&6:AhBF&Ix娂ɲ R'vkpmjXSOtH Js;C0&6ywzg,
QDƿnYsi8!,\Pۄ YnI8Ygbf1pEr#\y?ZdX{hT"g"[L`TC@vBJ9G7Ń~QV֧f$% !uᤌz{Q	n	qѠ0'(`KH`|s!(5TfVތi-^iftkI,;VZ97abۊz@!YYi늆U5u
MK;[[KZZ:Զup\6H5K`!A"sL<xHXٰ.#{ѨKA#^i4 ǋ;	EOCD%:Uqccq[-ŨbY	J-!jkr&"8DvlE" ˧XmV
0Rx:45홨gB)0"҆CNf]ks.Άf't,^EC-N"Qkn÷3P
 %=/&LZ	->iVw'NyXoDoeu_gK`Tҵ	ܽj,iyr(T]% nv#WJsP,Cdp_EF6F]acT؍%0zT$,>|kaYqVPͅwNi)pSBѶ`
jƮe1D>~^~3$m[,j	P5#^ @ZssD
`N%DFxog<*Ys3;5=)0ݗ<gQT6(L`4
|:m|];<k$8VA!%*X4)9'e`B d`h+^wY%5:"=S/G04oL ;1	Xuwf+8kQ0tUʚR\fii2HI#)=\8LKA|?;Um&bhXY(7KyѐѸGP~v&խ"qr
2/D|JW	3w|3{Sڗ,N;ĥ[G#RՍMѵڌwVMь>$:F/BBLX;|ŁQQw
jq47^J6r oJEkSRI"NH !Z]^cEz aL;Öx0]x"X	x62$%7p#
3&#zz+=uAEy'ilqTTA/G&/֧`93Vh~zĴsfcrA<8($PMDPǉSQl
<5Bs/%+8RRD
Ú\{"~v"	.'s鑼xP`do(wR^覠xB㏒&q0P-괹U`.=1qu?!jFDQF!1mȠh]'Y,oP	9cQfDq-a*+bG
Kޱ04Tx4pKEQ>#i?`+2F;wMl,~swm'.g/"؅LusFM?0Lt4'8M+5F'D&%=DdJ 9d&:h
`GO[FSrrJsٱSEsJdqNRR9.^Sڦ1Q.+ϧ?uYr
N(7Zr[Kga(jCQ<XĮaa>Jviۄq01/䈋jD+ŏA'h$Ո8)ͨ&uުŷ8S?WP9fܕ/oO}yhaF'CԀpr[84q_[qo:!M65
8Ji@K2`bs%h5
S{c8yh߿Q![Ko;*.zJ˕q'$wKLd-JCy߸xNh}Q)v]veS?O9\Xbl{.rhϫtL
1Fr`|֡!t8f!1M\w^p} Njk	~0ԶG?_?!}Kϧd܇aBHGD4)!vg>9]څEyqMcGmcMk+()4?<2L|J
,=m\{JCttK~~Ý[iAnBY0!Mj֢tI&/lu02vx>/*ͭKNas/΀5
ryf]_?b1aj!)5JC j,&Zwxuac=ct<^;6?tʒ?N~
GC~uuXOqHε}X2fni#2SL3^Cn9(UN<k2xƶ2#85Xw,Rw0*PTxY19cRL}ʍAV.ç#
 Jk$<97o4lVp$_Aق2&
i~neTV]><ѝ|_A.3ݛuEelq: qNze\l1_+$p2tnt1cn]X1%l+nt~·0(ޞK$ &
;шluM
mGӄIv"|{?$AEyfC:UyWA$ؔ^jGRfy'6	g	1

ËA^	0
[20Ts++V

oʡ|9.ˏCe^gZWPJGzLm0\N6H2nX'ϴS^s|+@J;o:,Ǹj8q7 RXۉBBǡrr-s"gMXξ8pH:Ec)k8*NILGCέL{:11 VdV#{i^upzz#X]RLk;`WQ\JDT&dxt߄ǃÒ,R\=.?Q$^  I~f/9!26\L3ZZ \NP8|+6j͠8z8Q/t%=ݻ&A)BZN̲WKP5Ѹ9!W_@u|/g 19:ጳ9*\_yFM1,OH5|\ywcSw*|{pk8:3mhw	t]˅ROcRَuA4\QeƘieL2]HWse{j٧ݵ4ԕN~BJ̰Hќ
*,Mp̓:#(NX}$pqT\M 5,Œ諻WVXJt~ͷaIL$DmÄ <c8>ws}6o|0<oy<s<s/x?	x/>xW6x_~xyeV<\g`|M"&ċߊϟlJdec%|Ϙ.@F)!Og|7%5	$@fZ26MD/OGz*V#K3ŝd_3G" }Z& g +<>L 0Wt4jPЪMl%*H15 OP2s<v7E ;0δXԙ5-5߱)?3٬p*kVˋH\Db	9p#Y1-͋?yO:ZC*cK?!!??ߓ<؅M/b:bOE*ٱTK\|4p*[::}濤dNwCcz})o)D-RJVT2(*wg?RrdAkײ|_eXf& Q	!G
@ٝ
ۙw
xwx"2޿7 2w
ڀ3U2'โ=5$/|~B:3GHdC6hnne^}L{1d}l{)e#K};S8N$ / I`Q;] &P_
#DK{D'H<ў `O+"e$/܍3ؓ)2Ş*qn]D!gȸ
8i/9rӱRETZ*& ~)T:\7*)!DSCiaXЉĲ'gmfܬ}䰕!r%Gߝ~1Aǌ=D#Qb^L,g!f	>M'I}$ 9m(xRţb[ X'U!;H^rmPwU^o#ςȄ{ES#c%ˇ&d 
Hx9<@%{`ߗ1X'3`n{ff
y襧Qrr7+
uGSP+)~,ٰ,kEz4 IbViӬY{ȪY۾!r&<fx^W9k>IPPdBmWht^3BCΫPTg5K|
>.9@ѥ}䋘p52
!rYNQEn#d/:r'|S`^Q}my|WVB{ɏU Ο eƁ{i֔/n,f+ŐFU&={3yKV*L)gSLLgfʿ0̔`ʻ)a)B
NTJd%g%de%٘eR 2\
w2EbCjIg%IGf%I3fbҬc0*+i&JIǻsCLx~֔=Y)b0-燀&<LJ#@%SHRE$S@!+ɳd
ytn='/>}r1\E^$בN2E~E$[Xտ~O' ?"?|yf{
7FF[4@A;t:y&dC)]Mm
P^@5z-ԤS>MmsZDB9}a%NK	42BǱEǳn:G'hNb:L7!@oSzG
zLRI,H4#FV*k#	O*`s F5%c>" AVS$W	G {G$T仴r4iR4)=I!d/t&gHgtvOu@.hdOzHZ'c
z2ls=JǊMi6֗ѥ	
VѕY	etLG[>Z)z^BU[a*X>nzl}"&3|. +I`
5CH}H..pqamq&q1Jj|B#I 7"*dB:n$qRFhݠю
Z
nhgӺ,[7 )ܺ,/!:]Jed]"6[
 oBXrlk-s5JeGѦWYٞ"U-0e>sʰTN*vMsRLs;i7~f`4B +s{CO槚]|&AhbǠGOϨx\F:Q^S~NϤ;X!Ђ<!򗻿ciN;m;S~w[<FBt#gs2  "{#N`J$l 
]H/)*!]n
~
^ٻһtX(}$[D,m9KqF6'y;HQ=;+&6/v NqAJR >܈\
Y~];a}Ch,xRWYT2Cw{Q<t#+DN5e1xz<G	x|B?OJ@B/%'IrHHZd#ҫI|^K.<|^GH'_7t'&@gȷm5䙓QCL٧ s/9	by2{

&,c&F,C"l\?"!:uccE.vW>C8}qn9 E0veA@(R\F@cn3b N'/Q
PX+@9Of|ྗҽd-GzB@jD|ۑHPNSرnq'uGox}W\d2T!r%
 !vqdo@vXz?UO9`"4Z<@?pk^
5VdUN2ULJUjًE+@@(ז4XPzژIcdB 8
}2Xrsʭ$QYnV-/+/*n%c=TwŁ Ot`(`xDOo)\`]lprsq/H @wq߽On"7&R25XSv3"+cbDzR]8x8zR=ar"u'YR>w+'^<bOV JvIY7\
kZ]yy(/g+p$q̓K-AZ/.dV"KڲDSQyuf:&@t|-üQ]:q(;nGiю67d,y) K||q[c9~Nh	)}ەRB!@T[#?Ur}̢B:Pi#Aw`" 'CMwCIX1J~y)L# y%2J8rb(g KL9b2S@n8C cɎstIQt;:lf4fl͡c\zGaAv"}ͧϰy-?cҗi׬-du/X#[ɦfv([gmH6X;Ö9AJ<	8ISdh/i/Uo/=|^
lBHbe|@j{9<y^O eJx
4Vo7XZBTJ)*x*"{5l\ho@kz
Ot&"H*Ok%uJRʪDe
7n'pOY*3|6> %G|Ҋ@R'GIGMMM&t#u)4	C{Oitl.1+ ;(W؆"]:n')'OS zT.f@^rm#Տv}>b-+I1PiqG4J||vVz+yrz#U[f`;0~'jXǕ@I!)&4TqI~YNJ,v96bO*>{ـ_ۦf	r:{'Y6EМBedY`M T@mрlkzuӔu$UN)*sLT͙[0SUl
Sl؝f@[;d6TD&r(3[|\l0b	ҟЗtE΁ْd'yv>."3'a^LNaWZEή"gI7î%Ie	|]Gg_!vy1<n&/[6K5&:e4:Ic -.a^ MGqz){^þ
t;9$}~,},`G&琰}6$IXNJSp?C~VwB6iEagB7._b%0gAYDbEd+ |KM@PڝP)rHhi>	P-|,Kٸ"xTJ_)2\8]Kz bs
׿`4q6#')xgӾ[ڛ YYݝ-Gc}IUc}lc?֮@"k'0;]JT$JRQ9
*z
2
8㩧3g	aQCacUP^UIՊj1S]M'zC&Ko^=.ߛɛo)y^ArD:ߣo捹`!5%2w$_!%*"@;M$շMo8R}3P;~H@7gX~/~$]޳̤㦅4&T
:#Rnq-0YE-5 RS;ՏŇX*Qpp\^Ps<]ȿzP֧唵VV4rʚՙ'EttWf$]aj΋+c1MH>gWbHVd&b3|xyt"KLS^PWc]$qkNA)RʕR9ފDR+dTxNbh8R٨BHia"pVZbLZb
sh%P+uZnZv6xDk'$Rx]K-o.^@hZ%rZoR\GybRtq3ӹ3sfeT*&ToURX"Ty)0/HMcb!XC;
C<+(sy0NQ<U+Z&5F[6EڈuYhPȵ:IFT>I7Yu`zc7H]TGeaw|w1(hXqԲ#E;
=1L;&o8}Rq3.(~uٻP	dы+ȽɺRj褖֒OgQɧKA(M?Yt#ԧvn:BL`5򤼆u!N\JytN?^n9Y̔QXh{N95F/'5OzYZKZ5.S~jBܠt'`ϛ鸑0ɞE^Ln7)+թzc@vLt"Π~I2sO;>ҖX".=0r
NI92*?G^bPy4$]:xt:g[8w#ER

N)u{nVkU;l	dp֞RjJae Z,۫dq*R!_(]MMYJo"
꼉J:
%9mztA=cbA]վ^
yw$lI?8}BNd7$짝w)w&	{ lA]RԸUc9FEoؑEgX'1'%5$7%3ŒXPȞF&o;Kjze%iF0>ArZ2o q#:j768Bx'NVa=X}جݏgM=0=h'Pq|Z_iO;2c6aY	h[X<ĵgXlU?(]JOE2P{UI9Z{M,%
RQQQ_-hcn[K^TrƯ@]>ōO2
%,g17 \ďJgyQhL~9Ghm
*G+wQvQH)C`젣Ct9BSΤc@
5K^Wnz	?}Ngc˲e+0ifFC]C}D_)J8%XjxꆉpSӠp:]p.Jg͸יDN&m[p+wqkzp6#AdnpL1٩Oz~jY HH ڡW$	1:7^;3ٓEckxNzaxb<9YvԋD\^c߸|Ͳ[Gs~ D]bD*UhE`k{OWpcnbnanc`zK(.[<IYz17%89OzgU#yWɪJq҄RYu@]rZ/7z+bz)JhW 1|f,J&igZX1MMw>mhĘ&	zo'Xl>IՠnfOF|65kzY3muR<pk&x*>^Wf
k/s/'%fbSuUEygL:/~iK]ق{ zwz/A/5~yj॥?:QMЅNnfqvM;P@	DSQ{\Ww;be
g%j!y
UB@Ӎcϐ64g)^[fzYCf\dۦ}=3#j$ys/uΪ/IsDO/gW#`mQZ҄Y}9xԷ
M4QG@#>cJ$M?}#1Hя&&Nq18Ed,ҏ9$p~gV}&VPIؤy>3a
-%<3V:CK

#,s.%Fs	2L$˗c1aT@EN.uT"rsp&1}|L}wZҪFI<[K
jzj19f\_`3`;18nG/TLXsi	+^c'-ʅ/aoV.lPvqnICp
*]~=qACt74SrMjrFNd-*9,ב\gqҫid5x^T|a&8%KwpN(;99P*ٯ lI_Dp3"}6ZKC~>/B/ede.
8SrZܤ_UX߀^	O7c~oŇmF;T"JK+~]Wߧa;RUST&)u2(L!drU|z&tHOr&8
5t&j:/pg&x85ʱ"NTJ*/132R -Vz8H"DKw#|tіvٍ2vL܉("oe,K-D)ecn!;
eU\/!{ԹN(cHed*E
	HYb0z&9׋SE=ImeM,5bNbꛨTRϠ\c5HLj4ɵIڱ㋩AL[U4(7IoԚ5/Qk^&!x5/P)[S鷆cQe7@8SbmoyUC~^tn:h56~6M4j-V$7|K&6ZTҙ<E]JxRzfV:&Zga @
˜؈[Fez1oiI'6j]mk]m=r#]wLfz֋_~]g Q68JkCc2~2u14x~&#Y\O	_%z_{5b Ya3f;XI/dywZ}n^ZCÆ
^4LR/1\|j%	Ĵx*]KR^^JJ~+*AJ˃eUL1'B`k(KVi*-Q%+1<jyx8&0\ߜ;.m}SIbdRܡJd<'ym4iqbk2jl:Qq-ZH{GʨjAF_٥ΝB:D
J:hM^QkrS`!ٍRK}ps:Y-U:W80}f!1	<
:H0D.ԧr,D'IT:w(#Dc{2%9ni'ö#-8USzSPj~ukvԺ[wn nn0jݐnN=4"
~,1㰼b@ylvo'hb9N4*6Ԗ<Bט5g#OH?*N@OvPqx816<@L3Q9
b{U-Yma·	^ɟn]A'i1a<RүuRT1bIد~N]s"y&d\c6eN^Oק4er6f @$Y_6X(O7vOInt'BRwk=G
޽޽߽̩? 6?0 (*Lha/EM2u[D7
ԥ>B`z
rXˊ[/XW4A"@o/|DyxPz!eϏH͸>n'-ϣ+^cm'mA!r3iS_ ]d?|尲ښ:P4&v7h52cAq
Jh :}䰿{hL,V%}(Pf,SSq%OzWpNXP)/y8WqyV[mTčE-1%}tףȢ::d1ǉHuKkζmJQ#ݨ.rv!1NUa֍&9@&)6=9DktLۘޠ=a6&tj[jyꑅy0<i#f:31קab0}70 N5.gQ'Wٍ@NK+ލJmcbR
Ɛ-JQ<QԱ)cA@fTޗkkhƻԻwAm i|^g|l|!Ʒm"5LX\rF}z\
KCd]SQ}3OvU_vF`M}`i#&5l8)IVo[7hLB4&Qߪp2ib@z|V{aSL{%PGӍd)wAc7p:{KǦtlzD7I9DBCmuSut-Ǥ*QBr,KL%I=w+K	NWjlF`Ue<T幵0<g
ΉMںDSrt//[y3&UӣG[jsIqcF&,Q^vzǭ߻1nX%gI3n.Zv:@4	ÚhffaQ3Vf1*̖hoBL,A1d1YfN1;R34La7{셍f56yӹ41cϋi(1ѥV(#!\ix} ^.>ODp/arcit{L(BQLi:Jg&gu)n6瀢 Ks@2*.^%
e2|rz:
gO|( {}@iosʗ[K_/ֽW,֛rpRq0!!E9eT#c".F?sc1c#p9shmNĹdΩğ9
N\a*hy+
?Օm'=-3BI>k)i7U7DHw®%Kd`'PO.FT(;2k&t^siҢk]Vu
XUUlDypj+)-0=KZ3d&&~lޙfxkuv@e9Av|~]JQN"JFxO{) D2o܆y;ژ+HW߁*2pɽ`ޏIFfTA	)T[k2.FQ=3&
J.!B7wEk>tA\7^0)i>竹<@難"r68PG
3,JbO,D7UFeQJ^Jq{m
s%h_utAjL-,z$ڬ}US,vkcO䑰Fr(ɯpK˭E֘|雹XE3(5EGy
[F8܎a1|WHIy̆s~8
r2hp!ᦒ$q<Qb7eie+TM8
,.#!J	:,q6߄nEibbed$Y>+6ymK,&ڦ(?KF<ga\0&]>uWwb#?F	ښDgSt3?#h~K?HuJAnxENU4䳮5@9O"h=T(ѻ#ѯ+Gt%ZHEܳHt_h4&*Kx=I{.(mj|V/%;%%BF+ъ"e)[ЌhynG{N^*BN1 #0Dy](cZ4"jCjrJdS)[S)T)R)!Rs,Ϋي/rM5ffeN~Kimu1WĬRURTȖVȖVHS!+ϫȼLA.zz;ؗEH
$gy}n^waYVrx<5q"c
CWa@o<N6^T%S= qaCs6M`r^EMvd88s~XSkUzGAM4"{Zs_,ʒVlB&wA&2B
RI$	S:dn*nZ$.!t5p)#VZ[BP)3Iљ3D,ƂϻcC=fIE=)OĤZb$Jp	8b"~VD4 a,n mwCL⁬kㄝфŊy0$fQj
tEB?ktX
RFHj!JLBJIWΜrv9
)$8SD67dP΃eOJ.lZNPveB]? 'HAOB*ePzAA?ۿ$uջ~_ Q)3wg `)&~`{9IlJlJlJd_`_b/,1Dc^LsI88߹E&ε}tit`xQoG;ZC0ʺW:9j1cdbe.k*QΛy56ٗ2,BcI~\Dz3VmĴMk+VBv\2$W-p}LԧߛL3J8+kGODGGe
&O!;,٨q]⩄PB՟wu?gԅ~)g seuڿS(bGr~رElʾ"6P&8X)*b'Ȅd_x|'= 	5 k
Zm}Mix7])"X_O
a[CCIw&M~7	<gnL8Ry -jKʖ@}Re'9oX-ȅq"
hK+u04̓9qw-`F*&8rNѷ7-~ɾ9(	D:!:C@Qn.1\R%dq&"rhtu>wܗ2Q@+DUs_UL'kJB&Ly q46k
mNy>Qv*S'@{jiDU(tDE3H C]x/fqnq$yIe%&,V8R8hCɛa$w9h/Wʘe(@oX>%Dj^6bDD7Z{
Y1[щ3T0A?MvEE̅&M~wlWKtҼ;ٹ6WJII|LG`` ZB:pE1-0B* I(!.g"=AEҴ/}7ʭu!IK?Ҿ X@{gR`脷'5	WǣU:`)V`v,b#68z:I<S)YJyW555}1	3Mz`owr(5bjL
uqy!Ӷ~F\/|A|[d.TT:CM9Id|"8Ir9n+_?/"|-(Ka$c5) *g|r1]{K{
z~@^Bz~a-zgiaѢ!·/Cۯifpp3,#VyV[j
~r9k\jL"t2]ɋ݆~JclwX@F`-_a!<݋P>R{ e!P^%%MMɦd.BT턿ہ)1ZLjS}ZruiL)SLѿlJԧLZ#.>_ؑ:|'?ߣ(
<FگM!]dC:"am']umDKm<Uc)5-ǔ}b'l<>Ӡq99#5f-IjQ3,k&L$I-xt9ڥ2~挼qx	ΣRMS4u[Gy"] :mkR߄EqRqc9*=ѕ0yTJ]E^۔LXt0@xFՙ?##/^A#
yObP5
ƨxSo+żqV\>5/qs+7
G?a}_+=xV}G/ )?W1!%dG";ؾ|;aL||F7sP,L_"BrPX Ts_r)bx {=fhJ	#`*-=P}}Nԝ(V2qKLaUi0hW
h/qȟS5Rc5v 0h3	[@~Pc⊄Š1\Bj`0Ϫ%Cv6tTG	t2չ02QK|%x0x
/n$6@Ȭl*t$]	nq=hoW z؝NbP;0	v7L{`ޘg,`\`2{ .:{(na=wڇc=ۣ=<afH<kV{"^d|jOTkIKiHpgdg8st+zj_@}!"+lClK|H#
	o&bH-N>lc(!(W&͞˞Ϟg؋ee}r`)bsw+c|ČVK!	6.	mҨtrPE$a`3a%Q,Sq|l_*a龍ߝ[BP3؋>sQe}>zi0ؾCem_qo_Ip
'Wc}-fc}No"fg߂[	+q}nWdWdHo!"c[RnIy#sW;_sm6pw#Ã~L݉j"lw"oa|r+!b?{sy?d^el}
4\}wdxm7u#h? ~a%Qiף8Q
8ޘ7|/TaKi<.v0h7
cP	e1S?yL#)/2+d*dۚ^m7Ώr,h/
"Ɍ b-
w2ޯRs8k$#f	<TTTG˭Kičb!Dwn*%e_hW ӿ-Td)5\׳ǓxIYA*ac|q (W3AIbn2{HXLGɎ.Q`_Oc|\)EsyLL~f;p:cړKu+ת[,g>[˲2.⒥"pbhsXIrʬ`S
JrC65žx@l~y.Whv:(%՗e}y.uQ(9J͵5\lEF.5i-hh`s/7rϼ	qNF0гF1d@˿ZnF{uEy`5$zXce!^2/wڑ@C*T:QtBIA pbӍTKOZ5Ns,_rZ"DcX<9ƩNÌehİ$CAHC͂A8F-,XOg/*Y}
ElC}`t;xߖެ8F۲iQ&\j3Zcd4THJIbȕCW5-Cv308p8E?;cqstčx:G9ZF;sz)
z#Cǐ*YB<:I^N\"KlYU۟_$aŶZ4rra͆VѦn<bKMBU{lI:*''kFa:sbQM.2Ds/	9YGIRb1Lt*ktcgcX@ b^.,-.,`Hq0Dq1FTah0zl1/K\߾O߅iv ${®'M7tC'mEdA#lѾ2<ic9:[7q)Vm7965rq2YKkp?k"DDgt@pfsznv`Lsg1)qs.t.R\\۝qs	~,ZSxŹ9Wmj\03:qWtrnT<&s߹c!Y֑R0d]r\tQFm硓}x
XqJbMҏoNAa[Vrset;`ɫ؅tLv
nh6lK2;"d{z_2FJĩbs5_dk	j1
ő5Fh't9g%;wYCظ1֩$Lw~GA2;kq;e˜=Dqr4T)\Xq>.ʇNs,!9
خ&}"sI~0'0;4o>2?Igt'҉t~jJmdԩuYuvgzGI#Ҁ~vpg{3Nrd\]70W*޹rM<_%%uT\*1Qwr]DT[Ljdy>LGhl~cTWL,Dۊsg5Bg3c)gr
_D+%y0*?(u[(BO#e74ɒ&'Ki4 kR(uv\V?	;'8DЬ(*s+:$yV0*4ڈ%yv_O߭~F@(綰2ib8	._$S}ٌ
C7;d}%Gd|D>|)4(?~;_X~4\yG65Ie.k$ӋGJb\V|
$^kKՃĤV8i&G1 l4&MJZoL{_3-8}Yj+bt15u$KY3A} kZ"@\v!@z$܅\I	gqڽױϪE}[~Lq.Y|}-!MG%=~y%wmIC*i7aѮ\ fInu=\5nEX^%jVxM|јx8o1۠7
VSXT6Dn1mnHQlsqkv-*$]v6&YƉW{aqɬqDr8ߨʖQ]dT0aI`'znTQ4CT	<߱w^jt,=XntmyP}Oo."b[Z0*y T:))g0İp
	|:L&gّ&|'ۛ Vj`Cw 0=GC	pۘ'=)"	r$)rdy
$kyA(?g aL4&\{I!?<0~;K};>w:ƥe)|Qt"ПH'g^yָ N&M!G;7w"1n&I'a;<bکy/5Elɬ)Y1 v}<lFa{иƸVTT:C&e5*~7CyUT}jǸQr5~P [@Jd`yNNrɶ"t&kT-;.Msӿ)>*af÷)vB]".B=H{?^$!u-&`[mz\fqns&FP'tƃZ&{,F$I52ҽFLq}GH> g,=/إc؞.3uM/qiZ(n
?ͼX!qQ6܌.oM&uA83M[÷	%G8p!O?'~E8W0VJr\)ɹRboy;%;Oǂsmo*@GZFՅՄ\5n|z3UVw;]		E+ɛɆdCb!1@N#15@nqafLbrʚ<nS&TL̸_щhx`ƃo
sD3$zYc&/|O)|ύ Q;L#`w{C'{:X	3CpNp|BCv~
.PBI94^	W\rކF1qj?jGcSL7z׏_ƣ	
8x
(<BdzcHɤ(	@p!o6!$
C|Tsp!OŠ"L	.Ɖ1#xDY<-4Y(iPdDBAV8&e40ws(cg*@2EbiKN[6;_vlz3 _ݜ{(\.2%9:-g_b,
7~.7^M[,&yl6vjBn4xzN<matNaSL+x+Z^Yh|闻Op

އ11XタCgy$Ea"[0fZ&Xo?:D6eB~4?E^7'~ExF.SiWU>8X<!]IJcocB*hn"n&>K|H=_Đ8,
	ワaV
ǹeϖ;[p 1i;pNqrΘh#~SdQJ wgٌK%.-;߇;d>k`kJZCMzi76'24JR|ֲ]cưdVh\3"D<UkW"%<6Tr;iPl kaP&$[grh߇/ag/*h0^yx
XoN}]x#{zq&L|z$35w ܉_HwWpRGȕv׶%)DDgKMKF'1elwБi")ܢo{v2yfbPPp|OH'd%()5FgISS4Jb׊߅6~i[[de9z'c܅Rrρ:LEys62ءrBڠ]-ڣw06C鼵oS%:w^FRnr.pK>Lu
ԛJ|G`;Wq]9s}	uD(1f|§
:Q#S#̐|ZӀ,b&
f;Zz}Potՠ:?O~p Wkcq\>mЖП6hxm6RYKе[YlװNK&Q5Vt\% /
D@cjY7t81}4:bPHǘQ:3Bʉ~ %۟X&~ic:Ml.&a;ODfN&߸`gPsIZsW59.ub˅ƿ+(pUҋlv1lo,yT|uw
 8I*'X9@'cd/fco,_g^׿m=hFy"s:Zf449Lhz&t*Nᡳp|lZšspQ\\Z*'
bXJF/";-bx ygF	$U`1t{Iy'i8
o(|kuAm64u6s߶&ڒkR܂V(R8ɟK|e|CWM({mƹ%qelI\i"jM$E
L#.EUYݬiLmVl0]#M13KM዗BגP]Hzb
Ĭ5t1<m$@>k۟QwCA4)-;N.sFբsrlEks%By?dT^>dI~HF2t5^
/YP$\ݛ4GbXػBs"Ծk'rN"qӹ/2OM`~jmһ238نf1/KYѶ?c	KRD2fՐ:Fl]c%̶Y&5lyv3[֛7WBxE0Sj'>@L
ʟv"@>p̃kb@	%0s33K#2%o |<AxS$OcDh3F3z9mvz^%WpEUzkCoa}x">ŋz{~dK{(G"RĿ_BZ/fn
rq8s/lw{An-!pzC;EET1t^!9C5.V/݅+'~q;AR&[;Ӏ0GYCY6>N>_Hz4OÛò|:$}}sT"_6}d^7V|GARq
$DdپB;I A2T=C1*L^H2/`qXa-O]&p1
m.4g,IÜer
dFh2ma}>׺uUKg\l7rhfwGgs߯ h?ASˠ}xV˳ܿ	Gp1Dq:}	`TL4DZ#b>cH[D-B[,W~</|?P?2fDؕUUteU9M &nX)~TGboܔ3=kNb代s6P>2MR]ҒM.%)45OaCzi]I~k2U3U34fc$Iet܈|AztdFc&[NLo4aPX>5 jyLI=u)Va瓣ppSz{`\7~8#`,Ç,Ī(Gc-|GD>Fxx!<E/3Ht&eiڹǺ!N[:=NduGP!	PNދi|8==3ƸөQK]JJvZ,B}Kjǰrba}cĊs;Z^fTf+`I
 *p'7_y?'#g$;	>uk)B
_1>,/ӈX'L褕9m/Η8^\Izq5ŵԋ7X&{d)S]
R]}0Wٵkԁ*|;څWJ߁1:0Yv`rsCl\z8G:PKuACԁGWTcPU ~	++FbGso_ye&{=pаya*w=J
2W+u&dҒԒ-Ԓg%W-9o-d;Ԓ%/7-qOGG]_埽?YYysy߁.k]b;D/5yg$o}H^wP~ԕ|çjg8394Hh.ȃ8KMqxԑ #Ve;/+.SO3W]wZ{曂380Ybŭs>\vq9eM/_B&
oI~c?Dl_BIhJl>[!}	y&!E7`xDű'G`O
	q~``vѾYE4|N(,F+-?C  ؅>:d,PeGW(x_
.QPA,lTy|iKlHTDPT$IMHD28%rΉ4~ XJɣ6US}Ǩ}dj
jRK%N~DDDADCCCÈÉڇR4tAe"N'Q:螚/EJ ߋ<2Vd"#;G]d2$2lۋ6Eb<4B94R˲ȴ<'qGJع3<ݬ3f`Jw1"y[ZsuclW f-:Mwޡm]6$Ln{J%Fy,\9^$"PYBt10T0> q6F`z̉''p"'ʰI,4Y$lqh(1|Bs"R&fZ8itl9t3략
̆BN-n
7p[,ϲ]"ivK`mFnY&熿x{	nW?
\QǟJXq	?vj"7OnDMh|+Gn#܎C#+6'6Nm89s9}e3Op(炉zs.XoFȟvcAo
||\5T\7Η]Fli33~ȏ%~
3ի=il`ǰIei
L<aQ&v6,og~V# Fd_C~#h|ґ#G19N<E4l@d#`}Y<y^T
͜@Ė=R8Y:U.Dĕ{{>%X̽>%t}J5Gܳd\ ˦
_][:RK(!IwBzy~w{_'ͧ*oGk1!	]!~ev	]S|Y
0|Y
0|YMe+e+/K+eI|Dv|MW"P"hy[y]#O=16`v#̏|X|#InsW%0fO1^0EΓd>Y"bKm.]Rul%9Lth@[@,vهb3诹/6ocB5XRvln8]mk|
bdaN.+Y:h2ͫ}TX`
S``SQ(LTyd zy!10k^s"/ar{mRJlTNbYRV)g$|zF&<#9tBepa)1h#"V,bt1	&.3_)k|4f^{(-]]?jxv3"^
^z]]A^uT[\:"dddmshzW1i&aj
M<.X]A g$O2&WHQ֍VƤ=n|}rOﮕfP3
n|!e=Sñ036jOx[M5k<
҉("r
2,
/	ll.
8~29C;wfgO"AdN`oz1[	BLN	",RL\-Ƶ]yϻa).v4$Y|>8` 7q2bQx^bœ6;=Hܮ?yK~Gc D=ԷX}<WCRDŻЎM+/"i9}?U4fwk̝1~~Lij3H6oA9
k*PB0Yg$7ՙ5]$ѫvvr:ZB}\aQY?Kn<ߴb͈-ȃ~U|f>Hd+SrA$LC,n_ąuRޜbO4R?]fSOC7
S'>[vf?}/m0P0:+IgC"5&*g}b9
)h*,d#bV;wrIj<#nARC8zW>P]N
8Ȼ[׻m8̻$+HWa'{wtoxqw&^{w~ݏ
{{Z|×{xu+AQ%5(zA=TxO)#	&eY=Sz+{[smK=ʃޟgEM5-m/ʗt7_޻n=WCո>V{{T>UxGy{_Ӽo޷ROuBOkxP4\N_=L]UΕRż"ڸgU3wUea.R<926]GiDZd+i;w2cNkCOk{J ͌(Alĥ9mDE.<5/Oy$b	ҷViҵI.h2 K,.ۃQ Uy=r=Bмbڥv(آGH_.$-ĤީpZۖE0[YzНM:7 _(
:huQ
}4zFmC1hspZDFҽ+|b$<bD	Fw<"rAV٩JR$d4b:w3?oy%E+Aq-ZG62Wt٧*OV+e&z<rJ`D;CS^}U(SZsJM=eW8$M*kdSU{MR#˫M5l
暺5}LuԵ>kl;>Gǁh7E{(ړ`Ӌ`Sho!h
EƢh?pIt MX=Fbmt8#$@{%;7!u;DCʟmpH19F>*I4Q?cf#8pѯL4a)lPRHoH~95-neͦaPVk!Gz\'3cTY)
z/)<E~[KG?H$J&:Q$Ǡot2I$bñcZt*fEKNĒĒ4:Dg=wGl_rUR֐L'p&
n,]*Sc~9	[,hWBfġf/UC:fe$jKNY;w;J
LJ:׫K (_{{>f2!sf	G bKP]//aOpT4*H`!"⵬	򿪮׏%S]ޫzUޫD:4Bk^n*
i`/6+^|:65JVgNtcD7:SA-<X7M< I~û쮇]UokyE8E!2ҿ|'qW-?K
ǲ];YݶmY9lݡ8;w.37b߽	3!;CaoY028N	g+w{D>X+Ú5 l6[^p|\97|G_aONO~3p{\CAό\>͖=-}&vk[{qMYOc݂Њ4ĮTG}1=JчZ=D )
"`w݊D3!#/d!Ms6Bv\MoRLvlSmJ:cI<Q2
dJ٪kφ
_a8ЗB*OApbV`\	gWypy0	3kPh=gaup#lMJp3|>
 
y_%!|Y(	n_w5ׅBjc)W8>	ǻV٭~ w"F%m54vXKKk.1heR(]YC Fhp7LEu.=\otpg\e$^>N
(۰G&!<`
k~|CoP|8"Ww/*|`zH2@ibeT˰'
w/vibWCBڪp> PQ@ITR(X @BPבqIF{TH ,N20pX%wOٿu(Gi 5JF>AdZ㆔(?
S E{;|`=<sn@O݄cp3"^%p^
30Kz{XwzXY=Jhիw#78)lTdz-ۆұwCyCq{?OM͛&3W|hԙ&%PihQf"fP24$ë Fg5WUEi5
6>>وߓ1>B`G_I`<\130lk}~0Vg|} LՏcZ}ܥF/D
Iبkz~"|_Q,}Pbxo8s7%gTml.>Mh`<v9dy:R)v]XcCK>R/~2 ]BN:qRP&qho]>P^p&H; +ߔsR@~J?g}2LsɷI,U57KHiRS|2_6pM cD0ȍіZ 2c:h(;? ~<®<EX)/`>
+}£Յ|.Y%R
]ArÙ!5V_dnu/IdUzbרxeNE"OCyyCƆud5Y[Ԑco23o IG=Y	
P7CLj[(6[#bi[GǘdշE9f>	c*V6ikОt-ҬO䣦P٭w%r+TF]ؒ;L~koT	y
.v3u[ < ȷ42\20G&A&]	
`$'$IC^nWqΆeaxϷolF5qm#/q`&]sk6<DS.SỈWcHm(JzWCbg9! '
<ZoLUdb"XMb+e[WjޭUrbQ6@y(;~]U	h
}-T렇ͳ0@u:fSlBMe3\0"_rZATh?hr8qMOLz%=R!{S 87S}y
- AH2<uLCzPyYi19C'cYR$B;s;2u9.F:/Ff^7@v|Od;w`j!h}7*{bO՘럢Qv3d;s}Ċ}cL"1&'8N`f4dC)AfE08<ZMo=M,H
oѬK؆fuy궮303,'I?jʳ~":n%9̈́UJŨ2t\yڃ=<J	^lpW+YRGLWS5;N_\Nc6­=[@Qͤ>[#[`#XrLUu59|2o\hiYrc3pbkD{#Dy#IR4GOp1Tb1@С0°Q]0(F)lF;8Ǩ)F{ #MFWx̨'pРƾ郣|_pdT5ZO:Αtn=zR]z}U׫"Kazq!DQ> 4cq aCܥnH'$
+I2;=1kdjj+絔vs6K1M@e0N -8QZM;<PC\GL"ws
.B
ԍ%YL
Lnu_tcN%Kx9:=6C*fu #˛v!p1r&gRRQ_#HrBdlQ_8<[ñe/`{-ar9[H;dsMhVhGq^EDeR}
;4fCq'5rvToeB~{ZZdJkⲺ("s%U$1-߸}7nܟ[g՗89P+Ί$4Ss~hWQŘ1Myԩb	H#Ȗ+=ZkMg]ttmT'<=j=j`["aWc>k>Y:DFhm%BQ MIUpL-U>,at'hR,YI ڄ5x-Y@6Pd
+~杧:LMC7Z Ϸ~xTҚkTF"qKK
׏7xUG#"GI6?	nu~+@@P^}+Ŀ$j")	2B2KwxH~g%qL( :28FhDJ^,@,oؽ 1nB1V~
UČpUV8Cc31z1^@`\`lEEx7^6xxV;!i	덷`6hv.xm솯=)7>A6%Bg+0V3?
ˌLn3a'4>aVBLCxC,>7Kr:|{3 S4ncRW@4v(Xk,Tw1=BZSL<< PwS/>r;@obPmr -}'_
T@#¼T
u[Lo3rp	yS}'XTAGҥ	a*<&mu{<w.rS%M1@4"kgk/(܄	T4W[gh8@;-!/4"9 `B6?@RVN]7=Q,% f} 6Z6YEæ+zmZD+*Sj%:ݘXMxkKO#=!lä' [Nq.FR³ceg%-JNfҒC#SfSIKNVh졁">Tz@xdZYe#~QL4+YRL[HėzfQ108
1TUӬfwhfO8ݬIQ0
}`Yיh `9CQ8x:Xes8|d(̱')B{sPe%6'	CͳQL@ !(l5Ry֖{TJ
0/7)7	E2&s!#Jꔻ>jy*2
hUJ)-YmC)2MِEaA^X	&,ǘ#fE!q>A>&2z;c-"ٽ=qš6p;8=8=kle8k
n5g/-3%1/uieV ӊ\OS!?tG!?)+sپvh2ȷng488clp	u|\r5959
y9Pb^ͫ!jN>Ea%S:W:~_cmu)g>;qk)jƾh+,-+y#6M.]aO,sx	Sc2O!ﭧ9oތ468v\uy/
;kԱzWExy}(!eW.!LZU޸Dsd_<{1WLެf(B7<u/>9nDwC?;?G4ιN)/y)R,.{Xu^y	VE	gMh&D3H% ֛ʹ	jg7+0UPl&q<n:ACeS*`b􊩃&	_sB'%ŉh&p,r+m,Fs#RԊ&ٞBs"㌒o/bG3yK2cl+{^v2\X7|]5η8HrvY܁:ۍ]̧%O?&cqٿĻz??*W-5ShҜdXP26{Nl
w|5]Po~n>sO|3YQ[	ۙR:R0E<̵Vޏ hPgjSnW'LβF橑j<"3IlC.L!9sE,/uL/-(bOQ-EBK(f)]-"Fd/5CNE-0'44p"	! mz
 YPD]$H|00#+'ͯA7rG4/ȡ_3)86¹ Xy7|w-n|0RaOYV+K8*{~dnB-[ 8J	SxgLrwCo^>Kp[`_տ㜕m|[ؕe/.`m}𜺟@ Snc,6l8ڦ;'W]04
H]D<2GD^ž+eQ xa/i3^TوT=GUAkԀ7	4/	f0y3{/85WP!ߋ 7)=lzzlՀaZX
9zBR,23r.Ur58"a{l+<tHR6frZ3,q,"joiZDшop	w;bvwI%kTWhZtHD1ԈiQy@'{ӴqGʬnR
)sTQa;!vu2:ܧpgL&~XU;N=(wGVi[f)RY+G,c,6H<)B*甋m_'мE-23_s(:4XYQk(TYC/kNVJzk5pfa5E(
(Nu2l)5N}iu:n!x	BК(Yg	*u0غ@j]$[)D<R
kp7a5Mh.XWOYW
czuu;k}S@c5]/3zKQ	4
vPEI^RB=\hy|&Ls4/Ni~(`70Y%<pȤ%4ƦRɂ):6v66%10Xgpc QaH9L2"=qRm_.~_/D"mN.7dJG[N/
Gx`O~!_ vIM+c&?>Vu`y1,qܯIaE],W6lB#ϵX$QKce̑:7E^9w 	;Hnݺ
YPjld]-C{`u/xka
E$P
Qi?w	NIŚњDb6vEBz2Fx@4qj<+W$maqp'~TMz_Yhυv`1*RQ3u( pitk.yPfG Y,`z'5c9oZ@W]e:Քg< sli眳T9DnZOYV(.{NSv	^p_m'G5D+s ]
~+2gv)ԕs8OZJD+M.(qp"h*Ȯ%@99"MNεܞ*%YFQ(2W\QCSCSCS)LvU2̩} !E8uu<6[#"Bv!Ces-M*"xςߛ<[]>'RgSkI}񤷰!]1)_ tW4X \	_!RZ\n(*YJ+/ڵxh,B8C! P!BڸX{,< JPh+!5ҡt^S"CpΠ}$@	U"OjPW
8,BGK­Vczyrڝ*ِϊ&/1vq	+;vRa{2^4y*5B
uu/ECLūsv^.Һ"MxH;?$?KVY+IX^=^AV1/IqH!>'#;_zؒe8Lv"He33ZV|s&_IQ
w
y-{~ *vHCp6B
(_,B鹆;r&Й`&h
9BY
1]6|0	Ut'R
4:SQhp2ն¯lCVB|(t(*t(*t(*g-C['Ͳi);J}=MeBD٬dʇ82XQRq*ˠ,t#;;"N8r'UdC(c_s53ɹɹɹ0¾9|88v\!wI1-ܻ4TS!%ﰕ5\@Ǡ8srC{q!vgAqȽT`*ҍ瓒s[l̪]\i<=W'lȳ\A!}IݲevX)s¼71Cܲ(l٭?׭1ur"Pyw77
yM:sܐ8zI-bEt:s}v
 gڋe۸
1DyS-N<2!ʖ.	2p%%95˓JrBBZA4c&!CnL^k3z4Ϫz'@-3JCˠ})zjC+>v&i$-E
=Srlg$Ofm@1YX3lrZ{`##;<PC^C喇z#TT9<=I6Ϫ24\4Ux0ʵG3^q>i׵wGUVOSi.=^52Nf@E5Azv:5Z >jXM̔+g
:P+ȬЍ/x	%o*uR7!O'ZN4JN+aK`}ҝYb

'q$hRM/T|qpFc%{\B٠Bk{numsymNMn*WZ75ۭ/xuTce-"纮IZ ]O'tڛ%!ox#$#Xړ752o)C_K"^k"ݷ5wtM&9Y!oMʯxy
4(z-S+d>.o*	 cB?¤0%\
n	١d |k8^K3L
q~M
0w[Ŗu8.~֝iyUT!1pGM+^j YB-JE:+HV
z[Ň'?(&bg(DE\;睐uKh%HGG1}q$+hA8
0A(P6 6:f7();k1tS,I8s-x2Oi)gY ٠OP;1ylMv)V3j {{8lG]nl@zbrPK<Qr=hTT؝MQ-R){JJ|8E%<HggmBSm7mi.V4@@'cű
r5L|8GT o/$35\a8ŉm*i#|8zb2b~v	(u!L͑~ZT>(5溲Uެ.\p](ȥNOz"mc*LølYG!.TLgP^!	͎|.J,ĶoKeQXBe9pkUZdE<՚)4J1i(
uQ1ǲLDt֜Z߅YGr`aZe֓bsiB2-=0y+^+ 86A
_yv?gjSl°*kɭaEQC1!˿a0{{izia1|o9
Ξ:F7	UOa#pCkІ8(V1FQFQI#
E|4j(B9.FQpoFyy6P
ۡ[x4v>̓\4w?%B>sqqKIYHCuoDe=wOzmv\Kq8Gc+_ڞHtcFJ'xjo4zn9ËCQ~sxhW!C/ȟxPYl\юR`Yzo '-s"pMz%%݃G$vzhį%
tEFs*tw[mtUC±lWÃjx'PUAk(bPXpdwaw>C{4J졞4B;LC=S| [V)H*e˅{w߾<zgWPimï"v@U
p!߻kuUU)..HRùχЕxd6Dm$osHA˷Ң)^Z-]8\b-CF
 (Gr)ǚbK*OJҥ.&$ʥ'JoCM*ء!4o-?Rߞݸ EPPb@2TVX	kYWErChSNNQJJDG!O;Eoׁd%Guyc	e &@
e]	~;4]01PYn(#Y
3e,T`dC2!̜zGq:2xr{᝙GoRNx{99᝛7G9}.	#wQNx1)98bxG[NxÛ]r	O;bxs+;bx]^#w}Nxލ9Ŏތ19U1s9
iG{L]i\Pt iJ
/G%t-u1P]MRB-ԶiWʵ\D;+}@-! ?ÿCG'*%jGvju_&hQ#)vsO-f{GYq聄27\
eAT@CYHC%3'Xb<
%VJ%ʳ,PcpCy%^1U`O07YmCy&H/CŞ|`(i4OؓO
aY2/Z`)hn5%xhQ6ǭV~n݆>hwk*!B{1OCX C	B8Dx
Txbl@3}%D[o
la-Y
;7kaA,XF=+K$CidNGyGwyBm2Z(מvvvO<waFnJFnjFnZFʌu3r33rdnݝ/#@F1#7?#ה{(#8#XF	{	m)\{
Dm֢%X>e׳Vm'|ڛP$[#d=P܅	i'Sk} Ag@dy<~U$>Q~矀Oۣ}}PK   dO\-*  
  6   org/mozilla/javascript/UnhandledRejectionTracker.classV[WUN3!(`)bEȥ4KRjV.A:$dhɚLP',,Z/>.=32a}9Ͽ gQTRMm[KW4c#x}SmpV7t{Z OAv㦵2+-[kEKe,-HMcҊϤ%HC[h*h94^IϗaΜV+?Ҫ(zpNA>$Z.kc3fʴ<\P17z"--6}	yN8!o@O	/kv;U{? .0"yַk2Q$UmCVUi㘠̾bn8HQoqmZ(D/$Q`UF	[rܖ
8
ei;9fG1 nJk\;*qu"0糳P{#~<JO(uK
譛1;Ka2g$f׷֥ć:*gJAtCvY
)HJ2FۇS"P\ꐋ
tnd#Bg礆ꑎ@Le}bcѦLP	

>>b'R2r85;k6ĝ#>Ԥg#MÒ|2s>V~i"1|,XUWeԉnAWr0wtGŊDͺU:GԲyrg#r#u@9i#D2=om BfQ(G!^+(
HJ d&5~}Ae=N@!e^y$N!K#ƳxBh*&"Y9X[&[UHK*O䷞\=͜؁|jcje_)/Fr?[$6#26|I	_EKW$)^#FuJO;=>UK94;}ĕ/AzXb^<JH]aؠv{@7{ݍ$ԕѰш19>5sB!b'CtQʍv (/г<sZ{΢;PK   dO\O  R  8   org/mozilla/javascript/ScriptRuntime$IdEnumeration.classRn1=nN&P* 1BbAM 5(*)YЕX]+VH, >@q)*f$k{Ϗ ^i3(%(PX~i&(}AF]V/sFĞ,i>i7=Q'ɠIPXɵMik8)~- 	[ M,WL?>l,޹"+j,v=rՐ˃=鏺 zdd89p5ȝS&qQ͊6Cl)sp?O$u(}쐚mTs05ѱ&秋p\xIڵ:?}V$acʇ=C-TQI)U$|t
Pc\]
E\7Re\'#79;=܏ TW9KX-zȱ1kkS$(c#&UjOPPK   dO\0p     :   org/mozilla/javascript/NativeCollectionIterator$Type.classTmOP~ڭ[-LMQ6Pȫ[H0%.%]GI2!
Qs/SQmI<޻/_?|0TVZ<n}^^dws*k(7_9)0H>Y)3vB)i %[.0ÍUh 
A>%1̾l.i0
t2CЕqjmlR-q{Ы@?Q#7k8g=^$(tjl! 
\5Z}h;{r-WJ" H%aƈQgڜ
..4tFm	7G0k]TW+[T\xHN eUGJlD'PZ\m/ay
Mԣՠig)N(Obqv.'.@j!ׄqg1BEC7'ȼa	.M~!&S"g1O?=Sb})VPLCbBmtlP0!V!R1ȕBAL8%YPzJ]VrI;u~}Idyx#f+GqEC4܌@?!:~hfdt2d*MSS8C@ΈwoPK   dO\rŰ  I  -   org/mozilla/javascript/ResolvedOverload.classT]oE=3뱝M8;I&$P
8H ڧll^sT	%/H
}R? P YWmνs?9swS
:4Fom3똵JvUv
J*B!!n%{Xv3+S%nxYwVymN,3hvl}6F"\wfSiXMQk3t5
&tLbja<.HmMr?c	`cv1Y9q_Zdt]eOZCtV\雲:.bWfzl1L*dڕ\
g=SXccP#EfhXCh^2=ӵs*[Ggjڴ*Umɷ?RU*ax3Ko
@^iWyM"5دսzǗ4[nzǖ$c7Ln[QU%Ys4>Q994WiiHI`sP NLD(&c},ܪc"q~DaU|H2=`GƵ߽ӧRU="PB<(?>y
O}?೸LB3OhD(Ǳ,V07
$ OLNxEh	S#\`R݊tk:oDё;_AS
SH$-#[UjO%`Df$r"Uҩk#K/q_%~a>__4,O!Ӹ3#K'hҩtm_:EKߓN
C@*c'HȟA0V{̿{x-2HC,AB=<ǯ@<2Fy[jkY{CPB'8OWt>_lPf|ˆ~khd PK   dO\Q̵  Z
  0   org/mozilla/javascript/NativeArrayIterator.classV[WWhZ$DB(r1hLlb!h3{}C}uU?!hC3|gߟp_haV)de5r[]Q킥/;+ڸeqGTǴ|`(hECۈn(4ȵcd(
:x/̹g;C2,$XgC/kZ6m/#e(E2h 9z^B"yI
@Cn{,W*8^h}Mx{(8cLmtz<?Tz.ayf(8oQ]'Y"rvׇ^+8t{e&̊QE̶c]
̰ 
'l.煡 Þ
qa!abrK$U,ӚX۳v3W4HXaIpQgszSJ4'%ge.kCkS
Km4UE\1 +eUX>ûqIƉNqV+j6.LⲌ)L3	`ȷ'K
*d*;7I^f3ܺ:QFAェdr,Mcr2n( yc/N,]4n6q^R7mdkse1'5:ĄGx[Q1eƧW=4΁UԤYv&Hdei^tfĐb]0yk">	}lM-$Y+u9C/+	4ۡ`
ɲjIzih˦FBZfhNR_Ns<_ ȫ:	nGQw. nGܕ6J_V-b)s8XaWRk?6?Y"MթNl+c7i!Zp6@1]Bē(N2,i6
:ݿB 6'^n)Ҩj
utEkwC='|έPG1T6A4
8O'(=ƾcZ=Fdx률\N`#`b%i#.De,C.{ZQX
l-ķufpGp@o2}KuN/}5_7B|@-LE)|<[O.cAjAÂ-
p[ฌ_H}Ǩg.UξHCyb9Ecd'LHH὇!z!Z)ȼMi[&	e h,&q/R(ݳ.&2I)b7)ZZE7ABZU7JC@/_''X'S|&C7|.ዱCPK   dO\uf2  k  2   org/mozilla/javascript/Interpreter$DoGetProp.classURA=
I$4	[ܗDM4A_x
L([~X
#"T˹kYEB7GD Y׫m37=N 'i,;~5rm>CX8Cw&{?9I4
۞e|°ksssH1DҢеPc'vqCkmvm0r{'hXOrި3$KsnTn>^pD!C81 pG46RI<lsyQz}R%FqAEcP8N0)OSJBu83Yn,k=Db,RcöT^f6mvF.%f%h{"ǩʭN5X#8ԫxa7<K}F%})0p"ͦwj/!;uBmrGawN]s!*giMЉ)d5rROS4*fL~qz}k8RZ	o)^Mw!}p r4կ4prD7o8K{2k_щ(tt=v4=ЛqezlO~p&!p*?@qѥTCx&p	5	QnN
NG?"4^%C$=$t҇a\#ĹlYEIOxLaZ2n"
j_$G3H-ch;DHPK   dO\7r  ^  C   org/mozilla/javascript/CodeGenerator$CompleteOptionalCallJump.classQN1'.@x$!GGK(BD9ϡࣀ#
gv>>`> 91L=E':alOF0d+q1`þ6ݰR<tҤcdlÚ"[m5ݏ"RG\ոR~0&Gͱvoh*@ѹf-y02A-o+Ugdp4˥8ٖǐoĞXa(Ő!Gk'9~ ۴EAE@DH[霡۵˕X}`r8:'JSTa@ʜ
K3rm.XJq'/PK   dO\K
  \  -   org/mozilla/javascript/CompilerEnvirons.class{xWd7Y	IHBi
a `(J'a3̆J*Ek_V@E+j[IhVêwG?|sG=9sgxOU0@ APA>}DoKDց}Fՠl6u"0
CfPLe'R֘Lmdmsm4Ꙥeۖlװ5fWO

5PCP͠j5XcaͤawGLJ;T-~:
vQ̄K4N	߰Jk2
jFڰu42^5vsI617X`3h]siؤ7|қ'ցFj ۝L:[A,$M6JfRHE"40D~{6\cp5Ǣb4V-@tq>R;mݬFv`
g:;LG
5j?}C=KNfUV#oHe`yIF.n~jg@^ꕓCJ]aΆ\y;䪻I5Z3IF{l-!6t7cc#=6=ũ>;hpl2g@?p-w͈9X+{yg\3g1f8{qψgl=Hb[$E{&#V(BWփOzNdhuƍa
C/&}_?)۔45p8I5F$91F FvX::\>jqy1D5@# F{zftVoa>^h4dʽa^^e>Gq9mРbJ@H}.8|;D6VJ711ë5@3cn=W=-+)~RD\碑185)'>,=iS$9|i߾M3xTèe A6oܵpРLE'h.Ե$GӉ5w;p1*k3mlЁ2Cѧ}ԯ&Rl]ӥ܈|{PnAI|T41q}߿Y3$*&si0t/t"(?J\[pbdЦIIE;fmfj~1Ѩ=\yi(qfbҤ'iK3icȨIዃw꣕͏ĝE=f%AG`AVIx]Nd̷e
!5ɁrWgSѧBOQ|'MX]P\uhN,z]\6ʜuz|Pǧ7t'{KV]Sw}X-78)Q|LeB.B
<0O?mnS/-)`vW*_+|!
2&R!	BHWB	y\%a.@gǳK|OgP?9uk(gA>qKP
,̎ơ鮅Zn1]貜.+|1\ DY1`P΀p +qd5r=̂NEKA4J
_rD&	XKjEy(6P@l6R~UWx]yj4Vrv3v5nrA'_O9\XM<
7B4LQ1G `bL7#|/c-=!QpQ0|$I
%4z*塌?\V\LSIDmbuFc^^W,W«
ks䵼4< hQ
j%!	nAn|^^[puY8GJ!{6(f@J]x *#Yy0m6@+Af  Af [f J&dImI%HG	Y Oc|R -UJNAiu\UxD|sv
*ԟAYC
_[d_-qEV.E2@ȕ;qgy}U=l.7NB"eDZQF9%ߦ4>mxu7 e; A w=>  +Ad /AZea? eSJ eqY!@^R2SJ{ ڜ yY	AS|[
AG S=ר<+8׫>s}G5tjTv5SAnA^G7|@+@^Q$R	*|d]ok1ɶ72+ߒ=o{anzr
o?»cR_q*cRߕ1fhOu%2ȿ oA F ?W@
d J ZJR7~~ Uڑ4%ȯq*@ A*}@~_pnP2H8Na|L6SR<cYr9m'M|?I$j>+FwM\՚`6.Cm,ZKj,Ǌ\PK   dO\dP  <  =   org/mozilla/javascript/NativeJavaList$ListTypeVariables.classR]OA=ݶ-|i1Q"n)	+113'M~޹瞹̜v
`*JBE2a1}1>icؗ2O>p$(a#e2{D(7_	Ok]
Q!=P6"ֹQ_#ӾX32	;r胴r7ėHJ\q޶ZZgSQmb57bn6VޕNw=)zMX5럧lBybtBlֲ]Tu[P
mֵ/~s3YWm+I$Dilq^_/eww
{
\=C AWT4J8L.89?`f1Wy<\ctOʕPK   dO\$ǽ    2   org/mozilla/javascript/Interpreter$DoSetName.classUmsU~nrֆTv[@	PvJ)]ֲev7i0/##(ܻԶi̞{y?Lv
]pDUg8zuK˶}óALU?F`N}!~r"Cd8DI
*XKmxݸз\y[wVs+kT +6Cr9^qUAl@(lB
VIUm<.8YWg/_g8]=̢I1N31$o:%Imxz\_1=p9]b8u;}69f8F3Fġn+81`HRXIUl	»*`fPpQ6G;K^ӭs{㈤ϩ8/1Y]eђ{HOr"kYbŌw-nj7H57M)׶Ӿ#ݷXubV37Bu&]2>""pxz(A18"]}2$[CfVo+r9fһM8N\/mz9cHHkBhP~p]11=9M_:=;uz Mn28hp a.h'ʈF~{,W<@j".Hbh6$Nk)x!FB<#OCdq$FLB.M'?QrqG!}Xg%i_(rDf;A/#W|9pI3XR~ĚgYխ0Ze-\	V%)X]E?KC5p'3&0BB6K<Gc5=S5G/qv<@'"thM)}"SKa%֋3p%7BPK   dO\䇸       module-info.classn0ƿ36
(0/ HHB[7q['tj{B8f999?}"JU$?UO?;!9aJ)sF?aU~Z拨TBL:\41ڄA1LIŤ1n5FTp;NJXsóY.=ן &_-567B	;eTj*a#n=~Qj`$OOiEM-fQ?B'P6sUwöf8[m2cVUOExF8h>\+'oxZG݀ߎba/d|A8Mwh	i>?Vz_jyfypݝ_1-ܸhE-{DǱL<=znxnzn{v<w<<=\nн/PK   dO\              META-INF/services/ PK   dO\21   /   5   META-INF/services/org.mozilla.javascript.RegExpLoader/JͯIJ,K,N.,(+JMO(JMw(OLI-- PK   dO\           !   org/mozilla/javascript/resources/ PK   dO\    7   org/mozilla/javascript/resources/Messages_en.propertiesUAK1z-ѫ((
z8m"LLZ;҂0ɛfrI#^LP0*Y1f몏i50ed<Kwچ/XdY!:OʙoCN]Rࢼù}we!ÅEcRih#.ɢ>!PFɏ C4;=I=n{Xar!i9TPη<
#re.8{4ʱ.ˊ7D-RZt}⪶JE3Ym~PK   dO\Ϥt  W  :   org/mozilla/javascript/resources/Messages_zh_CN.properties<isƱ+kKyr^EyOyJtWKIXX``y8*%MDݔ(![(.,^`0RJB.[b=V	~ەyX<`=ނ>U"g'g2jcag!zć/mǱاn."w~»vYUԒO?dV\/d%;}>x 
RuWeEe^wh
Y_VNN0<  {p(*Rշ^3+xb=Wf߫p?bHk-Ă>yݰ[r
B?g9
ǟ}O>.ԙ.CWY||XCXuJ+Z1 GrٿlyG@9K~G. 5]2؄WiI3>h^jDz`A\
x_.RTWޣmOcÉw
A #9Svxha7~)*`Y"<fwaU{
Eb0Va!X!/#HЖ@s'^S8#-?|0,HP,,JmW퓈x@XX}X|}*?tvzoLzGW/ھފ6}waHga͝'=xD,cͽxy|8J4xZc^Ǳ9|5__6߽߽ڞ.G'?k||u>?͋\4G3htyzݪ^DzA||_o9_[fCE*F9`QZ) SID3٩FJ<^^=m+ƣ+L8Zo^ v5_4Vj1i

5H4:Һ^}|7~[ZƟ+h}h^b;pЅWܞoִMΏsbs}Q%7a9_ALBz F:u5|v6J6]Qߜh[}-D腀zx%BJxiRsRb<|)r
QF89CtG)oGY9l~N
V#k5NISu[ `Aumr [o(n8J5F#Ke`ꛫJ'
,$WR?Ŕez=u[%ӨhpI\E syɃ֕X}^	\LXNhso.qk_B2 quOQ,tAxV-=2]Pm57c1  j0
x^m6^C6<s}L3Z
8}2o(%D, dO9~_hqczyas%h|i~ZJ1D0 fG#kaA5)mT8vb)uu/Ŏc"YOL5/hE:XDAW!±{wG-FqcEQfo;K@vc[Y0dsGI } v4"gP !%.nݼhw5ww]_yͼC.c;^hLFBb<=]ӸNWS47'h@G#/@<:&[F2OH=ZЫFW oG+WTP`  #@3H
h-]Eu><K3
IoQU?+A<lǏWP7Q茖;:ҪWѥ8}0Mlc
xM\gf34b1":4v$6hߔhby$C(v[['6G~!0fRd`ck`` [C	hUxT '{ OԷ&5*LZăblP$
x;LNt+7ژv'Є&)eaG0s.#N1n~\0wIDR~zF/q[0/i&d	^]*!pޥxv"g_ 4d%cfOs >\VWöhk5RX00䈆'|'l49cFښ
 J(OU"AVFHJw+ZzCSB&y"gm`%N[/W!Pz" f/.rV߹T:8
a a$b]&GE<=K9D(x|Tcҥ͵ZV<=hI{چDh?^fèsȧ\ZFBI
BNQὐ**XJc4קĉhVx@/pXT<&YQguQv*K\j+m[+y}ol5ےa5X@=CtcT_ѕ;'}Z@DZ(J8x	̇mHQRWDƳpC-0 }o2%!Ʈs l>P6C2|$p4K^>FhgNȆ$H6,-L]mNNЀBe,媈)$hGsȚǳy7ZE
1h1u8#RqgIa&yLX8HS J!$xoOlC<A(+
l#@
!=R>'3@c L@
!h~:-*/@ddSˇ5J/3rC~ѭ-czҘ-*
rl2WU΢#PQJɋ56oDAL@lM	Tqk@,n;0!+P=RBon+_?WJ)mƤTev(rF7Q@'|/D+ϰae)IopnGc"CAT͎:ts
/XPX0`e舒vU.qOpj, <]`ik>@{z8KPK7 6-ZWZDMeIpXcyKwd@CIopEi?>oݎN[ kE
-Sp+
[6K?ڗ 2(Vn J7kXj
;R'
Hv!zd(=; eZU%@wpI!K3yP:;qЀzak߼9YcZt2vHC.^:&!)34\21Ju~dPK^IWH=V\Β'oI*yos%F<9ϐ(fu8EaƷ0<XYS$˲/;)NjmLAG;tLqҀ>BCHP&r`0Ng\1vRQF~Q̅BPj/UJ4Pw*["m 1 Uov\)c'f(F@AhS3FLHWGmq{S!8Xct2#t8TN.[R5LjXl򎄶V:`k|i?/초(l\]QUћqm⋷I(Sъ6.хB%C9В.1:HOi8( :R9vutuq; {RBx.s?BT@ѷBtBpUZAJ V]*a>&תYXo9s*b>=
2B.7Ki5}U4P9{Fz}+7QyO&קyh^׋@
vJ<y~
/xSBAʱU<ߨ}ߔ|a2CNөCEw߲]C"0Ϫe:>X\L0A >'[$*^
0=|-?_<M-wlhؒ$P Q7}bfx ?
9)"#|0-;g:+cqz}g]XeKhS'?㿦;cبXvsm7Z޺pV݂B~w̏Y,，a
f+ 87]%@(^/	Mz}LH¢%F#@[4 gt}p.qz`lsal^xNfx6gڄOӘLYfzYVZsmY3oPS*x&ai O#7nD!S
fkviDwE@c"dȐ.ؑ׋dWhcn9CP}8]ʀ6&3\LP`Jοk_<*h}<r/~L09/@Cj0uT.#]y9X7qP^2w?YĬ b`eq*QW\ mbWDpW{QLLq?aVj!yB@pBI\ȅrA{䷳gYn&i'b)I%A-zVBUq%+K)F{#kB][JFLy[K4d×a덈*6o*&ைQa*pBMд7vuP}Bc>AFuE_#xzM&i6aU0dBh-9ͼŤeNȯ夿ޫmp!FNGfR'W+9l FnEh49CN5@h4Azs$%"ݡ}1H0gjNwGPIPѱfqg`֔M*n3#<3\E3J)RE=:s3SÎ,qZ\>UrdM 7FCɜdf_-`֜0*$태MFpAc_i#Jyd]4(j.Rzdav4{Wib 23<Xv2"eH }+<g	>-BEUr@ K3Dq-^79KI}~y[엿;>~[Ne3c*xOm	"G`'|9)C
ZlI"dhS˭[AedLHY'#GyB6YeCp*كr2xhQm1ىCljXzApy+J:dnǓc9ūzhhCC`bv=MG8cLj-bR'	d24wvۍr,a$WҴ'p}fFçUXYJoSDՈt.MTV]qxj.1;>/!8=}f
c^,.zzt]1dWR k(L*XxWC-(ys~mdisr7WkI|KR^Fr1adM׈i،f'Q.? U
	Pd@)\zOnFL&7kS@ǳW'eƟCH	LlND)dIl[Bb%9l	-[DIu>!{9$-2U3{-m7C%Mn99S54a	GdOeyzmZ_lL+=C`⹗:$P^TO<(gq,Ub{^xT/im{<6bLMsmo&єLL.	_W[B/|MBnf[#Sj/c,vqBnLꍷ76-0ʆ`:04DQLڷ{0r.σ7%Px}Ǥ551
,q& :gGsF?0vMq'/!9PuPY 0LT"&S
J2RJys21 D>uZ'lM0"jRY.~wB0e2r@2	!E:xQI	oۙiE.. /8Ir5S:\l뱝Q5v5k|5)g٨]Жh9TC}--SONbuH*jc#/s,!\*t"n7a{2
O%ʖHOcԂ!M<OϜwaD1 YdD"zmh18(FfkxX~J ͕ +S34Ѐ緷idlM5jrbYaIu1¦$qN\ta=]zI/H'yaFm1T:6=PAfvRR%"<k4wq; Qv~dCzyzfs 3p>e̾VczrS'\w624=~ʷ6A:֢9߹""jK2	G&Gdg;62"&ʼ{`ɔ${^n
dn٨9;e4HD#Oxm.7\OI݈5МIvfȩ|$ۢۇy@݈n7@Ѐ+>09%3Q{@%נﳻm-m<<#tۧ̫|9@=G06xY0Zi=%ԥ ް,'5vuA\T( hfߣ XI<FJZ(0u"j?H_BCD%k^[+]lLPn}E,fryzN2+zs[>Y#jN^*JD΋PRP	ə	}tql:eg>[_-_gBPH>]1̫d)|^6}!d
c"lMbx&? +b<sZ-U_ͥ׌.(ndVK-׸ _]d%4Aʲ[·t{^Dی>hnL|Y2'Si,$/TWЍ]9zb"ZM?hBI$^ဥmI@jHQSM0
Ӑz}PK   dO\Nu8  Ui  4   org/mozilla/javascript/resources/Messages.properties=kܶ+PJHuYYJ+;Y*Cbf q1;v_ 4HJjt4
+c=K{Qv~?{qYnC[ߛvJg3_~\u`[gzӮ_<W/˷tM<(>-XSCyiT:W+?lRuMiӮOvg|㑋|(?>)nyun_Wc盍yk;cVvg]wp0HDXT߶c]y+mg@-nmK<4;<}壗=+~xkklUw]vj5{
knK/;Hwe
B&e	
84YZu$ha ]7\)>#>oko4~
@E-`k;~q^#b?yw&!m&}.[ͯa۵fK45p3M: +iEtZz4	hh4YXYڋvpmlaw}P4uot+5GGw֮ꖁybųgߜаۆ(C_sl#,~f^l}Ӛnlsr(ǜ<޴t3ɬۯy6VglŭM?ئV|=֕HqfKdۺ&92lZj d- tÄ:_K9m] -~@GCwVt
wuץsUo>5gW[kXbO	,5-Lu|Yf=6%5Ӥ  >};CFCCpVajFo0ԭ>|^U*kwĵ6nضrB wcOZGP/ܑ9|mp{YI3wz=Ds+ P?dBd|&
FAA!75E%	."oK8(P]me\|~v(x{X'T|
ϠZ`+%|QȈ-rT`N4xl)<8j<oE*nmmY],V~ʢG^T28Ei@G`ԀP)ϣn`}I6/r zK-",vȅ5w8,ڳDu{ņEDxosxށ}mYkl?Fv>y}9	:,Q4 $
 d:6pT܈t0+?ak 
܆pndxn
7Ho#o!v*3`ۺ&`Kuh
x᠎5ZDоs_{6OPKEیz|"}S+[AA
,''mי)}N#poe+f
M+Kd
lTm# wߡ	3XB@N!Jխ.OW]"?P0cSAٵ.sU93#*HH4DX\l+mvV#fح O
efl->|6ǧs\ޗ(B u Xd"VPYZ
`K".Ђ"qhQ8v4
e0=Nf{$ELG3#
O
LbkX[h:cW00h ;-(쫮E?g&*a88G}	J7Y-] o@Sp)>~L3*]
>8`Uz8݁s7cܶDX3e $9BiF=l?ᕯp+td-?18> q
m|-
A%C #H%~tUanOwG<(L CVLGFtfwgl_pH!
)B_ZHElyC% let+dA-ٍK;ft&>?0R1,tkJqBF~6 MLy8Ւѯ" Os VMmwl8j3ضF7"^9/k|Y(j;sRg$*0);=ݯ+1h4@ϠCs97PwP"v(2cWn-7Kt`D }f+CACl&6Y2+/wh&ǹO:67m9yg=ITㄿ!PԖpٞ>
HDF 	!q^pF@e$1J	5.(~@
\#*hkPUoȮ+ֵǺ=i3x@ *%F~0!FFL^lv?3ԃЭLlϡYu1",Y1HX}R\yM	i3q'"4&@;/TP?_Zdӱpn9߷WvJHZ=9]XV?s4r~m-ajkh_	{r\?/TgOM;1]p3"muh%RK]^-BcCR+q"yB&(18UV&#=am9_Vr 5uR@ H&(7lZE prJT-
F>GH

#'DT,"
r/13(4gSe2іHvξKe)O;RX9rhǁ:	}	aBR9jұwLB;ӌ0}U6[ۈ.drÕsl,FڮPHÂ5BVA	;6O`"wr̓-yPCNL"'S6]xXC
2@*ИƿI)*p;0鯧~Pa1y-)ulSni@!{`)aH0<2W2aBEEeP݈ 	7p
Cwe Oy
 aRp'{2(+HQp&yI`81QP1_B
GŶ)U;#h1uF,RuU;%)OagI/?v}H}yLN@
&f78еcv_%4`$M3'{iL톦	B@w4/k߫C1va	}czLuctJ6,qĄC|729s!px`q؞D'A/ @%
SdKɬt$\\z?ʦ
&pw*|\qwO!Šz6,,QvU*f5$K2c4 Cj2L4V})<PrBA>Z j7jjn")Ӈ͚}v]&p+YR6w, pSď%hyɈ?с̨ƣH>yr9iXMwnU9Y`
X/{R؀6
	8=SR
=o_S}zBB=w\+{S $JPmvBH? :8IBI:'I/Ջ4qz6|֡|G.`\&7KJLGΎՌ7pcT8@ANӿ~Ȣkm(R$% ȆAĎ<* fQuO~5*r7M\I6F#i҆1?ASfOŒ1^S1)at7Qڥ6z,ljrZh7NwLF4O?}tCh1k8ffRM3Nykkzc+8p*`0({0<|x%'&IfO(yx)u
j$Ob]T	fjS،dTeUTR$
5<7-4!2;@zT[ñoTCȾ&0
<S)7!l5
\NNFgM+2IĬ&&u	R,Db{[ɱ6+Z*-Tb5B}y!ɟ|BD\G%~kYt+7"T$k8
G<k!F}=&PRF|_wOR65kPl.н9>Q=G6MM!MǲP]JnųR<Mh{&fTBIq4Yh	0"X$!EAM&(	LpNciz"}v%ɞfE⬧gU14]a),n4z<Jj^3;캪.cАѦ
{M&i{9yW hO=-Ahbh:Hٙkz1!:.Ta'oNH}:
]6r\7g'RWb9fGsWrWf@UfJF$=|K<9!t"PMfM2Q*vVGɉ_:MxO~}NBgETkTa1 Ü'rBxeRQr6ÚGOlgHj&|8Y(!4䑀pNvBxPY9srbaT!lJeb?v z10e-l0)_2:MX|~Le Hdk?vs7dI4{|]ged&n?^QB{4uXM#]ǰQRk:OO?e]d:r/TR>gqX>=߀xڀU)9G_'KVS_WUDui S0چP'*&t0Cߎ5Bo)ۖshTeĚEE5&f H\	CB1|dUhx>GKoeXS/W<]

<fփ,~BO%TOʸ+wvY)5zpA}Լ<DT&R*VGGH$:@p묤]1Eht7)b#[(M0b<JlS<C/*t$ƥ 3"cĺ[{HњP"zwHa
""5ltFoxcrHg2/*Zgױu>ȧJMٱSy"Oө3ώ-1luɜzF7nT?ߨ᪝3}aGO4
t&?暽P/
ғ97F:<SJs""nӸ^Ql26np4$G}[l
H5<)Xl̖39-&'r
N+k;G 0J<rKZDoF
k[ML (cy6mٴĄSt͸bi8>v]yJLsbԒ&|ҿPȖ{I]Ro^4vsQc|Oo"FL|"#q@(\mNM\H5=] 0KZgx=|"k.;R皜 |ǈǚu$GjQ'ӅB)#5tI,cPKT玎8▏BʀB~z|P=Ũo?-7/-ҵ<|)0*'~xz9KZ{qdǰu"-e:ŊBvyg7ƖZ__<
<3y9pz1'ch|!V g*W]7
&P!J`R
<T"=RyMCQCdM[X7jSS@W0 >1f~ |wH|7^*y0t~uI:hቂ,_$/`K{RA6]
Px?<*cڑ >#>4DӾr{#
׾x8
-Q4j>Z: 9=,՛T-'!FI2FɉB=N#
*jz׵7'CpŐBXiE{VBɑ%bz)Pc>N 1
!CX}bYuwctOX|e]:~ǅۦŇ7Y(oh\.,pΐK2/rx)Ag\')v9}RM|rK4=4WSJqNۇ>hTһ;H`$Emx<NXWsgM@IvmTIlu&yFW0ūrrOcx; /]R]<+eVlt7I=.iGoI<iyR,l)²sx7=/:GOHA[mq͔vOm-Ie-,~чC.O|?LCP(*!Vm>JS
-􊕦"w%#6ݟZP7j	ɾY+ȹ
,eZȩZY|%|ROX̋Ru4d#黲n8ȿI}2uY\Dj	G[!@O/rLo~Rq%x?gA(L0`Qu@۫\Nؘ2ɚ 53U.V{2)xǬ&~Ϟb	BTg"
+tVCW$?Ɋ8AEsLm8UCC`4C#q^|Ra3ed,wFAVw~Wx,P_B#(%{!ܾ԰G2x,%ǗO<Z0N+|7k3#NR$Do}gYzj+YrN.	$zB,E:~-R\
rsp+bAW䉼:Q	{dz6|/qy&56;>߁LGZzL(sW2B@6c9ee-)JR_x{FG<O]'apOk⣉T:p]Sͅ h^bTPc^a)6 C*ÐdꀅtfJB C@M)ՈW` OF$C#ۣ
QF#Onw]<s4_=Ǹ+_.1|5د+Ȥ)r# a*Oucz2-!κJYs	ep)	
6zۘCR(=&Re8A_w>= 6 KzΌ+B٫kDK^%q7ρEO)abMğeu}z8iCtZ+]	?.Gƣ0">~RDHBP\0PK   dO\9V  e  7   org/mozilla/javascript/resources/Messages_fr.properties=kƑ+HDɺ 60r:g}P ;e9ĆC̴!lrkC|lCV3CVUW׻=(m[+i({عƖC/vc_⋮ŗ],;?nj(lE_u?1śq۸
vm}\\YYM|E
Eл8غ<<@AӍEeڢf(pxȘˮ?Om{e=ʓAz?^{mﱀ埇y~a [w@EXCו[/ߍS  \,xj쵽* 79X,fǅka#Hxo؉@(G<{1k]}pl۱}k

zhgH#o7#1峏˔y7Ƃ1I>w"a-wJ 2HX
Bpon2uކ'vga㊱̀!_̫+~3@MBb8 @c	eLVݹFؕ[3PxPT׏?HH\om5Tյ_ק}t;Lε7 ;m;x#!D²wccl/!Zڲ%$kEр|},ݗ,ݗ/
s:ن
oZhȵuSc'fЋf=p@2A+X-(Jp-{m7'ECd1qEDeN*8m	i2.e{Mg3l?!KԌށ؂9ў4di_X2H&f
ūo4Ȅēĵes
0:8fVƪAqKx!HqlvlҋĺLf(f4֖l
36iݏh<8'p'5{zexV"
Prio<ʒmÎAx` vk5KGhQY>¶žď%	-t\?~g(
}l;$(Y>@T϶VYp"o`s1 "7D_[ylDнT\ߴ0`Yam=R5lЕۚF	
XeT
<Q2Sߓ[fz"1Ͱ0jG` T WmAƠ%)Ws|WD$OƒC_z:C1>=J+~;8]O&
u?Ō@ {႐-ץug͎ZXhOW\id>/P9$
²Q+ӢsA~wGawI #t]ܔ;j˓}$߂Mc1	'jT[ʃňij!Oi!`
v'r	~Ncaa:@,?`/1LpJAMߛ@D>R!^[
¢S
:Lm@rXe<^ 1fe^hZH
&_`0ld2`|z/BU!х
l !.Y(0[6RRU2b]~]Iΐ7L<ǔ-*.ELͽ`kA7>Ɩ6-§S$C R|RoWcpn?Wh^e"З4b?15A^/XBBY)H ;Dw=RqC=C ;,e\`%
'5hK<oJShIfbW12`q=|bdOMN>, Zc&Xgefv5%ytSXql|FgbvmQ_Z)rp[/t&f0>: G9
&."d]~;޼zp7zo6՜bakWZ yGqr
Akc_$	7vy}50n*^	B(0[Q(ANXSry&Q'w*z\ww}wW~@#).!)W^DIXYNml@f b@##2h&)wY m8V&]b"u]C2wF@\-҄2
	RLTX5}%,@5$ WkC42`.gh
ToaG3Tho\Htk

	=E+5AbCwV'Nw%2ʛw2(Vz50SI.UQ'ֱ9d^
DY!vXсvAS@l)@qG+j -m[rM2V?8/Rd-S,ݫx5
9NUqh8m)JFI?PeC
J_;\)!G")jڐ/G l'3#UIXVmX]O!d/ʩ+T4BʌGR\(Uz=F*Q5~%a"IIu6 ݵ6͒	ˈ2!b!}tmme,VE1fP@+ų}%Cben@D|lUBoyby;ލFg)ΰ,U|r<@o{X %;`KbYZ݈dkG[v1e05]߽jLi.=X0*}]tƒmlܾ5n+CrZON4o ulw{jav:]6aBA<N#$ԋ_wcj%bu	 &p
)}g`򢩼x+O5-֔~8KQd\2x:` 5ܺ[t\YuHO0C8wՀm|qhkPzaBNz;~<^#3!6fy"}(+:%΁ߟXqqADv	ŭA ةqA3cѾf#0`Xc<%-8{rϻnAtE\Hx*7@WDAVNCj Mh.,CLpHYn6xSgOY
}s'Wayb4(yƅH>A(
HUt
̙vis"Dka]NH`YbMVhТf
	| R)6ZkFHLɈ! ؁IdQ~3pfUf,:C9uzFmϋ]"Uay`?9-WPiPOy	Tm5\Zj#,lXdv߂}<h"k?.|fm_hq(z_ٺt
Fv<$$T7gc,.'lb ʢC:]H=򁉪1&Oę8,h0:2ߚПO(tb|ZV!ی ߹4M$fĹAnon65]5SZ*`G*k] q׍O =9ڻp("GUjs8 P%i` ^TNfho[KYmx~
Ɗ[#5|\a¤[(A5KFƗUl
Ay__cGiKʅD>]2ъZaxfeЉIKjk 8`,0al|KK^4іg(rTP|RgC٘)630ZO@` ƽ4`P۬'aVE)7ܯ5tFO5u[A dR](m^>y$XۧZ kP?[jEt9خ3WnՎq 2daxV;5P!bo"?½h&mow_\*| @*D%wj!Dʬ|Vg˙t9䉧\XAt5
?I$x^C	(m>Dp H|T0H*˫굳MF0QD;̆i佞Z\Y?\93oFxH#7YF-Ӈh _|l c[arΚGVi@+<	۹0KF)[˹Uo Ƌ\0xn`iYDY!c ļrHA*Z[xq<σK\犦MziǗӠ΀ħfCJ"4:p
:ZEjth=<vPCpC-)tTeG~-jggSaeoō-C`zh<S4C9wS"Y<G@xJC86
=d!xOWj?Җ(za1_TT4~B7id=˪myy$+
YZwi:tAEyW]C $JPh2䭏jȠt_9_93H}q:!vIШ3 [&V-DM-F z	.ޅ@F&ՁU(+ZǴŬc3ar~T
{])b:Ιؚ!5w"HT_k6T
4PdM)0
ߘԜ|Go<y"Ui奡`ثs>ʄd-a
@Kj8SgVJG$D.M|ӧW"UgkF8O3T@Yt NMM_h'Ki #}v^c>ii+
dg݃qpqtL k~$ Rw!3$J.1Y|h-
ӛ2t
V`=HL5K-ɠR,A)x>Nav\~װQ)ϹfΊPgƴO.LiEIs0ԅS%LeFW31@"L܍$!Tws>f[əhNW-MݍF|ˣP<pQpewrlw\A`̞Hfcì~&BWBU6(Gu LMЗNuEYg_aV/h9$R`K-ƼC]Z5o}g .TX]urNcW]ѓnMfTMDd+:uM7hDn8SB\-ރQ)TPỒ=0MoX'pta1m^{W;{ejgo1m~ ?|: 70E;2+˒m;|vs0LB]fvn6!2ǯ|
~@39g:T(n@߼{>0'"o!B:7 =Q]˕ʍV_Ү>l-'DkדH<Se<p[ô85{ o1;> QתlteF<7|R:68a'XOYN##v2d>[
Vg	[; t[ 1۽~֘[Ʊ:NQZ<qkp4!p ;
$\vyo8<m:SkRd|,@ßM:ߵD.c͡Q85">Sj.ŷϋW/Q<+P-D@CmQ=[nlqN(ǫU+:F 5s0eqӕh{{&-q|i7x3
D6$=]֭ 
4T{m.cZxwtqd6Mn
{õ(uʀpFFm2@vsG_sա=BWGݒc*Znc2I	:KI'oRgRZm/^˹RէEӅ9s'.VśMR
:~<	AyeɦE&NZEep6<%4f\`*얅DjI ;#o9Xj.]%l".vJ̲xHhb	iU"x.+̬a@/!8\E>@p4![l f6=g&W,<G8QGАZRQ1:
I=P|nNQ7<ܒHBXmwzm,~Gm|QI{ob`RۏʥF^)"Y&c"ÉW)cf]pᚮ0hE"B6sX s?*[+\kHb4R%l]iD%%^g%wwldE6I|PFqp+߯AF,(VZJ/>#.6V_G::QX|o,aRKށjDñ
ƶnUJVMT'_*8,)*r"Wڱm=Vv#iF%%#XW4fW1{<F/i`|M#oPu>JQ 	
vMoRsR{okvۭwynvbBX˥sHi	
~C:+7
Ot"qs:YHDh
Yp){re*4a>F7/cnS j]5W.Eʾ-i5Ueή\PK   dO\           	          A    META-INF/PK   dO\4㿎r                 )   META-INF/MANIFEST.MFPK   dO\                     A   org/PK   dO\                     A   org/mozilla/PK   dO\                     A  org/mozilla/classfile/PK   dO\(w3?  
  ,           S  org/mozilla/classfile/FieldOrMethodRef.classPK   dO\C  
  &           U  org/mozilla/classfile/SuperBlock.classPK   dO\     +             org/mozilla/classfile/ClassFileMethod.classPK   dO\hce    3             org/mozilla/classfile/ClassFileWriter$MHandle.classPK   dO\q    :             org/mozilla/classfile/ClassFileWriter$BootstrapEntry.classPK   dO\,i  n  D             org/mozilla/classfile/ClassFileWriter$ClassFileFormatException.classPK   dO\U&  I  9           W  org/mozilla/classfile/ClassFileWriter$StackMapTable.classPK   dO\1cC  +  (           ?  org/mozilla/classfile/ConstantPool.classPK   dO\-	  z  $           *T  org/mozilla/classfile/ByteCode.classPK   dO\~O  .  )           Y^  org/mozilla/classfile/ConstantEntry.classPK   dO\F  c  /           a  org/mozilla/classfile/ExceptionTableEntry.classPK   dO\{  a  *           {c  org/mozilla/classfile/ClassFileField.classPK   dO\|~    $           f  org/mozilla/classfile/TypeInfo.classPK   dO\+HV    +           s  org/mozilla/classfile/ClassFileWriter.classPK   dO\                     A  org/mozilla/javascript/PK   dO\:OE<  c	  4             org/mozilla/javascript/InterpreterData$Builder.classPK   dO\    +           ^  org/mozilla/javascript/SecureCaller$1.classPK   dO\I  D  4             org/mozilla/javascript/Interpreter$DoIntNumber.classPK   dO\w&`    8             org/mozilla/javascript/AccessorSlot$FunctionSetter.classPK   dO\3^$	  1  7           o  org/mozilla/javascript/NativePromise$ReactionType.classPK   dO\ͺ    6           L  org/mozilla/javascript/ThreadSafeEmbeddedSlotMap.classPK   dO\F  >  .           4  org/mozilla/javascript/JavaMembers_jdk11.classPK   dO\#    7           2  org/mozilla/javascript/Interpreter$DoDelPropSuper.classPK   dO\1+c    4             org/mozilla/javascript/Interpreter$DoScopeSave.classPK   dO\nP^     G             org/mozilla/javascript/ArrayLikeAbstractOperations$LengthAccessor.classPK   dO\.!8\  	  5             org/mozilla/javascript/IteratorLikeIterable$Itr.classPK   dO\H@1  e  )             org/mozilla/javascript/BaseFunction.classPK   dO\q    1           ( org/mozilla/javascript/Interpreter$DoEquals.classPK   dO\]Uc  s  1           + org/mozilla/javascript/EmbeddedSlotMap$Iter.classPK   dO\{]h  C  ;           >. org/mozilla/javascript/Interpreter$DoClosureStatement.classPK   dO\Ӕw  w  5           0 org/mozilla/javascript/Interpreter$DoCatchScope.classPK   dO\qHP    0           4 org/mozilla/javascript/NativeProxy$Revoker.classPK   dO\O2    Q           7 org/mozilla/javascript/AbstractEcmaStringOperations$NamedCaptureReplacement.classPK   dO\                     A<< org/mozilla/javascript/regexp/PK   dO\\    1           z< org/mozilla/javascript/regexp/CompilerState.classPK   dO\!{e)    4           ? org/mozilla/javascript/regexp/RegExpLoaderImpl.classPK   dO\S    -           
A org/mozilla/javascript/regexp/SubString.classPK   dO\y  m  /           lC org/mozilla/javascript/regexp/REProgState.classPK   dO\e/  +  4           E org/mozilla/javascript/regexp/NativeRegExpCtor.classPK   dO\    >           V org/mozilla/javascript/regexp/NativeRegExp$ClassContents.classPK   dO\v   {  0           ~X org/mozilla/javascript/regexp/REGlobalData.classPK   dO\]&    8           L[ org/mozilla/javascript/regexp/NativeRegExpCallable.classPK   dO\/;    >           ] org/mozilla/javascript/regexp/NativeRegExpStringIterator.classPK   dO\]P  +  -           _c org/mozilla/javascript/regexp/RECharSet.classPK   dO\TIO    ;           e org/mozilla/javascript/regexp/NativeRegExp$ExecResult.classPK   dO\	o  U  A           h org/mozilla/javascript/regexp/NativeRegExp$ParserParameters.classPK   dO\b    *           pj org/mozilla/javascript/regexp/RENode.classPK   dO\e.Fх  g  ,           l org/mozilla/javascript/regexp/GlobData.classPK   dO\*LZ     3           n org/mozilla/javascript/regexp/REBackTrackData.classPK   dO\U!  D  .           q org/mozilla/javascript/regexp/RegExpImpl.classPK   dO\D8ڸ  [M 0           t org/mozilla/javascript/regexp/NativeRegExp.classPK   dO\W%    <           z5 org/mozilla/javascript/regexp/NativeRegExpInstantiator.classPK   dO\4U  '  5           7 org/mozilla/javascript/regexp/UnicodeProperties.classPK   dO\bY    .           yK org/mozilla/javascript/regexp/RECompiled.classPK   dO\dÄ4    /           N org/mozilla/javascript/Interpreter$DoTrue.classPK   dO\  t  A           P org/mozilla/javascript/ScriptableObject$PropDescValueSetter.classPK   dO\    B           R org/mozilla/javascript/Interpreter$DoTemplateLiteralCallSite.classPK   dO\Rf    /            U org/mozilla/javascript/Interpreter$DoIfNE.classPK   dO\^b  =  ;           W org/mozilla/javascript/ThreadSafeCompoundOperationMap.classPK   dO\Z<  	  T           I^ org/mozilla/javascript/AbstractEcmaStringOperations$OneDigitCaptureReplacement.classPK   dO\k    )           b org/mozilla/javascript/JSCodeResume.classPK   dO\npt  
  5           e org/mozilla/javascript/Interpreter$DoArithmetic.classPK   dO\IJR    (           k org/mozilla/javascript/TokenStream.classPK   dO\6q    6            org/mozilla/javascript/Interpreter$DoClosureExpr.classPK   dO\E
  h
  2            org/mozilla/javascript/ImplementationVersion.classPK   dO\z:y  !  ,            org/mozilla/javascript/NativeConsole$1.classPK   dO\  p
  <            org/mozilla/javascript/SlotMapOwner$SingleEntrySlotMap.classPK   dO\K  w  E            org/mozilla/javascript/NativeGenerator$GeneratorClosedException.classPK   dO\ns8    (            org/mozilla/javascript/JavaAdapter.classPK   dO\T     H            org/mozilla/javascript/ArrayLikeAbstractOperations$ReduceOperation.classPK   dO\`6  
  '            org/mozilla/javascript/LambdaSlot.classPK   dO\N6#   =  /            org/mozilla/javascript/Parser$Transformer.classPK   dO\: B    (            org/mozilla/javascript/RegExpProxy.classPK   dO\OM8գ  }  )            org/mozilla/javascript/Synchronizer.classPK   dO\e    :            org/mozilla/javascript/NewLiteralStorage$NoInference.classPK   dO\N    :            org/mozilla/javascript/Interpreter$CompilationResult.classPK   dO\#=ď  U  4            org/mozilla/javascript/Interpreter$DoObjectLit.classPK   dO\R;U    1           ;! org/mozilla/javascript/Interpreter$NewState.classPK   dO\`  "  #           " org/mozilla/javascript/JSCode.classPK   dO\
t  (5  .           Z$ org/mozilla/javascript/LambdaConstructor.classPK   dO\           !          A?4 org/mozilla/javascript/serialize/PK   dO\s    K           4 org/mozilla/javascript/serialize/ScriptableOutputStream$PendingLookup.classPK   dO\`&  p  <           6 org/mozilla/javascript/serialize/ScriptableInputStream.classPK   dO\ 59<	    =           .< org/mozilla/javascript/serialize/ScriptableOutputStream.classPK   dO\1  L  6           E org/mozilla/javascript/Interpreter$DoShortNumber.classPK   dO\ԂE    8           H org/mozilla/javascript/Interpreter$DoShallowEquals.classPK   dO\B  P
  T           K org/mozilla/javascript/AbstractEcmaStringOperations$TwoDigitCaptureReplacement.classPK   dO\                      AP org/mozilla/javascript/commonjs/PK   dO\           '          A
Q org/mozilla/javascript/commonjs/module/PK   dO\wH U  S)  4           QQ org/mozilla/javascript/commonjs/module/Require.classPK   dO\oə  z  ;           _c org/mozilla/javascript/commonjs/module/RequireBuilder.classPK   dO\           0          Aef org/mozilla/javascript/commonjs/module/provider/PK   dO\	]v    G           f org/mozilla/javascript/commonjs/module/provider/ParsedContentType.classPK   dO\]B    W           j org/mozilla/javascript/commonjs/module/provider/StrongCachingModuleScriptProvider.classPK   dO\0\z0    U           m org/mozilla/javascript/commonjs/module/provider/SoftCachingModuleScriptProvider.classPK   dO\x/q    M           v org/mozilla/javascript/commonjs/module/provider/UrlModuleSourceProvider.classPK   dO\*  I  h           { org/mozilla/javascript/commonjs/module/provider/CachingModuleScriptProviderBase$CachedModuleScript.classPK   dO\6~  P  U           ׅ org/mozilla/javascript/commonjs/module/provider/CachingModuleScriptProviderBase.classPK   dO\Xa    B           Ȏ org/mozilla/javascript/commonjs/module/provider/ModuleSource.classPK   dO\<\i$
  (  Z            org/mozilla/javascript/commonjs/module/provider/UrlModuleSourceProvider$URLValidator.classPK   dO\Ɋu  s  Z            org/mozilla/javascript/commonjs/module/provider/DefaultUrlConnectionExpiryCalculator.classPK   dO\/p'7     Y            org/mozilla/javascript/commonjs/module/provider/UrlConnectionSecurityDomainProvider.classPK   dO\:T    O            org/mozilla/javascript/commonjs/module/provider/MultiModuleScriptProvider.classPK   dO\L      S            org/mozilla/javascript/commonjs/module/provider/UrlConnectionExpiryCalculator.classPK   dO\z(:  
  N            org/mozilla/javascript/commonjs/module/provider/ModuleSourceProviderBase.classPK   dO\^]    J            org/mozilla/javascript/commonjs/module/provider/ModuleSourceProvider.classPK   dO\UC%V  b	  e            org/mozilla/javascript/commonjs/module/provider/SoftCachingModuleScriptProvider$ScriptReference.classPK   dO\lzTd    9           o org/mozilla/javascript/commonjs/module/ModuleScript.classPK   dO\A     A           * org/mozilla/javascript/commonjs/module/ModuleScriptProvider.classPK   dO\}    8           h org/mozilla/javascript/commonjs/module/ModuleScope.classPK   dO\EZ%  P  )            org/mozilla/javascript/NativeGlobal.classPK   dO\$>  %
  6            org/mozilla/javascript/IRFactory$AstNodePosition.classPK   dO\CS2  o  (           m org/mozilla/javascript/JavaMembers.classPK   dO\*Ү  u  5            org/mozilla/javascript/Interpreter$DoPropIncDec.classPK   dO\Q    %            org/mozilla/javascript/Function.classPK   dO\C  
  4            org/mozilla/javascript/NativeObject$EntrySet$1.classPK   dO\4T  \  S             org/mozilla/javascript/AbstractEcmaStringOperations$FromMatchToEndReplacement.classPK   dO\dX  K  (           # org/mozilla/javascript/MemberBox$1.classPK   dO\qm>M  1  ,           l' org/mozilla/javascript/NodeTransformer.classPK   dO\M8    7           A org/mozilla/javascript/Interpreter$DoGetPropSuper.classPK   dO\Gg\<  &  .           D org/mozilla/javascript/Interpreter$DoOne.classPK   dO\[Du4    +           gG org/mozilla/javascript/Kit$ComplexKey.classPK   dO\uN  7  .           I org/mozilla/javascript/Interpreter$DoDup.classPK   dO\Ak
  !  7           ~L org/mozilla/javascript/Interpreter$DoCallByteCode.classPK   dO\
2
    +           xZ org/mozilla/javascript/NativeGlobal$3.classPK   dO\݊3H    1           \ org/mozilla/javascript/Interpreter$DoSetRef.classPK   dO\!c    >           b` org/mozilla/javascript/Interpreter$DoPropAndThisOptional.classPK   dO\5    %           !d org/mozilla/javascript/TopLevel.classPK   dO\ZM    L           Sl org/mozilla/javascript/AbstractEcmaStringOperations$LiteralReplacement.classPK   dO\A'  
  +           
o org/mozilla/javascript/SecureCaller$2.classPK   dO\!    ?           s org/mozilla/javascript/SecureCaller$SecureClassLoaderImpl.classPK   dO\Tݕs    ,           `v org/mozilla/javascript/NativeGenerator.classPK   dO\   	
  4            org/mozilla/javascript/Interpreter$DoGenerator.classPK   dO\[w  S  5           o org/mozilla/javascript/Interpreter$DoEscXMLText.classPK   dO\y(   |  ;           } org/mozilla/javascript/Parser$CurrentPositionReporter.classPK   dO\p    .           ͌ org/mozilla/javascript/Interpreter$DoNew.classPK   dO\P	~    2            org/mozilla/javascript/TopLevel$NativeErrors.classPK   dO\|D    1           { org/mozilla/javascript/Interpreter$DoSpread.classPK   dO\a    2            org/mozilla/javascript/Interpreter$DoIndexCn.classPK   dO\p=
    ,           X org/mozilla/javascript/EmbeddedSlotMap.classPK   dO\dwώ    -           \ org/mozilla/javascript/LockAwareSlotMap.classPK   dO\Cf	!  	  &           5 org/mozilla/javascript/EcmaError.classPK   dO\    *            org/mozilla/javascript/NativeArray$1.classPK   dO\"J
_  p  *            org/mozilla/javascript/BoundFunction.classPK   dO\Mg  f  /           Y org/mozilla/javascript/Interpreter$DoDup2.classPK   dO\e    /           
 org/mozilla/javascript/Interpreter$DoGoto.classPK   dO\|Q]   6  *           M org/mozilla/javascript/ContextAction.classPK   dO\3#ݩ     *           B org/mozilla/javascript/Initializable.classPK   dO\H+0    8           3 org/mozilla/javascript/Interpreter$DoLeaveDotQuery.classPK   dO\6(݋    7            org/mozilla/javascript/Interpreter$GeneratorState.classPK   dO\    '            org/mozilla/javascript/ClassCache.classPK   dO\v@  Z	  0            org/mozilla/javascript/Interpreter$DoYield.classPK   dO\+p    1            org/mozilla/javascript/Interpreter$DoGetRef.classPK   dO\e  #J  /           G org/mozilla/javascript/IdScriptableObject.classPK   dO\sY    1            org/mozilla/javascript/Interpreter$DoNumber.classPK   dO\k)(u4  @  :            org/mozilla/javascript/Interpreter$DoLiteralNewArray.classPK   dO\1F    =           ,  org/mozilla/javascript/Interpreter$DoUnsignedRightShift.classPK   dO\2
    *            org/mozilla/javascript/NativeBoolean.classPK   dO\xH  E  1           
 org/mozilla/javascript/DefaultErrorReporter.classPK   dO\J   y  B            org/mozilla/javascript/ScriptableObject$LambdaGetterFunction.classPK   dO\v0    !            org/mozilla/javascript/DToA.classPK   dO\R   .  (           " org/mozilla/javascript/RefCallable.classPK   dO\>    a  *           # org/mozilla/javascript/ErrorReporter.classPK   dO\p!'    I           $ org/mozilla/javascript/AbstractEcmaObjectOperations$INTEGRITY_LEVEL.classPK   dO\a8]    +           ' org/mozilla/javascript/ContextFactory.classPK   dO\Sh    0           Z4 org/mozilla/javascript/JavaScriptException.classPK   dO\~    2           : org/mozilla/javascript/Interpreter$DoRefName.classPK   dO\/#    7           g= org/mozilla/javascript/Interpreter$DoSetConstVar1.classPK   dO\    ;           A org/mozilla/javascript/Interpreter$DoDefaultNamespace.classPK   dO\ìSUw  T  =           E org/mozilla/javascript/NativePromise$PromiseAllResolver.classPK   dO\Y
q9    )           Q org/mozilla/javascript/BeanProperty.classPK   dO\֕    *           kS org/mozilla/javascript/Interpreter$1.classPK   dO\Uf2  )  &           T org/mozilla/javascript/Context$1.classPK   dO\g     +           W org/mozilla/javascript/NativeGlobal$1.classPK   dO\W    *           kY org/mozilla/javascript/Interpreter$3.classPK   dO\    0           Z org/mozilla/javascript/Interpreter$DoSuper.classPK   dO\e_g    /           ] org/mozilla/javascript/Interpreter$DoName.classPK   dO\}(n    5           ` org/mozilla/javascript/Interpreter$DoLocalClear.classPK   dO\8  ^  @           hc org/mozilla/javascript/SlotMapOwner$ThreadSafeEmptySlotMap.classPK   dO\ߴ  
  9           h org/mozilla/javascript/AccessorSlot$MemberBoxSetter.classPK   dO\JN.
  K  1           m org/mozilla/javascript/NativeJavaTopPackage.classPK   dO\kh    /           Px org/mozilla/javascript/Interpreter$DoIfEQ.classPK   dO\l?  I  7           { org/mozilla/javascript/Interpreter$DoValueAndThis.classPK   dO\vZ:  	  7           x~ org/mozilla/javascript/Interpreter$DoGetElemSuper.classPK   dO\T<f    5            org/mozilla/javascript/Interpreter$DoRegBigInt1.classPK   dO\P    4           ] org/mozilla/javascript/Interpreter$DoRegIndex2.classPK   dO\C=n  
  9            org/mozilla/javascript/ScriptRuntime$ThrowTypeError.classPK   dO\8    0           Č org/mozilla/javascript/NativeObject$KeySet.classPK   dO\qOX  g  !           J org/mozilla/javascript/Slot.classPK   dO\F    &            org/mozilla/javascript/Undefined.classPK   dO\x3w  :  /            org/mozilla/javascript/JSCode$NullBuilder.classPK   dO\ۄK    .            org/mozilla/javascript/Node$NodeIterator.classPK   dO\                     A org/mozilla/javascript/dtoa/PK   dO\R    .            org/mozilla/javascript/dtoa/Decimal$Mode.classPK   dO\tF
    )            org/mozilla/javascript/dtoa/Decimal.classPK   dO\bM
	    2           L org/mozilla/javascript/dtoa/DecimalFormatter.classPK   dO\@pB  U  +           8 org/mozilla/javascript/dtoa/MathUtils.classPK   dO\*	    1            org/mozilla/javascript/dtoa/DoubleFormatter.classPK   dO\`^mf  6  <           U org/mozilla/javascript/PolicySecurityController$Loader.classPK   dO\y<    '            org/mozilla/javascript/StackStyle.classPK   dO\(0    :           	 org/mozilla/javascript/Interpreter$InterpreterResult.classPK   dO\šX  !  1           S org/mozilla/javascript/Parser$ConditionData.classPK   dO\d,Vc    5            org/mozilla/javascript/Interpreter$DoRegString1.classPK   dO\Jn    9            org/mozilla/javascript/ES6Generator$YieldStarResult.classPK   dO\U    D           u org/mozilla/javascript/NativeArrayIterator$ARRAY_ITERATOR_TYPE.classPK   dO\)H
    5            org/mozilla/javascript/PolicySecurityController.classPK   dO\a>\9  	  7             org/mozilla/javascript/Interpreter$DoSetElemSuper.classPK   dO\:T  &  1           # org/mozilla/javascript/Interpreter$DoSetVar.classPK   dO\GC  =
  +           & org/mozilla/javascript/LambdaFunction.classPK   dO\
 6  w  0           , org/mozilla/javascript/Interpreter$DoDebug.classPK   dO\l::A     3           . org/mozilla/javascript/Interpreter$DebugScope.classPK   dO\NT&     ?           +6 org/mozilla/javascript/IdScriptableObject$PrototypeValues.classPK   dO\zb   Q  :           qF org/mozilla/javascript/ScriptRuntime$MessageProvider.classPK   dO\v    0           G org/mozilla/javascript/SecurityUtilities$1.classPK   dO\
N  B  1           I org/mozilla/javascript/NativeStringIterator.classPK   dO\/  H  &           M org/mozilla/javascript/Hashtable.classPK   dO\7|v  &  2           V org/mozilla/javascript/Interpreter$DoDelName.classPK   dO\n-	    =           Z org/mozilla/javascript/NativePromise$PromiseAnyRejector.classPK   dO\;W  :  0           f org/mozilla/javascript/NativePromise$State.classPK   dO\9AP    4           i org/mozilla/javascript/Interpreter$DoRegIndex4.classPK   dO\V>    3           k org/mozilla/javascript/Interpreter$DoStringCn.classPK   dO\                     A?n org/mozilla/javascript/config/PK   dO\k    /           }n org/mozilla/javascript/config/RhinoConfig.classPK   dO\h      9           t org/mozilla/javascript/config/RhinoPropertiesLoader.classPK   dO\+  t  3           u org/mozilla/javascript/config/RhinoProperties.classPK   dO\3l    "            org/mozilla/javascript/Icode.classPK   dO\&r  
  D            org/mozilla/javascript/NullabilityDetector$NullabilityAccessor.classPK   dO\Rh    2           Җ org/mozilla/javascript/Interpreter$DoIfEQPop.classPK   dO\wV    9            org/mozilla/javascript/NativeConsole$ConsolePrinter.classPK   dO\;  #  )            org/mozilla/javascript/NativeScript.classPK   dO\U^(    0            org/mozilla/javascript/Interpreter$DoUndef.classPK   dO\3  	  0            org/mozilla/javascript/AccessorSlot$Setter.classPK   dO\IUP    .           ` org/mozilla/javascript/SecurityUtilities.classPK   dO\qd*  U  .            org/mozilla/javascript/Token$CommentType.classPK   dO\EQK    '            org/mozilla/javascript/NativeDate.classPK   dO\7@  2  2            org/mozilla/javascript/Interpreter$DoGetVar1.classPK   dO\օ    8            org/mozilla/javascript/Interpreter$DoLiteralKeySet.classPK   dO\%
    ,           
 org/mozilla/javascript/ContextListener.classPK   dO\@M    4           Y org/mozilla/javascript/Interpreter$DoRefIncDec.classPK   dO\o[H[  0'  -           
 org/mozilla/javascript/InterfaceAdapter.classPK   dO\1ۛ6    ,           B org/mozilla/javascript/Hashtable$Entry.classPK   dO\|  n
  $            org/mozilla/javascript/SlotMap.classPK   dO\K'  (  /           " org/mozilla/javascript/BuiltInSlot$Getter.classPK   dO\hp    &           $ org/mozilla/javascript/UniqueTag.classPK   dO\djM  i  >           q( org/mozilla/javascript/BuiltInSlot$PropDescriptionSetter.classPK   dO\Io    2           * org/mozilla/javascript/NativeObject$KeySet$1.classPK   dO\|    2           - org/mozilla/javascript/NativeObject$EntrySet.classPK   dO\                     AH0 org/mozilla/javascript/debug/PK   dO\    -           0 org/mozilla/javascript/debug/DebugFrame.classPK   dO\\$      3           2 org/mozilla/javascript/debug/DebuggableObject.classPK   dO\=  a  3           3 org/mozilla/javascript/debug/DebuggableScript.classPK   dO\t>    +           ,5 org/mozilla/javascript/debug/Debugger.classPK   dO\41  +  6           6 org/mozilla/javascript/Interpreter$DoIfNullUndef.classPK   dO\|OC    *           9 org/mozilla/javascript/CodeGenerator.classPK   dO\p0&  c  *           \} org/mozilla/javascript/NativePromise.classPK   dO\tP4  )
  .           ԣ org/mozilla/javascript/TopLevel$Builtins.classPK   dO\=<qx  p  /           T org/mozilla/javascript/NativeContinuation.classPK   dO\(Sw  3
  <           j org/mozilla/javascript/NativeGlobal$EvalLambdaFunction.classPK   dO\J1u  p
  0           ; org/mozilla/javascript/Interpreter$DoThrow.classPK   dO\Ć    5            org/mozilla/javascript/Interpreter$DoLineChange.classPK   dO\9#K  
  (            org/mozilla/javascript/MemberBox$2.classPK   dO\:'C  >
  7            org/mozilla/javascript/PolicySecurityController$3.classPK   dO\}M9    4            org/mozilla/javascript/Interpreter$DoRefNsName.classPK   dO\)d    *           4 org/mozilla/javascript/NativeArray$2.classPK   dO\/~E  s  8            org/mozilla/javascript/Parser$PerFunctionVariables.classPK   dO\    <            org/mozilla/javascript/Parser$DestructuringArrayResult.classPK   dO\I    1            org/mozilla/javascript/Interpreter$DoRegExp.classPK   dO\#-8-x  p
  @            org/mozilla/javascript/NativeJavaMap$NativeJavaMapIterator.classPK   dO\D  !  &            org/mozilla/javascript/Arguments.classPK   dO\~  O  <            org/mozilla/javascript/NativeProxy$NativeProxyFunction.classPK   dO\7؄y)    1             org/mozilla/javascript/Interpreter$DoString.classPK   dO\`P5i  w  3            org/mozilla/javascript/Interpreter$DoNegative.classPK   dO\e  '
  4           R org/mozilla/javascript/Interpreter$DoVarIncDec.classPK   dO\@?    8            org/mozilla/javascript/Interpreter$DoGetPropNoWarn.classPK   dO\Ҫ    .           S org/mozilla/javascript/NewLiteralStorage.classPK   dO\ 
    (           M org/mozilla/javascript/ES6Iterator.classPK   dO\&p׿  7  2            org/mozilla/javascript/Interpreter$CallFrame.classPK   dO\~    *           2 org/mozilla/javascript/Interpreter$2.classPK   dO\|     %           
4 org/mozilla/javascript/Callable.classPK   dO\    8           4 org/mozilla/javascript/Interpreter$DoEnterDotQuery.classPK   dO\  3  -           ?8 org/mozilla/javascript/NativeJavaMethod.classPK   dO\aظ  y  /           `Q org/mozilla/javascript/ES6Generator$State.classPK   dO\<rW5    4           }T org/mozilla/javascript/Interpreter$DoEnterWith.classPK   dO\           !          AW org/mozilla/javascript/optimizer/PK   dO\/uu_    0           
X org/mozilla/javascript/optimizer/OptJSCode.classPK   dO\Ny  f  0           Y org/mozilla/javascript/optimizer/Optimizer.classPK   dO\zf    @           $h org/mozilla/javascript/optimizer/OptJSFunctionCode$Builder.classPK   dO\s
Ia  <  1           m org/mozilla/javascript/optimizer/Signatures.classPK   dO\!  9' 2           q org/mozilla/javascript/optimizer/BodyCodegen.classPK   dO\t`  	  6           g org/mozilla/javascript/optimizer/ParsedOperation.classPK   dO\
	  @  7            org/mozilla/javascript/optimizer/ConsStringLinker.classPK   dO\{'J  b
  5           	 org/mozilla/javascript/optimizer/RhinoOperation.classPK   dO\FPQ"3  |{  .           $
	 org/mozilla/javascript/optimizer/Codegen.classPK   dO\@dH	    3           @	 org/mozilla/javascript/optimizer/StringLinker.classPK   dO\0I9  Y  4           J	 org/mozilla/javascript/optimizer/BooleanLinker.classPK   dO\
    3           }R	 org/mozilla/javascript/optimizer/Bootstrapper.classPK   dO\l    5           u`	 org/mozilla/javascript/optimizer/OptTransformer.classPK   dO\e   y  Q           Nf	 org/mozilla/javascript/optimizer/BodyCodegen$ExceptionManager$ExceptionInfo.classPK   dO\dRc    >           h	 org/mozilla/javascript/optimizer/OptJSScriptCode$Builder.classPK   dO\lo    5           n	 org/mozilla/javascript/optimizer/RhinoNamespace.classPK   dO\:   F  8           ^q	 org/mozilla/javascript/optimizer/OptJSFunctionCode.classPK   dO\}v-    8           s	 org/mozilla/javascript/optimizer/OptJSCode$Builder.classPK   dO\)    5           7w	 org/mozilla/javascript/optimizer/Block$FatBlock.classPK   dO\  #  4           +{	 org/mozilla/javascript/optimizer/DefaultLinker.classPK   dO\-     3           	 org/mozilla/javascript/optimizer/DoubleLinker.classPK   dO\
Ҟ  6  1           	 org/mozilla/javascript/optimizer/OptRuntime.classPK   dO\6Sa  ;   4           	 org/mozilla/javascript/optimizer/IntegerLinker.classPK   dO\VnU  88  4           s	 org/mozilla/javascript/optimizer/ClassCompiler.classPK   dO\5#f2  `  8           	 org/mozilla/javascript/optimizer/NativeArrayLinker.classPK   dO\b  6  6           -	 org/mozilla/javascript/optimizer/OptJSScriptCode.classPK   dO\hm    ;           	 org/mozilla/javascript/optimizer/OptJSCode$BuilderEnv.classPK   dO\@NBo    @           t	 org/mozilla/javascript/optimizer/Codegen$CompilationResult.classPK   dO\.Ls  D  7           A	 org/mozilla/javascript/optimizer/ConstAwareLinker.classPK   dO\ǻ.    C           M	 org/mozilla/javascript/optimizer/BodyCodegen$ExceptionManager.classPK   dO\QOG    E           	 org/mozilla/javascript/optimizer/BodyCodegen$FinallyReturnPoint.classPK   dO\`  g*  ,           	 org/mozilla/javascript/optimizer/Block.classPK   dO\~NEn    @           \
 org/mozilla/javascript/optimizer/OptRuntime$GeneratorState.classPK   dO\7G    9           (

 org/mozilla/javascript/optimizer/BaseFunctionLinker.classPK   dO\x    6           
 org/mozilla/javascript/optimizer/OptFunctionNode.classPK   dO\  >  &           
 org/mozilla/javascript/NativeMap.classPK   dO\K'ֶ  w  9           0
 org/mozilla/javascript/Interpreter$ContinuationJump.classPK   dO\
U  
  .           '4
 org/mozilla/javascript/Interpreter$DoAdd.classPK   dO\TF    ;           :
 org/mozilla/javascript/Interpreter$DoShallowNotEquals.classPK   dO\e'N!  ?  *           >
 org/mozilla/javascript/NativeConsole.classPK   dO\+Oh  x  0           kY
 org/mozilla/javascript/ClassCache$CacheKey.classPK   dO\<  #  F           !\
 org/mozilla/javascript/SlotMapOwner$ThreadSafeSingleEntrySlotMap.classPK   dO\QH   4  '           `
 org/mozilla/javascript/JSCodeExec.classPK   dO\    =           a
 org/mozilla/javascript/NativePromise$ResolvingFunctions.classPK   dO\E%  	  ;           *k
 org/mozilla/javascript/Interpreter$DoLiteralNewObject.classPK   dO\#wj    -           go
 org/mozilla/javascript/ScriptRuntimeES6.classPK   dO\    '           w
 org/mozilla/javascript/Scriptable.classPK   dO\Rqov    5           \y
 org/mozilla/javascript/Interpreter$DoRegString4.classPK   dO\ȶA    3           %|
 org/mozilla/javascript/Parser$ParserException.classPK   dO\Wy    5           }
 org/mozilla/javascript/Interpreter$DoRegString2.classPK   dO\>    ,           
 org/mozilla/javascript/InterpreterData.classPK   dO\w    =           
 org/mozilla/javascript/ContextFactory$1GlobalSetterImpl.classPK   dO\|1s    '           
 org/mozilla/javascript/SpecialRef.classPK   dO\z:K    B           
 org/mozilla/javascript/PolicySecurityController$SecureCaller.classPK   dO\  t  5           Z
 org/mozilla/javascript/Interpreter$DoMethodExpr.classPK   dO\                     AQ
 org/mozilla/javascript/ast/PK   dO\3y    0           
 org/mozilla/javascript/ast/InfixExpression.classPK   dO\5  <  ,           S
 org/mozilla/javascript/ast/CatchClause.classPK   dO\dY    6           ҥ
 org/mozilla/javascript/ast/TaggedTemplateLiteral.classPK   dO\:  
  .           
 org/mozilla/javascript/ast/WithStatement.classPK   dO\EL    '           
 org/mozilla/javascript/ast/Spread.classPK   dO\ft    /           
 org/mozilla/javascript/ast/EmptyStatement.classPK   dO\t2C  %
  -           R
 org/mozilla/javascript/ast/XmlMemberGet.classPK   dO\O:|h  /  -           
 org/mozilla/javascript/ast/FunctionCall.classPK   dO\5[
    6           
 org/mozilla/javascript/ast/ConditionalExpression.classPK   dO\X:1  	  7           
 org/mozilla/javascript/ast/ArrayComprehensionLoop.classPK   dO\ק  '
  +           z
 org/mozilla/javascript/ast/XmlElemRef.classPK   dO\bM  	  .           t
 org/mozilla/javascript/ast/XmlExpression.classPK   dO\Xŗ  	  4           
 org/mozilla/javascript/ast/VariableInitializer.classPK   dO\S     4           
 org/mozilla/javascript/ast/VariableDeclaration.classPK   dO\`d,g  
  %           
 org/mozilla/javascript/ast/Jump.classPK   dO\yV%  
  4           J
 org/mozilla/javascript/ast/ExpressionStatement.classPK   dO\]*  =  3           B
 org/mozilla/javascript/ast/ArrayComprehension.classPK   dO\9    &           
 org/mozilla/javascript/ast/Yield.classPK   dO\(=itW  $  :           
 org/mozilla/javascript/ast/AstNode$DebugPrintVisitor.classPK   dO\-E,    8           k
 org/mozilla/javascript/ast/GeneratorExpressionLoop.classPK   dO\yb
    (             org/mozilla/javascript/ast/LetNode.classPK   dO\-ٸ    4           = org/mozilla/javascript/ast/ComputedPropertyKey.classPK   dO\-h  
'  (           G
 org/mozilla/javascript/ast/AstNode.classPK   dO\ݰ  "  ,            org/mozilla/javascript/ast/PropertyGet.classPK   dO\A#=    0             org/mozilla/javascript/ast/TemplateLiteral.classPK   dO\a8    5           z( org/mozilla/javascript/ast/SpreadObjectProperty.classPK   dO\uC^  Z  +           + org/mozilla/javascript/ast/SwitchCase.classPK   dO\    -           2 org/mozilla/javascript/ast/ArrayLiteral.classPK   dO\g:    +           : org/mozilla/javascript/ast/Assignment.classPK   dO\L39    +           \< org/mozilla/javascript/ast/ElementGet.classPK   dO\()3    '           mA org/mozilla/javascript/ast/DoLoop.classPK   dO\ D     %           E org/mozilla/javascript/ast/Loop.classPK   dO\j:  {  ,           H org/mozilla/javascript/ast/XmlDotQuery.classPK   dO\j9  	  .           L org/mozilla/javascript/ast/StringLiteral.classPK   dO\6n  ?  4           P org/mozilla/javascript/ast/GeneratorExpression.classPK   dO\q+/v  
  /           W org/mozilla/javascript/ast/KeywordLiteral.classPK   dO\uT    (           ] org/mozilla/javascript/ast/AstRoot.classPK   dO\dv  
  .           )d org/mozilla/javascript/ast/BigIntLiteral.classPK   dO\Wr  x  2           i org/mozilla/javascript/ast/FunctionNode$Form.classPK   dO\_jz    2           l org/mozilla/javascript/ast/ParseProblem$Type.classPK   dO\G:d  
  1           n org/mozilla/javascript/ast/UpdateExpression.classPK   dO\p  	  .           u org/mozilla/javascript/ast/NewExpression.classPK   dO\  
  %           zz org/mozilla/javascript/ast/Name.classPK   dO\.  ,  *           À org/mozilla/javascript/ast/WhileLoop.classPK   dO\K>    /           # org/mozilla/javascript/ast/ThrowStatement.classPK   dO\)ɮ     1           k org/mozilla/javascript/ast/IdeErrorReporter.classPK   dO\"+  O	  /           h org/mozilla/javascript/ast/BreakStatement.classPK   dO\޾݇    *            org/mozilla/javascript/ast/ForInLoop.classPK   dO\ú  
  +            org/mozilla/javascript/ast/XmlLiteral.classPK   dO\*    0            org/mozilla/javascript/ast/ReturnStatement.classPK   dO\I  E  7            org/mozilla/javascript/ast/AbstractObjectProperty.classPK   dO\VA  Q  &           5 org/mozilla/javascript/ast/Scope.classPK   dO\]"  l
  .            org/mozilla/javascript/ast/NumberLiteral.classPK   dO\C8      2            org/mozilla/javascript/ast/DestructuringForm.classPK   dO\`Y  
  (            org/mozilla/javascript/ast/ForLoop.classPK   dO\@N    0            org/mozilla/javascript/ast/UnaryExpression.classPK   dO\\Q    *            org/mozilla/javascript/ast/ErrorNode.classPK   dO\%  S  0           @ org/mozilla/javascript/ast/SwitchStatement.classPK   dO\9 r  .  -            org/mozilla/javascript/ast/FunctionNode.classPK   dO\J@  t	  8            org/mozilla/javascript/ast/ParenthesizedExpression.classPK   dO\8g  G  ;           9 org/mozilla/javascript/ast/AstNode$PositionComparator.classPK   dO\R    /            org/mozilla/javascript/ast/ObjectProperty.classPK   dO\jÝi  x  ,            org/mozilla/javascript/ast/XmlFragment.classPK   dO\ziR    -           ~ org/mozilla/javascript/ast/TryStatement.classPK   dO\шLa  
  /            org/mozilla/javascript/ast/ErrorCollector.classPK   dO\@@_    ,            org/mozilla/javascript/ast/IfStatement.classPK   dO\Ǵ    +           r org/mozilla/javascript/ast/XmlPropRef.classPK   dO\#=H  |  &            org/mozilla/javascript/ast/Label.classPK   dO\N%  6  .            org/mozilla/javascript/ast/ObjectLiteral.classPK   dO\\"  
  1            org/mozilla/javascript/ast/LabeledStatement.classPK   dO\5T    '            org/mozilla/javascript/ast/XmlRef.classPK   dO\э      ,           ! org/mozilla/javascript/ast/NodeVisitor.classPK   dO\sZc7  7  &            org/mozilla/javascript/ast/Block.classPK   dO\-i[  	  -           s org/mozilla/javascript/ast/ParseProblem.classPK   dO\sIk    :            org/mozilla/javascript/ast/GeneratorMethodDefinition.classPK   dO\
H  H'  +           # org/mozilla/javascript/ast/ScriptNode.classPK   dO\+0  s  '           2 org/mozilla/javascript/ast/Symbol.classPK   dO\cd    (           H8 org/mozilla/javascript/ast/Comment.classPK   dO\;?  
  2           N< org/mozilla/javascript/ast/ContinueStatement.classPK   dO\o  c  .           OA org/mozilla/javascript/ast/RegExpLiteral.classPK   dO\     3           eE org/mozilla/javascript/ast/TemplateCharacters.classPK   dO\7vGU    *           AI org/mozilla/javascript/ast/AstRoot$1.classPK   dO\yD  1  *           L org/mozilla/javascript/ast/XmlString.classPK   dO\]d  "  0           jP org/mozilla/javascript/ast/EmptyExpression.classPK   dO\           #          AR org/mozilla/javascript/annotations/PK   dO\w	    6           
S org/mozilla/javascript/annotations/JSConstructor.classPK   dO\Z+    1           yT org/mozilla/javascript/annotations/JSGetter.classPK   dO\QM/    9           U org/mozilla/javascript/annotations/JSStaticFunction.classPK   dO\Ds*    1           yW org/mozilla/javascript/annotations/JSSetter.classPK   dO\ 
*    3           X org/mozilla/javascript/annotations/JSFunction.classPK   dO\!4    0           mZ org/mozilla/javascript/Interpreter$DoFalse.classPK   dO\vI    M           \ org/mozilla/javascript/ArrayLikeAbstractOperations$StringLikeComparator.classPK   dO\'kO  k'  +           _ org/mozilla/javascript/NativeIterator.classPK   dO\7S    >           o org/mozilla/javascript/Interpreter$DoNameAndThisOptional.classPK   dO\KI  M
  6           r org/mozilla/javascript/NativeObject$EntrySet$1$1.classPK   dO\&.}    8           w org/mozilla/javascript/Interpreter$DoLiteralGetter.classPK   dO\u  c #           z org/mozilla/javascript/Parser.classPK   dO\S0ێ    <           Q>
 org/mozilla/javascript/Interpreter$StateContinueResult.classPK   dO\h	  X  1           9@
 org/mozilla/javascript/JSDescriptor$Builder.classPK   dO\T@    3           ,J
 org/mozilla/javascript/Interpreter$DoBigIntCn.classPK   dO\5!  5%  -           L
 org/mozilla/javascript/ImporterTopLevel.classPK   dO\Bdp    5           )]
 org/mozilla/javascript/Interpreter$DoTypeOfName.classPK   dO\  :"  /           _
 org/mozilla/javascript/LambdaAccessorSlot.classPK   dO\                     A.m
 org/mozilla/javascript/json/PK   dO\J螞    ;           jm
 org/mozilla/javascript/json/JsonParser$ParseException.classPK   dO\o  [%  ,           ao
 org/mozilla/javascript/json/JsonParser.classPK   dO\ߔ      1           
 org/mozilla/javascript/SerializableCallable.classPK   dO\M    /           
 org/mozilla/javascript/Interpreter$DoSwap.classPK   dO\U  Q  4           R
 org/mozilla/javascript/Interpreter$YieldResult.classPK   dO\r  6  +           
 org/mozilla/javascript/NativeGlobal$2.classPK   dO\,c7H    0           #
 org/mozilla/javascript/AccessorSlot$Getter.classPK   dO\&^  	  2           t
 org/mozilla/javascript/Interpreter$DoCompare.classPK   dO\'(p     .           "
 org/mozilla/javascript/Interpreter$DoPop.classPK   dO\J  Z
  )           
 org/mozilla/javascript/SlotMapOwner.classPK   dO\`])  &\  -           v
 org/mozilla/javascript/NativeJavaObject.classPK   dO\                     A
 org/mozilla/javascript/lc/PK   dO\           !          AX
 org/mozilla/javascript/lc/member/PK   dO\^  m  6           
 org/mozilla/javascript/lc/member/NativeJavaField.classPK   dO\,  {  *           
 org/mozilla/javascript/lc/ByteAsBool.classPK   dO\                     A
 org/mozilla/javascript/lc/type/PK   dO\o6c    6           "
 org/mozilla/javascript/lc/type/TypeFormatContext.classPK   dO\/
T    5           
 org/mozilla/javascript/lc/type/WildcardTypeInfo.classPK   dO\
6x    6           
 org/mozilla/javascript/lc/type/TypeInfoFactory$1.classPK   dO\           $          A
 org/mozilla/javascript/lc/type/impl/PK   dO\-    ;           

 org/mozilla/javascript/lc/type/impl/InterfaceTypeInfo.classPK   dO\@  
  >           
 org/mozilla/javascript/lc/type/impl/VariableTypeInfoImpl.classPK   dO\$D    <           y
 org/mozilla/javascript/lc/type/impl/BasicClassTypeInfo.classPK   dO\:䁟  }	  7           j
 org/mozilla/javascript/lc/type/impl/ArrayTypeInfo.classPK   dO\           ,          A
 org/mozilla/javascript/lc/type/impl/factory/PK   dO\MĽ    F           
 org/mozilla/javascript/lc/type/impl/factory/WeakReferenceFactory.classPK   dO\2>L  u  B           c
 org/mozilla/javascript/lc/type/impl/factory/WithCacheFactory.classPK   dO\Z1    =           
 org/mozilla/javascript/lc/type/impl/factory/FactoryBase.classPK   dO\ؑ  3  C           ?
 org/mozilla/javascript/lc/type/impl/factory/ConcurrentFactory.classPK   dO\I_bj  _  C           Z
 org/mozilla/javascript/lc/type/impl/ParameterizedTypeInfoImpl.classPK   dO\'p    6           % org/mozilla/javascript/lc/type/impl/TypeInfoBase.classPK   dO\:  	  @           Y org/mozilla/javascript/lc/type/impl/PrimitiveClassTypeInfo.classPK   dO\Hs+    @           I	 org/mozilla/javascript/lc/type/impl/ClassNameFormatContext.classPK   dO\0    7            org/mozilla/javascript/lc/type/impl/ClassTypeInfo.classPK   dO\9s    6            org/mozilla/javascript/lc/type/impl/EnumTypeInfo.classPK   dO\Pe5    4            org/mozilla/javascript/lc/type/impl/NoTypeInfo.classPK   dO\O'  S	  5            org/mozilla/javascript/lc/type/VariableTypeInfo.classPK   dO\ܣ  5+  4            org/mozilla/javascript/lc/type/TypeInfoFactory.classPK   dO\c    :           6+ org/mozilla/javascript/lc/type/ParameterizedTypeInfo.classPK   dO\GSY  s  -           G2 org/mozilla/javascript/lc/type/TypeInfo.classPK   dO\3    4           = org/mozilla/javascript/Interpreter$DoLocalLoad.classPK   dO\%6_    +           @ org/mozilla/javascript/JSCode$Builder.classPK   dO\(-Po    1           B org/mozilla/javascript/RhinoSecurityManager.classPK   dO\-Jfz  e  9           TE org/mozilla/javascript/Interpreter$InstructionClass.classPK   dO\,W    1           %G org/mozilla/javascript/Interpreter$DoRetsub.classPK   dO\	o  q,  "           J org/mozilla/javascript/Token.classPK   dO\y  /  )           b org/mozilla/javascript/NativeNumber.classPK   dO\c'  W  !           v org/mozilla/javascript/Node.classPK   dO\]}    3           Ҟ org/mozilla/javascript/Interpreter$DoBindName.classPK   dO\#Q    5            org/mozilla/javascript/NativeCollectionIterator.classPK   dO\E&   %	  3            org/mozilla/javascript/NativePromise$Reaction.classPK   dO\1bP$  rN  '           S org/mozilla/javascript/NativeJSON.classPK   dO\]    )           8 org/mozilla/javascript/AccessorSlot.classPK   dO\HA    <           ( org/mozilla/javascript/ScriptableObject$DescriptorInfo.classPK   dO\1    @            org/mozilla/javascript/ThreadSafeCompoundOperationMap$Iter.classPK   dO\'M  C  1           R org/mozilla/javascript/IteratorLikeIterable.classPK   dO\"[1    8           < org/mozilla/javascript/BuiltInSlot$AttributeSetter.classPK   dO\Io&%  i  ?            org/mozilla/javascript/Interpreter$DoValueAndThisOptional.classPK   dO\E)
5N    3           " org/mozilla/javascript/Interpreter$DoSetConst.classPK   dO\Xz0    ;            org/mozilla/javascript/ScriptableObject$KeyComparator.classPK   dO\ucj   -           J org/mozilla/javascript/ScriptableObject.classPK   dO\  `  :           ^ org/mozilla/javascript/ScriptRuntime$StringIdOrIndex.classPK   dO\ńg  N  K           a org/mozilla/javascript/ArrayLikeAbstractOperations$IterativeOperation.classPK   dO\q3  9  8           d org/mozilla/javascript/ArrayLikeAbstractOperations.classPK   dO\s70  r  &           tz org/mozilla/javascript/SymbolKey.classPK   dO\/XZY     0            org/mozilla/javascript/ContinuationPending.classPK   dO\IOŭ
  +  (           6 org/mozilla/javascript/BuiltInSlot.classPK   dO\((Pa  g  .           ) org/mozilla/javascript/SlotMapOwner$Iter.classPK   dO\?     )           ֓ org/mozilla/javascript/LazyLoadSlot.classPK   dO\4E  N  6            org/mozilla/javascript/Interpreter$DoSetConstVar.classPK   dO\,  	  7           B org/mozilla/javascript/Interpreter$DoGeneratorEnd.classPK   dO\  -  3           C org/mozilla/javascript/Interpreter$DoEnumInit.classPK   dO\|_:    ,           ; org/mozilla/javascript/NativeJavaArray.classPK   dO\@  e  4            org/mozilla/javascript/Interpreter$DoRegIndex1.classPK   dO\    9           Q org/mozilla/javascript/Interpreter$InterpreterState.classPK   dO\MQx^s    4            org/mozilla/javascript/Interpreter$DoScopeLoad.classPK   dO\ 7A    '           ] org/mozilla/javascript/ScriptOrFn.classPK   dO\UK/    1            org/mozilla/javascript/Interpreter$DoBigInt.classPK   dO\N'6    3           a org/mozilla/javascript/Interpreter$DoStartSub.classPK   dO\~  Y  *            org/mozilla/javascript/NativeWeakMap.classPK   dO\y    1            org/mozilla/javascript/KnownBuiltInFunction.classPK   dO\tCW  r  /           ; org/mozilla/javascript/BuiltInSlot$Setter.classPK   dO\j9	    '            org/mozilla/javascript/NativeCall.classPK   dO\_w	  P  7            org/mozilla/javascript/Interpreter$DoSetPropSuper.classPK   dO\sd  
  0            org/mozilla/javascript/Interpreter$DoBitOp.classPK   dO\Q   a  ,           ] org/mozilla/javascript/ConstProperties.classPK   dO\w&^   ^  1           l org/mozilla/javascript/GeneratedClassLoader.classPK   dO\K"    #            org/mozilla/javascript/Script.classPK   dO\#=7U    +           p org/mozilla/javascript/DecompilerFlag.classPK   dO\ܪ      )            org/mozilla/javascript/ClassShutter.classPK   dO\!S    9            org/mozilla/javascript/AccessorSlot$MemberBoxGetter.classPK   dO\[n  T  7            org/mozilla/javascript/PolicySecurityController$1.classPK   dO\Su9    )            org/mozilla/javascript/NativeObject.classPK   dO\yx.f    7           ) org/mozilla/javascript/ScriptRuntime$LookupResult.classPK   dO\Ӏ2*  C  &           =- org/mozilla/javascript/MemberBox.classPK   dO\{l^    (           J org/mozilla/javascript/Interpreter.classPK   dO\vVr    1           ] org/mozilla/javascript/SecurityController$1.classPK   dO\)qd  u  1           9 org/mozilla/javascript/Interpreter$DoBitNot.classPK   dO\Xc  6  ;            org/mozilla/javascript/ScriptRuntime$NoSuchMethodShim.classPK   dO\5AO  
  B            org/mozilla/javascript/NativeJavaObject$JavaIterableIterator.classPK   dO\/T}  b  9           W org/mozilla/javascript/AbstractEcmaStringOperations.classPK   dO\8    1           + org/mozilla/javascript/Interpreter$DoReturn.classPK   dO\OT    N            org/mozilla/javascript/AbstractEcmaStringOperations$ReplacementOperation.classPK   dO\u    6            org/mozilla/javascript/SlotMapOwner$EmptySlotMap.classPK   dO\j  z6  +            org/mozilla/javascript/FunctionObject.classPK   dO\|  6  -           $ org/mozilla/javascript/WrappedException.classPK   dO\                     A org/mozilla/javascript/v8dtoa/PK   dO\6    4           V org/mozilla/javascript/v8dtoa/DoubleConversion.classPK   dO\.    )            org/mozilla/javascript/CodeGenUtils.classPK   dO\c
4  K	  '            org/mozilla/javascript/ConsString.classPK   dO\qX    2            org/mozilla/javascript/Interpreter$DoSetVar1.classPK   dO\Jx$  o  L             org/mozilla/javascript/AbstractEcmaStringOperations$MatchedReplacement.classPK   dO\u      )            org/mozilla/javascript/RegExpLoader.classPK   dO\x  g              ^ org/mozilla/javascript/Ref.classPK   dO\hA<    .            org/mozilla/javascript/Node$PropListItem.classPK   dO\s{=    (           0 org/mozilla/javascript/Symbol$Kind.classPK   dO\dk    5            org/mozilla/javascript/Interpreter$DoLiteralSet.classPK   dO\|Xl߭    1           w org/mozilla/javascript/CompoundOperationMap.classPK   dO\_p  l
  %           s org/mozilla/javascript/JSScript.classPK   dO\M    -           9 org/mozilla/javascript/LazilyLoadedCtor.classPK   dO\si    8           k$ org/mozilla/javascript/JavaMembers$MethodSignature.classPK   dO\%^:g  @  ;           ' org/mozilla/javascript/NativeObject$ValueCollection$1.classPK   dO\K|Q  [  :           =+ org/mozilla/javascript/Interpreter$DoGeneratorReturn.classPK   dO\K1   }  7           r0 org/mozilla/javascript/Context$ClassShutterSetter.classPK   dO\1    =           1 org/mozilla/javascript/JavaAdapter$JavaAdapterSignature.classPK   dO\$MC    .           4 org/mozilla/javascript/Interpreter$DoNot.classPK   dO\au      $           7 org/mozilla/javascript/Wrapper.classPK   dO\  5  )           P8 org/mozilla/javascript/ES6Generator.classPK   dO\ւ    /           cO org/mozilla/javascript/Interpreter$DoNull.classPK   dO\Q(    .           Q org/mozilla/javascript/NativeJavaPackage.classPK   dO\$`R   R  +           7] org/mozilla/javascript/IdFunctionCall.classPK   dO\4  3  7           (^ org/mozilla/javascript/Interpreter$DoThisFunction.classPK   dO\ˉ)Jt
    )           ` org/mozilla/javascript/NativeBigInt.classPK   dO\D  	  2           ln org/mozilla/javascript/Interpreter$DoSetElem.classPK   dO\5    0           r org/mozilla/javascript/NativeConsole$Level.classPK   dO\  B  9           u org/mozilla/javascript/AbstractEcmaObjectOperations.classPK   dO\uc     *           ώ org/mozilla/javascript/Constructable.classPK   dO\9spޜ   J  '            org/mozilla/javascript/NativeMath.classPK   dO\j˫5    +            org/mozilla/javascript/NativeJavaList.classPK   dO\N  .;  *            org/mozilla/javascript/NativeReflect.classPK   dO\h  0  8            org/mozilla/javascript/Interpreter$ThrowableResult.classPK   dO\F_y    7            org/mozilla/javascript/Interpreter$DoArrayLiteral.classPK   dO\s;ф    &            org/mozilla/javascript/Delegator.classPK   dO\)isb  u  (            org/mozilla/javascript/Undefined$1.classPK   dO\	u    4           < org/mozilla/javascript/Interpreter$DoPopResult.classPK   dO\C    +            org/mozilla/javascript/Hashtable$Iter.classPK   dO\    1           @ org/mozilla/javascript/Interpreter$DoGetVar.classPK   dO\k6$  T  (            org/mozilla/javascript/NativeProxy.classPK   dO\*Ǝ    *           p org/mozilla/javascript/NativeWeakSet.classPK   dO\5    6           F! org/mozilla/javascript/Interpreter$DoNameAndThis.classPK   dO\J-Js    >           ?$ org/mozilla/javascript/Interpreter$DoElemAndThisOptional.classPK   dO\@h     .           ( org/mozilla/javascript/ExternalArrayData.classPK   dO\at   (           ) org/mozilla/javascript/NativeArray.classPK   dO\2X-0  )  9            org/mozilla/javascript/NativeObject$ValueCollection.classPK   dO\lm     8           n org/mozilla/javascript/ContextFactory$GlobalSetter.classPK   dO\^   N  4            org/mozilla/javascript/ContextFactory$Listener.classPK   dO\8|  S  -           ɢ org/mozilla/javascript/RhinoException$1.classPK   dO\>
    '            org/mozilla/javascript/NativeWith.classPK   dO\oB    7           o org/mozilla/javascript/Interpreter$DoStringConcat.classPK   dO\[  O  A           ղ org/mozilla/javascript/NativePromise$PromiseElementResolver.classPK   dO\鋲   {  B            org/mozilla/javascript/ScriptableObject$LambdaSetterFunction.classPK   dO\Q|;  )'  )           ҷ org/mozilla/javascript/JSDescriptor.classPK   dO\p|R    -            org/mozilla/javascript/ContextFactory$1.classPK   dO\{:    1           8 org/mozilla/javascript/JavaToJSONConverters.classPK   dO\N  c  ?            org/mozilla/javascript/NativeIterator$WrappedJavaIterator.classPK   dO\h    5            org/mozilla/javascript/Interpreter$DoElemIncDec.classPK   dO\Ah=	  -  2            org/mozilla/javascript/ThreadSafeHashSlotMap.classPK   dO\v    *           6 org/mozilla/javascript/NativeJavaMap.classPK   dO\Xl    9            org/mozilla/javascript/Interpreter$DoInOrInstanceof.classPK   dO\Eڳ    8            org/mozilla/javascript/Arguments$ReadonlyArguments.classPK   dO\O*)    /           S org/mozilla/javascript/Interpreter$DoThis.classPK   dO\                     A org/mozilla/javascript/xml/PK   dO\@<'  
  '            org/mozilla/javascript/xml/XMLLib.classPK   dO\f΂     *           b org/mozilla/javascript/xml/XMLLoader.classPK   dO\J?    1            org/mozilla/javascript/xml/XMLLib$Factory$1.classPK   dO\a    /           q org/mozilla/javascript/xml/XMLLib$Factory.classPK   dO\N    *           @ org/mozilla/javascript/xml/XMLObject.classPK   dO\rs΋  +  )            org/mozilla/javascript/NativeSymbol.classPK   dO\*
  	              y org/mozilla/javascript/Kit.classPK   dO\  y
  ,           " org/mozilla/javascript/FieldAndMethods.classPK   dO\DU    U           ' org/mozilla/javascript/AbstractEcmaStringOperations$FromStartToMatchReplacement.classPK   dO\aR    2           _* org/mozilla/javascript/Interpreter$DoRethrow.classPK   dO\ß    +           :- org/mozilla/javascript/NativeCallSite.classPK   dO\d    /           ]: org/mozilla/javascript/EvaluatorException.classPK   dO\D  H  2           3= org/mozilla/javascript/NativeJavaConstructor.classPK   dO\c=  l-  .           A org/mozilla/javascript/EqualObjectGraphs.classPK   dO\=H    6           U org/mozilla/javascript/Interpreter$DoRefNsMember.classPK   dO\'  3  +           ;Y org/mozilla/javascript/NativeObject$1.classPK   dO\p|z%  `^  &           [ org/mozilla/javascript/NativeSet.classPK   dO\}  i  5           i org/mozilla/javascript/NativePromise$Capability.classPK   dO\TI      6            org/mozilla/javascript/SerializableConstructable.classPK   dO\Uz    5            org/mozilla/javascript/Interpreter$DoRegBigInt4.classPK   dO\A9^    3           m org/mozilla/javascript/Interpreter$DoPositive.classPK   dO\[n  S  &           c org/mozilla/javascript/IRFactory.classPK   dO\p     -            org/mozilla/javascript/SymbolScriptable.classPK   dO\v  ;  &            org/mozilla/javascript/Evaluator.classPK   dO\II    3           j org/mozilla/javascript/NativeError$ProtoProps.classPK   dO\G    ;           u org/mozilla/javascript/NativeJavaMap$MapTypeVariables.classPK   dO\ԇ	t    1           } org/mozilla/javascript/Interpreter$DoDelRef.classPK   dO\˜C    7           @
 org/mozilla/javascript/PolicySecurityController$2.classPK   dO\)  X  5            org/mozilla/javascript/Interpreter$DoEscXMLAttr.classPK   dO\=6|  /#  +            org/mozilla/javascript/RhinoException.classPK   dO\{3  w  4             org/mozilla/javascript/Interpreter$DoNotEquals.classPK   dO\ܐH    $           # org/mozilla/javascript/Context.classPK   dO\ۻR  '  '           l org/mozilla/javascript/JSFunction.classPK   dO\-CP  *  )           y org/mozilla/javascript/NativeString.classPK   dO\tx    8           ) org/mozilla/javascript/SlotMapOwner$ThreadedAccess.classPK   dO\\z  N  -            org/mozilla/javascript/IdFunctionObject.classPK   dO\{ݝ    +           T org/mozilla/javascript/SecureCaller$3.classPK   dO\ؕL  )  ,           : org/mozilla/javascript/NativeJavaClass.classPK   dO\y    F           C org/mozilla/javascript/AbstractEcmaObjectOperations$KEY_COERCION.classPK   dO\!ޤ    0           A org/mozilla/javascript/DefiningClassLoader.classPK   dO\\<  r  9            org/mozilla/javascript/NativeIterator$StopIteration.classPK   dO\Y5    1            org/mozilla/javascript/SlotMap$SlotComputer.classPK   dO\$I+  y  /           + org/mozilla/javascript/ScriptStackElement.classPK   dO\-ST   >  #           i org/mozilla/javascript/Symbol.classPK   dO\ř/j    0            org/mozilla/javascript/Interpreter$DoGosub.classPK   dO\hf    9           e org/mozilla/javascript/Interpreter$StateBreakResult.classPK   dO\$6b    6           " org/mozilla/javascript/NativeJSON$StringifyState.classPK   dO\h.  5  9            org/mozilla/javascript/Interpreter$DoIfNotNullUndef.classPK   dO\ZX    6            org/mozilla/javascript/Interpreter$DoPropAndThis.classPK   dO\f׬h    2            org/mozilla/javascript/Interpreter$DoSetProp.classPK   dO\Ag<    (           T org/mozilla/javascript/WrapFactory.classPK   dO\qD$  !  4            org/mozilla/javascript/Interpreter$DoRefMember.classPK   dO\     1           L org/mozilla/javascript/Interpreter$DoTypeOf.classPK   dO\aD    J            org/mozilla/javascript/ArrayLikeAbstractOperations$ElementComparator.classPK   dO\ޢ5N  0	  A            org/mozilla/javascript/ScriptRuntime$DefaultMessageProvider.classPK   dO\X    8           " org/mozilla/javascript/Interpreter$DoLiteralSetter.classPK   dO\	}F  b:  (           % org/mozilla/javascript/NativeError.classPK   dO\mek    6           +? org/mozilla/javascript/Interpreter$DoElemAndThis.classPK   dO\~  j  4           B org/mozilla/javascript/Interpreter$DoLeaveWith.classPK   dO\'    0           XE org/mozilla/javascript/NullabilityDetector.classPK   dO\qm'r  L
  /           F org/mozilla/javascript/InterfaceAdapter$1.classPK   dO\c#3(  0  6           qK org/mozilla/javascript/Interpreter$DoReturnUndef.classPK   dO\em    5           M org/mozilla/javascript/Interpreter$DoNameIncDec.classPK   dO\1<}    5           
Q org/mozilla/javascript/Interpreter$DoRegBigInt2.classPK   dO\}b*    2           S org/mozilla/javascript/Interpreter$DoGetElem.classPK   dO\JrN    (           W org/mozilla/javascript/HashSlotMap.classPK   dO\ m    *           u` org/mozilla/javascript/NativeProxy$1.classPK   dO\ٮ    0           c org/mozilla/javascript/SecurityUtilities$3.classPK   dO\O$    /           Qf org/mozilla/javascript/SecurityController.classPK   dO\0-Z    8           Hl org/mozilla/javascript/AccessorSlot$FunctionGetter.classPK   dO\@_^    7           o org/mozilla/javascript/Interpreter$DoReturnResult.classPK   dO\nK  g
  +           @r org/mozilla/javascript/NativeFunction.classPK   dO\h=	    0           Yx org/mozilla/javascript/SecurityUtilities$2.classPK   dO\3@  )  /           z org/mozilla/javascript/Interpreter$DoZero.classPK   dO\)#  %  6           )} org/mozilla/javascript/Interpreter$DoCallSpecial.classPK   dO\ճ	  ]  )            org/mozilla/javascript/SecureCaller.classPK   dO\-  M  5            org/mozilla/javascript/Interpreter$DoRefSpecial.classPK   dO\S%  t  1           k org/mozilla/javascript/Interpreter$DoEnumOp.classPK   dO\Hտ  	  <           ߓ org/mozilla/javascript/NewLiteralStorage$NameInference.classPK   dO\           #          A org/mozilla/javascript/typedarrays/PK   dO\    4           ; org/mozilla/javascript/typedarrays/Conversions.classPK   dO\ri
    @           " org/mozilla/javascript/typedarrays/NativeUint8ClampedArray.classPK   dO\D'Km
    8            org/mozilla/javascript/typedarrays/NativeInt8Array.classPK   dO\F  G  >            org/mozilla/javascript/typedarrays/NativeBigIntArrayView.classPK   dO\(Yc
    9            org/mozilla/javascript/typedarrays/NativeUint8Array.classPK   dO\  .  :           ־ org/mozilla/javascript/typedarrays/NativeArrayBuffer.classPK   dO\"
    :            org/mozilla/javascript/typedarrays/NativeUint16Array.classPK   dO\ƈQP    =           ! org/mozilla/javascript/typedarrays/NativeTypedArrayView.classPK   dO\c1*
  >  ;           - org/mozilla/javascript/typedarrays/NativeFloat32Array.classPK   dO\eN?6  9  <           8 org/mozilla/javascript/typedarrays/NativeBigInt64Array.classPK   dO\i˥Y  D
  A           rD org/mozilla/javascript/typedarrays/NativeTypedArrayIterator.classPK   dO\ź
  5  9           *I org/mozilla/javascript/typedarrays/NativeInt16Array.classPK   dO\Xh
  8  :           ;T org/mozilla/javascript/typedarrays/NativeUint32Array.classPK   dO\SF    =           L_ org/mozilla/javascript/typedarrays/NativeBigUint64Array.classPK   dO\q6$Z  >  7           Xk org/mozilla/javascript/typedarrays/NativeDataView.classPK   dO\a   B  /            org/mozilla/javascript/typedarrays/ByteIo.classPK   dO\˚W    >            org/mozilla/javascript/typedarrays/NativeArrayBufferView.classPK   dO\}&͗
  	  9            org/mozilla/javascript/typedarrays/NativeInt32Array.classPK   dO\B   T  U            org/mozilla/javascript/typedarrays/NativeTypedArrayView$TypedArrayConstructable.classPK   dO\;     F            org/mozilla/javascript/typedarrays/NativeTypedArrayView$RealThis.classPK   dO\gQ)    ;           s org/mozilla/javascript/typedarrays/NativeFloat64Array.classPK   dO\Q  *# *            org/mozilla/javascript/ScriptRuntime.classPK   dO\-*  
  6           , org/mozilla/javascript/UnhandledRejectionTracker.classPK   dO\O  R  8            org/mozilla/javascript/ScriptRuntime$IdEnumeration.classPK   dO\0p     :           D org/mozilla/javascript/NativeCollectionIterator$Type.classPK   dO\rŰ  I  -           ; org/mozilla/javascript/ResolvedOverload.classPK   dO\Q̵  Z
  0           N org/mozilla/javascript/NativeArrayIterator.classPK   dO\uf2  k  2           ! org/mozilla/javascript/Interpreter$DoGetProp.classPK   dO\7r  ^  C            org/mozilla/javascript/CodeGenerator$CompleteOptionalCallJump.classPK   dO\K
  \  -           v org/mozilla/javascript/CompilerEnvirons.classPK   dO\dP  <  =           I org/mozilla/javascript/NativeJavaList$ListTypeVariables.classPK   dO\$ǽ    2           T org/mozilla/javascript/Interpreter$DoSetName.classPK   dO\䇸               a module-info.classPK   dO\                     Aa META-INF/services/PK   dO\21   /   5            META-INF/services/org.mozilla.javascript.RegExpLoaderPK   dO\           !          A org/mozilla/javascript/resources/PK   dO\    7           X org/mozilla/javascript/resources/Messages_en.propertiesPK   dO\Ϥt  W  :            org/mozilla/javascript/resources/Messages_zh_CN.propertiesPK   dO\Nu8  Ui  4           ~ org/mozilla/javascript/resources/Messages.propertiesPK   dO\9V  e  7            org/mozilla/javascript/resources/Messages_fr.propertiesPK    s '   PK
    \            	  META-INF/  PK
   \r+       META-INF/MANIFEST.MFMs0<9S I Á|i2&͵#d%Q*KdS_H$=VkLuL7RX+W9~JQ ]nghxяU";>?{	tű3׉pִFT[
bN䉊@n]522z5<s4Gj"J3#552[ޒwؓ_-.]&"]A^	VQ˿pH+TŢ8Ja-p%9#YS\QKN͆\FdjF.ZjZ{cr/ؽDR_V(x4p'UR4O4ճő%at7qz.ƸAn$' 9Iyhs1_,`:1y^i#`_LRؑE2Y8"0CՒSSbޗpZVa	EX]ZBni8[$-?vJ
9HUpEYejA"68,UZO3pD+smPcq6	$"uT*dWp8Ia=/M4dSmK,pZX< Ik;Sפ-ZLԜVu Pcw(cŰj>l`F̽Ü~3ؐEzrZ83Ԣvt霫FR^NMҖNӵ+n "3߮ts,8P?+JssܗyؠuGSf+[,aNGΰ/yPF朊]@I9uLtof|6<guVxV枙!D٧Am_zɑͼY-]u Ɯhϡ?)vA0Ϸ2H85-o$!|'(7~PK
    \               com/PK
    \               com/sun/PK
    \               com/sun/jna/PK
    \               com/sun/jna/internal/PK
    \               com/sun/jna/ptr/PK
    \               com/sun/jna/win32/PK
   \iXn      &   com/sun/jna/AltCallingConvention.class;o>vv&F\<D}ǜĜ̼tԼ<vFĲDļt}FҢT̜TFIl:@ H21 PK
   \"5   '  3   com/sun/jna/Callback$UncaughtExceptionHandler.classuQe(<BH$
?uuݕ)<S̙;'g
@BGFxŀvYK#9lEc͘ZFPBو)jmMebgvWgǁTVʛ8<1FaB%BW:E d%_a%WkPLA8(['PK
   \s?]       com/sun/jna/Callback.classumOAKKZPO@|(ڪpo|BHJxHlku`c ~(\l,z/vovf~3PQ\/2C
ݠ/LrCUd$OL
(`ɀe+NK!QZ2v*oZ2HqښeaJapk3(E)2D-%z[{JL[y5xe`maX%i\1u^<i4iӣj m
iӘ1حyYkEϹJHGvޓ$幪u_I-LzΐMGFmdYCG25W
TDkG<g<`7?}:cJs.龉`x0M {kboӟ2v~L/"6s;u]
K|
`xB22tis`	t(PK
   \v  M  *   com/sun/jna/CallbackParameterContext.classSn@=I\J$@ -mv*ADHiAj
3N@]_[XDĂwyH;s=sg? <]F"4:

7
q:;GqĻ(LUP8B/9dáxܲz%TD
{bm}^1D"?4=Sx7qտTi`
4o#B+غ
Tt/+ax9vyGu@0uPA_gz7r'٢{&VdѳZ3K!lV:K8S:!OҘ : 1߄P$ymr/a0NLk(m`ʛV4JcWyrke-{&Ce9yIT[@QOGu>R)'5mt[W]='&Wpʶ
yȩLȫLpr#Cm>ev
S_Q NA->RE<26O^%M'W>͐dSPK
   \vv        com/sun/jna/CallbackProxy.classmN@gA-h	h=n/$L$fPٶ^̓CJBTzd|_ h{tUinelIȘ%۝?
IC6XÕ}$PS'oaxn	"Zgv: )Ged)˝x,<?pɅ)[	t=i;_E<h{n7|7q{X?
PK
   \    1   com/sun/jna/CallbackReference$AttachOptions.classROP=A)*8pB	LHHHY2{BjWZ ~(}݂KsϹ?~~1@&$^wD:;O%`}]L2a2:~R@S9X1ðqýXDBzL)Q~(cX(ޞ.Y_i	9N1`savP(?p~vrNvJ-4
%!y_h,,6q"EЍ* 5:!=*^1)"SlR&^N tu#_àN|Zf?OC{BJBǂbֽ`x$7L"-ց"j<EC'(], &(NSBoš-al>s)2S`5;	L3iG4&y֠븟Jj2:g|@F6k{Dk0qAgW~õvƞwۆ}mOKy*7r@RMb IG0PK
   \a=j  _  =   com/sun/jna/CallbackReference$CallbackReferenceDisposer.classS]S1=i
˶@%*X-HQ:0ʬ _5$}7Q7[6sss97ɷ E@
\ m@V]mWWʎZ:=cr=6d0l^uד
i[S[*PW"ϝpUf7(u^"˪x
j!iykrJOl@z
&ϐ,#@Qp+P	~
#Rn`C7L&_]1ҶUgJe+iZ9nܧƈ;(2[j68nV./1{%eT4k7c%&yx-<ptmujʂ2:,S^C=y˷[Y08!üFW+=:LQΕofEcݏ[-:OMKS+P?
KMoCܧq"F#Xe0ɩҘxiCwPhfc3@YF gOgA|ź=A	~[p7M3V1_9㧇TG뙥<Q:I*]"4,W	&ɇ'Z5i<sRQ?41!=PK
   \jC  i  8   com/sun/jna/CallbackReference$DefaultCallbackProxy.classY|To72dB24BLbj'K&a<Z.֖jڢEkĂ@%-Vwm]}n}wf2;~9;;9n VP1,
*lGv7@Ck wuk۵	jD8btEG ;B%Wov
*Jf
4-;`UEB5O6CEff6k#C9SQm{^s
Bo<2=(ؠJVP9B*	Z+
Z#Tx2t՘G(en-Fa.ov\6FGvw⡽ZHd
4pcQz>Y*c6u
*|r bcp$0֤~yS;
Xe6LF(aGb chcZ-zWXFv|$l(zp&XMZҷa+<iΓQ:hDZsI֫hA+ۚb  1٦b#n&`Pr<<vp+C63VO]̈́٣P@6Dla,N-h@x}t8[3F-PxH:Ѕ"6JGn=jBP$6_;K%ZM|<>@PGPFSwpYьp{@])iPT/UHj;U܅uTLbN$0	.3`a T_r0<Ud	<:S>Z3V2!\ZYN{]|Z7Jh3qzaKcbppLYȊ4ucZ؇F%KOe}B'qC2;u&)`T܋8obܠ	O$IojWP:m8|ZŃ7!i[,[KH0}S𐊇yN4D.<2ݻ#:OvfY~Go;.*{Q>u*/dfsJ<Ʃi~"ȃgs>ͪm9'4	Oʑ8lڬIp<O֦<ifd5Waf
vF
s(T<oT=\Q1q"gS_P"^2!-dZm#0*Nc6t}49cjggf[3vxE9jd.l?+EY^#1&Q*T%~_w]imtnHRW
bOSF<CZqg@K{lp?ܽmidRٟTfg0~$իNXGYB_bEB2@ruqU
~UgjषnjcTLS;;/W%S]RlJge\eP&3OmoǥS^O%ΩS&Sst<Cp3//UJޯdϑax_owY&w
D$j{p,gJbKVlėb5-]*RX./M-߸JTRtj0[*3ɾhWS!T"P&td
)"=J^hJUrHI=vZ4\BsUGY\$>i]m*-k|Lyt5^hlnf.pN_$MXmҤ7CHހ~rv}hH~O)Ŀՙ
scͬYbBߪB&"ęxQ}%]]Ҟ|Z|V(A~ȿ-HGZ4ٯc3.7AAPĔXؑ1*OSMZKأɡ^+kԪЭYZYL~><mvV>Lpo-sVÞōwDr%#\d<MRF4#)4muX
 2p$AmcH2/GK!"J1ݟЪ7%9'"|	0e%)音P̜)_w^zZϘV7 $4Jni'j߹Mvv<unAm?X>Y{~7z[}.E\2]-.oӉgnwz|z*4+l'['pjXs9tmDgm$>|zpWe',.UX!ܼ\lנKÝb>v'⠸1+z<-<xNqBx{b1ձnv`K>(xsON ӖRXtsƱsxjR?V2n`*գC@(RP`gQ}+:t\CM,RnACÇe$<8tq	%vIKƚ乄"e/el1\:-V˚l>׮ںbHLbWR&n[92Ifm{zZ'@]*O$~:IL~ւ1T	N4]znQ˾5>OT>]	9h
춎sABg~I`!X"`U	D3jj,71֢WVADb#fxPtᐸ|xJlo>"D)㠂i5Cn&3-rܡCӊx`:=2~ZO/seeejVu~H31͂0FlEf4\d#CHu\ߠA(a~жKS9
΃ԥ˵֑lLJo_́`aq}=.NB]C;tհ:Ln?Fu	/Y90Ƽ|||f.h1C|:#1Tm:gObΓ˿1sʒK2(~I=o3>ajQUw[-n	刺	a=XgR'=gQ?j>;GPɋޙe?tdi0\h"jb/~!>nq°1q?xQi<*g,NCxY|!\;$Q\_/czְK[c(mѽȥѠqLQ|z?rfjX5:%U_\XG]/}{q:z#8Vw?&$~qnAuNqgs*P@|>|fwWa)><Sd)(\EH;.+t(M4s3Iy*}gi[S*a3T3AT>|
W9߀GR43c-pxOMqx_/YNxU-.^[bByCv:do'CᎷ-+d:%(*YLԲQIB#,%7)4t&kqsy=OܞJ~KcLrggnɿwOwsB5<
ڋ8S^PK
   \߻D    9   com/sun/jna/CallbackReference$NativeFunctionHandler.classVWu|gfYET|"k, k+(Xٰ;0.J{XffO$R'~}:u:wv@;{~{=GXQ/D%d!aN<$5Y	v)Cv
.yG<ᕐau&`.dMc{ڔnTR"'!)7z\SL_2j@H%sNP8KD2es&LU$F\EycC^ʤGĖ#3
gD,L%j"9iK*m3T=pdQ(EeJm'0/t(P&r	˱aCeSoilhmolfX8-S(V%kC^# BJT2,m!_ٛ5*V_"gfZTbzQTmb[)%	]#a-$/Jm*?!fX:32$	#ϟiWՇ=-f8uP@
Ii2_ޠɃDWa$hYB3K.}[z̟ǃk["U6gu)_񠍁~k7d;5EZ75Iq뱓{bMp%܄y7awd-vSWX.Kl׍wEq\PV^W*{pcAK@_'뗠à!Li3k4פ{93&ϽsQah̷yICa
&b{E­!G:r]}p@3tZ7erAw}mJ"i
qCvc6gt8gXv% Vj4}Y:rmvl/4N+-.l4"FV*6?NKqS\ 2!EO/,Ϙh<vD/*UgxQ1{95UM?}3 諑n65	断F/tLZ/	amSRoy^gmaJÊNyFҌ)M*UFZXӊI}05˖p>~_H ,<Dä9iX4YX\+>A,:KߧU.<b!pnSa9%} 8`IOyғx<rG$K\+T|ϐMEǎHS(]9vE3Xb1\57ɢoryMVq6cSMmQ&zg!_2.vB4!70qt攦UL=b8qp1@+1<O8no]<13J-1^K
_Z7-|.;hH?#
?3	+FpZb]s\Ux+t|GMz9^KVe&*3I,,U62)	i
!Q!B\VB'woғT9tԪ*9+?Sϲ|X%PVx^(=PK
   \,0{c   F  #   com/sun/jna/CallbackReference.class[	|յ?e&[B	aA6IXbmd 36qݮRW\"ڪ(I0X|vunn(7[f&A$s=;3"E6&94nmMMYkno_B  4X6FK6ߔXyJuLr}[:_,#PC[ef_h딕'֤*M4i 
d7LzHa4D$1`,k	DTHC
*21
2-tv޲[&f7T4.Gk"_cuadI4
w@s,sәAcښZ	Ȕǘt,l64ƙ4&0
ķH
R[LM-&r&CyK@)XvM1i*Mc*_ȅߴ5L^ uI3,`t
1FcIg9؞p(tf4G8'MT	lzbKf_4:;oðݴ5ڤ~AV->FjƤV77FB%<Zq<ݭOK[4B`jhIk:#5,[׋3i`ƛwLj|M&/BҦt!ӈMiE[$BMfl4Y|({+&v(j4)@[<~A,myqdRA
d(	/D|5}Xo?Rfj1($!4qLCrFKГ|jI1jI̴K9b;MEmp0ڳp,5CRbebgi"7J&O:	^퀏;:C¥m!ճ֝J$M0S7]GtI7MV*,(&9N19ʬ-"ӗ@,s<
"C0#"TbMFuZ6PezmXñ`:l	ҹPcs t~SYYNwHN٫	YduAM}4~z Ӥ4:+B:oRGlΦ[
Εŵg0+*ڒtkIߤoa{ƋU	maLyU/%9Ut<wuueR7Jke|m켈&[.g
zΤ^yoisf_۰
uH/̗ͩ6ĕ|zcq^`*έ[tKAEkFb1T;ck&}O"l@-zZcg869'eg?6'SKV^5׿'љ&'RK|Gm2&J`qMET-\E5ů27[&EM=AW'۸ɔc~j΁m_>VӡDDoDjȜ?3m-E*Y-N_!:˧wSOw
I<&
hߓ(Pb&}HYf_4KE'LDAϝR:+[VeOEUyl9&/=2a
X-j1[H;cfb<6B<%mQ;bpa\4ytoL2f,0NjrqѪ5+kHyf풵\l0\5ܲsɣ4EEKyhǘ|E2O1]A-$ݘ='\fD2|0/mT#' sl'1d,F[QQJ9OL3 p?|&	l
F+aM[Hc?V?@ِLɳ\D3g%`0ޢzS"7ͳMs!*rCψ	I2cv6x!ujt"!.1y)/c׸$C42T2'"D4^1XNepM[lHtԡcS
 bSM95`Ҋ]r<Tƨ'քܷ+iM$PcZ	օmaи_dizZlL<n`	F=p̃%4z K4lN.7|`Z񓀨\hE	(S߆hkY-Pz$8`` fF<Q 8,^
2qm2]\=>j>ss|	Gb:*?Z(g0v˷cTp	K坼&K{7''/B*F!rɗrx
*-Kg:>;
} 6u]1{KoE|7KW^xIEukCkYJ#!_1&Mc$)C"eTVU<Do|^b󌲜f~mC]&RS U
	h>$\D5G!ud͂-,|性eGﱠ$O8	2Z=r虐XlM>$jeu%k.޸DR&j,[^m%M~B;FEM~;,''IZs|NXsgK!`C'ه&?ODH?tn"F1|*M~_4D^~ -Ps/hĽ
SL~oU\Y;9q}noTZO 8.I>*J&@vÓ(;jEE}N#?x:s'dCkK1`E`ODh<kl6c%ʅb jOkQK?aJWWLA^t}8߽
]}kRXKǉ^MH.TzP&x?Y{0Dr#>XVJAa%i"lBԇ<Q)9QMknU

5TEȔACH8܃.kʌoC
GInmH'^c6Q5TӑgiA}dwFڸ$2zI$qLS9Od=m^D/On5F T%
@Q<Un$N9}⚚4*L5Y1#-ܸSTmhǖv6Rɓƀj:Kpfuo|wV1/u:;g0Gְr>9}2o6yJ>MXw&}V&p,6=Otq-/ЬmNiZg]!Y8DEFFes 2ļHPʿ!37kr.ÀuwW1Ԋ^$ir한ga:(>_d+Bu"i(@Vwo1}ǭ^{~,*\?5*YӺh\4{5Sg积+|Hd0'R%1R;u=lŴ^Ѥomޖpq/pN7i[`1 ->q֙_U#ɻi)00B<ŭXit8IS09<;}Ljx_w VH^[2Eκd4vL7G3Rxr@	˩~ZW_?:ƃ,)zg@(gBFϼ֖k1L4}SsPfPޛ)FO=n2&12D]hE_1iCXB/>8rj(+NK)ٰ(B.l 
)6SLkrRI
Q)Qd;DZp5imroFP}qlvX}gP9GN:i֩jiBK횖j.-C2'sGYi2{ܘLY=G~Ug\bᶈ?4(8Ke\:
D4?:#Tor&X|5($U&E{,HGix?er%g|=KC#74B>B=$m|";u~>a=Y?tH~聿PFv<'wРڗˏS!޼GF/IQuUYN*2HӦo1!ڌQ~rS#FmAoZj:T$uFQgV5┋мk/i("Iz5^qM:Ne4\eGh~~f#4Wkh|\4*Drr؄0jKTGZI
TG76-ZhVI/Puj%lQ
j"&
1hI,c7ՠ
|A3PG<A^CՃЭһYn
oNrou0+oa06hC
 eȑ寒CyK=TPPE^(=@Z{66Tڱ7{sA[見*%*q؏w)Ѐ 7T8mU[bMiiΣA{xB8z 3n>DUNaPxң(DZO0*U]ëz"{Rw{-鷍t4;6MeSMCwYkוtvUTxdb'v۠D'a^={tw9!6
<6h|yN"UoQBTQqxC'ɇ
< `Oh$;Oz&iT"`FkZRAӴ,*Ni>{7N|DH-Hf7_GG"}.k7J*-%BJQ\l稹6ӎl3E>18
(ﳳ|sh4ОoH)$v뤗^r^E
y}(t&ҏh1V};VԹPfcCx|bI4Kfj3ij[ʳFͲd|ByE
z*8oby^m	y"mn]k溊/?Ҋ.Ҏ)ѲMRWOB
tNdrP=i0Q_O"Em%Q).\J؎M樷یp S7=9J#LcjE z2$tf%.NUqN+qw340ÔgwƔ؏Ӱn>J:\ܰg{(AGuv恋
?sra	Oy	廕NϿ@5lQʙ2Q,-/r/;hEz
i
EfLQ z+^lmf>9 {;-*8
(~_>$99d%,?Jj)B52˫iu>*zӆ.BVl-yNPiJ~)1%:%NP{|gzrL
Tk/wpaoz]hP7x8i5O "qu鉸ay{4Nzg<O	;,TDo >@|V	Oh=RffƊFa!_yt#f@@:L<Bz+ :ȣۧ<Tx,<<yO%\񽁧f[g 7,g\ϣ˯<)wy!̋U>/QTMj>ר\:U:[U 5_ 47UESTh
V2KJ>o Q(oW$eSmzTCfy Y^6jډ[@c-^ M.3oX#{KG]J.$Yd<{ 9t&JeL)  ƮDhC]^%HE's8
"rg@QLO	h1pcIֹgI@9Vle7%.i+y|IU\|X}sru;cE;
XNfA5ؐ婤Aד@^Oyy4h2oZ"4(ܐ0]kF6(Nkg+|Oőw9aɠȋhT
]o
Z ,uy&${ؑخ0S=436j "/Vz#q/V_&
<+(J05qxT+@-<I"Pn0DaFZP.Q)n{h_J|9+h-_Ej:utޘė렢+Ulė8lIpt|oo|Q	9w6n0NYE={H|1pXLVR%͠e"t Mfk 
5OSmoomtqb^6Gy/~d:@Z<RJ|Q>}ɟT؞#Gy?)!ӟmz7yXC^=@cKBW-|T]2J_#bIgBHuĥ[aA:|V]OPGM||?j~n燑zoim0mBu
Fۜ'^F:(q2f?śf߭SCM7͎:ΊdepvyS1z8aViuoIQ(HL+LnqsYJ2~_;y2i.{"B]eig@2P@XX%N$Űc vucҔ
!"2a;([+$BE!x:0!Am<Sp̈Kρ4_"~)mK|	KgƽTwMQr)}YgX^gZďpOQ~t^ZG}<@4N FJa1] 4Uh.X'64\|`+խj:ncݞ#Ad|F#T8 f4=<h;)=,MIyqqú`
Kz p~7V_鋴pS6Oװȷh9H:OZ;c4ESVںGOx߬Y.ε^$PhaH)DWE]*۝
#ӏ?r#q4*8zjف=oayL,1:<ڮ#J`t+ɓF:& mFeNW@|GO8{4}dVGT'PB)]'r͊6уx>tD9GN4\B.דk<+6utƽvʑk=J݃QOUO̡'(`"
G/ ,XҘٕshM?B4vQqk:w6o!
z_S_S3>n >ii;
E
_oS5i^]d|N/lZ!U-bͰ=SH]R}D7i?}4?h48yAZ.L_uْB!.kѝ'Ov*ة2j;;ɲIj@sc4fRFۜX6Q>uP3psom$|<z(ǔd$/x(L~8)De;#=JN̶qC
<)!Wii9
B7Y1jG
lR
ɷɷn5)QQXpuUFwҧ
Zѣ4]jj*-Tn5)!R3^`%$;SE*V-fPHGsips9-SMy.5J^ki;f`]Ƥ
P^䆧L=L@PՆj(Q<o:9Rp[d:v9OT٪PK
   \thD  +  '   com/sun/jna/CallbackResultContext.classPNP=W
3$n qqCªPRp&YhL\~qZc#L朙9g2o/ Nmc9<
;8t!wõ
sJ}{a,a~l sRL@OCwH\n;1~{FS
CɓēSσd3#9e8~hgZC?Z+GhĵI*=n(JPjN8~yΔ(pBi2uldnɥ STƙd2dwPK
   \    +   com/sun/jna/CallbackThreadInitializer.classnP8+B[(MY*jB)DPKrwZC '+"qPc-i3_ADtX-s͆+MlVhul:_lO SX)2$Ʉ@X	*Rܐٔnz[[5cԜv::c^a[]ht3:fqIvD9ylwU5s\ٲ&OaբAc

wGl);kUm@VܶdPzE[w:-UNCDc=1yc'VpٳWgٯ~AW
'(6)TH[_7 -ѓ<!)e2UڄFlB 

`oh(Ť/ôtꅢ-h{5+<ޢc/!8S3Өj	Z|/19cq#ǴQ#kQ0Z=st)6uzMSx,ÚO
=BC.oV%ryLU1'
q;X$۸a̻s0&L쟃ɏd1S PK
   \2    )   com/sun/jna/DefaultTypeMapper$Entry.classRN@=CTD|#N51A]hubiKg0&. ?xhbiz3{ڙ׷ X1C<$F;-˶u;`:	jr342)&0VmCiu$
gjXϐb7.C6f"qɞPPOTp%BERşRJJ66F+]LHq޷-Wɞ&W?Dp|-(}נ=mwƥ*[844lG71R
I	?%?=2$#X?'I1eBt=ILWN_Zs'#RG>$w)!}*<h
i0CFVf靋<h5h'ER4PK
   \th?Q    #   com/sun/jna/DefaultTypeMapper.classW[SGaAp#"

\.!"+ 
9,,,;dwoĤRCRy0*SSRVg׽R|~|F
Xbim^k
kcz(EBf@aC㰂
K)n­]ѨL7RkV`sИm#GashaN?QrмmDGc .
u*ʥʉ1;GAG#k*Q6
R b1k2.U(,ЄՂ\΅MRU`mZ:8eDMjd{3}SIَFd҅z)h264k0=IQe);1nM]`G@nëY{SJ	KAX0w|RGI
Bumީp^{:Ʉ$F%MQэVM喟<mS,zqLq}8Aip@IښipOCcF%qjpJA`wU)-֯_6n3ΪK<b
X*[`<WU׳J/P+MF4dSZgoTZ~SEh`rq\0l3+")ɓɖK3LNJnt(ߟIuVЇN?6%PDώ!Idja-IȜ
15˛`zlTHک%+)4$ռ$H=[&&iKY*ڼ--p q罀%.w RQ?S2R\}LeԯXrdۺ'ǹ:s\/dա`Q\J$8[9H%r8:α"<ސl[iT@DeVgAF-7LY ojy,,Y%bg)rT{ ,a}k*(b-`_jb:B%OX ?+A	}|CqyŢª%V-*b,lĶHlXjm:Ilz)'`a^y%@gakoQ,"+«Q2֡lalAovGxكvA^:pqH	$yKC?L 9982O0pS&O;oyYz%6m3źDs\2+/K)} cv׷L؜O	`Iޫ!7a<t[i98c+Iٖ$!S&Cb>.$B
^")[.<<@.3++
jHSKU/[.daF}ʒʴ_ۚr4\){ERt)lJגKʷT#xCEUEp%o,_- :bn-x;Eb5KC=q;>Nz܎O]AROɮ)|
EAo"hQ36Q"AR R}	cO0"2MFoex=$G7Bnk܅nw}vSPK
   \Y92b    A   com/sun/jna/ELFAnalyser$ArmAeabiAttributesTag$ParameterType.classT]OQ=vu?JJE[VRLMKmY˒l$;OHIh4<sEĴ;gΜ|`>TQכ-[߱/ln5
's9W̜:f^q
pJ{0$k$RƔJi(WT" og"vUE?4ʹFȐySe\ Cj5la (][ܮ62U&i
ۭ:VX˰^x
I]KuW[MMf3W
c,p8W b4&C6m8$آLXk+"/їjШrSlg1h/
wu#&pѬm9'tU3?@'-jB0#*1m8ލ022LWIT$K)u@5Ȇ;VVkF  |q⧴	NH$3OLɊ%&1t&stVOQY]ԥ{e#%'+ONaL2.<^'`)IMiI
~/nJm@BC<r#wG{K#{ν(ǈS!9`hkSyXc<!"!Mu?PK
   \g    3   com/sun/jna/ELFAnalyser$ArmAeabiAttributesTag.classX{xTd7	< g	Hu^ݸ˶V[mURgC^WVPs7>d͙33g9yӱ>p8!E@*!KezeP7+.1ڢi3()].HwBLBY+gzpE;F@k,jDvez0f `+$ TSIx-3۫XJY]zFyEO?!'/rPܾkbgpO|(]]
wߔTSJq	*bU%ukH
N)ˏ0"+8%JCF6G"^$=h8*
+
zBvP,V҄iN3/W]L)N8SYPa5ڍ0R<o1ޑU09aॲe!-dFk@xW^*j̄YVWXcr9'998G\NH, yB5)nHvv.,pBf٠0Zp_Lm($!uΐ?8%}w`*|[wB2F#(~\pz-7yڀJj>38'Sv@ 5+dM<a͔%	A܄N/JY5&Na!]1=sD(5KNnNQHΜs2 ʽ`Y=arp2rhv h}0ma]ci
~6r	rO\+*Op4O++`-6l
ykDg3k0v7co\y=7WQphtQ*WS.h5y}$`5Ck5YP*`
ӆfOS<}BzKCy	nw1p}wef}Mu
3ͯmQ\hgdl䭩1Lۓm0M?zTg?Kۓ5I=20E"~J]=0CNbx7	]Vdf=W^
K)3Jrr
>уvg3}陸PdnY\MY d	\j<(S4G2ftU1	8aVVMTa hםKu޻=-/ay2 GQ<Nv+Dp@tPL+
Tz[a*2NJ(Y	f$~1]̞LLsιb0K`&d2R#0a7u!<Kgä.cQ\F8v
(,.e:"Q6'Κe#pϏ((2RT8Xɣ2
>H="Gcay|ݫOyNZS] ױoukF_KiJ-/hc3}jӃu)ю }]u/L!})9BKzY]^9h_UzRABupDf랧h!&In?vˉ$]#YWu[P
3BpW*$ElLiabDXGoLw֯y<f(@15@(4~NZD:
i`4IIO<E8/Jk$N%]%jIHzwIz%"iI]t%#^II_%="QI)7S:%͔4[RHZ$(IIZn,@~tR')NO&9LLߡfH5 xF'O?Z# q
8hޙr%q,kxTդJogu~9}pca[ ôBl)4ޜzHDd.hej]T]ABnpXƗHu828RMo% 5emHulqew+3e
jIaˮ2#G!#0|q'SwY>ǭ%JSy)XEL I#2ǨڸZu~~Y(k 7ĭ0iT+p#
jвfDs$ i4_N
m
d*i0\qBSXd%wlj<`5BH=N]9]r*hKtRt,Z$GuVȶ7yFb,ڋg|KRR$UUܖJhrx)`vn wj`ˢ|TTT$SzqL<VH)D-k)75+.t(m~EdJ2'?FP`0Qi^c2v(HUFC2LRJY1(iJ\+%ؓ7A6vRP!J^a9VlhvvVFqS{4J{v5lҮǿQӴ~,Sf?̟tfEn;L/6V_mfm{Af٪fk=h39#6wUU<a3Th̳P6󼚫h3/ôWlU5O{fPlm@{fSlCu|>"K9k_f	a:ڍi6RǺ1q Sr7j67Xơ67L1߶Pֺq5niKVgq͕,x'}PAg wGY{W>WrW㫰
_;u؄|^oK3|bp<|'8?s^R/q%k\Z܁s/I(cWJ)W&ɜ YVg[^3ϡvFsgPK
   \sy/  	  3   com/sun/jna/ELFAnalyser$ELFSectionHeaderEntry.classU[oE=c;^]nnApخā$MZ7)u	lYW)/*my/ Q	~ ?N!K3|g滜0O+'
~𦲣^I/o%?5'
A.!(d.k쮥n˪AjeuD8.!,:.j[is[OoJz>0+]S5d@_W
՘-c!+[rl!u[݇*褌S8 ^O^geUb}GF>ec2s_'q(&_cq	qlUp.Cd5MLfsf^F$~͏_Ćf*3Ća,2FpD<LlFVsvs1t2q(p	¾2$ˤQܨjYQ۔C/;wc2qLHxaw+xAL!#aZ
A5kƖBj?Z\'GNWs.Ls
񜦫K[몱WEk%ZPw@FJ)uzkvX
CkP:p/		v]̺CKx!gE7^!2Zo--2PwnyRm͐H"Uw.m%uAQh gu]5檊i{'kYZwЋz:{C_R;!fzq	wj`Y=~o`ɔ5=)I]ɳ?@NAaH_ጃl}~mGxG)Z/It+Ƌ9Nc+e;X`wEU|p|#v kN9r+Eևd?C Qa`Ւ &BE6Fw9ܰ{4-+294eIa	y@{Hjlm$v赽o#@B?Rv
+JcA4g~n!ۮsdÕ\p%G[;;VcW]ׂ
+̏V;Á?)zyq)_q勢c,_x
Z	+̗8gM!Kߠ}8Cs\c/p}7#^u"5|,$IL|PK
   \kC    /   com/sun/jna/ELFAnalyser$ELFSectionHeaders.classWkTg~^e2{aanC
i%$ݴ@Htj6̒&KmZ-V+zmۥ4^5ǟ_Ǟ~aw7s字^W$T6g	't%џ>ң+YS5|p-F!<ܯ$>RK5Po#FEK'zCMkn/Jм;X0VTq0	[N
/;}CM\]
YK-NLTtA$cbMLƍB*+VYd[pK&%4d܌JYR	7.ήl'$G36lr{Y4hy>}9E<a[|\<k&c-EB=Hn57؍X|]ǚSZi89>aȊxt]aaq CΪvSF::!!GF/UƸ7uDT >}I@qD@ҩt@N)#eziwLMYNm>{y-.wHz?aZ2!a2"bkw^,?FA	aK.v2:[Qͣb}2@UΰRj\*"e	SI9h\+zZy>pa0XfVa
"r
j32Nc,P-	S|qg*ʄs,αQ⬌ࣼnO=>. ݆j
 ;c@V+yi	Bk\ \i1-=.YQ	.p6<bO//x
_bwXv&Yʰ';̳259QY<hb
YpQtvwGozMWg!@qzL51/#iaĳ36s	qM{n(e4;̙sfk_(:|M>Y(pW	21	w
^h4ZB՜HӘ#ƴ~}\S8G|e·K2>{s9rV8m%VI+4mHi_TYS
|V5c)ٓw)3LV~Y 5_MJ\U5o_k&e
E#5{6:ŗїWLS0]$.:uXL_xU"x:;܈ٟw/zex/-hj
Kp;J!)i
wѻ6{6ǦݶJ/s#.ae/Cz!}j\­&}/~>1@Kyxsp]t0lPs	K8:R-Xޭ:Yr%w$,a#!c	GGv?L0p
#haezp
@[G(tـCXeX	>p"n	BG$YrCB%.V[O)43h9, ֗x]%̕g.rԫ
vgMoa$Zj"TӏCqyڌ"5m5
?i'^&nCqjt3P;B=t%h)}4J =KQnAPJA⛜5
[<m<'.K^<XwapM_;s!*?~G1cqE'xpFHX2J-=ثhrtcz2GG.YEW"+GE؟S_bmr^&3̕_R2c)@$Nm#+f\Q'a?-3}y,	CDGz&bYf\Ϧʖ]Ee4!5+q&$XW5W
x ~tAWu!OE>gwFQ#5vE~q,l'7-1R^{xPK
   \Zo  -#     com/sun/jna/ELFAnalyser.classY\\ՙ;3ar!`<!	1!dI@BHT c` 3CLl]j۵ڪ]VwGVW>Lݾ>f`/
ss;q./ Wv
Tć7G͊@51\RF
JC7͊~3[ђEe;e@6<
Fl8%w%"QGilb\AAZB\_I)!ewFzEb@X!o>dHa~$
Έ[\l`ɳԛA3QobTceX2-=ArKz
uTqi)M:ot\ȢF+h+Q7р<5B$Tr`PEӒ>,[]HsʌMf~<W$gZl!!6\{jʂ[kQCv4
*h{j<؊m:B8p"_̃q!ogC,J-l7p?h!*&ll

	d;F\Ȏj&6\u1p=n]c1LYT,eT-kt	73p?1RЕ+t)dBجG7U܇
'Mku.-A? 4sJHsCPfc35W^Il6jǰƧ04p+c&9G3pnx8Mf6Eh6 u_l8d8'L±pΝ
Kw~뉀sܝE JӀy`s!|X=GD8f&iҸ6>1eS@}f1| !s?n$%xauVXu
Ni)ƃ-h%'pHZKN\JL50"AKh
<*lҚzz`1XHa*?U'1p19-2'RX`QΓxJǨ#vO{ŕfpGN7j{Oii+L$&3I8gu|WwTդ
Mcg3K+B߲93WQu^0u(p&vIP#Q-/hUF,L١v?Ƹ䘆2	юo`<'?2`}	M/
^7p?sHck
E s7~̅L1g?y0+MdN-S'8:~10Kz3G=9VB2kFa#|@vN_S~!oi<aƖ
yAxoJFК6(֊}qxQ1F!փCxM,M@5Kt!?b8`C<QeOƳrlR$rVsj<]\6vDCCD;ڽrY0Oh&"
K<Y-_JZbV*U`B&݁&uFy)UhuVQE*V}D(ܓy8JuUե'X`Z XjvY q-N´%2214յrP`^ ر*8"7ƭ`c@XʂkC[uK}cǎ-:A!
qLnʿ00ܩv;,3
7trrb1ܿӌEo1ILEHܺ9})#q^ǘLأM^hٵmbgք|.{Hs\+Y
[|KY3ھ &w쥠&AZRLfz1'5
yy3'-ϗ3VpdOY_xvJCڟ7fȕg ?
K``N0Bٳ%]g`l@鍚G:Z*&wX_VNg9>G80O"ϟd5q9>N.zDKA> s=l|P<Mzh]/Op˪XghZVf
U>VogLnI,eܴ%LrQ(\*TK2'˭R엥}엧Wj~kR#OI[>Y{^nKz#[U(k={s
wP	GŮs$6!۹u,FTūlWOYŷ$<6)8"@#9AUSӭژ9g:s$#3ȼ	f`.8:@Fk&Wj3/{Cw鐍8Rd7Eւ,usl93jT2];3mJf`^:32|_F暌eә7o.oϕ>S#yc<VȣDePplr<|>H` Twm]n;ޱ!da?UFز`X(֓^㸋Tִ>֞P(\>Kg
٣|(m+#0a}NQp7
%sGj=6\pUSzyXqJ<W1rFm^ 0wY106י7Dn锴29Z5"q(T|N)BHR+(qI
F0*+qUެxP yW1F&UH_K
ߪH/dpG>	|pydȾq\2eJ鯠@#Fт<1$83_'y[}_u<y/(7/9xYUq'PE夕Ts?-R.W[]\Pu]Z\UackZm9]A9\cMN`ƩCԸIƖ
e&I	Nc\+:Zm1ǔjL./@V
ujTKLC+-IzBt/}"f%
LNN7|N:v9&.s/<?k\5N
UN$B0Ƥu³ʕwx0-P+d,sOIr{#kd^q|"We{'Л,aFX gFd("i9VVw.{،3 &^b?>~x[w+|&8
<#`"	"&ujujQ]g-+%ָ.fGXK5!Wm%Q㐎c
btMT02lmq|:V31 o6S@i6-V4Ź7M~3BWMşbOUμyܾ1䨯QKs"`2UIEK[9Z%r
(Ԯ
˴jjW\kبjԶ Z-OfѰ)W74ئnd(
kE9䨷Xs(+kD+t
?P
?o?_ԯLO$b4`&'{|EN[3ViZnm+mXP5`HP]ZuZˤPLK,-A] |[m겴uc&Z8).,
>&4aVMIQ	dT޴h#G13$Io9Wy R+)IZZvjbm7Ф݈f&th&:.Dz-{hQa^_	7iV"ޘ#|J$9 NmKRg\*'-|T9'M,MHY,vv?r錥$bNv+_O(ѪS*ݛuB?ͽ6zۣھT	pjEB-F4űRKR'nAv{[qD~Q73Q	Elj|Qoq!=jJ+Q*	nJqYVιxvτ^ΓJ>a2pC]>NQjAȑVyq5ţjIx>vDBL>2zTYH5?;xBwHL>X}hsD
YpQ[S'ejhjۢjSޢUOn}q`1vG@k+7ڞ[ǬT/ϸR8	o:fPK
   \+o    #   com/sun/jna/FromNativeContext.class}QN@=-PD_Ht5w6$\@ۡ6XiѿDcwD5n̽眙yx}pf)P
Pa(ܱ#Lܨǐnw&rвCf̹A/<rN"vaXߴm<:>={	kZ*YW˩tAHmT7dhYZ%KO"6d#Tڞ9ј"JZǥ$_5?W\'읉%Ez~ԥP2UW7^gdKBHhB4PNQCՎdש9F_z
vQ33B	HD$PK
   \]i   8  %   com/sun/jna/FromNativeConverter.class;o>^v&F\<D}\Ē̲TԢ"vFĲDļt}F4ZFW
t>8
.I(44& hbt"
1L6Zv sKS2s$Jde`c y(	e, PK
   \lM    ,   com/sun/jna/Function$NativeMappedArray.classSn@=k8	N۸\
7Z;q}@
BHZQx8cWS	 $(>B: dxϙ9߾N
T
WPdSn{{C;"yr/v%5Tt\`Ȏƾ=}cy*D{:o9rⶵ_f5D}(FAX2~P0nu\Ӱ:nP2׳Jɉ?CN, sa񍓗]&uұDޘls
n_qYW'Gڎ|H*T/(p{)xa(K}d֑8z"|{E'pLΓ`!~+iLfPy8 \VIq0]'ot+ɠVH6C}Z.ڔ_ejOd,hװFvN.B~<k~g7ʍOdiћ35P -Tƪ
/dT؄	;R2zhN>,:sw^'%ݔW^SVUHZ!XPK
   \/    '   com/sun/jna/Function$PointerArray.classRAOQ^_˶ťV
EP["TH)P҃Q6tqkv$b<bqv	of޼73}xJ
1p	qW`P;nʑ#*MX&hml7!#Y@f2$,
6ZN!IW2_DlN`k9=<AI׳-GQ\U&Ҝk3Ⱦ>PjiPa)Z}<aW5aۻKAORjS{@m6,l{'m
#>r2AS!
DxHaf[n[VHCr$pӫM_=ܸ5q,50V	 9G^	<B_=zr)؇#	9nD*!Pf:H/GxS5Ñ1#AP^YT;0iz*`iTɍI=I95d(r?Jt*YLY+oPK
   \s1K      '   com/sun/jna/Function$PostCallRead.classmNA
0~@s'E{AZbM< %=>_5
0]gxc:#}m|g/{%1a҈Zߞ%=!nH,GBv]+UUkE(9oQms1	ۛB:I`GH{2IPK
   \ =#  N     com/sun/jna/Function.class|	|T9w&y,dȚL@Qd  	 0db2ApAkZ[mmB[[i[%	E[Z[ںVmW]]@~sߛd"t}s9{{<9R0iRe2"S:ڦ\R7jk;Cњh)4`)
юpAѫd"InXw5EÑ6))`5Sd1](PACXSA: YIK"h)02eN3JOrϠBcS~D&G (FMBMWU[Z@:Ҷ1f,)YnYLjiIjPLL[5o"Qڐ
8k"Sa5\O&PhшO(3&30;SzIg4&wĝ\5b(t.U0y`mZ*
).tE-S5M*d$tA3LI@0к`WKbp^[SOWlTT-ºB6p>ϤtS.6ln]iDRIiָ=$6
Z:hp6vռHALR)
4:<TG>-Œi`K$r]'	TIh9L<jkf*OE'U=TKLZ-*e[C2e&].ݮhB	nleǍ5hܜlEtBΠ&m._HKK^}KWY<{AW2gP-;wbW%lu"׆M77XGmHlAU0M=aR'EpUU[ZSJQb%!\fbPtCKhAךt]ϔDk5aX<Z	ڂ=Z'X&>M7cS`9|PP1*
*
3dU1̠bWv9II=
5׷:	yQ­]mG0.;έЭw
Iwҗ&m
HM)1f&Mvw(_*>%	6W
I_S͉DZBA	6KT`{߄qaD)h:= äoѷa롫-.fi
v˃؎	aa}פi7օ7Od=j^}/)fdHk{
(Iξr0i?јaj)Nc5U~QV
7a_`F=ғ-93-%4#*rP!:lI"v%4t)xU2LzFӦAD|/KGMz~Z<TS~4?"Se0󳔹5_D^٢MQ~./V+}.,Z>įR2F)_	+IIϐߙ2]W0Ӽ4^`қkp(h]MѮAH;4~. &QpW+Y
6 *$\&ɤ?Cx:-ݠav0Ɩօ:7-;&MKޠAG9a?%w65[f<zUFQC>LûڛP|.>K;O 2ǲ6'&0fV;LvrSv?/#f	X+ `
I㼧aPYJ&gqD/MFbB`\0Wch:8U%i⭛D$l<&T$lI0∤װ#sLVƁTԚ	܀4I%F	x1꤀BbRR~e\""u'!^&IRFtSLgSt
z0sD{yz`B8/I{["ppɕ\@)=Baa,D4A0KxB΍t!&ei1a
)s="bls(V09k5y19JM*Mm𒔄vMu

&72dqVvA0^k]8U^試j/bWdZ}&J
#yS&@9,l(EI$\lyaRBn&!^9ai1|	CE1ݭ#0Sq4'ib`hrY0C<̰"Je(GZ"R	4xFoOǷeQ.`ӧɰ3L#S֨:ؙpJ(ͥ!Q_*M9ϚoM94J3Mʡ4	uc`iC~L\|;KB5]Ex,K|ŝ&YΙTE_w8[4~2]WRJz/w
sxcd@1Ta uI,7o3ͳ?D;q#5p2zN{vhwC)> ]H>U>X K{vIG5,(z߈ckcܒGCn<nBMÚ峗^zQL=irZeq/4dB0A|S&ÖH,?ғ3,dȲ>4)n+
|O*ˤC 'pRt\cAQ<OMgϮmgϡ ~)J<xϚ^X*Y\YP*j
,LӖp4d7FQ͔2masi9쀛㬾c{(\k~}菬CT`' ;;C.~G ZBt-9BOw']OqH{6}!1V~m#o	nFjD#v6x-8؀&(epMQ\`b?"SpgC.~VRdB	$.)NVr^GyLv	^NeԩPcZi]e5
3+)k$aL\0
LUº♔xtI.BkRÙCJ2
dMS;o4 "Rc'Shhj&)ئTG/m*6UB)nA?B\MC)Q|RSMuu?:WRvGk
=`HsHt.HGczG馺P3CiY
\fSG(
;( yϾdMhDpAdV[>}қ=1w&
TWc,_vvCyK/Le
bQNpOZӰf~`AΕg|Y/v-_TSwњe~z*}{5+p[um1HS:
˻/[t_!.aйO)Ou(|0-ʀc
.Nb'r\˺E7( r91wM4%|቗)V>
UAX<6
ih`О N׆\5%Kye؝#҃c@KռX`kNiqòT	i5Yi>ӘSlgXEOd3VhxၞW:Π6L`spTV]ĊNyO-,kV:H#l8v1kN?\a8=D*5qiϔڣ2+\L72ۣGh;:HR-ӗkom6Pev\uԷQ|LkYʰdԧihd
LJ;n@z8pSmZd0.kX8=eDz`IM*Bo*[OBHu]--VӀΣw0Ϸ bitu4%jfdE	Bzd
JV-nYk7qȀ΢*B6K>5j)54\$ExMx_z*dCI<GQ<x*D_a)mzEt
	&jH#.Ę#.!cF_LdDaC- BOf5KlR5$IܽH!o*-Ĥ%(MvMddӐG
X`@VZ4`=x(#>N%&nZ jTVU@W}D:iaAc˰srVFR~*#浉ē
YnZ2ѳ9Krgn饑eQAKJӤ@~*
OSO>Qr(@iYOvQyeA]yVҒ{c
y+衕xХc`m-:%f6ѻ`=(0px}>Uy	N&fj	5

⩠ZձYo֭r[%*r&/8à5x?	~%\SgPmhj-?mii(O۪Z&QHh @},.?JFy\ۏXX<rr>\@>J㸈JGSy8#P|<xtnk^5\D+Po)<I>rj,EmM$j@h,c2!8~
}q۸
0Z9+[ǑCI	e|*m:NC	9r	c/}NAxJSv
vpMz5FeȘS 	ү;28"qnƍ	U8ڸ*. +aL]w-2!E	U%y]EGJVC7Tf`2J0?#8t>B3[	l*ؒ.ʢUAQdjFVb1m#9lդESiA72T-Z'~;K8Btv<E*3E&qhӷeݺ2^at_&;G2qo
CT t?ec[zJAQN8*^y_Bo!gS&i=.ziMBo@~J}Fg
[J/ziXy=UJV}һ>(YE08|SPy]z
OWC/Re.=Hloh%GEva6t*s|9Q.z̗4MCvzs^?{ PnڨG6:cy_s#Cܻy|_/oUYC+CmEEyj2}tbk6Fe*	(Qh\Ox)10h3/nK^I;x}Wn`(֯8H27Cy=
-\mvWd|Ux3/k7zނFovo 6~?GV	÷y'8/,*k[*g"^5zZ࿼2Fu
u)&4Dg3*W#y:Pr8:uBDQD9~Ȗ]h`/tKCo8Fe"iebE^S7 [ȅ9@rc1+Lm=/cUB{U9ⷴ.sLKu
y:F'H]yG:@Ei?ASgq(b	!8Ac0iAێiHq20]Ob*Ёx7WI@͠c]$3;=DH!|j};%F94Rn6[V/kHInKeOE_$Q(a9Nn56TYvcz<e;  }K<H;it>^[d
v"
݀YÓ!#c,2ėx@\	ĝ44`* J-$}<M r pPp~O $9}<_ ~@I$9ϐؑ}W^X`+*|@ҽyZuy[
l>^ǫ<e6Ze/(_T8BE}|45-ZcbJkmpc=z0;iah:W=xA}B1qdnAHxjڦ42WSV7EޢeRHNͱ5ꪆx<?8!/!@+_?}pci~A&\4w UrE7Ct!껴gx7x#>ƓƏ#</n^n>@L;)C->̻iP8yo^C~
ooCpz#'/<9/תKߨ[U˿SZïv<7_˿W[v~C}[~[?:+uqA@j\%'?%u'Z; Q43"Io+	Teݎ[b-e>듖FHy:dPC)1
vPh	 :2|'WO4/޽G!~wB\l{ܻH7vr-r#2,6
؏ <F,_	1 QNFk(|u7
w@H^\bl?jlx~-#Y;I_+]\$u|H\>dn(ME2P:좜*=>yN䴖#	Yzyw7e>C糛|XÏmr ă#һpO7M"߁)0xWwI/Iy޶2`^yh>^ xxA8}Aq}~Vw#c=|.9{
B=M}./Kv
KbE萁@G/N:;7o( ~M˿ߋ[wLQ޻PKdWW|a|;u>/~Qa>7z9ii҃n(4uo{>w+JQUg3U5MlPX7)f(S툭&ݸ19JDMYl?qIr6r	v''Xr*#&2?Ĭ">Cc'#Wtr҅*f+dC)T9tʥ-*nQtJwaԭ5ݭF>5D6C/e5Pm5I7T)WY)|5Gx:S@U5CjoQy_QU<~\#"~^-DY S ASoDMUTZ&%yyuBDPmWkՃIR/ujzm'+E}Z*V펳Վɪ)PQlhTmj:uaTk{/5J]O{}f*֕>{;$/=D]Ԧ`VLu[Yj;ΛQټ̍
qÃ<^ݏ %9x0f[7C>Rs]Nݒ [LplV XCђ!,yڲ:&<wҲ袕iQ\CޠS. L[XJGDJ.|4,ˢa(2Px7wDQ'RQA)jJbqɏ 'P&}09`:-`"~H;&\;V?&ГvY֎5jXvCJ(wٝ|<ܥnjKx
aZ!)2YcÝr1̱o*<Ta=\XSgHs''ؖ/o&em9t>i6GIцi*_db^{ҽ濊t~*5MN19Li=59at?u<ActvUcW?ߤT>AI=j~i/S-7wրCea-C3N8[^eI;I7bux@6YCn/a\quecnTߵ)ʹ)yyEB	[*	cmbH)OruH<ȯJ|MC3-MCY^WE᛬<t<9{Zwn%Yj[D-1OQR	Bɉ=UIC"X֣&=B XMC"XѣJ)U{eգ<BStxO,rM}gR[Iݥ!~k sKP'h&}ơy\PRMx_ ;M
ˉj7jXRW;TFԻ4UG5x.T_ȌBF8k<j\jeQwP,"~y4þ<*XsH	ʅ}U }gAj
";iqQLǑ#:GYvByYtE7%/:.prs8|NPіfFqhsϹ(ЮlƦuhM;L:ϑEԀJjrQđO;|tc8wSD'8N*	hگsicYRQm8O+QyFO{>| "x1%HM*?d=)tׇ	O@TI_kRQu*Q@%;&<sߣ6s5\qC?^S3}ic'ZI:eMx?L7PK
   \)          com/sun/jna/FunctionMapper.classU0į~hb7v'K%j>e,o\r_~<01bVR[[ULM#	êxE৬eX~	ՂḍD$3CD?!x,UݠJnM.BY9Ѿ{cb^;aPK
   \'O  b  *   com/sun/jna/FunctionParameterContext.classuRn@=l$!M#!-vtHHH(ԈMW3`,9&GeJEt{wƿf(t_Nt<">KOEIsyJV'B*XAjUCf{\X2[H\?v.ʱ]
'%a[w(D<ze۶ [&JkuZnYD'Iz.	]dܗٙ즉Drz,O{̉.SBw@B
	}|#<|k:V&kM,OPo9tc|U\7v5G2 b
MV;ьxj}Vƹ`+]d)swG?Q]X,Jd4;ȵer$7KI>]PK
   \{$;    '   com/sun/jna/FunctionResultContext.classRMo@}&qiJ@b
pK[ST$rqF:HTH(MH};hUC"J~4TycŽ~M.Sы_5CD*Orx'I3`2jpRk"ICp<ΰ=wM'ְPq0l~Xpl);c3Z0
d$|R>|y,~,ϒ2K,4Ij,`L1l,4/ԸN1=#~J4&R_mw/ v'sի(}їФ*Kc<ElоNhJku0eVY&}4MTqDYZhPĝ鰅mYd*,25xJؙ`39}j8E;ʷ`l-:KRe8 cLqӲPK
   \9_       com/sun/jna/IntegerType.classVkS~VtamDjR!`S;q8`SKv0Id+YZaIdܦiKͥNh3Mgj4mL~v#)}E,BLst>{;ٿ؍_
/lNe';Eu&S39]Aվ6pM$ۇ#CP(V+=Mi<V
 7؈B)	IEw(BzG1,Wр(搖)RMZH*IwP^X ЪN|CszfL1wD{WoxMg}tK>t(YMu'\ԗznGA;
	'>~ٽ1.K:b܇}
t`e2y0?^
tJϙӻaO=tfT?d\Nb.GшiwDl8Ì#_o_dķͫ}_+TY$f_B8
=9C% ,i*j3{D^&_iя
FtT-DLO鑔Ris&qKdUWhLjO.R0ev%0CJ(U)=RfoF+D&E`>Ui<YjՆ~6aLH-Éjƅ͓*d2Y\1OlQ G2!RQβZ3E-S(K>,DeQ,Za7;jA%DxR<Ωx/ӽ7L'|8`c2%GEHkz>e|'D␂
Yˡ>h`

#"F@=D5Yİ 昔,X	fh4SaRi·(/|;r"'
]eP_IΛY)PP%&@(
m&0{@3"w
kx_ 5iTg	uOtўP%]Z5
1v}"Rq$~p [̧ul#<P=v>8u+sPr)G^C?௃8cMM(?3(wÇ=xK?kGh?ђm
h[E,5hb&uIܟ8p=n
-*wnk5V﹁Xdu+$
R&"[Q>I՗K6	<\ۊErNo`KP?5>~kgq{
48\s_2.\\D
lᐈZEĤDCӒ%q~OM<:a_1f3A\@kU8
Yt;!!$9[
s6l.K|3Gc؋Ypead8fyO1g^fbLu\0Po8KJ5)P(6nk9mѥEܸ$G
{=5W<Ľ+v)vʣxKW%JZʗHTűsv܂O"nmg"_d^[&ޒ1^Wi^]nl^%i'm%벝hR8[>פϸs&s<"Ζe(:PJQR)ĮRL!\B7eoTpA/5%}S?2cP^9\_lg]͜3{ۍ.q\i-p]ZA"ߕ+<]*l)[e3~%]5XpCx/̳Ľy.둰-O}j|
Mώ0L/V]/]/z@ Ek,ia.g.N:)QC&
fx	DG
D<+$a	hyD I$K1~yg?PK
   \N}      "   com/sun/jna/InvocationMapper.classm=@7ZYhq;z	hak,#Bp@,<2BQL&_u Xa!̔kE(Y$F2ٺƩȤ>LYIE:sSi~Zio2OY툀şG)u1au }fC
PK
   \J  h     com/sun/jna/JNIEnv.classeOJ@}ۤID[c=x\
,^J%DqnH7&⡠Qd[ of̼}	.Z0l>ڰzX
,M*k(ӳ
!H9_ԊgJv.lχ{8)C??~`甡JF<N˩sbHD>l-iVr|}(2Iod6{Fc8lP֢GK(`+Z<F`O;~O4}~Zw8"ײPK
   \Iy       com/sun/jna/Klass.classU[SFS	&i8\ viŐ4d&ӧE"]_/f6kS'#2Z=ss;
<51tø0q_ǥSx|t,lpJW0r0@e	fc0L;B
J˾
m+3~ŅF+$&>¸&e aL{Υ-vU`{'ݵmEK40p})N>ף]+s=ԡ_
Ɓ
 ]cU*WI >eI rs/tP&fg\kVkaqi],>ܠ歖u\l>Qs8A!d)C*XjGk[_ʱnǥ.ewB1\
&p+ӫsIhj
G(F{aqpW/a6|;T<h``J4-2L~p,ya?:(_Wðy$T-
ȐPa3轫LKN*(aw7'?S	id[>L'}~pr*L{RV!U
0Zuu(j= O$42U?TxF1+<ma7D]`(:IFr8KlF3!
;4t@ߐ.!( +&E:OQCm\O0ڸofv&4ic-/-B?Ƣ|?=	`ԕS]9ӕtXnҡHݤ[dYNְBM2`f
7Y=]'6-zv fH!;,|KrH=1Pq,8L' PK
   \q\  L  $   com/sun/jna/LastErrorException.classTSW=/?dYDSA+
$JV+ֶKkULvy%0ffs=o r
/n]!ǶSu_ԦKGPZa-l6߲UР!7g;vp=He-?X<Me=<GV*쨁c0j6S8+8u%.*!q\`<W㈁8)
!)0&Ks+'ϏqJiYL(9IM%?*,>p$>8uP8+خ#0`T=+j8ojlIo)킥:o`V,UB
*f.GHpm(|FXhտ/5\U3Rwxr!TS?N52~0p!?cLE-XR8v@	+TomQùR/eE5tEҳ|t	?:V%4bl;ӺukNKVcߑ1Q	êՌ̂D?f=ě-uޖT_ؼI5U䒭Q1A1PFq! ǔ>d_>]78;';Hgm6bx:ofL|gq'1Nh1:>!6P>"kk].a$r
O+ai>_IߏMu2A-
E
\_O(W/ķNMQQ,RQ5m|̵q
|fm,<[W7Bbΰ*s5<=n[Md
T
FP7U5ᬒ+;"Q96Fwp]z=<Y]Qu/3gF)vl*ca{N]Gj
Q"TPK
   \"J  l  .   com/sun/jna/Library$Handler$FunctionInfo.class[OA+*H/jY.+ !1$iY%l%I>}.P.1<Й3??nO#a @v[H.UzX޶+@jQN(/NgЅL(V܆巔Urʞv+Rmm/RqժrҵpZP:H[ub"YL=zڊȕ:S>8/qu󪾀/9@n42nݗM~.
4'v`{v6w/եk%qE mI]:<19U%GsTu\%ǲ.	&K's(,@dm,qxM&CG3K e5jO*e:nƑBIr8M-{my{a#2j4\UMƜ@	+{o7车wGQ랮C*1јx\Df
4q;)Hss֌qn6F
Q;F03$@^+JxC:)r(bБIBL7A}d)H0PADw>Gr|B
=#/#v(#2#v1cj<R
Rd4ftdQ>fqPK
   \xA{    !   com/sun/jna/Library$Handler.classXy`U&Lt۴^lO6WS)m@BӢ0Lm7awR@EnAPhX$@LGv{#ѢBAP#2[
-b;p"WA
.ZhF[`햭z(!4lҍ
%PW"	kVk5ZG!LPQ3xZ3Z"zL %Q#.0a(U0I n`*]S"6|vL6OVK*fbWեEߐM
;:QmZdEC7gN9S=
GZ>0_`JѭE-fu边R`#g@ZgnT3#\y)
2+DԒqc6r#J[ՍnTaU%LHMD3;xcZH7w|23ф/eN|}tPEHi\D*YĆ4
V(F5rY<4nNT(D]+%oE$QE"LCMf!kp|E<n3-.51Z$[A©/d9x)@+ؠb#N(L9ffCe'768_ΕXfMJ!>ل-Q-9Cř輳Ώ|\"dB25f2
VE\sJѤ).+
&QKuvfH.˂t4ZNTE'fo莆4ŕ1]3GD֘vgcD\ڤ솱4T|_#׮<f6_Wx|w)FOG[}>f(ɸp!OSbѳwRۗdXKUl+e*.Ow5kWʳ*ķXIhUu*jZV44I.0u&
WSR|jͥ
92դT?"M
ou`|*Cjď%{")Yie45	7+uLD-E]/cVu6R*~_O3`h:k9T@V1*U늰xrz{U)Sk/@w-paz>AI~c:l2[7}qh-ƣ[Sh|`<-:Ln7'pff.0{H6er!1m-Ҳ+h]v.w2`U<H_lnTOftpV'<cLlLY_WyG
&\٠%f&>xrpX0-xA*
{J+UMcg'mCǟ7^fmДү^c'ЙF	O&@%P_Y	uz+fHyiNn2fYV2dt*eo,RD2V]҅
BIWOR:X,s@9t:ջgEhB/
W`Meb	!.-[V-pLj.Y H
K[nx&1c=N*nZĄ7vul!dg/
Y!LYc`^M.fQo'").iM'M	-ښqDx\׵wjF3!N)7%'@&a:+U_'ea(ux)?vxeP:W{17lcVr#c(,+wS+ҀjǵH0_>eXb^'dwy|zM|F
!8Dyy;/\qwh_Nsqg^.뇣l(
|0}'
bv |ׇY)OhoEp$_,؍t+wֳ'턫8Kew){.1z+qK{N3?l'Yobϖ/h
̜ wrNߓG.fuG;A{qåW`/[Cx
C<Ewʢp|hܢ 2/c9ht
()2n-%&!9CTv*(TPJ'YI1UNrF) g~|V`\e+rI<I5_k-88_ds{S8`cqcYȹ+v\wb0. ."zwRKW"reQ*::\%^膲[8%p#~Kj
`,sW%y%y7 K	2-..Ax]0g}|tK*H
*_a!y=^7.Qx ȘW|N36Ӓ>؃ʧWuލGPTn*x=IOoCh>+*9'L*+J9zobbq|<	~>79xxYXڂȩW<65_'lnƛ[o]YaY<i#r e)>%;OQ)Z'"_l"D%LԝCܭB1M6팎9kZe*j^&as49:瘣bY]L3Ŭ$va&˷xOP\8qor?_G(Xp%qFEXJI ZE9 ţyrH9|֢u63yw݅sKotUN͞Oqh G[yfݒ9 E3*\Ld\Bd\6R-̃̚,Ge/J,@2K@( PK
   \\22  :     com/sun/jna/Library.classmn@gn#i9,r]79^+vzemmhWccWbW53;~	 kb5dL%(eRvl:I<	S?t7L߷讄A&rd3(636Qmu=*kBy?qv!;{\83?AߎLz=uǶ<-HD23.UUx,zj2Vcju鷈^~0gBhJE!VO:cԗޱ,8&3-5Ҹl>r pyUN%:,˄b欃%u#ON(ZFJT-J
T:V?FtULwN>_Kuֵ
`ICZM?DmA'
~/|^ݯ5*&{PK
   \c  _  '   com/sun/jna/Memory$MemoryDisposer.classR]OA=)]
@+X-VdDH}4uf[GL}wζIS11};? <C)p9d{r$-OgQ!Cgdq
YD&Æ(/CxF R!Cz`XX4Cj-%J4::
V8*jVaްC9hek0]؁ Fҋ)Cp;
2Ml@HFjn=vKFMݯbߗ]O%`z*<
vH#CWgzxFM>Q?JN SS"'a~mq}W1ڎd0_
<E^m@
D#mϡ@WfEEg^Gxi,_]RQGH4J˅&2̏Tv!.1X+}z
Y^ P'L62QHL^MؙIvz#pDv,2(PK
   \s	n    %   com/sun/jna/Memory$SharedMemory.classmSmOP~VZ`N+:g	w?Hb2t~\+nv&4hG*n==~ӈ!b	r1nn}tÐ_`Xj62H!DFE*C~^؎d뵎_Pۇ5ĒWq5LdU^rTq!g9٬uXf(/pglKx+*n̐
i9k;1c1鳅H]M<wp$
CI2Zt-o][n:ܳ>J*ZV/;w
r"`mZ;CIGOqb;z-SuiArmgѭhX.'"D
YQv٨'HFW4~5:y{.ܧdց02#hA<Q
@VS$9LHZ
ӪHHc1tfE\aIɁ(	]@^<1GhV#Bo՟(uOpZBTLUZ&п&BH1FOXx_PK
   \)   +     com/sun/jna/Memory.classZ|Tՙy0<HH3(J2</Ix

Xu$LlEEJu}Vmm&@n}nזڵۗ]Z+νs3L~9s9w_":#9=M
;}dHz
0z{iY}YhK:V	W#<ɮ.=g*[A]n_c5~(CyS3;zPYYBbx"&QJ4*Ld%ԛ!ʪE{{D8LiFh:F/	GTf\՚CeTFt
ӤLØ%XE(F}Mͤ<tFV8~շ%
6ʌFi+^OJa"헁CJG^:G:t?ͥ! n=l1cZsE%xYnup҉kTCK I<]g&Ao6BݡdI֡rj_@_2=H`i)Պ,uLŕimInXDB:S*DFjiK&[EѿvdXOkhTPD@*Hբt!DN=	^#K?@/mI} eE}.%@[~ZE~
Q:4$X-odpiG ,6ڳ$lӼbl2]SgjGIey+?f4SLFBJI!LpvK 
o8V8*p$m*2]W0HLFuq}2	5K5S};4fu^3Uf ASBZ\u}Gb$fߠэtSN{4cA<ZSt3&ʷǏ(/{(lNU ~KƱ}L#ql]02TOQv;"D雱`+ҽL33T[]h
>ӳ3h= ?䤇NM˫N}J\JiHMp]q=!yj}H`蘠^Cz`K(|j	T4z#9#y+666VsȠ'eSFoh<tPCtVg
V._IKCyKgqI1+/IFoWkˆ˿/SF(j^KF~S%M"S[c ͿțϤ~.^{z]Z!7+~M#?#VSCetIo5DWKO40Z}DNƈ٣F^*ݟ5b 5FCF1I;i_SYRWح`B1iNeca.`~AuhVիb+VtIʹا8J!])'rԆ<)Z@:Ib.1dSř5cSx*O9p!tgpgxꌾ-FLOq?e89Wj\%_0M `Lx>G<FYEi.d1BE;ʊ:$15/᥆@)VfQz<\ZFQZ`DY%x
ʍiIFhr#u[66^jqDte@FQX%ZqJb: jxtu&}jP_1r>F:1eGTse(ރ/r[D5U''D`o
%Ra}\b/8W5d$Sd[2P]Sck8M~QMi5T}(31K\s,jg,|zQ|)RȱܖDrߔŕ	c
 #2ѷ%xբPU!✵f1`z?+OrQ'}zk80圥#ZUk#6W%­/-6=Σх@fp'tl԰SEuhG<Q̻>֎ĜqArڣ*X` CF c@E"g	=9|Dըْ^M:20<4FPmqəyO3ͺ^S|)h\.w໏hyD
5"q'`oBs<4𔒗h9 k1ۚ#rav1
єUC4iCt*]@yf U?Os_"A:cK󁿒HgRy&yᯗ{!_CV@(FomF_}+zC3O,CsIN|`Ӵܷ{Ҷ/iZ|VvMӪaZ6Dͅi} 1H{.6˝!xaJImOӕ
FP w8[A[зvN
eC37jy89`fYqR̦%CRƕ2\x4còHLi ]SҮ54Y5KV"&Z01X^1H_[G 
ǼwZ΁	DVZID- eo=T&NY0޴Aڭ9kkm.>Y+v!w2++v,t(TzJ<#>t5B/AB8[
GXnF ]wi=L{(}t)=F8 mt
k1zZ<hg=mX#O<+TPJ->%43?fg*S\KP+c>#:|	CiĭUgJR1=V%b^12WATg)!rû^ߦ!M+e1p@JM}A1 o}j/|5U |#'Erli0it#w3͘7Y-~|*!t9y6"u+1쇟+	4?5{a]2/vToÏޡ9sjwSR!Y35SF˿6fln4bSEx8=a&
_`y{?T,[*$ꏰG4	f!?[Q[żˤ,kjF1_7wV-ZnEI$/Uh(6zDZRԢ/}E_FE?a =ݳ+~N|dA8/#V~:g,ǡyGNlɂq_j"/΂q_jgo _-пz?_ Aߚc*b'BIsRQ4˨g;}kOb[N*fj;AIE,m;myRQ4˨NYF1?~RQ4˨0AIE,UпvRQkz*ܩ_/ѨQk'8D|@盈rD.7vQ&
4ͷ@G7ALм`9_v̏qJ$
3̳0??e<bbÛ>'XtM~̆Y̢`~JOy܆ f	0?c6yS~01WEb74.ѱ|iEp8bVScIٻ♂s	kS#XK͔XO*3:NETșLJېWc݌237X3siƴpEk"]Tb.9>!.c_
'tX'xK\#gq-8bHPyy&AAZtc*Xjw\Q`qXSs?(SF-,"EqHT;Ž'@f*L(ŋ)exb_u;*N⠝ (pSQ3^EϳSAJ(s2RQv'p¥fRw)%1o&z /82x-1lqMN%d.5pj7.uL8z;4XY/'K<ZW
+rZEf䞡R]WiLfoT)S.e#7">@vߦArc=Sn^
l7/?߼we0}rz _h_ǣ1M&Ҭ/~<}}ͽyiM؟*pzӜ9iepd*@%&t(}x13*sx^c4aux?~0.k]tS0_6?I(O5.y<g
xS*V$=^'f|PK
   \%+    (   com/sun/jna/MethodParameterContext.classRKO@V
DPP_	o/$&.B	&e1,M4&(tm|ݷW `
	FI߳Fci
$NQ//y=DŐ:rvqc\@8qVk1L32TC[Bn7VQvHp?F
Jq>:"!U
anGEC(2zDU̐teWL>!
fZm4+8
{;ؤ뙢gh(̒J>ʀ\}wo^6`>|XGMfsiQ tT"JZ!%,kle5hE?Yy%-lDh"kPK
   \    %   com/sun/jna/MethodResultContext.classSMO@'&!
 
)h%h}KL+*,Ƒ5~UzG!.F
I
};y3v}uԋ
u/:I*N7
"Y$i:TD1w6ÇMwr;'I˝o}}Z^s((0ëQPGРv8_h1|P1X@0,a__x?$y<8Q@GE[@eX0wfX~2Oʔsiս?b.6/*mbZu}4D7йSF^Qw5CE,.':E;~w	\~>'d؀7yE'LU29jơgmZX*QܤY^Wqh՜\OC1l&̞z}PK
   \KX1y       com/sun/jna/Native$1.class}Tn@=ӄ8MMtRL攝BT"'ΐv[!E |Iʂ%33 n 2!0zfs3`HmZl1$~iJ̐5CZֱ`p+
sjވ15ۭ,6
O0F$CaG86S~0-J%L!bGǡeW8iL3?/7
7+Q`V\#TVUGwZzq)l*4y%{Fsm=E|0Q`N c9t6&nXbr
%2Xb'<Kr0Ծjv=Wl%}[FUϽvLv{ϸS#bɒ[=4bX(Eh}Yw˙0e3T~c`fg5$=K 캡g'VDuIk-Jm;]sds[_',i&hK'4idYY:4bG(7p72nH]+SLfYn`.{&
\Yi?L9W-hvw㖋-Z&$]4z[FY PK
   \r
  v     com/sun/jna/Native$2.classT[OQ%r߱d!BSOreݢ)b0RlŴ%qݝ|_~ xBkQB[91my*f	|;θDJY,AGSaX>0\oɜoK[
QM	Rmpbr+ԄhhE3+ex+ŉuޱ'%Lfk-("DM{/cHc9WC~&L@2@5}FtbU6i:ǒ0yWL:!Ah-+]صd1iB3tfn9l_s$F$arv8喬iˍɮt5s	kK/)C'#[m6[-˶!О7fhyB+;_sW6U	@[*Ժȗ5;P+B2CU`o՗.׭FWn97'3AS3ʖcYU*7rmK7(SKWI&~Bɩ/WhԺ~6',JFs<
lN	##{|
͗h	t'?x+o91e',q
bI֏rxP/QPS8xI%=givoċ=!hË\b<%YS-B:x/cJ~PK
   \ W       com/sun/jna/Native$3.classmPJ@=&j}ETtF.Oӱ'IW~%It`ý>=! ctWE	]*=&6\L8|LZx9AWR/	CiLeZS>+-""L2+{IbRMiy{hʤ.Wʵ8QC$b>(CX'vȓ>1U6$~xwq/	噲䀾c<ǩ(ݾi'nser	cJ}A(`Oze
, 9̳1ʒd󯑣8tK,dZEF.gf5ld PK
   \u       com/sun/jna/Native$4.class}SRP]4R)z)^(L28>
&M+?:o~OZ.cY{W@#CC?è-Yؕ%mET[FCȚk3勨Sd.)k:Hva,ACH3wE[\!]
W/N1q+Z!t(615˽C73	"YG=-TBƷ߹*lAëGad4-jɓgC,g;Ts!ը#~Eեp$;깛
0aQ,1$*N]V;#E3ٶ0uG$':ɍD0P	)8qqb:l7|}ge(;I,YZetԛTg%UF&K.xVx$<H];dFf
)mͦHw4nftZ+@'-r!ygjU&p"9ޢ{?@%J9bҔ%}D\};7+*Opc2ӊFIդ3ĩξPsP!#eC1oW[E|8,LQ<
(5αKO8/A8C<
sE<&O@)+XEPK
   \^t       com/sun/jna/Native$5.classSmOA~qp=Q[P%%DG%OR;%_012] 33L/ xf!
=;>Λ4Cϒ^fH[&zFN@>"7
za1depe]quhf85qTV2hZbFy\S
w{6=SR'ĶOva(ظQы+'H})}c:IZ}-qS^D
SZEڜjK0Gk)M%/͈j NDW-OXW23zGF<V0v1%P鬿yw
-d3ລROt1e*nKȶ'3hEk	7@[^xB;"ѽuI|7a9GyB%BH)0ܠ[."!wo0Mno,V'+Rdf/|19ܑˎdR99.]R0֑3^`ƨQMZM&%)Hg1T﴿&DqpG1G	>$xJE	$_PK
   \m	       com/sun/jna/Native$6.classmRMo@};qp64B[HJT_ TC"q8fS{7
+.\āB:>Pڃ=3޼z*aQ>WT>\T=x34|h*bP{!4/NGUkѸ -	C]q^	FgPGHr5lX"?7\&Cn1
JEod"OE#4@*q8OGBQBp<9ZuYtD6jP83:D9%3$aVbZ@C>+lck+K){G^8r3v5H8,\PUJȱ]5CC>nZݦ,(Vw^пfϸKy܀{O-v;۽9Vqz?|_
%C<*fm)UZLCO))kpPK
   \
:       com/sun/jna/Native$7.classRN@=׎!BZ$ J}(rǉ3J&rƒ$~
H R?BcGmylg=y~WlY!o`1>U׹腂w>؞T2g-*^0pD9}ŝuW`֌II-Q|CLژA?)`kUP7ܷI }ٕJ&/x'oP,=;J؀%:klˮq;{):?Vl|?GHnSĽc`Up*ԱR"<y+T\ڊ<
j,>Ρid	69|Y_ü,, sם&7I~|By_	gޡdޣl>,iHX",M_}4j麆ݠ3
+cPK
   \n       com/sun/jna/Native$AWT.classuTmSU~nlvY4JJ"ŒRUhv	f7{O~)?::jMJds9s}7O-Da j]m^imW]7+MѱLny*nzedU\Y[e8Qj+=Wjq!99Zzzl	4q
	0TEݪ=DU,, lc<Hz9e^RKդՂT(Tm3GXf/X+,⬍W5ddjB?
ο,8Pѭ<p`T	TjShn՝F)Hi"ɠbRVq%Z`ƏzY%
s6h]qK2x45U[OVEzz[6CRJPf7bW;#
ûtS,{nڸ#I 
֤*YnI޶13ecg8>jc],X{$vm-wIXWN7
!:mQɌtr)U}T:幓3?9M7 w
AYTM@'<MF
)Ԗ>/7ZY
:ux}>RM@:gZ2{`_K驷aezx1<H40IPrd?<Tm2BNgu['{8?=3O1zpaҎK뉱=L.%x#SLbf^阉:<	6̟e+o2ǈ.ncxlEn<$֩
Zu#F#x#|L"_	 PK
   \*        com/sun/jna/Native$Buffers.classuQNAp`YE_oxӘ(	at2kA?y?0gD!f2o/ ka
)b(Oۗn0}RGӸדyfʉFaH*<	CuEדg?`(UcZc'iH
h)Me+tepi4MޕɿѭJC
G	Yt=OưWgFi|T?&~mFq@	S0Xm?\yR~پ2Z aːc,N`>]y!d3cR.ߔ{	X,Lsxן{0W;2VW	ג֓hq
/PK
   \zBf      %   com/sun/jna/Native$ffi_callback.classeN;
@uc>xm)leldux(q+
ü| 6sYxZ[ѝZdHaL*dcH{4W!0mP,$Y	l+v85FCBVU[#Z>"~0@?^9!zOoPK
   \\a  G     com/sun/jna/Native.classĽ	|T |ޛL^BȰ9BƢD
$`B"	 L` ɤ3ֺjVԢjj.UjjjZޛy3ϖw{=l;~ 8x
tm))kS=MM^5<&d
3ٰ6>87Y:ܽzJ>Cљ0˽C3a(3S:X%XOg8`RQCǙW0(0`	#dxf	Fc!L2(#aMC|usUmݢPG(n{m<Tuvz0HXc+qq<@t6WET&LvszX<EЄ"&C1!kh0޶9_
JoByg$j@9#ya*L3`	GQh߄u1ȎHO(hʀLQGp	B%SGw"Pg(nrq&̂8k]PWOpbj=s/́*PMrb᪵6^pw8>0π& u8աpw{dC]
av
)Vj	
 WGݡ8H&Xŀ|6#aŨD"ġՄŰ&Es{;J~u#&O_'2NfP(Ѷ=>zD]L0X͙ʠt`] nlÑnNTcqw6jk%jd*h3݄t 20P'biբ&2L\
1*4@mw[&1IX7ٝ@Μ셵΀N8Z]ۅs63P,\ʸz;DMAܙWf0*t`@xK<AQh6t 2l4av^֕'T-jmMLtA.LsәLK{&M/vƭQsL8Cf8h܃J.0BZ)4qH(bS2
9L\ HGuuJJ_]BOM~[
[V)_Uhp}UP
\gpHlA8b7nFEBA%Aug0C-o%h1;06{z;a&@u#ZhyƐLP7!$ pwNHӀ]&M!ʜp*͋Fٍ95乽vC@D:J#
QC&<epgR51ZL9H-ᮞh&"Nk<KM=#@hcP7Ң&4Q3MKxxpBF,@<`BKhH/ƖTdx^5&~2PQTv6ڠ^cRV
PA{}-HTh eFKu oo	-	z 9!%M+AH	o۸ۂ'fZ;	H	ep1?$1?q IrلY9C!iUS3
sR"`; ?M| CrtQLCc&|	_e$2Uy=BlԃH
&|"1Z2#Ɣ\c&L`؊S^8Gk#L72
u*үer\J9ei(vi"%,6W4D,A|0O&rEH:п<M1ՑvŻj\!c#Qi\4Cs\Ơ(&GԖY*#":#i`P0d2#dMVJ^Z[L M2PVfrJijg\qlɦQ~j鞽R;ؑ&;`(Yы_SdGc.䐙DCXZgY;,Rח08l6Nr\z;;kbTˎ
V`lBSmFE@Wo,X
=:m0"( *'R,HK12`A15XY#&cQ:gC54UE?ahf.k]X\`i+FUiɖ|`2P-Gţmh,؉YBuŋjWV5ojmj04Teahhm^X/A@'Bj7YTbWl
[ogBt
%pa;,wH˼dns!^zLr+pOO+/c&[O\݃`gFmb[b8	sKK$eJ˾G5QtcsuSY>IdҷH	Xm],e#5!4yE]jOQwx'	`WWH3D"JFdWiX4YJ<ő:.Nq-i)k@":CZFxh/^f7$C[D#P\&{1"x-rʻIghevkm
6iv{v8m;Q$`eFօçYP.ZB9DK'
#Q/C|pGfn&2ٽGY5F!To>	Yhlr=>MzdҠrڬA@a47!<lrD&3M$#Ia"H-F4sPKƧ33?eidCV"|A=kO6v+W6,YP~n@A@D&'|d/p,04M^!_jf[2ޟ04
lJqmS$1d6tFi`o&{5w(Z8lwUM{&{ֺMp	CIrd??|=qabO>bbhxQaCќ:(qdUq_D2e:#3bMMϑg!d_RM`3#BM5?+nFa=EKݚlTd==i@S>5m=\"Z{P
7F
J<γL%f9:gk#کAKJ+I !9
VDJF!&#!%T՝Aeܤp4+rI(7QeEյ+# ~0F|4G~2h-N^Ezm!kO؃0OmWԵh*GH0b&
+jϰױѰ*X(t>E$PqWl3ᥨ"rp)rO!UO3t~$f[j9}a
f1&?yA9dgYĴd]Ӽq稌yuM^>W|^ʦʼ szhƝtʝI`N0y
>Mw'5g*. @6\pՍ&o")2H*%f0D221/o_l%|L'#Kt0MqM۠}E
Hih-)ާPN1oꝡմO#kxJR,WXQ"uW׽<ט<Zz9~)Wzy'2x#Ǚޤ:FΘ>(ӮF{=|/rZcedk*F&®b"Z#O{Fc,^N䚗0wM~&	c=
E:	3@5!!B~8iT<ON(F3fSa/ ~I1؅xl̖M7&Pe&c15+|%Gv06ЖWh(sS=Q\efd1D9=({zk'DVo>E:_o4uһk¸*LՖvloAӾ{8ym@\)܃08nZNi1مݵqUZK#q%Cg7@w;|3&Fc8Rj_ir~PDni#=b=_=!*?`¼ zha*@QSO8d]I%{ɟ3S~sßùۤ6M<y*'Ot=%TwGvW-n7*P0ipJjb?33nH=
{_\iMV
<
!JIhLsGX^MdQڊD8cIg3HLy3v5VaDP[+'&2;"Ynxv-A,"'Q/H%mϕ]htSh@ο0"Ǖ
V+.U_;8&oL2aN#/-GbZwV/*^k"hC
О)մqZQy݃K\#w#yMm39kcc\
jՑyЧ<S+̋Bv(5vpS.DFmM1rQ\gCI5WVWUP򄅍ha8t^Jnq4ehք(c)UK[1iyK<!<^5)\bhѯFAtGnKU*Y!fB
-ؽ8G4$OkWA4|X8o{u8%<bDzyTx,\5~)jSD+|rNgBe5<GM Qo!ӠԺA6^Tr4's˸:wM|;(E)%Zт5c4ŜG`g5hڸD}XTFOꄹQ,*N6)T$IId8F̼m#Ț}1!Dux5΁Ԣ|^k
+m`rܑS Rɇ}@(3݈)zh>I3~"	T%m/ %֋!68A#guS<%6чS"Z "w˙)L@TLq>vf)l[m,&Y<}~J
YBpQJ:#AlbC&ҫB7dߑz.%	R~b˩kfºZsY9j+>e.jՆl-&ؼbֻ!M3Yj4p~!2V:Cr7bYj#H)[MquBUSMC"S23NX]&(16Sl#hmvRP0ŝDG$Ewby:Eb؉pBZ3\NP.ڈ)X)*&L[
[

͘ℚ|`	V=fe(5!cHmĕ]`PcO(];6iھ.k("v,Gfx1R;ׅ<e3sY"MuRmwoL+ja:oϛ"27K(F.;ی7K)hIVb\*OF_1ūc!DICڍE&imdFeW䣿uSA>fSt6$y82XMio\ 2X='
\F2XڪG|aZ
,`e:V'*J23"En;7q>WQ8aVgz $nLP~LźhT`'mA@z6?m
|*"RvfVcDK/ jC腑SE|*ojʬKAGQF>3ci*fSP63Q)%>S1
,OĬsC|a/W)WvH[1uv>Z|coMEPsFˡ	JfJ.4v.rjB-
"[JiC YRY^SfSy=`4<Wԣ\CL':<A.Wԫ@(30'
T;OaU	s Gr4́/9
N|GE`LygEP0*)9@oLGbOr`Jee'&%'j%R%K%%~G=z|x4|T{=(|
|HXGb#b&{\Ϡsؑ*cʕզ@#lf9ϔ	8C\R\JQR3ԚIM@6X w@ٲIDa@<J.JSw$rDM(XmH4F+ۇX0Qi;Mu=TvZp<͔A
锂:CH
8=q)>{P
$z<UO$PMmG$ךr$+ibT|v\9
VkYD5e?e5;h]CK\l9\t[hMN_ne{3L])`=	`˳L=yUϚ:Rv 9@6s946pQZQ_,(bCFP^dh/7Ί=2wfRGl%FND2Ei$/3O+ɞj
KA=)4'tC^*[78`>S^#lym١4$Pffe!e|L|m\J:yn1孴kqvyJG9UU[Q~!-_q x@A\)Vը,i)̺Gރ֎enhM!=)M;0HYq,氟:,TxkU$51TsI '~S> <z)
*w?#)FRy=
N?l#sS &)5Ķ!H)FWB>IQxEX>eʧ%ZގD9~f!ϥ	TkbDotLE>`gbfŴ2.":Th/:@H	_ȧ<[>YGtlp!_OW-G(vl4#	{"XnB#ϲ1>6;]q[eI&gg#_~`M<Ph	;`+Z[!gS~LFH/(*Uu;'S_M7w"B
fkHml{?)MG|ʠ֩:/1yƺ1YvWט'v左G +.5fj>y(PPۺXoGI/"բ!ٙmBé"0^SLC,AB$__뭃Z
PR@Qds::̵|SiðC+ҜNDMmVhx8G=+(H #Mm6d^r1EFFæKp\M:;W]
A6M@{+6L[l}ljZ	U1XH[sW+
m
)f"% U03Ԧk#wi<ضF>.WSۣ0
h{>/ЎEJFh3Q%Lz|FWd*<,T'y$xSnN{0gOҪMFmqimЪ+Ɉh'"%VrL9>:)]k4&m!yG7uFTP~΁
ӼZ3AZ-&АLgGQe\[+->a)SSLTuP"NK٬+
m5+F)іhٙPgPQ>>ǣhŶz4?7ցi?m
1
ڢ#%ݣMWQa^CpSHOh`y:"dQGʬ ~{F::B` <k!+Gk	$BgQ԰G4.1Vru.E'mGCگFU0-
$
F@ $[@[Ih\`j5TuڨtX.:Pgwi-aa|ks2Qn6elMQ.\ؐ=Χ<f
#5}]Dtn[Wh[Q+bbڏ舣i]bb`ohen{KsբjʻԮp5RΕ3;Y6Ȑp1kmE!^]m[Cכ
v ӵ-MƔXuRh}nU/U5 f'v]njԠ;LXݙ 
m;&Xnv7JEUuM+ZZV.W֫v.SW/H>8HŁvpK7NnSc]0lۣ=IAc)a/	Eƣ=jo
DzUFP~"3+d$TS=Sz[4PcU*GCs_)ϼqCH}~u:۞)TG>`{ص-Ddj):}գ Pƛ:$[DI'V^	~Oqx8CKCqjMI~{TLGz7;.mxfurT̕j*,Y.Ty:xzl/}#Y:ٰq6]Thr9E0A#%j8TC2NʰBBZ);^-AY©G2кK %kHtDd@ 7`4ӄ@W]I"uMuuSdƐ%+7,nn^Fpmq);qG),!JXglQyKIlIU]ŊRAMEVrv4[rSRԙFo
y
TldvrimU}ȱqE
ꪆU(o%ʳ6U-KЇhy`##94Ygȕ5MZ$ZC/"'Qn9-1yGuo¹
#ڂiZB9l,%M^®M
cs\SAdRPӀdUٮ<!՗Fܩp>Φ@(zVAuEEjrI09$d	6ai%.b)9Z+ÎSpQQk肯*:x	T4(֢[f{.DȞ~:e79׃P(\pp9YFrAY%\5EEzy'*M (ܑA`${`EML9]s_7X`ҘD6E*]E60:Kd_4 [Q_QMɳOʳTZUzK
5GکSޠSVF2<u
nqᄃ醡ӝ 1E9w.E;;)HVtqМUg2M.)CLF(&aSr5{#nk:c{R GGó$B{;нGdlՙņz]̠_xzВq;bQjR2S;wȪ>0܃G(_úǟ.BF/9^ b3v8)gS?M^,+qUͲ$.jw.rB5Bk03e23yۙvyI7%72;,_wZ.쨵uk)c;AXiK{
xd`4i"04eM
VukʹIc0h]杻ɤeG*k,sjt$Ƚ#.

5!锰Q4H:`.QLxE/[<xMvu.ܲIj?[UxXO[éwƁtN520Q.X#V3)ThgpiV<h"r_Byvq!Ot:)k躅u]:u`ATU-tnoC.ѸYy2%F0Aml_NvZ}N{}f)J؁դXT8LHPÁ(s5C I5%ñg/)qlЅW+=@
i=FDl<쐪bWV+ӊ2u?;RRsh~!a76(>_I\
Y_lޒ^j}<@SԶь`>0 &[j̄[)5?Y <3WQM?q2bh.z+BMTLR

g,^@݃X2QK!mUv:-)lqOH!jx֭kB񥇀+\\9'C'8P']xƉA$tRM&ᘻ,F~
iup)` ^dx
{3!'-XL(mmQ;t=b1AnLf"}@R.|M!-:T;*Xt((=p m6̎ʞhge[.éC2iY__B^ťTJ<U#
%q%}+1"]̞%*nkmu^Rnau
5tթ=/NlSmá=iΔ쵃iN~÷2H_6=VI"o&(W+PJ*Z>Qj%JC>iRխ;>R\U?P v pdxVY)5}.F
P35>a_eSתH'LA	4K_պkZT@T@@U/f0rиV1
_j눮dZӽj^jZYmΪ BlQ`{{I.
hAeR:caY=źGj=HicΤg
`9O,1lq Z1hj*yXΚA;g~Ђ ƙAKPIou~=ͥUͬT{lk;[ݠ2ؐl"}'*X,">_Sh})_};úre	.:{	SNuEg:P,;zkT[hKIm@%N	yIcWlҨQKDO
pz@;,ӮUI|(pJӨAn>Vt{Qm$rWMՅo%
7
&p\imQrgm)Tng%~H8]׋a}U99Ԕ
ۇ
ɴL
pq0
8&_:I?J^|*I5gz)`~ T')R|J	FjrLX[NtEEP¢'Ev{yz>
O?u鿹?\b_g+9I6CwE|UV=߲,{绪|y	?_Hx#6_cV~_uHRǯ"%5WZǴJ{0J{1Jqs1=ĕPW:>Wz\JbJ(Wz4Ǹc1}+8Lw^#\鉘Jaz+]Wet9S1=͕)YFZC/LOJҏ^ׂN\ӏ`#鷒Ksq~v4GS&*ۣoMl/W!ˬV*S/F,nzq'+ \/h-LA)8TPoA
M~,ZdMTfZAXuq,{.g@x	P'sMCأ*|ӱa\|3j370klǀ\/N[xBUpx?L`¤~t'ŏ[ Y0٩VB!;
<tC
	(flMn/"| 5X *̘V5V$U'<ņw':e.(>_?t	=:(kbm6~+
u)@%43O-L~b*}b<*4-iv;VC)<"bL_dOiMP#Ė9etN6ȦF[~/AcOV++ԗ	࣋CjUk"ļ;*B8nU$Bj5҆m0q Z{,-di[ R_{w>86N萍tDߠ~UfC.aq5
(coLG8
AB?Y
 4)ZXb6D\vdй4OʣOS|.g'AgpQ:o\e7]@]lk:=1°1GnϘY <t!]V,F%g~"B/σ<>y>`z0T)Ɩ4'zVnsKU+D4Ɔ|I!u 9N=z=(לz=QNON.N.Na$4;ݮV*+4{Ss-iSg5¶^YpJZ67FVQxi[͠oRkYTlGTe~ai.O鈪'H
n1Na.upZ^υ<
wM(.y3LPC?	fe0/FO|%At(V#Y9%!RNcqMoaµzSٰNT3:.zSTfi){.kV=jO\{WI.:]8>9z<1
zR6hߒ|5,mC7=MߘP6QcpB1-eh*7jl%K5\#R9&q UlVwbzyeGg_5a*_G`2Q҂˕ZI_ז>x1+IhyCa	']S}Wm31kQg(пhkqYHZB=z4{,|X5ff(:Q9IGs6sJ>_`J^7J^)_<o7Np:\J
h#YIKL7B{=>@#u%ݕ7d u%+R0yGhE;u.S[tD?P
JFOo*%o?>QXֲ2ǲwPK6>6ZMM~'&w9+Z𿣔'JJC1_1KDWp"~[*Joa
}0UX!"fJK(@Gh|/UhH,maLa藳cm
Jm_i`zjSOJBaM3v4tGU&Z~6l/tLOTP"t>bLP$C(R1fQpUb,X f1ZxX"Hk!?E<jaJb |fկ7𕨉k欚<ꫪoTo
q70_6~Fr
[E=CStj%;cS^D،mF,T.GJ,B-QcMbOACe>VU?
7!#C+)!)">Ja"~YnЀs^T#;Zb>>aϧ>W&>0D
ťBnʰ5ֱ%@9X**VfA
0^TZNCXtҀtD"։S,|V"$G,'
xASb%c"w rD;+	F k{BߌoqV9ַ(a95
ׯ%STpJ)ZSRDkƂ5VL[3WĢcTv=ƥ${aL$@v4n2@)-hS)tQ2`(=%E	o'd.E(1(Жq}pV G;8Po7(nL
?VBDD
17+7ު;dmyB밨[-֒g&r|h3@ȷycoo춯Ĳ4Nۧ:VQ
t4|1J?@\^B/~/Iumg
&z#f;]
U۶O>7:YŒ*Mm:F,0D`|{bd<qcQ!oHѤƸr0(6?`,Vqkź]1	vF:)މg{'ԙ6JNt8	8Kb6tx2Ð觺y ^3NKzA!bg4=i*etO?,	Y9PD~G.JQȹRhXut~!9V|~rv@tqC	55RQB
7.?)ca7asyoP+Ԭ@`/؏e( ϶Ǯ~\c7V\ |~vhvCe%wf>_nWJ=cGw'HQc{+5Ϟ_~~e>f8/\{)K/{կSvV	cow7CT>A
rSa&_c
KM߯ T_}	ԖiLmqQLZ6CV?j3s }vg}\lq]ZV?l#ue>砖.qbM6p^ccXkU>i[<G"!Ŀ!?ȳ1k$r-LGZ-JR)!"58Sp2^Ifm҄d/sa	Q@e06FJ8vώlykY"v,egrv®-r:]GeǲGe%{Rb/"8Wq:-_#ةU1"_[}(_oWgGsy0OlING0_HI)ۜ-= v>Xz"^*/0&Ȳ0cL(	:?B#vẁ>\KoA?]$!Dж J9|dcS_CVc+^k-dý"v$,WaOPD4A>>٢YbHm.a(NO<YeM0S.D:l:y"4Ep\b$8].p<
 (Wr5.Cp@\ypV"78E=j@;߈o`5__@_MЯZ{-qD>^˶ bيP#1?34	&p,焳=8ˢ(
D.>uv6ɢ%w񙨉Qyϫ|c7xSҲLN1
/CB*Fm74diMUe6EKV|Qמ_%U5'%	z]N*t<
X))S`_&jLrUFd#AHڪ^vv~|K01wT	˔GUckqzՕp\-|4lPBUY>>~f)Q/XF._\oɻ
{)ʰJ]AѦ[oa)Qh&{U~)®*=,$~~#߼
$󣌺k۝=^wTf
g㻖Ux<3
}۾P|󇷁V(K`Qe6hJc6_P$\i& %G<
g'_aSL7QrYb.+LH]_qdh?1LB	Ly%,?SUpfF^7k]ʭ>@c
>wBy7 aȝln-z 
ُa=-c	L>>{Os|||7x|ȗyLoKj~|o|| o?	B~	bX̐bb]WB)A!0FhGfy(qG
r6
3M8ֈ/'I^iE2#_*CTG̷OOƞc+g#ap
U_C_<k%zaoO/&`WPoj槣@4دa݇7c1h򐻏6s}
?|Gut*9`):zlkaҭʧU\W,YV=L_ۊ	W dЀ-YZ,%_5>n;b׮1x!eeŻ+(DP^_){M名H0Q6jZ q0O'j%D+ZIµ_)v΀\g0j h"_<0Uy4-'D.ij~vm >~n5/,>m^&J>YXZ"
ʀ\4q>S1'v4y)RYZdzBfj-p
%ШMڲ&qz*}&ZԤ[+eRոG'*(rfi-|u@adOa7{I}R6rl95F$)*sXkZ;i0U[0ǃ9RܡjO/e:\
{Wè%ů;Qۨ*O0	[hBe"kLBe|/-0_"dʉ0'㜲>7CD\R !J"YDRg	Qm}OLj
Xٹ>qJi;-p[m!qlRrZ5+8U0z<FTu㺌 %0;0Z#5mm#ĵ3Lv\
kڹЯ]ojû%ORR.g+Xve"pa}o(
[ޮ79wjcTt|;Vr2ބgLP$S7HJ"LB9þ&}0
^@

XQK]Q1/;-xHZ[ONm1Q.cJl1ӕ)H);YkcWj",jNIjh3X];s- kn|m+țq݂q+uR/n-\xPx+JkfSjOUJ\\|(h-$ht跹mg\X-go/Fcv3.5bE,MuXˊδY\ۋ)WYVhW"
MRr$F*LU~DtiaB;kѣ\"p$|O{*Cg"ӄivtijWԊrރXWyg_шߵocQ':,d#ŻwnEFc?
4c;{UZM&Lk>J60v([!8\y硌?[3uIbVx.q&k&WC?#-[|b՝Ri:MGh+^ť{ӵahހ6Md]JmA{ޅaG+O	}'}WrVs0Y'/Ebo K}ێ	T_tRloەK	
NNЯP]R	H%OV5z蔽iz9ISدOD%?YMإ{ŭIN,)1#Vpv[Ӷr\]XQ/n?Gܝ`Z//Pv!AJ3OSq{UzpȪo(i,3[T9f+)-Ӊ28K'GfFe4hMe<xaR\$x"cl
-*u$E'z1L2a>ӐO%zEKqHM%1?s/Ti6(h
haj`@;*xVՈ;Cz)IW̿axb/T_[%`xUh(}hcxy/2,}w
ě%kQTy;	}L(clu2>TVOT0Z6zP__
S`gOZ4 *}mУw@\_
p.;z$7]#2D3{QGU$A#BdXoCs+j~i?89o+?'7+px/tA-m^exiل?	g <
C$HΑ젞E_-}@dr> `3Q {L(_(엹*|z@GwIRA`zqlq:ѹp~>.P0'A\$oT@ɨA1_Aq+ÑyMb7 y*B׏^Ju1B#Mڐ]\CVrHD$10}z"دf[`~
ua_;1fq 1ӵ"&j,$ⷲOBƝkpbpJXDIaz[Ϸ%>2b@F}ˡb(voc;\Jͅ٧>ӱ'c'0(huQ;;HR%ګ^Kuz-3Tz=GNszzA?PGHtL9$>,cw(4w0YG"ݰN((?Z.; kwP_"XCmzS)bk.II~#e}?RQ ݥe('q۾_r9EP|/qA>	0Vgk	7*{cx#ێ1LåqȱQ{k(@; ^cFZ=Y쓓H1SKp-rhgJYƗ= NKqv
-{a_> WRf:I+VyzްJ6I2.{hBF\nUD<Oܩp Rй
L;IV9ٞo3m=ϻ=/{{ZMC%Uo"lS':L,s÷'mçBc2yCҊbJ>OF }LPFg/!5(gBVE"
NFVҎ)j1c(>8gBc\l*c$l6Fi~c<;ʘ6`D6˘Jy6&yF13JX1SYИGnchT3cƱ"c&8m1ffcӨbwlQv؃	㔥P(zp(o#E>m
@|m+E>خI#[>?%BC~aå7EZ0ܤeņl2ȯj|}va9/B6xwda,H;mlJIOtl_5.EKp,!I(՗Bs
lmެ]!(^@:qkw1LuÖ}cQF"FQIP۬pJmcR9}2R%ţVRSYYp(Ț^{ƆYZBu==ή4DƲ2
*|!d
82ϟkV<r,g_Y1\T(NL͡R$Y*
>/O9R|7幬%6Jֆ<W2P~͟X5F?{hM>GN۠#DmRT|y42}*/*

[^^AJ3>/̟P@pT

F.,7R
))# $/
GVDa(JoaiW`-Zb=xN;6F?w(ßh?Ѕm-ִSYǱLW]o
fw>
ٶoq]ݕޔ)vO)NO+E/ܳUt%d:
NQҏSlex>>vh?O^G`O/oîWV~=L7b@Σyض$]ңyaɓAbG=hdW§Z%B"/W;?g?_ll8lr38#Gka	K.Xet:|E8\azPgCw	Lk/߃WYqqq1!{̸=a\^4`?eWύٗpq-n\'7iV~q3?ѸlیxƯ7w񧌻N[{DxTg<&.4~)n1{ţU{9W&6^dYa,kW|UYf5yy+Y#&_4$gYg|,j|"61gvKP(saȣdwC1r{a<sqcXRdT6~|2{(ķBY&
|+aZ~
Wȣؗ,ZN7F)Eh'6&[Ҏ8wν	KB	% 1"(j"1" *U~ADj**hQ*/y<HlZ?>J[Jc=U[=ٽ{=rݹ>`#Ѥ!tAhxYd`JBHKRj@bQr!
څlK:챎ʑo1"D?8 Җt<u8ǎyJ)#V{U|ivf~$5cBQefԌ1zT72tމR^Oeϣաl~2I˳J)y6}[ʗ.$OIe%/ S{Rybv2~?8V!Y]Һ=>o?,	yG "H̲*eϓqǁ>A"XUu*G
;m+z-zKe!EVN5*CPdoQ١I4ek@,<8^1A/{Cad(sWe>A<wdS;rzR"U?\&mq0Hq[PWau3	.P8@8)4'z9AINO} `?
i0|GZS͊eI.멝v(s;Y
%{B]ͭ0
̩r

{Zy}Pw1ǳ%\(51V2L!%NjC5°ULj!FҎNN_Z.qA?'9pr'N!\`zu}t!9Pp(JSUuYH/.'*nqH(lpЎipg:ϕkiuu:UUF_tK3;Hb/$xW$:^c
VY$wZ;yf;	&x)i'ɐ#tgE?Ls^kQotWk $lN龕'.JDd͌xhsJ^tOg͡8.Q~iu}JE5bVׂN?E#E_3Mp!TFG "caVީx/O Of*gYVGjX
/s.rcCaU6"_āʀ8XSyx_veW$>6{Ȏ}*]F)/FoY!{.1s_)Eu=HBkjXtrw(\[Z'Y]bAȳhg6tqn32ߙP,Rg!m$6Hnةeb.g	!߹;w&-D\cR߱|kn; /
JmRJJb(4
ROL[%.dJ&|_?B
p"
'
/
/^˓dL<VF%sVAAAVJ+	F\).tnSPை\ҩ+L,e?Iu%^_'1ρGeN!SJfL' 	8M$y:7o4&ghbڵv-]ibڵv-^;7k8Gg<\JI~9'95x{HwFb.㾣]2 tﵸXX;LzBnAq);fDI\wNdA	1fSˊ*ZQP6ލDM=4F$9Niw!$hZv$R`vT.
O;uSZ{$s͠,iq7.Wp~
W5|*|XGLj|T5VoޏiZ;5Cd1zӨYh}*dx'TW	7*6AXyr*7gVX٢Ψ-6@ }R7oA_ms@J}P*Olڢ'rb&Eo:ت	\gXQWͫ<e*zB=TwJKX]1pmjb;)6<lx`&߆gODԹ&XM:tT.kʨ, QB+2Nv۔%1ywXʳ+CjevC@G/
ȱ:Q^V
*4ˊU	kfk}r2QyZVk|{MSZ#W=o/+&~= UFsOS7[.VTΉX+rO6Ԡ`ITٔuZT.kad[CAe5-W)iZYM˵jZQhGnQY\)6eZg'rcT>]"9M
Ȇ|"HY[ BA9I6U/' _QYU]"( wZTD%*_	blY%j'v\*muAjEp]?Tַw[P{ni\9o=+Lsk_PFCZ`fU(A?R0xJ<DǈE,%zʏ(qD'V_9gBoaUs7F	ď,ڜSQGjy#d)}0A
W4x`<p
<Y4>m$/(|I0Yp͇c~`K8['ÌG360Đ.sه,%sdƳidX/e=8ɧ B*֟Ogl6a|;/`|ZVd=l0_Ί*6?v&od#fvF6VYlR~/5;F[[8+"k}u`6iM\_ȳ#ܤ`4>
lǓa2>KbܟSײ|SS 	H.A
*4EcaZ4%ȩ$L_Aܬ<=0bGy
Tee7 ρz<x ֘j[7ۡ`Gul_7H#6Hy:TO׃#xpPG _uϛr`(_g	?K<(c2\zW"OiH໅C:Z&{je|UK-J
1|zg"Ѓ(k,nr;v;!>૶+R*o#nNj!? FmPK
   \a<m    !   com/sun/jna/NativeLibrary$1.class}RMo@}ۘJZ(I[GmbUBHT& R	im/FHQ88QM$>J{ٙyo>v~SXBÇ
c9Q.0zUZ	4iCIXPhldԗ)6l7砲{{>lG:Ҟ<*3`3)+݈Q$QLrzZqDZ]Wt)_'zeV<_ŕ;m$MV4<#'s4(2eꠘTԮÿ
Tr/L%i_jTd>/lW |eG,KUV
^,phݤggܢl:)(y q7p
=
?yZ{oM2]e}!O/PK
   \ř;+    !   com/sun/jna/NativeLibrary$2.classTMOQ=*PEږ""&5L , 1ym_0CfDvnݸ4qoЅwLeZdw;sϝy?}`N]A  BC%0c̾3VEA-<IL1=JL

t!W:Q-j/1$/*cѸ^lڦWy*Ut+FЃCO
-{4
=ʇч:C9s^EUL9ZMlTT2!baQ[Q&V0J\<{ɀ3#֕SZ2
eJRN4^%fgz(CtM{F7i-LBT8 nFq_W4nYٝc=5M\o
)용oQ%,ҵC+Q^T~^ϳ%MsCſi֢+Y5EEtƵ.K,^U-ƏM^9[ S!:Y1*9YJ8r^y-u0};];&a)Y~5Q3K"oSp^gZ~a6ϼ8g:"y]lVX#Ns:8Etuai^6
ߠ|\ܠ0n2
zQܢMF#-DqwQrAܣ8FOQ
)T}2Bδ(H"%1*(øԢ`BjP9CMtJ
x	xGPk̨0f=WI#e[A?@(W"d?e`0Uls

PK
   \  w  !   com/sun/jna/NativeLibrary$3.class}SNA=ӭvYV>DQR*~a	&R45nW:mv$>
c`4|%㝥h;w9ޙ~pRA7q		oZa۳v=nU{NY.0q7Z7LyqގUvJH0LdHMب:dH,	OZnfS (O­;~8O]01aୖrfBR5
k8&?bu%E㊉)\=dJpKp/F
L#㺉
d"m'bQGa$TGu'+6+~3XSi7kNܨ]M5!B^bHUŎe;pTaZ9a!W꥜
^vt*MGCUr:ou8UJb}̼B!q!mȆ_7i6JԣBǑ.I{=ΌB{yN0tB~6MtZ>10C6]X1G?E94&h%57s'kE9*V-4z7:`&}L LfC\<ĥ(dtǸ
>ĵEFH	

jQ^`1OB}&]~bXF^>ӑ_REu7PK
   \`    5   com/sun/jna/NativeLibrary$NativeLibraryDisposer.classQAOAveZ)BUZ7dDHuLe.$o&3y{׷ 룂 PC12LyU3ԟjg<?40Nì0p_TEzh=ވ$͔%4Gb`{>f1'pMX8>Sٵׅ1rNzDf.FCe(e2VxrE	-A.w/I	(pÑM_1iacK-7@]Cewe*XcX*_u!MA&Cuq
M:[J_+!.˚:g]ux;t@9"sQ`~ /:OG1֏Kj 0\ 
Hv*.%8:HK[FpWZjc
PK
   \kk\2  d     com/sun/jna/NativeLibrary.class|	|T97`X4,B2$ BH QqL`d3놢ֽ.Ղ;.AqALjꮵumui-sߛL2ے޽sK^<S 0Eu f
@saOa'[=|Zo0x<^s<k<~OpײrF:87zNi@2_xΩTAuxZ[-&d
=x>4GD]?=3`8ى0$+D;:BH[T!1Uk[/\	:a48cZľ񲢇hg3`LDH]
[L7<'qaϕcr'&7 ^8&VyZ>.t8QLjk	{-aiCs :!xBtzt2g
bl(&a+}0^;S^3bZxq*BfPs$iF0!#ښHT
hYmauIrСҀ*X9d<^:b3oipU[s=3jXKwZ̲ͫLedgi13΀a93V=YIesgV8>>o
uG;x"yFЄ0xIYm銚9*VT/^T[6t1bE(i2#W!hcZЪùWU$&O?lTj
KƖㄵN?j'B|eڐXM0	~ȀyI@E`7X	y.ds<P/Wr՗#&;|rHP4\W]pVǽ;c>,ex,R(#&o
7K[rNCoK% E&V}
6Gxy`JZ@a]-ż̀ҷs_Qx
ÉiֻHjj"=ɲwDC7	}:oNhԀPdÃz(=+:a+ȇIaT/P8'u<`e
C[ثîPUZV{9xidc@'%[aAX.(=WxQ>ˀ_OJy=UB:<E!vig46$1K~W#{xcP˼5aO0yF6dRW/J/!h"4gX.,ΪW^obzVi[zf[
ﰻ!8BsDP{'OD*f3:<3|LLLr)1==K[ByBM>o#`芀GqC:ژGhB"܀/ص24;WaK4!MSBEY__5|CXGMT
:N
;o{'&ÓE6>E8}ȣl7?l_R[!1Az#{ϓe*H7Xbu:l6@<BuԆ@iM4/Ω˭6ܚ
zVRSc3Z	<-:
Lf3=U=c<48S{n`4t)e4p(	
		LL(&NZ&:dwhbW
1౤:=pW"1ErMüAOCxYbo(l
(U$/1%ۆ8y)sĿV+glsЭ\ҖVO&pv aL{Ñxca$"y٢u
^X ;RK &.TIA	<{ y)g$cq'R򄪈L{zgxh%]%hGB,Å6r5m$P۸;k3#acN)hkcK,O8ܧ
Vѯ	g-^hB5LJ7É4<GDB2>_˚jo/e|`24QX74r
}+ۚ)i ]pK<A2qa;v7rޓNǕ,4\Bׅs"nݘf砌0q`d%<Zf
[
<]Ga:!xAp\06\cZ\G=	<Ab;^<^D'b,pr/F{@3%?HG)!Ia@)I;TH«C)
Ng	tl!|6
QԐfOk
1Sa[V-ueLxq VMCTf0˩x7rߋxve%`[
|^,a5^y]>>jǲZ)¬Q?>;(e+,fqDy@`{
|"e;Ӈ*+pE94O=NK
|sԒes/[QU\Yʮwϩ
}ސj
)xlN|c@;Ezkfk0oK%bGƿY3w]yMbVm&laYP0
X{\Hh}K9yl6!?ccRD9#S"&	!E'X\P&YrSR'g?/L5e;r+#
HM`A>~Eb?naJojDbI薬ou
Ek7%QqH'}] aB
1LJQjY'uq_U_P؞-~WZHY͞Y-pV7^qb7LF#DT҅WZm_8
Li%&	&B1<
aj3ik%(SXwZ0ے֢2dLy(	ljBN+65li(ih>Y8g%Cc]_(S.pNqg eZS9pqyu紆'/*ks
9g	q50K>YL'b*'sI΍vj,fb&Aos`
Qb!y~qݓ%+XBErg񰺘O|ِ쩃IMb!ǲnx[=*ry^8]NXۣwce
`e USg!jP&q^RZJSTu8qW2B#
{9>i
k,CP'jcpCPV B /
<A|
kbwuB<q!Z%;V[̤&A
y{0O8V^g2~_!_hoOS8(ES\$.C\".z*!YLՇ<8)6£yL"*+M\mkĵ
ħpf<>a }IL/Ξs$įuá#ԦB>6{z"}v959q!fЊ, '^>ڪk9MXjdvClPAp۞ҘC<LlicG
U8cP
j:e/u'M]1uCt۾NʔkR]]cZI1Gg#HuqC<e`C<Gy=> <h^RΨNqou!^af+=6ч̸L5z0Tk)7R2[ʃn7ěC:oC?jM=Dsښ6.zx7&r^OCA1nK1|{cR☎N|K|DA3zX6[zBL:yV;/副LBVͰ]^sxS0?9z|ap];maocOC|@CA6PGNxQCtKiΞ/ӓR!m|6,|E;/uC:TWVUKxL.S(M
dJ%rtCF@r0oՋʪ.^QSv:͗xCI|PǨT|?@N:$ᦔY0H9p6;X{xikXevH_fť5^b/>Jkqp{MimR<2X&&mmbVY{D
O#BtSHr%!9{,N&j~JCI@М-,ҽ<PA!$Im:q"*1\f9L#HEu6,EO	nsERr^ExQE+^EZV̘#H>SyM.2d5P!.G|$&L/o|e$Ѵm?~|~J*3Hf%cGqS
sAjnKV,.KUՐ E63eI˟Qt0QSOjZTd}%B *`5OenX.D?]͙oħȇ0֧FC㗿5a5	z$֧J2$-p=Ybz/'w2-=Z6H/ɫOR/
=gĒ>&	Gϕִ #p|sz#rmw
fcsz
-f%5is ѳfޯ	!hI
».|9o;,ˑ+;"mVrrm?9Vώ!_sjD8H4bYsIl9ar*<w̳jϷAkRCZMnPGNEoK#-)~tsh0 yO`iట'eS\zѧHϨ#oeޟ\٘a	iI#U>GSς̈́ާRs?PPԜeUUFOgl~F?ED;HB'f^r5
k}!%1Cc֘]pid,⫌JHlw>U`W=pGX/!Ȫ3
0,3Kdz֘琑RloRe3
jLъY?UrY@,JLf11NXRcE^k/ I\6ц7xн-杽^uX֑*fz'.zE\|Fbѭ5#I-3BG}2~ҤI$u1owz cSOV\r}JyN=Y#3?H </P
*gړW.HD0P
a@uB]%:D=!W]XGcнKgw:,W60Oգϵ4߯cM4!h<~<8#s9VoDuLu{ )P7ynWÜI?s<~f/j|w6Owjқ4R4㱻!wC;o7Bw'@0k7q셅.3P	R]&L}7vvDB?
"qR;a7lMtC$X$$WAptBK&P'Kw6lRzȪ+r>չWB-=peQ2w_A?ONƕ~!a˹}7j0~i .pip"lp	¥pl$ˠ.'_AW5p\Ky/^:4-_8)5 zHfa٨TTwJx|Z,룍%Ԡ+I:jFv*VI$ϡwkHmr5W
5`Ak:dT0u0%}<Bw?)#t߬D\&9ԗQB<iaŧj|L2X6Ӯ1f_#Ծ@xӺzz^%[vf$RwicRC]>vR"-:vnKodS8 ǺuE.e}\8]]}dIt~ g?@6=fY<oyy/w«1t&Ovin#iZR[ЎWN㴤vXZO&wec TeCnvo.槭|i\|R!g/ik'K6F5II?p	77Wpt3DImv<61 (?`h'rw|w'!f<55ENMLL.#3urѠKԳAQR`	iKH31ۻokk{bf4z8ZW`O҂+&]QY1\9 EU'n"kvZ4jJ2\n(y<Ȗy&o/PJًӑ#H4)Je&+m{l#w6kTW5!HƝ8SWʾg`%g|:
Cr΄UNu5(0q']?)"
>ōtJLD.[i3a|kZ. ȁ\w,M	X]ՙ$ a=<Gy
P`}Z~K6L+{>=c9>/_	/3G9s
_[#|(]hHh/1-f,8"AQ\vq#Jq3jbē4:k,2L,ar6&2.k%Wy(y;#Ǳr++,"oDJrWb<42z,]lN\4Ojqv&5,-hkpvkw,ǹ.,՞yG8_h2keb
_0iVH&ns7G0.M|Kd P+)C2"ȵ}DiMp\'Sﳐ+ϣwSp<ImxSrC|yo䅄$$/"\C#	.-~'/&:;h*r{BLf(3p	͠%HY]
vFu8""x$|t
:T2>NϡnR"=(Zn
xKѽz&
<,qwC1
N	3:(Ust,pI::#@@	6RRUT>1 hŭ=	#dnM֒OlۃM
H؝a]ϲgTz<츂V^O0H
f+HAЂR_po+&o,fEuVRҷ}\@ׁ7l"Cyul^22,O땿Y
&TpUO^DгN
5uZf8&&ez">e"-=5Nai.[>aTP^HG~duu J݋Wrv{4
8xy5F?f-8υùp
l$χM87."<PE
5̖W*0:B^MmrT.גuE4s1T:DR~)al5ӹNjTd F E6.tтԶ<2xC"a^߁7OeWKU޾	y|WK˴)-gc=2z$)<ywT
M 2k!83<
'oSP*~.6[:a$BQx8țk/va3a,pBLkvS7.}mLIa;q[BÒ./i?VǆoaPFNy+2UQN.y\!<2Ϫ4a5T2|JI~MVUĆ;ٺgg晩g8 d~xidȆ{qQ
3<J}	D\Tdk;[d\=j3T\U7̄4k|_xF߿H_q<G|;s
^$|0߄	PJP9>\%]1<_?3?'f4WQo̗"۶9%7ͤVyi5lIBހ{JIT 0h9,L!laG??nz[DF.y"N|c;EzUřcYݖNZ1va741U1\^Qi-aJJeApY՗N|LQiQAB@}HQbL$xZ(2bʢ6Iާ<K
S`-ZVUF CyY;ݹ\_?o1&ƾQ<ri,zm4eV #vP/;"--<sB޸1FEftuٟd\v9L[싧Tȝn=ar*ׁB'1F-xtfX,f٢V}um[U鑶pC{;+hTȳa8̖GM|Mbfx)Q*|GwiPOvo-1z]prDB/԰GԮdufAH{gVgsGw5E6~v,EewQm-'Њ&n.KcE?M5M4jfnp@lshab%+V`8dfX*ZX*ӖlP㲞
Όnϴ6w|R 'tNaޤFqcĠ&
i<pFob\v nK7X"%t[H#RW3D*E\"͌)	!P`r/REQR,|Z/dE^i@b&>h\IetVr{h+UĕdgWǸ	ѹ'V斀Ch+eM0ڻ O1e>v☄'E1"ȵfEjkXe~"l\m/tvpv1fZJa>	rXlǡħUd*4,=b|yvpT+&"TZ5\$<kؿ"+d9=1j	{.~@a9b+oJaOp`(XB+86"(#AV`FcIIO&QNM15t
1S<{)3G-%r
U峊O1Uc囌S\n|&gre~"EqI~}`&N#]0g8$=NOp
Z]oDGaI6!'N)vA
bԉOE.Spn<(n20BF8a0E'L:,mw37k%t<
TVF`h!kvU3WՅauZړ$PLꄨ=>GG ~C>&}ʧM+R`
*I;Ŝ]b^]`( XU^"C˩Es~a3a4@?IeHc-^'PLoF0
(lV9@>Xs7q9Bn2
̖KaJ!dbAHyb{XMsL5意r%v¸7T/QP3K#df:㷫C<Pf0)#E:ib^nw_"B0_E:5ߐ/;T_Qߑ_JZG|<`[E 2.QAH x#vĬaWP`ah-r7EkZ[ś%n>b]/{qfEnaź\Cj{>'qCݝgANsoWculabLzEK|5Z#T)UqUύ̔JwHO+ۃ$eIN8F&xi֦RNe,LpM8e<(cr<,We)̅(Ʌ(֒0Z#O9MI4t8z>+N+VźQU	;@̟9RSGg)ytw(qѝm3$N+x(+'SFt)0Fr* ly̡r,$+_]g%$Kыe*hG8T!UaK"[YMKlnqyU蕔z)gVj|gr;G*KNH|qNCmxrXpǓN伮joɮNqtc1v띐<ܘnsQlr
r>$-XYٔ/ka\FifuF.lPz`wRF^'\	H΁j%ςR,ʕءf;c|a;:9Pz$1.-$K$lxD!$AɷW,ަQlwF&;e&] +A6bo;
.]f:JK2]07coZk-K]0h!/U} g Ƹ*)r6S%".cDSzENaA;Ezc9C&>F-RX 6[6BZiB`b0Yr
)kGG3(Blb
bJ@H,YĲ$B*fmL	7KHl;I](?\1r؏r$N<J,wi׮!,lvH=nh{x"ClNճN{b:P)2hY2ʘfnWr&{g X1B?[~'˿@+ȯ5-Z*%W=Xl94bU4ɇ!<GᏡf`3m-9HZQfar@b;rDouw(	~op<S]!`(T[FʙTtBigjeu;כnFhOHZUʙ:ķanU;̮YhuNqaڊԝbu[}p\g{ZB&o drl;}9vutQ3p ^Ga{"('<L<송r45	34
J4jv'U]9 %C
4@KAiC*m8\
zfDwm&;NBtmDh:h$g @4F+Ȩ֓qL#[N*TB3U*yOD&Ed~@~Aĕ_嗱gE++y (Uð@uP'_%GudXoͿ|i{
a+WbOXťCSw'ܲC!!~]2nL	
g;.iP[Nx:	_"2=r>܉3pN=圚vAdhydrL2dN'/'瞼tWw2^=܌/U)9S>nac!f&'
ќX䖪t5"59MUSE6ۈN5Ew=j^r;"[=~|j;v[uCWpDױ	:ɄƩvi
\i!#g|!.s٤5ujEwȅOEcHj3ӦLdT\DU-Y	Fr+BsVnZ$NYDJ>~Z a	:UM:B&rC-
h:Ru-.uxňy5%_:x@^`vɛ]M}-~)c|k.|N>/Uy?/|/	._w"K.
b|Sɷę =&?PXgS<Lo(\/%5{|P!j;JMePzmVo>#SGcl
&z d(9l.Ō3t9DǦtU?)z:X/ue:]Suh;_li 0TMJ}?		0B̂)=OL'L2PK
   \y/&       com/sun/jna/NativeLong.classmMO@N)ڊBN6C !U(QlGgHV>gfyc~9XlTsxs9qd`Vj:e~+q)ȇyD/,Pǂ'Z`X\\=fE,9hX֜ƿ0޷YL%%bT>S.~<BT0jo?=!P=Jcj(҈81/vSf+70ejPO`T;H@|XO8^c诽d>ɶ)V*/ͫYdն;4ڀN()CT_.	{Dk
!-	DNֆiPm`uyۤ`xkwJ^
ְy?h`n^û4Sf&}A)PK
   \    T     com/sun/jna/NativeMapped.class;o>~v&F\<D}Ē̲TĂvFĲDļt}F\BFW
t>&;畤VXkb`d(ɇ)UWX> FEsNbq1P	gpf:PUiP
-;9Eɩn9@Ugcd`d`f fY@9@Y&  PK
   \&    '   com/sun/jna/NativeMappedConverter.classVSW=7	E1j| *$`|H*
ƢXL6٠a!2S:Sg7sw#$!g:޽o8WOE*L:͙iS
i1j33xoƜ-[gimVl#eg56J_E5TQnmug4s2valZOڝml[e}Bt3QZe2dEVl2L)-lK(Qg83a
^B5l+{BީbvL{.~V$5ԖAy>*hSAI*LT#ۓ6V&]^
:VS)}RKXn}mdLT
ۖaNqc?pH 8rgFsY;~48e$s\0H"⸄8Q2Ыgv;XZSy~%S%,\OU⌀&[ͫtW2
K	-N]+`5@3т!ptFFsÒY?#*^A	1}f.U9Q\e
q-n
2;+5iV_uxoRhϻXm	)Sa%1IX\}^1ck>pŌAkKRaȝ)A+]qVN1~Lm
<Ur59śjW]½h_Zuv
/T0+8Z.{`fuy>>KֈkJh!
ԯEh^3h~.d,vCr<ӆm-y#Y&+#SV*)=eE]y\1X]Jҭnuʟrr]o1d]Jns*SW2?Ù㆔N'm 
vf;M~_(fʶ*XȲT=|Fx5}|b1v/3Y@`HZ.!8ڱŕ裹zWqqy㳉lA<ex23E^-&V3w(&-X˖;vԜR|>%G>Eʨོ:P'ޞ,0X	wD-yKh]@<D̣>#_пA2T^C}<kp"9[',SIVɖ	)aGRbK#S9Qcjhl넺QEэ:8ulE;y(]cJмsB@|9Og\ŧ	y>1~ɱ
^*<_]Es"y;}`@P=T9(XoC+2qZ\
ea|g&쮓yOǒd^4K)3,QoPK
   \/y    +   com/sun/jna/NativeString$StringMemory.classuJ@Icƨm=S/*w^x$>Z
~|{J2Lc[mDʋ$RM[ΤFwlQquPN!ov0P5rUY;_٘Ĕ"J44!?Luŭp{"q	?V(lK2=%zW"Rz=,Tf
g2s	_&2b}<V]l QOıd3JGQƙWf!20YϠF41V9s\c Ey?;k<^09 ;ߞ! `='PK
   \`       com/sun/jna/NativeString.classVmSW~.	dYPTl*Bbm_ !ŰH_m۩3t3Msw%d3sssι7 fxY}9^,i%MdC}0t-*e\ijZV_@(<$?yY[[A^Z ^LK3jqdh//i/bXzV2u5:x2ۮnmEt⠀ aKJ`p3#KJaiVY1T]!`KE#Fp^	j,>e謓]xG4'}R=B{pBI	!w<.b++JETh4>*\g3[s(K
8ӨvǭeRY"NC,4fpJ#	bJQﲱyp^	q7M[Q:G6		\&GV
\pcj\xC#$¸k8G̋vu	78ޜ\%E-
wY"'TGj[MIi")Ay	w1C|,34^wDpO'Od}.{;PY
|J\ ACbi~;#q5Q?A>&M*zPSЩ09P V4d͘%9tvL*-+)?g\PmTjÍ{.:-7ԙ0U]VO˒6Iyvе{L2NC%ِfGt#g)hΔ蜮7bjSZ?mzU<+)iJ!E>GRq uo'
M<]X10ht4i=}J$c:
EH5&_Lz41Z(;tJ6ܗvo]gU{d-oI){<z|y/S\f&aVZ'+^ʮŉN Y IVl@/#8GoVp|
!rq?}78u7r&^,tpNYؖAJ۪`c[]$w(<6zNP0TF SDmaNFqctH09Ro#:Ϗ>{s|aPvP6;*ޒ;
ǙiYk~$
F* P1ϛHֶ#m^@O\C;/^gu]
63EQ/UU1$3If5z0C4[pJ7td
mf*Ȭcd/kzXu	ۯns-kV{~mqfe
KFKKtm|#Ҽ`fs
EzV`tc̋f(dkjE'rѮtۨ;A?Y{cS#,V/OUW&;t͈ /4PK
   \@PQ       com/sun/jna/Platform.classYxTqѮv1!i`EJ<m+ia+ﮄ011!cH\	qPqۉIr7n$m&N6Igs.uUXܙ93sf̙3_|ɧh&Jb*ۯOM=:=&\pr#nRM*4#mJGGG!K3[J bRT!É.=((*U	JQ]YLy*4I66N6FQ\7S
Ͱ?p(4`LѰƌx:_K2_~R!ܴͧ@iaZ <Lhm=
1U 4z<8ғzh,dDgb05YV	qj^rX8y8*k֭>j,u!16z&#BI	&l0K.b¿V<Ebѐ @nKԩOJ~=@=^_{@IG)q8=*m^DR')ɑˎrB BI ^)tB Phdn'J
d;h[̞Q#FT
v'H !U,DD*&cfnPq&a
'V]6	'37PXvJG
%;"1=ЇEHFMGK5ucP4&cz+Uq!8Rn˘'	AWDp/[h,=9RHӟ*1LOv_'G% djzs|\A%'>Unz>4ƒu>?USK۵F
7g*=B4K2'ÑHlx5@s,3Y7Qs(Bј0"H:*k:tn6zvQ/k#F-lGFc*}Lu9B7#M3դqx8y(u
]`>rPkN((ȐƱ1JWuWpαDY DG/}iLQ|85x0?˺*=K!үxquQdfQ禯ٹFnGBF'B/P<57T;zYC%ur(]/T|KwHIEѕ+W_ACzK@Q$WjTñP`"?CP0LGM'5&3KVVW??ØQۼ*N`
"o6/YEP"m[*-ڂĥNFw.ɁI<hlQS؉ڧZOm
CEt<c
¤x;0awhSH7'TLptnrxy;
)\	7dGV0XM?/k
[ƇD*+=IQZ?Mn2?@TC~Ry_zx/RNA߆AWy 	bKGG{o@Tno
\&D0TxP$*lR*XI=tuXQۚ$V7IZ.iZ=>_3*Q_mBKio{}ËƧio6\X=T4C#@"]]aB^[΀@Du<^:D#]|ɒmm
&+-~:!I]>+B&zt;|-rي>A#'P,w nɑ0*_}oq إY^<fA!!o[<"7Jm2;"`\[	 u\p@]ɗh2<jOA0|9TH7zzZMzJ}?"O48VN]$GBSEї1g <,=>Ǻkz4X~?E5AX)MN"Pf1+i'(6xQ5IEnwȔ|k-
Kûn=ivix x_On;]w{Mï~}@~p)բ[g}Qlwd$>[L$|raX"rAq%>i2p
-%<GV'YY`.
*KF<Enr:^	P^f$,˓&*ppI/ċ!%-]$7wd?r:S4%xi*@-H-.r: g2Cp j.e?uBYs3M/%xğ.^Kb)kKMS)*\W)[ETOlY0sf$MUOS]ygxƕ2U3R6.6"m1LӒPkʳڲ)Қmp{u6خmuFl66,:L;Ϟ!]وCUrbr[Dρ<.i!SyKKߠE	z7}ӷS5(26Ui[4f¼
s)Ӻ[<߇WbhȮ%S5hQ;9BK?B)fϟڕʬ)mWZ
Pqy9؇,v	^$<I^o 7'fl%4j0-_R55H'-&ޔā,&쇳YDkIJ)K@k]tژM}m6}ZD]DƄ+I&uZP^K	-R9BQ9yTZ]ځ;<*
rMr9t?|<dWd e3""_D3KfUa#F
Oѭ.흰Γ4{#%S@vNMbe "-ޫi1}B~79FC<s<8|NbOވ>h/㋥s߂`[%m6Iu-pӭn3Qv'tcJwMs4=	TkY'tT ^F.^W`Y*9.M*J+vy?v8d4oo#Gy'(~C}ct_^9_Y"H~Su)z	}ogmwM~gl2ȏ ɯeeC6_2]6楸_JgGs~$:MҹZDt3C[C? [=qsc3ax30G5o`^-Uǵ<WΫyס	ywVà̣Gp/G`q䑃nIARг)
\Pm
Z)hn=ǭi,",;h%!JߢEU~ޡHv~fw#ᄚɻY!ӵ^o	UL@nwLӛ;Џ@w$Q[^ޓbq}\*tȕ/x])PM|IwJ\2yo$ BIP$).$ZPfXBIYJE)jPfYURy86TiӹUKiNi^yICL\ŖM[*指k *x\ua059i|[!9&y<D^64]th1BnfCG.=tn}hn@=MA^!zQ;hw(i~F1c{3S>.jK&£8p
݌xm0!:|'n~ҽ/ݲ~s|HoSU*\eeq6.O<̚O|Ș
}PK
   \\LS3         com/sun/jna/Pointer$1.classmL
0˷M;@{l|Q 
>Aenԯn>ф$$`@DkweY{Wrc\ !䕺*irwn6W{ኵubk;	?aa6*' "F'x.Di#
PK
   \  p      com/sun/jna/Pointer$Opaque.classXwUM/BZhR$j)
H,M":M&t&L~ pģ.\x<.\p.\px߼IhwrzNޝ{߽2/х |0PfMirjbMT5EB`~	XvFEIP+%sj3Z))Fab%tǆ!H09*PiFwok$ժ$l>61~ȉ9hDn` $,?.<dlrswbu4wXBr uɜZR*lvhT (a,c*}$ku`t)E0Zl۰=1*aʸrYiGzf}ˉ.hW5Xm~Z1&rԋr *;FE)ap~"L9+1%&eST/XQd+j%eaLX61srmS)AΆ".	ŲSLf@29wOk|6gh3,H򈮩$gg,4UM3>jQrf+qRr-//^ǗQL
,3Ȑ-_,͙gx&̐!.;.
_w2Qa29کc-7XKKSTHъzb8:HЬlɒd%n.&NmfٛNdԣy~Vt'SڎdE0@mg0*Aմ̹U̥Ś٩@1o-L8Qe^7.P]4_6_2MW`SDvڐ]c'] -.9f
q`T4hb$+i*tyħTxtJvmiĎ_m'hdIS?`ȖDuDz\#w
r9.ﻂA~l |GtC8?}Gn"zj*oQhQ[Nd-6Q7.?o{Ae#G5}QU>F8\pqw*5\M 鰦pDF~ wp}+ۆq=p:*cm&~u
\xz
WNW\-B[G;꯼PQώ+/_u_y?W^
8nbڹOҏϷ>OaJ -vOE\g!sAFQ mZ	 ڠZ3hQYZ㥞l?Q1檲+T.;j㞅!iZ	{=>4[<^qzSp_q_%G<l㾂WIzmiae#kx]@qy7ܩIW-ރ&}o(?=lrpS^b
O#z|i%£8Ki@dJҕ[}7h,j]Gc }zڅ}҈;c		PK
   \ڮ%  W     com/sun/jna/Pointer.class|y`TEU̼C	.
"DL#&92$DB&&]oX
$
"zת[͛d~QguU_WuU7; `auUZۚ&4?;vp 8745g .H4䈂5v.s4yp2S}&5OT]AfqjC*B h;Mt`o]k#x'R,~Ad:dHW?xUe
M 
49l8i
M"$HtB6InFƾ̐#&Zae։}EXg#b-ɬSb-1Q}FXfXEu8hͭ.<e|f0
AkkgA%|g43{&p[;n5[up+WP
ǓĦ@BXZU.B,a1FQuvkk&FiK`8q
¨2/H^
tX
udmaC)"!zAI:,dwm
K#NS
q]5XCR
~_Xu|&)=v-@kmS4\m68]3tX
X=Jۚ
N5ӳO_Ctb~0 7\8PH24{!nE6FՊ@KA/I@rӨ
+U`bثIh2Ѣ3:\2@.r&6Xdk83-n-9cmp;cY,A;cEi9Apz]6X\yc:6|j7 <h4PK4aF}ױ4UV}ۑVh#KeܰIp^M`mc

J`S:섧
P1M&gNхQt0|A{B+{9D|K}u+ݰ^5FH_RyM\hnw/V{
2iim8#+WGH=m"#%vhf.x:ƭF_pY<vұN)<0rGbSC`Ra۲elY/>6x4ZlS^GO2c̫ѿX$_(5Mbe+YK@S*婳8q_kn'_lR5~6	}:|5]-4:P{ܛ7gۀ|phyV?N)yZYp&P`U)+j(th;cpN֠OQ^+E) L:ut--5*?щ:4s,_SG
Ɔ3x =|AV5MAt?1ET0=
]ϵ0
at;ey*am_
)
ɜ0HT Bh:f E^ztz:]&jCd1Ĩ	cNC,Lkjhj
Zۚ`38Cq0a:n_H
M2מϋ
^|d#E|&SGfRT&V1(&N3U1ELcbADq6
bA,f"gsX9 1cbA,5sXL\`
"Ex<AAǝ
rpz
d=xp1yhb?WZ\]7ψC[:9ۦͅ,||r5\@fJώ׹;JN3[+%hP>|Q>ƹ4[OkW:F bR$z_F[,'IĺI=xv)G˳\
؊K¾تmʘBxI_l^F{sK
	//_C1.^p)]O!+[1)fۑAXr#(AB$TU5mxw)O3^~F a^g!~ڀ5[{pS$.00&d'EC6}j\/OӸu>}(KFLRhH
az/
F-h
A7n$N
	DyCyCE	,6A)w"!ttFɃ&P~Qe3:>YE418Od'R]XV\[U]Y6wNnB˕ +U_?q!bKP)pJHu܋;kZㆳ:
)Yq-
hpķsF	4N-:se3@upKgU0U<*DOWeсP\/KCQqE<?|*8iǩa:~ͻ+E9?
0#sݖ}:9;:P %Pid)*. :^eѡ!.44JTp0[$F-ѬɺǩFF`&RYmH["]Q]$(/JM7y<b.2ӭʞ"x|r:űó^#RBC#5[Ӹu(xn5[ܪ$n-ܪq

+S"rhǶ3CL㘭Ũۋ|2QgU^C fWe͢/fWd5>"(/Ƕ@5o>Fsy냯[Cí*]T)
k&]8	V's/|HI!Fe'bO%N3Iv~њH?:E9sշj`JglX*orzqvx UcFϧAshlzGE <ޢV.i<)pj&)(ՊlqM!8ֿ:Z+Kp;Ůx+}..k0 
KQF\}LRAOAcEHs+I:|5jRvV׉}n3
Z <N(POS۶jڧxjEXkiks(/Ibd[pE?,[F[\r+-orUWRsj~`=-J-Ӎ#[mCh/NlK-#*CzɶH:J
9|m_Fp?b)_ m1Q"&ھzOxTNkki7EcGWV|S93Uŏx=k{tP=Rgve
-*
j8*m~:.	LىGdxS(+'Љ3~3ﾧL{e6̨աB8ȎuyL7"Cu#TEݻBrGVF|nN(jʽT:VtOxP0ϴCIWB,Z³#1.ƮDkU=1c*s~.?r85cʈ'1[cqg/W.e}6%ʔ\X[]RuS*-%.(a'xsF@['8
tC <7FwU_D7&l,kj({aI{nB<ՆQ7 1D-lBQ
P(naN< m#<JD@ 7ӧnDpaavn"10[2&̑Da=\XJcI E	=$C# '1E(s	e`BJ7m"EJ[S@<Rtapc4HZ@CL ?3]Bs|xxjsʸ2FEĽpR}~ϭۨ%<Ic@g+Saxց1pZhN`/aIk\'lm.7Ox<>a'xh.<fMn攮f>HJHFM1[ǋN3ٽHq2n.}*u6]9TkL2wR@Ĺ1dd(G֝vhln-	WrW()jy<ǂ{p%#6TkJ>EN"o9SyL"DBd~"9)^VAه9}/r'| D!OSE!Ȳ>D.Sx oȹ}1E~I..y4G}d9@u0r۶dr
^m7x5Rd'ժ:0#ISg0>|V3){!GhqRIH[^rk~i~Uj~ʍ)  i>5~CQj1? o%x97~ñ"3HJ"'~(?Tċ<D&Pҏ/r<7~xǓȚJ,p	d+g`K&RQOe@\nHuJ*e8Kq⏦j,g6.ƴ] شQ8 ͝4%͔' ߞZa׶j'׃rLrk$"OFPuaבor+7u&f(	A渝8Tgmqv'ϔVQ֙:24JEʤ\	70eQnVv	2e*QP&N)ÉrgRD٢([Mc8QT
Ej	^n⵩1WCs|je(tGnM02E:(*ߡٹ6A`Wbztyp1	e}^b]::{^gr$7MUmÂc{=		Kj|	1y|\i)<|nL`ZN8|I1p!Wv>	v?
4c턮|JYZj:#èQkq,kF0Uv"'wۆkazm0'R M0짼vNalllta Tl|lx:Ќl\pw<v92#</Dעhǋp"^yx	K/ExW
x-zQlmx[q7ގ{܋?
o=B&Đ!G1
f(G"jpb5>&bX\2|\\O;px$>%vNwYq w+紓  aE4y*>qڥa 4!^pL3U"#"$-OFJ4q
*}NDݣ{鹩v6rԲ'̳Kl3ҋpn
jCOo? iӧ'q45ʸإ.r 25x?*,j9(2 J5\K%Im|ѩ{̳vx$v$f!1ZST^+UAV_;"_^X_R=^qJEk'ScmS\tAW?'{A'TZ"&U <Ix
wh^geY̩,win%d&'?6:PwFOQװbx*צ~nNsj"/hcG9䗱4湤%h%9ȺMoNoBlBpH7Ww98;nM=t&L%O2yW!o?Qvt|Mƿb;4[Z|.w6|(~H#x?!o)go?_ڵP
p~8ã82><:]+\-|ϸ^8pw9W/%o. R"My͐*drQ3NȉXq#"`I.xvس$Ѻ0Gl,Pȉ/l:'XbP;ₐTgߙdF8Dy G1y @! rACԟ8TÅVO
*S| tY]?r!6jyvA_jؤ ]pL!M,it.gƴ3Z;񬸊J\ʉauX?Xa5h
km<Vq?Xް.+ω^,mbmb܆n:ig6ĵb}uU28?W;l xpeJF{MkE?Ka]PVV3KU;Ƹj~^`bͣÕSCQxS'ƻ!)X)VB>HXwӽM:z]?iacN@'1C岠\Q(|Ȅ*!()xxbfQ^/Lg>4ḨkxmQp@<LA#0=HiN.zGmJ\'\Qqy="qϐgJ_=Źf2{Uf*q{=%EŕĽAU⊕7_{sDŕ6{Ľĕ)q)NS$'3}oí=6Wٌ20:R`ʼ`aKf3
P׻I<NkhvkJ~IHdBүbYŖŦN.(#hOASaJТI%R5P3'I.545.juEO_b5R/ZTsQjQԢG3r~;|tG	]٫]iAMb3Z:#ޏLcML/#~cP{ǭjHvd'7-¸+2'u	sD@ʏ_4wz]ib=J[Z3C9Ӝks͉MKfYY.>9\@kLqҰ4Mz %VGmc7$TjⅺܶrܖPZ.9F#!SNl9re!r̓GĊSd,ӡE΀69VYp
BU=%!K	iQ?(dBx	#`Q;{2䅶n̋֍yѼ1}i#}2u;E'k\Jpwx'dYCʠ9t=vP9n}<G`RQnKr22?j\>_BU0R\qdܹ;0U0s;a ߨuU<Ua8˪
bps+Q5k2և0~sUJ2Oa<ZU/1Z\aA;#O*CE]ۻw%S׮n]*r}nVp԰C C:I"	uxBPKT%NxEɸQUS3#s
X*#Yb]iEa;TvHbCC0mVk<3bx\C
"+QcF&\	Yj*
YB2|Y7!$ȓCy2|'OA\^R<JarO˱AVـkx\7FU4,[
my~$WWr
~/B%\b<[I\q<_,FJvB.v1!QYeUbT-.ڔ9a̑<][<`]1Rٺ}@̎?mYfiOMM킱`R4KbRj&MLlĬO6+ܝ8ɰA!1ͬ3mJ,mlH0+L;:vHHY%fڌXZv?4+L+U{
ڱB٬3X^mUZK=<-s Q6X8"CKbLӴsLaUrCu2乺^:DN6
);X鱏FnrfG	INUNoFm7BuRTr&eF9m.jp&5:8slјgVYaJkrԯUUfW#'
wNuJ"?8E y	x0V^9rrW,y%ʫ`k`V(Α7%F^ț)j-6xU{\_;[y&7GލC=%C+ũW R8O>!\"&[x|ϧrفNK>O^Or'%.L>?g9?'n1b|Q,(-ń(b2$)HR;EI*9UL[TZa՚KUE])ެ
UךUk'΃5jͪFZ)E-HCrnGo|J?2u\83(Tǅ?UT:8*:8*u00U^CGWX^=t>j EլvQF9;Z5צUhyxwl:FMGYKw=^߈@H:يUI;%;ķM1ſ)>&W_zf< ?V{^mNp\Cmd"%YQF
	bf#:aq,vqoF6A=
Q|fVPl ;ij]QU)_ISr7jjp&^xY= ?Wej8ބofW`Ub|jPeHi
Uώ ŊuCOK9Em]D]|5ً&f}<(VԄ.ۊ	K[ŗsuG&+hخ̵"Z81~Ap-Dzɡ''Zn"7wy8"' .1LKl%6-D!+uZP7ZmXo&kK2+dhڊ%!߱M4zk4Ui 'qde) rjt3K0,NOs
i7}k'Hs:YAw B՛\6rwuxILL<`65.iV2c&ڮ<U0v
ۮZu]l7Y2MpmnNmjuSQNG7tzhXbZ֊V|:'&ķ넰cV_=p2L񠣋*zM48hS] Y7܊S\equF]1?tnj?LBacTV4F{ZRdSHJAMYdSx±CG܏lSEu`Ѩ_d($k
c~~q$W/=L]Qp2HpPK
   \Yw       com/sun/jna/PointerType.classU]SF=k˖,d&@!iIdǩ~&@CcRgڙ>\[Nۙ>yvZIg:KOt:Rak&{ݳwO PC\!$Ⱦ({`{l˶Ek %C0a=o
ǲ] նUjj%eh&F*i8qutI=4,
Xn.J7;2f4a^ؐm~fw]nRRs Gh\pQ{Fwo1k|iN%\&gozF4AW
dionǲw7&8+jI`8sjl|kmۦPdEY{\T	qڢ
ٰ5õ\d$ςe6ݢliѱ؟=|:_^\K<\RjSB+TڥqCe_8Su+x* PwnTb	k" r#`8:6uh>sehԺ4UFBv_X]>_^zATH᠙-u@?
wq7 NE\2	qKs>*EŸ*D0>g>#1Ek(@<dI1u-N'+0+4J>E"l?ɍI'a
{!!>3T1{bVBF$#k0Ӆ$e9νDV,B#aMAvYN~by&}Th5NgrϷd[Ҽ;SH ϠC¬gGgQ_.FB:,BG2tl\ȒPx0$z^V$GGEgc9U8"YOp;_(a0򿘑P5oߛ՟B/B]^nGcjq#7Q9䑌#Z?PK
   \FO    (   com/sun/jna/SecurityManagerExposer.classPN@#&(@@
]4T(
ŜEg
*$
>B$$Wcvf_ .b-UsďD\R?_s3c0ѭyhe$B)/ SZ,5C?ȁpg(?Wrfd|CMRBatsi_`81#(˜
'rcq%͂fs1HGU>efk5ޤhW:M2$V]ħ
n!WUPK
   \x3       com/sun/jna/StringArray.class}V[WWN.LbhJVm
"


Z3Z/v`ZԾ_ԮeLЇLsw$w ;v'ZVmSQԙLFPթEKS9ԞsMǤoLxnxzNN{$]%]vB޾P|t$2t1rbv
.W3!z|Cʦ<RH'韡+#ma62xxƪn{fcÑѾkd8ь}<B:Cټ\$ՕT!iTt'w?`,8"(ZTcnr'w3ʌJ)nrAW%%Ḁ"^֕*Az:։jO3zˡ*iVqF@XD:vl%OJ$C<I_s8Ҋ~|b}	#D"wF?CԖ40 ν4<fVJi|ANtN"xr1*`DDt*a0ǕA#GD2C5yln0sPn0YB`|#3|$'|:pHUM?p;1+eH=oF2	HPJ.dTR81CqCfIHiqQV$*Zf2aH9HXͪ8?hG*U8Ef	L:۟UV[biMRY0t6C+XB3]{Zƨ3PvaZΌJ)W}:!ƤMMUHwt&O;	trsK
ڸ.%E]mZ/,*w{IhE:K1$ggfvh3#S6q#"g<$~UW$JwQU9ӓ4M|KL[(8Hm4Lwe-Q#@6;n
z;gxl,COaޤQS~ۀ1z2'=UǨ]A=A@<9Sф棻xVO#5ip?aU P[|>0DM>NO$QqNpH8$|ޔj*"}N(:P,!Za#
?ffV׿+8-#xGX<¶S]ErhN_,ws8	3}ʖ#f^$/V%<d9D$Yƻ<a
-u`gEAKc
|!p DpgMyN6|Bi3bGç8lm"NW
9\<K"q#{9sm,lw۞U0Z^ۛb*&&')CMm)Uj KCg͇A1Dgj1\47т<>,/J~HsSyS>587
s404p>#.M9c3<xa]ФW˰bV2|%tO]~q7a*&O'&j@
i*xz+҂/
_3M}着PK
   \DP       com/sun/jna/Structure$1.classN0!};p@ZCG7ZW\p	$@1PRNDg<7L^`D
idȷ=y+.KRɨ̐^/dƓ8}14a mba#eqn+nW v8k[Jո­/"ъ ר#8;uGV5H}3QKs%	ʦȰ[#̗*A?X&!ii-܈5oKU?\q kG>K]WR5Eh}y#DPx4EHI2mٸ!%qڵ[5=t$/ on~>#̯KD\"籐Xi_eRPZPK
   \ϓ       com/sun/jna/Structure$2.classQJA}L}!fQΤI:Lz`K/

~"bE6t^UW?>Ör&gn{\~ x]1R![
]hۭ((D[kȄ)X-QbXL2X^{`(NLI&}ܑߥPɑJ\Îx#O%i3eȰQ'[6}%'<tR/6[~T?;~\ꝋw
RhgJa(h`>Y}0̐fdx #%2:
gf1G7KYKR
O00y;/I1,j8IZĻF
6Tk| PK
   \0=1J       com/sun/jna/Structure$3.classuPMO@}[J+AADp
WEUz2GgB|y2_ B΅]DC5]L]$U"bL*3-=tP
$q$i,ӋƂܗJܦ(L<Xx?|yFzcj|_N4h0XDi+ić3I
HKx#i4vP[)x{!Zh41y';[VLLuNN㠈A	e3lbksAtw^pM*YTy:=PnփPK
   \[K    )   com/sun/jna/Structure$AutoAllocated.classPMo@}qi	m-jG*
)T.Ez:v%H :Q{Ѽ\ ]%T<,JhE$Lsk|&TV+B,RBF<B\\0,<Όgsq@z5,3OYoXaqq!l~GZ̚>g	ۿo<r#w~'n;F$,
ɩ4iHkȓHe9X>;h@pD2;Kh-Q,T|?x`k|#J	ǧ\ESPw
{1cݠZ:alr
la^./LO4NXl-]KrowU;Vތ2.axPK
   \7^      '   com/sun/jna/Structure$ByReference.class;o>nv&F\<DҢTʠԴԢԼTvFĲDļt}FҢT̜TF>V=JFϼ"bvNFQ612p# L`Hs188PK
   \P]      #   com/sun/jna/Structure$ByValue.class;o>nv&F\<DҢTʰĜTvFĲDļt}FҢT̜TF>6=JFϼ"bvNFQ02Cacd`d`f &V0@r\l PK
   \rb}e    ,   com/sun/jna/Structure$FFIType$FFITypes.class[OA߁2,"(A+D-P *Z	[,.)d$+[vt/ƛ߻Ρ?`
oЃ^>3ƞyY~vN;tj0zzE>jىfg"'ؒcd9 Ciߕdd8MoYcXf4;mV$ke{8^&q	=dwjUf3}lcR]bw_;XпOeȱG2X0Q_n]Yf1o02ؙ9c'8*4}jZ+z>bwK;[m;aXb>EtpɥUͭin]s5mhNW-kNK5Knߏir9駯ȅf{-++V Ŭeq5FT9yJ.)]PZT:tF	cJň,")	[_Dу_X5ocɢ
<$@+J^A)EnR|H)r"(r"oR#A;9J)r"PE>E>H"w)u=O4D{xlR5PK
   \qK    *   com/sun/jna/Structure$FFIType$size_t.classN@IBm)
H9(C/V(w\8 }PgBUd{=lCއ">/&-]&nGWnٷg'x S|BL#$T2U#IF߿n!PTB>*a'Vu$ TLdbTEL9$̴bmж',`|!p.2d<J/O*N\v39={a?6rM	n&VRkؽ#A#e
cNX'GOD1P,okT1g9,#b\<G@q'd@8V
fBֹc?_sk, \ûLV9a|p\PK
   \
  ,  #   com/sun/jna/Structure$FFIType.classZ	|յپ;/$kaD$!@ %!PaH&0g&,Kj
Z5j7QqڪmUkkkhy|ߗd&3^_{{9׃ XDoz`]C.ޒXGdw_Rv4;իk@v$lܵ;_@
ckkt!x텑`8%o&xL
tdɞYgd?@,V8޼yF1:r10&9WwMsDq:ƋotLL/0uLI/4:%:
&}e&}o|>GGq}I/1/Ĥ/б0Y)4c1Rꝵ,ƗntqX:T/:V`'gI
eՎRYcsC@8.:`-ABFRӱ	c+&bٍ70PEn	B|h[]:P4`F[!Bf,uOY	f
5\\JMvݼ$N5_.Mh&.!hmX]@06ѢmlAv7[-tn5ᖈ(geqNҮ2e26{k j<{A;;Wkd_ 6<ć5\#5lUb]hd/"K>k+0I["Qު	u\#KV2ڧt\+4w0%n	z7ɲl P2H$Zmj}NM5Eqш?/!˹hу/tms	kpQp	/_fYZZC&ucH:N%ɅkaQ9[=qk@ԃu
M|m9.lYzLRTv8W{oX|9D^}%mOubqBC:#RF-%Ѩ ߤ6nj
wdo{$P+I{#уn<4<OI+>~ƚM;kU{8w{oWNn0s0h]B~G1[rWsvy/	~ bqck&
-f𒎗K8匈Hx_ j z=|Wu&|\r
x]o-X1<Cb
zj#M{X		7uD%!l
p?7[$d+g0́uPER;G⼅i?xB7þ~Gի7sF٦ὁLPSRj`WC]~ae?u 5\idNMCnb%<QWllr&Srqrɭ]a4u$F1j#]Lp`M8MF#TWeX9T`  &T(@cuʣq1.hgā3.K-#n=4&i4Y)4u-%ě@ӐiΦq:BdǹJPDBf,T VAg6D"-&OW33GSLX%\$2PECMv5W0Z5sby(Sfs8a6Htt>-
E5Y%i%RaQ.,ۙ&@°99\WHt-ʀe".7YܵTC(0r TⷕU:djp-amSHDt+@MKŮ7k]5i?fm=~i+{hnKgpQ%HTń)fHp$^ [_$[޴CI;<E0<4![Z.0qM@C|M{(^5$lc$ȮhzaeeI1nL<^獛$ps
Sf?Ĳ#kDNWHR¬1q.`71J*ʃF$fFFg9I2	DuH~z,K%#۳rC89gB#]B>>Y<!a*LN
@&LU9 `8Pױw#Ǻ?el`Y:awۂrGJ-EΌsvی5
VK|K`32b)s]=(hfrRᅳJzgq!/YC,uv_><++g7wsٔo
7
TS4\f$u;Gz01ψFIQ7ղ\{jqPVSQaUH&fx|b0$/߻_T3V=XEղZUO}#Xmi,hƂϊ0dBn#1lǹLqoEcٸ+EKN8^Ћ~I[0/'PRk([#Q5bm2]7HdOGhuI3:+z.XzM8oo*j
bJxgf$x@aog3$@f5=2g^қQOR
xdOgx|G@7ǟ37|7eVk͂Gyc>m׏^dB=^
M2zܛj|ܛnqoǽ"=9߹໺T_ZQ<2XTUШЬ4䙂bʭ;|!/(Sءa}%KZk7u~s%V8X1,Y.K6STnSO0|t}>,fgC ri+Rr^}G
3$S$PQuQYOb^)A*uRIL!XB\kHbQD5X4LusŔ;:+ͤC|~ǰr^気9p[wB!(/_ŞrQ,~
c݉	V0&Jo_/v!3_2G{.d.I!;:7'`Z܇ U;=]8X&inZKa7L^S܋8vi[Tw->o۱*l'/`_>L/|iҳ3*;}e>cA73n>,
yj;ƫ1Q]n{)VD;ѠآOrՊ6\vZ~ܯ!uON>?) 8eOPkh-RR.Vug(>KՍs@Ԣ(TIC_bI؛;pR.Fӗ02v8}N^gprE_a\U	5<͸ii'4y\6:iA\k)nF_<ὼQ
;hN/NPN{kk]wu;rQ鷼9&z7>q[QEܖ.T؊Z]˂15ևKDj8ܳPFz(48uKa;OC'Nxȱ7y-dibAfxO==1/g=ҋnK ;ξ^z(1x,7,(+>
Oh{??}]>N숗W:p
5P|=#&`]!}5C2$G:rr4vM9O!o8~fC㕇W.xQX4vzf/ڃ9ʃ ߜ4Db~ a$gHNɦu'OP&+}~w;89 \C3ch)Tkl4#K牙LM4NQ#:|"zcha/miI/-룕'.+p-Mc݂7䖖clP-շ1ZXuq
 .R'-BX=,nuwGqzzo_zSTO[=K9܎vzq;ZꇴY"egW/=}4goqVA+GG{4i⋦9At#d^١HUfRQ0I8OKN:78uAX3}F}3XpCG\6p*:;Uv,_IL31׭+>BA$+"NBWڕ4D 5UN{q]?`>oQܮvzPps̓YN`2JuaNa<i}/'V0oy!_ZKiGkE`Vl1	3V& )8Nٺb꜁XN=yOs/pP۠
|8OÑ.+VܻPz&2V䕦Ҥg6>c=n=)&TVa,6	rIѹ8zG^VBP'!b0NW!Ǝu NP#85ػy?nvN֭ch{]r.}zti&p8ɘB/,LSVgrRBO!OT!OM!OL!L!	(oy^J\U۸nonSgIPTsҺZEM'züPҺ}):`)iRh=tT~ҺZ]<\~t71$12c%-:
)6Ycu)#((<_e^>P&22ObT)v
ةZv5 񌚁T!U3)K͢Y<@Q
/ݠ|tC7bVs*<z]ͧw[ZhRUfۮηEbەj:UnO-UlsjUZiT}*{Z5>>tSRWI)Zix|ǭdgaebXz$1+) y^b\,C/Cw~	_u+?<+.7<~ǯro
PK
   \'*6    &   com/sun/jna/Structure$FieldOrder.classMO1
"4ŽxdT	))]<Q{C;o;Oif~~CAF+?N4ҟ8.tSC;'$Xʵ48[R<[iLSR:!t\GŃ@u%6շRT|Vb5ӔQ8{;c#QUaE@9&]Mǂ'1T
>FUCI8C;;T6@W(x:vYQὀ*8\ϜG TN!81'HNpکPK
   \B=  #	  &   com/sun/jna/Structure$LayoutInfo.classUkSP=M	
!* -JKyE|jf% 0Mʀ2cGg#޴C*&C>==~+b,Il$
%nE\R%h!a3h$e;g
ًf&T}bh+GJlkzrE9hc*kr.*:$PCГOdpuv[{eq`iÀkdh<RJtcA0Cɵ}h׌bbHM2Hn쒩DubJAld INoQy7UffuE"mD3Zڨ
ў7Yf=ҏM@̒R,5NF/㔋̹T,?,a&kx_,j*dֿ10W&t<UA7@	T:hz^rWt}a,jVr0estŲTI0|i34՝D߶4 
BV	v>5?,gCk3hRm:Av@,qP=	^aF+&t:݅ | @THO!)iLnJ}G?'kF"sg1	w]<onvshAu_CSOpW5Z" k4j%&?Db5gDE=Sό|ɋh!<ͧ:O{Cӝ>Dd]vsxNkQ	d}	yZWkN<PK
   \/?%;    0   com/sun/jna/Structure$NativeStringTracking.classnP5B*T1*!EE"#bbLteQ, }(sP*,<3g<72no~8RHLd0G^c>؉@D%]}=!^,	FG	mju6k"}2 6F٣ĚuMP$޺#+Mbek)op}yw[28-/b^SZZt憄7Fy"qd}B2hmlOEH}*7ڛ3f{~Fث0<tՕ	`~}NC(NlHXk<h&r
%5IS^㯀yst{G5*}64,jiPEDLb+x:dXtk5{ 6ұ:x0zC^)2isP0%^M-HMlPK
   \    '   com/sun/jna/Structure$StructField.classS]OA=
"Va*"R6i BƇ,ݢ4ђh}nF_ޙ9ܓ;wuTR!n a;m9ֶܶvx-`_RK\~s IH0Ssߒ֎kՂ¬,SgH-g`M(bh<000&^i	νWQc8NJnRM(*	8I.Tx>EŊILetF)M1L*Eԙ9e@F]2:A.9ky^6.QX0a2C2pChYdXVOBn3%5Wx!7~@¤:v Snפ0QZrLT;UC)_{"#
b\7A7H lj*$_m5ao9ztܚlڞP0>lìz/^Q{fEJrc2vbf'F1&2+pk[9;3Q:ފm.:.HN%==)baeާ58`|CN)D^4䊟1 kc<{ʇ8sCg|\"m̿;,<Qׇx*2
PK
   \bs  	  (   com/sun/jna/Structure$StructureSet.class}VksU~ɶۄm46@(7!--h4 JQaba	/ÌpF.:#8"6m C}{yr6?1(G ҡhC@y==Xfɛv+ٮ#>i;wL La`,KZ^slѫK^j
7vE*֒x5---r:ZEE^lh+s%[U%YJ[daManY-D.q"Vr|HSn}"0 x7n`H:i;HjA)4]SiY=bגDnHH!Dw	\Ycdj]_cƱk_5zwmǳ[p@?pP!:l볺YEpGuLbjJGiY+5I^lRm8㄁fM%xru>TO87,_Uy5/~jn.؎uhUϙJbdVΛU[BͻjpM#cѢ虥Og끇Mʩƨ$S
]4/lrT%j
|SW.WS)d[tr=:kyWY5,«𪠑[Ӷ^Wlr `Ǫ3abwH']ƧTWy6wYBI!~SCƊfq?tƷ)
qJ/҃W*>H);Z*Ih,<Bwz*h:>.E\9Ĥ>!&sMn #ܟŻ/d{<ւPWLƼ/VHc|;]hOS|E+" }SBl
CiR)|[.G_-!d:d7b2]#wQbx/1 ?q	M%T;ȩȉ30JX#f|^nf`hK,!5x&8"=rV8*l8N>4 "x(4()|Z'%T_Y-TEs˯9)tY{ZBXK !w##GqPיFO3XꑠałOD!PGBި>Cs
j=eԠq2/{
\1U29G<mPwޞߘm:.C>`#P} 3/Jm|µ.Eא:PK
   \K  }     com/sun/jna/Structure.class}	`Tef`HÞ$k@ $,APqH&02IXp$AT*ڪֺuuZksߛ7o&3m{gG 1|7p:(1(mk~Zspx]kK[}k[KAނί9kʚY5-"P$BtPsW65EꃭJ%0 h)|COr,I	*C5;z`MӛZ^:^977WP}+QRSh@#jHVC?C[ki`t
`PA2
!$`yuP'Q!`[kdQ(a߀ =pӃ-ͫ܀aD/#jl
nTF0F!աM(_RZ20΀0IZ-A8j4nr+J;}bTƠA8؄)#/tf*fm
cá(=eltljB"-ISV08G
lhݍEbVǜzBNBRCZ8l
nXB
BTSJ@[x	*l/Ai0 v!{1\c@Xk@C0yP2P3`@p-|#a-G"RP@&fG	gpH%-)l<ũ)6}`SH{\(Q@ķE:\l%p)
h
&D5"dފURQm
zcJ`S}N:T'iV9ε\c noɼyiTVZ߄LYQoli	^QrmNCәjNzV576ok8=>5ia{5.W6baPbPCԷ%!j[%{.I꾝?&rY%1)d_Fٯ!
J#uxAdHM
\GH6ķ-[F q}(3B-
uz؀G`&q3By*5$I 9=bG
!Ḟ$s)U]o2QIQ)A9YTÞ!aztiV3y
XEfH~djڄ}_uxɀQQl
$uӐOG_%(TNKgonB#8)^c5dre?vXjʔWއ1	Ò@>4#%
jk^%Tا|#ې6Rh/pQ#4+@.JÉ
m=I)oF_)U#@l-Ng*>9pȀHuoD\ֆ6Ro茧]2`*Cw/I}S&~ZP6x,ٙ!zCR1O*(g,AUEjT܌<i"zyXYj$r7øe}pǃH
,^51
6.bQͤ@TIlP2K1$żeJX)
2NN/-,Np	L!r()&Kt6UE㶋4(R"$RKư:g]>ݱ5Eͤ(Z
D3֯;6=q>7)ׄ%5H(k>sVb!\ƨZNP=Ts1tYM.6ÁкֈO$tB,Qin쳡BO@[5f	b[͕:3=Z
Vjd46V5G[9LTi<`CW!L"1Ec+乣b6"5ZbuD7Zn0:3ĲL`
d)xw͐Rl%;UgAb	k9he4.vBIN4kka
u+0{Eu:;-6`s82|z[#3!Phm6X7rw%yD
hYoZij3J<H	q${msع(v0Lbޱa
vЌ-$'$tX?i.b#Q[ќ!.j yR].Gi3JVJ",)YjN_gWǛX:"[ÈJv
z4M-u`7m8ԿF`n:+j$l2F`ۜ#I#Hc#a;˰aQU8$Q_\Hvv2k<RZ.ːcrY(a K~15GC/ˣnu4.kZya,9-LődtRa]z{NeI{OJtCJX1q4ttO'4
bԧ
kLQG(LB1mgo~%"ֳEjR='ٳ!)ї
.j+D[#xmz\u6P}S%s{c324>-25at	<`ܯ;	1Nuym:Ev{zE^W[(wo}hf6hJc
M{!>6'SLZHa:`_줜4QKDi:^րYs~
o
71khljlU t9$G]4w;Ⱦ!~ 3ּN(I4ppDT2ۄ*;Uk\(,6%A	`Ց׷[7E!<o	6ʌ:MLlp5Pʬt
NI EVD&y{s]BRR;"Yo{),	)4x5SC"C_>l1>ӄ@3`L l!|(%QׯoB?tDZic45K>:\ /5G=5TX**)
ˑbgl!|=bGPǥ3G z
|qe
*0Mj*:e5" ڇOiUA>S4J2&l
FMU1(}"ŧ30fg9&ЈF]	kū>ofǘuFItۑ쫡oB\M~סbհlIR_}~ZxJB͑k\|)>[lP?V
d_	|2%騒<?AQ)[ڶJT8?>2ls\Y%sjZH8FmRv7DlRu d?☌`yR.:xs}tREKI3y4Pmf
|cEt_/1=vl3{u?81ngc	czL[E(Ȭ袙(Y<M	:7b-B{$uW]TSIQ+`9z|hsߨ~3ǐgjWI`bQ7HD[~+63a<)'My;~'d9Tu(Ҍ$37T9aio7Se>#2(jtJ6rd@m2$WxRJdw
 %iC&:DKe5/0H<|2z{xىw~꼅Sp6ZI);X?H+EвVv08`N%r3XNA/_0l"%N,rvլu.2jڼtR8&`Wf=n<qkrhe{bV,i9y=۰f_8ýP85{Eg* g.F#ۊ?^oQBNz
l͔1)
Gj
~03oh!#ZlJ,GcbOgIg֡U(O;I	#B_ďL.҄4W_B$)ࣥ]:v?ZBqVPoEi˿ETCұ̺U~5%>IMWQ
ߏ?, 1[:JgU.q@/N*H	Ppx	&غ&*2u"éǍLKuB3ن!`CrL$N Gr˝Kb0&5mll!{)%f!NBϷ^
ZK`X2#<5.6 YHK1LIkvGE CTۂ0WGW4[e5ա]v֠Ey¦5`}+ xVldHS(ج	g7Exl!OZEn#&|.cųZ>xa!<*k<XfD%F2	n%l6&aX1sj8Z;UgY`aVm,ĕUsjkf.
j[Yu[an.^`K@ikh[~Y#RC(E4ˉ+'NSn0qq
X)knlV.aD!B	5AYy՘*jaqh۪VhG4uh6D1f PB냲H?-TQ^W+ņT%PpV!oFQpϢ 
vKPVxB]l1VqQJ~<PjR^)wP7^Ov(/Fl|G+3q%$DϞDj$OFur\$0b.qu>ϷY|4mG7gwz*xkK܍C#yϰ=UfԆE]d^U.;AKeF6C.Z3=M<xXJ#&clAEJwZMi;Sju@?frQ%K= @O)45Yl[rrSrN/!#MB-fFj7>!^/"ׇa03馫Wt!(^K[:{vbY)y亗TU7oNS0QWh-ZLyғw.9[tx}H	oy?guIѳ;swds0jpDMիƮ&v/?tOC|%S+
CBMSK+Vα7BQFox^meOWd
⮆.5w 
A:uԺCAhd[>V$]uQ@aQT>bk\c(kې6+=bK3'L)n:[dЇ\B>`_ERқC
e7[-rd3tmUE-Hf*īZim)rF|"V3:#p|o#1LO$x(~x(ņWA7[쥍Ҧ[c:no((mXG9),]
%]`PMRЅ^s;ħ\xu[-+#/Yl2w}`Dkr +"W
ϷZZkB)U$*2L 2:ee$$Xjkv*C\2AKRNţ	LJHKFԄZDL|RYn~qP57ȰRnV;V{L#)e\
emd&lXN/lC5fۏeRUV(x+Bp=~B-7B_tTszᙀr8azi(6RGϗ]Ih(K-Fye-F{GHBѬ9kv	ՈR\bT-2CWlT;va9'̠;ܾSSDA՞5z	Օg`N!
|pNbN|r2NOIUL:NA>:HIm+LdSkP"!$s19yT{egBC!޳pm*44$"?Jp^<I
^]J)QPqԯśɯpا$m2ZjГ8 4+V6B]#!nc;/i\WWt<`AsnLgK7Kؽ.V)+CfdC%5{?ERY;rBt$R
-'
k B[|ڳZZX#ɋ+-^7ͮ_	PC|ښZ,aPSt-
atb@&<+#%4ѮLE1L
pMAb]J3Fɠܒ"1X}|WC/E̶3I<9ɻGy$1;i0'#0	6䢉#5?dhIʏww$vHQm}Uh(Af6|S8ӬC1?&2ۀZpҌX?~.J.숊eEUQ*,Hɺ_ʱ©g"(ōzl1HpoAUM_7OQ
I
j5q`N9aK,0n3p=H߼
IF=sQōL
Uz,dHd#688?R࠯*_o04[1OgxNG^d<f9T^
RX9,zqefAR1rlChU=i$n+
c,%<M_xV\4#a2FtMd'mnRmا<xuD1 \v){,Gk=vDŪVI.&b׳XLO"ZU@:"1JJc{+)x$bs}<^~
MБU,gtp$LQ13WJrS&}Qy
0i3}~Oq?1k}R5{,IFW|GKբG(uSi96h~q!NSuu
SV@Oi-#V3'KgGf5zj
[A#RlJ" tN-8}10-U`u֛SWN	 F}'_5"# u?&`H[K=,(jE+2Pp0#[SjUٺ:n0"y5FW퓣<xuN4
uRg¨ֆWK  1fzI%`sCS(::Y۶q	~CoiT*Yn%mmT57ZL
7
	Y:g>G 4R_q;^G]A2V:H6(+d8/ux6iutA#7El=62yPL9RJW9qFj(R8Л^ ?M_Mxu\ݎf>f'aFy`^S^<}b:~(c:n[vy݇c?w\*[
}Dۄ؟QN-۶/}`yLi3llP6 L L+j3dA'%f;m2	-˂6lYa'%5N0KrK`f<&je)P{{=/vq,h1$9ݐHHI|fθG7$E,/#F҂CW"	܏JB'}:=0~JEPw.pvL3=s񄠐Vô>#`c
oq'oA5DОB{B	=P#EV@B$I_?lJ@?upjjIYT9ۢd jC=^=AI=riE =rG(iӥ)(W$?bۇZ?'=+`|>
.A&ӡsA t̮E3"`5kͭ>iYPYc.=MCX
' B:_i!R/CI&yN4#
Ek2a`!fC!@+BGr 6`#)Sf*|4i,E+>ۘ<n[5;MFc)uBm>lAsNLXQ&%\6[_/
a(.*۫Dl!..k	G~f11u"ηv5bnb>kY^ݿ[΀;l%.vz.p#ea4vT&XA=;ֱVhamml&!C-B\<$Y`(+HtMKm]jRB4٦N mB]՝2+t.ry),3/[i̤S-"e\[l~$	ή1)Z#h T]s)dQ\PbzʮE^ǳlTDjT$)K.Id^j<&!MnOIy6MfXJ5yi`ARL<l\T(̀۠/mܿx_<=HM&6~hTT}J
UuNb rdQf.f">y"SHf-p)8"КxKFߗDAav5}Y%Hs>үT#	a#ߢyE>6ЅIIPs
]I5 `@Ix2,o`+{v) o"&iu;x-Y$||&d
EfKb@ZR<CTxNPvw+Q?S`wwAn>X`fP1؆^:X~c	],$!- e0Ӿ606/GNBrJARHZ$K_>󓠄p")|yFk6<ϟa5?͖Q\\"%yQdp ?gx\T4Zye1KD2䴈deA?l gz#,>H0Tx(0op쎧Org0XT#;tTr-'tJ-?1 11p!)1	;X]57RD!𗜸6 Q,d:9J(DP
cl<G,-B;[G8@N6$&p_~KjȄ,>Q~F(}GӒKA"`#Ʃj
`>61NINJD>j.z6rBi8Z;h=ȭ[^>0Gwt
{_¹>?`{Fpr%ʘ>\z6(GO=\Pt6;(G_\kodŪa.ƫYeta,2Sז^r9*5"˺<`ӽ 	"'=
52.8Ǡ7'`ߏjI8fg`? P_0@'J̲>q)@1yv+7&[)7٭n54w!!ADBXf<7eA!9	W9 ^e/[Ơ6wS|`?Af>y[͓lyúmG;Xk;\M;a!tW=@$W'ﱾU;n6)
UB۲]"  ׫z52W<^mL<Bޟ}e^]]PҴ=ɮpy]^b7vKe3Yx5d!^-TTg=A𷑳?+Tq5X?#X?Uh;?^ڠ9lX'\, ܒq֣2U(Q.4)(Ð܆g.Z$Y7acx vd:9/}<Yr
P@x*	W%!+wZ7~b:[>뙦C(d!y&vQ4K.[.
$	P߾4SIŝwmǮBi?׸9t)J`̷k:i.xDdސ-
(Bს?0Ob(,LA(F<Ǩf7r#ZnDt#
Ӎ{x5HTy,Yr8ߓ@!OLLQƋIF,nX֖
r,r4׿9,w6;V$1*4ttf<!Y\$aW9-#8s{o_Y*mzNͫXD%9ƥ%Z$.1܅v~'P\Cx
i`*^l۳Lb:GxսI
j;r/d*;ᆲp!i2Rt4[ѡ= e^=%cWv{;AWPWq6Ǟ]j㗤;n^w]Mw\̫t߷i`;Kf^,D_4w>{Ba	3_
55؇pX47ʭFZ1b+"q:Jpl	.gµ,I
;9)΃|xV\ ϋ-rX\\J+b5Z\'9T *R*b×ݨu\	Y=n6
5NlcBק]&\kl]cqYRu`ӥV MV~ViEra2DV}?]2xZ=-epa	:eCmF!ǇjW zŊAco/dVXS`,GW(>b>(2jb$Ba|;W{0'm%m/_0L[,U4;؟ _*DƜ*
ŭgN
: JT=i|9M
4-X*y)+K'٦
-t֓@j=* ?ܙ.н
ϑ[T~w[>۞`/ęĿ`?`>_"+)1
A!U.^voKS>jd&ֈ&u]xt>n!Ts?@od6;P"3z5/Ǣ8Lꇸ<!+fCASV{֧|}*ӶW/ϑ|	@Q>`//LYYٮ
վqYT|X:2,~ĩ`p(TSc*2xJW`q7)l{QD3-rA2hVI%99xt2Ǣ{Gp|
+H R)<)<)<
)<)<
)<)<
)<)<)<)<	)<)<	)<Iac0) \*XzmvDdOYGO[P:-,b=Eloö|5v0Uȩ|bM/@{[ĩ2,(Vf`eg#[onE"oKXQQVY86̥m'Xw8Hp: >61$Oଶ%:yeuĉ$B
\ S9ٱd~Z{L泧gOeF-wk
V)sq}zY'-73`Lpy~1_ қ<Q-gΆ/iz@/F"/!O(,:ryO"īćֳ?Ƀ.Wȃ-)V|ސ0Lc~r!_f5/}(MP4%Ae=zPJ:u.nO(%SΆ|VVElr)QOhQ.CھX܌c`3R`hEFphR=#gln~s؞4ЉS,s̓BPbMxC~{B|d8Up	ME$Q56I"7mƺxS<m¹ǹfJ(7["X0cixKje;~4oe]u;x	>߉n&mn>LSIq !߭삞C: ex6`GS{OoKOd%ŖɼS2o0Np%e֣^V::o%=)~W}Vdto'Dukq[C^CϺϽ6:fz^_&O~joI_QQW1c+7 ,"e=DˈQZ2Jax1
]<:"C 9p!*/YxP~a
Р/	(`JQ>%gxB
Vub~o,3:&k!K_}m8o(ԥF`aFSGHFEV~%c0!\t@u=̲r}w/*vXӻCUqV',KR>+u^<ɏE4Ŏapa<(bqT0V͆IjT56Eio.A{cc!C
LեXlI[r;Zʀ~`LI=.{CV)`"4d۩l_Ou˞x?d9KmM15<YPCo?ү/ү?0Xj	,QJucՑqd33A@~L
h_HxALvɃAGB2;IN.gKqtJדw$*\^퉹x=!=^gcTdx3
]{]fla3EO.H;i#yśua̳-g
)`$Cio8r5/Se./baPe!'Z;Pʲ"ӛY@z7,?@gku+,D={mNf_:{ؖva*[HP^xUf{3eR"\vl5os̜TcfZ&l}Mێ*r8s@eY8n?$O8مeBj+xjp1#1A*0+T)y^UK.^Z\`GՀ:k8u)al#(~NA(o:E`97ôb~/tqbmVj%rɩ gQf~1,Y#,C2:5Kd G}ԩ0He:TgLu&,PgRu΅F
֩Sk2U^POWԥz".OՓz2VOa bz6Ymd0ROcյlVQ׳z:;Gmeu#JnT73=WYQlz{F=QgG[yo"OT/"r~zWfz~zX_įP|z+KſPw>=¯+F;$b1W8A_PCM!Tsq%nT[}n1S/'
G/7括{DdwGfv9_'I
`t!n8Eaq`U=bmϗL}NvYP!*WACS(1B̖ψߠE[<-
-_h؎UHQ	mbc0v[~9Py~RuN?O9Ad1{X0:C({}&`>J|+в-BH70zK*CЏ5fN5Q_֬̊LYm9նv1_ӨБPrKyz=5CiL/h_Fo5#Q_v27p&KcZ%#arg|j3YVR`Ȉ!(U^aAbxy%6I5"2YN0j`?oQJ]JEhnedאգ|"+)BP
/ނ;P0X+U߇2oH`1U?ZSX~neHlJR!ő"%;ĮZYbm$caDW
h{CCd
-?M>bfc/C-pD3DF˂J7F٪Eh2
pxL/7RT/:lz3g5m>*m
\kbcc-	ǔ:
M@:",S3]SWW+h}VwYu5.1`ä|1$p/%x(~<ex/w|1
|1&<8d]y[28,`W$h+$	!d<$&uyXy{RWdL	){xD'+IJ?	}Yԅ}c[VPta*Pt7wb Ĭmsc,#o>]Cb!&	>N)	gS
AZ>djj^uZ_hm <
Nm(<oRxE+״rx[j#(8e	TȆkxm2Makl6lm;OkKr>RJ%.UkOBf yNF/˞FB;CbZ^v/ݛQ?3W,yg2X%tIyom3}$d:vHfNshmZS/~JYrjX?Vth,j\ZvZ];v˜NE92b}bIL
Y,R@2|S'(]Ut)ц2O7ϧ̶kި8@/XM8jmYJ~tF8BoeIљYT{V摧ֈSРJd#)㼞0Eh2>|.z'CeQL!0-SF2.ru]*{`Si_P9n#sUx_)J||byRqN?%Ju1ޡ$߭ðn;K/a1v;U'g=ks'5yg
0*\ {%n1Sxjsni
<oA򘓳#/SNsD,i4rXaGLFcŃqj	C ug?
Zj0Ш5AD[
-WkztUB
Okm6Y_k`ڙlv6kaڹ*|S=]жwKhR]/Үjuizv#I̿Ҷvn%ڭBM,nkw;^mxL3=!d4Y膗7xMCoRq\ݲD_+ӫ0<._%sbc7} c.:P.}<
tc<j1Gll)*k2goA MЩ 8xFp0l*O3Fb!0,9v
û9#F(<ElGt36{;Xћb2aD}+Yh	<AfJY][M,wGxqʔ @LRA\њ
5GuZYgJP:&nvLtEa7zCOT(#Ga*`8,ӞxҞ&pvN}Bsd']ߓԮv:*?&J
PF8.vIIr6fZG]Ihؗtp:rrV%,cfq3ZTڟX3r8KķzZ~?pFO)bR }f+Ԭg',ʵp6HЛ|ʺ5=wL_'w@Y<Vի@UP}D>d|某}=Oi j9ڷPN"||<3yAY%S'_GNe$LPB$`*R_xfb@#F#1"FsmέVLi@Dᴚ;wIz/cn$.݅]wJlb
|4Zs5q4Pu:ĳI'J%ru^;A8W[KٕGoҋpZũ}@Z5+4gkb˵f¾,gQHO2*V+7hXY(ЇB0LNbT3m\gqZ9,iL֣\;W9%%^ƘV902 ƢP}F)_cvI@k/Hre菡tAKމ?rE_ G')"}e0+)MFd5"(MHi2"t%d	E@Ye
>C.!~;l]֯S|HiAMiڇħ/Kβa<C?oAu20Z]`HE'd.|4cBEG9X+*ߐL Y0LJEJo Ƭ,^axܬՠy6$T_f+qvXWXdP+µ)oǟ{a)[处Rj(t/P)%
Ey)<NcQɲh/_o@ƻuM"(ƣO0N;RNF}'P,pK\\7KΤuP~UgTJpը($^%r8˾ѻDb{u)K$ī!X*e:fԭ+]VlXHW\nzћwK
Zjpe
Cuۋ;/&LR;
,g7;T~*П$
hi';ǉ)E; n̷+>J><ϫQy[UvIu|#I? =PMo`$^_rTU
Uחkbiˢmm\j]a~odu2t"OoQȃh]dl
)edH1ZLUBT9}Iq!,L(rg w6Ts`;NFwm[XJ1U3,o}jx"5S2jɸg֏me{<(_jS:0B>+	?7ww(F[B|ptS
<> {d@/w1s~6SzDVkzz!t	s	ACK,ˑʶA	(z z*fD/)q:=tPp@~2wݼ[:W#4p?=0酧c!22%ٔ66
666666-l%0HGdddDMG@MG)dS菌[j&N]RE{~pJn.;ukeUܹo
{\hr&yKz/A/9PceKQs~xP-]TQ&K)NuKH/%:*NMR8
<HuhUKRuxGZ_$^9.Z`1BEKMӝ^3Fy}x}LNZhmčFvt)SBw%UC2Ɗ*l*tZ*i/HI*fGVLGbǉyUQ<*%p~TK7C,K$ PA2:
q*=g$h;`4ڌK
]
EjrkRa]xޅw*5%T(퇷;e *9BTzB,Vp2ޫW
I)%RT%zofGjBTէGS
 |AWe2ȚTg^{U@<%{Rjj~D^~޺:ap88׷RYoAbp2.8K}X|g,z)uxv<bg)Kćexa8O9iS9a`m_W(@+|'􃻐Lp7sa{%uϡj9}u,Wrl}6RNzi4Vbpa
qFc`W8}Lu <cޟ+x=YdydU*$<ZPK
   \[NM  C  &   com/sun/jna/StructureReadContext.classuRKO@*apj<a-ִ[J?8-.i3;;߷+}l]~u;'maJi	à\yr{%ְs  b*Òt?pEu˱!TULDa'YKz)Oa`C)ӘaHE!z{!DC16CvqrQ;	?)R0\mY~LKg(C"ՓkdPo%jG|JoW͵3E
*UFIG͉<zQ#bs䝆cE՞h;kG#Pnئ}YCE E^xYeɆg)/t"B0 "ſZ,e PK
   \E`v    '   com/sun/jna/StructureWriteContext.classuQNP=(/(>PD؅0nHX6R.xIirK,M$&. ?8BLIsgg=Nӈ @L8Cr'wc]mJ1
בU2##C\饐D*-ufGz%}?yBΐoFUmY0hCqklL6-i4pWސh#c5gȶϽٷ	ɵ\˴{'1e8> 5\reCI
m.F,R!,Bh[FF裛t]Јd=V?7s$92ad1$/q}B4,U*!;ei$VX	.2!r?J.Q'PK
   \[5Ȓ          com/sun/jna/SymbolProvider.class;o>Nv&F\<Dܤ̔"vFĲDļt}Pzj	DcJJQjq1#BapIQf^n5KS2sRQLccd`d`f FSX@,v  PK
   \0   *  !   com/sun/jna/ToNativeContext.class}On@}@ MUl$ҁ
ĂѡNpQ:UNԡl???[
 5}x!hz<KIqGhεnA?O>ZAbT)6v->5N}[ڝ"t#mԺ8*8c)̶2e}'=w'0g|"OJ3?iy4҈fʹb^A_j8x#<0
c!JٽPK
   \   0  #   com/sun/jna/ToNativeConverter.class;o>^v&F\<D|Ē̲TԢ"vFĲDļt}FJFg
tykVXkbgd	, )9'383BSȜҢT*4120203 {l o3p 9A\@7 PK
   \         com/sun/jna/TypeConverter.class;o>nv&F\<DʂTԢ"vFĲDļt}v6FydMnE~%eZ9dQLGS_Zꖙ bV=L 	$ PK
   \w        com/sun/jna/TypeMapper.class;o>>v&F\<DʂTĂ"vFĲDļt}\Ē̲TԢ"F
jbkMdfdLK,)-Jed00Fˎ(SD
p!7aeJ+
/-JNuzz @	l@>;s2p@ PK
   \i5f       com/sun/jna/Union.classXw,[=^a_b6c˲]a3a`YL m6	i6K&]%M4tIHC4i%9Ό#iӃ-ysw_x	
P
YX}$fcٱPL
eM}JMqm)35Pi
mZSX/c~䈋6C"
J]K:
a90+'i
ڰa*D#Q},k&e#
36;iB,
aѠP̘wV溫0K%enbBC#V*MgSiy滝j4#BZdB萞1e-ѮCXEIkI섞nupnP36oRRոQZ#<ԣ8䊙x6h؈ɨbkR4lI֙H1(>[ɻ!q Úem

5yoyTOaW+Xs܂!PއSao?,WVr*.
pz&Qɐz5jG
KYaY|Z,^StqXOtFdv"5:f&t,;^OJkCjA<nwq|yIҳ֦WA1P9Ya0e3i1,MbUÈ.M'DՐD#=q
d$i= hȊP sT]8P6AxӤȱ#wk@Vݕf;mgd>H>1Xs>/}O~i'ʇlK4rA%6F)ZoL_WBxHxDP$~NͼQaU
_י!39ӵMEGo3L~dm#cx<jO`Lg&c'	cG:5*ð~)R'-LDs_O%ӦB'Ds\ai1~Ś2:OK7؊QȮ ]7FA#[RD8G{OOlL!G88g.fيQ/u}WzPDՐK:zf7[
T6df-"VӛeHep̾5]HJ1ۅ"=HZE&Q)6+RL;ݒ\>zM䛨H9gC	黃73LgM~կ,U 'TʢsHٝLiK_%%_?yKjr%s|jwy4u ~
k
S3(W:ʛ)-іBSU*JfR,Fh
nZsB~:?k
Q7Prc	aq1`SaؚC}!M`\cQVb9Xxy[cĒ\-Wi=&Ńdm
ؼ֜ _}7fI@݁϶fMWoqmc
~[%-]?	.pNwr߽Ľc~I~C,~qG" )38i=SgƯs}/`#&pg '0yэ1K>^#2}.Q챨u-}.qu)=fa0'iW&Ce
"h!c7#vDwF$\+td!d	lE]n]xP
)!ŪD
_W:K1IKߌv^kEǈq;u:ǢTE,R|?
ߙX.D<IV^U
C8u[;ע.?gq8=~K90'$4Y|%>y7"6}?Vl&~0G3-Gc߈	At>ǪL.B08Y*͍bĺPWJ|ߩa Fky孬ϻp̧WKlWx$]dzEY_맲:jdi!)9|r8
fM3=21c`eYZq,<gEqוĳywd2^ qiKAb_
NN`?|εc_L[┵S-+yeg&̓~;o/-r+DoCPK
   \Pн      "   com/sun/jna/VarArgsChecker$1.classuM
0VS`M
/ EAC	$Pb;n=a,ͅFR~vi3JBBRK%kB7j]T0]u`ee\ssbFʦpNdB/"DIPK
   \t~  H  1   com/sun/jna/VarArgsChecker$NoVarArgsChecker.classJPIƪn.ZESA(F]L6&Cq%|(qNF\oüŪ9
TN7oѱ62{¹y=A(rfGGctI',N"5A;f7 LY/k^g*Vk\|s#Vwt6a̍ްlō'8q/趛WV0}N	c
"8q
ےO(Mώ"sˣKjX!Բ7P<-lgL8`aPNӨ=FGrnXR*b&r/o0euCQ1D/am=P5벭\PK
   \    3   com/sun/jna/VarArgsChecker$RealVarArgsChecker.class}]OPO׭ctDD@_	7fhcpW'o$2>A`s F	rLyϼp=/Q7nw"])S+?ׄ/)%Ś&,LfVvFME+㖅T	p"躑<K/qwd;)?NۘmB+"SɚY8nVؑ!a3v}uOff11.'lh,q3	&ӴklzBi/F|+K๪G@FzujQ-8ŬJ䟯|9<q,l9|2pGu)mM^~fWFKsXߗq?F
e
fNAsW[WKh=>67Aq<ԶU_:ǚnGzWQPK
   \JFy  >      com/sun/jna/VarArgsChecker.classS[OQf[vBm5FB4!0ԨOrh.n
'E>o2mmmm=sf3_!a$,بT1zZIXG#t>J3
0JLl:Ec{PXeV/QRJECnH Тk/	ҹ&2{S̾]{ZΪ%̷NrjG*
= Lsm.e3)lЖ{ Uƚ|*8??ĉo1ХUl}@˙U=ޮWfM"ZAbוadWmrr-O>GәFS+պb <uiTU@FҭCdاb_rv.r;Lnճ[0y u^0&*"^]8/k/,|[擤vGLW6paLKz
ILm|@(%Oo|~tJal!_`=Q^;G٫b68vغxc:$`Y'
W91,@7v)#>z)Y Ff {/,=x+ PK
   \B         com/sun/jna/Version.classM
@oEz݂"SA^cE[CCEA0x &0R<Q2/Lhz

9aI0o;Bs2U tV*J@"S61VOqx>c#6!~V\ǩ$8=` FV:Y5;hPK
   \       com/sun/jna/WString.classuS[OAmBP.H/BTrBlRѤ#o۲.lO𠉖DO&(PJ-d̜};g;?;%+~e@%o2#!0zUWfتqRQl43LlK3)^(	4f!A扻b%ͥvBW
Q1Ulnd%ڍ"5aDAL yO:z&Fd~4өuEIvKrqܦUV͛{ӼwMʘrXyMNtRFtط(#.fRUu_sOV=1tT
%I
	vIX`s+eH}nQf[òjmhѬ(bi|/}vU*v#_wV*o_(G̫){M~SO횭Xj1KfݪEYN9}4d*dL!%0>B7HostHgX 1 qb &9x'c(A4"}VF?=8-]: )b3
50|
>YSKioʍc+B5.F\"<Acgm:-:MSX5S8α"Ln
0Ig5LУe&)W(SofۯpJQM0:\ʓ!PK
   \|    "   com/sun/jna/WeakMemoryHolder.classTmOP~Jwl"׎Qe&%Q_LrB.%&2In4<o>0g2.!&!;澩;*p+`,ڮ,22jIBCꯓ77|ܵ됇\X7zHUp}`y}/t׸+9gA`4e(H`\v
`^62`A.֮n?2 SИqDpӕlDdLo!1Wh_ZdqB{EhPp8<"P3
Th>m>)?$yTݫkOAsm,^_$w
)os+Jm>vJX)sYv2hxL1l{ڵ*v	<x0,t==-alՓBr%591tFHEcD:O^[-iVQC͂; h5C#u1C,Y5ԎcHG>L~bcG13SAmZ)p}/NߔVCY#V;E؃oY%I_c4lw)}b6@/<l[
dI˥'_!OZШẑډI	tTcR
Rԅ1)-ʮ{D/OtIX|PK
   \z=      ,   com/sun/jna/internal/Cleaner$Cleanable.class}=
@D5QXh6  XYeupCA,b<x3߼ޏ'=
amn{+Ǻt4έf5(VƄEw֖UJLGMHF텐1r(f#y[n[i?4!' 7b$~>A5Cd%PK
   \{tj-    -   com/sun/jna/internal/Cleaner$CleanerRef.classU[OAJ@EEhebQQMEeYX(SM4࿐D2.VJI|陙}߹쟿~d5Q0CUX3\_+4lqGyc"ME%72V
țbɘ0<#uDe	1$sUdѠጎF41t;|ј^6WX#Gpaq-l/0ا
L`t)}IKqg YEYQ,)l9
uCG%giYu{4De誫|C.iq]}`u|AbWt\-_w]]
zO,񓴟&'9O3QxMt9[)m;sE\2c}pmrrt;"m .pȱYK|╧<ujf=Z}fiŖ7CKJ؁\z4ww{OF=;)DlF%iʔU5VS]:|⓶lxIH>ț˩	t.:zB\ugl|([O~}>;50TSm:EB!7OhkA$7FE"p03 1 gWOkiRwΆ)tMӉiM}#A?:-O\dؓvFA$#
%QLVd7tt#^>Rrp;ΒL-,ս]w^!Jaze-/D;,|>FTƪ'a(82Rひ1AӆGCq8PK
   \P  e  0   com/sun/jna/internal/Cleaner$CleanerThread.classVsSEMzJh b*g[,4 imɒ7%) RE|q	AȌ?3#
goӦI)vsϞ|?8U<K00:sWSaM1M8j<Vj;zb\
2=xe"eiB26S,( (^u@uFT-6&rڮZUi!ԥ2fPzɱC|,C92b©1X@h#MwR5LtNZoKwa%,X$, aYBGk\bX:~h00̐qJB2L/推8O#0eɩN	
2a9<!#H4"Bkg#Q5%\)cVY.ޓiX1ĊQ=PMLEX$4Xs0زBxPldXޓu2ڃ==
!2<h!in:Ye+%u jp"2QnqA13r	[v:ap$(
އmڗ^<Ap-!.؁Au4y132sirW	܉ݟ4W1TtKNva(ԣh2BIX)PtzC89J
DR}B*tLld#K<z8Iڟ 4H{:=~ G"{:ia@r~N6QmRc%UMT#ױBLh\g*a}T|[h@t&q32NԡA`{j`e	0}Mظ 0~d)Q#{~Y@l9**dN<ڕA~Jy}NfVe>עkk&˴"j`Wop,!ᣌh	dx\eK{4ȩWz5*e,i`׌
y}xTʌ>E&jU]s*]BQ)
ח
GQc(qLDW}dub	RJ,ѧ[?
cvlI,Pj~E Jj"C8]s'S.~%tuQӊ/z]Uw.$ܵ#C8HMI|/ak)5l3:m?bڙē]6</ycL#h{S$""vVpun2$֞t؅F{d(6Z1nc,Z^b
3q^yS/_ҍz~|E3k-bR{s8KisFFhq	7'm&q8: J{т7aYMj9OHK^aGDaoP~+E)H#dYNH;X#Ḅ;X '/nYǷQQB-al	Cn!82G{e˿PK
   \Z  *
  "   com/sun/jna/internal/Cleaner.classVkSW~NYE60E 6]njiAmNigL95		13\y?W ];\hQV
L~#R(uSfQL-t-Lyfڊ@ob]"9FkQ	ئ^U*mim9O:t^_aT"nf^"̱܋ڏz)ۣ z<ߤLߴ~PkhN.%WF;AU@O[zHk&
(ZEFxqTjv/|8!{M/85%h4(=J[aQ,B攎UP
z1?(ZR%i	AYK4g0~8/]u3
R":D!U3K
Q1P*H.͒# N:wSpAE\8TQs$Ku䈶!.П*jVxmGKW5&bU3 ձ5=-l&'/^MY	}Uf0[
fUiRkA%3RNb	_xO"tdkkŅA&2edMXX
f.HĬ}#;_a2W>Q{[,CΝEwq`ݶYz(YnsY7ˈDVǦobތv6]v5i'0ka
%OdBؘ~׃1wۯ8Uq6/Z&Wώ\iwKLι|SL2NاzVbbwoF-Wea6 *n1GQ %]x_.oR/w9;B*'{D*=j2C6伌{'Cg8OƖR] Җsy|̙Zf6ed9(6|`(:87U ˆLP2%G+>"Kunһ7=;S(?`@S$Q{#-7`iz})dL((ZijJ3ؖu E|5\=۸IɄe?iu˻Xc;ѯ`` `
WW؉V[bߣ3H;D}I+r9VƿѣᝇΠ,"lZ:ܝcӾya(<Ҽ@ݢN(˕<s5
;+X?b,ā?=.>.A0:=m0wa˸zmt?S_{p'Rq,hQ[o-PRa9M|Gi-닗]P*.(tAAO<@3xOs|Az}}	q+~_?PK
   \~  `  *   com/sun/jna/internal/ReflectionUtils.classX{`S}iEJJy(ҴU:ZHҤeަ&]<t8P'M=W
":ͽns{{oҤMG{w>'Cp"vlvh5Q-Wڳ]WGbԻ<;)
\*BjXVDLִ[:RhR`N]k jw[[wukA1	s_M]<L%T<ʉSHjS-zj[IFd?Oh[pL%-T"[<dR0S`8:Klk
Q-)P o8+;O|h[
3wǚht,PPb!	.У@/$Jr0F-{Sr#+/=VYR,SQbvfyr`B*/V6\JAAL5B@gRo&
/dBX,f驂Y=98W;U[`ZROՆz2̖gNJv6
냲`!.4U''OPE-Lf\XNKS*)^E3ek<tk8!x1fWМj5HWOЄ"'RrPъ6%mpPџwURD.{L$H0{;(ˡ%;5s1߭f4Z뻛
Pz.Rpn\)L	*")衁c5xTb.hUcc:hZ7&}ZtN޷,ȕKTռ1t,г]GLN8$
#P91VQXbBZ#uI)ٺNK'<tiP3oL4$n2m'd}$)71Eb%{T\ #z}r2K}mFׅ+P$Hŕ9
't-q<ĭTK\}X5ˌg[1lR(u\z PfhKDvdU5Ν8O
zRM*n-':#Zc$-:aY[oUQ|SP&xs	='?v#l'-ObIwH__;b&a	OK6EVh
z}w/yȆ9ٍϪWju5HU< ?z*vC*LHi	yN~L88#ϫj9 UL
3u
uOrc*Fq{ڛ;kC
FU<.
*U<!9fX#Cj,O8*Y*Ʊ4:[7tol5u׶hir>/ՓLitR-ɗT|)9TO>
?;51)?	LK~[sxĜ1%xlq>WN`:8bwCP܉>neMRKP`{`~cse@6F
^pOtgx/{t$=,8Թ=N6YnmR\(}Fp6)ꌢŐßv`RQ#l	Ie+}N fpZVpV g)x3Tɐg&؉gDYmWNTW0]!HPdfLɬ?z[G4"eĆ9笝d3G&$?uI&=O'zcDjWK'l T̓R>͓GYc}ZuZX]{% ̑&O|*:! VwI~?8ޭݤoPa{(ڏ]E(6D"CvՔ{> CE	^k|/N^ KًPHya04bغ.{(GP)#8gپqRr Ӽs D#;#62BPyb^s.1\rR':b#ǩx6r1ܒO+*T`++TW HŖrr(Ufݬ&$[bp]m'W!@bXuY|tJuʏ{{=Gn
YEݐ40b{Zf0d
np1=iRvA;fQh1x0,?i#"A)>`!=>cp=[`SF~]1pOc-;;G%OQsYu}1
yLW*U4j~Kkq=
g&bf-X[Oe_7^BZ7+|3-tp];]f2޻S
GGA?p5?jG&-POXik+IRe_%Ay5* 'l	2hE,2hvsQ-06[AFB
	XQU ?;[3Oqpd`WqCٖ9SQ1^}iR'i3qQJ}8dK2gt8lh.7%e5{M>[8dlӲ6HI3Qq4Ǚj
3
>lɯ0bAa+r>gN|9TiSfx|s2g+*%YX.%rDYހSLN˲UsOb%ߟp&~EDu[ߤ˥6w/}PR_t-a$Gl~g' I9TEI9u1&gRr:Igvapp>gB2*vڳZ4#q	[N΅LAĆlvexZă+9YFie>MP"j̫(PK
   \B}D[  g  !   com/sun/jna/ptr/ByReference.class}TmsF~vrP^PSjj;ļrB1u\Q%t$~1ڙdg"SNw+
19:00QsywZdm9d+I#-ɆiW'lE0F8Fu$tԤgr[zҩ/UNɌ'Br8N8	y[8掬)d]-|a<5."fa
u\C,IbXDg9#DMA
f%E_!MI$-!VwvSΞ*{TӲݠY9DR?5\F\0p2j
:#SgvPh.1EE۸IͻE ]!gt)Qz$1i?$N:l:0L|FӖkAyq?T?ڭɦ\';^O]GyRm˵[˩)S|Rn<+:Vx8!H4<贰Q}_e0}+
mEwQrZI,6m[vExV 	ڢ9oϘhveW`+$*
Sw>@#j0.iyt8\V$8jr
HpW5zC~Fk`X'i{{^-:OiA[dX$ZʡWd4*ׁaL?`sl;HĔq)AR5N>q[wCvT&"\2cB=!l߅ga|ױA0=fs	Cޣ08G<OXF'hdGΒd LizL$bccc_1N򐐿|PK
   \6    %   com/sun/jna/ptr/ByteByReference.classmOPw֭T@<
Dʓ8,1,!e֔n}~ ?ܮmϯsz  IEIɊwd]еo7O?sf%)e(ajyG1P/ޖ:Aɮչ!ʃgt%

2%cD(0ȄNh6*&prՋf
؜?Yȝm1w2Ѻ˘b<Qݪ[>@Fϵnƴk];
M<C%*jDtAiVcn*ǂE^eu	Oe<S+]vd+՛-|zRЯB{%O>,Ge5Y^ŮlQP
8Y?Fk
̤ޅv
v[2=9Q,M9q%@x-1|bXU|`SXRatdDxCJKgP/1:M!gBHKn/	AMHJɟa M^kt*.yJyt"
Cƿq01eݥ.e&~ar/.@Md)I	B8
UPK
   \jy    '   com/sun/jna/ptr/DoubleByReference.classkS@-m`)(A2Z3X3BYj8i_~3QgC(ma|999 V##(bs7[~dKNk_?CrbkmyUeđ  /4!PMUF͔H3uw,.ÄP11	
&00rC0Dղ/wLYֈZJqL3$z)Clzôy3 9!6`TeǼU<D]g{H\y!iiaU+X#	xOEqctP6!੄g
c/⹖;tccXUAk1ؔv˗Xn;dذluݏ-m85Q5]K͈j2d^GJm5s!~TV\qZnX"ޢAxAc0a|BXQ0M3Xr
l_b5#AϟB$},yg195%f[xI4&^P@-R)O1 Ƞy$.Or΄;ŭo]\7,Yv xew02*{Z,tW:X> ^gPK
   \4Aw    &   com/sun/jna/ptr/FloatByReference.classmOPw֭+xP(ɡ3b#ƙ%We͒њ[K}~ ?ܮQI܋sw? IEI٪{b4[qX'3J
SM۱mI+)e(>0T*i/EE*q&+VEpX50(uqmÄ0QPŘqdB
0$m7TL&%뽤j"zxؔ10|l-a9uW}S1cv=0LjWzƒM<t:5BVwutUܓq_.*ֲtIf$Jx(㑊ظala(YsQlIAWpvȴurĽwQ"#[˳svaߋHD;V_YJ7JmyU^1cQ܊@&%@|<|(1|bؤU0MlNdHxAJs3Ai#<!xWnO	ėB?PQkKHC)={ȇh pK}]{]^ȭ\C;0WYzPK
   \[}    $   com/sun/jna/ptr/IntByReference.class}kS@-4D.BV^,N1#u:))O~/ 4ṫf{}??~K!%DDc8zag\h{/)w]-˶Z2FDv!9ؓ%U
F+8`r{0jF/,e$0%aZM0L
ѐ=ezK`N-ܦP5E8;szɥ/鵖H4h&̦L'h)0j~)RZdp_cWHñRS OreGYLcZQ
t	cʤyUbNȸNulHx	UY\K:ITh1ؖv],Sr<nX68?F+	éZ;Xx:C-$zi+Rg<iu4
eMa+BOg,(g4nHf@,N(NX e
y)MoAפѬt	)lA!Lӄ<@v	@*981'C]ѽ
xCy-~b~`x= ob"GajcQ>6X6 PK
   \dg    %   com/sun/jna/ptr/LongByReference.classmoAqbR{PɇJ[kM1$zg27Cg+H؝ݙ&{`eRF!Uϵfꖡ}vMnU8CdߴL!%Q$"=ΰ0~-5PբMFI71 ׸6-;jVf$nIQ0911~Z&q[v}Xdofgu+9m;YRi=JXbmCkVM;)ye+0-5aN:[qkTYWȾ- 'Ujdy1
`fWgTx[`֢ι27Qm.7+UϨnZm̝FA7S]1%1ٿ&CZ"|A׾TǊv˩𗦨mibQ/!$b`
1b"E,=<]">""7Ku\qoWGcxlg	+}13c 2\1bNj[COy.pϱ>fl}?.=u7Ӡ axúzо7uPK
   \-M  1  +   com/sun/jna/ptr/NativeLongByReference.classTV@C[҆pǂjׂrQ%PXEB	5XV, tQ.ϤP\a&s}=ɯ~u᜵?<2{_XW-3//!zY4SJVD!"l`T8v
}Wu33jN	%fL=2ɷXRD+>TO_N%trZCj#oJFםu0f蔕*FEBDHC{bKe	rzyqX"T.!K"0POLDN&N"S#'2; eO;{z-G%C"n0t5U+)qL0i2dpһd	\}6ߕp=C|:>a%<B!TW99<D<elw-{_sBV/&ީH(W8%	OA$iㅀ$"ZM[y>a8J<gi kV
S_;Mm@6if{!DM޿y$ɱ!אOq܇Uc!f#;/]8٭ y
*h}
wJH;0 fѓTJFs(Iu.WHhF	>Z!;%!₅Kz
c{.f3t29!(xxG3M.!\{1V3t3M&gDn~@q"bEgt9~(b9E,9siG!k}󣴏ҰB{^ڣʭe̺j^PK
   \\kZ  r  (   com/sun/jna/ptr/PointerByReference.classN@	46w^Pd/zStK]9N$ުEx3
.
-w[:rȫ((BXkWn/_^{[2ڿ>_e$P?FVjw-WC	
JVbOu4N>:	lS+y()ԕuzg
TQ/dH:^b^łE,	L!͙GάN9P oZ.1BL4@6{W2:;Rimzb!w6?"Ps/fqPHE-}R}=R[ c([@(
@Q^
LPRCJ֎ۿд9@TFF*,	lƑIt.}2*`F#Ss[аC>٨wK ?8%ԩ
LTo PK
   \B    &   com/sun/jna/ptr/ShortByReference.class]S@mӦ
ʇBѤ",(qƫP$Nv?y7qF?l[̘f{}X2$)Uh4]صOoXGl~~*gH9<e4K( +C}KZd$pME.AŮ7XTqCJ<
0Ef(+aDƨ13_RN6	IZ7(i;mXX8],kxh<emmfj *fPdsi qJ;+CSC[c[{HU/r,:5>;%D%5REK0ˌ3c|2xKZCC?)U3G3ޒ*4XNoyvt\y~VLj+hQ
ôSITfQ_v~o;b8n^d@@<)Oh,&A3 ]J}Yk4?L2u!^RhJsȥ3=L?4ΐH5ڑG(1s1q"&P0%pܚ,O.U[&l;Í/]\:]2ۭr[M+J^R(1kIq
jckx\_ PK
   \      #   com/sun/jna/win32/DLLCallback.classM
@j:t+P!B5EBVHwP9	`@!LuyUceav181gaTFٓܤEkac	AXڪV>(d.G?)΢d\;*.'.g>oI>Ow?PK
   \c$         com/sun/jna/win32/StdCall.class;o>Nv&F\<D<c#ĜvFĲDļt}v6FdM9% yyey%y\Eɩn9<P#@3201+02I& PK
   \
o  
  -   com/sun/jna/win32/StdCallFunctionMapper.classVSWMX/DQFjKbjP hl@$muI6th[{qN_mb#:}(&3sv.} 6#_`ۜd󆝋_33%q˶JhlRBhŲQcqDc3l]67EE+g3ys),숦^1M
!۱C`F	LG)gvdSA;uB@vM.//2h.MnH8Ʋt x["c:BC!iwfS5L[w$%%k|N`ڥsdln]kvcٹ3e+5 bhMv!2
)JdDO\:vVeZ~
qϪ٧JGPmPhio28
غf☳y"'ݖ,㌎AhژpQB)@60IבTzY,!"ᲝQd¤ۘa5A(Uh9QL
G'1&0sʚqg9q%.@^5[+Ӏ=jL:>ROF%
tE\lʲh_NYe;Xrm9Z^a]cڢtb~M(,A7oCz2yo`(fWP3աZ*;|UwX(X$1edXpj`{wU)
{N^RvOڮl#nF`=E P%Y3SpT	#uv]/]<wye'c[Om
U_9e,	ofg^o-Ypu?`pݘW
AW3R|"${*<BSZAKG'\z3tM=Cl)zB*OCdvDTHA40ZoE'"L,B
z&cZ/9>Y9xV2W-v6
U66o^!!y9N¾?'=}Z"E;xÁ
nykߵ{Ybo)o;'{&+ZWFc_BY~TpeKz!+n)=~\%l4чs,<GQ\ uI54F9FKfqFL2#]O{EQԞ"HKCD>[MJ5|eKd2]~K>W?ss~nvҳ_^5/
8!qOH|ş`бBhQ+Tng5MkWPK
   \3   #  6   com/sun/jna/win32/StdCallLibrary$StdCallCallback.classK
@TZw.\;ޠ `ZiЇ\x %" 1 sa&{ZcgSO(Ts2ᎡN zA,Ü$O
"
"R+Yj-SO,C0MpKAB
`6ZeQtLPK
   \s  X  &   com/sun/jna/win32/StdCallLibrary.classQJ@=jzkbD}S
1[>&.7gG3sffg̾>>a
.(QFK	(75r5?ՕB+BGmyʋ	٥ft(эBz"%VmQ٧GI7~7uZZPFiI71@(}}֮c0'@gZ֩YvJ@UB(*n
?Y^!i;L2}SN.6㳧PЕ/㮤	ŪR24}E2Q&6L#ãqk"~Xa 0FCc=hczB߽'MX2^d
Ӭa9 PK
   \
<    ,   com/sun/jna/win32/W32APIFunctionMapper.classTmWQ~./. i
(b`KZEo,,e)ZsNQS;}3g晙{^9aUM
ұR%m/9CÜ)rp5BDf-heRYhRD"v$H5H	T7e+^	7@'Cץ.U(&') 3-טU+m+>C&W@?oRYQsD|qCĊ(`=G5(/buŪQaf=F..jR։ b{?%ʱ\sdpQ.0V'Ä?y37\. (r)ȹzJ%!G6߮δR7S
CoCWD+X:HXd
Ŋs4-*2Zʨ2bVR$]ڡWJqR/kJv҆=$c
Jɫs}Em^gvxl= ,ԞKf&˪LzV^U8oLp<R_,`X^QWM$_ i7-$`wpL*lE|X]gXLmAXEH_
!QKIΏWp'txc2n4ѱ3nHT0ܺXP?x \˺
	z,d2Q8 9^
גX#~vL#EUl& C@zu
Ve1x N1j5(*3stA/PK
   \/  w  '   com/sun/jna/win32/W32APIOptions$1.classR]OA=CۖU(,b[UASBb
-5)2lg7~<h?eEmS	ܙ3sΜ{xi`avf*iɎ60Rfc̞TR3$Jv
Y}鉭<᧑Ŝ,dR;>O҈I<8d[fò;Y=d
6^=/oJVUlvI<	gX*;R<4ea&G״?5[eX/~@YgQ*+N(1C^rgI%NAG\t8L֭E#+*Co}>dZnHƶَPَDC{a`pGl])"dTjc(j
4C)iD"FV*ߐWJVٗAP@cP xF1R(x[4gtnذPK
   \   u  '   com/sun/jna/win32/W32APIOptions$2.classR]OA=C[-W(
b[-kM		K֤XNjY M%lsgs; ^แZa-.H#c`ք,Vka}>dHʝ,s!}`bE,1<?T{)Q	!sԮ7E{<_F-V2qw6mZz*#s~^kHyʢȰ1RN{o`-u6h[krư@r#aNht`1t;ΖJ]KHF+02dزolYɵeOqD|eO]X:nNE#ebkݘ@(Bh

2l(%PؠwB7h5M!~hB*AV+ߐrJ%VٗMHL3,"b'(%2*I|J1ZѢ?OمхPK
   \F  p  %   com/sun/jna/win32/W32APIOptions.classS]oA=Su
~	҄6!AhT11òegQƻ{=s?<GUêu/HrPjE]4Z_8[Pp
	D]Ho2ĊW*H)P5\PO\|aMǶ-3:ϐ
m%?`X)/s)R+M2*0?4~nZݎA
nGyCBthZuXbHV+eB;
jX
\Dis9ԷǶdPRrX+
iX;vP}CU\ڌܶۢr3)5Pr?p-ԯ*iO6kɺi_zZ!N0[n/S2FXN	6p״vEp2h-)-isϳ<i pHs;)6I4!AcXS7;r)
-0#-* 4^BO	ѿSRPgQ} !ֳ? PK
   \i.    *   com/sun/jna/win32/W32APITypeMapper$1.classTNQ]^B)kE(7iC$%PFlgtZE}PI>Q}ΌPBi9Z}frp>Xɨd5=s{M,omD5c>HƦ_蜐
Ad:ϔ~y,if-1m=o
ejaVAaU,&?}B0k 1Ap0b{!H=!ta 2ZeD1^WMK5)[r7Tނʾjn2/osSkg#{l:KXW#`<:[gw*{yˁ,Mu^IFfPw9iT;]t	H$冨#ݤK#_*A!j&!\jIYRW5q͙9T6t>)X`[q96$
jJmQz߻@;O(͖htOΠ|LgF1bye	ͽEIMc</>#|O<g8Gd7
37閒Q){_ E#'-ڌMq$H!M|;I"3x!zIi$E(
4$q` SvJ9A+rEWj*yvᝑYZ3<YYa&kNPK
   \Ȣ|    *   com/sun/jna/win32/W32APITypeMapper$2.classT[OA=Ҳ@AE+T(+ДIV4,e(]n7"h|0>lk--4;93盙~8%daR\cثf&鐯)<־Z>9!C|2!39U]pdˋ^I Cah\\/l[z1!+Vfg[Em1"ẌyN([Mh0Dm%c]nm	Ǆ;bl.-.Hc¥Wi	Ul)ct+nfFAѶSKԋa
xJƭ}cwS1Qne+Z%ncס3$dIfEAPKe'g)wV}{Qt6uCe%)2A9HijC,N'OΨgVPzA3ʪ^IsεpNCx[!9ܴytn4/z\$EAo:l/4r L_eYD;TCaQ=	OWо/SD8:NhĿa
 bGKZF%cxNqU*$lHRAzXHtqݭ0>i-u'6)vo$DfJPK
   \Ь    (   com/sun/jna/win32/W32APITypeMapper.classSNA=Ӗn,HBEHj
P?CYqq%1 >zghB#쏹w{ϙsg~$
*<*iha赺o\5>.}5QeON3xxsžig3l&xQP@#%9ѽcq^v"a
t2nnEM{Ϩ"'JrX]Jd:KW;z%pE{XٛHIQCeq,ۂ}!/\	R82(ˋ9kGoAhH|P,bg3i^ix4e
\uk߸		?;7_.-i0Jm,w6߰()9n)`&5QwY#-osU6+[q~&+_(A'0UPB8e^
Z1hE65Xz^􉁑'&!턴l!ezɎN=J~p!ƾ="sߥI,1hP,yH
Q"uHQ Ea1HxgIP}NhjQb
%
$e`U)OWÑw xC;~$O.1"X
<ӔZ&1C6B/znPK
    \               com/sun/jna/win32-x86/PK
   BX|  t %   com/sun/jna/win32-x86/jnidispatch.dll\Օ?0$dp&:ĠRT423hJ)5!nɓQb6i?ФvٖH]bI-l]Z'3uYPs<3׽{9\ϝR$IJRKs$锕ϟ",y^Sk`w1޻lK_R~gnu/YZ1ǯǶviֽt}sLױ{o(oz'8'[t½'[Lo"eSVH;̒{jȼnZ
E<JYEr(.;fj4j˒,3ˀY<I5KysȦ'3K%/
n|	2kt-I!&6A嗲`Ҹ#BF*jJ
>p/қLiV+􁍛w䁄
M.sFW&CAw" 	SVŬTf67,tOv
*)?jO8
_ެ:7IW}75tjۉ,{&8#/P3@,ųtTLIy⟩e1-b~1)&{"resvuYϋhW0Bw\?JIzthGӝY5?kgggr6otWwt8mwRBwJwΆw49ˮ.pveO]e_]r`.CtK]zF;FqG20A!.Óth1Oiz)Bt,T)]et.Sgm)'k;
_ iߊӛP	5z r-ojّl
s"bv%&¿ޢԆ*Wʞ0QܧQfe٣IƾêOJf#zi6jv\/+\V:%],dRpv	jbq]+5W$XPy(3C ~UCُ:J$v#כ|2U݂91&EeNJa"І֫AӊD}$i=!`}7{t:B6c!th'^~%O})-LòVI82LnV$Ew IkVxRCѠڪ|7?rO;;"{ױ;!v`;~ځr1jDP5ʡZ0ϡCi49Aq2CPq?u5NP4/p}jO!]ȵ.*>AMp-Z:
S޵s@rN_w?eYtU@qD+ŨV:
RJ Q}LAD)TBe*:-*$0/@}H=sK%od$;K^0SaVA2^quO맧@ZUie{t%5b9e~DO
R\81]]É\xRL?᧜sAi?MiM1s1MF˓jIyyRCgYe,o@R6PHۘ敓e*e7rUUӪ@uyZ`ZS:nc*xRx#UcC<ċ'uĆS,FBbY!,oP˅R߬O]TQ(9FiI9rNc	|ՌsƖt("AcHTGc1LGcXF4Dc)i4*FˀF5JDX"R,XbL.*(XB4%Dc1XitV 5ƫ9Z
4+h,"B4b"DcXD4=H㐠_J!*~*tc.N)0Cp;TFPP,A〟J悒_2i%q}roBPՍ-7r\ɠ|Uz#eP{1P4ybݽ\t_Sc/pɳOtTƗ`4cWXJ,:W*4ȥXtQ1FRҹ<1ht.Ncil4i|a1؏"67:mtrs̭'UyM]Βܔ(<FGȜ-(3ntbbQFujt؈6Nbr'I^$v.D(]%qRTtTY9;;A8ϸYҪ7u~)S"wZ;?"b,(z_(a+%bI,{87s9@6
Ġ."nT:?3xoaI]IM'ǧQ衃rp=tN󤦵yROcC\ȟIj|:M+{SZXu11BV:4IlB.c$"$VRBJ ҘD]L0#H#ǈDHT9Hb~'1rxOb>w\LpMhiypoF֙VoUZQLU	vT܍	.*ƈ$	Dh BĎqNhpSHj<X1h;NQTTT874n#/*aRjEC6D8Cq"a],.tiͣ˞-˾@]:<m!B.qKvХ]2E^et.cp	
pTu6ol~,vmI}$C7:C-lD
9Rh{ܫ_q҆굷܌+7GIg`@ )r)*Aj$=SN EJ8@y	 (6{qrLc?Jr94mBݛ(kx'x70n~)?O݁gUޏGqod?=A54go%FDn
ޗ){,8&R<c
7S I
>U6*Sgԧ:SfI([	ycq &SoB;񃺧 Bq)xZ^Rqln~!c'<(a9Jm6\;kO^[8?3gīx|*l",%
R|zJsXy:ǫy:
^߮qcҧiȗ{ed!5L? I^u£-Zys#=U<	Y3o'gsZV:1^69FEOq36? Cd1J\DyEՔ&zuUܽ)x!N;/yyV]Zmy"8!5%˅TIL(e_
^cg\G2w@F
zy=v.zz`d,Y8Rw(q{@$q]y>+~)4(_AMH*T-騆@?1!hXE,{
$:ijя.4N¿]f \Q$9zq5Yvũ٘=@'v]MՁޫp>g g#S/0rOOw'plx~'q~>l9~w~{jwgY6	4L4NpL8SߩX).{&<.X8ڟ#IM)ò$3V)dT~^'}BeIsGΠٟcCZ%]JOTH\Lc]~kQzYUMNe>u-5^HS}Cq^:w6MOjn`~8RG'I|[@
Pz.&W6͇wr
!꟯dOs7]~}I{兕aÛJjbbWmKy=%r %S$uRD %TJ5hD(j>ouG֢SqǣNC<uN^׀q78zd	nQo@U0aơ
ylycF`9_[f7H|}	|!ig?>#
Twf#Ñ
v1RLH"Rn׀ΠAD2/}0kPY=5]Ph,WV)L3o\z'n[aFOkwX%=ibyE {/W*<&bY[W˶V{ӡe.A'Sl-$)yF	7M
x
'ɷxZCZMk%ϫeg5jGH@qrUR]"8ol*lK*c6nbbSS_TB0h-|	eL!SwqTI*azjfG?iTBC'p	*#N{_2A!m=>_ϸ.Y/ZK#ieKt=+th
HbkVcr^R<rxe[;xSF jIyD/jcdW]p)
ݤKx8\{Zn7/?jޥN}hT;[u\?5-8Mo-g?e8|,(цƴS_]MCGe"Ro2o3nj'TpY:5LeWs+W}.Ǖn4!s` %pԐcpq1m݌J"PN-fODZR :?Lu1JJIpo9R6=N6Y|2NI/S9E=Cmg-&|X)gjSr7$rw%l$Sb$4`|n:Qj-0b>@J?0bZ58n.'OQ>Z<R*X-F".j<I>n>Aqn
pn+0;_%\+9Wը:i	(n-E5֭7Ay7(m X4U(mtN*
7C]g5qgQ)(tsEwE#^CiZ2ONk<
+"I}雔,5bl'zIոUĂbc	~Z}I>Xبד`r{{)
-n҂Ŝp9'eGYn.㤀Z]Ф0jlL_61(
3䜉WM:N3|@
[ok~
pI7DY<Ccg#B3*gc{\P㰴s_]j](QOrBӳX͌)q0ju9랈`H}=#Tq)P)tTcg<
586+Ab/xQ٨\s1b+]q#q :9>T3~+_p
\.LmASv؋IH#PJcrov@?_HL,'
JFoE~qju`~E~0y|{H)_@?vkHEou.֏iNQТ_@+XnOF{UhFy9D~oXcx磼J;Fԟ>nKH_%닏߉-42sS#t&DG"+vQIN;Ӟb!$'D̊Ǚ9A7`
>@TNR^n&ϜYD].+qJN/m'ޅIh*Z1z*t-U 'AqO0ajf`fUd,=8O1/@38eA!\@Yo%n@3}KHKT4S;ch}\Jpo%|B_wZԹ7˟6z`sYPqXp?_@db`McPjBjV)9cL(Rn~8yP"M?N/_ޙϫVWg6
\.h>oqQ=뗿zS$TB
3(iXf׌|x}k[lp8x!Ԃ<ДbېϭB)rSk9toKoXoY>;-Y(HzAw槷 ACow
*yA;x!a/'AiQAu2U5Pۑ^Q2_
/FkJO/5\qY6<>ՠVB\hFC'w{RWsAn._Iʄ^Ͼ| _!>o8EŧsQ6eB|\ LOUr6ooȧs0;֨,
xug1Dކ٣4u
@Po N1&ٗ!ɆP E(Ɂy69oB/yކH݊@ZFX݄@6ϓH݌Ha<yS30MΝyUG:OR"b	Kv(Ox׉e?7m/|h$>m4L:mS1ʎsh1

jESФX^,{{O<>f-hSrh3f?zqOlK/}g5RXM/yz.HP `6\|9x*.bQ^ǖ*^Z U _
<v]0ɜ̲lY"beV,ϩT{ss!dd\rifbW7fU@O%5ڤSV3A\+oGv*R].']Z(/Dym|Wt@N5yif?HC6EϥIƎ|xRz!2NznFj#wxn(0HiIůZR?cc)Hj[IFoM ؔ>hmRbS<ߢv>cb7t$jb'idbQy9P	Ӄ5I =&.,O<Pt@ePnqr&QҍI3=+Fun2M2>Vۍ$4÷}#f<gi3LV0<: /;>6ȠHƀ|Y1z5/[mdsl<0:eEϰWraOb>+QZDL?JRr{24֖^_eն{VE,
Vߢ5z55\fXYΌb6]	6=6\@uΡ^,Պ	0AEQ*-#g0NTۗ[
]T`>Em'v)FG+	NVoA91@;D5V|vZū;Zl#(`/ Tl	_ )% !^!I񜕶ZMVw`i#g 2:3aCXy
s&4L`c=jۼU%HF
?	T~x{.nZ&ٌAfٲ*DX
e7tbw>aǂ=ذ6D=&Zbxz|XhD`7-Υ5AxַiK,>q'܇
ZܵoUrj/`Qr1XaGi.P\Gtg?gީقM`Svj)ݦ%m8M1=d>3ƶaZDRgh9|Qx[vz-EvT>Eevwv(97}:~f
4v0Yּ2թe{0y>64>(R7m2\$s|jgl&ѷWs>q\½\Ky՝bn2MhO	qxRlmd7(xRQ$\mI]|i4
owsrGU$gd"STڲEܙ3HJqG%vvhPnXolPn冑p#UJ_d'R%M~7Z㟩&'546)^PLCvRQOԪz-X=jyRһ^Qԛ~˙amTOhD4_\	
3#8CJ/NSb=TV_TFPQna;aײLaS@MC5ǱFV9$GRӍKJ[V;2fKY1+#{9L=ӟT".d>%d{,H	WS/>fu9Rɲbj{W3mܸ|O5el]yn!IE>@T0El168BX
Y0ܤ1sdw䀌T=9G.$urn޾Jh;XAS_U^.ĀN+$3_{s%V܌O!ԴG)J5p
 }d\芆݆obm\DږgAD\cp]_p37(Ug2f&6WhTԲ;T%T70TS\ןyM~qJG\>r_Rjgf
))(3W?b}.H9צ7#)h9泄c
?:bVϺ#Ci_65
.	*}r{=<LR:9uMD$uQ36̭2,[b3dPpsj]9Z)EJȑr/82ӪZJHFAe>mƁ4@<eNS^nC{Ds(ML>37 )SJΞdM
-x=t~(#cvz] ii
(PE}ِA|$9'(9}(hɜEtv'ΓbILYΓEwJN?o8)y,Dp\{O2}p8)y"d$8#x<:hR]ǡ35wi@Pz@5-[{?fVC0]gRj8j`؛vӰ!QbQ\tbr%r^bqLW	g?"AY
KD$hAviBreנ8!d	GݤB]s֋ܯ'yf@$O=fMim')^1ҒoxDwTdCBnz{a=;#cI0p9.@Xд
HAB!8%ٟ|e+p>@}#lv¦!'E`],ԣ1UgE};\_$@\-oQ3^(oisfbW$uM	D6q4~(cC?EWqݣDZ?joz}w8o-!z|,<'ZJcKL{&|r1u_3vOxՋxTjs/cis8|W|76G3CM{վO!UC 2iWcڹWn[t<1~>$Dܝaoo8+gWZ|QK~f]
0̱	tKXY@'qedUjaycث 0$B>o<e|с1㭷ݞ<lv"1Yɋ*9.~8>	&9z@YK`813A<wT	6$&y:x}Ł>p$K}2*lT0݄}Ħ>Lx6iìNAv tCAJ(v݄G#	{]<0u98)a;CnXPr
19ЫGiOCS{$w6c$XgX}^ͣ-DDRfv]N3ERV\ŧ'9#c-b:h&&<~"uR-jo4kj:Cq?6.biZdźM5AҼOBrN[2?+V/V+~O(0fŮ4Vl^*"hċ/~v2h,^/\pl[ՖPX`c6Z ]0Fc cP)ml؟¡dyTv cDpr$~:{4~H1]3|0%d
~?Ajzhv+`Sd­i*XLs%Xg0aQ_k>eo[Ke:?[^YX8'[4%Jy#)_%VW1zgsoQY_d|~Jv˜w9ų:>V٘Ղyjo:=$^\Bd
8M8T԰
jET߬V,ddrF3Ο?0OBBak<ĆV_xE?=4@KiDj81<< Y2wMMԇurVTY[aP--?mv)7pr֋[!?~ݴb.SIq6@EIW8"ak^*&JIIS1'cZc!Ӛq3ĜJHl-͙rh\IBH+j:Xr>%Yom=+0:e#-CJy^CҀ ~>IV,D'ߛ~	9tJe)1`3:&=`qFCuZBzu4^":xJfüxV-vjzsTnރ(	K^iCo&l&ASϸm*t˃V-}MKG][6
#7S˯;B˃Cyx4u,8˺S?FF\hE*ź`3w0 |QLnͱ#%NbJ{kj蔜U$76f+5&wY7w]NCeHZVHsXZz
Vgkc
~?÷ Lfkjɶeq ?m=܃ALDWB6+'1,Q\hKGG&HqpѥgTш:އ	c?,\(<g_d#?OhK?LN4A8Ms3Uܲ_4ѷ@qk&v&r_:"Gg'"{UwW#,
~`E׈X4,#]}Fp&^jY2ƥ(F.TcJB6sPAk60"fOOMa~W+$?oG>5!8qZwLb<o\\L~d&x>ŚN^^H|Wᓐ?5ѯ%!͹ML)׼+uW9Tꟸ6U.=8y^:=m=vmT}6
iy\;gN1me6aLi9ිk[?eK%m}~s)3ܟFZo=h3T¹̫#V,륄)B[־ׅD؅\+|!i]huzR`?Ǣjxl6y4Ce3/3ϸV&4NGOh*j++Ӗٛ a_%bI 482GR
vIv{u.ˀ!|0=zri-GfY--Hn=>i=K'x|!mEG
wO"<":RFbVE\pn΁a7&/Sx)aʆ	?@I<v:
op2FiO9c
G)_]⌁!9+!֋=@8DK@'ah1od\ӄ~;s Ҏ$NJ6~*!^v'99mŔlIa$` N@q@č' $ wA3V@4ΌHF q@
Cv

vh-/cŅianqD@3.76jA*}yx|a ,d!! Ⱥx| _T=Cx<wJ8VU sX 
;UvI^X`# M 
، l$>'{CH p60. 9[a, ]< (j'1g΂O	I8NS vr8 $.%;CLipK%ۅ \ \$o5#H76|"M ]Tdov8B26C|B}gjlvܮNNwsz)naE\LƆJ
Cb&CGqݭV.RtKS#P[zk]\Kj]o	5 2NM'UWK9?/-%^JWpW$CȱXx˱ؤxdώPΐKdFS1.	&N$H.6F."ؘ
(^&!7L!,Q.vߎy&O	)QY7.*&h2_-q:rF-ysr@$8ATcl1vƿ2,zHœ^NSt"V~ 2.&FI_Gү#o 7pNV!'w}8":Xc<L%גY+D&YR]%rj¼,P##N#E5	鏐kH5$}/܅rJ(99*ҨLwXJ'Qoɷ[ITUt9@;ŹVS{{LPPuQ1FNc$
~	h.FN^x*=NzNDJu7.:(Kw[F-#Uz;ҝh'QS;B	GNF	GJtҏKH%$bXI 5:@;*tO"B'1t HDVtB'Qt&KJ	 _'}X !}_@/ ɧZV'	vRI+!Icbc<|'Iy$<rtr32rI+ݩ	=E	O=%(p?e,|]T	$;I9ق<$R~ U`<@lEAj7rm{mi8r"C<ȩ#o#my![9UCr1DރqDYeP)q턼] o'dGhl)9_w,qdIC8r1"GlEڈM$ y"?Ƞ͑[E 4G֐9.D.BND.20y!Ȼ9Αr#"e<㈜Z,8r+!
VBSG@m,]N6Ƒ^Bȓ$G.kkr
!YՐU@䁥(ADnB1zB^/GА'8r+"#Dkr-!G8rDCp!Dv r979<Α|p	 .E	^r!q1
y#Tr !rG9<ʑlF:Dގȝ[y@B#yDCDN+ w!rț	y@LyXC#|"<ȩy!{y#iCyI<

{	y@Ky@CȮO"!ry@G_Ce\5\cvBnǑ4>\o/m}|@  ^ܫ!rDޅ܉ȩì;r'!p
#w#e<Cs wr@"nܭ!wsQDID#r7!wq.
# #l+F+ΌC=;9r)@EaKȽp\ȯXȵs r@#vܮ!: DnA`Oq}>atD>ȝs @ y# r_,CQDv#@"=y##=<9	yX r+GnՐ[9qIk 6h}mqVKx#Ȼ4]?AV9r>!|Bn-r:DAd/"׬6h?sB.đ4&\-"o^m~ȅ\(	yGޡ!ADnG&DnYmЛE\$y;Gޮ!o7 r;"Xmń\,	yGަ!o]S^D[m~%\"K9ȑr# ӈ<ȣ
Kr)!o[4dkX;P|ߟߤLs758b
$WfOݿZ~bu!wX*V2+~ww8BVmA݉U艋'㳅BA9Ikrྱ':|:+Om.b}
1J8F3|5r-3z^c6¨mt6tbUl6Y졃6-we|knx]l[vr_Oi8*n]qvL)T n߳O\قKɑ޴٦Y=8EUYbCUYՉ0Ŭ^4rp17ilwJ-[/`8>IP0[YdVkBU ?EE^e=|<KiNS_
$AtK^*'rb7zu[s02\6GjY@gsb+vCY* ^PaLc"j
.#jAQuwr$x.bi.hM)&3SL}(ZQJ\	jRi7]{}@=W4$QXO.M%Ead*SGV$Y7d$9]:r
_~TjoSwNf 6n#]xb3#4Cd賋%I s1)alKeStШN\`P#kD~5ݩ9J$'}9|#Y~^*lZR}0%GǤ4S=k:Z"Ѭ!ߜ}[e
pk.yrclC&$ސ,! z,2+]BI$.Zcmc5[ez,:"KI/O4ms̥IX{
@7u"k`nqJښ<Lm1EF^hW_E0Ek5/s6DLp%iɠ$-JҒ$6Jb[Lr%iʠ$MJҔ$t6?$(#0V)J?$΅(I+JXI(	M*k!J2͕d[%f$RP)غ%D7|y9ql&zO?ݸm󯔟P 6Et.Ր-
V
oSVzĦM=[[,W?u0/Ds)۽ǮWVJy=Hd#@e){8d{8)zpb:pYb'ֲF[8{,xǶp"΄VO/K)Y.Ieo]
rٟYxli%o#'qHIV~x,Zw=b=
F; >=њ`؋
M6jGtǑϧ
Iږڹ}d:uؿ~5=6h
ҩ	r=6]swkfto1
A=L<F ᱳx\C=C-P\eyc0dSZT|HtgR)Dӿ/)PL)m(FiBCQ39:ϰ?m]F8Tf3DRVȕvCI)CT]LYbP\RʖJO%C'D푹BI;-KgG8:OoߝMT?7gc,|k$_%u+\>,9c@r8~.9KA1	!zkW$G!ÍzUrW6,9kp+5eYً/^l_)]a'{mKq;eMye4;ƵiZvx+ty}j	֐oN׏$;?vCȄc+,;?1E ,.V:duFh^lcx_xL+YsEW
Jc>~o"_PI'R<綪@&JGIovbV@#m8iJCN,uP(t,n\b=?cvkJOq@5>yH>_њ˜oh^K"yգ-o
l=wZX6%\28r2%iyZg;a?d(jN!gVl̀ !v k#mϵw-)ڍ|$mfhRO_$of\[GE98}y.A:gIfV&s&d.Z|9M𿖌wm-,\i۠ܞ/yl-o^8LYGϣIݦCSKTw䇎[`
֘G++q<,Qyit4filIDC!LL$9v+ovpwч጖Swlx-&8?v(ÿ|c$t|=t|s K4sP$;lX^ ф:oS%Iuegyվ).7\~'K-D_ZT2uUP$9X$ڲnM=^W>h1$'bkb1ɖ(Rrc6nS|tQym6'_Kt4}Zb]1_[>Nݥei4%Em+pFlɔ*AKTMPa{SA]\B[
k@iM`e&^ɜyu'bY.rQmfGEu3	^0^ife=n&R-ܾ&5dG8AP%T{yLko̔OsnRЋpL:LZe` b2 "-ۧu2ApdjG\cS-cNiM`nsg$2ArrB(BE:M~Eq؟[(4mn(0Ler<74Yza{[(cfЭbVؘCTR+9y)~GʜlH112`t\-W$[Q,9
gd-#:\:D5^õZj>?R-Lu%%b+|jg;#mOTuO$Y*!pURuzinT58ْL_h	t+vZ)n8Y8\ߏ~˾
S:,Ʃ,	Og#7M(Iߡ?/J0ǼU*g3툭Z=/aY;{yBn(][r8]'\d7Ba+tȫe>̎C:A9Ktٟ8qk+Gǩi]+WE??`=Ut˾8YU&6GtpW:pHH}niP	OM;㵤iZsXGͭY,'VsxlI/0e_3WY);Hi
gt(
!hٳPY\eP$*[6˖0pc۶e!b8L鬀Z]^JY|Vvv_qNՂw}QgS;qɛߧ~voɛ4$kKoђ%bMv/mlL#qR3?1Cz*~T^QTHϊ^fWJǃH5fj$8s-+3yHAO]

BWJA;c;	j٣B/r<6@)fBᗄ٧~SíV؍ &7{ASsK֔=){S<<HyLyJyNyIyMyKz&}:U4^7%N-bvZi
ti*i.""l."'B二9oh{=Kߖa00c,c{7q89dݽf U` :n
nG&Q_yj"F(Qstg;#-~hP<;im
»{2v'}ϧ;	*a(I_`4w7(^6;]<z;%ZXyΗ]j3dR?ԍ!_`0$9Z+i:03R_Zg~y'y}FnB0QF`78ujbWНP['6u"!^?
1fq_8Ju6|BHgg3[/FC؛qcb:i(f<cMC(-_;y	Fԭ|`ބ(i8딝D-dMP#b"NRSzN	%ǚK\cs!b4̌

kn9,VnW{џwfaTU
=ޭH|.t(>c IUOl1b}ـG<)R|YQ6*1= aU9|ZG# 1\Uwfc8GԱgA}Z	Y;iSYNC{lsPj-̖?7G)B၍QhêZm
Zvz)V,tWӢVClǕ8uM Kbkgs9^HRKP6OV#ԅ2 H:pH 'h.+Gqޭ4O\ٍxs[8FGm^= #hO#8Hzۋg.aXgGdi}`}3ދ1Cz QgKek,N
dHI6.]@%E/o7&&Z!%tL_qngp\ʕ6Ե˷N<s)&D$1ghZTX˽4aH+:S7(^0$vZ@-<y:Gbnʫ.	2V~x>ZT'8pP~SIYbg(Oo)г')	t_Vb74>~_ZYxxB,cRw Ҋ_\n]ͿR\&bB{{"߱:9pQh,=<M^J~ʹߋh7afJ3hK<1ӆ''\f')IJnΦOj6ˆcI69-2xƪې\ߦ6E[gUu!2nՕ2lut
lvر9Q7=~['Q$zN{yfJXB7v?JӻNws _
c덱eڿE/.^LKnjzS+5Oς
{x кdOvly:Б5#scclB}k8;\ӒX[Kָ!P^kPsqm-53zRz-4
U,U7P޵(:YbZ3R=[J'6||G9X>'VCW'GDW`ej
JKY5/uD	"I{W⡯X~Џ65+&)Voub }6\MA+
^-f@w?vSl2[[s{|6oGZm	,F9r&%mҼah(@`trBO ul~:4ŮyڨKRQ:CIIs~esBD!/(_K_{F{BBh\OnkX.iWƲcYN	}TD
jWQϷHӧu}1'|:J˩sBld
Vuٟw(nF(ZXeӲgKo3,I"Py.sld1QqS8<SP.Z1x -{]:?p&S"elߏbd]n^5Ɠ}XQZ;u82Q7&_o6$Q5b	lb2<aHVV?ofd ;D󂲷ݲ_Dvҿ>K[OK(t^-z5]j氚02I}7"ߏ ?2~̂c3L)>	q*ӷp@r|˅_ͅeaDs~+kF[>bEF	fL(5-WLAX /C@靐 ,\ө{(p'yyG+)97}
r+[%}45SW.ݯG5oZ9{ur&fuAnF/xDè4=[tD!t=`-B좥E+bիESPb@#AJt%v&) Sfm6'#J.?jq<VYD1.RQ#P .*}pQc\B)M/}`J b`/qǼ[sl#NީՌn:ld^rsډvߞ޹w(&A3SڙHb΄#䐑=n0jWPq]^x1c0RY+N!~'4j>lMB賽2nP-r*pdlog_к=LD/MagxdϘU3n8t{̫f# v%92Dhtk?&;S@i|a/^~}H	{{h=cYC_x>懸>Xj&(k==jJ3XP7ie*Owo7Ko=FX!n(P?x
2x3Q8#즋?\VHDxv$X7`C'JCo#0# >1A)oH,mC}?<$a]-5IW,:J
!jv=4(f""Wd7*MƆbKXg{fnoc='Vx9{W g~dP;U[ȖxN$6C?F*ǁuĈB<Qſ{Y{+}<d^MB  +	d/٫xY'@J	^ZVdmgTdQ/*:rGhZż'IU|[f{jMaFذM!knQ*@J ݜavg';6 <oK̐~" &E&B]KMCUBaU$Fr|ʇ'_JdtFnƍ('7°2%dNe(0r!ZOW
f^ȇx]:C҉Ӛ]+ag .3]ظ!;ٹ쌊'#dg%Ev&[M`g[O25S
=tBΡLg=2si6'l
6s[t6L1GI9SQ<{٣A39y|tfs"zCgz>(ۜ>fs"zӇK9;h
"S͙J9S8-9fs65@Vf.ZqL$A1+Ըlήt .
Aj 
0%Զ"yfO)iQ%Lcܓ{]+NhCoLJ_kers\[92L!{QݯH'fxͰGj`>[婎Xbl2>c(ĖV|$총Kpꠞ^/$}-Y(,gFy s@UO(C؟/nn-!m-ъ$}y	U0N+֤ys4|W,K&%LIy93ٓ\Rp(yFWњ`
mu#+ܿuG
Yԋ]uDO؏
_q*B]72ݕpU+V{{TтB_ۺñ
/4KAgؐX0X~H/VGɃ'چyA38h?ORocm$C0.`(AѠFJؠ	I,&$DL-iL@kH$m&o-J[h$4j,iln;qS&ngfwzy|s|=y9cƔ0pؑl7O427ut6E(N,L󆫷]Z<hEϔB1;O!i6Ru"0lܣKzai>O_XPNBy*>}ژ/'YfNt_js4#0*4>Gma"+5SC>kz5š-?<eke5@˱OM]?49?H<ZyS~98y<Đ$8qc) O	:t#UU!;{וW>DUcwq3C}[:t
xzi5Ɣ⃴HA֬A$u=qڏA*]=5xfN0wR
8zC;^o,BLY*xy0!zzGCiaF#4`eiq0lfjGH"SЮ;K`sx$b
'do߁Q!y"@!nt	!`7(Glz׷hf6$9`N/&d9w~W8Q9>6wpʁ%x )8eUrzO'QN+뫔E +Tv-r 28O Am ɢ'g4`"w&: O!v`Z!Ʃ ngtXOE
odI"cni
[jq<LS6#4U|`_ 5xF<.nLi&q2: ) V$֨w4;pIރ (C҈):H2&TwD->,pp߰Q@N܅F;,Nz{$@J_]ИY|dlI$x5uj! AgiO2M?$|'⴯ fkGnbqƠZ.#C~t 72O\g^{MPCLgJxqs3I([fܑq<@qg<$@F$Ap{ږ"`ҟ!ylM!dጓOF>^DH!k	D}h#PH$W}# 8'<Fⴳc5ædCS
b8VcrLr8h0!)Ӂ#B1Q(f < 2Z0*DR fr%6ًè{64. pGvZ@As0cj#}1T
 uENII8Q(W.Wq$j&BMw޾ k ^(hxja[Iш0Mc1zƺ6S 柩h$B,.F}N<gbK%
0PA	0 3H;=(ʆDUQuXL=	 ב-;7C0P+Nelb~l!FRu'iM?GKBb+JI-bZb,Ld9AYÆrJCa0u#2Ѫ@̳POD<Vhkvk2~6R6MUcr#
a"GKDQke~Q2I렽v{OCNi!E7}z? 3;~l>E2?(w83@+aLNMs6D4`FӨ94N4ys~iڗ u:úq0ޠ\T+tc~7_!Es*W粊i5?'g6vnW-,7w a'h5|CGgNm

M /UC'1s#U)tr68͜0{ȻYy-;xIjl~y5č!QD40s
ƈe;335P{@`v#v)9812J'Q~ǁ2lUb)Cqi1dPQƈ2ӬYGMʬP?2u )#A1K4MC/(J2Cce!ʬGh&QtBiYJopT\I 봅X|d
c*=`Q1̇M<(30iOg|J3(2VuU%ӟy(!&F)!22!ʆl!RҟF)/~Rp/ߣjQ.RToE#d>Ekz9Z[0TAs^鹱?52A
9<\h>Bu\!ksM9"=0Tr
<u.*kf[UD։ӋoX{Ő=tZA(:h^_s0TH
IB飱\zFV9qL !jH"SdfZH2241 #+N?d>xf{g/q"qY\%Ymb}ڤxAࣨ<a#818:ȡ
IpejuHb?Bz7\¨;0Y(etzx 1҇.
CdC-kmV-zQ_>NA6^-M
EYp9xi5ZABfƬQ_'*?F}W>^~
c[1}^70FCۇX1 u:a0Vce|mfHcx`{ap6+3E/2dp6ؑ`USQ4Dru<rcaߥaGcm#h-#XN2,&3ilwtw%MXp޽PBZz|{?m=
ћ7L&$'+H(#4K7`NDN@9a*T}&RBc۾&&7,t< 센
D'F/[fa$0]&"3ӊ#M[z!nb`Y'!C^C)DBzMgbh?S-ٙ5A7[0Y˨Y>d[jRibzytCN`a5D$41Mi!lk$y\5 0ч	J-1[wFGVZ#-4eSTt3btt ,}4ڗCLQg3Y)d-s^1x]	:ivϢ!\'ѝ0!e]6e̍2y,*G)AHC27!C- "F*fRZUxv= +PC"c4	BAC
i tmsTQJ	R/!b88qTޮB 68H0p R)8# 71jRpѷT_MI;I=:MjqLLj  
fr3P-I,ԮYxZߎ+
i.0
1WZiRsB~x3I|.GY[
#7$!wq'i]leJ0I{NG~ZT1TKj'qO3N^GwrxI=:FB)dNy'v1\3F]F{2ዋ{0SiD.DrB$Y@Hwt`)JyL)OcRq:7T!7j^zڔ4")-*4HyM)O.=tT
m_N+Zb:G@;*.f,(v e[v,<QTU8֒ƘlMxmB>[	sS@pL4i~M,3u89OՑ9"oaK09YBm̄o8!# 4֍!=9(!D+2#no?
_gk2(#i(2$4;bF@)D[`g<Z*-HtmC6)l!qdV0m2e#+4~$eD~#)eRS@3R FO)ܧ6
M,MK}qߦDmrLm
SE{P0  SŁnEL;jۺDT14
O#F1(1d-x_
dI_ p/nCSG*+.%1/
΄O
o7bVú֌U4gO+RiIlW{3w{&~Nro+pG#}!s2/v pu͌@0q\,FϥOӼIKF}ɟ\k˓zZfax7Z#Oa3҈8H⼘0?zҏ\`63ՆU>
oȹ k1a; H=}89sGP7L3֛"=[b"ZN3[;9`JcfǚCi=M1[*1|	l}"b~i?bш:<lMqOFfk0B5q𧘭N1[efp(8l	RONI1[3Ak&8)fk觃l}X;$f> 0C*Xww|<5Zm'2(c.7|KH>JKHDWo@l9dQИlWVq aḹtֈi$#aEѡk*V_S}LP1KGIu&f2=L&_]{<l\Wx#v)(iJώ|v1S4BiX)@MMDl*k7C&3ƺf,coȢ<@'K*_Ue6d='N՛l\`7РZa.Kx1Y
|?l
| ^䯛DkȘd.9cbU˼fƈ֞x̏pa~,;"^%x_tXA4fdha#QM3#ٌ<J\EhM1.'АeĬRtCRGcF{ݱB
W
z#5GXoŸ=.$N)ޓ|MCW`5ts9ar
 ^Wdn~rjßYVԥS4IeBQO)eɘ8_ZLL>Z=mT`՘r7>9ImL".%^J3Hg̴w_j2\dL;ii3f>}3fھ3mi"3mދ̴vfSgSl=ig%&PGh6ӎLiGbfڳ̴#4ӞO҂ٌT;i0FrhEn+f+7]Lo=Bw<+Bbѷi.rY<w~w
ouNtYv\!k2 ܘ q6aI-iYsMD)x;k(vȁ8CAxRm
RGiB0^$.?[v]\V8
.J\*(wp$gjB?!w wa"?!c./C)u5FСF2cM2Bg0h⍥GHPiskۀiT
aKw;]{5Xd
N!b0Cf.M~i>f8
y:lE[j܊qQm=/-N,Rv;h)Y,S'[o3Bs*Ka`.\aKУx^!e-FV27@_ۇU0Ж~n%?<^nctrZDÓ0|:%w1#,,:cRBG¼GJoyFDJ8	hl&`m"L؄."ZvH1;p F`h$Jhq㘲Jz ]s "'iSaxN%Ep6	Fth|ìyЦ5zj,왐l><LɆay368cuߨ3mP@>]vviN|"W#}Kh!i, z(~ 9v')4<f8: %LhbStޅ	#-`3ux{33ʞ͞`8-ucLzaͤW4h!
l|^i0Y,W^1`r
.'??/1}eBкֺ$R""PL!yKdpB4B#$iu@ mff.3+j}1LI9BL@3ٱ&*n&-6]9)zU^ʽva`_.tF~֕Vg7~~n_/G);&el}->ű؁n ЧCw!/XC8f
R
[gSX1~?K1?|4?l4?ҳGK5
ȗvF	7Q_/0'z!qƿƚ/:%wZor62Bʂǈ靁{µ(>'ɵSdB(QU'SR`?2#.Gw(.1K}A2]fw*IC	Lh1_JDjmQg=B6'Ld۱HLq;۽DӿEGm
ĚiU|BDkZ*GUЂ7|/zzp0[pώvaG[{b<\9i>T!:!3%j\!qia`=Ci*
0O!7WF_&}'ȫD66r)xJ13~iO1VNK1AVR%32jK)3մYVߙX]op ,u9`G?'jz*0|58 +]vfLއt7kZrc
q8tA(&(h% Ӧq=nR$L
A DJ:S8AM00e	#rn@NF'F9Gf"'pHb:!Qe8|,Ν!=CjaX*8j@pǪ	EvEJvq߀hTR)+yMWx9\9vUs\0,_lgZjAn<{tl|.ʟM眴Y]ELz>)<pɅ&Y#3y cMHB}I疄=^WM6	Bu!
ȲCfWYUH$G,2I" qҕh,wXIax}?n42I)48rLR2߽ah.ZXm0ڿYIT2k i?mZόА-LsE+h=rE5itlڪH!Fo Cv2?ʏ1@AA*!leja*+)a&|p@=YREo/@'3s4Hhzt6tUg>~Mfi#XAr-1b#O0\F
 cEҜV6;UA`-<yv904|:zv$A
:Os"l=Xb^ID C#g~)cq>!^RQ6HP/&/s?{smyk~pKwY}ޅ5x}+_&6YnC5Sи(%qmq|[!̯:Lp¢&թlHu)kSjcdCj2@LjFJ􅴎ӯk!-	찚-B=ߐ _oA oqPc3	W"epW7rDUo3yri'EMw4{3SڻdRK5Kyip߀G8`wO0_X
Yfi[kKUu>+~̸?xhѥS|6`Xop&rF.{FT~SUPo0R?]{_z&,&8~ZGmHk?{f"-Y;KI8T$t&!̀wn\R4qN؉-.;{:g}DBT.Dߢb˨{z'e{U¥vѺq`o7lyti7CЃgm8R/N/#pnowf2^$v!k(5xd5.&cZKN] i h`(c[W;M؜3pȣ) 4%U?Y~0lWTV7V7VO;
ܢVP z*. 2^cS0v9~bY
z
յtVZ݄(wZą%Z>%G
کޮ]oq 2@Eh-.QLމnQPd)\:AD!eЀ@=n)+=OBh.a2ԅ4lV%l1y(/&(QL*\&&il58euMZ7KXV\4
HuTaRh%!s%ִw~nerDrgQ)օc*4MOb}ǥEE|ĩ-eE%Q
6bۥ|Gv4k6*Ɉj-ӫ$u`jR;(
Ez6'Te cD;1+MѲ~L*9$;6 U38K@}p3vBsĸj[?
7mڀ׹xr-^o5p3wfnەtˢtq=
YDӝ{{@:VS/.RlvUOƭKwC_`D8q!xG㽊j ^41C6ڊ*>!x؃;PQ?ȕޑo8,)պ?e5"]*%<w/DgAhyhЗ7+TˊΪ0"Zxnãm9OYnQVDϲ }ut|`Y=8ԯ@r;N#xD[O)[B@BQY@Go
TtVtj3	ZkX/ZC@v]r	M2nfD)~H	o 0HAZ,\x*vOO*bɺnDwjQzQ.iH,F(Ɛ6MH
`nA2[>#VD
+RDx q9jq-kXMQOirT}tOt=HCp 8
P~$<bDSS**nhtx-isIVnqc8Lk/(~d9:yg
u\v^KFor6 mWۑ	n61a
	 BwFF9Dpk#7qsB3͛FG #(Vpv
}Rf?QjA}*{[d&~?	=Oݾ+ҭy~
n޼/4?>n*闚.P(d'ꟼshŒEG~=	m7g!
,8TB'x)#8`$xh4j ΢>9χ5K;aKT_5țrp0t
݃ii'ê>guno#R~
ZheƯ5]
0-l->J<H<
>V']+4NZ2oFnH&%A)JXėRm_w-l,a6e;:pIIސ^)rH!ţw@".Z@"&܆+q-i8\~ժC0ꄍ/{ޘbL(ME|p*Β_Yѧ
r;>!04C)bc-(ݝ#le~0$+uyR#{e`73L=rO
3X{qWǑI7!d܆_ dz/͆_f)H
|)-QT'*.Tڮwy.򞐰{/Ҫ) 7@5	/&dv?B A#k͌9*6w]?"͊~0h2bD76Sh.>wÔm53xZNIsdk<kJ
_OtW|PxOvAƅ0cONy8)pr6]>W
+BBxķ|s:k:bd׆@ԼIyc%q_;Mʗ//_0@鯅T 1gP?7.],yuxYk|KrU /ipo'Te ~3p
3}n͵Yq45֒g3g	Tj!C?pQS&T$\%O_wU>
uяm.'z[Ե.-1u͵cF6-8Dubث>R۫{{x:'\JRRl| .e׶K!YfHVHV0$5c
@6hE){)1)	v<uF J`
ͽ gߵbSaJ pZ>WNXihOgK+ *
ؖJlK%6\M!~C?
HOC6C׾x5LoH=j;`(+nU֢a{n҄rbbٞ0֗bzy<]31ge0ˆ/0=LD_6!Cћ@9\$=_iWحZ&QGQgdITˁJa[bU w;?ʲ]k6#
Ca!ym&:Y~5wFDK6`画S  fd?.FOӘՒ[ЛD;P"=;)oqr7dAbFu x!8`syu7W/;~Ej9_RGG{;j~ܡ5Ό82iő9Sc<C/
Sj~:,/<S\##t,O->9UtcRoSx9"(0ϓ"%m-|\D1`tj\/
J-Ux[qqPojkCF)'4}Z/[q!a.h`,\j.ݼVцvSnq%wkHkuEUrnkzM
_{Bujb5@\e ν.*~3X}cB$ 72c31iDqT¡y}cb2_BAcdw`w:ҶƝo0XO>]r@G1pͭc!;-.VP[phnPG@ҋ㰈;浪^-^ѸU
TUb
ՕmNu}]ڕYi辘J'-L^tـ4_,ϩ*h,Q#y|L|uHbo(;Zz  .߽pOl++^L
Yѝn.^wo&g+;j-}de|p#Dݐ]j2"#1O
P-bCjJW7i|uCpAhň
.Y9$%!z]X.9@s6c_+| zMMZ-3ȂghUn}Cԡi7LHi`b#H}'#q6㵌]?	[4^mVЫBB]SȪ-뫚`Ń@[`xAMR*M³WJe3iO
'jg|}
CYLL(6~u E.^5Ҭ$.2#ewS	bzdz;)tdtsyԵކajH{s/?ygjEadA2WT/8,#hq{M*`OY&SS&@.Ua,4ď@ZB<DW[qǫ-U,ծ"tqr[vY6Wta<4(ekoPս{nfT!N
q*1l;1(攭ee/O}eE%Fgӡ34qkKjSHduOpq)AwCG3cYcQJ@0$5<ӗM˸L;J~cוS-O# .Ws{T3Xm74Eu"ҜmEb7|"'}v\u֡O&7E7((_4+{F^^O׶AeB4b&F?WqDZio,h;oŀ̨R%xWR3Rr)E#?zFT/χM٢Uo )S8kȃCp[ԕeyHIeYV%xE{mT".QMfZD.JaRaN>H?Y?F]|^Ge[e=ZIg[4d	Ln	Q1ɟϩVt	r5[\aQ~w9`*ѝ^4=BLtuѕ!%RC;S-RBLrh߿
7KDDm9&խ) @Yz#Lڶ W6.bC_I5V@	]
\6gGcYeRKG`1+J%0kshc&
(%_sH{2D5;/ v5ÒRj^uJ_=]bZ~YtCG}n2՞	Akw`jUm>]dE=r}1MCx'+>
Fu189fMxjv'~,}U^ڮ\|c>>Usd4;"F͠|ǲvVB Ӱg
x5tp<0r]JyXs5>2xZNChP{Lѐ$y1YwchA1Wf	Vq%F<ip +Ѯ`;.N*A~!~߮m+̆37E]P(O)o-ho6pI$	\edj|4wPˊ<n w˘hACZ9:N=??ƣTJ siOE"-Bkځ1[@ujкg5Qy6)"\LQY+3fͺH8)̊ow)1
a|܉JJoF]v
l.Plb|^DN.t_8uiN%s\'@JZz-^M;=h,GϽ௶+^%y߯8B_P]&\$̄oWg$͝(̿ =)4b{WPpY#fI7`ARYF!̾3L'ӊ1lt++Ɗmڎx֍e!<UWyd9lq˙
 $~p0>}R,	YM<eD+f9ΡK{;
)nB/ "~xS|JL/p_:N݆ze ӻ_P[Wf*L!W'Ik6q;\56;SYu^(HwGk<^Gt;r n 9x|i%MR
; 4:p<}}Cv
ڃۍ0@PlE0SC y)UǔTymGy"ML`( ^ة;.NXOu}GP`%0Am}'[`|TCh<Yi*f`}.*@PPߡ
Zx~䯗Ѱy(%ڣcsAOD}^hT!)k	Njؿv2ۉtn4s'Q{GO!
~HBpbML!Bl dO:Tݸ}'F4
qKt=0)V׃] l
w}D Bp'b
uU-UW1ra*ԬLq[R8
ϪqO_ͷ_4紖YWlJv5
#5.di	6Ƌ`BX*PMgG gҪQQDw8οBr-Eqia4:[Zuz'Xf<Y~|W)^'4+fJCIBnVF|!]YH4Rs!R
Vȏ9ۗe>檽7؆b7&Gn{bɮ@r7I-tz;Rb dj}Ge* r ɟ-9w[1ir]Npphэßu[1UyLQ
ؒCw25Q Ƒ̫Qp~* t*:epGŉ4=vRGeS{]:
 #{zEtLKWOq,iD{JJ! XS@sCŊHKHd]-R>Ysv]<>|kK]i{~!z08#UPZm)Jh3,j+y1vH9d!Z	b'6>ѣ;Ǔ >#Ìm7gzsƯg3>-LRϊ)ڛ5ro|K_ctVsCO@Vv_B~%yt~y4*G)IOF5
͹=NKRѽ9y{DI[Ge8[wzL\6ւif%V`(<ٿs:Fߠb]~|Qe'V8i{7M됥\%^rJoC]P`;uuQQ	̀(<༡ޙqYuWAKZ!RD.Xy}{~K6#%E9cԟ	~feȺYC+Z;qxjFtLO~HZANj*㎟AR5~F7ru_
k7B<зB]9ȶKqϡK)6B%ڷ mmQSK4`ewrxś^"0

 3*՚Je|~-)^+#{
5c\Ỳ9kvZTnQPkWg1*4"x>$tr
CEQE(0ͺx#JW'PRWԝ x1o[H;VPmVHTǔ> }Iq5YԖvgIU(KPƘjRQtjR9!,RZ5W܆	GS;9[YdbnJvSH}xeq[kkr{KwyZJs8y6ٝOҩ í^~yݬh Q>/ת%\ hhۨO܏.T2#o,1FaՎ@ZPCЮB7I<ED ԉ(r״B8lO|qQaٮdku/Y22@G#sHLoR/>FɏOP{!Sh{}XFbwýYɊrY3jIOW@S(Yds֤īǮ^,+b\K93ڼ
*9(ײ0xLɻkZS.Dx=Q}*3Zԟ:U[ď7i?>N(̿1kbaG`j|mPJ7	^
`/
G~
4e5=$G \lH##P}b+Jő7^]0^.B'ԩ6Zno7T+;ڝv)=>.{,x?x{FV9:_IZtd|B{X}@s2akHvM+zi
u
h5ll
.N5,V9i.b2\m:,v&:fǇn2W>*rY4fBיyϪa>K~p} 'QZ{[{+:H[7)7yR7,[)_='_Hݕ˩
 ^N./AS9*d[iNV%<ekuwZAXs:<%^
>Nf.c)IKӳf:@_*xl|Y}՚p#kxeFq>*3
]j7KAᬈL
 M-u/(Z<0xQ<{
u5?yu!k?9}E[C]Oi?g{P"m$72еyGÏ1? )>Jc%EɆ0zrwZx:b&BoB/8&~;_bJ""T$$(Վf(QR%K(%fƙ(agO84tM97B^go1\NCzwntnZ:WnDQW&6nFSIZt6ݎHLFCv>m_7Э-ۉ=Эepޚޡ[ӍPqT5#;qaw%=R(<ە1FytwR4Z<J!KY^X,dhj ,d`~
PșT(dިPk,䤰{+m,􄰻BS3,.
=Bm,6(>wAAa<
9!A~awÐ dCڟ
C!d`$~B0$ b97yL獈f荱^PD9tߎ8<\w܋Ds
ѝ³Vrh@m_oV\8B
tb`ÃLأBT(/jDaCZs(tBFä<(#!a(tB>vQh?by
FRh~?Q{>=*$xۆ}{>}=oQ-y
ߖconݾ@6[ѷ[a#ץI>}z44{rhxr;R^Śe7,=}D  "9Щ;tǝ{li6)5gD}T}q_9{WflHVi%Z]p2jLՖMUhB<xuj.]n-HZom(v9ɷk!TwZVќ
 [
+`$¯ANxRy몋%yv/^?qqc>[7[Y,J#ft?Fp4F>7צB]v_Iv'uH\.> R\Ta"
a\ܮ%@y3+Ar}].˚.;b%L(7w_ڞϘ G& 1i]niO@ic%̜XTf:řrnJe'%'>4п)Cu*&0oq_R>_ާD<C'R!TO7	PJ-`ly-Mm弿@GzMy%%7\p{z{c'&ϟgUJmVr+6GR-?qQ1w)CZ~|W\_c?cQr74a95&7d	>/l:e4Bʷ]jZ5j]xMYZX6~CGQ.Gױl}PlalO;̋|* 'w_V**x
W҅gaϬS~{>N^Tx[*?K;ZG@Lš`Zn^FpNhr	
P/6o
khOaebur~r=j؎(VaFWP6e89 ?ʬn¥C8]S8
܀KN񯶝>?;.^(P:ENnjs~nZxɟ`]:n2Lifet^q/AOh1 `zuv#h;q
CHE*WS	0K oQfu"v7\ZmX`ԆxI?<4;(&4|<֍WYG0S֢: TV0Zi{=z2UOxWZOZTSem8ƦWTd*Io-vR>2-`4Oi0 Ic%j)H`Z/R%0b9p~w8IS8Oa^Ez8n7ݙ xz@csp2[)B<-AFTSF6^]-n0Y)LQ
S+¥JᲖEi]*.dqɅ1(禿VIc:sdqY]9<ᗊǺUm*>dVrZya4Mj%8j;%p3R|C&Pf>"&;Z[Pjg;RWj.1R}d	3d2-yN:tA/vXȩPod~$R].ҶZ,-dT˘O5{@z-w^wf,FqqnfEhv4Nt]/-j?)eƞt]/ߢ}'ӨJ5nVw) nkX8#ρ3bB&WOjJϯ蔬wV`&&9Y#.k)`}+6gvk@8#:\!<2i%*Nx|E*ߺ@8֩>{84d-Ptq.*	"vJqruh b[jk}e^͛b;2 [PϣO7,<y\Dl,06eAv])S,a6^$
1AM،k[,bLq4juO/[sW'9yɅd)[kiC:v{
;a;׈tZilK<GóXöO*9_3%;?H-$ԍ.Eh
8|	RF@ir4r+
$JndR>u~{ĽCW
tiLu%םi	ȡ?SZ @K<$ *Fi Y9ZBzjr5`_+_-rTu76
M`|؄!m$d
+SlץrhR-S4ZCYKe&KxiWup+{
5%(|ę$ 
dvXMi<:臗#re%_sS=av},V58܉i=e;C@@@/5M_-  /&4QrUt3V_A"oHlp	Ã':At1E /;miՙՙ
/_'Գɱ:ɘmVɻ\x
>ߢx#;-@=WNP@bB>.UPsxO'nxa\WryK:Q&APw9w׍Mj~>>\0b2Y?@Ougbih
8}t8=K2.{3N$X~Z}~AIbS(|EgY\GJt؉Yq
-_tDLywDݏJ30̍_Z
,X	
akjU-r*[lÿ$l%b۳݈m+nmMlmYMK!6VzB;8p.SѮ5k7!bhzF7/ŠOF/o!
`n;duS
͂~֜ry A^AwROOZ'-ȤC7Ni>¯?tCٙYDϪs&t!Ⱥ[\V .ʪq4, P{2Fٝ;Ξ3:jʐ*43* &,vi./cqI,.5kzXtdI"S6JE}CNCuY k831=>KQ[tRԊ$[QmJΒ#KC>tn,tAZ}& /J(l bN,_X's7` 8Y]}_CZ?#	m䕙Nid1&/ ]x&2++l ܹʽ]Z)e,	qCDtnC>(2ꇰ
rHq|1)̮
ѺDֺΨ0S&0/n,^Ƚ*WЄy SEZ-Ckv])'(W	'[2~k`u1Ĺ n@B/bhC׉rnF@3=,4Bxg N[ x@c
<70Z ?U]hY^ThȒ^R)+m׸qcn]Yh!;vco:-&Sz⃳ՎD΀򍶮<tcR~w.pqU<0$`<(INBf!L0ګ$ͽW{ik&{ Ij4QQnzaH0~ff8g~Z{OCGMcImMcae@0f~pݪ\('۷C1z7mj]K M9]c`,-DrRjo\CݸyI7&N,"Bܜű	8D viw*J(4{y=M@=#rƧ|i`0 Hl=jZ77"di-_J,pZP1tt	,0y7V1j0\\Dժh!蠋^%%U!JD1̐emъ\ra2Q2Ժmm ͟s
;k+0 QHbwy{:Ŭ^EvЯ٧zphoRtQ:=)=6f#nJҏgR!)4IJ_=)ݥ1֪/`6[:k'/ R%ŝ!2ǂ@Jl<mM琔m
O9]@Ki\(
t.>gcssg=REPk4Ä 
,0ًP39VcԘǣ';S.~֘.*Ph?s,J}E!udB]GLY4n$@I"Ω:3HgDh-f+嵰J5t\hNb;aN75I/5.Փ#(4IZ|=;\1+&B?Lm%kM`mv9J%HQJRךPC,1d O:onPLUAnߢQ=)xzS1=nqEO!S<=柉#toO_E7@a9ͮRh.U"ys6Cx9GxD9dy̻o⪵^H"Ц^BrPP4t]sT+sc]>Q+FµN#!ҘӸ<gT󩍷It4NWB "e7jd~
LXqiZ
PR(*\M5O׭N,xq#VL5,B#P
MrH
?!DШ!gDĦGwH۱w>c;-$`oJ}~/04ݓLB,g	jV<})0[8 2]=zbySsy*#bY2%q~!Njċsi#*Y3&ARq'
j2#fų'	CG怉S\
xKqvLb8u{@ӕ/3E6yMʗx[[AsP ^u&>_Fjbˁ.<n=Hչ,@3r|PM*Zir7wOE /C.%ֲC{f/]	Oo"hiE,!ɵ?l!Ar/"0	Uɍ+]Q?T|)?JՋ#NYH#8ݧ+),'`٠\~
}O5L(Xۖz6,LX<.Cf.ƴ".#]@,Ib?pU cJpXciЦTS\>bhܹ/-kCVZ#Чo1	 ڬ`zg-=X[5{yuOL`Ͻ?-G
Le1|:'ڏE&9͉e8'Iػ99<nN.>%Nnr|׳{XYkvS47?vss㭇xE'cR~Hm5#c@6!a񻶙\rr-c'a./2d{껊qC+5s]̹19 HA[6PZ5NMaQ6(2CH)nys33h\Z)EЎ7Ne_tFn?jGWfE9:ttû ǥLб^#鿖$dO)IVx]785	1$eYL	|	/eY^~1xw.2i%'/?rj 0 yUH>n?z#z.u0h(^9P^dF_P?vS#_tkxXs/Ba)x*)]xu(	*ɨ!,3;L1*<ٖkSL~vW{i)UDHijL6΅ev>stы	I_KZ_Q]o9txYM\[YUf.Ѥ#¸MstjKKWAH{`Q!'Ϥ'T:!ҾK=EEB1zB6cθr8MnRhf?l Z8]b	^5swNW<"ciUaV`;ͬHR=N?$s즷ebhDb@YOfSu Ԫ{O
Ms	>
fkr1ٴa?nLL4cLY,Up!%ʒ
R1.IHE8
%'g>@F1 ϺcQ}.1귀4-T( PXdQa  TWwĵJ0CK5>GzhP_dhy:1y0,sgwHqh	:o0]T`,J1ja>?eo`~Q^1DgbB*HWaՂE);1RVPE:"
Y0Fʎ'ew9^UƂY1QUYߖJ#P^rʎ~q3):`.BqwYv2z{!*sतXv4c0D85%AIo ~3G_ a(G'0;CYp7{SN;s[ZΧ4U r9j?dҜs[~z]7o|Ȉl"$b;so0bbXsd6/ThM,cZek-|m
"+s0g!|JܻC5$e$#d_ԱʑtjiHN7w !c6vAj[K[^p3c 
t0l.Ł{K!:h 6[,W[drao Zð	AVeK3O2b
4s9?
|!h蠗c;`{aI+l~`zXMD(
KowB^!C7pesbLl[>|Cp8ickIr#1냥e6ЏР
maǧoh`1a&\L..+o Y7QhД~9zobѷ0+	W¦L\M!]G7˨ Oƥc,t>b T7D2|2_LM@D/^1: ^SP-?-*oP*JNS.*k<jo#pt1Zq=R k3E#	[@d1$MU^}&nm\\ԇ3?y@ks"(Yip#e`t;wx,cki&+x<\B>"di4`Āܗdr	LTdy!?4FLyc8T̉p&eEڻ$&m
_(^¯nΗo;_|@O:댲}7~T^*jGc9?"@3yd]Ƃ31bnWB;H&R6mVf`ջ!LRl,?G
'v.Lɕ#Ƃ+uz35q'Kl^r'fZȕS~-YU?'	PmG%LyydԽy9Z52;)?S^w;?	ӟ"݅A9{@J8(L@=H7U,`!?Rޫe`WġȱAZL/̠b"9	nt1ɊoYt\';6aL!1BLEщi9ŷAArCsZXvVc/'G0/wF_RY|v-5oa0C,Hq&꼖!|$

uAIH`];9Xe!Wf<5oրzڔ<bCHL [ª:zw'"I~:'*t1#6 &pc
~uu:j)ށۃPM,uMtzA/<KB]'$R(UD/	.!6$پLOAk^3|c2=vA=w0f(VBk/[ˢ.Tg{ n)MHjttMrW.de T|%U&ٔG:(Nqct.h0I,ڞVڴfҳo]	P.-5HSm{]@NSm湕0Gta1][zv@	%mIY|'̰Kk0~tUg[kU4v?4@X\onڥ_ KTcyJj)&RHϱe~USLжme2Я.ޱymg%q]S%ۀi ur,5u՞mVW
V{wՖ?;
$8kl+sӼzm2e鬖Aî_bUwa~lL2'VH|qg~ck8ld"1U1? Tc}X{n* $>N׶>m3*+W|OLT;Vl-\VCMH*!EqQjp|Et'qέ>k={@-^8%WOl´(mnm,+} Qa֤x9	fpI	l7wq$	*LlIt;L"FjOoW^]khIp>"ݏ0c?ݤe[폦XL;[o;%qrrݿvtB;rRNHUCH<!-BăCnr=Hdgv0n1sMP--L?[o"Iv8T&l̮Iv"dΉöv`jU!R5$$"a174Ƨi_bJ<6Sctqڗ	օ~N@Y*mw?-&.}>:QI0z{IHc
9v+ᙟ VD$9`<xHsդ.76">\f-~
+[Vu7&RiCuţ}u?E=!؃7v'hY-R
2Vۉn-Y
gщ!K$dx^sњ
Kk
ǺGA =KXzIzhL,%	0x|}ج%PTwp,*fflBPx#DI3QiBUc N*̰>	-3/Q"~հ$^d,6nukR	l's_:b*h6sc:E飝H+hYg[pӿkJaZQo[>aenE[5!tA8!*ܶty(b7ڻ0&?~eiV`PֲbQkkQ_؁yN-/,/$h|h	Drjr:Wؤh\u4b&գI`z]sh}ZwD(ٗH+ ̔|O|)Ό'ޤ3){?GKb_{ٗ zϾ
|=Kތ%NQ?FLkRB^
Bf}jC:cIXd671Y+6w505tbDUQ.DľnQMcd&1(($aYrz$?5w$ξ J~0sǨA$i-,e:YC3C5
QKxNGm'-+s"Wfs:k'X8{2
>j7_Y n\.=Sn^zJ{\w=+5YdGb>rvrx^*ΦX*Xdb޽Gs䝢?GM#kga6-tJfɆ}ʮɑnI]Q Vا
J}	2~)4_kk*ӭѢ'n`aZ7_ZκV:v_Xyaim"9AaM=T}jAdɽre׻}2!l||$Kgc,oAXnU }^gyIT3T`Լ}Eg#gLm޸G@&&lO2`PnpGRaOɔ~o]yq>o6얰W8f[ggRHt}֝>˛Io7ѥ\lJhܠGbiK75^5R3gєQCx|,^]gŚK+8vƥqAFg^#3&RfӖX`Sf)AțCFb-Hc1@Ü&D
+](
(Ja;yh1E.|٧k&$Jk1 |oB[:15O`%F@(UtȎ(^c$YzRKv֜Hϊ$VG|VyL+grր銕GLfq)TGT=j
7
ƹ l>Z7"|YШ>k*NIī&XR9lӻq,zYTb$XZ
9k7NG_~.c"RnJnyD%x~{ޢm{	=seq:\6ؕaé29^T@uh.)Я#qO&
RMC2vdĢUW	
:L#\Rމd0ב|R圗.A[Om7c|E̒f^Pr" {4DWBَ0Er{03/⠢0M{S!HVRR+>Y=ټQ<u հslieHEn4=`]~%¯l|-_
HŜ(bfqTv:A	_M.Au@N	30>tJ{xlhbB7uxgMM=HIH-S3tcbX❽yPɘ.,:imfۺy\D3'?Fb4Ըʡ<rVSlTy3|NM7)
/n)2+GTV_*&+Oar-ae930,+U\%"iR.]řH#@µw1%jPD^s<P$|.Ltk'Rx9Qf)П`TzN/^mU kj趍0
<92fnLfDܨzmTj|䚘ԨxǗ_Q%vfg=6ݵp$le;oR!
-)*~AyMyš;b =(cԠ`,P뀩؏էǄd{HHrC<5(gF峸#L -W#9F\Xa%]8 dyεkkl~[_9LW6N*H
NsgFsS`
VD&ԶnjiX" oxV-nc*cn7ĹĻLs+L$88``|DǑ 	cw9**Ta͏	qE.wLNgYVh&M;<t˳H͙j5\x]i0I%t#[!fա6}'$zrSMeI#$gH'0ր1tGsP]NKv4M̚Z`"SZ
 u)?ղsqؐ-:Rށsaag$]lHFb\Aʹǉs@d=*k!/\Z9ĵ&  'RnZyXوpUalc9]61HC7w\jlКY|6ϙMc 6;O6&&8Q mLg2NB1rF}>ut/?18CRɹgw쇷rrѷKg}oSkZ
;on0P{r6=
c}vK*NN,AsB*zW8vօۡpy7Nl7ћ{3TR΁
)PaTЊ
NZZk6?DÈE[r3bz(=,7}oq /6/<}#
 хeL RxpѢB,4k (YZ-UIL2ʎʳG|.Ĺk|JF~Wg*`sc%f>X
AR^Bb}kb1q,bԒԢ@jY'	%r-.c$)@
Μa{0~bHD"kMr;d#'CO;bR5vHǯGU]QĆLޔ+XFP*gڰLI3jƄ6 ӔOȓ,6ۺl_{ڄG)6u1.tF(xSfLNpN	dfƦ6y6XoȫlΦ*P/rTƅdy>V82"G}SC&-}MA}nتw`u,peALgi0dY\5z
8{W0qO7E?lTM^)MPt.Gl<S=Q
-8V%9HA!)y`NȡR1<3P2nHiK,S	F~C08; 1_YAnaVX֡2|[n9 T@ktz:[z`iA ^77X4dY>4z*sv܇fXݍ`#ۿ/2vT2'l!_0؎#vPyrsKf]p%hy0qs($jH5Ň"dQ5O
j0rT;wWx*̲k}*$y..?q}zR,k/-rWO9kT2fh=kqzgUExGj`Th)k9ہaIv?@ڒJv:*k/_/N3	&N֪qqDq=pW)B!ZS~^Ôeg'abl
YV{WF0u3Lf PAM1dIq]9|i! ~)T!@MY0-w`	⧠^Rl_{<2f+Y;#\<1UАVt9e	10S--*2l(vZQLU	eKDGF&f2L6M a.\iS]2<mo.K
Qs_`ȗ,[c&R)ʼ<(WUb|#[m{&8-$J:uY<7z\e^{Yl4'74l~@ 31eF~u[ܥ`݃>Vm`=U'--)@cw脌Ƞ::<_#1tEJ1&w] hcln>`И"=lgiK}:^T+-DW^p͉cƅwγ&˃~XF27m
4(mmִKÈfR);EQKr 
E'Ny셔C'A1KeG=Ɏ`=a#ԭ0^0Qqx7s:6դGؐ@$ |YܫoD@1Qܚ#pSLX匣3{F"ދ ͠j&
-?Ƈ:	w9pW7<5ggsKtV.R|t$mi^"s$IJ*6a-Rmy5,t𔌉	̲gZ2	.M!D
WD
3]ҐND̶"ĳE!L bi)/FYz<|RM5PmI4ՄMƚQ)<J3~|hŀX!TGsB\l"4~vkTR+ZDG7Jb_[
q]̞b,q.͖;WL	8U/';0\YajQ'0i:Oު<)etGl*-+d-0s9.3D.џKhFgM\GnŤ,wd>>G҂\fkCE d}5yN:~m={
^^_B)vCsT)聾]t>|Q8"93RoUt/chpѧʛ^xJ{4	rvd>vt"ME˕yȟjΞ,w qy*W*밟ne^tl#U{"O	5ss'1K>n7EgEWv'E=C4b6b"/AC-v7U5$՝Q&-_|@y@"b㏦hG(x7?~@/p]|Xzljd8>{sC֏(
e<}aU>Ԇ3Zsy#3`F	tt?LRgLv1JE٧\i.ځ+(
K\((=nב$ayb#|*l QUJxaT1}E!`^P?`gK8]hx[yR:5î/)ǜ"MY`Wtlծ}i
δ}lxC- lqWMNS:ǱǱǵ8$n!׉wշ:?>5mݕ_/֧Xh%]HA4x81k5n:Tqt#t/)FP͠INsJaBO3'u-=|H[qms~"qJt|̼j'	8gı6{JT 9:>n?&gTL	1N)'9OrJ(`!I$?
L~xδqJ;ُ<bga0+!v\Og$}t\@:vSy e!3?m8	HُpyuJMA<wJ9 JCW*5N !?ݞ?ծ=j<Tx'")ve6O`ѭAMq&:0e& qMV`u73ۑ>=_ 	Ď*1ⶍH8h[L;-,g͸7F'om.MsGk@RFh,.MmZAFa@X^ʛxU7;48#5͊zcmX^)A+1B
Rݬn7`R*X52!KXƐQ56KPp#(N_ƊWGqnHd-[3hlʱ=3"$=K5K=(/ ](#knB_(X{ 9 $F;
(⵸dCnF g><ӉXAgh	=Sr !F-zM+;T.̔eOKN	 vh"_GBj29kGᜊcRas=UNg|oAa~rC~CT1n?o Ac:Eׄ&">01#an,~F፸q)=O"JqĖj㹚Փ{3jh,r(r^9nޖ5o,w5z^}95@T~tf'4J/s񶮋sE_\Oaz/17iR%W*rɨXqc^xŦj(Cuoҵ91[1Iz	emg򻼥C_v[-cGkӷ=hmurxN m/倿PS&歼&RҺ>/ Ka5jfY~"-]C({!Ȅ2u?b#<7<=76l.ciSsA}aχ#G9u..zsɴ"#h[&Lo+ru2!!oPUc=.WZ6_WL~'5x+:}8.q5X|NX7dDXI݁U`	x9̵ZA~8	
 %WaWx
EqL6,1'dV29k9,ŔT)n:9vhRIi4:auXpfWDu4҃t9_o΁~}p
xPݛd&bʜVv *^J/Aw|7_`ku|
Hc,!Hi6	Bx y&7,]4QXkaa%>6?l5q>X[ָ fWeojaMaW_]ǬqR&RI9:S\ݵ-Yka"0GwxSXD.sDyu#٩#No['/ ^-v#t6	'e;<ڪ<f`w_d.ͿlcS͓C`p8%xTJ&Nh
yckaTh
R5zcdT02˨K uNyEeVFڑ$^I2	XV-dw;t4Mhi_'oђ]@īLS4eZt3&}ARsz"i>?UHǫW)E{/01כXwfZNl9P7"K	/LdmR	YP1,ix,c3(|?EK{0y1
?<l@NN3O<Q3NT)KWSbx\|օL&q1Ɠ6"e]R='՛䟛粘#O5?Ѻ.5ykg?TiqL
CIdmCfhiA)R0^Ʃg}<_Gh%BkpS(,le@D%UJg;}&,C޻ ^cCsu xw %/ V`2ux-W-7\BNx?ٔ$!- F kJd`ʌw6ǑfB}R~&sp҃ #'CƶE×l7Ara2
@)Ѐ\oЧۻ_6m3ee@X<U;9E^Qz+ABn@{xJ1x/F0:O@FaaPjʯ⽱!V
g$>		}>~e}BKv8j ^w2c	tz."AZ;OVR`xJRa)|;MEV4;{t`zY )(Giqt""iΰJa@=Wk>l}=9JoB!Kxn㯄D<Ċ(d)<D7:P;M!Vv1Sܕ,!W
3; ~E{5fLzos-@MgZ1;)s;ETS(sѪqy&{	[WoUtÓv&SxRԘY+5fI3Mn4?nz'4<	9ʣ̆odP.9t94PKM
BO5|@@}lt}I1[M)ZqP/~z	)yqצT^{1X;r%U0ZQkH^88Fw:r1JS/FH7oo+(LXLg>ON9\3k&ZˁB}wuB7q~ ֿrsW	)1(V7 䍆ZI/`?
b_7}毌ߍ?JGS+~OϤIQD
*lZAM[-(Ӯ,)ױ>.5UH.xLڎ-@p
2pFMqnE<͙޲z	(igXZ`mo7Aձt/	<E>?W{1YbjU9Ukk*~HjCoUx
ssu*~*p
Q>0_B2G86<>VMSwGZ߀HӐVC:
0>5|,>3&Rq;E'F߱8;oo[nͅBvi>	(^%xHjwp`Z{%Vo;^Z^k9G9@hiQnG8DIx./2P/\+a~wrXk74650 3>S95|UH'|ύ]j[蹃W
";ͧ"B0ς]No'T%N>>Q?=gTn$stf38k  +@vjo0ed\঑c	`)&1hb!02(fi^dJSPD9w8ӈLebLy7itzv$LvsuwOF@`AG1)Fh[`-;}FS'=)bN+S;t%͎ANtkqbm̶"ZhM? cq=\&9$t|[.Sgu ϼ'AVܨo;ZIdg<0K{n>^L7!Mkkjh0Y8q]Qᰟyha]w&z3Shf-
1
ƮUl3q>aM?cm6k\;f#S#ֲ&a={?,,=3EKSe UntUqh }]ւ#Wa16޸:*1ה;qY'ѐ5wvN~δX,0Ű_9їxve`l3ߙf	!nT*}#;x׭~ {K"5+&}F e&͎A_gJ@z:)>C@
pz`HU& H£RAb_
YgʔG:{Fapɱ~3Nȇ@}ixzg,b:z	5qڛ]8F*$>->@/N㱼KB%ix&8)x8_нy&ѝ8)9]_^$9O[׭%äݧ6jltWaIthx ~zuZ񝟪AKꠒjKUbC7Wfy ~_bQQ9Zji^]0X^kEDc_? k8Ev6I L٭>y@t-KGrem,˚VG?Jv{
.8Z6?;켨
hkQߘ tW!Z`o|ƾv64t|̥{DhTC9GI	g=
',a7mSyxJv<B٧9bz˽I-6 ťQޟXW D8I`駳o<f6Ov,2;?7rʍP|,6nhKa-u}2,±"MBIc:R"28WzbJSBC6L a5؅Yk,/+j_kŜA<"dx6Ӫs+qoƷ /DG7-.pJ&0ڼx{^eؙXPGQ,c/^f
6JQP{jL9Ękk!AߧHE@8Ξ<vOPQ#sk<.
IOKÏ'Cy8|ߙm)BZd
&&ˎه%$5'$38 .Ot5YqVEXSC[Ɔӈ7W:#1=݊]Xk!5Eur-N"VS+F&§8{+2C9!W'w㉋wtwю.Z2L]K.QdGݑnHZG%6b<<P֦ir~"Df0-/X`)c)B7Z*˘Yv큭16g]Е,cd@G!-fȓ|Tan$eFH& /Gctq/!ä+aZ-FmaĂڈ}q53[EaaHsa
,ҋf"n@jŔ`Y`
0Mґ۫z#~ꦟ1c(=zT3,Y{vi4[:^M:Ӛ#ea#@Ba-: .҂jWErQlW(K*Ғj<?
})=GQ  >E6rؓuZJϭC 7l l~Zv{.mz`@6]X8ѽRoaqVpN
P{oc{_&\v
jin}k5'ȯcN'Jh  zSpX:7+WHI+`{n'c ^G?%ބJ{@C#̖gw?(CƵW#ܔ7ϊȊ@e'|yz~ IQ3QU'MÀ|Gn&r%02M?LK]yRxUҫӥKNH5oּc
=Dהӊxm\
,~/tb@~7QfPu/}#
eO<ʅ+$#	Bj;/g[p
'6Lt;UVw2aގ)xڳ;gX\8oC8GڎFt{XGI3c6Il։;2U~ͺEr9!>LwX1_*Fw z
z,zs1f	pgrı	!ZtNRq=9pĖ%jVTucX{>
qNRb4qno\p+;!}} 3ϲ+ʛ>mNYܤ)rNV ;j1O'TOϙ.4ijb	uNZ:p_XtkXXKs ~at=z(׹ggR=ȼ87ɿy~O] ]`@s}Ag2qq,RLyɉ]x }ng'uB>YcO`ż!KoTub]US8	V367]f3|.
Y;DbKBՇɵRrZJrZJ`-݌f)r׏|ҥ.=
2Ԏ$;@]'#V=u:{*7YdTr8o8ި;:+XAԃR7_	M?#heU
62;*+q.x+XHA)oeL<lW2+W6\.nBvvcj
֥l]iǉq{,SJl=>eވ.Ҝ?E/w4od_j2@Qdp|yY G  g"P]$oL5jl9s@	Zv,mH19*`bĕȄ5i5BZ) 49:%IϜɠ0}CHMr=x]'vR߈75.v|9b\<ɥ'3zH]w͍%h$fEXeW&:Z$*NO#3
l=oivuiS*Ѥ
es(6z^ٌ=*rRA[d0o<94փ>[.C5Ы̙Y$CfDAKZjDLZrQaBNh,Aqy~hbLͿ9yktd=_H+? {Gg^giyߠ^!"S	ɯCV^ƃ\{JɜgNPr'>N*?%7l 8	跍t9к;TyKUIlVr\T+1fٝHY86I.Fg8meh}~AK
cN|,64Պ9ơB	TFL)C;!t$aϫۮfNثiۥЅg~!a=2|#=[͢nwEʡA
sonj{1
8	Ѝ
 XqzzPH8^W00&>sԟ@v^f3=7d81N01c3 {>A	HFwC(~R5	
2`Ķ**Oq63n7n{u=Cb0DB8>8Obz?xI:@7?n)&`ڔFb9Hr9'+ߠ2Bv/T<$WST,X|30=mIz)vY0n3%e$a;-+\9OH:eVEպʛ]ٕ3zK7)'el
fBK2˰61
gj@XX| oeez~:a
VN&s8[kKP,L0奛t.<B'fB?<;?S<utJENa?d1]<")$u}~?JL'K	)>io;<Vlt:n$bM-,_Lz	>gF9y*FݬEԂQIOy}gװ|
$Mh^*AF$_.yPY
v'˽CO5Y{  .ˠXZCҒ-iHpIێ(	hB#X'}د%'Q
Ͳ=_Ú gy5'Hl$IA;Mrl~Đ|XM!.u9*"wck{RVę̀҂9I8gLfC&_Gչt7#PDwsDj=] 6'>$26!Ȉ'l<l)G!:!QZsH>*V=4a=z7&dS[1[qP8^mhێ~nQ}o_dZߕgk:ߘ?)n/o1bGr([aiI!m}%CBO3!N '	ˤ3',#?']]:"3 EYܜ[PJk䟩ɤA,0c Án~Vc5a+PHfMű#%k2Jhy'Xr#v8]Y2$v#_a0茉F9:`h`x<@xJ('ݕPSPKP14 k]]Yuӽֺuͯe3_\\[ǰM~1슌~R3#2D;Ά^?"<C EjXoqw(ѸvDe#1
ftHtamEn>Q$szw.4¾M.)#	EN.-6>6C`95
uqj}/F]Az,M}	+cQaI'VkX,c%[)$XoyMCjJc=MnG759c2k^|U #hPI]?qWӳGYțRaĊpl/h˕%΍H
J'4EZʩ rܚ
ѢÓcb3|(h^ݝ""׌3ڎ׃wXMrް@t06%9Ed1beS)"1"bp[/1;¢ፁpLi[yUMlZ[0q#>~{	jz[V!">NQtMUFS.܁i~E9U+8Ooݪt+
M?nVX ؎rDcyzVrdQy,2DDF{o8J
Abd'pj*`Ob}zTx:XL!vXtBu~|(yG+Am贎BlW5yj52D0 /ۢM	?}XtW!10\fJ /
1HZf*@IBDsEoR2EVyԎl ^P+j&;ZXݖ߫!ηBpUsU6r3=.'@ƣ|nF/|!> q>
8iܜO|O+	z`{Fggi6[&lDkKS52rk*ĸ;ɜs]q	ZL}ZJ׎178gEl`}qkx%xx\@;w<mqkf!q8P:kXKm	YYB7an[mZcn׫Uf*>ݏ3i7*=Usw|zX^rdڅԞffAEgAWʝՕ2Xn?!cQ}6bb2%H
˃(ۙfg|ē%"#ͧ]j_dg~FO{`YݧoWED
=ŚV6kݭ.yf8I3
<TF]*ʶ9 <m|p_Bf5eml(Bl¤KKKYI@MlZ]ehRsAޝW>[ Vv؈QOES,y݊/kFA
^N!w^iJ>;m? W[٨nٌn~ {toW-VݨF/5JQ$`Z? J*ZDߜ:<ċ"pJ4{e/12'.q2@s6}AY~,o;_Μ!wtK0u
մ!6K{ogk>4׃nyj(<h3¢#Z{bҦ_6;I5ҟ씈TOKƺa`ICo%iAdzW cmYZxW	ՕNgoHc
}wvY7nEu'8Q<]U_x;-o4W ҲD9J?Tuų)N})Um~aOn,%2'0+n;R#>O+SZٓsH.KSigLTb[DBi7HFzHq:b[j@G*B]/R:NN0]Ktc?êvE+WWD
Vtv%JӃ\ݐr{ަ[ƪ":!CRnqo&}-6PTm_VHnL6zxkaN
|D?d34qUXQs4
8ʟӕV*7kEon2H"F~]i7ŧ62̤6DWE+
[^6#;_CKgsnQc1&qUM\,=LW(kpPqhCaSI-5|jAՕQe~]JrURvgˊGu榈0\MH$mֶiVuEM$u_^G7Ѝ=^t ={wg57~']qs9tchc&z oC`4rc7%hC\ ,4agϐEbOxLGRj':yq
~jkJOyrS!l&r@>a3Y} nl9,ln6O6V¦yf3(l6í>!nai6Nni"l>6Vi6yX}FyĒHld z6a3>%f,hQ`n3sVp\g\>h߭6ϜqM]Tx/^-,6306om$Ʃ$9R)"-q`u
6suUy&UΎF=s,wspD;(;XJ4Qz>FھL;7.{N`GaO+
.<feI@U]_j؇e/z9"M,]	]m:P.֫EzwVծ.qjˬҿܷmA
4 uQI2ޅ]V)gM{κ~z]bm[HNtʋRj)mdիWc7UCh=i	c&}o/Vvlh*d{*kǭdߔ.~GVV#U
~IS3~G/=v77G[g?U~3:~KWَB=<[/;.}rTe7wv*z~AcEꔭʷn|?JhFDv+GVo;eGw@aqA賳
Qժq9hx4S*$Ax*ֱHsl
Fj+'UwdeQ ɣkI%;q?M,k|:
YW-ZY3%5K$⛔V^)(DS*5<@)YjU71U:^bu|u.?CڜV/Lމr1zYJ3)oP<!eN__^	9F<k7Eⴞ/
ܯ/JJ-ʘnA8cTH{
g.ysׯBu`A^d^vE
#_^KxoYӲ:ZQwD8[/1&b=KCo0^@0&ra,l8h<p@ӔiL+Jbq(ϱ8D&&8tQ!
+<{a]k(ϸ/hx؎q3Aoo!Dk_Z0^zW껬㴊:x,Ҟ؟5Al=CK!;1nwUZAO-
7< -
b?exCo/՘ׇɏ֕hOn?t.$O3
=l=fqe&ut[<\>Cm:Egl_[>Y.6HrS
;>6EzнrZM_y	iS|Bᱧud1N%M,ՂĆ;ҞIpD{a4'ƘNa܃D5i[hPG	xFtSðp~Q}XQܠ4IK%iMXRe#%j#Un ٣,jtPz)Zܰ^'Nj}WWon,"7iIv۴X{ZgZFxʁH Y&L."z; ]4'mvj]dɚlxSxu>TVr3KyW,3Ѵ(uב&o)Q{o!I|AiSq]`>;/{=EɊ+GPMO~~Au^eNVbg{wb	櫱A2DHhF{ٴ{rmt^j1mi
nAهn9`НKkL. 2DyBǧ;'iSx=nW.AL(`aؼ¦E,c}Y`VY"[xe86Qr>vrA4	&ׄ7ٹVͿ)<[UknehU#ghFUG*5u%(awd0ڰϏmZNQCqJmne@~ɡ!(B͡u[Š^m;2u?H_GiV8+\'
~~{[r18?u},c
2	jTC
&ӏ[55ˊ(ӏ+΢Xe*qs?V=9hM+G\im([bB9H^XFU:DRHi5|O^/NǤ3$uHmowYn mCOwGx5݇"ؑ`:EQ[U|Sl*X$U9
|-%immn
qR![ۑV5#^Ag{4v)'G^ґuݙg7սK_u/<շ9JiO]!IYϏ_-bkjIYYDpyV[?L-9F=S[' $>nL=W"C}c֐kSTEj_joY^j4|mBCI࡬E#eESB&A@9S.ʾ¾՚ߥmwQgk+kG$`U\5LݹgwwioPHj'YWsl@	y{65]sŽ~ɽ ?+m󤵱[w#e<L{zPv
_C )xN5uP-ܪJRMS|Tӡ=gcFr.K5g RMĄWY'CƊfǔPr^J@ѝf)פJ#HψA-H4X@Ӵ
d|f/ba~"NjG]4(!EKRN4up@Dsi`*ZRU%IAY#@ w![tP峃zd+vUPt!UH	RptU8ȣ۪.~fnaߒUL6+50J;m1ΐf :o#qQ[)G66`E94AA9Pe?	Xopz}N]}@i@y@Y@Fl1B99^9O;:$qQR<-5#%H^	ueV"];"\ƝT.WR^<USnA xtvOY@# R#D?#/gR<	+i&
} ^/Xk.%h'Z
z7J'u}3`7JZPV֌hͩv
ك1)N	~k/kSꕨ>#{77h>eJWGGӯG%&{LRTODA\@y~r$iyvPJ4NHEq-b<rA)Eᢝ=hd0+524J)}D[vb+VR8B(EIkA3mBX)P*TiKIm嘈3?Eg\
)іҀ
LMҖ4
(N!Gn>X4dHt˹r"Ws7IMi%6pPc<'QQ Pv;a6G3<A JJiI<1O%̛gEaXڍe>
E:YqxrNDz03dvZSҊ-Ulgcƚ^њjRf9$uX_ۢ=Fآ{
[eecQ]\k7F"ۗW5meYh~\oȷmm֣)}^دbŲZy`<rY^鶲|ZӳtF2h0Inu˸Qs} \Y[VXVomQޮD+"Zo)ϳ=4hv
ZCOPn2YAqwɷ+{.	iYZ8!ʣĶQdRtCiݛ|0dIj-[m{= w},3$?CXkv3Xz&#O63"kX3Ka(ߙiyxly1y8m29AkPcC5@&3\jd-rU+J1k&K[k?mnS?e(^xV	MN
(kreTMN-ӐȆqObyRG^onCغt#gG>rvDf(e:sP {l;<^1cӻ_$[?v*i{E(0W+ꄝDɆ`!߀oclc` o0h7X@7=f%@8#"EARy+yJ~? `JҬ&HfgxJ㢁
369)nQm<0]ւ̴6W7I 
ͯ&Ǜ67
 UrHFӞ  M{C`(,jsmu4sA$%lXX{\fT-	9Rh=o*pzFyW+T#~F<3gb?~<)2eO^kkF^[7x!;iCASv3rHw+u'az
C/AoTb1mNToVk{4@6I?$Jhȧ釨xO#OR~^m(YN~%E ȇr d:"T@'ciZ[T#؋;КڜY.:99rÜ|lT.\ISn7T?1QJb֓f?@`<x.DFW	IFNN3j4 6߀r^LnzYF֮jkZ熗IƺP$*>Ĳ& IXV@esƢ˯Ȧc_v]F}qw#)TS<"V>~,u%1_[6~|5۝jJuUw?J҇M,

W=LwqMΓtέ1cϒE2EV'XJ5Dk'bx1ӂ2&s؀FsпW>Q3
wlVaͩMɽt-AFPSM]"vQDĒ/@|$FM3/]E^ftxc["d,_O++n02L3@M-p+u
&gY>Gv')SÏN_aJ,fDLG"A&X+IȠپ+28?sZvZ'zqBr]:݅?Ɠ,~D%{ۢV=l*LFp4¦O l1JA?[05}O5.!Q'-	~NN$F֞/>Reg]Z
G"%{@1òS9ʗS厃'I?}]Mh-k]KfrS.*}Q{}6tDnڒړ%8^iKmKd][YscW{RSz֖	"#Nre[X}0|\įL[`P70yy]׾K}B/&sc 6tS%"C8I2zN0/i"KɪKUΕPӎzGu52sܤJ 9ȴ֐VTkw^W^/Az/NW(SM+ݝbj})S2W%Ԟ+[ű7k2wPvz؇TN[dȃhZqzXlKÍp.?9t'F-'
Y[8I3ne<{t
u>?jO6'L3oe!ۗ5>Dh}s`n]lg;`к"y2 fz}Ww2%2Y	Q#eL=[S+:SWk%g3C6X]#xZ3=Iz#b/"OmP믤#r0Bsˏw|u>xx)e|dVtJT#]uﱮB
{(P[7qZ>JE/3rghG?>A6{}YMT:*f*fq~Ny{ٮУSKZߟN
#mɝIFr;1c(s1lLT<#%fF *:MW"*:8m˒'%RA8z9ȣjW9cWur38b u-z@GPtziTה&'ı"L+]%@fA T}ݭ3gxƧ=a8Lc;miĜ?]
j`_1GXh]ItS*P53gc4e3zjsj2tuS[M"j*غPʶ`fWy|]MQG:?Y5Tʱ\Q>Ipz|{9ľ[c/!ww3ʡ+nz[ mV/ool6*GgdOE9uWBإ7D#,s(hhA|v
v!`%r@[uXMD))hO1`r{NG7l$!QW<UE+o&z15$JH15"R;'m?keTc^E~e
-p@BY/lh%_{fu5kH["7	kHM4=V{hY۠zNLE]/wcZ3
e2r:V$ЧYbJ|$֡6+IOmZS]-6Y
`˅)Q£lY{N
r-| />EQCch㑩T<QԲX4p=64hKd{&3/h9,lbbMRۺe~Ic`,[b"N
gFuAxzQ/skL0m68tWmlӉ~uLN7:dtvf]̉EcTz7Py`dAr79~,SJnRJƚ+tu7:J((=:1+ʋSktQ4E^o @uk4t@zOw3ÿ`遺Y{-mqu``L/۠A#dM/3}^b~8-Ec$w"nƢ1@r-`ʉJ*r1AX'H31 <C]A	fhkmEDOo_*ᕣ׍_gz5Xl~D;龏(3ƜW5tCAu)l0yx
<|?<=wzO/1h-s' o%
[xq	a?sa>dSTa$Mg1	tN
lp,kaÏI[<ǻ$oe
/.0=nZ!DeD/ZY;G]|wToO(
*Y85^ogfLRQ讴Z Kel1	ǲ>-󠭞WOU;bC`F	;ڂJϐثC<dNջWFָt.u9oYI9oUu\#0l"MzJ q$[]Xg/F̦2Em2,n3]4ôQ
nd⛓M?6K؉1sDC4\8OӓĐÝҘ,^LJ,L\,VqL;Qu뛫G{FHX+6M*lnVZSaV!eQKwUSFyT6
M^TjvM|f'~yFɹvy7\*\o~
6B
@',@IpCVte/H2]he9Aul5$jaxGYXuŦΞ0F5bMS6(=)%v]GͰUґ@oӓtZL:)Va^gW%~mӑzWX~'&E(}Z02(}׹S()!\ϵ:jW;*fOݨg>yڒAꮩ2uT-ψZxP5JɷG[nYz6X{uQc/@FΝGaY2DY19B6,+~:S]/ūCh;m9_<jÛ؜*!UYɴ]ZRؖ<vvi'jwXfLST'k,<^	Fi@J9RSCZ
!TǲN#8n'!.ˮX0+:l[9}&=G2T<*63E<gm3eFRm~(`pV?{]F۩e9ѽ'պǦйb*2un2K	&zW#, 8SCJSp|&MX+e38>FG[eb2$+#t+Kn\M͵7WO*c'MЩ:ܱhb%}I:Sb^^B m20mhڜk/	97wljm^0^f=7)CմYXִf@lvOTK<Y͑f5y<zǜ$'yT{5W5bE~U.^x%_,-^r}5l}=Tc륌sB?i+̓:4:Bi2hK1;d0
ۼ{k*Ĳ{12/9Ԉr)ҽ W*#FOPbSbBʹ5`ysF9nB]A1U	T7T&v#2|FW

9&+.7O	
?:cQI٣Rj)f"=%O
o
SQ\|^#9`²  U'A"A,5'%?ծZcy` OVEV<A`0*tbrm7}L|_ޥܮy,X;ZFW9kR]*..5C1Ib#V=%ǆ3yisLT|tK#sz,[#rSkSD`UsH
/WZYFzZ/ݑKe5@$p^YCoMpw-3,\^7.u2T^0eLݎm5C{E~boJ5|0$WCM5RaVT;u兕(z\^nvUMCmHM~ΐq!{u{,YYFbt^\NI]M{L![6H*E|asl(h4焔#	z?:[B.k^b&;,Κѕ{%ٝZϚQa*i3V)2k:
YnIy?J%XJ,3l6Žq|yzZmqeٻ|=|[
Oni/Ɩi*Uh熢Fe
W[mњ:q4㫗H"'c&9^k{xG;1cq;Ǖ46½eV@wn;U){NJAzbPPBM:/ 	PӠfAeCA=/bPN
j4NsPVPPiP[@R.BnIAPwB

:b}PPg7*j0T4#PP285f2zJc~4Qk|5ZUPPPwe5**j:IXh#wV?#gkkS#x}^ϔ
tk)isu
P/&k̫^¼H)oR)½Hhf+ͯ^BD@Nt@5R@~i1a%0Y`+nY	K9O`_!9TBUka@7
g¼E6%}
V	<,FqAW^xV`(+
4%,| /̟	aa|MkI -T/@zLe/ptk* a3OnZy<13tj5o~558 e`}ގ[}eZn-ck9=K=/={5]"<=X7sܔd"9)s2Is2]}&i0sfjR/H#(O,{6 ϖsIɕsdgJL,m@KVBߒ"H4s|PN)9I*~X*/sSHu9?@&"Rh{?PwCp4~)YRٙ)X0KOt4K^2?Yaiɕ9dnOE5P}`gBXbpONIMeʖ99sm9Ӥ?	/.]NwNc =G!ٙIsRdɖyIٔ4_dxҬ9AAͲ%˖ٖŪcVT4kҔ)S73UўI+͚?/+Bm#7j|V[ap_\tjfKJWw?Gzw}YYɋ桹gKRr,Bs%)eo]ٟۮi9)In?n<g̤I鲗H)Ȕ99قhwLfRnJmTNNbtD3'm5}lֆYb@Βg-7ߖkAfe6-PКl)s߅gH)T̆.gJ+Ib̑<!A
$YY͔¥A̮}|ƻ2Q/R{9))SL[;n;yIɁu=>?+j֬.Ҙ\1Oz<k,Kʢ9)䎰^,؟Mُ}%Zh>O<^ u~:DCW\ii'|%_RH2,/iC}fJwps-3 ve/}K~E/?ғĭ䥧9;
[lt藤1srICk̯AQIkњwך9?wEc5g4~綵nc8='ƽ	2x;"țȫA-˭KhYo{{y08f,0Ağ(,PP4	Z>-"P0)X/aYе_z>eayKk*T=Tyfа^kʃ
{[kΆ*yzw!5M瓡2Yљ^12_pYhHMVxN|dK8 B
sOOBN)|.v1٦R&\_](O⠿i
4$uߦATz2J]D<ϽA)ȅ|])KmkQsv#ox]r[w~"n\d
G*qw}/q|Ͻ^WgI2*;=wԄ81cb'u'f;^4M)1cEJOΎ>g1fVb 3/=+&=)rdEG8OJ*Sla^*+y00VJJ& e%eM|rCz7!M>>=+S
Hef|Wk6CBACYB B
5**JZ* jsPVC
j=F-	TTT
iP-P0@:7h8iPҠVA,E+P7T T0T(TPá"bʆZ*Z
j#.P*(ezj-KŌx
	)Ҕ446']$KpKNZ,;C%
eqDs1rxؔRlRgp4ieJls)sdiRdb
4k9Կ-sG<\,2ov
G|!^яż*6x?iO6o0>0L$7`r`<sYKFo3xr=6<vv</w:mfj]Di'(6Jsbm<[
LaX>PYźؓN;9lO7LtR?OC8u3ctypn8w7+E_rc?f'I7/tbcT6^U 
j-Ta rJ%l=tښf'7_\/zEcEg
n𯽏|;^;>
J幢_X?_y׬}_^[Y;Ï>O>l盷l-b;Ke]^Qgﾯ>x=zx݉oOg~P~tύ/rצKVI}|;̝oص[=o^޷{{w?஻3(|?d0H='9%unZzg?+,\xɣM1s?tS?jȨFPL섇&N<ej|´Gx+ʟ[ŷjV~+ڸU|{ʿJۢX|/ރMK1$buH1&$9Rt1W̿yN`V1V̿]fIH2bMtE1;}3]W̿)o ލbͶHb#)|7_kn_o/7a }CҺoa()!P?AGR Ҁ$?lp, HߤVSQ4o >L|`0H3r?Pp۱: yа
Zi?Hs H`G`M4 58Y47iN@sW݀Am
``=Y`/~;
 C>`_4 [
8 n ]5HosW-*~E;NF0`
> 	 FG  g#<QX*WTq
πK1}	q= D{v |Pzf]|4.ٟU@#p-`g@`	p'xxh`Hj
Pf@#p'p-
P<`hU8T)E  
Ԁ
@?`8
LWSx0`&
J	 !@
f48g;00;pW;prn#w`كa&{`=ϒ@O`45?0&{02c<Ef`2P\JF0tƀNB025lRLkh
#{6Kb͙V|ƑKewBW\siq%las}/M8>!pC%&	?t&u RD8wxz"LaN.L$'MB$~.
.t,-ˢx<sE:0˂E}K0gp|"ɵ'ɢyN%&q%1@-Ѹ<X˘dcG$6HCo$!)~Sw4Nm$>6Fmd ZT,B)oaL )g3Y9L>0aOb1j;߇$~ 1oCd%vDh%Ox{tx":#E"Y(ѶDѾ(qQyFv6 ƋF)QD D $2HEr,wyk')39#E,_\zjn㌆kXViqyXFs./.eyk33b*}yocyz]^d?ٌ~n(	O,?hx^a1L? j#wSTˉO\f%$/H2(I4ӯưdQ<j4+Ggg}32k8qה;z1,OJ».žx(F(V<ϼyǰ<ӎcԺӎa5Ӟiǈ<i}3Si90KٝF$SF,sq1Γ['y҈>Wqm&S(Oq>U)Ǜt]>M!<H;ujOÌ}.qQ"LaE^x1"}cۇ=UƼp?YxghsMj'x<$X^x򪏩$Qn^O*т\x>ZK.q^ƩN&<
k=Z3͠HvBW`jtL n !@!50x^
yrY@rk=p'p#BMlx<yKud>-{LAOk^4i/LLe(dAqCY˂H63ɄHF4
淨iN>.X
ǇV ߗj5̊eI\>.0F6WT@z20.M[_RҚ]3`0ަ
HK(?C],+fh=A=&Iio@:-p @stxo|`cA@.[(Q
e5!3_pYU44?.,i&&du0.
, ~\$>Ho ndVL\v4P2h!f櫄4SePC~."0oZ\VG2&2D)ZpV-.@5FL{L=dnS1iΆQ?M2
!arҸJ:ڹ
fZZi(d`g%.$a	̴m;exV*/io
iB#oPyidҚi1pZ`~HmVI	se$AdcU\fHbӪPңiy@!oT~@.<Ol7Ls.ңr`&~M2I:Qs!g ɫ,pe$mQfIf֚iej=`?Fj8^* NȌa~Lk_\JH0~ |/5˒I|fH>~цS?VUB+Ԛ%UBk9O2ZL{7
utd0f[;|JeOYw2̳$.3L3\)IfMu0 
)j@4N6?|9eс@vAK*Ilt!IZѧ0
ק3g??V\=y^g{G	/v|K;knm5,N."Jgt6y.Ⲃ9|j./$39=\<$])}&6m}5OH0a.ᤈk6~6#E?KzY\ Ek'\R6_V|~$8ߣjǭoe\AXp<iGʔ\/蹤m^DX6m\!.9.%K},ţ֧y"OHʄy\F.=4\mڭRF.L.Ib}D˭9\ϥ|/Ke+sY|q֮cnB[|&.GyLV$.2^K'WM>˞6<VĎLJĖxq=f>zChY[%\61ؽ~-n3oml!?.5?.9JxzN'粘0WL3Zmȓ=,Omk6eJ5sڭypo۷x}!kc\kqx9ʢ?q}i[[cSRe٬ymڮe6y|K}r;sGy>%"%ܔ#o
00qq)ǟUk4wsnaɛ~೩՚ØkW?zMmw{4оtć/Ϋ=>CW@ܟ|[sϓ_eڂYW˾0nKk]:m#}Z>?(`{K{~>b_*=lud;g)޷3)?VnunmՓ>E/Z}'Kq?q~O^?x^6F>*!Cb\`zI[;<|{/߿(wM,-g3k4;ͅ>pVO\wD;?vq=zPiG>.K_W㋯M}.[ǖ]N`k޲l|i~(;?췋UM3mB./>z$Ml]oHjt[[zƐ}GkW5osfw}߅AOtc[GMZN3qV7kK䛟7n>nSRb
[حi^c&|3־:{qE/u6_sL-ц]kȷo=LuF|Ŷ/HOxF~'alTlcoMx{gyj`YЂ;cÄ՝7I8eFo1	{x#E<|j/{cU23}ӌ=8yY5׍ujŁ\>IOYBsT_r#~K~Sϛg}!<.>q^>:֏z2×_^y)IOo
}"jģo=+gssoo}~/lO
[߲0$_<<!NscsQښA~ғIp̼>5-	G'?>_,(8?WQ	ZņfkؕD{_Qӏ} gϼۆ-yņ,vhnysfYʥ7^xiO1m/Hxs*)bI+j߿UŗS機'V۴{ޢZ^JbWi߆x1ɚ,ؽ[_<A{f2/;Z7^8q[Mwbډ҄
Ng\3;]P5u>zOS<R7Vi$[Klʇ6ɣ|!]fӦN/}tk+f4r-/vtmtM3u<:n݈np1]5>kFf-	y󡪊s[6|4Zo~t/W;)V=ė/GϨyҘoI+Y?w$=x╡t/&MaWV,6_[֟[zaWg/z8/j`v:'i֬;rܪ~ݰfbݮNNZ7,|ڛ肞^3$u'O8y4'n;"dw.qwA>&'F,XpwԘwM]Wn0E3Ê'?W]=_sLbҟ^+l{5G=c_%kg `].v9］?!;?[1߻<[n0(w)5/in8sAECEE%ataE2RҲ2Vf̴ॼdeieiy]En<
gϹgyaWVNݖmԹ+9⡑~Y˭w]F>w
-r]+KxMy}KC.vۏ_KMծ#!w\&nȦVö޹{z=yȑm`~<oyr7ǭa5+M/]dr?.ۺecuy7}GwϿݑ;6ݾ/sR4Kv5]ԾiF='wͬ+Zs駲[y;?Am=ϛfҺ/uyK?k'=q9_ynt9/qy}ݱu=S
1]䕦[[S>K?yd7boool1TڀNeOیZn/W~4ܹkǪsvZڰ2/S74-,On}%EkZgwa#%u`
Ca#FR&bےԽБw%	$HX{HXLRa>ARqERɛn&RK
7JnhZ޴%yWK=-nRE^ٖ-XzR>K[~4^H6CiXthLф>:gt@Ģ@*0>3.g,ːYrajҧYD"IYh\aExHӓ߹{\nUU*38<K]|!F9Cf
?yqZ⊛c&uʯw=exzyOxQ/b.=.lS}9KPWANY~K3R9?$:ts$^dܶpϮ_W*BxLxXx8	e@?33+Zʟ4UFW9I$%/ppRR=7![ܲy)|:\K_:Uro>?1ze
9ǞhXpI_}YuN{n4XDHw܂O.>1gkIoF!E{Fb>_U΍Q
ϝn-}%hf[?5vNXwҷvF1;Wn7Zi/uqwSTo:;~ OLd50l,sNDג>^{wHɐڠEr%ؤ7&?tDު3CI-}e:=Yױ_N\lه)6}:\se}󤨘z+8H6̅-z֍>H&9>r[OO?Uڰ.:W|>0Dh0nMwNE~Gֿnӛ8rF}K~/zR?;r'[?w&ŌYnP_OT=ł-ٕT߮ȁ>jІwl׏.Қ1^?9zg%WX#ў۝LFń>bB[;_yCA#_y%dG}9N=1=wIAW1^1|_w>u㐝Ϳ;ܕ'ĭm)߸SoO|ͷHwSs>owG<.}ֹEBzтv뤨OV݀nWhGQX#cK
ǁ6Uۇ}ƵIn$|CWX l-f{XhOQfgz_A+)qus7c{vN>=4}geQ7Gy7:f^V
[I#{np>Yzaer'ďܫdӷ?pn;բ'ϕ }aópspɦCAa=abhphdHpu@P8zUppTpX$8,pఘ
sNFFØaAWÌ.aCPpxpX"8~oPXvpxOp]p	30qptpӃ%7dqPxpKp(/
#ÜpBzC㻂/dxpXtKp|3(LpxwpX:80'+8$݂_ds}&N5Eφv(zl}{ܫ@υ{p"=XjM()5S3RRRsORsƥRY|IqÓ3f'ͽ
mN{,"Oໜ4'g玓^ބؓ枅>'=$aFaF7żOH=PsZ4:e:Oヌ)c,˓flvT3aT,鹾dQ03QٮoJ|} f$ND|Zt(>hp	!!?G2s-:NU(wZ7+^~*/6mWh??^1<bw$ .,/Eq,uBYnE
n_6<c,$B-Uy!! pP))\|*0}3GIh k^pwbL|PN4d@QX?~\
eA`mx@` `` H
x!  b#AY΀v<l $d-}@i<{?!O>PpaB?0QBV ~\ }&	s	P8h6? X[  0/@' xp58'πm B yg  nx
ce N~t[y 䭧y ΍#-_ n";l!}7\ߌ   <x)$G@"ۀ g 0 `;/u?.pfV 6~tJ ZmC)' + ŀ W -?^ ,
h)<_@"
	X(a;=; dfNn 0}AK/?  lt/)!n	l\D aWOnPf)p΂~$٣XH
m/'!$}eB*N3 BxGgAMFG@?ft9()2'
Kq
o"aygM
K4&?a@_ݚGF%SĴ8$<wp8/:ohټ448&*+0Q#S_DۛEO2%m}\\ojd|wM3md	3w
=hLq9$`v0l9Ƈ.!YygJ@:kJuDƊ`oCoTGMea(YJ[QԀOZ6CzZsvŗ^|<}3$Ͽ! $UכO"nPD<UTuRH
N,p= 1fHO"㓂/L"\uz QtCU>{ xe`+N$?'V%҄j3T?8ؿinߎq2!8}G@MHPuAw]U/K"[u$t|鍑vg5`T>7O@8WuzդE"N&D:$bkϪA"ªIUN"ftSM:&D4ӫNN_ǵ珆-զX~=]Y;Y"\9u%"fX,WӪoGf,ucYaSL&["V bH'Ү bHD:@}g\,UsU%❜9r%b3}]6|%Br1ԖۇXIڜ煆?<9ĥ+rC;-/쬺4\ÜZW`t.UQ1UX_8}}q@t8XB
~giu;^>]X}zQ
P}B8RmW/C_eH׸un>fd:U_~ZN^!]p_HDөUz$$#|!$>X{~Rr5o	%feBk+x1
y%
 DAg t]v9MW1 =(c4;ZA<mXU}1}9Pը/BxkwL30u ?f0VA8?_27wuڂk]tC,!Y@LOzN(XJ K; BBI, <# &4x	'aH60
0`?2SP20`+@B
@p^Z%=y W C] /`c	@?q@1Fx mƨkP'
Ƥ	M)|f҂$HkriCڒ[I;b%$r'Bhҍ0%6H$"(TbjItBAz_#3y:)Ԍ4?~ԀOJZߧLL=j\vʨ)̉Qر.olf+#?=ݕrcX[
Ū51r])^y3:>&Czz(35`\5ͩzN+1\5}Dl!i'gGCSo!*Ru蘟=3\# `E'陑[PIJF%"fo߾N1-ʓ?]c@ޚkDIH0P	5edPOn3NG5&ai.f4Ϥ>)inS-U0z<U3hՒpfDxW-DLĪqM4Z e͘ӨXpz2Ӫ/2/1E]*zRqeW@OȪGq=㫕5_/}k?63y1r5ėSՉ<ʨ'MIMVFTBu#ϯjʀPUBu1ϧjhT?W'wrßWnPPX9G2S Q-&'$Tu7j5PdE$,j,&iQc>qh\~pB5*[F QT٩s?9=ϓv8|tlB2SaE!:o=ss]e٭c2PR6$FO=--88:<
s$838q%ΓY2и..T$y廽Ti7$㸚.;-zWvR*zg<`˕CN}	!_j,+n`ΐsi6eeU#W9On<q.z2
]ybfTM#ɧE\;id4HrIYyL'xBO YchQkLر}-9hM8!F5f,vaƻyFyh {H$D8$WĊgkX[1a|hgnvmaQ_'o1A)y^lx_E5(<(d`(*$!oMgb9nifi!-qti<`3ҍ#jYMgo׽g"!iz؞m6~{@>lWwuaRhW%yF^3s=`SyhכWP:*l1ȁvAZƑ0f=yk@7'K{@b1)gd$zn4Hv}6:hpchB߃\,>By4ql=HCPf e]oۿjuQKO56#LɨZ;ğHƗAWwsdf
C]9+UAUduŵtS)OStqٔQqqztսG|nk,k|J/<Xz^5͕nК
cJmߞ{3XV*#_@9:ײmPI5#=%y<VpQY)֎
c4$;/?'
ٕ688D_Q@uR*sJmi_.lUt&d5
8Z;]64*#*/\> td|v)F(+?k)6hk5'73+ӘjpI/kM4'1ޔl0	8< Q!p2R=c_K̔j/6Jʧ{GtL1&lnefTcb.}MOI3%=T>-̧ss1ueV|P^ƒړ2/ڲwe?)BIhk
y3
"20]z=VYJ7ʐ>Iͧΐ^a=XyloiߟR݆4/+iҌ?Dy!47S۾/!*?9Kqbw6]y\F[f,i\tpӝߛ鹮t72u+?˴ח`nٙn4qppo=1		3}WBg=dfn%> ln8.uUBgUR%WP_I9tݛ
LJ-0qQ{x`/4.9~@ԑm~7 /k?D2a5Ƴv6[jA-&AZ?ogΊ3c8QUNѢWkDYnMĨUSpWkүEUkD
[Yk9lFRtŔ(îTUSGQG]-4<WHGx|}gZGO-t7 ׏/
a%Z}#*#}CO\ ":#Ɗ&S877Qˣͼ$ǓiZ~? ,?~\E2鰿EyP."N@Y
PeU,_<ʊ,L]JXNth9})WU"N@
PUU,ZnJL4uAD.LK_&9}ii>i]VO߀4:xc<|	fʊ"]tJy[1}tocxiGvڗ7De5s%z}hඦS^(.CʶM2^6}ZQF0X4)	\!yL]Am?F
fTR7֌O<s)+]?DKs%~|٩ԶɊZ4Т?$+zM%j\r\LP4
d(ؚjǺ=cs]0]`G(\XavxL6<T e>Xjj>Z;W* tV)/%'ǕfD%wu+ّZifmv.*qtkNigywjhWxaʭtЯ]HųזSXSWzV5U@B%"X۠d쭨U~?vmC`؏kop
 ?:Z֩J%kykjYפx(ɐ_ Nmޔ|gT
'Nwк"2ֺꪜ:	1m
uWT{P먱*%oj)_˳\Wur >̫me٣wm}T)UXg/qg ,js@֪d]?sxUNy]ӈUE4c)si
vMXvmUUY`w'?^C?+um;]chpBv
wدtߒV_W?eD֤z]ڌG ?)r*[_+{:-_+{bG<IZ?gzO_c|B_@?^W_+zjkeYO'{loFǻR*U^UCe]EwSsY}mMjy޳yOCz{{7ikfek\S61JP'B&/&i;WᡏH728Ͱ[%IQ}KE߆#|od=e~nWKL?a%>L"kZn$Zo^~nzJj|vP	.}d9z3
j>a;5=c,ǟ٬9/}',b=]}}3󌧚ek&ߧ)E3C{!}"14^RO[Z"RʞؓmLYqb̗gDs]Pm9ԯ
GULؓ7U׾,5G}
hVl8e82Gp=lss/߃
<\;
swss4W2>^nRZL]-ǿ]tTu.&eͽt-zB;"eTY&G
U*hWRx8׼>R
:>u#܌q1c*/,RH5еπ{YT&$WxȕNG̷?6km2{_c!TR|>xWDok!>7o)a>^;NyU.#|c'!s=ٿvf3*ԝw{WjuOʀ}u_@}\ 2h|˗5;%]Kܬ.0/fC%%6;Xm[*]:/.g%}2=[R}!=ePju?CgJ~E|R;1<-&+=s,EZpN.ρ>܄޷VQ?h\'b/4X8߇V
U?;+pO^BR~JҗRvI`_k]Jy|ꐈo^>"4e
_"tkrIMs7ޝə͟8`3{z{WB4d仇|`		3PBF?8|5×^1/\aFHϞ/[(w3/\K/mM~XZtDk`{[ɨۮwے?	a7s'>&4"qBj	UC4ʌ']
WRAVԟSO,Z>tLJڨ2#:&ϛ^]IW,!-Q!{%H.%	ozP2^d~g`B؟đư3Wr!0rDױ</5sǢL&MlN&SǓ1I[N!)֤pqI_"ILFOt's<Y݉~5EXFs<$Wc]`n
B7ˑJ
gkq Di1k`Fcb2I +/zaw@5rAiOY 6c6d#=@+fV+'FdID9#^QʊUszV%CYJ	4(<ɘluj1!8i_<xe.sfy4v
}~bd߳?؋U[{[gclN[/[mm-Ŗa&ڦf=i֊kivnw;ƕrMȏ,~.4oxBh#&ȂS-,aLx]x[+Bp1Bl.)2(#D>qP|A|U\!~$~"O?ĆҍR)Z%]&HYiU\+~\Wn"wU9F"S")9my|L>!_-J]ASa8.%Qd)男erH9XԺj6Tc~jVOQWԃ7oj]{C{sgW߷`?e'Hru<xܱ̱WEEYqZ-CfkW;:mO;ЮhV[N3ߙtz3s[۝{'zK]5}|Q%5}~D?_/Ql%´b1L3gcf0Uϙ@MulۉʊPv;>gCV`bmiLGm/^dlrVN

rI\n	*;̕ps<')t~&_ſo?g0!R,B/ 44uD^I8'\
uFb3%N .t6M|L,gjtAI$6y|\YQ uP(Ct}%DATUVԥkտ)0mXGG#Hsd:f`98Ȟq2k"'*??o?FRHBnؕrBS]kbocgqy
=:V86:|m88v>|V??'pd
ضٹ'7lg[[?L󶓶pR`''buFopP L
녝B+Q5犇ċeQR?i8mo({dV^/#n
OQ*+j=UPVٓyZzN{39:v9~
FwNjhQήtx4F1-zW}>ODB!IkFlLe2?@adOˬjvis7@ƾx{5ydZ~=
/L[ H&TAf偐I[p%J^?WϚCMP5Ci6~Ț#jz\-UOgEJY96ostqRK֊_A#3:w88+	ф$2=l[>~ng[F^b;f+nb>\%qHn4epn.r_r~"BЄ)Raphc{uJqUK$MZ&GZ"*~^٬RK~cϴﵟ>yEKJ3D7Ϋκ,}Á,:gtv<t]4Y[
s#
"/-Qޑ.I93rrx^Şe~11r|	293r󴳞XOU_oԩMzi{
n{֔s.#ߛ?B3`%sķ[I4EzYL
ʯgW!@]V_OҦkoj]!m+BG1C	r&`leةl!Zv=36րMAՇLalr;0bHD1M|Z|N|C~(/Ny$Or}xrUT`n?Pw@տu
 jgeanp>/:Lz@	s@	o9Cw|QGkXͮג@m6G{A{[۠־Ծ&Zt888io;78w;Čuޠ74h>TOgCv,hRuudi;c4&ʌf1K 71{qHFlS6uhv30k m3mmlMeKeJ&ۗmmϵ:p(yy{{ڤ	ߜ'c,~
8*Og@턎Bz|AxKxpH8+!4a^q	=Y ٽL|]$~+^R@IR4MzHz|ߤp9Jɽd9K!?* o?t?!_CUM*SǕ{.erRiޤP7dPPƃOCQ;boaokهGSEAk_@uD8;Z6$G$8ІR	ǳqqLUEihӴEڋrmW;~B]StsvtN<,r}'EA]u=V@<//q7"yM}~ &021+Ϡ~e.1.q`X]~y];~a%,շ5!ʶ=Tm/\KPN{NtqK-n3wk	K7dPHBaQ%5~5_lHp
l!H<aPX%+lJ_zb%$E7D**W|R\,1,Ӱ6h!F+KIRDz]Z%H Oɍa)Say&lCQZ&FŭLm1W,DB)V~T~ļYmF<@5t7Mwkd3!1e1ñi#:yA:ޅA0=\o*hn#(hc@}H$=YӠzz>eR_Bٮٯ^*OCޜr/&xxɄ1_l~qvXg빽A$wO3V3.='/Co!v/86jjMn
ARBTTqYmf-Sİlc"&#Ai,XE[l{m~p7l\Xc@arO	.
wа-6R-˙J@WEZgG%tJf5$:f
[4s9\6
g?iƶd{m0?gƶ;llos2+̄F*
K~ᨠi<(oTOn
']r\r$(ɠ\~eF٤\RT*nQPBrթ&X=ַϴ?nKG{p'X	;a1<Hgo=ydvS0T|)e-[m!lTxp>J Wϋ%􋤁?+ސx("e;X=O
J}gyx۱v>$VҦDt\*Q+*Wad/ٻ`xXXGkyE%g*rbmSC&ifxT&k5&cU}C>s):!,6vFgb|һ-l+~lslB;þ
܍ҹlhaqr/p;[q|+Xa^lh ov4N^~!Y*M/-ޕ/+w섏|EQa4cQFzEkih_`;
tms<i8hIWX:(v	qc97ǭ6S
QVH^&o?bhVDexdJn%} (,Uzs;l8g-v#Xч&L
aep	1>3, `aQml:)_pТU֝q\})6}~
-!Ͱ
b.~˓ϴ=!x-a)Gb'0!bf?ɅOA~&EpJ=JAPh+ʃLQe$|gsYm!(Ga?Mow2Q\Q'-or-UxX|Cz@}95Xб,8Z]sBG=ޤ
t&;90?9CVc͟i->yv)O
rDVDM5^xA#x~@Z+퓚(P'ֱhﵻɎ{:9qslttup88hٴ-^6SZ1;G88wnrr~
貳I0=D"}9|uGJ,d$:.w3ǡAwe~cbnd;<ֳuE٦kF35.%mJꀹO8YFq6OyHR<Yns*`U/oC<ױw{SK՟

XxӱO-ZM!ڽ+F&ݙ㯟+`PAb7c2bBWw%+z3aI@tK!	ʂ쐷g-4CW1O6Ynš5UNk͜$"#熗%s5g!}6鐽"ƽl!|[A%k] mZDy<ېG"<NJ"8iah[vF8@e[Wt׳"}N!sۙdAfl>ʶ{a/抸׹kmBk1R,Hˡ?AF$5[ˢ'"/^uRxxA9;>v&.ܷitԷ.xq9ĭord;8ih]
R|Xw+B͜;eg_['!$e-~)EzBytwIIVwڗُOKo}c;<q{BtM}yv^5˱;/o8\HQU~U.*aw5S۫zl{`u=ߧecndZ1AÜd>ȾȮ2V<q븏~o,LG<~Z!^P. tUء?.)ub{i^Rwۏ[:9JVA-r>,5C]%YfT!S\$UFǔW6mmΆzg=NO-:_Bd*7-՜',`(/,gWa\8א7h8?F+́m\=.'{ß(JE|ߒQeH>|"̏3 l_/c\oo<ȗY"Op!Bh	;J`YB0ZrP-[YZX'lAYxxvRQ"2F#&h1CBqڱ޴NJ!)j|ޒj{m+D1]v\h1	IcAl){=^f5EoikcJREbd!HR)m,7ųFZ'm6ClvH~tD*\*Br_"r.7#frKОU.2Dc>rHy-^@*3XSby	57

f?$ȶOgrd)JqxduUdmmmmmlӶK0PS3
uxX\|n0-Vrk
Vn;\:]|3
wy	|?O}39Б#hO	
fB!R"C$a&0t@X,,VBn
;%!Ll(6@vy!Ɗ	b8RLE39aUMA*GKbPj6NMb0i[!́NY,-ܯoŜ|\<aa~#1<5s9M|z13000k0w[1o1g1_1WaJCF$4I	٭xe@Y,SV[ݠlUfs>O"x7Km։b1lT<+^.EB^.<7ZʀN/
RPZ\
+ߕ΂x-|f1V Wfց{UP
	W"Q
JB2~uRf(X,WV+vX9(Y2jKժF5%h5CQB"uD]VשC.QKURbܹWNRb<_4V 9nZ05/Q+a9R|ti=><*<ke!!JmTDBFYe+[S@wX[hmlhl+8h+t	=f~v@7"
2tB1m}m.Lr8
0ƐTR4ِ^0*ϗ*.:	7sƚ<f@];.-1=/B@
m5VPNpGKX޲#11voc%t:vn-D
Αp?PK
    \               com/sun/jna/aix-ppc/PK
   EX}p Y]	 $  com/sun/jna/aix-ppc/libjnidispatch.aUT	 5f5fux z*     
xTս/|	vN{DI$hB80*m'L	vAM$`B{gf2A'C5	zӢ4|rRnP@Xig	9,3{זc֕|5fmclZuILbM:Ř^?;|t&=032=Y3Ku)6I*Niz?[5MvLys_xDcKmhfZe:Cַ0Gʪ62dTJ|O	d|uнbm_G*1[)dtdg:P^u:"+mafq3%C1Xk>sEflV'cA<f[˭K>O~'ˢY]x>K	RJ2Nu0)t2Xy}0F+q)pzc`|c`?F0Xp2>5#Y<ӿ4CK4C錹B(ܿd[kEBf^Ȓy[zi|)m	
TO::ba(Y0-/Ue+kkk289x!IZSeVdU--e=p!Dxa^4yK-)۽3V^U]AZ#"WMhmRTS*
nrY:zT̒
\M-t. ڒ1ac|N҆V<FjS0<12\LBB8 72/!(׆Ms=Lʝl4U^pT۫d.T&k!)JrRVѲ@M51 9 :h]{j@~#8-k&?1ufqbI/a
8>|įF~n\媊1Dh"YϾRVVjؤ_OCB1ct|wg/E64nd6P
h<LmX"J١KE9#8so(|$Ɗ%јqRyD	Cl;NaoE!;]ɝS?AC
Mf=NoEzP裞lEf
ˆ\msw2x+e}M)Z]uAנ;Is]
yVC ZL\|#Jh6B>^e*]\vhExte555\WZW
1%&&yN_	-xyYe!5)]nf)}3%pǒ:oy_F+QJY"
={%~|^
ߵA~e=SQ^SNC!]U
[p$Ƿ;L[@Pu^/z]x~4IeB\:=ǓQ;alRhz=яɘ%uN=++W֔խ+YYVv]Ք+tλrx'9 8)=W0hU
X)Ecu$.͂H1_c,'
wGD6qPdTIF˗~grGpKy~2G8LgI?V/7^ "2@c96z/>7s$0:> Ov.F$7CGMILU= 6iڵ7dJhw{z2Yij@Hwp_AY|pǏ1^^KyHڡr
˪6Tԗ]r}U)ۤ54?ے<<"csDjc-Phcf.fORg=b{cXSq267ؘ,=Y,)}	| d(ӽ3^q@ڒ(Ԟ^EچKeRTM@gC¦_|f^ox#/__&mxY-w-xV'#osu<k+K>8I	㼏o1	c>=sӄA6EA,c{g!=*'"հ7l
6s~LkmD6	N;;ӝs/		Z|#2_iժO>>%-Bv֠\6HW~lM~d&Iyٗ~E}/&umd7Deٿn)QAg7
zTr|9w3/G\eqLJI}NnrI6͎(5d\=N z}>tmȯpkK!<Ԇ~2K
#wf*w:<>iv,z6|`&bBN2o~ =Brz XJTg
S첃sL,.Ix<]>@XE\!L=bSQ8^7/Q]7
4bE`fNM-m"cл]F;sI!# ~;[(_Yt;dr4PV]U[W#]3VN|c=`ts_/@~*|>͖$f2KEjv
@F2Q~Z2|s&;(rΤ@oLRP${EaIhO%ٖy6#s;mos}2hv&ʏ?sǁߒ_#K;zXfݣ5k7e፯Y_W?өkM
u\'t1q4tRU=_8
cZ<7-g1F?!MOH4&M	25")c%=E)B- bJK1iu)lbYg_`P\6$SHf.{.%L5겅Ss*ah4)D`6a҃:&C}S?^c0Wm].W&.hc88;?h޽_1EgajG뻟Em>g
bd]Wol|Mg5Kf$$nEҟ%a<z&Xm
ĔW妅bh${uMpOZKg)&Zߖ'ՑxK+ +q n2OkgD',Cu-F@2!~؏'@.e(h,K;f{B'(^+=Z=,ƶ(qhz>^l
M8	o|} >yP3/EjFj;a!QL>tfF=:ķ""]&I>uy߷FuYiDq1#ʪqW>k
2O{XAm+ךa3«y"?95B̑kB7}28o?)?lf)	]vPX,)`64n<3o53^Q<}mm7'7NYBVB;=
oo~jSEٗh`
E Q;KME6ѹ>6Il),39g>d7xh^:\e6^JQ
By,Tia"FU@̈2{[Z17{!%I&)4`\[47B2}c[cFYڊxz?m|Et|^J%y;Qm3W(f_eT<ͥ=1"qH?Ύ{|o
ofh}L+
h1%"}||$AYY;N7lJDleC"XMIhPںؘ46*?bI9#c
nə4O^Q<#ӼQRCanL^˂΀|ٞ'آ<o':E׷GwR}oD}@KyԾ+#d@{A=|a=	^F|>xwYuy|<\=Bxi _^7c:cGſVъ6ZF+>#hC
mhkAg~?+Vݿb%z;5Zmoَ{.+\˼e_q`IFW\-W[rF~C{Yk2f?ܗ<;m|?^Gmxk{]ތ1iׂߟ=|RN4/|!V
?xwOat{	MҸ6#W:0qH[,xݬLUA?Cc'BAوmsjψ1ů!W,IWV-iIoe-9g'/y+)ρn9"[|?57̤\3Qyyz{<jmDPñnזկ[L:Dx_;{ɏÖp7wkHefi1qpi3Z:Z|6|[Zcsc)n}ͯ?hўin]ˋ_o/_GL-~B27d.;.%}:)9t_F$k~F "h6eW?ጶ2`@Te707Ï9n9Xy"@eeޅk67o>UbF=/]&9Nx&x;/sC<Lp{c|w|Cnj?``^h> <1]&b|'>Rk44m4evβ5?%ײԨ5oY1B6ͭL:AO_tF
tQ:pxU?6$C
$'ӥn}(N=;·2(}L|EԞ
cFM$nh<
n5+G51bDWMZxvGozyQy|=sYe[Zy8ǧ)<=:\@q(vϹ^7C-1а|Q}Ha5hHgiQƷ>k&c{×N#PE<(#D|s..f7hwQB#|,gOQ7{7Qx0ׄ/5å\~Q{Q4uGxsni05xL!8
82";'d%gX&88>	ZWMxOz<]|WZ*S~bS)߷Oz%w7+)kky;z,x̲|Ʃ5tK0Em:qW,"oYVyǔ3ɛ1Y>߯S.7K2C}*b툥CR+f^fhn<iPa~wimW|&Cez)
N<^Yq6Qk6'xc[RLfa[cK	>NCA>H	/LU	7GCk}yv;eTbrhNV9ūAݝ}LYOAMC)ȝX>D~
F<6_GA?	ϕ|ϢM_*F7*E"oj,;t]P
F|yN)X̢r?K)7|k+[n~dSɞ(SCF QiD[7ښxF[!/֣ܣԖW+S7JW'W|F<wF#rsO09-*1 *t'ݲ*k~XYszccz'kUU)t'x@	'G}Ge	頌LkqS>);iAҝ%fi2dn< 4G}Im8N!["FyJ'oUDcBowPϸiO>%'tMsS	tx5pFtMJT>_-f`dkŁ;>Jcco_~S}U)?L)̊?Er%ݠ-?IybfKTCl:%ˠSRtRNe4
Nݏ}9i_#^>wf
w	yڏ;|1#e1ͺuܭ
Qz'/eDg[zKF{^pYݍ6WGL6k:M%+W|uzr@1Cx<JąhDەcxq*#NVLN<iNVNH뜊e*䓎
~6!Nx9fKD^
qx-yʻ;S\gjyvʋkeܢ?I]Sʃvۛ>Hy#k+c@?vuЛP/	(aŊw[	\? &"ۀNөL,4x7׳<ٺLn9,|T5Gg&}%WLw> ٨Oۑ7J8~*­JR>GVl)$s()()r#￀M+f=:E萨N! ^5W;Sw=t}?p|WnlyoLf;pӒ,8ۙm<]Ü*R@x/ry|{Ǳ(>m<BE~*FqFܑl-L%N%מ*כrA>+Kwl'J)9rI8QΠ볭r@FA!Oc:p,}( W|
$C9ri!OE(3?Slkעe!߲AA!k*T6oT/Ik A| h!|x>WS}~yTV$}Z)<]&or)CNy@I
Vn<2	,k;@!>Hm#oTn|d-@V8u,t@-NrT8v|"?y
_ɧJ΋O8R*xqć<΋iMGٕ%wi{(N/Z$KqIG
x^Dڧ >p
=Q@; ,L	zl<ޭS7-,]M<q5n6O4~	~L83OQȷUd{lȾFVpB?D诙).n4w ,}2bGo֍?V`_ke[Kg)K/
K}Kæs'.SRlR6>DU=hI</6<rSNBX81Cޑ06sbT^k/#-ض]Os%7Nmu6m\E,l-%)=V] bUݿ)"?"h#Qy6|mRcbZEƉaCl\#.vfXs"'>8eA7e9ENņl`}4|R͞CL"RєY=gylv}l]>LfgoSۣ<"oލ7/b
YsCq)䲲
Z01M\_OX$W#n* ߬tg񛐭ɈύCw8xÚEcOca'c|}@6 1m!O<^?gYq
dd#?yyr>k;UسDܝZ򈯕ۡےɗ\UbU+lC;+Cޟ>CCh^TN57S_\mf9^[/6#:[6`g+P"&fXw8"G~<yͧw}~miQ,U˷#/)}RR.-!)`?+mB"oSb,LsXJ7Ƞ]^]`ˡW`,<'+bnn%~|M};xtZvc(o8n	bn4zR+<Z1WX2/]<֊cHO Z-ؑM|t|˼pq֜Yh^1(:.! f2WOsr?y}dȓ
^d#<55|ط,>erxZS(BpSVy'ڲe|>K/J_>]z:Y&Z|33&`O1;8 a5"cS+y%?mr?^nglwgSQ?2\z> W5T_D~*F]8~>Ǣy'cIfNb~TG.S5Iw8<?ǭeLG<,qRM?p(σ_&q(7
|-b8L)oE%mUo@oJE[OQ[Z°AO=Q0bv._·kN͂C㴀* _<,s'W_vqǂ/
u.}~"oTh~듭SF{w|$$揹_0c"?yWcJ}N4	I@Y}z:O㋑VeҰ]y`)brA+'
Sw5G}y,ܶI/w}lg^R&c{:m1ݨSd!J
ki
N٣eDpw0/g#oeks-4s1MR >}be8_~ҋ~x=e3u,42oԢ@ܞitƈ͡b:K\LbfA׏71A~w칎`wr
$Ck-_%I
?(Xm..Q<ɦ4i֤Lp!Ns}}Oiڷ<X}8>iEݰW#?F[U_YVbmeUe.{ȿJzEI?o]G:
=]C&:A#gR:bvH
lrtXχ
gY3:lxv9Sb<#Nw(}~p{X=ޣm߫K| i>Z3B~=Q:i/cp#^SάszeN0Ӝ,ɍqL7T2=Np*!^ia&љ+~yMZ#HZ 6%!?9
&2fMAa$ԙr/K|%nڰԝohcJoܹ,D2$ǟDw?u}~~p^!]mlMmugtoAFнt}ѻ#c.9yGIv4%6BG\2SIBGG6[nGK4I* !^w!D?˸|o6wd
c?nzCOgeڟ~Ǚkx4/T[kFvVOue.I/߁scV)|пb|4u\Kg\;>j~:Q{~5߂ɨoElٟё$,9i.Z/fƗd9X}|xOtxJxC_Mu:]cWߤH_L_B4ZR~_=_D>DNf	^~/7Ӵ/4 xs޵۾8>~lMq?ߘ]a_.y].Vu,|st}]aau'drǯ3isȵü-nv:j
gYo?IkџxǼs?=S}s|{nfmq7f 2;kgޮpc?)^T/KzRϾVP_UV_VnuGSLB!CL
`.F/4kq}Ұ[w=#/9B-{2ݩj#Uw[+CG|_dqc$8ZY-|RHeqf~9~XyG8d;Y-2єy/֧ܧS8!cmL9s6;uN{KEǗ/jwxy7;-$v>݃w/w4-[u,Oze>:ip>=ݣh2ʴ3b\	y;iԎ>NBe<+tm@cv؂/6]Oߤ"<h8K~zI 8Y?zL=(ӷBև[`SM	
t_Ǟ.ɑh=R=R
ʿ@u?y7{ΗעL
1fċ7Hbg@=ˣ;Ng"\NjޮN6B"%~F id+/݅Jё"Ǔ}s=KPR?
h~ƁCs=!LwQbZO?
}|>~#`ns
g'ZFz[v:	J^sNT>uG>ay-2F7
(o.-$XhPN+OK(l&)e^uf.ڧz[ to+R)I)xok=nu[?NpmdNΝƲۼ>tަr։f#U" m5mrb*o{dkgJmm0lƖh2CI鹋y݋&|󵞇IVGG*6DwM_0D|..
n\@9S(<#yLՀɮM]߮ؔ; 	Hqp[͵!]y.49&7x#jҜg.:z6k-$ڪfDw_=Wm[Gw2i~A~(YÜGV*[_OV]g-4
LURi_Z;zʎRu)/r^ج0sA_ssKә$:w]&9mM,ɲCۊT&->Q)R2lCy26uazcmMH2Q]rICwIGS?6Y'qrxd~>O{?hf󻒚J&W>Ckß
;3x8tL@Dk䚡qTΉ@2:~|fKܢyxʖسIs9n= l}rtXw&X#*-nkStvO~[PBLu׎E	oZ[k[i<%xy}YL843Y'(	$~v݇
6S&8.t֞O9Yvҹ_ht?_P]I
u;itg>_Ecu8c~>G>chG9}.i};^.9eѾoWh'IԾbl|_]\ ~$t.zdX𓹒@3;wi/~CKTϙ28KGuoGLΓ]gg9u͔Mwu;kٌ
i'˰3
d~EW0R?~D䍠	ީe
6>˴5
x0yeĆMc8:=3=ܙ3哴u3lљh99#$*:M}s_ (KyGEe8}DbA(T쳸o_h_3	;4_:o糍}_Btoz)>Dy>x|Yv}kڧP?
?^kWo< }$l q	'Ge'%&[YBv1tF/.Α1;~;3[y=ӝE)6/(		({}'CGq} |XHu)ٷ:~S\Ne/糂ϼ9ɀUâp??/~2*~D:LSEɞF-z:7]vV(F_ﲡsɿFD~&
g%z|{D(90~ţQbT=r5q.;
B/?;{]ESpںxB{A~줸ƵT<pK4~~c77x(dn־#fY2O^
Jy9~7Jgns+;y#WY%Qюs6zXðkbrP\l<^[GՎǴcpEmnjHst7o&O4LM0դ͏Gnu}Z	7%?:9l8p+qCwP,iA8Vl80)W·tW=3e=4gF?[0sv.㶖dnsbFpW25=UCs+5f)<E\#|AߧA{s'kx~=4co1CSJ͜z?QO~|VS;:	,]qBc$UͿ$ t]Je*<\ad'd:ʕ=3scwvѷkW7b|7hmG͟iW|#C61{|f3	oJBM04pvHCHWvεaL9[r3L\#|J"o8t s@
m韊kKewao|6y-' l`y/;7:ޓ͗iΙ,R϶=yDxFvPFy0+AIgs3̃N|fi mez{xCʰدvG1Ƃ$!H$+R$R2DIH)H7 }	HW5$ב7HH7"݄4)
f[l;ґ2nE4
6ۑ# @[HHw ݉tlo"}H.\9Hn<Hc|H!-F;H^B"%?NfEA!-EiR1R	#"݋tH+@zɏRR%RJUHH5HFAZb"Gq{N-fM{W=_a&ꕷO8oY2=TqPߤ͓%Zc[iA_dAw4>hס6q=o8"|=-qp{Uqe<)\ֵor9wLfKt7Qa>g</ɇk;RqF{r"K)ûݝ#@.RO<(F.3g.Zlr*}P?_Eqxuwpn.+Yh͚ʲ{5*k֮)UWy%vps'tGsN a).W_>	Ϗ-crvfweBs&wՂV+bҾypqG͍
a11f3YqltxKt'Y_xLЛa<QO6YkUTUj
gj :
i0]Igہ+&_˿˪;NZ/I錾'@S*lK	{*UwAgm7C/ޗwRϚE|2<^ֿЙT{}Ԯ{gEjOOkI{@^Gs|6#{cqT>ug"܄Fz#Oe5sqj!<
CRHxO#.K=.܀\Aw9K%
g~HuBgF'x&{P*P	`!]WJ'W%3:v$?XO{{3cgg0vݠws?z<ξd|x4xJ9<{9M#Kq>tO+QBI͘y%L@<L,L8L5]>#N
|W'ب
?m/EƾVkh5h<6q$wUxưĿfeuU5+k*Ww}=U`ږxHz_QV-gcQ7ѻkŚ5ް̩qG{=U
_wb/>ӖOwFhOo3c+1[ǰu}#>r˥JESVh^YOm9IGc9[	]3iz>['6~n֖,`jhyO蔹l_X2[eU|TVR(re$'9W4J$c\W<-zh*ڵgqO{*%o{{o2{Tl?z<?9?9x8y'u|od	)w"#D~r	rpr݉ɡzlvʶ]gaۑSm#v#6T?#&1>'ҚS	'r'嵅W)pRU4ߋ	yJ>o4Z|$JY-	[~JAȗ"?|F~1_8v*RCaۮP%팽__#5_#5/E"_ @A hz4=MJ(~t=]@C!zt=2{oK:?!]wA(K!9n-"uۏonݺ=JD"R2OUoGe/@uM/	VuatdA1ŖK1~{d-?a>o;={OY;NdXwȷ|o}D{wbȉSmvʚ.YVG{5oMk[{{Y3:$#:#[:VOGutuIb~^{(y=n,:)R
6si;`)1>kďZ<y$!">B~˅OZC=Va06Fc#`l7 A ~x?OZ[C!p?ΓB&M!"$0U^-c7%w0GĨ/&H͇Kfg)g/S-Y|J\ZCx&"[:_%-~_@/_?aEj
1:N{ox*T6'3  TzK?%uϿcWl?'س6ҽUCvc<]_>翁&e_>'q_%X&?V?1^S*/g~ux^WOHjDz_?VN'C'Nm=jf^5:]R|WêG]ԾWRtH#C-WK;zJ~uEGX-GQf-G~XbS/53'gpN7̂nH8ҷˮ{ٕ1FÀ)t
Fuk|5F"/"/"+8CT#~=  A p~8?ķC!~x?ޯ6!" x<)|}1^ch_p:EeE%=Rz)xl)!rō+c|Fʪ
k[&*>R_Şh.])X}/_1uY9͍<K{[ԑkVܙ
Cg?Cmpbf9sŝ^Fl>6rwoK5o6,d!e^}t'3 G`W/fj7qGtOK~Z_Is<aFfl~F/E+>|EkI.'/ҾKTM:ٗD\5U:' rlS2[iN~g?Zqw,s۪>;tx,OAu$<|6~ mwF>
sIQqAxXV#iWLhohз//ۮ:=Qл1l`_:]q%?iow/ѣ7%%X'>͒#&sfi`2& KLskWW;LA?EVF墕8hgwmQ6Xyl"5//3igPgOoa>~tzλg1idjRC:pQ\!̯WL)Kpk2GZ
$Fؼ	7+maUUe5U5kVEˊ1JiH&4?hGqOABcMT6J\Y~淍ڷkd>8OO<<rCAD!?#<)ΕKݵ̣Fʡ&oC1E=CVЬgx&|V49K9qg/y9s<Y sz44|\3O2@EFks˝;ߓU'A2N_?^!i^_}1]A%QM}^_t` @Uv:kC.'簭THtƚ۽.f/Iu5:|}~ &ٛKߡmmK{u<m}7joSߦxnVmb~7/|/Ѳ$۴/rоr?crU=mQOn__1j]a}<K@}Yaہ-?;ſn[B|~-ϊI_'~~μ.Q^.`U짥+$/pc>|
igW=.e
e	_%^H&?>v)&{i|ZyWހOimQ`+Yͅ.=v(dp_6='K{MlJAGυgItzBwqHK
==:=e,e6+>Nv4
G>?
/Øc4G4O{u[IwO/s݅?zt]
N;)@WLAEO'o|k"~ y#ښ5UuejF}q5{M:lQgw@=2ŏCOd85yG=yn^Nx~Ȼ0
=Rqd#<rudۉ)vG|6.yk7|;ޅ"OGj6>eӘ4|r ʕ	s؆9y.{,%^fq5Q{z:MuJVQ L1SWj#4O{Vwꆍe ͞FSFx;OBk♐㐑_CRor}J+wfExl{W`g bV{\=is?khɣ b^;$G~cOelR)#tI~LGuGǛe3nϪIc=y3mugOǝQfus5>t`טEǩny)t=uV+xngu>= A]n>wDv(~>gσIoH^}C]}4鴡!Gӥm'	^QI^9?<j:ۛFg.gEaf}"9 ZG=nf|=vVYC#!RyfA{5z{h+C;N3,E	!m$|[! /令5ku}t/H/Y8/n<fǆ)cWĽ5	m/,`Msc>@]42@L6+`Fx)xqا^o? tZ%	N%	4hS{xORuGn_^yƻiPCrg<cc _m>yǄ3K.a/?:Y/`fU5M{6N?9m^3-7uB7|4A[ŇK']'ӷ?4uԺ8zn?ĵL]\^>S6?ms^6-ٲ0gKx*;D퍐Fp]h| VD[\C>t]-ƽ'9F.Z\ʿu`V:k}׋9y=AyϠ].溷A|t&atɻ/v¼Gse߆	t׆[Bwit`F'b1=ʿwoJgmXa(DKD- ~Qb:/WAnO.1x+Hgu9}Xqȕ"+nͮǇAv$Pmް7zf$l.Zov]q F
=\xou7Na*>

^8	ߌBtg9vڲh=h½Nq<ڤ	
%kC]xNEq)E2ٴʪuUjS'k֬\2τY?'wG߇ߕG{;Gmq!2кzw|dE,+s\%lrYٸ`bߟ?C8gŝ*@L>kkmqXwǾp_>yw;0^fsݹ 81=Uqiǌ2-.Ҋ1wLPչl9=/hBxWe$E*"1lyes+JMD>o<>%Ĺ/y%CP!kB0{8vU]}5q~S_gx{sl+)gx=ۦ}:gVZ|ճ'6'S.w	7Տ1b^Os=eg3ۣ}>uqSi>kؗ@\93~gKюǧ41fR=JnidoFFL|!emmydbnm	OM|mU\<C@| O8A7jCؠ8|'C,.E[@sPq|RU'v!8<WH2/{bi"`\uPRv輖rukrf⚤uÞ.o!Ru|,?#\&I^Ɯs¨ׄPXF6/_Џ;c_tw;Wc\c?r/st]%	ְ`s^v&_îOװszf=c̚u_aͺ?^w֌fz֬iqo`+gka&:E{)('l<żHkb+y`>k m$gr)Y|ErѼ{IOК#;mb:|`l	⹓5]:z->wd^o}l+&<p]"~\ASPUQS{w)ԾPWo$)QFGrs>t+GܛQƧߝ5>@ǹt(@73E@CMFu
1r%M0C&R6Dwy0_Ww4gOxu~@>m-fu6ڛ\o:yw?l<-}^	$*O$M̩QVjk5	о.vT X*PS:ZZ+ReK;0KyRK1tƞHb=Ltلkhβa'\D٫؞"
Q1??	E,p$j_yѦM^A·^s,U>?.:;
_ʕ7o1|/u +.q_cXZwK.(yhʚu2kQXz<ʮ˭_QҩtaYtmX8!^'h_k_DPpuS8	93w|-'Z?i}UGcTէv&mx2P|^	k׬ uur]g,w:
_g+',gr,rYqR~/Jta?2R/p6sוhz/u<'?NvT
ulg>}\rX&ϸx=;_+_t~ ֊zx=4n=1_a싕WG;scP xoKuQ?'|p|a_;V;Cq4{w[L^_SI@v/=y;4SuO<i(;y&¯O9:W(pҙnW;Z^_mZmEqg/8V]_UV_#J_q7fWܷM>]|jcI6 ۦr~} PCq?{W'pll#'w
QLףu.w:]W[Ew9=|
j+tRrϼD?nnw᫒
^1O;kCZ
p|bk+ۺ3V]lx,)R,It<%N*Ju̡*V}Nɝƾ +-fr=^vI{ȮIL&0`db`NQBI[4	I ѐɠΐɇ\$`.vYtKwi#*vcKXq+qƖnc[#ιy3|KL޻s9s=-:~,WI^]}YBE`3zM-ƸW0bsyg7|3YYiʌɬ3
!ˋ
\/4v-zU
2]*q'<l6¹Ƽ׫&͉I{T/K-ӡR>K(S<[}coǲ(_OZex3OnQX~%ґt5.}v_-Pl/x_Kw:s|9:/"&ۋ#E1yG s+EE`~pG<AN65ACDyh]k<_L|T#_6U-@@-wי ݇
tWp߄gq
OmvS_.Kǟ.1-zB̣;xk~ 97io1{biS!!}Kg*)œ#;Ju
d]Ƽ^閥qdۂ6K#nOq}'T)[y7|s<A^ r;>{ ($Ƅd\߿vG 7Tuؙ3ջ2?c}Ld+]eΖ1@yMz
s~Tkҟfp];4Nz~J*X|WNNNg=RpUiEymguczY?,_akeIp^K<S{1ry=@7p
g^7:.lus{))Rpl1X@cƲoTx^{j/
ufo۶_sjy]j\m9G
yz^yې6[J?1/w`]vv+~qCchrTn>wKL'(:<'o,߀Gyϥd:1"6U>пwwr?\=BN)@{<wE.xKOޔ6E0\߅I_)˷'bwb8ܨ;B/1{NF>0}ِwl僎B>̋ٔsAqP"nmӣ%˸ˁ]H[aX[~|M%z2n2],	~'4dYkN~:HOys`MA!4nj	Ǹ.P*:m(ZtHQɮ.yqMb<w4JYn{\3Ira;g2;{4t*tSocKgT|9: 'on<Fy:
8O~tx51Wa*=yS#(XΫc_ك:^u00M<N: nuUnz}Bnq 7z>.Q'EZ}]פ$W0j&%Φo
l;ߐuICd5!<^G{l[.5(ork⸼?LCVfơ4YykݛoNwJ]L3MKL[N,uݺ^րgЏpHK9cAla*xGܿ3w>Ȫ}]א|lLxvԹA~79N<q|6M<33:/Zc|uvڷit + wg&0~O`1z;fʺ*M];M
x[RD/>t)I3Օ+.e1Qqg֏`Ds\IZcqx3#o/g-Kk ׵-Yï?"۲(ks׼Kߞ0/U{Vd<z
tU/rK+~G={ji1揰+L9qzC+Ô!+~LS:2hZA NW)~>
dV1C
zr(lj/ o<?;]F,.#cZF$wHk^E9=6䴙) Y]<|D=x޲؏\s3'/f-5e m}*}9(!x܏}c}5鳠#p ",QU?rgh;RnmlѺ/9/9T8?H=,e<Myz1u^Ir#P>E.syĬ?1U;Sh?OJqdo<!
I\xo0&{xD݂ܱt>&³|Gټ12.OԸ?M~n'I43$	g9_hqsGx")6_wnH^іqx3w$n1MO=t}'>&:vF{Gлs{x^
|0Vl0-l6lF2Ў=u݇x1~{QwLߵ{]{1yE矺wx7*̵וaL济gnHKs|Y_>lOR./\HUx7q][XEך­}8
g,[l[gb},3ď
ɿ>sv6$~XfVV9+5xCloO[̤%ga]MU&giUcc}PsW3v]'^?Tp60>
Z[km2=uqvٿwH'
x6Ļm/f<'V
7R2׹`gG;㫣
Wg4䕬t3L~i</s1|bx1V0a5h>|?`}VW:,)Nti֐JsYHa>g(h!]GA{WkRŏ_&/N\8r6npnj* <+A;3!G)c4rFoo)6yQ+ԙ<cC dba pD0| B]J-4g9)\yXm;y06Zx2t{6A{oF~+v
fnɏ׶VC5oW\&Z]9Yk^CƦRЍn6׏KcB?'*|:s&AsgIw`&K7eW7gI\7-7	7i_0\c9
0bsU|~s]w颽1{ho"oF݈bE3c8Λ\Uӹt_)Or
MW556odϒw
P?W<$9H>KhRX}XcxDcdq9g'Ӏxj}fk G0a&
_,糧
|ocy^>RRhFwn۶T0Y.~6;y@>j+a|V)J_i:#
ov^C!^N_]oL{P}_;.[މj\&o錿{'NV+ǐO^(_%
F׎)ey~1e*K7Gjvy;h	} GZGMy5<)&X=N{c!XKuZh=)a>Xk3dg}=E&bDz{+8FB`v6~6ǉm|<lr]գ`b_SA=cX˭ny,Qۀί5)V;|V!ѲxJ2)cW?G
s4NlY	vlk@v5 E>o>5)WCd駴Y㮹)sLkA ǘ[ ^֪=|eMsDUDe٭CQQw>*ƮHT^Osb5syOr?åѬ1؍fo<.˱xVm7ØRG{>(Dݿiϭl$]-m~`6sߖ!3?Tkj*>(ȡ;F@^BLRC&_ЮG7a~<sHu|ccg\Ipg\epNW#[cy<*!{Qmyy<q!Dz1/lE{Ӎٍ`Kk*Y\eecUSS>V9p7cw0}A/8}ǻ7fhwoćwގ}<:
x8ީ.[)s @Ex:xӑ6g!fu<YmoaC:fYek,X8SJ=r˰0u!(?kS6~cJ~'RxB6i=0}#}}oyvUЧ	k
{`ξ4y <L~߽b|QW#Z6U:jڣ=5\}jf`mɹZM|yUϗtp~Ür8	ؽm4wg:8 vG^ G:|a_.lKoI5C{ϽӪ^!z5sZt%᷿\ 7@9k$=Ѷǯ?m_j}{<
(~G=~]nynTM5#Uwh0)_(\Z1~&4ޫpi^g8~g}XvJAKË4#;=GrsotI}wcT8/SKоrGƹ@a99v_
Z(u~K9Z}5/ڃrHWٰE#1E7xbjl1_fA>ʼ%BsuV5>sM3r?a~~&s727capܑu}(MM~?V2UƉ!lvjߕޞ#Ԋ
gB_Q}Miu}Tsa3!44ٗ!	m٦Ej}ח%G>ەc,oxlL~6}j
cSc8f!
ǑkV׊$[Ҧ]ZѦe8F7F^&P+csӤiy[;)HrTS۲[TT .*DIE	QON<S>E^3U|E"ϑSp
	31qdcYˬ\pvw1F8bKp##1!F8OcbpƤd~&g8'Rbpd̎DQߕe|l,uFmaMb+~bZDeo,|C.pa鵰e^4UZ{<Wڄ}\G	Q!Q!h!\?#MΌwb83eh66%`,_r|y&[{.qaur4n豁E l k`eŪ_ {+`b!Pό`o6NV8M^zƦ8Zn
ه'ל3P.E*F&&8?Sߡf@c;zֲ68T^|[YaNG:,鈱V9:3UooWqM|qzY1}cܴCfׂ/:&
s5YQ9HPFΖ[D;y!>8l:4̝^gy՟L­Ĝ9뫏33iO{;&j~zrSLmWh¸!}O#Ej4Kģ<55USK|X{<{O~ E?U1(i(&aeyCCU=-b{-J}][ZMgs8Mʮ&j<^ y=1y>VEF* ;S|h3X]8:(Vᇲ`&\ʂ4{4Agg
@X#C呅%w'ZkF2#HT7.O^
_FO)#c>Gjw>_9䵸!{I:4	:{[2:Y_',_.=aSo|<];d:2׸s0#癁Yquc3l3&qj3*Q
(.{v
'v;J&N9	2ޯ辺owA̹KL
xދ4!cv@_n~q
[(r{.={来QCˈΰÜ*UqQcۦyg5]g$]圞ijy<üIcydʙ
FCj]ʟ39՜]ͩ?wmR7XM6z^$՚Ļk'dA~g1ޯNb:2)S8;S.(c*pL /r5'YL[A/0;;͐YjZ}&@S4b'}]br>4x
:2A>yMe[G}{Lo-!;&%>AyPD3%5*g.5PN]({t(j5t ݦwGwǅL\GE4 2ZD.\H/^0x	ujYA}eC՞=^)kuZh ZL~_%jzEm25c=
	~;V$-FO)t12ۡ
}HL#2З}>-[hGs^cmj.9_sٶP5a!=G2~
gᬃ懋KuH#_㨵!g.T8Rc yޭj@mgm?	x8$xnJ;>w:ϵ<?	3C&ր,ܷ0շ{+or;D/y`aڊte'2ƴ2˨NTchOYB+k4;~$sܟ,Lue|؉wjBq/9x2iCڶA4[w;9i@{s[)|"ҙgOkGVi/,[8k9L;D_qyKv3!0:h
pO6:+O(ww_[jCe9\G$]x[K?1鄿O\Hmw'o~ol(3#Ы(lc!z;\`P>90?lWZ,q"60)UZ;o+!Ӥ&`Dr^o\
{/3>Yan\oޭ:wXSA('ռxTrL3^h<-|OOz_6RFih[ٚduϓ?ػ;3ܧ&iX*c&OgwG"L8QgāktpG28%0rdci&_7|/X*&af9Gj}Ha~r>^':^Wr]qynZ뉯GU7gd04
s,R<(1M*jq~he[T}4r,|o׹Us(SE߮=;Q^SgmgF|y1&^F{p#Zo\Rr|Lsk'9F_
-\F]=8n꺸}V/*=2q(q
*1#߫xmEnwƅT37yWk	7Aywt%<gGi/r'ix}BК|>i9/5](#,l,p+3Y(_pQ5<,~ƀ9qD3Yei#^ҹԟSqFas2+w	OPxg0)
:k'@)%?!;ŜfVh{q{"6\MXHw~b<T4N@hkWj_\7,	8~~߭}VV_rrR~|S1wR\z@{OI:7.3E'LN[&o@KZQY.=7Npq^xK=5EilXTq<:}
}(ԇ'4?E[XO|%T>ZTpa}KY+zM 8s粨/|>ke1l	oqy;
3W؎67xy7xzOW+F@C4a
`6ɗr:ig>s*#%o3#;
(£Cnx&^0rz%w&@+^AU1Q_27Og|⽙vtgh<&`3)s/$L9`v̥P~F?N^,.!'Py(_N`s>蝁:x(?xa;sΆ6qmQ./tl;T:W=SSr>ʁTZ
g@>{<ʣ百1~A}>gйqֽrbߞc;{@8Ab7e
oP^eHg_\|CW7"F}~^op^|͜3ۅxfrڞd&)\b*O!|ؿq_wʴpw|ʼ>쥼j^*د[[ą9anIO嘜"<m69{) aU*W(:{>ẍh	|`BOX{
YcNy}Le诌i3rSp>>OO,'6L{35|-s	xY䞴xq`_M[G"|ֶrBZi1ʔgc5Uq״V*GS7wMr߹)YX~k+|4zv{OA;Xcפi窘2s+x)bo!t6|jOݏtS^dU4aOcSg|ߕOr2%_9l93y,61iò~u/VX7X8O3̈&g8_m5m'b>C3p?mabZWw2=ReYA;
>4\ޢ9<zal3idxFt歙E~=ľC;ͬ	R~נrϓW\w'Egp3~ i<.kf:O1gH/Ҋs^I]ҸK^h|U|I*|g;wU ߮+ėwQ>S}c;a4L4c`^6CȊrAb]nHU8>xRyOWAg0~R.`_~¯W_]*|x?ԕʟ%jko;̻"[cO3<d;Ιhw{Ǭ_dXI{7ɉ@mB?eH /嶟BݶTfdۀ63iCoo%7`,!h`ЯƵm_erX)iok!v.zEiςWaeTA(WRn;؉<nG0޽Mk	kIN)MξXcȓ.&~=̔S3e?߁ݠ-wΝ̎6GYx1]jzȿ:)pGn#5> ps=3w$ʎgV)ۣպ5&H+ƩS]&;yH0~^>2|Uz>dsH/e]b %n8Wglki0_ԓ6n/tۭ&{`~-9r	+vHȶ!}fUsh+~krewwl\}(j?c\M@{THXèY*񟻡/0>>;0[SLU e'@𫒏K0S]ǘ=S=m;"!yupU/~{$	/{/~狧}ʟe?y?PK
Uϟ%吩bzɏW)|~$5-(=;gUfk>ԫ?>~EfSH֏qr{ݣ_*3֟6`cY;0djہ>dU\]+ǸVR&cI+W&,3h{f.~׷R舘0|g>C?.tt~
|ǆ36X{
G}ry0ݢy64B9q dqg4/ZCz& ^cw\B |AG>'he	3ğ
cYJ1S`,<iE?jz*=2?
={<	XXN<yh6dܤ?؜؉rv6Vo,mTWP]y)_x/{*9eS9ߠBK>{.֍u2hifޖYʜLʥ.Ek;Ʋ?O繽&
ۅ=MmrHo5hvӬN{kohÿMj`gv܊F[][_~S9CcRNU5<
%h3{[$:Q_S9Sy_N@CÅ2?BK%9&qVhw.}:B}տ* TRPFKY<Vd&>y1^!yC-Q.cs|o4iĵυ< yL@d\;m/eͬ]FwCڒCZEg>s<t|;.?41=>jsN*U۠6ꑊ/arP/{=PjY/;.oz7*"=z鼑2%ϧ|ryHsZhQ/,EOgTZƼ@{Sr$xw_KiKu9m?}tɧCc
DIE|^u|oWq6CaGuY5Nw, NQxA2U|~},z&P^	'wEԟuQ*rY.\yZ(r:\SI
>P;n=;fޥQ6&yjѝG?>(NymoMW
ZT7ߺ~ObZt
eh`zrzWk.kŊK
GOH%\9޹VQCSe2WAsOT]>}SքNGJ4+y*S~>]yf]<+E\3'T?]8*osy@yt#sW&zu<o]ʳ(ς<3/_O}vesPyz"T/]sUU犿<S/_Oι2ymyPym]m}߼\%Η(O\(Xv?z$k$yn_[NyyU;ar/dV!k3m-,]{^;̷?-I 'I t@JU.館]$|qz於O{&:NT}<
=s
;=3voɭkC~]k{kf-[<_x^ǿvO|hX:^;c2VYw̫bhZ>gmPy>\*1ۇ=9aӵ˘=#]6:>\>5_ߡ3wh1_W>l9Ugɳ@aԓg7]=y=+*vy~Py~ɳo!Oݻ""W&ԖCl\L<oz\񷐧te׹<_?ב2e^=yҗ yY\@.kɣF3egD'Λp>&dw5d>@~.՘.QR/ՐMW>	so3K)S |^okc
n9ц*Nxː߾P-m}m,x(/^|yt?mKt?A^ɡZ| Y|DJԐUuXY-.oT_o
6~.Q^;uE6i<z޿j<rI5q5*,*%"^:bo$c|=t?X0YwoO	Nq Ǽ=-sbL+F'){M׃Q5+㉂~Cwhr]BgE#1/
 s`|h	k[A㩪GoGSn3W{<հףQ/ǻx_$yN/ғQY_1Sms5dPFm/str4<JBPcoK<,a!a/[c˾/[g1adaC1\FBF*HYI-h40XN0
Ֆkoʱ:<4ֿI"tU_IjyY5B\,weDߖ=ʕj5W.i++"p6qUu}Sߡ;9y/wҗgTʷ2>9l_NP(n:XWk~$~&+NR~Ɩ4nc؛vą~1lT%Ǻ
kj{iUw޿[ -?;Ơ|veDѡ8Eg/,MMm:0D-9mޱۻy{WZ(o3?,e	9C>꒻~䵧zREkE~VEnSseJ[K}S~4niCbOQ}kkwzae5?Wv1Ϗu˦?6|ؓ2_}й(C;B?
ϨB/m"oRJp{
|(c X*P
9w ;4?=c}u(5?OTM902z΀|y'G&_<7.CCzmT?򘧳1Occn,PyX(axZ#=h.	G v~GzhNSֱGi٣b5_E+j_kMIY-{}m#ݭe|/>}/>~|n!T>sޏ>PǋjmKߚtct9Ob!xg<rs?5pٳ0sN3b4`s^޿pyy|0O+ѲLCҧtX҉snO*n['mx:z~҈uKЅ#kBMkBQoϛDȾwlX^[[_6@`wDSw=?	˒o|WIުxA#{kc\SȺ?s!t_םIh9uIZ&IZ7JLqrÌ{5UկWuB<Jg!O)_7_3t09\;K؏<-iqLR6@i\j'<r'# wv:gфRoK|?asGj,xώGӆVchGl$gƄ]Ԏ	ov&r<!t
w#뉉K8?#$v|%sٺ׃y	OSu
/<a>xlyxrI-Q眀O!~NN"Q.k56zbZNQg$MN粛<gN"懏TV|GFO{Q%F{ek=!UNpG'oc*ٱ{Ҙhu/Ӽ)Q֕/_F]D]Q0l;PuЛQq.IL؞]ך͊~-7ptsQ(y=ɢ23.F[
ƌ0h'G%9_&
}f,cu ͙vZDEF+ջ`b`&=uQZiKcq.910(.NLM_'u
Dk0
~Qur3l<麾(:GOWC{ IHXȷ;fM2!l`!V攲~OkgYmqh?)MzX֖~Y9^_o|gzMvG2n+Sx
4/*m2ѻ7cV;6XR~-Oi9O%*̜fs59l3];@k+6yG9̳xm]MZkm0)i

3.V_D3dm0?=O='{9i
|V/\N=?wMwEƋO2sx>Sq?_G<?Ok
xC<E<?*ψQ\_<;)yx.yx.cjx.}.<_3ʟ_/,'
<{_	<	|x+ӘxxG<?-oϻ|xϯzH<巉Bh}?;8gytn ]O@2
3Y<U<?&h=,wsx.G_PzbgpgkM3q
gS.9q>;莹2U]K
'VWY*sfG'sOpeum=qgѽarC
$[
ii)m 9Oε>j=ۀNo
O|K>Kf$*
,!~2K¯ʺ2mR_0>8O4O$yv[YZլ0,/˛#bjnBTĚ0kICݹa"Ʀ{y+_p~yE˪*nڴQ^xmZ6כsc=^afl}ߔ͉ΜŬxy;&1*)sH.kM[ex>)}`'K\L8AǇ0ۛnk`o]\˨qQ_)F]Ҹc[S}Ʋ}	}u}9엝1alg~/9|~0E]RG/}uuC}Q{`b`n(^6}66}0#k5[0]l玺uJ_&>u@}[j5llavoWjpC0	]3>a׀_y6|:!9sf/Qӵ/>!]xF[.cΖ0Fnrl?j:݉ޕAk)o"x#XxtÄ5*"F>Eo]d
#<+jh'ǮbXXM:_6mb3stO^69쾨w.YQ0O3d&d" <A<_Wr"O*#Th5tv7K_X\4'I?a~uRO4<jT'|ȧGc{fG'#|k׻SOۯ.@>]7;!%̂O׭O~>]*66>%T7mW|*iS%Dô(T4SY>
çڼĎ(ϧb(,$Fɧ2OWħ}v(d|{ɉZ?'<hkh3[ ?HOQgM!Qɼ|%{z2⧬`xOKylIOtw89CG1hǈ8J Ƕq82IWNNAr{F'k ?᧌
O~ц21c	dP [#8*p_?x/B{Nߋ>>axҞCg$J~
egϋ'~% d
C<a^L=bAxGe0x:~~DO^OCdE	/y
B;*/DW^A#4gFE^d[txp=Jst`J79/%,cק~}a8v^T{
/s$dEZ
9cE)Kp1_'G]SӼb%E	TW7p	FN'Sx;+i]g<7Ui\<qW^0_q/WG1ƹy!e$Ff|1qG1㛩A !e4FloppqNk{y_aqMúp\7Ê]AzpaQ5⏅c=Ʋ!]Oq"MFw4y|{wZg2oZ:Zٶ֝zh=ź[%6-amlW[3۝2iO%K_o	ZpO*gX4*tӝ4I{nˌk?e)/#>Mݣn7<weu2~Zq :ۣoCGAB=9Ajz =͢>RRHqX<A݀gso>YxT)x7ſQg֜>
{8|#1#-Y09Kփ7!ν@q
ߘCiz0ٌ47>%Y8?ϫ÷
wm:k驄n<
(b>&w>|:GUw:|φoSKNNvs)I 75~>
OvC0F
G72 Cop7
߀7&7b:0.%_^ϟM^qOAutǭ_'z[3tcqΪ~~ (v;(e!c/{Q/Tl}|CfvqN~`j{3Rʆ}o'g=V!.ݻ0ub)ˁ<uv?op-iqmp|}#6[q8Ggbw/m@u!Qwd?-T&I*u;.kŌsQ:k*\a
ݛ 랱%p[]WKڧīһ[ӨDq5vG:Bw~ (8+1iݨd"ؗlcx)Vbgl2>Bg(Z^_/[Xcr
W߹@.ߔ΍Hcd6Ǜ8CB{~>ffAm9x7K 2k^M\tg`5چ8;FmyڷQ<kQ[EuPnߦ\\Y6L韈1F+M~SjCM*O#ށe>*q
i_WtE:t
ium'q˅"ϚUà9.ϗ)whm4;d:v(k;\ˡ$]Բ$߅y{Q~[="S>"nzY{w2:%D9a?:.<Ä]	/0={F`{N^¬kbE-Y7E΋d?_Bo9oik[Joa#M{d)Awhnl]jAm=i=i=imuz|xfVÌ ;޷(Θ4wY;Ν{ۭFl;k'|LH'I2>(38Fq܄0n;dho2Q6C ns\6Nwuɜs){Nw-19;%SmWɕ+kbf]x?3{L:~{,0O2~ރ,76۟dʌyy.'c:);Y/V=𼁙[ܯ}T$|0o8 {f5@{Z]Цv+t!þH!n?\s[5a<o7
L[9.b9s&YS8S&;	CbeAw}Z_ن9$M$6>F;csX!]ئ S"sc}|b	_a]\f*w;MVv6cUc^pݭ/Ro~86
vaQu-dNtzŭ\}jo)	,s!}Ut~Oo{\vC*<h͵ǅ$JN8Q{&2`y]Y嬮TV{<e4yO1c<=lLroM?5wV+	++
8ߓ.1M~c]>\fͷ8v{u.akEkͻ|g	zes(9h|iTv_DGAhhj cռ
྘%qhfkӽIvRs0rŸ	դ܅j0G(?مL/%W>FKOC/t~?hs)țk׮}UxLaeZ'%-o剠v쳶㹤Egln4:[[ߴ*$_[Ayj`?~!?D?&ҧxβ:}\'4qw;Ct%+9~DGbo*Nik?#YښǠnnIzDd/9kY,^,t̟	뛵keHo&?_9gΙa9Y@PTi!R*9o;dܙ,Q;0Ohy4O2KF<Rg=!`8SXt6ol(hUMU<b?Ag@4t_]¤<b|oܴ-M6??gIIMUOJ0I&	yש'M	WNL6:,j0wF;W,	y^4>#D1O-/BǠN p1#
#࿌**f,Ȝ_[_Q_fƦfffίpBr83*tyI~
yHIIBbsD̤7/=&`|T%1afы=&v.I5}HEN.O4nDOAA$Nj)AyQMXd*`HT`K'L)~:coAzֆc
K|\>sv8\ƫZ8e<;9T X>@|CḺM&+iGL|	+mě@xyO?9 x>coQ&g$95E˂~mqڙ
8ɕƿrZ+gwq	gT1kTe&~O?귒7A;^;\{eUQG炮&LK..| .7mthHR4@qp3W$}d12_!W&
d`83L	`r|`M:{j6&&sCgoIT;Au";7!k/WI|<jQ~?!C[]!>hgYDa8n%Sf"54΋2BT?-B/3wd,`trp5B	Q^7q=KfHk8o2c@ݒSk|.3*IW7mpH_\QlBM57SMK>.Bo'?J5ptjNj	N?B"!DyTĨ4<2e$s%(m0x'׭O 
OXO?'P!ҸB/} 9 m`vgVbKsH-0׺'~ӳ!JkG~Ou"oF	#ϥ١H	(7nL#s?D]{ k[X~p{t&u<'	Oo>0WW|Y~g7;ӟzR{om眶Od?i%>L3>.&9=N>M/]psggϟ鿕_{?~1]#7}Y@U?r.]>fx^?*џ@_ϼ,KۑWD?;&80+큲CɊ{9ξDSLћSykySj"=}|?
@^d
Bl#d~"nA!}?С7V}
1LT2ynxNysv+dcq*q
\ۍ4.&qD\PDjL2s~jqxQ4h3 <ud Ir[Ĩ.KOD1z?o8*vʰޮ_ws({D*y-}uO	TU
Tm<wx{
՞':@*3Aufj~f!T_b]SOّy_w`-Y,QpI^{6@I8u6BIHb_6iǕ eI3<+!HFðB/t63&Z.#}>0vDR#E)\M4Ӳǻi>AG6z1YuzAaXm_P=
x2{OCK䱟CK e tor9#1d	z)^kd/e.gZ
1D#T.5iOo
>:TdߪB[ꬴlΌ23d|X1]}MM+*p?]uؐєnMڝ[ʼsA]K3-_߹r炅we-\ŉ8iS/+]W^u6T;*5u<fcPy	̘
QD=KDSP#k6/n|]mUN7\XqOBKEJK]RI:n*oroGiaDuuUU8-MuUUu
7TZ$Y]WMWZ7@GxCn3[`I*W-Tn*tvmד9LaU-z\KmUÖƪɡu7V5mu_ȫVhuMmUeu;-I\To0˽7RIp67+eкUnEFt7V25`Z1K`p/R\7㛂*彘ǩz7VZd -?𒢀M>s:9k;u2d} vYنo^Mg崺iSCC}#_UM\$ФS`Y(Fczи*PPGpNƦPTU=,tAF16Vա8*;=Ƭ,oh}
(	OA#z4{GkV4mI+MCD*Sf}cFKepˈ	@<mazޡc֫+y:h)_}ҏQ65D2xg[X!Oؿ򊊪 ATU@XUQ=ZQdoiBs+w]P4/4oiAӲO:	lp*֓ED*Յ܄[亊Y<i)N*'#D/!!uN%@or*ro@W)TO>|R|V[إR2$#&ǨS0u4YR7ʚPHJ
1n}=
KVQqS:2w[ V[k6۰qw卍e{L,:rTE5x@l䱻*A+",0=2%tݩׇtY/hT$.gcyzSBG"aAafG3zcK\+BNMMP,eX
X/,fApu `nu 
U\8S	Ku04{mpOT457U7	jPW"|Lǆ~_˰cNZa{9+_,jIpi(T<q>?A#|ץcP<yo,/bU7?^mLru!]r
H
[Q/bmFݲP-D;ʘLC(uQ賅+%] 6&_(
Ӵ
jBpE`JVWhr6Tzhp<kk!<~FH<<Ƈt:e)f/
cе?RZc<r=%?)Z
xF xY
5iiķҴ׽o*coTlI(y:km1Hݛ*[ѓ7aq
%<MW+ͧ:0h\;ʚAvzFgxbܱOORl<ڇ5xᆪFrv"Ц.Ѳw01
@5WuQ&.Zu),{$b:0h)=yh͎j87վUhh"ѪµChMihb=FY˙Wn"QDIKjfY}o
ۚ^L{f[ݵS[=f %e:ZDBh0`&c ȄĴE#D@q{[u{vAsy|;~}_]uҔ'@1o
ԃ4&F*36s,f7͖zMqgZg70LZ[#vLS~ gƃh
O\<}Wޚ5pW<@P|>uc09&&
Y~K{׻ؼvaƋnwo4T>߭»{GPgoA&?3AJ~48#L3rsᝬ~*LɤVS2810Ȯ0ZX13zfs9fpH#+Tgw)[3Y_$7ɸ1H5{OiӄқTgp߲qL+LLUU3IY8Wk14%[\/au:\j(-A?tJؔ^Vj/M+J %ml
W*,eü^9F>1[Xn9oD2w]7M@^77tOcZfy>_fާoz(<CAu~?\+җRvt9mu On<)ǖ{ŵ$Z8b`,&8&2iҗITh0XfR,yHqkؤ@KiFTo^LCٚvqԃAˣOE=\ĊtFg.lH8@XjqJ˴4ܰ$	op25c3gg{j坯T̿G+ʣOsw3߫UWUߨWggF̟O_E_7g#rgQ4^y/u}
~߀߷[})H{<|~{Oo~?oU}b剋{Xu}~+_k" VW<_~q{.7m}~߄7y
s,>O)\yky AY~.V޾ol\[ێ[qsbKVq(n(ύYOL Oq]s|3wl+wko+S|oʭ|y+
WqKԻ_Wyr?JKS(l?r5w3GsYyv wU,0*Twe\gT}23O})w~~ʃ;yτ*:6rϻ
^y/?(*UiJcJX*J@Rrk=R2|QO_5TtG*ݱ籒Jnzϫ*/xzSP-%RU>տFUJ(?UJU>_ULTm%?P:}MGG*﫲|S|c%'*O{NWg1V+ճ
}SYg 糟3C=
Z%gT<j6orZg?y[
,C(߭V^|O2;?܆GXygX#_=.U9w\4?@c@~j
dx
>68Ѕׁ҅*sKO@\+LO@\O@< z82|
z2YyʏgrW4-W+_cqLV 
u®`^ /!_1O\"rIr =[,rN\Gޯy?l|gqC: 7@W+W^`Y?+/C亨?E$u?wZ{T+?ٞ
4PG
T
ůU*KJq<
~H~|
}We+;;3m{7{4dy
73<Y<IoGI<1fZOlnNsotKӚgq罹VLV%iur|CO8!`[4hkX
	SS)e#:R_,%f3?%?]<-k%xWJ_+f	%_{%%wr%^-&O	,;wKj	 ]oB	*>OoWJp[οZO\CwO,
gK.	OUJ;ϗ=UC%8ܳ;
~	KpgxoY\	~P}z	t%8po)_%8܏Jp!ggw"%]P{޾gok.-G%|<{/%/^bϵ/  ^b_O^bGKy%<|?/VJyh%ǅ?B5Ko^bn,9%^b /0Y(;yGJx=\(0Y(P% F	c^b~ q/ _Z,ЎK"AK"K"uſx_/)K/تg㠋|-晟N =b?@~T>*r?Q>~Z/)wM]C}U7YVʽ/(ǔp]c徯ܟTSirܟU)yrQ_S/)+rU_Wo(7[=m~CU)G?TnVP=U^Q=}QߧO+%)ܡrH*r?}[r\[}]*8wu}v]U[8
W+?n>¿o+;
¿(G9NW(W
?wQSj
W܇gl}+;y
?Rm<w_/+S
W6g޹)\ٺs_Po群peνpe}]vPw=_?TrgϟUsϯ(\/*\/)\C_UUyU_yc
o)\Ux~p'Y<ig?pǝM_;T¿)\?qǸߡyW{
WjUQsWܶ_{AWKs)?s)?sϽpeSNs)?s)?TW^yepeW^yeW^yeO
+?W^yeW^yeWu+?ϿpeW^ye_PAe_pe_PA
WAe_PAe_PA/(_PAe_PAe_P
+ƭ/*/*W/*q+/*"G,3n,>,҇EeQ7[هEG,*=YTbQXT:
EeCU?tiQٓEeO^-ܪYTˢ3YT6oܪYBYVK[ᒲEKj,KUZj,lԒ꧖XxI٫%eXxI/kIcK/[oO7ڴ4nw7q}[2nq/7ںǌuqF_1}Q0n'ƍSƍFqqdqArI_Qו5rCj.hI-j.hI-%5悖\ВUj.悪j.XUUr+nVUsAU5TU_UsAU5TU_Jj.悪j.悪j.悪Wn5TUsAU5TUsAU5TܟTSʭ~E?ܟSWʭUUeˊ.+_V<dYqe5Yeˊ,+_VY,+_VYqeJ/+_VYeJxgYqeJ/+_VeXxYe˨cj|ˊ,+ϲU^PMp'QB77d4l^.7:ggj>Hy|PY:7#?ӨGgdaa+C=qKztVtݽ^4G5-An^q:LvTz/y=S`+&.8;ӷlc(u^BMdUֶ^(9RPvna^n#f]TXk!(a(@v
WCQܢJ13㒜<Ý!y<
j`!_Or=q8dT]bGZM*k`+kg|e9CZ]Z/BbY&2quP.mis3yΙB0}=J(<=3|HV?pr SU&i=<2{Q7	gO67bT*t}O~iy;O4>5Nw0t@Lx[{
瞋k[[o{{}{}_xv;JCjz{m}m~m:5<<^R[[yWTxHDtoQ~~!#2gXyH2+9뇥VA;ŇEEa(Ms9OߴVSSmyayӪH߼*7M"}HUqjn4Щ$94tC
igjM58Ꮹ`zh3
՛w ux?΅RnHBɁ]w?Zǯ{
D y?ܡ{7(9$SS rϩyCDFa
.8ǩr.ԑ)Ȥ,cݔZ6Z8À>V2[wfoߕJ喤xq#oI>%i
X]`9v}쬎.[W\#}>v		~BB߯=?o$WdSI cUGNhM43hV/[56b^*c>嬦9/;֥%߽R[˖{	+wa҄bU[eRAբe8	$ p3f}@?	֪mSAuہ$=Ȱc_1dtH㤝[CD"CqT><ҳs[{aI0$],%+ĠWuɶ)I"^|CW/Pn  D! r/M$$AI5[d87q昱FrW[ur%ħxlUk|Tj2Qss֨Od0gӵ&]
d*vס+D LG";XUb^c(&(j^<ZLd1s<#l`&~sLy4MuvxJ
rM՘a8ۚLB8(0
7!9[>W&-RD\ٓiTKxr2{yl
ȵ@ --PhL

-Nb~;fK
,Bk `2kZZ5#c&k=f
xҤ)GBzoqsD%XjYA d/MĤ)C$">;&/(J\/tKǱb .RP aHں^VmO&=Y!ۺ٤MjpѼ }zA}Yę+KN 1UcV!j,.c9TjUk
uH"K逻hNf.óV"V}".P7M1MnQ=F)M1e2ǻq
Z1[,dП?|(?9Qc,Z
0utॡ  <۔'6pV-Z#:S[ϖuXFdzh4!ɯ_YÒ 	=HwWL@AY&6[
x;UC@ \Sk}i&AŜ	{Zj:ɊץbиoA0* ~9d.uԑGfSЩ<@5PcF Z;̋F<. I]pnA_0\q|~)n߂N7
ݺr7ل[Bx!BZ9WE@0,<APOZ^cD^lOJ{ĳ7'sߐ|+;"h/1';':$L2>P`Ԫ[g2\qkQ.'G U
r`%VGxWj(GZS`b@MA^v1eZ;ߴ#NmF:H8ڔP9
dit0(,

jB!LpY.,
.%6Aou'x'hl8*|:4ݐM&|I_+k3V!4ľ?w*Ȃ-c(c"D$ཟ+
1?Q1iyvly4(7Ƒoafߑ*P7WN	2ܖl,8!ܛA%r?Np$wCl"1'Gk)1J[X<[4:1C6*!Jiʘ55sj#LqV{}j{Rz3_'ŷ؊ĤlU/Vd%ml<rj6u0Nu2J0C	g־
"
;]\Ǽ^h0h,'\M뾙hmYXgQqm  6
HطdQN!j!*jc#R|s7^ߥ/bj%YS]qS@ݺY	p[#^S,7a4Zt}$.m^V/\Y;nߌ\]w/ۻ]ެvkҳwnlƷnlCΓT!?P̓R@l
Xuuy] Ս 7c~٣	&]BV@f y M8dt[վ%0<uRT*.IUF)
/Mp;?e"y"R3 e%׌JiT5xXhw\BMcw;tiXY)>:&<L٥=HutbT9q _6o;Hxorg}ɊoAry1BZjzLsP2cz)$Ii֧~';@lQ&i3Lg"pxBu[QU,E%Ӣ>ڨہRQ =ڦT*ڬm@S~C:1Jr;Jc0QLJA A4XVvVSY>(O6>G>ȓh98f161i>3*#+vhf`UqL;$1ڪ{[fjgO$pS޸yd4nܧiw
3~9<$6x!5~U[vdDdVe77|oDn ys斆4{)g/i{;3i0f/ˮz_vB#ga6u-sPOv(DPO6Υ`wj8nyo8Ʒ-;,e+ᚗKh}y+쪷|YeXŷ>1')}"u0KO44tPL\Lt"s3"6mW.Bkm3N!\> p{X;@nm#gL㳮p-~1e":B{̰VZG:
yZ]ZOzʂ3kٳf¾bl;3qX3f
TqH	\8,3"
t.Lؼ&wu~36<B3]1b?"J.0^>!Y-#lV,-8&jvW4 llcCڭMfbsssh6%
$P i{ AD4Ŧ`v" ^D%T"ȬSbd~KF:o/
J1%?O=I 	fik96je
%q3=A6u25tfɵN	Ԛ5+PkV֬@YZ%Jj
*U&PDV@RZJj)5Zx㪨"ec-XK0RP4&B#U ( A#WKgb"H:dd)$")pIHHf$p5F^J1JvfsԲ˰\v,c2ѱ%gd`.:#c3ɱ&2F4ȘLrFr32&0a#LƈY5-
04R=v!۵rz&<LҎV'SGsZ
1cǩ8Ȃt`iZDhQ 0m @ Ȓ?LhOtv 
3Ce(86h`?EiA8qx q@X$1]x˖)=8!S*&A2)#G~1rȔQrF^
&V?`¼A\{:5<DpШS7sWd,0`cdY8p%S)搎fiaF]z)=hBX1=s?'n2聛rfl=L9N@dǖ'?m7v,P#h>TfuǵT}ɣC!'k+!oW-U)PTz40<;>?7F`7k|	pL*l6G	d>f1JCXCkppzzǙʐ,Y"˹d FX;F:B"NAڌZ5mh7W@V@G+SP@V@Δ:?S7rV9gF妴̙2gZ˜-s̙2T"eNQ˜)-j-sfVtw͵Ca0{,  3f(s+4Mf$kz.$4٭qBق/8褌fiZz02Iq)HB$~^yxI̟8cWgqGFK!b;G|yy0v呩"6z&+̓CPb~MZL.Sl)!)%e1TkǐSn\]^YGbi3rҔnB MzB_#U pܻo^u|j

-+",z3l3D:j:/z^"cSWlP f$bc, y"mmY҄PRy-0<,c:['j*-F ʙb
pέt
O:CؘNf$:1!4Zat:ZF6$cPhI4#Ah8gH!ؼP֖Z8Ֆ"6暛JdI=¸8σ>@+MqҚSFUJqPs|EA
NT렩KTq<<HiuCs!c TP	@LRl	nЋx6
]B>4
m6TF0ځ1PF9vn%0 
*!DC{F
QSS
9eᚄVzBhjAPI;!@l%OѩP<@L<p#+6TjqSbVLЁF=Yp!
e|eR(:tdtѸ6:8BqߺPY #(_"gB $gg*z6-ڦoN9p̦d `i? 9'}3d`De~@-w\9\@6T>#\iKcYɊrղgFhi@-;=Lɱ q.iEL_Mnkڥo=5uZr"q ^70sac*QÀ!":Θvi&kvR$'G0jd/7c'o	xIV+)BW@GkI\o>8HP6\gFYi^xp,w"V,Is<JA+w@ta 	TQ@'s8`VM5h2䬘-,+fTP3ZJym)'i\f1tν\Тn1ƒY1&a22N񜂜;F|fb|)B<sKSr4`6x!uF
I0iNpsG!0@.02MOu AhLr	8!*SZ-2I 8@%<[ʯg
	Z`p
9sd79;YI/k^|=eLڐ'бZ[/h׏S@:rxw־{	|ŧ!ޘۼh0Ix&Mu[Gɰ?,L(N#,"%F<0ͤ-33`ty\9q'U68m:n:j4V7?liF;iW@p14ҟ	NS-<B)}C\ L@IA$T'fsx4gvk:_yͼy:<k^*z`&p#4!>fMʠsD %C0Kpipe 숈ȏ*$P9~jq hu͜љ6q<ARF[rKia.㗃&48k@.Ą%FA}(4|!_463SV%$Q eە3U:K<.))鶷,&$!;@BjCy'|y(Y7iY
=0(AB%圔٠vP9w!xާ8b%׬6_.zF0k{=k+;3ƔxJle^2%X%>m{ɨ_#ôeuh&H'.^}Lp]#/sɮ@NJ>54ϭs+} )Is(Her6=Ȧ[9sc", [hkFy nf[lgc<xwݑ?H#w7zGn&qTn R+}70FMePoYt00(U;`ǜr,c޳bRrk8Akt"}!l[tka櫮h6z1]h}t.}<	Ue}WR'@H@V$<z.?%ޯfF\*ݶj!.m{5f,(YNLuo?+!"MuKWKo2Y0uC{4re/&c̷^<j1u.y.0_T>lxbfn֋UmB_3ICa_г0|kdrI+$f{6vb)ʺ^c6^c=f^cDf^5(L^I?ge]oX>~3ΊbfɚQא4+!T_TQM*-R2MuˇW٧ϯ
|j%+Q#)j>C_T hR}lUlm/aA%hZYxVWMZ>5j/ɬs?2b+n^Ph[i LC|#1X$^HsAD H:)g#
-|[LOr
Ot>eU+ 5D͔'4!3Izo]ΐ) t+cҽ<gF3bP$P>Ǎ1#fn\bO)#Eнb|?7ǩ:i2j0MeG+0 
kvb	As!ٖeeMZkI۲q=UҔt;(O
cH\~mN(eRc5u#{lv]!l&gsxr8Ke`2F/ДRsl0O~cI't?NƇ	-WGDR Y`腇KkX }-$ ireA|dU82Tf pHm D#dsa_D4ʶ
#_&iD(5-pٚ{ZtJehի	,Kg0cx^
+8޺RgNm}z52k2\h<?y'S@-<jx-mDX738c$/%ynwR^
8PlKJoRufhۧ2!u4L%P(?]"JUiDXEWWA"ҫk:ެ;cXDsz?jG[٦?M"D+{kP2D #+ͦ24!{7'7 K6nӣ-5z0ywcI9`,c	4+ʪώϩLRD9	e9јxNzʣ Jm$+vfG8̔H[vWGxYǂ7(俞=Z>q&Չ&_M̦ AZUj%zRQZGmZ7jӊA+O95-ۧY`qvF8Xl=s_W&mг-^ϥAذ<G6b1H<"d'E 7Oq @9n&<f ̾EEb_C "e7< Z!bCA\$phFUy8Cᵻ<j+IG
T&ňY>k%HvH8[>璃2y XP~h@͍CB8Xye+A 5uȾQ,	d fFn95 	4uˎdTL 0# ¦dnթI`oxnan us]*{Nj)w@ [)0g~p*ԦڌUI6!JeCu./q܇}3JT3qU31	.uK}dυ:?	cMPkǕSڪvGNiWSڧ_S@V̼vԱIv@j<뀭C܋do|4} g Cd@f!@N;2abNJNbܮޝ\旳<vH~[\eޣq FļU_<7XmCJ䝼@]ͼpTC~-A=z${$ϡ;5oG.'7w !zGP<N޴	pT~!'> m1i!{3s29̨_CmP3LL^'A1ٓOQRMrvoބl'ݤAS+-4w1:|2FįHabQj>KYyetpl>FgU\(\8
T~h|Nukosw^dtR`5m0T.GP̼`i6~*%L?T7vY` Rl([X[Mr0rx1imښ ksN9 3B[ࢬ^t ֵlx{wgs}+٭[mܽ
xg
-L^MoǛw׶㛛lwnZ6dM܄,;5Clxέ~,

x3!j]܏@dͽ=xyss.nZ<_-p}moBpk-?9j#:٦J`r¿ɗGmgcڝk/uiy/syr.ݽg.!qU	җHdcuέMLZA#{XA`x+dDw7w@P&]<s/؝[YZW[PDzx	~4w'x PR߽Tc#{Y_N}:ia|A*@oo@,7RפƧnnbC9V0Xkq  MŌuHhcmx.{ƏIRa&J튔ѵvss#x !xƲS	F pC#蜐E`{v7wv76wk;Ff
c?=:w::F1bh[k*5N#1:uqnfT ͭ6sggcς<UWbr?E.e6dW:c$G}^7A-)SRH
}³aZ,}֡&~`O,a%8^vsÐ[[imkwn<]EBiXT52X[kb[[) 7o`ŬNa`
v5oݥ׶n@ZH6`	-`q!41.(dbo?	
4
:݌mI|4
'ܴDW$Anmo}.h@ ֻno@>nm\0}ю=
op"غV޹	?Kvqw{
gsl8x̠;P-x_Ex> Jvo2!챠TH3hdֱq<巎*F ;N統uMx8/-,ut	bx{%!-(1΍dAw=nG\w5a?=C'k
2;GsYZ~ ӒLW+sf6b5j8;a[AuTkry}4*J6nG۪'dت܍1Gu݆r|mwqo]~aADl^(~Sp+׸C#@G
$yE1k
vkzcQ)7^QaFp9d<1gc{ևQ?߾ov7M8;"~{k䩈ov<~$1ʶ/G7ww ?E"3<Lyp"vsgG
Iwk''.Mk7&wd3>{So3Cog\>Wmh0~
:Rp]zXetc1kosW!>$W'_I;С!)B"B"Pߡ(`v
.BN
 ^OAnV11MCN11X 2tfnMcөEثnI`߭[ԭmڅ<UaMc^ݶ1DLa.\Oa!ΠMa
ݵs7.&pʱf]0}i|q=f'	h(;:c#ix0O7~DV믍R~+/b!40Ƶ~Ov? u	.5]Rڗ`υ<xsaLa4-RLnzC/܌'s>CBgﳧ<3hc~C҃~9:JLRP5=g8[-]ےjB]׏m tun^L\)Z6x2z]	ѲLL|F6-
r1	m'.'ai
GgX!M00B+k76wXp`3a,gvi󴶍}̺ pw3ZfI0mpyg]'=hzIc#382oѰv|c{՟Blh;c!uth=1h0餍WLz0ͣ?%BHѫ?ɋa`e\2&'pkZk.]SXŹ '6t]u,-Bk-'dq"P'r9ZVrB6'sڎqb`N	(esR7MFhZ%~CuFN68WhA\ 20G'.NGU84?CO>]`vӕTH,@,{BON]ᇮи? ej9@SE7 WƓsOA l..: 3&XHqeyv{sq@_`h	fH2/EàÌOq}LD2 f)y:)To W|)p+qIX9r|0[PߟE1@7hRȔN>]"iRb)&9My fJz W DB7hi18
j)w0b^9z@od`ьڣf$0(G
k9%Aߢ'Y)L3Y<հ7G|+^"6ёXa2隤C|@"ZJ$x7E7G!FvlrihG4DR dSWIm5u A+{( r⫒ r8%ŅfgQH`׬i/i5{Ƨ]ENvM5&E:
vvn <{髞hpHmyI=T\VƦ[/`4qg4,A K{e=B GM|Vy7a?[7:qa
"1Y#h["AT\
[2v;`mMh|3@O90bImhuσmA՛yvtCtlm:(|2.Qr٦ި1N^&
r7hRhka'!+a|{0qq,X3,xra2Q4(
/lg$tagl)zPGbn+7J_1{ULΉn< H)&P[	Å~B;NG	>Ӷp~췘po
%RT1	~Ɍl*G)d*4?0Bqt&c:#H;>!0x[K-V㧂AL!2MS0̏Zl6BiB͆R	sA94ZTMMmI
w&aGy.600|YBfC+1qZd3=j'MP\:};-df
/q ¢;6!7/NzC$5_NGwE}RBӔVcڽma5aQuXyBq$ )}jJS4wBmz`vT	^PO`[ÏV&]+c< N

0H410\|@(NԍPh~/vBZm{f.
6(,FҝRTމ2R4I9z}XG(AHbܠ'|)
6)m4tV'8sf,0a>x2o#)F8m@ә!NP!^1@֍;hiV JI&48J	^ЇgKx/كnڠ:BQw|M`TȊx9`v#
iF<N:-# C_JS!HH
T=-\
?/Y`cuBMϮ<fz3L
}tAH9iDcc?S3pGʟ찋(/caуa#"h!h:.]GH*0H/a5&Ft0hhM(Bɔn
7e9f}1 fH9q/niv)"<I _1#1ֲ#ŀgP>K J:m(Bܟ[.^1;H2*;a!͸#!`R2]-vch}ߠms2TwoQh5t}_>H{.ʘ7(jP9K<C8@a.7a.S1]}t(x&LI!0lbqRM){9pc#%&tvEFt>0x!B`#\f60h"^3ff#Зy?uIn4uHW\JO:X-0~&2S Һ2cpI'#
>7>պB{ x`9{1[\=^K dǬ-Cyƍx |Ỳ+Gh|CL̀ڐBz7 ;!S>"_M!VRwg
G[5{quI+gҿ46y$1L(a&)E?sJC±
(;SoMz=ev]-xggpAOEZ(ϬS(vxE@N-{.׵P As A /|7+<b+'K΅*kjpWX~=vqg!^uWqQwCq"Zt<I, ަ'8?_+L)Y94U<px;A/GI5P.Gl<pbԘ#\3 ~kg*d0#<ykΞ; mP!'b&a!l5|qq>G jp8!;/PD79 Fx!2[t	yؤaw/˕	)1:uLd

JdcdIjдɗ4K'
]T_t
kiW:]V,)GX9$}:0ƻ4j&ȞE1S֝1PYu,\3wd8Rx3CIJxY@2JɅդ\) 34{aATÓ9hǽ8I{RS%Ƅб1Eо(gٳ(rr4bpKòaѮ@ro~#5E4to1(B
>Cpcx	5	6	uL:]nEHf4oghDzka{=s^7O4o2zf]HJ0NMf=L Ł+H%sBgߞ[+"1[Мɗ8yLE<P*vgDP:E(v=ܧ9OZߡ%\Uh0%f;(5F8kEsC:D~(v
O7"J̞gLGǛU8OS.4vd{;? gY@o* NCYr&Y`*	6<-Y*]ΌEjx['bt
rFx?yL
Jp7Ra_8R4Z/N1|'%x=Ӗ:	W Pm/<(}A82xAV>a.ky=Zyo;o	E1};CDz +=GDJs]kbX܂GHYu@=7OZ>*.ģ	urZbb-GԿ/i"/du 86p-A1kaG	b<\pSii/z$uOU"tAF^VpKo~OlxI֤iVXQVJkͮjEY<E/EV
<2<)+^ e6dD ϊGS/'d70LVZ3D[Y4+ݥGJqx04;\/n>`h|a|:X4	3PΔAp,cnS+5|a3U1ޝO!*:%f}f)<=
a>a EJ1)ãepP)i_X <&4<]}>p?2KVWu1v!_i
&40G-./]I?>_Ma{;n;1|Ic}ӆ@Zfk	F_8qgԸF]쿸cF/!p2RlV2C _lYNot[]
 <VJU!u_H~n0/:O	ũ_n2_<*2!_f/=@?q	)lۆ&)uW06ρ/0X*&|
WP+H?bV1kx$4?:g" JCʚ6§ QްKd(.082@|!P!#^/4Q	e#̉a˄A

Bod-j§xgEZ|!SXeA/*m\V~-4_!Ofg(i+F@H±@&7alS@­^d0jaA&}ZT!846Iꁐ((6;>ib@1l}4z5±(<|´Ƣ%i1Dԃm\7-@2txpB<`yFy
ӣ_yKkY8 dLcKJ=A{:3!Li$Evy*b	M<;zG
^	lnIjF\P{mu/[$dA2Ya/xiXi^:KIq4. Gynv@h2 S0/q:
a1D
p` &6C؋Pc<q
x>VM.2upqr5porGonVl2J󤭄.qFĬL`\]^&3-S;0]dmc0F1zsL#S@4 @KJxJ&x	{A/x8n &WYa8|` ©K
?| ƇɎ@	Q܋¸Lp	ap3 vCQ`{:htB?e4,A-a7Sa"ΔBohYd	K55c<BC~A!x;JꐷD?oOjdm75%Y=6Q>Y{5ڄ)Zo:^,lY
 ƪ\!vpavV[6C'4eC6;`x׌_lSHBa-0Z/{ C+r+G~?hdt^(Txa'Gl4'F=Ƃ8<Iax&(f"{6>8@CY<"r qlPsr D m0^$S99bWwBaOjDڀ
2_$UAPç(Bt,B2SOi$<2_l
ꥴm<>f
4H(}!o?$vP8N4z(OsAj ˕z }my
|F0oƅM򢴚Gh
nP
*& 8
3!8}b!&;D4-M4foQ u( Rj2tXLV/Ba$Kфʼ="C̛C&r*}/orM<̧)QQSҘ4C')/`~
-!)Gp^>fP5sh t0aSV(eH7P-C'MنI5{KBa)
@Ba( I)q%m,TXEm)s\ǰ!U?*x.RŰ;- H!p"@~A
z~J]hPF.aTaԠ1'L!ԡ80#PHE3jb^^fd/aEA	}%W-զU'C:0̀t$=L3/=ndqh
C PE0babI3BCf7[rppk0~V8%8F.^	HibC=qvmOڰ142(9	쬴pBEvVLj;p=΋<HzdPJOdMtP*|d-r"dO#r>,+KHgQ7DNVK|yGN&bQH4tݑ FݑnAh<#!<ݕ753s%MG23{%S~4>NNyd4yS~>x(e!2`DMw4!X}eGOtKLybo"8|cin/:H6	bн[H(U&J=b#ry9Ҕ/F^t'CoALIk1ټkj24 &Ĥh8)S?(m%=	37H\
Tpg	Q+Q13RYdB<	}CqzP@yx MGBҤGFY(E!};<4xB#!{QS^S$
@{oT7DB qGB8(qu}aP 1n*%d#|VrYD)DBJFBaiOՠF2H~ }k?OdS w6:*a:8jۥ -U/I/*l!5\R	7D4?@t
7?ZiՄM	HՄM&͍ Vͪ D¶ҡY0Z8Z 0gy63OOXf	pTMf
>ٙ@XR1u;<xq>( alwS^ L4ljjeGn $)ˈ|7Ii8me.yJ;lh0,C޻Bo#U]n4[)ky#8mo/;3rf:sv;wI	3F FL䎘3b !!Xb5Vn/^_D|+B:d PdMUP  >nR$ҽ̏
5i_ѭʌtSbZAWhLӊ&]aR53%r,>L@Fy̬m8kY< 4ڙ͜?=C3
:zGybOqAQ~o#mN $ktMՐ5#}f֎iE䙘	὚,#FXax^^*Zlz7%:M%-5K' 
3`;>Ҕ#lwܘY#MtXҩĂ>FΆR2RNx|"DhJcXvaDJw ?dflyR# gJ^CpUVPPNɞR1@mlzS7咟5d	_TJxk)ՂP>}E8[s4}-/m8|zϥT=uPQBSOdqW[HA_ة6iDUQQ?RJnDԦ>vA+p+F<u__FU=$qgg^SW?&\MO{6l_せnF<R]4n}[m>ݠ7ه*ZYg\UxaN-H&Z~6I3/DS?23ÍeIy"7xGLhq;ዧ~ Ŧp=k2C@t5Bg"-e1.3RYٵꩋyͤ".
eṸ1ɴSW?jcn/ϺcW"Sw0BRWT]o'L\flvcd~.GYA
A+zS3|`iNng9+h8S'XusK	5UdX(m~9DS9k^/hƈee7S
1
_Pw\?zeBFYr-2$#w7kGS#V	s'&P nRҙfYguFL&	T`fQ]$YnW-#}AuG̼lk|yjaJ&DDjUWGBK`QBD$a<[D]	<7eȷdd^{zXhuzQ7ЇdBx~PP`ZA+Kf'FߞxCv`i=^n<qe<H@
>|!*ěG,71oƗu=4%Sx@HzuG/wϻ=	HNUYiot ?;np!sS2g#|8m8"&u[8|^".ۅՅ܊
\n,<u.x=]d-ś)rzPo廊7E<u.YPA8p|Yݲ"w7ڤS7NXrn|Aqᩛv7?-TLB/Cm2ꩋuA@JFZʖ9D9I|S7
ܭg3Vu7k˾eh|BW ,w=^+w7ӱ.U_.uԞqw|(F_a[xk97zJ	=(y.ݨ/k&[:R/Оzs{,5uPF"酆:XC)=@J|I)3-R>]E	@)0uO{.~MCݠy[Ay	FVPPlvHyB$O]:|E
%CG4F!4#%d>G,)0Ґ[eJNAӛ7euSP2SsdjƳCtq\Hfc2LN`<e.խ&$rPu-d!֝UХe#䫢=u9PjIVwШ+=u`Zb,O.8amRrbdF*una)D/01#حn=U,<uV?`g,^#փ"P``}Չ-h;ܛD(Y鞉Tr*5
Ba	
JPPlB̄2FQ䉑œCq!h	kBY	Fՙ3V@=e_pMCX@iVI4_I8Y)eJ&+Me	R($u*B6KlkݰA\zoxQ>K~nǼdftu(
5{D=uhQE
]T?Y|	}ş?}.?9{IOgx6#ߜ|m[D\"ē.2Bu(W=8N/d4}|9yo3q'.?8uip7ÑF ף?(ͼL7cD'fjp=>*λ|U5^,N+r	y{4t]j ೪{Tut節ߙqdQZFTE@
a
bq9N	^9>ܿO'!P=|ZU|êɌU5xbLL9 :Фt&ݦ춦k@g}=k_]6Sr:a<v_4Cƺ2O'NhGmd3{j_yz=zYgbܝ\7"ϣ%Į3=nQ(E3*dӌtP;fwf3<F:;0:No_4M>7L$2ju\'Ʀӌ}Ct8	_"uZe7c]vgzцhu׳tΚ.l8Ei3)Jd$C3)*bXؤh8W]N:ΚIdaP~Lbh#˨i&,¢h6(rJeQ-h( uҢ.~3
o.;P~56S]hffK:~?7S]<h!9jfxwy3lxF_qg1̕YX	UTI
{w&ethj`jQ<2gŃ2c4A%'؃8Dg]zKGf5)azLhPR1qR*ܦw[~ y'yKh>Lo}
ܡz
ep֡|
2,GgLZL&:Hb zRIOϻwS$`;_<?s1]P*
􊰁A*fABw/ (Ð%ziK7	4;ͧ6=NlY28eMWr67MoX,zڸR nTbnCz0*d5`= c%=\`
e%RLB^JVZ`\(-wTE!ڃ!.wMa",-ae尓;z0>,r	E.aWr\n%䲷[zYIN?pw'8$O@׭i
ZC{G!xrwx刂1*7בtϮg\c&_!]<r_N#k
t(=h()@mk 4W
 5ps9
 ubAwvA!P~A!|A0uE#|ғ%_0ECUAS4uE |]C%_}ZuK"+hA *4SP|C9)h,QG#aNo(/MJwp>.M=eB!=ݳl:.fq\%,
osz*2L:o(LbA;Z%}7 'Axv#Rz0BO}sO3bOͣjPPQk*ʁE9gﮰ@tQaqq<<{1=^,d5һņ{M)ncSzpNf1?SLkwz@>'
'..I)U{Bv$oB`Ox0b0
( 
@Uq/ЧW?a>aP
Xz;Ǳ)BMиhQT9KDwz{@k ?i=0\ KB%`@6FZz"Goa`cjOJ3 Q_%V|WVp9+z&=\^6JRQ`s _Y٘*6Dk53K4xLUV)40J
1>(pc&pmA&12^

tug_cԎsz׀8hyOԡ}hw Yz׷@ 6zط@#Xz-뫦=&%W~^sO/ h:sX}Kh>Mn:θC*;č֠;.{Obۃ>ԫ ^-L:=N"<Ǹο7g6;y4Xlyp9]^
\@nkfOM^jz=u.=?W<b0jn֎On=B]}w3^'}w3!L׽>}l/'xigE.ƃT%ܝ@Q}5AB|#nEH"<oƃ{7$ibۆk{e_	qѽD%QFy(~8+A]	]T@/ﺗ'SShNRz%MáEK
÷gL)wD;Frvʻ;ր#8k
R6,θa?ӳhϺ	wr=МM柕BS&~.q=iLe&mO%?S(3tPyͱl7 
bϗ8XeI#>p+ȸ~^=H?B
8%T~ZqPC#Ԓ^a9s+ҁo2+ցﰖﱮ+ށ8#~?pp_ppÁpppTS]@s
T8@$=
=$9?D1Hw8xܯ
*p`9<$@9`|1ΗBnV-4_!$;!^lLXDKbK)GxsY>;Tz*)"; K V*-L	<OAVdZ%qav"ݜև>rIɑ _aihF0G
/|\r|J ӎ],G"NnۣvA@ޜق`
R<pY\;8"cq a&oƁY.jS5p}jũApF*0;kPap'>pM(+H:pȄ6,)YwI1&q9"d 70C6[܉Qe
X!$eޡuHJ=ԉr'{_!p-H2ClF)7T!;DM*HeAIFCNYbRf5RR5HJUuzLFq.dF,J-pIM.6ll7êh:ʈ7êpd:t1BHRdU`d	!E&w.*Gf(99C!h(󜡐r	KNM\L~{0Whs{0hs{b )v_ch/;ph !
+q)%q8|BpWh X-kݢ2BzK*t:u1;(sa 	:\3-:ܢѠ.eryuN
	-:+4,t2h]XeChA\20Whisֆ0hqsKV.
K
bpA, .I)D%hDgh\sKI4\{Kb8Rgv>Ȍ4
s)ф+.]팭L]9Y/[䜺*$'[FgĹ4TeNVsHdm]L'=V:9URʩY]a%FA|DUb<^"SG'uKUjrA,-8:5+mt1d`с̱J.Ps\Z%rh;R+&G
ʥW,)+9E8409YJ:	!'Ig8ba#ϥaN Iq<)fKKߔ݋.]Vh<+:=ٺ٠sD҂ޡJi:I^;4Q`uU)1V,GPH2m8TaQ\R:,PKF鰐C7U-gROXsfi_ͧL?~[pDR]:*}2tu2"V%
Il>p6w)
J]܀D38ϥR+5uMWK{eڪKeKe[KUP64aޔfü*=Ir(*yraBɖ*aWеK[ݫg\]"ReaJ{
r9u+i	n]fvItUjb;fGj&-|֝u<{qG,uVsHpʲbdf8fɆ~Cfwz4Y:h!ԴON
P쓝b:EJ锐ҡWsnZ|AB
P'a7˧U	)OnSRաlYCfV--m8l8tl8TlvH584lMr
UhMkh>q{;le вRءb+a}ʿF6SJ&k׷_)y8f/D>1j僬(=a偳˔Ʌc:+յCNg¡(	<Ƀd-OIG&.xNudNVNvaH`wiBdb霚],}թNd9Rؕ<r]Z{!'Z3J-4}ﻔCN.KY\|W߻Ň..K#y
&#2'Kt'91z
&t'ysI&.n\yW,LE3]^.lkA)ٳ;Yu9IR˩ޑN.Wd^K IdfT"p7l=ͭ]]4${ygƻF;2segdXiÒLԀ܈܄T܀܈~fM65dNnɆ
saswlhx4r+6 xָ1[hʺ"pmkû%L0^1|
!pm+׮ok\hlMsEcu#2\_#;ev=]ȃ˨ ypvhXLG$/.gCh*bَ Y @PMCPBPBP	zPPq~P}PiAPAP@PMEPaEPuEP苉EP苝EPꋱEP+넠FWVA¯Z-#Z- ZZZZ}u_YN5*j~e
 Q	AX+ӄFWa@R5 e֬EXPfa͂, Y-5\kVd,Ȃ!YCXf% aB u Y(5Rkd,h?YcfAÚ5:vkZ!Y(f],2%k!Y#(fłk Y7iXnhQ8L֬/pHY8u{fiXze--<-)9B
knkr
݂@5	s.fW,Uuˊ.l5zuBy~uK98
r@- <[-!zX\n~m0+K)yRj
x=f]5]V[ri8S5˂t\N6],	J4k:& Pt,5YkXװf@G`a% 5 >k:xk:|6gFOF#@j4q;QBN kvƃwO,VQsl;дݩFϧ __
_O^NO^NoInG:tzP$86S@6H6j551MDlC$0*LHDH	PR!/3wꋹ*͑:0ȋƖ8<Xԕ7<Q̝m.빳"K 3w	Ee_F~`H~d@f~`H~d04+o$sg"K ZK(4,n6BhCmGHlh7MBn9B|CܒòJFW=-\'	Uq\Jg*]8*qTHq#K72EV(^LcuHA#:4n31Uq٣*iclTnb~ZeBY" sDl+x
8"qSШĕYc| #n~Ji%v(F|]|1 r$qjQIVAӲI*J'>Z(r2hC;vjp@{2kcz|nJcC,)|BfS>![yn
͸ao_C*#\=X͈4Ɩ~ر2[*3XPIJ2EiYzPaT(R*"ʫHbKUd1P*RUd1Х[K"#ԛ"恛ۭb{Tv/)"{Lm7":jbߞSx#ʔ3U@PAE K,N`"wdǬ8%٦@e;MBm
Mڳ?=1sިyBغfn5sSaeUOzaeUwaeUⱭwEb[OĶΩA1 t5DUN~&(ꝚrW~֩_+z'	c˂+'m+f\Q:+
'^-<ղc?qET	uS=(WN?+qE:PtYϨtP~GYzha\f 6p*OtcuVQ:mepN[%o&4r+tP!) !R@d-3]]l)	rtP:q)2#1&jGRWGBYuXG"]uhkӇvCRڶTtTÇQo F>FU7p,U^{*?U^ѹqpe8W$2&񺑸ʀKt*/ÉLNGR_wyPBo:|)XԖZp.p9&m(\%Zp]PM,Uq'OȖ8eTXMR-= 1dP!Y
AbMR	-V\DKtAzҽQIky.Q[S,cxYo)TUU]_1ƬvcXQy-TteވLl5vVM(:\ZNl9gbkǹҷ[9Εغq[x,"Ɩ2Bq\ lqU6hk7\缚Ml8ت1SCg[;fC}ҍق^WufI]:|qu2'M2iFTn"9-$+$}$UQ] S~7I઒=*l&iU&	\U$$JDٙUZTUW"_Ub;DJ,pUJn3ql劖
\UD|ULt*$y5ɪB[*#QVU1ZEcu(J֡ kŵ~M;] I
&\ DxQڨ
"rt")Hr65b)XV_NmT
)h6Ï]u0^(Z1D
m>ݶLz+S/v&&q&LZb`*Qy˪eoT	ʙU	Θ:Ɋj8L,g cO>T~ʲwIAY6l
yW[ݞA4CTAphN1E`쩋2i
I}'ɄtrKZih[Jø:׀'UV\JǺ GobdSٺ#ؾ54(tr"Na8NzL%5eyKW{.خfTBlWw9^ơ?Q?vOAvGcl7z:\#XX	JOlUHyI-M
N-98\KЈdUZKڨRϑNr
IB\akLAQpyN]	Q3gl
FuWtT	sV	r9g+*V
	,F(Dְ[<5i ad=чHG5;##*qFG͸x>*(2K̾SyfILֶ&:+`"'N$9TEs(5J',M !'CJ7|<~ȬC(Z|`hE"DHz@Tzj3u=\*>
)Y:Jp8d8쪶LϙvJl-P(vJYlMP(eݶ,@9i@Z*neي05Gv<gH+	$lۖ>DfpBԀV`+`+j7*bt	ȯ-vHEO,Hʯ4JY$[@Z(*dVΠX'%Fyjןִ}v$CP)P/28ݾF(/Kzǽr~^-wqz=rW<:w΅9+Vuqwf6ԫ6Z5_+(%v"mC%#yi9Kj1,u39JͪEf~g,V
x
5U!8v@UFvYpNpV_h4*O;!38r.&5͍F$NA%n\Zd a8Qgߥb{@lyY=#Nq
1]N̀ T̷[TFfjps.tp^j8cCmOjXέcT/7]s,݌)bc@Hzt5Wk~풻4FHj$9Gn=kҍ>tMEY?tKB[f,Nrr&2ٷ-ڒk[%%aÔ~dEUDWph?]|3r4)zh)RR]$DBIƎ֡;چ*oh}`ֺʢ`Y`>'đ6 g3!0W֧0-)KJ+KTO{~yzQ^T
ԑU}\n+>:ӇWѻn>C2rKcZU綢|?/.dgV}5Vi
/g54nit=Uq,p|jV99v![!渘%C1eKSD,AEq=nq=[O&)A2;SUy$^*ѳeHK.p{)oUq^U#sՑDVAgʢlplY"s1<yLdZ֟mcDl+|9&&IF2if5 fr Y?#NXrm؁ϐH*DdqJ'>W? YxZy	EPbË6	]3U)d.t8' K8bcdێV۝)1xJUv7/c|16wk|u)멓p໔
z 8#(#Q(#Q8#D9	1D	gdV>wWe
C|B3'G.zz\;'&pb.t|ND4nԆ⤎&ũ~YMоH蠎8.Q-+8luV-\f9~ok<pAai:*W))8=zϡb&x2x\[
2ia+BaA;0B+۱v,"X<FH:TUpjlMYw&MHv?PR1&J-Xړߍ%nTv|2R|_EࠎTÊ1:'v䰚@urXV8>bu|Zgj}TU+_^XFlH9&gW-Z	VU);ݷJb ~]E/ŗJxw(P|m_1鶯cZ*>Tg1 .V賔~h_pƇJK ,sME!ʅM*t39B	WCuZLsiMYM@$q՟_)HNC*J(2Rl3PN (Bt7~lVHzEMVdYdU&
HVqE `!@9
W
q9
WK"LT24ي`KMVH-UdOqL*\
~)N*"A;I{J$3|\ftW=|Pb ]բ{LDU#Wi	Ŵ3IRA cCVGO'%G!&	zw?{Zn9_<.ߚ8ϗ*?ѸamI-~ZbӾ5}0+IF!X%K,L(0z	
QC5Kgզa|TJMTC:vsln6v=7F?|M߫
޾<ӟ_n\7@-Z*ND%R)A)!<ۻ~mP*u8R, ="XG3##l,B`0OKyܞfUĥR)8lI
]=6RV83QxA
}9
vݿe9l8f8/o~ӧaN\19Brt?#}3W39gzT~cc?p&{%1\~cN7&;S1
I$i$$joL<ߘxG~cSSUJ]%L=w7ƴoL;z0ƤSnK=r[j"ĔR!յFH V;.17%/1q▂ӠN ` ȮobWH%Cf&U41ǪI(VOJx8;O̱dc鋋s#u(7OsJ8uqg'_eSw~=t;Ik]Cw$_~m藚WTpIRdo
7"qHw2Pr3[UFsk_AL$oނ$Hl$Qh3Om><1b:5@k1Q#䆧^R΢,F!1M=G,	GUU,w[gufu!J4nP`V{B0
gץc{ݏ?q<Axmݟ
$:6/WϿ
K$&%@z^
$;6
OyO!>ȯB8'}=FB>=ׯ;o~y=cC<՞8j'Ͽz<*֯WOG8N/GMDs*Eҏt+h]o?8pA"gj1Y_~P
WݻkA!P8B~5'q?OEE }xH32<?b?/O5|ٹ%r[@]7X/,]Oaqej%(f_A=TvY!b<.A[TjKH&zqOgo|[=@D'`,7B9[$:i_<,ujЪ@<95Phk%~=Qeqq  [PahaPj+"b^֧ׅZ|\WEW*ʀ&Qܹ݊.a)4M,^E..#ssDES%48A(Q$$pi^2n۰.~|yDmUpDՂr3h@cdHe>C=Br[/<Tqmu>iZqz."UO԰Z@:f<"]VS G(nABu(6v m"]HpDY!qQqh+ja.b"u28t1pXJ\z8B5XyAwTI1\Zj^_A8)i^a&a!AE_o1d$0?vG~uWckj<xt\?9o/F'njc^x~!Ou&s|9/ЄLwW;=꺡<&G{- 9)b\8J] 㢿itm$}/׋73?xǕNcThr=ej
9)H8.|=;l%wLVGY퉂D3!i
J}rCK_y(/r(w;Of_du~p-s|oEo=]]NVOtJs*ʀ**"DC)v'ZNZRH;TbXQ0^ՑQ?7Q?8g";Chaw!NI\TZJGb/kğWGh#ZS(P֗|p^qI9 {R1B 9io`KE3~N7_Lt;b݃^pbTyxV5 *+ȸ4]dH.+j:~l)w߯/ǏjYOVAr{i)ix\^W5VUV0&ki,7a(@PO  )&jEB_a[{v;pY܃Ly"&+G64Ŋ0kO7n[J?y	}V<
O0D=Qka
!֧͋(
D_LQDI\jcU(h3[ZWǪH7ݰ6cU'}eF+Xjy ~i+Zu8ZIaUU~|ƞ*z$Nh G.ADAU

'jaꚪL񴠶⼲#nik ='LЄfjסx-:-*/od640셖Ω*if j$!P&&H+MMUaL3_, lf^W	
4`fؾV*#WGkf(hʓ3SErxYsl3S#(j+?' b4{,pGfJ<K
bad#SEk.{,Y<Z|62^WX2
CoVOOĘ=euVP|x<Uj:SEeUyM ռ^ˢu9lM=hl&"th2S:PLH~&s:KݍbLDgX3&0@RcR-08> 28YoQhA1s2RL\b-q
=^衐O4f%%A(lL~[W=8l,&11ݒCGeӣG"&nÁ|=JIK}=\qqm՘׊ 0
e"
0ii`ީsQy`(ݩG3ax~Kw/rR_m
Cr_Ji<
A9QTzpGHj!HgyPˇcVCsSg:|/sյ-,|F5nhKڕOkB}V =Ra;xձV8ad[X3bB5>~Q}69
%wPV(dbP&j0Sgd2va}bVڄ/Zٟg'PERq	cSD~@GNژ=O#Wxc,SV4,/eֳXC)(<REPS|jk0-03e;O@.) BN{Fp\m@_F5rc|]-?S tA
U|?@GoVm+Cs*{if4fƊӯ4rdF{i[*ZWՂۻk<05ЃRTP[&f î-1O= 1ǃ5a	_F%TΐKf|,q"OIɓeu |Z^d]`">~<↛{Wǡ},4X=ж2u,ġ3&~/y_RIt{	MƼDIp
Ł7Gc^ly'WK*=I
dGRI#5pH'XAv&pmI>ȶ$-It Kep7#KO	N6!ߪ}sp|%P3e0}*/hᫌ@'<doGODi-xY>ˮ7: @epriO5?ɾZ6ɡ6ٱt,ƫrL9ouXjX![ާNؐnvy._v&#B^dW$e+]$+Cvee(7dPlӗMBq?(P6Π8cg"{Le'Pl'NO6˶8g(}dOl3]=q'Lv6{'NO6,_.O6&٠cW({sdg]ɱ+8vǮL$lӓ]7q&@v68#`g,jLdWMl34BCmSgƙs&P횉;R;f>;&Tm;S{bR/
&nO}ЀU*Ӄ=U{hOT՞全==TSu{z
pjGKܙRi,xjJڬR@6
*DjoJړR@(djJI੭&jI_R@6M%jOIPR@v 9
͜b͜bV^hfyjےz2TPVBUn_pst6j' >=[٥|jzz@ӄq}0bL߬><᩾9R"=cj$ԓxw|^\җPe&ShTqY&E/p1~Pw{2ѳlFH_˓_P H^p7ˬ-n+VFTEnwuۥuu!-?4s`JͬuÖHFnQ!'_f "22j$WɰbB;)neŐ2o:@GVě
8mz0"EM_j7TYA@7}=42y݉ئVkҾ9Z"t#XS4gK.'Knё_B.ڰ++7(.P|˧c3*Xkfb#1Ujx@N&SXq~N<]N|+gO7:8D]2u9t	g.ڬk;}m-}
Y=!j@H0=&QfvQT1١>ۭ,cAPsܡu.|Xty׽\Y?l_JYxUYt&bWٷWn2Xpw3fAf)ڽW4EǭY RQzYFr9U#[A"l	sz|՛)cXnٹ-"x^p
DLVb)}LKp]<Hu
BȽ~M7౥.	5B!'N'Je_بLȓKUE"SEA01n?Cm*}dL|-BASJg8W%4ݻwKv~aHsg}r&ha+qⶍ
x}\>r{F>Fr )L/bd#o\>gXN^LT6 `EOӶ;<|"s/V2XKTF3(xA~%&Xǵ|En%esz)lvSΎO'"mEs=ly,2_xny(aKCuw˱VcG'[*={FEd:k
"X(UG!MMm"w+I@>i |ڱWgGipRdgY*NGhQ2RMo+	Zn} X
 xY0d},|v^8i^i,{s1_\GK{"&re,p;Z}b&P&ӻ_aCbd76{G<3ƙ8ye=O$(Te}i0̋yN>lw_8Rjbl׫P04e0k賸x82WI\ J̌HС0)eZ"gtOϪޔ|^p?Eٙ^+&N`,+9Ztv@;h
(bBLjoX>Wtx{Kxar Ce/#J[>w.~+HKd>rrGTaK5_Z!dM`_Uqڃ@?$ڴAT HgKɩAr_IS-/§=7'ޞylQ-Q.ujyhsy݉TmW,+LGs댔y?I喧/nnxFt7)
dAT)
Pe,nRgЭEeQq`!I-U(m&9̄bc$b.@>=ӧΌ~+[.庐07T弝f$fz\8>8԰@u45F"IDz$"J"HD3
]ㇰ_
Bє^ɂPe;dXJ)% '5ˢlzOzEgVQC)EqNG"[5DԐL]1Вqf<O9bu&'e~6/^=\|ZrEMHC9m7Ey
ʡ;
}N:rNm?<We!vy Z嚁d˗1)èkdIp&05px);ITv
z\Ƹ_^Y<>ZH_ao$Ww[P
P
vJ>5XU܈Nך
譢hjd8h82G7J3UIg'"ȊѸ@㡫L(`vd r&!"A>oE'Dl_FT
6.3×tеu_>Mh:ͬOt	Ke\>c^qM\ĭL\ĭL\/eH7qd-=-l8qlଁ[]B`8YljKeIżʻp#wn9$wbҽ,0Avڜ1r|iy#TEn
\_g/:yςtg>>(/}{X҇r6
#kE)<Mh>!Ѥۿw?ۭ|kWϻhOL-mt4~@w d®ZΠ;,̆1!i#;
o$3Y.XtJC߽k\v^u4;MOzP %!:@|!IPMZK6^/~b	VwpJş@a;*J'(w<MxeJW҆nc?Fzq@l~X/#ƻwFS\O)&J(+/~
d	͓Ex 8}ЇoǥRI)~r_iy?A=rpk[?b5~{=#d<*'Wg)<|wѠSoZ GF+B_XWY(B!p{iЬCxc2J~}r<6.Y*ҠPޙAIQS)4c?1RLS Eu>@"GĴpາʙ 	CJF&:rBffzk*N2qzy(/;Л4}sRnt9Yy܉OНҥ=^-1CfHͪ
Rů0 Eɔ|HK1_Iцب+Z|9&h_bijɝ;6̿1?:6}3i/:_N歛nk/jٵ{7Kٵ	Z0z8-XF\Hã|K<u|tL~u(Px:b9O<f2/FCK{Ϗ7{>2C3gTOrs;o;sM0FE!vZܧ0Q,_!P  )š5ƞ$>$ؘ0`borDyG Kwhb> s?	ŐZ=Ѣ3d-)C~C_TK6b5fc$)qaPayr'DOaXBa*|5EAx߀j}ډ$ʸV;c(
Q4*o*/beawH27@sK$96Rw;!LA-H4 (ʓS4+M҆*Y@Ѫwᦍڸ=R qZR `7oט&2c|>5{,((?Pc"+,@
_y1t q}rrF$	I@#p;^3	)VEAH_dA1
 "
O([w4b) gfwA(F|Y?a>ƽryrA!edkzz=,o@9&UDh<.Vo/ŔJ
@ׄD'EYgҰCH@>P1ɘmGCϗс=2C߆ ɱm-٢&{~}	+C|u@h,/"*' ktC"V!\\R	H⠫QI{
=OP	Q4ќ$!ú|=vS9ESUq3y
#k^K~z9P-N(F?2C2T&sp,?_>M}&4S1$=.~VmR#DaYd]F}2y5m&q9Bډ2gOAS%>*_C[7'Sңjf7?AA1{lOh Ҙ<#vıXXr|X#_**(ϨeAmGP/Zjk':7ݝ覔=؈QtwmL`Bl=YqK|5Ϯl].fj0vlߙVtjD>g`f1=8v2^f؍JC	@6sӫ=_&twF;?ݗ=1E~rldc3)f+!8~_K`߰ǊR_2,OW'i?xyCIfաZRKWظN\b T?-8MtD7EI[m^&f)l2jOV0mWbUb<<65Lq}edgg-5HBM'?pi\U~JP?綁fw<b4<c63ЖYA1Ig`}bʅ%#O5VƲ3$74}<6`ͦ߮o'&$-^qzz9nY?x-]=}Q¡5-OXPm		N9ZڣB1S$='Ik#{:ZqTQ?օBՃ >W$dcLP,gq$?|¢23s4d$JXZe  V3}ņƷq[</h>a)M┎4<}UX+gP	KTINoc4sPIuŋWţ'fUeuIkta2*s{МCրvYQ7UF70н\H94s
Ӌw}EI8ܣ+J?r+J}EIzG_QG)(r9j ~}EiPs!<O(MW2U{e(e-}EYP=ze7G_9a"# d \'xJ+; kGI~S~(e'͕ ы,Uıx,/n*s)i-!'z
ӁS;;ػt7 2-"1[A=@*^BZ%(4Oni8 .06A\8>?*iǟZ+L2
*hR?zcǿ!ZkmǟY3IߟG 
&ys,ZtiM}VAs|۵K;X5v
qIH]4q|"bRz'  C|y'	((??X@ElSO(/Y(8E'縓u @I~z2+)rWFF9sAXÀ~a&LT_ʑ';n=Oqig?ع^~@;=GVsvN+S)|-R.s7a#qSLy³!Icu$*XD!1ß@<
H(TK)?ӣL&945'gK^t_PC4`yq֚~IE8x!v~D 'Pjh?4pso
<ҏ99t\u){+op`ԡJiR&74@F	B@MnK52HSE<u2qڌ6:Za2Pew~uo:}?}>{k}AjE{sk3O.8;N|{iq8\T
MM9n縅IoJt&I=N9QLUvvasyU-LFIajr"lZ-vQ90yMWJP.dbζrszX UI
zN|D`G&;h	O'N/'Q?ED!z!T7+Dk;2"[h	ԒB^yb0'~	)f;%55\茇Nq\)܏!
o׏!h{3V}"FM%|N_rxn2^|p`ߪuY̪;l9w{jTm'/2!JNyF)	Èb߅0["Q327꿹Uidr!5zS߀cme ez_PqsEp~3}pAfc5\?4%3^/''Mɦָ2dln5!fXFI݌tX^r49Lt
s̟lm"rΙSVZS5Z&eԏQ~9e*Op]Bرg6n1NG-ĳl]?C{kL>+%4=sg
S_FPcY%|,kIZҩ!'Q䰓|I#N&}]]WW+.1DȌ9k$'a'kcgk_Fd8PSӞᚊ?H&0|OܚV PH|&S@Z~S fT9)ީFrQtBSB2aT(OdH[H4SX0F\@4ӭYein5\#]4ZqN	T_Fh~Ts7ReXR?7GQG^ˌ9ϛsgqW@X>bf>)9v1d|̉ l 9X.rCGך;Ɓۖ.PFڴ*.S
+w%:
r.Y	8آ0%D$n2=K !1ѥ(yQ9Θ&OlV^)e|N5eS]3'`U-u)
4n,sƃy
)M$ݿ[w&yriDQG5d9wc+{ӛLsMY(Ln@fw|H()w+HQtS0
Y)X.-ګx@B
̞R!Hv7ܪ֐rzAd9XƂT"t/k௩:P?l7Dҝ+<obC;פː%""vHѱt3F3J6T !J o5w-YPQH4JK)Tv8?o4Y)bFR`meZJ%\_]@ϗ-Zw-(Ç0jJo[e98\P趚n+|~qͲn+.m5>w<o&&j5F2.>B]mr8	ÙT+0u#1m,-+s;%p)fz@ΈMDs!.wR$/QW"ң_h.b>c#+ZF9'^69_	'9
f]v ~magreE/OXQ[,=0;w;gXr\dLd}XǡD˖d$
H4; !R2ut2M>ͅ<ҕ26ָ5	jVНS8u̪[,@_x%g]"ىdES
} $Uekݣ6ګ[&Ҹ[@o}Ã8s>sq)͈,@^'%&w쑸Jʱ&ǄXY ~Z4^9/58)%<Cӥ0jjp,F+.m纙-HE
[%\rG`3?q4Gխk@=~~I^	IxÀ1k1;14]t~}y㭝q1kɤ;XA4:_$Hg.?ĵ4?w֖UÍD`ۼM`^P&|SΝ6z#	˟/0)f$07WXNF.Hg>rNGdBMmdzB
c1,nhw)6ǅvapt7d~[Md־5]Wq@ę:9S,Y]9%QZ첂ߙ&d16J?QD$A:ftA|u9=uS#hl/q.L{aF	eHKƔq[F\]]((8]=J1	RKVŭolG
a;7oBJ/ŉt[au0oڹnrTi`;)>guJB}*WVLxSmOK;-͟޶ژu2AF]k6jNR9N>aIA]d{T!_YGE`5
XI~ÀZ;ܙt>p^bv?}Asa΍ifL_lNv4GҼM/O\fAjU^ȵ&{#NG1@/Px/#Pe/P꿜@2_V_FuX6{x5WEiÃ\^ @WAG
-
Mv\N`eJ{&Wʤld+Xм̕.xUF,qݐ0WC\7!်ᴌ%:˔ҲsdLΑ1xiɹ23-:Wd1isefZnLlWt*c@hn,J<_Z̟jwFBgg),lFA!o 39EVkG:.~~ Ƣ߫%[yogWkMcWpdۍnH!Z*f#zpzO17R3U(uuΈjP8n0$qY3Q?(Н햶8'D<F	:\!Ӊ".)kc @3=]J0ь'\VKW=7R|2YA_,m}{b&|76~ <>djj/'9Y"w>w>&_~~Yܕ%?2Wb#WMV7ZׅrҞ_2?-ĝ?קwNӾG[n7iJ$2.Ҕh܈o/'1-OB5A?`ZK9jBs]/~3%o$Zwָp.3SX8}v_aΗqwok8Gu-`zS(2"uI߆?ۜOą3WI2|,Ezd*@D(B&HMB7 Uv 0iL2(f`tF`6hx5XEǙ+X+^ʢc,:ʢL+oeʢlYYf0Ė~ Dx~lfx:J3FuMzQw.q>EɱKrmP嬾;f5$scH77!%5[5!ш#Q
h'JC	O'XDw'P#A=g0e8!{Gca_B`ƀ^kWB3/ÁѝL6I9)BYg]/#rz$J~:'<sTTo 4udam+#K3X">ڻ
!(a. 	[ʴX#̥Jü A"(7^@sNP!A2W$@nPJ-	U%51iMزQ-sɮ~X1E"B-{wMM=$(&.${.bNcjȵ;U26sgIbU673%qP̝&L'STSDL( $qu3!KؘT^`J4=n䅑ӏkst.,pY;7wdu d8N'=iqt/z\'DO!禌b&  NslեޝQSqKQ,C$Aqt&EQHs<:;1`)8k[_o{
G&Ըq	stog:7EbF3oL9֥׈nHg^ȝ6՛JM/kT_T~qHE0
.{oGEԀO<(/JBp TD1uw.gLeAy>ћM+qNbAyQM>M*SIwE$1L%!B	
"#ryKQ\qL"R5VFuU$Ov!;OS ֦-i0BQݏt I9)ϊu;̨gl7njs*_!F:-ұd0VK6eNݢ6orTRIl[?9/o,YPVV+()|I?X6D8QWS|M1^WstDj (w̔ƄZ+-W@P	KcuTYoqToyozOGM|6a"`|+=<i hvKa2'hq4u׾.	mOu4yэmZ#m巌jz{@UnUNU)8;+]wr+jJ:ow5q8cZc%\(rmL!/޹ᩘq-M(A&3c*r֊rH{_YPB|_dOf7u<aI}Ա FUSf0Q!<r nekjleFj
*p/
|>,ׂ(wtD9ˠ̐ECa)@g
xkk{@A
uR+`~)~}W`J_{K]yQH^}ڕPګ/o5:룿߷Yř"sA3-u,%٘ ֚:7&qR86j[uƑ^d$VHn&)i07v:?00|Ǭw%p~UW_ڌ;<(eǱLyX߈Uꆟ)]1q.tYwq~Q0cãQ0ؔr1ٚN܍qiBc5RM[/\ꤍkJw;IPSdf]76`"ǱT$Pez}\MgS^P{.	̄U-:abkܢYx߲?\[AjtYXfVϴsfHLzo2»O;5^<N<n:,eγd} י!_^!\nÝnMƌgK񓛔]Tdl/?u/Oj#N`}h)Z`'1Jl_EFkey9] 滼f2d]RQ
Vii	(Y!\unPk?fߐc+nbq^x48㴯ǮcGq8;qt}9Xn ]tǮz{5{5v1DsfmSQй|o( qdWܘL6?)4]-Iץkљʨf{٩CeR^ΦQϪ(֞![xXCp
n]Cݖwrn}7*uq,3;ӊg[pu`z<kIJ-*7&RZ*NҲ7Vt
]ަƮ"g~
ZlGWUpuw0kC\On:Ŝ?3*Qsܽ3ŋBLFIJB|$x['!@`TAJ,Ջ:)QDtTE+NJLRYV^_d j
TCع0G(
XvœCv7[1rg[B]3XvB6lQ_0CITy_jO3Hsg3[ݹn}K?֕P^dY[.í񚖀)u&B1*$, $q(,[v!(GZ}.u.Kw&P8į|?=
; >d 캒qpaXqgcwZ0v Sq.7 G8t|44kMiSuƆLn
uϝUΝaktgtLe^vO$-+ߢS/I.7w^f%	QⓒQæ+y@˱+tF\
Gw/<QdOXF3lbnU<nԒAx_KҬl0<ʇf."<w7:]V~nE[px(b*Je%l(#BW ;ѕw*Ñ<"Htve)(e*7:G+)1ܵeL-#QuXVTY"lʬÆ"b_8PK+
\Ad&j5uNhCQ_Ʊ/B%n"=1le|ynoBsT	[2n((^6SeƨΎjcW:YcbI=(<m?:y4+;9wc^e/׿樲2l%*
hl%U◥DE~~Dq9:2#Vyʐۂwsxѭy1OS߈Q_WW));N7ĎKfO|S}}IQ(,ZvJIn\tʐ^T3KrE2:9	 w&J14;v&5妰,W	|`mgF.9n5$aOL1u1R	hHa:'@10Z7ck}f,)-Estp+B"1B(1]\}p慅bdL_vz#w;tP,u1EM"weo2pAGήݡcaG.Io0L3blhmƌu;(Da7t[	
Lm(mm4%4Һ|>3g&ǫthPaWdN*Bl0w`;}3\wDAR_9jf˜PI]2Z.;S]6gaDw&3|7Α,x.<yA㞥xw 
^VAtL#Sv: ^]293	~Neip,!.?LSA	ӭGTҷ1qеQbgViX	oF?[uQΤee2g&7:|cM*XyWoq4Pאq'ǥ8
-t71p.30M ܧAc)-7GY~p)l\oT\9p6NtsD|}`Wn*|cDW/H"_=/^7uq
/>>A(w3a(@@Lnp~}qEWjxW hcȏ%
:1O_]W92nRmmT5Хp 
3>$ >o@k亮\T"2\
N8ʄLQ4ixzTK*¸Iğ
c1tGc2Ϸ@*p5/C|{8XIDxuI2(Z`X	|)BJ!W;Wv׍uDdi
E8$V¾N.fOr<.z՗QOUs].Ak-_㵲B4"DЄ	$:^˓%9	3MNx71AD/	*!zGP)JxQr\1Ͳ&;{4IW@W͔֢TtrH͞-;rY<W7g_JHs@hs*>Jcǥgw}y
y(
S=/㧥.AM?~NxW=1kݐ/y*ASN&Rgx3JU'0x'̈́!o>,SFBsAMgf
jF)ƌ?փ7a̙aj09:P9C7Y֤xG𼈯
H^ae _lY9@zKO-!ݵ@n!OT5nݰ.V0X[i* 2:q	ܺ](vOA
Aş6lSJgA&5vax]WuzTiGjm:krlVf-eKA+{s2Sն՚۴..ۮH^Sw<PeЎ#`.
_kp-ʃE YW<,;{)y-sƔe9:?z4njYu㹧!+JL|]zWg<z
RyMx!A}D
v _\%h'QI)وyjWP(2Է=7ɔ\y_.40m"*HM7Ci5f~OY_;%<1RJSD3Jkg.uGԢ_݌_^1I/23]lmK>,(1{Q(I">=<)Cod)h݂*z]i)-j:Aю>%-T]$.9g"%>OzDhaA/!j9BvDw%D0FWv:F
{!3Gs߄o?JubƼo'&w|>o6֐H
1:&-kh:k_VзVY
D%#f۾}RFU,6k*	9^ww;N"oYD߁?N0Nh!A[U Ds#EV#ZTI:SZ.y#o
:Y;ҢJ8ϛw&Z^5Yw=S!}n4%<L7-ްi0Zu^nrx!FVoiySo1_hR_E'm?kv"[Q~pҎ7F})yb67Y?b_O :)5ȊI|":cM49~(ђ͈M~ΏoQa>1畧~SZSީ)ǈ9V'OzL?Q)'"Ӊדw}S#7{=cr)Ѱ}
ͳ&ZO?~L}?8Tm6oVD}7%	 [xF3; Ǽ/Ox 7FZڿEOxo0y#DY,;Dk]"Dx/;.U ~_akn7
MOv\:i<oEY|]-_.mѳ8e</7ϝd;7ϝ&M/m)?D~$2Wu;4U$ng. i{
SO*O%#2*do;~u&f
)OP{*xM|Fw;_4Uƚ~˯_5~Midݦ5lg>8djS릕HSFBkq
t{)_yϙ\:f|]gxUM{̠L2sȨf'}o;L~;>g[Klq4:֛nɶ׶#\lحmͶmmwbqW.ݼ~L׼j!aX q=RvMtl5<s:D"mL+Т|"ObJUWtmxLgM2=ٞ!nt%zH< s!"%tէ:AGX]-$q.!mNk*%ic=i&z ^ ䷍ R" zHw+Ɔrv9WTBûݔE$U;r!?S(ZKWK#k	΅5^ԾxQZEk_5uĤ^maо=QhޏBX볧
1ԠAeowlcUJ>bnopy7oeq3 >Y}Y],πn?mJȔ2D@l%SOL5	xD^"h>?nU1=>c3!D
y؟i."K?oLΏ(Lyn$hC1
*m?Wdxjէ7SӍ#O-ԼeR*oG'MQƸhgY~higROk)o(hJe3yg39f<Yy{ͤξ(Xoxi72=গL3Xu<flm:o,怱5_5to}cWƮ|O0O1~k~xD'jZe䂭V3M;PƎv3~I7L7υ7vʼ#<<
nl-\&cjޝۣy46gl<K;#>M}*##g4iOjOjOjOn2*oݫ5ﳦуїL]bzX_3WvcuEDكDrP3D+?@ι:bυf%z\ ѻ̅':=>#ȁCڡ]\b$^WZa=^x!VQcafXj/h)SOڋ5}"S;D2_$`<t'F!FAw&܉w0cS3)ӔVdBD5PݍZa5^lb`{vc91Xc.~X!c9_1(7]n{vyvcВ
Z}ai㋗I}nxÚx[h[aq	G
ph%cG3:/GM9/9/^&Bo|C?3X:W*oEDѫUZ^{LޕajZ	ZZz@kwW}Dy+ΘYQ#5_~|YoהkM5q۫y5J[3yV[6ݦLyk5U	=cJ/&ڧӦsKZ)V6d>ezJTcu3su'QGuڷtNǏ:?^Ѽ54[gV:u&o}_.M5+vYJ]Ryfî7+vYJ`V:a7!L
&oBSUԯqyG=o_SF7y5fm|m^CY&oxlM4kQyyGs3heoͫh~U0--ooR[?m3y[;ZKԼu_k_kyGͫh}R96y?oUM}ԯ2yۮ2hmM
Ln1hԼ7ߘO1yo0khv۵kmۮ]ov۵vmj_;&:SNo;:c[hy_g_Y
;7i^;wiK۠o
6666666666664z9X*%u.uI]Kz]R뒺^HI^ ɛz/#
S7m޼c,;6mgѬ4cVgxlݴoӳߦӚM
osyL6gmcsݬ|PYLjY:m֩c3vY:m֩-nQ}l8vƱ[35آ
S7ԭ꯶ڪjڎڎڎڎڎڎڎڎ{ܣ{z=moGmG=:8أ`=:nSۦ}lg;\hޱmXyjNnS;ݮv]tv/H龠#]t:H׫#]t:4zrzUj9j9Sz5W6U{Ejuju\ju\ju\ju\ju\Mާ6y}jMޯ6yjMޯ_m~&W_m~>>9}fӈOǨ>t1ббббwLvܡ:1~;tmǎi޳}o%S?4Yj[;JvnNM{P5z}P5z}P5z}P5z}PղA^|eӻ3uoۥ.ͻ9SޮL]v6uˮsfi{E!#o7J~qyXFkD֯@FdkD֯YFdI˗4Zٙkd_]/*<
C*<
R={H+LއuaU~V={Xa*U~V=ۭ۽5UǙGtyDǙGtyDǙGtyDǙGtyDǙGԋ>#:<g=sLܮ&G]ޣk{tMzI5=&
ͫ#w4Θi˯ho@7P
T~*߀o@7P
Oa:M}Qa<yǣyǣ=:bLǴ]e>>V:=:=:=:=:Z=VhWc½fn{U{U{Oռ'tFO,	e='tβYĪVX	>3'qr+OJ哺_ǺǺKǺ6}z~c4?ѽ?Aȟ /wB$ɝqG)_ӵ9O)
Du~5_<X?<4|'ύ<O|gў_po+bD ZI?x?x=?EdlsD~)}q?9sK]q*1FǝC2k;l?'Byǈ ]|У:Ȝ==)fI1ܓb[ݓb'쯯rO_=)f+g0;єo/Bܭz1}}`C;w& ;C{[G!!sˈΞ\=|:.7Qw	Yq&d~r>02U긓9Ð8w=
"=_zT"2_A/9W`Wzm4YS[YS[ϹJoqϕ:swg>owg>o?{J~u{~=i~ɳbd	 \w0$3#</0wwŏ{	6=fu{ByMxSHkh%z|y2u?fR/
?}ݯ3sҤLZAJQ~Eqs:yxs'/lE+2g+=^0S>sTy墳;果O9mĜboV7LOMy?Uv29NwwF>wgqڜ mng4"s~k<?6}32#[-̈?oey7f	:eY7s>J7q*Y%_Q"j;%I;&>	yFk9+&UtƠV3<EU$xHlmҧ~!j9ysrzпKy"'DNEP_i~ߠHH4-Я
zc
e~]eI|I]7fͰ&Jϻ9FKW>%3D.z&dZm%wL2|M&h
Db9WI~($r^H$ԏIMn'H#DҢ
"Dbs~M$^"y`h+>$fG}:'"J)VԣWQV4h}+': DR/hb!c&+$Bpd~y3!x1SN+:謢s+袢K}RQ4IQ"<EMW4CQY
STDQ2E*U)VTAQA$>K${$IWD"~J*VCtXybW~hXybMyĆ>MktJyb9o*OJ2+q&V	DӔ'v5(_yψ|gѿ\9Oy8Ty8I\Y<h{Dʃ.HW4n!	Qq2hbVDOy"(9!OtTyR7ʓ~UEtFyX]Et^yo-%ûʃoi&)g聯S%<|DT<Y-D1=a
%NT<|KAT<xQnER^j$UjDԯ<tU~|sK4<RǷQi%:򰻹GeSn}]- k7Gy *7<F4]ys/,;'B>bO˔{5U)OzTD
<HjQYJ Rw5nyHX>HjQYZVw5Nu"Rw]5!"WDײ]Wk-seD/(l?lX&R
l?8pP֫D4B/_F/_'R-=*u"y<A/[zTl$l|#"ؑ=E/M"eE/1plM8=Yd?ӓM;Go2#&'R7D&] R7d.ǸxM
Ɉh-"GMlbң&xM5
"GMDo	W,=jB6ң&L!R7Yz/?|<a*)ң&"=juDH0HQ'R7EzԄDHSGMAo	eMQ7EzԄ|"S0'4)ң0n"ښHk
W֜_:a5eMOtZ4ș:ER43ǉ0Q0lD9ΔP$r"ySNqtZEXh#:y2yE8'8^;(>V#1OD𶴍ٌr'f܄{+aޛ#IY+P@t9'΁8Q+Pb́`́fOɁsh9޴-18.Vj|l"x"s`>" 7"D1"?ϿrYQ!EC+:訢aE(:"	L8"	L8Gg9:љp΄st&"	{u&LWg<VՙWg௨΄:Lث3a΄:+ҙWg^	{u&ՙWg^	{kLث3a΄:LۭGQ>E;+ڭh@^EW4"?ڟWϫUyj^?ڟWϫUyj^?ڟYy/՞\\YGU6+J^+1j:R_nYUUUU˅UUU-rrrrrrrrrrSnEjjjjcY˅1UUU˅1FYV.b)\wG5"߿a|<q
{<oGW'_DG>&Н{cA+[!L,o>%z{&=Fg9BOz|BO{"Bϐ%=	=O|zS|}}pCEBxJ{nzS*gӞOyRB{<$׳SNGZW
=`M:Dcgz=9$,9\|UEnׄxJ^}IyzĳZQOO'<k$>`d<'<-@wЗPWp(84
MGCc
bTh4*C%`2h0T
P4j!&P3H謧]y!Uh3<pσ6å>
m=BGClt>Mz
Zڌx$lh3%΃"ӠH>,r|f$9Gb䜂#!sI/x^z^+jz<:sTZAiut:FH}!c{tQ=yA¥h6C6mBolt+5V~co5@o,ƺXIO
~c|hЇZ#aZ.,C-Zm}Tnp/^z/AGZ(BE}x{qn}xh(4^4@EǉO@E'͢Sħ%>G]أ$>H|tڟ{z{tڟ{ڟ{4?,aYs܋K̳!D!ymoyy]E\7۠r
w~;糷&~Aw⽷Dۺ%}rOn}:5uBk6@Gơ[)hnh>❤솾n ..^}Rq8F</.jH.n$Iv`aA>Y Ő҂rhogA!}H~^H~ $ AC!Ð#(sR]X
{a5ZX&>>	_4	_
/ʃM#͇_PybH{Q	i)꿨XT	/"8,JRkEƢ>hjNpuW2:*)<K|W	UR>URTRFZ~TR>UBi@%fIY*J#O [r 6yv["m7m﵂Bť[
[&=BzԺE01X%ZZmvn6
m6	[m	k%tX%:%m%6Zk	An#BZ,τBiN^YKsF&[8IBKO[3ȭ,9KzAyҋx{??45$4i^z:"tx8	%%cϑ'`}[EUu)>亣;˹j;	&g#Ǽ֝B;;KBKre
J
l![yBL1OYgi}Nh%=kнL'<`9v՝ì1O@wzg^ **y`e٤yiIQr,XY쭬ZJZf}Ih9zu_!!r,:ʎZV",@%D/wY]pDN6%5+Y.
ُY-+sNf^be:(K8A|SO!=sP.ӄ^kmY"c=/t%^l1BPۻ@s,Hn)1k-η=B}%yq)q-o\\/n@+Q	gq^ҝ'OB&>CzQiE/Y t:4^>/{g@><D#-&
K[^erXN~\{I s
c#|89A|49g넞r_EK,]⁾L"'/uKغ%ln	[[-)aRj-q>3)n^rNnK[2-ąKXa.a{K%lw	ۻ%ؒs%tJ[-e떲uKٺlRn)[ci)piibibi>K#RKٮlRk)۵Zv-e%/=˚CyPeHvqeyHg,+ 
bH%w2r*
.........t[-]Ɩ.cKegǄw-;[{^`9QfI[Eފ<i3ɇ*fAn%h]XQTC>U4@VqҔBK%JVli[ZVli[ZV\`.n˩rjs9\Nm.6S˩rjs91rty)quBhj
5\~t9rO.c53aң`uϟ%=gA+-p*=ֿQ9ͺ }}}}}}}OElu%[]VWՕlu%[]VWՕlue-1m%ߞ,te9C%PI9TRC%PI9TCkP(%SITR2L%%SITR2
Jf
+QڊY(m#@V0Yd#@V0Y`b8O J\bi,=}%=}{
+WWWW+h+h+h+h+h+X?h%^B_E/]E/]EWQUx5^EWQUxU%3
DUUYN-ˡޫ*꽊zޫ*꽪S5j}VHQKUuU4"3{Z "Ji6y֟(h%z%z%۸m\6dW+ƕlJZ
k*jD+kH~Wā+>ەPە-l%h+Z2^yx5WQ>UV =IzھsmU"U>^UtU)枫ʱ涪j\jڶ8N AժU{ej-sU%gؖӪ3
eZu	[m樱zqPl5?z:||xճWWȏ#-!xu9i[qb5秫S䳯f_[;}m5jkmӭ>`W$>d]I.-c3ȿhkU[)7fzI!jBCgcyBK2r
Ԥo%mAjfٺjfm2fU$>d@-#o1BOV_!xM^XΚM) bMyBK1uZb8)M/꿆_aװkX5
kX7=H|&g5Y*k.k'刿vŘϮm@m&*}֏Dv"d&>9=i("fe_rjJ 
oVv!֪k=!У5'0FԜ$=ל&>gzq{%ת F6Q4_ eZ`R<䔑SA\ѿZK춶8	Swc!>w~}:ԽL;hCȪ[0Ǭ=Mz־R(M<atUmcSǉ)n^\6P/t(Faτ">mz<F֠e}Bbav8kYyN~xঔU)ԃ0~Th?r5& ݋2E4[6ď5jj'`ZL'au9kw^<X`45O:8@ͳ\f9!rJ06Z%B06WXk- 
>hy'K<|AuC<O5B_k>Mr8h\F-kph\s5Za-I>X~K627Ҷ[Ֆ҇1e'] FZai">Lza>-#'d}N>gy9/Z٨Ok:
NGL:uh'YP~k1o-Ai(TSE\MZKB
[YZbND\vнXjG߾W-LA[z:dZۨ	[Ӷh-l`Kz=z{
Z~rv3@^rXo	=hhuF\Xz3ǈG`9'OY2ҭ?m!Vwן^z<EnD{tA[>,
}!ym|+-mxjՒ@܂8q8leAmv'go;H:vQ0L_l;v
6Β8Kj,6xqΒ\s*θ:θ:θ:θ:θ:θ:θ:8Wx\s'8Wx\s'8Wx\!r!=^?^?IS|isWFd{6ƚB|C9lL3v9lL3[bvΌ	h=EMKGt/]`MӅb9ν+ۇq%t1K	e_h?iW=eH~3DgBϑs^%]-"95^òe1	vdzɳNۄN'g,;.#q*ĖYjG9vZ[fq)Ih-ڱx)tm^ǎ\?d&tȖ09Gl:2Jvs̖QcĖ89'O2v0b8cXqct9)˺ b|%XﬆvA-){ws7e^ly:"<<<k<
&>F9IO','&Y2ÉpNІm8ANІm8р݁D7};!D?^d-qE$VO!>gKL8\/
kBY:x%
XPU
)3Q
=6p
/l|a8_0E
CÐaH{"
'l8	p,?gr\p	,ʳ滦>]Q.z.z.z.z.z.z.z®f]IWtŉՍx'kϚBy!F_Qr		ӈ
t1>麄I$<"Y&}xo2D\$(93ar/?A &JMR#Eɣ,~EJ1vi9i`{biRډnK" ~7EὩ!7uMRǬ|#kR',ҩ">:ԳL6u޺km̻BצSxצ8pZe3i1|fl.%\
lř
-q>ws?y7y :ڼzqp RC#3֣6sgyi_n;Qn)uK7OtWX2K"$Z2ttE#uB"Կ89'"9!KxK>ӖYe'B=n[Az[FP-1=-g-ӽB[=ēIșϭ%e}LD3Cć`^(1Ϣ[Z\$tH=1FܓՉ{Y~i׿]p/\=0F3Hz{$$v9JscA=8Ez i<S 	#-A{JIrS:4=qh'?ߓ"l~$b*l{NB{N{.2fmOBۖ^m޸m:w+n"6rVLZBZJʹ϶ډeynQ̶AdAd!rcsQam$=cID,dKO[g	޵z,9
4``{oߞpr{7q1ǷD~8' #v>+3fw}}`7` /6b!F
5Š!
!"*bĨA@R BDjEڇҖ<FM[Җ(sݝ3ۿ1,3{f| 
@{Ԉp>Z#a#SUE	Gk9H
Ʊ&G,5ǚPk*k@c5K4(eAlsA"Ao+!Dq-.%PDo"R&ȯ>_
lQh<	y8`.΁ŹF_Ơ/cga!'Z-5eG+ou-/9tx+&|nF|ލ{ FC`a[F֦UY͆66{0|^[-Fm1Ȭ-R=PNÅ>\l`a	>__A{xez0W3^#1Ky1H<<rLGۺGA>sG!U9G EGKt-9 2%[ZrJchy,9d>)Xhy,<
п4>	r	DDDH~}bd>Q	t	\ZAR,Q,duv&,o)Ks_$O>OgL'[8iT4|gD
0,X<U6OG y:O杧_iz:5-i||z	O/yкlA֚Q@
/[a
(s2sV!ĲM( v!أ-kgyˎbx=	Xb	y&> \yLgB{`AHiyfy.//|FL$A`8X~cq˳泹bZDxgqX+~v/̛6ⳇGX~GYF]KXe_|]6>ºt]֨t]8_9+ZR7ՍqMueUWQua-ZX}[OuVU:\gkUFqnJº}0+;[aXwuVw+_S+J)j+̯
W,DZD@~Ve*H{@
Xь-(h1|+WWBO2ծĞee`ܻr>xeu>WBC\^Ycѕh(+@YZC>eA'@{.s\JgM4y*(o9l7(mߌoZ]z$<\|o@J Va
G׫&_hߟU{@Ϊ6@,ڂΆ:zƮsyjp|_]a1ԣեwAyj粺%T\K`Dz)uЪ^9wCޭzZfwA~q=au#|tqB!<_
J#0uTzۮ[ yl?q|>	i&RiMF&k`Էfm5%}M	%}
~I_3	NTUkf*(kpmaBh3`^kbR{*H5k!F|ngK[FkC*iYsFYk1<Ihmk-mm6ض6ϸmJk?]i}Y6['!eąԵuid!b!
(r0uA<0aXѺbKuc0ujuzgs>(o@)ZWel]ɺ=`2n?f`xrv![#/( ^~`X^؏D0q}if>Bk닡/1NLoAz,1ףې=DFQF0L/aav
&s¬
X}5!9%2g@գE}]sndac0l@YUaVꏆY+Z,[7dY!;RcC>s,>a9ѧeۀ+-06Lf4*0\a
#l`FCs,<YwXan]!0ea!*Xbi_^K?cR,l{	R=aֻa6{[Xx$/nF3a\a1%KcllvRìxi	>/Ű.1t+0}rUÃ!2?`IelW4@6?<,,pb,a5 ߪ1%.p-8ml0=7OB54B3Yx<FO; ߉`aVhsBl,зYC(Tb|.R|a30\am3$t-b=Yx
Fvf/ w_s¬z97ZB&(u/7s#>=0+W/	`5X4|60kQ[1<'7p">|
wk
,\V
3K'TeBe,
~|S<HM⾩vS)1_a4ta	m&lXZM8ٴ1<ަM'gSLq
M^cW`]D
1,qR-+VA/B_Yy#lF|n罰>|nrFYas.bs1,Vw0h7BF aZ
#c#8<e"}9(͸Cj&V7]Y<s6/׃Wb!͇-oyֹ--8-%R
n2[&-AΖ2T-dK oA	`ϖ%FӾ
cزe>em)KŖ["~z-#/[܍ !d6̫Xa0k(D
ň]C)"ca5&&
eV;P2HC#Ӱ{}Ǿ%@sƿ__qG1x%@'au?ƭ葻b|cץes*7E񯸞B[O45u6mZ
wn[1\2Wx~FSNmCm{`\m/\mۇ~D9A/m;wmz{6>s)c0 U^3VPWa_
/0^&D1
s{`<}/ۛ9H"}QA/ߘ-ߘ
s@rc.}kEcX7RϦ`!+3P_̓ʫjD&B
z+BrZDꠥzu/ah];b ~فv@洞5K`d2X3Q$;6ɎM ;فwp?m׃<-fLv|qLvǿ@Ixi{gF;`ӂ5P6v@j;qN3
v`~;a`g>cXzk!ipU(D=;::;ε氳7b؀zv5M~Ωٰ
jʅ9HSv17C6s1ԝ0
mr҄߼j1\!z84p1i?US3 Ś3z<6x5@pFqџ	}_C"f!bAx-ضex-}@k9V!VRDƀk{kg@M
Wf^jkwZkM.+Zv\@Rx(ɻ&`XwUC^jܮ&	w?]0lmYn]tQ^7;utE_B8
<
:_
BGg}BF/0z.+!^s	x~Hq}>p-΄+
6'\kaG0~m|0|[a&nO>3|Z	xfKgJw@#Y q:@q]=b*Fp|9ڷ&|n)}0rEReDqHhɣbDň#ZA|Ű-RHF+aڦ+rRX4qGY܈aوa{1l{f"
y ^b*CR2CZϸZj27U2i@_/1<<)qz#z	jy>͐̼~|^?=-C4͛]5wj!p~%'c%pRN{nq9}8g)'L7vܝ3kJe圩.rq3}i$8;woμ깕f{sϙ[5yʼysyZ];z7gfOƫ*oNũZ9gc3Jy2tisΙ}p31/θk/$^֚q:v8',p^s|]8ɺ'zyu$3
-m</؛$I/<c؅S:`Dnl\xEiF/Π&M9Gddw]CګsOS䘙xβ7q{xŅqA<gw99Z(is		{z<,9I|܍|j}]>ƙe	
xڵ7N<ۅlo9loj<Uۛ漉'q{AhsL#gxzCPNNitYe~H<4r>]8sʙC
<YSN9̹kv
P
)̽9lso%x[J<tI}e|܋gqcQ<]݅n$Ƈx"[C<ݽm!ݶ.O~wǇx&+'>>]9!#mx¼7Z<{ޛ3O9I6_)x.7F<1ߛ3,S9}oV<ߛ9GON 9n oN5S	xs&Mޜx7g1NYxsFooίo_~ON$7'xsΌs7ܶ)=ntyDm`i?cp߃=UsTO
&'1#[31=B4	o[1s(TxsZcp7,'1w^xs6oΠܓamDn
oNyn:IpMޜcp7g_n{?9FoΧ1+ē
K3IiE9cp7,Omf'c͹-7xsMЌR(ޜܗnnRVOܾee)7xs]._9bp37awK3I{f9
Q3I})wxsҌRl9GbpӍ7܁I1f64xsJcp7ܵy4xs<ޜcps7%:j?i~9=@ޜcpC75*ɍ}Cޜo&"o3vԌYwԌ'^#oNen<,]Hޜܒ|\kJޜ1Nncrg|G3I$78ysX}dd'o'ʏfQ;9bp7;͹=7Rys]Uy1qttZ7,~+o]/dO{G';]fcp+z1˓	5.1˛sVn\{9l,W\Z<yPd^Ǽ9Scp3fywn3<{:p̏N}YrWC">&)9twTe26@]ߗ?ѐvR=mOq i
IrPфid%lPsPα i4rl9՝!'d!Y9gb%8CVùq)Lmp74sPa\ZG\cz;H8S8~9`s]fS34rl騔S896tVʩgFA9ݔrXmʮ/r%9#]చ="/LrS_e٭
|Kp!ZxV¤/֜Ӧ9`C.KP>uN=Pwz$˘1">7!s9~	Il9ʙ5mTLI^F7cQE3	X䊱H*~YySΛY2٭q";&Z	7~yUJ6mڅō3rۘ ~&}x0aiJB|;1BEJyњZ_tQSb>΅32ȩj8,S˖.
-d&^߷/j8?S:9YfhƞO-3RooZ
ep-3U85IWYAkev9ɋe߳.
g?i82fk8eޜe4i8]-8
'2kCe.FYfF
252iW{,seWՖYi:K57-2]2הlܠ)n5rnyX1&/9ASwGN˼I'7eެ)Y;v&
;Z-42'jiǕ9@y2'kO2=X].פaG
M9]_2ghږ3F[rxy&hٚ4<ϖYɯ쾌I쩖9WYlVkڟ-nM[F˼GSO;zά_g-s&߻ZrehՅTZf.Xke>i7QM9Zkko|B3&:2ԤaWVy2lg4ӵ2G-N#'eԤs&s[|ϙ8S8:]MF9̭63enӴ?.xuc}^t8{=n[#zFNw6}UFuo;tr
,2֝՝}eFٸ}M]*hҧ;)?=`e#M]ϭ{,B){c3/MawFZe3ƛn"6WFA9r0NFA9CrFA9Õr8'4rlʹT)TȈh3R%}܄)᠜+rd\rF)\85rlʹF)g$hsRd)ȱ9(gRl)ȱ9(fgFA9rV1NFA9J9J#栜J9o0BrnW	,ȱ9(gRScsP\cScsP|&4xq8(^٭csP"gFA9r0rTϹfJ簛rWcsPSJ93qr+!rlY~9,ԵVi3996+qhQ%8r٤S8964(drrfq964)41NFA9r~8r(|8rtdZo9S84rlٯsȱ9(Y)9٤csP]ӤcsPAgFA9Tr:~'[A9r3!rZrGpPNR/GpP3,xt8sT)皘p8(GsRxk89c+4rl91isR%'h$7d9sʉ(l`ͼ᠜4fMȱ9('K%sƙ-K)gTk̬rrrx,kFA9J9{gFA91.i[A9}r896Wa}\rrf1f᠜|6Ҭ9S8-96Sac,A9J9b-栜"gŌv5"rr.Qvrl)Qam];A9J9KGFpP-Y#r8(gR;ScsP0f᠜*99GFpPNRN>hֈʩPʹq4kDPʹq4kDT*`A9UJ91f᠜j0NFA9TrY#r8(gR@Ѭ9Sv5"rjr3f᠜%J9O0A9Kr^eA9˔rX_NFpPNJNw3Hzq8(gRιYq8(G}0hʩWa}J{A91fOGpPrѬ8\giQHa2o9(z6fO)Yq8(gRs1#wL~ؓյA/pz|'fd$=D z4Ō.lN9?s(}.o6$IEOxNDLE·VoxқfN/xG+we<Kù2~4څ32pY4;-%Kyqj8-PgVOO8*~w:K̠aW]f{%hfDD
;O֛kf|3q4+B|hfDMG3w8('q43zrҕr~3RJr27%t_LCyw2%#l=/9N	EkRw'k6Hߤe9Σ9La-@*
U<b%eQv|3A9k0e",OKTK|Jكq9i/3noNg7דs@cO&(p>gl/diⵎqr9_2N6FNybEΙqVz>32i멚se2i8s,ΞYڽXk$9('#bF;Z,=KΝeIW1wb$9FU,b-*
g{s^<ۻυ}8Q#]P2.yszY_ʼswNr͛;|,{{46[ѲXsGIjOY
9gaspX֘d,:.PIJG)yetǂ9l~qF7ed{svVcݗi8l~ѣF)\Vih8LYi[H3J,g'A9$8m>MpPΊgǧhcb?]z9%$էo%gfAELK(y1|Iqy9`Zsf1Gקq
yBJJ~EnOFtF2ge~|}%֨\S䠜ȩeyPtv"']Ծ<qrgK	L>A.1u8?WK	;L[yɡs\pfv}&'9o%Vw4<(!G`'A9?Qk-D3Ĩ␂,Sp
ɜ}]`O~+K]<C᭥I ;]FMBH OAH
B~JQJF	r&A	2 dA&YKy &'2!%*ҍ  eY@g2A9BS2%e#G	rAE ?&{AL$!2	@ A> ݩ$	Br0H	2 U!rD&/AH:e$ "p\MR6*	 OdAvG!|RFIkNE:iIN'q:i!ȓYO%-!"z	rAn&i2 22:A	!A-#rAHߝIL2$9s1A#O	du%L%;Yd  W2ҮA."~Rl$e=k'c[	rLF:C)An#B"Wi%g2be-d%!6)QG!#t$pBzᎤ^tBYc N!ȹ!q4 !Nd5AHK۩EFC&A3VmL6i2ҙɼt^c!dNԙ ɜ	BZ.^t!.lt!)]HBwBz.?!Uv%yѕsDrN| d6*AȈ1҃tK#HO\@+	2 	AHԍ~Nwt'> !d}AHw' T{_.O_0$=uO2;Ifv=OFzhK	B^
E|/2'9H&=g{!1=Ԧ}ei<2##<R'sed M\@Z'm]@~9~HZHQf"A<"+]dlS@RL݃I!>JJj(
#0
'd&#%2r)Y]t m& mԈm22d
2RL\AJ^IV3"s
d&^	Y,
$[F&+W_L,%r-i2SJRǒX2rד!qBV
d>8wƓ\OVo$-Ȅ^2rDƙ7df2gB,3w+)uݭ7$ҮNHiȳSxu*+k"ԘAH4S S*H7(N#pM#餞N'w|O!g12Aig i#2rwerAH^"+H.&ɺl!ļAH=GV8I齋>5 d<{HwKd~/GAed!v'rY5w+3]$f{yhvfybvMcU2^MFkѵE[\s<4^lWylZȭpAїٰ rl6c AṋJj9ф54_dgnGTE/L>wȠ4x!Vy-{e& k8	js{EJ\r_fB״ZNpB_۞&3l{d	NXsa5ǩP|F۞yl{)88]mN9qڜxFIyzNNK)uڬ]|YbV]u9|Xq^uUqPir8r[l]CQ6sr&D[Wa[u
RsB#۬k]UmTJ>/up%89\|c'у|h9,eiiLMr3-y?sNI^!/*ym@xɜFxl:f{l*wxlH!Ǧ<xlH%A$cG	xlH#&<xlH#&xl
H#&xlrH) &xlH!c2xl
H#&xlrH) _c3?axlZFtp^PZ[[BfS%osLz(^CÔ3^å0ykʇ<e[y+|0=!#*hg90T
U~kpKNQ>8%)6Dڞp^Xrޖ3&3gy3$GE-49{6Sf]>tq9էͺХy:
vpc3OsT98ou
UzlӋOO9}{6-Pzl&]|*8ںڬk]Jxl.lxZ.gIޘ-7f4sxJ卙u9t$ĽG{cD828f''yf	<6$cGMDcG*	 &<LcGM	<6y$cGM	<6y$cS@M	<69$cCM	<69$cGMcS@M	<69$cCMz$<LlhFYd̏f}RTI2䟹YѰ	aV,9?̈́[Qg^{yWy	fX=>8i.,w;kj)8'ىgxޫs8/ޖsQ<>fCJOĹy|?{T>(uf]>tQf]G}3?YE:ު7]RsBzq[bJ[PӠV/?.ުxC۱>|^xu^|RA:

4g6jK	"}Aa]<՟u]{2w2vIo3]{hgEm"%[JM<l;<l/ iXI{3pN=49,s8ةIx&SW@O]	<uy$I	<uy xH#	<uy$SGO]	<uy$SGO]	<u$SCO]	<u9$SCO]	<uy$1	<u$SCO]	<u9$;7a✭ZhD/bsE𿬏kqOoO?=vLTΏMu3F%''S,Q 1U}S
/StǶR>
ö|p
J_ng\f)ms&2j{<82|p\.p(}wO<a*)'2Nv˖*u
je>t)/j<.5't	En";B3LA9g+5Qm!}2Hݽͺ|˳{C[uu9njN()w_0b]<*<Q߮.gh?˭r{/xM~Û 
+y$ i213pfN5RYJ8gl$])̐9]gB	X̝8/N"~<	H'#	H%A$OG		H'#0~<	H'#0~	H'#0~	sH', 0~	H'!c2	H'#0~	sH', _Oxy7Ùpcz	=UF=8J]
I
wڣͲY༕@8Wyg9!9F5;dj:wE'o3ǶBe,yzpoǱTY.I
[L
G8.Ol9$5.8{9_D&ǉDeLIy[ڜj9׵99t5orxU(5MʫߚWI:O>R?qUbMʫZWX_79Njg&ois{F3؟ikקZj1eG1?BsqQoG8yӻ$;ݜ&nH;z\vd+w$ҿ>tmRjI<.5'c+w|c'1m8wv̈ΎuIT;;KNgWUIXJH"	v%H+G]	<2 $"x$ؕ#	v%H+G]	<J`Wx$ؕ#	v%H+G]	J`W$ؕ!	v%H+C&d$ؕ  	v%pH+A@]	J+aGޕI2⨴+NU~WBS%'>a?s+`x>mm	5rkl<{\y. :ql?|+B'J!>xWpӓEڪ*I8l]mC68]yj\nz%sbr)N7s6"6g6;og)uڬ+nf]{|Rr`'oqrrUcsFSQkۖRrB+]ކqN ?6\f{VQpo\me$i6H.o$x
Hm#!ކ<2 !TdAoC	
y !ކ<xHm#!ކ<xHm!ކ<xrHm( !ކxrHm( !ކ29&#ކ<xrHm( !ކ
%<LloC^.ؖg;ކ
*q?wgn5VkLpu	ߞHɷh#%p>9]7G%?%9vۏ^!mx$pn'*©"24OKFS")ʒ^NQ'"C9^DN	SB8	g:u:)&ˉ#;tu!peHRFN\I8
p)Ȝs}}X9ţgL$p{Q\1A\A_X\IJRD8$K8dUi2C3p	g9@8/f!yqQ9J8'dNIS2p_%~&݄S\|G8G8Q!up6/plD$YՖz,""!~DN=CI}"g7Co99Gd9rJrJrJL#rE9I䜔r/g4Gl#g Mpt
~g4&c8"6myp%H5Zl30伸אq5d]9É+e{)v̹v.A8?&R615cjdسdNu%㺱d\7?c$g1g	ƒ,Yud<wNL'r9]$s.sƑx; snX s"ٞސL49C?p.%K	Ǔ{<Ǔ{B̙PH8d5aN%~,kSnj/˹)pb#<!a3p9^7񺩑CK8dGQssDfK"YͥD$¹pn'3pY߸7s\bȜ[H;vin!>O8s34/	}y_L$kIyXM8	mO1D3.[se9%˹?ӟ@ r
2%nNr&I$/gyDyDiW'9CD8"H;H4Id>MΖ9I;gRYN8d^9ɤ|T9ey\8
 i09OI^~PSBx9A|%˙z,g*Ie9S9d93 )"))s\SAք+^N8Yδx۟/xUM"\	H?G<2 \$"sy$؟#	H?G<`.sy$؟#\	
H?G`.s$؟!\	H?C&d$؟+ \	rH?W@M]rߓK<7'7k_/Gr`~$ɘ,"B<7 1(6DI.Q̏!#_+̿#a\w̿kzHY=.$6)HiכU_$8*y"~B	'`~&sKgr+a~&1/乃yR'd/'1yR''IKrRw/	"\//%%FF̯yJFB;)΅HH
ˡ\wB[	"q<bE^ܛKߝ	ϴQطnЗdpPu9{;M`ן@sr_/}qN
K7طx\[RixjܤtJo$nGz(zúD.PSڇs>1X4N$#}firtSz45h26zkJHB嚂r5e:Q))0;N.[xE~quJUdÿ9 zN2FreC}0N5_6hQU
1r@9ɻؚP
|,! 2+ ݪ\~F7C癄?gV>8G]-}.?Gk/~ىcNJgB[6)_iI*~V8#S49N,7)r\q8JK$']еP_<8\.N֫D,a[](Qao$D%jL1wթq,Jqma_V!^~j
F_˝Slj~+"-Vd)^±WzZRxUxiV˃Xp&^Jx;\JxMoksH[/U[#x*c~AU\xs8߶-J!^_rmB.xsqN-W/[xqFs8E>/jO?^)Wq`&^귒OQ{.r{s"/h~k_>q,~͚x$O~x]_ĕ^_Y3]ry+9<xr6/r;Ǳc[&^
ZzGj\q,YXg[&^귒cӉ7]/wc!knyO/[xq=cdK9-lӏ8nm0r:^r/	Z׸jN+.r8.8-J/['x-yxsߣxJ!?[/wN(w/[BVu纍7<87#_/b@?K98KVUoG])Wq5\/[/npP%Y;ܛR/[mɯ}<8㶅y1mWċ3
85m$MoMlsh~ugK9\kfޮ@r6+]R9ulk~>.r8/.KV7f\q,[Oi~+s_{Q/mg4Vrr:Vir9}dΝN*|˝Xx^/őd(˝X^-|g&ίیu;\FM͚xiEƐ7q,2i[xH/[ߴxLǙܛլ
Lǐ\q,YӶP1Xȍg=5u!(o=o}i9_v8?3
\bʍ!ɿDXDҙ2TK%%u)wpym.7uyp2ζ9proŶHVrR4?.o?_k=&D69N?3r _Z0}AӲ(|z0:m /(IDU39}m∓7-dF!|o.B9=CLPō#t8rS.JbA>GYǝZuNއ=rf%sU'ks7.̍do+Bĳ-PQ7nVǃcsKk3'yi~R,Xm»8S	Z[Uxsi	<NӉFd)^\iڻQR[O9^d$3qJ/c!#m!S+nTɣ܉>Ze9+O8R,9篶zx]*h/N78eh9
{9<o:ֵIЕp=GW!\[כ>8{]\]${9.n-[׻>8ޭ[m_!\KMuqXJڱ Aő4*|ӢIg[yGq~8|?;ώVΫX -[!Bn0w%gF?}p!:Hp"<_nsK^פ4.}8ʸ$TuG==G{YdNō*.sUc+惓\GQܒLozNw!*<Ǳ2w駜:Sw}r}p.uMǃSipa)6[̻=8ޜ2IZU>$_!Ⰿs]-7:hmslԳH|K,Nc[Xx5u/f{FI˙QqDOc3%WYsxp).o$R,!5KLpH1wc397RYI1[|H^(ĂUv<8.Ll]
G.p)z_GƁ7.Z|&~cSHR%@9	]CR5Yp>=;qSRV$	d~975W&H(C.o˞2#ʹ*O_ȴ9IP]/9u+otwaXxpl]cٺ/pY)=y{nV	;8,&w2̠o[?6}(7tK,N÷n1HΜWBtq{+cwKҒPABxypU;+>8cJCrozQ!*S?76sʽ9_y__$;\IixxE}~eǱkǌ=|p	%`gJ]ZWC,ĢG/	/wIpy+4JL/wc!w:m0!m"e.z@!>romfN7'XSoL<yfxsN.'BjQ50/>w<x;zD *ɒv۞M'޴܏Ӯ䤱9_-~ɇ*H[ߨ%ؒg{yVKЏpDM[?~ί#\xpUgtw~%g<FE)^roNrMo|rX<8ޜ|p6p*;G
=gzGߎ<8,^]SomM<NIƴ\q,<>8*8=TyC^,Td-gO||O%}m=,y8ޏgV/[Ziċ
w;Ǳ۽hl?KBV=}'
kR9*sI_5R|p2d)^roN3
Nv M;k(|KptI9`߳Yܞ}eW,ng3Ol.~fw.!=y]\gwժյͺ>μE1m{V'sȺN*uV]պf)u%[+r]J]Y`+ԕ_Ar)*TJ$ks-5ͺ]-.ήRJ!_G4Em3]v^ԕli.'nTJ2uq_'MSgQJ|duyܖuTJ|>]JN}U/Nңc6)L_-c#,#:{c=l}dT{-v
#pbSix:df3`R;~'=1GSp}{k#ڕï۫jk|pV<烳BkWgiqמæ䃳Ajywo{ۺ}p4j]1.W49UksM"O#Iekw*n
>JN
?N<ĂJդf*Xȝ_u949*NS[CoT)qCm{>@wp8[m]Yō[.7yp]J]{9;5x]wi2rkʝ|ksVw+V&|ϸ%5979FFw.>8ق,)#x49Nx9KŵQA?G>8>8SɻB.~9KroNFH^\YN7'Vr.;gf\B<4Zȹܷ\RÝXȯ%12nIŭE%szW3f36fv̟`e3O}ŋnwǝU>AFsUxg0_&=gP؞!9!*S?^(roNJ:AzYb;ﭰϲ⃳gir;A/cW!)|W}~bq{3^]>8MW8EP?G{2UW#UOSp-~wyg{d/p}nAy{T)^GAuF;}puUGTўg_a#[wO5'-0%{)k8-fH7ݧ=/>C?;.o7ռ}&Of:
uK/|pF}/pT%*3G8z{zޏ.u|pt9Cvrc|rmso3y]U<8J'\~#*d'jw6Q#:1xޅK90N[B"߻m>w&VW\8#c--ˈ3,2K{6r>k3ǱEc}p=/.'F.g&Ysg6?ğON8_pnĉ|۞|Ηg!yt34c '/n{d6J}pf𹳀>ov_9\/˃̟h8\䃳^}?ql_X͏,8#9.֮M)j-C(Re\%ۭM3MS'6GU_\Z[lmV/L[0uC`-imwYt#_{yDI=1lzۨ{[x0ɵJo(%;oe>o9S,rl}3E8um{d%air3~3N08̃~^̣.ay-V=ZS94$Ǘ3)0swT<X|cǞJ{Gч=GWRG15jCv<2zD,fk!vfG߃vUο}p#Z<뒆~8ql׵{L='󔠋[J+q8*IIta;3ܲz)p^Y#o8b<8Y=}pzrTɞ<\qVd]3gN>.o
!9_H\GJ1?8ǉ5H3g29/?)Wq-ot3Mg[r<n0
1̶g[7_|nF`u$xKϏ}IBjGVI5Y}p*]GT9|q)pR$	r燌Gȝ#Za2%w [IO%g!N<"aBY؅Y¥zba+
P~#Us#Mb/
Aspt'mAse<!9=g+ e,NWqGs¿0N`a1Ykf9]3-La砓;k vz[uqr>%bygH}q)GSGJ˛,/=u6c) \kluJj"߁q
60l>n3lڴn%{^Q#BfY+=5|+ȯ5|+ZqVY9aVoEk.1`{EіA~ocrN90Ύxl>߅o*[F,lba!!߭[Qa%Ҳeqn,\F,գ
 /ia;]qQ6'u-tMUxmfz&c1-rsOn'
Pc99Z0N+cf6<{iȿ!jfU!ﳔ9ɋReyb0/+/ނ'wk僓დ'|n<8ʯ0ztl#~8|;ǱM0ȶ<SܮN_$E<mn"Ao7f
3SnKra\LʇvrmЪgt&|MOtыڟH<:_z>}^xqh'e,F!7M}M3KȨ`	G׼8;VcϿ}S=z>Uק'Ѥ#vBlSz.)søvF;tR^OT*P=QOg/N2Kgx]g0]ҙ~#2Z5.ɸw)!i*:xVlbnaVIfdOc
ʂBIȂ!jƽv.?}=1gY=z~N=/3ܑ"ao7_o;6	ɔ?scGp\|2ba&?gD~,i93˜1N_O8	pvN%W2gfD68g̹#[3pyy"9+SI^YE8	|*sfu9r
yp	YNY'r'rZeQ2g(s9s^y˲s;ʜ;9s*s˜ꉄ<B8	g9@8pޓ9w])sZB8/˄C07	 &e|3w/nwđYƀi`qDL,qT;ex˾ʩ ;]FMBH OAH(J.GEd$ܞ g$ #	r=An<NNk|"#R"r!AJRFy /dA~I#9%#QR6y wd	AH^D	cGHJ
Azd0A!DAR+SHKy 
AڝJڝ $SI: RE,'Ki"{*HZ&Ar	-'!e#~,"@AH;1AtzNڨtRIkNZ{$A {	BEzAH ^FgC	BZ gNf|HHf;Ewg~'@2Iy\LS/#Y]	2 S	BN;Y 򕌴A2 _n 	GiOZدVGPJ ?AZ	XY!cc"m5 s	0AH!EJAHHfI/<^#ĽCy d{y 'dS*Arr.AH;%H9A8ӣYMvj3	gy d$Mb}t&mfg2o< A83u&-@g2'g],)]H}B|R滐^OBF]I^t%!+Ӂ &MJ2b!. ғ JL"|<E"u#q)#I"H1A;tAI-1 !#dK-=%+=IOݓ̎{]^d,R>i{2ߋ@zIF-#1j>ĞsHL!o_GZ~=A-z@f<VFI[? _ο_Fm iq 2Dhy)σJWT-BFy`CH!0 JFhH<~Ik|1Y#*$+%dd~I\JVW.]'##H5	#H5b$up$Yrx)-Wp%WՌ\) dWB<K~+#ɖɊ5K	B\Kڄk)mƔd.<'d|}=Axu\'92r'$ǓI22DF7qMdw3YἙo!뙷' JJݭdfw
22c2RFZr2,'T2^Jʩ $5A"MTF*
M#+H9Ffdk:lb!Sn#cd0Afuڙ#BfAjdwAFҪW/#J,˳zl7sd61/BROjRz"Ow&?'ceCFzz/Kfv/=BfYH/$s=dt\VML_f<2*^3yAoXyj>sk&.9%|Wϛ|_/e#M0?d2 ?pwWiOronI.Q̏!#_+̿#a\w̿kzHY=.$6)HiכU_$8*y"~B	'`~&sKgr+a~0)Κ]BDe`ewɲ"#ea
H%GhfB|NGVzZ%$˺3V#(9NqrrNαtUwOE>'_NW׻_Uz[y_ci};$Nrއǹ(̧QMrZowb<!%#D_	3u:3!dӶ-n'7YK,v,vJCg~Αm-.ۺx:(֏|.CwQ:ޝnڇ]dkEuklާ݃b@,)}Hdk{K~95BsY`!6X{s}eu#!O#qB <sDLRem|nm\ݴIƧ\裍EHm3>OdmXX_찘K}.mX}R1j+ZhG<=9':j2@=~NתB^Qa1;؃@
rE_bt:S!a^Pqbpmvre.kwpx<"3xr^r?RU,w|\}!:rBlNc*qXov~.@9~%>]{gGVJIR?ڬf}JNrfDy!'Ž0'ȽEՊ6R^"=uS_a8ү)Lt{+e}Bqpn=BoWYgp'n=-4g*ի>FSbY
{)8~]@ǣ-AP~xzL#LZ
%?b_b{=rC'c;EީӛŭPfqA,?1IFb1{!+/)~ޕzL'sOLX9+G
Z}D,m#|lDAB\< O0
k5̮RA
>V9Ϸ³.r;[}8]0-SO%įQH}	O}nm~{dW7Vc>'!l~}_Ox'
į٩?<CewNUv\^rd] i8H*vc^֯>ukFR#)AJWp~Cu&:$c5!ؗ
=9*<CpnT+~᤼8InWƋǟrz8Nůe9NopOU8yfԇ]Hrٟ祝}ck9rq޹ QIsO< ⮜|1ůXǩWOHQZRӹ>jɕGO73Gq:өmC?ϭCQi2zTѳ0l/dsJkˉO*~᤼8 UΛ_a S?NaGſGjsR+38_g+C{'9Gao
㔸lY-G]Ah ,V==\6py;tW{	wqQpW/{GjsN\<Scz8nx
Oݬ!8(g$Vx5-#u^F]c!8K3̝)	zZfevLR_Kj1Sf0F: 5Ԛ3o@p~#Ex>"{㟔,lܡ&veQXJժruuׄ"$NO_'2[9c6Z7(}J%,ǕUr -O9W2S(N*Syx@#.!8%ѴsR=<v+5*Gdt\79c_w0ׯ7<K!8w(uIdaސ7q9:vZ!WEer**~s/eŇC!8¼G8gj'̩{0vսD.%D;[!b:=Nʓi
陶>r	S5#^TmpO;L~\/o9҆Bp~b:j/ *ï*#YH2}_`/br\)9|kqV֨q!8`Cg7>Ka|3<	X0sRm%'8Z,ޚ'ŉ_yLS)[FcfPp~9R?Oy39L["9!?؍ۮ+e夼8zBp.Uz;kǤJz?
+qܟHxJx'̩
9Ӓ4En)PnD
+),rj##}J߷{
!$Ι{ѴIyq\ц溾r0r8YczԢv{H}M(
n`7HyEgse{bUS>lS?yTyC80eG09w`0/6+lel~F}Y鴴>Y8.YF<9B5i`շgQ*~~q+&<2p*;BpnM	3\QC:82uAOZv`yc
qzOhdy`=m}q='<R; 9<0sp_+
3|/|!χ༠m;}q3^'!8_U5"7^%xM_%^woGƇAmpg,9%V,
QO9#R&7^?~'Y@\b@x%8~}Lc.-0McGܷ1ӻYzz`OcǮRSPz3C(?WUm~A;a91/gno)98'y3<BpBp"y3<%<Cy4'4)Yeb3X+b>%+:k?C^YczQO2a%ױ.gcIH#
8l~^#2M}n-:C9@@3^!8c^W(ƫ@	zewYK"-hKH`<#=_ڜk6?׋j,&i5/20mec[F56@h?`?~-Tl4yb	N{{;d9wf(m^XJh̕Gˤ䊌;_rl<\ɰ% =933zd|em0˕&ٓ3n0~wڜOQSQqN9)/NLQϸ?8MO,͇N81Gz|!XGwڳ?]kQb7l76Qۯ:|q^q64+Ƶ9w&RNo;+O2V\q1>duWrc3rŵ+;8qx)*ݔ9Htmqv"NĹqsY,9\]΍t98iEr3TCH!$v$v$0sɹy9DSs
3tMu::i@zxnsnz'N5cŋ?uS?Ht)DO!r=BO!Gȭ?Ht)D@"$"D*0BO!
SD*Ht)@O$" ?HtDBBO!
S?Ht)@Jt>FшtB[s\ϫӋ>EzMK/k :Wo\}D-ҹ(-^vrr֟3L-N	xr	eF1KΎHV:r"9Ω0Ev@@Yc`;.ѵ[)q)1GwNmܛ.$9k(wtaxs_49n,X~]9B9壟C}'t
ظz9պLk|dvhKʼByERRg?U@-)|Fyz
s{c*'MS)="9NZ'1u7'aN^ƋmI/Crys]Ojs`*,cc>p\	y$j!JJ<7^+#Cpޅ{k!?'(^>FB'^7=Cx}xy7L#^|uyb//oW}ӉH|3D^2!8^m\᾿}Bq}?8N)'93BFx_t'D
#z-ۀR'Hm!%O֮8_powܡu,Dx9`;.ů!IsgBpPz#Dx9_a!8*~}+Dx9`}6ů?'̡/~Bj'
/>{Cqk~ǜPN3]xI|K߿
B^sRMoK
30QRzZo7ش;7i;qZ9;L݉qJlEo1s!9sni9!Nq-N,)mO7 	!$-By~:_O:[|}Ň.w}ƞ.W}e.g4t\Bt{u .-LIm(XlF>N/ѭ%D9Od@/- %.]xBtk1PAiPؤuB+_:H@H_Cxh!I\ۼE5&]E-tB8X_{kIt1I߄WtnE}.֭bT,m4!hٜ%GH!]%G[%,A5}.-i#ZF}mDQ(lihNQ
ЈmhnKQܗ![Zҥ\,Eb)JT[A}	T_mK& D_ףM+mڀ/MmѦG
B[\Kukzn#D/Emʥ(T_P{Lt;=L_t.LAtnG\UAArZ^@y!(Mi9Km
T@z^]+t{6+!6+q3ZnFN3iuOڼ!}&mRh3Zo~!(ͺ+m֭h?:RB+QiZjFZZN}%e#]+Q+2PJIAW]
B^E꙯ҭjZF1]z-jA}GڦTZEl-"]ۼ5"lBj֠}G]B^CJ5GӄVpUG[Q=֊s+jPijC6$

mN ;$LEZ	2&H![qӄ+&=,4ۘф>BCnNؼNorqҁڦo@}N:;Q}؉jNTtoay.vrэzhlՍnTTE-:g=z}_-][HFZ+?\]
Z:=7"oԭ
 o8{м *&ٌJf}ݬ視QA5
!{KVԳڊ欶Yyȏ a4c6aC
p}mGpDϤn~QԗEw.4ǸYBsVW3>dEJvP~lBGEkьhZOͷ\>'GףQ95AA}t#BP)94f32o눉baDlchz?(4GqTnt/؋ƹ{fjwF#y6ЬZDTPӑ"u4
AߍKo@s&c9b?kz)2~rG|r p[n,Tisw-CZqa&GHo.=B*0ܾ=Y[?sJ3λ튏щuoyshw=r~vfr׻٪r8
\7'*9=sRkׯ0/x<a8)~gOx8N
֗@
*Њ<dC!woʓ9Xb?'s:gY $['{D&Yb<Q9^	}G-G<Dq]R g
aL49o:guRyicb!+<B& 
1צfY#H$FHd "5D"kD Y#@= Y#(Hd "5@"k Y#@$FaD  Y#@$FHd 5@"kWaVW\kI-
.\{I+t Vp[_9TxЏ\~Jv"!<Ijs1xӳqU	ɺXcp'\Rcnrf]_pZdxNCȑƱImk0p68_i~)V
49Yc\i!CC0p]U{L62[/fyz!.G&\Waȭ
ǵnYH$Hd! B " D"D, Y@=, Y(Hd! B " @", Y@$aD , Y@$Hd!  @"n!HV_:vJCrEZX+t:j?K}[8q]$Z(ik
"dI+D[Ll%CDX,Lo]9kq;,^:)hu"$DIDV'!NB$ZH:	t$ZH: $DID V'$ZH:	hu"N$ZH:	hu"꤂D V'_d`I{e]3ҕЪ%#`2?
'x;uW뀜N$$nn$WwZ^ykV\\
|{r7e>)>]}Eɿ%@gXR9Wf=~uC}%_`KH4؉G}%k!_
_GH+bGe|┿6T<WB[\.;}%k!y䥶J7<<|%k!ydX\+YMW+,uNϒ#$𕜰<X1=yo5+S\䮞*GHn`nsWo{|%wӠ9B徒||yq!þ7abd|ìq䍾bIWG	^
_#i!*_WKf\,3W%EɣURK;5RPrk|%Q$@^YCJ6?`zjH!9+y"jH!9-} 2WKv9B>U20	sbVY[!Z&MY(Rul&3ƘYt.KK3idʘy@Bd^,+`N	 [0xlfmlM$:ܟde]R,UopOMcÎXAՃ%ӨnIwU뵜,T,нIgit1~D)Y6D,':;z::q"w`4Y0젓ibjVJFc~hdiLlaKSBȤg998LWJ+1HLt>Yl!CƎjy2]Z*d*fgE8?X5'Y,+Sk9yܞ*>YpXUsł%sxdLA1κށ~rOBPʖo@AZāw  D@a,G ?! d`*
 +dz+/3=<eYi7"\&F1뒱*H Ȩy*l *pHXy]^a겤]]\Z_Gְc_e׊ ن
jWzVvU4j2%KGyrxu1CRMtb1o&w1տK5:yP24\01$CAy6ԾWYOAW'ƭmIddfPJIiZ!\5λpZMǷxTIYir<wK8~GBrqXoyA-KSze+Kׁ3u"Y;Σ<\ۙ֘lk'wЮϊ<gv2ozy٫:a )mvGole/2ݠSEBn6.s]TLYIe`6e_pp0.NiUKW)*!n_:
Џ|D:i,;pY7edjʬEWtdY fRQvCM6lsl)E:X?-$˛*d5=ndreqNkĿawf%l|N+iYphDu݉|.^B67^vttd"	uEÖ0,W#yx{a0z׮^ktJ:QjoO+كlދ]D66448=[%ׁvf=2|)Xa^
$:$މS%&(uSثL]d#V	Bfq6$o0Ë^E2&2 rO&S6Y~LTg$1	F#Ֆ+/vND85iw_D< HX	5r}^Ӣy
VAj	hoQMLT3Tq 4p'}o99%ǁ*M>kD<	+	aJ|p}w#aU,*EFe`-$ˤ,DVeujX^E]yXj~X'Ox;Ny(Y1?9=î[i8-r=8-CruZwfj؞'Nï&h-ǁYq`rr&f-ǁii)xKO0:&+Pݑp|ü5XN+f\%X#1xGiՃ	5cAm%8%+R"+_J
WjRSpW[ OXPN@@\R>zGRaRj\2'%7$:Ju*CX֯.x sq32z[
E~*7	6FU0챶`N>VA>\@&<kVd;BaN6/&
Q+by%N7k\qݫVkGfD	>prr9\BE;mEȳd96恁>e@vDl͹SMh}8aO$\'MLמ3m%FclKJuDW5ʧ]XWvwXceB.=2Kip'JCER!}/Y܊az5Î
bQ3DaÊfQ3:{;;=z;̾l&<;jţthX?xt)x[NNR'WެoբQbCvkG$ƿ0j+ҵUG=/$>/0}I*kvw0R/KMɮQ+1WB_<ʮ
?|ɠqyK^3ݕt:{MVNZ8AsqDL@.8}dNY1Y_Ԥ)\J[~rL$7Ԫ/!kN'D&In
X䵊5Ǻx<i(Z}<Y}ي2ƊֲkU
mWT
wu=k6
v,ݝNKeך6VԡN-=A`A%<;Tq]U)M%OrM争်N3
ژ%H 68o10ŤǤ'U9c%a[fJhd&C	kf}"fR
.C`-
̌5nLㆰaJYoI%yx3=;$)k
ux*6AY,	d)#z__3:(VTHTeW&ss'7FY σr/G+VfyTy8}߁>h
:$Nv؆|b lV,KtK3jEj|'qfjrlKOzlhM(/fƉY;SrWJR=l]\xi)Ndy+bF ru]j❵U:c?[ƄX'eڎ~ֆ1Nf2|`&l̗,A>&lNә&3E\Qڝ|I>1'EXDʲ&GD@k֘Eu(5ijBT6 4w88҈׵LXPZ=߶[{ kA%nC<f3
B
O{Tm=)VNI^%bl~2cey	mT3:ޚr2h<>/Vb\a1Eڟ'^	
zB1BPK
    \               com/sun/jna/aix-ppc64/PK
   'FXU)9 
 &  com/sun/jna/aix-ppc64/libjnidispatch.aUT	 k5fk5fux z*     
|T/K2QL j^X	/:IhE1	$!Is@	O^ˋ~^~h
 5ԙM[Z&9gLHy̜s<849O0!<f`?3z诓?V~u̈ĒygUNojDV/w_]P7_o]:/7 ?[fpJ_m'7:iuZ^{d7^_^믬Z7Nt]8~36*ڰr*VK?͐{Erh56)_v1y0zA$al[Fɐo*c"U{|(d=nYD큷x<49%Ou<r0ܠ%veAلÀ-Ei_p0
0v#sʘ5`6隖̞M,-{&yp!3L߶PcFB󉂔vb,X¬n4g_h6c݀Q./*/5Z553W*ي55߭4LQܔb:2k~N)\zi"{K.21G}1͡wl],zey.!ff&	jRKY:9qSeclfj8Q(0P1Bg%{#3o/c\$y6W93ٓDB4Sy[Ex}p*Q	nbХU\&Kmzoմ8
1/aieek/jVQ
gJqTA|;WPeRyqfR=Ϭѓ
1Ȓ fƈ.Eɠ^.\_>YS:6fM]:ES,z/)_"*h,	4n!d*0;y=9oY8el0V*G[`{W	/nT/Ι  ˜fL[Е\{HOf35(~BdJhr<?Xg6DeYʶWِټ]LJ6 $c#]ؒOͳE!~'ţ^@K>1~\XRN@E6噼:H80#@[zFZUx<4	m"x=}[>j&}ʄltj5׬v̿r庪rpmCtC\k:]dmmdk%ڪv+9FXm^+5b̺KzOn	|Ħ?>J{ ӽʑ%voTc~[9r]y[xvGTp
oG7{=Tϟ,D7X{>^*o<'CLOR;}v4#uX|Y7w/-&)EƄ	y__L.-\\bW)]WU[VQb-#~܂Z שo">ߓ*NgHl|/=Ѷ\֢G˞KL'Ox7MY~O`tV8˗%YYZ8DYd)Y[35:ԍy<ϖ c	Qc/!_d)&}D48tQRF%98?VN2[?滦^vu
s73=FB=,U2Us|ч'fo[ܓibpLTx<$,o4T9l}ݺ
uekWX_U>q_Ɉf(ug!d\v3Uє&7lakC*
2![kh>̳gb7zwj/E.ҙRs[WvN/K
yK^)ݻ耔=N1
gaz}4+u|\e#>4>#Qf	aAmߔDv_>]w*u+Gpovߍ:xqk/e^f&x&N-zW<vs?,^vO]Ǟ`._3vذF Wy/4'6v'K4 /)dd&Cݼ|^O1	=w?!RX 	$T明Y4_kldt̿nt=>:yK6]jV-Wm\G.qM@C"=l3[?;^}Qfx'W'@`3$=G:oA<9 [xb^Rv8&B2{Y}I-tr'.^~Os&_k
rB<oI GzO:\onƞ>Ks(WuzkMǳS{B+^<F}2B./x<8d{) @U_p2"{ilEoiv4UWZ3kp9rr0Jd-o?w91զ_X.fia,Y{,Bˀ(⤣C9iC~їCDoPشfdTxTN0KE{x4<v [;Gy/k%{ƸmaVי?A{<"&W7!OGKɤGJ<;?`Bz}0xDWp}9ΓX>Z2+랯YS\a}]<|.[hz}uu~1ۄQ<"Oco\̤t3Af37x6Wىu70.>wNw#L
Gp޹5,_#ܐ)k6睰UF6x d3҇;ak(ܴWMd/7U8T)}ZH6Lw4Cޓ-5LWn+*KNeMOsGEx{g߮O(0Zͨb]>
ޱvէg͆lzX\@hWjG8HpQx*=GFzVBTS1;	[ߚ;~Ζ
̀{@*բ^7QW43n9ɮ=b0.g>}y3ו{9Hn=ti!lKXdGzFQ6y,PX
6!>ZɎ#y-=Boz$8"ة]R{&Bs3׎42#foۍ`׷ʸƈm>(U_asmM	/O&%ɤrGʹgύ,˫Q){̂37L7p&Z~ƫBܻ6MSY+SIW1gl8'++jyⴻƪX'{	,C."o3l8diMȕB9/N\xM.4^f z,Nw-囪(Rl܎\&_ⱪxUaBBpp?8Q}ԯ7Fx{Yy_:>Ơ[>&|&O	Õ;P(|WQ.K|l6nfl2Nb3_sllMp.[6L#:q]l52I<_8#Zѯ"KE O}Dd7sV}5B,{6YNڟmWm9Q s/{y(y+P	F.yC_zWk+7/1{<r>ד̀21
.rm|(Oe|̾7Uyn0qjTx13_ok&)Ӹ~K5?[c5m>|e8ݰ+nFQ첒9=cKzbmm=u2<S$*ӏ|wAXEs%G횛b&3į(BK',?\Nzvgi(C=c{fB2G[zڕ爼sU:9Y99S>|r}R{N+'}Z.Hci'"S7]1Z3{lۯ}}˕|G<6]2k	[	?#.ʿڈڈ
>O6+B-ؗXK5}~``?`&A'*#XtqG	Ύ
j Ts)h00b]Q^y5u{ƹ)bi6Ϟ?׮
KuguFcߟѿ%8(SscMS󘔹':oCLxl(ʎk!/t9>cz^`}kŮace:9uyj8 .S"_3v N<~^x0GB܂q'q7Ҩ^t_>8=̬4DRGThS]zG
'z~ps˨mL|!N8tKy&4xPn:/qNU(| "F{rw1Gr$8Rɽ*Or-54upOy.(([ɄF\-PH"rO"z>h܄mDMtoOnLڪ^zO5PB
i
F:s4?Kc?dWFQ2q>T>b|lWL4ZY n8%%%/aBh(Ne8>~v^HQ]}t<ǌO~#
zf>X?bqUY>	|7*⛹68Ixgg*ynp{D*#/,'h1I|Itph4.]"g߳
~U[ӢX~-kn0wW3G, Ǜ4yPX3O;N~@ʱ"OFTOq`KLߍ8~n<RKzLq
fk
CŜ:{ֵjuckCW(Kۯ_&(7#ڀUqчhCh>r,.a2K-Bcu@_kAwKF;-#z53#A>Qmt|7S|q|lY'<筊xl?Tٗb!	9*I`sow[^)=<T2cSW6]uSA{Z`}bw}9&khy-W#z߸M}rϛоy~ޙZܦP}~w*Y}R<yHP}u^'9mo\E~=Wrkq6Q745ݭL;}$ͅl+n$r3f!NlRo%e"zz}a<O_:^@}xBǋR9V.*͗Mhn	ihx>eZG# ^)?^/#邖XrՓ2䟸[#9ai]z<?sEq?~^*PeuO<uN3RG-S|[PeSK]]ǦEgėBQA,w+=fxbp,Î3z?
Fx<'~ov\tFz:㌸pY}Ih,cgZNP\#6WyqW`cpztѺutTbW_Bkj%H-CgĖH)1Qd%SFL9>Q3tF|:|h]<c/l6?fS[qop%<!3|^=CuIwSY>Դ>'ըyikhmzq30~0'lD%T,)hȦ4|^~8idewP
]~{\J[-`&g)~atoi'm7hbRPp˗hkqu7Bg1Rv 5'4.e

8wCG** y<f.% { XL8]tW"=
mM:{IU͆m6
}3=f
k割s5~Rj
D<*,D]'ZO|y!U<WW SEc(Na9!I;idwb6/^.,XL6gG`~6vg5
ZPy#HwX^Po@~1ip	JLϋtd_!,\.=;Kjddg|.x-VO=4?k{ڿ=ph'Eg{ם.$ESx)?tF|pFvtqoO;:#.>Ot!!g;i	yh}2vړpnnst6'MJv"{Fu%<A=S߁	0'G#⇗'.ּp	0R	[߯D

gg`#KurLz߆{#FOZ`.#g8.rBм.q?ZkkrEbmq»A.N-W@VR	eB&b)2>j}.˰=Si93x.v͓ybA}ȸtGmاO|SU^e_j~p(p(S^9t^??uؤ'lE7'k~$쇓3k+"{o`GiGr;F*_~{Bu'Ş=qdx@s"=E@
5R t)~!Й0Ȅ8$dfoB?
FY@,cB,
94re\x'͟x*JX^p6U11C.C^dV{
+'.qzSb!4ti]Z@&sJay˩2͠K1ũ2o_o9}@;AY		1zp_5I+Pz_O;؜7O%v0ɰ_GrA_md|
A\;}F{2f2OC$kx@ZZYh'H%
l]K,@SH#3Ө_N8)Y{a!~sPAE
zwb'-ngy$YYkPCg[ g,ɡN4*Z/=AOT/z҉KGx^r˨W-cNܾ{W&s
lq<I%нU?E	Y}q|'"YPE <H1yr*>
 Dy h|̈́|p&@S*ɱS{>=FYBUa9爵.3͚l^*yڬ&b?Q,M65+shOHzq-fKZ4M7q1cMnZtj"[)_	~ |b@聮lߋg5ln	~Wtm-yUpoq|Gڪ>תXc\tO	Unkkf-sovL!.|*w	/\ oi(T*_ꫯVt!Rp(^k<O^]*EaQbu(7B͹ce/iةNy.S}-G.zۈ҅<T{;yAޫoK[a_(9(< 눿^@۟KbsOFjjˡz%YMjT<JWQrZ"K\_%|)/ /NrhHIr)R }x_O#"K{!mg)^~.>Y]|y%<*=@Nm1z߁{#lh')c\|js]Dx'Xl6mP;h[QǻZDS܆8AS'hZ͔d%~LA^Y~>hY'8 tx-k*
=3b</| ${JAm(4vr/'a+Nb,s{6pυ
ψ5xNr{S쿦މ#9Kouk:8mJWg{a^`d_6v]Y6ᛱgӔ{
("jXV  ;i; s
m]V eCS<;]3֖B>_ûxFicr߁{nҫ>q+r33rr%7;VR{금r߁{#L^јX6qUM|z)rR%Y/Sl̋O/>SNrCcg܆Sm(AC/{)rO ?j5-w65-wJ-n5uqw5ƨ=Nfl2mȻj>YZXlr1G h.lod#lt+QhjvX<^|FB6^*>>!hd
5Wpoq+
nk2.DyM|{m}
|'ۥFuȢa_$'z#>]9S귨1I w;}46%A"O]	O5#>(6C3seR~.t{3tC}гsRwH"j0SqOd߂yY&8ƀ|X[jj)5Y^FB1ZQBIp&6)͉
%"qNK9ZsiiW=@ϚF%C^x5KFDr߁{#,'?\w~ىޮ/(ֈ{:T؛)0򩃰oS' T ~o`A`LuE1>eh|֌1CoýX'
1hI,[|)oM7TB`?l'FXVzWm҄MZMZ/$+4Xgxu	?i|r;A۶K-qRz\jַZ>fJgl%dxn.bsy6vNenڗŴ[_.xDƂ>ZCArmhUne8%0씕pfR;=M-H,Y&ӾmzNbs%;=맱+g3Ck
	hǒ\5m<_Surm#cTY?{粠jY]%_lNΑgFU 8H^VGUylfU+˪T,{οzCU5ueOW%2"9c᷇PS#`C4m]|}V"G說4u,n#x֮HD%nŦca5K
3"m/n;;cAk|`w1\~h`nSKSKV}ɭ4F95?E"܀a4gtw93g,m0ã9@@cAm vown++9azh.[CLRe,<Vi35$ܷ()Wa+׺1f<e+aɨ;oShݳe+3b[,RLFwBg}RΗAZ7;Ce5
>|6g,@ a 0 y<@nf:SA0HI؇fYwwgJhﺺ᪀{"5s{Ͼd]<Qt!?#Lڧ=ح^堽lW)^)o-]kT}L
Ͳ'w4'$~zYGv?ӷ~Ϩ{q!<*k|a!`?Ph]ij/GW.?)|S*|p<}~_:s<}x",6g9l&ᔎPa<xN|'IAV}\c:UTrRٔ&jԫ'5Ys\zo"o{;ʑ??Eh 1][	e?+čw &j}ԭ/V}G޾mo%9e5oPyn4ݺs%
_eG7N}	1
V9I;hUb+Yd|Lz!j':π{\i*3P̂8#)1^#_~py3޾iT|(rNi !Payw~gQdQϯx{Q9B3"YR`q[(JPWUV_Vnuguk)=~t^,-5˾DL-<pQڔ6!ӎhtf蒗=Q3wL+Z:rK{3{}οFx`)ybDQƐZ~ƬCLE;XKڢlG[;IObdţx/ā!:b·C))W@ Vpi>#rh{΍ޗg[\u?hΛBe/Ky%]e|.bz+k
tB.u:<՞]#-tF+x49
Ͷ,x@##y	VjGDaG;^jK[Gc[dЁof1V!c$ |,#~ff4z>ي\h϶zvO9+-
\򈺇vu&#&ޞa5Q!6/Τ=|_
|oK+n)?خto~: ]
3O":3COä[7@]?zMa=EF.ʯTN/OCL-<0)K<;~5A
SkkX 3Yk'w?nKw$rCs+BvُVUΚC<nĽszHnu4ʽQ'L*q}>1o.~><uul[nqJ}k
^YmHZxbˡ]y[Y#Ay%Cwpp`aK6dOzGs2W8P\;޲,ˇ2w-7ۆf#-Lc/+Fe<dcct}6:C)}mPcC\0iAr^4=F~c5}UΟs0a09mZw'.'|m#Acp]p\C6
,jL-?`_|
쪲uiuT1q #}O-Yܟg[Eƶl5vEF/}Lc+?X-	Ǳcu	Ǚчghg
ۺha,C)fяyJRTCR Q)}(z)x`o긾}Yc˟O?$Qrے :{!c<&SsYޤ9{'ejð?7°Aa ?2[-9aأ0+حt}D%1#H"t>GV&\/L6JV~v_s<+$O~9Li'xyv&uT<:}%.{v&/8uV+ARs
z;WŚ'/]ǌ<^U]|`UAh~h/Gwh[N"J.}QEZSX7?jOZqP4`>zt0sGx-=Svԗ|P֏|Kg9_zĔ3gvMC5[' 8<8<<=	x{˧ET`1E:8==(z6f-;4hfN8rr
͔x$!B[um0E[-*h+ǩZ磭-6ELV
_E&Yg6Y}ml2Ks5M!$-siʷu80GbNc)Yғ<)ފ_dHīޜ%MpqF)?s>
L6MgP!<(gT*s}	LPzQJ/5"{.x5]
V+`-Qv_?r WfN/SmDqm\}$+ލ?-._x71jaq6R]ʾOCR.J`_>.u2G=?N<P?դk.44?C>b/b$/+a!>Ms;rQ\'C7&N(>~NRFRW*GM)}wgbUǧgQeV@{Q^
y0FкJ$^o#R'Y=HdeeM%R{;PH3jDkwcdZI֙od=]}%W>~z{pOJyNc+qn1Z]6Vk&ʞֱRߩ?K"-^*W|{>r]FWi
?Ym̦"ͪxlmmb+mWΆpu]9QqPyqz/Tdv
ff֙3/
MɦSe/n:8ZVr[6ȟO#@r[x__l{Mh9=f^0G+;OˌUϳx$`qs=5囧}D|~0<dj	M=t9n4{8s<Es7B<SfBSP}3ec9'W~?
9,n:HOk1yB}N+Mn50} O	>$"dD7(6CYmMADX_z.|=_Ò{*e78G7GAw
{#9?<K< +g[5+0$#軆<&f=)GeB>:GZ˩{?lfkUD.3٬WS(fi활`b,Ϯ4о6>
M,ㆵ ,g{#wC7y\.Wؖsא)aqlbljej+iةb*mz{[Q\
4941xCBkRiLzh }e]xZ+ߖkw.Cm%xrda-(f
Y2,_}ʰަ
eb@1P^J2Ŋ2%
܊bCUB܆58PnGed;QBIGqdLAr7=(ddLCkPPQGy A(@)@&ee&,(sP<(E(sQ,bQ<0-o#(P,AyoPCY8(AY$r2r?S(((U(+PVTԠBye5`|e&GE)?1a-٤ʾ]6OoIuvѫS5!>Ky~?ѷ`I&IfZHƚ^yKC˕\>庪<eR_CwZi܍=D,I;~3W7(415K^Z\q<J)ڙdGC.Yffo/$mk:͟)>yV./
4/MvNrY]ަE ~M+D{㟭	taw=5e5Uu5kה^np~?lrfSٕߺ雧<戌V|_	|nv;x Z*KtX-#Aa~t]%`&-k}Xa>LM'qO}~u<?5
$;W89m;n}x8xlx**úx(>n$o^3G+|Im|'LW`|cv)G蛉~SW=Z~uK
ՑJ]NƮ83rK3y}#;gWjAo7+*_}6AZ#B:{)|À?ÀQѵ
y-CtqU%nӈ'hYMpE.ZC-L>{$6m@6ds[M,SL`
:c.u2RhT޺?ľ|ٹAҹz>Ȣ?%
y>e/IK@ljVr=ߛ5 fhrpUË`=6km+w=TGg)g.|:~	<Mu7#G|J1N?/ȹf%"㴘o_ůiR} -sH1Nf*^buE6O
[>cXnO5+7WV-YQS1_翾5]{V-{G
Y΄$emgwA?kԾ>\"]?|[dY
k*}ix	EU.q/O)8"P.nw(/kʋ>ceLh,UєaiMV.,b/]I--E\ߚ&켗rZa<<3s<f,BPф6ڞvP6$ݸ}9(re9Ǌ/oE\Xi }:y.i~SVz׮}zodD>8f-r0͘h=[4v?qilĬ&柽0u0s.c\D9ĥ&X}s&
ClCl[pM.5m-MNێcv0a;-uGh7iG/؂Rq_ӌ=t(k"}M7MӬۚ&P,W*6Ҭ$/$[
=_o!6Jغ臆i[*~uҫa(>t^	Q.1u
!l`'m28&3x̶4@o  @o  @0 _~a/AIy
<~?OS<OOi4xz<=
2@EN>	A/>=!:l^9oh6s?|]MR<Jߓy_K?&,%>|KQ5&!yC)UAqCD2^\S=KBJYC)tmJ=ۙwXJ)ss)sE?z)v3qX܅Ԭc))aCs8#%k(%؟nJwx/,Rʣ)Ѣڨ?1mJc3%z,-z!eT|+S"|7#K֔
u5h}٢3+:V\{O{LuA <Z#k  ~o 
 7 ____I$}
>zOާ@S)[ǔi4h~4?
OAӠ+#5_GE]LE^LK'-ظG>_*/$'d #DENUr]9k{Q=ʿdj{zID[%&K1QI#7,Fe	<S	什urcR<nN1x\jgNy	Me6u=XΔʡDig'ږݐ``r[$/$+_*=qdnOz3χji]Z^G1ϸB9Bx|.(Y||crddAn<!l-g䎳rc9}.C9W$}srs-c#CFÆ጑p̆uI
wʎcs5-=QvK;TGdmMߌ߽}#4qK~!M t
cx4GP@c+n쎾?mreܒOlB!C3 |  >'|'|'<	@9rꓠI|
t>OƧ@S)4{%Y=
OƧAӠimfbRe5s+/*YFۚfL3ԳGR>Xq;yKlLbmEeUن5Ik@㒏3i/^u: uk9hbi_U&dC=W~%
b-)2DVr1=]x'iNF6ӷ6񭾜{"L.pJTxLΤw9h_FxY4/'A;V
g^fԏͬv@
,?k);R./E}kpA߁ @K7#otmi~>hgzMEjo(YmTWkctc4wJc|Gѐ9nY^f&ގ>
4BFhi9%~GUtˡsL
.};Y@m=IsWM}?z6ɽ4g4֯]p6znjFۏ|tVǂ\^cKO?z?2Omy29Cy/qΐ~}P|H6ev=w1knd9w!'|>o6X?m5_6FsqWrZgp7ؕu: Zg#,U筳Y*E[9@=sZA|ǹv+{7il~jry|$nP̯g;{B*sHok13(f#Ac|5]6VVՕUT)lY2,uNd\%Ĺ
56yPvmf_B{mbC:?'jźϔ}jUUE}5hkXy#\;&?tR9G'T,щ"&SƉ74u0D
)1)ҷ^ɯua+u"N3!fځQÈ;z5
n4Hkl0"M:ǙHx%z.̏]bKIAk7dQgsɆ?ySظu!`sv6bGs[zГ aK?߷XdP[;MNoZǽ@%5ƓړuQAJ.L؉@ytNНx44ۻFi1Rb6H;1RÈhNb#>dӣs.e/Wn_oF4br0!+VׯYQ}֕A8c+V mEE֥\{`ejR(ڴ ޴ִ";>Z/u]/򭙱y!:+h/*ʡ9(F݃Ыdu~R979ĹALSS|l۷.e
\Nemҗ wK+5_d&[®F	nմqt7~.fWV*lL_:uݵ;OYW|^'bhGjx*Y~=Vxs#C
OF|]s&3TlP@Z#,e}t41xx5
7|}֕+<j%Xs
d1yx_cߤsL).PuZ+(,_
\<If<9:+N5!}n1ds5k\:b<V8dɿN%
edW	t͒m'E&r:{7߻<+4%6w5t:^ qʽIF|35BUuPONU_ ߒ'=G'cCi҆t~ngSr$Z?dK_뭑Y
{s#:1ˌ|LAʚaFb-vcU*\tawo\>^i3Jo`.1N&
(|-ѺHt}<K	8+뚘WYwhn$$]j<ΡYAvA{_[O֦4rE,6stga>jXJu2k`.ڔ	2C¾-.jpsx?5{KAt=Qc0Uȯ-셟!2N_7m`S
NIf|9$'fo?>gd(>onyDܖp;?ehӂf{~U#)<Vm'	oVtn>ǒ슌&vh_3?#
2`+(I??9;77[7g]MFCN7А)bV/=Ekыt\D<I*ڕ#Z?#UfS^
GgY/yF[|#=l2I2/ᪿ1]1'53?IX-@ٯceFP^Fcr,7D|R=bᓰo,}e7lݨ?.=(wk}_N<JA.\0Gh_s2?HאY#o*Y&zH
?/hbBx:補!dFl\~Y>ogJf,Shrw}Vq'isCDWC}-ò<DGNcEn+vn;9A~oD?{uBǨ=AT66`Vg7n
]p74yί%[IV atNEi:jѫKxmbWh^r;Ѓ6!]6Ѕ\W;I6=,!QHh6lw`q!n7c&~=`?vdC)#;J}jldF%6v[FЗ/(!4?"Uzv.})5r}Gqm@fΌ@gT6-piAk:#'.W+1%vz?p}3lZNbgQѐ~)Ʃ㬮Psv{U.]O`~9ᠢX̕׺n-LgYaYy1yN<Vl3OR}|Ee|e~8Er%|
Ǥ{<Gru<FOCl<-]VVYje:~͚kw>_GߧDir36=4Ő5g,ӷ?#{`w mKgؤq!aQףG"9 xY
L$P&|G+m
+.a	
X.__eIy\.!4Bo" ֋	Z82+-!1htYqN
 ˈG*h2MU*FGpA|b
xO>8c|%/͓j bU'GSvL~c'#4v
~8p=rc7c:G)C~l(=T?<4|[q̺h}3gprlOP2~D?CwOXg^UYg6!/c`l?pxW
G[x!o*8ѺHnUf?ʘ% ?#߂o.!֞!#
e>`ΞB!zOiRidqKrK'lq:j3kr'}[}oh<%YF3nOAC M,H#4=<-ci9P/rs9m%_R\nrg'79KIP#ER=%!WǤ{Kuo'QY4~VuۯJ|<%q}}e9vCα>趿;ښ<ߖSL^ʌv@G0qy`+{!R~]8Fd~7dO}#a>lO9RuNn^!n߯Q<qLg<r3g	{k6$?W&|#O<Lx''3~v-G<5|158ceGR|C`߫tA@[w늏_;'ӡQFG[$A-Ϧ六\ Gda7+~%U'xKWr9Cki VzNԱj^X}h_ݷ#/CB 4|[&y&ENrߓmV{[QU-taLbR3e1{Yʊڪu׮񯮩/{._щ)}EYWΊ)K^q<6%몄=AmN9;;cNdhm7`o4DqAs
e2BySV&Cm)b6cҟ|#: TBWڼ|Oh&(Vm:v)F^F~vr9HTw><oATK
~>V#VŻmܕLɭ*m_ {;\2haYCekZf}̟ŸdYۊOB\PqqCe_Ci3<>?rgw/*^:Ɩ[/XXPkxM՛b82OĎXUunC}D6ߠ1ژ&l+;Lĉ&215m!.	QQVHE؉̄IE-jH.qKwk~F퇭ݢ[`wՖs}?3ys=sϽsRßڍu8$zM3YdLa,#&˙XrL͝\r.L3S.*&faV7?:K<fF\@q[}7i	N0ޛ7CwX 󹏱"m l[Wo]z6t0)סn7}ڇ{uh)81cx
!gNSƐ_ ^?B2
c%N|APt;;?luͽ
Gy-Qf1Cj{uVwgVEKwW2?N{)p)KR/8&nT]襙hUEc|oR
䥜py0vTJ`-lDXA}Skd3>kkٹuwDP]n-j>0
=8pn[`|/d؆9CX7\wPľu-v4ch^/ڒcWg7nYc;t__z|jd*<Oq]%jy3*bYKccۘo	s]		oeY'*zFdgg̿nÑ0Vt+=<c_cN]pBv]7r}M??ʿf>\\w^Kݽno:o?Ͽԩ[Dyփ+OֶlmnhKh5ߗz,/UwUp]'0 A̩]2lPBeu.pݲWyj׶YЧ)?ԩV)aet<_=8]p$yvK
v"uܻG)4¸qh_#)μr,u1	Ҏygo?[QT#myR,rpϜG} &|ste5yyx_)[ֳTS}@|mUN~X*ث!`\C`=՚z\pw <x&׿3
\^FݙEkI0y)
]$_~"1ih;:bK_Rn\WcS0d=TJI̋]ۀ	냿}X0>6/|џ1pl39]iE /?4s=[/EFZwJKH<PBQY&w13]G:?ߣ5o}*u5?yߡ/{}j|}\׆Wv/Jo.P|Z֛άge**T?
K|]iZ]f7K0g-Qy<7ًgF0 tfq{\"VfwЂwZ&q}Oe՝_.@ද[	z:Z<7}7}9&XП7
f%Ǜkb;/!y_߼}0B4J/`SkIkR. W&)wﵺ;PD>	o |D۫0Ybg9H!M*6sXʜG疺`=߇9,*.yi}'_{Xby)\!o=;UX
IXͬ7xw6/V':܇y$9G]6/>N09/!݃t?Tz	tĽX2BcgsY[F>jݏ堿;OfH}#S,ߜWqNz\ڐ"!u0QG1= UFq棖6#r^:C}Y#e0< zLv1"]	mF[Zߌ-c->x	Z?092S~}rtXS{Ǧ$y}IG	<eFIy#G>~ӈAi޿T#Jk.DK֮ZKL~ȒN_sitۙWzfy'Nvk}U/GڹVa;cbw}\/Ζ;?/iuǅ[O1ܦ٬a7Tk<sH]zg^ǷI(Y|ϗǳs?וm7\2 eڂl2K~85=zh</ٞa[d6B"n{jYQ
neI-Kn uD"L<(|lcαYĸ;cy\Be۰l
p:ƮcA(<Ew+~ϋwxW붢
޷wd	}
mɅ_=?Ȝx _-by6ֱnO|LMd&B㙶2[xȃ߼rbf-0OНdYv//<j}h:2P~\sE|w:$2#0	I*ܝt 
0RsV[>ȁ;ޥs;ilt?va&tHØ3Ύ@
!illx.މ'nvw`<1eNs{7
M.Ok:A?LB{\v>::gtWx՞ԣ
"Dg4dos}~[U+nCC?(P^֣ZyHV[#
_'<^Yi u ˉ}Dϳ{?h _c؞o~caSkhw9fiܴyU6ݰRqA+"X>|<;Q:9D&S5Jqn8%!t/=& !w973ZY!OS'G;2<X<!L a&'n
τm}ց=з4*_65L`򦈝
˼ADe*<ýy["t!afח~i;{$3＞'](?<A'<~s$ ND|lVZp˸#j^>{*L|Dyv
ݹvт]ҡXFa%4hMou^KwV/Z2J`Y"wߢD̒na3k-Wwxܶ${=ɝО	[Ɲc
ugQ,yzWY??[EUPߊ>sx~;s[s#<wg/<T<G<s|x{{̇kwQ~p\xg=̯X+w»b&3/'w-#ghoA]bqL4*M3+\Fcy _O,z?sxs8KE1S_-֞"63t זY7K]}]aYUucEW^c	ܭE||Ww_ee]h?[}\º6U7Vlj,nh ǓQ,Yx=׊z*YM>Ār6D6
uQh]rV<ѝr<Ű^e\4 _aqmN9G
(rl)΋'ww
W+Y&L~Z<sG<4z\doǧ	[5+N?KSMZKhnk| қdZs>[K8 b>G<B.\qF1iS2VN9wSc
kEv뮯+mzYJnX>\_o)GbrC^)&#=o_z!z[b9SrŃ/#ɶ4?3N7&؇\
ώ3/}Pwevy430-ڳmJRۤmM^ˏ -1ݐ
8'ƭKd}85"A4wF{y!hWJPOLwb=(xsyկʹ8>N?8xrVzuч ӟO	>F>xs󸲖k,ޑuuj;abMGILޘ~
اq4F[8F?'8o^bvn?Wrm&/F	s_#KLIV4.
Ebo;*Ǡ=fӯ0o+i)8cvV,h&6 G0qb-!Z2GCEI67y<mbό7}k)/
ۋ6{n1XΧ/:_8uIb-_6QYb7 BS,72b~M,O[y7)73F^Q;E.jpt褈eBP.^gIJIWLYR߆r݆#5Ot-aCVЙ_p!yv+T)펳scNb'r}^*_u5T'Ý:pNb>oħ6Kcv{ـ{5b?q])UXԺoI~M݆8*Iy|eǼ:ޏ6#'Xa*_ۖܝI!O$ߕWГҍa~^m7}`g{0&,̥bƱ&<nqIʿ]~f/EǮP;ĬCb~dK	ux;Hcઢx(_in]uI+;6`vi	έA4epdwX0_"r0*T,փ8so4Uϼ0W8cy׫I/N*7k|>Its
O~9ݭ5C9Wą1e<{0KY0R+
2U}#4k'vK-h[NCM:1S9'<6m:x^馸qс>U\bwY'uq{Ogg4Oh/l},u`y") 't+$ͳx},M<;Yoc3ZSUcbt1%ޘhUdŘ~	]n-k,{,1omYlPfkMN^#JV&X{kS)e̓ȸ[Kwߝ#9}	1bFܫoh2npGK@qDo)cgX+}b6yeMCu<˭j޴IG_D>#_ !OP a~(}
;E[`I|{ߘJX/lK6-|1Y3{h{<f_X/,/.x~}3\g8t~p8>ޗ&g8vp`bohdMa~CVLО,%~wAS9솁Y̥<Ra)^)9xV߽e	c5lz:0急<?X?Q>~+;bX<вM[Fl+ֻ	R|<N{z_ك~?,%o#4n ߫s 1*Ak!L3|وI1ȈߧW[4b+}Γs*kdC`G0'jOYBx>z<6H|*'
M/q.BhA&`C4gxހd| xs,|IÝl`9L}\*| l887M^3$h17
lju8z"3Fw?o7G|9m/6E7)4=cͿT55]'%	uߡ`~Z򳥓be~~4f{1YOIN"?/v{~lN9Ěrzce4OIkt/Bt`e/x̗CqȯuI.:7<CC ?h$>:=Ma݌c7.ž/Uo8rj}-b]n
ˡ/vͯͭ-y\.$cr2SCSAcvnvZ r~,c)9'}yТhN*p޼z(*?ab۷gak=Yh3n|jcڨWnU*3P8<ju،cv<ҧ٧W~k :?^a@#)c?>~4,/dxcX;]upmU0jxWVvEvp/:qPS]8CG FnmlL2\')$MLѦjܭ7sY*rcٶd,v|/guzK?j)z؅zTTָ^\dnp#E_&Gs=[
=hf
<O}py/1^ן \b})7 \M,2#189e$'is%'iJNg^bpQNGyR \гUj2j:KdXp.I}9BYE.p1vZ~y7ij9J/_JM xd?7!!Rp]<A8%p{raVs$>OClzX;l|'̽mmY"7n)(zߍ5o7ѾI֛( *`$*3MIT L_z='\l	+`$ ;SyɈoΦ{7Sݰfc]
06t
S	1^i6T7ੇ[rށE{m(-Xt񭆚jNu?&yT5q7DfA{1?Om؇uSkgܸ&^l8G>sl8߂h֋,0|u9sPGqMx?K{i.Dwr#f~zțRT,=#$|yGgXRg!sѳښ{RV(M<	mV[s^k0>ZNcu5R؎Ǥa-.k+뫫iiN&eGY̛d_Mo1dfvMT:'QgqbcX3~(dȥGǌc563fֳs.&#KOyzКHTy65y)|	QRF^5(">S'?70'RizZ\Mx~LJ}tH&,s_8w\[J;yd/u0^{!{>9l=7ߜ|Jcga)徚yw
q*xcT6e?ƩܻUwfgnY!eV>7¯
VpEoUweںsVv"f/|~D]Լ|Peٺ9`/3m)\f<xVq4o\ϴo=t~F
lg͓axYx6ۺM]zw?2<g?;RT}N G/\GxW}Ok?{qגں)KnO~D90w׻wzc^?
3ضv-W9`[ҋ'9{	[W谽
O~z>+b*+9Q\ȑ=S"c3+%/?ے}p ]%b)>?we0<#3}vf	ܞyg	=[Xe
Wv
濡<8`[<8rN@ў%HwPK'{x꫍%lk~Ԝ~!Wi?vp.]4N'';";7$H?$~؝0n9ĿTx{F<xޱpyM8uqM,
=qQw\a3ԡ'/zsxOb5_?m6^lw>z!Qc	\'X!Bj+8öw')ù{,LK
%|(w{RGܮL\[km뉻d
Ӵ3>Zy;G{cp'18ߥ\18-<}18=5^ZDkeτSOrKzMzH-hMc@vuO؈֠d1z~E<?:˘<2o\\ߗ~9O/gy䀟q&-_[Oo{Wvv1}-l,'G 嵒Bʇ)lENV(xZ	]6̄[KTG10P b~y湟|wwq]֐&o~t,[EK4ctK/InlMҡs|K9$ezWTKgD/=c~wFKoL9*'w
r^A=_zi/pUle/CAK'Km.ُqT߿۔|_Z=ؿ:/.\hmW`51_ޔWWъeNغGmm40?'$d<}9cYƀ>st&;&q`,{~820I8 _}ip`nM6
Uu?kbi99\:w	sѨu5D;5:g7;p
~+zL6\>s;H0F(~_<9Iky34iRsgKmm	&;}kps'Mu5QcJY8Ys*M{`>-J*(TxaNiضSkcK.7s+ 3pcJqƌp}D4(q(1^yս=ud^=_|oN//yDZ#y͗9Gx!-j&ez:*:d/wJwT/r|*g8wsZq"",PQXv/hh\Hp'ϟԌ=FF`iCէ1c >3㆐"{R
%fI{rN| 0jq "?cD+80ީ4g7g;GřO<? `5	s_.g+wN[?274a_S{c1qD0OP[订5_:(夕?dI|3l-bG@-bAq%"$H#ѸoSf ta86C\_v_"	/+N\ыipR>ȆkӇ<g?ׇwa9	CFΒ!,k4Ͼ)؀o9".n|Ϲ-0/},4ݪ

q$-.t}vDoY"L+^;[g=Ԗ/ڬ-~~G]&
=a ,Ocu^|4Z+9o5x%1r'e8WAx)8X(wmtv$]5;E=v&}
g.֊uV`.6}lNѾΰt}K|KE;ZN&"an=z<-i}4{	-H}ݭי%pM{1#QشW/Sy{Ƴem@ZxI6wE';䖿ǳdi~K=:IY`wPlˣonaL
\G1o6mTdI9\8ߙ~2L nDͯbk[*r։1;%N_ۡħ)4Y4Г2H1f~A?T/Qi9 K\3i~t5cï=vKB'2[`Yfw8toLj
:n7s^Oٙ8_l:#M/6d}9r,
͸|;}\(^a\Le0ΡiyUV?'b CE#9OfwV.oֻk`,e%|K*)GvxmpE'	~;v,mlm@HƳ o1bno]Sk/xr!柏pW"]bJ;=S?E0yfy7
- fA{K|+lw۳B'1Od^Rcel<Vټa8E̙813S{Vu_؞~`*Ѝ,ԍݘ63@[gG;3U"']}N?<Q\sLЋ:xs.	d15?Wb(wށN(,<-I@;{h龸(+R>cXɋkE$me=wu7Fr}e}!˶ MMU9ͫ쫴?@'yy(\	d~./Kwwl#G6?mu 10ovm'D=δb~ ׏6F}4
S_w:O0S/ҊslHmöҸǇy:yGp.qssi
 ω/Cq} O+tR?<
jߠ\+FЄ&#=Axӆ/:׎/8*69ւO0E;__?sסo/+_g|=B_rxVۂccOm|ub_Wsa] !|_i8ힶם1|_pQ}$`<(o|<a10@7}2/`x|Տ\P&N^A1#-{SɃkQv.zz<#?hO*`)WVa̧ 1wL|C]am)28l5[4X'ΉU/,;?d>qYG,2KAf+bG
ckv3"*xohbߜVQ`'xmS9߄97?sl,;;	{s
nvp	[vmƟA{,"snk:|Cöbi/$ %('D6"s_B\?MCd[Z,}(-E}qmT>g5h_7cvao`Q>K͑>JQ|G?ꅶf!_O_mgw7<cE>4)
߉wqL|l;6|d)1`s
3l3"AwRxQCAU؟?Ǟ%Z,xW8Gx_>2FeaӚrkud2G"?Z>`-@yJ?)K<g_14.CW?7hmwhm1M?v:+cV?o߈K	?1_8FzkC߾*>Wc+U|N49 SY,M8gNbgʱteUYsthd̕uya;=q9kWeiOѧS|X(6=3Zgwhq:hx糆gsMb> :c|o"X*NkAV|r焓Y3XP!|%ҡI2
٬|,ekXc{%?3rzw<_Pݸ0?mW}׾?NVK0]Yƻ6m+/ݳj9ŠPbuZCBw&ؽ6.O''Џm6&_ ёY*= KcӨMj//ۘ_C~7ĻYkύ]5+3#Z>Е{xω]:=*bԟ^5Eаd=ecMU,Dy{7{
ߖ,
|#26R,}kQ%l=^MwĿw/nv.b9F4o :ߥ$-av<lr~!s?~/YH3{Xkwy7
ߺbۆH?V{"_w'Ytrɿd#vtbMLttabl{[oNrC=P0#L,c>n;-T/`sm~;MR<z۩^N/p|ryH,7CZ>dec}u] .׬7S
rz9 almF;I>Uݡœ/ݥOpxA=v#xg%?8;fZp^>!C'YqΌިn4 (6q?E~>>?9 y^ki2knr׺F!<,OsO⯏eRj	;*el`m!]d},Df=م
]j<zɿSjYyk4:;>S:=z}1{q
xg	%Frveek?	Ϲիˮ\jUd13Ŵb_xZ"(׌Y2Q_ѯ[͟Eׯun~4H:N];ob2}='Z7&qhi5G滍/ox|or|K>K\71Z7{(/h/1Kt0ןQ%S}Q翦&Nk't(ߛKA$y)7	r
$/NGގfxWf "D<"I<}F;{3
bx3{vIdާ|:2A[yLG^Ӯ/5G˻8|{hyVb
Teĉ?2Ԫ}ׯ<58鯫ok[uuu Z~kF<qcSnǦL
Ө_]Sׯ@ϩW"~͎֯iOVFio/Fkt쿎|ѱd>^]_|Wԗg廢:q=Z+W>{}Ar_845ΑW\sJ_igMc;b\L"n\7ȵ:e=/`F1O[+qό!p~.6?MUJGKc߳[rld
B`f3G'UUν6T7.ҨO3uo!1]k:,=^k/.Y,	JבBΫIHi:)ފìOUr{Lpy;U`c 4WDSCoǈ]ސ^s_ćf$tBô]CVRT/ׯcnhWwڻ̛:Өc#r4i{(,ϴA/ֆw[^6W5CC#y{ɣXd1]3ѓ<j~UJ<WG_*C"??.yidKWVM`:b돟˟;~^CNǞ}N''j~H'aSעhy]iO\^ ߿[^K>8-+.+חGп^+Xv&ƆFcupo.<L\7soo393߅3!ЗF#X㶛߸1sq.c}<$讫lQ#]8Bxهwwҹfw
{T
_ԉ
׷wI-(<y z1Xt}#j1~jJPt(IߓKMО*K#֪5We~\r'\n4//{"vey78W{؀b2UyniS,4"ˤTxm](}:+ȎNUO~Z3l	*?T1e<
:?y&y)Pܱ3jcoPbs3y7oSu4e|"擈/c"?$~c/?@u?k
&.$ e4sDgHv#OYNAt?ˤ[m2
}Mas/m_@LA_JΙ7E͙?_DGMA/KLI1y_	x5k6iVcϯ"]?& ߹su/#߹:/sMƿh˾E̙!tB]twVk|nw _bsss#<=en
 ׁa9ޑX<Z.=|#K'{WklEycNCх06a('DN9~W*jk7VFwuꛞP}񼸪x]̒0iWa=,N9f6xngi>[>/w	!}<"4;\l+k;k){2I,֫=ݦ'xZsoQNq1jr/=Ι,'dyOZG7`~)9`v3i(ܞ\DpkX)6싀'8R4}0Kod]:_6ӆ6юLK`vJ#U`KmGRK,< r.z*\1a/
8K8	q[|=[?z9:',Mkqڿ'x,D[ ׀YďnW;,hL\0cg032D8k-崦vpٝ6KgHQûU4yx[P;|'7n#ψ9xk{ǜm%\vQWɺJE]SCQWɺZ)Qdt!~t|]k>3}p=m3gzϬ7glM[$E9A_&[[3:QSuYmT`K@c3{=KLUMO֔C6,6KQ)mS^lzlzBL2I0Ikվ`:{Ӝ\Z8|cgW{)E]'5_~`q.)C`+]wڞI=`K[sH'X⓬)2q?1&g`nx
ۘw{^xGf/a#{, n\<NAUd3s7^n{9cxX*wA71=(rk9lK(srsh>tOQvt|nf9f4'ȥ/&08|a ?%~aeiJg)b|!/LAo"S	~#QJjddIxi+_"~O-?+~R?\,<iLBV^-]e}/~CH/{3F{?SkEx;]⽓?E?5*o~K^^.xߟ%|tMZxzx⽐Z_~L:X?-~6`f{o[.x_/W'?lx.2]{2"flXkWܔ߻!r
_TYGŲb<UmVQE]Umu&T^;g<ñF6BېO{wX%'G7ZY^̸yNQ1/!@Z=8<t>HFou `_ak+daKTVO?D9Z[,/F.M(rwa
irb𻯊|qs:51ybS

k#h9ֹ!sZޒ@Kb?tKuæucūZ᭮s5@}I^G;Yʟe6s64M>-gYW^Q;(wjϋ	01U4&A,}ϽB=xƴ{7|%Vay jc	f
%g=e	$+A}[7z/6&TL,dA}]8Y/x,8^Y%|>ބ0%7[ߚB8L	1]Ϭ{vQBqsC{,~`m݌'/sBL׷5H7F>Y{G7-&o@}%[nm ԏ/c!kwm	a3 gڞ
YzFO`cöaf.hV瘸b0\mk>[ޱ2
N/g&n~:n`YR/SQX)>QsCXbA]}da:τfJwu`Aak 
a<i+o
	x_VO2AVZyXB#DH9IX]Ǟs<0WaZ>2GjO֤x:ǡ94i&>h">ӈsM0ɧO鵧O|:tvӈ9>٘8{I>|:Y}]OI>9ZY^|jQt"|jVSg|p&ԪifP)$\OboY>|);:cԝ 4|,4˧NONOY&'$JL[哓	>|>$'w8&Χ3>M#$p&ԩ
_8bbIz<*<RS~i~/"?⋒Ǔ=,W[-ۻ?q[Oqt
~
p&[X pt qr3
]Û !ҷIߑebqāAC7%HC1}pN`qq	Ww"SОC[Ox_l<?>>tW3/:`bߛ#)IA8c #'M}"82Ϗ$49I?!qF˰'$|E'pKH'Xq8M%,}Q}xHh
O]͋ZPB&qp}qO}8SEP?=3
1{I~a/y.fu*YT	/싣OI?f~a#\p?Shp	?";DTkG@|N_zĴ
k 4N !y_>7*a&xciQ6!G{~E	v8oh 1v'ptQ(Am@h_%A.U ᢑqx;pqI#Ό;%>i!ӝbDpC|+y:\G+"'8@sag,4EqMVGh4c|W0?v
ee,4TF48NXC%c8^f.
7[܅ߖ*l>+X{mcO''.b?}rAw7{ΪK)5.sZLNσmm}к$bHB7!z%Fp49"׏r2]FG.+w1w2~C}fea=~|{1|{.˒u
K;<`r(<g;}0['1g*y^^sD<?>mϝ6xq\Jxirx^>tS<Y!=dvA)<	ggAx~
^0 óa.h<iϭC^'kYkع.<&-|s'\/>r[@!x8O<zs^x>"*g	XV]_fc݉KR6 =9NuwX<O0γbYpU<y Ōaƫb.KXK q	DwboⰥg2KWh7c{iXV܄tw{8[Y 
>Ħ,o<gWqpfdp|͇<Q,QܠQlM0<4m0^{_g%pG
wK[{)Zw+x-X&58́ɏ^6;.{ɲYKY׽jI	31Gs;T2BG9RęJaέ%;mζ}}<nitWJD3k7(cM0fJMM|E_/}08}7+)bKڙO!댡7P]XoCVT<x.Ks)</[ҹ~ҁ<POpeilvVMɶ̆NƠ=NE\.E9ZZcq{2i:\R7a0wx8<6_twdC~O뉑w⧇@AAHGѿ<<M7zCͦ)vtPjE
g¨cHcH
m|1ԉvlܴX|Fˇ̴	{_v{:Gt0 {b.<q}7^ɿa}+Am
@^'aQ`7l7jW8,[ Qf9|8Oͯ-'>C_Oy^_<[{)gR|\<٣>ޠ]]]=.YY Of
s2[pa>	
Qh;ᒷ_]l<c3/V2z806:2y	5deKǖRN<\&1l7qB{X9<9COO{Ғe6~RV~$'to(p|_I|msYi~4(ڶpNf-Dh92Kt{V#:7-ЍI ǁNfH@	7]ɇ}lm` &_#GM>'f|ɛt`щ@<0ΟCXI-~A脽
dZƥ/Q.]rO/O/+Ow4]\Ky].}4Gb)+puzvj>!N{VI}?Xʺ6eG۸_q,/҃z9RWPB\t[=+b)4CgUOQIV?yFGYXTƜp}!HNP}S{ޕQ,9	x/ދr}C$8#Սލ4'!#ϒWǸO~\֯)6<81^/AN.@8y
O6 [ei55U3W;a<9{}bi6my0U
-Q5v^U"l} ~7TWj+ ~A%B9'3=Vt1yAg;3<(lߛ;?XK)WwlJ߀ߜjv0?m_O-Q1Tiut.91:
צ:nnY뽵4{s~y"xU|oQ	XRy7onvi2][X=ݸisCuX#M_;;?6mYĬeo$8c(# Ard6ip@pzumS5<h[2xF+mMR.uv^h,qKSi|+#ƁQd}ancy@+*75VP:\̽s`}g4O(|t+:Go٪b3Be<uZ"cN-<]zy5x5x2X⩪h(k쬪.<gsKG
w՗)M<3eؿtOҽ722+MB<GPO<<3,mI{,3iYצ॓OZ5yn?~ILzj5|,Q
=i3fv'xT-Kq8QSZ:!^߹0xk	ǌV5ڪ6[#}|o\*+/s/ra^nm:[n}͆܆M_˭UAO4.deeWQ狲4NлRѦﲵ'q3:d3gҏO&S4}}
*I6T^Zf숑Ta;=c{Ja%|N]"yyH&(HE`-JK襋΢>IL2
M2}]>Q	DO{	{	ghCך
>;x=Y_ΝvF6Sm3ϖ[4~.45S#~.P`h'?Dnk{D5e"7-s=-@^4cXxU<s/rI:m?{o4zcO5x?M0xK6xo7xH>`7d\BM!kh7o/wa2&޷8+K]x:K±vn&ޕ;g]*amۢ).F?|p}y?
7qql	KcWw*UVSc҄3匴+FWyP>dpw7b4U^BH̨os^"QKbG5.Ѿ5?E?U>K"_ޔ}\-6QZ>T
f#uIDp~kFʥMfX¯QǊ/BrƌFQ$8A
Y+}M5O}
ϙ3xi?O%'}"wm|Fçj[NϕxyP{xQ
0iP85!qljdds)mU-,#7vZ*HU)g)d8f26}w,OP2wɖ.r\qR+ufZ!zXVn@>#T&+Yd~1^Zam0bu(T]#u8+7@[_|6$or?8*x6ߧO{HɴnK)?M~~v0;inŏy.z|f}¶8Ɍun9}_֎KgZf^ӌS9e;M4y_٧'#?`;}gXD;혧dphawD;vR۱K6ގSkGZ"ڱéc+v<|DU׌z Gw_s5uhz9{utTogiq&*ziG0T^achoC3+Kj8v
}//S0Z+r}8x{[$ڻH3n,	qKìnd}Ыinz-#<_3V1phyϹ	Zz.Ar c2B
4Bļ4]߾'_#!6t9ƴ9;*{\J9<:|w:y,MQ3:G_ަk;hr\ED/PãjmZfI!]H|Gg|wciZJb{W~8qA,0Θt&!)r=։_=4Z
l
+ꅞEB_PmX.Wh͘>Zwvgh$pam6I<
#F._figXFl=OQ	EUGR8yWMlHwn4Fޓ6lF#B8$[.=1<=ҹh'yǁ]Yv&Q#9.RxW*Ad%C1_~x5Okp`"#dw._xE+~ٵ2wM75VVn]GT\7np]7-pM[Ȼʲ+繾{Ws/uXE፫xWuwU䮨]WQy缛*+6o6^oX6D	!*`N/Ka;*ȭې۰[joalsdM
*7nrmltUQĄ(w5z+\Y7*'um\wGue[ɵεa]ņj@\[KnnRk\
P=<CE\`i*W9b]TnZ]܈XS~NU񯩹v.U[]q[P]C͵[S[~EEݥ.
hTعqc0Su)7.}:5JFQWqWUzmnoE_PQK0*󨫨u]so4w77TWUkљƍ[uB=F뙝ykޔ8Ӕ.3[}-mOwl/{=3K[ݵS[=(&c&VlZ-{	K2;"6b"	M"ش)G?}{=u{F
{|qϝ{w r$^ML*;jeDvg¹n>~X;3FUXN2}Lx0+-}&QAdZ2AhdzԠjsQJ-Zhf	Ha;zn_^a($TjgTR=FVAR3sٯEpT K]P~=W{8d&nay6'8Y=Vg#/~sU`Y(mYoUwDCZ$9>FͺV	[?uw;W7vԆ>KݽY\מּ"(z o%k
r{sR,}]ZF{Qmg믏!UkѯV=0?_YDON}
_A2oQS?yn۝kW;R&sZuCޚ}=V*cJRCsĉ=>i=L`su'\l7Ij_}̆hذړTۈ݌FE:j"dB
6P
>Sz^˯ْR)xe*]\ sfbSb2R<yx?\ǲILh߂ 4koct
q'aBƖ6Ap |TImuw`b"k[f&q<`2 *oq5&^*[2.a^}ʢۯ΢Tr{+K<]Yר9UR7Po4`1i(?_A04r==Y_vWlF (g!퓬ϥpMY}Xǋ/߂EsμJǾ|ޞ$j*8NzQ=};_sUq󬂷_-6c26B\
V${obKcbBFC>2B5+(Py[##-[#-/Z.RȻA1N2ʇE28GE׋юu槴|h3ǬC~e[vjȵ\rxGy96~!'aKhM3{G=!1y~M`4 Gy'ġ.:WN\6ݍT>=+/|EhGJe(k
JgfՋWGiϥG~6ܚh>"<Es֛H _(]ƻ\$	pM^2%fB3tQG=*ݲkCϱ]n<ǭ]=*UA-j>h̭Awi_ąh=IjOYnʹl'>W'K֟ÝV5-KE$:,nu;qg -6Vݴ:mg
gȘj
D9(GFg?Ց@lL*hZ7Y2y=8;J9n	-ӎsXF1\~|鏺z;.7,85/3f**Q+L뿶·GԽ[i(?n?e`)P*FyB
EF'zSq2	M#8=_K;2u7<2?A3<fjZ:2TO }~Cg{"	/[J(?1;KSŌ9_xcO*<*We(dHaeB(dH^
H7SwS ŜI*?[	s"и\`B\%<骠-]߷.~m;ſKʿwwyD[ϒA>oEإq Tk4K[W!?9@E	9?n'NƕY/৆):{HA'mD*l.۷KjW9	P钤ZA˱\>yO<1Qg+Csu͢0-
1m*vl_LJ|nn;=ʶJ>ܿc]Ͽ~;ߏ}Kp?_/8/)iU?ο*3Gz;&N~G~@c~ʿ!~~~}~;fwK{?2_mT>u~~ǿ/e#6~ɿryOWw}oo_9ʿ{'?7=1r9nw;'<￢* ww= t߰[۸EwWVsNs^TՈˣ_Q~"R1>{G^1Y*R/|Ls?-˱Vqv{1Gq\Ɣcǔ?R;Q^Lb|XMi}<|>|jLvc{}y^Ob|XϏ}fcꭌѓSҘvW)Ǵg171:&N93Fc+Ç1o9'ccG1?
kgcWώ_ScdL1Ɣi#Ç?1F91ccgsccL_/_>S·cm>}1111ژ}L>F=&oc1r1|14o3=Sh0X?*w܈=;%5^=yJa{?9Kj<UeUu57O|^WM|gGz~⧿n/7T1G>Mx>}cU_riN⥏F M?!-2?op?ey}↬C0~~!ӥq.W3nH;_q>.猔_R8*?wJCzʺ>"q$7X/d<$k_ܮuhEv_g~z
nu֓\uu.q]	8-i^]uus>8.P"/Y{S{:o?!i

3<{[e*rA;nU)Uu]]~??v|?6Aw5_a,I(}SZ~i
g<>qq'&<?dX|e>81;ngic_qs7͸yOUn~A??㳹;AkM qQ>>8cW_8~ +O r| >ZW
p{+/WG3\>/_ ?z,aya|yƩ~ ज़ǀYx҃Q,KgKAKYK P?*_?pӣ8^s8ĝD{o*AODݝT]TQ< ?pW~ 8I p;	EoS>]-AOoS3'p3
p38PgGgj
ŧA ?Wis?R n`<?a(>=/gg@g@ ?_  pbbb?y )A'q;k8d͂OYɂh݉j jSP)A
ڃ2._y'U|?qN'?_6W~Hth4oF#3=#H`fna?44wwHl
y}#mĄ>e
y0}	C'y0}	C'y0}	C'y0}	C'y0}BtF[FF###]#Fڰ37?̧_0ҧjkFdC#~H?0wF#5#u#
#meC/ِˆ_6!
"ϳ>bW0O?iݰtOIþOc
{>3A7['cпk
{{&S=uՠTɠ[𗧌xO=5?<unwiпmЍ1
ng1~>eЍA7ƧӡA7ƣ13xsn/aЍa
?miOڰ31ag?cư31ag?cư31ag?cYְ5ag
?kYְ5ag
?kYְ5a?g9ΰs3a?g9ΰs3a?g9ΰ7a
?oyް7a
?oyް7a
?oaO?iaO?iaO?iaO?iaO?iaSO?eaSO?eaSO?eaSO?eaSO?eaSO?maӆO?maӆO?maӆO?maӆO?maӆO?ma3?ca3?ca3?ca3?ca3?ca?ka?ka?ka?ka?ka&?Ӝ6IN{6`?.ァr'y]0.`ay^0\0{G >i?]{sa_0Qӆ}]4ƃEc}.
_4Xh!E>/
wѰ׋rE|E'9-?iE|."YN/pZK\_2EWTSE%9-iCDpXd_2Xd_2Xd>|Xd_2և/×K%c}>|Xd_2և/×K%cae#~le/x!ˆ/l!ˆ/l!ˆ/l!ˆ/l!ˆ/l!ˆ/l!+b]1ŐCWŐCW_1ŐCW_1ŐCW_1ŐCW_1ŐCW_1+CWcrՐUCW
_5!j1_5ՐUCWUCW
_5ՐUCW
_5ՐUCW
_5⿫jUCW
j1f_3!k"?i_3_׌_3c_3g׌_K7~T1}nV{=Nf4e**r࿽^w+/7nR
;޻UH*C멻~v:	fQvBUݏ1rPvAPۦ;2
J߁O&~+@WjɃZBuɤ۩cu,AU0&Xou{Tl<kI}VmtAu;ƃךfMC Y>d#x^.(B.F ;D՞V#x)Fz;w3sElkԪ&;];2خ,'Rҿ$gVswǶmX\\J&MvKS^RwC`zҋg">iK7p6HnǅV tLg߄B{)K['[ʷ\=z5mބ>qzNsbi#Rv|
N֐},0.ݐWofHtd? s$'Xڎa'zS㑺9g'Vvx6MG(&zx6uďcbϣ.r<"Lʚ󒙘¸hfOˬ\U+:f0.YL$ր~ȹI_d/~W?oǷYnX堡(^DO/~W?o)zx_Y٨41q:~w!yk8$za+|ǏpqaEQ:wl!"H&"9\Nr"\;$v֔DE12e;J.
u2CSO&&C
h*u[I˒cD{谲oXm70>XpZ|߶NmF.U!|
;x$YV&qC
<t[E㴌rieu:<}l3\
W'z8XvXXo&ud<?{]vp WTn߆,RDͱ+gӺB)w+!.O+/G-ǵ&8,ϕ 5!+CY>gz~hDʠpӱB߃U&0k&]vil/XBQV/^ܴyh6SQ`B0Dw>S՟E?M'i31..TPMI7"h<k+ Xa4T[%S!.WrV&';cYX]ߎP)ٔA	s8BWiUwσPQD[C/Tv Um$sn\7&+!M7`O	B
z Sb!L%YRc/(0-qn)Źz3ì<OT@C_`I50Xp@Қ١̋ Fj[^_JqZgdf\N	ݮ#5_̍CyQ9sehH_. "(0Q^9\K0Wgqk/
y	\ูTK=wAgFXp%bO}/XH,awPq|e+-ƢpAv(KU+}QQ4`~TfBa^܌;KkjM5+C
 "dP q`MR) 99T)Afj06E3Q>USRUԒPz3eLrF %~zjl+$/5tN
ek	I?&I!	!-)^UOfR}
˜O_҂W.䲰h0+֮*,@\ˊ|_DK9 p9r9-iÑA:^.% l-*9\LO1w#QRGQTKAѣ )  qV){"ʬwb!v,acK[ROڕ~Can]2P]Aʂ8F!`3l+Z]U0Da'rUQ`qL1.^ ^PTOȑSzkA0
 P]̂;Uv#&B#ћ/>pAS yD*BZSWѨ+bń.BtܛT-"$Tł0P<g8FsiQP%Us1܆6	 <ū{MI:RkQf%Z!87pFRi'	1e0P߯`n	
('MKQˡ`#UJ%SilZ@$+[ӂX&ҏ	U #BnӔቢZT,KjߌYsJB	?hH0$E'UQ{tQɡnɡglP
A蒸!}.78B<.fMF&ւMtۑrW"$
X=I{͎CD?
HzRjds0cTe?6Ħ(qKQӗˇ
;*Q^el`A蔄PrKPXev%_=8Sr]S酢OQ`>?#n
/"zX8r& (]W4o⩂-eg0'{Ȳ<$$D~Cv=ɗ-ԆYF3^GtLFr0@YNi,,ՆMЅ
a^?EmF`r0{i	$+KYUT̾ۆMolVx&{	#]fc@I4cz{IP_:[-L'&v»Xgp.Ɩx*"mAA/ۑXpSvPjmjE$idCT~t:i9$޶!jA1铭GݥV ͹gӧ,lGzҫ޶!K[$?PV!;-U]:n\Jj1Q%?TUjTyxU5^ҋ:=Thq{{3|bB|Z_X)?jxbͫ\n((?;+kiI!t?nCAwqY֖TkkKg譕w~s{qKo/DۋwV*F`qi̿J`J%TMtH5{NԮ"QbmXak#zEŘ N Po	PʁYMLCL"n
QRC@kgB_B'q?Wl!
}=/>nv3kC
1+J'*!8Uzwh=@g4&)?UOmWBB5ťە8z%^~i,bfnulAt2Yc%5T;xS쁈L޳ʶ

qmC~L21!
LeekM*IWc"լ4 \.?[M`F2菩BDIdF'fZ0ąyzހѧwRf[);<B`We]V#VTV
ݠZk\0[B[yr<~B#fCV"Gh|jlЌ
](	ٗNrhEs})F# i0,7`|hԪ[18It1	LE	Nͪ0]dKvxOV0_VQ_WA4n5;j谉(@3<n;Y;,)!/g)e3J(Rne;,˳iwiUR[~@j9ۆX7	i-_ߴ)^!J݀tϑprt+-w:H
ZR2#O)ڇ>6HJcBsNI1BsJ:3\~Fxs^>n'<Qف|r''lH'ѠA_bw^i`r{_lYx|go`z4	=l[2<ǗUPU*Fӆdz>b GUXv0;G
{E
tICk;"	@9ъ2X rl}+Z)ҕQ8rp/rpV[ࢣ;^sw/[=ƠO"p+P/[Ͷ9X+Iu(Km؇f' Ү>%DwHj[
U8.ʳ٥9cEt۩{
Udo-L,`ǪaREQFC2rJRH O2> `3(c]H4ZzHR0Z:Aƚ١%֔&:cg`rV-:}_KJijhLPLVqqY1YXY'jFa?*%ܟ!ac]BFyHYI8kѱ#*YK%W@C٪P3ԊbyrԱNNmNNm5NF[SL5<SLu\WL54\SLsjxgZMtspG[ q΁09 6qQs t8G¦s@l9(Tsw({KxTt3*Tua4!>4;YKB:4<˄ˇPZ
z/Qj֭SԬ z8ۅqXD"`"F,vPu9FjPPTT"h,eg^#o[<tZ4d[qI5)* Kaf~8'\hܴ҃@Jq2pKZ,*_jZ9ةt^;$}bp1^?ޯ8esOkv
@ۮFמ4O++7+|b3
0iJ'!by1Ok=zIQ3f_	}I;Q)j`Oע{@k{SZ}L/@0|X2}5zۏ+j2prnX\C;B@Q6vz@<|E}Y۞8BP{	̂v`/p *ߵPGm;jGGgTJ}%Ԫ#C3ةgV 2]lqYw{ᛏNE؁Jwnq
E
K!RUF'^&JrIKJ;LIERHCR,;l)<+'C)'RS	e-P)'M
ɘ
#dadǡCWx7
CǬuXt;|	u#[Ty?5F)=P{M㫴R_VQכG1KϞp(c
$z(Js8;Y
6MrgIhăx-{/i!d'wgaS7mֻtg~9Gì鞔4!ۓ:
~j=PՐԠ6VA,RjZð΅$.c`J
iK0-I!Ҷdn\ht4#5eEU+;H22+dx.gg獗@Y/$Ce?rq=<r|u!ݤu;$,IG-ҭZTXGVh7G%qy`}(CjTXZT0*őŹ%HWut&>e5S؅v*ƢZď~w,[ƂG~^(Yvj
zi&14 uQކ PBWrp&J|FY<B?&mck%lk=
{pIZM;$9U.?PfjRheٲyTQfW냶&
8
Bآ{h;xF}"mH(6xyAw(ȄݫRR2zos
u1 IH*|t3l@c/=[tz5q8t[: ~dYS>~4Em;a>sn9B@<=fHgy>;*,.b[o6o3n8Ĺh#5l:ț1Tx@$K NBLt߇Ays 9*TPR6>RAdqc "tei(Gou
0Agxs(WSl7j!@:!RJ@S`V]IC,ygbA]f{"FsHyx@vʴ61j׶tCx6@@[YA42nhvx6]XxֵTBYT
x_Ҏ"iypv1[//׳.l?ܒ_dWc?O?>UZ4 z\abͺC<h-Z[+ZpqKDSvurEGxK|eǴe@VSB_U@E:s&UGxoeӖE	ۈQ=J[̉zC)r'J:<Aߔϭ̩<,t
<rGD82봢VgAa{'A,Ãڠ W{"l{NR)Mu_p#iSx)JԪcpD1-怌3mp7~ f"3bDGC)NMmF>jmyJɠYsiε'4H|Fr-)zN-x˝ע>k9 o"	$(兼ZjEY0!]Rn KAYiSN^j.8,</HsN҆_I(㓴
a;g4mBZm0ޖPKBiuźb7g0]pPǋ@=w9p#=Xv]~܂P30+IܫЬ~wkvv[xΣ%tCQThܩ=(,
Ph^٘ HHӛSBh8d'ޭqAj-7wMMi	^=Ac{4ĶE;;<wOEMHvZQIGʜi}7K{qLC|FIfBbFCi1
>$C91FTJ9pm _PSb~h"ҏ{P
nޤ	[$L_méǾF0uP.I
VMU AرԎ2NgVdlVu[tma1p8jwj*?_̅aM%еϻ	hL¬!=	وX[ԠAax|g@gR</n^
tID5t,`M*w:>g>,ˇ}1-APx/- ױ@Anɂ8^:l>9dW5g=3g;dCfuQ8dԾnCh!C.8d'\,xuϧH>TG2KTMUC{EM9au7N6RgPr4Z[;]
5ƆX\<9L2-k\inaUGGϰ-TwgpUrRNOMQC>?}L}ڔ.kcĮ[2OK`򎪑Х`ax1ū.x9.1b:$%TnB/턷UvBsؐk7iU\OND#a;+T@QI?HL[Ғ]E)3(uG"A]x0kT_&
ڒ4~	0a5;P۵6:QlA*h8+թm_Op D`wzZ7h[xD`%Jz0ؓsn3ŭᄫw^]-/jF|YO$Ih(ʓWBQ |o-4lO$+ee?Fzn:èW¢7
"aZcӬ#tPFiq/0nfdfw32LkS܈D0}9tFtj${`4a
NsvEԼ51X٢9frTTyX0ISgų4$zv4
i~i<aD
)_4SC
^d~N52}L#fa6}7o֘[se,U_>a2p]#Vƭ64rfˋ
5iƽ ~`3tbޗ
mN)(Bt-, _X%9-~kt`@d_V,YɳOuyn3ZouhF$6M9,1]
@BZ㡘4d"sG?m1TLGoP
=ݣ.q:?V!bL7<b+T<
24UHF:b+b)G]@D]pY)EXC30w| q qkI[Ӹ$X4bq:yEp+l-, чz|:%ayZn=nfezc.B`w \y|U=h١i~6j*nr~Y2IT1C]*gZE؂tN0i,@̗eպQ/: 	ՄB5[r1-9S.qF>]# TgW`܃Av٭@W0'!
.\Tp3=d!730Sxd/x%~lh2m|+
/눝j
2QcQYrJ<^c5I@(!ÙjOmmJ XW52߬?YfjQ}8U,k!WO
jwM2~hRHUL7Fm-leBC_'8WLtVTHo>5P41	7h]%j$gEni.ZZ-WǴAּgw Y^-!!3Sbк4t>3 Nc0$ar)Ei[RkKG&*E3m2
B.dWxVy~V5+G%jm-m\}Rytqd>SUR֔T4/0o>Y.*5'ginlfVaϱXШv=|vd!MkȎP	˘ڈUWrUQtt猨)*a:!*+ؼ@z7fҵm۩XFw<pwsq=*$w2*F>SXZHKQW,d.J_ADx3A> 3/F_ B3@HWKHY) QK0y^	AWj'
*'1Abe/ڭ=I LAo$Ǒ}rwz2!J}UNÃrD/m^>Iw,)OIwE7X%o̽, 	v_CPX¢s׋#T/pN* 1_Vb{rsrrrs_[Mή6[[b)b\Eb;.Në:9ht uA;bWnj
r>~1.ᤧPXx "J+ 
0M I
7nHѻJf޾sTw"$!.xyEx8zmGcc>W1uyey^UWx~ia|xe@w?=4!w14&𹴀\Fh
.d{~Yz⺴eȓ)O>S:ݎ;~^`:^'[q&::a*I@{j{1-7&n*P~%~IYD Ll;<ʟn.E 5jǐ>J!SāD
Ez{!]7JiKn_M }pP0a7 H^nfySMl'`'4"RnO%{<cΟ@Բ2t,Q-YTe`U<]3ZԺ&ܖJpzj;2=ig`խ;k_W.>\Ck͍핥|YCZ]^^Y6hoA
҄[vhq-rp꒺NpmoDw6dYxZ=hYW`.kBr6hwV%`:]y.ΰ.pwqk[ސ@m}0v:QmaPnlpB;A+[ˏ7ڜYڸ{S[KC3jSKbD]^WWE+Xlih>ZټYY.s^$=Z-]OkcduS*	Q;?ʟUUq=Ӓ:7.mGͿ|GuEv孴~_\߯Th'Z"64E[_-^_ڀrm[V{wD&b:seZ7 d;=Jɜ
ou	!,.}o/ 0za3smm
+UAϽ]rsBpQ^ftgmcȹ{oݏt9dXWEGX\r/A `e)],Ja9PElCg:IK/yno,{Ú#$rI*e?	.@i/yuT$2V!"+}%kɲIO>!R<$~[+K_Jﭬl.PЭm <\]^]a$yVHbo4kj">x`tdG3
mLFJ՟@e{ ^}D;WX0~> ?[X#P$hvtj
U`:hD
m`_k%^r*~
Zfp˛}	o_Q\Y\ES`ջ{;	 r}k.>Z]_ok>\ޢChmy
?D)i
ml?%,YV
!Dy\K6Rʝ
ރA8ApbHcxFW#?\_URUzo>rmܗ]/Sygѽ*i֍;olr+lov
ƑbJtFJ~AqkK5-80su%6?X\n 9!%
]7H*+wW -9m	Ǜvhv[4ZxaKe2d3,	Gۏ
 . 
q% `.]<7h%60A|݆v£}D2;kK4	%_|GfIKk]  /o<^i+kܦ<p;+KҴ_mA ABC轻Kq<y++Т<N>m! 
{`[רu~*f]X\.mAI3zG4 Kŝḏ,.tm`6BzL;QPF/AwKw7םMд[4 ml%bKa
A2FQуK`n՘P_av	CN	dT
-*A0д	yXc̪>ftFbXqJ%bywJ"w+VhRڹm<^QX&Ul|<Db`nXkqVQU6|wb`iiF [
N~,ڸAyF|(<uMX )[hL{_'hz܋;?%"pԞJ.aE5_mK4ОiyL0v9Qs;^$ir[0%0_98d'hx8BZʑ6XZSE
pԩJ0	 =ޜX\os;M|;".sqȋݷAP#d@":YQ0l-/n/mJ0j֗aM(Xh%wٔˆ"q:l
S *4T$~aXRӊj9WW1s\N},VtSk8,G[
-_&%7ZٔSRs`V8=׶h k׻w6ƃA^k/nS]ͽgIDɰz'WVpQJU0v*L^[`Xc;/-&9D2*?uRu݃T0ZɫM[m~_iӓmU}(V܇"mUt3 lU/3oiAe6Uo5M]ں?qS:/n(աR*ۄT]8RutBյ@n)MDAJMkg)$ZF/.JCzL78-	.~9)")`w(=aCe$wZ]!n~bBRZjovXZi i|VNx
~[Z.`C}[OH=g!'?G;aQtx{~-_:+@O@7ZXnctlK9Ni+ڏc%ΰ47`X }s~Ff'HݧUņ)fYZP7ERj	Z;S+h-
^#"u&FoIc).Wjb}B#bB`<k^7{w\3D'}Q=,ɵ!VңVwg'!2~*):@R|Tb`Ϡ=PRƛA%v21_?)#vIz"+:%VFt:oW!´KܥzBǭ$8xn<V=շ@j>-YܨyXD6~? R %pUJqOtI #k.yt|\o&v=I@Wǲ}3O*,jmKP
~t][2𲑘^PۖV!7`G'E zDP"}AԷ<?V<ʫ$ϣiQ[8kQ13*%q	r+bbun:qGLK#<ntmP9QUVSΑ@3[Mk,c	!A0I%

ڮ'Abn9%,/g*&Wn? H/ D#	9lHmODt{/Vr[bFU<FSx|7/],clUh!q
^G+F`4$iQ%$jDq"x[,
M[	dt4_H%IiUHH TAGpH$A?!֛xMZLV?+鼙H8lmb,
ql	fC/2ݔf&{z okPD.:3^䶃 OU_B/0O&{vǻ$NKw< ^D5nQuQxH.~3+S-!
.ӺR6PKhWU%I=ۉZZÀmE~W7n9U[&g$nB:8xV\({TݗىD%< ,Pj[jdVA.<`$aFf?ZZSig~wU&H\B(Mv$""
FR,רi8bp,{5QU`:#8{4c0p$Wէ$$F8O0!ݑHg$pr$
Ņ7ø#M
Ҫ@ɐq#;b'Qu
&{잵b)	P2\w(:A@TL:m͡
=`EF[@Q`zٛ#ѺUӘ=z<#K/`b=7 'x4*_U͓!G"#NFhJ܊#M/THԏf5vC	]R֫x&H@z{Q
';1$/NjB_a h\V6K3n>Txp"=kaFՈ^B__0A<L3> I'vo	s~G :Ȩ{90I4ER]\-:$ҖÑWGcT:i
j'dps653Iԭ9]Qjf(jz:5	F^Rz'QiHq)`r]u%vv4} ,3G)t(45@
ib#@]q$Q:'E
:G9
9)@HL,QQ&&F*$q$Q.!RM^`/l9<HwwczFϊ#!LFbj9q9
Gb8XG<=lcvϑ&Of˺es^IʂPrD4 :9P<+?lYa'Gx+!PS:VJ+O<g;b8WAuR^Lb<pЕxY܀+=	]4Ɛ\+peaG2Aݑ b@6wB?
k	O #ՀI+!W"!JGTҬHvFRJ]	~'z>5
;jvBIy]IV*#P'i,]qRa^8V.U#;9z}nknu9x9-?U\	sޏ9>w\s3 t7k5re5.u;g@qRJS`J%̕'K%Q;ٮA_8ܕH~}Jd$6xF&x_c/wVI|L#DvͲDJ.UMԘ>a6x!Pxo_j3H.!Я6V\ç
{ ة&#^4 Q
R
ut뀀f/x9=U	/  SXAҸI#x5pˡ"ٓ1]@=ftjj&qJcs{zI)U(ݼ5f""u Lzy}$k%,\(t9Rirt0,5 !,$`:W {4BֲHQ3;9yz*n9}?W*n9
FaCIBx#R1+Ip <5P+oQ+I36$n0ZS]v*n<C:p"Fd(7LY(U=7y)IZ~Q At:؁n	Q4LoB%/O|@vBʁP%KxoˑlLZk&[͝Z
Og/-&9 KA,QxMxF4ju:Q@ B5ȚE$v
F)b޾QgSxq&9Ad\sTBKc<\ޓ=mqٿ#y" 8#P}hiހJ{J]O؊Do.
sZnp%VPZHjW(Pˤ:֔GiduJZ<h< x:uX8
q=5ugQFȈPuD4W`:Fl9Kkv{њ=as΀fW:k/z.n¾=JQ7L={w,xIi4K {pD "*qدxolD9Eވ]|X&N4;1@w4:^cפP"E#"=Ƶ4\(v:J!O0 HPVC}ȭOSTЉCP%
g5I$VhAG"=	r6_/I,/V}y<Ll<;VGH\ď'Q +^ g*-DC4IEU"*TX""(u%.xoܾۉcq}XńrKZkTGXK<E6OdIm| ,)^u{ kUD OGSRN$dP'-O0wViKhVE0՛]k(%iqg1D|<eV&@pǗ PϕJ98Ѓ1tYYքcuD#]^KCTt0KlȧNx\?>!/Y@W%'Xp!kIQnڗ(hj+aIz$S$v]2+D~yz ȻX,`OS$-{}K}Gհ>_@@KDt	Gqzс0yk%T4
}efjEMtu	>OEv1_jSj cC_:ʁJ)%Skn4S<'pVú-]
 Ej×0NR\;R%_E4%ꂁ<zB~)z|唊/V&ޏ->K8;۰$蔆+_".s4
GN_*q$RÐ.i\QU):;Foag
daȚԺORY^ށ$Ү 4HQ`y*4/%j`x&79{òEPMTw%B2Fu2mh{L?3K`fI'DDWistaeIKK%Ǹ $K#VJ|`Xcjaܷ+Cv;IۯcA%Bpu4~pW	 pd
Ƅ#DVR@+3
$B*LQYZHe'j	~!nVF@-@D܈SdV\	$BP<`YAj	٦_yJ{Y8!dLvbg@^џha9$qӮZJ*D1{]<ij$O 6LR3ZP2Ǌ.ѽt0 %BbU
kH;`
ځD/^S}stMk@l { F lŋ-d `ORG	XH4I>$zaU6n)gkShy`Jv.OrsUtܴbT8I1]KE4,<[凼aJ\6g2	mw8/';}K=U̑s3Ҟhf
hZ0蜒 FH	$^$( hc|#1` 	߇>J\0
#	pK'&HqU#Ie9OU FJ^F_McKL4:1n{|d
Ϫ$1Q]\)$ϼH$aT]D8Dc!QIY_D7Je^OE@⚂ݬ@9=6 GGE(3!@ܭ&#8*R (hDA#] 
Q:tG"@0leh̖؆NĚ{6x)f0*uD@3zqPB3cezJ(␒ΨP"+gJ^v8)4@_%,{ʷ6g!B0l"NBYAZG#҈kؒ	UucV=Mt5lhk>Giɠ"LT])#3oa,acÎ+aŞ`6aa|O?~bkϟ>wn˰	mW[#&)1jI({xp'׭&m"	s#`R3VT4~0(P[Нut0=	<~
eSu߸O~<m {:j7o@W}<WmW<8sUq\y~Dň./50~*D;z a)AE=}xzbCh)mX[dnO  \u*'̞ь p)VT @*
Q\L/rIN9ԝ["+ܹf\^2jw9O;*@
e̕jC\5?@H	|k*&H`^1BZ땫\f|6v.4?WeO{(*.{ZRj\v媣(DKJ2,0唘m-\UUo@^7gpl 
QGS#@u.3hbD++4xaKNs1J	cP'k٘R}b:*u,eZaƞTQgiVdUTG*^[mEz!Yq8CV^0Ͳh6dKAux3PE,QBUZ4ЭPu<oðۊ&M\coX
YpW!?l'-sAv(0UZ$Q(Cht>P0e|uF"4đ:.BS"vaSn0{y{.vU_V;
MIin]DԂ'jyL;p뀛ί>-Edj4EJEdDBz_^uެe."#X#Y.T9NlT9Nv*R>n&2F|<0
D~%WZ<Nt@	H'T3ɧ6-O-fhg{)l/|E4)8	lfwho@N1ЏPk*UKk^h?H2/[<VP^h\IEN|iSph$Q"m}TW4 "&RB: c-3iR{\CHİ@hD](ToTU䎠_I+Q
U|,kex"ק5H T/Jz%,P< \OW[n[7U2w~-l}/]Ǧ0<m!*}IBl 5!_.RH_.w]B;. OJH
qW-!,5A6U|*KB?煅7?o
 T	d m-
Uf]~\.жORKtiBuqgV-t/#'k-X`HFjB<ЖI
-?!A>͖W{6𳫯r'H
Z~/ <T, 0?h)z(0xƕ
FhѪ;mA+02~
L^a[\T`sV1_]`Iya:߫$~Y?W) Tr`To2fz~
Ǐ[-h2 ZIi^^d3I>._Hzk1f5TY(udmUX<h&Fe' (7s-7xLLu/sE@cF-<)2A0=TbX+h

7y 
aZIFv
Lj;`B"$"8	0r;밲C&&Zb  3&Ym|ػ<M/h՗s+j46Mjg:̹KQvA7T
]PA><AmfIJ]8VD](ެ2BoυIv[]ZܼU!r4x]
2D vN(M)ؙ=QvWɍU<Z#"%1wrTI0(&|	{@JFJ*Si,d˰-iY8$)[Aj,QI1h2}e	ʵSr*Ʀ+l /b*{xK[w+|1+u^+hxEo㓿F60,0]/΋3bxfby-$hԋmQ-:j3zOgX\ɭ_țn
G^ 8/_VK|U/GtIN5xr&\./IZv[JdW
vz|cΧ;nPz};%`E+xUEW.iE"̾OD~̐]Xn,Lү7&k__Q2Qȇ/^@*6 $cŪߕ=k2C@t5Fg&e17.;RYշUįfRz(ݘl1|)&z	&V)j:vM 2u7X蝀	F_o#~{ef7Ao)}\5tD>xMמዪK8wr?^(\@K$S|8ߝaՅnZMG$6Tid'unz9o'gxA#>LyB4((D$|Co&dy W1
qAȥZdV#B:;0[/F7Z/G6PNQnq֫&gz"i`fQ.?R.Z#}A%fQ5BJ_|^.,^ɈIg^\#:Erc"'"yڟ)C@!_FzSy=F.V&#{%߫G}H)DEU\E%*rXY2So_>1B-Yރ
@mx}}U_-L[L}G( -O',X2o&u=4%S/%DHzvcd҅S +-  tMWN"$~nSl筅VĤnK/KT]hk\)VT`rOey蕻mvv) oȗ!zPZ]%e@e"*8~֞D=Z|M:S$LqGwnw^5TB/cmMպ  %#Vh-fGN*QN>	N]Vfpan^Ӯ~{1PA_,{	qr*KA[ѕ)靻[c1@m)'9j]
s!vtwK[tnU]U6go4ԩbaU({bOI|>`SZ|4U	H:fʧ=uMwC~ݘޡ/Ȅ#]yk+{o;?U=RRh%o;#qwPr0*pBcB>HZAĲ#
YO.&-S:~y^,z}Q2SsdjƳCtq\Hfc2L Nb<e/[mc5hg}pB\;40s\a|Yt
(B|z`^a,?O.8bSrbdF*İM7;}	`' +nqIO&щ*a5ra=>QI q(
F6zmIC$
Fɜ$ϏLsH0*[8(F(@B
K
*pZ%DgVzO@8fVE@fXES[UWgzk+{)"ရ6 B3Db
h
pJʔLQI+"$PHz*BȋbkݸE\fz(%cG9/x3]o}hVnYD-o
Z3d5^$rك^r 9?9wǟS٘p!w"V~1z]	EjWz9,
=/.'v띸n'>?uhۑ& 7`qPbE_n\vgڙqO7rڅ7XK8 ^`[ॉo2\tǓI߰69
W=|pt{jY>r2"KUb6&frتa|jEc|lxQD,PBigZSgST9|%>*tv9'WɌojj?ŷ5-=E0O1fMd{x@jqڑng6
Lv7vdrJ3c懋vVXwqTɰ?j&	4R.J26tؼƗZmrӎ<o3\A&ӷzK<iYh'l㴓vډjNb´cNLG djrzw˛_дt]9m(Hdq?;n^;
mӨ)&|45%zW鴝u{.Dk
 SsNMy[pYt1D6jJ2~lgeȨ:6+[:u,v,q0(`Rx#˸kg,C|PU*MǡLQ;\9DQ%K@FeW亜yRz𲝛 t;~;7hm禤vn-_@PUzӇi\xNpX[|^\Yu0[%MmVEV~3|'-\|θ[<(3FrBpg!(,Oo\336L
AP)&AP)"7[ðwOZ T,ogFo
уEӽUpޣG|-2GuK`cGkb^f0I#nac0R;P%a'T̢j>_QT!Kp%7obiVW;z]zγdpqy+x2׋!kl{b
Wp7`I㸚vw1IUP}^HO!LplGV *	+z&&tF1
Cz-Y)|TZ3N/.]d+<>R!우VTNJXjX&3_z]ӛUo"rאdԃ4=lhڟU`̺zzC<5BQ
?v\Y\\
L7szFnAd^#W]O䪿)=lkС,pbв uQМ^J)=l9lSz$6
M/1/hBq䊯{zB1h*aB)䊯kzϫmdn}
/(d4̆U͸G$70
?IG%;A
m̶2K瘞A66Jszq	ČlJo[H8PaIBK@`B
*6ҸibG/q	Lr?L!Rz8COC{1f7#Ċz@ͣZjPñPQ
ej*Ke9_c+E||􀱐dDo[ER hҹW9K7z.ѻL[s3QlvX=SlFq	]bugPW	=M,bi}c.Z-n)BlBFT Pa<.p=Kzuaa..̱A%B,`4Oq쥆`pT.ZDp(Q݁[ e&Z{H- ( pP$qt9G	.;zؚZa
x?D,oUM/u?B'kz/5=\	wM/ce%B0=l
]ӫplManNoڙJôxLN)ΪyT,Ld34|%n̈́.߿/&Qa+
kcϚqHoZNԚiC#[zƯ@$KoFbp|Ootss;AY~͜>+%0}37VU
:'}zW^wۣ|p5*K^u]N{p@* Sr@~&z'ChQToqc۳
[Z?'z,u
;xbam*՜.f;rt^?'XpB
r=Y\G>=Ћgxtgx/Cp-pmӮ9O@]QݢLIb@0q\.b4#<d/7/AE`	gsPb/L&~`2Њ g|o:փG{w$Yb}{U|P	qѿB5UEy?(aYyW<ջ
ёZX-vR	8#0^aqhSهۆέw*	y-BXƸ#4i3dgvug;RXZgWkg 37̙7AŻ`zםWhRD'UBsf~p7]wҒ;4#L*
4nG~P,3tPi!mZ#C~Y|XMjc:t`[<P~)/K~{g/P/zk2[>#V`Uz-Vaz=ֳֶ?`{#6~¶8fx8nx/8nx8nxpÃwppTW}F=<ÑhzuF$޵E{mN
+,paq<$@'`|)Dv?[Ai:~Ə$!tvbeJD{!Ki}N83J蠟- r"h
a!uљsJHE81!91 bݞ75>G%ArU4Ђ`,^0"̗=XE|G|ɝ,gf=->Gzm2Ho%"܄5%yr\/HD*sy1 q"iRjl &&>:)|w+0o8ݾ<7o`Tsi~q#*mf~
wP8#7	ƍ3Lh3{87 $z\T'qS&Ȇs;3G<Zڐ
<B,GR3$.ȝ~##iH	=bc7oV9ް
I#2hrG
-#J2J<r2f=4HIk*jVuL"FqF>dF,J-IM^\cKsYܴ¢.#Ď#`D="!#G{!GG
))R6Ca7RBy7R>a2Ib	__^-75y\17=yܣ-_# :J=ŗC#!0w
= 9H/8:<@ny< BV!56Gph2>9_
	>E }jLʜtsF0h9
s0hDcO{\]_aFB/s>fx6^

=Z֙$Zd0D 5Zz\7=Z zܓB哂B|rObBl$Z;'NYIB&Z>YD'
1jQ꬛2 Mc|Jh<!AOw~~=!Ew?g+Fw@)Y3{伺*dJ8i)Y9z##I;vSN'f:	RT^==Y;z2wc2x=zk2}RdX&d!Cܓͣ\&[GsOl=5U"d>2qؠ|zX>͒2%#I7%'
,'0%CJo8bacaU^ I񊆭)fLOߔދ>ah<;<:~R؁G\L"D҂ޣJKhTRbYڣ(e𨤣tTף2y4Q)nٺ$Z1XSOx,f<ir9!O3"OsK6>23f§IY8Ɉ&Hk$Y9ܧR860qC2FJSww}i>ij>ij>=in>mV$/Ɍե~"uouwHGWœ]l[},RnXnZ
ݸt'ڿz%>XDи.'i=ei%-B
L7.KMB,	Gm3У5Bјӣ.٧GW/b\?宇 :V~=	bGYVv@F~:GmVv@6~=4ѣbգDf2TP"-~$+"-WBRH^͹2ztk1	)GVv@~ORv@~SR4գlGf{W--mxlxtlxTlH5x4lCruMh>{<	{l5hb9QՄأ`t/.6[=J&o׷_ũ<<A" rĬd.Ɋl(=aeAr4.
`2Qg/O SҸ$n<'[&rJV^vaH`2iBN95XǧS6ǙsЧ<r}Z{aJV攄_h?))ٚ<->4ŧ_|{.K {KF
,ӽG
\Խ8#i}&v}z3eo`}jobgdeȧS?} w/ן\A(ͩD~Yn:{{0_6hJޮw#El!oȨm}#;'C{M{dtedod阮dd&d:dddk	F7s]o d'o)7,)Y{G64|BnjW|{O飀&ȷ5nxZWD-rcx#7"ߖ0v͕oGs5ΕțDG&
oi5| ;5K|C ?m(`z3(=@|gQz$%I=}3 E# b25hb5hb5b5(r5r5r5hrr5bZ5hbE5b05(bS5bX5b]5(bb5(bg5bl5j5hj5(ju5*l5l5l5jl5*l5l5j95j!5hj
5jv5(jB7(j7jJ7,Ԑ"nXyCܰPca5fqÂ, Y-
\Vd7,Ȃ!nXCܰa% qB u Y(
Rd7,h?nX1}ܰ aMqâ@e
hVjJ7,!nX#IAܰN0qbX
Kc|7?nX7t(_t#&8$4,Ȧ=YX.cʮ_Zx
_Rr7,F7R5V
]lʓ<mX.7
,]َ
|gꆅPOM+9
rp7<nZ,AxܴZCi qjRa7
W3B=4, wPw
kX亳KRΠ[6,9p;ti`ܰ$+ҀnCBZ`؃װc׸aGq2_U 
k > t7, 8,n9n9nCv2 Ҡ
qڏtٰ3t;@}7BKkkuJm;5HAǗƸAŗ#ǸA×cǸASAAӺAA[SlDI/>&>I4z6Mz6My6MZ|!R%PC"u	
{R!QxRATvO*T	̃~1^g9	b/s	La/	R/e 
OgK?~> *$L<I3L,<I3̽Vxf卤lsПua#V	H3	f	FH\CbHIݦcH-GHo6-8	ߩq\éq]zp_/eu& Τ֕'D8qq'CQ;ڠ:UA)$;F>>3Jcqo';*w;1nI&&z~}]1<bY"ugqWx8Olڼ1> ww?4Hl+ @lHl[x>P@->	G S,sqiS\U)toWNqW^ >}1P@0@[ܵswHPùCvK8wHPD׃z~E
Ç~ZG1|M5pMQCV%^QbB'4p{\v;~;mFn7|m"N3E;
2cvꨨ`5utTfR8GQZ*%横d"rtU(&*Ib(
jR5YTAMCS,Tnk\LaH]Mn<p[qUpGQ"rTx#Z~ڮ&
9(;8:>Н_
y+	EпDn1*"BOqJ#Wm

aQ#wn1$dA!;.@ӋZ睆p5;
jS[֮9efX}#kS>Ƶ9VSW4oiI]gWBRW7klMZS9嚴twҚiIkԓ&uY̅qeAХ5.^M;C5 ]UIzlBiM'Қ)g%2RJW/:gA8G$en^Ұ<4"*Cu(x7IYL:k("GeݑBZQҊqH>{Ű/ޥj gGE9:3O豒yQ
QkhGeZɠzpBGC%}jIC&CƐ5{5jG֪/}SW[V$^7WxN\mze8qɉ9a{ 4pл^(ߊeQ^K5nI%.|GWFy9Tl3G{U_3.Ne֐ThGHȲ|Bk2TBG5$QmEؿ8y#%*CxGӵy*Vy6T:G
s
s
s5\<wۘSmlnk
3[&koc":1'"q	U3W=3sѹ3WA3sۙOU\xʛO`C+dnqp3\QUۊmnSYf^<lӑ)3EɻtdjLq(W S91w؋,>+a3:G's")ެ>	!aY}&OBbȸFoYV0u}.9R .|3B=ve"EOrfy]"gjPuq
\]"|].W
+c)̳+Z*puYZ,u1	׬I^s͊DYQY8eգ$	GA6k;v<.!\tp]*CyFy.Ӊ`2 ٻ05!3tjAu~8wnGܹ%rn9ug<H|7K`2oB[Q'(kaNP NpFԑ_MV.i0̞᫂=vmTecnʣl	w2=z
h\C1chQg>c}&PH#n4NzH&㔛cU5|޻<wʍSj<8i|cEx$jy%ޗv*܋;M0	5pΕsOW4i<
|8[{sԭxO'u?qhq68ThxSZvJS;:,ԒcKΪԵ_uF쬨ZVDpC_THr:#}>2E9SY<9%D.A抖76dO"3"""$9.R_TN'V(Dr[<Wid;ѧHG*FFT捎(+r*yb\R?O{#qk½m? y	L*2$^IH.6<QjT'(M"!'GGG 2Q #DG8F(B2Q?R(
އj2u.\]  n
G'N)]U pu~WBɹz`RjBa(WwEe>H :X'(\uP9r:F*pC~_"$pu~WfUA#
Q
WQZ(*-Uu7!.rt	o-HL,$U,/ 	k-:ʣ
YT3袨?V	iZ^iLά{=zXRVMoc~jj~_I<Kzr"^,>9{ox[?o5y|sV&oylOyP#<m*wj	0j(7P,sGzEp`GFrbKE)8g3Zԋ.-C-ETBy*jGpI>ESFGUθS1z1S-^j%^rF\Zd\.k W9jܵ\8
\T+<pp);w!26dq[212ncnk zlX nrIyw
Y˹
vq9,0X3Rx=L3goRC)7'wiQܑj:H s#rz",d}웊LÏ=,kĮX +>2vM8ve2e߮4WJmŎS#$~0gi*RRHxZ=uK)pL=C˚zچ7f0BDjLqtUQasԛb]ճ
k
PW{Fø@T%%䕣KSe*܃07<=C/i]a~EGIh~a(>nCh5#>C2rGcZsWN/.䪼gU}
wgNy/
4ht=qp|lU9v!W!渘r%C1JSD,sAsEqs<L5Sg*P=HV] ch˔.H==Iy|_R޺(0:₺,0F#/&tՕEٚ
"s5<Ld՟]kD\/y&&IF2mhf=5 f=r Y?#>#Ո=8(N|D<p G]

R+6gVjɔ[iw8@-4-; [j1@{ztљL}z)|7"Nٻ ψpUO4N! Xb/>e=rWr;|U|0w<g$	e$e$gđ !&Hf16љ*b(|EœK>=yC1{Bq#t6@,YMRKs/(&Bg-/}%igA͡C/=Q͡q-+eS4dFVbO=pYj۴g%O>?h'r6x&&kT
GQl1nwv2p7y|
2᪴BaA<{ZWY=S,#%Ez-`aB	q"G
[[&ƬRTKŻ7qY&n՘e|
;a&RC5b;u^*a5Aq|(R]Zu>hqO5)>bWtpu(>eDc1!呚]Sfg7йO@, huc(PX.W)^WU?B`OUI{-1j̰cur#}:ҏ+8]_aPj6{B
J<J^Vf!ɢ! YL`<}?t.A*:G!-"/ HJꌤT,yJ%]8,\ևHFzMCdY7d]!IViM `!Қ@9
W
q	9
WKb*ed5W	_
[[$f:Y0IfHpM($;,4$+Wc|BKqijF>c0ˠ.p>E.E={usDR'.H5bvIasKR5A 5t<d0B&x>$Ao}+?<7~X=gi|Xi`1y]&
nyN~z=|aPmu
J4 _ 
S8Wu
b@Vn*9?ׯogUkթ7e+s=vӧjpjAXi!_WvCIF8=YӼDT)2e0jy%\z<l#*fPR김2G3#`xy-#Ye[q0ϻfՎHvaq`wv\)zZg&oJ!vox:JA	BЏpů˧Ob{^X~XwAֻb=wK?C9M19ɑ`LGk),gL~c?r&{-1թD{SoLv1ṆƤ<Ĵ>A_w7&>ߘxO~c3R5A(u	aK7ƴgoL{a=I7ܕz0D)w.bkj[ VɝDLrߘ򛒗ߘ@~c8QqKiXd'f 0vapdWbWL%C	f.
5cx2U)V#-K6
8}q87R7i̱rJ).SWz%Lo/nƽ~6G{1zBOJJ_5J3
:CƭH\ҟ,.A:a.	Ư Yg.P^z(Rs]x$b*@'BLDd LZuܪ1^v@ró/S)N'R	XMߝQ]ƄoӺo}ݻ \% wSh
0o
Kz!ߍ77Ş SeK?|k؛և265PỀXỜ"c C53XżN/"X!}SW	;C?H51 1H0@J_?mt>2}Zr~9r~;6S_A9?@QI ~D|ޥ9`{	r~[0C>H7Pށ~>AA~X<?QD~>@Oe\s;/WKJ&I^X,eR+UFoŗ\ g8-_Qy>z\-5,
ZX˟JŞ6㑱PbåVT<AEXa@rvuZzUSW}Sffu=nvO?(v}X %1V/i%Djʸכ,'vϹB>4|BEe2NP{oQ	buDU<|^K\&VηK$Lx9Q)>-AtbYyU^	ds)"SJF(%|{D_֧O 	udmOO+hpvLqG,I$ep]^

]km^=-f}<@iEtAcbIeؽB=.Meo'N[j.y9ڔ*'i9-	c
81<SVS OgnIR_b;HwGi|)K8ᴆqڪx`55iyЈSS$]&\ΠkrY/0Zljzd:j8*@D@QO-KlGh,a eqY`fq)A0E#)>$5Kfp;=5)^\:>{~#t晸x|9:ts#M>|~{IRJ<ٜhCc8'1z4uCyl<Zzmoe@RV; Op?U@e!H6yXm_F|Wŏ˷߮epjeDxG74XxT_rR_.Ǔ/VTI!CVHJ f=iaq;vfܬ BR.@TE 	/PpCtMdc>20HQSDSQw(:cQMԝ㶙''Y]pxX=DOܭda.)'L((&5u@US_EG)h(FNbRJ;̈́TcXU0` Q@	'쯢po%nr;93
(BQnNxK`+ܿ/O' .tf 
6Q*+<3]Zt! 50.ŵ|	Ƈ+i/f-"nw&_'i"z	|UC2.WIĳެO?Iui;7'i m&wi!4WBPՔ<-ofjA`<oa\:	krrQ`9h!.`q$MAaZvhZ "fߛcMfޖ0hH
O64͊҉0l/;i[ED܅~V<0$Z{؞uubzDx@y&
JRXJJSjhmjV_aL@/8SQE$Vj
y"Z鰃VRY~E*HM_bO]VETYP6h EA-|3-.$l}Sy}862-g3qb3-mCLMhm®v:gܢh㩝VA˼GV9rf~lZ 0P#J<Aj_ynCl_cm	y=UʦFmP`ӥ۴~_e]hQk0- B)?܈gv=	ݎ;a- ?;Kqeߘ t>ן38lybZ-?*=8*61y+~J&0xj
̴YI1Y6,[kEe 瑇 R!ZהNA]Ϣ=іn$B8敏\&2tl2S:PNH~&sOV:	+ݍb-ldX+(&v0@J٫cPE5RaDZ\_h"--N?mw(`N)'.R13]mqj3B>Ŗf/4A(lOl~_ov%=v8l,f11<0CGe<0G"Bh&nÁB3JIC3\iymJW$
mY"
0ye`޹sUy©h)yhF3ix͸at75>ڀmϫ
a%ŗQPgp刢20}>CRHVyhF:ǃ.Ќy(
2X
9.l%jɺ]aWڴ0rp0Jոճ5ah:,,hgJL/L+<J&"Zk;Lyh}F;<ǉ5,=`͈K|(焢
׳Wuc#
k;X<I-Cνa),FΧ͙Y#K8jy}`OBR2Hm&Nm{r<3 xik ?׏LZg|ڲ,gC lQVJ[ErTa-dKQ
@m-8q:84qaˀ5w]*S@؅ޟ$V)vi%ނN>iyBJ)dw7m֥3^um+W#{Yj
쌕'`yV3)*4´TuhՂ[<8У*qn(-3f봸-1O"3 1ǃ5q_&TΑO+vaq8wIiY W8fO?nFiC}ԫX>CTҞh[{Gi썉v&I<=Ccܝn%6ITlr+8޺qygRYv%
p=IlH(
g\7Q&8Ƥ1y>eS<>HpGٍr/ې:t_Yf	MuDL>BtQvѹ{Et7ի|R4Љ#&>A,{㚗㧍lvCٱCu,ƫYy&֬~'u%[F7Iǩˮ#ZZrͮ@6~#"fdW,Jdk]l&+DvwȮB6
%l3BqM(Hv8g*ۂdWPm@BKv֟8Cg$~eO3M>qf'\YFKkKvVB٦cW$[tew]ͱ+]9veǮ\vU&ޒ7q&P~8chg"[lLegM쫉34q&Rh>w[gtLܱ;=3qS&Lĝ֘ziv80#Ur`GՏTс3T?Ref~hHuOK܅nii~Z@{W
]@T
ĺE@S
+@R
@P*n<)f1)n/)趒*)閒%) 9bbV)=&zf2TvQ͜jnp6s|Ӫ\f
aB)_ځ4<aq7kO/xodL)Z	r<-~4hz7{fC Khd1I@k &V/hV
ex 3;vdh:FF]@)4M^h=pc4RjbMh|k.Ki[balgݒOhE2
MJ95i]V.!LZi줜֏o/oyIܓ}ٜXofY^C3$~!*ofhą"Τ{\MpDcҟ)],eWV ?\-qE_VM_˾Ha Q-f;TAd{^o|"J{>/OztJ:9{YÃZN0%EI`J8Mݩ/:``L=1ah #DM[G
oÝz 7ԧ=vMyC#}L0y;<uT\QNwޫم;5iV͡jsYrw8k&~Q}{فq;A>\4/q/RڟczA;b3b8Xf'[y)Tmkaeu}	(1\Aۋb;-M +B)#"2n.h66eq|NnG`O8Sl,ΰUsظДܨ&MclD{e=粓΃_`r}lzōRAȊg8W%TO3oA޸k\#%ރ;AKP給ƭ1P9<~{X@ARĦG+%)?"DH \D;n'.$0rRB5$_#aû?;qiJ%w	?Y7<鴑/-
{ntľJs_Vꤷ8@iNF%*҂N۟N]k:NtE$uxv44n0-
ǏN]и'VV۰jԅD=;C
=JhMhFdH6+'Np̆u3;<bT >٫3~kC}~+Jrs,g&̀]4jK;\.Rv;O5Ֆdˍq	ا'㉦u#^zb_ueOEdQ҄gh@&{Xc2D3XmH8yJ4ʻh5MOuv8f1U2mDmU9>Km#|yeDBQRvDjtBGA˦Dl &霍;_;;A1.W*OdJ]ߪ`:LSfy}ՆjMEݾ$
:I݄-Ǉ~	J{aదaX~7¬K"rtTb>dZ}]1 y'BmWr$Dh$'D;>>E[F8΂
ڤS?A{ N/oC%I0`Lĩ&s~wg0\>i]=OIb<oםg7Din[G`U_8d{N_ZC0ȸI6N<aJa &DQChZа_7<J|) qӠU!I-W6֫/^aVYe1i"YIG dFȰN-.\qmHG0_njI\7</HJ҉k\&E%"3te"L+Z"Jnhqf祎֔^QȒQ]$P"dYHo"4nAmWWttHH:}ڙ!-Nʲx]/+֍H?	9r画F	eλ$,fx.OЄt%˙-rk\9Wrd#YZe.q?.:Gh7,4'XEYFm0nЋ+ɒJ-,v<=WO'Ko`fM;]epURPǐR-Str\)eg>{ɊiUq&pPdN>o ZIo'bĉѴDc
L(cnpk;J:Kl&9*'Wd:b+#/M<lZeq8
_Aw}+~4V7
ؚ#W$j͔/ fuh
__7^IEwI);u[{3ݝgֵ9N^C`ϲ8e9|V/Z̊.bJy5cgGrw..&;$YdY#t6Y//ٔsG@5\)MS<o~2=5̿@&G>=O]VOiRO@j׋~g:A$r<nv6zre3םi?\'$20;IdMg[7A_8Nug'2'p0?!d=?5s0 |J`Zx!> EF-V˷~qte?}%^(RL?pebwE&[
-/AXVbtd&vZ
P@և(8zmv{(_|HEߛ:lܬd1Nwj|Y='a_/6n,͋ÄvexZѢ9oChq8}G>H\~1Kӆ3U ir9,{~
F}8I64'2zVGXo]~1-_rMvWLLJF8@#
?#oD/ݖ	
 ΘG zD(T. IJyB<
UĬa"3IbYɈ}TiMU3b*'aljU@ɪNcu"ܞg2q(hi?B(;/e}
nfunnIW)|/_!̵\mk"z^m3qQ?@)2oW1@qv,.]d"?)-,2
/J|lS?&}X~o7Kp7C,v``yNB$rR|X'䤏omr F"Ŀfs :Lk1B(D{,>,a/HYa#jr
;{X&0%_ϧh-آq(gBJ0ci:qf@1rpA-,L[r.QHS:p>ea!f<b(ii(6O@dc2i$Y9ܑ8?:Mw3W=Y
]ms|^D} P\ 91
!<z# T0]ޡMuq5Hh?r@Q5C*@%s#&i7+M.H<.Ïz`0~&Բ$@:0)pj>hN%6GyY,˲d\,Od7'Bk>"RC4Z#2<dD{gJ;2P&f>`?6.S>naoՊc"8o4㏔t(4(>PFtֈ#*ho52!$l
pՋ/};!e 0%DdCH
1^ 
D/ͩq	b(A:
)-""8JodV,8搉Gl
Q5b_#2;P51T
h&oU>*I%Qk;K@6
MjeIFadLtD!@Vзǈ 1
^3M@,tg'rc >(W7[%BB&Ȗ)K%$SR8϶{RYC*)Nu%t,)/0Œf	+JbF/D$5?ۇ4-A<)݁>B'82TN?K5I
Q8w/%.~;Q{1y'W	-G]Bz`/@oR
G,*]Dgo/o_v[WD(~XWyÊ"		͛sL{Av{gVv]):ݥ)(Ye%/!CFR`bRpWxǬqXCwd~k4-a40/i,$tmdNjgB̟
57
̓įvg p xA3BISZMfGf\W&'*iMZ}}Z3q6
?a,ourwxZ=~M5?)JO
w猠\0b1H8"Z#0\0g3̙Ѡ(1Tg奖c
Pk%֦4?RkͻkY3(><;Ykݗuk_묔0:ga%<,'3ƛ9=}
rs}JS|GnzŬc2B&3\afXw
e
d'M?-tFٺɄQlx[4n>)o{iYjkȷ s#K;.Wu6hi1c%+eE4d1xd8ɦ&U	,zWͲ̹av-\n^w󒮮
bKc<ǵ6t6avf4vRok[a)1:vEg/)Yβ3[ljX.QOh:6˚R/!Zd>,^eJhL6].e[AZ<[cc_G_;U
ZhlnHzFKo^\Duk˥Zot!jf1F8՞ܐq8KtFQ[ 0c4a
7r^kϥ9hkhl^5!F/q.?[4G48~8qq[<m.Nm7m>Bhe6-:m6tknvN[aNFܸlTe)s.nipi/۟b v=ikſJi
0űxgZM0XG\nQc{|cei	Tk D2	S{EqK*s+G%eO
pnMxټ4;563B
vvm%oiK+a+,;Fs:EL<Wa;-k}1ԽH9w<':pβtv>u}?5!3 Or\1sv{^uk>QiƈL:e`Μ˧LC\[\}םJ\hk6?d]ARTʤ>h;Iy;E[dϾTw*w*4]gNe&lCSԙ
?h=bhoKT6ߩlt KlIeyiw"ZTE\}w"ar')wJrTEߩ̙Sڭ	cwoQQFiM'U'N}q:M"tjk(MWq"j௎Xe2XWОlv^Oe)Pe'mw4?<2M
12.B/NpW69QVKR	8sHrh/#5g_tqFnV}v
fj_3K&-wk롭hMo7QDM-a[׬innL(/0|sG	66667[DqY9޹13~W-x]j7t<N,=m>/{-n?KHV芼2ҕ1uZo5N4Xڒ]F"%ThH$r>`b/,Iifhi83rʓO5R
vwL6QJ7dhh&y&U۩m93pC+ӄZrCkrT\Mc>]b7Jגd@
WbL^ƛB)-RTO:.:PQcTЗ7SdW!Wd$.fD*LU&Ӣ~!-=y^T}&5Xa5Os+w9yZqfz3UbHIxJ]驔dz$8)
YAQ
:VGå?cKۛ;9WJ:ej:?jiTv:j9I6UL|sbtZ4-hb2;3mjki
Mv4/-]$_y%+1#&8j{h/̩}ޥSό)!w%#]'ttah٨nɄg"+4QNV+]LLЈĥy躕lMLW!rL+Ǆei)J0I'!)|mL`ޔhi22)kbpqB	6$WC,b,*;LhJH8[<xw@HWi&ɋe=fOIxJ$2aJ33[3Iׄ^Or
d8m_U m ًe76˅c.d>9Wqm7zL20Do1=8ErfO",3:ܔL7Oi)@SLpCni9䉛<wn<w
)Wb,8S-j{	n 4Kb&]T!b쎎v#7R	N&:
8*D$͟2Wlm(˟s2/M3!41:kIl$>fj)XƒtN1;|xɱyWdaZeb$UͶ -:;kѶrh3)C"K31Al.32L)ʤ
gWCpгT'97mn>KgXrXڻOL3	
ޜ]sgbfbLˑ`3Jӱ6g)8'a1LXSs>=ŢUBw[Zb&7(tsYZ̣-n\F2t=˭eʒ#+{Wѫٗ)g/,fY.w 5BҼѾ!$%z.gtN^x_0YgM%2e 8ecvdM6~ؙ
]A
mnP%-tOY٣TȠ:CƸ
d
u[# Ӆo&cGYǅV7ќ*D?
Q>J񔄏Ǻ٥ģ0?y9~6tl,u7yτS|0mxE',DqI Ƙhz.r%}xLBHgƎN
]
3
5iGRl	DUw^$%M~i)js̎op6n73Nze\l'(9pW2e*dW647
xmOfUocJ(h ]mOMtnՙsY7ZiXvo<A+/v.ojMؼiqs+zzo0;rD
ZpUK-s=ʯYz"z7sқ\.+.\kXʫfʗ,\«{=uMF	+u:s^YL71:z5kVwwI%vg+kAwaDs)um=t6-x1׿:[Xm1Qr86%t7|a|0D'zGN8
-nCEz{jąk4Kw]IWZ;嵋qO)j88ëLvH"4.%dw-zM8;D&b(0y~	񈟣GVU0,H9׮t,hqlM_/F餞YcST|@n,p-f`
\o/(nvܛRDzY0Ujgk 6f	en~a3SŶ8}u,1?/fBٸ;%(ZZst
5#/k3g9+c&O8 Ա$}iRkqm$&*)ˌn'
XtSR竕$ֵEYox%
2fe.m[
tJSRMR` d9ůMG>ng˓A-9+ލt}3Ž.fh=X"NB?p*p"ɏiK@}*Jzͬ['za#ѐ
y~g!wkhuڠ"K	"(K[rM@w4C-	Z*HWi}˚j88:	Uqw5xF?a,Q#GM"?D;GJJ'hsbP
PA166\Q
J]#w#͹ʱ([m)d
J~3,BktQd	3JY%=GOVjUfi1R:-7	)o+,<aCy1꡼Xc2%kL+l?vHCO_bxɞ\`T!z
1*Bk$421
ف{.Č~I.8%*]c]}@MKM}l"="dl]S+Ҿ΍MmhԬ}1I<EBP`4C8&5y{37pW0s4[CL*N\ s54X'k_竡f}=V'&	-)VYXt޺Gix}R{Ի0RAm~j6(8mPqP۠ᠶAjrY#C#ц;K69qsa΁h#QG:K89XH@΁h#sE;M3ۯ5JI3$/Y͸q9@toXe"nw
m]Di[m(m+bB7MbB%Ľކ>ٕ'jè-!qec3mK"=Иm+>_a:\Dn3Mr]grߞ\(%A$o\1Lb֌DېBO"(;jtG6ײ$1Sv#
Z5^9,ɾO_ͥE5{zzcи~ѮԾoB-(Ssc/SB(8oW;E5:yf_<!zzwc-W&{>j?WZo&-nrǓD~.oγHo!#&lQy	i7gvH$ξi~5cIwG
!icmCh9(WӺ=
"u<vtK!$]]rHm#6M}eVn
KeqZԛ鳺gY83)V@e֝b	rQ5l vIyJ"nM I~"kz*}U^Ԟ_Ə=VL#7Xxj}1?gP՞Td6>*O֗l'ϲwB&K^ә8(qݮu8SxXu|)Fҵ~KHpℇ{|RߌuFV{)Ϡio$Xsl̢E
4p&ߧnu
ͳn[aݓŃu<mNM2	
ka'ɬ`<˝kr WtǸ+!gNI<콅Q7ҐZZ<GhCFhoiѕI	dMYB:
KSaoM8*TAҏRAdـ)SLe)tlؠYg+%i$qbBg&'96J^}(P1gbEͿMH3:t\ncG?)&RDʮ}&N|Iu{!^}IX㳗@Y3.+u3wqj"@Q6
#x[vWA]oY9T6v.M'RĪBOi5V-08_y"hs&X`иE\lcpqel"Yռd}fe%c 3sF">k6HS86Y)$lp*x)Y3͊XGgy1/c.uyY]:Q4}=bZWSFvݩOk	ua9Ag.G1UerNKYrX.׷IH\eŐ8N/|--M \(101{6ld]7#\7

|M<>3Q
p2Lhxs0=#Vbځ͐S%?[L6Ӱko:%&hr1@
1i戙TJՙxā|՟(_"2qF
_xʄLXƟڧ`"ې
H"1)<aa]OGḻn΍q5}U5$9\>pP;30$Ĳt)IJutn6o##G` <a+Io	<=DEDCή޶[*_ښ{t8-_*(F{ve6ՆKﾧDs
CW{iU6YZa_fhk#pa
^wwZ
?6@|j&Ul-\tn&WsMXw&U"k$뮿[[zR*_mvw<ʞyM#՞;^mtX%*r:jO	{58іͽVjitST3+ay.P,{3l	JWqΞu!UCL@lM`I;48`g~Ɏ]U;cB41VOɶAզF5)ݍl4WFTD!mpT^[QUon:WMׄkýn=mM([mf5Vx-M9?4+b&bz{(j-}5C5ְ(H>Ζ:@j>J1-^1ܨZzfxfV38#cp2I2$2ÍFA6"#H+SK퍛&ܻ"cioDpZ?/hq(hҴ!m Ň;2ްpKDRݮ,:-*;|4~u$kPњ~V-oM(҉7h?*?Wh
Du=]}tфŠS =-6? alRXFar#{tWYy)
Tw
\v)>=
q땳Fx=0"F_:-~sDLܒGdcu.[z#ͅu2:2--g9ix6+Y41.[lTe"b1 {SUC2[1Rcyy>YR#m^A?:Jw;[˅fGd\Fp1g!
?!~Wl&,h%d֛w+w-
bQk9<LlG4F*@ob257!:gA;L_0_Cd5/coKxqv'dO@=͖n7O7ۄ.Lgg{6Ć8ZO5\>ՒeF
$Kƍ~#a	cizmgrn5n\H7\8i7ͺ7M;}7NRvSn.2tt,}7OM'ğM!/?$Qr{R!ɰDQ*MKqw&)cͅ;Ph-v4.vnv5;r̅ݾt6lQj|~=)'ϰ-4oj1V;ΡxjvKo0PkP^ouwX'fr^[n2S{R
aa(rƻ7ܚA2a}!rc7\i%t
7Gڗ^jݲ|ؐF7MMɘ2	 4ȩ(bLƥHO8`5ѥ!YF:R*9cmSQz&K0&r1I2f8hi;2ɤanҞˎ#hE/C_0+6k)GlM9hOuϔ=pÅӭ)9HM6Љ4Hmv+sX,KQBǂ
'][\d[@'
AMSI*IΥi$}a%ѿxe5%-ݣ瓩%Vv#\8.AjJU&鵾X&mE(Еg5kVFٌa4O2ёug4*:Gdֈ5¦m=M@3M_^@ֳzzmx)\ڝU;S3O(-YM̞iG)qoqqq`sٙjod*s=?Rq})m=f|G|Z!PlyʜIi\KN0te
g{d:
ղ4ZH*dޥ_	ń/8qd3d
cyDo/rh^k$Z]7XLKƥ?EJ%Q7Nf3̆`$#BIs
.c2yֻq؇ۺ#ك6MfrP;RV,w.Lf~i
H'{94#Dqh°D/6I!Oţ <N) Idbg
H9]XK&jAXKye(|4SJl"[eh52ʞdos+s!5qg6NklC
^bF*~y<i^ƴlLuʎ	Wff[̓g"96X%Ij;gƮ\']tE~}z`Dhf@;:qF>㉜jtD;
$@7!~_KIV)k+DѺgE*4	`3A++|0(5^KOxկZPT?cN70Bq|O72>*ph$+B(ɈiB-aiAۂuFS~]yOۚi2ǵN1RPsO)R1-ǫEEK`StTԇjzj-fzTd?08[	d!#,yw~*z;SYQ#+X)=iw!6f=ڌeDyʃ;Tɚe.Nq襣Sbwv%)Z\D1^:zVRNUx6X:,AY:O,jcqXTj	Y
Nr-ͣEgLeH }-)X2dRȹ#ɵߌ3%xe_?aV
Ms
tF퉎T&z&Иw /^pau	(GR}OoO3TM&6qW#zMs)rlU$+2NDe&3ƌH6CwO6
TLW]*TVhNiw6V<12xpޮ_STe^xL{dRx%gϮD
W_(.67M#s43{7nKa#WJ+
L))V*7)é= w"	
=7
KgjI*/cԣDk*ty)̪:hTP=sWզ연h'EM!"MZPKZ.V"3/C/JӍlޔM=wY*j}{<ΑJ^ L7W?wFyM^*92Jv=v^͍+þ0Ms]-m[7.pEp%4!OkPDDclcksㆹ=zqqFgL}3/*2A͗&2̿~Yf~=s~6Z|nԶK]gs;fi_6?}ڹԖ*n7?Ղ=i~=`9_ʹї{L[egSqӣsk~i)A_Çbϛ	/eN܎X:sSԲe.S뱋vg
ڟe~l2}̤
Ř6cIj~$e>c~zbS_}o/KPcMi5L*I|'}o/K3g/י&]VRuy˂=l~Z|gG
̀6>}kݍ:8/Ŵ'OާALbEYqC	@gXNll3*xz=<7c;d<R|j޻=wߋY
d=>=kviI
V[Tlk/3?66?{:=X}>u5b{
=i}*;
Ŵ#i'rK	LmV2gyb`oxXaXjjٝ=v狘~a[!}ei_i;fR}^	+:f\~kXN{k3yLM=aڔO{ok~6{KoWs>9sTRwRmQ9`
{2V?,ϸ¾ؾj|n2L_{klw)F[
f_ziLo/O/yEz˟^+^1?s0Zw_f=< a(wgVG~sJd]ι<HcNv]GKÂmL<׮L}|T^Q؛1`;0='Fcゑ?><!H8ϓ@qb`SQܺO0s#g`?5?O{{dc~#=+{|_0<}`<YFۋgW><%ȳ~0L49sHU&g`-?\ma7(m̌uȣ^k_uǖdJI<'9i">T)?RhJVadR݂ќK,G{?v`GP*?:rGJ/,m$v`$`깻GGَ<;yi3ȉƻE^9l<XSGH^(iqb/X*yO{y -e%=;qL;~$֍Ko_Fq+$nT)<+cΟcΟ`}?Qve?Qv.-;ұGOavXaG{uU
JۣC
;wfpD'Ϸ֧nz5Ӗ5fTb)p KM2w,,i;BmsիN0KaϨ/b}CC4%Gӿ3c)XerJX"${cNbo,28Ha{"q\#nbkK,	XӈU-cqY(-zNƪG=_$޽걷)5(>?'"=eC}Se*UscL|[0v;>K)&N
J0{KjVyw=(~_5YH0c+=RN
6J0Z^TSw8}jz	znk.>oc0[58S<=K9mj`/`xsk"8oU]C"$gJ3)e(w'g$gU[U;TbLi9xOu	^B}yfb5O,\7=mHQjDND"bɘxH%R8)nF{UH HVJalKwTUϫ2`9؇sX9BkZðjMz6էRΝ<;w>wd|<C	vǰ25&}X٘2v	llØrØؖ1+TvUK% XG*HcX`8j6/>S0cGK<6ތK^kbd<z	'fIo&^L4Sc%4##!*,.=̌j&
F+i|rfF	L&X$Q`$ł9WdǦZ
F~`";i(iT2ZEIO5ZU3XJX4ރL
N^q.3X`-VF#Z}dcvF2VҌ/3Fnƛ**{Y~1q&xiŤ=W󻁑O`~/2ZO>}eE.%NFWh:i`[}"~	^Fv{lnE.ꢢQ?lz(s]Xh/y`~<2D͂.2YTʀ`AERcuEѺ,B+s`w2hų-[RLU:[x{F.7oWE.(Hl[qĻ|2߇只'pt).߇#G^**ӘV>}O9q>BOTN=cQ_qĻbSڜ9b)sb
skC[Ivw-#KD\t&>UU	=2%.FO@? }AhckюRF;J>m%m,ݎ~u7
ZNf,ZNfjAf#K)2o%օ# Y\sd_H$)#+0*Keȼm橘}0#󾯞{jkh9Dw柋?D]eΟXhϿ0Y)fHأADXJM+_VϽ|[]kl5-ȉ3Ul,sAV-Re^X9@qhzN*҉{
m<
c!q~`Ъއ'{	-u!q"F]`O
v;E$MoAWSNeL_:ZpuH~cRԂkk\Sq5kUZ7!@]85jx
y"`GZ
FV>#˜dyv,#y2!2XFZ sI[e6q#K2z$3Z7^kd9DV,ޮcEZh+Uڭh+BXcNWTC̷U0mjg+U(UeUYW`\]=GURRVϩd5rG֐H콆'qq[so̧אwq-|Iv%n]Kv+Z3X|HOt.>w22bԪC[[Vgt#wa

ؖzl}dgՒc=8
8_MN	א{Qb[1hT[^UUkwLS4lRQe|LXs	<k.fV܄5%'
e kQn-b}-5N(r/7?3_GnH[gqUӭjnUt[8ݺQ9ʼW =nlk_rnŶRic[ڟ?ڢ<m*Syvi7CdûXf^u̙_cvlK_݅mߋoSmyZyH*(uVwevsvUXfؖN5vǶtc:ؿ۱-;U'U1K_.e]u2u+V׭[_neu+ϫLj&y@]C=jG Уv z@QУv z@(U[ob
j6Xx;z'c[z/.Ve֨2W2TKj:{[Q92Vi/c[^%eXF5xRLۤ6&5nnR~5cW{{{~_2[}˽X-cnʩ(UJ?oUy[~ުV*U筿V­ؿ/P9}A~UlN_a[.a6Ol2727W4e)MmnSw۔ݦ6e)MmnWwەݮw2cy7Xc[أҾmw*Sb0m@DPkjgk@$w;;HZr˝/w*ܩr˝/w*uTZS.ϻ?E}Q*뾨/*뾨E-jeʩ-ؖ-*ܢ-nQ|٢_R~K~INlGw?r>~ݣ{fbQ=*GEhޣ{T4zπ*SEh%ͭbjdV[*ߺU֭ʷnUu[oݪ|뗕o_Vʷ~Y/+7_~sޫƪ{XuUcսj|ʽj|3߫9j|3E͝ң:WT9\mkE͵]ۦm.mJ[en[۶M6_Ӿ*ؖ1c[[WVe=bb﫹z+*rܾ[U`ߊ޾[]?TֿUs*MZT}_Sמ<k_{@cUEql5١f!;,dP|҂`}P9U4sU4sfW*_E3h~ܯFUTJPjg9TgP"T,A5|P"TT{PA%v*T۩SoN%J~;v*T۩SoN%+}]J~_W.%]J~v)RۥKo.%]J~v)R{H!%R{H!%R{H!%R{H!%V{Xa%Q{D%GQ{D%GQ{D%GUGQZe|T&U|T&fPo7lj6

5c*S<^kݫT\]VϩT4ؐOE3h*fo*;l74%o*SJTk*&Fe'ՙ)$ҚCJ|EN&ӵi+'vS</g+vS!{{Y0jjx"猟 ~'(9"o<NN9"{L9tINQwMZ M){&ɹoY'ITٓA9cGߕDS24S{)WEjsLv5Q
y
97_mOEKӴ-'zs?؟N2>}/F@⋜&||7.IwT0#1y(]:C847"FQόg7"yY 9M,Y?'o#Q/g̾G)G㭜1>+rR*g,NNY#{r9r/IT4h_wF9t4DN&ȹTFYON+r6rN]NԽ@ir*ꭜ!ys#ʛ5?dH-nҋ4ʩ
Z龙Ws#`YKsF~DZ0z`ܯ[#{sF#猏?&)gLMN'92yE9/2r&e:97`
#C[N
vk1hJkQi+~UkG["G["Ɩ{=1*w7d艼{uj^}\܇9_Zj"Z)EA&ʗ
xA
;0uf!Ć-
#?/цcG݈7^vl*l;>
{nO'||;ӧ?߃Ϗb}?)}X[Ȼ{{k5[vBIpbJ;7UDN_lô_c^57Ei,g9b_cnŤ.i4bK6ؿG&X!z=&vm'?%0X`¶*tbz;b^VοӦ1Wf>vcaJ/9k9y`&mrL˦c@J1zM+`EQF,rHa*go<v!F!vbcL[fz:iFwfa3
6{-bOE̴3!i^&ղB0#g`=n+Cnqvӿ
Vo>I0#3Wz`V>`/?!{I9 ѯfxD0F7'_`|`FvBa'v13AlJV
Hb3}`.FaFb?+JHlt`2N	F'!y`FbW0#Q/
Gav@avXaGvLaC
;
;"QX6SaUXVaU
[)^a
VXUaKaJ~F+V7Zoh%ss73䌜lHw`1<Tf7Yf4U4FTe{ViF3 Vf84Uu;"2vwD.ES*ƕxicn`e*:GJ4ZzfT]~F[,lJ3\7Qi/!F:4v/K3\*|[eUY/Qi֪%
4z_V]*}*
)ѭm
4Z['tGd`Τ$S7kJ.o,ַ
"vE4
6N[0eo,f0)_0eTѽ)o`*v]@E0e-)"{;	åSg&E;S7nlJ3\*)qOK0eL8GPid	oߠ`.?.qdRidOo<7\*|d2RidO	o<>7\*Yxe6Lx?1W7pX';1/M `	dS7p)@`*yM ;,	K/oٟDV4S7`S7`3U+)HwL0e
_LDPid?LD!M4\*De6$n쯄Oe%Ko쯄OVJT/SWB'e%K2/.QWBkUi+åSWB&a$3	o͒S7pQ)dtιի4åso9cS7pq)dt4Z(L$Zu,?~𜩂)L+TiP&ɆK\$ɆKLdås.l@.3S0e
ΑU&.s`&JRMRiKsėO65G]~N1<#F92ZLpS6KSvcYU)ljFk3fx=uȁ՘)4ŭ{lhmF)v%c{OaFGw	vȮz*HE``F~cSGt~Of7f*lsߧ$UiU
[r]ш.<ȯゑ-*m@a[]adGJGT*S_N=D?>JjW$SI~#/U.s<6~ϊF|Z0#`O;o`U4MMSkkڴzijmmZ[606MMSkk֦ijmm!ijmmZ[606:MNSktE`jmTmR#QRG=jmTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTɯTot%jm{
Skt%J~ӕ+MW7]ot%J~ӕ+MW7]ot%J~ӕ]J~Ӈpgd24Ҕ)))NL_,*S+S+S+S+yʔʔʺsJ~eJ~eJ~eJ~eJ~eJ~eJ~eJ~eJ~eJ~eUˎ(!_XʅEsw!Of*]B%dB.u92^HX%
#g(UN߿
F/Q9уEY1oi'cj:}ҟK.u#c8@ך15?cY8{쎬Ic}6OZ<a9Ҿ5paG»^ȿ
a4}Wbqp{M&fa70Ljrp2L7p0|:mäO2^{tj3Lv? .C#=Ue0bx	З:1:w
ý SsS2୐gз~û=z&=0?MO3d,
d3ml@4Sa[NX$>Z$*M~'od`Ӑ`Q~3cf{̔{ x&BY@/>gvʐ`n4c2?
v9:s2uT{B?
`޳{-g| {ִy Gg5 >={[wft~B1+(<{WP~`ۣe?gć1L|8P	ǃ8|B;$O&U~`( <0w*Cs?nC/I{0>o\ϣz-3m|5?*`@۟Wl^Sy}sy
N/=x~2O&1LS<0a3|+_1K_10ʪ*_QYCeS*C*lr{* `C+a#@?|E1FP/Â`; }з@
b X'~(p^<G~4ׂX0Ây!gHg$,1g	tzV'Z{޷m
UU@___Ul)r*Uݐ6/$[f0lsa6ª`m.\ls`O2;]4&q6M
6Ek.
 tu;Z ClhkE`kWF]z8ʚ`#W;k\YpS+]\p+7} <[=3KC۪^^U8=Do:ɟmzKT
6R;|5as >|U4U~+"|᪵vj
sU>UvsPq^{Y<#K-,p2b KB;/
&b`;v-nzk!/@kV} wW|j/_]to^`?&^M}q<$kb?G^=lfy}_ǫ;|l#$wo-cKL{|̼q ?ŕ	iNvv+X}4|w >	)XkcE=*bUQäW6*zaR/cz_l5f!R]1L;_bxez3La=ī0=Ne@؀bV)of8
0<-g!|S 66ɥe  x&6:ǣ|W\
ygd@3|2|
Uӄ/_}n3aSc">s؏}n3I~h3CEb#[61؅?9eL}8בϻaU1Lƶs25oY0*~yNz.ɖ2<X$svó{̽@']@?9;ɍ:ZWd{ly &!U7߁'~*俞'_Oz{RaCד-btz5O_O~ݱ>v3L2CI`k!=Л ?wLz tǗIx|t"Ig~t:؈yȪh
o#kZ<C^Yk!ȳ5
57ëx`]TU_$_s =Bn( kM7̄<}Pfķ_0L|c@|7o =u7~
0@<da|ax>=0?<nC,<\v(gs </GE>Ig7Fx@@'~~a3ey#獽7LF!i`xVoہ '8gK< |v#PQa\q0.x{BھQ1@K>ѭ3ϠFO"lОl:vIWm-<[Zhg=	
<z/6l6lzzUzUzUBA{ՒNi-IkIQ1qh	!ƨb@Z^A^t9SCˀ~ihYAgm6TC })z-'xf93˛ϗLzr+OLzű@g@1aotǯ<0ࣖZ>j9ࣖZ>j9C@ǚ OoOO^	]AybTϊ1@K>	 G&{aҽ2<?yE!}kk,ˆ^+W>jV@qpo6l= m0P>{~O:ac8b
c+ ?
c+ ?1}%o+IXW,[ɕ3D'W^
0rG$!c]Y0[zZIzJҫrkJЍ+A7V@7VnX	tcsc  ;$OA~XOK&`P7IxMnI2<U>-Ư:`:Hu@ڐ6@]w(|Nu#AT1Rnhh~ CPsPaWc\quW0HgN1|y*sըжUc Xzҫ 
}	K!?giAV.]Z
ti*ХUK@VtiѥC]Dͪ^hg?bUcY
gث/:Ucl-]UG8jQ Z:
tl*VAjG"=U{.
zNQͫǄ6x{uog6}[=?
$'{apK:ث!FZ
1jVCb#i5H_ :[
#o5}AVBca[
cjVطt&*0LzYCO@A7V:jsv#a
9k``
5րZCa^O[Cz{4kkk/Kk/Қz_ZC>s
ͺ|Lym|
+ۚPס"YZcl84&Zo0v-Gka<Z2]2]2]ZkgZ*L~V`;%YofdkkI[cWv+>v; l|Ã.I9[ 2zuqQj:Dr9@t3D|37Ma8	y<ﾉcMK5 ~Mg7:M@yoB7g3lxs7 BZ}؛ll*]a	ЛcM07sMƾO}.Qd-8gI,}`޷}`޷.	,'|d]5$Sֽu5 l|f/^K7D3\_$vd]+䇹:u@:[\`r [:^Gzzn'_{65ä??c،;Jw|27:;D^ct`:j#Ԡ90сrcylcn>Ы <-
} \d[d*UW9r_@r9ЁсysυsہN_0ɗ1r{ _2| 9_O!dlk{v^t0L~-d|^Ȩr!RC[qo=ȥRrԃ\A. zK=ȥlS=vC\<^z-QdC<ޒO=ıA"ٗo<o WpЉ?2LؠA( 3
>0
N맆6'zlp]փ^Omaj3Ǣ\S?90x=p=Ʌ xpIF	s$d;8#i	yfAÍ44Onq?Ր	'[㵑_ Z(p<
nx%[8#_G &?+5}@?
{n2akZ^h&#Z}-Vv6
Y{<I6|t{wDƱM3w8n0mi,Yszm4y=m3Y ~u6ǖm[B;`|/Ck׵rmj&ڈ5k!?aFzaZ= |l#߲a|&m<$k
U3L0}Ivx|o'i'>`Cׇuv
Ծ< y`MִaMִaMu;'Úv;7zc;7Y,q;)' vi@Z&7^wl(d
4F𸳁cw6иg!|W\
0
7C{H0{g@u
ֱ7:llu
ƸaƸa<<< 9<|xr# xxxxx27O:'`Þiy3,]ʓ>.gG{y3WL*K5@z]g~mU>3Cn0 x]P@nhk/g?:?C >懊dlʓO?O>TzGQ1*1tp6cgNi<u/uG8HlXA1u9Fwg
^Ӻ1gvl зz'q
:0eg	y.< O9B$t·U&d/~Iraw]
Æ~	@@fh I/xݠtɦN~@'w4:)^u@sd/||(i,3BC@?tCMPf(5.%Kvdt}r.
]YI7vU"`۵K!
k!?R] np<ߕ^h[?I8.u.qkH.g`/`/򺞃~6e]k]'A$wWDk
B!REDDL-**`TP<D<4bԈ<"B5*Zhi?E+*Ԣf;wΞsLku?3gϞ9{8%Pr Jлk+AJлk+)F8zV𥅼\]	ǒ\<|Ɨ%p~YD\!"N\MJu	'󳝒ѳ;g|U{y*ك
J`_k%IJ,K"ް%u2g"*8"<_w<GXyg:^FÞ7X^8}k8^.b1<"2WG#;ap^9[xy)W"V^j~jįA8:l#>g6{;΋|<ߍ8s|i<?W|<r9=He;`|X0Cc	^"ڄ1rį	8jG^/jC	y<b`Ny<&}AX&d7E}م<&{/C}DWO}~}}Dh78ȷOD}"e|\&Ogx~lb7a`g"!!w |'w!쓟;Ml@uE>TxpX7R'BR1޸ƥ-E@K{2K{RsRtP
v}~)_|^Ei7u\(w`)!ܬuo](݁H>ZյukğOJmRor(dRPn${6ܳI}ˍ<سI=[4³IѤRO&X~4Ie/GxW棾}ѤH>(s&A}$OT8h>	?`~q_t={<~㓓=4T1hr/{{\<yr)K*ǉeCMf"uYo1nz\~'w-Le;S"2EN1}
2!Np|2h2e?2~<e)*W{mmiJ)O{m׷St5A6_O@׸)
ٽއNُ쐿vx\<{
_+oC>t<^M44^ӆr1*r[ceJ>3ͦiUXL[hp>xy4qP|2
iδH=HioQ,7bo>0cPlӡ&Cj:thC[
LߎpX6{ހ8{1_Cifdy6#`W<N#Q^̀q1ЙgE|#O}lOGx*wES~'}&g\~fgAc:0|?s*oG|h;vK3 I1Ƒǫ߿̂9*m<^ʽ*^SfU2Ü΂T>lz6!8
qۘY.
Q}Py *y`TFqvG{
~υ0x)aR*jעg[gqvgB޺Vx]Y2Ӽ,[6ᾷ2Gߖe'eʊPy*FHMlt%<(D~NLn'eNj|~,_v!nT;geae·:wGn́e"3q(>9w\nT@x#q1Zs#<eN5zv%*zc1g׷s;:w57Mm_pY\ͅu9"t~EliRį:w!nyOC8/1qG}!e^k<#_?S#=%Zz|ACdoc>`{KgT8f"Hf%T!N5*vļ+Goy#r|M/rX|?<ۡxn\7^.tݑ^HNo,n_co/v}t*(i**R᣸Jssj";y<|!߿ܱM?>dLCxQ\z'?QwvG2 ¡?yqg睃0‟gzP?_#*@>9dVFP,;&VGbG	TxSVy+#2ޮ.YOȇ߻"NZpnw;b.)>|	_jpt7wym{w]rZ_vO=·#|w"|ז{`}>p8==ml~זȆg>%2Mnh/~y yAW}<\0~_?,rڃe.WlU"|%w
Dk!|m]XZoCx=·{lBnw#|Pyǹ?Ɓ2
ߋp,?N=tk->0;"&y Ɲϑ9®(v\VDc@|++?;*s
?8 Pyׇt~pGx1!J0@HEbPWr
*עra*ף.ݨ]{Py/@E-*yLuϋEhƔ/آT?F>Go!T>_cz#г>`W,6v?x-s?PWuq=D͇{U5vq2Qnbx'lw@1:w˼r/wDNbQbhX
ȫ_.ƚ[m6Dc%i޸,]\ph;3YRὼ/z-_-)Ben	z7|g^2QђsǊKGp	ć<&\1!qz	,}c<bI%j{#r|sKy~גT?V`<n	υ[R:w ><lnTnpDNԒ{
KxlR6?Gsd)yƥ0.|>.E{3c}
TFkR_^q|./>RBq;\
g7 o%#<
a~=OBO2;|͑eEs23/+F8"~l¡RTCE٥\2[~V2av,~k2gۗBTdu<}Ae=uxG v/s/}x>zv!⠽Õ\Պhzl#iBx6aHwBx?OGfyϑGF lݶ?nGv"|W{TxzVzcW	k
*-)wgV2[CQ&VB{|rD.+!Pt9*PߧT/eJO>+w>ك
܇ھ5޼|4OΣ`|y4aNXyƚ|=}Gx($ll9mfy#lfy.¡//r--GV|>k;/Aq\ʥ<gx˽Z^tF>d9:]}[B޸,_`WΗC,mx9an:w |7^q`!`cY^?}c0<{ z}XwTc~{T6}vI1c0w<=UBG*ЍqUW8~\䵫j*X֬*]|ŎUFekJPz~U}9XUq*G|/D8-iUsS6}W.nU`K<Ʈ羥
{>TޏʰWvCޟ'2o /Ø2cǏv?wyx aoqʽ<`|}#~=98}Ǝ'((x}~]`_<f~ƙ'Y&}ܓ]w3*x|6œx$${rzG#9%HN)3)Cϖ#=y$܆d;s#d6=>{QW:ᬞ$>T6Ǩз|ܫ{!rӪ߸TF57j7<bzǿ5T
~;հV]	9{EkP֣B^u]^WL߱;*C?nO
Beh;~j(3?ĿT2O!?T7Obs-z
pX[2kW^nl墳M>c=u LLQOՊBTQ*eȹwWAx	*TTf}
fI]
TfmJsW,Be+Kx;P.9z-ūѼo<'iEէ]E28oI=
q |gg >9JTE֡mF~w2o=dDwf>qVB^!^[9H+-EyJf31l#Id]+ߎE*
ds0d.:YEba6@|/DjT^P|8?S]0WB~oVBR>S;Q~&^g2z|sw}3W߹X(UpWFx?o|#|G27s*GeI[s">[+xŁI+y
g*WFx
^rռX7oRoB2^1/9Nlm<[
<гg+yl7מF}qS/Yά2V";{2Ċ<6X٭(\]0RT8
Ջa>q5E|/qށc5ĥ|o;_IC8z&o|X3XS}
Tqyܵ~B8?Y=iABnM
=[}GȖ۲h2kykGr釞_! $kg[;+횏e~E׮D8zwmHzvyejN.=H^>ُ@}u{u0v|6ƎA֡suE3q;=κ^dB[[metEg.xwR^R[
q`v0^cD]HW/Au587hCdkPנA"5?kPtV3qFx{㵱fSLE@2$뇚
T|jeX:Ayb5(עQ*?n= ;gOpVC>9?)r9s0!_P*FeП#Xq=;_X25?Z_oǭ8cg k=5׃oC8g}·!2	ǭ_
!

٨8g
Qy0EeC{o>gya4j8?7xa*@2)G/<&0z	V#jH:6և_lfϩEs~,?۩mpD\Q{ qZe(=lāspcWy,ƅ3VzqF+CnzO6B?	6^o	bo	W	llp<e;6!7F1^{7]yS	zɜ2Gl*GxGBv<f5?T\MըsGm3&yԦZ!6#>:k+n758]&XMM`{_m?6>=mvׯsxf9f3|ߺ9{{#>6ϱ< A_<r#m6-q`K7\_?#
ðw"ƈ6Cl1a,mo>u|-gu'G
@A<!^ցpFu^_G^-BRϑ*G̑:y>/jQ|:gnu:@8)>]9C]s/!#  *Bqn>[d!<y[yԕ0_x
>s-> 6aK)w*aY*g..sGeOzyh/_#ʨ9<kP0^^ʠe؞o3&>yh&//IBēйD#gl	`.;	gD ;Dy*7TF1Fr'39'LExW{o2x|< Eצd!k:aLy<xO2#H>/Cx89yw||:o1hOE	PA7ƠO?bc>xte3]ߋp|_[G,=bycnG@yph+cS`3}s={R/t]0FPkPvTމ8Py#$G9kKRpK;m0G=86rnj+n}XoXVbokkk#÷XpƂ0gh0n};w9q`>քJ89-8sܿ'F8Yp ?,8[pnL̲iY`yȂSiy҂ւɂ[+,8Zp1s4pq
fE
<qڶ 9IqS9n982p rq5p`
j@N-"
"ƹ2;
>F8K0vV8ϳ}ӫNaq]d͓	氘9rb3+4ãN=2p 墦1xb.CxW8D[
Fo0p iOtS8+țz8EO}
)vsP9$8}E0u
k\n3pI:\س'8U/ꂽM֔z`<d^Ұyip >d_	[@?4p w`Ns}xki@~Nb$mu9'Yk?x5C?Ɇ8ut0pI>a'yOrS8
MOr:ށs`?6pIO,i`Bi?
Cw)9-f[3W^'1{)dc'O58EO[úO3	?)8\m02)c4;Rq?)8q
Rd0OaW8y?]RO5pI5ęy
c8c'հ'c'uOjE0S
q]>c0j	mI5m
gO??88E
N4pI+2pI)fkR4Ú҆4CЦs?i
1[Ҿ7p'a'a'}O8q{W8o3pIa40_
86p
kC3kn>?4pXeC
B1d0{>?8EO?3a'ð/f^8ڝOf̎NW<a'bLû*ƹa'Ӱv39a'dc413i8cg'kc
sU\NUlYJ[~e22e8lO,a"12eöd2)fjO
vi>w|$ujbqN?pN5$8}|9g G1*sv1 Nes6;b*'֕9#qR/rrd(q|Mwz|jȿumT8gy-̢yͦf8ABK!{^<ʩ7[
Vfkm9s4 0lArZ䤱7<XqayArtdct$9%G&+\񟟲iRejXeIyV<N*Mؘ8ߍq&$8ѣ,:݂SnaDyE+
h+N((5s2yq6s8'"NⰡqaE8վo|M-s';R$Z|iq|C 0{:Dr́s9) `N:ȩ
'qjd1obqvsf[|iڞj0;cuegQA`N[#9@盃9X=a q7sb"`N!9`,tfjl'12oDNemo-l.<93u
dj`9g~nyM0l6-s}ʃͯ:lc$aa0g3p9>s
aȹ-Sr*
S̹uV[8osX̹Xǂ9
s7Lr|o`έLw9έ[s&1m}I0~߼`ftu)Ϸ̹y=9Әͻ!3g{y
2[t	1<m~g;kv0N@0.֮|Xl,
~~91[7ټ7Z>s>lyik% gH0g)ȹ%01-.g]eQVE9ӮK0`|M*9ge0g;2a9Y_`0oo>g8 :ph{.AAA0g7S=W7>9{X
|ES53?ccZ]0s֮XeHNS:iå0ZnBIm9sj|:q+D3 Gp\9}rq8
rǕ3P+ j#83ur2`9ǕsVN!|b#8r1ο
rǕsVPfi9ʹT+gm#8˵rArY8+gVN
xWuZ93-9ʹA+qrǕsV!ƹ Gp\9df3Nuʙӝq6+gVN Gp\9Ӵr Gp\9rJqakJcrǕsVN5WZ9u3 Gp\9rv2NAr8+gNNZ{~uUbO4ʩ8[rǕS3qrǕR+qrRrǕZ+?9'+F+?9+V+6gArrQqlaOK9ʩaO!&8:9XӪUy]+q0Wi#8Z9,i5 Gp\9rXӪ Gp\9rǰ6yW+A+ͺܫrǕW+YCRqaZg#8Z9,ik#8:9Y`9ǕsP+?'+VNw+VZ Gp@OP57ArrXwArҴrǰ.{WNVy+'[+y6
rǕfK_8|H[jc<+@+=qjئ;9骕b6_+VN1{ذzWN/d#8Z9,7ǕG+6
rǕO+qqaclrrg#8A:9̛Mq\9r
=+gV+gVCj#8aZ9,ik8s8r)cCqܺ?,i5WuZ9,i Gp\9l Gp\97i40XqhY.qhZ3r<+G{Ӓyvo+G{Ӳq+G{ӒYgn9ʙCrǕ=iXrʩb9ўdOrǕ=io+G{Ӓ?e#8ursxWrdAq<"SrǕB+XW+gVN13WZ0WzbH٤⟂
rǕVNt0
yA+?g_ǕNt'!'wӵĽەs^82qSvXVMk8[p}d@N	NyK%^05w";at	c`ΟV3Ωr`sr88o|r

DmEM9[*vn9u<-̴c[ۮox亘w483a81
}Ǖ>ɎStrbIZ9l Gp\9Z9lh#q\9_v|gxH'c*G~,=~d3%B⤱3N`Q8k5#ﶎZ`>U?K+qo{ yUI Cb?j"+$$'c܃Jff9%-9W 9ULNu`N}49p]wa6]Xgvopz;<w:WIs!Γp:ɉӅ`n`Nz*橖sL
ӽq&sz2@N`1<!f?ʳr?*OӲ';NnxtzIՍp:{j]K{V1}^	F+btp#u`恜ȿCjG;]L&!Hft\NWK1vmVϮ8,bzn2HlczViEH

-'q́/o́+XvEsf0}1	@]Ws:@]8Ю`NG?G?ȉ`^
^Ky#r$O9 }^yW2.G+uXW</E(tq
yqٞ8oD>k|=OeߏqQLn7&8_j9lu+'l>%j\\8U}S8qD<.gW?0V<:DtnoHG֚?u>Mw*}9jΫOyVr=zޢWiϳ5%M>Zf97S(^rަr{{߉͟5{O 7'Q*羗eNsblQɜ-%SqO%țAH$   r?A	D[+A"DIZJU-Avd/A"ə9 }2 #	2 " U$#iET#X##@ ?H
	r
A&<A) *J{jG~N= W|LG'	 oJ!)mA M!>*m!AJLi>$AI'-M'ȱH	RL ~kA%g!3.# rA."ȵL2+3%sA'W*Ii&-	ҟ C	ky'AjIM^EZh Yd?0Adm',Z5#Ӭ=An М!+Hs2+?O]4BEZd'AHDfhAfJoU$*2J$ڒ?T$iNg&9wH9	A>&M	BfS+Z?ߊVdjAHLҪ oh%`._!~#!kw.\2r ߩH,t"ٕ&s5Y[D_ .#w6A4o!s
6U$Dd 	BbT-.C] d~%~-Ys.#cmɮ!iGl۝Hs2 $"jOh d՞D) dZ@l16zȉG9 d'ՁFo@fArС d.w uGUvA2:B:5#B	RIUx&AhXx@E:":_יxDgJ&Lt.WkJE!~;ٹ$;ģ\9nU"'UDN\Dr2Їh؇-'dܠ"}zїxSJt
{ _ȩ4T? "H\w
 c:xɎtb-?CUd A`Yw~IlLIN/Ϻ  #
"m?%׹'*#yd	riKA=*r!m.${Ȋk*r1\L"7KXԥ~.#y90\N+	BNAȕd}Ho\Ej&jrN;IN*FZEF3ל"$-\KϵdOt-%ٵ&b4YGSx4c7ǐ&KbBDiZPo'r-ēB3[2EEJH,QBVw<㉟@"	/D'sډdW[JNJ,Ԝ ēLnF'a
)$F<t{KAv.3BjuA.r s{$K2s"H+Sy}ʉ)'v3is#93H+G$Or#rWET%Eydq*F]#UH#<Rf#Dj՞Ԫ6U/Gj?"slT@"InKGE6QSdjc[Fu٨&",cYCln{|HWz%tߏSSSѐ=´G'aN)INc/$"FN^(ZrFK:B\j*8v]8	N>uJuutrqrD&>}gOVu7JEuulL]'r98΂3HV`I$lm*u5x?GeR]h몐Ө[ԵзkE]=Du5}ut9u}Y5LS*٤#p̉^$8er VMXÉc.٪~lU3*qyz_z5;oZ'١fb$H0;#av(FP١	C1fb$H0;TBP١fb$H0;!av١	C1fb$H0;TBP١	C%$EH0;#k١rz;lIv\1Mv	/@rPv>%2о|CSr)}E#9j)\Pϡ	Js)5f-AT=/75;!Bs+T!9ERσ>>|3H	94u6gu[Wac:5͢lnkE]}U{
lulSk}UmLS$KZAlվ:LCScqFՕmQWo降ʢ*͙G26p"MM#Vxͬj"[5c*C:ٿguoYfub$HՉ0#aV'F¬NY	:1fub$HՉ0SB¬NYfub$HՉ0!aVY	:1fub$HՉ0SB¬NY	:%$DHՉ0#kYrBl(?\	r 9(?t_9~RbH49tZog4;x$s@9sͽ ep1'˂#9 kˆS"ugTf~&83?OT!97HYuvzo6=OE=ӷ3$OݷkE];}٨vYԵU|3Z63u}Fk)3g3Z
|sFzsF]AL!#6s^,!kE]r6Ξ1uQe3Z7f-8cE]<Ǌs֫7:ɲs9^n9T&eᎋGY,Im1D]z>ɞH"v)Ͱ;rW9.%	gy:G--}uHfJH͋0#a6/Fl^ټ	y1fb$H͋0#a6/Bl^		yfJH͋0#a6/Fl^ټfb$H͋0#a6/Bl^		y1f"$敐0!a6/Fl^eB18wl!74ټ>weƎqߏF<B۪#ε"_9-,8G	yaIjn/yG#aҹm#8r.6wHqt|ub$8$顭ˆ3Է_[p-8R{	/ajgZY[ɍ¢ħ5zr939>g	d?޳ZpF^ }mUT?%Գ|sn/iL]
u}eSd)u9׫
KR53ǎ$|T)6~EFͧ΋|Z$RiC_V'7	chy'I8WU3p&݄p^S9/W9oQ9efH]0WB^	{1b$Hߋ0#a~/F^	{JHߋ0WB^	{1"$0#a~/F^	{JHߋ0!a~	{1b-Pم{%{[,M~?z\n%}pKOxݧ͞=oW5gg=߳['ɂs]᛻!!,s+,qkVҀz5)2~;i[q8}gz_67I9CqyyڼܟS?WYpS7kTOPVՂss@?5Q=/7299*
y}ojT/ ?'ҷ<O=ڨz_ͽr/s<||/݊s%ㅣ-8pn
7 n38WE|Cd}aQ5xM7|̦e[$Gntp"ߕI?J(p9&n_݈:V{+\Hxs#70\Hxs#70\Hxs#7$$悄70\Hxs#7$$F	o.`$悄70\@HxsAB	o.`$rA|sᱼx6JPLssHws!鐃W71[y_IQ}t)*Ԕ</>]%9(W?i3]Kk~R]7RU Gue5'qñ!\WYE]Y$,S("߸@s9#,΃|ܨ[%|3{oQ~.IarJr!9ːÒm:9I7b娮~e.)sBN%HL~CaNOHG9#8ݣDHyCՌqF'3%$HH0##aF"FD	31f$b$HH0#!aF	3%$HH0##aF"BD		31f$b$HH0#!aF	3f$JH0##aF"F2!{;df
ьnd 2O9}n9KBbXBRrv⼝ӴeRΠ?*y;ӽG"o7R)oZ?/~Gɾqq-/wԥ*Q*gEYёpfݼG VtT!\!ӎiGt#r9ӈiDrYrVfuyI8oj]<r<DpPZNk*sTγs	g.P9P9H8$oUΚ[TΚYrݠrR95'	Ӛiys#}!YOpCTxyQ;JN&ɄDllM/c>>>SG|uk	sUΖTΖ;YrX<p{*gE*g+[Nl#/*dmz"/|:Ip^$kʋdMyfCG s>\N8ב^&uڮU9"8U9/UK_I%r9g9ϿVתRB+sU9yc"c"K"K"{"vI?oڏN_K8Wl'b;^%1ҫ	g B8d}UgUpOxm9%sԱ!kd}mYM>o!	Λպ<Dp|y*C
QC߾[;$ءypQj]I ;X$cńC|k*Uλ$>|ϻ_fuGt~$"1ɟHL!C?dU.P
yp#{*|*U9C+' MI|pڮT9}d+?$sËU?P[UN
'Ήs>j @b2TGdMhL&|Dl#b$*oUߺN7YE8}p?c'O$!~牜׈׈?"899d	ك|*Oyy!)~L|G沇Yr>#6B8rYN8T痪ayp=q/!	~~2C8靖W}1LUWD篮"r&9rb"̝̝z*k҇_>eU7U9ߐ}UAI?$Eo3d9΅Awx1wx1Hx#^wxᕐ/B;1A;	b$Ë/B;EHxWB;	JHx!^		"$+!^V/F;	J*HxWB;wx7'z5 
AE>!zVBݣEPad|zzr:R["__zuD''*r܌k||D~Pcȏ꼈MQuԵ2ģ?G5:	^4+H42Q'U#hT}I6tAY9Q}B41u15s'ƙ5/)%DS!)hgi4UIin4D3TPNꬌf6	,!LzBmhD1ZC[cSsj߆ߑ'ٮXx84t?=QBb#!)/!qo\mLfG q8쵖OexO9K:IK8Y;~`yοZ~OJLYdѮ#ũ߅r`g
+d<ϔr*xLlg;Y1OHK	vmܯkђVH	ںl8R]-Q]^pJu-eÙ!نìG_lO8YES056٘ŶrЯҺ6Zl=CKHC\#?J|?:}w,>|*8]kzZS!
:/oSC.[\mҕXdv<OvvVyV#&N6jEsNKV.~ 9ς+8;̳+it)'ϔ_4l4<ZZZ>% N0ϔ_-Z6ZIH_ϔNhL'Vg[B괦yaҚ%{:[qH֋"ԹMlW?#leWMlTm9z6]O]Ӵ5lp^djl"aۥنKemjJ4II:8r;
ixvI.HgNW_
hS5]-t=ꑦͯˤYٖsL@zBg~IבԆFi}$ي#+B߮^lb$giu4|iv@zivxysVg|IEH??5]ujuKOߚ.98_
G"
hSlZct:[s+я
xꇦ_W|3Zm8c$
?v?vHcVgNHUP;juh-*)]Oմkx9Kix:*v6م4<5]O4;.IS-GoQgv0ڼǷ5$]O]m
瀤AȀv?uuڕJfvyBƿ]OشR;juH',ᤀv?5\t҅tH|#͐s&K:LlY-YH{=MlWeZm8IE5pY@ZvIgWhu4iT@z:$霯قsU+uMkU,tI8ۀv?$<T
G>Y4ĂV@zmm.Ѷ˖.mZytn8nk<o&K"HنWj{/<'pT߹ي[p0'.?_-ǐCKo!4,q-<9'҄dNh5TIGˑh}>-DK[.^|VaIJ$}m?նi1B7]ي# g 
YT->C1Ȉ*IiHxՙ\#IF<sD'kuἎ9~/5y8(YmnsO縶\9#i]N<U_e=JX"uf-/:,vs81<ι#gc\PT
GεF)Xp.هˆ#{cr
)B˖Sx̢7rtV=ƀNH1Rڣa96iu#}J-8v=J=
8Œ((Lhx:OjZ48J$#m8y+H&Kd)&n٤,oWS\#"#[?V<*bȔ5Rr=%p|s6=R]Du=kyFpe9h99QIt-	Ncˊ%MG^(8ٸXD[
@
U\$Յl8XTן-86O5xbɓR:R9CBiEra",D1vp-G(?bT!oG舥h5H"P+,8)?	.cU5GZ|aHۜX.tTW'[p=h,8Jw="TW;NJuhxu]:ւC̦'/cdтS%YVǂs-˂s]o,8E].Az,nyOmў^g)O]j!ylhR/INV#JpFKyXN|T$GWLh+N>Mhb5:M}c4cxbԼzfihZFh9'Kr#'`Ivrn*E(Il峦Şz3"OMO)$LSc$=F{̎9n'8RyT`őŨ{-8gF[
Gʈ>L!-&3_!MuyĂLpqOӵˊ#Ym]DDam<評B?gH;Z
GޱZ7($swn=GT_K~!`ζmLchXqs-ղ9Hjћ=B?/#mwo8#:~Kx&Z8z_l)P@Q3Bg'#[p;Yik7-&$szm8,זs:j4Klٚi>	ɿ]Oմ;n?[qHGtJK4Ω_gy~Yqo-,t<ȂsW)׃m8U_fUվ%8"gJ4X͒Gpo\-YN-rnVEiIuSv?~UTt KFfjk=	݂U+Ie Y$*GېdYkӭxU
GqҼ[ZiSw?NwH.mIx?PKz8RU&Αn2DkH_-8OYpDѭRLF_ϫ@le1mT){qGzŀv?&K]
G,D.h<-|f#B:ryv?n%qTXsUpܕHVuA5ȴG~ӧ4(<6~	1SV"A@oQ];|/Uaޝ,iF%eD~ko]nT]rںcc++uuO+=QueIu֕[Wz΄#h*E꒾UN[WwߺZ7R]cu}Di[WF%GC7[Q]c|:QuIui:ܷUQJߺNjT]woujꪗ~uvߺhT]ҽrwuvsyǷUWT9OI?Yȱ,I+u	lgaS?ko'ڪ#f9^6KL3x^踙*N2U0d2#+r#~=A@	cE9(8x,bl)~ӧ[pnLL9.6G#ގHy9#upd	յЂ>kH	!
ix8}{$6O'KBaH?%,msO'J7c諤6͵K˙!eԧ
1V[H^%8eR+_Z;oջ5Om,M%0ix8rt
G6Q֮Vyo>G#SK;,V]uG}upΔZpĽ,@1@aR*.FO}hSEK啺^RkV0Co-8GڑŴo8?#G]<BF'*8Ү-E9+nߺr-89l=:OHGV*~aƚsՂ9$/e9O~xIWљ^I)C<}Y򐓤li[jÑos#4Ω#ŐEGνDgZp.g$VlV矓#GΗYp~%8eR]up}iZp-=-qbfIr>-ʪʸIHe,+βhs\3&[pׇ&5Hy.|ϸǂ3ǂ#}#ZoPG>@82)8R&jcm]G#'_dTYp[p|©U,J#{qk!GkEQoyAp!G3j-8g˥Vz.l<LbQ9nv^L8=pۜ;:NyNQĢymhُۜ&gt`H
y~!;)r4I])5}_-8gJ2VNj!2G~独.;ο-8|#8RdM3UΚ>#dF̜$8YYsD])Of'Up/`˂3R4˰`rr$܅q_=QpwaZ+ִ*}Jf(8R,ߧXq_,1?I2a9s\@J-L~Hr=k9!c5ORB6qolӥ
G븫ynGɞgjT{t vy2p2/-o,8ߴE=oÑ{S^9
6A(UႳע?'gs6ho1Zl~#̂ҷYtsqFJ.	<Bh|۰Cos|
 W`orYLr\ߒ;CM(ަ-E#iǐg$¹/JH{)EgML{3}%? Y^Зf3EfQ Gd͔W"w8.Ԃ#Nf%[u8%s؇m~[alv.Em=/=&;hi<Kp+|8,8kGӵr*}b?j,FPmkcY}W"3[.NG^pFct-CTWo]ɂG͖V 8JbQGq5[0I.nߺ>s{,4HueE̜Lq1[c2|fő2WG?C9ڷYXp-8y\zS9EQK9MPtt
bik!
n
t^u8neA-bOyFy
B{#]#Ov[Һ7PV"!$_L2Q
2
ɑnF9e2)W"Nr:Nfxt
[!;/z^=MQ{[sXlӳ!10k\!_)i8Z0FC'n?c\	a~}آy풾>g?G8sٚ۳
Fpf:?)TAL$
2+e4$i/Љےr&!Y"h|X򚒌̲JVbi,6oz^$NZƟIc!ycmeg,i,%Ys$(v~/@VW3I]SmtfO4pxY}^t8Q<yѼd/:Ny-j^t!F:!yI^0ozړw>W)|Vgo^:@gEk~Z۫ko3mI/?kطi(&)AO]%
7ʙ	eKjL]ä7'Һ;M
F OMt3	^"iq;=p6o)5]Kg)=,Տ5R$UYԱx,$D0/ IR$|XҘjREXY<:rn}>%
~
!W\|n'8;;+տ_EoX~|o*Z݆3̢66Iݮ
ۆd4>/XqohvXNqvkfzҟm6cR!涩HiyWͩh7-dz5'۹[s[f"'#f+ni,{XX|/6t#k{pX3hcEbQ3 IS`UνY枿yc=!Yg9"y1
~5Ѹ»F,_.d}d8ֺojj!ƿ&eg9/wʧ"]2K/QaƽoFWQ_GV˿)zR36J)<hx"NӁֱQs0}ݿ鸟{`7Y+LQ}[~@nN ˄9_>pW9?η*UO-s<pRܻ?8)wH}SxHrη|t'y`IpW$_I^E8TNlʉ=rRnP9)5IP9"8	39DΥD("g*'K8ZdU9Ηj2Wە>_}9S侧rZR9EUN^;!]G8UN?9*'kiN%}S0P*\!qN ۟6;.:tCp%SgZg*A$rXE"yA7E	RMoT$ڒ ]	ҏ dA&HR"o	 {	oI$QCI	 HAٯ"AH+bdAdA! 'QERͧOk2 	~NA>WT2S;sy Sg><IMy Tt HirAn"Qi	B|TfO!AH:iiz>A%@\Lb_~AK_C.A>#q9FrA%dY(A#>ARL2O3oNJ_;	BVLm2?%*Ղ Gd A"&	BF'k;Afժf	rAfxd.7/ YAYy*" =	B"7E2SZ|"dVfPQ%Ֆ-"9dLs:d4Aȹ $FHw1AljM2ZЊV'"VBbVuy dEkE_.s= $dVN'YsKF0NE7 $AȮ5Jς~ T$s!GӼ}*҆6d,,V|y+&R$h{AHtՖdm ď%Tv$ow"A!8=GVW{	JkB֋- 'ZTbȾyBz܁DIT0jՓ!DQAyHB$01/"MOI'=MwO&A9DAB@u!b >=
߽ý׫|V޻zZ{wsiZ^jծ7;Kf1n6'ȹ d': Mm"]7hyB,yJ&	BVNR]@Zbdѫ̥̠ɊGYr-F1BFG1NVM!+$n"HS`D{O1GV3EFN{ DoFb_J캥d2՗rZ _dֿdYEX?F4@~ǝAƯ3MbUqg[N-Y? D&A^bl sd<F6&b	o! Em!,2"kgd|~ w}%A* ACRr>s&9ӞG&'+瓒?~\@dVcBb^6FD$Ȝ(A쨡	Bfm)/Rd|OUYN=6LFaw{v#Ϳ
> qy7YkYѫr;AH4d&ɒCYHy['vED_D|XbHaɬDVJ D9 D!8iuh!.!3KC! dyhdrbK\N2+H. "W{%IϕD\I5nQwyn=XȚgx#v2rcS#>⽤اe#=^	 &Yb~hc}{:Rbkaul^':co#o{~{wW?ȯ
^ɉb{@5M#cSm3X'l?3[+x,mc xa21l0{
,, IAN`LM&ajjj-с=;8<gdS
v_%ٷߞao`Ο? 9vroNxm
đ2%k߅]Z.vqny\Z.n`54.$8rEr
GhT\G8{sYFꌛ4zv_iܔ1N!!kq=KC1۷4fҘNJC2#?r:#?Oj>|+qIC|OE}T{}9Rm*
q
KU'q}KUܻ4{'-<0b0-9rop
k
6}
LRD΍NEܗiH-G4d
u;Z8/+%LRUw&໫nhm۴&s00
*q||
	2S/-i-)gx;{J)	Snz7U9LXk\'L~[^g?QJ#7M{g!8/+gدnKB_(MZi{β
)Ajɩp{zX߾$yp?9YUƂX8ݪǺy..5C>y\?r񲖋=C,nо8!}D923攑:orz_NaNcӝ|-T6ۇ|s:<#iun(j/4D؍؊qPCD<6DǛiT\?_9E7;CpU-.ۍp>=9h,/9MqN7r\q
+v߸r8!8Ok_4+'͇h}UIqi>brn<-s=p[!t˗n[|5YT3g|GCm3hD:(ax*-y.Gs<e(9{0oB~[vMWK~3߸rz}uq^ŹR[Q5ǿ^_qOCqnb&__sh_\3Y	E7McV>8Bs|-VѬw
CpR'W}9b1'=˹bTO+PߡpƗҸgrju7iDLý9Ӏ}I|WWjr@Cpτq|
ocy^qWoc8%6ԗnT\*vmg4$n-.U`wW8|9Wuػ]EK^֐q~0<w2ϽSG,*_༩8G4['y3(=55!8,'D\q];"a8oMAzԅSqU>tN砶s/Gt &Ya,m;5q~?3ѼLV͚p/`f
}gY(=BN*ʄ|3k359<%~o.n .p]mО9zsao9k'6K5ZN}9@9Gv_	Ԩݭ}%5^+'C͖Z~J+Um%9<k,n<BZ&Xï9_IqCq
ׄ|Td]orj#0_vs_rFxF#jy
_ZU۸WR9gG`zh9B's KGO%9q^s85|2x&Mk}Xy깘PN9 rυ~- i@kki}%k8jEFz9m/|Փ\sXI~i;ci%Y[}@9jsOVs=G<wԼ-Uby]B˼;Ľ2gv{OM(@`zJ!SN@z#-B(u=,r)	[󣩝ϯҳ7=a8%?.M<s
ICpjf$ &D\,X߫I{ BpF5^mO3~'sD[ޠ|~K`zfOxz4}7=L@Φ)m^\8-=>}
BsW}:}C+08O?~vrS`f`c}ڍwW(G>;S^Iע_`%=;y\Iv`S k7i\KՋwg⁕Ʌj+nB<c%k+LS6)$5d=|ՐZ|?p6MڭsO(缠ϸAa!t`V(yP>ޡNQp9uZc Tu\NY82\ֵ=|mȿ(Bm\˹
mOfC.mk1m\0*mh>VS@*?
!8(?wo%9LBpy4ko|#BpJ׃o_GL^F4qdAt%>TA#uKP#	9@#}edC)cw.<_|5g.k|'@<8
V>qqΫZ<,9
yu:{	z-GoV+p~8oNp6V3?*N>Dz&70_'#xŹ!Dz&
p;	§ybp}oZvJː~W}R(n_B/)|DGZM|.|$s
MKBpGhW
uK%?سA+yƎiQ؏XW:=Zi
S̸Vb|F/-mQ%Vbp
}ѧs9_.a/uGuo3An(v+U.GI{aq?+'$IA?Ni~L0VJ.iii潚徒JBAksJr0g4gwNZqqfoNpsz`vO:}.D;W&abOpmڭL`4{IrNq[h,z-9 ԋ˴)
g?Wl&-.Gk?S|_˻vM7u~scΜ	^!q=ssPz|)#s]"b9c9󆰜yc9 Qۉۉ{{ROrrʈF8!γ}ysӳ`XOO
Zwpn~ԐGD7?B$"͏n~Ht#D!GD7?B$ ͏G
n~Ht#D!G
n~Ht#D!GD7?jHt#D\7?9~F6ll98l^f"b֧z\\:esMUsll.nldJ/ o,&nMb`p|Y9q؀:z[HO7h>9n۩usNSOpc<0BΟvC2#kH-G!S8Rg|A?|Q8R*Tv濪I~QGf8ObVΌj
sێ^>O\"__'y;7i?^)qSނ=E=2!{ʂ鸧,h=eRSl^2\9!s:ujܡ!Or侲:Iݳzv9S,}\|wpgS8}={R;G;mkZxCB
PI/8p/xR9爖BpNmP1_k|^P!_;||9P;-_OTL
r b,mOs{~Jk %<i\CrP>|nٯ8.Grqq؍!87(qukS+VA\wਓO"s"
Q'Пz1D\a9q}1XW|$Da87(zE<wli ĮwKx~*c_b1A-|c6e6y?<^v^'V$+މ>qr 8?N,EG}݅9,N8uNx'_g>;?S xE٩xW٩x瑝WB5Fې-Ql!ޣg	rA8[wBZ>{tEdocn[="El[Db	e^"ue9`.[Wb{c?4{tx-=-us`
Ӏ5`րwX);	Y)>,kFI	X#ddl7bHrڈY#`؇-1rAN[=$Ŗ`p%%x-!KXؒ{ΰ%5:m	&Śki?Ak>	L&Hl»{fŚ;wY3 k;P{f!_%kƞ{fM3Mebfggvh~ d5Vo{M|ݷPF]iBX`-vV|΅ mrh##Zmc]N"ۉoG5:8 =N|uI=;I$cb]#"h.H
hEtx>ƺ&znǺ 7&Un|:uVMnқ'~qG߃Xi=d={C_qV׋}`X/ϽD fD'bEև}8YGF>2.agvNR|"-%mu}l)K[Jet[FZ226-#e$H[F߲	}2CŖl9`9YrSN'#dxz Ė8f+
VR]AR̒V`iV+Y`+O!)Օ*Xi-+Jb1*Ao*bK"V*VxS`d,'e̤VcGH? mc$#}SRkȚ
3jyd[=zד
{l#il+۰"F"Öm'6dlb s$; 5sȼ\Ң%%.c`<bםG#. de[d"uq!$La`I2:IDڤ4I]RMYmiv]dx7M֨3$R>Yd2GFsĮ/`<i"s/@ƋfE"K$-'8~ =#+}x1d.Ƨ6%\ϟKH엒]K:ҥVQv@'n;@M{vYXWs
|.]W"=*R!+~#d4(A>
քn5^0ޏMoԷju=}gu9"EK}eǥ:cLE05ySpcy\<ICdogP<#_oiH-Gt|=uעǂy\hzF
:|qɚ+&^>׉/y6S{BBqxcχ^
|
Ň#cHM_>^?ϙ.Rm?o-;?@S g0F81?<O=wGqk4΂#JSw9pY+oZָߴl爓&ca.R4P0sʈVBoy1FА"7D"oD 4$FH  7D y# $FА"7@"o
 y#hH "7D  y#h߄7[i-/Vy
7x#\#g9`ɀy3ɮ.Gk/&]sa҇)<T^e!Wo>0LN G$G5xꡣ*1{hM9z-= =EP_?\u/w9U
9;"R2ߜhqՁ5V-=}%O B}	!|p;4j_x^
W/o|vqDZ!gr7TsC</}1Аg " D"D> |4$H3 g  πD>|  $Аg " @"
| hH3 g "πD> | h߄πYk;3 [{h
>99gމ/nv'h:6B?>)s;S$Q۝xsl;(ٝ|N~
8=DNfɫb;!$DIDv'NjH;	hw"$@I
v'!NB$ڝH;!$DIDN$ڝԐhw $DI
v'NB$ڝԐɌamwQCu<)v'}Fɯ	99`wr\_:n8_rWQ9ula7n`y+~e{#3گ
'uƗ82UIvZ p/k5ɽWEH_/X+92GJm,̑_$;9JGJaɇOȪʒ)ITVIH/J~K>q2G>PYr#%H
^UjPq+uR82TGJ_)"Yq7|%HJPEHɿG"q\\EH'/s*GJo_a_%9BrgW	DrGn"YqɾM$msGɊ#%+d"YCU$+_39PɊ#%+Hڶ*GJ+T"V8R\_ɍXWy
^,̑v#"Yq%8*ft4l-Gv0{4.qtn]yc4F3\mZS(dsFTY#1+8?Q,x(BdH6X^\*L2+o.Lq(W6;FR1o'>n{xJ@l6mZjMlȥ2֯ڸM[L3SŜ34֛fC.:ᴕ/y+Q)'߱mںA[%:^/o[E^}L.Q»dmΫB"[|;m{ӉaWbO-2]Qdl&s)JF[@a]ytvīkm;kvRDRڌx0lmr
S棫ӗbn2x݌$<t6eeVBb̍eKF+.ss/x2ROnۺe?zd7M2kk0,447m_Y~uSH7
r|.sYGꝉY~teJ֝xQč庯,ds7|^+;@% Iȍ& AaW
oْ׉^xMV:'څ3Q*'_ȕD[5Q1!
od drzV8\
Ɉ}v4;!s\aq7U`XJcȶؼtmfQ6tnϥSnJ
Q3e?؉,z"D&%q*eAo*'z_dkGoKmOdP;O"ԆD>oTմ:#X{\C@]U*%;7*Ԭh4Dkmr؆AVVuެepC?@Ye_rm˻\Wt\

 S3u Z_,Lf^IWm
 fZ0!4Fvˊ[qpMv %e/fB
r}{d8C,Wj@FaBۈ}١UG)m
DAnԳdi'BԣW
p8\nnc2OewG1<Zq`pF 3'--6oYaW2A/7()3{kt1(%wZtAc5
PJ;K.7- O%J	)gaK,H)&llQV`sadC鑖B%Y(%&̤aʁڔLa9齖T3o_޲.LKi4ҒL-th͈x*-PΰvPD+VMޮQ14R+[iHaȤ=mn5о,P2WUaR lp".ç)&ELwi)TE۰j)cjƓ[NnFYX!GhDNlf@k7T` =1LoFxtUAF"t)QøH;F,WcRE>>If3S8Ӧ;UTUAW `ą<;|+k1:wF#OFKf'ByFgNVyEm
e	/
R>1]cYkW6tg֠2͝Va
Lt*,BmEڸU8Қ8?z*VX\
W.bGΦe9gYz3U׭:!c
=pLSc
BoWwp0A'jV\BXWj+f+Zu.rT$>`b\CuTbYY1;#|UF%0Q IqVy̲+Q*dZMmjmZٺniE"j+Vbr*"b&@F T6?SZU$4Ôfg%V}颷.kW0:I:gPǅb9;{E̓w1n8hmʮ	C}V6<HjX<..&&U(rì-H ϙU6[ "\e\
[,fn-]GKS3۵Aיy-WI^31.b/醷mZ#pR, Xqu~[ZyF|0!P4͖ʏ]ZvFDɡL{-CcL9ω<͉|>c-ΪXR,$[dsNT hEj7xs( AxMOnb*IFr΋9EcY"sΜ%3gU2s̜m9xr欶mmVޡT*5jO*Jk-Ȓݩ?õ1V=A	)$ƭD>-TNO/m='훫Ў2Su,!wI~o hc{@7Dr+jNMT5$T
+Hi7E篠C_}k 6$g
tU}>ڻ{{{چz{&>ܼ5 i/zᰡf?dmnN͍ۅ|ŉ0ΚunLω<*CJvF)h
EU!}=GwcVKFrTVvM-gnt.୰U3
N[䭾ή5k[a3Ӗh3Hs+(U;suV<xq\qpf|qyNQVUhN*m9E+M2,%E\J޺#P>t.9c01Va/rcX,J^T,)BS㲰B03d]89k8l{m	-N9xӒ`]:A1a'ĜoD.鏍;tVcXDq5|Jʎ&AC:YږDh}kN뵹BNKOm /v-굫[Qz >Zg9 $OsY>3*ɊN՗rؙ~Y[ sXix{hl\nwP+`|lg+W!KHCl0ٞ
+ ϝMߥS*7i'޳]kAґ%.G#:[afXH=NANtHsY=|! H_tN2Q3RajDoKR[pE7^άUI/)$EV庞җ
~/fXh,AhlN(j^K7y,_Y{Z=Iy(
'겋喝;u$3J%aʇ&z8N!"e$%("UԒ˗Z`4XwbKY w	Y|͌a_[C^qWSɇF2ݟ^pղSxCw*HΉs
{tN6hm0
{t7|p0s8~LS1眃tPK
    \               com/sun/jna/darwin-x86-64/PK
   9Xv@    /   com/sun/jna/darwin-x86-64/libjnidispatch.jnilib	t0<̐	:hqAqID!@O&>"Hv0>+QL$!*}aQL}rΤ޺UuֽrKq1`0_!PjH4ߵK1Əe;/ݬ(ǻ&BZ໙=
[xMb.s=D_>7~ǦOg1u&=DK{	Gx|##lw/SO9nf7cuz|'u'6(.AO~R&KԽsOwl/Qj0ٯҭQyL&O~)OF
b,ȾDD{8{hco-?]~-=XPRW㋐6?K//1OxǰvCJۣ#pM_Cgx=CL4CHgEF-ψpѰh\uuß~K|Wѐ%zFN{毱egt> y,c`h'(y6#&?~ȃ3'Μs`9ht?ȓO1EsSp ]:Ct͌]0NhBx,5Rgk44óvߕ+W]wߕ+W]wߕ+W]wߕYG
g֑j4p]tUWG{cF;],/^ॸ`yR,/Kt!jqx*?_JLg~ろ)wp]JB/b/2=cgߘ᳉ռ7Ӈ&%O
@\ B03|*!" -AjUv5X(e:QX
#/܀P`y᧯?s2N b
uu	uH6d%P'B	Rn2Bq^^ŋ~'3Ψ]t2|NqC=8Իc^[7#?nkO9g\#![6x)6s@
SPKb[Ǳ)Iì
L>w@
)g+|ցSy6qd>\66am'H)ݤw
Dԍ3|/4ހ	PWrc6x	:{
wx_څ)6x،@>D6bRh$a԰mg{;V^K"`	1o n
<h}l槝
Vt6<LRH"V@]a'QAu'
p z`yO,Mr]{*Po:5D0>*gܸO\ɛz;6pt4skƙ)ܓ@q]O['ۯV%N_z\{j,|I.[VnuҒ)V1IU|VZQ('Xbk.jɆy6FDt5RY;taj'gaD6{vԳ;ҳ=+6b2|HuEvu'!rYbeؼ2V`.(D^,[ϗR g5ܩ;ay$T(+ۨ qiLjMD@%J<u+UZ HRRfˀlg]Eb#< I -	֔Vo:qIVkum)qov]7Ҍ?i&4tշ/1y210ZSv4p%	+
R
nVcŪJw&Aب#F#IɱP˱("G9ܓXc,RDvb܈Ԏ,5>0W&@67ֿԄ̙R{Q|\i FD)JQJLAKj]7%Z/`7Z`yX˳0
h<ݵ<ã`RZ`IeQ0lRZ`p(yi&CggMV-+y:kyGT6sF6%~-(XN:K%Y&wFKZ⫼RgkAB[n%!ɢFDŢ'GwaoFAg˭4txn𶞪KDϹ;ܺ*ޛb0Hz}W&Hh
T5&ߺwBfP rz'EU	>pb*zMA1C4,ǒU,tɤ0*{ N{Ww2ZC	/"No$$,<>|~~~XD4Z&izM-"E^zXU`c3MV6;-
Qi0mݷfaߡ}DK/e-n-2
/5h1ie23(/ rXx)a$RQk
PlC(uLqH8_jB|Ǝ Z^ՌL+14/~_=F(u .YE١oW:0?
 ]	*]HWFth@m<iFjUՊ+&2V}y;9sj%!NKpPcFjH<r3N0䜛-U F 
TH{%EKZLػۑĉN,D(q0DId`N9Rqch8ڃn!K=dJɽ: 50*:0[K8 GRju))
|A~"Ll
3:$
jq+ OMsQ)NT_8^
\",EłB x,cGRR41VƠZDN!TυCa{wΑӆY`tC~j)zeh	@/w`
;C:wAş{K_#THG4AHSp5k{	)CoP&7_S"ǔ[<Il$cś=!(k0(~1z|>ulԛ|UISV`x"^rui	XM|$(34^()m&Idj嶂(w]KNn"xb
&7
E[+DQg6CΥkiM: d[['0T$
dβtK4RRH=
* J:hM$Es!w,J6
 s[Wx,,GK9$CƦRrU`/b897`7Ǻf;z;1ezƶq_Qdu,	^U+ѥ?x2i _Dx|dC;Gp[vxlFLHs01/ܟ[I<oOШc\oTIأd
9ҦA%3}a\QtK'5g5{.늖B5}m&_/s+굞佝(rI弱A:WTH<"b\׳,܈?gab?Y69Փ
8bJxdU:L_~qǇf7Al{0pt_Q{`Fh:\SIߵ<{k?.<:" 71re:`QJz.AAf_c-"ށk=)Y1w
؊'G@fox~M:X-x}8yq3L	VG0Dъ닿 -^<ZBt.l	yVrUh
R|mD0Z"x9W[ēﰠyX'	ӡol%Zu<*R~R[FRCM?⯼הCIh;PFgt
蕥۸%B$J^,DҾ49JIB	CLMظW(&npx6Z+q{M<,B).@
լU
$ Qkg~b婺
X|GBed-#3=,UT'`M+t{xq.AQDkCyߏZPJBk
D)jxo[+f)3',BkI' j+$!*[ ;]
Z`&OG1!xA
t
ADP!(*hf:j(#Ea(nԡ sL7P3FCk1-! D;qy#['g~9]I?sYh:䐜@hQ:~ ڒl3q$%_,3Qx^86?ɾă7&j,kqx|
y#(BC; T-sNp;"qnqN'ƺ`na42#*MQRTڤcjid_IM=JR
&
KjTR1OXRI׆%U*I4nډNb):6I'IœF8԰CѬwD&Q~&d=\(Hbɹ-u=晃o&<WgeVV[Ģ(`!Z#a$֔nsv
s#2gj NqRu`eB`F^ϟ&(# MJea4WG
\k'/~_֏}ITt*If/{7 MYtX'34fPHɬˠ}T'6{<d_ڰ{vg:<5iVCӌM`'G{8j5Jk +hyhwկIR罓o߷yb	|\;W*=^]Sp9sy}hIԤ84oox1EK!/rGߪpGUhOf"H.یMLkp\i6׌56nlTWx[P8PpKT+P"/ O_.=Ԛ?-3,S+?Y^Ϳy%gMBP@ݩ=2j]GϹu]<
	~L*n'\,L+Ugm0PM-YDʎZp*N4fo,_Z.]]W K7jcu+}yIRh#/xqgɾ= y+V0ɻ_R1_FmeljVPwF\ydlw`l@7($#_B3gZ5W(5(^oMj aAU$t
h
8qoYAK5>
*|=h4ş'J]\i>{P?CxYP`n|nQ8$I:
]m,^uy*X7Nƕ+TbKnD~s4j=>٪):`4P_F\6ڛ,۠䖈%<VOT)0I'o>.}Ks&z3)ozk=U&>]M:%_%-w:P17lƢm=زpKw@AF??eO>O#Z{i
bMp\'Ў*[
oi	Ԡ;	'{!:D{S`7*"[7g@}0nFLZ㯊|EՍ[>?jFɎjKQjA7 _(+eѕ_?i+oW ͉L I?jh
qr;%'CXhO؂}n4]'K$}ٟG[&n~FпRC;+8\	VV	BnօEѲmzdpkpp~6l-*(]׀th,$mԁAb'mCQ@{y%w8YXN[M{Ywg;zO"7ৰ-SPA\MK{`(Tk'0aFݥQa.cp	Ь{j'QSx*SgdaO'&?=<[=p$=6=lM>!-G}g/{bF=
$a1nͲgBݞ y|m&O$LDќkrZ͹Y&XH2'b@ CJE>ϝ!|B>`>_Fk-uɊ̊b@-:`3DO# Sk˜ ~J3
`
Hb  ? 5 1Y
oQ9
D*QE5٨u1{hţ4FJԵ#["!"*q*@WphT^-o
F
)@ zw5u$)L
 03-LWI
]Ekx5f
|<+
~oӃSϷ
~I/J%j6*{t 6Z/Qv/ԴnpHV\ ~d G# Lj	c5C2dN ֫ N;>~YI.j*x%5ܭ&6Ӈ>o9
C_5*
k+eZa/?p\ًZa|+sۄ&[®g%|Ҳd;5Ǩۮ{ݦ45:;"QQMdR?QӷD_&WuaEn^f&

vj
+&Ra{󖡿7VFc@ٛ/H'yMCh̋SPptI)1,KN6.CeEdQ"C;:ϋU.g	}}8Z6}jzEh޻Z}bu6jFexx/|(	˝)]AR}@ I@DTXnhL8[t{ W`wC]
cw{߈ÿq5ޏ.	kbʨgyjf6I|
3]\>43>s.&6^F=Ģl,aQ,V_Yԍ,%Ţڱ6EQf30km,:Ȣֱ
=E\װWYAo4sȢ
X@*fQXT
h,ɢ\cQw~kE}Q}XTQ]YEQXe:@}tSOk\qay^ `yz7R ԱpW9//~$=#.I0?UQq~?}/<J-Gj]T]~%ib:r=/^xLc*_{N!Eug[4o;RUG9BǇd6/cya)Q<*AX0,Xn%]GeKA2TŲ+1g*ɫ5,!CRǇSX0,&K^T,OXziXVۅa8f%]3bcIaX6XrѰjTҰ|ǲ|b)e>
˳z,3,ϪX,'X`XT!~*:XF豤2,T,/5,X>X&DRl@U:TF"43O`g!f@cWќOVJ5yJk
V(VF?$!Vi@E3,j)ϨwjfiyhjEPseiMP}RW=UZ?TGll|d{T,*Vh=L}rYZghδV5yw;[hY"*$:j<;/j)^}}D뫟/*Bm){ҚymRSUiZOkJبXUZ5ъe.C*SJ&oWi-XG딽DlGŒbGu 5U4rx|F빏t!Z|d3D%:/27^*t,e*eCݤW=>hbSw_p#*

@d F
X@pKL` b F d }5]h`P8
 0`nX`h D kX7+`J?4mΈnPKxRg'lc ;" UK2W %t NЁu`CBYX H D ,A#
i)FP
KO1ʞ E	%Ypa*,(K< < `H(![aזdFp
` g M ypФg @lI>+
 0Ge
 " Pk k / C5zp(_(*g K#J82Q 1"JWĪ TpWD	o 5N d|xxAy;a ;< F 6 
@>8<ܬ< 0# nP.Ũ ]pzWHd 29 *J
DpU4~
Ui'VE W1'9S7&]xwo86'<S,PO&^t !yiY,Dc!	C!p 9} }ͽ p;n310&|_7t3|iOrwC!Z!#ifK</ė!B	xE}ˏ7bx$߁!,,l,,<װ8c1Dfca	Yobx=,6?b1x^c)[סcΎmW7%yb͙̻}5R}I
ⴜ>xIRn	YG-}y}&dZcapu.vCrQ
K
jkʱJojU
[{M=CĆ(;^SC4qut@\Y8{<E,0?ߢ?كt(%
"KA)np*MPbrGpXCrNϓƒ3Vح91G{}Ji%hK<26SIlKž6l4,60)$[ƹE:.HSG\E8޺
*w#WKe7aw]}[ǅWuxB%}wO!!2R"6TG%>WDAGI9y7
h[̷IT.Rev>'۱w,Dn{ňI͔vTy-[nd<$	>A,*bq5IA
̀9?pvK؉+s;ʜYJͭ.9hZ_Fi:A@D;/ǧs_2.Ξ2J	W	>*ۡh qB\$"q˱#}6<kBʞpP>+H4ƥݱ6娮H*~EeFgq#y)69^~>O4I!b@=>3)=<2psXJb.0W8:,e |ԝ2tS(>IЪMsTb@!	1^čOBO*L2)
f>)ǥѯ^|3ecb{x
֙`<;ߨ25trꫜ+YTSX']]wg
R7Fu#=?kqOFD$W_ ͽHc܎r%
z!2k
7eBd<	F"~ӷS/b^,~e/+#/}⒮LQֆRksLޒ-*AR/unMZJBy*+IڋY<m}gXW1&<fmWSt~5ȗq޼?[y+ ;Dē!V^DMX71lVC	$[cVRr`B0tj1gGY$סi['(!2$yz##EF(ٖ5!
	Ϝ\'yci`lC,<	Z(Rh~:i'Z8œ;nᢞQ.6Pysw@axRCj卢1q\f]A5!Nm
~7dQv
?T$0V>rņ<Z&^ak`Aߕaesuby箧
n 'jR]Q)c[/
"#ZJv9X+m	+ōWt	4ȕZQs+Yd̤9
R(P^KLVRˍ<.x1!I<a./s$!3?Gr9$I吠:(oH.%|$x>_]v4:':Ē<GN۠P>F}z.TIfɅ0dQ߶(j bFc˱@n)Ǌz\d
F.䄙"_V=_	
Acq*
W
Sr-(.A[HRO!+LtFI	?]PW%pIT0t#b-uJjĽڅTɕĻ9,dZRAi{'n\Lr m0֧U1D3FO"zOp{ApAV	ނlVʁuXla^Jڪ-/Ym!S1塞AFaNfq!~9||
*P\FnO<&TZג-	ݐH!\߳)$Dj@!}t%wPT评\Hmn`3
thCmZ]@gяt=Վs&7v84ӛ
.K@
!a74K(ƃ{X>%]؝Vi؄&Ϲn1N?a:)S}(]pхw#pkO $?#\gim\:a˼kUs6zn@dIыz"k<՜aA_jc*ޗ
wBCR5
w(J7s9)*gw3?RuxU
ʙ^"oAH*`VHHHHk8	e5!	kbT#Bfq7.J.m$03aRҍt__`D*rfQ4ܠ҄NW9_WV+N*T9@w*TQSp[ NtHA
+g*/Q FSQΉΥXۤg{AkC8sS5bzk)w˷_z:Wzfc5R zcɽZI:USz_ԧԡ-Rݏk˔,o˔~,)7%)r.e ]x` cIJ7
6nEmp{`-M`Oy5ˬ
gA$M<{g}Agp5[ELsLV)&4Ǻ&KIL '0F~/6łTR1"\6>R$K6B\cL!^dG-^b2A'`p~S`3W
ay]<x^_ܡvt&?aalw퇓&>v.;r!l{Zܗ#]3Ne$ *9
JX԰Gijbmwxo,YA}M%>g"o
i{ImArA9*&˞6܋*i(Gg3XV:HQvˋ*:L}ǓkrWv
 vSjx?3(A`ѓcQh oVNn[HZoL8Uejp+G~%Hc3
|UeSXRutbqN7cu-BGލjdWė&J}h_XD^{G5	H,2u`TnS<m
y)3ِ
k5BQ9*`s҂d	P䓗~yqS:&zǰL2l9?^R?gMB'^J/ٟcoD߲foQՌml29v\6.hN_AwNh0DW Ro
>SHk+̶%ɻؠlsH"Ot'".!ҭE[\
tVMhڹ6kΊRַL>QXdea  3~r8*']tE潸`P?lо8M~B]дEOmQ
ȆezҮi&O+N&#?֠۾@c4ʉd${VhQ>Ik+Z{|4۸_\!N%XF6]wftcѷ3}YE@f
ixEZ
4=U kdj$
0:>J7&'Q)&=*CBщ*"	,~rYB}#HB״ &D5Bc	mT	Z|YB	nAhe}E*!`ydHHG%}`TOĄ֢MP($2=B.EnR
guwulERkSW˛a#K`;ꠘPM+Fi>{j]}Z7a][ _9#ɔ_ ߱e?뱼	c`
MV$U)͝"-M@\	ƭh->bT e:ҫI+6|Z;65WtKẴzqg/ NI)"z}e켃8xZJqOfIT0v?Z;DC&e!5oDYKq?i<"wCwg=#^/	} |}"^e,4}`3dYJҙĿSByi
tvq
@lyMM"pAE,ig-5n@nmR?ETX
	yVlBg^s+yu܉[ʀE_r6Hj&h9zEKb"8^k}]O౸z?+_ARfN0|mJL!SЮdu1¯V&Wa9?~8x:}T,6uKۘiQv\3;E훂JjCйki<^;3yJdt 3w+IAJ69SRІĽ`b]Z+92*Ixv''YrVѸvzj9I}JΕNp52JJBWe/rDIy`6z΃~La "9W40^ϕtY@Z`7t{_2IPz/,	U-G0y0$Z=k`쩕dz`1MJZQ8č2~prQ\ـO0IQ*a7VNP)Ҍ^`@*?
g~[ W']iѕ-ɓh'VLWto(h eV)ܽ>g=cf1<P0˵L^r
gj:O4<E
5>W<j~8H%+QzuQoE_{/c1!l32/4r<O, n/`0r	Fu脅w[WAp l֚)"W$Żo/ꙇ0ϿʃG
KPS|0&B|-S7ڀ
OD]@pUE6ꬡra;/zUo;S[A7'쫵0-7ЩyRs-O\`b=M.}
_ȐgG?ڙ#+tס70ElXh/9Q\bfO/0{StIL[~/Ucea*6|/sAw#,x]Mn6Bë67Qi|nIΌXl8	?G3't-柭Ŗte}k6SUraJ~#zXv	?XYʵw##f7'$e~M>Jvy\ϊf[z
RoylM0=Vk1A!*x)79PJyǛIxF*Ӻ !n!$5	sו*4P8W!c2沭		r%
mڰyWE>k89Ε,"w@K[<up`g {PTdu-JOR~	@~=t?WDx],i_L$[χyfy$ hJn&w᩽ȪV<j<ws3*~E޸
#I@ :%($Wܖ<i~ty/'L
	Ӑ(aTBo*,t5TTQBEVyKv|R%Gx
P`9Da>#	D#~sȏ&Qk Gí&?ɵre'BWJ0g= p{l׶T`Bk
nwx2׈'NLKnm0Ne۽ʧνz<g-
z4c%ZtvVҶi`\1JC9Dx>?~f4		Ѧ>[ C:Kҧ
NFeH.5K0r(H):R;kC:5dvHKbXAՖ`Bh9ʴwV7uX>UT֪̄m6eM)ה+,eUhW;뻂T4=_uF 漅i)+b*)y	}K#q[pRrXߘ5/WI͚qͬ
wT>q&BX|̧[XT~O"_^mZ+R}k1˽9?K޶q`_ӈPydIH+OD(Gǹ,a.s-19W/`o[~ܐï|R
f3~J0E
~57ݢ;Hu[Я>
M<eT|j!̕k`{9s:Y%UvSkjF/Sj3*Q(9dGRHp_/8hOزlֽ{!@uj8>z7K#դ1yxy+-z~p!% c[]1 L9|ǫY<OD_8zàʩAD#󜋙=q'}q&1	!7'DNX{:
c!CGy 8{ɴsĚ%Y@@UUT`IL߽vP
iAZodH+myujp"q+Ι(Dw6+-IpIlei+$eJV=7~8"u8ʤ^#J,`zn%b;?{7iiM
ȭ6mDweO8 #M84v_5*J
XKXx FJߊ[jh;qiqh^<\BMC&n	`?G>'!q*n*6Y?@WW~2kю="$n^sY5O8&U h@Y%Sຈ*5XR˕ŭֳ%\BVXtCפNd( m4_RE<N^^܀mg~ۄqnl wɻASZcFJ	'giKS./[o	&b!_sm~?vt$IGܟZ=8<9onp;cwb&m7gƤ7'	B{t	3G?!5;<knenP XЋq"lm4AA[h1O?S5D>WF[:u g5\5 e	c=,&,2׳Aoi+ٙ!1Dg)<7CyQٽ'VugtС6iF|!yO-/~%dr%GmEfR0E	)bh#&@Vo),Fex;NXņ g'z-`l?f>gh3TɉC&x_,U'*k-IL_A<U7Umj>h.gV-\+?Yn)֭,kZ=]ܪz`MNcM('{ƗSOs9K=άj]l{P;1n _t<Ȫ.Xd
^d<A%8:g|n+%qu{M:_Wr#Z}S묭z^zv3M)ZH_MA~':(GV[ԫ#ܒ~{F.dJ>*Bof5sL*D_gP,w)(Dd(lxnܓ*p|]hxqP&#k|AWZDE@yA:vZ4z1,}y13m}-ސǳs.[clI-ُb&z@'>
C>
3FWUGa>ǑU-,G`u=;t#mnB2pEVZzḳ{=1xlyxg6n`x#/FsbɫoaZ6_(n{o|dwY[ZfI^W`y6:`Vq$1TlCrَa&|ƌ,!X"AO3Zf[ofC.Bs
:(4Ke
-p=Z:=rǩ8dma,$	P:o,h]r r%?-w14'0)XpD"O25DL|FeUbc=Ox)6h,t#DZp2h8/I%&*6q%333a: +kpIdH`2Yw`w%a|v!OHF,7OxɃ4H4fËt,W̕^ag2ڱz
2#R *'VċswxiP&x3G?DRջ'<GQ3*Mxn.^̹ϼ00\ч[Ks3NCC{pLa	l$>6a+>'_Pz%漋X,$"Uee$攑׿?nko ޖ#ʔ1;z[C	n꠲)NҜf>{.Tk/ޘg*Apx$1瘒t^0n<8	(?/szVXp!pS4<ŉ':dOށ+%́7gV+նŷ[D>)ZS^-#Y >ʗ{- [eFVK`vgkgw~*LX0{*Dx
g[=?As:{ĜO<IiԬQ)!qUXLL^.86SQ?Cì->$1seA+]םB7:iZ+4w,H}7d u\\HwTbޡ 9~q"xBi eн=&w"%'N9'uKC5![ΣGvH*I?H8O	M˧9\2o^ 
D wEѢC&~B7P?qoXn9n''dIr/QUK*E (aJ*tH&Xh{0%
SSaJ*C^5̶@MPo+s"AIBFA|?F!Џ2PI6aDNO2M$4e*AQkK8kPsH}!U~}I%sB[}1F6Z\VkϺA$=Uu26	;>*>~+}?
0$UJ^Qi%J9srDZyqkM`{Ρ&\6I#@59|ϪJ^e& o<')}'kB}ntm5bfYN"NCyo<,n51mH-ZLʣ IuAPB0hۓNs>@=V\
,##~}"ob=)@ްRrU ácwB)%Ϲ@@ = `VL}<
%	K
[0P=1;Tɝ1=Y+'qQkrgBYYo/X˛8,Nypam<mzिX$kf``1,]~JK>Qbc+h LVEnN"c)|tUӸ/M~1ɯ#}|lc,r@kŜG~	("b\3dX:~ D+&%g4/L{Dx<\|h<h0j, T<;ɝS`OyP 3mwHD>KN0}ŐOf'9` Z&^g9<)u(M[6vz`qpdqO*4
ٝGQ%$@S?)Cg %ܴ 	(4msdQ
7
ֳyc+`;d6X6ɹ:^,6!Ӛtd)iӆ<[9uP*Ƌ}o[g!#FKDϫXL#'Kxo{|moΣ|xLfT;U',nN](ۏiwx
sn90w(㯬H7J9OEbx0aC:bc{#59|k@ K?Тu,;;4s/f cSJ0f"E>IcN7vk9֒NXۂI {Pfmٙ!C67NE:<ŚRUA\=9TU6Gҙ~	@~?:-1LUWbF"%Ş2rR;=#3N|)Twc<
STq 
J!7z
"o `VWY[\<܋$TVjMܢKq$xXb=$k@Dpt;.e}u@]WF>N"?7-| Ky[Tri'\A%4	ϡ)PQt{]PD[RD+pٓr[]KJaMwfCCP
 7D q'	69A%ZA90#8+8G*>|[tO;>챌 ě?~`
K;/˽\ËYm\`C|Im%WE.9-iN:T
iXl*[F)߰4:r*Ĺ,<LK#WAzJ~r-g'@/#i/164)|nGisd
MsPN"m]ݜUoܢD)'>9
uEӣv(RC!E*PƇ"4!50j}Vx_kQۏzzxIգUAٛthOIU$ڤNCT*evWD7s:	tYign˭ڢa-BO,
ҨsLayNQp"N=4|y,4J6MݹbܝZgbI^Hxlb؆`l2ܢ$2/ _F_r)(SF:{/Dun6.`	-0:/g)@
y%j9R?fy|_E2d#/V؛L%	"/!S;Móy \	F3h]{fa{.
d<}II>ʣ$j͟#!;MLALJXF*TYAR{;]e	`ARW;]{h\-oʦL6ᄳ6z4d4a=J'
|y	q=VG| #$WDO8$P@ʪS/[ʽU|ϽV
*FP:`U9{.r+'fĪ@5T,U_bW(tKwuK(&/uAh=qֳ#qx)gk&nXAsCr[NsP?h=af+dwۣwGt!5!+9}Z3Y5"
o6h@JP
)N@F\4m_ńn|3nYXtC:Fb4[?g
Ym%.Pꔠ5'<h%9Ē|z:S"@/ǖP@RyzP&IA#u~yk$US"VA_b`vw%ϔ-ϧrblFJ[`x|Mq0ԟ_<jO2KQ+N4U֞mb҄?79[@S
r-N2V[d^;Cٚ0N(y4=wL55DN'i	o@Ƒ>/ey?>?zJF2lE.CKd+}F/t	,n>LnANH&"	bsӠrKTv{prJ}WM@wN<koGAnU^ȯ8y:(qPQ;?4oTC\EP^U0ÿ5^bNJAZ-ddl
Z-Iii c5j!ZiӒT*_"~!MiMb>(8j@щN]9L8Ԋ2Nlo`@}$OIv<s>>9+2c|q
0Uh	iE
%up~a&z$ͨ%Z71&42cx+_A:J/>
oB?zwx^!ǚ2-\6}?tJO߿P_i6[3/#Wb8~ǄAWB:Srs}<q}QB4pmfӷ,r]*l(ڋ9wfcoYvGnݷ 2	L]3+.;7Ѩqkg_It~k݈̫P\T׫`<[~]:a3vf'߻
)2;0n˸߷/,&}
y&ϑ<N>VvVfYvƀ&	q3By_ƍ]X߾sf楮ض.cpN>c@xԐ9nq#=&MyQSޅ4t>m/kFa[s{w?ffsV[v쇡oVa[X<0H^ӾPW1ޫi_bAcyo4Oe2;GƲKV~^Rd
8]B^nXzEqv'~&bSFጼfSm:n3<l6h3PdT'8_xuCYV?QoWGEc.S >@$c7ۄcNlM=,/Yw{z`ӷt\@{!1U7`_TI{݃31KA+X_}s|fh`7p[3؞.Q=Zܿ _!nJN[qX/2fӷ4>B,_
/]6ֳS)Y{{ͻH`~ySlߞ@M},Fsph©+
;)>3'xJ` }؈2+
^ej֧`F:<6y^Hhy-djwĨ8g$,G?3 }Ȑsׇ/[qFL#c{93is#k૎KBo~˹y{"'0kx5!?86`޷/##mHWOu{I5#Sx[&yc3w~j5[s:'5;װ/«a`+|ΨxU6!VV"[Gg.;2HGۥ#KF?Gs+֧ìu_@Yon|Ft]'pW"?'վa4/>M_)9ͦ\<HxN$ f
P!"~!57z)0Mvh*WR ;Ѯb'.g' 5[q`ݍ'66} 5!aI[Q?"^SfnS5cd9&3Imb쪙8y[oyK)]7Gcd[dqo}im1fl8IkC}cY{%ʚnaoew`mj1	*4x#e#KǱ=Ӓu'1`q/[}޽JQke>	/aAt7ҠH7vaץA֞Ykus20ߝm0"[6Ny2x6
T0 ?sƾwnmɋIޡ/`!
#kTU%0+jÚvkX{J3=
62SP>'.wo+8̈́xx)(M:0sPз>hce2&:a9^b
5>^5Es݆
֗]*7Hnm3!X%8KQ\5cMd\o1VqdO'ql  Wvggج@ƶeYS\]:3#@Ӑ][3y.`9	T뫃́~=vHulcSd2^C6<:޾3y^gE!5|| 4e7ױݓ9;[q6mYq2r(x/ʯm_LC~Qi/fwa0+5i'Kó>`z*ؑ9vCU f@Ŀ⯚;$UQ9MuYnbo9=DJ\fk@ɖ52i^2ـ^dgl3RB c
ʍ}H$+'L>MǭS	?'+CA8sT T[>6uN+l@w_AFW-!g4hDţ_Ao'z*ljY_8i|hIDuIz9|}[58S}<!{.#_dc408Ag\Ŗ?y5]Ů:-?J ]~Ck5!X{9?ƀbW~/E~A䍧C?3 BUijB1h9 8yz{רT3#ۍ\N>Ov_#ХPH9НZs5ƛ(N'=CaV9뿍(.q|p	D`FY.?㵍@޻0پGvڧ}k^hBl]Ksd6]yR!c1f1$e&lS֮1b'dcj{#f]o

lłV73a3Gג%bٜ|Uvײ|
j^
Tl+WiYtͳr!A*u_/aR6#aFE@Tv)SVLdH^kL	g`l)=ʀΔLGٸ+?9ROlJl 3`]jL48:ƃb4(-kURE'&q{BMҰ_T~&6Mw~Lr6Sk
ư3 5OdW
ͷ)/ '؞phkᾫOfOTG=blkg->y=:uT}KEHOs@菨giAQ{QE{,쟌Ԕoo@w_vf5
,j=N La=;`a,WTL;D}:ھ*?Sz.UyL{0?>W_xuf w)0#K(B-Xl0SSIGL(,1s]ZszWLc5xŦ[m
΁JQ=a۱wwQ`hvE[:@fKVmQAMsiS͝텀G>|X<?F@2|LY};hP_Gb۠?@3	_'ݪe*Y
!|ԯPJc ?'=}3Ԡ8KPZTա؅7~.D/v`aU0N.5hn5j.	꼢ZP-Em(?^*b 3	/"c[ـh9`(ҙIc]Ej@>{+\	m3ˣ'ZJcb`W`?/50T-|ByNm=+С<r`6H2	hi<vc*fs9#A;OnWai`Ȗ|ַˆQZ{a8|ߥ܂<]Sի"ys#ߐ](:շt*WlTSJ<U8-<:u87qy.ظԸcڂd,oVq:|^̄>gl+1"v%X7FZ@ 1W]U0sW^o:i2˼ZlX^u?|#G
3-X³f{A|>xˏ`ޟNѩ͚`)?3ۖFѥ|.+5rį朁M1+9OQ{Bx/sd$!]|$8C'%OР!`4Va5B&IB\nbl`ꂫeĕ:@i	boxk^3qlK{#VccZPWҹv	qbw_~`
Xf
/:Xke7caV"ۧ	c2h%Nadoj
f!A@6GUti@M=٠GU(eu~\؆|K&;<Ȫl)\c",IbRM1KAS̲tʖbʦbʶbbb╝P\?:=U 'm_C3,e.R".ikEk50ԙ}-cj_^C8_W) ^3]d|fr
 rx`L%0܉H69	5nУECk)w&!3u~j&zgDk;{/wn
󊌠^[Tkn!TܡX0z\=2ac2'lbԗancdj7S_ee>.S0 S{!S?b!1Sf?:/Sa672O=)6bӏq#ӿ<nW~mį~59׭u~AJ?4n/~[On__ՏDGg5~_3O3G7RceįB+[5yQ?_!~}_~	uxg:pZDY25~r~<m֐MB7/@+
Nw*eq8[<xW9`¹I\P\xk"j"<VʰhQyEEUseVs{A邌V|"8󌨞=:\s1ύ3WGQØ
c^0qڨ=dRs15F9if
c1\(zcH_kbɱTYKt6cmr:tUU&K`ї&
7XY4[KKz_@+.tټ>]Woohr4qVo2λecv'p]][i瑕a$q35X	hVP&1n8+}qWwڬ^gۃ:un
Y$T_Xln;s)&8cjkԉn,s/ږ6, 7Y1'\s87[v6#Oy'4dM'˽nk/M-^Hb!Ip
Nh*;<^onr,MWbu+hEo
<	2sLaRlr@'^kCgkz<-6`EeBq2'NO
+apAwf:Hɐ}%f`wb
VfB}؅by=P6M6]Lvg9VDDb0{
vfis5V4K%J1y71EQi'Sj+q^4r	̓ &1IW):9#M<2N=CEI)e	IQd1Pc%E d'S"CKRb%v/	x4Ms$KA4A	},
<"A5,qJiV9:xX|k+ԏi#aLŒc>{E4?	K|WG\&UP'ʗ(.9bGSgRl֙{FgxIΞc"Aߔŷ yR&"	f80nU>
-ŉ^4V0$F2ϿS8;#x(Gb$uщ	:\.%4Ynϕ4<	Ҙ]E.T);hWy*	B
ef($R+bĳ.'*+LeD%^dk'rX\
}u
JC#3̖*x	 ;Ԫ*#a^hhvZBӷ.4;KL0K/dhH?Q!u4F6$4]Kǃu3Ep:ΫorCԕs<l \NHBpSO/KZmie.8mS_0:Cn'$
Mň}^<n)CdҐGQC ".<9]p3,xSs70ewFUt&:`kvzPbԺN>]nbkj$ZP#Ϩ9X5omXsPX[u'ƪ,Pi2-1Z|n]G`RhչM-M,X)0KEd258asEeh],)@fBu8$mfb(I!^lF(=d4,10.	 F'Jd1Yb!$HGs
/# z+!x3h8m 
zj9.ވb0U!_i`[bw| ?Lg}l:$ 	a   g6A^Y̨1ciZKCԄc07%(mYJc4&1@(-62$>@q $F8hm dŋmy 튫 ,d6ņ8k^G+9[\N%.nbu,7.(x0jPRc<xi rO
> i3O1X!%5i܊RL@M(C0P$Ыqvhl4O&grzZnhrԌw.1660uvCtC,8ȍ܀pzInm0Zq8
b*A=$7RNGF`@c2|#2
!Ʉ7јH%Ɖl'YǊx- iyW$	wX(-f>PH8$
Y5j1dM<TdwX݋QƳ9;[e+o,R\.7IF?$JxZ!<dR#&Dfy(ۗx#EJ	I]b|uIXLp0mԐtxD{V]5d	ʸ* FP*C*쒭2r-&QI`Ew;3῰8⤮hǔlTL@дjj}I*tYk*ul;xaqk|]U\
f-XEy|c՝17-7GAأీv+	byaFzâշ1+9F9h}M8/9ח>ͰqSV+pW`|,U݄f6Ny5)0e?˦x[JA<hBA(}#Z6/[RBؑ\HD_#"?ʟy%p/pj
OF\3:Ǎ㈜/6p)}WV;gp^~/ps3dvw?(^'yxٓ\I&-*bp	2I9\NOn!M7_fqܹí\_hrG%4H8]mTވ;eq8I:TwJw0fZW׸<$pIW='>$/ڡ»8~0kWAU+?糀 ~| År$LH)wSL\/qsg79I9A]#%g%q p8I?[1)I+B=2 bܙ0:b8	0%OR.xdr\zf |%pugqܫ)Eøl?x@lK_nNKՂIEnpc# cBh7;	nF[Ko+'޼ : f8<mi[>ܵs 
p,jG2$p qK3ԩq^Q9&=vկdrxTk
!k'g NK-L_=R.
 y<T17	p;pGpu)
x	ȝ	c,F+*Iur0fnE@%NGF9N"\Გ#wfd3hb%fiKS׋w$5_z	p)pX.p&/& sXczB_bx/_E)?9mr<Yxǟ$_p^9.A:'Ix<2y~zc _[%IF-$9 "&I> AyOz+_ /3D~!iwpq7_UxKpf'Wfpp|M Ưչ8~0c
n]owWn!$:	aʛ+'܍Ikƺ$O3G^ArrWrSj~8ʰpY<?S՟Ari!OO9̼7 Wgw%'UǥBkT$>M2\"	ҋ0L*prc;$eIY7NOv~t(up܋IvIV9si9N-%8/?&_OU/jpe#%p@=^war?s)U#'̧90,7,FY1y#.Ag
$\1")ewStwdds3cXyc}lx>D^x-ɨy@ּ|kDt2Oҹ'sȼ<0~'l~AxB&O: p}pB7[όyU>x??:_yDhAG?gNpHү%t7I_GHMI}$/H?NzIkI?"'^Fz9f^G
{I5GäY3䆅Ho$6בIz7齤!]Ke'GiŤw^Bt3I7^KBHoU;ҍג:Iw6א"}'-ItȞAһ	'~u.* +8V@\KZ$woudc~h?X>/\Ih2%zfDA?Ꮰ
["By~OI?'~OI?'~OI?'~OI?'~OI?'~OI?'~OI?'~3ur~9oKR_9fbxnKF!4~Es=[
n!ܨeH~@Hqx: l~j(9J12LF:]vRFFyV QD6 IyR^7DehnEXrZqkS ioV HgȐbҲԉw|`o2>cxĂ-[0XȭvnZZAUP+h[Z:O0zcއ8b?nʱ#DX&ep2jb
i`EVI%EQ	{3P}3C2sXiul{,,V$O<=U%R`) Z/g	!CoLaJЯg`7kīr*į*s"
VHFKӨ1M
1]ז!(1u?$,m~_)u}6psPm{F2d)Ȁv>wEbgBWu'ˉ'_3fiI_daaP-Suļejy'ޅ'W_bmOBW섒ݧ  ^Q(T	ZSjfNdmA_i*b{&Wث4)yv-w*
UM3fc,gY؀c2xgk[,xqb)5LH^ֲO!(-1 j+GiW&FLv'[t;bz?3v+GO3e}g:d׫BTzvb69MYZdA68+LySC.t2T!d>Ϫ ,'@g@
dWzO\Pf_X^MwwYf8ksUje!zfjNէj؋j0@{!d#f:71ћ\Vq"٬Vռ[Qmvkk5
ﶜ=jAx;?g%SC웩=Ldj11s0?{.f\s1FYJ	)l@R;UM,?b@ԣײ={9>΋C4e\!
!.Z(ގ,\(WZ5_Ewr/ewpe^%fJeS8&`=Be1'	k"<wt3)
-΃ż;O}|>~&|im,:m/S{0B&ں|G׻'<؝rY-3_%Y25tG 
[̗\{\oSaLdzvFXb&m-J/6?Ucӄez}'	?E pZ] k|ͣ<OHLx}sxF^?,/`W߫2Eؔ7
jLla+-NvG؞z9auW@+VVtb/.~f]VYf{xcZKz6ǎtxhC=TٽkG]2݂W@○G3-\
f`>`bIYKݣZ?oZⰯFYbXJ.$_m)4.:xytKv5`{ٽc=Wq7j욋%2sό0ȢczCeI&cmXX vBU	/kЄ~ם*wV@v{n
:`³${Fم+$밷
kQZp`/,xWi!㒱B0ՖgBMDgVnfMV:`f'cP٦()[Xh2\1Ё3>:]iZ|TЇVۦj;m?Zt=2^2,fskCU<oStd` "-,na]LfؖRu*XNRoՖYۓu0ꤢ%x v  NPVj{ݱOqz:md_CtV{lnkOR!Z;o]bD:
{紓Z4	m9A齜ӥDwRz&zh=,%ŏb6F9v=DOA4HODwRi:PGtN?@.Hzhc@ͤ}>!"z+E.zhٿFtNt-,S]Ht	<+9}/:_'sT6Gѫ$z=DG`s<6D{{ DwgDCt_Jt-uD^Et	@t/!z/Ecs)~9}ѡ+8~h-շω.!z(/-D~D1;<]1&%D
=>_Ϧ$:Lw/'ھh9N'(?E|/K7DO',D_4r~`-ѽD7W#W y&Z<DiFxAs8?#Z<S(xh<3Jxgys]4a
JtŜO]G<n!.({0p>3$NeCtɿKL&%y~;%l"z&D8:hcKZtO._d
уtSN}"ZGmhOu=3)OoZe2: dc2z~AFo2-_2zfo?JF/3dte2a,>ed_d2OF#2:"gQޟ	xAx񮢟Ëw`>${z^>'Eb6(or[x;1x_R}>:nKlb -033gMKa\[U.R*։E9jKM
#å3.1<גڎ4Cpl8'JR,[2NdyRΫ'/$CI*P2d=9L^4,qY%	ɋKAICWq&U!sTr栤E!ˑch**%C|Y
 [#YDڳ5amقy5\W;
Ǳq\8qJ8O*nI`,F&ťhȞړ[{Fĭ=5 h3$eFL6I=#c:dAsXLuΤm<뤍<뤭<<<
=k3{z$M.ߊ_	Z!@jI4!?,B2s&2qWJe(M,dy/uQIA,,K▘%汵¢E\ǥڡ|Qwd7f9@:+q8fKťΟ*3p̠LB^^^d^%j]f/JKg6"-ʒ,0n"[a'iILJuIn_eG1kQ[w'ek֊֊-{tAi1D;< I&WI%+Y xblA7Vi`Q5UJ[\[*ne7FVڷ*nXT[TŽ	7&ڍhj6&q4RqWTT@9*n&!zS\paMPK
    \               com/sun/jna/darwin-aarch64/PK
   3Xa8l  8p 0   com/sun/jna/darwin-aarch64/libjnidispatch.jnilibxTյ8L3@/IxcN&%&C@D R^{3S_JZ)-VAVk[<f0g33	Mk^{g}WF"pQ)GhtY
-!d<xryyK X=Q|nq*-ks
Jl7REvSuSzΝ@\I/ʆE\M/m'dč$z-M}E:.;|]:4Uĕ FI,**+*/mjF'ОF/AMҳ =jYTvPӳrz"gvhXQg___נW+F1ҡrSp,1t\YZ{ys[چM-M	0DU=-ve\CO`(Cmms*E 2];HhY^ŋJ jځLQҊftl4uPr4oTL0@N.⤁_KǰVDC+Ȗx:튺o&v:nY"}/}קUQ;f6XQ4L*1>s0B}6daikMmӖ*ic%

SɩnjiŊ|N>"iM@cEMMjcBw><rE7{7HMԝt;Nwӝt;Nwӝt;Nwӝt;Nwӝt;Nwӝt;Nwӝt;NwKws]Mp
n3wh_DDi%jN}Dw1ٍi@_8W;mLr8lPV]v$=eX5/]q5EB5S>4v	gѐ\HQB&9j,3#
Y9ȳuK$ .o#UIp:K
bƧ 6)qeZiR2Z_nVR$_z9rXi/;fvX(Ξ d%I }Fԥn3_fmm02^RvINyPpЮ&>ihY*]H~2q	eۊ|yގ!IMUK"H<.>˵7Sv 2Ę㿙5'hS2
~끶 C'ۆ(|P߫䔲v8Q=c~	E
th]`<h8uາG@}#.
ʉ6$h-J /A!^,&8x/*k[ ?Y~<")@ߋmL;3NӁvJ@ LL.4rO飡@٘O+IGOGƟHǲvHRfYN
C\П@rX|}ԇ6eه}7	cf!͟<D6WF{]SzAKҞf[\ڢ-YY؇^g :+>21	7wǘLZ,u"b$|ezӿFm@Zl1EA`$EE;ϱDBFEǽj}bPZ78FwS`	Cs#ϦSl߉^A7Z]xƺ<ΑNEM\H4mWkW*#t4^#N汒,9Lu.ǲAJM=߇O;xrr(߉k*$eFϡ83,Բ5dpxN-I{O0~sY/n;46Q1]z\./|
yꬷNGH=QM:%Rsq_:_

j
 Z׃DsyZgEw>h. H-7pCӅ~N|u@
h9rPD9h5}|>YO?Y%g\0tC19K?INz0
sRKg0tC9LKg0trXtCgF Ǵt
SLҙ?`:NS/	3
i"U~(giIuEhXBfb|PM˯FOB8ӟ}C.K $n@ה$dUV.iy4_|$K[Qk>]6>CIֆu.۹^4=/OJyOsoyͷ;X=C͏;Y1?"oIl~/͍])O!#G o 3mh%.]_֮G:dOa0/6¤gmf67T׎#
+@m69ZX(/yH/=t˽fҊ`̢o[l.p[w l\U`
"[&,KKӶy/g;#X󼻘_Q+(ì:+p&Pr'eG1>|+S]ڷlvv1
eW}G>dB}Yl/E
ocS+xƵ(ey\%}KJSs9`[q?"
qM	:3M6 xl\_1OT1/C=<PKPJ[e' 볝>#y!?oX$ߴTo jw9})~mP	^\kz:b_Lkl0-sZi/Lc][I'9Ncݜ+ob0I$'\a])iL	H	N	u>{;aO۫ğYlSCXd,_WXPG~eܖ:%v_V0QT>˻W|Pe[E;Oe]q@-V$WVCzsއPʒ.i<}p'y\ϮH/C&A#F|?S!o֥!c$f`	cI"k#QT=u8L\Ew},Z]ߡ.@hlI(oKA <淢S|̡ r:}X>).#bᲱeZd]4|^ayE"<E󏑞q}F28W7ÝtO?\mX-ha"9Krޟk"k(ܟ;|xG5#86|/O !>d}2ٔ@WVPcBN"*|!?S>3{"޾RN 
%ܞ2A=eGp]%^011ރ_>$z4ۂژdWlIv~4OTiH
p_4SwH%YOOryۥ
oBr/sA`QSEG+WZӯUY
dڃx-PxjWkڦv҈8gi$c"@ c]?y}$>3]t+W5Ϙ}K܆Jmh	T1ótG;2[#D>:8"qY:0:CǃWZ
s5_I[nk-Бmt"Wխ9w/ݱ3 C{@ciW<6O}swnٓ{~;yҵ714"7|l΃XJgEƍI.3jnMdUM
w`,ړ76X=6Z=
!s*>b}*kT>Oa4i_4,˯0ndck /!U `G,5Ko`vaMLg]_>WXiɴ<(0zmWDN
 \-BQ.!k^\
/';YڧğFǗu֔0ഞIKiH
zz*$cJUҚֳֳ!i
RZ'R[k -QY#M 0euKo`-&!ȗZ?KXaY=ЇF;};2YPzsat%Uǳw1Fgab̏0nߘM$9QD$%zrz3k@zReYÉkL5Ch-slR8
m
m5[r1{`,0oIh&-dIdoibi004is>4)A9(M20OH`68
vV2hlȅ68FB[nЮ[,-wY"yf0j&GZs)$!tq-FakrV9>gBtV{W@A!~A~cjlcII!4X۸;2/ѤLu7Eg]xqS`-d~)t>H
s=-akepCӓ߅d=E!BC5_ygt
uII$i'7qY\븋IbҚGed(+4)2vK1vN=}|Hyt,X3NZms1
sI	ܧ2}^՞"wǋSڽ+q迨]yYׅT}hnPW*ӉːTv@VCۢJ[to>cw#	喟>idٯYk2Y<zmdŚL.G$YHCֳ'PO+j?nE 7qGǮj2nn\XOȸ\
nq_o ,و{'
l$N;=$z&`Ga®'hӜE߾l
|$u$yu1`Sn9^5 Sw"ݼ3xk?_Jܹl1~٨==Tߑ΀2.\yH֨3
ntF|#|k<R^ӆÝ#֞c$rIҮiC+vƙoHU^A G\"mq]qɪ/Y]%ElE
oBYo6ګwgq>no;9\:\9?A?
*01tG'ӐƣgZ9~uIS?`ỵ/<ڵޣYF7ցo:iw<n{ky]S\ kHT˔	:O,>G	|xicrol>φ6Q%:|e]fz`Oԭh]A.^WO6^aQgSȺP+kE^ySț1D^:lSh/r>)<.X(h/ m0G96)L1{Ey
T<
߿B,k~V"g,|11#c)PC>6{R=>Fϰl RG)yg1{ݺ[[T}q'yDt`W1]Ŭnc_+a@ޫ!C"oy%<g'sP6Κ-(b3ʫ徇PkBӅOw 
O'fgxrh#OOк06gX]l=~/	!$鑚T>x.Ks6dgP)q$2n)Dny/ک\g@+I{Pvnu}^}\G^y6<k_NXOyi|x;Kڣ4{}n!mC:5mȞm~8t(轤paz$d0Pokh?S} |O/aCC"9*y9A~	w;*h+
pxDD?I,{@~wJ6X s9q^%ߨ:X`wKŪo凃S÷	^g	L	?WLQ;oE(i:M
C,-mےA9? ^4tbY.>px2OWn	^K(DoS43O
Jm͡|yKB^
Ch
y[4o-TW>"Ok%<6zm
(O
jy}(ig3!oT
=Vß!޾!_33xS.к;R]_ogy=Wb\[B/6{+{Gm\)oBB)*l6^C<1A]%-LyY剡
+6Q
oיn?ôU,? p~)iʳ0AY䓮.ꮭ__F\l}JO{3ILAvX8zp=Gmgic{"ʞ}+8lz]B{OQC\{¸5@y|7Rأ熰Cޠ5\R/^
-`G-{j1U*v%S^	҇.4^M!M޺^!7H\/P(xSBJv&{TR&ӠNgB0E[4I+NRj`ʗFiΤulKgߠEfI_Ӊ	ؾ0XKpNKZH[4a`4IYI؝Z~Ja`Ǩ`#䛮='HoS#|S5pM$G8&i`-|GH&h0BZNZ}8NN4FK37Vۙ N#5Kp~$ŇYZN؈ka[t.,I`Mga`O5K *d&wENǷ/d)J>Ģ#{l)NhB#=P`cgm^yW?6Mc%n%x*C_e?T#.@Udd YAf@'ʊr
Cl`
|o|w*M;DI'"ٻi擎dA.EޓJ;IR/`cf6I1N#W|
6?<4}`Hh|{X?51y.
 ):wj__a!85˧
#>U<Revny=h;c^@|ȳlo5>94o? |1x<ߟYCcM~ ɭi`k0/}.#2z3Rn]
7jgC=7	0-CA|^1.nٞ3S|b~?gm>!bOR707o 3C';i9c|b~?k_OHkR9`|b~?<|BzϽ>i:!|Lȹ!T|Ͷم{Wh>ws/su9WXOH'5|vi:t>1?O_OHPއϰdN*gϦ|`gb 1GsB51E48r48칇
'Vc9E%
N's%m|m9PEEnftS$x/z Խ( |90_
oC,Pç0+Wɧl
%?-$1M(?%LGK(EƩ:
) ۮP8Vλ'9A3j?D׬08NCrr>.g
'?Nrf@}nD9TQS '\9P5|ϴ08)LjIT,LϤ@.JԔq2RݧWZ!/~=WW5e<ƹn
{7p"^_~4ZD
N]	W48A$kp.hp2[3QsI#A},):g
'>YM9]ripdyL:ND@n]rXoA^荎%}Q<:{*f&kIc3."g0\7UJÃSd?4ŝ.ӥrxgJQr3%>v{O܌5;"(ߋ-l'ܽFr}^b𽣆BLׅ.ݵ)/v]Yos]m{y+>}_ϧϷhxU9_ 'wW^lo9үkRH9Br`9|ptOgtğ>OO9|
wϗ\~ҿẅrX`yKDzV!HON)
7H~x$X9('R6GHCrX}@ùr.RjEJ(Y?%m%y6a)ZZ/_`dËM$}_Gt>cw.{aB{$T-	QR+
# >㞖u78<$"ϋ)VO?B}g{>H(ޔ۹lwҡDؕ˺h4w;>,K;iw YU|_}R)Iޓ7UnfzgZW
sf5gEc{E)K&~3`V9<%v@LnM4ʍ6nAQ~[PvK Ax]bv}gyLV-+_
yo«>O(δ^y\_'vkMQs7[WG,EZ	=1|^;yizH[!Yza6;}q e@ol9.qYr?5wxΟ&e޿yw_Hw$?;М@$Ye&I7ş&]6C,{>S'.Swz؋`/0}&Bd{{'?YFڛ#bBCI%.x&)J'ӻI>ѫL{9x66w#P~kaP>{Owo_J g#a\d|fzxG@36#'{x~gƅ]rmBY֯Pq^&aܗ8||gY4h;M6mW
2ƻ9:n[y ؝*z/?GD-xvϰSX 4P<UsO^i7❕0@/bLs;ڎih&gA;DT1v9ĩbIw^[v3_oAi4-ݝ>[	%AHC_)Hl7/,i̽6K{eqArO5ze}?s.nO_A	aY >vX12w?g!xz
Q^N($A|-fG
w[1
1_Ao6!w^{cxKcx@;*R`Tx	-<`bx$?~?~<wunr<^g>`:v)뚅G>_i.&mI#̹eq<
e]wd9ظ=bk>	,`1i/ҲAG|%o~7][]l(W+`[in`~?ěݫ6܉'3r'NI8P rƳnJwf#?դ=oAE'muQvE^;SeEnU Bx3gy_'y4/6$fx7`}&p'8䭅v07[a!MaaCE-S7kؼKf<|Ckƚ0|͛6|k
~ЦF[I n}w9ze廳&w!M;(B+?;bxw6L5n׃R@ߕ },?VoKxMUQ(^1yEI  w<:p^?/e;
,_Da?D]u'oqr#0|GP.خ]Q4!42ecyvf
@7,^R/ц|Ӷ{3t!.G d>fDfHl7|G|@D{iI_Yع)jܯq&R$vgœ
} FX/UG19灻bq=<Ԁ=ez&K>@&`Tc#IGc>.&$~:'ݽ:Qs;}0s!+ṛó{e*ٛ\yܵV&H6jϗIs!\#fPԎFUtұl"g3X<Q8fsT$j;Nu9Dv,7x{Sn+^*gwB%
yi<a:>%dKN_>*IAyYԷ}ξq[q}l/UY@}mp
:x/S5m5VPW!Ż%,]2w$*ڬ_`ڍkdtq	/W3Z|lC9us8;";aDirl	8>RB2}Sg>#}<X?"*`YCb8vµ_q<\ʷDB5QtM~&?[534M~&_{F>Mse5hO\&qmMq7ΦnB!mA=dff3tEtYՠ_}0X=;-X\A~19
0's
|hK/*7{6
p9T~kpw|o޿];?pUTtSޓ69=i0=g4ߟI:poS0{9&]W s%ܳyv&k?6)3.[3LgA/L;.{}353KyD]W:ݖ3g`'wڐ
|giV
?P|}~~6{%`|6٣kUX~.Gh^rB	}A3;W
8yC˦dc1nz^x.ocoV~2wT*C>SοHUT,bз:jHMƟnǽ1D9#Gm8<t0-gX7>1ۀ>V>B/><y/~,y臹o;R:y.w|3YU@]?6wF~4$N3NߧŻ=0z;٤I{2mÂ
ȞeyF.;Eg](S}E|
<*?Ru)1mOS+랠;f[{Ɨ
.6?kp>5>ȧ={@FhDM0g2?exxa$X_ǽ{5Q~&$8Go\5WO##N}6</g|4 m0N%Sά|v|ϴ''p^ӤZηdL0)ע4E%axi
c~84iax]ίגƱLT?+	u!׋&Gq^IeF<u>~Nޜ{urzD~z"M?\N~Izq4eߡdsi}6g軪`X
s|έefzU%1{f<[yҬioPL3Y~{Ko_
_cߓt n@
ݎSW0gDr~W;?S<<k%Ϡu[yB|i]5e/Qp=i 	=C:il!铢~~߶cw͂Ih_Fcy1L|(9xSGY9vuEqtxdmĻQSôϑ?O\pcuto3xW$ċҀe)H@6z~s 3hAn{_&g#?Qqlg)Mf;Ns78̑qʞ%zz;Qi"y6aS]
shjz4iJFvߦL[o<A
d0|%0
9/|Či2s8Z=׏~mρdB3i%2X΁>-#6џʀ:62{5\:y9!hHÙad6ƶsn>C*hA{i+Skqb'Г~aOY8]#cп&?M=N"[b"EVŽH=;C&r'#a7.<o-нx&}6BNO{폊دjF2o&c)kYS%SPo =r:ߕNVέP3Zs'c<\XW=KL!<yL獢鹻
q{=	.G^4l>Zx/*֩
CT{
P/}(	QInCO9<m5{!Oh䗌V-2|g[V [phBzde7Mr>\g)lg鿢?Y7;KiOt>	[S=\{^wC[!M}
	ڡ'{Ɠn:#Z
dnhA}	qE\h](030N2@O0OyIe([s!Y3}Y|/g+IR'࠽F^?x+H$35BF~&#Y,ҟ0"O{iAq<1핦Βz$~'R,Λ?#Q~ 'KR"ǆI>:NC:>WQ!>3U:`dto0w7ObOf+
asf
[8d`wsQxVٱ [CUF<<t& =Y90sX|7E
iL	ޣtIm73U0 ~;B,}l,̆2^З?	u={;l^fZ,;&8K8p?|0ȞvLN\O%cH>o1}0IDMdi݂/}ۇzyC:_霔8;_P{5>vJ4uvwCh>1ۉDd'rz
T<'u#c}?z|a@^ozAv ./dC:}ȿ-ߋ~Yؕ5G,1q=٘|&A^C:!ƺb'e]Ϣ8z7կl5$KqXGoS!j%r=/}`Fh&v_{<9%@}ҾIA|$Pm˫Y55ˮMg
ƤxѬVh,/nƚ9yK<IAťbr
ϕR,px78<3;`t<x $t<+PC\9P~4 
#V6%z#_SesQE~1>&:Ymb"d]C=,zBǿN!|Oy+r[
yCrltA[K[k%Jmyx(ÖVC]^Zu
wN'Ps}!l2-c1XӴ?88-gWPx	iɐ><t~;/X)nX+-Lnܔ*mn(#Nu4z';aO;bv`Wmg#izڑ?JqGNbc)ΥQHv>ӧg&mх+cv3쾀/@7:Q?eK/ Di7>wW19
0~uso@^(^q,Bܡxoa,w /E_ 
u.Ʒ	`{;MUg<Sl"k~CN-:.=t*^i('9NEzºûM6͔~#/Yy(1tOfg&TH[QoX";U; O˰/G"t2:ogjOϫ7/o}WK$߇Wyx>JýK6ׇv2طіۛ==KnbUrJk%~~%]~5I|ן1H0{|-9p/?hE!lAgAdG4]6F)%đܨ$]PmDwWؖU@`=8v#)d7~e~@q`EUyb
r&3i##I"EF?}V^Bm9,
 |gt#:+?Wx}Iutuo%Da
u7~'xq.:8G憴ebB!fcG3уߎ70ZӸ0A>NY4/\)ap@?/=>h?swh>2H},žٟ,L>>Q`!qs})TM(Oan0X/ǍBIc5_2rv-+{z|֣I&)~{{
n<yq4Nl9
НTEH!m/ny
=|g1
ao9.h珣Wƛ;[ۺp^B=EۼR<N7dDBa|{Hg79_HH{@	SqN[:3~7te+ikĠ{FfSZxFL^f\}S]dYj#mx	q?
+Q3;x rVx*Y}3i0Hn@])xvŽJDo-9k7f@YAŀ>z֦̭6q+BYeo0_·Z
^W wG-Dn,DwX[7gvHr?a
An:"_ }։Xǔ44G݈{a8ZJݲe&g$/ߓUD
f&ď|=|4|5H+qRw!ngcu:ȮD;>d0OK;rH7!	
%D51~<n5~CēxG~,a)3غ#1a
w3E;Ne]$/UBHw.C;l `}O 7~4Gci1`CxWcGA`	{w=_4ٽ_@`Kwx` me;٠1LA?w`졤FN=+݃?54fxP#!;8ږz5#]^rOz])GDL7J4<FHwi3J]ЏCϝi9%c>`LPI׋{8Z/nڕ\t=&e@zn|+1ZD6)!T/گ42yt)3Gt7I{\u:7tY
P[dFT;ceB?Iuq,{kHa{={!}ؿ3𾡸
m]Gs }DQ6f!-G<`5(vø`f@YBKcM)s䮚'BVޖm@#Q{o<v[CGǲxRʲ(˔÷u _` ~0q `>6g~4G{8)99Fst9ƻ,W_Y#=mtvc:_Ba.O&GB3rۍ1.Tȅt&(.{rGzAxuwAODe.j>ű6|e#Y~͇O۬Sȴ0gtNϋ-Sm;X`ƚ<"8VHG]9znםZ|Q#AgGY[\ 裡s0{?v~|>Iᇐ_awGa	DuBa}[&K6#OBGлlg4)SOLқJOq]̂v'χ>%ٮ/t==u9|!vݥ]
^	x*N?Rώp??xIiXԧhr~񻟖cBdi[?@ؽ`:3G@"<:9%
dvјOM*l+蚥'3p*YѦ7y	 Yc=x>͸W
zlx<S	Hqcf^]42%f)Oֺ{߾{}tL_, [fBeDZ</X+<󩧗>il;,P'@$-޼G+5ch*,ә1-'@6x7a&<:0_1m߈";g$wOiTF?Fq15ʰXb3V
fE;c?Ikl>~~}+Øؚ08tduVuω|= !ĸN6-낵U`ߦ)HϞma6v?{0I<j7|GJ{ZI=<ŀ{O;	|6E3-|^lJ
l,!X4;ѝt;Nwӝt;Nwӝto!.|GFEthpdάhE?M<`_R%OS>Ϻ3%\D$iXmB#	?d'gpxC"w?ܿ3;$v
ß c`$v"˯cH|,pwOr2j-InfqYca|)>?<,nqD_
nW?E8>FpX9}EA1  .KT+'A~RLO#ϊFo_?n̳G=@.[G#dS~+GǘS܉xF*_ql?E{{Ń4g~*+LVxu;VwHuTVO?O?O?O?O?O?O?O?/\.b`q=z\q=z\q=z\q=z\q=z\q=z\q=z\q=z3^p"RE8C(7(yTEx"<K/PmEx"R.UT(U*
p"ܤoV**0DHn9mK%0|	£yk _Am<g?pCx	<G!</>
[#K<_XUO \?p'x0_ ¿.?~q<$1$f7Β09JPr"QQ#GGqƥb&	$ZhaB},UB,#HytäE's*B<%Mp#v.)v@*9ek_/"
~[
5+g_h[5%k-YGynYKH:]
MSgw+HLLLLVrns̼m;Gxy~hJ70&Uz7IQ0#ä
CިJJ)iMlk)luTY*ʆ-zuɒr[Ѣ"[I.`lVk_?zi}k.RY	T[Z+[Z-UF\miiT
ɖꦦ{n_h\!;/")x*ֲX'V)\Ik˺9Z[n[ol@*-ՖMj˺&&fd(XV4ȲEs2!ba pK"׻`)ҝ+X!PZ{F9

Վ*Zk,
- JJ׵T+H nccOhvlL4+[Aޭs-zuT1ХPzEr(ZTW)HQ7sTW-wo)mdo#dֱ&Vʆiͭ6ۧp"
k[zKeP7Tfk.˽SPϪ-B[%,Mo,P+hE6ZU7U.w%m3Rh\MZmꖚ*kjOsyк<D?Op
Օ-r+W7 7/Rd;wJ@:2m%#}̱!T1rR!@j2[QV'^R<AIC$4l)XPooɣB,d>\{*+ZVhé l}04PO(
9eW_:"D[.ՏZ
Z[&5=:}
w59Z4rFuHA[SQSNV`kQSe%b>G
Th&Q6:7_/M?T5E}k817j5 DńS!y[Z_gtk\*HC[17QoHI	eT
'aj`doijh4d
\ť:L_#`NzH"}u5daL	9XѤԤF~x=l(A7_@JLuᖭ,Y\y88TpOXQ^yZ;~sF-Z,5t4نc3u87
B=.YRtdlnpTu
Rк6ԯV'sH3h<4ج|/4K
MrX&lRhiaq4psM
P*2{3Is
nqʪ97W̬*,izR^ kilV%q	Fpe,zmW A^b
VjMWB\ҺI 7mJ`cƿPYЌv,pѾoTұt&Н+ŸG:;e
׷-:ڪ@WM&iVbY[m`jhljr9hmSK465*ph9zڰ~s
3>kR/h'%B0(oxEZv	S1a"A xgLUd(""aZak# 8okQQ{NFVHj)$Z8uZ*VIpKP/krUZРT&;Q0	BP|[CCm^L0 c%%d-2x`mUf
) ) GY.";gLn
$ȶD鎨0ϺZ@ĳ1ZK`զA\̰Q粦 g]5٘c]f+M
e6ٚKZeTnyI*<4wl%O!?űx^U@XT#X%M!mb(vh՘	M
<LM
fdTz@" mjhzz	PcSYۺu01eJ8uZMjCK_M<]FjKBq蠔 "t>8#!|xLe1pX1EBkǱ<ș1']TX7T9Thu[sKu`M
`i!ҷxPl3[j]y[+(q$Yz17Ce㷁a VQuei-x
8WgjQB1nR~Yxs
GT0
MaM;;Z}U[мQB*!]b=jaQk̂PDfҩ\{UeRRn;
^izhL)8Tljf
gќX+kf>>UB40eQC9COR]P=9T^o۷<z6rtճm\U~L[ρFɈ]vwܱM^!RQ(EQ\m׀CmN޺&p*a)!h56dXH6'솧j~;hWCcZ)Jn$q\[	q#	 BFE>2RŎ}6_#bhT`"F5<<pH.hKQ?Nwӝt;Nwӝt;NwӝtI)y_aMO;x?sp?ӹ~7b?vx}|㸟}p:4[otܿws5-wrsRCo=<~x/GAFt[e9`]t;Nwӝt;Nwӝt;Nwӝt;Nwӝt;Nwӝt;Nwӝt;Nwӝt;.N>?Wr_rL[}˹7p?׸?'?rK?ʸ|iL;Nwӝt;Nwӝt;Nwӝt;Nwӝt;Nwӝt;Nwӝt;Nwӝt;Nw?g[+lMqrHxiOO+k66l,7'^LmnWnļ*9iF5-յ!
 ZזuKX	@5uvG-A}mCSF vkuSF,6Tb
چjNQ?sZ>%U]4AEnr=f93<nD%+**j&**)*^ȅIpWkg9>U&@h8%1%ZYgh	F4hdY(M%f{_!!!ƔBHh3}G&KYPkX"VGqvyB
X,XV}V"$$+,oi4
Ŷ+VuPc5<HSM$=Su5
>4}j=FCIf!AMw$$ňrxt@չr[)GHщ&b
n:΂ d$qQۙJ
=šqgzh+A
-w35(]mWD<
'P
[@/sX.Dg4Ҫ
#, 8JNr9DZ~EڢK{,Z@*A&HӢ.k5(M52?029Y0aFeSN8$oעr)	SzCF\y!meRM4NB}rE`b	h5j2FTq\!U,q
}A.(r!â4R82Kܗ[ƒWhBD$IsQ 1&Q1 U qBLhM@d8/SLyZ&{قC
|3uM̢h@(S1I6wv#ɛCCDRZRLS*P	"HJqQD|b!J֦MqD3'N#f`1b :
jP"FHEKxxU&tp!imw#@4+6vj84>z4NO2b#CCo.8.q㹮a8vrWoȫԮQkN8^5.Wt(J́H^TLeUTԆj1]*ȽX4
8*TZje,WG%I5rTrfBP*K[UwBќN"P*Ipf-p&cԢ*XYFڛv6ƍtR{+q9k~Q-7nD3݉3݉/sG@<\Ӣ
:e~6`;UD5nVY`݁:V#Y8ԉj^
$}{$LuY{$*05X):'Vd/)t;o$?klOgy&A-'ԐB[IUZh/ή IpғNA49Jfy-O-8i4>4ķi\HSr3R@^M^CPW @jiMl'"3q+VI4ڳ܋'P+3: eZdZC@<xiG'fH_-Dq֏Yfyc#xZv0&FtQN3Z<:m3":)fS.sLǍWLx ^Ռĥ(`&Qdvm*h\:2x^4t.Cl-/8ĦJ&lY郗V!VE}H63X6;\l5 B`&MHͷt1
ɳimIk}xt/'~uD-j(6QX=w;b3I}!6oTc}lhVMAwh8*`n@oٗ7KKP@i1idJ:A@k;A;a;g<خl*<tCʼɴQ|
BJdA;ѩu;LY\3K>9[YʍIMriB׾"r DUK4y,t/¿Y9ȕdRTYුS까BS,x,}/H^.xܣbte9yzpFs1R'?Je}<GW_a؎#Gn{jw>V5G.Yj`U[U?apowle\	W 1o+_ΰ2V߃
n8;x
J`Et`9R15>p./t)FP>
89r` 7 7(
 O>#0. V@}P:p!Yix>)0^
Q3cWcY݀?.c
oKu"o!(pp%MbЇ\nˇ (p#
lw'wQ3022oփ]  \*}kF3v'qC{ /=8 8,ppƑS@>84By 
20È}y8;/b\'1wSS#U錋ФQs}g|8zk:xg'{c ơY
eVdw`0: ׎`fÁ5?8MьSpƙ&8ezT"Q$%	}ڲ)$<XoJx$<Y[8E%Z[%|D§$|MF۲J~po	J8D(Y8!8!8,ā.a1KqXrVç8|Jrq [M%8/pXCkqu8#"%8?hǇh7o;nJϧiBgA4MI#(k焅<4q	R~βەgڱHۓmǲp>:[ۗ!gOsT!GGXґ@a=ʑ;u$ANLk9u(Es	=w$jJyٝ:S+I4߁B\N8'g̤3rLq?2p~8r:1%'ԧҾ']!8co7K]މ\8i
<MOS8i
=MHǅ8ڕ梳9ȢZt2[O4[fk, 3G"N7q>&Ed<xڕq^s8Ɲv8ȝv8ʝv8̝v8Νv8Н#].K^h㲤;MO>m!I
cs4מC.Ŷ-/=+f0bk#R58"H$$ڱUZUZUZURu
ݮ;Tvmݜto-ǯui/RlҒ@}m|?=m3&#YD{hKb+4ۢ-j/$y!yd#$LF]~ em[2Hd'as8;#oy-kv"MJlrvn;
uv-CphjK]kOmo>`AeA-A끶{m.Jn_lgERZc~y}2=Yr*Td8-䊜]pT
M;M<ѓGn4-1q3NAᇾGW5\:
ˆ.ӧ&6PE6-W|xlBajIYww+gظ\2>u/5h5
ًG4z^:sGu^[̌TQL3c3u0dvUgٿwɯn6/ɛm]36Uw[=;=|{;ckPb߲S0wϊW1-<sG%ӽ7o޳c7kź~o/47G8M13A}&UB{w76RiƏJ_!x]U:O:Wy5paIo_繏6~錫n[	əy}wZTowu-Qn:bB^ȇ_9Fwﺯ+c~W[#}~M+y{ǔa#?=m)	U'GGwm&u73޷t~X##ƎJ=R|PaMpWU"tveڝai?#CwSwx%w'-s-&+vݨ6o{u*sƬg|#~,S۴\'<]g^~<ϋˋ&p/~qy7U:zw/7[Us{\xO}eaI\ԭ:E?S⭻NsJqkk_|^^}q~)o_7PK
    \               com/sun/jna/linux-x86/PK
   XCrՂ   '  com/sun/jna/linux-x86/libjnidispatch.soUT	 3f3fux         }\TU8dZEfPTXThjJ
j	B0?ǔoS(Һ/_ZfVZ՛|93f~?}w9{{+#l6hGT)	M[)coG֙o
Ym2YMϾGAкlj}= ~-+wlR*Hd祿LCGw?˗?tޏ&;CxVй "SO7·n<Dx{bx6x<uz΄2.xyǇhާg>(<s.<^xy^A|>Px·g<s<po]xf"<Kt߲_l5?<ǛKx.g*<}x/<	lx.}{
tFx<;o:W3|ϵOx*x/<u<,-x&X Zrx
<Rx^g4<}3'S 6/X3_t<C<<xL7S<>	Ɂg<<<ohѽ+6=(Od_|[{{ΠC6Y&Mt^O0sx8QBg%?YWGEú<<K`:xSm~)/׽_2x<nbLG\b]E{gbmd57xb5.4:_bJ]zXKS/gz7qqq֬J2OmJwՀ~M蝎x!S1s{+5=T`MtsؐEhOn9zhP}Aۂںwl6DyJl;bv@_Vn*0e冶	hQOQ?ŶMlЖMEL<_!uJm7<9ooh~k#WԱ-:FvOi-{bv͵69e}@fֽ?I7\q_ښgζ/:/{H7uӌoܞGG=}^8Ȟ9w|l;+|r7ݿ//܆k5wd[&[u>]:^OK͛~[11^&L8#+K|Ťj˾t;!Sܥ7y1e8o]7^jλś驤I3tݿ/{bo܁3s'nzg1iy}I~1t5N~gxlߌwAϐ	Nrˋo~_Kf6ps߻?x5<+t'\wg9S+r@Nפ4}NYYWqaE=DӫO}$f+/_{حz<r룎I7>?fyʾ[2~æ|o`CuG=6+VWq'eƧl=ww͑u?Y<ܽ7>zS޵$A'		z2(}[`\31SAO-˂®őO=G GAWgs -
¿!H~7A?8 G}_b?${-_owk%~R?W?d⷇#~dP!?Ufb34Wf:mfi0>:~iϿozUøǽs\Sk~{Cjo3iQnϺL
JƗ|>gї6_ՃЃ:3'
lGx%
:7FMON/PR|.~(b|Sheq2 ֟5~Aydʫ3`<O+8$XF(,VO)o<
f>/(ߕZ`y]<|_O 2S/t>cyzՠYv3W1q̇^raOկh|f}mJ~N'u
i㏀~#ڏ$Ȼo&>`f0/uAgA|zyi죏"Ujρt81|O10>ʳ1,>ʳr	{O'[ P^ ߓ{FcJ ?Owq~-dtw#lo`}]ʫua|!G3L}q=ַ3P% ?YZ>_lݬ7lL[kwzH=0`(ߏPOOg?"ߩ
ô؃YZRA_Y8fUG0>k(1l|צKGǫ>1x,Z=QC46 ۣ5@tVCԗj!\K,*h
Ӵpj'@>5/z7:Y|؃4IFgS/ ,oW7A>ZG._u
dۏt.A7ąU	G.?/w[ ?Mu}Y|ON[_+7ccZ1DtfuRu6Z{sҾKL<I}DˏЯ1JoZ?WIյ?<_rOoA?sOZ|J6>vMqlt0)7wԒiIe\SnAѴ"qI:|SsGO)*w^<<.,+1曦ϸcIY%E B>I0Mw?*-(+[PPDo\2mz~Yy0UP<i
6N/1+M3ʊee6bhz~6'2'i
+//t?$u\!1ݯM#)/\Z-^d-WRq_d;:x
Z|zIQYY>jc<5bZ&岼lZQYdC*

rs3\qa&jAe%n**-U#0ʳNTݓ&vOrCGͣxXSbAY~~nrT,◰xOyTܝ_:Bm?Kb*hl0o|	+iEi嚶LY`L˧B%p/	0!%Y-	/!d,EOe§Ad&,}j0ʔˋM4v?4,fʓ{ÇG%e(˟O{;pnThZ^̑5*OOOO O4NeL*w ~OMR.J B4C#玜3
<SAQqk<ldBѨDlcG<k`\FYq4S>煻!yŌ|\z[7FCS#	mlQ@* .,)xa?/tr"5hpRX)F
S"Ka0R trr9L9aj/<+E6~ԐssgN.K{nY;=EӦ<?] D*'iJibd^iܭBl@ ҼRr263e&A+NFBNvzr&əPR
)SLp GRб`Jf4
b4^* ~{a+D7Q#3ONn	+rigM*4UXPSS} !绵JM*X^uh[7V@Z 3w]K<ם?47f\lq<ȥ:~ R0S8Z&`F??T>dZi}hAHVL:TyMS()GfL@hM
'[I4id>:>aiu8#Ġ؊R]k9t[@ i4Z7ї)T6.V@-,]SyI
ȐVSJ
~+4#kDg	&,/x)7?o{dr6?M3
x}Ey ӊK\HÇܞ{āש
LRo 7\h2+կڛŀV7c;(ns~@I>s_n&_TW.>6=GV-k0<\<\u<󰁇y<<C<la+x(󰃇<<.Zxh塍:y~<a<p xdpy8<Vp	p9Wp
py{yxxX˅y<<򰍇2;x#<I<<Cn^.<18!h! c  C00!@yaCH 	CC0t0
凡d1!ԑqdL<Lo2ck2bxK/4fbGi@/0ËM^@?0dZe'ƃ`x9W/ᕠ7^z_@0 j7A/0Chbzᵠ^a׃~`x7~`Ձ of)Gja)5=v.6u~߳MƕP<lwϞ]8	E]&_+_D+V}υB82/2k!N)5UR?_)qwa*'RAq
ؗEq\_[|GB\&K8NxőT!f8V┿Dq$][C|0cR)Yj?1%e#++)Y5#ku
z?őݔf?őCΐV?1+2ۥOqZaW/7c)^Mf/x=ŗPc|
ŗRc|ŗQc˩1^IT/j*O*gQ|?S)^Gox1x?MMΓKOx3?)?DOx?TQS).SS)AOAkhwDu1IpTnFT1AЩԻ{K:ݢ%^%W={[S_SQwAq^r-ԛE/,Q@fqϽvaOHϥR͂_w$Աo3,48K _+
8#&Ҥ)bvşܗqV}Y% 21agwmI^i<ГvL+p_2T3 djJ7FĥQK{Y'tG&tIDŊ z+ G<&N,R\l07$,7&((Ք 	ұo̊U
=go/U-8$#?N!kBζkx*߉UuTYp$Po3h/#J:,ھZw_b ߃ j?gKDLv~o_}?bb'cZz;fp씰ةظ87cf2쌰ؕV	 5*䋸7V{^ ¤%<X//F_/Yl	#>+P]'XВi p]8~'4Ig,R f B]X`{ prO5!T d@C8#8EhP_0 |^?n_cL[~a1\VZ=rAsݟ\h,s4MH=[@kk9DɹsYY$)%YX%iVYv}ׅn9$,"yF}}C*6HJH5AT^
V AbzEFpMX,Rm_}0K7llݡn/:R%-}TXӗ5yˮ5!-ؤ#5<_2/ o
ψIZY,w*c"9]8[X	VF\GC]MD)yVEM̟PiߐˈYypAm߰t"+;G8sm%T`FUڜ6$\]\1o_*C~3+&y9BïV((`XYWw=U
4M( 	imop$0s}!O	<HBiTWI;wFJ^m?я`^~?HX/AaS}q<?F+5@gYG)cNvC9A2i")BK,9X
:-̾Im4u9TܔVDqx;v`!UYFb,Rs
{.a=2} '9R4^24g~5m={UAy-Too45=9:r@	٫dQ,4·vhNIj&rU멠3(
'}_xA>
H
v "ce?$ʋUETD;ө,Xb*673;YbʢCa
~Si]qNb0 *pt姿X%?N%?_op9ɏ~V[q#yHJt$+7KUBlo>oz".	e<0d#+%(;	DNFwJ9	7ut)ߢh&mb_jVS+z6:`2?`lcL'v"+%Gtf?t}ɻEѯ?*cXTTl=P+Z* X9ȿ@ABLuA&y/HNk36A4Dj~G%e)X=$r]5HE5!=tuot*P5Dt$4"YL'j=m3sd"AEJ$!3K]-:ɯB۟hj"fp?ΝȊ?V+&%HàlX<~D~,uyROvb41sHh2cqXJ#s9>$a} j|+
J>[fVajHGvajw_iŏ!orDl~X}vPg՟ҍǢ~G.vZ$]w~2~{߂+P
ކ踎H#4&:"4$)TpǬ[k0ylo goF	Ŕfi*d1gA (z.frwf΂M([L'pUG;gkZ(;'BЈM# L,A4GqB
GVA|DaϤ>Yh:&u{L/ LUb+fƘ/C xg /dN(Ʌ4Iqk*xqz* )ǧii0>^
ߠr=UulwPS0꒣MuwzSO`g(V'U-bim.#o㇀Qޚ˱[s{Ư!}W[;ȕ?{@@e+TLMrű7
DޟVA~Cׁ+/#xkq>,c{{el|6?^I	os1g8q0\AbFT@֔nXu +{!B>уYNuZfqDb*YN6yj^>zެ"9Thl?eǉ$B~hBP{fg
Z2
#}i>Iif
!_GUdOD
FN%BN,wj|-->5/jդd_b5Tq̦J|\$"Z?߬(ov;ɠD@LBSRb"~DN	U: ->h	M(
'YUty)!%-,ͬi*hT?b)
U$MzgW)Z~|H4Fg=i(z5Ac>0R_@{ϫbHYO`
ZǑ>A)h"Fz4О$ڬh	-Њjh"9\,%򽵛Te	B4DW?
~U73ai~H
R\B$/
"=4Z[KF&/BESKyc#:DaJhn3*JJB
MXbBy 6e:dΑ|##-¦nU,Эa,XO-VA905hlGlgjU24V*T4k=:>ѷzkCVsz+L_\+L^a&,
se9eWeWXD/k?eWXF/u^ez8Dx1B^z/wދ齕K齓~gAzE8!*%[1лb1k>Q]Uw Jk73^/QyqSXÔF>tB-986MG3]Ob=?e0NR֙ѢDJS& Y6Ao[MV]܈S8TEjQEe>_쾧t؀VPA
fc
m~o7@#^×B~+L) `1WX3yVD;\B?/^:_G|MWHA:_2|^?Xz^ZQ:_|a/莯^c?#IXaaVRw7	u,Aey_Wk3X"_׻5_Gk<Nm~)@W+pCj^Gaqjatͥ1U=bXx:'qqgꘁRP߇i6>
W-=Xf$+rýʌpM{lp<^	׮DB;2Uf:1/WL󅬹oEQ 	ՇTARW3'^8Qn#:p'SÙ*U8Vp4 mj{`[
yƥ>w#42Gzo)LΩ4
=e[,G^;&hċѩ+urbᗀ>_z6Yl?OV#vA.?~[\560W8#4f({oSP>ycw=	;&
`l46	uupDʉ?|x6dbŜ6Twqԣ
rD@'
k,i
{O~wq=T8jjh{:ꚡ'
}yw㪟+/gZ&ՂcB)UʱIf)+T+t'/Wㄓgb}}m(fPoYjv༒Ĉ.StAsjnHɞƴ,	kwcz[[)?WUē?k+q ;+Qjpa޾)I
m:.ZTR3^~	Zr@D2%e,ŗ&J9-UngЪ6.,m9ct u$(eMѹZ[)b{ړӦ;q\Q|b n5d	dۓDފHmwp*[t=Dlq?:d2H9VDC/fڤx1ӺwdHGy>1CrJDW xګ%
U
FTCN8uqk'~?^ft/
F:~^Z84Ւþ-)SvupIL7]'Q>Ƣ|HN1QP$e$aWHk+D "T]F"څ"I@p;QRNgtfuӟ/AbNdZY0^>}1L^O9OG@dLPUH^wʫdo"H^wyeV^[z眵~
a$v붝I^E֯z#yP{qZyy'?G~*/${#F*{}ZyM؋z}YmFڵ-T^5nl=Y^]d!μ6[A~aQb={K-zɹ@te._ƝMuh''.=1GIuK$p#X%T-p(cXGr#.@ >7g
om4P7O=z7k}+Io@K//U&!`%AyJC
(N143IrRNǟ.3\e\'ThߨSy﷍$ٵ	1@y¾MFP)T^}aua+8px㻌6`LG_[cd]Rg$G~?N}g6Py}_?(h$QN+[wYצ
FzqCoMZ+~%o0ץ~V^v~%7WPy=7ke]o$y%V^@y
vu:#yݾ.T^2vD֯CksWiZ=~]H^X*k&y_+2ע~"ˋ]ӷؚ\|-<.1Ca/As]z5L"`]]cLȃ&7s6$0xi&r^!D+]Zh̫H4Jhi^^E6w miQZ7QqMx)(;SR; bO>7aaFpŇ~%$ۏ8a'SwVw3s&0;Z2T>ΘM0Y٪(޴y-MhyV,+oiMe =x?02jrK9͢bC7soֹk:Qȳg7RʴdznCe mg;|WEsO_BC7n =Y2XKTx5lX
݇#rN>fO#L8:=j;[5:̢]j?N&l>;Dlq
N{wV&g^'e
\w$H1@8Y)'V~mL4YF{Nu@-u)U|j?|
\Z4`bE+fc,`$:̠Cp/!0/`\.u"^a2=iEb;-j\d'̢U{l+fna37dQ:
{-l3~UKWX54]8:MC3Vney6PRn
qs^5qk_߭l~Ol QuF:*T^k<úVٍZ(RgfAr:SMB}I*(C:$W?u
9JbWm4ʯ	WBjXFP
}Y	U(4,8eQS^^_~ހؗg_[i$/WJx1bt3WྕqxrGR=fuLc/em_Yfl*>XR}Zjtai÷/ⓗBe˿>/bKg_A6φ&[#
%
#I"TJbBZq
#Idе?h.[q^@%(VxE-"_,7W7#¤FrU }g&~Ѱ_4(忭ל_4,՚PmߠP?
:}(hr
jJl5ǁPy~1<#ȣ0#yG:AlU}ydxz>NoPVcl~H.+ˎ%|zrFr_<sA;MLg-*ouI" b(	fP|>`"(LkOˌs:/^$ДhuDMAE1Ǣ1Py,YYYQ<g$<zky	(c45ƴgCJ Bjd~H>[o=U(\!Q5mCY|H=*9φ}dȚR#Yg)ՔZ{cL]])oeK0~iP^~Y#~xH
=M
jFϸ~|ֿ]_BvCa?m$O
づa1%0ƭm4>_`9핁@Br W&}]j3? Gb6rOwq7
[[?q{r<۠>=pw^^biSyk㞆|LM,?l-C|1qRdjZ|l"zVɸej1*y2<kXQBkY+/:iW\yЛ|X[,V"Ӌp+@dpA8Qѻ +'rpUg2A۶H1Ww
EϤ8yIO<@	Q F,y0IY'4J*xeVW~[:k
7`tEo!C6HJB W=Z&Yڥ'hdaexhXHvTH5,BRf-|.&&3鋊@::Yzݹ
PvA	wI eG1oz[-2SJb[XMq6+$IQ!)`M3;47Ij!3
ۑ~oLu6{*
"e)+) K&]
lcUA6X{nq>nI˚j2Zf"S(ylR
/3v&A\_u5,7OETqmhq߃_9ѫu݃۔5"ԼSt\ʯxĚp᫧|kxnM8X
'^Pw孖܎SjqԀOqUhm
yg??qXO1l띖J|	-,n,VrY?Ua]q8?hKD>j%)݂Va2f)4u(NMVeAӝt6yYN==v&<nfԬ\ܤ1x8Y=qzk Bjn|sRW:2ڤ^^!pƏN:8Kt9-ׇ
rp.nu!^s徙K j6S겏njgW3hB<?,DJPEgG4|3Nlդ"AcL9$ px97DqlTk0.+Dq4\!8Arr]*L97Y6I&QԼêMj.Ba՘Z.CYĢVq8M^a
7h`Q?8L)+v_ev&IRdp WU |&N<isPӢYGD_<AJ)\/Xz3t|r</,YiK2e's2 > {R] OÌ?~;UB+?StAOlUg
Z|WX8VD)LjøMZ Ì(@$f́Qof8,TfDɉi=;?	;bN#{uفacMۂ-;OEn
6cW!M<{ َ `WG>؝A؎`7γ5z>v/d||쿾q1GSsI
;_zqkpIG8~D/7p<ڐt|}mGzv#^G8zwxmAv48D$ޡpjc~*z
I;4nt=qbf9V{/
.XG:6K̴u5Q~Զdr1?zēB&\GF^gA/x\7*?Et#;sy{<νl2:
~C9wTjV 	Ι1xNٙ 4O6!CRΩιkMk>eBAcʘ!ƴs*ji'͸Dt\wӴ>Pp+v3jD\h[}}={"~x39K惵:qJ5K|,ɋ.ʢ4uS]<
ˆT=Qļn|m1UXf⸡4FO0,Eڔ5?s7^xOR'~hX8g?~ъnwj% $.cs(>(Ͷ>8/鸓qGŏQ0O9]&hUAt..TM=	.Q<0BTӢILmkG[sp_\+	uAgӐ+sҭmբFyxrof]Ab E9ݵtx.)]hBz^z_5jo?|
v˾BPM_>=߀ឫp."
=eZ@+*~<XGE6?OMQx{J?6`Uzpۀ>pqZPOޚ|}x15LF6qZF,bh>1?7Kg#Q UKSl	tXpb4$LQm`a.S139QSʇf)ϝ +@:@'rg:aW^ag#W=(.54AyX<sl0gT!/ #WwR'qAp,VDB7#Tu0`c}S9`q|~~rSbl澕x>WC wKsLsKxMp		u
''WIhN->;m<!^=>U=~V<mOg{8#q>dafs-r\[sGH6_9ۨ^4;~}Y36ͯ
0.maf+Ӧ$^Iǚֵ˞~}R7,aPKq_JI*d'>p=7]8Br5N9ؼmaUUuYFrr;;|D-j
EzĨ\*WSܯtբA~|$\ԤvR(}z\VBwrpuݣA×ґIk*_=bS=y4<.BHMf>?߃?ۗ(	+ha)z+/gcL{g <sTl{Zp~MMr'rDυY9`Dr<UCHs_`#243A!_x
upȪo楓fP5>?JwD\qih
2a|@N<~z]##)m6=(R3jA)y
5f*s*^N%)^h?4Ee	_wB_šIr|Rh ٭i䬰9K%2"{5ġ)RE4tIzh*N]X$vVXӖ	A?\ e6=f۟8lM"`OkI+&KNv `ak3IS&G!3446E4/Y󅮨㤡p3A,(t5>%6Pj!.6v3=HyA>DK<쓷ӚJ㾚Dn*gR/IbC$Q}pyI"W63jNQ>)jq-񎤛X^!RʖQme~E |[wr+y4tĮվ'|YY{䄶.&S!5Q|?d65MќB?y
aR-|'#Q
CZ0|C+ДP*Cq-8<mdZ:!Ӂ؏}؈6l62Y(X_	<}T+y¸LW'
:yxN^ ģx3NwAd9.UWt~*7+~v3xZnO'+< ŉ@}eSSIvWxIv>A׷b[33??G`;P;ݠU)P9ݪWOf׾	7w](îs{m<L;]qL#HS@
avvorec2"r'.BP#B ߞ}DEPM
Y	Y	3q5ǈP =P B)j<A]oD(\N(+PHP}"Py@JN B9T!AmD(FNhwULP}|`:uJ	jÀP 
N8
	PVFA@ 땲fvCEܭT.DD(ۈ&{Sv\<¡UjD($/ݯCϹBI#$@Zz3νA/PP HM<VϹBQsEJ\95*N2 rYs\OԤH	2^Aɡ#B =+md ?qm'J FAmgysZQ;?R9wrgLP1 9gysZ
Q)Ar ]*FA~y֜9W/B`ʞ 80
9\A|="$@v|?_Rf6.^㭙	1~ʣ(6!@!f5<HCt5]cba[f\49faۺӌ
Jc泄ܥ0s.4SҼ`Ô	*KsX4Iō`Q`. W[H	
TS
^ 8B.G䚕Hrv{v?S$^Ѫ
0W]M,e^K?WIW8)g6ڊvdJ"YO@KKl`amФ=A%q佄
/٫\^ Xl1-$;M5n
LTI3[xI#!Ռ'õ[WJ;9BA^w ]'m"yTtC/G;IhҸzs ^DwHUR}P,
L0/lWr4+]K	6L0(ti#̮&89m6BaA	>1x`a|Z%K|c#̾	Mp
GcE51L30WD$`+GOh0ch*]U}:LJg@bU5&G#ÜEGhw"1+	m<+r08faVCfǜOYqK>qri#̥L
Js8Ǭ&X^{DnWf\LKÒ씷NHhFeC+&%W6˽.a"
oݏx4܍U{&`\ة
*#agH'AϞ]RwEI4-z4o.x G"?d:\͘_ĩQ$\3С}=~]lWM&ub<:cl8ZP
ˉ"wS~;zxѵN̩qH9u'8N![BiF|?^lT0p}//}+ѺcC~~^\Fк>P2܎W[x][p:1cPGqFbo't*_$_w~o	OCex=HZݐX|(
YάWJ.+)p,v[3%x6nӷR[ocn87twRn5Wt6vpE~6[z"(_E:ЀWve4몧]z21:'^I!kn-M`YyiZ쏥Gk(O&Vy,;Q8oܡ&IS|2
w'<wShwX;WXC>d?6dc tހ3O'B]SБlߐc/%߲W]<)>9ݙX_rO}~iqMnG
B͒þp)uVfwhTRv?i6jp-z8
n^fITeT.Qrd
RUpC!'uk,L΢'!9<Yڮ>j|/i%Tc߰Z~=e,y=A75dV7jx~D<OYGr1ݤWk0;:pz߼oYx?㊫p~2sK-`n2<o
sߞ<cΌz:O&#'C~w/|@N.-V<QڱF<Pj/L^'.kߛ4V=X{/MeɔLf1AmU-=!>.BU:uFD6lr"MSJ2f@?ԇSp0H,;Q"x%+ۛ"?c[$WK0x[C Ha%oX[ģlq>
ݚ+њZ;ZDZ]$
I,ыDҨ$(si;H0kI%fqHr
`)\B%ٲ
6(iy	|tAHXpw3^`߄-~GwĹq{VJ6H43ڋ
[@H$AٟqV|c^F	@AН6,iZt%hϨ~6l= t?Vwn$"8q8d@e !!eZ4Clk|XLZ:~%e"hDh,EV~k]OҊ\m=?g*tahBwzϬm}#ʳs y{xsnTvm ;gH[	WUplQ} gwB6T67,==)ǃTBī焵X!#,{"e˚؁1@]
Dv /Z] &fQTyt.
&ڇgL̈%YtJ~E;)(_LI|so؊1uFfk<ʦFd|Q\\W)E{[)!e\ǖYd?ĦֳlmlC!_ r-_ggaI_PDJ%cUu+@ɟyR+#T@"QIᣓm߉Km0\
L	?#(wC<mKa̲<'ʳel\L#/s	sғ,Eݼ>MJ6UX9yMPT,㊘؞x&~(Z߿kTN$cY2ǘ3iҳH K91#>5|,|96#>5|,|l:c>,F|T5m|Ts>n8s>F|,8k> >p>^01h
c>*32[DC;U4<j%jQES3/b/dDՑ89ONNOaDYnUUECm*}I9!uP
jv~T\Ɏ Do(n{GP3g~ݫKɟ!ziMŎ8"7tYGLwg|bU.ֈ>s粅޾]86pꍨǀ73UW5:hg5O*}{~F%@ǝ	[3v44#L8LY5iòpA4iN6;FQJS!Fd!{gS?o$w='R3X3UC72bn+(=xpExBn{!~"#[ax5%ltQ6_]Ug%jpm~ejezV2j qQ#t/Fʓ%fRJ' E	 cURi
]x̇ZS%CW2;cܙ۹SV78r%=,L҇/}P
AƄ|Zj
5?011Q&"@n#PȽ\#(CMmږ5Tᬜ;d:ˢ7;.Tgsb@tz6!`6fk`ۅjc+(36i+}AC#ʽ2+#OgMPmBFVxm7NH+O8[=@|f*016_mm*I[)__xBF8D*u:IPIm.HʑV;'G@fR;;,; Q [zJwY!@&B` b9 2rd!d<2vdX/m-~Wu1bh8Lt8x#lG]_fib~ݺ>A}Ql^V^*t=T4~jlZ?+~WWp|-<r.j	:$ fU;%`XFcιIaZbА?ƍl-+tf
ߚb/Dye}l&4.:u_|!} h(L?gD"='ۣCp9h#b3gyK20K-J
_ܦiޛ&)P'e/~筺}8>/
AL?UkS"ߵ8sffA.o܇Gyx&dYϢ1%WT<¬0kwHo16wR_q4ƪEwbZMC{	]ؗ'P^{+Z*%a ܯW~C7 Wix +~~7e˸ogS<˞]} OȂLޤ6Y~٤\9%1g1c*gLWXQ. C{ghJ?җ^$~OBJCi~UJ{x4\^xTEQ!H'LJD
FIz-ׯRXy
VlѠh~|pO8lmd1w;VC^HыqRSh5"@
'gPqKM=؄{n?qO6T1~HM萝;gK.~ƷkǡIOϒn}HO(a>G݌͞B_;=U~<^>ig`1t^Mg c&cJOYaъsOu8b
|Mߔ!)}xL5j`\.a
vgG.+y/`:#vo8GIml4dv},=8V+=&Um^@#'LrGjߘS tE٫v@8f?C|.Õ
1U@D {reD"?wg[~ x>Ϗ܊%	<ګOi
˹C.{`0A3`&h(,jIQQ}7^UyDN,eK7mDVi])ͼq	#"+u,rXUVNxU,|"w9˼4K,>U=(&;TAd$d6a /'Y}AK$\_vaWZXklkXQyj-F$;3I7HL婼Dj)(U9=] 7'FTY9(؛<OLϰWRjuJ".fgw0_x/Iam4det
M1O@IOޔVUJ;ɤJbi+Dk"?߻Qg30K:&Hqj4tZet+cǣmץZYKG:mMu7[E~;x>{՟PAI(W8	+$_O{Uu5Idgy5*ʠ *cK @KCH&͹@ѓDkږk[/PK5.FmJgՀ
Z{9g&==Oy^k-LV$wQx;ae)!|%S&`~i|V m:	GR|\iANU_2W38nP2~^[V,w>Vbfg;_8;wf(b@̯<]1A.WhbFovꃎ"Eܖo>FJQ<2A8Rh<֦>|[P+2|<0V&[eG1dm*'q6ql{ʆc022@AM.J=,#P]ND?hyBv+,$a+x>(nقQgt)=SIO WP[efԨ.a!f\{VC (YULC1B=
CLsVc=$|5nx"t+%i,}Aj.6. CG.*B?Ңgj5ڛmF=
1T^h⦭=f%]|U%͛u|@M|NDe).4{Lkf?\1h\Lb
: B݇o$/g(ClYX[׀4_J\ߒ&7to@ѮK8_ D4뀩rqYXo@X֙Ŋtko]lx3̗C%
/߂B_qXuPt@WqnpYɨXQGVpPYӅhH&ii:3^b{8qA~!=f\ƭiONcgt\G,ŠUG׌aU>tX}j;
6.zhJyskz.#pm@Lvc$7Cy&Y?b
 ] 噘u*g`q^%ZT^LY@^7|}l0:<F(-69
܋ƪ3b9!_ecɘi]IOc0!9$Fs=*~%"Kg dx)"ipȪtw0o}sDC̪)t"Ʀqx4T {6ܙQfJ(?xF[-!؈9uC}V#8dLLyxxF::s_CRWާiՓVGCQqMm|tAl:LG=zr܉'LGDݨ8z̏Q/uB$[}fakD\\_}Eb
ΨH>m[,wa!ɭ)/U74J/C}Naif)0:omq=
˦kVvg;VۗM۶"@Op:3iv}	.̜!a\\	a0=` n:-fd" -njnut6bȥCbqy0;._]<_Y^8/:/w>!SL#^ْt#.dܫĽE6y
Vtr1o?6PxO<]RQ(/uwjA#
{;F MBը:nbg+KS0$
Ih[;p{9>^AOj
CSt.~
icg
xn߿
orq:?._a4Ėc#&֓.{A >	iHhh4_^H:aFj3Br3JlThR&5n
y*^[UuE S1]"wk*:- uDW @iu<+6)0)a!fiJgtm>ޥHk^'\)8g:_FE l|<׈*=JC_ڂ
VEhQK9Oo8Q7Lt8|lQoAͿܑHيd;3+E[HYȝKϚ?f^lp!d}AL8?i?˷il~gA'!RIsʝ.5q{br1jh[Wf miױqw)߼l[Qs0A6CxdIlʷ
ͅ7Zg'ag?HS#wW x,aJ+u*
CMwX
i^1΅]_q`S^?.O<a.e
:CÝyAHi?6ۮ8!'bR)4<S)IԲG[)ֵ,-ۉ9NH/zXH%>1vb1x:Sr6r'}ܟVl
TPw;/Pt%Mzʝd{.
`?[x3\?3ۈ6Z/;L	WJ9Љ̋##__ g|?vZt-0΢iV䝓2{R|zu:32l=ȲUB~S6{"؍n6x_ab/O'n^
_XȾ^ԉ!aFzF[YTDgcȂ4VX}sfP/%~Mo=Gݭ%(;L-N|3B<^*CIDb&!be4f%IRFEK򹦓	OF5!PǮ읛ބ-#"MWOu7}w҈!,Ԟt2$.9IR"FlB@ٞR({
fbs1laJ|-b)KOecҤ|Xtq,=vJn\УԛbpS	Jr	QAڦVb^e462m}\oW0b	ch?c^"+P%">@6Ea%&c1?+7T
`O2#[bD4^H+wR)dTMnU;+#%@l?.6,&e&/5MJze4+/So_=I
~qo̾X O׍&D6E
Sh&*뭠POdqU^߀3VջDގ*xc[!״Y;)Z_r9A;s.V#ˆ(/}<\ȷ;eψq+MiĨOha%4r)t"8S,7pe8Y6
}MZ?\TΛbqƿ)Or<0nM_m1%/geQV
cPx>:ALf)1;mTZ[bӛ7=f6^X`7ըփMGv􈍧TFM1c(@3zlKM}Jj~)4w.I>-s ȧۃA)X?~;(ڻ*m~	89rHl

5Eՙ[WL$w'N4<{>dT<'w|K|&FQWQ|ۨYʙGg$6{0P:^t%=&l+هKw E$RLA\ѥY_}'v}/Ω0sx~5^Yi4tK|>^|Pl.(&Ƀ9ػ\&c	J%w+q
'ɮGS
оoGMF䗑,18WxpHfH0=`2cg8HJ,aᕗ-qDEc,QwhwQ
(
~CC7&]MYjL=	z[M:|[@1}J!pB.>+2؋Ib*+KYi-6#)kR=T4gy<%Ӥ]J&
踮.wyF
櫌k^$/Id,2=Z=/|2zƁ\xwP=?6o\c7`9ڑ7#NrZgiYLI$Ҁ,:r&@/M}]˳fy)C:UyY{ Y<Ħ+
ƊM,*."19S@Ĝ4n
c4^#7|$?ɛO:ŷ[&g8)wBۋ{ҦMv1L<vIY3+Mr3	F>?I%#bI-xn}J+Ώ}+샪wJ.ދA5w۹+6OnGxiȟ]ͫ)-oѨZd=OUh'HA}d:tm|>?UL&iUr3'
_Erx{qj<#$bcP[Ysj:BEcv`qˢS.yNĦ,tZ,Aα,bHqt:*ԦA1}FU48
4篴 9%(47XuZ,M],xw1mqAbb
זC>t~%@!`uC"8w(7'@	h^V !
h ΫW
%0ϊ=<iv3E)n]z-4|J	A>Bw`s4N04Hރx7
zmXnh#L:аz2Cl,IhkfeLo(bqbx.?z_L-<[O5M!? 6mb*7b2ːh1\}DQBAA;л(AB!?SgGp!&9mz[w@
Oe+
qYRlZ!wLCfB,+lRx",SJ"
xh?PxB5v:׎@gcct߱)/ll:[ptō>߷}Z[q>}R܈YN`Y6c
SY9Oǌ(
[?O{8c]Vc:-u|'@`po&?oY@By'րt;xO9vB_Kc~n&PoMmq
;;-6AQ#
gEpűU)Jo9}~q[dfϭP5jTUF[g!`تmb8¾&Eki6/b@@!ƞIHH'fT>y;rgpQ26/M}-L,xy"N~"G/T{-@Lbf9nE&1	%:MOoEp/TD3/EaP݇co
PZhA"R\+xy	MaZYL!m+1 (>'
|f8J0A|f83}]RWaĳ䱆rt*^wAUܡ]\0́*ufq{!X4^d7\4Q~=)ʟ/3@	{_/{Ml~KO*otl	ORxo[h-4E6.g',_P .l	L0um|ƛ=Ij(C@{ )_Ī2Yn'+y@EL4Ȥ20`	8\gU]m|˽i)aB?ІQ%;=
޽
J	PLnϕQ*&tpQb7aF~+qݵ0TȨ`z RVxiM ބ9P焖̄8>L2
ڐ"YS4LX(8 6ǾsynUթ_Q'1nd6:wa/h(}/6H͕DC/o  $AEҡRW@9Dm*I#}'3v{ȏ>N&qg9s<~\. ێ H-ax]hg
BS׆0l`ȆB\c6
Cq$: ^ >Jmd?x#\5?E> Óz+3)<qM!y#}>3^P$]<%>ffq8q3:W+(
4>AXD/-L/rCJ
ķA"SQqW`!^ QnG=b%!6h妦 O"YJF|-M+ L} $vpT!$\fLO|UcB'%㱷R+]ߒs=SCی~p<-/0dJj3xRpV!C76rmr@tfZH!B6"ehx#$R,_Q#Kft] C%ɗ1fj6}>PɳX> AZm<^fD
вEl)q0_+uP\$9v)$1<d\^d93NC`79HC7{=4_n?>!6]+mJlh^&rAWv1%bZ~lyfJs'%h0ͿBzpq(=>
-8OӋf߁NKA-\Cݬ؜[z4-'mLk$S;YiyZJ!yVCw^NO؆V[7ܤؼbCNȍF_(_SQ=EGG 
*שփbFT.F6`h4#۱UR3Ϡ54=+l`7w@˵cJ^hUv}ʲiRq;c "d
%*O%s1C3I/UnU'nQr%O`
'EU;nH6&͕v#Ж:ĦgŎs$q/(hQ`5M/q	-عb#hI 0:C6X9hچ'l  @jck.(HmG5D Lb*0o#!-rNN!8{*!Ȅu@G{C*I|1m;nLء1;rp{M;
Չt̠_xb_Ld&cM/cb;j8g*Шx@!a)͟+6Yh@>?XO'P3O$|͏^V>?l+ǥ7$ˈ\Qzy/FOryxo2X_1ҘH{?lƒ0{CRaƝ̝IO<QHO"sYWI	g䝦v:2'F
}Vy*p.?'zY^nz~.KN:NpfQ
4au>T&VKS]v^	aswssZo0
w83xs =xE6]ȦJ5 f94yxt
Q]K0e(ړlNW ?-]hw$^IG[Mz+1E10>3`1{,Ȭ?5J%97HM؅=Cǻj^V"MD27ӕVExO8zxb@ )E*G : 1s䶷GfYzA|βy Q}:+N$QU-g,&-[qBY!?Z dwS~TC,m8.]6ܰ&U7~RHzeDXl<3LnOU8M4g:$ޣ @N9Z[eX7W`&wT!vϸ@8Va$ٓ0Vq12p1S#Z|Za/N$1/Q݊

Φio5M|jEԊ<HJkث䑪gFˤhyY$5B:5MڗֺedVCCf^5

{EL<X2gO'.	R{Lf5vU9<hT>K'xG6qo_(=*643Z}}f8{#S;Sߢj3S4Ƈs2F%{<֮03(В;\pz[,@;,90tЋ!e8粢Dlw36	Iчåo8bhrp/\9y%ƸVEM\{q`0m?|rJDA;NuXZ'l66l{b9n:n(6Z:Ipڠaӿ Ѧ8ec2`T.-i;1q.s!GI:̓,#!yD0Ȕ CUe<ZW};1;x
a
wO}	p6%.
(NRJ=hx"rCP|
ߥ;;EFmagыEƫ&±󸇻!㯤_jVD5d%E(":.ȬB3nk
>_J딱VG2
79^ZSP[aQ(0`.'0":đaW^$3)k]DѨFq4oYv~6?WMyH#=β%=0#

v#Wh0@]h ua<5-_]:뿷|'6B:FהO@\p
j;?Ѣ[ tT/\C-/coBkW#fS>?c*
%6
bxr[15⩰lJS!	7٣o)@[8NdPZ4O(v*V%[K.hWxf@}t{g$@<uk`dԶb>Ku0"0VmlU(&<Igb<3m8};SBlmcGڱ{Y%R$1/8~x &7ǩ-Nbnj@4Ucec)t|L'59jａY:HP-I֨H*j^^:@K!,Ri<mۙ<;NACHx)
ӗY
db|ϱ@E`'ŦH76F>$K4(A/,1uc%yaT&	iuVJNb~o#½mC'sϠ'm'ycl<q
&}֖< 6IM말9G!59~5AɫK8u[=4V>mUYdAk62762w,
;|E	1 hj̢G
q/aK'>`FS9@0Sqs	w{{_F@1nR,Yl~ΝjN3^׷Mq!}W&yZKS 6jn2ʣ2-I+$к#Nv%Psl#LmӇ9o@h
yߕ%=fh}O>OcFz?Lt@36EeT!J#z^ݹq=F47"^Hgb8c>E]opO(/~R/{\P`I	9;cgsrv*39Ai2zh)Y^-Mߝ#)kyb@罘=Jg5ӇՃr.aB3vGŭpUîJC ˥-RFQN҇,MrC.̧M)#YcePJ--Rȸ!W:#6> NpjE?2+GpνO^ 4)[p┛Kb DR+א-%f+_Ѝ!>5?a|VQPt%;c':<Kgt^[mRÞf¿QO(.486QG1j8qxCEG}+f+nl:,9ҽF5:
A!TkmP"E[G>qMqNp?'6Gl6.~K?;⵬;ڠ҃n]/
MM7fxV1m_bw>O!u-qS1߸Țއ=Sr>r_LP`@^+< 5HK.>
g>=*6K}	wV+SqzX:=Al_Gp%Ji&
 $t[Q;'NY n'z!^,
x)s+ڑd&ADFM	F39RopXӀ}qדfX<|DK4	^?
V5ng,u=1Os\nSۈ&/bk?L=,JFڥ>c=v7BW1rϏdV
s;śW
Z^VuE}7HHZ/'Bx@L񿈽LLRO'J|L}xp5{vFP)tKjB;~5sd8iSKISGթxS4<HPw޽h1fma7(6o£
綽&JOFUjhY7\6y\zUQ4[g'6\<պ[1>-Hr"Uq6uoit
\f̣ 
\0^h%p.+4z=9z|Olj]o$";;'kUZt%.&c㺞A{iӷv1~Q*zc6c{UyM=:gN|5-$g[ E	*dMEKsV?.S|9_ӘHUR6ZEQ+x~nUr3}
>+U6\)PDl|	*~Kg29jųdPTf:(#ةg`Lxxn|"cVO6.VW8L8[	$puH? 5ء7m>%=?a|Ҭ'B[MԵH]4cJ%c:θ+_pm͂
Nܗ5>CqrVBZ~co7~co7SIr2|m0Ο*ƃ1;M҇bjkxc
YJ,qgKot^̫m?E|
3ZTC%-n|Nn]wh<tVCU@x[&DoJ̦$F<bЈ6i '4b>'QY3?SG/(9VPKBW47ܱPH[l0c2ΘUC9ރg<6;:,׫mB[e?EIuF;K:(Tp	YTgE'R2f)7#p٩їo
-OFrY|yEO/zƟ/nDzK:F+_%I^cְu~co7~cg?\lPg"_o"c C~hooooooooooooooIIB5<-nLvTejWm_A3~pϛ*ZVy4_{mm˖IIZfV$4)<4]PyiI+$v$;_$05=QΕy.O;\V)5^O˫B߽}W\rծYn[Զ[Qt<]KT֬pj]ҚoylUUemqU֬-zV8k]Y9no͜jJVx.aaeMf	ﳒW
ZSpV/)Tw
5(Lxj7}T+<.orBä&uz0xnMEPܐ[֔9Rv^nuUzB5W&qei72kJr'҉iB^)T֨O+9<UP%E\U}r$7Yǚe\HtEtgm..pT>Tޒ\GzaV^^T֬Unw\-U5kkkY So  ]7 x t|JVV.fV]v#Y***K"Kfܚ@r(Y[A,mY.t*J+g,Ou.g]IYep[߶@bZ˪jzjleeN;l,׵(5*(ڪKk Zoͪ.ͬ<
A@UV[؜n>NX -YtYqyJ#dXj+1^ӳ
tW'Vlt{酮:F!IC
~H}бAYQ!P6t#EgfÜ9$):C
Fxוފu.O4bGEE}#,lш	3Zl4ꐯ+k%軅JFmmFqzltVX#l$0Qpv:0|`:o
fJ:!0B1BA:$+/7
}VD}G"GFw[dEpLD
'`S?J)x]>oL0ߞc	?L!L-ZHsD'})ОHֻ&Rx@Zm9HVW
MC>rR@sD-h'(VT4?p<(
A'8/zC9
PMqrG{
=S$?py>:Gp{0o¼WgrPkˑA}JYS[I\*umL+ t']ZZT}-OQW)wnNR75L)EA}Zj*TԺmޘ27e0N9Z
\:8? 'lEc_}n3)s=gOtGr>'uM	z	SCYS\8U^@~8QnK+70#.\
nt"⹜g4ՃseC<
ŀ}5v!n-ǝy挺$a	e[n*y\[^	q	*[VSv]W4jRU\[Ze:_
`	:f3x<ellmАí,PG;u5UNϛH*6	GlQetm[t֖
UugZoU9QIy+ AH9Y>jxJ+k B,)(naut,qC|0ET<5z@FD<_Ȩkj 	]a6큯eꠌWlh^%!BwbPKBEoxH-ig<K>_y}Ew/4Ci6c5[y5,AF͋jl;/D%+Lr3rU~|kʛmc+74{vÙLC8$/sè÷)9B腆
M8",7G"j1\h}QdAg*-ԨF:Hmkhf
m#Xϓ~³A.m<0)BbYlW|}M7yyP8^lEd4'~(~#$/P&J;>"3N|au$2MDކϗD#Ca:lL2>Atded`d,,Yã-TPlfM㙎!q3BlKKvy6H˨CťuNW)
/l֠0j,hW rxn,dS/kb^6>H:_W
/չ*+(ȂXO|zuE|J5=䗺=4dԍV#ZNcfvw]:ԤF<lhRp=[?NT>s'jT9UP<7ӍӜ	#d9դsjۼudULtd-Gv82
W/+-++믛_6yF2N*)+]لrU2F6}Ԓ?Fcd=¥ը$EQee>BJmySPۺS:ʆufCjhs餧!aU-YO+WP't1ajOq
3Qw:ٲ=P6iq:ժ^ErU]76{ú*照8L6ln&zwuHZfm	WVn=Bo嬁ou*2R<0_r	fKXͯYQw9yꪨ\=Uyd<X77B?Ot>xo#*("o
6
倛PrӅMjÅix-=j]
w1[^;ΞOF&-@/x!>u11utٽ`$7^NUAFaݬÙ{һU+:e:Wmb#ntM~]k	c&fZTP\5S]')w^W-,-ps)]ãY>-̬mmӞث
Ck
<9tp׀#^~eQm¡+od֤'»	U|k3s{"[YW*B܇"]D	p1܍ѾF)n%pb6Cds=%VB3xVx~U@sHt֚Ph><Paxng}y(;x
UN-
s+<j2ou@x(SAxm~
݇vO(;B?BI|ǡP&	OxDxi(vB}Pg<m|xsUNVxvAxx..2xaxs< B*xZպw`dl4nzEx<wa$SfSqcWn!A~6goEU2oKq~ኤq[ߊq?Ї]1nOv <1BX,K|G`-[b|=ޥXŘ/cxj1:_
z({~s#/C+0Bỹ<7GH 2"
OYU](!Y@
+^Ët
˗#!zV~A_~.]?wDi8=8,jE$98G?
ǃyA

aH:^ ?+ȇQp'	<<	/f/wk/{PHǱjKdd ?`;@n͊jO?ՁOct~XR	ȹژWAMߪA%rej:}[
4RSM?<Py`gjJB̺t)0d ޸ߡU;id
.C2cg<<Xzr>ɴ5Fa]7i^Y4zP5Lƛbx<1WL28=þ_
	*p[
\8zpK7

\Yfn>K	.\>BpE6kwඁk8' $
(N޳F.]"EZ
w)PF{ZoNH~o'x^ҝsz諑/h$g0]
e2c3""/ቧm\>;EX	W!A=x-u-m fx.R5{w6 <{8MvYă:g'= '-@ sܕ p.p!_{\>w\|Jpe[n
8/=ap;.zJpe[n
8/=ap;.Jpe[nn,t~ًd\SYZc2?k$AHqo[bu[MǙƛ[YU~me@кR:!|c
dOp{SP~.gⱗ*!㬇ZRO\WB曒u.
Rp
ɱ]e(JbՕevXB,5nSV[6%nq<lP6ASNn'Pke"Kq
S|0[!/Z긯X`m߱}[-D?yaP>C/ʉjt]mByNWtG<vF⡻OGD׳H'ù }Pݴa*ưE\.Y5~o 7)Elq2pQ$3:mmtx׺㽬x; /]W]#
!]|{=/@.ux/vhe #
϶tqZy|*!>x6>Sz{@?QPwK;>*>m=V
M?c9VAY*RXgVaFfA`ƈ"6`Y{0an̎JfLj`[cD
3'6`x=0x2K?3sGfVuX?|9iRaNHA-ߥfas|q|e|m|}DKe |ˀYPtH'=QY~+y|aH%0Ws^2D!
B"fC5Q.mEFpVޓ?fW@hdkc"Ka)de sFomVb
25
ܛQG @9thA1!Jc
 w?( f{>(x VkS7;7%?_pm0ë]Q?O2x_$]M .
Q'j8e4+v?wpuBק`~p{7?;dl֧!uT	P>t
pY_x [>nAst dz?
p@
p&<S#	%Ӣ
 c ܝV ݧsw`da_2}QM.Yh?/5E&7YpM&
SZ>Oi(:{c'Q1c5Ŧ_+F
hi< 
az=<M6߇R?p] |Wm/巀|s  Z7ܖoKL(Qp;>
yRBHOoa~3~/_*; v!{A[t۵y6*Ts$<+
kυQk n
ۗoE^A9w?ȟ9%* 6BO/ZgJ2'sډ~d 612g~Zÿ^>.CpV3>oVFw֣ }Mg ._LF*%B'?]0KP-ZW= ~s%GNpqE\xH3@՝ibp*;B-/ ?J9~%>H V
 ̈́,a| pU7P0h1޳ ̮tu%6|3(=W	BFߗ&kyrd> L9Oҋ$r[r5cJd|L?6;w&_0NrMlnSA6h̩
p{k>5| υ&/*\,T#`~'moyz) Bpuk; g6ؿcfƛS`$&Aw.<n"Ω*Wug+r/2Wiu<+**zV5%wՔe%$_ŷ+.#7W(]Sgf,.2W()q\5%~Fvz!xMDunX[qiS}-a,CwrZWpfzPP]]Zǭqn4ucUFOe#aG²M282ڽэK
GUGQdQyU
\[SZuh()d7RRWv)]$o}rJ7$O;'"*VΙZ0ȀSxqM#UNC];zxW:W_:kG)Q(EH|:(|tC	o0GXMIUmPǖ[XGYV% E-8J<N\W'PvVCZbEYF+2;@	+s֚2;;m8 (KS^ATrqqAp*>_AcvSxքJU
pJ8uU~+*+*,
VzH	xkfA[%ORw5#Wy|&Ct0"[pfy}LW2-ulʤMB!H#GGtDn)aYUMܒ5Ŵ)P@e>1
mm=R(-tzY6Z1:l
ꈞ
PVBC([yP `EyP#HMɪsr9J3\	4Iʚ᫉WхH
~&-0'жuy.|+5<v">]QU#%^i"sx>)_zMmP}w-K')u*:_V/Fpo9u^kU$T ǨF<whw:Ċ!m9\CVVHeEU؉8b/3Z$Z3	o6C
PTdm-knNӴQNI*qgyu0+F
>wOgM(\T7C#D^Xqs
-Qu7]<肸}~s#(iN*3|T9Dv`]{Bc VUw׭.xD/UK/TPKV,WGGrQJ~~5; ,])a9rgҊQ[kncqa@a'eC_-2C\UD0G+7';wNT>\5PR驪V*>3uhMQ%%ed)׍j	'P
[7ڭS#'I;zJl: c ˫FDQ2VePK
    \               com/sun/jna/linux-x86-64/PK
   ƨXd#H  /
 *  com/sun/jna/linux-x86-64/libjnidispatch.soUT	 %3f%3fux         y\ < (.8T.K26،ₚfj*.$OOcdQ~\p̌4r&pIqs33}K=s9sϽ平T奒(^'ZS=F*rT_LՇg->e]rt?0B>7bO?Nß|wU9ϸ?{s5W^F]}7kxSRR=52^zI4
|;/5jTT*
LVx3~3"6.
<oMg <kxzgWtVOOx
VooEwg*<XWA3P}<,wyHg<{iaቀOv/
g
Lg<xDx-<4?<<³<KgD?1sG"0<it]g/9Axp\xtx>'Lg<q|<c>̀gB,W!.i죰+'=<O
<2x:3
<t:<Scr)7y=D6R} p>O <A
u5uI?oKOx]?w6³N5</W?_w䟭y̅=x N]h)7柙𼢀7g'<j_;_pږ*aSc!mBIEGG'-oԨCt}6	4!:O<QbWb>ݺ/l?jUaܑ1>;hlkY-T<eh5S?cO/}sM8&b<Em>g
qy\}
;փ')KUg`?u}f'c8f>P?q)aiƱ}cM<u쿿V
>a&ư?+W⸊}v5a;ekƁmV߭60=|i١d|57ϗ

5-VMc?}oױ'_~?>QWkFoXuTܲd[c|zo3Y} ƸVoLRto5w&W.}
QSo;%\Kۿxqvf%G&oIS5*rO/qcؠ?Ghi~Gvm٧
CE';W>e|>n%eݹgM>fOId&<Sw~g>{*&ٻ?k3A'^~JCRu7LC}jn_þ{o
Xnb}dRߞnwcu.yl<t)cW~봬Gu|yE+rOzACMzNƂo 0ɋ
߯/-y[򦿏ly`ѨozL|kg¥ޯLVo
ϩhucX{ot>;hgًwoZzi	G&ag.'ՃJlK׿+
S7cӺ{x(:n8fw [7sき}у=7:= ?A&ꫛ;loX7}P.<<ywkT7?=I o>?xyо|<zʮI={<҃?yAӺ?ÀPnFy;٭*+##OU_sx 3|ii<XA{24Y^XnK!N5aY]dp.gS/͗o4c.R8<.y>>Osj59g4Kp?_XzQ{INXVsܞ4'S{3x4|>' nh'Gx1x3,-͉n6E?u'?|KZWY"oGc_rnRJ~'fpei)vǛ}~>K_կ>vk'\1|9)ofި98ߎõRSY>vWfV8/˛,mz=$./~J+x>~_.V.O>vvFtW:׹f%kT,s,ݝrfo^1}5R?٤-Ɯ6?kD4'r&y||`RnKKp+Υ~9[zerx0,0Z2g{9Bgx{q/sun
o_~;/:J~0/BpwWqi~3~97WJ%?
エ9~T:eum\ 8WO
W\کO~`4NEx9/_k\lWo	ɮeii-c.\zULp*g{FK&_8%>|?Wj1׷e=Ծp9\|ϯ垑ʛ*H7".6s>a.O:^&ry?وs>q_{s;oܞU{XZ7-˝T	Kl>K<{9XwrǾ(c=UuW/w7.fAT8/}Yb`q">`i)^*u\~Lx; [3xk?/F8%qvCi	ݛǍR\?A`q?ryҖïpfH##ۼ}/,`iW9ÇH%.巌,ߓ$?i_G"]0R)(fii/INޑKk媄sR2ƄUBʬY LZ_z1Y0b^2$ff&g33]82qn*5yyqiRCJK3gZblՌdc H0.LONHH2RyJJK9J8avFr8@8'+Y5?c1y1#+ɘAd#%L)CbzztL3}zFrf&$ ƵBf
(RIDFҗtn޽LHG:ӲQЧIK4:cRHK5],#Jeb݀&df&<tI ܘYIơCRR3JDn^#F&!Hn lf|Y	rŬ̸ טdcḇD#(=R0)N)	Is2ѱĿ'`Gڬ><Gz4i>B<b.xlZ҃H&7~hYؘLIKY`Y3SӡS<t!i)Dy
5zEnO	I<A%]3
ƐjSϜ5Dzs=RQmzn<	>s
s2zHN ca#ژjaC@;+uzQ=.J|(jƇ?J|(jڔ>1Өe HHȻLMî RUR0*5>骔YsIiqG.I<H>+3=-3Y5}v*c,Xcs&sSU\LØ@nRºcΝ6(2}&̚.906=+ y*HCy·8A) zЀEL|`>V+xf<
3jfÌUPd%5I]IA }LY22by{V꼴14~0+<ƃ<#^|0ިiCT$ָ8ҁYӳQ*6I,0f$&8KA1Fa ~,L6$gyt(q`];`>N~.m.10UCT 4;3s(OƳ9;ONBr9J8WN챭PnKf8sPZjs>kH2dLO63+Ie*`جp$KHKI\ 1% !$/pJ`	WL>s$'%.0C3?IYF3(+3RSTӰcvF!:71]Qs}i(
XJ
v!--ݨJLJ,:&:Ofs8r,m\gB_ƪ5)`k0}jVcˤ'f̥ӡkK֮*33)15EI8jpFS%bjάiI=2zU%$OO4&23"Rz9-k֜=Y$f)}a	zGO֫G[xvAUrJ`իVo^_vjܱc|dVC<h<ZϚ'x:QVHw.JqWqx|i~~.|p x!rxfsqx.p+W8x-Ot8.p?tx/psx8<\^qZxovO"Tgrx<+\e^*x6[]^ZW?HW x U<]ʿ%sEWy/t_]S3x./_jO_Wo\5\xsלtiwʥqx\ڏ
rK{p'.tK.pJg8W9.pTtpUvՋ\9J>R^XY=kyNһGwWEo+a
Z@
x=HQ-
}2\n@TU)
pHQZݷp지+(A
mBT@<RoG+p|0ND+߅+ߩQ
\
x{<OV|<_wT*
f^+ߧ(2^+ծT)U

UWW\wWk
 )
xKR{+
x)#~
x
x>@+]RϹgm
=uczį[!*{_uhi|Qe_NVAW1]B1]m3_4vBJg`Z[>4vlJO4kK$LcjJ1ƮG.M願!FơL^Ʈ@n.զtLcWjG1@S9n?1݂7!ݒULӭHJtkҟҧ1DS8!)}ӏ>HJtҟ[0ݖzL#)	ۓ0IJtOW1݁˘HSELt'ҟcqҟ0ݙ$Lw!)=]IJt7ҟC1O~t/Lw')
=HJwtO.?HJ7t8OFESӽIJ^	>?b:_KSV?P'^2t&^A|/>;jUtqcrj WelzBu5]gn,D7wo.;p.K׿23X>˳x_k-K u(|?^5ϖ|P`eL 㣀4 2U8-"Nb5:^[*X=_Љ:W{\0J}e^HI"*rk0ĆM7PPN,E*	kU)d^á/_NQkyu`!~esWLrNlىv_u?܂([^nR(UPp_)9י}i 蓏*J K:>Z[ ?blRj'aJrR:-cl2oer^J_A=7soT+?9JWWPzF+H܍-SRH5^eH5^!iUR
`M'x,,WtsM[`Nj[{3_[bl3=N49ɑSfG)^wuRR^^)=a93
rnw3ti{٬";YEgU0z,wݒrbFͰK<炡q2FF !cvh1o`4cVƾE\$fw;:K'8:yV/Q/c5?k*W|1l",` f[S. DE&QvYufnTpf/}\P5dzQ
fӐg\2ަCFQРvHZnbg
.\.Zֻ¾u+uX(Ad N8<VL>#F sQ9de7G݉=|+_@,G=?9-p[oAi_6dKY|<Xm!^UҋsB14B_NTuzoo|x?|هq֭*=Fqqq//uZr~v٥3yK3GWmyk?Y{+>X}@h8TK
TKN/ BԹ%er\7`;L"\Ђ39g%zs(;@RLvp@]X:
L>q
"L/2${?brfAP]%+.YZ)^

zPuޞ_ƔTv#hWmAvlŲB޳KwJ!%坷[!W:w}rئ9?&wS7%-*P]bYڀѩb%~Z$0ۿأb?bVb/d=ɢ2+^WeV*-Vfd6(ynyKe/dgϯR4H)!S绒|ѵ沚U?ԃ{)oY+ktG?!;:ۜ*Z¬_Bdy|2z㺤:7[ D.|g)0nk Bĩ8pX4lC0 97xt A
4~|?`tN7sJ2<b_| 0&}m,.a׉u9*o/#ӀXs?p.
'`:g`14;x9PAcujtLk>)+S8\^/q,7YbxG;S#Yml|N\ rU=~<45IpqQoQ,DRۘwRcB^k9JI:1.]g:n,|L~p{Ns%Cd"J&HS:1}G4Ȝ閹Y%e.!ĺW
Y79ˉ"
)-ZMڦ.gn,gnPҪrUKlK}2ɚg5S4iqzd2ЏԠ+$6k5M[֢3/? x(oh޻}lgʯt068X|Fm DNӼl(
vˏ1Uua=.]aFVt>uc^0g
w1=E}$9y<'Vܑ'啩8L(
?LpEl~E/WZ9DVd qj!r>n:oR/_~gXQNzqQ
kϟoq´qp|qFJG,S|^=/9]I#7@x-?=hF-P~cӮ.F/]ݺ
X+V#v8&BdKzZ
ԭ.n:>~8#?!}L/E<ɪZݲSq@!P"[	?gԹb&2Ql 코]C\73uFGYcof"]Ǻ7-FWj%HPɌҟCI/oOrՓQ-Iw
'Xw^;&L3#=`_^DЀNP,2pF[;"NloFl%}Aȝm/P1;OpJ;*o~:wDnTog}&D0O"8ܖAD(H.1!?uomi&nݘG`4"%:[xK=YMNɳ\Q<?K2z_䉼;e?+7q)ݗ'x"3#e8*|:`99ٴ}`2{nљޖ	a,w$2#a'~I8_03xeɇwPviC{NSq[Cac(RaC~9z6Jv/s7[KG,Q*lcu#QTm=Fjk6ǭU E)H7d	"p&Bzd0eʖdU]m+RKKp)l橰ݔ*uPH0ɅD;

4m FB"YjKETwұT7c,5e,ՂfTJg)_ZRm6|;	+q7&cݛ,::KN`YTKNt5,5KղRRc7X*c e:h [g)yn޼Հ oA}n]7A{F>s֣}Zbq+fW P
"
0+6Lun!IFMms1w́ , =}սK h~1J*oRՍ3xB؅&z񬞘W"=!gW;~ƊL<Uam1Vj1
$>#=HHW?~<'fűՆgĬՅY͋g݂ٜQefTeGY[X7<γ,5cgŬrgY<ˌYX,EYo?SVϚYX5óaAY]yVf
eYUSUg9YXֵ,U&,kYu.em`Y0jƲ>Ya.V`/6fҎB,#b0[DzeMIYy`J`YX<#fŰ0<>,,ijʲg9ͳcֵ;eY;0efYyeU2s
<kf}⺞O]v1DuVo^SJ@p^`
`9d
̋I31Yޗ2XWpZ8p 'x~K9rⲋ*K\Fvtmou.^6sߍ#Zg@-6W-v	U	Tb ܀U
xpCYˬWq!UpX%@VowGGkZ><U}ՙWmq\!b\s"Ԃ7D/9%9Y'iIIK:2V8+űO(ՙΦfZ)w	9=KݏYoF?p들ŊfޠHl*m{|9cmwuͨA,
`MFį(F׷\9k$탴y?(c|lׇd1.EkA(22]/j˴KTp+
%g
2 z._"rK1D:+//c+y!L%:aqN#h-j?m%Y*@9+D6n304αT躖sBձ95P!z?u6&lr{eIN4%\ڌ˞:+F͞O+K|^[9-}t+l:0ޫDm#hKwL*h,y3FLP%y.Dl;
Sg<ޔ~|m*ao1
Wk] srcU`"G<䕾mM)6Gv;Ǩ[_$4D}Bd9tSrTփ?Qؤy\	SN(?FC`slvWqNxrrPi>ȷ:n+*o\lmOughcx*Dvp6bC+'v̀2?ޱ#jDC@c%mmz6 F>/	ZhVɒ`\S0 G݇L!xTdV:P'c2W&{B9eA{VzgVktU$FNWM\z!r'I. Q1@2{ u~P57gjICtC.4M""X_PH.O-(nkLLCk*ϙŃ& zO#$}Eb9pe@מlldwK-=D/qg4_BaG kz<CP#hA5~~qF7n35+mA]d~jB"bxP=+&{dN!?hѿ3&=%{hhX<D}PDN!cM}߁C٬x=V=fOdY#ud5'HXtqՍWD ӿBTAxR
&Uc:D鿖?O:n0`??jMFƒ 4vX}QmƓh~Gw~,շ"|?lfx8P0'^@Rd=Aٶx~A,U§Jhpj_Ine4O<ztט,%?#,	e%Y&~NRdE#a$lA>˂V	?ڟ>PTJ>GM/&ҷD(	Fh'
'*q?j8Pq)NqEI1
%E:XG	x9EW;ǡC|=EIXTNE
opQľbV+5GwS')Is(
%7<jXR=Q*uߪ}HC^CErBw6kb`^1F
{LcJ{/k߱J<#FZM-bV
t_mb5vOr%,xrjY!
V-M
 @U}1oT9y^hI{H	hIS(Wst߱j^Z?j٭c"DMiZBp7^
Z+t5F+
)d[0[*d&/Ƒ"h.F_Meځ2$珦@r迏ȟfA'Uų*"⤪xzxǽ8d'_YL_P]LQL-笿>_J伸2>qxr(vz,Q>5|I>k	_I8;A)(+QEH3S<9sON${<1J'CG9'GJqd;OYg<٠d7e !x1KMڡK#F:c:|#>3'g=)œ#xAƠ"FAEuē
uƓ
ew0QL=A;o 
Nwhl֑ǈg}<7HdA'ew0;'O=vuEOguiFMܦzQ?,G061Od4_/Ǔ-xӒl'xZ@uvx'9X{cwypqhm;Oڬډ75S7gi45xXZ[vq"Xn
ۻԉ謥F!:B{G
QŊ}IX$W)cKbFyOh-A?ba(TCY?bu|
zZ=*|1b4V_lvɾHe%(r!q.N҂e:RKËoST麟|Ύ>6'm\gNFV3%='|tTT[Q	}8jf0yÓ[ɍ#bKGƒ7(Xt㍱,8&L_/_ @p}UB< 	OP,@@	l!BWG=<I<
$oL ( $L"Sa6yCY5	m^nXu|Iv6[s&F
\Si#d_[b[UʘZg||ZbBZj^euN<qg#qb860\㎹.f.ۈ9e}Խ$b07zuftrEۯĺ{㏘TߋNV>$iVoEO߀ NΎM<ؗթهuYA{њbCЃj-VǑ9":"w:.hu!(Ke(Mb
c8 (@z!ӜHzCHU'I2
o^V7W+ǿhq^\%
m)1.tmIaDm?ŀw$/ŐpRyV^G752L,DPڻ8N&Ei&!Y{E= c$E HN1NJjN-IᎤXD-Vw¿ (oR1y<GC
\,v|gyw[6D}u4␵OzP'qko&a:ʶ1+o7}j#xT%ڠw0w0'}w^'}߼?E󛷇MW_DGFϲ \h!8"kI9C%}_Xoaui 1I]M
Q'	v({_u_(f({h?FꮮRwlӍr7dx
=4n }_HPl~2 X\]kQqҷM!;ná# GuאMsR3IWI߭E8A)I+5F~%}}-Z/7;v1jk!W[͗G#[ǡnh\E/YM_|:ꈣi>rG|b>BVaxd#> d	PoIC$}wWQu">ZHqh#ܗàXG!;!bRCPCvCԕb%<6QcR0DjǾk"㍃%YGz,k_auk9Hk=u:Q&=d\g#gSՐE|e`/YV;p*Z<Xj{&5(IskIQ߯eg1p`jM)¼ÏBV_t~}-ա8`oOQs,Թ`9D6yMb,q-0;HQǵA
 }>e,E}3&_Uc=%LX嬯kiI?'?xb5<j x4B1Yp;R;pn{E˷d|N{&VyLnO3\K}^)~}w9.es/70H
oXP[2
$SlRރPL\^}Tѯ1D*@I~% :u]ѷd @1fƁ,{\ߒ{֐{vl (QHy
Yw@7jC/66mh5<@X4n7@Ҹ Pg>~9À}
ٟ,jRe+nYRw9z}Tw Tw '[M\:+
;`Ս/;~5۳ WAZxRؒ0}tvIOIs~	<jW$>ufu+$gE5(jSAHy)GO+#[iUGR[w/t}~ϙ?!*}$xԏH"%}T*.eՙk#z|aƴHW?'W?'!u~[6T^svZbLݐjnBn7?&u}IrG2X}y&-2~IJ
/ :'vfyZ:}x\#zA(Q!0 APn9Q:bJU=JEۺQR%NǄqż.V"̐
ع(vC0B\2qR
:HG{}Nj9r&:8,zYOu$]oDALg@fLa(Њ*|UywpU;-4TubH="x`EwA+^9s/6OCP +F,mIggl|4
OϺ_g;Eu%Hv0DiU1ToB8~3H~vW|
R-fp>nR&*ǥ
RЌX7XaX*t(ŽXN~ [,XwٛQà0׀XE'xkUB G[s:rUJj0u8ar}r'VrflVt`9!j/<AjMզm#RӋ&jfl3Z=9"<tF+yOS/{ 6}ݠFm	CV0wu"DbQG^L5!st}oً~BvMڴz'ͲCɹM!^[oFA5Bi.;80og,~*,>W
Ț[dIn׫r;wT7j#׿Ys_8S~e8!(̙(ؚw	z~!@S
Q|O0hzq#զ8/\'49%^)_7 ,xHKc$,8Vp\?=7:ȍw|KQ]ըiRRՋfiiE3:I2.
ETX|)P=̓O[+?sUU!kQ:\gxW.\&p''@!P,^rȞ!luzez `~.?WvwgU8lk2^+ݸaOn9F-nS\w|cW
8 SC͵V*{u[*Yn _ "Ɔ9CTjӸZe3+|3|ަ<jiw@hU3>+t%0'bz_.
]bC6zwu;6g1\u7qzT41(B!*]Rn%Ht\7<Ho}<¡~:PUoLiU\|YXQۘ򨌲Rm;'G|1mmcAzcAAC?EF$e:2;ĭv	Qdv]ylGSnI&/avs8SD\xa-Թ/t	5VP;\
̓d)`R#ȸ 4ǰ.%W%ՄչN5r&^fnw!.*F[kE)m~<b{RFěl,:P[|
v5Jǫlit]IZGgcy׈wvpCU/:Uwפ:+fS_kiѝo58XL	_}xl`mUWA]p|Zrްv_ Ձ/)R/<bo։ɦ^,nߐg%0LxiZT=4suY\VeSǽ\zKr.9P:ldL>2M+|8p4tX^oI.ltnѱ+ZY]ق1YH ƊKt
M:
쎟uz-Vgݶ yft:֗QYCx#T[W]LWhbk^ªb+UJb0Q-6%<wk-xәva^z
ǭtA<:Z1uOx":q|q|?./$E$e$qǝdcpEGםbw3Zu<֥JDh]M=I)wh#?źC~4O&ZpbP[tiIG59 ,a6X|]Bg!+dTXi:8,D;׹OcPD>_uMh:xabXv
լAڊ#HESzR/=\.}KEK~
's鏳`O9ߢ銑
wXL;;:nSxr:Yk;eRET~ WcpۗRS-Fb>bLe-GJl'U*ZB~TWl+]cѩ3&+9>.KLuZ;Q7tr^k%~UT-`r>*78ɍ^
sבQͯ#q9ws綕s֑ʋn-`Ɖ-'Gr1f*_%1@θJ=A^֥5,/%>9{"'llPF(fkI9(ܔWA>b|[,JnF{6˙i6Cq`]Gћ_;0`:xS ](x/X+TO-:yWH!_';1*V	BE=1TNHf'fh;$"xTd;7APrg;7Vp?#>^Wlqq4Ɵ#޶"O!:WV
	37%hkm*a*-Nbp
[7[2vi4 t-]~JpFe9Ow1bo۲N^%{][ۀq$xTY:{EiymmQ )oљ1m*{|0이o3R- {/4뵕x
Z9- ^Ym DI.`g05٦O!.YR;W{Lkq|mAkV/Ic+ž| fW&\V7p_L M14yѭ6TƎ|cbY2^$Xp wr(G:Em~M%QXfpHs[
-7ZXgԷ|zdGyRӟTHW%/ꬶ\m\,.\!
Je;f~_VGT9fq a^{+$^N	xoiBMbBubVޤX2졬bBt2B_-	K&2><l59bB'`OGz
 RNUʚJŕb;=
{sCqB#n ,+q&!$!|#W>-UG@eM&R
ZFcT99Ǌtvר*(b8þzDvc`XG%Qm
f!'	flb؜øCTZzoaHC\栶Q΋&oDeL嬉㋼RA 󗲉T
	yNh0VM4H{>v4(gB޹۝ac>2ݱ
m*~|o59cĽ}'ּ7Y	S	YYe욤dx<[sYI_#1g X;f+`ri?i9eu:C곝ZlKg;$)$
ʨ) ``K0Kdl;Q?E^!F8AQ-{:LǍaBj❈1teİ+#q1#T)ދcfE,PkJ%eV[OW;Of}iyT%GyU}GY8YҏB(~Њ/chA*?m}OVYY0&eL8|O,5ހ}|=/j0JlF֚x-؂ۍ߷B`R,,E*{Z{Bkaj%3ô\vnS$a7uaV*	OV2-kfB,aBX=ef0r 55%0҂О#<0aEVl
m zb
jIX:#.f0@BLð>Xw$fW93D!	6̾uaCЖ{ba!Dzf:BY!23Yf3B[Fhd*UK&?@X4q3~	 g?x5dk ,[	ZR%Jh=<1a$,?Y'?G4PbGXo7"~ CAhi&Pm*_?YQj7`*=%_bgS&BY4#W%2[ywAkO1V$;ZB7֥MIH	=?cS"z$1ys	,_u!^J\@KWpVIhfX[X'Go7q&+xyy*aEWJ"EF2愵BE&]hy
TZſӘ#<Ie$,ьMOQՅxx*q6&)aޮtT S~$YDw]cF.IN1tgDMct{pw/DXbt2
1Dv2FݝiFKt2ZFκ=]:Flt'eGo.ft.YatMt7uow9O4$K"=0?ѝ!2ϓ(љd<wanm#Ռn;]FtL\FUEF7vu-"52-b}NW#2]k2ӽ]L7{cnw$F&{>̯۰ft"!7T}wdtDgJgt'D/ӽ{ѥ}LDV+e~
N'?It^{;0F76tXyn_wdt.K{Yy^A(k];׌t!3_0=DD7ŝn,
dh;FבѽDtSd:+[;V9~Gdt	DIjY;dFAt$s;ΏtьGVpw;Dnd:?Fz}V]FWߝ}F*tlF7N$mwC	\V#h-tqQ:-gzpJU/ sԮ
w౰HsxLU'N3%5z12{&Wk
KYUVy<&$TLɗbSH'jiWom
Q
<1-MHz4PjX5dǅt7&q1A)Qݙم) S S@^u{z'!wWbm=$o|]e1WQ,u'kEjc/~p%mA/vAa5d#5j2GdW^PpOբq;ÝB	n^o~kIoa7w˝JR
>Zr|<#d.mj&Z?W7O|J8Qo	͵
kևzeUkbUa'ی_eMEir,tb**k	  &~%V}
o1j\'drԺx]Ԇ8b.[Ўz^:%Yl_˻`tΛL_ނaw՝́$E?m~Ǵ}X~o=p7m ϹM'TDg7o\[X7go&jI#7<_V~VpR~-Q^\k>?1`2rAwփoqh`^Kj}5ԓ,T=C[#wb!_v:!&~^3^xyNF<5:Tr<S|8\/#[Lپ~kSx⏸m+Ȯ[7fCM;Vc+muKQo7  vHByĩi8_o忔Q{7+w_5?_qkq'F컍,𬗣<Q?L~T<Op[Iƣ=Yǋ8?Ivv!k~{fL]J}D#&|NxNȌ1s\Ϸ*Umme	:䗶KS0gal"Fڵ!h{9gD܈7GG8vV݁*JBGO(Q
 {QuT`s^d^v輞3.k55VH:#T>0vG5ƅf_Xoy:%FMչ>^'KlrW--v&W	p%nϩ!AEsogIhRzG<<H%#ńGf,K>=ħS<WʹKǣ` 5ļÏ)ګ49Uum9>бXi:cC'R臿#
{5{׋RUCd?<T2@,()!{i?3oH8|FyhΠGF$5)s"'.,Qq5}Kۑv~	]+ZPĬ9v[q"5Ssj)@ku x
#ӳI$;PA7p=뮘{3;uX@Lm=vnXm/P[ZO>iX])_mJn"W8D~D|"_%5yUgn~qW
CuT"ur[m-#ĖF}~/joYeKv
[ O#7N&l_sOԖI: <"J	?:P}r01oW:I
w*r>ҩY@w\XNGM/ŝ~;Mn?	tU0ܝtf	hQA
3
$J4mMP:`p	!!hHb
AEj3̌Π;TL Qjʢ줾{aqΡϩUow}w

+%{H=>'nޏN|qCϒ3nTH$
{'Ĕ,H\ѵn>fISUsC E&)ܕ/=ӺvW+@t[t`C"y]u8Nn"Skd+9p4R.<Oq||hPi|lc>6K']z>1<l:{X|qK?珃Hr=$$ʸhk2diG<zJ=?*[d`C2dg=Đv21WKG?|;
<Sg¸Q#-;?3{(kP@|~Q'<7OJz>y)Sdҷacu.gH/z9f a`7a4
N/GERR:_Bb=H85KVVu,!ZFҞX@-
Hkrt|:}1^88mLfZ1J	k 8TQ.$'>T#_9--4qS0&*:p	ȑ	ìnqr*!uBp|PTǄ@_<cJ~`ϰzС?ZJ'Bs(fl5z} IooS :7i8=+Di]v8HN\Xو]<D7P"_s:gۨؼXY>&$YPTyPm|Ě*Es-bP@{tRFۯ+5jZ=QALt?=R$-ʵL,f[ã#
E:Tu`~ڏZ۴bzt`?CsTwTpnYv,;%EF>1F?u&EgP~Ø]G36ҮS?v HozVؘH"CaC![(^h򭽞]sm9|vA3 QA
%MvsvKq#z8QÊR[ߒ <|2׎L]tcRu<f;@=E[F3~ga|9_C05559d:z<d\&D3
.;__g6;77N7"[y~lH^L	_X?:]=@6\1e]@RF6Q?nEhbкu|ުڱ~-e(Z:d1~n"P=yz%F]esu :W=:s`2hbA{.}әZW\%yU0>Bq]	k[iE./l'tCw}wj)-@f~[Y֭gho^9@ReY%49o8D,jmĊ&^4ƆgC QJ25}4ϭh++Mtdw_T,*yB^FG2Ĕht&av4.7@ȉa-y1F`?W"x[hS/a	)eT-ŕ&KakgG#]*idAFcj,|ĥrDfiz	x=-D'%ZNDzs/{q?}/j+L-TZ=]$מ~9 | |*t G~K8goGx}N⣉VdV ΍UNzCqB/H4	h
N&C.S$OV*19<>?LD#pd{oX3my}XIjgp10Hj@K6̈́37;ph<tUf4A&H/9GhkN@eimGmQJPo 4O7]2*.>6	6DU R8m}4_tÕOp՜ɚ$wdY"mЩATٔ B[EE*Rw5iK<x<)֢D؄Nc#-hCViNIf`WĂ5L|S0M&,qI.#@t\o
cT@굈Yxa=`&.	tFR9}&CGQC
47W9L{w*ΏwGSG1 rlߩ(οI9'K|'ܼpu|vJҊG?m$<"{rjnя܏+οuBIJ2{tH]A
^=E%ې8Zi-x{^?/iۋ6:RT(mf?I]VF^B\\;4|fu!.LV&n
Ptг*5@N#Sd1ݗBm,]܅jx!߁Ţr?>9
_-
xXnGSk6Ns!",d1-= d΍6Zip|M0}5h/njxWp~$oJ/N-L#髣!3(A(ic2aa	paFa6hou^ˈp}"ýH,Π>_&bꬓ㐢[ګ
cxհO/h-дUt$/"{0%L"{d`%/\t;Hutby?tao; Eepv:>kO ǵXR)L(ρJFf8䳸0tVF%Tu!R3bfB1_ӊyS8SLQnpY:vT;-U憝NNuaͪӈS484TuФs_FR[\QE`qT5WGf,ĭ?fٌIcV\`7kKvΗCt@A=:7*\oAfpKf%"!qB.q`Ît"6&T:!26G!E@旷"츝4eXx>6&^lِ-3ccǓ0nfXp^ڒ8Hc&OEd琠[$%5bdn`cjchv]6a֎r1bP.>]KI]q;aukJՆǼd(SyNC&,n|Y,h}k1ys7	y
ȆracjTEa|lPFwЂ+|@߾Jd%|qNS	uȇ݀~8#3Qn[Ou
qW̼fl/o_Pկׂp4MMc8]][\I-ևFjT6|C~Ucȋ ۆ>"1!ǳ1+/[8ҊBK~;4!R~h_ 韢L<n j~z4ENbZ@Y#v"9v*Bi?ʋp	jY{|	).ܹK8QsFp+7KSЍ,8Ry}=5slkG4+VիD!^ܗMO5u8ҺP3tw8j:.9q:-!otH_c\eCC\cN]#:BK+s;a;sxMnkE1	\xb$DҫhJ~	V
ˁY,oCJϰ0kpn* MB;c5)xhBbjMs5]ֹk_]ij5~44Q9%\Th5ٺ [4Ӻ~n7o⟀H=E>s/GFbt[V~L'^ſͥAx;đM֎CƔEHVXucىc6
M%D.VJ.;H!M߁oj:R
_o2sIQKwv-<
\utZCX؈sREldCf>0_-}N 9w5OW 	sG[c^υgq-4
4\UR6b=fg2?@kdif9d??_A)e8H.8AaY`&C17K fYnZdZ7F&
lupFs	aF
6<y|ʳ&}y
<(AtX@fUM _JӺV	%M#,Hqy$
ILʸO@0[[K}>/nhhOwvSA4]p$%Qo0YJqlD yN{w=נސʠ0JpfX˭CA8xA׵t /\IJ\@H	tاD45kn+hXhsYC
t4];@e'*,G[FRNa=QA&ACZ;akp5j߄]+hu|,)⃖l1зNp\s(?2!&.`s=s,laFWj]c]E d7p{~vH -.
_}
[YխyθaLvtP:S6&%Ƈ!lB6gH:h$a v,J:1XXQЀ_ :zo	xz*%I_aF	`w@[mTZX=;};^jh2?5_P2l%oV޾+g⚑w/wOC¶ 2+1Aֳ2QV6mPF+QI>*ĒG8?MohGSi($s<~Zo8֜k94?*U/Yow'c6 [(3 ~ht|
f"f mmU}CxÕa
5,	D$o<_=(Jn+3S<?И!oo|,r5/||x=~qa,I  9S߳`@`眿5슯KNL#~{q()F\Q
T7dGA1;e5IU=>9RvG_Q3) 0@r#4
eђVND}V'
´"{G1MtFMXQ=)jR/o)}mhNd@FfP>QI!ή Ajg۶U$"dc*Czk9_tkrELW
E.-^mSu]<=pqf^kk@fs 6B&bWfnn^L*cUD0e'x3v#ShK"̽
E1s9(.0!9涻'8g|{؍C#k0rP-	bB|njoljЌԘ.Ѽd_nKMG'ŻR\{37sC#K+%`iEuBF y/G꽎gpJhd3.6/uǉ@T3fJxL
/oV>7OwD/D$
f;&ƟGy_	-93|[tnلoO'}{0.rHoI[8Ct6
e<6!k.ڠ%+0Hϴ 278#c(V:>1"EdBw2T
#2Ү"vZx1
|&<ƟhD;5v#/L3w@0<%xselJ?fr#09gi%:)b,VMpc6Bnr6}K÷&6lh_i0߆x:V^1F\%4:SI~ ݉M֒v\&X
s*cEߙs8;VlhZdlm!Ei8`}k87ӓzp
Z}{s$779)'&[2]FmmNFI&#PlJ[ ]iD ,f}b36pQJŵE~˞܀*m{!ɶ _6`΄ݒi'Uփ0<NDk_G.VoCHn|!d"RB`)$I?n^?@9Pyw4!STihe3I#8f*yJosfAǂ%>@̥߰Ǆ@*#MOTY=~+q*Bm9c[<]s{գ]ka$p֒Z
v68p~k}$䶛4-	aVtq8\2YE`-<NbAy<~{0{IvWQƵ6܏%eG	Ͻ	}_=4(k3{CU7nXMKznmnw7c
f쇸'ą*qK^Տ8KX@rc+|O asKԷ7ӕvwo\Bl0vZ
cc,|SS_6`kq$Ll,_*=ٝ	^2wRęI`}WI"5}c<w,|:(2/85Ey׹|HwH=2o}nf}Y0jd@#[5VEK
8j\57rݸHm7_Cьh|? ;pE过B0Ɠaq{7DGy6蛤67|:pC;OV&5^6s;>K>	T-	yheoIhH^ۑ&o 6+nuCP>Xu߷Fml〫f\5K?|\
]9yH̦/y7< 򅬔9t2O~ӥ)f:=uŷh.$URɖ`p)~L+Noz[eOނ-947 fg"|ߞqٷ?W.6 }PqX{YNdh:oh2]}
	V_"xKv*Py'/'Rik5H_.,HSJ5Vwʞ d*h<ZSэ4>$'-
L2j%cC$-Vٶ_u:;3:X}tR[5N({b>IDOB?}#D\W`v	՗L3ߚLMk ;pgRhs~,g.]'؆Bnݹ2La`oFeP[p=rق_%F <So0Q%:$x>8y>aR_}O
F	nPWE=
P C4ؠ3u/b%ܼ[OYΰA8{C77BYhIM(b
MѦoi	z+0[P_ʜN62w>gyI7(|}q?)䷸owavd]|krMf?4SlIoEs	|*OBpd*ab0eB[paF7/2Zm#+݀b
ЧobbJ\h
գve7
V~~*'j1X r~͕4JxvmgP[:ϗ6>2(
ϼK~Ffɗ)3^E	aN;Ғ8h"
auZEP-}!qD,w#1^nq(#M-vy!uu>R#Oi4u+n)˅x^-^ˠVJeG_nvKv-^Q85ۇO= -Qص;xal]`}~4^7?e!2ڼya^Z=둊kN#Py$Mq8*6ܺ&vx~72FUF
!+gOUބGn) AUC41R sr4":1]3=ԛ!$z<Eo~+=U uo@<i8I3=AYPy;KسB8&?R$f$YVBhBk:C\lHEc'aę[դNӇQWވiX*1^z9F< mh+؁}0MHF87Y:%14_8"pǣ '
Q5GsY.'cY6<= x9 5HzDWZ,HpI}HY+Clǿ1ȹA`WSyW(,^|Ӡ/xOi{(CE	&e!_Gyٚ黕:	@i0.i|xj_n0dlE̶.V^~Gj9P*xjÏa:ďi

IPtw πeC
+@^(A97*TM|3_#w5c޿:o-9ís-6fQ	i
퍟f^cU[h
b䝼}mN4+ت9BwB7k͞4>^Q _}C3#ֶcߡ[*K&~_=?g3-lVnuI-+l*vtfwc@|9r\^
Pr ̈81
26߉eu:6Bh2@NJwQqRs;T8z*9:~[xFmn4W?s$7[
2%4s,'^8*рЯ{ l֔eB[vז`vrKL݅Wlۃ'vu[hqyI|CO
0}oXr[foRTWs].ΦĴ="SO^Q1SZ:PUHNc}x쮍AVov[>!/jp	&<e+Zs
t0}P;
W. uR'U6kq~}7&X$D oߏ+E^-Dax-3oEg)f
G%S=hb*5Be9QRv	 *>4I
TIbN.~7iy)p,wpRoO}`98rl.<73u+QVO\aNt\)nۚ>
`+lN:';M~sfzmt
oe
?WΚ뀭o?Z-ߔF^}m|\:o?)㓿1V"SMBätRhb)RbbfҰFFM~Xi'ृPa ,yC>=‥ohco;=FxT~O}mp|G׆~9;04bA=MFb^K@I t}KudޯA -E+I
wULuV9(}37?o\n.8֡`}_bnsΟ4$#5d&>鼯1ǝqqο+ױO˘f_t\qUIxn%ʅoGw2$Z򝂶.Ɲ06:90B1}pxۺ~ۄ>o2C1v{	7@j8y1vk-Z<<RL=@U94q4B
t5ЖJ0sC>EϚ'5yFUQ$=Ηi<&y/<_UDQ<Jymg?LAa!*讀\T(N1
{˫K;[}x 
4$mnȉz!Ё]a;-zq:P`՟s A0n->ಧp'mM5'ƌۗߣ%w,\qY_'(/շ;e7u%z,W@Ӕ}(	sj}
;8ʕh8
2@wiu0l%ݒZO r*3Н#52'H0y#qˈ>&Qނ+-C	H]M]gjuոhi5$q
:kuY4>B}K^yap
7ߏ§?b)XIqW~@ko(E}.i[N֪-% LjR\ e?;;Us3B;t
l} ,-lra~	blrh~d}Al&=\!8m[&<hjvK=i&d>4L7~<m翑 AFnI7rpl)XӰ(ӏN1P7xq엸EO19`4]J32&I2o0k%۲
^@[CV717nv%'
0brĥW%ijKT(Ḱ9_pn!~-H=OL_B:RoĻv 9%U⮢i϶}v.#
}R2bөD͎|f!G0[0d>"B\sdjN?Nr0	o_A64 0bEdGC\~b[D	+XgJSϩ.K`nk?*	wK91ƭV~[K{ Ec=f(1}ecvrRet2qmQ)=ShF2p0OlpK
Tkq2J2$oU:|vdm	d槟lq5-&Ӫ́[:ɐIv#}TC̦6	if/6Pl(f
6[81C+9igp{4_;_'h}akۃVȃЮf
dgq{?7}
4KctM8Բ>y&dqq8RY֯rknLj}{w6u
@]iO$t	]knCn$!۩-V-
b07;ǸCW[tIkB}jǩ&#nPJǶ=-%?Z}LaGrGGCݤQ1c16)V;+e~5/8n?փw	N[
+
׮;_ "
@"0u7?ZlX۠ng_ C!Yl.dcW&οHrk<Egֱ!	{=Rs5q}a/4s;E+u47=
H@>
OD=Ɲ'!	b	~F!F@ۗ0wHgm$|
>J[x8m$XwM	}L4/sY`X5'tG.VzW ;$%qwW	F79ߴ=\\v*B,_1IVkҢ<;x$6hNGh1(dp?B(;nu\0.6l!ͳeSa2DxRVÇ'}}h'G=bVMѬh.	>3_@} :+tB
|TaTV/`7eZ[Fܮf-eԙ= 5~?~O傛<kUvn|oΒ;v	_Jyf)8MX*
ao`zK4#n,4˳/2P2&rQ]\Pi/9Kd$Z[nc)Kqj
F!"5.L֖i "\3FwtPSdvT1Nl쩐1p}uhbBItߛhES.$yFg7B]6mdǨO&#
~pjZ\ߏ޿^9]aG$]<rAȾS+p	RaJ;T
S]MK\xD=[z
niv-
k䬇@VhaoT?;ɄkXY8&j+	t`PU(=#ێnkv-naHg_iNU#D>#2>:$yOsЉ^Edc/F@$W "VubUޮ4ccMRۢn_n ޛBն+紋u}|<}y_?齦ͳ6*%SCI @ʋb|	AgI^54_V3F'1h 8@Gsg3}2y%/j296j)WmM;A<mR(5yn3et~&swNX}l}msG"e>Tˆy-7E!S$?>{a
vTtxUO3^%$i?_iV{FZH=c8tݩB7> X ߀Awa^EP4U"u8޼~mkĤ`Br>iӞB"1JSχ=Cr!vƝؤǢ96O5]Vs6B|Հ]BoN7nYN:ݮp+Gw ҝ78LXOR"~g<maK@իlcx3pF[nh"dSv	{[
maT5I˰6K{1|C[4ٙ9?5T\ <Um?['st$Rn
yZWF@IYsfѸS|^>B[P\cdZ(r1žQlQ3cnD5_ZL_QnZt1qk-MTFn>^oGCC@͊;7spL0*#7u"- -(!%~ڒڦ.f
$mSNKW{~y25[p#J)hb\`,k:θnY 
A&x{|!AŎ	
)UTv4$1;{4ԥCoѾ
qi|Rwho,ZGϲw=*tXᄕ/2fyTJ[hK8
5REK\PNGqQvu
t/EU˼q/-jY6cd;-POF(	}J0{,l[mK#qE[h!|jVY(/>Nfة8ĥ*ߐθSX;8h0
x:@Ovj =7s_4}Mj}\3O;طt :A;qtQ=ޛDWJɸi mMWsf)Jf,JX(X<x6pߡL~(+.+a~404^Nb<EY8V.ZkJ難yX 8і-:kKBY&m<;Յ{j}.opOm0r+;̧ܠqBM!JTB2u[mBJ
{L.a`B3xZV@?3pQP4Zp3a ]g-f/䞺EHh͞,V	ѸDWJh3H<7j #rc84e=Uk{?MjߑOHpmwx)n=G-]|sϹHĢ	y.5p)}]E0>*8ٸo;-PL
T
f_?nyJՠhء[nL>@ f0
}Hv_PޮNit|>x/nQh}ZtZ[=.aS
=2$|DT'ǳI07eB`<Ҋh&8"/G$f"NoP2F[s1krRY=	*;#e8sN]vq
͸XSLQB^z8/cB]v[$tJapv~;eNHIG;A3 W4ub`J-..#{47r8jM{]7_HBq6`àӵk#H6d۽˸QBzb!ˀoPl3*LLoDȃ{"kWJBd1'xf?B5ظ.a|tʝ-$aFWoo	
q(<s`~l짭! MJP^TckAѢ4dɴ;ÖقN`MBwh9
Ja4|@p=8}l<(	3vajNDàLe:Ow6F'4lePN.8*="5A
vh7](tk	vZ6895<Q:2jLxRMƱ^mY[E	gwTSYv	9huطϖQ ዶ戃o$;Ұ
%!ڕQE
LbAs^A-FUD6II<<4(9à?GRgf38,fcόqMgt+yn ʻpVp\-3L3noJ#Q2)`~Ew	m{rZFa3t#*cK ߵmݨ՜`xl$ȿ׈N!	&Iʝ!q	J\K\$!f/qB[BF-b
lr:j{b,h}9IjyW;ĄzI;Pҕ$ YTV9&}쳛*~>>
D~J3yx 837B!Q[9JM8D&Xe-La`^{͢$<ш"(s[k4^S嫏m
)=K%7%>3Z|}vW?_b=
F+|` \Ԍ}=]P2S{wwwwwwύV-%vZtp*WXtU8sra\1'!W5SO2{C1Lsђ)|ӭsOr[RG}h)y:oZ[!C1j
Jjyn
.Q1|%]g]5J[n(xE8'@4{]W?i{ڕW1,s<{OWvz)Χd?f	7';1݉C|bߛ8	$VksYwkˇH[/Iqї	Zʝ憷$
	^ZHwH d=3b3EӺhŶ
C+A'Fu8ҝP/cw
Tۡ
xmI-S; v
œ;qWo
BзJ3U헅˿˿˿˿˿˿˿˿˿˿˿ځDq'xe/_e/_~|G)qp­tXn!^8oTcCܢ.0w
"7H=0йhnt0"6Ҧ^-u
~2:<Wˊޗ`2z-e Ыt׶-<*gKܦvfsnw¦	na#X_&ps޳9>ln)O}lR<w)^!:Lxyl7t,htgP'LMh>W*3J5>WhkCw
]e8~KMxڿFKg[˒+E78c| )㌫r(
|5WٶZ\H.7v/[hPxEDZUNGP׊Dwb
Cܛ`J$ee!-G#tet	z{ޡ;sCsځ&k9L.x^4۷ͫ)s6٫y^sHQ֝?gMtu|[pi坁Ǫi?}h3ɢVǏ?1?Q@V߮[Dh9q\ohHQ>\Ox}&CbS4fhT>8ueĳ0E[@t=/F`	%UZ^FF^
<364y\o!|{)F0z?	٩ͯ:9)b<Jxeb-}OߓE!qd:<tBErJ	 !fmSύ <n
#{~%&靳M03/p%l%!w77Rjv^#%*&E-#?"WG{ 0 Ԇ躨%Zup Q<C<ie*nq}%ҡ?Π-u,`%(uhFÓ{xl.16
~?i8x&Rze'ÿ;q(O[r'&[^vbT:~&vsAZ\8x>#s]|_Eٌ|{X5r@zw|33n@:WUL-p(hdoIIq3@AeS9*Y
*
=Ŷ,[jZT]^UX郪(/W1S\e2|wbxOJ`2PRU1}TgڌbC9XOOj[VCN0L-`tWyIxSX^Tl(z*Ny
өӌ͚PX,Fbraу:-DcPPHx-/L(N:=
ˠIƗVaQߥһعS!@q'#"2Z\Eu^-I8L+gY>Ð>gT<XYÌiS%eCYE)e/n|O> m }0}.,mjDKIɴ!_mp ,NU&+JmWJ
'L1*+/VR84-ok΂z*t_TVQVXTT\]ݱ̜6ES:xNUU+*l!j[[2(#k`[DU{bU(؊݉lP$ݐ3qSUXR6n0I(KSP^)aa#]Y9" q=ӑ**@t̿bʥbuzbօ9*V1hA 꾙?49a"(\ViaUp(ܸҊ*Oǀ)$ߎ"(X`(pvtc;=Ǖw0vs<.Ȱr](0}dx֊H#MmlDC_刺zqd0w3,	1	9EQ\~Tg\O
oV/QZ@;aQRh<;sRrH00䫽17g&5607w2`A7%!ĆՀ:'H91޹#r=h
lt60v4g*'	.rArlf>وatI	lC::*:>%e!5ppCa;:7pl'uR#mPi~ 
5JˮRwQC@+ e4prEg`ٴUUVzJ
@L
R0k#= Tb	2p& Bd4aT[eYjmʻwLxy+<|Y2WR0[/!'=y*\ O)<\(xvcA|'Q}.AQ^(|w`>w/Oc|v	\B==\[Q<%E p8Ew* ࢼsъ2Fn <QQ@QMdnWxwYS~O+pxI}8xF}ꞣUQ>`4{l٦U+<++]M?pSVV<̡N+5Eŕ4`Џ%7aJRͯip),*)CST;!<EJ˧Wu`"K2[	j"ul 9 M...M-󌢊2D[62ʪx8U*!MR1S8 62} iԦ:WKOqô;:SQ0	ha9oP3bdS*&*4yP*ƯO6S36T\$Cğs"B([l,K)\_Y}r~MA_'֝]R~WumYLP\)rU/]<(<CPߴۯƼ$(	3;a]fhZɉPЌC6l#!{1;LT"⫊p҈$"k_¥@M|iqiD
ͣi|5醒!_@gj#RKN~wn:\$K/F^Tt2\OuX68φѩy+UʋO7~U/BE+"4.~HAp1&ĥɫrQ]1t+}ir%8}I]DX:xs )vϛZd9Y w.!Ⱦ1̕Çfw0=*ވ1l9ÓrV
[8#01oҦ+
1P^o9j.mާ)+,(B)A}<*?|zpxxnU:Y:(-j*MFUBvcJBU @la\BS܅tL#GKhcJZۥ_y;C,ԦԳ,p<m*XnǀnMťӯJ>brYjrd
-ʮƥnaNCI(}-{|U%z+I1_(QmIlH+lOO-[NO+Jmp[LZBҰg%ߩr{"$
ҙzy٦Id:8ɝ4TWð[85<.1Ж4BXPnOxf3b<cF@
SMbR\bwN'uǹ|_LiHCJDf[7BcSH}NXk[02jI[equ,VVr_"lK**-AP.z>Du_TJs Sd?[u"uގ0[@պCʿS1Aޚ	ڪr(x8PO[ҭ*BI3t,.
eŅJQ
ef+6F)OFx(.<3C8xR<ቃgK{ qWܢ{,Ι|E98^Qmg<Odk.԰o(ʟ'
v31a ;w?*c.o]/߭SKvHQGwo
AS{U0hPuqY {
ywX]?RAu,ܮa(v5QX530hJAե
\aPz
'2hzaeY xlն0I_bEO-<*~V0~o(
}_PA{uOL}z3D>de'<;r`܋,L?S8qeB(w);ԟ]aEg,.'<ۮ2V~sJ</+ [ٮ, hW`:f ey%, y<f ^  .
`ەCZ zFR 0	`
K . Xp9Vu O l &`E2	sve)@m`;/VV'  \XEX`Bc ;ix @<u knx ?x [?"ʋp#؅	p(/:sn	//C,e{bCڮEL	 \
`=]N eN O ەJ  r?V(7^{ 뾃z\=}`!>k B|	?@|!> ' x޽ ]C.8	`+ -g c81@
#`AQJ0z(
2QVI]< m9/ O XgU% -`i  A  L(lh9u +x   
p3Yr`B$\ l8	, 4
L cj(ݐt<@`) 6\P{!? >` r5}?`$' [5
	p{!C $`
@۵P ZO	"|0! Z¸ƊI -zLx,X
?  r|upoP :pA|!>t	}6~ .ߤ(snx e}Scx]K-Ix#$ekpf͋2rg#i'!`5py\3Oק3vadQv?;{Z"sӕtZ΅# _ѮGv%<û
|Ϩ:g
_v//_|W'z,?پPA\u˄#Z`~Bߑ;.cve9"\_}Oj~Wcu,%0fu],/'Qs	8!~l<fC?XwvuoU]=Ѭ|uEj.ɌHBưt>p6ibC7_'~I߈v|*I8̇8veCu/O׃UY/ّ~&ayB.ڕ T?gZ?7?]
tUՕB>Fq4*S|HCԠ8fq#{ϼSJS*uZ-KZqpD]vqgJ1:tRS=߹ybܵ`|{}gsƭßP%T2\z(u$W*ŚN{;H
Û1uOrƭ2T=$y7-ڗ].)l旰{Hϯ;\S~#_wSbOݚ-{{V$Wsk(غ
,Sso_G|~_=#/З8G>2 \*07M5brGd$wS5H|>zEW7y֝ߞGH9 j\]r:HaowǞ?+ñ
[k}(Z
퍎iSA_l'wٞ]=7WKyw_S#5Kh Ӟ郞A{,?uSC]Y?G{?O{EGX:ֈ3
\g"9|{5yĿDK|?/x*7ϥG'ziD
i#KZgYQJ,{L>nٚ-&Wvi>Arʹɖ4I~?[k-M
_-kkvwIHe};^FW8$2zb[5\ˆAO\V}TgZVceu5ܖ*+uFO.^f`񟁾MzI7
67>q;Ar9u[WwLĿG*
g_HnZf2\euoλmk.L9+o}Gs~op]	׏CAler}he)ϳ9FNmAyn~k]v,^k.rhIQnrz _cl4zi1k,,GR6lz1ղ9e?ɍ,!=d[Lm3qIc׭Go"WqZ?e&+-EIO۩W,vƿ*:=.{sҸ0Iv;wķZ3;?Ϫg7{W:v.{Բn?oα>c[EqH_cYlHډǟVYe\f'{KWu,3,2+֥S$wN׺_nǲhL÷ls-l\zHr
$w-K+;g㖵-U|ZrGruUzŮN0zZ(U_g?!vKﳬ__~=Պt?J|{r[!{I떵퇪Z
̼֌=I?d-ֽ&>̦[l^abIo~6?+C.g{I.ze]奏>v؃yVA̚y&gA+e42
G2Մ3k
i\񐜏s	o"B)Vnd~yqe~vBՖ5?(|ŏ<6G1{nbc74}&9ߋu>%Kݖv~Kw{?Һg7ho94t t !c(ot ?:tt5h3hht?0h?!Q1PHlc/5O(|#j2<Oc<E*(g P_ .T|ijFp:{yIbڃ?"b :ԙ'(H|ӋW>"NA|Gu9
N}C|$xw@B+ҟဇϑ^i<}RNA҃G?i1ˉ" +鹠eAA׀A7n}y}o=	:ZXA@փ
n@=zt
.]	A
z$8ha5-]Z4	T<Q5(؛x,׳+yU@WQVQvՂE
wlexp$*kvvt
;ue
ais
0
0Ae;[,/FYô?5;=ɔQ+FrrG+1YV&[l#q?^/%FyZ#na7se/&2dz"q~\Ц\9_r}O|/ǲg}tTQo5B댠b]M-W_t CnBW|in70RD"X딪?_{uL߇vuY
9S-iBlVq&% ӾkS-J~~~w|Η}J{^ʐNk%+R@g_yׯE^d=JȿUy5GY,ۧ?`E<qG_xvi"NMRW_QdSW(KBȿ_ާ?\䟫>bns?wo,L_S4sH_'{<,gݓ&9:%#yκ"z!Su@Ƨ:]Ƨ9~[~Y§;~V)3(E?bO,xWdK12>Ǚ2^'sLg>Y)}I!^h4
~k
ޠoԋ<. O> ?zO
ǀԔ卛r;7b B!?>Sw4A<,2/.t]9|gbWwj@~aj5!>rhE
_iY/Ǹgb1~k<=yZ	<ox< Gyo˟gn6*(_~-\9+٪iQ^	𴰇OvޠD&oq3'`/b
~wzyZ50xF.p<xQ<}2=w%
;|0qy2׻_ѿ].skOȃ>Bϋ4 OFkڣa,[_C9	؛x/ o}ACQ|~yD6~ZyJ֣*E9 o?7 !k?ӧ=plD
|~Xc=
~d<$s\xxm<}'Wp
*QEA9>vT	A
|h1_=w Fܾ	xxC /oB?} _2zQȏ/ih?5liܪעciX/q١)9SOӸ?)(^|jw@Gx%Wbx<-Z~]|#r8>tдXo\EәګwB>Cn}Nyw?<[B!$pw8=|Z!	g`t~?&
yw⼩8S1>
Oc
yzo{gx΀]a^zk?.	.xh~J?%?598*/O"qfiqcn/Wj/|u
-}iO~\Eo8E)~aϞ	#^|v'^WO v+GgzfRՙXvRA~~V|I1*OE/7Q,b\Z){vhPw14E8>ų0AwO4x#<=
QxgOQ?t
~aUzEK=^AVx
QԻr'ĻS)qI~e]3Z{xo[[Y}_ A?Gq'Nu1.Z	tGu^]zv6capYYҦYfT+oMy/wH8/Ҽ슲7ꪤ̸)j1s:v)3LPWg'Z>>R+:9RtyiɳCTZq
^tnQb\[c]PG FZDS:vI0îDz4[!f4c	x'n|yS3F\HN	ͲF@msMw:Pъ:̴?IE6>Έ̵
&}D\1XFѰLvUe7n(LP<W5.];869>$]-uePV^,ž- 90mRL<1xdLQeM('
&K3{&W(B{X6+>N?vWR$2Q_Hgj/qL7*
C=	ӘJ&/6%w
mdBPEʧ8HNҒTvv#;^n8KBpڭM@PEUɛE-u&Ѹɛ*n4DfI|}2>ϙF/h+/n<k}W*Hf_xkS\,Psr"+{I	n9
t-K0#͈}=^,rbGICÓ?7Xq-릖R46Գ/!u!!΍1+3yCwK^a7ܺ5?6KL*[v)jnPՎd/y֎Iztvޥ !ۯCuMCɔnܼ&['̉t9z"qBt=[N.|U8bڧS8!3fGXi7A؟mK۠Lh7IpotLvij֊y?_fߑY-ȔVn4wΧt}s_g,iXlӖŤ1fEk#Gi=j;/9л#
wE4la0^YVat"hh"ȴ;;hиTZHvt+VUv}mEmW0ro#bX4fzjgCwB=&v,$1lǔn{.Hm;r`0a͐gI;|iIm)<?6.ۓΏtn\{+"\E!s8D\v>Yf^Hz{ʥSlFM;f8ʛ!r^ɛW]<U2I	-PK
    \               com/sun/jna/linux-arm/PK
   X	   '  com/sun/jna/linux-arm/libjnidispatch.soUT	 3f3fux         }\TUaQF"v٢hTT5&mlb2	&(XljQ1Z˶|6jmW[*wZ+*۬+(VK9s;י~}y<s~{eM&SX"ON@dafgA;FtLL/~r64i_&^37QnM 3~<bZ&
*m\VBQ|*AFIӝ`W\Ͷ?4W_ros%evJ.c9ĪKN`Vbv[uQbqەo:Xlsb珿ۭDkT)w	s;+)=[W5,ǎ:uܜ=czcnmun0|ِt~[ b@&/  r=AF^X!oXU Z@9:	|``!/Հ{  5Z@gm 4Gcl擀)@+Og 
sv> :W"M[}
xʤ?_֗,m\亡ӓzngo&xfܱ(ˢjgo]3^;[7G+oݿk׷'f2;~q3/PE⎏u̓>zqדWo3}Y}qWk9vfCOtbxof7>w':9]J9yuK_$'lY}0U>69Y&5fJ˄R_:Zf}Ew^tdw=Qx7j诖?~!>GkN}sobs~kGsk{SV͙n;難Fs^kߺ鲇Oؗ_<oߴa/|egή;upE'G}m['Lzw	6z5.U[zmkJ^SK|ԝ?:ztq{G~	}F}lTd;/ln_~W`/܂ܥQk[l{NYo(Vv{~I٩7;>'K]3̙,Y9[Q\G1׿fϓg6o"=>gZ8!Kwdݳp??cx>W
?4@fk?e2uSR
3`}H{<]gĘ`zn|`W?}N?!{9N
E/7? |,
X0%C
d(3
bڐߏ
]{20!xk()p21h'>-@zY'B07:R]z~
y#'NtA;A&+ob"lDܾCw<*Zcb{UOs;Oz@nbOѳ
XDzԓ?/sz y><o@wD)ϟt\)"O/É¯o<	H?ŉzXb/V珀%ƿҕۑ,	告PsA_J?O߀pm[^8EzOcSSgEϣ:_nx2xߥ=碾6`Sc(Oyo=$8BCЧ2P@A}J{6pӤ(wV~Va23{]& W'qm)mA}_!s
# Nup݅f9YvMYEH}Ƃ*ǮKO|xI>F1Ĕ@<@^k
\Ͻ4d%зOݦg;k>W;PU>܍M|Nԏ4=DѼZP=8px>:{>U^Ko*>p&yBogG4
kPW?ByZw-炿T"b}+d-8Eh߁Xuyr
y/~?{B6kڤP!'i'wV>ks"Ҡɿ׊s [NQ`Gk&1>ŰǡXZy_Txݽ'*#i(G
T^5AG?A.I:{!}3ڼ߻ߤFLs)ϯ!~SZ;|UG׶YYc+Կl2> ~kZy̥zVaf]{1Lx(O#[=Yko>ߪsm}Z-W㹺Uo3u˯a%!x^
#:P*q)!\i>>,_Y*,ouYNYb
 sQNA+J
Wg.W\03oiqBM/#y+n7\%畖20/q-[zEY![Y!լUDwʊV{y+YrKY"GDY^bU2V*`ŪK𼜭*\{yyim~)	Ə_Μ\Uyu䗭Y]0/xi^²CN-eKV^LO%n.\]&_V~[tÔ`&xM!D&,Z]W ;Bk7f
Ӣ<@mNAR[<R,P<?Q>ݫ9+A+Ū|$PS]~*ԁ2Q^97Frr(ܢks)SG( zgcd
Uޡe%yelZVAG*xT	rJXNjW꼕yՉn.YQ0DZ][R8z)]*Uy9n.UZ1#s](IcEfU}tð\CvǒRV\LWF.ՅƨKV
9
YqIi!V
ܲriI1XKoYw99z93.<g{y'r<D^}"_}"/EZX~岰tԿkI7RA7R97R17R)7R!7R{KYvKcQ^^9'Yi#	I[6%5wͲe,GGZqK"#v?(I {eope["qD,aJt+4K1zpF/Wb+ɏ8FONjI<i׊U%kVa2 RElU2Rr.)?AՇ:塒o{wm#	.`8B<%t2o8ǵ`^QaJqbAΕ2J0aX211I
/yb
"(uGV֬R':]aQaYQIWj+!E$./&'#aS
R-beq87RWpA"ԕ-)ˣN%R'E)9e.Ɯ_"㡟PYJ݅0͊JCV*0HNAaqaYq]9%˖8M%]\X~tK]vU	*kVX'ׅnf+׬Z+ѼWa~XWpdpUBd*ې+ה!	Ԩ_~B2c-/cyKfM<R,0?[I*|`FGrt! =2>-V#39dnf_]VJEfYqZPɶyw~1ZF2*UVZDV;oҡz@|՚WEל3+,_QP.{x!+CKWADaު5nOdͪrґXniɹYNaA^Yؖ*P0-H'.=kVa7ZA]i˙qC!f?eQXSN<Q˦SV8N-~f'sy EV)p{+>[#|TA-+*0{C.MX p)
8M38W.-pWJj7	\#p
7
Y*p;)p#^;'~[^/G)O`18Nx'(pSN)pg8S,@".SdEA>
}	OES.a'#xfv2:QaA8r==#c!8؃pA-Ax<AD؃0: '	a'c`'C?`68؃d؃؃p<At>v!|a;aCxh@'h@8@lIhA{ |.Kh@{ <0Fg=@|)h/@{ |!_@=@x.y'sfa}VϮ^kY<zeg;e5Oޫօwmp.ܬ7&]JЅtb]@օ3u]8MNՅp.±p.lх.|Dօtὺn]x.ܦͺp.\o҅t
]L.օtl]8SЅtT]ء'	p.??ߏ?ߏ?ߏ?+5ɱ&9Jg0vUL:p>3ssEI~&bK;9fd,2&̬53
b +$@ɦb9$Ș3Ir9c[k'%
Y@1 /q3<-YOH<PTeH	l{x/6ϮY[!L:<F.pˁaNׯLks}f~Cf9b[7\'.rz;df"r$tWcRlljN0Gff̟_GB^3dfA<zدnc:Y4V%<N&?C:1tq!gcu3SOc(1fJHx$}IlfILZ<Y(2.VsIvzNHSKOɔtďkE^!#Awj8mm)XӽiUT"ϳC"DtN8NgӨlow}}L=j>,t"w<trO	{QRb!==B&V=w@WQ.XaŰH;{}diǈg Mg[4
[}<\wlBKѧ6%+7	ztv.X0Zr-[=A
cCNci.@_FMBqɦwfP[\sǒS1>*sq26]ѼHTdNl;C3$m\Hg/DmUz$JU-ő|6EN~+h%NmrYlcgl4ttk"dmcl)1yKF}ur#l#5ꤱ{<dnѦ6odC7 Ox
S7C
)3j3˸X"	PgbP7BB69=~}%hw>lh<&!MsVEcQbh+jlK%_ˇ|/<P<Ҳ
=:Z- 0$OB:08(߹.DzyDo3rv|+v˨3p<Q{t%{oTo|_?ʓʨJhp6eN<[l	x_+6cb%]{KG*ayJox>EGc|2ٮrm_#0f,+}}C;/E#ޟ؛alfhz,LC$W$g
ʦGzQi#G{6Y@w$!;am]S.`!dƱ棁Fm(76J%;:^X䳺6wOSGULU\ֽ$\VaIR sI賢VʿAͬ.W&@6po@?h?nǩ6I\_ӣ>M^nxwSEm\uuQj-:aCaP
FE6h];HǊv_/Cu}GȞ[kTq9@L6~SF=}1$y'aə>]mq8A5Kޮ%mR9h]>!'5ʪ߂/=_Hh	t/
vvi8,k%,%_/Q_P/9S3lCτvkZC}ȟ읝_Bci~,NGqa#EWu[ERrd}_CE%_ER닖|/򊾨c
3#Pk.72q"?96g6p80Ii|`~(̏;o='ƐNg0oVn"~u7"
C|f,02AFA~8nb6@N
~ȇM觥/>~KB폹?ę!4^PN)
>w.Ƅinx<[SQO}_!+7شCq3INm;	m߄-LD[i'AgIu)2$~<_-V5N49Z]Z*Ksd<T%q]YZ'Ǭ8Ec{`3TmQ`WҶ#~jrp{G?49iNv]W#L}B׻zڮ[v>ۆzن2N9vԿwPV4ny/1|evBJBuǰ%b_$OO&mR3Ѓځ=6km3 `
pe{ )Ml_k6YɊO6M 
էkȗ
eZ(_PlHeKYT4o%|K8PcG8-Tbc[a|}
{,Q<nkF>NF7O8{2iF껹Gki>5r;oG7NV-̩i 63ȏP
]y=iF%[\t*35s;֖jD'cJ{:dSOsEY;BqKH6״Oݼ]{<B;Ass[-hP~2~r'{dMF40_GvLDeoYL}
M;Nq%	t;y|bWtX}2O/DQ1j>Q&f{|7|S%hBɮ{4꣖}ҡFuY,Jcfoڂ2>ERelCYʽϧ\1qVwzn?񑉞Nr~aFNZ9s
r҇F<0r2Y
%ǾTߐ͉';rѫ 
rSF|0rI3) 'qV''CcEE(taxHOMLhG#NUa0.AOt)7L%kC||y"RGqyߤ+|Q:py//Vw:I:MN+ |⾄h6cB}g-?k0N1'0NP[SȠgK{$@f}z#nBZ[m$=h;IVjPTC3WYu-ǭu~_/?~rik
ҶGXU&יBc;5h}/u24V46iʟ例F'hT*cи #:GU=>Es^/!m+N>=t:q'x_ ;sϛ̬"<xL:J~$k]fg5ir3|:B~>"u|ZWW}O喋MWu$&sj%_3:/1S+|W1$CZ5ƍwχ,T`94gJل%c$*5? mw+mdm#oz](c+];U;	kc{h?XWdFM8>nU'o'hW?=8ig{,
*P۽O6ɗJ"/1"o{Ϣw_]!}Mޮkܤ[*L#y|:Óf[566G.S"xzն?& C5\-nCԇ:

}ᮚ"WM=Sq2$=hQU=	&YS<ʳIwE)׫ӭj}ߒ{?[xcm24Ǌ5!:~'~O<FJ
ZA
YIv^V^B.h_C颸oG#m(&ԓ)|W#B'{u~VN$?ͱV4$MծoOn
OsіD2ѷ^3KȫH9~8I.NQ<Mm+}"_;]j'cG=Ѻ36Q1(@l!kƆlt΂=sGG=zd}O8\i~d^T@vU2i<y+C:KDa8Aj1sXQ=VTϩF+{
aZMv䛭$! 1z?F9Y)#lq,<s Fc:NVRcF~5~{CDv|Vg6_V8y) fކ6EutxC0͂>c|AYMq.TmJh	UrK?KSs?)W,xtg:dcf^'ER4cC͠iaA4qWw/BqfQڰ){@넕_*OPF.snXDeY+q=/Kdl% sΓE[E^)n}4T%?3J¸B~4[^~,0MoHztIpT}Lm#uOc]ts. 7*Jzz_^_HcSRPdW*{Ёs{[իb쐒:Ջ|0};ۏx}H٧3\sѾj*Qn 
w~P&xk7  Հ 
1p1W !K8~Z*G' (ƪv>Iv'SG2m)MncN=̏~o׈-l>n֣LMNG
xl01ĀO,x75āOf}Û0$_V_.b)&fv  @gWf-IyǶ`!eb&@Q5#`_2悀smgXy!?|ILj=F|W9Oay_uR)Zh&I&ȦMqFr?SUſmmOt +3bLC?6vUt}eG6he{L]^~ONg>z8sc@Y3Xk[ ąSƽʸ7V
#4'%BBch@rNM=L>F<>(k}B`{:rG5㍭zZ6LT{[q<t_"q0xc]8{sdZs%7\<3% Dݙ&bl&ӞOQne_t11ho83\:kZw~CckL[E93<Agx9B:cq/>#Yۓ,12\tƩxĚtМ:Gg㘲'VÙ͓x>Y|lDKm؟o$D;+N?o>?p&(y?ʺ3(dvibGے`m< 7OiUb25*5M7VRl2PyBA,D4:ue0GW|e,
e0SWSFXq2xg@)2
6@@1pf%hepm_[3hM^21{><-Q# /	07F6C
 [[ :@-bE:
?r`#`)P
p`
@>z:
ޡAo
q&sAoIe-  7 r% @a3댽_('
vaLa6~ay6VN-g1n-h13&:72v:{|W;th?9[xO֊m?Vi_զqX
~Q(J[IuҮ_9y!/pșCt&Sm,l80n{k~af 
]gfF@u/3h]\scl2'^<eӃ4$֗cȗ`2Ѵ6r{鬑+}ҼʋZPO~oow/[p?Rzqm79cW9@QN\ s:huug|MkVh!!yM%nt)৳3))݁߈F2$|Z	?K)<ﴮ*1xYX+w~ [<ks<Dgp'4}L=O8FR $!Ex= ~aʇO 8.7CQIkM%ĆsZ3_mbW$Kws=<N|{O,N4:xVȵky:=|/QBe5T]Xe/JeZCp?O;8.JeQKl18Lҝ䒌* :x:Yo}"F6Z{rPgR1wYa^~ocO
_aA_CjEn{e83k1䣞?P_/jf9V_9΅&va9@W+okz+[&#gK<*Y0F ? @/ɿ<ȷ:3#B~N>S|)j}Dm[\
f=D{z+YA9T_S#Tc"GW'_gEw/C-{v-얭0F j+g䷅9 'g҉U>BOFQܕ=C}87>L.GK|$3P<;dgQLM4O2]wq߰V6z(ޛTǲ;OU~Ζoi0rT"KLϞ2*1o7<3I#}C]!$gHgl[>NniݢN. Lg9~<K6#aA{ִ)qI'3Yߘ>e5].<>ůI&}4gkkI4-J}8܆>sgX{'_fn@)`5&:c(\Ns?/\x:t|)u7/Ae6 ['W+zJӕ$V`*'ڢR?|	z'z>!ZZC"o+}M0*ڈDt}Di(/Khne0s}&^*S1zV)O:YMr+(VNMT"i\h_~e*ܧP'Gߝk4]St8.w
]@N%换S^Xǐ6eB]tMƒ_[᥶y_Qp]5r~U#C%tQ{	1_gNFq!Yct!Y[zzh_A9SN%}ra9;Pڧ tS~談}Uo4*?^E}$xS"n/_޴Pz;vcoRb?tLOO~K6qG)拙䧠?[!by=x7M=~q%2/&ھM!JQ9R2n
&iOc+L((8+-aE^+0,A/CwJO+ѯ?E>h I.y|Sfp5lbՀbfY	(Zhf{YI&&	&60Ě_hi=?Yܵ : IYkE8	XJҼJ9/,N\۴.Ѝtt!d$t>Wףi~kCua:JԳ}Fwks_ܳXw1VGʏtsu,]إN]8E'FZ/jk>ln_h"_;I.>=H>	?
p=ꑍL5V=v>:lE:6#t!yfV&Jd:yoigcf=61mM&߇9MXW<훫+B^귔wʪ1m2ǲbNk!X]Bv^yӉ5nǪ~s.$k&#ȲFut[[d~G&Cp,)}pBhR9J!<|mյME_ Y܌tgKBCE]	M'Kh3靀`"?y_{g=dj7Cw\],4(c"I{C
{ ?Ν=`o{4.uq'=uav;x?$VMwE)$!gCYf	ho@N4ScI_r]5u||pCU2;rRs=~a-g^8mo cDJ:Eq%{:,5B<Ǌ}~*n?tN'|'#Gc=gB}3{=_70^~ztU@2U_sTI29K
KQۋ㡿}^vH=OT6$ X? /5Ƣϵj{c ҾcC}'~0خ:ޮ%ؕdvm=8r	_ӁK̬m4 rU[yt*JVE:[~[9F`Y/pu5[`wDi:[MJ@8DwcO`[5[){[;HjJIlk N24@,m0z`&7٪[*q*Mz
-f^xvlΥz$_Ɖm҅SvK~c&\`K&KXz|0IN[Io:woa5kLz?>nE:&~3Yv&_fg#♠00⌑:۟0݊
4C8UW/L;ԋ6Ջ]}ʻXQ@|$ϟv׭VE$SiGs|32Q: G|xk4uή^0]ooa׬5k2efaЎpO`ulȶyV#6"0Avv8~[Ellm0"Fnj`mfPuc]j٪;*k[5l෰k3RbV+
Z`bJa@pslJ,s0t$Ea;:>YU&A^L5w#񺼿v(!uy?a*2K
:cҕ!/=9fuA
5ثr3+ole2ٕQM2ت"~Vn5]?tcNh[=l0#ɾާ#V&y`/:m,_· kfjp
{<ŉvG9q|]ҟ7ht>~wܥOJ?os:պ;tQs,@ 򐔵Z9ʶKn77΃ޛFgS;9m]3{
ߒu=ao;=Նo#˩r97cL	лcqv.um8shG7}O#@p c 	zl&;MvOd7z7dEC3zHuj<eOi_gpttje3mI_e6(ZYf?_n٨3r3tܠΑz6Z8aL@m?ӽG9#ho13!L2w.#ks:;Ruv3x ڜ]isf#W$~?^1]~EWB׫O}Zy, ~ `Oa@ ; C9ڻyqȾw%~,ҥސ88׻guy|:gP?)foϥw[/K1'Ns*I۷rs6-A>kgDwto7LCI3Z'D>{?1mYD>x
HDPo:E_~Ǌr@T.61mrq%s1u`v):is"ÌUl(@7'0LH}Zĸq@¹	Z?p5Q/ ȝ}N{Cw #]H˟q`#}~nK[*w #l/+c#KB6wE]k|jK...ao @r#.e:.7Lg+]
l
RsbAs'aLqɩc"t?}Lt21ˁ6=CgxMo8Qndcy/WZؽ=&ه~*ÇT 2VHGfaZg,c}Cԙu3|lw?߾.+u"@G] `>r1֣ՙn|[_gh|V￫	{
{Ĳm#c:{x#A=q_@أt3+dk Y<P_Gl:B6PWÑi?Wlǆ;S[XaT"?qz`Aՙuyloپo߆ZŻ
4@`SM >̶cFK3%H5<dZs!ޮ|^$)o`rQαT/L3lBI#_t}/u{MvChh66h6lB8;
aaCzWP@~ݓQ .̲ܯaw9edgo)g1v"#ӷqLGߕ
%=~{}w<tF7tҁ~6yP7o]yijx/wa[ysng>K/5+߿HTke97)?!br!zGHy"JjI&y{7)צs͆6}+߮}ߝ|CU%x3	OC{$4 [QJ9Q~VKqyN^	(uEnjD~II"Qιr١laDwDC &tLU~R6U:廝hIBƊ4T*e+z?A\$zA
;?ɏ7Om
|9~9
#MʋUn#</DAwjhxFAݢx/gBכ$/Ypv	=~0Ex6d:I!P#$9q੉`W02sWDCO$VaYbh{1!/3Lժ0iffH	f
논#NdlG<mzX|-mOC>x*o>Ă!+>etۇh-.m}[l%偟hyS5msC&"MjZJݝ*S͕* DZh7i1#Y~:"K]8=K`ydK>=şUo^y&$g{I6xnUwY6kG+f3r|P;2Z-}|zy4ZeL{^mz':j3Nvʻ	IiJ߇dWwvcKELݙ{N
~SgAAK0s@Z/h	M`l0D/hC}g.Ak76Z4ϢR4`]hNqnSn\6h
О󔠥hKA{4hzжѹ.g:bEmsӛ䣓iAnк
KA;uh)Z2hm7FA7ЦO"cŃMC@+6Njв@2ƃvfw)&hue
}л@h)lb0A3кAK5h4v@7h'Zhѻj&*>?OhQdcЊ

A2Оs13jfG1sCă
2  L@9`'Sl?p;+-}n=XyHX+ -pԫ=V]uoҍz@؉#{'4̏/Ov"^30q%9Q0c  z =i\`뇰ppp?p*p0/ Az{I	=X5*,#B?}ڀ؍
xI.p~OޏD`տiy~zl܆Fj@<.`+c6oG?>ͣy[3[]fѩ핹QB?)8A*iKw2}O^>8u169F?߉yvS8sk~hIK؁(<Jة

EG>>1n;
#7z[g{bF\(V7NzP|48֖N6q&e
wX/9~ߧ|)~WO}*p{#tr2]L|xRim5LgSN"׶Ni磸s YN*RQ 5{A{j
~u<&4}g
d{$_C{;ltl.M8=	Ѿ/@^W˔ouӷ*z"tLxt֑63W.Hvp&{hN;U?ggYC0bـ/~q
D
oe_2f@?E뗯!.Zv~z{/cuv$Kq?NO}|
mqh?cj>>bcu$=oEwDN{xwkGV}kW
]^~ᝯ*}p
>ߍ뫉΅~5V+Hy[w_ٕ}#MNtNw
{|H>;|f7%Z~O(A/;#\7<[ [#	# }2j'$madtxB ;^BFǄm{/G]
Ox 
zie$5o02$<Atw੏TO@ߤ#fͶ୊ ~$>>902(ub%:uD!z{\$%a(=HVTŮLy.&P^
-TZSwq>K~!ݚs}㐽$8sFQN!twBa%Zes iAwKtSgo]pvN/BC~Ak
V;CadD 0mYCzZ"Y:P:]Ӡ2ZNӺ>ˡ8P_|HڻRuyɂa'#fdd>BItw{.&
ZsutQ et%
Bܔ&97qm1:|[,0m]>G݉o7L&	+e'D_Z90mmI޾U)*o읭O`b<ƮzG(E*و獅@^x/oxfൂV0o	[lo%e=YZ=I&>NRd}P?b?B c7(Dk[2%~*O	m
btVsT-$8>?V]~lH
ք`c\W7UyXU=>1(xuquു6o"nk{+ncvHʩS=ⶱ2x]Ǩg|tv\Kqe\\ۂ^q6q%7NS|T/qI'$KoGӄm#D(x>x'A'3	|f6#Xd )LI'3|= 3 	wLL^;++esuMdQ5Ωؚ	~uXx^!qL[p"M;Y'hm==yd2l(Lc7c{ 
@
0	x.VY*
~@59Z 6`b>֩Y|cb6!
@Cƶ6`&ƺe,z~
\>'IH51+p
@9`Ӻ<@zvuX*2[0{OY+/7Z756lŘ8pt_;kE85	\ H`{j;3av@
  @3Z{
I k  |: !=@<   ' 	܀2l{  B.p  f@'Sxj?z|ߍ-0}=d5{gf59}B0xw5Y&	^v>	^3|O'7E(/Yf2u|b}c寙{F4 ~dҷC?nvoGޢkW!?"93sQTuo*k֪t%h}rb!I^k-K{J0}H雬nލp03"Ld^#J雬;D0}k?異mohY~ ~g^%|/mF:!մg!9%LMa:/ p}/@齿N}Pӷ
DU+t^HJ/yd/}g<0Ud/}"+Q"</t^`_LY%La_g*s"|6??"|&aBL4-Eu~/nK]z@\KsPZO@mͱNk\D+헹zm(
Ѻ}5.}>9ѵke]mIo#LlVRKR|CY%K D]ڇC{
(3ڼ7>Bц> J@ܟ.7bL|l.:dtESe%ʃ=IFoFm\狞~~
|\zHycS8쎥Aﳐf[oD(eSS!Kx*_YZ!y5lQ.^\\w>G]Aavs(o5$6_
m>}.|IQ>XmI܄qr`7?\$|o
oSN</5->rq; ׽OW埊gpKvuWF渓L&Jep!y YDE}Œ:U
#:>ˢ=N'cѽ"[}>"[C_W1x@_ͼPcb\DtZ_9hB֝/ܰ+y*xi1Ejb?ݚOzO7l*ӷd+Oxuw`L62<ݼ=tڷ*@V?4~~Z*H@`2+6v{ɱNbs#NT%唎|ѭU'C{>ůIhBz[V<e9*݄=FdzW{z9:Sy~3O`rIDJ?@i(WJ٭ܡJߟ#wF3i"D;&TmKIs4WoK=ItSyx^]y_69 hYZ.=F=3be+}υ:c4˝\J޾H轞T_6^]j]¶ SoI"MmDzu7PV}-8'0N]!s>ռ@8u>=@[+-qK6c"h	/I΍U::!CZ;V?hMlUZoA|M@9pQƿ1{
u0qv.c:]m}Amhodx?}wi#	:m&1ǄgF]G^'ΊB}+{u?hg辚z>ο%%jN^*Q<ŋ9W?쬜VQ7__9ǅf{7Z@Vi5ql<tQ?Γ;![f8s)d-Ƕ/Y:ou\&=]alzrZvV;PH@^~-(O)#4w(g7ԓ"unVgO]):[b{T:3CyAhg=3|s:$I]ҡu<fhr☲Ge@w<o3I: XHr:$Dڀۀcu?=>{wCd;4
6*mDTHlLÍ>DZKRK.`=ۇmik=pK[ik;3w@<}?~|>|5\s53_/OGxen&
u{n{l/'޻BpE,i#~o<s]~:\^&	<);#YgPg\3r௼G:7z6}~\B6E`nv5mP˾T㓶iikU}i<YV{]sՕ rć;oE~?fm_D=fu7zݍ6oyCΉ!(ct
+haç|3=
D<	x36B-o2>:t(8Joe#hڭrJװoy>wg%֓w[?6=kw|y EGr?uԣRva|(Okګ!LMr-b쐶A':̱&]X+O4WߝP:go^{穳FAO7yGx%O:6	K\u]ɺDϝ-Ls}q6yMb>{5Wm62({?гVI|[AƂ\1_Gg?8PMnauDxq
O >
yvHY:ͷ5v ą/UNBZtPoM[cӝ-@w"6]`cqNqx)h&=eި[ )z]	n=68LG)w܃p߆7_7˝10"v9O+:sJ9FvVu/hsM4I߃L1-q0#~Q6a`l:kVIS/wlm+>G϶TŶtS#JfKhZtm7 fF]16.7v*zB;'"dGLNyC/vMwnu=kdW*7d5+m&#ksgï|l<WC/H]uF<41w+8
{rl:-"7P?-ֹ{~
5m`bvTƟ{ZX|>eI	4F%r6ĴI(SJuN%{/}~2U\D^Vom#@t\ʷkmG~.Zk/nG7M%7N3Fʽ-2/+zD7@#B[9l^8k.lΉ_49i,!~  Qs]I[#lSٳg6Ve]b=ƃ6BPOҁ:DJ}۝|ϭ(YShO,U*e֥	\KRp.@[cI?s,=kY#?}ʱ}¦I4skA` :ꚦLү!^ ef۞>edJ敶` 1/, ~)Re-_O0=UR:u5y9#	$^$9t^Őv@~Y(~͗
.<@!^g?**A	+m{mȫ3he 4J+_5ш18SB<mOi'AKy;Z7o:Bmꗸ?ǚ-r[Oզ>;P{[y?B!݄Ub_p_]R{}K^J{ȓXcz왗cITK]omO-8Fsj
⍳Kո@|)2O|Ǒ!	CEm0aJ÷	@}<k^:qyƒzJᬯY]ۺ-
\=J+٥hO]:Qo$R_G1QYi-]Rǰ"lZl$g{g;mR߽Iy=[Eɚ	E@Z3_BP<T<#p6X,Yy<w]"vaYߍ+/&AW~8D˷HsVHț[2raZ:+Y/Rݞ$֐i?qe<;>\ծI|MyQH3%}iցNm[u2)<uLƺf2p9IwM&#I5e{/?_T=q=ƩGo<O!I:xa鱦~tNoջN7I;@1:]$#] N%¾7ӞS͟)F>v23K~ӹ➂ۊŹaX?31@9H{m? p
LIkǶSIvpy-u_s7qdXF=K(YƵE=Um. @׹7:i]wtĕLyg;$1ZC=P~U56-hkMbf-=&`	\JףwGÍ;M}*)pI귺#
3=-?mQy
rbX%I6^^hZQZ#ԍvW,P~nk?:ko~_(Ϙ:ʅuw7mc?&<!yCS/ҧcߥ_Yr߆oF}?-q!  gHS,}
-v@Z~x=_ʈQ$s6Sw#Q֛:e{ᑼC'\
C~cv,Me˧z!syfb͓1ʄZIX wˆhK*CѾZیl-SN.T}ƖRGb/ї	⽒Z09y|pn<FzlyOdzu➱Ss|-ޑbanXC٨=B<6"uX OHϫƾ~')G <ŷ9v'XBXY3M	ʆSlX
گnwx#>KaCʂ|Up.9H9ikEȿGI
eT2wI#Ql	#t'r\#Oh3ͺCF¤Xm"<W<wI{wPܩK3^7}ǂ!+߽Tsurswh;y$qwz{0zaoz3o<s6v<þKu,& z'o޽kbF1׸|Ҧ7Is	79rIz,Q!=72|oH^ŷ6}7mHf'({j2_G?R)~>mRH:͙<:ώ$9iy=_/Zq|Kh$0Q&	.ĳ%W`O;4u֚j>Z([k)HS0/|^a:iU>SEut6aP7P&יloME?y^72k=Og|<+5,;q6Jd0xo.KD{ԛk.M/4l-սg_:;bӱ~t|!lQ,HzA+#jA,aR*F4o-RwlƩïv?kݣyq˼8o,flV,uof}6F3$)ppO<8I5gȹNſSClOg%M'1)Uu벏Wu-U__.auV'.AY>~0=|3V lǏ;SEF]>p
͞*%GA;~{tEOEyp:XYs
~OU`(I^84*͌m[_q)~fWoxA59!PyZϝ/Z[X:#<۽}Q8fą5riiϵEobq܇o_cZ"(ey;Xm$W87kxSgc^:|89/كBʴJQq?h<ݘx9dփOmUN:a~0WFΜ⳩#]θhyPv1\?o7`;Iix7GэNi:ƅccGݣhOr)2,%<nJTkc_x\o{Nf
W&;v#>_ipA8g5ewUmɣ@gY-tAxrm}mט#Їz)u/cW_Ӿ!^\h'I$5-xary!3&4f$ueYblOv=RȳC&.:Di^_i?#:gy&L
\bĽ8sjԗA*TKvKb#p]SsntŊwi#a<S@X]z5

ñatawɽ,QSԋ
klsڜ+dlcl&o݃2TI{ft5fQƎYľ	o6fͼQqW!mZgg
ח7\oo$9׍>p#NFykl# O:|MKsܾ`i8<#;ͬ+4z"έȽyf#юy"ʸ.3`C>ų.^>ey-J& F_DH!C>\&}|i}(eVg(T1KC<m^Qz'Rzڊ ~>eN%
FC	:nS)+񼵉RW{ٽ1q0PWI-eZ]R&|@-\|3=u}{[s;$ވeٴKC2oz6Smg^9o<x"M[3HQI
ۗ9J.:ιxQgZiQ7U𯚠C#U>k\
")3WH2;rr[Blw
E]1<Y;sAԺ=74}YW
Lk%촽WB\$ǐ%SU1˳Ǔc|5LsC^a$*gꝶ3c̍FڲX{oy.zTE}6?^~'~TP
sW&ĵCb܁Bocc֌x	@^Zw{ĸF&	ilB'yɇ8oLrf5)܉31GLX^evƋ)N$88^LFgb8p{x_]q7rRg q;FEq䜱!&/A4?!&lL'Q5&״sR$gV%vƸ|@y&hMt
~[3ceXkڻ|btNk]{_bdIq1[c`[6LVቭG616q O9K;G&w"EYK!Eʈ56;3VA0qȔį7Ў492pP6A_I[5(U:
1qSɟnJXc%繹Ih,^){;)z<)+rL+{/yfUIj]γdǵ8/A]٦23MCUL@u6ʬ}'
+&ױcNiv㏑]	MGn#~ڧn~P'3bڋo8?(V+pp<0 )upp-}!v?8#Ӻ{eS6k/$;1wzSl¸)y͍rɽQ\s{Jؙ})zmPf(33-o*m;;^Gb~[i/R"t_־kGNڟ:sZÌvʝL*qv;irZ纇yCuy_݉(ھ<{w
&Mmv&^T1sȗGM }Œ{j>}""qӃuzqxJ#K5Mru'>i
@Wiޭu2NZGzY3,ϱEiS6ٞa{i3;l٦N3Ok=>~C #Wh觥߁>?>h%}O- Dr}'ɰԹFKǩs*9:[it'KJ}''؊򖳝{ n_{$O:3J{aSuC+倻h5ׇy>'X4QЃCd[ RXοGFK}S~5w#sR7sߢLu+"&b݆}>3<mԛw
x%zRnsͳMoa.4v>-<s-}hkA8F꼹X;ZQ|4D8q1e*;
fh\2u <tm_éCāSGd\¾E_w>PJ'hV/uh}Kwu!6=кe!}1#O}]Wpu~ߣ.NT<-zO^[A{||:7;(eV+۸mOJŵBZ~s,Fx5dڴ@W;<yGg2~{QW=F:!|;pmb}bke(򄿧M8wNu7Cgsz0>`؝$]BNh?cD6O紒\8X܀y6	-o&+Yx%
 yEZ~]0E{6K%&E9!r=.nO{l]\m:>i6h#x&P)-	kIJn>AX0Y1ȧ1#ډq٥V[۞2W|mGk	g>u^ v
!$Ix11kYb/AzR[XDw^ik'1]sNs\=d.isX95R9naeu/y&;?j|Իr]>Zv<g	Y2ːk_GK!GF3#t-I,J
ߏsI:1^¥phơ7=n
WLsZ؎}ŵn)`c?k(kXkzKS<&pn[9cLxBkUAWطx_͉Hxdbiv-W+zQUK=QG	d{韓pOe
5g;_tMzȧvuSkewAXZqע_wWunMQ54HI<nyG\\I8k_҂qdNbRxylxb9LguXߕL?.62־^&=1ֿu:aX8y.OX6zke{0q
{A\q
{
xwwK"na[_,b]o,etq%F7拞o"Z	!;1v\{RZ=yNM8(aΌ?nFǏ_<iJ> _>:oo]u1V,cnauԹ/GgRĭ{㯺U|<ӺSڼZ<<}|;+Q?5C37^a'՟$uW:s*gHˀ'c#cqb+|싦f_WG8ئM{^sԻ5;8mGږy5Oݛ^Bo&naj)Cw6|9W]iGD0!&i$#UH4ISfs˩JŻ;ꁿA;7")fp#{ؘs<MGFI;?{vofvB$ڹO-telډM;ނJ7aN+f'
(cMdkS;Zj?iO/Gc^P{{|&qҎy^t|Wtmȟ?ˣ+Yxr~	u(sPј;z8
i/y/uﳃOGuwZ/],uuǂw\WPgR8LEv9\wF^rP}Zɲd1eOy׷kŴ?/~yrI;?ԉ9mCkAn M
E[v*}kM<EUL]o9/f@^
4&޽wIqe6iCz~amDnGM}761B+ 9Pwzmv7nCo:L}0>6[kz~>?<Gy`(iGI+Y/uB?|۠7_~lYuK:ZE	W(ʃ7R۟6VI2FF?ن+ށ4"PRw:;RK}mtc@wFP?vdpjvyF{7|řY+)gLX0Lk_4Cb%ukbF$NQ:D|`S/
q*f),L~)4ʽ@\0ǋ2|'>94opn8uH~n 7شkG{xPH|_yC{2qo8t|N'*߸@zlGxǀ4?W#A/4os<Cǌy}+1Opwv<>P׉1Չ9l+ҚEH׹O`\bkr3q΄uEKg'8
cΊl#]r]AA.M61XQ=81Bk!Acmpۀ~`Ӯkn\51,h_{[fÕv!"nCw;kwACx|L]2D/t1pipp0Og.8ܣ.ecq7Yg½ٵ'W.76CLg{g9>3uv4g:;'F:џS7?VkEGUvxv"Y7&fZ~߸귕USϹ3AV&A1QkR?~9_A{2(l9h_W_8{S9j/^,G謹Gp,qL\OHlUo[|m\(68{]ckgF9g06^tX7LVI(4}r+ZNşBrkT)]8˥spdy!#r}e>mEkˊ#r=4a)SsQSG\+ܳsٚ7|[OԮufIBݯ\ZlpOUwkd`.5[G%dwtorWτM>̽͆cpg߉Jfȶ!H狭!˿o/S;4zuS3~(?=眕{_\(>~/xv=˽v9й:䅼_=?\9sY_Ts.sI粀y.s)El+1c9,X9~=<95νvKsb7W.zuclIcL0xƞ2!%}n;^㙈ՙ!'ާ'NOrxp|蜱L9ZyqUYwWSݍE?n-e93He0;
Ƨn+Թ+x.
q7/{!1cm|݋<ƽkk{8Ε|҆UgPW>iK{8֎EvkSwfƇ"N7	/˳?^ZܖݥS7nNR}n^|
as.Y?̢/:?y2ό#9/}gT^+gpܯG?@
`C0GϔsfH*

yn:vsy1u&J6;c{r΄qg{qJ1'N-wGi?Dk~뵏6Ԟx?wYcOZcR(ϋzkC/
({n<>r
9ߥ=Yɳ}hRk-x	m-O?{D<"߭g3Hm|N~Z6-j[!m^ՙ{z2u>|O7{<D*W?z"uƯΜ:]}2y#u'1yQpષ1K6f}Y؅,"c?쁜+Ϟ)G=cg':
igy^f^od>#s:-s'mwC{1i{8.
|=l3r'm
-7Zpz*uy
znMoSH9
~ʞUO([N>!g_e ikaAE)_l䎊H]4˿=E;VSPW(wWL5㋪̎PxdFK{HC_#Ӱ=7,igS
&:1t,:D5hz9#\jӣ{$>J|nnv{8wi啣<[o F9J,:_B6ؑ i6S#f;k݄2;BJUնWcTg;,'N<+hW73
hiuҽ۾&Ę/o)DxKiU_y68MGfyų]=)]	St%wGMצSFO<WOy,l_PN_Q<s-''e?Oڐ xyBy8FQ?qγ_Q+  hH^s`yy7D
nN\_.m|DѮkWXG8ܙʁ v3G4#.e+Av䕥G{es~?d葥<<LK]u.6峼1V(o.o.o,o_ʴߜWȫ{y"h-H3qśfpe=	Up6<;gSrcJ[p<i[v=:R)2SVbX7U/Oww#/]J;P{y\>ycisgeSF/|䳢7/=si;`y%νlmsHy߆>. \
QqM;a.)G]]߼=3p5@;fwɇ{(nYkܒv»(	p-eH=K N1&	&|E6T㟝{䩽~$˸+z
mr:GbuѶ'ϷA(yQ8bꊳ|3C>&u)nz3*ߖv=0epЉ|Vdo-rm4m:864>S<i*y8$#9,ٟ<k
~m&}q]]֫q~nMoگ<3+jBHVkuZ=bF~vrO-iy7X骕~.λ\Vv;b3޼vǦjhe_Wft=YIo.;h+ N==w^g<<Pd?h7mDk =b?b o݁8O 2ՀL\yW
!vȵ5Za2OOѦo6a0rsViRjNH{"X+ވtȳbeZv(\y%
jyD86@=[xu
+
kĝ	y%40ch2/4+!my5+Wy[ޡõ|#׸r%m
<q7eyb]SxOBlΧ6q<ʞRgh[L`
8g9ki3i~:<GmOϏm׋啌^̧IyfBL΢RUZfΎLy܈e>6vE2를Y3f
Eh{6Rst{hb1{tG6HN}pwSnr)=Y޻L{	^;K-#-	:ʠр:B2\ґE@G6]9瀞7mby|KMy74^Wc1TrDm/HxF=Ti8/ckz"BїsJ
^T}Irݜ\?2Մ܍q/{s-H>I<zI,A`G_Mp)ng}C_z6ʤ>J߁L˳eahI8
pppOPǖkB?hoϾe3'㿈I^Ď
D*#sb&SBX"gP^,=CcPb7diI;"Ψ3UL}s!FI>]ӸB^X;-V͹S"ל6<9W(DF|;cz,+oYM:ҖD=-I1n6c!)h#F%xN^$)mAaG')4g"Trg҃+Ro+!_*%HǗoО<sliP/evŉm2tq'*='JQ~~a'ͽIF0]~0c6b}BngAj#xB[//oyjg&<{=Ğ=E\)0W@b)cp_#Lc2{u۩w"q(
`,x(]SJ1/s|.dޱ
9"}ǹ,dmHp.:kygqDOUEGb͓oAF97vsNlOxFH)Ө80)e[坭!
=08-
:|yP?5DЖ_5n2o彊3/1=?y|~*mg? =Qh&&|p cϛ,,q dyʡ-"	s
<@[,=N(;Kg2/<Rg7J.ڈ	**<<w-g$
\kmo@{;.Rux]w<u.4%y?%<auwh^uyJ,.Gikk/DৎM_kl貎{= q@D`!|o)=yX^&^sk?"o{i;Z=Mԉ6/|A㏼x1,y!+}m|\








oQ7!
{~gM}nڠisǌ~![ߐ"D?R>[\Ke߈;#b\GT&K-F򝵳Jmu';?wreytY=Qiy7-{_l&p@DDﶽ?Sw
`77777777777777ﶏN۩```````````````r+cS!aMl	qd&Kyqfl54?a˺/>"`wp>w0>wO
|Bo: wP>wW{
||oCtoy:<wG{
|uwK
|:@6.t@6Wo׊H	_c%	Kǐgc%\(p~+Jxop挘p$|7u~/,~kĪHZPw	;aT,vUaYƱ~K&Luxvw!Ns2\wl{l	ڙ;c~w8y
:Ʒl5qȓzFm{⨺ói(~w{"IylS}5v|Pރ/wm~{$yyo}_fƷ2CB!ӑq1\^u6f;<=ϋ3gK[Q<_!u}.hCTog>wu爮]?{;Ioϑo{ѧ!n3Kݝ{G	e8hhdomuɷ
lߒY]sQ<UvhODR--
nqT*w(&m$SeJr#f|3uSqpؐ@ug#,-;|+mbQSݝ_Ro?<lb#q!M{ŀws<vi'vF{{2Wylw/FJ>4q7k{O_C,cs͕>xm\;)^3{w;%Oݒ #mi
1
Q~ o)4~*:XS`r-h_/x
Cio{u!ƄcnmHwt5ǖ}PxNf('
7oYw'hR4w>566ωCt ˗tˉ{	gX)9X\)m7Nbgc2ڄE\ ){bwj==vIo*29/=wvyχ+-𪷘LRpnt
w;ӣ%<h}	_qFBKyԭɸG:62ʹ[ ^v;IzSvƅc><[#WKm/c{}xi:(pc&<HX<VT%pp:@ m-n -.F$oշ(@|ZFNIڲYFo.߁m7ct$<פ&9w@M;}ZeWg	E#HϘsHcsh7ckNN}R;?!]ڥ1
t_ 'E"D[fH$ɸ	+/`bWĵHw
an9N.09y^	0A%z7ݑc|7{]m&~>/,t
 kY&=Z_YمsKI׽>#xaaF
<~MwW'ʬ.!@^q]#7!G1!\/Lm1I:nmWi=mFv=4i)JG\aݾ:_6Y}"G.<NW
ɚq>!|c*_Λj>%NiQ.	[B)W,Wg˻(CBrm_rqBCD	-kt?eݭl`.G2Bmiy3?pN,s}#q5w$
 =Ӯogti
sXyeEߪɧAeҺ_)Wf>}?uh/1-[nPw;HOVLu뫀k2+3z.|ӥ"ڮ4W~k=M+m
UIzZ'r($Ͳm;'{	߫. J2LP0Aڨ=ok5<}RI~Χ-k9G_SoRγH[nlrIc>S{EPA%]h[wKۤ18c>=f?U]_w88~9цoS#ePFʼW%ԡ,(CձF'}=${9uBٔq_NĈ>#=">f\Aq:ڕ#ǅ<L0O|na	лAe|HZ߮CIr|#j߸iA݉v	|ָR
Fdk|ڢXo 7-Pmg~5UXFƙfdjp_/;CڳsCο(9IUu_ڐ ߟ<P>D#&]ݬx!]vi?c&\y4RvMi`]e.ߡmG/6Hmb;&]1m{^ݑ 'c;"\3^>t&<e(N'`wssP)HIں}.QɟoF}
{ަ50,-oTcoÙWevp n/p>ˈqpUp3}n#ܽp?s8ܟc}qc#ܽp?}\Ew/"2Lֱc.O
gc.4ii0ʁsEN9^뀶ucsmnG^됙	RftYv$ #'6|7ΌJYK|x|Wmk̤^c@*LjV:"\a	SsQfG>Qe~zVyӇ\d^p Pg<IIȪas.=v/^}ih["A.Ov=d^h%,20o)q̀"r`wxߕHML;3OMr%%y*t}F ևK9mqԿgNee@Yk$.H5J1Dyfh)dH	y|?ߥ~^~1b}P2^:ߔ|i;7aǥf=¹ڮU|[Оcfqb3~Շ7vst	ԉ"I*i\o܊v7<n{eQoLw6"h|g¬
DQa.tpi-qnu\/hܡveo'.
:%!M?|TA[Nj#v!OtRrdx'hs7+v~5UN{,	â^'kr)lY.#ρ?|mc^N8q7SG/CG8ƅ: {1X_BwYuMl.V`-oiښY˚[ͭ+[uM
-:+۬e֍
76_TccҺ?ֲtz-ռ䆆m(Zd]_ײkisc#"敍VSsU a-kkhI(![t=31jmkAɍuMOW,L}AKKstS]zn҆VΣʦ7jCuWXKV.[@n50~BySG64馆MVŅ^|5͘yDU@u3Z_y#R_jiCy$+hZJu@ j`S*-W/d]ZV
P?$6(a[Z	
h4ɚ1mYuv;p#*dO<9Hڂ-͡hPR
AqGyPukI<nGpUqc*kBc}N_Ժ2jn퓵;~~_ZѴY%pPז	6 (]LEin\چAjկhRUuVeō+$8q]KKh^VThF.YIcAq\cֆX/L5U,mqrʦ74MS&Gj0M *2p%NCCaU[KҶ0LV6G<Ҕ1>Kr5.[P?gEӗ4/GKn?EZد86hrt,mkmECodlLL't9雛Tcij
KB
/`Ɓ.Rr^ؼGKa$'eWt^1q_jnm.b)Hmys`VjCJ=+fux8}<dJK= ̄892Y	h.?>UdM<)u@ΎG:G֛*x
-" ֜I
ׅh0> u;Zi?M<d&Ř3 :9{b0o؀\!]txIvIM
_Lf@\fEʶyN#) |RT9Wh;	_a/h`蜲y9xmND
M3o^iߠI,Ye҂I\VҁsRB쓲x],kQ5ك)J~\|HAd*`MK~)aIAbz0e&Հ@YbyeHiU|<l6_5N.I7Sc:+ySjsfeYfw1)|lI5G1Ѭ
>IEHOGK.>ߜd}e+[: ~"*.6hEM_Ž
̔>nY }eɦY-R'	ƀ{(Iq֍+Z[BhɬnIssۤKZZnk[4PI.qՂ.jhÏaYjV,F:j3660VV0_ʖeu qTU~WH&_%
aPc]P|0u2U榳DWVJ@rGs''MAs-L9S-]Z?Lt9S?sΔ:KMJ=&Go9M;1'jQys[3蓤"eZĀqNyTrnJ=)\k'kThn8'J.*U`ZXM(MID\3VqpO$P<Sik*0S]6 `RQ.kP'3PaF&|ć8..4ktjb&
	f+{XωӣA^U'MG\QgӊI;	GYefe$EYy"9˄1#=E=ӯA_d&1?ze[ؼ&9
dWے1QfU+9{YpOܓ3`Vl:a9maKk6 Sp9ҍ7_OK:{mkS{/OӬǇgkFr'S`t_VLL_2u#2R P
Fu'1w$LB8_^/ѿ_n=]6	(;{V@J"^5\`K3}c,rY_\#Ejnr{pr[r8cxeSG$TnEۍX)|d]^QM=k(ji]t2%o-υ!&9*VȾzO+?:EK)?Z_ٴnųhBP(Rȕ| 
dN7R11M7W6
r;kZm9gV`hhpdM+gΊ/54G9d-oP9u4ll˨}DYW>>jTb
bʦm`&9Jqd-MW@< l	+{ĄUtyڊ_)Z'fL=,luD7>|xVOǝ.iQ0G%Q{kN
M{)-5ѿ_ǝUeTB
1@IGǴў*H:__OΕ=\23d|.ېnHw^ƷH	т|Ssê4/иl2+9?' #onl^&e߼x&,,Xs<9okvcHoirryeIlrCl[_ɘXUgY>jy7ݻ],S~g;N);OAi>(''}O$u+?gN9ԭ
YLw]]}#|
ԭNZj}_WoUa!xJ_٥ׯVJoSw+ԭQFލ*]ԭU;S7{[	WD/w\~~0,Qeп+|~pOU8p׳y
S[k-ywxϕk[E'5o{=_RDO!D4MA,x݆[⍧*o0CnƷI:OLCѧ~MBjB/Vpg.C?sBBF?Fv"\¨xDH-H28&BRs%&}H_"SJBd됸D(̉Ty9S%''~W87]:>׆~?TzսJM;^5WUC+UػT8=ڟ1\\)W燫͆-{򻆄n9-Zi=`$\%^; uh/̃p{p/;<2½;61wރ;'Pi}o~K9x>S͚uU15dE]IS'ϮTKhEէ|feDjMW?b/M5-Y!yCxFSj4Nu\ckUJu[k#*8~/8V~xS~xT~q[_C9_JOhS~cǯ;ʯtawO!Iʯߞ~JW
/p
KWSWsKn%2{##ǿ=99#ǟ)P#J|?"?9#={
.4t/ēǐ@?_o!05l.EPKůi-!SR14:ӏLO;Ǹ˟ٟC{N5wu}=	?F'3-zhi>?Άgz
+|]eC J]6ݭl`zNC9K<	/a]g|cXk\JsNCڃ#~w
"'m9D^?'KhļÿLw-!904Kb{BӾwJRʌnHo
~o_9>
W&[{Z~vLɋwPNφ-˯J3ڟMlp7O_xku__US2?guO=oeBN}4#OPgh4i᷆rW]"a¿u7#dC֥
1It!7ޢ7;ҿ	t}[80&GO
W^
O%7\~Wv!:͉zk2}}s~z~"W^ߥ)hJ}O;ioOg_ O~O}Lg$'Y++!+a_O@d۽3]LW-Js|@Nڵqs	<VcCEټHG$5&[!x2{gI<+U-XAAZT)CBXHF cΙ{^C|s|ן|FR\߸Mgc}y=vmQ୿!~p@ez='X_q^Q:-1<='?6

e+>༙>7"LˏELƬrG.*_"CK|X~I>ǫWS^בH|N'{ s$VQ}vJ&o=1^T%l]$xaɌtM	'>%O/U%.%̮`$i2=fH/~j
࿍To\7^1)?

?/Xq/Z%_}@?GO~QfbBoa?MmQ3?U#/< K^77t}OY-tqNnp}GUE/m0O#>.	K_3}50eT7ZSnN
N)Q
nyf"j~n;-q[tR%2JZ\&n7[M,؉Ko1x7ݔւO`/:D$ :I' ^9[gi%C0N}_<n@@̚p- k|8=R7j/pD+.
J5g@Y/g"K= T$_rƉ1;~ {0۵W0υz,8o]"n:H:(1ޜ;=_O|t79n0zgr79gm,?τ~JcX5Ლ#KwMM(
e*0%|z7cpeԂs>9wp/RA#xqss2DM eALC^}LNeA(pL)lC߯v6'Q$ts"?^w3F"	v'y?A
M|gA$1YiniNYd1|;͈8[wxCgc䣳Þ:,ӿ B{])ˈ/^yi/;"EGi8n4/cQ ]FXf&=ݻ؂Q'Pq{8!T~*L]ϯf'%T'Mwi[_/Z&~K	b4PzPQ??~?㰇d=W3i4Yn,JzTl$쪨׉(i,
`INl*EVhd9/
Ht0hWN,qM;
[H*D䲊;!la3?КϦݲA2XvBw,+E؅Fk!k0.HRbJWy{,rό
kd0f3WMDJ,CD1aAd:lh ]5#
<-aILQv{Z0,,OM$Ԏ#s2fo[
wz~h{ H轧
2	0C ed$Йo.BT{>ڎA-0G81u`m(Q("RhR%/	E:5B1+$qROza/Hyf%R+FX%@+O:e"?*ʤiIթ/fju32q9!w"?Vܲ#
$V Z#hՇ?:
LWwWGZN`P^e4ĤL;ELK1~."\AHBrx.t%&~u[ralv&Zc,Q"C2wv,waW	CD*@-7F9O$.(	 [W&[rYn1 "BZm"R6^&I	V"h񛧲F*R<ytsd82GpXq?m//lI.3'u&D'i,Fd88U!Zܜ6w2spCW3|Ajk|xxCYPLwoR7e>SS0ೇ[Mڕ	ߦn~ˇ&UN2oklS5y[:|Pk9C!	D}ڇk	X~?ii5e<-<HTN}rR>o<[CWEDvJG,<(`@{ߖx	"ʅs{V{iD1_Yo| k/xwOܣ"k<Rn|zM/[	˫
:k|/OV]<|~w
埥m
.k_uV_"WE(}fw3<{_nܾMni/PK
    \               com/sun/jna/linux-armel/PK
   pX%-    )  com/sun/jna/linux-armel/libjnidispatch.soUT	 3f3fux         ]\TU?wtDAH-1
sTj٤[Iw
 lc[wZkm-۬ز-a(VTTTs3a ?s<9y9qϽune$1/0X%,lNa,꒘mTrSR>V$5bk5JW"ș/@2-n*ba(+ee+bOuv/)ƌ3p	K(&UYc&[,S
5E	Knd6{-߲V14ɫ_6*Wf)&{4ɱvFjR[2s6!v[ĘLɬuKޱ;fCn9l]}ɶ1˸<̺req<Om> `ϋ 9 < p=PAJ?q)+N^
(5r:op[mTTj :@@p?``+w !N1mB'ty <3i3<Y _E@@2~{xw  <׹3?1}޷د+ħlu~uN/$xWGc}3ꊹ7δ=vǨöhoGםkWߌ{bb~{EOoLky!9Wt&e׮rQol?n߾[S:I v3ްnS'2;O{^A}cɡOfHZ	W!=oM95Nݑz]묂z|֋Oy_Zu_\m4]rn7*G'|y/$7.8k7>i-o]^ߛrnhx}ҷ]vt!ڷo{+jیYM\Coy寜pvNy/:7~%[xe}ɷ>xZK3tWuY[oL^c}{*|7O_2Njx_~ns_J{gt휹3?9s~{_8N3Ͼpת-2l<9ݽnu\u
s?~uEا2^fꉷ~7źߗ-S-y7>ؾ*bclZyȞ0& B6!y~tǅgN(<[ ѯbOO.}:Jw]|?Eӏ/hku}Ko?]?sBlh|o|W)2A>J.ݺtt_9A(B0>C
}.Su,4>Z'FݳSoO=U_~N*]y?ɷTx {PW'ѥV_<7D8[CJ?CIU9{4c^x<9IOk}#	lO=!?M@gk^$۪ğ)w$_bZ3$Iɗ<=?3' }b,?!O.׈A:XZsYKU'p2K=톞_ó0_FVG|k+CމR܀6R	/7&>GA}pQ?B}Q+Q`}!AG{-?\KTle,x%ӑ}4˿(W 7xNXws<{ӷB%A}py<(V'ƚxK#ת74*
O	Z#S}BH"O;Š3=!~:VQ䄠} _S}+}|#x;pLa@G~-A{6Bݟy먟,!?+>̯wyG.
~Yߠ
pkT^i7ΓlPz<g-
Cy,X@P;lP;пvfOH_lQ'7hn<' fȇ=mS00 ;C&.t[յ+Y ba<~3̭J8!
d$EξB`
=BM:yRߧ9㷀C࿘waCϧQ?]Zsx7Q&;?d:~4\`m
mI,
:~߸6 .^|pI4	8`yD](ohON	H߰#>Ơ 
?wF| ]Hn>oҠC/	B{1ʓrR3쩼)X/Au\|x
A 3j4ُC,fokP=J}nV\רk-ÊU+\],YEūoX^*^U+s
/-V7/t1p
'[vrW1[Q\k5+*VquiJ,tcիYwebV0gHpY<'Y\|k+^Yh|[Y2b/U*t旡IxaMkbKJK/(5ؕ#~ws/[jE>EOqS᪕7.[/+-~|n*AruAb&!*ĵ\QiN"*ZW\8Ef..+Kg^RJ%P
/Y\]/\R*V/]UVTb]ql|؀ח2H]ʥF@Y|tz
y^>yiUkx*pe=V #Ռk<2UX\JԸ{J`F7Z^4^RyPV䗭Yʂ|M7ufE&
XdLUE.S>E6:aH&
ER*<TeIr[)*UА*+aʢ%V\eVItb7s"֜y?K%eKyK+K"$F/\6d<u[åTåTåTåTåTåTs
nit,)WΟi#1\6e5gͲelHy&r
ݵDQPjuD\^9!(![,(^jHkl+ʆUzpJ/a^6FVF#Nꪡ;:de]U,Z6`%&VVƽ7W@xy|PaHPL.
.qtjjup}ޥ%Ņ.[yWfa|bd94JpʫVmHt2g$oeJm"U	JVBպ!_9x:DIؕ86S8d|J]%K\iFIQz8Yq.eu1	R,jVU+C.2eNj2b	t3~W]+֬\Qp`	fcٺ2L".^[dH|2Y_b3̒2W9A[XHEj$+(Aʛy(0[A*tωt"W˔ tfjvY`
,,jU[L-[IN|h˨VYYYat"ZHSqge3V+Uu`y-ܰrMU+עkο+._^TΗ{J\QBףₕk7%5+˝jGZ³Vu/.*p2uJӂQ:5KW. [vy9s4?&?=J{lj}zB~OFO=wu/NZ:)-^y6>qd8cpl8mgqqǹ;8.⸔c'9J8币F=pvwpvp^qc/]p|>9wMrl88pq
ǩ[9N8mgrq6vs88cEp\ʱcq%UWs\qǍ7qḅmrxms=wp}{r'01ɐ ȗp#lC>33;Q~CxOx4O4cQ~±(?amǡǣwwyǣ'A.'Q	(?(?D?$0E?)?a4?´=x*i§		O?3aSag	'|6쟰Ox&9³`1'|	_'|Ű	Ox6?KQ.یd{ٝFmy7yM}׿MUK.!\*pB8Sg4!*p±B(|BK{!.w	BU&! p^/]BT	<!#piB8U'$!/cQLп>,~!WBx![pnO?O?O?O?7g͚q0v{p$z%gd6{:OvYxkoiK}7c]z?siIc*
cQ
_Ŗ-Vw7|VD1b`^f9$K2;<M͛^/wr~R8~_eqmh3scIQ_
@??IKkyIl`yO4A;)/YkeOIɔ@P7@x
qOX
,	Q_f9ڮG1f<BLiVvGzcyRe㪶 =o/	11ďɔNɋӉyyP3Z [l_fh8V6YdYܐ6nc1}('KkfZ#v&<*_{HYib0hݪ&-['Yu$҇Q"z/IFZ;$?/:VCTI
Sk?h,l)llZSr*i
SJO\^~]$CƔ0SzI$*q$0rCn>2}6c=zW6c,q##hz
DkclOgxǹ##0hXF/ߘٶٖ Yk)G_>7A?MZ=Jj6LzhP-ƢVh}81G,&Mw`ߝmS<-5kMck*2	mMq_5M(SF>:].M
Kfƶl]=Ge/!ō<0΢?w2Q;3 /Y3N&z%F6jZkdFxP:ev"ڲGO}Z(M->kmI~Sc2+Wڠx@_9ɬ?A#dќi.M\iX&#	;{v܀25Ȯl꘮&󙺾K+WX.w2>A4麴Fσs>͛q0}:<^g*.*m㟬C/JPhcF)JcBF[=vu'xgZrt	ץ8ɞk<m3}윭b}/,ϟ`+[З'}'a|ߎ_/m\2>?c䨡Y'Q?HQ)ٜ(6Y(?c9~/P齽-ioo86Z6ON O
od#^^yֻ0鄽Gj2o+
:k,Oә:nz0H _:@x4!lF88^=ΙJ~1E*}(Zx&܃ڲ"T!Cy5?%|>Sǥ/]=Ib{ 3or3&MgfQ)m^е5gfy̴ze^٣~^@$62:Lnߨ1oy'AF>^F1YFA=5ȌlTOď6{uׄt7zHҵ׎|5U Su,Pƣ|ΛN5`|::iPT)hD~(70/8%1i`?MCiCC{1-ߡ
C{-s,-ChпƂz 4
;
64jj10JeZuyIfߣr߻=Vv}g
Zbj?l=g0C%ϣ`+wKFŝ6{;2 .A'm~IFYվO	՝,n}i__GN:Y_עu6߮b1ԇ
loļta
ۿ2[I/P;(R6^ 8qPO\ƔBJIG3P>sJ{@KxIC!xc,xx<>oP:>a쀎_c\x fFտ(oR];<!Qۋ}?r(vMZ̷MvsoO@6%chIAPQ3H&S?	Q,3B
Xx@Yj'VKiá#7nen߷Q61lvjTcl]҃}9qu{}܄qRI~2
尠,~gSi^4{>aW>?S~aWBW~/B_@R>H]ͿmS^C|x4͙^cѻK%-}&NrV!_odJdj%A0X#
Db%$2 87yR< T瘟PFz$/
$Fy{0F>n\g884&U
J)X2ϐ͠e4$Avu=7ЅO|㩍<mRJ5dJonPږ^y#g~d1YV)>~a;vz2vZ(/ySf^
ݣ5ڍZMǙPQ?`2E~37>MؿicOU*#|ߠ]jSڥ>gqrlvd#%;ys^I>0>a'?Gݓ|ߧ܏umbOj=
i=B}M:-ԛ8^jvhPlkGz/*9C~"=y*`(~n}%eOL[CIp2p|fĽeihק\3!v!39W5~]
~m?D/%]]֓ҏ~(Z;|t@΢r^~~%#WeR?W~w|iɩ:c(n`iC\^h_Ch0zsOoHڃ:+ć86Y"1o2/if/kc~
e'u{=̂`"|a0ZO?ă-;xUН>*#Gר'PoѴIE^k}66+B?X>:AGH}ZR;a;%wп%EDr8}gD6|d3F,e}CqHk!SV7zP!h1{=pz֢^&a&B]E}6cj7ymMfUW1%ʩM]M2Y(~*VƪBobʼe3mbUK@FkA>?"2T?r{
z#50ȿ:
>O߅
~2jUK
vLGZfYwRF#:
Bx9Esڂ !uB}Zj{25F={1Yk/1Dh
\Mz,V  b'>	A2Me*|v">?P~O	S]:#2#}[<V~q:|ruXXXwƱrzs=O6RWJlb^ޜ+I>mmK7fx6fƼߢ%ݿ,AbC;5gc3i_X{Mf1iR㣵ȪMV([~wBƅ/"eQLTиseWX$u܆ĩorgʓ}6˕҆nQֺn'(nfKeV}/]3:nW_Wa8};2A04.Χ](CP h._`QT2TJ/u.haoi{*CcKlZ|㙬ֻ=oiOAyZc$6l>6 
j͉xe1q*i9ybb,g2.8v=瘷^O#[
$2:x9h?:<
!7vhN&eM$)d:vy޿8K	DBotmB*қBw{Nz}P?޷W:i_=	]/;L~<=B~UzVf&<GYO2ag*Q
goϷCȷVow_Q~c8?^Є$=0R\404&!m}tes|gcPQ_[u*},o?S=9V|ڋBکaꫨ={Ny	zm5<U `G$)LyONVb<١UtϦ[]\.Fd5\/}i_p]qnwG;Q-7܈8)C!^/Itfjl{P\ߩOWz+J_4了&uG}Vwt#y2к|
$lsf5oGt&Y0&2epywuoz+g>m<JyQt *BN?=V02%yŏPzVXKc3Mi{q Y챡=Qwjo5)oe
0ZٳYUJBnߚ2+eRjzPfh@)a{'Y0xiX&P\9K}	=M6V j ݀ pvN[	 8t
@_s跀
狹ҡir9ǎ6]~_>"yۥ覺 =&s):n 0`\kjQ.]^/'q+73zo_z0mXzB0EciКAFahcAR0v mh+es՘T[WwX5sZ
-|'V+m`AwJ [%:t`^-%rG{@V#1!Rb9$-
%jnpgE3ODy<o2?ui DߝlL=LG'p~~B; 3;'8~6KC3GȿJW~f@Sq;-Awt}+\E#)k4C$	ew+4i݀n!iYk]	9N8m닱٨$Л3YΉS׋h}2qvGgiָ_zxueNwZzXUf@Ө3ht|9
=PTeKȟ~9Y*h!cs_<&Mf`neݎ4,IYWeE>Z[or×ulܶf9
}S7T5)i>)WjrS޸n[haۻrNzY\:@ԌeZ/6gC1ߧO_!=U6ѵuL:F=WwVD-*g}|ݡ;{fM.݇4_㠯}ǡ9ug6|sϽϝ;K~(&Ռ9Uق,}-w M7s%(gh-5^Q/gMqv^	rR'5cMڛ:DQ7R7L31C:+҆384nnuusP7#n>B 0u-Sb0Vǌޭ	~39v 3O?
x{m <x4\} n4 u k p_LT	!|[_{.ӻx<N*J5$sIsg-9+7!wr&gNW{,3xdvf;%..vz҇YT6VCBb\CS|gJ8rD:KG1,9kE!vH1k7%%1khZA 2|`>h|Y}DZ:t tNmUT@p<{Ai3:ޗi?9ׁ^G獴5SOW3O6:
~je|eτ:9/Ef-kF&Cx.c025{\N?wdҜZExrI'=sh]ՙg 2`<k178PA2.阷>UOC|~hF	q[bL}?[-s#0?ll6+y:OØTd"u?cys[xIK}_Bb :p-`6c4``)`<琍x .  B*ޏT`lܢyN-.#FeƬwo6ʟ
zyLi4*ڥ}
[y])6UxG]z@><NDG~)NLB[|uݕL}ffꕲiY]}euh*OdLoGЗY)|
DMv/XNXY\A\eZf[(/4uN-|s*} 6TR;b7ec#[zl"G{kL.ΫٻzY;L&/sm2WZJ5
e&!
W%x*Jk0y&K\Z4n!ӆ+vB^:iʅlh7U\mEOZ#;Jۉ|9*AԆ3+\1vC{"h*aDwwJ:ykuiB0,.DNr0yȫ$L^EK\,jWr~7L^laC^b^}v'Sw;7tG;+mUeV&YDl~NԱԪΙ~A~JPRދWWf5˕%ʘJ1ziHwͩQy~YrWL0_{Ϧt$72ktzc>QlB**-M
<V|oncP?{0?+''N&$'NH#IgN,t^HrejsCIl2qwh.~|ffl}sҮwg}wMcn^Yݓ_2tf/wZw^p:cT
l{Yl'pٜzeoT3)G@~:hTVn8 tvp#`>и
:D2^>]1h;
Ϡ:K/jWYQt>H5f(j|~iVq}* I6V:g\f,r%<o\P}~{$ۤZ3>WìD9sAʇmzeoB\PE#({ϪchQ)jPxU>_eN7e+uThD>E1zJytKeJgL阻^mʾǯm];)iCui3lәE͓HKָ(<Ǆ$x/AlxQ:J6VzќFYGI9 mŷ;w^1 sNBi*|J6LiNGg
B\5+zB.	\C='t
m@ks,)c
<@ԡ
У>S|Ȣ#gԟ#>>Q|9m4s{ͲKumR_w:揂=gcq35QV&7
#M$R3bISiʧ5(G)B:rTj}.Ƈ]:#
Uj`{
`]kK +
,g m%+}.Zf`vL3 ڀ%99>߯·
il   uE|p%r@6f0d.֭8^ qYL}f!yMn!d*kSÝ537:G9B8[g
!,	yw_oPΓtW6QρoFh-~]fz{Y(8/0A'Qto!3#?Ck.R|`C>"zL<+@s_꙱X>y+캮GW<,S<ܴ O=&J'BIgZfLmBq,8[:r?N2Cr\.L[/iLaƂP~9wu}e6EǓ_'TWncoQ0^m5c=?c-Ibg<Beġ-I̼Xc&?O~|g7Qg_++S{'8=悓(qXr}%:}J<x.L]u@1'~9FaKik=Ѹ1T1'MyG:CbS)fGxN)_ygP~torFV9tVqKߗ"{H_Vu4h+.Gqݿ%}:A/_ˡzy	:el?SC_6_ X`3S﨡uyn99|FAUK~ cڒY؃!OUNQ3нt5Q78m~{c/4u{ `q ޥVEƣǚz$=^c݃k^u~/;;~/{q7}<ls '\cQlrNgqξ:鍬3쫮l߯ؒpW]:k
8tu
:{8t:@7E
4
 GgtVYqat/,8tfΜ'XS%_,t68t&
	RFb-`;YW
Y~m.,^ئ'Ɏ9VN>jecwCw=''[I}{N/EwZ2D>N"ZRy%{@\F˖`X+FV{M޹Z҉8L=G?Si-B}=#k}RMmfЦtMaIM?/T@/#| *
"S~:o^mCBAl#hV@`bK?X%#8D~%~}?\#o"}4(N9~?ً~:2~/Yt]1/޶::8t=ήtvq,{:+nR	O.+
u口TRCg:3:;8tfҠ$V؆m:{3:<ΈA7m@)I6#,GO*fўft$	:	:h;V<QN['5M7ݬTO[UقA;\W	fQD
Ww7%f867]WٯqjLL0Pӡ=r֕bNoOWAUw vwioA=33+F|m5
>;яC?/HO]\qtNŶ#R nn+oP7zin*uzwA7S^utH4'ʤz{dO] `1Qbm o,~W?Y*gh
z^x\AGy_Ｔ#6ڟPuG!{#j6GivGn!)njݮ;V"l/۞	e-cˎ@;AbEJS/WmOhZFsutmm4Cm0\y=im2ky pI,/Sp=u~YOSӧFS\[\`~,P{BA}=vEn	z`]imnRC`o4m:Z]-=ۺbZ**,89 =eE"r pdtsv "CwyژoBQ1`wOvcvP	B;MtI$;}uwx'tititit_*.šc|OU]1m52=wW8yGO?aw
g2u6=H*^DK@lm`d@Xm}`GlCTOSG>~}&
X{ȾOGfZmh
@,~a`
	+ZM:_ۄ4l^0_꦳qe\&PWFR))g9A2՗H,sLQ_姲wBYϙ:Os+t8?~Ҡ{=X	>ᜋCjK}#A> ?:zzOMG/}0vDQ,t6ؖFؚ1|3km＇Vntsu#r*fN7Ob[
$+""Mh[ж E_&G&]͹{!{'pRR Y\nl׍Y7S'́Cf'tP^ aX@*ݼ__X?lF7t06A7MA^u eXp?nnA7ǡPЍcݐo(nЁ@ 	xtkӖzoު-hj1rw-(猡QxE/
(KWxs1+x鎑N~Uy1:Tt5^WC
Skwg a}vk`;R&dťs_]lozv4}!#/1&qޏ,ql=Rݚ.:K{?6e?rt_6x7A	t6,u
go>!{@}V}I:D޻Խ`Ar wp&l|W4HsAl(Y< reiFm#MˊfbM6NJL% sQK0@ Y-`=BiZPBIBG"kR>2ttז<xgH]dx y)##(E4&G(o
9*JaKBYxZ}^(٤3C77}9o(lz݉4Hӈ4#LC4`=x'F`;&Z3axAw0J4FW#ax v^R̋∮tg`\0!>P}@vqY~ulGt1 ]6:LlBאdUGg%tDB|xU46A[߆@%h&f:m^ jо1D)Ѿx?9vT>Y>|~>^!i;ixٽ7(NėWɵѬM*ʓzv#m8{0
4;OkwOj27#*3~NZݎ}Zň9ƳgzƳG{8ٮTE̬_;1Lv]V|~(݅=ֹkze;yۋ-vs-Dmc壘O7}GqJ{uu72B{
&5%~q7٠| 
_GxM}$8Bݽt8m,94}ۧ{qts;uqo"mGv]nפ{q"
qUg&\ I9ŵ"l]ܣt]܃%#.Yw?6qf]\-wdb|dzhܝ
q=m@ohq{uq hC\.΅8q+ר[WJ]\>~IޜC\.n}]9֌4]ܥq^)b~.X]Gߞ,L;q><tq)^):tqS*؅]Ɉmۦ8{q
Xiqn]\4?8TR]_(6˹)Z0o5$Uvv f%
 1#eE70X`$R@%

sA.٣%h`b2'*]' !M5`'>aP1pF
c lnN 8(c	NX]׌% n<\M}xv_cwfBY+[rc]<><nԢoo]k'0C0o:ppp:0 }W?c%Y^kT
Yw>)ݣq}1ʝZh0eACc$Ѥ%lv_+Lkof^Z~.)rV2}G<z_ωo(9M1Sh%*wwCҵMGk	M:1j3tl٦7Dߝ=41V[>Vϲr]X̺Wցt',Y#ʝKYt')<,H(h!';m~Fk|N.}À!J37Y~]d[~DTmt2JC-LN6j
2N	g?cŪܯ⬑͠޵q;|W6UD,KefiIsN6^uAìYm2`LG^a=aL=zGIwj^
*y,y@сr./Ҕ
4Mލ3Џ]sX;@BC9
}Y{{TƐo<O@Bho?F_Kx:ˣ>BY~JJDkZF=%xVT8M@ﾗg.[־oyzk|ēaO[ʢP<b:'C`pbS϶z:;nVp-ykwK;qI}ti4bK+=+ݤڸɍU%&:Ѹ@>%zV.\S"5"E6/J^0/c^];^Dsh"'XԔaxYd@0/ax%4/	YL00FE4?iv^?oIe,vN:#/G|x?UD9Y1V[3|)d{;B*GPW0͟IO/D1\N+|̺8
/6@(-/O&hTZhPL_}jU5L
)^4OOul7!gk٠-F~˯M21>Yx"ȝtgh] ut.w[MoVA)*V4ؔuQ?>?#X7QC4}QH;pχwskEMf"fv-A&vr$;BmPµVfԏ׮;B߆퟇hu9!/߄rf9oфFy%n/e #}ι}<.}<|Os"ЛA菤#ǂ~!;&@"gD7~f}1H_3
٠uBp'ޒ,[<&67׃<z?K(w4X
̫ڽ)F8p	x
-qg g '%'v41Up{*/݊t2,?G:v>4)Hi*iByy.c
9H4bcAOoIޓ<tVm 3U{ [H@a$#{4S-щ'>4vs&t`pFVԾQcـUݬXdK@eK3L]/
,?XCgN6ண5< Qu``
>
uUX-[L6Ȉ7(E0V52}%}ŘklZc>gl׌ :8Ҁ3hl`)֯.@ƶ}5Rz@`ari]!18~/x^ǧw}c`Ee,vZ_N | laiToVFbF_Cwxe)1=gG.J8(4 v h,Pգk Ҧ 2Nmq".
a+~r %h
,.'Sx6>0xBf`m`nA9%8~Eh;6OxgD	Ѡ ogٴvXO?-0ƾal8gPS\M\ns,wy~7nn܊4q$2mNBB>?oi5kJXFOC@~A՛Cϋ@=[(^Qo@$}8FOM7O\@oR9}7QYo	Q,QzINhhx/}V9[: :O~F5;??ҡ_{K)7Ȑn+/F;ZC{@ 1r֡SjZ9rC8<ߢ<&:Cï"la<I	ӷ<<L
t0}˫p-?Eg%xΓxxxt;yg0}Wp7ӷ:xΓz<\KgBxާh;Jڋa:Obߒy?wVRx0}g%['6$Y<H<\Ha韇%5$n!"?_I"\?y<?7w>ôaVr /qۜڱWbݶmo8;ef9d1g^ZcUօi:[yrgݓO
}g<ch!ki4\ٳQr:&w2#}-A݋D{Tͪ3 $7F!Yv2[M}V7;q1%{<Mtߣ0{ْAQ3_
 kәbA7{?vCC6;۬g/7|ѲYٿWOrCo-ӷ@X7ӷYZt@I]K+bozK \	<}̗f7ߠ|^NeܳwK3w o9Qv̪5u%Mq{Qvnqy\^,wnA^263l[e}9GK,i*bL?
U<{@ޠ=V!
ާIluIWpdRFrQ݋iS^PE
Ce	&N{8ݱ_{&=@gJe}E{C?'YmSէ|'Kuz';PSl|Co3& v8')0FQ:*<ߠ76G9>6GejTw{8Z+b鎴"6+ݔw,juXn'}pY6&#&H$[̲lUӈ.+Gw,M\\lFqZ7*{*-yjWj4ulS+?UL6ȯMϣf6vdg ߉Uvy6.WzXELA{$K~!}D~KoۻoH}QNE7Ҩt>o&}M-f>j@KWPlxZ*ё7H+g*hн,%\o+taDy)Yǅw7?+ӸM퐾{*ZlQÉ䇰r炶Awo(~kh5_.Wy[LL_ڂuSh,N/GˎOT| 'dfyE寝ǸooLQmTJ}c)>d7ҷPFy=`wz3!]'Ú9Тv*h'Ft8^swn<wڪK:p77K6<t{`HWU~]SP8Qd[
ZV[?D	[
UΏIoBtaD
5xzrsSڼmNwGO⍺~CR%{ 89O7Z9cP6|fp{C&ѽ(TFo!N۩;wYQJsBG=^xtV43xhݣ~,]{T^]T8籨~{`Ws*gl|T.%AױG}Y;/T=Kkz`WLi96b:[xvtsxPc`;ٸ`g8Z{
kpӾЏ:thճ);M
FKrS	-cQKSQtPy7{CqI;Qc!j/{fPv-l>/J6vw:מ!عl.j@K)mpQRM A!&A\H
W0X{RkhZJ=!=ȼZkg|>k^k볞yZϸ~wo)
.+W֊Vu\Au!uް%j!?/IGQB0}Y(2I_)DY96h >u_P+h_)뽧h/^3(Dv8~kO
eoCk`Ot ^@g0hnx~9Z97_ SB<5
2T <`ޘGgy|*}pj-v7}	nA.5}kcើLٶW{iʱʹ:`p=c*@hbڭD{7&n[OʼH=;)ȳTQn'_Ru&RvZomsx/;/i4
WRshO=ΣyJ~>|%`y6Mڦ<~#]gb]R^)$23fԽO)BPם	ugHs'>'/N}1"ƞs<.S!Ȳ~T!dY~\y4
ee<úm9*̝2~'>"nx:G=]./HMyO0BmQۃm\fm7,,qþʹtg<5pm
(w7
w?ܷTV}s^kW~ZKJ.f3z~Ps^֣~ơ_X+Gs&14ǷGeOXoX\ۭ}9\&kf|K9g"~g!?}Ї?PoSWPG5N!Hb,w')wr@$l;uXlq{Iwz }aw{NI9B;.qG:[qdoo<<a
y.jO"ȧ'3Mr
>{
g9n.=GA>%<yR|-}~$u?r
qo9ms|wΐG+:/>(m`y:O&s
C?uxި{~(f/?7~#[2[.?W^9x(sM6Ϸׅ OD}C>aO

0xN%rηkXxSp#uVEy|JW_F<K1N5Twz5v.XM۱͵hT9_KŨ#rУ=r]NsV)R.@Z˒_fJr{="xpx[݈l>EEr.mcƷ;=zRs8ZPd6Dl{0M&۟rQt[^RkC#/g_t)Xe[3lc~8q}H"]xL½B;}݃y=/T"ϼ
qzŇ>;O}.pm=呖wIcbb9]?{:\-ռ8dR)ovH7rׇ_oWf5z
$Pջ,i_ӛ#(~j/fFuJ>ծܮߩ5`~g֫؁\{Tm.?mQw"+uk;`^ag:Ug^ޣo}Ő8OV:JʋH3\=/*W3uJH7reR/>Pgߤ{u8u\kEuV7ȵxS(ڿU<MEa]u.#nm9?Q7M^'1ij<?(??탵_q7wXޣesGߑo!qGkG9ΣAh7?ړU
m=:mfy%S3zk)3˳m#=ܕmѿ MI8OH
YکD-oTz&'36gM@7@vmsVs w%T{{q3QWNZ_j8wgH7d	%T\9Rĕ9гG ?e1?껶9sԅ1Xi.
FzfHm/?8qcGWwOs=6gORW/}
mPwFOؑ{Ɨ=;9T]ۆ5l]03\PrmL7FXz<ԑw~tw৊jYSmjЉ꟒F ?mK=s9*u3KHɤ?+ F; ȵUC?R[%F/q	Տx%#0F	mغU}]&O
^뗨Spཎ86ʢpgÝea?qs1bapA<ve{rj(<o:6((v96Jy3o7i\KCI|1u}*JME[@$uw8iG0~';ݠ\
կ	1_b jï
0\/5Y]8xҥjqh8#1GCށO(2MsyZ(e.+|^\ۤx2Ybz<Z)8~	eBɍް0뭟
q*mVp]tu{3rb)<f r/<Z=b>A{d*d*}v=¼
Xx9A%lƘl6)yZCF`-uH~u8|
'^:Y\kl321
Ȼy°@s9R UeMҠN-O]9kcõ A%6cN!KC1'~C5Կ}[{!E)O,JMپ*vtd})#ze1䏮+':Mﴍ"0.9X~踰#`Iâk>wu%xIȯw]zt
)Ks7H=wQ
y<w2~J#=㔊y(ǡ]hlxzSl9.{@/➵(*b@G{%~Ry< @lC\_l,w

Iˍ$ԹᑢmE"|8W>;䝆J>6^B&)qqFe͊8G_@wwqHѣ6Yc/b iKr蠥j \Ol>#+!:s%escVN#$A!eO
Ft$>W؈
7;n&L}Ҭ>
;1xsH2Zv5Ƀ=@\\|v@1`51(Nk;eTQBHoO8"+9{'Yư:CM[Ew}gwMN98sPGWvJ(L+4~!/M!<\Lt$GR%F8
臛97eٷσhԯA@H;ynX]v}/#`ssQٶ=hnCX!qu'	re[<c	GRz6d=:mv,Dkd=Z{1'F>=JYjnFySUEa
}ڞXOG9~@w!dEҢ!m+n8GnsPͿg烶m>=0Yf0;dOWdV|ܯQOCH[dS,8-Oޥ4iW^4yBD'vgŒ0ښ/ppܧOx!uE*{9Nd"KRmc S'ɿVs .#܋HwH;FG]#q~!pUV{ވO7~:]h:AMڿ
Yo=fMXEh]H;ֿL7x_2yxyxq q˪ CErlDR?B&.CJwVP*\zKu<{g?>hƋ|F,yYS2"%* oӭ*ÔA.}ц֧x/Z,kC8x:m:0y#ũnavݲm{ץ?-aũuf	r<xEȣ,	a;Kr`Di\/6I7S]:`\q|ypQŹ7Oцr?o;3&δVp.*|y=EK.*L
Jmv!"vՖܛ$9Srf&װ哺M̍$t=m͌-ٱ(ߴ6K<_Kevj~0^Dk^!׏u*\>)0Zn6g:l឴jnms5|d`n3B57#BO]PB]Gk)DQFi<ȋ
ǥJ5O\
~|&,#c)`'HZAچH<s?)/,$\,kS.ju>ōOyqc[/n,@>okJZg(E|>_]\;چw-ϽH[zWyt|Ka@y:8csZީy>]cuC
w0oO/zim+"m*,M\j=0CQg)`h[󅔳Aۃ-9觯"ifhS^ih^fK>F-KS+Nqak!J9y~/Mݗ523-N]Z6+ǡ|nK>x梘.YEhiq~_ǒ52DwP[0+vs͟muǾqCqhE|=k]R	\,-A kz֤q,Ǉ8͓ŘpirD;t
ɐ?90o÷Ήh[P19啕G\C"	˭yr(PffSzn'\kR~)xOdӦ1[9[9j9-A9G0y!|O3J;XOUg+δ\1=޲B|;>$x~~gn9wْ/HOHчf9'?ި*'Mв_0ۅ_Ԗ<ygppk~M{]R-Оx2OۢύELгWQ8ДA-9r#e!w?ra
&uyk Ls"eQdb)5Iڦ]P(9ݒ
;Nv9Q}tmrEAL#Z,K¼Ǳk$ہmIUy gf^fY?~z\utpS?O2رb\@7mCT=9}9\\-@. w27n/. w!zpo-;_Cn<ܻPnڶ,q\^кsȌ=\rFfٷF ޺ֿPqKO(,'{3iNC ߎ0~O?@/um*qBPEk][G?qMKlznKyr{j_w?=geYEu:tvd)L:Z,!uK:oSj.nƫJZTX"j;U*dF-|YkԪ̬o>G=oݤO{]ӝ?7D=duEuۨruE+u{rteC" syF^s`{t3[$*zĨ;/Nt|L
YҋseU\#=
q*98ԃ>]ִY;$̧n|$oSou}\Q╔qW%vv/=7EشY:G
1riHCt&/oH2=4ʙP:	?!̬u3:cvF)|{j,)3JdҮ|ȍRxϸ~Dv̾8q:y3(RbԶ67%[<ʽ(.shѿg'Mĳ_{<wMߣx)j|P/RLyF)ɿ壭c
n[ц=o돹EC܆ɱqcZEN?Cp}Tʡ˫8pcjF.gyGY5_G6ۨ;LuXު$NM- g9ޚ?D?:ѯc-9!gHBs|]?O\Ao(ۦj˗핽--ùqv|ZrO/q
@kqmh4LOTJ(Ϝ1LAuF
<կ_[:Ae`}?F\c_:B_}7.~#/ugpGt*
uT F|5|ҊOq2!Q&l)`]㎂ڣ-f-
^vE
l<~s>6<x>3p/#ytC3 oqrц]S
MާFA_oE|NWߥNwx@K?%пpG[~`Cc⭘OµV2יHOHe]}:VS!eԡ{e6ufCP{%iukQߵV:Dݎ[e]EI]DYRs
S~}jFPw!fApm/{=IvA
ܮr2K-Qg	Ꮄ	\@nɯ­|MW>/EDQ(dsgsr+jPJ·$+;w0.Gy#)KX\z
QmB<|Lm+O)Iu,it,;&}44L]t-V')ݔR~igTF׎9ysz<57vw(UJ~%uʾ0Y`W<}d	_PMT ,Wʕ,~r}RkJ\2ױЗ16:$~X:^<8PQ:}v	$8éKolQ^QHցE9&u(JVb@8?q8#}2˪7;C
<pP CmGQg9_cJAVЦDO #)J[Wgq^
˟/XvWϻ fI 5Ky.556{!Nr-uMa+BZv]ѐ+HeiyuǨ;%3 <s/w.y 
ĉK/X ;XP?pA,1_z[2]2L$m@ߝ!'!7&]C	5ߤ?uC1 ?Qъqyj-ܛp]kE2hi  
ōNeGlڈ܅wyk/-	8yHU(7%'Vn eH&Zgzu0/tx帺PWogZBwy
ZJ7^dvsReҎoRr
WwxpVCwߘSr!\'7CJCzus'hݡ{-H=hcA~I=,ߨ;4s`vf_]YzК>RAZ	h ipv3_ ?Y;7y??8wO_YïpE:c	\9.,>:/Qz3V?n+Nm4V(RG8NǾʶ5ԕkɭR8{F5Q/&v0<q}G?;>IK=]g8Oڭgzg&8Q1R	N'c1ypۅ2L6;4&	ΨN_ڲ.&`}䇖&jD[+7t,?l@Bi,V_06eiITǖcn/$68D~I;"RbP-B5&ytqu]e/M*{7{0FA]=^}mQ<Z=pi0
=o}p
D߰h'rsKw+僵G<l1ObN![c'&,L)5qWr\Ijl֪Macj&'ZSn_M|¥v%&]ڴٽsZef9%洒ՖK>4g
0,Z|#	58+U.+19O?Z焖6;8Etu6u6(r۬u3Y7>7yKO҅)PBZ=Zc^cx%q;J5OO3v^dvĬS''>wJ}Syb)<qs<]gIS'=kLzט?mEEGZvƔ3OKV4w
36;dF79Is߄ў8FGRw+6e'#mXX1V	9-N=f{12c)s9V+zJa^ٙP:w_ہ6_Zy̱~)ǵ&k1~O_VWMMN4.DZ16;_я?HhM}p<ȳ~q;c=nm,{Ryav0'a\|JSq~Iŷp3LRƄ]C%Yn3vNikQAX+עx&ZE}֢L%0VCU|o<O~f|NR7>N
8ACTͅg­~pny$a!+p]πC7N1f=4"?2DSXwT2I އ|^wm{pUp
07Sr-6<+ɨICǍo*Z=Eo{hL>А$F,Z@ڄAP)q{CHtɓ5n|%D<}H(<":<Z*G+Lp	
peu#kWȏ@kq#!{YS-(%
 thso*(RoIWKg<KD<cO^%-^hC0f{{
GM<Mݻޓ࿝`Fy1Ń$^ CyHWKW!=T\
u8Nf׏_?׏!_%\dU'i+%gܮw}.;o}|ޕ<smv Qa#c7ɵG{puL{0[	XlOC^BQ_h}JT7߃ yb6Y}q!k庮X}wo
uAY* )[ݸ-/ 'Q?C9/b߆|Zli-QiKcH<,?ӹ̐e'N7jGYL-KpoޔR'={S:<8wOA!53K
Z#ԩ,r@\(oF>]~0)ǿ1aY^ۉ/J%=L뤝ŗoϘ9
~d.ͺ4g齥m1wnj\ܽp̔s5e_hCObnXؾ$mޖv%qQxܛT6%%Hݏ2EFKݦKGs-6l|6i?mmZnw+|]g>l=O7eGɾ=|Y'wmGC
|~ׯ[<^=+qo,zܽz޵hg_]``59xo
{{F9*=ym?1ke9[:]Ӷ[.z/YFYӻ>uYCoζA]`)gv6i+l@ͣKǳeV{F !!:3w9{T(b=|*}ml(6z?-]vI|[{bmLx];x7j_瞇 NNk)돨c}=xօ:r)l2A->`91/P\ܬ#.a`P"TKr6]h'T=z-k?z(z{aBx1aVW{,	}}y9z019Cx!J:!j|d: >[upL)ϹYօ2*Xگl(9mxǵxv5k36?E֯]c{Ǯ$2F,׈CAϤeVGlv565vaʞG.ep%Ǵ]{*;: ɊjjFJi35d]i(,c;Ur/Ƚ[{?F#˹si,3mCnכ]RE=\Gy8B/W>!k
g޹_P{oʵn1my|k﷫3
?OHk*{kow!B<g)ĜGޡr}qXZ5guﳤqCK]Kb9|V#%65q{aiG}i8N:=95pm,Klc$"yRv<H^\Ît8|4;zKg'oU)CVNVp,}?~so;9lGB:wagԞ Zk#sd=b3m<[_A་7v.J[Fgva6=olF)r4?B"f7?膷 'oǾxOeO*ڒsm /́/oSڛTt1i#|!#|Iu.7
W7Y!\?I<込J;*0Hy
wV(M3<=qÜr/\b ]O(xB @<{z?ݟ{:t=m<N@>7!nIP/|'mѧosCl'EM+(F
hAo,,Q3-!}4wK]z"P
n9-B'o|&76XQa~>m|['90u`BAK7r݋L;<S	SYۿxcLz`[Gi=vnhXgx><_	]U7bjUZ:C$_\?d;vw~Y!O^g<Iեl(7v9s_J%K}%M߉9j<iFv:yֺX^Kgї3,ڵ5N117
h
-3kT^Vt0LT϶+"Ni"
)g_qϽG6᎔!lq0_OQ~
Aq}g?"2Jϱ7O@`nh3Cr?_
|"Ɨ#g~e~K"RsѸ);[)ht]r'߰~&+υUDN8F~M}$f	!#l"Ef[ y=£_{S|]B;)OķҎ>iD'ڷˡ] edHvNa%Eݵ#>!=me0NYWпI,um>v OTR'xneZ^~d܏/vUMFO`_N}JIZmov+[Q.F=6iTW?"H{*O[1n}z߉5RwZAe[Tgl_Iz"uJi*$:噯}r]`-y3F KL~_܊X
x֌Ҷ8'3g8`̲^+0y"t85\MMs(M+1 Gys
Kz}gvOpYv|+Rk-9:eJ&h<FBWrL6.K();(r?'Z癯zhoJݿG'9ݰ[s=\wi}3!aoGEАgAKc1uTڤ*#7~(]:B(n~aҒmxJ}3o5>ơ4!Lx!eE<#F.Ϝپx:y\3%rc^H/ȚdޢxEӞ盙ۄK=xm/C2,ӈStE1!+rux2'_'EA.RN3 x|7d&QRSS#*}^[y/:9VLӍ=9U7v9YÀ"!m̀1H7\	C
:a!Q]a%i[âc{ };a7ólGa\@ccsڌ\ST <79gOPżTCάE]xƼTm
?+iw0KKS3@7j̅F呿Z$慭MաMŵvh<<	P0[<Gx>SF*KiTG9c&Vc\<O+qiBI0W%it4|Xc5@I)]uEЊH;zn9mR<- <y|$ׄ2tۗlMgv
'gOKY8$OQ_UsL̡Ke|$&$G|+jwL &^YRȻ96Ne;p1.INPXⲡ5/dƋW\smwwE'q>FrGN~W8W2p1;hG޲]+☺k}S ݟSEVP;fCm5cMx.UUp{B.M,i\8HGo!g]:<w+bȳ$?)LCppebNyPCÔz&.C=
~o7
~Q7#t90i1i7%)3q3\\Cw?q?Aq!my>O~_?	ܻ(*Jxfb]-ӼcxXHvO6swݼyt^=[@]lyW9{cTsT	$p6گ*[)[?
~o7
~O/;qL|(mS_~o7
~oϰe.1.b:YbOIE|E֢b楅Wi+dj+C*!j{M1"1F7xߋo❶M.S/#mqjiBǔǘV|ʘb_ƚ1mku|,Fwi_3Alߜd\_9g5OGh'bj'BHl+%|DpCWSߺ%)"u$yᎤϲИc9.
x=jEixx!sV'."j3exje:jE(m+h!\e[UT伮0%úF<."#&%^qя'}I$B{O2Ax'tH?}ٝݩD\ھϼmB\3nTܛ3[Shkљ̻Icڈ{W*ӥacƑe2VoCx~;m~;|04;`e-xb D]h-
buvK^
Pyk/?0G}{djtx=h˴kYv(Ob5+תo@LjsU9~!Yc|ψ\^;߁?)m4E/if`n~QI{%+CXC/w#cDsoCy%5g{jx*=J8/*2Jb\wvkI-4'0'Ӯ]$pگ?v8y&z݅x1;lQ<U{Sřa%c>!&wvm<-q@^tJX>W~cϺSUSNV>Ǵ%|Ǿ$.0?IO7]`O$&.~gj-Nǘv'YP/
iw;OuL~`$m1̙x`ݤMO ރ7 ׏JZ5soFl/U>m}*_Oδ}CO1SY`xm/t$u썧
$dx= lWT6oLh 0p#Veƣv;Sd6W7f,iamxWǵ
Zi^y{2r3qkχ6KX>/2Sڑw)*;@ch|][*材HX)sD#m|XcogP<="Cj&7n;buIo?"m6vC[C5I\lusk+9:a?펲N׿=W7vy{$mmc&'9NQF]!s(mTy/b0]#uqF.z6Ǜ	i[׋h/,(CWe?mnf16v%K{ aQ'Z4'8)i;jb
מ>Uص)oG^f7:xI$A77ڣF"k'سl#F[vl9gViy|Fڌ?oR<=
mS˱h&¨b.+bCxL
v7Uy{i}۾Qh'~YҊE=8C *HZ'dzFh}C"`^u$]˳Kt`{]m|o8k2~5n$$/vf$:.8N;ρGnռK	vi5k:`<>竻1
ʦ>5>x/px'}xO3G.%D9;hݱ^V~/}vXAy?XյݬSԵ;Uug,]-yEy
`FGCH{gJA@{ X'ޕeH.<c&:n}]
IDlsY779=Ŀ=ghq6,KQYܯ3&q^H-yl&ŋ<ہn<=Di|Os`)+3n
ovD{=RۜI ̻fcA=_};ƢRϯ3>s?ہ7˲ɣ!!-_}v}:н-݇搮EAݨK?!Rg7bO=Y/z׻Ay7#(
koH.%^n/
OR_6eF;<VotqCۺK[S7ؤݴ\Ҿ}=?=r>ʌ߫pU}e3XT kz<m[6On/Hf7nّ|PαO$A@tM'z4z&3-:}kmxIti)e=>=>ќ~pO<E<}×o`ER{|[ÊyVS7	yw 2DNo o78cס.L~ 7iz 3%/ oDY)u	Sgi{+	mw7IdpO٬yfyM0d7^L48!Sց 2tS]ȓ$~7]ۨeo&imaV]Gmat$_bY
PtUSyb.u=ij/fڻx@If+\5<𾼃!O}§ I	~?l
}w4M3;s}OM!<y?oy<{{Ǯ'm.k{p>R"̣m.S]q?hmv>ii9>sϦX#?ʎ^[%q~cz?%ϰѦ-l?یKYs1k0g|y6#ăߥ֤M)FmL{r%uB|#Ŀx]'(yn
m'A ֐w:I=%"#bSKj7]TlOKtQ»A~/~E	LW;mksB#QaVSE
K/2/EսFw>X+m#߽WYpsΤĽDH(ܛ6K!.3_m#vљv-E&K57.&/yRBw0@wjx5u
]o3
`U@XO~wʹFY1w.4	]1:5:̅{,1Gx|.ާ1{;Rw2ûzDDct{|~H?3N+W	7n\
WZ6{ kp)?y$Jpj
n/p^K))0ZO=}RIw4uSt!m`~'p`?S~8'>*|ӔrC]F#;n_XRO)P!,u/`!-x}"̈́K*G@(yB̏/<]`9T+Y^)<|X7DM_Ř&%]xR׼c73'G:i¶4yp)Mg5r'kb"rj(ڲmɀ,ĜRдvQ<DLM(p.Ud;#N޸w#ɻ_g_ocɓiKJua|>λ	>>xr$݇r_ (Hy򺝲OA8
^c"g@O}~piw^lF>/ :S<]'P.v+/)rB 4yg4c싰ꋩ
ߥ;)TnWס='b{9M?m-Yq'սUO}Wu62:N>x6=$Z?nUɾ9QL]Rދq}¥U/3M~S^t{׮[0(hK/y7?-#==sA'8^youaN~
7wKsP|#Sy{hGo8hO=~~m7\/>B@&i7n6!1U:jϜnͮiŪiiYjiYq{ղjiZd-ol^Tg-ik*ij\f[tgoVKkZ,>eM5+t|,j\庥-ȮZRW`ZӴ:kic}=>~KWZ
-Vm\Ͳlf+ne/^sI}Mí_XvMMq҄d4*U
ԯmj.kncE'kh[xkÊZ֒U˖-wF閛7+dhbu
-++Y3n9	"-W4luJľ|Һ(扚Z¾[aWTV8rZxc˯з~5(SW2ĵլGC+ίpl5KMͬ
pj4Z!eٴv.n%nk45FZs=1dOO8=H㌮Z
\aU\dὋ^(`µQfʚ;{lUYm__ۧϯkh^66aD|pf;~Ao_ZѰQVAMKϯ @<g)tlRvE,M+V`c5MM5wrqIK͊wTb:+yCj5׵,$x~헬ƕ4j
5̭in#3>ȢD5 d

p	GS0ŋf{nuKSҖ[0LVMg|ԩ3%}%4/[QW;wEmӨ%wυm8GV 
@<5hI6	&OtΘ>Zj'~8`UUK7.T$kp	i^Q9\'*&\O3{R`ZKGìԸCr\fO{ 2#oDAo?aS!sh&|T
u8k^r\_~*[A5rYtM8-##miaEN/XkP}x>rrE/X?6g~lS'Z*ľ\z;xr~g^"q;gx6_-@j@AësKMq5Z8
%qsQд4}v9lq;o^"~f;Oڤl<gk촺Wow3%;w4<{OMe}:{py?)w?t^s&ZrzU
K^o::WuSO.Suf+e(JYVgsfM5??\<A#pۍ|1)
sg%9zwֺ&}DݼQsJ㣈hNdSoT?9`Cw篺77Z?}?~ٲ$W7FꫯfrP<6p`Ufߧ1Fi⊫<u7kf#8!-illTbISMӝ5-/2\3oXx˕u-x)[R*j(*wF~~Uk^մ3_>
dW{͒:oآJ+Z_T	oƆDWV4K@rGON
M.[iN\tii.tԥS/\[K'׸IIP1LMjiTU]'N}a ]>A)*n@ۈ`S6D:MoAL-7F+m֝-u94h䄮Y?e1,ItUIRe˚Zras7~52oA.9j!PꯖV酶l	/ 鴈9I4~}P8=^N5vy?0NT%iu42$~}(=}KX?,nhcC]JIfzH(35tSqWq4艹7 Y6ufWV@}PB~SAoLń3u'+BY>-ol@Wә(}zǭC.u}Ma0O{`ox:\ak٠,IIwY?_0E~5#9[?o+J=6khYEA2D$狳t:/df2g6U5s /Ls-J?+Kr
`dVe+0CjU c&plC-4AjSr{n3q56;믽ël>\7ꇬriD
m+!)冫UZQ^E5k(4m޲t2o%Er"}1bjXIe'S&+?_6UO]ҚU.ϮQk?	a:]?E3iqfE֡Q2RrqѕTGLu
j\YVKfػ} un'2qˊUrwL3wmuwQP۬ujqOMuͫ[<OYGe߱k;\$ՠh
bƪ2 Y.JHڛ0]*Pe+nHͅg?Vuhj3R&WY1'xiW#Xm0M|8]#Iy&ʫ7sxVE{)g]u
j{!-5ѻ_ÕںՊyzP$l9m@/
psVd4FZzA||a">>Xz! {].^$B4Aoh[]Ѧƥ4/ZU#54[-eZ$??-k@1T]5ܗKnieeTro˜/\+yKZeK͒ϯS8~pjZt0|gή#8߫N{ߐs3KOq{g{<up߃33Y;ܽor oYg|JnSTmScRᅗCר]+jU*jUb?*~UTFfߞS]_=PvޙU}hCX_-ƶ=»oءg~869^XcU8ܴ[*^Oߏ~zEbe)FnyCn vMU<x.7
~o7ίz&z7e⭿()-$#"V K{E!,{~OL06zeۋ**V[1؏
qOxWʕ#\z*X(=>\"DT;wn#ږ?ڃx?WWQ'"%ߞd <'|-w<o'`qsn{,:P91OC7ZJ[]G3?
'&
.7n\n\5r(jܑ_>uXպj]9nOp{>Q7.7nB>
n\
n\BEpjEZVÕJ7n'\zN2<x~WΞ=ݪ[:S&_\Dmݒi*' 1|$YBoy.AcQ(5Fgˌ>1N ҤݷƖI6dՊڋW
[^Ӽ\L)ճI}Z-TWx%Z"&Q;*&ԭ?JScmMK4sbR[Q6,S_^,Q֬f劥Mc$&-in6MPҴb*H=kMV~k#R|(҉(Jׯti_ʯl?(ωW;YWz^PlI~tǠsʯu~IUVb^jxaT>;z#Trg'Ǽ-	ϯf6O+ǿo}O>}>>??/<DߜgH+fC
ļ"<?r!WmWi#Uqgᐿr	mmZ9rU˾wovᰈJZc F"jESjբjcτi	j1z*(Zf潙ywn{8|7|oFşL,_Ǿ ~cƎ_ڠ˲/>cf?2vjcQ忌6Vt_3RwӁjA|V$sAOaFʵ4=m-c|n
cM"jl|y7EBG8c)~w=	N	6FƔHyxy@ _P:z+F廀z6Lw?([ޝ=|?KwNލI
tu(;ˀW/Svw\bI_X2C[VAF5[;"aȷ^̋>ǘ+K
ש3x=䝘3|Uz~;F?m-E*/pnݟwA.R8,ig1ۀ;2q'h)p|~HۋqXhpRa=>7uX'82l~7 ~R7#OMNaߺURZn4ׅI2K	|pOE?
<}+ڤT$ruଁOD UBx"({ȫx1VyMA)վp蠢
<Z0I~/ OH_=O=>N+/h}\ |	o3c~Wu_|aS{nD;n3.(MJИ`%&G!seϞ >|bվ?OMuGqLsmݞBFoi` 	
Jmm;RZ?{$}gsqߦI˴8[^DTM	#7gZnZU^}iRl~7Ew{7c?xT.=
O1G׻ׁ{=Y7v3G)ߎw93~˽z=y|~2,?\ӪݷiR=w;|g =
{Pן{][^>*g
zjQz}0-sg_vj}=k>k=?= <Am/ xeʟ3o˓_ni`_:UlR>4p/6YA_qo'a|K
N(y|
!߹_}V*Y̚Y]Ԭd17Sĸ"gVSMSR!3jHR
)oR9G SդR1+t:O<yɬ3s5NZ|9<s*&<LuiSېJBq" áx\r{8E͟[{f>ItuEtJDHŌSqҬnGHs,XQd}zI.Cx%bۖkN6_p=y[rl&g^15d6Bl+nIWʗT1穞$Og<XMKEıpoX7xls;qR$_/%%YbOksAWRS"joYL~93|>n樃|N[ XoS\ڢGyc^y:<va2Ns74Kct_A-Dz	8<b0wvkumH=
bz$V~X&GߣS[/s;4Rqm.K6[B-GMǃ)%)kiˤ`),I{31U첸}I9W$A"ʣ;i4gstOa*nS^x
c'+$
m[x#?leѲ7Cx%9N<3\(yq`3;p}N9/*Z++bN3tHbX;.<$N8Nn$ķR%|מO:{eB8&|!}r[=*
R;z
V[O]^_W`jEEeT$6u+C8!"--~hkֹՀW,Ska||cnM>ˢ^8eUOXAU˅&Gn5n(1YjD&m'jG.Y#\F*=jFXU3[F%OL9̤0_tU%M!fzaO6Le&8xy..7b.sNZxO=#̦땸mɥEC8PTS9eb9
dYcluܞ/8d|X`[ȸ!72܆ZTJB2+/V 9ƣN7#,-AV|sMf
e5-tco 55UЏ\ً)0QqR^y8b+`-hO&x[75470uq
)8mmEJ"%a?M9r!mjU3TKtTs%4FZ !LI'HsW{L#֋aE9Czjmu)J?0Un
7^y+hz_!=}PvԔKdiڎ֐C<0
v!ǤRUXQ
ic5Q:JK8\e)&8*=?P$8m9e4,!R	"Ok<nأ f?-_U7J3 TӋDGQalAGЏW(FҮKeHEC?/W(v.ArQK1u%t#TZd/=SFU_PH#~P@NG鴪wA^

YX 'ɠBBRjQ
%gUE1N_;nAGS~!t$!ܤ{Gjwq!Htj"T{MKt85] t'1QL~)?u,}`	@},_zF$qOA'_Dg NU?`_eLt邱
Ay6|l_ߨlPK
    \               com/sun/jna/linux-aarch64/PK
   X.  y +  com/sun/jna/linux-aarch64/libjnidispatch.soUT	 3f3fux         }y|TExL.@!	($	!*$	Ip+	:I@ɬ+AC*GL ?~d>^c'3LDXK,-qxeYÑH*	o ])n(	yuY00NSGXt
g%퉮叴z(^:qoN=U4o3]˫rӠ\X }D`zdjahGn'_ya7?oMO[GXb}-it 9L- bFva^͂D$H=ִ#R-BZ&H-#[%[Ja2;ɔ#ٙkG/޹nղ=3g1a[:rjǚ@oz#BZyI
	y65|N΄#ϿYu4;y^w.;[ߥ]JߵY}/}%c-'$|)o9|wPC·v|^o5|kU5w/|	8o
>|?o-i9=
߱;>-Jzi|QսU̙#Scoؕ/m{ώ'&{87'OS"W-eōcǁJ?
{r^iZUٺ?=Пmu[Ԑ2h3~ y1E;>𙽪玿
 |Z[oL|ogH/[ܕsg/]_|	=n^l?gbNjǱ7:;À<^ՈSWR;:t?R!o?׾|76v{s:W{
~6o_&DRފuaɡS:8j?=֍ϒ]eؼge_Jp}dS>]󷮹/J~_hǢt|6:~W|Pfh[z%}Zyg?
:]9YG^lTwUK꺯~ܺ̇?qo|ܵ``BKc?OW"s_x*-Fն>b;Sy٩2?:߬g_Yڑcos<;sEIk[B1w9׷[_opϝ}ɽ &},5:qp~?v@cs~.~v5 <|j}V gƯ2cw+?!\!<.40_^n~ QA˅5 |5	LgZz  tiAwk |;HOA A޻H"A, W޶A}<~( r:n~
!,.aߊ$%d)'3K's|q t5裯?>EEqGſSuys##8|pk>8|h-d8k3{@sxF(zi:1U8<˛)K8.t4Ԇ;Z@z\Н|%GbiUg9~K/;~i=?BloVok>?99~?X+/vU!O}U:N8XO(.!/Kz>>?vUJ\
XZmߛ]+`<x3Oy KGsywVN?p6_8uUx;vϚ~<|qx	NC?}g<Zvzsp=grv<ҙ)G
nWgiu=~]bT;U{;#&[tztq:fnxUwoibTx4[j>./YZ{x5˗~8j?S9<s=NPzRKYC\qb>?]$Ώ3=?9|7zqx9[8k^!nox6r?OtPd3D$q=J|vZ!U;>~>ۉ#ǑcyAK.o-,=Ý^0Kwռߩ
o!Ӛ۝y*3j~ud8a|y-S?`iU_m?^J?,>zq	>9\ϧy\	ﰴKכd۸]Ei'bnox%'{>;Yoo~]Ўa=?{}Ǎ)秒3+]HZok:3]bioܑn@WƍK8Mai/v'ӱQ?}K]u8K~ot$׳U~o"T0~/U߂_2qU^nojx&?;
q]"U{ma!opT.54/Ҏq=[v;G^j'8YZ%^^}9Co//ó~o5O-=jtCT9!x8Nq{.^UX]PEf]4dݒ99kV^A޽s
2'/X(/3;gA[]ɉ˲28^¼B[O
z}_ܢ<0oaa^ ` `A"/'Es
g_~[<R8^ N ̞=7Y_0wQl(w񬹋^{ɢ&f/r0 q*Ν"Sܢy* ={޼y *Z5`,S<]hY^A\P"^P%ܑ`iJW
R44sNA^,3hh|,|[vey?59;??o6kVA^a4K	XZLYrfsei4П.t*MgΝ
R@-Z`q.0xͅҰfx
O+OZMS9kY@pELqVZ]T\T[ee3d-Ι[DTU6fZϝe䁮14/0YKe[d]l<0ƚkocMaJliUd8`W*(wނB)ӷa@j\4<cQ]|p+?A9[0ߠ,]4k9 jAʚ$fq8qb -鿧Sx)|)<DahҼ)S-yM56ՎW+T3^lSxM56Նˋ[dY#mSD- UٗΞ
wbd؀ѴfaISM:j,.hsgAHSd(0(
..XFWx+F¦5Zx^z
kRB69FF	ސ*Z|߄E0H"<
kW.C5hj"xn!Ąj"(υSX6gHޫq(~
M!M%}N^¥8vK֔EÄaycĈV4E8 .{ԉ`N!L+xeEc} CXM! `s0(8ٸ4V&V)gS8(ŚeΙ^NZdM86ڜ+UgJK(N"-*u``[Wר	) 3Ϟ,Jy擥]D'yK-̦nNv!^_Dssqh$*&¥E- a"?ېI;Sv`	d!cYyyYBd|p,
e6:0Y5P\EB!XBDȝSlrFߋX
tD0~z68),YR$Nj3{Z{/ۯpq$+oVvQ6SX֖߸DS7H~s]0?h.z9@t==k`C+3]-6_=Mt75?l%?cNNipxMg,4	_4wF8_> ^#|
AH=Ǐ? ?{~Kx\*ß`3;
*h=\gpy|\`0%߸ WE]80w~`yp!c|]kڝk
	=cT38x>7N7P#
ipxí{;9<H'SM	v8 W0sp{`c(/;T(1Ufv23UW^mwK{zTk
~ p9Ѯ8^
F}t>+ px~Z8$4g9\28|NƳT<g08|n|I4S9|.qx^fo.w.4'p:xjF>k
p3p؎_5	H()[	Jn| ?&p"19=~"x sq\|*#x/.ʛ$[
TZK  
 !.>3Gx /)c+KxGM	p $w
Rw !M
x~L[Wv~Z3x !I~ 7	HS	^*{^<Q'	><U YOT_I!9| Xp ,7T^"
m| w	| !+H^-G	p roe#+XUr%&Rx%nl5Z>VW,)fBh:	B%B-stHұ.ҝ!_HwtNMMX.i~XXQXcfz/'bB6_Hg`B_H=X-l_H"_H`Bz/W`B~_HC?cBa_HҏaBz/SX.Cg~!~!/_X~
0 /X>X_bBii4?͟Oi4?͟Oi4?͟Oi4?͟Oi4?͟Oi4?͟Oi4?͟Oi4?~$9KW$BƞuT56|mH֕6BJ[AHfUWҠrxArPv)}RFnv(kn%KP_^gVD)DZkS(WP铓G֣>V+qf8F\^@dlBvuD5>_z>w:+*w+~ymZkcJ4e\*euZoYRE',1n%ʽ?LRr7H?f+IWJy}X }AHB+_ifbbq+C*.Z-%Fwb}Pz20(gmzVy )|B2xF{byf/ky[@_IW"%U3 F,D0Q
e;U@h8ByqI}]?=$c20vyUL?4sgρ>tw@6FTc@_͟8J6}^;t_瘞zfzIkX]y]Y]#.M^~	<0=,zC$㡋.зf=>~c|
ԕL]|C_hoO@=tpE+	_<拹&O/Jw4Tĺ%0$Wxȍc<z$3c.[[b2;3@>IvQҢa敎C=Y,wGM(=/Ng <e>is[:QfhK%}<')(Cx]SY]q=t/=ZHO+˝Ga g,za1EKM}fĹWy\|MWk!]}4Jǹpp;㵔zɀiq{t{֨"#o:{~~#
5`v΁"
n9lc6mv~
X'urSY(Ia%)<{*rT(/`vc}m*P}*3M̳?gqm<'M| $&eV3vX{fB=ttfvٌS жzVgmCƮgy_^/B,TO2^S>lDj-HkTjp[8OGpBr^qx+"[CAw;z0V_S~a8Z
!o/prhF3iBnu
b%_.Ҫ"V{dU~WG賎VUYQFn	1ə(mⅶhRݠ:D/~1_^g4ݙEFSmu41;z1֤8(F1ޯ
xNk|8
]F{ľra6)}a+hê{kv{!ݮv߿	|zl
E%_a;iXX@E@M@qsƽȞ/vU߈p%շ@>@i}{WQ8]DFlߖNi.ww9JGZ`Xm.kia`5̣uټFQ._h Zw`
5 a,tƉ__ƚ8~p&S8wEh?x@o+P(Ѥj)ᤆ?{F46Ts3tTSOUڱ5+ŪG]5.hO}p/D_պ'AΡ_TFRh=o}Wg}x;+g/u"ۋgy85Y"_qj:i1'C1;dky
hu'`4u	gC\LIu7X7GbXAwKz#!\n^>{tzrq	uc|OEW=6cL"_b@[szKJZ48y,"9~_(6>_5ߪ!8c~iBGtVjw1n K}|u3TqN^Nˁ=vG 4}4΋ui}afVB:#cBk!ǻ]0>|؟̆t[:m>~0+wjs`#
+Pk+vTgs?C:j[Qt*6<A?(Cԑ/%Aǟ+1s
m`C' v[RYlwFRAr|8uӘ٫<vͱooY2][]SyP$\m7P*uԌz{ӵbԾ{AV=蜅&JSC?>o:IsE4vcn~9cE.Z~+F0+~>qκ[gu_?B~Sfr$)k@XSz(;&)ilnv]ƿ湵tl<wyNZDjvfP)k<B2 {%#_I-d+gP۹6;kԥtdqL,-ŌB5<@Sj8l*NtfH瞫	Lt̾
yA耮vtzWޑ3L*<#S"ҹ*t/U<,58ex~_	3FqKӭ::3֥
|tbh.P{y9qI W![|AӰ|[ӊi	w%8'''DC8}} g:Pv lA޲ H&\@'N31$"<tN\px g'@Z/(=0vN{~I4߿.J^s؝o؈q2%yui\xMḞ#3kڐ5mSH
5`u+traiV.#5fqΠ;Mis; tg4eε1ƾ',,fl`k1
yI*e=쌕Z0ck(TCRbFj54 +4VӕLW
p]!-T1Ktqq_VՊ1s*M7PcLsM|ke{eMiSSoMt8e1Y͉s<0bǃa0֑hmgf]D>0pM9sQ$5'"wN{fkE.WhLZE-جF_-K`vaOt
s۞Tׂl "hp\.yTBLY)λL' '$z4]5[e٭ͤx9

a'jf	%)3D|+I؜yekʈ_| GjWiI3&f24s$J*Koy$y\J5.$|HưHJh7vrY:&,Oyn
=>5kIqjH4_5U rtټDAz0~$N6Ҋ	ZqM
_\G r)ؤPǺGm3pm=C\%7$jiNaCaD@BX6Db;]0Upʲ$
^nD<}b#8&y-m7 MlCOU:9`NZdumׅ/cI![Gc_CM(eQYC#@[N.e60}З5x~<]e@;B8fZ|Y;Dgۊ6O<};O˯{Si #٦gCRgחhc˝-B`GKv ߞK~
#ٚ~y~
S5NikK_ʗPe/vCq#-׫j)%w
!jsGGN4nlE(]L$W|)j۝줛ֆ<\֖o3%Hwu icT`][-L׈s:}[Q8~Z۾Xb,YW~	N50G_A|,"v=d.|Z^"-	livEߏ'*Ɠ6q
w_\SpO2-	VH8o0Mw%5Z[ENpfi4A*}_HpꢍS32Ϋ|nyp<⸊k}습5*8200vJxr՜N,Z'<	>DATu,-eCZlt#wAp[+qųtF܆ qʋFܓApCҕqApI	m#֎/	34ƖloL 6Xb<ؚst?k3kr@'=LčL")c=LJ`sMՁ}j8:>CK#퀏7Цi\$Su
q}a]n͂JaLW4η^%
3XT<W-Mѝah駡
ِ_nXhk{Ϳӽ.j3^!`ϝ}8gNҹg F^m:_>Ry⼔y_#A:4[#P1M3@]˿U]qLm Mȯ|+ S?50xP~]Ͽ.0V*u=v}N׵/:gs
L0TܷEY>q=j(I\CV	9čѝ!G0bu{.Gu-hz)\s(_c`WoIJeL*f>/p|^z9q(?Ġb*cz-cP믾d<}<Ҵ׸.T`N}Z^'DzW쏰+_}8~Tjf떢5k~yl-227WѿCu~[׸@y_{~;q;s{N2moiCcQz&A<XkJ/}pHnu4J\M'74e}WRmxVrxþl\΅hbeq'[B]A<3M[5SCɇzz<O"ԓSXOka|΁=4iTȋ+L$׶,6	g+ F}1Ea\E}dqh3u"Ǣh%g1bC>6x~kVeqܣ#qj>~s |;[c3|H!i
pn8Qo:|
3F{oSH
61!RMp
BǵAt\%%
CǲtI!B|I~	ŜP9<RYQXm
#ɥP)*lEKG%q=fB`?QL{;|o8I$v2(o񲆃$KѸ.O1ҙz/)gXr
O+Xμ>d ˌLo ^	8s0A'X`]&˱7sq\N9<<7*,c27*B+7d/qݜ(3w%;{LAgt\~bLn.Q|[=3j`&S
^viYt~m%=Y{ZA֗^:f]1Z(G8 a<,/}'njw_m&HU\x`{Yng*Ԁ6x7i|mFZuI@ܶbPòBԍς^ t`zDs֮^:ήptB9iE'" vjE+vG=#Oh(S
+_6o|ދ#_]]#:_X(
W0W^iԟy|V_iM4T);Gst܁4ĹUٞ/zȳtMi{c~7j~oɴo}<sWFX~Q۠;PF9bY\)+]GIoOQfRYx}[}!KI&zoKIZҽ?"W+?e{ V@pd' o}|?LJ6;>`K@m)tG7Ƈ	 K&,ƄG1=s/Scj%hgFLubHvfRj+DNLͦf nN1}VCSw׌}. B"$K=xϬ|0O=~q<6O=ɗ_X7O(2%C߂ձ6JU/:V=8P3gS(d󃻀F΀;ׯ.^>W=`(<
=o
,<k
V,^3\| @|'ўaeވuXG@%s%X{ʗl[rcܸ`	Ӕav%U=|Mdaϊ^eVgsQXX'έgAͿ#M8y<`ZwHqB4ҖdYVs1˴_}[M^P̶|g#ΖNNw]~3&EvByU~)q$~_^>Y	|q\5|oߗ^,O{9#8IF	w=|ձՏ0v@}`{gV&wvfdްھ>
,
c:+,s8p;6Q5z{$K?Af{iZW	90lH؈JSx4]OgJBg3\c<@Ϡ+
2^C9g;nT^VzyTy݄Yuot	G YB Zo	u%?Ӏ8Br>	>o9w(KV,'eTX=?H{?k׏Z?v:c뿡0^%~e	O|{TI4;٬Ό0viϙF`&}p'z0+T?yQE|ĲO}KIu;`ug:|AJp}G'}Nr<q;RZJǠ8 XJҊuyίu2Sϑ
ch1ɚ,1|t{^Z.cc6نLo\G5;vTzbq*=A\%]-!v	1(K74K~Kye~g>?gkps|}>){0Tn{Fkהvy.Nsx.x$dcCUgxzAOe]`G==tzJv=y~`z1AShB}^}$_>VN}t3裳_?>}	}0]>2}XnQk	9%TRc9>>2<gz}̯>lAx^Ժ|ǞϮSI׮s>}l11Aש*A˯W]>LQ'0JbOy۝(=	%BWw\kys6{znM9hM<17z3G),g ƺDۭz<3ᮍ\Йzo?DħgGo?~zv$]u>xOO/Ӌ:&ӓK?WO3]O}2>
}LN}_[W׮ߩ}:	}	^}Lv}L?z}|>w?~}uc#wm3>N}:\%>rp8pFǫ2Wwad!)e+	ۜѤ*|r~~wGu't~ :{c 7Շ~˛SݔMMʻRZ~5ym#ñk{Uy7 +
l	Y**MZ/~Y>QVC'/ԃ2~|L/c~y_"[څ= Ϡ^0܏ӕ@lkzdۓ{9sw+>a|*5C6
?&^\ms[=?A"g5ps lsjrms sN]?^mp+e-\d"|a?.oЗk32c=_?iܗ?Sq'zy㗷	y)M[{qXhFhB*A$5yy__Q^Yx6lw/73_Q{.4V=J
c(bڈkowO>wp=?gϯYƓPԳ
ψ3/ba[]wXk+27g|ޅ7,	kյ	61&KE9ǁ:2趇 uv)	nm]qXhzʈk X68˾u=h3=log𰱢|4i1wUQaʿ.Q^?G7J`?S49S9r9s g5ȹ fAΥ)燧&'vW_;Lq=
Ҝ
H2dc( ݂|#"ߓ g*_C7j[Wp& A _A/!EjbuS_ǆO>WBm?.VQ
Ml>z6W%xCWiG7]rC[7%AAUyyp~̱t|+CH{9F{QeI͂8Ox=Q%ʋv^nIwƳ;JdX?ƹ,z=9@oH7/zl@A/QM9nT<,=]W:}W3#]
ɒo$W<f'	x'3?/izk=M;oNxlAG &v'_bVtW /usiQ
 寧=w:NG*~4ߛyQ.uPV"N\;v=9Фx%.mG`pbYCz!9aJj:_6).չ:_lޤ{1$ ˻׼Z{,q~f;#.$6hV\T\r}ѤHnپ.Ip
?<p&8v>hoP6<@vEu,=0H#6TM?ڗ(kYh];qU<ı;wHzy_Q2ڗ5/1Z@?~a[gm/ńg<}Ĳ&}C~r$ˎABͽ!gBh18pn~>R{ФX [j#c9`ÃEy|&ŲO@AB^WWs=
}ìH:QNT_: {3a~ѓb濜  )F_Gѯ	[|C=oX}=o}5.><ڰf}yDllrD?_β]

]t |ӧ]i^w&RJYl_j}v/}HLP+M	NP7	hMxzW"iϝ_PG߽68\8gY87>7r%ɮ#66e9,uvc}2]e❪{Ԅ
:\{d<OnyTϴr\(]哞Z~)}Z~+ȯ3{zhSx֟I{xWi!mcyGo-o_-_6K F%iBۘe|h-uCW FC]p#iF9Z~9h~õ'!ooyoc$D_3!_VAt1B$1-b3B˻F<
R%ke@^o1
y	r1E卄h1OC^]^'-I_X- {ZObGgL46wR̳kya\XsW0s4`n!&g]YۂTr~0Y_k08=MLj4v@>}f#'Us{]tDiT ˨@:o}=o-]9iV]CY䃎uxUl>g{qV| ѻ+X4,YwR$$ySCN8N/y|طdcɬbH#M<ً9	=zY87gFM',\k1rA4L]tgR\m{avvvd=oXR=Ïz=0;_CZS|*5G;f	~;NA:B_wP h]ySx@ƨ"Y7k
mg>0y&w={b,;x]W_7M'^
S)fV=r+Y<Vl9)wHIѼOwVm}֟ߜچl2DRc|n+
G>{jlkL8)Fw7l]Ez9Khҽv5I5śC1b`. -9Vq}ܝ)yebn({Y
R+ŹH}n0Z,9e]|%XYȳe,M+ߒ(`2CKY3QB$usABH+[i#e e!Q(uʎzAKэ5d^<I<l8 _D4m(X&w|kq8.u&G]HutNg` ;d700\s  O09!7|y~
5s	k.ZL#yAdYl8*_ x>m;sr=@?'}ȳfy
\ eso,$
ԞMAwinl̓nMP>'oRw@w3y?kWf
@;-`<z
[<Dvȳf>լ+ eWpy
zzDp	\yn}EZk&)OIgibEaaA>x
\G`k>qAx"_BۙmN d|g.͚i:g[-"~2EnhV\y &B
x9/o  u6+[ <xZh XokK4~Ͱ+]e+DV|da6%5cnYpLߡ)>'Q
@u 0}ғ!fڝanG'4g n'LƵInq\fw9\ӝ)Õs(DKexOpzwGȦ_A&GzgV趃'!
쉐5(BO>
렌rsP ;x|ӆrќ.Cl߯+[O;nBqnC:l}\5@-k֠ [s\) t^h$кqs-dE֭hM8@NNB׶ֻ@66FRZwoZ9=鞕m:ؿFu	1{	̄gx~Y#Пx'[6ƫXW~2 :jx%z4;~$Vi z?6?
3Qj
]rۜ-h9;ηuOڕƫL>F7 I+Re3lŴyZ~/|[tQ*JfgYКݱd}ɥf~39G+,TIuvWf%qsȏJ\]0Yϰ;Ŵ7Y3!k<	D\ϋa:zCZSϫ4`BLpP٥R'CoGY*op΍47k5M*
\)/{ʅN/9_㭗PK[W+[顷Op7Qȷ]}7+OQ;ʓߞ-8
f9]m'Kog?yVo?yVoyVo9Y$&4  5@9A5 O;iȱz޳&|?2	^^(\cK757d/p<Ww|[_3ƺqN]P}A'R{G拞_;=L.";Ue$]k:@3mQdcOzzYY=Ѭ|b߉ڷ_7{wqmGwxZf4߁{^ʹuwWr_,sؽ._=?D4ϲ7ef?Mq_a$c_BbNJGÚa3_&X$`^4ƍswWajE[^3JRJy>lP$Qٙ()$e#')z7w<CW"$h9+od"tfLcCgNSwc ͷHwf	w>}(hԻb	sz2f15[*.~ʢYuۊxaV:>H$J׆~x
#v?Hj\$5*SGjlײݝZa2ΈPXw_qR
pYeG(UofyI,o·U>4RILۮ;g1c;tҽsmAW]^W;<w.[,owWۍrv(CM&bꄾ}πm㖤=֑|W˳ ς|+R
[SXy}LM؇b{[\;*}N,;yǈ~l	s5g5tAj0BP+VSMG%$spIІ׿ڮl/oQxhYNgbWK!
2G0"is~euv>2]X==h]'x
iϧ<ڕ4d1*ӿ'§(Ncݝmgܗ6yݓw dw1Ϸ+(A־˾zL?ӚlHuxw,tv=Xi.UbHY+sA&+jkJ@m|Li9Rvh#	lrWwZ]oӹ3*:.Ywӻ]QyDt{k- OؗT_gpw.YlPq$k3w*^ KE(-nا;㝫`Wagw?D;X{*Lq8' s	o}X_S]+|͉bg9A.	R|xN߃chwXQ(*{efEpxTۅ>~q3'k{hm,ْ=,锿x+{$-vK;{;^r.:&=o}Mx4h[n!ޠ>J|ƃ?ӺxϤ=D`0x^FCm.9Qqu$ςJvٝsصwuK#wQ8ݙINuҡpƄlsw@9?\bq7>џ<3>JG2v6أۿGC,Eш&kZ3H&6XDHO^:1j"ݎFz>vnfs&1!a0|(wqLZPo(Irnі^osӇ,|NUNx^(ȧ`nSdQmMmHrgWwA?+x</ѻrP%qhB?Ԋd"-aZB:, 1mFN1#
0B*g
c Jfx8NWK` 
ۄ?bcQ)ޑ5&Uh!ډ.e{)fh?^u]ok`6ҨupbhvTb"';w
Gz7wU@o(D
u}/ӹ$K=bOATڒ݅әDugaGݰ!l&-d:f@L߁d=CSbh3,f[B[6k:ۆ6F&Kl>_&Kh 1+=؈g9ʟ/變}gC,swм;|64{(n^+; }y#MyP/7ԯ֍S`%5Ao {/wR{󴢾_ɛ``7hi9CRø^YmugNm
?	l]Hf;wcN{t~k?~i	sc.o|b  C=R=2~X2:Qnp-6VhsN%ӿ8`^/nxc-6e⺗ok[͜Ƿ8~9uEЏc'G~p|I	u:sks k^=bnUg_ԃ?}bk9D;o{a^E{LT1+TX͛9dʁ2sK~{L$yqTsKޙ]Hcg\w 馝8s/Dg7N
W1Y?h10!S0ހ"	mU

/b<ze+Ϟ|x&{F$C֙Y/+7&wpxΟ5PjBkw%	<"#A֥ՠo|S~k|H,0ٙNbi0O^ {F&m4[
$;r$LiјӚhptǸq)qa׌c59]uso߷Xeajat*yђMi8N\go4$wgAD۪Ux{[{rKxE5?LWl?731mU8
̕IJt3̙I5L,1373#.{5clMs\yC; Uo5ݫA_|Oox/-tU>e*!5E?ݹt#݄q>b)DI SZnM>ײ@xήaOFk
#@Oغu]xOxyչM5|OʝlșN+Pw[9e,{ň;õX镤f6`sJud:PG-I|]NQ|fn,3QrD8Ny)~NrJ{g@#]Gkl!s"oYW0^On켑Y"UN.sL2-+,	0m2n9E
b
\Owid:hEiu\W~VBߟ<>,?2\ed(&m l%5/ypgW[kS[3/.xNݪ'Z;=1hSwl"5"{&fo`	3=9: ߅6gXq~:>F*Eڠ-2s+J2ra;n}pK5J5^5l'@B$Պf
6||w^LrXz,u`R|/ؤj*/k,z^p,n *>l(M
{Q
7aoj(/vԊ5m=>#z\7j<hlO?`;zޗgv6@Hc$1OB)˖\y/}n6ǮtWBms|1&v\!qVXV|B274M{:,$|K5'nSg=slΌ$^j#=^GO:yףOnΥٝ躍;ls}wNBlNV
wgI~L&{ȍ7d1$ww27	dO_{Uu33I$@HD!JWI"oh}e&3LG Zlz{AA|@$Wj-{jkxشbb93		}{knzR"F~
=yz{,/6˘~mgN_(GyQ~A
'7ZsFóg߻;uY[D{CY4#Un[vP'mo#ۋ0ٯoy[e!G߿NHmfPp0z][mc]8h|DcU6oP]dcia>MG{!f:?w4{Þa_ߨgLxi?E|Ey}6(Z&![rf[5ʕVз~buib{9}[}߷#hqH@ݰ)h,xt#3N]/;SnTplgra.c]m&~Xْ|r2Ҟ<V6a,e% lљךLKi̹yK}#de]Wd]ȇd<cP-JNI4_qx
pt}Z~k##wfV	H<-=}G4A@| };H:}
t'nSr3sn%^wo9M=67a<y$_Kq9[3s!7ڻт|+xKsb#FI5}.Z;cʯEם4qUhW.kf^s>}1bjqaوcYu- ,ȻY{V?ghi^rI7\Z}U`ֶtC˯-g`ퟄŝJ~8Br[F7AweI^W>&+3J'.Rk7!t3qY|-m_S҇7z0r?CI}x^گX
vœb8if.Ay+Ѵ/b+~||!oZN3גA{#GZ
u;0fu4|w]<7 |q{_uY.V|v0E\,Ljfxdi;|̰J}K#!p|hp'ZߪZ_';)}hMӆF.]O/Z-H;?ôCK5l46=	Uh}Et]j-w>ц~qxGd# # ڛ<N\iJZYg<_!yNoeζUeu.7iv3f*mfM`.cYVO%lls%GΜLGJfBgR|aZΜ[Pm_ʛV.Zi2샭i}ےYʇ2v$>^cU"3׶gji\r,ןX`-A^(S;Y[N:P;+IRΊk͠_A4ywK
cyox_/27KvSx2\?!OPR)rSr/yKjvZϾuW%^`i{:}Y,Sʡrt.ݠgyi=3zr{kA_d-ANӝ'2P'YIe7ds%`Н3X w-ഷ9=r\rxxY1Y/c]lGAgbvy
h?ɶol?}K0\Xr
eal&G\Co&BWuceA̹yBY
,ºhQ)'
<鴖iIςGё-=H}wFwrf	L`_?'.x[rZw>^dy0o!w\9b<*7nsÿpjbxL:;YpȘjݹHmZNȟJ+zOGR[g۷y[yw^}}E=1?l|!ZJKv7w:k-mF'}*㹀P|1}.e}h\\Q"߾;>w&Vش3AfHp8]7vۼ}Ů%LkY#Y-\mGAB']R4}KYf\Xd6w\ܻh/9w,ɾ4d}e6ₜ-5 }WNv0x	ƂށSzH;nloP'sI<[1u>?}c<ivzx?sfV7xZgH]Q7hFuA֒%:	:]UCnL=tXNpC=Ke(:؈GuqF1	w,GtR/#h8uZBKÀg8m:=R9G[l.ع|i㟣.Mßz@><sخ=qzNe1]u]	;AO'>itj.$ؠ's's'WacO[#WL~Dٖ܋zz)fs+Ѩ_K
y_/;IWFw|%.:l\TJ)ӝ'B<lAO~Mi_ioBi©MA퀭
냰?yjx
e6q;RS;X6ȈyP84P[w-]Gii^:Q.Ay]@6Q{^A/JXX:i]23zdbnݙNk#;.Kz-)ocI)$@4>}yhϫXܑF,=~7{s{͠IA]Xp;.ګbsOW[);WR\G?jUrQ>JoRf
]sw){3ۯr!"j]aݠoMW
\SpM:Xn*ez=lugdMA]׎0o-}}&!K;-hMݣ~K
5lV`jzN7lϤte..mvpn,z/ǟęN1EVViJv?*q?ۗ[ߘ-3ϡ	|?^)}YioR8
コHK 6	#ŜCw	s%ݳr=xg*`%x,KIS7Bߖ]@yО}'L:K*n^ƥ11C_]mE}"V{vJ81~W`
{+̃^2O}jn+$TA>\(^T~Cߗ6^=C4ď%K2ڧha;2Os̴94gXJeMB^h%̷_Y<%{ӏ"]TNinin&iFϫ.4:+r~~BvׂoT~&N#.S|	>Q%页UCQ5YWwmE4*ٲP&n}{0(056hv-yyapF;O`OJP%6Q#f@_"|U$к!9ʺ֑}:S2B&59:]󓍙,u_U~zj
,4e˨HXi~#cè?*x]'y
>;2x:FCeuL}ޫ>ůyFs~K]y_ߧ!F{>ʂ^yoP(.9Hز|fm2sn6;3vG>_9a
|i>iQc,OI
}x?}-VчvOgbnz<W08-诩-7q6?Eމ.\IG4oI(e,g 3}vqyKillJ6]L>MӐ~7l(澸]1IMdM%lxdca9AKx\9m<~?!gCSCoT2ew>p(m'<A{4^-&uC1j՘^#her.gS'Kvn%n`ܕm&{L[؞oz|ۂ>ܑa9|YJi/q	XO
[@&Qt=jWZ:?8$[d+:Qy3jVw06$tNValzmhv:cNڋ4]ρs#݄ 9y;V0	u<9`Ń,Ml{Iam1[WLE/tjyt1y|S<t!7&O}#z{GT#~~Umvj*Zcrs6xTnb#7ebl3֢6g};;g'5Pd7{7:Ct/d=Ǧ~a`{4"
H6u:FB*mx^['ݹ^K6gBrjy
c\k^Fu-(m!_jed./C8-Xyj`Sez㬒:h`-9t/縹Múlv|t߄Iz/e~!' ۚ6|v94m&q/|
sױ?Scbee*'h\e
RjԢ
jn+\C
9;A-Ux=0XOhb~`k:kj3OϸfO}u\wn <lq%ӕ՝IO͝j=?ӝf /	O|
xA>&snCW
zA}y-ڇ:sϕ~
C9Ovs>HO]fϓ0[K-gyg00^~o)Rr3l{]w&S_~?֝p&l5x%yR,xy=mxKOs5h@	s:Ř䯺yki+e?4WCNU ס(4Og&%a>~vf$ԓjFN::YC6ɣuH4f}#bAh=8dx
gK2'u6\@sr|yy@f@1E}{yI~LwR`OosH|*
3 ۽:l,4ba٭$:-l4-Hc#}Ac-WC\{c HSgki$<6A8|ҒѲB
ty{v0%hc6(p8R|
ޠI47ےH	+Fk.s5^GuHKt>7=ssGy54Oj{
, k'@}veo.rZ'j1vl$I(xVȅѶWjՁޕ7ےhNB6Vb̓z
= 3cfi{6`_CA
0k` l:}	~Ć6I3жVuXd7m&y0Nsmqۋt{OCw(۳(.3ff']EWN1M;/yYGʜ1=ٽԖdG,CNg=D=u
Rݐ=-'[>wrqܣ=#9e[]ȷ\3-Ez
{DZ/nP,`4&Ŵa]ehX	d7m3f}y苉wls|6W􂾈U1{6z0w&iѼfbGl/N
ǃ'm|[Gӎ́ÍGN:_y:oQӄ~fmhGe~)#rX!>w-:lIS6mf塞lOI+%j-ztpKHzEv/]Q]cK{WIgiEs!7o+t7	>@6@HV/><+X
j3Z爵=_~0>N;3%w woC>h_NomuܧPޗVzKNZk5ads[ω5;0I[A.p}y>;&
rmQh9mm޿E۠ZÞYeϼ~>RÁ,O[$~t/OsZ'_OP->l6:#)qƅ*FZ.iZ.Vӝy]b
6]*\uZ7I}~OĻ
G_-|`(d9WX#㎕N
uE\A[s";.V4Ge=D%s}?&Ś俾oV^ǹ穱nam@ ڜ0khs7ټݙ1'=GrXj<5Vcy !e(O<SZ#9%9r=|^V'byg>2u#Eq9<[J4^P?-@=hlWY='~c܀mc9Ӷs٥t܎Iq0-/tz-h} `AO0 `<s<[ƭCw08b@^Ƃ m_kv^sމv!ǺF]$d7zMKwѾbc^EvֳSwnE<5邗iG:.o7,G5i]y\~$QҾB3i1N
^M^<=4.= 4J,"|M!|Pc¸2QXcّY]HyOKY q̘q̘q3ۦ|"jߪڧHc,Ru@{
_S<亄t6Fk-)90-86-:)fnon5KK%E ZW@{pO{aZ/^}3 ^(7_<(ɬY
7h![
ӈOqv"/?YJ~#>O#ǲ2k:?ohiӪiAX]ig{[/d֩
ŸְCHwm}9gXS~sW)8)r nq:"էg1fw~Z5଎kMd6lG.Gɐ=[~:fŷ~/}Lޗźˊyۈjiչx4ڿlؿiz	{cXSp%vUP(
:5;|'wNF:la/߸tCGO;n|nI_9u/x|ƣޮhmc`3/^glʮ2i'֡37Q~g'ci%q鰣/5c.ĚxI<:Rh=~4Om).ͷ"Nק1]/5L\1C]w:n>Nw9Ҿ:Unh\֕A|">ȖX:at_]ȟdmߠϾPX,<tNAi}[`?Sm僻v$}t/
m(ਟL·\qpBw~O=NI߉wyy!s羑~=˳.94AMZ1VQ󴤓зՊ]tG+b]nq&:HyЕZ<<M[|5P:@8h-_kc͟Ί>
޹Чxd<ҕx@Oըa|;M]ʗe)7NnxXqL२st1{Gk~_gGd}2ͨ/#4K\M}s}c{<bc**O1)z[KQ쯎Vį. ,>#'$bsc|Os#7fZ7n`ܥ6:G:@W,.decP\=zI}v	~dI=
m4NPds8)~7 sS)σA}m,m>JtOH&W6a2ÙE:,Utva{?3bwFźi{`{HsZ-2_!_qDn^F{aJrh:݄F瀦d߯`,ʯZ!:gbeߤ>U*/(h뚉WkFeeGY*4fL(;Tve_A{0,@NLcw¶vǵK{I׀ؒBmɀ>ps`]u$'ƞ5!%jc8Gcܥh#mH+t`H\/9p{s0^Ytעs9r)KGۻFػ/nsN߰.-Y>{Gd~#F˷>u;k6XVbv
ٝ5VP篡?q]ls˯=x.69мHnJa#/&?
NZWzS߸u)}'dɱVܩ΃n26nr>!;Tޅo]$cFl12Vӂs;lZ:eC=یbjף[1N؎<s@ҔC{n~|i9{eÞOV4}߇69}_yus]<0ɍɌXkC].7H9@B;hlK	e(]&-m+fv2$6kY7lɘ}:K`pi$o?3*}hu[)}ˌ$>fi?>"с~3:9b~{:u C4<kUl]+iv3ӝt摙oѭ,g`ws	ȫ}s+NpzP}Owc(*rSDc6k.ڻ޺CY'#R]y
c#[k|IF[6D}?1Unh96q0	ITדh+$TK]bYo;]6r$M<Q/|o^ji>iv;;C\4y
<t`.[9OP?*n_?ePe#ܗӝ_9Sܗ*K}D<3ٻ֠
nw>'
tG٢з[M3g'IlFc- 'i|B\{zYƷ4sw]Dڮo=`.>1NئiGfy|kr4&IYz8	tѾ汌`yEvC>Bx4ǂ-kYn-cfў}t'꣨o~k+ eK#Ϥ%6TS.܃w|kGME|L:`2G}
/ԷlD_C}JE}L*jp2m# =
:qf}s:W0Ўnx-Ak5~~oQVge6^cd~w͜AR;jmxvv{λWMC_`ڂʘeY=f)(fyY~DY4CY"y]͘1fJ5
c$}o,Ou~C?2:A(?ÕL=9ytֵ/}9DP|3KusWz$m>֝ȃɃJ~W&qupxT^Tot73
=λ:<ҤkjcCsԼo%~_%~ߍͬ#د3XyqZ#'47?fNN<>Ա)ٝ2y'1`̂vcnv,G{{oFekovLM.ǧ.E7eat'*V3;MHjf<l$~ҕ2Dr
lx^3V9zOzF>i.w^7|F%D%NjnGד?5_.#&I8K=ڻv7mɍl1T{T8ǺSn{ўwD	,/1?0[;f=/u.Zޮ齀I*'\^k?/\~~#G߾s$sz_1,58vPERK
>.;1m?K'$ēxOI<'$ēxOI<'$ēxOI<'$ēxOI<'$ēxOI<'$ēxOI<'$ēxOI<'$衻ϘYqw&)m1o%Dx"<O'Dx"<O'Dx"<O'Dx"<O'Dx"<O'Dx"<O'Dx"<O'Dx"<?~o9ۭ`غC7wbl8v͖]YoJg^ۯFozleby?Zs}}z1̻7bfiL=;tݹzqblMio2fn%,M4w/;.I)VffR8l</9#sLQSD%X5PNJY$;`<c<jv_+˵9].q`+̀3;ylYٳUgagD_/7Al<x
S<3ORϿq]{ETjݍUwl
>Xgf[E]S]oj*ݵj_C!M
[aE]uu賑Smhpd|ݞ嶺e>O#Pm>_mܽgUW#畹tuM^[m]J"0VNaURJEK؀ }{rvdk͜D~jrWWyelnN'"GΏkj|U[j+o +}>ME@2._mcU]-yeŎ2G,"y`RwaiS
bSA/i4Ry}UUgGŹʦsˢJo=Q߈-i
$.C&
wU5
?;_=+*lHGlKBcbfd7j]
!<[k\PWkh\'I!@,ũHOpF_ߩF|)ǄAsjܵ+BkͶ(T__׀s+sǒ,ʫ㄄?܍*%`Xo0u5MF4j8Tܶ*B*$ɻB$ĚFwUjaCJ[տ]
p5ae~myj&j'/uO^7mhSâQ4~!"*q\d* UɁi,Cj]GdŠdVStޑ]XU\겨vW@	s"Q[uv(tM!"ja(jSoDD%.OxhC!1J/iu]9WR?Bvb*}Ϗ6Q6Vym2
z`c%zVMBkE]}=L+5tMx1ߨ|3	Uq9|Bsb?-){	GEw։|
1<ur2 }*E	\$}CUʾ&([zU1TdG̃BOB(ȜCQGk}wσtC[!ŒMuaĔ3n\,&#|jjw7|5k1aDW6=CDJW~1p\۩
XNOK؏BQc_qnm>BQbXƤvld@z5Of~|G=j=ĵe`\<y;.mCfBt~K!ńƑۈGVsyI~5:W*oPxTLu$qH},Utn# 7K}
ܨ }ƨER(bHaƚ_/8YowS]Ua\EEU38yL"b|>bn/4mV荕h;v={S.~a*?4ň-dF*e]^WXX]UnXQXnelaϜ4(*(Mҍ7uPWCmݔPDg1iv@Uj
"]^{Wݍ<dN-uTJd7p
iΜvMq{<ީ3y]33uiSܪJ@K]ʆ
4la]RImTi&YR	b	W4}H/T'^n#383F~p+hIT\7F~p%GW,pE/Vhx(46B9?ܴ ?_h($QȕYVX0	/l8A(~p5.ZBp;E/6D)$ERXsɐCådߖ1Woj	2R	!Ö_,c^IRek

J<zc~CÊ/:
DKn`#FE?FB׏h
5f}c\}1	7UyE.*8ݿ|N9&
|111cǐ7!<ϱh-ACr(k'
>E)aRR0sbR*Lih
sM#?w%C=D'E|792@Uԯ#Gt\yOu&["yҝ/ҥ |~]"ΓlJ
u^Lޮ5ԡJk75?2sժAj58XdTP
@>Z<_`+	0
Ckpr#+2\N4?

2OU=͗oY.>ƼUuz
-	ZZPKWO~r'ӧ
?gu,!k!Y5|V\ɖnj6u+G3~T=b+nZZ1WUa͂1'")I'"f O$4E4Fz>MTH9Vl[5"vXTjL1WQƪ&F[XWBMYnMQ7MՍX]	ajTDհ$[u
hD"
Mƭ
2J-7xB|V
+Ԯx8u}
V΅KфDUT-EKF7.^OglJG|1Q8Ib,ڟ5&bjT55rCaI(߉*f+}b_IEmxYOh׊vJx}͡+16F
.U|ߖ?Ec#6%lwfYC9n	8āǁ>(n
8r#1 j|><4ߤE;562o>7͋J-_Ln
&+Cz3&M<"0%(͓_뷅]c陟^2:u쵚]+ڵZEWWV8]\2!qWYNq͖qǭc3Lc~]Rkx?mT)~
nUm|3Zz3΅6ܙpW:]2G4H]r8Ftp7}ip3zĩy	p]up=p=õ p]pOmF'!Y]O=]rXgLkA|kZќp+ /^'͹
	~偻jJY,͗k~G\Y@;M'Jr̱޲\iY摣HP67g_VDᏘ(6c0)q:3$ISZ|H%i8mwCt=
x:%]xe Q2$ޒ=Md̀D_3S
|b{򔹔`ڠCV<#GZ( D|^^DӑV.&|K'߄O	p9<ɟ?TUצoazohMG>^?m]HG[:ECQ^DyK*!TI#䄭AFFi\O?I0)7mLޔeqi!ҿ Gp}߿?\~0B#>M9#Kǈ#L#LڷrH=B} Ҝ6hOkO^e9F?vGoQ|<-t+9֧RH^'oHzyT%3T.yTׁg]a[9H+Dd58EE<Qp7F<btkHK
b黈g룵,	Mpn@H= 
)$?Ѳ$p?6z9޿R=]
;ڋx)SOZymnhGºqx l$sSt-R1qmݐ; JQ:n21/1s~?
6QP?DQtHyn21Ϙ[ӊzJ:0]ϋxwCxd<ҿ?FFϟ>`_$YFS%m"ҟCH_
|ڋ|}&_Kt}?n`ve v^aCX֞ԥ\.4YGmHΣ#|b6 ~v5E=l>U3ׂp
 l8rv=𵀟&~vFWtv@
pҧsdSÀx}Ɔytpc<n}"ec4|!O=lQ堟ѾImCO\]4',,Tmh?@ɼr%>
A/C؟ÿb'~_v@pt3Pv_~ZU_cpV*;sǕO
J{?v93kQQpޜ)\5[~Sf;XҿK_otᣣ?R3W%aj+C"Rd䋚{Yҫf\Of7ŭ;$bߪY=tm$|H:gʌK],ү|ZL>-/oz)Q~['Eux{DIF!{Tg(1gppz;N"!]t,݀tJwt7IM;|p|+y
ɹt2\QW}s+y3WtI5[9?SwH^k&W{H%== C}[=%.#-fH7G6KH3k:oMs%yHuIR,JoD룢(n))Ζ_+rڦ^SX4Wz}6]=Q lSQ4V/3C+%NǄCN$"I!=	OP?	HP?	O
H8z@,xzfbMWłeX=	"*c³C\$|8[4+=	[f+Fbcaghxi2|G38?N_Ł_&乷R4$<Y#xHACv_!J)Mn/SdO3=k$,gGS"EfW-NĳR_M+$I	?-(C?$	jG?7Ŧ&Q/EyW`Mϐ{n2c,X5Ϗ%1wJ$<QWg&ތMI?Q)?Ph~2~HQ'".Yjp 	S}MW8??dvTvK<~U޿Km'*碤x$Ɖx]ŉ8C2MQ8R~a;W{#T$%;$vǡ]?pNI%¯qD+g%W7H)ke)7%vyWK<Fp/kFjد$HG[/7Ye?"ۋj#%^n
Q}7Yc6qZ)W6	?'e|;W	RKA^N
tՃb#k~}OnjG?[" C~Pk?^-gƦ8er7¯	[ҩRE΍Jd۲Y]<.]矧+=({$桱8|R,[Z(׎r]O'*=MMiJ,LƟ+}*	L"G^~?'7(t?O¯KnԫQ&	?=Qir6	CW^czl:3~.JKCQ𰄳?G]4rԟ_HcW
s`g.e>oX_W?Eɇ({鬄M26$6H~yR5r\T|pͷo{Ϻ!'$>/e¯E>RNdy54v	2~_aT&gHW	?&j&	P?i*WTy>eko!U>-#6d_Hw$|UJC:$_ˈ_QƟx)HiIW4̓^)?%|,$\Ix"G(]ߒ?a;8S;\Q	+*We3cF?JteyMQd6Hxw?,7a[Z	%#ҫάf	:+\-Կ!H^T=qfK9S$=̎6.c+(	ooPUxNKx@ӕ'᲼7	j`%TE~JŗZgH!I)n}]U< E~.&K=nwrI¤MO.,z

8ƦBī:Wut@O<#66kVTT
]Y<nO^Z$עPnsԯ,W\R6S	ǐOiDUy"LRxj}*WAheڲe2qPk'pSVjY׸eWSˮVGBEV~:^G I)?įee7y}pΛKj}N~uK<D'ReFwCcY|Kkbמ8oR_cѼ:o"޲yqSٔˮ=o4*jb
\CeӉe\F\q[ ]"9gτ@G߱2XFH.P ^.:ʨZMJ`lr_nSҥ+norBZ
	vW7Y2|*odj.y'B
+zqj_Mo%o\;y˜	q#]x'qyMHC^[n<\TC
\jО	-BgRAH(`T,SH=އbq\Y<p/ӧFJ2~]n=/|yohnt7.)˪Qe+/.`h12ZR^tm6̿e^٭/qwIHU:X"ҺuM75F,t_Ej!b!ZP_5RJ|V
F`eKks*s nc.YQS^Wu
T]5{(QL|m0"*^q?\UBh [qp%*,| mh^m#q_z!99*hȡQc !bз uw<h#^__G#\:Po0D@%Xn/B7a	
 \VPu-`㫪UAy*WVWIj )2".@n	^R9"inEJu%mjq
}2Z淁aMD8:%>`Jzp@MJl]ee0)^q}iX%O
L8_qO@_IƆQ{pP*1BV@jTV6iЗ"D$z%DB~+6leđں2~i|}7Ǿfq
hlP׮%THLHӎ׽ʗëЍOfj&{dtYT UFo~8?.VĚk222C^3|05`qNܿv%<&[

RբO/\ZTXTU}]+YwE-urml!r)S_"ʷFVx!jɐ:>oT,77UD2qi Oޗyv`4k`A.k,zb̢mzMGW(!^ҫ}	ԪnDb_M!]|͆ҫ}}9j!z[\&H?)-~S{g_WX{eJ+W*LTΙQKbotcjHjI>Q3D-Ih 5QLFG#>$M_?J%(wMEWD^`̤b:H.xFǷF=Ԑ^"܄7QzjJſNlHa(w*?Ek,%1=^85+2x{ҫ"38KtHJΉ.. ?geEQp>P]dWVRY3@{;';EoPK
    \               com/sun/jna/linux-ppc/PK
   OXOW   '  com/sun/jna/linux-ppc/libjnidispatch.soUT	 F3fF3fux         \UU?媘X8h'TB,*/u| @PIu(Ae=c3:M4:3:cFM3h^sϹ{/Ws:k{{w&$6/L&ǋH1TDE^b1	SfyB\ՇP~oy?!o(~'|!LwPt_qܐs_hѢ^o
6*K/+L"j!FeB##<6"42[E}-!&?z2*}<bwwY#?+q+2M}1M"\l4	qE9;w
ڕ2¹+["kCaY
WٝMnᗆ,H?=߃~6~Ǐ	~|\7+-o!~+|%=3,ω_Pl,~P<
~_-~[_~k{[_~qno#_o~[ۆv^w:~}~]|}_hu~8| v:|=_~l_`'_\=bO2f/W9-?3ਜ਼nwyY?
*O׫&O9<sx;}y=ַ5'=s~Gw޳I/k-%m};?~xX;cwVҺ>g{_Z_yw:cz)wyonW_hҵ^yO¤}⚄w>eN6ozkGvle+ØݑِiԎagǶ$&Ӝ[w16ǿggWNɏ~82
ώh{^>޵{*6=_ɽo8gxZSŐ'?u$M_]ysyox#w."rŕۮ'~-OwL+mm
Mf\ɟ?~]d-ޒʟzgc>򟇿VwMS[~7lW!5#Nq㑡~:,	vǲ̦^u_yhʞ_fgڎdl[ssޝ&>h;|􊸒3ѳ`̿G(y?ݵ绣:pYůt웷wg۳"o*}~1N}wHz*^|WT.O߫nf~}7пn_d~)hQ3=}OW.z

xއ|/
HE"
`_Qf/3po

{ޛv7u{>p'}?V#ߐ&[<ߏ/@A>>,ua>D<BA:!ZZxsW+œr/zP4+Wmg_<ʤ}D?Gy?#Qۅק܏:(L͸ܛ
+CEQ4ʽ	ӸV,k5yBdW~r0D:s0?WFsĽ)ߟV&,߿#D!.[|"L6X{(qGBD
WOSA_(Ǉfyˇ}اWOҺZwADJEo`l^Ao/Q½PK!3*DDLzU?k!oqC y2 M~3ۜM+v(US2ǿ(OfT;ErjWfA~m_cFP7SKeh_9^?>%ۭ=?AO	T5|﷈?s$!~׬#qV<E^+QlN]|:y>=ڄ{"#w4T˿W}Gr4OwZ5yGi~Xǔ_b8=Ưu3Sߨ/>aQc
&TS~w&|;ߩJ+ZFg{Ъ"
?C"^߄\HەCxժhʐ~pz2o:k/ӣy
ŇIمJY8Jsoh`UO]ןjkRo>Bsj"îB3U?+73!>PaZUÐd4{ͪʛ5?">KR'Rw?AwIY'_}Aװ|WU"(3?|47kx
~ZOAb9'Në	x97(_I?̩я@#x v85-_Fݫgĕhb:XPجߩ+ 4/Ƃ2wC6݂=[}Vּf,.Ys+(._9kZᢅ9+＿ʵq;ɬ{nZaNqq~ p_,>$_,_P_"
lb\\-%/zΥ _sj2wnAhq"a+<09OS)Oϼ+AyEXaInɒi9>.d=Y%K.^ ;w.w'@ssѳgT	r
-B@4s<[RDWNI^ST=K[_\=SJ_랩iV*be,hŸOt网x~nᢜ6o-/-db(hX(pQ.Ҹhȅbh k|i/GjVœdqNn	ؓeJ)#d-z\H+OUd,Y{	iO|z,*^0뱅9Y
O.z<_)'0.Uѷ PAB )I.rHI=P"Ax|hʋO
H`a}K<K$N"++]u̙Y9cƥ<|m>|<|<||a||ONR-9ط9ط8ط8ط8ط8طl?}J9r$$`16Eu璹s!Oygec¿V%^uTh_䩕l$'
Y-^¯^+TŃ)ؿҋQz`J/HP-[FEdg6D¼EOr1'7Wq% +e,^TzTQTo|\1(
Y^/hDN	=d̘6??%O⛑z
ayEj+K
A?NW!_2QU%+=Q/A<I&Q>2%^]~+o_io=\I~INJri"y^kHP;Z
r<om%JD6"_ʕe# (*u?+l|>y(y!zlmd-;K.)rY$NFhBxi1s
/%~<[P$@ZP,,A;n~N1JDNn.Y)/EJF/|RP=es($!tE0VQ	w0W<	M )ubon1G_KiWIM9h\IjԈ-Yݶ͚HEn<[(vS-.V:zha蒂¼ }laeHܝ>iYƻCbouОCh7?-R
2FݽS)M
1/bG)5lx;4;kiNQS}bR,J+DJ6%l=pRv"[
=GjtyɺV~^M?7 ==0s[taR]VW(`jdSx!ܠ+np&9Lmp+;8|ᝊngPv3VC{9p+8n#|D	WE#|	0ٱ%0:Oqx/§Y>{> a`Mp:lSpEc6`w!v
aض#q1޶mmH{[$?coyy[62`q,ޖaࡍ1,Ƙ|xrznc|>1>%3Oa62觍Gx6mƸu"ߵg>rY?p	?9<.&=WqW+,
Mq3櫁zmj;j_MbWmJN"A>mcא}5$'T=9b?|nc@^nc42WGy񿂰_э0Q+3WF;_ٌ0%r>_	`r`̆0gπOs0`0N|?'>0kg0kaZ 6:_0
=_<`0W#`F=_2 ՔvkF5(#0IMk0אu._|_{_{_Gzfב̌:;-g0k'-ʸ
]_/ `@:a@e@:g _za3_@ig 6mgr"0hg43_//3_>//<zر_0igףhgדlzv=t'9U;~_Ozcד̌zv=_3ou[;v:a#2בP.3ב/KȎȎvKj;%vKȿH'/߶3_/jg|_O:a'1g3&{1w3?3ףog'0ד]Ito`7@0o:
I>߀ o-:w0Qu0I##o`7BFo]:$8`77v0lon;M_&o"9M&=o"}2ʦlo42o`7o427Ww0.
vم |v07Pz?%Pv07 _w07Pt07 w07}P?`o@`oO`o@@bo`o@~do;W'C
I'd7fN3d7S\fN3d7T/::NFNb&lN&N&N&خbo:(yj?v27"Ou27KceNf1T0o~do0c>XdS1xdo&]1
ɘBbo2v2 -^!c~+1OmNV;c~+ߩb˝ğ13mɘdg3mdw	m|8˘vw'c~N<=2濋<uТa`&A>C^;Sy{ǂ|q1y1d̯p^C jʠgra`*]d)]v?Șo!|18Șg""PK篍gǵF6c]F.k#tqm6B.k.5^]6uq^ۈtq^|5jw94u95uUi:⼶
otq^ۆ<y:8QHW.kHkբ嗮l#g')8ӥ5s7ɶn2:8L<8Lqusd0v$QSZs\(sz9L9aٮ>S8L0$Yl	Î|̇9
0!kH!k(q^=aP$'Eq<a/8u8|0ҡ?J00pߍz!k(8}Cxup+pxVۭjXl-[䋈09aeQÈk0+0d5̏Tjr^P5̏Rw000000]5_p5_a`:5Ga`z5ߠ00{a`~00?V
?PMj0eqj	jQjUD5ǩH!&a`5ǫa`v5ߡ5'a`~׍vv֚Dؚ6|1˼u	tg7':H/msmmh_Ne9||$"c;xG)k608i3%p\gqIlO~c{
''/\Rt嫮3ΖN2qSztk¹iI'J2&ԈFk&R:xZFS%&pTFf8[䨺?ڔ
g8l?^C8΢К@
6h%p@)\'V|."}"KǤǸ4W}"븪4G灟ⅰ .l&*q:'<`R?pDrTW>:E"<I0A!j?a|&'Uo^>UK@>XIqժM-[Eǭt3IA>U$t]ECO1/*~5lv:37[펯XTiNIiP:RLׅgs](Ѱ::0zOO^'4NeOh&{^^JC'BĪɊx9^^kQRN\W0<](q	i>6 pýG'b~L;9Q?'U<쩣XGґ>o@zG11=}~	HOoLGqo^A|]
&{d|n]ȕ6ȸ6:(tl0%$\F9Ni#D|NOցz^FNk'`BY>֙nZ׾qʒƲHI7,˘
NC8uu<=ctC(+mmNR8(P&
Ef\L8PG=,Lec;"}doAY|V{V]kޑ+3s-
_X&DnȿNĉ:AcIɟn6齳A)E~T7TZhV'BaIj4tk!;qƹݼl;vACY6Ae?dPyu
V8;ϕ:#\-)<DuؕP:@1I||wKAg~p10}omC&iF&R'+o]MJ>]__u4ϨǾ56HY;Y&V"`Vbgw2,:)&5
LYE(_a2M?uj+]FCf3i[*q=_{+7pGo0L1ˉuQ
^Xvaɳ黲_	OSC*?uE6']RW>lO߫2ۑMhwFг47_R kaaϾ+N^6NH࠶L_}[WwZՇͻv|Xԗh|Rxp{p2ھ7?N^:NXT.yA>ZJP\#y_(aη᯷BW)0$JGwqbO/ĵ챿h`
-8M),w
ivg;G!J2;Sц]6f?ѕJ8qDPG8{a6ӸnExĄ< HG-<'­	TMǤ1.Zjz]mlՆksPg#Un7P1Mo7}Pږg6lCY&GUk~3_+<RI=< _'!O#|&trY_ۧT?V6=Rwg\[m~W)O^g,~Hen4؇(>kC2=f?#j(7/sHJ`R	DuF<
S9ty*~Oe
q)Dzz!pc<1j0Eyh.@`/t:~@߅Xi<WC@Je,C\T|Q}c?2Xّ./B@|_Q;]T7t8loF3ʂ\(RuTV^(eD!\Fdʴ(#2w1fVF|w1HK+ȳ||n(
(T;||o2f&ώiheꪖ5PVKiaFp
O/I$8-ҧ_ND$֗u24X_'xǫ%O53줋ge
O+ǟy9ywlTIgWMɸO[l}Rf[2|H1O[ʲ.*T޻ql(Yg"gs.0ֿ~r*xԧr5`dߖpI'>=s~<
e+QDL RɓZ)އG+mҠi2Z*ZNm(wo7'<.]rHD߭T0wWT>'PJhG9{Mqq<2<VeI.>yٷϹasnQ}fx53z7ti/:w^!k*#ǹwzݮ~|pYpeA:N;qS.|c׫lǳ*}|1C
zVT8:M֩Qvl cBN3Kc-3G+D5u۲J~=f_6Gy<hz
H\4?o3>&'C;$]#oJo҉UI}S(͔F8FbS+ȏ{r[tXߒ%5ͽz1tE4.?#A^CQsv8SDWDSzi:?.Z\lvp??v;Nu:5Js҉jw*r>g>6jAP=|=X.['!H&uZóL.t
2˄/\(Unñl)s2R鿼f˛A-Os	wef@{p&00ObcOR8FM:qߎGqqNW4P;ldsj_WuTkDn=`7Qy@)ͣ}mܿkqX|00Q
﨎&;hC4`OG ?zmd ~6mt bYm\ Zt	K/fh~qk>1#Zzcع7(UHQCx<C{I]<}:aMfOq/4Mى.dl_W[<\D}b9obۂxj |1>X\ԏ82t"i^>A4L6Й)t
ta$]AwՀ~3.@wof4}v
tlԕr=\9_	kc\1Q9?IK'2 ~AW\Lr\7Ncv;ԮWEls{>	ZY)f'+~יF4cuzls۞cȶyl3M[g?y{ms˟WW#?5Ƿ7sn>&)ur\d/y_Pvgyes?+3ypG$1j]4Rgmjqp-"c8tyv|VoWQ^9ңP?	ThG <m\:(ж_-˹ևqJ3tX?Z__*zFͭg`e{7(^שׁτ}=r,Va^N_*ֿCb;:n^h\c0K,b9:R`fm}{Y)pl[եzF/җ}s,sV[WoRd)Zfq&K65-%kR,59ǚrsFKժrl7nؒN9:n׾mI5tm%[%Iђ^>üCMz5JonbIXk替QT%-'
jlrQieZ9qW7ʮ.xS]4ϕ:?: <
v4VH4^H*7~,'&7rg\\S:SV鞅)7XxMX)m8Z\sx˲$4GCS("&},)MCmy^6ݾlz_mbC|wM4ccCbʧZR"6{}`/'l
S-6k~R% 2&~9-8(5dkC?T?F	y֦Y+Bs(t&!3hcPP-1e54.ڍp7Hgۖ4ױKUx&Y>M=Awn_HlZp1Y[E3F:*?N?\~%A@c=4ހ8'Ze=(D5AE^Ұir|l탎Ms;4X,4&̑uzFit]L ҽTVe!TdP/O|1^C|'MQ~tZ_=pQpGXwtOkQɼNsƂfߴz'Ə<٠_T6 _(2eHCZutɾ2yk3j0UKrMVNb˵j}Bx>˃<X&3\>	g||l\ߒ?5a^djLVL=L1آcE˗\.|܆w7I?MZ^$ڽe$y\gtxb|fR"}+D}Q4&D)kMsN;l/[*yaVNiw6	
z.^纡(/ǷQEѷ4d-Z~7t5^zڨu<y,s!Թ4ޭmY륬^?s&1/QW@661ֈ"$b!=uKe|orXA?6l󩬣fgA"Ρ}A;ȣr\϶
OM)MN&qPOi4[>hsbKgeqWqm:Al1_ZFfD
]\?"}`S:ްbk$SanU关6;Z5P A}(}ПBgЇQ?^iޝ^-_ჾ=1Ρl͊/oqC@#P5G[#mH5&Ie>8d/
}rA}T~.s2jEYn^BRxie>>m#8w1M>~1v>%zIOT3M^ೳ^u%NB&M&MGk-U0Z=Ey?7%hh{koh͑n.8o}MVKHk_*}o)kk=v_!Բ=mR7׾(,TzoV!@~Y}wTyWNs#2d)RG'S}F4_]y2zo-QCkM!N4)M|SߛfwKԵ>ǹ|ez{E)7Źyۄ9,o  YW"x+sMVC}dxE^G4'mR2)ľV[]W~ڭz=y~tA_LiL Nh5*kÉo.ٷ"J?C<7
s!<B\U/D|U,6sJ(>g?RjO.lF$۳FxnRiZS*D]#>W+q|
}ݹ=hoi79^0@ n/؝O<oֿ޳5{kf$n)zߏxk{b	U?άuY2%Ӄv@v2nl;A4ֱ;ǉ\G_G~<(kB|A=h+;JԶ,KAGA)sӃ}-w-ӷj0Ї#AWs344wf~t z{ⷀ$i.5Ig1K9i?T7l<{eq2ݼj'~
_2I'~'c/y՞7􇼖u c7yP">]Y-~wG_ןgyNrYt6l3(̒6mTImhM6i~*-sMQ%.Z>]w>t!|JKʟ
˃C''%nyj=?_S4Yf	>DӷDoc0M"
h{҄R{XC'N屚L)"tf_ƙbĕ?eu)"~[۟LPF\鸾U!Ѹ
߄zjMZWM\U-} 
۲Wb5+zjK>)|kK0w&m¢kfLOVa}FPvx?{"ZQIzU=QTn!`'L}ZKo,nAͰŕ?h㉛:R@7D:N<dq5=.(,KXG5~jkT=6Ľvp o[PWwm
+q>z<Kd^AʞYS@k0>9NR[CmLmmojsJLr'$S4W**ud>h`>3r8gabiP}5~	J~cˮ@DQMBqʜ'ϔs<9_3m(f:;w/!wLfV
\\Is{U"lu7G=Kߐ|d+@[{
d)-2/=A-ߒ/mߒCtOy_'|D:jVʩ+.H}~//P}烿+Yw7J+K61pP
w_1]_A>O繄o?Xǿo G%녿]տ?R1tlBRMǖFG3Me?}x^/xaC2
z"mM~\-)MC
is$h1[&>}C"ۖh燐F$\rxKЬ9*qox7uJ*!<W%S^&<'MiO﷡n>f}*g垥E'}eIv<rꌾ+#̠>w5q3DdE8G-mi7IQFmm:5l랫0p"˼CiSP|E,'Eӷo:j7MG<>6K$ZoZ~h.H}lSW}$MsjlT:|\s4eC.NSϪQp
IL^{wMs$ɣ6|_;O>e'LgYc/f70d>h<%ݰwTdߦֵނ.wR{2G}$4h*g93
Y	}^)qR`gulk~oU,zhO8zF=v
W17:R6s;^U8pI}iA*a ;*^|8Ig|q3g;WL\/8tCaY'IN"zCx~Hz6!+">\K5Ȳm[>D6|a=qi[ҹxCs>p0p
j1ܗMut~ttѾ9CסKCנskNM2Iu4Z#޴3LsdnAY:#:F3Z活bSb={2c i_OԞK39^}ʹu0"#q65.elY<ȣ_qUI_}΋H_J7Ӊc5s|Gl4D0ΰM93EeitFBDo~u<­_iucwg7HQow:/8K\=2zKϪ\kDğS6$S7$Ci"}zPO?zu].!(iwMK+-o_`K	iw&Cc#{f:[rxfȸ<pJh{17fҕPO(y xn	ՃaVΗxMsx
{Z~c4{dr)cm{ޠzVJ56q	^%#ǸER|,C߃Hu=T?K4j񵲨wիA_|~\α+d6<=h<C~IPu?*O󄞖wNm9oA߈Wou_4~ ud_7ޟ7=0p<o(u/e9w2kOU҉7SCzCx`H9͞K=YҞЧb-=#QdO5_ln!T;7Ij`[xKoCϫ@c^w}y&ߨ_랻n+@Av"=Ƅ8?Vگw67ӣ0u/N~e@
2߬[/]/vw*O}k>60}ozķ{tߞA	N/P[㩿R4/5ˠqT(Oޤ_r_Y|}Oui{oCou?;2/.pmryڏ{wt_7Zj7̽u^!].o>DEHZ=GIhUN}kqJVMrvȎ6kjO*}I`iv>·iv~\Ni%T76B'>r^?yWxuT:TGܛp_gu҅tNgp鳬&Cg o?~wzSo]9YXX?ŷFi6r5ҖKuo
߃S=ف{%ol_:_Jye_f{ˣw_G:Y1Z_՗A7/+OOwpz`{aoH߁?^eK.jצ:?M.Kay2b(B <n3Q_9k^3|Oq#Mizl%~ZO;{2Dfv?s}ri}Λ~as-X]}[(ZKAs~yrqK~Eǚ~4F~qnT{z5^~C1E
٩ijKpcV7~7x}_~ϰkl	MO>6@Ѫ~=ԯEGcjT_?=c.{'Z*e;E|y]/[kz18y{klKj60E#lsbfH+R9͚.TDo_oE7_[/J1MQ=RRѯ@o_g`-
Έ]U+}wS{isŗ=
o}ɟ9DYAG{A|vv)&π*bxjx=oquKeWD_?7|`:J]=
zB^){~\ғ׽ffhՔ{sgHuvYmpSoSΥBZ" S$ut+ODůyׅB:Ϫ앙a_y?/Ƴu"(ۦ?'I;Пk]8o*=ųutI~ipM@GɰUXT1n-~9nYۯR	i=!m}?ֆէm
r0GaJCScI#(j>u7ʱqiה@j-:x㘦7
TXi7j4j`Ϊ|s7ɪ~Vc7K=~vʿ]~v.M?,
L?/U?Ho@<e|_ߏ}TU7Ku >C#40.0Sܱj+|u냎jy=S?k\~R~Jm 7Jǈz:yM's1Wk׆kyc2<SFߜKЏSO|uHE7~#E͎Cs>~1҇>ieD` /%RT[7?^n4bh.^7/>d,p'Jx?vc=?۵Ŏwǎ^~/j/6Z'߬(j{Tμ}ɿQ1\oJ~xɏ+Uz[~tu?w'>[xg*rfZ?6>kt7u:ܣMld{'.G~6$ksll^ChQ[&*hgth~8empuОt$Gs=l)pzt;Gg9
3318{ѾmE>8_tCGVoWkLbbך[tbA<#yJ+9N/6uO4
Fr?əA(:8<<[>STiAחC;|ҹ\8O[Ǚ<Su6[mZ-}_,Twt36^h{A6-l7Ɓ6m!hhAkB^dy=3rϦ3|̧OISlIk<=t<<(tJӰ"NFAg7@kA;ǋNVy"2Ю=_:J]/}V
t>W0~d|v	l0,uM'^l|7H3mmW6@
/
GA{mhwrOIqЕ֟||NC:jOG~Niq3CODwŇ
%Ί?qf#N?)MΞǕr"|N̽r&EH?n@齃O>
Nҥe@Ew"}g8-AA|j3@qdHNB[")Ky*2wֶ)P7IXgAtNA<g[&#?Xwv*VIlX"pds%fwߵcuK>Ag9V2OsU蜧egq7ɵ{lBs)Vk,cKU; R9~hlZ%Z8oW~VRk ]Kg<G}8^G)~^'N:we7@_&_q^ާ{~BkLgj~Fglgĳ}g³*~M?;6~V>-ųx~v㙊.~vlJ,?c-G{3e_^0gByVs+loY`<"
l!`\"~s+B<_ݩ?$j^/PPh3͔vRImU"Za~S8~3^~Bm)?9E2n3a䱟l_k:S=eiy/*&k؍g!=f3ӂ'{_9*kMS)"|0?Tߓ!!w%Dv
:;0PϏ8Jw7)ZsKqq'۾|Ý&祥)ep(|QpF9'帙AIfuz}P:kIL&
4I{>r]#4qۗ\}Zh0yESE\1>@?^su#)4!4]%8e+t<_*_-7O~;<eAYMtǟ(k_4MLP$rd`t_|aW8Mڑʸ!	.Wa4ſ|LFP]2_'|艖w.^dzzu5V9r<)<OsLuOd
I$G;u!_Sנ?_UU3$q3w3GxMz{SPΑTW	˴y4Q~DHmJُ-ԷXݼ[=[eG҉wrw?k}g"K?>}:{5}{SVǑ-lR7e? }h3x^{aᗉ<4{/?2?`o/;[)/I*(k9<Gg0~iI'f4s|rܛYx9_~TQ%9v~NKHJӨmE*BA7zoc>+	]>>]>
=|u ]4>z|o1?}fb~]>xiMā~{?-~$Ο~轪?}x:~v	:+U~/4߱'(af+U*>7~²σ#0:Օg`a[`:HF鿢H|d'2>e#sJGfЌ<sdOsueFDfI2?#3aAd&e9|LX?2ç89Dzdc$*9iDw#L,Q?2ǃ.}&2Ȝt(zcQȌ
cv7Or̕34f
>Q~d<pQb8QEq[SwL^/}A[`ړ^h6OGƴ}^hV7´4h-L{-i]:x6f:m2ӞBl_ca'hct!UyvWJӰn6˘vx
B[5І86lVCUu@6!2D6z %cKӠ
S^϶8x(7T%(­c:@UJ=OFҏ}Hr{6F w]qC<h{E95ĢbV/(,=[tq׋eoxm2yϲZ|SiLGkc^hA[AohuJd2/!oos_gEYI^q5;ª^Wv?ㅶsl/urP煶إ1жU6v@\Uv3hMUEJ?^ʦ]{Lgd;Z3Yr	M<
.%F+"W9|/\7m"[S0\6JXVLp
SB°	gM'ʸ:}sNN3]N/:\{5Jگ<\ڍn\w~-ڌz\q]?ո44C5Js,q
5WZSk5W+qi28\6\#q5rw|:5JzLkq=i\[q>ήĕΞD+NJAc33qKځ+_EcJc"GJ\{qE+J:CtWJOŕ+x#A+JЙF/RqE+qG1q
Κ
c|G|$-:9Jh5k6#kRDךM}kEO҉ԸiYEFBoD!i>FZ_UlΈF~[s{-RUȻ˒T&6'Y5<Ҩ4BfhQ	X{-uZ9A7,Y W=oyם8ɼ;AՁ~֔&W0jqJwh}[ߍx~4'~u^p.yVΫ{ ~_M23NI'ȤC;v8RƆf.
OHr;;,σOJt\'msgGjN'I_	L5t>!c%ۘUs	L)Y59"&J㚊r\Z-]BD%=,֡ee
g~Y/IysM,%w}#/dYaKɚ6K5ٷ41iܼ#Ka-]5,5&KpWCoה[k6ZjMUYW,G[2WXfαY]n^ђ2Műܒt'߶;Igy1)A}e'ߒxQ.۹3Ք_%!xvm%"!|rcDcu;dٌ|\Z)'L\郞NRii ZƓUSnڢ
zrMUCK׾I=f*9xqԙ;dOE8{ҏzY&tBI,}v ڭח[1Z1Qx]G?_*y
v4LPY-dweQgɪiӄ%>שׂ~$IFP9Iu˳,IdS;\3d}uM~]?d:7Xz<29{KQɷΒ>'=aM=lL$\ڭr!,Blܧ:vҽ/6	
sJHX_o*o #.bU#1mD籓&-Kꣴf<D]K_sه'ItˆT4!*
@&{?Q ˣ󐢠t5&~%urߍ{_2n"no<CcgRٓzhg>~hg>_-˴9͕JXbӼ~|҂FsC:)c!%iiL=+.+dO`	ic9]U5;]O!}AYiڬQ۪ʧD0Q|饛ҥ{M@0C%gu,tΙ\KLk>a7/9Gx|<9Bϼ6c{QW9?|:sȲugZ=7BӼ,O =»+[ߵزE9-i>bK|-S9|r.қC.1@s 3鉡66/TШ1XfR?0F:pt~{rύ	#?HΕF;VCJ1"%/uO:6ι?xcxF{zsGKiOgѱKOއ:8à󬘓t0
^qfjVtО>y!~Gk9K6{ߖj]ZƁI?8sc=cҪs[g<tȴG;F2_F7;D]$n+FNٿ%+Ϲ198z&g[USwܻ9JH>K1S
|<^~>q? ^v4(ly'>/m[F{
3'~%B2'CIgՒj]V<χsضun72++eQ(~slNMqiE>x|kނvxs3ܳ^t=M33iN{>FNF]&\VmGgǟevg%ynN#I>&.pF㐪)b>맥%#R&AtbXqCvi)"{r?W= i$ݎ.yl|Mwm$֏c{oFn:[9:1TMzO{oUu$uZ:0
'`@d LtЙ̄n'[a-*?l.`ݥ[+Ѳ[-J|;Ŷ=9}|9s.9>q0\}i-ΨSM?fRE1nY<XL>dcuwh>v4!}p^"Z!;d3he2rQ=ԗd4_?+lf.ɇ9ć*@S=,u4(Qmg|b'#oI03pwԅyU-]ZyY/5ƗhcVo8"rre[|,c%ݭȗpVjAе?Sz`;͖w{\ex˅ݖ_H<I
ۛ}ƞ;Ro5C/SqGZkVk[9su7w8ͺ얶̷%=pY9d'v|&(x]6!à>Q?^(-.eN
_
2x|Ne^aM]\l՝0c"3 t䷙0^J}eQ?uMNr
m_^x)}u$`ny6
kT'xi
;cKuJi<5E=8Wt:+]7OFg~O~|z}Ug1ƵmB)|_wd1FW|IJ.\Tfr YKZwhW*͒vi&]=rx|ie1vz^vjzC~[g%fH8<NSK;Mɾ}??|~ԗWXd[B|'wd Fvim;|Yg؄Fc:3GOkx=M5|20;ƘCl"MDdG~ľy]}jՎ{
||j
kNҀ3u
󆊓?{n:g >?qhH+CJivD+ihSOiKmS$U#lX9*#ەqP%?VPMxgƩ)l%FZ\)fU|侦S/;nwff\EL?a\l?Oܬ7}#ɸO(妊ʎnw&\bDmR?.L)BWnghCCVwyUɤ...sYPҤ>̊\z&pƬw1ߨdg>|V
[A0D7itPX<:vpJ8I8f-T/iNH2BsJ:@kjVF51J',|t5,an00#H{WϐYoߏ%ݧ~g-vMǜy's%O_Y*Ku6ZD|CgoFu4D^sr΍˗!^B<}xct~=RXfXi-,TX+r9Ke,KmgsG,:^8;޳0Y\;(wx,KwYJw쳔u,;TuY潓kHywD8.t֎k-Q"?s976~#ׄ|M@=ڪn66B{őzuM9+YBG%MN;!_\I,VOWՎ,|W$$~%y<H4FS%λ~uf2+n|'׭wƪwaVCym';:li7j:\K]01x}/{,K6/CM3%D*Er
V/soȊϝƼ?x@ïN;,O<klA=٦900MH+},̅{̖d[(ݼy/.	w a9o}ډ%}b~QKгվFsE[{YXOH_
<BiWdpiǚQ%7{=g}hOKg0oGwe&Wyd☼3f~xĴA-Mݭv7,R-%}DO=k I%m;q.my/<i;f5E/ 'exs>nLS]to.ҷC~13/`QL24iLݟq'jۡoɶW>K|"M81s7<o_Yo$Nw_!` //{<pŇs)5|7DB*oMٮ(>~$qKo
/tS`[^$6u{9O?	<5*\7f#KyyznZEK1KvBW׶MdZcN=ZY2>ߙslx!\fُ> _9Px%C.>)=A0~}'W߱DUѫ&AxcZ[d]!A>\V}`p.Q72پf:ީma96{brGoψP?>F^4DTu>~KGdS@iR7Gߑs_Aopu.m$.pC|'|m28?ᬨO=ӝ*.ƺ)&?4o6/={_F?5tF[
iMlhLd٠_
з}
y)
0g&'CQ߈0ώG#}%LE)Q`N&Ɓ1ȣOMV$Y3w{O0K	˼R<3\ozY䜀Q	YS*՟UGWXhu~ чKfRGgk?TV>SqwKC9zI%#2>ۑϬG[;.{y珞'/>ޘx:ƞ_b^Kn[NlR1/gVnsdb}eE-4ْB?>zΝ^9޳4E)ݓ#%v xEAyLǻ=C;;1g̽L݇"lx[G{NOGԻ,8fwaswX־<k(Kbtd7&-ߞdU ߹Mkto-P9.H62_Ͷ\_
^kmsp_|ek+t4lwzOcg*b^9>n7>ŊqކxL<׿\gTXwNf3LQh̴}E,`MNCISNG}cG(kmY*oQHx0ud\<֣O"9g#T!D(?Hy	]Y>sn|>eC)hKʹtRNT[2p
}tiuRZ9ٲY1(k >Ʀâ#)@hP4>]Dǎt4Hb^_tV5w'  mC-}ԽbEA]nw61OߛҷJy2hms@$,baqE{Uli?pW̞;0غ/YpSu߂|kޅKd+h.;*m>҃߇]]3l9V#3fZrJAbz6O*O3;4avqe}_m2k5a{*Ӝvg%mKs$uQf	}o:׶Y_Yh̶C7mqR{3;M>p
6}p8 GÌ)i`(l=o'FP3
6ҽ,޿m>ͧ6Sh+u kDmZ}}+2~:/ŮEQ0Ɣ:V`JFyV懂%r9)G
Wv0i}EcAkii}&ep'
}d'=Ø|{/p9s"ozFTWrakYwڃӸk\޴·a=,pyӞ:npVt/hr,Qza:
ى707B>ػ_
(Ws%ʥΨ
| /ŠoJiv0t;sFeg$߁9ᠳczxsJǿ o?-ƫO?CGܥM(۩9߃|se	>N?vNX{ՖLo0Fq<oK@ۻ]$7:_Pq<#YZtPx=x4rt]О]M]{n|&'W	&!ڬtX|*x3>[Ѥ+T4xQm";Mi,7>52FďgtMr\1$98 w
B?S_%
̈́c"/f7s(ئxf@yI*/!I5_:	7I/	=!!޳|}|XE:
2:灿e+(؀3ke+*ߨ:_r|Mm98t^.lu^7j/7k-x,>S#9Wr\-䳄zAr5(<E|H&,Q>=m^fw^NKov0e|	ZsУҦOE}g2XRbcwxu	C'|>A0q|hBu
?;ڒ9x8|	ܻq^JgiO|B09=+na9U߷mM೴PdC~IF_l.'Y42md	O`R}ԟO/-vM0&X)<'#!{ߺ?=6mh;
Ifil2:uB_xNwr=B?-m\,qe
?%IY+
ZCOD{QS_l}yu"[.0IV؊Da.Ȅ8ߞSvA&3Ksٗ0Ml= Ӛ2Hk}na+0c0[p\)ټ,Ȅ=Y1>)$A1|3 ~xKibß]|r99;/Nc/thZ1}'8Nq%buVvUkƕ1<ipK&!`|37s>ʣoZ&
}K7`-ys?Kt>\';VO;`i]g?ڝ@4Y`xv='Yso1x%g8HwNAvkk`1p;%/D]&Єqd Pt6Z ЛvZWr^С	yAGm.
.OؾK~-Z
7'	K[=W`R[J_!g)߹jOB.m/_
C-Ƹ1'-tzUx%xw\w)QdI\{Fw)W)uG33茽]uhx8;9?6&h>8U=H0+6:ًQ10Ui{'),hp71wYAN"g}9),JdQ}ʻ[9?WZg'!샎ޚRoE8}24fu!QWBy0ڙ{lqœ=s_#ζl~oOy!KoYf{oGyź@+w	 N/Αp(;s|3P;@ gS^vjeM	eƺ&8~&;7n.iv7+وٮ
y؜&E&ewJC=vmRQFSx9XK99=8[G߃ !=>cTuQp<rLϫ0ak4	,(klW$+Ϗw*53]Q$_+|R	_p\uK7e{ml}j+:,d &Spz3H67?v?cpvGf'sLJ~oiڞS&^3Gt'XK}Fn=(W;Ju{]nCYC;u1Wrb̻ƹA2G1C)XU|<u#~NK+Kw=7`	y8~/C떧#_0\S KbL1rs~dvn|@Gľ3\8D2;%}:}+aiz~W }-@"f#z=M	6ɵquwAaE2(8gU̱^_q ^+rö́r~ڷ@j|Ra[H17t͓oٞsJwd
z˗䙌rZ+s6E
p7fۜOMn{ KIۥ(7k@:n,ugnS*:@T+a^
]9G;ZnL߫9̺wNBw'.C K~RϪK9V llzO2uwu4=@D<̅2zM{O*YgVK3]xpMgbS:}Le
:&J}xZd=KD?M=Ju]|#^9yr@]O8߇̮3xȷn35}1϶Ngf	>OsÐҜUbM}_'565Ak"3h5bfs"`c
wS9S1T-=)NO~"[{jh΅9>.+B[OfsAٔ7#}҉q<}&xU|nTJiͲ\;y<>3(w{YK̓""VsHJyKawB)~dPΛPN33!d 󳛄OҚ¤|M!3{JC>x8˓̴oFk[h]D\/MS]nZcFU`*Ӌ{RW'4"pއ5ĚJ}0uu`2%d['IL6:TWmԳs{h3ߏj\Ċ95`v=3,4W	N+uw	.4g#,-h͵~ɱ,O?nR#C{X*,݄|<x6CڷDy?>`M&/r^E]T'0w~6Z~}zkfKM=A魁K$tR4%lG%~-Y#֒B霆eIJu۷bϴ'=SV-sBծlڋ"u|
m}ZYvȿ|Cm=>um/%Zrg,p]R,_f|'Erff7=ZvL:!F2/ul|'y5od~̥>]C7.WŹU)C4NcAHeY҃΀AZK+5RZriPZ*˗5-TK\U\$nS6h{dmbbNu8w`{(lQ8>cLݤSl?G\StOOAM4
C>ҋNXx<\MkMN>NrԻ0wZTtMznM֤#jq
K]&IO5iot8RhE;gЦ֜kғM5٤$vU=Y9~'.|t@}c{iD7rJbn#]aw &/yڣwusYN^Gh?8RLMg?3i=ǡMؿm*ｄ׵7Vm	Jۉgn9ڴmJSmn[ؤ`ƛv3;t
@T.h1F-f4Gr91Co֘(g>^m&,Q>;C헪1hK{rE"Fw'/! I^֭
֮:֫e9S^rt,/f[H̷cdֳ6ڲ66S~%j (ku&;Z*?^Xa$%o-޶ɦdyn`Gre<;T` ~Rp8vB-asXRho)=֜Gosh܍MKja	M_8J ΢t1.ݗ&~
vPf._q=-{oB
0ޜUPS^ndljQHxF%iڞf6
BO][<=UAodAoH{~P,TAI
^XA>҃ybNh__/}W$MV.U06aKO;Y,ٯvJ~NKj
YgitmڂWCH"?t33g޶nvAxLs"AөNΊ o`3+\/_K|G'IFr!K3׻opk}$o`Z"=|ݪL^QE7Y%M"{+xЪ!Zvg8q=A{Þ 
ِ?+v[p|iECV
ݳ=>~T~ݣr@q?O"b-4W
yV)p
ƞ
l9J=鏲kW(r3Mʎ&lAKJ9<M.s oqOպ=oi4fS>[|_Ն9
I|}pΆ\猲Um1tcGq^OݏJ

/q c/g7y4pǀ7]g4;DRtX/oı6_"'ba,U? u#{`(t6hThesDG{=GL2?!^8$;,w	sdxQKˇܣv~o5|?B-lO\
{N.|i͗bq3ǟ&8J1\u4riTEsʕ`,@A;4UK;M.`SiԷOz8xځu>Sr`RN߿C%п0ׅ-v![ZcIv`L/!9nO/5KLAn#yr *<^.q,$فcAãgv\iqS97bsæ(9ZHζ#؀. l0 ҹ*;>3F}(U9dD 3|D9uiXO
d#	.AoRZZG	K<GUyQl|p~ՕA~nC]iѠڂ׵)_؇;g?d>)}
/sm)3{PɢYYܔ-t4?c$}aG瞼~l4mCq?fD,Ϣ3u?Zn_	υ>ى~؝k?F<=ؑ쀗q"wi\
<	ݠ4&$B?|l9"`:H=^t"SwD[æsb^ϸpZ'EܩWtwϊrQ_m֔L/|#V	GSΞ
$<R特3Jp}gH|*JS?9g_mҟyRn<Ku;˦'-}c4	_<Qڃ2SvXt"!vE~v
|m
Ӿ+jC[N߰Of'gn c9.$vj6-u?I~J/v
W7ۅ9}'` g{K9[
cS}I,:UO(W`r6T	7#ݪKzoeT$1~sH+
+WXǮ,hD}O<~p3ut(+19\yRxc^4.snyYT@Ս5LMx&L:;lK5P:ldOϘu͓.ۨBIo*Jʫ8>ʪӹu=kT`G/Lx:#5=.{H80sk{h?R݃/a|iw;0ΎR6ۮsiƚ1vmdYӻy]wNT&AOdړ`ˡCyx}c><W#27@ק?O?߻%I~'aMZ*^{I*sGp's>LT6_,],]_Vi'doe5hslb{L	'LKfQS_߭.ؤ_0μiO2f8\f;1I.C]?w>y6->Sz/ste5ޗrߨbygdI(IyUBt5t.[(?aUvN/jC
A[Jۙa<98W}]ޔ]|EgLTRy}9`_
޽Ֆt 7-\=٠wswr6Nw2߂Qa o:O iR.h-!=2=
b;Σs3];L̪#Kr9s-3mf'yW)[r?Ur_RzB_z[XY?O=O(w(=1r6wrfc.8G9:3~QAk>=2,to~"ed55vZByt޷X-΢y|Ŧ(y3I΢1=#~6-tX t9~TH?zзNz	InT۸y=),ƞdzG>#]cQ@i29O"Pp3gY]0.uܫ\x!mͤI>ޟWz(h2_?vXJkyЮ'pm|(czD{S)O?xmѺxR^c0Pe]oOK8>$95:,xlL<;z<'S8}+rx7#
k}6Փin	%]ST`5~O&G{k`5o+d|"/[>&]eGd'q[ؓiqw:qo}L*#,@X<]3]`r`)3͈lc،	>dJ|oZ7nte6t%}	]G߰)+WRacЙЙ.U7RZ_Piy
</L~=4r?X߾XwrUDf9%`N4/
ߘq]yNN`yk1JH3<OHg]	\O9~
{uznweGnsjgs~)1$su܏Gٮ+;N蛢t7!o,tN*[إV1ko}i
EY}77ehZhOwu'¾KoT~ofbo%xu9/\ơTPҷ6cT[lu+V.1Q}[k,xCw<~Yyd&]s
PAkf]g\qH}&{/aŦwjfo ?Pأ0f8l?v>q~xz4s`;I9ד}#}e`x`0NyBOkڑsw+^U`x59Τp@	CF3)#,`+ҕ3mJo[]ף,'_SDzʮ.-3~th[@9e(|s@dwDZQǏ=6ѓ,52Faޏ9}Fw`|9R·cdƵO#[]9}|^q<zN٨cLl6:>~?ϲ#{abS;clXiز=uOcOVabWX=̗`\v-Q>Kl1qs
3PU{&VǑp^"T֨wxOxO!()of}:W&d֤Ooۏ1rC|hQ1:SC8*:O?xn{.T]xcrM3kx⏩G򵳣Lu4ok}76VeW7539
FCq!l|33dh̐;
]
"C{njo!~?h(oFCXQC!cnho!3+
n6g?am3򧁿6шC<l(o1o16mPo
ag?3rFcb[,T/1toE!!EE8pB8Ig)z!E8pE>F؋Ѕa'Ba;Mac
a5B9J[Ϊy":$}Mt-/ܧgJbsڕۙ)Zn^G=~U+hKsZYaҾAH+s,)<|F<oB.؇O(ud?{zE<٦%~rdc(o3	!OQP/"GV!
!;\܊bCIEI=E2L@J-PTOE٫)JCQ<]K%v-|YO+B:蕎篠V#Z|04{kHQ[P0M#܃P,ߗ0\O>TV;=_uS58ZX䨬mhni:=UަYa[д!ZUmmCuУֱS]㩼Ѱf҇kz:O:	ު(|
-UayMZuTpZO 8xX8}M(+#2?੭}sx*+lHktoE}a]}C*mŷ;ִ]@}~}sCG1toޑhQq¢ř,/@:OmaӺ:^6R:IKhU][S_#jU
 .pm}taEF<)^NڝD&:zjjь2হSClj&PS%cXo374unWmm`Ku9xټ̡$HV%x@Q9^e/
<!|NTQEp#w\_[eƆ&HoU#(9j6p PFr9_Y]KBꨪi"R=@TSWF#>45y6DѰ穩W0+["3C" MPR^_K#{}*ͬnfsKK=>.:XgD ^`=#	~E3 C(~_W1iNTaIb/Zh^[ZZS_|fQqsT[!qPPSƓHTzѺ,dB,5'1CzMÖo
:0C@
Eb(a
&/[*!_inlh̻biT}
U
RC1FԘ^,2yHOQr6o$xf2x3 Ѩ9ssg
2>
_7U7J1.){"jȫRbaYEHO
qV:!bMt20}V߉PۥqTAvtfCyAaIlbeVWXg_Ý77Z?H/^mC=ӧX9jK7E,HLa6֡uE+:FM-hkYGnk0닐Eg\
Z|qMpd(x(z
2}0bՏ4M(?9qJՎ ͠,s]Wqó1#yqSCKhρX>[wVŔ6cTSGmLzM(6}ؼ|1)on0YYxzԹC\VQfCkT?ꁆf-))!6X564
9.5>hQ1U>1N
Is471B
$Ssk|Y5k<M=jAtA_V3»*{}x0>v64ՅF%1*RejQy548iTyH5ܢҋYSտ[9kDg &|"Wj@tqeegFޛ׮q<g֜ٞʪΛ+o3rͳrnQׇYBQ;+ +Z c)nPY

^OXȸeMZ>tLjhCZ:=\͡P/d
>oL;5
YTiJJs$/
f׮mbq!kXW*|ˣkCƴ+wxPF,ND-#EVNN1
-MCŴS%x%yxX*P
m׈s>L܆Ɔzo=rY
|]W	SbP-=7d9LvT-Gm̆ȡDȆ.VW2qOo酄aP		"1c^o@~}UQQ L	h}Mwq&N;FУ+C-i4}{uXv:pDN{-.d_kgjz.y|."4J_khhw7$;_̓ڰcfʻw~\w k:#[Z*^-g|.OLQfuwm
FzLB̔65 u\0ĦJn:Gn^'czQUJ[#,vVQ{E_1?f#ncf-7].%/$JJEX,uӓsf8=)~\4X2j'}cN]H~+@4/EX:*:|@>wM󨓞ec:~o _mœ>ЫŇmt{iGśw,'; 3lyŘ_ۉYi>!/;2AuۊzcvVPn@Ϡ¾,[A]V(t+6
m7y[j}sc_yVCAR[af,^}.Q嚧ѐTMXt kkAT0Ȩ(qߝhl&#}yFbN*Ity5E@T`^w5 'v䫼~1>9q A!6Ș-|dHkHG	z拮ϊo3~OI˓,U;I6Dqo&~o%765Tl֮I-dzV2x
<_]CKa2imx>-+-*iꏙxfy*3OeƝJg
q7?
+O0,B
Jeb:z|ŁP*+LmCW_mDcÎQZQ#+0ʟ@]џ"D#"ؙ*:'v䞋ȾRQKĘ۾3	<j$+ʣ6<Qͨ'D=|EV6g9(P8˻@q0]O_OD}F<'9v0\I!K/Cx$ck'ഢ=~|xN1I}#2}Iܯ =vͫh?ko
[u7LQǣ@ƅ;%Ph&GE%ʎ]Ʌ(
eh?Jma؝)e'w1Nl~baѻ}7'/U_֙ywP
a,+]:wY?D5v'1?eZ6Z]Vsh=4_<3EM'23%
dBiڇ{O&.t'W4Zc'_8L'fP]o&|4µP[;(1	@-(4'H(VKi	|׆`p;	(I-R^(Pgu"QF%FX0~|u&ro;ըUI͗UIZA'eK8cҎv>>[)Dx[eQLvRk%poJ
C_LU;;z.2&b1JeG~Rċv'X8_0}H<fTSPSa|4_e4P[K<AdeN^ʻ&
Ue%zEub؅]ur=iVAj">%yQjEoPm	d5qH|ès@`:邸_(_O*jeEF^={Oa\|L!Su{;ñ\OI,DLt8^hIyjGΓھJpB(`L~a,Ei<G	YEk_O/	*|]Q?
_9O_%yΏ$	?7J=!ƕ$-?^r$
 I~`'SWkB#-#BK9V?oRǵ"jo$EP9uIz
"XP6^>v&$x
`%q,jz2Q3yY&Ƒ'd.Y톱PEa%[t}vǊ>W
[Fy>d,6=	玉q!ɰBM6V8!e1DoeRk_NO0BP}/^|ǂǂx;RaJ5#
//W_}?/{ωxچMOe֕xN`Vkg3v5hK21}q]3LAn<˺5Z5 v3|jZ2Fi<AQ>B6)\=7*`A""i5-su" RR2j|~ Ba G8pECWz^G86GrE55zܬ7ʞ^]l)^0$[IIj]}MYoy7kMKMmM5UǪ=,jC=JIHHҚ(5XyD,׏R5Ty|孮NAUMZL{}%QQlGEtnMs3T6ԑ 5լiNhOh}ť
>6\oP"Sd\q'ťM5\Q\ܺWƅ_k/jA e\	}HI2nq[e2OeVƯqN$=X._q5E%Wq|7UL@;6N:=:0OE}W

q!6o3Ŀ>
<_LkH_..;L>KšKa]47W9hQFJr=A|U̔L>^/&GQxV̔BW*?U;Dw{H&'3AX\۾@L!_񣌭݋gdS<K}2E<!2~ul}	Nmn5LRً.ߍekK85|'|LE-{,`]dD|j߅,@{u>IjS%S}D2|}2נE?n_l~YN~>6=:9?@Wo"오FR2!K'(x#]5P4'gȟ4>Ɇl>UZIOjM}.OD-j:'$Ӻ\Z(R_X6IY2X(X8oZ䙌
?2~'cO#29>viH~_#|,_fW^L[Mwt>,"=cjkMIo
lh)]6w5󔕆I~J&c
.?z}7_1ֶlאc)'Ʀ6?g0vOS!F&m#D,f6q^7MxASacZk?sJZn_gNfWOA+3G?;?`&wd}'f,"}BcyZW1KǄ'I%?N>G!f?&gXk$M@_>b럨`Mx\Aj}NflGx:q!݀ω$ɷ0F&I,:~L[~A8T{ _.IџLI#$&Ana_$D7	
zxކ=Ek?cړRjL
uCǆ'G5m>@emOi|
^%fdk:hQ
ˊۥ2G.ӽZA7R'xg>{e<:#i/<\d~ܠO/NL/i%GZ?j(mYˡFTw
agWܫ.+<M">
qq+^`D_
y)3|~q8lώ̡+b
=JVk]K?TO$'[iTq~0_osoEXce̗\\AY1zY8RQYaVr-^Z<Al~1s
=<I}*0hnX_r*j}&y~+
U
avfQ'*f;temÕS#T[OWYEqٲ*ڵejez ȽŚ]!:x!knc􎓼b>ET1b΢bVQo\Wk*tɚKU6nзP*S~kk=F['.e:<JRv+|i-Ǥ0kd!fu#tCK.(=hFa5=qi/
TOT|#%槗5y45ZE˼sfgyș 77z^j*-oS	;a;,MryglhTUU1;u*#@ԏQBZw_ݶF#	ԨzUښ:=UBA.B.vlC4kZ2zZc}՞z_CϨq䩠jZx>E)̬WKV1ӿ[2-\^ҥxJMТӠZв;"12ª&oV]\q{OJxc)$6ZT/朸b^9PQq YE.꿼/J9j;X+.jj$9-"GSAGbxZnMCmx5AÎP1CcuuƱPO/5k׋$TV7.nܭNkc;1, d *E&k|Qixi3AM䩸~xp4.SKYcn@r6Bk;N2,2Ѕ3tcUKp:Pڧ_1 ;(ݚuc6gO9cNoc/޻M#*!k}Ty d
[?H
k,FOS
PhQTOKb	YhFl4,BjiY#A-NDǙ#Mj?tAZǨɟ5m'f\3@?*ip :bf|}EP,)`jn%RQ@ŝr7Waeovj7bQ~^O+.i,| g]բ\(¨ШS\H+)ͭ2+IQ
\_Yh:r
ֻP3{y֠IWDdLTRE&dа@K$yF7AcjM*
"N_b.%F,/㫇#!_2LեKՠ(|CrE}rx>
tx)if,k<<ܭkWwrK>`کk,
G 5L~Ti_/7<_C|_ź4_Lm˃iA]>|n#?K0#N}d>3G>IɷCA᫤=o>L)a:OW&e|?&p?(5]T#ܯ._-Ղ/|E"ϫT]CO}ʙZtjCT|=.fB`xb:^._ȗSaT+O߮IrCU]4|M|oOnp_at>Zɱ|uoPK
    \               com/sun/jna/linux-ppc64le/PK
   RXto  6 +  com/sun/jna/linux-ppc64le/libjnidispatch.soUT	 \3f\3fux         \U ~jl(-GEPBBӢZIqFKmt]*M,uq]j/n?Mm}9O㋟y<<9<ysK.%ԜŞޖCc(L!	h2Ƒ_?s9\	r	|_7CL7dU	7!<B 翋x}%~'%dg_]蔯{O/|37l^pG7Mz0H5G'ǬoB
$׏?>L4|q|Vg4Cg(^)I4GZJ#Yk̉o84;~N;o0#տ83j:lf5K#͑`WnC*wu\Je,"prpk5\f\e˪z_jk8\Opmp=pxp5IS~;\;zVv<%6)
W'&p":ʖVen)'}{W㲗^}⫋od
?ȡoݚd*Þ<n苟?w]ǉmw?{~o\
v8[sO#wN,N==uvS⎽yϋIi|&O	?eC[_ǚ3fvW?15qWϑ
Sӗ>/m7tǩ;f>'7ld2,/ܞOBI8gV{9mJg<@'zK_|m|;w^6Li;G,&L߫8Mh?8o|[_m}`]}wܼpUxox*7cKO~YU_w^ii;i}_2^Ik^6o˟Zg6>W*!Ι;/v$?~OovoZ~~Ƒ>[W$礗:״,=aϧ}S=_^4G{o>=oM-|
/Db0b
IR]uI *l'epbm4"8p_:28nMp8`B(?;!7K	e=!}!뫋{C8/A'D>)\!ꋃGrўu$x9CU8 Pr!s]ߍ	)DGBh!7'c/]v2$N%$wywh{<$0x~""9&wi=w0bK9~FUP''b
09{Nধ`7{Q+>z"·4x/p|r6{vy!oBGz31-gU|^ۢ8/Z^M 0_3|?{WWp?_gÏ'I|5kEo^7\z73I/)!;_]4r=yWr=ޞ?i;{2żp?/rx{?롓bOgf~ZB
-DU^^Ы^t]N/b##.ײgѯ÷q`_<x|d~
x9ٳ9*|{tr|agȞ~çY蕁8CY-jyJR3']>.gz{&rNcr2|ag28`p.I3ak4 K|n{YGs9o&tEp3\\Ou۹h>{85^s2__]|`_t1~}5~Nv;ܯ|&||y[ٳ\^NY#3x;]vn4fݼ^fټvUF?丈o=7E
珞ϋoOOJ??10xh/ %/֮./#.|O?81,3?'(.w6N?/F^a3{oƷy+|GYؙa&/c|>~w=?vpxi,CE&Qv~x_
/CU~ ϼ_[n/gr:zp5I*_p:p >kx9r|n'85;3on_]XzUaeUњBR|U9)5++J,uvUU)Ŗ",xP"7 VIe,xMyU)YYT lH\SQ
jRUfùշ,%+pRX<*UUI%VQ+Ȫ҇=Tğ.Ă8A,I8wg_
啮JX[\vM .XVT3 VUKYۅOixJT˗W@<gP,X[J(S|@)K)-*>J֚1mEU.n-2KK|5> 9K_	HYh +Yri|%עyM|yCEk1
VV.Wh2TBP*2rni1@ҴBHdZST\ţdV3^@i1
$Π=EkVJp_Z]Ne!xP@QVV]UBVLaVT(fxY#t,<H7QU D;PT˃0 *5qJI	ٲՕ~C6|U+ !(,\ 'q(n©
=y|<d}2&3rhԇ*Hy	2Rpr7#
'Hy	1Rp2;[]XV*N
S6VvrhY[Lx
5sK%5?^K+WVzW8Z8ZY{*#12*nuq12t
मmГ7' V*Yp^*dJU׬|p+!\\W3>$GWa;ټ!bNe?\gyE\>޾jj=`¡KVU$Wy+kW`n-*[]BvQ!=}spX%)̱A˛}4h^Uvy)>AGkSZUT\vGU-H	}M$p-͂\<ZT*:,Yi5w@@R`Wy 2lRrJJ+Jeh}Ԃ J:(\|9JVl5׮(_Eѥ"+׮ZYD+'XYQ%ܯ6Wbw*aR
gڪR*T Օ0_J BlRa;Y<9l:,>(D"_	[^e0W#}T=#`r-
qk.Zr`n[b+V|YՓo %EUEel@J֖WʱUA&ry<FLC#ic]?"/C0__QͿG^΃)De<=~
*xP{f
Bߤ;

n;C7m*x=PolvNGOX?xPzUzRޭ7rx
.{p
$:*x7'=nPSTpk
.
j|_x|\"ä82\컙UpOdQ~C*gtF\*[Uܦc*A_7rxRޭsxRNG7׋Uu**x'7)gpx
p9ܨqx
*x&7e^9ܬ[8ܢ;8ܡwqyիߩwpFÛUz^N
+_]>oW9CoNU蕗/5<A'Ii I	!3$\	K	!xJpKS\'	.e%x!%@_$Mb	^&xc-\uHHz	(R	(/r	*$xBK+%x%;%h	%j	#~	+Jp{Bハ:	,|OHpO)<CJpEIp($$	/|7It	^&HpN[$T	Kz	~wJ%xW$xϔ|orhx~!f:n%f*/zl1.5}yLd8buVqFa
@z.[Q=7ճCߡz6Tns9Cܪz6KR=s*AnV;UAJP=Tzu~s~sYSޫznT=Umj}PUz~QTetU\znVG1	/oLO2%?o"slPU1MtiIbSm؇Crǲ]~kbWY<ZaZkE֧5oFW>n\!
X,a^(/4 }2ץ_,[CPL(f*^)L-m0B:ll)
'M9q/3dǻ˻,=p=~2j2~+U_K_!]OxY֔T7ցubݢQ!Af)Hu:NC<@zfudrz[v&xو醄P&#Pvh~8qh=~ëoZ~Dy<LkE"o;cZXu.n@J%ax4N40>eyKKi.j)vC3HaOxlH0*퉧r;}@נ4ѶT;i1jz 쳉m\FSu?#_? J|0||+ow38ow`
h0wECyF^G)Jk9eQߨ`dt6d)Xte{wk3J1(K26-2p<#xb;6xxN#
giQBӲis׿Z#n$Pc=_@o4g1-
s\;>=!u	8aGX%Կ[c=q(Wi5
3,_jHs6>Q5V)heՒL}X$Oc]&\Z2H(~<<37Cӿ d"vk
4!q7;5[rlźܝ!qn-_aHX,o-ߌ9Lϻ,-:o{s:ɓF G6a3. 4POb눫Lzr{8IۆSEEcyA#K1EQDzMy|!&s<u2<W>C:D)F}}E}Ӧ!oe!ĳCT^Fc3돱?B_?a[^z<	e VC:AsHs<idfm 
~Evamxv~mw9^G(W+vuz^[>.륣K#nh9gH!Jg{7d7NmQڦ*ϳ>ơxL>B.'quofm(bcNL"^g3IdzWlCzf+}ۑ53@e!?0zl5fB;,
+ׄw'X-w̶7p^5HroJyO~}/x'DzIֿrjq_Oq.5,wI\
cV_
+qLn6ʹ65x}6
v'|jn~r/..9[1sI|-RukM% V`qc{v\|jD|juI=0/ǆy,ԟ8>O<X痧v,tuJ)Fʭ8F`ںK4$h߬M']zYQ/jnk
19qf]z.ʵ|Tnh,K.Wc9ݾx#̟P,څ?C5:~%km99(;g8?LyOr#'0a<V0xӖmx+bEԵ"I2B%VXR!fGk,Wh6>;U-fZ9e8_͓_M6B)<Eʣ~9z:xA8z4n&'l#__OSaXՁɆt6s190}KcS5'9
[4kO2Mk ^3fɟWkbd 5ĭ8;!VryZ5x]oŐ={I.0cy}\ݜd>&1c.Ҝ,JcDs5'/Olv"p"p}c|SNlBGiHD:sgϖi%[rb 2Q+"Zzt?ejf|uhgfkR@; -mx[R?u?qHu>m?_ļ3b 9SNR9Em5=}(;V؅o#>\qtDbz?lQϸ@~qRY1Lؐ>6666ll{;6+ą=LfNYNQN9T5ȴ
day->: 8mkso ;hCT~iCv~˘_x/y@}.fQw;	6Ow/?h2gks<`ǂؿOۿI00-qv'-oI?Ni0Z^o?%f_7%3q*ђauFe'M|~Ӂ;[eO
3/}>ZL(KFOv1`¤Z[u'6S;
~Cm m+pTN&@ԦvDyï`v~쿶3gk;Ӥ+d5N2FYp܄暐ħ8ٞFA'e:7spF50No*w	!/3>V2f:uBZoígl?4#/CƥX-~NxEtd<r(yxiRމ0^v]TRBXcf']NX)&=Fڞ[wHL|t]9.(؆!G17*|?zP?D|?O#v}VAұ_4,}iEX=qO- i[~'a _75s6up01lΝQryjuu3wW
Ɵ$u
sv 5=OU\L:nv6\/uD?q"֬ FT.
|'}Z IPOk I;P~R='aCTu̓>88Ⱥi>S!Փ?z
&G+cd=eQ3rWyt%+1O6ԅ8/O0J;dL{h
ty}h-<O6ZWph93J2ugxK
__~V42
~bТx%3Pi\<A049%<VB.y5(\8y(\,^OG<)Я#?N=osFm
G{/팠~ct/bY}W6oU?.fPbcpN!67QFA}!'yG:s1P?FǠ0]Fy
s"D7zQo4E9`~Υz:EyQnvm"W?1WuI0סeRևX5UaMSN`qk_˱9!l<`,V8t[?K!Gz`^>E|__OgYFnQoD#Rpٺl7Cwu"ֆ5!.aLC̿)&֖~m~<&\K˥ߗdXp}ӐEЫӷsZ}#:oޢ3mg/ߕ7:{,NoΙf3mg}*ˁ f5sԃfS	gcfvL_pS;u~GGD1IX},M7Ju8=˯7*qkZNS@)T?1Nߒǔ[ Wa, Hc<O-Ƙ	]w51'Nϯ6'"m$c:az`f=f"L%hޘxo"c3[)1l]ȏҿk2^@}ߦ'7̌ok֮lYFZoUkgOSᜂNo2"7,KfV'B?)S㣿;~sS2va}Gih}9/zDt}3cq3\SgvMMtjP?|mlHP|0p/m ,Ԩ8y3m1M{
5iM~'
nRZ,OCܝp7;[s@麩|?Gxc{6C:{
ږL0X>D=Ȼ'53(<Vgmhl"/fL,ުȳ
vݙsD^ğ\괯|K4#n]ccҾCՈ:g>1)w{R;ۑO:lkJm-mիښmjR5B(ۓۓ$On%jyy} 	P?=BG70Fwl/)r"ڛe{ڛ^\ cR,J|WQW	q6c{
zOMbκSg|c7cw`,/bw(scgY|}Ba|Xm
'`3Tm..抳qXWp\}MF3mg#6JYpaYgFkp,b63/&J(mп|\tdp>}^F8h>")oL,+1BTl|+E\ͺۻL%(yO?:n8$\t(rQX%F]וP|i׾X
¯ڏl7}ؚv46gfeҶ|}؎륭2^-=7hI`ƸℎxP{Jj_8eƓzOQѨ=c>[w'|n$$rщsEG+i;fV62"5~7'{	k2c!z<(>cr; [@&4弁{iKȦ<cXưKSwOa*_PfE9aߢ_װoԉP08h˦$7|@Z{A|ĥ9(3wGQ;|nϱzv'̷P~iGj@fIDwq&.cK<A{I
	ɭYzm|7x0I!uɇ8<+L>|{o|a{!uɇ#,#L><"0ӟ6CIZZϻHaa3@&Kǀ͚WXKy+l-{Eg?/4qH,Ox|_zX~P/i_wupuMH^q8F($=(B,m*2$^M(GE+/_%~3/q!_=ʚq3<wtg?v'd'/=s/e,>CS:ovˋwWb:|yϸ~Q,d nFD\U"vwɀ&cM9$>`#	չ?b>b
C(֪~y,E{ױxL׸>` vv <)o6yڃ:4#LHGwPC4fNgߌy0veи ~z?}A]b=edLy|8q*[0C0ف]xtTwr)	ƅrxNU8cAV=P{Ƕk^_罣lX?a{V]^w:'ӕwh/}({ߴ̾lO-L&N~6Hr~6P*R'_?/τ'Xo#B_/З|[̌ߴV~a]s>'*Ae<sǻ,<b4\FwOIC<7^G@1^UtaX,x\7ƣCA;䪢,\b)p<kSCB	ۃbtnbay5XW^\hc=ߓ-r$Z7sWBPP(_x]F0O#^!˶_cIkQ'=bt]C.oA`{QyxE|Fw;CWQ6<o><q;fǻ_{G3K_pW"o|7Ѽ|)Gp[r\ /dn<߿.#/vjkY}/L`^0Ԃf3o+-pׁKOВc~Us5kΙ~iMO?"j,ݳwв=h1C|(,x3$<<_U`;qO)Ʀu|J.?Rk7cJIMɝoNolJo5"
	[_9?5]0Zs9=/~'\FL{pj6lV۴'N|	~fYuRۏ{%@h5덽
vl5GH,ݬ_>,7U?B˗lS=jEsObPKmEcg4 +-W\{t1դuR)tk)ٟYC5Lҕ`Bt
=_ir~
{7yC^=ӕb`왕`wC/y̑<GOxPló 7Kiy?[m
֮
hCHzxlIULFͷ4vȽ@[CSZ\:Ncۘޓ%GGvNc:е)oi\SHRސWl]'UP?)
wPlԷz
45Ĉ ؗIs-Iqm
 yX=#|Wx/F::\si$nW72Y?Ћ{p3vo6e8i]F_˯8Tr{ݾ>?:(o|jV@gNC\.+P(sWc\VO|w{=KpDy$)jOk7?Oˣqy4]ܐ|8Uoތx_{qߣK, G߯$<W*ScO+
gztڇ`!o3S/6+8WfPݜO7s#ӕVEvic%aO^z<wl?#RyVvNMT&:g2djKs`|{p'{~d<81q$QbrBz%NF.>:aA]8n'O<XKCqZ]<9v6a;gאy+Ȧ/~Y̌7Y-1=;
||=͵&ï}UR\/s'鎹|<tCX!ϸB[&db-e;sKC}4wMzt+	$ey_Sݞp,P;-tJ}wd굼	
wx&Z^tv>}<2p$'vY@1|Iy}uEPI6l/@/∱
K:|mp}es((|`e>em<{T^`kolg67~
dSzIlSa6ϱhL/yUsݘ% [(J#);߫t8'd|Dbcڎ)[鼽[3ځW_]NOˠ.4T}#x}]qox*LGo=p;<z١ayj̎k!mZ2oO<Vo_9
e_b& xJmIwJ|<盛x>/k~;')R<Ӣgۯx?/Lcg-,:ۗˬ<.3^&:lM<9\-ViK#=x-1u
m
q.=K{wX_7DLF]1Jf%㛢7r|szgvѳH{5/?U(3w.s/4lG;	jZ,|>U_/"=^I ϗeS?\픞ޫj3sr]xc*thTg:>~YvR=gOT&s3KkO{?2gƧ.IMh1yqF2(3?6l0uXu;?Qa`>mIko@
;foW01sxo 
'߃,do'&%^2,r͠;):}G(=7}gds@7@߬hS`]ao@єoR~=a>H$L'R,#Lu˿Zb|ev@R-drBO3?%ۃw.g~12׻x
Sˑ{Lv}>6Go3߿>hY;/~&{e\l虣&ŽW6io<b1
,3=9
ngQj>)u.Y,we$ꙝ>x{o'qjlկx=оON]3)gkKon线ef$jNyN<rYHxg۬$@n"ZAuIj_1UA?fZ&1s}ڀ~Ѷ
3¡}3ޙ1<m
>h,GQ[Џ}Gq$KwutKv'x=
/uOꃯb彟_Gqo{D(9KcÜzqqtk2ƍ.a$.rYvczp!;N1#&9g!~\yhpyh
M_=Yޥ{?COG'oW^3kB]M^9OEמ@ymU6Dy~\y=1n
C'#+nc˫`zwstxGևCQ냌xy:9\^:5>4yMjkWߢi*ޯ6[
	4Pn(?	$$u
M&[rt^N<_'o4B
W%ҳ^z`>ĭbl>|e[p{{-ߔc"=3%x_mߏۿ޵q55C_=͵o_mM|ŧ:^ǿGB85D1=d{䇗wPǿ(ǿ~:Wdqb,?Z:<Ǖ*}8P^>44y4}(P^8DyN^mǿ!ƿAƿ!Qkkxy5ur몪
ʡkz2P^+xy9(6D'WlE~וAXL%^,+ )A|vM X[׫upn#;<C~i<PӞ	
FХ]t6-1!y?/yp_ds o]=4%o<wm{xq8g:;E{ ￯NeU_DWowU/I079R9Ab&p/.-
'S1F)i鮕d̥P֐鋴veǕzzؕǾa+viE~t=b5z7?Bw2HTc=@y`hyv8v;DKDkh|Q]?<7[ˇ@[18˴G/EG++" |pik{(͊<>#'
.~æM!211\^-4<߾Q,x=g'#ok>
|nѳ7zM.JhS1pdi>/v#?P=8^b"-o.ￛ|PЇ>"%! OqxyccP2x8uő'g<ʭ[kC
kXJ'ۇf?e[}zn߿eUߥO@.hS=(3r{B399
~Ң)8?ayrux~4_~oqmy0
ͅY]ϺϧW.??Ϝ3@~^9wex~Yojip~]ϓ,<?{tL{ὃ{@~>}@x~6?/nk@c
h?8/'K<	w+6vuú+;G_kH2]_}2ksJ<?,80R߁>%~+ûf3Rf*p Wd+<oWT+ԯoy}HX"[2#W#ukYs2<k.dȄ;
ğ^8>kTZճ^޵wyHYwGq;έ˦*2:7wCKFMZ
ÈXRjv3[m!3e}.#Pg롾y;bm/.`eof'eda^}awÜeeBwnudޓela6@ސݞޭyEřa	uu23i-o_czc÷j
NVc,tO!=-(|.!o;=7f,g+.b@)(n>xHeA;*$KxH[vd::!{3jp=,zEa6]bqXqhmԅ9_Glp]J̖4BY^Ա$~V伭 ߶᲎Y[,G#^(qu;x9i-l/а̓2̿8iA|οuA hAUI9ݚ4:./s+m9uV	}aŘ9GX?o=Q	u 7:;rPFs">0Y:
"QjDoNl/il	Jdn9> ڇ	>AϏl;>,mv"^F]s#хgmh{8mHTїrSd 7k|t!n~.Ϫ1oX6)O+7E*UnߦQDMo,ԁjSw6.<ӭڱNbWpx<6'2U1|<1{5}oC1Y)
y)F>qY^9΀l?~t 0Nwmm(<L9톜aҖ^ׯ]2Xrer
Z(غ^E͆`6H痉Fx =ToӰ9`G:?C<W~)/ًcL_\
Rnˤ8n[wt0Jt";[xzO/])SJ/RzYD?OwHI&t!?t䝜~)2S)KJo=}Ru<CJ7̒RCJRz>t%G9K8REJ?Ӊ!;^+;<YJ)cD?O7IRq<(_ҍ7It"Iz)O{eyz,4dҮ2)_T<=OnTw):ttCC3q8mk:Z2O3ΔymP{:~3y7sk;TMS&v٢YnzKYb7a	!d1˨Ή191vi1y?*7%Lfl{<?vz~iơN[|uҜ}B@.dzQ%Bo qU#'Vټ
*z4\*\o,Bz%e)p!+07X>4Lԓ&x=t}ygz^C>M71&<lɈFaQ ctxꃤbD|[=x8D&W\}2[xZIfaOp7F7{˭`xv-^os%ʟHgYoe{EA#m\>j&$fgBfL~fH2'Y}XǶYE脍d+X3oP,yW57HC4Ԋe9vN||ߖ<s01vДc3BeOJ!rCgm5		L^y$`?'S)y?S_}Chb
).Vo^_c~mC1kO ߾˷3t
!o"YX~Ϳ}@JTހt=n9{/|X~5W9\Cqu8%-&?7R^?yyu66b4Y7x1	c|4n5=!2OAR>q6OJjk3@|媵ux0:WUG}:6ϋ:#ԑ[Qh+y 2z:#ԓy^}H<eUu ~u ~ϥ@zU)@7ܗ'3IU1B=G;:DM/(ׅ{ѭz[(|/z٬{lOׯ4wviC;׽5Il}P.!?Q٣(x|m?	だY*h*Կ؀eQh_QЭ|/nnJ39Fթhn$iFGx4Qq
#UG
Q@Aw
uBѝkUQZ(@?F(i<9:f?qяkL{kS>gE}ׅ.X(@O&(qatA|(h.C{0Y#~5*43q/,fR[2 g8i;hs(!o煾)<oFy|1}<EFȫHyu<1N;[y[(Z I[DyT.͙Y-
kE*#e%aPw.^qoE}
d.Lʢ}᭸%Kmq _{4z>@W\CX9pEwN-8?ե[tX1,,(Dd[|v>oQMV>hyD7n8=Ӣ,̋?	-ntt`5ֱÇ˫@<7K"39&<ZEu>;AY~bLNGu_<iu!/Fl>:wD$u:&Aٌs|)JP;Pcz:z!ߜ8Eq:l+oc^+ow:mQCm8E$;Z+|( Ref)q3z3 q+
=1X|VI糄q)絆SYZi7j!^t/1td{7ŻIOۤ~~W--.^W^AJCbe-˾4+Pw+ܗ
|_{t[buOuߎuwdaS~;r~k&=YzN|
	fo}	r
};/p/bz}
O^p-χ{_n/=EWZwv;ᾍw~F~n>ྊ+p_~)/|~9mp6$"}/DG
ܟp~o{{[}7op-J-^p/b,p7}olQg{'${(Gf'hbHsܸA5
QdQyIs,k"`s~}Ў{;nRy,ZnPg%cY )K'A,$R2Bmg{:ߊ1˸?۔s*A+lGnh;}{p{n˸NfvsgOyyͼW&y%=g~.3lYaԣT5➸P~wBQ
ByŠw'5ެ1$nl5y_; wWH|FA\~=֗ɊzLqC!33y Ù{[sߔҸ-ApC?7ޚ\^)m~>+}W}Տ1P<q;!>,^?:BAy8a?ePj@nɴYf_i1oķd[}>5Ws;LLw,/(ڶ0Z\)S~O5Ϸ!}oJ')bZa_q0|ys!
sQY}eq8H
f>@P2a+O0χr
Mˇq;d'Vx;㿸kz[!.43EVm\jW|fKJ"~ o7)));n=V;f5P~L$ĐlC`:yeq3\wf zԧ&Bɓ`X6+ng3Iߌ'˨+9ڧC7C<Kĺmyj; 3L̇&ӓȽ3r%ζksͫ#Iwi@wek<OjurۛC&.%[sO;=js[6ƭm)Oxk0%vշ~dw=K\o|ʪ!m
̩HO}wBtvx_	m^σsyOBɠU	DH
rk40o9twX@FGǯe}).ܝ!SzH\Ro{/>@۴036}ඩJd3/lTaן- z9=RW}R8o3|(iS<w16oOB?NuCo-EixTdV/	:n9~ݗp3 LyC;mۡ~e<7Y}&->C$$h'Ƴ8!1!]1b8o_-Sg_a̌78qU>sg%Bޠ1:zՑeyv\65RZ8ә3,&d!/.>̖[}fFoB ;.ЉW_Z?.~Y/hvT׻Ag`Tl-ug~HyOEmA?#>J۸ <^&2:wsil8鑋};{݆C,	C{?6}kLg.,w2G_}:zkp48~# 6Թ!*b`]S.?'\,o]H m$	}E7Nԟױ}:|Ɨ8uwBU/35£9;o{~;&z;HkY?k1u!_=|ގK½lkmZҢd,9L9f
ZwևĵYwz>9%02'x]a#ڥuCs79a>8BC'׃c;Ohn-?VWތ7)m;y-?s
/_SLA=/#6c_C[KגTU9J-j/[
;?"֓Hj]fzxwg6s>@ 7~m$uO6CX233y̡1W̃V4c3fi@><']yaA߅\EOн͌%,:W%fע֫Hi1[!=wƋ{𼴝]K60$uBKHbLtn]V>˳kT<ي>ݓJzywwB/hɌ{+uԻĽGw'bQˡyn9.-d}r_moon4fD})kxw8ۅ{BB,lJys@-;PL[d}D8Sw|<ŧYe 5;;
V#㼿0=OڒǤֈiyP&W܀euҬZs}|SN
'=ߎci?Ey!IF{}l<F&eL|`.\Ƙ.=`]pŉ>Ѐ>vܫK
sɜ̴y`RvF[Z@4֭#\cjzޱ}Xn!Ϻ:(ִZiyօK}}q^./\{u&5~Jy,AcZ^"H|ZLu#O--o?D}G|pߐٞ]d8n;_QN~ ֿ	_&M,{I*د}ǀX7=&oaNcc"Ao]|y,ƴF$mo'
vc?vb<xlBi5>kEϗƗ^}E>t;_˲0q{6{LGz[i,=Q:OGi'Xd3HxIpߣ|'Tn&=zӺ[>r=덏xў
A?B9<ohw+e~\_f|Xi/Ч_ϑ؆,y*Ӏ{L9[G=0h
Ή^(ƺ9._~cfҹ?ܔ毧gt]GG=֧!Ƚu_GgH3O{oeq-nل n۴򲼨@UO^͂BP@$$E7
/
r	F
Z[oDkmzFFuC^9<|g3gΜ9s̙tǴXBI:iDxp<=Xr7[1_Wu/.+!080#6@x{cDZ}a<Od>z'?^j_g
1yG;oYw?AZ_<{#OgA	 :2ws)y
4$m#<-Iu;vH&ı7hIۡIe ;#ط^ʰ1[>P4}@]r2RqO{>ѨyC_t{c5CmiݿA1w~./.-/;9!~kLg-zHoJϦAyiM,1dx}e>&S)oOdhR/Xj[pC K~hu-T#<oq}z[PO#ĉWJk@}r>yS_YrL(d?湑狷бwx-
nD
ʕX|'^n(rI5)BUW27a+dnZ?nH#}ǵA\"	98?^v=)A/گPüg6wԓU!{g<¦LXf{ܷYЗŽt]}ZGF"qȇܯ1^쎟G?OXckxzƠ|p-uw}K7/W&~őXcwЧOs^%
^C/Oo!p
꣆&rWdƗB|uϟVaZ3/Y<fqgxvrS?ks]Q'`}߇23:{W|5+P^c&qm}$b'd
]\6c
)aX4۟|uxڦJ_
dϠ|(%.d>_	siI^ß0lː`mxmGjY4-	IDJ@hȣz-R?[yH!)<}ک35oHsm=pGe_:&zџslq͡S<mC|_(|4ޝ0MڇޯM6]yˋw:Feyu|\6tiy+/7YF|΁<xK
_JP#RޓDy-#	AB<0O¹3
 _5BSٍqӌӵ\_t1[g Yc~C~&_0yQg^a50TdiA:fԫ.ڻ"\/>2AGw4aۮ8{9Mӡ
@YpxՉZ
h+xJ?1=CKh}s/i"./ey+gzy{*5k3L<HIѥh<(@@.gYk%AgM/ؼy=)rC^QnԌwZ+"}	48aU_U{%Vq
~\t
vbo7pi/!Y]+>8wuvxg
{	oG3Sǎ兩cL3Z"<WC7

z<rG)'Oطb>(t\ԕ^Wf%o>'o^*]^'T?:m̎ppp͕LlL:G]OG|jt
p n)j2s+_1O3~k1;O
✩˞c
ZR\/H8+"fXG);qˁ%ٜg;CMnxjA۟3}
ogg4o*SGtMAOHfp|БdnTӲTϩ.z6c6,=~\r,0?޶\2oq^rg^ȚW1.b49
7Z_.vN
ӑ2_ם%3(.[X#P})ƄhZE~'-6t'Y>2W7ŋ6@u"{#yKS<lғ}ȼؾt^蕬A=kAYż@<\L"r<c<9u͜zvZޓDf|Dv/ ,N
&|6ӽ8WV,W4'T'):Mp}fޞy{Rz63ORyWh +!Y)ey!x{aRo}'A/{ώKsbx<h
/a>H"Wڭ~ k"L>e'䱋-v6E[|^yl4s7e?՚!U:^#꼆CSw'$Aپq<e^@rHK<H#]〾S~OnR]^56?J|M?g@'36>ۧo-Y[uMŢ'.)EÉF蹲Vi[
zG8!ulTcy&z}"̃4 ϏA:ilj9I%^dg_s^PeudD=+u/ [iabWôiO|5?s9uS
BlTtU?7D~/;O=f۱kU?$9^61|8swg홗N!e~<R|?t1Mޒ}P/#twL!+}g׋)O?GF&f//¡θsǇ{Gaب?&x~O8<k~+NrڌU˛9Wοkz &ٵwtGk{?췑9fy&To6Gx
VZ'²O+|d}+߫B\eNSY6ZZ=1H;_w&3GK)OLgzNOHWx7,6geЦoll)^ c9E+V硎bE4kVLq<vM߽Louo_Ee<1D(h>?w6oXaH%ZfкwnԒ7[h|/}_j6=$쓽noאuUK ÿg^Wдdɪ qze
-'%a߱XH=ȸþ=	0F
ԓE}J~v*M#nt ^Zp#Γ$5&'|y`0-?~*9<8z#{F{D=#WiA6->^fwN߭'SH[?)duܴQy,ef/"O;.:/T,ҸӟBtIzɧ4zb%K.?m;s`j ͒(oi\)º}LX˞пDߩhӗ|rs6lB¼3|mۃCydwr ؍|C?=EW!#.+ఝ9Nb垁y/}♏8?o,üx0s>1!v~)P|oZ}3!?ҮgdxJr|AV0Ⱦo&M/ӓ +z@6KמL9Y&Mȶ-粟L%tٹ-P>iڃ#	
~t͢O/ysS=);f/
`=6M48H׆&i4=;29Oy6Ei4}|i?LS-
qH}+	ժ'5{=Gu͒Kz߶<o
f;u^qrO
MC;'yEl0Yo/Ht[iiH~(Z!]9Qҏ~PY}\P	Yy_'x)#ӞeqfNUV'fZNpQ|b4Oܷ[n=/LjNe8&Q+mv%?=x-BKSy>~_W|L=~yz_^@@rTȂ/Q9k"9oKȋY94q]qMqs5r~.g>!v_?+L?yġ~~"ht&Fr_ણ61&tnCdby ت}aþo"f-ey^3?y8Oug%߶KHAG(R
oAl
%Ԏ2i3b_m]Rꗌ?
cb#_K</(Gv@2cז ?WSIIyBI
=./1*׋?S2#+@lS9B_^5R >KI l}?hO;I>Z~d)//`.~%(_POC`%eNs9Dd>V $\IÏ?gp2<48<%F2?YC)z蓣'3	_$~s/!>։k0?}G#NkT Q!(Rw;'|LiC;S;lvi ۗL:;ȿTWIlK͜:>nBb+xfJ;AҲO 1SYGtPTkWNu/]
r޽ct2i:Fu
ˠǆŞ{9/gD{|::lh`{&_HQ㮓TvjA.^8g<	$P66dpCjCb2"!Σvz
ڠ.:F`>(E'J-/|95ޭiU\@릡vߠ&]_ ^(zQS|Z vb9P'6؇:mh)  /sdI}&|oEgi܋o򺗡͛JiPOs$!_W8,sP2ry	ۭÒOO[FZ$gO[\e*иhUJuIt<ˢ0OѺ@>Å_#;GeXؾ~MbBA~Բem>F?mѱVa	ēfG
~>r<
|~@Y>Iϝg3\زRHd\2xl_<\^|V m5=$N6o~g,!OgK{G޿jEHOڍPwK{qJm-%~f
'{,!%3'kh8؞;ں.p>ε3b-bD:>o*;2j<搙^D߰ǲ-1t?}q{p=$Br$;Z_>yD,9⟹(ua#-}t/Y{HwdԽd}CosĽN	vB`m3O17bvM@M燰vdzFR<1.qֻF|rQYZ"o\(o+4xz^c8E;>yy<O
JCaYF#Ί}nRi6}4};x=gfE7c#c!JP=mi৆SgiP_<7Ha[q9蔠/QS?ZCv7Kd !v&%σ^|?H+-߅tjq_K{d4E|p®LSylxN #3ea=ɽ򼈣tFZIOFvxҀR6ZxF@-䎾>[3Rw<}Ҽe8vLA	
zbݻ5X0Ck;o,w!ŖǋoYYa
Hdɩ0[n,ayO)xY?ݶ婷X?m9cG:2@|<Yy'ߛ7[ NN:]Kڋ%u_tqlp
*xӢ|Gs_<}8w1̏1Ӫ(rO4~O=#:Ɖ]^oϩ'	/]XqSk"'3䆍-R/914߆EH3g&4o:lzm漀'X7ɍ/T/1QO8|QO&pΝ7!di$l}\`3j5Aau^:\a#4Of7ŝDe`}x>}I>كv&6-)N$sy!$yah0KƑbo抝ZD|AW#6
_3ȒEM_skfQWr^,Ygѿo狠|gj/j}8ȉNciR{ԧՂMtؓ[,o{-0"i^]$8M%ӎ%"x_2uOD^O~-0\X>
ZG⫶A39f#yҠpn2mkl_Fmڰ{p.ق\	p?õ/``WH~&pnXz~{Aƕ}u3_6\+ΓH>]w@|qstA~~_ZG0H~-4Lbr/Rlmڠh]9PRKB'k̍[qnwrǦ.2)2{;9=ɦRnH~Y&s>.;纯ӹql\_r\y{j1QV4S=C;-6G;h{65Gơm}Mdu bl#vD@b{{;iUcZ?`74a㜁-l8/4+z7YI.߄d-v,OE緅>rW"do";`|ތ?i_v#aebx$AW&yLtko,/ѷp^ޣwچsE>/1ٮخ:/dm(ϓ^q"leW$oOhc5&StlP]>G(g-~7i%p݃&͇A\JYlcàs^@YOǉOе od{ƅힶ6_3])
~Aj۴mSt9d5#:,h?W]!C:{l~x/q!qAa~я:?tzv_@3mH'ni8ݔCt][^6 ְ}(fqo mǰu%4_ h&7"nT6K"iH"33Kˎ21¹Ɠ~778jE{62__INFyMXhp!퓬m>KOJ_Sm#ki8{|hL_}899ڀ?D1p๥cg;36V6_:"hm}Ʉ;ES|{1Nf4>^.|o%Kl硟.l&<2?) @ׄ*ɒ@DLϾ!ʨ:A*	^\Hn~ڳ^V&ǪL&qٶ c\ѐgOhxcMܾo1YWS4Lӣr]CǮ-].aI'IBc`ӌ^ח7ĺrcr]	o[u<T+-OR<q
rkH'"kc oMO3n<||<kqu9>`wC, O9gH~΀?A<o	h[ ]{  .ÅOW95y0X
܍H4c(6,1i5<< @f1a:~|\
]%	0t~r^O3 ב'("_e}:<7>/$|Bjȿ3Z
}Vhewj7r,Pؖme~;&itAI~߱k
y dE/oeᚸio y;ai9?_@DNgbCĐs~N4I7Nm^'*y.=yM4l]OzzmG|Μ}KRd 3W"=
hFl\5Q֧:=]>R[}֨W?
hwЇ{o,[R}/כz;l/zipN/W6ٌtD:0iaft=3!2y)F}>h=f	םsn[\[ֶ$kᘂ2Vq4 OsԹ#nJ 0~֗y,dJH^TLrpy\n9fb+xkE%!h0}y	&wư :9@+3qA@:mC64I{(oOrͤ1mf#ۖtNigy
 'uml;v_+\}	-qYz\;4~zꀉ̣k{od>y
F䭃̦>N:K6bEI^7ԍp>d75,=y
?	ק/%z s? sٴMoc~7
|Y|?3Qȩit^x(7acPQA643辔q?jNIsS#v|m:`|8V*nf_#w(#f6&PKע'p~K-t
y/6?#ּS;t=fꣷ$$г^/sAmI\`.|Q^ckt6,mih_? w?22Qj;,oyB5AS@$¯udz$l>|Y5	vr2sAwi5zU%?1-	pkoG̯%{xc!o>9!Ol}̮t8#-u0zl~ns}(yU]̋J^#Q~^ _|Y1^qзoȻ_auB
E<ٝGqA?9j?C9},*r\rz@,0?qf@D/Ode>cY_A߇rzMdyYr 6Z.k)MlQG}s"?#[6E[:N(YN yi3Lyvi=SAw' 3_>U=-{
q(/CLCBA;@Yo]6e,u2S
m|x⻅_!#ج	0=8)Ma	y~Q>cyG?70!a~Mx_Pb/b3ߨcW4jcL?s?C{퓛G{,bLsECKcbx*&Ї/>y6ؾQvk{<qA}{Z/x|D6ALl$gRAKy輩)_)=[W #l ?~=;wx̓DNKh)q/.A%#,éQ~݃@{?O|~?!B&Тr=r\s݇Db[
?Bx9-'bOyd~"dQ +#^3mv?KOG[9(f
;fIAf
۳w[rGȌs_/:7mbjl籀<-Af0/1HKv"wݏO]f$m|;#6XrD"!
}Wr5ӗEp݄*/-)MH=/nܭB{7{<?xU"K
eEOr9@Ugb{(6<$+#$gQJg8|'R9Nx? )T"={Z>
m94J6r#i/M^~CsK:]]NΖ̠ܝi>"=s
R|/DϏg!H㻟XJ?kk# fԄ;Q
{O!m#!͙h$͛]Wď'ͳ0ӵMzo	N'c;={h>D0ВܰDAD~ؗx+>Z_ H݄ԃyj=[)=}/-T\waN 2O7m27ww,#Mӑfj"˻Ƕqq_2wéˍGB
1[z?D׾^?3~#'dЯ/ɋ/ҷqJ͆sX{/ >~xB?	X,hR6~bVf
Xw OgaIӊx;(郶[=79{C-z(dW"KqUx%E]ۦgKVt$Us)1NHQi<n:ϙb 9p>/bf31Zxs&&5u\C0|{>dw{Cg)ϮE[)qVܧ6oyf]Tgig3-#q[Ϗu$f{3m[ēS[d+shtoΡ0?T93_`{8;-&/Ι2(o@^ItQKв4UZWcyYLH|Kے-NPvI:zq1zJuk<Mi3ZY ;0ڳFQI"(}<EB<ߠnķ m@[4,&_Znf.?eMd;f|<BneeUsh|h)!o|ϝ_}܀W$fK6 ECޭ0F9tѱo&<} ~}٬A^޸muם#AG?úNRc:}>4fȟV:;ޑ^ WoڸM5-Veyr7]p?W֠'5x>)|iX^-ҹFợ6CqҽDݽֆ*̀*ՁnkI7<2{}s?>ϳxoj?6k/#W<nUL6l"Ys(
y0׷M:;\Y8v/WRN4~8
]OL;40&Q$౴jo<WwJ;0FO9x¯oE>_t7dMkTUEYيFåsKQ0bo=NX]m<+#oGx: 3~s/ߋ1DuoהrߞxS߽5.zm'
<1\G=,ϭŰw
m)]Q:2hor.'=g:?, =o,6i6&+_ pB>
Zݏ7]txx%@;u3s$pq#wûD<'d~_<֐%FXDYFϿ|gxﾾν+~YB_(%x>t3ݙ![cz B{fNM{d
^^EqzB#dM^:E߼jkZhͿ<TxC)߸߂~
ȸbn #54T{{JQ__p=
d왫/k7e-٠?zrsrܿC('CqE+0H8[%4afˬ~3>Mt',I	sP
;Ϡa<kWTW0)t+BB;v:llG}zMï|l>(YoLuXW3v.*w:.I?uٯL`n-Z8FR8O)e[q+33(~&S	&NSjuۡ-H"edH=^y]hBu]U
i҆S7A(09M#hbMM9MP4<:r~vD13 v?ˊX#Gl3p'X͠H]?Iy7#<)wgגbzɔf&~hjMs̨Q8'AS-l:a{\i ?x.!)fzO}xy|"t$d瓠O =gHMtd^L!N:MLtZ`D&yd{*%JțR/}ea#x(C;xFP1rxMoy>PgM
AGMTEʹw?<eZ@>,1kߢ?@?4&ICw
m$wn3궐)?œ5]:ЕLu]r+uM"SX
iHnE<la+;xCe; /"%Y?s,F32<٨5͠;<]9:;A#>3g!KŏkA~3<UnG;7;d{^yA_6YOE<xh!!?<la#x(yCoX>Q_Gf4J/i{906eA	%N2Lx^J;Qo."	XΓ̾F|oxoTgDIoy7E~yEM(!Q;nU&i]MνDsJ~7y7=<DfJ*BG-yM>u-%"CE?:w=.w3CyI[
<(5\풓AK([N@Y'e#(CpMvA>S7sL8+?!xCr
hA8%;dNc?!FCey}t.e	1{6'TP<K9o%x;we5:+n5:kkť
gmC.cmiYb4{q]ee,uVﮫ5V3npm+/,vֺU;7xzx/_,~XWq-1u*k]r*I"J<+Kŕ#\WCUkjy3Y>{ݝՕլe%NFgq7.+QjWqG\%ƻ6[rjEYXլxUQ[VYa4-\_WJT;˳mŮ*WlkJ\*d΀D]XFQ^y
+9y4ť0W*Oo\,+Jn(I5Ubc+lu
fGH]:kj]^%/4_f(BֻjՕU0?qb#DKPJwJh#Nw(!|
Ίk
NX^QSWUUY
n/-=B@b]%E$-YnJXnY-,7u
u5Щ%eŁ@N XU]+vzHSYV!: RX6
@sEb)5ں*^o(YmWnȨxYSK{O-
eZaBol35%dH|rV;k[չ"d)V]1)]ݡue%erY?%C2@apTU2rsxm˝55P
4b,x~d
VAhT6Ą#Ʃ*C@#PaA"__^j0Ba pyêEJj*k\jx5'ʊekK+K<	|.U-r1m"n:L`S

w&BG+DKmdSGOwRWp'+JNa1>O8WV}eUXâ NmOFO$é["Hn踏}/{1*T˭XwyL("0|QIcQ%J|jWJ(Zz8UL*Ҍ
⬫\
:HT>h!W]Vape !L=/tGUFW|QpfN8_?\(w8Phof6Uq:Op:ĆbhRݙ8ڏIN)ƒA4E/we,(F42zT;&n@aLx)^Rƥݢ[hT@gV+hM
42q52UH}e>4X")PwBQD`+Y益JeS&^:/UC>UF/;DmO]*U;燙֕
ANgleU>E*Qy9|eau>RGm.Gp"qn7ㆲ YP(X*gm)·kk&bϾpNJj92bQQ4ݠ+A\a
XR|Us(|H˨ߝk]pW|YMg"h'̠UY}n*⦤jouknV-9ۊouNn))vS_^eСIjïdIez+$[DM(fY) ȐS_Rϩ,w9+BQ|Vtjx{ݺW?wOmX<VJd(xV()>zE/@EKJ*ka:0a3EÉ+\טEG:
t*<Zea^[FL{O/l8,A(s+7TUV*jE
"d1SS)_1\}%DOriw۲(S+9G_QV(07*Wt,uznHg5,_Ek*fyBI7,@8ixOQ08pHoeY0>IevSw	jxȀzd(އR_4>J(A>ѵBpM]C|'~>ŇBDp1BI0!"%d^>ߔ
P|SB\'$Yz>6@uf 6Ѱ(4>4G*<p!e<a>0@{le	#&׎Jh
57aϣ*h뜕bR-,ծ0LBFU|##OW
0etQǇW놡58HR"D0MjWUaq:^!}.{'CT:@z)Ὦzgkx71[oas;03W;֗}lGD2<tb$âqtTI'&t_Y҈|17(U_+suPy6e$K'qM%{\٘{|Kt6H.Q~V\պ3-R`+BCsVVtYuJ|C~!DeiH+[=D.G/HUUzehf>V^Fa9:q2|#&dfܡH+	UDp wT'e'j9!'z*!Uz0JfcpWPr.bF-|4VڬF;԰VeՅ8|CVN?!F|rq1'ňOTkC.F|*^
ƈ#^d >콚ۥ**]nW1|,Ψq@yksi~GoIu5F}I~_
GF:f<{롌Ґ?;᪅bjkE@wkѐ+9nYh,d@W;q?2ErG!lQ ,zhȎ-l/3wn>%)@~ǳ\
a1k3Y 쀰^Ch,A耰FPͯ䃰RB؄lKY>a7U!	Ya دB3ƓFqSP.Mosd
ar+?A>`vr2vxd)wgkOք'!Y;	R:~	K)l76UԖdq_ kNp<79%SN\=s/u쿜>sqL=pZ<;"EI xO݄ ޟ%$ț`dO͆к 
ύi"m!HCXHo~x.`k i.$ͅ=j!
H8FMO`
!}?ɝ3,.9rU@7Qy
}
ׅa$qĲaE, })tbqvG@Nȟ"臍m?щREo"l%$q϶j`5a;Yaϻ&4i'=Xώ0g
jvbqHU  ix=rK"AeIa.w/cYdyڗ1.Y3WOxS0FqFP"ڧciAPfgqh922DPפ% C{_#ȅa^dqyui	Jh\ʷ js[U;HI;O!,c$9*1pXg*n
}V}_G_ߛbG}"~=<P)V&iJ{Z,EotBQ3 ?#dA:		Qu}W"n}Qs 5߷{'|߃t[BscؐP%ѯP=*JZź6\6a[a8vp4˓gi uנD 5 vn^F*U4gP8Ӵy@*Racn/s(N@PӨK@QQ*eŃntwMM kv]5ON@Y3@"$?vݐ|@|ʡӡr>yBtY>05M\D!_h>;%n	Hi${"bOToc}$-qE5p	:24Lh¾@WrU"U{ G^ܭǧ5g|R@[E>Ws\}>Ws\}>WsQ?fw{g?kƯo\ӏ_#U콉k"M"5,@]ˀ
rpU=ey\߅xh'E|jH91/NCxMb$aK^GPFSuT#|vھG+!>Sx(Y}2߿r.ss\\a򰍇Gyx<ay#m{<,⡍f$OC=[X"xJ<\*na+0/zC<P⡍aKyXC7yy|/{y6QV;G*{dų(7wєZ[0ޞ~k7[fZnNe[7|ͷQ<q :^qLcB:~lhQ''uN9)->ޚ3<~\hW'QǓ?G@Ox}HP_CLQ%בިEE8!9s2,kO>#c'Fߏ[x)F-F]1WňU_#\|h|<K?Mw
POkA}<^m
)J"cb؛<^K<+FE3bśjB3U3\FMts9t]<^/_x|ٻ9[3X%<Oܿ	?>D?tsSep:4,ǯog#b{1,ލx}7{I㹣ù.\kϦlmeZ8xMij:Tx+]<(noػ~>ųvtG7ػh
4~P-Fm<}]~#}go1~7xޟӯn޳x+<	{7p:]k8}Zy|XN]K>kB䙱}q~tǣ)K[DWs8M|1OG	~W<.y|o8nr);'/(ѣ]l$FA{^cng"/].:u<}?@lpxϟQox=8%>8]3"D~_0#1:wq8뵖VP"kG<W[|0x91:R~b/<Wk\RI\fs8ҒXl97y~ci{v%?^e8[ww!'?ptF`v?ps(ED͇xy!ܐW;zػ_[ES< WwHOM2Oy<M<+<mH	j}cnrtrS
E뵑.>N=[7RMy<~7Lحp"{x|i.q}t<gcǿk<Ǩ׼^d҄'O;7W^콊u]'x|{]G?$O	(g	9O/q\㫞f1F>/!q"w|D{ d)]cr?@Ƚ317by|? B7_!>_{ :_Ǜ~0Kc>Lp8
Ęg\qǻ˓"~H?osxv숁xrq\>uH僘/̹6:ErElF>'1+ҋPLgvwƈ/;H%,7yc)O۝uLEճ~oIs9\k]w]sIqumMmݺugmq)?OqJģ#j+;iV;7TAn]_H}_<y2vZ'(\Wr!UhI~Nn-7 |'=x'Ə	@W򩩭.wU@ŕ
k*
ps2
]jj]3]١V5%U
RX}`Cը":7c
o'J
P)_am# ɣqЛcHa~%.Q;s++\X OYZ_'VGovQ,H]َ\<nw.Q~'b޺0?)v;וUУnTTUCu8(0|,OrglBZv;p.{_^,SXW3 3Uu^iQ# ~˪:c#YKꪆ@ٙHMEhM4o	_v])[>VCucu؟G?eom+Gu;⩬8f6zwHƤe<8f!]=(pԠнO#ʋ!	[Q!rKʙ*\3n&P1*@ؑoD(!+驁5߸gTU}mxǮ\n
ĊQC!KtHЀ[H\%Q
ZExcvII5g+%Βt&veHC/rt]MC=zC]]'
2;Sm:??ԼUzXB~^M]cfǣ`0v+(YVame9q^uGnx/>Fqj=GCqyPNyڞkb* l%+1B@v	B}e+jɆ
)ck;5t"X!}e%ZφjT<DF
1he}(#tu|By[V_4ݘJKsa_zClc2rh
UVXuVц 2ť#5/)ߠq't*)qF15jޠTcZ8u|"=YUWyrrb$	K325UQZ(ٱ0=D6vY.^hp)0Xs[׋Q?r2NP(X .wDZ@j%B)&TCe&UᠣInd&aŗ:al~EtƄ
TEb+*陧0~ZVZ N"g!Q
lFֿ
Ѷ$Nu'W-
*d!B%m@qѹFp޺(3rTq
Q*ģBYF.I/M3lKů
wWԥ++/>Vc)I/񉆵^
[܉	ZNEp:ֆJjIwҳKaxC~aVP(N
夯eH:$'F1^S5Oxy
]ΌHS+E~+nAOeLU)2ǋ_X#޵. +~"|Z_>!E~,B#	!_¿OYbM$D+x~qgaPAoEx	k,B.c{CD~-·̿-"1?DO)2"'a"o/Ea壻
9+S4Q"Bt//qey@^+?.U~<V]kg"jУQé#I<߹q
CF?|'eؤ>V|xx?rۃ&J8?Z2\~$h;)A),?c/PK
    \               com/sun/jna/linux-mips64el/PK
   ⦢X"  2 ,  com/sun/jna/linux-mips64el/libjnidispatch.soUT	 3f3fux         }xŵh%'"!xT*4]'.PS Zeˁ$qNKP{)ӦHu[
I(B+#N{xsfH$;!zwfΜ9s9K(6?;s2tW	F]g)=|֘}Yv췓\u[['GSJ;>YV<|؅)oO=qKXA覆O˻-ϙEaLS͓ƿ1WP=n&nƻpǚ
ʱ?+\h|Ƹ]RgɰB1Xh؏]uC°2veWy{߼ίZ|<axCWȭZE+hr~*0$ݝBNɏ'K7j	 Rhn&oL"g#-
5G~S'_{.%DhR-ݒ'[&ryNOc%h$wo'e{(Gد}<Lߡ9<߀^xTs<G6FrՄ􍼼K9'-c-G੆6gᩇ԰L)1	<%S|)A~ϵ\oo<?_:xnfB>la,x΀S }.rxMr/
zG|ede[l'£i$/2{-/&x1x2x=2	xlf[Y Ͽ
ns:<e|s;ɦ8G`;3y'etzls+=ے<yliWLKS}+-. S̇g3<AS؜I&w`r_Cix~mmu,YLt
|e"x.ϑ
<`ߕ}y
/}~s黇ޟ9J}D&MrK}KlsǲPiE7>c{G/фFR!FYFxBSj\L/+ӄHK	~j>bogSPDx6)#ۄGO'hyn)N*/1{|&[{O"_cD[ߞbu3Dɶl'}d[ؒw)?U̦sPrG	x,(ϦCW"WDʏCA\R du
T~5?(}[c,SnގJ
pK=joJ҆=*){=L-tvQ>!ʿDϰ-TUT7Fܿ3\(?<Ihvi_C%Ap7R-$*$<dn$%]C𓨽*nRTOW	fћMw۲ҝ+d?L*2("C2Og7za2$?yJyE)?EOtH?/#Uv}!ѧ/ݏ}II]0L y_Qw Dt!FF~%'Ob`:j¯D_޾&?=Ԯt)
l=ԏHt}B^8Nt&dCE7<&]'Dx2ekѳyody	I?fgZڋl_ͦ?_odU|/˹=;R?]T7{G2H:GoT$G|iD7~gg$~DI/%AR2
953=L+N=BX6=Qq?Y:;o=]LK>oϏziO$u|)[,_&WR\E1Cɮr庖e󋔟-Rΐl'9)d)noAJQ;"4-~Eo-al}EA;"(A.#<s;n%G=+mpKJ
4rpط@ƧR=!R.ɇΫN~x-|F麉n
=]PzBwY/+1Zy[{	O?
O%x]*
q[Q죿jſOIYNx_S?f?ҍZ	>l,"xeIYϒ6<T/}T^fb2R>S?YeXNb?.ۋ5&,_ <~nUoz{-
]XjO,?l3ϔǄヹ`btZqϟ1,8oϥz[/jj4/xIM
Kk/Y_9vARS2ayA@څ!ּ0-f
7.-_\_b\~օ%n,_vټy~F,

k(ʢ4EuMW,w-y7#׍u͈<g	0WgGj|M-Y^z̚`AX~I͵QdYaqøi
aEN s-XZ8Q2	_4|N+ }KCyKP%!ϸ.
2~뛛3TVpS91	*OXzR,\nwׇj7d9jn{B`EM5 gMŗ][`^4UJVRӿfe܁ȕiwÂyK - 0b\
Բd%c%Mx5M-aXWjyMNtz"ly颚kͫhj/zɖ*2W(a*
,>%  tRcI}v}0ɹEnX\o^cGl
P	,௼9[\@7Xi6/[KA5ϗ_tGq"W|s>N>N?N+
D*ojCp[c-Tc-Tc-Tc-Tc-Tc-T ˗-nwl_*LT_r*_ 9˛ߋ),JIƦ\=? Bh8ң9/
/lZDkǮ1<ћy7Eq}!tvMu)ԐQqPٷ*\KӺaiߖ
}-,䢊kQyfR@[t]-ozMK ͠JG7W	zlj Prxk@
^PuѬ뚗rE5_]tI
&'-#^5yբ*,]$\ \Z)rC*ck2> 
ӹ!R㛎xDYY+px\kj̀b~ɼ+C5nZmɚꗑ֜oCYץs5-_P>[C9=ӆ2t37Oj0񌈀bԷ.2,0^|0Ė.Z0݀

IK-m -8BKؼ:4D k`iz,\̆l/H=55-jF48Z5˚lxl!f
LPA4pJV$09]T7jK˴JɋsqƉfzhisJ$㸌Lq61Fp5f4 5E|5'ؔAMY̯;/s9vsEQ.[RK.*Us9祿?\O?\_i/Fn?+	Ȣv)|eBuTH5'Ο4}4\=Lwp'ܓ9GnvZrM;-n,joq,;bqG-aqwYq,AaYܚ]iqWYnCw#wncwiqwYq-=`qZC7m_[]X^gqkw]eqW[~Y-wXQYweq-^S=hqYMK[ܪZ>[,nݵǒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿC42ag,K;6#v̚`V4>_b~Đ@𺓥*{<hgeeL]$<DͶ@P]mv>NēS-yys={ȉE3}XLǅC55A'42Q:iSm\pmH«ub~)%g-U^N^f7{<(,SaG|kIcԱ2Ͷ*h8A<7
XkSدI8&KcpaJ1v
ԍ.j`[R`x'^ w,(IćxKvHO< ML8<Abv/QiXGxFt:|e͆m2\P>ʇy^~,#W=B$dyK#1VKQmUǝ]n/W ;4^NX`"mV0Aƅp/ceROLqO\΀Wx9{M\F>CBaa
kQ	[:ڕ3с:	!SUJYt9@+l_z+|jJP~Hv}Fa{}&#1\uFTv6kDNW;t{{)]'ܒ^@tr@s;ڔo1]>m
K	y\ 5\rf)5_.HsR _C>ɗHazk@y~|{!OZivt_ԟE&	m
}
@ < c _G~}n#D
&Dqvę]	35HXdrOKZF@n0?
glP;}ʊJ*0RX;D(mM>°,Hw?Аz*ZkaW$ُɒG<,wr8O<|3M 7< \!~1^6emgm&'YhU'"+/6#9&U9c;ʿ߿u$>	F@>Cu.PKݚGXcන>nýnh&`zozRV{ԏ:QlOvv^ogsh!'ہWS	B6B6BzFzFc9뮝\C&eP>a! me	(["ԇCXuQm	W/mCOEIjlжJ5hREز
k4NI;QVǰܜ~_c\-|+[Jp5NNUP>\G_~;b':!v }{XU@.G{型P& ?OTJKe܁@]a
Y0MY>Di+>M9i'ƜZX9evhW[oƜ) ([rMfe*
^y5#τ,~Q	l-	|hv&uZÌ^paF4>ZɬxhE
X#(onv!
~6t3!B|g'$~駑!tmz<K ۘ
ݹt񶶑ˊC^r/b"O3sڊn^qXi8%]_PIp/A[;#6HRGl\mu3MlQC|㍃)ry/hq_m<*&dFxdvMYu(#C-Q?}M_h~ /E>@r/Z@-}vbip.Gqp?N)i.Gnۡ.XsZ~z:ALtz~z!2	}# _1@G\6B{%OYݥ* kd+ mCc	#F*O3}EW0~A2A(uG'1?񩿃/suQ_Ane),|	vx*-0ܸ^(*-
ۨ4tHO<萦L\0r|a0M>; uiKҍ3]Y@sŜ;\Їk{xj?tǘ~-e*~
-JS>W9߃>	eF)F:6aFȾi{-Kɾ	&ܺvF^	}\Ȩ=M@I4@~Gz^nw HKH樐snx/7Weq!O3՝+n<v2I:J\JaۛKKd_sEV:.NzC]7u@PJ{&gE8=tr~"qp~di6f17Amzԇӡ;HܹUi$O[Ŝ`XXaQQ?-`^B(N6T̗}.d )enga?lTLQX] i,Ve{QȀPj^>m|s=1<BfVccZmE[+z
y<i׷Ʋ{]{\Aۗ	|,àFp08g.t]&{p[pҸnHHAS7<\㉞wy=!,#כPfm3Q碱lW)F/3|(ghDx_}B3 7Nq(G$d6tO?KvW}rlSo<_oO`>tz"I~r)	eC1[Mڗ%՟8T>xN:7!H)Q;)X)*;lD>0 u>I_Y8cm.>?-krpM0jiuT1>!Dw(&ad.^Yl2}84\+=$7s9ݔa;X6_yQyxus=6vD	yrVg$ֺΊf%Q-fMüLb~u׃.~jW] hd/YRY_沙-kq|uA//9a=k^1s. NW޹@ @ @x
o,.{!@x» ?
wBU; 1@x;.57V[=`4h
wgj38|>$ܟU g>W_жwr\1U Azd!X_xߚ`c?|\$ƚ͂2K&Y^rKcE±\
#]
Kc!OzQҭw 	k'p<'{
WXxش^0qfﯼ	uJo&'~+->oJxb<r|M32W珣q=k0CNK}ly:_|2XO31US2cM>q)^ZI3yX
`R7	:tTeQi\@#7':kyt//O9x."<޵F:ڋ-l_r뗵	f>=OU64Won/eIp6[3a&Yԟ\>7V!)?ZVvҜX},O8Ǿ@;Yʠ&8d指dyVf;O]Wv t3;Mu<AHwכf)Ƣޱ,P6,9 7#EPG!fcrh,z`E[F#`;:bRvHر
grSn+u)?w0E##5'Fv|m8VY`86:v,A/xIv*>xUq~4KuJ;н>Oi߫WAObvpmICy Fn]<n<"'L)EslU8``ʼJoAfa><vd'S۝tfip܋r<{wҹϛoJzo%!:N<)<u췒G'j ;ܔX;Ī}ؠY3%Q÷^[Oyg"?k\_yy;mKPOu8^\k+vn9vib bкZ-1{MwG ƪxuTsf2D?A]sңDf8L+n'D?WraZmM-	|<Ub/=-u^Y4Wy(bN;,rU^8S1Yb -}J^(y,؁y"hEОա}>uh:YکTv*yP]Peju4|`ɭØ&o~of-Ve~޺_x+Nu!eӽe_g"S~Tϩ8Or{-&x7
^KUy~OW͏ςhd4Kh2ԔwHt?	|
mX5B{[C/nq$/^fXҵ6{yX=N_+9`A\12CyP -@OZF-=DC9_܈%Qgh߈oeh|+2+?XNpW G_tJ*/U'
.OO
aGHÊl9vseZ"UXVd+ʼݬlHs!DdeHHSe8'P02oqH}50+/SG
S`SJ&KxFvk-`Wlj|v<LI5;uR[Z_ک1>C43I/`ݻϴ'-.0q"?>cwr(mo\ο5#8._y UJ1ئ|uY/޹3߅Lޭε[?Bu8f H[@+>y	ؗP??9Y,ov)M;
Mo7*ԭ8*'iX{;"'o^	$zl#r^
9Z[ɡs®VZ49zVhG$#]ce!hn2S>Awc<G]̃B[FpO/G>qSЖ00]L 2xL09`6ӛ8~a瀉a0XoNSƨz9ef
ll'<|K}q8s/x~:ܶ1rF#2Ǧ}aVt肛uȗ!_*Z:x}q)N{v8/3ttQ<Ҕ˒.ꞏRp\xPghEx']1_Ww	ǒ?"_#[pTtQ;kz̷8^\-}^++G[nA>[ ufF{EQ_c$zb_u
boGӢhHžsQ\Sp]PMaՖ~\Kߢc
޿>i1:\=Qq-yM/[޸AY2dLiM{u%*)q)kjJ5;f	ciy-2X٦]ĵg͜l{
4τEF6f%.kPiu|ki%Ic]b<SϺQ96iZ<|86/yduw׼bb<vNCi<c9^2w+\;
3:,KDKe3pË">uzfuvxh: Q>_')Om4(s>;T/A'^罌Ms|zMP<[E]ՍU3>)ց]v&_B떡䜀5:Y;d
宰\ǋkE[//׍QU2 {pG .'dx#
ƵV2?2	Q\>S1;bv	K?94cǜvweM'tgs{0zy}^/DsP*S=	rq<	}re3(/U*µ͘^{9^Mܛ)@[uOSn5/2%WIWF5g9|&o@S̽o~$<+'OO`?uvRxĈ-[*TR!.ul'[=`oފl.tD#]ڨrl74]b}n.۱-y(:˪_2<tnwR0 LvU6wnҫ
]Ev
J#Cܥy\ׇp̡Ve *8i[UmT6k1 C7	܊=>?Q\J.4,sncNŷ~kՠBndK_+S1c	)O^N
<#>>/p7Ac%|~E)i
RO>ѭCC@}z"|*T޲"[NQs>uU(qqmL>|FDA~f%=X'i+SMC.5,=˕w91b7;(ͩNVtN;+s`eG80X8۽,0
H=Hq~?\B;v3<.mau=m77t΄'u6N%$yo[{k,/q%SM)!;In^F/U|P>=<X6L/H%JϳH#';t2"=j
I
]*u,{{tAHҝV!І*뼗 ېgF˸_	0spA.	E(pxQP~o%0NWj.Ez>UN^PykGΎ,ep۴~AIbX{~Hvr+]L9<[BySG2/<Ǐ] :@|"?'
nۜ88@m[/u);S--dE<E~Kp>q#η5E<$>5!_0Om\K}-k?}{p /n§6N_;(NG@dC:aѽ=)&jIeG<هSŔlj'+2iпP@/Æ(yVпDX_T/ǋP'P>Zt+66D-șr 괥8)$iSr
Ux./_~xx4ӘcL/,lY#|ؿXǙ:y7'|.S m>0qY<L'&01` s5uG|n0W6B;ɽu_vutv;K`;\;؉L0y1쇯|~Ú%^O3(bQTn2;>KeS~ZCib^A׸ˍV`UL{s9+qW,uW*/{Mrt9|ަض*XYZ!V8뀚fZ%>4rz mi]]KKKKKKKKKolVY&6!Qvu'y~]c]S!bTͨ3nt#?Ҹ|APk?,u/\&;ٟ:#>b<&K7/DiW8d*ۥ9 k<fէB.\eG]#C૖>x5fNSpC|^Bcw,}}2|Od;kHiS1(d`DK:t7TOΆ>W}vS&>_/&\p.IW-Ӻ/pqHw#+*Jˍ
'w_
+?rwC?
?#cOyzn5zJ5~׃Y3AU>cz?jcܖغaʷ\Ep_p>kYfiXw@=YcnSukT&: ϫOQ7uiwVxA\3bIlVNH#'-k6f/;l+6/Iz>:xs>}&H>krpD5؞3>
ש߂㽕qXi}ĿpsfoZ4ϥĀOS÷)A+s C<CA_j~}[itysw_=6Ɵʁw$mkx{rˁ{oF^>s\|k<qY|AQ巹SW>]}C<88<@G{95&6kggv	n,S?n)~k[Eg̞5`n#>%i0MH4ufg<J:3lZׁg-\Dˬ2	}i?x<ΛǘUik<1S<gͣ_G+V<'5(9$ֈ .#6A9'-oWd>E8$W=0^m+:B}^~\'yi}xHۗVʛ'OmW1xkn%޲ҵ	Z^.<nвx	w0ʴ}u2'\(ꙇ2t|k 8{_O<;.CCm>ms1߅-^	U*OwL}ec\(i6<os>q(塩Ac֓΍84tn<H:I:
GйCCgAy?
йwskiaK9K9O :M3OfCnў:Nq?WQtGUVr8N
,>tn:iǋAn37ٟdיTgߍ5&sr_sreZoC>>>zfGl|zqFpzfcSAgAiCC玃sO
$t94t$O's
Imoc:_-5Ysב^(;tO#޾<<sx:|lyt9-|cq\G;
m
wE]ԅ5,ۍt&~]@^C?|b]g5N/b؜fG"uخu6ֳNa;y{vc].]oeٺse[e=ơDc
Dec+8yۍ\%f4Ǒ~ڊ_5sČ~5G?_r'F!* ?0r񰖃s3~?f!9uDn\??(HPe`{|=NI7V=~yt^M|+U- v4'Q{}e|)Z?<q*S`>57ԑ]zxΕgxs@k̤+N#<sD;qI3x+%خ|_oj㝶x-x5CcxvoS>xO+ŝ>=nw vB	\`~rmb-[5cw~yώѾ%]O6-#{*b({PWk2z񡮻
늲\+w \QG1Hg.	n+~"[72waub=~9 rpd}wx{
_TlE"-'AO:8s~tTqQʓMt,$OU{1zq'Uj΃lHGO޶'+O}ѷӃ7@dۅGO<|M/cZv]0ymx\S/?+g}hṎaUu5
iFH{KEPݩh'Yi돠8-4<^5NB6ҡ)c#;l<ui`ׯ -p{x)V<3x0x^mg>
;#Κu߄w#݈gSp<{){$a/9＾%)b#+m"U6ȗm6N[QmfhG
kbxl
m?P;e;Y> )who#i90-|w:mB22~/jtA嚄o_ism
]{fx/slX4ӿG.Kh+~v]:;TT/@sNT:Xa4콺~ Վ,/
,Ǝ=Ύwyqbt^ OÊ:MDlS2{f>=~MOLLyz Qev}ix-`\ʆ}`;6Z`_X4_!|ׯ.l?	Et=
,:-4m|0ƝJeswgΎKca!K"=),Sp>4'V|{Ph(|xOp6w>>3 _3
5LάlڼelhVUQVoNjڛ;*Se	oGӥ/Jk9Ӛn
ia[l'SgؖP_ލ0Þ	xC|7f9 37w}}&fjoקyTkw
Meºrmpo]b[jS&?X&Lw'i \%
n4.q(YEʄ]p	7óE,8afu~fWK]q(O%k$؋[~FvBIz,|[\Q><?Ty2+NaC⺷3w@'!֣W};
0>8r:{nP@@r}&!'rڦO[CA[xDJJJ=K=xtnxQ?kḅ<ލ~ȸ^*׾GqyU̸<0twdx.ssQL[	~2`ƍx~q}-&Cx>Kt?Mx_Ư3byMnP}/3ܕgw}ogrbfɍL0bpL\M7[50U6$xQa僚0
<cs?/vNѮ_lll>3dl+A>6a{d#ƶle8ƶ?֭\pHgiGc`;{K-*؋'%e;|:-g%^ I|/N\´|!
1)I6{ʥCu(С:CrPNʩMG#i"ۿ[AhtNl#n?uy|/x#kŎ*FYg^?#u$
Ξܯ~KPhݫkpM||+AU
ꖗZͶf;S,hϮ{W3qc

iY!z3yǲ\x?"[m:ڡ޳ARi.=
SfF8aLMg;ms^igK̰y[ּf)+t䒠McN(ۡzD>zn{MQf@;1
6C<a-t7Kv4i@\PާM9(n&㸂Gމb\! tOBA`}3p>ǄXmc9+ nf\[P{Hҷ΃BJx'x|2;|/^?iWnM0L^)QΜ"׭38#"OeSS,f5k:}Й?Ȋ/67  
qZLc2?eЗUA_V	}EUډ'՞pȻ_žIcB/O}rʡxg7quvuzc2 _3Oaެ'ƽ5gLputLƬL˾oyLwK*; 6x0<`3Ց׷ _ txW< txW\A*&5 [Y W\s`6y ڟǃqvbJ·qlǃ1@āwl=ڍ*8|x(!j|`tY&\E W&(Ӱ0K=~Ѝ=[g;/_
b2e.xyx,o5(pSS v(O]˲<
eɔe?X~7ɟ<eYce
e*-~@Y7ɿ<eY
ce*U~_\ϔ%,w̄~Be)rZ:<S<evQ,]PYFM,Pᙲ)˟c(~d+P'ᦾ4OY~ce#,nLY8OQ.!hܝߝtswKwKat}t<35||q-E88C8/br0a[8qLq8!N8GL~Ӓ#N)%*8|_-9lX/8m∱	_5=nx*6}	=ܖ?Q[{x898|dz߸5AB[4 \67Æe	sqL1Kq?n5N>]:	ߕOCy>$ v;G+p=yӅmtJ+eNuۅ.<$>dgۭo|̰w[}	`Ly ߍ߾U]JG4[緲,'ڶ=Yxq^Gxpx	o΀]s9V*8WNUvڂw.Ρ|ej[\@7q=xW"7h!
dډe5ȫ<xgc3ݕa ǻ&#7p:<1ٹ>y~˨ Omc8j#.}"_`>ۗ֏>
.wmGry@um4eHgEy' wq*x~"壡IOz>).&ƭpL-BsaUoa!l^6Ul^6f'}~
Nƻ6=BelBƘD2soe8e9pT.3qR}Tmls)<U8WyTC};pqWw8JNƹ^]{	>"ߊo(n#Pz,\]+U5Xߍs-]K1}1懾/DZw恾/:<C_зOyoc=Lb{恾?Be;~#ytw|4s}"탾V}柾|7ޫ5@i!M[:%c0|7_C#[l+ĺmvqF&#bfl
mQm`T:02.6t
ZvaX`&5[_)_Luc8^kWτ_B)<
(9T͆Tm3-L0y_8a߭6*k.}Ϙ|Bϛ8I'HN`a5"3m=l$G$WkMryJU4ց:U@[hW-[}$'$'mׄ{xF4r{.7p==y._,	@&w})ٛI<hYzyBcVIiφ"Ŭ,z4yܩ	߹Y7D]Nwn abdoR|9z!czn4}1v9տ75a&WK;q7c-L^:!͗|Kg=ʟ
m
߅u7{	q=ϏOSY/} P_xGF<F`o;X1~F#`8:^6xhwl6Mꚠsg~G!v;0<')6㥕3ETM J܄9P+Y6ګ'AE	xW';mgdxOof{i<$RE]
vex)KcX9Q+;*ȝ{Μ*\j={y
u#x^#Ǒ^Vѽ2a!HܭՉ|A4D_Ŏ2혇(,s/QĽWBV1\~]]weUoni8(zlGrQ^Z^>m
{` ?'䣱HS'<:zj]y_qÇxvûlUi'[lI
Xp%<5וOe:^ŶtjYo2
c؅wM0lM{!GP/ѝeqVaGiS0n5Ha\~WH\)wӹs^} v,5/d!vQ}aX'滼7m*{Жuh:kڵm^C֡ګT)cRU_z+DӾsRzjYi!%k,%32k'RnF-Hl
NH;%$/;WcgpN1r3Ļȟq=gOwڰwzU~GY[sntM@jb	Jq\NfC1O}5g)ˈ֋	^
*;S|
	S6x_Uur^)u;8hQ ܣkaP 9fp۠ក%Q^I)0s#WX}H4~/֙##
!+|O:Yp&	>E]8hܤ#ف	#ѺƪgD}uw+xR;SF:֩OwȜIy7{6ԓ?ĚG)oM/  L{6QF}GvW\u':Hțcݹ#t,*fcy xm}ŗm3T~c|ԙu^6ΰ|O g-K^NEA\ǆi_۫xc <1u'ߞS.K4YGX/0o7!=7
3
bcylf<liz3{;-wO 
_2>'ȁn{3{NMs:;16Q0pɤ3RJ.6<莘XfhN6B}lHFu
B^˚r!G塍**e`{6@3gGq?X6.Q'ZD۠\Ybf{4cPv>uҎ̆ž	?-:wa`UwsLW#jHĸGuI8\uCe~,ϏOc!=N1um(mclj{^aӆ+ݚpq52f	a#\)+pnJyrG?ݒc:vzTPMCFx(`рbb;@q䈘	C"?,q~
3P<!`}s[a?ŶOs8pQ(s/μmV@=lVR^8Uv-A8*O1ֻ zߘ@=ءYW:<cT-:\du =&3`q>v67ǳ"ea=n+)8~;^~y|-7?k5~a$<9@~+SkC{lwnEkgzܛ'S~Ǉ@2|nk4&'ә11`9<cbwmW Vq:U7>UZ82YFqxC"aoIia%Iؠv.sCa'7x#<o8ÅҗH?W9"Xpk} eg/g:dM4n[VJ&A]qziˆD~(ڝoBI
>+
~6w4h(E]&"l'i&d1m ܪ\uǷ0߾'7{˓*KQRt?k8wq.(s#}ikBI?2=i4#&cgx6}7@lg$sDQ+@[x^Ixe,5b.S
ۄ}N,ԘVPZ\&zX:+LϛhT4jze?T1=_Eק ?Wb燾&v<7Gu0kS^dcK񎢽8fඉ28dz=H*6:A9Vǲٝ*$ovU'U'
}yd6~s?.V!ЕGBsa 2Dcq.M1a3O}o<6_gS*Jlߘq"7'6rueԡ7	t@
[l0aq<}{Ev/.۷#F_{J)uU~UX]	axo[-*q91[^Wg
	K=K''u>%l;u~JZ;Nd30?eX;N*290.A7Q3/Xwٙ{2¸ƦxbҶ_Kriγx
c 9fӛ@No9!}dt=L%s-xkOHӿRJfB_b;C#yPGV^۾̝)fwFg`Eq 6~#^cu`orI1^<z@7j2S_Բ&N1^bBق]4`ыcWM>4ZD
mK;})7~/Ϛ#Ÿlu͓*7NYcgaUÔ^ӷfixǘ/y1D͙|*ΛM_r<LHjGQA<^b>8v'd`ȦMR˱Sǹ.L9^ }yb8G,BZ
#gol33r$V'gj0G.8c|&l`F+Uxh0d8ΈƤ0saC8ӂutRwkUv\,f獜gpH ~yRa1r6N}t<&L' ŬrkҾ҆Q'sx!+Ֆb
JCWρr0L;ɲ]@֑{+bs<2; wŊ}+Y^bf/VM;( &zm-jcW[?Ŧ⬇8G-0_ij0
L-fgba>64w\o<GV
Z
@KŀUF9S>h >/`γ~?P?Wbgs,E׃[by2u1;t5Ak0ugɼu^}14b8M?HӜ0nƜf31oqև/mDqi^<pb78?ǟu>^|
<$Thu
u.DȞ,x8EV8PM桅h1h/iy;)5ytbBCD}TXRdEK?pZu 'EM,-l-d).O>]&@;kvVx^g.w m }r_ho%@
Ow<Oc	<w}z}ߟ!"-[}`-Sfn5O=qMEifWw&Ĳj`^M)}y
Rk]^x[
| e(y}(}CݻU\GW8Pl5v'
` .]$?_8-ZaMp дKAmH
m
-
%ul Ͷŀ?gtu-Ɂ/9י3gΜ93s./{OΓT?Y{G	݋o!߯ rPrr@{B/_ۏ|sp%wFpS
?8c=)Z/~ڟd76"َd#PHg<9P1G;5֊C(!9C;mw+?o эkL3vhsW+c%'@޵byyl{fT[ [R|ǶU7_{OӾܟE3?JSo{:zٜ6{߬K@|/Yyot|:e_Ya|t(NtVN7M|>qaװuχkb5@8>5JZk3f.@c>muAyz)ݍtVSzqa:q&-	v{(o1F~۟&ꬼc%C@ڏB::Ohڠ 15U sSWCc_Hnp½Q> ωP}H'h>D}-=|̅eWvWa\O<}
F'炯Z./$֚݀a=7YP0y턵!w+h:]|
y'G:lļ>/vF]vB0낦'p9@앥R#W6l4-qt	W/7zJG
hl}L0Lw$~%uAu/gp^+ 	o7KraMjHrY@A\K\Agb#5ZZk^<wݦOjM[3KI.\Z~>._6Q>|峴IÉkB?a~
v{[$<_\	.zg3峛`q#
?&Z.'£A
tԟwA/X>=τZcT+YW;(k%(=k Sk C2Ž㉠eAgavl(ͥĻhlud]\[u/=g#^{Mo<#7ۆ=Vpش6\3Vhl
Vwc,h lςUNl/usPqByςj߯Rqvߴ~mH&/<P5~I{vWU'p`ʆ,՜Nk´4h_L׷5Jnt*ОYo-R)Ic	e_GYd{7fdO'ۡ2GTkqCߤǠ+3hǮvO
rYxj~dwX׀8?7W6>ra{B/iG}Ki$sqm"-MaW$7b<sy2| bGͣjܻ'siq8tZ.ߗ'bO8Y\zb	PrN~;:2SsMc#+zquӁ$vq<7v Sy7MQCeYo^%h#KF.ol
l,C	z_shSm?OU]hgކKu.kh_*Ƿ++%HkIc8}9^*̴QD9v<6ρ?t#^'VJQ1ʅ޳FdI%?H荟~^S
-&&=,7
1vsAqLJ[$d(iLoV|6S1\+j#:d4m,^x"^ўUOAAތZJ4A[VC$gxHgr׮a\dZ(+B\C8RxB-ԷH;WÂ&*pߎt٧Hvi\lRL?K(((((NxHx?}2ɐ>[}ePǙz;	?է+kHQ'_AǞavŋ}2Aہk#ޕ'-}x8,=JU9vw<3V2p{psn"{iG[J%C?yާ`I8|KP晇kE6?~ZOqb8/"U;<ݸX0F;q߄U:}8{ 똅1QCy$-鄽}5(͝:ہV¨{kq-|"`ʘj?q1^ikq,Mx3ۆt)/'y^7%MK&,"%|Ú2G2M/B6+cUԏŴsLCƸ+h?,ܞ u95Є<
z0WȏE5
ɅMۇm툩M
6e*/!Mkbm*6Vm*֦mtw;\%2Lvl\эzj"tvpBSϕ{uje./SRGeLImN|n-Hxٕ
&8n;9%u@d 

S%7=1Rm,_Gx|?1LHVqOo7gl̟Mrw1fO@Z/BkX鞃^*Qώzpm+YegUPMvQXT*8d}e!C9+^:`A?dXѧ5]|Oڊz}AǢN3[9}!ʑ*H٠v.JB%?_3UrV6)9_<5,@k;whFt"]y1ߓ|WoT9B;ըf|-@bCN6-Ey^0]/2y.ɧ3oyC0Ci!j%\}c/p緣?ǹZҥr
t¾
PG!1nʎc}7dy{O.'?/L"yv+h~ӈ퓢Ao%Sh'E6^>j  |[Ю@plϡ
pXgk>|ֱMC}׏SmdХ.r8\(}zT/ .(K qQ:r.놺)=[
3+2F&qyE4<4'ɹgyUB`xԷZQAr"${B} o
_ȿo^QG`q\NN-ԑIbvIZ}Ce46"s͙`zsOu8o⼾Ri,h0܃c7QN^z]w^z-AP3ᵃ#9Lb^in@<Rv!oX'B^>EK&&Ia0</4[/ݨ#P?Vhi]6'FC9>5}3m(PmQ"v1.a7D;u7m7Is4
cBѵS>~q_nRQo{b :\9\tu;4y
hhlPGZA_Al9g;ܞ!{/궼D
JkJ3+mWa&]bvRO3IuLu/zz9]oL> bIs}Cܵ^
?j4QA!{gr$,V^k'ԹOY0_1)y2RSR8=%rzux9$#yuu3sbrLgyM~q]Ky֡KwF7}ޗ2cAx@w&M{f :!O&Exvt1o|
Gl?1ٲycgSVõq`#?Ow=%ݽ8O3m*,3Ӂ:nCmA{Y׺k%i"FOw$P c%N̈́o7c=*}&cn̛	1| o].>0~*FUXsˡ}v_5*"/GWȫQ(jy5|E}*
F ht@L~G G	voͧJ9u>xL/Q|e =$'z`^:CW#߫	(O5x)~{؍raf|N.yQKure#d-٥@ɞc<ћWN8=3˓·q+MzB^m4J>Cu/.kې׸&ֺc@}iqnm0j!Y?K~0o4"}whhXa(~{9cZsg^?_rd4Z:9~rs:\nw^@+V|lmĲ!Ѯ^MYخv6kYlKi\|N˂ɟ7@+٪|o^sS9I1q"M>7'	D<-lU~rW?ȿdzǗ^˴Qx;h  |Y#"L
.:]$1MQ?1%ۑ#L^N1HFh΁%	{G^G@>X_muCb-mu4J
ICXb8fAWIo6a"a3}n/>9TaZ={$|>¡87v(]D[l6RG;|9a:ȡyֽ,KUy<zߘ~E^XK&%SӾ?ߟ)נ#bW34Rw4йb諒;L0{KhN`#4ף*|}V~,?YXZx\{qc6RzI;M=nWȵˇ
.Gr}nMC=_Zj}ݴ߽c'8ż/qMƺ>gKy/bk|-C|;Bگ5Qb6ghC(Yseñ3·auG/>w{7ˑ3Dy(!#Ot/)wN*ɯGb/{G6?wq]5Oء81ϓsE#jy&t
34$q%_:mD{P{Qu#Ez;p̯\nW`)/ڃN컳C	{hsZ8|MG@YLimHN9S9u:VcaI	EKϤ=!L1R;ݫavq>^93,{ We\9Gto)m˭DY+fA:O~kԞvby1P7D>oi6?Һ>F{\q\^z
4WEm/١I섥qRX4CqߎuՍ|>uhhxފ"7pq\7.Z!3#C<B߬rlU^S1Cײ,_	;.PWu~' cƓAQ]>ǆϿ|HF:^N5Ci׍TkD*wLU⿹vH'ǔ<"YG:QSt6Hr'紒/U99.,ȁr{p#, f{F1#煞ako\gMݝ!*1o(w"i:ui/w8vǸm :lQcǣ=KalwMҳw8/,I>ڏ|('Mu/H&FQM(@!ʨ M"ͱ"{@^(J8j5>xLgc%1VrZrc p|^6ٓ&LBF,'cƟW{aʦƘL#|љkXephFPGV1Ym;CR_!8iSk0+BTm+
9丢k]~a.?~ JWS:%R\廷QPPχFE
G~[wGWPH׶vFWLwNɲ;[Elg}0+<hf.8Fw y~jlEP6`nˎV1yV
7]O8ס)3CFV}?^8/|S6r_j,rwЈxމcN}
#M#{췎D#F&=z{ǭ(Qک=v߾H;lhrm0bo$=\8>OYuxGQ.wɉqҹtµ\qogYOhDy`:Ii;LNb\PvҠ/<Ouԁ(bʂ !)*}Y8^A6?YM
ڤ=? [a
B87Jg#>n_Ќo!-ޠqC-c7Y6Bc:F}ڷ2l6XuہAx;5:ǭy}] *x>wP#[4V&{htx<g2cB/>"oF`tnGct6Fb>	cbh^a[|{ĞwH8P__}qũ,A/?ytcpqޘƯgTvK˱'ۅLGƏL%}Q4ThA,_mQc$77^Q6+
Aڜu8wDF&F>*d:oOEIG|K~#8lWFCꓜ//kG{"`ʟwy$8_Ds@#m8<'MҽM/-s8w_$Oy"h?oe}F^5=.UBm(>'
Yv|ޓY+rςKd-dΆ\K?OV
M~2N#ysأߌ\y>z
u ?|h>(?o|*)Ht61LpPl}v8Gs$žLoP2Wp6C	CsNJkB`>}u+#neܷjܣ5KA)lw?,>emZ)8,+n,F[Sqw/	k0*}hBgY^X47\Cfy4p"[|H%R5e˞0<~koWIiD
Fq(;)gb.Cm9Sb<]3%Ǔmբ4vD}xЍ6{yz?GMN}|dڞ;$Z}}>OߨH"B2<w
+cc0lb]
aZ(3\OA|]>X>I%19sO^EnZu1Kϊᗢ3X?)fZ~(57?)Y3\κ`{yNs #=7O;:5C;i<ԳĹf+Q"I#qgN҉xZu;^p;>/䋸Ka;m8^u۝>E.S!;^NC9EDJۄXrnAp?/=+h)(-$~Wvyd9Hz=Lݷyz
䷇mu80l3'gRma|}rh!^<k<ݓa=|;<uscX_ao>3t>ŴnpoRz^Nhws+w1iB/܋4TmxIEb=Tyu;layP<H4lXw0C&+fa* N%21z'?ݻdQp`kQ{g	<3{s#&g(><˓aoF٢2xP?9.l\26y=QzMC%)_;ܩAQ/z[vCp1?wۑ&Mo:J>vK̘}8Kk#7v/[KK5letɨwS}c)G$E5@x]ɿ~oqt9Ff*rVI}%V1yB&s>cq=}""cr1}G5n/_]3=-sB9-Gq은o8|{Mhs`}Pl?0\=dwv}w֢
31}r
'nāytqj	YUB߸{طxg0unPR.TBܿK9
\;5~/엇gw}'F<l2(_갪 N|Z\CฮwK|+XWhtoAmv<xb]dgF}v"A>{7G߻_-7	tnN":AACgGA=5}Jut+ճztu9wr}IDv:.|B_t6UƔ)x8L~)9al-_ߪo_0\ZœMEt?SD}_=m筍UqT'#*;ĺdGa;}:uȗW4>p\x
ʬ4z}8G>ssixmoڻ7}wG;˘NqGNU8Нq3۵
eч?oH_$~A
{ŉ7}aٞWO8=~F뜂U@wp	)FuXZ	'\t[]ܷaƱ{
K|'^zn0gsXk.lXn1%(nBvbOt^hM
E>UtGĹL,|m1Ṱ
~/xgěl8a CC&ӱm6\[o<{v6O i;viv_2Q\b}=9@eRIΓ_Y//Яۺ6%O~e*G%>R;G9=8q jѻ	//tahy8_/w94ؒ%_\x
ؾؾB-wɅaCZC:i_-څ]"|'gx#
>*l,19#_h8"jbVMO0L2
W\mDzN?g|a<s!VQ^$n5"9/t'
.¾.?X#:a Sx	j^Q"O&l?46fymʨwysxEzƗ
廧-ҳ9]tz"p<mSƴnSNO)?dl'sa[ő5oquKQK}NCӱB7ſqrڸnYV-qB%|	yD"I>Ľ 4vKѦdޗ!Z)5VXE[F¹iyJQ'ݝEoX(m⹰Ds\lskBė2VVm$}L=;9VQ&ydcmg'1s|x"߉zS|o$u<
xn=МDkHVpɑu%^u>p:g<NST^(GfоA}?[01H~WwẠo<%v7KW6{A"r2v.c~'Sw;tW#Z8Do|T[oЌq6+to^qې`vQja%|=NRl+ sQ>{qpFxL'[|<mX|}l\̝boMA=%ن"*y{oIuqԑl2GH~=4Ժ: ~+	:#쨫3_WC~G5-:o>=c.ڝy'2Vh_~g۝tOV8(~Y-0.wh$;B;n];݅v%s090gm4Om/~়p7umk?b+؜"co*PwVOȅp8;ưX( \>+3MD;ԝ}#=w%}F|維/ƶ#_p53}y`碾쿭.̇lR@9Npภ7ٞLXɂ<g}A;TK{3>>6_?&?k`.9,m9ѽjA
yKtwݗgkgo1eCFA5εe\sv1\~'YD0fܽh6޲BZóXr9К̎vH MQ$oeڄ|.?fDN둯_x_6jӷĸ_ŶDqG1|Y~gsUYRqpm3Ywnؽ((pL5^xPn{q׋2=(ǻ*4܊']stG_D=A`7x<mBk1e/}L}Eo֔PR^U辞Q
~_p״GwKA^469+m ,12m86nEv}?,Ҿsۄ>;}Pucrovء"{Q@|_2ߟr
cS(6]nM+z8WX	W.{Xtoli<zmgڂN,@FoZ#9ź>=ϿCH\=.iC^ͧ7 Ǚ[AWȆBQzһ9t|{\\,llLLLLv<<rSp='(}!cݝd$EzaN~%<;Pon^#%<L!UM=R.2t"N.}XVpsh̿{7lrqeg>ɥ>xg&y\gm<bg22VsB֑8|OE>df!xٕ(@Q廷cQZ7j#Kc~Db7+^ƱZAږ-j1d6~n6wGh>q!Us%hsJ{k5) ,I2ݚv Zf6]kyfg)Y}؍s^?
eb~qtHKH1JuEpϛy/IB45у|A;G_GȗQ(b4ZC>'ܤ/,}/,;|m.x?Z/eO/x<O%a.
ԗo2}H<+d}I	e}ωzzM
S}#9EڣV(GA%\D{tO!鿊7cFՅWzBZcN1~ /Az.̇uqlc-
ha4ӡsɱbLUy]6,?sYqzp~ 4Zpj뻄9!oZ>'7it(<).EGW;-G?0²ipQUu|~xZ>?\zSbȟ.;G痣@D_5ǫ〟.roC[rˣG{&gH^?HHmO-OH})c$>,篟N>Craɳ]:u'4y8ϏбIeZ?iKΓrR>grcө<?Su}.E_iIɓd=4yrzs=*f@||lZ]=?"lxO$5~\K|ݨ{2oy1+j
Bw|=[?;3|ŰD ('>u7QxO뇃÷
̻;B\#B/)ZW.XɸR9j7}JƽISܕ3-粓BW]͑7
lSNt?Zd?D[/?_
pM}sp~>9c98O~.ʜc_\8?yR_|:
%+K/,[,ᣖKKK%SKx~%cKG-X߷Y߳k	~%%<`	>h	?m	i	%~~~g	?n	﵄XYZ_j	c	#	&iڋM=krִ^ꪩktt5rw5vj6M׺:um;Bƚ`s#T]zwKcK]ss[]MWM]Qnn5Tׅ(;ݵP!kknƄP0;κAwk[;25]8VAaSkR$ֆ"$k+;::d}kZoin
r5uuN-h
*[;Bum
M׭].Iʭ`1lf֮Vwժ5U%הU]Sf$ԿYP|MG̽.Ne$fH.`IbV`;D)p6Cʲ)p2ﮯijF{˦Cg{M]H5HBY[soq`sW}qb7l
(L)˦G4*:C][bu(GDTܝP)ȯP	*RӺ%N۝ō:p\ǅcCLD5ַ	Bb"?j]fmBHSײ;ACXlqw44	R#Ik::jp;KciijU8l*)j6TF9ܝ\??넺ͭE4VEEl01RDT-敲RdJB]5u]U86"2`=j)/XKg}S(u2˸݂UdGE[Skd7㾩kFbBZ]DZeSԒZ=$	HCnl0J̚0tjqj0ZBB,6uuuhCjl9|m-3`McjSbDfYښvWUbƘxV-/;Jt"h.V'돔t>lZ#s#ig=M&J~u$eִ(Ֆ('iSYH[cu:
Sw}rϼԯ:-8#L[nfe|]x5$kP!''X#jxutmbͱ;֠Am<gJlj[6HR9əb掦P2|wPC7 y`l3CB]Nҫ?Ƥ])rMBEw)蝎/5Yj\#L9PZP#O3_&&&Nc3)ST:h:~6Z!zVmn#%X,9s;%mIEˋt~K1%M!	FZѶ]$n@˔3WE>TtlZ tME)D},*:5(7
aT@9uLJ7E	>:Y_;d7M뙤5+[o?~e.*gpfXDڵbz{ۦiVL&+2]f'흔WZCynZ32#z{[m5]mkm
7mF1
N
&H.abMmk*lnR^Ոxb0֚;
;,UC]DNp7nʠLyf{98S;QsQ_Sh&ImMқO/\no®oBw][x목S6$Opy}ŗ_veKkˋ/u/4KkPPJWQ?3¼*˞xͻV([a
o
Ķ574b	xTu(Zo5jZ(C`^SeO7Bx50Lz!mЉO
^	umt2ӨFw
Y
jƒ-ϜsvqbAH-5*VebJ)&DexT&#b%wNw
mx"28È˦	k8F Qk.\EźPl^__24M7#Y-xUolx[ăI=$xj&5^WWsiZԔm7ON^.B}Vd2<]/$zY'">^IOE|}+#ur+N?]s|L3iz|Δq}.q}.ÉzX)\ZYҕJ!*դ4U%=]}.#Y,>zrbR'd~QD\.6q	RйF&4Sͪ
0\pCrއ22\p2M8q㺢
S^qc֔	3;j[Zī
o[G(Cͭ
u\zT4gd1q!ނmɗf2vǎrX&NiW5Av8ZHxҠ
0tZ
Le?,|#WeҞs2?u+%$OsH8V03`x\'KY.ɡT^xvN^މUk)Ik3<pVK?4C9TkX	.G@Ig{l_	&Yʯ$ٹֺ
qr_%)]
ʂIRR$l
/!ZSZ;$цamy,K_nlΞ/SO	e+?&9.YHS@Z7W&[״)ԼEa1$,w:77wH*JG#1DNL̖ή4d[.r
O$iIъVu$фoj@-/:sHq{CN,Ixstb7vI>?O:2>ozP=!L.Lg3Z֪ɷP$htļ k.ꎹC&7%)lrZ&|b7f3ZlaW9a/0<_~[pHr8"LG~Q	3嗘_xĂ97Z:0ncxi	+)?,ܘO_{N3qxGj)K?'ESJbЙ">+!)3R'sֶPw3\_D^վMEM8$UymsknTKzO֔k+֬xEl^ӡ~p0t{QgcϾk~_Q목U{acSR.-aV3``{N"q:?<߇&{9<x~"2lg8?y>+lSp{q$1!X/Nar.ILP_v3l,HXþDp0^Z݄[{8! t"_tzBRg(#G8pp]ىFz7#lEQ=m݋)އDۏB'q~AF؋0A!tz
M_y0ܨV6aszԿZENBy":AEaVJ}~=vD;W!O)u<x$cڃwͩ{6=y0ʫ
̾eyX|y<Gi0g$
yjFx_F")5JsݜOJe~P
lQlsϻe\JT?=+lG27V>5K@;ܦ2sEG&,^BԖ=LOT+y0]eT)Iq`"XqWv$ީbڵ)(=s_ƚ%D+uԥhADR3k?߉x<rg?FU``< r925!ٻ؛s*sӴ#sk넉9nox^KbWԊ~	?1]ic~جpS!:)jF
EH.ޘ уz;*cڗg?4grN"Rms9RֿhW9=4/ƨσ:/EY?Q*v+id?Iʎ3WtY$ʈG[޿hb@ݖfeX~ωFtԢ8rcĥml{w?#&EN+HtRuUV>*N?#bCJ6qٟǈ[*uqK&c;^^/z4@/㏞y.?M]b}C
!~㫒K5+WrBZd:ҧXO^YOZϫQÙ9wgڥ܂-;>n^HlJqv0u]֧?x>n/χݜ?-yB~+LBmuiŻ6czC|8ƴ<_SOc㜿X{w>T:MYǏuW660-&.x#1Cf2HH
cwk2?'5*~$H͈0"b#`7Gt=oE\?WQ|_櫈CĶcʠko̖<ߙ9kύq|'5s~xKjPJ'R;_I*a=E+E-2x%~h(191dxb}Vv762`X^:	7{(Ͱv3lgȰa%
]Ogd'88Sg8A00p~uNp⿘^?_%
Lyfn^C|b6|^0s}QB%Jnz,oe|2\~u(ȓjj/)zy<*,a	/p{6	}jx%<ֹ\v
2]9?q{xl]+L=LoA7KXypCn	"
}wTzF?jS3fX0PWxf8p ~aV00-n7upA#3fX0Pgg8trxp%>vJ/.--6մ/+X&_YC&]C(7Ş+Lnݦt禗6TQ=eR%0)ݵ˛._1=~+mqӥnN>k7wuZҥcsIJ<_S?)9,uykS?-)ӥNYǧtS˹%uܙkS{bSN9?~s|tlClSiCNo4OsIҧInH_wS3?>}lzgH/SW9I"I_~cK^}HL5~#җw }zӧQOҧ~4}|a}/о3Xt%=`JE//UzT*=Oz%}zCN}]D"=Q?WH?r<=|O3؉鑱~>dz"*%gH{zf$otK!Mǟ0ɵvJo!=n}D҇fHw7?uZ%&ئ6oϝ>dޏw\SϏ>S秧t?枎ߜ~htO_w~ҿ6˽k^Rr-5y+eJ>Z'RŔ[9,I$=~yzg;CxYz[9}Nc3{L)]-_c&$@S{i/gH!/	Q>1ΐ.Sy?6CNݿO'~{ރ{;fH,Z7I`cIrAv'wL	sgA,	%ⳡ=ilژ,~7&۟Nc&cQ
^K _OzNFg3i|.IwNr>GعRb904cdSğ;-1sRğ"~Ix_SRė.E|vAxl:7S0M>?zO8~ǫsMo_*r:O
p\)<Ͼbd:T m-.}CL%V8\(ʭzH#VK_7oiLss:T~Qh^Fs{&7`\/@<q%~=. WLڏ
-%~u<ɵ/fF{8^3=Νu[}3ƟS{[y%=lAiqHzzGa{S(7'=P~{9ހ޼YE?\!{l|y<㯰y9O~roG3~W~:_~-ɔ/_zҒ/
[?y&F/o<N2~XX?dysY_*-p%W"X#ZcQqa<+*x3c<S_y(?s2%2'Oy"mw]r~
r1K8R,GCu\UW>ʯ>{̒x꧳%<E27pRTA_"kqr78^r?rgRzؘ%ql;2eG_6gK{K9?gmvr{6/ *nWT^7LBO9^WR*7юԛ9GCxOYZy8^).Sms?/ o_z&l[_fۡyo9s8aw	3ʾx_ֵ7GeX8^}V\<}sX[.Xgq}|\ۖ?d?ǏY+?@L;俛3M
p<k8ņ8^|(XծʰwW;籞Ws%_uKreӟ9^9+T<^xyVog,xΞz1X+,<8/v_ yW[l|x_ROVX'mzyPqu*xϫ㻘'#k9^*=Y~^ǩ}ꯟsKf~_V:CTz'-/XU/πFWjW~{>Wp|P"~ʏZs|rx\Z߰x6c9Yd\t$_qS{`X1^YsVru*5K?~isYTo|?M}o,~_#ugIu_b<W&ޏ?xAs<v0)Ks7uە~@~"+q_mч_x𜢇u3_x烶PK_ԏJ><ku]]ěp5]uS]?m Ty#'iiGX_߄^via|+;B!h7Tl
uWšu֔V]Z?- *,xgD][K{3V%
%ZukkM稪#^wM*,^=ԚUy	5u;iUU]wMU}Sa+޾KS"u鞔N3GRX-`|T'W&n_O_B՚VC-mnk
mI:j%|=Cwftva=I\P5kJ.-@Mօp&XΜoT]vme֬A2;WUu7TaԄ
SԵo1GzwU74kYޯToܸ4ĽdADWIRW RP+$ۖNP֡M
8<Q/
Ey4wusK'hRZ/K=%3ҫI|թ겦ěsXPuT!thEZ9KKxyD^z{S)4[6;ɦZ!E7oӏ!&%3fpD.Q#lUf<5-]m]V
*J! ա eO3UK;?YLMh˥&y_2 5 & ~}H1IjTq&@77t 6jMTl89cBU3voU(mvʛװ	;sFCޞX嚪[׵E3U1U={LmC[L·UMB̨dRW.?{e^X6u))M-)H kó5aKKm[sxAu-a1r34D--5g<h7?%\	/fS֥$vTD]	36z/iNWookZTuiƙ}-
;3FXK榠z
5̷|HDk]MJ"V%nE+(YWt&s3shhPZ80+S@P4izffNUJD-\U\-Ф,)ԚPϊtP'5uu8,S$e`sjp'h>pހPk0ɔzH5T;ApZ6jR|qUiz/aR0GI;NRfӉѤdJʣ/r]MJ_d^Xvg8oڭs)Nq%7k^dMC!cR*el5h-ͨAF&67&0nO} %LM6	[=&K-aSmk]A|}Sshz*Z"גZ,hȽ!jb3
Z.WZׂeAtLd<}w*"VyUt{pI͒<|
+B"
BZب~]bCaMmmtr/l	usa5fapKkMZ
ZlA~ wUj|P(4m!.⻸ή͵XM-XU*q}U#Nf,]%%o*%h$
k蔿;kq2*!Bx(l25](Moȳbv卫tYsOof̕E:'BkyM~uW~
z,;,LSyO`x~uf+s;z/Go6W
_;w"Z	tfF*gK_;ߔW!K?\<l=v@=釭Ǉ	n!&
f/@;_ m釭ܿ} 0	ztoE/ ]	c,pl?4㣫@A&)p)0yM~|B`:M= `#C[8@bsn$DBh
PE??#h0;4h	Fw ܁WEGO_?E% uV^~& &hG_M~]4
PK
    \               com/sun/jna/linux-loongarch64/PK
   qNXa'h  7 /   com/sun/jna/linux-loongarch64/libjnidispatch.soxE8^ӓ$.QpMH%^k+L~n2LayIx.{
Uw'	aWU\t<yEJ(*(!?z'a:}ԩSN:%c&,^V
	GқbWMW%')A_mn0xG߸P/BI-,`ݯ'AL~csK&J$nDC.4WkBnR8O/\r~_Uڈݓ`2WO;K\>㯿"'9puqʨRJSTwDGE[h$Rlv=+j%NAJBĜ.#Fe+EHqrgPGy$ŇwsHt`tЀĐ.yb'/bYL3
2y>lO{"p;~
N
w&~p࿳oOpgyp/{!܋~FCs1=p/3;Up_^p
kppoxpo{3ojo1vwp~i{;
G=X+{/~
[	w
܇׫e
9°}^L.>:񷙗~o7_=S>tt|߀eߍx4n_x[N/X{Iu5!#9/sˏnxux?9e#6%fmrn\O:^\놿J_W=NbEy/S~6{[K?Ԍ/z[1Zou.G=sEwOsxl˽Rͷf
}mۺ>PZhM6tɨƘ]7k~jBPؓ
	q_NO.Tqr3b|?\5bSq񍄺C-'⋁uOygsV}HݫF>nVWV%n^}]}=޸7x?А5_Xі6\災id
̻cV4,]@߅,wgkih	I٤Gl:Ƥ{I}Py[&N$I2:eumt7~5tVM}̘&?g!g>Ӹ/58-zԖ\q_mV.+px{ޕ\~+44fR3Z	08' ~q9\sxS |V	m Cෘ} y  rσ
o
 ?) ?+ G_@ tfW # ?o1W 7w?Nbn
@y :c+3N 鎄	23˳c7cЎc</|u&fNo~2"<&sPdT0[y?tޣO57ÏtggIK8_k9<VO
aW`px~'3:Q-Xr<"\
cp)G|X j+?K>>WZ3{f18gqsxs4 cޯ}#8L=wqx?$
2;3@=*=x~r-ŠoOp)uoy\ߒ8D?a=p<OԗW?Oc-tG9]^'1x&^8igA>px><@'\+ge$gv:vƭN?pwx[?YW%]1_?#~/u|3>FoOp}>ۍI}.ۓ>r97U\
.ǏL˹o
\Gg;^Rp9ۇ\G3/b3Qn?d9?[2.ϗ625v?2?Ӥ^\aGß`(Wazyea/'ϽKo\^]Շ%ncw.Mz]};^e=l_=Ю1UAVrE^.
vlO'}؋өӷ)p>q9רuG9ݜg󿆧zR=2ׯm\z=<K_g8}nz8wt{.gR,r}~/W9\әyNZ^q_7{IfoYinOfNۓp.#z9<Ä\{2x!G[g9OC_QG+9|k!_\\?땇˳O?r::(='|mz8I/;A_s:aOqzX8?DՇ}p +V8N_2cct;ՏKV^"eDNK)ФGSM6wң	33fMrMC]Sv͜Li5dfdꂹӳȬYiY$u&2BܙiꞳdX0zѯ\Hi@$6R:uz22{鳳鳧ٳ}a|[D L`'&Sq(3^\
yysT@k).2--+w HZ4'-y܌Y;c3f'O隆 i 6@qfK#T(Ϟ5oR4W*'u+Wi8qۣ9sR}Թi> +|b,
7u
Lͱ
Rs<(ϙ6'=}j|\({(33ܐhl*_c&tefRdqWԌyZ|Sgfхs%X)+ɐMY,&<T)Ksg,oU355Ko3z榁g3T.PYəf'n+I>{~ƌ4U-[z1:OZKdli,d8m`L 
#+M_@M3FEP3QIIr63#3
o@N/5%c&f.	 <p=	?%rO<D~D~D4mcSIooIl+nkV֊b[q[+ĶV`G/
\ouLw|-mkDI7u*p߇[%Ӻ5sJZnP1U驪~ģi2.j
l2۔hf[l]mH4mlK7%Ye[m# .jF`C~CjԌ]+0dr/mT/^wh	aM%OP}	|6qC*	iz?x!O|(!==#sxz(20u̴1DV=Z43W:=sNkn˼j߯MJH%nfC 8>s9UmaC7AcXkUi\(zVXOb`V~4;iY.w=˅J$:؝o84udѾdEk 9i n/l	,c;MG'5mfZĝ6H;)hNX32i'%9cTdϚ7{kY0ͦEj?kF(9PϦ}Y`@fgIwesƜ,rߛ6;L
#͞OY#?!r32
d*3@g!d1q:tY?!J~j&"ӡW
vq3rZQf.k@T{>:NS@O҄Ԧgf?93=UKsc;s\sgez2|%6-[h3Oq"3!҆q^8/mjiCϺ{s]C2纇2o!
BΘ}# ͞ǕNd܄F'$%h,ݟ9]K_+Gh>M!| Ot\,xp.Cqi#> ~1Y\9~} xǿ=<G|  C
p*\]f|=GeÇ3qdpx(O49< ?)eO7y9|yFpl?4ʟ_k
pu=Ij}<.\Og,1Eᨑ78Qe\띱uE:fsx~#
2.qP<j/#> t9< )DO78|
t
9 _k
p+9< _[
1}8zXcG
0N ~Hï'0F۽\oګjgp~Jjgb
p$K1U;n
puJ#j/ƾ(
\vkCyy0
<N更Kxg
|EkIxW
<E女k
\B
.k=5mZ
gz
Gj[55w4;4]xo
ܣiwj55]x5v]5
<F'%>x#4x>@E
\mP
|%
|>^[BOh)P
<]j5pYjڞz
|i[55w4Q.

ܣRߧ^?%
^h
_5[>?NkVa{-dB7d,JS"{=2ޣ
*C{ex7G-S
lûox6[*نw=mxO4ox/0g]x{bx?umxw
цw~C{ex7G-S:::::::::::::::ۉܑw.,5Bm$	\5܉HL"dom^۝llnC6A6=D{-:(BѷtEyl$R\K(wgrkET2gx, 
pE-y,VnIۂm-z|m#z
*+鿎F>;SIb@x~H^|xF`a"p!-J!=b\]xD7
t Ù,Zȶx 3Őg!/"sR>/R8Ij~] R<a''wwt7M/xj@^iÝg9"n##h|g9*Nr.}"s
>&BEȻy!"]w9
)A8 HIbtb\:	Et6|$PY%LVYhs-v^<rNӲĴMZӊiha1Gȣ0<1:!%?G9Gn0]ǽ7
&<na	a=-74Br&pCoCH|D>5||if|ds>4C

yY?ʣ7DLxpXy<~ݞwfеq~OȗDh`mGnJ-L2EG%%2~[[*=]>9`OEUXlcp	+O~#dX6%MxlWKb1XsvIAx?GGP@H,,l&c4 '
,4	$*0`A"H9 '$DröK6q
#wxd!2Ayus=l=JrAR'%>l~wHls^Ł2	8vG.3 ~ /׉V\P&:\94Anvxgnr]FuHo_|*Uȏֿhշ0"@Qy^}3O4<#o:g}yq}LXgr,Q#rJʳ|*gS`MfDđ02v^4O15	ke7L0NE0){͞-Ne'X_TO)B ĖUl{oc'챕n,Jl5ڣm6KjA}Ot' O /G'@G,/Wbˊ[hsOr^#H=BpD`8A5i`U_G72n{wII X&k y ;B˺$<_]*_w	R'l'(]n8QvlXR"oO-H4Ǆ+̣:}Ϧb3B	~'uy\Zi۰%Aq+}γh(F8M>@/2_:3P7c[B%.P֗S:3I3ԙ%`AVNڶD$9~(<ONHI\ǆu)ץ4c]9@hK>A^Ūm:&L6_9t*v3^k~t*렮dE9eYX~h3
IEBWrΫ|"/A&Li>Ig6taxXILFi=ۡE Zyޟ׼?d?:ZЯ	Xg#7"_s-vO7-?2BoK+?,7,Ovr
I?e6yc[g++Rk+N.4גTuԊϕъvp<ɻ7u'mmTϸu)nHW,\D]
c^]^/jg.v*fv"q6Tc\u..
hOojZ&^i_S^8hM5Toik&NĆ!>xd5~%k'߸j0Y9$i$aA0Y+KK/	^ۉrA=
 A`.5oրYe
M;<\*bd/=B@{}/(iҭdi>bLӘ򠦩T?}"<oXF
fSTahpGh=D\^ZY	q+'R:0\0O28xBh;π߳W=ߔ.mm?g
9B?BHS9tQC9?]"Y yE	PV&.XWI2S] whq!cOa	LVg&+W@>PVux~>d
~@f "w2Yiu@:|T(v)؜{(PD#o};XVg$UكqL	a;;~Xb[>Ftq9*9-vJ+Wʆ'"ZX.az
φ|W cQϴt<5\v<!ABվ˒.nnxeTD-
2A98ŞD$8 دLT_Tivd>9>6ڔ
.oFۧ{jNCYfeDe/3{w*4ѹ*Ղ**ÉceeMk(Ϫ^byaim\>.Ǽ}͇2DbrrM[_D|0	rP@t^Ql~q;䡀@?l"`w	0S3qd"O4׍X~7,V\?@?,N'ԓN}4Fy4(A[e!=m$Q+7}^|:Vs$]/怈mWԏm{0Ie1	;
MYbvk0	0AM<,$`sTg6S͟IxVb6X͟IX
 5&a	ϟIaֿd?y"|!_wWl+m*;ID]>oPzYXPRgJb7M Wo,o$o.VsȻ
q49~
M9m <dؙqA{B߼:Xg3%)x,Ijk^u~Ĳٯ˳\f5̟w<3ɳWoL({T&axXIʿ%!(|-v5=%w[AQނ__);~_EϷ|(`3Ѿ|u7MگVfcܽxyhuJqK_c[+A?|KWu|ЇJp9Bn+C%n+$\I4΁ҏj@^#fc8}VTǡ*E`JU'Xw8z@\ڮ/n[}_cT~Oxa\md
J7(U[	ʠ;GLpQz	Z_}JTz}!]՛z:ީM:_ߪ~˨|"oYnϭO ߄~B?>1;W
W}\Y̆:Cw+
ϯO/=yjfU2o=:ۂ:|rXx~冀l:ۢ:3RmqTZےZvvt6x66*6RIߍl}lSmFfFэ6OqӴHfp+T
MܳA)]Sda{wxbqsa!l;ם79LiEYRg~q:(|>Ɇ68voHdbBS%]<>
AVүbJ}Zi}⮆BdGIR%;\c3m@{)HU>|g*KG8Y6,RU4Ubtda!SE[ΆVOǳ]IYB(&qAxYc /iȯLZ.KU,;Y>S~$:;[+4,[D:eB-mEJ/IJhBb&lҟ&w&;(qR	s9AtO^2}cIQ<4`s5#ny;#
2MKxCۈTkyqL;,PDG"Fz#BPD?=۪C"n)[nة>@O&PbӇNDj4>dzz<ry
&:iC
UrMxxـgօ|!eUgccLhYh}i5Ъ'L&u
q_3țNf{/v_2aۡ挽P?,(R'ӱ~dzQ%]
W./Tڒͤ|N}/E[zXgZŐ"?S*Gۏ?z2tN06'`ھi?~TV>/9ϒHmaWkI<dX+4b4)kxB=aʡN
n`΁~NW`TZIVAEyr_~AHs%,&*~O&Pw׬VI&r[Kܖ$:V:>Vqtua2N\cG|:df9ӵ?ڵ6Z+sx~v[uDTؒj֞q} [ӽh;x͗{j½uNx6q۴kpNe@e_,ه}=h-]ݝL>*eŭNU7:WCmhPTjԏ˟Z?o%?<n}vmfrA&//Q==W6 ^:uDd[ZЛ	i=mM܏I_a.a&('!(ʦ-p7<'n*6,c[UAvC&#qCm
x\&x.`+0+ <EWdWxGx&xрÀg1 ފ;-_U]>!@5/~yYF~!ڧHҬ
?i]Ԯ@3,u)%DJCO>'@?F\#B"C7ÍuĐF>%8HælPd+
&tq7Ѝ7}S!0\nPnt$/]a(/>G^!͝-wzQJf*y
x32RhoM[/BJma	&^bc%瘓ve'VPP[Yg)}42/17l
Ne
PV@|Jm6]C9ZH8͞OB'}s.NofNdw͓I]yz["ׄb?t<-|.G^Gcз6Юgzk9q58`{q0.Νc޵kAW=#]5RH\')(65/qtǶnx&mP1	PހqNM"ʺg[qGj_Hb9;XJI'V&QG6k
83̌p'!OlΔ?;IIvrЕA>Vs}47kbe|
ncyZ
84E3iyTYXQ/'4eq,:C7EugY_χRls[?VOuD$	x]%Tt'ۆmo2e5yʎcnjޗy7K-,.x:SJqͦtڲ
.AF\6/x$vK讞t]YчX\0].+8(҉t,HG^XP#v+]+/Eqއ._4IծGźP
5n5N/Wv1N 8?ds>M1w\8֣ZToMs;@zkǁk!/uZc-Xy\!=lK*П?s~qXhhG+EgEޥMʾ7
7zEXDz9YOHݤ׃c[Dw2ຩ&Mt[fuz^p©{D|D 5,&wb3e!;!qxX| U_WU$n
4IŒ'|xx\]*u)e(T>{iIKz)|/ƐD{DY{Į:u,
FaI:{(DR
tlA{ٜ*!')[6:'5$hlSXcPV:>e|S~!鍈:.ݕ>`rA WsUG7=dU>]9qżhO X
:(Wԡ-pw (
pqi R,woBJ^ל$L
&K^Du~+!-{
DnrG:go`cz?:d>bǰJ0x><e25
?ļV,w^Vq{Ȓ}S/F.{(ӖXtU}'$Ā<*j#iS
P_*xx5mHۦ2'WKuxgt5tMN
]	]JrʗC%L<u쟈e4 ۀhIg$.vIt/fOr"Cu򤺫-
Yy*4jCr76!9:pv4OEyN&tmBwK;4t]&tk'SG|tO}Ov{72 X߶c7	}?`'C\Df
vdqq 6kuxn$}bvhWfT 6
YD<{=Wc]`g.
am܎ONfnG;Bi0Z+3n8Wf@iO(*2g>Z-ZkՂUV-ZkՊ;;;;VG.,uاo$mHϸa"!q3炽"`8Q_"O+<0ʻ8Q޺F{<
qL~&4;v'۷#ط5ArTʀyW>fRx%|"[V`epd
w>m<ܗ~;X:կ
Y7z&dQ%~xvc|l~LE!
z<(|z\;ǥ_5,ZF!*<X[FÖa&aϪU附%
X_v.f pgpeGP^Ծldq51?7̬e4\2Dl54x|ڷ*<AʒCQi1޽	zʥu9q9\PmppK܉Y)_sõ9'9'ɡs}qAKs7yas\hqUf#Os /;ر=۷T|>7ΌےHf`^l/de<l70]WNlNށSyقr]YD{[_P)O#G>ʩS`gW}G	6H׎s
{6[cfA#mEJfgiҬ<{4D×yg0u=:V5-`WAS gGd{ץV{T6]j^ǈ ׀l f=dJ4uc_F6ˇGi ݇NWǴyRwٸg?S/bEү*E#Gr	x.;Yr/ifcdԉmAq{
a$*$Htc7^q`:&PS\vPk+A]}%ke\LPvRz]qmbŮ@_EUGm8ף;w'M{7g~L݇DT|cIbʥKˎ/K1<Ot?W/St'ݩ~B#yQz|Ze:2_{[m.-_Ӷi{koi9rP.rrW/K4rJ/}PԱ)mhŶb/([lqlabhE}q
-"~/o?qi9ww9iJWj}~岿}с||~II@;/|.;mX`;=ouxyʹr~dgs.loj[Ώ]9R+r7ɭr-[ƶOn].N}r/Mz5|նN6V/vʭ[_--|r{)>_n_yme|哛V~cBQq޻a*A~M_%QL+PnT7BX56ĭJ&{߼`ٳܕ \\uHyTP~zbwSu~/߄/q_}غ|}铯KGktr}Y}BewlۺYw'5>NFrvr^gږ/|rNi܆lo۴zlh[n6N]}}rK8/!grSN-
>]j?q)=mܺ4iַ-><Sn+>՝۞Sz9ٶܞ?ےS<xR'7eʩ!v$|7d5bV,ORoϝ7<w'I+52\\U}8ܮJab2k[f㶘l6eIVtG'NlI&d>Af򟘼p~Y+&fk>Y=אesY;PVTNm if{:OWpB<9wGZwG\~}+AVWeȃ_'㝛2Z){+:y)'LNj_foJ>s"0| U+oN>'q|^m;br6^VuL?ǎlX2o[fOf/޼ܟOeM, e;'Q|2򗙡oOK_9;bPJE<#C=Gkr>~
ʍ-#ǎOOm2D9Bf*g~L<Uϭ0l74W_[?B=B'OraihG[<ru7WZ{Cy~ls%.ou:Cly>K.Sr{M_.wxeO>|dQ*>vqD͋M5_7SaVO.J#D˥W'QurP՚r's?I.`ieH.{\ \>˥[^.'ۖC>Tirg\\r2YyrӍ21T9%OMrO#3#?lY>\6Y\mX\ٶ\ުeC\˚?O.ǫ岷J/um*GU`|,[WJSVU5`rWlE^v>}g1tڟFc?HDˠ=vwx,,<"d뇗Ma}OXep%%c[ O֗}):
eh3>_9HaT
=0lǻ7
*I={0k9wҜ9!/́2³C\k돳5w33:tʀ^m!)G)GlxJmKmʥRJmJmKJ2:{SN@:&=J~FJdtPτϼ}tshLs.˟p*m*MuOo,͡,A|oBKGV98=GN˭
8{.
x5^hiJ7ps }~)B\Ч_gx3m$`yKxyLaM
yeuY(Ͽc
ao4<AFzqU,ȷ2I <;M 3дsה[M.
\Oy{/'7L6Ba?MB<T>nX&kǵ`q

65TES.P~2`}Y-.'y SuT#s}6 nT9^
]kz&
reWôqiW
ӹꥮ~Z~ z2w<liy%M m4i4p:&iaYX^WhP.e$AXk:dSË|Ƞ,&@>n..wkt𰏷6c?~USΟr(ZGN>nx7KO;-q#YȀhPV,#TS%y
8,l+(o{t ?@c
ШC@hTkhy)G	ݟ

iq帇,E܃:vKO9y-Kmqʍ?ڰo035J2#৔R~J~~~~~~?Èx;2}\tW`te?Iz6Vy}2\
|Y@>K
8</>GsW~F4	=}FPFg2?K
]YN33*(uz~ÿ&(sJ3#ѿAIǣg?s)=?-oFWgZ}X\g+*AqRu2DM될ĨqJ{0<eV`G
[!,H)~\l[(E\ŶgHmq}YO""H&V.[+?a%gHe7M;A7{AV9C)ObIVy"Il5M~Te]"5.ич_!x`2Q}clN~],}C}@"C9 d D2A"@tzwyo1}ci~FNu+S,웬N)7l7lo
xCxi	d<Б7Sm QܣB\>|8ӷҔ0VI9w7l[+BG"!_cr	to?rjmxۆqJe<une0∜r1v]:P6t/gUv#ob>ߝ)?r܁:AeW~˘l#OS's^
_81o=ANQPgӆ e2<׉q塚|/uR~g|q̆2W=cVԟU~7tuyP^\ɣg!
-fxǇ*w3yGs$%:B-&8{u#
9nZEq^q>='@}r7DΉQφ}xφ9+ΆE~/>0ֿjV?]kݢ7x
&o~kQW
>>7$.5qeCB4aM\!nŝc&+''iyfǕxgCܘ"^F]B/n!n{$.j
<&&i&Y&q!LKBwI\4qSqcx7LVlˍ4lp,hZqKruAmyM^Cusýk|S;؄.=5<
y.&<wy*t7Ѕ09xjqL6p Ǆ.A
z6v6ѫ<O	K&t!L~F
<yTnv醛Ѕ0N3T3ڡON&<Dc
<nISz;x&t!LI2	3ѧ
>< .Qf<eS}tLBm{qP:0U;Pao|(/Y>c4x^x
|xHEpJ oskxGt5I<7UpTRx9k_r<o)D(?#)7VTC\}P.i^W%8P^kU\<Kϊ>Ԥ7#x4)ׄf Oh15 ry*9f,4pj6gM)YjƦZq<2B9I><UHoy/ԹZZ
s9؋4GG
>iʭXWV><SZnqr4HV!><SZ%ǽ4{Li K'GK2r^ϔV8Z)Z%lj 
^sH\"L-ԌTA^47^kx^	
zmހ xR=lEB8^z?yE% `kx
x}s:B2ݏWsD#yD'%I)E;;18_x֛х$Q]}h"EC1":'?)G%qzA9sbW>8?WT*8]*w1Ns)A>p\*[\6
8j\<RǍ:1*gE4~E[>+(q]9Z}Fe9)(;ո陼A7>Ke:'Y=/Vq n
gJ璠8U<\Ź,(TṷJkAjܯ2Aex>ɟ=\\z&:~/N=i%9*)Q~Y^9A
G2Hܥ>|?%4gva>)ͦct2[#(*-ٞl%U~U|hxmOdGuؖqj&M?}ڋ|i]{uG|)cJ2-k;LZUT[kjm*A"NY 7%Ahlk܆{Flv=`__HyV؞~FkPF8F}~)Qv*/Q׼Gx%["Ov'/D
ga{NH*{OȓEz8/3S'fǙEw1N)lL2IrBFXp1VO{V)	8~F&bXWIZvox*j*?ׁ5Lc2zFQ,B5rnM] w9#x|(0[F(:(Z(:P&PfPfP렼jjjmKZn#xnoq&$} ,c+JB>7[?yƉy6|ƉK<R8qϔ&Τ3*6zó{ozw,&z>RZC8#yt@H(&d%6eP39JGnN֝CX
E6AFG9Hl.d*";oqܥB
/+9s5ٚ{s׀xFxܥ
oyHfV"HtE7kȸ kb
4?
?W[&[pv
73İm "g -<aqGl{Ǩ_p=b){#ۃjbb@
^ih߃gy\(܋ѓ(Խ	fuFHϟ[	;#~Ts1I1#YQ<d!
zBϕV@?@(Et)]Zlj-Z˵Pk.׊PE/z	ibøW/WWuy>>68Bct'@Y*p\aG۬_ow]Bv>ǻ 2ٓ<!,lg(7˦\!GNsoElr+Le $ƨt6܃tX-1x9EՋuѦ /ȓֶ(%ʌ	x>2V_3xܖLs
/x
a]ZLks~{5Uת
ʗԞQ{oYߙ$}ʱkɶO 3\F|>é]n2DV\vPKExX_usΖIЧv5>a:	AjYHN:3ld"EM|L8e.ot~zloSk{"g-ެxa4ESwܙDZzAߡ]3$c޴5@ftn=X<B4q&$uiևKyq7Ӟe~]ߏvth>6ˉ(g=37g簙
LęZ`P_o%]gqclq,:L'l
:nhˣ.бs)>\:ְ|
yt襳@';AJOgtw~g,;S=qe4;.NLfa~=cY]W
fu>uUeS:/ב^i-C!_x>UWuS ^{@}nYˏ	踧t )E;E3E?/Zd{t_KvbazfS+/DwX|kAG,bòcsaP+kID<G}@e̷\l#'@&bpO6#qcGǅŔHYϸNo_=MVx5DTSf`b䕦2mχ̱  =!JrS~'HW٤E 9~A/****vHً {q	E[Wx]}[b	_ݤrJg)ckLg-z~4p<n|,V$|j*OKzUx<ynvwIl8>$zĻ!h}%qms.`
hˋG&~}ÏN5J
ޓݒ0u $?Cz#omKR}*ẍ́q=yN룴4D;&PO=倃gp_t(nx)%/v=̴jrub<bD9TS*Ҩ>q^>|۫jŦY \Bflmo[WO=k^HjI.xi\&eF89Ék-!2n8qJf*|];-A8z	=`q-7xX<ԳnP״hS}q߰~uxT*];C&x>4׮Q/c/8u.	?Ǐn/8N gݥuu>F382WNcwWvy]4x?>s"?x]zt|Jr$5Vpؚv]}ơ,/
UZuQ*	&xY𱏁L=}ڵח>Kʚ5,IUӥˢ``$
\]viKä//
|!^Ǉk-
\]@_j%*/v+Is%۹g$ە훿JG]dT,.lMSl~y~#H")\GsRlm)䯿o9P
]c\I>`=߰Nm;\a$'QVsg߅~[k Au(
g|֎_koc+IlWIVNͳ[dgY&-@;BX'pEY
l.mfxzESUB0iwL#6&RQqmlƥB~%Y`pvokԽhc]࣪='NDD:@(֨X2HAR'M$!ɟ: nǭX_bk+mA&	*-A3wϼ2s5:ksIwy.M7UF{WL?+ɺ`fƴ	76;Ohq'q[*O7-)hZ=_hv%G.
}YQs0}._ܗ%e|e<!>2c~|ڋ4"}.ô׍'5x<)b{/KeSG}{*r^͓_S\6\'bI%Z|+O+rcϠF!
w=ȽJC)]{z[O{}0&JԷW3}百l~뙾L߀wv;ю:wvim{=Yu|s\=*'#)׺_v$evԱ)!1b}I1Άi^<`wBcƇʣeXqtza.۾N
XxA;lqvd8:
g/6;3;[8#FqTTg`j72w~jk՜m3JO<Xsk&S`Vȭ	%F	u<R6SfȺQ޴Xsw@'E#3=t;(=ڄ?hL?^wL}%[;K
ԚM[4Wtgau%Im	o}KlKסY3SƹƵͰxޡVW	%{ֱʠ׾eGKl"7*ήvS]]=	.Z'u^[L?km»iBmVSQdKYB˴o^\X*Uq!ncMQ%w^w7dJuGIƐaH9/~MrMGHRv- vQȃdO2ogøCٽ$=Shwo~ϳq:5GV7g6ߛE<ϘGðkYS(o1#
}6قou/^*}+7}7f*ݴ"	:p~g^1ʝ'˥w7i++,C
qz1v#;/>J#
6]ۻC;:RO$&)eZ	[cd(=X{

f)s?SgԎAE,i:,)=ܱXyp}jΧO=#T)>hN1ßqŘā续1֚	͚ȌPI~ACW]M\D\{KFe9jw&_hև¼}Oɳ;)27vߩ?Tz'^2FjioS|\OLB1?'w}
g
sŋ(	@D4#7D_
wF;Gssn!1C8@xUwPY/W{ܠǚ!"wP<Zo]^dYT'/OsX9iދ|r}x5΃~x\J^@YzsZw3"%
C95Fu#N)CGQޡVF)N\G:xQ_dk[rѺk^]w~t@2it7Zxc
*|ݣ6Q4_B,=Oo4|mk \}˽Bj7%c{6V\?R&4Y'c])飊
Qd;'wk5:ݯ5
xfOO8!~;[U\鰉!]:kc[gw#9׿&6<"UЦ^5\LlEo02B ,X:NxV$_)9Rth<{|n
ͱFS{ue\JAswt
 ġR$C~fN᡼\Ǯ
E .GIqԏQs?W+8:?(%\zʏឡzcхlb.t||f8vp#S'"稀ۄ4>3NQ6頾˾9Px5y7fEszoN=IMJwS|WYڃ]c~oRL;smY}BF22ONhяՆyl_f&gQk8x0~w)}~xuG3[uEyElcol
QV7#h>5ExMH-ڕt]ÞhjJ#Ɏ]3w;O[DZriVs/R߰q_~ŕoWEn!''ew[*MlLP	3Ǝ3M[=@PK2'섌#GΊ|ɽ$AO~GV'ȵ˷*߶.ދqCs>_*|+WiNm)WJ\xo]wEǭPZ~]C[R&-y;ㄓƘA6&㏏ZC>;uo>R]"ͨ{3ތz7;8Wzguhvai]=6
c
8pGB	_
m}	6FHl_\9zYE4g?
/A1("aA}T:OePY7C͐u3Oqu@s\[@zMlv=C3іrj8ŵ$?<tL'cָ0Dc	wzBUv͟-Umi#ٞC=h[{S뮄!K&ǳ]1N_zu6wg:fY;Tq}h]֕~mX1K(b>ny5NkZݖkeήgχ`֡熺A>p}<{.;mqjH]I@AsS~9탽NQG4ȟ@V׎̔gtzi#o	ecCyqdF5k!zKPVLke(ߔ3tt7΢h3AvyM^v{}Y_@lG,GQ&~[k٦u4E(WBu#q3о-na flݍ/q1\tYv.U>/.u1-aB{u6k6v^i

^8'	`yrskq
;H?3[7hvȯ*^ݞ.R"Cv=E~{Z3
!PŕBH_n;E>kDkIw;Qae]	]@BlЕW#u͆}zKJ6{.SHٴJ\5
SGKoVA
աQ^ʿX/zEڇ^ S{?W|V~U:z<|ެ+y㙮=^z;e?po0UvQ!ˮ^0<[Ee
fW|<Se^n3/\AO}ٔ޵WV;rO31=>oUlLS"v=V~͖4is~*Azɂ]uSS_0O9
~NPEm*衺?=kgU=wUz<t#?ʫ{.Ax:
u 9)[
_m+lt[ w+lcPv&vC::zb\=Чwq|#.mq:EBp#te$oU:|]	:m},o8&u}:[;L&~l{+/MЗ/x{
}^7^#\|e=h+}yY\WdqS^whBgC&gM/-}ӏ~Ol"^W}l	}6G8U(h'6/k70ɥn{miYh<.s%tWg4:hݖ*UAk6zBBtsjQn7[?u-KJsћz<G1Ƚ=GtaמZ*:_i_S}68AaOsTkRGC_$QOHY_gqЮRy>*T(x:юtF޷=U	iOטYFhϻ~xfO!>AsOx2kXgk	91ƝͳשTQƓkdOxB2%461n'SW3̗im;\<;
;tAbGC~@ i-/,^p1-űJޣHrNsit3I&oڃ'a)F^Ht7TГ2߳ybmD{9^Ё=cYqГk,zVgͦqs/jܴM&&lDLE3M)l@=a1ϳr!o\|Fa7rfᦓ;!e޵L]`!옙L	1ƙ;OgdNmDmb7w'.IWwG6|cuŅ~&×_&u5<.եTt3_<_x}}
 z=,L+y	j[=Ε|:ilE=Z{+xoua@cߩݗK]',^/W8.E裳^c5꾰xc:guFtN60j6c
y6hAݻ#mPZ)J(?qhv8mc<˜w"RGݕߪ5ݘZ!Vȵrm\[q@Y@;:ht5{>oz_.E=v2ֈ?׻4)6q;oΑcʽSOgv:W)>ty~I\}}k)l7{%##x2C}kCkuv<? X75.:	y?keеu]$#וNwJ,zhfSq^:/?Ylo/\ڟWːu/^8vWkOJ sK},lK;_+_(/\`ս-& ^O3
fBSFNw^x<YԮjt+y}.~ŉhd'^x|pRup.ΧZy6eϖz,poA$k)g{=QmDzO]ed;}Aڠi4)?Sw. VOwe~Wǋozv>Cf[|qɯ~lq>75ߥ!;3/k.ß^eg~lZx=Ys[j.8ߡ _q8nQ&1Z،}
|W%xay?dB2%|)> }!^#C#k\|J0r?ѫ0W@>$v^iqQ;KY8,7K:whTK>IN ,g>To\mo~TTᛵ&*MLdZ{CcS/r!pý>QhvtX5{
et$Û!W*hvso0ͱ6sȉkqp}zlN% x^z(7Zڌ5)K]x~|r0wB6Ww˒'qkpF23#[3zh'AR1^ۑsG+wi	%)rjl-tRK?bё̜^
{>/ϘmMۯ>ӫhRc
d{TE7Ql%<^JkZ4k_6ķCf4?u݈K0ʐ#͏͵/ۯ$׳П&
}k0>B!-VWi-emN6T?^s5Ϲ}Y,|q~@`A#HnROeͣ3)c=Qby^ |!Tu9\7*(6PhKeEkH?ɶ0ړ_ɝ9\H'd)anשWl]Qގv;//+2Nz}ᏒR?|89Tß\Tz_銙
P/soN*
ފ
`>5콈9x2qk#x[n>\Bvn?ahZiM%K*FjЍWcS뢝
uo..
[|
OMX(mMw	h}ԋ*y>'

LCKR:a0jտKdOVڧ^Q
[2^M46NA\s=?;lUvX̳zje@.>k4mCS\fP{D9*8׃e{\&~~e暈ӳLj}}'_=|hj|g6uF6z[Fڍ>OHrڅv-m>9xVP[\4ѼyhcNɳ}zYlG>7p><{\W}䚊lvq.4Ecυqź=Wovu!jyjZS1C_]e17r}j'#ҫ:M75˺XYV
٬hm֌u1iB~^K/gi0ƺm}ڨɯ
jp|V 뽐U=;v80>ksKV$Ff~B9
N{Cg=KlPfc2'@?i/N@ܴ];^%1j/c=B{h{BY_GΓg*xE- ]wBn=6,'"r{}%9@.S#6	l$/_KI-(:T_a)~1!e'܊>Gv!&l 6ZϷO8֜F4;
S*:Oڸa0Bln˶ڐx/ɽư"W v6`Yj ݻ ފIUKސ\s~9k[
~i~zGn75}yX9"Kcؼ^!5ҹ%oӬk_7v6(O]4=]8j-a^G+lQ9OvcIdN-d[=0[-ܗJ5bbŉX;NKxc&Hf3l}`pj9(olNN37şǇ:˳	<ߤ.TCuyHe.T]	/|9	.G6%xivc>w25$X|7vXo)hO~..Pom눯B:;:hnȧ&Y_@y;^y	yb}q/I7x.bj0
1w"M?KIO
͓'=VS/_s:n^L^ءC/h%pgqdxqS߲DpU6	 N-ʷzSOܹ{Y\5ړ >bvywoE'w>rEV5h;hoFDqc,S~.fU'zI>wB'][&G{x֩7+'IQ{RoGˮ:Q\~VՁ|1[qCk^j	i$uF?>><MOSg*w3֚G;i`blyRzIBi>p>B<cagYɹs9Zi9G{wFEgE_uuu9ޛ8g]'z~wG^}c|n.EKglW?plj3ocנj1tao?|*%MT:6	c1A}:0g]5_xT7\:4K}	XC[ơ9y//ww{ ;e{||TFCqwC+YvRgj}{يg+hxt1Ue_uOox?n	@?zsTtv'=a>3Ag"o:oɬW cgkX/zLd;rk(?ExL	vA~g+TCt3
}3j^LWm{>O٣rl}<$+@aP	Igd=hC}ٯopCgzZ}Dk}ͳiDi¼[/eC[ǋS5J$y~.3]Fbϴx4ȳ#H{S~!-v&ſfoϷ֧ϷzNsb㠼9o')~W,b.Ww[ϡ*zLsg_>{.z1j:/֏Nj;hn!z u

bȇ|?L$7C{cyןm+<Ӕ7jԇxFi㞭;O>TS^T+ჷ3,]!k_[2jmp\f/%P_#m;gL 2(yտ$+  a9(gĊ″E@y'Αg"JH>d[Ϡyox_K?eN ^LcGc'5#hςVnaSO/KcԑCъ
wB~;JVNV罁V}Z[rqv;d-+x䷭N-|3>LB0%K@	-~3'~z&n@
6qƝ{*OJw	^<7yPi_L|=﫷'm?A3K66Ŀ?c2R~:}Aٿ^Q^Ѯ}yŴyrMcHo:M	b3#WE;l"׸p|yn&w'N6p
hƁp-ǌ_`u&}&cnohƝwdgDvLsxa@C?:1w~wyd]3Fоg]/`8g(;_'w'͓(Icsu=3AјzW_
<"'?N.tރ	֬E!/}G9^z{hKǼNe[B|Ļڞ_>ݺGwt7ysg'] ~H;0ooE6+;#gIְ6"ߪo;2gH{8)t 59'\x)McpI0'?];d;tN-8GU|Y
?u+/{/%m1e::B
C_^{\[O_TI[a|T|K>ͅOFXd_z3$ٷͲϑ;\?WZ18U0Ͼ-} k_{1;}Kt]PNd c:Yw
xfg;RzZG!
!\>0h
z'C?Z렜3 xk4ŇW3[ws'?M47T:ɼT-W}bQHwɬ鸾
BuW|s7)!^`|<YR?{ݴ?yEvwŹY⼧Ź\)Zw}BFU[oq%{@#ˁ<Á<ǁ|ǁ|ǁ|=:E/oׂV=Cy#×ox׸
[|N@*7Z3>>g)H,xz[t[gC묙H Q^/؆ېc#mېvJm5ӆ94̦HS9ݡnVn'\}n5s*"%*fvJۥ݁Us.)̮Si_h73m8h &=Aj*Ø!-*&ݐޑ)m{5)i?CyH|@sMJˬFٔ;wSϢnF:ߙ|a{QCsls㺧 ogwvk&}xw ǁׁIhl%ۤbMJoS\/k⣹6zxڏ?dY,֌;g#6=`"5̥3>M.%)[ֵ!yj]0f5<~3Ud#^ݿxqa×yF#?%i9Zw?Sw{\@	muTuiL&&v*;-?cKvi3lcMuO\r(<LwT1"H^~6D>1Ѯquw
сt~mg 3{vTiBMYtVOwPAlW/i|woh'ݠ[RGb?㳠rL(i| v1R6)myxeͧJ-޹c@ww:u7ҳIМީA^td5ݱv{T3X#NGiQȬq-26w >#SSK=|7G}3grPO'zuJT4Aۛo|XM;>f>ZT⽳tgOA|![Os侬B0CLhlOJ8Up_&}-(*'r]F#Z39?k:DǦ;|fk?=kog^>wv?.Xw퇝tvZ#t[\*\9GvHr^#o	_uC7WQ6MwRw
ůuu[E|ӶDImcL!ʛ[ߪm(>|5÷tk|HF&OO[7ΐ_<QU=g~#ǟ!l\D1ƶ٘(3$oҫw}Q
Gơ^zG߳G~ox|
w#{%o\ovOwQȮhtgZ]FԍHUzHV8,[/GcO㿼>ko+
Q׶Z?@zN^DѮ|vΚ.cGZ#2~5vb m^g
(_?o>{˄?^,h]݋eǐ!WC9 ;dx@~ϸSr-IϾ-ZO;d@\ޗAHfɋ~`
t!ЗE?F}"3Whawlaߠߑh(`нw70j˄*M'4MMnЄd!ټ&.ټW$}ڬuzљ:JA#q Mkvv
Ǽ{%Qr2'˻+|qFbN r{ѷ__}݉G{M_Бҕ]S7ԯ~ zߥm'P?emv	w
pњ~3ZjC?{te̿$ϵg
ڐo=#3.kz|bj
vF'#98 #dလ2q@& .?Ddkz;($?}7賺|˻q^r5x{$lNp}v<^iߍ}ύԗEfZg04׭9kBEy{׮A1\-7}|o9o-|s۫[o}x[fwZwEZzG/u"WkHwEw؅)jw"7/E`|ic`@`NТYjov.r5;6;f]fgEgsMQЪȯ?P;ށ(Q8t000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000?51plp4ZDL34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34L34ݢYdoqj
E`|=0~+000_(hvڛ\Ņ2yWY܉|ߚpm.#21\P;ށ(Q8v!r*/-UT-[+WU~+k3k&z
0W_eЄ4&\]J[nq=Z{QmmQqR{mҢ{m=}QR{fR{YQetP~޲Z{"%UKWjK|EK}+U*-E5EK-.W|(-Q骖JURɫbhUrX^e] qWE}E'yJg-]Z(oNEU'{QqqiM
c򿧼$_jqe%[̳/\h]Q-[rlv, wV֖WU7<g3fq@D|3.^g-/.4eŵv%+ˍv#xl/L w{NS"eoM*}QQv-qkRCKk%-vQft=+jjK|9r"Bd	6wiUua}RbeJ*ZZ0OHAC^Fr0UUٗU	XR>W߯YV]]g+K+'+UIFBBE&[bO<X8ߙZ[^R8TV٫/)"J-]ZB3+$Ef$	G_;fn5ZbkJkU[r}l(Z2fY*&ѧnTZÄ7TE\CW&:S.`k.@ZVz=!noK+#.hwR$Bٲ~pD;d#%L,)\5VڦWTSJ/uR(g>şN'6]UQA41-R|qYN?}U14--2V_({cTKTWՔFW>Q^-*(|Iv,`&a"[H?ADxQ	v#W4OȍFse_x1 F	_t{B񌞙Fsʏz^e؇ҥq򩭊֓sgFJ
!QÁ>>_}o6QWhnEFU<'	Ҁ90qI80Tɸ%\\=%PTĆ,Pq*hYmmAtNjNƏ+XZ^[/{(e50܃M#CT˯5rۄ3WP5qR8I?Rb?~/m1CS_bRL,2ݙd?߹TDԁlP6˽} Bܼ屜$_()= oCaUsk0o\
-6j4ʓ3KU˚h#+IV".~އ@{1"c:ޙ9MtTޑ|΁,.]*//2jyї,hW#2j?b+c-ΙUyWjPzhQsAt"gjwWUc<׾r_]~߰;s΀4~|ٗԄ܇c^XUU;Wpijz*vRDL)oQ`vi-|.v_U\AYVmfinl٢,-,[8ON˸
/S8܍zuwT{MD%֪ʉjH-%bϵL
E˼WOdZ5\=x5W\wUEf;L"ed;ʹ>k'*VSI4yey$ҙe󬲢{Pp@9]DG/w̪*_iQel=r!AxQqmdy<|W$ Ld0V\aH}-252m06F.kG-7szN*ԣBcWcg
7䬢ޯ\U,#^*m ĔURDKy742 CܠMj2V2M.T>UT i$1+v=jУj	JGj=I.[4d#ST~#fTsab{
c|Ut
KTUʡih:v#%ɰg#Ay,Ǳy,Ǳy,ǱF}{vޢߞ!{gǕBv\D=7=7h;l\Ӵ*&L[iD4.ֲGp1S#
Yy?b"~O`;C@Mo SGJ<4bM(<G[Ya7U>3(oVحrjLfJa~
MFv^fqKs9*Iʷjii8O!]YVifNw~؋;}%r~aA
t(?R?T/-^P\HWȏ[sUu*m1oÿ.
t{.Tw*lM3֨O*62i*|UKT
OQnT8[N_j2m
W.-=^3 ~_ߡc34Ϧ]Sx,KӗV|ѸKplyj]]+lU.67
uotq7+gG(jznKIR`2_Y\lqY^qR[51`F7S/cR%ؒOEb^B[)h?!Ry0qhy>J.r9^fJ\[^LTr+J}+m`̂*eơ,Fp},Y=epƾ~)V-gě2蝊Rw"	tB~Jxy9iL-*_O$]s$UA
y-2F3OyN4WP-8TW1o4i!~*(o;=eƹQҊBЩ":WR<t2*~ZwEWShJ-AƑ{;E[Pڨ}Ѷ8~TNᶕR&r3]ʙph
{v(\{?w[^W8M!>ާpڏlStRm5~m<|IMZM_R'D=Oam)<:!QϵNyQ-!<xx[+J1ziURߢtaޔ[[kވjYe؍p_E̙I܆?kw-5tIݓkB͕딓KkQ\mB3r_$?cK&/)&O^WcsSv*Q8]̘^I
nU of>&m4mh_]ǁ Ohуˁhޕ=Jz N`=z7o#޴P?m 臀7PG}>ܣv۠ƍC=x'X֣;|>3Ѝw~.F`}.dѱ}p#px	8G?
C]w=\KPu0!6$
꧁z67;0X

88
q5O
,.@{ g ov.yIP	s	?=}˂z0UۀWbnkMC`.܅9Fp?X;Mr.b8'M@87:)(X\r҅v5.p xppA}/3?z]P~	p#7"X܄ptK
yAQ/o=lr'^3>::ׁ?nn,	B-
ˁ' pݒn ϯ _꠾e`+.)KQpb
779
w(= 9 g	ꙣ!GQ};ݏ_ OǘW\yκ~8-v>{Zx>ǁ;렯c?׮<}? =xG^O!ۯ"m87pp-~wA}m/moBN';wԃf8,7Ҥ6s=m`KOށ.kMt =X
ہ 6 O9W7羏x.S&AmwѺr7ۄerir| ނxĂxG8,SlsVif@7L"NGCV6#피'>=xC3CWinEBcv{_~d>>~* ua$-1ٔUsȼNgyD8߫zr~hp@F-B.ViOe(c
!mƽUW8tٔH?{_nf
l@>yCnvݧ㎑4@'8<ާx<ViĿec?gP[at fXriք܈2S|my32|oǳ)Qm$'>nBƽ=$Pڒ8iii?FOS-\!:D>tF[4&
Iܐ`mCPßPD=S2;F{RH7OՑZnQ=J.rHߔIFmH~&'4Oٝ|JB_#;ç3%;?$'SBi1DEq^Y;Wx21$xI
s~KD>Ov4?CI/SlS)e%hv_Z5֬|>OrAmGѩE?D	qsB640-;fMv|}ZE}Ml1$tM%gsC2x./sx(R{
<7O-ϛ_~ZLԼ*M,>xV1UŚs+u0i`ϧRrFo}2j,B&tͧ6|ɟh9l4s]pQBZxWi$؍9W:/')fQ
&;jr_r>T.n#HmL]?NbF6T?v>E?T&ZNTO¼2.6#/m~L+g|lن
.TاllHZJV8@eMdhNE޺Gv5>݇>a(+/?ɏt%D{CB,VAGmC!Q34Ǽ|<YmvLks*7nDdc'b-Ԉ~x\)1FS8ʫC&	ʎ
cQu%C/CkIǎA?K⸭4MSh!]f5+b	2(«>2:\felAh؂n2d(!_koׯk.6!rcJ2d|m1b2.2}5W'
,Ư?=H)ڂeC0|CN{|7˟~)<z3\4&7?4)a2E{=:/2Qw=l}'Ry)6w7O_%~[~~H7<O?
GSNz7OOGu H/?gR>;K ~<}.w];/ =5&I1;qd
J[ѶN|}k`9ol~?;@Y%4ҷ]ga^f#Q<Vߨ?Oғd"1cmC/0}䟫#bO=SCC3K viԗҘq7I鈟}|2N0grqc~RI yZ1!1*GsQS|cL+0mҜ=@綫:U̜}9@\cd{u|@*<CgvYɾ_\__(ͣ:CGdEϚ?
߃W4*}pېqw^`طuJSʲAtIi}`>:>![Ӄl4]%D?m?1;HW	$.̠XZ$VI@==44eK^U;כ5+yȯ2ŕ72=c50ړ<+V`MtUX
!ls*3=*d4[1ᒓl#l\}*7~?G?흮Gz~XdM.hi bQQ&
Bڼ dZȡW91ොcyARئ	#|Qט5=*JƧ(&xGP?)>3Tu
qsB[#HHj/kzGd*C~r}F!RJb`E8,VLP~+_YiP<DM1[y޶!}ȯZđu;&]oQP
0fb*o:Ҹ.ʻUAG!i.
#BZ2SXw"f+9E4ŬϏSN|-VE.U`}?fECrj#Od]G9OԿO:TF:P>
~Ϗ/1̥POv82ײeΟB^ЏAFx]^flVجt}9x3j+TxsI25%jJ#Q;ntXCۧro	l]as3`>r#ca02GOmH,D}!&k$k=w"_.ݼ:K|7
>_rF}'l9
RiНY\DN	һDnkgSP)2#|}4h]ynXԏpnjb'Fnc4y<Ĵ$4w
a̍_
#.3Mm^d7|7"Nq&N1krU5K<J%2V9}8}S!QpJ(379yih<WkS,aoF5<q+8ڦmH
Q0/fHin}ޯІ:NeAV)4=UwsZ!/H
~*&woFxyƞ_G5BTXEE~&׭}fb}:nCD9Pȟޠw;ZGn.4i)hG
٫ް1vo?
{P?Ȍ!y!ghh_D3:/+n/f7GIH;bT+M૪>hgS."DLKm~~yogΣӯ^l7	3U@k-^7şmZt˽xs(1|2SKhL"y4"2B{Ƅ(BN57="}5Ͳ.o9'y\޿ۧ!ѰDsA-o\RwJ˦͒QFq<a2VM̥q~N0???mQ7U(h5{xi5{ȿ,yj\<71D?sm{F
{\hְK.T#cO/XeмMǼNcryɼZelgP13I|3yKY^nOm^Qt?{TIpnTx[(K=
SS#
WT>SU
?z\BpB#*
g*mw)~v
w*|Za[*?]
Qp.Uثpe
W+\a*^
7*§UE'-
+|D»ޣ񋤅پKft4eoyL3P|'N鿏&ESz7GҮ=6o'<%0!mCMu(&6Il'14amr{s*ЀXj)R*( Y-"ᶩVn5PQ*?R*M
Hgv~w3'%{o޳7m켣y㶝olnmIlJFF|-ѳ*

/WyDXq\ė@k¼!ⵡ>Df//^R."Lkoksaaz-7v$$Da&Gmυ!Wi2kߗ]jߗee
|_oV)]Ư)*bW>bv5 |@
^Lq'E!_߂6Λz{~j^7ὠaA4@_iC
Co35pAσ3wߗ.~`'?	(-
|W˭bzHϥX Wnh!5)Y|fqW[g_e3_}^+ǜ^[s5=< 耂5!IgfP!OW_7"߻@^/L"$[
'(zkoh&ޮ]~q	a@~Q/QN~?uK\VٶkR_S׉z|NI)зn>qG3]u
sˬV6LS1?<HZ1/<S-Sozѿ
WHkux.ʧ6߭Y 0S0xJz1嬤3?2̻
.;FnF__"Uv	X;ߎzp83
𷀟] /;ޅ!lb Sb<>(œL#>CZk^!9k,qka^_Z=AˌmC
{1I"^!_o/bgO|99o@7}C2wmנnn>-ՙ)LV׷Z#ƷG,7>(ˣkWD_\;}!<视x}	o1>~,LHSПAl^2z<׭d'73|>+y!)#r K~~ubl8
6%ʿ׉M*|^d@?
?E;|
x}|dـ8ZxR(z!Gs	sGE=/ϟ׭~zabFUԏ
W`lU	
{^1o~S_[aI^SO*Ub^>sXB#{V%>74UM;b_0|x9,)z^{('eCQGK}/Rf^iFS[zG?e'ӷ~5z詼ei)7g9zt&6ݮy~wR,hC dǃ9f}7I٦$<wcսp<yΧSqeÍ\o9fr|q*禫>Q7|JqLvoizݴTvtf\G9*Y[= 2
ZY¾us7랗4D{>6Zٞg
zlS{K?wmz~kOikww`ɢ%h;xԣj
Zv;;.ޱu[۵;%Ry9-tJ?%qPC{w
&owtY̎dgc5ieZ;EOHc(FqN-D1&[1<8Oϻ>q8wӭbX<Q۾7θ_
Nv
J>̍"F2iy
ˁln>[I]vHpI4V1p(1R AAk\JJ|_4v)?FWNybT5{n*E$]otM4brLM81w|BɈn
 J1Qmb٭9aVpTøƹ_<wQyF0ީz(8<fA#f9h
NN-0_R<-[pƼ5[!؎k<;f4)Og|JiXTPf82d$GYh#2Z$֩5kZrFV_P8A	nG]U2bH* MqT#RpN)ң4݅!v\yKX_S
GkLwY]R[rF>,+x	5U".2?̂ A\L 7!u̫
>s1ٲI-W,x(jX\
UtIT214ѐ=t5+'c4;읬 i[3yPЖF! %<QbT'>LP
{)XOp\QLQ?^raQv?OJj72i{,ְi#zh7YՐ(XO}f ԹvƺIh:Yxr[?T⮘*H`&eFf8e{p:IG q(!HTqA 2uNcNOשvKB=I^!#,,੒VU$4!UrV2-D-A=S<A@4|q
ႝ1o&A;#NCZg)pVƠxZR5
V#zNKPy"ok	%(3 %>낼!a0I	",8.U~n$jne7,ߝh>+Sד~kJ;|?rg~ׄ%h5~GkV|&>Sb߂{ߚ_zhƈŷgxs:&%|]&,F#@>#MbkY~OH~i]Zq=7>sFyaH/~~ZI_#]H,iͳO1~ޞWO9M|^јx{3ۑC\Kߐ}UߒaGRrR{~ZU5x{?'kEz%"ἽVM}/TG%#~2M}U잆A'u~k&okuRPK
    \               com/sun/jna/linux-s390x/PK
   Xz   )  com/sun/jna/linux-s390x/libjnidispatch.soUT	 3f3fux         }y|TExO IxRC	S4 
$  *YsDDMX	
mD.cEE2~{f/3{vA}CB,L_]"b_]X5{'k,p`,fU/oVmϓB4o9?rI&>?hba2;U:߬J7
U?+
$Pd4uё'?]kHϖ&+z%p§+¬6H[u5sք1&v^qhVdǉj[k8ֈv4=YV5mY,ܖ!NŞޢUܬHW&a;]lm5UdMm5jYd;S
>A=,>W	Q"1g<	;Q|3^''UdLO|ҥ4ߙY,a^<̗p^?&|r>(EY%o|Vj~!ϵY'¹Yqlq}| go{$X|>O>S3mi}|i͞r>~ߧ.j_~OؼSV?ͼ>篅Un}>ɒ/9:masϾ:CnnhNgÆxhK{7txe̸Ci`ZtkaCGyVecCgfWb[^.l|6Vft梧kx}z
ϤN}~!:wghvUGnvOΒo|mfÒMFcê9_ժf?;soFYQNo5ד?6t8^%G˿/z<xϳ_L?9?ޘ/?rݺOzY~홿nNRC^q=c?T,=|vw{g3O{awmi}oiE
ow's̯yT^ǓU_6q:kvoC=<;G2kIqofҟM\9`[?c,kff"t^o硏9{p慃g޻ф-sLtM/<îA#kEbWd5AMMamSO41(@:.sOsxsxd /rlxtRO+   c
 Qf࿁9?aD-k{0 <4|^	P y:֘ @gk
P ^X;|#Hsx5ZKQg4U&i"?e-'
'(C4x
yZkhVwkt4[ k_(sg'j5LQO!O@{9[+|r{A7_MowKJ~S(E8M+
?k۴
-c -g/51	4ӊ[AZ%Zw	øŒ*1#6J+?fkaQ1
>U%kk;5ZjbE!ZɒJzZ Iz_aVDiO;9T*~SRy G	8Wd/-^tH(zV?7~mN
Av%A>!K:Kj6
^.yBj,D$9+@55t.Q8ҷHګT?Իc?
/зu\
[<DEJG
#گ"`77KOkTqUs-=D:0"M]=V.NTctkj!$9(FvV?.CE~2L솢@o%;(pKxHZZ	|~8؟?tՔ2
^<_<HxQEE^V|\j
~=ed&(v pVI>kڗdkp(/LC5>+c/M,w*?^EnEO+W(zBC
>[ԣa0)v{CqH
'#!/K|*#$g!*|HR݊CQAjmg5?g5~"$|d6	{Vӷ[JHzSϪi-|_h-WY)[wJ}A}֒(WmCBR~Vdd^{-I'Qw[y{2\INMȡ/T>K[m/+F`'kx4|e
^/;Tj/kDih/Hb?}R/}C)KkEG@5S%>DO-jwRB5%;yL)/{4fIna\JЮkvD;,ɏR5a
$)Q_4.PgoH7ď"7haR{t)r="٫uB%S?%$L6%!#3ijfBK:%%18a\Ԕ	)SG=)mJʈRxyLB$L iRss	^II)'<=9edBSSS3SظI#m*˜85mz&MNa ǧ&p)SSdg)SƥN0<~O`SRLz.I1)e
{s}(8Ii^T)iəӦ(I&MJ~MHLx 	3SOM|/}JN\ԌTII6  RQI0*!>37bԔq Ҍ̩㦥#Iϥk'`MM [$,5	Y)L)o΀]gԔ4ԔIiɐMGcB@2Eu	ZХܶ1NҦʬ$<$%8~RZ*	(V?}95)9hf2ӸP	>ɰ9T3ijd	NꄚsiԨ) )erBƴ)	OOIJ$Ny.E1c
Gt,8^bp$8`[P([ dh!)`HFb$EPńi`VMMJ@ƿ:eǦMԌ"HH$G	Hh7p`B^>q8!o7ÃC2>`<ۭɊhUdE"`XmZ6X%VDNb81)UNhK
v5mx, &bFpsݒ`A
5ӦMq,@ydDap䴩3a
j/BfT$ьͨ@kOFEBϨ'Cg8i5={S}.C7;pmij怸@5e\IS`ag0EW	1;e>שV*?>kvns:ŇczOLI~&cH2eP9ƧNJ#VQ̑S&!.z\jFz0gens)Ʊd4~ _

|ǀܖ?aPzmq S4hTi)>*JLJ8<3	83iLL, (kj
0MINѥ3.eRJf	*A㌄19Rf	%.&?19M2)u

S<&O29Ǔ-OɄĤgdL#YjLb\~=A`ȏ7DRKH&G	XBʌl=l2Da:Xt0 )P5F|8>'9%9D!%5ecu	Dqwzp<aBVԺ:6MFZN,!e\Rf096#Oh8֦̓cN >=%~RfD b
;]jj/Aۉ(*,"p[E♈RS((/Lk<uI,
-[7#zjC
SD|(e߫?Yϳ<aL˯:L
DoSkw _,|Y |/4}UK?
9=~Qor.\brȧM.O':%<G
q+Ybn[oE-Wzxv'7yvw7yv_7yv/O4pgpgX2pCȞ*9nh/sܥз+F}KpC;RJnpCZW b[/r!}EzQoܨ®^eзF}z~ՠׅݸj	 |^ma;ܠׅ<8?saܠףܠŹ.5 gnk7ܠKܠ
x^,^(/ԯ w	A/p_WׅZlg	A+cj^=g'
AAv}ՠE-cz5ѾMyQE.3sn3Ї2_+p_P0>Ї2+JG~̠j],ߪ&p,_?
Qno!71*&p5Fx0#	<F8&p;L&,ieG{P	QQQߢM		Oc8˻LE=fG~65c[if:1l5#/QQ[Q[dQ[Q7?`OdW			<7w0w2w6o^6&q%z01Ō}T10OtgЈ0*aaʪU.@H_9QQr5)&RrBX2w. :7`v_4ύ&R|i<Og6s(i4ϣLqޡϚ߳4_bx,4ڧFy`'-](~i<K'ŗ)>4ߒE3L-(~i<Կ%M-)~i<Կ7ܠo7{S)>4?AѦP!_4?$i<<?SfP!i<H	ŗ߂@Lϣ+DPl1eJ"xPjgCR?i<(3Pό3&4?AP8Lè`FLx0jg4j73aqO(Ɵaz%Tg,1Vk5OuBTj)~ڛT#bvl5J밞'~[Xjo25E2^|鍧3cM׆2ǿ>BK>=g^s|f!Jr=)0Fvv5+ľ+߹|oņ97p{ޏiaaʅ܈)pZ(@n?xm.G5.^g:Uy%^k0oLMp՜ܴJFby^Px>
>rn!g)H-w9pg[A8&e@ xT
zA\Gَ'[D-{:`T9t*/
9Et_:ׯZ*ߤJabpLsU,@o=.5h4O_\N߬TJ,Z-U*Yۿ%XdlШjnS<PkL
sd)+=IݷMfL%/z;IU-48[x9Wx9*//(uwP՗xVs
ug*RiF{kSVCKVYɒuT.)0dvdva5`{IH3{7xu AP3ŦPG}W2v%|:{%#j
s (NX
q
āyk/$HwW&){Zc;558G	_r!~}v&jP|qkÞkuRyӛ\h"~qT.\<H=l/)DcEʂ5Sn |Jc:瀻Wڄ&|3Db&@wKH"X-MG7%n
!Ymu$annz̜szaȻ	m,B?C(Θ{9{֧rcי[P[a-m(dCm5˱2wgg.kob]똻O(E	Pٟ\6$`譡	+	P\ܥuht*_\r	*
>-")~~j&kk̹^<qƦ[<벦$P9Jr?Q/@]yYbd|lea[5<UWr1P'?~PKDҘ_tԨZaә͙m3僖ʚ}w>}Fw^؜K.GEtQ;AL!T5ܟoӛqt#w#SbcҾ@hGXs[4 F^CXQ5bm9/Cqu}x|ާGCڜo[QZoAi,ڕxm2Ah5	:V.1w<ƇPn@˻:I,øM(O	zF~1ućfEN#ͳ{٦B鲎q-t/WAM̪V1i.r^^AmbyrAJ5ZTQH&6)f
/݂1g{v3Sj7]LMs$0doVԛ7!ͭi$j{aͮɼ䌇
Zf	,#He0~(~lyLtB:!Piy VaaRbb[PnJ$̕A1O*u)7v\F/Q 1vW`1w,Nb77)v
,$9ᝐ wƢ[AFuD@[Gt8`ZjqwZyť4*|>bnPN*3ƽ$H6
olK&o>^=gIh	ǫ[)W7Pܽ},|fKc{>jfJrG:J¡fZ8'0wH{@6Xyn Ҵmܲgu,y[uﲍ̌B՜<(P~c	<ohc2YºeC$lSVmh>NYRv
er|7~(=O?.J-U۾Hw!Y`N9~_4vBxY(wHJ-@J녔6q)6؇[}r*5t$%ťC<J5D2xbًtErkgQEuIߺ/F4}孛|sE-'}	>-A:-8`49559Hg#/mVaWzȅZ<:⏒>Waqr1F
O׍hDq/%KW;H"ϯ7$@ΟwqKz::vA2*b\פ
٢=Z*B1
mQOʍ|ERF6瀿՛0Q^/;l*S#r~\"Q\<G:jH/T+yT=Uˈ^_{b"yuJ⻱-Fc+T>-Phӻ,߯Z5!EXbKKKK˥K+r?A+,!,YvU#%HwkWm;X&>{'Z3ӠmgYC6+~Ndڜ%(#|QSYD6sNHQWe4|JAϥ
vb`aq2wlE6xW%ʰT+޼d?ҵFy1q;%1µ#Sxbռ%ǂ`r_}[дÑ&^-QU6åҖVt+L{8+Q,tڳ+L{ ]G[T@wYyJ]´BjU6CTv=_(tOrǋEXj?H*EpїpGhF W8:0k<)avY$ann~,b}}'Uۀp^
˄!fn
)bQ@[xB
Y/QY!E]X QVHqP<+QDWHQ(5OoVHQ(zJ HOڋ>J=ߟByA77pϽmNrlYGcu&xZ~*?$/*`,/YaƁ8ne;c88}p~UW}!zoQT:?=;3Ytblr3V(/:P0Ϫ^KX+J+'LY| cw-C9fxm<U){"h}_#( }?JK9'p/C?؎ڷsEk"yӫT4؟Wd
eW0=器T8͟>p'rEB?]h<G#<iĠ̣d~L@Q7Sh}+>Fg	?'A˜n(-V؞"i!8SP.%^E𯗧P\Tf
yۇ7#-fi-дl8Ptg8X5,f$,'
(OB<8 =YӖқ~ma}I usS8Èpи,@1(OҨױ {#;dO˥upvݘni3mf0Axk뺔qWbm}IYLTX< g1n7ɀV
"Ⱦά^,˃в˘ku	zv:1kq~?~j6&RzuBB+yg&V>PQŲPToGcٖJ[B'[k*~jRPlK;MEeQ
w6lgEt2lXח'iw^6vjhcOOs6sv(s?.@.SΐY u⾘[k+R|'y^s֐/KwefHwspowa/og6-vl+9X0'p,|#cDmFIE$la;ʒe{i:擡\bf1lD+_}
F,#~to9dјJF	`~b=Y01]jNN^
Zp7(F^#MKW5B0MZiBZ%haX?Md(~ۮUiH|Ns}PqCl.x%H>Ÿ3<[^I.ͷ_UĢo98mv&?}f'*OS^E ~V*uuk
Y#hRNzfL<!~<u	SDF2
8l5YrwK4ǿZB 6IKާ_8
_J	*Ak'g˴ޜ?'2o
|s[V{q>:5^gb~3\IDN"
kpƸG%#w!|$1.Q(Y
@C,DJ? yxJy%5s V+{e)ۙ..iiq!u@^MTKwVz
^)⵵"{XA"_֦Oxy!^,@_!xl*iRD?7>>WKG8K\&Tؑq,6)JzQHj1z5G*y(R(:uƊeFk"=ЏF~|s7}4Z1Fv~E[&
&r=9c{LhSĺ*_'^ҳZ3.ACI IYxFPE ?a?=G0IDxSaƜ'Gv_q`_X:C!.Xe9?La<M~0^?K~vy30;aa2¤ckZk|FY_}ڪ;{>S>0oK'$2s0:2P}^T=mG6
.ԅ +cۂJF~ɞT$7Cz]
xm%,,^X	~Dq+ ?|	Y*sT*IT\_v3V	R|h{x.JO0%A1gI#b}=uch^"zo꯿;_)sg8zvLY,bY,6e}SbҭhW
q[
Ns9@{;8
wC`+RN:}_c*yȻrhJgFw==V#N"*Wcuѭ$BF8Ӈ!N$XC?<At<Op봜~ojywd]:*{g	*R9HHIgGS]mV CW(jg3."ڗ_/}XNKrDguCs,Nõ8B'2~Fo8ɓn^!x=
>jgY	JyoNlbmM3h,#@J뤺ˊ|v:!֏Zc7#;hkAՏ_Ci]KհjT3ڐI+&3l<_ jS94+9
L}g-@%Rz*gw*ShWw~'o􀾮fjbmM4ݮo5Z]t!3'p]Oc9wYН亦v_{deNr8{

4jgc)]'1s\ڏUҾW"
b
u6r1RW;h5j׉tE/Ҩ=?uǁ*{\ںѮ{DI/k7m+^q_'Kz)R.xD.D	K?UvVKMod6Ed2R͟X_F>xΜtN}ϿhejwX?>=x~_;rQi;Mobduc=k=6KC?0ٛL#Fw}~kB}te%~|}L7|ceͿS:`q%y~j#c8s3WVl. 
/iֵI:Wxv&6~KY:4k_תb&f"a:ܭDVDUуR+]T0ozeXT
td:rS
|6znf	VOYl5JRߏ;GZKZcX6i̫:1sT;IRx!i)u=:U2'<;|%"}ՂoUEAZ6Ӫ
W8֥Q¸2SבraR/4ptߴYF椇7^kz<*i by!>(pI^Ӗ}4ǀ\ǫ}[\z+{B^)'To\j鎄FsHʨahx!G+9#]TdP_}ױ2w҆t[R+rgtG<}\߅40SJ©>!(A#Z{QEv%*
2]%GmDL|m4Cy:%p׽ѐ*QhnǿIr+­4/,NA@(zA!_׉oeM=]rTȝ	IP	#qN>|}
Xulo/(M^g=8o
jϱ^fe;WmD$v`Lzm@4m6^͙fhsdR"jDg%
5w-O6ڡ9?~s~t%S~.=7L?֠P*̴}1?~aA)TM	Q0.z'┼ÁvǝO8'
i߼++y)u~͡yk}:nP]/-vWMٵAk̕)0Qs#!!i4\*?)J4ܸ	^1y{JVknCww&|d=[Ǌ.9bfRvޜ	Sw3-A/q6GM|Pd;pnQ-;p|I
LAgoجQcSZaDlg~6o~>Ȩ(ILr"֧Ы*	.)߅#fF
=rhLq#U>?Qh1ufnp?4(⯦g|vf^܏n~?ȇWmUOv}ycqa=ۋs['?86UЎo*
~uD"|74K8/9m|ે=8
>6019i-o\y.R@U+?=G:yhpOIi5,m'd
 ż}q׶m>Zoq(gh5ԵFZ]SE*	?۲ߛ%FCc;n[|WWf'[֟)#~y*D:(6t>ڭ4zI"7nui,G+>QPˈ2o~ƺ^GI)Ӕ&iwuFnⶑmLam"yM*͘`>C}0B?~bAgOxl4~gb6rsϤQO+k_,'SO}<DwbwJHg;jj<yw,5nqwNNйɣyO!<Dї$Ď1ȋ}*NEQ93>ngs]_n6cI` 0h6l	T'tjUa,o.w~o]߻V	H+6ܵ0_㹤Qfq}tZ_ϫu!άk8Wf586Th(fY;k~~/-ü9iצ~8@vg/|73: 3,`Ȁ1ub9ǅ(*g^֒ZׅcX-KA
4E"Qo	u͡si('? g(z+e`:l_'TNWUޏrzOUA<ô1e-!)=`՞qbCp_@%?ܛף%fT&J*-nʻ\΋RR/֋:
AcuqnLbuVKte= O>
L[M'>k
o.F
s7,.B/fSz<<q>M(X,L߿=Fu*ϣr9ڜOg<SWt _YOc}6Wnm>٬&hE#턻wjX1Ss/xyrxiHL^/
/tsQ]o	,K}M@K c	9iBl9qƙ?~t:hkAe	~h*'+w7n
ȡAMwnsom:p1}$زp_P}غR9=l?<+?On)T9DYB_[T
u5B/D(R>z+*ɣj_Ӛd&hVD:wHw O	8ed~U3GGdmdN
;##s֎>',O-D-}mPO]HOosg|=`F"_Ȏ8+ϧ(vI\E 0Qջp<%Cn#PX]-4=WO'
z}yPO4KVOyo#9H=5!	P;9I&#_tzJ7f48r94ȊMIsۓ9WIܿ^GW>X&S	Q	76Y9ӹ'&݆'=T΍KZyr0ݶJЇr>L%9oX,A^.L7٢az%d
9Ǜy'frNO\N!.yӺۓsbU4
A|
ehrDz)%P	ϯ YΛ|7=󡭷!DS9a&[˱;
ۓg)r>4
r~49o$
=HXXcR	FS	e7.7ș'ܸ@/!g7>n&r*$9+)qQrcG~݈Sڥ eggH-}>z ׉(3$❎^FiooCp1aiU|+^ -0J`5܇m=s÷7G/CZby9Ri*:sQ~Hz9H36j:Oկ
K
;~g{6:cm$hc}0xtyh>O} m
]{{w!lNMmFe髷Yfko3no<Q\qmcz ٟ_O A"Dz?p;?ߴLǃ۴GU.ds'	d'g&\S.s۔ӽw^P\MIΤInSOmE?r^w^/#	z 灷!efr^6@rq=׽r{r>2S(TNyi{L:}$uɟO^QWmɹ^^܆]frv]5K5`rv}~{r>_3_NН9:k&gi'$ rH%A%,\/rv't˜k^Ο|r1sO39?=ru䤉ߨK٥tgBޝ^zv.֚wDOy@˒Y{ :;dFr	᧺7xzъwR˟T>&ZnZK=Z۵ȨyVi"񭈷}3Z"X^RS\kgV^kS~r'OԢ15D'Az9~=r@]ɱ"ǏS*w^Nq
Ir/,ˍeY.7T9W$G`_q"LCsF=>y|ɏFkޕfA~4fA~|2*2;H^Qft^f{/STڋlTaHj	eEEE9_JںvblD
J)nY5j4]*:t7jZ^9U$LF}jO
?{(W+e}GUC4A2Ȗ4>bW0Vj1f|S4\.~[SH3sV4kEB$4I/	^Bşs	`uH^^݇*_V$ԑ	~AB5	7F򇊄Lc	h`n?(GeK,U'
#~ojfueحJU[Z`݆jƭZظCyֺ&S۫V% ?
6i}:_q)Ӫ:˰jaRݻ$)2,z(k76o
>#Et>~y"/Hپex;W|Bd؟d$v#d1Ȑ+_?:eTEO+t^}FqNNt:QlXn,j砓K G6{p;Bz(=HS˖+4-ʵ#Iql2ɋЫCB9L}SxO:ۤ)$N7޷
WZseX׋=k4^6Ǫc]>I]~l#6FUo+ 3^ʻnK>?WH4Cf<^Q4E4_/7P03P$цԹ|w5>,Mwn+/mKx;(RGQ=~{[{	bwt=B~ K˟ν+3.d]bWy꺷#iKwc,䀘]?vM˻e{^vXSj}jiJZ˪(<ElHZIp} ?k7goܖ%B>NB˶Z !z} x*!ڟm.KhW9$v"kٳA$IjH
U$d"ML"Cpzrs+de\'z^60ME6_[Jpl1neM6K_z#%~_.K%חղL1Ȅ,} P읯d'3	^&;	Lh7N/Y::M#,46-
/K;82=-mR	DS[/TK|zO|
c* /9gɗACA䓊,q?K6--Y*{NY[Z,%srÒ\<?lBdE.Z\$A9LqHrLp.0fy7'e'4F$v&ExRng#}uzKYm@1ȳ]LE_.RHֳa
߽UyշmOMjgZ\oe!;
Z74Ã be
_%ɇ˸bGsR߽"挱s$i'f,[&E'^ff&͡o4j.:%NNND-TKgtXlkguh^wR<ُ^=0zuhc܏	&н}'/Vag\dxSv˞zȡgU|C2_}vrwo
0S'\Xax#M93@vSuN*/xq]{=}b.Zޏzr
nkSy9@7uIЕJtut7ˑ#⼶/a>
%ӣCnuns'AQ
@WWGG{ӽ]{_[Nt t'utk$6]+6
J{pCoT)?kdDUMSFԒbVn Y{@G7@zjg
myGGX;CZ|]KvvA򅕨MAaURzpWU"Rz1n^%[bƱZ$u	͕q)n1Ʒ)"НѽmԎW4>G6vh]/uI]	iՒk't[

rY/5[0QTtj+qC[W9T	.NqAxאÑJps1t$.^iiԌ5i)ѭ}"qRozȫkFHZzԻ4Tz&FK 86`^#J+Q+Q!vbBY;;1aeNXkOŦRxJW9ݕټ97S'~.z-Q4l+wLk-)6^#~u}oE/i&>z_dps0ZױN.g	i%-<)1>J1k)f2w{bƁsRJ1P(Z(̠SZbkFA1n~ЎC)bsb(&
b^Ub\Sbf1tLRbx$4
`z-ScSL(}Ԙ1f1]|P뿭U(k1w4!ŬH5!OOĄ1b3J0AyzVRL*|Fo}Þ' DShz@'jjC(&bzALbPLPMYJ;8(6QiVPL{@45Y2Ɛy q5f0оC̣j̷bAK'E bpieH+ybRbנ
_0D=M޼S)^>N{~>U@zbx9;a},E)oY}ϢZBg1Ga
8!?,7<MO-Z1qYKYV$b"ˑ-H 0ڟNvՉ0
\MM7O\taRu)WܛV;};7c)l
!
.wͺź\*B͓"1]<E\Nu7f;r.e3erwМīBgTg jV%AjGxM-]<KYN\?ǣ櫿c}>m-.S?K%z6ԏdy$!DJo>Xl8_:/*BƤRj`ˏ*1Cߘbˆe?}QJj3UdTмCҵ]B8Gj<o(Wѥ	凯ҋhwՎ|Dh[۶
<ėлxZE7L'Owg/jjߟ9_C=bPȦl1KzGS|$)̂svC.24w_s0! F9eeK;E-4}{5z] "EG& JKή>.ἭyF^MpJOi"9/T3Piϗ=&̕:D)z'gLsh$uv<y
ü:p-y')O_`<K:y8!尖rX ݾ 9a~ 40-@ɡs_ tt|LʁQ-sx8׾arx`	n] 9e>)*@.a))rXG;H0ُ/xY,֝Gdh6_T=鏯zԑk3DLypT=#S_2k:R:v2)sʕke/l1,y_HGw"p_sїyмev^2gy~˜)*sr2w=u
e̑++WLbd1^C:F2?(p,d\JyTfCy9@f)s3f̍ʕ972?X27ʜMX˜[7g2g摫/@W2?e_-sՕR{c]̺uܪ)=:CR斕+_LܶeS+ܽT<wL2]ab<`ks\N9*3/9QsR'!
e><Ν쮵ke~3@ZڸecdW^[xt%)Q;]%QGDG-@mIY?uDE$!~Ndg&Jv?jݺvwK:ҏzD#4+FQ(a8<g
n["QQVVOtTAGAEݾ5Fs It<=ZgîjmeZX@[;!ѽEtoKHm8m.VG˫('ꤪD'=CD=P9o޾Æk߫EO-,x9'Av#ά\umϻrue5[GhJt	:CZY&)6~Ѝ~~(Dw.[u-jt=s:/\Ht_zJ&R~)45V'!I6!vR/媳!r"{Wۮ:{cIծ~ۘ#RUG.庞>rf_uԃr͑r(ѵD@Ϥ$:jFG}F)S[sDuDk":~5uRUӏyZ_2]gQ?.QKG=\~kI?nDwQ%QYjZXYZq^F8V ;vg3Sisʹ7/fOO󑴊~'eyLVԥ{l/5]<fm^WF+0z_0QHq
)G!6RhG|2RYLB9*n U{2B/R3fP62'Ma|-B?N
Yd=Z!'C
ބDQBj{w;So%iGSzB!DNqg!ԌB_N
}
Bu)A!,G
]P
]u\P9aO.SdU~Bs9zW쾧P}i@ tBM pq
!ڍAP'ZO~IG BC!OxK!ܽBZGӀBBv
	7( B(Bs)/Qh#fR(_g4}<ڃ'sooz*>+1C>~3}y?p'ź]^JPxXü.s<l1o7V]\N-J66Юd|+͌-)oˈJE)@-n-h{i8*KZ[sa/ nh#Ք,	RhnHaB#Ha\Lӯz]՗|n#q5)xh^<Q.coE$Oc\:>n^V;ʼ9-J=Heѐ|1^z+UY#~/
/Q,c|^Ԅ*ǲ<+1Q1Qr\s N.p<bhÚܳ|7<66?ԅ>BmmNN*_e1.}K(@X!*FY5um8ۯ(i8d'lEڣiW;:yfv+:V
yYu!W9hpgʹ
:|u{ijLě>/M/'vx~ii_Ggzq``WCJGqP.<fvFjc;ׯiۻ
g&h"8yf_˿mA~yɗ(.P\MBy;5~>u\5ꕞ7D:
nnBHZ$ky˵t~uz=Ń[Sl1nN܏=TT5o5GCo+kiLmnރ!K>(a@oxXjŖ<w[Ywģhw>$2w##%^b7ٷ`ƶY7압qKor9kJq%2ObaMܭ|>(Sr*WJ 
5#|y5va8G?75Wieu)>a9A&z耭Fu6&Oo&a+1?;)vՉ.Mz_v}^yy筑r{zzBX{ M'\>_1~g#C}{T7w+j]5@
+uh+^!oҫY_fu㫘uF3
ZoG ܢGyQֵMmsRݛC7ٮwj)(̽lr}YW+1F2@ՉKbM
q{9)
~-*V/UGm|V,;J|g<esHG8SzjȺ<o"[(!#q4տf&+h{_sq)Rݨ)) R:-v}L ^q<+5}i6pjTyBJ^M^io[QpߧCR}nXhWMj)KwGH6$n&ބҴ?BȸQ>;e},U[GGhmu9ݦ|v89<t:)>ej:ȑc
?+S	kםq/f{0Tb(A#_.1*>
hMSo#\kkNMTdJv-<ƪҹ-:\f}h#xK/vtzNmz~g؊9&  4KX{w6"~> ̞#{)0('9@
!dWZ5n'^[9}|qgw<sڧp^"
fndNV;wLx2*""UhV:z41䚊m.ne$
CBy5րԋEyHB<t@3Ki :໅joaD
/:b\9ЫdĝP8\9| ٢a<Z:/t'=bM1F1P;q4iYye~3KQږ66Qb1W xsψwD)o.w3}Ӄ5mAc"oS}|*G
H;&d-MNQ6W>[@a]s;\3}!h|zo\w 7>^(c5dL٘
Uw.9QH>+nxGZ`lQʁeAɖ"eZ\^Q&;to
W޵/ݐ'ɚyTC!N#ȢS|[}X.QV$@!D.*j3!FHQGњdB!&%Zj6c[[S+k==C[iҊJo{ZҎV)yZ{?=_{}Y{^k;s%~
f[)yO^3H?sҭ6*j>M(
ׄrzB-niќD@zS@9.2<Kl~a+xɐ̛/6vՆ?ԛZjMKr鿽ҽQuPzrNUв%oJ9cC,oyH!=FvӍ/!__`s=JĠ[UVsnU9ړNC'BvȷmCϧCjq߻+/D+%rzq7k030NPy%^9\9r+糖wqO<9-HrٱIn,NN{솔WKnfz,y۝j_/ZŐS^}uߧ=-~6_\JMvSҞbioYyKӞz 5R `Cߑg9EC%^Np8Λ~N
)/+S){_b=c\z9s/.,'c ,0gr^>72ůI$fH"q^_e`Z$8||[ Y/,SC|*幀ߠlݬm1SߟJ>|t0*Y~I]ˍX6/.W98f@S`{&nhrgT,c{=>WVxt5;1~˽l=<){˩[|އ"]BGdѪ׸=YN.ȧh\rdRMuMA#n
~(hm=S~g ꒬݊>VTOt.D>=A>w1@_'';r2U/wi辁?!-FI%*<re)>쟢h.wH{ƏFYQbOdV&"<BA3}Șb5yxUBfft֌3D=߾ٚgfzf@cFueiUs#jWvJmy%3<ˬc{3~?%X3~
Hv_#sXURf(Ы;y+ffTl֛Yiӛ-K\Hn"Es9 #,lҭbea7'&vVh9Ul[3yҞ.-`r{O!U4$٢Z֨:iqэҞ<"¾\{޶v
[uj{zJ5_**1lcXCi6z7HO]q'
&	n|__f	}i3Ͼc'v*q6WT
Riw]Ư x-Ku>iG\*iυ	o3Qz",4b+!jc|Qg&VإgNCc(.R7\W}^b^q0s{5Qg̽\Z
[W|2,dOXlrQ!uoq-c9(פr!ɽ֙ihn.>:]\TO>b^}Oi4WY-ˮ`ײ,B!*榖.Z]$T':p`;~-	6'ydm65cTnf/T/h/l~(mީIyy=ϛ7/#uW^ľyP|b1OۻYƓ+] ] ̧&x <_ʍs}zFxE7yz*φoo}FST6Vyn}tP֛.㷭{ϟQk/@{^`>GϤQ'eW5uUbXxNŀiBҝ@؂c%{ލyסO_+cBNUjm"dϲ"]ӃO_{["^
ހǪBh@U,h8]Bm9Q'\zΓzS4d扗"cK)ِњODyG/$䯴oљ'[\wNt+ɾb|m}
_kz;_O_굿ZUma?q~^f	=MWcLwzEqZs7E-'o9\r80{?YGu|D	r\Yʌ629iNby_Hj]@GmX>İ'Jc)j(uòYg:34<lI3{C.IڻJM5'&?{k~٦>$>Dh1![[SxSwk$&(C5;vS_e*-\m7z}J_۠9UGUv`wwnuaSMA) {fQ<~f9997<w&zs>|_c<GD#YOdТol9р_j{{(ō\q^R,jroxn'8v0Ķ KP=D;G>Q*3fo.uJKU26MiI~Wz䷕Z^!#~~iߙq9>C'k.9wՂB\__[n+HwM4ǵ,̂|.?g;d2uN_>kae㻕A=yNex#fכw@^UiO{D'+ujACM}ҭ?_f&&ޙ{eQ,G|ۓuKԫҼ	=f8szOrw(^ګ)k?	>³!ѩ7=чyѷVpS5<VTsݣ6u_WqW9҂OYseTPjqyPkYp|ڷ\徜Gʎ]Y؛_vOKmf`}@(6>Ol@-|^bqMg/{[l尧ti|M@OyD?=$fPLacQ }nr1OF^-23<{{փ]Љcו*6S*.KUfmL-=(E݂YuJ	Ƃtv-ݱˡ
M7*QY~q3ɲ5}/f]E`.E N6<9	4LPxɈch'=.TaH}`sǪPFdd_"v2ۻ.ZoxdC{lAN\3p5|1ndL%^NU$Ik̉}G#ѥa}Y_F_~u*~Χ)eѾSgu[!G/U c54w@!xV%hUX<Dn8cg
Ɂ-@5h7gr&ݩ!ǈ;n}>)}}nZB7oV_j$S
0?X(\YE}#'NTP?xϻdyN1)kEُ~cX>wk)fڬ/M}K-pޥ*{l8)DGOeΈ?HFR¹_31 ڲ|T3{arkE`WiL}RĲռ/O~4UWλao [FК{ݵL9[;H/@Z?uz5*EdːQlHAb+ƗCxrʮD2(z062{վNG/m={H	V0)*	|T{?ݛ='^ȯ	n1hjΈwLM߯D6,?Y'F xҳHS=hsg<[h`gv#CϿhz&~4G<4bK'^F2&t4|g5.Ceɋ	*ծ bKwCjW1҉e!U8`9(7eJ5vw@&0'vT|f_|woPf=N	c?x@NM9C=/NP|buɹ3f:%x{2ࣽ8ZC4-9H7<˨&oU
'+HLfb~%8#DK9~$
J狵f(USVJ?x+k4`'~ry4B>F7#1a8gwlibfʳ.`l9jŁ/1'wSƵ(Yáh.2}0ݣ
fI5BK<+/c	RO:-ݿ/.]+52:4+UxH8:GM$%[4Ku/>&dSiF=jc6%e'O
fCw
~P-!Ec{N)n'qTbx
"?dp_X	w$Kه(
pO},/%.G=!w4gY|o@ۓYiY >uo6ZU)-i3w 8%R(rϻ?K)H^g{oZݰzE#'^KSF@6ާO6vͷ&XtX"Kg1ʄ6.EL)qnbʬ]~h|*Ml@NCӬhc&^2ĥ~%{haP(G>N&jOܯBtznb|!]chfQ&:+ĳJs݀[EY]^ZH
Go~tQorvZ,Xg_}(9ea.3h9O}]|B#js#*zws<k۫3Jq`Tzr4q^lt`{!Mr-Zw1be'ۯ	Ik	ۯlY9iٯ*w?KSk/YVZ1ñb'>hJOPTzGE<?J^-Z*zuWK_N^kIսH6zk"C3%=$v;[oru*ۣH4:?XĢ'%c\'ƶa#_|Bukً'> IS7iIv۴6rѿ\TTkW9E;<07<oF5 :-	FD/]3Лs%WoZ5~]=gЈ~uZ(gDl7ظP4iP_|ts5bAuϷ.|5n5zo	}R?"sr굮j(ؽw3.oftNzE#rSF,_sV[f6`(2Vu_5bRg݇	;DO;lAw3r/(B6zT\C5gmyûM1FeGx'kT֡O@&l_GVn`ճw̌-5Y="t_a
!;	O ܯI0"C/?2W	{D/ןOhɽ$8Bb~5>4=,k43>onh	]NQY8f}?VhIܧ-1*^Vd*os6ѩ	/<ߢs4zK$<fr@g)׭o92_V?7W o;\T[$l8SQ"~Ozf3e_;X(z{?,ùw Wܲ:νstɌߛ-wZ%A0x8m,@4+7xP6xnjh
r2zbrd@HB%53glhc>I	Wn=S3CD]ngֹ}_=0C>;"5~4/6 L|UDkC_*{ }z_!{
QK.H
7kNP)Aw'-xҺovk?fY-ٱHC\Wz_^}![3UL#s_(5n_<WIK#ݪp.:_ 
Bփ&͈{E14*'^+10ٙugd}Z|tﻌ4#l~/s{̇]7(Qejִ뽫5q*=QZpb?Y4fVG0n-f|/(/&zWВaf[{߾I|n<9ݿ<;|!휔з;C.Q8p2h _޵>0aϏ=i#ni򴳖gbMW8{QhVX6aOQ0V~#kkawWv8yn4;9xiA"Iz`lX/,ᑿ
VFh~ȕyѾ1"*[ؗM)PՌ|%xOn-1j
oAY	̛o<꾄Gg@6o}fAƉxt)|sRY_(x,s_Up	^wu;,0=."LKjqƿ0Rܩ/OwKg.Z\]x֤J(805`8szF	U/?[[oa	<7::
вʀc#/Zy_9{>$xoWofyz0zIѬ>R6y	.a-
EYr?m=ʓy/xOK[Vۆ5hX{5t`B[@|O;FQȾ՞^	MPI S P)nk7ϊ컂*֕ ݨL2z>c%46,E,nʞsPt򣅫X,4bBuc-ny@55b+.g
D牾`fgr_rm\y F/+Y&KѪahK7l
EU!wqB77/`=4|c$)P
uk<۝xKBX32Wgh]_hSr<v9
tصl9E9a-dFpȚ&{JnGr?߈5ML2G45z~c>/Y 
<ECE4e޶H "m.vcr9%;<g2rQ!>۞%=ÓkWƫʷP8: 0XE_81B<0U=^/ejqQYc,dw^n{τZ)8)SSi=4y!խq4B|8'.3-6m93)gg-*rf`?Hn%"9
z?I:d5VS.vueP䕹\!SiS*P`=.=R(뫕AWyxDQt 8g3F5ga7W1Ŋ+~y<38ypϭ,zyz;t4v  6S/z퓆x){EzgCG
!hu<q]h
~Z˷ލ@78;PXUpM,bbxD4޻#ddsZl${thygo_}!/FA@_r[klq9vpfWr?6Soy|$e%6uڿ\YC2`ܟ 9j	d&RhDهM{F"hf<!D?3Nto {s̄efY\wX;A/0҅+Ke]AU,:lĥRb=ڊz$6pRm#^E]`y
9">+v81R^oU׊E0bo_WVܾJIdO{ R@!z7oinAL{և,Ϻ|igYF|	X-%U[Ji
|ZK_tOpY!_;wyڭP>64i$ߞ՞kx' ^GrN鋺_r<jjҾEڇ>9](φG9]U~o,a99Sr:a9d|r0nyTl؎Uƺe>!mqsE,.%
o7>h?
y5za^LZbxSt3M|1qܭB$R[tJ.;AWC˫/o\tkhnpmlcfnag)XJS.8$;Ğ7E$|lni4+dՊn44aJ_I mOM+zTyז
.&9ʚ:!BSrCih)1h'O0^Zw|EaI?P)x=>9⛬G<>c
fa]io{pƄ^FyS؝X{TBf}lߍ]:>G}nY^Zaꓱz5ھkC8;[#j/QS=Ca8ճbgXԣiKŊYcYXg^G>qc=~-O殢9j޿a5fI#+niHC@!r["
Ǌ%ҧ1>q[pm,;Pi@Fg&blJvw~"7ygRsC[д:#%Uєe"<ң/_-C~,eR	Ã}~ך
Q>1iY2"?=5]%<(;Y?jj>w޽."u$^˔gCDڐ=B}w7
=B%RAaLI_
oڥ.ͭbG2s?Q[Hj(s[9ޝ/9~Vf:~K
7VhBcZ3c[kK&MVΧDk㡐v8BZUFG<qM9= +YG+jċEȑՓ!Yy 듿6/djZ^,Y@{</#v+\vȵtرrgĎn&4H7#㵼Wn|
ݷq'*ѝ[읢Ee;? Y)rt'AWXt46"ux|E=uX];GGfb`QH8^J{
̐}e/Z*Mi+3}zݣsxw[4͖vS76Cs)y<<>>/>k&
tyͮhNؗZ,1UhvD"	yz}OΚI罗sqr*-JVozN*ň9ןKVg&
12i|!:qzsG9ϩi5Sj;'GY ~TR|EȤYtC0BX#i8.zf~\?kx|z0BC**hiN~uSGC@k|M}t`w}Pobrk*{M46>Fhyi~B%Ӽ$6g}zp$z2'~K|+O7^Q.6G@SM>S֊E1j]
-dy w0en-{zVܻ[ 0Zf}Cb%j,<ި_8Woܯ+::@
臅U<2!YPH&Fȇlba~|o(lUmAαw-6%&"rMJmcSD3QYķW(.oLDyk/E^/ Az\al,ho2`Gw.W2E7vnzq0gChp8߾(֠	.7,
'γH0}n>b	}v
@	ۙ$7zj<?+Di$e߹-b
ƳM~?$_8gO;itX}/8߯6Y]Nw/TCXNCH-fcDwby〜+ƈtw(/ԫ֊ 3t+3(݆LwZep_%[*AP7dTNt2ZR|Rc$YkR.STR2y[qK'N=W<8Fx;rDnZ{w.[.oKyv5@f-Iz<0GNSl'=N$./t8inG{Ik&D}
 ֖~?X
(^wk4'gJ*"F;r3{zr	hrr0E<$]^6c^;$W$õuWش?-9c#U=[tamsG`^m6Lm+I4%;J
^egh?4߽Å-l|2cn0KcҶ"OirL&GVN^]]Ji~ǺGVooꛯf*}?D,nO^i뵩ZB^#t޲HF3'SVBB .pMz.YEx3Z^2j~9n8Q=Ld7cx^&dj
v7>_w1V2c#:̋ oĈ+ ŏFסZC/}jb@8ҤΧZhWM+i$K-x`G_8Ho
0B} Q`2rM[L%4m107V%U^XY:'jEuMFk]y[؈6hJݨoilMu
-<){ughk4AE-Fc{ְw˦M[Q06íMuF}[K
V
m-
Fk[h3Z]c4c[7$Vv$-uԵn^nQ]խZF]}}UBgK|ssZo|KjƦFA԰j!QMkn6kʂ5fWZ;"*:ğpcski S#VMUׅ./bRTĥ\hE^M,>ehkƵw"J4X'6.sqݎhxRk\qQJmGCmp{tC6
yI-a&$rK3=#SUmmֺ6Y;uۍ[<\^CF>l2S[?.4.
80˴p:xm숢+
1A:Έ7omfQHnv6!6E[CtzzGjJRp3?mօ[Zrt
G XZfD>-,Y ^,<oGk%:×j-iouuH+w464$&lځiV⦻V@׷ut[KJl}rU7=cJ	ۓSfAV斶M0
aER),@'ݠ;"ma/ss=.`HؚCAs2Wlr%@^kll\CÞ^.aGD;
LKܔtb7NnfU^s=-aRTfezOU
̌Mq/M+i%ΜN8?פQN&ޮLNݤ$U*Y/SWCA+LWuѶIf9u@M²Cb&Q-^8V{Ee;6<c*
xG*n3+ֲ2EAvfLaKŇ=COk^ qo0peˤR+N_pl'J RpJ~y&s(ғa8ôJA6=WuFC59{kQ+S풜{23IʲC*OT7n!즜3wVo^Na3UES-ox^~ZU^mdKxQccsM}Z}C"ok):!xm4]dSݴH=XM(%A%i v[[3acK[]TnnhvB?^t/
{bM!}_Ts7EKZ7׵(E>-逗Qp-4m
*PFC{TζiRhҥ7J/Gz^ȈEUm$L4w=%%Յ.YvEKJ7,]vaK/pqC%.S9PM?XXAseSMNP.ZSפ.Ɇ;Q&E0I9%L59[&cRnM|)Lt5'+JJfJ"m< kUPnr(YR%ְz25Sm#TT3X$:ܔJDI(ʶpkFY('1_%INHmI(³eTWz1/%e'E$]V{H$Ү-Ntx%6ɰDޕd&U&[5U*w8nR}m\6HΨsχ[2ogB`ЅrZq)4$p\g9.E:86E5Κ~rnkcKP#~k^SȋvdP[KqS5wl]_%k$^__XA_ǡȷjOAb3bUŌR	:j%_FU֩Bf`}9,ݡ6jk0/UX즜f5I' =LUg`ebYw7l+KDo^qYYVIQMpe+݋>c_wKxJJy;R+/ye
:ݟ$<,e"}{
7ʽ]⟩fJߦ|kpG%|Z¿zf/7P%:r9=϶iJ+m3RoP`aJpOݣw[txgV𘤟>BPqǅ.
w
tJ?9X?54sOegmIEObT`22 ].wE~I#ێk8rlYx_d,p,IWRD~eY6c18oJ7M}Rj
CYE_nh}k}]&gO*,͌Ri3LYZ
sY6"WTu&בjŴ෕&Z~Vy7YyGmV>޺bohs<ϰ*mnn\fMMb F7MaTs{%R׮&8l
-Bh[;\@ު$ɭpKyKSh
/j: A͛u6xlv{0ف7^ wno߽0/yg#<3iz/o,tKAr!-kMVs8Y5{hSCx;#9/i&&o]3!GҷQX:t J**+cif]ۻ%~y1	|nxso1=!Jl+識/Pm	[$PҷJL?7祵C>?.{P'];7IX>+2/;MyܘMjZ§$:cas=ƓίĤ)t5R?:CӍ)~d,!~Dx!~XxjSMֶp=#m;-iսC/E<`[9uF;2U]ue|Z%Z}at+M[Zu;h&.L5v?v=o0C;Ϙ'n5x8崜wx|_T`ذuJ(9㟻';9lOjȷ0C%Kzk$q!/{S穟MD/D9R-a7ld8G/s	Pso75;K
ouC/?`7Crq%Y~`}cUΈ0Y}fG;d&Bxmėcf+n7OS#13AaLw'G׎BQS{o H8BXm&FA؃m3mWpPhW^xP4!\f&h6*b&b0G皉 wt-B3L{ѨEďA}G"RZ/y7fuďCN~߀>~/@q	7O"߻3}	H?!=x O _A:Aг +̄yHsH91|9&sd9&NG>ODz.0	yЋ>
'3(B+4Ls,BW#Dd~i2|Igri"B?L~So
c
zMA7
87|ʟ|g碾YhTNET|9ui_29gq,ÊQy3C}o>?
 RuYMVV V :@9_l @#yitʍ7x7^3O4vDo&9	:oF=36#,o]gAg6]O>vnoU'Qxނz|ԻpG;k'FH(2ͻh s5§oCbb||z|t|?	zE=@ϡyE3~p>ym>,=}烿|!cs,@=ts}[ =\r }{?@;K (WBK@!V-
-koX߹"4W
fݣO~rĽ?5r졬1?*Y6*kMޑ?K#jw
Eޠ|lL2䪱GǌJؠ_Ԡ^B";]RU)(eǦ\9(՜{SROݶ-zWn&_խ*aԚdBQ~'ʓowO*U(CR5t%<~85Pgz,yfK
_z[MsVl.ዪ5`8ST彐bYOOzɍErc9:iڷj5`>t/?#L64/"CPBGT(]=7j	ڕٯç.:pFho\"D7RuU:8k.ږ&F
Vu(+~3?H`cY~@oTW%K qB:M4ܞ,7!ϷU
UdZ`٨JĿa7 L&aU#?<D2=ESnw<}r
㹅uOsU(Y3m,]>UEZ{U契s9)ԯ=7WyI
||?_A>Ӭřg/x^Q@.G,oltULkNz|Wҁ7뱄7=kO.ue[$GUK=|-@~guژ*w_j=vȅ;QAOR;Q;\лcJ2(S;@&F1VcaYGCVK;ukrL(Ǣn@CF퐢ZAnH똀^#ɚ?kF44/%ȾiWS==1^%^Ua^C@In_ȯ
h%G_p쟷?CvJ[~G}>h?ؓPH_~tf'yNV3{!JuF«!J{
SLU/n'?
W4k8beۑ[ә_.vY݃[2)|Y"C';P9$>djXؿ{==BGG+,-SqhrYwg(5 ?)׺
?N4:2c|_RGoYR1C|3CLW!uߦLpfb??PlG.Ӳ<<߿(eYx!+.KJetTC'h=?<N?P?~(?{?Ye;k0c9ؿAgK崖I_z ӊeg	.? ܙy(#>&é=\i}=C3P"]'2{4Domh}rOߜ@zN3T=	&FM3nd55	6
~mTA0]=Ufc(Wܽ}4G:<f^$׆S9i[Rv=tN!2RN'6GMsoC 
I-ylCqpw[5w`~27v^#9O=<*FO3]لRlKd)99r՚4̇My=yڐ/SnkoE:|ww
?}?X/ϼ(o;ZʧK?΅O?8
=.{R˙L,fe	MCcw
c=`A;uӼ)_ߗxLc*ooTQ\CNE/;W̋b2u'i{y֔j̋OSaVqWfx4zLgnϰ<_N{RUuCׂaҤUH=
x4^N5fxh{=4/~X#5	a*4
CQˇ_#B)><yMn~
_sg:=@~<1;44޾RT	Lu:_ͧY?K^%ȂuVz@1Ȇf\$KoH@=<3n}Iv3R%
߈qͫQ{֋[4%k8ncf~L׭yIfՒgX[R}g nudTʟz}3cg&i9O3xFkMިr'A}ԚĦ2	*7MMyuN)OuԬ
~mMFxD~wү'`}~lY`I'yIOJmҨl̴ۏcx2~oe/iJpPgds.i%UGR!/3̃ïΰőC|h甌~g.h`!	.KM͚4El6߽GчK뛍*+o_]4;18o6~g{g.??Cy9~S/z&K4L(l.Wnkwh~fZ+>}H-u3軵I*J1{FcYwZSļ!C^zH޶x֋7V>suǍUIMN-؎8:)@>=8l"yj3_߿__c7`kwGtx:|it'x:G?r37~vrsuۿ[_${O꿿Tij_J`>WBI?.SmfU^sL>*r6k-wXm^p9juN|uyKsҎem9`7]Oi&:oAl
}B7?%S/#;RBkr	ov	r)\/+
)Bʯ+
)Bʯ))))A)A)A)A)eRLʗI2)_&ˤ|/+J)Rʯ+J]G[r!m|J-voϿ&a7=(ݷ"	'ae^%a%$	%E»tx)i~$,e?i>KK;G9*{' NR;%;.߽Py)	K(ў>P}GNbiPNBw~Ǆ>ǬvII	c1EOH⟲W\yQ\\j\TE77]ҹh0.E3˶HR{_R]c+^/vHiWأ''
+^m_x#/MHRعI><)޲}8)^:jELL|d|&H|nRIv*.qxʶo;)Pr43O?3C/*C|&UeV5ߒ+_}Q'??iKz?ϒK<.8:}8ٓSN|Z|O
#ߖH+ʙί~A.}SN[A<߄Bgzǁasכ5{|e.~YUYW8VIwdkGx38CSzÂД:ANeGF<["{[ziP'\.ya^ϸ#7]t9cZPExTk//U_įv!KN$}sĉկ,]A'Vɜ[~1tu;Ł%KnL@s_+?~ԉeH'
,݆gx>V?cn_;?\l3/wKNީ7299$Q&]_1Z|Zg*YeWnW%Wq?%|'{{Ӯ9_'Cͭuo] I.0{3G~}'~/#s# x#'53.4t?gk\Z흇N,Ȼ]QX?%ˏ׌&ȷ8_ꃾsƛy\[?ϛw_sK@!y+]v%'VO: vwoJ2Oe=-AofVz
8pm?h5ץ}8ʑ+y"W#GrWՉ? |!yKtdh9+\~@z8vM ~S;xdAW?zBG<)rS؉KeD1.=k~GGfAnǔsL˿'t}A1ۘؘ87Zzr+ɿGL߮ŮvYye_hz|vR5CC.}bs;_q5Nb'/i˸nK~ }N-;u.c縈Zz]q'8gAs_{?&}>hYg
>t&ىlwCv'_s7UK<\pCʉQ]vHCkҷw|3ɥO,A2bލ>[Oƿ7pOG;a?e-N/sZ3Zt	8:ߥ{.k
ؠ/Ǒ}L3O8aڂ~$=\j!W\vGO	;rҷCONpeه$\
oOpG9)r)3Ӷ=ll,W
h}~ZO~#_"͔W?
P3^Co\fuʚ%T=vr/y-yLWWhm[#-QJWZFP
˓W'kma	fAU."kYoilnW7#FƎ3)_bG [4\ൺʚ+Wꆢ	'N{
'1L6GGV~yșf;EY\YYbjE|p"
$Jd<ll鈶'5.)YJo84mQE2ck{}U2$IXѓ-
uѺE4b?U=ġ$K+UGfH~Zِ'ϖe`1𺒟}(M+KNʇV&:cgG$\:vt9g"77GCb%9m,/cEWOjT-5j
w%rk:Bf+نjBCynZy'#}܊4'ԫGnj,0;}R]5muYjRcnt/Z:F"ь
`\[o:b :­3@6յDp&<$;n/=lhɆ[yjuխkV֑gn㻶.8[mn\&xe1U(->6^~JiY)CؙY0ڣ55{Zskú[7{SkJA7 zq3k(K,mZwF {dQzf[]K'NL
i~Hs(:1=u)陵YۧsnǝNB+!_C=-ogAw!2\U[CFv]Ukv`e8Yײ<$&
m7KF
W7#-`qi8uHHEFڷfAZqvm[1;뺩CoK,xu]'nhر:uB)uxd?s.ղI*CݺNoaF;z;"@tERn~3$>9bItH"LJr[Z1V;F*QzlUu[TSՄ\Kyݱ3tH Y;X58uY\,i=*uMmЄgMde nL`h=,Gi,h2Ou_:6m
Q	
ghnBΚ#$C z|U2Z	U	$4c,O?$:kw5Drű䞠Tfop5ʆ fSqU@@udj,Yh<I4h%[a]i:("-QU$
OP@I{Ojך&&KkoۡKX#%8mQ-T	,*iԴsgGg;s>#ސqߒ,i3cIaJyޙt9Q~^++uZoRi
[ҭ}Vh+ggVsHykH?w·X>b{?qHuA9~c+s*Gou}Vd4巻}ֺ>P?7;Ҕx@[%-OogJykOn*%J=ZTޏf'׶mϽuWy/뜔ޟ&o(e˹׏'OW{."/)/0~a
UeˍU^~)붬4S/RQKW&u7R.jv}Ky{CKt՟t*.H*s/¾7
JHM'ֿ3g;b PK
    \               com/sun/jna/linux-riscv64/PK
   X7   +  com/sun/jna/linux-riscv64/libjnidispatch.soUT	 3f3fux         y|L?~gĖ4HAj	" BRbzW,bI"VIfKDJwfE[KTUoZLچXw\_<<2w(OɐZC</Ҩ8̇7V4wq/g}fۿNѠ\ɱ]J-*ÿ:`s%^'`_:zr$y?s(%Fb{o7کGsP^s~9!g^#m2&(5H7߄7xs`/:GBks8eһvsi:ҭSaدGjA˾9ǚJ7~r^-׻uu`ntJC7F眢U;vj\|q]3	~J@tk,\$>	@	>pM+WzYp	l}PDኄ+1ZJ+Ep-.k9\
pJ+UpeFDupeõ.\9pm}6#pmIdn+k\b>>PԶb|_ep|_p}U1,ѝדp}
7p4$)ٳ,ශ\ksdm
׎yHud]Int|/MFôߙ=~[;<oj64S폖t=4#Qb~d\򎛊=
v36L.N/II>'=neҽ
Ko@ڽw>lثNN3pG^[mHdt=s=G_9۩[ޤ#no~ߔ6jJY,~65cv_}Hmqyی׆aڮ: в?ݷIO.t{绅xկJjՃ~AjM|uG|ˡ#:\j.=C;o=u!sJAqĢyOZ~]KW.?Ejl1?Q{C_poyuå,SG׌?,BΎ'lNyQlɭڽ{G'tk?xϵ[+򽂤I%=LwhPlO?z	M㯩lYwũi]-IS3|4fʚKѧS3fh?M3Դ?#M˘/m3>ms3|B᳾fp97;6NCᓬj>>_h2W4EOͦ4cהfL}Z4ǛՌdTɚѺifݛս	{~~\`·˛OnF6KE/BvC;2,;9QßhKP|i-EUC"UwFZn~-)-oG|2T9ўM.0)~KZ;/]\xVO&̯=߅8H;UZ~	=)ПH8B>{!"V%4ܴAz'k.'ԓ;#31~J[m2s}hx:Zpa~x'Lt1-cD~p[J.	"
anb.!ĝQ%8.p\q
QZsB'GˈIC>gf/k?{$w
ҿ-~\ńy-qq}h7=VĮT "y| 1S>ny@M_.xl|-BB/7?VJW-蟏G?Ao"ڃ!)=>33q_B1>s8x4+O/o<2xlC [KYyi|t{K8ix$DMe_Myϫ>?y={_b~+$Z/m~y`oe<qSH-8o>aSWUǶAD\Z5gWQQn@޵(e$yxIٞ~"g3?|@}.zÇU?|w-H=a$Dn6y/kyUؿq@>wpR#Oox ȯ ?<{?<-a`]Di<wG&ʝGo8pdvݗ|8uzҊ~>X~<:?0?OS~a~ܽ|me>!FZ7qq8?NDH<򏔬Ƕ 8vq}G3	'FF%F&%G%N4v~|\QPvqxhtl\إU1s$sA))9Gއ,
OdAB"Nblr jARTYtx|&r>'u8B&,a$ƿ$$|APhPx%$%GsDűq1&Ev8a{ R><MϨDEl(>~D% 4yIBThtbP)q%6>Ĥ1 rb@2#|(M`l\lr,sO#%!ɱoGMGҤH6&221*)PF;I+ ]oe"0xWNHH};t
tQ\<DB8
0!cHOOJ~% 	>E.lE$n*Ǉx\1ȩJ4p6l"O]H!4>bn̐^()D8B\ߎq˂ФEqsC)ظE|TtOȹ4A12_ ~kQe5N6%_7O9{iVIQ@D_U!6.%"IbLZYB.QNWah
?a?o<i<i44_ХQ'G7[O?ɿjǿjnſjNCKd|Vhod\l"m"Qt4h֬e
Oti&j\FK(?%ĤKGKKKK'ӓpz_9=o9}Lvs%B5DGV5ߑ\TEƿ3><d/Z"-9~^_2A6%1>aDЬ	ISt,n󆐍1k紣fЭL0vN;/i#B&N{QWD֮:26)yEq99LJɰ4ظ`)jC$Qp=!rT{nsmyie?,Qgjr8a#\ٶ p^Gؙ;Et+CE- A %%DbYKa[cFF͏J~AzaDF%4	r;äd$q{h`^<ӂfQ8nG69E
Z(nA8g^  .2Ȝ$x̄,FEJ&'LY(9j1	yd0iIl%X";P_h(6<fQ&&@FOH !Ds[1BXMmC@t!`6|ǆs.N
!Z&~BV$I pߴCEbl6l%	eD]/R|of~d?Eq-O$uD,9 Œ΁J&hJ}fޓ
IKFīinRN_yyv˼ny!~ Kg`;grYg%zKA	Ma	􋛡O9HV?s$xj~߅􇛡?!#f'NOޗg᭦$x3a8_v'	q7	0%Y=%E}$x~%xS$}gJϑN'H-|O;KZO?ϓ$8>	N_'$8Y	.zQ*)oHI!K9( #$/"&*0%xW=%>/_G|	><0	>9<	<	x_Z	xϓ%!OG|4?,O ~B!~VqU77$Y})>#$$
ĝ$xG6$8zKp>_yJp>Hp>Ip>L|)&|""NVU8o*A"<A"|A
>^+E.~L.~\wsDVlw%[RV"|o-sDx'pE?,ۊ"?+ۋ"UWp7~Cwu"E~_wk;`Y;D"»n")u"G~"/EKEx#p _Ex_"t_Dxy"|%}"KCDa-O"&/"J7DD}>Z_ߟYt2f1/.UF_@q/c&(Zs[KY%rV^R
KYzI9k^R+%rI'FK%QzI9k^RKY#$rpI5LR/)gH%嬡zI9[R/)g
KY^zI9k^R$J%,OI5@R/)gKY$rO21fMk6c'
cZ1Bi)&%9"cCoP`4ccW6J }Q_3V2su	7Ő,ֺ SlGQda:[7BN> 3CTK*0H(`Negwc%7̝OLt:y2ߖ-VQdtn.%ȓFn
OKp[{ciu3nͺaֵN/-VeW'w\y0S^)#	4KJ=BNt24+fP!fY |@Fho2i֬er {X#WJx\*ސdҫsmڣn
Enذ Q!kiN+_i5B!z9:v zU#z9vQi+bi-Tbi=Oi+UWfHA[y!H}mSTGZ,mM֠?iY@E	j_<*TB+1g??oQP\A4ZqmNEL*gπXKJWrᝮ+"hH<CyW+T8[RjWNb-1T$q'%Umlxz{sju_ܠ8iVz`{yBݟQ?[7L8kqleʇV.푹'Y}df輮=Lxd dWID߅Ct
clʑ%N1`e)̦Yr?g[3CV/1sH]*4dsILjxض
5aثKn[*_vu0Niui=f 
z
u)~ɼqy-0>HZT^ֺ6)C~?<njĶAߓ)BmEk:%$2n$Z.,Ȱ֭HVcA;3F<r[l0P1K1\^$q,͢<Q`|Y=y2fllykӪo$6	>ϷIA|	UdNEIH(BO`휗:"˖
1RV1z|~6t$\wD)J-::u=<mP4tlym<ݤqR>rѤJž:[,VR zHsd`~5%NsP1<T{b72wk\fޗ1(
kM_SUhXz0-:^آ [t;{zrغM;c~Ȩ$zPZR[Y/S[}Jla>\Ҡv)FTF-ӧ̢"v|/ 3un[SW`9gsP44q9
TkU~P/Q%]gx{}:ucȭi7f\Ka:,YALFI* >@qAvL#3bGFifwcjn/G6h8&P$ڮ&'oK?w`|I7l`¯F6r-}?;(䖺'&g>tQfI>sQe(";=mSS:q3'B
A26uFmCQ
ў:iIyG
x 2VDYjFmPptl7شq:2ل2Ɉ/?ha>tDnѴ2#rxDIcfl;,6S>RU>P}%SsВ;VrIuۍO=j?f1KZOƜ?#3o;wZ"s>atUرG_}{kǭWѷf06l$,G߀2*]du>:u:nc]q:_g1`
eAW}3Pf+eZoUǲϳՌ_S7 iAXTfmנ{UxRdac@qi)N5vv}W[HN1$6}֪Ɛb773!
۬U1\$I:By;d30/lsl}$EI5Sƙ+܍_<EfH\w#5RR-{cᶺ[)nS7\;W5a&Jqu/uߣ3o)
uSÔ;$j#f0$ANސ9!`0!枊w0Mkv||ƘofaoR92|e@r;5$;ѿ@Ԏk;X!'k"ccs."멻Of"&ࣷrQr[U' ]׭a.wkwrƘr2ހ<ˆ*
ͦisF.
NhVbY+aO_9fwhןKe7U\c34_i/޾\ r5&Hu+gVNUdԡkuk$t2/尶}H6F6xZ5-Ɖ̾0W	1dwb0sd[ۧA:7gRܖ# ֩`fjrOr;ϡ7=˿kQ\EfXӶXX:+R\Y x-;jݫ;ܛZ#G	^bmG }Bbj}90=Hz5DۓY4;p;ۺ?ZS1#ԯUDVaշ]9E	<Ea jV-Z}'E'0K#llqdAK3'3LsFV_}9T`iU[d@%}Uؐ*'"
y	i79B6Wo+_=+\P^B^(A|5_P8[[)e9e<F<^QEYWKzC!J.0A^{D\mpP./wQUFaIrQx*sN'/^v_B{	e>'_`k{7n.xsSYǻ
֫\io5*0<TUK.0k*kW`S{
#4pZ@	Vmþ̦('l:	rk{v%'L,M~;y
?yOqSi];W~Pm9QhLt2rqa/9(0h9ZxΘDf%ё Y0= %Ãx<"O<N2
Q h;o$ӌȹi=C29e(!dkfv9\3+ޙC{W0
oGL;L
aLIRw55ɼ(du̺r*q"qX1ZUyYQf|zݖcCk!Z3x҈	ζ~},ݧř؀{L$ۂH>ʲ${oH$+§l-;S
4/0rSb=x?y/'y]n8w<saUKoXyNTIO:uc&|NOZx
v80ۥ+u^m(|_ӹ+t>_ttu^Gm~m?y(+9.
9<Gvfc\\0,͇͘4eWlv\Iv}:츊Qئ 3u;55Y'vA]O2ÍwZ[Ymbk1EFBn_,ڨlV2_^1C:BVd3`\f[:hk;ù]1p;1w]GZs8U:@;jK1;6KM]VD1Ύf>_Oޠ,di<A&GMm
>=ma9RZb:URK{(+tt
Y9oXn(74Lq{t]UpT>8~y	/Z|<		7fa瞌JKC֍u>}P5LC:'svŲ	`wj4($<SOYr歍Y{kdO^#Sd|
::,qv߇]S۰{)ǜ{ɰǜ{pY~x$$ԉ
_Do+W#SaLMKFSZ\9Ws.¾`߷`en%Y'YCKMՊg_(ګ?Y:UO̾&?Jo/͹pՙh3f3.N/ˊ42}eT{,l og9vt3mLQO {N7,JU[1jP&`VAV'4%ﳕeܹ=rB
$gjc8<JbR绾xj:*nTB|'1^V^ޛ3,O2f;AMkݫN!z_%zGZp@,ksagLspg\5`3Udg\NwmҸ1DGjGхpg\59wU{-y=R~wDYuS"Xݡ~1w&ojZ
6jB<w3kU;>&#W~X&5ݾ=YiFWҎKkMz勍c4[գ6iy'Qyn^:[2N-]ZHqEr붤SXCllC14
?mLzyF:vqrvK4 FK>ZڕJzPTM-JzA!:e6d1b!^:rsTo~r -+,9n?d|iRݬu{&BKʄm#ع=40Be=뫫TY{P[s.Wa/ὦ*&2u߹.ꕵ͵ڄq
35,cYVY-"Apg隶
wQ0s+|.3̠
3]*
.7ft%2`̗ԃar'n4~c+tQyqso[k|]hTl6Կ%x,jool9B,Pgڿ)jvz^6e'魝1Y:&ҟ5慢}R_9t̓u>t^<|:V>Vpԏ:d nA>#~EH-`T;Qgx<	Gܰ>'aWKjtɦ::fOr4t9>  ?0Ǐ9xOΖ0whOCi$YRv3Kʑr O:"yh8̿6.o7&<yX[ٍe8z
wJ<H
(&,EޙDb[9F"[jя̳H2@>
$wd>e|6!)M/҇_ty$v.!ugHn~!>"=K"L\KACP59mc6&WS&gci)L\/6Yvpr3D"l|FG>Uf>9j%h!d;ydxgLt8I?/&=g
1Ͻo6n<̕2rz`߽iyo<pzT/Xs?isӞUｕ04SSfwrʢr')H! NM=#||TOh&|+pq˺O%Re-_\ŜůbV1gV1n
~?b:r
:qǒ7dʴGFǵ@|),ZZeOC,KOMK;t=Ɠ+Pܤ
^'KSfcKƓy/^\-xE%rq Y%;>COٯ?ӏ-#.g>Nz9DNLx^{?g	
mIR(5!ߙ5h͠Lb	݀zw
I3 d of֕E;?ھ5,ӹ?D<DB#	AecAFQ3dZ.mC>$9
Onn'j
}`|ɶ
C@_iPbi`kw5YH:Q<firk+:1|NOy- t>H5H)\Ř͹I
cXU?[SY)B,(Ka.eutM!˴j+b  eVƏlf]{u~fg}b4d=4b^3 Fo/eeLX0
U##5E+m[Sf[z0¨9캋>7V:F?p@}
*aV}ye.~dŁͷij;,KZAWf2nѣ>ml[A(6cg/St%]	4//\aX6QiVdGܰrPFr_Ca;"߀Ů}wvk]Ħ.3&Wk!}8a[UK!5Y\UZG'+k2*xo)#Oeܬy, 3gnXܙANc^ ,%;q
a-YkՊ]UwUM%W7k2m\Z7#"؄;F4v,bgxV[y2.3cNH#vϷzV\cKV_v&s8Hy(*Մj6螿q}[oƭXF&sQv%YY5VoUSxUzoS(vϷ( *C	|\b}zUg}&tR&	mZ۫hyߗބ٧aMsnnBf߾	7[-Xj:RrRG
%$7W,%#(KI$VbªZ<JAAk7R
WZakҫq-\V4ڳq-Yb/+~KR67^IruciONݕ pzo:䏕B^$[_keק)\Mbt1b0k^U9v(ɠoiY|B a?LYyz:cp:H`s#K/N)Fb(4o|vT	r: sU!)`U(`.6H:|,`]TátdĿT|5sJYp)?3sC>Oi(egŔZ֏eTk5L̖PҚoY$2
_Ϲ~)ۢQ3X's΃tSN*QNl:k=|?=$eOe ~Y>KC{"|"SaM{&{E?,5X1\:A1B6A?"uW6^)ҏL
$Am2d}1W=RK-Yr2qGf8c|1Qu!w^.+WLV5d~Nט,ߓ}Jã¾ոo8w|j|_tWUiq\랦p(O8Nތww
H<W&W㦘dҫ~-z!^$?~tV$ô%{JQaηB)cTϗK7Ed5b
oNY$_Y%gin;5{M,Y9Y.Y%Z,zU&,zE_0OKwpv穇/B#uMŗ*A;ow2M4>cV]0~kn]0SΖ=2!~:Vyo"}t@كfy~n=G.okqRgyLPGx'1p<-y\88cRhdAyNOOy\pX[ο3
	tϺUxfM#vWjcP\4CI%wzt(bdꋷWW2/Ld)jgkaOZ
q.픏YP',uH+ky^k.һ`ﺑկY6pۍ-U#)/́fnH)?[4%WeӇȫ糼*^[lFC4ggʵZsgL}h_>JCxF4?	f< 9M>~ ИtrbRd#_E>Ð#W^r76uRoA~T`oc;iC&K C|FLU_ylhIXeO&K ڲ 1	>)o3ߣ)_mǐYw%l^wAUJ$K
ޅ{=RcA p]E@,|#ancb݂|]AݜGѻRL,׸E>{{|#FG:݁XO(*w
'򶐻{a6"NhLpkAStG*lz$&wɭ9M)ʯ *aq 
[{C]}}M!f&_oA㗦@(HzSq1R?O/`]G%mxDbǚZ^avR?X)_Ck~$HO5G%.[ދy~ 0^mZ#Kݻ[V&gFZsoH[=65odmZ<y8BI%]״;m+ͼ;^]c9Z`퀆z"uڀPһik+@}OVCk7nEwt֣B뛷hd3}4.aC}W^&v75Z[^)Xۭ!PlmכK>ǯ;5η~.U8|_Ͼw
Fy)ϙ
-CXsF·cq'3kq|ϖL^h1r;"(ʧI=ГX"gF{3L/hjsy\^;V(Hcc:?Z#H?MBDГ=w9[5zc!_eww~pJs06TĎ|LwO0}(WC[.~]|weVbkcɌULB+]Bb[#X۵Amvns/gуQ^dF|w|WB&!UaKp.Y|9E3}c[kA5$3N6mGUO3ykRk+pClt-#g\eajOf$__.}`_F!}I^寋bk'?{&Su#W!SO%YpGEo0d"ߞ6p#n<DwLdk4h՞ABUy[WxUz}7l]uփK{qĻ-3e1eQmGuJ?
\x&Wݴ/g7A'
-

8bǇ2:b{}#Hoq
B]]M]ǝ(=f_hzxy_ex\0x
^G?\|aj_w`U3ޕQeA"uF(at9}LrcV#- z*̗W`Da<C?뎯@г1i={h1!v:;w,20Dz(8ޚE\"HBZ{vW0Q)  V+ǉ#1_>χ|0mA{>4ϣ>Ԡ_Býk
}csF\	>]Jx%|[&R_|շ!89_D9SfO=q֭B<m_=}*yYc,\F}y_"/&{?p돷E~W|NBcY_X'R_}}sg{Lο+y_Tbo&/.kÜ|ccB}u="7W쫠y_xʻjťg`!xشTT諼
twW
;_
D]ǫMtE^h{fl/~%$9W>4Ν>
s!y~طyD /2Ԓg`m3<?>C絝bhO0A-XqP=vVrdUh??+/B{oWty/~g%1Nè_)EpPqC+\O_~9yvNE(~<]!g
< Z<eb_FRM QZuonrEK۫8EdoYT[iq޲(޲ce[RF"X֯{;H֨KőQ
W%4>^	Q#M_jm=z|ghÜQo7y\>9 ̟*l,V<g(=&*?{|K%ɏ?J-zAܛAw!㿏"ob<0zп)*]FO~w0_~()wpлAi7_)m=^8?Ozb?xQ?]3Q짠Sf!_n&~@:'z=hg=.3=yt{f%kF0gbQy5L3NA{8O47vF%VL>8Ӿ&!Q_S_%gv88b[MmvУ8hFG:lGĎSeo뎯x[my`뀆sw[wzLEmPÈHu54g6ՐO3@Ӷ^/!m^ZYں`kxmp{'pnjVaΟ|y_KӾ蹃p|Qy_Ax?$BPLV6_\C_s[h7~kqހ{ߪlP۶x3]Y?S|~zGIOtԴc:bwt!~&gvd~+ܯULk;*iT{LV$2w1.r
i7wjrvP»ۗBof5|۩
?4Ux rG$s##;	尓n8Z;jԌu+V</Ľ
柸GWh.0}zyk>➬GYg/-
Vmjn{gBOWz0?0Nᮧ(PG&wٞ/'	^Opތ!+ݽYjn.w}
V5'7}m
t8t}}C's C2zSv~ toTY:c	JռeܷM!a(%Rww ˨择mT]PxVSۨ=9*>Tf(G۟maױ6*RqD*TԅU86^M}_EvNF1IEx=FU3yyS=mT3m=~?mI4QEP"{-n/A5S
gphF^Z-`o*FFė`Gٔ,c`[rBQ|&!/ۚQ,2fD)Έ|&!\LMl\>[h)  ?co:Ad
GMrq̍Df՜D!"HϩT!vAM? <؋Z'
X	D1z4PZnjN3Nff<,xwwWDjOO };F/O0$n'3/gO(kU<52ږ9YF#~':lWѶ-lZ沲	َ{Yu5٪6˿]Z4/rYø;\uܰ;>Y;a-YCI0WmQ`>vxD4}m]	Ԛ;۬sC{	3K/;cnX6߅~a:Nl˵q	f{O~GmL9C~_!F~7pnsU<HGC&үs E_o<ro!*~C>X>/qHoM<ܳ
Tszҧr2OKO3f]	NDq]R7g|(^oW-ǔ~GoXnHO|!b>Ǉ";nGE})>ol<H?p.s~[H3sw!~' c9?"8	c8
f(# H?=>O_[J~q;EkxͷG\iz'2Ge])f8YK׵#0c*e}Qnp#g3y1_fQe;>f;N;:&'B&sS%;YpE(`}U.^K
\d?M359xIǥ
W0q~Ϳ/)kK_dQ8kޤ5ׇq/}R}Gq*cWG!Oeж&DWxuiwR]ֵm.dkJdUƀ82Pɉ{PS\`pn| kb{92[}xk{y{]U7dXW8ȧAm塐t;dV	ڀ3Uk12TgBg-#bBU,x!+w;>O#{V%RE>|8jou{Q峆{3Yh~_#)\a~8{LnsyŊC1>F\款E2NB=#ߩP+ǸIvF?¸{'?/ʘn4_I[L%O&]T>7z"|le$2ު۪B^ʇ9o7S_!wu[	~eoDVVAbV/%2!h[tv?YV&.0$TZl|3Z9*t %!CM	2٦vP
ֱ@ۊԈ|I,жTA] ku|m[ mT^v:B{	XY$gԌfX- So=8<W<ԗ륾v[<8t?TH筥v9.rUo;Bl%}9l$56${dhgc_.,KJlKv6*kK/?/Ea@?nv62EKH8glK#	R#$"O:%϶FO.Z		"=9ZH$V9$fKT.ѓ?;=j^	6ZGA !/1zĚqblw~|Mqel$%xlA\4`g //g[9psnNr?q?OGNQڿ;xϯ~~F}**Gg|	6*q|ᥦOqd?z^rl~6/QqϽ<2FUSǱӧߣ?mTC8VZQMDlQ/?6W_E}~(x%sT=_"Hx%QG^+NLU3ROxSGxScԋDrT"Fp'	ZRp7}5q'%1h0ij.^orT2yYb*߽QskG@^5yɁt1UHK	p6*Q/U~xL"D+xX=^TE~,"GE; /1_: Fq"uE	/_1U`g^Bˇ"WGxyLn"u@ h;^Lr$J^}ŹF%^ܥno
<6b-[QAFygpZf2^WWqi#:?z^/sAˏqԒoā>S&*p!cu[`Zt<>`:i֔cU
ngۭܫ%-Iwc~$w7&PKy6R-(4黚ēH_D~?,mnT~^Fkk?~q:bML9FϏwc]~G")ۡxfc[vI#3%mOV;%ʭ)k`Eo?>Dߩ~.A+J0~Z[#Vc9sa,GL5|)kmkMK]? b-]͖X{,/ڙ6o[+n~ۇrw85nrM_\I|w,Jҽ1uk6zɂ"}XkZ	.0q/7b
.zn
L,ja'Ls\=̽~$;$곕ZL[Yfɮ 쪘;Tu~=KGE%>e#c$&dM>F-';_ZNJSdk
8~Y
ު~)a0Őt8	m'9/4R)pqԠ>bKJ_zoyo@iܘ_#T_aUL~/,~;Ӑ?¸h["L_.5$Oz*$-䗿"
cJfݧ34L6uYjvY6
v|.MU2ۮW:@~8+]֔Ȯ|r cJkKau4&8]
sqZVFU*J84N-##eJ
#Ŀ(͓_6@/__~}w]#G|׽B/1
C$*rGYgCi_HHB1Bfd<ɮq)/9)Xub"6{<VeGUPc*]QE$[Jr yKVD%.."*lyKQwRԷפ즮	\DiϜ.fi?sgygyfΜ9&N ,[DH|{gZF]);?	/O垛nكOQW_!rf)>hy{-f6F$5L,0)~(PiDnrKW{H(VVE];LCrg7w%|n*Z\T(,aIL{Jpc_,vӆNɛD˞Vh+
0"Z&V{+]0?7UIchYSj~@n7V*}J>-}Ea2J
8ULW.awlg\67[mΪ>g1%T>p
y^4g9Uisy"0D3 :[0@Ro}Ɍ|*缁z:{0yu-$3=~g{yОyp'r{
w{C;ڛ'YfZ_4yЯ?o	>iꦁK]vu<[yaN&|!_ɤ_nƊJH}S_ɍW26Իk_QBE2+b$lz-'WچPgv wt	\R!Ua^ޜsHK{d.:V\i?sQ5?
gXz$ᰋ_%H2B+؝O
]e\uQ~akM	r)CǳgBu|U
e	G-4B{ÞhYI,,wUOH>q#m:"aZJX!a;xga}ްpW(1/SV%tc>՛bLa*'Tڻ*/v
I?:R0//׃qOSo$`^%0zbXƆyE?½=c٭edbtQb
y[cLGs1g?ĭa	ތb}-r|Cm㴦@aD#6z]H}ߵ^W;zf1%1tGMN-bOHca떄نƃӣ$>7b	f&UQɉT8	ÒmT9Xt/Nwْe޺1%s|nq9|jM]]q2
_cN}µ {o\to~k:>;[eG^hiB
awumQie!YXtܲMiwa`Hl/Ǣ]krYOϮ)V	ܛx;/a㴭ez|?L^7@
!n[29QުzraY>nCI[4F8-S
e5+\ܷLW0ybmvm%Ώ^m$K6/-5#|N!*RVV$/WH[MR\+%QHEg,g5oG
a,=rf͗y">iM(:a~
皗@& dZ;='7y&p۪V#[|s!`E-~&f6dD^?Lg]$&?{C<.S7NzC-=q!8r6N=L=K:.mnr|)ܪ"Z\We(W2Z{JyQ/ېBfuQ
Z{XG+& 6(Vc
KB*/emЌB׮VY#&<ᖆgV	!TU}
gZ!=k.aK*nzNmѲ,2m\i-h(Ɇ
aS;V͘[rP_I?yQ+R#y
)Y3\A-ru|-xly%,Ĳr~rr^!x1PcW7
%VmydfğyuRzr8͓}A/^}aFb_jto_}e뙚ӳ
+IaeK׳b:CvlN4Km O(T󂾡=wˡQ1vT邋Sq!pW~S|
>{{]1ېr!_\|e.=iM2`o.]_"א1f}7HL^[i;5R8QQFV#X19dU_Jt{x(rv$)'j>wlpɧBWzP{K=s>?zĩ6m םs=<b%WO"pD j`;&Y~`L/{dυ_Fs,q򷂧ݦ[K=	Ȯګ1(xWwRĬQIoy@׿W(Mݶoݱ<qhb.;If-/.gZǰ922hL~"P_ֳţ12uo[ߪ N^(_CfUbz:[h=<GEjc97r1eNzH˺Lvcg9cУzFN Xç;chH!iSq
6kpUِVWNj >Xp;; 3=Z`?Ghd*;y&:AxXVh{!cRU=t_!tx1'=3ad("fgXwSrB*Ub^\纚;v	CWᯛ0
@z{G5.Vs4|ڲ]hJ5.n4jA-[^FfZU=T)wgcusudELycS:[e\Tp{nRX,fX}8H(.
IpϷW9|ғ5w|": ٦SI{=AJ| w?U&_z\ل"v[[\zʌ'PuhլǸeƹt?<9fV18ݿ\bmfq):a'+wG=Vl/ it,z6l'tlKjŽƣTb}hviA^&mPVDsX^5w->1w`=*N׋͗3Yt,^µjء۱V҄Ű>f{BWҙSɝkn=0`;Zfa!|Pd-
3+Q'ʯ4 M#>Œ[.9K9pMѧ57I8oO7o|T^QnlC_bpzδnhu=u}˥\ݩuKͺ|{GVAʐJ;q˹LulrƌC7Lޛ7v]l{F<ϋcb!L6$op<3I;>/F8Nȋ>DOE}4+rmk^.''$kǰ oG~(u3Nü)*f*aEO7oǅ˥ʝ>{=%ֵ Q~C.TbWٹ5NsMzmbTK'+˙2@In=muW\y9W|C}9kܪsQiyM-8㵞{I(˱{0à5O4iYk17^x(
ק}HT:jm5NgND=ʓ/U];P*FbZUDj:8dw8>-$틹
;!/|=vΈ⻡8|wp^O|7i\	Vn1k*t߇w564NYv=5
e蘼_UcM)x/$tLǪi;\sTteE	
+sls эn#_p׿."|svL5ܳǠ>:KY]zZo:MYf0&j]5
x5t+%8~<$Xy9[Kؠ+3 81SW%J_1RzE㓿~OIƀx}R'\d2+ K&:|>؈bD~"x62
b?
W8xV{^f?:J[kIP.KQ,][R47/Fexjɶ|{q9<{
~n7bQyuh1:oa˖6\Xa-U=gv2}iVv&WGK,~_;g+b=st=ȯ6b3?x6ۃLun!_BUZpm7\cŐ#ʏJF&MnJsB~"Uf9-r(ֳ$Bl^L(" 4}\CBoU!`~Yoɡ3s	X97vnqufK
26/7^2.\Пy;tm/
CⳂ[7LZna6S:K#eX)˦0?:+(u1$$g.ОߊbvQ]{upρe\t<ϸp\ZUXz^s.3r6PjH;\CB(fuڃZ
Ftr0c5MQlڧ"12+u0CL9?O.~&E3^Hxf8ҞB1H='!qVz;ݐR܌fh6z53Jy9(ǙIH)ϼ'0Jyq?NVQm\v4$am	g6Ȏ	7'3'a˶d:&ae)o=wUzgX{N4\AWbKfݚiͰ5VÖ?)1 R|^ ^$#7y>:^%ų_㧛^ӎs0L,[MRQëB^5k~噵׷<)f-V=}y*a_Zn>-aEa+׾r߃zapIܟ^dnնO'Wmw[ibeil<g|*wrº_F=uf~W	.lz
rCF/Q=Jv(wމQn
V&|PMW[@e\!OA8ÓWMB|vg⡌r	~ׇ3`ytJ~9ˋc^=:iCo>baI_?+8ug{sn̿~%w O@Zʌ&Iix
[`di6EpduJ-6ݲrNX!ClX4lG=V4k)Ne>JWİ/b)3Pέ|L9xzhd3d"aQ@R7AhITqzMz>t4'ye߭eՕ7=M0])7\Ayc1ì:2):hc$f@^Xz^l*<`A9)F̬20WW>Fi-iAk60PKWg4EhŚ@43E+${="rHzZGݯgU$)nyf*
nsޣIJ ?Ϧֺu
z˵ʽ"AFw
	mm)_x}7.FmNS~8,iw^z?UKsZxT-Rvʼ+>Q!QC5
%2.2Z%ge5q{@'y!&WJ.:R@ZY0矃$(W!oHNVJc-9lW]o]i2ly.ƃKm	ؼ`	U"ɪlZ2Ր⻖V55\W$d}kgY̕
tk\	7VA	:X(A.9kM/d@	7~Jȶ.~m0<qkD7mik̷sFM2O%ȻցkƠpe+t ԌeIzꒋb	++է&.>Qh1JTCk\JyBu*6@,CĶW=N,-n̟ǮE$XSQX.9j@/eO^E_?\^X/`f|yKM܎y5#,XrO2;nߊAal|%0'&[1oZg+$R&\i;$0sR`B޵f̱wP	B U`ϑqghraQ,A`WU)([mIv:Sˑ^ϰ1-`T*Ø},8֜+iZr.,K;Jk[|R%3XjN{ܽ	~',On+7TqPOfYߕ|*-^]V[;}eIR}GB&A`Y~;$[XNYʒ]B5ۑ)v%[W*+\~뼽_(}
ܼ(fPBPHN|GKTS6%?4 m~j_pCbKl,+6`kn@omjn/37+@ֺhE t`
Xa6U)sqk}Ho_>5$/WK,lä;d`}:`dWPNZvBQ{Ēm4X2b]8ZjZ{~C8<kuT>v;dҋPIOeHvoڡ	Rz@/'İENgobV"r|ނǋ52zz,!Ƌx?P%[+ISaVhyvX=op
`5XӺm)ٞoفs!뤑Ʒr>ү,`m|j&ʵAHP0}1{Kf\EBl=NVn)?~kMҼBM\,0k*T{I=){!^х0(PhuF}(ycxLR΅Xr;U}^|.ͽot篾ܞ4VHU=O:qfV3vmO/<w=P쓛}؏tq%'
#tC>sFݳ,B{GBrV'0n_Euˁ26֗ٺOB8&yG2
goմβϜGza:r;b<sƛ0ט#)SkAqo!_R?k
q]~ѧզۖUʛwM^^h?u=r䙇Xtc"4{Rgڹ91DI?yYu	16tOe=FW4x|:i?RnubTn-^ˋY2$<BKi	٩uyݕnbWŲ;dK&Y5zL+jT7*+wT!o4D2Ey_"j]gW^d#$ic`
ggDs
ï.}S8kUrVI,EO*81ݪ.c2T9qh6?VVI7󿰾#	11=rߋPўGGF|3GqMpە?rnfTri90ߖ/{tģt1!w7I3U(dq$ZiهM5{#"e$bF⒧KnF?:ѩK3eigs9yك
>cc.b
,wڠ	;u0.3Rof5{^7˵ChUL@mh	BMr$(IKNҬ0`G4,'e?âB
.2$ئERoVRG^-fxte5Oj	kM^z?<@R(,W~ ".֡_7#S[
B:8<k/D
dăό7*K;+K w^.ף5Z~~-.AkGÕgZrp-׊<?
ΚeA@9c/7-7Pqw1K94N'X(7h,+5>/n­jm1_6In%s_`{ߝ]!
yA`,fSom֋BJ^7?vx%%U|O7@XľSE`]Vi!hh[%j䌵U8P@6'}|z֙`٭C\Xp\P.Wx{4a5/,@RzZo+*2SĀRY˵ܶ%Y-N5{%YtwR!{(ĸpTSEaV}U$-/3[~ga	Ls~K:8bYpf2HWŮP2CRI%iX(G7z'<HЂ@cIfNKBuú^\Ȱ3R%N0)V7X=	B50~j۳igl}6+u,@׺$KKbطMjÀ/Ę#v~KpmF~k3ΚID߮9v/
%->zHcp6_ֻ{t|e9ek<sQČU$K|)~߇)dP^mЋP!O[]ڏ=kGaWuH9
V6xH2x~v>%<KrC$ʞ^$><
9x*I<LWX%}Ϊkfݥl=T 3SmsH?\z[Xo0l1tQ4!Si:a1HtX_)r}(wlS)}KT0ɤ5\˽%QgKanZp$f`)]FDV%~ZĊ
,jF9n=ARl꾖WmbYzt h⍫ҷ^$h^L}C}gIuwZA,`oF;WA'F!YvjYw[r!,`y(%騵܌V$)ԂACLef`g	(
[&O҄<%Ձ.!&DDtuzV_)$*Msy-	-;<A+>ۡ_p׶
ڍ+K{\ws5]X pZ<
y_Z'Ŕ-&(2I[½[($ь\{U	HWXc}QaκZ:9L{&7gc\q8u5iVX-n[뿹`mzs	%FXj+$_C
nnqnC-/Ue)Aԡ^wƄ];wF|w :U6hRC}k@Ogz伩)	O4X~9*>gz\o&'uU9S߅r/2qdI8Zn5u59W;!B58diW`-(o=w*Ys?+f( -Zt]w@`<zpy>A?oPI2^02<tdqXx1@s@^^2o5W4m(pJ{tnZ
~
a"{I Lj֑qZGo.2XM`65mE
X
uDV`U9c)lX2R<u :\b2JO`3[Ϯhg.G[{
;4 uuhk<5#P~RL.uxE2]#Qkj֚Zgj\cBj4U/+dǒ0p+i[#0I;]
Yׅbrzp"k?cjqZ
O)iqU'TbUb9pA>y|N4j~0ܲ>,]j+f=bOVM$2U\|
y?:&	dz׳B8ߵ?ߘ&ǰmEF;GK^֊>(^-h<
'K7oF[jV?*iCK]iaϽmJ@+
z^;X2w4XiJ~<lw`و:l)F0`?N{?gZ!9vI4^:-A`[ƭ
6U";`xfoxfz_<;V^_r{m#U_=܊THzIX(Alr.WJa}
<U/]Uc8Sv:EmRIuAﶓ;#\U)iCi;b8ڵ;KNr<ܚ:+j.غײp_@/GkwLnz%mY`I3?󏔾BdR
ީ|w^P8ht
k4l*hkrAQF)RXؤ;$q]pϻJ',{ۀ|d}[R14tO}߱,]3ם{sA@ΰ3\-^t`vZ!=O<$?e]yLI;)gj&qձdK2ָ)֍Uoh|2Lw\nt6Tbt
XtsaWԡ*hD7X	Ghu>qJ_.U	%tJ8[r0#/F
Pҙ
%^NcUh	RU\h$!	c
&B8ۦ޼lktMrCpq4YY[X'bbbh苶D۔smiW	ۄ1[ڴ1{76KCY/K_rrfkMMm04fށJlD(Lߺ	
{G SE+W*mwtU*S)tw`.aniЦ)~$n!cix[-P@F@E-44ٞ_!himZ[=r_lvT*v4'rɋfb~<;?sٷ_h_Gъ
v\lE1lϖFig} RUg^GMlV0DưczG Aǖ6ɅshS[-!K${t-_X{ZNjщ?S|mH.D>#oc<Jx}|Al]hX":XyP7ֻť]:ܗh:M[щ	trΝ]_/TaDnm/`kD,^E7G
*})rz[{녱CڴQm޹jkom;Qm~Q̚#y\+>a/>Uov\ͭu칫_hk{-헷
/9e޽UXgdG㼓MڭgLIRSxTct[fwh%>ky>>0|X#9f2_\KuG\8ZV.n+9v|މ.Vqib)b4pwfNi"^?C`^xn*dm^V}m8C0Lg?_aMs҇]>׆a
GRYր:?pөf7{R9޺cmn:gH<v}ճo_V{w?;{"={Ep	;=*]XYİ5/ErKE60Y8ΝJGwf}[ӆP2
~UG;4֬pZpY'ޙtvd<c߲hp4V#m;*b3e߆rG,([oPX0.͝s<A-
F\X(O]ڶ$.Nݖ[x	87 w-hݯA5Ra*.(V	Ղ~1V6җ0y
E͖zܟhc-:g2Ihmű;omjD\z㻪`cFY|STیtry"sHך'/G{=٪Z)GlilCGQ5UG QBzse&^:31̒r2|{MFeBdAABf4(σBt*:PHbzMPR=%wX|[|2/f5~Cw(KxϘ 6
PKW=|iɛNͤ{ӷ/_:(TG!!?.!0Z%zmW\?fSхͽJ@/׹[+3)4~L@</k4[&0MV- R~N?Ӛ[;xp;<|x[Z}1QG0&	-UنOwgb9i'W&߼
#O/)sSej+Rm -Z
 A,j3G .333?LÃ4Y{ӆkͷ	E6ڒH6j-c(dg螈.Zoz0@haV)(yDMe* '!3HO(
#%D&jT0A TMz29)fǟ$qX!834pDqSC|&҇gU<tUvBOL*'[3{O&ӇMdd}SՙrZN&'M\l'aUj$esUj6HfU}UsUjV
	DZ
O蓮ITsR&UIPUÔd/}3!	W-TIU'%MXdbRSi|T,#A@QJS!𛕞f5)}N󙛓f/ZrhV_ dj/Tgh}FDGGGƇGĎD.ǂU9i*yt6]:)%=PWqOߙubqF5$RR#&Y*VM
W63]zIlu׈N)\#;JVgOd3;r岠G-^Rz`W?	
[LSh|TzghjbɄ3
˕Puk$
ǈ[*CI 0rS$d.|22SR8Jb}WefzNF37[w@,a\iWW`*i5ᓥɠkhK>CI>f~jdUV6׻TCU8&Np<Lp	_TЭr!
4xLw6SvvRRԉSP[֡] 	&+
WYX'm6UN
uuD8c>M: 4*ZGP\`T4&6('jДeR	;ސjĔMڕ^T6{&чȧIvl"
`؜[䟢 =B)އ/}©3 7<JwIJ+vNGzL:ߗ\4uf:W=<)+vQߏk}(o}Hv>rF|r&p<#ĂA8Ң8묧q%QDՋbxZu+_'er53R8A)7'3%[E85"AplF/(vلC"C_ю,{"u;ۙ3oH8N|r螮$[}ˮ4ēgPAu/tcV0?9,r:dyp\G-vF-ݟ/gԿTq..h4Ydjr28h j,B|qQs任)ˈnjW{{5.IVgrN՟ڹ>ܼό+.4ApFd_uٝ.1njlTj?;jg=ϯ<f!fj)5!@gIwgv:'鶔XLa|擖e_BX,}JS\\&{tjLUy  Z=:z"Cp9̌QgCOFíd`xn1hLObjΛb].2pޓ#=Uj'HUeCLI.ѥ,nþE=bD 6ϟ8.`oG,&ƎGS*8&ӐtW+)<=E3)8[a_r'Sev<#sO֤'wEh:߳'
xFVwG$NINv.3Lw18Q8ǠSsh|OAW	c34YܲH%3}05"tv&ٓ;ԗGtNLQ^T]c"ѱ^41/Z,M:ٹ|N4{AŘ .NpHo! ;J&$SvSD (k5[TvZD%%es:;u'lN誔p\{T8r2.̸p+WpWy9$`M4$w^v{Tgvyس1Nv;eޅ]]eޅ]]eޅ]][Rb~O\ٞSS28ݎ>.vwswswüM+5oAMo:Z6;.uS1_g.|		"FAuD0ZTAya,
hMH@D4HXF0I)Ыa2I$L
4iZynHl$zSO]MA`WryҎ|GϳxI8
&D.pFsC38\?ӜaΈgSܣShl
W%\4WilC/^p=W6픶s@z? 8;䏀a6(M&:iS!W\rF|03qu>fWDxgqmX{v	wNr\_;'D9Wb/yl,fW:\>pJC|-)ݵ~cQ{Wl[G+RKso7zh偺^W2+U$sDj֏.V%4񖾋"xˊ[r:t_{jGLixvN6q[\v
r~osbjq曜@^yjiC꬜l'B\p/q:KV&7!'ykEIG$ԉ]bWteh=s?	Ә.0#Yk>8o
Kg;O
Uς2YtYI?׭9O
T}_0I]V$wSN8Fء
tTwړh:Oڑĭvɇ}
JTj＀Ef
ѩ1.ȭ!|⠆/+l7ẼfW6\K<zwmvw{_m-KW-^|p-^uM6E%K3:Żv8o鐶~O<hzp#f.p=t߫{7ЗwЭCI7pq7pp~$I5W,gdj1YԤ1i`?_z[I`_49*MN!)sDoc#~ٙSG 83&;0YxzᘬyMcP\j.vt
p@᪄ \;^38EG@zӰ+WCfp|"GF
5olR!߆O@
5 \f˅p{ o!fŹ
<u};Ё'6[4wNs>7EPtfk0BPIFB8y΅wBBxZb9̈́j{NB!	a6g
Cxvp: zBXz?F
~5tJ Kυ@3 M  F+%yLw7$ȗ8.8q6⿑PDΐ^([ gÙJµhƝfr3y5zxrԷȁ􈣔ֹo"G|YT#{LʙVJ\	IJg#Qj
JnY\߈^	.c2 ~pڀ-w2_T`;wT7,WX$gqNC]88*ym4w X0
)Db3'\8t_OCeG'ҏ:UC?S6\TD0rNTG#Or]tRX/wB{ęq ]P`;jKwa@ی|g"CD8c|.<qS>8Nde5	ht3
_8rGR.֡7 a+g}rc҇1M2"O)8z|ͷ]>.Af9jG[ qe`[H¦kLZ%M$$<&B͐S!?W 5qg`B-s_GE'r.jٹkOd{tε$wqGE:%/8lUlo:#"y h['
Eu|Sd
j+8oS&]
:^_M_8ޡ`.p"(9}:ɀ>tmReFֻa';ni4BA &&$2`4 ';4dG? zFl͎r&G`9ް\pS-ӵ>0G-ʩ;h:@g+23آfțб7q	:޹|_s#ԟ4CFkmW>͵>qyp}i܉tg}޽c=AS`},|^ľvSl<׀&C60:ba٥g;~FD~9w=p,7)(FZFED&Cy̮OPdA.mL8߿߿~;𥾮d]c-!Drq4қqO iSVJ)៮|@!g\BA	

=]ṣ]DI?DC?l>a4F8ߡqlN?8Oݍo~1'57'=;ghѾO<Eǎ$?!Dum.p}|qv.sW>N+\foWww\1!rGu>
>>{eW%Oz$D0'tWaW'*H
ޯc-[G{7pnux@7nw?>'8%>
owN	|sο(H?sy-tK=_CWGQ>h=Ug)7p&SL|)}|ç
JuOpk:t>li]-|HZDH&`+-
6Pxѳ$Å]>nvϡtv~F~)|2^ߎPsﻖGuIW\ q^gH{^RK⼜7Qs&?l?/k[)~n~_s3)KHpwH|ŚAtsXܾܵ^(]BtOk:SӔWovE}v]7p|+RuTJb/>H	$οFyEJ߭
"J]|y
^Ov@˝ޡ\ƭk:G:wg
+$q~(Γ8o>$~M_xt~(H|-]'e8§RC(<8/W(7:p!}_wFwn.\poHth?GgtAf~1VN=(>,'A-Z΅"rgn>SxIx@5IG	{x$"O8K~^DA>/ZZoR:T6RFj'z}A_:O٣rQHNv;S;-̽k(OB
S?-Щ[ΐf
ܽkP_(z7E=	)}:=A%KI|
~yRxm^?B3(=濌0_8L{h
!q~z)Esi{vFѫ5|8s8ߵlO;ot~>t$ze$Px{)	J?(<O]כ؟o;^t<:n,ݵ=
~e7\OzUSt鼏RN:Npn j輏|)E:O/S\3cH{;=ߕ#~~vn
ܣA|C:!frUAͦTyKG-qànk
SB_`L?Sxt	v%^HTy{Mq͇af7I#jx,H|6z>09GᙴLW(u*ţ': =61/ <U
@}vZ{(׼}KQ>t=NC>Ϯ˝B֑8U;W)|RAL*^|
?)~o	lfvVvNRh;sZ΃[u;O[^N%'LUZII)?'eՎɸNc;T
YɱǎzD~Y*)%jr秫{䔬lu&=%nj xxTM:['qUOU5K͝T]:9>NKJ'x H
GX|[B >vD5_S&j3Һ#'J;Hpeeg&dtj2C+;vT%OvN)ƏLdkgF'o%[Ջ&({s9]paiSzv&ȧ=9u:'Z8>!wIAcјRly6>-'[j<~߻JWc

{GU[LM6W'g
h@YjP)lٸtN_}(p*:*LsoC3?P?	D"1P|302mM1XA?x|!%%SS\A%秺hl0dC}cog;G<~< J>ڋ@N#gkSj&3GXj菇"6cA_^ޢC68
sT^nQ| 7ZCSAWɑܙcvϺ
OLğTАk¾DT( E
,ʔ
 !9|&w.UtTQѤ@Iٱwׯ]d|95]}q$Aآk,S~g?8NEO1l-Y4,:|1~ k(8iQy,ٳhǱLd&2<YOӑl:1K>!pri{Wd`jo`,Z0(y"m%M1wm40EvEٗ{ ҫp@2InŪO$B8@XyysG3+1
KP yMHFAtA[hq4n@$Yuf?B+MI0)W]4AeE̎2
GrlT= E,u&6IPYd4=FI۔>3;o Nr2R07M9l(>V̤`fyd~t8Gf1Q?#V`5gFh0(	L_wVĚ&<s1TlMcP7P^%V(B0վcۑ1I݄%1T$>S+S*KR<$ƈ(UWD%ʤukb0㨻gFK(z	GZLuNQWy.4y
4sW㬫_TW2poU]\Lr$
W$G]#S:w,`[󄉎|\CRtw˹:OF]I	@yRaSt6oRAwhn2y>a0<?
N2<{GPv^W{T1=>+Nŧ`|h7TXMp`7;߫4ߟѳf}%v.gp(㍙l޿hFrWF9~點]5b?sUן/ff.m㦙߬ǤcDv޿iqt-~f~qL?k3p{s\7S7Lڕ߷?3J&yܫ|~ݡ=O"']g
?_wC9t؏n;x;:pY
?9.ANX*.=.L1Ϳm1~+߆Qw\sB]]%=|PK
    \               com/sun/jna/sunos-x86/PK
   IXS	  @V '  com/sun/jna/sunos-x86/libjnidispatch.soUT	 5f5fux T+  '  ixTU0|;1Q2NFŐ *(j&҄,0Mt@IY4iziJ4*(*Fv4(jEřQ5v:Y`yIݺgSNc,KE`zy(v{	 "/joVY(cy/9Ƿkyx8n0%=XX'q 3  'CL+]BoD1<A8A8HLg%9{x<Jx?|\.o}VNryZ  # Dr()tcP°T d		Pn/z/r8
"cҴUz\?
sIEϙ#-6GYmLx `	-B-@; s 8!Ln0("d|b!=!MP(a~E,2A XTWx-@7 
  l8`% wF	qP
 7 v=P.( `Aދ.t`KNx9I  2c [ " 8`i0
|ob1 
t
rx`-l8~?	Ю _(|rz8) #9 Px  V {"  K  00Y	l%	C<  MYC|St|`#b- \	 7 dc k" 	ྗA z_@
 wqA }?o@} 2
q@؈ 8&S EX+ O5-
xWe+l4	ݮWΜ3":NS᣻iy72.
34˿r2,x.<j)~ɧޣ>c<56?q+@g_8~1.ѕ? @<CHv5k \aO7@	B*]tuytϷ@ a"l]$9:<B>ɺwAT;L9!LP 
͂PB.80]\ ̇{8AC"n8\BxB(z?fq!<i<U	^* lop&;
aV<ha!E&R!\Ó8Lp::Mu8X{Iʿ\~y
p)m!EfόPN*s%{#wwCP&B^CÀ)A4B~'9\39] IAX
a
AX]÷ Iq#Z<ZKDE%܊`Z@,-?ok ?jß8.q+mߏ? ~cxu##Ml>m n~b9
pe77pM,No@5ң++tx<ɀxM4z`<˼w 
~r\<^WW|i zV8C84࿄#=j= .>T~#$Oܮ+:@@.ǰVc~9&}g/5خjG炶tG{ؠю.p<1Ѯa5h+싘ς
0.2q'Qo`0?BzaPP@]H?^?`c_x*Uv&Ó oA7]Gh>?`Y
~l0`AOB`2jo?գ,<e5 ^n!_c,4nx&i7>NS}>.oHr=
˩[Sy__ O/]B$ As0=^0O??f&pXaISڻF9!+,ڢ귌F[ 9>&Wqf_mǿd!
VZ_r,><_Y	xjEǘ5/^B7mE3p|?do.ԭ`|jOc`=-Bو%4
xgSO{y o {
'鳢--4ct?xS折9,	6C|vO=82Ύx+౭Q΂QGk-²sYl7L|[.b倧spe,7`. ^ݢ{Iv28Ky|Ӎi*g< 8^xF6C#x :y.|/6kWk{gA/DAnO<p1<T\7Θ*i?WjyFHZul.VGi>Mַ͏1>(E8/gք#րoI_rqV[?_x}7~ds<![[hA;sZ>	Zpј+Mwp_
x?T޿ v~?`8LR~XhZ]{ͱ[`14 _+,Exӛ>= 0_aN([3pkV

}!H_6Y<i930{FVpn2~Bp?ǏܮWpjOcR_e#'sR?O5φDku oz>ϴ ^Jԏzkҏu<l#=_ƥN_<
T9!Scm&x9NWѻ';d u/b+z</Kt ?S?xh\E>pg30~F｀!dF%7wX*y0N6/]f&/+tF!<G_ݹVoۏh;i]5]fQ#
5wa?Ϝg,57q[)g{[!pfoF ްQ" ktZI	xj5z>x '`ry}49
t6ч;`-L 5BuxZxc=x5+iٯ/ o565T}6b:UZOZS7}3boZԟ oZӷs['^6טH1^W ^ڋM۰GY()>)p'U*a몺r3 _UyEEXt(*RGAIyJp8
3Jʧ;K*;W(tyZA0xy.|1

wUtU)@UN3'LsggO\sFCAe3nge/.tާW
+]UUB.9O^VP^ȳ8
WG#^pT:<MRғ4D&^B5j
%%ӝ{Q*t9NS(.]>P	YYyD)W2wpi9+*]blbO9c<@t03>et8\#{Wl[Vꬠ
 gi"J@*5)*DY
bu:;H'>eаîIB+ -4}nsoٜ+r\H3f
vt)jExzA3rmgedBzK\w~D(*T7[Q 0HwT1%*WDƎ),prQP?T@ɐ1|NxW,,&*t9eL
ʱ]J.SvA3+=	$L$ߢRG5*xL`kΪy<|6!(Jp2Q+x0p1S\VT4y6,cY@srU\Vz6IK7$6zdff틕"F:[N㘢S^	OYDT\qXwVX'2Mh3DRgUmPlW(i`Qͯ`Lu-+`͠vG<H
eOQQFŴ`Fyx+IROOl
V\aׄ	I-aQ6XAJǤ['	O99h̸
ۢUfhcFN1)'=3zk*g\$6,<%2a-	eB#8@
BP;g;&8eeNT#Scg-2~BihAƔ;8\e^araNeǥ:MFWy+*ނסYY
bQZmB(>:~ew6<SQȨWg'u u;GAS:(FeΒGI`k;R@;#3YIzpcAeGR;q0*pՐt's'[o1Z O}LP}GFNrFCUG\G)hgTqOAOw:
cЧ?Lj^{nΘaٌ\RV{i.QuTs6Huk	Ff:&3)=Ǒ3rTfC4%"mND[J˘Dg;JF"*	pj^)7xhXRFm,4cY૔r~`PUVzn#V }ʆb@pyYjaE)/2_5B)ȴN,B}V3Vc HE֢EQ 
H5ZiNі=Y` vt*B֩nl'X=X26aM;nW'䖕Itīb*YD;agEYt>TW^഼\啴ETfw,#;qoTQagme^g$$DCfp,nYFV)T_}ΚHU{nH"u栰iq'.#h5:#f(>(ycNΑ1YSWN4ۑbZސ9Ve;[L:3{C7~C{{QZ5܌sS4K;mȢ0Љ:7z]!zu9bJ]@NzS5Þ=atzZnv#3㖛GMW\1l])!8NN//Q-uS 3+Ì|zl=cU0۱Gy	|T7IQ^TVSit8HMM!M
:ɻuRCFw>.CSGkBռ*:4йK%N]+P2rNy"";.VV\P1O94^INObήRd5
yT8j-ԉ
 i{1[O_
3?p*8j.|"^ARUyR0)|GJҐ!4\yV2 *apygpA՜P<1$/wCqG9(=_ڞB\"g}'}]?[ƨX)nYxY=
#勁QJ/6;!\^1pcT<Zٽ5KgJ U	vX`}S-s-,ʽ-Y=w^POxMvo{\kawO m xEy<[؝0gla~{vx㝣l>@<dC;'3vW=]@<_vݻ;{ݛ{xvV{JxGX]aa?ؽ?v[`w 
};[n!!3BoA~p<<}`p.;c_@aaw
 ع7.9
%;txE<gض$Qx=~
X❙?YC<GQ8	{vG
}/)9x؝Jή)wmx]<V[{|xou`rY!h_kx> q<Ǩ~v-3;G_x.rVG8/;{xH&</&ϱ^lawI3#yx*wo8>c0X80>a"8a2C9S9Lp9p2S8a!nK8\sXa
9\a-K9pB>qXa
K8尞ep
pzލbCLq{FA!!AqwB{@gx  .106~&6|3BțBgى @:?B 2݇8NڊqB0Ai D!`BBtP^/<":~ӦN	A+A'"|
!aH@F.!t4`!#0!B`szN-oGF!t0,F:B<:RAO悞 ó!U-DjB0͞^x0;B>pB0H߆@F:Jh`!o~!(1hA{X`.@F-!>ap?P/p>@x
B0a 0`tG lvBoBpb!M;Br0!i7C{"CFa'"B"B{ !~~
ixG47@\/Uwa ?\^
]};9؍;
%sMxAqCN 씏˩c !<
a9zaG@'bNB(pu;vQ
1h-T>!OBӁ1(֥5MF6TCs|F2{G<!VkV
ҷׅ
s<vVzB~-Hy^
!/ӡ̻.BB'B1L	:0FS<!Ǒ.G=(4quiz(
gK`_a=u䗀O6108<N_	+'@m&B(F+ _5ǰH0ZmqP2T -:}S=L;*g afc 0Ӿ}B¹' LPaw -A
K@Cx.zBB¬m'!|	#o*PǸ@/?d?BڏX<w04n@!Bm3oj8B!HxB;/
;\_fN_߆q.	FBEr!
. 3 @BY П! AB!;d
0Xxa-#)6vvV٦\e.[AyI	m {K
meۓM(J+9e3z+&x="[)6YvF;Nˆ\<(],*O-/VTձW]Ru-lH-uyle0fLc49
6Y6cp9Y2gC%Y+x]2{Una	^hzM))KKCedTU,p1Cs(ܧJa@{wW\Eɓm kt{#{j[w픬<F=D9aYٹe	JJ5RnY|FYHtBtpl2`čՍN,xtMpCZxV@l6	q**KIL($I@TO8x"	rQM0"gm0Hi<A	ĪNU;dPRUQ0l;d=:z; ʨo	;Nh]o_*B3H=ɂH{G`F3*#V*1QNJݎ0s0(U7r J*+p%9Դ*RfL)z{Sz#NF,;3H]E[YWD(.UOkG:XKއt$ȚY*t.0dÜ:Z(msx3 L*M;_3 k݁d~,Re9xZS-?":[JE':I/~&-aMgeNF3\̂w+NhPv)&BS$5ƔK"ߢdK'废(i<v˜G;Q%tAzTdbN:=ˣ*7*<Yweyݸk5_~\CIPyJS3!*+b.CvRo:T	WM5e"[2f~bJKG2:

+sPUa"_\:*Дi6䭰H'ٗTuR]n)/OTf5^Ç]}UUCC]]pUC^=pC<^Y>UZekN4Tt7#͹/Lڱ[0cC}eJ.PFs
nmd Dt;<轗n#^Oy)el)hC.Qۆfls%.uAKkws3OqWޥQxt\޺:]}!ΪSXAl
𮃍>B+U+'ɮt+<'DҲ[ё@`qؚʔsR}];Bźź4+1z1i2ǎQeOvVV]WKq͋qn*L(bقJox@R
S\+ݰvKػJYApI@)+}}.D*|)9lnIl@Zߢ
X!~ITceJEX_

*S.-bl21Fb)	YJ˅`}stx4D\q 
	)V-gvUt2L="Y7Xp0L+>GGkx(%0}j;wtfwXC5`xlc᫇t}Aw[}h]-74
~5NT/6-#J9\q0&wH@jzy'xzr^R9xsT
"15~;3i^SxMU)][EB)MJN"[I0IhS07{QV\>yk:\Pwt3
]5do^2;5wK\2ﮓFPʩG`J{C5]-p~K3Qn2@8L2ĨцXdG2F0ym8ǌ10yTDa)/(/:H[Vr&`vG	:U;4Cѐc_@dqۑ@ΎtqB	'9$(@[}yIc'uPn?cOp}c(IF>p]c/x'Ku$P$sm:K`d蝹Kc'WNF̝^:.AJa|CBkAG!a{A֐Z$eHg~-&H2(ʀF(&
>9ސ5
 ~8ɎWKᘚT"qLߘG. R~T?I:Gٜf|v	h\,;-`.x9:VSVR?|kR6
e,*L
g.gGuRTREer2'17\U S;][ReDm@y%OnvJ!gCM"zUpʳNn,$pqBBmC7f
U8&
U24p?!;x͍WB	Ǜki(72'o:WQ>Ix}+~qR1{1O8scQzp^Aݫ±(wO8ުso$	Ǣݍ?x+̽'oչ±(^pQn%	ǢApn'	Ǫ܇o G7Dx- |/?ⵄGVj+oG|Nx*ᇨO&0?6Q#O8@\ ob"~qd]M?Ț'Ys\
pdս'oɺuFpn$	GQw!Dq%	D'E Ns&R@Z	GQ'BMo$Ex%_A8= Z='#^M8=
W ܩO#=q;+cn;⩄cӸ'#L'B6±n	_J폸@x=?G_FOڟ'|%?O*jRo'"<<:JWs Y}t7zH(7e[`gN'A\ +~;iwGD[gޏ{А=}bf(MzlVԓ7)Wn=>*J~s ^:
̇o;'|?YW
|bE,/1sv%ۃSn@vVa	WԭPBZ2ᶅ[*`*XHeђodp{r8U#f9j=ZDArH J	[[kkk<ĭ'Q_#4kyq\N9Ka@Ȕ7yt1'ʵ=@ƚfv+3O+3<O7#=o%zl fk0pP5
_
7֚Q
 1}'սr[ec&Յd yPr[yΐNTxHxbzJX1Fj(e9LϐqJ*u|ܧ;?-*?i>,\ۆd)܄j˸&nBWRŝy("/j"Hb5PetO1cDя8)&JqAHiܿR&UåT@gޓ;Gɵ"WED4jX[kЪc=7綈 6##T!׶Ux1xFLxN:
-Jm)R{,an:YYƀ؀74eg?"Ϩc3BQ!Rz"Uإ7~%;Oar[>[y)
FR)~f]d!e%P,[08H/LwHITJ\J+g4ۡ1m,"{Q$
P땽9և_5@K3gZxcQީqE1g6`L .hh kL'oerӰܫ;:EtII^ta,!rxSĉ;xTXġQ!qbz[^=XKM"=&[
q;ro<aoz*
Fۃ/@
GgyM*y; 9L	h|H?C+n	Z61:1B;	{23V;Ă@[&CmF<( )rUO	y8J3xY`SݗHb> HԽ@@~-|h}^T)wJS[\yٲwD-]}!n,*nޟ@tzmiӡ
pB[uܽLJ+UC.蟥{MClE 58g.F~O$7qĭ3OwAɷA?*]s}6f<5[Abf	y-?Mav@iJ3,u[ćkͳ`CàTEIlk1c5ƸJ-fYQ8Ӭ~\5s[(~*	s[=w-Bu80#ۑgDH1`X+$Ffs{"Y-D){Ѥā%~?'pkkP^ 3N1X.md|ѢZV3_˸(~W,bi>C㈼fIX(׻ 2.KYO$5aDB;e6xCTJ\-NpLfn%i@׾`&])͡?~Pn?ZQ؇C0؏;Hh:e`0Ym
%
M&6%fhߵHo=wi3.2ی0ڌw~h3b3XO4Ǳǰ9μ*
drLǵD2w$
Gzx02|Acfwc`4|	u<JlznAkU܍?X弨MTb3VOYCP@f!Y!#Lqmcݞ[Ymh; DFkS{f˗K/
q+1yʠHܫt/lgpe ܒ@ ;eG:u
/~La8P姶0O}wWI8{J"̟	tbTXȶ> ͭ N[dL2P)%T4mHz}i6͘;5Z*@>,v+j"HV/hAnRVNdZL(|{nDgK^.^`VE	k{e\C6o:^Y7_X$e?4xDQ
h*ҜނP%9H	ymLwl폠~&{:1O~df7P7LF	Wp
ʞt<#t^J0AsϷ|ʺj0WAR $#RZbth*/ \ZBi'`
jM=
 )+1k4X+[ .%!*fIК(0n]c0k% 3֦@Q-q0^#Y1D+K4q7q&y:^E*/xaWM*,RH0"k*$TL?$!3?y0Y7?ٿ3"~EDA5bцB:J#VQӨRgjG]+Ӱw[7c6|?DۺYy0V:.U<k?^45=y6xe{ޘGHتOTyϐFؽL_e)~i&݆7BЩ)z!Wm<Qtc<LyPO(y6Fʳ֔?#zS`yٔ?QZtBgUzVshZϊ<Ttby.n%o/4[VFjS!;/rD|9rC67|/3vʡP_Ůs@K҂+~Uow;|猔fmR˧@'+1y2cNjJ17~;cVжc=b3H!n=b Mس(cdx}:x~P]Zf~Clj OiLiVMne,-vO,y_[?ם-?̖"ze|}2'>	xI4»X^6'eF[S DzћhS?%t-7ZBhΥczg#郋K#nAiƢ_}s[kT*""a@bǜRppl_X$~u#R(+j^.<ax%g}B+/	ӧDO\	ƿL+ڇӱЭw\nxggZ7BkWQ9qofoZa
wQB
HRDrl<pۭ0?/垚'w$2
YЧi([0Ss)Ӌ}q#BȚ~H7~aqΰ#8)>b--)D=<oG;Gz[vw+KqӥL>݀/Otܕ)Yyp:+$t i OZ$b}nUZe`܉Ri-=W?~|]IKZE?!	DcXTN' w2|?KHN+9;kl~erg?2"U{HB=W_-Zj|IBHuX^OI˱HDĈ#}Ta>7GE'[kt 04ԶV]aKytV?Ҵ#s%RByM5
j$c/[<gJ$jll3/7׋3u@hH:֚tn	'd~<EZlLpBIdj`% ~$^|aK'K
Nlk[LZL:pvhp+WT~Ip$byD~*e=BzH}5p/.a7y\|bXrY	[r!+򛴹{ nf|-GhyRΎ궱6~%Gϛq۸ѱ
Hw'FWդR2'OUBGXo1zfN\'
HfYUʏd1TUO'TzL[ӱ;,\NHcZ742G"}QzS5m(FQ,#-lh	Q
n
[iUi4B8hb	!чIꑮz]zzֆc7X
NR0Jk`M&NX <2bІ#^|ߙe2M,j9Ex(IH~:fjFҗk(		QZ.;rbg`>*{#uBW#dM&=dC4ࠄsPO=q5!v3`xN2
D+٩٬f,e8"[}h C1C|fxKU*gCM?L5YDu*
LLb°Pd{%8_}sϡ/'O௛Xk
eDnCy`;:3}L<"QuShs	B$d4apMSbP73Q%8	nb:<}k|&TfvJeq2,,_	]v?7
@SY?h㛹:EGF9C.
'OӋG_Raf{_1lR!H-
l@Bv :5y86Iv2EYGYk^%A4ZDzW}Ws@Γ׌f8,ύ8Wgf!/xGTǈLe`t/Gc]t&A'u˖䯙?FfINuBi*JxUНsS6WyBXSFļ̮aE7[<Iae#$fI$,"E}H
$=D%밄[6$jkFi.4&:%Jq谖ŘM%F%Y^5&jJ;5g/h
Qk-жE߉s?piJ1F>:$ t4 r6A71͘T 8$*DGs1وVgJ!eS
2;,oQ@<K5_c	S׍Q<GרgtQ./ՑGgfQk	-67b <-6bFnF];jcC@G ($LrP:^aRO][F7SaviYz+YvUk"p_K+e6<B׍72x-8HYĉѡsG<g}hU|'1ş9KayɘzIMK<g֦ό)g3wijۇŬ6)<Jq}}bzu}z+icqa6R?A?UӐ
=<@$oˤ,ڒ?Kް'An<lRl|ju}'{`ꏇ/ϐm.TͧFE8m<XomދN0_5fTgf_n7Lju'?߼x&gh9cj[2ED<=13с \kxA?_}ۋg	"Mj%ypt}*୮MzZ9
M/xc[&ֳ,ik4VhwEvxK
5}׸ء;rŻϳP$ EYmYR;l}G"7]
xp(Ϣ/e]>HݿA2|3=Eo~fKQַNR+&kбڬjߔjvA?
7޺LHן=Ӭx?ES5qp%%IP۷t	Rg/'k)˺t70()RlRSć@ǜmFI<v`IQ]4Ӓ>}Bi/>{NNgs2>ro
6*SC9'teOGZM?gf]J'b7/vIQk:b/
TYgtmݨ?U՛?^#}"UO' EUKQQ	f+Y<m2Ƚ1cj-HPdM}߷<F;g
BJk.jdk8,^JRN)|ݿK$F5?
xĚroxdW<!-H:!ѸfL)wG̙֚s'\#-'
E_̈́iU*"j|->7zNiK|I2RBRXXG7uXhp;T(Vt9UPgzkMim\@R~476;?[`%Y&˿5I ,ޯ[WF[ůHFHq
$f}|-Bп>BMYIJnfm̪oH`})I$ROڗ	JN#ձxaN5w+kKpZG>	y[־j;AۨJ3BƱt|#K
>41V~ãuHlV(zD!\]:fa-/*<d"kKHS~O$CNt'%ɁpB,/Mz]-'uI<M_ڷP~wtn6~"4Yg\5x|J?qjyO=5
ڛ+	[h7`# 1&Rh|%r^@?E}ą2UUk!7tjl7Gs/lhJJpT|HqkZ+1;j}rŗN9#yE+TS97+kg*}q9-ĪT(1ՍkL6SP͑Sҧ.Z1h#*ݭ?k:(ZfFKVRNw3=&zwd-\<}HQڕOð?ii.C{I>KHDJDau::!G 9=xӌ>H{`#V;|Jze/iUw~I%K:E?iiᗝQ7{`#*N_ݏ#B͇"ze#XJM>Zh[kF#$YPesIV
8똛/rE=z=\qt"\BchQk֎_lZ*\Ď_0R+l=.z
wB i_\x7qoSq#B_JrԠ\?țDJH}Y`yCDӃ&)e+)_޵QE߲wl&kVqo0S+k~Ok4rkE1$DՠtI~7Qʘ,]ݗ̈́d㘀A/^mޟ=7Z%/x?KgkY,bP3^BuLP8	enqAc^s>6_m\-qy(N~ZQ8ݚѣlh8n+|>֚oxS` kN<h0{-^yo5!W."G|fdJBLdi]5qÅIeg>Vʟ4QV~m#_u?1,ZU;N`0ŏ+[^kt"_=,D4XkA[\afZuȳnqT|ٌ3@Gl`3T{ b@WL5%^˂~"Xպzic:%UkPt
-:%_fM-e>ЀyqWh
r=09q4N״\6ui3pl?a	W#tI먡b: #H~p@?7F$澊
Нi
6OkQԣ%Nk#fN(VƳ6(P(d,XwDH:;:n+aǌS?(?cd('WWs}yTmh}i8"&k4%[9FSy5eGNʔVE|6cOQSOq
h"w.Rz=#/.3W.Føz|c&xxtnu~ĆC܂ב&ArWz̄/5Au'q;}¾V}Xў~,^`}N7?bQ0/t6^i!]mgK	rIx8*]1E],ŢN	x#$zũq7V:IwxS'l{pߋ`WKzWh2=?$RUZ:[n߃jCjz-G(C>eZs)ˋ}/WF!ѿk+ߕt¶WDH${>lG闘/ec*_L
8q<%ziRXOvR8xNִvpo9I%b_R\֚GrKlL!S<8cT]rJ
E|'YmY:o;&Wᩈz:O{.,aDb0mݫWLz=hŌvgaɹmRV+&JD{}Ѳ
r`Vzv/q4+E¾L|3}^V>y=Ew?/o<ŉ۳턫?g)+yC?3ϣ_̚2vm=6/๒.S-t@<9Mssr]\6<sLf	yJ|G9/ =ƾK*}֚W㾦Q?9ʭ(EiG3?gSmx(G>(wc_n>YK|93qاGNb<
3c]"hkrx<Fy2<<Iy>kyVyʓ簮\9	rz(Ϟ(gOR>Z>gOJ>C#l3O]>1g"g3')3]'|n|3;)SO')Ow-+6§OJ>ݑOЩG\aϼS$]x3;I?|{eH֎pG>Wv!X#=KLoCPWkA2<w(
_|ee쵔b]gX\]s5'
b$4kMWxxD'Gwcs4uw:;b'1BB7iς+_&<_~y7r_~RodScˌE=NR)˺矖y沓7|N]>0ʧI'
ONw0oqxd9SǌXD\I峹 WOJ>ȧe,|sZ}DD՟|^{k, =)|֎4[M>#UӿO3%׺>:vq7H!mѝ0Fm̃F/ n
<2MXV+G[G3둈SHֱǢ{ ,"KB.>ei<IϿ:8dN/;*[7$H]W3H2X7cuFy]_Q^C:W*/):QŅ]4?⹼zaBwT+)uAJ*~'.g5>Wc/5霥7'+zEܫ,4xJrc.fמ-?A
i /M\v{] YhE[Ex?#a:aVߪNbֳo2oC!_KjƐsbnHm#A:Q_t$[nBpW9yoCh\(7(v {'rqC`K*Ow]ĖZCO|V
,'jj#ÚSjM8ko{hI[Zk0R+J=`gɹ~Y~?`D_f_+袔L%#S$C9DW,׿>Uq"q\~Cu=
ѱEbR8]~rWȯ-3M|5^'6DCeݴ_w
[3m@_,>];.pxط"7On6&`d@D#48 Gh5}8D6FsjK^pYATvock~'pwgJotR5۩ٽwYx_ցʲWֳx_4~:d	ՐJ2VG26KƆQ۞"-\HCHƹ[iEZf[G{W'oVX aߣ[TzꝂ7,2uN0^s
S>H]l79θ(E"pKXGdAx(b71\40y
OBm$ak'b8&,6 8<^|
ؼH\<^M_@$_NK~Pʢ-G}Z2vA,DYdJEr2<%G닺~.h֔e]d\r$7J&( I&Uӗq,DA/Pi&G)cAM<]t4KT.VYޢYj":4~F|>ff_]ɑwљl>?r[-2ҮrP =F}yឈ=`oXwrR{<7y3~:h;~m&8a)IOow88ZLƏYhry	3ޱ(##ّ|&fb ~VV&4/_
wLWj߿L߿܅x<wo5'?W;h,>K?
`NG=qw];s#0v07oĖ	ﴗ\+?c5b͛F܁׾8b^DK)~N46 ٠h|S>HiΆ՞~^!~x(
%Xb]V`&_QcrV0o"ڹ
)ϫ^Lr
"S"Dt"!;I$ߋּ	}p&%`҉T
L-'t?FRz*/RqFD_#ɡ<}y
yy6iH똞n _"flݽ"7(uOx6DH)R=OaB߶.w-6jK*+QCM"$KDPR_Q.a:\*ֶjK_Q/*`h6HR	5`w]4 3$}gؙ;gf̜9sΙ3z6<:77iCph
tꨢ7n!7p)|aҊ"M
WQEWr>uV ~1m {"A&?_"HeG> ^OI/BW܄a=5Q7@_(MD	sP	zA֡kuE~9,#+/Pj p@ŔA2Qg٘f&b?m8]Ժ0LmJW"6c%c4g趌*YETrxFFUK12A)8pH3	_@7̓$̉/,yMQTDm0o&lZp %w-3Zs8T˥«*k`>3E.zngJE.sza*P`"GՊX^Pؠ2~ȿk6*}8̹*c
'Y+q3N.
:.[(ڀVu-|*|.یBz7h'eVge>F`"Ф|HDФ͢{޽$DLGAn4׸Krq8!rq&SPSSP/ ^A!׾5X'W$\3'
Bڒ7jp;zQē6h"Op_SC_xz.i>Lzz?G(:-:>&GhhAV-{?Q]D~K(ĝ1W`)HD)򰈌#FD"hlwR%I@5ԏ(*$W1e8T>}.S	$uRJkrD^Ô.K~HD
"l7;Fˠ,fڏ@wxwzïGל\!>EbRƲ^A7Q0?d{a%zԨ.ŗDN;>Sx/m6&#'Bjވ/-J? IJ3Eрe*֠8f}TAbf;_U
l

Qw,B?֐d)䩝lwj'l>^5+Uz> `!\M;u!Bz~%#tĶPR\h͸ql{C0R[zVY7(HM%F*jk:ۢ~RJvñȒ_ț_CuxhQRdfO ]nm6Dw|ޤuoE`޽i2;hv_YR~UBt>:ϥ6?nc<OGbEbO=ûrk:	j@[ܨ)aVj_Abk/-RTIy<=""oWi?xX?O#m/N!}FFE~
>$^0jo?qt_QkwΞ{{t&$ ΃>j@M԰k5EIwE{d7aRMFx||m,<Wѩ6Qw`tt,^y#wfF~ѩF	]$?!	MgʀQҥH]+H`'	 E:?9Xv nDv:j,aDv`@W)WKdK({`Wk%L>XUp%T, ΍<H=6${%E){"d/(ͽҟA
D"Co$s9<H̤̙o	%:s' Y$D>&&OE1(-RX~sY!Q[y~۝r^CXAvJ/C(CqjS{NmuPDVApjﬃ$۬Z(I$.'KI$:N185	>(N"pi 8I$87:A$3	
ഓI$}pSI$ikb'XikNIO"Ak6QqW?mi I$HAXk3k18^İA*Eّv-jh"@n1	}P[h
L!Hisr YB7FA6L": 2 @d H;An'ȥQ@" _ i%<z@LV/(m9))&C.eQo@g	s94,R lF_*mLt:d߫ݬŧT|f0=91Q3H,zANE+vr"A!z$m$+m!<M0*-2}˷f-q*if &`3Oh-:p6	>^(6e /Y@loۚ.V
 )o TAM^*; $Aǔ7J%*@vFSty:TkQ- NŔ7Ry*| d+ANi@2&`Q|[ka2>R?!p` S$g	(ȥbo dQbk x{ Ct-8e: r!A&?=FA>J9,5
r>A^F8O6 :ݣ磡<>*n~~)liEWRC uO~wzbɻP.@=W*B޲wo~kk~5ivPO9E(rTd_[bp!oY,|Yb܈R<Aa`[K,ك<I^8N˶@#
&cp?`yF1_|{E_QcQЈ OSOq
n|
9<B
v`01FLh?A
`/Y?}Q
.

<?R>/JXMr
Nb
ބ_RЎA-PBO18S``V16Ppz	h֐_i)s SeܜZ~ӾIt>;BT@+:!غ'ȱ9˅1lhn*
*jj`faxyqkRHxnW3_d¦9c᫟*WD&}u
 kFW٢a΋'ԤY,Y~0>s?̙'y|wV04*m8V҉S|l/^ķMEs/,CZH&v<xsr|NMZ\n)0<!Xҩw79F$KKxNޥxN$^XPeY2	=8-ΚV%ij	-)Vsg	~:vDh]cd6Qe||+e>s<lz=a3wN7p{3cܙ'^Q]op*f,hQ'F3|[j6ԂF5	?t0݌^Q| J$JY㹺FV3^w6&:S
0.~|,<9v&h$;5Ȼi%-U^ky
8WPF,\};M]P&F٭|bmTʱ
;KyY(Y.&0v*ǵ\@ʙĺf#-0ăK+PAkＰ,ڂ\sj]_c1g^t	0sN.>a<+Q!	>vqd1'B5k~@b]9Kzig]Y3³C4I,/X/^]OJcK=\ty3rOܒ4R0ྒྷbƩE]r\f݃_,xKMs{
ޤ4EFKuSFrC6m&GD	y҈3,dGm'߆sR}Nbi;;3#mV[ݺC@-7	p	>ݯ#|4;?ч`u7Ű8|HӾ}ы
hLH)#%ѓׂ$-yPBXvhf0e"/6`3X,tjԴ,T{Kg]F YT"uo;~2Jnk)|KPP;^P=gYm~IGk8o}NP$pFz!
<KNiO%,K.lUj?xrL@$rMTu'@5~:-eu1k2^:SNpM6+";~~Fo
˂٩*{RW;mE!ĘCŒ1ԥ@N?)wԳ-JMAMRgGC}h{R4L'6Kuk(Sn`]佈bAs
%Nhg;,nio1`?FAٮгXvVym8P}spGNǨJ(]`@yc!8>}h7qoi?=3͢yrsn?+%$KKS{G|Hnj@L"7!Gy?7EY5nib%ʚ -  Di$.LDdKYe0̢hNgZ^E+w[=4Cc $%\Y4Α64DᦐHO!cq}^HÊl(%#i/Ǉ:Gtm%{VvGj!G
hZzi,t.̇-0|?W[-ց4X\#-<׬ղjOt*(%AVW)iUQrV`VJX=T{󁷕"7kY&q&+YYEsjyXh;XwD#t]*j.0^Ibq旱緤8>ѱC13Lxp,9f,o%(T˳gK͓V<Ԋ臹f<Ͳgj}"T9K>𙙓CF=9YI
l%RPaA#FN/^/gMӭx2\^&y.l<w6G
;XN/݂-OGpæ,7EF٤u:wj=h;x5މxWm<>4a͋T\g~3*
eO G-,a>DkbcJBpPoh9ϠC?3yg>G>I|.o|w#5߰&jшsKZ(G*l=Myf;DγaMVn'UAm
y΄2
MS]jt6V}xg=ɛyE˓Pŉ㜷"ZXPE^C6hB
} hs<	%`Z'(|a%-\+ZtP.;|o]|M(E70ߍ [fH|ԯzwƘ*yĔBg__@W
wjDnؾ_]tw	Q:!VTQBt=aq_=ȦA]E LH+iVž-i-$&
+3+\IL=H=-`!cMf÷C3fVB`[* -==f1^b[z37&Gݔ"+S+7k=E<J5({k[X\Ȩ
| J侻t(BLez
?#Oӯxn=?Иn5ͤ=<4%I{PnL+dG+7YצȹK-zfa-T](xlo<pC5: 	7cW6#\#W:j5थ闼l8H;[Tw(Ik:n.#̏$_XTi	fRs/`g5@sU %g|$^~ߘc\36ZջȔڄv9Nh{ j\&OdՕcЃmfRojr7ubFT.uNB
A\4W!nod)I13gslh*cOpmʌ[b$oYaH)v!35XC(|>َ&z	]564J2D:+NȬI%I'J
l_{ɾw.;PXԫC# a~7*}>m^`ΥvoKYQv|ے6HFRcl-Q Սd}T}%CrF|o>=$Fo[V)T;㚋0ӑ|ˇD[aQ-6ؐU6k$9鳜i?k0r,J 2X㺧e夕Z`.`:JNgL+ Kջl*U \QȒs4ffp
LAے)(rl姊ik887mrlT%--
jTGc^Md13[{y]lnf:k2ݝ&Y
Za9ڨ=DGoK8	OI8qSN:0"JZ%>Lqxw=͛؇I;
ɽqo*#H,6O~2~䝀*Q5Q}Y3Z`m/o䞻pL
N>}43zOmj~X0 G`㵎Y=-n\r}8.)Ʊz˝wPПBOҐddy/-b@[tl>qڣ9iNpOcޠAT?؀k9㫰bbeS,Nqe㿁
_&[/2j
:SSEdn#hbK].^\Ɲԃlb훴QWtX$KƖJ_P6h
\K,KY0kUܓ8@ѥJJ{ntS;pB 'P%D+];P/yp~搁eIZmCL\LiojcnMmL{KBr8:ҕmFRQ-O	6DVSz-΍?DQ\^ TPi:bG\C)[g4 >Hu]0"@ ]WA v:axHь(a+4p}\06.ARqh;;UcgAD:fx (/`ӴѼ:v;u
9VUƇV
whQ´y*\w|e_Kg,wƥ$#Hko'آ>+%V2^o"DH
(ٌ\!´-I%ljTHw_FJcmS(h N(bl~r^&H"}QXZQ_39jz#{B۽X</cf<)faoåf <dh\gɝIhS3vd9ISѨ(hǦSkplI=\{#p@2z0_SҺ:6 PޓO%<߿g5[=Y(BhMotD^1B8vbfr~='PI Ui8.Oi9yՐiBTy%\|BqthzYXL5i	?cP*,;$"EAاmz2a:>~<[9eAGd}>8NvL;.Γ{F@Sb\xѧ#v)j|%~i	vpjr~2OxVNdQʟ'??5k7zZRdJǚ&`Sb9bKKn2,U@mY2?72o˺Ҙu0!^[?YU؜o|*W1W!Ｐ/)_rK'#a)ThV+
yhQetI8Jizexq5"KuT?>AUTT<:@ D^'^A÷
J0ɨدR+κ}2j,D	3y5 ?q5*!VS
A_
|_`+[ [
v&φ?o{Wok_Ce[gH??	u)lpЩ(pzea=hkazU-cG#+^8~za#(S|F4<~$0~tHUcX\As㤪6[}VG=١ [M/ CsԟXeZN5z3=
8R,}k,A֛P|eX+먾=mcUZ"[heVj:mWXy}Kє:jgR%	DN:"D$濄7DMS^>!}}eաD߷;]ꦟ$)yE
#wEg`N1]ѱ߳NtjTgir`v)R-HR+H}DAmQΘaq(UMՎۥHRVm13i} 8qM,ӎ{C +a1,7@H~
kcS+䙲VJCbͰa]#Qjf-v^HU@%Ү:%7>dGߣMF<U"Ng
ϦefeJ@%S(}k1QOV	[1/-Ŗ1)LD>V+>ݢ7b;'L>=@/ŴCuLm$O`

sr"AZY"ywTE l,Oݷ]w3F_e8c]g'D$$ppv
r5p!YNT]S
ϴD7*}>{5u3=
)0=;X}
}5ի:3$Lq?MG2-ҊG"~<nA&r՟e:nbznj4f$AZD;ghY߀1^ZQHX |X>>#gπ$,9*U`u_4?nVxk|p1oL4.pA6ݫϯ n	G4fFmMOYri<צ@06+:n<+eTQ*%cg<viH^?0չ%sjt*$8^Т4)#lQCp+b-r@G)3m}~eis4H+hè}vɛ`ҘE,z;/L)vؤD,3@״f!w/JR=ST>epd-KIk2ete
w
D9deD^{ #v&cM.ˀvx9)
R옂Ύ:O#]bHκm]Ӂ+x^jI=(YXIw6#~f8V*y"%Mӑ	%k]4	~+QfpAOOg
If5 oB&ނu,"Β̜eEGBZٽ%+(_l@UmBېuxJU;G*,@%{S>2vo+b^ldSqb)U4Cפ4<e{v1vT>d3JbU3ifV/ހ%T!{"eȎnP1RKMI]= r/Ypj{~+t9mD||6iJǏyFgHh!g9l)+>tdQeA,WYeMZ"!Kn<t(O@gCXE4:nA8*}e 3$ Mfؔl
`u(@hv9&CnASVDA>!P=*ߡ%?LĪж#b֙{%!fw:G8%P@gڔ鴉DfI_aC~~~h{נ+W5)nŜdj}G!! g{z8zt
'W;xF7#ȟǄ!dKD!
\!HajAX
O|+ԏn + L6#O@m?AU5,sfhgh{+`J!+iF`5k/EJ'Eю0o<j_
IG-C}3OZJX֗A!5G\eB%kkh,0./0Rr yq{Z}ݞ;8 WZFch3!N1bRV#c+3n	W&y
1oӬ-\ؓ	>d8qcI=?V]-,0,f,Hu6L7QD5&?FH!<
LL,]#Pݿ]:XcvWZ][ݏFpUr{,]df
[Ѹ؇)U}HoMsi.NoA9$,F ;rXۏ+rW~*/A=ia3MJ} `b.g1 xkd	
ӟѻd8ڃH+>DlB$V}KUh(jȣTŠ
x$
5N)al〴r<2.)%݂(Ȭ㮣MOKc1Z7"W?eKGCYa҅,:f6@6j%4]!>a<Ďlh5 mA 뿳Ci>reV<P`aӬ
(v)崼ϤLmCӝ(;}$Iqg# JVS2iFM|!Db
,hjaV\`)¨'L;
zwDT/?	rdDdEoI>ܰ0܌ācbhɌIV<4DI:H>tQ:HÆjkPqg?#$:4UB10,
	w,tُ	 vٔ#V!cc9y_Ie1vM^״)[Phx&bG$$cxA!| ,avM4Ơ$	؜W&i7+
Z"`pwI;
}j^sJE#q;Ёǘ@`qrU!<P\mzsCN:~{$*u`"ӱ-%J5y:u>3,rqq3oVDŀckZ]DtQW%;p%"Ik#/XXYzbk<@G`T+շaq%ע)25@ƟZ4د`죔:.: !HNirtAW4#%x]ކk>b~0J|VH`zNZBm!RJ+!Rn&&ɧPkpYyn{Z`TF Yr՜SACt1eQ}3ӣ;+Em3Cഴb
$LB?i6V A˦pQ\1%!AIRXjY/~gK/.Lf%Eڒ[>]H='q 3nH480$	3<'q^l&XR&p_z|I
>:JB'^
WIqJ9t7C;sbuU߁zynvz.~}]O	vH$<vr4Xdm,̺ 4&WȪ%,<94,UQ{q5r-dA]GˤÿQ&BMh7/e␲/)#mYv6dOB wAH4qTU.83eX-MdG8/i֧8Q)?#ytΓ0=s>=QDN$_A;`2}tQrW
P?e@KP0,8([HɆeP9 ;rT+):"_J+q]ɋ@<m)R%_>3,~#	EӒٱS4Ĉw4-98.dR@&|nRMR:_AvRV([qJZy&!b\3|	{& %-)0,Zy/H>2[#5OCnQJ%Nv&LH9mfjtK.MmE2G"vV
lQ<pxjį\3D%1՛oR8Vt?`-Ƴ)]ٙtaBTWJcsv<-BZ쮏	=m}2|ElzC2l	:GV(xq='1F6~٤1_qTei@)nIX @r	hXy&j+3'sZsq'ATdN?GrNIuKzE~N6F
bL_W]:bJ[\vFٽSWA[@i/GbEwA5@ρSI!ñ#RGfY!U`FS/([4;;" ;PFF?1Ǭ [z0'|aGwMVb\>?'WP`5
1!bIh3vMcub7%Ъ
-wKݧZc
3cXҁG 8unFOȿ"OӶ>P~NֈDk"6t4_"[fe,'Q*ʲWPdCʴwkdFZ h_⋯Ӓ2Yi7=
DKgzr(YYTpoxweCלkWҶPW5g<0?mJ|'A`
 )/ljal"}t'AMLjG#Q. 2
|xR[G;bm#Y{ĞG
Z(#L^L0[cUc]W3>՘m0JywHV-6y|"{T1he-hv·>gLt3dvc{Z%#֢Vj1@sS3?sDve	M`""1=<MLNh^HVh|]	|KrW@.[ \<Gҭxi
Bx9!0VhbŌD%,4c<M*;5bMSېfؒ~\]ɲW7|uhUۃ|2"kC`jp|9mYHS%e'O]NeOZY9s`aڤBgKI&0_wӔHFӔZT
N.,@=&ڿm H.4nl
S0S
zg$:N;89)מٚ&g&B'hnE!g`fOq@,m`~j̱C]B
Na5d|d6>ƨ!Q4tĹxVA`g0\;OmSf[BG:D!UwJ`2XYhǣ._TMfu{jcSY(gE8YaQHNF=bf/@~^:2Wt?Nn.=ϟX}_o='EMۃ;sw~HF/y-6Aq^ ௝c{;ʤuU^	19Rb=gWƢ\k7hhj|NJcKw_OP*!&~_1^;<usb7GUH^MM?iFNO8SZuEY5XE-6#=aEccOXه<郦:{x|nrC~gĜf^nf%^Vі":s٣$7Q-iQ.7J+oϏx;J|N꤁T/+#МqGrT8,2y"4/W8Zi}9UP[fv9G\1h'ߤ8li
T쏉"{
m7ve9<Z<uѰݦ5`IW=O~l6=$VnA[=DYY*څPy޸wъ-4ΘP_wXt Mu\ϻU3Kdn{jwm@<4.Ay^tCBƝfV8sC
_K'H v	4
*rw+Z}HJ;"TNt@qJ]
6d%Jqq.$dGE^ sg	">;ٮ6[p9>\>gY<4tngI&in<߹&g?k-$=>nmO,
k&n~8<"[j]W@wC;jEM:`lg"kjoMXtd=H"n@Knv+OLۃFHcR;Bd;TK </Ƴͼ8J,y{  6Da^vU85	d|0B\YqݸU	M3L<M|q
|)j\褻paOw¯ yS̹U17P[SF$ﵴU݄k~61Z8 r^.GW)Y	V%ouuFYɬ/{9F<Aڱ$^1/=;$x	wFHރ4}ZoLrXm\ZՅ@c#]Q=kCΐgsȳ3/W e,gqp!-|^ż;[thxd>f
Tix+Z}{@Dl0kb'/~W2vr
[Wu-=z8n@'2X"C)
``G^Wf9%"qqx_K#:Q/x@5MRg/$oWg-oN3hix6˒ǀmxg̳wBФ kb990o8#]}~UiL`.UI,ws%eHMl
2~o>N]V߄*\WZDۄp28ß݃
QϘ=s=7'eXpq?r*pwChɶ f{tDә-źӡ.7G&}<˵{fw;Ow3C/I1bܥTzlm`RzFYƲD'	~[RU.z\;]G fdmkP($R#;@*\u
e	K  "neOZh|/(eBvCk.rXx+@2jM
ӎN57KBX){YN!Z&o̫fM,}7r5;,sv iQ9m$˭&˪A1i"EXY񀣢D4a{:ϼ$6䱂HaLPѨ2zż
[j$
Ѐcv1P lkPjAsvDr(E(ޥ>˯ӫbX@>B'رE{Wo04aI
gߢs×iB&dNep _ߏJL%  G>]zgQ*i
C~	/RY
nr\i&J,<X㒺O
ovL
͏c퓱4=N_lTK5ՠrjiffa0j|w^w1I {o>a2 6$rh!K)_k̸#||꿅wU04_.wHĺQ:sW99	~7cv?+x%^`q98l^u?74
|kok`B|^7@et{T4Jh
lv8'/"}vw@5]_.l&y\y2y=-lb!̀mОG&j4UPC:;99Ҥ]=&%&ͫkjZW{uj௜Nכ-_hIJs	7MB*U0i!n
H\	ToUG ^XX:NG޺'-{"zn:7u>יڝv1J3CX'PZy,Y#3s_O(B+~?U'.C}/tɖ~{Cf*OQ\G~<M=&fyy`[f*e+-VX6ޝti.xFf"z6q[6Rk.R<cv,8&gU˨Η'ӄK~_6$,Spyv֫LS

]c-Dc=WWy.=\?ޟIUj*tT8'dIo=vsX㔊ǯf+	ٜƙJ-ޟBR
t=J6cF 'y4joAFRmt3/"*N	Pܒ3Y. ;73Z;57GOxI}3`]jEx;xe:/vvalt4
@F'UCԢj;0?uHC8%HoͼNG5?XA)(MLTͫx8
gu>{Q<b8{_}<\) /U~nQhxhaG.;pr1wRc9:[)JF߈@{ȹm&ǸAA:ی/**/|~|X_
:eI
A6KE[ߏh~ NKhLd˿Ok.
n('%G43ᎳmC=o%6=<䌌9/)1D_n<3toqK3ƻp-+tDt7J&uw}'d
6Pu05wȃ5R`07V~%~'(~?߈X+?߉nsVS"ChS3 A{P9OCPE3;rL4.h2p4=5vTisY/h@ɲ\ꁟ}c/^
u[!"K3_mVʇFl>riЇe"iIQ)C/[۸E8jy{BMMZʧ,Pu>շ@k~rJ<^I]'OmFB!A.qH?F=dP d8*{<6cU
V-/?UO<~u<㖗Cg?/Jgr^=_HטAnH"go:䓞1<6O5hK3~Rv=hue^QD!K]o;Fd
:Z΋v(xՠ?"Q#b֜MHD-<A)N0QӮK⡭*WזMW	iq7i3!Mf~OHJh5[Y.aŃ.aAJ	w@e߷BV:3_Xa
,=A]^ĸV+6_}
z &{~'Χx<061Oow5]7sHE?}J{X*RNBS(=\
ĭFR@ 7PwޣIpC.}?O/I>)\FvYHo<IsxϘ_/Ϧ$~Zv{@i.v&i-Jggsg6RRf$*עL_2m2NTMʴ4LRZfw@o_J_iP9,NC*ˍ@**/uqSBIDr7h8^n\G\%W_[>Tf>|deQ"0]RH,x)m7ݺϣ.RʌrН#X#۰+gC<ϩz\a^)^fEuC=uF$
kiw{\py5$U_4=澃}&cv5Ae2JX'yߧxɻfHKafcO+Xmnm`k街;. !G
%Kifd IZHr=tiw2<AG
;t˕Z:xP>W7_\OЉSh$IȽAnݔ0r3Ir/ 186:B*5S$wE闈+>\vK&R^!1pAQO1l"4lLGҷWU^RFM|M2cArQZ{! ҁ ~ϓON_!ԋyY߆5<sD7FpSi%ݷRZ.5<17a6
;t&KG@@~wrx^(_܇ʪ]ծ=pA/SA5,J>O'<
$$0JjW}Rǒwj}A_2H'yoEFc9񋌇1-Xv|C5ά'9EW4;
oXO
7})H+٫[b.8Z9g/z,OFS.#RFVyxu">qao?YLO2VfQ3H١^z_do/>r!vaUCtLEu0dG7ޝY;V=h̺{ǥN9X+NڞnD0ib$	ݖ4*R瞣@WN^MG~-=6:M|`ftK#m?8iOS-|Y=H>x)&灧 ~Wxgy/[Oi}>P/$"iFg>؎6܁=3^7]xPH-)g
IzŶ.~ϼK6 ("U?CN ͍憕,NA1@8c^A؏ʠ
'.0kīGhS|_Bgy\(oOHUt3|ʽ5<[DNYXTQnRyz3D/4B"!j&SNL
Kmy5P6{,2!kAL2a½.ȹs!dD#:'kQ'~}{@1zMt6"̻W6]ʝwPWIU,Cݵݵ#ܧ[tHsׇԍ# M:Ҋ@z
ߤS!TM0h[lѹ?Z<]TqqLhKZC>Wnhs&uY~f
FVS[DG6FCEIU'1B<yX`F^LkC0m`.hfy\a2tvɓT*fU5	1gct]cԙ<PͿ=I&pwe!˄;=lhҹ-i$ 0Mg/1z~g)ΝmP\]H"M,
(+,
(+,
(+,
(0(>z!XDvWqzH;t#}RD.lyNd(S䲝}YPF*tfOVe\>J~a鍝GN*T~s;uU8 B+݉KA(M=J	g2{ᗱҼXlzE_C46OB5(,sCH򾸢bs薂PHJp-X8{R}<@mDDy_A_K9a5Y"J	-AA
OeL5@su#@[LX8X?bmOKBC7/Sdh8|_*45y
]*kB"L{xևb듢bQԭU)=:ё o߆A;?їBjZy\iw^
l%-h.i![k@CXriܣw;4W	%fOߟel-iڒ*b
2.=˰ [Z}PD,%i=qFI>VM B܉XY{fI[Sgߛ!5|w0_zt	(r.h} g39Uasboy^`B$sM1ؾ@><riCXyE}8'F|*Y^Ns^t)jf;WxpYp{KXj}x<Z3V^b z徊Sin^Z+ocqbC7ƒVD}"]Lg-@`8fy1Kw\yQ]i4BqO&`yAFtN]ox/.)_őS"6c=Wܳ#FYz}uPJhsO=KNgՐ-7W#4㪬g{:d;wLwce?0|WeE#;"zt߂mRJ,	'[׀mKgu1u G8y^54X0ky>T-1n]`sxwi㢬k 6*+t7EAI@tf4-&b{kmۖuPLm6233lN\k5 _z9s>׹E}վ/WD=C4O".ۺvtU%lgz\S@Jֆ2	*2q'Z·?Q-TeCCޙh$N86M예4~>
%_#.TiH!̥rsL'Zn7gFߎn?oAiP=FQ-t=o-"cz;jrCo-y+z܃NV1wORwd~[߂lxwc)DŧE`2/HQ|I7JE!
-UB*3	)-Cr8WdCjv˩ 7jҗ# sdf?G9Su?#,/aD{W
k79yy^7b0,0<PK/󗕃}yHd/-#uNi7QӶ
TD)p<g[&{#Wm뫶)UmI;=Z::73֒5w疴ҍ2mx/ۊSIk)IF(txoC﫣ﮨj~|_3' Ӥ]om:jis]_}+}g\CzccAضwD΋yuh}aK߅5ĽZlcsxƓ!ԥ?i<dx{zҼ	+ {<v!ʎ={wm 8yӺT7NOhO-zXb|6yNt7oF?M,ڴ.!>&mzx[vOԽfG3N4Khh4WRK\y/vGmEY[K㷡QkU[X2>$sqypB/7D5?!r?i)gdД9N5)yXXQлSxB[]3,s6nmFBĔ6/%vl9ruq>3.6*Bk✲-gu:Ǘ(3@+wj]*觔=JԦq^4|e(OѾm>QdUTM8=:L|8m&Ɲ]a2
;u"p+XMWNlىwަ4ekhۂаP+Js0P~وޭ]iܑe\#UxFiaϒTxW@wQ~u2@EM<B8Z[xF{mA3teoA{8Kzs9am]ݞPJt:bӿ˻3,4Leź~<iŪ$kR|(e!+GһU"B#tLI.Y Ǡ-4c
5_v#hC`RIz|Ň<ѭJEatxRzJ濲зbx'$nm0{+J+5/f[Tϩwn%M7j2Oo$ֶm9tHx<=)ڜ.geaWg;D(;R֧7]MWޔ7gF/l4/jfL6X<+6Eэ uEny"豉hvExHkVkx+*wG5{(>:^D7?ijGiʛio4jWojk^+,"s
پ=?
k=ǲ.:rR\hsuIiuc8"i#WGmBc#E=lM9U]xA>+%v]vfq~`Pow]&{)r/[[E+¨	{S}5]ٖ}MH_hvOΨ3gvWwN[;I~a˛VϪpܥubo&6'o?.]`s#5׉e&!)w70:/|'ռQިi=Q[]~F:.HFzzps[RM-^U;VebL;{s<#it:OpAdGy;M]DD7N~~siӡ%
k{+?1-wD۪G0!#L&}
a:!
(:ApBv_W=mdzhgTrnuF=ljW'Cq^HEN5
ޙ..ĈjHHqC5UHC7{)'E^'1X˷WKJzv+4 W]5:AePuZCrt89b:Aږ4[tSE7kɢA')UPN}/,y'ջ݃svn-'6D!zƶ.X^UޏlタAʕG%nfպ[=Dsd?GWp;|PS&C}[X?K}MS]C#YU7Z{j:-~q'pш'_o1}w}z$Sf/cyfCRo{I9tq'a-Jyk½wݷHHz%#LufşM>AFѳ5Ύ0pw"ѧ}ލGOt5uv"OyMTy[{"V}H
nG&
]9&>vS{Z;r/}6xMW+CuF|S#՝ѭM=3SE9Uz8T0Z]2>Ul+ZKߜZAV)>y|ڶR\䓵	O~]ū"Z(:zܿ6{Y7K?ޅ#gNч(|A.olC|d48ZVFNNzzLV\f!'%TA.Y˻s*N_ޓo6YWw*sI}/_D箆%9<|
?#\=¢O=PPks֧iMj>J>r?FUڎUqtaxYh;Xe+'VEۆKĵmAM\F:Hy*/[o//d[o/?ynfO貝.0`TC[DK|-}^A7&SCjD#q\}\*=!{eu[#-ƙV󜗦qOB[Y1ev)]-m6@%)'a=<#3诨`t\HWuK#k_%cS++Rb:U3fhӕoR6Fjq7 vWNy'N:uQ3}z0F"}6J
!+D~?)P}oYTdٵ,:"-;<i|rt=mDjq/m1-/BtWEtEz>0GϒxKbp'Vռ<&܃U::-ua$}}
0Hڏ诼~Hf8l.2AQtHDL<LIsMMn/U?S-W1,ig"}KSGr}ij"+7EǦ"
˲Qo|P&mzc<I۪mn
.sxJO<MG&~_¯ĥZq맅tvkwZ3Z3s"r8m7vLlhh3˥&s8[4m40)090saa¬yM0;`b08ӓr;f)jafa0W"LWp3f){vl١0q"\aR`r`,Y
 30`v9sfms9L
L\r0ayf}0aoFf9eEeldX,AS5~pP2akBW5
iٕ#cgƫ1׀aMZBV{:N;
gZ ,숐3"nb!C{a_iV1pOf#Slhw"Zjd!$%DB`/hG{pC&L-U*}*6tH4RnuAi.)=="W&A½V22MTn?l*աMa!	$;5Bg{ 90Л-&	%i"n1^Py(b7LR蹃uŤ/ia&6BV=Ǥ#2u'AzC8)w^9 dХכ;ެ+`N];v~V?hZ؅00USLtq穸7DzD+#bZn4Qz:Ho?3<7"ׄ挊^1*i<t;FEf*u
ǽ0[6_M~fG;5v7HZ>|hJ4F9@w}ZC]1*-iDZÑVh(^R~WߦPѐ1
%MRi\_`0GNFY?t=#GCS2ϛu v m
v<b; K7Hi!#14i!#!j%Bv5W.:p.6>}TX#k'
O/-B~G#Ka~&(<k
	I
kP:.kSs(y..p<~ឫdHO؋}eJg}lj/WiU}B6;=F?%}$.Cm(=TߘVj#qcḟ-triĬ|PɍiW7XPT_ȯ{vXp[S7 ŷ;^?8Xl7GuF6|f(
N5R_J|w_':0#"M*x?J170}#yܞ|S>Dcʂ\*K]uoòТ,'bbIo0< v+`VE2P:;f>(<fiMSA}
vfGrټ}<]3hnV_EG|؍]2,Yw/h՝;D}ٵcȐv[gEΙ!90=/Amk>@qE?I!ޠG5=#*ON߻V}Fc]TWO["&kn>Ȯv}
\1sF]9oϟ'gh|15r__݃G!N: g̃q͈WM!$sGƍAaƞ#ھ>Qi-N_`e6L}cgib{Awͻ}qj5߲t%z0,0s
a;y6u&o<q?diƸдP~>-/,O4_d\V
sq|M(c=#ش~>:M1<-/;c=!H՞H])N(TI;[Da}=^ڀy-bxP'ld
(ev?
C0```dLIIyf-00wォ))Y 3	00abaDD˗H1a~hEi:w{ X߮lV^^=5?;LBEKU1!:?:,wO,5-,Jg)wKu!~u7~##:dL<JɄ/Y<bu>K6vY-9wsWb9hxUg9[ٯ,	t>O/⃈ZjS,z7Q:8_^XO 
b|v#oAG{r!!giD̢Ѿ&pw'ډ$Km/_i(~hiFsrP>7:*VgJ}8Cq3)|w%[,D3
Rc,BӈCP?AX c	@KY$\1w)`rh^)}(KnGCY]+,6Vp#,RYG*.AyT+.w?eWKWPC0ҷOcO{J#HUg"یb^T|/bzg t_,_fiFbAB{y-֌ɂ=5~vZf!IKի)X4~!pb:ʐ?_?(Ax'(yY{FxWTM/Ew/oa
͌A2odit&~BnOai}!8q-~&ngLcLϣex-O,S`^
xp*'AOr}6NәzӴ|v1ۊL	p7],9Mofx#c*KzD}N*M[/:rL~
(bO~n56BО4| 53Ӛɿ?*c<shs<#s\Xdek/Iwm2nw`$ti'+70=ՌW2 .cl0^<1e|+xьG28q'ɳG.`1n`|Mtg1*8E?G2Kl0~<qp:M%ΆOaga MeN8kO` 2^N4A;?;5|!g<K,T=w3 x2x;]odc݌72^xgM+\ܿ3ŒR!Ғq.8qH砳q5xp,Vpf)
z̸Oi5>x8iO?^XsGi{o?xxm=w?gO?o/x7c{7|Yk)	{?>ɇaɝGw1hGco2x%j>|sܓH_N{8f}.?c\ng/w3w0ୌ)}[4apu<<n-K{xs;x7~?sw21
k<߁C[G0>'G_5'[2qxKtl^>s_^2ܗ{b૘dƿf b,xow2~p7K#}/8fGp?A;q$b瀯`|x"I''3<q
8O0(^Ybp-3^ϸ	<n`{הE?^)R_a
5p7np/w(2W3|?O$c3Ǘ<\Bp#sjڢ08<qxtzW\L1^ ^W
nc_f `|xJ_xs6_bO?g?;uo೘K'2~<W3S}2|?2xczV81>-c#_bq28pLpr7[g\ɸc|Sz?v0~&ρ`o`xUox?e|kQ_/e-81=a<<(<#|dxslg|qx5K*_sM/``"pf
<`x)1[.-~&!t#fG x# xxR
vp2g0.a.qN`_o0>~ɇig<|Y9.7"XƗǱ&aILƓf3s^¸ \xൌgW
'1^3|
?~׏fNc"8vƝew[)|V18'OXx7^2~6gobd<KXq<0[f01d\.g|Nl<|/a|[w0nwm2!p~
 ndG*o/S|1	eoS|o`{ܱ(~Q%A$ep9oYxgW^9<sɝXr3
Ocl0N;|=x۟wg{b
57xfc?c\=c'8{߼f-]O`k(.Q1~T^3m$ER>vE3Sh3GH2OE#c=|Vl軜t0<r_W,3^e5xop׀Oz5
̝0w~~]}w2^c?n?s.]p<ƴ~:6Ƽ8;N,7_bI/_SS2ς'T_>1y/S73M1-T,>Q~k^i?Kg{c1pG_.a__koCEof|6xFǁ3_
q<8dDׁXObYt>gP~c xxJpׂax&pT8C#AO+cP6Nf>x?ogRT:zbZL:SUSp	;~XoyW?4Z 煜i&Fop
bs"8Cu,S|1tߎ6rGժp|pӢ{߀2pN7?pI#t1y>~xWYg}c7CSW'2͸|zX+'YΣ(Wg2nʸA?G4ZDRl>0AWE%2}ýLB֭hUJ>}E8{EE yٚ:?DwzgS-}E+<.y̢T1?}?3y_	T|oEDD	K|TptrV2k?	|K\N59co`f5͸	˘ƛ{Yziy17GxsFy17iŘڧbHϕ͌obL}^_mn>͘l!'S{s{cjbԞ+X=8&ӏ~ngg̽#b|~?<a_L70v1c72f?!w{
8\#,3)k
~tg}=3.ɸ«{ׁ
fNd|'"Hw2~	S1HP2Nv@\kbTpHw7(>I=kV|X,KEFi<1Wo{<F/{ޢ+wXōnѢǾdG-~gu]2o"a	409sØh&O|Ne%c/;Sɘnƃ0> ]Zw
{|pqtokg?-`#,ڳfh}
 wW,'<3
]epGEKQ;8O| !	
?b,sݘ^»p*!o+}8Png&ro?ȏJSt<P|Nm?ԩrnk7\b?gQM_7\it%wجi~'V'%_o߸KQK	ςMԜٌ2Z#uEJ guDGcQ>Q~a,p|s-U/?r0Bp[~*ZZU?E񿡉vK[`#	
th_~%3MZ
>OMYqeL8FL{H2:h#ӿ(߃AR.h+u9ꃵM\w:>#!?LIN(^8i]vV_{;}=
Q^=i8qypT
7㡏E}1ݚ:P|x'(|| y?,J!k'Դ\U~y`O,/?f2p7g5r};JL?C9}џcOkJŷ|J1pF|.Wz~?)! '֫\uUxHo$3McZ
n4g^wHǍK9=jgj_jV^S~9U|&2
?[> ~ +k\cNpw),5$k-BY^`K[?}0$<'ǃN!|접WXmC?(0$gv .~/VO	ri	Oq^mooG/{^G7z	]"Ap|Q~}zqE{UױZbߌk)g}EG(}q	ҥlm
{-Cv})~mwz!Te'0sN<iUz{Yy=N?

c=?Oo|qov+|RvY=)T:_gyCVJ|awgL0?Foc<SxV]hqmUYeVƹZi*έ-W{qZVp{p)w֕:lM8lErl6PrdgۦfO˝%fd2Lu*QgJ7$ʜj"{sYvxeqɓRS5rU5:{V歩Y9-vzS@~K
S-xE\-'7y`[[MU(
G]F]}VZmw.8h.]^vxv9U*g3^4l+u c [Dn- @ʻsV(9N;Ę:FP4ňlӟ.-XU(6GC^[V 6ﰕ:k=&%(*[ztvsC˛e˞3gQ	U~zIN:
Qx:gfsV܎";`U9p":vkn=n歪c[$&j@D"\vm4LP!uYKΪZ"&"nHtmFU%LTM/XD,W9=.!!*E:T"jl:Ng^nvXQ5K=z
Hً$А0R	r7D#
revs@O]6FsJe'_vQfJy%:k&`VPUK+gSuIUEu{ɲՊ#)Z`uڥQ(&ar]`'QϼGn֖R"rPh1;U̆Ԇf!G(rk9b"1cP+^
-%Byd72[Xĕ
.Tv=}K)+ LP/( ɂ
^rCT !5V&z :65w-{VVnƬ	*|YF0ǁpjEfd+Msx-{Ԩ#PփjS%%d7%ēMJ
d?IOB7Q+mcKH
:eWH&
D`pB*"xIJqJ-EȋTgRr7Ea$S4̅1'XdTdFdd&edHJ#E0eddddd>RLk$)9IJN"IR2Uƞ***%SH,M2&%d`i2Gi䏬xY
 E
$&ȚMHU/2DXaZV2V*c*KPd%5&3$$3-'!Y骒Tu$=$KIn	)GJJ=J~TY:2_	2Txxxe)H=MD*H)jQv(abrU(xdyJN
(K)QDTDY*TDމ@eZemZU˖iU-\֦U֦U֦U{emZemZemZeޭRQZe2V̃U*`<XUo#CYNXeƬZXek`**UlV٦Ri[eӶJn*e
*5:Iu2`VRϬ[Ze'`g}UUv	TUGd(~ªLu)JTE5d|JeJꝘ$Xe#am***;te(9QH,T@?i9IALV@,DY䉩*0)"K7QlV(*jlC՘ST!K5^IJR}iզ(idI%L$
2I(ID$/I ]'SſVVUPdƓEO-<Y4dѾEN;Y4dѶE$,$"N:<IEa'L'Oe,=Yd(dɢ%-K,T-Yv]WWWP)Sv"R"**E(RHБBO+䜋%bY#&N7b"7C`B/1	ؖ8ij ;Zz+;Yg`@h9ԈC&zD	ʂ?j-=5	
@"ſc(tN-c9Z	mi&\꒨.Q7@QNeE?Z) QUrГ#ɉErBᲕV&+*vWiM;Sm
j#zPՊ]TQNqԸDR[y	AXUxkk.VQcոhEa5RT84uǠ!;]ihGEqX{h(%Mbe1676.)
4k\x/V2"馒];£UTPy0C3rE62(Eg ZvDsD#Ft1r/4KRSJo풸E
٢Ue'B\,+hǰ2֊oa],VҶ*O%Clr(@/xi3uX_VҶy준z܂w{hY 6KPwQm	d'5l)pwܤTRpvdǥa&'8@E)ث܎l۴T"zQ@T!
#a,"ots	՛L IIU C. z1G9r r f9w!9vˉANHBγ<BΖdINSINIIT\ZΡZΠZΟYΞYΝYΜYΛYΚ9IIVYiO&0X^XV%t={C䬯tHiT( mmvEl]U[!BZci 7<ʗ)6RG
!5{YaFTaEQT58ƠTZ<Z;IIЏ{Yx&3ZU[sz:HoہSڹOר&њvF5IR_,(O>ӉJGxu8DM2	1DWTRG7ROVQF23(bSߟ  &zC(cNmeu]a RgBi:rNY'Ж:#ieWzP: w Kz:ko {ie^vfM)(BW9Q=fYf5Uiv-U_߷f,=5"m`*APk+/ZU)Ϭ}
.@T17''<;c Li%f0*7Յ3<zfN)9rJSU4=P1#Rp{ڌYٵyN{R}u
2BDk;wijs~}z7[k[\k7E@<?<I1f5%T*kvx3+:zC
&OM\9eM2{4
<IER*>Vwڄ?PF+5!<#aPTM^}ڰrm	JUΘ!G=,72VCzf9DLJu㬌Lc޶ܢ@CIWRLDo^
=,a0жh]<S/u$UAӖ_{'E9Fer`X>]ZHޡ{<gewKݢk9M8r/C9tmfOȳ).eL`#CŃңGxJ&K6cmR	 &
XhB%a"7+v/;+LxpzLgrY+ZlYkE6h4 Gi`xhNaA<)ܬ	)Z|O{(DuFcQ0@OUx%pGm
ll_FF
Cvq"m	Ԓr
N% R;z=UYCeq5Vl`&5斃KdYy6;ٶǱhl˳ZR:4Pb
󽍊Z?)ly;THHC5!Nǭ-QԻ3|OrޭCUHj&":ʪr^cyD>3tqt1d0f/ՏW!4ۖt
b?t6
C[,Z}@_sP:^𠩾0=Hkȳ6qJ>]5C;_3u=(;
ZCM*XK㧤άQCGbO.n~msfgfgɶΚ1-[>|pY"gu`t,K*M%n_|Vm+:sMm=ЉUQ^688;u~,&?zțvOe{ӳO"d0{Bt4r&Bu}JKv/GmekѭPOu_c4͛l	
lE.MI	hCZor::jg쌨Ր6-3	f_U][,:;{1tc'½^W466p	qD]+[VkAT;LX4ϚgÂFVUݕʮh=}yab^Z97Oe@̘ŉIK8(pz#="Y
?K@a'ߐAu8^mXiq3qH/d5[j,,*ހқL)Nҝ#,wc<j~SN+}OLLâJTxY25%YC^
ݩ.U!ӷR]=DJ9tQ=5^-M̀SwlɔhޗWr}[2(r޾Pr[26ɑ+P~{dBQ}ܮ(?\2J.ɵzTFU)DMH.pI&G%sݙ#Z3tsf9<\l4LK@.Z{rer>N|\#]]N#@}br}͆W-Z9f9ovhYxw?yN8`Q_G6|ƟF0>RXn\(N9cr~{:`rz>FY9Wps9CQ.5wEIM۔Bm2%h'ػz&eΛrdR-f9PK
    \               com/sun/jna/sunos-x86-64/PK
   JX  *  com/sun/jna/sunos-x86-64/libjnidispatch.soUT	 5f5fux T+  '  	xTE?|oDQQZB d;t B@P$NO'6ь+2Wg3#h܃ D(e4*jGPㆈ@sN[;>{|.SUN:unGnR\Nۣ$lNPgJaqQPQؿoOe;q	!_VՐMiR|TRaw4P];.}yEEԎs)IS<i<;C)
"1(<FT"Q/:wœx"ŏ<p<~<Gq!)>BqZ}ĪIaMF<z
o#
1$h*G}%1h?,j`_ABM?P?ާe=np3@}FQ: l; YEa.E):(!l= g젽EYa`/ SQ luaO੯(,:|_<z!
a;!^~p2*~E)6C،C=@
7&tAs`	A	^ (~!a;
qSaw(vqaa0Rag/ARQ0+ ,Q!(UAhr!}HH;Hqp2t ,$HUB39DUvC
7|`(!Lu,%^U l* *z-r }HUɆ||֍|z!3TŊLȇXh'gf ~69pģ:{BXa9}U O|h. B*Bh*
*C&@a/!SU%0	gA0I6@y?Sf>/S^ƀ!Kp,N: la;  6_*!^խ }k!^
_Ba7	B`BXꁰMvU^A2?ڿN+!=z!Aa<S~#z!,!ʅ
q!<ʃ0B:­vB4|L ü~3+E|!
터vC;7EA. a3OCa'*!诪 !TZ߭P/I@8GA lp+o Lݡ*]^|a%qC>gA0lf!| B듪a ,z ۟qasPPP L1EoJh@ 3	> 솰!l}B?AxB/I!? la+EC臰M*BC a;V@~}!1~@1';!T.~B/? a; L=P!> Bg;~	;k^@XpŐd[!,P0f!l0UR171U7u}zNf{JvA,20tfV@ވ>(kst}LԊ]2@XV%<-@gC:;e
T<R"L|A
H9of(ez:lGyQ`a;Tfu(x]>{<c!mEP?9Q0F`)(?T0=}52MNSب%Xd<iqn[tSAQv 2ѓ1rLz3uAڮ(ea
8 tE;AbێCzq?YEBâjQhH~Fȴ6rmm/Nhx&aLgOj:+r((r˙0eU =^~%'~PB66>(k}
-@ dQ]D&p;&m^ngЧz4m9 i,>3t@ -bȲ:;@wTCM
,%E(?n%k/L,60O.S+&
wXM[ޗEm|5l#`^1kx/*`XƮlڍݐL̃,saJ2Rg,رq|\ۏm,<Y 4Sha(5DOt/@.N!>~p5q嬇r*d=i4wXQNa:X[g~=S^m܆r5+1o,9K7J{x|<mgߏȃr>yf}s(gA"O膡ccmm*ʗXGT
jPjn<֠
bxW yvP?K K=\}YHOe> >]*
j.H<@QHszX <ςO+җ</$9 V	X舾W}Bf!}+(~lU\eFngUj33a/?$u6m~Hcpj@}tn鬐4TN	ǵe>ƓSe=hPSO0mSOM74fEɻ4Ecv2&M琦~gr~
~<,|Ok泆DZw
R
4c`*k!Mf&hƩJ
ڼ4G<DvxQTm?C`	9%ъjmZv0~].kt=t@W9LKF+ [tˠvt-@wLEs8 :G fK8/ŌFtMWކ뀀Pc2ЍjtH{	=@\Bz;mtۀ.gğ/E
WX-'--_U)4u3y_5h#LP-h_KA
%b  p>}x&hu~$Kf$ Kh(&y#Z͵{]YFB/f_p"V,YdFb4#mzP~ +fUL&cNP660<}k> @D
x𞌪aOށ|m*uAPN.H_/j++0BAG/Lz.Q#%3^2EnlBB+>8W_Cڰw:uw6I@ʈKۜ*]ugr>Aj8_I/RJz}@wmBTܟv&=XAzpy!Y/(lFʈZMN>e9ː._g5@3yfY53z}+Te,Uh[{uc׎V{g{KF۫[x_\.xZO#}]8]YyCWר׭ѕr]97иe37GgǬbV40Ok{jayתåYV݋̫\\.9jbnF>azV
a}V]s'.\_E܇0_+~9Sxt}xCFtm,XGiJYռ˯ⴶx܉/1-^H
Ys1N=>xޥS0ԇN"8ItXwHt?W#ЧHmnzyB³5ҞiYjĀq}y(>L;<ۃ>*nڶ;
}U%&|AkM!#
`a
qxOiЪj ʿ;Pa'z:=A֛lX䞨gQ/.KU2<Ϡ~) GFsx%uٌy !s*?'d{%`(CV$a9[6c}Hc [,aޤ)-lg#`a}
qwW?$gߜ{{ȽoL~-woFƮ/[M{_b`_`͔ip<OOU*A72Nŧ"T6'E!.
^xִOj2$Ozbי^}4Uſ
LF2L
UU~d[OGU%EW0g4rȇzWòu)vM*s6+*ei}zs[n$5{ς<O{f[R͛ѣi V;]QOUsq.!=xstt)OJh'!dl&,=XB*/I}h}>LMZDMnWS^b&}@;YU;]֎,|S\ݐ41nߍ9Uy5l`k!4bFԋӮ*Oϳm->O_ 
ݩ*gS[} ;,ŠWk:y*ײS{sfmͰzLKþ`#,=-ژl0Ж:+x<Ȋ% Yέ~5gўVZ1J[ӠڳK]/
_@{0=lvs9L/Ɛ}w̋0?
hb:THW(dE/t5'{%~ɏg
{9u6Vʧg
hc^yih+yA=Ð'unF=)v.$Yߴϋuy9C/
h7qx{4{
 >&m9B}|]봏'ڑGBuL_S^vd`*H^"ys\~"hTxNYEk_3)$Otm8]Y6CyDgr?U}Cޜ~;µ^g? cxyIC$qt~>nP'h~5
[wxv
}[_֞OqqmD|#7-\Y}
?>`I5y9<Ma8(<^a<{!<)R'Hpj:EY5SעZpOJ㥰SXk*'F
(I!qO(B\#6I)|N 6{{#_7Ex<Ǌ>cF<E9?S~=TH,
zo)J.x)Ba*Yt%{L_aJ,)|mp u_)\}
+)th)=R	SGB<;7v<F	U:n0@aД~;0~Go)l> #D{DR8/.?.~§yf2#|gK`∊,4{ḯw
?F	ǳw%O­Ѽ!ńxws3W	/ 6g^FxK7Uyp7rD?pǓA3|q'q"EKO9ЋW#-G8+z!0p{M>I<7mo[	O"|'	T؇x9.lWmH]>f?W4
FjQ3^FLJxGU#Drvz|Ex/ǿ&#cQC|j}pvp`-h7	3ṄkE9;xyz}DBb.i Jt;	/㈾EI~O/%O M»	}<>w	o@o	gA ~@HosD½xI!"Kz-!p~Bg~>\VqKGOuqw	>	>Ġ8"pbKAԻɞ
(ҟ^\0%x:PGrV݄ol8u$ʿ9}xA?GxG^N*9/o!	oO'Pee];9-ǳE<Ex.%Cyq\9̈́/xὯq|!9BrsPy9 q/7_o'3ǐ|HzB#J~g@sanŚigrAO9Ko"<|*KvIY/%V_s`~Mu8#ńם丘#ͧu⎕#%
׾%E0tPzoqqDnrDZF#	Oxǅ}xڕllI*Q#?C?oSEx:Cq&"EeBtX69WI˹~Z(lN=C÷6o&ytDI9H?xSǓ=$B.^ϝar G7'?7+_0ﭴ ]z/4kloN<WgaW^V9u(?P$o$zF>OMV5t8ѿ_`EDN8~)VZW<*k*j/_?<|D!i`!F?!FE>[3h>{Ox8IF]="RWqz1I;dg~?"|D8oypBͶ76ľ"*bw3֯y\|?y7E3:R9/Q&=|;G?N*/!F'82/8}x\3nWbwVÍPпE	u++(cHnw%o׽DBGSypz"ѧk\MI0O.0-ϔ%[$#~H.NGO?	Fs0ţ.]`{qjTxT|d(g턧Z Gc|B8iB߆q7h'F~HD_`٣÷kA|)c~~N}Sw}+/9G~i6ٍ14/ɡDMX@yJ{V~棄_on[ญo	/"]H{n"هi~$"ߊ],^48޷'乛ȯvf>?NP1K'F{Fr 1ʿ"oa^vGOqv"3^'_xfx)D@<2RiHSi$i[}/	&?Ix]'Ln[Dڙ.![yaQIFqG/: ƑVg&ᣵ-M&|+x-#I{Mv9,&w9iMrXOx9b<Ŧ~3ѷ~bVh(q~8׿cS@=иMr o%L^pq\rh=+	o5aLuԿ^="gǟ2ɻ|E('{d|"bjOEIEOY몬u,w#זww8Ujۧ8%βUJgtծWJk\UngImUEX)skj5
^7P&ƵAq;]JwN;ed;s/^XeAA2,!UC쪊gWԸE%%5nOID).,Nh_[SuuzdIj)Bb-kKuh%v%ϵ,rj=p#jOYJeuUYPg*Wo5
WT{X>_^v8K\~RY[ٔ*s{ka> W[gRq{
pt*+.w݊ZCu?AB'L.4:,UJ*j=U./Y"tU$K*KknjϏ}6]WV\:*J78]5eUnUUq 9+xdXYW)RnD2
(AYQ%*U.[եtX(uʔu%\5NӇrVUuN>.|~F+ 5j/zK0ds!
5 F*Ź5ιUsqӴbw	E(
Dl2[uIxSJKSJ*X!rM<nnşOL50NWqE`T2T 5BOUgvV%WI	Q	
⪁agVQU]ҿ"#^NTxJ0b u48&leNaܨz'sIbDcfEUa嬮_0fׅէ0:}0r"f]<`7P de|1SYa{=l5fp`q٩ru1	c'	F!L4"ag-2*%ͭ^i/iVì1V֘*G2G%^79+&u}	X67H!7>a9gTb1k*%oݹvq-F}-*fj{'DXFCN)]圖眞eM`y(܋j.S3^5̒DYWSwkQZ̶Dp'X*;(5*wm ́a2E5P%d)΄uWi,&22b(4mgIw 6.?(Ae3X?wJ
0}@͕{JbaF=KqTBfjW*^=NRq|	Ν8Y;iX	X
Ksg317n7HىPwM҇scQfù(7wIN0#ӑ%[I5npA:::jdj`X%x*$C߆z>IuOV<Ph^'0x=^hTq
	gݟl(rP2l2Cł1XR]:\Jօ>6'@ռ`ZF#"I8͆49e~1vp VG&-MXڀ\.0t?/7 Ay.K=0K|4j$:@zj 6BhOLw1P.
(.f,S'kMa
[f6bn֭v@lj#)hNBrlD[{wb.<>Q,JU2e5< gJS&KvWa(=kX$d"rNoAZ5ШwJzĄ3e4:<
W?BjA[Y/֧+U\ySF =7?Yar}0
aIcClؚ$N5Hy{Zذ*wYo|zG;/^8/\1?G8YM:\E5Rɒ
U+Y~nҰ֫^nu (gj#Zt-lÜ	Y]Z6Wt5gg+"RNOI:O5pWd}|Ev(XD%JՄڶOtHI/O	rw>AJ	Pj47'Z\^e{˘M
qoha̤al05β6|[)D8W,Y*gZʴiA)ŏ)SžuS!Kgy*1)
|5Eùˇ(EM2cTlƛ)ɿQ4*^9%:H"WRl"qa,ֿDsMX×`clX.~~2¿Yۺ*x ?!>_n`x0 ;퐮XNxdᱪ߽
Vwxå)LP?S&~l*6O8JtT;qhW</GNcx7	xz~LCqP>Y*b
iom~Pw~1G
?sw=Mh1~_G#x
"qG@J
<)xg ~wa<3nx/{. 
?rOw
L*{
~<fwPR<bw2
vok~<"d).<_9x	GĳE7cLxfH>5B܃0xMs+x.*xϰy8ޛsxg3JxޥwK]*n	q
wKT.[t1N<u<GgIϫ+-
M_}o&|&.Gx	?:C&^"	&\7]ǙNLxcMx;Vڕl	O5eO7	p/&&"r^@ׄ_o	3dS	o6Ʉo5V[LX·[Mxc	o%݄+BM64-wn>7>7냠ns:04^(j{)nw630G/2ׄכ;~Sf~ѷDf&
8I/䪚Mtz:/.ez	:[.9E{%>e|Toۤ{В%\)A*GD_ D_$2-LgIz	Op>T	*%>da	/ z/"	D%.	J9^U	p(&	T%		*$E«%|wĵJxI|O`{.)]p]>Y»%y	I%\+$8N	&c%|[%*.V$.;%|_-u~ov	opopHxo$U-m..!HxwuIx	I:	~T%:TwJxAgI.%&)^ s%\HIxIW#%\WN/M	oU	opV	o6	l%C;%|wIl	pOI$	i~Tc%\]q.ߝ gHX	V­~'K%<U7I,	I%\K&῕	^].	/pr	JW=^³%N)i(
HQ^+㑞@s1}S8?~WxI~?Tq2
@s4a)~ڴo4,
ݩ U<
8OW|)џ͕'<?P?HB(~:<|cl#ˮןa0|xs-<R<ҳQٔe*9ufPO+gDN8Vo|e7<!tfρ7>w<~K >xn}<qCmEk=uAsh<2(P]AGzI4M坠oP
j/F¦8.ǟ"}XtH6=JN>8lN{P@Nן9J3*+౟=gJ=sq*wß{Ϸx.Ue; GߟCxN<L <xVN{(>Ѓ_[;hJ&2'c|,HSU%Th'<oI5>6x ET!xbdSO<gPiLUxKU.x~*9sfJ3yg?<GUl<3O<<9->s@/9*y~?OL.&єnw|>3?3y47.
-^7<ᙎ_^d}.GA8@eޅ <w3h>q\27<sa<v/W	^*W+w Ky3Xũ=+ZZYWkfm-d!ɛ竮,zV~ʏuY]~w^*S6T[TVZ19,"MuVdsa*uYgt q:7juUV [%ϋYsšlg+
r.ZMC\I_Ph}AL$3OM0hl 9ֆIf>Š}epV:z9~٤ɽUQf2(u`SN_EvJ>qDyzzy5JＥwquzwco-L]qMՎK:/ʄߘ2@Q}k|֪Z<a@L.p6H?.^wUxh1J9Ym>q]d2	Z2_>)T9+p8*<k7 d_]&.(+|(2Cw)Z#Yp~&C8\T!Drtׄԯ\p %Enr:·+(
M/7	nP؝"Jė]mT|In룖F_Za4H<{Y^wp)zY	I0Akxnʀ[YS k8(n`ϦI3bNy
.<ESW^QQ&٪O={zK
S:}\{/GKC9bkЏ%6j}y9m9c4P3+2+NONaFd+WӒ>槜fϾuqxK?O[CՆ~٧_)>9M:d?O|w*:8rk𡍄UP |E$+5}=En~D+2~`p[Ĝ|)ETwrzlt|y9?ޟ8%}!婌q֒:T__mM).j
[jZ2*DGrXjZүVP=ofٳfNO:U\\2cgϘ9dL|غzUgW=64VЈVO+S?~@GQQYNAίOZ)vՖ{:6RQ."f^1#MZoc]*4M][l+˰ӃfO:]W[Hѱ=&JIvKdbr-6~t?-&WVv"ۭ)|JSVHl8ʡCrH{i$V؆L_[+w{ʘ_>ySk*, Cdes˚s!
:=.틕k]5SU^ej{T_yb[c$Ғֿ_G7*`[f=2D*ݰоvx3'ĮgĒIJtTv,E%[X
kge\޲@^嚉%+qnշViύ
&ǖ|	 NLZ[~29HXslK
%#<L<<	2EHLwn{nZ@aU"-zQU#~XWDKpx
,x_~Wɥ_%"
L- xO~q@=e\~%aWsh|iuErA~FE\ХstݔFטhWʲVUKj;ڟRYU![]xDT(px#fҽl_/)eyZ[$QLS̽DxUOETIq*û!f]cU
2ew&[&	ˬt<27ZI H
H9RKIK8[**4XOcQCfR!iLm
iSJ5p))аTWy=0#5nBhhH,Ȃ
74l@1sM_vz {Mh"C|1[\'["],6x\tA"
PIIA	aA0 cq14fd42 ~o 4Êį5aE+R<II\4&~cNB5g>h7q&;JDMQLLt'АLF)@1y?>I᪟" lp	$N\=e
+7adDkfG<!fɭTn)rV}OI'[ךevTqWnK5r7UIm-ZY
Ep%
WB՞Ҋ2ĸb$.cԚ<m>VV#o3M~JO7;xk0`{Y|50pO+8ia1]{Y+ñ=u,q<yeL۞"q<S0tx''`XYlu
=	,>
xGaOOzzOb<
	,~,GY1,)YYoaL~z,~Yaگ.k?XY%g?1neg'1~>k?XY/$~YY_b"~ƓY$~x
/a˛گگSXKegOcgUWc|:k?/~L~,>?cgic|6k?O~?㗱(egţ0~k?[ y?0x:k?~ 㙬,ƳXY5gKag1Ob|>k?6~,=_w`b<,~=c~_+YY|_1^y__s0~k?mM ٚbY0騭舵#m'Cm|2+=I'm;OFy6uՓ12u|"q]֔b|Qt!MIm;Rm|-[}jĞ3_!j>
=_ u+xԒz+KUɸvRF/2G@R`?ky*.B^)CW>i_硏o-؝'89,00qHx/x-R}
3Uj Ɖ[L9N#㪌eK3
큓Kmm2^vE?hh44La#qn`isp~pP4M*K셴2Խ࠴ϱvG؃g؂w+$k:pڂ+;low/ơ͸6ceuΕ쌣Wt6!mNm*ɏܦiM9jhVoa:!oZ5y\9gW/98"?-/z2/
k#\V5Ԏ:k^3~#҈7Ԏ
wz>"KWӄ2v~%bsbKb}"7s\7Vq>!^xO

/I<EO6'i&zlĂ=9!hmgp
nAp* |4HQum׻Nd-(T5}u4б=2d[7@mVGx##Yn?T$`ml54SDZ/0v[{%&8P`Nqj<<3Օvk|90D M4?ž?͈yISřivh47~P- 	eA¡-͢0ۂ4e__O
~rfI1gهYi $9fDV;tCMx/t?b Ƨsc8y7F5AAH
 v>+j$0÷1ewv%Rzlô./Uۂ>@KdWt$U9ɀތ_bwz3C8?g_r%Ct5Y{bf(5I;(:$ܕd$g~jЬ0:ГԆl9ݍY`N!,uc7>$b?4
.=-
iv
_ןay<>\

}ٻn<llmM1Ͷ@N(sP
'A
]nVٍwcGлgb)~E__0\F0|B^HMp!DtVm5e+{mvkIc5\挗ĲΜPfbPn(oA5Ah@i| q9 ?l3l^dr>
*(4ho3+TpIW19`vW
/>b1|߅f~ld;;_-8j	Y{gըʡ!ܟzHCCi#~#	CHl>=O_5.>S͟Es^3Ck6mq+L-4G#W?og{E+79*kw?f3Oir9<Z)=NJ4x7S#aihb"s.S+ctNZZha`
F fVNCë؇؇@́߭vڶcn*Wg#nCmȦAXa4,4` B`oC0V2ƞAh!4djLaAa!AE4I LN,qa=Sf2AXO%0?
߅A50nPLװj2EhzwwKb~,`Kk=jpXfv#X"gcO_BYNrhG|xFai>n>קw0C<IkvX/gv'?Ћ3'3u%3Q0ۿlN9PX3>~v!h&*\ޜ.$A7t@n?]Ej;>
|lԾКw"xy_!â
 G[z/ iC
GNb`6b٨lt0p(XYl<m`t#<10f2 ,d5qj7bXB~?61o>@<ϟ:@Mb )dh6yyGGѰ}Ot+Lkihj~G0@|wqC{vS
31cQBUx
.!s[[F#[ɟ=hSԃg2
Ś_ǂ ET}Z'
}3ٴ^A3cWoOP67t11'!SfHVU=߈}#,䈹;d[<6hN\?sFr|e.qIGk\7
b.l5a&$-eI8k1m ;8dNč%p~!rY}Ln7k?үFjk
H#h2O^JQw5Fae5S}@?פGI8z jF;ӜсxBv79ܲ|P|W
m÷9Fn)vciFi/qr߶L7 ɇshK󷴔6XгVS⋑CA~ĬmcPrifsg97{1Xo_y񤔻8b~ۘ;1bgswAr"~_n"&7h籟iˠ
I -ÁsU
S̞MKb4p	M~\3E^D?~Kk:uw'q־ӾԘkiڥw<m)
_qLetKcXhJOdYZ3XZ,=OF4
}doeФFoD߄;ri}kɌ!t9\2NA`LLN#CNawM{{^m~V{m.ieKW_읗ᾧavH3'a?(sGB˜F~Ʀ_"f$dfM")]/l}ЍI%7'ynoŌ9ș]p!Vo=cL(g'Swu
Kܔ :><vs
/-=mdJY,\u${p
+w5[*9FͯRq;w&w皕=`⇩Ɨ<Kvΐع?>n$~gp,	7%0Z2?@g}<KUXI4R3йཌྷO``,iyݶEF<J`K[6}FLdF|9*`˽-;z+}}lu]o3wW]hCag~,9mkؾ;clv	Z ?^td Aє
Im@c2 kʚe֠;
Vio;L`MNzj
Jr`[!QMl"T=d/$%RlH753R]Ŗǒ0'&Uv 4Vi#Ts!E;F0p$x6ձb_~r[G{1&/0&g#؄:q(85=c7?M(\G)Z`6?qi\m `b&76Ġj+M;[RA8BWhT+qoCeX|Sj8?~cyp\cT}*9&Knl奎L;	W'*i/ :2, CWD
sqm\lYix
Y11Lv<!EmuO}УBz;"Yt{4)"<p␘	0螑$0XnLTYl m`ς:T&^`gR gqm%qŔp̬p01RlCd$dD;!/0ܼ^1g$~(I	\O22?W+/^aSd5:jj*2X0֍-aQcM.|)N-'c3p?;[a>؄&tϿlePd9&h51l1611n}aP*/wBSHx4ι),ڋH8>5}ܤٶ$s`O!	Ofs~jݴl79jlz)ww~} 5X
7XGYf?2IK.G.yZǯr{[`/ŐНչZ64 k3cd=<o^k"2Ҹ(dhz hLMm~c(vGGazӍ5&xu$QF/ApC	xuv[Әݤۚo9K@K4f/`I4&Y^߮؏{~$->9x{E".gW}_Oa_ʜ;r6:☛ljۧHy{&3=3{v㼴"/gڂw宍!M7`(DowfK#Y6T_'
&41ѩgz|}n-,1wixg9=㡬^- |}Ҕޡٽv--<z>y#V<w
ߙ֋}?`|mxccؒ\P?<<t{"83K#IAWx-HĴZBJTp/_j56Z:1\r,19VFK'VP
=Y9
aI')	{T数Rבʱ4f2O0)lj%O>u5Oe/0ZTj0~%[-ReabE˨Ocf'6lxMWiG:߲M|} y T_sBXIk#~~BL571߯ZrHRfR
QSoR~O7282k>Ezi;l})O#yUk8X`O~.+~!+K`4h6}GNtx:e7?H%l{A`WV`]@~kZ쁓ف]}Oxd vN7;Ǯ||}CG1<sFb??8ח W'H;^>}`S,o%^bwKlŚoKzߗץ_yQ~{>Aߧߧ8lçxPbnHLfi8gqv#O{t<EeHq:}ݎoq.A[k}w6aU
y33
'yi]15t/O`6jI>
I|͘}h<&y7n67rK
̦Sf>|(3Cۃ^빮CczX[
m6mn>YG%eI՜`l	؎eTR}6#<QDtAKK4UdNp|\~OO{'(l8&-;?W$Hj-+}{ϰ<lo~(3Y̲sF'ϼ#5M
@vf|/Y>;[w)'H<6$f:;:Ÿs?[ (߈|/zm纑mg756uɴ#GM&Bw06maXL`'T&n2
/dۆ!FKi(9q8q{0#;Ts4oU6[p[ai8TuڋΧm`XT>55~=(r?&凚hR>rrviL
]
jJ/YMM$xqȷ--86{WA9ge8L >X|VSӱ{>G<'*j9L0l(UҌ[ڂ
>J Iݘ.-:<yGCEPV:막01"X]BGv
Dqyq_7mqdpGcBw WO?OtQ }|
@<T+Eb!q
]F8|zR;s
Qa9c~Tj	}Ϟ|ӏiô6p;zy;lz;%?\_׿'o
_/Ol_$ԯjoRv>F8cʗG~U۞l:&hAϚL{opΡ9}\*:x$;p~^X_/\ym
f+oo[<ǖVcE>*9Q£@!U\39,Ͼ^Ϡ~h8djp^n^?bm^²wWȊO_x'3RY`*s2.҈߷{`zR۩cxԺiKlڦ6/8惼^Ml _bD4dgk0ў`zQё!:Ұ8
X#8HpXXk4Ե1`os$ĻooKG{SMاěd$_HS!9XX#֑?^Ȧ&f!ՋƉsA[N0;nd+lS;>Y?ez#F* p5c-.<	z=ϟ5۾zmh$aཉ!
Ξ"׿ߋ-t:UCGk$4	zO5j"
/m}T=Oj/䯘ꑬ)_üb
666k3#]z[zRtY|؂lz.m/#5pIŦPVѻMj(-_۔(DǥM+,)1Xki-,@OC?Mýe1<%Ly=-ʎ5;m>Y'=`jgkN2e_E<MvrY<'E<e!ar]8D"&> W@YsA~~d{]'u2ŷlCqw Cm)mZ6U(ymm̀W\EK
=CϓX#"`Rse鸺.&~^vSo.D5Vn㣡n2`Dr^.LqVVsyQXMvPT*}RDiSEzjLoYk=D
c\
E,*ST~N=d%vxEV;ϕܫn5EF	~ᯑh`6-p
OUJw
B@zRbcF^-V$"holpʈ=jXCg8	GjLF}54ƜbO)&R8xգg)~e)0H)1
]	3:Iڇ
ؒh
kd^uyd _4QKXJ(_y7-#A`^P霈e0߆7Ni}/F5oW0]jU *o)l9L鑊/x+3?!˄~!GN`d?zD"MPkzhDyA; ;}nN>{Yz#~,E̫yXQ4dG!uwG3r,4_6kJ?[NH;(Krsvu&n	yQ/s鷤:u?3uL~]mAC~Nm?Ω(I,JE:skZ;'[tUZ89Tt.)7ܽj%Q:VEuY}>YVz5)0]Z6ux;tR	1B¯~V
ZK˿#2)OG].3IkuVɶ1}i[>mȿOW/6G'Esr6tboGr[}i
p7DsV4Zk% FMԤ|AwoS&Ïz˧9Ido rpǣX/	rQʶg9Z6BBܯ3	Y'8.t%
%݇𣕵Y~#"eaNGcz:QQ~b1&~EOc!?&?Ȉ1@Ώ?1:?
?6ajs745csGMn7?N6?:F6Mvntz\l]h$.D1',`=%oP&gGI,:~Asʏ15Aݖf-Fӏ뾉[FQ
Xԗ>2{$DoIQDQ:(tzL(ފMЛ,n5U#q(>6Q6{|(W@zZ?w0'zQ}
\ɄD| zcM+VMIBWkyOQb+}E<]tOJp(wt'UO=ڿb$We6*_uб:UjG_PN Ø~HU5z%ŧ0DĨvZc,T>oI~2ʄu,?4<F'j j_c%+x?\FgUw643]],?>Xax*0j*dWXKkY_1'.PgIǁoFH\}nEl˹cOһ#h/^Sb~nXnHܲXSjz=6[2`_6}ZNx)_,>3,?3$nջ,)[,FYW?+ Kһ!"ʐ2S>P,sV}w 
ŧCyخĨ/1k1XJtu;HolJUk*uz;CX{;MD%[[sxe/rA\\F_Z	~T1~kXiY7xo%UQ2* +)yDKOU+yJW?!4-}:4;}诨OY [l[Q_>?'o#08pC΁w&96q]2O cn>+GP|jI9aF
{ćʑ [Tsp?!Uߥ9O+'P*j7sQ6wA
gxQ|)TnPޥ\÷rGNLʫktzmњԲ"ޯFz'j}o&v)fnZWOd*
yaJL<y<@^V;Ս
ɤ]w6Mn0M0GFnG&n/6"}2~V2|
}B}z#N/0ؤDl:KxgNg/WG<uzS+{0j&:=t>`1eC
3Dsc\3Xʦױv`u|::VbZf A?/x?4?cԤ~?q9x|4A:"{z,P'5dt;׈WYk{4Y55?|cT,s=u
/29nY
rdQ*O2fVU+ǍA/PWܸ΍7ZչU jUe׌U_Ue<1jث_x<:Ye<#Ո(3^5B9EEfҫ7A kޏT*z#WDTuV}9G1rЊk߮!Pr$GH(5[:&zO9CZRl{huWP<yFov#r/ z!]{᯾"YVvD.&r+e!W\|3 y{:3"Az41bbUk$d-^N:41$Lɤ1}k O+XNλoi6
&yOMXq$.jgmEem84x]/x!8_.O*Fu_nK b|Y}ie!XK'eD/ĽːDf[O.d2	4w͠TSIB31S8?-3S&̢LGwʠ/tJ/tJwNDcw^U'@vdmWpYm5hN^XB)3SC[joi]HHR~5lUN
KJu6}灾S
 <=5A9Ku,mH_:}(}퐘W(>5JU/㤉s!Ă
|=iзN_ߗONr}?tɓ3NI8&P1m$f4XoEĬT*%}1'M-~ԧ_BJD0 ϰNؗ:}C^Oߚp}P#(RGd4MwCMZMzSGS&R&NQE1}96D)UoH_fMDN z:&M޺lD8POP|d*ƨc&zTM	P&V6P
zUޗK'tzdS{zxwP91밤sBwe'XkJU>`TE+걸Xz@،c4d@U˗`f+۞>yTx
>Χ*y=§^=ŧ'O1jZӑ{Z@?Tӱ㬞MD7ǍAI%¢;Pm zSmY1tntNmm!A'4/d6=&:jʓ1Fs+Dy	~|=:ˎu^9
]^r~wN[/n%H?Labg]ݢ>?0w:g>-ǰ. ;~bK
b}
b?C+vЖNj `01pfa@cD~b#M/G!L y:Br Sꏤ 3ro{3
:kG=9Ɇ=[wq\kC5:ƹЉF	#\KG4BG'FX{Q_1#m!U:Bss8Z`PscC}9/Sm__gG5(}:j}$cm1#R~`mNn۳Ku0@p2
FF	Л3wԧ5nfNx	h%϶7vk诘^؅}ElnLaK	QXT"_0u14(ʭ9:x1:qa.gLMoQYlck4{Sn3ާAV7Ǌgpr&t!I<!ݟLΟM7KDνFwϾu3ٟ/<d=)5:/>gĊ	=2v0U3T_W=cb_.rW*%W2%mՙnn_=*_mKIk0haCFb5sN_y`cűx>]\	\
N,;G_v% 	Z?а91
3Ij2.XDm:<Λɿ(=,]F$zyImz嶌Ң/rrw@0gnwD!BG֕7-'Z8 A	QwL_[8-} >dwd?3SGKb5G2(V}߫S?DGr1 J|5ome<᥵xǙ~
?ШΠ4 |%^p>Z3}=W~߁'9@#h0x@eR%3hAZFP؊Ak:Ơ4OuFP>ax
A|Zɠ]@]dP;
	Ax@Uc0F"&3hzAmŠh0^"V)(y
S5@1>cN
lXb3QAO3(A4Зʠ:3A ڧf#=V2hh}ʠ4P?;@7#GΠȁ/.6D֓+-#AFt-t$w( hDoCғuP=
;V[`Û
;tA/|fWo/!x.$bD@"Uܰ͆Xl0&)L]?Xa>w?˿G4Lb(Wp	k-SGyjnVm,43Bu*ܮ0t2{OwٚQf{d'ytz~3^PGܷeuDO>yu|
dr"='IKi+{)(!#Y&mTs֏u޿HG}&JŊebWBU=w$= 7YxG~2~+$KWHCu|ӵHI_T]9c6esEkw	qD|S?[1q\^,{7oE]ĥ+L^{+V XZc3%\3T>>w ԟ%g:0W5Rjb	w}Vn_?ēɣÜZ^ϺRh[}YLep*eOWFeKd+%M
[=%iWT<23MexQ5G5)E)5k>49>pu<x:y-v`˛Y/H֗wu|t?˦GC!DMB9
/FxzsfߘM/'pO	^)4>7|[sv`5>z.z5JGC

Ї$p>zkW]>|޷C}MMc3
傉ERqj+9y.\.ru?g҃2\W&¯_ųD(K_.ӫ*٨!ʘ@ohP{9U_mTŽ%ase|Eˍ*.y~e$UxCUq;P&+#UjPŃ?"?͡o F?fc*NLi/jcȹWFg5ނU,?IVqxV4N%x8-
.v*|;6bdksU<FU3C_I.*ĿdU|zG*L+;[UUlCA֫xl
h5JdBse'pq*C9Y.jdZ-y<O4FJG8}##.DlwFO#|CC
BF(d	_ooЗ{a3xFhЊ0BН5FS@palc*z!K~46,aJa#a'ލ"'
0 4FN?1e᷂F!B~K6F'(EFxԮA`,Y)e<8G(k@x~.op|+"6Vpnk)!\a 1|ܘ%HO7FI2NFHmMkAakc-@p1$F(!Zup3#a!2xZ1#c1B|ZwՌP'p:FGX1BAcg	#ce&p#BXo˗c,on=33B죄#Dvri@(!oP@Qc\*FA!-/p	>F##F!\Cna#Ж2#֜§\фЫ1Gm%FX!L&tVG'B}0Gmpc9-|mM(t	O}*\$
dȺR7ۥ;<Dm-{wlu@%qd?Y0m@.?D(_^]~XޭQ
^x}m8fCO#a}	e8_p_88mk0܁øE/@[rx/>)c#<û0
@C<
#~ç0g1%Olp8j<9a+o7op+_8vG6xyw	_9û8|p&Q`n?>YN,ߍg8c9 Û0|'l<k8°шWtW^ApK~s؎KxOI΁3tֆojlj$=Bp^\呎{3@?}D;s%	j}cע@0(=
MK[잔b-KjG(s|ר[h{y#Cpt[GErWm~+
/ЭTV"J G`lĹ!sL#*)hYoN^+&+/9Dħ[B`>:6_+*]v{qf,|w;ejx+wrx,X\)~n?C/Gj?^$)R	>Ws`z9#HIC
㗴DٟCn3'emͥyqjp5q2BPrg9gdL]Ei?J	䧴|,0rRh|QG	O}b6gCS+%;@Bh$dwfۤX"MBQLG/^;L|#q@B!g{rha|byKGjӤ0[P珥yb~Vqp:`,oH
U0~3o%v{{.q:M9N{}T],Z틽G/I*arűRȇ5r݅'\@JvJEWx	(e=0IQr)!ɘS?c4|݅h?'B^3(Lj8,(ơ!iY(Vy^i?k/i@Wt_X&k+Dy8@UQ&e>(;G#u_W
W*ɴ|-()*yg0JFzH1:~}gaI
&,qQt-pe!EC6zC{bհ"CKrqRHCNeWo@$F+,2V7>;~RD6Z%>LK;mq%]B;΋.Gi:цbc£Mя6%6,8H?źm!˒]}VS#&P$E`6DF%CG(q0%
:Jcx{*W`_=Z(*xYpa<*t $rުӰ#iKrN?X-|LmR"Ee
zKw'Xv>:_[{eyHӋI
InCY^qֻ֮OA)=RQ3['vzݮG!W\]c&Sp]6H#炢E[PyVW|7 mi\R+s.䤑[
];ZuGiK-POr3jBw{^&&`_o !t{
J{ 'Nώ
{0;Bދ#L~*"'X<rS9cws@ll:ˡx'2ҠFy%校côD
`=|wAq<w׭hKv='_v֕B_9~ '%ԍJGxy17||̂attI2nb|oE;{L[S
q4{K1݌~Vn	}I;3Ů
hN'p<RFT],TGGnM}AK_cX#YR&þ K!g_ۢ0R`+XMKY%vZb$6
PKj^~0eК»VqN܀xXXX B݋F!䀩9o(.<
LP`;
mkv摧Zż+wxIx,2B-Jfnea6uC+?YpG8!UŮn@u{!k>#v<ZBST$?k5p$^7&}yW>'dx,Ms"%H݄>V?gcuٓ!Yb<~Mi9:@6qV8zfSwvGEtN0:&f]̵*iQGD?lM6_-`e}Q1"%mJw*kԔiYL|_H}ݷxMmHl'#roYw̰q?CaldE:=']9neNb-/\M,.qQ!
~Ny@*zֿ=6y< OVa|JXyg p+~>rAc_#绲dr^yq
d,2rڎ)AȒR^sj-EXM 4>'\,YnFzi^[Qn^Ԩ*~F_+aDhHKn@<AzWgMmCgGn햇OE0P|	uJIp5=;|2,0r
]:
L)P6lR N+rZ,J(hb5"ۚ"'TwލlT5~4ʉq63[JНҐ@fRmNT&5~gx⌵n.&ήN'mtSZE@)SJϰHxUYDSd	ii4E
j:A~k'Z 1je#ZZ?I?.*zv-bA'0Άsf
op^4yfv9ތރ׽&>V5gm{lNhShh]n7?ӏ7s%
{{@7L:~̸ħǈ!kA̢x
*:¡e#
_ryzڕޤ^ٗ5?>L*AdL^K'I$LR][=eM Yˣ
iYcyiCNaY|UNvKkm4xU%*TK\ +q2#fYBM5t
ޤd^
tv<҈`a$rH`qaS6;(  $Ȣ[y0@yi
XAO?/
s̫|-'VKTN
YqVa$o'~r-F6|'8!&)tKj*䲱k!u(+;L<zkyxg{q7圼H~{䳽&ѯ+H.to:d=qʮ匕0^ej\x9OhH5&yp-ue[ɡF5H~/&JOZХoMQ::I!6`[}db`řPkRiV[iɘMMǩ&=,»<o kWzSV9[,{(BEBB8GIEmŒzX;b2 HH8:)U
ԬetRm&CcZ^|mD3cCAl6ŒQJX-=4L3ǐ-qjǁxoCG?_ǈ8	1kθdgaJlcқ\ ZJVv^K/ű-+X!Y0WT5nC0ڙu
6J@sc慻:~ x+(pߢ^z<,21GG.#)k#E/ΊɲkdqKQ%ht[g]ɸ #[W*Kao{|'&idl,jB2Z⣊	uj|J48!X[w`=-e#a| #MZGͽ։2ެV[HLZF{X!U3ޘ97aGb#_l1bm<d1h׊h7oDވ%6P
U.6ZS.w@,jotԦ޸1Fj-J6
Ș@Z$4װ㠬t
5npܢ Z8'֚ގʵѲ-ex&:|vwj_"ܪ۪yF^tT7ж(oSF@'c_oD̺=hg3)M0rn|(KRXvCO
<#+(:5=-=͸9܃j%?ԃ&.hc?u=mC<Y$ianꞮ+IB-^Hy(X
v4POҶ>ԄgW2W/ab8	Br62sU]]vkW:h 5gF]{gѲBL0
6̻~TsizE=L"VtpAQ*_>&JϮ3R.Io\|oOPO7~ߢ#MV;S2z9+GE%R' z4Jc_	G[sx֮?y;~zϋF^&:|-H;kfGE E8P<嚭#kɞN v-ߤ\փMkwP}g9$ɶ.J!&ͣkeVM;v *F`u s🬰SI-Ge>ö9 D4VIѾ#,{'HnW'Px-F5Tsx]@+Ė/ZYI-$D5-4!>}vt1AJefo1po%TpYAU0~NZı{E)_X+~^Ѱ?4_6c91i?M# mb9
_KzP %7ĩ*׫xҮ݁|7e[(8

AsqM"	pV_%{]pBr}^ytQ_T$av`;i
_*ۺ-qv O9Q+$RS.acE*C)>u	f bݏ@%Kh)v+~+^kנ뇷
<==j1+t"e|IdM;o9$'&ʘ޷uL(
EO*?EWw;k8R/3f֩Πc2UC*1		
w%
9#GBq}ξՇ|
iRH^eyv(U}ؙk{^Nr!Om)cf}86h陾=	bEo8K]n1ϴRR/AXFH*EA(dR@p@ܕR=LCx.-o§5XCp=a<A&ATR9! }LloiAoВ2bOCgn{X^ A0omkq	f,S.	t82<K*f[VgBWZGѲݓrB==olYR4/#:YI	TN	|!.kQ<-JSvo)}-=)B֧'-
vM v;ЎGyTwL8R+vTrlX'c*H'ZTev[hd
lY&ٮ'5wGzFC
:90rۄC_<9"ndeR Wf-;xGoU<XΈwL[kO8<r	8!k
)<
9!@
V-EBTS^#!n@Q Ja1X-y/.$2}bO[<?klC']vow
C0.۾5=^͝O&[1	®}Pt
A鞞~cܢL[=MIC:Ӗ
Y>LCa68^ٕ\( Pg\;23>]
m쀍w.ίEC]\Bƕ,&&/0.W1޲J#u/ŭy	W#ǁ][8D'@5ǯ@ssrnnt9rX(*HLv"1佐U{'bKC	h|G/)~AO2ŔߦtCGкSV[	y`7D8:F%;+d Cm'mG(튄bmׅcaPH SӅj"Mpʅ`W),xSwCY]:C:8aCLZ=jA\;G[y.;bIkAFҞakdGaV{i K#Qi`7Т,Cʹ.!8qC;'oK%Ŧ TȚK':v?t9ٸsqWH`[8N6PŠ+y2¬!oLkq/Q!zwߨϷ
甼mq`CL9+,1PWP?F4	,~DoS}oWFOg4%+΢F/QNO(}ĝR%,qZsgϢ6;_TEu 9\J-b/*q)3#*q9#qhWcYp9ٷ4{R'tAxqW\O޸e3ٔKDw*a,yq d26q<ʭIrUq&܆0K4@iw"AXЁg{ɔ!['1t.oKXCD-D
}(􆣈.C'TpU*R_4 ʩn<%r
a;UXcIBuF+{$oorGz,޵.qdx)׋֙7b[ǋPXk)Vĺn%<Y
4BOV/vP58W߀3BRD#;KgK0gVR1Lry'.;t.j<%Y_+>*翀KZM+;4{<0-Hq^pSȎ)=S_Fh`(%;*|p[*Z0\\M
{<)9Bd3',&!̏gr.P=|I$rDou''"VK(TGj`8+vB?6KS'P,Mivȶi@2?[`P冼Mn	8
W4@UgYq	Xz=iVa΅y{>MM-ʎ;eq;XrvaruD4T\C71->EDuVh@W%AyvJ:+RP^
y>JĔqnkS؂E=`+[!.*/
bn31MwXl$c`|
I2Zc0ob(M>b+Ge^ R?x5~
P9\L.
DC)y$@sC`
T(}i<[Cyv[yͺh%9_
yQasc߄4N<Mn/ :_W^o=,k	Tl וkKK"LR]][6z> 9\}od~\>p*!j>0t5j{ zLY4fgP9-Js!._@Onc]i+Qܥx6S`q\+ţu{v's݅[i-G>{,&Z}N2fH[$[<)!K'anOKmoC2jmQdWr P55=Sk;Юcк[]mm%w;u'2LXZ\O>cu`Kuz&	72$[	ge[ ۳sqC7?ܢ:'h6DCcCCՒ׸/nwߡ8އC	DHS'@#K1QTvnSxLNu.gɈہ1!8_(u۟Jmu+
_,"stϯ',uj%,|mx
#HUr|H1BpdPdKx@mS5ԳTfxy]9t29) 2~-b`vn>l3ai[)ǉ10y ,Ed=s)Ά}q~\Y[`),҅4&c\JkZnoO*,w{{,ݒ/QRGzTf!Uy/_Wgk;b}dϘs+	QۿS#T
4M},8SJ}=:e/h΍Sl94)U9+ձRʫ8qr<q,{nTQ?8 DRs8<k
*$.腬`zeot<=q~]x4T)E~CO.fEXtj(R}l2@_ndJ!D6L]*0ޗr!E\)>])w
*#B0 `Gy~nϤbx=X촐âe(#?	]}Oۛ aL8,eb>-	m_4L-! uUM$[J]~WMd+ٚ p4PAwIEi^)Hߓ
]+bu8-nK^ O9i;N&yoM**5ƳhًQiN|VJwALxG~3	1Qv/֝[p 7lJ^!4 )%Ύ.T*`)ȯ8{#vx4~v-/g:zY}d\®lĒFHIĚnkLC&B`&xiga0TN9$,D<rX#Z` d7Mg)ZX|HiFLh4v< Ѝ
SI
74Q
9LMoMM:P!!
&dB?,[0-v,
Y1t?7FOgrB3nIs:[;]Yƾuꑮ#kvl-aˤV~aCVJZ4DN@):[_h]+.?@dj
~7
&
J^ob!K|%Yv04xծZX(m/,(A'6}`[k.I;	>#w:4},eHg@
1449-9nW
t}ɂHv{Ŷ	aZa--p䤗!ߴٴ+!JSADlq2߀GW\4c:zF3PRPu[~	t⑓m\0xYzRw~ꐜUQgl<uJeBh(^hYXWz33a^_m΁= YG,ק1;܏ag܏ U+9t@n S7-0g[O
[b"j0z&;)60ggc&)ූH"T0Ө}LvNBOwu(DefXOBV8+Zi
kQ`@׬QX2kYL%.*Vh*hs,j{9\vwaZm@wR<S}&>K&&@p!m/cPIKK0,agPf{ ,heb~nUk]<x)7[p#4hBVGڦ6Sr꒙FFPClMLVaR9[3evh< <A=8B
UFc 
iˎtz3е3tC P"շge3qR[U3ywL{wGNO\VvaqanF$sx,K!M[AwhLNYktOF⣡BЖRD9f#[u/hGI!wPLl@p,ʩ2n:ӾQ\<=$J;c.DKx:㯧F:5@֑mY}`m}-M(5+ZqgImW#
CuEi89~G]x	@766j
{\}{a|ڷA*TG셹d/\>d/lQkP 
~l)<IPxxF&WP=M`2n>\Y-~99%j/%t"hNdvsL:7tg8Lһ8oDu~TinB]36e1ނ? vXlJU2%r|u~2JsyMn IN`OЅ9aa͂CKQ^B)Ƈ՘XӐYx4ω܊$܂qwܰf>Kpo]~zrV
^k{X|:p"Zx8cESGpy<z`S%pr%Β|.
s9)77[8eyEmߑgq8spZ5Yzִ5w߅CX!emWyAQ g^4	'Q]~ᘬ1yNyL"[㥉|Vqci,CJZ`}q>wAۮe8,!73cL6_PQ;WSI])6; .ud
m2F!O>˾F={3yex9j<kZ? PǕL[/wn/_@'8<f+jU
Y4H\	üP
rƺM9C'=TnP.Ƥ>0ƓS
{
o#scXptIRT3C
8/c\dlma7Q13XIXh5aqWvj20=gg=r\dyCI=$Fqq-xDsFuqs9aDHT1,A;#4E`5SGidZUߥ 1=pIʰG:UO('G'%.
쟷E[z3+4$"
;7=*ۍw% Kg=MYәd^bO99
Dd	ePpY@h%X,,nni<%gpAһX[{\!'[ ))r4vkS|Z<lGA71@y=kvcώ:keP%'Y'ZI{GMRoH~$	 xy[k
3nFf;W/@W@q}3MRtM0l#Jn:jrhJĘ	 wƳ^mw׏d*cOuu&2W[KH~3#Fk|UdXgGm6KʭueW
mMm%Yq\?wTnr~'xk5Gs=X#BhgPCy~V|qBhJd*]]| îD!k [S&9bym\gJ\bLwAbãu.F	Z  mC*1[~wOf:HU]$^'Lηja~^c@+F<A1V!x
ǔ<}&a]{-r_H
?j4_Pߑc݁B; ^a!t=YkVܱqbo ?[r	ZOX!*-[A<e! BAD6֋؃֟3oaր+Wj_46K.2Pk'x/K
#8,bxx!E0p&6PsU9,1ux)pO30ec
J`6ZwR?1=cItm-Z?w?+r@%hEJNj5-D&%uB8vxP$.QM-oCKB5pcb<g֨Qb=trC%c\\؇>λzˋ|TYCg&
[N!,-g뎐_\nf鿸$WS
m'ºfd&>خOF}G/JLeʫ*BREڑh[Eea-M&L+
W6y07a8J(wb9,> E)}<?+Xŵ^U\5j5\ٻ:iGvDoM2/]W/ɤE1M(o<M'2d"#օNZJ@^hlalEJj/8ֵ#ێHu4IyM?J-B+nF.~eFIf$Et
q<J(dH6g4ɻHZk\쩡\R5lCĥBw|B<Ilr.&~p7½iw]2)'_Zg-脈-ziC"+PK<Sg]Trض>(pKį#-9^}OW{\Iu itg]aEGT7<R>qUQRSS$}X{0#9J>]6]=b0Q	N.뺪tXģ<EYޠbzKtfh=1Fo5ZX!
Gj(
)r^c$.KÂ_qBC+B<E9ZT?]+R-ޥQPoH!VkKRҴk82ZCQ%e5EbLQ9fMQK9)j>GMQOsTSԃTףDz4nlؤh!+5=\ex
̤ӡ]֯<L& N'F@IM Wi5Tˢ,!*,r&O՗En.VJE~58[5$Ft 7Vr-kk@	TYx*Z;{Yxh 6}=
[\rG~ƞ&?fE ]'w͙q(c?M9_9`W)3+rC	.Mrm%vÏ0tt#Pbz{doN鬇羏܂hLj=R9ۡXQפ03/ZeCa"<_&x|SqTiy}Rޯݣ
/}gQ-$nӞ(O@˶AP0<to_~L*@?K\ZЏ&~4'v%S@R\mRG
q|+4tuZFS0mfF<v
F\m.r>iB(2WO^APvJ<7om=XXJ쒣"TXR̃"𓽀Zs ХTT|8Y!51plBm}`vTYa[nRurʞea*fZ8v(ȔzWKKPD6'	eHUr梺2Av [+Hқ5
]ʃǾ?@^GJ73ŷʂLXxE،ĲҼ_T]KK?7!vlql1sHRpO3};|\$_{<Q,[m3MyCģmRl+~&lhvEEH8R],햧xÍ{rDkM*
=#YMB7v CFNH:!ͤ
6&Az3Nfaq3
QA(%#ƕn"SNt|y{ԩSNUqiK00ӺC~@2OҙeY}~>R~{FG25Į[u	U<8bzk=|#٩7 t;<Awc!v`2wn*.ߛwy%>Ƈ4ˍe^{3b
cs<-߿:zL:3kfe.%6-qf]1I.H0y`r~ q(אL̋6ȋ"/ʋC
|'BW*۵ݏS=PnGo-j"| FK}:CفrWҿ+C}uM`uQkρ&|6i(Ix­َA];dܑkAumvOVWfKo8_/s֎ЮήNsg.a,ӎcP|5{}&<T{)k=>vƻ<fq},ۓcRPoI+<tϠCД=f}t͛X8~H&s
oo;Y_EpˎBcަNbHڠL 'LaPpv6gmHdkV]|hcc?B*@a߻;~m߹#{l@;Ġrڮ!Wo[ r}%bNkxEEٌ!w:D0焟
笜noǞ.sT/tls60FvZ=gl(/U..n
NoOESj)G@cL3.9ItNV<&b/xpe&;8%l5'F~/#6'5~4"ڗ'ƛvם
vkZ
eH;2S/93ݎl2%s
wE/|LK[?H<Syke,H^9sk~
ק\EhGZAxǽ#m	8O%דCy\DJ"%	[njߘw&Bg%f'<լ	Vo<`ga,`2b
KFw/2X<~A԰W= lwש40pa[݅7;voo^w8⛶ދCQC|WW7ʄ*[n:yh8e:&u!8h\%e&/h+.5ﭱ9(QfƁp[tkKZ~b1#\.Juv]o@16`ڏγЩ=Q "7Zspc'3ǠJYhAf0uv/eoGm87pxK49vgp=`OfUt.C?J3DY^VgoמQ2N+~@DqIg2;-P-yRuHM則e'{+MOEIorVز]9[ 4)f8nSΘZň9xhy{|a[aN9qX J3oCDp}Yؠ&tgImqMOruګg+3ήg밣7x')F\0yhn%D5(#Qrk+y/30dĽhfy[m퐻]ExmX̓faNkӁc}ؿ~=Uyw8a][3"iо%>tO<+g3|ӀBl1Jqо8vmpp-zEўkp/zA\shjEk$^%u26t[AϏ-sDwaU|
.Z}k:&.oc'KB0L"*Rck
.p?Ok2u->9!ϧ4r	gyv뾊D3۽Kn\GN̋	#]86@`63s\N1ɝx:h?]xdk-(/Oo=_}F'yLQgqt'A[SNvз>k7872/BCx$j5rWܽbn긕b\|Pl~hy/­aÃ/JA'ـ.P ;6!AiVYMyYғJ?{x\?+[2.	]c]^͹Nu@OHM_wGn2(Q!;ɹ9Vr~FN.9!'L%:r&+lbK	"#Ϝ2ܺb
<6uQy6nqŕX4](νQbz@hY]Q`\iyŵJrW4"Ҝw
60]T#T͕O~ǃB̮Ww7Er@0JW/2L_i	4mFgs8ݥAkФFC_g8سrϒj41H޵<gql6<;Wgi1&ON+5ezl~FhX2h^udv=hh2ٿYӉ;Mm{x77ǐgⱵ8f}~=λ̌+81K֝bCO@zq2ɯ5ru.ms:/"x7Z:ҜVꨉAh..\nQ}N'5b/G_dfg|&.W{T78 䠁:l~zS,v:(19ԠP+q|n1kPCy{Bzfƀ(#9qo:0FUU*j?ݾ$՚myo7=puXfCBxE~; `՗'{8'~.ZH;CAu4Ik]֣X/hF'LLC3Ӏ01ev='ؚ້q)3XA^V
\Wq=?nG}=|x55S( ooˁ&[mT6R 	pSZ"w(Ooӟ Iu]ۈ
SWPA>0OU$aKd~(W_I}w>@ZN}~
Uv8\v)څγ{=3ͮ4PjQ&,3bݙ_Oj:KX|z\:;wA\9,y߼Q0t<'SSaCdZF7xjɎ78?x뷫@D}A-~W[xo~ }f'y2sN7ysWЩs떈}ebC⽢Cد,	F}X$|I\0=G8QR/=ck uḑ^
:vkq~jMGp2Z?Qy{#t1X\hzy=`c*s.-nY=Zx4b*v3 Php\{댯okχwxnvy/
&ַڄ$y\kYM{7)PxnntVܗ>p<5$@-02^k-b=Q0/FPcc8ύ-4085һP4
i1B[ZJk}IQc؋9}]xk16lGy(Q>mH> طwf=ݔj(NOfaǗvqXyRJy;Po0ϣ7bIJ١CsTNE><	퐠{rTXDf_CpWʞ8A_9m덜C{.Pc\ "cxR8^3!H߂;߇|G{y}%7aY;y9qy.SgQ:3\_':O6olt!4_	u6|L4ove7=IPr;~K kN!}O<v)>0AmO|g G)';lp;әͮ>7RM~=n:s+hfq,D3칻;"L|&]߉gK
fWwbg1bhnk}SNg9's8^T.mobXXaG
]{&.L?lϯ	m7L-Dlﰉ3lEk[Ho]in]T-t\%EocݍF>
笱Yp䩯=fЧܯG4
oX<VEܧBRN99KQr6WY}1$=|9chUI]$((ϐ!~yDb[Xo{_羿61O-"89P|ӺpwGo3l8t.Mx#L;D5+9̠Ξψ'<_Lڠ}Īp'w4܏#!sf?0T]j|}cv-Rp	atAՃ{˗sxZ("ߊ7pLɋdX]"6Өd ^"8~{PP٭/4j&VLHl[}:ϋU3\eiq'_䪥\֗bh;kS/\&xÞu:Q2<[?Zak,gbJ%_*
1ܚ(:l
tGzy#]zH!,QnwGM1?rs9ɹKC0rEN4%99J5Gz&v3~
wԑ.qt.+}|?,U(kf i̋P~(||vG]{
J{0wsmz
n߄|u.nىkj:T4.Db#w9k(\^`A/~)MBc mPw)=:'3p/̮Cб};^D`vv*0ޡݪd&~MuŀNgNɎki;>0
2$?{=H
7蚻`qݱϱ?j7> 'dҵD7b' INs;0չW~;:bgŝ(G"
W0(ر`KZum4Ն
r.t2^O-9_מBN
avavOiqL^XמgyhP3tpWP\*Yq9kQTNFǿN;IS]^q4RjοөG[Sޱ4|c+0X}[g"~}~
wnt	8Kܒvz%}h%J{$2׮~OyԎ$!5ٞlE_On0wcq/Zx}sT{4i7vp&I0+* |:9CY{opu]áZ^Ю" |y] sｊ ;Pm%ܑg[Spx  2{EjWWG&c'܃G{7'qFO#hϗ
zFW?cK-2}ެDih"r<]-{5o$v*,u[)oTՐWM
Tl}]9֚&щG̞b_p<X<b-AG,\}_gm#Zuq:繰
\&טoŁh\utp!R#Q;)"NCH+G^ĝIRVY!\GPG@	긾n!D0*eFoggUfM&Qf1%cr/;dq-28iqr(A:40hn1fx\GX;݉w<)3ޕHW4OQ6;,(NQ<!-TL2;kv-/@flr};^Jc1lCE}$e5u*zRbZV|\cgE~e6<{l0=	
j[iƠ$XbqXu¡N>CI轮n1x88[Ѡ\(!&&!=w5	.byV7CTNCw{}X,8U9;	Qs.bˢGBҊhUɍ0ʪp@)ȑ+( 7pJoIu~Ե.m[肁Z]DS};&x=8/%K]	RsvꑞL빞[a'˸]&ך=&,[N
v>LyTؽf3MsmnoY] kD]fgfxL%`~=c{2ﱏuf4/ AwܯSj?|ϔ2Ynk	m­1i\gjٓeт@Go8b4ٞk^[kspGZ!S_|kCp7,%n^`s"tbOkp_	bSl~hS͑s>p;xxbxϛùD/]hdq/K>nȈw~pE.*-sbvx#\T-fbXivz451fBO-Thǉ:t{牦Д:؃$9S>,BD9EǻLҜ>\,0pGURZ?n;!exlޙ:n$>3-_$>qfçߜb4?S%[9,(3E܍㷫q=YS2h7lܣh=)wm#sg2V	M<lꨡlIKyirg7Wf.#z:/jT,L,OLx4,twڡ)̜oek =ܝ9kd~ɻL)߇BY[AaBfЯ΢ut/Zw?ݙ~ѕ;w|1
ZY1fw&ijy.؛U*&ؙ&fh	yP0op?3ttnbkvg^0wϥs][#"8wnA:hؘH{ɓ	htcEjQX4D#
q4vfG.<c|<,3ݔ~_>qL*E{H=c[H	A+ SJ~EЦz@-t\&ic
:9Iu\0y?
G?PgYUX8!qpcq-qf7{ٍkgQ}i(l;޻;"^֋SS_7Vr܈h!.zAWJH
Z ,9	蜥t
;FJ[xYD^څ^q3no9dƦ!4o$e}8q~hEns7Ex7Bu.;zM>g~%h*9Td0gδPמ&s9eOaQ
r`璘Q|kxSb k?m wj&2.hgo9q\Hs'ޚ\1&h\s8єX#lN!Є
W)ȻQ8~Ď|cD
khu@x
_DmRk37S^ĐK2gf"ߛ٠wS=$)EZ+>?pyW܅'
悌H8e((u~'J&,y=}:npH<
w >51
+E7o(j(?uvjN}8ͽꄪ2ŵӔrP_7 vSוRO\{f+		ZSN lQ?cRO)"ň0.O~M}ޟA tڇ%qRrt"HJ/;GtљKK^ϕMvQN('}M@ѱ!%:qޢ
|qb9ˠi0/%ٵ1ulvݳ[f$Ã񢙺EQоLWcFBT1$h
Hܫ{ͦ[VmquYG: ݋6eP׺`dr
#W+(6}NoAluf&~fq=+v-Uh3,A
zoNi7Z[ZDN\~ٹl@uXܥf"ezq7fבygV8 rwg|}(1J|<Heq=\{OdNc랓\#QU?ZB>ƅstP燉Q'# 5SuT@pvhvAdE=e
axv	h5`1Ƈ|;+Cvq&WƗ{sV 57_`ɽq<ɘ&@ F9,K
^nAn8t&=ySLN	Ͻz*smv߻g
z&y7)oҝ}кOЂhëE_8OGqF"DjO@Nw`]4%USxz DQQzXI՚@׮	o<HMYۇDD\n+8wCŔ@<яG${f[[qSy9wvk~8$fvgc/@~掺	:ج?!@x<!?wlG>Cx/5痟z5_{egB2#v5||8+!! bB9F!}!B0H	ث"c<f~	(&
?~qqwԩ(נ1Z~~M#ߗoAN%~cQ'qzk#YFmP?ԶGQO}3.jOOi۱]liCyK=
Iڝ^nvUP} 6gCGM-2lh5Þ$~-DtgXz1oA"noKr쓶	>1JȹWlC9gRxx ˃@K|f"b"<F#wAcm~mG[>z"0\܍zW_>Ew\@ٟQhͳʎHkeF^#ڇWoh}ݓ~A~侴Zx9l-bxіuœg	n4qTb2@3 y}muʓC#@BB iTԠ#!wG{tuw!Go+}F9`^-bu9<Jrڏo)9Dyc4u|QݴG|iQ/X)\]ߠ-ޣPᦣͲm;Y:ʗ2Spҕ)'[f\]57)̿r~1&ɓX|Nvu|VexAT }^3+@<1yLWqxfWv3%_S_
( f@āSv9z(e}a4^	NxC8+z='GצlZ[\'kgȒa|WqdWQ%Ov]uwT~xuТ#Xb}E@fT
Ū*wZxEg&,]`|()`F L
)os~j]4Qc%5BZ?QaFn{3ϥ'zC݆O)qu@@y1޻Koi3uwwe~~;݉Nc7>nfw7ӯov';ݬX/g1vfw3=f6/ٝnI쮗=-o`vOۏfw"bw1Edw=4v`4sNdwY.fݕg1vfw3=f_Dv=ѥ}kOŰkP!C2廎^`uPPPx:(]
R*BɡJSF(\t.PrJcH|2>X+>DiX
Bz%Wp|6>Liy9>\i	PNR!JPyH(<ZD9Wچ/w('=0/H?R4KhܶQ5YãC ooцJ*2~(ҷX^G+mR
/s&Ig0}ZxL	'|V1}[7}[$0N|0}n7oٌVb|XF(cU|54-/>q_k1w0~{50^yU3X̗j<YYO}xO必ۘ3ϗO)]C>e'1.x㱌ʸ˸_Ƹq?z41%|g+o0-Xr7`</֓錏eaѫzu
N)?9jin׆DM˧H߮Ƈe>5\g:b/`CrptG(3c{'ߞ^S'=yY?*^Z#޳axq	ߩP֧jc\Ǹ*pwht0}'0ǡ䉷"F泚ql½d`>1; O0~HⳊ6	v	3^Ho2"GUNƛ%7IU0IfM_	/g|ħq72(/3QaA1"$WJxBI]gg<ۇ}*`XUzI?kT{}1n`#Lr0}3373U·1g$g[$í|Gr'>U'^
o{1_ʸ;D
7d	2轋*7I3H>I)bӻ~Wo0,{PD5$zE\x\>T5g2F)U>
^S_%2^)`|?xe|x{7IwJ~o>	c<NHƣ%<q`QߵowJtv
+}l/	&O^)>%o$f$-
~DfCa:O%<=xg0,opMxWIK:nOvлwo3RO^7I2v ?q`+~3;Ռ$|ϓ/wY>'	WI$>JI9ɔ!팗0}oo/$3(OA!Qa<Oc|	I)i<v;$uIJ1%w-!SQxT9H	$;7Y
<ӷKa~DߟqD|#~D	ӧJ1B¯dQ¯f%D?)Og,5LQ73}D$[(7Kx1Z	lZD/
^|K|`?xsZ׌_#g<Q71>Cc|of|oc<K_6IϓUJ@Շhv3QU%PND$J@Ɵaox4YJDƷJKwKߒٌp3Jx$k	h1*$Ro諙(^~gI|yR?%/2~G$E旄g6k|%x	?|6J|f+$N5%n.BL	xd|c<['0+'0'//Lna	eVo87$y3_I+wJJƛ$|ʿQ1#n$Ood|f	;WJV5q_!$1&_0n?棄K3(C9\	)-n`|aExZJ%}F/o?)i'YoŪ|$|e+d<UEJo/Ijߑp'o_0?̓J#a0
~D$L?]߭_gI1>O3~x '(gw1"Qzߗ{%|$|,/g|1~1>M	xg0~x/`)?c%%$)	GZ$gICIFߩrHei	$_o𽌿'm<% _KH__2+TsgHxc|ьKXƓ~ՌoHx
㿔T!s$y1%ʸ[oD^*ce>g*	D	wI/%a_)3~xg<_J	$$%4oIEWHrFR	pOK%h/I'Hx<s$|*&)3KWH\?OD_I?Jx/JxI~7_H}px#%WO'O!W$2nIWI=OIƷHHM
IYGK2Nҟ#>>h'R`_xKZ<QΗs2~#.b<A³ϒ,0^#0;	z=y/yO'oa}&o	>%Gh1?`6iHK5wv1|Q9"zEVFܞ6%qLD3y%zusDID;%yי_:yBK|DO'yRu~se:S|&I2%CURPl3$Uc꼧l3MEnp<ηz%>'Aʗb󼿑2TS|qՌ{G??xWQwy u_+)'%F"drƝOb<&m4:9LsrFA?ZIь21j<!+$QTC3T7vu2DM
R<p$52
Nx&pboyG>:
hdC&z	W&X>KOħ>v擺 ֏"yQz{r;	(a77"}D$|:۰^"S3/GѼ]1&<0Z]GG8oQfr1F[_/MrȑNϓg?&@50Ŏ3O<r<3Gm_MRL?hƕ$qռNc+0n8U	^-cW3501'Np#Ϫu?M:sX
vo'goh.]G74!Aҷx.ZofvI?W$>߷ϨI|(-~#iu{'
ˡI/t|&8glH¿|ÓwU>Q3|Ŀ7V|g1+7Kݮc<uv}SR|^5>9\rn?xjDp/C`|.U^M`ԱD?	lo`yr^e.xe\0~DO|Veý<2"[0i>\F '5܉Z٭{6^
__bBwDڟbX,>L_9FFy?Đ||`TGA ǙO"
&]:]}S9ǟ
g2} m{[haE<?/2\&|	v1'kvȄzr/#_'*LLƄ-!nx^V%{R{%'>s7̧A
+XN{-W2>kPˮKõWg]/!WƟp
R"ӷ}HW0vW3?|هv}rF?@﹌e}X-_H麁x)]kzS	j	TA\N9>>BxXP9xL>ŧ^Io-fO	C;Gk-ƛ;N0^y4&IONd>ô.a<!FsX?ge ᪾=x@lΙ9^U/x'|[.OIg<aO
noVy>M|i$ۙLw3?ejݢ֛24h71j;s1-wiVx
xm"/ǅNoӷ]#d~dE3}<y7jɬ<>Y9;<"~|hVw?*?a_xP-rOJz[{UpOXONһ?WM
j[zoez˟JUPE]5jR~Ū:D۹]3F_0Nл:γ̃V0}ω:pNIȸz M.m۸ϯŎ1}WD#pN:<濒ьf<uـȸsy'%kByoڽh>U3vF_bo]g]4Z?^[?Z
M{-BMEVe+i靌\-[U>ܟU6\;;w^qw/<%IܿTJK^^RXR]o/X_]TK⫕[K|{~<9HQmw^aX-܅V+eh2M֬iٙٙs47=tVe+.۪2kAiE(
+ťKjkcRPQVYj
NOkI*|U٬Jm	zb=^(;lWWڔ,sՏX ˋ*l
_y6HVVUZ)(ͯn#PxZQ(p~QQN.TUA<A<ey
+*Aރ8@Y˃ػ T3x*j4HR0A_agT8gL0ģ'\U入QcuT۬v*C@^EE%ւwXKWVaS,2_jAJʋUG/TjT.Sʪ
;(lUUUZm+^O ~ /))^|Ie!*`z\XXeVհI}z()/[hDY^PQK"(%A!,	bѳVkPBU)r*JD"B,?)gD1'(K⊒BDUIە 4Ԗ_.}נ(	l/eO!J$A$[q= B*}
¨H߃Ag^V6/}eWV
598:*j-)kJT9+WQ%QJKK-\Qe/d-kpQ!,XUEW"
JjCi1M\[I*V2Q^IVZ	6,,^.<BPm^I 8.d9w9|%jEUb$A|e~=>I< kT%(8_UY54YlMNRB(7U?+
hgnD,4?o¢+\lks<d`#	"f_QQ>E_5_Qn<_3=(HSʹiKZ(عLc{?H*i3ILI1Q%o@WP&	$0I4
(8LIfJ~2MOܦ	i4a;Mp&&0],) c2&NLMFN
(TJSIDR")HH$R
)D9eKӉ2()tJPb2E0HR$qjS2(S8(ȡJJJ<>>2?r??)O"fIFIʐd$FR#32wR$ʱ$#qKR3=7M
8LIJ6SOc(Iò<"dL9L't)E	))	Gq=K
(X劳3ēHߨ&~&Me<IH<II$)\|r*s!IIӸ@S"MiMi4Rns4Rn)7FJ2HHi0R#%Hi0RhT63ąb)EF	#%HHZ`kk$e0R)6؄*F*FR"#m#m#)JTH8-!qn$3R7Id|FFA##ʟʴEKvDښ%U4ՠX)$2AIId{t Ro###[u	9DNJrt	iQ$HǏHHI,V*F*F*FFF6\9Jc	LIol#9L1Iʜ)l
s
	r
R(Tc&RQ
1%/JYՊ}FƪUA-#?7 V@D*ig#y M'YH.ԾTV*%8vX󋋫liѧjf>ZVZe-FV!uB~[wp r++!Cl֢hAmL/,-sW*2jc,Fv*ע*-$JcI^?bj|8$E!PȕjmԄ7e$iSΒb
HJm@́E)(C]GyMIyᵅ5Ij-f̈́J1v//m8dű֔WXWViD9p((GI _X_UMb!=Qcj;_UT Rp514`Aȼ:~z2I99Q=(EBJ%նL,XsV@z_pĹ_%1CmTQqGP.\[ThD}(We#ʦWԔ+>Vhd](+
5E}*(	|yV#pV)
WU`A8.mES?}
TIeUwkv?N	-)/b<͹ 9ʫmP5KFcۖ	K*iR@})90_ﯲCH$ɣ2BD
JLuƂ(/Yj5"-8Eхh.L[Z*MoTnڪY+	\Q|H,H/qr@PQvUQ$MU:98JPȵ
s`B'zUYJʀ5ق[l4!ExȀ!X2@u- T@C0NCX`?z!r3cd//v@
[i1`CJ^J&9ORRmqŌ~ @(sUsOQ]ZK1j-KHV䕞WaTm*+s癭-T*e*PRJE<`hQyεfMO}jF׭V)D!$g"V;*+ڲ
cfP%B?_[x+fU?ZF t9G3hӏ=x4NUkMda+K~=S;/Mv2t]#$fl^Z9]fXZ_(/v'n/+Ϊb/Kص*'{>0sQ͘h3ݎ0zxRSf%S[Đ^BaJPXSP-LK/|NM(9,YYf[2`a&JÓ }~+:wu&?Щ*/	"V.#!Xe t7Pj7'4ĖWBEdXhc1 %SԢ/f-(a~2BEV)E43Z"i]/Z}$:QFĿĀQzS}Z5D,j -h,#QXde>:Ο-K5_T^
>B_E5Wy~I4|_z[>!4C\/88OJ\ܾ+d X[m%"6'`
EU$4hڹXQNKO58hT(rf]ihZC5cFlzeMiJUW,rK+MBKIU1\B=ؕ2Rr~՘G
-VժaTQT6ڦ
bJMtpY^R_k΂dZ-y7TV;9ApA5llAè0wuR輕T,56ݗ6W
vް
bBY=`{}tD3mrhݢ,/1!}h%+\Z[0:މ
mE>
s$엪7 BG%TA全6^	ZVoȂ^ݪKhEzQD*5FaNͽKMǌy1(sӯ3o䘩Scr+5U9r[U>,BVs-|/ͯ*@3&ǅ&'M>]QW痁A)-BEoƯȯ^X)xL|kj"$ U6WkٍD%^^EfċV|q<W1/^ RWj<-ӷ_ZpMU0DBފOnz2TѫnPۨf T 'ɿ-WUݘX-]PλNxp}xWïLҺqW} |d=8o]u?OB{UMZ4<?,B{@IP%W	;]gBY~*}:J{_Һ+__՟uZ7U?*_]Z熩1WIWZwh-,g%gRaKT݆(E'lNɿOכ=\|}vp_ǼqnHΛNl%{~\C_߿#ދD#qsۆ^n73w<dJ%P<fcxOD[i%wkq~stvxR	^OO_PK
    \               com/sun/jna/sunos-sparc/PK
   AHXK	&q Ć )  com/sun/jna/sunos-sparc/libjnidispatch.soUT	 j5fj5fux T+  '  xTչ?撋! 
]A1pPJ-!	Ib1z8-m#FJ[ZGXOR15bDhCVFM-2]]$fֻuS{},ەNZdv	#\&gH7.g& J{7|2ƔBu@%/R(Pd=
\ޟMt	f	d!aN~}׎}0l|)G*"3B|e2~eWLb$$P3(YAw>j܇#{YȸQ|Iឫw~$/D>;t;Ou|]|oIul=oU)k;}T/{%1|Lf>&O<|Lf>&3S)cJ@66#}x24֟$/{޼=wqM;z}&|Z_Hgxէy
M=ǲf0:7]Qܻ4ĭ[MpgpAώTR.}:sqsA9=2qQs>?~xl\pz,q5AP/*\WTkίu,pgfH߄k.yf\p݂Vq݆ki/+k1"\Kq~[Bǖe*^k96+q݁ۜ_:߅n\ԧ5ʯw?Հ~S g?z뗜?qm[\;.N?	Wبi\͜v+o φ}߇}Cmq1}<'⚔p]m䯱!8?nly~:o-Hl!ߋq-18Sj\568
W۞݉;jgkO߿g{C߇kCyc\?f!?-F_z,_چ7BD};#{q= /_xEM\"<}wK|>l/lg]3
~ص?1'o/o35o~?*|Ο|8@~<!\`˄O+򩜯G~E_FGP?8W6m6s~p݇7?շ@^dwȏ@080󅫁zΗ_E>;Q~
CSL9&\yV[,TC}@>~?C.1ؖGjG&Wo6V7y;FyU<|ʓFV|ԇnOQGvwS9۹csqus]@|o
A`'yx?jTޅאA}ɜG]o,+݅<b(y1з+㸟|e<\٥
TpiЋ1I|3\(ۣʿ:OT}[}	W
5Hw}hˏ"jo~
G=5µ:׃TU\d]s9Sl5C/m	^e>]_"ο!<Dq,<)dO*+oay{F
=Ῡ:&I"}|@?ɞz>
'?)`{<z8n,3mha,{?$~sgpoI'%ʿgrS8=0$ů1~\7lO޷Q_31Sn6&<ORdcj|%<DH sm@.m>ο)fyqSWs?Xeszoc̶\=µET^K;@`\:гу1HJτxk^BV=|׶NKeacd9थh+,yn%\@y!د]OcN˾A/
j#m<4o01^fџ?ߗ x#W7_1*7ғp݊$߿h{3,{KO,Ps/s<$s	U,?*b8O9Xyẅ~T>g`,{8-s.?}?x}~-F{|a	ػx8>Џo	W8"`m?GxA[/-ǘ_
B"o8{!G=/D{XύOGgscOmpep~p}{h_-;,_~?!fsQW~ O-0Fќπbުo 7|?[@47w +'-ax {Q{BKa,\KۖOWϠ7ިsmGWLqwoƫ8ɷyX;iou;N> +?7hp"wOesu
C}aA+FY
'\No0m"ھ?!:y6x+/_ʀ-")J͐b
#o,{2!D*_zKCz 	2B4f[+g%!߽C4$?@;(~*RI5>pU|	CG~΂h|O(^gX}dX
Y<0=c~=쏆&{x#69~7cXseݰ'N[Sg%^j/Vf/ioh{ ?lOs|1)txIyݻ,
mB|>7o
u[p%L 'e^~c}JK2XS,BVՔT՗/ңKP2XZZPPPTQbq |z*XV\Pl(**^ZR]S\UPSVPXZQ^\-U5ի񾬠fuuAQIUqaȟ{]n7<f_SfyUՕ WB mUUWW3XR"ܣXWUW%E.WTk
$9Td`U	pR

ˋJDAhƪ]T)Y!1XYY\$e8Xx;'*jU
5AQR
%R_\YSRQn'
R=GūdY5\Z,*+
KH%%5%Ғ;KBGbQ"I9JB%N%(.,XRRQTZ,XĒb#SXQ^]C̙0IQP˪$z%KJ2ϥxyʒˋVR/)sAAEX@jł	k@"[.QX4%A2ǥ JH	)(XYR`1Dk-^|i^Ewy%P*1V-)I5ť(]5cYҪ2XRQ!褺*Ē%`Iu^GwˋJHܥ%jji7%
70*.>%b-bebAV}iq<P5 -|I
e:S`%*
b"rYRUQ09%UAXyy1
W+ZUM9aAD
L{}-Τ
U;s2j%K+
+Z1(\M(^BUH*V%G
ةCs58rL,\e
57@Eh|<{lGdbH,X2
?N{Кn..ad<΅?&
+ `Գ*Fiqo"E:WPYOFD˗._YJ
QjvYY+(h>p%`jS7 JUhh%[nuMUiqs삹AeJŠ-']V(Zn Rh *@,7S2.8gNgǘ/nPUZUUQTVU%5ѐ$Vt++늋դ`UYuu@V^a4\GE/WC 
e++JTx~ q6Lq n+@Y DPd~˗K"'N mL`&"3?X]sDKzN	MM4&MLd;ʸT_gmNnIAZ-4hQ*X"
4ͧ*"ULf67+ge-BFYt*8kfb{丄|,'E
Ő,n']3O@Yͺ3/;k,nFeN" 6[@4i
(Mc&@Һ#./1<իhY!1AEY]O^&44Jp^D /@ WMY;Y FC8V3Za0Y*߄+Y(SCeuZ}VQcjr4S5L;#3|$hL+ptDK	at|͉|m!Q_RaTD0
BJϺ}JE*8K6<aq%em;ί g]%v$"IHrly@k-/L'CSnF%!U*}	TsmbcTkL{OP;hR5hJşCۘ؜XRlsj=,'jU=r$JLiP*[wWʔaz	4*gm0j0mCd$n-Ҝ>My7ϝy}n Mv
 դ0Fu0BT4uRY^9^J*;N&2͞c-6b^9-VPd	 Tܞ`<'#B)=)~ⰳbeL33P檫WW#$P(1Wp񁊊WMдezittbm
)Z^lrA׈02W
Z
iroh'A3҈m&Lctj:5Ī9>Rxx0"gn-3qN9tJ1s&_u3fnWQY3z8`\tM?"sp)!<f~>_sҹT>{/KBQ!D']y	Sg@ܴ]K6WKaa8<^H?wL)]u}#s]1Kym<	Rl.5V]LnBϢsgw{E{ciOBsN~MQ>Fh5xNgצ˿3:9	p(ڧH{h?3HӺ<{ۈ45/ M{JD=kEl	3\x\ɘάiw\8gį}r#
@G~<>:g=t>쇸gs 5},9zSstoj',Yo93]h>\!M{\=yںB4=
Ou>^$teW/y)Dg2iK}<i濱ߠMBɤ37ynEI&ӧiozY!$ӹԃB{^$)ɞtN/3nt>^g7:G;\'퉡sqImx3$GОj,"jd$_*·ɛѹQD~΍ҙ9:_GgIi_:t:oKioG=$OeO M; #Rn;ɧ҅>sR.:N@z Vi:;UN5+yJ7BzCӇޡwZUzIᝲH\w*3)*6N)TpN9}s^@gռWL4_PU"]3n4sEӠ
%:BɁxTr+ܝJ%:r!@gټW8^t҇9
]\>+[S|Mr:TN/D:9AS38
,NCS}^(N7 aj@WCwS8
Ǒ.f+9݈t
	*NGz
:N#]im DaWS9ݎ&NCS7s6356pzHot;8Fz"hSÜNm4;u?"}h#S[96Nît
G8Mk&q&]4IN/Bd'=O=i4tǫF1/WLoi4Ok3}Zմi<g_]_6Aީ=tW'<|A[@Gkmr]JO] x]?]eA[xA{Yk,vVWhGս9&&gf_iWp`NÆӰFMːIi'tNd4\
4ddiG:
iجi4e:FӰ:
Ea>m]aσ8=6|NCƷaNCa=4X]:
ݧӰ۝:
uBNC#u>sN7.i4|$Nv:6i9=mam[}Kiu/DN~OatmyN
44qF߱CCB\
:
XӰLiou?Ma^N0fNtN4NiN0li]:
iuN4IWtaNsu|̹麫|3cj|Jˉ1BTnѷǓ>'ek|K|er]/5>V-q}j(}}KUK}r~<zYX^Z+i_MdpIMqURXR
hV474XtD-I#7|EyiRS
ʒ"}biyEf-KK>9Wt] J~9eϚ5`u͘-c?"Z,j2@[{oؖp¬B't}>grA7PK޷$XR
G]EՕbeVmdk4<\͒|ϗ5]YK>rYoSz%XYo$>&1aTTʂ嫣¯eWFkws2輵Rm^X$@FE.v'wXYxՊA]4j:!D${ofT4k%.kJ3%fp,!֨-E]-
+U//ڲ攉hRlez}Ĭ]EՈ^*U]/;j^RR\_R~?[;\KHN0D>֕ܨ! 49Q9N\c/G'a(Yu5q}Ŋ<fvIt_Uø˵ꂂQl-h|I!LvGJ`krhGgjEW{76wuv3.4[4֧_JM:!7ǩu$IqT5Ю+5Q&xKL/D7#t//
#ozwu_+{O#[֚m~v,@OQ&=U]W;[sTIxl:E'	׀)"f}7#|!tֆ*\1D!Svz^`tT憞cU}Gt/
TfNseSUFQP$,'/,Ƥ]m`O|PW2-[!za%1]"='/F~F@2A{AT~)*7ǧq67RgjnX^)9rڦ~^Wtjt(h ʑxQ$;NWt$E64ruG	*V8G;{B	*:y[ȿq^4=g]$O]Q1g}r6zC3~1nu*՞t	xY	WVR]޲6nV<@Vy+Da@|S<w>'xӾSfZ⊊ҒU9Z OcW71q9ݺ&i_iEY^# -`4m
tEBp]*V/Z,vk}.r/0WY˸n(xJZμXgZߕ9sh`ʒӦN4a¢SN4pEEӦLj{!)/ȡ
3WB<nN̨(-	xA
xy*E)^ Q K(A:r#
Afn3GXLy0EQ#'1xur6 ZXY|z$3>+8iǉ\T#\v,k/ޘzmIZ`7Ezbq#!Q~mRcbv ;aOYKNM꘳^rhHPQVYQ^\.Gb</SYQ-]
Kf6KFMnB5ǀ9H5r1VSS>W+&*˰$`ӀP%<egq]r|ؿ:[/1c7z~SQ.>|z߰F>v+|W|Ǳl|l>}n6}FYZp?e	A+mG41cOkc)ZUfU;np%;/vѺ[z#?o`<ꌭ~0 HTx
Isq$r*0#Tj:.墾|9|w,7??7|i9/3qWUU+\zIZQ[QUl~eyFmK@O'@L0Vr}ntZѵ?}*OŖC-K߾f-oRRgsoF}0|2k/CWi|*t7v<3T!r^SB=H6M%681_+Wsj^w6Mƪ.T|9r%$\-_;*b۝6d؟nFQxQOTеwBeA|4KBK5=+~/'.p.=rQxV[BhNG[}=Fo2v3m,2W.CzȺʭr}tDwi'FQxs"ԡV~ؼ/{%q3>1T@51qt-TpN)t?&H5`i[|1FZ^:glS3hڂΦCQ:1LvVtZ拊W^7U
n^K%w9R_MqB/O"(= ڌy
[v5$S׊gϟZ
$9d k3f3/_S]W<tt\}Ԁk~S%^]נ^
p%ym;ÛzTyp#/Eޑ=.w'GJ
g5._]w\2/';nunMLLm$a^_F<MaCWC/5cxrǓڷ猵!gyJ
G9~R	72ϧt3Z5K:.
r	Ƥ?>	g-ɒOp'Lm5B
bXCx0\'HN99imKh#@|6TEQYь.
m>QO`aflͺhZA	xEtYЊ	;OL1xư찡
>Ձt1	#!\?xnbq;ާ3_u%1
uyz1ѐL_\',#cX7|W2ܖ/{7}
}H3ϼMonxpގo{omۦD
	W@56Q](UW0mе.oa/R{.!82h|dC2/qh`АεhFf?d_0{ҙ35MO8s԰Q	and	QށK3oe_oԏMc#1GM#!6P=lF}/u&OSJi:=Bd4y
ZF NZ+`VtFE(M4t_:O+u'.]55OeI-n.
_
t\*	`Iqi:yjLSǩB6:ԡhÍ:1}O出olCIᾐmFw!ڽm}i-PH\877­sC6І*A`O/Nz^xTASNmE}/?*l>`xɦuJbnYD/F	f4F9e\m܎ȖݪK?2meF"̬f߯|ㅱNm̌ӈ~n7
6vuemۃ
KE&gOF
Q+rq:&TMlsp-~̽c7dmL
Q1k(4esjL(1y'Ǆr;Ǆt	峬oоPTM֜ZP*<yogW]@RcOKJ(wQ y@RBvp?aL!ߵߵ/%qX_}a7ݝ^+\[<cH/t<vyF36ψ.q#|V_znȲ\cVl|dY-g
֦vn΅v䄲2F8?Ʒ6;	'xׇlH\o-z<Kb1zcB"dP	.|~	z$fa#FN?tدO$nIш'Fpp2Fmn; ~³Ổ{F|rc~q%ޅ/V{nsQE00f@/fcY_vް
&>̿vL|lަΌ!bec;cƏ4g 9Έx/	~7Yے-YDa):,M'΍|Hec72f}׀M^.Qfl7eRF6ʌa=OPC[M:s@cH#&L~|6㵑xo,wOj, F^_ykg[\MsDu/l2۳ط})~?g~h4?E>tO3	F]]_;?8>{Bu\l+^;e CIxƳ!{[/2=5f>Y!}$OqC+kN25I[M
,{h$12޽G~6X-5ȾEM:9zyx><L59>PrqXJO}/bb5ՖQهrED>^`8,t~?˩ ͛08mkF>=6]M?O<?OcU?ay(+on7r=x[UtaZt@%Ntc@Q)Xc2V#BTgcvS;}N!{p|fRm}m0=?T4vΌSwwo&q;}wkwHgջ|Hx2qrltw}tL1r@\|%c?be~'uX]1
i-˘:AwZs6=̍~XBGh[iN<|e֜qeKuTBVu Ų`O{p_8xmbcw'1[J4c6oP}|O1^NۿZ}ڻ8r|6O9?ev	ZBl^`y>M{TAd,,}0GǱ<yl536Ճ2ClJ7d١ öKs1(}[6fI]d>5y96o=4߰^;IsD+ɂi>M9|Q9H>Ar&h
ﶸ5p/7''b_4Tژa5<)9+6>ۢvH46~D7}%sg=>dE
}'7Q]'sxZ,;K<Akձ|ˍ*^}ĸuk]/@5gLM/W|)e?ez?KsPfQ//%Y(.mmcúX6H["`7Hh<3] =r9ᱎt=?3ln`6үAcO/c|I<OVM+k¥e]<WK~>*#kZJYk9u2z =v	x]f	_ ?/z {t!vH P̻66~ VlC}Ⱦ1' WƳfg-76}8 G>Š;
psNt_JqӚ\u8!QG%XGh^򺗎{r3{7קTI~qn9fc&.qkM(\cfښ~#kzq uZm[cD]SoGklTvmcth|Dד6Ԭ3},,6OOd~&fia>OW$яWqH ]xyGX~* ~5vh˧Fuho{E4u:)YN^N?ϲ=Gp7[[јp`urtLh#ׄRSB".@xRҜDS4s~4!v8R{.yE(u[nνVS-"OօĀP`G}mjS磣;c-cm'v'.غ&麬nK.5F"?1|Z\~2zdmG5CBV\4򾨇xf0یxuKʞ6j[E3N2GѼm|ͣb;C^ck
ru=K&4\5O3`y;*&C-1cK96\Sx?CzG([_75G|,gM}{N}o'u>d
_^Y.λG+bhlcA~׉<XB9W Czh)g^]K'o/YCi6zQj#|O7{N[ ;ȸ*_Z/
b^9˱C
NƚvzjvCg:LL@@g٘9X{T>kj^h	h>COVQ#0 Wr⤿lHsiϮYg)u׵As!Ѐrȟ/m)SByxޏ­K	y8͗>b-չ?It/84ϥ){H?ki2l]+F&Hy?-g*+yAgY;˥_'ض=C>@uїH&c}dzS]g<~v끍]E6FAO	7GpZ2ryRzŮ-rta5[cAƣ(AV~1?h?SYF\L$h蕴RhBESOLG}
jkvɵ$]'y g;Nq~,gEtZs=Iua51qCEj\#:F.SQw#cx
Lk#>!d%j&Qq؝.5MV,Tki
_4b;ndfvʸ r{ wduy6A|&Q~ ݽ#܄G|
?
3&/Q@
}p"$W|bˮqWzOl*^vnwO
dg;]w}SkS.@3ͫ\<?Exؒn[k-rŧY&儇dB{I
Z;Jttތ}JgWws]
-@*~5ń
:t}'`ÀMsp-`9v:`rmvpİ	dHd+:\pƕw\gNj3[ϵSc^0^q:XWBº[/MsLs#	c;UًCR.';ԵuEvX
),KTbۍ5@BX(3`v^/`39:=N|bcn̗|/<U?G1}CLӫ#Ӷk
hαtmhndBWW2tƼvا⍎xZ[z06?uv!pҜ3	|Wi/kEx6'
;9X^ϖ:[53h.lx/s=d>RolU9|7snn?Q{aAQOl>Pühe{F5j\
㒷3gzc&%Ӄ$^zkh}(+oOtfm䋏'u{愍ue y|}^8v7*V>a;_{}y;gͧ%?i/i{r!|ʵd<#_F/h=Ra۟J#|dI}XyZ;j@9=tSc+
!!}ɰ]7|~,O/_9M%$s:22pM KmCD}_%l%i{7kk6UBFvp+y薐}rؤǺfI8hqFuE=rC7Ep(FL%^gq|)MnK|<|vƓ[|PG)@F`v^c-v?`M̺-Lf1m7;*Ϟ=u691='Ȇq?I:{'Y-g"}ƗSI^at~c>ݽ;owyNcZO(@
ʞ=){NI{CQaI|wMʽ{M]C
LaS#O_'ۙN絈-nDKzs]o f89䛛]jo2A5"])>_;Dh:w TU+Nq|)*\{<]<w}33+Пi~|GϵsH}Pȥ2OƸOubַ*vu} cTƠ9<ٝ6
ϰs#wwNn@:0o׭jy~"'<{W?!z&#ܾM㛒=NoKs/?f,?$[}u*l$K]s]w\a?Ms=xhu:N2݇gأE{Dq|
x=up}.I|$Se9|Md,HkG
u2x'4y4KY0wDO(979xGHz~}(z*YjkD>tJ>03'[Gu6KyTI߷UAiD{}aDrB`{#6>;c<s<lx;lx%tޓ6o
	޽wd;瓺67߳6sfq*vn[ޓ])\o|l̏ɦLomlm
۵#^̎dVqH=n+lxmxg^SF+9P!>K(?b&o
{fx?(q~< ͸/6dkd>5;(ko|qG0n!X7Y&I9yzMZ4]>̇kGuȡ}X
gdX㵵酫֎y4ma~ZQ6:9}CQ|'hƃwߥ}O/Mw7g=}W%ٙs<p1ZwE@d<# TB9}`d\3IIZ<Cyq+Z=ֻ_$\55,z)V 4E~#OR~{'h? k \#hH;8b¨SoTNI{TT_R9zKE^4hѴOszA/yhZ4P4}*eX`kkd_
 $o_Py0_G62TVș}QZ'SE╏]|:?)xAor>|W1Ty(u.7}8'r? 3=*qN9t{SX270e?
\nM	:c⵭g#=	kدd1
}W-?sB><wPί*~~?ה^O;xxrl%v/j/H;`Y׽ _1Nc/$mpZލ{%Qx
yH~"_S[#~f36
T:u#V`:3Rt =gkLa/77]үaK-p;"RQ"[BJ*c6JL[=vC$EC?ՉHHɑȿpWj$iX=i
k* ʈD:Z|\PGt|xW=.9ʝ3Mxވ>(MOC,Ry_/{44!/r8%LL|_ɤp?e>Ktv<{t?}1j:ԛló&;<vx6|fF`g:x8dyǻwww?K9ݻ'Rήs%	]}zu~7 }k[i.sZ?3wԉga$[qpt9N;j#z<N8o!!\/(uʡ8x~ɋ>ǅk
|$yIa3o"I4yhzzd,OFyy'NWhﴃLƢ|%t?CMqd:||>pƃ堏䷏W"80<u^/U}HWr"m+
|@	7ٷsvxs(nٮTqá79:5"ޮOu !Cwlގގ;|
A2({}{mU֠WˡR'|Dgu;Z{j5%H&cQzg..7hE-h0t+co_ι^DJzA2Sȏ
gT\e|1":teWk#@[\8hǮgJC|'Σzgnl[~#ME~4\S'}We.8㾀84ހ]ۿ7@~/.ڞ"uN}m}靾^y|}n׷R_Sd}-mJ>hG?vt/WmhGVyQ{{CRb}=Yc여8n/1jl/Q@w%_>枥>GPFy^_}t+;K}dxe>^ic]xek#jen'S''WZF6!~m셴ow2|8<}_~Q-j{3િ'?J!&A.xCp](B)M'ͳ>n|F轮(_)o'W=Xؚ7M8icI	2%o9vemxML}6#fX;}|66''?>zZ%8}c
Og/Q@F_1,K8C}\92beԇ+>^4>^R_>^o{%nq;Rd}G_>{i	1}\cY#GhM
6}t@'h~6;w?S:^ye W|{W>Mdj/o/&ևz?P};%d/H=qdط%*{-y-<=\C[n+A{Q	ys<}ҾC84/Ngȱh{O6&԰Ԁkj/5~qM5!<$hso%"ItRm/t쬓:9x{:ytr[-V'/ޤ秢߱T8]X/Ym^?FR9ovڌ;ǒ>jk/g7:;:}1N_UtJk:-e\g&՘K p/֐/AGMt2ts.n&Fn49_@7w_P7-%n\R7_&^zϋ$ϋϯ'a娟tϋ?6ɗ;geS~&9m/%Ͽw߷x]B8	][c|ۋo{qoM/F㵕Г7m典[ڜuRv#{[V$>38=>^xqH4Cy?úg#qtts{yaS׍w;W1'vK})ӷ>vEG#mq񔿑E}qڻMv_Gױhzop-Fm!}bLB's'?m1ȭA'n<'s
To|>s
9s
 m[>>Nyw7u{5y}>߱ҁ!$zGy3\"6$3ޔK>2><X~ރuՁL=6'We<4O
fa .Hfyڍn\[	O6?xK7gn7E@ۖOw ӷg#Ge<qtNy]t@'Fz>)Ng|<*N;u:	N:t$tqn6$ͽ=/馢U77ĉ{_<8ⴃ'%nd?t٧]t6TU-V"TŵᬋPFώ7Gϵs&s-_B]|/.9KE;\I,F7}sG=7QeŅ=lFt߱]$\7DD3L٣M,m^z=x<;	Y?=wLP	
`@z!5ػ/	&
ǝ4/o67QdmwmL_pl1$z
\C\M}<6}<ncE'gO^v-q8O~J;[o8_yg{Y(+~/{D
Io27r~'SN)WH@Sȟf0i%|=	~Np1뼪;
v;Y
8oC3?	,>ygםISoߌӿ!n?uޫ{d0|`؃[sTo󿳞sFۉTMc6:QtyӴU<O~/;>S\^~ehH==YpQPEp:Ӑ8J
~gsy8k釓 Ƴx>[
/EV]<Y~;7.&
e]~~]@?l`t!;)cql\fSQM Qv!LPvGF{쀯q^/!ikOi^§hTa5;:
Zygهg88Sgׁ48a~+$\S'y>ði]~QXgGd><q±7?\3C/'璌-w1{Лyڴ
P	zG.7[O?/כ]ysKzA3hx"63+=ߙlgn8RG_hГKSklC>s
;b#A3]ُ_96й۪3j#s>Hψ~_v=Kq𻧇F?R]48Ɇ<#?SVl|N5]azSM"&ƍw2[b_%8 =xw̿޼k>)6kLiZEW!
R\툿s_Ӿ~[rKMmwe(3eS܃-,ۺ_&On>ڌzlGqzꛬqɾiw!,lpl}rmpÝ5
pהeKG~,3Łl0}mp9ӷ8r3ܓ6}<|6ȯ8p6>+\f{$(܏3ܓv|ā[cv8=6I>qz7;}vkmjMq{
8pz/0Yy&8ŴoHեm1YMbZNǁH˩8pz[;=uV8hige-ű\:ohvI@_=0yˣsCJظB\A|iNiҿ/09%^w}[YʹnHӿeK??Ec0t.<Au^|<y9tl٬=]Y6,˜[yV@ӮT1EFm9m?E}xL1IӗaV-[@
n_fCk;)f|Q]*>< s8R$/ زcC.aiƢ_оx9ׂ( 2ՙ[sN'T'[Cxw>w\~gtgA/]F;EvE&ɕbڍl+d2Lss#@zضk#y|m+"+VX-s<'8Aʼ"> 45d~©:]>TnY%{-)k,L6d7UE<hjDmNnm%s-)'zsn{.Y'\s˅;T+;bxu\;gM\mg@eO~w!M_d_o?
,CYڻZ]ߎ'Oj#pBKlI`o[5AmI>#;ߟ%^ZCԸǵG7=s'~~o7qBIv\E'O7pn1qN m_-)}GӭD888/ P~K2ѷ&΋tW2?m{1hܒ-I\滭\8O8 YG'?>ˬnP[8d8qǒ̲	
cZ$9WGLpQnF&TeI߄倿Ǝ3j%*utW~O'Jui?$ː8#L0}}`[)M?3v\ӳe}u"}u!Z`jU:q!r\_vċ;H}jĭ$xgR|zO;7u|Ksyȁq4K-	\e_5C=sYiyo>+m|~KⳔ,9Ocԛe6>%Y|Y]NZ>w$3`KsykɁϬ8|.4υ6>'|I|.`>t>zL>PI/FoDZgC̾gڨ/?ϛp} '\S{U$<)yz$YmqT8R9$h.MhO~<<xV9Y ~Ϸ
<ux%b)6sS O3Oi<{
<<$sn#,M
i`j
2~Q`oIOcZ0>={gƩu{2p`\qM#y$@q.)}JG	*og1ƱkoTs٥eӺ){.t(;C]rHׄڨ.#3hpމvT{dm9^~9f;,[tG_/9$CvYCg6o3ʧG'kiN[C.escJ8epV}5Zʆ9e:Է9Z_mm?vϹL#Yg]}TdK>K:_oQ>ہ	Xgs
FFQtH@GNxcQVWތ#<wqvT̜=Cal& bDT~ߤʧZ>W[>ŶlB|tH-x44un[[#RJWCQ4I>37	/?}<93sΙ9?ƥ:@3Wng]3ߗW?xCY6Org@<}~Oc 9Ϧ<C'x۟H<G.~H<٩Xo;{olJSxqߤ^zئ{4/:kˎmZа5?{?dFhnɽO87C7vϹedQ9=S#-^Ɵv.|Q덇_Ouz?^s~~\xh5}w>$|d:̿VVO ǵEf`2Gwm`'dzǑ.o	L?"{ B>O~Lz`&2#_#Ӛ>7L#LL;_> s2kzHIj`:u??0ezu{+:0ǿb`40a`6u|hLz|-;}`}ԁi]8Iǉkz(tx`{Z~]s7?e:O}ixg뵞xko7>up#WM_:d[^/z-|Z)oeN~R'?4٪Mwue"KeL4䝲_WU7
.޾ս:uY٦?1|twܷ
/ӺN\A۫EW
_FXu1]ߣ,ȅIZ-պPFƫkĵ]'-=0ug___&T{'u/{;e;=gFcC/؆kkg
?.$M;z/Ev=YanD߾N{^/S׉]GvTzYQ<~\/B~T/oG;xaw_wjH~>z;:lK;|i9?vz!Ly짿ݩpYSy{nv>4VO|LϘߨllyvnXw.{TQcv٧ޙ#n1ˇ#10垫WSmrƨ>2UCR7=-{u?:P{,vn;v|_;v,s.;ޱG>{woJsGӎ'N475
4:js_odlS'Kd8&l߽d<Y	'nRٶ_ƅ%s͆];f7l3z?NsέC/;W.kJ>LV̚;,\,y^⸻TFϵ'|ovɨ{sҿ3V2a'HߧQYB野4=Kÿ`w1ڹUϸzu;Ud_n=撖jnFu}w?oZɬ[Ϝ>H8In^fc2վ..z;Z,[.~p7wi|J]ww<!#;-Oiw};7O[Gzu2'r<nn2ڿQ
S3]m:m6$qͨѺ:1	sD9xXW	kyV߷unwJ^V,?˧5/$Ʋou!;![|7׿[i .}9Oؗ}	m&k}}q2'Lߞqo8M}ݽyPRNªO93MU]uE',tlRn+\7.\=v`[|B;Mg~fkk]
j$<y,;zK;e5w	2N4;ۂOUupz\noHy.rou\i\՘C-p4wh.Ѽ[oNTW?somR:v3|^~W'tۯ=v.8fw}_?S_>L}'^-#
Mz^cuX_nvƻc^/o'U{S?4z_\_ֱWear_:`\/)Gj򽾺o6<+^<_z0y@7-TI^>#y23Yۧ--d|te
E)wysm32ސ6Ua}z>rSsz1q+Y7mRtZQ벙%moR\I;j,M#뼨vH]'ayhks&ErzmfƸĕ^=
q=mgg;7<,;-MZV[P/D]j.z,j]}Ku_R1"r/I|ܵg-n, NSk^oXnHHZzUNz\7uxU7$օGWj-x{=[Ϲ4_i1Ȋt%yZUV}:G:P+1g5=m|ɺVK؆K7.4dЦI[;OzIӼfm=2-NWjy"
4?aE-SQk+zWN@ۿ,;Lv׿g]cBޏ*3sI[3d]=N탻{-ԅtǥlm8FyT{k/uv;'/:*?Xާ:~MN'5>=,><'YR=۪Ǹ^5ϗ翱qi+▩ꀕ4lƝSX<hNƕ/:սuO/y+	;.@Y-z>h}JVύM͛k|GiZ?</R,<%*{cAǦa=}OWx@'qɸַFo΂vWf'\o:Z^>0?_=z[8|*}ovFR-bMճȭcӴ^rB|?w5^Y#_]_zdg7sG;׊e[?\Kߴ{[5ۇǺ^w^s|6g>9_v{qKw@|@>ds`Iҳ4YZ%9I=:O})~ͧo:eod_b\Fu]J[ڤ,3>YC/i5[y%}QOEs黊e~}؜kΜ3WT&#}:Ͼxy,92^B{/lTmk:=O"L]Z/X~C2znݯo3N3|>/&}|RC,펌ɛ^/=g.hζ׵{4bu_ݲ:Gϵtα~*n$8K]Cz񵍲چ{d社wNXӮ7icߺ2܆{C?}?Vpwp[~^k<֊@|y폵zhoW}kmkO'Wя~U]$k\y#69Py`<}寖Ϩ5w${e<W˪Z{<CeӲ>_qej%wgo2r@\@?xuUjờ3\c[Cuvd6~zWeÆ*@7wk?ڞw|$~3t\u֚6ɹ}xoN9xZE)ֆcfoK;7?;whyON?nU-ghya3RwF/}Q;9s&gngt.I>3nWad~S벺L_.gLѹXjϧy_}7Һi[^XJ#u՚=ʏMzgT;*-7{cQﷶ轻ˌtmݿ^童{놛][q]~'Wlع3'ag>;8ۻTi\UHU~UWv%U[tY]sfɍ4zv]K+\OAGtdlk]4;4I\YǮ3+~p㙍_'
#ѵ^
ݰ|NΉ9
Yr|moߙ+|_h=)립=au]ZⳋfrX·|fɓKI_1kGKT}Y_$.<ݫ~ޫmTo猆xUxUџo43;_"
+iIE}n̻hW}_ym#:_9Iu}2e4%5zo"]TOS˚+{/Tϼn9пFyl{aK4}$/zYwTˌ䍖]Z+/}+_cE3<e3-^?ֲj2"y{Z4]a7%yuVJ۞s^eF]]_󧜧/qcWΗ-ipSU阾roe073-=/-c뷻壺moa|/e[CiywigWe~MU^<:[Ya7vM_HoxLdkc-7hYCy]wXs_f_cX6tRyxm˟3uv_nI[Mu,ou#;'9Nw?.FY;:87vzL?7pǽFPX&}^b.n٬yϯzߴ}kt?̓&?^[cz1SߑgK핏zOGVoxm+}s̼ޮij/޻Lgoum1I~:ISv^
<~W,3x]%=}òmjeG/S{YwiOoXGa?]W".B5i=pʊku	{o|h0Xk}^7Uljt~Kë^!q7$tVRIK龡ew^NۤcGj:vRz^71'<i;7u1iD#m[jv2'tzI-;qyA/X󾦝Vve!hY:㛺zsWy1!s,Mz;e7I[=x&~+k$űFkx7̰ݮlŻz̐;n=5l`_vÊy7^>y%}-D'tʗ5&>JSG{Nuwd-Ox{_|e
=-eDp״%fx6Ua?s:~M#ⰶN;2LDs/meftP'H2C/wcRƱYOW}gޏuKh~ᏟI}qׂI}}@Q!ʱYƯ5M?z@4-&jzC]:m}ݬr,4w|w*nJ!}wT}\k;ݵ	_-:f5X/'4Ϫ}_ؿwvOxW3퍞*^]ӵ|Nä

W26x/끪owoSyu2XpiiS[ֽ3iiē!I=Om.oZ{F=	?}ʽ%nsimVKO}m뚉^{RZ~,t2=fr*6}M`z[l/SmmLRʝ֫>ޛ_r|4NmX=i?_%^>圐r/ߩ+|7&i^=ucܦn*[qhX7TΟF%.9'/~\9lz*h[ݓe{dۥ9,u";=?l;,z:92߷xz~F1;&eocחz㭕
u2+ƭa9M7:rΙ1鯏u5^zAӻMO&?+G'Y+ߚe]B/i=^<h%s.5ӱz=*_M'vkVL5dܸ%mSU6IS$3^zJ8a}L/$ON}Fy*}Xp5eU9|%ZF}Pˉg3[i<}WԸ7:`[͚~.9W,LI
}~s|h=/➺̼hnXˉ);CWIW{,34&q]ܴ{w)J-z_8f9-҇9}nH>kGϝ,.d1T[BTϽ.i
?_{8LK_eLf6W>D#]6<oI$GeLriJvghF߮k[iu^mos/eQZ&'>){zEM'9S54+fyvNl4L]ٖ84Fοv:Ke-NwNٗysNӟu]_J=>ٿbi
=j$4<eZʗlroTGd,u=Y߯y/&yyޗ6뼲]XķZ_n|Wh{#y/k^[>Unwm|CchۼFf?~ȺDӺ-}OϦ+z{yM465}YfdI7фyդ9]y2HIV;7$,'>2b~t}7t͡|նM2o$m.+}i=\}K[Z_6vuYWgx̲Շvh= gJCTBKg˖~i_|cFr!U
ohgo/eLidr^ڵ6y=w:eItia?eU&
IDEd?1]'yµk͟ZCFVv?ek@\ێKreкkqU>걬}2ޫ.s7R/zk#oj_Fsջ\xn;{:RglZpzOw.9Io)'L;vySS?Iν혞X#ߪlI^<Nw7:LozqS6qߥݞM噪%tk}/wίmxm!<̟_O{Y{_{sN^s^'n\0-m樹3ZO{vo#:v{VʨKO4<-i|6jfuo%hk*K
0:^Yj-<dj=#Ǘ:Hݣ=絏{nX֕1zc1_>v*vj1~imcvi;1_Kz=싟s^/$`uϝiSIhHc:vc]f4kڔLź,uOzVb\hh#y:,;ΓƆˇ*nh1P4$>	sn1$F^ϝk~ciY6xFn(imuYЅFyƓ-yOS}iuSۚ~.IwI:楚kmCkz/C3u7{zi_m7ږn[ޠM%u&G$np魿aW{IڞUeF\ʃ4]u(/ѴNxLg84?5ܪi<,dI:wx%}@+^u1MJȘ$oFlױr׵2qu~I/v6߭}=2V7zN\^yVEy\.cE~gt=^iuƸMeޝWn36/;߫ltP^ss蝣[O|}碾sY^;qO-ɻ&V"7t9{vOnoR9[YƩvp{fdu{ۖ;Wn:C杩?1庬ҥ^Wd_T]ic]ov!}adٛsw5
}NFڄzL}ڦw:؄ܠ%w]QؕY꛺mLK`ِ:_ּ)cQm<f}k>}jJ{}9K;-,iK`?y޳1}O<-QꗥVU)I[NG<TqҿOH~\ePK	\e=ҵΗegv[Wܨ]]cwژk2\ki|~ksvF:w}k@YSk1rE{cc+Wv՗LzEC[F帝o8wY/~ԯkoվ#ĵ!^{jWҺi]ڪBU V y;{U211Uux;tD\.8V3?7
'}BڲR==V5|E[%9u4G5k8Ai9FwBii{,{];S[#RezJAO,sGx۝z-2m*0M'7{DeeRٍ)WeޭYIHYv[qCwH"7~i*̔%cc<gϦa~w~P7+O>,~߂KeR훷`ʙmzٞ:C]RO=|kAZu26$/t[>o M=d}]2-IC).殮?:W]iF%qeCΥ;tzRs:ukz6vG$ouz^ҿvuۅuw};ݧr>fbLϳ=k:p/źztX߽T{d>חb{2i
DvF)9n7N*sڦ7"mɡzU{Эf9)}yw)鸾AeL&u_[r"hF[q^#}ugzjf$ʌ6
v쓱zuG万߸ʋg?Q7>ui%s7}klx%M'NFw'ˏv>.~K~eL޼ʘd/!)"1W~='*'f27~JSUMCOms;9BPK{s?#kY߫}~r6ɷ:nFզ*.ǒvew׷Ϝu6yL&MXgWk=ȼB0}Ky=|w8vdYw}NתzHO2~_`B4ii7[-mMnsk]d塶kzޗ6I!ꃾ!о)}H~o?{%h|Gw+Ac8zk@%̞_O,Pjϟ
o7-k^~ºkRJΏ_#i]PmZ7Z>%t,H]swr}Eڗ=zkWw5Gx1WnS_?y5]啌zc.䘏+Yft
vU74v2nop]S0#y5sL^t~uW*tegHI;=&Gr.;vl>iT}kw-I/Gwt~/y.N.ɳ]e.y3!{-7h0T+k݆ޣu:ǌM2i{znzv6No[}oo.r@qaU;A]{P7gށ^yy7\G<'Gzڏ}Lڣ_W\f7&\vVioxOst]uѹAYlv4-g~KJi٬me9BOI:<xDaZ=1m="Zq`+vYz#+4̾kwxOXy%+	onɥW<6pz`uNky;Eio9ueLښ}#\sRk].T>xLvcVs}ʋm{O
n9%jyIW3g}Ft{kǺʹ'[:S]?z4㞱NLvZ<u*
2#ܥי7j٥.isIY8d7,ԍԑnW7#ecrA5Nz@jrK{mu>l3޴?NXe]伖~eSč+\CC'%FygT=kuo>F@XVVϷuU$罌?u\,n'<;S~?\_Z_r/e,Ixw}Jy[ʱAl9ldR}@
uZnX6.9W^v]#5ge\{u[u}39z{^SOv{p|[˹4;twK9*mUz𜵮?xe\O*_=[}厹|~O]?O~uЌO.1'<k^ZH68</%$?BCW7m7ztҍ:q5^A2u[.	ȲOJQ*;^Ǥ,IY;:scϱ43tp|'Rkۖ>*KzZ}xΰ+WTWVs˝k^tW_ҿί$],Kq϶Vc#cA)7@:C:ޮeG݁?SHFxͻ}_uk
I蝕aWh蚗51fkKK=6H<63=WՇG}_k{Q.xJϯz~ɹqV98nhqszu6m{t?IR/X}Uy=2]_7\H挌65ڕ1|&sQն3L=\p[9-k,evm"mƶ)&3ӭZ﨟h7?DǗ^K~xW.=zҪvu	c|)7iuoYN]Gp9?L紟VͰm'?/[Ҿj%}8GmlxW|D-ܨ㓒&<gLˆ+G8Gi7֨q9muTP}
+1Y0kkqs3q{X☭/x.+y^KպuԻÓRdۥϢVv9'Ld r[*6~z7>Ymw]3r>
-~-{弒4cMūA]3ye̓Z~suh=+/ƮhXV_GG7+'_Yُￗ?4p}{2orw䦯?K
q>;f;BO*W
߮nte!/ew[C525O&Gw/̓bm;{+4>)E}
箝v
7_Z#mƉ+ǾDnm5s$?چ?Q[#g)kG	>4دltAg?Oȷkҧs6ԍ;0[_7V?~}o/eꤤl?Ibq
9~Z2__<m"B4rlzMTlo}`|Ui䚞1^2:mk8VKȷ>|'ߟz> 1ԟgw՟Kw@gtޤ|neisѰF}l=Fr9){ǚ觥|,ϧHi+o9;I/;[,eo5uڦ::cbe<#6%k9jXgcPZq9TC{KYnz?a.;Wcnvo;<OS%_߮ }ԽnICމSQS}ucm,zzÛEc^#v*+ݩ?SI&돾c~ed\סg_ב:zH]=k7ρmOŧekOj7.oeqW;c)K]w/m{_>ܸM&wd n|`XMhR1Wkm+ud??36woԆ>>"MxaL$=ZjٙUՍZVlRI)׿z\ʱ+G/Gsӊe}j7L	X{F7vYHy
~y?].}ݪʻ^<qׁjVB^}wuo1sG]~:&LhFZ5~N-RGmkjĭc^_oz['5+i]Ac]ޢP~.롋38NyTpϓʶ׻/dywHv:	:?t.iohǂΥ~ǃeF=M
{{+s/ZJSY{}xj{2=$m
L2M2:ᱎ/-mt:Y{If:CcBb+חJ:9f4kwݲ_ݨө@0BXa1%BXa9VBq6 x;N*[ a'A0a#F!laBXNv:-3 lB2;΂WC;^a!uv.΃!
v8aB؛!-A[!"I!l%A!bo.w@إsNy;.___]aWBUn{a___!@دC5
M-~~~>aaa a	aqkCu6aC$v!!#v/(}¦ v3}C'!#1
aaA؟Bi@v'a 3B؟A C=y¾ a !l3a[ ~
a@6{¶C{¾a_օ/C4}f / l%B_A_C@W!o! k¾aCC#(#=aaC?C/$+A7 =
ag![m=a߅!!l a	a{!{¾a!"a  3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g3π?g|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|? /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  / ,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?g,ςY?gB/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/B/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/"/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b/b//K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/K/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/KR/K2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/r/
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+J+Ji㣪}LBgi # ?"R~&P$k;3$DC}C@lmr{H-)MNӔ[JyZkmjiK[RE9v"z__۳ٿ^{=C5P
7T
C5P
7T
C5P
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
5\q
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35L
gj?S35G|He>氽,wvJlMx{Jl)Sbw=9ۜU{<@1G[|:qgwz'wǦgQzk;cN{+31G?Z70=r܄X
_;Or;GwFsr]wKotlC˻/zh,6g~fd163t28e}~/ROM8v]ܽ#+<nxGh,|uwGBbl5wk>[F?vT7߿Jկ?)n~ۋBQkY`<<<f<TC=_/n+
y[|G;j
 Iz}Z?(c`F_\/+7b1eὃ!CJ=DV3vBч⮝3<y:O''O(8ʓ?è>z'ĩL>k>wV	&seL=L&ېeeyHVZ$vNh/t 0<9m8TNcst؅oxsYem{UVC=b6ךWelgc؜x@dEdg}ۦ&($nFf>}w^5iSk}>9߹w<̼!6Fs0~"?8nZ74	61/(!GÌNdƷ{cqdEt dDug	m
{ ώʓće[g>fuyBFK9?(z^f{[7\dNzfw!lylA9<Zݽw	o\[ }^le&~BH/aK<8POscP.yC]W}+Mvw߆;]d2{|{7'ޠwכͳ	Ⱥw5h
PQeG߱(:ØzQ=|/w^~	{m=kRwP{Kf$dAr{2ۘ)3AU}}|Qzq'Ňc6nϒڼN}5tMXxx dor=:6Oʎ|oVrz)e uJrdYWPw'W|ۤ1T?`hcjs䊷G%vit,NeoNF`g?xHb%a;{ʓ(m*_1T6vs[c(cӸiWm?諲*3\eh圲STIu
ߊ.~ϮϏ]!?dC\;?7mɸiqH"{%!u N&u!MEA:L^(BGڗL7i1N$sH[ж*ć%</C_'َg	=cc]M t`_)[~~`])d69qx(Aׅr{]S{nsP8Ʋ6Ow^ΒJ0ZkSJԵm">T
DSshT۪DqeuwC0h{t*F纝!}O!B+_j<X~kŕ&$X6>Y{M:g Vr!VkN^2wy`_rCcxك6r#S|Db>C{C_ds:?D?L}*0;rǳyD=hi#voP_~?]b>S̊axwU/m'v5|ӚӘ_EkkCJKkzm
h
8CGF9=#!yk)[
aGδ*ctBo;'ޝŹ>OpNnwnzlǻ"U;pgUwO:n](_ofy;|c>58ꋭ j5(fChW#g wU-be;ܱ=P.ɥ}͹q8']y	g%HLq
nЙGsJ'C(c<=]NZܸLcxil}O>k>(x;;]CnOw&/M|jeK	Ɣ~@ZgǠ>C~=t|,%Q&W:9ӆ}й 8wҹ顢^8;裋MCZDȿFȥ<|DI{WT&u@?{FP7ߴXGi1ețd?LH'c%eNGiQ!X׍7'~P֛gZBw
]3@r"H$/R6R\HD!
C4i$(HW!!A4)i<H~IHW#MFi
RҵH!]4b!MGtLYH  ݌4yHAi>R iBEH -E*E*CZH+nCZT
cH U ݎtҝHw!ǑnO })B
#EDB>4~eQ$%Ǵas[QmGFG>&>.vMGsKx#No,)!s;_~ᒈۯ@`?2ܱkzFx#'il:¦uD?c4ftcLfm}œIW7#U^M9_AXWDoeo=7gONaC#3>QfܘQot=`뻱wX/TE<YvOu(Y?\3$VF	'x0'|ktiTfL`4yLa5AzԻ}Կ|o_L`l +-j\*XA*n՘!mX?zs'!
W܍CN)0-.b~Dx仿	Z܏n!^گ@7l_?4bJZ_6~tFѼ+'C̘~
4L`N?M:Hv
*_D?@];cϲ%z+B?ö1bd\ߊ5<k7bvk1;Isq.6淫|Z||Cb.G)&p_!c>V̅l Gzag1#;=Q׫|v~~ߌ:_/@}U}Ym~@vL4ZّHȼҾ7v3FJ߫Go~+FOyKvDb[O_tQ#?Q0Ѯ<mtJ$TP91kKB}K"E<Sl}aaӋ1Qo(K`ސrO( D);
	=Fg(s
x!R߭/xrEhLvK@@x7}[_)4Ѡexwl߯mU1#m.{7v:ݟQ-IzpzDM&q#/ly["/q&FXwѾtm R.77Hۊ[ΥAؐk`(wdSͥ6dnHG$}3&eJ6!mPV!-F*Q&#"aFHdezzv"@nuDj<W)L2yir.O^^(;omӅi\w;Һ鯛.cO'r(ݾIS	GE9nϑG8Ew",cwxb%#qS]:.uƌ2KU
|0el:aܕ+k5<`<:}ɋ`DHSGg
bFtؘNwA>ǆ=458o	m01Ō+h>3ʓ?sQ1
q1Ou .`ݹq\yZ9219:=~s\g]FW+ k3ɵ`ΉNz,ZʇVYD878cCY,s9Qd.;0tW$ZOz31	tʾAe;tЩqO7{D"(|l}_uWXQu:b=Rr#^6ߚOVY16p]=EYi] {tʋ7y$Nм~:"{2yeyoG^}wE]^CYF~G	wF^(,ͧ~q
7c4qck/ve(<iȆ괍`GX+maR4G0;bRMGrW`vS@M`}88?H0zk짼mcveų۲^{ze^QO}ܛȒ
{c':g9̀VNa|56Yg,_cRzED[ޜM͛IGU9ƙM{HLF؈Y5/Fgd^D7s
0#2|E׉pl#N&>!>˷mmyi
l$پW0=v]r<Q;\/-6'q+];wv1Z.U}-O9wzBHc(>vsϡ='~G{']@o
]QEmռMCm#59oXV8S2C-ІYWi|Q|%]GG5g6eCVСeɻ:A'"NC%brzGO6cc:v:#.pJoqw`<ͧ{e32syy~
lOjS\Ě<"*G.uGQŞoN-._vvdw߭,8,[RXŷocY~3+MqlgNpM2AEQȖ;ϕMK@~=B$|=Hyt8:G륺ϣ<=|+yx0TBN*O*V%ц֫uA~a{qayW$̑%ceO]p1+/#AvnM
 	~2pc%u
E ?4vٓ_wuDk9۝slWK8
:I%<>	>L9t=?	W9rS+yt]gz.]UX,}oq
sb)/w]w~T1%kTg;9rKBe!/ѧ$Eq7o~]"ΉvB!JbverIx첕>[<xÞ=9yi3{])!s19W;}MJ{\åC;X慿$CODYu74晿p/\|1Tֆ=Vx4o'uyCwI_'/yswF2V:'s|a*=Me-ZN3usdK#MgeCm'Il-esIاFOu6rw=Gcd͜x\#\KGIN*oπ#.؟	btňG3DMqaiCI(|GwW~bb,;&5^%
[ >]ݫ6'?qBk83ur]賁|wˋѽ
*u<;;9c=F5"Ey7ʻ\'cj\brF|.7ېZYȅ}1l亸x*>^DO1.c.%esBFg~2|ג{ =@^Y>]	
<ӝ0EG||ļ݅1#
[{V/6PbWmC,/eyӿvcRuǏ~Hñ8Z[߿k4W՞.7M]qmq4J,:	tgNu$OsmygȊBUX}!9mf;⮩CSwiW]Qøۼfm۩{}P&KO[ʓo{`ɗH愲愆Ĳ:wĆz}lc>v[WrB^yXʖ͉yQ?uVng,ጭ;y$[D_W{U6n{[8Y6o[t^Z,X߭Pƻr]	2CImywC^M
{tn؝*C[?ٍ6"VslWslw2u'nӁ>S{k<(a 7'ρ~3cH^
G -MxBl^Gs}hZhoo2^p$|б,AN}tw4c:p	(γNzw:'<f
û|(nx:	Dw<gIiFymJ<t5IXO^%O|OccM2?*=0T'c$#1g->M{wq&Bnw7-9v/v稵+O2}Sƣag ^K mw#sVw>1GuN˩+%@|P5kMY*ʓ/~=-O~)_mkgm3:]๝lz#'=}RO!^ػ%#ûa_ݑǔ?Ӷ!~	l?8y8	?$UbylH
~{{tN
n;7EeCnGt2z7,$ќl;2Rb6Z:/tA洈ͱKOP~ĝhT}sȆT>ms^6ʯ}ix00hy4zD	Dܵ9ygs1?Ϝ}'3X7gFQg>aVI}VuFۼD`ŝ@Om9w6gq.sܟ}3Op!=ŽN<s{(C{n5s<}߉`oa̜[4Gb>)ya>Ї28ŧ=ex͘tHe|??	KxLYQK^h7f&{^D:K_pXtf|qj4Eup(-<zY3ǒ[=v_/)\5u1E~Й6bliCW5Z<^κ1?&wsԯ<y[⋿v7Ï/sd9W`$k.~1Jc战eM:/O!C;K3Ξ^'lHqoGoX}bxwЙ-Y}4>D sEz/ 	;'NNGao0ķRS$F17KQB:9,%*襔Z^:r0+;RO/]-DcTmW{i'<GH'Nc?CS^oyo}A_vNww3+}87}ј~`Na=Gy-S륻	^ +zԹg[	=3֯I~^ѿ
y/꠹e\{Ι\Bw.^b]LjO 8<s8~N\{]4Fs0ڿ\+]"|4Sh+^o	8:
q>2bC83 .WdWDsmqGL	ym%V@xy$'@	g'Qa>k==#Ov'/&_7 ^;Eb2}YTFwI?ׄ#ӽߚKgTJ$2OkGc"_IB/N],_%/: ^3锿y|w$/>@glW~(Da@A@oʙgCwf]K߫1Ə.#,yM/cScipu~{VnsQ1];F0V57ߚּe_-mAyP;c7of|E+>^$>ԙqNn
'p+
rKҚњҚ-])T̵[{km7hlkvXAdYd@'K%7~N]4ئ{ u<Dtۺd{Pˈ8o
gQ]ZOUuAsO3u/}k_5).<48_Pګħ>f-_-x΅"6K~ZKeߴ~-vyYg!ptNz&	[-[!P܃v9qʾB#/~tgcBn3=\uGݑ@}>+C<~s&<H<S!r<b`w.}6~R6IߏoIԿ*EX#R1Ϻo2t߃Ɓ=7v:jwJS;xތg47`11<~fWc~M1a)}2O2Ab x?_:ߐ.}TN5jfanّk֚9],.]p1K|s^̸J+=5oЩ>{L= Bzy~Ҝ=}MR6ltߕtI("Q͐w%tyz )o0TgkugI֞Kul)[yǅ0~SOeKmBڼd'ᴨCم[շNu;ow|.q~V.O'v
]puR|L~Ou&KoI:44ttx4gC)ZV߀Iׯ:ws+rm5vN߾/ҷlzQ^j7'W\دD=ߠDwM;҇yȟU2FCJk?[C[]ېE?R䏫|ȿ }?|ʟE;*^_TwoT;Tb*俪w#@7 7!GBA~AU~|;WoSʟ@*ߋC*V?2p!?Tއ?|>[TM*? _+QV*ש|=* !߉'T~7WwA+T|7+UUא/S/Qs/y'C~"?OY'#?[IoRyi*Oʓ_STʓ<'y*O?JI<鿩*On'w<?yC.<SyU{+?ϸ530U<T=n6'TehV܌g 
2NMY,25e;eM>˚,rԔ&J4eU#U4M4UV)wrq/)/yC'Pm~ZL7*l߇O#d&^oCjY d5sHOc*˔kԾeY1MXF 2 }Z2ٰCc)kƳd8Q2%/Mv֕Y2꟟y>[ދ5ae\,Gq3UWC-vJݪhs*:K#k햴=LE{Oْ?U9^=D,~r%}E}geɊ6PO
B[%=㴢GHzտemhъ)*E[ˠHzOc]qI?=>Ac.Bކ9:s8h|%ykc8H; s}3gQ>^E7BysT+*P׃> aCY]]ĜC~Z-鏠
{(zG띫*漆3M3c-ca0g1^E?
`a|iz~S㟈+K ?߰?3W@2I?XWz|D᷀ՠ_=Y/FdFc<AOUt0gd[KO14مZczbSu(g}&{*z)#?VbI+Rtl]h'&Ӭ%8Z 'U{m4siy^tkk|vXȐh7ړ?uOYɐoCޓmCѯ(dc[U/YnIgFOx1
^> r<-ʛ@W6AWgNFlPJvd>g9l4g<wDPi)';lX߹޲Fw_h-eii>cۢKk/%pF[}^U~'+Aqn}F?N=(oX[mtc3wMozжs
}ڦbwFߌ&Qlt6~làlQߦ/2$pFŦ8cu>S
_\/M~.6hܠ/@lsm-hOw/w|#9f?
ڦ_Y4_~e}_]ok;on6~QzmPF6vzm/=TC~HscP6/똪]{rT%Է+0Fܶ}ml̴mCh_C( SD͟xѾF6`=Ӌ\?b=;
ыA{'!{'k+m^Z{з[l%a[/\6w6"uv>h~s\zeMaٟmӿlگlWPnϣ毲U>aR>?E}{ߠ͟fgm?ș f9ׁi>MSm(/=iSxV l?'a2o,̳?kXU?3Jϧ*M?9o3c5Ӕ1dw(2?CeFpU~kFR̗=}^:d:YthrFyȡlQǱQ|C!eȫ(*?	m뢄/\<
kd*<~;$Y/aF*o+7VlnH"ٟ7Su],ndE>AU~gFy&Ƞ}U2}ږֿ&se?tsӪ|%s5+z#A)xQ8Qxi?-k+[Y$U^GG{_gq8}lE9sߨc~nZ?//?	
Pk~>|[|ÿȜ#_(W[9frھ9MfδAߕ^?w-02i1eN});u6(9)&Ѵ{s4c)Mٟ֧57>s [2Ώky*69lпyyGM%|Q4΃1EKplQ {
xT;Lģ#e>t;)M#9DG4EOD}ش㔢o`G#/lޒg:f|\U#+A2[!}oi~	%ЯoU~Id{3[LџeL{EWU$PJTYt3ean/}U1#x6?y96(ig+>(S0	9|/??7'3JF__*ֱ<ZƌƾpI7]dU|Bя4[/Wug̸9Q{Ǝ-6x
EϳaNYj&⁼cݶ;OHE>v+pywzYpj8$u>?yfF G<Y><?i@5lߘ*|%;租J'3蓌}	ct+f~ScGcB;xcoȠgdss@Wjl}'.SupܥV)5vf,!AOK>c{3-Q̨$Ѿ	'Fw1#g㠢`sw~ǽ{׸t.=qbCWc2^S\~c3">:FQ?C7!x~>q%oYt㡏?x+wi_BGio/fOBl_fFt'Mo?Ĵ4P}gCۘ+?쁴&򚐄>Og)>[0|&Vob538'T?ͯH̸⩐8Kʛ'燼>O^O?쫝˿M-S;]^Wo
ύfnZn~jTy?kZD^|*)!c?PaOHDSO%l?UIzs0f4RI׀Ϥp>xM?>~K?\|}>b|ש$]xk`oQ]qwfzmx>yW÷~oھKFE{ĕ<[y'`(}z/&cf+_MX#J[֙m&cT'?ӛǐʠ yMsQ|k
֔T>TU64U7M
W
uUp|PƦM֡2\SkֆkUMu
-h]Cxc$Xiƭn=ʦ%%ٺH.(:UX"dEjj.Ab[Y0,tۖ.)]G""
ʚH#X_iTQ'ѬE>/Jfs	76ijTٴ!"+-n[8YwudF#MK7V6Uծ[`}C]}ihцpBuG*GD,X_XMFjHQcE]zU+Zn]cIqi`.Sʫ7b͑uu5p-#V4z+uD?S]:])8C\Pqe\TW?|{G]uUj
U
)6jp}Y+ޖMAmjE#J1Q{!(
4)ͩ(c+,.Y|5-jt5Z*Z,l,jP.]tnG"M3v!$O$VV7}b,SԒVGowR%i٩!˪	ծck
nVըyŰ+DNo)x^VZUNj-+Įlњ;+O>CjbJdlJjHٗjk75yj5ݶRG7%5ּn#%ZX|H݈JQ/^9KbJ3+Y.MOPM/M
iP:OS	עam-+Y]QJ.ר1~sElj[yld-M$9pCSZ+W}`}=[W445Jiݫ5G*64DUʦ0T)62.߶
˾3>_R6TG,H^y27'b02ŷe)K޿(5T7M2}m*X
sfsQI
Z+74ҦH6&;TM6e8ᖭ	.\V\r+V4k3ۭsASSrCy==AuM#fWM@-b@tzo`e%D6ig͈EPP" 75Xqg͜3KFJƧ,I#mCTF{A6\B7hx}7DꃕM?^'&hlD5#2܂XxUmS% P6sTUcֈ7njj7U1BlZD1`#&W<sv	j+	c(-~Gpc=9F˯4i]RdQ6 X/ū,p[tlY_Y97W][uC}DP{t$XWXZSldxbdjjiųK0qOitpebR:T)bՆpcdlda}u4r)LKoq[.L!zڱP谽
	Wݴ!^Yi}Y]ݽ6`i)^>7Z[*u`u1Ĳ*kz	S+d9˶
7PUMVS]	7`7"q.f̘h7P<{̛-VVG$w66F$WpcHU00m6V#CWfbZw_Hx`1c}D.VvC]4RBU7Z³*_}H,LmUmj$pÜEH)nlej]rJȗy,LYL(lZR8cBQJ@onuUXg:Eu"i	EǸk*%jіI"g.hP	GVX=#Oq5 OzH9Z:h_}1vFz>Eck5UJgњ&hU˴9X_
o"7)dM\HB0i@{CSl)3`#t&
Ĕ؉hP)r^]	{ךfS]XIrȉWbOT{oq͜Ėh
INNK)ܰѮ***XH۫,Z`0mUPeW.׮KÊ%"6K0S=\
7!7
[h\a/N 3/޴hٲ~
-tXrp|K3	#Uq}~e'M*FZp;w!"1w Og`Çbhb^5^3Hcʇ{!]׆k실878]	s0Vn\ X:$[f
bd$U#V.m"\Vq[d׭~{G̓qRDJb2˫K)KnXZnޮvgR%*Jle~#6`V˗.]"X`%ر#F"i4R
b'apj*06/"YUM֍PVC~ڛD[[7cAkiK`)8Y,OB	Ãeݺ7}6['Q:BR
\pVFS IWNjJ}ԫ	vZ
8v.Hl*BS3_Հ|nkk( /ՖMAⱃU*kKmBf.f?,|C@&)XUB* 7
$ 68$rh*2(W2iT1uڊm`eUP~>H@vlJފ E,>FF+lpK5NlV_l$#
̪x{_l6,swM"Pe@${~Q*v||Xp[x0cfݦh^l`@uiLopEK߾zIpŲ]PĊXoM[1נ5[7u꺵:,v0mZj٢
{7
Xf[+J1Wqnw'WH~2AMh͐QvnڈhkXA:u7`JU-%*㎄bT-~klWFRۇ4\:ӭu5C~­+	,E	7;at[.$Қ2F1uaƹ5MgӝEe6ʗk6Ֆȓ}Ou7Θ6}v+]htg*l]8}zƆM3oO~VS5nK#0AjۛkF7&P_`ؿdϘ5gcU[kҊ#Bg53s -77w5h@bjabU/`t!B[C1ŮET,VX5Đ A=	by}-R1X&~%B5DbzѝB[:tWC&#QuoP2^˫K&B}DUc%%#RK]Tϲ- JUAeo8;M3l[C;.,wec>M!w3]u29dȘ6zyD'X9݆6%H-*P"J.7Vo!(]g=9R'f)]8<VϺkT={YzXۯ9oS@F=JzqI]h_M74sfԣLכs91\O׻9?ۃz{}[lezazkh1]o94S|;ozjNLR/><XRfȾ8?\3֟7×Sf/5/$]Y PK
    \               com/sun/jna/sunos-sparcv9/PK
   HX2~V  @ +  com/sun/jna/sunos-sparcv9/libjnidispatch.soUT	 5f5fux T+  '  |8>
!%4|P,I$dلUFT)JjDkmlc|%鷶j+9sgvfavΜ{ysϽsN͢ev Be:?߾CWJV. D>"9XnL~voc[{UإgpJW	.Yʴg)nSj=]R|	0]]NAwOio *љeAz\.]$vt3:1~s_uuѳz#$O'즌槛:tMzϓ
#/gLސ5MH OQbX5'ӵ%yڟm*%9m|:gйutns'?s9tйt6~H5&~tL:ӹǧCgc<1OrLp9!:9JėيmoWl\ps|1{=k3Dw3Zf=bTnR,+}q_t7
_:шS{
CuױO(D_}EǾ!
u}>LOb>J}r*i
+8&ҵ.cDB}e1p\p̆#+ฒc81[8±`˥2+5pc5HxkVƾz8n`7q3^+ p
A9Au0~mpǝt]C{}[*]:Q'0]#:~~ n8'p4$]?
3po~sp/
%p*ݦvv	n[l|'P>}$uSX΢,:c|W1G/ct9o_aQNw}:N%pJ2%pTJ:oZ-8n"pGǠ~:_w;1{Ƞ{]t~{:7J垂t,z?KH_A84l	JϿbDlxanFq~*G4޳AChc'>:	'&G^ho[c~J!8_?K}?>qo>kX&ɛFo(RE܄6=6η& _w}Ap'T<'aK:0
/T'78DI<C_-io
	x
oj!xAKo9
>/1!7C^/DSCW.uI9Kvv.tHaTՃӫ,!8WGs$Ia;nܮT&ܰNHS/SHp
i	~ϗ&|ޡ?%{P'c*~?-!8//:۰=SMB/Gyi
N~> =*( 
Qᇉ*QO;v
Mqv/S١IpghU*G?l]~@p-dl۷b63>lHp΃m
Ra+F˨ٻUo~qn'*mڜ9ۓM*;$ *vU;E9}
PΉخ=q~
)
7J"cLt"{g"v.$>GM迥wPUI0frU?E	q]DLLıD~~;֡?"?ǸؤA&m*s[E@ϱO0ƣ*Ѯ!8_oBHjI*Y$a
?Dp#!7~B@	*gW	fiMqώ?V់q(Y(a&I	*[\">>vǼtĿMұ@ԇIx?"CϐR~Ԥ_3s$tr+8,o$?aLoU~Bq 
?+!yST>eKth.[XOizס</}#?5*"_H)B௩:01|ghk,ytPd?J*鹁`o<'mSq]RJ~(A|HĄc^
!@֨q	U8nTR?a?
A ^mn#҅,ļQDc=vJz\phGWYh\,ϨL C)q٤?%yBqYOY?/~оQfL*8<Owaz>y~}6_HRK}x
mOryxy9gHJ'Np*)]`!*!E	iXU:$3TQ$ GhCW<;HC/R#: ~8&~֙MLa]y$~{g*~1/Pn2ЗUE<j!_s} rI|v
vt1ߡ~
).|	kBXR<q=!T>C?:G
VDx9lߤ<dt2
~@$*'#)" WWq	
'" _t\^l0~LNSt$_/qLjHp17ajQJ~X䨔x*Coܘp)] %>E>йYj_zLi߬3a.O%8ol^9U~|q~j{R#h/#
?GQTMқx
rxT3z.{#¯H)\YDG^!".#sv*9@o2<dȻMߑA#T3Qo#*O1.zG
Tㅼ`Qj?||JgT@N8eʍe(x^i% 	^IyG&icRTo}FHy@=AOY*A9|U?a7arV۵~юGSG6ђ_)~Xo_ڣx
qk;}`{/cJI[7%]1~r)7HqR )t.qbJ1)-R+?=RΨ'ƤKQ+db|z1?cV%y! 1Ҹ[¯6s.5oW	5FDt/Ǟ3"iYoB^0Fjmn(?|qFcA*~ϤN7+]x7
>A5&tTS~%`RVҢp_YX*ae*Ype_Vz:2X6[+ޢ(E@qi2P-,JB8P
o`(PQ%v[TZ(Tлhժ}ueEUaeUE`͖P |-P1"+XZ^0XU,B-z]iQЕ
aɞWTf"Ja%,~$a[//*T(؅ZR\,Ę]ELG@z)x+K*"oүo
nx"@4X'ѿACû!i`a8*!oa)ڰ_Vz[/.+J%0Fs'	BR`̢m* ^Ufa<\̜y	ûT4(ߤ7Bqe/g`-]_x2+-dB"]XRY@	멪 5P7R3흩xײ@]ÁYBjApݶWm"=: aa`]Uqn0VXA_6ueP[L*.Ҽg@b}" u{lŘY/
		SYJ
oxWaiFWwc@Q
E`uyI |1p,`h`E%C*$7U8~i w{p-[!0x
YL/+	'4\d:IQ_**!lzls0E&&RT%c>6wl(AYP 7XÂռ"B TDBr+# i[0k%UP X*	RK`(\Cl`
4UrBz0zPBnX/TJfFVXyCAh؋ĩ8mW-WA_
 Vi!r
+*ߐY6;Ns1BQՒUa0ڢ(ˮDCbI0
5]xere<eA?<찠%VC"`ō0)"PoԿɏA*Z
zwI.^ /O˃^B2Ũ9(WA
٪@,Ѫ.\
ADI0_15rhbZsBБYY&U<ps=h%
i2S֙hmLҮE,-.;	zJ/Wrg%*ޅׯ<o[<֜,_)(veͼI+P|++<LbNo!fXu+G6U~9jVvlkӪK5 l(\5.cR$F/Xj.Yreޕ^ƻfe0`鿅D=%" ʹ,G7K7yWk,4	381C}xs6R0,sJoӸ9]RP~HkHX,Cƿ^56XNybt<Z"Kpf^g(84{0-n!
,`a/ 'b QtB48n!-cg&i!H 
nBd$b6`lz>077RS28`my&-ɲ&>h%Jpb >禴H0[p<1X& 0N>/)Xj#̂YM-=:lqz>"b06`QRO|LBVVEpx'z(L\mPQwVv09 JhJ$!RXb䝩hA,2>T/1!UJ׵WP콎Pl/ffs
voQcYfB}ֱWS@̃꤇.&P -'211jho-\jwYފo[H$Zd<Ң[6i-ݺHX0f<yuF}{l[P(ڈûܱRc $Rː+;"nNǳl],`ˋչl"<K	o	CfP:a+-WM]X>/
I@!e>NCU^\ڢvE497<QՊÇҁb\<߲,b ӆkmju|5~)4L03̜^:Y/ee^!~VfC3
3܌/5| φk>F왧薏N>ew%͙ `8i~C2NJkz"`ĿDcwuP0b5إ2N"gW$jc`)ƗMvO4,m҈D:bW}3:8v1WA{5={+8p.P?{MxG
}'pO
\gkrE8?
{6,;8#|Oc1y8~sBD8c.dŀ
~fGߩ}6OmOǴ|8~~(lۅpzd\ۍFmqA߭u4((qώ(}1GqZGອ_+\ א4(|gq(+lM
1ŅpVǷAƟ|a5,ń
wv{G_cwb?w?DP7>p|	5U{)|=Ɂ:*|
{^X+|ς#
7rFk|
_!Fpܫ`wqo\s{
yG9q݂<_a[@=_!{0^&	R'{sו}M*g
B&qY
FK%~\쫰u^n&_A=KdX'pz"y|-c&oI/w[8'pz4yBNݒ'pZ<^'Dpz>yI-JK7kᴮ<ybN1$Oh~d-MT{ɓZpzO4yRN$OvDrNX$O.i߈2Y/Ed?оɓu@1$_pz2mxO1f-ާLNp$Ƕh"8헐<%C'{Mد"yf
Z8<]'^xnܩܥSHOܭ\:xtnkŶap$xN"#_O!x&O#ߒgP8NX6>$gF	ޥ}3upc	x:8.):8n<B|3vLOlT!xNdjNpjN?է	^?L
?S7oS#:BpmH$ZOLm;	ޤSڬS;ڢSCoϧ?:S'z\aNhtkL'M9"?g;	OD^4]ǾO~2g_'?@!.O_ç2sLpm &AC	W?A9Nt>ŀtBn@ygԋF^ww~D>d~}1>nLp=~G	v~G`h6NpFH{i TTgf G>^6{S|3#4#[n<mm: _n G#p? f G5#k,O7#`8` Go2G	#}72#oR8?` Gg
x8l Gl G/3#x8{68i7#mpq8h G_Z8e Gg GUp<8d Gَ5Cp p _gH4#p8_l G_pp~8_a G3#+
080l9V=o
8 Ä+]^/RWb w9{ݕAnZhGrV~eU;޽-I,ʀOen|%b:q],+c+<br"wy.&+*Uaiy1OA2y`~z/byeE$_XGѯ.-*`qym"ule=+ݢ. r|ĝxqwy$Z_6j#`/(zaԶ-Dl=EnQߚ-\86#S%Xj*K@ESܭbppq{uL{RU>[+j"+ctjj<Ha$ū1"^XEՔ>ѝY?;IG?F
ܚ`н_%;c{rY/֖^"Y	U爭Wp#:_`R5d!{*]`PncUAm~wtc)S!
g1UKED
K%Ymq+])V;pU`XB܍nvO+3U3n-ψwAhr_H. I4ʮjUldMͤj	/
-+- 2Omdb[kGUP*={)1P353t*(\}9|#ƔR3h 
 [%%" (*-r%^wCK7qeT/Tqq Vwf.rsS©'
{]~2ldS>y
a4^S W.OˢxT*+tbKl{ח@i[iƼݾc_u;qK]ukܒQ/3Wa^^W'͘E.Ojkrp|LN_PUUXWJ]ޓ25:"4UTF+n	'3"q[e;QU4+Y׃9L	΁Ei!7h w8%Šx63$ ?bMb͗H")o_n͗&~K*U!&I;S"H:iۋP(C:GHIWw"2'MF{ZR~dT'1w6NktEޢM}g5/&W|YL_hpX:~8PLl7~:!9q.{ci8R_=W.˞0(o+(a:ӻ
Ж
V^	JXAu`efY
Ŗ̐5vqJ'M`.wNΦe ɩ
A('
'y0wQˆ*}7{!>tHczS3gCeJ0F*+ӔMi̋3+.[.yI,aaѥٗ^vɥ^6fž'NY^WǦTs7s~0X	hKjcnK
EJ/! VE
X(y 1?xO!>Z˟p3JF߬#hZNgA۠>i0H1:FҨbXY}8#Ib)+z_#3 W+[RGkx:ECK{Kfew_e2qH
و?V3C0{7<@|&XP6
P5KzķS~0LLcq{1*}`
S="1UOSF^
g멺8F|,Uㆾ0@ߞYה$ϧk.S_AU*18Y<fYO kgDF?X?i
zۉzD!©""-Z>uZ38]b`<Ӊ5$OmΆ#(ghAkr8O?}sy1ٷǷY|[|[|x1+pO.Ԯ+`ҍaxك?1/I[b0/`E@(+U傴Z΂n&=7 EWt9cO[u9ӿ!"Uɦ!뾚LGF7֖KԵײWh8dJؾUP;4o ـ
5YY#8)Ǭ-s
7I<wf6LF.EXVPee[t:D
 _,"*XRܛ_]?.N82Slz[suUHC`+pt置`屫(fj.4֋C+ܾy	j֝Qĸla}1_Ej<]IQ3@'E!}u	4\]fz[7aGlUWb6ǖhP«69
kwƬ&iNl)KApYL.9 ;s
?>>Ȅ~	<]> ;W0'53-`zY|\_fy<\,~̨:7.
l.]?~`HΣÝλN].ޛ$}$FKGmʺ	Q[]bYֺ=Hoӧ8Ѹ)>OQ=I@ڻ&]G:6-3wg?
=dlV#u\uǽS?1:uHT~d2\P&dC/1zB_\H$FZI{!'20'IK)@{2BjzK.xA|I
qjzz~p8]m폢Z;R7̨Fl>L;=s=pO=1zGMzV̒@OGhk6kW^>z#:ZK-lga2$:RhD9*Pf@Kq
CeAz
<
i+x̅el-
?f[v++{ի0ڭxpп<8_`u<hx=W\p]z\
.i 6!/Ϯ;@ւ@Ha%o-XV+cS{禈k]I!ݽ|$b!s*dٝ s;ʮÒNWUJ\.%N~
ru$$\\fr%JYrM;أ<fTӪ\zuJ/l?Kzn*4|@ϳ%=g/Q;5pQ)CCKjyu ī<ʫV͂ur$5e s\Y /P.'j|
b!&A`szCj;֑:IzOs:({
}I6~6RZ|YjvJ|S{}qy8x6~7.(t[:끖s?ҽ(!\%e?W}ĥ~=ɇAf5h5/Jѭ@
]A=YvAÔ
VR=	tK44(Vis0_YV
gt[@a=X/3#i];ą~ &̀.e5gyw-@S/;;َToVj/71mU66幁
C2 k0R[&%9jzD΅0t+
W~VnyS	>4"[3<cE~qA_E2 8Fñ#w4H&8`(>Ҵ{JӮSMBH
G%!li(<,Gz:Z-'8^90)	%yjꙝ"ls-iy o5;ӧ@g}I
}vt10HL|ځ}wͻ3BZ%bk[+ȇ+
~b|5*='^G $OrcBvoYjY >b)։ւL ˸ZgMף#6?[A@{QSM$#\Ot >A(l!ӡX%ͭ){X>HD]lyu
CgkzmMR(GyTP|973C
A$rIezɽP3임O0?rcQ=|\ׂM6@8Ԧ/oݧ*g]v|sLOk	YB wZ>[-5cECIyO&(eE4
<@󱱗7VCPreGX^3ѕI^H28{)2Ke>sP-C9c2_q7i~=o1S$bx @j#i,4Cvv=}, fEJ-'^N?mcGj`~<o"_oz14پc~ԗ6fߴ8floz<fߴ:fcVm~1?De	Ďhc?}0ܷlM }]O^:o*XoRV9qghd	[ґm.`#]¸
W^7Ҽ sY.oc}p)|-9B{#"v6򇶦
mA<ACQE8֊V7~k ?@;UñCG=@|9D#"rA16^^('NI4P_'ʍ<ܠS
d6:muKyr:û㘮 yN]~`7/C_0ā6獿1n7#]<;5F!f5o7`F~/mƂc֍h\Nl8HA}Yl
s{665̫Wӽ?DC98Abi]V#m,>kn\Gr}b;|CLӂ}:W~#Ǥa\z=>|:fס8rtlcXiL'0ø Xmur<B|wKrĉˠ̾q伍Yxn!ψf3.5k)
`l־PӎA;?5XS0N؇rY'},qNoF3mXvePPf1b<L`H|YX'txv"%E7)b: Ez.!m#k4KfL*xT-	
{hK<naLPrh~ȭp-v|oS:k>.#@y|Z(ww=ԗZ=>=Y
HCCRGqBB-YLHۡiZ>E4!U-L}eb;X՗\,CuD{ÇzX~ eZPǛKu4@PuTGC?x-2})ĥ:QǣPn5և:D\#ҏ:ryPfs،TGu
B>E\׏:rLAXTG~?ȆrLnq>i(~?s1%q+0=1xM^F_p;ziʳ_H-}Re]	
=WuAMg'.$\=ͯnj|4jiAzOjcsA-|^&?]3
-_ $7g?J#0]j~+ioi\[=O<[48?mNv{F9}h748<ʵ?=Ën箧\2{Y<K<;;MnnʍfQP6J<}X?B,Cr>^|plb/TgFb50->焏r>xj&s4g.Óp[gtx~t]MϧXx<p<wc\iXcc,{ʽ~;4Ơ, y<
PͯSsg^6{>H
q|$$ٿmxo݂o1Z7B(l[H_GZ{͞GxGg5S`\cmuh4?u-1sW8GXYmmz``_PSN_Ndx%!WI8k"ݺ##c;+޾qkvYx0p9{e9*
:|}׭3ޏ4(Z]SՏ{J-{t59DF*Ӛ&GGD~P#m{lS<rP	!>]6]r'çAo_k:=9(샕6]v\QpGHj&9#+%=o@b|ةD4M5mꜙXbhCpPF@Bu9x,Gk8etC.jE'tdrB\&/
q
{M0D1
=cx5b{R^K$^(^&xB`Ns/va߂8T7G8QέV@@'̸vggx&=Ⱦv.Γx
$^3,xul:QzsR[Ҍլy}k_Εy=ۍb>@3<ti'HR7pr+j̽>$>8<8<@0E'(
^6568f=^mrX<N[麝{{:ɂ^DҏDҏm>-2-6\'?USZ{x(Fc=G<	kwkNISP'SQi-,[gRӆޡC[ؕsQ64ոzv=>wY2~VLOһ^ѵ̟Uw8s7I_r%8 9>DI((ۂ:':'M<0cOݧyvx}) `b?쇕1 ǜʧ,vX't+	M6	ia<qO:P~ܿ):'Gf~k<gNyd8w}OyK
iʉ@Iϟۈ?f}Wsm~
ZU\pOvRD;ޡ8#vw~0hv<lg9ӳ;u9 wJtPz:A;w(E+>䥶Vȡ]3!
`-1ҭXS/E9ź)Z?z;5xOٚ[N1&b&`֗sDRR<wk7̭7+^cU$|SF"Bgcmsޣ BcQ
wie-#ktn>tsqviG|+ܘ|mG<vзz-sڡ?V  m{ 7
)'
p.ܧ 7  w:
p; &`x5v:'|ίlù;s
Мꚞ6];#CwFb8=#B7Ebxʈ0~lG'de?xeVA=uV@&'OnݹE;툲b9;QP~-OX@;.gd<YDzg$Oף|S7︚Wny!yy۩yۓz0t@c:xe{]3`fq
˪1Ѯ!õ\ Ǎp<8+'49=
XqW\?__=kƂ8ÞK<Q8K/E>菽zP_VzkUlW>ryRsy'| ^uLy&&#ꦝγg*uǲ5ɴLS;v>+6۹^18o<2;wq.5]w=y??BkVM4JׅFYל]:Y(?nGg G<!"?{naJ7s'݊d4<glk~nnkm}cֶ_֑~S;89qr7cDVcCFlwE#l-{Ƈna2?ttn?Qךtv:Zow`\84vNLv+;SteqǠl270@[17roDt>k|X1H9!-݇ǽaLАp;$~M>>cuKu`"C֢T-r/.](җMM|~p0"ʡI% >O;~m>HQ˻<9gG9W{Vrg[Z1XnWTWD\Kg^+kz36
s\~?D?GR?K֬]Yyi<Oկ$ގo7AYvx;w^ts^y.Vy:j2p~'U9?yiN݂k\jǴBKxN|q`{܋C	/%<:1.b4^|$ᰵvVe[Sߋ<щm=/Qw{G1/v+w!ٰ9qm+,h+!vB_tw{zv!sA@G;[|(tb˩?x2 a4їOYu\[z,ar(	:b9[9uA=smGu&@?1PvPxzŌftk:׬kHc[7>15i(|_FoLʞO:۽Nؤ/;<6N=n;ڄO{v8^؏D9}#/O\Jr>Dc=/]$Y	{7qnN6fȿ
J$wwgJm/϶l»3|Wmу\(!S]ʣǄdOulڿ3x|x~.rv<oPooN\ﮇ6'^+k>
g29VA]
:#[Y=[CxCv3OKo1Ztfg|ɋ12(ûǴ?yOhw|Agl;s<pdf{Ox6Dyz"KS9=s}ݏtx[>mkÇBtE&$>mA't`yLٵp)hRۑ4|n6©97~©YNghnsFut'tc9Gs/&1(*R	e3q,8ýlϳC 1e8	p}'|]>PGkC|⾣3Su{u+p'tGnzu>3Ŗ;@sLʒ3gg=>N9N.8zo~{~,kĜIfWW#v"5xM̲CZC؎jp7J)~+6V
odst2:jtmokO7Y>z>sN~1qe)W܇}<ʆkA=8\ࣛ#ć\ Mf<`D|9rN/\7)zC`kOxy:ĮEY޽Y8xF<-<5<tWu@H6*j7wтm9#,;'b;@ϔg!wa< ieS͋<3P`(cl,>Ic*P8>Ƈ+8sXυv`wtϖ ҺS^6"zB^@4c"_n/~NZkhW<PJeu?äu?Ce#,kѯI:gcez|NrO{pzmв|mв}x%'x|裱r'aa{4ޡ@P?INЭPFDSe"Ю\GXm?GZ&?m'(2{|ּVkے%m,}i("ZCULOh2ݵ<y`~>utu#hS7?B?~:_I\m}M]7Mwu>}sv|e=k4@03ţ,,qv_BVȵ (w+ì/q{?Ve
~+Be
`>X, Yg z"ҫXSBN:߮::?nr&N_n(<gy=*έ7ߝQgKT<k'a&z_獴&i}\;ֽ:qst (mQ!˟dCmz~XIP2.c߸W<{~؛IX:`D=$?N$H߀%&峠Yf8yg cI&&&}P~=$|#
t|%M/3fXAD6=!;Aƾ}a;DOm7k/ƺCE~I}fKF^}]4<\zcR	~m}q~:o2WJõQS|޳X&Zt4kiT~N|1XDs/he3) ӱ|ThXgÇ$E]+/@|Kh;o_PDh`h_Iu*}l1<#+buzZi.tRlےg:|V]ݴ_lnPu㇜>tp Wp݉vGTy	 py\e8k#fl3s \ӽ;WAy#;
hNƯ}x'y
i`OF;K:fB,?dnmrwB_6,Y_llsămZ۬6+\|)m36睛mfɿm=k/m%6_m4fs5Џ6Y&ҋm"_mhly&la_?m㶰͘^l3fq9&5c:dEA[]9=wn|=U?wcEjz}ʐ6o{x57Dq݆ݣL?U|VHZ_kݿL?b"~?r7/f_/=@ېF"W
ekGWXȹ9|slG9MnkS?rmٻ?6?-zffpKlhf~dlEC1mnMۄ۬:G4}Ͷ6`5=	rH?m36{/o8GYkc,<|m>mn?
zim6sPriEۋm~I?G}YclFItFYnLov" .3g!+
hmw<F1<4/2Y~Es?YO~{FYQ6fhsu9A':sY.\Xug/rw|qfvx&\APFg;M8&鳵;}CNϱf4~|h<tcyq,xϤQ1wcm5vbqͶ\f76MS?6F@AG@X}~|n`vWAV'?څlr&7OSrg!)9ke^mh>s{~jنoe/|l`LugߠlWpR݋?l2l"-lR	^毴In/6qmKhl2&y,O\YЎ̞evk/mymK2%ccK|vn Obؼ-r{/vǰy7ϙw]}6>6o>Eg7Sh6cL^l0/6h紥
3<!uj.|%8ym
}Fs[;tZsp\ 8W	z&mbqX<Cæ]zjp~1LkoI!{a[u|qa2 <[Lַ9}ooa6hq幎vֶivuAD&v]laל^ӗuvHc/Fɣ^ȿYi`Dc{uО0
u_lZeD:?j7ɒuamkޟeC9?KXs4;kJ:9.?)m?Z6~
񫡐+A>{ih٭)O*Ǿٞ᳷)|o9La^5=:79,0;L&ޟx7s?n/?}XsǛ45a7o}kz_Zs?GƯH5=z1%Ns@пZ2{ދ{{;s/45Nӓ<4=ŝSM0Qoӆvx8ĝ~-؋>;9ll9C*g챶qhNš9e_]Sj8ώՠQL@,/ޱ^O{w}V}&,_-tLty?mgcˀ!;wOsٽ)Cn
^86Em"{}{qLvlIǞXbp	7ծ.'>lWG}>nxݺ-^bx]mjݭ`UP
dFx%.oP{!{7tM v[^JvWG}_(g{Ꝿ_Y.

t~#
Kxq)~p8O>9!?=:=![{}Y=?~+7{RZ.q㷪[iu[.W؞@c'@]trddbtQطҷvnKwuI%wp<ŉ(lcP$gUp.8OpK=G+'1:4$rEԋS
is
Q"ۈ=4Φ;}È0!hXm决r[u$t}Yh_+; ;vKv#^BrIʗ奔B9ʗPAI}=|br/+ryR(vVe"ƽ\o.Ruh,4<c(˕VvgN2,6^ܓhDRxsh5Њi&ӪqN229ߥB8#ճY-'} f1f
-&5\*1("?iRC//&_-rIl*?Xb.e.lo࿕"hdoWԲo
.X=%cՌ1eɓU+S4ᡙxxނfY_z0_[HP/t6ԿM?vl^`^CNͤZ@>$gP%so6_o7upHme9/Kyė^lEȽ	6B2<2z0Az_>*uvIYg6˾.(	po'
w"˺^+޳*{άb[<~'v[η]쳊}-MN[AQ'C9]m|ng]2+օ{`=\ql rZzp{ xC:L2txJ	I-c=:oJ8K^	:}I6ѡ1C_e^c:&6{Yo^9LmeO_&SGc:X&x:?~OogM4{YnC&x>wM.OFmѥEx/bz\Mx/}d	\|\<]ȾGt,{	^ϭǱZ/uJJ욞o>!L<pAa=_أxDQf27ԾYg{vۖ~VחB+?c?ޠ`ϡ.qʝpŞcX_k|K\5t WΓ0G2Wmp0Eٿ7V^Mωǽp	Ѓ\qwFwhua!]%O0zvG'Fp
-Csx۳0aulc]m{6Ig=#$%@8>
a]PO'jzL\[˾u}/n~0Ń>:ļ?Üu)~I?98i b'$T WNɶh[q{`ay֥mپ]u@.[	"G4O%=#<JsXp`_Jx
xs/ekɡ
^^{8+%OWű)r{=&O=fB<6Zqnb_%T8 S|qȀme߸{՜T1}3o~'L󁁍a?Rf5;51,W{>{%գAދn@#VАE6eæ18ͅ&ֳo .ۃQU;
=(1zH'+cψrj`B'~aGbF&qOuRu7n7'7>&JNLw:7ۄV'r˴	Y8
kpuZ=VLk"ڝ.X?ҔD+W5h=xb44%D'ӚHK?2jFk',Ӛ
'# ?T_#=VS:''9&,#8DɄ$+pm@7jLMeNӍe@.>oۚĨdQOapoV~k/x}h]^{u[Чw?^ݑ)5#woK6va~N[9JG(`]{=z<֍94#[мs{g'#9!'ʌeQ^Ev|.dCBkۉl/6,dkd;5$ɶ1-D6zm$j%ي{k [l.alulٶI]ԋld+0%-"v fU6ǿeso [D6zޗk![Hm [d{8"&3ń-dI9
$c Y?OG-dWesPwAQϷQr߶56fLط>Ա+4ޗqpC[c\$ל`}Xmn޷ry]ӱu#5WD{%H6x,hH4h4[%J4hXfQD#шhE4K4|4:,hdQ|',hMH*pN,W{8+mg43<`ƺX6#:l,{F#5v!q$'!Q3dlq h!/I`ȅula,R[߿;OOuN:uSU6Oʿɯ;jUxt=m2{7"F/9c~PB;;Fd9'<p:p(ySo|<e8?ycS 4֍z2ߜ&_=|x.<
`m>;?L.c^Y)_F>5^]$#[e\%lcKS,󆝼=yKy?}
g/[(dN#k«8Vde>9(?zzGI7 {zNILǩ)#\͗ZO[ϩ<|%+n:O+~YF8SJ}M]ɫ{ԟe\v2ާN7:y;d>]Ska~AP~5QèC玡3yny>y*LX3n(WK0enw=,aG)c|2l=ʐcQ0pTGr\*0ex2XU~Vط
Qh?>kDڠk+|>bip/LQuk'ߨk+,t+}mL%\Imk{Ca}V諒8/{ge&!k'}j=-ѓ?X'm̓8
&,d_q=	 u-s]>FeWüa4(Y~Z''<j4@O:'܏C'\<8)Ox»=^(·{UnGfOio፞0	!uO<!eODx?+GO<ۿµ_㩏ړf{N"&>f}<	0'/g&{̿ހ<OH_s<ao,IEY9x8>x=>聏?^7l{#~]O|+)]FWn48k%[?<3ξdC׬
»&^ឺk*u-ck_hvkE9LكkNM6M4CV(Z>=_eZwQ'羀oM2'ߙFO
7:툓mK/lyy_vK=ucʣ-b,2_@?9KS+rw56&{}\-Jj6|h	qP>ߘ>XMzU[{JRC0爍
c?Xe#rG"|n%%#,>
}7n
mux{ ]qҏ6'/y08(w9m_s+|>N<`.kcZ+4爰Wc+xMV!L:5ܦ@.:JX&fv)ܸGMk@v11ޓ
ߋ4֞ȓyscuRVGT%ΚW'+ϴ//}9ޯ)srp+.nĸݑ7=Q	<,N;>CiH{˟SUeխ':8t}nCc*%ؗ3,ϏH[78;GZ+[nki+&I{skD52>>	k`\m{s&*~!
9#/-{!ϘnMݤtJ&JeR}:gi؞ mKco\zտ	xIt1󊽶{/ޗ;xIkt!2~ 7>"m#}VqՆó5O
h$?GZ6F>3y{>u,G:t~/gXmI9{uXN:?ݐc<5y[򃀕9>^cG<um^8p/|Eo=Q!#"|ڕmD@6OuM61f;҈NR)cʽ;7g$y
YY+4?`?Qa9?="Squ6g?a',Hjch?罜E?'wq܋1mb/^՚cd[>+FcpR|vAȽ^Րm& ͷ^_yG{⦵ɽa=8~we:Xc;ס,/.SΘeW9I3_c9ezkw=ו	I{::	邗#ev8<Q᜶`jdʽl\|@r|,cEGVu3,˕X.=}uJœjLE]g*֎kV[c!dVOܹ]qz{"$N)ۥ\;Eҁ6C=򍜧;r ;r۝u^>x<bX,:FsfDbLy |tcL{؏ǨfC^ΑW|*kOMjҵ;z~.u}ȳYٱ.t֝)0;Oy
&oc̑SyX܏;gYj"0|8Yo(	$v)_fIf$[mZ6s~ Z3u/CSK$y~:LxS4R,+Y1EI9ˮR8]#;rl=&xSюjI;ހ}JK=TW86ݑo@*K*um%rM)EW6/_gKԹѤJ5/2onpOбܻZr!ƳEJ9@ѩ/q)'$ٰO&t:uڸn4%yGh!#?mfwbT4(200s<PLW-b*/wy/¬pm-`g9z@
ڕ1i>ТKgui@sf44-!{g!ږQ
ǣ=\ >3:67lz=A=CLx忊+ӃUi:rN&|>oMNMl/ߖJіn[z_ۂ<L40p̄dil{L}t!
뙿TScIk1mL[Ŵ!tyk_4	s/q'eRpN$.>kUYdҷh=t.Y6-.19ڝs,\6Wxh6Л. 	a;d}׷9rB"89]{Yiw<}7~Sew=_Ow|د<搃[Lw,gscrmB%;Bv7=ԳlUeYdY
x@~;K~N~Yx C,#f?#=:$	8>2j+;A8if_9nH>鼇_vN˷{'Γ*^w-;aȷl׻e|ϻos2ߍRg+k	A#.{oqVKC'=!|_OCk,u	[3uSDf#MG4=;JN]8StƩa{Է_ttX϶uT+\mk6EO+zy%ӷ[dn\p68
}O!Lg0LfmaV2㽎ѷsfNL ZMikIPX8ۂ9fX)kYm[5g'{tL}6h٦:hr{]1n=|2hñQa%`(˩H]Gq}b@Or:#<eV؞<źŴ!;MgGl/=0nЕ27
)ʸ4aiԑJN#U 6}<F82ee/cie-C_xHɋ!nsRρN~
zy:sIwv0kV]9e6}WpN=l#NNM~!Sl%bfaD0<}#/x&R61tkr	Cshbw\%mmގo~6[
?J9Mqm{/8SsvHE</[sJD|p~]u:M;տ>Y%=,ݷA<ed{6Ga__lCy{]oL>e}%d8'ӷ;6v%[-|ohސp<fb}Ct8`anAI
ہI~C-5/WVo[~s
$*gF1Joo>f(m~~%YW%뎬JYCeڡJ+V}A=_oMCxbL.84m0YŘޤ4BvQUxfm9됿Xʸ`Vh2KY[Jfxc7߶HF7*4~`[(%S\3 6E0~_o1
p}u7ڷ7iBŁۇ/ILxaθ-:vq<řOsit]KdV=poIڿ޳|k: 7`\"^1#&h`L{=ctNK?Yo\cRwǞLWg#֑UB
PkCFS:wǥҁFa% _FvC&XCY ¤GYݘ.U&]Le;CM1v9瀯r!g9{o,K<s.Top:2
h{KIT~gKÜ_۟%rA{g,X9n9(W
0xrL0<?	>]!צul7ug]:bMݟliJeZ^ <72#CG05/Z¹hi_*ݔNk:a|Ȳ%o.^f4ry4|VkR-]kpSxfsA%bw?'|͟4ZʵZʍu5*aL\/s1N	}
aso%z^羚;$s?/}1?^:U=A6&쾥j?C}gۤ6
.oӵ#pK(z?юK]=e
Ie}v~Ҿ6_78&?EIqu m<7DU]+}ms)O37uBs:Ƨ az
0Ee{q.iL)	}vK ,S(KZ0~s)ΛzEI/|:J3lc<!8m	'C(t#dD ü
q\$4΅zXt^ZßE?ˎWº)O@)S ^I鶛˓JSRip娳lk3#-[ċ& ?ڭ%ZS2lEl	GrI<y0'?"mAO
vp<kQRj*g!X6.(q/*ʄ?ߘou׻-Mt?vj«~C)M꫅r?t!dǑ4q>h˴wE/.}Я,KE9?JF9_
A.-Ҥ2el\kǀ{_3\HW<FaqPOa|&O<2YЭ-JN]IVJQ#bZMQr{436hϘwP"~nE'FLl;s	\/F;/49nw_
yJr=[I#L	p6^IA:;K q.ߐ:o==q}B1Z\{*ZY2CS.Jnyi[%O8圷R=&%Ҋ`p8_`<̨~̈O	)xoE13fvε	D_=o s~OB
g	n!|ׅtSRFiӦ?MdC\W
ϵ^=>Ӟ{u#a2@ÉqhwsƬ*9S^@b}R)p5VSl*_c9}5&xI:/T;M!SV%x"2^c^S 믮hղǕ!kQr=d,U3o]/g)2չȑ\m1kv	iJ0
˻cZQrǹU3H?=qnAH{j)1'#G1BScJZ1ҧ5fcj8Oazi_slC30܊G,7h(wB9֬͊^|S"hMsh"=".:|In}Tu*K|	ޤ0HCSJUڮg
\G._C9BYuLsJ;-z6@__#}<Zmh&dY}q̑\<yxC'{@6DaRԮԍbxv{s^돬AъoO_ުWl~,>)
+	Aպ+:u̻Q+)oq3WӵǍl~7nD\Ts?ɸ8ugڥ5^5NW/ǀ˼PK3t}.GM?iiQ2U1@^~=7;#O(Ux)Gf}yEs,KtCZhsV*kZk|q%d$pC`?1UaX:*T6j/m7ayקОXt
ATJzATk}ZzIOHsrWhӲ>+>MNM٧2IOZbV%}ZS6}%5bO/?mQgfx88Zez81NMݢjbw ;NL{BhhEU?!n޸yț[ُCq!	wZfeO?]S2=&1<qE_6QmwL7}$y!n]zt౟9XM:u#5z=XkT?NWBڠpcBNekCyujC=%KCҩ>՚63m&l56ɻ4/L(hs
mCJ4
qJB
A}E!k`,j61n*AK(Sc]G]<8	Z_e)_0۠k;N;5Eᜋz2yVA7
*y	MQ%^
Ƌ>
NBO@czء}1&H|q|Gˡ\}!I4!8SEY)c1&T3I1؋ 'm7|J嘌2x-l(ٯ}E矰'LA0p)eEк;η"~11gS8zW:r\_գ+h;C[eT_1s~?/tUB@N%z\ov--{|0Źmx,|?O|kښA:bNBO|Q|u(qeSsL(ZU74~/(MBI
z)x
sEC;CM<ݠG8s^ÜW1組-!pkc
zϴm&m~nElm;lYC;3!i]8g6Vr*Myq1Ο9CΗ䍽U||r(I1
Ж	<p벖= (窲!~˒tG '
ʵ[~4a߂¶9_c7. 11n),<hs$=G48t,hphf8f>P\đ|wh/6q{w>'2sf6ڏߟʍHsڻf\(
mEMo9ײ/ CSiǼ4Hӂ.4.h@uq5(lЙK
,\;O dp",:W;qkOQ16A):thOxf}-f[B/]D莓0~RF;c~g
/%Sc>՞2DМH{hOn?k)vSJ)s/`#ׇi),a9V>9+;zygHy{ϛϴ9xlykE-v3l`e>a?));s"Jӻt҇2`</Ȯv%mV*gLz5tA&.xfc`2vu1B{h[qz=e[
9ڈ\ڙagj!yg
Y@c~j~א|Ou(mq䤺}dݮ=GmΙ̋Sw7x#b7i=Ɨ0NYUb\{mu^} RkoE#*qi3}b>m^源NY+l<劔)307B
S|3yW3/MڑcC_6}^Agՠs^JBf{/tq"(mkI|m-%lk2clk#ܬb_;G)vAVCre]G7
ur>eb~!e\ʺ	ȹB%}Gxu

ƐoW"kA[n}Ynf?|v
!ቾ
+S>AJu"<ci\%B-dg1oVa7ni^{ q,@ݷ@	#C6
]
)S@Onns]Óh<CLAA#/`~>_P)R\|N_ٸ!`:𑆊A1n'ƵS
zsLEH7&(Ŕ5臤rJ~R=2ak(	re47=_BB_IUs+C}M|K^7ж%d}j5ضgw^H }O#U
&dJGO_-}~[xy;t	t9V#7'
}^ٙr3g/mb|gqۄuu8\E{ʗvM	[OqM<t:āB=R~16Pd$]wkxXWhWW/RkPt
U_yļo:߰GHl+dCv:;Qc]㕉5ڲBDJwmt(6hS%6	1K<|Q)"'ҴojBO_ho|4s'c/ =xwp?N8#J/8#OBi6.]g#dy0EQkݏ=ڱsӆvxyltqdq8q!x-Ls@HKc'=lkon)}2ͼ]#^:s:
i6ԓu{;yfW'<:f*Ώ޹7uR3u,sK@Kx0]M,.ƃǆ1D
̓:6m`2UFK1=ėt~?kC\OQ]'0Gkj>i>T^q#]'hZޠ3.[&㢌#<}3PO=tG୴:vj7:|B֡Φy\.L86MKk[m\sY3r$4l=dzKu:7>+6U|X/l#EeCZ39R'aYG4h+!+HGk[]y,
ǆ!\E
UAa-RD"agnܹy{ęt^]8([M(ݏp	>M_6A؈~uf-co
؝_k섮4,gܙfي~eTR\,o<;w+e=Pkam
kzV~'eOcO(`Cm[oYK#ݗ{rRB+,ì$&/u9$ƮˁGĺh^neuAOz:[ξd~(FQ&g&T3L[mKdӺqjhB>C}-3b9fp]q]vZYo)=>16YU!>rt%Jgwe[i'C15<i_;,<n5:YW49VݛY;Mč&Ӭc9|<C)hh-ҾV9~/,|N<E>
)y1p@;u<9"uv[iBqGF"
+e~Ȗs!sߜu6J؜,㠟
;OW 
PƊ[]|G}Ux/\᧜򄬇.[1{mT3o$TG#-q=k|sO[wr]D\L[eR01eCȹ=2@Pϵ>a\8c/qgal^<[
Fש:Fc0F)(w>8Fo Qf|c-B.?!Qg+Ρθ=i60 ag4	ySYY,xUF
}ڡ/iU<(?I/
^0A|0-wz$dsDR9+hpWu_=6 >|w6m/^צze	ڼǀ'
R7ǂ?o0x^g1&HʹORFm\KG0d_?q!e1Iݥ՞ѶƶKAm-C|0qi_}|hٳylwu7.wS|Y7HcЇq>b.WǌA1wc0=f\;qo=?>u>A><'ģN9h?g?H~8=8iik2o0>MPsaÜv麡/:% ܊YE 'r u?c
3B<u5C>L->΍:kQn*־k_Drbzr.t4<}N%d^[+/AEs~aJŧ=n{9zV!^GvcN6A_}-qN2GX@y;|}AǸ^wcڤ ghGFψ^4rD߫Z~O:cQ/ֈl!oF[[a:w9J
e*C>.Ms#)AQpt9Rnc>@ wŏj" X3;eZ:]uҁd9+b'+c[e\цo1c)QA&T3ځ1:c8rW@TѲ!~p;w)IiRY}r1O+\e_Q
|zOoX~a%z!vA~L#wd<BXٍǘvt>wc
T;z-kݓ;=$r_1q}"Cv«
xs#ןjtlNJOZtmL3|ݟ*+iN,5j=<F^4{vfN?sY15KY.7i[>+ZkR"<)0eMzm8/㴈k^אO۪.,mc,K-1Cxa*;^"a!\|w*itqqh۽Lz:<svX\Ve[P3"H\	_sę(c5D:kL@;0P~@r$N{Хo{µ5-~pi4+p.6ZWXCVJ)9KI2WGoʡ?o
zBn	G0?e6Le)ޫ>>_@ucNl
gg둷g.
?p~	?ܗ0y\, {4
t޴k+VJ+tzmqOR7lsm%ҹoEqC-pǃl;%ĿX=}kFaT46s}Ĵ~EM@N|PzSR%:,x]ICysKoȷrr:{pL=/abS]"-\qr9mcc;c]j%Jό`ҡq
#-y*Dg!&ݕ5IOtIJBKI?%Lz@oֻCWw%@CQ{<nїV+u!½Zas"{c
څ2'7ڝK´KZBF;I.|M%
ڙLLߴfEQdÞ9y&/!C]X駒{0o*T, T?So;៺(ayϡ`Cc#_#	z9m!C
{j}ЃĘ$_+7W҇MO)bd>+e7
?{E?}KFd'0m抑pH-о7o(0'~u]5UW	D#0l!F{^0万ju0"RSn
'B݃<G`,i?@?1?`=Q{=/}|QWȷc[n>/yv+S..aN|y^{^I+2(#lF?Æ6	G+c<hMDD{M/(M/pBDcn#r3x@ǲ(ku/ǒH֡s{NB_)f])mG! Nm瘽G̽?0)g_9sϾcJeRB_лWYSBڝKLncv?.c哜G5zӓ+WdM%/=Owwǜ	9]Or}?1cka{7N,I*V1򛾍kڣ=DWY}OIgƉ{'2±dWka/K_nfbjmIOK&`?,4eRo;RjH=s!
F{5LMݗjR1]yٚ[wM=5^I=#,>\z9rwlSDs5m6>}2ʠ|9e2q֮D;ͻ޴'=|A9ay~z/5bcއǼ'y:6^&3qΟݸӗ]'7=]~ϋoeQVԞ~[㗊ڻWڟy?)jkXnt[W)5A{	<'D.9+P+#_w}}KGN7?N
m/O{fvN
x:;)o==;ɥN/uIQ~С듑Ǘ$'$O/I~$Y~E:&Ozc+f8
"M~2#LP?ڷ7ihhCs=xEɊԦ+R"u/+Rw[E*~[KU}E7+R"_*RSzk"ul{0U#:`ږOٯ!ϱ;Py|F_vMjoc礮?)1`1a76zG7`Ao0eѿDX1aoyOSkEGjR랞Zw&oCLk"V!ȵ9q>jaZkWiD>|xol/%b)$}ctw yn<):2PɼIJ^s#暧$HD!k
p[Z-M3i@C~C/<{\teZX'N9i<,Pr8<kg2tPB$Ֆqfٴ6E~p\cˤ?
wnvDl&="bO:FEd+FiPV?" eRY皬Kyrįroꁮw~I>ŞE^]GC
'Fwsx_Uka#<CՓNPw46h~y*MtkVOklJ\^	/dY3WZG<~yL !3
9m열ic
ma
a_lѾ~-MJC_k;^kq]hR,zL(D}Ӟ;!tВnm(9AK(scH/Ж
a -Wv3d#u%!g݃/ܷaZ(hA#=SqEpOLMw91F'.7T!'WA[h?PZsϮ,{K0=o'Q G?t-Qi#zb!A:'mL4),*}}:t"8yz_,A{~]'?/_^Yʍ(Gߓ.eT	r>	?Ak5'|_;}Л&j-<]޵ɱ4<}Sgy
:ӽ_C?a~mKokmMr i[_Z2nfl2_+mGt|#A#A}e*y~:>aPtLV/u1[sF:7^ЦI%cuWWS:e3	k<5?|xCӦq#siZ)κ. =~rz?^8{oͬ냏;CuӖ
yġ
,/4̑?[ʏ';r-nyN]OJr'-pz)Oi!w}${0$.)Omeڛ,<+gUjeL#6چ2Jy#ns?ϬL't
ȍCyZ)ȍk(ǚkmA#o|zK&_QFh̴&=2'˧GuJ-|12$_AC^,XKNYא&#D:sI$<4YMd7Pg܂5Llor/"OMw0<~i{ak =.S_O{[j(w	!C8.T\?S<׷AuF~<gU|ߋV&?Le6	pNi=&|Dkؾ@f_Ό߬&މs8orNЯk9HX([3?:6lx+zQ׮hEۀ<?m}~w^O}s!}_~;;_Q(v[OaC=$>k	igP_*u>=Ч}]9Ep%|GsܳHNʙk[Ե6/kڀ֦iQgүpߒ}KO~vzmh{"
=Zq'urqiqR)ͬJ53;ZCO1t+瓑W9@wf	xuRgt÷&U i8 򧕍VNs&t#/3

3#ޥΌAw[>;ѯNiCp/r9(wN#p:ܚ_v2遠{䛇y~{to
*03Л_[fGv961ݩ5..`_n?C~`sA9eJCu׺nosY|/rZ'_׎CG2z|=ؼ0hAN֖io\ǖq+X;za*~c̤Тeac1_/+ǳn*{@uЯ(>i21ZP`L5	?y9{ѧ+sR.Z9۱@W:<MBF[d%҆53O>x&9Oxx&ᙌg
x3
9x"x)SO	s lSgg69xx)3|<Yg!,<(x.S<<óO|_$)<Txϧ|ϕxYo|{<_Sg%\gkTcuxjs=fԾ}F
Ok9pM%b<uC>y~额KBnLtrwPku1co<7Vl?S6
p~o⹵lB|@dqOɛ
8i'aw
9빪s56:P&b>|^O?\G޶oR1_9s(Wڴ0c>795X'8g&}QgCnynti2W,aVİ&ࡕxD쳙< Y+x·xokx륆Orn&y>NSX!ҞXh}~s񽱕0Zo(oV엻\HuM2msmD&k
Ϣ*B\ues7_brOap\|a-_S
kV{&dm	Xyk[osXy1ԧ1i%Ks.a8°O=NmEBV^8paCo
}%^$52&%igLU	S^@6_@l
(K0V wRI7	_bLtEOtځ匧i4̾!
.IJM(eeOS}b}KcŊr+'UI=˿y3޷&5N,?ӷJvS.]ISu'A\wTB[6gZ'Q_&'ߏ.W..ϗ{$kH(C3V`IWٓeYLzq;}?̾<_w'y*x"wW[Ό-b9go&<en2E<;j7ɳ괵ÿ|G:L/
'hi'-뎳cc}(Ƀ{1PGhOYHڞgO!	Š\QN{铗
5ǹv8k}13V=,AC7裯:_1<'djφL!S﷗
p~ϻy^<29;2/@Xsבg}|Y6>x|}Qod29e٨e;ٵ9B됲0qool\ݡn핍_]n3?':iJ9osh L
rr}tɍk*7.?&XE^EԛTї~G?>{Ͼ~>v?7,gҾ9ru,w{q|,֍I9v>1w?*?	vvףrQ	QYQr}w] e='dࣧvӟ)./yK;pr~+{&.Tߟ{u[xOcٚTXRC^xiK}]fyik8Su",D^CK/=]35I!MT>ʵ5;o]ndCzg_nVB3ӰX20uOg^e}ξQ}Yܷγ?04kyC).-y4Me?cV֗	ѦGzg"o:gr<k.o)iuPfx?Xо\{]Uu{~u!dY״!>2Kז{~5*b݌q6A^.x>0'(S[183}PBO-)Q{/gh-RL-t19iLՍܛ x<SԿY~.7]$̻Q3!VEw%j[=KxE[}OX,wCz𵪆/d0>.̢GI!6a٪Ю5owɵ4f~[x6}e$
gr%puJpRX_BMNh9pēB:'[~Z؝0`=l|-\fԽ##?mzS${xfGONo-з6z%٥_srrewϛn+fW05Z)5Hvwp1ƗUUh-槱~qmm@n4mS$oSגwq-a9;;&;ɀ:wmŚQC*iH=0
]u MrDZZmڝ&<;}x|2ZF\grok+{ OxQA:ͩq*josҼ lҶ2:*-=pßd[1vlm<3uΘک2%8Z"}b<|/^k|O7SIۺ7G!Tw-e<c#?|Sہv`Vo_jUApZ^5+%=ō}K𿸫65WZgy#~LMgN_A?ڵG~"½]S߁90ݓvUܶ0pwU6xo1<m3=EM[<m~ݑ({Q߭?YM]ݷ~DБ\AG{#?H+kTj31ӟ߅q	n?d.qf3u,rOR"`Q2ϵ a.r0bO|`C!Fxqo'a*]Xr8Q^^kVCrv)1<r.~ooPk=Tqڼϥj߱NCBxa3l?3,c(eĚT1LyBHԢ?'pqwrÙj1GBݻ3&6JCwUSNpɘkex~yæn{h@zCtj`@wxȁ3[#nzgffc$	&<	Y`G aO逡	~?=v^Tf2 8~	|IBxާ-Pa[׹wF}TuL|W}Vg'GeqD !=]%!)ir˖OY&a|KvuS[Aa!H-efj2xhXP&dF#roLˌɇtD䫁S9&@f1B^I>wȋ_vT18|81/k',C
=ƹb/Ǎw. n8qB_!`@s;Ntoh͠
q݁0Ӈ+t0a}KʂaD=zӗk
lGy:p?&De{qo]7޻R	_8q9%rGu&QxROVqЯ	x>%LI~7OG`c}˽Oumx4Os	3ؽ0 㰜+ӌA-	E&`83&"QƻGb&AƣO)#*ҝA^&wO{/cENw7H9@2}7$S.d#>
X%C5]<L|bH~%{kE)EC.b0'NGBMЙQ'`i-
uCsMZEXYM3{ϛǫ!qyCsS=P&0+&4VVaS}x^7rIg ]L^ga2
rwܮMb8<<<Dy&r?Y4~u!<$igc!Wu8/F"nsxZOw< }YsxʈȵgZ;zr}}rxXUn~0]tyt@tїr>5<a+uR7+0Nw/76,̍-Po7qg1L7x ºYqvD		˳1+g?v|q[l؟uL>yNdӺmȳyBx=bOtNAIgOM\g[fѭ۠St8bۭv~l(q3I>>v莯3Og|
<=k	43.1'?7`wBg=^9z葋hb~ik)َpކy̕#ߺ(mh%x=!;
tm5:ig	8; |lJRy
=A=9Kх0ha^B0sۥIg(b> صEϊMruA{CI;Se:bmP~8oH%T7龍U~+iBu{iR]\-Zng)9˴Ǖm)gNe.:L8wa}>܅BW
6G\>6){/.Mei*ELf2yy	Z@W	mѝ!Lf3@}zZkm#)9SVOOʱ*E gﱿ5;{oR={N~?3ko}={?|
:n.eϦ/h;dr%۴#,;
ݜ[r{]Ngm]<5
>7?Q3~亖%w#V#V0~wvQv=R`[gF?<zߌg]|eb)Oz#- pg96@}?Mڅw}0=G|/b*0O,qxy7^|Zf\%xܻ>E|^xVh=!^dϞvv-v#ۑ]F\+~A">gVߛ j-}9Li;x<o>r'ȝ3Jn.@ I5ȇ<GJalga~S

{o/<fz7SMrΫ+Noj>;C>rgGˌz{{V"}0]u~zO~?OQ_ QU$D2_W3=s+_Pg*A/پr|0¼Goi7ĂYC`?{FvThVx1סܷD=OZ~ǰٺ!{v8|%UHY7G} }&_Wrȯ
:GF3et<E99R^ kF?
Py@l$ŸC<!?GOk翈d}<^B>oQ~3so=0G /#?{?/mm-YzK
м-[\ȣ/gė܂_?9mǡ&7]`G}0'z^'{_=/՟"+8{]<FNA{ǧlkD-aӌ~`0{k~|䮧
?YCM})+D~D'k_."AݫzKc_ / O[gAOTUޡth-ƾRILO>m=EKkJ|%r\*|]05qu	5{
oG_PȣX{9obKOM~<\|.^ܗ{Q'A\gcygYo|&-ezXk0&Qmʫ@/1;CϷ` $Y-~){TnX|w{?`CQhn@<[Ɓ\虀07|uo rVq:'}"N^؇qL81gH|Auk9|P3.% 1zs^8*#_@^q]_f{/kwssw.c?t׳{ 'Єp,{}vuMw.XW5jg)^CFQ|QEKMz$>2E\XWk@*|V/p=Av?
p x׳}lTV=GE(wwb2kOȃ;Xwtf:vKPvC{Fk&yh?p|ͼN͔|
V~=;lGWq~21.o>#>^ezi~0{<=޵ n7 o9:+>= >{e|>&>}h./_7y]%튶y~ϞyzҎn}C<xD@?8#M&%rN@ۄ=gRлxnl}¹ZGSv"8?u`xqnkkg&Ư}Տgy@8O92hӃjo!>O\{Br~v=cG
ap.XywRzO9Ѥ0u|˞l?,kE;*'`]';s?ɔi2v]{d9oog~>+_y{P7q4?߁dM>Xv#;CS8m]r}
~U擉Y$ja}U>MS<
8~#87<W_5?1p|p\/.krK뵥8ZgOi$nL|.J7k9bμh)+@gbcM5;KP*u|iYA	`vDzm'{&
𼉽gVXGkGk)L%}]ߢ3`|k? +xO&5b8Ǩq)2rɬ<;/xp5_{YԱsx+0ŏ_,.߯|?~vLoȋ9^#< t{?eoMb
s||?	8yv9]']η]ΣGry^6(v(V(<r]Σ\ΣK]Σ\Σ\Σ3]ΣG'GGGKPyy.A\΃\_p%} \ߏĿw?~%(KQ~..(K..(K.@]? w %(KP~.%@.w<K]??y yϻ>(K.>(K._(K._(K._!(K._;?ynXyxp$We]|3K&)t5-xE6x7ICx'^Ӟe8}oe^-x5x{-xiϷhO;g|7~|X«Nݕǵ(8u9=-!X14ys"C}CC_Ǹ67D}`t{ނwshC{jy랡GV;ԃAvwwݝk.w۫o+7c
Qe3o:Jx),y/v<>m9f	Z^WjO^?cx.Te<?ͨ-|iy^?]mZ~dL;|
zc^>9|fn|_f'P>Պ?JZ^!VqWr4cE_H8mS,|`h23~yg x	`y	 .g]~#g~\~	AƕF
jރA/W2< 
3X7ieK=o&B_
?Z7鏐ʾE;|:|^c/C*;BQd/
~@Xi`G8-'z{\V/U|
O!vu {[%AWwD>
Gp,gׄkwfW;>y!zx{CNqWï%|9߇	
~_aWr>SO<F:u~f_8/um'Z-'Sm_C汯kz݄}gaWygwvz3aW}ǽzo_C)RZ$|1_/ 'BEgC&ka(R7?#)?_~O
,|m>5_D!KE7?xywQy?'|RBDӄN~ZR0OdGq3!O=Pr6y;~+C"	Doos!tv8~?--/Dϔ
	~=WxC2
O_M%ZI&	 !q{D}Xu۷OڇG(P}ϐy}}D!7|g	ߟKM|?A˔wzG?IO~-+Hy2'@'u$ԣDqNGd"z4%7A/$s='=`='d^WEVD^B=O!?PF*ԩ@'~Xz y5p< q"!p'zܧkb^s/ԝQBcՌ8['"78oy\>WhO^nQ8
ʣI31%Odޟ	c9B?[|:CaROOF_%2~OiHH	>G?&KeLGС$"y 93I)y}8WS(Li$O
>K?)y'uUAK_/|#',}}W
ǂ
=x +xLUB_mjdM/,$2C+o
|)0/ω~@/	 ;T)/o} "Mrzx_VD&(AE\ԋ>Q
Iׅ}s&|oh7&傸/2ߐya\?e[~d8AMZ{Es@Ի:i q_W~7=ȼ|
OJ{E D[>sg~	wN)煸gWG
~HzOFyO(ĺ@8UV?C<
;?
;OXka
٧AOTȾ,&|Kkϊ=|x޾/y,&ͺ~B	'uճ"}	>d]_GS&o},#RLu'1_mϒ99IRg^We~D7_'R?o(y`G~d(9@~/DD}ےw}@};쯖)
^2@dңE)8GGq?ft$/s@PnʣV\W%:j#F)ُk?###Z	?{F|NWz#'Kw'^g	FP?#D_"`2d1^N?O#(xKPeNu(GvW?xDYO[j	+'^E+/Q? @QDy2Q//T3e@?A?G=ȺGRoq}Gih*=*$|>H@_7)/"hPG[byit*f):o ߨ};iEoY} ,SrDw?c??d^x^A[3f=Z&8^?c)QƤCo4 W"?Wz8}\ѯ̵秲luO*EEy+k?m'?Z C	?;H\Ⱦ[σ<: CTqAUg^ l}AHs[L |ʸ;b/ؙ$/󏽖%wAwꑧ䓱:%*-ul
>Jܿ=T>3^yȗUF*U7=e{	gIJ~@Uľϫ^*'pſK@<OqNoy4E猌g\yQ9eUr;f/gI#XqWtƓ7uOH|Iq M3J0/O׼?9EB)_W/}Ⱥ 2+@<NX}_'0vS-	Bq9 V+#>2/
$N>$Qv{>I<9'AO)0DL&:W.PgDǾlbƞω;U=)4XOD΂^!YNT="TI&;'czy=XG+?aW\f+W\_qXI%yaa{U#(MxE+߂>}w?W5^~O_`%
$O"#։9/מKvWm=V~]Bi}$I_1B?\y=?~~+/Ⱥ;ɞN$.$qeDG~qtY"G	Y7/SWoAxodXy>
Lr؇\N.8K{%tT=/hH4gZ;B֚DCi;236CZC*	g!~@t
δc1]#	=L"]T#]=ZbFk&T7<-j5LBgu}kMt]Cz4
0grNח,.\D_di*D7RF{41RzSo%FZkMt&cFƈ Y0lŊj2)9͙TWk+eW5-wk+ p떵FۍLcW5M$q@f:d*4RNhqG8t8{u=IQd"EzbaHV8
nkKuG"qҤÐפ0I(Ḇf4/
1C0A?x;]ԓ1ҳ1\FnxLYzM"1mG)
H-xk4S/;D	3Հ3SvN[zadkѨ&S
iH$e`;̵2LYid:U2!G
jhF[sc,&"pdX,J ~F>B+̎Jwbl]e`\S-]ޚ;HL͌AMOd]Exn3apKeW.Ϳ5fK/-nްnPmm<FTYVn
H9\i,E]i!Kq
bq )^s<&/ܰN_jd`'J#L)RFHe.%bBJ@>V!dfA͜&u<kd$@JY6D#prnޝeATѩ2.O(NeBV4YO@-T"Jp,z#e#ZZ"Hfe.eِm1x"QCE[_0SwbA$Bz('!%7Z`,6 O0uc[ɷ3L\gٚfH%g-D5lNf$EB2G4hf(JV#&l+/'*'!55닚KV54-\%J)2k^it.d­3IM`sm Z 4H 1@0vmջоzkM9Ѷ5$f2Ì B0ohNiP5(r7#@.f0VDҔh-  n4nhɔ[q4dy#ftBy
zbUmAvMK 8q$jmQ%[xgXC:-J"	A
Xm)i4;{wb#)X96T;CLbM˼4G[/pxہtݐ;\s넚,Թpz&S"Pΰ/jp#wŷFP`D/;dƩ+ Sk"	˄vPA0fӡ5kAؚM7J'"Y|8LL+
`dk8Ն1k0d-z;V66aIhCs7ڗ%[{W|q| mX
h
鉶	ֆic>) ͱ+h3"Qo,7)(D.N$jׂܺ9,f[^W<m3fZ#sjk5wFs0X&;k0*i3 467ʓHn.Y9~9<FzzP)H`F%pBt*Gb4rB	6.[XC923_oL<opRf$I'ާǰstyµt{Js<0_'tju_0]H'Vh"T8.O
,|ıĞDc).A5p
nZdK-J56ˠEfdFl< njr1#NH-ezdX|\V}(G+.tI
|SI:Pl -Qҵ+Sk"٣x
MfXj`OqTq'_&bF\[I__s/>E#I0j[p*4&0&+=ׯe+|>{qSS׳RwE#X.a	j.Kud2!46VrT@aOO92*>@GNc\n]cm\7mcPh\V(Ӎtf	#|Bfpv ~0{LbUW6-u+͐{YD;n˯xpW3VcbZ&0q<|uemn]{hC0c24K-Lnhc՗Xh
}uccuV,jn՞~;Jb\W.Jr?iyVN
p9)",EbΏl`X攪~e3],6O(?
h7KxtiXtf/k~>~:w&ڲvwvp)	ҠHf*DZfIYNonuL$6(fqhUkfcbLˢ
Xlqqksw0IijvKajr4rG2-x Hr-fi^SLMAx!5y}WK>f
7EXݸV.E#}hkX(bmXTb͍C*/ '[ݪV"\.NVݶbqgutv>pf5E#HSYq@k-.V. M.]W[c*knTRW\7=O׈Z!re/h>bbX}jwt?}E,ql>vQSc-4Tg)ɜitGwI+k֮^a%UW/\DWZs\"=lB5}sYW`MlRѽrbᚦFtW'2-:r,\\X+99ºn.hKumNel7FKrxbXދEcj׆h)&/,IeGPdOvQkT}xklknQ*ܡ
Y2q	d&wv(@t׷Xaf-N
i}+͙H4{O .R3f'\5sf̚9vnt+SZypNhNBs͹Y4ӵtk<}vv,Fz^ D[fk8eq#]L4ݭ΀p*f8$+YsӴP'2:.UOBWmav7Ct` B#bD}CmvHXBp1BBlqbR=Qm~~xw=
ΈL)>  !@E5_OO0fS@3f}N<z#+>E>T<9s1NS2ZO/,x+xJ|/,;x+Bf;j~5Ǫ?=|.|5	o1~y}у0]SyǜUy8,0?g/G>7Z66Q6ߝֲM}~?|>k[jR!2ݣ]OG<G
x
вL
¿G/
XcAO_+>g:ǃǋzR}YP'ϧqsc6￴\?/a</5c?:C]Qǳݟ9`.س=wdk"S!ucsPK
    \                com/sun/jna/dragonflybsd-x86-64/PK
   hXDs   1   com/sun/jna/dragonflybsd-x86-64/libjnidispatch.so{\?EQv#ӲhR`P-E)j"y`I,MH_ZES.򒚕V^22+4K4׊&j)^{Ι.gy93眹̼^1FmxH(az
w#s7qI_C". \=_[]\n!W)q3/Po滌!~} W&5g_[Dk\>|m:uցX^-=ԑD::pGx=gqx:uuuuWցSgZgu#u{ԁo/?PՁ_3ުg<`p:z8n46dU?Ǭ2
bx5FwF<,FoM9އыy/,!rkq}rG7`Tpg3t#K'#9 Ŭë3:^~+96fxTFgroF\
-"oaxe//Ƿ3ڟx9~>CV1{]IINx'%7up{'*O 'xu"9ޙly!0^'vU8ѢN31<w,y3|	;?^/˸ɼE7x;I턻v{I\w-YOaz*|F_<`<-YhQռ=,2U6Fct?xMr&O:ϿvŻy}e|q
F's8޿JМdCy_'1Q?s-۷>s!gş#y{Na?K4|xdFaѰ|\~A=[P'v!`5svC"F9>Sms<{[!uos\q+ƙx+qk'[>]2ST$Ύ=Ox>D>3;O_fXiy1Zbbe1wj ]vՐx	qzy?yFGs<n$
^V/&>nqOx/2ӹ7etg,V!^!IvuWng!rJpo_gG~{#9$Oy$/w8	B~4zF>~4o?^lo\\x|n>|ەCl}F
>nTr}2Z߮Gs_YhngzLё|J3ˇo"@<ml+[1/et3.f>g3:db~s[&T?QU~Ǜ=nxC^n/W̧VO[cy?]%nwpբu~h _|\z.ϧzq|DXS#jWFz~*w5׿v0Q-|q!1qHVVb59jHLlM(:4533t.FXVcᆎ֎IvlzC3I5nHGs»>ڵKGHCGde$[SCwJNrbTè1^a=2=˚:J:*=#uLL30P*=JjML:4QY5n!˚94; )Ǥ22G!Hx9
2::+jH9j1B0%catQ)LH8瘖
TYbtmLi33GgI	;I'5ffIIN쌌LkPɠNKDG&椦G@2CuxfjԜcFX
YRXcn A`In
nĘLq)3FAҴQ!Rk$(;ŚrփqCSG::>&ItFjʈ):6(Қ2;d=&|s1hJJu$CFu,CԜ5k07%鲷tD͓aSD1j
+a#{gƥZ3Y322lM|~L䡮)9cc>tĘa<RQ4ا}d_jfֈ1T26QYD6"Dbn(vȊL`Ο75CAWvZZjf|:n4JZGpǻXĘcc`|qvlŕJ;IiYΪdl7i7Doނ̡}ԸNg87ᛵ;%<M͆R<5<wq3ݬ0Ob>ur[9}-<:v+Ge-1"'"S޽o[o~ݢݢhFS}bcllAlAl|#ło)|Zͪ7[
߬"o)|ͪ7zH:ؿ..&Q(N)e܄nL>%̒ldf)n>84Y>tq{~ȫ0"1P'3rC3y]$R0Vfht)~1cә
t65nQR[1Cȯǲ5;wr-5|Y/vQTt0Qp?e`	ʼ 32Rb=[_3d7v"a~l>~˓WyPPXvw)N;hNm)vpI^X&MksɣS
}qOA7[qz5n:fgeBOa))!bY)3sFaJpȤ c`ܭ78v^x!`C!$No~?2erm#d4?W`?C_!>ԡgn;ȨzEMs{/7}4jaආqt?T0,a O_᯷j8{NymulH|ۀK`B{QClokFepYKo{KJ
c1n7%K
pfHﻕK|;݀Ӹe
x4
\,nǊ3|JiS	`b_j~kYs)k!k1Um}}qdm~\ܮ~eťCzͿ]&'r}iP}?cl䒟#_ظn_/;?4]ݹEzM]o{tdr;x/̟߮<7oM߹6+"@G[~g^Ƶ5nyglPB[|*k)I}N=w˺,o<+DdDu#lme=wgo=~Ohs/x#YgwY~}^s^c
տ?k^^fI[tYgRJQz-f'蹨@Jg'=j뼤ϯZC~xҮwo=z|]-_.aio7g7OkW+,mu?6,SXdfM󾷧VtIV3W]M٨N^1?:ԟ|^ש]<{ߣsO??0m\Z&lrjġ^Ӣ[Е<{1'?5dtyM7x_Lࠞ[޸-'^}t_`w]^Oy0?n'lȷb2BYq5~X_ws,;41zNDb]z.CEn
_
nxǋp?5k]Ws
8^Wr
憗s
/x^qÇn^ 7|
ǃ\9gp<
p7<n xǻfp#9䆇s|7s`Ap
/8
"7 ڿqؽ=pĽ=Dwoǯt<]^B7"7<tZ_O֑
or
7OՑ
oVyNA<?(/exL> ^ށ877u|p?*97R.>EX,/Kxj\#H	OB	ϒ/%\pѮnxP%|K
	ϐ
^q<"	2	a)pWHx=	&Ixs	p|Op2'.?G'&(AB%wV"	'$<R£%,oHx7C$	.LDs$u	ϕ$|7B	WHp	/p	_%K%|"JK$<E$|KxWH{^)I^-oKx?+Nk	 szA'@;H"Ix?)%f	P%|py}"Is$|		")S$,-s$|ISJ
~Kt	/!^&Hx ^+%kN«%Gk$>	7p~~HxI=,wKx	KC$<A%	6n\	>@$<IHp	^3$<\s$NYϼ~!_#Pvk};!sGFv{o4fj/'#Kn4$
D{!M^Df/$<zs>4k 8ٓ>4ix#S=Hc(l!z8كiD48vk^}HDC)ODts跑nAҁd?љH$~Vd?C"~d?/"݆'7wDBNHE	~B:m&nd?͐nK~nG}e(~#}?O) >tCH?H~"0O!G~?E15Hw$Q#B=PHw"~d?o#݅'
~3J*~ N2~_DOto'tOHGDwB	臐~Jt$Ot~!݋'!OD{!M}%H?M}
g~!m&>t,O~{DEYH[~@:'S#^d~!O_$~>d?o#ݗ'
~3G*~ =ZL;3>qX45~El?ǂ+nAFǘ[5b;̪oA"\XM	f/-bw4Pr_lw6+ړfn7H>M~ύ+<ٯ!#os^DHkՈiCmeTάvTN*crVda+1{r@VK{AX;3#j` *1UGaȬds!E9 UGa0T%w
<t j.f2QZB4*~Q	q7ATpBY+<,\
%͠ij|#Eq0Mbݠ)Aj)Mp1B)t^~rY]j}Ga	LqgMbVfu.*	T*hW
2soV03Aq)ZQG%	M֧=aO~S/4,ȓ0=S>>qHkW[u+xQX\fP 6.͏KʭJ<rDz~15fm*$65rbRukBurPyuT9Z;kאY]Xrȭ;hׄ55?^Ckr
%ץS]ɷҩ$f:y;
+NNB҉{ߐ\H2muR]ڎ&ݕt+mJjҫB=؞Wc|ݸ3AVR/-46,V|Ofu.VY.0!&-Fn#Oc'mèߌC" Δ}ƉU7M2UĢ
cddXԸ
5<S
zƢrxY)")8nm*
}F.c0o4|6+' %G>`kVЋZ`T)?_I%|0$w<&!%]=|W0aR<wKsZ!]N)_ۃ0Ѿ'M@́gs*oYig
0NL[GDVvWXs:6>EB8A9B[⨀)z ]Re{hNqhgH8hqJer'K	>]UiޘR~@`Ḱb#GEP`>DRJ{1S+ʄ2%@S^Tp18zr0j+
͜WYm~p6)6x5? QPV66y]B&ՄTCf00ʖ
5\Spfbօfܬ&TD>V6ٚYMl$1j́hr[ӢTDU}	joy!?pa {ٖj6ĔcKS6qAs4raf
@7ڡĔ
fWkԿ¾,!yj
(3]	0d*XCMǱq,rL>mÍQJi\ʙyYoL{ Qj,ymuT%4x4=M+UB&+
OrH=Yuo@إkߞpDz&C<C_/S7FāNJ>k8?.1x
wB$;q\caC9w\EÞ-9/l#J[l"w"=NL
l~T2?
WҜ2WL9/8񥂏/R˨([8VcVv1a)7>E)>}Ͷ^0>pE8*Ð-
+0T2
*kLeaeW=rOa受<
+|XȆİҪ %簲rhX)~];%
+oJ4d$V>=2&natWZxAm@̛?Xl+p(
iJ`6M",10ԗG)`.LE7&Y#Dɳv,}I4 ]zʇ,bQ%?!&hr}i5ħg
BڊGl̰ny\I#	)3&F|~B"e=&zL8?zsB	t2sikN'A#.2ֈA8	Z8֋VNXK:e'8qJ
 g=KڏF
O? XC	L'ge=[<o)GkaOH	G3CNR=I₳䃼+@IΦOX?'t'ɻ GViRj-Zw^Y|@WOJS2hlXDppZqLL3{!!(0-t
ZE]C3=ېJ+Y܎sPڶl-z|~Ke@lr0 ]>Pf1T-~6?mȆ㢵'D$u8UjuQ#vz&QVV<h v1Bfh|B)h|imnx/Rj(B
	à`*hg&ũh$ A$?*ո8w:BIӋ:˅Wխ{v\. _K7sc͜O9J{6*ж!Gƨ-A@4
Wæc},ͩ
q'WZޕc>o&y9ƀqz'a|cI8=d/qeܿw; sɲݹen7wlԝ;GVŻqߐ߸sWd8wnm&su綐ݹ
n#2Kwv=JGQٝR`Rv-U-e)9rt1UŽ\STMNVz';]U4UM-
ɠis.F
^r[05zBgYot0wuU&˔3!k@J9a9e-N#T/7Åx_0/.</[xZ0ی[п-2?{.Vov7e|<_`5v_wi8>PJOE==*/BkQn`]6.\':iuR>.QFZJk7DFZ<Iwy\W	x|³FWmXx}8EMXسlg:~ߜ=AEX-?sÔ?L(zt*MtX}[/`X`ӕaE~|*K44g
U+78%mIE6$ּ7cK=$8=(lL!?k8 'p bLf[g~g`k}M"iG]s=RFT
yimz^dKPʷ7m.V(?$_8S~i:U6E
>siAnʬĲMQUA<&Ada!R0\1Mns&D^_<mdt	>
lڙoR ;B!fAapi*^aQUܑ+<HHPG_
E9阎N=
RmIoRo=k{hy|cʯ4VV.DusIG!Hcq)%/i^|F/ֽbUv8ҏNXa@є9[OZ+sLHTbsbN.Ewd6 lYQi[Io܈Eoo6Ud
jVPTp*-@
'Fu3V<7/"jzԎTV	E퀛 xb\
q!	rRb32
FCZYJ@F:80j NTG!0Ho1r
&ZXk	wB?v+@E3
BL&TXo%off&a)=9o1?G| ^17ʊۀ	ڂb~ŵZUR=᾵-ܒllZK-)HjITi!)AJntikY<ҔnH B0$OA$x:y5>_n5X7 쥟^M
2X<'z*kz&^~X~g{=Zj)J+r=
P甞x'Oy̿c?ηY@Up}cl_gvƞYpm(|/SSθRRӼjLﴺnaU1mc@멸RuC,lϤ؊ѻմ!ymgKWpa@aD	aYg(k)17?YfFfi,-;".D@{C#GE~iuRR ,X[={u 2=r0_4q4Nvy'U l]u#w@j!stxեp2b?4|AɺKE"6˯~[ @JYZ߃Q/Ќx(μBe5Dvl~#*z[S>)dӤ 
lS%ݸ"}F6\-L͐
z#?ZԘ?ݘhhW#;[5B&ܶv4z
(%>U9~~
w6fWi'ߐ=jeF!|9LL_\bZίzV[\GZϰKzF
V?+j!e74sѫgi'\ʜ3l,{o/q>70/C1PjÌ]bO#ZW釵Xf Fƪnb?֢<O@}~*:4\1-.STG9ST:S1){Z)*)𨚽C3׫ڙ7ُpOQLg;j(q$G)v^Y;.ʾ<rVf/HݹDW|"Nc'!9&Lvkh(Q
_v}<dX`T%ϗt?l#ݝ?)5CKA(I>H'I>M<f8) pB!j
\4s(p2
KNNȌVP^?2zs'0KuU}<)IZx:)?f/D.A^1񾨛yYVvw~;6-UVv㜪%c)v9bK&zڅp=FgmַI"o	70ּz1B#ybZapTt7wXq >WDO Vͧ,.h}StKQN_HяݝGUHs1Xl	ϙ~2~~?C	f%U0XFhI3N4SKpKM|h<u?K^qhl=o-[:&('f3$䄊Ћ=x7!іih) J`.b{l y[ظE9q;3l20#{^Ρ
#ŝvøqqnEm޵veRmQs4umlwP#iLX tN(yة[->P{~~+%w}|{m  )#pw#i	(JO_E=Kgir&6I['QAXS~o>w9Cjm
큃n"sѵM^K݅r1?:B4Y\~ \0wvO&ֻXܝ,:WHk	sm}jC ԙ,:*Pt0Ϣ[O^?OQx<Bb]ͯ_S
Siw0L)5mx0ɑbiWiϢNۼ]~S#Qp7HvAvDB%t?闷#@^K n8qʦ95nYEQ
%
]!F
)-(j,q&aHGpRą{=b~;6]+}^c0_.paHzQNiP[lW͕[yhB Yl=g7hĔA}ܑc}0[eBlmج`mczv3POUYԞj.tP/\bͻ"g~Q3PeܽiCP0(\{ a&ƈ֏AׅԥC6#?U'ѩ5W+8.T@є2YeV<⒉m<^RF1sf5&Yt۳F\t^C
i.01Ū1~Usw?4{+輣ոl>$1=#^+dXi?L@Rm節yNOvG&䭛U ysfd\KރAxngSs>~>
dY6,Tf*mx][_][IuYcyS^e_oNy<1Nq/3Th%%~m)"i DKBy1+H7Df6k!Z_WxUmcWw;SV~CW^A<WR5Ryw97>Dnp%}z@y=8Ja/"2=UhȤ82忇Gk|Ly̅Mk}tb2[f_9-i#5+^[b}[$KVۼ'eˏ+[@MfZj1SNuUsR֦ͽ)561|D5#'r)%r y~lϡjoE+<%W£⼖᭞i-Ą;XY:j}{qVSQç)VR)jW/pȗfp~ZOvzg,=<6D⪧Ù&ש4N)_ʝ}Ý^Zܹ2nwṋߍחEUj?e j	'CڊuX5U~VzVOXX֣g<Qo3z]*1<#g i> e9 J9K/8wAp`	$X]$GVh8Ҝnnm>tX@jc=-D_@=&8ﳎƷkrw?wfZHaoo9&t6cжcm_y}oc[VQ&&{!LR;$6M$<bn{Z&D2ɠL
p/~4k9 5,X=M4sdW.dT9>UlǯDp 7;bTￎ
%^nkEI:oS(wjLeY
v~XH j Z.*̓JiJ%Jk7z"ns3OT2d=V:.Ԟ<!n)h2^ɦ&~!Pg(
Ƕۉ'l7
Wqi}݁{1~/~~m$mʩZT#z}[{xU6`7]&7hG-E$b=P}&Ů9CPpy8	iؾF;+JiFnW#ǦZ%~:hP"ƃ~=qnGSs 7e-VX=ʵ=nv7zō~ͅj˶r/5@˘mF:,
}EgQϮ@-F[-y[1A5. bKh/A1֜-`{'?\ʛ#sp7`7K! /:}~1gTnϷ/-冀~YkQ)e BKY %&`=3i=EŅN(6S|3Va]St`7Him?O
,av{G
2+):_W?v7Kj`34(7!8`fp֢&s1tB.isj*?/%by{tT._oY!Vjvd2'J%Ē_{ky7~\rͬGkƁa
2mznn͆	>trHjQNABS׻Tk확s_Q(~7Rzk;t RmY:RެĔi?0ZIn9Rzp%K5;WmQb4WY?-
vTRsw{_500+h/ýkws^{ Xs!"8:"b깎sz;-ExDl!u@@޶.࿽hMۃw'dwgG)Yc)En#HGגvsm-\\G韙 $<
gB?Ҧn8oojnfn#lku?mf5͒5~o};O`vf7h?H?H
?HMm7foBW3_-t;'AbBWd[f_]%[_%vogr''ڿo)RnۿdK%%+e[l|12]1ҘjLwf"
0	kQt^##\_LOFw#=F]V)௠d\{0PS>,\
?ZJOu?d*d#tC@?z(ܿCr3?>>Kht;v|чhW-u`c-Vj?9S?VJ	mAy	]+$<?÷x?4O@?oeGͅ,'\ZٲAUJ#-_.1~\i_ojed3f˘tնce%˘͘-_&vooj6f6)TnRfS_ۿٿ^)ڿߔُMod?h?@?@	?@Im/a@0-_"p;~_1B~lIo/mZ"fZ~_71Z^$o1<G8͑q0GMS~nBV$-Wքl@	68ޏ{/&{g7K	|$a1[ޡ }NxDiŒ11AMO3^pGJƮ(KF
>~J5wgcenzdQccG6ZDo,<r B5R7_1/1O iޠ1s'7+	j	z=0HR}k|.h^drJ@q԰%)?:g_ۿٿZ_g#|l??@+"bPs;GkdF<cELPq0VdZ.\zd7t0WI/W.`7b#|l#}<;;}W#Q#HEOC
]uHa5t19ّK<磱S)A\,a;Ryh>stH <MR÷/B_ϗ|oBVMG6|`{C|3ϣO	}Uf*G*ᓥLP C`c߀?Bߠߠ/76].O	MRæ	gK7xzssV8
Gē"4s~$!̐KGhq ZW6Uy	=$(Cc3>~iJ
wi}l$C27b}ϡg
j!CNI/eM7h\cǔNt1m2okHH}'1D9Q\e~{y5<D .*vH8T݆emSA/]|;{a=8QpT}<pSg>@O7ԇq;?@!e@_q_p^7#饘{|q(·9حl]+lf<E2\n>mml<ZgsQ	Ct
xm/o}ymkl+i.4" f9͖
{L۲>jl:vˠ?R~'7%#|CN"!pe}<"㢕0
MNOi9vq)⋊!E"><iT<Gtg-q_yw
%n7	|&ɞgƄj;|]kkf}!.zL6K(
IE9N>Ex5/g"gJ}uyw4FG
`z+NK3u>&G[>hVi}kOX,lMli֟ f_}֟hk] M3;fzdtzѾ2J&fMfHm;|7`#{̀Ͽ͐3܆_n?Մ
vS#%t45!d vt~g-6ΟN6/tѓ
D(wd#>b}4$daZ/DQl=;N?,A?ܾM}_}!AoBE}8*GG=?'N#{wp?wo.!=;1|aލ&Az3#F1m&G{,l_r.@DS(/l>> ".`7;`n5:)	0#G
`P]fnck/GLxyMS!]Oe<),SY-*<&#]u0r*.e -_AS Ht߱|_\-
װGl-Wnnrw6vpܱatd[X/(<*]5wXnhs|M 	
f[c J (.<{>γit
r^
x	Ipx%符ҧxdz}>Ŏgb)(v..,h ,u9B=,	oc	:	ttb&,pHaV (Q~*`oJrUr	e1k$'W
b%4tͺL`,p"NhJ2	ͺ@^BJa߯<PGZYP<&m+ׯ{_n?%W]go<W:{+SǄ_'\{Cr܋R^z]l*pYD%3n<!%J!]ߓa]uYKaX{%]_.xnraOz,f].![Q
Q8z
T7͐۸B.<u+D-jG?	.WaQ]/qQuqd`ts[!s
mבzeoZ*gO}Qx+[={<h]EHUèe2ʏQ6F0QA`FΨJgT3*QɌdˌ23j2k'78%1j3Fw r@TL.\6dSvrfEp7\ಒp]w뷢W! <wp
-A߬|T˛
u9g	\^s
~A	Z_[vS}0C[ɔ,L˾:dV[TE9~ͻ1TcRTgK>H`
H<1<[`K=<&s_/1S%\Ɵ>S
ķE?h{Hc8
n*G4f?翊dy{#_eZĊ:"+NY	I%sIX?3Ӝa+0gDc}
UȲۜ}wˆ}qV&>c?kꏬ9b-笞ȚX3pֽX'ΪgUaΪ#5IsV9[a8k.A058k~cEuRa*ag
E
ƚXpV,eƌ5CV5Un &y1IkXSf+"-c1cYSBsYIDƪX1Y|o990t.4&^O\|_y>\VN:gp Ŭ2f?$IfWJȣp_O0}:
ډL3`óp-4+¢h{L|"'m2$Q;iW+BpWi7NZlp5[	j _(մ	[7c\JEX	XRH<

f=5e߇4d˞x`!\z8rއZTVbټU6^[,)
:=>lQ =㡔/m&v>AVx5^ <px>m<>04=`m{#ڟvy޷/ su<{>^hlʚr3JLuJ˯?O^6"%'+~AW~>+ qt
me5SF`nי>7ٱ1OS!wNؠWm~li~%p)xM<EUB_BK{ޒaSgﯯ4cV3k}[.뛠[H'#t?01u|7Cmp|7ZW}q㉦z!-,I,;&<};)#Q`$xޣn^ś]$?ſW<	zeWK 
~Gf}NW~Y	I[_[(/;O/	~GW⁂ӣſDo?Уǂ}Q&JēY?j"1ے8)"N0Ňn5NE
k~9;0T^:y,`?IōGY8qb*&媢Yd[cOe<(_5*F*Gc9[i,T<<_R|*;,I2^K*>'M=wBOxRʟ*gS;{P^YG=PWql8qSȤ2R#y1'=P\IŚTyU",I0(R_UULѣ*93X>P8BVm'Pns<-E&<q*2GRQ|`Ul(h⛕*L{]3SY@m*ei7;-qs}s&,p.`N[U0z'B`Z/u&I GL.YI![H.H`,PO4;@3Y߹@Ft&L!.4!lKM-2R!ZXd*-Ex	\]ut]U&,pH`,M=@Guid*vHyc\)gVd=Ik8Vfp۷h.9%d@.*t{~g=	<,8lz	1+Ix]\Ie@s]k]2&P(.ә@YҘу\`.tdgI=JH|@.$'t+tR&,p#@kY`xXD2$
@$0ټW..`"@!@7]]Y%37e?~[uB`!@[\!	uӅLX,RZkTq.4fU*ą(Z5>jL2Ổm9-7F⻛Xo蜤|fw3
?SW}i
YW-O{tţ8\t"J>-.Xm	(p2(`ȟ~ds}m/Nz':1ҕlgb3^`]W0^o,g7zއ_:] p|
\g׫Ttdg[P6]7@p%#z,qx݂]Ok?ۊ-{5~k+]/v7zވ6.d;:]v} G#xĮu_v}:'~®"ގ]xk'?ލ\s~x]ή.v!ku=ċgWz
:aKhl=ۊ)Pe}̶7h< zfy8K٢dKPZq").lyw>Xwۄr8>Ak6tp\xG;(}G
e%Eqifk.0{FX6RL!R,SH%~:%ځ}WtkL2z)~:pŃqe
~ۼ6Xci}@pX5; ]@uٜW54!^+gRJo^r(UIYԇcոs(5Z12
y]/?{C_D.oo8
	^s[4	'Ge8e7[?́C7MN/\WF'Lg)JٹJM;Tv\m! 
ܯl
_YOc&E#f*8O\ŷ07tGQ8X"Π;bBYO0XcJdlG a Kea/J[!m{$+%Qy7L#d%e;*.Ke~Q{8UۙlO{Sj+LK8:v
<u<x?|Xm> zw+:i;wg	bs,1g	I(@!d3{+XZNb'b]3dV/_zb	9B) US%647cr9No3Z9[ .Z)gUjm7>OkW5vTlxyfVgcX`u!BT}8..dr_Q-jFgQI2cGR+q%[n {
MJA`x})	7fjB$ȅ(}E:
1TgaCOF[kLsx
CrC3% *+;o/]UUK5.$t2k'DOYBIb<L?1;V}"|
v&׊~T>f%1:$g0ZYزo؛&0;D>/E#,ܾ]*@G7}Voxvm_B_8ۧ>J4=q`<yL~}lswM֯q.9ķWR@(G4尃υrQ?%ie}'Z2Q{mW1?N7c@u+?˱S"8kV@.Q
QeVMc
;+4wX=x|/T
7
?ʘw:Ȣĕi
B1eYYEhSt%
ԙ+;ЋI
SNw,kX(o3BS3=z67jaGI1@[R<z;13}mZWN
p~Ԭ*_[ m1K_#MI$wbV
SyXt
yoDO
2[-Z4hVR%mR&eRoVJi)mmS@IKW\s]e]dQ[@Z/EY!B9N2{7393}{Nc(}!=,] VfN@ۘO+2)އ&&?z?y+|G&`IL,ћiC8CCŨ?rau͡q<1</EwGil_KA,׉s!o	7S%.-#4|7Y	uĭKt;ϣ7ӧOiAv.|_';xoJ'7
Sp=0n%A1f0%+86$[S)PX~ʆX(!6Md~|Ш/p޵q]#rݍ&Q-kBz50&ZNR~Bu<iow)~ʡ/E+IU0	۩9z$qNtg.H݈oJR2T62"v^
0O?Tbaxbyt2
)UEK"au:9gm
'ǀk0-. W<<J<7zA!(Y6)௥aeu.CVՌ;Q<G:ZZM\?Sy4KeM_<X5iul]Vgmc$> PDߠ#+?L`՘ucmlLy֘Z5>XˆW&oACǦ>NG`"-]?\y$^V~CPΦݴ?[)R;xU}(8qlct>2~[x>0!<jf,DNMτŴէ7QZ- ָp?=A6Ţ mbv8L1MOԲ3"4xyB&Ly5	U_pSYϗ
|1<m"~]uIͨ5Hc#hC<dU6c^SsdHXxԗ)ɋqƄz7<]Y?giKbdaz~QS#bZ趠:
c]-LgK*<?cÈ4lD<>kH~D=
D3Fߦa)Xyx<j@
v?(0mJ4be2CmL,"ō5<<2@;8uǿb[~҈ceT6l6X{NYzSrJvȔ>*w7־gGa}P¸AR>tJlVvLzW-2i1ֹ͕lb"Ժq({39J
;g|.REXn
LQCOSG)_Va5@y(槟G
8"b^yJL
Z=ݍA7Yy,9Qw$W˜@ʰt>O]{%3.#ݬr1I_s|$V21̤wIfhXI`Ȣp*]L3YD7m	xZ)`)!{.j5o$LJz8$3N?WKDîo/~gaC~a/#U0SG_'Ǔ#hȨa`7*V`V%&9"0T^6[_4qIUБWD-jb?aVKejo`g/ZiAe-<=h[:j.(0N2]W$zb[n%(oê&#O mQӹCﵴ9orrL,\1d<R<yn.iF};T3Fy|	VVNdə9)5e'2%xNfwe5Dpw?`Ww2eȚЇr
\t;wt3<
0'9fLꏗU{\8Ew=0vEN<÷?ﾡ;5O
|JrtPo@(A1(5k=e<` 
?Hf~	Giya@<02鑇O9x;1Ajl>1v/r2+qsYjƜbn;\6y`c(-sPcUZAGBh.gFn] o0kA'j7>5~Q1ҕQrđ^dbA fS:~\uc2>ɦ諍UBzLVZ6ʚ-&qO~X=Mg9sUC\?sLX*&Pvh7Vo@Be|$zM`Xujr%b@E6K}Bxh]+n)7/*@[ZЅ]2UN}^DlZG.R/3/'1SDu]¿e F9(C&b>PֲDɜ)Hwiޥ|djtQLzw]`A7S'U?D[ۑC`#6Xl8; [O9춛Īq3%V}{m1
jr*AMÙ/V?e9.~2,amOZ
$N&G/A5#*o`zW>QRPa7*J@G:U(יťoH)oIkޥs&mAXޖL;8gtKS?_
3/CSY齸B^ZCY̠Wϴ|iK󙮷)@OģY,3$oz.*>˘hF|X	Ū-jGRMDekJm
+H8H*F@f7
 m&VY4h
nR-Io#_4S<E6q(A5k7_Y1^tYx&	zZ̖plZ)e*8:f?ёgʊ<3WkF0Uė7~}`uF#.97l`"m[~_e{{׾J{\}Xֻ8v{VOu	Yh=\1HeSvλb<a`oUo>:'4Cm{owkMq+Mo'b<XP|\^GJٗ:ܱ3Mzdm*Cԡc:\ӑtXT8Wʩ"eͣI6	lEFR:R괓}~Čw)qS%s~XI-ʼV$fo@Պ1z%}Bj0q3Xyr!> C&`w8:q]\պ)Asu{ 7N}9=xKn)L7ҍK0ݮͶNf7sfz'(3-T(;s6d'T;9R(K}N:V-M6k7򱲋zgsr*;3v	|k|͋+nN;cdAۂlJSiTv17y o3?_:45<?;}&+I2}
Xi<(U\"Uμ?RaOc
f!Pr&$eGpg"}"3qiGhE>[ڵ
4v'Jgӷ]1Χ#Rav\bI\o}PEY&ZY\7uny~+>\jgfХW>_8>	N09 Ã.{;wj2ẉlxs}0S%h"w%󾃨L&WP>
 0[J"!4X]~XL4􍇈#$ !ZNwxU 4$$
GLRFbX0>w*& <G:a`93ʳc(ÑN?6>wPv"ǒ7]:ͳ #b)۸3͛H) b\4y-e{$V+%S#EB	̛g9jE}Ȍ)ɒ
b]vONjN ??3j/XSjdYɲ̓_0ǉ`/Mo[$' 	l,P),$r:=szXL+Yviet(S2%y1fAv9ǆw7'9"rhp-0xO`Rb\ h8%bzI90^U;zCӡJNq*RnxrTMzZ5ڀo@?lS9(G,N-Pm̞O rcH{~B)I211+sPXTE  t 2qniW韀s閈<<'4} -WXHgKj]R6㩑Ś[bMaS켳}X~GX
O^`~at'Bk U͵-4H
̕3S?pAVLrDfNuU!S&a4Ӭ&'H|99pOh7.YRPz.`.[pkb	P
׏yP?cOkǾ8UN{*0h?7>
{V$<'.y^Xn?PEBOL$bu'l źB#/9a3#S̷XF"[O JHadsH;$ĳov|x7t<6Bi{6Jyt#'/O$ՓBt叒z+P4Lq/No&
%8K]SMB
̏z^^@90~Dcu%Ǹ3ԅNȦ-JRuRyig-\^):vًCHK_1[=w:YSCXu'wUz岄ZPĥ
7{_*dI*e6p?S<VZ~-{WݞPS2U"g\mnw(k47JqZ7g\K8Zf'3V~/(m	&6H$,LO\;x
"D;٫N'gAS(.yd0r7߃[>y iz`m)ūH{`4`0Bcc/NQgb2`0:1$-ta6ܸFYq4*r#a: [qWk*'i%CRDh`8݋o:K@H#M[Q3[BO^1ʃИ3ai/"=AĪ|漗yh9ΦsX>hwX\JSÞeiV~gObzyyIҞ h"Tr@0=GԄޯ>7l;+VWC*Jo[JBH]	k6Fzo9RfO]oC@A_EA2-vś)rHً\
r4y$V$*39]vRnF<˧T-;h^A}hΉJD(%YLXI)/cĊr'Adj=\Dy#9TFĚA8!<iUE\[G~
lOj4-^Kǒ
Q tnS_c`)?@4r:JiÆQRx7лGdΖ#*Aq3c(·8oh^KI ӎZtF1@	9OqP0r%I3IuicZvC'120{N,.Mqg"q+"Q~
$n2<.];+{h\}\tjU$z*txf)ഃ?$	
 C2td\MٿaQ
n6ͷBT;V3]=:Ix8՚cR*3HV8-`}4T4t5m$kkVvLA_|uMv?1ՌpuW?0/Q
ֽ/|x>hC0HB`c	ZM
֥<cq}llQ,5c:W/as
%QX	osNw%`i_Cz4?>>놩d^nbEH g6<R@/pz"~.b!j(3fV]l-OhrT`]Hg%BZ,;QvY`3
ڬX=>YIYAzn	fŖ;(86ҷȦ\eLjڟ.\b肕qiSNrcmc:&=NTK.P\ ,[S^Us
]H*xEemYCE{-|CDsp.&4%Z3WqAݶr~kZME0X>/^-{KqT\ր]pf#rz'æc`6O @ W&JxgH}DxdK^2G1 e
-fg/E|'8."覫2U$&Ȫ8(e`Q Oհ-8!C_݊G g{7ǝePg?iZK#:Tڪw
סG'z.}^,J5us/P/T	;ix049<ĥ&=Xy5נtY=9=pn v_МI,̲6*VJC/L/kMVD|7=G\}.AASWO٫=_qSn
!0#?ll;U#<ֵGCq,$[n@b%1ǰzu@RjJ
l}Oɉg۩7سPI p<f}hBZZ	l3
%<
,vXt_5[{ɗ Ō@["0z3Ě|"F6MkWQ<KobLS}sw$.3yCs筃Q?9AFA>|ݟW?zl>U.tmVzԪmp2kz@كK
QnPoYMh%Wb>!JO\گmL'e~Ʌ:-tP%:b_/wB'3eX<hJwt6l/ГmxRfdgAX>v5o݁@,I<B(8x6l9Ƈ^CUsic;ٜ{ ?uU@Ȧ}sX)SLncB琀O4`o7Wֻ=fO\EvD.iQL7onÇ_jWqR .%L $uqPI1
Է`e\Hlm~V*@HG Y/Al s \fWMgϷE@5φͦRlk3UUBhHzNV7w4Xpt2>;sf|d-L%u8tT֛f6V* i/ΓyƃZ\"_(Vaג0qڼ`(;!̺97-LЇ6<ynDR9rf*Ԥ'AG\{;XF!KEa3hNa|}qؐ\`6H&o@ q8&rȈ5ofZ
9u4l&6Iva#CA:Z
y%!4èI^Þe[	JђT,d>Twtwpx96_: sg82}̦CŒp!&M:<i:gЛF~{`E.g⌶c~i>&9CtHC=b
S$O{s~!X@"3Jr|A)pw͛k$&t2P Y{@\9,@"0JЧyJh
 Ԑe]Z-	=ҙ`=#imƻ8zJ/aR@B_gC1)^Sm-caLarab9C:w^O RY~ǜNJ9hJV`TkTӀ^dZ&Kr2E䉑Lڤ({Tk9!G9I3̀

q9t'=|HYis6TЪ҄dY8$G&8:M{>[{ЊC	mM;FzmQˍ2UyZ:?Gc	2uNRv)CcHhINdtLi4-7}}FnNm
}oБ tPcpBUެ]jN$^Ayquy-U9|zoJ& 	#(
*:JtRW7/nbj:/MDu OM@7%5F3X*'`~ Os}/UI
I@?ܣPtx[d|D-*Bj|:zt%>8Lti7֒Mٵ@`Cz9Yi9>(HI"
r ͪ4f7HjIcsss;ttźIy$e{)D}z,V3>k3nqn)Q71U'n
flV39tW:kg
M4unϞ&;Ǵep-P)<7UoƇ/!)
K{^DK9J<޽/v6x}ϑ%-Ef>!vDצAQ@e3nd~".t+Pa!a歼#^UƻYKPHWA7Fx`[͎aSIH
n背ku VfˑCGc32ε7MpZ>\	(;mʷ'h79Ԅ>]9#'FvV׋Uiǯe/.gX>wB25wR΍4$33(j.aLf:WnBg)"	uF=C{Ή5;=46PM?1.H/?co(o?۰!q,o=X
 -2_8qF[x	q:BB;
CG8B*{6e]-0,dDFQUOG[,ZdYTȡbs)fx:'P4^=Ib6C@%ItXn`\q-{YSBǑ7S#6ru-hNӎ6;9vNaɼCV$s,>jN$}mt ?}CSPQudPWCdsH۰~L嘢w?eЊgny`RA?M*Zo-Cy, B7]K_XYJt#ᆌmӍI0Ғ{Fg$72'_IlOfzc@Z@}#Rn͓="F e=
=k}#Ľ8WCȲ_k>*#~aR4GVWR4o׸ rKkM=#rdXux;Z/˷GWv©ig4l!ɶgkhz
xj'h;85ڪ'ru:y)⒒ls)/zjv

*
K6wQD1(.OQOĿgMi~tEO's+n^̶M7I}kܼn#/ll.H~l>T8:򯍋|Ԯ]#\ppuԓ#_Dֻt?}~}obxo~ Mq]k3zK[ZN8>0W,/,5ᝥ@BaK'$S#M6E\zM\ZC~3Zvg_@3CdXzJS5}k<}RT+miF8vLl?@?nx|,0,_Ѣ8(C0*
̾'2>Ψs6'n#3R`r).VuGＸ~&o Q΁]|EcA=GGq=K#X`J_UST7g:Uc nrLLe'EJ!4>AWuR$?k)?Ű+Հs8G[:3ko!KnNTo2ŕ0yL'yjLs"?N˅r\(jt{}iekmӿ!(z2O;rq9mYu4jX
U$**~-!(Ǟ5B\;wFsbx"wkt1TV
"AZjdАI!6:6jȱXhD6J]:w7U%h4IɂT
lbӛw
J}r*[ILγ=30,q:<Iyj,MRAs-?om?w+^XR:<& ^ W>k>(Q|O")'F wBS%2yߡ>:ʢL^F[KOf8!VQѷde1{L~|ց,P.wx
n*'ષ/ܛ01w-&m+R?%:8XF|K$$u1	}pn_K~TpX5dW6+eo7?{P|{Lj]evoBaNNʫf>O>.ջ̥.UjDN!?XDMR-/{
,Ke<ã+6j6(,pj[L,uцʋSAouŉeQB
2	_f'
ƥ,qezRUB0}V.XXLT-VG%?72PFwǡo(~mAS'`I'#d-(PW y@ޣN/~0B	_OA?? k<_*HPI&_ؽaχ)42CG.lp3痤z*m>paQɥD/қѸ9rS.
#75!i1I
%U`	å7q+O\.}LO@y?'=*66QX~1cwƏ.pnW9**7x]b\`=<JCӠHT*>~Vm-[Waog!Vm;z:q%Uz4AbDRI̦҅5c3ifSHhNqrH<HQ5`> ɀYCi%U6264,9-dq<veZYQT^dd;H9e?(q?t*A!Ra̿	c1`+L:Tt*x̢8aP0/G~eս4ϘŚ{N]C@ŇiZL\jͥN>|=oNgt|Gu:(tʠ3sI>YBd]R[H6o9Y"xȦсKeO{+N5`_=Sg?	8>kI,T|-t4'Jt,S
=Ն~	weEWggX.vTۜ&sf>g:YeE3{&ѯ'ub8dzr(68!,02YNSRKGV*kQ\*{S9Qy$kQ9YﰻEm&ʿ@aADoUF$aP?G#%2C?
&DzF2XOgaMy+gqi hli:`Qrȃg!VRԅ˴i<Wz<(#dN)~#I3O3vWffvce TkRRo	Tf_S_s)؁Z4h*+W4ybT^t@@o3Ifۣ*+zf;Է:Jʹ q?2Mj\MA_t3v\F]xlb?X3%L{]>[<=lvU^57ͩ.AA<<PZORIlⳢK\KŚWd qQvs[	q͠BV?;IX"q1}Nt9j!nٚj[?-rY?wNe&oޮ7WcCqz(*"E"Wj?SQ?)u
OK-5;fS*&S56zJNMWC4:pt?)<< )~9I}"iC_|}QXjWq=j,kO0/JFY|}x?G濶© B?t0
ass0iLö0/Op[ W޽kSȆAW(|}[>ܯ0\ )&p(x:7OODgqZE	kȹhOjGI&-6AB!z`kzAIE}P	Dcj7]s\Ol< =jbW*݁ s7@K.IPar"HjeE?L:uAӋNq={ZoT
T nA׽H]EҰ޲>#5$'}Lk	/)Zĥbh]^Cr9{4wh'n-bĈw+BbN3 [7XyEVT̤Ą;y;0vtBu[gigF8>fUOɅl# tBTXW`Ey1+`__˵/cހ5DRXՊ/؀tOel>IQz	c<pɋbT;<9M7{5UuRgCQ6NEAb2>Ow`p<-q#)7
,W{<\QK99^*yJ'
#bWٕotw$^N'o`̗N+fijUj;ŴwELإŴQp iX4~:;FG}tGp[ey>t>8J蓺xħxTɩ`RpKHI8MIݨ{5h*S1HuExNLT, '뚺@z:GQaPGva:"':&ViM 8w$sn.)F^egӭ+ۥkt(Ox. )
ǦJ?)u	)x-ͻRӠ%j։ݨYok[ؒJ9N4A[v
Q[vy{%>_~GIoB+u:Jť兎%ӊ;J1pvicdK}ŎمrN}IW88O͟^((-.i)(,()9Rya|T3Kc+qxJϜFdJf8rr<g9];<#sL"L/vO
yeǘnm4hfLޞQX^^Zۡ7Qn;']1|%5qpŢj㊲B]X
,a.T1Wfɑ2(E3
1re|w1=^
J**Jˁ{FS+jܙ%EQ4P|_n:}c| t*lz

0crdqh,gRa%Wt/f	TԂҏ+KP2=z
Jg,HI~_9Fv44B<X_rGB#Xl % zP}}}F,+-aaBWA=ǟ^\:DZy!tBa>$GN
еӀC*J+ ٗI%zf#`b$Sfe _?#N{;XzWR2c]PzRwd9m6X+Xձ,(v
D˓nKmWwfo㊸#,υ>NJ/H2m(7ä;l¹`(A0thRҘ{nLߕg6>7]ZF%ߧ7p'ŕW\'uh]Χ:IIsf/I7DVIERO ׶Xi*XNeI6bDH2r
dSA!p{퀿XҀV]n~^,/*eqnK\8muIe@N/,G)NAIp9!ĕwyJ17.Jg
ZT4aҶ3K*4We˕(7mv[Ԣ,RtrGqi)Yhe\焱zX(AT8Eڊ"42up!n"rrfYPa#{@AʸߝP09mZ;]=^ZGCGN-.]AH2 uqQU;_./-хlG閂NDO:ۓJ
+ψt$K"PGIҹwT:WJgHO#Q$_S
B1ofI%Ignҟ;cfq/%uv酿~%,#`F!&ĂY0RT8Qw0G%/FgC9ؿY0x"-RΜ%l<"j)̝QXnغan>aU>z`k;
˶0qiwBY#vLfg:ZVY䥶d	oUsgN327W̴A<V+-qUcRK3fCkCHO8*c˄hMƹyäҪRS?;J{|hBZ.H!(rtn	i~%!boSugDH}`*U@5o&]) dA7:u=ziM0/B[SBhu5#w6S[ڨUiS%Yf;QRϔp?֜ҙӄ"}´JҒoPAx1 ]w |؟ љgVT`B05*bSKK}}gN-/OYop (AhU/cmR:V!.Հ(+͔s'>:}X?	90}XDՇyc"rO>L}3<Xn˞_7fHH`(5`DRcGJKK"\ ma@:EpƴRG,ᑊcx/"6Ii|ݤ*Z63Dflti`V!cB< 7* X{mCBYy٥JK`&zC[Q[a, 6Qk{N2PFڙ-xR,g0g Sc[nd}hJYTe;H "l'V0(6x!2p[Ƞk`>Dh%
wcв`5n-J4"d4"T+iD҈m
+/ɨ3.pctģE,al`b=F{撇DI$%H8zdGb>B!,ANDقa
ltm6V	#E.H#Bcσ.A!K#d!Gp	Em{,@ov	Dc[kaoAiE"L'႙EuVpnqT6.ϜUXn cr(ĽX
z+ 8VLadQZR4s:TkZi{7:s:ڳ0H֞я;ٓJzG<f	}䗳isV̘-H#n1N^
!^u!wEH1 WOc%h_A:zn6MK띫ϓ5m\'Wס$MekE"_¡+1rtp}C#u:M
|zpWr}v=GY{DI4Mpm!^~ṣ먁B+z
^Žv^qϥ0rru55ǡO 
EWvE+p^@9\hږŚ5k(
ϋe>дz
p-R;Va~ [|z_ةlahn712	r;_&S1ahLx\0L2ѿ0O_4~?5mɿ[n G56^Zi*fAܗVZRW_]u6_U0$VMȏ4
p\3],	pY
-R@)<fbc{vтit]|
'
8Xf2c18ڗ&f-7ѝ0KSppMۭ:}6?e%`Y돋< _	Uv&ˆ
b2zR1=O:R:ׁ[!~rCgn.+`v//Kq~ߢm
C?iX[1
gw__-~bbEy*><0;!Vzc]Pz_ovP& .\ 7hϷSQ! $h۴cL1BۅO/|,zuZmZ/Er'Υn-0$~ř`˶Lc,,O29ocQ2#ߤ >xKܦ3t-ڪ#y=g0F |@_i_x-a:XdQ6'|iLa]|&|#Џ	/[mlªip^ 
zs(\rf-ZoXb}dL4Ԣd ?Z
>N_=_M/ZOdctyhJ|A=]Ĳ%k;z[C~"aw ?'WȚɐ?Я1?Ư.qfVn]P`>'!\W%OZ,Tƫ/hˢ,~6+P¬e}Pika99tΤ?VAdU<ϓL>evMLpA:-Ky2-rxo]7=Q~ۘO;.#9w$0R)41(0<#g!Q _~;؁
,.p{(W+9ynP_{0$<qf"b	_73.Q<dd	7ˢ;c]nԈ?AF1cYcĔEͿ2[	y_"|@sZ_ Oӏ͒-`@7,YӒt wHJ?05{\tǮ<
[}8y)#O0ba2fU?ãE/nxD[o~r:
[ tgã/Guy@FM3jdF76?+3n"a?
KմQ>uo@|]eo
@?L9Эu" tnմQtSٌˍt	^ic3 '݌tM3Z8Χ~
ۛլb4m_T=~&x}^D;tޗ
EMn?M}Z;5!*mM 09,=+.ݼ~v{rHOG{y(BgD
y/<mzۯe1m a]
s#@18IWH4m=zT>4,+z@x(<Kq_4'	vG?> o ooO*=OVވ'[#U?֜؍<eb;&hp
ϳnfO2ǉMԴ	Q|97e
~\^;g@zMf'H|NXe%rv3~QO~v,Vֿc.bY?/_27Hw}GΓGc}\@Wt][g7 >Ԧ>#yCvS5J0gY[fVx<&v1o^1p?v^J2U9}YjLt=_$ne?I]J3.Ѵz!:r3ğu}q
нt16cV1"~,M6]:]Exh
@C+~@{k#?fk+/OǇ>W/_^f/b{pǇ_qsp`ѩ3
m#Ҙ喀=\}EfR<$4+ng̱~.ymbqgU?iiOg1EtX}rs,/M*/g3Gj_@'L״q2	5CD/92gxہ,tYl)sxc5p9<q
fFͧ`w쳣@?7z.jSуs`c#E9iu ҀGۧ |"WGx	VCjEO@ ώoN1t`zU~N<3t78ˀh,	g
jo?ěF.|#p$
{^zyr~5F>44O?k5͸f9Wt񱎥11FAC]5
אLLmJczw-o|j^9m_|aOBw4VWﶕUn[=q'
kj+'Vǎ{.*o[ݽڜs~uc_K;ͦվ/pnqnu~$c~-j,pW{N\\bkvW:_@znCKтS3O4'^
V_"lOKc񰬫Gǣ8יNށo>oѴ@wHYpW.c2 `*F0tPM^v XE)-~Gt[Z! 7mmъZU 6hol. \q0ڢMBE{ ^ xA; 3`5 W!~7`  ?I\ p\  M=#-V Z~tCP_~B 	[נ 
>k  ; SLpt / @p '0C (|r3
#
pX!ӴCm'@.! P)	6jI"\c\A! }0A2L8j(dд ']Xru'| o }$^	(O47A[~Zv `p4 偐6U W \p
M p? /`5-$7~z
P^{!_ ?|`oNv4~ThM  <p@tQ{7C7ৡ nB<w_p ƃ] `15 p
 SJ<g MA Ly8VGx`YC> (W@<}pp%U(7U.~k`yhC 8& *GC ^x ?.ހz#)oB>^x' 
p cA_X'|r ny$ Z S8Qc<]
Wi~|?GŵofPg }WR2g}G-WFZn뾫3x=<u֌!&NFٓ?gm=_2EgpUVxunp/9l0v(Wsx9p<Ep)r8^sa<op 9簈9.Y_p8a9-0q8å>kp{9<a3x@s8as8\:q6sˍ9Áp8"pg9|unp/9l06W/=jmyc9<䰑:Wtj9\bqXp8QJp8La2v7rPϟWsX2s82wX)qC <Ztza?*\,<\xU.2x}|hv MxGQ駷óqs!WyҒ&;FW_F;Ypx8azi4GFB?o c;: ?~T?3֚Ǆh9D-a#o
ذcx[Xw
Gv]GV{^+=|WaPI{xQXv	M{X_ծ6vz{$!] v'hߣ
m{@@dJ<&YT7ǯhvo lyy.ϟ:{;7tG:Tͦcw&.ڻY;;H>t?\UR-Pm5X5!iwmmjTɮڭX{gvtw~佷nI"l(*kCDMhDԐj8b0Q6
{gݻc;w}ιD)]~g
8sip~OZܴ9tZ
9?x:.x?J3_֜#65?||ݛ6Gxp88&#p?_g$ς'_!4[D|e ||(G~>~+xFr
	ڟI>?ςqI\&7x)>{as$S$SIWl*jg~IEI8/^Q..>WO/=$x/= 	~^%y+/l.oG%KPާH&/Q̙4C&	>nV<M?Nrc|$s?!x
YS?:NzUA?Fiov~QS|&Ic&9L{w&9=D2 m?>]W?; 5S$.E||=,8/Ic3[fO#$Ug̿iCiS&_t1xa~x G?nIb~d>a߂&/]~
|1<"x8;VutɘৠE9p.Ey7ZO_o_2|ty/NHWn3ߵikM$	^!eM>&u|

~9|$gC~k,6xU?#?O:n
e~
|;VOgH΂$_	~I3" o~oG0/^7]>.ĳ<yW8/SOX#F^yu?x'8o#y-	xǛ+]$.pQ*&߲^|"f쀼d'@}$K.WwɿL*|i##B~~GLrUUv4#ŲvL(U`EV:J-KrQ$!!_@dr9ObWX/7\uf^ԦSC2[R /dV
2G*#Y_Eþ̥*T fbyuCb=
V9SNrQV_ݩw:R ᎺYi9~彬JDi8pGLcreR~Ԩ4\Vi,W,6tf+T%0|!*?y:Bs1sdvꨢl0Gd	r([*@9#ǗuuE5|.U.I+J[k 5uX[]AuwZǫ;QRrz16\fE<v;ܻG,~M
ݝUg<#kfDr+tz(p)NH~uʪe@c[?-CV*)9u!&TK%%sU@٧AePMbJXUF]gc˯!wm2
14
~tc^7J=W̱-r(PO9Yj(Wq̘=PMؾղ*ТF5ZhU5duB\VDOEZD̜ذ].g`u[`{u>agL[ǵbKfli׎-q\K4kJ=VESL]W<> qQmmJzqtTh*2̤?9NGUvRp&wzXXn5Nh\rkA\7N0ix1߳|k9|5Ǿ8ga##2Z*PX蘋5N0;nZ)tjơF3:i<hSPho٘ՇF ܝ )"RB{mYGJ$PG]=C.zןopOԡ䎓JA_qA|+.:<'Q('2 ]ALQyPFŀP$^"=I\$~wp	_9Og!SB%("2R'R (ٶ@S먴e	}(=)!:Iεڑx%ow_Ϊ
X?]_eZ_ڻo?_a{'᫋M;۫y>d	9oBﭐ=;pmHD:&[ا؞1rȿ+_߇{ޞ9ߵ(Mߥ{Yv+=pdy%?v3nfm/vc޷pòl;9ܷԷa˞rUvϋ&1gQz|oxN[²ӰYnm,{ާ:~0:,[uve^?gSLe˞%a?gwX눳nmwZ?fPhI{?c/7
4 T{Ry2?}/k"?#5m?PK
    \               com/sun/jna/freebsd-x86/PK
   {XX   )   com/sun/jna/freebsd-x86/libjnidispatch.so}\T]Xuӭ\Z-fH*$j}3,ޮk(RҲGϿPHE/^ʌҼs;ww?s{vΜ9s̙3\grOS$JIk,A NbГh"Y|wg	ӟ87I+H
Gτx)ʿ~,{g,x,g<+Xf7ɁBx^<vxg<G31
W3s*<Xੀ	x<XiO5<_xڍ<S	-x
tx^g=<W³%$<[y{xu*x^俯Ws&<9<"x.x[ᩂgy7xn*<s<3bx(<ۃLb{?slDO<ss<pRybnxg*]td֓{Cx()yËMAxxIH?;q	scg<<,8hJo73[zxp<x^ix3^=̇g_pmT\_،BxZ%ġIƱqT8sߡSAI]n!ކLK?#h}YGV>
fP}1~j
\cO5/czOBy3p?cTl?`3<c>(M?mEzCq`]F.=
8

r9?
'o|CS>cyc
mI2[Z7M5'/gC~b?&!ap!Bύ yKylv?	:y-F>7U	g\Ӡ!c}롾Y:o|@e20 ~[b%)
c<iԗQ}#7^d6<N(ϩ7~.z$Cf#_NCZL@/-arX0-yϛ5+, |02r~VA?~`5퇰fn
X|\XoPՂ>lzI~5
<v`Sy@/1!nK"|#g ?8ZsS^3o#؛C^@o@o8;Rd\KA|ˀC}uA}}'~~)ݜ?A4| U|ЯxɨBtQhF)~?+
~D{ڨ)a,iN>P~-'gr!w8+8Y89?>_dLG[Fګɬߠ		1ևS}
zސ_-w
Hqzдl?OA9^?^*h?bc;!;y[2[U}~>m>J>`7ԧk~Bo?Ex
ObC7?
k2?8}(]?"k!۔WQP?~`>0R0wr871WW$}/֠ga49<zː R &s>}"scua_?,_9맆B0Z	Y0]@?I_i1k/C}Ȇ|jp<6ޡ2~ۡ>]OM^hZs+2F;ռbȿ?Si_I '	k;־ P95>|{ f)ӧHwdO*Q0yJ`FNSKLx`j?q$0aG, RS<ҴieiTdT1`::a	L.V*yf̺'L+ʦLZ$)<S{
K&M>9diz;'̜Yː>x;%7g'ϜU
f=O:	&x|å3J#_X2}f)%NL{ToD12{ sfLb-ŤwOLYÉPƄ҂IoN4`^NL%`r~K2(\{{R.JS!f0z3|`KgOR?sPV1|P<BTE
SK&xP(33cDd)a:/y`G
fpM1a;sHBy,2)5 ;a6^L/N/>!ɟ2}fɃucw$CzD;a8GH6~7ʭ' <؏"pFAxR	KJLJAM-)+ $铲@T@-{xZd(ygqǉ'$G###{IUZ0цhM-moyVGK[--mox!n;,гUO5ވ26fu8;{%ӻ5BzPPT2WyS&^GodQ#Jf<FWv+;zݕUeGzYB/;ˎ&c4J&G%=:t\.8~YYbE_|^kY&LQDT9<%GMj5YO)Rz,8X:yHN6;con6
VL|Nw3=S8֝#];}*⚢'M)+NGpQ)*$MdJ?8U0ܫBr*=ARqp,h,_k6JKf(mo &ùf3abQg@IK<?X0C?A(딉&GdIS<PEh_RXY/Z0;=z
ݦL+cw	!Φy=DxOce0
/$u iM+ 4/>SBw?/]01[4
3&aX
-*@/O8!
`O? oK'̘VO.1D>$umƄY@N
~&^UVr
҈۲^urBK)?XkC-_S8cY"҅EUNd:ki#SER>V*^xcGᎀop51R'{Xj>y<é<,l>r.aWpp|y8E<Rzx8pyKxX<\U<\õ<\<Fn6𰎇
<F6󰅇<la;Uv򰋇xú\H}cA.$G;`8 o`x3
pi ' ' '9a8|
CXJ/0|a?V}A.b 8O A.rl\0-A.^ Iv/bx$cx$%`x$%bx$%ax$%c8
7I IR
B;6I4!I1KFa.I-I.]a$0Wb8Cp<vaAAc ;S1,zǰÇ1a7ogC}c07B}c8P1\bgv%.0@c?ˡ1p?OBc?OCc?1\P:q!~CcX
Pnp?[1
P?1!INz8"k,i/tE\U]RMW`#ۮO`T$E waG0F`)K(
#jn
]Eu-F0&-¥`
h<I#",P0`ܽVԂH_ EcVE.
*?uJ*?h
`dh`\m/mj#E
T~qkQ#`dO0,jE)R..*?Xn*/`	GTjWQ#5TWyGT'aN#x+?)oG8GX"HO'Op?V*?mTT~۩TT~;wQS	>@O'Oa*?XE*`+]T~j#VmcUn$88kƪ/J@D^C0B@+NF8yj
A`\-JCx<*Ev\S4!<$Q#x8¥KjF7jϣVOpT~QVR	*?EOBO0fV*?S| Vp,7!u0y ]Dv
T;&Y
+TA*QJwh<et\_g|請S\"U6^B:ߵVHiAݩ^PnOI6y:mL	*ѩV <K7ZΆjۓp@Ytsj[p'2fJshEX},
Y:,C[]Xd2-3v/l,ݟ?υZeXrma~__gO4[u)eek+]IzrPb- 
h_X91Y ]5M39*d\&~03q$gch!myw=3ʛClgAviZXͣ_9^-6̫
UvA eܿ!5]ɰx(^WhTKwdP<[x̰hSe$i&ZRHxpgL9^X4Rɵ#&Q%$
e22iL2tq/52LF1S/i]70(~2xl.4C|Ϳ|Ds[d)ⱉQKR$`)WiQxVShyVQy%yE^k~/qH}r8D|T.q'ewx(e~mVa=axҙ8RҷgfJYK=6gq6p=WҲYb BɈ8$;坈_g|)~O>HTMMqe6ְ64`wmּڲ$Pqar+}x z!DP:qjZqJť&9mW}JZJ1dkW/;@_3ҷWa	!8PZ㷲x|G>C(xT_籲JT Gv\evoX\;+ϥBщP/#j5+<:2
YY.`
lי͉Sb5JT]	Leay
k1	ڐ!lտy|1	
uFT=<(o uw, ٚVZ^,Aeh# V'uo5@We>0ƒj~wxLg*-˭@S~AfJ-`<UhVdYKqT$a_͹ʜ_[eu$;|vk[ڰY-O@	K-PVپ <-J,fiAhph˜X_3%Ӽ!#e\+Tq7M}ۢĄ
<=ީTznj-Ӵ1ʋKwqIE 
,BUj_~ECͻƱF^9?>4XkHFwc
H	
cXǤqPwy(}Qk[f\{TGufq 綁")?rlȵP~͒w]Œ!~1ȶ~xaI5Kna~ޞ~OST_*;V[]Y/_WA;oEқ&'al(gaN(."2ڡ́c{GrQDڄ˄P	&a	a[8̈YRjBp7vJ'wFjh
W=0l$E <lQPp}&{R#k=LnOrI}=4&JF2Rk~QŲKP,3:dfh8PԫYyլ4+thZ٧?,Ȭt2U]hf&2/1?f[>{_3ەbwgcx&(j|6u*BDL*zr0l_-7r}ruz:M |4!J|+QNdRf2kCH4/Vb~{0D?VýEƁ*@#	hV`
BRST\;Z;l"Jv&_fS.pg<++IN3ϔc |ͧA׬bbO_闝w5%w?צ٥7.2rkJCj>m,jstpoi	ۦ-PM_R|Eեߡ7GQj! ~gj };:am tƀ+X1oO'Hb;Kʑ?VloWL|瑡.\U,*qˉH1{0?|.
%5`>n;aI+$x8,P+˩wm;~Z(hMѾx;{.aDyK'Y{@:5⎾kU,'*h?b*6.Ȭ"7-Ĩ?@y~6'$
]J,mC#6v}S߿D~J.	2Dd*D1C)*0%Wgfk)nu*&'fB	<s3t6 |	 N
y#bPH/TB./uw%kjGMT%1	z
]$D*y .?a|	)Nqh:n'2.kd
۷X[``-d4C^orJ[
hؒקR6$˘ǇnmK2l>?2AT9*VJ4GXsv!*$DřQvs!fzHf
Q9>!p)jmr
QQQ](M2:QV!j

QQm樷BӉ[Pq`{وZGɻq_؊a}:F!{x`LǿBo k?Jxր`[qպcr q>semXmFʰK(7hn6O`~4/м9<622G9~sJjM:@_fпB[BrǮbcC[yl}Ƕz?0
m`000ƙiJFt1@_`N"e8\]Oczd6ooo~';o֣WVɦ6׹sڳU},ڌ<u27sjMզjd-cnIm>A<ݪYE̸.e8a{8ٞyAcBݏK[N}`=г̓</͆{ƦAE_=*@L>J
سށGd@_r}
}ٮ_.D&pTS9a9PvďKsv,lu]v \頨1/j:&ߝq}ӏéu q
+@6"א^$K٢G{2ἒ-/[I?ژխOBl?q,*@Qi̽.$s~fM(v}Eiqb.UNGR[pߕ-GB8,.vgˇԍ=J$/K/Am$Q5Uʋ;7wZ@&0t_ė}US[A#MnJl/Dl܌TOC7qYM;۬';|m]r}z_؈8l\`f,*'E8 KcRTa{7MB.7a9{qex\JS&Ud?aWN
t}hgbh`&R\,)bC!rB)UH\j[|~D([혏dT@"o|HA4KZ	B@ޣgb!چx>800}N/`
+`Ey-JQA,0WRW)8ǎe5T%*ϖce5&a901)pwb=|!2hO0`EH +l$TB9<_H<xXXyVR:_<B	AX(q-xPQ!ʱD(w)U$ *)P3t"KGG 墂xn#\9*NJȆ{D`y1Oe_?[+LkP9
krjU@ޏvK!5ٲp̛njB61OpK#S&Hp&Y\2߄6mTN=77M=QUG|BSJȉvɱLb\\y<6,5!;_gd؁Em5S}?nSH_ؕZngbWk	XiV-1R!J#*:h:^pPSHR2k(C5iפU1
}X{c\Tݤ |v{b3樓Thy
 ?eNǷcf>>#g<SpլcHQYstPfV}壘e4-e7WH=M+N}u`#4sjbn/(zFViZ~LXO LVc=,6gofEr^Z\52vEiB}_#`JbP(/h(ԱQVF?RH/H\ ki>ܥ%jcڸyV{&%8^U9ۨ)l=׭jC|;9k9ʗQj)pIkL/)'y;6woB!OnuV#F-ԶNVk]
Wɺ='ywUt'5X\e,7OFHY~nVQ}P2)Q)G&uI5=桞|Yrnxֳj p&bo*>b\Ϧ1ϸXa\DZ_~c*pWhImXc89|X~ͤսCE![,22OvŜ(dp^:Ļ,@C
)Pc$O[>[YĖvC#T,y2+k<}i2E(Uȁ3x@29qu'nX\X.&$3% $D<]Hd7%BxSDKIBS('gyx!Ք!'JID1G't)o(*9է"y-@;e_FVϟy_C?\h8Dێ"nM,Q')9L/15p9kT=`0j(5<#(?cr8rт?Fcޟ~]cDkC+eK0Ff~<@xg*y0o</	_!xRoi+L9Bo8d:~gW'?b_B#!xUb	o~%^'IabB#52vl^]ЅkzHߣ\ڠ7Gu	p =чˈZU1W8ȱ:֊zQh;=aQsC,K9cmaV_)I}lHT+	!k#mʜDL\hUԪiЭ-7g5mJF<'NvN[hk_g3zzL1Ė'!7A8 RaUNhIG܄6Ԏƙ\! F]i{ܚ7FAw@]@~9A<Xu.(N8L]+tc=#{dy~N+wK>4wJN}%g{@,d+294/r)gtAϸ[pdVV
j6rɦd~\1Փd߉R[o=rۅw;{"e>=Bo֙dZSc$@Ys{w-6r>TwI޸~xi
<?}QqW$vhJvzYJ
ߨ4oϻҒvGl`K8VwVv1qTƅ8Cp-=mG>2Xhs26Դ
]w2B,HGN3=L/H2]IU\VE(E+5B|og4^=*Cn`)IQpst\t\yGqmTpJ'"[.I/r};f@>+E}+*_8hs;4Du.B
'9>ٱ9=+M<۲7U.AyNZw |hJei?|ww;3/ȟV@J_?߹5
m]jl2M.z꿂eZqד̰uQ*@r '@v tZi`*\l|:v!'lNBo&AdyF*͇[&^p9J[G(Ću,HPK|
6jBux)--h>{]ù5?J!86.bMQSj)~m GZ/5U,Eje9}׺?֊zگT)MXX*O6L|ݏjHIKu(K}$|::I?2(Ѽ.	OЧ*bi%x4EKY=%;im\6C9'|ۓC<s4,smCT28b=(َE PV,:;$Z//ˁ
d
AKabd<P/(yQÂ`] 4aFNw;^gt_~_r̋>XYCC*ɠ&,Gj_ILQ,&MȱJU+'o&xǂ_/K!3Xl^pm֦4t 4*vlo ZW]ZL '~:^#hS8LcF+Ǎ_Fs/X(1kE
(@02A{pl%|~;|`?
HO}QGҿxێB_/~[$G8kO˦K!z5LZD1CEn
C`s6y1,G"zKff7NS>8am	9;Z4Xdj`ե٪PfB7,i5
wvm#5uvxM~m+	_M/T?FN	5JcX`>':VgYvmpS?ӣlgCO+
F-Jzr<' ê$MҬ܊YG
.t;A\O	#@$5jz6ƠxnYֲe_H@Rxi<I~;{zCefA
4+x'x|z+L3TmOdCCUEe*VwS>wA2ZIhFr{;~%$9^qI+z/uU	ėCua@nIX'oa+g}nWB_^%M>]l1
8/h^.e9T;! |9	uPuWl|	Tۀy?C_o`ʫpO;Q~IIz/Aο4(Kaj\6g%exfR*1Y&p8
?&óچQ:br-'U"j[TѸ+?{= #fDN'.h0hR;֌wzD<D
C9
-}{Mk9`oP(,P?mֆf9r8qko<C
sNF
mBg儕z-K
:V
bf#V搡tY~3eA9-[XE7/_|c~A~jz!c?f'G<"qHN^}sĥi/By5ߋw^,Jb! 7bŏK?	p6\"7`3<w.f}i[;FiMM٦|eq⭉ ~#v4Fܱ1XjF> :wlvTv\O)ۍj;TBYj#R>>zӬ}c~SQl3Q4{0X
3ۍk{8`,wk¬vC>/~P`JeMo^}n~v@nΧVM6͛:+iOo;A~<J>,Z>?}X||NNH
R$kEij_gZz#7Do_$؏?~Q
 ῃ`ʏg 
_!VF{`z5O~DV/CWjd@Ҽ7-ҡ:$wXམ.8a_˰)-bg_o< pDa?:
C2^c֤{=ۥr#^,-^^+_oh? Xeۦ.ZόlS4QَGxs!!
v>uq[@YP6yX:ױԐz@ϯ]0,%-NV_M yۉ|]/Z=Η	<
b Oz$ޓMOWM?+iͫ"{^Lg%f0&NVj^셾G߳M)9qU[a_ؠި]ϕԅ
Km
^n5CΟH9;_"r9oY g}}/ᠭ>*{NiXFo':q4-] 1ٴ:Nz[>f.}ż.ZJuѿ.th#%c"7167^ΰ+q1#y\б9R/?.!!ͯ|x,>/G/|7d+/(_՛Z58pq뛵fy}6_{bZ$Yk{3?.A!/+)M/ҋQ'&/&y|gy_RC^|`_Y^߸@^|58upq+o*kNL^טϿY[V߃~+I0dKw1R=;VʳXXg|@do+N<Y+ё(/luk
n؜x׎vNWc5ISaroԙ/rodx$H؀U9sEl{.\}CtUDV$q?Pӟ3Cs4J@N9ߍo^qoճf>1Y.}oD7?.!O|[mūw匿L_ճ=ǿ9yqʫ*~~&ny3&y=L*5?.gS^<m;OG)Of>m{uwFqyC^#V^Y^U*<1yI^7gy/FwWWF>uߕʞwye+^C^?IrFUq]g:6[m?$D=(\<~o+2qSx'3ySfyTTy$N乀鿕;/,D㟖<KN(/pPL;&
&%=i۩O)N(V嶿*.In75t!]b)|_-}'~ЅQT#EE7y0$V2	z.&\C>RI>?)Pȧ0g黢vʾBH|]67lCH
WNu&Qcp5`GkoGs߾4p8]gBjѽ0ewyay,ՕQ|,J';vwJ`B=6"[#[>Aݛ<nz2RB
1\XU.;1yܲ$o; >briا"Ɋavi2/Gyfo//>.ޣ],.IOCJ
H܆v>GUغ{+epl~T}W!؈WVac*D'WQ8≞Pc.~Q^cU:ř&4W<3 By܏uJ5N<^E1<-V[pCgc|?aKait'=f[)T&}f\n8cV)3nF,on<Tl7
U:Oyުxv-#ȵI$;AY?R:\fɝ]_9SDT{jo!k:M8%7BMW8@e?ONɞ~Ĥ_.UmC!p>惩YA}WoBolAV$g]q۽Ĭv#DU'j罌;]ǳ4S@~'"=`+y2zB:{EXl=E4
=./`}J>ǣ_Q(~-}$B;?4<Q]e<ޗLlG)\;ypx)$%(/Ž㡞1}y{q<>0~g2M["Aoz~tCO<(!x}QTy\xbI,^
sPQ#$Qş0F{G?㟅8:<0o<&<V?-~)yg't0(gP"3I[mVfV9e8BFS$P>sVU>}Z/|Jz&8#58cKFWZXۢ0>3c/<^^Ы=)ILDȃw
;>pHۮ@My-O?[T/{b\Cl%T&+FY2\p"6(q1y\o><?ߓR>$g3xL3xWv#f~??rsFJp$g3ܷ=MnR
>5N<43gŚ
n?:"\3C̱)
@83Osmu(Nb9+O[F砋ʻ e`s(-Wa3BrT3@7\JWOlw&?HeژP-6@?kj+BptUxHY"/';xf@le]2c(:j030ڒ&l<LiGIsC
nT~
&+ty}
b_٬Ĵ7dj	@|U#{=^mEeDX6adtHDUĐ
Y5'/&n4S5p`ȫqQv\gݾbOLHVBzW/G&bs_c ̌L.ĎjǬ=Ӄf
!݂>\F}FFԃ6>c>܇tC`[ElQDr
by+DS
sFʈBaWQЎ,m䐮6m2adAgLD&B͔Xi᪋´vՄ9
j
D|?<],F. r閶	M>?dNoЍlo17)qGBb<,^pI1c@xHr8SGҹ(S=57W0Rw|5/;>8K%_T|eE7^V|*{^|em7^|e*Պo+ld>έkٹMuKk:WG/
^*>^u}W}Z襕N#;}oR.X} {xA%R(^\q-ԇF\ݨ
-r|ٴu?eqB\<6v[ُ`T!N'~dv]Pj
Hq;2f>7
<G_eyVg+	~9h@<=QCqK |{^.ji'렺3tb Tu0}:}WK):XM#$xP
nJ~A1π6 b7bL&'ƣI	^΀#zO$tVUDl"bb)f?Ŵ<	Xɀz9LflQR|cرSXXǝ[G+>vx
_ZnQ6Gԥp01zlI
rYbsinKs*`5r7
J^Aѹ{Xq5z'^d);7ҀHQZv	b	;)dB_,>6xk|^_$m32j5l:A[>G/w`;;bT}I\s);!=١yӼk2^GsnxjW՚wKM>QQvVp}aȾ OtpއN<+ņVG"N^_jfe]z,䏑Q%Vo"'t/VI<v&n UL_P5ˌI-^D'}fEQG3|[HR=ꈹW16(˾i%:b;gMppO-lS2nTSٍZ^[;9vxT-01a>]{j{zw)ϱ97n\$]CgUՄ&_o&Skl=֝xM6_@RKRѓ	r3{8I61-~)x5x:C	0s!f|~ߜB{cl#YU~,nXC69Bo
XlG1 Bl<_BB^dr!v\1yn=%")< 1yL.ľ'&&oFɅzr|Ldr!v|@\=_O@22Г/\d||Ndr!=&1VaUdr!1={bdC"(ųǇǜPOyjlyJFK2t#rb?s&L4j#/ML޽fFb3t~ي7nL.Ğ}t⌔_Q@V5 ǚҗlpʙC|fXpTO6#;'!r(oj'G$D;:OV'H~pSÂΓXDp#x"/%7t?-'!瓎.#?O
I|$iӈpyxR<	OnH,D~o;*OOmFʍ
O<;hTҊF,4\Vw*D/=,bN20B^o`Vf]k`Ow4EeY,`&9ZQyVȽS,|0"f8_OFCfaȄ0v7EY)5RDr"_	~i*9_':Z@,%.3Qu
-%r6Ϥ7%m$UZ
0=Մޗ=`}k]"L"
賏8^ٿ&̼
f7ՠ&p9rd++V#Yda`>-xʹ{QD.(QneȍXai}5Z6X5zC	Ol"z
"`Aτ"](Ы1	-*3a
4ji^l`.53a%Xm"f9Dτ``Rz[ExsWHτg`-W.׵	& Pg̟+0jL""L*f`v<t/#L*j`n&s":h`'"fHWET]@mtaR	skrv3>PyySMa|*=rFf4o8Vȏ-ŻL>Y:1hFarb"ь3!ؽa@cs7ÿ_ݏ>_&
gEc
1@fEҿӿb_a/ |o/U^B<z.~H/k~o%OF%"nו?|
2z]uB+T-K	__FMz_/W~x׳$z_,W^+󞋯MWuok#LGЫ٩4|(G^g$z݄gHnz}_o;a>^׋UF5j ^$څk*~"'^g/JR*`5UFO-l?%.E.MoiӪH<V'jJ_>[N76+K{_>~KMp>Cx?A8܄Y?pn<I49MS,\*
`AE{tӡ_eSLW|)6o7#>)͌X}^	LO^e\dϯwVA0K?ui9]6w"G3#wSkepdkU~6s2fSW˽u}lz	i8<'/]ܠtb7EI|ۈQus8KZM[g+x*Zo3[aQ?91I}jIt?66
?$(Q28~mۙ&^ f-%!sb.j=AWUa<Qy_~J8ţ-j8HK`eWYPoCKxERsfSc$wdDcBT"^pevF8Htg]ïymG9?ج+ѹG
]VP6yُŌRVA5r;zW]Vvnj
xkIխa"@a8֏Œ)(%P*8mg''mAyd5`4CPMb
]XPzq62rkA<je0ٺŧ뎙U;
/9-FYVJVIي% CIUlы.s0Ky` ݖp,[]ZTݛm]B"Csm3oqϘ$bF`j7L_)ad)sGkhMtЦۀ:ɍ'xm|1Qy4BkR7<O\H2WO(/C:ʳآ3PI=~FK6keTMmr3mp6aU7qWtdb]tf;s n,jGjCVxCm&JZo'SBnKhYnG)oST.vRՓ.t7>#Zt_Zv'%ypױE@eίL`ewy9a۩EٝH_;8[w;綋5%o33MkanT4tC|COYNۼZoGX99£;\޸'{"IItn-lO}R<O)*IxaF{qrWޭ8;W0gzYр۩7X&ygjMȍ!埌RЪ@^y7"+zhcƿi#rdnPsf5NzS,<U~Z1/wqqD/lr_WY5ՙ{`Ɓ)čUY:ޢ,?q8O6uS.$o|WiZwgp׾Ab^h$@.?IgsBRJOwo{T|7Fk|&Z-jD	wXk;<N-/*xs-ׂƀ+=jl״lc^nCX-J,Eʻ%$7mlf!BZ=uX.%,	w';.35DN 	$q-Xb~'c
t(~iJdڶb8GҔX91Ys
G-
	F|\	䶳ClJ,xtr|qB-/ @[uՓ\Q)p!Ƣ裍cj~q4koBq$X6#ǭ&)2zv4&$C^M㼹%w٬a/z*d/`JB!Fr
=T"ծ
VFu찦5YI;\\=іoeYJ3vP4NM9wϲ5Y[n\R~&yt&K&e
W@I*Ĺf]L	4{ov_LN#s}˚9wɹuGܩP˾v9;7Z<g{w^bd7zU2`` ~뇼uX7ٍiM:k1&Q	C֡1e9`.[+#'ic#].Scր!aF^#G^*ۨi[G78nM3:97:ہWu6	Vk)gdRrx64յ,	0BmRcuN~>+	j){{
=:(bv{/{}[6h3@H,6mMm8%FnskPc:V
sǿνh0Ǵ@icB)5]l DV(0]Q\=]W9KȲ/fBH@Qw}Gbl6p:;NU/tNA.zyx,j峡0ET܄֬qt_@#\4}1[ǡm!cӷ.D誊C:+iƁ@i#s%IIɋ-"r\u,..=n"c?NG&IPĦ?XNKA}Yv"2%0>{YCҀte`U1~%H	1QH]asB=djk9!Q۰e2P2JtB5.eC_r1yZqC]邇bALC.B|9v$SyOO;mgN:s
&%y/Q0>II!dZ-4?	Kyn^

ȣ:j$7;g{{HWnNMIgtQZl7w[/7[m%SR6.q$Ja/;c LEw`p0jqOى`m̢-lC˥qDhó\"Uoa|tS$ڹ{H:~HxɣQj,cϙ
xE
폷^*>|3y2`-v֗=0?!S
5h@)#
!B2`^P$qJmBom˷V+TQ@R(gU}̜<@_vg^{ZqZƍ$֬@)JGƆven$$Kgugus0%w(`7>dK#0Od?|4^E)bDW?I_H	9iN>ѭOMbm%9UNa?{[t ?#y:0zX1賖<3rsWz[ݿ~eվ#f7nʺ?˛HJ	7ۢ~J=bR({Tzq/9MlIUM{\>[s'Jm}ܲOMG1Hqizs"
J`,7gVnGǾ~}6
KȎY_zyU1^oA<{GamEf;_?jl"tʭaȣycS"Ƅ7sz4BI'9"C~W9F9 Gcrs&yO*Gi-W#ٱ6]+3
!Ot̦EskJ$~̑6. Hbnu7K>o=z ϙjjI'eG|ͦWeA.,3Ǚ٩.H[0G1s/s]Й7GjP(f!ʼkndsc75wW,%mob,"8'Ke{<ܸ>~(5Yݱϲ&u0WǠG<3G=^fW~Ep?XV+EN`$SL,^v6]zbl-|-zW
f>O4jsw3I~t}x}<>:;Ur_.g`OHDl=u)gmJ$NϿ].sF( j٪;珞a d9Ck.Dq{*7"53f6wjHKs"eMw[XR-NU7Cҽ)GuO јUFET>y˔O4.
㛎:GDq]QfkE	GGOd)
W[)G<EICܳM{f-.>ʇ YacM0MO0u>W+ Kid^+nf]NDԅ?#^*ZѝjM*52,Qk'39F3t[tQШ[}N>Y*usD忝E-E.l3MsQ6@XRОho\	ɇYqBo:}Godrbn"cM1|VY|{?]=7}=m'ڿl>w/RU,)k5&Ss]~J"TEL޿HF(ǅ;g[F(G挑כ$gL1F]!C)\mF/:?:
s,;TXLJy2*/^rW^*OR^<^.Q^D($]A	"+qkYL}qz)ڔQ=pฅ+83}'i)_VmqzQa աok&sp|A
ҮI36u8SMygZH%Ƽ+^aqd}1Jr+ͻ*z#
QŻZP^˼[z:V~QVy^'0<cJK|{I׉18Nq&Zr]_EK+<>;uEM:>cy*娗v(atfr:#hD
,UYgTJ}OZO{9}YW$ Ix~]޻8m<aGPv9G9]wh޵0cQJau\X ^87W6Xa;JU>$\3,})*M~qx3,0:
׆1:.b_*bU2
ǣBٰHyE7'i4їh֘爝d$ltt[ 0!?{L}?~y?㝄d7v??RsXkc$V}> %ՈrPX{Ia}%aUZ0~'/cUAդIlc;ᗀ%^p2"z4L)HvZm+ vеTarm}s=ǉF{MK+TRր~8j.ҁ仟GaZ3ŻHʣ~>>XO&WMOtXXj4M).#=dȠbSһVKYvZTEj_;5yJ}d$A7
<K{[>yZu}K<8W	
6̈́*tՑi`̛ZfPR?\'.Ž;t5JzmZ*I:굾eZwu^E>_s3]\d:hm(H.570e=b4cE=a% y\JPxpg?+˺UO8(Ki\T
LSnk "=2h;$c#mkyѶoӁ^ա
rum-g@0&SBk?˸voeignzG=2rI6E&Szn _2uz[K	r9CS_=Ei]#-xk^Pj&i V{NԱ]ܦt=Y5XTA??}-5=MlkIUoܒ@DXoK7$>=r(ޤ؉[ҽjPL q!%݀rSB {zȼ{M2R8*A_<;&ktSԩDWa:
v- =g'h_L?I7di;	{8HyJ[ԚgxW`mjVf.7@(޴nj.wr~,5w%c)
TGEXQ
@$Ev'(FӛƏ1oM ';;JfVZ<QvQ_"N94b8%Ê먂4<//aE"wMP 5ekM(6֢|@nӦ[xyT޴M2ք'@=I|[,zMHVGL%5=WL"3^ YuH'dC/"8(ECw@~[{U!yI
=rdnFI^Wջ%lC@/V>SX< kYwQz϶E9uzt$bь!w8o-Yu{Nwf\uoѳ@3b͍y
:uIkw[̍l33y)$`cAd}Q<3~>ёRܪdΰX7a; TvbU[.UPX|\G/"XL;TeE+K9Tff<}Si-gKD1qܻ,'['$=3,G3-eKNWyt,>XVs%!#PJ kZٔuWK(y]*ZڬLwd_&Ʊ։4|?J]/g#OeǺ|8|$K
Kx}J<b	MT/}{s1`<wjhX=C Jη77QXaɬ4͍{ _q|v;'Ճy)[t9|.JA@LIMic= 69ML ܍3f'/2ɋAc%ZF':eyfb,H;E6gd`k¾/9?/8R
:1Ai6{dg{ tx5n#]4 c)q>>NΌnΉN8?xӚ2/Y
S\\q NtJBq)F:(q<BHѷd;_a;qhct`"qE"XP]JV+Ӿϒ1-/.`c"@^?s9&uK~8zJn_҈5i&!@ _@N@Vǁk7Q{iaH>.k@ȟܙ@'߼)3lsy%P^&Y)_2eldʗޙw7"Ze=tq&qsǳg@&FO,a3g.5)龆lR΄I
D7RE$"u@Ia}8Ue3g} ,$K[8z7w仍(4%ǨM8τzM$֞V.>$H[h:Nj&@ާPR| 3(G;1rǏKpϦz>CI@	ͤRg&IxK2w4g͚{o!}/^>,fz 1;̀᎝w\a l-SƼ
i܆f%SOUx9j})'@!3G
O#kYra10|A7v2ճ#H^wE\~v1yxOb<	-Є~òm
i9̲S.fXgiQ}mmt?߯LcC/&$߅=zSZ^gB9f ޔrKj0__PocgGn`:OdHJ^~W	}7`8%D#z}S|(B	'̬ѭw^#y1!G8p).n KU^>!;IE:@~ ojPm/	^oϿ:s(^zw3t_'3t߱sSWm_zPqo{-ǧ ?[лFqc0U8|u}7 /6ĶRiQMޤ/Ƨ4/Wq{d%ˤ`vlg| s
6g`6@SyBBbQL89<p?l?6*Ǆ6syQgj{]P:\] dZm>`COXCRYZU3Iڽ
g1c;odd"b~B`1lCޅѡ4 iGWjZ=?Fh]=H<7bY@wܯDR֖xͼ	C,
GF֧:Hvu	V6q	ÌQ4sYGͮ1!םO](=	4L,ؾIф3qI	\c=mv-q9';;+>&ν3,gsНّԱ^5:7$Qp6ЂIi}˅=d`+hyo*[
݋c!Oq[7!eu7Ar}fUg>kf0&9H,kJ 籯?\bm4߻NOlk^}.lIgvѥ
S1;:)6ߦFѸ@Mt:o>w1;̕ds͛8t3W[Xe9Lw[2w_T2CO&Ak,Y(@V!a6)s_ Io˷P6V):]v(x<}fVftꮟxUFr^T.P<Ɓ&?wqG>uJzOEw"s}lވ3-(6ⱟ+VB{GWt됙omvD8{B޻hc~cQd eb17͙Ȉݕ硦Π8Uo~nnƬN:'L1f9OAAi}CjL&czưwrNͼp3]8v%Fns51^+Ad] tuaM9|aF]#3Q}d27pK^uXY>m`C"PSjɕc|~=0eTod޼*^K.*+Cӷ^[!*.%>	-tF[Jӄ(^Q'vtxF{̍Eq\IZ*)1%,}r9!S2E̦@XJ\.%gyk?s1>@PA75a"T##}u*UQ6J\9nkI$_Ǝ(7^@$S)..`-!$6:-
ĺ#,Ĵ>NȾL _}Y/8;tr	}0y/TrI.	% 6E59b(v oOJޞv6X]CrzN
?KRe}cJ,
RW\475ia
tI#Tj%]QMPgQ	AX{FX@.J7Xؽ9tLsޏr/<oG_D7h7	S><#/JYb]wI(Ň-l;<3=3+[H"ٞnb1*[كI´1X2ƝsQ oؙM\Cdi1*'^si.k닀dmOjzaiEĉxqYflOHOֶOo9G\+
I#V:n쥈Vτ <:4rؠu
ܞ#16,8wl1^oCr8ɌVݙƋE~0bnvuf^Fw`PB&9j5Z=(&MC o; L
03[|Lp*2MOBRG|}qZOwe}`Ԋ> fVf4ۘ4	t
ZY:@sLD9K4L)sC$:
ϾD*62 oW	Upe2s/|ձ;靀mjZ	˭ˉnz_o|%n.2q" Ki$G{E/V&p4Afg+*bI"!bѱ0tV\|G	=,/~M0:YҲLR#U>MFФ#@#Np׽B0]$wcC2~k>mTwuI
f6娶NEt[ =VyeWLUbٲ*=_GJ3b\a%aq~UAӌwX*fU[B0)=B*u]R%Ee95w_xy@{7MO'eJaqڨۘM~s#q^L2_'@R" OF~%|m	Ջp3[ҟfEDQ,3ڥ^bNPN`j1uu_)4Ąbӹ8\J-gc9ŷsbVA5sgcҥG|.J㣓:\u߳B"ٽ\LhGmHb:d>ϧB5U)2BhEؾqXAme#*41C6'ĕʴ|rۺZ!1ZuL#w$4{b`66"g!AWC2K^ 4=
.zϹ"(@Vd{RޕΟ	.$,ϋisF ˼z4t/GĪENbSǋE4 _{;; X/¸)0deEá׍3اub/6yw&yy9SH4PN6tçy)H\s:Hlɥ
j|(rl~u~@6~I;Ŷ+ЊUJ+1W>:y˟e^U#jY?L9Z	ħE\4ގ,*G@x*N7,2+[}i1&J0ʆNc3917Wmxq,ce,o3s1QK֗[_-/S/26طZ3Zt9zt<jc,UdWo!Mdm-}NNB;m̬43wDZxW(kMg=Vx1Ehg~Ďx	,}Lo;N@ˊ[{Lފ[~x}<#|jz{w[CEXhIcgA.yfZȋaCl}#LKR&8F' di\-"%u+s,tHٝF=hm,tnkMsJCG.2BƑ(
];mUw^>8MJAvlu]vj`p!ƙ>,2A@;x*T]ߖeH:^'堒P'-BfytNeͦև};uac|\As8&!ɢؚuXs2BUYBwJ~eU&9XwNY}#v'm7T"̻t{7D5v}wukm81	~Gg\M/t>Jw}[8>@*PЋtQ~h!/]uc`e;+>{PQ|\@T'ܤsq~7-g\tg\աs9Ե+g]ukgѩ+_^< }a*v<%;w~(.%2C$ɪ	2dGُoRnE/x%0чf8`VUOt1_E<ׅQQ_Pw-Tl#
߷YE>=eNA̻K*QCΌmI9x!(VN.G{կM0koL3/y_2>'Q&Fe45n
o}?xe3)hr
{7hՔ`O .;5zXyD߅,&TyF%RC%/d<j?;yU9;/RӾSTw<麔ƽmV"dݹ:mn|Vj1L/Ȏ>աv]7(d:<k[IrN|,gڬ־  X*JV|Ň0lnlx{➍1ڋm:ʔeyH߰n4&qaz
üVyGI|t9,\f"PY
K;/m	

|;a|3.J}I0Z3Cgm8 ~?߈A1&T)1E/=:_E$Wh<oo ץysΣk9\Zo0pf?ٵ' h9x_Q_ua3ݤ`y-)ϮQΫ-I|4GHTe	2yo	s`lI*PƹG9:
]]_ڥ.YjP%r}<M'<!BNqUL[+8yQs?k	'C}?WݿTm&iR
!uu u+3\^=usݛ3_ks,;FKsŽAUC
7:C	<}"=ؤd@'*nb6ZY:opSoyH`*WFh;'m!@٣|I=9;p`_rv\Jf`\+-WgpyAO:-%LO'1cBv@6Eh9M8t`L`:󺣐t?~V&)NW?[1Τ&'hCڧñ:;[khHY00<t;]4tZzlط*)~9$Vץk%WѢ@쫌뼺/м.K&9<!D$oXw怬^6umކRk>vwG*Sѭ'G@toTHi>-tGCZN&q
؆$5x,7;nveob{=\ 7{8bf@ތ1cU{KsS"tP2ޝ}SI飳{=g6$
߇w<LI~~ #]@r()J2h:ӌnxå~yW{758xϸl@Qr-|UƼvħ\ltoyc<,|3/	}7|󫭲/	z?zZnoԩ睌'ZpߧDK	+]:Q\L3-X971G(1}!\x%D\O1}Eq*1ڧzǝXc>¶G3$1$e?nv
k}7bk5ok$.N4E ~	aX'Md&N^p|wi25YGZ 1t0b>_}Z8
	_|jlPZحJF,%aؾ+-,y/!
=k"剉&MIyaM7)7=X;7^V{B
2^8{wmOӡߛJY&m(]}|Zs]O{ӾdO#!{RluBMr-A'8j*jʪjz[Қ*[}ȻHHUoUUU[V%WPQ_ZmZYZvoB52'jV֯,]eK(B<: _Y<֑Pnc0
J+`ʚUF	sk֖VUxbjj5	疤eϥۭ5kKT֬2կ*J_Fe:ZQ,s>mtm#nC
lԺ/fi*U|ͦIRNue6%Ԡz;U~A
h$M
4oEieuJU4va,K	?߰?)wtH؝uuuzVj
}YYSQ*	@6:辱|~/p 2ӝIcOv ؄z"_4zu)PQPW_Y]Bחn ֮tVֈ0j"|֠U5{^V[=tJnݑEU]@axMVώPx
ѐ(dVˀPm-*Hu2M5۠t5r WgC  `xnr]UUjA5(|vIeұ`Jn1Pց	'JKTZSXp/rAo.Q7'DӗKۼŵuG!2Ȱ8D$PX	é!V;or/TvI`߃ǩA]7
ܐ#5X`	@ҡTm\0R
Yeh9lBܜayW:.м22Gn/r59}CQirh!C !rʯӘ8y-3=947??ׂ,fwZԈTnl
iկ5GΚ2BH`Epo	\`ÐoIkuk
vI\HƷ:^?8\t*[=q0h#	~u]Z~\̟Ut+**KT 4Khʚڴ`*K<2HpC
_`HjKE>x.SjkKI[XUVP^_ٝC#tx_$i~m&ԹJ;jʤ$^:RnzkiYY~۴iZ^n׃WՖڕUj;{9d͋Y'QZpBk-r`u֨^5i="FXt,c	USNbݮS\SzV<03EѮ1&X$934l;l(XnB,٠'UO
JC1R3SﾱȔ϶Q_Z(aOCF܀?2%I\SUu$RvIIE7.GG!
z"ֈْFJEdS
wUjY44X)|
)]e)6vu} m([QH.1LABa:r!U֬*ubKN3C2Q[YOc!xpBuNh:J\}em#re}iRj	5Z)D`%mx70=<?d"Z|4%%ԁys$OMdBK2'MX\%D9TrMem24awK|*.:2e&S[/c~oxcR&i%V/g {0 bCbkkl̈PF|
q|&'&(ƋhnHE" $& zX"qPW	s$H膚Q[]W[?E	*>@#MN
=)HRɌ/\Ae~)-au='Wr[tXZ(@
#t$b3(ESE("̐)	_df$^
ᯥ IVҌݐtK0>iHa\5ie0E
x83waLe(gb8{ΙA
KiީCF!#[4<0Hp7l|PÂGqL.twKrF<eH(a0
9#i{ؖB'2ͥ=Пl)%U@LTKb4"&dP]	}.DQK\fA]B3YƢ<
wç'w5?$!͗}ig].pnME.]Fi/#f$?,,ܞg"*:+\&\7%vyX?qGXN<?w>(]/XkFp#w9>6^IA׫1g.37*߿b}rx	fi䆥_~_~8u$de,\:
h/
\>'̦*g5eU$!H?u3نXak@w{EcdM
8
k&"dWU
J
d쨬q]'ae*;Zud/PESz0o_ KTچvhSؓv*=}GEKA,M	n(4U9H~na!l8̎0d ˡܶm	IQg1l	91PZmD3|p4Vkڠ ݛF{w8!:ocf1$qנpzfښUCG#%Cu_%FB	nMQ՘jkê/-F=p5N*O7Qw߇w/\Oe
 wOp?}w{ϫ4\&%&ZFn>B<VƤyѤ<f5QY\y@~\~dCB@ʝN;g]$MY[Z?Q]'M)b_]-Y%~79w߯>'3^x5}15
pSpxrᙈ{ϡ=gGN̟N*>Bҩ?rÕF?>Yx+Wg?BG>
c [ĭHhVnU{J;çΟ~遼O7>rυ~IOS~υ.]}E@?g^~ß||~
wŖ׷&Ѯ??#B7s?}c8率w_
i;[0>;¯1JwUE>$IEo:֘=֔cqKw^=[K+R&yFQɇO]z1w)"}̨ffkT/@Z{(3f45PhetjlhFBgQT<QN(4:un]PFkqOS^]jU8Ҕ8'f6<q38jEޛy\zXT6FhM̎`~VL6/3ICn/զO߬w"001njHIӬlp?q+ىq x*Z$=Fˏ7SЃ4Ψl

J)-]0\MѬQY1sy.c[1m˧'u!P	0:
:`%yCvogCOׂ3I@~PQ!h`߉<;Èd߿a|;Bb
4Mp=@\A<ȳ(G<>D@Zuw]]ػg^]վ:,]RIG|V0x9<91ܡ8"ޘ n~CCьQ=^z}hn6daGQ<Ug\?-{c~-;:F\]׶o	%%xmodx+A9*GS0[
f}&3hCe]!"Z;5٬_2lntWnᙐ&dtE֌u߃3^жS!㺐Nʎ<9b#M.)bu4R{=Bdm~K
S~'UG5DGߎtK'؍uxO_H&O';CxgipEDLQZ5-zO n4҉ʐYOYp	mL\!߿߿?h
@fz6(-P?YIzc9O/IG5$Wܣyi!g_cB&.s ,!YKI6:fw[HKğw(ItO&	;׮᪖`8cYqPHMp*m{p/{$YHW7.n-f'~
"N>7.n-f'~
"NLF~eU$ܯ^; IpS&ppEppk6=	kw,\$+n
WWn3ܓSTS'yzឆk{8@w#pp=pp]ppppZ{n'v=:*p-[v32H$$z=!IJH-!- }W
O
QX8;,,
>#z!R
sk4VoP| 50/(akޛհzޢj	7[aa3m63jSü@x<?0:~USKwj8Ni>:bM<ASMSǡn&>XfQޫ3K7OS_! xHFh IZ _/Sp;6ӴגD@aFdG*8@.Mz©$Qď-oJXGa<lu/KEy.-[$kap<I*'nyp4DK$]/ʛ?	O?ិ{<$IkDqS5Axc2Sa!_
~f" >m<R5~ $IDdKҔGo|(_!l(Ip<X;Q![IZ)>5ͣBoPM?A-oB8`CsH"֤4ʭQzSDY.X
M[BMmaa'55]
.n(oP'>sIJnudBӌg!mީPUA3 <>$?<tO->(<	S󹽎³GM1bx|5SߴI:-#ܨ	w#{::;:։0ŵ>+)\~"K^x+")I+oOa}{^6nJ;<|U#P ńOxmyZ+
ǁ?τG LJ3_ E§<vW4۳ǕW(*I]T|܍Z<#Ƅ?_w+'뤏Dyw"ܒQx>= <j#iYʯ?v"!Iwo!$E	U""g#⧌
NW^U~8D|p+S_~0YLoFų"%yBχ?OSG9[,E{* B-";,Q|.W&!~O	~%)~dMAx>*Io%o|.XzE`|o/Վp
";-Ax>EGO- y{X/?_>Nup8ȧ+a;>p
x
zQ	OSAx/Sy>oߡH>A3nDsJ\"<PxR
b}T`~BL-7,TᬨH.ę ;+**N:VSشGD i{%wԗVl%칤d9TץfCE-I68m7݃%Nm}	0.wc,C(rVUH=һdMMi	jYRo[UiwűiC%{kp

[՞B.IQVha[V&ǌF(4mdI%s畔6.˨-.	!--(^gb+˂ iAc>TN˟A;Pjcęے[srJn˞;WW)
BKK*JW?ÏepRzGXe=RI	4{ctAtu
^T[7)gGdwWj`j&rwoo7qFlb}Jvz	Dgx"6>KH-@gJgap^JRPF&ڂS[MJvi AG # gXʚj ⪄ї9YQy
Rr~LI-;i֤:	n4nC7Ua\^SV9*o`'Q)nXQB&:3	`T8ixS/
v:(!sK֖'{m0TAE|#&Vm@tCժڒKMudFYNg@7]bр9|[2 )/P* Z(틻B
Z6'Ϻr,1`++q\Sjl5R5(WB$+4vޫ>ź=8EDi[3u)	C{;x!r
*j-K
N\h|uuiPN`W醟$5Iymo??7cD
T5ᩔuQYs]blqb$Ӊξ{)$p}5})HiaDAsNH/5W	"LPYLh.	RE_7Fu}8_
xߚiW q5eZT8|jtyi*d^b;W*/9VyUvȑ/L1^R$_CIʞL)dqi*B:))2}&VVٲK-Oʞ*4хY7X#+wOՂ40t]=DCH=d7UćzM@:k˥hJ`$mĶVVB}ag7'^jgM9oP-,NPkdLҕ!(1ԾZJ.P$wKɫj<(A\*'yU- /SkKRmu	;]sT $%`NvrN;rZkhՕe/x䕘:V-]֓hig<Ϩއ@6;D2qW7/5eu 4JGR=֫ռS{KB%;}ovM:BCRn(nMNӌ@tl3 vZEWɐ,grM:?Cn^RӤu~r{o<Jm͸9.Ah>rht=IGs-5N.J};䴻ft?N55hqt5hVM:HkUᐂt</DnNXi>"ru5h!@Ips}$SQi	7^6}It*,q2Q^X'8+|NzUfPK
    \               com/sun/jna/freebsd-x86-64/PK
   	Xdyl   ,   com/sun/jna/freebsd-x86-64/libjnidispatch.so}\T.cMʾi(4SDTHabeZJM
/i2S4˻b/Ιs]s朙s̜93wܩ&ld6yzߢo. `jG̆_SA,xXc18_7g#~9{:q9|#9]Dɿ≌k| _{
y2

\9ff{.\*\Z5Vs)\5.l5ʏw	4t:\.rLjf579'pMk.\O [pMk%\pW7zub;{paݼR~?prYk\Nn?pm?u$pW.\u7\w5"^3Ip ?l!m_{V	\I4^o=
\1V۟WwЏt	oMG_(&'\zc\vDSkW6\/ df8
,Ւz
T:ph?k9\j3pWDk*\OsxD \}puztIcS6Eiᇾw0F?%? F~Y3^n7EÛ.1X1OKS%|y>o`|
{r9`as< ホgF0/~apcG'PF_bWB{zYS4eF|`O1||
 73a6bśx7x-Vp5?}	oܜ?U;/vj*?dnv+$1^3~S_zfOb>fC>s'`ў4ۈ$ʧݢTw!sh\:d'ߋ!\n^ROo.ӀW>뽒#,/N3ryccJ}֜U#Gq}oE?x{+M¹=}c' $GWx;h?\dhFpq<83X_=yyPz~o#_?٧o햗+wE,<Lq!_-qWFroe	wi|@*-{߈(>x}[?ۡBb|y$$9
ooɼ<y@%	n(;ڐq& y{+~Fm?r<<.'-0{I/g&r C^wUk0?ZK9 q,^͘B0 sǋv|||wpqaπ[zYE!"e¯v?>q ov^`}\6vvDcbƹmA\Jx]]<y{6ןH/z-8`}~W~7#|Fp˟aFqs.ǧYMx;̿?<s%]E$n{s\"EnOB7?Up^8g!>`p5#CCoW8ǋʙF;,.y_Z^n*cM8xE"qC\Ro\1 Ecy{??CGCvS;6_/["xj~=M1HS,1<#|E<Q>1/,npn||mOecfqSsE}MKzך8l1|#Ot>/{ōB/p<Ǚ38~Y w.X/	{"7SSj渉LAI3&e1iPRY3ONƏ{\cR)Ir3L2&dFd$SN	lSIYyn@ڄSθ1	0%3s\*眘=iLS&Čg=ơgs0@eA	ǌ,Y_$)ܼI7mQiOd>	3R3'eMHE25I9&fO8;3$e6ȀNHfr=1gҲ3F{qGO" s=KKpBcZAwwt:"8#wFpqϤM*ASRǧJi<lr&YihGbJ6|&NJKυ"rSF=k
fXaIi$<ճ27ZOƝ(5A71ɉi,qz*CfOmR%0O ~hנp@`[ t01$51gNeEԵO?%D7&܄QY4		':$4Rzw3_faX3Ti35y-*ZxkW⭯[_\n~ش^95;֗I¸I෱>y Y@y՛M(w,
/^GجIfظ"/@{$?)cB֤꣨rQ{9״hε,SEsaќkk=}vYK4+՞ Kq<A96c`
kgmiamvYO^G];yRV.Cd=.J?'4 zMൾ%w1譇
fS}f?A {Y07>#ϩhQrʔ֐<z\Nv}OD1cǁ3ܱYM鬥RAı^9
1lPB5Vo!^5u:;g@ϕ>v`n:@siTs<jQKqc&g1>#7	M4&YXS3&"-M&dL-7qBZ.ل\x#*o"!sˁYxO"5QP'<nB	M~gL">5crFz*,d9`6xl|&h?1=x,Ji0Pp o&Mѧc&[}Q]rczԘ.&-/ـi|gT>P^<\'		[nT"䛟X6j]\0ܵ}Jpi	2Ue:m}K8>?2_oO`||<?|#N_ߜӗKr|{N_^Gr F>b#}qxǭf>N?_#}??}??}#9~~9~K|]郏b|Ǘ9o2|
_>x+}+8_5>27<)p|	G9>|K8~>G{s|>{gp>N?)ڿ>B|h>xh>x;|Nyvߗ~//$|SWHxyq%HrxM-%GF§Hx2/q	.I	?UGJ>__GI$|'	TGK%|2Ǉ̇H 	?R{J>[L$|o,gHfH·%|+	D[%J	VKx	^JLK$|EWJHxM*%|W	_#^|w	.w"$h9R'$|$Hh	WI	[$M"$H	+Jl	?HOC%|.gHT	_$$|	?Z/~#%D@JLgIr	-+$ROϑY	_#'Kx
/	."$|>J;%|'	3$|W$|o	IxU'Kx"$H	?K%|COs%|/gHH/%~_.WJX¿'K$*	_*WK2	FKB"+%^{~$=/DBK>BoSZj}C.}~ErCoCNrWzIcrDCw)P]LcH^Bch."	0&^1,v$+J;PݛMp;q;+m!DpڞK GE9OI[C%OA[GJ%­I#܆'x? ܖ'xHE:ҟnO<?"|=O@_EyH'!|#OD<
IG#OBAVҟ{DΤ?!|OMN;H[ |'Op#!|?hҟǐD+O1&	>p7ҟǒpwҟC	8ҟOA
{IE'O[G<^?"|?O?@_G7O$IDO(?pO'CAҟ>?D|/6ҟIoCOM'	n'I?@ä% 'Eҟ?J|ၤ?Dҟ/LH7!<gpٔZOZ65xߙNkt
+'m^g 6W(k[\M
=<
=1},S[ZRmv۶`yVA4A2rC?|)^Xɦ?h`nf:|>K~?jp*uBDll+2zTmJh,{ZHIi'v6y[3Xn`/
TkrTv65̦\{(fS۔#@vp({ftXOQdyQ C#ԠF|GbJ3|=fW<S]`
ڑTpJMI*<(]KB HS$+ANKa9$AX0@RSOPCRy]
#]mcSg㲂]I}Ѧtν٦/9NJ?0WB	jn'g
Nݙ>WFǹaB1Uogg)2gn1Oz3mt}I43Y
OVn`fhve<pQ(@}֏kz
91KWIxB9R* M#]~~T m^U63G][MhM'+MI@2ݦeZ2]NLJ!H](!S-xPN}zMVi?,Ҿs;\SJm|]}dN6uئ8R7sX|k	)e[1ʷ.gb)vuVq1.8M0&;3w%|rCmbSfK/y<
?_>j6mt
C.">\>v{0"`r#S%Ĝx6.㐿į0bwOP xWt3GLI+Us|l4P+mC[pqF	myWA;D
P?]/1?cޑ5549@#eYa ve'
rli/aNYvbpt7E0c^!#=4HP4#:ٖѦbb#ƁO%(g2;N SW5HCP4f;d<S3R#Z46LqEA*WR8O)S*	Jbs	IMADcy}?@%_fD@0VPYmzVk5,}ih65ܮT$(GՔTC6ǔBy-ײI_)M^S65QgsٔDMM<`TC	ozTNfTRSg󠎠P.p.nv>MymjjuJ<s6tk&|Fvm\z+6x-/UB# # SmSg ¥L(7.M&ooGĦę[8+7#럀{8C66+{۷P.hϲ	Lk@9@_^E
oL=	WLƌEgipt.ʟZ1X
sWL.k0FY``=:Ǒ(muffWn&	&<mdQG.gtF KT7ҵNJM`]02VU7|=ܟ1ӏɵ;KNJ}\!ho7tw3Lp`V:H(bT79o.k)ZwR=zH9UALut
J4?v@pOӿُDpS*jL%nۼ߰)AgFDNC!1<<5tQBρi<^chc1(y#صU1Z=Nڌ8<=F1*
Q{_㏓^%',H=Թ?õ~@]gU'bJ5Ul8v!ߡ]/!ئD:^қ7@^S)' }~0虬@0oCUKPnoVa>#y6҂NC#4t&`|Jܑ%)	N(ccAZIwr1&Bh%ToJ)t2۞
dNp<2߹nf.7HP
]M4%();PT?
*p@
xhPF]3{6'Ku
S;BBXLi5tcz7(bnh=ƻX>zH@~^Qhu <!wc؏]Yj,W`
~{oSʴ6 =2;Gkf?{+Ƀ/88LmJҪMBoܨ{KщDKX}+'Qm4L&Y{1vCC(\&6@NGkN"|9

:x-b.`T%w|. ;:v_[H֝<d2Bv?-e]
xߵvɂhqլmNyi
Fc_I?{=1; 6H CP),`!pjw1p0'f,R-Hs]HSL#bJ<àvt
TѬy#R@aE<_d0 T۔oAHvƼQ\✅BNW6Û;tEISl^VBa>O᫝ahN3nN6KolQ(e۷o}X6<h>)Ђ2j=Բ{IHSImRX{@QzT'!A<.(zcDzj&zj??"T[Hc:oOS_:_OOzj;?#ԿFSWIm'czDO'u?l6BlUjuI܊R?u	6*ɕfAi~5x|UuXoJOV=LUm/O^/dUq]oA	sMTkoz7f=oRt7eeMZ^c)"8>hn33w,5'5g|RX|'ZJdpA:
+Sth)"t>E)JܵzﰒC@zs?CMπ?D{)/BhPj`PעhappaZ%$-0D?g0㫳(EkEͽgsnpZ
lf؆ Z7S =YIqUHQlGB>o~#"]})X
32SG1y0iOq2F'#gd݈tvApZ#@ZpWin՟zzV)qFZi}[lI^evZDl/1:h9R|Ʀ8qw?%',!|2Yb)pu/?>TzH#s#N3..3?
SlO,X/A(j`V"
T LWBW\>lsP*lS8-cV@Iɗ1rW&-M6`\Yi,3{AT3v]!Wq7U`!SՆ-k*D	-_㪋C+dh'HIYJRv%ƀ+f꺱LܓQ5R^?v~\)Lo=⁋
78i2lk}{̶]	=`Auhf\;ΘS4q
^4sf8kIAɿUUrpFsWHL	=.ZfjTe+4-Lu==w
Ec`V(Ab~')};@9CT,uu^
(.t^sc	K
by273h~t[W^UW?{h^37ܵJ_3)w1:nhXF寫[~{U['e9I0}H
w/J8WYD֘[J{H(uV媼^RrԓThlο!=Nt
/sR][p.(lM]71 (K#aj;
b$S/AbNm0g+[MNK{'oBDq>7Źahh"+B5|#@1sRY}Qr1?;K_PWQ?B'G]!b"cݕM*ړ{TL=fv ˺h~
I_nْոo{X[zб=ͦz%I?Չ- &5AWBhU~q4`fahW_'kae1*^Sc{#

1i	B9BښｆQB{5?ֱ
lb%(`CsϦgC&fJ/lWio/hxϛ#3~lҮzDkûA&vAnBk dof!oHwoc%cj:nznj@:pͷoT[=Э!ܰ>vDV˚.lԶ쇚8TmVBms9~B`D y,WAYwa>oAIM*_p&s 4miWAKf4h,+>-ܡ ;yl
(HkE9
\KU'ZOGo#@:U
-CVC)]R#KPXb1"ΛS𝸅<_-BMXi*%%dq8Sd:1v3#ɣY<ɖ=1Z;½xsX
/|Ρ}XEXmrBK~to^xLFd6uv
{b)L /rw}ԧ!m]2Y"IoJqJ}hS겙*,Q;+t^3ݾ隞-}ӫtܢ'LO]xz:ntJ~;&W
oEhDCʾD"VjGdMaPFb/>Q Jv{a^ŉ/@WB:ڦd=r޶f1?q887rZ3}$y,_P4D%D2g #i~)Drn4)Krz||D>8ga/g7f o&D][o{i?(e֘wk2GJaretqu,WLbwm~RgOIvZ4]ٺ͆n!t= `׫! Z۱nYv(ga0zwN΍;9!ĒI?](==8l4A	1PICq௟߇ly&|-")q_[
_c;Zg#qc2r{j]g=~[;Ԥ2D'ZM'I^2C2Ϸlʔ2RaSQlj+#D#IFTZk/bR,w<h+La8eW9_aEܺ6$'K![K'bl0=OvuxG)&}q!&,ؽS'
	Q䘴qƤ!?w*1@;\};)IAvc`|FZҚcAUvȆn.aץu;S#B<Z}>jh=f%U@#( nGضٶ=¶ա}ۗh}v'nGTپh -8}[ڤg8\MC0z[֟|0Ԯ_Bek#%;7bLb  zv_$JQ^^XO\~<'FM"SA,>њ,BucBrX(oM}e.>ヮ9;@z~wFo܉NGzoY5$Ʋ)5ʹq̈fSRإwӆ:{vC+z?on?O1|M3c)SmSͧ%ؔUPȸ1)=q:R/d)$yK4
pQ5|:9$Ibv"JmP.ٶUضb|-/c؂?ڈ]pǜi؂+i29[
(?;\<}AWCF='n0V3op|yez. :̕)OpOm5"[?-s'E
fqnD-DfSC9ܮ&mGxmm,Y%vT?%Ħgĉw!1ۡP	g^\{)IΞCB,/QlĆߨp#j[
S1X
77ěKp<Pg/X+]\uV7ڐC۩FgЊ`6i9˫a$MqYt,؉K(A
զ;jŹ+<R[0FɕRi6<Al"*l>7$mOmjKoUF/x'jWB-
<@j/Z+؎'jAӿ"eB^I2ZSBS{S&=4W`<|S[$NiEV-r>qfyAIMml=Jۈ(^DvoWG[nyex
DˡcL-$Sq.	Zr9VYzo֩#5b]oQ*yꊨ~DM'-ɿ/W^0ۿO+[wp2jqDB	%,6Kt]gڍkf~/!BFvb+B)pK$bK>b".3+w{,Zk⛋kp3Xx8Cvtѻ3juVp|f=#!vlAQP*<ϗ+|<08-^4s(
Qj|{z0k8&N5VgHj
2
Z"jo*kޜEqMOWR/vv\S2N$\.aUMG2fO'&ח!bX
Bl3lqi
=p]Iiϱv_9'X(v٭8AC:7f|(pwwK%iw&d*iҴ?oniVE{ǭ>ml[]%6P6p= P>`\p)R<[1^sTh)`caf4v1\Ln{mck`õz&_@+%ngO(L-=o	rcxl9'j\eN鈏<[,pa\P꺅>ED#uUE=ԎzOj=uǺZH]'K=?;E\v\}COb YU[@]pXUzzVKxVQmכZkd/	*)5m߮AK~DZxE
L$%c<-)62e_2"c]a>3n66s6;﨡Nlѧb
n! V|&hŻZ#G/:yDϋ]g|^_yHϋk?2?#1ߢPVxLٍa*=Gx "
j<gL._!;MT؃-[<m6
rwaj+~,Âe>b	/~3X>fSXzt.*r
Y
)5*5#HRvu7#BFB>?4}`,|`Egn,0mert`rZw$@R9BGÕT=LېE
נw5)"	dk7?%M&pp8}{?+or^Z =kTqag+O'A^ŭ9?CٖY,%*PR"Ĉn'R<!)%fڏ!~e>+$T؜svSx#RgGFl&&eH1;#mhu#qͳW'M)K P(iR1"N5W얍+?A̟lU"=ZZJf\GVRʴO)eXEg!qko .i=	~=r53>gӂ\HR3ی\:Ӹ
"kɥtsH) ~>U V-lvƔ&9^Oy/5W|/9rў?5T#̞mK=P:֧ۓlJRCIp(Iy[j̦T\.5
iD#ϵi&0~0%䍡3?;>2\QvGxP?o|S؏qR\=:W&

*K0CU5KkGW&D^gO.C}W@iIO
doۑ}>ATj>Ϭv>V}&yonIvJLvFw2wkH(ڨ[ӿ-Q[]UL_?֨#?2%G0#J_#u?`GOHQLo%ӿ
Q+
]L6+_oc꿚oP+Fgf#*}Z}k]%b6SIXƞJL)K# 8
riU94Ml0wWe}ʏq	@2ұH 25հY)YhSWA^ABs~&{; =Vӫl+	a]gv)*!bǋS{ZKd6=ZaG@O%;ZabV";(
O^Z	;L_AvvxfE}Vw<5W)&4GB ?Еhe-g'}6/7g
pi+}$BԹe}g>c}:܏?1Wd0꿙oPeo/c`#ܻ[տ2]eoonԟD/|G7F23unA~o.ӿo_0꿉	_AGRRQRRG+8e	GԹw[o_/??\;Oh8;`DHS
=Ԍtt-]Q	P
DҲ>O_}	ULȵ^&v>MIY>Û\}Қ} e(3.)KьΆ*p1nN?65gO)=/LD)f,tpYȽA^s</)+wڷ>M}ByCyj_&7e_nakSÒ}ԐRLf|AÝ~j	ل-n<-n[l+_O8?ZRJy9liMc9`WKv]lC,j#z̡"Mv:ǰGȹmϒNax".YKDH5a]6Tz	j$ɑ7(y\Ƭn3ݪ^Csca[FR.Eq?пQOS_mD&3RhmA8W\y$?_hԿ꿐߈鏨uoo͍t2/dտ?64UGm=!thC!ԷH޺Srru{`
^DVoŶ@B.
EX{6`7?!?Zb4ɣDpadpaKoW@Nf?*d#6Yt?;QkQ*զ/1+2νy/#L%:4`>&̀BN7"ȋ>39Ld0ar`K?s7
}wCHdff<ǝP>Yc_IM1pOeN2JgQ;97ic^ No%⃊&jp^$c*_B
WגZj81N{%{~=`Oj%ȞPI
'sX(+|#^G*5>p?GJ]LJ^?Vo֒ZЍ*sb$kP3<\Rr	];ʊXXiي'VAg2vCˎ
15$, wF":"2`3"eCO94__Rag<Iu~$Dnޕ̵
xkd.}QW`<[q7k/8CsJ&=^7)K%}cw.phsHAjj7=ȟCooN=62Xb(NDh1DÙm>/j;׿__xjklef_6Q/5~w7BĕxH"C1}kL}#WE}~G,)Hߏ頴وe&>m9b2ˏ1rHԨꝫHV|
TU(6fYE."=ҹիHs$ڳw+"6CӞe}ɕבB=? |-i<4[ҷUAHVZBmBTLYe^}
}I
}"ךRe2kdDgWXQLU?^7կWu_g_N};vv6bDn4(CX)0.gp)ǵGishxj\{Cb-?{L4ę+&ym>Y*
~g!Dc6ť﵂[(?Vb
^FeWn=uMw1wE@ʏY./\p)٦~+t?LՐ)ʷ┐{gәu t2fn׮X>b/xR|+O{db/vax02}Ll_fM02K%[
M[zٹ##kxuŌQ bf.p/8r+MWy؎$(ro\	;K'q1!P!Izt3,x.sYY!PC/<^|uI:O.zqs`QVZk'DޖYJK{y9xh9H4Xyk`aPX K|uUw.<lP<Ly</2oqaZ.mlc. ­7i5H0<ʸ1͉o^]&~ymO6cjC2KguS|}.}z]Ξ#^sH]"˨7s9DbƽSku`mh73kv-/Η|Ɍ/M+d|	:/
H&`]4I1MцnU
gI'C]5 &gy"[JyRȿ&E~hz/	f}}w,XRER~=7EJn"F]<1
E}΋RB}po.wx;-: Ig-/;[_<;YݰXc]y'Hzo!
S/$*lY=&
W/dWĶڔ, D2q1\K0鈷'43 tv7(8kmI?-HpJ ҆3/'рd'ID҅T.zI"$
k)Y^
֡r$ǮaXR]JZP?0T3PK&Cgbza<U)1<7)2:ÉJe McJ77U.vM3:Kj[pbQ-{pZTNoTOkCzC
|*%ؔmڱ'~#B=ZKe
uk&ZP'+51NoL}pS<nv7#S<ObߪURu.GcL7C@q?j;y)I3%dvx.6!B:wWv[Qٓm:e2I̧yx|9t5$g'Ǔ5Ҝ@gPHK/E'9>PD(ܥ
דRTu}fcp-Avk!5.|kѡTxb">*#[rX
K?mL)
Eõn2ɾgq{xfLNz2ϓ٣MG7ݹ类VPz3z0<Q
iV3kmڇNCȶ?4A<J2ur}>u3'vY0%VM~>zv+M;%MS%QEjꓵl=0zN|B)g69^fN~{B27Rojyp޵[O)^[MN=yN꿢^xuv]5iKSa?##z46ZKr]*$piA8=_^+OBj[ۮsKi]%=4_~_O(kA<GϻU~avdX7 }o{
)ׄAЌd~ӵDoaM${=M$jXcOo˞ ؃udWy(OgOOz?a`kmdn)[LtvmľVb.{`_oJ{>[fQbU=Hߨj^.u?8{>}~Y\~`o.;$w
u$P}i]OpvξUf[b\}|Ovݩ.&v0IZ2# 6=#d-eSݴN)ͅ5B)>e[K)yȡiO$
#['ҽ,l4);c_kͳOt.)O]Kɑt$ݩߍ}IΥDHB%>QJ~E3'tHه	nӥ$ݑ߼-벗J7ҥ7t%~o\"K$b$iu[Hɣtv$ݱF<忩nsM+lT}\HHwK@H^/_t"#%U]]R(]IʯF&J7a!]]GdnlX=\J.i(sQc^u_zKDCR?x~H6*&(Sr\#5v1!w(6AZ'Γ-$xLlp%'bN|L|@&{
YG%⃳$: xs#A"ݫLa"D$Ǫe<(>v"\0|R)pgX3LRn=6WbX&F:CcAfxR0ܨ3P)ilXA	G$r&AN<\&JnHl9ۥ9#LsEE
"iKn	&<B}i
t/BӇ'
W.3A<G'Hė#ސ
u䜳	u3圭ķ9[+q:_9eH9^$?#{s7˞%^ęrirMW!8Fy3}g!rar
:I9s twI94S"'E=ݿP(9_L,
xHhfIOuegKA8V')os'N|E|+L|B&/wġ2^8]O҉~]q >L?ge""lء5\Lǽw|_47B3VΔ-%gӢT6Zx2>InS<TׁsaĸY7XHP4qWЮ,"G<~
dWtU?xy"3MMwU+7jE.&|
iS u?*A9C0zVB{ztoc+|O{[S/}ޟ`>U/w~5v	=ݯ>}gOgs1v&gnvup9>oW~;Woߏ!+sv
ײx_7
hgTvovg܏a
??ב/_ut{
/[xa>%r<#}"GO￱E@Wl~w-NKqV̀*hs-.eN
OG%IK寸+nHw/2uCQ=ɞ&ZʞRξ82KL^q$ 'nT4NOuqzu=L
l^۴C|unƧ?Nk."RDKC9'bU1-PtW>	N)!JؙMI,;`Ѡd4̖]j۶vFklf{2fW&6m6Pk@RSlpm|7%Y+f7Cfp;Th5wCݮ&eۜ{sgǫ!
^M9_ՐOvgIĞy!~q)mP+9[JKldQVQLInkZɞvj2 jb2>,M;cZ0% fi_rtc0-oӄˎdgxXZt&<-WV%fOj4hj
ft,1fCHs~O-`,qN
Dr,9K|
OCx`q|AmeP#gYOnŃ?PM|
r&jwv!JJkxLCeѱv}CcM#<W*ͽnkȘ0y
Q@бFx塑7M#H6|+FTƲB2
&e|;R$~MRvm}Ԯ>_mu9oP8<꧴Nra)hWMX
飄|R)	zv`j=!A!	 V-͔h3uX~<=la)TOyp
?^1cr8$E+qYҪ6E-@dظҕ#M$T{N`|f&MfU4W'Q88ZU(]Lz\^,A%uh6+L}r"(ޮNUB5uvlErPnE'M5:ʮuӿDi袣 1a-BTrjGG_%$oGe.tns~f&oEO[C#3ع^'ZaEdbqIۗ/{7ð+{̿=Zr%htNp 1nTq4+#NŐ̟RTdӧٺS|*m'>>jsͥOrӔR!
on9+	qST!5
=ƹw;3EIY7
i"<o	㷜XǓJ'0t>|e{ ==\ "
jP<(8_VKjbMQ2J$TB	ڶ47
Z(e%$%axĭ&CWj_#Y&%aj@s+8+t,VnE(5sQ"r8	8I,V=<Eچ
56Tq{^^CkIƪb/Smͤd4e$dHjFu,}hy&% L)B65
}nfsP	rr64u^[-tA|K"9 C(mdNfFcJgи?kStM^"&(dBCzbb3 OWl+梏yd6VPӴ* 	|B>[`y>MqIICf?KPlSCkPSxv;_7sxn:K͗QR2`!WƬPoe!@ DoD^`'X+a<3|&*bc3ŦI>NlʔzT]FZN)3>?=i}LKiC,ZN[#ō_5=jBGS3N_t΄G,Xv:`!誵)0D!ĞP$aMSdbO+Լ22x{fz:0
cuwPkrFF1"`r#y)~7$i+dW
frmZBZS]0,YvxKg(q6q4Dl+e<{ʄ%_Ɇa+i&ڪRt3~ȞR0Wx*%GC,>};AMmrZIG;\-߫m8ͦF@ŭ$[ur(g2yO	fF1sC
fx&5 )}%b*۰ZՖϋi O}yWq)V3r?5օ(lENDĜ
䗶Ƈa.Y8pS^_B]\q\^
o{jJFPUPve{zVPpCHcaf^bՔPBlNAUw+:QcVBNMZU
hmIGI<͒GmJݘf`WLL)%چ!zN<L\}ioj
}𬥹WCk~ozq;6ԾR&Pk/@9[{Nc]ѤIZOUAVRڔ>NJojiڦ
RHCcgqQDGVt0>J[{-~~wY{k>L
Wé.m
tOhq~[qƂ]^kPRg[ƯIY{'t9ގ1~0g!?{02u0U`ڼϒ[6NQx5 Jd.DJZVWע⻁ig^	7u[n,5Ԋ~Pi

k?#q(CIExV3vj'rlo]q1e ,^G]ky2Ia:}A>j#ouz>ۼG5isv+X/9m/lHd_@5z2__:" %%Bwϴk^w 
@[8}2{3ٶer#_9]Ls9w@+LsTqZSK示oGlj[Cɰvs6J%NוM{vy+|Y6qkvU
<ۗtl)|O.mm-7"wC/mlT|5M슐
r+L+޲2 ,e!Z%l~Hk:?NXkJ68e$>R)9/_mdjh1}Y:B챌"%AM#٩yx5 _yXz8oӿ|y9'Ju,4T+OWMuՍEI>ީYP D|,ƵQq\N'R}9Y)'ExjFY|߿| ϧ,r^XZr*GƆֵa雛bTv2)6M5 ꌽn%u{]BILor9ݙ2jOx{]%f	H!
-H`5wGhq5~VZgW~j̫Jk
Ks."/!s0	<+X$}E0OWޑ=½6/Ω,^PJg5NآkO\wX sȿM~ۭ0Waȕ癘<r:ɰ{gpYo\08D@2b_aO&籴CꓐXB÷}%JIȽlJ*M˘Jg\c0/ZaeM)
Af
peъhK
$In㷁n-=odnJr{i2=kyu*_BG|-2g^lvEE>RWؓrkٽʼ1RݟP'2F{,í̺!#%kLiate~=QUp)1(6JiMrR:yQí0?|Ud!}4)&w/i
"8#q믡x=Yuǘʸ#=aMJہB5z/q	,IB'O.T\Pok#"tCشǖ&LA	x2DVEu
&ܭ1>1:7NU9`970C'gFދ"M8هHQ#?V)k$"-('Pfng:Me[?bbg_Z܄5_6Jޗ&:mqFOv7I2%?IlɲYe#gdMg~GQlg{=zߑϲnzh R1ͻ0?;
,$Nu%@
G(܂jސI?9EţOXERmGfz[y>
\W-`+-\͟Ub&mO᧛2
. {]MjN'վqxO&Kei'}QXbllQ[UutGuKb#-؏Z7nb:z;6=ݑ5#4PdI=?m
qmT 8{}Yڊ|fx
sL;_V&I6H!w/Y ^UmTg:WX5HCW*/k;t ;JHP&Yc>S$kx_֣tE$_-(-:cE:;()\i^'Ϻ
ceo_V,R8![,"FɔSx_S1;xyX)ٖqЗ2w͖(
5(/i<7IoZpb}.IncIL):}S8e!
r|Vݭ{zN_RHlAc-&loʖ)c<C͟aҏ{4y"`~;5r}F2-ف\i!(-ۈ^i\T\#Y2V1M/͍b)7:\RFۚf<r&?acأw[ӻ黉NVY?Ͱ6yW
!u|(cj>rZ|#mOke~NUο
gu9T>pJ߅Z=ܤ;hrgg۰[EνA'!s#jYAnZ˪D9I/.|mT/Wʼ=WU}d+s#ə531-m
>(WǼ]rY^<qbʮ;k]%ְaMc~cx~W|_hhvĮg3B6iY]Jhi#4?$$bpMY/ Dps1/q?7:B<<:'Y6~)g|AaXdGw燍ͯp]
=F!͖1iXJ},я	7Ht}pL$q;Hǈw.K!CzEߪʗlx-Lέ
∰2`eqQ|
$@qK@z:*iusS.%@tV ի&)G+Hu0بi
e>K09JeqhZJQbr6%?pf>J]9v;& _qP̆ћu˿ꎓjj9 #Z;L˴<N8q)G7vy}M'NbEn4JCi',o@%,mmK7Mڜ!-N`x0cTrwC$''gnB2,a`N1M#or0oP'q2zN
a-z}#(lDyg*Q8<!SsEJ)c?焋E׻Tcȵ׌Bz7lk41q3#c<(o8`
j6~y[v76fx|'0	ڼ_gp)fna?䝰~~e\~wsl7/vP? gSq-flgGLiKŞAY:mw~v&/٨@e_.o߳ >Ncٗ!;j*;'s0`fF
i.lΣ>T؜Ϻ|3_L=żD~XhG-߽D_wKn7d&;W6i;[7K]feЄ[ڂ
|Բ<B4Oqxw7iC3ITFbI!+m/w'_$秓wrl0'/)t I0..ߨtjRX`aoo	f8s#N*a,"Ӳno.8 3~T6 <*g~*--;e(;m5Cd1.+PH*くuI<4Bod~Qo|3T7LLae!՝b񬬮aEYcfiSYwH͈©<T։N[WOo!Oe}f]Y͋Nnra_ɌKSm#oޅ~;5e|.R#>#l3ם6)8ڹ{ꗴa|7Y>[EẃU\T(-8J"M*2:uǘ,Jg.1e43-K{cU	7E쐥Ec: r}3mlns斪 gʙ?/Ƽy iNM)2*\hWh4f?
cha_&k.s鳼=
_Z]v$tIfyVrq^8pq9fI׍'Vkؐ¿Q7Q'$}w!p'Ia:VZ8q81GIZh"+8fcryMDq;,{cS4Z	.`=61v2BR!T
@Ϝnc)o[SHa6i:RƨĄ5O1<Se
^MTV0KTɔy3E&ֶPB2cCЏFPwn&B?Ю;CaӔ˝AZMT&#/|r<ri(߬clnM6('=A{
TV΢ͪgQ[ؼ5lI߬%IոmC@Jkq)~?׀I 3h6l'5yxSbJ>o,ש,t~TOM6B|B7s%I|[pIr[sOJOH	
hg--d;6#mwA2IoɤRݲH}Q>i!E
~k-b):	@T3qh"+g8a4 6BAĐI,"l~>Otdr~刜72g6{"DV~1 W6lEm29qf
F=kFML<Jں3,Y4=Ri-I?xzV|MB׷}_'
-E֑6SCq^@=~=
TRKYfv#8d;ʭw)Ny'2G

vJb8=_u 8LfYAY]fFl7P0L
n;·"Sk]%b`F2AC7des;.RBJX̩D[=L/g8=aBou+#z0	,)1& WZlP6WZwcA-/rOHn5BW͹6̚2e%,b4z>"~?fn6
w%FvȾ9VUلeK_;6:,>̻[gNBTpތ
ܩެ?@HuO1FZ3ٲ9.I`UU,#DD5Xkrݴ,yHGu?͘Wu*HgoȾM4ӎAxi9?u)/RNeW`浤-o~xq)7oRfS;oϊ|%<K^J:ϽuC|ӢA3;2[+۲wCELl(B¦hin-H.!v2 %g;.5C(eJj{2V6CAfBgsK&ϭx=Fe\KؐN>@>m==Ξ4kQ_x_+pHE
T%.YDx)Qx:,:<p)Jw~'-A,NTw-52w"Xp 9Lb'Kiqi'_Nڧ3$ս(Zw~'
&gtaCLieT~Jfo2XL.xԲ9Vq,Z-)gL˖7h6<'*/8)+3gjLnDojH
mF{7 oɩ|.oh39kW>rи7V၇Mtv`M>s_y5%p~ݎ\aϣH3F
<JޅLK`8Nf1IW99Ss.>Qˣdޅl-KS+Q?'Ȱȶf1-pp(;[MJ/s㛕lP}ɖי,yI*2`x򍰑׬O	.J'&fN		&WlKp?G:|}[`t2:I|UhQO&J%?(`M8FN0V%F, #:`ˀ(&i|7R=eo*6ogiYx<c{ZIt
fƳdNAn\yɧS' 
	mϰ.zߕO{i褻
; ?zǤElZ.'$*x'bu~ 9I[6ܒ	(멮v܍
nskJ+O~hTkxT:ϱܝq"f|f|[KeDEre'y-4F&mϤ	0PkdtFo ialZ-Ĥ4R\C$(`?VT̪g!t˾:t1KRH!:t&Ie!N4 &D&cR:-Oq;b_;gy`<.ފ'ʭoGrSУ,/;6GǙEC<OqyRΫI.㹊e4a!<v1/MA/:h_.'=l⤺
x,iۙMiͤ$*6ĐX{Uf9`s]@c.gZ9OY{W/`ۍ5̰!3qV{ZAMe|K2\!KczmlgG~O]ܓLZA.sbx<;"XZbS5f]_N[vKo2<qrf,1M2ywKu,k!/7ҧ˒}YeP41Nmu6!0n>JpeR7N>R'c8jn	WɎxcO8/'ҹkJ!'5W5Nqw~'Xkst\*4,p)/PUb]&;C\HD
a^[Ƅå&p4H&
X;UupyD >η~Jc9dRњs1ORnH\	J$3k.<с-O&aHq RlK`~*Ni9)[s%B9(]z?g2U(,?v:aNvt}9X'\-t\p)Ҟ !p-JS؜ۛ[o?Qvz)R;O3цy0+\u43nXUJ&У
ҙ`KɱH=}˸x2[L=zxلX_d}fKFS̩ީNgADlKɇ\Ι(8ϗuq
%mV\ ?3nQ>ڣ

8!q-|D+n0
>
ebc.I\A2oIe*켼eÕ~:oXMo"`dc~@q*4Q+'MJFisz![9x`KigR?\9]8g tT*+ei@e	>TMiuBF?3U35-[6$Gq]ĲaKi<!"l| [6L`.E؜
ܩ!{KŖ
>'ѝvt([pm#'Jugk%u#=܍{IZ!:#L?~h
fTX/mI.B9ih2'5YFSdsno=!o˶l?0{
s	}-9^'a;RewtD佄Jѝ7u&~eFos*;6:F}QsD+IuER7;șW!rz,ֲyV7lj	;7{9v	l#]ץ#{}n]E
ͬWhߡ7֥yKwI[.͗`k١Kb,4L]0N<߈TȆT6e78?9i8ʻ9Sl}B-CRψ<z?Si?~L}41$o^o]jjMո[&9*mN\˨ )dPx1&Eppr؛zR2 	ąQmA6[ymO(&h:](tzܟRFdG`%|=^E~m6>׳e˚Ef>E9I.n|Bii2{M8Υ;ѳl|C͏j&kn#e<F#霅H헴%x6;q[0ɓ?;eGG_!#8/LBԡL	1n&c;QQ|ǕvTG3ff=NבasXGbjƹӐ]~ui>md]Oոw}Ȭ5
R15yl˸ƩizAV:֭
Cݜ]PV*1WA4O OkXhnS,Ґ)\Z(*m^-&
;HUU9NҺK u+]dG$1{}Dh	.aneS+bI
ַK}2
[CLlU%jo3ЯqIx G}~wMB+uH7d5R,>H+[]\K1Tw56,8(kw=%
6SJ
t829&otċؘ|'r6{ t1^s.`"^?-sJEh.5Ż츪fpnf,ڬ. 
 
YgBhu+4,BwDs5bc:92BEEh+wm3k{xe=
/C]Q=<?}s잻12[D&0tʳase\fڅA|Ryh*N%8R1"H%
U+Y@EOD
nrdmA!~gk+_="B;he@M[ xQga)cPtD9@??^@xݡ;?ZN|ώy{iln~2$߁0@a|/oi|y>{n|vIj .ȒDw>3a?~Z%]sƛ"26EwD?o:k.8b=O,yŋ'&%6KaٟhCK}vO\){;ҢllwZEW0pgh9I9id۹-_ncG(xvEa.ts,[XJmݶQdo]Z3.I_HYx?MG۷UZh3_i	4_D6^:Hz`t);
.%ٹLR702;>Svcu5` Fq졛xqTOS_VFiQ#{r@:7db {N\Kxg^?fb*[8Q^6.hە^pҩ9*֝'-xL5LG9K1*]po
en}˼JCkczM&vXm-W[e>rsnvvO֧qw_;uk+3*y7X]UsGkpsl<qTWBbͱ&n|3`ֻXwB&F-[@h68\_\ewqRu*ѻMk;x/m7툭ySKzaGf^P9]۰9\F!xdHQd;c餳|4glAgG8/ÄCCMT̍U)y$/AZIw<\6Rk2}=vtĂˍʫ'ˡt8ce'}g^t';}wY2ämq1|z8{ƥԮc4sv Wv~R0>*\&e:@@P5	6oKyv+ӫRv*"mv*`<|a2;\>DQ1@;<\[j[m/jMyoxۭңRٻt39]dB>.4<6
J()MkT>V"߼%./d^-5[{޿B&de}$Gz6	gqش.`m3ҝSi4nyl:\֤pr+sф.I@u)\'#_?>kxg*MG&wbk%yKeN%iEbѷX3YpΒ&~JUD8[:(Y̖0wK"/ ?Aʊ(LoH`QN;~#>ɿ*&(MNQ},*,lN>FNBZ-*
ywajA95<jw~7w?ɿ*&15cd|Sm\H_<3SelI7~W <Diqx5־okq(d4)R&uHlTog]5`Do6$
ޠ^쿫Q=
صVʇ߽R©|_&+w5eI_3B6Ư0+zН_KQe_2OG59~fSrk#4IwnH̰^>ׇ}a}x1Cz%B`}Y<x,})w:o|èxRLq1AEq\(ct(?{\G+t#i}z' h"4wxnrA=l*QAwfv{e|?
ch:k<,Lbゟkyx&oIZ|i;H!F`b:}W|ਚ-.7̔?1yi7m~#G;}/XjO}C/F
㩿?_'ƅgNa1Fʷq ]>-\!ǛV^L; 
E
wt0~D. o#Ak _S/:0Ï ̶j RFZIdmVR}!׽C黔m5ԔdArz
-Sd )`ϳ< )Rc?vfm&ߕW2pf[7K1Ղ^:rjAn1LM
}XIl5c?D
/5_URzq	:c8?LMfh{I\36*IA:Cԕ9A/V?i{bfAwBmU2TȀ2ʖs^.T?%^0OvMo1߮:T_#+PoR/a7hg>e.B	OQG%mO4%镾mәif*S9y@9N$oIQ
MHK6nԂzרO~u`MA[:b`x~)[?%82%\гdFYɊaۙyשtъ*7&}9v0[H%{n?6ฝN&Bi=.Jkwi10ڟ;f_h# k*@Io;xR{I
.2{o;m5 7GY4wHc7Ciߖ9t-̦1E{d~_rͿF6;P.>bR&MIǯ+%R{gdNIZNJJy#i)0dœKAOR]J.}hޕ=hG'IKSWNVn[qH'o;pE't}!]8Ŋs#/VC9K3wrni_~ D?78bہ;đr!=#C'b&}X]Js0
?M>_f[=X!)y?D_aJ_]4%Mˊňlrav*yHEM+Hf
[zP*Nc[l!"۽R	&`˟Mf4-=F2`@鑹ٓ%m} 66k;f|Jq)k m
T3峎on9dz3S6.EZUzȾnnn!uR<yEk^fSeD054K˚̦3 g`zj䊷=Qzpm1s=7ξ&]-l]wƟ$ճ?`2w۲})اдÒ;T_}+bpp#i]#t\Cir	TR:*Mk.$D(!6DsO?O#k|4<B4Hi67Ş+aoi-~f6০?\_ d[{<d<wH>m,ic~]uҎ'Uڊ0>~x?_mm\mhNIrKQRKJay8q2@vvun4b;E<R{0ړjwl|)VZ7c}6"᳕RR[!去8$gwP6J߭ffϲrҩHH9$q)VܹR.:?tHXޙd]~}?uI!uAװU;ߥɩn: 40D'K`|Nz Mm}ˠ'-CPG{u,e
(kph#Na4g`-d
[iiMh?LtƤBiJ'!OnP;.E)E.?&r/9$,w31z9v_$3-oD;}׌HjC[7q8v>7NW8q}Dqo<bd3}V3xSa඗UTKfTTTڧOQJ_]Wgάz ܌%ŞR;♥3-.^qoKK<H~oii}jqսSK%3f tJrT̘b/اByJ©N/J/,U<cF 4)UZ^QnOwޓȽǑL|~[<SuSg8uޜJˣOSUS⡶RZ6|:OYk*KVUUT]mw[Q^n^~V?}z"KWW1GjRMTj*ձT<TW?,+JwYJΔV~9;ѺGB},ϔ/\5UѕU,p
ke,PiPbO.4H8ݜ2MWmYSSۧL"GL+F+ϜΚ*AX\UUǈP+O/.&ˍͯHbj9+xWI@IkkʯmyjOyr}y֧	R)E#XZu)h:(FafBȃ*{JUq:x* -=SLnSgTVUN(-^$FV&~5xgz	3b
8TU<C*w!F3qm]\	94t9q*Kj;O/lJ/څn/,`wc9y]/0lWu\YiUuxDg@5Jsv_ֳn:j;㬸#$ϥN'I/ݎp2]0CzlNb gmd:lR<ۘ{vtg567^F$ߣ5٧p<(	3jΖ?F"bԐc49`*h6gVtCIJ?</ɔZr04^bvOTZN+~My	5?bDH=r
2+ſ]l=_uӀ*j*4?u/8Q%@ӻsh:H9ѥSKHwӯHID&qvhY/=v,+I)+~f]DFZ*+g3(7]n[",R`bSr\ff}FEj*텎~^CTاT&ꚪ22awpQQӫ2byݛ9tק_W\R2e!%C\2xuSdX(^1r3w沪:]^Q	-ٞҭJ\K:4ȣ$#b%j<Lᶨ
ZSE%<{]V(ha3pyXI|JS6T=3
^%xø
3/BR٫aW^a3squYTxaqtT} ?;uJeGzL76M0
lG&~֩m(Tx?4eMЧ

:Uy1D9"umb@jsX7Mhy'DPjaa!BYa3Ϫ>PA1̨(:CP|/g  =0=tӫYh֡Jފ
Ϡ*z`Peg&[<3CZbv{
J= I60޳|օ"jFMȰW(`%] jAktNgaJf.`lXB
*^1gh܈iUѸ0D#(+Oe}ǲR|>SGxy*x=RtItMRC V#= B#Br**f3g.r@Vr9}?="2rFdĚP	=*aA]yE]=F e|CQ1KD -4{0K
b~tY]SnAӹ?<*.5Ebӑ%+VTU<zA<T햷xҳqDut EhCh FEa
Aoh!z0DIpsOt'ku?GJ&L-2R21TdbhĐ]$//7fiCh-*b
H0
#gѣ8r&4щ;rvF8Ft"Ѐ®vm䤈cO>n7A%{iZ+F3PHlREs9r֋>ʹʪ{J&k:mo}oU}׃]@nuWaUK:WUN\[HӅ'99劊'O/R#Uu)q}<@U:r!+	@dU|Ew}s>5 a_D77EULUr]qgs K'뙋Ž,g7tWw#θktQaߜEWܵПU\fi+ۑqR\95_؍H3RƗL"=0֡ca=#< ݃#GJLrEGƗ:lKInkm	{J_M=kĮ.WV貸IХ?{/%?՞*_CSKՈqݠNk5|c(~^npTwYAi=}:ԺaKtOhK1ؘR:'%^&nS׭3qO^{:?4OȢpV]+毃vw}Z)QL<. UWUy0YTM
]cJ$|Zc/1&vwBr
'ўzA۹2sz쮹5#5E]s`nxXUu7p͘wvWǥks
ϧqqQT#==t}IE]시Ё\ľBch:z[?!h61g:Cx|1!h=Cx\=CBȟ˙C;!ǹrc*3pYVOiG'UQ{;K'ՆGU|ܩ^8W%O-4oB?D5#UOw-Zzp" ᇼƕk"Tˇw8MzKܯ cO`_|K". NtQgjh4}~j kvt6G
w
0>44`8$n@NѓhTo NvoD~
H,ohSepW<BeTht kT 6 Qe 6ڂj%Wp5{Cg#`
`P`-\
lp?uV!<`
:pMg1FUބ>i4C8 Ʃ@|Jt(FP[ eW
DGKXK8p`p	`+#~1l4@l C8 eaK5-A W `*/Z7j(WT5՘^ 8
Zkt/N0v"P~Qzg
~٨(F`P3`m&+ʛT>uh8l)~32zz VB} FM>Ym'G>逓sk'z,UuESa3`*`$Jؔ	
 U!^2^jQ -#XG?G.^ ll a]z6B/,`%hYG|@ۣ`Dhx|9UHAGܪ6 _nL/`6A"@+[%qU"f.\
h\x67Հ׽qp#`-``7퀶%|Lslݍ͝j#MI.z϶n`ؕק\'{^Hu'#*8Ƕ(016g)kǯj?T/h#@Qߒ4GA;#>1ӣfRK1	.pc;bk4Fa24&Bq%DeO?o[jZbܔ_nB'ҩn#GM~R76F!zGoNKmh׫f29ah?Tm^bLm,EE1ޢ?PN6r䳂L$ꑽm2yxirI.hwT/_g-x͈ssI
 Q.y1:v;MGo7N紹 -o"DdD54͜x`]
M^7dݠEc(4cg g
B7J76 78Li8cX<X
Ў
i6|_R}ׁ.
w=h
CPAz;9^d7y'O"\Nnuȗp 'k)1;Vxשu$ptwOy.P.xW`SͬIY!wj}c->(rҥG@2";驟ߗ?21֩eo4FM^lB;&C{Ԝq1p'ئOc4<-G;cDlN~/QSai
 z:7r$/T>ELC)Qq!1."4
/;#廚NuOqf8T$go-NAbl/魉6VrA$QUQ6ƲeW%h<U: P1?PJJp |oЇDYSмÊwN~>|R8\7]G~>||8|	n̒>щc
7It7`.S/O"?X1[B wCh.Y70Do}7/Cc%9bP@oy3K͘:mS>!Sd?~vh=;#vaк@kwvs@
hpڧ	ђvm7M)#}]!hIɚrzHv_pvMhm+hDiҟh4jOgzI`[ioEqZZZLnp?⳩3wL]
qq7SR}np7z~+	
6UM{//I.-o6h.SUI2cpVZ/n{Q%IO+X_*j.Nv㳤5f4]]y,wh=2LbYGK~o7FKm
hWu<igO}ӮTkCwKJ0C>ʫsҁq7
87+tB^Mqo]4v*zVLP0/9M>0DYZ>n
zb,P&&U)I%pczF$_ӁK P>(l"nѥ3?V4u)pv-G꣦6Me/Ѧ~mGĈ~TRrȤai'CRbul[̺6A4WW;`A=OtB^/IY
ʉȌ/漥'T|r	qVORy?#|d(|d~ʙ7澘&e6gz4c
vQ&GnS%]ٹ [(v8]~-0
k爑մ7lP{CIF]_\?'T 9Iإ1t #Ñyk6E/pKS@7LUE6p6[x^.׷޿wp(D",5zcy[Y3u-6zOH~`V	2:V˽]¶
Ue/.Ÿrsۖy
'!<P~>
L6A,&eQR$p%V2y]e,-]
<pNOw
3
_ZB&'G{/g|bli8)sX28bΈktg\	u_1>4&N.w	Mb[JUFR!kByXc~EzQa'$cYst LFN7?Y8g1S̨^r ÜOL_۩&iE1
u|llP^Pa2?zߡ~.*d<WU8OGÍy;tکMyi:O7?*8.^Bk.?jVT?O%%Х(淏>	ڎѺ͸(IZΨ`8tt)::
E,f/8AF'="Kȃ{;#yWSo T}H7?j}_!M|yf$zQSz	)EUQQ
{xj$Aizc4k_US_~G
˼g_YJ	?1 BcS4ٌs]UtL!‿m !־(&FcʠdE;Q&ov19Vg.#2ZUT	LfMzKHndH5/	$|`one$t[[1 ?${mϝӘ`ث/>=Ա˵2*/1e_UZ36߯߯߯߯/>KvmڿEI[ExCT0ƨ'84͌gW>Qҿ2
= شuFqcx)DDͷS̡6
q?kka<vп&Qkk	(_o@~&:UmQЫYk~%>.o2/Oo]xT
o0_		8KE.y
Y]𨀱Y" `\$rp%~
{_+A|'X&,	\\+fw	_"
o0_		8KE.y
Y]𨀱" `\$rp%~
x7/?7<<]T^V9V
8MNH@Y@H/Y@V
lp-nIup0[.0]T	h `O߮=\0bMTᅷUTy#MW3tݠӧC
?gO^{_~HrMuC7a,׎MH94F-y4#qy;o
xCS^Ɏ
BK$>0[95%C;͐MCdw[s
nI&C?ê?wҧ"u+LЎ.pE;
bMcǥڹuHW|CV7t~K\Cvcd:?hΟ5}9_~yJЯy?F/7m.?U7l}7w1|mogmQO_!QAr.?|J,73'gnI1uIfw~o/𢿴JoECF?k<o5DmGQo\ D{.drr/z?k7<=*/'-f7!")OIA[o}(,_|kCd\}:^?t|![ST='&Oj&'i{}7oG8!<Yqݷ=+{׊|['v)M/z?D?Gfg<FZ௰v_}{GĀnA_5W{	-?Goڞc<QƋOj{>j[}wbBGmɱ5%V?DQO(iV=ݷ ߯s
|Lўy~ѱojJ-^=?=_rF{}&GE@P
QzB+Wk4}yQ1_kz˺i[=n==W(M~@T1_	|2|hR
H@,_4=ßm|KFGz(9Q*oE?jfSH65J_zRÿȟG'?[U+d_Gsqo9ݮ焝9B>D+_]MExqI&C$zHvǄYMt7%Tzgzf';=tdw0b(
HD*"9"	^r'tf05^իWޫꮩ8я?k9.}D?Gu/}sJ>A~y 9Nz7	zBy}f9>9埧㧲p{2Hr/]'Ǩ=Q_/ty~ѯ]6lWo.E4~r}▹w_(e7j֡:1Oq z^<;iq3y.{5~_@_Qdyv.g&>Ot)n5}KejOdOGߥuD4ut$G̷MH~li>#zQ٬-:;f{>HSƎKx҄|7C7!
lkW4FAjcNt<<=_U`DtّEΪBLv?nV={&yQn$N<i*yg+s
V;N⟝;cn)q}D0[>V|z^VP>ѾDw6ir^~CV;Rcpt|Yr;q@aŶ뉈2`>t6=@
u4}`vY5uVv˳;PJIV͎*Üo <ge\\8| MӖgږwMP
5^1+2G
xۭA<w	kh~~S^ V4}(ZL&=>APhaK*K-7,5	eT5>ZlP,՝r@xh#=#5x\:wӰ_r#a5Xx
B5^K8@#Cĳz^0ЪPPdC[dm8tqREH㳴b$ A~u`{G};NLǉ6a,fdؗqe<bo㐨
YIƜbP
VdḭUБ;N^c.X[z3X(4ݻrDLuu<+p_	L1iC9r&:k^\fI%a;óPv
=gx׵ܛ+5c8_~Tגx

z9|BaDsof4]\|+5"/&$$7J[TLG0JH
H	R]-Fbj^%q7)ɌrH+4pE{KeVbT=A#30<MPWӪ4f?giUvHiPw3AGUjc-ڔd4x/t¥ZR-K2YtԈfU{_kZcV43Ɔ1Q~Lq^`Da}LzVҤFFqη^/XYJ=̬]o(1|aTyGJm)_l`8=QF9N]a.ܞ	Vt	b9JnY)̍tĿpɪ4d1iX׫Ѓ̅{ӱ1#v"Um~W^WaGUqSRK+A|Dv˪#?AJpۮ[x2!.U@)h41~[禜?|Ŷ}nI>IN/n:5`~O)Lpc)n/.9=h
?s39KHq_S?2mSyDZ/K&gTJ}}$z\bϊSr$`h{;rП#`9l~O|`r*P1T[^3NGĀ?[rF|?}~ny/]Ms.`$s~IPYP)A"ӟOn	X?um@8pPK
    \               com/sun/jna/freebsd-aarch64/PK
   uX3  ( -   com/sun/jna/freebsd-aarch64/libjnidispatch.so}	|Ex͑C@$,+F@!L"x DEq7 G0.+iAce%W7%(2/#gWU=]`kիW^zuuʛodXg#"Zg`$@R(hEK8u?Zou rVVݯWr2ί>oGGg}}3r"1㿫_.UW*\IpUy~-\'z#\59p7yp6r-\Y&| WW!\#᪆i	p%ULe*k\"^W1\>^k\k\cr\ow
\[
^	Ӄ|^
׃poW
\<;\O߀kS\Zupz\6\+#Dhܿ~p
Lp0俨۽}W~!\CH'GF;n}%w_	6N:)D#&uk࿃%\rpMn.kI_k\znp=qb*+	ׯh+/翏pk6\\WUW
\TVUӵN\9pk\iM6蕑HltGDCV4[3ݕl]Ⱦ|3Vw]]Y9#|2ωC:=H5U!t;o7W3xYVd>ϩt,;3x5cnnNg~GrnN9L8+
yhQq_6q.7i7K'pI*OEwǹXz#ǟމ]|?H	U>Gj]5W>`~KePz3C~</~iz;)âY<хwza.*$;'<9NfiUv^z.L}|r<><srh^>t{\zL^=ҹy_udi<?li\\T{n8s9L`7^MXCzR9j?V}ɗT}ҧ8<pg]ρGﹼE/7]^Hᵼ]qci_vσptǿ_ҪOfiUηrg/9dwo
|<vlӼ>S8K|;^dwz?|	|<cד,\߼q>Y%5 ǯ5,[ys>GD޷8tm6+qUi^>oWw@9:>ZFf۵F[5ד\<,~|~,ys||^ֱ*~V(,/zg8)>NUp>r9_Ҫ^H8z:ov}Q?Eqr>REy3H/G\ܾclKۻ#<穭{:orկ"؇.uC^7A\?s}P߿~ _GpsOp^
t{^M'_EsY'j,.ghq1Vσ6pmS7CU;s'~>~η|aH*e^R	yO_oyE۸ݞv)?Kb*12r}h5+:ta.|\x8|r=.MwFyP>|vi
:y";YVk/C5*?'jOZG~	Wp}e\s}vp*nǪLvb
A5Doqv9ݮr+P>_;^fiUFOI璼[sțUpܲEwd/^X_0+@0YV4/[^H.(+,'x)+_4p!B%K	ЂR^a;sB3{<^raɢgYsΙ^9da÷/穇eHrO>}@p@a|B?~A{SX ʗ^T >.*[0o9{/.$T6Z TE
gf-.w]Rˉk;KJ
giYi VHvb)+T S[VQ77ѧ3d	lX+_$=wvޒ|JAoX/vgVt}rU2&MK*^(2g//G9R"y@FUEr;I<Bw9fPUS/ടC*sIYE ܅	bA^y-cd.\R<PÎbuTx9Lt#M"4ʽ(H(n HU#XA.X\Vd|e~#0wKԲ""RwU#np)s
O9o9o9wPц=yuvԏ*Q7^lGxuvԇ`K#[#[#"9sƪg"{[d:؀ѱf^HGjtuHྐྵT#2Q
<;
/ZFWv+D.%Ѳ%Zv	]Z{.%Αk 8C֜Ibo_K{a˻cEn2p	DD˦^{\ћsѐ`;(e녎ޚ]TW<;oͻkŰP=w~|ADV=5W=knYIGnr(,/*ELͨK8y9ܡ6
tI!wzձ֡ӲQhb:hv
EzA̢imkbaeZ>ek1[c޼¥k޲B\w6V]3p~ayaXR jy]pϞUh,AKVF͋gKfR۱`%!,.׃/e
mȤ#" 
yŠJ.!!<Н,),}ZRDj̆/ts1MYiDuOKz$тr8oN&9!ϟ[྾t29='Ǩ75H,/ퟍE5qzr0H4E*tʆ	{ΓJF|ݵ
o,6
MNi+?TQ9 p~K{
p?o7p^7ma#09~[v<}B'? )x_2S8'agp|u\7#`^<÷pv|
p38|^
 _mFpxE^x{
, odj<n=G|${
[8|z# pv7ʍ#?6|
pN pSp?4qx%0b8|
038eK\_bx{ohr O_ݰ	
#3'pu~3%N E)}>U!E?S
"|:sK#u!E}%A.	"B EG_%Zox #[^Ž#x *|;j׿vO{X~X_% F_-x o=8yZ x.x O#Cg$.	a"
k&]| /DTG[l^-sF~ 
I| Mv~ >~ /< g
ox o]8p #\G.{"KH^*3".	2~ /Sb>C/.L	Gx ߫#kox _#7
W[^?)_?#	u| _/x@opq>m/v ' ^'_}Co)5>R.3x -AO.x o%| p OGmDhCB6i[nw`g&Jt>Q/+kfy4] ix-=B!H;BHEK ]+!/BQ_HWb~!8/3X~/`Be_Hb7iW~!X~ocBz/C{Z_H
_HX/L-/q_H_HE?SUti
!ҕBkt?H!,~T_H_~!=~!=Nߪ'aB6_H߉iX`BWX.mCX^EX^eX~ҕX]X~OaB_H?~!2/k(acBڇ7~!&/_H=X4M; M$MLB	ɅtuckC#߈kϯ<eڤYv~2u2Y)e8\X^Ov&(sXBҁn5əxc6p.Ls6dgI|V^{ͅ;閺4sF|gZNClDR*NŽ>KqC[5Nnl=`k$yKVN@[H.A3u4ONϪ|Vf6ìz ሇy[u#g@NY,o~AD9moI=/V"]*
qE__)IE8cz+RyX
{eD+Q<6ppk֪m>ήSaì ʁFm>k؅o+v@'褆	\jeөLa29}6ddPO+g)^Sr1vy0gd _RobdPooXȿӄ/-?+4PQ_xGxqk{Ay~_;/p{a=cv;X;شJhE>6-xIZ=Xy"fXt!)glvI iOGx
bGE( |K*Ų8ٴz]NM
thSY'$:Op`sKz`d  ݅?yK|0
'XvO !dZIaK<I
p.[mP1[AМ: 
v"\~l	tk<9S?[RݙvRz+ _	΄~L$u-q޴,wRS	T}X9lD~QONf0P˜g%EkLQyVyR=E!4/v[Iל386;Y!+nBmEze@קVPnd>'L2j a$C$;va>@|DlN';kmֺ-HX2;JjLv+@#idk Nx&v|2C?ta56g]+].5Rze0k[գ&+)ԇDI)XHplyɛs 'z//tOb$am{
pҤO\)m yooI	#  Vv{md.*ԛlѕz2eLk		Dt"o^`=ĢCy7fmNs %Y
|huhE}=}eNZ"g}{U7p8Wh:}6Ng\c	#,'4G]z<-ݭX@a=`:n\kOve:|?|0e@'@L{~NPwgnMű =蜱1"
(1 C|
^!=1zdO1I~%''&LdKѱtD+[gm"qC}
3Xk!#LBu
ۖ1xfϞ4ڳ:ulMԸ?H9*nJaϛ|P;6݇ܳ4)~ڱj;d؋?Q;Vݡ؟A^6ю\۱GυXh<;9͎=.܎W}rwyvȊ{Ղ_yj5@lxC k6-IJgbKuXAy]HiTGǑJ[mTC8
LSe&FB;Qv"-0J!!7']X[ tfI|S̆3^8rGcN${,#ADdCL)4-l¦v:G%N0"
{;3p<]m?}-S4~WsI>B}$ABHr@@>Yu߻&K
}n~b/y,z38/1cN?<6a퀶+_%|Wlb>_0(8ۥ1V\9.C|{{e*Ym]оyg*5`Loy>YZ:.:\Cp0J;οdlYWcuɏ+M}'!C8q_ãCcWo3ߞW}^}Q>6\~۔|+=LmPǉOQc&TclKZMucy>!?$9:pGph~5^-Yt챵ڇjTck4=¹tNۺ%}[[?˰t+-eoz`;dѾt#Ju*=jut<Xoxz]*u̞]Rړضh_k!} -%n2Az&1nnS'Eyiu8~v
w͛YD~q^y.?^I~'<?K,IXonB?M
w!hP~0k>x"I:&<v2ɿJ.<Zq!IEgLԵCU?\e&XÙ=#i0,Al, Ni"vl&I<<Ӿ__?zۅxzY?i|XfޞN͹`{N]i"?.$l}ѵ:r|[J%ПĭZ
3UzZB]jM/9NRc;XCWYN]i06'Z/NlI㬲8¸`#g\PbazcV'Xo4]rE))w0wNyzEFc8{6q<.9{I'[5Ÿ<X-:K {Jo?~t%;`@&50t*{9g\0z#KX9WyuUF%l 0GG[\4寞e"3r|+2#zZv7W&mW?r8|҅946B>
X|Q+
 =nÝP1m/S}g3ޚ?	Z/O#sNX>?=~'n4*sx=(*JגX/j0=,3ү	MJ =]O}ࣦ*u?Eծ$5ٸVv}Iw1 We?zPO$c)$cgY:s~4E5Εi$NHFx;\sݗ>|)Id;(~O>~6ڐ~pJ<;(q0}
2Ц4o^Z{'袴v4Eے/$GsOmeЭ=8ҰqHp~C}z fGavqFۑDy) pH9[xi#s#~mx-Oh	MRfu݉vRHrؖ)ؾ5/Jly
gh K"IQxhp$+xү02v lI|CnEFCO>OZ֔BM08Tz&K~~R[8
c\͓|a'k-EeeD~\7b9vSü}#3y90Nn1E}ޙq	!a] ]C}<YKiO`}ZH^_{m?񃺜p!w0nSYb2&&hcbUszwij&i鵄"t;idFay4&t8'q\y;S'\Ls"hg^$	LR/:Za,Goee}x5[tGXvGǚw`.(3d#>?;C|y}Xyhܸ'ҥc+`L`b/{NϱJOĸ`n7l8
B]Ӿ3Fm }ӉR`:V-12 *4%KH!&:V}"Z_o+s0{10Ղ2/}sfr;\%F1 as6a_b>y=A_z<V	f˛'M.kNl46Ӹ3>aa?bpHV'w1rOb{.Nqq: :"3lK/E# O5̹;({*9Xxx+lCYk"rq"oMtnB[`6S?QyZ7|cH<^V-|śQpCHKsm`K֫`]g)=jk@Gc-lPbK)5lmӟʥu6i={tul1i3+_K+Wo]+vpn
tm߅`o^m^|u<HB;4o)?![W0vOoJ("!(1R\zڄqʶHd+/HeP?zｑh[qީolǂ?2>{T=$m?oclq2-{kώ,e'<.Ld~) =y4E0ך.[:-'˜ndt-uq]Mˢ{ )j	dzo =C		^vysAҝ8f,?́2dϝ
s:1o6)q4Vm}F^P˝P%^Pr
D!嬰=?cwcmBL#-ixyNݾTu~ϓwj=d~}xV	F'4//38觲-0/NW;cCY{46\2xIwz;|BܾN<+whK+30:1qVN~#^>7S->YWq}-G/}6?my5lV9?GyT
}V[&q
dq槳뎠̞Oϒ<X/mdt`mv{.gj_)q'4js"~u9?(槭uD割ϝYʟa1T%,ԑ=\j6?d2Nd \*N|T.
%5nQ6DdϏ?)$Gl%wJΥ`ل*pKaF!45CI!!ςq8;ԅ1l;DRVa-Q;`acz<i)ŃZTyS%"]mYq
-ɀO
:+FZ,˭6Q(N㔛'_Ӽr*<- |ByL;c748L862gLa۬
q`|&#ǩ)ube>qi/XΕCXBy83y}z)GG}/;7WU߷,j`--ٳkeW&\pM&JpX7l|
%騺]wA^gXbK}[M٣Ec^͔`[pC|͖v14-q
J[Y)[l{~?x c$fRDd'wgҔ$
,[:`cN{x( KQy;h3ˤ,(GKJW;ڏc)؎:14
&I6~Xyx.l[2p/y{\Hʋw@v$~-	@+^D<sH	Ii`'Iw&_9ڞC_,)m<;av~ҲU7>[McSz	cwXf'r>	TIr.>v/ہp-Lz\V:-A^ ~D~B =$!
I ݰ	ub!	(׮gt]vVg>1CG=zy#{,OA>1Yc;ƍi`?>1~[qeQi8o`~%){"ğZ݃ŞApnGFlgBC^`IW?Gs
C^4|./r;q3WQ RRc"3҅ e;7¯Ǐ(JiT@xʁ`+ GgE>#a<bvƙV5z_=bn|Ym,/{
懴e\sV+kF0 '>B񬿳}H闡q>PeQT>(С7N3³?0+:TR:q&tڜʼ+ń1rұiu*N	o+CL qq/螷i@gyyP..Q^4`<k?tPc0>wdg|HγIa0 .`0)Hc볈J,W[-/yyA5`F9l/9[xxNϽg{iҽ5xZhqZhZHN|& ]:f#YpJ98[S|=vQ:mWeO0w(
@iRZ܇CzzC~v3#z>	nSN}pZ?/hGb@_g,Gv'g$??#Yz=#q\O{>0V[CGPX~)|xj ^^,/
>-;LEJ=}HnSWϴYt}o=7AzmOc>$I
"޵w/, Z,֩D8|@'UVH!^uwO=,CgJW[#9(?.j!I~!?&L;	Mb/8Et蛃=&1Wܒ`|Ӓv
O[FPvulI'~_YOϬ>{fs~OuuNnqn;ֺt? ? ~lq#I]<0.;9b)% gYJ{M4,g=e7𽙴
[y3,xU` REqUZxlRp{S#VO?8qap{84=|94y]WU㞥n~p?Ӻ2.ʤ{\,c-wcLl%؟X{V@{b/&dXO#pϗʪ;&r{w`~-w|
#m?]Nr(?1gFBD~33"~o?R?Rl ܇(MWԯ9blg+aL"\$;<*c=hǿgc|1uiWң*ඃs`g/E%X3ɓAߓ=Ι	鐇b$Eie޵}vXK.CZ|1^iC+߇=7'M1 ]PzvIؼj4Tŋ
zɻߵ}j^A7'9ׂ=ˬ(\'j^L<vɳ)t^<(wxZ4n}x57κDIiKjgum Xc8)R#> {Gg	79F%T#Xٳ
4z/GCF׹`ޤ'jGg$S}m3`R?SFW&+}&2f˔Q ,lY],2Y$ȢA-],,,.~g/?[ïLۯPǇ2;M;1Q~xD1cec %WH2yByb"l<z_<FyXL4((|f;M H'+Iaζ?.M QhJe^>?pOAo01\_~euGoz9[s9:~
Gc˷29ulL^t-YaEeYu+w߆q~|=3
3D>
w!lY^,P)&do.O=Y0<n2y+G7<޺Ly|&~$W_<&x ˔Ǔ<-W&+ǃ& k/S
Q0҈禵:	gcRQsFYXC{|X'U׹*I9"Q6=MdgMwO
\p'M'/DiQ5\Q.}˒k*3}8IyTkut%ʡP9hNC})ɡI˂^T }lx9<iC>CѿCC6rP
~lݻԑjQX| \QG1&ji&'4SUBuB~}]v'-_]^-B/~wF?]_G0>}wH1lUl}Kdӑm&x"?>&</Bz&<i5?xym#+:ҁH20f2+A'Md0 %:<pM<mc>Ӄ#>ULN]<Ÿ8tv, 3 =1KK31a}~hs"ٚ2wavQGy^9b.OO{0{s֗G$ulNb\ď1ɤJҌyߤ=Y=YxMQZO˿ ͟u 珘w߭ǖx498u棖XoPQrF$櫛RY7R K	v[k&fmnl0\ۼ=R\aL<fe9Ih@C;򷰟8b? z>.TuRѠvG?GgZM_嵻UuM';ڛ.5B{w+ln3r=\cWGMڻ;.]I{
k+2ok{^{m6iDC[{\f[G
m5|'_WnIKy+"X땵n`[.?hm?~SImC݇fIwvpY>pz3	6:`NuỦ4Z6Ü\!i5쪳~d_􉰞/Zǆj1dXP'
2]	x;xK |G<73\&~"ۑOv65xb[E{7"ߊx$ܗC<r_yP8z,OiƆνlQYai}pqfx^g?Vld{ESJ1AV%כlJ=(#6;'NDYpaLd=oUSA~͔C<>g5S<ɪ`UDi۬bm4<qgd-c[g"m}7ɛhu<pŭ*L&'I.Z1A	ɑIv]rRW}Eœ.U۩Wc~4A n!z3\3EEɻp{׿zP;<Fs
E
D\oMdB'?K}|ǘ<eje{16)yaZ7X4<30v~CF߀>7|(+IHf
a A2uJC9~Vqô>uzB:coVc8
CYh
Ûx3y:P_l~\Ueqk{:v\AWV^ imI粘w 3;̨#4~~|I!ϟHKL&5N{ߠU`
ɨ0|vk67-׻A`:5F>m϶B2Q-'{-ugu=^כד8_D[^[{Y^wn$0ʮ$
0տ}^-9]C<V?TNesv77̢t7$6g~|~}9ȩt6lfˏs/E5Cxa!o~ɸS;^_G:Nx/e MnyG<iz[˷C?4t1y<o@/@(="=ՔޱH<hmb)R8
DzS~NaD7v`}(]'(M)u_PV(lLa/pP:zC(l
{Zw
=uk)̣z
[.o	=ߧO0CʦQϣ(@'(엺#)l6=oFN2;KlAY@kR34 64l}.;"cđK,;c%ƽ;iw~߶ۃ84|n&LHjMtؿ	wqymp:ֹ}P|y9#`]Yԉ ?Z	vu=Ճ2]2<@1|',~ssv&'9<Ӥ&ml?"m~<ce15x֙A5,oX	-콃(ǿ&zZw&@ߡy
PySU]GY4R{~FX Mr(g>xK$|?G	p	@^$.AyXgl- {	'x[ 4^]}~=<No~-E^<Yэ:<<~
bed TV5 <\4u ~2{o5 h]gvo*)j|G<Oߵ>	cm;}А׾6ɲp?ʑ:<2CYP=<ܸ6)ya?S+[uU<//ʌ;uC^Xl?VVZbR<|kk`PV<iq#
,2)ycY[+;u<o\B۸MC)6r<Bnjk~LGMB^;4Ť0N#c\܁~{>Mbz)ټk޹fּEF}xEfA<5Qٟe5
EvΝgQf9Ma7u*Qyuap.pxoIٿ
yBԸiOӃ&t!񠉾L_>USڧ!;3L<}ƱOsVgRsƣBv<Ѕ<tc
<5nR4t,
?>p]F[$ٝ&e2B}A%evl	]9=y2'8Oj?|<=oy:y2cXg2le<Gu¨.?j,AebYgg)<SVs7+=nohx{<kG!J.}'hx&ޣ~`Ti.>/
ZlSռ
A =.}pogsW-LkofLˑy0nUI5"7yڢ&#f@=/pofcAOX}3lvqՀW_gVZujrU`\)%j)CNCToIrbcgٛ(	#39݂lF8NKFV{ǲx*0V 
g3=G%*UG"? ^ )wT%
c2}xxQ*}(҉\3ZZ~g4B5ʄxۮhe
lLZTIh>c@k	PfX^W#c&Z1Zbۑ'k$,e[AWL#{_^Nn6ثA#M }(y)`x_x~.+},e~
o:,N
x$YÛ	>4|˶;'sau#Y.mf<O*ϑ ,7cຊ4QJÕgENXƒpP簪߉O`l~\;7"mDvtm^¾ZžӆqB]Й=7x"&ҸJou2fM=M*=D}O_Pw5?0Q G;ٿW]DީUٲ|Wv:,<k_7vyFF+F~9^$*i#E~<X/W#LZ^FjyI0z]asuv&nzӍ0G|gXqas.g.+]V<2z׆<4m夰vtaNr]˱aemaxW/aVY1)##g3#-Y/0O|((0<w#YEj|~ ϔIl,m)VxM
Y`[1ɾˇO5y7Zyl/7d`{\6z7~[f7?-C~!d"}1Hz|zӒ)77ʧ0/Bм{ϵ3?6VvKC]~s_?BkP5y%B')%DgS ~fc*6v,
k|w%oE\{l'w&}؏RrE</\C%P43i|K';IR~ƞO|Ak+ɍ_}8Ir>P-5#Uj}*>y$a>S|2uxfgU\6}Џ}#u+:]Ξ5^:?i]LglT};ȝ;w4cG^k(T&ad0=(x<@<DO@25w |e3itNMْ`0n_qa379pڦR/䎱YZ,g?TZ Y:ݝHw0<ݒͿ'xn|N:	wp~?H9{snXTa
	k 1XmU~T෗ ߑI( C\'s'{\Ϥk%幓IaDO*&d%
#$%YY)x7A۝4akԦ,]Sҷ,_3e1/ŀm);
>C =-a6CO
QO\3S:jA`3ǩ{Mgꛇ٧^f[Bjk}Bro"Lmkn1+*cIIM xNA( t@_߿waa~oO>C>c/&~f`>$$!F0'`Mfz8p{3aac/cPuQ? C>_QZ2:/	'ߚbN2B0-u.Xڷ}ת9⹁t]~t9гN0'91;>MEFWh=+},:lg }#<7譴V[ozm~M@y=a	)`7.o_kYx{)}^?cϚ+M+	|f/$%*	Վ&Fa
:ߪxن ?xGTk&3Xט9fg#9˸R~?ex4ȏ1ڿ^> \}.ŧ ZtǙ&2ԋQ<k3]9?eM?f|_"k g~pX;1l=m݋.cbI.$r(qs446!c<^gkD9Ug^;,d{"t,I߯b+)ng2WNxb>ox*/1kq$4ΰ
M{	cP}.`cQ\0磾XW[|lOid7;7PO>rt>nHmǡc{Y<t懰=|Xlh5<αoo*]EF7N x*yO[Ub >s|igYY;F'>e{D_I׾E݂3z[&?o~S$WoM6U~agB[!D ߥ&냗C i^CK4)Eengŧ\]IW6[--yƶG<A<;.Y?Tv\O`}(2I*A$Rʹ+}Hct, ',
;,8B֊yBYPOHcc-!<#.$y|9O/vN$u1}aսL^f"*oI?Xn B?Xhldu-d0
Aw`z"HNeӅo 3xĲt~*icMm*
_BLC[k-?ľgӑ>Fo5y]1sl;~fC'=yzEuF'[(W~76pAy,ڒզy筘}Hsi'~raϯ*,6!
]xX=9n^+A-<V*焼͝ě	nteQ%0^+U@ۋ99s@MP[;Rjmm4Wb|㜄yېSiZ,	; b[CC%#Ǉz\',:
 |1'
'ᰞN(?dNiv8jF~b>pV%T	&v<Qn1ί>M,d%7D?~2&
*'~|?#}Ɓo}ߕ|ߞ>ao29R{~912i2R:=#i~y'^Pwt(	S$6IED%}b;}G9&lfOf"HԘ7`0n,]If+{-n5.
rO=vrk}q%~[xes`%!?bldn!"'@Vb d1(1?`g}
zǾ;ۋ\nX:[<~7@ߕSzoGio-822CqX!υe}ƄWDm#ڤ?bhV[ }dt 0\kZp^S߶Tb6˂3oh}3qo5O_>zZm/d魆̟8:^}tg:hՅ2ln.T-@%;>4؂|6!jN+q_/)B=8%zz@qP#E\Cd%qt<7>k{o_??{{|=FXX|?=bQDil4m١Z2;4>9
x{ͩ|r| }2BZ1/Ƴy=Ư4?L^8ЪlB&=}r [cFbX,]gGq!]DYxlZN,0lX;"u;0>:'B~m6RA') cIRɸG ~>]1t Udql[HIns%vrArK[/gTB<P4GP*,vvҗ4E4__o,ɵ w;'@tn/4~k~4
fM>!lITǤ>ŤG;X4]{AT3ē/
'ɭN9Ν@Ķ9@
kIvWw/)g<zT<ݚKvܽ,kU6>GYE8`YKјC6vRc:<Fo(AFڄ| Y^]&c?j=Ȟ6~Mnk`t:DoA<*&al j{Eq5gW2fxtar1|nVOW2mcMxlW& q7B
u2V^GVX\әSǩjkE_=}0ǊKD@h	*֏O	>{j|X^}Җb1cS{精:5uPgjT	u|LgE]~:6yt7ǳ$OxXp4HyQ|$2 {Fi4MrCqzXJ]?sot
;A~[0\]-#z&3]:uDA@w	p4Aǰ7	zR>~K*
ҩR1zR*q!R?}C C<u|<?u9ca2]qIcD;O6pq`(w9΃
f,=~$ʏ%&D>xlX},w IAFO*=neX{Og ]PUCe	lR09 Cϡw<ޏMX	{`^4hA'JY`͡c`f{B|l'
`wy5qdJnn>S8i)v/p{ ֩+
Ui`XjYW:O?w
s)ֈ
9܆OӘ<Dqco0_+|L:A_bvyZ5lIw6{*F/ck#
^|
}{ko|3 " LB@PQ~0	@0*U$`L
֖C%$@bKKmkkPTZEAk@TllD93	?7>fkk>U/Zje3~7rE&}'U܉qȮ%,%N~'֟%.&֡'mHk<fno߷*`o[g|^%ݖv`RLxb܏>8zWo-OM0ÿii1V>/'BOg2rS_
KgAh{%ʙF|-~ow>PK,=^	ӾӁCW`K{.'YQ}-ܔW|~-_r
Knv~mظ{&֕^Gk.w>[(2k!Yٽ6g-|݄ΧL]9AaҼM5OgCqN߭_[z;t>Qڂ:1u2_)5ʷ`lDzapoޞ-d^ t(gnI&u
CWٺjסD~}E4Fu'{e< _z6oL ]?O|ݮg#^O{+plp4>V'tTQV:s?LpF]ZkW,q O:	u|[f+{U
s?cqz4Xw
}iWY?F0,0\oHեH@vqvvIOruH)m{ߋk'
1 īS?^աf]̃:ۏ~{Y[
~w!ʈ?:89378b׽ʴIw1AeIa}s,_nk>z$[՚8!<N{&sN+֩K#ETQ*;ϲx d03CK{TMVV:3bZYwPbs3Z"fЙVZv>.l/X"].l/*8%=8tc<
cװa3_nf@c_Oۗ6;m{%jEl̬K7E3[ RͰӜ6e^qٻ/Z׊6?;hy$_:
{ux WZeidXzhm+ưIN݃믃v}&⿞Řg3g ^61TVJxR_6l+u_z%Z[#ٗjW]Oi^Su^1}vGwч/8}5Ľ9dKB_uQt,~p=50Kis-&Ew2M:dJ:P
53T73#g,}Kok"s0cC{{<{9aţY_6턝hk]VDO*w-#MWkm_%K`
&z}isF~~	+n_!F2
	ƨzY|ne5hm/:OuIeEYg?Q.Sߒm #/#qUw۵**АJcAB'<Km%}<~/$mbve*ƈhn G<qdb>/GkfonAM!Wd˗۞{lD5I#؈cg~9^{ӫ_X3s`^u_3'jN~(w|?59h/
-DgRɌۀ4zO	ýlxEp}HPLBXN 1iOgu_=n׎w1uwg4

G>6w4336cVدk=.685=ct`aw2}2e{Gd	Ӥ
NteSA>k`
^9޹d
;
bEЙt豋YRI?{->퀝#ߐ^cgVط;d=׈#v+puAtۆjcq=oY_omOiQKE9y6)]Í?Ϧ"jS<hwg-K-{淙?x2!?ͨuF]nرhfYSlv|x1T<cO}H@Xjd}9Q{ˤWgo~J:SC깯+aOh=s(]B>l~ZӣwO] &9u.@;H?-so
E/
Nh1=Q1D-%˞:|sbdØ+zǦrCLNIs*q~On=kka1ެAEzZaW>Bq"=4-S[8_pb<|t) gY9-fYXзK߂dj9*|E_$	bڢketjE^j
}IsiKvgБ^"NB? =`'FЭ=L#6g틆DccneFMs*,ہmBh+8{
>}9dBv OΪX{</"S22P~;SRyk3{ eP~F[`Ơߺv;OOuko<CI.q1`OĜh>{Qo,+n#H֟wuMSQcwg~ɬnVO/;A̵(稖1VnΖ*ZhEO133;JFnޥ;ϊ:WĳMu,=CkѮ4<kCxCKgp۠?
}_80{nŠn@q?y_
z}Wئߊqba#]󥣯2YLlv(gmUȣߐ{tgƖG|"֭o==+a?_law',s9YN*-:Uv^Nj}J
Cv[E٘o.O?EkPZxL1TƬb
Yi苕=z D{~/l'yE}qySڬK~%_M<(~f
,ʦf"ᬃk1Jq7QRgd|-憖;Yq!ѽEˍg5Ԛg8{WؠsJdfP$ ۅɥϘ;MaT*}o?Cw\;|3{dF'9b~ftZv>KY1s]P.\wY qVoŏ6u8Pm<?{>EޕfL~̞1{X6a&KB9p)c]wԮ;c߷<`Kx)yX4|PH6G!̽VYW~߉?1^{K{Wt֑~u5ax\=iMā
>-{<uE}YozwcɐwHhD>&xW`.:;L}Gg鹾MRٻؿW
!~F>Z/un`TFYp]3Ot^%0ǩ>-ˮ~>Tn\8m,qjׂyqGWӝ.S[gňT'7tb/_dy+1V7kКvZbw;XEڿzl>wQ17#u0Β^	ўDf5Up7_:f}f/J{]4~YߓȯzY7[G\BO=DzNT(~<.FFE4WWz<ա5_8DcO]ߛ&_^c_#CcH/cHce9rQ.֚j%]&SMZ3ڨ
PtP7g4՟ 15G4jO?NBy̝r)O:k~	`omkm!N♕@zoNM]>)Gߗ^7j,b\ЌzJC+LIc11K|;D@fͫhH[Nkt7@9?ܯ??u!69S{}qMB'z`'ܶ٬GClcQ+'[݌Y;Kk\CgX|䫚sOolN{5?SDG!ǁ}K>ASق߃CcĜՕ$<v&]Csq|]V[>/4.(v}H龍w@s M"#COxE6Q9th}둒K{1Ӗ >	[Պ+_1-MütZ =)tLk{rѴ,OjL'ii?w9O;l?@~n0Z#vGš/ .
8Y[tiJM{̴eϗ=r傾i@纯Qi+O\:q}=D-a5,;$iNp$$~Գ'S'Y<[RC-q{Nqڗy2ش`LC<I_pvO~ݥݱW<Uk](u=ouc*o-Ҡ?nM/^hlJXЛ])] s}kĺKzcu-l!Ƥ}3]֨xFz cR	q٤leɾ,)Z[nXuCAb6v-k>n[s-[,?2ʧ(>.P.j}7b3MhdJ14xAKcl(:=Z%?r̗ V]X!~	Aj,:1zS[erK|ѹ&Uk{ӽ:
h	=hLctV7#u9C4~@S9${iBĝW-kh~(XOi
x
+q9Ɏ[{l/9quO̸tX{v}~}оBCyEr0ϭ7d|
u!ڳ[SUr Z}&2!C9>>G>zq1K\j%ڼn˴4FvtG_ƫƳS!sϱD׺O'O^Bgmc7^Vpp<ӎj-1׋9=k_@rp[lگMZ?'i
^Px\Gzɞ ￝[4IMk={N3'7GW2^i~"uck.k$@"䮑wƤړ8O@Ix$%14}a<:}d_B+"+/ʙ&tٜ_x_eR_YE_zP>>=jcsz>u\]3CCCV2s/{9VO3Xڳ{F|;cp^AC{_0h'[GZ4zy- Z(j9r-;N7qvzoG{'\ 
Z/Zi]_4f>Wgf{dL9|f,r`[&Yf4Ǽ[-|=ighw=7Q6٫(l˪Q^grn=ɠ-2CgXGuH&+Ag#Ig*kTA8]IХUTh]+rlOq s9:ͷ%]1,K#{}x)pl6%l|ϟv&n2aٙd);Ӽj9kfXң	tY%L~2Zycl 훡osex64ޑ}n{~bwriS{򽐗O:'oDh]ʣyq7ًq7|5|Py.{+L彋g/цZ}{*$N1 yԖ1[ {e>bE*tP|}l8TGa\_~gi^VoIaRsHl
c
]:jɋxhrpuI@V$}Hhq'
N_Ľ`tģ?>꫐q.(?_bye#¿ĉ2㿌01gK'8'tk:
"|w
O@H|=_Xooس }o MAIAҭػ+Yj+ɋ־WVY_S"Jk6tP
Ňt^)0蝽vټ_ƿzq~#霴Jg&/b>?~A_
[e}.ל9ZJӞ3[^qv=-:3hMimƙ?ݺZsm+d,󨇍{gz+;.<DK )tfam/}gFCgRCOA+nH]7؈
7nHemȟq?cOaXɷLvJV6ȿ|n)6&ߏG fgvZ|oL,_1Sׄh_^@y/R9=t:'w9'z6a{K밧ٗ[j/mJ7~fJj@?W]W+0SM+aC:$95Kg{gD{Ƴ_sZNiB{Dv+ϕ'{Ktf%Z~/lAnG;i	(	D?X1}~ke<!/і㖸]c7F֑?4~L^
}[ܒ(̊AM:<Ht?eno`v5LAzA{Oŏ!:yOFެA/gA{8&ͣv;}C=ؙ޹&^v,`}Gg|Iz⿴[@7oKe<GܴݚOX["ѝ={'|{܍?讶{kg_5}Of8-Ng{SC?b<6ej;wf3-vGؗ3-VM<{ehn󞕽h$$٢=׾ޢQX0'AO{Ǳ|v#qԽvn=hE`Bvhk[Ʊ{s=K^q6X6W5ӻ;;"ю#Xr/B7n1><:mN˶ꬱMz%mǕ{G
+3{1c'L }I<nh4Q䣷H)ooc1p;P9mI`1|>:'"R}Ԅ<H/[{f^Mhk
K|V*BBy@["H_{N^ܺhR'V7Ѵ:Vxh!zW=u	koO:ܝEo@פll>/V6o']|>zˣ/;H&s84%y;4iR^'p8$]4
=;HIwB5J=G{L'#YshOz9ێd^ǋm"{{5d~}8?ڏH[nOOejk!qt"Ɏk*;q}^]@0{e!L}2޹Bc?gKq~tXw>ƌk^'Nc)t+$5XHS@s@:3{0OgÆZc>z/wWx/	o_N{+F-$h\֣W_oְċ{mosѯ
?iX6EDi;Ecc3crD]q'kS'Zֶ=eO!~oLY0ٰD0i㉺,ُĽgFbzQΡuO˟=waBs\̄bc&3s 6.9w+ikw<7%;23{T6ty0a'^lo

a'R@;dk{On_W%,u`\݌12ck.=ͳEiv ؤQfzfF)Kko:4&-n9b~ԕͭwz3{׏1GzB|<:L ctVJ xɭ.{J=lǶ^LMf2`i!~L58ʫz^?_I쐋[Ȧ"_͓u~l!Tq#9l־Dn&>;l+[':Nc5t-W*o,qW^2nemBXڿĵ?>Bkɮ;r>8	sڎ
m;>jnKM#mm#c_#5le6݀+knd;t3%J+%M
L;WM"R	yxź5D
R=c"m㞧UM!X{"b\H2u?>sMXJZUw ?	OSl;2F>tGsY?rY?$|$
<T!6S:.{;0;bK|g3yyx~f%%oBQL |XxspX:ptl𷓷a{1K`֛;0vUmz?{GνZUm=g:)/AS&7=,o@yǴ3פtΌ[iXo#l˒f",NsxZ
學o[_z/ylJ7ۊ+me5˪}oEQ:ɔ2V+^,ي>ItY[eR_E
|
ouwVXYV0>+**"U2-CrK+P^\5ʼK7ss+E}yJdlB_M
|8KLﶊj_a咊|E[r
Y*=P]lhf}
ie-k|#;̝υxK:WEyrͲB?]T mQsT}d̞o.+yM,.rMboi5hR~ZQck%\4϶((=Ɩ	o5~_+k	wݤ(ƖyՕUj>IQo!R
׻J.h/;\y1++mފAزʽ	eEzq[EͲjh/=;3C]<HO!PN!ʗ1mE4!/UUrR#I߽岝h*
5 I¦~ j-׈V/ WD|wM(mB
+,Vb
?1'TDe2LQ:S.Qp_[ǰZ.U
ӐM~G-5ťH[1
fym	Qͫ,qdykj 
ҩAҬn'#UVS*` B`hLnJb_RVYeU(ԯ;ވfҚ_xy5PYIeM`,?GvEי4	ffou*18 _!,^(pjrYzͼopɧ0_aNL'Dz^\>

+d y)\8](Ξbuvۭ\wne&|~x0QIaQ-Jz:7 h\O/ULhΗ
]\$q|KTե~_߬p"W>3CX~sF~vas4}O]Qo/T_OS_
150_FӐ;*cS&X6?Y3Y!~f/($y,1y?T&L
7/Cof#7n\V[rœW#|؞C|ǚMYbLNy谲|BoSu̤s"ha&UrF[_DϹTw^$ťj!<ЋsyVZq_=~췝w2o,8GXٹT=܈	b^*+SJ˧Vy%W{jH&L9:pp<me|%eYTiny/"
U{識5˪Z紜{@Kzނ2_d/VUKe&RYq\2KJ5|#%ʙ9u+]Zp5W]yӯ͸«Q8+
GR,SJdJg?ӛW)%rڔ^9U![
=aL!ʊ%ʙVNv2tFA=TXQk7'5_)5^Ң09aB!Yzf+
=wVVrjQ?렅+蕩P$bFCYNG(-	Ysԟ$xtQlΐG^SZt$V%r*˫*+|~d;凌gM0C$^'Ec!ʗ
fyigGN
"[O)oWJ宐Tk%dR:ATW%)i/{32p	R/	
Z"ޠ`*L&^2[GRY$zv;mM4i&;-4GNs|;Q4GN{avnOM}oR~A$K/E(-}(>VVNLPe(,au׏O?k]NY7|A|?(A' A/m`vQ?)84O
HSI+\	gKMNYSE$̕p",:]Z^/xS$LxBj**o`WUCG'wrB.Nch1'T{ؠGPU/,-7ǭcH2"\6k$W4AJ_yH3D7_QW*dߡݬ]I{]OmQ[Uk{e9_-fhBOIG'NˋJGLʢSfVQ]$tb8¢U1
1cpU /L,i@3Yh_NK_m?vbCl'l7!kSLҊet7_rl[OWobaK0hD
P)e5~Y$ATNPj'NShu{"4K"ˍoPH2^ft\0y}8%}
<PS+!y^wZQt"WDu4_}H;*BBUT>atW<Fo^t 2Ӷ+d\⼶h?v3COX)ø]ɾƱ0X
eZ/1-axk1'(?)~P^01q10/"]VZ \'sߜKS?˹C1>oEՔYp3ǘåԟ?=&Fi&}g¥f:nLϕjYۂ?ߞgzqp#cg
tр  [?9k<
ӳF7I@+nYc,n<=g (<kھ8k8k < 1Yc`N =0
0a$#
X9s"2)h&
0pF2d~k  w
8f1"J1	79hlM3wHHhe6цq7`ꅆ	p牢qғ#m(	XxA@d8y"# bwN<	
:0 ; .3S	300
 [/7}0^+pqa,Lr8}ah ]kSF݀Uƣ
0p x#MC}622uvKia D?\ :
8ЖckFM+`u$!r <	k;3C OPzabvT@7
pݝG? L
n@?`:5;7zjЏ1v9~a<X:`7i^r d?\S[+-`@_1Z<G^us
L![#]d6`\ y5!?`ж	 Nl%<s݀G#ӛcoƸ@9͆
Xh}Pa/dϞD{2QK 7ye ``#`. `EfK &B݀u{  ^
lh=%<`DsYBtvV\%췚2k%E)8jvw֘BtS%ʎ7!mg~˟?'l'FN#ɦ!#{U䝾5~[hqm7jw&9xhs%gbE׭<_֤m
	
\MMfx]A\s3yǪ󼞭)ے]
I6$nLp5osmɛM)A6&1geˠQ!ѐJ@s4$CvӐԭ6d 4K}Ё<?<k2qQ'miPnh8ܨqzm	;I#+ͧ|v~ՔE46Z6Xzه]xN6X7ZtNNJma%Tg򜔉Ԥs,/'#Ԫ$XIL 뉳Sښӿ$O+\Z
y&:Ѷ֜
ƕmI9C3@c_Tl1S|]ݫ:d`gCJcry_Vy=_x
|߂4;zozǧP.Js&NX	Ev
v5jSXz:^"[-!S8%~ϥߒڻM5_ձ4ֿluY"	ޖdVDv-rryIRIog'v1%ggɮ4p6#]\)qddMef(	*]ogx=&OH~i=\$l`{e}
|kLϬ;Tf	h2AS_ڂe&x ?yXܺC۶]w5j-چmƭZmcZfy&mKM<ޑ?)lXKC<qyС?նa!ٴF۴Zsm^5`-"􂈴^m|
We&JFڤ5t+%CUr1)VڄrtE!v59sC?B6}qI}B' tf
pe໱ry;lMyoiJ/?mڨmk q6
봍?\M?6QMF
+ő"CZכ7֠sœ$ZПB|6C;Qzu!\iSx9:Penk([ m =?9&xϕ#\#pSkϻIt&]	L&{q0Jpy^dlgwN=<ϛ>ᠺ>,F~X4	}eʹ.0bđT;2uZkO7mOh
].:`5/@.c6XΗ頿;=~ӯ؉OIOc$\2f/Hkٔ'fy#ϚIb
sãv5'ԾV(:q ?l|IWznB/6yrm<Akpvt+vw7pe:)~umH,ɚri'ա,`hz]r9ϺkA
'ck.w\q'|ggߋnKh՚13Oo?HkWwe!MvC!Äu*8~d؜8f^W)۾l8ɹ!k㥋6Mhŷ-eXOty/#9eAMaNP|@r?Gd3OQ2bEIuDɜޑ(X;8~u\P8¹aaR7
<yc)?S9_>q#ن'[4|E:	<L5'OT9w
?[UKe5u埐e)]umC4!ecM6'lNtm{,ޢYxGMz׼s{xrwoT@⨴M͉	oC8gI3~CGak
[gzŶ˳7Lxaz)&%(Xl%f{\ݬ7k}{{gbM&m[jب5n@ިml@^T97Ӛ=3m˿i?_.qF*tEmuT)v5lݖa*}y]4S@SbEuy:	2OOaU	6ۤXWD#_06P۲m`TegY'	Y	:͛W_WGm=:JB$$?rn6Ou!cJbuaΆơ
C6v6lJvmNjߖSwGH_`-ʿ,Z"yiģݠ{twC7j6`o뵍նiٛ~5Ӝmf%4!_Rz Q( U%xyrޠ	3GN4.E??|kB+H9Jy{k^ޛ 3>>;ꋴ!BԸ?zv=<K1ǫ>'jG"e2&{BUI8pznatdDvECncak'A}!lu,3Xw_eCv~洩<^|9kf{
oGL?T>ךfU@yj
̖uJR|`ct'Rx?b*'m
o<y_ 'QyHYow9͖V1?wD.B곥dm<o*y*dJRR%TJ9))-umviokPgh%]k3ꦆ1(saq!lɡ
vD"oVMyA	n$UMza&]Jspv^{XCo>פgӞ$G;&t$?&tM/mD&]n
.dOn
Md^|g7[٬9hmҾ-#uVAӽ5<.< ܑxwkxܾv w-xn$q#{8-r\f"deFhyȿ8<\%y m|!I>N9iTa>mmэ6x)mӈÛ9K2T8vf:cOH;K6"<N7d	hl/B&q9{AE#?GIr8\/K5mn07smH8iȦ)ɏ%m͝b6IѲ9Ѯ6xk63O?)+M֌m2σxf3y@<adBgvꟗm>#>YS3=O3}>l#K@B[nЃrKU?[%įZOzO~;#`o|bAIQOUk"*.ON|˴AyLԉv^$Jc$F<W}NVNˮ:U*Ss/R[&SWdJ)Qv]=%]:-;kw#҆L+9œEOUJM_ލubMSk$K8Gz$,JZ	pz>/MgJ6vUIX+ab](/	=JN],D*	k%HVunU]9ş$< vKxBk$ve	OJX,I$LTPoGfr}ז%[^e7`VVL]~+N?wY>뢨ak|4%8߆y+y3_A"?x$
G)?8~+S~O8~X	gQ#x+Y? ߄GR8~;
߿өVO?&~Bb]1w|a|y|,9o86Q4'o3
>q_ƠEwyߖfO~g*PMг?tlKVӢ}UNHȵiLw(9IH+3Gz.~&Jzz_\)z{DZ)!ݛE:Q-S="I"]&WKO%znIϤު(2Ev5I;^9/V? V3)11wXE"kI+8_vZW8)&^
~M&H|ڿH|jH+y>$v`g-]2~&.|~/<7$~p\~W{įvīLܒWBn#%i<v@+}LnZwK}SjxG%Ac	P">~71_I>$"VYKKaRv)\w|nJbI!0
IK<:$>uH~9)'<MH+wRiu~:?^(J	HwX.KKHϑ|A֛H|I~׃h3r<jϓ74$>W[I>2Vk~C.J~Gs+?7-%OII?IJ|o+\>%Gg!ҽ]'k5/1F9'bd9i]j/'!%:)_,D.^IϿp;rW,UE:[aE Jn/K.VOHGޓJSe.	&Jr$>rhS8t~{Xio$>Rn#?UJ6D;Ҿ.W
I?}z8?aW*]Ҿ)ZP=*69oimUK.ϔq4-wtx/"冡̓䄶NKqVcCwJ^Vr{($}WH+;SοωK(#%>>\$,]I}dx?'"'^,$TH~|CSH?FNIa"^6LW0,z,<,r/NI_"xWvi6L Ҫ&
~e9弩/GM)%g kd\'!$Ѡ5&''۟(?EZǫGDolIJOW(y6JmH+}Q>+N$P!@YqB'?LOة{觿[^X\\,e,),#*
/+M>/XϿ>۹(;CmO|(ƿ偂|(QXY^U"eN>p5*VxWվ%5~_tu-XTҗm2fiTեH!~Wq_ɱ.
iڱ\E>Fͮ
;@o_[P`M--ȿzJQLۑ[j?"As_9;7Ք.8@˼KbCu*.QܳaނjDӸfX~>ܝ _
+|!Uo/ۤQzW޳m͉~˧ox 1X]W
W+8
X$|BZsBt%g<VQF6̀aYf⤲wnAC AˈF"auzQ|#U\KI"2ɯ|kUͅDz}jyH6EeV
06bI /ʯz(it3P[~:FFA{I`͎jP0zӤ/_
c)CYWjm"C\Tk]VDVU\))	B~([U`4nsc\L1IiEѢeAU\g=k5h>w;3qYZlع:W>PYi35(kB30o}s)\(4Ri;܆;@(-R,+*Y^n<>w?//FuzT\$m=sN**;4̋|4DF#Z*D/nrUyck7jVD|QZq]R#ͨsMRlrv0x;h{1bȤzY
<X^"^Y1]f&YqP5}Td<!"12Z\q5b/2g`~kͣq]Uz͢x})c?0xҐBaW}/4[t^YHlIosJ%[N%ig8(>y鸍@D(jE]oy8ǐCv{eok\fRqc]U
7ױu㜽h%뼿&,n,@SQߦ\&F:o˹`ӪMWO}f2ZBa#!g*&~_֢v j
uvƦb{ qX~xkJԢ _ͦ.X6U.|%W%BϦrQXO,l${_)bS+0-O{\x^S=(s-/-G~?Q THzCTHL/hDho#\7U$*Z,*:"6"Oeҷ __UZ8pt:窠L?q0]uVAITGWfTP/|cj}_AR#%#Ͽw_g/yD~u^W)#DW<e~%_uW̑WFW0<q\pHc~	ܱ'v#Iz'P'ԅD֯ mG5W瘫31~_'Y_dyo_.yTbTUߛY?Sw"s֭2cԑ?ȯc##Yʯmo\EG&_"pS/ȯt0>
"M	һ+)FUm"PK
    \               com/sun/jna/openbsd-x86-64/PK
   R|\ы   ,   com/sun/jna/openbsd-x86-64/libjnidispatch.so	\T?~YulL?an``R3:()*l[؀2bfX.X.hhfJe6e)Z99˽|{~x}<99YM:H/@_򓔿XhowI/}W!uPEzF/Q
ԡ(yFrÐv:mTW2>j9^
KǢ-?Z|ZIfr{ph:=Z33^2F|>K8ψ z%udn#a^C%7bx믣wz///iT^/{B]/Џy_BwyӦ_=}6;kЗx?녾}A/S^g/z8o m|w慮BOB/B/M>6}|'rMBE^i^{N;?zju^ݽv"@ɯ{#@ ޫ{E-e}(3i^޻,D,8ӫ}
㿗k>5oɌF/Ay]ߎ`z>bo轞ѿ9(zhd|@çeV.VaYTg	KWߟnbȶLIz關j|YO{V
ߜu<^l<3WˀeRF/Fy7{^OV󯺼O;}:gF?lNgYA^>,m>j|b#jQ5
nl%mCz\?^ҟVsV{5.֮Pfn:ҍ}N]j<=7=Yymb:GxT㳖뢯=G2=z5nV/^ҽp\g5k
&uaOƯTI|A0zˏg5KW/3w[v{3|j`ҏ|nc5Ƒ6\o2U,bԭ,+z/u'h$G1z
Kk}?6O>C{tcP`-ҭbopw&Vﱬ9n3%V<2<?fcЁ՗@ߕl\߳rE\O/czPXyW.ok;F֍znYeW2l=_@W'UM-*,
5|et~5=jԫߞ#c|Y6~mݭRCnr+׼^^ax~N]^L5#?-Ɓ_hj8p3=JC
CBt=c2{BJ%Py/$9Lg:I.#/[$RP%T/UH=:w
ZTſ-DvhXJ
I'C6HIM2@^/vlb/6^zBA{TňPZB0Gh(6?b0/~#M_2
{~V͇+._	]?
hF飻Zؤ!տp=jߣcLUU`Yyu΀ɮÚXȫo޹?>mf/
nހy~Ǥ_iuf<]zÏ}Oz߰ä́oܶ,/6ݴ!\񅗇}z<f	KğuD{tmԺu?z{2΍^r-xPW^J;.52ϟi[ϹIgw͖xߒߺn~Fm͠9~DΛs%;_|RR#nzÊ
nI4%??X"~1pyԺ]Zί;_|^/Ij<6W?Ougf]M'¦}oCյzրsm_6yko|QV>>vެJMO?f~>sOI:Xa6;^kVyzDXnFl+Zt=H踲SWuPX]?6}%lx3XO0:+Jv{ZRaYX{!mI79~Xc?tIKaέ^]mߏ
t4+v%~72ϝ%jstOJ{ׇ]
"v}>|ye%*h?9zDT`%e
]qIt8WW(\`ag?~")~,Q[\G=WqʥWAقL7h-Lw~:
u?=0hrDtN`aa$Q$\u&\?B܃̮S7B=?#7\泰c\Ie^HYp~=7~l: -Œrr-RZ6RZZ朌y,9,.,)6<=b.QRb.a ;,@3RvvnX*)(*-dKYzvdƬJ3
39q"NR2#H*ٙ%d͒ 08^atdj!as5b-6CK,Y=){vqA&edΔ-3,L|Ul.)ABZfa,sqInaAZv^aJZ,s껴4Ą!c)p;!#Jh,Hґsi$JYs`:I!ueYb\(wIEE,RHIy8#Ӓ6d.ߜuAf\)U($gg#if3-DF_YA=ȁAہQ}VuZ~VanrWaQnX9+64Ji3
2h)*i
Ei  XA!!fBqictCQͤ4|	L	Dya~o,j-fuے( I	apER˂E`VX׌^s[5nn<`-t4Zڀ#77	aFxFxaR1^?ɖd}UdK%Y_ؒZlIW%$ϵx8dx7iʨKIBn1qL*ޚ
9ߑ>6zSWOHNaOsK
@<J8d/,n{KZj+i@/
zIzI@g!{
Gz7tlW$iY
0Fj)c+#}v/wHiEu%Z\̗$ȃU[Om	d'|JbK61g,1ژ6T}vn9̓HѡS;9 yUY%EkA1!l)̒2i3#/xD)32!pҼGH; #n
͂*>; %.,3ЙH%#3g%
TNW(8uXs JDEl
fʴ
ZaAYiY3[$Ky ~%LÍiqLcƍKITS
eQnn^F3i7z;FgNw~FFnXFJtOs'3z=ѻ]F}=#>ȍ>c豌np/'Sb7zы}}K^Un*F_F_}}#oqײvXFk׺O3z}sڍߍnn~nPFw?w4PNRA@(ЫX9H_%wEHu9.wH( +t_\KEz@_%T&Z[r	"=G#Ћz_^*	!Wz=gOtqA)yA?'Л`.R~K@_*CMw."	tq!V^'=U=YNH'	9}@/iB/ЫJJoQg	-}@F;z@vZ>F;?uA͛l.
P@&Gt@(!=A6+o>V'tq:U
t9^$л9N^*{
.V	UT+FHow	j.kY+@?-Ыz@N)/Y#~G	d%{4,.p%#@zY`?|{Ma	
{pC0/Ν,}ӹj|c9\lY0*X
-1EbPUX8'\ ?хB뇲[;-eQ\1AAyBNiYVX2Pnt=/sXr IcΜtq-.$)(,u)d%ٹ,SnL4vf7CmT`+o0F<,<%%dRVXh2,9<oK7[(v{fILJq
IYffkHҐTTaa&BJպ0	I,"SU^RPg2*3Zݘlo5Aّp[XÕiYҿg	UH}Q9ܐOZm㐟~B,4ɤz/̰NϱH!ZQoMϳSkfb&UG*x^ZQŅ֢!\ ϕ{= /*%Mj5|r<ԭ`@wtU-S/ᙸL@gkGI/fL3ysy6 JܐM)tkJChPHE@H<g_Xq4b2뇡	HS4}'ēnV:(5噧gO.Ey.b5[hh^%TUP32XOIN9=(6Lb|
Ntq?>D\C1үPrS#F`Vlj&*P	O4lxip5r0NWwƎHy(9HGlemks(-˥Ǝ-~r"9F=Qĩ(G YN@vဆ \bͳ_heI.AFXi `taA,;E+Uq[8 $b
)HP+2cM
>B=4AD.v>-s.â!/?\2#Sjke& +v Sϩgl	{ [8}
jGliw	 bq.1Q`cYFf|m&vgX-cehI
7ތG/#줠eg&]b-ȤML=zC#W"Kn.Ը,Xz#y]K
nhcb,UMkylF1(2+]ŃfvK]eV𺽹*pv$=p*06BT i[ >)L$jxVcd3T<uТǏ3}֙!jsOۡ~|RW:(xv~F!0gkp)k.syX~yv^AxTPxH=x}v6Ƅ#G(j#"[tto~Q3"Z".!9gaU?;\@+@FOzt04oz:Ψ
FO5ۓ[3~ڽ=Z-Y|h8$)A\˚v+Z8v*nez^ᴌ<}|ZiX4neiL5mqhH'k@&PƃlأF!<:!>@ʇ~~d2 AJ|ǟ1eL6=j(ނJH䍢#ώC}6+ǊK7mlq1G:}6tp\N2PȅVh@rqȄ~͗ؼDiV]㚋i^W`pAxϬ^ģH(RaWZ;	{NkksF-)
}O=`~5(:3̨YYdxEs+$ϤiyfɆ}2XiYK/j
<%p3,]Q	&&(OJfݾ=kߐ9w[Ksx/#6~k@0Vl֠&Ϋ☍x;I_jCH08-Xx,xn1&B"XݻQ+M4#,**V\'-[ưDo-觙l
AWˡJ*ˌ]	SwG
ԧZq|z1j+,yew_K$}8`򌖍Փ&	sĵTy5WBb@X/)VcXUϛ4Ơm9hn(|UXno!\ |3FYSOé?SOqRL?->9H#!y%/c
mnŜLO&c<}F\4-کcd *ww%{?Uz̶=QnA3j$KsX=E7J2IX<(hV'.p~Շ/ؓ*Csh2K|zF4\\,#ϡhi-*XLJa>?`0gU+8-m\W]M.ߺ\v^:rqZszgeq\!k|πnIJ@X*
%i?!}$>9}!U@OVC_j1hva,@heԀA$C$)d0!IU%)nT-@XasCXm!q:
a(I
m&I
$a- 6ZބpDI
f:UKRCoS!@6C
B$I:	*.@d	)TᜩP^W=,IuN6Cح#&I	Vd?YaH6\ctЏ9Po>CLfns \|g|h3Et^r:3ݬ= lg Α<|<GA?9A?PnB~*ӏKymur(/h 
Hj;9cnA!x
^.P>S!tChps ¯ 0(PS߃rCq;Aؼ
anNB> L0S(ONA <(QVvƯ}CA,9
nA?A!iW@0<!r#C_j@$pev`}yc%9~7wh3sd;.1x$0,>L7x<s8`T,xy Yw#߯2?,C7a9cG;J&{
C<'1tpv֭<xְzL,~-dYJN@!I?{wVl9F˵*zw5| q1}%4\xega@gyq'	
:X~3cWt
<%6wIq?>	=;;xg٘2VgҝH%j?{ou.G
|/0#̀_l>Q=TgĿ''`|X'uOGITy`.h $ f`~\D!8O//-
DX_bEmk͵~-/aY ^v.ǧ(vcxLÏR9UI?swd{U=0g~>bػk9@?Jecfgj&1]xu":|*XewNg9`8vTڽ/&fr~uE;I%(u|Ql	E
+A-[
M&@&7?WxV|6$O9?AF|6Os ~F|&_y<jq4{6f1O=V}W qPieF2(^uI>	㕶{y5us;xOnGb8&iH74	񟔖%	M[ǻxxM,Obx׶K&SNN
֕g^HkofMk :,b/yߪ;bwzW!'YL:{nX;xUYFD' ޔrkNޜܖBxfu)ۀhfxbyג9#]P4oVR<}9gzL
F-gZ~+8tFu[t=ii2୵yw,}
6{79c%cZ=X<y r('kګ!	cCkΟGU Pξ-'xǂy-ec:y*vOFmn}
.Z=Ǘ;{cM^Mn5tgy)i@~m7'w!xwab+;p?3]S"Pi',ZD@ F1g
.<&`^ p?@j v0.9/Bƫڄ\e`Q[}EfXpAeSTe/{srWc+gf.<v4aW꽙/_PdGϽ2YS7 {JX|W>n2N3
9	ɵFmcp0!2CJ~Yp}uq&y<]Fڳ_\z­$}NQˀ?OOk2#Ejٍ	8y`
m
76kNd<8<HZ Ms_F;'%"T
:_RA~c qg}xGCe"/Mm|)wBQb,79n[z<rq&MK9a,]*
5e`pW*A=
A 0ڮs_S g|̯
L߭'_t]97gdt%
>g3nJqiqbLCn uG,WgY':
w[odm&9ӏcGk,MuS{!Wl974GBsOUdls%G`e~Օ\G)~4ReL\
܁ꤝ1,:
ClWvILL5Yop`ImTfS\uva"k23TFWDTdM4]!VSjvIF!B_kv]m3,OJ&,)xmkj`?xqXq'te,:V0thU&32O4'Fjoq}*ױJƚ q~f筠]L<`oL7pWטy ``1U<ZT5aP6K;}U?e:<k嗏4k%k0h,  ڛS
}<&X an"qVDgW{uh'XMkфbN!Tw4	|:k{ނAv&7=87f8pyneM>{k
o[BʂQؕT~VW߇s.iWUi1Ap<a?Cjkqa#M.r1r6tut=-8T
o]I7PIؤw_%X﹊=sUar+4`^!_YLgmQgʐ^ǒL_Yݬ[]ʨ'/螪1
{òz]>?LMSsCM~t;͎,CUgCZPMK?Q˔%ڟ\@r݁\%[M `k#
Hך99Eoh

1.] ,K1|pϮVekbn&Ct5]go:_ayc$$FF![>z^!_伝>P౟518#KMA/
w࿦jlna+}`;bN;H7\ט]qgl_v~,tO,-݄ZUy2#_fcGUYxkL4f[5[s;
LƂ2m~Zd(TeL9;`7(eFv
-ilIW`7/:Pw+UwQz*tۂVЬ
a@ڃH;֒z 6y*br-nOɏg,V:T)(-1z%y\J9t&s$h+ulzF5q;1k'>?`ƺ@®~/=?[&u(H!$Θ%qh	FH[m	vp
V/}wkJ}y}"ja/@TgPg-}~^~K s!0[%~xq'F2/Sú$q#q9gken]"c[*:aͤņD;-+&vm;%
FZFk~ ZWU
ۅf6"Fqcx6<khpȱet'GCQa)F{hx~M.:PC9?5ϫ2ω?<5]F24g89vV@C7T
	Kgrlhe5vC:^VS}7я_J%44- ?ExܮrkU|I|y %.ɷSrHN<;/ƳqS1J]mWeoI]	NFԚ]iJ%ύJpkIlv%QLخazg5xxUj`:Tc{,s=zBy)1ˎ' Tb] )м7SߧLjt=I>@b?SƏXgOGvs&%&AǷ.0sI|$N2
r\q-tzR)8<m( ⪩ ڭ/Z*b㧞OoCɱV\~=N<L)'\zqSM
ڋ_{pMUJ)F{VKhTS*q.H/T`8lFPHΨƕ{p)&EkT+dVQ
%QGyh6!#PsvދEZ{7pЃJydӐH9[vc:NC5]Nhr9giI~<s'}}<k߲ฏr,\ö>1qdOv`y i5@$/9
ih;6ٿɑTK@&?D5TsE\sNES,\s($<XS%gݘJ^f׋jϮkvϮw5
yϮZ]O h1<~g-P73jJf3a|1?(1O⛽~Xuk6CچE1Ym4nj4iBZ!,1hObM} &APэxРۋ*S\.W\EpɅ-,«`AK(ӒA@82Lbj=2Ұ
||}f5S;!.ƥ S4oA8/:7bD+I-ťίw_.Gϝ^?i3ؖ;Gb]҉Ih}N{3!5 Թ*/-	]r}
b ar&#k/)ږoaeԖLIb^Xdp&Xg\yvķ5Yx9hf [suք8[sۅؚC,NkKDS[svv:I+=a.[G6]uxSmo
jlzn;T,}_T	 fK8tn#ZU(`sdXūw:sEq0pR~5QktOm֕A.ue$$,8H?#ﲏ Ѯq/៶Q۵߈qq<IW䦦U3q\	}@+O(F|xG*~?oO2ueۉl]RbM0<?K{a`?ޔfp3ܤb
 La4*c1h_م4vdY~:3G)O
oap0:6k}?kJUEA{ҡ:{PIgo/R<11hqXΩ_>xekme,Hht]ll<-~ki7[}?;_J=FDyO?2 8l;~OΜW+UPy恸CKiu﯃И}ո0vunG寂h"`3$F]}Vu_!te$]IrQ+G
YwIHJk
qI&eϓL
?kiObV]bmWGZn]gv
rx.n7EOx?:9l渟3馣~/kԝA^`ӱh_Q각PԮcxG6vw_k=n{I~Jnbw8,Wt{-yGc
2&qz#G0ʤ1}6I	AW~-{s@bĽϨ8XG<C,$O!9ُѮ(3\fɕcG$gf->4Tc!_*r!}}	vC`~(n/m 'n4d~b7*uMho`4sXفE| ug&y;C0'1ބ><
H:*GқFvH`B5V	=N
#T.XN,ՕeP6d7=DUöǲ;V~4xvb󭒯2"s04w-P`ZaA;1~[<hQNk$
i|+2J#q;+%*fxf]Y=B:%K4!]!ue@"@yM`_.\L
&UuD(h.n4QfM8SP4v
 ¿
1tjFu(|_"^S'bԌ;ai|7q>ES3Z@LFS
nyIϐi6g
X{76v{UA1::
{/n5dǡ~VIAqs`Ƕxq$a'<CT*Cfb20jJ~c<hՄ3hYq%5eaKI߳55?6<LW5'Xؚʿ vNI5Yl,Sm0xOAy'1k0A[ok+/=4`̽I=AvF z3MvvIRTy	k?R%@eT:SdG,RY<CxXdzJ'bvun:tb;wXخVخ~)hquX~(GK#	!IFu(0ʼ2&aAtqdJ6li4	ss2;a<[_lKD,)Պ9񍰌,v=%,#QZSdScq)<*n[]kiy$BLhC$Hq~ r䚳nY ֭	9mML]Aw@$E["3X
d¹lC;'-fg9r[>
.#&}g|g|3Jy5oAFB0CMh?`p]08IBxLvq'
Ւea69lqsT'[<
\]C^cr ־~W_*_Jj|DQK_eQ_yL]>w%lO>G!TwCA&`?l$ُ.mamhf/mГ.W'S?-c]"6yb$	]
/;9;z
~?t_EKj}+p&zKVϣ:o=Sk=wj}^}*]e՚V}	n02WhI.>nsz2G(Z:5dBvo+nN5tYOa]'^u!^ȳ+$u^B#fssmא:8X5i&.,!{5䳬xr\$p
4,M;4tܡu`yd0ZZ0(WYYb^%).s~V,+Te|F@䒗B+[=^4F'Y@=(y5șDt+]+WլSVu
΁OTF."Ċx'.%W*,}55%F}Oϸk`?NE7__q;?8r6XL{p\Lk*i$'I'Y=:kugJLu@#ؒ:![{8MB-fm
ڥoWG:~N_B]4F#
ftw$N62Ͼ/^;?m'հؓv%cnsx{~sx sRڍG!pv|iG>wR]5_hwa&FYCe$bUgEQF#74Z(ܴ!_tM	vg/yEh|׷j]v|?IA[]fw@| _V,7Q	$]\Zy聆}
Ě]	 c	Ct#k-&c/mMWk+8[[a&@Z[aFd󶻷V3ǅzylJ;VK8?|ޣ)pG-"b/,FžS]y`wg?Wv+{oBs?$WNis}~~9wyoK6~7A_AߙUrjWi◱;~I[_A_OZEtP/F$Mg/Wr~E;cߛ8~o=,o_ųz;~ao8~
,~A z7	~_c=/sf=o~M~;~_lDڿDGi>#+=~%S77ߋ[}$ۿdڿdR{o^&ڏ&lDxdB|1/|1?"`ZCG(mއSۇ~t(mA4gI~(F]amg馵\
`pWs[̜@o}To}-8/?M߰C_Ix^U<컩5i:=>}</1F5r?~nmq=oO[\+ۿ:{}(^{=<Žn}?&yRKvq8[{ӶaǛ&!5#OO!~2OgzJ@LOE>S5g?;Ýp'\BjǇ)U@SZkjed^v?bC>㥍nc}=_O6i;W/׷>ρ9	jvLiIۙ
smgnsO],m].ݑ]	vm\?>k~cvq.`u.o^ݗ{7{6_Us}Jpr*53_V#+VW~}w<"]B-͝??<gL_zW[';9~> XSo=m&cv@\N&}~
;9~wr,%;K5;;~VUohRW-?J+ROW*jٿG?OC;dgolw*_!Wp<	P1;#"wہo{7)\0l19;?a7CD2s^ZZAzz;kn(y/kxu'IPA]y	m'xێW	z{b !>^g1?^J|bfG,u	A,=؈%TzA{?`KO1/i?}NjZVWv+/&MXA>Fio#H5@<أec-KgtńbU@զ@bP%!T8TlP]L3e1W{d$a*}<`MhroMn.=WN\9-H˓eaP0]x%]zO0G.4^V,@ QLyV2"G^ͳ
[QMZwxSPS
(I[2-݊]dUl]BoLmz"w;-00zs6g#r<+k	p{wf-6խPZw~7Aiػw{7.~6to`;-<N {dl>ݼU.UKxoj6-uҾ{3yXtۍ[|\/o~f6G6Gl"<ΞF,Yg[?Nlx!൫`{FJ{g3}K=Y?v `>k52ϗqf-9VJ	V;,D<k"eG`yg?e3-\o	&SCo\ALZ뚷pA	}#׽٫WY,G|-7z>/i[%ٮ1cY3|3)7moY+σM]њo8[@o?J?[oin5dd1r
/,>faop̺1_@0kϳ}%i
&^:b2s+OYx{u<1ЭGToyu/FH8Bl5<JjQM򰧷>
|ngO|SÛ>\G=ٰcG|gi#Mϧ9>'6r|j|o=O'=	z{I	~G8`1rO4ONǌ9`>K6">cC4}
s	>6p|ODKK<Ipo+8K S-xLOs)B0CUs8,?Pӵڑqqf!@ƁF>\|-ukLyy6yvk=ڃ/O
xEx]dxnKkI/&x=5b6+9p7ެJ/I߮o[B;< :Gi{A:ˣYOty6L|t:Ӏu&,S/QnfZʗ>]~SgYIi/%l*鋵^|6>~-纵Ji3͢>֌k
q8Scktkl:\퓵=@Uз% c% -u'/^$g͕~G{bׯNuc"L+vq0[XBUu(yLK<  zpaJ}'ia_ ?oɢ ?VL ^O%I{mj?JG|jXy9~v<e?^_R]_xq<`M޻و+7EerdmW/;#O)x>Pm2>OT.ў=Y|DvDuzuثuCo5Qݾ)u],v"s@>ٲ^y!YC{ &
!ȕaV3{`*ďpy2=4/2W<׼ZNGO	
_!M#~+$_AZ^C_
[@>23T"JTRo
$8 oa#ėyD[rnKe
K^NQreO(Wqf$=4%Yœxt[_}$4,ճouswK$w|umE
$"p׃LLY`l&O6@m!aѥrJY`<HG^rgi~yto/xS-yt_YQ\߽!'?$5?soLt(37i]'~9Cێs;Aޚn_qRYS;DbZL`,
O;cKy
/s,fm<:H3I^S|(>o4=)>.]HwˣkhY㉽$'PlsMѣĬʞL+=G *RmwNսUL3ܽsGVOe,Ahkg[N/Lc.'&{&v*'H%Z98-UJ߈ZL|)H2#/T5U.X/̪{7vp?|Z*d4|/Ji K2=!Iz:;r2>,Y2&$Ns@ai&(]9oAU/yE~.d$Rv57#DpYOQ'j"w:b%Bej8hC1BcBoBȍ!B7fBc4~Jcymk
4L
?񠢩o{s]6eObN|zءZϣ75Uz|F7:&VPz>>jJ^J}#%R4J
hٍc(pBz28(8{QQJ֕ާ$4 J@IhQR
~LI[JLIQudl&ORR4%=QRwJ~t<؃TJ'% ))`8NQ8@vJJan@I[(4g1x0#D/BkQn}|%k9TfwZAvoLUϒ|=DVc>2_,
+i&#\N[&&;T*.G_yOE?G%&8jɋ퇜L Y9sZ21l5\0:oN}[b*m6`NOVrjm E
.5||L,1t4DA3	~I?:61Ѯ44Q41c	eay d,RT4+}?A3*&VI^X_rِƗ.\OϻC7Jwnavj}S;ƖߓTͦtn)vJ)I0KBey&g4߈1
u7SJ5XR7'{_i|R?/͔Cp-]鿗.`b&}ttrzOK56脮6do81w6%WΊt.=#TX{
Irx-BbF|xܙ;M)/Ӵ8֭(-8Dj橲iJkjY9~D(ƈ	pX<熭%tX0`kwZOy]t]2,R~`<@Lhp&<L=\"4[Q
)ݎNV/Okx˼
h
5yhBa%G`;on-a*`7%g?e?Aku0ƊW-BSOV{ѳD(np6LKBߎG	%P5OXZI<&+`Թcy%iO?\]vkF2`/NPeߎ0{2z鎼lD-c#SWO
̤zzuɂTϡ5m=\bEA,
Xam=uL=kDϰQLOWm=Lϥβ)LǃLϱΚzr==O'蹓,R'[S'a)3gs]\mk">TOo?BzNz6D|Lfm=C办+	">TOp'[[?vg!">vbs]\5'}g0o?tz0=ucpTTZ~2,xKR}P)}?\.t\hsǏV{!,&gzwe
[3)\ϞNڸ;#fߝ&Yz,gz&tp~nz:iQo8!n`GM=)\k773g~p=kgJ~ONeoO޿j\%t[q>kz6wƅ/ f=13[~?={{m\x7(//H~Kcݮ<K~{3Q\ht~J~qYHߏLϹv^kM&]z^nߗGi~'hzz1t%ٷ][m\x,UHh 	D3xBd	T"J(_%P	16Y-1KP$NT"4E-/ǓD(r!Ht-Aj
.ḨD}j\vEb8MnK\	%VS
t[q>U$D5Y2X9@-IH<F$ c<%Dw*&▫^E"Q8HKQ$P7i9F%6. ])֕+ S*@Z%aZ1Db[Z#ADg*4B6P-Li!v:Z."J1ҝnX$)*I$r8%S$24W1j\|,џJi1KT$D	MF?KV$>k=m^݌PO.1OD%t4b7	<O$RT"1M8H$Q7hw_-K)7Sn~*@4%qwTb.MF/.TXI%~F.?2L*FuK3.1H{Ht#̩_>$tķķƩ%eT-*=j%\b"R%j\b"1J4J-qHL7Pˉj\"^?>@t\PFEz*.uZ=.q,G;_jW`+(@MbJ"1fkY<~,o<w*?z
\z=^JǃQo|^Ez"PkLCؗ^wwkID(ac[z /;¼N0u!׋zQz}Ga C0+d
^ot_׏`Ss4k\LhM3^pAOS*\|kv
4l?TMpz(.V@E4".^ EÎ͙VD3q='S't@fO_2@k|~y.\MzbtZ뉵dWI\\Lls7i\L]	"_c_uUgB']ʾfó18A?*|?l/5GsHC  CFd	:;["py]j63.i#$o-<cWN>}~?_߹ *>nxzr
lM3y@x 	yE(D$	<4IH&4`Dg"9=
DЯV/Ն~ֆq"JQPTV8Doי3dfq1_kkjdoUXL}Hy+`WZ[@\d>wB^9N/%acC/ؖnfW8tQP,Z*76A!!$1P9#OQ|CpvPѮ׽I>'SٛUzI4k˻TlXAJÁTa۵ΠbxWƫqܰjg逇v(krr"nDZ8XLƦOAT;d< jLX㔊0s>_vxD|^dno=ܝ$PiW,H2myd*9,II6A5ֻIw1^
'kT	B`-, ]P+{Hǝ/fҫ6W, bu鸇<.H7qc.B5Ռbْn2rTbX.11LX&XشWbmJ-)zlp9 5
.gyyV}[
bX,_bNi],ö9vNpz1Mӄ\A.ۖpU#=&MU!V9`bU9.sq<ۜ= *c),XNJ|r*ۻ=xχ;M_%+7&B<#ʛƫ:Dy`).2r»"d3r~F6[|Mz_^#Iro@x6"U.KCa`s 3;Cq^s@WNW1mVeb%׌f\~>Qob~H7gڊbsPMsʸ	5ȳ|#([!"3 z~VF%K?<gq.?*N&
x_}""΋RzD|x_AaV})FhFJn`d{=dp:%iكH#~zaNAOlsȷ6ɞyY=xuʖL:XmrwR^{*fƺpƚl7:fs+
3}|bќ;aG]g>6ŀLU2XֶĺmRh }/)Eϻh:)Ε;ϱ{&[^gnQK߳Dp=97RuZ#^u?Lwu"|ĉޑ	ܫŅ(a90Ϩ~YR (&]	A##d\Jb
4?G!zѸz9ۍ
NI1P)ϹqWr,|Q"xz>Pt>VK9Ipn,A$$ؔ"W/e997Lu
P{+UàĖZxHrib	1̗Θr)9참5/Q^髉Tw! zߊAqelza0817I!z_ɋh ,xm_CC[z.Mb}C]PS馮H
ՌڈͰ8QmHxxj*+Ul==s&y
\8@TL2kw㩹.AъGA7/jB1*2%`L]D律aJ]4ҏOPa`u	/?	xc,8$0Rݸ؄Kx
R((Ҿ6D{Ua$Cqb<XYˋG!ä*5FU
&i")̨
'2}0.aV!q)HmG
(v.@γ
谛At*w(%`yKm=)
rlMMFf]21*}h|xt
/ɲ%93Ls;х{`pCr3tJ3P	׋y
Pq/15fG:O*#*?عC,8.t%(gUr$
8
]<RԂMf:ӎJqzk
+\97ƽ?kz{<Km`AY~`9ɨٖ,)zwaB*;5x׆9=mKϩagn`/0;	gUHFxh DeB^Od{[[vfss))Q^Mn~́Myh0I0; v7+oWau B{)8M6ݻ\HugB%gtܖzsj0};O_b.\|L.a]J}|foSѼ&7w99һʠ|& A翦	oaBLcR~\zK
MX'zJ ؤđe#=8T"j&V4_XŚw ;<ǶX)!o7<Xhz6n0qJW3.x8#fG1vq
%|@3-s`eiJk6D@eW	7LI=F)W:ujhjBT9ӈQ	r&!|轍We&z3&_q&wCN 'uR<)~	xjC Jxsy+N{ϋP:c|f:Kc"JgMĆߺc}g1xNT٤{c۟Thl{6Ƕ_Zl{PfsxJݬ]!M.njU\Z
C{PAecs6dOߋ5/.+<gNS̊UkxU2{&Snβ	_W@6c||ݵ7}Vq,>L>;R0}nlsx5^YӖL6OS1@@6bPlz&ÚZ.l$MZuﳹlbĴ6@VF3me8V1e&SUVg
hB^+	YjLDD. `PIcQu{3XfOS`U+saR|0{Y|q3pXygo`
̲5,9(z"V=Llm~E>R(g:ĠύOTBN񃖖/
(GtF#ά"W32SpYBy3ⱡaa<*L.{n-q)_2i*GBb=|-Fυ/ JGlfz٪G}-7z]:bzaUzeh/gaZ̢++;}sp)X\#g_%6~s~oD_4MUՕgtf%o:Sp|kjA]J~&g`Y&퀄K(˓dǧ̊MekfƊ,wMޞ<>hUJʇ3(On	FIaHE2vXǴF6'0<nNta>tP۬&Kh=%3PppR-J2Z ~kZ~jG\:2q9!4\p[d؁}VY
*`eOx's7;6S8agr V
'`>Te!DYj:f-ezn2Fxy[bY[9=ʇ -< mS[}ܨtlLl=ɸӇi8D[򱥦odR<?3`f,lW65:'z;Xs;^X[MtM2h޼M{&+!eag^ȫmkTf1$n7 PˏBSW}cR<f>Ыĕ|֚T%7K{(MU(u!VrCXY fkq?bDo	5֨тhd6<5=2i7\?G,:j<<@Vl)I*N
iumg^k"9j U1Mk>78W#b3/#RWgmԙ{>ӓ@`o&#y1{UTZcȢ~ULNH^ ^@J3X<nՓN&G&wV:n+X`uE9&fB+|֖cxgm9[kVh4;zў,_Q2yw"sX"/.uRґ|ty0{#fAVl>fW2<,0û|{͛Ktԛ$tO&g&j̗ΰl
TW쮑ο3~&Dg5^
=.ྕ|t0Y>[.qmB0f2`=,j@תtMصLFaתqo@s{+=U\(aceTehBՄȗl}YDG+BMFBbex=?;'`+
r2(;r7,k</<9Y𿉻6.3<s?Ltm3]Q>6
PI8<4|iGgc+t/XQ'(I<ⶼxbhlKw
;`A?Q@Ns&D{Tnz[<L?&#;M)3'b.Pǰ-c*<W~x,K\&;!F||7J{ɵw 0.̕~j*]yZ =S/mRiJ?&zE
ewx%Aћ&3,e3WNIS2	)[
tz.LJ	cP<7&wJ<ߍs.3WN {$O6=0ʛ|y"#ʃ	A]Ƌ8CFB=ViHl6Mgsy1/a=џgoB@",Cjg.XDYqcћ1	*m5k燓L0\Frf
$%f'x/0oF]S#X	&/oꂻRK\{/&0ܙ6ySy6
/ǝQ<Sykk.vٱ&@-ob-a4Ѝ2M,9ɇ|.
b?@G	
{[UʵLRrdq~N-M]0{γVz5c2Ϻu	X=h.}EF]lg'԰>#(kxND5Jׯ)]h=ZJǢZ&̆KLmdlWÐ2&Q=ݻ4vћBl3ۓ>"
td\n_emլ\\6ؕ	*XG.Zb3 32M] `ثE.P`.0@bbΐTitώ6ͱIe#eUrJ6ń^Kg}K%b~ԕ]vG2T+F^4V5OJ+l`ڡv*vYbۙ
{A}@~x6_K@]אUK1NI_	vPF57SDˏ.֖Z&,ORQRm7MN܍"[\޼}gN+nd
3#Ѻʘ	(D
.dr~0q3@
<5ɡt.'BGHW׀,7Okmհi>,/U `*6yeu/%7HA*URLT"
\~9*,h[?96hL7]omP(&[A׵Mik*ܫԏeB!#7o0)_O`y>#|M^z:.5tOI]LN ☜i3^y 'ԛ}7'wuqfJc<5!l\CV5Uy|b1wÒՓ#9d?[LpY~<JȗI}H.~0MsH9C0k[(~u$%fz΀{\,CLdN~i71 ͇=뚀kgڱNҽӿn}3^ul(X/)	ufuй<E©|n9h_LYw2,СlI1"mq??ǭ3lNZ>/.M1Y0$%	[R忟{ upGNA|gi9+>ԓ#z
2ĖpJX<
v	lο MBpҦ&clO`
,gm7䒝]\?@Nc)N8<`'ؖhalC	Ԃu7\-८w[v)<Dڲ$GҀ]ಀU:APƛ,V9G?S~`={yT@J7gT&CEK'>/8a' G2e88IGDN˰l=-\HwAa~J}-me,-s'#YBk<Z5
4'{%GkH/RMէ%S~[nMa{.L1b+K07ԭ=LMp+o.D\,Q}
s3K/_1ѻ:\0^^hquk!lb//dӗw}_Qϟ%.rKp3!(^"/c|~GiH9@(yɴ`Nfbz1
aQBVܭB(ca'ᅟ'#C+Z!kB|@B$v7?E%l޵su.pCr拼pjUN @/QЧ4^mYܸ7)f_Bq8ToFQsUzY^߾z.8hcQ168Y{6-d5i<Y$;+.U윅|Ӏq}][gЃGږNK5:`u؋x/QlFrt߉8Ez0x>~-!,B0܀[qƈ-B`R݁!'X\~815󰰤3TZ2pI"abWR8xjh9`,2|QUzK;>윳 |`C(_S8H{U|zA},T8O>7\U
zա;V0~a~
Y]QEu=Ѯzvt/6=Vzk
7(پ])Sn<g}K,Ƃ3zadGM4(oƗܧ6ANHzqI%}J	G#:lo0P=Xr֋zxIt5"<h^/Nh=Ge;@'
;
D`X9ߧCn`xCs52s5x$Wk(jh4U!gPtΗȿC58T_#|iȿO@5J_'"<	ȿOA5x*9#|W#|
ȿ_k4_#k_g"_g!<`9NC/`C
F5x.
k_"ȿ/A5j
ȿ߈kR_oB5fbA5،kp.yȿ#lA5x.d-RU,< O1
h< Og
gc~ 1p~ ?k2?3?1;
x J| 4Mx2< 6Cp7
m| 0y~   4mn\g+
6 /378 O3Sx< 	!~߿]ݡn!Fpzpg|q7=?.79EK"
8_";J~NO&%@DH">s,|nLAZCnE䖒$vr;$GQrOGpwM'w9[Jfr \G=En?!7"rKuLn;v#(#W(M'w9[Jfr \G=En?!7"rKu|h>0?={IVv"!PS=OCפGwVbdC#=V-tr8>Gp21P$>!?G=#",?*ss	r7
1<2~J?ӣd<."8j9mJ|hdDNtNwM_c==QTNT_K	_xm7;ӿgΣt~Fᝏu>EOR/}?:^_K?)B|o#џqG9ߙQGG/'P;yê 9/	gbq{R~񛳇MDc"D0
TEó33L_EO"~氍۩?v^mk2*7~hduQՅUiq	ԞF(}b8tN{Gc7wrz
YMwRxV2~?vN4J9E	_Jaዓ"S}0
=is$W_*O>GQ>=~;zgFRyIOz|ɇW8LDGT:_Kß$:}JtGTvs}3	/9orOW>;q-=W,~A<|<o;;)IM>R8
Czw~ǿAp>DH>cTE=~
Cv~՗pX'7J7࿦trNPrOIdj?_qA((J]pO>!k3MrYo%CgNф͆qgɷ
݄ˈSS}idZSCzJgXQ|.*J88R}e:"h|bzWxWU?$|_3U
>\H*U.	Of\(z'4^1<lΜ(㵐UWrdUչ
NGkr4zW^iEX
Y5c!Q[ƿjjF!UrTlkt5YʆM
m,gݎƚV ŬzJՅm$dUWuYc5o/qUTUiaM5P`ՌW[6P$!n*7qew)itוl++YY檹Qp,rac81¯opE
P5X .fX5uw%%Me%eY4n(+krK7lt-<PeeMkQRY[_e1T
ðyD"Caծw+s90Ulq5VhJ
.Y娪idjѣBYFWAe
X,JX|WңP3zy𖘁I w]1եR܋	R]
4뮬t475kP|gYR^SYrwYLcW?X%骿TKb&P[_Wn	TW]}m$*jAD
kraEjG]MBeC&2&%FgBbMkA2DdcƚZU(`..GH0ZaPTy,=I`IR[%8n@ߪpʫc$V1;Q,$1F%.54Dp
ng t]=t;5TѷJhtpJ>*ɍJb=J]>0Tv`9naVY-Dps&,0]t!QŅmQ c*WnnaZ]-:bd)cZ*3MY?V4:ׂ/RizZ8Q1X.

-

I!\qŀUdg
69PP+͹[V@ WԻ7ԆUCT
 xj˩+UWu}5uid.G0Q{	VJn[[4(OF Q3ĺL}PΝ0\j!2&vj4\UNY2Wy5U\9a2+(%%I([PP5#[mŨyeA3.Ǌ;hƶoqf[d+c4oqf-2!!f5A6qugeCp?ysUoձ9ޜHဥ"u?TZ5O0&C9z7> ֈ꺶ꖊZ<SX|.x)>Qk%;+~*UX?,
RrNb=~0LO0WnH"?:յBs	Vשn+#s24SKI<_wo4D0?L^JՇ7_
W f>fz!h>wicnC~o?%[^m(0c>CvڷNAojꨅԯc?#\fD(1?cQoI?gRL/jUU՟lHX5u5_UӹҘ?UeV3!Kop
1IP}xPI)o2c;h2jq0i'*(?χ
X~UC.dPK
    \               com/sun/jna/win32-x86-64/PK
   
BX  , (   com/sun/jna/win32-x86-64/jnidispatch.dll}	|Ew$pu(uDH0*`DpDe7C4(^xn\V(Jw]Q WｪꞞ$Ǥ^uͪ\/ԴFyzkxcx˖D/;g]ph`K.rze3<S}
W'uTv*}^+Szz>ص=R?˜Ux=mɂ2x't).дWu}ųv@/gZSNs೶uJ|u7F\z7_@۶
.-[O0 BndbJV*]ڐh={P.kN"~Vz4H]~2G7m=iek:"BQG6޸S=-
ڰTG,_|GEx\-:oj^vIwbz/y*Ƀǿ6:vÿ^f׏w fõso±pL؈9yXaNq8'i6;.	jE1Mj@uS4$ݽfb`-Wiژӣ;&17Dj {EVuY<,,	/**hA2ڃH@ыH{{gz \%vy"ckWÓ:πnn[vߛߗ2v(+x:RCqg
9ks9/\
\!FrVsg#9&r^̝-pg+9p6r6rŝ:9sg;9s9ONxwzəǝ~rŝɝr 9pg.93s3D33L=nrs"[B㸳sg9rgpg%9LW,r`87Wf\qsYRX<HyWw僂&Wm|pǚ?UMx{+C
bjbO +|z6Jpm{B.J61&O{+],Kq*O3 +ي1sw~N(YݝHQw=)wSƼz[I2;F2f7ɬ)V^CkiD-Qg[v͔hk~ ئ?,Ƽ?'z(#^LS~sb[NN­Z#N7^^Pڇ>"bY@wԳ,0¢E)N* .nH+yx^} e͹xb|a]fq<0Sz$hӛ"p
c00W*@@??BԄ,~.oń^,Ћ	}ߡ9o`M9
N-kP
wU V}%}"}T}j\(C!_NU듘?"k0&?@K{I4% ,
$+U$)Q 2EoHZ;#moTſƚ)g|⏱ E]R|@wHlğFH>DU ~Y<Bre*D΅;*J
&N<5CR0Bd0vO`eR"ߟ/R~F~VEh<x!$hl<:IeD6.#(f|*ﰲ3LA!%61BVhB+\*~Ui_DFI}BRn)EOQwЧM'zo{}^^B 
^A.B_oQ}D7ϙuGtjd3t4>Ri8)FSH'akW4Vr5FBFxhSߚGUPmQ[
Ox\rL1gՆ_m$,f}L./Wљ`**}UZtw>J}ǪR4ErjHgب;#zU~qSA<mj=xҠ>MiF,4ԘFv*yH=2FU^[_E(UZH*ݮ~<V{Ų=JN-iT:aJ#IAF&U^\&RW"UC*4TZi3q5vڣ#~r*)7ml'==Bc$ޭf xQc۟mį$R|4x
L_K?&BIOnjqz8&~w/krR5Biw]2=lK*w$$lUMN\D_KNdrE*]ZM礨tqJ&N18iTmR6	T~eU0tof*v,SԞiڳS'EKP׮TzF6Y#5'Eƫ=}?Iޝ4޲촱;QsF=ee>U?1U&>t1VN{-{e|-ޜ8"]²T'zeLqJc0ЈxXy>C4i,KFIyFpC.c.Ưb-Uz9J'ݭ
P{YvǏ6ENa(H$*ƀHIMA+nTh%ψFo8q]7kL`Q~]P^nj_2Sc*TJyRKI[cJx*U"ˤRwS8J_mQu;
k.T2c*FJaT
*x4S)&y@MimG"pR$bI]qJ#hw[-;:Ų/ZiJXl,{	^Zv.c<ƯbȜT*UT]5e;{'z{^LlbeҲee$-*Gs
jC+5ُsg
9sܹrzrϝ
|;7s+w6;$wQl%Fl#a:'gmC~ܩ9N/9=<33@ w&\r͝y<;C09{Ϻ]8'S|U}ؚ-LZ	׭)Y'5[S@\ñ,M	_'!"K߬~Wy<5-m'-Z
cBE>YX{%IH8b4&!-I=ΩO&A
|2j
>z~G+Aan_m|mbNV?wi~_.O#hKPz.5ɛ^}J<|5pm5vG0"Ѫ&PUmH^fS6V=s9QA(\2Ċǻ8#$^/Q$ er9U8c±pU/||=O'/\e{8֬1XɮX'rVՏxx1~VzhFR1z-%>w1%|[,	ɬeuEFJc.vypcpkPlq!˺[Tβo7,a}zbuYx=`J4xQ@Xo{QoEAJSk*!Lg!70uYAE Ky|,wv
z4| z~K"8(sk۔ki4 Y@𧎄H8_[MQ<F 2FY
r.+	
X^|BV[a#Z$BOؓ<|0¿3wݏʻ!\0h
e؃<37Kg2Y!8~2VJbK˙/A)\</ .	ynowal\y.%>'\Q@O/ au=_O&cWUV|՜l왘ߚ%NJ`	D/Ī+?x
Ҽ7QQ\?LFHxA3h`??
daw0ٗOo*$c׌,)~?e?Sg҇b?D|E$_uڋ(d
?ZYL`,Mַy4x)Oke@<d<yHk%3*X[l{_ÒB6e,1JZ_P3SS$Zt	?Uhݝr+WmԄX8鐮b*5UE}']|>Hžn$ϛa(K;/==ޗ{y=-<s>,dD`x'N$y2bSNaxC~Q_b

XXͼφ@ԣBK[=1[U	1339tBL
c0

:"UPI64	,_ c|#WtYJ	,G{BÆ:"ܯy @WC!yM55sS^oѳ)Ek'&gx|vu1b
^ҡ\_R!"7GZH()[Ya,T.#[\)Hq lHpV8j+ :5<MepSٰ"0LɊ\_X^BQ/xqZ1ecpU^R[9D[<1殬u_CahU9&wv=WzC^~9"Uh)d2{xM(xJx4jD@P܋aelijǒK(K"@m\MI%Bg[n2db-?CP(4SP<}Xު
GiԬzg8$)r[Q.C%-T3NK܄H3>LWK/+BObscBFQB
5(S{qĹ{ѡ0 >W>
Qs6m&TɈXmA!rS5v9ܺ[5k|-'p'g2@J	߯AFzt
۬;i&6rbWү״9):*
-. ;
<ev%jӏ)-zyvӴ?V8$VlSM9*njNx*yF*5ܶMm,Hũ,4K8oRT l6haI 45ޮ;@F5J9%_+Phu:R>(+)Fu9?v%K>tFpn>_dP -"x?P]845]ȶ]S":dc"L^zejLQX)uJ~Ԣ ܲFmγ֞^P:Ɔ<jq:_)Aq,,;6? s]HI<feT,)iJ$n{ɎZH)b$Ofw
tIʏOմu$vc%qEM8N,&)*9WͣAK)i|uP?O@tU҉O
0e4Ymwc"Zt7c5]wVxck
A@d2D:/	C/
\râ`=~).T|CY<K8R'(
ɬF:аGlu^ڟjOb&nö ROl1EpYnbrQLGddK7#qlnw#A=Ks=yZR8A<<ѳjKNyAM66GXxm"+%Em^?f.tNY5[TFð yٓ,KX{==Ma V0nÂ6AL|e 7 1w@(jDksPJTnTl
OSJ|.|71
>:@wz[)/)lm}	}Ҽ[||^sAg೻F_(	S|waOSC|,|'r&}7g,=#aRm-}]+lS&hħsODM_7	>eh\YDqfE*Ouf2@Z: ܃g`M mM?iA03psg${6w?ÿBAK!" =<Sx+	~+\+A _.CI8  6h냟;487"nv[7A; ?ؙᏗG؛7@GP0;|7	W;0vz}|֏#5Sf+>XG:WpF#D .ewuBDW*CaQ]9y" 0t
zWћ[jYis.h6^z;֪<IsO_~HSaE5US9 7l
SūxOH=<($:*rr {	HөfW[wP%ԎQUxCo_3d7ίxK[x&
ޖoL6#0G>HU#w*KUɦmDPx<H+a?S /Y3ӉD#Mo؞#u\ն}3[]FP*פC&dZ:%MԊHd:֦o|);Z$[D
zd8O%sT+,d=|鶇X}m8S\bpKRo:znK=%N[R?+Rl|1mKNH=KRKR_rJmRH}{ uI+^|U{/=W`gGIe|kޢʗ(^{9If[/#/zvG	MbN-R04qG-|)]&(2#mZX=fk*dfZ<v_ep_MweYnsp3$b7%S?0oB#fīd}K<\&?wt	3=zgNBL;i3{^`o}~7ί29Lwfx=3.=%@/,~`Ģ=T0L.G{eVԙ12Ł,J%4I[ЍmJr\B=q0@OÒp1w5Ic&[,!Xb́b,\_rx̑:RȼXd暽Ϸ%%220
7m*^鶲96?}{/U3y5:~IgsaNZo>O?1R|OWiE[:AJ:ga.l pMoecR>1<ɶ\.rq[N+%3{6r G3|pSpv Na9sKLzuNƦr-~K
#;98{9.&Dh`X/-?gf.4{?і
m I~zeTHU޴qgRi^h-j)`fCW+w
[FSw^4ׇ~Y`.46cmfco6|l|zhh*J'lκ}w8N9Oǹq1#z@{[,=([,mPq:Y2/md``k,^sX@vDL29e,d"fb)+e1^a*Df(RΤ}\fXKKhrVHcf6"Tic!\LZ}$-1Ɩy-TAyLv䓵"RGմr2}^Ò_u"سY$gϴ-t+=,z_	aFGytSʀuhD6OߞL\'sc؄fΈ+Dk[ϰy~tqAǚsQ:f5<se7fA<3p|1e)u=.o'n75yU-ow8~hf웭ZJMu?i9On.7C;:T	=BWCjF*p)RUR>I7lW}uf>xڏ_eLT2`}^3,a+DFN~Ok7]ݷ|
HњKL?qZwGM0=8J<s!}L&Y6<м|VLmv׺$S4ZD"Cv;7ovhR|WX} EfDw<N|߾Us2ǿDn 8jQ"X^w?'
2@50`('TE
,鍒	7/[HR"10ey3>(mRAhޔdؚBvsopQ7{)n2?z>5S.ɕnL[;Y@6<Ds	3.4sMo7>@s<q䊴bYqPKuTL&|.[qaZl/>6\>Ӹ$cHzTʳƢPj(ٚzŝ01n>᥷o.}~طۘāM}/H@Y{ruY:>@nj%-I1w&쁻I	&m"5<e281?^9O!xO>4ZZE#4!^tA;GU;Z}'K(HԃYwٕʺ
+JMԁ	;-'&xx^=1)d:1YX_6JǢ81l,A֞&ks^wuZ򻓯ynR6P FUBYvuKC[*Zt ^1+S98eTb9-Y{Yr
2UnaYUFsD1}o'NLT[(W}"AB7ɥ!LGhѻ=P]cB#,<L_ܖLBuFfpoGAeÖdLG3>߰~+~yKȐ4KøYgm16]g=CټS+GiU(.+ʋvاPz;is(t crS_7M0SԗB5ǌPFPo^	?F.dqmƉQ)d!i7qU
zb2nЂjP}:A6.4>IǷjۀi-?Rgȷ	j5'
KՃ O<	>bZ2eww҉=LEQbgSY`sŞ}Ɇv{{lXvբ_EfЛۢcm#u
Y,ma#װhmEe=V-?R,cm,\Emr[,ʚb ۉa|hsSnIjү۪
7I.
ۀܤaI+X6p1a0թIۺl~AU͓oĤ<XH1odRs6aV.6U~b;1 #lq}-;&L!_g)ˆʓ~K[zFF* Uƪ>ܺj:_SNzbYo˼qy DuZk^9b$/^d8~#l2A1q69κ*sAz
ĩMt_{*3||_5t!K*:pxϲ@Мb4XqTXN3k (
Lg+~}~%G(JbqK('LM.Չ}Xw7ΓZ?{{
'6^*y<{9"gM|&&)$I
TۨZ*I$^IG	ɬA!
N%Nr`T]Dz
=qC	m؋12In3eM3Ka|Ϯp>pXd;M}0ͷYh2:4}-ɃXܱg2),M`2zu)NB]ɬ}f/lX[
c^>n/{v><Ȧ oD46Xl%ɬr=~+?>a(Wb8&b/X$$.`8'$$4GZ+KBsQBA,+{B6A$H^)"1{2|%_{a`&lnqɬMfp9`˟a	X;	.{0*R)#ҏ%g▭n7VN63טwbOB?>lE&dV7mL8O1]ѴiiըӠIh۵Z03{5$YvBmAYJ2]'ӏUy[fks˭ƮZ9j+&L|;O1u=WcK.'	_eȟcìq=#jiSvǡ3*Js`Bl9Gtq${+Te/	+RD9+1[cⅸYrRfET&M`0j5X^	f
x<jGl=ÒșN<Bėo5-Q<*g/'Ljܯ٬b|=hBeD/iN<b^ {N!xG)^։[{ZOJkUח-]v엲wl(qL,-D6z`MK]r~'zƻmjANflsP'(q/΀{79dlmAY|0K^ߨL:L&׀f.93=,Ӄ5a;1JOii5gYNxGYWy|1OcVg<r<By*6}$<qn'{,$b C0`Mkk鋥[,2eURy7G.(
Yol%Saޱ\~:UǦP25LǏ=F6K:6|}7`yHx5J*hMlfG͌QRzarϏ|0n?md*cU<
t[@jHlYY \A6gq=?;^8~J?Tg)p]QhqJݸ8e<)"JpdPFjszX3^P#*N}@Vu(N,%I%:NBYJh0IH\>n<h>!}v๦xp&YceB]6'ԵN|s%Ջ:΀j;i1<L8^aᵰpt"ǝd Z[Ӽ	^[if2ʃCԮ.2c)~ecR<8%yGaF5>`ǲSnlF_hE4u;+cx}UoB~sH^7
"QM+I1ĘLd΅،B!S̢V,ԢgƊ
T4j;Sm1]3^'KG11=H><Fele3+1@2 Z<'5//8ctNbL,HKM<JuM
=N<E߁k9M;~4>dmnk=^]stʦn(q2 gl|8,Mև,btV\ckn#]xapy8jVGVzd2~7־,U^{q~AVK%k30+pYoBAExGg_	
pW5e()f7,\Ak90O[KqCQ6DvՏًg[;u_;d|Ab)Oo5oRoOo-G.Z#`S9fe8
k
(3ϼy|rGӉ"MJ}=%:WSϬ¶|4|uR[YhypNНO3Vք<P_t|C=k91wNd7Usz^|Jx;gvn86J%'Qb8n$:'_l(<LZܯigOo|ƙi0o^iJ??E=0oh.LY[~V{ИNtdnN>Y\{)&g<d48Oea'>0C6<D{ɵpL/W?zJ[HYۗɔj9$9:j(E~v 8,>L>N\gyz:_*T|!>|EǨS8?Qf^ª1㤞GEY^puE?X/#ꝵ|SFzcWºOF<u"C8\
O|H؃~ɲ@)KֻVu%"'t.Y
旱ipWKNHeTzxF `}и46(`Ml(~aVS>.Bl>W}\	gGsm^BR.4Jgs|29MD׍F$,lG%6D-A)Kdؐ$QÇ@ zb
#SfQ$VbGS;[FbIt'ZL)g\`D8VyKXIvD )aK%Ѿh)x:-DCDG}!^+D$Xѻl֑j#lDFh[-H #zr
ǃVGHkVύM1_>;G}Vl`-'aU=CXH?lp
q9*E4'?bW8zN_鯓迒cV[#3U-
iYlCb^_s
~
L=~&!zLw/i迿Ȇ~"hߨҿkJ9FIC#+ҟIC~K a#xJۅDoŁ-~0 +Vw.D[kJmi蟳Іi$lU?牷r8m@VR{  _	;K|=
63oO86N_˷zfp`)3LЕ8	!בW Z'fWc.9OrߓF٨25UGsڹ{{d}3\5FXcn!Μ\:bG	a
D_SZK@bni>kCi'11WYjsKKR5fJiTSj06WUO%\u?W=Xs;s5.:sEĿUc?smC*0/8 Lso
ǘt8Ɯcn'1W,c9+Vcy}rsHyiTczgUU1Try2\LC1{s=	9GΖ49ۆg'!gÜ~8]̝;gqv'1W"c1W@b;[9$_̶Q(2x٤z1W^U/1w,lLWbl5ei#a*"~)_闥01Y\+2\s矅lgIiTY6HX<GzWB܁LA֘fMYj̭%kпb
%$lR?eq~
_..1wP9׬NbLܶ31W܋g"ۧTc3%uiTiE$#xg~WN܃CX]8s
\!Tcߐ{%6/AaUKx_7p
b>̒Nb."csEԘDl127Q3lT|g>W}#W(cXmβ17g\ߒH;Y$,ޤy&qM~ߒ.ce03;
sgcBe393՘;s-δQ 6ު⪷r[۸d5b15dqswϐz3l/%am*?q:a}gF'1W)c昫Tcj=<]rߓF6W]U?Uo1wJ6I}&(F|&*Uz]@V'z㠚Gҝ$#dk+ O썐s o k$*镐^+!ȳS 7
Dl %% 闐~/!~+RG3#
dV % yq
dA#@J%dC$d@Hҝ Wv_& ? 2@%d5@^B^Cd2\!!吹2W̕ ?+WB&O%<	@IYrCo+,1 !?>ru!	R CuK| ΢|ih1BX@ULa	V .|)
yAC7AL'Hc8d,V %<-r.AFr䧧 {N!	Y@HQ EpMM HRY*!KR	g@/g"vr4kAI2LB/GRdy4QB^!#2@F$*r*A@d<CVH
BBR 9 A>[O	ȿޜT +%OVȏ\C?_	Y!k$dY#! )w|I $C%0Y/!z	9 a\2 j!):	N\'!{)e&Acy&A*!r\@M}{^+OE@0!* ?J
Al 9/y1AAVer9(!7*%Hr!s6闐9dlT %}e)m}>yS))'!&	y@zS $-"v'q("![	9 vBHZN"6NFȷ&ȗ'ΝlU [%Ϭu?(Ҳ>AG%Yrܦ@n a~| ;Ad{%d&!Kr|
gES o#CRW u	Hˁv
(!!sv	ٮ@KWY#>3rIηl:!OL{$r@etJ<@{JB~!5_H7 I|DCC|+	R	y!JH镐eJ OBv~	W 
&1< dޓ'V %HYyD'!s9d@BȀla+J| ?(@7K)!
dPBG@N!ȳDȥ@B␹2W̕}Rn)(!}J;H )!H/47gĴp]sXaNI_Q~CQ_>༠Z&$͕I|^oba}*Mn#næjDneUl-[O|yEu`RzkP*J4?d3rwY_:P@cN@~g?$63&y)ָ$TjpnC'T_;,
aG՞9MxXT	1ڂP laת7BiAA(\9P\2[օXasE^qgR	Cu19L_;[Pp8A}c^2Lo=m	5]j=re0-*
zSYy:rP(/c|Zpi߻m\/a{RlX,Ҍeg؄uS6Mҏ{=-^r~aL"V)SE4c:9ԅm&z\xq`M^Q,
;MlT]X[s

e-nK_{2e˴[P=Y,ݫ"ZG"VK`r00\#uƛ66KBy!%MH}e`lv.۾iOƞG5&(8,xTتŔew2m؋r1<_bXCj([:kӇce᪕eZtjnc<
G|yaث,RlAI4Nف.

vn#3{[=]H3aM3^;
׮n.#%5Bu4WkӢl;=Go.gچ"
g
gr^gy]*16gGS8g;
0r^oy}*?]ގ8R8ƶ
87r~rs0salRіF;S99:✛9alLRh˹юsc*s#y)n(M87r~85t9v990`nbǹ%;a	T<ڻ_UQڧ|ekb+^Iˏeqcj$&q!q])B oS%4fŮ$vcl""N
v_ے\4%ɏǊ^VQsV$ȿbAЅJrWOuOON]II~ܕ/{6BPovcNߌiӽ$:]ܘ=.th>M$CWM@.񔋠?[27Y aԈ)0iX[e|!Uf(or" ׉!0}/v:aE

8 LfTqL>A9t=$(Wf!)_46`7?<>k2^ܘ4Eb!tbJMJZMذ!?8LC8`p&Bx7'2bWwh"Ref35fozRӫ5Qa3]6ѩJ᪶ka1B2OZdf
84?脀c4.0a0Տ][yC/ }/SM;3M;]e/4LRӚٯ%iߏkښiKO\l'${>ִcdղ6S]-C1~_m\f0;?/~vϻA'L	DgC'ۜ9\pZt0ó!VRQ<YNxqc<=2Ocn͉E*D3[>(9VӞeF9`B{JMB*L4kHHn%KXwOĶ${Ё?ܞ>i#vGndFOSMgpb2\
@5*./"]'ych"<ne%bE=O18z0P^u| 'qX8=B$ĐWHbHp@erK<cd}ߠD4C(oKwc-Ni#%Zz,XP&˪T<k=?@0}w6FVzq,'?B0B
'Zxg|:fmdKF&5Q%eAUZv%lO
;D[9
zEF1_>Mg[=/niUMM61jZ~8s?l(OYO0i.k %s<SnΜeX0fN19~l訁.p9k8gr`G
k3\:|x
ؠ]
"zKV爍BnPa dnVcHI# ZIȲ+#x篰
Z
nL@y]\'|qA
V}2~FbY?8$w
ץ_nZNuRn!y[CDV }jjmXKYL}-R/Iwp#"{eiZSuRE=EQ-z6RM{ztm8v6O>elkʡ#%h3zrVS݋\雇ߣ\^ӗk		gvwZl"3 2yӋG	K`7=eT,B-S6ng?,N,{4V:4֭mT()%f7C`b7RWoqlOEjj>S
`
R,[(gWmg毺IIF3Fm#ia"ruYq4)S[{+	v$7%Ʋ[,?+RLluJG|#ҽg!*C6VHV>tCЄ]X):|\t_af*źqb'WU>_y;i	)gARxr^
N U}m`Fʇ~r^2N(2	av03t)fX3Ż;1SdfSܔ+M0WcIF#n
zqPT?EԑRV0qlA.R
u`pYΚUzlŔc.˓4re|؁AD%;:&RU><Aaԛ)au6sfgg<yaƚRCtb5įvTOϳCxmf\ҁw-[=OW|6v4|M>}%>je{i&`#k٪x9Fz(LH=l7m_ʝ0QQ=bʓ| y9Z<(:aQe>r0+k@iaH;KḚx)ZEHt)௫gC=ku{5٧i{=^Ýw{?1H`.
8xY4pப2-C =qI c!%X/alBdE0?a<l9A~9lJ-D5x## 9c!gIɇ;k7o[<O<-CoDTXK?ok
r.Vva-cl9<[>[T{[	wdXG̪?U_? yN̫!yx>h*I*9~-{6[8Jx ǔG^dTbFr4BnymO#<e583GVyZt/߻R~|HK 0Q!-:,M=a4%XRdLYJmE&ܷ~Gm=Gk|ؠ>Vڽ%4Ur旃	ZѫˡlM4:jejgjS"_=)r+CPED&|s<X'W۷)4x
G6QL""Dj)#-ˊͩl?Fl7̢@!x5}tH`oB#ܷhcKGVTeN_;˥0/~[:]}}L dS%\QO>)5T>$aۢB~t I-*0q Y|<J	>QjvTc!iq0+G:)(}HkD(i]:&!JZZM[~<pr]l@ѕ1VLg&lcM/T(ZxEp
s8>>#k'Ԅ9!^5Nm[p~_FH~e;AY)"n&Gp"Cje`q[P`-CQ)"{YI4c/v&
	5
k
ibQ瘣bE
cpLICF6`af~#Shi'E	Dc)4";-(sZW \=X Pb
18u)R@ o(4(E4bV9;}>.hoHzIJLHj-
S	Vx2p^V];}K ;iF;Heg&fLŜd?-PhmGS
Z-ƨN-kB3^`]%<+%>	gH8dVQ\ǖ%(Ȩ$xcX1,L9ͮbZ1ejz,Ccڂ9|WϠ91
帐a^X_u|98Y-&
M}:wuSg;	QS!r*!-fy2~Cx	mvίd32[ғ,c}pIbگmM~c׉f`zھ<=LemMDxX$QTVs(KJe8UXhD_DˏM`+tgq}b.U>4m.#ơfCو]XNu,XJQs
?4+.yxv/1afj+ɷOA\1xR&agJ>]~FM]11gV=],*Nj4bZ8Ԍ$>COպffÜɓZR<q
&?l|yCy3,5aYthW7Cgvоa4D/ǡucq2.cM7O~uϡ5,w}X旬7z1P'Y )XDC*dޗe]v9!R:tk}
`B]Nc4x9!h[C~áLrhxd5j :͒	J=':Q$lp?I,%<J\سD'G?ѻM0w9r)aRN6f(aȠ1mts|4g[2>_ע0>3M}Xȿ`~V?,yQ0?cG\\щɬKsۥUMX&cX̊01b8NIJ
#12'1v͆;=\bIȑh@heg;!d0fz:I_u)rH4Oj*ޔz A"ԸR"Rsyz	i<䜼\P~rO-4ehV]Y.1L!81o0o	=`K8L\2xO^7/3&v¤zH`	UmNyp7g<CK	0V=aRPEOGo D6UM'жGW#4.#6<twu4Uޜ@}C[0<Ip518pZL+ݬ'(gcƑP(ݵkG۶59Ah5zdwP<zH98M	g'<8D CCU-*&z
90ŋ"'>;LȠyjx]uGaTrf fw'ɽثo,H>^k?݄{{uD3|,`b۽I9-DSbtI@۬gTC(J,7OUWxRB{wVmeo%Z0O:e:mAIyO빏<6Z"RBz>'OuSm@nISz%zKL~:3y2WqrD/ק Ro!
6`&*璋zq"2&
=.`ؠ-05mjVLgE_XHYNpzE{HsZ7moG-2Z0b~7;__羷2߽0>ew\#=v{:~r2-E63,dm?F<0f	HB	^
Ny?gknB}_*!8bj`'<I 8*x,-\,3GZ< _*bHp`37J9^.<<ҷJLuc  W[=J˱Wŭn
/_(c!Yp// bo3MS0_սaqC?9eQ9;ۍ`k!A<c6rDNlňj]ٮԕj
3Jտt:}`o_c.,ƥ@*%' b84U~x)l_/eakps@.ThB^6W}
|" rV_ۃls|ߩQ˧LTzs@jW7XSAk|נ{p(9pnJ׾ (d%ycx}̮,ǚACNVbͻg+@qF[-A^'0,7oȗſ$Τ8
Q~,<s8V*Ϣ^bW,\,bN,s6 yVY׋U)[-=+6Z:0@-?\9`Eָpvt7οټ9 3/De,$r8UBwRZ1y'ӮU `m<^akL{dԌ58]NGzJGv̐XޡaghӉa/+/2sLc`;D&~	63§4$P[,ϳ1(jq`/(Nyч;}T|qox:SگxxjXgIGX/@C<!2b55Q
v.H&$DjW-HBj_Si
%T*Lk=pj}|*ʠhp'Z3 fO4l(VnyuOX}x&h*Ụ	XTݑGgT2AMYKꞶyI^>}Q66ۘcay=!Vd^ʞǲgH
ǒc8Xx
=bFГz=<JXtGr"mҌXg5j<^mpF^m5jDR .J?+Vi7j&QlwJ (E_SFYm5*Q&ifT[9Tm5pD;(_1ى-1jNHT[! RjT[KHJuy`J"fĦ
`aj+GjrȌujkT6Nj7-QhTmEh4FJ	vLce{`W[}#(jW>jKU[4MF|Oa([		Qh%&.¬l0(((`D.%f3n־ԷWikZw	[Z5bYWk@;n6Hydgsۖߤb;Ld3y=:ٶލŴ&Pdǣ]`Rkim斜9-1Ə9?'e|g;jAg)hǥ$D3h1pXajm2:snr..vK5xh$%\GLSA7-#I5}.=״ծr̍ΐSU2_|5nM4xs1%{/E M.mDUz_2XT֣b	Le2֓.R㡋UFFRpߐDc,UH%EI
lKg
	=)\!GIr]\I(Y\Ad.a ^=O JK;!,/ v+2CvF?ՃӉ}Klu~Lh)ءSh1WCI&ϰ9<Ε=JD 6O,Ӿ*j	vr=d$Hw(Ĵ#WΌ1g}X
S0e*[=W۴]LZL_>FG([%.kL.jpLGDxEiqbvU7퀉M=qw1sUBLi9]F7}uWOH^csVvHuOL?i˰yiP%": J%d
Vra8&vTbkRx,=[l3uO7i>9\:ˠ=4?(`3/f)vߒO?j?8CrL4m޳lRJ*elZ3hb<cS*)kiLEɷNkCT항.Ø->E7G^
B&nqU($ЧރbSD\9Sߦpq)b~>,%Z,x.~	~șK&jݖA@ "Jo·l@Lc6՜q?ι1ڠx,8A|,R;n*:
͐uĎHP!vȄ*Ⱦ@y9"mˢus598㡑o0;??8pFoqn-H.pMq`FW	N{[qgWM??Uկ0
Ow5t:bϖ{ޘbNxFM9`̏3=
:-!?ߗ|!ЍsAؐKj:QOrRf2
jN׭t6[82F-	u2,')p%CSJ_Y|ii|EYF,+ ͮ'ױ!_;ެv6/k`j 6oa[gVd1JI$Fd:#).oS޴Vjt |\q~׋q!c~0b:L0m.zG*&W&~҉,Um#;Syr2hDٲJ/ǕglJO, @"kx(nIUH*FLd
AF@4JT'*מR
$hf>`FIY=?@R?%N~l.󩸟"S/9Q:;0aa͠LZ_ɫ̟Yx8vo~uhXFV|@r
atYx15ƒwꭂIϟT=]`{f^X:&
ٳ Wgs޶|v֜Q
"=9:KuYnNqMn\Pn+;1/37;umF.f"F(,hQT	}{466on0J5ZmiD.Me#^6YVhre½ɻE<eN(kY~}աi&KEe3_SB摦P%P=3umT.өS0#L7>iQ
jTr^Gڑ#^`insDaS搑ǬsD25yM:Ǔ+c9 90s$G[Z?'j.lo7zLF̟tS6PPvOVzeDCˤxT
:zLEM:f9{.^~}eofe,v!fEm긦q9>Se,	SLM~JFI"F}3CR+S
|1RmγE4.%'mղkԛWmlof5<DԌLD@!cζ*@yi$8s8Ԗ΍l#21/:,$ynwOΕ~f#A
I
Hy#'#ZEF3Av雋iPIC_ί/l];/w%pr\t-CNE|R<L^F4Hy*QOb3*#FxRH~5YG,rUyU!Z\ה8,pKֵoڹΑi	gh	] јg6[ʥ%fARIq֨zc#[KRO7኱6]W>Ӎlg!+jzǑx;5D~n.iRlp*zA/ͳyI7v}CmZ(eڤ֌a;EByml"(dM=fAYYqi,>
>o0)?FFq+eç\3O2>f7Љ=\/i~&:tdI6wς+ʧ
fAts!J?7Gx.if#jƭe3V#vI7i2ӈV%˪phY g8xBWg1f2f3˘KڠL3#fِ>llȄzO0fOH'ՐZ|Gr:7QTio\&!+}Pblj-ʼq|
xF'K*ezմm䂱w"(qnGo7M.uٛ(#t6zz]Ď>#y'D	X^z[ޜ#6.)~w-Z4J
EmXŦ	ٔly5=yg`IF6tUt6mr9XBҽkԤYch^a33r[;W[˰hZS;גoܛNjܛrV~['n>7ԽY
hsD(
̚@՘FIcZ/Ǧɗl	G4fP2GYNsI6'0\1;^fk7$OjZ9ӒԧEj_롦\$ȑ缞@kӫAu.BW)1AZ262z3JIk0g\&"Ҽ "Yn%wUbENKN/v7[Fx>Xzзy| gqfMҔvG3!1SyC_B<f'4s3޴+{ђ)BJN2Ā<z^KyK=Y%lY10!$FX78F%,rN(Z3Fߪ"0as4
e_@I0i霽j|d)
sTl_R90,Wq`8;y!aGmn*Mwf~"tzG2Hܵr1=˗Zq6pttSJ
ϷdT5-+FM2jzȘ>ot>!
pϛQflRXWؚ9~$vŜwM21b@3nsT:LPEx1[	pM01t#xt=ĖT˺zU{")L6fH&9}^h\ԽubG{"qMOsl&t5+XɖɕYG(˹\_o3P{rωV:3ުX1R_e_J\]YOhF/ԣEaҝ]efhѨc0pi&
CI&/f6ЂDCC5}->6y}9ŉ3oZdK
-$jh`Z܏nQɇ<C77 EMYG
߳mh6ZTDU
-,Cdha{cE#aТqLC,Ce0bE(C-̀Ef(h͵7.7h77מܪ";+-Av1N8Yln=HsQ&J_V93C`$}p߲q
I6V|UDchLSN1
<DA@Vʜ@[~Ea["ߠhw~E/tT&Dެߜ\6b4e~8KZHqˍ]
h
!3JnchRD$="7rR&Q~է!)sȗ5I&3O$KsL^j]nnN֛W/e)Y/}zd0@+FI D#G(?KX{Fgh3\2
s{IPbށ^Fד>0ޠ%J
̱$]}Q=ԯ6SSQ'Nq9ԪG#L5JQ՛/<,Ы#
vq.^H=KzaFrĸcc&%ƈ^Zkv4K]>AFRhJK2*6ד}>bB ~O&Lkce.cs)ctgoUtԷ*S.XLT 7;Z8;?_̺EJ =L(R{mw~CW	[GKlWroB/ SX1͸ do}E {+u)Js\FmX&ߥaio=2g$HևdȰ0dWuB?{Yۏl?la$0ɕ1fQe0Gbl=)jAg()`0G40\"DFΥ
1Hƣ~EgheI'rͳ vEw$4eJ-60їƥ$;#Qbf28zaOq8pn*3+{sgun-'g@/	Xx4׉`h=+m!R,f+ 
ˁUJY>;ru4=sr:dO |bs0-"-5/)~<՘̀p>g;*u]bk@j{f 
9')"vl̥$,XH}psƱ\eX~6N0Y+S]_o3i6+TԘylm^XT![i6;95O
,0^#?@ullͶ1ptT`ѸF5mLq7Qp˛KK
]%%so	<[:1[,LWu17f0(v̙rT=]c6\bN
7UDwR0g7K%rJ3C?B:u'P=?6u=V5w+Km7B_=g݌'S1N0P1UL
`>	{%
+`{4Y
>2&6g$G$#`
䪘UL,S lV1U=\6{tEaAL(~&
o2@׶u~K-?ϽJZzsKv1!LT/vdù7"k7gڗUe?L˳d-t<M?1urY.ĄF b_'qLsoCrc1'Scn|;׬f~IOu1ID%ѝٕhʒ_oZwu21#'!jNN1iOB8q\s[N:7@EiU&Bn@%]|rœى:Ųh^oF*.4~8*B$$wՏƔ6
Fvc(+scύAPngo
c
	=OY̭ݫ`(%\Ӝ%r}PGKPO9
?.! )j8}Ӑ:̒wC0
9}o9l0gN{ِu_,9'vh=VҲܓZົʀi~[o3OȚ't~sl3.Ϧ]D ox%bztևϒbee4΄3*(nJÌfisr@~DGr0Β%K<Sb=F?Y9Lq)p66w+ͦ|oh䙸e{j{]m<θstyρc)6[qޙ+܆2J*Ȣ7N73lͭ#&āT>xJ@핱)~zw)=Kb7H<Bsv~N4?8Wߠ,ǉ<gcOV7%TSBND1)S9!q4r>Hy.;Vc+Kq2U DJH%y#q>˙3|qK`.^RRϦ~dp(c%`z쌵CKvjLi|6.Uɽ|1Xeq;g<;\K㷟H!~1k@S2~6xaA?Bl4z{lusKdOd
43(Mu9뤼uzL8.*~;>!^@X>S3:94Y[,Edt}5FAbFKV/'Nω[]Q9ʠ[W5ѿ`A&RUH4>H/k-Nkzi	ȄI_bv|ڕdr2V!$Gj%G.Bڬ2Mu ϣhߝFt<9"$[t_-FY$ RILL`e *g1P׀_MC>zz=GFWٵBѢ, :OHYCkQK
fcòT~8b/ۍjaݸ|kv1G0}uʍF`p^[-W E9VdQ5$
.Kx|I=.gٍz7`׵$`d
vWT!%~I^_oX[ YYW[zuȃ;(66AAԫ+v'y˱{^dHV(W$	'XS$ D
Ɓ)Ɖ!:rAnb#5p|!*J14D~%pCm6P왇r\iK7~")ćmcyH5%RV\?:(_?5kD@m[uoT	qٮ,յ]}++pAIt8L"d9ódilޢƝ>;\Ueq"*+L'}gҖ!T
g4\

NXI[čێ_q@~޹XεkجP }\ߌJkl\fGoSCB^bx6NHƋs5

H_=zVGҮUWx5y\
RBbE	hٲ5}lNp8έ%rֈzqIk1,9\yI3Z/oћ~[ӇQ?BtQ3gU'6rH(s
HE9>
F񮬼Q\/<,[J'A$.xW
mKN#k;vJ]bn~%f nP\P0{GsAd
V~&9yBx='oz.n0yB:GP$َBUΐrNّH<ck<u4/~XT~6?]TYN{Q
=څw|?!;SQ\_>'mPZ{s$HG{X9UVTo?z l'7/jJ :ݥ \Nw	Xlbdᰭ?\
,L[
XrF  -͇9Сu
p`i薬
)$L9=d{9nWo֨}6y=RVSzeEYyN}4DEBwy5Z|*P3-qAy{0*EκW0Uun	+g_]Ӛu`^F
|tWVNL\GSȩW?`G%=#w-Yuy!L/DECCLطΤ	ғZK<
d5sX9T=J:bj]
@l}l߅#d\ 3qOyQ|^&XC!}M w+ퟤuQ{awwh+bs+T')+ʊ-q~渡Ja3\ycѷݱ6 &>8&BRZ8ߝ=+;쐠^`3M]NG/S`dj؅C 
3#z%Er+=h'|؉
W]ȍ_@Ra:Gd/$i p;W[ h,G0k_`ԍI5'Ef~
?i1:H; Tdq<xi82'CZlQ^L-8ђѢDVjn=TJF_W1$VR bB(k
ܣ/ZP3*Wv*¹Üi-Za{0ndǝG7<t}x1:20s~G9~I18{3ئDb>Śֵbaۤ/H(7XU;s~Hg`蔟slf2L'tq?h^[Ӹ>:Nƶ:8~8]|lt
t[
'ah==n\r /iO߂K{r@yд_B!s[RYi쨦>FxHZR"<_LFkWbkM
0;Wk| h#[Ŵf]k9l{Dmw,~c_*9z9vKRWN
V@|:7
c8PPΐ[KN۩j FS:J&FB5ftS:ȸj'JtP9{espXiF~R@DnB/+ٙqȾȄ,l(Itl}®-T#ř3kd'%3 nP2M
;2bSs~@yT^=J
zt
F!Vw:NxZKKOdO+[@lf,o#u-$I>~tM!RC
>Đwߧ#P'nqвsxbчdkå}(̻=}PTP^;fYyJz+9_G/A]ŵ %4 Bf݁4O zAhuXn:EǡFxv
Bt6}sT!n&ȉ9m^DI{8QhOeȷ/R\U+ӜTؗ\q':ldbߨV[1e<>ʳ<h|N?{<ND᥈cD}}9|z!؅uB<9J'}콤ׂlە=]4N~@ai ,zQ
kF$7 |{%mjm
l!J2
ABSyŃu7/;11ANl;B"mi,GK)+\N~pa_
HŇ{.ݵBZkYL>USL6wyrA9<NXzj;<2 /nB@qʾח)"~d]H){ew,
NVTGZ7-wHͼр_-qcҺ÷}P^+p$
~ˬv85Y`"V!r||S#++BbYT넀YoX%wB{oxz@ANz88.ewgn;} ^xzg{F"~G|FvV={vk+ToSAr}~=c9;7xܱޤ#=HM! 	3m Dʡ)CXEOx;<( D"@ԋ: ֑Gofw1BJ?qq(OIBQon6g*Bmѳ!XqU%q5q@\.	tՏtH[*4qkqsٳA)^r~;5U 4+
tF[x>(][e
!0Ϛ&-IqKq(OPi]sðڹٷuD5K@'6Ħ޴@@\܂4|*G_lyM\ؿ]֝?Zs!̀f$R@(ƹXUx
U'[-cb
?]-9n?75B|w;$}>6$}u)rk|֩Ak^a o)/RL	,io(Ft"qn=έ8רǱ.j44DwXv_+YӼ!|;8_|6_z_%yk;rrk;1_2ϗ2e i@vj X_Co-d̐VMĻqns\s~nBU~V1[$5bv2;I_U 
>s]ycιKs>:
m
46fLCIJ 


$(B>a奰_@ٰsS]GRbtbư4{XvN҅ċ-	Y#^,ċHU+\6$KP#&c?
@d=D1ҋnBc\,+1Z+zR]{LS{e1v*CN1DW$Ԑs"}eJ?+qvOCW>!f1x+L $?7Pa]JrጆR|}v<Ypu#osAjpVd>R.\La\ VY**_WAUG-d?e_8Qskӕu|ö~
r|Ρc9uP?OWs#a|'J)s|CήbN/g)͕I%Hב)#a]u2luʭ:岐#A{NwxQ-\cxlӔ'oX\3>qb }B9Kl;Cʟd5u;965R#oD<On,J=ٞԀ
z?R~
):H9V^:rk鯒wuZ(BUJCbTRʋH.J:.2pk
v);VB''Kn6eH(
qEJ Ag%e /FA/LL̰"g,㬳픴A(zή sN,􇔅ސ&bFi9"9!UKKN.ZZ*ҝ*N:x/@}{Dߐ!mLRdՇ|͹;uu
=]P]AqЛb,	ֱЈ;"vb=y]-kcTأuJsK}77;Gd<t9Bcv	ʱRYV ;>XQ7d3ѓ5N'1I:9dm7ªMWk!(d/Ֆ̒)ZzݕL>9eݕuWóxݕ8SZh48/
8	2"9)Q=AEj		4xwPA>y?G@	W/Әq|8ɼ(yנ4[>̾L8}ky:Wn.:=29q\+ wLT#W׀䯔n^B؁t 5DGH+czUC# 6\)
;Tl:S!VQQlV}G{+Oܠ9/pH\NMaØRVUIMo;N_zJ /NbQbkKf7紂eP:Xr췠؈V+*;s$a{-BuLcJQJ/]BbAkY8Jڥǡާ6]bq
TM-2URLem(k必iXXumer%CkR-& MUͨG-wLΖy΄Je=ꋟaM-('&tM3\m;U_s큜#C:V_(z
{orGifvx. , A@9 Z$D+H-c(uisZQY1|%$ACup[JE
O"X{8{Cȶ[f_osPH	Q-Biz lTY%>=/pi ?Ф#Q5\Rb
tmkQ<̣.v {Bʱ2PZKCWWG]2M]?bz⡄k/Ra_SiJLl[H?+QRTvH=8#2^kYs2Y+מծ:-Ǿ푔dZ)hW R -_R	^b[H21+ $-_@ZD%x_<?[ߐ׽Gd]qq)ǃbXEAt!N3%3]~XiAeH~?1 !I$WhE,#r_GO@^k4bxU\Ͼ2ϸipA xpxLH9:p>V>*u\5

Dmu"7 RYN/oh@Fǌl>n!_UN
7_$+qXV^j^U{9PF]UиYt+h] _J㩍  R-4\gL()VrC
,U/ʂ<ӓRX"ԅlfH	OE[>	p֭'fJsVH#th]_B^#CiRb>d <ml8B!_Vhש6
C+aZ38`A@bz!䂝qBi'i@HiB9!m9򽗾=;s*TUDfX&{fPfXfѠu7 G
	rx`7Fx^u}
mbci>$AMPEXLM#
cLlT=Wy7H΁M2Tuf*>rp_<e
-	FscЂga~lb6l2{\@ʿͪ`exɺ&lbh%6r<:.XCnuhx@Sn~6b_	8tPY nΊ$9}58g :Flׄ2+a?)iT\iBYȶ_T׿\T)`o3M	XoaC}N*WdٌUSpXIWkRm="5kPL0wOae[㯹%v^Ψ'&fb9e4|$)pE.]Vq 	_FY/
g9#g:FĎ2:sjD
)<Xd'fL@lۚ&LpđbcdJwd/HU]SCM7VEfӖyu@trv&'G;N?ŪAU_yK2>,
G Y,SMv~`*"̔*G5p%-E Jghɏ C'?oA}e1]̨m_j+Vg
CM-N b%2*'f{xcvqЛCHF[MRלޫSF16dz2FlLQƘ7߼S5_/u8Z]!4A{VG6FC'}:i4u6<J؉ZU&MKꔽa~k֖wqFy@
*ԋ鍔4ō.޵ w;Wu<͸Md#az8yatGO࠾>^0H ʹBwࠧ_N<*SoF36FT,VgY5ت%yp:6;Ll"Za~8ZuZu
Ljԣ VFP>aWy+ғl8/p*fȤ_V>Ǭ9|Ȋ"ڻJ~JNFy;VڠҫdfqMc/(AwphT f%!ErnItفJWn3V 7JH=H(Tw7,>XFj]	UnX
@yK.*JF@+tA9%  J	^Y9fPW-ae:$3D"E<إPB̗1N.,L)i }YVmHLVw#Jm+O
En2!FtF/E/$#B
NAVKv|w#oiW
/vϝz,`Aݑwvp)3+SuE8!0"b	gDOo2Upi&B$IdJu&SׅʋHg۝SϦ$
郌t3_F6PHn[["iQVD<)SWS?BN1U=1DrQAZHWHQʳXp(7O`"j-/۞UX;(5*Y[^ΰyF>'Ж	:p4F`Ӊ|]-*mշ{HQ4q
ahY,(Yj]ʝ+#u 2kIyW@*Ar %87[C"&vbo̔c	?u'1'1 {]!#Aj"G[gB괠o,ZF$NAz,Gi3dS ߋk"z mW`M5K!Á{50!:@+>\R%ؤ5+wJIV׋nsi.~\	yXbq$t]&;@ضW@+rJz0
ۣ|Xs0OQda{HPpQA)
۫~w(2v2WɌqa%]a[RNp4qjwP֒aNfj7[;Bq$(Z"g_RGAQqCM'㠷?Nxe'iTUaw@]מBNxkŨ+B׭m$#R!fy@io;I8;lZL^;9ܑjO^VfU=E_cMf&}bIZҗt F	(WHcPr%o=&Wn>JzS"D^#_>!v[ ȟw?M<DK0'K׭ucee7"Ԓ#Db$;ö}޸BzNXz%(yJ`쩍XÔ\aܷgznzPV} aaf)LަGVr4qE k4NN\S,"؈ڸMפɱ\ c5y=#3"VG,L_dvґ	Qq?nQ^,X"O/ͽP6K8Hp=~R[KɮWzhz9$}6Sfw#Y++lY=HWGVH0Exȭ:D:\!r6)|5[+`IikBWjޛwKL>5k1:l!rn{~¯P3SN̆
e]0
@
^>
Y[F' ckï9e]ړ߀:dL-p|) uvH);0|
!ĲpVB)c6lQR,T*ϗ-U%Y7yB'ZgsVӜHJrǎYWC{Bu'N	r>-s \̆@oè%SOqUtD|[!QF	Аƀ zT̓	H7 ᦣi":J؇)` +p2M,v2!j\`W'jEJ*9Hl>@ǐ2cFŞ$Jf-I+seD60yA\p`mѽo8(QQЬȺAFBVU;ʦ|}z<
w`z'VtTȸ^#65nx/w^밒&:?'iGj'|ЧwRpScI(Th@28yd\Ouo앲mDBEO=?K¾[z5[>I[-Z/*MpQeݗup`RxegC]DYꏌ(
a6vG9*А]rw˫~3)^
^#z$5
ABJm 
ic8q_01(u_/ʚ ^y
:Yˠ(7I<+H'zk^7ַ0dvVW[v~$N~$Sr}^Z:sV
aaD0ZjOi󨜸ڢ޹@Vg'X>\LwT-Ns
~ƽ$\8%)R@4ٌ@Qo>[M<buE*kC,$6C
D̯4tß#R_.n<؜Q-9߳P6"'HlA69ulZK)҂"|1 5Vg*܆w3_BIȤ]+ݴikUzќmӁGQYȉ^Yknx$5yNdǜyVԦ>.'+6t%bɐb8~*ZW@vomW(@ǐfI4Q+^m X{u^+t.No`oJƩ3ZI'mV^~	"wߎs9Vڅ}yG'^ؕ`+bukNm9 A@8r
<gZU' eRk o$ɧȵ۝ EuxYQ$~/+@.CՑl$0p+`Hxw_^Zy~^9V?I?C!2X/A_Ik\RbQ	=Ma}	x9nS9)󡇓L[=pOg0hȮ뀥=EVӐ.~hWfRR<6r.2D[RFK/܂$TDTUpݗ%fZ$qK*X}UVKH ^ER7AVi;:֋$_ZUSV?ƒs3~8if|b3\+u;C	T霚6mz=riḍc j4trnyI4)IJ:Sb^z?Г >1{Xj0s74s*dl\+)A[dw(ןzp;FĖy$q$R.x#.5uo,(:猞.Kq-N蓼 
Dï5R
q@+>7ޱJ}K·B,hӵW|EVuvj+2KJ2SNe"ڤaWȭA蔨Uن^'yl/Cw&b{T_pyo8UQ8L%46!C	rB.rRM2ޏ:KPw3Bl
U-
Pj+­/^pgxͱOxܹ#Z,n=CNHV9^G lktf6<)&C)F5puHhJ8r!
HO
Ӕ@~\DB%RB
s8HK^ϥn<"}]>ۆN'U:csUW΄KG{?@-dKL0=U/0{Y=/Hq
tM~Y\?Jޑ&"4mo)2'gdh_T"	h(YRH&]_= ϢZ°<"?I,> /2CI|=!+7Y"D[1n4n)-Ƹ;1]a,;i\]qwccnJ5FVq:p9툍hŭ{33WSe-JHH[Wxil-ԇi`JEd>9>YIf 7זE*7ڷ>r
ܙ/ӸE{1FmM! $a:,="=%=xD@Uq$HUϥGu1VJ'?ݢ%q};=G0&S{ғ0"zC(!#XLO0@ҋL5T
F',$5˷0͡pcҐm =f@
 B߀i<@߁+]EbFZ0n6i\]Πo<=l@}g$θt|  w	2:!D%O*)%e'4(-Q
?,; t#ш@4S\[kӍ:}΀
1:O]Qq@Vʻ:bi`7ls8+ʜA*}Ҕ]x1$3>.-Kw1`
զQܦq@^"דG:f;)<?7{+TJor:-#,/wH>Zl!FqN<;bX`zTQPiF
ll>[t؁SI1.#:N'C#J4Y^V]t=^HuўErSHZo썣aF,'fի&Xa!нvhNR
/#=)&ob^Y@YZ/̥6ˏ^W.oP^FFS^e[sCl]η9M|6ܷb7Z""?]M8}ӏvNƹ&~i®:rNO^o+3ӗ;Z?d?__gM8?_+`Uۿu
(e㬃\Q?>UNkm_(^9ց*&uHqR*mr4ُ*(%xg cY!z:pJ	?v9tXPTڃ*)1]㒷Y
ʊ䇗9Őp*$X씫CiVy9=a0t&lKA8
ЁmؤSںw$u }RԽC
O]3^~Ȓ|ў*B',Ƿ*	',`$?їO2k~Y'iH闔9r;+nќ"m
4IDsX
QlI9֔G[qggxpU}#FÉ3.krl05E)&޽0/$:wZq\2"eΐ/Gݎ v/ Lk GE BH2c$k2(19G^x$8qn,Nec8Yq2o?uHsN/t<6fO3'?^p^sY'~E+~;̒Yo?%A73%
6SngXAn#dXka:!VX ?2^h|]* qt*h-~,lK8D;yEEz+6$
1wB_{A4"c~VFzRzBJ7˯ yòݖddB `"d-mHFT)$u`\0!-S)91Gp gG}ll<VF1W[.⍖TΌ]V8}
,ʯ*; T|T!ohIV/t*BV7os!|JrZ(>k8V.~my@(<T
MVFF
bm)}3K|r;%ozO?Ѕo:/c>
~%Y7jZ3#L4eluM֥t-`VI>KpP]~$srKPR-ŎF.FA]ekYe[Ϸħ]kxm6^H]R?4?&
3,9qJqˀ;VwMcXҏe{>nğ9s>JD=ymƷ&I#_)q~i(p(g,o_MߎfX J\y֜3>΁{b</A`MWb~/|~"陋S+v}8(L;=bI/ŚYex+tl2ϑe׉]=CU8j9Mjs"<Y5bSz	 rR':6$ezAFtwktJ_Y6sTH*	RhէA	wix{~;줄N
hTNOqʋ!kݎLE_B^{+Xs;,[4k+AHkX3@qa\V:Vb<Q5*UOU-4V
%ҵUsϱaaX)Ǫ9V^ȋUOcεw]5+:Zukn~@xx5j(N(@4!/^Q5ѿRsQnpѸVd1WŴ{׎+p<40ϣ3D_Fťw*FwWPTFſ<>FOV}YnŮ-bFl~e]f;6mppGG-Ɵkr~tx#Ytwx#&+?
ſFZ"G7boWK_U3qiDL,GQ̓q.sok덷µ3u˅	+"E X ug*Y(A(&X	^cI+B:$O9N}ݬSV{>#?e~5RӎXbm0sR%25oCSfG%r5Mq9Ne5p;`V~GTn1vd!;%$v)a퐦̥w,1Ȣ)wD&OD*L
U
KљޛGQe
]$MHFi%h4v ][M7AŅhtbh:Eo;p-"
Q2FԐsέtXyϏ!]˭{Ͻs9,]-a))\cMiG~yQ٨i)+/@y1z
%)5[Deڜ+*{:/S"+Zz5Ex54j+F91&/-K""w0'?ΩsoMúiBKPol"N:MD@e0*`2ʮ`:~îV{IR]!05'LMgԼ05P`nxFeΜ'Ls_ܛM6=;c܅o4`rzIAd8E3y6>K%gjgBr7ӥ,O@mO%Ǣt]XVٸRذ@(́]W`iRl^@F[?+Jmp0vGv-n&߳K*? M_"/e3I^}W|$8`D7+,<U	
R2+9\)vh߇Gk缐?08lڔTQpS._yLU31WaxWIItb]fGӔvM:e>W&GU37}La^&L'[~OU5FWY=ћZfԦʋ2{.xLCp7JmbAqr<ڤL5ՆaK
3to-"]3'Xl宋(x7ӋZ;mNRe/؞ۃ`_TRrAeY\kgTx4M,[X+<+GN) 	{:ߘ)ݝzWYI2,Z\`@@ڼ\rtDBw`_?{(
 R4ߨëeu˯Pv_BUҌ#7Wĉ>F,ܢ:b
ƈ	xnF
j,oÀPޫń(ӌ;,ьץhƓ1fw4#h8,fO4dӌ4c _ҌP#3.-(
pvxal2%H6@6ʲǳH3
gXF 8dW$^KVB`ir&p\FLeA=wBћ2&j3=Ln2l Y
t~`C^`"L| wï$49p 
^ٷ MGzi?%Lpc	<# ŸǒҊ
kU*|eʛVtuՌv5a1_Yn\[Lt[WKs@]U	q׊|ŇNvU _/Av?]͓wҳaY^[ؗ/[,՞@׻B=ˑt7dDI<^no^?,Ձžž]ZS=f,(,rk<[0ZSD!JXۤ\co
/
L*vJ51ICJ0jo,*lF
zh,*dv%+EPUS@oQVd^{:EXUv*rp7}A4F
/OHN$	<$'	хy&҄m	;" &X(}eP~Mʣ-mT6J
X:EbI<AlIeieDZǤx$VeqB{c׮,DSK8RYp7bؘj<˟.%yQE:0ixh+X>w/'r8DcMhlX8XdX\FBЯp5uYYzy#m
-,Cꖄ
*m+s >*trtHri&E͓;aT!7
]vKup&Js7c @(DeeXcv]:ޫSs7 `P9SyfJ[eAgB&l	Åy1zOHCp`F	!2j$vO<ܳL$XUyHΒSFŃwUEI*it] s AbhZS &)~]G՟%**"m/<1mqYw\S&
(*!]Av]csY
B,*اfyTVr=e}ϧK2'oʓ:w-bDzqW+eZ0ry*UT㥷X<|`@JbSOBY qϟ"]|14|qL춇N4-$hYp6ܟ
:'^'<q>|`Lƭ i,ӲhB0~[ɉAXu઩HC x5j2^-WÄWGo
nY#o;7rdM@Ɲ\i\5pLaD
$ИbR2(wa4F$Z
V\D#@Ɯ|-C_Du^Q4%>aBXWg&ˬXYZP`r)xoĨ0znPh*i~"\O2 j0Bzخ@Y[I=U@D*oծp
vk{|zW8]ق%aw[@1gb,PxqbfP|%frV{IO7V
:jqb"ŌprꂌhF+	f^)x5.ɏb8& >׌y	{l%)xqb>?y]aׅh2vZ[6-f{[mpea>{DlX@ë<3;V{⽰:	eQ  Etb%/N"\fkv+Q9PWpsWey&)pf9ps;{[. O£Z0Mb"/wF}Z?zs:N)jV&ѾeBd<b27]j6qVLf:	#jTF8-,`|8g
"ifSPT喏+Pd@`=xJo3ɗ
+7IP3s'ФK.ea#:G0򥿸W}U ./BC35*'0Ig`6jeI"*"d&sGSE	G\"IiMk_M 	D/Pz XO`&\:)diwQLOvVߗpR"LSa-QWt'*wLVASC GiAZK9lmIZ;
9ʝ+'|8?dDLMpK։.
g<
]a)F~F_+OP$wpQGhތV%8caߊ@ރ啢
qsdF7ȤE8UPduJu~T@p\_$L|j!^WiA|fҥ~Tٚ/L[݂5'Wf*Mb6;^O&lxv1C[Ti">r#ު0Jq]	᭺WQ>;a:y:*^͡aJSo0x,jq	'ЛYj4]Ӑ<(PTN`dm	
"s(b%!YN7"٠u&߀|	|`

C1cʕo} |w
@+w7iq'y"
3<
ݠi*9!@հ،Mlr"zJ}Mssa7fy.]	1AFRm+HW!Abne+r*~Xz뺻L˧"=9Jr(W.~B#Ĳ-;8u~5pc-NC͈W^:7^}6DVī.ƮKaǋD]wG'aGU#cb5d^kc#ܚ~6k?|?;n)5]MB6~k֠:
81m};`[-RZ$AV
R[|T0\:3`il×_4|#
i82лB"j3f_sP_tǔ/>),]+8p:\|`q[ n_p%T[D12PCPv83aQ39QSqjӐ>L-%y)|Eu藡.%%0B* a46?Ml?wx4WG5t}pLNa#*'Aٌ`dJis nlSחrlG(~u>knRpS.x.&Dq7PXuUb<Xhн'|?{DTS\EXRhvibZYND[?-?A/H!	\zW4:@,|NSSN5Nt]}6u~%w`o>ѱˑ
lVOoM`*Sxi9IƓntΣH_$؏X*,EE&eǘįqz
x
"*Z(I|L!ݹ>lO8W.* ~=`.4Q)VHڣ΃뫌zL7eo?=EߓwY	Qq1AD@QH(l"mLfMLd񉽤NJބu9˾h~
P&?XNLw4l߼D|Y;G7CM`1.ѝ{5ŋe5`] H܅#qկ̣$#EO
$H\@C3#2|z$x(O%Sa.ޱXfmlksDITD큰ߎ;t]ܥLeCzt8"-.w=`I^z
*w=宿wx=1QHϣWmƝ0E/ތx`3oFkhf<6s'gER6	_B@jG*XHm"ZĽ`2rix?>AиlZoD^CN9xYxl691NfX黒ug=TAuǨKN[<\&|Qu6/S:i6h+1Ȃ1]vPBѼ7f:,y|gr Fm

^]|\W8f(ѡM8Ö;BPin/ietp5@k!͂^2
.Pd~`۴ 5&i(Vt{=T;rjnC;Z 
1@{Ӟ&[TR',Obdڣ:Nƀf#ø1GsE5ns
Ѻx;jgw[q;I֝m8L-Ӟ<5LkN?-`<hn՗Qi"JBCMi+;d1|?hL>V6Tl? Mz2rUwnMR˟^b۱P?_BCtSz&T'gH!:9%>FtAq$L
cڠn.DΩӱ mx hlע[Oj֟cPHCHy0$ݰT'4k\B7Ğ']%8j7]ICs9㹣cQ/er;D,#K86vXFE{.¦+50ĩÐq\ݫ|iapKAGH*Fsd8]|u
Ղ;$X\>O
6k`ebx33A 5"qG0G)+䤬SM&<@>٪obxډ0Aj?'T| R6GPcnW_.-|m
MQQhU'MRECQK:GQ꡶MԄ*SَPpd4sżi-_s&5G;qp.~GOrFUöaU~hXnpdd#zdtBi*p"Ch^u{0|%"T'(!ڄqXB
4|UN1_ސ?M!PviZ
"E@eC.y*OE7?a
Z&XTC? ZvER;7#D/#ۑJ`ob b9.PvW06=bNA`n_MǛwXFK7SNkWKS˿tN1dPks9rOGőЌt2^~q2{Z=;Dut(rB%vEd
(rKn-1@q>`SIF#S0iVGO/7-C{.4.޸r39(v o*vof	A@2jC9hVz6?x^I!
|IGLi͔M=8^A;=ѳ_ӳL`ϮF6TKg	&vEQm>"K[|bਚnhF2^pSi㖽ge$gUwau0e{PnKWrX=i{9$o|-	:ib/4RvrXUS;}0f<~Mk">x_"CӲV3:2w5{O\8iP=ѓɤ ƗDJHdZ
6wag[k"ԻȮ-څ*O@P |mgdw߉Z7pS)@zq^ʟ
AjML?+"HPFmi|PM5#2_Y/c`Л	ȕ 痸0gs?1%4{QEƕ=[wv4JV;1X0Bj;f %
WĂta
XxVsqLb[r,i@7]1|#;[.Cg;gp2auĎ0:)B/ЮҦܥPIؓCif.18Hwo@wJޘ+awӝ&a\˄
,DI	6S@8P)(GCViGÕfvØ1\ޔPW.͔t
#+65)ΝHз:	Fv-,F@OI95ge1twʗ9k4_{4VX160lF'qP??h{j^z5=|fRbjsdKwk`FRނxbqSċަ0'%
zCt@'<V$vAuΨnP
Ax
O]y(OKw	Iė\O|iUPUq&JENpݙUG7=F)Nմ㬷{vHzoiNZz\zHAZ/TU427L௏Z(W<v8\H(>@T}dGoU1#<ؕb{3]\)B(\0 g	V$->#aߤõ>S<YZ_Dʃ~:[4Y XG~quڣi*DṘjZҮ
t絴>GΥyĳ@M{aB@P4rJ'P*;uݴYV]mmbn;ᤸ}|QC 仮04?+Z'~ZP,#_I)MP[OS.:	5z;?@7hL~97>uP":H=}o"{CHxx |hNfttS
YWbTw@D6yG;gdC?[=.|m`&dw`P:/Aߣa3xbga\614ɞܶGf<&Bg7a"ڀj{s4h:e OyT(U7՞dJBX' Ej&MX~ϳJkQ[?ZAqc1l~y6}BAiAEUg57F@wL.^kP杘$w^"-/0uZI4?~X@;o.EDT|фDv`bej	-|W<2nσ2.2u3"ݥMÅ	^吒jb櫍n.JHr^$ ; 6ǐ \k'ec:
:6y><ISGH6{ϐ/ ivx[?f՘D{_C)d-U2iCD)	eMVE	c&Fg>Ol!/23?q'b ec;(7bZ&꠴]{_̬K񏌏(a]oGFu'ǱPfI> :`1ŐNAݏ<A*yv<lR0tQl6Ӓom=9ХV݌y
e.0ϠKS}ñΠ]7E4dy|9xe͈E}J7@WIqēbN4B1JG=Ht"w&?fQA$TSbc"\;DI|dJh=v[eH
Pз	N{[Dq%Bwg@Ox8NGÊ^`	)1RޅV8L/~̥QH0 _qg&4Oùkpm{K(4ݽRJwpÕ^uG:Q`!"bд?=?D~ )S^
Cu<Iy399x,CoY8o
%8
,Q"߿r]yq]:ڿrv]hg~vV(Wb]=%<)G,`buTûtQ]bj@U<p)}E0_ڀVsO.-!A/	=Iߓd`NX+DtrKK"fQa=:QodYCPzC:t"ي\Ϲ=]hXjpI:ETa(	ʺ0B\]#DwPkJ
6q`U@@>Нo>g`lBf9+DZxmNGbrJ>`PbMj 3덨4[ʫE;5&޸voM蚪}
5ű"AXAcLh$fUh A¶;z0+Wy;рLep>]?Н;.0e_귅h{_3K#r\vs&ٮM%ߨ9kdww_)Ǐ[%S#gok5uw#

_ʈA6^J:kh9],FԅJmh&÷Lĳnt](0z2զDw_YAj*.'dƽj؅e-\TL/h1uכ61驗6yxZ.%X*{>(W5HjYegʰ
*PWsS8:: ({/h&֐P!ٿ>P]$Z%	쇚F~uW6_ x]t.]ϧ0ߖ*6	Ua#ϛǽͿaHa{)ԖKCU
dU[iakaJdLlz:s2~wt~<9S05jQ<UG-U hޭ&'{O>mBLTC "GlBٶ"_eAu=A [& 根.Qi_RbeyZ̋uB,NVtXzb'嶌 ʝkO&Ad6CQB'.<,hwWiX3tKK{	kizD\\SJŚ{J?֜_WsPeU-Ps`1M$1b?,^<2xVS'mpasP-v|dFU}16סL$f,-Zы֊v1ԯ뷴Vd=)1[mHcLb.,ttMl^`:Cc:S2"cx܈XUF|]x?!" VEC$5?\	3*%GJeoHX"#4}LhzdfY
\]rrXNnL$wr^]]< lDmԆ.>q۫XR`h^܍[㗜hPAڈ~޻OkJl|BƇQ\9^zҸU$!{W阚*sZIRW]di33{-(9^+`<,/d'u.'Pd7Hr]!-iϏ}`5
7Fes@V"r_G{-fz&dDOsڈǰx-T	jh@}/
hmAFt^9չCK?<.+\o
*_
&|~.v`VDԗ4y9=ǄF$ܘ+*+#4"^)SM˸E741ĴJZ`0zOE-e?,%9A=
_FDY VY5~H֘i՛C:Px7
7lΡ
vk?ϘNbg/ӃeiHrRyPg0̼"DRD2q*^VDmD+_K~ڡScz$@E/4$("t_sݻ&)@ED>QUjȦק"ZlI?5XHɈʒ|}o2v\tqOr_eZ?z	,4$OD
ې	ڗ'%Kt2`EErO
K_MB9hfuo=Zt ᒶh4h*J/f&4=(Ѳg.nRv(P\FQoIlA'<F48-^01
$;	c	R*ln3'jlk9"b,i܁SNAqG_+[s[Mlx*cl~9:+#Վkp_$4M{p·I~%_7qc9KTh
(@Y
AHe?V,}nX5s'-6Hp
YhE6%j2yz>u_&{'-Y	%
&;b hA^[~>R"NZ>XKtk^H95*34@DVDw"J:Dx̄G~}=%4Zc\XZE߮;ahWRv[~c hlZu
5 
^
wYpR?	ʑ,ʝ^p^XCIעyb1)-4Љ6+pfMlI!nRfWvj
J<@J{/D DrM܎ I+<(,?n>;/AR6ZO~AF5b"z.lT AvrPZ2b8S|Q
 C&ϑ])\?bXtT$e5mn;G^Ln|D.th
I1B
7$~Noq
vlUz4'q3EBlgRxOoh]Kyk9}-f CMqnZiVYPR,<$'mLAƐgqS#Ab(*iONuZ81/m,T|D}>Wm.f~Cm&ӎ-9 
z)@;ne9Ҭ]{'5a GLS:A%g'}$kx </͜I)j3wxBEg&Z9pڻىލclSRh_xhSA:P0l"X	ßǓ#	'-uL-=6k!9)a>2*^<Tl7gLJ.TjnRj'p~g
}1
cKi_ۦt~jD<3cQ7%ak0
<QM}O$uXױEh3ӛ4O	2¾,=zt^}BcE
ay;uOĞW!
3NUz^eOmI͝m &'uM1[bHfb*X="L돳o&j	=#*ޫRѶ(ÁZ"~^m:pSjfx&ۨ}ݿ ,a'<el0u:-ƆLԶqgwp&iL?1Z06<\̿ehuOl-:_9"H㔴xۡro&̸;_PkiT>G*iv]9|l譛-1 δX>18i!$by Ft7FAa_} ~QHi=;*	VCw0xdG%M	FڏKkl\hŎVF9b_G H	>B?r1g/ PS|	cA;Z*8Ѷ6'/揉gh ót>珃}/ޏ'}}T|l-4;nU
*8F]`#
GW`X#J ؟9PwO 
>HTu[CXh9̠ffS~5tVK*¶9SC:]L,vTRNP&'s|c+}˂:&:FYop{@m"ci)to\R=W55np)
h@
EBGP-#KW9f$DXv ,r"=A~N4|{v kh<;cZM{k=~g?/4 +&/3W
8/bKB}fPU
Q>437T%*Da^>XXW<CI|$sw=xJi؅E OB`4x\U4G-JC"jqv{Օv@` hx/p,^$ÅԀ+eUHC8&jƺangX)
fv viˮ+>Sn;AV<xZ@,0Z|NÁ@w4N-B1F%hAOaJsrrn1XzxfhuwZ)rZc@
1Gۢ	;Ȅ&ށu/qeegjs EGq®ζhПA#6;Ā?tn(aK}<3'"6\]
ׇtH32Mk2Xqͧ6_س	PDa4Ԭ;_rzZ<( u>8P:s|XSXTČ[Ù#B e43l[HhS{2κGΡE3YU{eˀ.KZ[.gR#x~ 6D[3gj
AZuRiD-Emn@i"Ed-+
_q3dso/bA)\t_.x]B Zs΀0L#	ߏ(^CH {ﱁ|ؿq -DgCFy9[g2{`I-='=t&"CT6Q9;_yHv.f0
GڍiPvkK>f@eN
K-OOzp6~Ƀra8J(+A絒>zGG#ToD3^MmN%M> xܠJ#r>!35rXtXn(mnÍzܮbZ"!6/1R=jFT/*V"DtC;a5$#O ;F/]PL~e\vtCw<w77a9۵q@*9lA_C/[cP4r5; rA@
M HA%jzSAY$J;
*e~@eD;@\0;|Xw%ݤ:B
[DOa6l|'~g20_=A{z{7x\S.Olfc(Z'D<C9ќsXNeiQ::*
~<Um.2ahsiwmgBh0%pݻJBܼlA٧Vmۮj25ƣ;ST1<:<I xЀyBBu"U&dH$_cbk'<ww"`TDhWS5u@#lrt{3Rkf~C\9ye!.N[84@]<I+RDLo˿TԁHq)-\&,N/&9NK~}
70OnvI+RFmopK-BuIV=jAp1]{QA~K~܄Z<1UuUE[fD]ھ$P]p{Ս:|@^	[ɫO{z )Nem8~޷& -{D25XW$Ewu b-ڿvqRݟ=%So`@B@Tf歒k+B#DB>E}k#x:OՊ{QD\])_T-`{54xJ4'Jk4x zz
\lJTI*Y:Wn&֞v)Hմ=SkI);?_W>V4l~k|;-3YGQ5oVuk2(![xYIB_~a1Х>{;l3Vn$V1}IskMQovhkf\"=sgQU*MԽ$ڹ{r	B E˒,}]xw<E̻/]0PJ{Y7с]T-S
LQTeE&7"kt,@JH4d{.LQKFEĞ0<,IFx$<ǊYf8+oI
R>~/]\>0Pc#2TE{ݹOi"kig0
IVN&H`<XY4i1iN@9_/.`'Ǆ> RK1]-7HS<}7ᡟ,S.ӢL;qEJ0ݯ+~9()c8 'v^
G>S#>q@a|J&~8;D?~9p}"_$Zã%
b
զ*.zYnpZbjƸa0ka6vF1@;@j dt6"Zg
q 38`pv̂ѐ=Um;8Tњ=7{xk-윾($'{=CsEMX)C5k'ݹQ
CߞG4+B~3`lo.BވkMgD6ݘƫT~c̳xƧސTk0 {r2vǐTBP:VUA7pвCLR]U1t2l'	hAYт2**FPƙ>oe|,ͿHw1S8Ge6TKfބofrPe%zn^ލͰ~̲^D%}cYrJ{sx 4Z_+|!շ#t>1RHZn
*d_J<2ktR:`,:l>'N
cr9iȼ
'#;zlC@DĪr,
R힥; E۞(`-,qbF 1D_?[}C@f
M/<`KLp{뇧V+.>$&E@g31KUo(EjCc)R8Hi A)oE㷴 aƨITk (;Ȭ
wrv֋[mUMJSWS6m0.HifKI|+OCjmUP;UҐ~7h|ĪdyC紸:6LDxX)TP̾ "NI
u]3D%lD[+)h8 Jb0d& Mhos?znj[Fq/%lF1O	^4./M~*퀨ͣ,"yF?6!iwk@TӪc

riOQԢ)oлq	@oț28F(x%Y1)~2xz<XWl\|W="ѽьiB7U+\
p'9B߶4ZkD'jc|WR_oÿA2#$|XQ];S=em&hc@uQVuvz1ѲHaWYڥ2/&n
lm+FdשrꈬuV)1=k-+_/EKKFm-zqJBuIwI66x	?E݊rm~ 1"#WԬD?w
w_8DzO#ť P0BxJz'֠ePR5Z`3uGVd"N(?5-%T'{-
;9ky(7	2RT /0 aC_X1/Ҥ4)9.2縥/~ˬ^ƭ1zS*Mh?[68_tQ Y'#ry,"pxE<";C.܀xm_L?a<ZNJmB2F,!H6Gd%u6).19r-άm0pvOiljn!+Rͯn-w|UnG40}2){ኒ>0-->/k(n
{jyhr \]n4;6\h6zFF#&&$~d}8#1 x_ozL2]h*K"Ǉh@pfu;Y
cV-S?
X'P	X$<$BY(KCS WHW{I+!сPRNϡ
1:ۤDKdI`LA}ӓA
|Y	+:AՏ-EOV?y2 }YJ,k^کhި9W?1YzJGo
jhsդ9~3
ĕ*;3(3\uo7m~ajOT|?[t&ã^1$]`|ܷLcNA2ð<[<
p2A=K*݇y)-W֮t!TgaX;tǃ,$3FM;kh1ۇ֓-8GTñv1Y!fr;Z?a/g1>쪠TĢ2[(vO10 R6u=L>g/QJ! 83Vҷ~֋psX0ubF..߈>h1iE#q*FZ9۾'ФhWM[whaYhJEӋ,6F3 HȢWW6f̀nbQ;-bl`qD?ZHB`Ñ-ūW
6$ҫ%ڞ
A IMfUqUBuaĦ+ݚvq4F4rlP<
|caxHTEω b"4ܢrPy
䡙^JJS}g	S]w.1z&T˿x |Fzm.N#k֝,8h;k$Th?|CviDC;tF	D 3C'4mV-+~ϙ
[K菃! R[D $7fa4u?]`d&m` SNa CoҞ+HRq+WU;|'Xz<f-7r(6ch+'?y
(
^etA8E@o˭o/FS>
Z:םOh,\]pB]Zcx0Ąް%b	ywoCCae_*kBx\2/A~-~rI:<#~"J=,P؃_7z_ϿE#&A&(۲¾Eeb@q$)YZjʛSZ{w鿂X#7G ߴ}:jKlYU7]{K51f0']$DWT@
BMP}H[XC:_fY|م4!i6Οҩj(ٍb1@$ybXnUB})Qn`Zyho.d7>S@ ;8VAuoZOU7ʗ\T峗}mAa\̫$Dy{̼|au9pˏRJQvŕD.d3v셂{_?9M3倏gҕPҿSn.)?Nݹm)CB7{F<{x՛'??c=)+JTF0QhQY(?^`UYEP}.J7Qٱ6ӟ @kgV8MM07-FLqQO1
|PS#1\AMmN	pX
(N30_< Bʇ(Ft8D|DӂD2)
ewzԠ@(JZ}L^ ߢkm!"e!Hϲ
Q,ˬNO썖4QgԊx`޿t3y z)m/dA_u%,3z,~)U/%?!HSu4yV1Ub#2Kl֮wcpdÄ8\oLCPoͲ71l:25L7e{ ƨҨX?>p֡¡)YfؐΨf	"sl|x0>>bs $mϱ	ZJ/
]l,Aw#l2|h7
7_6ȋ&9u3b*	)".Uڥ-ḪE"3/	Eī4 m7ǥP?Cq=Eh-@(ٍsOi- = !	! 5>_hhp86KpcO#Le`ꢘM;S:>/cF	N1	,4	
*[*L 97k1kqN~3ypz197P[U(/{I	J%d':5PK5;T<=?){"RwՕXhupϰoz8s{xKc ܽO
G8e@ mtGA ȸ85靷pYB>|u"ȩgH]yz>b4h~=.Wƻ [ԙfװwjW_|ǧ9pFim*\=YwpB%p* jџ2\6Gy|Jm%bl?3T cU=ejfNڂJ5B`E~W7&K¾n/Q.q
҂CJ{^3G6=XAw|h՝܏tVM;&(jGäw)=rL7rHTXDowOg̆*
\ʍ*^LG!_w"ѝ3%5J_q~8C=IrboWhIFRS^B3`'iVw=}q e4a]3I2	B0* A5: 9dDS	^BB"!DQmi-U*3	$ K@kO-̷k ^}|;pokyRo<&aZgvq:]
N߯XaܦKgaRMJFTЛi8ya 3͒4tCV]v]!_@(=w~ϑzȤ/CQ/,A2Ŷ!d\mD`~BN4Ӝb\Ql	kX+{6 3Jh
mK)t(nL~у.W4+rڠ&^3}ORxֆS~R@Szx_/XO~?HG8aK
a	ecXYq˧lK'Q0s7{:NW07eT)m ^B	}aM@k?Sȍxi&{QAϨ^OS]BZS|.\>>>D
8p45F߉AoSV=|
[F|KJԵhT/9]&ጽ'7<ZZMX;]G#x>Z3GvPޘ(Y{Px(Je-HR|MQ(lxq޿p{Wr<00rg9nɆ<']Wݮ*Oxg;\K
~*]:Qx:"{sjb̃'=#n3=gіf"oe8\!Y1ڳy˅W8#-}O72sQ\ fҾga3+a%$pWWqd-l7?ۻ!FObݙl%vyvPOŃT*s_~a\ީ=aXv;<N:D?)+rnpNcZ%ql
S
E'CyŲvQծ'kZT6: PRvDUdY_v*u/|l'"Of@ʊzb{_`'}C
c<͔}KG\מ g7~3ἒc_.J>	H;43Naϳ  9PэA1~T~}͟QzYZ6Ϡ'YZ>v_҆|d.	<vdYc7ߊ&G^57O`J--|0x`PJ
Aێ
WO{tyVl'=VόZai[j783!<k[Fg,TyDv6N*<roa
_@W$k3Iߠiy]aQ4خko:{փixL;P4}M˾
yLkBaAZy;FpCޫSX^wz(b*<ivSaj\N:loy
`FPhj`3a|˙]	˪L
b{cEn0ibZ&%Gk3g`vqgσakr@P&aK%{^܏?kLirKt+~?|传RL5F9N邏h(t#+!f\e6_/XK5NksCز3OOӠG=j{ZU@Ip!L5{Zt|cU_3᭼L\K.s5Dp!a;,u:OpM*8",ǠsԀAU.n&Ν55s!櫓l	NvSt̮Nmsֵ`Eێe5,[UҴ9ԆuCVgNsBy嵻~*ΘxaW߅oK}&e.(jQVM9%9&e)
@BG5ق.K>
rodlyXlإ>RR9}B#aK.#T&'LoAN9JLɑלPWP +>1B?7U^r&m)SC!mX
龦G&o
"NtVlgĒŮ'
s\N˩޻Pȩ;R;į].GT\UxG31SxSsjG&b`B1C1â؂70W]3!s!mrTϰs|wgq$%FPwʝ$pyeO/Q'Tv/쀈
w:00y;<vsɕm;eËSJ*?\
k0}2)BU1q_k;i-z
Dx){q XSp;{lhKv<iIl9+
fJyB0m@Nا}.?[&vXX	ģJ(l߱0wmN(˃XopGkGoo磠$t\z5ӯia\aam-Y:O
%z:#1rHK/
By[^P=Ht)7<
Tm˖o?wʾAEr)Cץj;|%r]u	ouSف5>yGwNy!9mt@A$s[X#=t9T^)h] R12h[cS*Ku$u+oހmP<]@1떇Ly*7&L`x`ЧJ`4'1޽r>:pA7ԗd?IYc:p6>t	`N]2~50{-KX/c2e`G8IRAW([<+ujp90KQ>Ԏ5qm,#3. f9r1:!	9XN9xKbMOr
>bLFȍAARaJOFBiaF7^X2T,/>Z=k1,cn4pF[O}D	}dyeSxRˑ0xiq'j/?~ah6UYR 
\ ^]j0l:x]݊ӥ!=.[x/s3?_۱f:vST+=Ejdp0QG@BTzkuuCɶ=B=KYjbPc=Vm/Y+
%-	^قɖ)1Wp2kP{0)3!1,MP>#7__
J% U}m w_VCX]Ve"A耧[%|:$R2g(N&[yo,'p4)r5WjM^eC{U8m{-Jߊ)Fu2Te˟T=jsohRaZℾfQl#҂jd<R[	Db]=  3nii=2hXb/uPwzT-F|H+ŵ~;Ĭfc0҂rDmyn#$z$|^ h~+~`p_AؓzG0~Ct;Ƕ._큿S0O/̚mn*؇m!6u2uYu/,DMĚ:@KqM+&o`3mFav\c}nq&Vkkۮ,Z?Q^?ƨ_o~a+yniؾ5mXb[a<i6^SќZf~?6g732%ͼ)BwZ7xW0-LV\:@n~"Fv2{6)-Li\hay$tĶ0?)>Zfh`¬kZ$ZuNj|Wy
|ςvev¾=(){f|YkVdY+Er	lWD\*8}mR	^|l*Qbq*l؀]"+r
}C--#S.WwX3l[Xsr#=]Nh<<%!ߢ(EfS>&jʌ֗L+OyߊM2QVXcxoLPEWûe[>,:-9pM}0xjR)uYK)*޷1W&aX`"<[X/ނ*h/;#ٰW>:b\<0
O
/;G
%4ypVZ=J7u8m۝edsF	/<HF1G
(P@v}ATP@bӨ9$`z*%8+z(a[
lme+n(L7	j.͟C6<ɑ?Cxu#ߙw6aW㹿98t{1!N?u״x{3އ?:.ʴ		L<(F"^NUMK_8"ޫW~dJ.cuVLKo.^esCʫB\E&l?"< 30^VW]_~ELմ\Em:$3?NәкDUHAqc_{t]>x
Sf^*<pA[
[=3XoyA^/h,Qw1_<DO׃
JE}<ux9~7;iX\B^\QNyHD^ӂ~Fz|'
mށ΂ 
d
2\S{韆jG?Q Syū\zBYS;r5	\ؓnc2M。1BOn%nPJ5يJ}v᫘5Us,RPxfs޽f%0ݠj5/l+TV`/xnv|5JPtTtS5(QĄea׉2 ^hlFѭn&5yo
݅P9'1jG/8 ~.zRê뇰?	ڱvSGg^fCRfmHpuFLp, }`&vQB*31nuSY;frA&vizgXv}tnkwjEP{&Ŵfx# O·h+~vCւ'
VDσE]C֮KmB1.^V

򢽳W>K{פfMɤCXwJ(ŖYf<s+TfY$sI+7ϹM*IMn&
Mr09MIrsI&De߹-#
?of]nH
;e|>5:&&m$L&s20î&`2ܪ	YZjZG-yP%*Dğ^Im,fO5MƳ
GڃʛC|-ajU^z+^|yas7<]FXc)$FpԖģ2P5"'wlt7hNL7Wϼ\{k}Џ&pjwሃFtI鿂U5يì69VDݪ9ourI@wir;QԂHlb<f@8Wy$Ve0--l(mX)y ]]և}[L܌g0/pa#'(&oڣ=Ўc>h;p
MvweHVQ}P#&kcqS&'lJJkZh?$]^kxһ9&?R	ߥLvY|m 284;Ys+t
FD31G%z)/,>f9
>r
}9'h.=˟](ʱg6q(2׀=3(\|S}WQ.K'r{H֞i(wed|o9m{ry4*sd`"GGJ!ek1|o`ɴz)w/B.fayyөƒSĒse%n&.'=~򢄷8tUʌ2+Ѱ0ca>L(Q_+cL Ӈ˫Lcr%jx`;=.u7ǟӇT#m틥yN{=ㅒtŖ1E8RXviMNSgޠb\莗ZzqR"[stΐ^v?Uퟁf;͙bd阄x8?O gNǧ$;+'gNf۔PmagE;廠!|Uo~n~#
]wgArSs3'{~"Q)*}d*}t*
ysu{|*r/Ձ_K}爗+>H홦$e،gMK^l)coPOND#WgDaVN/3E=.ƞv?abm:^圍Ug\fqJKZxNqleMk)©h7m.5^nJLQՀuI1{![^R-/FZ-CM^0
Jb<tHϸpl;hj{k)bvxk3
OFdaJ]=L|aYen结$Ÿ=Wmq0ˑ$!1oBb
B#I	OE
9|!\$CcE$#dX827(o@-P NZ{J`*<<QpPmߔ}r^7|Y
˶=/>Ҿ;rB>a`>2,A#PX&3x/\.TJ|7!<ȗCyΧ{~s\0
[KF.GA~"j˒v`PgJ褘\&E'}{\yZ@.ܩy@M.w²ltGswF!\$)|'#旦p)IJx:԰
9<ɐ$$C"IAFdXY%jKx/d/L'ūjK=<4cj\p_d׹8&	fݞB~xGQx3Orgx΅g,<\UL/#</óghW4
q\
ϵ̀&xx><3 O<xs1<\
u8)Kb:@:֑-n}Heidjq/\PLwЪf]9[n`eC;f7cbPC%o/88
͐Ka^ct<^ 1Y390`&zlpӥͅض+<zF fF4p4zgv(Fh^D9/YZ&a'YOeIFˌd;tfNRx5#GݬzLTv9<oZLY?XĎwN>dJb9y,Z"dgkfL&рxY2Jwc/?zpM	;>OgZcLjwbfˮ<ddXvC+N;zM2Ցz
"sg0A;MTvC0q,*?V^'\18<.Ps̔8Sv6SOj
5>P3S>L ;ʫ}
Sy%'vp{՝`U\iݛ`˸~J.^It5Ŗ:m"N'
oPCNDwI
Kcg/m;[sȄۮ:A8C>NPjӖp->)YY[^b0D(.G@| dVO	3{Kp$W-/
-	FnK
[|Nk`ef(kٝ9`F[Os"w"ŕfpPo6:^2eeM?f<CĴ#=:Q].wz	\\!Gt
vcZd=@2nv~y2:/ǝ"mb˫vҲrLKT2}Ls)^;w/eYU*O@WhZ'V!2`VkV/b)jو-7vk=֌sWTnKڳ*|⣗11G{HΛ@ۂ皙|vjqFI
Ƭsf.2*
OgٗzY[,{vϲOYv;ˎ:+Y]54|aӜ =P=um1<&n;MtrA7YG6_0܃;Vʿyʿ+s*e:Jl1:\9ꃓ\JZOt*U:iڵoL755ڵl`~I3X7O_x8y#]MwH5ej<>h}}kz]>u<hDg_ȶuϓYqvsN֜XSڣ.Ie^JeҚJO9Ax(, :bSذ ),Bm +k
}Q 9+m|:o&oV
t1}~<&(*Vl=2G-woa<
yeGԌM3&I6H,%<u~=_eu˒GoǗU[}
?	'~jr?̬:'Vm='I'Pm+/-s?m.c~O>eW^͞|
6/agν\	>&dJV8'q7gXݟ˖y0˅bn,~-2
KCf"F
O7<Knf^a}fr;tНΤ=e,"4=iv3a9w
@K<AX~b>jۓ-$B2x6&8
n0axل|I
ϒGG0]37 W>(sw=TxvQyy2#6SPBaAߞG&d`P O7&W[.]|ϠAn^Pk\O*n,>Dؒ5|8"|٭%/lcbhcuC[޾:G_l;qpO\6)
yO?ۨdWOn8}fLbϿ!m^¸:88Ǚ	Wgkp`m,q_~ۻP`b^hWwdNzß=wzz41>ȜwSÇ6 2{1hn	m7jS涬}	m7k#3=94\ֳ;|Bcle]ޭ$Kds~y{w>ޑm!~˙f}.#c:8o0KNOe)
#&1,gt{mA?'r۷r/c~[f{) Xո %>ָdtuz6sP|G	/bZyH!>ᇼGٖ?C:Ì&T-oQ#Yވ9վ"#
U˶vnwhd3U*n7aGwxل$[ƙj(t$i;4CwL2z
#!<(e{h IiPߨv$v0>L9%ɾ>mO%!FsL$:}
Ʈa=-dOk`/[NAE+rjHF[ #0ҁ0n2_0o=1m,nyiwxIB lFIvvp3f%P,2͆b,-ԊeanL<L01B$hE崝,^N2n$OF
+~tVq, 
!ij δ ,b@d{XuA|{Y!ND<8̑L6A-hVuZloʳ 4EA+IPoՒU3ߛKكJ`ꢉܥ)%^uXdP,/I0Pw5ֈ7]D%8`q\skny/qt5{F u8ՎK(o
nH
_>Dp&)G-Q`-/Nսyo/vnճշȁ)I_1ZD
پiiԮVb)'b	Niq}KQ]y[0}e{=/9P-,/v Mg񫌑{RK)aLU\nn<1E:S_&A[.c{SEa3Cnu;Z87,yP%YGW(i{(WǬJ0Q")fՓ}r);k´@E2X7cDZ`lwL6pݤOuD/*bgjN\*CR{%:Pv]H#Y?*Rwh_2e4%t,R}»prb;̮#Y,6҂L]|X)LE?13KݩvYF擾Ns!h8wLw{םvX{Q=ːcg:<0!H&Տ9kjW1Zq
v=vSeߡL_e3FivU!-@xdvVn(y|?X
ոWWZ61~;9º;<;^no©rڛᤴ7啇ߐ}G<+ "Yhv8<HP{ǏǞa[ZֱI3Ãn9MhC1-A74ˬ$	+Srds 	xb? p3޶s2TT4l3Ff{2SdlK_,pi	vSVS/{:QuWlOq0ncf*6PnF%);h!PѰDeV bnkJzB}ne̊/\9oe\Ӗ"ԭQ#9({h҉ml4
E=ڔTcc+R?V~`zXYrlZK~p<<,*j9X64=Ts1S0xFP\`
vIs.=@g(ۖ׆1'HOwglRSZl=g'2V%PE-7 _j?U?w1mj_kA*G
K-iF2^U_`wlY3o>t,Un*%䳛CJ<Nu;s1
=Ipx4mt
ˉvG^jɧe??侐RBPfdN\ ?ĕYhḡAQ@1&ǯd#vN;bQB
VQasR8,w| awu0d yΓUKhQ~-%WFKdTWkZ8N;cqQ\x<P\g,٦kIJWC\UE7JG稦pi@fQ*n
inVm4֟J{$ҡ+I@~SB7FƦ&#zf h7d}[`bLtX0U922SL0J"'Qqnd#=ʍ`d&6n	1BZjF=23/Q!>#Y,gfy͓` ڿ T5<M:0k7{|JX{[u`PQƇ<)PM0T؋u؀@!ʏ"J~:F­_Gz}໯HB=K͇B!:U^fx&܀tli9u_)

PlŉjgϑpJ9rr6`/--@Ind~2l^ܲl.Hw3&>ߓ{<|}FO>~c0sin2Oް|#\2@diJ
r0YeGI}'<,KpVXIliqTv7iZlk5|H6+)fsZ27;]@s$2sWi{pyj 8z&ygcw\~=wh<,lFzm0-1iies5ZMz<U)Ox!E#R\1o/PK]}CUlv6#0~:l;Z9Ld{-(1gAiC7jQNHs>Xr+lZHb,,uq4Fx<!EBߤ)ooBC7ga(kEoWT]~%)nz(6i3Qc,zyAx<](jf[IP)*#*s?}$0ȱbS7cҽfPUQ>*йe:j[KSәj&,8>
{6EPr_œRny{G(L0fP,[^*ԞR%=S;CiՖ]kC놽+$y<NmۅVNcw>tqzhWC{Ǉ"{[ԽI߫~rs3ɖk+"wIгf'vՉu^o8X(3mZpDv-J'y?)A]pFoptnLZy^hGIՠm>uk&fzk6f{/U|!3}Cx~&fS>U,z G&\ba	ooj;^aeg!S}+m>s;Yn[n;
mp[=Nn;u'Gnsۜغnw}oܭ{Umn'ɧ.w[=}#Pn[=ܗ۶vp[=ܦ'$S)Sow>,Wp+NV8]8NOxwtI6|$AEAKRxu	e~GFbH0iK,)TZ]Q?TG:@ڋ!Q20eh~D|_1	J,d#9k6yg1&5sP;cd8P
ڿbU;nRx`UhU,~ӯ4@P
,+Ԯa01.9hƥJ(t(S&!Z֮fP|
["R
K^2W R>SG=1ZRa*yUԟc>NP{ex\AMڴX<VN\["qZ_OSwK)_߬y7O^9<j٢*>3/DXu/)<	4*l]27>EDqm%Mc|9ʄ8$OS`}\9ͧ:j]uq%-cq׼u&Y(kVOc}}Jߺ *Y_t2Q;Dk.%DDt3]DDHN$:Do%ZOtѧn$&#DSP^EE
mDltW9O. :-Dk Dۉ&6Q1RLV
D$@}3D_$GD%YD/$zQD&zG#<D;W_P$I_$1ڜ@^ݵjn>NsB4YD^@4%D^Et
D7MV_X.ۏ"Os"y'<%<Ig07Ǚt:C:M;y̇!3Og+cl4{O ?Ȱ`_FXpBS^EXzmgRڐ`L=	MO#,??)ǎ	?	R&	p~.̈=^Iߕ`_g'/K'r¢v-HIu	!!~O}SU	ܖM^N3	x}~>_	7&p0#'྄%ԗ#	g>p!фO)~m^	KV!\CBm	7~Y
zYgʌo23m%,Zf翁/9"	</ϯr"Kx#KD#l>+=&<\3,Jp_vV|Mgׯ9g?}Kl }J=_Z rAUeІ
weE]Y NǞZw஻+ܞXҳQ@uuWUZ=e՞.:n4^5hcX[څUk}2n낪*O4ޯcS$M=sݒ
H/Oן<&#y!DL@a@'ͽXz'<
x!xZ/}<	<M .	OjO(K'`dERgyCՒja,-Sᩭ.V4.`vȖQwK+`H.TUWx<%ZYmdi+ǺP
)X?nϓP]mXPnZ\U.h~KRݝ6I1ߘ%
4ǻcmxY1;ٳ׊x|zM_@|Z+!w-֊(%vG|Sݝc'sqopwy}b4jk=rShg"¾STM_zѝR_-}ƪ1ޞYǍ%wU,fT72:^_fCbW+kbh(pcl[SƊ䑌Zfyb%XqݐuoyE勗xV(*wFi6?1uX>֑VH
R-(%7]@+%RTo`2}t9}L*Z®uRtn.cF[72XUgVynV%9\]gXoPoү]Rhz{9S~ɲzkUSeU~>|qn@7N LOql]]I2'IF3Xa*cHNMIIϬOP)R
>Rͩcf//e__zo]Q{\]|SQ ]1z4?	d~!)=qy̸ӴXͿ2sdrOn=wJTZx*IK6.rOYc?Sʯ܆bvNW\O洁qP|8B*Nsh=uh/>ͧ_]Nk,g#5	^$c$uEl2$c㧃uLtѡdc7"PdAd~%ap1RsLt.?#x&)͔֕D$sBQg=~ƿ +J3%Jn';U[=z.oW㴁hu46>J4|rG4Hz
^_>JpL|oYL==:xWu`sKK-ǅw
Xn[
@1*wC85̼?;a42Ӆqi5ʵoM!7T;㋆Q8nӤJ9`gl'y_sJ)\ -:|c 6ą)(
`HK8qԊ8OȍU3jZ|NψfF9Nתn)%bvXnh(]RW[F4h]ո%U%b[nퟠhMK
		m	7̐j뫥z71\77&/`*/??6AzxZ"6k%4gn h'׉7ѣDCtDNMDDӉfI4h.Dćo'":h9MDW]Ct-uD7̉_%GT#z Qih&Q+|EDˈ6m&:n hh'DjD鼐G4-'@tѵD7Jt^Gf_D[/Ls6wV-fx[P\B{Fm=#o_poF|ڑF˥!u](\ XnXTW)<V4.G~%2#a[X+&nZ00=UW5R:!% XcOr	𽄛\`eE6h-_/'+EvkqE~9.`LWD8
rQq&<83I1T5xwgOtT1F\/gx>gtB/VvF"|/uOc	a\?ޯk8<Q<=^֏Kz8[Q`\&7%^YJtHO1Y@&쩄YubYqd+~Ul0WNqfmDM{J[1Q,6fSN_1_c%}¯ZZzxH5Okӟ=_rݯ~g??<?y_K7m˯%jغmή^۽g[>λwiGO~'듃ɐd4%MKf~ֈY>Fqs&\xQŗMte_Q0ʫ.Z۔M+_zaM݋/ia]i=~ǝwt_<1Sq^?UrÍ?sn[6V3bgߣZ aa±.CX#=Ṅ`>a_HX rA<p&rBni <pa!LXȭ"<plk	Eu\zBnga!
p'a!CJX}ܒFXa%,9)i*B.LXflBJXYH8+$|"WV_Mp!2.'|7."DX&L*vmg^Kx&u\z@xፄŸ.HF8-{	q_[	kH(6:j/g66ddBp*Rf儇^O'L8COxu-7$$<\O%'<pIpᣄG	MA9%|т_%|1"?
'CxD	_(O""jD	_"O8ODp
+7Lx+	%|&p!N%|-a ejog."KX&\HB.ʛC7	M)ʛ	M%ʛ
	(ʛp($ʛ-	MVQބD}'Hp?"
4 i#l",שב%$Np&>#%<R= I\V.$<BFu"?	7^Dx-a
6H8p'!{	%N'< Cl^D8hEMK	.'<pᡄ	n#|.u"=7i>*DO8𹄭m	hBP5"|M"|«D׉i@AO8('##'#< ³rlA&<p.aB`*?2pOI'aU??=
07
;{½=mi=ឰy&L'<p.ᡄ{*pB}_^+0
HPvQd/a
?s	5lUXb 
dV_@#*Z魒rwR-Q~
غu߻)\\_=[Opo$F
qCRF=B!w^UOWG.|rpZLV
Ւ;7/"ұwC|,x<=ETuT'un	%JnqY7gryP%[vݕlX,`v}D|v5}ϫY3t)tHsײzzjٮSMwrX}nOod7Y7װ*{ȿY:!`Y'~xh}_q#"</åzxX1v~WK<=:o˟Cǥ;똽K_5+On5LDwZ{@|+D;፫7YK|y>ʭz>_?ŋX:g>3rav^Y\nD"Yz=_=K.Lga)|xg>w4]
o|G'CGt>!u	1[踒s&(rI4ޮ`k3Ӊ\(ZY9ݠ¼=)ֿM_[aޞL˅Q}׳b4\wmbbƓ:rWz6]wl',^x$n'YwOr|*!6?OROKnxnIG}\<]3cڟƸs1%%_?շ*ϢSc\zSyɧ?Oq|(.q^O|O)ןvcn|pޮpn8pyM5_^iqLxfqʩT^SݬηqzypbYJb秂!iqzL܌?a%Y-q&/Wl?7uc%aHXC_).'6!Lx6^Gx
 $pD}Q[ErL¢ܭb|[?w
}RDzy^zmd/'C%~>a'ًz)Ų_/ًZ#d/72-	?N8FX!}2W	}JYCbF[e&
U_#";	o$Mqaѯ
~OXÊ}Z
~~W[?]pH G~~RpǭCn?'?"b_>^ȿ}SϺ셼^bROgb]w½%¢7"_%*q^C}~!ľ'.#{qx}¾|
pa1.rB`ً~S[3qkn}	ofd/qc$?	crً~Z싋}b[2qH_K8*>W%~żA쳋
	K!W ~H/~#r~1ᵄ}žT!b_&E-"=d/t	
C4^Aȥp6a1n%cBEȹ}@?Q΂J)#{1r0BNŸZGDIx=>Af#ً9p'ًqeu[	kGxX4ӄ܎&ۄ\j
	JX!AO&;?	I;ZKѺד}; WQ?wqSB)!{9"/_-қ }3a!W#~%a!G%jNM9!g%V]Еג
9d?r^ɾ\GO'_#|/a!w%ȞIr&, s	&\HBWU?	9Uu{c+P'Wǵ|rHo9CqxqB?Lw1VƬĚŬz|e^\ף泵p>M>n4:BO|f>/d8蹏t:*R`:bj>B}SE.qx*:W[	VOw\ELoǱG?^ߓ{z[*biI
'_`_cҏF7/ǉqCL8J	xyv.1yXU
j?Th&WǄW }w-S}#}Fs}
}Z}Ak}h8?tn:~"X}a--Vx)â~}ǊW{z[LEzp^Pp\g=QkQc17*X|/S7ԍzq'Dحk|@ Aߝ`_"?dNO|?jyl~y	Ye~G򸑁'j/5:O<4hԱ'<Ww{ʸ#<6|_>M/ĝ=q>}c>CXco\gҿ;>bkkݙܱ֩|_unÖgnJ>X{Y:Z[<Vfo~z݈sڢRC[rFmwYp#&D
^pѯ+t½{_kEc;@N1\jLr:a`oTKכ}h/vom(-c̈́?:qwߞ][*?ܾ#ݞ߅^{ӟ_ckb8G|sr{Eqog"UzSEQP bO.E)+,XИ%
kD
[,ϙYX^gyslenfɨ5vA-%Nywڗ9*٦k<MZoNNhf?oðklrq3KI@kۻe#M!u__:7o.p7oXBߏnp׽=]29N!.f;_[9pPn.l˷GaHcԞEq0"7ZQM͒f-Y̊:g濍J=|ޚ~:N5Suwa[tp_'7.^3J@=#IFSt;endqQV9d
wX.FMȝm;OpzhSoM^jХsx57mg¯Nyؙzż}|MY ;Ϟ?relڱӷK{y2gVdv+lx2G[h/3og&khw׎CLNl,z'x=Y}'͝m?[9zz65:rՙV>wW_2Ftyv;fڍӷz~g	ۦvl8XsB|%tT|ܱ*c`Sp琏kgɎMG/j9ڑ-/&3n9Zyࢢ~7}}50au8>Ï9gwKզS־R΢_fE0G	W>sSVk>q#^'p\suxE!gO,ceGomMHouR5!ޣѐ)W#}u@oKǡsN=6#fZq??.rJv_]uu&uёv5μ8,|Ĕ=<}4٭:͘~k?l;n]QYzk'nQgV
WaO|]D^޹s?3]f5Ks0Sڙ2Gnv۾rm2-#|rPWC_vςP_ݾ)+Oɣ]q{qEk7u<闾,Ot5m`Ak=vk	\]eLū)^4ݟcorFZ7];x42c.{MoUw}jY}]:d
z.XmÅ3d=
n␼M7nj׶Ѵ'k*9NhVW֥}YEn>
WϷv5gQ3zL}؋ko>]o7"üg=vT-o׋YfV	֚5:Mv~m9q}7.NgCGZ[OZ튌W)!l:գ6.mb[`$8f
8h)TeupmϖA'6Zwχ[rkyڊ>烲͵/~fZ5j}oްPs"k#\KѽRtXܔ5g33Z5tNt7;?wpI#z=hЬ=}NV>ꙍ{R;ȭqwr:Yܖd[ݛM62r󽃻Ӎ֩1j׊秦͋}fNw'8ܘ]D6?&i3_Fmnxݸ9K?]0cWPQ=ӏ˹=we}$/7{N6X|i٪a;:u.kN
^k3ǒyC9l|tfo-/O7S߶#[W\Z:C߸xoN@̩-(zK.$5db?.e^;b_>"̳'
5ׯӳ23:ZzyfIt7As3JД:Nהpzӷ'2DVÙDǐ':F݈Q(5$=tg:$zfˈfo[%5,rI
|RJ3ls~ NO8#ݜQQqmC̸G#\	#޾f$cXG_ꑓ?v\Z4E(pozQ-*1Q,s<qQ_ Xg6҇`JkhͿ|ǍR:n=Kuky+|-x.@- DT߇}.)>9QFHi}=eKkxAGţ{ej4*>VgFRALKCFkׇߣ>K
v1ry_19rI}L9#st!bz_͡c\>׻96-dB,GYzvK)o=ry;d1;|e}V0r3ܮU,vWS6}
eﯭbdfZv~:vcc
qK>t73?c2޺yfǥ!kuI3c3s㈿6f/4qn>!akG2pq֖ۙl	3ѕ+{g|yހ__ngϚ;YyGp{qu3?AYg;Xswm~cg2z{0ikKsg踟8k}~gf0h8C68b_"̓1VZ`;0ȉb9d:c0rS<{FW9aV)ƙ8(!N|EI`QyH]sշ{;1Εqco8kȆYI=f<e؎8$+Wd3QU`c`2Mf[\1V.s2>8k:c[_8D8>gf{p2c2jq1ge֤3}!w3yQ#}'87Mz1ڟX/`^u{7އ2#:[k`LN149 OJysƿ0ؼKƤio"ϘX9Y{,XmGZ38b~FcvZ,^-o2αx'ߪ}Бq F3Vq݌-z4kxmO[/q+d5Y_ FjGܿ ƛc,_Lǝc<cnI Y
1Var}ndjƘg/8x+mΈb:b9]Z3]=vfs7c,J<d}z塋gM]8wNaU_[t1[qn{M\ڟi>ۜmh*g~=2+!)^6,2Nx^Fk[=yJ{SiT5Vϳ񲀋FnV-*z%ꎗNq}6ɲSWf{:֏7sfd
eɷVew?s>~V˗^>y:?^V5E</';?}lea#ޮG{c^Ö4xya[}{Ԙ<!|3xC<<Y͇}/l7ۻf0g+1i_u5ͱ{No>yϙ֍idǯ_v~b~a;ȠE'7CwÝfX?Fדrw.x5߸ǱE
x+QJ`喙wh1Νo.y|Ƴuֆ_kG`C~U=7?(lۣݫCI}MFyt<<%ԜJ{~X?|:?]U_weͥ>ܵLBuum;sWC^rs三V2_pXh~҄oU5>}Sߵrlć<,	q?{ƓL<ˣf375xoZEnI(M	GҒ߲fCАAynqR{=աŕN̴1blxiyOgcxt+kc|#lNE-~i㉽ϴn[ܞvƞ5xu{dԎ϶;'|Pt#7ɟz4坽Zߌ;dV|Ht|1uhUq:>[Gkz[{j;(Iso]-(qًo^?2w4꾰jhջwGk{,{(ϝ7;knhD9ѐ_Nkox?ێ~e{^UךOjF;WZtkğ-2u
2Fcܽ>oM2EMs#K-)×7ѩ-?qGM-mG6c^׃ys
N]nq~*ZD)8څu^]vk_#>Tں$'_)B[~rQZ\Q:w5_i¿5Xtⅸt׌mG6??T` _rTG>>=Ҏ3$9~mt{tSDyu_^{GxյWƅqRnq(lՖ5|;oe'yJ{֌-9z
k2v#I1B"ߊ_f){hFGmIkj|y{T܎}yQl݁尻﷾k۸'50]cc])I3oz;MϡhOo)~Ӽy^\}yS~D7F5msVAmFb"ğǓDym[F5^My?	GcZ}U_Ҍ?lԡS~|n&飻y󖶹uk98͟n}X+gǡ}JcF\gw;vw7C>}b84?#vEr7^$ozm{wعU+0h3_'3>EF}xeH}t#\Z_ז?c]C>Q_3˛fc=~&?}ěY}ׁ~GL=x},O6
}N̉ރ1'eEZ~
H0	=y:MlߜƔ=_{]GA]7>`[ /PhGaǍaK86j_Q07F}GA6sѱ/5N}A۩b~յT_܉>inP}?Ӿ-w:Y7v^6nO]ax/lKM{Ej
zҵ{A<{{_$L{nAw;~YNv`cN6ܼu!n,;r'ԨN>_|+ҟ7ٟo)
9{XVhѾYo魮{%}+=\	=
gvkVFVXtEw÷˖{#Μ7э7BmZ#oOv印?zH?߿`!V.8-O7BU>#d9 >[gq#\ke>Bvˮd<wpݼϓ_Y߼RwW6gǗmZxhQB9o寅Kek^	Bۼѡ3EBH^$1l"aT0"!p_	fm*쿍`? 	.ܿmNEB֪\`SĳOo	z:{9}%	y%piӦW]p|	A^	G0Jyqtɾ.v_u~%sDJ{x1FZȕ"m#cmS(Dh͹B.mBJ:-/st:l'
6ˆ
z
yY(MphSxqBV]}[
Q܈7
y[b](W(k3&gנ/wRg])'^
st=wK!{ 7ToKayK^
O8?ןR04ӳa/c,~)C_
&Kon_
`StI:/#-88KaQПQ_@rjyk~ͺ@o@v!7@zs;؈g
Ͼ<GDprzoE)=ohܡ@\sl׀vkAzEsk@j}!زwlw_GϹvpWx!iZľuǟ:Bp:>]/?f^pvMx!<|ܠB^Lx!5]~:Xn兰moA;5x!#_<8Bp!}IBs;_X=97_
i]ND`vf&ށsK-7Y/5(|j˭Sg{36_hx®|1wy/B|aۈ960(nN>_Ǒ}=󅦖YN\|av1&_g8_s}'ߩi%tn/-<΄	r9<[poO~ܘ_ՊS"ׁ[',^1#<F̯N,'XO&]0mD0*w~r|23&O0m^wPp{	O'49'Xo<ac]V_> Oh'Zg<!Ü
_<{2?ZGZXeZ
aiB{P|SZ8郝jaST-j'x	kB[X|pWˆjaAI8~ɲW]ޭ;#J-||Zja/p$T@Z0?NyZ5ގ9jqb\Ԃl\-ݫMC{賏Z L@s~LbJ\w/?IPl';!3tHvxG]sO7S݌LgɤW$.O┊X+Kl9W\>ںktd.*CR>7RFO;B*vi@.ƖƶvYU䟃4):rRmJiݜJ-ңt2dF6aA-Bj!صM ޓm	g !׀n  rh2	x
"$
Ӏ@z4!{	Y$$zf*!4/P[< ? y!Of*sVa	]D/pxz,&?	KQ`(o@,B 	L[+ ><JBTz0p8\n wSb|ujBZ 1p`0d;Q'WPn@ @ 
_%o鄬 4x!}_Û4:}0l͟4X`p
x| ނ@0?"m?H&߀)~@
0X
\ Ӏq
@?`0X{蛀 5}`r 4$`lB 90|߁8`40	8|΁V1L`n /zO0@{|BaVx[#8Ԗ#9rqGsdD`Bȑ2Kϯܥk>M-Zy}۹#鷓
]x0}E95:k0ք'ct8!&Rِ==;1_hX~>l+MZ*,"̾$HQi=v@G+0}iTQ^:s)y5Ri	[9qCt7)$,rR>zhqCXQE=['U0sT@OvXwT6R{1kX0S:=RmgGj1=TܧC^萌kYnRѣXR=}EI%X)%PjJ]gZjlW1&Jɑ8vh #\kp9͎3d/vle%!4k[.2bMei<tKҔc+ڔrN[G-=M>S*ݿe|pCs7plCmeN_F[BD`/hBt'z5z6*_ !2ƕٝs7Ug{ z+[<{U׮'!У\qYcnʽ`91n7AoNzWWDУ\^<~sYs
ŞzK-[AoUzװ7P(c\^V![]FH#`(W7qk[S^-=ih ;d5zm(; WSaM$mBqunR	U=B "#n,	UG3 zϪkUK`(W
qW]лRVO}Q.n?=k5kx:lO8b7Q/^G:/HƿDŊiZƸxKejJ-(?RA5
ڴ>J1@z'gfی1oѺ>:
KawZ궮ʑ"6!YDOf\rn:rk5C2}cpn}OY[1tۯ%$6(G]N&2b¥v*`8\zTA=)GL)veq]9[W}X9K4o.}>%6ˢK[/JSFgۗ-c'-A-=XմݝputIUDpt׬$o.tYxUu7p̷(݀9mp^Ai򕎵gkj5HCZ2<r4FAeHbCX
੏eb6--riѽX~ryaɱf.0%F(T_Iҫ_Ka #ek
ZI-O3R+6Zi'ws{̀qbOP3}hJRKRu:2.14$-Ci8K92vG"OʬڀXnQ׺C=b4r~&_}b2O=bf	5%dDǖ"8'tǜRMc9q3#5ccm4Wk>ye2WC	ahֈ؆[OcbRm[3DiCjrdk򚠼:ˈykMǶq!|+c(qlYC]R7>6:Rial+g8XNio'1?[r`n@ϛr
rvg`<_ХLIiEMI9dTɄ`%5dc9Fmk^~~:NZǆllGCcǼd65̩ԍ񐱹J\-#kRk:2<4$s6&Ξ
3fR5_T'e3lҡ!ŭ jľCN-Akpi)Ɉg
#e:`9{#b{3-ՖhKbvD_KG7ÌG
u(h9fBꩬHKRӂԛ[ܶKmюԄ592&NE)GqTLF:A:	sΩe\Gy^uԵs>89 })סV蓖ıoe߬=5Ս9ƌXǴX&l[639S羽+cWGYge*M"^cBLI:u:rmrDa~X9;Z2vġ.e1(y#?"Δn!<W	>佌WTkfe@U(/5"C2,::NKVlS/Q2cxxivEKwSm'#Df}pp1!UۥK[̉yo$GǖmcY(+mXf<;{)_K}bc;o'J\m:chM,Rw:cHj> VS١ۢ۠Z0WM	Ĺc$cyk6cV՜=q{ۧbĜʈaK=ssE%Y	߮F"BF|"֙
p58е#dLkb&M][955jSMnd!%S3NFicgD<-\s5Z=([Ol^CcpTCY{apD;jzOJrb0shVRZzaD32e}
9F^tL9Ԓ}MN3<̣qd<KgCkj(Ԟs:DWz~)khЈa2rueq:D)ˏ)2"
5i99y\!5i&䃔*n_@C5;u>0[X+5Ry^CNgφ8j\l}^.lŠaab47$2e=gjsd"֫50&yΓfJZW:1RO{&Bw2ᇒ9Bk_|s->|
F95ܐr]2PiQ#D2bp3/\)##׊{#c60١Bf97ve/۵R|licΫ9O"&ǠתUmFj\lC==bM#9l1q)Ub6M!S	9(# :ocXcmcm^~~չxƄ91;}Cs>]2GF:+aqAFP҇5L6!F?+Ǳ
e@PFz~\pF2~%;5~| ?"sOphp<s!L+=[3Ybk:#5JyCmRژjnibgӪ'e$e
ľdD
d}Y{5'ţh&wU!}F=zO$WNomz3*ğ٬*`iIx#3϶ Ļ!}nӏcϗjz1r=^
rdH,xy_a۝b-}+L݉08a<~ @xD #=Y]+#HG~:j7l[QL{B'(O6	P?BV ǁG:$~.@m 	
\
  	
l :L=p0iw/uPgDQodi	Tsn}t.NxI
b@&Ą%sbA0[kb&Cu HmHꐺct"
HCLą4!MI3J7⎹iIZOҚ!moiO:"<0o_tF.dHrBLB2RH{'DHbDv9<2<:%)<-=9|HrdxHUpExx8?!UMU$$U'N):1%MQyl"R""V":*Tz7=򜙪2UjB'Ug1!9*kUF~bM}BCғR<GGVv%V>(~x*ͤG%VHMUU
UFE:TY个E"5-!%*)U[G-*~	1
Qj䘔"c*BI12򮜐
0u{(eM<<evnZQ5l;Q%8j:k5JMX%=ZUp$T>&r$JS;"&Ϙdx+߀?H
i{W6.!
=ʻAZ5SuZ5S5ުȪT3dӪӪ>e*Nf*F|ERJꨪ4TV\Itf͔ʧdM7TeDjJos&j8W\mt&C!2XgTl1NOdO%8^Oxě%#)J\wZbG]%$q%Nxċ%%eHT>H$qc$ΔAJ5?X_wxĿJ|P3_ą"K,MxJGKs%^%DKIRnxģ%%q%#eǺsrz&hEZZD}7-MYWizTLR#CiXOz.u\*UesHLG^F}bbRirAJi:m쏚"?s]RR"JEQ4MȰ鉪KLa;,Med721]AУޚDwB$0g'$Ǧz}RU鑉'cQtHn놪"t闒̞xHÂRR+'Gp9YE@ȣIgydBIջ$$%̤u^iF0EjRB2 uҤ.8_!h4˜Q:Mleu*ߖ1VhX<!WXB'
(DFY*
I,x䯈JSj<l"QJZHΡ=;j.hg
<]x钘Ϭ\g)>U5!u8.n+r*-L_ꉴF~)1'	if!1;$:,	-=#GȄcq%48 @Pp0Y$.}}
OG, Jqow] d =fHs]P~z7L♷XXOtuԏ,B#Ǆ?Z9d/{>~!;4/\&$b'+|ȝ2!GėZ<<!5%9	I,Tfif4GBq#;0vZFXOINKIT*Z}P4j.P짩LRAy >7<fKPS	kǮRWOez?	v=}:tG$WR@t;h^cK 8D!e'F&ǹ`>ɊJv"U`UFl4ny;iT9LK.>>MJHLTaJK=^k.=4D1Xvz̶rzb\t܅։ֶ)elh)+M݄]yl$@9IKIcUi%)r91LINKW*Q+YKa.L+V>"OJN l?NE&	)*yɕ8ԏcHNK~jSVm$QhbvWS)W&$%ץi?LMU]K+KB210%JE5whistJ\2OaIY>]?;9KsY;
qV^ղU_iThqE"t$$3@j|=w
Wfl}v.[*}}vKG'z*XzS
k7>>^`t#$>OVN'b\"҅_ϨGH3oz̨
ӓUыyrʶ4m"MLfR㲯h7xŰ4%i?Wj\<+ZKR? -
~"$0F럁[@|@ύ깕iK(/9S0.]&%E})ޭ|vʧ+.Nݴ|%^pOwWٵb
>N̔WE +SA8GW.=Dtu)n~o
}ы"ckkVt:ˮQ_kS|JaG/Qo|zzQD]9)Iؤo~3&%"=^$Uһ"=W^qK8g2"{RTKXJZEzbI.M*y~$)S/iV6֥&ޥՈUJyZ\M4̀KAxQM\aE!R]zs
#,p1ȷOVdPOm$:YMUѭ\"hPlSF,SLm(SJΖ4Knќ,nŕ9h&JS%himOk-erzRh+^%ke픉/@m;%s,U.*YNwme+ήJH4aBC/]Ix9*by͐X)nqOUKf5,svaDx&^gN3v>8;rVNt&S+.69(_|VLCU(qQq
Sb"Y|8X%.	VzJӯWINCM&(ҹvb9QXJ͛U]o&ΥKT.kx ]q>InPu[juVsͭݔdqa*.:Bt}(" r(;N*ΧĔ(,
lmRTx/B]Ra
NF_>rI;jr)wUXy= d){GHRӑPg=|%.,'Whɧj{X+}3*}]y?ՕW͖\?.4::VI+e.	KOaE^.+.]\v.;^RkU5Xyn?w<?5U.IQ`7ʥ׊,vϳGZ)#8үU:h|J	_^iǾUQ~ƛ;
UJeQ}v*[Mgֳ%83jE
}إ`LZ΄[?"OHåv*Z4ntd3תW-ū~ЯlL}5J+Y>J뀸HwJ.ߗp+(gnAUV2Kbi+;VS޲UY*zޠ~\O7Wҽy/hvU.PMy$?57Je-nFnS&ue&j<GÆuͽO|xdWG˔G>?TWފ|us+Ov@Mh8>܅
{e%ξIsg
BbY9NP_Lh#SǭZǔqOF\l򤄴/xTWO[i YV6T{DDEHIğ:Y8II S84O]g}G|1Y2ybJ
#SMӇz
bcR#GмSc#˟i@ކ9	,rnzWDDreb>')ͥ[-4vᄲ{m<苃4:6}֭ZhٮutVў[Ĵo2RiSYI!)Ii,P| Ueu4-źUNIlF5ɚ$%TFg|mORzM8<@H⯤QqWs,C
/W<~SD]~|?e5%yufD"Y~?mM>zsEŽH͊HOy/78WGk]j%4?՞.ѽTƊTXҲI*?3ED'1STirLHv,7_0h*h,W|:,ا `'es*5O/?O;a'z֚C|R5g\ibt[NRQ˺ȡxNSi*-:D<U$
kOoғ-L$G&)x|+̈́\|\񾄥g'c-Z*^'K.~dԤQ%	9W<3u.՟>+rhC|VPmGm4zG&ae)m/]~,E?73isNڟ_^h{]&\R,I[U}8y5
#Ra;ve-[eM ag##2\}/MYOn?_mSXY{啼h_)ol|Ǽҏ/?+ȨEl\|I)ai#F-wҵ[@`=Czӷ_?{(p2R*B"&X_:^s[E,eqR^	Dx'H+Ϯkţ*?n9z_C,ׄ'PfV_/zwxB{߱?\5YѤ C*_oJnOߨȘ!4Uwzeu*Ǯ+BԳu`
>=4A
v=d0kR	8L 2}GqkB¨d@d_%$2@`.OLCAӂ|	GmG!	 
Gc`#dv'݈Gi^483Mܤ~ !$v!)|(wF;
w 9:	KL0 kNTu02}Ax`/d}f=a{22}{02}`d~z!8Ls@BB8~=W}0ћ14|XEa(
 4҇y:={}Q"
dΆp`1d~sa
>Q;~=LLaAߑb2}[&d>ÀΉ|2}߅	["Y	:_BAB@GY
2BJAҴ_h#<zvPϐ#{Sgp/^&<4yC R}phj#PQ^p
`9
~
8B/x=4Ea_Bz\gov6Nxt	
@@f@V;B@3mrx
+`K	9pr-~B&Y,<h#|2j<o7ș&8x
9!G{#g\9zr0I _GE9l2R;!	|06N
9q2q>G<!{OH'9)6gl8ҟHvI 2Mpmإy;q$/n͑M yBV}rd+<E68MOS9Cnޑ#W!{wH.
xD}5@͑"j/#?BqGL $XSjG9rpGB'z~ xBV=E=C!gLHM~0#aT|bꙆgrdd98DG*sys_\
9;'֐|>y>R;Y#!gi)7Zȑ.@E:;GBÀȔȑ]mv_N!rE	x7^pb<b1ZI_"ʔK$SNd%8XØ,)[K2/GI8b.)` 'a)+1 g3Y`O
dBX-LMS7no<F)ϒL:I+ɔl1E9	d3}i?l[ O!{} 51E[E[:,,`m}pKIJr<x6N8\C
]t"Wp˷#!}_1#N1mCbG}^*Y>IwGf7Zݢf(=boM7<7Q{D`߽b?w?R`1@|	8*xa!;bB~yL'Qw%`?DO?-mϢ_"8?o
~e7yArp`9\sAW\NE\KN<x5FˢIr+ߖ0 DZW_l~@CG|(_T^/'dKS
 S~L^v<J
ޠ S DF2`&8B&#WN(S'ʙC208T)?a'RF7)ȔeDr!rȔ֒VmRVe%$?Ot0	ܸ|x9Eu'|^ή'#_> pNI
Eo;hpٱ6Rw 1>oLFX?CʋVȋn1nbywSn.#JnBFV`.Oh!Ow>@6{.mMƺęFz 'Ǒ;.]125Јr?;t'fYkmt~y)7\g3m|gy~O[!?No>NŹS)g)?7YOϣ\n?Ch;[]{>%_Uq`;`6H=/绰yɟy?x'i_sO8WR.rC}0}I_y>y*Ϗ8_w3|uk¡GR\T,\Kr>̟]Hޥ@]*fɃJ"7o`]m]L:.xgQ<wƉ-pܛ/ԥ\OA|9)8$w_,yހ2<ub/6Q'	"+}J|*'gk|bkSk?@v½kU]H6Uj^kcLcP?+ EëR9-۸7~nئA>}=Է{🷫F׫|X[wߠ%#\f%Q{ϡ'֘ oکSn"3pMޞBGs9OI\D?S1uG	ݬO8R;wO>W}Loa}eg-pu~xwnÂ%s+Ø	
⭪ϖ'g;h0s<Mم/ܦmF<caS*%D}av/9]թ䭟fhO;Ș ,=\ߩ|]>osEr//y;23_✑;]}Y{x~G<^u~^>xĿ-ddގZy{}'<r&Ue,rg'վq6Cj:k;pa5/kV'a#HuLꄿ%-9&kGy_>+[h`|zKqp+_O>b^*g)
&?}ۋI%֍0|bI=W.QyV/Sk1Kg6	?O
9~C^7U{FzϡQu֧ԽKw _{ę#ۡxKV
$GKP
Oqx1X8潶1giWU6|OdLzxt>YsoƢ
nG, ѺM-xs%ch/9EiGZmK	y:^r-%5"Cv9A?dKނ%^r	>4R3DE;It/-%)2kڥZ]-xڏ<xZK>V]GGi/]ޅK>]G%h/yYK#h/(L>Hf~8k8>Uu=+.]K>yə<Wz^r%,{^%yə{ٗ%%%w{_]_y>%)^NWнј
>E@{
<6tzԞB@FG?LѩΔxEAB:ڟMOm2ڏQQ(_9풯jO#Ub	iqZb5*q/W.|~)/Cu![un8	Wywv2.1'n`F!,ǿub_|@aQg
oFaYGMܯ3A_^e+o3˱lp{]ƘqG#v{ׄđp
iƻ}_lvv!5txwz7䭄Q15r2V&ZvhV&6g{\1˙|m!QAgwB.>iy^qvy1&X_]+0Nqж]>d{%P+rWOR!fn^%^sVvr-ˣzPq='3zVyuMwх7CfČ	3ef̜Y05mv;94ǦVȊX1+a
fշv;f'씝svݵ	8!'Ĝr2N)8vN:cGTP%RUT%SU
Үt+ʰ2jFjfjUn_VUQBH-VKRL-W+ԴZ֭kڸ&z.Nd{FC]' q4ĉ5Iiqqy$I"IKhS$":D#
[ָ5iqӐBZXhQ-ŵԺZOkm6D_
P)\X)^JT)]ʔ\)_*%ڥN[AiXƥII@9T#h9Vd9UN3l9WΗbl偗3Uބѣ'O̎IitƠ1jLfnFfnff4;^s5'M+
x+J|rZV5`55>a&κ׊uX3K5i":8AdQdYZd8`~j"ȼ)|B:=}7F؈q#i7ct2"cfQ3n&ʹ5ft̎3Ȝ~+hVZyh9VYkdM,v5Li;kg=da$ٗu^Ȼ3q`%\Vd%]Vbũt*ʠ2L*jFqr4M~M쑓kZ%kZkNS5+*6RT=Suޮw>FjDFjdF5ڍn6
4CH3L4SL3,4fm)ZViZViZj~kH͊cj
Q14eV4M1uF#gPjM=1u(0B&WT\jSi,B%'sSw>Ǻ0FȈ1#a3
f.sz['=8ɐ3@jdd[YPΕLS5c`X/WI%d<3d#V\ۯsݯ~;PK
    \               com/sun/jna/win32-aarch64/PK
   dCXeu֏  0 )   com/sun/jna/win32-aarch64/jnidispatch.dll{|յ7\fr!7 @d r!(^E)d=^hQNOhzVOi	-GlicˑhmXO	4>H=96λk?Ϟ=LBc2/c,	~Ŀ ?aO
c?qKun%|CUCojUU~cզ_ꆛjFaaD"[]v޻?k!w/U?kw޻~Kvݽ{;|5wד?k654"++ro6;yWo	UaX-hf5sgAs~YB<N$Ry^׼LU,f*,.ec3d~'}]wp!=+9NϸmaAӼI=WSqeYpJqQ̇<[^ۿe撿ckd<쵼޽ʌ{rzB/VeݾܕEv)?U	׬2,4:9q/X=ŬtwA
UVy_"newW2UR1
 7/%g,[+yp(I~0Ic&w%7?mƾ#}o=Rʆa~k5ZQPǄx_3eG[^mbm]XJAW1?zBbpg;b=rm(z~Âj)oJ~|7\R.-;KIBdo.2˲*P^z<8}駑n䛢k Dտ<xaH?Z'~ߜ8:įs\5al)kIVdI1ip?还
#"L/0/?LI|>O/NOHe`[gnCuP9`|x4uZg/eNo~n07zi6MHg:exG<PL[PJsb࣒ᜧgD9@F%/nauob'l[ϯJW=]W1p3t,BG߲;fH|3N<e?wʺ??H<PW=zyNL }o̚]UP'Mluci^X`rgc oҳYndv{W=
.?m{G?Cztz_U|
|cU3^Hf% 7?Y{%v@7u
FeZ1u	FD;AU;V5?oWu3|`C;`Uƅz@W?av#-P63#KǎQR810b)MO>FU?d[~5LIq]	yY;f5;uŃSى`egYq%^W?6n{qlj9ܿl? }9wǉuv+~b>90gPtBpS7:>mtįv|~kVGl
֯;nBw/븳c;µx-o]i 2poh&5p{!<eC }b^l#~O?oޘw8GܻxxxxX<|
x`xJ)
B98?l\ˁ:eY9P>-f,R].={v<t6y;ۙH̃nl7z lz1َa6sba@I$iA4쯡<lB}ʌ
ւP?WCJ)7U=lFyc:S_T,mމ0QuZk;xQaC?<ϹH-IoX^z&OI8O
q,ahAP7Іu2QlcKz*aࡀ
"y69<xƲD¶c ay~_nNvדj
`JrWV
0۠&UVnSqyxyk+="p0_!Nqr:H?@GuuYqc3|i,]{j'v4Ǎlyc

Gǰ{OZx=h=J<Z %Rj(Gri'M?X/>Y:COwtjPm @~{HsZ¯ꆣ^=e2]7<e/]K'Z[wǞ}k1SJ_FYe*}u1sg{oX;U2քcZYcN3*vZ[4XLk:Ȭwogm7bGqY30z*+r8?4=ta[2Qg&jPVʁdu Zox?1ZOsy=lvwO>q/<
w3+w5*Ӫ!wdZpϔi=Wrw{1c^*iLp#*MkK%?^/$?Fu>o+MVIwH,{m>-{J: ヒ%aI?*i{I>'֏eZp?.g>R(_`KWR\=/IS44{>GHc>oDw9\DsEz0z[-c|,7yN#N_6+A?w|2Nl~)wwCIl8/_xߞ\GL8M!,<_V38#R0J|:n?@pvvwx2x"/o^mo%?/bmPoD{=rP_un-(_	fW.,aSz2K.$a"XV
DӦO?~g-6PGk:<\Xr@f_13=?o?o
~p$XRF7d>3,bȗl|o%hsHX|l&,Gt6
>ȏςӧbN'٧/#rzOr	
!Wtk\1i]sFtOT^c>G	㨆Z@z9clFBѵ(=18a5ny#vfzw	],ʏ%c5`\Z<aaH8i6xZHs`K8
e	'=Ǆѕ#0bQ	cEul9[fkHMhMFRAjU#9\?=?q'E~]ۚ|4q>>r?#_uSZ>~-(OReza,Haz;CV[Vp[3q>zK*Eo,;}ҏ}fp[szbuGcVJeS4=h|6P	Rǹ\.Mjcq`nk//ecbK7Spe	yNVv٬K-\y.h4mKEa跖BV&SK2	?ɔ*B_ɴPgUȤѴiaJi[FrLO<2U4B?krIiӸH	o]2mk&S\ynukTLK&idZ"FӦq"ߺdz]TpׂL_fdOڿBKy=c,0
5$G x7(O8OQB%y9>vM$92` H^!kbթ6MXf
il,ۭJiؠ 6
rSy~
dL]2 L+4~K#
46k 5 жߦrz\dSO>5=?Fk!q~nmݤaF2 |Ի6:-Ut{;\Y46[B[A@ۺC]b`4覲Ik?ٺYofPy( >eqfn/ =\M/[2ME~kh[tq!Wdlt{[|[p[ng.17}5~ ]9Ví5/5WS~x?n}d6*ya跾yy| z7bSe/dX42]Vi4 V;H,!12df/]gId/4{?οnQ^R}|d6(U.t{ene0Mc[Ctc;_2|Vϴ 4݂-l݂^7%A>17.ImOCb&E'4c~JlpH	%Mp.iO}}1[}8q]0܁bPqJ0\wB)4-!%7W;"rG]FnpɍF*:|ƐO.~uy.+x
	=93tfQJ61{!%1)#017	@%r|;P{{ēs׿K$iMNk72^{h˵>d;k;:u~3V{rY<+ǲ-<
*c
)!ӂm(bmxFh7?GZǽ^oGxX<z6kQ-Xjy1\"-yf./o
dB=PW5þ(Rq#lR}h=n`'foF0<]J||OBo"lY`|
<4g@'/8y7Z5vYc Egd}|ݭUw̻9`klQ/:]~gn)AY=y=_~/G#s@>b6G,)͚ER#AR͠E)ve=lȘ`sa2p!f8O׃=<ϱr[raݖR#_i^4Ӳt>~&_i1/f	rv	vcX%v[N#~Nk,rN~g|g}0k9Ҝ%><tPZ&8Mɖi}gmFb2,0#kd#V f⹴ȇ`'kCpk8K9z*R5ceP'kN텝|gBxo~V:qخ{s^
vu|*X:I5D.dM5	9*}e]Ux}O4ӈ@l('ߍL\Ͽ_X
25:^ostWgkIB<1VON<_+	yىq\G3"_eoCUx_bbGfJ3%<&~]Xmi"S Wi=ٞ7-~I5KBo f5bۊ={oj?a`qڞqב(2^hC7?|˔S>=k1oG?*KG#n(:ՎcTϥu2?d3u`_Y?:ߚo+{Ev2j\g)^ĝ7Zx6/eqcx0×dP5+Mb_o%] 0;hS21GebӍoYft]4i4\L7
6%]բ=-ڲRQGy_φ:ְb}0cm+iY0^`qOn@d+b]NNnk%2w1fG͒}p^NRZ(7~gӂU܏eNО$)8uD:{\ĿPO7;r뺽챘S@ꭼf^p=qdhز&ӨVhI,ᧅfӊ:dBK9%=ٝ_cMw;N5\ŚYrSwbJ4Da؏:O팋./-v%g5>٩7(>u(Ӑo/ymcڗ6M_?75^ThG:{	kS
^!skSA(爲l5@0fUzs^6'r1WqD߷c{.fnyՐEC>{q__ WxË$A숯6<wk|qo5;Ƙ՘O
^3vOC>Cd'flf'0)mm}KFhcբ	#w<
m	ˎӊ{;Y30b`0yr똟\?1yWZ>(sB/<Q@||v1>a}(#S
lp~luF3I4ǿ9G./SM㨏v(͂hGEq6UYqrF9PeXJ2;EAX> 
طoSd -n:H	\<O}2~1'LDNH_uӋDy:$YO	@;V/9aքI3\F'Dab|[!U>r]HsҾmmhGBy=4@^xY?=zyJoqHlqwVh:Ae|Bmt x~'-=̯J z)v>K@|ue"_s$g8B!UoO9%t6%kἸ'6]pNv
?
8*jQWr]3/<XfRl+fxYooaؓSu>e68H#_KzڙG;^bWNh]>/-E}SoeRxGM>h/Aq9 /Fq"g`-ǵLy>w_'Sc'aה)s";2DG:Yϳ	m
Jcߤ_<B`^Ɨ}^V"&b}u'|E}.Eߝ_clO[TϷ}OaO}`x13=:{-м8ԉ:,#HC%p.
Qo4W kG Qeg#nP^me""ss;,DJ"Xÿ:mC
?6^*9X/Q^ǰlpf^\?*]<A'1syJ}6oD?:|cמJACw	{>T_N)-O0Ay2OUy< \<<
?F!9AGG	|Ckÿ/1; 3
;scbv
ogy(li;y_VB |~#k_$6UEīfwxXT	*w~Y+xjoR
a^*x[o-3E'Ts<Wܻ``Ek'㏕;S.<50*^ػWW|_ɷC3H._WcρxEM{Tp TWiG_"{<?Pm%S?<_sV\ \~| / _ŀ<|7nA|'{ԑfZ*C{O{cp|C[5lwb߉D[kȾK}7nyGNy֪@֝8yLud󕼉'
Ʈ񆂅`wQ퀰5*4;su;z%w/0dlxkoԛ{j\pW1s$
wRVQ]{*Vl
սS9o`
d7*/ǻYiJ9ORpJݧVqB$Ot
!8nDkN]ZyRO~]$ƽPgm,3xkV0մx4/R`ﮠq6
Ǻ)CP\}
cvNf?- @
]\(ǏeT4LU0Dܟ6o32ϯ{%]<j^{_]8}jtD\'{iX}wL0<{Q}91%?x~k\|յ.>4ҧy5u'$%mˌ̏q{prx<K"kuxK tx!͌W召E:cC{wȿ-Cό/l-mP{422,g#kVNL#セ0s#%͊i>Ŕ4ٙ$Lcԅw?RoW3eX4-<b4svo4E]K&&6d4y4? ¼v`oirЕqބ81h5♅X9[
(4IwsY+ݡa$6	v"N[ln?b}}OrQ.."LVxe(ezWbLg]\e'ȃ@LAe)z@>zq\U$8HɇWͷq?}W/jhAUO=h;m< 4 얮+szy&
4
Bl~cbϱqusdRyo]y+q횃)a>1tp_o_ak_0>ֲ;SZ{δ|Auύ+D|sku_aW/s+*fka*_|-t&T:|{0Sx)pXfv()QiI*Os8q]Jq`F$0b"-F-ndW?ۼﳣ@ַ_u;%3]9gR22º﷥8zegGg,QpjO~`BLQzLi(I
>tk}g[W@vx@{v_yb{e'}Xbiq+s7@*G)eg;}=XֽYնR;
S"O7pO$85bￃￆ'c	?4E<Ftg&W{=W?~3Q~/;c	%M?Zy7ozP߭37Ioy~W2~ߣƁ]!Xg
g˝1sa&%ZU6$;žd3y&sp#7qouZiD?L%<k|qf]ָͷɲ9#SPpǼ[:cC>':iu˴N[i8-֥8mYs[څ1"kf=w; -=eSҮDy[-_9Bq109w(yN>Zq~7S(|ILMJeib"w(85M,Ny&D(
8rBvwt͹<-N
q9g\${=NVҘp?ž@ϛT?LI7}gXʺe!Oq1r?+Z>s{*E=m
B(wRs夷Q|r"mEu
.Bõ
;Ľ={Jqm!%r{
6<YI{=5[\w|2%~YjtvP?~iӴa\=,m}Fɘgki0x]d
@CB~mi
#cȣhG'w8Ak8Ϭ\XNJ{m=V>~|,ͺO.WJY
3wG:DH2#uQWA.mVEAYF)w.79R'ez /x&K<U>5s1IsC87gr=gV+16p}%Ug\u˧vqE\ wGD=򸯈]螿CiOL!M8U=ERחꚟ>k'&C.:gӿKe}zn^'7
oW[W<Wy;PիJّ`ڗǠrh
h^{c{kfXOXQ'8K>K{R+:yeb@!Oc7~xs7^c*8\eh0WMysTɛ㖤k~_HW]-fbu,wrwW~7P2;9ih2zjzj/Bc5q61NItQ	xSgIMgB>N&QcDI{CaU,^|)_#ox[Ĺ$W=
KuSy#"~rhyJͯrQu{rsR3s䳦x?[3T{=!=|pˎwCOhJ}{y.Ifyߌ?2 t,rYYs@!h+.u~OCWG+yw|ٴ<.ȗ4
!_F|pvG{<iuJ?>Q
O)/7A+
/Eg~)\JOt$O9id}wyt~ 9~f7]ԱXL1âϒxܣVCgte=<?jAUyʧfwj,*ߗ rD4B~ċІxqvZjde+nu<W;;cTĺ0:+`Mg2,⦳'6nڻ}I';tMw#'οB'twFAw/7݅ORw]梻qCsC_^wx@ORwC#nAw/
Aw#CEnYwA7ݽ:ݽ7]t'_TxF%GW|5
N*y({	}mwKّmGP&NeCMnv4@#"ﻄUӟ~ӷPC#H?eu?:5}@PZ`8'燉c~9CiĸeXySϊ(gL.h|my\ηض)15{6᯾v^#|pgusF4M<SLf^; _]t?1Cf:6&@߰kV➈)JU+ar!LGJ^:H?=uLO 	$Py/wq}	kM`悱bg'*!I|v(?[@=O\7Ϭ/eK?O{XCt![n{غz3Ƒ,idv@d?9ocO3@>/2ךe;:cyB8E7,ւꇱF&h4"ƞq\y	9Fku=@kOB]hV]nXu5VX`]Xma)߂w?%?Gޡӟ
)q(S9ǴRyQp G<|4IK[G5}@hD
Q<&qbnf|uGX*07B01` }_"Qm749&;$.Z
2+Wo,mu4һ	裀]C5	e.	腿u6W^W"VP:׀#Xi7E8sawAY\N{-|I{~Y+i䓷*US1ˬ`mWDN$}pLޑ3xlNMRM{9Qf-V^icPn4!Hٓ	&q/yC&QMPũmyDޯN	#(Nm7&Hay,^.U]uPO~]7َ|tnύi M:,oT3\!&W
\]*s㉰6%ګMg9v*[^T<w;u.)4^-M:y:{gSU0<''aʓ.yrf<o'fȓk̓;OI4<uɓyYR(k]7ϟ3ύOO`5ԻCzcԇ>DhM47I=t,cꢹ@Y䞿,}Cn2,SeLKRe O~~|ops$"yB'%ρt
]z7y'!OYqRg'P<dyNsg8Oe}uC/p{ufYrcN:{؍ٙųu2n =x!?2N{E}g+
c}g?*gmKfD;S"v69y8G
ܖ{7OORf7o#a,yc2M'IAxfq+StάU?h
Vq (0:\	Y-F	wMݣ!~[3A>tC+slׯLzqE[*o1ʕ* \	
NȝJNxtttAٝDNtttJU:]NqVnBN*[?^+[}q7M]uM8XWpz2y[yg(o&u7=$(/ܸΌ뗍gQyZp7݅؆MmX0
da6lң'e
d`aYs#|g7b~~XO5@˜8_S4ng_E}5=l|\㺥@@go	_.bm<\YGu/|_dmgKhzpkX5%PCgWIz³&P씝@	Z".dg\Wi6dSZ|7Bß`k5@EϏ'Zp<GR\baJMQXvD?ڼ4^)vEq
z#2wtCy>S9uߑu+1@K$/ !]yyź8Iv6Sgek1iX7B^lUȏ|͡>)ZDq*	ayƫd@9Ow>֟b+hO>y2p}A3?+-MeZ__''c}6ę}#M8y3=1tvдfT$G9T|ʅ8S9 q?]95=yXq{Ϩ`,SgaU/M$)-Ѯ^D\KŻއ'OӟcC@꾓{wW;gq9+8L$] ]O_|n$
V5qn+ 8aQqnp;
v:zi)<2 y߮oTS-$ųM{PU|n(dLǎΒU~Q~%N4{d<+=W.;<y2]Ҽ9MiݔifNtLn4In4gN}gNg8~z.~;k9 ;
wR`}Apvֻ_,bJ]zNyTv1*ʹ{=@%tUf<މJ
W(\WRvmD[ݿٲJuy|OY駷xYth4}2LiqW2)xRp U'	M'442<"FӦQ a|Q;n
wsI{RI
:OȠѴiT*2@Jn`raBF~N񧥑X*FӦQ a|KijsTdkswAiӘ a跠MF\<T.2&PHx42ȠѴi,Pd0[@m-dhhM%WPץEMc"Z
2 mNIdNJadJ#46s 9 .-1ټMd]l4$׺ʰ"C
ME<w+2g]I2wlR8Mq42sAiӸTߤzM#1dh
idȠѴilPd0[@m5h2jgd֦0&i2LK#$46k 5 жd0*CWu6MUk:S6 M жnsZj?ϛF_ω)Ni:@|Kίz``6;Y! +ж6kjNvͯEx]Z~ui"FӦEom-C~uMU25zzN˯4>i4
a跾
mk^GL3u#_/h46*2@@z0C~Ŧ}+k~_/i|>F֗ihWd0[ +ж+|yk~_݄׭W+.2h4m*2@GAmʐ_t_b__j4m?Rd0[?Yc1qGLOͯ7
-F7\dh4Wd0[@Y
45zzS˯75>F7i"+
_ia~5fWbZ~4gsAixZo=
2 m)˜_n|%juT4Mw~w +ж^3<
JͯcwL˯cid8"FӦECh[/gȯ,_Ort/7%]?݁i4^Wd0[@_Y#n5;5N	-Nh}id8"FӦgECgh[}k6lWLrcc-><*kN~#)4޶eaYu<)ZYl9'5Z=ZYIemwAixOo2 môm=s\1]˝~?)lidMSEVC)
ϵ2暿RYBsOd:5g	f1^?o% 'n\s	-)mK+ppoy
ܖ78ݼ
<pnjGir\p[nn	\sMw4\[
.|
7<ϼ
7FM7uLL55\[E
."
טormOdשcV=~LUF盥n%7Nme'k\p[nh	-J_gpߪPpmUhkn3n7u]}pߪTpmUhK7Bk,k`poU+ඪu=/2r5ʮ"ܫ4ܫpIUb.W=/&q7&
44L
W3nqo 4p}J5S4zv*=n6i*vĜۼDǽpopoǵ,-1pCg	Y7umMwk+|&R[N½Sý׽\p[Kp 3w-kO3kPnTU۪p?7w0n1I]le	w\p[h!{7yn4nvhV)Vi1üMސG=7u#}>\OSpm]6{̯kX'	
ZZݮ7ygM]meOۺT+9MٹdWYq;	S^^
g.ve	7u \Spmmpl󏩸`y7p4\[
.ݮͧQ92rn:k+{pp5=5]&B2@/h෮Spm]UM7ydW\&^"ܗ4\[7)n*׬w	+n7v;-x֭
.[g.s
[^V^poݡۺC̉n#Qҟ
}CYYO+_>AO6NSɸ෶(බ
i17'p_pN5\[\p[tys]]J2}w6po}[m=̟v
v#y.
.=ʧ:.	w~
.|f7\s$'	]zPo7׸pO7jWpmt7ܦQwu .\p[kHg*s,Wԃ'ݟIK?!؋HxMڛK'йY,x6?~Fϊcw)	,Y2ϡ߳]f>"M.?9~n$.=IM&&Mr1hy'qٮl3t'\&1xI48	,qpH/tz9<} Ww:+vKIgy*f>}2Oe1 OLqVKw&T{[w-;bŵ+	er:h99Q"k>w/>?K:ϐ&!;.5|<AτJo~9\`xy`'6e+.|AY}=%t9Sߋ6}?<=^>Lyyxx%ו?A {BumB/;^όL4]k6'Ό z!~ㅐB!=c(?W|#` ݽv%x/J0~@D(i0vx~)6^_3̾hZ<龢?eG眬ȳA6 2ޘAtK6y7=<©6ʣsnHv>>.}^nI p??::0AKt"iIkPw+]uLrx-s8YnuԻnK]Jadm#b&؇HƗ}Xy]{xB
ڝ8V_O<qgu?=UrtwSܗ }yܷ*C@P@+T*@@7 ޘ*gnuPiz @S~T|
nN#} r_*]J);F1UN]@4r2ܷ -r)Dv6TG1xC!}]|nrR~w-ƴ_cM!{@cg#@AwN5NK*ݝ@w'
7 qnK[=d"i o)X]:*yP-}ů:Wf O3ۄ|[=Z4oA.Xە0r?5S2̚|ٺkB:7WR!,!o,{1t2<1e
y
yf6cN^\V|9Va]+3Cļ50es 8&OeH3A_{hga*uJe7Œ?1yIc:*jN?)/G'KOzHK{ܱg/,+ʄs2Ӗ:.>N*d_4<]Gs):x0_N w?U^8h>,,ih>cWx}dFw%GĵDbo?AϠàoǠ_ˠO`<`,?xGH/"Db%+/!m9x	w->oܿi'D|kNk?t
[1̝lT%$ߞ-wȍkY5[Ck6{Ləfv/m!#\kmzVY#ӿCg/5	/^&ÒT+w|ur=N(3#Tu(UJ8ikP/ M7¾?J6͠YWCLuA
)1܄6oy٫DJ	lHo(6ѱfoy>=K-nEf{F<,#ozA"q'-%I|V@Az@(9R&˪
ѣ7QsVy`@ǑrJO.,3!ܶnB}.Awx^(GYq' v=:>lt]\~-̪6lR7=;Gd} `$BvCS|zD{7|_hhr*|
j}>Hg{\xMajes7˻e:N+>5l_ۯtyW9cZҕe>y63YuG]7a|38yj鮻^>M*CU\r-~[11~cqZ.yx^M;zz|-ZK~>Y bZ~N`q C2]md֥;u[}iTFifY.V$_dtnUMWm_G:]rm1&r
׈1BxNpqnrnĹ{o[Lb̌]!}?~xրg"|D*ûpli=IavL
0yNqcm ;gn>^S$ЖոTpi6+=`Ys>B1ԅN7{{m9e\
hs;{1kiD<
.T;1񻨱|vW-~ݷJW+Ρ={k</ӗo,"ю|FoXFiǱ2kU6'c\h5a+8NNLT^eMzgtt"-{V@ǽL7>C?χYu/lH{ldaZkȷF62u(62@>u΀6EKٓ,QmlcI)?/>yD}.o!6lXɤL}MiPd1DFmdڣ4V4:)y)jTf|(W۾6,@+y
_8l߼ ~;\]-uQE:[֟$b1Ov(^
}Q>MXMjtޠnzo&auMuظ:%:޷<@%O-@LtzMUWqo}v
 \'胴,?L̥w͈;{=M(izk	kbMnyrK@>uĭ< =Y[K&;Mlr\rǸ{4|=>*Żd=>
h:ENݛή槤
{@/O6WxFvxg'iHL5^8}9j@Nxjƫb
O3Hx'``^]9	l띺Ըl; >Cm^㌰[8e9go	O0F%
}8&DzpڙC,мb	h_}>|޶LOǊy2e<P>p/)Lb	+ɢy#>4u&1n+31DY=Hy26i.w	yoxlylkB2NTH?y`|8+7~.~)e>yW0ݡm_h eJ6*րs{szRe PvZC"Nī%Uy4Nɸ(7yQ4S[p%DR.b+ǰQVͩ, qfeo~_z3qb~-{"+NĵhV)mRd6"JmyM8_Obl9.rmU`3t8Sfc53Ngm؆:Ři?; =Cwv,2;ކ,߱sٷ*q	KWE/4~s1Q-'!-Fk YFlxQvzZrYCkPͥDHd-ԝB_c=ԅ3^^tUdPisv9Z{փT9ՖV	瘿c{^oz}(zy7z7idP{IsIє3	VA~1VHP}FUD'~FPy^S,KV}п:mf_
̼᫘x#yEw1NZNvH7֑,m3[-´[ŚkD
r<59ۚXi$ed0㚫.\#O%-|?bJG!iLhng"Ot.JYR>nl)-G=AYbO|Sp%&88ni_ Xo/vдKطi=4[t% =o5jٺBĜ}3gꭅEY:/hoÑ?ܓB{݆8
~q/A6x5_Գ$УΛz=}契Y?3Ho|up^/K/bѢhcGCSq y)K 1or z9O;Wg&/&+:}9|u87K?{ O	B;|OS_A:ln6zxd~DH^U9Oﳆz6,,^AX7*m\gG2g#}/BP`	[m=N<E8ێ$_5l`\ٴ?y9!yL1	ܞ"h}T:u9oo5)/`=A]v֍aDؕğ
wp~NBK ,|_8ZGV?o7[l%"섟~J,V@Wr|O0(żݗh+qO.[@mOR[ؿ?Vgp-_Ǳ`KADשx_	{GX*3/k*C#_%/@ʛzp}-2\JG.QꄮKF	Q>}f06C+C.P_]`LY_՚}<b]xIe6_!iDmg9_
uȽVgg߯ afi?4>~a~0~;H$|
mu}fhlm:ch鐧y.0}}1qnǉNR퐷ji#O}䞓:\/p\<i'|?D>l$dzai^i{/:zw8w#4g"{sبX3reް*h*ļ$jӎĲm,otshNKwu̇r9);q^q7.
WRXO+;eLFqlGuvyka:}booH[K0iIC̛'h7D'[s?.˝uE|sYr9~0a.@99kmk=W
u*nLj;`27VkC>
G
5lcyE.g*7B^qS;<h^U.MޣA/+tcrF
dϕu
_^ޯYR]"d`YxRּ&w&~?\ad9xx-̷[:s,2?̡޾r^]5vb+d7Qc߉oK˲9eXN}R>Ǎĸn
]Q_KiOYgwXm9`3=P1k9{	u0J`Ln %+ZhcwhO;&V5w-?|!	7+,sg8rxF ljKNpdo .{ޝko>Zi`
_gOyyUY.X3Ɩm1?Y;1Nl7;VA/?}|񍵸{񳍵DmhMzնjW_yUlfybk6/"ۼlsc{m֐:"[Kgif'ZcIŎ]Ўb=?FXlF#k8Rjҹ{z?>+{wPDﺦ7zÙ?]A^kAi@~M5LDM
=b.D>QR~6P~Jޠ1|o,e76m!%0'ߤUrmײduh'53+kBQT'}`PeGi\JNZYݹDA+lwiVx:ݎ3WmVl
\ұjӜRu6Cu{zurm4'f;ښEo/II}n
4}v·1+6Pq&Gs)_?/$^`9KM~1vs?_pnCCgQ[D;m#ֵT~9s77h޷GYo&LB2"$!D$UeIhq}`:Itm75ZAJH&c[qe%
ҋ@e[M@ZD3 |ḡh<Orss{?y$ WkԺ[Jl	G3W?IH:ar]v#s^JL`\}irh^%e/uo7ǡXĆ_%[x
kjm35w;~^^͝|VbvuoWk28<Sl`K{!5"`'bMXyܮ9vf9~ɠϠGˑ|,"x
ۜb86L 7$K+{P11>PjA!TF`_@0CyTqZqy'ǠόٞXq^a\1pp'.;]s9opK&>gvC9O܆ggφa;p1h#GycQ63>teFUÙ	˭[e}Bs
B?=޵z?kek'F/0O#NZyI2)Y*o6aqʭ yرRǕVk:kx_IiyS֝\uN)(%kSߝjv7T:/;|<ureoh'6?5/%Zr!
^S3q}H+!oX&)[6ieEV̋{wmfy:{߈N4:Ub$~3;MVLm[o4zPzh}z)+'++=ɊJnYK"xjlKx%<[Mx륬<^zU< )eEGfQ"_~oyeŝ+eN'e5ѲfaKYQSV
y2Ȋ?CVd
)+bX!yk9Wߥ~ǐȗ<X*5YI<
g%,ip<JpTjW
KN+dŽ^+,Z|>Cp\cIoLjm78o;D9`$C2ǰ3c)c9p/vGzɲO;$Pr=GMJ-Ptx)\?ePq3w*sZQyFJ3U}oKF"e^YfNC{ڋxF7ꛂi7uAܼrN{XW&cX8&q|Y}~\813Nހ7?uG |ZכҜ=-s3<WӒz:@﹎p >>㾽]r;ZH=~I7gR%3v>`sΏ7HD~CXP۴ԱͤsP^?Es4\'`x.8Ʌ]ۊ[]4
W:O_awj>sJfRƾB͌1yZZК)0e͔ߋާ~Ⱥd-6W6Xd4SRbM(XKĻNYG6_+|Em}̲/&Jޜ,iDlЗaDM^'
;oε
Rs
oW=k=bΈВ(r9ΓhS_xH1rvmT'|U$Ϲ=?,COWe2C[oen5dWB"4%׹	 Xp$I8IIpM8h}pXPo|Y4\7y𸴟{;8TEq=F
$v=+_;o˓̾]C~qFyAUÔz/9L
D<qs?Ƽ_[$t^r9Au
 1uu{; +_Ҝ53両
i[ ]<@N3~<>h\GtyR^.'Cʎiysm< } ?N%z}EzGMpL~rWzq/br_~S&\>UˑpU(tP[#Ue}n*M5gZ3Q:>wcI.buk{rqQ/S#vΚ$<50Kg.pHߧs8,k1ɑp;xoOϧo.Pr8,~h9܆}l~$/'Ml3|tę]ğ&lumu-rw6}rmrNng-_ڴyMv(e:UJnpE@
<#qH[ۤQnnEMKtM֋_Mvj[Lۢmٱ5|qڴUY}o,Vg'8h4hp]BچFt3AyD0T<M>ok48i~FntF𙏰NCG|p=
L?
iZ0ݩtcSӝ&L^s`Hm8#~GS%LGL~8\K~hh_܌h{ӔLqq[FEDvHݬ@6
˽OR˳`Hi~e/4r$hg	c{7D1loNv,6Kz̏G¤D-@ؤuZn"Kݏ-6frZ%}	z$+DPb11y}WC~Ŀ>xew5:0v#zŘ5|\#i^^}|߫ݯ1ߦi|rԘ4>
Bw[(n [0);V#cj?Ln(g}hJ7mDn5MŐ*[w+J kN/t;w[~MGx)^4~7jM2-8>$>%}pwPi^X>>8>8<+Ac<*7J_.g+dlTZC,{v-|!6#0<d2V5um¦:w/lAǀǗ\y<Yع*haq?/K_+1.bR̆kޝlz;\wz#kPJ&1݄C\#딺FՁ)8&Gbص"=<ڞpoOltÝElIυ yf4┽.~Tu 0Ry4NGwź9Rϣ|WTNUCR/ 옃
QM!N{6IEut^4}9g69=/W\C/J品I6gEk=Km-8JR::ԣOrb4te& 5A=7q,|k엊mSQmh:<ikKDWGMi %RiBY(uS (ߓꛊ)ti~Aj:rBA-:HXtit\EAJ(7I鈶c٫M鐲BQ:V)CJ x?N{J&F R!ub d$u8?ApNAi:ȲQ1P:ȊR`Etk:H͊6#0t[`Ud?Mw3__!ٟ*r0lIt_ɞ[H&9ϯ62M{P.	Tvs_hKy/~{MH
'abS]!ƑxV]X1.B0C?|MF( .E8N5FzcYGQ!svN{xaq0^9\$s}nPoE8ǩd9=:62A>̋`;nm))}ֹUuwXan25F]4v69VRf>lD_Io[g*U:vNE;v]Ɯ%v=zLY=h-a_rNsi_4.[PLGd|[[ye{
e-rrZ(g>йޥJo$nFds}uxp֌!zGp=L亠ҡd1o]z,6~O6T~DEP->gQE`Cm}~KOeHog~HQ8q8!mnshPw^zRz7_Vv);z(L<"Sj8"#iM8-sY,٬d_{"yL6نZ#tH 󆺷vq.zuZ+7cL4
'5vUĈ
4=t
su\Cׄi=ƸjQrR_`faØtҳRoU*be@V8ȗ`2A:JvHS\h~Fy5O3-222gJ ZJ;6}pp/k	V_R+$$?nc;ho3&ϬZu!Q?okē=@+U15|4R?S6bc!dm<[r>Gk
5\S%׊%*&R/Y5^Vs;֊>;e
/j2akĞZq\+&X+FxZ1-{"r8VaV,="Iz'׮vrbPZFѨ(hNڟWLL'},:/*kpᗟU>mc{nrxAK!LH.zsOʦUOr'Y }?9~Of8K5X^]fI'Y`+o$t8i*cJOR;/Z3z$zcQ>{*㓼G#>IkX|4dIIM$
<+QD+bGC$+5d&:,2DI;4d͒6#0tX`,'iTj =WK9G)%~Jq	lڲ,T1N!cјm{
)GFvvPŴ41]R'Hc2٢W
^1u1:cAS.T^USVuEMfbH^IrtʬgG	3}ErLُC=
92Oډ>@CkL_
?sg)o_[h=^P
49?ZlvC<oXg5/{Us=u+;M#/ܧUJ~?1,;eeZ_\[-rqJtM)T].כ\Y8
ot8o"rC2]D.ޠ\\r1U!u^QrE>#WHh+w9&y<-[:]lhvY֛VӝS_kM]H?!Ϩw/]R??%-ˍH1񚔃Lk6}ӥns9(r܁27ݠMw_ 7]4r5jrMn:Unt455sYvHۡvH|SWa!T^MLppE⇷<W&."[HS^[ƫ%o=;ݣD}EG㍝[9pcbOʭ#&[/t[A3E*gw\ӗG_E?Tpc槥+D?NoVikV\I23$;=_U3hAdKyCT=oH4<K/1"#Nk:y事.we"W$9ۥ.%i,%^9!㽧}To^nۓt<S7TIQqYɸqY?@k2Se)H\jVkf}1%P6x:FBnj-.Ƨ@IϷF(]NzuR׻_z(]&?uT]kCܱ\~o,4z7iW4]oE׫dg
23'^Xs2(U7MHr| 9	5,nN<|u]U4U)Ѣ+| R|(lHdd9r)x4No<dRҨ&|o٤@6Yln3&}@^@<b퇞RG]jM{BAMo~NWNC?tҸ5xZ5x:~|wktC?&M7+R7.ךּt/m7qKi10*h]{&uʥ^\!b]WfыNS/^aыW+4}cEԢK{6ҋ㔉Z-NZ;"㤭Nҋizh8WbMҋ;S_zq+^<|+]/9c4\RW4
XbN:KY>aK7,<z|W/K/.z5Z[xy0"Lޢb|9xyhrtVMgn3˵{ҝ>:
9FI:stJrz?Bom\ǌ5&*JT~?*1c ~GC.C5:RE=BfKJ7~C7ߧ'{f;4KH2cs<^㹸7ֈ<GXU?`n}1M?4ϟO&G{d
`:nϵAdܢdLNtgr=Wf́,@<KkmF59Mγ.g{\Ӯ/fG\;chʛq[\=__8Bdכd.H<Wm^695eQ:cꂨ#GsESЗ@c]r-]b6Y3pFw\4f-V폑ܤ8Ag)EQt-rpy݌>6}c۾׾14=|~6Nsa$:B?.#wJ+:#(MƚW+wM&y=:C?xFN%OL:Ǌ".+ϯ\)Lg[:WT7qDц¿jy^GQ#~4?S_ʼq?s40@EqD#}mE;qqD]e9-~G;kyZIZ#VwD{桟J1/9pDc}:kÛ k	d.9AŉPL>5ڥ]4?M"%t[`oɼw-,(gx:b{tRbWC31ckA+ =58GsLl
חo"Z|4I?]_%m'5^f7ݱ)DI_2=٩,CѲh:KtF0-:$Wu/Ƨ:^Rq;9v3}˳{rkEfx>m񼅐ϔ/>&$!a+T0+[8YIǳXS,/q>WTzL&b*U/E[-՛%ڝG|P%iIz˜zX1Ɩ,9LDclG0={#)jz:b Q|yOg
Ww0kx2K_wMWfw_Nq?DĹ5̳(O;w{[o{wu}(zCdb6z_97.daCI:G}<M"&eEX>8!)\К.؟Yjg8L=gOx_uxxfGwId^Au.eXb;@9[P'ޥ9Y{Sн]iu]NvTXO]{v/uߧͧV1~/vu!O}>ߕbG׾+I%kS_7%
>M;<QFY,y̐?ז岬,+GZ˛fU]od9
נ|{7.ހ:#x-xLtm{o8.#O9L61Z3G6jF}ua.2\l#[ ^7K̃Ǐ&lNxd'K[HmbBE[[$L/OS_Qg1}4,~/YS[:goA@3Cإ͔:~X]t'\%XTnd%=lKF͐{(GcS*$
OIU0HXbN﷖3g>
}<Ѝ](N>BiF5x>ш{\\J6ϔ
Wkw<&;As>>{	/⛿zL㛗^sKYqO
`omJ/Ld˄D
./mw}g̐6I3}^g~XuE~r%_~^{BB<gӷі[;gAn=[q<6I3LhkH Y9C#>@k wcS%K#[|ɱh
ƈuRcSjo֗d_}Y,Gnף2>yoy>eGG3KLȶŲ(^HxclZ8ҚC,hzƂ5mN|IWGzO8(f	~<!l
6#SKFWܿ:z+hdqFd7'=л.CW+[:F]\W~TXWa32ӹWU|omsv_gXs@ܧ=5>a
	1|f&%_IuLSU
1_!}0d3!~n_G< _o>F޿)tj}O($1'HQXaW1G2*48*xl4}ޑuyںS:ϱe̤	yo֩*O{C߫1U*Xb/D2kE#K,$֒`Pمb욓$h#'xCWÕ*
ǉr}؈a.#byl!47&7?bӗeFS2@'o'z88t2{C&!-
|Gӎ~BEwfJ3}vmKёᏋ:uncJddϊQI3m8>Gi>>N֎k|R
>9S)<13Z|]/}v^k~
{=q<u
fOZ$ީys<WV>796S2,41_%EYEҚ!;<=Y9Ei'ճ{x!f+ryqE<"Xq.p(7Ao;Mׄ`61oЍѮf-e/{`S8TO`:Rmm6|nNY]-pԞ(EGفʕ7f΁CWY<_.u:0]G01{g~a%
w1o>ժ"KkEuNWPb:ȶ/]Z	wfn&y@kIVĸD[R_|nQu5%Z\{pV]
鼚jN/,}j97}acߏ5n?]6/^Y[2En($|&|ƪ// АvRz=Y_/t@?}3&<Ϣ6[et9Vhu.=?kTi莧ZJVvƘ9n9O+Ї><>Sg;eGjq%;J(!|*}w0oۍŧ{xxu)]p,ᾜb J]!1p1/w
wmn["p_-xe	ڢvX5=bi)n//{4f'@7Ozƍw0nkCxBv[g
ڳn&/I'XmzGm{x=rHj}>2U9pաsVq0uQ:z@tUfTw(ZG0ۣ6xP{Ok02#e(_F!?i-p4_tH`0Ncw$֤i%sN
^TPh'_^
*/(z_YK|hV3|[6&"zXXt|^~6<xa|-3Q~(Y~5:WӺP<2=3ipxdܾ1ۻ^_cxb@'e=(V9M
<?mQj9aлm	;oOt0%-J	-nGp<9ycƌÚeW.!KMg/oi~Ţ{j	2-3-
=MrLL(Ƹ
z~^K_%峳jCvGʪԯ~e\"P[H6Ὓ=.csX%
V	
G@`Ki80C?uE7X>2090BFrw}[մe8{d:P2eu,׎C˜[CmFIS2otO&nn1D_uTN\)M,QgR,e:<L7C?_v
6JtD|rt|?IDdk"ōYT;?(?"gl8}7owb7cGv29^zmY'KUV$-F;kd;^;V}|!WG-Bsʎ8b(Bw!^g>-!Cɏ쁱zO>~$pm:0d8Z}ژ58)|ZqV;O4m6gwLjcoNK(R?t
A!bV?^
7'Hf!~siq#7!L*<gxzI磹\'vWHBޖ'Cωdx{Cd{CE(=!rԯ9Sc~$}uV8
}=mIl	{J1vwCC	K\D#_ {7O[-C9הa<J~K~k
S=	W?^58zn:1J߂vuzs.N1v-G]4'wōebTճ>Dx	<[
MY%5ko9BxZ*xUŠ]2vԁ?/EvAdy=[eL-IVO KT;hֈ_mya+%	,z[h"Wm8!+ZN߇FmlV2FY7
)z_%.<2
q	;Rє8Wz+kcӬBV+]>\V<21eE_{޲;R:xMԔ95T2ۻ
Y\%?V]'֐'{J/oT#,̙7lLjKc㑏h<|\6yت{
[ sp	lQ>GM:rT?7swZ{6'$ZT5M
kVB%krE?#,]^Wɷ|]h`We #TTg|mDp 0w.+rtu`r*Dmи䪺׈>]=+S?̶CztĜR:{\
C3C/`zX%o8B-JOq)XzAKoixpqݿ/LZdi~DK><l$Y9Ёa>h{KVjsew%+aCNt=dv<OЎ|zc<<`8'%x۳йoz2q+=>CSc6џr3<$UL96Mbx[2 {"@%ȋ|--e>VF'v-;-#nV'7؁CdCHG&'~vwL4{zX9	@e|Xi^f$XXcmZq\k8;[c]ċ1$SLjߡRmGIT_F:rR!?g+um-O/8I2BK)ݤoV9&H'Aq?|;ƀ||>3c^RbUA߄~'=[@:H\,4$NSQwn|݂h>S1F4&|:;Hr'auw4']2_Li`kh[cVz'= o˛ }=_JRx#,>	7.aði.!:{ac=A}mɇ67ڼmx4wd7lOxKe#Ng /x7RbzŞ7֎٠6j_?aEv=rŧ<2&l~>KNKZ*XD$ܯ&Q^.yyQr@͐߂NnyO6!\' lgφ[>5G=D[eވP==2[w=ɺu~d)wU(YMWpAaز?Iwh $ X{
Op}v,|'ilo|Z`1O[>Oos;,ˠ:H{.l{\MrC5;Hv?xV9WGr װ4`,]0#LXؚ{؅坷<H`%sӗAیvϏK}teCO?2,dic.;vggwɠ\>M~d;x)1{K9ro[;fU]]yL{bI'~;a#DKN
t!LI~{lnQ~/;Dv崱%G?
OfI|-C"O.*tۋgPs<S͵E3c{fBT3h]#u k1Zl^xub46K7=ׂrˣ,of'f뀦t
sKG&zN)(<Iwy
>5ߣTO+6dHo/ǄO<aǪo|߫o_N̙X~4ϴO3ē07o:~ā1I'DtpAs}q[7
>	x ۃnx)?}~Cg8NqGC-'-vY)ΙRB:VlxgGV8gI>ψFEI_AG2]Z'gg*YPOb<Cآ%"V~ dwevQ	E?]SP]wQ's=9j*d?̙Rggz)Xm( NSV,ڠ)Q݆6uEh\gr8\$t3r&QD۟\V-ٮQɯ.ٺ<|V<G2佱!ϊlxKav?Y fS;cy,w5Yf_db.?
T
8}V6;Pt'6L
Uo\
=d\io
ؚ^?n0ti[{9
uu(z1<ƬρNخk_1_,	p{n֓m~}Zمp<RA7hby:KyhsB?\^Glտ縦8vU#lc=_>^Eps@&=Y
b^o{`c?DD<h%kpxc7Dsy{Jë&ɹYe$f.U.[kY":*-Y+dxzrZֱA֡JGx2H<k3tdӠdW(qr:Uo	BU\^E/%oF]}V'>| l񹏂55N[l/cnv`~i/,ǡرLZo?H1AP,@kgCς_><l,5EKCvG@VQ!>rT_\YcOi<U\0a^xH=ce+ɬzvzG0ɔd	zyÿΉ냒'tHp	@gyC_Mz}C\PO ]&~ :'$8l֪/?=?K
@]qxF} 0d|,	@cL~wak7nc;bP?цT/m)4*!=,v ?GLb?tG$w}oCWkX"T6")bĜ6?_[d͎f=KgAC_~Oј8I9n|V[fL'S%/ڸq=spץӖ(?_tP,cz\E{t	һDk@,[%ûj>@p{Cei_:sG\P
H4H~Jfg/]"Kx'3g{\'^4,Ɵ|93Iol9MmӋ>D>#06a/]2qf{q!Ir8F}٘(AqKe=vqг\.Y)q
yyN=|<\]Wu?k(**xΌGyl!_D:^|:Ø({
`_&}ɾOԑw>fXX~}Նl妿H#C=w8MS.uTof@Ewa- z|.bN-}6ޒ}9ogAv{CXxC߇-C T`DHVzʐ
,o	ȩyg]kWu03XKQ7x'KQȀ]D
uj]riܧVt&=ސm;9x0ppiyz懾]wS~x]9464&4oo軔 @ v&G5ۆbI6_9#c&]g!	P9H/4:t տx冝O>^8Xn2(NZEt/4͒kրld/d2GSE-W}o)\1kh^'+ٕO-8Es0]֛xNkCG#:D+t'>|-׏wv-xpUQ״gF ٕiJd1A2!7peց޾ރgLԎB
o=*{}.zzp9mn|!Tx<ل(.~3m~:WWU-&?\q[-+28opxʹM_}(OvGot0gC#u76p+llY.;	donJûۮ>}v(gзU
@> }}sjѽU&]IST<T-,mJvv?}6
XT0/c|=utE\&95~c﫥tYF6}[{
f]:Wp؛%bףE'@Q腡bV둱"9Z5CR6ydωp5?8q{F
`gK⺙Uqz"v%vC~}Fᒷm|Lq}De7T=.p|LO^B \D}M,~Ixdz;/EbLUѾ)һҿb#1?*WĎI{3(	<
fͱFg/G1l;}euOf)ݨxk:šPOP-_'qac՛GwN9\2b~Ȯ0.Fÿ9}pkc{7wȽ5}mx44ڻ|Fu<j`p^ĸ`
\L~wv=U
8Wh-Yߠbq|0N_8$u/m/fGg0qm[tĀ2ZW 8
E(1}3M6l!jpE"y+Ӈgu8νqfl^NvlۙqVƻR|^SqoKa=ͽnj1]+OkE)	2>]ej2kMfun[\6'~tl0&akAgɗ(l!7`zlb-izҺꅔKw7߷=l7{ꫲ
Ow7C.lY>Gsr2.c$٬n\V{>xSJsW1{YƉ[Ўe\k44XOdUz1!?}1~o|lD}Qg҄.b>NgA~gF%5F_6/IlD?:#pޗ9kd?a8	y^vmٖWf8ɮw;H+c{>:=K.{Mi=uaXm<9AK3p.j0D"?3q_< }z}ǞC,''?~Ղ_7c7NW%&8?aJwd`,{%Vq
9jxב?Om
3{P{l[Kս/Ho`(~~}=;|m6zܞT\+?Sϓlz:L>/[1gW+w||h2#W+Z>^7wyWxP?_S/ϗ$Gt$|DGVR.Ws=
ds{y&O>49ld@Nۆh>.pbPn9%=/+)+]&_zc+aV? ?e9p:ȗog<!yZ<n)ŋy/:6=}Gw\gM+߲aC'CgL<쌃q3v8x;ag<쌃q3vNNxx|O xt\̏Nap{<ex5/LcR)K!<#s+;\z)xYB~u
ɞ!{ȞRLCċ'k7X8تt[0s$ѵ7W	c:CBe//w99}SuP1>Rnn)]Y7
-uf.*T~"R:Ukm%'k{1	?<&e#o1x^=@bop#XB"gʍueO`{^xˣCv؈罋ڗ[9<d.>69^edg7Z)nZVD\ГF%=;Y`T|
,ёDh#]VK{~&b 4~O/MRbVtX! >7ESx117
_m*|>K]|\%V珟cJ|G(Sg_???΍]>OYx]{A8GFk^je:K֔k.3w܁SM~22t,l}wvWp8p-r0^eGQpL&s8BpK8sKgo"_
┰\h<Rџ'geܞ8;C٪/<06p/9%W$8]U4kF2bGIx
c#%?ts妺&$~xO?O~k(G?)*~ce+ϐe>b'R_h,Rx_&+
Jԟ/$Һ/+\!>9/4)rSP>×RbW.kהƴⶂo XNg&3qxJtO?(X4XKX&St%XEVD4Ncu~IZ42_[J1CfƷ3ģ%x?%Mi4M	!\Ǣ><$#<{=,%%IzW['Bsg>'J4fNF=8[Kz
.nNy
ϏiϡnӾp=#?gy'gtdpt{eSn>Kp{C6'od`x
WP.w[(m"/Jbxzw'ɜG6
2EWz/rBg]ƥ 6:`4v	{kuH:#8/ڻW''0
,F~_b(!rޥTUrS~mëPo)ޕ<ޅl_
t\ W
`F詨{~ҺG
~nӀ3_D5x'`s2?'x|}!6$xCYԧoUuml#O5<FS{7୥#FU-X-DqNa<'7\"6|@[ ~85O=ug(M⠾whxr`kC[ay:w0(P>9Cn@|N~NI;즘l֜b^	+6\˴aNi_b6f^Vg~3-a/iW ̑F^;uuOdCR>dm}Y52>{`YKgRצ֙:»ۗv"s,x6	9?;]?3|nsEOS7UnkE+R(m=ݭmj>L{=
w3P5VتT!^òyoeX%Q_ómȺmFb=tq6z',|(Ů5[_l\,,gA:i۰5L1Ş'Bg˓?!n&P]')˻pORG(?\b̓/_r7^>K>|G޷,{v |_')<`jyhLs1G)'V|6NWc/=+ʔ,o`{:LzW:	Nȳ3<`N/5)NpdL*]_\ԟQc{j;ߕ.hcqanl:~V@C9(yciSc.Թ;L{('oЩt:)hz#BG%GtΘX!.vlSA˧IE&/A[Lϓ?о{%߬%Ġ/O1AVy~x3E5~2xQxy)x? dl7/c2~-5~@1V>7}?NR" E򂿋LgF}pf}F[2,*g>FU9`x t,h])w53E~O#})+iWV^I[\Vǹ?t!VF[I`Hgv\}CW\]D_wu'8FPeDD#ӊcDJ^[[7wm 5f֍uF(Kɭq3mٯѰ[;L~&MWnTQnpuݰz"[ՇF"y[i?nCy]N~;
9؜U,Xks	oz/p!_<ݐVui7ꣶ|yc%c'2H`ח}|Ζ1u>4IuF%~}!IKc}6^bOn\_hLs~s~ko~6:}~-ge~Ilߣ̯˜+~DDFטߢwz5RAmt~r0ι'9?s|hg;t4wQ>:&|Ѝce 	[5^"m/t͗HR")nzwdxW ~QUjZmêH_nxjC}>OgqbٻRvqMrCVKX-_7XVr8^mgB_`h֐ok;_}T&`<<d㰏=lk~|Z_'}-I_Yy7H11esyrIz+xfҡ/ƥdA;!KN`M썬n.O[0|${dd'D:Uz]~}o_?<sjoVl;>P_K}!;/\k<lgA+Yqz
	x76>9TW0Ծ:,	e_f$v۩
%Lpzxc?xw>xF鼝SwDrit~gbSԥu[KM%Iھ]{)HS	X!d^q|</ߴ|/}|N_/"sz	cw?	>7t< 3`GƳ! x4tgg:ģKO&İ-Ȧ~t"خ6K$MuJK6b#;L9آH>AО?
~p;q/EpCf6/HK6oip?`31!ӿphU7!v?F<3MK2fV?w%?.R}kh_[f1M1?*+@|w/#8 m˜/5N?l-{cdx9;o{~gb)ߝ.}+o}[F7:ooמe*=7N5E<nxu^V͍SvR|_<f
8
O<~<5WLK
~V};xӔxp:ѹArW}tZwk|';t3Ƌ }yL ~ʹ?H+k۬t9)_+cv7w{%/xiKc'YH[Э^<PX/kŪ;ق..ܡkr借_\۔oҙ
/ xyFN9d㬧KzκȚK\+sprtgëN'yC5C6;'ا:mFC{NܒMsK|6Y*.-?;w/-%c
s@9txIgXtbߙoϐ:q|{ԉ|ھ]{&#Fv|K`Ak\ۊY4)boQ[vJ|mc>yv[VfК9a眿8TDA:QbSN]kL,z3ä3'<} k1Y>NH<R0衳nCQDt^&7
GTR1rØxcg،N|Wh V18,o|?Mß\kPvnm$߆5[CǒbQy'ѹ).d8d[';sOq׃7NxKdf񣼙D|Zn쭥*5LR%ͻD}sQX5n~d[[kDu(C}K&CP)p'xG$/G(~Mxt3G5<x:_dG˴7l݇G:ޏq<1YqvO?F͉?aeN1VKZǅ8
KǡE}I?*ot9@ö%R}ގaC
el
pkNFy>/S ct6ˤ gA7{,\k%|9h6ȸ2#sڛWT@Wq_H/_ooK9y\׵|$A!;<%rſ7r*)}DWΌc?pE9M|9ot&cqwzFh}MמX+rFAS9*CgBXX7LD>)-#ܟ'W^ŸEb9MA'-_6!
E<X]mF}GO?	c??A9??/os`l;6fЛlzտ^YCY4
ڣ/`n|<}3S۝RZ}@㌽~Sn1ܿw88wu,#)CRRh|շ-Q(yﴷ.96P]c7g+6O͹>TakQ`fFf2P<P+0rNf-8M	oyQAK޻=8~ޖYMwP;6grMɈ}_O=~8ΧB'985LP¶ܓ,3d]j]SfgGpM4>[ۄq,Akն1٪Z3RIky*͌6_/َwMxLPzi'c
ۍp	b?Ody.ⷚYTwyOLg~۔8|tcxm^`kb?6gb\ױQWpݾZzAZ@4Kl$!9NHq$33IZYd,	'd}Ih !K&ړ;1ă@N$N"ƮƆ~{խV'Ow[˩S9u+JOv|x3'Ojm'=>؇SF%f*#yvp6~I1?eu9齼wTQv nUFG:3&s0^DߓǌI9]7JsNk.e<K8,o3}|^5lMcq)җ.ӞiJ0%O:1ϡpd_>38pm+pd>~?gEɜHoRsj$Dѳ8qN0<dsU~R]TW:G	g1\<L, `9)ie6w/V2vma1DNqx嗆?cɘgxoJdi-_ÓONVxv~|\k߇+J
pan\\1Gu'W)WJ"}<cRVt˼ X{wÝ̕bL$.Jr^_&u("Px3~yC}[p&\Z]evra/bS--:>52eGxoa)cn,m,33No*Ĵ_(d9M+}&0UMZnWX&,?Dܾ Xh_KV_W٨[5u ftc7K6<o'g+G",WgӌUʣg/+?m<̳TҊ?&ޟ}3]3-1q;!{4_+l/8&7VC|,f^sk*#%cKXU]NtWmvMVWg22ry)>Zcɹ/2_üs|-@듙ۅ*@zTuZ8#2yVSE!{y>ܒYd¹peߓe+pRϻ]Es޳rNBg
3s
dw)VŗS}25V1_fc>e>kr\#ud3JJg$/4}[Ǿ0裢q2~T]c}gE+vV~W΃{>Wc<bhv~(Q	H:.N	g~9"ܹL;@3;gX~Y-ǅbȼ3?0O}tblWFhw-ck
3
^ZwX:R
-X獠w}sޱgGqoffuiƜ1Y)˿k*,厑}w?٩19[FӢ6`79PJaRK?ΚaUxt9Ku7NWM#%wM^z/'6v]٧8V{gC-Y{ݯgy6cR/d݆O<Mǹxo41Ix(ؚSHSر.6vJjE[wNSY1SDq4t
e╟|Pߵd̫F_3;n/xF;Cg,.QiIS*s523wsa!^;y3s>ƕc]|<ЃqK^g;--uێФ;3DLYx	Ҳ
ʣY#wKt<%Q	>2Wb4moh~|?<7R'9ëQ˱[5жHDd%$7]xsuDL)nkkoR01m=qOA`YS*s!1)/_118ߏTN*c~yؿ/@QxN߷|oO$}բm!pҎ'`To~Yu e~s K*1MWVޜt!yے<_I;d9gSqF~gzcWW0ἨOniC|h!sR6тv[DۮqVe*L9@(sgl21ң_9[f+|9Ρ/_]ϒ1܁u\	GXEk'_QrR:rea0d#Q4$j#.qkwgO2׽+[_4yq|q%sq}oWt\ly*y9Z9H`D+/T<<~fr{̸@uf4p׸kwke	k!c}|=7;qv.HTy!?76Kme
ѥ^<ԡe<Եx1ԑϹZNO~-g+FR?zZ<>ú
P23<	1`otYFi#PoG xֹ|_k߳kAw~ğX=X9ϖݬ= gNaÒsg 9l#Cߐ?^D(Gp'Ş
8c
nR߿?g_9jcxX~9J8\~yy3ϭˎNDyF05-{[cᑾηk^^^
/'W(Umq[L	E~\5QcL4i>K-'~0ѿ烤}e2o_tUVsG]q{wKޤIݝ+zoᘮb\bY]䤈QQf9ZD+Kwf8:P<If{fκwL/t7\BeK1}+nU$BJFϲT&;%<{4)#}Eٻ!L`GVD_4NƟ3r^[l.3X)㢄m뎉.ޣؔ+PuДG
~9=9@w.,uorx/hrB6S5_ӧNS'd>{{
/#pLԵ8@ojnm 7Q۵lOsy*槜uF>Gm>pP<"n|^ٖRwԔOWZЎ/]g%m|)-]׭+'reF%o5E"(oUs~@}h?G	L{t*	h׷SmsNk;1ؼ</w)]
N27xUMn/`,|xǺDce1v+1rx=J]Ⰴ瀂G3+3Ծ~:v_\뒈_zڻ)d~c^
cOx^<ȝUZqxƍ<I♝v]o24#UT=ͤ|M:WNc_ߣkٞY1s֯<5F)#SO5E͋6Տ6,M̎h+ϛ<cG6#j41r*!są^;UK@k'Rc.\\Z=.;z@u=m麈Wi >o|?EH\BKCm	Z5y%v_rl[k*r8SƪG\>37E/IvboSSϱ1,U;P}a
>kuV#WQ{A7qޣL }tAy%||nɫpkƞpgԜ{寝)c U0ӪwJw~k|9wt܇j;0^(x7soXO^S멁$F[,S%̡7i78^>8qt!mPF`fWxJόLck8}2{ъϏA\;rE
FAYF̿3o=9Wޔw4uHHd$[5u$=)^]_-cHEzH㊢U
<U$bbgs/[<.l<zG"	^=\sVD8ϴ1Iw(eSTtêڤ廒Fg0.el·i&iOlg<_)'|6
pK_dy$>L8"N3JyDF-Ʈ*Y[֣I3F3`ciKUc.0Á#=g5Q:Su',6FςWmeLmWu9b{~ᐸ~,}XW;Sǟ^L7$9{=w% MA	oǬA?^B;B_N/Dl3G?
@_qSN_QȡiFpFzs(;ٌݡ#x2:5̹k
"HN@{=@^{yϾJ+ wkZqaQȸf>qؤ<:R'>SxSeoM6{mVF%s717a_J4NfO:8?vI7GYwkPsrUck3Yi
uN^ҜOɢ t3hC$oTeA~iw[ޒ12PpN甦1Ǧ:5F> 豋g(SuڌNM)C&=ʝ[|-ޙSwlZ>{|@-NXzH
=	;9֩3SRy>	?6[{ SQ!4os`{¿<Y}5}>Aޞj4ed[Uxj6m9xge>;kDll'VzV>ʱh6JX8Fh#sd8wP1\&BVfxB,c^cWw//XE쑟3O'K	S&杸Qj0rVêacQ<-ވnqD~9R#?79*GMN Gr.GRd`ϘܼWEAG /ٴIIӞlKY\j9n-	Lߵ;֯>>	@xi	L_~}ٞ|Hg?˻h;?GĂU[c=ʿvGS߇y.{NkHAǍWCq}ꎰ	G-_l,:7*oeZKQҀ148%=밉ki.kEz[n/y~g)Ioo#ϝ{W;c_څM__|}gSNTyxOF!ٮw؟<tog%EړsQ7`c1*|3_'E;K7]]m>ʟ@Zul_]VZw3>l}Ϫi/ehY!@wV.mj/Tb>8SLs.βSPaפӕ
cCmO&c^	C9vؙchA9e_;=vpT28YOʹvqNXqǣ'g, b^Ԕ=Bf8w|ϼa;1U \k{/,hrȋ1?
vvA#Y姪L\v+ധ{ؼvjhCޣ}	@vL#S YOD(+rGc{[~rՊ[l-mo͊1x=I}k}O9^$ЮsGK\~t!cǘדsO}=-;Howhb{mA̍Wn%<_Me%^0}v%3'}C<8y{	m}Sb-hA@v_-ltQl׍c[gimnQn+yYK6loL59ŮPGJ4AY9%E~LS:6p\9KnLv?҅=Xe&1%,\6Ye}EIcgJ_s|.o\1zk\{(zDc͡_0޽yȦUy ܙ=ƹԣei"fx[ˁkO>F묐DnZh3QεѪ؂5#vyK<	fVGޘvόiaf 8_s&'inmMX,~)lE!^yor/n/w`>:3̵h="FvY6ڂS޲:^mKV|Tt9z6cs5H:LEp&u( ]rݮ{=莺'yg9h8)~<Vf?V1'8[n_MkԽN>c5A;5P?cuIsje\ s(&LGyO2z[Hk]_;̼Kee'@ u뇥^5g>|ԲG7wN,I/x9l[
q(siKu].d]eyQ.mkCa6zr9x2#UL'ϫ6*qNWk ?7ڞ#]Ky%~Cb9$Ws_X7Cgy=ۧWqlc|ZqwkI ,:D$8Rʥ<񟸷X2!f]Q3d9o3_ oI>osV͗W2j4ϭ͗4kq(\gޚ;&L/"6No
.&Z}c*hͧ}g;,	Cc|۴nн?dޚz5%Ǳ?Џٔ%82+A4¦eA3@3fLhqG `$<n|kecN6yp΁W;MX{X_Nlī uՐAˈ3U? ٣ˊS`>x/ܤF݁yE6֓>^%p	g $oOux)N۪e/LdFHAM#]]pYNpk\Fv\l ~ G~HS7ItutIo|k
92Q4{
2s	67D
_w)Qq<!ȸ~&wx	/ IE#|s28DW>8>4goUP^\/{])+nnZٓ5  x1wFB];^Pyp]>\aqu.4AC_t!+0gއ^,??T̭-vȒOV;zi҇vmڮ) 
.9<~:3{XK5%s@LQ:X;'HEaf:\6Y
Er,oa<|e7e&}%Dڻr<]Ҿ8JYHlg"TIr>g٤dI%bd݁]ޢ{T$WY4V-COcݔV&]$sI'1|G8|?`˸(S!Vo>wMU,6c<bs2v aSgqtzzcQ
{a.-z"<hfDWq: n`Q~>o3Fvv%xB5jX"¼u6Gqd3m#_/ldO.<Ԉ?Px}|hfGpӿ#̗nN$ynwy4xʅA7K?͎~[8n3_eEy-mOkYM]~{jb?C@<eOhj>S{Iٿ)ǌ3iGTϧ]:&[nWߟZUlwwo4[?[s+7ߥF}	?jrVsnxozҼ7ųW^EFu	M؞$mŞX-m݁IWKx	4;(܋NǍgW@[D}Zeʥ}(?x?bs:EM;szc{vLdL&e}1c)]MWgܱ|:J
~*4;vK*NpfQu㹄uK@}K{cEbj,Ir9[\(t*}~Aw_>dZ\Pka>>E<ǮO/N?xu9-n6ǭS9)%5&\8.Q<:L>cجHddV3fj16rx_ܺ=aqvM9c(6]9/H;͢v\3.$mh_MsI?/0[coX+Puso&WZV032p^5Ut`gS~"?ǿ}],9XfM~CnësRɒ.^
-|ODŞgi367KdH>Eaf?\}coI3.dN&]TxDϼ/f
3
i/7x7]m>ʓ8Ōs]Mt
M}Ϩ,9
Y-L k)dQO\!51WM??!d{jγ8ә(egY)_"iC/@i3ڲ7JM^2uәu_9YsQ9h:~S5M{1M`/3u<BW6{SЈQ1sjy)YEKÞE]m4˿21d)^v͛_*]tGk֗ Q<Y`/#\!<%쨳x4FHտg+Fٸ<&ÊCv6V|q.GFiq RmʷZ³XU7V]3'^Wr
@d'7=f;*7 r:fݭQ&)uΚsEi$&h\XZ#o;nlu3;$?m΅o/C}^͑]Iv^9SSgPRF>Ƿhgtµb4\@-t#\0Cbx>i
pc>.u ߿]IJ[@V
jFYһEIcmwSjf@FYr/*[8!/kPoƥlDTY!(Y3__榈mYKҐ8Rճ<[qFZ?A?2ay/i;mca6QOu9 [A+W2~!?3Oo-Ur-J<y]E*p|Dsس1k3.sM7x5)6aelq`=`M5?͟MG_3${Li:34:/GpkYrcչ*ڀ]1H(9C_D#a/eh{`>{@~RVyHá"{.+l{n-L,zSMvl;gTۺ|%ߟ|2Wo޳ٵS@: ͘T#wӻ휿pgv_~[<IgΐRwĬVgznxm7vmqw^;s9!м%k{:?vs֦2ױl?oHZX5
F"?y_s<فyFuزe셐^vP72[Ȼ)iNM
L6xQ陽'1WԵDkwԹP
%H{3/SGvzkݢcDo&!z=]
|"YuIE2pF?xBfk,阐wױ_g̛B'on"fN%Q#}#=K~HOxjo)9vB~dbh{p(\Y{c}Gd|SwY{#6?[!Q)2e89)>7)z^k	x6j`><;Nϣk:HrgIƔI,n+A9Uou2gt(G3=(-a|ĄL8;9FgQOdڤNдIR<M;ݍH:7yd#NK.5Ww1R,ӡ9{b~<K;e})oMi]M%O2jEPmpy;y\l/pڿ3٤yҩ`LނEIm3:}?Q{vC1g/E %m_}F9(w)#|yXU]ט_!)q2773h||a|/oBeODCyx^?˛P]9cb|6Su'@dZ|;e{A('De^|y?R38Yw>?;?)/Nsv< 㨢m/sVuoY2f1*?cglv;#׃^-JJ??g>/?+އ G =:!'LuOi镮Y;y]ϳ0__C}71=缟m'9ۊvB;OjI9:|s:5KJM

c&|HHe3 
sXesCwNLԒ-1s*ּϬJWlX/9Q^()DmWZn6I~k9R'GŞЯl8u<yA`S"mOط\RFeqˮ6㺁,5߬Xg8DA'n~
O7'K
Ze|k,ԗ%OG꾐w})W=s_#y#Hڃt;:<mZL8E]ޏ
?cܣ%FQ2Y[(M6Jcd9#VuwQ)<=k{&uOq2Ķ/=(
'/?Jm3TY\18sW]&cX[vCkeWen[V⠰h&aF>T¼H3ŗ.S%2'?}S['(*k2x
&m}6Y./*3ZMOgP;Mh>b7cUο;G/o#dkĲ'g!ݦd.~қEcQ:S+]ֻʆY߶6>
2sz2_|'`AkpX\ѧ"H^{m)0;L-/5mZWBN]ާ_/m^|KِIrPF</o0:11x{0
cQg߼Di%'yo25'+9	)R|ydugQ"\{ŤW3<}ۜqE݆g>^~_\7~B?e,S4aYDSsFIIM~O(,GP{>+o-!dWȕx잍F_cG-2jfl,3hg^W0iuv4~B, ,BɧA\|&l
Ɠs.Xúɢ:7xL]<4F+|WhF	p{Q9˵-
CѶ钶EtYۺ^]+S
Y$؃=*m-J2&7iAF}|/i?
{;x|7־(y[쭭q1<O"Iҏ֎/s,JLX0^gI1w@+[kv|˗ixcyVŻze h)i}zߺ9b]jyؑ{!Ȁ/$_x+ue9'_@YeV~ȯ0v0iUhY,:lǛ
'<KT)\ci_$礆q1;c4ӯ? W2r3VӓZ6!Wf/]p_Ҽ?쐿k^V]Q{P$oa	_SH<}N0
>A]<\ W9j)&OE<MlCւu)җc^)~oAO#85ڸqx]|j`y.C!%}n^cK.ӌ|1jW'ۼ#{Bʮ{0/);m&lo+ڹ[vWĉ}G:BdR3[QǷf|"m-{ ֨=2m*/אw{ޡn{_θy6w/hs.'Q9>瞏/n1;ў>jMȖxG-sV$K1
C\_=KmZ>>k-H;*׌Q,hCMW"Q;DsVѽ{-Wa3h=fQ׊5Y
0Foy\L-jQ4C(ΨV\YS1efEy"G|xmp`d<m<69j1L u$<;x;GH6H+Qо.0;eic=:
G^^9
o){U9SÚkv96v;3
mzj}Z׆97jpK)b)שv̺䎉3v~;u%2_ߍRufƯoe#ࢹXiD&J(VM$:X;[&,7(Ob<SRB)*Qޑp͓ĽO1gC<g:y>{Jkau+
,w,a
ܑA"+{Mƾ>V<o^coHW!yıԔ?&s5Iʮ^08/\Jd?ui_j8kw(qDI~a]j~m':iHrg9[D[q-~?G=vJO9P%J	tpbc&d+]܅p0 VWNE)_0ϳ_K|;%WSd;zIz{!Y Lvĸ9"X7^(

/Y˖ޚv>j-M94:yV|7O nS"L3ӌ뙻8gD&lG\#aN:gT,E	y;I 4.աZ'/CVT>O z97|qC'ZZeL𑺫%mA=:rSGU{$wʱL2]|(	S9[!¢	Qw$x7?9cFc.Kj~-u8qLՌVfˇB=Ut ohnIّ;D[Wm0ۛ1	|'1?mҰSZy(i3Jܖ^Q/_h+y|YVR~^dwz(C˪k2O;
{d/?N@p32Sv@,2fFl#hqޱg2'dl;qoQJ
KWF7k\(mW앀;Xe'O$c.w%_<ؓzض秔)@{v~}ƘbY{'8G	v}%A
uGbqk+yڳŐg5M>f-U{H彋X\w9}pS7s52\>SƇλ.
NI!Gk9pc oGs
aDhUdy^wdͽ_iY_xZ{VݣV"%:tl7JMNר5s,W1&\($i =`<Nvfiٕ7Fb 01Vp@hYu5y?Rp1
UF[_8c=bΊ0_G蘹23R\/nl#Ys+72o9gs 9fʿc*ꆮv~PL=bWH<kz"X*`0_i2g)}?X,n>c\:p^=O?pir>8(2n[f5f]9ߘLȳuZ[N  <}	5לOҫӛG{@2wSܢP|5^\LcoLb;.M9ny
v(~LE䗟6X!s͗g@<)}sx"3w)N2}Y?Z)Ǹ1oc7?u ?|^S#QeS'l`³49eLiXé6biswT]|EOv`ɢS}1="s{\96f8DG;ށX_fɻ#eTUv|&v?#Kƀ?\,7.{(,+j<}yi"ߖ;4k.78Ϛ!s8.~qIbvS
&8{\ޢDo[?p?6Xo|3㍀ס-,ɹ
T|MfE0Ro#ٯ,9ٵW(Ӊ0I7MA&6ɳb]y"siƍc"8v'~; 
EJ5=:vӎ-Sͥ{@o|>Zx
Z#^o6*eh;aӰDz
$ǞxSRD%Ʀcklvyv60)~qPglEܱ[IU+ofs)~V|ʮ)_QuMqAokS 2Jfh=wތǁ|1p_Σx/{W
uJOw&mW?O;;
)sfTQ~"0sѳǞ]:>[*}9cf/yt0[ [w?:qnT*=}Bд-.I?sR7I_b:ӎLc<჌;hB-mw<f8m: gZ9k2=UUͦ)5(JW
٭2-^n>9Y"3=Ͽh$N]BοǴC6?u,Q7}s;s[; d1ߗxCe[,}0lŋp~$|*\]0i+.\[>Ҥ]/^Y%^y?;WfIҺˑB.m[]1#\.<)g0m@4Ʃ5nH.\yAvd;Sk"}Tz22"'#E\gcٝ_sisr5FS^b|7oNڴ|,Qh=n$ck/NƳ}Cѷxީ76.^H/_M2鱶2Μ3=[ۭ'ݵK.cW1oM!p,08SEW̞Xz=*{bUҫ쉥{b߰'^mO>>wݪieĻKXm>4ƿ(]=cc_<>6Ne>1Fwt+Lty'}D"t8e^hǙ7scTޙxte>PϵLȜ"5ڢb,K)[߇D#2OQ!HIC,/ednbQm0!CIWUm[e&I=unhͻ@
n[8JS˅gܹ\.\R,I~	m]
R#Q_zMݝoL1)U)R/'$rLG(.KK	˄VrBf_ӓ-f)`Qa+D	bB&]39q-)"HiUʽ;^)*/Dјց`zV{_͒7.H\'1~ m|bx891`I"ޞlcɅO{w0FjU6w}߷f;(֔zs]s\I٤7mLmB֬ۚ]K;O0vFc+/M'6KuH8PѦeΟunZj_Ȯ~7MسTJ9V<[ˬF˹=3_ʽI{z)7b~hjk.y97KW1'mxTq1<&vxYV$ll3
m*/I#r 	ϙ/}Jt2ap0iizuㅶS
{wלCk~ޣ[s}qChǌ@U'x1kuΘ'K4Wo>dE1]oÜ8ŸoD8G] q}r-nNk}
"Zjl~^7TM@_N3ژηOo^^V6Չv>#o^"V)C^Ǆ۳.߫;,{qfg~X%Si{=פaϮz.OpTq˴YI;>.yzxhOJ/ʻj*,w	e.2Mf￤0̥W}:=c]Zz᡹Sha{f8h 88o~ʽD8B݉J4NOGC7^TcVE6:ҹL|Dd{&Qx&II2gfv،i?o>0{#(dᙾK0о/k"<8gl[aIrZs|Q]\Mv]
?a[7=t̳y%4r|ۜv*EYyөϵnM
op9iVkƇJ
0mm͇'/m'mc\-2f-8;6|{oUsп
\N@3˵wZ&nOnphi";{?Ai~vȘ宺MaDwOO`<-o]KrҒ9͛߹K@oPf79CFq`26$Ƕ}ʿ#I|s=+/N=c{yK4o@Ykޞe<W_wsFgJGE׷{a}4`?g:0wPsx<M=[@>=fޖCx7ճ}}ؖ5Ooyp2{,y٦>Nڗ!2g2G)<⁂}3BCzp7dv򏦞'PnKed;fHK|"~_mN/ƿmN:0'M%ʗ0s:kece{ŔY;ؑ3}Yɵ2;607;Pڃ簷ZsihlX_-ŹR={~nVÑz;-rz/BPwb_<{!.k{mQu'pv
ZN]	GR&Q}Qwxok̵6yJ%cLk^_
Dw}1uRDAӣEr )ю'P{rPpR~\ꟸ2I]QA '>5k0I!{[p0ݢNg1!7s*9.6e{.e3Zrp@9MKՃg=9i_Sn$O>U6ݏ:By}!1En|_fH亞GͭO<5Mq߻ ЯˑꯀӼkkH_suȲsJ~y%ʶ޽)dg%/~\K[1&Cƹscp?s!~,OF
FԱv2og\O8+z7 3g.uz'R@yHsGοi9ގ릷"U
Ʒ4撞UYбc
 S#Fo-:aIba;MH< 'wtn|t=dLqB3Xky?~_bE(E,)vd=!Fl%y6isi<=8U{;ǳǿ/oǳlǹ^&=~Cxs'bqa|,N+F|Gbp	ko_+)]ʡ#c`}7wE.~7jDr7_ķNpӄ1q?bJ>h3OJ)tV%\*/&>/y`XL1(L #סB䞰wt#\!>Ed<'SfN!t?4lkuڜ.ϡ=0,(QKs[6M1{yB~l(Uwǿw<Px%^odu>&bإ4jHܕ8bzrxHU\u@_+ܭxN].ʧŷby {yܚ[A)ޠ)Nٜ\zn=
~mzN>߽⋉+֯1x)xu4f,GpKo|V,RK&̑ϨSg_JON΂ؖoWq
//h<FYhb<5SFS|:a-z >a{;xS?q	\b,s=\3՝?,OW#/Sd8VLvF̯,~}(4/03sg8XWQw~Ss2!jmba2[7U. {]tsH]b<;hl})?erGYhc~f)OޮhdQ3gI8MX~9E/r s@d{&Ϛ¿ظV~?xf[N[aqtd~Ɩs+
}s解7I?GwAQs}v5DHYQ9~b.8Oe$><#F'yYF0K*D,eU_S9bT,Fq۲BKx34bEbs"YP焳0J/\d]=q|IKSyi_ϼ.1mjn왦OWg2Ck褮 d喩1s0z[I;HK;NY~iv)HHWQyxiF7j+DL[&,IU.Ϋ睰U/"<?D3_:KUEH|R=rGܚkFgVPOX5`oa1m<_9g9];Mڈ$ϯ1g1Vt.|w^~Z(#>^cE_"/C͠ף1]jn4_ =^LD#<QP&2~gx}r,7㪙gӣZl͊>}>}gExV}q܆gEO'ϾgexV}Vgwٝg_%x$lūsw$/=flo_6e=Ϝx>[g7Mge|v+}})hdLΎWo|5{xoũ%^Xqjkw3bڃI#年_kKyfOw;fS)#uce#5Tayw1-s{oT=w5UI~4<,
iK:*YE!V=a]^՜]7y )O5iqVvLoεb2ԧxO<U,`#*H1?<p!ۇf4uɧ~
|;H g 6Me/1x}7Q1݁lgפϜq|Nd;ίu~`Ep*TfPCK~!14V
2N|_ 00UY*nzT1O21̿nч\mq~^uS/A8TG"?!=r% >4'O8ϧf8??|ΗpgI?;48UTr!M:
ʗ%/xqZgs2gNSO65ۏԞ*n3Ozd)zv/ly\ޘs
`;/}B_Cx\ϔ}ܽwrI9Ӟ1LӖr]}>>cL2gyY=DAeڼsM%k	<^[v/i5oWhwm֘1=dwL{26v~9Co#Bڛ#bϑw_0Yɕ«<qޡΐ-|q/,s?װ l0ÐN)CՆq^ f>cu1u6a&Ϲ;KOtqv=y8gCyRSu xNٞ2,M(]}%?:2{tB2?3
}#тa>Kw.rsQ:,Mn7S4x)Vp6VyEɅW=͸gdߡ.#C;MthuWC&/ZƁDisqya_Cd>Tٓ[9ž;sSY6uVl0!ayi:^vͳ^Uh?3&\:Ծb0CeH ~2!P\ou5D}Oc,	2>Wgs:4c*@Ưyn7`IE3uws.޷.IߗYuYI"=kr&mfp<n'򥍐%+(Mo=)sOV-6

[cEW	W+/4
9j?_R`iuP0)"[Ds26VǯS7_iM|l(oˮ7z>
-uփf{RE!a[}y0RW?UϽ:#KUS
speyUѰ}|oO9| Zؿ:%bx6^	9F
hAlyLg(O/d=!Qu.0?<ϏHg;?N
xOOד+Nvdx?ƿy
"/L7˸'=GU=R?Ka=K|ҷQ(+/3=2h<q,W#pp9G_Ye6lϔ=>bs7HPz&}*Na+<:Z"Kw<9ƺʓU|܊&ﻚZrk|ݨ+y
gѲ+cэ3Ld/&OcY_GbL3AIB
-SOw1g+Plqz,"(~Q׍nAڴ0fOs=c̞Pq{gmǛ}o: vA76'If]ࢪֿ5Ȁ7`4/*ލp /7$ #83(xC7C-Ӳ"3tnTV)fԴĤVYk=kޛ{ųk=Yz:=IAt`/Gﭛ3Xt]?+H?LW_eφD3guUΆR'.A@l覶`@0mcDzUēG{~1lyVB蒡Mԇu!WdOzo@q
Xۊ^bmk%Og~o@+Pr׷Ļ-&aL/>M+G67!Uۛ>CYXQRgFu}^kV{;1{i{ʥy
_Mple^ꛌW_߮?!O$ij&"]0%/VNH%܇}tϹ~ﾓ|]Ǒp-B?l,iaeުj2N׸'l@[lO}=r;.`Ng}PJʤ_g|rЉ
g;2;m~<Z }̟v%]~h_ ½@|_?
rM2l ]a]]1D78QN^-Iϥ Jӫ1CP=SPz-Y;,X:N^m%02pU@8mahיsv)a]M
6?'Oi:pmaO|qu?:^Y}4(,vv*?#jzd|-6dMk{;Ї4Ztlfj9psltՎsVQ^=)ߔ

.;l2.?4d͛62ptz>'fׯsúBcSK{W> 췈ОiRi^3oKy$=E;o^]
J!uo]4as﵉c^fٲh^љg])!c|N$WhK0\}66
xhM"i;tt4at-^sY@zQz~czv& k{s:z^gH _F+ajg.෾;Gy.oY:ptM@DWR5TVqN
tjBts0iHt?X0>4iHSq?v]|.:Ke!Gvoh{܁w$}I6W0=]O1:2{)l/:[lٖxs(c')68G`V
oK6=G9@#4~;V?t4^nR/6>gGг#\m$Ui.Ttt:vՍ6dœ"7r'm}_]uxu:cׯ_CEe︥}<i?'WB.-
*r.3ZG߄եHھh{\Hװa8#~{֝j_2Ѳ-}>iv>{թOp>2̹j	_siM7iO%'v2Ҿ:hS|O@>=S.)F;~w[>h>g?>Z#[Yv+=F\v\u ]-ӄO!{H!ОVwԐ;٢10o wH)Lxq 9rԧC*줽ym
{;iSDڝ_GvҞw3*MXt:\n3ٷ
ɝ)tû)]dnZ;BXMyISV¸~ d.bT1S7Kej'	t3FY	}>hyxR-cEbelMS7x= v jБƃqvؙN/X1:ջo/mJh~ll9wqѭ{05]S3G
\K:^]џuoם7UDGP~!#iՄa;չgmgKR:ΣZM}k&TkvMoH`J~m	 Aѭ3@l^OB+$B޷Wk;FN_DDhH`]`$WJ%,0}9Inp-:w&	3J[-vImvOj5FKOes	괍skkv !cw#]g8;N km̟qԟXu:66 o&cO_`O/~vJu~VOsPGRےczh=ܛ3=viEu6'{}?G-Ο\}~fkjxۉ7M5thܘfS8̩uL}G#KyT}/"{-FyT&ٔV˾H1RQ܏gxCW!Ak6LB_fB
k'dlF߳ g*~~n9LlOGd63	->?	#[AEZ?~ce{#`l4[Ӳ K8VI:0 i\^[9_h#syrF%ryhFQ`,Eq>$E_e~QaAA/}6=
jBs}!aI#p=0Q06`L~hp}!
C%`Sly|o'w"op線0>e5M :4ӗIsux *ţxf&'Wg tNNԏ妈oF1Pe`gj׀++8r_t`~n¥o9¤vo-}%(q38(=~arV,>mzFkV>v6=h+ cM6N:OI1̢kc|
OEKAs>aEm߈W{6~[5 ]Ƈ`sLHG?>SXaXn,LA&ԓM	жL4Ge`e@Kk37l$4Ѧ-z]*!>8Fm(?#v:k
-3]㞋́Fk:b,|6a=d<_3}VMa,`aCuˌ$:aaz-Owloq0#z(xW~晝ãˌ`ʮ?ZƸ@KIu=黶h]׻]w{}!}b;ټK-e󬆭]J:?9\YKreM;#Owz߯zpONMŭv}f9p-FuI0G5&tC:\ujz+ ]7jWnʸ#QC|Q>a`>oqv|jK2k;Z;a0c"֓rdi!_u #}'$yh;7Ϥ24!7|Sݦ@j׵GԆdV>
8eDMumN5;^:Ѳ	׹]y4(Lg \aOX9_1U?__n{0an0qg MJE06=>NYkItm!^e[mr{ ҥeZ
i}lxd+j8ϔuuiww:uiotW:^,\_Z~/o&ץ3X58:}2N<];U	Ł?ScZai-UgeV<|O3c	_+_^禧:<	_Lq ABB&jsg(W+sг;]d2йҏp\%N˙dS8Q~HHA09ԟ9S'.%!ν%^?={Qz(?,
angMm/T\|E-zz+L]vEq?aQ}YLHwsݍWeTM|ߕ{8a ֭he:JL<Eg2PްzCzc)!c.
_HAv3rz5
}V6̍}Κ]Yy\dYh~NOO?^Ct]蜵i
^*k
a{OcpZ<NY[n/7-y<̽	snq<\+ZWDP*ꑈO'dMQ4ͨ5CPL8T7= fJ!D3t]]l9L8{w3:2wkӜ@{HO!H}i( ]Ԇt%һއt+瑾 /4HS ]tҝHw# iZt,dH]H ݌t/H~G:i,$H]HF ݍ j#C:bv#݀)V =,oiHӿyxQQ>̿yy!Kׯ0*xq~MQHԿ	WM*umۄ&;4!ߧ	~e~/kҒ"~2baTUxb"*\XLbQ*VWJ.Q?8QY v'*8CW*(U6p|sT*U*lV稰ME-Tx
ҿ[^
OQY^[UT
*\»Tx
W
TC*\*\qሃ#8qŪ2Ux*M8)GG8q⁈KU+wJR8bW뒔ul3XƙJ}g*_xB_Ux=
JJ{9C\؀qY؀,en/U9g)W,}*hB}SO['u"NK0-fa>fK
4ټnM둖er{x%p	k -bʰJrWX<i#;o7٬vaJ3[Vfⱐ[::	[/Eq>2zh4?R
9Ea	ԁPB4!@
0*"n(axi׫-<cʰY3TqI:-,Mmл=&5SorYX:5=˷7Xi
 #l2<L]3mwN납(_6H`)ߔguyfi3eZ,v>[PEרJfUJt82M'ѻ,|Sx2gN\Zč_ktGݪum"k$ΩO6Gznʶ[2rr
y
7vSVccť6OnX
~2.y=n6y؂|qYLfm/g~
H30Y'hW,L)SPKg3ݲP <2bDB2̜Bh}#̌u}"Kn9z(	Q2U';t}K%ε+zKA:^mOp⣡h?"iл
!Z`
ڇ-t [׆џΟ:GKX\?3;'6؞o{~|2
XAP*ITTxb\*6RiHВZ|vOOбc)jqL .bHbf6&$aˑiq'~B~l}ZRG9^9.FZoVoEViJ9(W8NAs4Me:%4ޔCr|KrTu#"u6jOx@h!
@amea0.QnL0: A8㤠lQLۆyᜄυ\kz;.s7Ƈ?zto^1$/cXiNNӑ#
ZHKV#/pH&/FuHua|ÑܦbVs(YvN
x!yFFZ>6Y̵>}\e
BV2]cW 4jN4AN7
ۍl<*|:~!dZ~h|7Vo)>qA.Ӿ&DF*4=;| <f]шNˣq3A-	XD؅jg6uD^94&VSN: ƿ'OcaM]$Ͽ,G+ݩL4%ї7m??R	Y܆
-i)Ǹ,S6KI1 M\ps01fٚtȒS9ĸI4bd͚Y8"1s,<DϰxrfyyU-UUjUx*)ÃҔ	IS՞Ebd0!.O`4Ip̰eH_RӹHIHuH!TԀ4
$H#MGjFԆԉԃ *EHFZt#;>[HCZi-zaL zQxHS#ADZFHˑV"FZ'2^HCGԈ4i2THs ݈T%i*H,H' Gi)v2fs-dL).+m0pF _NK@/|ipMd&#.d?-Fbl$r2ɒI0NUHfЕB" xm,dqAdz,y	Arocf@3f3l3gOO/
1(>~\^8:tY{YC<'TpXKi/%Q({1|<H]*_׏K9| d1b؈B9"|ũ\dhW!˩BgRt\2?t<<}-2\|6 ^|z\LOUs	1Wd\deof^)?O7RɃtd-~63rx%ƁFټ>+vAk/fȟٟw|Z'+λgͽk׭
lC~ђǶ<mK|{e|^|W^o?z{;|XyG>>IՑǎӟ9y櫯w._~yum׾CǠNt=G^6|Qǌ9q'=h4[sKsmyvs_pŷ-IKo:/Voo?&6n)SMO43yV9sO]ۿ+/W8X2xbm<8XlU kNҹ?]bPX5nDq	bq'!B\X;ٍX3@q%bq
8q
q7ՈC"
uŹz✋8'8qbqIX؀/Ź(8gX3JF,U"tbqȉXS*@<q⡈CX%oF\8
q[#F1T 6"D
qS'!F<q-⩈s	!&8PXDX!6 "B,FFEX
@2b鈵}W|qA?R:D8k!B^:EA;1`!qgzx8⮈	!CCqOa/Ľ@G8Tq^q_a}nAqDG<Hq?ăEG<qaw#hħA\x,z7#!oAl@<qG#NE<qb#1!.A<I7ɢOx(o	O](oĉ'F<S7dQވSDy#'|QވFlq?b?;Dkp Rq0<@X8qvGqɈ!NGqň .A<q9hq"EU=b_ĺ;C 6 Dx="؉8qb
6"E\*A\.A\!A\%A\-A\'»0}!EGx8 FāC'b'E8`,	w+|ħ|uBPލ!DGp#9NyD|">0KD|e">">JOZ׊?0u ?ā
5%~ĩ4_#.?PKD82>/Wp#_#c NHbU=#6h[%ux\5L3qi\#|YĊA~jN ԍ.Et(׎؉؉.wL
8]t9\ _>R+1#E;X0OφrlP\#6x<W5A?w`<+1<i![{\N6AAs<$1
,Ez>rҽ|SzҼ)눕AlzyOAf{>	b]*og])Ҽ*?E
aHǓ,I+uO/d?;K/IoQ,aN,;YX)}[O],)oO#t	/#ɧ{xp}?^.|%yMs,LRz6o(;m,<Q_+I嬼Iv$FIW%ډ|Eczϐa$|0xJߋ%ǹLϩRi)R0$X>gHt3y?1Cc.wTsYK֙.0<,]o`D{U]O
حϐp&TQBy{ZxB%-槑)I	'q׼YR$V*>xng탇zs*W~_{1}lbC>,V	M,nRwݍvr糡|
1G\Dz͖z%+zM?.Ey`yz̃xӟ!H͂r)iP\
;̐ߗ$KY/'R>cj9RQ$)rrrϔu.wY?0Yk<Y~y9+8^QƟ-#?VUNɒ|?M꿛Ln
Rypp;K?^'?FUsUT+˟gꁛՒ|z_AqX7v)Qo2bJJ1rğ!@2*ĥ?'"9>0Qz
AlDdg#D|qw=Wp>J)?x7\j
3}=aj:ī}
!_O^	
.(
1\jUG	qbQOs"?X?}Q;U1\5+1iħ@{ ~Sw	!Tqbѯ B|qjÏ{!\Ia=&xb"0]	;= ⇄=W{ { >#ħE8YZbX/z
>k-pŪ}z|cqlj=7#6 (/"G,Tį%&]0qj>d@	~\O\zվn	q%b1.(U38gu3OunAc[:{"ݪsQ.Rվz<b[<cB?,qs0N_uB3}_7}vE	\>-,!8p
"Wq=A,{=BLO<GO 6 /܈B8?s)J*?8 ~8"ιc"s~\Lq8#p1D\"!Ox;ze"\uFc1_l#p1.&pY0Q8XLE8#`"_u C3ň".AqraOĻ=$CaL_;B?\׿Eo{!~cR1|b>
qfD,Ω0|WuËs5P߁Xd1|	J=✕8u
s@cb*9z@,ms^m0|÷!/Ź+qN+A$qbq 񗈋oD\Ie_DS8'u
1_])|kOgH!>QR-RUorT/ǹR˱M*8OC?8^
w7Jy~q\(J?S"w}$dHV)=nr>E7}L|]7[߷1KRNfa{0IR|	u<l>P4s
!knM**lxT|U))c%{rRJ,
)V+Ui@`g8G7IDRqc
TPRq*|L}(7̒=Y}(Y2.EvC؛x4[z{Op޷r#9s>I|*C>U҇sxǱU9Rϲ%{\U;bGr%Xn	{3,ޏ|0Oj>7}Z'.U8ߔ8OytЇۥcTvl?nE{j6	{|;%}ľh1w.IO[?{ñ[?vKݲ|@HXH#pL#XIGٯmg_ɿ\e*{`ۋ#l8/9V'W$Q'ϗ9T>v7w%W_@
{خϑ8O_a%c_S*}_KԴ׾2.0Ì3jl]˞ٱxL>/0vu{GzJ6\k:ѲyHlI~[4q>[;~v^l߹Bda2q_|\nXOy{+kd-Z]6oڻ?,ŽsUϾ{wjݪ@=?lC}Kv?/Nmwlxi޳ۧ۪Vg<gMДG>NN1{Av&OtDбi	]diF%ɾG>Aə-;L6"uƑ/&B89/z$rSgVny~+J_>;<7`|Cq_J?y~.gWv˧XP;AiWY񷕦ko/5usy֏
x\guײ\{6=jr_9VWg99WGKtÊnտ潻)n'4/?ug^fFiU_+:|߉x]z/(PwQӷd]_	zb^r=|ďsZŽtS&i̙9M1wOY9|˒?u|aN}꼉=㍏p>٭1H:Xsɍ3Ǌ~)ֲs8{W.ߛvҐOlnfim'̭+4?߮:rǕ5/u7f_9G|93/cߟFj^}=9b|BCæ^xם59s	M^DHLAӺ翘ε~^|UT!=tǓ^a.{(y|d_-.\N+#sYxG/f}}S?{ć[>> dy]<Aa2}ѣ֓]5ܸ-ԡ+ط|clեɶ@+Ҫ~+:VE+?*cwSA_|\ܵAs__Pu|#ܭ19Q{ˁ='}YXdсG|_ޒ-krGa
0IFۚ'/_lsy<X1kj"	^үe8;{E7.--Ɣݻgįq[x_z=T9t|ma%=L@ffO_{D7ݡG=<1㯯nwȹ#u֥}ˊyzQ03eA_N	|]/F~iO4mžUG^WU>d_[vyg߷;&O[zjUu[x>)P eio<W%YwضxEjܶ;jnuӔU%:qן|Kя<sk~>ZSXJ,4oMpk3>pWe}ۦY?i{|J鸛N>gқ?ц||ٔڔWJgf=̸/9טuɯ/)|l
[vҋúJ<*7ٺ9]q`fB`C}|n׈$^淾rU|4=>oG6m~{ˡKO(0AkǮ`[xˁ~䙿x;\ԡa1ݝ-KxQzGMq]9Ǟ^{{)G}}^k#>=]z-w뽗wƝ8~ȭ'/+͉Y{4eaħD\|wћj^zvz}ξa#P:ltl._s:ff_{"ky=tT3Ps_xw𙉑۟WL_͌xwO8M]]^})Ƀ>gmsCYz8P%cƱ*7cٷcCN[ͽ0θg)~[VA;F^=7mT<k<=Т\f^3o>ILe}O䠵o/0֙ێ1do;<^7Fդ=u_|}zİ'
mcu!<pꎣS'tߵAo*w~Ѝ[19>PZo{&6!ħM(@|tCV7h60߶vV.uH:n'm:H%m:}B;Ug?sFuF-Nm&SR	)أ	yLM^>m{iۇ#t.[=W ϭclGRH	[=77DQ:"
l	IWV *s;3:<%FOƼѺ{MFe<.Ãg_ѵ}`C(0!{>U,|qc2e-g1'}rͧ,-'ѢQ[N1yi~ό}3&Ig=p_98X>|hiʀjbڵѢ3y0Z6Fi/%V_`ToHb!F}N3Z@S0˨>?0Zؾ~g~.\U662ۧd;'z}$aI>;xr[_Xlx+//0#+nQٿ-xюcWѿ^~l깑\n^\|嚠1wͻ]2?fF/-~kɍNFe͇5NXcyoݒJ68dvK}~cBS_>ދ]_=pYc^9?_^tO<߻]=uѕҲOmY"mS΋淿m鏖Ym|~;GE{iww/~6/E礽zחqN~d~\o[wn6F#Cѣx{6G/*=;cٛ=ໞ/͈սڅћ^433;5/:g{DˌNsW\}hGty^tIEo\7GBtF~~=wsS?	c~w{͑=!=;9a{9	'ưgz`+4r-m(fg~}]m_
k<_B _bxIK=,Q<:'T|tO
%^Lt[^
FYB<f7z-;_54oTLHR@W~rA)?-OAKB: O%E`H1g[P3	)8.eNԸʳQǎ(_)yr%[V(&cUJTxJU+0yJ?WGӰ柰iܟ-65rJs]ӽ\	1, BFoӿyc~o8wKZq#-?)TKa>/Ƕ>U3\'c)Zr
qhZ5Aقc202g%({/\W[sB7R=CUxwM.5װwǷ ʠ?(5J<8u\:a6BJ;/Q^>B+>J+]B
s\PѦ :Gi l"*:e35#v᫃ЖEhm.K3L Mʃનf0
2*zS{|oA)pF;}_(!GiS|[!l7r_;
>Y>VAX	8-MtЈM[a6_/D%=;NnVɳMq3T˨U%C\yd|BX58'U77z)^;RG<UJ_O_H.eT'Gm|[|2yP1Qڔd* >r﬌o];_pÇi|Ta|@gP*D\)Q*JRFj~?߂<
i{HCBݪ{jQ9w~JTy}pT&0=輱b4{MrЪ6'hȤ@
yR*OVieچZwfWO 1CwL5d61":9m
1HԐ0|_C j/}bkbk~#wc	B^ULWjJ/ֱ47@&:*^[<G\	UpE?i$g{*%LАM ~J;;6|װ3̎[hH
O)J{uw' W6igH3۳85L(#$~5R!;hށ?=Icy}&+0A2pA݁5.[
Ѝ"yNSX [:=[ս3(3P_FjzԽ$8hG
,-_4dPWFku.\a.n}@)4$gR\
<	3/:CFz|Q$mbt=sKF
i@Fo$U6Z_ 35Q=8x@ʻ+}֋vЉ>u~N`*T( =;<<&^!o7[ۄ?y](gQp=35!Il{[1]şL~C{0m;5B&oo,'ps6X#>l]V6CR?hLXz0j
% z6 
8ZƗ~Rc\Z7&A܉~T֝ѷ2p[!퀷=汣Ջ}H-A	y$S'ҹ<+GmkCxe'AR+hO͇8	0^6><m/\(,z>w)`p՘nVP#ՃTz]n.<}\1"q7zU;q+qtC8}vA޶ {ǲzuxBZAea]Uy,{ȇT>gUxfR[^ae6W>Cl!>[˯A}62aACp]-]To[o{Oe뵧Z(Kf{3vUխ@7l#HsqRŦ1yULӍi#*+Q综C<6b^ƊAF߫^+潱u/>}|glC`Wql߇W_(g6؇>b,1W6-yPC_R}Sb#e֌~01U9u{O59ŽnځϠy [>7YȷObDix_C}MPC57?)}	ح`}&F>{UuYDP;(e9jI}gdwAӕ<l7g,t~պXFSOlO>6v
_*zᒦ4Ƈ?#nJ@]ꠖ0lhc 3C7	{8`QB,`
k=t=]AX*\'-^9C$TAZU/~u!=?]Ii=ī_iC|\L'
ro
r)!
^9 3u 	J Y&p{DC5J
~7萖${.k󱖌 
 \	s4pYր{	\DK.p]V%5p	-W{pZbW
,81-	\C.t\KF/ං{yp'@gpzpc>קx`چ}>7 9mI;uq؂aTfHw=HOhz>$Z"=M0w@A06vm0#CI$Fhg$s1d,d`<FR&tds8ƺ)dJndDm62-)!m=a2\rSZ#/͝oO[j7%<喴$˒ʲVj>BKL㖦C]Af0e6ɜeMA<Gb>Y.XYbkIn]hF?PVZcu5[i:E15]v RxHKK3b駍6mZbfuCD3r4D=p~5rx78;jVCj7wslfgmnv76&R0l[=	V*}!Z=Φj_ȵP<͕.h8*}L-5X
%?9MVw,Ml24]47}CMHq'qqmu'~)6wM'Y<̜SbZe-5bwkbwM1ϰ9\qt#Gd[-V5nh5M7vQ
dYz,b#7w;-Fnn12Ii<u
\;cܐ-=eŚaQүg"@:i
%HmHW"}H"}H"H5XHA
N~
i-R	E:i2t.knFqHGsN#4i.w#݀tgFzi5ߑvӁH!t1R;ۑn@]H+Fz_(<9Q<%<9{y[p2oq..M^LK5E?[@9xj|:}1fF!iL. *-.8ELqLݦl*!
mi81#汲Y96wA5$3d˷)-Nb6Iay/69/ GY]|
:-Ь|NS)|wNƉ0[B2d+oϴ9Y/ճ$T;'3ӫk%MNUDQ!
9=&I33L49qH@>MWar2bf`Vȓ6z-r;E-Yef2<ܗDidir|ff4vjp;9CKa0KCzoL.ȴ8y'i9jAj+JL.JuQ?y"+5OחJNn욙Xk<iA^&09}&d&Ŭllf
b[SYͮX]nt,k>OR㨙N"4 /&.*yz?Kfw)vȃCN|=8!nLE%N/<<SnyB4[`yj=B _sf>av,3=|5
	,7\2K
Em
x3T7jo|+S[vb᥽r@I[vE}=dc{0*KD/<`o-8 x(Y
 6F0f3ٳNI-N6G-.K&O
p'ؗEO);SNo[aʔؘIi1		6%Wv>ݲFlbK3T;x
,H<i'[.ׄI3,LkrY&fa9=8zh3
DzC@?fVoݝt@bd%E,T"Z4θ0Vˑux޻xM4Ld{嶶|ys&F^ۣπ"fz9oMz˚geEMׁi=4\BUzӅvpf28Cc3:2<&n.ʡ<o.LS3vf7 '[]?|$aOپh6 7Y0
Y0i)W.cvL&q& p)ۋvmJ:].	4'?A_8U{(Mqc5wo9a|Ӕiatq]q\+-Z;[&Ho2y[T_a|.Eʆ4\qܑ!RZ@}9͔n>3[QMYPii4u泵|:)a&lb>	!*2V~zFv{
i+t|(6|^#|/'L`/p%j,0\[x G0ռ_COGٍ7 7ab(oğEiğFiğj)@oğێ!
AߗMG7
ˍ{c0\7^2L]9_.zGOVZwp~YlQ
n@279η*Z{q3g>q=y%
	]f78!1>ܑ3xgȂaz01>fWIq!aos9v:}1HuA|F)O84M"7`_$>'DxM)l[JJi)>tε(G/G̛'ъ_2=6ɼ5jxoC=ʳ@Ebd`af1.;Wכp:VlI̗"%oQ6b.&#MD̬,sp9*>$."{dfɺY@|n¥3M.=7O5,Sdwl$<y.אUc=X)gruUa+@>_c#!Y0%nh
.591wa#|񌯳xiL8:nf?~Ay
>P.ںp&ÔSBْ81ĦϢK38E@LaMSfcf+LC0[Iْ`W<֯W͵R,.\8z_Od@h7[/_|o(%'x3xzH`H]aŚRA@ʻ9+O=f¤RP'msd@Z&{Oà;t[3.йY`Dk!VOiW|2>ar:-*+׬yY
,!z.?59n)r
S`F嗧x#n)|4]i>(w&т-zq+|~	6f^{X}o<w͖HU7o=i([d=H6gx㶽IzE纵o-SK
%mٽbo$Qv
zBlV4{)``cve֦ԺCcKoP7t3
͏I$#TH_{nH1lie&w[s6o/LGēe#zFA1gȚWkSmg~5&-2Qռv{&u~w$]gG.2s|TѨo繝r;Ƿ_n(f{$F&r J+͍nt|*]ُi]"-WT
̳Mԍ܆hrV4D8eu>0پUzaثh}Һq4V{#NF즥6ON@En0nhl"wI*;6e'kl{p+҃n11XMgu<ZHǳM-YA<$M'{;(:}c)Ap+PڳL U	.LIԥz
a5e&pQkԢA*+4=nЂf:3LT\s|w߽S[iȊCq*mwh嫮y._euafٱ:_ppx;UaKuo۲6߃̓]Rvq1o;k=7|%|enM	s}%%`*CguY5kY~ֲ5˖/>{HMV.tlnj_2i2}~}t{T/ئ[Lew|ken#i3ԛD~$};z߽{,G#so/L9o^.37=uX̘ig|W-:~qMM[?~bx$nf^f?s?03^z+J/=ӢnRgKӎ+NޥOlӚуu/lnֵv9nY_N3Oq}mֆalnMƷ#|MCO+ın7&?:XȔ01$羕֏l>q솑z5:bl3-#[6mWPҤ=oL
P,~y]9cf)qL3S<	~%MVn56{nӦ*yWa$aޗUk5뭧g
1otuWc&]y=sn]?~0#z'gGS^XhiGgV]7su!M=.We7Êv$\}&hs3kxSzI/}};uu>]"q`o:rxi}]=;Y{ut57lܴ9-[G>-#x믂^tw罡Kwy~]v17!̚
;Id3Sy
7'럳p̿;l/ׇ.%Got՞k,}~uh>CtuY#q^~9v9;2.q"s(1us:$X=.yEެ4_y/95<0*翢P8
켊j]`j1n>`tO4 }US`߅|`(j0?^G`M	vAyY[X1'aMu;nvIb(ȿ̋TNcd
ۑ gz!
8
?/pȔ\$$xssLIS8>iHs.9A-p!ȱ8rȱ`14MUqv "Xtb)9F29N -iNqS08s $4vs| Oca1gpȱAp#ȱ9c b`q\_RCa9B8
@
'6+ U rL[@p*ϱ"a9n>J)݀-.A]׿E8vNG{p>	H>aHv6HZ"X`_VO]h")؟xBM'/M+jP?.}3m(|eD}~
&=΢\r`{`BG?gy{7'q= Tm[
o|vq""sȭ)zW~~i~4ȱxz|CLYD5VyB}p	D}S^=]^aAWvy:o$wCmpX3.ӕ^-
:l?6?(`^%d-EaXyȓ~X#Xa!q{юIpǸ*c.l$^7!b*5i|N__u/	k'HIY8"z
g.&=+ީ>6Ʊ,Ʒ;P}^HQ7nwǮ'y>k ?uy
:h w)8@~8҈A0pLΕ loI/}M!`'.A*x.-!AZ+ѷ귭x:Q#h?o9";%(nѤ>nAz7ݶGÏr&Oעi`~Ūn/&Q>Gm !
a-ӓB-icQ%8|
ZFvMЇǴ9,wDr,4,{Y_{Er/"|='=L?UzH{C]OA^>4}."zOsyCsA-/_"mR`7<^L3'~R52*M9+i=$#V&n_e};O(o,OO%7P>)77KER4HzD}6$u$F.	Hah;Kҹ	ڤQ#(X)!ș|/#=ˤWIGP? )y8OdRIU!Cݰ$7q+P`zw z` [WJ<jJ`]%-I!c
/?!FbaIG{#ߋzr}CtZ7 荢NC Fbl!P_[(ǳ又8w> 5wǐhlѽIR
\4.'f3ށ~|IVV+Qu)NI>0'`IzL% ۹\۹'	?(ѿa{,]}tZI+7uPu!zK<Nڗ	0\;~,`i'`onROI|듒槸ߟw#ߣ=;7{Hb[Tod" 	iVu
7rG%qrH?rC-,GzcI+?nViRy (?xqPGY'
#1"C	]Z'#a"ñ
9y%IO!9!=T$ƹ'Z|&D0̱ACb|Hz<;%`WC%ϟ9\ϗٮI+}vBu7=,{5of/rD4rF>ƯX?AsX> 9~C߄>η'0ߖtk4+:=ԃn_cHw߇|bDF/$!iͻ]p/o@
<>>q}{%]	~L\^ o/1؟ 'p?`+؝8k/ƗS®p7v1EXXC
.~R0DIRM y]HL䱰}
KOKb 3z)^ WZȆŲ	w|̓'*S+j	AXzߤX{)@ku}]yWǰovAi
-x- `:Y
<ݷ(t 'y.~./x%N00x?<CS+8
	> z?9`~BwQ `  GXW0,Ǥgr,<1w+~1֙]9XWq wa^|.9~qc[-sQN9.r7v|gr@@"gl+v޼/򡼖T^7|'oy*jWB+$
^hZN,Ttբ(Z1VLSE(Y.%_)P
R(JzQj:%/6Tg1#ah-cFߠ}@9Tʱr*FUrLqu7kxj\o;x&o6vny7kaVZ-і ZF{hQ.hQmjF!k!o!
CpMEkZ%kZ׌Z֬j횯zkh=Vd=UOQoԛV]Իuޫ:i/PZwnݣW~=5=SzZuCoMMNWƝdԌ73L0ʄ3Z&eD&Ie=cdfig:n2	WSV`%\Vd%]1*Jҭ*zjFjf]V{AUԼ5-D$b@'Z֫
jnK:IBtцzB{ EhֶZBh]-UI@kh	ڑqe=Yo֟
fh6MfӰ&eYWΓ`.d.3r\;r+{5|8|:ovyWS`!\d!]0
B-`o.[ZV-k¾^qPt<%o_
¥h)^J%,KR4(500L3){r.Gr.f]{A5@qЄ6HL&Dk3aN'⮨_%P	UJ*zQiU:үP]UjjX5QMUjڪvf_|@-oSS<S3ku1xh
ـgv:*<R7}P{&s*- _g	jL?CYwVl(ecD6Q5,95rTN5r\'g9ʻ*8˄|xckH
s]uFmH]@`,8fp
VÎV~sG|PK
   KcQ
  '     META-INF/AL2.0Z[s6~ϯhfgFI}RcU73>B$(aC,@Z=(Nu=֢swJ|gr]ΩW//e6vn(}g퇡͛0ݛro^X݈wwnas[;|\[7z>!ōuP_ymfD3iDd'8l*QU6VNªޚj,qEổvD[JlbJ
ȷfA{[
z{Xiջ ̡SVJPG!ao\Z1 `ӝKj'qKϔ;< i,IJ z1^
jxk0`MSiUА]JӶ⠇=
⽱G?@$Fͼŉ+}KAgKBFy)'Np_7{X!{EӾd9h&rAr%պkʖ(
pU.H[ՁJ
HL.Ì3qk7;ν&Qy|x	[<',6[	)՞FZoUך,hMh*8Xwe3) 	EgVGghCpJG~_hFeq7¹;3pP~ִr/;:$DEM4c-`bz@/䘐6Ƅ2?" 'NPn*-pc2(!iL8R@w1tX Hn	RhXJJ2B@70-/k2-dqPOagXaE+	1de#XQ	4F q^ (Q*VF?DcnE\8u 5@
̴Q+14>O><0rA%lfJ
Xw]}~I|zw$W
Zc~^ZUV5Gȃ3nтqV]k "[˒Dh3:})
.Ҩ
bL$H2lZN"KQMm7n;<xAEz>h#3ZLjDe}5yu^f^˰H5 腭l(uD>[_`FWPhd!R+% u -+Y
Tr;*,!%H+ȵrL 6
8n9:cKxi'BTS0!(hFJ&v(rzC(Ȱ#j{K|v':;d)On@dSe
	("$}R:ඥ{sFѷs*]<~`Vb3rqz,GeURd!38@z5eB5A#L<5e3_V'
єga`Xq|t	qk}#!ЙK'X}[N#Y>B9'la5sG+XZ!P$PqCt-z>k= l/ѦAP
/؁qe
	f죰MӁʈ]^f+ܺ7;^Ք	ҡ审
6IdtA8wڂL-PbYc/ 0ScN	|~
V8(͈?hz6jE ,O_8	vS&ñ?Zb 4e
ͨϔh%/*+V|Ѻ 
Ċ໹X|24[yLvB:p	%Ha@
Ċ<m?dEj )Z˵i'Pg5tHۡV
GDʩo젒i'Ѱ6ۓ7Jc;u,8e#ŐFغLw. pqfXaRțLP)xqASHş=R2Dh1ќqvHOr^F}㇮ng|O;'Ϯ.dʙe_zJ𡬨LA.AI7ABG(ƮhW
6(鰝ʧ~IV FAMtLND{Qr0Yu,T[[YM|opJImyp>
3%	sunDC>!Re-Bd6ˆ*bGd&%-5P8"?S8ި*Uch$bpyid0 3\L&VA<ǆy⢉RWAL N_+P?G24	˽hL}A"MMV$T"yu6K
VMpd8K&*q4N8{jvM x蠊:rzJ/I.H|x"aV6zvt>x:aͧKki`ZG^2.7T_2LwXFH57B9pR|io`?L=2xhviPCXxte9ٍ_1}	ŹYd48Rg#c_A4T='XɥPMӨ
XxG	MNj!|5PRuKZ|	v9$nR-V"5/i
V$wI+-j6/'νƹ@lL,7=܋Oz_n:{/??;op:I4JISќT:BKȞC,~y ^/W/߮ݯB
}`e|\akansՖoY {TӭpW8
5H5DB79Dx ;S&3{V,?9}r<_b@`a'v6j	7Y@C>2ԮJu]b2ʍ/7zK<"[-9)8	.k4m'ZtWҗ\n=}bW	H`xr^h@h8|gU<j5>mtɚcĘ;3|bpx
؝1A73e	FT-W#c
[ r8HOq^FQ%is0kZ! /H:KO{t=,|-roOAi9l+Z ԑ+1G#ŝj;jIY0OAAW-p_造V2	NotMv9!@`%nQIQ~&=196uMjhWx0\ږ(hŔΣO+fx{d#H6dEcF.PK
   %MiB
!  E_     META-INF/LGPL2.1\[s7~^"ULfO'Jmʒu:CDN<a"ן̐[J$aF/__~.ӹ}?'Wjvabj~Q?\Ugeaߌ_;ڤ׿1li~Ic'r.ʇ)}WE44Ί޹.w6OVndm8/?yY7qbo^~/?飫elV۝YӸ6]96)RfuSe˖KZz?f6|̳͆+jgrn]ь,MRbmec</\:6!8Uuc+O<W]e^aEC$$2CݮV4G|,ٲo%QH?20ݸb[%-G4_Cǧw[d>В[Ⱝ	ٺN6SgZnz*:vxMGpUV̕_dET[H%1!Wh-
c
!XlmK'R z#~$=LSu޹UFk	$0,KV_.[5/s:-iQ6ӦVY@Cl*)R	Y
8JB_|+ZAɲЍJ3Ҭ,W#iqab#{Ed6O*Z\6˓]Dh|>Hy;|v}?gWUVZӋ
GTbMT0p<xE,dS
<%=6{y[^eV:)]c`C:SQ+&g!ង]Ud[a>QS"|*iIj2V*1OVh1pg+yVZa&0d>͒S`I*gdܘ-^=\LpUhĎ-<k2|ݰ9KM$mf{&8&pl҉4Ymh6a,HKʼT"I^2
9pyK_b?b/+Z͇NT &aPP>eͦ@/#Y/ ݗ?!*Y.V-ؑƔrY 
@t Ɛl
D t6lA'@d)x9s[%DėByK厉"SnnPw{g
	 $6W=mՆ3p$7jF
FѼ?g2\"KˮTb!! NA}`+C|2$LZFfbgtZ.e"O')y26[8pL=5qi]ۈ?~H0ϒsY5B(qVUmtMUJ~,)4]C
{Cح"ґ xéf{B?rxcI|xk085Jz0P{$'^&]2
!\5ebhK
fg @er=EbXmB
;6(J"KNjdp|n*U#'R!2`
w@8Ta1s%bkCk4(W=|A$Z|]<p5P04ְ݉Di7%Q_f&%`%iƓ"2b$1l8~E<}l^T#^"YeU|Vi%WX+XnAA|&±*nJ E$t"<,*xĤ%ĨǺC䰏J9VI+u}ܝ:2o5,+ejv5`šzH0|U+KOZɷ%uBK|(Ϊ~zFuCT'}iWYj1'YrE Hdhٳ/~"E$+1FO o"tvAmþs3qܢcx щ41c
cA6^.>p7}WRQvz*b 6!gD{#=l,
a	Zơ9~XKnbp&&T΋>SDH!^!*L`+%wBT3Gt;Wr͙#p2vTl<C	-@;HTt:a^{#3|K.UV_mwIN^]o}
8w6cj:a5-
F[<D_j{?Dٵ$7$MdeID=LL XEI@	2
(4G}~`&6@h*X'9gTOe[.!b
g)*AZأRz4cXq%Ȭ옥D
ʥ[q:K{qs}9\/컛9xyv~d/go.gfX	iC:FP`no4J 'C(HHO8-KВ^sZ3Ψ1aTΝJƜ MqD;?9ifLҴr&ұPd|"JnO0m]]G[mi"
ӤIenH.9m_ZA9W*qT
VDGoE^}2V1HR#Ivy?FYYB񎞐a\y2l!z+1YxIT<M g?dʥwfWV22J@`82ٿsՠXMJfwPY
wH0 lDzȦ3?AILz2'f%(z΃tWNl	y8+6&4wL9.	>(T`t4ɝ+P$:)ɭx!	@.M&p-U ~O8Ym$Bz|g\JZԨpG;
2'4qh]+QaÞ2(r0X(QpVv
jsO3REYGB3@=Udĺghit1i
{Sma2 >	;R0XrӀ߮vcmwR**Zں4k	ivwG@l\ ^
bNIsJFE~Sݪf'V`O_PM4a  *rT%ZS؛01b};̔t# BbwH˨:i8YkҰY͐;k+=j!
u%Mf󔲱xxèh6-ۭ{B⬼J15o}<v{m%)@ĳu[t;'&/na3
?hl? cxy֕$SQa0t2|, JSrl|QO+J
QJ(ŞNBRT2H%ܶ*A#^IHP"NVl `FiXN[^{:ąQI9c	57Z7<	SL^$0@	?WXu$hm>§sF<82G2*D⚹F X@2Ε@]4R-*,$ymgxCDî-Er@YEBIf6+5\EzUcPh8=oP}I}?~&2/M?sj԰&ﾾҹe$v`If=c
;j+5h\=S@AEl2pλS.ǟV;mfҧei6nEr'59$, uA{KVժ49$!!pYJOXOT>O^"?,)LUikC%8ҬKi94= <JΥ/+pOB)iN

]zˌlA6ȼʭ!p)F;pRkY:5ȊE8Bq1ˀwiNח'Z:R+ɖ>89츪 XR^!
q#yhY%?Ty\>29H* sXV
dJ.
 )Optg["$Q_KȊ{l!.I.otN	lB]"x$Gv9k]ƼHFO錄
2]
$	I1	e9/D<wuEU{ٔܓϬ(pv6\L懡Jat^dU

LϽiSNZkIEpOc)atծT#3Q:o3X%kA9KP nr<TĆYen>Lysn]]R#'|SLα`g)F*򫲒<nآhXWS]=Q;SgԞhrT/uHuElҌ>nr߷3QNY
WYIH7+y/}qLs0h_l(QVJ#$BvP(AOF{ڞq#\>muzE8վpd3EA\:fGx5@+!MezaV\3nosuuz3`F4=FkI/&G͕=$nƛ_9?aE;^fp?M6dЄBd<b#Cm4IhSyYZOyčM*"-@O8sU4>^GSFۆ4</睒~Ac
H>*DhHqyw1p~ ZqՖ\G(
;:vմ:I>Wh
r#YUe"+tS
Gfs^]6L00A! ߭ki'J H$[\u7*=*DōY|Ч<+/J	|ܖC cYZQG)|W	iRr!	Md\V`S۬]s$VK;:D%<%s)A2;i&wzꐂ2qW_$H51B`cl|0ޕEaZX`zb@LMw%f0=cAWKhǋ*rEdV1'㲚@پ>(Ły/%%m)w'* TقzҒ,3,!w,˗6l1 L?@_<Â3ڿXS³Uxtq`Dc=]f
G,΄-rЕ1pB?G<%kPZ؈[s6kswZDSizeZ44
>tu
Dˊ=@m&﷛ۭ&zEԈ`	t[jq)O9m֖b.2H

Wo~O"LaN<4=$xw%w7!TX̓2Αv̖ZFWlm%`Md1+?>g{d)b(|g.DCQXD-7RЯc&hTԍtVͶ;sz5Σ% 5fN`g3R13!l>0XBIwgx|@WlC8U:iHYu'gbI
Qߒu,Zbgνq(FJm2doo8M^!gWHi?5c3 m=ShH:!bRRYO{l糡?ULTqUrÀ.B4hid.k.9.RUs<Z"LY GV2dAJo>fdzcH'kJϬCTLp! etjz	8e):Ż0beq,/>J.,,6kI|#j%tHG.H(q,1(h1pAS{I#ww0	%g
U/C=|*11{2mND m+%p
OKo РHlOl)g5ﵺwaG.w=G]ԝFQ+}-k]\cX3|יLG(aĠ^Qs(璓)#mlo+`9'RϞ;aLiY-}䭻MJi(j~,3W}IsƕEyE_]8NbRn pRrn{9]B'xO;)(x/
shor$x|TV|>zo
f0Z;i9{k=_xAJb{_l5!ޡ6{BNS|I*4
>#'ھ:֧xlG#	䖒P7&0ю?-_. L_~c
ל6n7\WydCNcQAmτe[y L ]?&R8qeW(ƦUԒC3+_mTOUr\\yzLQ`4q%o56]3
Q/D`x'Sη< +F&J3/Y. J>+U|w+3h=)@gXۆ|	p!? c^uQL*Ij@u6'u&/m`ݙДåM2y3" gT1!Ja=!\w'r^F~xePpbjvbLt~j6hED\ Dg/CC$|B䣭H
=jܸ	xๅBI*+z6WKbIޙtO^D~]),C^="HGӪDu[Xᆣd߹?BB70jȷ(ħeu32?oǾd}X}FwV?(mk.H5H*-%ܚwiW'Pxigӥej(lzKܢzGv.ӟҲxN@Cv7)r8)U3P1˸%5r*(I(-,ݡZ7晱ɛ+
O画g/7K<ro#_IW:9"U#)!òlEǽvH6\m1XI~Mk@bVFAz	;uryKf#r\*@6#KRJ:M8)Hkg)9_{ыg{yឌ&J BcI&f XhO@*/RڃLˠ
tz7ofIo6#W|rw~mL$[:NiWf
xWuTEߗŌ@NF]p'i:o
l@U/!F*[=?/{nxHM鳢R 桾"p
{]#`~p)kM=%r۠CP])O({X$|g+P>!x+Ͽd[̑aorjxC_Qj-HK.h<
VgʃG}"t;|(I!G
u*ᓵXpR&3brڻS{5;Olĸөyg/>L#O1yhu?O}7vNnoi
|/wӇ鵽fDnki>]|Ýpsu9;?
ho'tao7.{:,iv.{\6]_tM};;!66HO鏳닫K~fic49ctsb|v5%fȻ5-W,H4	{>[4۵oQ}_]FMn.eFc]]ы|z;-2ck񔿎qx$p? xxsD0=	If8CwIngyeÛ-} v99g&!t	/Ȍvz1I謯<sqCJ{"B':N 9#PAڵZ[2i٫nbbF4ja jlk9 +l~	|6&AZX)YֺYܼ#=XY_|ä}8Ұ3<Yta1SЯ0Q>]i<=PK
   7[
       META-INF/LICENSEAO0#NEJ҂8@ B18v$-EN3o?WOjC>R\BPTWJ곒c0STw햠֚R]}
6轡I-dكH)0I լ/d+9fPdR܃FM$r;0!Z'}̀!HtF:d:3Z5GR6簜χa68neXTmR^JA׮7l
1\;}$ !ُ߀$\sޓѕDyRtN$m(;INe8瘿`tjA[ 풻 !pZ@hhNTй̯}b8fx'PK
    \            	         A    META-INF/  PK
   \r+               +   META-INF/MANIFEST.MFPK
    \                      A7  com/PK
    \                      AY  com/sun/PK
    \                      A  com/sun/jna/PK
    \                      A  com/sun/jna/internal/PK
    \                      A  com/sun/jna/ptr/PK
    \                      A
  com/sun/jna/win32/PK
   \iXn      &           :  com/sun/jna/AltCallingConvention.classPK
   \"5   '  3             com/sun/jna/Callback$UncaughtExceptionHandler.classPK
   \s?]                 com/sun/jna/Callback.classPK
   \v  M  *           	  com/sun/jna/CallbackParameterContext.classPK
   \vv                v  com/sun/jna/CallbackProxy.classPK
   \    1             com/sun/jna/CallbackReference$AttachOptions.classPK
   \a=j  _  =             com/sun/jna/CallbackReference$CallbackReferenceDisposer.classPK
   \jC  i  8             com/sun/jna/CallbackReference$DefaultCallbackProxy.classPK
   \߻D    9              com/sun/jna/CallbackReference$NativeFunctionHandler.classPK
   \,0{c   F  #           c'  com/sun/jna/CallbackReference.classPK
   \thD  +  '           H  com/sun/jna/CallbackResultContext.classPK
   \    +           I  com/sun/jna/CallbackThreadInitializer.classPK
   \2    )           eL  com/sun/jna/DefaultTypeMapper$Entry.classPK
   \th?Q    #           4N  com/sun/jna/DefaultTypeMapper.classPK
   \Y92b    A           T  com/sun/jna/ELFAnalyser$ArmAeabiAttributesTag$ParameterType.classPK
   \g    3           W  com/sun/jna/ELFAnalyser$ArmAeabiAttributesTag.classPK
   \sy/  	  3           d  com/sun/jna/ELFAnalyser$ELFSectionHeaderEntry.classPK
   \kC    /           h  com/sun/jna/ELFAnalyser$ELFSectionHeaders.classPK
   \Zo  -#             4q  com/sun/jna/ELFAnalyser.classPK
   \+o    #           }  com/sun/jna/FromNativeContext.classPK
   \]i   8  %           -  com/sun/jna/FromNativeConverter.classPK
   \lM    ,           +  com/sun/jna/Function$NativeMappedArray.classPK
   \/    '             com/sun/jna/Function$PointerArray.classPK
   \s1K      '             com/sun/jna/Function$PostCallRead.classPK
   \ =#  N               com/sun/jna/Function.classPK
   \)                    com/sun/jna/FunctionMapper.classPK
   \'O  b  *             com/sun/jna/FunctionParameterContext.classPK
   \{$;    '             com/sun/jna/FunctionResultContext.classPK
   \9_                 com/sun/jna/IntegerType.classPK
   \N}      "           ޻  com/sun/jna/InvocationMapper.classPK
   \J  h             ȼ  com/sun/jna/JNIEnv.classPK
   \Iy                 com/sun/jna/Klass.classPK
   \q\  L  $             com/sun/jna/LastErrorException.classPK
   \"J  l  .             com/sun/jna/Library$Handler$FunctionInfo.classPK
   \xA{    !             com/sun/jna/Library$Handler.classPK
   \\22  :               com/sun/jna/Library.classPK
   \c  _  '             com/sun/jna/Memory$MemoryDisposer.classPK
   \s	n    %             com/sun/jna/Memory$SharedMemory.classPK
   \)   +               com/sun/jna/Memory.classPK
   \%+    (             com/sun/jna/MethodParameterContext.classPK
   \    %             com/sun/jna/MethodResultContext.classPK
   \KX1y                 com/sun/jna/Native$1.classPK
   \r
  v             H  com/sun/jna/Native$2.classPK
   \ W                 com/sun/jna/Native$3.classPK
   \u                 com/sun/jna/Native$4.classPK
   \^t                 com/sun/jna/Native$5.classPK
   \m	                 com/sun/jna/Native$6.classPK
   \
:                 com/sun/jna/Native$7.classPK
   \n                com/sun/jna/Native$AWT.classPK
   \*                _ com/sun/jna/Native$Buffers.classPK
   \zBf      %            com/sun/jna/Native$ffi_callback.classPK
   \\a  G             	 com/sun/jna/Native.classPK
   \a<m    !           j com/sun/jna/NativeLibrary$1.classPK
   \ř;+    !           l com/sun/jna/NativeLibrary$2.classPK
   \  w  !           Ap com/sun/jna/NativeLibrary$3.classPK
   \`    5           
s com/sun/jna/NativeLibrary$NativeLibraryDisposer.classPK
   \kk\2  d             u com/sun/jna/NativeLibrary.classPK
   \y/&                com/sun/jna/NativeLong.classPK
   \    T              com/sun/jna/NativeMapped.classPK
   \&    '            com/sun/jna/NativeMappedConverter.classPK
   \/y    +           4 com/sun/jna/NativeString$StringMemory.classPK
   \`                com/sun/jna/NativeString.classPK
   \@PQ                com/sun/jna/Platform.classPK
   \\LS3                  com/sun/jna/Pointer$1.classPK
   \  p              Y com/sun/jna/Pointer$Opaque.classPK
   \ڮ%  W              com/sun/jna/Pointer.classPK
   \Yw                com/sun/jna/PointerType.classPK
   \FO    (            com/sun/jna/SecurityManagerExposer.classPK
   \x3               : com/sun/jna/StringArray.classPK
   \DP                com/sun/jna/Structure$1.classPK
   \ϓ               z com/sun/jna/Structure$2.classPK
   \0=1J               H com/sun/jna/Structure$3.classPK
   \[K    )            com/sun/jna/Structure$AutoAllocated.classPK
   \7^      '           	 com/sun/jna/Structure$ByReference.classPK
   \P]      #           
 com/sun/jna/Structure$ByValue.classPK
   \rb}e    ,           l com/sun/jna/Structure$FFIType$FFITypes.classPK
   \qK    *            com/sun/jna/Structure$FFIType$size_t.classPK
   \
  ,  #            com/sun/jna/Structure$FFIType.classPK
   \'*6    &           % com/sun/jna/Structure$FieldOrder.classPK
   \B=  #	  &           & com/sun/jna/Structure$LayoutInfo.classPK
   \/?%;    0            * com/sun/jna/Structure$NativeStringTracking.classPK
   \    '           , com/sun/jna/Structure$StructField.classPK
   \bs  	  (           . com/sun/jna/Structure$StructureSet.classPK
   \K  }             L4 com/sun/jna/Structure.classPK
   \[NM  C  &            com/sun/jna/StructureReadContext.classPK
   \E`v    '            com/sun/jna/StructureWriteContext.classPK
   \[5Ȓ                  K com/sun/jna/SymbolProvider.classPK
   \0   *  !            com/sun/jna/ToNativeContext.classPK
   \   0  #           4 com/sun/jna/ToNativeConverter.classPK
   \                 . com/sun/jna/TypeConverter.classPK
   \w                 com/sun/jna/TypeMapper.classPK
   \i5f                com/sun/jna/Union.classPK
   \Pн      "            com/sun/jna/VarArgsChecker$1.classPK
   \t~  H  1             com/sun/jna/VarArgsChecker$NoVarArgsChecker.classPK
   \    3           ͓ com/sun/jna/VarArgsChecker$RealVarArgsChecker.classPK
   \JFy  >               com/sun/jna/VarArgsChecker.classPK
   \B                 ǘ com/sun/jna/Version.classPK
   \                com/sun/jna/WString.classPK
   \|    "            com/sun/jna/WeakMemoryHolder.classPK
   \z=      ,            com/sun/jna/internal/Cleaner$Cleanable.classPK
   \{tj-    -           Ԡ com/sun/jna/internal/Cleaner$CleanerRef.classPK
   \P  e  0           L com/sun/jna/internal/Cleaner$CleanerThread.classPK
   \Z  *
  "           } com/sun/jna/internal/Cleaner.classPK
   \~  `  *           K com/sun/jna/internal/ReflectionUtils.classPK
   \B}D[  g  !           h com/sun/jna/ptr/ByReference.classPK
   \6    %           ' com/sun/jna/ptr/ByteByReference.classPK
   \jy    '            com/sun/jna/ptr/DoubleByReference.classPK
   \4Aw    &            com/sun/jna/ptr/FloatByReference.classPK
   \[}    $           e com/sun/jna/ptr/IntByReference.classPK
   \dg    %           $ com/sun/jna/ptr/LongByReference.classPK
   \-M  1  +            com/sun/jna/ptr/NativeLongByReference.classPK
   \\kZ  r  (           " com/sun/jna/ptr/PointerByReference.classPK
   \B    &           9 com/sun/jna/ptr/ShortByReference.classPK
   \      #            com/sun/jna/win32/DLLCallback.classPK
   \c$                  com/sun/jna/win32/StdCall.classPK
   \
o  
  -            com/sun/jna/win32/StdCallFunctionMapper.classPK
   \3   #  6           \ com/sun/jna/win32/StdCallLibrary$StdCallCallback.classPK
   \s  X  &           b com/sun/jna/win32/StdCallLibrary.classPK
   \
<    ,            com/sun/jna/win32/W32APIFunctionMapper.classPK
   \/  w  '            com/sun/jna/win32/W32APIOptions$1.classPK
   \   u  '            com/sun/jna/win32/W32APIOptions$2.classPK
   \F  p  %            com/sun/jna/win32/W32APIOptions.classPK
   \i.    *           k com/sun/jna/win32/W32APITypeMapper$1.classPK
   \Ȣ|    *            com/sun/jna/win32/W32APITypeMapper$2.classPK
   \Ь    (            com/sun/jna/win32/W32APITypeMapper.classPK
    \                      A com/sun/jna/win32-x86/PK
   BX|  t %            com/sun/jna/win32-x86/jnidispatch.dllPK
    \                      A com/sun/jna/aix-ppc/PK
   EX}p Y]	 $          Җ com/sun/jna/aix-ppc/libjnidispatch.aUT 5fux z*     PK
    \                      A com/sun/jna/aix-ppc64/PK
   'FXU)9 
 &           com/sun/jna/aix-ppc64/libjnidispatch.aUT k5fux z*     PK
    \                      Ai	 com/sun/jna/darwin-x86-64/PK
   9Xv@    /           	 com/sun/jna/darwin-x86-64/libjnidispatch.jnilibPK
    \                      A
 com/sun/jna/darwin-aarch64/PK
   3Xa8l  8p 0            
 com/sun/jna/darwin-aarch64/libjnidispatch.jnilibPK
    \                      AD
 com/sun/jna/linux-x86/PK
   XCrՂ   '          x
 com/sun/jna/linux-x86/libjnidispatch.soUT 3fux         PK
    \                      A[8 com/sun/jna/linux-x86-64/PK
   ƨXd#H  /
 *          큒8 com/sun/jna/linux-x86-64/libjnidispatch.soUT %3fux         PK
    \                      A> com/sun/jna/linux-arm/PK
   X	   '          r com/sun/jna/linux-arm/libjnidispatch.soUT 3fux         PK
    \                      Al com/sun/jna/linux-armel/PK
   pX%-    )          큢 com/sun/jna/linux-armel/libjnidispatch.soUT 3fux         PK
    \                      A
 com/sun/jna/linux-aarch64/PK
   X.  y +          Պ
 com/sun/jna/linux-aarch64/libjnidispatch.soUT 3fux         PK
    \                      AE9 com/sun/jna/linux-ppc/PK
   OXOW   '          y9 com/sun/jna/linux-ppc/libjnidispatch.soUT F3fux         PK
    \                      A1 com/sun/jna/linux-ppc64le/PK
   RXto  6 +          i com/sun/jna/linux-ppc64le/libjnidispatch.soUT \3fux         PK
    \                      A= com/sun/jna/linux-mips64el/PK
   ⦢X"  2 ,          v com/sun/jna/linux-mips64el/libjnidispatch.soUT 3fux         PK
    \                      Ai com/sun/jna/linux-loongarch64/PK
   qNXa'h  7 /           :j com/sun/jna/linux-loongarch64/libjnidispatch.soPK
    \                      Ag, com/sun/jna/linux-s390x/PK
   Xz   )          큝, com/sun/jna/linux-s390x/libjnidispatch.soUT 3fux         PK
    \                      A com/sun/jna/linux-riscv64/PK
   X7   +          + com/sun/jna/linux-riscv64/libjnidispatch.soUT 3fux         PK
    \                      A com/sun/jna/sunos-x86/PK
   IXS	  @V '          ܗ com/sun/jna/sunos-x86/libjnidispatch.soUT 5fux T+  '  PK
    \                      AX com/sun/jna/sunos-x86-64/PK
   JX  *          큏 com/sun/jna/sunos-x86-64/libjnidispatch.soUT 5fux T+  '  PK
    \                      A com/sun/jna/sunos-sparc/PK
   AHXK	&q Ć )          ߞ com/sun/jna/sunos-sparc/libjnidispatch.soUT j5fux T+  '  PK
    \                      A com/sun/jna/sunos-sparcv9/PK
   HX2~V  @ +           com/sun/jna/sunos-sparcv9/libjnidispatch.soUT 5fux T+  '  PK
    \                       A com/sun/jna/dragonflybsd-x86-64/PK
   hXDs   1            com/sun/jna/dragonflybsd-x86-64/libjnidispatch.soPK
    \                      A6V com/sun/jna/freebsd-x86/PK
   {XX   )           lV com/sun/jna/freebsd-x86/libjnidispatch.soPK
    \                      A  com/sun/jna/freebsd-x86-64/PK
   	Xdyl   ,             com/sun/jna/freebsd-x86-64/libjnidispatch.soPK
    \                      A com/sun/jna/freebsd-aarch64/PK
   uX3  ( -           2 com/sun/jna/freebsd-aarch64/libjnidispatch.soPK
    \                      Ajq com/sun/jna/openbsd-x86-64/PK
   R|\ы   ,           q com/sun/jna/openbsd-x86-64/libjnidispatch.soPK
    \                      A com/sun/jna/win32-x86-64/PK
   
BX  , (            com/sun/jna/win32-x86-64/jnidispatch.dllPK
    \                      AA com/sun/jna/win32-aarch64/PK
   dCXeu֏  0 )           y com/sun/jna/win32-aarch64/jnidispatch.dllPK
   KcQ
  '             U META-INF/AL2.0PK
   %MiB
!  E_             c META-INF/LGPL2.1PK
   7[
                META-INF/LICENSEPK      4=  ;   PK
    ]W            	  META-INF/  PK  ]W               META-INF/MANIFEST.MFZKs6kFAC'`Kq܎<>n$M'S> I$ O",vK}oXaiƕ\l:Iz~hf#B}Ŗ; M'6aj\L'7<9ο\avR TBJK\t5-vɟq"XdϤB&'E)OrM*y|OPE߿~\vyNOI~̆#&3X"nORq1\]{VN'¬4H٩M_H?HZsTnw>+n;hU*@
J:VOTϿ  ݺ1/
Ց!:,@ՑlQ.'LFjp{vL$*d	w;	IU\9gl_kH!-)pI e5fI $u헭( }gڬNn,:2R( U1Nz&$43K6O RFg< eQ,1<}L 2!I"e:׀-d}pF+ /ӪXCn?zUk63|W;T؎EU+. ;TxN! NBH1U	~B[I2GK"IٳGM˘Cew@(NA%`G`_,e;Z	RFqx_
oXTz 滞=tJ^diDmǧ3
 
p%ATe:[=iGV[& Q_@a 2j7䦶2z%F*?7-}AbWjUM	\+P`nݠUݳ]ܦ|uAu@m']oafUF=}iNIL[/K2Slc0dCu0JQi{*X۟ʛk܃.;S7K»P.ҍKn^!'4F8"CFnLs&P"zĎ+
	@DWQRnVm?@}Z2 !Uc?Ykł|c_#:㸻1f<2y9~Rf@CsB.nge@v29ЉNSqrY~B;g CPkLX[aFi'~	17Đ?j3hj>ÿ?z,][vkZo䛫Ѩ]P&G&ht[Kݽȍ* r^ I[s7hRܻ$$ΫsdU5n򐽏="ǥaYCACφ2A5@h,9|TͲ5 SszvĴV;;z.Ewv6CwQŧvFR3{N}SLuXBQJ%^Y}G1e1Ӥl􎜝\t)u&?}=vR>jݢuT}(5)mh(+~"TJeb
r5`b
{F'`yZDLD;`D`c,Ǡ(d,*Rx#\PYJA,,r
3Tv'΀׊j'4W14p̚2:GSe{kǓpY>Zz%4b֘idui`4bzF=;|NÜxW)Єq儱KS)B7PJu5@gٯd:PK
  &  PK
    ]W               ch/PK
    ]W               ch/qos/PK
    ]W               ch/qos/logback/PK
    ]W               ch/qos/logback/core/PK
    ]W               ch/qos/logback/core/boolex/PK
    ]W               ch/qos/logback/core/encoder/PK
    ]W               ch/qos/logback/core/filter/PK
    ]W               ch/qos/logback/core/helpers/PK
    ]W               ch/qos/logback/core/hook/PK
    ]W               ch/qos/logback/core/html/PK
    ]W               ch/qos/logback/core/joran/PK
    ]W            !   ch/qos/logback/core/joran/action/PK
    ]W            &   ch/qos/logback/core/joran/conditional/PK
    ]W                ch/qos/logback/core/joran/event/PK
    ]W            %   ch/qos/logback/core/joran/event/stax/PK
    ]W               ch/qos/logback/core/joran/node/PK
    ]W            !   ch/qos/logback/core/joran/sanity/PK
    ]W               ch/qos/logback/core/joran/spi/PK
    ]W               ch/qos/logback/core/joran/util/PK
    ]W            %   ch/qos/logback/core/joran/util/beans/PK
    ]W               ch/qos/logback/core/layout/PK
    ]W               ch/qos/logback/core/model/PK
    ]W            &   ch/qos/logback/core/model/conditional/PK
    ]W            $   ch/qos/logback/core/model/processor/PK
    ]W            0   ch/qos/logback/core/model/processor/conditional/PK
    ]W               ch/qos/logback/core/model/util/PK
    ]W               ch/qos/logback/core/net/PK
    ]W               ch/qos/logback/core/net/server/PK
    ]W               ch/qos/logback/core/net/ssl/PK
    ]W               ch/qos/logback/core/pattern/PK
    ]W            "   ch/qos/logback/core/pattern/color/PK
    ]W            #   ch/qos/logback/core/pattern/parser/PK
    ]W            !   ch/qos/logback/core/pattern/util/PK
    ]W               ch/qos/logback/core/property/PK
    ]W               ch/qos/logback/core/read/PK
    ]W               ch/qos/logback/core/recovery/PK
    ]W               ch/qos/logback/core/rolling/PK
    ]W            #   ch/qos/logback/core/rolling/helper/PK
    ]W               ch/qos/logback/core/sift/PK
    ]W               ch/qos/logback/core/spi/PK
    ]W               ch/qos/logback/core/status/PK
    ]W               ch/qos/logback/core/subst/PK
    ]W               ch/qos/logback/core/testUtil/PK
    ]W               ch/qos/logback/core/util/PK
    ]W               META-INF/maven/PK
    ]W               META-INF/maven/ch.qos.logback/PK
    ]W            +   META-INF/maven/ch.qos.logback/logback-core/PK  ]W            "   ch/qos/logback/core/Appender.classRN1=#qcbإBp5})uLQÅG/ >颷{z_^b#p$"0^O[LE+t1G2R2eo3u/|7Q`8JMhضeL<㖵R
d/BQTuoz]Wg(l._3:c#0L!_PbBiG15;W[<-h.eM4(ghfJS(p2aH͐"'KX&(clP6G
(`*UԦ,PKε>    PK  ]W            &   ch/qos/logback/core/AppenderBase.classW[w<kB`HiS7T)r@4X34iS6ޛIևҵ~H%(s>gos}o ß1
q	t	˙7\?cKFq%St=3W̸ {ˆo
tZ	ĆRH"[n`L/ܮfI@,{uȭ4	Ι+^6bXՊݍ^$~pn1,so2"x
Oà0+U'RG^~Ѭe-8.wU?X32,g
g9#m땲7<ѳ:)CƊ,`
ʜQ	|Zq2iSm4Hf`dx':,	R)tK Vmf|lX΄Y|Nš65^gjxA'/
vM/0YxIFwCW@;4m.jIH29s=y-{=Mh&z] .#<n>o Jȳ y
S:1#ӴΊiCmNCIw{'bVǫ	{[BQQJTz#Umr[-[YַHW
,;#eʱ^ޝz.X1NQs͍l>?3xFz.;[S9î1V}DwKѓsdzIhsgߑ0-D[;/8`R9ݵ3$Kn6*mO5
4ʔQQhnz
?<'[HY~vZ!7Tcޫqq*|V-X;֕nsXB\@q4Rkrƶّ88tܪW4iYk9iM~)3(%?γ
7a3uGD$5$~%p, [nOߐk=]]7~?hlo嬹+fDbUy#"kSMduW6qۨlwE@]Y𦕍5WPGjYE*ǏV5h/?v]1.A7_c1||\Q5F@ILOQ~P p2D:I_1߇CŰZc)c/8ƇB+z	w9l"#Z"Q7ѥ-p8V1NOi	<}G8'JyN?L@柸W6/:/|8#jr?$.漄1LqjtW(r7WXdsxN䮋\ħc:ɹ
Y=~H6yb.g=Ǐ*<&_#Z*xA?X_k|{Lf|\:zUCE|\5~Ḫ8ɯn%-1/UKq_4Pά:ڑ褀֌^V)oAJM7``\'xMhoJG v"+!74@@ա	">D9 I)K᧤^#Ru"ɵw9g_&70l-
I$Y?-u :u94t2!/4mw1<:ͽǞ~_}2b->TߏTJ3|/PK޹RY    PK  ]W            2   ch/qos/logback/core/AsyncAppenderBase$Worker.classUSU.,hiJ"-m(6P*(`Q7Y
}L':S3
98Z<wxؽw=ιw~O n܄:+h![N°V
\[Kh-)gR0/XnIwS&hDfm|'n$KEMcDMh9m*sM(sa99=r]xr rRqMs튢dQkݪm͌\@x`Xښn<*	g4Ԫ-L71~+ٌRpY\e!>fe)
%\SЫ"(C!,*Rb#'#K8usbF1a9떙^	xQw]z{޳!`X
sIڵĝp[RI UpGe8[)a-d,2c;9"DZAB$vBM1̿k!z=B7вQuJ![I?YHS	PA,ɐ]dM(m*J\^smrMF0	z_~օTeZEV`QȔSf1Za29)I	Hu."[-=/ue,yn{tIj`}!O&ڦ[ezIUyOԘV,+C㧄VĠ|Qc2pyLiK"E5|ΣJ2#3bq-t}ikӼ	`m[˟!&R$d;eɋCM'84פG~#GammGB:z1C,fi@{(h]B7k?*<462-FWPhsLsLm	?f.ѩ};aAw)
lu'薳dǃm:[m~Bܣc|jS _<AC-vo#(c	p>O9tQ
W)0, !2c#XbCxu
[,acsTf1>!t.N_3z?F"աOCR_1,+2E5\~[8QCh4 Hh(!UA%(XV0;.+[':\J^XVy
PKj    PK  ]W            +   ch/qos/logback/core/AsyncAppenderBase.classYxuv]	^K6lRXG`!0)펤A,u;ͳM'q^Cm<AؐصiinҺuҦM#ugfv]51wϹ瞻|pZ݄:DbjGBWf.zf;ca9ne&
e5
tPhlZU!ѹ/<"]bu]=3T>ׄ"X-.j#*躩pimXxW(CtLAeEC,vreR
m,k:5ÙsYYoװ
,MٙI
2ri~0iKDPHutsذVUXǸ$1c4{th?)XL5&.lаW4rkdѭjNF6YIlp_a^׳پBq-#zwNƻ	u~Sݶ2t'渺:t5sr{7e7+D)Cpp3?ZNv9{PNݮa8ik̖kx9v>pwƔmڑ}pW`;OQ%_
jW=%h3˶߫aX|#2}2u\;/kC&M5
bލשV^yKtHԠcډksV2->ą($kT;q
bbLs8pX$rmz"\k`i%cӛ3p
18\]N c
Z)~(e~`jk=q1m1TGvSd+rǓGt%n*cxYE#w,c]ӶzlbSes}Th
eٿGwTG}7-VP{aPGw4.r/-HCswy$_t%.	cs҉5]=.'5<$ccRpa
0ќpޏC
Kb,)}l}qKǪY:3-0(hxSXĜ)-*\>8>г2MȖ"9Oe۵sN|Pc8ML⢻v.βhzsFY<NYfmTv]vNy|9- FI
OfikeXzs
zZ3*Xg9x);!sb]dyo_J%Ďၽ
J1gK'>=W4"EˆIy^&tL]yhozWDgng2SFaKb}z`2<[fJ9/IxP"rW␔WΑ>b&)3KJDhpyjY~*S}?\Qi9fXs|rFe3r*k 9Tάfǋ1EW)5)\N[+K;efͅ+$(%WLBSn^ Z^㗨/
_t,h0G'6X[kr?]Dm+4dߔmڜ]bc=h8.Ca6vwu*BuDϙ٤wKJ]zn!u	dƅNBWJWj5*b>-hϒ*9t&
e#kd/)5x
+)<jdvi7J-)ԯ"`.z
EWP/@d6<%ݲFWK[vcfM)IzܤjYL-gZxYM:bOA7~=]`yR~va۞,{.ؖaJ_mcz.7-w8{L)\ c}N^r}b\Gp
'/ц?2~"	~˟VoQ|뫰ºPޗWegGsl _oeAq!u*ugxMf3XT$Xs32y֟"s_
k4c3Bnµ'_8>;grbޭ\"z<aOVȒo\võo }zx	'PsL
ը*5*T߆Kh S3HDT4?D]3FFAsJ^᥀7{/; 3gqlۊcGIhdz|߯ΠOFjI.%6$s3wY|G3Y`Ђqd
xވ)Jy#(`G(^cea*w|4_ܒ)]ϵ[:rCg01ϩXLd$Vo+Ut4SDwOsWH5^lEƨE:Ed.m=xˁ7/'BFň@4
z3[o6܏{wBzN$Q8ι_^3E=Y7R#n}/0;}>
`}sq
0_Qן"oҒ/ogsՋ#̑b)>L{>Z2]?^?z;M-
7J^$x	c?XtQD6G*[ G򛥤#Xy7<qݳ o+OS QԵDxOhr7Eh7FLU'87O#qcjº,y7^l:nz/Oӻ'I4gH4:8v3ܟ
Sr)$#XqTWMeԩ&f=Aܞ?׻2R*ςϕſ*~4Ž2zClof@/ŵ!;7\C(j/-mJcLclۼ+}vKmcW-|{c;5_Cccb^ise7UY1vֲxe??bij[oa%+we?Z > T(>ǼASnd} |D/MƥyƆ:{9/$JaZlf
?ްrOfkA/=Ӂ#;pbN}r.4x4@/9ww9@pR2C?,)8GO9wWrBU(
Cd'a3ߞ
[stETS<NQm'ၤj+խj~EY5J^7P{Fg{&yK{kH5j~PKԌyf
    PK  ]W            ,   ch/qos/logback/core/BasicStatusManager.classXiS==̨YZH 
4[	Q,!dHFL#Z3g@Bq%ٔ(˗T*>-S'%!U_rf`젨~w߹{G'pe:ءaUsɌfz66<}J4JS
eXQ@
mKlNX"Xf6ə젙6g-GC YLә6Zub.ez\JD1P=*ʇX|ct,ue/XN6ַSӋ33S:4J{5n a?ʙ)۵o'!pyv!Lb-nh
ɺ֒nr[5*iܬIm-Ȳ
D$g[iˑ,8..!IO=̤=7_ٶ`
uƪp_5Ёi(rq5Pitju1-iQ<Mf2>,Ф+vbLvF$ѯ)X m$I+:<gyLOf9
ocP^b>l4rc2_CoG0め1&93;dȩ\Nʎ	VuӠ㲆$n]
U)WDՌ]U

$e1ė0ˤzҜ:l(5)Ҵ
\Cm"1g%fs	Kfx|8	%hkc],Y:r_es{/N={TQ
;%΍Uƶ{KCh@|jd`Iͦ!؎MXQT=ݵs2I+J[Cצ-gԜ9Svbc7ͥHoBi;H:SǛ!9'sGYX)xrz'tڗe<FϬ*z|-8"4)%l;\vE^Ϝ,=-if^l)s]agts=xJ9ߘ}%\ixH#E'aM	[ez\@aym(CxO /K%?6z9>֫8;^ч	?.='x]u5 
QbضaX~{hO0pףhGN n*- ^k|Ae
\G##
?vG.N~U<q7!M|*E?p1q4ףT aTz.Ohmi<{b@@O"Oo{|AsCѧ"iXLR+o0**^`"͝:]\~6sy{(S!`xpnrM@B{ĭ>=9ÿ<}޻42ZŐUpM|/t'/pѿSZS@euiuwyhVGzhƘq<`BuvۻxO%;@73PQ#`!,H$ǂ[JNiHFD9 UBėzi}gOQ=W@<.:#:(L~{b˶%_f;do _Jܬo<WrsoK4+h嬆i
,JɯS
b;bKvVYT#ǟHoe~3Oxm?_=y{#%|>G+9QBȻ)""!;+wleS*I}:
]6KǞڽ,O?O	|ېk
4$=3nV~q.g䔖cL^7z.wiHu6S^6շT'^֒RؽF?jR\o[Z'9
XTyZ|sy6ԌjO/hKPKQ?h    PK  ]W            )   ch/qos/logback/core/ConsoleAppender.classXy|Ɩ	I!X`cH7r a-%rb(=C)m(-m ^[J/]k{eg{o͛}Sm|2*g$bt3(XR7ּ[	PL{.fUߦe5kCyTJʨ%fn(٘bzjbQ-ĨiچaeK`mD5j$ʘɷ]p3%c65kh553y8GBXPWQbi%'F>в{|0̎4tN^l
+Xt[ɨ푩
/ DR,#Ѷ;#0Ktdr5$D{mjZ7c\`BrF4Ft^5VEvDJj)83oiXa($2`ru`Z=|]'|gQU3X;(|wKZ$Bx#+p!J
)@+&s:y3=6U+lG)lyA5Vs.	؈v%ƎU28p^3hETCe\x%1wq͒vvu3SHiMP"ȸ3Jnx4Gy-c+zjAER8Vm@UAfV b2~ޝn'z(Nc8akH
'lq"99씱WZɌk[u20,ީ+x撟;Ҋi[Sv\FzSk niNMFRm
w/Ha/ყ,|^'<MbӔD$2L-58.i8dm^`1"c?NB4O
¿6aɓq^qZ5I5MRllP5
+%Jƫ)-mq_^^t &lEC Wo)gAӞ$ `k+i쭸M2ތ;BSI(41լ%!BxNcqR/.%'2]UOjgX"cKxQT	'x-;qc=
h >`u	apP#.OPvM-^I1|dR;a:< -^*ႭBD@Rq&EKaK'R'lsx /g:g\w'eiy%:	+ *O£T"ԭ'ɡxZPҺ4FM?yN>ɝgɧe|V(YfEb2>ϓXl7Mm?rM.ERR(A|_U_{aH3%	"mߔ-|VG17IZ9r~O4/I=d&v8e԰BřfWl.,ķmP7JQ}M\LP$i9Sʣ-u胴\өe|f@5zy-zRI)ΤXp_+H܉2(9ѳo*VRCTUNd>r 9ܥ 
t#.;nK\ﮋ6þDKc~Z+ѿP>:0S**,#ˊh/ 9$uQ1H8ČCMΒUJ[Y4CGN+A~B\~©i򞪴rYRK-~{zP ЖL;m83c;$&I7LT-:z~9d.vMJ'¬O:ع2e3kLDXf5bɬZy2br-LFtQN(JeAh[%teq.iqjj7)IK7xж
%;VN]<.9JyH{?QOJ&z] ]ND*AUygho9=t.!؜ͪՔX$geĨLMOJfc	Te }'-z݅~HeHG0gh^5gbsڗoNs3 =:J%Vh"Q~E#f¯zv{,s5a	4F Dj
$rI;!R=G.s1O_g1[BGKGIч0cG|Ce#fRx+OVZ|{AW
h+Ci{_
JmXuYXV!_`ucbo&
hm3݅J͝Tzx+pY5E]CsbvԒXr~ Y̑p$
i>@g1J'pMWS(9kJxèeZ|+Ǡ@w
IXF^W|y;3TUMw!\Wq
oqwŻqk{~W1<"IGq8$۱#]DᑃtOy7xھ$R4B=4D멖7"-TýȢ:a?4BWt)?{Gp=
tQ! Vɯdx&BQHx/P~މz
3q#^Abe\Xqhg\qI(2	iBWW%$%{ү[J2	<D.b̏;,mwg*+TbE!',(fo#]/e-6Ȼ GRQ$Bz8?"n\}DO݅C`PtÙrg]
߱(aM	|i2ƍUE"_MxnHOs%ږ"Z2y##]9/v\I
[)U
,TTeСă$'"qYlxas?[I֢ձlVＭ`
`].A PK~h^  \  PK  ]W            !   ch/qos/logback/core/Context.classTRA"DpQAXe-`U('f`
>~eOBd_rئ9==_ P0 pu4N0*?vX	GZk@s:VeΤ/ض3ZHT)i+sÂa(p+G0p&
~UqC(}aJ2
:MvyZ*P{%{mTh3XˊZ(p"
vH}H(Z{ެB]Үkڕ~
WC"#,v&[b?A)o'VN<֜GOR4iHTAqqIlJuQMCQYլ͢?Z(Q̕*T:#,\I
t]&hnLgܓɚ(]xb'mc_n3oEf4jKq8ֲn!A¶gHg"Kє9c=gؔgKOH1[6F35Do$Ij;H+4 =  w.N@paY5 R|#)<#ħ9#2x"2Dk0I%Q,o`K`Sk^oP[X#\wd2PKL"1    PK  ]W            %   ch/qos/logback/core/ContextBase.classY	xgy~?]+F-^ي#qۉY,9+hFZyfVB(GZ0!q |@^qKR
mIJhҖ 3YYyx}痞^B>9zZ3ZlMjjja42	!jN3rkZV[FN)IP֞RS~BqcpaT IYT+]WTs(5aQ@
VPU-r< 
b$@CXCDħSɄ)OVqEc5Juc`b j"l͡oa+b1S٘蓧hF%c+rZצݜ	E
`yq/m҅fC_/Q@WhbmOZF\KNdc aZ+4u,5e3`+"7
>=;Sҡl<ea9p36paBqNQ]|sxl%v>B{/nF(im|n_1h&vǧp8U:D,q۩d!ؒF1ۛN+rCL]gʴ]I9U53*e48$!n{Sxȕ8,NA4i}PG_W8«%"Xo)3rWEZ)dG3LUR8Zc8		w58Ymròvww	':^+A634`e
z`O?9&zr΁cC').e	}20W~YԞUM2NiCkga_Ca
9(?-+M@70f0+"^B10jz!CSBhNw9-$w$7
teJQDIN?2H$[%
ogqIMEENS:$3'}&#Dl9Q{4mR~PfSScJl28	Ihd?{%|@0kXM.K ,e͚*cr&mnhyeESS~lDGEj+lt<5#a<C¤'c8[ƜhZ:k@.<wU?O)	? 0wDqʙ|PK a6]lÎ$wI	gEVtdl,$U8'a,Wdl
FK (.6n,$؟4Nb8yÑѸ<EYCn ;?30pH?'SԜrJ=հ+9v s	_-I>9+z1Y_+y3r:]:Fx(uSy4eNutkQvG*F'k˝01ȣëX!|SdjI4QMkB܇9-n(*j#nCXĉ@Jxӕq1ce٣Io|c$Wl/VOX;qRۏ$ֱeu,XDżSܗԛHbRhs	pCc&ԈSl՞Z%LqZDES	w`9)z̛ۼeTKbqWocQD!V.99a
K5
WR*C$ITE|۵|ys?듶\BMp\b	Q]7'%R(s'%Qgg59Iu"5Ԗtװ=ߢ.FqYMN
#ikబĳYbN|R3p
癯ȵ/6p2
di{K_G&GUn18⽺̩~F[vT'+{]0bm.bO8wq
<>gwꆹx5'2鄘׳7;%pyr/G.Λo6fGOZx6
V٬ۊ89׆\S8uOjSӚAضv7;
ۗR'-A˻Ն'ZnjNgjbd\a!nnTu''?uk+E
ӡ);EL^UT,rXrwfUQoRp@`ێ78nY=8-O
<vY3pBI;%rӮvf.O)6j

'}𼊈ĔDԺ]}n-ª.qKiBtW

dŜ
C7iE:M*N{o+rË=:V8K3EQ	8~ҷ+SN)SicNI'#DDy꜎[l屬BSާ/[6˥i2	w^3-a[z!zGهQ7=TJ@+yě;{=6@VՊ='=ϫsZ3"k~qq<%={rgW#mx;7=)r>>tDlűCu2V_@r#/7a/9le/˝5xxnC{l?i	?cfՈJ4c
+Vh._яN 瓒-mM6;ⶂJcOayAyC\oC|7
+#LX+-",&p?NpشXճ
J
^nH#0~,Ž#d:λ:cHy22s(nn8W`Hb%l¸)j
lFHVM*T]Yɟn9!!	yE^a19*Lr=*np=lSaXDaF9I;oiyzyW5(Vs=:b#*U*?
ՕS$e0Yu395uK5%o<`#A5ٕ
2B3qu\+E_[~?=^]m|.B--1B1nw\R<f<VL*p"%lѩD
 U.dUt$^\:I%G_+כ{ĕ\lw
ou߯GK&-td9BEhwy;q'<HaFL"O11x3.y AZ,fesls{k3.]obA'4?fap <)W)*D~xwgs`=kj<mK؆/s
7ͯz
ۉXHv[eߌ\#VgįF(}#qùpãiM/[Zn	~>?ēی^4|lsxJ<?*\`'u>#Qg? ^bpi)euыğ;/0(Cȳg\Cz31n\Ǜ/KQ"\?pcMP$s]pC3!JJʰ(S%*K˶D6%]8Lv'kQ
+
&,upgp;E5(pS^E
v+XC<`;>S!"<1-:.F>LIZ3)Emuo@n;izQWc9_PCpg~(İy^1P/'~[
qF#@[-DQ?h:Ǌeˬk3
t<~"v_˝4l!lqk,KXHEQM}qx5iTys"Uxl=H=k,n=t)}9B<Jc3tDg^~PK^H  @(  PK  ]W            '   ch/qos/logback/core/CoreConstants.classtGǿ謜Ns
.A6	=J{]$Yݭ(+ۄ{')B<xwBC?sH2{ff3":(ݴFs3kqژGF3j8	ICki]7nJ)H0dA}:kO	ˉBQrB]{FSԣiըlFҴNKFڴv,NBNI٘
1.kJ&I3O[]ڒ
#L/*VP/MӴ\0La}:31xKٴ{-aIӹtLbɝ֐::+On:.Hڋ-8L`+A8VhK:\e6qaλ }:LwiBЪAsl.\3U";.Z{$GWj}KtoSϻit^4
qRB}9&_Og]_-W;axǆ8
sae}XEq0Y
Y؜	 Q4QPMv0Wu=su>@k:EBg\lFFt!h`
g7'sf;_mgCi=zuaf-fSTǗfZ9cQIفbF#;F%gZVT-O5yyc<E:-kA}.fEaN+W]F3SCgTYQߗAf8J䶜W=W[jQOјBݕp*BN/;`|G¢;XqK/b)
Ūv
qJ%S(jq1Po@QԱRIR=BeْS
sϩd*Գd
@o-Yn9E
l>ZJQ@˫>/DժjK:ϑ,.݊uR|,ݷ)B@w<Jz9KMѵW,#Ѕ䱧z;mۤsqXL0@a0H
6zQKv㧡zvZK+di<χ+B( +`WBz[Zq>3M-"Q$y(븑],f)Hf@=]*a5WU}ؕŒ]NeN4iXH3HYirM
U]!=*=8%6CAtKQ5lXUE!	Y6rٞ,b5zZ7Z1]VɷlCn0ո񐺴+lSYH|I\}a`|M;>va8HZ8?aOGCv(R<mTW+O-PV^ZhG0S?l;*OQ6Ew Ƌ&Y&2.%+x8/,`#[pt91HǲdIfP q&}1X`ۚ<Er4I.@.$U`[mq92exOlzWCKli^
TZVS'DUMt}DN߈-wo ER\Ŷ.Γi6@Zi,
^"t?A7UWdpLEL)dk->v폱"ʍl6#=Ɏ+KVpJ`cg
ڜsZ^\.ݛl
<gcl'BA#QQCPRT阀C
[,+ZQ-^(T:]g<+
FRᖀKR1AUiݩ՝ɅMS)@3_OṪW3F/|qVW#q
9&2\k@J5h
КMM
ŽQA3.\)/?8"SMk5a>=/3t
 mǂ/qA5pNb$6}ERE-q	Hģq'WH|%?|,q<%48Up]xVk	x^'R&oD:?&ꏃOHO?YO~?l~?__(/%J2%~
j_~o7K[%~;Z{~? ߇7K E[I|;%{$(|ğZπ?b~;%U S[oK=?D⟂}{4\ũz
wGiTS
o(W'QM>En;2ҿ;ÎN]7[:n]sn]ط@wRڻMtm:FXG/\*&qrvI\1~	8x п
PKU`T	    PK  ]W            &   ch/qos/logback/core/FileAppender.classY	|ujg%@ b%!_--H pjZ,vMکqNҐ4!>ziNϤw&u73Z~~/>`ܧ! Xh>heցQ#>lv+q)GB:4N:8iLfj̴-T*(_?TrThuTb ZMg"i@|yט2CFsHhD@:P"%CK13hX|	CN"JHc%,S.wz_c%i++rm-GVkXZ̟2e>%XXb{)^zE06B-t4IxʘTΞ3`m.!YuԸ%XTxHQM0$2m~|aY͸EP1^~xPO۫m+mѨcE;kFTԈǭlʉZѺ~/|u)kTޢckN=Rkt)}f|Ӳڭd2IXTmJXLanehOeccs,zNmޥN~G"OHcv2amLܠѩ
S۶lERIkwdOm#m:vw]n=.'+t'v:ʹCC"늄p	0t-)Xhljb)k)c%J د~:FTfsQu.qb78Ry(Z_65@B:&d-̊Hπ#-PYq\<:.ʕ¤
!AVP9fS!sNqURm#]m=#=m8{4ܫO2JveH*#.9t=%|/ާ:u		Ǵ
"̢a|@#:~EG#t턑) >εm6bkp8r_ӡxLA^2YSox`Hf_.:a&%Q>Sn7dmOT+WD|	n|q]re
ȧt>Me\Dëʨ3
!>+Ux*{lۊOV
bڎgmińOfw*سY:NWKȨU
_9dT*)Lf~}9
gu<߿@a5qZ=LVJMGZv̨.֪)<
U̍ь:fLDP
(TL8죴,`GI8U8[u	yM!;
R;U~	_30y|^ܦuL
*pk:ʦTt㯔oN!o_7S^T{*I?_39ڢޝPowU(pQrveu ?˛r~vϽ?/ݻ$ps:~1$k0R))*G"I[͸y!_
?݂48U$|ΦN}oj*ȗ͊xϋP	N[ZbPR0ՂSԩ ~Eʥ\
9ٶqt*-2Gd63(+u'Utm&M#ct)*t]"RcS΅[</tQ%Q1C)KtdC8]}F"M|<%[
Me
K+RHdcf.uJ[5q 9_r
t[sE>aJߑqc$>wttپ@p_vKۀv9LfFM{P͘Ί!NbЙHxuWsL]z`GV2޴Hl|CϪ6mꢢaS/])5V++['+]KY-/|H><?]qbWE뽡Wx?H]os6ǙlhY7
ו%YY_SW]e*Cq_ROST;C*.\{F)qk>T%EW61A`vMfyo/ߕW J㉇
/n<%?tlhXE/%(WKV֎^9-(
;sqe9tLXc~N|,Hdª}rgX)JeO*ѴdN a2]/>JpHF=Nm|HY+l䍪lSIDGޱNE<]%LDI]]53a63CBX:MѴ;FfPX*KU!9X.d4q8L3:dM~	{:
%iD\bs#`鶬l
9/>vFl
٤w1gɸӔRPkJeMr,F0VAMZ+"+%p9>lW"{5D}A%eR|bϠ$<FU4cϡfB,yKOcI*^k>QP~J#Wu4@g\ǻޗ}:x_2*b
{\ݧJ\q
k;݊rExĞ(<r뎀q&lŷ:UN}֔^dMo	kv{Wn*YnG	lMc9$cYps\}uÓNcS,2
uǰ,>/ֳة(vO86i~=\qy*wE?8ׇbKIh̶TC\#=̘Iu4V0Mg2hallQ܆{HNҿ'p'
mY<x}#ât0blrs?wxX6ͳr瑂ܙy45;5.RY4/IHO$'i]47,t7C9ק^zz8t {fr30dA~OǘߏT?Bm@z/kRn_ߙ{S$|5
hLCLePJG ^F..;x{3xHp[Cum~]ڏXISOu[-/"[S>Y=N=U~6}9qT)'5ilqAO̔1KN03>X?z+F붡I[\x(d+Tyߖ?|j)Zr?"=E/Ť2tr7Zy]y8bҦP}ڎ{RTR!ܘ^Kpq͠_wNmx{3[W<1Ve8J᥽Vo4UOX-1kW-}$6o{p_||_|t2xUktqr>ZPJ:VMFM6썂]7V)&4k,5ѤHJAAHwfP=|UuϮGPl~CyBn.4+Ź=r%W^JWVg^h5sɏǌO
UUGj_\P}0#'% w ǘ7w
)SgD׉s?/wBF
vy*82AI-V5JD5s7>Wf/^ߖs`kc Bޤ>r	`Q/hF7J(߯(=o&67n˳rSMVCPn&Y?x
?HLыxWoY6iPW%5cPTMbӢ/
C<+eqll	5ֆe^]n|f[-ۂmć^vQf{O'@rb1RY,Zak\d	'T:.1(0$+k\;4>>uCh-8sЈRʧ0/
xA7<|y6bWurat1-xCM>O P0Bo"%
/o`<?4wP}ME=E(B2dTh?8.,Q^vռECUj5tsrRTWYX&3Mb[4DC`M=jn=z7P'/.#.1xo<9^{pwפ{M!xpL=PKw  "  PK  ]W                ch/qos/logback/core/Layout.classQJQ]fy2㸛Ɔs̱zh/b-־O W88	$26aO/20&f<lTUXP>8[W#4ѻ{S<N79艚 &\&
偍?RH
|'
rcnkkG1ݓjl{vEF/zꋶ^f>\dnZ׫ܮJD>1cP@qt %vqYN5kEf2/49V?ǃ;8DuPK3#  L  PK  ]W            $   ch/qos/logback/core/LayoutBase.classS@@*m	*Z,3Uq5%X\U'tFWzŒes߽͟~l  0v~4mbKT{jT;L-MmF 
S(C41@!0#YnpDsy]FpcsjqvB7a@T}FOE ^8ZFY-rK7cLqZf\7
7F|d=i~ŹШV+T7"0O`{B;	f>\
ĬCZ0!hZ{!~椧<jn&Ns+>Brl*}e >l*nuěsL`y{-%EdG	$zn}|.n7V>ub{I]riѢ^6(Yfw7[}[:g䤇*kUnTh,	6n747< XzDxg';6h	ھ@Kv㰀:"E{m%@<	K4y1gucsm6}V:7عo眝A'fMP;)qUJ)d{d&I{/~ %){$%qR܄Gc)nʏ{my`|{v
f!i]yv43dylS~>_ugҳrzO/ ?' q$lPKbO  H	  PK  ]W            *   ch/qos/logback/core/LifeCycleManager.classS]OA=-,]P+Y?Pž@&j06ݎ@٭S'&&g?ζ|Uyٹs9瞹 h!DFz+4WsTzW'Ud7M1GE-%#BY0a$ĀsdHu:
VpJX}6:xM6}Ox*d,Al1q(N%EZe˔U[qO*px&{q'OD21m2fF-a0<UĖ>qq/J`WbC4/¦<)hˊJTu6gc^_M<T~SwuƢN1NeYja餁+^B/=ڭ)4(3R]N2.+}*x
z_ j2Tә3(nRSc0{3dG B=䝻ΛVox(f[ޢI=jX/bbzIbr{`/0!	և}g
qz,N]k*uk~C1<ƙ#]g]2pP[Z
Zq%`x
0|Cj}aiJPexG|Aڟ&4e!ej@4EhaB$d'cXzPKn~  t  PK  ]W            *   ch/qos/logback/core/LogbackException.classNA-41Fx5\,cǮV$VV`bgb-vg&}&AB,	W-BGw
VdXbn9?jK*n
jp?#Z׷	YbplOܽ]$#ܫ?rNZ!Wa{]1N3ʺ)fi~͜ʐqKN4ʇXؖæfN2_7Q)Iɪ88|Ϙ3R)LӞ,y/ZR⅝C_uΒ2yr~"1+1dU
;=Xe2f
a&Z"]߶q|PKSO!)s  n  PK  ]W            .   ch/qos/logback/core/OutputStreamAppender.classXkxU~'$Ӥ	IiKMB$
)-$MidwLYffo("
M-U)ME<^{ff'6D)=;{yI g$4&[0ִ96&&MKk4lG5%(LFQ	-4I#9n~ڔhFJ6&C7tSBqS`֬9Hf-K3Nk^⺽YrbEJQȨ	Y'uKS'rH$Tn.Kw41XBaeO	-֝!ѽTIX&A6CKX-y	W8HhFt1-ݺ{G(aM!Kڭ[,˴oΩ2Va5hLG(cDcZMhP?O.X%lTqZђN{`ahiT.9ׂK	qh)-,'6	㺭>TҦ1/55;Q$sΎK`P(:cwlfpw!BCYKS쪣iݙL(-BBVn(.O}K,~MSԴm*㎓95I0[Ɲ|=4ʨi))QNvTGYc<K	ΚV磇c9ZQpP.ֺ@F/$Tp0bq؁R3FC_ v
#\Je%b+O1,jiE.y\s13b2TP5r3$eDGKLTQE0.C}uT<wjvB΢gI-m2(	˅B"uб:p+د53GF$ P9jwIG7o: cWMÛ=V}PƇFGl/˵((!qֹ^wҥA7{5Ehد	7ZE*}=^]#ZR8[bq>L{"֍2>%Zɲ3!;LVwY-bd;R&vWGMwJh-(<mT㮗aI3cV;p43a[i͵?#㳢~.tg2JG9S}_3ۖ&vpc`K{g;9FW7mىTӃ~cC?
.꼉&3Z<KljCSsᣀ`ذV .@%UYz?тRαLh>snϨyVjz^rG4%Δ/_|Q=4ўH(uS˞M"ꞵ"&GrK
bf+ȇ@֒
9IH,2h14Ed:ź3\åg]б,/s<!%n]ui-KEtWnjϕp;S	9Nľk!O)eJ8;廎znjSqP8掛5fXc~&ጙ1b4C`=2/#8e6jo/wj0߭&"/
oCU#U7iw(pn]j:P1rajOhAP#7ezhUO	ƻN*o^ ㍏Oqݗ/I/vűQ**VruSz^mH|_)%<l[Eencgh9ӕӝ~E|wpc+1MlJX/p{rc( Pg7#jKZa#\\[Epa/Ũ9@E;a<ķX8+V>78}ilNЃi/83Yi]\r7S<Ĥ`-.EvU񡊯
9D&&CշhQQ]b`݃C1h&.MGH$юbB
0U0M}G|MԸo1, yU%OaQJWhł^mf> #&iy |qe9M>zqG˹po7.zksD|NCI0z]֦c#0Cn	3#{|bըAF_OkYѝh/3;."STIFQxǰ}uWF/
Ɗ0
+ȵ|ndMh컝0зoC8@xأ7Ol|_./45:3螨j?"
ѣ!~t=}g)+3&+,j#E#VI`	eڸК}k=|od!FgPu3[\nA\w#n=6ZWO
+G'rq$9Gq}b	I=P?P?Ҽ 5/(45+4ϹyNjĝ׼|H1DOņqdax唀#k rǨ9/E̠B}5ĉxLuA:NRgʱ%Ōur|ͮ :[_gߠxIoxd/	!)T#ylˉvq7Ӹ(>/3~.ah4|Lz="??hWroq&,r7Rϗ,iY;ZJ`|_:xӾ"E`PЉm}cJTYUX?o*78Hįy{{0
c+TEoeyMTR8Y6̳!~Ilvϟ$PK[  R  PK  ]W            -   ch/qos/logback/core/PropertyDefinerBase.classRRP=Fi!$@6ETRaƼݵE\	IQ{epfRhW{vϞ]i_>X<APNs9j6wxJK'jΦ
cyW-7D$	5?uBTЏ؄R8ΆR!!}p0U1aBj&X*wъQ1fd2;UmakZJm0by!_
D#`dUB&ԏe?FT#ޏ0^:3w6e:"j1D"a-5CQ L5Gv#=Ϭ'i[]Mw;
X("~c<kW<?
o8%_zPK⅜    PK  ]W            4   ch/qos/logback/core/UnsynchronizedAppenderBase.classXWPf1`'N^pĉ;P2Fe4fgFؐ6ifMtKݤK紿f$!?x}}{{4nǰ
"*l7aڋZf)=Đmy
/y]sD
4M7	
b**p<frWLα-cM&yN xzV@*#yU[f-&&sevF3c؍yVvh\,hwK(8ݥFӝi6oy_x[(}/ Aa6+yCvxQѣأyϰ-Y.VqD,mi߄"8^}*)
gm5'/Mk'Sq	pQI}zjGxׯ4elzkf%I_Dt%b޴zSXP1/3ڒNf48ќG{kW+"iU![l1gUaXYf#w@5 (FT|MƧq$HIQ_ǳ]t{@fXzpIa~]*91qU\Eu!KS3I]'LQj~+&6-NÌY\hSc;#l<^P𢊗	V䐩-,4!ZX@K:y5	vFWNlN뀩bV@Ri_.wB*"ݒa
;IV]PxPί_*^<M.=^_3̄*a40-2ۡJsf@{)WK2>95ԅTrrB`w)57<4Cv&
K/,ΤDES49]F?jO
/AGv {@tHQ>}Ekk-ҘR-iYN)&n/["~gXF0mgÝ(|gy	ԹhK>\n|VYuJkx>XvyXrY*39j TDbv<Qޞdǥ%LC-?{9;6d?N_3=q9l؉sE<	x8Y!a[dVZKOdM֊I#ZƳEVҰ~NIR!Rs(5DJ[1WG-O|1tWg|12U-ngUd9r`S.iָ]ץl՟QПA-_??78
|ӗL.W)YCg@<~"pJ_=s-wi]wO.uYo-~ 
MK|AN)u 5|wH^(K\#Q5og#d\c
\c
-KO)Pv%bmY(S)D|6F^b?|jF9wqf`S8w鏰Jzi>n7qeHKTm60S9\R~r9JW+>Egʎm',ϱ)#D"Va5<1C9q/qalH7M#"go{MWy[T󢂩
~N$"{2I"(xڤa̗.0⋾}ѲUQ?QDce#~I*ї*Xa&B0B0-bubI哪DqL_nhb[|sXsp6A2&W311?*rEȚ!k&B2{eٵ$܀]}+LW+.TsEH/2թvku!2WDrJ5۸烪<t~5!3!wևuPKF     PK  ]W            4   ch/qos/logback/core/boolex/EvaluationException.classKO@UAT|((
j!nPC@t-rE2)D
.fܞ;lA@,8{,LGmoV.!qjvP%d?FnrԌ
H:7O#GYmKSD	ec>)tT%R4[J9o?'t_3l4@Wr@A=2CXMIBvuےލTWs<jƂU!D~[CDgxv yu|Y9+ֱ|`	Q*.Q,
@&k*쮳W
ȇJ`RJX̎nKG-6mf`*`15Nc#n/PK    PK  ]W            /   ch/qos/logback/core/boolex/EventEvaluator.classRN1=/11qlD!㊠	ƅ2`L\~2(qu_=>^ߞ_ a#xwb`bߕ޽LDFкCiMıPɡZg9r}4U#{(#őg8XliŐWJrOsPtG1h}i⍦ 
a(t?6HHvW-(U9ul~ '`FGݹfmΧZbt1I`<bcb"C,ydi)^(Gv(&նP*Ie;}PK%" J=  e  PK  ]W            3   ch/qos/logback/core/boolex/EventEvaluatorBase.classOQǿ_+ bm+v/MBb
&M0&X^`uݥSmRc&QM- *p3wv@PC(0"yr<rZ
n
cKї+qO0Dʦm
C0_8bQ
8gؙi8%z'lYq˥X!KNy[z]*ix6,V]r)}CtsxȰ6r
!\9OH)K ˠyR4؉bHȞ$!5px9ka0$ۦǠC63"|T-U<A:_\Z(!A7>ΰcꣅ%0:O:J-ˮKɝr
aTT:+.o$-Vw!M5lvr8u: B0C@6Bo.yF>\F/A<&)Oɯ݊3;wp368ĹTd?ZBwq77H5$	!Ԫ//6So~qsX"'厜l^/{)T_]"=v̟rj7	f䚙Nans{&f FPK!klX  U  PK  ]W            9   ch/qos/logback/core/boolex/JaninoEventEvaluatorBase.classWWCd"'FM8EK؃41̌0%i}O5%mclO{AHHazwsS5(EHLz!ĳ^-[YVV_'VtMhټZBi}Ωzԡ^AX>fUcXm+ 8hkdLFRc*"8 oYs-4rG^mQъ׮9ne:
G
wx/-WH!G<aY͜oqNH;8,x²I_쏧Ҷ@WZuNQg9[wrhLnKa{֝T$:'əc%Y#%TiRҸfk˺ۣ+R$U8>jfNR5SDI՞V>HɡkI*Tqg%"QGA]+V {NyoNy4N$BϫS븚*xqjZILHqTzIP#D*^emI'Қ;mQ'
>d.uZ&S s'lzJrU1qzII;e0gLۦfy-;^fKۃ&q`/][<WT|WRM1 uO-iD5סz!|$rrKA ޾ +f1]G_Թ{A!at\+`Ik$kǖ"}S(9Vပiyc0~2h6PԵqG2dtǰLzq%X')cM5̪X"
kXXhB Q8|VF
G0[)&ih~yIXfֲSmȵtZnTQXk9OAad3`*Zp^[T6/JmIV)9<k` K#Z.Ĳ.p}L `+ʠCj-}u9xy}/$
1RD@bsHMgRo|vSVN냆ՑGKcðkk]2NncDMˍzQT"~yW:F]nEohNf_5̨^9NY;|ydc1߇Q{m0W%/mPKMK˗`ݐffӞ|g׷Pf,臔ʄWMS"IUGw*\Q:X_vt|&?U
>5ۨ8@sckÎc'.+ltoj}0璖}?_j΀&D,% 
3h\G!a2D=zgDB/r|l-ʦrz#ȢB_{qejwo!`fGRc3
_	;6:iHmְ#O8h4q 9Rsy4z<+.y'mҜQt5xyc
C.csv
s#7yw$6sJ
';70 >q8凔F)vA.@!60H<!tQn\
/bĳ/F"-T:ʷTξoSʛ?
goϾ3i==kF+CVq61Qq?GZPy%x/]Dp8HBS߆n׷xJ)[%CE]M;e2P2T?*e?iW䐂JS̥
oQE>v']<	DSw<y6z)߄/۽8עF;A_so~ɱޥ_y_{bs]PKcĴ    PK  ]W            (   ch/qos/logback/core/boolex/Matcher.classV[WUP@H)RBT{SHAPhkCiKu)L9?|]KZW]K]?Kd!L9̞/?~+؎	":Zʐ6MڪagMYdes#6<>mur,1МYnG5Dut@gs6.,r$?y![^b:4יٔc:RQv,-Jq=RRҧk|!2e³1qBEc$é)NRSn
?QEjV!Jv)0f
3R=W,kbS/²
N!(ǰ3H0ݍeSC͏,4YrRk80m~̎KrC
bX},QE~T$y$y̐	1,=wX91(I#|LmZf;&;TM0q
tLzHVyb9U+(#o-..D15RY5	24CׂU-Ida/%aD-"h[l
u;V8IiUy$[<ݨtX4J0}-?/{YJXDb9`Vo\eL
I,!WZD`0H@#oݲgYպz OwLg(
EAʅpSAϧTQRaW
s]؀MIg9[:Xa
e@ip
6\w\{kW2\-5[jzayKpJ>8نs_pm(i4@I~ӧJ]`J{ӷO)`L:KKe:Gk/5#]܍'^q9X..ߵd~BUgJ8XcR5Ii7IzDtl(<In=HDҺO@~G4x{<NВ-9ړL=ğ-D0"Y1
_=1M4f(W$cQ'q4*i^#ITt)emc|;Ay5{;0Js1R\p)Hwk]n+ BgjRZM]s4/9eIR$2s96B]Y<
*N4+L&@~4{RL}U_x* |0i r^tG84/Hu&e4ɦР:WBh@B<Y' ס@@P F8x=lD  jۡ@1Pl)u҆	1:tM6'BPK:J  ~  PK  ]W            /   ch/qos/logback/core/encoder/ByteArrayUtil.classMS#U!!0#dF>#QT)
АLIGg\?ƍ0Sjܸpc7V4@ʽ7999}< 	wOD$VһVyۙDc~Ԡր?:".$Nh>Z);{eg)ZgE۱h*nhdwe;eǏF4@3BgcXE:h=
w~@ q.S?_8YSJ	]|`Y-ptbduZztKE|%W'PNyW
 @m.-Y7b0!3Y,YMZ_4MRFblB)+ǉLh%|@Գ~9p
Kv޺W~kf:ǝB̭E[~w7u'k	ӤVݢFYJY{;".Hz	hI]-PesuEz,?lyK$`,%H^R
┤6=HCp-mR-veadO{~<Ƥ&P.f*9Ň/ |8o	΂7{.4F@9*kk0%tݞqp5nMf8?>XoN=*prhnnrMY~ś#4f}7f'j+
\Bx{:Nl|mְ##z.BN4w+8#50mCII;qIשyv:-M+Wg"ZwUTm'􇛳J?VYNNl}\ū5"ު||1W>^g9tAFn[.|npNR/y&9`H)S6Z!|@nܼ3_]5sL rckM,A&w6o)`
﨤j(Xres&X6PQWfÝU{XqDL`Ûf<>PěeCwSf}0|.u,=Y!P/יT+c1,Bȣ[mSn1\{\yiU;%k9WdRJ-롽@?So^PK
pӄ    PK  ]W            -   ch/qos/logback/core/encoder/EchoEncoder.classTmOA~J*oRA(-0r,qW$~5Gg/ٙ癙ݟNƫ(Ш!	a1|xI)nsc?i8H
pvVe{!<gڦgh'6hFDCTGt=~ȓɂtMȠr"vF=aT"G*6kщP24dۓܖC[~y5}Qu@CWoLY:4ԉZGG/B P<512F	5-s)\1K62M[V-j䮩ց2$K&_1CE)UA6yB
W^'lġߨh$0H,\V\B[vZo-Hjx[J~ɂŹl-9݃Ӝ"g*sIO)lR)$O"d1X{sQ<Ǽ-_2cڇξک9nH=bpza|;_)i9Scu
 2ܲ
T
}ٶ	OCaJj2ܾܔj!
tOeL=g4ޥIFi+G4bưaFjQ_$H2c\YsOh=5`e`GzJ/zj6{JSj9|XYJ}?4{ ARqرA |~ГphgM#?!\\uk+dO}9d(Cȡ7PKAzm    PK  ]W            )   ch/qos/logback/core/encoder/Encoder.classQMO@}Sx7zh"H=57O:bӕvQk("yY~}|±G893LM<RYjL'eXE:3UJ*h
4/v	ۘQ2BL'ܼrA}BچpDwagsGCXn6	7o7?jswIce99G;FD>oϡ]~P]!7PKvX     PK  ]W            -   ch/qos/logback/core/encoder/EncoderBase.classN@
"^~]!A+wC ^ɍąCOAT.z9'sgf>>`+$b֥yxfiueZ+L'cV^U+'*3DfSH$1$~Fؖs!\:!w``fB2hǤs5iuK
R%]s,mrWwQScB*2,sz#V!,ԨDK>!6lyцl\]wJZryKˁbw#gw-q"R|.i3iҋhMeRF˿="E}PLcbrű)42gpw'ԟ^`<N=Sa0mbbF6/PKl    PK  ]W            0   ch/qos/logback/core/encoder/JsonEscapeUtil.classVSSG-APBʧ B05ZhrM.^LnjmgRgڧfG:m;'}&VsI
.*<
7O2Q3gcE=i22+dJFN|[)VɎlv$mD,XY-Uu$L3jcdZF8 CE)VC8L֖[yז*T#FTA@V>Q=_0FNS7:SE]2ئ%J\M$ӳdju!6LT-%uT#vRp\@M8@UtS@MKD"%PnbYiU#ǨQЯb ~׫2r;~{o;NSCj]NcD(2wÞO[fFeL&
9bzӱDbRG\`Kov[:\+\`Zr`V	l^%	yUo0=L㆕Kŧ×denA@@<+Z^Ԭ
G93Ji-y])E5'^T#tbZ᭵Êɚ%RY
lն*/Mt;]:ݺ
8מxigqKLխcOKݘ4%W(SVE]ha|HQ|b(G!WC<pT{Xbp8eYT;7x8]U?ƾ_b1P¾v?DCZ/3A}t݆j	! &W]qLpcuuC,s3|Dpǌ5XAW`*2#h[7EaE
'=x|A:W":rHv	cH֚ÞKUF!]v-]5ߵƯbg%sM$n5s7CoW{Þ:9m@OG
OW{-
~zh:ap:!&)I릃|Y@Zf6Vi4çPX/Nơn9M=>Da?Y(EPݭD١ѝ?BC03q "Tlll#'Hmcȑ&)u9#Pw$%UJ'KkwG}I^ۜ[tuwwGYq$i1
#Ͽ9mdE7_* rOg$_0!nPKC1  u  PK  ]W            7   ch/qos/logback/core/encoder/LayoutWrappingEncoder.classXS=@];_XbuRC5	j4YdĮ63i6n6}7}-Ԥqg:/LN"4nV{;h@cM"p:~޴ysyAϮ%ȚJgnKs.	4&gb"A\C+4PMZz3}L59/+t^7Cѯհ@82shp?D+eKn9a93k턹X3پs}%fx<Q̂̈́b Bb#䌄"9o31X(HI#0	鋋et$N9wDqD`h2f:rcVw|vh	
p\*rbI@r;$8XIrC'؊HFЭ!vU,Kg$WV:*Ug4!-ftitƋ@_u|6aTj8u%mi8{,T5|TsIcYq{4G.jǀ5ln\L^&	\8.ӟF0:P-a'iishӑnΨ'ò3bŘʢT=IaJJ|R)Ioj|F3Y{}bh+
uBN4|ϲYˑ̱Siбt3TGB5yܠ%0ӉS(:t-ҼSf4,tpM_UM՝YjD]N'C&.t":qC*ڂg7mԹ804(pș
ImhST8o#îbJҍB%),Q8J̢eDM
)Zu:Lg/0!ǋkҚRM3Sb9{8[F,PJclRcvR꼎N5(C;G9C'Yx,NåW
mf+#`s,ǔCW%WG킟/rU!fm{s΂s8>ɋ%J_RM@*4agrێYJ=KPwx!4H%/m	">eTrEa}ާP)LU鬘v )8JO
I"WqoG%eO3U鷑#z1M7
zb^'LsX9ڨD!|Ǉ#Ym05m[#pꞨFGH}Sg]Gxy.:OPs<{mxM=I;k<DJA]5bS|/ͳg9^_ص"GN=kN{ʐ- \s\E}	_axUZR=wj<+[®g/mz	/	VF*MUjW2:_>ޑjT]emgA+:Selgw9(;}Sm}U,ϼSc>zKww=x-lĖɊq5xN0g1(qO<σU|}O7Exnxm?5c+J҇S9*K:$-Iz)@B*d!W}r}ٌ"J[R6wXNYuFmo1a=ouL}6j׏={v=&
emMV;Ŷ,*g{}]=T=weE>pkFWJeݠ@vL96F,6T̿[N|z{wRg)b)b),SZJb2`)wY~V*M7s8F|oI5lyMKUnJJҠ4UU#_vkڭ~g_]0^mFf
To0l-Ľ?5J_sE=?PKz
    PK  ]W            8   ch/qos/logback/core/encoder/NonClosableInputStream.classQNP /ht#!4/FK1+~e< aciO̹Ϸw  D
:<;'+ϏDx&Q7
3$^E-Bj˖ZOH#CHBZ0	'zc˗}}\
KՑANfjmndrt焞Z4Ƅ3Vnߞm)sQ`lD/,7r-{+'$
Z*^7Ww&fK,#Uq99M̳Rcb?0gya'q/>w
p3EF9T PKԉ&_  s  PK  ]W            6   ch/qos/logback/core/filter/AbstractMatcherFilter.classn@M옸NK]mi-MJ$p2-jC88.loā6|;3
2
(J(1Ԭ)4/pLYAhk\/CU"qXoʸYݼhf'Ȼ`zo']a__ U2V$V/y6'ɮšaůeR'')12yntmefX]>v7LU,י)C7bxLZizxcZku)Gv|P/ƀAf5A04|:C*όφg:J4M&6s=q>w.4{`xV#]kk~TԯdQqPݣaS}Ula;
])5+':0驌g4?̧-oߘZF=/x)1wB({O?PKs    PK  ]W            0   ch/qos/logback/core/filter/EvaluatorFilter.classU][U~ِnlZ6	Z!Ml5P%*k9-n]hO[Q|ʅ^/>&}09;;33G:ЩKE7"3z%fL{;vdf0=dKhyzE:y*7,[L$7zEPRgkٍD=n,El۔/)RZ^#<zUqݮ9^P1!e[zڮHkZԬLsk;;H2\V1]mG.ۖyO
B;fyDkdH2ƽm\jrq
vS1wpYeܼw1@mz0
n@jdd|E枬-n*~* ˅TLbKb\^6͐VrmUa[lf	c{*oA:K>K-"	zű_h%S	EcҼ=8̴rBVk.Sd_nI:Z``뚹9׌]^Š^
	1ܜU9H]hZ.GM
i	9mL'gv&GER7fZ&-]JaݒhAN%rn+TgC쮟Hh9$#OSf %8GuEzFT`lՎ7v6EkQ|%0qq͊˺<}<k|[	LS3}{G֮q0vhtx kAm5lJw`;{)oWiIf$#˒βthUgR+4
@ߖ9u KrszΓeVNm:!=#'-K>D_#Em4F*u#\t(PF/fpF1hh
qf3>8E^[Tdki7ie%#ߡK;jym-8GIc6o	ʯ~okDe-3+q)$]$Ij^Q*zGH	2I<C5-QM+NdȣE0U<nbo0o7>t
u<P: Pu<v?tH\PKV,j  
  PK  ]W            '   ch/qos/logback/core/filter/Filter.classoAǿ'Z-bh<}2
TlF[zw&6&>Gg+pMٙ~gnsXy6aArO~h~Ýn_<ٚ3r;șC)	/]%{;2P@1=|%\b0<~D!m{=& k}M/Cǥ\w,5'vGA}mH}:!z\Ui°BOnUɰ+ݨu{$!T~_Xտ
GUˉG5%{W87	~*vUkfpj[/g0=S3#t[ p')"WQ
iMqh i5ON:|X%}X>J0UF(*k<ɒ1w;f+F"	fv3of$20xeƸ[	~J9h0/+^S_)ycjɏ8-A9o"fq3N Ko*}PKm[*    PK  ]W            .   ch/qos/logback/core/helpers/CyclicBuffer.classVmsW~^$SMJpciDu'Q+8J:6^*ʉ`|cSZRuSf@:W:-幻[c޽{ssp  Cw-mjV1]=tLy#MiE͜k˺<eǰzЅ@OV^snNoUG@o26圊a/D`ĳGZSQE}1<^dgWӦ]\K]%,jzz5o;w@H;?_@Y"#b@ kne Pp8#ڦV,ЩU*j.
vmD>b8*QLHA2O2èD/W'Re15N{11$nKhF*^4p_ԝ6R|h]8
.0v7<
[On@ ʂ䌢9
u}iݞaWkˋz庶hRғ9U!dkNf͎Vug{'	ڕsh7}FԱQɤdC=7urK(ئ&Sn;\0&rQvl&<ܦxIϾCzm-Am-z5R,0{VrVya3QOlH4g*y!ZҚ/ڶSu*ZyVwJvuzIO"/QMXej8Ɗ0,G/_KCW9*];2-w4z,GaVP5֊cW8c~fL:ZBD}Ay]1f]L3t,cYzeӬsP%^T+);3a wpxs· &;ꯣv6^Nq#]?xh
{?N	v]?F4"}nFiqH3	L:7܀Pc\=eW앪{GGKS:'mOU
@P}!i3!o`XTA"|dSD!F?N,ϱ[jd3e]n.7(ïje

p5(%&x~%DSs"җ"SRgufXW N?M8o9I?C#9uKMC=B˒4ͬya||p]sy5ȱ`͓,Z2ר^]R7G]?
AW\f>?m<In 4l\
\a3_-"@Fש}18UZeЏuRs6
Np^nO&EV&z6\ǲ7{O#=zR>TيQ#Y+l-Q(I
^yޤ|7|֘,pl	_>>Ɖ5_p6oWnAͳxվC\i;N=Z77a>ctoc|sspmiU&Ӓ	=1'A6#>hݭACӡΌ
{Vx;ĂSm@r
˽봥xyq>?C׬;xr~K!WQg}b?Ƈ)>/[SLOKBkk`7j xMM%&),'ŗ
qs!(-@w;(S  J.k)PKa%&    PK  ]W            -   ch/qos/logback/core/helpers/NOPAppender.classN@@) 
	.h\Ui@-$>+>eӂ.sܯwf~~<i(y2\
4|LZ3=ڴ+l1$a{ۚ&hӲAypG(#WCnt\/L%XCMߑ`s޽%+94ZDRyd0Ϲfsg0FmȐsᄱ!nX5vx8UɒwfKk딫/wg)-yu	5KɧU>>(I"KQr}҃5@CJsl*(pD`VS,GHYFzPKe`    PK  ]W            8   ch/qos/logback/core/helpers/ThrowableToStringArray.classVYSW.4-(2*2*a "Qd@kfnA;%_|H^\HTW*"eI=h{sth>
UDxQ2͜Μ\haaPJzOL0g|pb`
tf2,'S'l&gzfF/鶓dA]0ڶvU@ѯ&Hۗ]1oz߅U.q&x],Et͛8Uc3UlVH4õ%|ZZ4l^kꋡM
v؉fx!aZwWH$[LKn6eRqRON
XŢeZQw^I?0{US]!v\VH>OLHUE
i&ē
2*^KTb&@X/~EmV̜1W3]/@eiHL^}iVrH5pX	Blf%	T{ɫ	YUbV:y
I1UINk8g-:Gc=<OS*^P1*GFet'T) _*i<i	_1uY+Nk3ԕ,s^;n
(o@yt\o)lg[ֺpu-O?
{XlĠD7"]Dr~VnnjsA
2nL[y|hsk~֧+2dGm)dyӏ3SY%Yqd!C2,Fuwʳ*MJ/Tё	ĔGW*+@@ћQ|g\b_sޚ.Mg<ՉWm|AwZ5[(*@<P7\itG{T2-e\}a/,n6/\TǨY/s8Ϲ
VEW(n*N;Ca]U>󐧳3
hz{oΕǻxڵ23UL~Pb75E)O;HtSi-wH<~/T{<ym󅈸g<|
R"PHCbH;=;i COZ· Zـ(N:T8M#s.|~ocEx6Ug1}"ˬ:&QcwClx/EƏr~Ns[ݡD뎎naN,"Դyop}%~;_|j?5hF/?1=_Sr<JHnLXF{
yנ!b
6>D3GW|uG$t3u/?p8nјjL`pǯv!,*BK7o.в̚|$Na3BG1zwGboQ4.
jEJzC(g9o'qzn
|oPKg	  K  PK  ]W            +   ch/qos/logback/core/helpers/Transform.classV[SSWv.!*l!	blmbD
MR<C$X{Lߝ'-NS^}igڿљ;N:&ke]<at&rz6P(r̔Jt-4劚^
t5_)^8tFn9ʩLhxjNK5l>kD^Ժ(CsIC34i1k=F8%'bg	ӿlds!]hB#ahzǋ-Bm.m;׼jg5]?M'Ok=ui-'فZag4+3YEv4̌{ʽ[ⱌz$jZRj$os82O|taYO(w/P狦UrkŜ*6Bkܑ3:$W:´\<e4O2qDq!6
+_7415 DKƵk30.V&+{lnZ]Z,jrũR#)ƈT*-WDpV&&$==Tt\Q	ԙd"6$ 2yYx}x48.I&~kZ{W8>!e*e0_1 'Sѳ)ַYVUȗ5o9jiGсar
7ȢLqt/6\iޔ浡)Y/QH1UJyY0f<LzlXOْ7:*#i0Z\dK2YV/Y<va;ʆyCG"eiN疯soP	-W9/bI
/4)il<FRή(g(!>)8
~7JvT,ëS_va=m
<_6q/u$ॻ}fq~fXbɊK N(3UJ&;b:;yd06Tm61wxnyn1)GGcn--˾
B-%vK:jI[ZvF둺B,>x3bN{tP8&sc{8Io1,G7	͸
oCnȤ&M>_'mu
I2li]ñV
N[GZm_#jk`P3rjH<m]|m+hzG`;!9v_yB,𯈎fI?a>鸎n-~`(>4BˏH´cޫfO8OHɶzFMFY>M0Q{;mNj>6'PK{  
  PK  ]W            2   ch/qos/logback/core/hook/DefaultShutdownHook.classU]SF=eS|R
ql'Em~
*BgLh]iE/CҏC@~Twe1ix{u{v_0QY*N^F/ٷ
#ʕOuڬH0SKJky( Ι8
c_
17Vזwk0ܰFrɠ3N(tYW0iqa=<"b6kL7.>yg5U{cP*'ۏj$-3p1u8\}"F+Ps&
b]w#ؕ
[&ʨe
R"_.CYi0s(qW	w#mZ3XЂDJvu52\jǞjܨcW.ih{x?np}L~ާƌx0,Q<%p|>bBSzuDEZ
cxS捻󋎟BSơ#<m6낞MmEJwH7ʣ0ԃ1psX-`
XJ`?}'5(RA?
*'u%Zh&.q_sCܿÒBԹ7=%F(v.0WzΘ5B'tSJV7#=nf/o0Q}g	-={.[#|bY߲?0k$~'
фsۧ(= \yzULPE@<ű\Uoq9gMcdl*OS";$T4-Q
Q<(J	}J?#A>4>ل&a(?)僤ϰڠ
6.0|-lc_PK    PK  ]W            +   ch/qos/logback/core/hook/ShutdownHook.classm90Da18!!:$rX,H(8 B

ix? 1:7d9KHsm(g([ÐLKuUd萖F{[TjH`ܜڲ7@p[k+l_" 8t
PK˫A      PK  ]W            /   ch/qos/logback/core/hook/ShutdownHookBase.classRn@}K:8.Ph(uZ:	8!A%%(Mo%H\&
E\fvv߼73;?~}
	\P1aX:L*"5T"t&cg2{~񂧂aevGUT"	
328AR:;t"vJYP3a
2ie+

mT14]?^7tG[3X3]N	Mo;64S3:U?eZe,ߏE#*ш'R契Me_Zh<~۫-5MwB;+ð1MtZ+2hC5ORvV{hC!]ZJinS<#)np>DJ/{|;aqh۔qH\.rp[ĿKBFiST5PKZ/
  r  PK  ]W            )   ch/qos/logback/core/html/CssBuilder.class;o>sNv&FblT}b̜"vFĲDļt}FĔ*F
lpIQf^:Tf#Wp~iQr[fN*#?\=&6FFf`Zb1I& PK1^      PK  ]W            -   ch/qos/logback/core/html/HTMLLayoutBase.classW	|&ٰpQr/gvB@&I *Nv'fwݙZOUVgmVeߛ았_yo;tGcn	L07<8b>%|/H=1T4U@4[$Ԯw%"dP5MPRQ,c*%,*vPv2Q=Ƨ'E٪bJ|ף9]qHpq]MI2IEv\ D̔kh,"/J}l	NZLije<ܘ*׼vxeG5PߦKWS[P#_>Y,$A譙NW
u%ԏ#-ǪDDd4IT9߯V")P#Ka=qPy%Xj4
@obmm8EƩ8McPU"IqtYAަZG%Lt%ۛ-Z	f҂BdVma5GqΖpB{_Sk3"2Z&D"T*24ɋŌTbD鋩Ԥu`XCTO9x56HPhG!SDH%#MWczf|t[Fz%LB$9ы\Bj5eu
vwn^
nnXM8ω8H=AH(kе-߅I'ȍD%J
]`"߶wcW+]V[Ս>߆e>_[o\QK{;qJ2ƉP5H©A]O6|###M#˚)BoPgo6jn):Ɉ*[jn	v^ѻe@дsy\ћe^΍2lv'>,\*Ifaz$µ9Ćr}"*%"[?)S	}&ot嬞,0+l}NccRzL!g虱(nStՍD(F0t_lXp.Vc1-IzquHke\'\Y'Xj;1*4.|Ec-4N_q=n#D|2ĸOэq7؉[ƩxyXFv־Omgz$mwH(v	(}o)~H%'#ZJ`-d!Ʒ{eb鹨hBz<+Md?r‌E NZIP2
(6Ӎߑ$%>h<n[?D.8OpfUִ@zqEN1&F7o!m6qsxO5QLy[bmm:(/x*lOy5MIZU1cuv
KD{bzڴh0͝/IeSή\Z9Of2T
Zhc֨ƛ;Ub2v	']S{t`xzxpv$fk7i9YMϳw^3
&KO\׼:aoq]İ_8>
3g1">SF&U\
YH6--mZ:b`EnU	ٰԨfo(1'#L ؜#[
-=TX]e\9fdxq/kqeC\ iS}^'|zxd>U/L܋Һҽ{x|'29d?Q|J1ZtJ]^k&ui6xV,'-epbs).S|+{ 3v̧gg([lgyv&e!+sm_CqlWi${0k>hżQ0Eu
\֏·xbك8};<g$ip9"lR,'[i!ӈBK5a6֣x<<˰ n"X
Nq嘏_7
hx0xepx	0)`(	7rbp/| SL>}>| Dg:]߰k |xU
DWc g:#iBp!F1D**hTxYgFh6^/_[FeUI8M66a0)sCQDAo47(/WSM
&din]3,]gs.21+f&͵,q 
!DFѿ޳x܏Ld//^jCg3?Q##Zcubo$7an&;-X[շ1nG ww"]˻wC={>\oVWwaw%Y8}g4Ogq8Q|[:aBh񗲭^J=h8x	p
a6GW`>}U6ٖuYɲH'(XJ"4Q;=_Ԏ5s_l|
e|zǮ^jb.6ݞqgz]{Jrыb?MU<>J,~TzMKI+BlT=lUÄDX^j\XZVRZO"Ț72O|;dב#p#8މ$}VUElQyWW-yslyv`ݓ/c`2qUslyXO:VYXVK(mB}(!oP7[Gt4ogQh)z`VWQG`GQ<RU%
F񽱾Vi4w#(s,252?η	s)_Ȫ3yg)dL;oKyPKQojy    PK  ]W            1   ch/qos/logback/core/html/IThrowableRenderer.classuO
@*,m+AA#HgD3ewvgpQ DN̔|.Lh#Y[lBWr-4Ҹ({~L8`+/EBpLF ;KL4R7ZF-EA̓HBx3؝lOS#<RֹkwMVckQ۟Z6/PK~?h   9  PK  ]W            3   ch/qos/logback/core/html/NOPThrowableRenderer.classN@WQ?7=@0Ĥc	bisy2PBbBagfg;3O W8)#BEj{n=>p&J]ʸǐoF6.]D3Dc܍~<
x0Uj;xX(."pCՔ'SGN`k#[I}_:/gWYL6CimJM"uՁtZ#r$OCQE3/0lZ8QTMXIvZ,ޣV(WI=_hkg0h"ZiHnэf`oiB:k&YY$`UҴ=]tڷ
"UK}aJ8ՍPK-Z    PK  ]W            6   ch/qos/logback/core/joran/GenericXMLConfigurator.classZ	xy~?ile^,[CdlBe$X>0=^V;][ȁ I@
$isФ9p
kHCisMiڤ
M^i6M)]V	w^{9 o{-T	.Smqmŏ.?J;tXaNTnC*qS"펧;:Iu^KT73mqV#sD7^솾^31ЍKܴDTA-17򃶾i)tSy6AP?5(KxBgc/1c;{w~0
y
Z*=qn:Vb4ZXbc)ӂ9~U=n,G}	E.^21Gi2QB")zqSHӍ*Xnb\B4QO"ImE*zh榴=N'8MMNb;İ1*-h#ʲJBe],\n
E25r-\Y`{xM%8	?5R	uvt P,hdHu]iA#k>:l`:Bk-WS`qwY,2o`jbc+z1gT@I#PB,oCczlC/8=j'ܭ6؅t^߽bΛe/nƍirzl르PbEXد_Om#s آC6;HtF-miX;3i/6)]uұ^/)\f)pX-匇 3AO
NX..>9⽩wRfaGmfSc;3h6(cnXǴ)hgKݝ;j
yn,ϛ!=߁jY7g{m~SpsN7x`ɏ&18ᰪ<	5

vƻoRJ.AUωYLu rޣV-3Ԣ3
 ]qݑkg!<\1Qwl)k&7faEd((:-6!B39èb^>誙`XB
ȏֿqxl+ik!'O]XONweڕ)Fm|bIbV^bvdjpgG,npNH;V3g1O#kᤍgpJB`L?Eʶ6Z4l<'7"@2AŻ1ϋǽ9lS/ĝNl}RwJq"d6V<'\K41'ۉ6/kƟl~'Oydču&a3Q:JCsE":ABǾm;./>hssM늦)Ia'WCq0Uﱓ菇`7Ä-3C'c*g5=nUs>V8nǺFب`yy$K`Gӕ*I/mfW??Ӫ	'NFAUpu.1ھFCh!7:*A4{	W{xrԱsU1	p廊6Gϒ|ҝ~iggf2kxg T:O[Ė*=W;;IQR#YI5^\4M/v#K2KsKCqgL,﨧tgY2ǖ*L}i1
ηA7/*,t.?i9,FgL%/\el4ɞ].d`͙TN9-/8kto$-ȅ,2DYI`rsRO
yr[.KMHʽMPX!:YItn޿m]7lٽsW~bK)n3!*Nr\4srH+	Ԥ%A7إ=4+Mlg-I&B-KPA_jXbcVTϧ
-sd,3KLStFh>'ikɶ+N4ݐwΘ:D\wfH;W/R᡻0a!%1]MA^_"<<Jp|t=qjŽ(MNc|h+zUo8Ao$77DK!?+=?N*BY)vim	kzBTW/mmS%y%Eg_Xt,'tXy٠Mh\m6Ỵ|lUd'GA6^LzSe$QuA6[+r%oUyB-/qu,sBvjyfenӧۨ!UfMoC]jl/	a^N*,=j݂+/e-\ %CxO)@-\ŷ6	kOnsd[CMf=YyM"p7(Q,|VfqNKudqQ_*\U_*'pHsc>utb3Pn(^KVsX_G]X	4khqm} bмWea	?vs-Cz
kG*Ѝ.^>sϵ6õwr}\ 7"X eIA6J'MيEI80֍±1tZc[Z馫pl-tVEBVC,ÿ[,yέb/cıϩ9pVil۷$z>z3tw]<Kz>ԏC@=.},+ZӸYJH u8\<KŎκ5#ke	J քUr:7=JM|ØylPniЀpO\:DjC07BXyp+mpRKaq=\ >B=Ā@Z] ҾXanò/~Ge(W[mRp5Kz2P63xJPU?jC+2@M(tYJI)cf^ *jkH|6ܼ0O:2GY3N1o߆j-ZevU1[dS<|轺$>JS'AxrR`([p>τ$.QwޢbPR}Lh4j֓=t}fd~ZO|oߢYnsn'
Qs>	$i߅n=EPPl(+dHZ1_nIVߨx :	g
,ӘcY|bs}<\d!nWkv;TO*<g;u>idƚSxI
['D^Xe,Nk>4^	qhEG0_7?Be
B?Q	<1
,
8[0|cO}64gX잤]xʘ`W,kxAze1F%&2ՐVqep;dXF1>˭]Ũ~
#^XdɚWbᕢhWGZ}ڙ'K|yK|2Ds
,[+jໄ2d2;c_m
Bg.J1g"
|^Hj"0/
\$ǿ*-ga7"VVf/"α0Nˊ[<YY|_tZ;I9WӀ,ӁSr`_h|'Piy1¢Z$4<Sm(Z
}D5
l$0Ud-mCԨòUADkd%cLKb/3eOU}-׌34$TLuRlRjp4<%Q꽟0ZDsNҔԆ4d?/yJVW{kJϊ0/X-ͪ@R^H5m>qyKr\A PKb(  '  PK  ]W            5   ch/qos/logback/core/joran/JoranConfiguratorBase.classZw|S1H<< %$aĄ`vҳғ	Yٕ̒.M(iIGݦ{tq{OWz$䏆ys9'O) .
UCu #1pz/'Ez?NDJ6q#ewnnoI{LJ)¨UfܴVFoOX\$4CQ#fĭN#j5wG

>D1u=㽡N+e{Yq)haf;3
daLCd2j	>L`&Wp[&jtfG"HZ~Rj*Pv?NI#ec:aRC(N[jlaBX@d"eAldeƌǒA60ϘG村XD?24A=#6dbFvz2P;x>1j06'"F4Vi(1z̸(
QУgXJOP~w}iH+1Z[tdAh2ɶL0k~>+)'nfΎ{M:0v=ǂ+
ꆐ qm`\I]sibwЭ=e0Z$CV`m&~tFhW?EFw<(Pa
ʜKx<pa]sjv!vV=uڃ-}FHi#4!@|B7gaYY"vIb6(tthTt~L6dn^b侷8.ؼ0cM٢krz YڰZrb%'W{!a02y!Ⱦ7N>@ W*#au}N%S%N-8Mَ`h|,uM J՝1[=}[\
C^426D*Tz&
7fn	VQl+#)CܭYe3	ä"hs]Ϟ9^zxɇ{%<6;cp//zn㑨ZKݿٰxȇx-^G83zLTҊօ'#-Q=6UMBe;{0qć7*]I`5}]"\gswNie,G3TxOPtHtO鏕n]JLJKt%WVD=NOeEAWbH<Yv%(Sn=,h9T WrH~bV.\9"@Ow\[\^8~%U>GDXnw~ՊS&-V۟a.;YU]Mq!AU}s<$fasR.2Լ&pܔ0gΫ؝l}eBYc;ztsrA&Ty|pP,ɁԘ)m
h:0zͰ\AS:*gX4;8 7j= kl͎ԴAoLdRac)VVuJRz87a.PWeqݩrչceWΙ/NK˾)pŜf?j
WVt%W
s4xaV/AwzϋP<+j#"]XakàUJ0<5!c4J05¨( cJT(o@i4^@NDOo0Nh`LP=9\aLh`LFu%=]ZAXZ6Gh )ܹ [7
JxFExoUJtFu"Z_v]o55Z$^%itQ%JLK^s$kB$W|@|_v:A nbq\Vy>ZfQL*hTn-hN[	*ѸAFPT6'zF킺μH۪Q]mrcAWWUL\B=*!CmWi%XK.- }fktHr]=g&QD`v[Y	#j'8f~]M̓kbDAe^
/XF)9tVZFKXs`
]2ToZkZ]'&̢/9[ueCEvF&[V|bF]uGtq§
عBNK䬓(l;c)Ay%mѣNӒ 8aͣmGwfJLU~.̟f#|?G̥4	x<w5>;pU	~e'}5YN 8oJ޴"Z7Ûexxsm|o[ټ-ؼ=3lޙY6oαy<smykyz1U{C]P0i]ƶ.Rccyw؍ixouhݜ˫Ag|-x|y&v-vpu7h
;;)]ta\LzѓEr'r]N/b1;X[1
O]qy1\߄ff"[/+c""g7>wQ>E't^S~T!tמ`kU|^_g-
unM|U6,c;x5o
7K,F Gyc`D
*!#_.:ȷ
A  :<'ș<|}otGxK%,uwd.|wueŮ6,{C~(.,.Dqɧx%.lIx<ȧx3[raa9n;wa'[C݋8³cxF.QeQuj?*?]ytSv*(R(Ei&)jf*jNST(j9Cϡ*j6)ju.STz[QIEYڧ6t'PKz6  %  PK  ]W            .   ch/qos/logback/core/joran/JoranConstants.classkS@B
;*U$`v46]K0&g9~p(ǳؙγwϞ?`r0 Ya	LC5r)RU/?V+3;4	a,y(H0n֩AqB#
8j4J[hUچ_(;ܡ򆥚UMj|
Ѱ$! A`
$'\TtKGONX`	^Mq1ݪKpM3\3C1H G 
:A+hn;Ba!lyѪ8([&0Q%)Kulʶ&}}+8KOVPۖ{W?)FU!&#0.?BVOO^J#Z
W$X')Ѵ̅gZ*lwWKA bVc%.7BУII̬hob&R{͟sv⳽{]:\,bK50	S2FxyAHW|Cȷ$]W	|yM`~!&7Yc|Ko#~¿&83y
ȗ%9xcT 
,߼࿱N8_adGkPKc     PK  ]W            B   ch/qos/logback/core/joran/ModelClassToModelHandlerLinkerBase.classXwD-
ڪ(*<[

R@KеMM$R|+7U)=&w6iENO_6޹3w?4TPT3QԹ1zfhΝ
}0	GaGf(yд93#Ɍiiq#efޢsNE.fk71
GA)x,dX]"'i9Q(jQP#4JS}CYu[[85%!3۬j\`q:ͳk-3#l۴{ /N*f}yT8i,\8;wd14G*Xʰ%%{~aCX*r
Qu(R|^䭌䵎
izd*[yoi&b"TKzUzs"͓k#-3/,gg̕ggyr{$;))vd|*y[#mkmj̗ȑhf5G3
N<x0|٪SZ({VF̊60"۞@:j3Dmȝ=(e=.Յ{RЕ^de1Kץ=	jzh	۹\10,
}TZh4ETq
:}S23\Ul;-鴚tzbV޿Kˢ5Ut婑-^2k\	KQlRmX<aYyvqN"XyKަ1w1
1bC
iAY	yvT` aZ9)lr_9$I*⠔QcIEO UGi5SqfbTK1d*S
9y&fNJ ''U71S<(xA"æ8R{{xJ"dt/xE.4_^0x]2`giD(󦊷TbLo/B*NHwn=G(S8}b8	JH|9d?R񱜴ObNZ)3*>b3bAO}K)eV(oeJ`h(iS]A9,L9I	+f#",Sx,ҧKm>kqU):
^Ҍو񼸼ސ܆o[w٢%:
ŞG
~VˢM=cL
SK(Y@K}Fo{uuLSBvs]v>zZY~< Te 4jIƺ.]0떸7XÛ\rу+\jk}Xb]lFV|6.vwpKyEk>[)v
|z4!E.؇@/u'i49Ks$`&0)&ѩ)#=VmD$>@'|f@Motm ]KW"=p2롑 4l^
Ы:wt2@ 
;Y\K~ǒPK%Jj    PK  ]W            1   ch/qos/logback/core/joran/ParamModelHandler.classUmSW~nL!RcRAQBB\V*ATVZDll:N?,װMnC?ꌆ:/uzŬˇl999/~<~"c&RH3ܰ7rfۖKa
Zm"|i=VGp\`H/:.1LVWae>dMd(Io{:_S
"߫r{WbmF(q-X1ʕ,N`g&NbaPD-E5X 1.UN14#X80qEygp!CQ׹ۡ0)-[.V-,ORASrQ2qm!4~h(:P>u鷅r4fxfG^7QM0`db`CWLX{k&+
{a+d&1İw!Yl2:XB>
NFW}u.&M' ׸ŷŊܳ	QJ|4̈́c3=yi}
-Yuy@+Z}HC5#0Xٕ%BJox6(GTdKM}TT6
ÅG^CjׅEA-<p<~#l>0֧Vڮ>aCG%,6WT$	BSO&w{p.vsoam_:Ibh7c@h:Z)	a{Ȝ22ϋ.`]iHPApK0	
W861wZJg7fgs"V*wyBȧvpy!Of|:o]|G
8E4].34XmLΑe]ᡎP#BKu+IVSkt7	<:<OxJaFQ_PKc~  	  PK  ]W            -   ch/qos/logback/core/joran/action/Action.classV]wU7MR(X,
~R !HBSR&K:m:&R|7Ru-3C:mB;ss䯿C|C]F@Z_<UhjFliԍL2dkRa]鑅A,8}+ںif53[Y#J'W
▁9^$#K`RzKos/;aVߏ$p&;bٚfS6t
Lʮ2D5Mnq$Qӯ #kE YXv5V4c"x'wqe`ʪsj5\(l_AI׫b1`418j򚮊ɺ*x#e<^}?8״UI#spp4a9|^@E3\a|^ n꼌՚2
nM/{onGƪ|/dAUV{]3tMwU\1[.uOþϕOyMrrn6z7tNln0[ZlpS 9kIqyإTK4Pv
:vK	]U|Wެ_j:ܬ4٘Y}o貮|.0{hlˇyV%YqXWa.<OKt,gk0b@1ěPv6x9Q8wHDNGsC0[Sj+[M[m{xJ5eYNñtFwFb|XwG$_:JDH)!p|a[gMi^ f.zdkRM6-kYگpRw~ЇiZp$(	 yA8FMyTq|=A9.R/SR
9<Mz@.PKy1*v
k2gFτgyÝϸz{~

]A]s=}^\G	=|g|MD6x3Q?^X}_}mb=`i&mn6
("|b氇qRSF=VrC~r8
C/t,SRGp78Lܓ-z?pUbzc.=2'g8щ}Z$Bz:@=Rh-RxO*Gɱߐ%,L[Hc1WeSqk-kaZXƫ>hz+VV\UԸSnpw}Z_| PKXΆ%  Z  PK  ]W            7   ch/qos/logback/core/joran/action/ActionUtil$Scope.classTmO`=ڭ[-2'/lT^E2SI⧮Q,vI2!
Q<LA1&lKzvo=ۧ7 PPcASFݲv:NZnّM;x k#7UaθL$5R,oTJ*<wIs	fVJ<uYC/D%auUdpUAZCɼЗ;֞{ǎ;k
4:98%.YٳS~ð=S]f3&aF7g;p?nҤweʵ\5J[M"p|!Fa1f%\h;ݺVGgpWl˫Z˕;o:޹&u'^Z!q"'6m e
ߊZ!J\R:{,Bnjvg)eS
=SMWf) LuPo1b9Gm#"I&Ľ~c
1'Y5&0p?骝 ӄ:KJ'!ɩCGIC>PJ &Is^2VC#
&դ6$&xlExfnI} Ic܉@=zkd 3tbo鿓&+C?PK,  Z  PK  ]W            1   ch/qos/logback/core/joran/action/ActionUtil.classURA=aWDL"b04U6Y²w'*?`O^ ?ʲgŖ%tt=3o n`!&hcY᯸rn-V-ڦϑyx:ԁvtH0n^W-ܳ-߳fD:Ŋ7ū<T}Υ(!ah~EWg8Δvo[08jAmg[xnX{CBw,7P湢}I(,.TV3ʖ,-fK
\s /?Xv<SAMa!E|_|[Xe=)F $W(JJG6《uK#-)DidRu!>Grubc.el4qk0ȸbCQz \
YYX%YNGBN<ģJa>"C@a.9XhDP5,K%8Jo2B.y;D7'TPĤIʼ"I=حXf!3n WmRvRbQUpY:-P:oy"(<I
1IOԣKM,'
bMrom^!o6	c]-AMn#é:~"X"cơ߲
fh{V'As~lg?hV:.4~LdGFp=ɥ/=:W6~A$!Iyk1M<Ѹqs:O´tF݆@{WF4($3'PK℣3H    PK  ]W            5   ch/qos/logback/core/joran/action/AppenderAction.classU]OA=ۖEGED
hTbvRuwO$ vT
$m{=;?~pbhC
EC:S.rn8w:7|ӱugNIXf\1m_chO*"<w%Sn%;n*bGÇTW5cbϾȴ|V]s1Dw-nM5r&e}b׳>k2$׭zEpcXN!t^ߧ!.7xE4e
dPM/
DV10*qE6JV.	7h[CWΈhZoq#bL
bOkI2uZ#I떆$&4O~B!4b0-CU
Q*f9e%G1M[l*EENyVC1{ޜ'CxAO0mW	,r2I>Ctx0kU\#)2O\*	C7?y/jRM)簿yf%{a^&_d3;&>ChU;6Ю`wAԭɩCDr \{c6N@7}/=H7HP	SȧE7bSKQ2&VI*B*<!L\knJ#	o!Z1N~1J6% dl0JCd	a=@PKu  R  PK  ]W            8   ch/qos/logback/core/joran/action/AppenderRefAction.classNAS-"R>`U--T#ۡ,nwBo JP3[ h/g7眙7 A =ahQbX27[Nȍ׺H::7<ӱOr!aڦГLeXPcL5)p,qϑQn"nԷ
/Kjtlwxa]c"Rx\yl)due}Ǔ]YKwyCyXyͦ

n Kd76b$SwR"ac!MUa$?+|3$fyZqs{1AU$¸u`޲FgMv1չnFqT/a^Yxܿ
Qۦ 0M[<UBEVbyVKS[w`YV/NY,I%p:uؽhA9QL%bo[
+~: "TbTZCŚikR_[<i^0 GnNpYa?G+Ԥ!:
lQc
38_zM3zF}0}$
W64@skBkKvA'їT{c[&1@0jssKX}5Z²
X]ra5Mwd>qceX&Z<x
͠1	 [M6H-D$>24),!PKFo    PK  ]W            6   ch/qos/logback/core/joran/action/BaseModelAction.classVkSW~NXIK*XtQ.kU*xĂX۞dfw ~/ho⌢cgig+C:g:cG{yr4I"8;pP:n9</,q[tl}4GL14{皐@SIPoeb1L]ܴ'<؂rOA(=SOsYC$M؍6
L'
mҎϰwM=W'VDq_
<.8^Q_-[Wр6@ý{5_1-cme[$*K&It@Uhf8"_9^dhOw.㈊80
Ztvka:.H#*2chrXNoτڀA-E̘R)WXd-'6)\IOWyG)+~)BSfsq05jM+'	34e
jӾ6Bh+^9MXJO=-];̒87y㸨bG7(a/f4sI4.3$L㙞t°̗y3(PCu2yY\8{%ǲִ-V]G*d|L0n%36:nveFyyvR3N[s3:Tpb$~)vEѴ_g{cﳯy9$TI^°e(ITl66܍XO֊ɗ))䍦эPI\L	 Heu*^ALOs'"(9@Z$4'6x8,S_:|msvSܦ#I	CܳL
lĽ$V'>޵i8"ZGD}#*K6,8rŭc/9[sE[wH8uڶ7nq~_0OP֢tcVn'1jY
oȿHUli\I3`G?U^itUI42|IBj41a>2Ԛn?BG!:f:Gs4{S|ٮxZy,iڨu1^{tg=C'"rƑɡ #4E5(&*uvc)QW-0b2M^c|h=S}[rd=V3X(Gi-#)-?aVcqxnTh"tOb֪j;aG;ɒm:X놓sj ~Rٌ偌וte`D9q5!vˡ>G7g(tYګh
bv}a`qT-S-8!)_8GמM5nȶ/g	%F?PKާɿ    PK  ]W            <   ch/qos/logback/core/joran/action/ContextPropertyAction.classSMo1}׆(
i$ UU"TK%6v:QY\@G!f7!EVg<yy' q
UQ$G*-U"AfJ#^!'юȚ	YO1I;? ҾQ?I%OyL#8R
*8Z9G?
l6:#5S2Vz Fz	M6:q@X1GjlF)j	D,m8#D؉%R%lk0cr>eq0:JC(xO|vY_֨*jE(;)מ4Iq7.iѵU
w/wUfjCzOQG~/ 7x%
wpREpelrVZe[`5k{^aH[B\`=&e{uV~vy܄z)ǺzF/6WbE ?3[_PKwEG   \  PK  ]W            ;   ch/qos/logback/core/joran/action/ConversionRuleAction.classV[SG̺u5Ѡ*.Y.Ecvf֙^\UyHR>%/y*`RyKUGE첀`yӧst .8RN (C1s<r31˵9mM7Za)zB-;`e0W*bu\vS.́7xBC#.:帅z$Ga?~-jKKZ9Scԭ2g8ْu'(5kyqa$pGNy^dC*q
t鍖-k,2þ nƠ2:jU}5մcCZ{T	&R/
1
6VF+he޼X^Rfb&˅.@|IHJ4ڈFEp$Y]ҭ@c8uh&&2;̝\p~"7]q^AG-1 qClϓyx*ҏ%DC7K8&pWZ\`ucI	*Á}^Ŕ)fk`msK6
&pMI!6
wztb8
|յ g5°gMY2Ubc:j;B%	UX
G'rNYa8
YN3IYЭI5U&%B m]T/ZvT"ܷ޴#^QFJLN,sv/wå
l|渾,4jk\ZSzބ˽3/uZ("Q]BY*&̻tfzW΂ċ睲kASf%D3
q_/p1!N>+onO3TC,"CZj3H{őn}7*VŽ̗KAd$CLb@)ö]=⸧=F*֪T2QӬ衻4鯓f\<,SGR<D+#GDEyL70YAa#Dv}d
vס+Җ<PES_{aRHNpi*^~+|JʛF:yv:'Rk9zlJYҩH*}3dR[PS?a/50r"('hD
i)@m8
8tyCtuF7Ѓi\§4SSDЇW|A<SZ!X:`
4aO&?&?n=:Uf)ռmGA*44,Bq<AE1S]łA#^
 _ ŗ'`
Ql8	I%4GV&k>3Uu`yl¯`#=ziʰ%RPKC  n  PK  ]W            ;   ch/qos/logback/core/joran/action/DefinePropertyAction.classU[S@RJt܂P(T:um	&)'_>2G9MBe3:ڇ=|˷t
,6N
ڮvUӮRlGWl[*<öOn.6CÂaC]*]gd5*(r(sv<ާQ lӏѳ^A*[GkmPsCl~rVE-xaUy۩G#u٣Rl(5+À3SK]YߪMwo}/<n(@'l~/nUa@W
.8zM|izqGF'bWtUIEACfP\_ObD!H3HyQc"TPqv5?TpO7qAlm9xoJ^ʑ-y:۬t/Ӗ5nc;ܔ]T4e	կuCp{j!fhPs!'C+q`h<<k?m2R0˹Q#7%#=s!FT&\}vuCTb2&>W&Rif4׏}E46=Q	5Y̇oɯS#c'h1bkmL0G~ &L!VY,i{ƢϼKxH		I
r!t"02>ARoc8ƀ0R1"PҧNb$&Q(fR(fBu"GPKA
Q    PK  ]W            ;   ch/qos/logback/core/joran/action/EventEvaluatorAction.classU[OA,\BATT⅋Pl01So,nwqw[|⃾@2ٮ
&̜|;~+Ul'сNC[)qa0\;7uܲCkr`3-fXi-)myzIHJ382F{"k%mxc.)xǞ!
G
;c/,+^hTm
c; e?-Jr}10RoR*ZV%|.K='50ĠZ~!聊8تCj(Lòc3m4؍qisUL:n0W"YJf/$n6 /RE,kFCV*T1,MZ%Ob(XحUK{K6iRv{#ZjEj81[OpG3eISWae.DfHs1;&u?&e5#3oӼ!"8b,D!&5O,9Z1YzL>ΓdhO̞}Ch
XUk
n]ٹS+iK^째80!zC$s,OHo+?I~+XG."HRϘ	0	3icMP@OM)INs##H`"$!PKң  8  PK  ]W            J   ch/qos/logback/core/joran/action/ImcplicitActionDataForBasicProperty.classRNB1=DJMܸ	PK^K1\(cG43s&
;!Sb̘&蓸Xɇƒ$2_P	n̝C\i.tS!&M;9ik?`=(;d5G!wU:r3\-X$ד:4Ac%>0d.RKiٞvNe=*͌1C^c(Ddv
Is^5}Cu29aFo
;fbl~eW'1	ï}E?=<	~׿ÊϪ3XMxXCɳ:6tel"[	PK*Z_    PK  ]W            :   ch/qos/logback/core/joran/action/ImplicitModelAction.classV[sF6#1`#B)$BI)V"KFZ7z_`LkZ;}m;=+'awW=|;<|@":bd8fV;onEt=a,wnJu`bK1D47Ҳ$4Daf8mv~b,c6<O8rCOa
=xRSrkM$BD
;unrrWv4ܩfr*#sq2L~/E
{u}]b,lƸ$RC
!^r
pg
Nx&^C:CT^/-SQn%p}u00q e"ܑ«{Br	%C2p1bMpAqe
C:N*5^.ϒ9Wp!pga#eH',\5ahT7c:Þ_D%%w$l8?g䓸cB'&=:.+{aN᪆k:^SݿIWl'
ۉV'un.gWfo[N9[A
7l{NCy˶)Ά%kgCL*Kt̫,PۢUqlxT;}tJ;u则F$Y^i']pMnqRfTV-&jXd-V:BxJk3]j:վ\'DCG_z7BGޮ3lVkcH`>idvru@z{؊ˊTrwnQa&6kᔉBWV[1Vͅۂ0[EⲥzdJ
J_z>-d-SyDX
?f5˺;I3
TS_-g]˭wWw`wʶ\wQoޭ6omޯCܶġ~q|KeWGom~
Nҝ
`;oѪ75ݲh|[}D	Τrr|xEc"sZxtBOs'C"5h&z_p,Ě؟Lj:>꽠AtXga	
 ZFB jQ
@
D9;ZPAgư@		$GkoH	ඓB
  L%n+0I[';d՟(27|&zsq&M?ח3|W~@w.=tQ7H $%yc@OȕIb
p~7PXpqũ
Ő$IEx$V14dӐ0vИ\|Kb8}L"H8/5E_PK?r  "  PK  ]W            8   ch/qos/logback/core/joran/action/ImplicitModelData.classRjSA]$&^x׶PH|BBJ|ՂA=hԗ/_<z%kbTPeXBgp$SP}rOʝKЈq10G<7P<5VBs:e4=.r*pQ+{&f!&N5/vXe%eVf!+Z6 b`!.$bL(ޯ)U:f)Zc{Ov;` rw2J'ykRU>'#wCyV[t;vӽx侙TR^N$i%MO5fŐe6y\E93XroZ5BriNo~ w.X"`7(&n,x^A)x^C	eJ	'?!g094#r_PKD	  s  PK  ]W            J   ch/qos/logback/core/joran/action/ImplicitModelDataForComplexProperty.classS]kA=i\֦Ư}dC-!F!!>QZM%easϞ ϰ]E	+!V0<M{3I"yc%+4SFWI^C'J+Ǡ32֚'/T#3SsV1\{}CM1S'7f8k1IaCibm
Uhݑ2Nizu"_0{r-N/ Ѥ슱<OqDT<7E֧2jb虙Md[7I.{0Zjj^]ezJ7Tp֪m#֩8\5WN*yGW~B7	9j5Ӊ|t4p :ݯ58ub.9wPK
0W  
  PK  ]W            3   ch/qos/logback/core/joran/action/ImportAction.classU]OP~16ST@
EED$hB2	fκfvs+zQ?v%xyޏ~N"hzVcj]-sێ4{¶]a{Ma	o!ɖeX
1t۪)qSTg;Iđ:ga n]h򌖷;F>+iXqqFOxk&ځ/NUkL-m#cn>[U`aH6
&w7LAŞ*Ra(10ؚ,Wێ$QY	2CLqa⸭(T0V
5(޹fwqAu
O>XuCkA}(EaZp^ITֹY⎐QuW'Kw`N4@H]ƼW˯B $(1DM?{rCBqH[>Cyk!c"!aʾ
OtA2vэgBpg-0Y@'
&?4N[8D24IdiT,`fKȵ9ÅťJZ9JC. B?)nղGVpכ<$c^oDa\Rϸ)K2H8QX䒀<3l[?PK{m    PK  ]W            4   ch/qos/logback/core/joran/action/IncludeAction.classX	x\ufFo4zlْ,ۘFIdYZ$۱Y4OأyYdfOHBBҒFfNiIm	m6IK&iiR}oF#{$G[yg׎~r2Ax>'ӞpƆ#Nn㤭dUIfV2	rsgdNC?xvԼ!T0MTZ
D#\3ɮtIdB
*SVNf{)%wBM%&P/0os<E+7X"8wnI"jtS1;4/5i͈3J*t7Ѐ3KwRtR0+Qp&Ak?0hX;t|830fgwX-XԳǚVr}KcO
ѐfm+;Y;ZKR&/P	TZ
{ޢS56J7LEʯ&5RV
\`B\$X]
y.Okډh:'a[nzV]jb=6jF푽ŞX4}ͻLl崆&S,Uք yKkMi/Ҧab3:ɗ;17W53ҹB)=]&q%"!+\h>U6у^M7DEMoDB? i	n`m	h{C$Eunbv"z[ŃN5
&V%Xlbz `ҚXA7#F&n%$KJZ#3mbTUɆ	kMXٝx¸8`*Q)E#Cig55.F;`B؋qL\{u]PWLk2&	hXfq~'`78 qa<f)k"=j-&nm)g'2L܁;UϞxMpUbM܅wPxfpSԵ&ޅw+̸t{^S,!k,P2dq7ɥA|ѕ3N.=b=1qcpO7Lܟ=c吉dA|塚a׶Dxx(#$#%iϋ%ow
'3^Zë
;*Z*\83\&V*Gd`)8-@I[$.3@94HcǬ]Ϫ̟RvEK:q3$F ig۷7pD0k%F|2jQ9AI49>oY<Ǡ:. U!KOi&WPwZ$Wp//E3gsX1fBiA;1ڙ2;Eb_ fTpeIW7Y`A,Q2ߘ63Qo[)zmkT&Ԥ6PRM@@&7*`T
m玌vydjfrޔP)a5Ѿ5i3`d)N1%g&~_0m?f70/sB\ZieGՙ=:j{)7e6<o¯:*a4
NZW2w*qx/zvOl)ʥRfO&T=Hv!ޙg)gMAd{XHڐS"d␽/g%2ѱ$utZ[5eZ'InԙRn!V=J5ĔF/i
Yfr]R1WU- :X:4τqX8h[ʐL9[%Gёs^;5`IyK*=]7v

0cw
ҷۆ}y'1gN!r;îrooПϓLZ`RۼCP׾,/{K0r*YE㒹Žf	W3L"+@1]W2xZ)SC6绘M7H.QePw(g3)\X(3c'dq)7<3@kŞD\b*~Հ2~Қ]򇊙u[p勸Gi59ma.ȳ`*OҳoR
J;og>a{r6%eVQX6͎nz>WDRn?Ph8,AKTT.|\jnɆ6({TP4N$n
*deY'G6(/P{FX8a2),ܦw3g9v#2-@
"a;V:kk%dK-y5!5tuIFqq/-tj%c	;svͥJ96X+SSEtZ`<k3h2iuk㴠rkV0Rw1VBRiB;DU;RA~}߭Ea}%YZC~Vl_p/{
Y8%$J9WS|+)E>>cG)ԨEа+$3XUHKk[c`MjQk1{>ui\riǱ2Xe[ѧއ(m
i֣43kc4i܂ao\=}c	/aHhf\IR\\np`۹we߀үm}?{|χء)RP#Et)UobMr	uKe=/|
xlf%8Pd\r+"*4`H	D<.C:By?2#hBE9`^$IVz%MLBeϛ얧q;ޢަ;Dё1Ja1Ʊ7؃6$p&Ih26 
tIGAW.SJ\)[І@k<bv6ai}zqV!<o=6~a =05AddY,5O8Rhm(z,ofϠZ+QmrO`\7EM<F)APr0Tr vsN]XV]U VCG4ʮ6(Kch}Ec#%ϝ߷.4~
H[_xة4>{.C;v⏁#8l!d8\,gPЌq.?@p
>RCE*АҾcet/zn_'r!g1䊐YCwP*Į#xj(q6L,/>O=ʪ)5-DPz5Hk6Lj]ϖ5(jAp
:3S*( .SAU#Sw>y\C	mrPW Pe`@-ǒ 4Yo<@W< S p8ߧ3T}?WPO
Ua	X/y@'y p&C*
^)`ZsL/0}8GHf2x`=ӗWӿ6ߚcA&乼$8eTy-6zZ[R D&L.;< SO'/C9~/'[kFk>n>{V4~KHES8(LfMJڟulQѹ_s3Moxsf~1+E<Y cpzN.	>Iᧆ]:PL^ kXWK=7q{inR=WXǬ?a?'~V .+@]A5Xv2j}3Q[Fm7
itCH@_q,i{RETe.Kn-Z6k",5/W̎_x븀G^rm.ЂqݻdZ~-Ҥn%/m9U7x1pK^7zRݪ|3-[[a,,!meQ. qֲ|N&<]Qrx쫮Mu`neQ9CU"dz<㺷q	pΙ0DEDYzZVYN&YN	Ԗ-ieTbfp*_PӷɈ(&6TV.iqG&oR䀖'rPnPK=\  i$  PK  ]W            0   ch/qos/logback/core/joran/action/NOPAction.classRN#1}
eFbN""@Bjݍ8tlp;(	G!N.
-u; XbqQaK̤Hybc"qhCeCiv#OGOҮ9׍=qF$"k=tܙVh2c*թ/oޕ@;i/t32uĕ)o9tڌMy\#gs2o
2aԯ0Wj9!{^>eݽk-ӳW~7?G/W(Y4#]n܀]ӡJp.aC%{	ApIL8
3Y̅0UAhhiPKI}  R  PK  ]W            4   ch/qos/logback/core/joran/action/NewRuleAction.classVmWG~lXnR54Vm'6;݉b?~Cs<@ɼyssg} сU'ڮyeݮ@k2+ʑ=1$/8bCNi m&Ȟ(+^72``SO>WJ^!CjFݵCa(8!C&T
pbq^.Wzs*^&0Ca|p]
\/>'\lR0Wv)#5
l/[g]LIIg8JAj%K[R
tdu[;!gO C_*\t*B=EBNqVzj9'5q{+2aMbaj}.{S	B(&I
EgOG>;"Y&>9wF`0Ș<gzurYЦ4&0.\ĴK&.cf;!Õ=]\ۨnd@א!U]p<بE{ +-d\:kW<eQsԮ&BrCf.5;))}
FZŗ:.:ɗᡝS**Hv7N7oApL?+xσKe#NYƈ&@JBpAUY
SLY6E¢*i]^-!qSH
tXld(՞if`UW\wO$"|KFoo˰IR7vɺhc~gRyn+U[t1=O#B.=oE M)#T@%SMt	X.'4U=}zf0!^ǗM٤hQ0Lgzd6~\2Ls&>}Mn?5&g8lb&NmߘM<d6b'hc
ͣEC
B7ɒ1jq|yzrq
S#r!	B; OoC0+$J
X !fz%?$s$RK@
_G>
ZzE,n4 >,7A95@Eol!|[D>瘌\\Z-
l|0ڀ#Vj{@W(ISPKtZm  <  PK  ]W            2   ch/qos/logback/core/joran/action/ParamAction.classVWEET *VBEmAZMiٍ>>s<,!9;^ x<.tkA/íRMۭyi,0\;&/Iue,`;k9cOk39'JSbVKK@CB8x!
į[fuؑqO"Z*y\+^+!BśܴS1Wg9\*N6}cK,6suE_`l(^m+1|=H*x:n'&5ɓ=qگer̞6gIK.xk|[m
KV˗ܑ>Cj0Wa0h\Lbp-*<
mq&](S0FUyp-KYB*lUѺJz':<X2cQk:Z
%*)'Y0b;uV'C"d N$=̓㜎Yu;+ODDVxѦd-q{{Z1Ygb?`aw lE
?-RRqܪ̐orULMY0+6,ox1DH?-\TocGumx%h)UVוx}YȪ[_c?83-ja5'Q6,xΛ7j([t(
ב|'zA}kT4v%i"LV-ҳ.O*4lQ{ȝ-n7QYŵݺ0ֱEUC<UK
ʥ8Kk+Ǜҟ1QSZxV&͌>oх9{a|@2}ɮ63S蛉oF&3/0r&9J:KE=f?.<.Ujp=p"t>ă4_GxH#%|L$ct0R/Ǆ8[]].fFb%	ԟ&0F6CF6TȨ"Z#B 	>9N**A__+|PK
;H  

  PK  ]W            <   ch/qos/logback/core/joran/action/PreconditionValidator.classV[sF6#(@SW+IS'6{Ȓ&>:S(7u:=+)
vu~g9Wo3B)2C?]Kv{ؐSx y(z8#1F
&s>g cbL:ؚp%}+%+;]̥0jVv`'vm=0vB!S20i'"^#`0qI
ǭ.٦d^!ꁐ\V9=b(1tK^a(&]Ue8^%2ʚ '3$\mH2(Aިv7쩖fr1d`)0ӛ1WUZ~$¨1`8)~b*(TЧMY5.HU#4%$?5nsoTϙ)w\
Uy{5\1T%]61+FEx"pJ'ӠxMMnng+4i4>J0)#EelM|b`bC:&
R]0/ܺJu.6\w)m6ue T>?e,?tx<ۦrEJތ_]޵Uw+T+%yD#UZ/tTSq;
f+"6eG<%x=ʌj2TE6yibϦx&o}{ ]"L5:BFPs"}H݄BΦ}_2!~n+jT;{~6
z~vtzY"Ҩ1^pmE/+vϠ:鯋$tO!sp덺ҷy\{m5Q-ˎTh=:F&4Q5pݦ1ݕizO_'P?hKi:RMezP)g0їgxgo?a iB]Cc0")Z"C$-7H!z3ҞC_вjuEkffWp/!iiW)멚I'8ba+ Z*xpЇ1&8Im:	/$3XY|##q~UOi״ot
|Zπ#҄J l^ GC\/sT70yAdnRV
xVL$Vi/(FAϦQqO7\*qߍJdUCNy_.$24k?PK(1  p  PK  ]W            5   ch/qos/logback/core/joran/action/PropertyAction.classTrF=(B2|3	PH0-2kiqʒV
Aߡ??ɴxNr t:{gz:AD?f
UY^ШsBa5D5p7]ߕw'
GIWjJE(_àd8߰j2tW1"ď1OቖeaG~P\
XX.
QxC=>#)S!:8jttй<Q&ug4K:CC)-1oP1f2ajyVķyItr{`Ћ~bu%	D3o*<iZ64G6-3j}kI.bj7Np87Mb~jtT~1tLE0(tVHr닥U[O{&ujr%f+C(qdrw\$gkVyZuї"֖\ER
RlɹVz8#jMÝŁ!)T?0MvSlj2Uy;vSÐ%WgL((bfՒ6U
pxogK4n|鉦.y,;`$[q q=cf
%O[y8Om#+mk/:H3pYu8	J_$xH\3#,R	ǨywOsoaQm:O`q15&1Ee̦Ʒʸ7Fw?
)<E)8K|.'5\ح[Ci
Y%*a9ɲ/PK7={  8  PK  ]W            D   ch/qos/logback/core/joran/action/SequenceNumberGeneratorAction.classU[OA=ۖVPh-)QcRI
ަIY7A_ jGٶe[Lan}sf/ <z]AAa7\ϰroӕ8p%wn'^%aosXCw:CrHE1
*SlW+E!	GH2 L 2\Aރ>is cґ0è+Fb[/bCOY;ܮ
t׸asl()g3痔̠{)m^!0AM
~I,5!EVI"1\Ug1>-#:[oШ-pEJsDȞO ^:JLnRk
"(ij:APܳ
Rn1,/#^¶qW˩Zl0f+^i%wMnpiysQ-2t2]Uc.p4ncXa$J$y^-Cc++B2YAX&Cֲz|P
nU⩥\:|J&&p^yS<343gGfO>Ѡij82 bz
Xhn,B}+b'j)m!Fq)}<P8&
767h1УFKM.8)kXVK@%`lwvn~Wc\{ډ	H2\J[}TGX%zlPKJ`E  B  PK  ]W            ;   ch/qos/logback/core/joran/action/SerializeModelAction.classSn@=q^Rj&Eey U"T"/AxܸKű">*@(ݙs~mܪ
9w=6}# Tb?/kt2Rσ]>@<"[큍2a+d䈾
"5U؉yƩggky,br
uA8'"9;Ƅz#eҋaۗRx>N{v+Qըs;R)y\Cwk>a}"URz/p7t2{[<ۍP&="o hї'7*<	Z7`wb:-H#!</9_ӮΨ%TzzJ4;qBU98tU6SNMNTb
< J(	^׹#RE, pWWpu#T[U}Bpֱ>\P0\a ͒dFMsnK@	u'PKz#  z  PK  ]W            9   ch/qos/logback/core/joran/action/ShutdownHookAction.classTn1=N7IJk &-BjR@BT	ޜnY]o· /TQBՄ">؞Y9gc+;X"4H1tw+q_
%Sp~_DjI^MRy'qQ n#-Ji?G80$]_D&q.fSaw;>DoizXˈa-cɰ\C}yjyed0y\$um!̎BЩQ!&^ NSE'O\3v]R]*a
k=gW:-:xCt@?B)2:\蓨_RQ I&ǓVÐǺawjqO8#yzj1rJ}#
|֚uXg|c`桠<YfFsr-@c:HcK4;+'4;&yw"\G"avu
KVPױL}Cޔ#d6J>	gHB#f
eҔ!iDo@}q@_g0<,a,Q7,GPK!o@[  l  PK  ]W            1   ch/qos/logback/core/joran/action/SiftAction.classT[OA.*.܆	ML*1oX8
>C|I$gKKbD윙s;_,Jq1
o
#p/ԒZ\x
XDyX=3<P1Jwyue᫺CEYÇ|iHtvĲoZzuoYte?}e,cP,틶k4P7xHtVLV,bbč\+YV^)N˽h']La!", ئi/ױmH3+g0A
t)aj֤~)j>LBO9'N(յs	d?UQe@<ÿi 810tf0Yk)Қ3oӝGΪA$LՎ`&:^S0{3n
\[ړOƉG3O
hщed>fisDue\!*%
!v̦s}e{ڍ4A;쮓NfwXzs%#pQH`G=Ĝ!Zd\,'|.V>7л5bcX'PKd>p{    PK  ]W            ;   ch/qos/logback/core/joran/action/StatusListenerAction.classUmSF~dINRj0%m8oBqj )ipȒ+=ڙ|h?L@S=U!L=n{O xDb:p2~6+1Lƶs঴=טX,̄{kN$Щ!t[5W\փH
Mv|ؚ2٭gΊ
A:
XzKۼ
Ƭ9yu$#&JQZ517&M\e
Wt|>4v]cFJ߮ԥBr.
L*f~(5Fa$
[]ڎ\SSSAwRqjM1\$ޮ h%KjEYx8[fe;,R5_vWǋ)*	\cX;>\>$FF##yH`J"VDƵ(UUǲVw7S-=rīxz(Z$grgڷqeSpӧPx}ȓwl/Lϵl%$sL*0 D:!ݕwc4E;RKM3m*}	g3OC,Rop&SNF}S۪Q5pI<e }^[r˳3^bɄgT29n*$Yg2݇7I[uWn-]`1tk9"Ȗ<o^Wj"B}hMcHm(p)RzѥX 
O'NW1T 56j14/L
kZi=^b/to$ogKet
>'<;3ײigv2uwp'?7wm5F`x3 A$1D>qY4FH2ٴA#	b$_,9&Ɛy/BKLݧ;u(B
8}8}8}8NJ#|Ec(V鿌'KwXHPK6  i	  PK  ]W            6   ch/qos/logback/core/joran/action/TimestampAction.classUR#E:wv# aU.!.*5!&*,3iNfC+X/U>૨IMvղ?sN>}?~ۨ@00"CnGzB?u=ܔۼ-ܺٴKgf1,moqz$.ơ!ńI\cq~޴6?RzV#E!p;S<g\+d46Uq$BS1pkl	%<.ul3-y0=*'1R>Û}62]iB1QeO\-yuU
sg9!0^Rq)G}ayހ(^cȌTW*X@P-2V-qTY
+v1-Su%)υ'S(k]êFmmvw5ɮĞe'_5NժQ.Vj0$DCN'ec(1*MɢRY^l&g)ɇ5Z^.Jq۪yt4P향Wq&Pm[\y?)0ELMe
°0PUT1;}k E%<1г"Q倷GQy-Zǲ녎G$e<gc!Đ}ӓobR7TO(Ic'@>ѸgxǗI~w@ }u3`&F|<6iպ}Cxd}3t/Sq+h䋗H|(\M!38$e,nقeҬЉ*Yqusp<}("kE٣0Ŝ>}EYN";
(9Z ѯ)@OX1nR}SĒ%Lx҂dϐf-*"wO.'ȍ|#B𡟡'PKV    PK  ]W            5   ch/qos/logback/core/joran/conditional/Condition.class=10C4qX#@be`c
QIp(D2ɲ<_ v+TWеoC4܇(>d+L	^Fa'c
aޜ	S6reZr
EfAe|PKl      PK  ]W            6   ch/qos/logback/core/joran/conditional/ElseAction.classkkAi^m_&eTDQ
BiM6C:qSg71O?(f]#X4}~+{9a8Fnz;567^tP>u{*P#B	0A]MU."mr g}dx_A]unVYNIM zJW̮	\i|32*h+4xPtZDv$rj͍\gYnKV{']La!Afxe0
?)N3+̓:`@>ojҼ5N*~Ueɡ(z<]L8G3BfzAUr*~X@4bđF%m#Z[1d4w-:>Y&pk 'm7uxM9qf+=.4}o~hӎh)}8,n/ pfp1R}dJK{Ȯ:y3Wv<']b ӄ;	خ.Oj7\cd:nX=Y}\LX@zn_E)szn"Ha9& PK	qvu  5  PK  ]W            4   ch/qos/logback/core/joran/conditional/IfAction.classU]OA=n[([BU*LbҤZ/feqm'Q?xg["KM42wgsνwf <j>CPTd/kofX/֊-Ƌn:VIk!?9a lQ̒.'yn%Xv!Y/ꡮ-
g-EӫI%}yc.L'C!-.[sfYvl,]CbjJ&a7^6]cnUD1*Sz!;y^T:U0%)b*p(6f78C"~a߃+HpU51y,		ό-I*n&ZNTC!0|e6_r3/r:<)%nZ /BF[En乭ykQquJjCNѺ΁it! 01GiE:ҟ^BM7Jm&2oi^W	^$jP<.a]Oty"giN8Tz8nam?}ӓM$hd1geƠ4j3% VpdGOڙM{Y+#\zW0
)AAc>	oA/
.(ju(6BO,)&N0se%Qq%8x\`P)i6@FX
yiI`%$h	 bF3rPKq  !  PK  ]W            E   ch/qos/logback/core/joran/conditional/PropertyEvalScriptBuilder.classWkWG~qAEFEMB Ek-BQ@ Hmk'1Y
?Ӟ~;llrؙ>e2<	
b|4!L;4Wi]#%g:0Cfh /	a<_䉢鉳MB6b 6+x[N31oZܠ4̂\OVpÖUsd_٪ m!T.UHfH6lk@;a(#rh'湡fbD=lf\Ǌ1 $;%#Y.DcYKu*؃;m$]џIúUa3G.1/~jg-^ɘiy<҃
<]rC[ vం#0<>nr7`ZU4SЅ8%SS^Fseyc؜2uat,yRB*Xu3䨂c1+x'vhܙ՜lm\Vg#+%>'WMsA`Z<^odVha0l'Dg݁UT)UKK\Յ$*F)V1	e
 ^aDq=RR8R冧ʏR&kK<Cᒖ켪R	:7Fͪ
f0P6Itm6.Jk\V:ޠ2_O9uYX4H-;rx`556M]p#,%"%e[oC)-kpZ%ǫ@#)?HyyB^+;LiaM.d-v>-M./FE9TS'iSZNF`W7k]D&O#$ի5H寭OpJ*-'֮3G57
ˤk &C]REA^E%u]d>ҩeE	REj$/ǂw'25{Ye]aj(&TQy[ }pvV(
Gte2IUMs++V(^9SfRŘ&ݻnHԁMӡC_P1ƶ4 7|+O:W}:H9m˦L[e,72;p*|U	l^UV1u=9BkҠ&PC3d(~#(4*	k+4 >7!COA+鷔o==F`!6>@0 "W"z&ePDV{AsMF}@h#'?cH;WxC%Du<P&}$PiΔ0:NCMԜ%Llh9_wեMH]Z'=Eb(Tq?A]ށNS)`	y>L(~){
1؆CdIF!Z$u7@i|ɒ#4ϦЛz>ze8KR}S|Fc!c?tPK$F  3
  PK  ]W            E   ch/qos/logback/core/joran/conditional/PropertyWrapperForScripts.classT]OP~ξps+1~C]W8P{jwF4x&/57{:F&6۞}8W 7a!!a 趵kֶcKmqy!^ldFFn`]{|%:+-1m8,LoK.<5wi`diܗ+le5Au|^KJİ@#鼖:. !o"
sк溯D=t\e#;]mqT^:sVNX%1+ci@t`H,MaA4kݗ-'xb\kZoXWǄԇK#OI4ui
Om8調6%Z~X
?@ϙ!;DI4%zStY᪂gdQ!aӦn:5PHLQzLzR~\<&i5z4Tgp5
~α"UA[8t=RP?}
<'o_U	~]xD=mC*=Ls
Y=)iJ<f:Y1{Q(hS%;ϴuEh_ᥪ(hE%d(<xI^n|>n~c&5Ʊ,}b?̱,`Sj]PKV$    PK  ]W            6   ch/qos/logback/core/joran/conditional/ThenAction.classkkAi^mߪIo"*
T-d3$S7uv~`Li5m<_ c,a50~ب	B-nE0E$u=CXfqo!/ ̦*|Uq"o|dxWA= xвՓ2ёA=-caB+:"hXQ-Gb:cKUcnf;=rG(aX`hл
$*lJwaiؖ)ÄϷ2cڔun`EyXQgVM-Qdz¯
>9t⦢w=Ӆ<"Tu!,c%LD˦'$$5ܯ,1ui1Lʯ&z!3*M!6/í~7	ړOi6[1qKg~0󭣱@;N3yxa#-p{84 y\rDq4^X\ZGn)84}"]Nfu|2o0OwGu yE51 5yKG}=sDj˖PK:ύv  5  PK  ]W            /   ch/qos/logback/core/joran/event/BodyEvent.classURA=@6
A("(h.]D%P!ӐLN(?K|٬tyHtw OBq-&Z`ȖҷY],=aHJ`Q+9۵<ZpjgKYWj(\Io6ن$Ld/Y9SjQD׿R@@+b}=ГEy'cWU6(N 4g,0dຉa`0hbm%V㨉+C8fbk|WKTomM|hpVV"j5]aR aGFz^A'H(g{>mSEK']RY$䟉'x.

-"g^W4TIyedk&v "
-+~O&,rl%A$<y0Rihݗ"̠1%^f2|<clD\nXQݽśwq."ϘַvDYtHQS^/|/%ዡ4o1zG@Z}Z'iIvc__`|"K FffFML/}aZ#}g `,	
,C{M%m"9?F71}Uڦ@a8-YL"ΐ |Ce;Jqws=ISA4U_G8>CWYggX
XPK  \  PK  ]W            .   ch/qos/logback/core/joran/event/EndEvent.classSNA=CK]|
VmM*F8Nڥۙ%&>&F#?| xgv{gsB@0RyiTƝ(_{BvnhzJ7|n{\6j軲>PD
?+;&0-@ц"|ۂa2_8?0C/YbS}u`&-LaaaV\)횠DPօW,,Ke'ϯZ56o6	!a@;gg?ɒn"yͣȸp`2lԿXR`I3pGW}h/xM*3Uj
'Wu#JAk6U=Hc>_.w˳B.˖l
&l3p_aT+TKDžnr>糎W\=,Tju;
:}LMmO8z|
oYJ<"0aq _L;qNOMDxV25б;#(fR[Q'@}4Z$4;k$Mۤ(~O\c_OEܹhf'XiMSn%<2RO1PKrnx    PK  ]W            .   ch/qos/logback/core/joran/event/SaxEvent.classR]o0=nf-n|2`i!^H"ģ6%M4; QMB\](9ko? <SFy8<ᐿ0<gP2Qp
I4A4#Xq3&//U`b"gSwoJ$ʽnA$
[h(p($31#Le<.(>L2bhufn0fd3˞dg0^D$CC;d|$T?)h$#W=sl
e^$Æݽlt[JFțer?:=WV+j1gCQ]ݲLw@sA7pOPH9s0TGԜh6α@rMz4(]S&ڸC_v,ҪHb:Rr:R:RڿYWT>)\.LXH0qkU)~Y\g2ŵU1ۚ
PK"%  ,  PK  ]W            6   ch/qos/logback/core/joran/event/SaxEventRecorder.classYxSy~[ŁqƲ- @&`LC1!1I K[ۭMքknKSaukfkvmil][[uK۽eY3/~/g ܨQXݝsb<K
v\q(\Ɯ|:֗G{rGBE	
uٴ]uBc
릧h$؀5'C6RvAa_k:ڬkUb4נ@\a8669XlewMe삁V3u:v森-2KLG-
C2mIPKULKqkep]vҥ:!dmJ+Mj9"AWXRx6_trBa
ZEֵ
K[=q9[nχ&AUchm;
ZPLzyCt&E:hqk51}8g۽
!܀6̰3U9$pl`ω%exDB!Wb`"F;"DsBDvLӍh}ro-sH!wZ7E.!2Ы>Q}
7,H~H*,tFl
SOsE's:RK1Ng;q˸c5krtbBWSO$da+3Z]F 7I;|.u#I+2q"C6Z;BUQ症M*ƩR)mnM1mtsӴl>	;I~fOu7w*ulI,Giu]1!) ?n[n`;1f	2v.M
ݴ'Dڻ
(B"gŊX6La6q2䭤3fLJSIr
W*[e<.,wVv>Bz$$ˏx,9NH'#%KN;YLd)q
^$I>̕򓒫&N│%-W}єN?G+
akXte0WN	ŷx+~^3p`wW~qT
R=/JEG0NK!UgDNtrk\}d+^j\Bn>Pl6j2Saɡk;U=2
ćxN-JX1TXd8jì*p/yZ^2 Lf96y9h[3iVgQ-.Sgv6%H>naq9ig@Rllinaģ$;GV{)8d9K߸&yj+z娬\0qQ=L<e2~D1K|핆14d5xn)_3?PU"x
gM Am>sMЉ{yK[vqt./+Lq4뭅dK2v:!AܖvGJ\F4I+r-_3bz7筇R5xI6~r۬BV<+♲2;wٸ*Fё˻z]c.ɥa}HFߐ?e,ۙ9&~zu`dCWX=~)6԰ow'
>JUeX'.k4vO1nEˌ$3٦][{zKLD5i{;khNLWp{t|j;	G
Mv"31{:VaQܩ&	F?NיM*iBXWeLuu>IUЗN({dÝLMͿ^nnahf'[i-q+yktdi+e6>q!{fVK9.eF
#&/0SH=:j.uQ+[+g57WIt-dQ8~UH50PxBט!C^xNK.LlaI3s`H.ԫ̓l<@HG _nDElMܶUz/T?w;T?k{ԩ]!էv^j3ʤ_'s'l=,WdFO	gu";QyS>l?VD]Ɍf<>؎)TCWnWo3V@>*h,b,ڏ8N!_}<Yܶe^@Gϐ^\cMRo4x?!)!9'G!]|R]p9\:dyǊI>yH0ha3QxJ<W<e$`>ڱ]ƚnmuQi)~%IHa'	##6Q6<ǶG2vwu\g9W/#1R ^^=\pllG;s'b!ܽn2A{ Q=RTbUVs.6ۤUOXuj
1p-{
3(SF|qM->=.W(YQjd(㴎~q)~Gq!~_Cq
c$:=*psX.MTg.0ފNTQ:1~]X;;yMtS[1D$KE5c/b
-Pas[Ks\@+ )Ejdr?TQX&NOhY`L*l{''Ejx;wڢVTge1UW2sZÚG&6-jj@Ѩ)ѨQK(դ}{hc]8|&[!_8Ux`S])}%$O3of}FWBգG-6QGztZNEV04봝iWl^Jg|}%qF\}]7Mq~,l
>]uMuMt6|=1NHHSg x;%|hŻUa
~/]&]4RzINj;Wr'pZRQ6@]jjCPKk'RZO/K[f~<2{uT.!
k檨Xb"^E#y@z i*''sޯqv26K5xO+AJ!f3W毭>
QB]ub[Y^{:Jy~v.̏Ń2a>ltK^kLz:Hȷdn'>/`=(zw~zyBciNi%HFij5<"PT17Xs}'OOqL|ZQ'	Qch§\Ӭ֩e}f3r}\?MOz~\o(q.(uq$;OT%Vd%|3zYԟK<SFDAmO.A!MJzϓg8T(( ǯL*	@_
W7>O
/wi~ ݤ6k/O+W}*r<XI﫤Y=|ߧ/,8zYmQ_*L~PC*J`oUtQ7-~9+R],ԥGjoϛskPJU	ՏPK6  #  PK  ]W            0   ch/qos/logback/core/joran/event/StartEvent.classTmsU~n6MKSڒb(l)kQCE(EԊ7NM7?q8Wv*3~a$g|9g7J?޳g}s~pk)DUSGB@n۰FMu3'üo:,7HW`IܕaKa,4Jz
cimiTܺ]*H
n-k|Xfl)(H1aCz7}xE(B_z~WcJ>G88(gSq æm6i5-XL
LX^3$2ݣ0C>+0ާjXV*rɆ__MSh3*5lLgM`W`ioM<
k%0DT*D|S9@V[xyCqP&5k>8%gTF.DU3Lmn9Vp	=\PpQk#9ZiLe.,g2BĊ2!-vXI\;kA}7NC?]a
/kԧ^=nʚMtŪ,:cER|jf¡Yhdݼu{hٽo+iNnC&C%j{We+)vy⏑c#4{#KQMhu [ZL,؆(<oc1Ԃezw)$]Yp<WBB,N&kTJV4>!+XL.XtN=iA+c?B}D"p
a@7
74d`b5}pS-Ya_ϲǜ?}Eg_v"Izu=CY2"TO_Zr9+sK.9Q9CS*ҍ4Kzt*qq8MW8op&P#,;,(n
RY7'_-b/PKXՅ    PK  ]W            4   ch/qos/logback/core/joran/event/stax/BodyEvent.classTNQ=B"UAm4M&B0_.lPƹRfs9sfvs<K!HUjX<im+Oܕo5|g^Kk˄li[
<Z<{^8OURe]mt!.)0ϛyEUWɴ\Z45#l~pcIW%@@
T8db#N=1ݸQc&.c9I%ەM\QOԱi/(YsCD?t_6mJFTE2auHzlWm|'Iz]`m
׍N*Rk媭t4oE)&ꯤ_UF	1$r9-xr4KD,x{0uvwՎĄ*ʾ	ʍaƗ­81URjYo3]e#7۲ψ g%,
h4dcxB?,%/>luLq 3O?@o0:{Ìnj"#XG>oי
s880ELSi{9@pL_*؞`PoQ1n2i<XOdqpBPNpo;XPK:[    PK  ]W            3   ch/qos/logback/core/joran/event/stax/EndEvent.classS]OA=bbEXkl 4 ôK3;%O<Qƻ	nvΝsϹs2/ Xb)6!MXnvO:p<nfij_:{ʑR'0a-ү]7R}O UJ9t{Rn
jU)dQ؄+)V"l=I(K0u92^JQq[M(\$xUrkH*ka6U{*F)ӸG쉮j\\wL@(
V9pUx&EL>lΓPFE1:	-r
N"[
;(Iѭ y<A\,"}̥-8W+S]WLcEhq	0`u_(>ڗgR{i*Uy[]SJUO,<']U/	3C`<>7ՐF<f#xwQØaDcf$EsuFkߙ~!&	L/v&ұD'	Je<:$<B/PK3 Y    PK  ]W            5   ch/qos/logback/core/joran/event/stax/StartEvent.classVSUnIXKiBK1	m-* (P*Zڪp%tw>⌥Cq|s7Oz$`awϞ{9Ώ~3|1)b:=ͰVxzCK[-9.6-_tSwo2\ͮM\#[7גfK<Ziꖙ/EЀFMPZ#n:ryb¥p+yW8Z6w-5R*Z$%0t8ل(N*8
턠2μ"uN%@[KpꎛTpm-W"X*$Q80Pbox"V`	o  "q1*C[2@|YRqC^}44UaiM<+N>HtNvG.'#k
FT\(C硖*f,PsdI)WqS܀*Z<sÑ:*S8b
&]Ten|vE^ѤYsroOYF>kQ*p=7Ĕe{!rҍT>5yZVcg,MaC2'jAu?e"uwAWK{X|ʪC&)̫h5N: >*f"01sǪ"IwǩK'5v&'LPeP֚himTx
d]1ɸGWdi1K[e|Q!&-%G<7'܌41l.== {R.
6xܴ6Dp&4%uS~[\57kYܡXQvKU>H.a,Sj4=ep/.UWg6o^\!-/m$ 0CE`gXbhJb9 mBt?g'(=\w#<IF`(}$C|Bk>O p)?W$~B~_зcxC#.~t#FԄw_ ?e%=x#]mRJwT4`ɣY*XpA;7_GF )
)aan0>OC{İ+ᡝg`;tD{\#o$ ))_<P=dO	\ǆ^}֚jKfG$16y."{f^b(c `	
fӕEHƗ PKNO=  s  PK  ]W            4   ch/qos/logback/core/joran/event/stax/StaxEvent.classQMO1}kEEz4ԛ
0$4xB04Йt{3Ϸw $B@$(bǯ}i3۵spI d)=z]a=p%{pK7@Lx̥2D\1[k*l9g\!2_7M2Z:i5t#ʜmu'#=$RkFO-=lZ[!EbʼImo[V]eB
]B^텢Ha:QƣV-|
V?¨OyuDȖn!mdQF236	H0)%d8yxZtrO9!#OJpYW~PKz    PK  ]W            <   ch/qos/logback/core/joran/event/stax/StaxEventRecorder.classX_^X\F4F4<w5Qcx%v'03
4i>3M5}-+V16W>ΰ?0s=s^pF
5tX.6=gф=6jFccFݔ9u\0pM6+iy
5l8c7iJD;ǘ\/
kP
]ZP&?3c$y3E]Ϙ-?O\75jZXߛ&GZ5/ZN0`xaۨ6l(KأFb޼kJlDL.`~8J6w%DpLc"z'J{g;SIBOaJDM]}j2wF`cK<K *ZvT*M/TkuB@ҧUd4ܙko{2f<NjhhZ[F%E)qX55WXZ4c촛v̔xftq#a4b=
AhFrPY낑qǾ`AnհO~#p*a
_e
+WGZIːhl-E;jOё+coah*e*z$]:[̈Yd.uCt)xԱ:
h:_Q9Sʙd\	It:]lnW2 qBà!<#D~cJrM13z\N3O┆NeWqcFbXqE	$[C:ƻX6ˆs[<\C(b̉x:b,_fjͿAiH4x-1c$N=4J5k(H`a%4#Gg\i.vk˲h<ig.[X%=cƘeN£p.PBfש^1kEsm1H^Bv|*q<:>$3{NUs0.)i\lRf2.}Td-噃<dJKO
^.T;>3leR똟O`fWk,`f;3$:$OV);%+:*âYnDʛc_!zԔ-LS!iSkiv4grcK^a/\rj{v{TˎSWY43$7B

ǒ`:ޢ# isUՊ*fܼfX%o_" gguK/\[je-Ϝol
Ψpl~CX{X-%`@m~4	1%iQnfؓ7@D5J#tBy&fNDi>K 6͕L-dw,w)=7hyؒ	閂H/S'N|p[(TknB4A57zV~Mi>(
"Jji/CuxA)]~HK?uI(YȿU/b+5okhi͡q&\M-(泉7s|7g"(GW=tՖеr&^TTeܩ,^9k(P_#F~/k:W3^eQ0V7䍝gqe@_,|fxo`Vs({Q8?*`
eDZYYB'zЅ^1_Prm^k*>)#7qvML)G?s\&9Bd>A%܆<(-9G*C\o8#HQEEh
p2fx{9xYbhylH3Qؘʃ9~A;da-~_y	32Oi{_˸U\l	U$'!a|D
jpqğ%OPV|ѿ='kEtY !0|d7xuS
F/3Od0o;b9إq
Kf? G?S99<3"^h,Fl(0tdac3-bo$R$$mFQy}"Q,,+H\&жP|(f{`(&mlFmSYе"mޔ	PKJp    PK  ]W            2   ch/qos/logback/core/joran/node/ComponentNode.classP=O0}צI	
lP=2X*1Ee(+upmp\C ?
$pO޽}|\bca)lgխ^+
axz0&\
{Ӷxd:Za>H'kcy׭#̪AP"$hVn[Kwk-{\S=Qa^爰%_ٝV(  (Qȁ5$(8
X|04uPKT   n  PK  ]W            J   ch/qos/logback/core/joran/sanity/AppenderWithinAppenderSanityChecker.classWsW,{me8-NM%;:MHdBn
b"PҕzW]'5P
U(7m~/a	?u`]X3<s9w?8$CF4	3뮟)Y]Oep@ߔ }%g9Vp^!0,皼!eg=O.X~x9H](QJ;
2цk]s=d}IVX,
**O@Iʐm;T_*/T`z$ۖtvYuDy顬\fB[^X֕W~J{kl؁8h#xT`cF<%Mvp%pX (WNtxyXT*@pQxxlفeO m cd݀k۪O}xn+'L +`m'[dք5na<i)RUM06qg
/^.\9?V F&N&!GT"=G`_z3efBx@E%
ؿ>&.jIqFyVM;dY<r!7]xn΍Ik0FL"/X<d-c\.ᲉZU0b9*??7Sk]&h]M*N)	ML&윜UL=}8nx8S+(	|qUKR`W*\-_(P&ʘh@Z/ڪ2#>"ʤN5

j:kWu%n}~-dy/S'{zܥdUbH9nT@Oo(@pVC6.ls-J{Bz^W7QDcS֘xE=DT_aW3\%<VW<\(e6!#N=Q9UVTݿ86*x3u	
^׻cZx:*+UZE uj)ea-J3̷'њ$L{,Qp罢umdytu61YU[چ>R]ʷL|f|W̲R4GDj@J	Ouaඉ7#J-;#!<4Mn;֮*Ss)qJns}arkr('~{X6QGGmih7}/Ȍ-\b#v六P~ɇL5k>ж&eێPkG⫷s~Uл]oA$m
7GQ`7"fa!oo#~0-]Ez\D2b	y=R1ǖp<8p._om
-N-zO\c{G'lPa\SW{釣}| U8MG~F݁c!Ad0n	WkD} 仉9U l$Oӄ/q@gqL.RFD[+Hx;x`u/j^*hHOƆz"6%YCš0RO=xP#95|*vK<mЪV?JܝKۙ0P;ZbV,PBޮpͼ	#~5VEyv,Ծ?_Ѵ7>ԈXЌd"p^"*1uF!is?/+A PKo"  
  PK  ]W            +   ch/qos/logback/core/joran/sanity/Pair.classRNAὸu0h"	'&K`o@L<~E\dJwu|}|aD#/ᷭrԠ-R0HXpbwi	ۮ'y}AY#~'WOZ_V\1r	_ڮf0,q`I*ۨȞad]mJԕ#o-5D/u-M)Oؠ|/45W=*$*4MT%)`uR
cUCr-kJwb::
wY7О^V?}5^;Sz+,FTdsM5褱Byb4lbF`sQ;,*GQA[3}PKOBw    PK  ]W            4   ch/qos/logback/core/joran/sanity/SanityChecker.classV[WWNH2FxEE
0PbbXHo'LfJ_RVW?9cDWW}>%|C
*"2t\MYb7c{>uP2ab~f~:GALEбOT}Ҳ3tb1ا[EN%i\;aiA]6\ WFOr0YoF= 1trqz7q)H8#o+RޜHaᘊ8IRpZ 0lڊr[mkZN~JjվaTMxŲpUkp|dAȶ 23Wp+ׄpg1"!INMٴhtG6j9P1xIQ!*mLh=Xںo:6^l_
.xo;xKy^rk\/1'w8CFD6p+pS8|LKnqӍaWD®2*ns9)2ě" a`,m.! SDRȚ1W-/Xӓutnkum'[%~ɤ=BmI*[
adP9o~9h3ݧkWbΉMM&ڒڛlWjeUot\y?ڪc՜Fޣ7֖VN-]ahDQ"Ȥ*L{Ybd{9-l\a]h;2PߡxPݗom+ubj-T]ݘ6egsFwJ:O	~)zq0Xb8(0p&(*bおtZy1*x3<b8Bi?tV
-+='[|41tW4	v2V+t2;	
4^00)nY9^6\y'O4JM%`!$ ~0Y&D0<1PBGKu=DxqTPG~Hjh8YGR
?,՝#c27I#\{1{Dad1+9̓sAA&N.V1}NBpv)s]m5MD$Dt:.
!`#}T@h¼Ny_sXP5k,!YC$$D^㮄})!
:%P7j@xLR1O>tw&❠"Hf^Tdt
a0I
C'Ԕ&Qe4kZSWX,$6:$u,TL®QQkRs|PK"!@X    PK  ]W            3   ch/qos/logback/core/joran/spi/ActionException.classK/CAOzU0""!
^v0_˪C3MHsw~sr
.H E42(/8~}M@@Gzu8<G(վ."^tD0lY$b(a&i6w+<c1V"sd4TVKlCU*ZW!U5׊0RӁ:o5t5Ge*j jjr6.9kLT_WA_ԉvCۮK`W	䜿p$%F|Y0	
]=llv7,0&TibW7WߵYӹ'PK}    PK  ]W            :   ch/qos/logback/core/joran/spi/CAI_WithLocatorSupport.classUQSWNlHTm),XjX%R3!>\ٻ tȃS鹛-Mfnν{|瞳'uxTY1!u_Ug[ݶ[WJD
}]/=²BjsOA}'ۺ:DF0ܑqu0̝v`nfSy-q@10s6J8O|ZE:awcq60fc	
u_1-ѕJl:".c¤+00M/[}ΙkkUuAߣp+%(S=.[fesZN·n0ʀXpg|xa$iza"Mh}+s=muE(I3p@z|E>,;*WWKzf2w"?#=)4BKrnpR:֑7U;qwNkIַjk[~([X7P#LԾLo
;9"qϤ`Dx~/>9
eq.|iٍ QJ
ٮ<θY[cA5V9B-aW3@<WTxE,%4\`c2{ҾNiWbsWlV~d.T׫cƛl2,HbjPyZ-Yuh#Y+<VX"fdY|^	B⑕wI/8]N5<Hr'?aoPKه  m  PK  ]W            :   ch/qos/logback/core/joran/spi/ConfigurationWatchList.classVYsVn[#c4Le	8IIj !a)Ŗ%Hr t/P^`$,3>txu+K2<#ޫ{ss~3.|G
<jExcgsWgtC%5Kn^O2e_)V'>.aô4/ŋ{
CZH) O= 
X'Mr2VrSEC]bXSTjHUw^DiSC!Iflaf%E;w6 iySnx9\$
؆l'q9oF%{)Ęn>u87-bR]
kLFWvQTŰ5P%-&~t`NgAhZ8~ADFW)T3ky伤) <ܞZئuT1$jMl"zpylW{Eq*sg~c@Wp;m薞UjQPUW)13X.%>ψ8
a69"&p.~9geaOx55]%q2/+@KE^m~*B4J32YF&kF%iŗRА)J^AV\r	P[RTҔR4TqvR6ƤI.`JHd(|.ZSp8<yO5$sx"oVtv!-\ORZhvs<U BKͰ'Hnp,{Uk13E5e$EFhE5BwDGelvY[eHlMY
.3VHυm?>'>rA٥(xPX}u#'%-f[JgpXҳ;΅HJ:X␦FVS6|ɰQ5J狳;}k=t+G/\04AU<4>OJ,["K`'.,amMj w`fctgB[S|ڐF~4/a+*M4W^u؅ nv!F$inv=##0pY^^D)%*
>OAS$CzHtv-*	8BG7|0g[FzZrxrt)vpG`G[D!^r*ޝuS*S{	'(q6YfGjI씲?GD0*eP@O^}\E̻Xq{x.*Uً'-Ӯ);p*1HUa.voD~R>(Cpgx#tX}|Giwgxkުa?n\ioVb?}<$prI'xlěd*xޅߡ5G/yD:M_nD]ĨJtpT~%\>kqX$B<W*VPod+6K{O~Mr]s;/APK ^    PK  ]W            3   ch/qos/logback/core/joran/spi/ConsoleTarget$1.class]OAiv]"
J?+$1M
2mҋxGLW>*^0̜}=ϙ_[2Ț0lg9u?/$$q+{Ɛ~![(h²q6äN	ܰ紾Ș=+{aڶp&&m5ܧȏ9QnT*cFKP>)2`H]l̫SA"&6AH'w<qTDnȁPQǫTqWPቦã#2Wߩh}_28Uf`
kOkqx9QpH"ή@@H?/NL8lpeVH
Fh7p@Fy0<ȡ)+,јȀX7@.f-|9?|K0#_P
Vb槚[[bzFs)M(88yElhru<'[)YE{FGUWcN=O֤jC/IƭKl.`j:g:ϴRlaWuPK.a-    PK  ]W            3   ch/qos/logback/core/joran/spi/ConsoleTarget$2.class]o0_iӆƶ6>0i4P*
Sovfn%IYpQ$.(ıQ,>y؎SYH!m°AapOa<ƭ8Cx&CXjCބeli;AD {Z!C.􂄵a
LL۸s<O(UƜh_+ה`H\7l,Sd0XfXu/{}]
~(C'uD{NU*<3<p4m'w"qߋxBU6XzAS=^aHReK/HZrⵧwv_U:V2[	P6r;"eD}'DXWZF,nRifJ)JA
hjq {lܥ7@.f}8|K`f̏}	CEB4?9ܗ/w!I3EqG$אG]c1J**S:*S>SsRm=Zp}2n`3)u3P9*RaWuPK4-    PK  ]W            1   ch/qos/logback/core/joran/spi/ConsoleTarget.classT]SV=גp!BG@&[AaDD$93yt'ڗ&	2乿#?Oi^b;S#={v揗 cMA!_xxu^|K|Ճ][_sUӯ[a8zƣ vV!DGIhH,>מҠA.-v)N#9k1fm;[WַCbء$NZdɴx/:fZFn>9
`G`3*ⴼ<.Cդۃk 2Nz0`RE3 3Ud4dgmCLU%
$ -xjڞN
/$O`Amv|k
ti1Hl1)vU	̾M}.V1Ղ[aEoh/ٮUi[fS#>^tos8U-oOIqQELRO(zbQ쀟Na'UCE%UM^Hd`D3|hrDNpbDxY튬b7k5ͫM>ɱiU ,[MĄ캖/ξOQiG2H&DT!P s|{~	o.䗺9^11ܦg6FgJk4˽+0n;fZ*S!)~?#f1NFJsRqlWǦo#={gD~~&`C³)H
)!/E!L)?Js ARA?cFX|Gs}|xF)ϐrTdZ ~Mh1// ~ 49м$DI+1:I_<G$$Q<T{sy99g7TeO5i&A1g*"7pr@^i]J_>>SHB{CN0GڛBSO3DUJ=cw/1׼_PKGJ
    PK  ]W            0   ch/qos/logback/core/joran/spi/DefaultClass.classJ1ƿT۵_kECу"VZ+SkjliVaof~2$_ N 'P^KqqOE2r	ɾKP+zVFiEr_4ƲSf]ekgŏȏHzxԜSSbWV,ab/qV?guYѵ6LU~ov<;z@:=CS;NAјp޶*3y004`p<$
FxӾ	,p{?u%\PXraӀ2*A@PKŃ1%    PK  ]W            B   ch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry.classV]Se~|KR mM	bm(kHkA%&a7&:\O-S;xUg)>f<9+9l? z";35USJVz2[xB%ۨeԚڬ0BJ
.@TM}m6S5J̆1jԊTmլִrܭfXO޴{ˎECl.%%pR+f6
aXۈrZM`0R&9*065iPKFqìk
kolm״0j1EVC7*3Y	Nt#5!0?ocEMR1;p)g{%ѽ$C%Lb*tQ0ReU4Z˫T+ԅu.TMkU7JF*lyhkS[x@_Aj_oLM 	\L/m+<Y#Z56T"s&,
]ŀUՙdp1[e1REKU+"ϝ]&2N_=_H'TU]&5
+pԦ֝	,yWdޮIx%\?_kH1>YxaJ
q|O8:"!CQf`Q6H4DϙLYtV5##:!>~O۳8h3\Y#`l b%B[ac+XLq>nMz?!<.I= 3ŸzqwCQ#
>d|_bdkj9p}! !Gx׏M	9%F'p|z׉Ʊ$X'68rOQ|#{|}޵ȑU3Wo)}
ӿ#(>7G&	6qߥ6ј[6<!=hB|6)[se+17Bs#Ip}R+Sq/?C^ܣ\&yrO4k<'i!G2ɻ8Ism]{G
;5"$n9yxF4GivC^6C- a\K|.{<籋z.0{:Vyx9ڴG_PK  `
  PK  ]W            /   ch/qos/logback/core/joran/spi/ElementPath.classV]sU~NmHIi6IK`UR+-nӵv

R?^fog42KeInΞy9{v ܋bhBHCXGQ%㜑Bfzn{a`y#䌆f6T,;su՜UbjA
:nFd~1s)elga/gkf(dJE+s6ŴwI \LIGmdmξ1Ƕr
fL[pNwkk"m1kUg6yzDܦc;vm${Z3.	؉]|&A
If1=:z%Jd=oʉ\`JƓ1c/2̳eWrc	
D1}tDa
ܜ1dѮYY%CbOʸ  14tx*U=vP!	u眩aL`K=ѲeϛnM
Gt<,$3]s\d
q>ѐ1)I$և٢Q2{2vZ1<}*pB`s_U8r;-<cHE2h)_ND:I$ϹQk:Xc6oh9a-rg:kx=Hjǜy.٘
Tyet+
{p-OE$g2RM!Nk3od]{II
[@r`ݿ,"U(/568BعܣQT4к2ᙲbHQdUq^Z~R</g)N?{,8k߁=&oU=r P)4sDe%yॲA-A v)y%wF^=,&/ukpԄ9>	R=*5u"u+h/UZ}"v|ҫk,T--v᥾B,]A)!n%!; >YXb I+@5NH
:&j໡ph(ihgb+ݳ"ܤ=H@ҧB7O2؁(hC؇Q=!eb>	qsDIg{N&
qo&)w!N8I:"Nɻs鯪Kӗ %p>fƜuU&'?HRܙP=slO{jх05|)t/Ubc؀#4(nv氛Т|یr|+ɦ&=TMvNED	܇9D=xq!elq'6ؿ	qjԇi*R`]TI$UrGM7L(7
_=SY[-{3(QoT^onl,`[_T>AOx]{
[깙5hz+%y2+Z-9Hxkj1ZkgT;H9dvI:JLduTErK*)\*l?]}mQFK٫e>|7}n}*8^cO6ۧn*P".}G+,W]gއ>xЪaTOT3zxFg$x|>PKaN<  F
  PK  ]W            3   ch/qos/logback/core/joran/spi/ElementSelector.classV]oU~n?n[PB?[(n)NCw`[fHI4JDD\!K5ƿ7"sn9g<3> 0*7 --tJ6czr<g)3~2&3;i1>os˨S&llN\үiǴ	3t+zP \\D<ffhQ:ruC@lLؒe-AbLL;ز2L[G@qeZLgf m.Z*ϖ3Fca@ٔn;rf-߶EH˪'Y,S4)صK;ˡȂbAb@M:ejW X'Sٌ@}iiN#2XtiEtb-78*zxʩ+^Md6li/w#/K@vA°.afӓc="%)mSjN$xbM[k+P4Be=+yҜδm,niSܝ-K!I5?[҅3 +R8w$T> ׈nZ
RL8kF@YIu}vaOL,\e
% 5f_ؙc)FK..	x)dvNGLYiͲ&W!(QpE@|ˉ}Hog Ͽ0Qޒ;hSE-X#`Cnt0gG*K4KrqZyJW0J<WfUXU<6|	w^Nz}94D<jblΣ\ͻmG[*.ԱeDq}{i%EH`bkq c
sՃ1_sb#V%ܢ崘 nGǾDֆBthtJ<|  ]#eѺ@]+OY/ab}|hdO>YU-kh$يjq,!q|6	]q5c -q2խ8
]IrT1*jq$;g8Әȗd01_BOEt\)T!J/[2"AKWȅ*;<T\֨IT-n5~[·	\%2ZC%oQ
0R|fCWh(juDNW+%rj5juժ+?sZ_(Z7}j)[%:rg/b	X'T~DH{SlXZX̡1
k
QOxm3[s~r}&n|EsluI]hv&AqEt~v:(mR
Kz?P~LCS6իGgnWb[L
uGEا=n5{h1g^V	~tKm7s1LPK!    PK  ]W            /   ch/qos/logback/core/joran/spi/EventPlayer.classVSUn&l VK&)lBѴTt7ݸ4!:#t3Nqs$)3}؛s=||{ "*B7Cj?͝m}kCXCTlqq	=P2Ǝ붻]ƞnwtb+OL'x`1XN`zlxuT.47x>~2j`z򃼂4ŦrxM$Џ %eےk۔:0wTjT=OQ62BxWz_f$K^S>IZ!SlA;S`Dَi@Y9700qnމ_z}Zaе3O|*lpˢ[5P	&AQP;6H7u)7Po	$IcQO|y^,m3\
wֶÃG]3ɳ+?gX=+NUlP/e
h9~Mt5=KXcQyr[nuuOʉ7-$q.Dt<Jmm+P:e)b򜥊U!S7ʐe:]dE\sEx@k ĺݭ-_JwmϕXwaZ"TKǅg\5BN)p8H#[c]-lONۗ}B8DWj4m 88mDpHI2)	VInjI9@6
gr-'C_j1%龒VןKg"gK2c$^̽O'{#h#xS9~&TS9uDYlI4 &0Iai"Iph$[)QDUD~=oL+>xbOHarOr;gQ<jƕ,Rti|-EHPP7ziR?PK:    PK  ]W            >   ch/qos/logback/core/joran/spi/HostClassAndPropertyDouble.classTnY=vӎI+_!3kӲ;i&	2#hV4?vIlÆ㜪 a>:b4	6si6dfޭlZUO`hnޒ@40Ft
!0_ϜpjY}bV27W6v6Wܐ5iYө4,zR`oyo*:H	0|.uϵ"6cuٮ/;-8&ֱZ8ÌY]08uoȰֳlq<[V)w_"u֔^%|@Aj
X@'Y֝ӊޓ~e*ҵc^&_
M&~&
`V\~`OWv<1נIx5L)\[][k;
gb#U
Ffa-W tܪuV7ʁ#\K)((u'e6
h;NzQOA!MQFg4FlN2/唤
EܵaTJRC &5BwPe|	TDKIIIr?H"	[0,Sɺz
JG]{bǞɭﭚ`zSx4`
gq5!~Oܰ #B%"Zpŧ^Cm>Bnq+j(?ӃB'9ҏ9D>QNy!_D%SD2^*e5:Rzx]=WJwKϸs=kgd}PKǩ9  '  PK  ]W            2   ch/qos/logback/core/joran/spi/JoranException.classN1m"x]N0K7	AY8>+>;'01MsNi`SH  542\OA=d?R: dUB~)hF
:eLX$K[%LJ^׽u-Kӡt{:kʭK'FJ-jf:0c_^'=!Um@Wm	
1G0q1u!iBH^E9!0:#:=y䲵`}f0g	dy5^rePȝge9
#aT23,kr̪!pU6
a#lºİm^PK$ڕn  t  PK  ]W            3   ch/qos/logback/core/joran/spi/NewRuleProvider.class}N1ƝzPX< HGNB?'*is$"^ITe}Y?>+)8S|N&cϨ%0cY㷇qdn
4't'x?nY'{dLCiZd1Tڨ(ѣq~ќ/:`A>XkO=#+Xy@AJa l,fY1̹[?PKEG]   i  PK  ]W            /   ch/qos/logback/core/joran/spi/NoAutoStart.classOK@hW"x(xq<QOe5<Pƃp`f3>? \0Bp^ěqy&իPdQRZQ-QG\Ja}V
M*u^zJBRX?&J8Jju3hE8m'6[JSV!%.&GRYfZp0uӧi<$6BTvAo=78PKK     PK  ]W            3   ch/qos/logback/core/joran/spi/NoAutoStartUtil.classRMo@}S;q8i|I
C'JmZ

~^VbKa;oޛ7gxhcAYB'Kʨ#^{	ٝ 
.ՏEK	_r8$%3M6-8PӖ^_x*EO2A HC-cmeE+(gynEJK6rڄ[*.YlLx|eSG:	:ْDmۏ_vș<8HuieK}uS8amziH%& B)ae1I03kyV~y&zLC5=Erf&H`Zɳ Jv5	1>ik|::%	cd9,w;G;rGO03.1S
ˀL6rBմݱnql6ս1o[)DBBy2tPK    PK  ]W            -   ch/qos/logback/core/joran/spi/RuleStore.classRN1Ed߮	t1(,ԙ0OsQv0{|{38fx*JM,`''"S<Zuܫ+؄I0_*n\qABYa&:Jcn)'s~v$
.8qE!8X^t?_Ef˲ 	4Q/gŝk"p+3V|d)t!r1k#y5 O:<udLoAkCaJfPKg0:    PK  ]W            A   ch/qos/logback/core/joran/spi/SaxEventInterpretationContext.classVksF=kǑ(@0G).oS q؄bHJ(mg(<:~3Z:Guzwq#<Z{g?|Bq
=:e_Q[)|,;)m\Ӑx-\F`:
նVQ@ʰ(ѱ~'&.Dw!½{5LP
1AE:a!,qK>c,w8BlJēc:Fpd- ˰e^	QeBE\)c8-~LmxwWt1N'k,-MZp&Xɱ,*fq
8GC=ajv}AE\pY*p:*5
Nw~0gx>"BA0m*0wW35L0F!5՛TmԲu+Ԍ`褎)tӞ,()w6<gXx1;a!IYP	*JxPtm9^.{E=92/;5â"1Ž	&ͧ,<(CT.Q$R*S0 ʬOL0t@HVN"ԠWڃPM$-MbwsY%4.[.40I~;f:o{+|S[
@oI5jG("+{];J	9HSJ`ȤfͰ\
toNӫ[d"<+ M9NVxp$P)QsutAP.
J9='5xbP/mS15gZsQ1<\a+^?VvϻŹG?nS%òfIW}ƦU羆5ɻaa)([8AC7
}@[6])K]g讁8srr/1_#~K]3A}a1;BA@b+XìZ_,/zfA
>P9x~BhQp{$5+`iffNoKOnP7%ܡe;aNw^M*?w[
K%?rCA!cRJc-[X|\w%A/ DW*\kv̞xF
+kQeF.ƕ1։>0Zti֦ߢd9A7\xQS

7Iኚ~JtbCz	wH(xA.!7

u26%eHml&mbPKw{t  #
  PK  ]W            7   ch/qos/logback/core/joran/spi/SaxEventInterpreter.classY	x\Uo2$kNIi;дM&I.4Ж"4P+ԗk2dfySZWp.,
*m6EE-
((.۪͒tҨ'_}s;<{ph@A]33メP*ګ[۶֣^4Caid(tY"%P$B)3J'>so+nm+LY|*xһIʼ1kL{K6ho$ReOX§ukzv\zN2d"e7`*3Z+
ǆ2w920~b1
sNy=5,s
LKKm6H	|	aDE0]8(̈#S8sPkKX,17*Dm
M:f3v4ytZQ-:fD/qQ3YLcQ9荦m7$^lTf$+:4)w5*9E>d,bt@Źـpk:9]yZ+4Z
(6ސm`=U-D$#[	gKp7tҌXnABg.` ,1Ev7@vk.؂ii?c[i1F57ڂ\m#w TXENh8ڶ^K|'$-	^;I3\f910 dv'}ktmۉ54ҝæQ5I~1!RYAx\8*#K.cQ6JltaWKE#`4Szk%
OSH{a`Ϙ&+1ckNE>V}&K-FWҸFJT*Rjk7nڱfݖ}=s{lW?Ǣz	7UF/dxK"ԛ}nr%cq*Uxѝkzkٜh5މwINXR:W[/ޭ7Dre:a1+>(cXD܈u\oP+mw|@C+,= MGv 4jwX$Z1Ԥ;|Rҵֺ,c"dp=Z	7#k.ܭ03:,'j)#uHܢ&3wP˽{q1Y_c-aӎ92^2"6Jx9h	!e ľg^q~|Cx=_®	BcTC/!4+)!ђ:SMŷ}CM2J\.K+BsL܎[ET3
mET5sыg+in}`a3@vFbJqk.UدngkD&cfwp]b4FV83oH4Ȕ)cV32Y}r!|e R-Yƪ/SgU	m%+HRX]|:O-~PerƝc<v,U8k\IӜMrw PQzWpIM69gzxayܭby>Yg3FXCdL1y-%뛟uʷR&Eo'Ω8|9{3CZ+vlf	y&RcQKUsh,i:W=L}$(:gU$ ЗȤ"D2r\Hi;e&7XPb ]>@W`g"خ.D2Ot M:5Gaah<p!	emau$yS:AxUGP}4'rs[ODuK sYDbw&Yy(
W8uxǭԺN[ij%'WU&erq2'*^x'A.\WS - sܟ
^/My*NӟM?;$c-Cgp?O1kT|`(&mܛ6Q4sg	`(ru]жsbAWU%`;q)sxvX ·I?/W$*Uz+QW/<7\.-wǽ|!~
MMVbCj\
r28?V_\Fɥɲ
sο%v3^x@67؞,	yFmbkF4`/cp>|s@#s7Wo5]$љKW5Y\ʅ0Aˢ`PzVk3_E_#Gb>n\v/J/{xE!Nd>:z&ŕT**f1!8oC7FdFm&6?x^Q<o^D~xFVm|D~bDpjc(j(i%I
j/xG0׋,bId{q%}'uoТc^_T#Tsn*	)qt*}
rhW1#lڛPNκ-,E۵
AGLRTb2Of6fi뫵b	$QWcLtf¿[4?N>(
A^Q:G#u;8|88'm?q=7Y~}pXS՝PI?4!Kߍ8խ0·QFРy4h:6"6kL8TZ/P^ǹ.jRZ)Jc0y,6u2qԗf;geH#akw$uft;QiH5VGȗ?ߧPzuFG5*y,@umQ-81G1A7B{r-QMs1	r&*͝s
:Qsox(xd^<4[XD+Ǚlkw
+꒷l^maBUɴ:of,R?p++s]WF6Q/3;יm,r>k[џKGsJBa:|%}v9{jv
l/9LY5&.׫)pFLQ7ºB;zȥ^<6ooM.
7%,;a]7'9@id\jdyĵiGxQ԰,7MUU:.P5qw*֒׺%u[EoUלO]z.F.8S.3Gm\wT<LLAET^|hQӱL6SZWQF-uEbt@#Sڧ)o%M˔:*ko3?i\qPWB\jZ"I>Sg3
P٬'<H6PK}
  "  PK  ]W            3   ch/qos/logback/core/joran/spi/SimpleRuleStore.classY	xTuf7=!1 @l@+ Y2&q'0Kgi]'qVqHI4dNY\gi6MI8]c41o{=??=깧  n">
~(7Fd!O
	{q#i)S`ǌmEvn#_!k(ֱ%D'k&ksE ?qJ`I׼[4,dRvX"1-WuVJ,ӱ+JIgM-AR*L۵@+wEczu\Ԉ
5tFݕJRhǉx,C8bbq;|hk^b PV5sZbCFTjؤ
0ws/߮QzJu&1̓4\E-S	Ǔa;c)Z)cѱ0
1S\+ oqpmX1xU&a#kM" :WnxSæ`<I"SQ!AF6E؆f
-:U`l100ǖ{1#tAIu.22۾S	lF`:mM'QLʓ;t܌7D'orUfzm6=R]uHVFuDMI^3J$e!
J#&1=Q6b2j*13vc7	l>c]CFLޚ8:ނ;6f۫WYjMrX4cX;I1F{dْ;ds1Դɤ3 ]Av$+55NƏ
EaXT#3݆v+pK529N#m#:FcW&1/kvma2~ 㨄[<ȼ)g\a˕Tzp:q\'f;505|!N4wZ7zvS֕NBuJ]xuʺTSNKǻ<â
˪2ηn{tG&-a#CFʽq/c*fW2?},);i2gwf%b'':Ǹ,;x0NbR!
	1=r*I|TUs
u|F#X, gޥɴY2~JrDtY(R\a,܃u<G>rˌ
IN.LNy)qY?;$x8'<{::z:z<iYє:J@4Got<5B#yH['/%}3>x=]bl>/JC|!#||IǗs,FQKF[v1:@^8Жgx M4᪰\{H$-3ͬ:p:_?sNNd9*TW]Ho:^Qv^	
?He4P̰r|FGRYIÓ/TI6}N˰G~#iX,^NP2
Y
@bFNdfsi|G!wi&gOPx͹}ka+cseK,'uY6ۺci~8 pi&|izfJpv2qv(5
fY}RJ닙nuf`j81xPa$,ܳ.e2<N	 |	xl]]ּ{T?]CETߖZIݟP:vɴohWLM}0SH(O'#͖ȥsf6H[<n3ݦ=HD-y"F
Xl؈xD^)כ^v飰)!HNoo.EkIFC\
9q]P\/4qb+$+v,>bȜ+͆tɘp7:6bN*t"L]YߞJGh/--b&ZuC8)wwr8ӀF3}/:"s$LLTLii&g̕fcǛ![<X}?.VΘsXW3<I> =	?^/>u/VRPVa՚:UP/ kEy]3uOSHE5f52&9U(j5R>T%
lR[KpVzTc+h%=%+ZNe[T&,WM0E;.Yu,=\}Z0Xtߍ5ѥtqtiL?
|k'|rԽyFC[l/qsTRԅqz`q	D/R򭮉íWzQ>x?~:J(.4P*=`JQHs_"W]~
Ehبh>ASBr"HOM=g1 
H ia`yf@Ef]Bp! evݛf .?=.i?fnOd81>Ō(''E=mG>F
'#CXfpfQ(**@<d>}93+t;wO{.`# )| MeN螹y쯛3iL*hܻ3>d{G6,EZlKH'ICCb_nQFwf^r
kئRu˴m2')sWԹGW䇳g.\ˠ=t{0KcFs]K2rbėK(ROٞ䧴A_T/mn#G	8CMeO<fAH}(44kA܈?f{A湏|\aA.mczX.VpT5
AAun'_T֑XD$n5J2"8va4KocjOCiPL(=VU*s9!oNjU{39ޖiwi5qlPI+cPR)Wh+pEC4,"=`d~.8O<;FDɌ'ݡjyB9fQcF<XY阗15k?)ݐg2rrN?"\a^4>|Ifmk55[kL<ʧg΄<&`:(PqPVw:-րsyEFܗЂ/W
U溯a_gyx̑dNcx.>S>teYRaX
jRI
pQ<R\rA]R<	^udDY&fh*LWL
.ӯ8nfJȿ@:V]"[ovׅ51zANl~tc]HRωECXXb؀ҠչJ4.N5ZNJLik~~d)2@nR&ՐOF=6~,D vvс_PK  !  PK  ]W            +   ch/qos/logback/core/joran/spi/XMLUtil.classQMo1}hmKQ*%tL6KuUT).ʁ={oƏ~x

p(VPߔU4B)!#9mOxA8IDhfSZ,L"|	P $TRGD3Q(0; Bk|ṽΥ{zˏ
biB]ȖS_iJS_9_t$7r-{]?þ=vNؓgqiKCmnb{i	B!Y:],u?,e3
[Uۼ(UuV#1nt~~+
%+hŸU;F׀ PKx  r  PK  ]W            ?   ch/qos/logback/core/joran/util/ConfigurationWatchListUtil.classWWGMl@UX6UT]lP~>U9zNOyN&OO.py/3>?>a~	%2JQP5ƧxBz.=4d-cZ'hFBagv4q'4#7ĳ㉬a*=Rn2lJuwu;5ڛjLwV@:	eTa7n)7|d7.LU%K' B FF-6220f\O,UF\jʎռGK9^g苤Wz:v2f61z -2bC0ow^mFhuPnw>P&BWMʍ2"BUb bh͋*(4ŵ=H5Z/%`W\jz9$e><M@΄_Z>bXq\u=)[㤌Shʧ0Ujؔ#3^цc{3o):8GP*|<k^F'CeQ;<EP"F]|Bax'>7$у^
hR|iZ/2"x =
Nb2#{+o%I'+p.ɸ+*R(7vWUIxa
"t9Đ,0՜JH-VRA^%mT1dHRkP[CS 1"JR0ULeZՕĐb!fBi#˵7UNX*n*9N1뽙phPif-PydS@Z^m*c-Lb~:JBvO1-ok	"ZC0ckߝD>'68G(YMX~/4j
[&TQcn$_3D
VnVvMpD$<.-#].Ú;:mlxªfe!QOpð褪Os^e7.lG;ׇ5%;mIcg9ޛ֣Z
Duڕ<PRGXU	Ѯ^Y#g	 $$=n4cAz3zMIW\\!ʑߖ
BMPR=$hlt$Q`&r,;O	.<D}g<6d%n[)>%1BmB5du'9h3	;66!t|x
4|[8R%('{Q;LGPAזb \4@=C#%*cCifqjG͔g$Y:E[M#PoY5
?Bˢ*d#oݟ}YP=k& U^45p:T7f={>utKS}"=\"bW>H>]`hy XqZ;	.v
' !YָB?`#)O)=uE@U	ul.[xmOi{ӱbm|IVoMQPK]>    PK  ]W            >   ch/qos/logback/core/joran/util/ParentTag_Tag_Class_Tuple.classS[OQN[[ZWڮ+Pme}`fA6@9]Nm{)	ğ	Ą?8g%=gfvfof}s<!d)7f(t<pCz]!Yne1l97a0p:Zlӳ+[CzG_5y{GuNs8Cvi6T
4n Q^4`j=D/L*bL2LyOԥpUB}2Kum1rJۮ/6a\)q+M&cJs50pĺ!g.̵C}R*
:r7ʅa1Œ49<*zU'{b6:w;c-w=Rs*?oũ1JQpnEA,2D5e宴3N$h(u$&N^Oy4ޘ!2Cܪ-=s"@SEs<n{d@$i\I9I;Iև!F:`0P8v<N$(*+PB%6@,PKיW    PK  ]W            5   ch/qos/logback/core/joran/util/PropertySetter$1.classSNA=CKBA
F}ИRbcm؂v;i;8
~jb1|eTٝ;{fΝc :Fb(=M_tێt |Ju"Oΐ:t
+{dFFCV%yľNޔQĥ?x۫;3l
E68vdR/G!ӰZ[NcaiMcAϐ(T5\e;;Al{<w*R
6qMm>Qjym5+ۭ7*:c^E-[fT|A
?æZRnUJJ\8gR5bnĐ~^Eveѡyo޵l9m<5:#=OcvDgHsHoy
O_gQN+Wt<ꉎd7x!UW˲!spYnF.:Ffwٯоw&'$_pL
u.L3VLaW0C2.c>B	d+h&@db1B}!J9*x?N6KO.PK)jK    PK  ]W            3   ch/qos/logback/core/joran/util/PropertySetter.classZ{\u.B	IH+	Ih 	d e]vlى7iIURl/MҦiipqnĉmb;wfVT?1;3sww+o]z<d׀
DM$cNԄbq&1iEdÈ̈́=
'<k"~C:㱸N#5ؐO鴒I+N
E-SfMČ״Bɺ<BsPP8Y@!J6EDBanŚ4
eVl`J(U9S ~,4]Ńˌ&jyi%BP26"SD&(4WLYrM;YDR
z&)ͣV(쵒^w&h]:q/mVQa`
r
~Bj	."9TcAEdw89DҌ&dk7y%ή3hmƉܼL>MfY	+BCŕaت.~e]Cޫ"(TYuv8t
c#fOZ?3ЀFWrj7#ufJ:!pvb
\=Ug㗻y.J
~i<9Ms*ʦd?n`ȀPZ׏Vmhnl)32l)8#!T4e:zn>IۋA<
{pTh[;OoM`p&+,+H^ql^
'Hkw8HhƊD~)Sz{S)EBi(684:̑o9YY6Is ~B۪O6wPyh˝2\O>psH1lFP`3L9z*䶶uݶu'퀐{
.*7tklln:־౦]M]m"x"Mm{[v$Z047p]xA|ȏPj-xYG^2M@&vy5ǯj;)svi(~EW._vM
3%cnAr܏6dFp$;ETz)%m#1gʾgͰYRg9p3g,MC2y:
EX{u1S~6.??㼁/
eJӲ5Ҭ+XbB`!֜wәODPJ$ҤUjf3l"3N&*,fHK9xN&43iB'(,
WI:$+ݲ=_N\vETK]3&"V*M?bg
7̨;q_X(cUr'+W
|M0hH$Q)R^E<P̐$
k;ԡ%fJQ:`~ϖe1=	'fK*3݂4=ig%c$%tϢ_4&!mgLZi`8"i%@ah44휷)c֌bhIVZV9=c)&f6n^xE΄>ݑkU!pb_:9DθYAwx?x3rJ$%%ŢV4a<,&Bjخޛ>=S"oxcvaES4>UwdvGeb.{+'3ԡԵo+aetSe#gg.N8y`}B{#Ә)ZQux|3!Lo5$s&̘L➌_dǙ#%sfgN6i
W&\GzyI8,2B'D;zL9)yߧے7$9M-7΢HjKPks.ҙg<8
:Z/d˞9Ɛ==
ɼtvMhe	z?\!]U*|j
:7br_(;IlzAg!E}\
l^Dp$F߽\i1]<w9~%..dc(bF3Oa/eSJwȉǙz9`52GT(
ɬ-0|]]uګVLaY4l8K@oZuFjt8wWlIAD	aI;b<3{diLߝvM(JPLzSy'
C$Z{-)ܿX,IMDbv1T>VGh@Q6No 'JnJaRaZOk#
KQ7lmO\{nfUiOv	fZ=ЕDScqyƅU`ƀ+><.d:1.tJq{Pjid!ub^lǢn<ք<oMt^
=RʶZWAFˁJGD "@%Ȁ8OX|JNce)ZwGD"lu:OQ,˷nS({C۔o\">{h/\yK,vbxhSvlOʗ9&NJd4GNb%32կdM/Zjc<Y <(_[X~QR>>/E|戟OsIq`cF11
VQe=khD.0;Q]*o&fPMYF;+:D׎Ų0?KFQsՕj9zU
("U@60<^PA?̅ G)u3B4QlDVj*+J~1\U̕m>1Qǖ|_̈́Ω#Ȇ8OvRghâ짰=p#}~]ϖ~V{FAOsϡǞųh.tj86h.qt)q{8*܂ҷSNθ@EҰΡ%ߝDWU)UE9*i<4BV֧sܠ=VF[]>?r-_-m|?tqtZJa/o!jM(~fiB
z
qczއ>mF=dSΟ
E-8}aƟ;.Kz7:O3[}yAQ8pA%41׻Q`>>8{1h}	8O$Ԩs|\sg.S+4ª\H-Ņ~;5z0x1B'dX7.~|.-]|U+EY+;Y83~>iϯ|l AgʳAPK˼HZ?x4m*Mdˏ$mKUMȹAv:	{ʄ,T=ߺ_n?M<8'yD`bfy4+\++IP|dZ9|?V	گk6zI.qw?|󕞧jQ|qoy{ηz0/9Gt]qrL_oҹor|Rߡw9=l"GuXN+U\Uږr[J]
O1_\XN'EZgQp=8j< ug&{
dlT*dN;K_O?Tj=uiEYU.dXY\%/c1~H~1[
1ɯ\Eh[k4,^uJfLex~Ir
irvENIsКVr\<s2BzVPE%ܛ*a^c9k؊]:6mNVjQ!3<3.MU|8"ZucnkV^M`UZ_PXRȵy Crn&'-IGea6,e "T:o*ul\:t8@<nR%_ǽ+8r<䘪YvZmm:&m{,Ŝ5ZHD/vnq
[vK_9n@ßKxAAN% %%9@M셤wWye	[ʶaZRIdװbrjJtuuQv"b%i\7);HjZ,\HO=6B/ ]뫖W:<lRh
 +Nݶ&oo$owSnmT
̠A2	.2
z.U.U>]]H_\κНa083:mꕸRecsԺ7q;(K)lJ([&e}Sl/W\올Tњ^<Z<M9Ib*as(2>?V]w9ǳn^nJ+66 ܌.ٔN̽㲮Iب{fleip),C_7/
٥s$ֻ\_PmM[)l+ApVSMNS'
12{H˴忞ROll/}L!f!bfYWZWZWm{ڥv;@ˎAS5!@X"T#;ƫ:%RrqfD+Bb!,P'P%ZH}}];eG* K.^UiGА10ctɵ_{AFU;)t?]3>9c;~Y]->[FKk2}qsVM} Շ{]o]o]!֑%ܿ%d`Z%D4<cJN\ PL_`NowsPunyn}=WS_CjkkL_OkB_p6Ca]%fPKL  .  PK  ]W            <   ch/qos/logback/core/joran/util/StringToObjectConverter.classX	we{dy 4,$#lcٸ=X-mi%I4tK}
&M$mNOmls8y{O n=KB*T4R`\IRc@N-\m<pFGF-d<yw\1Ϙj*	eLhjk)˨рFZLiMnxjk3syMe,
%%$R9Lײ"}3%H]VIX-c
yh7\CG=h:	q3lOF0
	RM-H6RSX5#:Ri05=ivcMUf$ғlMҠFI{\Iɮdt0Rd$elaF4m,ޔ>Y[	[e܊mE%LuM졥<Ļ]NOlj+0"P
v]Űމ;XczŒR7+EzXTEDY$k?+ʑz],,,qa6I`i$xȈ iӰo,Aխ꜄:ʢ˸G8BC)BK%JBn%*sqsTv#=FP0,P4s	hq#)cMyFIRJSX0͎i"Us\!lǦqN9"ްc#5$!.be&#I4~yT+J6P|0aIЈCs6&xi0e1%|RPɿbq2L%ag3Upsz0p+##=N)3ܼB$<(n.n쨡XIƛJHto`pg$rrs'3$=VùVoi;&{Y]OJSm	wܔ_#ظGh(P)͜p
[{^Ja2oNtM7Ƀx?>22#h2
σI	e|h)0P5#b*c)SeĎ2ҩ2u-ijhBSؾp-<ݙH_%\KE;]o-
-DILs4dNnGh!%ԁ䰚rP?4;FA^-~!}-1%ѥv'6cU}RIQ#Jl(U@HYlh(6ѯ$%2]Q::3EUf)\ȕ#!jferiR
J}օi1D&@-aPdQBĮI&tj

ԓT%bs됳/څFٽ;cqTLո,VSYtR4
3$v;
1z+5V'ZnA`W~nحN=:i{<g,ar+weEz,E6{O^A/C^Vfr	ɩ҅LoҾhct^L
|oLނUg jښ\m\]c=Q1Jvf QwU/cwKgҚ&c3mև	B@*R c걑LDѳ|t9]vz663f`~6g<]sL5KXv;|zö[,*!Gޖ6xm4击iؙN5]t2ޣ`e,<,Nft_c<"j|YeD&(VZTո27M`A`VtҨ׏BW肳)a
wq(8SXplp	X_/R&
CsUZxQ[}

Z_\W';.<c_f^;A3UST@d)D.9YvѻpWi
gqBUXVᴣky|fN{'-խ^la`mlDjx(q2Ge<<l
{zNI;ك1wV4*S9;j%B:뭯Y^4yPq]ia>ݜßۆU\
KT
Z='uk3I&&SRcLc8وWH?ďHQ޴*uC\CD'|Tr6
!
tQq#U|}LE6˱/2{G稂eVZlV-W-l-s["#?!J4g$szsVZ3?[N+[/Ren`
#.oK
fvQ %
9
H+߭`PK
	  U  PK  ]W            :   ch/qos/logback/core/joran/util/beans/BeanDescription.classTKSA&$$^! !Y+C
VI*UZ%x<{'Y&&PLwO_̏__Xų.FPB{UUйБJDA4.	ݐ
G;f)*ʱiR5]sը(۴>畂m4B]=;ce/jB/ ðs@혺N|(W5N̢vyeTҗ,G̇$calen٧{	7_qhsB-	aaXV7na	Zd*mzUSF/?Pv}d9dvD5y#ð\miF)m[)}y:v>`E.Z|z־CYPrfG]Jo4?}S_kfi}U~;q|=RGİjtRϽ3HWߟ'_lGyn'kbWάZR#3v~P %a _gHOx&=B!HNSg0yayz1(;{\Na#u@uNPQ\&tN\Hap$ـ#	$@Ll4g3,ɟ8q!	ȹ hA mAɶ$Ydi d
&wLyў8hn[{M%SD%^-
xk-l][zKRcmIԆPKVp  r  PK  ]W            ?   ch/qos/logback/core/joran/util/beans/BeanDescriptionCache.classURP]-DJ )PA@n\RA E:i@&5IU_
t?q4 ЈN}9+{ &"*T3$-(yk3ǵfٺ%m֝m};:Ca,C81pqJ5wVy!
	BP'
SAۖRhN禣,zWw4(eEq-g:s!x(q6ʈ!/;	YEF.wgke0&[~*Av6OTו8(Z%^uS-z+OU\c;eCF0mIssSy5rPq]Fm"X+D]B!Si]哒Ң+XT"#QjB\PnH5&c7)9\9$aa5kƦݢM<;Lh:9VҬI[u2<'$4rg[C}^v繍MJEi*H;LTfC]ze}Hs;#O^C^a?HX/-AGZKthuwÄѰ6Y<ߒ< K~q=DUi!Bk;4!R0f0x9ܡ!1B|,E1KFrpeDtL%HRO2_!NIp#H([t!G+SU:HO'n
8rBu45E/<n'	ijMך=,D;_b2A/PK*	H[    PK  ]W            A   ch/qos/logback/core/joran/util/beans/BeanDescriptionFactory.classVIlgx{2!!(沅	Yu4=l33fR=U)RO\rC%"PCNz֢c;$q}o1).	nxLxɰY#IVAOy[i6-;u{%d +hh<.z6qJ^u#?͓ab-.ccPB6:/aVfd4%c;Z%PmU,,)tCWb/HLjVK}TF;:$
vcCf>ݚ0TZs|sYF'ސХ }KuNkB+9M$KɮQL,ϑ&x]mSϧFPBHAz^|Kv	2Z}>W00DTtKQp\ N0L(mv-X
0)'Vw Ii^jk+p0vFXZPv4 !AQ"N*6$y=ɳ8)㘠s7\C+W۔1M7؜iqFY{Kq>֎3
f[㩔@>0V-<ñ)"2.(fѨ<bJ0'fsLk܂f^Y:i7u/Nd͒rKJV_gG45nն^K!>YO;FV%RPXF6U)P71%xGk']Ȅ\lzY~6*K4yѨk~)bUy;6EKJS3[JwHhTZ#^\o/tHoynMFLjӺhONğ=P4ŉswҷࢱntnWɸC|Dw'i>glyINKģz"^xPr
|m]<Sm#_ŮexWHyDSe#jORW*,c htZ<w[0QzTe+\@^h:N])[HBu8W3[yy}>ߐWݎE*=p8D()j1">,i6+PǱBa?/W pP{1Fy1Κu܉Iv%!v4CPũ7qZ$?BIzC>YGKȂ%Sй%9äUZETrVid(|l :)Z!\*!fiFkGymzYX\Z\Z\":?'WC'aϢi_D$0"IuguPKf    PK  ]W            3   ch/qos/logback/core/joran/util/beans/BeanUtil.classV]SU~$
Hj!$~	B
5(%@?%YҐMw7T^֫SCnHhg2}}9^8/j$4,)xN/Ư/iKo@ky	HLQYBo:8ӺƗtCǋϫJތ9ͩE՚PeYT#-'5ԅT+gAԡޏKh~cOVOT	Mb5؃~쓱]cԍaܱP8(oI38)Hس%E2b ю?xl4-Űk73V :HDQ݇t=GE1{eEeS-ST8۪"3mj;T%8'SyF\`]cΊ8gwaϝD~xY!\B1)}nj˸AM3֪7%!"Xo_N/АK2>@tV1٤H;ćcL8*䡛zj5sPXLo$᤺*c)-]8*ݳvi3f]	؞7%TGfb#㖄$tr	(Hܥᩩɹ$aw%<;2o("7n]}o)ٝ^(ބQ-O|N	QMݏ^+GK9xzP1߲{<|¶CIbFit8~V2tp	پe煰)Ɣ=*QB@3/Ca؛ΆVGxRTf{o%St6
F&^4&JE8*0ېpV.+G8OW8T[G7*",4k;3@{T{EMOفpڞEAhaV^:Ќ6~9DG63w#@*zq<0\ͤͲTm@ȏ"lb>`n*!oQ48'hkzh	G2#MGJ<N'ɸSΠg8aq&1{\bVĽ	
Ժ7G{+宵]gۊ>F
o
+`$\4Q"$vXI4
[*;RgSVhlЎVh#O6_vY'X:NB0+V{wsfɈ-#,b#Ö^}mٌڝlzm<	G<c?2<iSJ"+TK	c1w
#
QOi'FcG\N  ?g="6}ZoG3lJ_uMјdZs+_TibvGbY*v~/PKl  q  PK  ]W            +   ch/qos/logback/core/layout/EchoLayout.classTNAn[\DAKzXBM$+J1fۥN&>G2mJBd9o9sf;5V҈OC\G?V*}Ñ2%=aX6CbvmЗDJCZ
C
U<ۭ2hM4q9bF>Ad4鸉a(>
w0hnm?wvv{aiu!WlU;D00i(Z5.#C +TɌibqX/;"--s1j6Q7gF9>:EZ^1F8~.lxϐ*UGfQ%jM/Z$Nם2JdóĦ&a RmH|wBdOb!X&i,$聧3۔url&o0
G3QD\HDǫoGQSb[+}_^P]Wtͯk4FXD8Nud/.q4 }])k}",3ODv47u{DYCm-Ed"_3I{6PK =.n  &  PK  ]W            -   ch/qos/logback/core/model/AppenderModel.classnAq!a8 DKRd{np!H< xD8H0USզ' wpej($p%/"5vKAl=Ӱehq(SZ~ΰ$d328XC
sXnS^wR$pielwQSFov\d	}_Fc*oUbv8ݐ=G&<,rеf\L#n6*6⳱*r]xy<kBrH:
7#pkO,'6Dr|MBuhYγ'`-X/@BX2MpYҳۅstVxoW&|QOR&Ot;C8PKB    PK  ]W            0   ch/qos/logback/core/model/AppenderRefModel.classTnU]'L'imS[[3I!8-uIR;wf?HS@@S@<bk0kϿFI !\?r<rvFr\wijƬuޑ|SH BAuLu\焮OhHc]@`jc-kڻ~Z)$ۆ׮Э%@q'[~
q&fqN`2{QG xc])T9
1τ䣞a2bQ
4\%ە~2<OǬÊuYy\lJ(LtrK~^=߰[`Q^VJI4t=ӱ?cU'7'cw~W;Q-zt?0TerZcao̽8emh,Tz[˩:
{/?Qu]CʢFcWz="Nsdu%zۦ
S=N՝ےM`A8ݳ}jIk2QgNKzﳩe1[︊uW\}1xEGJ꽭u̳G`z{#]IȝYp L8ƃ9j}\C"]$`c!OD=K#Y, U,0~De	;K}hV q\癢vA!y
`5ߤ5^,
N\	<dV*0_W֊x6=BͧVs܏(j'x_'f.\>~6Y|1d6W*}a/Bb[Ģ_"/>ƅoԦ_PUxWKII;	3If6p9=Jc
DV"GZzt=Fa@3C
4.pV-UwW=lPK b  d  PK  ]W            .   ch/qos/logback/core/model/ComponentModel.classU[sD=_ޤIƱݪ-.N
8uI@eyȒ#Ʌ)0I÷ĎIZiW|/~p(BaR(Vj;f\Z%n(bd/.1b	ؿdj2zQHɐCm[6\,ĩB7 CfV9`n[}*jkf9I1\s"efD"	eC_՚ εaē2‫|FƬGVioe\<3#ݭЗ㪦KN+p
Mdđ \ա%)*IPd\
Ϸ$A
fЅe[7߭:>n;,:Hx[F
`oXӨ$3Eᶮn;e>.3ըwwvѿJ7x&_W^W%-bЭT{ "vKۃU5evcgNtFZ(՘1j.LYܩ!`[{׀-©{.a[Uk~g;Wt25tkYjmDaMmRSYryQcV_O§>-t}]B$Z7'i
f\βv굳[q};w!2auar4I	W*8۔oc.\@K`xǛK#4v]4ޥBoFP'4Cc[2r aAѴM"B8DmS'#MC|-q{(xxgc(BG-(iN5\}jEtNߎ3١NZ'ZEsË0ҰjB
{īM *G` gB`gvpNkCX􂉉E1F@?Giz|,(i)N9g"rDKIׁk_:%~<q"u%^L!s0f(`#D%JGiHqq%a)MN|	,Qd^THr2xN;;gxa
E9PK:jX}  	  PK  ]W            +   ch/qos/logback/core/model/DefineModel.classTrE=m=FVƶ!z؞dL@),
Ug4̌VaTA
: [-ˊIB=={Wǿ;Y a i"Zm=Cviu{ҵv펼W;'hG	7ωn	$
ņ3l/Ojd*&HqOgJ1J&2a?ة}KrmoUTi3ȶrkȝ >lV%\6p^߻C-|=k*㼉,*k\,	$Y,X5ۓQյCO}d(ւJ&X慑hAYW݆B>m	;cU_E
Tcm毯<\&nӔGvӕC~<6ٸQa+, ;XIaV\I9eq<+
N5-)6RӡnQ# îK1	z>0ޏڒ|c*w샸VŜ	_:7l-yQr}^j9u1X:,ΕAYz;Ogt}kZNf/ 5>jFc
Fo_`=K}1wHL]h|NSZ=B)B<SviMk<SDLԹ<N
l[VKSҲ@LQ3%*1ﴘh%<ߠSvWM(iGx͹Á׈Yo}\	\ʷ#CoM{-MU*TT>B[Z;2TCMd\%1,tדy:e[`KKMNfnޙ=DqACQotToPK:ۿ    PK  ]W            3   ch/qos/logback/core/model/EventEvaluatorModel.classNP]D"¸6qlTr"Gۂ/ib$ĭ/tϹ}|8z>DaGm(wVty]jSQ%CօT!9iJSΙci33j66[ܑE~7LCMQ%v
L<!ClM<;eI֩^O>߳݇"C G 
/k.xM|Yɍ~344AxY2 7TsٲTQF,v96b|NҘEr*0P\BQnu<"ŐL`b'@˔e}R"]:zHON

At1܃WZPKeW|    PK  ]W            +   ch/qos/logback/core/model/INamedModel.class;o>snv&FblT}O_A +,Q?'1/]?)+5==ADC!\Rn
TPS )_ZꖙT$dH9##30 r
;P$ PKGMH      PK  ]W            -   ch/qos/logback/core/model/ImplicitModel.classKNA)1.87QI\6cGZfqfгDfDuSUUׇ' XJ#hZ1te\(ϰYmT0lu*,r!C|G:eFIݱ)l	D3AYۢ.szj%'\ɭp=j3d*,7]N/7Z@j[wpxӢdMTS5IoI/m8&I]>T]{2t9XFG|&ћKv2yF>%da2 ׂ̒3
-RG$NzHݎ|+}j~(E'"P-PKԪk    PK  ]W            +   ch/qos/logback/core/model/ImportModel.classSn@=77
ʫ	
4N+,aM*4.XL(5l~$ H56MJKw2s= !l9y.L7
}bA(M/x-]@UB;!2"JA'L
EdUk:t,a];Uf*ʶ+h <I߈t?2GiE*˞8Gm&-v3;j$CG#'_	
X1!e"7;_l0;a0AĄƕqqǂKɸ{*Os"Ȱ[fvC[>sԐՙ)Q4z2W Lv\z,ۼ3y%^	S.W}
=lSW3Z=+}Gh9t3R+;?Q<hNw?3+5yk֧TV5[LYBsaN֟ټ`N0%1ZZh%-ujDN}l{W\8q2 PKzȻ  W  PK  ]W            ,   ch/qos/logback/core/model/IncludeModel.classun@͹8$ͭ@\JdQM)(\Diw8v 	Ă`K3T$9oƓ_E61EmO~hxµ^ʕ!h!ȣ`hrgSLE68rolG
i9s\!+&j&"g-ES|{aĽhݙ~>[JSEox4at~=+pqI*fӑ+y|8PhD^_]R]&
5;3!AVaN9C
^]tW8\'ݕ;>}nU0ܤ*[ÀUTTq
HC;TYl;ؗnl7ѦT=?Ƃ+	qE+Ėt|^Ÿ['M#vh^:Ȭ@RNjA $i֗THGRM ]=H5	A% 5ӂԓ Zfg	HSĚG PK)."    PK  ]W            3   ch/qos/logback/core/model/InsertFromJNDIModel.classU]Se~^!] @?RJ>)h6PB 
q4
^)q|e!]|<_~.>!atVkǖ[[zQjFa}nԳ)=g6M@((
LSl:.VcX2Ġ $S	m[Dr%sJU1 Х;}OvVsm>UJheIo`Xyu֮咊xƚXkuI[;FՍaWxy59Ae+ѹTQVML{qK3d(0T!m]'Smޞ1'aMˬ&WpCf#d|z̰+6iha;\/.
eKVzˈ|a?BY(66Kf\^@7mM7:%qhI+f([]ַꆤUey ư[39+w@{)1Hr&MtjO"a<G#OgZNKd6Eb
Ug!kkU)@˭ЫlUg6uLZvX2eŀ!^%1FukކMj]x[smI>|c9O-K)(#C;^9iL}?<eXr<
e=?uďG[J9jzOR`e&&b	LҖ+%啻z/'Â,&!BӉ:|rҙScu1^a!u{@:->HQ D'@ +@@wA&~=zUNG΋ёZoiaPV=ÕG+&4%4g}B)rYE}P-~:so	"wR9/AI>7$=mHBL4%¡}xP1XL#gd:вւv<<1x7#ڋңY]_$/)+􂕥W?PKkVFVF    PK  ]W            %   ch/qos/logback/core/model/Model.classWw@1[lKIH6f1!q% cjӤKS{	i$Ц[4Bⶐ'oK}KzҦ߽3˲9_ <w!!#i#7
f
XwLB4$t4@ؔKtޞ1]2v̧G(\	iܤYrjμU,9
kZֲkJ%̈	FXrXu$O м`̛c35
YS`kw*	itTKۺ3ـNlְEVlhZM nfpuy?oЭI$ʑΘ0-9zuNHAUdWEOYu~:0W.歬#°;RHԱcv3-APֱ$vYYEqKVa_1(3vMuAD*c.R!m\0JWˣ:ð>kiY }1"əfqV֘qd:{.5ˎ":(2e
:q%ϥ¾<YycR@W!ux,4L8њ%kJi|e"|
xf*2ҦqN
8Q'òt8?72.KQutpug*2D]u~f屠F_#ᒡysX0k$pY%dJ)Ά[hig0]4!ulY1ՎN%ǲǆ1)ы_=Yuƚ-nDj2{E<Rx75AiDbaĝwMܠc#YH3.iG/,̮NJ	4XαBpkc_>NNs:!`s4:vw6JoJ54[Z9`Ϝ\Dw
u"cKY%}P
wJNfAvdGMw9qR $Di4N>;ytE`<>WvV:\[~o;
2ϫp	U8mϛwb|_Olr+gęY^Y)b3N}P0K1
:>9c3I}Yh؀%k"9ϼ<ϼ\y,OD+`C]d:494&wr8 q#X-hB7ݓoUKQ(yGR7&A-lH$[x W>G*%HQf/|ta'4v>PD$ϔs\u\_^R?ϕ/45G>q᫁/b|Wq|SqnOҦuyuunj?AR:O/\^RЅ|jaƒnIfB|YB>Q|	/p.a;B4CԖh?1Y"<D`;3/
o	W}AeoC4)s;`9/JJ|e6P0F\tQJ&@%MUUJ[L'UZC,5y0Yhޗ>4D{
Z
" 'dJHc(B
%j<]wgV-3͖XG}_mMXu%S,Z)T%~,HoR+p WSu ?\dJscHkGuA8ҥja=}
UI?ZXg PsNC2+X>u,αE+<*o|#57rZ &[21b
{S	%o]ڟ
K2S)&gT2S1#sOզ+UoQ[FS ^d̦,7)ٚ^nb"vJ{[~.[Շw}jW<(Cu
tV#~uv7	ƻB!=M׉{xTjQCŧ˥ Cڥ=70bSY+q[*LDMs_Wj|PY-G\ßPKfvO  H  PK  ]W            .   ch/qos/logback/core/model/ModelConstants.classPN@&^KRJ
P<;RYg8\lG!NxI47s;
'
rMwN0aiWB7V1U*PQwc҅%Au:QP&huθ4mNMK`}O	4̌#?	v>'L$\EUJΌ;GǆaHFP!dJg,Y<u	]&&,Sܗӵn"'+aOwMĖ&Cۨ@]k?|Rg䟲}Lp N!d$8^| PKMA    PK  ]W            9   ch/qos/logback/core/model/ModelHandlerFactoryMethod.classPN@}WJeaen``HH@bw.M{9g >
q! "l?=8N	ʬ$F<F*zKre?&?O9Υ1T]#iKn0lh
/uK/E~fqpW	W#ZɟSBat+7<m"NMb]s
_֙L={2\d

LWm"K vYPKݕ     PK  ]W            +   ch/qos/logback/core/model/ModelUtil$1.classRn@=i(4-BݒPU@TD٬N~g@B~ 5Q ˞3ޙ9;3?~~;n)-dldc#\}.޸B.w'Q/b_9G!wDFֹ<) PrF&[ێΏŨ͏1r(ę8&I::N4tYs(1d[N\l",+tִpay̏x0t;ڛѮ/ՠ:4*6zwUy^m:C,M?"fo~4ϐSZ~ ;þ{Sni>}/RI(oi7MaJґ2遅?xvd?QA úQ$#6pS
5`V1yn`MB&6+gX;dH0{	X".UxH:[87@{iщ@kɁu
7JNbtb񧧔PK«>    PK  ]W            )   ch/qos/logback/core/model/ModelUtil.classVRF=#smC	!mH!		
iЦed"JrRޡO`?:pv;Ӈ۵Gw9+  "]㹡Fu[(rgX!L]
*xl
n:.+h.w܇.$ѣWEطl-ǰ^XS4jhEu\o9UmYvҵd:5y Ssbȅ%QfxqaK!(0.(Qq̤:&<mrZܭ7DU R_\J{WS֢|תn/K31`Hls0Xj/0Xeh
T\TFNel	0 "	Idl}&(61SA<WZ$P^:Hpy񓤘Uph.VlMP	Dy$
{>`gq  MXr
-?REv$ػo%Q%×ϰbt[|^)sQidixcEB^ Uy1$J x5IYiN Q7	تNKxyq"iF+ɰ_Rg|O,1`$sî,qyͽV%'Y+u+[DqBY#&1Zr("Te\l
U]
㞂o2oAH*mz#_LKO:xK`92j +Xks"b/
("BTFD@G~G%	ߓ,Ne8+Bi``g	bvKg
dd׸ڂ3
pi`q`MJhfV|dPWNwy)u&0	{m5әfq0>Cc3y[-L_,g	Nqu!y-̕MBbKC`l_5S__'}|oPKt  	  PK  ]W            3   ch/qos/logback/core/model/NamedComponentModel.classVWE6Z*h jAljjhZh7ɘ,lvMW</=>d	}ٝw*at! =bE{lizq[+תvڢ]1e3,[`y!zzCA@E>rX5v=Il:%gnOtԭ*հSªh+Qjb>⬘
vig
@*^CtU拶UԽW/-e$VKBIS8G*KK\
Q09@-l븠 "$à;
?l+:Ȉ3*fqu #È
pȕ(eވ\LZWk:8^
o-!*"#e/(U[ZAqcf;a[2KC~Y?<mGaz5`ʒG'o4^ ܁J^({
fUS%FHZN)ݘ1tCp[7O.l=}~*t_#+z͗`m<vU8gם"_6D3$(Rvoٶz^[^.!l0u Ln2f&CLe~g=S|e@zbos_FY7E
nVtֶ뵓{Nw0t],ꦙ3<Nz<UP*!z)OØBM&g1y^ۅiNc~]ifN,Mo#H0ޣwP|YBAYCO-CPO&SBYI!A( 4n'P߭ZroMkZwI[yNw'ja'LBzmX5)HE&wh;"Ψ B=#yWVf6%{Pl!C421GLW#spnWs2r
~H̨!@TVqb(%Ĥ̏7-djoM>;1idh>Õ]Z8G4 I<H5:ND)DhiMA5|D$ɔ^5Dy-OqUe-e_z"8PK+EK!  *
  PK  ]W            *   ch/qos/logback/core/model/NamedModel.classTMsT=/#()!Gr5ӂ;IX<vJed	t͊=3t``g{Vuiz9sq;$$M0*PhG~h{~C6M?p
7HKuiK/ʶs_30P0ab<m7+VJ1³&rHv*>Jۓ}{/
~EO8[UµҚ>Ɓӌ2x3.{7r{lG`xo{])TƂy,"QWz/	4L\2;QՓ!Szd]QE+CȆL"mή]FӤEfy6U
,<֏ҫ;Aj[x׉NjzO~dݎm7Kt/&y$o&K.p/#W[%{%`zΝC<PjTH=\]8aף88;qG-s?Qݎ|-z<wsUlU	\:}׹u]𞲎!w<jxZ|{RXw1 ~>}VSg0vcd_1&R 
G汨i{ИV=}tmpOI[uP:6qd􈊶genK3LN$jUbI1WJ\Nl+'$xÁW5Tkʟs%pSHS
>y,YH%1~D*qha'e.<CMd,L12K',Kt/>F[D{o&'13Y4ؠa(𹎪PK%8l    PK  ]W            *   ch/qos/logback/core/model/ParamModel.classT[oE=_q7si
I_.*)8	$b $U?#O}HM3_?gK&T<wΜ|Y a i"9e=Cw~`~XmY[TSqUD09xGYHO01F~@xi	4Vn3Ǆ@Ʈ|,-Ovv(p;;5iȴdZ#^K8%#n7w;M6pDo	L@R̔D9g1ϔG]r4$,fP4q)nǉ<2xT>kJEZ8l8*rmr;a$;6-(qשS&NJw>O|5?/}M39vnwemH;^LF-Y_x]56	vmdq0"<8R8`=6:'zG;/~rcmʇq;?Z(OTvsU칾Y(̳
FxGppz#Qs/ow}cx.T-0Z
>F<R]A|OU_ج,#[Y	?c/ePy,8Nkڳ=hLfKs{\SG<?Ԑ<WLMWGeb
au )-WJZVgs|r%?Wh%̽o|RH_%;OSP^	X#C78SZw&vڪTC*Wc)R3,T|>zuU縰%/9.ep_u`Eiʺ69au|@P,АF[:꓿PK'\o    PK  ]W            -   ch/qos/logback/core/model/PropertyModel.classSUǿK.RBJR"ͅ6Z'T%4td&Kw7u|?CtFJ5l	K0Þ=]>w9~:>!a
DǶ^{َo
+7UAtl޲P:SQSpd;k8ާ6!O~jc;.C2^hH`PAnҎD[zs;_]j5	[c|~a
#Bش!8aLj9k!5	
[_ehyТ)N*fTj8
gZwфJօLQDLk l[ET:@8&1".nV-ݥt戶eu	p^ł`?26OMӛ5 (5S*v~qMrKA-zQOվKM樝灒46ZlUK׮яNo°W7yDS0]*5ehc9LtסƱ
>:)=ȝ{tMSHu	{~7;Ȯc6*ERe[;(mn0NY]?ֲ3t1RZ$l y,[=s"x(]7#:&r]"d|'],mħ/MaϾjon.#C{S
u=;wxv{)&kj)c8 AHO89=,/z-VpC<ޢLb\,SP6nfs`ƥt6礇!RTK~'$
y7$
2G' @T7@[ nvȈ^ h7@R0h7Ȣl`1?_Ϩ-zj!1ȑ9?cr+$rT
,]y+*Z'9`#؄16<i ccl|5zlkD{.|Hh/#Ħ=[d/0/<݌ &w),fP7$ 2g`DXf`	9N	".pH?̨N]PrO_~D^OPW{c?ŕ\O4{Ej7PK<X  	  PK  ]W            <   ch/qos/logback/core/model/SequenceNumberGeneratorModel.classNPbAQn7
٠$.D*mEɕn$p3iDQYL?yxz%!cP ʐӛZ[)/\oitfajEi]K[މ_2D
¹|=8pM;Ec5s$lpO:~O $C-Qe8A|e4=+uḆ%v̐,߫s#";LA)HSToy&u*R'NnT4\[q?N/ZG?	֯
2?DWaHQNS$zA1C2)t4hLcb'@
Rψw1v?g.Q=Gp
_	PKf+`v  .  PK  ]W            3   ch/qos/logback/core/model/SerializeModelModel.classTnA}mabg'%@VQR46{xAO'@$8q =!crWU^u E>4b.m-7
zp}~-}YXЂY6[X< 0,e2X
mdNiX7-еaez֭bJE
:5t!\n2;o )\>&|jX-5'J!>)!U״<Nlʇs1BKSJSR1+pLE^aPvWbƖ<DJ0i#AډzJ4f[&_3e5s;R4GsvQf=`hO2܃@gϯEWo=dJu++|}v3LY?1-}yz9 =6GQ2褵g]l<Wbj֮V
^Q4(G"h8r7KY|tANL쁽dCٍ+2L_5 <Kh-	65ćxq{-3"4H~zH]q(/x:t\/ůֹD
Z"]DF_K$J%BY|GĨpDNP$1Rl4~zpM>H%Oߣ&ψidg1]>}L֚4op^c=6]$j$*PK
    PK  ]W            1   ch/qos/logback/core/model/ShutdownHookModel.classN@C,_xxЃĈA.(ǥlv-r
|HiDAI23μ}<J!cPTDeMF)/\oitfɆ0-lmx\Caol{
ٱl|1}3BE!e񖨈Nv=nAcTgH1YkHTd`'ɂz5nE|oԺlآҶ9u23eSN('i[c>js7~Nk#_DU]2Cm-*7DkfXR0
δo3.c #
i̓U{d%+;/]t10g.R0	AO8ZPK>r    PK  ]W            )   ch/qos/logback/core/model/SiftModel.classN@ƿb-Pb6AbA.(	ǥR)mlA/ɫ+?쾼?$8f8w}vO[	8!c9V 
IL:	"N)I
R.8~S01:m3,n7[sT)3}Tɍ
nDyzcKȪZ!oT&ԍaQږϰ:2tub
'3~B`!E љt*EF1,cT<E9|!I. '^|;o#WPK=Z  m  PK  ]W            3   ch/qos/logback/core/model/StatusListenerModel.classQMO@}"xhb<h@L0JqE^ 1iDI2o73O GaJDrFMf*7!5䙰l\J[ޡmz{\"ưq	[8C*~M $CHܔl!6ry}(+[ḦOJEv,֫p)"筗W@Bj8j69U*4ȇnQjˠ
Ձ_9[/
etoOi~9i!Z7Ɛ&8:)NRE(GV`web4(1M1! ʊx]i#=7}O	g5o!+<SgPKڱt  
  PK  ]W            .   ch/qos/logback/core/model/TimestampModel.classVUI4 Pz-I
RjڊrMuH0d̤+z᢮eK.]pa8Mzw_`8ZYKFu5_l[d-?m)5hh6L@$HX6qzHVڪm߈[z$:=0\yp]i7R+##_3Kk>S	ĸ#?lT:9[ĝ&Ў8ڒtՍ:ә-+ѓ:NΖhWE̬lWO_ˆ<λx+j8#љY\U7A5dtd1$7];QeGHza2]WuCF	m'0t<xPK{`p.xo׍U9-?)6X
́@^m(GڦQcZ	q<QkɣO>W3sWw7"W+?uE7S>i6t(X*=ǵuM&_c}X̔Qu*N[3NYU6O.6'Dyw{AnTɯyݫؚmREӬ>b-m0?eI֒kMk~/M[B/ݒJ]Le8S`ccp:81tlԯ2|*Q({
o<	~[o
s:G(Cl]m}>~S~6m }hSc)Rjz4N
 3<˽A>=iM;5wS=|'^3
_`eJddg13Y8)Ԃ)/U! @|(Lc΅}@>PT
^8H*uAtACAJ ]AԹH¿2#J%{/MN_J,JD%T*RŋX9~tg}c%MI3YmNs2(.=Y׳:=A1J);5br_"YgRF"jx+6DުK!VZ1uϽB2< F5B}c=ycv]Ϻx6VĴѠ
8Oe?>PKq  
  PK  ]W            5   ch/qos/logback/core/model/conditional/ElseModel.classQMO@}KZ``LxM0HLTKHtc[GG<EM#/iAc#˛<><
8Vۼȳ&:%=aveK8Am۵XjhH2?k,.w]
Jc2]uqUu`X/jtb³O͓j322u0MLB_]Qu;M*ȇâma[9,H<K9X
Gb&ЙvG8I"_E)DTa0Yjxa/>I_C7a.b PKi^`    PK  ]W            ?   ch/qos/logback/core/model/conditional/IfModel$BranchState.classTmOP~֭(2'&!BA-dlf%䮔صOh2[kΘ趤OϹy˽_~)r2BkzC}T˩׸ZPΡaѫ}hzcsK-	my3`DeJJ\a[1+$c
B2^9تlww@"_Q0$<],kW}@
d$:CD`NgjvlqG1&c\nP%?	yݤN6G+mZ.湦]vgMp!3m[gIF2"	1(h13$m*PѴRY3f2}L[U"CFyk={ps8rI̺ͽKtJG-[\~~ש]1EJZ9(mhyN˓0Om^teX-m{	T&'u!Fi?C%:|H#aQmC/
o"f/0r	&_|gaKJa_l0L(Mc/J2.|x~'I B	q䃖TH~KO`ھԁG:;KANbSw{oLI!ƽo$.0}M)(m+>>ϮU<迊7PKky'    PK  ]W            3   ch/qos/logback/core/model/conditional/IfModel.classVmSW~.y*ʋDo b@J$ZXV7J6qwKC~W0TpMNݬKK3}99y9
>	~JCJjjQ)'Kɓckɜ2'U]|v.!,2{}EUCWd恋Q4T.؊R}Sa"tˈhVT4LP}ghb1fהGJRSd6U}5ՎD!/o)3/}r~vA3tYa6WFvGdl;dW#0&3D3V\%!YM,)E|q		'pwN/JK}qgVu>k%žezlE	j"sJxdOYt;͛	SOH(Kzߚj /<;fyR
S2q?)Z.Xix>!ɸyW(3"%#7UE[E?1TB/*Z}?`_;<_yS)j\̅Q"]eH9*nG?:$RIgY֎2H4[SUqp1:?,ah\ѯƓ$2KRuUyCQHxUS2+Y4gvEna9r#{^p%>
")K[C[v"S#ið-T9n+i25̆va*bnTG:wPy*a6?65ZP[YXU[o>fw7Ĭi)un:'-:%".	MucڞC >:V2ֆtc	Cg,];7:隥	atǷ
W_N9}c yz떸tE9뢄~ChixAg}?A_"BWį}^qvЊ}`cDzq9!akp@kMt&.(ssdEy>xh6$BnQ
:oDf"Z]@> 
e뾋xkD715`Lu
]D	4Ĉz1o	S.w^w&g.z#Yb>א{W&bp
hqc2(h$٩`9;F|&%.7<9r;=B}8aU(T.ғ`Mg&B!Jx#y~߆Waj 5DMCZP]Q
u6.B3,2G`WnbYǪcUo
kP:,G6Z9)PKb  v  PK  ]W            5   ch/qos/logback/core/model/conditional/ThenModel.classQMO@}K/F=xx`Hbe)TJ7ExDG?iAc#{3<><Ŋ
jQVͶq%=ÖMnvSʖ bE˱}%_hh3?kL,ߒz[8
J $H1d#jx>wL/Tǐkq!\O*evȐ*op' HH㫖#jnSu޴2S&pr|\T1lb>K?=V0-߼k_ZCidE0
b,UbFÖ9بy8^"`,ަ,t	}>>g˔/}~}Rp+PK\    PK  ]W            =   ch/qos/logback/core/model/processor/AllowAllModelFilter.classRMO@}+JbL{D1!D?{lJxxof'sH0la+gWn_!s
!UGքec6î{p#оg
#Guafb:r;R񑯅REH1$$Ar~qEM-v|/A#y$F;HE-ĜZ%1"uǾ$@3gx]JXеDHGBv<No`/q:O63X%kO
uB6C9B/s،[nPK0V    PK  ]W            :   ch/qos/logback/core/model/processor/AllowModelFilter.classS[OA-]ZzYZE̋i0>,hhm|n'eq鮻[
g$^(ÙmТaf|;' <F15$t!ɐ=wĠ_w2$7n1˕N
HiHX܀;n+r}ݞt绖
q?(' ً'r_#2[ґAa/e0ʕ)ahXQ@a#=9Glni338븡&Zv ¡ON٬](`UgX.OUaH4Cƴrwxؕ~[tBk	#|[`"ܷ6R>ZXHAؘT3Tz=iJѫ?*3a.P2"b+፥[з$Ca$J&J4#10ʪ9!{-UZAMy*$]V}Nqܥ}, ARD5a
Qu!g|{2ٌw,VB\;iFp85PA֢_,C)PKT
  X  PK  ]W            >   ch/qos/logback/core/model/processor/AppenderModelHandler.classX{=c^K^cZ "e2Ndcc8صj--vn6}IJ)}!iwfWB²0ٙ;9Ν? p
>	~hbQ3M;5sSMK̔-Sl۴b{T1RYTl_7tg!ґ0dvwЌї5#Yz$,ZG$CJNRA񁐌 C0ieIO\V}VeP[.#ϐL(9b䁎9*F:6X;$ "&{(nvaΦzoZ]Hna3}Dsa3lp*D1W>n출fUqfu'C-Q4wʈRe7é: 1֜b-$)YΙh-1+&c8*͉K0@ci9!
3O)ҤHQ7Đ#21p-قgcUZ6nҥ+6X6aQ=B2^OU;Nq;:h](~ZFR0k	q$/6z3N0k`s]y3-g32I'6	Y9uu<ϰ;ǒ6f2<K	K8<yNfQմtΪ-XN\zAF97q%p_I^uQn2:jYδ#vٌ	3199<qdp$dK
iJƢ
Mhbo
g;(K@̗XLiCq
muSwp| *(j{aͩ5҄](,ڒMrs5%MU(οN)TS4n^̗gbdD$f}C?((Afrn1ːһ 3_̢4D7<?{5)()URGzdV4=Bk5!Ӻd+zJYP]"O6#]ʗel<MjRZ曯:c2T8T(jY[ksp,X65kmnL4Mv,%?93E
Ҍiv&bN5Kꎈ[;2_zQWw34Y(kW
ĜYp"6#%#WlJXZ5"dut:ELdD!-k^T6n(ޱ־PSSNt5a%Uܐ7~;Þ[ҍE{QTǴޮ<<Ali.7<E?] lvJwxcYb?jtݐ>P}Qʅ0vѕ~+._VB?zvkߔTJ=sq6GE} u|xʐف vn|zM|Kh/:eݱoSw]OaB7|2z?fqEMbҾ
h}ߧq7#(	LcW￉-]Vg]a.=aVGE#Qk
7q)nZEf("qq^E_Ʈ>+gO82-bx6*#cl!ރu^*9QB1w^r0:17xc\zH׸!$NZoW<jyGxSͻx|d[xHIYZMySEK~IB~`ف_f$gcFST˜qȼ̥}sv1?AŹP~VneqFylK">.0,,9V*'F
c\3YCNs8BD{u^*C\#^ߒ;`#Lc64nBSLI_AE'!/DQ^eNAj}OPKkc    PK  ]W            G   ch/qos/logback/core/model/processor/AppenderRefDependencyAnalyser.classVnG=ױwqрKRHƎ6	;@c!,Tmv{]WQ[ڊ;c7pٙw9ν;9	D0#Dals|m拼"u-{k p\?2#F ڦjvBuB2,f:Og)yp,?M:IGYZ"d;a&}k|o;7BvZ>ILb5r$۬|:X:~&1K}X&D
/a9]r*#%P)tx.υJ2>g|p3z섈RBX"\4,$a5N(VUr~ |Bz'g^-S54:M÷z`m; G>H*h~h/f=sPX*Է2{a#tcs]Ub<Z`vf7K̂6	~x@8pAump
/GrBXy$_~
!bYwa\};vO+>JLrF&	KSx7p]|S<e,mR.!vW4HJ|}=iXi찘Vh3ΗӕjRw)KvWː4*r5"cBY/g
ŲBѐ
cDNb$Ô!L
$= +O)>@:?+AV?x!;b?bZJ+~T,}KiJ1H4<.q1:ǢYhyטR}kXgEV3M*9[6#xMޗ e#	D/uqQasP%9ζ/@
;o PK@    PK  ]W            A   ch/qos/logback/core/model/processor/AppenderRefModelHandler.classWiOG~ׂYBBRSҘ\sm&`B(Iz]gwMIJU+k6J*UJ#Uwk&R3uow M>Tb8e7L;53\k%93%ej¶M+>!縑
kۂ!ԧm0dXtӵA:͜7#%)1hE7-ˤ&`2!Vs-R;Ш`]пiG+o	;ix1B̟
vr#/&쩢
82|&+Y*Za_u
]jTұt#VlOE{r|^w.Nz
f8ܶ~g0*S)/+힖hC;])Dd7Cem>

eʑp-؆2pF2[E\3hflG<)aPI	gQ
H)`<Ot8VI9F|L8a\0<yfx:WABEN2ԯBgk"5O1TҥFĐ3*1°}mZ.lA}eNpNrrDlϨ\TƬY&L8u4W22Jlqa\7d!7#Ƴ؛8{rSVJ&{7LDy{G]jhtއUXQHM1~B>oZHCYnwJs$&E\/ױ4OkCP$B²&d:M]r	T,ՠŤй7,_7aTɲշft[ɘ'i<OEPpcU*&2@lqsj
<'d<- Kg9/=qZbXBAkQ'͂]J얖S@Mӱ'1ST%f2T0n܈?.ʝQG٨XZAZ%m[QVw^pR&E5(©UvXPABnf
!|GX'}p~uc^$/9uổ,\t}p4
Fy*_ݸj{C<MꎼaM6R&,
* 黅gitVz]6X[4amS!hI5qnozIPs9v?!C&V@պ p{WpxhMBuX7n[qAⲧϋu{	܃ Cӱ]{4diYc@o 	,aλ躋`#pX:$Mҧ 9O.9FzʷӨb	
B
f
Qv]R'0KqidȜvr9'#Kk9A3&Ԁ
\=l/,Dh
$;z'>EOo0Qo(;8
S~"oE]b`B3c]Lp1I
)vFwY	wNA]DsA5~łfBzdp:pP<se%]g=W=4w>TУɣk${oLR-}mg_#/PKQC    PK  ]W            >   ch/qos/logback/core/model/processor/ChainedModelFilter$1.classRjA=Ӥ$nmZmMT(PbI*MHM&Cvt'n*oDD >xg
ews# qdd]"ǰ*}G.^BU"͎C&2fVk{<, Sp@Fv,K˻PzoD>D7UG?k.Q7>ډYtqK60!ScXW<]ݛ`3j4F
}쾴-t;mJ"ۃ})#(LvIAm`oSK4}>P,j)9K"j{zbnlf@H(Ѩ#@]Q
]'OuL席(x˸BpƏ*v쎘+X!{;dhG[{dRX&8{	RXBgQ*^%5Υuo^Zz`-z#eIMO)PK1^  Q  PK  ]W            <   ch/qos/logback/core/model/processor/ChainedModelFilter.classVkSF=kmP)jbń5җTTHTSIPf|NQ;}]`^0ciwu9{w3<2$ugh~}lzP?m9V0MWd40	Yv!#CF0/]_ݍuMB]T7]ô-Mw=uYi,廖y4)!ŉneVŬm;Uq'О*<gkK$Ѕdt+EI	0:]+jk2.1m=U/eרĎqU0\Y)x)VtUeȇ21*MͯBkMxArrRʸƠ֒IU	aBƞ5L2LT|KioYjdnٻ@qM+/Qlri
򢶕IBI(I$d3Ca>qKn3\!bl}>FwyRs4[`)yؒhGΝؓ!45H-k6\]W4pQ
5Q֝w@stJ]48@^!@j˻[`)hڇǕ!P/l{^T59BAg5Q9³d*}جFww0dB12n{IX4:D+FAM?X4yR_*y1=c*}H<"xJƯ[z.-DMsf,s yu^Xwf4S*>(cxx 4f^г%֟*o<E -{hGg23*<¦qpW#+sFqr!΋/͹vlr[TQDU"σLps7x&]S!ܯdYG >`*3c<)	~;ȧW`AHw/OpH?0K;x̈́.CUH?/Ye1U5/S|Fl ̟!cL?u!Orچ PKBB  
  PK  ]W            <   ch/qos/logback/core/model/processor/DefaultProcessor$1.classn@M8	.
Z[,QMrѫfb;呸$PY@;3<3߾9
r۰Pd/N<'#.^{B;cX$:?0HW30<7 QBF8q _J=}"SW.1957c?;eE˨2ڝ!Å2]qpaCظ°1gS<x}DXǦj61T|2MHJ{BQg#Ie1,wHg'#JWx=O.)C늯gЈg|حH(m4c4/NE2n*$2nљؠSʪ5s*LDA&)`_+a0'\`=:B&LX:P6vIb[X/mzg,ΞmÅQ;ddW誖~ PK>  \  PK  ]W            I   ch/qos/logback/core/model/processor/DefaultProcessor$TraverseMethod.class.CQ)zo`H,&pz:Zuix(܆	'Oy{ypnYE|xpAGstOIJr'|1_}{7/8)9Oe\`3'r4	en_4lGd=S`@ecKvr6LqDs-.&tuͩ*+mȞ3l.L[(:+K8PK15!     PK  ]W            :   ch/qos/logback/core/model/processor/DefaultProcessor.classZ	|\uyiMӤ4=4r4
4)4miJZBe%:hx(rV4jlQ ^{讻몫$'_=+(B/|ecHlkfc2nlES
Fh$Mo}8Nm/[SC`u~1
GN#^

SLTLɷP,dFXL&cMfvd3!m#m5
mQKNQ[;q7!3<5"

Bj4Q3ԩ#)3Q阅j ճ=j:&GbY=bUcҤr#,˻߲|"zEA%g1N*xLp,!DR,#x\\̶IĈ4nZƷ,ߤQzՆAz[s[%BC*^F
XUb`,4kV
6t
{5Ҩqh(5F8b
jhq!.<-l+ە:u`=sLe-87x.xH$v@pd͒ubſ͂󳋵G"iMhj
A3 ZKUCmLPѝJPkT~#6m.Dd]؁HL1*_ۭW
2tN
)2rfo&R*AU"*T*]JPJu\2@ژE[ku#_#X;)7!&hFoxZkN>Ѝ&z~34;`,$(I9
+Gh-dYVX8QKQX4MG"kZ 83_u\QbBN:Rz؈#TuPЇTAo
;	6l5gv
ު6'pfgbk(JIwwfݱXsOͱH%x7ch(c@:a
%{uOA#ڣ1T`گ˹[q0ng
x,n,;u܅`fڼ	k:0k8Y*_Y{qu|Jy%vNl1I;Щ!LzL4i`NxOGVN㑰|RQ]ç
,-u;屪K1h`YGj
xAfLl/=ZƵ,
cDS<5ܝF X'S'/"!GwӜabQ%4)FnwI$9_V:?hd"دx^'xQk^vĒQ:+ţo[
n TXt$/ j;sHNe5|I1PUec\`jŏl#A%O`"v؀x?9ߠY}
?pΕd!ڑXI:Eު`9ڕ3J_P[ey%_?U	x"8ٔfKǯߌȌDD){rnGI8dei2u!rvGY;BqԮ0㑃<)
xYZ0ݴW"]TWFm ~߲`4Rc!Ad+Rˆľ,?~]tg^wPPC2M
rXړ	:!;e.4C-(oJ]d&tCg)Sm[b	'լ.D㳂ҥZi['7S5#h83)l-6EcF5_ UU8yb|]I
NZ43r9;NM^YRYKu8{DV1ZhĻ!/9sZJV4ץAV0QM8ڭiNtٞBOs]V*5ڸ-g
պsFӈn2DJ7mFp+_|Muǉ|ӹ1Gc| s7MGrrFTp`:NAP7^b
dd'܊K.d3s4VNapR(;+֝ڹ1G3Tewx j	>8vXם7ɗ9M׌	J,}L'7	2C;ՁUi\:;b*N˖D=
cYAGvzw=0CavYٮ}|\ٯ RkGy=ѺagF3UqyEr3ZڨY#29'wǼE8e_y4Z;ZL:~h% n_nj;KG0s59,xoYV?AXy'itJ>ʯ_ubhSCT\aapzIKq[	'NIgv;	)_Aۊ"XGܤM^Y$*-I:"3Z>nlm瘦-D_ejOZhZvG␯E9Q^

Yy4[-8K
FWU+B+?șkeݱ׮x	Y϶s=U7[8DMx`v,指_S_7v҉KoWu)}LuS1Kqm#nK,i}j2Ci@)rDyD,bpѐgȞwbQgL"?M]
wzb,8@	f@ei|G=rM 3h,HG\jg'!S
`Jsܱ熖Lc<1=$u5
'zٟKpw.	l)5ؾt<&24mF$N-R.OF}wFwC}!Co|+^rq=u/SG.,.H^M#P'ʍ=G */zT~cm|.^,TCkgItտU` 
܅bZj>
)Lyr>cՓ}][7yObcn^G	A=Yjl4b1.X5hZሀ\);-F[?Edn\E_c(]j]aW|"BT%wA
[YOcSo籅'eg$K%:r'
XhFt`ls^mq'{jQLXa^F>95:V|S̩x
τm2BN uRLCL5:')Thu
=$h؁*mZl1Vj+s`wK58EN^o}a7;h~M*_!*8ѤUi;)7_d9׫8e؍{-n P"ћ4'Z͕`DdrD%fqDr%IH("Iq1~+zvI͎0]h{X14cpNzi
n= ]#x_ߟJ'xO!.O:i:DG-am75[(An3z!%V2O]و`z.aѵ4š[~iV^F("cK'~CGwCaK3|V^wr[ɳN~k{̢f"Gp<G}GI<TXc|y8=՞xVpWԄfom&bN}!V3&ZfLǻC ﭸa>DpNp%ro?FĵyĶ9)^c#rCNl;ю<`G4<Z~
N"9*~bzeh
#RH	=@~mvL;Ķ{zNz>7a7Yn6ו`#zR|\j(d39ltbdl}l|l=7>:lvT`%)SwO' U2ܡ8+fnxx=1yյ
_)cQ7V4mS0f3ӟ29,O0c|Yf{;%|\aP|

^:Jf`(~4`}qoy/ޢ&4{F*BfoyTV{3&dvGlYu3ZslzrܬS[]s
E̥HV]T(AgVnq a{2<_ey5VJ/b9.7o.{$}vtJ?%KWS1kUZJZ:E8tYг Azۘ8܈ӄh%n3-y,,v
5U4M#Ϙ@-
V9:6VV:M^i)*k3_O7fUØF1cShC)mh"
|puZtfK}L!&.{#k?_p#^a~Rw0hy!15$:7Z1dy51ל9]s>cNsei9j۳H}wYFZ&kNft2<rյDWc5
Ǿ$i<'e쫯yEgRs2MgcLGKf윉e
fTMNer3+HEP^GWSX}[T^'πfj8AO^*ԏ#K<-j<(K=jJgD6y©#ɪw\a>հjXr>հmRCU,VYf
}TVBoz+t|`Ъ%>
X	
b1.HO.VϬ|\="YU	4x#*;49yNWS;nйs-nf_xf{}8b>]a{}~xY5TV`\@HRYMZnB\CֹSnۨE@>ħbiaݪ_]rXXuy;NdPr*SӤz["
~
M>lRY&ONeM[<C.	6vU(o#֍Sӧ!K
>Ö<<9򨽃=NgTV
5ktvv3Cy&6TI[;/].U.ϳrx<{U9<\=rt[DATTxd	!8Suغ~VV+[%ܗ_<+_/PKTz8X  7  PK  ]W            <   ch/qos/logback/core/model/processor/DefineModelHandler.classW[~2բD78X/QHT@%Ҵ~Imbz"7[czI-i,>Ϟ9sw- Gv%(DX2ESР׊:q+͸N<Ǎv63OY)ӳʚuZo]5Y.

AV
^U:>
Z\E%2vd,AM:v:z{E@䙺Qs3)3=];=BaCDu'I+I#6`VN.b
;1vѓo<(4Vn\&@R@:{tE@az8!DРa8k$d$gH7V^w6qόfqbj]
~Qw7*b4{9$qG:Asi]}{5Ah2jX~37Ӿ'LEḎ<$PnH+R:NI}t֚2=OU5jxXGZ֝P7Z)OX
>q\K,)6R.R/zs4:SP#@l^kO:=v[,%WDEٴv)+ b~S%zpIeYHC=#.x˙̑/oCVHS`3WcjC4.CJDV/:O)K18/lB<"֭3cie빴F S: 0ݴud%LE5<-PZt	u<*1q3([kt't<+f#Cz>T
yEħ}Q)ۘI,ˁyˁ >#sUW
|Dz彾_ m6,V>3tbftm_IغZ%""ԏ嵛5\s]1w+ lYTudIӪJ~֥qWR4!PM-*K*ewq8Bq2ԫH85vc,8;ks&V|QGU4On/߮ţ'[ɇwhA^OI&V%v҆2_n4jI/^'Ƭڲ2Hrr=@SyLqc^#M鍄.[FeeqH=u@~GܓO:Y^k8	XS:TH;s-be=D!Ӂr}IpʷzxU)DB%*I%JysJR6u,^TPqb
ec-
oȣE1g\wy5qY_)<Q9g\tlf횾*B~y.jRo۞T<
k`xX!pڤ,V9bԲ(a;o[z^1Ȟc_[$_Yab1VHY/+E
LvĨ<qvs&iT '@U( 7M~[6I|ա eE
׮57GJo`mw)lp`;n`wdgP
Ⱦ)D?<c#Dc0T4
hZi! 6^C`"Iiu葒MY\,A|QX .B&eH1A]_$$ ,vp<B،fl_v!4$¶y+y"{oC|k7xK?<_rm4.a[xRH;.E/;r}X%!~Dwǌ w4~Y?%VB{8j'5-<^ε d0ҤaSD:wtC:.7 k g16p>4Ww9
)]P	/)TqL6ʑ[5w7qWiqx+)LTef?/4V%b_{>̍|WnrwjPxCjśCz"'PKD  d  PK  ]W            <   ch/qos/logback/core/model/processor/DenyAllModelFilter.classRMO@}ZQB	xpoJ11񀘨!ؖ
,.-ń^L<Qi`y;d>? aD
it\~6vc!]*7Cրiaî~ȕvl~ xؗBH7ZqϰWj`pReo	0^T8<R0cph3A(k#CLJm	W/K$jy1dCq"yW ͰwăP%FqBF{IyzԱB`k
LQ~̍_LZn%PKV    PK  ]W            9   ch/qos/logback/core/model/processor/DenyModelFilter.classSn@=q4<`'jXAjBD3J]\R~uxH, >
qǎJTjb>9xR@Y	93OZx?v̐t<'bjzO"d	נ0<~doqko(Cc{={19|3ۮE-ײ"JC'YUgJeTJ*XAa1R}cnaÜ:aঀڻL	y_.wgţT?ټ0im=Mîw)S1}r{VxŇN$z/j1'/gKphW8CJDNL'{V0RHAu
<dpVI;4Y
]{OVd
`7H_(>d9B	NQ-/lY= !~Mm~R+ϐNQ>9)2ThVѪg*4Hn"̈́_PKO
  D  PK  ]W            >   ch/qos/logback/core/model/processor/DependencyDefinition.classRJ@=ۦM[z7⾩bR1Mט>~8Vj ݙ9L
H!C3Aز,YO-aG=w}tR#%!Ӱ+n@k	-P*n}_˕>CqiUCQC+4
\e,KV3hd8n_7Dpf5XFږWW]!bJpDTv3VKjkp*ہ-]Ut?
EkAC24mՖf=C7ן1CGɖ]"<V0Ug8&r%JySe'>tɳӌ	;LBHaX>PK}    PK  ]W            D   ch/qos/logback/core/model/processor/EventEvaluatorModelHandler.classX	wƖ<<,Jb	2(K!b	&^6vK`yF\ڴ.IӦi)m6pڔtK۟I,fl徻~ֻ؉(S)9xrikxPO&-,[7z5,3@PE!Y)Ndl+)ǲr_7Sia0
YAÏCeX_0Th`k;-LeO@56۶8Rɛ<nv>X%bmXiq1~ZOus8چ9
TR𰟰k".0l:meq˪d]X`qJT;7DtK5&c0y4Z:I6[.Cؐeǚ$fiz
𰂐J"6)e
NyRLz!TlPLG
q*X1
quul04KUnYal{UlհMʘhgJ},cٮ
S*,tQAAJ33'أ~2MN
}hΛ)1ݢaZ,7N3tW>NY(UL SȻO(mӰ1E(ekpcЮLaa78/N.whb锼ۭ 4uFj@aA~
6$w#`H$X%vN߈m=Jh8c
2{+RaҼ1l8LYh|d%̎k8!aVA}pOBW1!)t?	!L}⇲T<k$HƐhOER0CmF_qGe[0%'dBBxJ}#"fy1ˌVJJ'fZPaLCbBӆe
dnmStZRʌV1>ŭRgY[:ul9XQ|L9nS>Ln)[jT	%UX*ç4<Lv\sR3*>|nt,fXò`d娡/zaSw6V?ofr
2]+Xa+;6(>yWD:mCw`E=R<{B,Wd|q~K[{G5ˌ|͝C<+ڛ'RW3a|!Qզ{l_dp+F<cS]ꗘČeehZ!X3y>*Q1{t
/KT]a+"v?V.0qT{EZ<p|O
qP)MiP]sB!gָBV84QO;pOYRdZY;)RL<J{,˥'LpGίZ8NvLv
vyS[RiHڂMJYC邘r>+xWmɵD#{T+qcKGVo'Y_d_Wj[aFEVߴDKSKF0ot%Άfզ!?6wm*h^Õ9Tk7Ma{ILy_
VM'Z=,AlR?;/_Vpo}~/p$mUQy;E~EoK2 JK򜤪|
#XJK*=F_WuIVu3h>yco[yU2T~ym,!nb%r`C0: .x48j `C
j
yt{;h M76c/'-/Dxj8+XP
LVp?$i	|`@Tcjע|nvziVt/27({3hy4o97E"Vυ=Dߦe:.+2F^ |WgC}
PCR&|;T,V<R|-*~T܂g	~C
)ٯf|h:ʙۜr8YBC  
EZATz%~Suq2yTK\zKX-G4R0AJPPtW\~Z<f$ "6Iн)I>NX]h+?d9$.c	6q0V ;b{D {N'9{ǡcϽ&'9a!z\MDpPt".0o7QyDJ
`_u*ν{f{$3C 7wM7PK2 	    PK  ]W            @   ch/qos/logback/core/model/processor/ImplicitModelHandler$1.classSko0=^-'c@غ6CJinJS⒤C">BѤ~HQs}|}3 :FbȻ]M!;-}g2f?Ytq"O=ΐ:uDE= K[x"\@<e`Ozs{<0/rUg]qP3e1djVkv/:ISfd|G0$ke
W揝S1k]v)d616(\lziV.XT6VR*6VMt\W%"jRz/
7ujU(Z܍\^<N!Y
0W<'-4 dE8tOsRqq֖廞sÊ4P
z~ʣlk0M<j<dH)eAQ8a2][XnV]G5"m]%t`g?_}Q7L$OH'k\&gzrLcW0K2VȮb>D;dK&@db1/FujȾֈQ!;1.6&b&f|˥ PK<T    PK  ]W            >   ch/qos/logback/core/model/processor/ImplicitModelHandler.classY	|UdN&=[Ht4¦MӔEdw,=CAQ"PTe{E*}WfsM _w7{/# ^%|>(X뭺JU%.-Wlߊ뉪mTʲ~fQKk
p	,ZsuG@APMfdqìm.:ME5sF1,V՞]nٚYvDwKUm\D`p0`30G`ݤ'줭;مLJe/cRAl.}@a{,`<8JTszisN]/_lWX,Md	k=I*=Umm=ln%X*Lzkpn+En@ion;t"D
o\&7޸_
+/}vhUd۹ys)1;f'ӎ^c=?Duec&ͨjkq@fk9JNQKzKNiN))eJL >ؠFF
M{Bزㆩ%$N6+PL?16R3FI6R AA&iѨ4oҷ_)d1a8tr4ӡW<RvACj6fyb;K`jfդdRKP:Z`$b'5FFomo'N\y[<mތ9o$94]	ǎҪ67	%QUt(n=3{O/{MJ5ؘ\G!@jIVR%Ĺ@ʾ"W2uә<4̎$P`H!	.(h-Cǲ{82q>Wg?,kSzo`YxL:okLQś؉T+(;VجȋY:qkqM1OE<zw5}IeFexw&)-Ctr2ޣf0P&%T	Pp3goSq;DE˦|VpN,K-z"UT#ՔN$lT>ݍ
>cgH
g]dW^ NXŏY$,PIOaɏY+)Z=P>S8$mһtiSU1RMl"N%-HeTÃahҚN;&2@	SZXWQ:춸yTgYi=$Uecֻ${U:b<"Mk{e	9w;'l*s(p磒#Wss'U|wszk^Apd_n
J&U|
&ө^w4ߢqȇ}1]s	E2e)Īk[{.+_cXO,FI+yn?c&XSKN?W^fԴmnlixwKksK]kN_5ǜnLr5=YHr|RR`tc	Z?+onB[Uv,vbi9Tq6{<wMr_78%W[es<[xHiDԛ03[uNY/0tf鹚˕EWOBL3-5uM2L2NEnpWM¦wooԼIv@Ǵ84gZ{p2gWK0tns
q=aŴDf|m9xtRVӾՖNh3zLI4[ɵ:bu4{!<ּ^B'H~A
/^iS +Բ.㣶x70"^
)sigEpEx$(eM\%~Rv-х5L%?5jl2?kdP7^TS>JRBjXUiiQVsI;$IC
+b]<F"!0Te?sLG8CK1$D1C\	л۫YwlvLlWV.g⺧QgYILhYeZQwzx/Q4;%a_lX1r7dMZB_lzKQe&$J'r)"N[fXKCKCf
|M*gnv,y_lFٺ4[e^
֠&H[{DH
0X}zbpmָڥ2|ξ'U`Y}ǎu|;M!5Q%mRo-9qI'"ΜUbe,3<CWysDn92t/t~#=	.{GCDxSd)tPN}DZ)N'i+<+,>QzT~_R|tlZ!ͩcל1#EYTTFh\P"<]3"+3,9`C!f3\9<SqM4D|@eᨏJQ3rSC
醞*2XUy!%uu2b@)j|6edqqt$JwDA\)3ˣH( V
DBXǐf$QбYGG16P7R&:f-d+hЈɳkЂkF;pd<Ks4$s#Bĸ]`|sy&/P<
8S,C"LWHE*ikqf=nOoP;S(QPv¯
Iu
HzQ+2xmWE}Cx3^c&7Q\WF97}3"lCQND'RZ I
M 4.^	jױT(Ben>!0T)
xQQu6o	a;٫̿DET	oE#+|˽QO4Az]ys+Gc8H򄥩T>x2?mS]e%2ģx f	<y55dA,sc
4 "<o"C쓀2jWg^i
&z-o%]kOkq=j鼅@lčh;"{7)Kob}(r'.<Bek(`䪟,)b)Y;~QFW5W,IPˇrQ!yOJy
h.**+94ʬ-r@-
zen1/TU7y]X=4_WrWQ@
ǳC`ӣ=KHߜ@o?OЄHz `.8XcXI$Ě,$\W	٬|
=;9(h_7(ѾH&
S;_f~9Z*xkCG'Q]@j?=wHɿE!EC`H4g'>W`!\F hypx
G+f3gI#R|xv4	R')_%u~ToP;#v ŏ)W3	's|2'4'ŹŤɯ"NhěyR;aKu.֐ޞBS8":ZIBQO!@c<c<^(e%e-U#_PKraN0  y#  PK  ]W            <   ch/qos/logback/core/model/processor/ImportModelHandler.classVQWG&$YX(hD@U
6f$+twb_o	{9=};Ėvgw{g >#
Q1.Yw^uimd-٪WN{.0ٮ-RB;y|Šjdr+jE-07@6:z^cy%JcGc3z(|]q	

c`#ua;嚰=w;53Rq[՚x0
=vGN(HDt{^%
	,LlU8SXߴDQ*vE	ih!k(+#p9|4lsa05sENa8׆f;G53n|Bu5LCߛH%
Ȼe!Ώ妋%:wE#.\1:^
k7IB'z˗W̒CDLgm9o
bWۋi֫[mtej*Hq<3Lt-<*b&CJS<]	Ihn>Z23GPr>>C{cK!֨J޺MEx@)RNL-@u E<Mfhڻte"f`y/zumiZL<AElx_3LcSWwʪx*/u^v-zUSo@){gad'͐6eϧ+vTLmkmz^Wx{-#"ZoBӝS=#WS(:U.Be+F9Jy|<)"34:j!YF&,:Vo?C64@u) 
z7q$y	MbM>$[@	靛h2+~>8hӱdzi)@.d1t橲!mO)4a8Eaz1JY+srT>Ex[a0?Q_!Dq
8FOI%zH3?HәLd/r6}i`J34iֶkTq\O!A3'qbrY
I+spX#w$Nt_uW*-wpW=XxQCTPKY7    PK  ]W            D   ch/qos/logback/core/model/processor/InsertFromJNDIModelHandler.classWsUdeZ.hi-VEm-jE&vn*/('Q^g$gI=|ﻟ׵_d f!CI?̺Ԥ@f~AReAvH}+v({ωz2탵$^$磞hy/>[ӄ0/ZZP&LpV
Q7EaHִok{S(ph1m֕A)9W_ 'CkUWM&^!PQ6Xب(I%In@t:
Qv~=9P4C5݁6-6~m$ɞ)[8puGb):%.~Bzs]REcgNAHHڅBƓ
Xv.6𠅇%8ȱ
]jNg	b
AcQ<FŮϖK4{ki(aZX=dhJ1'*l/b
	,U70l,GNܔ#32V+pP8RōPjC b;8-aX`塌ʧok7!{C=7XRIv@O2']RZہX4{KFzno*r:pdݞn7so1uS͸\*A$ϵC:}
sEɞu<;*t[9T#>=ֆ	~ߦMhvV:^U3QyKnldj*ŵ~ۂ0j}~c91Sޡ[KBJdXjWшCvIWWZocu%Vw^xNi<e /K7ad4$8!g0"TWKI+>*6Ttu"K&9%l)ʰ(4b_&#Qv^ߌu9VV2Th?`,Y<c*mZiqS̎['O㪈>uGH<"ًL Z-ˠbOTEOttqefr`u.<q-%cx2RxWe=&͕s?#ӂ8XHTJ^Mp/rO:b,dbUx^</fc"BEIwo0cXW;2i4UӝLǯދ:Zگ&N\'<P!lmMHw*<5td֎t"J'kSā%45S2#K;_@+ق$цͼo؉N^Qw0~]+D#PR7r)22gcx.a@4x(0$N0,S&^\ptj:~K-MD=<j\@RD|'JY\;˔3o2`h60'zbb86MuIj5_#:?|{;6kK3|PKo#ыV    PK  ]W            5   ch/qos/logback/core/model/processor/ModelFilter.classuA@E	V9^YP8A2"1L̄*Wp RfXЋ_]`Aj'Xm=+c͍5J3UKHΏ[^R?
?F_3pcVznUbc0;
PK      PK  ]W            :   ch/qos/logback/core/model/processor/ModelHandlerBase.classUZE~lKhіڂ-P1ld˲N܃/kBCH<O63gwޙ㯗w9t!e mݰ~ʝmnZ(=%?@,P0dQBC=r&ހp̞i0WWwECBBBJ2_.\`J?"o"w6}_JÐRXyror20l20Y'\B=Z 6>MeઉkeRU0m7:!TWh&6=+Hjп
"qMLCKA fVP4P21Ζ H_-NM`Q\{`"	\q<&v)2P6wk<pqLC
Nwyj}kgڋx\5:s sgPЅ2'-yxgs.>bsɏ{-xdzDӻު5'8~Vwm۳Jz~ W?_u~,40o=q|։HQД<:lXv*Cm)U	Ր0
k6s@^
q^Ѿ}|W،tHa|,s[$LbxEݦ_>}_02[bnQ5W=OڣD ѳSɿqrz.D¤{4Zhϕ~+MxN.OHsiz]
nriJG#0oҘojcMh3N@ft·1Z?Ep-omx]gy!I=F"=K˼H\:)9-><Up#)"Y?g`0ͰEDcX۽{f[ʳ+XL:DۉYCLK9"e6AOsUZ :jz[laoPKY  +	  PK  ]W            ?   ch/qos/logback/core/model/processor/ModelHandlerException.classM/A߲kXvVႹf1M$qprDTnBɡ:TfBƅn$ss$T1aE/Q
az6H	AϽQƍyWntԩkiwE|I嘑:/do@M"Q*goeBBcy^u>_!=0G0c>酆J"5l9BH:;:'i:1;WUp0y!
q~YLϠLR7QFoN_	43(ok bQMf&&15<3_PKi^  D  PK  ]W            D   ch/qos/logback/core/model/processor/ModelInterpretationContext.classZ	|Wy?]Z,Y˧|;%۱
l,:!h5^lff툣P
[hiIb,)9L)I)(gBKhfvЬb?Ͼ?p菢tTF`_b^JYcFlW²ͮ)kLuel+a:ew
`5m5{餻OP,gqJ鉮#cḡ~"j5D%:XId7lpLX	
{xXVi#rGL561s"t:jkiFK$v|Qz+TݯG2feLuڶ1=wQ4{Hnұ+͌7Ӊiʔ&%@P^\|t|k{c7ruh9YWgD9چkهi27--
y\.FS]GuV/Ы}.i*պv70fiIɌR#1iFх[d*жxv긍ec!zB;y䰑bz$=UA>w`@g56ゲX~IWτ͘4o8$$otXn4H7JɄuaX`.cXB<(^BL*0\ڸ7O-SeTqYXIv1h8Qx{)Su"%#4dmK5ܣex9PdNLٲ+0]B¥_ү	㠕"Q
WI	H22YgR`K $i2wB4X^ vQ90qU=K8'X9O4^9Q`9S#ޫ
x0 )GT"6SsM .4Ĩk'Y.C益fӲhɴii4j)b4aܗ0v
*!/a02'T=btM<]F&0N& K	'3M:ތdlۢ:l_9>i[獱r~Koxʘ.cXw4o{:~o'M>ˎ}YszTҜ`1ݞ:<?ĻT1Dll&R;Sxxۦ$I"i?*Y\?/ƹf}DpLYŭډ:<
t|XR"0LgbNüpDy~vc6<NNJzR7J{	8!mOWI5ς>
S\Ot|FF^):p'Us<Taj0sĘ2amF*e7&Mbǟ%
\SK _e<X	,H`yoH9|R$G;_1YoCF`"}o_wbmMN
7k6m#c!F,nB,"Jt1i])PoHvj̴,Q`%O!Ub;d.h/gܷ?"PN&1b+HK׮ۧ2=-MS8۴&^8IYĔ_KppH&aIAi.>IEVe2)7J@޲mnZV&GW;6s|3\Ԛ՛Hv9ػh;BwjRe-/P&KHSiy+06Tk>w-.'9u
>g~N,ʿP&$?
GY9UZ#9,륕~!Tȓ!"Il	,0`z l?n<]zgh)ә\<t:;\K9"Ya/@LQi|qmhI:E/F/3LsbUf`,Т:Kl?Oߛ`6r WBr5&b4jey0)ͻ]O}mdMww"6f!աORN[+"l[P#vEnѭ^M&9+V	,}{G|BoFz<e:,l6br2B^>g7K48;.]TM
]񈱞W:^:;U|n/;?UP0[͛.P?+;.?FlRt0LOk|ڻTQ]!G-i%Ha5	:)*SX29\>peG|k::guîSyh;8u*2Y-oC=D
J܌#po U	
{zD4Գ 󜯧ICV(kz!5FT8!M{մ2ss#s8GvV0b'nnG;Ḱjw&]G#xQ\;X:E$V)餄?SWpW%NW-5Xlw
oNpߦX)֓!X3#4GҰ</-0ZM`rdIל>Y*@-
EyQ/ǁb;}ꤼ9tzfzuz?㋸Dd.'#OApC LBoOH(J\{&TXC??SUg!tʸ9rxR<>^O_5P 6R+G J֗y ,}DU`Y_jeggQ-jB(P 3?!3
Y^53F{?EAV8z߼<QTYVDZCE͠&$̋񡭊?IT]"	7ޙ/}j|NH=R8Cl
UΫ5pT0 H4>+s
sw꼑.tW[HwuGkUk翙d@y=
q
s|\AѨ VmD4qTMLKEvr߄:*83Q!GCi||*4>ZM>:[WXez \ .VV+*pc\s!)JXM9kZ_g+}hd`\!lSU;
riOGZ}>]4SlZdA-Xt;z).BuVc?CG3TSl(6&D/K*?g@ tv_$_<ꪋ<ʋAe_gn|=xߦa.۱*uv(T/mTC-BHĬ,1?`LlU)D,0:__VQ@X]N_y9NՑ+Zva	TwǵoT`&ZrƏO8)WufKE{PUxy4\FAxy%l]6r^kZ^ΠLd=ꢾ v} ^la.aSxWYEX5W{G?3yddT1jF,c8`OzX뱌5Ey<fiJquEο;^e$!PKpE  #  PK  ]W            9   ch/qos/logback/core/model/processor/NOPModelHandler.class]KAߓĬY]Up/x'BEr2͎ή+A??J<3$ď0s>oX9C$љI	yIcU4uGHFC$X"UNtNZF2Id+	/QS(D<1`U'jYS@bTڝS·\!0ZrS$D"Y^d{{jU&2mxUHB=_!n>_HyB͹j[;ߕ'Y83<|Z程o@׼aGǹ~=A1a<֘JwnPjU (*YpF騅ӭd
ˊ&;\PK^i    PK  ]W            8   ch/qos/logback/core/model/processor/PhaseIndicator.classJ1'֪ "IBղ]񔦟tSw
x	?&󑼽aGTI6QW'.MB|hz(1$)5㞒G4c#~>"V_|Kog1Ԏ[K8,qP]ңȴe8ghacDRCiWsܓ|& ҝJUWӴDʰך9w(l~X%Ꚇp2;v`6uSVr@?W*Ü[̽KXF+5:
TrGPK6%I:  H  PK  ]W            9   ch/qos/logback/core/model/processor/ProcessingPhase.classSOP[-22Q6P*M 2Y2BqJ݊]mǳDFóTЯ|;g|`+2"fK{5V3=޾h|ϴ6-#`!.{K>VRBE+
mVRެlzIT<;-b)yY~Y__AC2R*q1ϵsqhh6Ɓe`TƘ,n?iCX;oh	=\@Vqwi5۵uR@L=N _x)a#`xjK#Z .`vJݰ=P_>˞i85÷vA5?҆!
[~Z>7ln7]#T*5]kK_:Ptֶ͝_b.sd;n LP;Ls"~	BSgHaqq!~3"!*i6}30ΏLO'%x_J|TqD(Oό`?J2)R21I+oco$
Q1R&.u!h^uiWK`^MߓNp&"E &8m-K2d".PK    PK  ]W            <   ch/qos/logback/core/model/processor/ProcessorException.classKJAӼ&a6.Y*D 1$3QEi<X3(EwU5US`$BI#!)nag`ܙrY!v-Zp<A(W;_P[ѷe֋#E2Ƶr
[
¼2L1R6Zu6N?o\-av>?'1!V		{"kէ!f(!۱y2 :d`ǈ7\NkZ)-&.
N<SmCoYi6'@ EB!%|/&GOA$Cq9KDXA!+m}cOBPg?+4/PKQ4]  ;  PK  ]W            >   ch/qos/logback/core/model/processor/PropertyModelHandler.classXwdwg#$\B+$$%!
0%ef/jk++m-6Ҫ}9=@~d61E{>>ξ^
oPJ
!aDF\?a#fj,r=+1-;ܔM'm[^['7:u"h8!*pbYNJA.X??Ycaj,X2b)n
{̈́m:#	.eBuJrR$TqD[`J].,>lTڤu:!pMjJVG@ù0Iؗm~u:VI\4"9ưkXEB7e=+0gܰq]Y.[(P3nB*dsw-s<X'tr$Ju4]3`x]STD+pTw-ZulB@lWQ ops2wn[q3#LrYVQQ	nK1s]nI<Rt$1L0ʙNKl]읞z(j*模CaFn۶FLɍ[NP"Y6Nz@Sc<v2'VcnKw븧X d1OC{>0G%zJŪÝ',Hm~qa w wOO[
k-^
C:z)@Ê(V9~j8Pv
*>㐄ggȴsV9>?cX04,
GtsMqg3:/Kc̻~GqJ1N|{n{ܲ--q`yq>
GB
qaܴ]jm 
%n0r8xqv	C?>'t4ȋJbqp	9;!Sdݛ)sFf
!|X`PN(^kcXte#xa4W%gege.}9vgehRt
utycppOw\R]Ed/7>lytnʴL/#`4ChB\gD
T_	cёe[nީ˷<oTR͊LJ`;/P+>ޖXiE*7P-j 3A#4Sl_tNfQe@gd+A3O+Eg@oYYbfHV9fzhBr(NW=dSt<H+3tt5o3[Bre\A}䁀fV%j[jQg_9.3),A`ז/l>*$/)
(R6UM[N
{f
Fݴůxt9;w ~$.;-/.'~@KAm *P144e>xEë@p;f*{E]ӥD0oo
urم;YO2P.'?P?|J
,L2nǱ<U-.şy).Je
W\,O/D,>S|(aD4Wڹ&"M!)S|굤6OGfQ^TUk:8uUb 5{Or?/ܓZ.OT2Y>O)/qx:M~2斗k>Pg1dO>yܐ$FMbDVɨIdh/MF
Lm5N@Rخ8{FBO2bD^UĞ^yn Q-vm&ZJW=YeD*L%)\SpM	Y
?x9B'ѡFMalUM5.58HО]c#1pɏ;<.U?OW*W=I:`#çf-?Ww#)L7))CF7 ~?Q	R<+hSgq%J2(oROT#GDX~ш{E1a8I`=N |1,%q~	ͤM>orv
6vA|Aw }OEMϰXDZӒ?"9\I&5XCLY
i.4x9-ME}nQ]$%TƯ<jTG1[LC8T RwI䚍PNΔ-CXƯZܯ|5|gy8Wīgs&K"U;kX%
fw/}2C*[^F~d>rBU>)U4>PXHb9·&#ҽ=/mZ,7([hJoRq"BIף=|S~	Ś9}[0ϢGbGc4{gޡŚך2j[=Jd!?ãb><2P	KOCR=_Tϗ7xMH*q?/+PK4	    PK  ]W            H   ch/qos/logback/core/model/processor/RefContainerDependencyAnalyser.classV]WG~BA]Ze
EkfgM;o<b=?n&？3߯ p~42х4ä]-|/Â+7׹Ue 
5Yn-PeȽ+Y

sikÜ",_A7zdLdm']pW=qw;CF̹<roESaGLE?}dK^qϦRqpg)w7Qxuǭ'rNhUcT,{D`CKnXѶ/=о_I%=lbMx?1a,5
|3DIŨs*Zw$ꂉTݼRYd0	91 ȑ^BVùi
8
&>%ʗ~b;Jȼ80iq~4ܭ; 4EM|)Go	*}'Jq*"]kҌvCN{Φǣz7ӤrU!BP*k"]U8="6|۝Vװm3o249IBVIU= M	==`T;Vm:hWvII`ʦjc(Úc3\xf_B_1\+aO|F	4~(kgRٗe=mGُfEݺ955bd\!~-tVt.y_vU}+^i<^9#?6P_(ͭ=)Ke:f(v[ =*ƆYQ|:H!2:.C	Qs6m`bFܭ\QʭX{&[9e'RhKWϹ η"֪42eA=A}
zMh݅iZJ[}OovX6+ډ[{Ho
Id0zbubЫy,KR:pfCr$q("hG(OK;]ZW\)Nln|Fj'R}!0Lff
=(b)i_wc/t*\F#${ܧwuieZ+ѳ٥*X@6.yk UֽDQ/C}㊎}44$ѻeva_*
V1PgO4 [AbPKZ7    PK  ]W            M   ch/qos/logback/core/model/processor/SequenceNumberGeneratorModelHandler.classWWG5,̲',e
ȥ
;2̬3(}? ϯὈ{7%y]evTUսw -)*(B1#xQ˙׍<:$M=qbޫ	O1hu:7X CF4
>nxppBLs(gP'i7OSH[3zhwM{2+جb*岚M+:MVe7!k:2Tԭ6\3\iֆyI'm%>õqmӓI_km\T؁HꮽҭVQ]k]됗Rح`жduS.uvvJҾx.O֊T	ۦ)N`~F۾'BhXϞp41Ds9r@Uuu)pXejf<2uw.K.HXJY>4~~Lxۢ8N5^CB8)?Qd\ЦN87VT7Q>t0,0-Rэ mY6"yNu}ӶE/B9׭cC<bEȜO-dc"pkhb6!(3)*v2LiHXVVXrRF1paj([gt+͇&Vn䪫(ūxM*t3̓;(I:'r|iV?褽a(7aA=C1tkDwM1
>5>ḈQ-OVAn?6dxH,)Y`yjPԀ<!5eB]Й~D7'mODZyG2BDnΟ"<3D12Uџ/ӂ"?qn,uKh$z*[H<ѥ2˜n=dN5x)m~Au8~IxA|D;ijtPA=r6ŵJ0tۍhJ}#kE>iz)ĴtWвysy1K|kqa=L,יFnf3gSCObyw,DnYqAYS=D7䪂5UR3t2)th@>t#2owH.t#
^!)&pmhaŋ0JzR1}'́Z* XobEa8dQ3R!Y
2(f桶*#	C\Ce`Zk RxDG=
Í D<Z1ǋwQZ$ANhgw>1'nO+h'WEt]ي(R4c3$&j]8L-8Du1\ BA?EAYrI^QsdTҘ!B}7ȋR% }6oRR0zKA{5n4@k{ysL"dB\<@/wH<"%Dz+[X"PЃ ΢P~a{pekFWF콅	L_PNͲh
Ln$P?O\~PKVkW|  i  PK  ]W            D   ch/qos/logback/core/model/processor/SerializeModelModelHandler.classWw4 ! @ƛ@ˉT&Iǣ5X3#tI$M%ҽ.4?9i=B`霧߫oo ᖆuB맊ܬaΧL׳R]'!!CCTH%7gSe5-wԨ\2\<n;v0(̶~	kyelh_soC8
بa!Hxe
v:gsVEޞxFzl;eTpR,35l
<p7@T
'j 	l!c43JL
DKY}uLy6ι5SB7KnѰW>쿃<iEs^@vb.ITZNV4bQMO'm?i=]_EB7e7rwz.^ޕoH	̨ilxT,]@A'Ke+^_!N]AųxlI)saXONe+V]YED#bN񙷝\2p|jTq:IVO<x\SJ8>'5<c{dW2	#&QKR USn{0.NbD:N!Cn_ҕ@.HhƫH?#Qp&*d}YK
-t\ǳxN`kɘI4);(4ҧL`\:Ĥ$bدt)8#_{tC۱^ئnJz+a,=e1KtJJS QG6IIeȃca)qTBXjgmQf-iIy&8]0f<-"7Q)3L'
<(IfE*ːiGOu|\q'=ϥo]XcҬMJ8,w`q]~*ZK`KiǪUU@Y,z^g+ʁr]l+Z5ȵ>Td<%ѽZ&&HT~,Upvߓ]tsYӾ<ɧR[
uM3P"FDˣFYEv݃ufF8}~ָO.M:d^mϮ+I"e[-2y%'܊gZ}Vr݀(ZAQR`c]^%7_йZ5Y=Ɋ/Kl~`;.ଘKFH~*O
N!P'~ӝZDMuQßde3gwު{tX&\'	^S/@Ivm-϶(:!ٝNVqSE!MjIjc%?!\
boڮsW|jTxV(|%FXOI-twp b
 j^%$TgWzDoUlkYEmĻTyyGxz?Гt8~OPH"R`ZhBKDx&K1#]"}
*&n"\i6%ʱIaN<]8l{p'8nJ{Ógs\Ms5-Oey>CM+dE)O
LSo4vK4\eRŤ~JWU|z
r|7-[<
!|(|w]:6[5h>iح᝺|lk	tW"^T
gD3cʙ0ҡDTAEѽmPmL!Y/5l`%إ:4X:2dBA<w'Is{1NrK>p?C):Hw_AG%ҏ(UCJIB~*ՕF>S:!n:4\g*,~_w;yWj8TM,"PKa:  ]  PK  ]W            B   ch/qos/logback/core/model/processor/ShutdownHookModelHandler.classX	[=OiQ[q$6H3u6FC.)ڪjdc2f&f茸%';3|9@	&~sϽo 6JAHE5jgrmմLkvY;yk;Cr=YYSw5W0,Hc[~koE
"*6BX~\sրm,[@1>Ǳy'&'TlfP:#ߕlP lh*/"^v<)N^nJ%4%/iWVS[ӞcXܥoQ𔊷br[<l{m
f^Xgi;}yo^jM~Oaӽ}]g遳Ɂӓ=ɮt:5']m"J>4؃Oj3:sѼq4sۼ\aWq M̑Z
EЌ
ZT$ޝf 9$\jټxa<#В%h/KH{	IDnjayb#xVq	l^/_.h"Kzc2OI'ǻFRvkfSg
rzbIE6E!ШKi]l)QZ,"sڔ<b ۍb
ӻ{L
=%nQۈH*R=la
S V8T='MLwjFL̀ueKQvFӳ*0.fNn_ќcit&98ψ7W|*ޅI)3-'C%lA̶|yv/?uf&fo?h/HlLНLI]0]n
Ud;|j
Д*fcC)XQf=O. ܀EضbƆbN,v^`wy}Å!;nIߔy*
ޒ/x_;2v
ޣxoL$YZԗ$2x.|@!M$Zi)p+QQɕڼ/+X~Q+^iSL'R"F{8[[DwL30M[IS)y11:xrmg٦I'<}G24{mAe]U>AnVg'҅</gL`k	HӖbӽZc
VI59?.ly#55q >M_}atWⱢ'G'f]Z6!-Y2^nn@ ZDbK]"7
~^ҞUdi'W=.?yȘ_u@bI'0!sݶt/ggso][|	yq!;)Ɏ-KV4|y{LY]0!b*k$x А,bBη[0}A261G\6[!~rGi2+#ɻ_xÁ=,BWݓ䆅|(/#~DfiÓJ,;N^ۺ\U7]kC~Tc>͕gڀV9pCW@^k([_?H;w Um}WyoDVy>^Ef9Zj-/֏sR>-._CL}_k|'Mp-5ѕFZ|#ju}:QFdiϯ|heB
qoaW[(H}7!.Q_hG˫x辋8Apjn`G[/fn0Rj/ܤga;rx=a*Ve>w8)tS觍Ӵr~y	$)0DdS>`c־o6aYJ ym|Uw=zt>~B>Q6
~jbA1izA*ټS-2Wƣ&7 S~pvtVb
{pps23吝s.aJ5	B:/`#<"QL4LdKLMAUW6e}W?kۢ[Kas^Q%Uw"WxRz׿|}?;PKҦ%X    PK  ]W            D   ch/qos/logback/core/model/processor/StatusListenerModelHandler.classWWIk䀣:1r$JZ'C1$B$Bj@k]ewMߏ4I;&mW\>hmsZ;Xs{ѿwo CB
*"hf8/nִf4}>.Enfˎs׵x֬ɝ3$S A/lA-
b*Z2oG߸y7oSA1!ǱiĦNm>;uX@ȋE-kj\m\rbK\.˰];Зr1"w3lR#1t"Sàqo\-u{a͑WA$1RV3;VfYpsCGj3tz:HR$-$9k;o8Z u242
UF6C.q'䊟C-DBvh|(H)Y)ag)U4LmGT<Egh?T҉ sfdqՉ͜	~C!&Rh.JFXx
P$4"K͉::N}iR6
TSndQ1wjLO0<"QMO]
xAÁ@ec[Qs*>'Zh]Az섊ϋ߽s5oJ4)RRQJ
y:b"*y+WR-
zRYsYqP	L(9ymH?vt̊Ce:isgЦJ,0*
yc.&"D]vWU.׷W(3OxҖIKzmV>4/D]%Ex154+[RNi%{ZvX7U|K0oR'Cxeh/Tf3!#򶮙cw2bJD	;"T'wҷuWwOyM]w [,^Sa˓ZЍs5'7Ko`P ~l.IT߅;
'D:mlHaODvњt.&;c|so˸(Q,[tm^UnްehA*Wu!6nW2J֕+9Zy{%Fq}IsMnT3l%YMEw8]U
xSw<0E{NS.ַb_fp@޶+\sb	*@LIbP3qX䧬*]ne{RqՄZr!?a/thFv|G:X&t
J]h_&|sbImߕk /{RMX|^˾ !135ha " G*	z;B΍ {$Z[yM~ 9lKoS}}D_F[&*dDJw"\E/I㽙xF/1ⱛ8NWhMae(m7l2B-ULv*N_T/	HDO'"B?Hfp@ă"~Az;E
]Ш]ĥ#X#G(RX}9IZ?!7d/1zoo0{DE_KA#?l~BaڮZ>"02+*JH3E$}MMv
=bL|ٯNPVQ O@~.	$nNOӴfj|PnIZt(EBODBWĠo\Yk1Ym_Q-66w$k
DhPKI~    PK  ]W            ?   ch/qos/logback/core/model/processor/TimestampModelHandler.classW[w<<"@p-`s7Bq4mGckhFA[zͥ6OyCJMsWRdbceo}9?;ka e"N#N|3^0W\+7Qq=hUOgH
tw}Wzƒ_W`Ld
Lt8}n]Fʮ7+0\|k9ҍ-=k#!LI\xw}.{?WR
aI\<Pn_^C۷ٍ&77Y
{S&AB/ێ,e(4|.yؾ("-iF1aa@ƮVT%1k[s'l%/J7OC{풡=VZ7<J&kxYPZe4p7lW\7vq}W"Zm(,;Yᒾ~M&3oğ
t31Av]8N83O#Kv]w4!3pİ>ͅHɺcN31_QNlmZ.UP*[_Om~n%ǨutѮ)'hHR8&Lo
`^a~0%nMBR4&dw4h`f^N:`qEWzq`6y2X	ʸn[xprr!܋
ҭ>\`Q%ݱKqU$0@FVc
2Iu)$W.E%B?"rzCF~H
Q1חzEvJa,plo]=o/T%m6Iͦb~{T#a]fnrӏ^`fJVc!ώ/^xvʝmIͩ1h%'Y}>z}Of0vaEfT+|(m4A*oQR[W8/evEQ?2m&ϮY>9@;(=n7
#]=Zbk Plvc\ZPe3ժn\vT`|аo\Z$"x֖VLǖN&mU_PyfUIQ:[&ǂ`X88@W__q!lϛr+seIWrK_ܐZ_1n6	ocw] J¸&GPi|q%7x7=sZ*92WK%{Aec ģ:|=
us}2HOb܌eBEP-kĿ:*;ȗ
O/bW)Eg ]L/m<lwW\D(/'xo8.p 8{(.6;H屑l1{cqj1}]Ů"fR1U4
'k?t4
i2 8]8GЇ~c}zOSLd`#dQ1	|ȷelփkѣW@~ #R-z?p7ď8JSw861ײ<u?OOc~F]e'~]k`]Ɠwoͥ|#7ghׯKH9]ğ.CPK0g  ^  PK  ]W            F   ch/qos/logback/core/model/processor/conditional/ElseModelHandler.classVQSU.$YAtKm%

V{!lv
C3ﾋԩ3N}ٟg7[@B̰ss97 @K
"21RʷW+j9BZ0۱Tẖ%njprԽ9t!oc:[Z{erC)85gɠ .\-s-ǻL8#<C1m!*XxRVBdkCpQƛH1<\1<G7w]n6hxtDIl.m0p+Q@ʴr=nz	вWd158z#CW;Tm[h<wed0paGx9jDY2m>fc$LʸFb,Kǹ{%k1%㦟^M{9ɄbV:2H,Z*76P:]\	,KE= J$k>Zvze3h*u0@eYٶxB4w)}I=^wLJ3-
e4VBc'965~:ӆ/	3L;F0$};QgEMVVU+gPgHTaXϛvhOX%bQd]k&zβ<s"7ŞM\hi-ۖ'%xOoG1|C|)aӟ_QUEz9TsUWiĲfWRQ=QeNڪؼ
HK%l1\nJeVWEo!zG93}Z=i6Zx>.a1l5@++wzA 2Nd>3jE{2qd$ !@gd9C?7泺ՉӑTw$x*x\<;$FH|c?p;ްQ	}AI":71J&"3CQ8?L,>
W,(%$eES:+f/ƨ/ѷZxٽ 鷃d>.I	z~=cpHPKArm    PK  ]W            K   ch/qos/logback/core/model/processor/conditional/IfModelHandler$Branch.classTmOP~ѭy_(E@/nfquصv|'	$B4>-ss{o DE!g֍onͷzhUa<ztV`ަS^c`ꈡ!Qxruk=Eבݹb)ת :t0juĐPY
HчC̴]G0d}~
;5c/̀bP&f;vSl1g.d/8Jg9ŋ@?,
3홅l9F#!q\&|lvDRSh9b٨KَO]eYZd
!cm"#N <zP%Qɖ-vk;ML-i%bÒ_Ȳɖ*6^pOfVf2"3@׌"1Ә$m&G;	W,;
ci."!Pz:EG.3YbpZ%I+ %{@Sc'9{rP)q)3IMސHYDÑb_v#(Rdqi=mu7hhuM&c&Bp	sXX	PK阓    PK  ]W            D   ch/qos/logback/core/model/processor/conditional/IfModelHandler.classXW~N.;2@X.%RnɆd-"@S X$dv2ffS*kV[*
mj	[_?9Mٙs9}Ol?TsMNghwl?

b*lbqrv=G7|]f,۫@liA@3H;0;jX$6tΙؚN=]@1ȓX;㔄/hcKLr+p5b.GW`lvj
XXeCc
;+ 9hڹd2i]H:v2I|?jA%6]״SK*}5Z.y-6-JgG
lFR|'5=Lk~:[,
Zܯ`0G?0<3MJ^
ZK\DE؄*RhXsCFiFwad@F=*ZP>aQe
w+E{Tl{6W4,Wu\/ScxaOYJ
S.<D?<_"|L\-͇4J
6"kvy-`ڣb/цeaҵ%J`S6H!#@*+yyLbX"xp^`^O|̴t8v@焳SeX3fK!7)pG!uH8
a=
L+gxqEZ!\$	&9'CY.8G)Qyy؝SIr)xɍn]}~`f{@GNbP<%`X4`Oy@Cv3
Kt=c:2Bl!@UC,^1qnrTLIO,@-<_|8^Zd1UR960j.pXj0Jay#,L ^җ!y,1\*=7>C*ćn՗v4z6N^YUEi
옽$,Oxz'4ϖz~\'5LteL3tg{tepNH6'U3A׶V`d-NG׬KU+{CepřP>>鼙9}bV\՝xق::+ƴ) \$ym45I|@n>'u0<	iƺ=GS*XX{glZل
:fC|6"[=R̫wՊn'+nLme<?(1eaA0xZO)kBEʆ:NDvXK!镤TO+efMɻtzHr݆tP[l_(Mg~in䝜_æ8x>ے)qZ^so00o'li}D
T0etBM U3,rN1˶6+7Qg((_S",Zh=}܈4c׈ ?5{g,Ak5{jl.Eoq3VRs@ߦUQ-A}ħ8o}_XL^B,Ⳛk
j|_WLk>"dcRVy|x"X-/@"u,~#	<6@*|sِRA jq$!%}_+BT%wR@%ԥ+qo*ϱԫGRtomUͭ7KxZl+XKW/@}l$+80[8z̶cg}q.rIKZ	cMll~
BqV2-',K%\)caFx
Kg#-44t
Z՝XF{UT``	x1bu #80{pG8GcxYZ/8^2N*3^E~Kη(ɟ(IIc.u|<%&cĒk/*[6r!.\|:6'>~@Oo)7@Y_SWV&P8)Ѷ괂6֑dxL*4SB+xY2|H_}
jH̉00<dF60a;4yewUQRy)U)^%T/E:תPakth*:EC_IᏻǟvPKM	    PK  ]W            F   ch/qos/logback/core/model/processor/conditional/ThenModelHandler.classVSG~B4
4mQy*T(,/AZkB$w׻
Hg~ر3QgN	B&}y_U
08y;?:w
מ
C?s"J"6q[Q"`BQs/W4C|\9`
-c=)$fvq|/Jx^v$JQ`It☁&R80մdABrEY5鬤峥@>ch~Ў.ɻxG%ԜH/X|KX\02/	wc
x(o(#{L4C;t-nigez$L|`C2-p+ 9gMgB?C"U34(c4Xs^ب8gb*f0x,V6oc{y1xAP.2O-r'=d;? l"CǦ!<QR6O6Ikkg+>6	2\Lwn-3dAJ&Ur	,7Ab0t.X.E׋4Z^\㡫̻;g 6,
C"o\hv4J!lqo=C7%e~HA#g<"Mg=HD,䚹&g7B)"i>Ao1kTJymJe2[fxhB*£3܍*}sF$Gu_>ȒHgH>uD"~9tĜbյ]P@%xe$C,	sQ;a@X~hURGq|ǺG`oJMC	U`ehp BpTց?l|T)fxu:PAHM4g8ӔpON5RU=?\Po
-#/Z-gRB0I
74K7q8Lk#/p]8A@&n}YaќZњ2$feg^ch6>RM8Wο<1:mFNұ?1Gұ0# {t6.K?àkJ8:6Py
ɶK
|_5z^	$ySX&'뵼]`QAB̷K_XpY[%IF5,w_ /߫+Z@!
c=^/zfpQ@_PK*w    PK  ]W            ,   ch/qos/logback/core/model/util/TagUtil.classTR@=aq Ydm! 
Q,VSOhf!=&=X~M&U,2UӷsϹ}M},^CJC@=2m;|KpCf]7u4Qn	àS6?dȝ]ӑ0h$PБ'k*pRAGZ5)2)tn%o@~%&7ܨTD`PD~V]kXI[~؊00!ưZN<t2wFpUe*dYg]a00~qLY
עMV^QN֖6yFd3.F_`Ы튭d39=B^_fQxSl\m7
9JrE}MVG,H.2P;-I*TYn
xPXks:池iTg'/wE"]2>3+oy"ܭV
gpAEo)JvBaq[s+O]0ؕBar(ձ0ň~u`ћALl7qLEF$6n'ΟB4{*uh2=S#8	{$.zIfTоXpHHvKEqC$DtZ8$#Z0,m hH+fKxePKM  H  PK  ]W            7   ch/qos/logback/core/net/AbstractSSLSocketAppender.classUmSF~@ߚM)2NjAhE0$WHtn/d&d_;鞬:N{{ϳۿ|RT1ÜZëW-f{>\.R5eӳqQj6[>Cฎ(2es4FVQT`qo4k/.O?3D6Nu.̠0X[%%	QpV9L2̞0Yk	ٞA"sz.!
:.<i.{w~\VqW21ZC{ㆂ*>-{Hqș(fX/|;yFYU`|`3ӝq7=nhƜޮ|bUdq.BVp ,_(<5,lޔh,JԾuV3iwz
*tFZ_>{\5&2zԋ*~ KoGg!;nsKו\j)qFk-iÄVbIP,5o&_4?.U֋y+o[VH$4ߞǐ{D u
00yr]K|j1էzqpX{t%QȨ^˷#i	PG1!Ӝ˄|hFR-ifR? {E!viR5Zm%|iK#IU"R5T(\$8&FC4}7n>giqip{{vfwp
re/y}E7B𻘧6Feu@
r(NhahlΤq	gǲt?1WȕSh*XL=_5J*NQVy1}H0ֱGbPوpT'Hhb+bn"?C$G/W|˕ IE4	:-'PKr  	  PK  ]W            6   ch/qos/logback/core/net/AbstractSocketAppender$1.classRn1l]ҥ@_m-8!UHTudۭl7	^C!NKfGhb50{mVAQ&.ʭ3\-K`aa۝.y3FsHC~³A2?B	Ceei>|mjB+%#pD*g#\bX8ëR</%Õi;[1Tu绅{\qSx)2<R{c7iBsÏ
TX1zl|VSQw(-`B~:n5uڒ<[+-nb5@݂_.ڷ:sL
i$=w|C
Zt)xt&Q@jHz|KtjK	.I|e@>R)?H7C˸&y7 M|,0PK5!!  c  PK  ]W            4   ch/qos/logback/core/net/AbstractSocketAppender.classZ{|T~dˉ An2@d	T 	rAPI22fpVVZ
^[Z]knݶ[no֭|ߜLfh9绽{y
/3 .j|Íñ`xhGƐe7n[qkg p(BxU 
k
[ۊ(p
E,|[bvz¾]X!vN漳r0\_JLs-LJ)41@:,ȵ4nmCEKP9JsIv}]zpF-_8"\fr
AYXhbtFO&ޙ^ϊح)꽁+W=&S=VwF;4
'QpҺpܝf<Yi(
zloԶ&L
#jocj챣Ps^mb
.rF,絷a~loȎډ+&v)vZLEGaBvF&)ʢHض.*tZTw&tXѰ;sᥜ
xr{S3!msNPo81w$YVL~Db [P	607=H)궇!A6b&z+SvrbȲߠɯu&k	bչ'&

)U(j
;H*dvYAfxnmÓ(z/9k>&jr/\XBX
mr#f&
'ˊvUe":)U131
a6
mUѱ.%q+fF<^@/#t~mn"΄r|p`I}s+'ࣵjk;k&Qv`KR5p 7~	+rƆr|8h6NlMU#`[hs<<hww3\.:y(""q~ŋlj	1x!	¼y5Y}bzMe*=OO3D'>ogUVMG,8js&>/$L6-;BJfWGggGO{k7'W$5#UTt&j)|&cTPeoxq{0+9;KUpZ1ɤ#467swx+Ka6;2i y=T:tWT}6wfIeۛ@~Z5ϩBaa,=p<_kÖ_M;]t(`tk욇*JebnW2nP^eUݧbƞ˼L,dR.kx?6+34dy}1h ѝF,l	'
m[Ϭ[_ĿGLm t67H'V[#LfM~,5NYNC';nG6ay+NnCG&~_ެZWa
{ -o;M'׿S1k,R	*aVG\ŎO?mjrX({_dݮXwxrBelҹyW0R(.6.*'M[QM1GkÍ:X\VeuJ0)3\L	
Ey=	4nZLo0p>F`8:B=Y2ŐJSJc{L^fx&(S4T+2ÐjSf*=gBhPJel;EZsu<W݃Ƞ,2הyr8Tr}[4z\]=~u[&#}u.>oKd!JU<!5Y)WrJ
rkr8sF3s6kY>U&u"QO!>I,5d)S63o$hg/C.8ջ׵uؽHUPLe򙝜Y>[{;7hklZ8X{'glkkӱ#8)9ھwG2$oMjUJ{C!oSfRzۛ,>SuʣZ~R3!>2`E{_0Wƶ鲇LKmNG$KZI
}*4X];hbbaEgD-&(	bV^Ex+iY[51J>C-_u/:mYΈPo2,a1'8sUgQеJEe%xTW}]YbtXZhvOum`FʐKA^o#e˲]-No\L3rVԘkͩ/Ѱ~Uevgw'%1*MwEܚȼIUsn3	%MɻX62U0˼fu,;gsfK[UMmMN6xU qG},KKg+fwY*_*׆ö?V"P
aSwЪ1݃H=B&ܑE{HScR%Ogzlɰ=\(5v;~%r:nu++ۘlX9hrC Rni&w%Xpp=`y4%^g~K`}a}A]73FD^qf#)rL'9jZО.|y0$s&& `3-T	6+|h偵Eyvō |abRHƝILɮ<yUBL,Y~?il71[VW&}1;R˨>~O<ނ{>_HMCF\ݩX
=.[#GZaK9
zaUze](m|,v~%N.䲌3Wr6xߪsS<SzUܫzt}cg*i;OySKǹYR>xԍYHly،Bq1SwbK+]2CA8܋rMp/^Cp+\yUa"~8U({m/w_^pF^5Ts880m'}}G1K7O
9e[֎ة(.NǐGB>Q#!{p4lo-\q?rn%!>]Z!bSmi("F\X}~buThǍM4ísEwwr=
D+8p$eaT~뎩tj7	Iq6S6Z'.~ف>RSk+ᨙ{OpJxX*!l.R0eQϥa~OcRBr,\|K(Kdg=u4SxlatAyN2ɣ(Tm(e+hJW|$GD=siX)ͻ[6R-+a&٬ݒ^GթXǺaQi	-ے()Cxw*ɆNE-~/%!q3#H'CI|S')@j9]y|+.(A{7oAJӄގ~BQ
m,#WE%e\oN:/2wy\HEK˸پ~x;-k),$.fxYt+5>ا[M7o\m9ʲ*y<G JJy1|_|+|"Bzڷegm^PTAu[
5|ŏjPQ9_tBv?
7;*],4;	D8hqKrWDmkS?w-ծQxVg/ ߣxk>y!ԝtǚ5:,LyBE@WʀsNi</t<@M6Y̘0*EQ)ml?LQM.5v,=50QCCOo2?9%sD.F	˕dTᤀkXϊ_,%4+$iї!d.׽eܐXAַPMU5EW")3Mk?O6a-$+oU
3SLF$bhZ3Ӣ$]mTK*B\-,}މM
!T:T7<+%)9׉`uA%Y;Tl)@R$iJIҤ1$o3꟦,Z]IsP\m脤yv~NSV^Bx$BxQ'N]gK zuRd:?-&W˥~Hlj+VgN)Vg[V%C@H+)I%8WUD$MZYT%-̚4a&S"gf3;u6jcf6&vfbkeO.fv+lˣٽDsnfI2{Mn.f65<]W̩ٚ3Ifͭٺlfo0[Wʩٺlrk&<.Σ"Ǒ}܈D*? 7A2y+oA]?ϻW??'m!h> R<,bPKbRm  +  PK  ]W            6   ch/qos/logback/core/net/AutoFlushingObjectWriter.classR]OA=VB"Uݢ&F&HҤFuvlgQ~??xgH`;s?~H i eb3`jsO2?_>cH	\IUo9=-v[wx"N<b`7zG([VW&2a~n$eCEb(i-Jt{\n0wryQ&J?}
ij.MK$
&~u^K3°rgT,zɐZ9Ceipmjm7WaJ={,C1_|xW"2̞5Pu0-vuEz|WŋDTn 	K
>bB$$ݏ&hRMNaث}L>'69 e)0Q&T2Ӊ
L2)fgń; ,,YTЪrq%
)Ӵ
^%)Ի7Sd?#u'ڔsG5TӚ1̐v-60Jc	PKrW  9  PK  ]W            L   ch/qos/logback/core/net/DefaultSocketConnector$ConsoleExceptionHandler.classS]kA=7MI\mMUGjZ
A!RO&c;fN4,}Pnbե
20c9̜~خE(;DJ:B6=!,4
ʨx8/xCԈQv̤0;6؋q=+1jUqK}\DP?C*2,i5.: xk !icgGgrmklYb#|"ձtF*phV^$&vK6jw<DܩV/bֳf
[쿜:RC\nwO`BEg#sjώc::bTByW%k>a"/8ۑH~-_^XG_̣T*WG⸸1;{)k:\ݟp
k	qcF~$'x۟q7?V=<L2)nf7q+-LNƾ,&gu&*?PK2$    PK  ]W            4   ch/qos/logback/core/net/DefaultSocketConnector.classV]WW7(Jhk+E&&Zb\atB_?૮%uVFGW7CEwΜϾso? b#S/8¼Uz)yTBdeY$k%	Vq$gm'|~t.6H2\x2\WB*<Y'T ҔfB
ʄv+
]]ϱ܅̍GL#Вk'n{#`X,}+>_|b23$R;uAt%Q] ݅-rM|KFWk'75j$8lF7`ve2.U|_{:J3q`97_Y
eYn28aउ/-Zݕˡi󕉯q:
)XTKߘ8	ڲR
4eGH&
W O Lm+j"Kݸ\K%eIAi
];сț"R#mYvM5h:]Ԡgd[,bEtmi;$dA1"m6621d9pm$N3BN{e)`zɼgylso.<EN4-mPܦ:EmˉBY_JdHQ٦LvL,EkI0𐄷xV-p`cW؞\-4#(v՝۱Ķk_վ[6ڭFBPq
;wYdVWeR ӎ]D`w[?|բG&c8#O>mwvCe
+r$G$x0 3XJӳZ,vDIrIL2*zV1O9Ks$9NgC_SSУB+|PaC5[__|k%[4}HyQMQbGڙu%/ߌbAE+i󷇿78[xEΧGJH0&3,ܢ@nkfCc8qéq܋G(EQrÊtߣxg
7Vɍ? ~oW1V.ޣPCԄbeV".e]XQhJ'[U@ź'jHh􃇥FX[\byMT눮)ViTB-/ڿgccm,'ii
PKy5X,  Q  PK  ]W            7   ch/qos/logback/core/net/HardenedObjectInputStream.classV[WWNL- *7B{j`V鐌dtdhoǾCm-ֺjԇ>t;]յpgo{^|^5*jQ'6E;rb꒞tٜ3dtmFװxQB!J2~ˡ
t'ӑ+v6bSZr$ig;cZ&[zG^~0=#%wÌ2Z:~j	^]FhX{5m8Te#ڌxل<]FS^4	|gR)+ljth-3ڼ&u()}Iuц
*6a@
EcZ@MG/FKk:?LTEū*А՝%m/8JH>:Tf{4Yۦcm?a.XR=(Ӻ#@daI=*vb
#;^"4UG\si=0d
Ї}[XZI㺞
1z]AqYn&(*^] 	yuTA&.gmsN/۵
*%tc*^G?%b'ccGFY窑5#
8&ZXAu7L鐊jFslBc1nVr^PpR),Ua*ZvDwܫyVSq	?P1!Y~%Y	,]RӇŭ1miN.êٲ. ɱc11HByȆ$43{VS-vtl"FQ;EջZC2~;ET↥f̘6eRILh,2Ba6X;/ǰx$MnhGf]
2Ŷ)EtQ
*O~N*Ii|6k{)v5JGi~XcXI{6J_f;sB;g*X~vkKVTwT㰙jRr־s9&¼ڹLRNr2뒖-K<*8Ov  G0.p$d_	oA|ʕ'OUu(\"Ӕ܃](X1q~Ěm{uۣo}k`W~]"7E,z Aߝajajɕ8<<PfiqQO d,@Oh]+wݘ%B~uy͂U"Vn+1 }#Oia#!JqKqgQ͗H$%_I:9޶o!vOJ}UB0(7fWT	KF$ YX([?4kX6:mY[sú[ ärX
#0*~N)~&,S|A	˸z20Yfjbr#n
{XOz1C|T&	~e{yc^KMS-%19TaCfLxgG'joCwRMYVB<k3|`
PK2e:  z  PK  ]W            0   ch/qos/logback/core/net/LoginAuthenticator.classQJ1=7~v("|LװMM4o)X

~%&"j}0d&sΙ}X"Ƒ!Xn6ӆ=&F(M9RcZ=Y@N4Ram(ͩ*Ps-YTg4b2F:"J6wA,	6%(cu3K=>	ҧƪ)BnkD>δpa0m"&!RߚҚ,JRuuτ0JCaNm;UJN9]vzz=L>%筭 m튵c
SXǂlʰ!!R_u[rWg>*_<$_M8!6'PKHh    PK  ]W            *   ch/qos/logback/core/net/ObjectWriter.class;o>sv&FblT}̒"vFĲDļt#k9HAT]Z3˵"9$3?A*3_.T_Zꖙ4J^=z6FFf`:
gX4sL PK؏f      PK  ]W            1   ch/qos/logback/core/net/ObjectWriterFactory.classRN@}B\L!)
@Qqo=TEXE@1dx.W)R(ĬPDvfw{gl(`AIsSx^s.C(}Q2_	[^>=NPw;"K/iSQwP~+#c.]FXKS(?!,n#՞%i74uą9KV%ط	;yPl3ImH#ՖDx,be`TBzFifRe=BA&{72`0o?eu8/inזy^<@vؾǞO~~gR\[ Xd{BVsԒVatG3͌6@m9"U>rPKI  1  PK  ]W            *   ch/qos/logback/core/net/QueueFactory.classQ]kA=7fMiTPǂAVER
>NC::ngZw|k}*(ww{Ι˫q
1&&P#c)2i`_+Gu5G_Ę$&L&Tn/
mHYF	b$A[a|a~$|8jV;k7ryqk&0
t-#id#c0r{<yh?^dI%2anchoV:_p&wz㠻鱍BM4n_uS4W8;8O (g8Jp	
<g=,pWZw_._~xJJ4{r=3},2ou<ºARGxXZzǭZPK	O8    PK  ]W            =   ch/qos/logback/core/net/SMTPAppenderBase$SenderRunnable.classnA`p[ⷭ-l[714K4Jp,SغŤw>OGW&>e<XZM3=s̜ vHQ0ǰct׎YN4qfs_7j{=n{<W˾m-3]m3հ>JIđ!)2dHknw#nu״M5%#
A6N4_.z?%%#cK3ٰĕŕʸ	1$=ZLS(4cIxN͎}:nI\<܇Xъ&tմA(L1tX7)FJ.{Ioip[3}wvMwcS¿	hq6Lj
YOgG-!?mV,8O&*w7"z-u	IS](h@:pN!Qԍ!1usyuk]3Fz)#OG,rJ`4RGkEԑ>M'=OFoLQrBQ`TQQxoX"'[3җ UُQN68
,h
PK^>\  G  PK  ]W            .   ch/qos/logback/core/net/SMTPAppenderBase.class[	`6d3geCADCL I A7	Y	ZJKjZ-ڢpճ-Z[kkֶ}}ﵵx?,
ٙ_D@} 49Usi<YonԄ	?
X줟|ThPI36X+8Fb{SA匵%RLQSe״36Jm	vMJDb6//$ܤQ+ڱزYVb%VҠ1L.	m
ڑhM}"I~MdItU!۶Ўx-F4앑:2Ѥ$&+l	rge4\Hl^0i2T{VBELL5&v(a$&6DI3d sI3,	"Hh%MT
pƊmVglmAԼ$iC;1ϤSPrG,ܕV h|LK{tbkX7bv3]WLLkږ:] .4Ldx+HZvc,`4K5NfK"p"xO-60
Ȝ5燗RgI|V"O4{c7e*	4DjvN+.38v
8{Ij'oq3o΄䭩i3i
e2\]-y/s7isB{o$,MĻW%=VXbiR:v<oCX@Z V۪
X,n6W&]DࡎFa.ӘF2c,Naݡ-VcV2)geR'mr$Mg#&]"ahJrIfaH"vWS2MqАcҥ|iu$۠^Ҷ<~Y
n͖O	EmmSzBP5Laet9R+5KVzo96-n(GF{iAWи=l)'࣢2=ؖ1ϳ-%}Lr9J]	3z锼\XfE{ĜG;l=lI7I(n{n56u/'b[Uw%;MO#yz`D1߃({>7(&x_l]6y(YZJ.MCi	Yyh{nKdI_/#Dcw#7`cЋ|Bs|s$Vkw!D'Lڧ	%?'EXO1M?P1e1S NZL:LG+"ֶmmͭ: ϘLbg8nw:O%v<ebdQ.e;E "Y^L_ўv"K{q;G($co2nI_WJF _G#G a7LzU1:e4^^om^m-R#!Hlm(k8^I;
I?!X] LM`"VK$$lKX~äOL4$my+rOG<ovEɬl@Xޢ_Ԙ,О&M[[AiVao'x<jmiZ\WJA3&'iƐw>-107nq,Iě',Ja8jiPvuo̵w诂ߘ"ވxAeISDOX]JЇB;3p(Rۭp/j%F+B^F*}\hpS	E!;e<<ge&5=1US夓b4'Sbӓl

]	ku k`0rQnZB-XH'4G<FR+st[-(x9r9O0y/1$'q;tm}RS9
o/uܴ)QDe3Lr
'pە˩#Hْ[Eu\Q!

(ّJܛib[^ ];Qk&)).d2Ke\nAM/sCڳid5ľM^*#Ly7sFYvb
^	#u0ә0!qj[Mn5PPa)䍔
:>Iw(J|+Vvrni^1̈́D0	.	ql.7r
Ky3w1QR1KQ.Bz;GM
3T~^1R9x``!g&׉g8*+.3rY"ߙ)fx#YvFb:Ŵlh_m5Q>%WvSk$S;MalrMuo~a<?7W%=Pǡdڡv&[M?	nNS]1v&ɟ[&JFzwc==&+	"6;M4Z3oH95m5AɼHRXŌRm
tXI[gX @Էv K
r;jMÏ6j[~SCOL"Vv\;%I8\ǘ&?OW1$;zSUT~> "Nς*|9da12gI]Y6iDmHzCQqL/*e"
*o(s|eGCtxƐg^1
Go]r}4 4V8ң}TowEj)J2(s*,5Z"Im
Ӎ*ӁjEcj̣^,~3+YSa.o12R`]J2=-(N"?ߛ\
iPRLnawu!΋5KX܎tF9?'I5nM1/bNRg;Y$ii$1Kmi?$CR9Ol햊 ]4(H* :,JEOiwT>AfJQE2ʤ4^amk~0v|lTV)RUhbUf`-&8k5T)YhSQcFpۊ*R5^USMT>x	PW(Mu$E7pTpl\,ԟiIcsM56V߶uSKckk90T{F6# wW`a[cݢ:9!v#Ǫpe_Ry5wZ?x^6`fd+z۱@vy)mߵDDA%]%~*fPRȞvR2oi	'Er^~K+_U\&WDڣILw67`[_#g69=:iR7D1+=4k?A+۫-ɂX| ۑT"[缈HNZU+Ĥܹ٠5pvG^lUn?M0tz9Ëdo}Gp
n`hFƑc8_qvhՅ]yo (A\i;W
#ѝ$!ߕa3u4K1kUqM:cέE?{QׄtVX33tӽQ7e'',
K)i:- se$Sw:5D97mugSsE+Yr#+_oV`Ƿ#ecy0c</8cb Fd"Go)Ո񑠜;yN-c"d9Un}mq#ŉQډVtvTs@i=jIwӷE2XHƋjoF{v;
]~`gnI^5da$;2"l*i
d'=KK'}(īc.HAIr $o[Sbagg.lz}^5ޛ[߆%&YpbI(3b1PNzZ,+ޑ,VOK1oFopbT;OҴ`&2$msv0ӜzkwDYn
px{Q:q8X=˴7w襁dtkfzXIF@m֤X
;^(S䛖M&b<ĆxoCH6Ou]^-pݩupN:uB&5S@n'
'$/RG%fRz%n\ki$5rݗP\Erwv:z,Zɩch6hE[rO)
@l+X27s?sOYrC}[\ѱ;}I>P':5ƫ)TF^ó>$ȼF>yKtN{[_osd}=:ӽH>}Az^瓏Ubߙz'<7Вss:X>L<}
Lta K$8 qA	}4)XGSg&룹`}T>U@"35%v5`мh%ͦUtGuΦc&ܮtU5j652lɷinx/6e/Q0m+hF1징}ԺJvn1 '}!w	u>M]57	TN۠/i*]_A#TKR̠y55T|1<V\g:5iRJàGIhFt=tnX62u'PZN>PكhEo2p
PGF-GrOw*=NFwGGhzy¿~:Fd˟(LgxLUβ/ª3KҒ^N.nK@麟3@gQ=L;`Wӣ蓴?ppPWuj!xxEԙjxdpޣ
9=jޱouB>џ@!~0}SQAb1ӛB1+Gj*
鏘w+b?D3U@<dj럦Flk!Q\VQbш07Gur?ŵF&q|Ly>gh5O}ft%4Q{ Oы_ʣΗ^ܾMHѥ68?~>,^)}ޤ//)%
+~o{-8m#VgzŪp5MPKT# Wr~΁m*ZU L_UM[Tց<
4ih̀<;EkQ!<FA~CgЛ]*Zl9q?+}>-QWþzStKOZr麇D0]XWt%4(WqG}{D4';|F?h,} 8j&<\Dx%<Ғ)cd:I[~e/(xąuU}-|:Oc%<ߥU>#r(ã>Oo[֙q
M+|ȇ
_w@}c|LEŵx	@Q*9P(ZcVqWⵊp'*;ď\3kNY@
@!C:Y
Dddj@w.B8]BN;x],ʹfTLFT*B5`4KiEzH6^fj6H?P`VA@4%4:'lO^6>)Ƨ׫^1>L
)h0m]X!{ull{
9ңz )
H
-b8`,`:9 9 ҌaV(kf9qbV5cD'(?H)"OG8U'q;Q&CE}P$޲cUM('ƫ*|pbڨ0ic`bgXGT:<W*-(9J*JF=1~ص%Gx$Z?xFUũϷ{KW	u;w_miE!~I(B'CcfI~Qv_CcR~~|lV?X* 
)?VTW7:Vo,X~-DHgR
U2i"Kf
:Wy5-VjEx>ymv>//[9Lr==zQ9Fo6'l_l&;/|O+^;q߀7MVo;oӚl7:ե"|DmN^#)MUv)s1Moi*bP2ZW%ŏH(2KLB1a|WIeS|
sNlؚJ;!
n]?7f'Fe/68ӿ'eO<=b.ԾOg&F~'T yj+S Irp\ߵ{(y	8pznZoM A9YE iB.}ڞ'!@?
]-q7B_<^21sO%kCThKA
xozMʅ@xpa<$!rJOA=+UJ@+UyJz#ZGQVtnDzY.e;<NoNԜJ{jd ^d璁VCӶ&Ad܀Ӆf&ss4Q0DչIessџ=/Zoչ%OEҥS~(ౕW-3үJfa<Fh1fxR
$ 5]PЙd4Q\nI4^݆:Hez3M|J>|ԳKg[ʁܲYjSp'LdWTW=U5G+%Lglf:4PAY:%f;t'~N֪UsSԝX%zʑjpIrS*Ԣ!*]
5%WcOC~w>."r97ȫ{\ïr<Н7ޮm5#~Ϩp;wTy8gc*D\d/"x#x.cAv_^d?l].!"'\p=C9okri{C?ir\j>mr\dǞ ;3}ޛu ;@?3/+G\+#x`':<՗Ol5-'"<n4FܧX6PBgo'uҡ'qw:bSOп}NNn!}B^ow PK&U  M  PK  ]W            >   ch/qos/logback/core/net/SocketConnector$ExceptionHandler.classOJA=Wˢ XfY*$Q]b0fZ =TtWŽ|~ E=gIfe8lg<e7Oy+als,qBWk
3_픨/+Qn=	W#SÿP-%:#{ U֌SK%#3	86%NjA 4QiS(u7BVPs+oPKX"   i  PK  ]W            -   ch/qos/logback/core/net/SocketConnector.classR]OA=S.U*?)~&>IIV|}:ufg
+_"hJb/νs{ӳ Ƴ:*X4pUM,Jx(aӑ>Xu}N P2MV;@~3^EfMG_,
Qh')ʝG}RajO>5Y,;k#G i~fj6_S^w͓uܖzy2C2++ZsQvDYqbnm׉Еr{%E<M~?m\;3A26玼so6wJo'E^^]ϺP
>E4vx2ͱ4V fT/"3̀
4U"^! ~XAZXmL hX/}ӻGxS<UPKǹ  k  PK  ]W            0   ch/qos/logback/core/net/SyslogAppenderBase.classY	|Wy?]3Z%{c'Fr8	c"ɲdR1IkfYۂ6!@b 0cicpq9zQzp%M[BK6J8Oow}{'ŋ_pآJ`cjud35ёr\Mc{i^5UPA*`T55ei6=Knw{[ۆDTd[~GrXzhXQCD6Ԛ)DL254
Q3f
c	#kcc*VN㖱pcϘ4;t,WkXNC~W.d6$_a=PRYkmaq:c=og6*Z&lXBƴ5j~i`]kR|5\aZyk՗r>EIv^ZswʋE5l6s<m/e{P]uw+,?IcwFG-7y+
vJ4Nc\P
܌+إd\	'Ɍ-Pt
&	)?K 6-Tu	 ٣^oJyBm4mMVq[ ӆky4i$LO
s>x~穀 XE8lڰ( (-W!ڣIs$kuJ(TIMXs8d)#;Kr&
9暓ll7gYw*J9m|#Kiv)REp5tz_aa$exqU #R2/YYF1&PrJ S0!bu=NH^;W}#xΊq0WR=˅[i9zR)LpzQoyRǍW_7[TI%Gۆ^f4ƥjިMZ"]'E?Zᆅ:/6HL'NJpf@Ûe8xx%uTA]o-d+1M{TށwRbczA*TnnLRRX\ţޮDA958p@9<W8Q'8}pRŇ%~gH?FbC*>M$J"O}w

mI{|dO63IuŷlH_b&Wq!w7BHT񥐾QŗC&_zV-l3]XnҲg_G5+}Y0u^\Z6e.x2`Fʴe Hg+t,&tqߟz^;ΘrҖ>Of73\8CB5Q T,OH;S|;|<&̩~g\bXQ0pH8ׄb,$҄bHt1M&'cwc#n}23f~%D7.vvMmMXrRfvt3_r~}J[tYMO{	|Buj·&C!n/:g˫鈓Kk̄6ջ;50FJ+yMKP9a1.Nsd|exUY0$Q:yd%)l_S?RDZ lwRb0'aXIut·5{ܞ¹pWa5TJ:y.̩,u/OؼԊ~}`(U<_*ג-{w-4螊UrHɹ)k_FyBj)s,
̩;iOj4в;*^
eSΜo14͆9paFZov[*VVEe8/,d_!ˀo'l&m(T8Mub]DW)baа'	BEOGs]\XVYwT璕2VX~tRȢfhS-"ɚgy$pekX-T`qF>{"X?|{UKlYw}|_C9<|ߝ/lW؋W>芪h8~5~HUv#yo_U-?7,BW~+.G[.!
hh^v;Nc}t~t;r"nfudw
]^9?YIDfσ΢AsKh<+xC&.$y[ycXv;C=6w@`WA+nlnB7N9cO>1x%:	w#Џ18Ԓ-;Z;#xOnZ9C`ǋ:fmx?Կ ],{hVO(H*J:2#1>Jg?	 S+G9[ӧQsN*t0^ĶKSɶ4,V-x	im381L|WtkxY	i/-4J^z@<lMjc+F1c؄	Z
p)j8^
/o|r3=pQgQ+KsϖsR-U_@_=h
BE-/レf.E5V]`lFa$rH<Y%B}+sbP[U 떫y^ҫc!mtk^@HoBּ>?ylHߑ?ү
鐞ҧgJRTh^\D^|Rɼts!y|H"<{dgq݀7(o$DC˰z:p?ndKǃ[6bx~avaN]nryQ{N,'Οa i|o'-|	L0 |aqf|.çJ>Mbߥ[ȭb]
e?ZkůZt'zaN]jKyEW`OJOn=sWkςՕ|.ks#\]/+
\o^%amԭ3x&.^q.daFΑ$}S7͉z+V^!_v.Uz[*pOySYV)\TvG?Lak+\sQaϪ{ /^ŴHPlV7XvI-PJVe܏=[~%BAZJ,S3,-0\Nf!)ghs7lF^1Rѵ]9|fn]W-b,m)vBa[ʅm+J$BoZԈW]#6	q,Ś_PKaV.6
  7  PK  ]W            -   ch/qos/logback/core/net/SyslogConstants.classKSPsi<J)>C%AA$iIM"+LkѶ8sҥK.ur<'MgNXiߛ{6ɟ~ē
='[W#,xj)%WTXz7Tv+/גMl_oz)`>u3wX0-GvFKnԋtu	QS
VK98  %D0 4E#PJ,ӊ~}24#qC܍Y3Ieԝbt^r{ejPo輬䴀~rFVAe<!]d8Q%u&w,*vhjo+ ٠`i%jpɬ,s}#2C?:n*{ޅgy*xYE*xYe*_xYU*xYS@\_xպg*{
-װ~ŭFx븊nig
}>!dNa9Qy1qE%+g|
=L&m)4z.}g^@/2/WЫkuMG-mfì3*:˜C2k'{IЃ_u,R`| =Md{POY?PKlq    PK  ]W            0   ch/qos/logback/core/net/SyslogOutputStream.classTkSU~Nn
rkְbR@5jc"j$]l33t|$@ɞsy9ۨ&BXCDG1ߚߛiM/5݆_=Mێ'GKC-ܞoe=;y"
tBpAG.
wn=]s7fe;]q=+X~W4aluk$Ѝ
t\ƛ-3OZ:Q:6-?hXT k&lfFH}:઀fz_<cCzk&3}s3wner@J׸gdNqI3\%gHaLwɢzNy:@8ޗɪJl|C"n~n~Km7Tg3=RbFVGN2uzEbWTBYשZ
Fu<~`;bcly+fFKOr4F-%+$zPv}5,\u#϶}4<v	.W;eu76XfK[_:q0QkԷ8J U8b>ʑܺ,
t~A݆W2}g35!90%b
a^<5P#_=q}?9Ix	mH>z}>L}PG_}s)a\M ϝ.>C@
X I%!,r㸄iljzLNW$RCx6¾qRkE(N*9+qV󿦨%ݟIEIwKRG\B5O>)5:\V
n!)c4fmͱsa}b38_\KJ.DƔ5Ǣ]|ʰ
p*!إ%
fro(<Js{Q_ 1e\>q8>ǩ,GY̼ZUZR c0U5'2Uak'ś-$ze_PK -    PK  ]W            C   ch/qos/logback/core/net/server/AbstractServerSocketAppender$1.classTmOP~V6RQP|GnP&C!M&5]lJmO%gRP&?~pȠ@#<}m"ZMnJۗɰ#C{špF"6wMs_ai!UT@cDz9
(2JБ~0T_a&O%<N4=Y+㄁0	e?mJ3W,COa 
tdz%JE⼧TrʊTyU:q<;*Ruܭ5*c]|ю
(5+١sG]Cv>Xuk@=p*X0<8N2o7v'2nD(e,Cb+4TfH漛Α`um>~N6s$g)b#]P鞌	"
pw R~k&j$E aG2̈́?}]"*31M} DVDeڽwX-0kl})B!!k\].Ҟ'[ߛ	u30	B1}5CW0T/[}PP]j:sQ&XH9
V;>um(Git59RP1
db,aVt?KPKq+Տ  )  PK  ]W            A   ch/qos/logback/core/net/server/AbstractServerSocketAppender.classW-
N0!LP I`Cb*26de]Ci3I$M&Mۤ-4hIo"?7e-|>̼y͛7w
J`A	(chP"5#֎PDtify&vejF51,5%(g7)H[ab&4ey5DUfh)6ׯ+U1n2кHBPH[,aQ*Ϙ{s<)^IcK%,r
HnA1R*fXzO2hI<"Z`}DZ[%AA"5T2#$&F*i+ow0TSw4R:7=˜g4!D
iA1):Mc{zXE$܅MK*aͮPMb>Yen	^-cQ&h{K؂U19:ʕ$ 
e{(zT4!t(R ia*a(x_.cHh^Oow$[RhЎZ9B;)absKa3<ak"dv#D=bhMhq93"ܗWTRWj%DQgMUT"ASdXt]$aj9ϰko+f~xfQ=,!!'ܯEp2Q̙Ld1˩TT5933k'2H\}aU~'eh%􋍃XYtyرsG8:$!-jXu| BcwXLdb%"ceE
"UĺܬaxTIj٭k
ig˖n	=@fļH}3j[F)YѯR}/%| d{:hW4󭂴DC$V1lMqS%Nq'3t:]-~DG1[VD.8-;Z%8)OHxRδ˹)OSv/	.A<#Y<G2~0CN*/r:s>/PŒΧ#莶xu))J_V:螞{{ѣRPed3\֙'W	;-zCK{r}\jN|j;s@%PfpټQ\*3ٲ"~=kEXJ(բGsS7-2)gIg#*N<Οϖ'RUrTD,we.G/D$CtAAȹYf2ډ.ڜ]Fń}qjufví~fSN(ThZ[25e#tP
Y;](0TE$5sRF9ޤbG:
\ 4r."њ28ʾ?[m;|ا[1GƳKΤhkP.2vDQr}MwTttB5EI1.:Ҳapʔ2>+AE)mZ#
<j:)@|_LBjZy6nG/Z/A:KQF_{yx,\[{mEP^C9[oPMdm3J==_ʤW
ʶVlQ,轂[YKO8Bp86vcEacx0|k{	1{	tL$|p =GϑrA$ȶcbF`pF%QR*daҳ~$p/!{߶|l׬:A$-^7J$d+.C9<~
Ce`e-_6Ap##M FehlN`Ret-U[N3kOcӖzMbHs"@f	7*	:j$}<H!Z$q,sB!OH)$]A" pyPU  jGK)_
E|b(W@ґsBO<̆\fCz,wqe!Y!:IJKh%m`쵝zxaXZ[%[Go-QU>}eISO{N1VZZ!=k@;W9P:B[~8yYxe./Ҝ<k̍_Uk~/ؚBf	?ؚBWhEKQg
,?yg
^9o+64i_f
}k`ghο]RZ9~a_9|F	~GkogF_7+PKs|Vol	    PK  ]W            +   ch/qos/logback/core/net/server/Client.classEM
0_5*wt,=VPpӟù JLtfx|oyO ;$5d\Y(}#<={ڛm+1תWd-XԬ	,Y
cŗW.$#Hu"]5h忢m
a	RdQ!3PK      PK  ]W            2   ch/qos/logback/core/net/server/ClientVisitor.class
0ۜzBEQPE4ؽ2;Ǌ]y|('=ɟ?`Qa!+VŅ	m$+e44lW(YTUjGe\
KfOOpYJ*+IIm^	_'oFȽ*v~ٜBM{ƃtT}.Ġ7PKm   -  PK  ]W            =   ch/qos/logback/core/net/server/ConcurrentServerRunner$1.classSn1=n2aKYJIV*H՗T$TJLb;xx@ >
q=ITQFss|局/A?T1W~Kp oFBpU^gȚaO=G
.p`q 
IlF"2[jWE,:\\W#dȄ"WLcH!gXlG\u~LΧ`֒|&C_'7CyH'3920)IQ6V2&j[Kc
D`Fdٶ9=ĳE䅎lKg籕^l{"1TA\wQw0<arm^JMq_p+ry}o/*k푵HVR(ј>X
/o&NcKg|wB4N+.0Q)$K.MΊ-S~
i=@9xH6
jh$Hk0PKf"    PK  ]W            I   ch/qos/logback/core/net/server/ConcurrentServerRunner$ClientWrapper.classT]OA=-C@J,F
>Ovq٭[?3	hA}PcDδUHtι3{{o?~ j f9j=+%n?l_
#=.=OɜTZMHΰK-'Ѕn--{QiK!Q82D3*H1t+*<gk֏&.`a-q^.7"2d%\6pİu\(oYk&FjSmG4*昉qv/8uIvX\fg<9wn_&޼㉍vI"/}\:cq
)NYVk1PVKsɷE($eҙBHyMX`8bU/.mqQKj
4*< Dl1.0ju	i#H%Oѩhd2oadfoڣݟbNC @[ =Mv8H4T͑ZW=.ҠaW_/SAcZZ␼DxyY(Z"kfmAv"%Ir\]]L4č2+3Iu$II-]۸~,j/]D PK)M    PK  ]W            ;   ch/qos/logback/core/net/server/ConcurrentServerRunner.classX[~,,T&)EF#E01bb*m_־<;s综;=`5G25td![ |؎UFv#]2kUQw6s3kj]FQwEq1.ݱ&mǈ!~!3y5똁w[9j13@Yu4ţQG,v$
t"n=*qs)5G\
h	d1v$b]ˎVKy:1_ 'BSiTπPbYB,"oMMKi%:VS@a)iUm2SRF +cR
~P&	U.PQK[4pJN
OEՊYK:JIw6y*pJ`N:!rMP*T'N
ѰFǽOZˈ5rg}&gQꞓĎM>YA`٤<!FH|*#dK 8IW\(0TeԵz̺~AzΏYCflvEbψM;n
\kXwx3ZulE=F)Ie[,kxv=i%tlvFs雹iJ[C$$9R,(SGΎGyt1mJf_ =1ѫ|ycc{u<,hl}tG>.4s~²xzf@X=ǉfLZ	|R@'R"MzROIg:㎙ę<
x(Nj=-k:~œ2O	͉ނy$wP/1՞~[Z&SJÃ#OS]~Exc=FqdRDO^%Sb]q%5K:Qx
1Iϫa2GI/vڗIx}*P6s2Yu6[Q%ݭ5--kVNHN<!G"&J[j;3dExOH&"#j8Nt.Is4*qIA&]:Ex&\+6=cˌcLé$S-~SjD 9t#ZgyIby&OS+z3hSo~K7US+<7Ymi
Σ/NT$U-+~̹4E!@6#y0xWDpMKU$&\Su;9Bf;
t[f\eosL㹣gm7XovU%"22Q+:t~PIcPoplΏ(?	,5׊f*
FxulOzm434d4&ʌF|ۍ+D4zڈt_s]XOJu
w%=a3ª@^Yȫ)k#3}߼F6|9A~_yf,x"xYlavlE!,8IL|s=|JwcK:GJ<P|o )%[RcoOxJhJou)]˷<oV
jQH,zl\\'Kʓ\0ţUfiR)CI=q-9VHeFJQ11V^cEab7%aoE1H*$\`EChz+X+6|ežܟA̫
`Sqg`[w%N zH'vqn^N#Jl)%83ĐTIzp=FpVq^\
AJyRSI[PsҐaסBCe̹LyN?/rF?
Hcinvꑋ"<,g]?Њ~JA9Iqh.qAS9&cGRc<nkE_R|GH<SA gx{D ,Ƨ8X>]6Owk4ӒE
ie,M+j4)(8S?I
7 u{ /%ec^zqr	I܃ȫ,1^ s؎ɸ} y/߯pA<C}M^%+NC/$'=WEē:KFd>r_-]u^R'o}~Pm*Z)Iѣ3T<z
b]86tO}I8z&lcVEjU$=6nxjL)MӐɖhb??
ϳm_8z_Jŏ=D,h[NzB=Ɵx&%{ys(PKJTM	  .  PK  ]W            9   ch/qos/logback/core/net/server/RemoteReceiverClient.classN0mW ETP6568vA<CU8Al`9w'sH#%׶ȅ\qiqC9IR1N"Sl3b-dl~&|V|j7*1tJwB|o+q#sƯ+e*L3u(3rJh.rMֲ9=02qjl`BI<dT	1auP7oPKP    PK  ]W            A   ch/qos/logback/core/net/server/RemoteReceiverServerListener.classS[o0ܖ
.0:! Z$GYN,xaH ~-0`)|߹؟|V}PP
peI/|0Uv셉fd>嶖JD27(oL@z2ޏ]ĤkƎwߦ2M	Ik4TRf|xm'VG,iuCvY1I0YtN \
(
ҦL$3z:I?)k"N=%ӓ~I|b^@Avl&kgB&WF,pE`޹H>[q'OTY>ܧJKv4.=
W}㟦ڴ-hN衴c[<nڒ !uOMZ}y~ yv=4Kg^8sQm6#Tގ,PwXC19X.r>[w#'{#1Xp
UeWPKшC    PK  ]W            ?   ch/qos/logback/core/net/server/RemoteReceiverServerRunner.classUmOA~'TTPWԂBJH51FZRVʝn/~1Q?s۫@RSݙyy~ bK"n	yw~7_[wm%=\+RrOUx%	̰-uH,Z,qv;PN=ʗ\50LdX쐾w|(ݺxEAL#`Ը")l-ȡ8K⼉e(tkEU0WM"tۆ=Tm4Ac:>UCW00@u˶dT<lUp=lmZ yBǹk@1W
_;\rd)S:Rzd-`(vr %#
|ZFOs]ݥfLRQEZ_ƞp}Ց̉M?jxHg+.imo'aT@?
)zct{^$܏dIGzNY/H~^N ,c4,١%0-ථn2l]A
!5¨L:#!
ckg$qcԁǠ@ӠF	X1RVF0u21TM(<ɐ]g4<~PK.(  U  PK  ]W            ?   ch/qos/logback/core/net/server/RemoteReceiverStreamClient.classW{TL$F	urQk"!!d'9dpΙpVj^z7*ipI}}?=3$@묵ѵw <jPfD*q׏+5Kcvuy2udKʭcʢ-JBkT?eO!?'8f[ǒg;-QU0
5xMbƥ7}2%m~R2]i[:@8@XEw|75*y.ǧ$5J5L7ezB@2^rN'<ZLS	U\X;kh<V:X}2%uhhy<b͎,ՇVU;^"޿wE`
АI8&SAGjF!FRt]_$Pܛe>%* 𪮘jFAC58w\l3xX`uAdΘ9+2j<-:Ll6YU<hqZ;l?VX uwV2vrq48){ҳ}H3q<a&'fqB4Wcbt1'T޺4:xA}Г<83tau.0yJUQ6Rt&ODN_0ENK+l Ŵ+"mCM\ƭtVI,0=fXYp3Sd1UY=Dk!}Y'3PYsH$N8mKxZf^̈guqK3eMhpUv .anMꂎ/R]Mvdw63 J	ܔ(ydy0b3m!߶|#Rua
^XEDjaveo9,~R9e^%'<mܬ8K~RY%ڈ
Cr3L
MZ73(:fc+ū>%Cu?}2q0~F!K\li̙C`bY?͈
QSV
iLcjwGero=V*p=^3Ϙ3j!ảٱCmKl͋$o,ǌ[
o`R%jsR|q#ޘ|F+P|qy+Vf!Zۮ),kmB]B>vkSXf<s6+*!eNP^RPJwR.
Ү*UȼsWJsWfTMQi(56N=Oh
9DLD_&+y,JUZmy(2ֽmW!7gtCHӌ&|ߤoS yu=ܕI^>'~E:bxErTɹRW&?苆VJ]v4mx(qLckج<N`OwimFh:ʶ3yu_ރvG(y~oӈ+cygpD붔/Jm,wj-_AEz ~ͰV>Kz~{.U 5|հIkM-hGmf8NJ`/&K-Yx)s<+,Γ6Ӹ%&I"*ivOOEM>*8+"8'YHXd=Ue;hw=ֶCU|


W/%Y#+~
bcHhQVĿ9'B*GUqs_k?D2p4NyŽHi/5M?"PNR?C')5sR{=zPKt    PK  ]W            @   ch/qos/logback/core/net/server/SSLServerSocketAppenderBase.classVmSF~@ڄE"ơ&}ZQ|<WHI$kL&3
̴3ڙLd1I?{ݽ=~? V	hHDth*w/|*QNhG<a^MHTpa 13Am} /3LZSo+qɨY=ʂ5խJG(cᢎKg{d#IC2veq)\oG{de
[\
P|{w~!\1>aɓ=0´Ou|kOAT8U40u_mygHY4ubr3`fTdU_l\*%7T5![vQsDSafp:u;s/ u*k-};WdEJRTljds[9+ܣ\xfFo{£L5zNUMeØ;QU0nTMކmW&%qͷ[,>},eqWzwl5;	pfq	̛qRAܓq\!mu~/V8U'4WEkf	Bhrm\P&Ƅ꒤yt5ifJ? {IhLEIӨ 1w4'}''fTc^tf3azF-Dyc27o̿Fn,a+O|2"udd44.bKt@c$Hr+Բyړ5X((!G
a+?ң!p3M_!F^)	
1B^m
wEUeH=B)RcZkDD+f̸eD~H:I-s9oijѤb~
~_PKJA;  	  PK  ]W            3   ch/qos/logback/core/net/server/ServerListener.classQN0=<JaeN"
J*1W!%T|G!T}{+5tȥ6Y^YiIY[RdBl3.JJI0lJ$BJZiUq'[NϾԪ0l?o"!N̔%cMC/-%lcNgޑ$V1^f?]%?$6SI7a]s_$skN;sVa? PKRM    PK  ]W            1   ch/qos/logback/core/net/server/ServerRunner.classQJ1=ikg[?"(tJAP(ءw!IZm. ?JLFPu+׷ 8P"8Q[,ermUQ+\:*L)a"Tv'lhTFDpJpN%k]>1#"4 I
2rbŘ~bV6A?'UCNp~.rci&+j#)fƿnĽdM:a`Yx%rYxSK43ŵr6v{(a
w썬`6lw+>nYwJhaPK@c.  B  PK  ]W            9   ch/qos/logback/core/net/server/ServerSocketListener.classUmwU~ntRH(Ѫ&M""JKV^)*la!
~pF'=>ww歧=~؝{gyfݿ/ 8f4ud0+0zim;gf	k3Fy7,r:N@j?5[ܴ=_@/o6"2;A(]вzT
ۯ1SuƂ@al[S9cgQPqm>/P+{{$ZG,J:*jzwܶ@8;8#tHK+G̯nLOTYчq.C
.NN^ QS(Aבa絢nwUeEt=ԮmYG+pYc
'Y
>pUg62}oq䫝t
W-p]R t[AW0հ&r>'9]uǕ/ZoZW"v-Qb:|pմiG1_qofsFT=>E+ǝ) 9K'S u<7аC83a_N۵®22F9	ǚ4(GNWF57<Y򶵟PKnIoBH>~1-7o;歪H=R`,{7,.ίOQ+CT_3%xieUq_P6+}M)o<T~ʯz8YT{8y7jYE+&Ѳ6D+&Isw鴺4ԩoG,Q*\x;-h]&l=|T9B'P5%	OSHZe'_p~7Q7#^2|?!G؍bVbAKh*
>)zѯx|r`QAGW PK>  A  PK  ]W            D   ch/qos/logback/core/net/ssl/ConfigurableSSLServerSocketFactory.class]OA)KkK(ZJT,Uh&HjplX)].&RM(R(fv{1_ =* zgZ;Zۧ.[!w6tñ}+ftVzR AU@d5a\*55mͪ'[rxX#pTK$˞cZ"U^JW
 
D0Q10y#as!*Si^mjF:n7)xz\aX쒚kn3 QQ8C2uwB
J cW1D ~SR/!"x.1ޖ;q/%FR^cлYtAYld.?pQJ*m{8&u;? M9l<VdP)Q=;7$=۵c]ڂEF*^3IIҊ[UNlo"Bx}gQ5Bx4+`Ըgh#~[43`s9BߤiV)4ј/0x n\	G>Z˧YB4'3'
m՟DĚHDa
~V5Idy5Ilyr6!y^t^LS.SDlSyIknCņɴ<ǓpyB=7(.AgB7.)&D&&z1l"A]w*PKk$    PK  ]W            >   ch/qos/logback/core/net/ssl/ConfigurableSSLSocketFactory.classUkOA=SZX
Z-EDÊ M$ɲe9$?wfKܙ{ιgO -ANˆyS֜%EuLCnCK<Q
~	 .!0nM[.
EݖUmx,eb);Y6QjeqM#сmZI+*0;)PE .	WFCrjiF2qA d67-Ͷ:I܅HKZezkM,WA~x=҉B 70 a003,7ӂ0ns<kOl9E9XQ-Hia<)/Y6;w$/;rlhw!3UTP,An-z$5|f״̳,]9N᪘nw#Rѥ_W]n-aKPꦜ}V!-vxgrHx_6̏9ț{-ܯF^r${Cg^8B_RԎhH% %G*Re.qcp0Ns=NDyOO}9g87p_{_Q@zw뇈F|_*cSፑ	#e/L(%.<4HSKg>bΨ1r-JK*{чPt*ʢU-+FEKw.sΓKku\#j]zХVZ5P8RϧE|zE&iO':PK6%    PK  ]W            >   ch/qos/logback/core/net/ssl/KeyManagerFactoryFactoryBean.classTmOP=wu6` MpJ%Q+0dd\bi"bJGMQve[@bs=i=,! -u5uuK>CC6exPQуUC
}r<rjUn|
-|,}Uqׄ
qTp!U570/e5ڒ/4?jkm(0,ØܹwnS6i+MC.I#%΋t*Ca *iaqa3T&%UN+3g_2mخ
wW-!%[r.&1<(.1ྈŉ0}\;'Ş!v|ӱ=h<a4SnNja3QVb-,u]٨ˬPy=kS8/9Ɇ	u1эɠv׏S4ө2]`_0MO	nPeȣ@(- W2TzP}Tyd@N;s!y
bp6M?JrxR-w '2}:w;`)ZMNAZ$ZvjJ&*#4jlznDmdwF&C#w=wPKqh  {  PK  ]W            5   ch/qos/logback/core/net/ssl/KeyStoreFactoryBean.classVW\^,4čC٦kDpAZZͰ0̢$ڦM&mHlDmڴso9j?wvvم&v>>w O(C
x6M͚<cexʛ[ƢZATE
Tx*ݸiOOjxv{q5^-e[,iK)3lmnIZÚTE`*4ir坸3R<G7sYѧEh۰];(?̏g<ֳ<l:f뮝uR:aiϑd';؍4x{Q;[ԵYpvd܋N'Tœ_GV`W^SY
Q8 $>eapѢUEd<ܞHkNh-(WOmٴ)	+ԏ|]7TVnk@eʴ]]N2_NSmtSA8}=[QtFB.{:P1'X(#Tzȱ))VB\S`wj3z¶X^㆗4sl\SŤ(zР4@u6TgTKT
Q.dG1(5	4]5L}z5UP;{S_`j@q{L༊H@tզΤѐ|cJ>SٺѴc_&MݟVX
Yǿ.lǌTqhĮf,6201֫
WrVxL,hIFpmjD/x7	*UZL^)mPaI Cb6XO%ɱbz)ӯwwh w94eJ0wnt/l\vdݓܴ:	5FX:Uj6eP+MIVLԸW&Bw88@#'`C.r$w۶zн=F,;2H1|uDr,hEG"M,ۋ]1Vɢ
w{
$GVc`XtLn*nˀ1fM/i3LHo$(>QD}^@EB3ÓըY$L_w|Tx|sV~WS7ܕqn^^NE\eO|O:j7#?&L
\.A\C2$ǣKb۸[%>Q%|.j;*+%<X8)zΑw}22()C+QIe$廫
-#،Ҩf]7\kg:9ޤo6?ɝ<Gorwk15	~lR5F>ғx8)̑zDrCuQ6ePeyC\D"x?avO
*~F2~Nkv^^ERK)qъJGV[TR{猂A7_?D5=H	[#Cǩeol_{M>CwXDh+*ڦ7|ez%޼AZ'[\f0BwRNnmfW[)S=d}
s\*
@dsT5/ݪ[/Щiz"!$qn-׈
0Ɠ6Xop WE7 | @h`P`}`><X71^]q7xX2o8+?$]|&,U/+[PK'uC    PK  ]W            %   ch/qos/logback/core/net/ssl/SSL.classeN@EE7pɃP
4Rl΃Cb/&_f'
4цy7普xY\)a݆!O,rQE#[K'}9'4UI?2tFyVVaV^8c8゙R_gaOp-^gb0
	eM化y=ӹjjݻbV8Ia!xNk-"]sN/5p PK\  o  PK  ]W            .   ch/qos/logback/core/net/ssl/SSLComponent.class
0j]-(81mR 8AD]g齐'&]Uyoڝ/*	J3jWJBUY^R7v;B]SK)"LUgeL %j=H0l¨둾PK     PK  ]W            1   ch/qos/logback/core/net/ssl/SSLConfigurable.classmPN0\j	>>r
CH'lcgq(]EJ# Gbp*snm
ʥu
/
͓d:f҉Tcm\tEYh<rdI\ZGҘkrpx:t9T~.
ua;Vh貤A{r(5cڂx:5WRA/x428YH
܄Z
^ޮpwaozǁ[pPK    PK  ]W            =   ch/qos/logback/core/net/ssl/SSLConfigurableServerSocket.classmOPwFgQ E TP@!!SMffr
ob?xn[f 7{s==`i$ЗBRE?FN]trC0옶)rA()U܂ʰi4YNg\<*rɱOzkp8D<3d2觨.껝SQ11k\e㷮#ñ<\CS\E]wTLH*fqED)=&UL.8r&WpZŌDg:)frm9Y2bQ&zrXCQr9to-`H掂|r*WNu[tR(2RsLe懭w걲cVUwMiI0E[mO%"=RxL~O+;b|xyitli~dHWkS8M+2+,Ѐ%PoLixL2Yt`w
CuIB427`wJu`"5ߐ/m'$196nR*5)R_DSRڿȓ)Gi){s;tXbrY'Fr6rhpӗߍ"܋M<qGݸ]݀j}5=@R)`mLĶPK1    PK  ]W            7   ch/qos/logback/core/net/ssl/SSLConfigurableSocket.classR@-5T  QVQD 3a~
FCR,>hC9Mb)	{9߹?~XNL! !ojv]}aiba0_1t
Ǡ0\5;S-oUqjszjZeݱz,9[Nx]LEثh
'aTDǶv\G8cyJ7M]'LJ$V鸢G)-N)83D|PivCZ7
j-Sp}V49蜂y@֋\Ppcdi2-Zȿ
+(5zۢk$wK
qN\UvtW?lp`a-XNᚂ;B0'Tk:-(s4ta:Uw\S4wE-ܦCPMPne`YRםYVLo+[U5<\LIq^)=-KtbOD4eЈJ{ 	"WtǨ'lZa8و\{a3 {MP[z3IFsZ7L9L~Iq0ܡqӕqw{f? WoH} V{Agwf#I:!y.~E␿>&$1D'zzzBZSZKmd)e"J=;餱GqLl~_Mg?$[Ig#L(\;+`bqqUӹOH|	*VZ_j㊜-qSz=LQ	AG,'#8:8Q<G|m,m? PK^}Q    PK  ]W            2   ch/qos/logback/core/net/ssl/SSLConfiguration.class]KAksS+K&Pn*2(B2.m-ݱ1_BAA?*:.ޜse3;m,!!@1Mʸђ7oS:°2\ejCi+qp ۳lK3zckGa}8jv,I(J8.NeHs !Ű5Z$Cy!&*-NpxEJ"Mުs΁QW.
3<h!g|aԙ	VSp;;/Ge괙:8<t,k~ǱDѷbiTEqNeF9Z=QŘ/"M1ѿiArghHߐ<a<ye`V43+םyQ U>aYPKyl  \  PK  ]W            7   ch/qos/logback/core/net/ssl/SSLContextFactoryBean.classYi`Tn&"B@AFFvHH&H3	 mwVֺTݴꀱZmmmJ]j[ZfL[=;&9 bE(Pe]G=
.1B@ٲp4l/(A9Fi言.07؞]P?3
԰mWCvXe{{2Lu)GH+ctTJ"W81A`\x =g՚e!C`Em'|Z$<ʆY:Fjd̦LNxl~3lѠ阦c:HcG@vJ%O(LLgb`A\-lwJȶD2Uuu4Q`f`n4V̇Z/j5,!:c#
1LmmYyIiQ{lX 0αi[vJ۩ZIף,ұKL9
;R3Y&]e:ZLD֫\Ȑ:
̨5fZsg"d*j8WGVOrpQW5X'*'3|D^ǆX?XM6Qdx;ulV^7/ˆs̀_.Աoc埪"Ive&Ψ&!;5]GPFv0:2'\u5^2=^1Kri0.s;4WfJjvJY0Cmr_>fH%1[hd)^c|_TUuˇIvE.eͧJ:&0Iy1\&ӇLqLՇj̕cYd*?㓸B3iz0yHLJղ|y
:N,V3$Ygu܈	$YoIw9nvY@(ה'y6)Xo`^<}i
aƓ#+r|11)&1ze|EWu܉2'.39JYSW!_bu|]*qFN=:S_pX}:y
ox ?/=RVJw#Fȣ:gAӶ`8XvpX?IVF,<)ZS_O.7B/8=;-{,l<)`Y,rCi0Nx\z^i@m纶;6ܸyƶ͝jV@V:sdKZc]lG3+bH܇A3,݇%vw;p}>hNjq]J52mr[$ɅWٙfj^CN,DTCGύ@蓼`ix6sX?ԝ 7|I*MM~4WqSL-QeiEt۳ӄJr4HV#vɈ)aP3 Ӈ?>2e_ޢ\k˵3F08T`X+jWuG[3Sn){D`Z#ɒV"\iya*k)Wm|.z~3dژqdWbeuYb*K|	}	b7b+db|>3G'tVuʣvw≑(>SٔvڱT)/(]'0J$\4[wr(s8 5+@De|M,X"&Bupt_pS2ץO4bX3c%<;
&h
F"-B_fk&$u8hT^Xs14	xWx;ǩ\]tԙ:sQg:OR/@iax,SGuG yx/QJ.~\e<oC;<GpȻ#hh` f av☳^69%եq,m<D
7a*-XXm8FlW(;H\ehb!^_x)7zWD*ѻWFCф߼C/'(?rKKygcqTΞǿv:<$F8ql[0'KE$zK84i.2T(%(GqTn2M{"؉dXܰe(ogDhQUe2>`(>* <%<o%p33OLx
{>op) pݾЯW5tZ}zUIpu'<3-%Un.(#)5NS<U*7S-ErB)p>GWWIj#)$e<ː۩[$PpV)[
A*\c;rN_Nx2>4TU9RI
IB݁zz|
AB}P:&?۳'GzPA-?5mm8/M|?Vm?u4JR:7>#~wr8Iw	kӘgX=b%KIRQXSQ-J"》ْFbh<q
4@Gx27+ikkiv)r7Pq
k`,g:>q%CC6;1
4V2^1._vʮ(c!+܈[X@+%Y@F+ bB>ǳN!ЩC 
Z=@z)J},,MuV>
t $JeFZD1yx61.GHXCИcRV24-Ftiy.Er@W@E\#&#΢Stu8Sgc:֫c:6EʲRтPKmX    PK  ]W            A   ch/qos/logback/core/net/ssl/SSLNestedComponentRegistryRules.classTNQ
*#b[UQ0h
\XPlֳgM>7xPi*ؚ̙73s_ vC6Haɺ$lO5}.Mͻw	LـIH;' VΩJھvzvT,fK_Hr{
c)O:&L0,(aӵcy@ZVe
jq
Z%줋g<sV_]d&fɦP!T|{21K0Oe9ݏmk)b*
ug"a)	_Ԥ	p$Y%LwMFxяbP:!J'RPՠa M9ϡQr?f0dHH$L]_DTG*BuL^3GXi?quҗf߹YSS{56R)G폱6A
2|ô!PaW6kb=`9q! 6g-ƿZu˺[s]kZnlݳu~&9$1,`4s/{8+m[	O;~PK,A  W  PK  ]W            <   ch/qos/logback/core/net/ssl/SSLParametersConfiguration.classW{|Wn!gScRJ
)4iAANv'ɐ23G}akj*-T	(h}W=fwr;g=93/z,JB!I݄eDv1v3ztبCx6
٘j
q%\J!s8Y6l&c;؞-=q=aDv\ybZZy1g-.PQz5Mw13 34|#-j*(D`7r\&ަTs]:bOu˚
+8J
N)V~cpJ-hb)2a`
(=ՠזi7"UD`m[n 
+`X0Cf5dB
4oXkh		4<r޴ҷմc3ԍخ,7sL	P SC84FhzErETyfpNAS-X.
ntNp-gPEx`8$DUy9ބ>Tw:ieS%[Uځ~
;9ތ]T/V7#0wVpP>e-4 cOԦPmn1HY!m:G?DI;sH3^{wBWllpaa"lk*E
Lc0S$bi-q9lƢ~'wbN
,F=Eး2-N^q'J]CW9G/	5*wn
ox00JuXCShimYdϊ{8ލP%m	6p/އk>Z6ms !vO7[t/9BZʠUx8;1{[ 5n
gw)QG /2
,|qc-|©Un2=e4j,5g#xX#Ou"S8
"M9 t!^8._()N;EcٱAٞEjzn)}a1ڞhgNvuRv#:50OK4yELqWlaVƏU4dS^avr:T]UsB5$5|O|AZieZ]73+7z&/WyUg8Wqn`Ui^&Y뫸UM;ggl,V+r
-7bY9YW4,r[ٶ^L`/r*o"-~byyGB]f=GI9]z:ef.~Y,VjMtG(xw:m8t_&pU)usʸP5Ofi|?Rk&%N=o542bK/X
NbFS	!	n<OA)a6

˥t.+sbSZVRvNx@6ŃT,h*FE+hlk
7ۉn23Ed֐C3)&ngh_v1=~IzI@8ʣ>,si6Q6yp˪IHݸo8N$ڦc/n"/z+/Q·<ɱ&16rvoyɓru60ڭgׄ*TWՇU±ir=U.c,'H.^a`%m!J21Jr8, h+L^Yt<_l
IE2Vz4z:3hPR֣ӬW` d~bk"bz w
~1E1]0j
'qh
oΖsL]xokU>=DSxQ"=2TǓZHRBz^zq?Q{D3"zK*s{t>.|U9U8oo#'y$grX9r`Fx&@zthC{cK_3	<4sXYK9x"cz<_$\ | {@
9}5@њ b+yI	j @^5.%L%<"/$J9= *T@
T2@.6^\ rsA uH%U')DPId(1.h/PK)	    PK  ]W            9   ch/qos/logback/core/net/ssl/SecureRandomFactoryBean.classU]OG=c,KhHq%Đ5Mӏ`!GTQް츻kIA_6FꏪzgZU{{gG [:Hj00־e0vȐzxNȐ,lHcHn`]i 5msYv[W{+
-aM_;u3\)TOXkxs@F_rw枎Qix3\Wdr>Ϛgsr,YK%6$&g(ńYu[
Qk\,y+t7F<õ=kWg[w Z
SEAwa<e[Ç-NY7=r:&Q6PÐud;K{VMctmui~sk㑌n(VY*NTovqdn[#q l:{Ѧ/2Cd]O&x1y6~jEӻ?!PwLoG9BO@Y0}æiT&<QHXA	_y+sXfuۃpXŚǲǿe:<jNG~ѸJ4.B[1<g-zYQ5'Tc_q oR5lRK]']
	нSSt-8O;fFkDht hfw$(M#r.wopϥ q-Y&eSr
glҫTBh8r4 IybI{$y%D/EчO5"xΙ Ig9G)̾;>:C2u4](
t,$)×wQ8g\ʺI~B]Pr%(5
w5Oyl̝bO!%%$CʯF+d-TU$u<ePK  @  PK  ]W            @   ch/qos/logback/core/net/ssl/TrustManagerFactoryFactoryBean.classT]OA=n(EQQ>KQVPC"HTPФ'.c/T⃏wKt9g G:HjH@'Cvpn|Ud\][.3$:֠`xlU͏^`:^̭t41Z 7+_<eT|{ŦxI[YTr=zAgNmYч~
cS;)@rkjW/*+W1H9i~vHHp- xkN3E5f`\Qu7Mx;tޢ^Y[%Y澭bJVa0lK{]$#gCKKs
'(VNdnzU=V0mR-ƐmjW-j+U|J[|8k'z9A3*Q9ݎ@&iyLJm~C5B>*jx'jvc$Cr''s-#yUq&]7*rp_JmX
=!e<mʶ%2xԉôH00pu"(TCuTDF*ae*0r݊u>y#oiϻ<<PK)ϊ    PK  ]W            4   ch/qos/logback/core/pattern/CompositeConverter.classU]WU7	$ڒRRO6AL!U¥o0d&N_kVMҵ|_]jw2I 2s>3w~_|/c  ba~nkm745+^#áE bZ*LDϴ#-_ӬCk81(FqqqI`qXٮ7'.Lvp2<XaqWTLHQc;,&+*8xbj;Jkc2~p%omk3L&SyY:fY=۩OB
F0W۹"bRk4kW 7HRФGxڳCYgQ;=?1l	Ndtܷ4С~dZqH..UL˨w究S%^u9CXgtF'S-#!BGJz1|wϕ7-P7vM9>d[.lj
g"IeH-0o律!WkA#v<L^j
U ?bPXFnUZЈmهnS(qBs|Vxks] s?=KxM{xO}NY
D+L-/P~f%bkL䲙.^b?-LWә\<{!,p$x_3uxBrq|H>A	$wDp%r
0F#'ڎ\F)7(
&d펭BZvc>O?}׿N)m/XOgg삗{mDNg]UeWuds-nk?F13E?Ҙ/I_; ?1YQ<^"	%Aϒ^J>)QpM2M	>/PK  	  PK  ]W            +   ch/qos/logback/core/pattern/Converter.classT]OQ=-](+~umDIML*>`|^º[[B2nВCwfΜsf{&C\A"$17lԍCa-˱mOaC
Ri#Ͱ`ܦa*7/<qcˠmaQ/_(U|rF1`<	dԫ	[]Ihưu!FSfH8℔-#5STp!{ҶEtbo n1fv*ԪB8=kZS)#a_Cp	h*J"֨jl9b*=^))&g0&F\	϶>zO-tFg[z0smAcRq  R0(4`y=em<z qNEdcٳUz;~#KUܖglh*S]f`=b?+E9s/1Kd}z	w`R$$B-b<	o^p!|#o.HR<B@SC"TÔU@T,ʆYy,SMB*!l519naRJIR2dA
N`HIm2+I
9,=كA6*Z#u<]̛}2(au[nPK  
  PK  ]W            /   ch/qos/logback/core/pattern/ConverterUtil.classV]SF=klqqNSZꐾ(ﲬRcH/5i:K:Lҳ-
qAݽsݫoov!BЇGc#W5jǹ/ʏ,l5/Td͓ܷN#WuˆMt\+W7<rksZwgc TD5Ġ	'vl	,:;k°n".
gWzbC eQ>H
ԌSD1DPq[L
wE@@=}{!꒵i6궴p;õbY	D~Z~^,
$/߉ Z욵vZC\JFpm9o-*މcR\?W!.wDXFE@;zUz[jdwwm6jQo8kw}wkwtSRdkCCv]lv,A?.P?ul7۝M"P\ousCo+q)3Yؗ_BHGSk@	BRVH2y2/?``FϡqotK21Vx3y	-i$}3269VH-N,h/*9Wp-!l`r r-@dubP b|چ0qLBE:eya\0!71f8#'1IvR4cMIl.U>jpy-M*M[/}3{k0uΊT'
AĂo*1u)M#熟4LIB8Om?MPYE
s7UuZyO 'eŏ2BдRD]hTPK#  k	  PK  ]W            2   ch/qos/logback/core/pattern/DynamicConverter.classVmSU~n6IPbB6	HX4k0n%,twiK_
~3Sq㹛˒lLa&{s<{ FQ	1q$mKyf9JͪVTmG,[W궩,Y.-
:oui4h6WdvpBQҝ{Ӑgrb7a\9Jqo1¾ZSQM0"98݀sdW%
o8wV5,h8.\U\pK{.xz[bJ]e\Wu.5լ*m]s> csɵ+WedZ:WSMy䘌q\jSlPRFU=JH;m%xoSq)|ܴbP}'<,k[Bt6%pD@Mn&3|7Imx'%,0J.aa*Iz40*f
4 y
S_ۭ_4VVmc2v0%
_?y*E/wVtVdNФ3Є6lW֎5➽4KPs\/R=.T[?
;Ns+I;::O<8tq:⬌tqThNwMgazq9.F[CM(\t͔=[ӗރMctFo.|K{뻈e#FNvFLW"u 9=@ϴ!'p_қ܈DbY'W>X.n85a&0>	F_$0_mpqn
P
Fdd)NQL4&_5Ҳ[|+&J2BgBg[
"-ȑ6#"^tdn.Hm^uzŮPlJ)q%XHRwx"
 Jm Xy'9!M'ROIy"#
{x2Bp#HPIA\=C
215<}`+
}̕
b>	RmS)2XWbfC\wj1b?CSw/PK8D8  
  PK  ]W            ,   ch/qos/logback/core/pattern/FormatInfo.classVOe+yke1Ijk{[$pxX.c3Vm(UU4ZVuTʖTTYߝva$K0̹<f <@$"
oYS
k7e^b֌r+~ЈdhB|1{v]Xkټ]
ueNڥuY6ȅVNڒxJy#Nr՝WhI(}RKe+2>#53eӜ
,a[q8|T(KMu˲ԲLY4N)E1TӜ[2BwN&1*vkX+rڪ
ԁL8%߬3
F&iV-z)])0MY͝hA1%g8뺾&'lEk[为:RPAhAJAb&tI%9\.*HRG7aH)Ò3eYחMjڦn.%CJ-+=dGUۺY*q<0spDZ5~h`V/yY͹aZKTgj!XKv[Uii/L;oRp|AU悿PBSNWwMʺԥ26a
YuXIm$p㮽<bHR^N٣ʖ]xٶ]oLKh8q#;.RK]o]6WRzw\ũ7FPQK5u^>JMy.d7GaUZ130ek危QtpΆ0.&tӜ3\IN9˒	Sw'Ý=6Ȕɭf#IJ!5录[{s#>/mz7 "pL[=f{hWz'1F]hA7:A?^N
/a;;dzڅh)jq`.NU+ɋSI3G~0~KDh:A\'3!yWwﴏOI*OaOR#f(w~p|*2zO3F3ndcdb!<_eq/>G$3352#4-;ƞtD~pG$|f
.0־Ʃn3[֭ʺkKB{"Eƾnft3I[ܹH.5ϔE$i4V+->=^:7<;)I"9Bd/ek'>IңJQ|k
1KI˴Di?"1(e e?o yڲ\U#nR7j߼Z∪l`JY<tV%#_g9Z  @y: S^\r+@@<s  M>7SUN x Sn+F$|whV4*u[Яʉb|][jU&=V?y

+r:,ԅHBRM|*-G{
SQUU`vz>$}+NwwևKֶq!Ֆb[%CB}U|>o[!VX@>U	>052Tu XXPK    PK  ]W            5   ch/qos/logback/core/pattern/FormattingConverter.classUSU]$]ZB>H/Į&MId鲉
W}/8ë(utFSu<w7P q2{9{ &E"\p3,Vb_T1Z.ǱbPb54C%bQu՜cpy:q	"C"t$Q.i%}7padCޒcc)eY˚JTz'OW亿(_E.=Ӌ.r&|Kجit0R}"0 
Ǝ/l(Es:U\W10x`j%]VSC$ZTM?_qjC
WVU6S 7EqkA"0&/䢲$::pk%iK(bnv6T4E/ݛ"5j=9iW9Ҥw.(ԛtD1ͭg&##RAy$4[G~VD9J+6L(DfmAz-+E'nʺ H
q!L,%RntN9q%bc97S-Z^6T>o*fE3nȝ8DI'Cɥ:.}2^Po}D3]rYKCmksO?9
uz&ߗ ɅfuV7mXHQwfղ.
9?YϤZ]TvyՆQT*'j}Q5;q`D|@34Aqf	WؾHRv>m%|DߏOhAZ~)6x؄3ȟW7DoZ=?Cطz"~+؀ƥKVaadY`(>`Z
Mgp C ŝp#<G0w>fo?h:=*;"»>[G!,(G
zq
O0&HE1ܢ_IgIK"k4H5-;$E=#w	>#|FlP>'
dpRT\E61J[:__@o2gy\P.^-QPK["  p	  PK  ]W            <   ch/qos/logback/core/pattern/IdentityCompositeConverter.classN1ǧ|(*~&
aojIH 䥬u)BVz2PFDag71D;!D ֝GqҫQqbNj͔p
ՖYAS:ONa#p4
qyǄ*Pw@jLUhJ$]ڬRy(twfk%_J1GpD+*:RpTA{iR97suR֊/Y;#|f8C{IPgӫ\t_~F&o"Z]nֺ;ys!<sFt y(ڐ/.<ؠ %>uˈ5[ئ/֪d,%`[X֐?Jbպo;6a۟PKo
  t  PK  ]W            2   ch/qos/logback/core/pattern/LiteralConverter.classKAǿfV<jEtA][W:GEoV3<=0_ E A4ͦ
iԹyg+<ƩcwK&C(m\-DtDcEao,Iqk[C|˻ܰ0*+F!jSF0̗-.:uVyܪqW*yMf/O3uO[?éHYD8Ev׺
+۟9ӯ'&C"6:.ʹп84q\SWWxWbt3adkU>B&/yq@!A{XD-EeX";wQ1W.W{ZӠAؿke ܪ
_o~PK|X  O  PK  ]W            3   ch/qos/logback/core/pattern/PatternLayoutBase.classXy|g~\lWE$&IHfH6; VmkVmz[ţVUkUz}>dWz}>
`C(Dv##{0uv؈[mZL(j	EBFںqBa6-6ڥE}P_R
f
321jMS,-7q6윒ƅf)\Ef	T8\fm6bT#EߧV2ں楨<U,BI4)uR*jXGe,)%)
X)!bŊq-/
wb9jԩG,J kȈ2C溄%m&+P\>VkRЂa=2b`(:z'0fM$׸WHsX4k4٪Le[T3cIɏ-$,G*ڰN%86Ϥ[P6wi<D17uQt.]ط'_
Tхn>hECa2IJ*Jzm*W@گbQ#FjFPŤWeeՓeu¬>*-أVCM`
Xwᐣm$j"`X.u
Yn'0g
[
یI#*Fbd0ώdp@EXBcѐ/Ez
*nVF8YuimD&i"#f'fB)q;842U!'LfںLQ
Rwev@[PvQ/^>+z.W,r@K<?ja/x{T
PLL%佼umPxX#x
ޠq9h,q%e#*C:ێ)Jߪa	bp)xTj4Yek2g%^$w]
ޭ=̔}WUmLcWX
 AK@zLЇ2ʾС
Fc2d?	y*ayCl:ۇvttn	u
Q`3	-KDl	-捬8ORM.W-Rlfb(wf-٢A-<!9w}ϮfjJ1Nr\se<C9_@)UVמ`pj*֐K4J%doXurOLb>]Vgx~e;V%
N^L3v.u6\9$mѣ*3s,SUvB4HbcT&p:ژqv=/{ft@)0
T'$ـ{{YGPl{g4
jwI46fcFӦψA}݋N1MaXҭQc,تl2jlM>wj%+;>D-ucIE_UNitׂN/UZyXh݃*۴pX-%(ģRt2e8;;\pPՎHD7EN*GiApbV<6|EړcˆӖ⭟U'_Y˵B8 9OCԟ2x%?2)2O٬XZL!8Ù,{>iOs"G+T~J쬟@eWE`n8_t*<<
QP]`i?	3:a_*J Q0P`z,&~mh8v2k
R|+*&3f9Iȫ^>hyzw('<G9Ag^bj%
S
O:FHoI̐	<FT\7OCˠ\<zew74L`KW}C#&p)l`wmf9y
G?e630!6i,
3+d3bco|+v]oFt|;&
&!r=|M6)K§)k=\&s|ٸ;s(IH,BQy%KSN(8-/+N_
7>{5HmMgh GN0Oڻ⫴Jy{\y%
J1* YI{=so=G)`k$"d75Q5MM_x0|T}s)Lѓ_j;l=5[6U)e6KeN56{yI>kgQ#
/w/SMlK (1r³bxGB+LK`prD 4zN5
dv	܋<{vJG''*~Oi{4iKewoNvLOaje_T%0Occ$Oa@)~IEՃyh_
WOx7q}5O*HŇ/ǧ)G0UфKɼŚ\E__WVr$[}=7PKȢ@
  0  PK  ]W            :   ch/qos/logback/core/pattern/PatternLayoutEncoderBase.classV[SFB		$$Ҧi)-Ip)>,V֙O#4d&i:=+	cl0y\sV &:iB723~kro;EG(<GVEP,#YW}[9s<Cg.Ջ0-bxsD+aE
aRu8,G؎ƿja* v0x/Z*rdEl7ÕNە 2vVPk BEi
Y6s[~ºˀR򯎈2 nZNw_
G1	Ta07%%6&
|ha
Y;ѥ5~H:nkr@,Iʴ}Z{@]ebpT%:u"Tv=V?&߭	}-=Qv}<*O[F΂'B\.Iū6zz+Ӱ09]TB{3dqǍf襘xK摩%7/d|R
wPetrkۗSc/g!#V\};inQJ*Bz.Ծ=xp[zvIeS-m/Jf<5(yN=݁뽒"xVdp[%qUUk"̖<:/Pz!x*=ASAti@Υ
v+5YIH;]ۥ'${~3`$Bk['>Һ(z"VViI~|F3Cd]Wh@f"x\w\wS$pd
_J+	#̑++yքi?g)d[N]#3Jv<t}j/.Gvd$NB*\?`$A3ч&VFJFv6`.V%<=7F,1&w-{o66g;4l_훨q"" ҳP6pPKjV  	  PK  ]W            6   ch/qos/logback/core/pattern/PostCompileProcessor.classPn@%Ǆ"- M	#i,a8uʷQDC\fվfg{9 A%%]kUF,R;ǶPTn*&ĊV.RXgl!([/#JEEڳi_&-Y&:~Euo<_D-B{);kxU t4y=oDM|',DOPK.^     PK  ]W            =   ch/qos/logback/core/pattern/ReplacingCompositeConverter.classVmSG~8%Cb6q/I"^01Dbao[9wP9?"Z!oW+5Wg{z~y;qThA613#d]YZF֖VR9YQ"'Mᓎ}5КL-сNq]0ƛ9'.kwIŪrwПL&֔fn=3\YciD`q_XIUJeᓅ%kVo
(l,'=xX}I%\R☁xg/"AL1M|}1ܭ5-T0G80X/eGi(a$9 A崉38Km| N"(i"4C%q]p,.j3ٻS6q8ο`c	hj٤']~k"<}U1"Wr5PFҌY }+;nԹ2QMxh}~sny<:텤"ٛw<qVY}KKw{lSed"U}{]Nݟ&qTV@<}SN,jS֤_aؤ~{"-ug+eE
NSTT{jA)nlA|[դ:$CJSʲtf-
{k((P5wruM!"*c&~]ȰNܨU4ˑwH'˃@9T,'җnLduZGs(C
Yd,سpsz#MOn<H٣Y$Mu6|O}y#׆c?=y+|t%N=H:+F^ cL%xEl^F7=qtb)Eޓv2=F0$f4:!1J(F{w%0Z?@rd>Y}}
ML֚L$ψ{Js۸N6rOK'4JalDM!	<vCKDV+4*o'ER[|Ivi~X86PD_PKŖ  	  PK  ]W            -   ch/qos/logback/core/pattern/SpacePadder.classMOQ)E[*_-UP@MH4ӡmN+W7nX]Ws0D|g`L3{|#9,EF0[#]JY]2
W hU,wI@̬G!#F4N\Ǫn釯Fqac8>UZ.}ը:Z]t*V
sM/LG@7R]5,a	C?%^M-d"bFՕ@Ͻv	'"C(AEQ4,Șhu=\LU1o5M^I䫆n}7AwӪdXmn~գޞ<^ll{mJfrR;bU nC^kf&;VySXLo-/vWZ
ˋq#< /w:hQx[]d89b_-~	Aiii7//&Sw3箧,i+&@x'Ŧ>E@i2[q'I"r\`,-T):#ԽWTY[	Ǩ?N	f͙^V`5F:IȟDpp\FOSeg[JO˛MwB<rΡ,F'в0~3}@o|?Ds{;-:eO>@.HV&NiĈV%NkpbL+ȉ	5wQ^֋~]	PKt`    PK  ]W            5   ch/qos/logback/core/pattern/color/ANSIConstants.class[o0zJʸc\sBJSLVjNS.#K M^<!C!]'9vN?}2r+!_AEڙytCe+a	Od£d<OҀ,Hc(Is$d^Mc89pk8Y?C/w%(zm5vΐom4ߠ@85pNllzsX"լ-)SjE-߱rk-P(Pm[+z䚔;fbO٥GYT{vlHOb%;|7١|vR'6RviPgvSD b	(Q/_xWk|ķ5C|WU? ~cu7jk\7&6[db
iXTm+ `zPKͶ  1  PK  ]W            ?   ch/qos/logback/core/pattern/color/BlackCompositeConverter.classJ#1ƿV.x#GBv[(,vI0IͤJēT_I/=|!d<04wc/a^Za
"m#B{꼩:V4Cs<Tͳ,f؃cqb˕gcHdg1}q#"c2TSSFTw攷#R-#1e;2f>c4N>?V
iɰJqz'+ɷFiʺ'}6=Cr~N2qz.6	đtv)`sݗ s/O4:(gj3qj	☲H1%,|r6 V#P&8-x+}dJX.~{PK3    PK  ]W            >   ch/qos/logback/core/pattern/color/BlueCompositeConverter.class]K#1Skت[F.REA(z1⭤ccd
+JOZ]V809{N' ^@
<2EdchW{<m
hi˦XZԪ+4x,r53+[y1x'1qb˕P`HGawFl2M}I	M'm[3ގH)tsn[{%cw2wwjݡCa?^>藷Yi]."B}-[ H!+BYWP<=0Pq.THtQ;fԿPy/H[bv\R`iYF6 &iLј뉋~-
(d3<a';&]ڃ7@Ҁoo|KV+PK5    PK  ]W            B   ch/qos/logback/core/pattern/color/BoldBlueCompositeConverter.classJ#1ƿ֪UԽpa[
(ŽvIaI7)Vz%xP'ݺTp`rN;I c-{tE:l^[+ ;8ZŖ+A6\yL04/?")4:QXZA04cI%m!]:@!SˣP_N#J(@Mݡ
-Ir攷#RJ-g1cePo}h<h~\;=>mWiq/*~/D`[o$B"dEO(02n0L2T&e|aNL v
Lu_
=Q): f!}KN34
fi,&-
)sd3aΧLQJ7 s^/
^sK[o}/PK恧    PK  ]W            B   ch/qos/logback/core/pattern/color/BoldCyanCompositeConverter.class]K#1SkWݪkWٛ"(RPb%1:&LZ_?`IbR9=sw`ky/Q^:Za6QpkXlR@<rE1jizМOC&utetfuk;"Cm|WxMfReKފI)5uSnŌ=	CU0Tv_;|$ˮҪ1Vǽ;nV7^H5REDȊPuad>ad.VHz;H=587~`R`=l-71Mc/b`fliH#<peRR~[ʃ#ye,R4{-Qn*PK\7'    PK  ]W            C   ch/qos/logback/core/pattern/color/BoldGreenCompositeConverter.classN1?/PBK8H$RD"gc-N$ު8Pq!Abߌc EμK{<ͭF"=ZŖ+B:LY1Fo')4Zu}ֱh]a(cH%m!YZ>C!VX"ϰ=:AMG#[b!8\49͈BC<:Fg2fi)k8Hj?f6tx\uPاm~/5y{Wy.[^~"H!-BYWxzJ0Pq1ĝ-"贲5̨➣:9_wL +ꎁo&u_̵)hKM yM$Ә1L-(dS:O?-`žfE̒0DީgPK
    PK  ]W            E   ch/qos/logback/core/pattern/color/BoldMagentaCompositeConverter.class_oR1Ɵw0t99u^xb1HLp^eC١ŞB+/ P3Cd'9}mOY$}ױ˃s/Fx#n06^*\8Yd
bzypci&М&C&udr<C},
G
:}P/;{dёJ]aNy7"θn<S/cF灾U"ڣPxZw7Kg}S{W;VnH5RDH	YZ,ͧ /CwLҭoeF']>-]	_Ywn#xuzKJ#5(2鷿E$Sؠ0'ؤX\P(ۄu82	G)~;Jz%Pۥt|_\PKr@    PK  ]W            A   ch/qos/logback/core/pattern/color/BoldRedCompositeConverter.class]KAɷiJ4腋Bƀ	
`+d3L:;	?Uz&Q1jIs{f3sfE-yt:^[+ ?
J,W6)"l(0/?$)2zzm}׉hCahN'!אJ&CyR@!ɣO/qxNQThpwcR1cd°yGM:ɾ?[7G>o)-r9C\EޏL
*"BVP@Fہ!J7Ao87xb&ҵlM`q/'ed[!'9s#q4E	B6%,ʤ<sVyUP<<>Rh׫2kPK    PK  ]W            C   ch/qos/logback/core/pattern/color/BoldWhiteCompositeConverter.classMO1_BZІ¥J8B= 5iIAB6;xHWC@T zwo ;xGzޅH|m7
hi-b˕ G<fӷ=Tݖt, HiX0RI`HW3(0dkv(2|Y/b-8;NDJr#Z؞vZc(On2|}~_k8~(ҶE?V|Ľ;֪w$B"dH( 02T
q+$!{N댛|=48Tg&u_
̵)/hGn^!}I4^ҘKUX^-M(d3xu8<)G)c5X$i·p["rrǳUK?PKfwD    PK  ]W            D   ch/qos/logback/core/pattern/color/BoldYellowCompositeConverter.class]K#1Skwuśⅰ-E[*E/FZicͤ^-xG'b&'yOIno l[	/8؋th#VEHog߫k[lC
,2yd1P|jYG
95LE*irfyxDQBu<RYKCފH)4u#n?){,claEѢAvQ:P絥u(5Ox{Ww:-?|k
=|ae.Hz=ʨas@JWk{~EF1?WI3ij	!eb
s'I8Ja{V`WC٧"^[j?~PK"    PK  ]W            >   ch/qos/logback/core/pattern/color/CyanCompositeConverter.classn1?74B4rHC6D(*kd6dcAS }c HTYi=7gO >YH#ޝHx6qkQI
XZj"Ŵy,2
m2$G,օ8[1$N>fg8ݼ3j=TG_QBTb|;)ŮxFBL١jݧXg('SzӡCa/v;v{Wup-[?Z|k
~-aeV$=
l(qS<\{b]83a%\V-l=w$LE< /CȦ
	p>y1`fܽYW|]elXPK>NЦ    PK  ]W            H   ch/qos/logback/core/pattern/color/ForegroundCompositeConverterBase.classTmOA~RHbAyQPA-!Rbmrx{&)_ 2~gٹ X	#Wv«-J	iaR_)mmQRNBaFa2xn4mPm!зjXZc{aDFx&zIIêo&dE0wnaRfSX5l'6ru墸0Đ"W]-}
D]Q5ژ9Omr$\Iֈ`!<[zpz?qL0DG2zJfakM|-f
8=n,i5*By.ڮrsKõ;NMf߻F\K|jW˅W[{[6Vz\uf҄D[XbS;h2
Ѩ#S2W-ILuM#nlϝWݬ.awN--Y[{WuyޭM?k0IL|@V B<$P>ϙ41? 3xL2u&!YJLxw;l<voc=-~s1crV{DqD=I')f)Wpr9c6O 3б@9]	'5eIܧ~J=sO.PKmw    PK  ]W            >   ch/qos/logback/core/pattern/color/GrayCompositeConverter.classMO1_瓤)
SD aX^'z菪:N")y~3~,^nuE:lh#.VENwx5-W6#ta8~j7MW
3G<TͫRo;Y'85nMnؔJnZ\VDJ]q#(lG&2wjݡCawnۨ4y{WwѺn>|k
}~<u0|*n{^L2o(q(gq"]_o̶{}	07ΒwHMo= yO$>ҚK(Z'̑-)dS/u8"	G)~
`ave,P4}KwXPK`>    PK  ]W            ?   ch/qos/logback/core/pattern/color/GreenCompositeConverter.classN1?/J\P+E@JQzX9.vu"VpC!	ic3yƞ߷ yd"p{?u:j#>VEXMRd@5e_'ҊVCa('!WJC}7{
'\dNE/7!l:>;R'1Ť::	7ҭŌ=	y>Cy|[?n
ǎ2.pֹC\Eޅ=!H!+BYWL<ðHq;0ĭH+:hGB&m.o7٥M>v_
u2K: f?Ii̍*i,oɖb.-^c#ʨ4[yUɷ>{b9PK    PK  ]W            A   ch/qos/logback/core/pattern/color/MagentaCompositeConverter.classKK#Ak|^$zp&LPFJgҌcw[C-V'*(u_ {X!d<0ԂkHMz6kskQDx$FwT:VԵ
Csj<TV,38c1$~fg(^|C,n!U-i!85͈BC<FYLk34QPd߷_+G媣¾Zfqû܋
ly[#UHR	wC֨ø/CmwD҇0]zF/cq,z6;	l`޳`E8I!YF679ILј鉋1ߟ̒-(sdSy:OW&Yx[3yE,P0{-Rn2}oXή=PK)l    PK  ]W            =   ch/qos/logback/core/pattern/color/RedCompositeConverter.class]kAq55&zSL/^TT@7䶌ad^rUzFcF0da̼3̜n~8RrHA:c
yx­F"?!)2z.z<щLD0dRIb9 8%NbI9o,6$ÐKʧԗJ0|RHv$k0Tֹ&KvyrH՛
W|?^6W""dL(jO/E02RN
qu64{2SY[ԄDm.#_\VmlO4\G" xJMc`/}s
/w0ϺFbXξPKq    PK  ]W            ?   ch/qos/logback/core/pattern/color/WhiteCompositeConverter.classMKc1ZS7R]x.%mM+]
ēV#/ܜ='OI@2TidG^&@u(ZDx$Fwe];:VԵ	C1<Tͳ,rhޱDre;YvGo>oxC/)Tn
sʛ)ņxtƍt1e[2f4}b4L[==;ӖAq/*NW"7oT!Ң'uc|*neȨ}Q
Zl]C.o哛v)`KNqV{d_;$1Ic/.`  Ә![Rfɦ0u8<dql+
/07+a!?Y/?-gPK
ˣ    PK  ]W            @   ch/qos/logback/core/pattern/color/YellowCompositeConverter.classMo1_
%-I?K9t"HPr(ROYbJNz菪:R*Yi=wg- d"0tsB^!x6rkQDxG$FԨ'SK+zZͅ5]LK*iZ,9?'\8CȢp}'Ef=QITx6
sʇ)xtƍtJLs3OdMop[fCao?Y}m0sE\p,۬ߒ|k
sd!Pq;3ݭt'sh!a@Iw{]W`i|L^,#޿IOh,=h,.)-);dSxu8".Mf,+UKZlOlb/U9{M,gPKH    PK  ]W            1   ch/qos/logback/core/pattern/parser/Compiler.classXYxS_[\0c"BpXlٲq Gj;&	E˺5KҤi4mitK-ڔ6-KmЗ~__ۯ
g$!h99s7ξ`=^4tLG@}l r$Fl03NY;GGbM6+i*QJ
~34Ik:I~;i!PJ\;%YP7[Y:0[@æ9Tu2aJD8V똋kX	EthJt4`u,M)\X_buZ2y+ԹXGn7>#1Lo	#}s[5,}eud\F^`^}׭
}~.4MF<kwZiW T_44(1vWXU7p<@[iV?Xձջ
,ɎfBmтVCƠ^`/I7=,C5hQ`Lc;(
ݬc:f[mgp'2b}e.DU:a@%0'S^O}c@.IN%2v\^Q[du=xH:~lGG/d} vǀ{x
-32{e%Z؄
{týdU̫7̖Y:.#',lHN:b+mƲ^cc!:e5AV˿`	)=P*a4x.u$0*K<Iۏ%!+6vqGJRkRv-{5f6.]NGT~57Y&0I:=@(PdT0߮!<fNU"Yy<rK%?ޅ4<2KKyDtQ|ރjxRSx8Ǚk.!?ޏhW1EA{پL)WJ-g˱NwCdxoqsЖ+ѣ1SSixV	l(x,Pm1>bH}ac5l5ʱC74mvnTkWRV"|VuZIkxJX;협3K>g}EֆK屐Jjc[5R-%:O,uW+[&bd̫׹ظ-0ti뫽Tg<j#qRRpjsf8,Ks "&)dHbYQ*g	o8q\`M.sKބxNצh:^x+p/%vbVuKf	vӮcvOW"[y54AzG`ܷTfTf=ݻ$PNJ4@X,Pz?!11DڳJn0S4ߓr~9!'@~!]
Fק	gܯO͸̬*o-~r+̰A3&Uksmsc7D/یd<atp@}
LW0Է'L6̓OIjSʽdQ38۹gl؟-NɏțcoXJiP(P(f4|mRm*qf&=1</'	Փ
X9k$;&e[^g<SʞYBQż)hĂSEO:C4e0#+ԔA+|a[}kbAɏGݔ{G]P!'vӖؽ;_Fp`zf(w<(P. S29CM 퐃CZ*h# s4C
y4d	rQO.4`M5c"fy%
b5Z񸾞|pl7hY;<B.a^fhG;4l]ԡ^Х(q/÷i|/2@{0૤q5GY:Y:7l~w8%7-h7G'RL<<Hx8q=<I܊JC X?l7/AԀ!.c
r34ҵ^=M$#d<.bv(Ԙ%NaL9'UMN,D.H/kUTj0Hq;jgJ_t%.ddsKx|
_@]:%y};ԉ_(teω!>}R8Auȳz<]28@hɷ|k!CVɛZb8o/3x d4A.{ҽ .SO[
z<ەd/y/Ds^8/|GQ}}^x^x^x^s^}&5.G}U?QTjK
PKG#	  j  PK  ]W            6   ch/qos/logback/core/pattern/parser/CompositeNode.classU]sT=_4_.4M#KR %BCppx/jER%9_+yCSfx~Sa$q:~t޳{jϿ~vDfc-n7ņ刢=O8&=W8M)TWР pw XU߳
P|k9M!qO7uoa4^yynqH4RWh.U;d)[{2-*W]pCQ<pe
D(-~h6 0vznvpT5)sMP0nR^ύV?:^Di;aoe6{Dt=nznO'ՐCt-&큰ať$HW5)R5q:gy,hXI_~tj'n^]8ۼneb5Q.Cck #ULzf\>GA^l*nx.;0VjnNåG6Jwh2vAZ!t_.%&xղ<s!tgtT%gS鳴oE=5,:piwbY]:߉?0DF
Z7M
UPe/&^J_LB.\tOХ.Yޢ""-xџtW}0}7,]?-DA0X_zr*3~-p0 B2E"_^"	3)_LL8D鹜?"=*	58uCWcc\=DZ;D,zD訟
$qLS\,mg2tg'UEP(P,SG=UZ>Tm7yk|>g1s0TB1|Sչ4YqrrHեy)	
1nZg~+>6jPKT  X  PK  ]W            7   ch/qos/logback/core/pattern/parser/FormattingNode.classSKo@y8ui3E8!TRHi9	'S	_c/=D	QfVH|ͷ~`	!"25ZmY7yۦ혮2Vj%W0110VƱF?
 dH1<Rqc~MeO8*=AބPG8t Qװ;_(DZp{&Y1ZFT
ǚ!y|Oj͝Atu<Ua5õ:pEەxC`ȱawEK]2$WPRSsjIɝ!W#n\B(t8fk{tĻNme{'η{"#./A7Qt{3O}$Km+;M3C֔, a-bI-*ZЃ|,CIl}0XhX
`uE!}Шpf`"`Äzg()-S5qxaz	{i.j!:@7#	DO_p)n>A8tJ!QNbTAi:}@bO9bh	$(?WpoƳZӛcLgr3ѨyLUAqJg䐨6Ufg\ZaK3'^PK4  <  PK  ]W            -   ch/qos/logback/core/pattern/parser/Node.classUSWn!]I "*"jJ,H,J"q7n:?OALŎ/uss.	萙||?9T Ab9SUsc]+njAeV*gtTŨ8=jFja^t&
aЩ 	D[MB'ߧF"͛*z_Vnϻ1جWGc=?8*EPת@oM%~T1aPY˳!Q|yҼcU
EpW`]Ld5'b	ڦ>kEY8װp0ϳ
XPpZ_^W%
c=S4jQS KR{V%q}NT9	xܘ*&ٶF[NI%2饹};UH?Cvٛ;s+WyWt.do.sI$+6.z~]TYԪͪ8
1lΒTgfWo5ӵI5&{#;~=qE¤E$j5/*:I
ͺUԯUدO1i:ci͒-:"oQ\E)Xǚ!+CsS"rz$n}ynQink
}ܭ6>~ĬV+wEMnV5mD=$?aSjk#tB$ ""$i-fh}i2Z"w'ͣ|]aw*Yl~K 1 ^@"I3>Dp]:K3ܐ <,聭'H>hz :°vxDfy0)eįP6rsD^f.o}<9lX9,xd爵2}|b: #(ǁa1]J$FGi/~DiO8W7b<Nt¼x}6>~nu~f/3=*x2@&]$y͠#ilԨD_ҞR!%
|W8h[C\Tth얲/!8̙M
4AKZTyty+? )	
C};H/E}.YQ~Ñ$d%jrQM9y,J[s
-1WDԐ%t$S[Pt<y9T3AW j&4Vq.Ctw,RV0?D)ej}Vsւ}ePKF`
  I
  PK  ]W            8   ch/qos/logback/core/pattern/parser/OptionTokenizer.classWmoW~nlgb3IKu -4i .!@N$0cSHw6}iZmjW"OR?P	;lZňss{O>8A;3̔
z4N?iٚi[
5fh舕VF'U(hh2Lpz'|a{o^+Xz!:]McN/h:>]Q{	?=(7QA@jLtlꂞ6.!l]@$yCfl`Fx^^lC*C`O}(I*x5̙*venس<?x|zR
z:!*NOBLpD`4p$T(hReЇFFU0T9ä(m}xT{FqՀJب_25Jwa$y^3aYB?Vq 3'l!)	6o6pS{i'
*~#@(UXi3(ƈK%ǡ$/8q"-c>1'TL$@qM83"C[4b;@ghfjF{ׄsN<P?	榃e-3h
Yh\`*P@4֛Y>d0&kㅁ
.Ȃ2R|)'T28>:7I'YBʊEwv$RO>!P$:ĩgtᕵWΕ	N"GNRkmyNl>vb,xt~,`\x<1e)֦:\FNh˃n{ְ]O*)dip^X<ZPNv*WZ;RmL`HyX "C]˯jк
Skf~`⨖/GUқ3f4q 1*_Gj
qkxXO*aOj4B<YN4ߛ: ")-_]~ּ>Ats)MCKM^ \,{S~~}r2
>_^ctAt/#Ϟ2îE-`"6]"zV# ^!@w1.:9z[S#I`l?Ɋp#UO D>j;<]Դ+CpmC7G<Infn_nv'=.8ss$@p+^c7%<q2>(-c񰏁%<x']KHIKTUy/P
lw,k]7fYK[t[)Izq?=/&}ApWV+al{ncu:CwB`?C+H3]0y6KG>R+݂1|c7]zn":)|I|M7oqóωi	:In̊(1"H Y ,\s&ǋ$>+x]&ZzooҾ6[%~E:m[4?k|s;Ro]AHa4owAXa]~#u[ XGRΧ.dem]E.Mz5!*	%&d-"|e:9~Gt,	ȊXjH}4*FރUmۄ{uZs{Hf$ܖIq'/η
>{PKWV>q<  Q  PK  ]W            /   ch/qos/logback/core/pattern/parser/Parser.classY	|}VYF,1HAWƺ
j,-^,;#!MRrCڐ%MiKF)Ih6GۤM$mĐ|hv%-bg}/>f
Sm7Xv[?dK#aT"J@sv.EY<t3.6:ٴS rahub@K)19q|mM@YiHQt4b2[G쐓7I#7Ҽ덣F۔δmCJjJZ͔'j8O`Rܤ9>1q;e		0tnvEgxLg;z_Vn d
9ndSf։O9'me5lR821s,Xi#C"ք	J R@
#yq(c^
QX;mM樜zZ*lh^oe5fvmZp}MENrU`]I;wHݗ؁K¶t-6dnܖ\
ҦuKfM:ttJ:~brU:Vk.2n0ѰG^$.,S,q~}TOG/ĩ<}RT.5#MǓ]+p˅RHbH<3SNOe2We+}K.{Pa%_)a$HOL kuF&Fc쨑Mj⠛ݤuR\yLq銹,UlܿC2 RE]O4;.Ԉ$Gv'zdkd(798-	߿{n,qLhHG.X
q4DEG:K$7 G,(RtDyJpʋ`p0%p9K'ًŖ"c,x`W2?7>|4qBǍgPOo<qUABUr7xRvp!!眩/͟?ذ9cBV&o4pŶ4]Փh`ڙ[|%6KVZ2{u!3>&/u'^ғ<qʏIj¸&R?d(@ǟEE-;n{r}bJh^cByEeJN;k߽x|P_˲5( pd+ycc|ʇ]C12p\{ۜm4A6[)M8͓i&~	}´Ӷl
k:N̹l>>"G($&Zڀ
ܮ19{
{=eqQvwk|?Ohu
-heO>.vhtʯ'>)pRc-wЯa3hxJǧe.+0ҝ1l-/$|:>3kFRsS$tzC!|f.cL
*pRxj"b1 ĐLtĞ"K,s)AL /&Ya2;l^hU2>]O7Xog^"^R~eAݪPf!3?,{lɦ22|Z{΄!V&a2_tƑ
(Ks8	G7/2Lc般{#tBl[E-eHc1?%4斫\)խH;Qs?xeR7gNP)d)[Vv*QK^AŕS2Pթ!l)ue͑BREgC(WuI)fیsr
V:{T3);ԙx]o_\vTV'CT>ewLIwYc;y#g:֘
̗sD>bq5JF"j7Д`]0l15aGL_
&q&ְk+Qm{cOU\ɽ.Fv,cZ֑\x2;~
'd2$Y3-e뗞3;!h,[U3Z,㵞cŧ1+xo 
<hlub)uMYF*w%o[uo;&>1)6E`mAmX}
򗝂Z_]- ՖTS$u#lnuA?Yli8.xTc
EDT	!^wy\F#3z{EB;ȹ {_>Q OhfJ̃C !f
?
؃NY(tGm	>˔9Ðn4;.M\At
ήO3F՞~ί2~+=&eh/TU,=C72!4wi
{
Aq]}gNcwZ(խo Q<-cpX	eogF[+G=gO[h˖Y:nGOWm/^sjb޷B}5!eyv\=g[XC4T#j-k9YGk Sۆ鵏p7#^T=l㽞лT:An$ъ"JsH׹tٷanGoG&ܡHIegi~w+o}2syKME+ɬQY?F7*N@yQrݣWUx8˨w7M
'gqH1qO>@e9!mbO$m*σ]Bymd^PEe<70hD1O93XzOwW6UN/$֓<HYY8ara*'2>-Bh*DDQ+E_Y\"v;̛f/`$={Gb3+GA7\r/4Umh0DWYk3xIIR{)xw֦ivtYQ:tΏ@w,؟d
)fOc$f&"1Iw`եJBkj*׳&`0_QdWRfEqЧxܣxN+xeb$₅LAʫQt(KX5VƇz|pXO
b_Gf//Օ袺-20 [oDhXxd)_Z͋o}#oY[i'd*
&HC"
5~Nbxg-cM,&߾j,{Hp|5,8ZBBN	bCnk4>u	 i.
󔃵tKXh~ZL넬,+!rumTוbbS""6PKw[
  ;   PK  ]W            :   ch/qos/logback/core/pattern/parser/SimpleKeywordNode.classUSUnv[Z(P)V;) (6m 5lM$[t?q|Sg83MsnCHCr=;wιw n 0^;^r*E.9Mnz)*"Rՠ paAӮ hִM>ПzJz(J*N(4)HQ07jq~թqӱz<unZia=B/1uc8@	F3
g1^u^&'&r

%su*!-7"Q
Cצn	1\RpY8$Ak;)ɷFdD椆&^kM9{aH*B3K#4!wC_7US5l6Nnt (Jpڤj]f=6(61d)bxp,d⎆0kdKw4iȸaZ8Ǹ_Yu^wc-mG2+m,7H/Zrn)cWMj#|ʈM`Mbm՗hE2!V9f.'ɋz-@tp#WpnX0{[]D$9wڢNً1F`l"Ԫ}˨0vG񥊯oĸ>t֍w-g"psexcyY׎ܟ}eL.Eٶ[:EUbhW|g9U:Zgh,ݱdd%K2C'4O4 J! ˙@",,';
9	65}}hizﺒ?#P@_C|L M~A\P7QHcM:
jѠ|K,2(2TGi$UtwRA7B]FX&BF%Hxmr>m1$gLSԑMe6fIY	BTKưUe`@w{ie_PEV='EZ&hy+.nB+ =n.n./[ppݔ>{43$neGDR#IC#TB9}.(gPK#  
  PK  ]W            .   ch/qos/logback/core/pattern/parser/Token.classVs]EȷŘ$;Ȳ\bb+H.NRb5
!ڤ$<dR/LN_;gbso| įb	^1Q_Mg뮹j:qD#4du-}nkQ]OWmLok:uNt{ݬt[u=#\2k-U_8MתsV#1$NJqYu=ӝ@z"
S@d%s_}/nԚ}J	<'e9턣a4蚲t4岕Li"޴8[p9eg2拥b~XF}RD)SLgٲaX):2(8pX7'zp-wk݆{fHKc/jXFx/rC5At˦JVV*J8 ךF{^U*fS~ @
\8/*L =nI/SkdֳMuix4(}l)]H(]yTJRs6S-1旭3CraEDŲ$X
Ŋ<O^,.-2SsUqtɺ%b)?QYgdS.˷r7XVt1;g/9nWLb,TU6g8}f]X}[
?
{WKoF8ʱUӭ4͑dN`S!\R;w2G͵z(&	VDe
?hK7X)7{j͟t%-Us6\ț!UHRk|jQqt)~09뤅ª_+oXMUvn:uڨ/`ζכmѣeڈf61ije5D^7ɚh>z,18E3OG8}|~8
"cz|!KzMo>I_g ]%L^&j&g.Ϛj/{I|X|po*#*9gN
qᯕ׸),=9\Q^G^gm(vēeM$]}eWv'){ڕqsbBʣ{|{{_>+5zz{oyGiJa\$o#FP$p S1ɳqnZE~ۡP	3
lZeʙ~4;m=.y-by"'/;y|j;'_[Vɽ I Jkɽ?4ACOG ׄ=)]C|F$ yNfX!!QP0X8 .sWx5R6!Ik1ƹG&q1^Ŀt/FN~xe;!;,6sp`M+:|"wХa8GV( IF(3,6%@u	q#y@#t&5[D#wGȗ7o$ǃ'Q较S RCm:xoMn1>ﳕ?Q|#'l7Uz~ԭ:ӾC/orO*cAu%p⏈\8
&$3|o0-Ͻo)>
O_XSSU$!7IhT#xA^BjZ	|/K<_PK'z  
  PK  ]W            C   ch/qos/logback/core/pattern/parser/TokenStream$TokenizerState.classTkOA=CEj, x@Bb?ev?$B4>wՂ6;s9c
},)hc-hoVu*[fVv\6=6[f8{.7wwuxA!9#[7u#cd-IO툊\.W3ja)<
U?ΖK͙*:ČZX7r9	1]=Z163욱szsAE'LiVgH?ozЫKE\b)ʿ4ߚZմ+Za%/{eWT*$d.֬yŪYMJ,2}AHACl˛cJ̥6"hE#FFABV1
M,,ưLHT/ࢳMӑlVanUiDK}ylV7L.U6w;e_ގn!QcDub^ݥ@2Ax\W{1bsTJLwn/[1"5^V 0tr]yƜ=YAzC?R^& >>v(.e7)F(>B!z>P0!pm?I(Fc	6|C0o;z]ܓ/>J )6N TGq?<]Hh{(S1q--
F
RE/kpzIi 5BSж/t7A(2HdpX2Qd?=-FE4CQob0/1dMc1PKg37  E  PK  ]W            4   ch/qos/logback/core/pattern/parser/TokenStream.classXkp=kٖbpPHe;J$[8D~c;NZZJdIHkIy(P(h!ʣۀ!(Ђ;m3tGGEϽZVb<{{}|߽{(x׉<C)4>ЧCR3RN+Xe	0d?lD}`8%R!-opHAH,blQ(v9NbDNhɔwN#kC
{5T
9
4)`Yp

p+pgmC
>	StS]b@B,xctwvP9Q+8ovZ)+d`WCG]sogW]WR5e*[AJ3TJD<%JЅXD
ݤ"cP$D3Ѩ>ECzhehVAyl8Ɠ^}(ax-ޔ4
Ư.Tb,8*3U|ӐܥbF?K1s! nSy
Nv$uɤ6I.lZ<__ד.ԢP/Р3+.JBDXd8Ӣ"U4X87GQZB*4g59>_13UEش5Ҍx8 V]C*I$!=j$.ۧiG V*vi94ڵ$S\.r}V(ZtX)~xpЧȈg:"W. ,/<Ghn0DD^#ߣ	v<TSTW#xᶮ֮m
ޮV'.SXS3ŦZJw{LߟE거7?#\H`ZB+jV"UPu\E9IX5*u4%CrY^q/ɬИKq
,eŔ@fR?U xI=
ul65hdم;m'TqsAɲ jx0<$jR֍b|W=mK*hJ:TyC*//RvApk4"VVXq5`LLc~i;Sz
MET<+(NF+Z&S#1uxOOvi}Q]֒l
fͺي&U}-Z"c>Smj N*|s9uVGg|e wFb1-9Μ䙕WyqF񬓱6NV>#ߞcV4t\z
ΓނfNA{
Äk.+c1=jǹӏx<ۉ2P8#ۅ8vËG-(	{
G_=(G3dTC.4~*Mȏ+de(b8|<Z=u}GP6>(WWVݏ	TVr}bx|U$>@|q.L Cx:A4f5!@6ЀOcT}A'\Nv÷`=L74Om]9,1Y/PNrr>!n	ky:Wʪ1Ө4{-i.{i,2{iR${i8_nwY6<GU4֓垞yOiwПiVy)I&aR4*{q(ӍA'{!C<f\+q)ފ0n >U&WR>~$>~w
ec\~nqYy@./b\q#	vp;1DФ_(YL!WƋ]ޅ?7E0wVف<ZH"#p4՞1\z~֎ZPעg?7bnR^;ncocClw()'b'{"6;6˖(+vOSm	apn|%sS6!0IwY[6RV
Ԃ"Y?/H`p&5]M8'oKuRMlԭ&Sv+<CXbw8cRFɒa{XVeC,sY|by)D477788V,+h?-Gu<0LUmi
_Bnil	!; ʀ,'9ʉzO+Y+@F<])ڧ	tV0=Bc۱X9Чreҩ؞(C%5IN;5XH>8ffRb̄;<Up>=^wf:!{al> .p;ؐϱM$f,?(BЇ2'X^w
&?q
Mηb5CK&i7|\{ҧkؤؤؤdcSSQ.+;ߨ/(iinvP6Rs#Et;LBS*_UX?Qr[@f~
?c~kxNZSD~+ "dٟ/Dׯ,OOJ;,d^쉇gږ]ÓYP>v>61u)9x z{%Îeo-{R3Kb
NEυw/?PKv
    PK  ]W            ;   ch/qos/logback/core/pattern/util/AlmostAsIsEscapeUtil.classQn1}l
@ڀTHeRޝnJ~Tձ		Ìy/ xF
hf(d$SR^FT^rԹW'].g6ڿ%wv[X"lƔqȬq^&^HJ;ï4qĊfҿcUA\řu
ܟ̞P:t6ű,u`'!,]и1(?6610(#fVj@h٪nu 6êsϕLЏx،V9v
x5~nqY2w^m%HS^Hf޺	u<)m{-$|42>PK.    PK  ]W            5   ch/qos/logback/core/pattern/util/AsIsEscapeUtil.classRNQ]^K-rUQ-i8!1ᡄ&4i-/N8o	| EgڤQl/vZg}ws`JABsC
O9WnB(i_'\ٛ,PrOQ!,OX'Ia靖2Fh5cm3=gFP|bG
"%B$*EhOĝ(verjayԙ0y;8SէQx\vWz=idcN?;kT1ic;anD2Mc@'Vp'`CJ'AXl{ȡ*_ax&˜	ľu
=-fVٖG 9{^:^CFWZU
ON[W?Tc
3#XD댠,z͸,mƭ#oPK[`    PK  ]W            2   ch/qos/logback/core/pattern/util/IEscapeUtil.classeM
@JQ}ފ! u_մŵu: =T]
0| VyiX<XŵpNي[Wh:v:&X*CZ*T<٢ʣ?gf&ĴV]yg>0@G{c7PK4
      PK  ]W            8   ch/qos/logback/core/pattern/util/RegularEscapeUtil.classUSW.	A"lQ*PnKX즻N3g^xK3:Ӿљ~wZ3sOp0A=w{Zbz:wW]Q_w. B#؇K3EnE2ۛ
c?Fp ^\Y\6h4dwrw0%M`0r҆Uit޲etՍuY=䵲A
/ZvIs̒f;=;;#N8)x,j%X)I{eWfA'*i2cy͝%J#Lf6vUt.>(H;| I
i% (,/Z|+N$}%m@r;@е`rW:8FaRX)4Z3i1ٺ:ה~wIgNM#һкWg@{*Y¶UHw8'rNd^1)X"	.[骡Y	NiB'=Ǹ9cDEKg1X;/uuQ9ߖ˖:d n	jWq͍-R2b >m+6er4)tSS35[5ðB\sU<Zy;M
|=kY8/Z[3̂!IZwV{x+eW"<gtW0iJ;ch# Xc5 V𿛲8'#|(Oi{}/
T
p	dnHy;5tD5{} urFאٺ~>
UhcUNEU:8_7;[O6o
?&~ya\AS}<pЋeU
+en4c^k(
u&%gJzW]I5|{CPO=-Sϐ)h':Ts:+F18OmZϳkbvCw9
1>
s:AI=G21P!/H?с>(}g.(8wwX}-/0Gbх'({ڻ۵5Ƣ)OĢCihPA]hB	mh{(GH
х"gm~K,ޠTO.3CfϐYU˲bӬ
6Gq
{sKZ=c<f?__>>UVi;ucޘ"i|ȫH+!IU}z`M΢vnFWsސCMW&c; PK(  K
  PK  ]W            ;   ch/qos/logback/core/pattern/util/RestrictedEscapeUtil.classRn@=y.M
	%q
 X Y
T"n،Il?	| k6EbQ;N$Mfc9Ν pc
E%	SAXScTz)16:VqIn`
41A<;mtt\ƆMT	OHƬ"HCv6{J7:ݥx

Cobk]ή0V$TƁz)Fy>M<ל԰b:< ;JF+Wr=1W<YL'~B8W]#`&Fb;怰6'p}7?/yB6@Az?w<z?bO>UXC%y9	ySG[b[
_7,-Ә[lnĶu<	FgT:+:Ŋ:o~w^%vr3vKpwYJyf.GPK[    PK  ]W            C   ch/qos/logback/core/property/CanonicalHostNamePropertyDefiner.classRN1=&BRZ
A*!*F٘İp+x	H|@?P?h̜slg b )idVt.3k#/
dnPoB`an۪Wl02~'a0l[u|VŹ|gmJ[֡7aP\8eX,sX=L`#q"zuT=&HT\	ɏQaĐ.usr[mץ)!c~M]0m[*bÏByzW&6qGm|bqwOPSf3`I{b6`s>cT=9^`Ѹ=47d_PKvR    PK  ]W            <   ch/qos/logback/core/property/FileExistsPropertyDefiner.classRkOA=CKlY	@H|@P~]O_`@4w%(_w{ιg ,㹍>,#0l{V7?x N"RGŁ%CfMvZgHʵd1`vð%LPM鋍2V`tU!_}?q睖"i°gUC%pP[]ߎ6Cu0V]g1;LZn܆pcmr|#Ț9k:+:xl	cc]3L9#m/xEL^C
6dV!=0hr#fZ%qTj	c.iS_?ZP14H[&:ݠ5Ŧ.ިgQ`\G1M9=g3+`_),Ō,bs^k`_iټBҼNZY2?j.Pc0~^ ,gP_2UZ W>;wz'xpI4eƉX"e`ykxg"h~bYҧFPKzT]H  1  PK  ]W            @   ch/qos/logback/core/property/ResourceExistsPropertyDefiner.classS[OAn.+ "J`oʂH%\PPovhWݺ;5Gb&c<b;{.sfǯ =hD!Sk\ߴF^53m	O>#uXr,*CcHn A?Vbm{5!eIdM;
X1Q
c. 0O--nIux-mAK2LdRgmT#ZO}/N{4p	Sq^ozC[1+f\5s=\^WngBv~X}I9BwJ_uڂ;k~ԉ^,!hGKt[탪vy+ܳ<LFe?mLla<X-{'nE&0eI&V
Kԝ[j_PHjq^OcbzO4ޠI6iht
p(GhG<B
U+g|?z]$R0٩
TTXnyrecC"쨓\*|}hj$$`DC$JaG8
Oc@fHz鋫ɝPKq    PK  ]W            3   ch/qos/logback/core/read/CyclicBufferAppender.classTkOA=Sm,Q_vZT4v;݅D$QL4wv떖?w{??~}1$אpZ7޵\ѪWMan̷ۼY΂rh7m0˯B:	U 4~n֌Vö6^N!|j$TVN C:ovahz!+0C1ʠWU&pD8p=D昆]V	8ŐU|^^&4YZ5U^0uq5B~M;aSb7޺Ph] ({!ľi
>7]oކC&\|\(HbF+vlrYmP&SiYfctlɸn{yD3ލA?Nۊ'&oz=P:0D7fyd%t~#+.-
"pW\JuF˷zK}%EgB]mm8g{Ic^U݀L_;)GK+PQ`hߐܦ Wqc&v{1g2sNژCH~7dhi$lee,dɆ,+UgؓvT"j*A]|MB&;8oE$1M!xpP҈nvZjEq7vR%<"	
{	^^fوv9LIEm;pi+eYȊ$	EgpǧGRRq>Rj*xqs\$ҥTTPB%jBĭR#pDHpOG31+tq%D0"cҌ%,_PK@1d  y  PK  ]W            +   ch/qos/logback/core/read/ListAppender.classN@ݘ@9BJ$D+ze(ثA*Bm%uޙ÷X(`:x,Ü~n7?sX	wQ g٪dRc0JkuDRĆ#A8ca9<puG3+C޻ F1fak$CytwO*kG=ٌxQ4CUU/q@OFb!>obuDVEb?#ѓi?X*I~DF}nm<-={qGC>AS1OE#Ez,-71qt.|%r`	:SI9zLYM?&O#c$)Jn-Y{X t_n.x7}]o+]PKh  i  PK  ]W            6   ch/qos/logback/core/recovery/RecoveryCoordinator.classS]S@=K?)@
ߕ"Ъ[)Q^R/TorԻVGL&nsﹻ~#h/ ;ھ4{+]1t!8kڦ;HC3L缚ֆ?M1Ҏ}9HxFsgӴ5;!(
eJ%ÍJM&2(B:trq$V(PJ8Y2w(ECtp3_2E0`PtS"

6^\#
΋]MrՔiYfU) @z<,dB6KK(4~yirnW]v˚GUN"Vܣ|naMב7mcyowpJچ%\׬Yeoމdլ8/rnKhʶҒ̣VjJج9'lCxV)=˚LBbЏˈan͑v#xI_!9h][#<Rz{t#J}B7}1GaX6 F	zghUa
,xy<dhOtJ$Bly;#yR(ר-:.(AG*qB{K}M8AHI!E[2)nGS0e"gfp*#q[Ľ
Wc$+G%5::)FSTe>X$"Ķy1k	*MjWMYuhHBStNO_R*0tɣIpoPK;    PK  ]W            3   ch/qos/logback/core/recovery/RecoveryListener.class]MA_ƂXKkH$طRtjP[بUWu $0<ړfh/:nr]fa"ީBLLW;\ 6|IΎVNɕkk@뗜yw-P/':W6|*je"=h
PKz      PK  ]W            <   ch/qos/logback/core/recovery/ResilientFileOutputStream.classUmSU~.$Y[R^Rhm-hjEA*`՛
lYvΈtpƯl`{^_ fP
":17//k9[end
YWΞpOgZJ]$]w'bL۔'Sk@w5i00CJ&ǳU!9
aS8+.ng37.鸌+DxCŋUd=WV+*gcPU"jgP
I0ЦUq:p
+*yKpmu-mnbL5l4Vo'1)L3Tٴ=nJVЇ^)̥3r	PFG1\;"LM+Or[z`jw2^0Z྆l^BJ2FsU;rQhAy,H
؞inYd(:ָk}`m0[gXx&
e_%'edx!jҤikX`fynWNbHQ%Ix-঑PU:t|,<5˓eٓ;<w!%AndsIזv*^<F73L+cd3\İ7x[O[7=gGh~q~
-lZvxqv룼(qu&ZoynY%ST/M-yRfVT5FJ*mA(M].[E1G{;}:]S#"AH|C#x7zQ:0I~cIL<i8>Sxv:B衻ފ`*X(;Pt2$B;q/(.<@QNZƉJ~KALܥ_ayH	2V/%+HcͩS̸?;n2mNzмЌ_1>zl+`G+m PK!q-    PK  ]W            <   ch/qos/logback/core/recovery/ResilientOutputStreamBase.classXyx~'$@bp&A-IIЄP$ى;DPmj=Z(ö [}}٧O$<y3x~ewj(D%zԴYg8t8CRP`Mg@uMW	Q"a4&7Zv4ehьCkLFlmCAYjҎqGϤt%./P*,/V6s4c)COSk
KYLE3P´\[`u\99BHVrL(pShL+`C,LӉ-j\JEX`dYUF҉jbQ1jʴwy-@Ȭ!z5lbJ5lS;14T_iQP`ъL5Ѐ-

G2ÊPLZ
W-&meS{\i6rSvL6
-.fh:1FLx+IJNᷰ/%NPRpAuJ餰e1^t0>+Ӣ'TR[E3h<gu[
^Ol3dƔsdݐnV
5\;tԝ=3  8zaTOלX/kgPleN{4$.ayHsJIr(;,uWi)0P0/΁5xJÐ <<'R崳#aQ07*8KYm
dʲew37i8׳a#fLԕOmr2]"t}7MΤ;1|][pCt4|Ihm*ޮ.=Y[8ꩬ7s3S9{qwj7MTz8w<wx码kn[op*֑'<b竸 c*mkxv51AaѝSiO&;:;wwonֹ?owrDHR-as_qʞ0
1/5͹ꥩ҄6ڲC=FS!%3x΀qr79ت{a4{(5]
Sy+Tnӡ(zv7.cR= S
.Ǡ.g{fD_ȷEnPgf:'-xHC=zդ}j3W>SUDae3Ic)*fNh,v2pXv2ˡ_^ĉ2(Ʒ	
ep=a-YX8Vh{53!S<Yab?cRa;+v/+&AxFuqp?g1$w456nޞ7G/C~7~)X=>h
ф
$O0zORMvU²ñ9O;
rnݚoT#%?s_TMvѻG9wϽWO
IO՚Sm;/*n[bm
x
OT򏟬Ի$5([HIsMWQN59	%*~Fc(<%{'Q1eRiVP[_	=.ڬG1|\kU[y+^"^ʎ@
C0 ")S糵ĳu((B	6:4iV`Ԑ|WOKgR}H`cZ\;ō,QYGy傁qc\d.f>n=eq4RUXFUsK饂aJTZ4񛺙gn#֐q$Dg=)Ip=NsHK\]*UJQ?-"Cr8vFaiqrqq0Z)+q5:)y
k-So
CaȅQ0D!r!v8W\ &"D4q%uy=K_%\+U\ь⋇b&ȃ&;#V*<]`Gv%l\e>ohw l kM>(؂{hBеU?]՞82=ޓHWN`NEt#yʐ7u8,_l'tǦD$]͐R7!7	odqo|1Ny/\xѷ0,GSG.R9$ἄ'Dӈ,յA[vC⽓lAɻ wS^j똒m/:*ᩗ?|淾bpopjaY(寻O1i"[f13`?ȱGXGؠGã6 
*W>wk"o18|LuA	9,<M*=b>ֱ8n5U<Ɔ}cIy#)\=t3L<>-!FIgYp\@%*y| GJ,hwwzWw_=D*ԎԽ8uF},!ɍ^)cgU\9Dd}e@]^{뽐TzRfh*_R/˼n_pe|)MmoOWPKF
    PK  ]W            >   ch/qos/logback/core/recovery/ResilientSyslogOutputStream.classTnG=dqL
@RH6hB$C-z옝qߤJDTCUJ;3;~ nbE#>BFR:6A$"T"jVM"ׂp[aY\z6Q9p=|և;N776|wxgz*z@!R	X$?i,L0		8pfqIFYS8ǐSpL)s4f[=ѨD$I%c8Ǜ␛J:T˘w
2 me$Wi:\t?Kե$0"9f5޶HHزGx"ww3ov%ŲR'C2RTӸױmu¦xge(s_0ݍSC<Z"݈SG+`92U<R(uNB.mnf	lrkJmz$̮jQc0FP˯G)-}Mp;xh˽0.2WMD֚<4*07]`&mǍHRvku0NKҠEui̫ƱH*ZP|ϰAR<bx<.9:9:[
k<;ȲL_#4o8?p8y3~ K><
4NpE\,!Rs Ѻ@V_Y[gqE
xCǯ=υԺz=/7ӿ-J"P11Q$}<.ϵnw:C,j
.nop'UCw[TS$waPK"Y    PK  ]W            O   ch/qos/logback/core/rolling/DefaultTimeBasedFileNamingAndTriggeringPolicy.classWSW=vq`AQQMF֠B\ Ffg֙Y}$O~UJsof
vLO__O? ?PJ,bGgl7i#C\K#m54
"iHfcdD8MC?/57,ke45礓*CqǓ*T,aXlc;jbe*개!3CbLo~ސSd=@A9UWJj40X	 ru7(,
'9sW*FZ		գX
cJY¡w1hhTNzl`XzԀ'sɠs$65uO:-t/}TU&aUm;fxtG%ayeŨ<*6cCaXYnwNAe}bm>j~Q)؎>
O=MaCbn{9{ڜxjvlx@|ykZJSq hGa2\'i8.CE'%~yv\NFEP6Fbqtɍ=*zGL]0^2CX_%0ɣ^_m@Cզm#Ib̩8ǉy](<1
CK?=@qay{"cfڔA#CU y$W4e7)*NKV*ʌ5lˎi(v$j8P6ɞf(ʞ#KK6#&/?`I0ԕo*SFgfBO",B(i;O j
K
CMòuncPF
tGނ('e?7;RkɀGzx1tpT;ƅ!Soc2TY.ocAQ33M@!ulOx)4M
#J=>)H[7Eu\ml.9zOBch/Y95x,g'asYm[Ih${$:K²ݶ=sxGQn`Ygbb; ӸDyrBgf$DBhl2龞l`C;K]@H&k%*&_-]+1||-'o6LaF'c/NB ʛmcbjv_seO=&{m,f5cYIu{GV<PF#u
ȿ(un=hF7<KEp
(y@3$/])]FZ:jcUW<x	4_OrZ7Н
ģ7p_#FW lliҸx$S1fŐcxٷ\j$}R(VM2?>턥{ٽ58{)W& 8Ro hZ7pF)EFގ$A$mjh\]7a2o[/MtYB:^ͤN)0By&cx"Dޥs]z0LLDhC>$42} Hݹ_ӲH24>Oihѯszߒ,FwPKeBؙ    PK  ]W            <   ch/qos/logback/core/rolling/FixedWindowRollingPolicy$1.classRn0=n-`e0F	?7U(ڤ*uËn5 !B|*v@bQ>>o pr.gXC}wsmoR2BzodDKut(aZn"
(:(8$7eGԺV2<2N0#
oY
oH$*R=NA!uN뜋3gp	e(lrpaq7|@W|ؔB
c*.[[^pqVk%`W<IO 4Dw7e0P̵5F`rPjT	.pє,w:qc;"Av[<"NRr[Q$L]q,255-+Wl1L
wҌ+g8;䞧p1\$OG^<p\
X}Y\%|*E~ӡr.XUi2UܢXJ}S.PK>*E    PK  ]W            :   ch/qos/logback/core/rolling/FixedWindowRollingPolicy.classX	|d7 rC @ MYlb6	;IFfwِ֙xVUmZj[EZammkoZmնZ푰,5vfw\x<(뭿rMgVl
VqP2x-LHԷgmik.PHZ15]ނCnt]Oj	5L*PVq8Ń
&T'dF2nm?J4o~[OS0	#J~b/	<9MtĬ=!C^:T0݆6j9
Jmzn\Wצ>H5 
Wy0_`(lt4?桚QPC۫;
Q*XZKGnPʸNsBn"ecX+{DWW쟣lj"V]%ӫVMu*TXFm[dIE,SY+"jcZYӵ#c$S&̹V;ڝLE%<X)0ko4͌cz%eX-IK
e,c[S:'NfIN%3f/VgT
G%FN,v=^4	߾̙t2fP:VFkmY{L9^UXT3
$E6$TN66Sdzn(nRVr^󢝔hjItOCA'$m\-bC"ʳSCQ	[FterU/JkK+x/-Zb]B)F5G'0Mu訤tfvr1"a[\yVЃ^J0tZYnwX$)G)WGg\`'$c֏$X8Jc8æ\i|,8[;}
3Tl\Tt׉4d[	ђFj˥
.j1b#L@z7n"'ep9)ˋ׷H]j|˳ec1,*f&W*kXE2muE7M|DGٔGY4G15`^W	ftM5Ǎ0ՋJ^*pڼ%WRG7lH$.a'n§)Hm)SGW#z2:|l{p"
Kqwqd8z|؅أ7zp*ONun>"MٲXP)Rzr,*0!+8LZX`MU
^EKUzGUGʸ꘰+QR%NˎIdQ(S)ݬF,W|
_'M˨RL|%	}sl}O*&쾂L׺B=Cئp[4;NfIʶ`#v#mmA1&Ehۺv6YL,Mu#Df7VVS~ۊiff<Nr&(0?$@K@ʓ/HĒ6߃g:Yv|$C:z2/׏uK͍F#ٖtH
v<·YMam=6IdovruFJONxW-vL۬"%;n!xLXoYC1բVeJjQƴ$w0܆%nWK9Qx
&;z<z))nqKt|eՌ}iՑN56#6YvT	hcfb|9:52.T
G#ـδMZ̵lo36٠%T5[ֶt9訍)-'N7Y
d2P2
hGw<bQeUx)Ub̦$]J=v*-TM,wF4q+=+1	71SzNF>|gXKҨ~	BŦ;%P:`g~D(bxc	|a)~LJ
~[p9d">Sp:f?NCyz?"BL
ጀ9=a&X(Ͼ
ߕ%`b$J>L7r1O"u{Vħ5 G~`Allڡ,zS8ls7fCKk*_ByWJ2ck)bsȃ+J*kkqzBaDM3&΁MK5Dm̝A]R'u/]x$#m389
y1'qQn =b	]nh3vr z&f<_~I~xM10aWstBt/vܟ^G 4{N	4{c$iƖEp[pyV#Ln)۲,k2Zk*7*
]I0;!vg[*Kkf0DA¼,Z*WrJz)Ao߃qڃx1U%G94C8Xw<H
gLʨsIMC,(B%eǇ-e;
jQ6R՘k;7n`|."f% 6JP;)U݁	/%^YJ]KYi
s~ߓj:iX痳cFa`aױ܃4xl~Ƚ3C">2%Ø+L~.E7fnݼVO=̪<e	ჟ/_ z8&J^^#_\fJ6aCzXzrg}M%|E>#
!H	%TcPKis    PK  ]W            5   ch/qos/logback/core/rolling/RollingFileAppender.classY	x\y=Wیg˒,[^/`iy$F%,
Yѓ5x4o捍!Ж^6Fb4`KJ&iBӴ
ma{3Y櫿O3=z/qi תrFy`PlʏV3/B}(_!mA{8bbFtȰ
ѰY!zE
UwP>JX"t0gŝ:XBbfPaJhH8z0׶'zH8tTT&ٹ\\T(̙Ds:(䛊mJ,P0n} jGD碝,h*IiX%
GBH푔!22*
,݊*Td[[NBJ\0egw`W_BY6
QjjPP{%(;mݲ!AQm\`D,	G"Rrա#tݴZeY<L;q8l&YTXoB:0dF;s{$.tc!Q1t+6@ˠiٔp4li62-a:
+Z{:;;vvt>7ֽ?hoЌM2^A-
.9dm:6lz""pmQ/h؊VgˤktaKv
7XcBJbѡ^ݶ
+:a?e6̘aG!"񎑆9'A-Mc_ tkq LAYC@kZ!&װKBҏȮަ~Qhiqej"M+h@DÜv:{5s3nآak
3fQj,#.4uq$3#B
1
"Ð
k\B^wOw#Ğ6*w"3%02Ȝw*hN
NE#FÔRL\L^-m	ÆH*LF_"yXÑdnR!j[c|xB݌UpE3d=sS~G* {4<(l8`U^ާ +rAQf\ߢ:?}B	G՚6M,ޢpmazp>?$H6q$VwQ;:ۺ[z[&RJWKo1c>OX/ɜCݕkbL+q|RçiZO
^ÑPS1>>|VZ00/cm7N'yዒ2˦PnNdOixq3ԁ03MQ'qV×ED#	ǃix
"hJ婕iF$ۦ˳5
!;pQ_vbw
g1LFܾ뢆oHlE	N,˶( Ue9RCNՒ^-IJyqیIyAZ]|χk{ls]ˠ,AI;I&7ɁGG2nacR	͙h"n +*=z<d3$54TR*q)a/UL0Qs
/vq2=Cʽd\
X/\f5"fIt&2^h̖
CN-?
NaVB\+HD
O5=9L/@Y
;z
1/#'RU.[[3N#yDd5M*U[T!;UNlÑeU1]o`99=a	u"T_f>5[/jJUi'n)m)Ȧ*GȖ=H|UɼOx|ۯێ56$'-d''^?bFVX@c~
-/%s3%ݯh4-Qݦe]%isi.K:yNV\R͐٭[ay0TүDh^΍W,	}Ly|Kz'dG6g~>
Ro.d&5gy>N@RY&wTvɤ?|s~'Sa'W]U)9HƸ6ⅧHK2MBʦ/VU1Ť[eniwi*PY}-SK)l%IWrُ <ļlY3)l{YoEwZqsV٢hBͱ2QN
@u9>-f`+#zf=bd}&P@U?96y+xkby#pIeXEaȋřl}lU60ܨ0FC%"_S;}pyR]ɋ,JOХq񕝦y0	X(>Vj';_pn=n5}A)查Ӌ2x\a,c?qȿR+G-V:sP"y|}x?uK|E.6xP,@;ű\YXdʫk*@UeT[W:U2rI=%B`KO`9\>%Xx.
9Cch8ycXOk="(f63h
9b\6de;ܙcsTcEtVk:?^
<dǃ`9Ks{7DבiFđMfhBс]	bΦޅq?gn| {-xR
sށAE\3)F{5
:/+[PXPYA߄ZE>'qbgq1T˯󸧳IU{Jk{|dK(Cr*:j$A
nKV|,eri'+ؚ3|wuns
R|W-w*!?yN=;^Zw^
C\T=-U9J5pLN_ @'B
8w_&q,q9/>Y7O(qƼy3c"(dc~͂q)z1,}{><|U6x+(`_b	b62#{Hу'1=L3N~l ø8GHGRd5NVk_mr{r7֪uBBV+קVV;L6PJ17Aorx/R"$/@sCEޮ#3ҷGt\@L!c8~=1_b~>Jo~6>r|	`$qFgauHXOrlG&Ss8'-F5,qy}L.	N$n-rX,^J`Y9~ETK%OӀS6tg9sZ3ʠpqC9RE.?Sԟ2ٴdU4%ԋFMԯc UocKzfuz?k9Tr,Ii~gHyo!*>k	):ĂnH?YCcx2p9E5c*申2MB'#|yE3&ﰪ|/e1[] ^	xȇ7gs+)y>N`Ng\%Kg~m~<#B1R
,7fg)f)FU%[U\~K:ƕF*b5$rwv.J=>CgW)8~Wx_qU%^e]b{ hNAڤ6gDk/Z]~Q5n7pEmnB#_J^SQѪy4+.&<mTۮnP=֜
YTCq<Πl"BRj+C*gޚ^eJPz
̬9١nuB <ۼo#ɻ/n0W-I۽"{wȰ]Evcs8z_udXPr4Ւ*WWKä0a-m']
D*Rwꅔ|u+W|t>w9{ϽJw;
UH PK*  #  PK  ]W            /   ch/qos/logback/core/rolling/RollingPolicy.classQMO1"~w&&	!rB%n⽔q)-k(t=
C3f; \Q 9/&$c!45Z4vd 3Q%3.-ǫHLzRjdP@`#<2o^%fN4`ٺI<x ^Xk&zҩJ㝘Su?ˠE}3,9u5NQghst#a1uN~^a:ARJRfae)T:ƹIeۤV:ȫ{lH=/miQE._PK#;1    PK  ]W            3   ch/qos/logback/core/rolling/RollingPolicyBase.classUrT=vUMRےbJA`@qPCžq$$	t< ŰWUGVg|%={v\M(I!"aQL{Wΰen+oaq6UySW,~W9CtEUd	đ!)$ 4Uʻ\3E{m[5
CZ߃	%._}fZ74}Яe}OpgR;k+-Xd\F^5@p8faF&ôߓ!:g3HVfTMKlG&	q!t:k w..n?T8rs^aW$\aZ=afE6ѰkqrxI1I;p1pUjs45*&>nP;]z7)%>!4^Ku 8g2vŰʐ}eO("o]]qziqJ3K3uPij]yͭʶƅj5KcUmpʷGIƎd!
&3F3
14jpJr'Um;eO@umU<o9ljd,1E7Eux=7M6Hƒ\S]DoDGo5ġ${֏8t=E{Iunx{V	{
/ֱfy8?
p?JaGΥ:BP&ԟq{gMRAep	Z(5![Tg
U]u>'^:.
(*)w(`^}Dy%ϔFuNO+x/7`V\)-ؠBC
@ < @<B}t#<"rzT>tkMqjSz<2/ӓ\PKoJ  	  PK  ]W            1   ch/qos/logback/core/rolling/RolloverFailure.classKO0e)GH,`%*CX'X'.v2X!`eS*:^'Ο XJʣJX;q6I[ėal˟2)M*&VidVZC?x01@iǚk֒m>X5c'P:InI8vM2f-sY{$w9&"ʣۖNL4_6YG9FL[R%wtN$̮"w\k/0rbrL9 a:&%?ymhށn}"+𙻙
ӨE7Yfx%~\C̦z[^a0q`qp/>PKWk׆    PK  ]W            =   ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP$Usage.classSkOA=ݲHȣ⃇ڂRPJxDbyĖ&OXqw?!
Q;cUbb{rg=ܻ3_~`5Dfk/:^jZ9ֳ%
_tkèV˛[Yq0`֖
|!ئޜrY,]0`A,
%/ڮ	
dZrtkY$.Bಆ^}gPp
2g:Ma&}*{1`B)
B@\ ];gM\Tb4TqC1"f"=tP:Wtm7UͪC+kGdѳLboQ]ޙR5xM'N}a6ܱ	%aӧT%1YNk{mdB/yM+p:=!ꑅuO 00EU<NDI=t}q ¸DJډR<ݤhPq](bE7B>FD	ŪdcǸt&izY`p\ԥJ'"T#EIхTG]2Ło*[~VhŐD+I+m#e%*GvEUhǸq}NAL2I]	@2=Ә]PKw~0  `  PK  ]W            7   ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP.classY	|ՙX|LXILBPHX%NG1$)5yl-iԙQiv.RzA`eB%-mwIڽ]3,JbKOow[2Nu U
[Sѷ[N4eM֓3Ѥe?bVq! j4QYimRff200z2#f8;xP>i(ƏF
I]GChT
ft*ti3FMAĐu
WҴLCzs6''
?	ֶ::AC3Qؐٶq)i;1+q
[AEE&\И23L6VVѵk9[wM+u
.+0ٔϜkc3d㰆%.q.Q]Í©*ޤU &l'6𸑵
4;#\.x? ߰I>Ph]Pwv8LghJwXxʵx~5LXvs!Fxuvz39=ճY#3nNǔNmmn
`Bٶeۆχm:OY1/
ub
EY;+qݵ[xFh]~ӝf!~LaG0*L=4􋋛)#(qr0bGkzZDy8f3B[[+l1ঌ.7aC^7pX]8F&%-:qw]EM1qWFp<Q
w㞫$Í-v~29ުpOY=W2C0}tVU(1bt
FL8Krfv0xec
ff7^:FeF7^λvmI=2jx;앝X?~$x@wDJw[*m]WCN5i9(9lNN/0z*gȢY
x$AI~*l4&TNu,T+~?4O$CwŇFF(-wTh^
?"KBetHϏix~\ᚴ>#]l~GaoPWs-~B!`iSuƍ|Qptw,m:׎>c` -mu{VV!|5<aooHoVYVdjUXe'WS,M<0s2Y6O+hASg4|O2y4a01lQxV&0ϲV'IqCFVX-'vQvqi/|Vy-v'R:uLFKY4tqFZ/y/M
[O]Ug!yAóXK#~,7#5au" e"A%Ѻ+80ttO+^W\uhG?k:g;6C,1ʙp}TmBrkXx%K![X2@oi6^%OȆ@둶#~	5"QW5pY,O ~,F~;=&qFjQxq%Ċ`.嚼ؓ98RmO
o_)˙?l,3SY
f/fѻ	414H>'ڼKBXV²2ᜬſp=2L.ſq%0MS/we⍿"dTxKT8_^vtW7;(\pçjҨ-[9^y%}yfCiiɁmS~'\xɗj.juujϹuR]pdPzꃪ$|y3ݱԄKEY/iJ<m]천TM$
//	._$,f޵/gͦ03}[oZdq&mLA%*IdFws!ųd
M^xbʵ򵍜,h_[iUKv'SM18U->adM9!FcQ1ǞLr=LHl=uftɹVBnrC	
	R]{Ȳ\ǵ1Ԫ(R{ԨnuKPaneI1q$eҏ7yA_arm˚e+[(q^A*%
b*aZ<1ocA﫽A\AE%[,Lc+U~_'zߛp-?k}?}
|+nj(ye	d0VAgQWy;u*iR@U[6΢[}}dk"UsXQsy	O,`af *!6a'݂ty7e9̸`FsUq0m)jG{$||z%ͣ+2
B2^@=s"cw}UE˯<&ڟGz0s<ƕ9/~<O3(8DcX^bq0ѸQDcqg#	w^܃i~β{=8`x}$)eCUE>#8^M^þ?ߏ=}5UyK&OE( `E_FO2k!xtv@l^&&`;RZ	|!yOWaDix!E#}D,1QKg<L5EQnYT%{M$'N_E|f%
Z/C4"->9/C[%zY,||p}>-w;h;؃؈wcB+ϻ
%G"ﹰ7[=f0!VFbل^*:֪&"\ul	B:ND-N_>DO~nYÏ?utspߑ _OT%N8yfb??Y|ĠۘG_|1fGюuȢqQ|aVT3GإȱVcj#qQިEm"V8*wQϱ-D:R%s	(yּNdiz}}m:~	
?3U}ߓy'q] x >X?ϴ|uLO_"!ݞe ^db#|V/dȦ=StD!衔%#EY, 냺yW7LeMTk<˯喚5^--5	<>2_%?= yߌKE.MmϭJ{Su#[JԪV&	sxWπ-:E}ߤZ6IS|jlٷCUVY}ګn?PK;<
    PK  ]W            ?   ch/qos/logback/core/rolling/SizeAndTimeBasedRollingPolicy.classVkSU~lX+BMz-X*7KlIwO;8Q:?rt߳	499}>
 *&Zp@6;3=Yqg-@y_Hgݒ߯n,Ju6b#QC}+Yr~~mz~<,qa =!/xfn"35b3(&Ӕ00+8NZ8dAvQ_ObUQ|]dYjvC<W2Hd9= ɾ٧|=SBxnqNc{pa!T8j7hRE\b8]kbRW\UY`[[Hjgrf_:-\AH(\=Ƿj$Z뤢MDn M:}Dݴn=ndϋ|V*i&y9GTTݱa(>b_P!Ka\hv@34-э(㮁IC2UCʂ|ՎAi;u~4*~t|A<IJ{+<p٪.e4S-fG	dج08x["2"9^f:+N5
L[$0FW/My2d%p6ޞԦŔnRP<'TQ8xuaRh?w=	sKy[I1{bSqU3fkX'[o7a}:E-KJ(Х_ԳҎjtf5k<]%7Ժ\(T;4wtgkU.@JV)7RD/A
b([")֌`a(>ۢ3}lO0s3G/54O"h5N-
%MaXyhUpKmY3pU'$~LٗI]lo@71&n|+5з?$m1Lh02rJ[},:сH߉.
YEw.ˑ6< 
Gنaj0G[hX$%^%jFijűzbHmЧk13ט^ͺg0[|/9!I.h\O'_r/PKL{  p  PK  ]W            ;   ch/qos/logback/core/rolling/SizeBasedTriggeringPolicy.classU]WE~|l	[JjJm
%#A0lXPOβm7;Awx;ozQϑ9^zox|gbH9r13y}? SW@aV$ݤi5iRtl4r2ws6
hEs9CpѰŋ
.0L	Lfo\?.yJ?$
@ `XʾmƋDXECUS2K\f>\ި|:uM	|5awP)	7p`
ןnXë}$%ż%1p#vxQz?mi|#B
b*H0<I?\a8$`Ty \!´I2<g[m[uBxwU1'5n3Uiw	EKtK2rH%!(pqն(]K5/}!zgHۏ;SUs%hJ_NU#W.3RnQ)S3Md"IPְVϝ/GYC~QuKoe4ގztp ԒT^PPN;hɬa9cVR-u14]np{ucE,+IuK([92AL$0C_OnG`kԌG0)X}E4$źݱBwaZ>u5kM0#)1A zR"As=D#=L7kFBgie7y2qNp#=1$1?1i|cHn4a+ᰊ5m;|&!ߢQ~MzkFh$`rB"6=l6?F2H`2/BW&~Ŕ!{6ik}=?=됱@c
a*(]Hx<!1d#^?eE<㞍mړr}͏	-,R+Aos(.CRK01ErP̺YWlfDg-&'xClS9RE1gK@{ԛ?PKh
P  	  PK  ]W            H   ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicy.classSMK@[wZ)"RRTڢm:M&ٸT=<Q$Txff+ Td@22=}gR13a\xx}Ճ~W	AE͵d4!qㄺ
28>3`7D
!2(Ekgj'Q?`V|G8qZiT%u!&}zHԛJۮN,+AnveFA'#"av*D?tFW'L+4rE<i忺u:>c.B):2V6&>1[\)
0
yX"uX~V Ig]bZa#۰PKF  `  PK  ]W            L   ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBase.classXy`
96DEf!	9$4	XPd:3a֞ڊbEIBV[mek}Ҟ73YvWo/ V!̐P]i95CՆce6Y㪦DPeP#'cnNת.0
w%[`fP+Js0o=N#oTӤ~mX)CԪ6dzm	ƏzHOet;zءBz'`U5fm+ A+5u%#VbN˄Hl\;dp:FmH׆66d(X(ᄄ]fe}d%HYT:;uE8]B$չS&ghnۖi뺠Fe,23;w	~(	Βq6Αp΋gAW%},=y4U@w~9<efGQ<	u6Ҫ=N[úIH %Ѭhs$,R+T˭q
ȸL$lʝ:LigъNJ"5սpN,7,,hX`v;%..Ac!HYޕ(0O&&=x$$R.K" ḧ́j7"RK® 6[C&R\&)qKq?zRͦ^R~@Bsߗ3_~T;IakL"[=m!!)5(T騘qTHM$̤%dATᶠ,g6U\ ً+A\Na給m5ӷ銨JҲӪRN#Rlag-o.ϛ(VR	RB\N0tDNah

UVDcLUZMxW{Ƌ[;:7vl2{Zљ#;WG_'Z\cE׋
xJ
֢a~]s:#9N".ܱ,A3,TF2&^#v2)H!M5{u5!h7ʸI)Tf!qneLd1dQڴ
]s/6|L5+ɺzA
za
&;Q|L¬JݭdG҆	%2W 2^OzTjDT`yfw2\ZSqTR3~DE?1!RWEgn}ӗM&QoCHkt>#~!0<c%m
rZN
>+eu3bmb715+rө:O9d_ASu6=&KgY1ޡQzE
+!vuŌer_"9CÆӗý\a
/?W$\v8&Q
T#͉4lNcRZ@dm[V/eJSŶ[A^pE8EZu~P1[Q%[o9>,Y4|zp1Ճ=EK]-ʄhSK
LYY[}`LjT,qm5ӭ	J8xҸT\IX%La*'Ua3J5=%6%i[i{cI+?5*izӋ?˔LJH5xF}Eăa%a[q-EƟ#,w2
aPѠWNUs-ؽo}SGEqf̑/tPT2/=p3\Q.6N$ӧj0[9+BoE ΀U6i_<Psr0[oU[yFo#jE]*>ˢJGgnp$N\Aǩq,x	X@ދFSy8rcUK2G<UW`ڴrߪq]y1vU%쾚3Nz'I'-ُ3'pn|Ø{+Iq0N!,Ļޭ|_v Lqly$Dc!/HX'`B;FAJ֨2&xCh:[IeU	ܰ
b}Ԋ]! >rI|ߊJR6py>@3q!s!Z:`ڐD;LWc^ǯx; 	|nqc،y}[<Ûs̋jFa9Fߏu|z12Agi|bn	TE'<HW=!\ZdwAjS؍x.Vu RɣB]p O{ob5y]X<	uy>I_¾{N3g!B7,f<\q]&WL#yGKk@@utR1wֺܫܫ"yz~
x+j87:Qj7\T_@R-?ďdt8"J/`ʏa{0~§ge0.POBLZ\.=Lyي0-k/<_}{ߩ:?qS?xOY@	`ysPKM
  -  PK  ]W            8   ch/qos/logback/core/rolling/TimeBasedRollingPolicy.classY	\y2i贴X,lY>$d		 Yȶ<,0ҲڙEBm6a!%iV:XJNn#mi&=Lֱ{7lg;y{~s S^,=ja+awӊَsl?<R>bV4jVOmPÌNBySa/P0q#~ȈưcFBEƋZ
e>
C!MB{C iXz&4gڎ`Ų9Ԙf4~4`p%Ӵ\&!hQY֩	늢#54fB]8jؠ'6"kk؀o؊9(NsIC3B,m8myj،6B 8X{	Y<̙Ew>=?ڱEyooMk P	[Kq@Eئa1&Gd<aضiZc;CF`{Њ;&8dO6s
궠ݩ&Ǝ"A}4a7a۠am''=-dr6LF9Xxr3 /fD8{;Fי$[)G'N\VB<WAX؞=>Ńi
j0Gg8ĄOibsPK:Fl5GLgJ:k0g#B&#=A`ALBq<셮aaBjSz4iGs10N1xITL-, SE*D1EL%^UJ,t}JCB6:	=fsMۖ3sӢVGCRԺlj`9mtqZpvƆȩ{PIT8g>B{:,*h?:B!SށwVpRX ohi)nyţ*VSӈaV̈91s,	/͑Eh4gx1qٕOS!cҚ28\JToS
OIB^@7As8O@X6;ӯyzK/1
stP)Ij9}DX)+eJd\+z5L3fS§_Ӭl)${ܜ͟[ቃl#aeJkvӱDYI;:Hޑ;;$nY֔":w?I8NIB3.3بc
`Yna
.̖T_$TL˞/ix/VMJ䊼+|{$țqHzSp[Sy J)G=̧=(^*؋?3ªy`d⮣iDgW:/am\U3[ ebE_~ru%_>ŋWEroo;
/R7	32-PW	m^WTsVnTU
"e%J7
6Ci43-G={&a8byK1gc2O@xr@\ws,MyqTQ$~mvI6jLYx0,E&FUb[	9]d*ǸͤHEL;tMץPrŎ"䈟jih<%,e55PA"fz
\"ϱ *axi5u~cVV7p`{X=,]27xLwMp>K-vuu-^>.%'GĐ$.z0=5q&L{|4mo^ZstΣ<flX2<S H>7U")CQscᄩI[ie&r)}hsnao]P9d?z
Ixu/"([B(>涾
5oIއA~ć֖yGnF-IgV+;	.x^L'T{7;Mc@Vxђ͂뙕/?pK@`vfK'G8Y얶AX}4On,̎Q׷f3d"9.ݖNB4>#r>MFЙ0ԍ!#VB͸6RB>bvoo
{5 1K 7^oJ> nA=AʭL>('
/)4X8f>zpp8gcA#3}B6vxJj~Rm+{Gc탢+0Ji&dJGq>fl:iǽf}*Hnȥv٧ƢײN&wyY~l;N=ʒ9yZN.<)i2}Y,%hí*Tc9݄6s_: T!XN|uke|{ێT`:rL_-
~6<tUG2Peh,U2,ulYۘV.ư
ACyVs)Ц&%r
32eb6OˋL_54.`E(1C]Σ+E^#\Ae!\JH]C1`B<Oa|iAWmby4jx,/cJf5~]û(5yCcЗx*pO%\<k,/fkry_{;C_tQ_&\Ņ^x5|\Q'hWE~e@,~؏-8n>daxGq#4{E<x_b_g%~^30IeQ-,8{)jEph?tH48|'ȇsXL*6B"CBR3OLWY5k`GS.~TBN?Ϫ' OuToq,
c]mNYF.YsIp#~CF_5JL]lGdg"i1	3q=8+,ojkYzs
Xj 6//V~}T<qkw^N܈*~>ʳy{9㼏a>ΫϞ񄂼USjLmmb-VsAZՔ^ٍx>/^N%-<brrs*u1؇3.Ƴ8~2#m8E[GPp_*1q2çP	yS޷7Nd}'bw),Y\DTrd3v4Ejf
+[ݧ8__+
6%,>:_ƍX
k"	ER}*KmNgllaXy:4Vlϱ?=;us8؍Tvs:)5qv(s N
<݋Fکj(=:`-߬ƣ*F׉#Zټ:E(MdP}_G6.VF-oNH,F;fѦln|'I^+V/{9T\T /bF.ȗ+0f֧@Vp:ޫqF}"9 լE^ѢFX 1k/jN<jhzwӁe"F7W̻RFLKr*n
dxՙ媭2N3))
,
p!-vm!Z޳x"X)\@AB9g)>IR4P-N+N,qZE&@+sDˈP:\R<)7!;L^;Q<q3L'8V?PKv-  &  PK  ]W            2   ch/qos/logback/core/rolling/TriggeringPolicy.class;o>s>v&FblT̼t" 3 ?'3A +,Q?'(\Ƞ͜L}̴TTFbey%>`22sR}M֌bdLK,)-"#
SAZ32p%,`dE=@O3201+08qyL\@aq3i^ PK   y  PK  ]W            6   ch/qos/logback/core/rolling/TriggeringPolicyBase.classMO1_']
@TK&DJ8ps6]?qDU ~lh3W\9v`呁PS{;q=
PfkGP:Cury#ϰ*d]-}_h
@z[\&2\v%,YhP^@J<r-?22bkϚfa!p<B+3jfNH+2jȐQ'OzzDJG!7#M3x_{j=ѤΔ4\G'Z2TNNZxh,i.n<#)AAdXL5yF)5ypx<=ig$0	
bn>o}QٟUvUPK    PK  ]W            7   ch/qos/logback/core/rolling/helper/ArchiveRemover.classJ1'umx
E(bExOMM5GPzzf7?O 4sW빶/\ZYuTQf!mǛ`>W|dMU	R0zw&%A?yfF`ݚA7)O6=U8y9-iFib#WAiz94cS5707`pzMF'q4Aҿ靕-:
:ř6U]ثj!W
TPKT0#    PK  ]W            8   ch/qos/logback/core/rolling/helper/CompressionMode.classSmOP~ڭ[-RdlCW  C@1%.?u$(㹗}zN~Yj1>hY^P;	Bn~jpoRyZS`P
đ \X_f.̜IH	m^1`P^U0
̛^ZH@!˗w}lݨr'"n74M췛e|-yɝ^VkLhl! G
mļ`rjD\5&J
<؈b{	u%.Q|ݬ](/5Kv
鮾M.]`l!q"
Q%HUܺoGJ\Jh\^.PCh(,NϤ. LuhK8s ~1Bq}	)b(=!ߙ$b?M(z1x&st7NYx"%R⃠q"ŦB09r(ix,J$P%%SG;UM|R:P*[jZe+ޡU^/'(u_v_6}G9C(2Se^\1w[S'; 14f$>	PK|m    PK  ]W            5   ch/qos/logback/core/rolling/helper/Compressor$1.classRn@=Sq\BCy0%eQ౉R)Hj2.SO;րB >
qǍȂUsǙ ۸WEDiwFF+'a$XFiI1W2l#<)39Bh<dx>ę|( r0%L)9v8룂*{+犏sXe	WNpaPq
ӃvbF-ck>.^ŗ|\{-W C񩠊ygN7*8P7|ȳт]nbΥAF͑pS\r'2LV"NI"=`?ׅQ=f/uJ$xʴApUkv<װA:phGg+/]e	\u~&z	Xypdoc:AH o]V~`i{KMOPK|/  k  PK  ]W            G   ch/qos/logback/core/rolling/helper/Compressor$CompressionRunnable.classS]oA=.Еnԯm]cL(hXeSgK& _f31}{gsG 7E
i,2zsRa}s6`_8:M=F
9bU5Z#&r`1{K
=nw 
Z-,f(Fހo?TКI$6`H	i=EW
{Q"_	**&,)vǐY;&оf?fޯyG`4E*..O'
-{aǓ,;xǞI$F1>WWHf:W<NznztD/R0[[uem[=i5gc漇lqcũcj9Y|A_I*z}:S՘ΔΔΔ')_176.QK0%SrFoDFl;Y?OmǚpqY#k
Gs7PK()  a  PK  ]W            3   ch/qos/logback/core/rolling/helper/Compressor.classYxWu;%cYGz"NN"r"jƲH6ݑjfCM[(mZ(!n!
&)ɱ n$n4(-郾H1;v_w{ι9*/vY EOUP>Xbmv=m	1۳T{m1]FmMY) hX]NSXΘ5Nd3#e[}voy
*U[X:
:"$~M^Do8r}F&rq[h~q{Uz54XFM׾
v)HR+ujdAZ#F{ڠס-Wl
ױELIWN
7Ёҋ}V6؎k&wqOK9#*O30q;I鴙HH"C$ay
~J6
EnߑJsMMѢmy,u* "]e5!cq	I'wTTɭ+hǭr'Lޙݮ[F2wK\`y).c@qLrƄ\a-v##fʥ~)PFtщ.
:G~~Jfe(93&WǛ3D#3wΉ[aW*
}n:W
uYHc {Q[
؋}7$p;g51ݞrfp4K=*LvFGMǤLΥaӘ0D蔯*{Ľ8(aƒ21e>5]My@é̮[fɠrKox4uIi%\2U.anL8R^Fι&m)rϔi4&PgͷHz0[Go#UR6vKCpQ',7CA8,b55{1"$~NKj1qc&K0{1
8Ke1i%zb8RKty *R¼~n]L!$bxH~.6C>z%H9W<uL`ǯ^WpFï4THɏǘ&Cd˽-P\1g+{wl~DR>x0Ay0'qLfS:>-/mZczRo3H˅
1B6>'4R7f%̲x瘙ɟ,NFdVg;F2vrdpV:0-R>〛vydv#l'ef+dagtȩ#r:Gvm!w*_Vw+YU#_RWwڐmǲY0TDsxH4:畆輶^i{rE()㕫)ԢȾu||^ѺboY?k7/1y1ΑT43&r<94?@jDo.8osL3ѳ羁aYS
|MgTL)ݪۙĈ앎1X;m62׈:Q죗Y̕F%6Е`
΋̤\$dvƘ0W$",V
(K_ɍʋHCk1SNd+f~ʍ )&

YB%e1
me
.wx,
j4ZKmMɋ~3ۈ,_)IS\*PM76Y،6Zx/MFt.	^oM*	=&{0Wv^ld[z޻O*}mUΜ .0ʫ"ua6sg
,pk	"JZЦ>b:;TZyHYF{?sr9	3RJL	>S2B˶]v FO]~NM^$"]MG$j-mfUsm~B+_l`2]u)JDiٜ +ɝSrFV~okۖYHΫ."b'Tpl9Vfb|W`7	mE:GlǕFGgya[~3Pwϻ7R^@f3A(FT&oE$Y"A!hb+b[R+#aӃZ;ǰi3iۇsQ<k^=F:=ʂ<ه.[46B?(M^ؕU˿WrԈWl:Rorf|0>
o~%7|.+G;=F
3>A6R縢]YhSX$ʏGj
sonBVp:5xB맱%-}W"`3qtУ8s'/ʷxjѷ.|*]GU8&8{ g̓3
5O#QB	4g>|748δ>m-L]'l9Oizjõ󘧇o.鉇kp-K=3ғi'*UL#ѡXp}[U˃SpN],SG0O)5ҩ/5<_vVFza)qGj~[
 7%X^{J%>swL??~?*b)&2(VLq;k`;Ѷ!.^l`6mx31`1{Lގ$MK/0	}!!nDmт+zpTlxg-ӫiAZ1oԧܣDU@(GG(G?#<BbccbzG
g6h.!؅¿7ᐆG4WX)*Bh}W5?Bݞ|J] >׼9xK.RMH
PRL'fhaIGK:J{!7_Qeu:[yUЧ [M-7$~LUFq5(_;ex/Or-\+J}az9Y	I2ݿ8"?92(.>su!9""^}a':<EIF c!GXzF%hN#?|'i3x|9힥'h,->A;h,iq3̈VJI4Hk^O{U<Q$x(MT{$n5
?6j5)K>KXORl9I	Vƨ"N5+*F}ϓe)q0>Omcn.Tn0ڽv~
AW%鸪90wz
=53=_f0J=Ǻ~Z{Y%_/AybȪTw	1	y7+V@>cF㋥N#oP7o1
}bXjce?$bg		?oz ?za
_^Q_B_rO.6i/t0. ;p3V_9;.S#fi鞼N}RSOjbEF,aPףu:VάL
o+.IZֈՎW^k9~tqe#yzFճI=cWlS7&E=owPJDnOŝ]KlG'PK     PK  ]W            ;   ch/qos/logback/core/rolling/helper/DateTokenConverter.classWWHYv캄v )XuZYHl	qAzHcF3̈wIڦtI׸.nS$>Mi/r73-s4oޛ{wwۿGÊiFqMoc	z$ݲݶ (KnTҕܤUWY >)?(4U/J\p36<glpSjY10A þ"Si[5teeSi
!.&O%d COϹ3n=-f'!C/s%eT˦;ҪtFpQ~R3CRqzT1<@sBfO׫vi	͊v#BcʘqůTJuO	"8!!;Z汋cÙay $b/ ),;N
$fD >0M7>,#COBH`NBRF
O4xQx$wH3BǴ38K; 3>Fdڧcm#Y1Ji!a]bu;y5ϝxF|UF(i
\),/	e+2.ٖwxi_8̮
?3PF6͋}p	2(5${bPE
	!}M]+e>HUӐQⶬl
W]JFO/Iӱ9[r"/i9)Yd%lf
mUx&旓䊘{-tSTx)ܤ3jnlr\2?ɭssAr a(925n5`mY1U1vI%*Mz;L3hD%<r&% q %U$M7Qw7CMK3q $.٤^VPRpLs՝B'H)Zɽ+/-TڽY_IVRԼհ_^$p}oRs;=UW-E]&LTr({B
)UPr5zw
ölSd]2
V7~p(azEv6`}]U7k	E<&	BƭC)%oWmte>[G3Qv>/w -Ni]SW%F{+奻Z-Ѳ2\; w>IO'h\ /tީ}qF:Vô`z>O3j:#NN|A{II|dw'>h|ʋ42|a݃ J6ncBbC_q2x?0=&>Ё16?81uD:I4NmLn8" 7uӷ1+8Z?Bvn@"6pVG12E,NQ#4yZ;Ev,1Ebx_JՇKx}{+η?0cޅ.DWⱿHRLFqzOު尛t4s%ɞkj]g|m_7y_\*z⩕;8_NBo#o<ͳ-3VI6Է\͇#2@r,ѿ9ǅ:S5S&ՠqXx#}}}mziۂ"Yy.-q|nnmpg(rn,KQd\'Q C%.4T#h:ȑ!]N݁!Uws+NpFOL}o9P3sMY{b.A'S*(p/snỉ?PKX  B  PK  ]W            9   ch/qos/logback/core/rolling/helper/FileFilterUtil$1.classS]OA=.,]P|	&4]&vg&'^|?xwv>;w=̙o?2Ț0l`p?pAy9n0^ː--!g²1t{`0"j>yӥra۰0I7P$0\?JIur4fLܴqܞ^/s\SPH7nϴ
r$=BcxUn}]#}yB-/A#2[1W^NFBG``H=1L/nɍDudww=m\t1/Eԓ'}A$v<Ě=vP+25|8<\_D>aabaET(U)ϟB^c2'o7@}BO.Y1YQh5OCő'd@af;Iɲզ>e-V/ak4=5%?&t[1VpGw).y1jJ0q<G޼YTbFSOeAIQѶYufSG"kȴPKaQ]  y  PK  ]W            9   ch/qos/logback/core/rolling/helper/FileFilterUtil$2.classS[OA]tB-ETPV.Fc		Mj5)ŧ2i;8%?&>QƳM9s\̷ xmdM6Ɛc(S<9r;^EjcayklI'U֚J#	L(ڸH$!	WP2LWV5,1m↍Ű2t|rJ%%}OH"FI86it01Kh琒}#}yD%&^ ZAWCލi(5W^OFB@\g
QxɍU;֯zj
W"ˣ74@o{GØsQjˡrEZF\΃eH&64@*qJTQ?{~U}w;-F/eH/nP>Cb^^3q$_h7GCŞO`69\Z$ w1Oŏ7M)ztifkgƌvJUUu$+[pjrL<$(Q%:ӿ?Wb|S_HUH-c(NaY6FljH[TPKi
gc    PK  ]W            7   ch/qos/logback/core/rolling/helper/FileFilterUtil.classWwcIK00cqdF`RbAl(f)4KF̌;M4I$mn	]҅qIF$of ˄ޛ}GjRA}BOzq,ulȺ
jEݯ 8Nl>urR56gSY)2M,	;u0Oٶ3ꡩX+猕ٟ:` X6mv%e*e[neIN'N=1%5hRV:+ C
MqŜ<6JtGZNڠa#6):'L%B_-x@E-xP
0,
aA˞<M0icy+D=<%װEPNfYH퉥BOjDu}\[Ŭ1<W/NX0[]J(%cPeiz!4
Ǖ;U4HՊItb؍أ{vA˜,u{yK'2
k >HzVJ,;>@
RX<5u!cGbs!zTQjQ.Mۡgk`@,y
bҵo	l+z7*aKKi80c$}kUCNt7Fv-F^Ų(fEtUqVð́f<j\%cR+]E#s.h% 2f[R!4A'G0yԃ.`آdYtmK
&nsxn5I\`BɝZHxǰD/k*.'L
1a
O)d5!<!X8
r2c`0"dۘyZ
4ݼA],>![-/DE]IVѹaVѯ`-&6T
A7!yd(=Z.ɢz)43؆J1IIUE/+h	F̜=o>^Kz*:0jin=m^vߣF1wc-&ma&}V>?#2^U9PATCY)wa'D)T7xpxַp]ZtdڌQ,Nmǘ0)3Zĭ!S/{moaƾvVqX}ˉ<#2BꃖȡrN~Xk츭#Uo͕|ůeFÏz~Gɝ̋VϱV䭲kR%8zrQI, 	k\B,^3GbqoXxTrONU ٱ_7!}tnᶊ?j|I,BCow{ϽWHXLbQ,!GSS5t,<0iW?Gx8R+Gס\C
k\OI|({Mg#:F3,,p'Nc6tVȱkVX*Nn?1i<FyίqvC^g9U_#r
\{6L`egvutfL盨uy(?U3yn^$$^xߌ"^Z+T|I2yA~oޕ|u72M_B7u⑁d
fp`Q 1f86<F>61O_cm$]&7Mv`p7i
_AkwSgOms-YU75WPۤ{>ο7-m<"ny~= 
3{-
r*\"UT.{bO>Sm/`t3BP	*bBm{ pc#z`p{'38}7qlg
cf'Eҙ,s(B@g=g`'E;|m!߆UY- m$0:HŕZ\4?/%?]Q֢b^ID5 x Rk_CatQgkKX7LoO^p%2-=IL)?E7^$yC?b(jjEEK<&wՀأAD$pyZb9G={{z[pԛ3ܛ[8K;ñ+\_
)(WPKf{    PK  ]W            8   ch/qos/logback/core/rolling/helper/FileNamePattern.classYy|T^&Û/$I p23!b@5	"YD6m1HLfY"UۺjTE$ T+]nm뾴vVL&I䗙;G,»n"_xݵ;"Pk^ČxԬmDzhㆂ	̰8]S

T5LlfbPwv]i&9	3ns.<-^6szG"UKG1	E*5LF9:m{z
q#)wp3UC)YP(dsi?Wi(uFX(
31KAI;#ۍ0W1bPprVQamj"WJŉf$9]ODj0hdjt(p%ٓS+PjzXgvu31q.C]+TWpxӓW[xt*8Q>"d@AcDiyآNE#Ĭq%!0L	U,QT׎@[$h,iXM:֝Z9HzT::SC=$(u@?2썏rX *V(;Vᦝ#0#V	LѷD7p".DԬ,a}ЃX,zXB}K`\hUTЮ j7::qL3V̈ "Kc0v$pX:xu66h؈Mdʚƹ8OŇ4|Ҿe\]6ܢS<場k؂ 11xF
-ެcdzYKC7Lf|mc$nlGHE0"c$~Hcjۥ}
[ˈe
=$ƀ"JT@C^g?[Z#H箨LY]HD53^̀иH.V3:
kh}m^ĕ>DdhMdu\
&O#J
z(ioU0Ӝn!Bi^8ͧ7*_z(PnfS8QμRۄY5YG;U|qYݸdq12n
E;Oq/SU
c7K$S8KO=Dt]a==?/p#/U0~;LEqhb\YJcQ6ڒ=["C)D.efm3Qn{˛8wH1+L/iTh_-fE~99ȐTa9#wc䮰#uԊm1+7ofOHٲm6D3|c,
N˭ގ^*BL.:koQk=^&c+YaDiOa
KQѺ(ZG32d597A-uS1nZ8U5%ޒdO(
N@3fI]BwwM+=wJs9R0ǓV9P "X6TzJ(Y.wmwG$f:Q$≘m5ݑ`܅p'9;XT*PeׄE77xC$afZz [+=rZCF|NK$=fZ(e6ѨBL1ق
liNPU
Zq"#y|qLAC[2?N<Ͻ,~(^(0;GPq 'Kg&ss2PEt2엮g A(QPir,KGsi9&!lڏ@>8EyKp>TUztiɿ
lUVrYp9F_H(A	?uGqҪc'&ajoqDE^RE$^zcL5m kJu4&Lb"NZy8L3͚`Q;j;ŕWV-e%̖,mF\nNvA|G*$pB ׏I
Q+ii#;l#3I8ō	Ljj~~A)g/_p?<.`btLB:,aoePWZDp_jէ2Q{Zxc?
NթTr*|"<;a#Q|dR[?DnZ_TD"-ΆKnN'vP1#}d{qR!~$U㱱:q)a[Q֬z&@	`{j	T	˕CC.rA?*ety9_AWUiLHHO V~;kܺ3<$
UDTp)~_ZNv%$|H;*jܚՇ'kIoxGZN';KK\G<a5
WJ(Ʊp(-^G-\ϫXmononfͽe5ftqu )4,tuqE~>o~1B{ÑJ5#"Rˡ'"ˌb\Լgx-9?
D/aK'3ȰX
!~^B_RZvS4=2fUt3K,z9W!xg`
R
#fO
x,ӖBw?s<I䲏x-L-= Bn=`"^әzJ>k;I[#KB&k`js~xd&q]NfXZ粈YFXbQjng*x춤jTvWeTvH/$
JI_WⷥM|MEoA"[}%Xe~|$}'mF_@h&Eo$OgAE:ىke 52 y`=lݴGHKۥy+v⎽XʃgɗJQ;A$#ao ;?K
]4&PK(~n    PK  ]W            6   ch/qos/logback/core/rolling/helper/FileStoreUtil.classURG=c$V(827%QlpD$(ȐKc! Yv17%/eWTzVBDRLOV޿y ⸀Qt2\|xn%Zz.,yvmctl#M|lGT}M=ךGT3UU/-QSt㸈
$L\B_Kn8N]2͟
pv,b6A
>YZ\=U$_qW,l,n|I@W1L(Ua`4=DOFgfຉ`
4RdfE(-h;Ogݟ~nbc$/τ~Li8*n1LXgY)qk/c'ά.SD|64} ד0~bՓ# *=Qг6W\
Bq!߿d>
݆1ND}ZSnT7_(4p?䶉27ob_^Qw6gsMF7C
>=8P!;zd(9v^3w6ކ<
$+F!4CU(e^IX5{hLDiʼW-Ue?
!
MmTY
?J
FX:唒)*N"kϩ൲ajWzۉ8m60v[1r"؈u|SیܫڼI3,DC4tS\r]e7@tP
XWχ҈ji0~I.}ho<{|?W> MvF{t @yh5 a.d-Șu!BH@;ޢkA?p仉~ⴞkf"MFW[L~6i`_0#2MQ`
!:
S6S]P(eBY~"\ TAw=tD	IQH$1CA@i'z@cE{HzF';J(#/PKN  L  PK  ]W            >   ch/qos/logback/core/rolling/helper/IntegerTokenConverter.classU[wSEMrB<m1i5Bh%ҴBk$&=	'J//kyyb- sr,
]y8gNf䏗~pbB0"J]U.z<q'76%:Ŭ£eG:
Cwr|9(Yx6Cir:'(|TE90̍Ͻ31@^}g؎\pkZrгʫwbH%7X"2AC6m(#6H?#9vpܒb;8fḍ	ӻK]!˺b'mⵚ%#3bX0ܝ-M'mda(sWnT3%8EYbUyT2N;c
?xd&H݆0rަ֥z,^1m*lӅ(6Ib᪍ql(64zk7A7,ؘ5qN~WE?M9|LYuAZ+U\jB_lNGUc8TK5Q6.3wf<5пۿ4JDq9*	>H1ߨhyƉ*rw{lt!m'&"l=)Ov:4U3zA@EM88v3vj5)u=}NYrWd:^ Eb1dᔉGr])]兮R=udKt"KՄ('jBLCWAA䷆c6۞ ؊y˒+#sJ7jmfMFwEnNJ.툪
c{Coq..0ܢ'<i] DM;xYwߌcvOL+3i`'-Zo~
+?O>jsWtx##苇{O7q7hۏ=Q )'KMCQLbQ>aψ7	۴g^
%MS!t}~/	lz-0BMFw&-YuӚIHO=A~o'H{M{lSOq1&?GoIO)&!i	>KnHW$nˀ@Eh5ӎ^] [Á_E_+ph҉K<: PKї  "
  PK  ]W            ;   ch/qos/logback/core/rolling/helper/MonoTypedConverter.classe=0S@,+B&@0MBZ*q5
,D?F$Йq)-Wٓl)Ru>=]6\+1\JZՀ$']	MvKY#߽	~Z]DA7$čG}PKa՟      PK  ]W            8   ch/qos/logback/core/rolling/helper/PeriodicityType.classTmod=n^OIЮR FGqHX8!r]Ӻp}A$JlAh{r8 VT1{l|AxtnyF=2^䇇=2PH! c6Vôl+_ki.kYܩWkmX'kz29@3qb59~E`ZeV|C`X
ָ̍o8ŋVU[ocQ]3ɒ;__Ɠ,E𾂔]f/k'C:kxnE,.p#/fJ<tg}CFNHE4h. ▂{
'}
,`hh&54Lk0al`=)X-/;-pϑRj̦YiѸ/:$wCowFZA@ʿQ,4A-t`߉|.OvSs(^8<u"?:~DG>u7//3a?rσ^yEql"_15o;@Q8c.gbq?.@/
&)[$Ovk?gX~2BfsSAa?_ЯPAKKYJ	Y1A._{r䑺tIҦ
J;1@n'Pvj@Ϡ`nv[`nPlE44P7J-rO9$%Q%$+iI&$YU%%DdJO./gP8+ٚ>T?9j*W'䊺\1/W8oc{9`
~? Of-+PKI44g    PK  ]W            3   ch/qos/logback/core/rolling/helper/RenameUtil.classW_~^Xvuĸf<bc7W@@EC;#23j6mzibibN?MWG|߹w ITRCLGu|f3;6bf3Y׳2~δ^0=[Cvs*ViHX
]攙qXf ɭɒ5u]#lвg(Esu}&q
fpYȻ{)o(eϝGI^5(T)ufSLU0'hf.w
lwJ۱؄rUGM|DhHd؎;eV8hzcVn{~h|E#-!Ȼt<ݴqtJV2L]	ʸu6hJ:8#q-c>C\:)a}OtKv{t"_puJzd2AK:캎eZV1fPp'ɽ*кt<V/J
6G@fҟb*,/pT1tR6&ɀ=Qt%lc^E/ttG s\Go]<,Xj
4?);bNɳR:>lN$ioRbue:
SaU{cX^C2
l*ei:9C4ZG|L`IsOIn>SfJACuDG1!ySH/B7R*VYyg\xYqj1F/cʂe,sp0.4L
lk ))$$LQN*".Ȧw[T">bYV:^T2g9V):>%ɶd?Iv8׳-_xUǧU,ɇ>3ȧDu6=vY7225~ڸ,|@:<Y,irfݜn٩6^.`&F,oPHV5Sg0m{,wfv{E홧!~|/ˣ!ۚJbdUb*6'tjZeTU<{G#(#vu[J_747cFP։[QwXVZB~g ޟ
3B\TE5<KRb8mŢ̧~)pIa|$k&ɣ0NT%[gYـbQ6?P.ZLj
H8ъHȴ
_pM`[~P|ҷRװH!)noI<-!xw!j!
zGEn8	MdKMK-99uiZ7lF\q[((wm&'Y_<W]
.LVY)%p"Fac $\wT,3܍qph!?Hh3gd1靅I5C{2U?fW&e^N	9]pq\ȷϪ׸6|+5
`fg]Fu}¦3
7P4-|o{s66nbgm,M@UMN.~DIm_ǁ,]FM}C
O^OEqbjn-n`]m?@!j$\MXOXRN<ʷA8C&p<q|q		
·iD >)78u4oWi]}Ajw
1ːHt)hRoF7j+ۤQFڣXmk&g3WسXO{H7*
+qUFmf460*ցXMlZ
bJ
#W?!ͨV j%.nd4Yr
yryR+$ge|Pxw=h
 v
j9/`3a kC^?%	{"oFenx~
L4ltRX ٵ. #0%?4Bdr L~Hy[e?ұAZCQ4Y?IJ>4OlUxeY^)u/򗕅F(b-?UW(k3
3j4MQLvuYyuI$XH=j!uo5Մq?Ud%gjZߨZwjUMΩ%%;ÿP?PK<BE  ~  PK  ]W            :   ch/qos/logback/core/rolling/helper/RollingCalendar$1.classSmOP~
cHE7ʛJ2F
v
+vc(㹣~@>9眞~@it[FBAj\y{u5Xka$$,B	陝ҿ+,"^i}P$,Bb,hkWndVC)h&XA;V(kK8` k
TpCd8oyg2K۷,ݳH]_u䃀"QD"8SA_Tp3|~MW\`̗RϙƊp_Sp]cwۣ))j^xLO-:VMA*?MZq[ڮǬ3;lj=i%!zhj<bKܶ-+pJDt79q<I}!9,sG	9J`aT!ա}9
C4Q1⍘9dF7o?C:?l|Zi16LPnq6 vDO
>#q{sa#(&0Iv
X"{YcU<MA!y*'*j K,m"Y$ڹD
A!ttPKl    PK  ]W            8   ch/qos/logback/core/rolling/helper/RollingCalendar.classX
x[u~?[ҕk[Qb'"?V%r NjCBql;N҇\K׶,넰v@B[ZR%[F	og?ڮXhןvwd)3?ss{>}'IkXh>WhGd2ۻ՝l#kC_`uA}Ngگ6F̦KwI:T7D]G-6VRe2tv}MjJRd><|8o
zw5$pQ.+hXxgϟ-Tlш5)66l۴~垌AiCE)]A2Gtd~shny3,Y!?75sIZ%BTJЯ1|pbG^zY`Q%AİFZY 4W@pܴ{1c*cSm58Z5цM
	gJn7KNHfϕSD׮ 6B
])VDJ*7&y~H:]uȶDϵ;{zw\۟7Kp-:2Uzr֤a=Ր "sc%<m~ݿrJYy妟:LrK-ls2%%f
&E/8͚ݛM

O.cכC UWp?"M만LA<2יI0viѱoeëMl!`cɉ%\	1)!J9bI5 W5'T:kdTUNxYQuza`KJt0*~qbvX<d3;Yy;d>cJ9 
byY"G$GA)VԂikQh8$P7$q+طKԾC V.HrW¥7	,!i4ɯIY
f2MSí:n4Wp!fJ_l;dXFhF*Ȏx͚ǝ'Yv
.G`aG	3jܘ:x[YT85)If6:;+Z*eKeL y>)}	d ®lP6ZKkP(($2s4v
I3o~2'l6GnҌ,EfĽKDr5Փ:[x X)ˢz'vxI<Yt'K*BO%PsxiCtfExS	8_*=6be6$4<*45ܡm@g6~<.p
cf4cX=adj8aFǧ$;x)y-i):X&4MT$מ|d&Z%|䬞0D'm϶/++?Iou2,?xV߫y:A[(/V1f:TR?>e!|Gw=Vnii>wsk%#\
?P2qͯr9[lӒ
hWG'P[){?DKw.E
9059jZƨ<asĠ4I9^bzf#	_=%3qќS6s9Q'K0,mC XR//̼Z㓶#Ă<&Bw42M#{)1eflC{񀥽]%B+Cs[86lK~QGښ+ƾRVQN<%S{/7,+Mw[BLXKt/Km( 'Kl<
4)ΌGE2T*Ræa(Y"Ay;cG-]xSØ'ZH:#K̰g g3
O4P{f{
J<TW~f{Ls:.߻$qUt4e:-؞̂ÔeF	H3Q739!0c.u=s+_m3?I@}	,ǧJܿe6TJ6eRQʄRoV׵²sQƥpRwĔ-uIWJQoP෤

T6%Zw\B,TܭsM3XM#3hnJ]t'<5b im$ڦFog5A3Gr&8H"H4v/=vO{&^A߀7:b'>(/l]؅+Wc0ƣϋ\	c}g?9[bQ^yn槆wԢIΩ~{"U^k^MCHGC\FM|Wf!DU'1$4=8!-	mӸ(41x8xmE#G鲕+K>ud,\{\!܋#wЛ7un-ASu^\xKu-4&HBnuNNO[3?ʙ&9kF4W@myX cޭxZJ£ʇWX%40$8(/Y;q
_i$iS  !dZ2Cw+5^EZS݊L=$N:@G \ˈ~~裌ꇉ7!dV|q8L
!dqQ}q?XdpQrVAxn"亨@4}={<ob<:6y+֨5zM9T{֥\s?47Ik瑜<޴r~4~N>Sr]jO2YbE|kyi0/M_"u:Yߠܴoܒ$&UM{X,"QE4rgЫx|ꏅ7M7&ЎђK?)]:'d-^1ӒFQ/3G~:|W
j5BD"2;4Ѐs?`}{k?dKz2cwFnZLlKDMGb衙IiXU,7},x:>7wL:<b(~DD*AyudVn,Vن+DX,N~кy.[>÷IUOZg	w^w?Ae<kY_0Cs΋s77b:)@fGo_蔗^f+ȯX~͞\^:Rf6#oan*a{ǅS,52鳢ϱ SEL2%~'B?T'"bXF5͞""8@@RQ"еBWdu\\M\֝eaG鳰)w$Uuv[VM-ʀ<?WeU+\B
z|_fvl'bxǠ>϶.yFe{C!>߾ɧV}^VIb#Ņhc@؄m9S$>ƭv}b-%W	W׈f6B>s5N+ǟD	8muBRgzRAI?PK
cצ     PK  ]W            I   ch/qos/logback/core/rolling/helper/SizeAndTimeBasedArchiveRemover$1.classU]SU~NaIX `)EMi%$@R"4
Dm/eslMv
^7z5^8c3u|vGop&9yg? S!QϽ\îm9vdα
ӪђNb~+Vul+Ǩlڛ҉BADEs&g&|n0@ϦHtϓ%0R~o깶g6rɭjg)CU5`P 5tr>x.
M©z4ᢀ&<G7U[ԙ$-
ObokxZފޤu!.xcAŗ1⊆xO`R4uϨKGfL;--ZNh^l"M*i@=piU<d4LbJ RsvK`(U:YT\0Ǐ;P.6[71-k;%ˣ*n+곝
sװgtGSGr<K*2.u&W^Ϭ:Z_6-nnHgMclzc]wL}wRH`3R|Yzu6%%:Z1kȅu˟n1n(pQͲڕ
.3Dʘ7^
LNwa'gҔ2{=IbӜco^ͬ-ZFvyN 5|/t
iU9_xi5zн"]rV,JWX}G(o>#/h^
X@hg&_!zhW̩>䳋0`9>!|H\.,,/N୅u[I)? R?"V/^0uWc	0N_׭	,@
qw%|L!
2׻z؟#f')ox贲2/}#o:EZ"Ikdar.c%HIv_}0XK(OzD/QFRY")
LKS`vlv8zwyr0Ǩ>jG`_3O88*lPKXL#  [  PK  ]W            G   ch/qos/logback/core/rolling/helper/SizeAndTimeBasedArchiveRemover.classUVECۄ- J6$ДTIE@4$8lfg7OأC솟awvw;FсNt17e9mn<O)XiWS2fcJFX5g_HGmz6pr%J&V	i۱Y
vĺK3ScFE]e0dڀ-?]PYΛ\fB
W\-Nۖ	Ë1A'ʿϭXa'
v°:Fp?'0d86u3,zM؞p7Yh>ˣI&FU)0?}b=Jɹ=Q֪[\,$raH1qw)eOVIb('А1)6E'iOUn9VE"V.MBZaYR:+m3De*t`w];Jj@ǇgoTR'uNmX1L]|ސC?w[l:4T}̰(y;bBʪ3x!cKH_P]GzZp%5.ť,p9599T(ʽzm[5Wpnsi˰ki9Ú'.ň6Sa쾦"ew5'k	N%b蛡"{#^Zk42JQ?ǮS=$V5f~S,\kȣQ*+`qexkφ/,Kh٩KCyO0t*#*=oBfiBms`>gԁ<´ӛ<Bh!/ߤ(V
E Eg-2Vhw_bkh_
dy#:+\;bbnW͇Gww<a1HTAbFaI`gx8a42('X'_*Dvx
8CO_cp;+}=+ѹW<˦hL ęhi7GE[|@Ao7V:k7C|tONGPu"\'.G|_m<Dv&Aw4v|AjPK੔w  
  PK  ]W            V   ch/qos/logback/core/rolling/helper/TimeBasedArchiveRemover$ArhiveRemoverRunnable.classSMSA}M
CET!`UBY
 2E7;8;*O/^V?lP<\_t{3w `w7*BukWZzu^*LE.v%hAtudx,t3˃
wٔ]u"uyC5{Q$ڡ$NW	_!q<&#q"PpNHyփ(0O	ҾmJG-amSv0:n\^!RD"+h
.naeD
ɺ8&K㎋V?^/ڬ\eC%uu ۽n[[|X|3m/\A7%MG
-H<)[9xFi_>3m0-cBX(8\{z,+ʁ0Tb~N.2z6ŶP]>E)
2Odq7?H<dKS,*8ƈPg>
_0ia7>b/VQ*QT)EʠFN=WUMr
%v
5v:i7PKm<=  {  PK  ]W            @   ch/qos/logback/core/rolling/helper/TimeBasedArchiveRemover.classX	|}i5B $[Z]0`a$!҂<Z͢1Ic8n'hcĥ54 lӤIpicN4GuM|h%O!{7}UbɁ{\Sg$7%mlj\#""!CC@drY2ym=h8f3k(Bt%!2N̾35^kPIous9h0Ƞqhsm簀K3uBڮ3ۍ,7.Js䬒s7㶙+GtCU4v{(z7
0ͭNFiy5RdT,(pӔki3o8k"X,Jڃ!;8fmOFS;>U5ףcR	gӛwjz[kmdA%MK)į8`4m{]AfX.%=
0>>cVjXVwgi>5;!BtXIAMM֐k2rS&kV:q,b-j&mO]3ޝCcKhЮc#:f]>QY;9m1*7KS&HYcXv$.&`xyv]3h4ܝ;gx8Cz\qWߢc+`x&e˹WϬ!v(C%ʙnl4Ӧkٙ^ᠲ(NҰ[ǝ#˧%I	wVfTxET]:ލ̼ܨdHK
iH9=;'2t7c&5BEWݖE%i~i
̖q<ksr&!o/%ն,%M5_E
tjy;Ep@AI˾\<œiϕ;JxԱ,9`&S=
st_>O+%zn'~xbN;o:T`=<CxXu<"#8sFzܒ*2{>4!Rnd2WFMI4:>2R;
'S	T_"cg*,t0't|Bś$~SǓ(tQk&ѪxTn:>c3\I[qḮM>iI\a&>w@LQ(diq|F3(C vZ.cTꤎjB_NybxkL
tK`C@}rrnTQAt(5R٨[|eg!+dvNxUf8e:vΑB57nVK 5pA\5c̸n`:ZI6+|c
<zfYࢫ!?'K+K

~g9e_3BݢmIkY<so
LeZ75bxZ5M*v
]#65⏑/ɜ(wuLb+G;~$e<Cvqoe!GR\㽍F)їIii1P=O{];;6=ZuKz'Z{;⽻n֚hOwu{XLtڻk{-c[|ƞ%Uy_]vanS.+c&LWV~qñd׵JMQRkp&9{(<{ԒR$+y8~{ʟkLY/^Σ',kZye8gGCµ\[cj=WmU	S![%O=u~1Ϩp#9gBm)k{UG$yͣSf\IBܙ\f
.#+-[ J'>옹$7 =~4k:S
z<XЦ`J҅fSY2_W23Uұ~3+"{y&SJ{ŗH=$:f(wdf6%с3l͹6PᲲi3C>j5Q1Ι`Ե֭(4VRUAQqE#uV)]&^:;
/elf6lG+j9r(\E+Vr CJUrmiXE&ְkG*V c'w4_z=m22sqmNRNP$\1C 21x&c:i壼OʨgZ&h2X RuMywg0b+2_*6@>L
?'l=Ow4!EQ,Jc}cn,Ϣ:XvZS>X·ܡ{աXměvgJFePo҆7RrՋ;DCh)@K*xsJyQӗ+(}ON~(ǽ"ܯ:.-ʹeZ^ i@ 1Gg6Ƣ#\E黊`̈Uc30D`e"T<űlӠ꺊vh*mw	u:oS#lf줷fZy;GNPnb|WL0G"L{5FFhH佑B\B^bu"g %s,oGْ>!聻_Djw9$b
#gz%zN2J6Kl"Dy
k<P-N
P)J5SCEXȏ4z=A+ja3-xɼ*a֕j	< w,W)BoLDÅ|+*B-X|xtԲaT_8@ޫ\X*@MHIbHaІ{M
u%R8.f	WY2(EXCDC&fN Tͥޓw
q<~]eこҳGe͏qT.x|=<2ĲM,gQ{#Ǩ _z776ڠL7[-QT͸
!*F#$NR>[Z	WȤ+:sǒo0VU(~H`eqEqE8VU7UZU,1(cU΋8Q:<UU\tx\z0xHσ1&8Yf>~O|~ xya1ؼȇ'ȡg]ĹE%s+=ꔗs;,ŀH!>s>Osb>#$*o0- [
^&3@1?c>nS.`/I?1"Pz&m)P^v%Dv׏Dé\/aT8um
8 lȼNOы<B8?`T%ڪqHۂr_l;Dလ]˔nO1bfE4Odgڼk|~Pp	AKf/1*U ]t˗[6i<Pd|#p
_aOj7ػ;9
b/q+iVTW	x}*!"֗X\%4+<|Eh/`z;<׵D'ʛ/"B7iUn&XttL,S%kx	A
h7J?$a@IF14FTDk
-&*ȏRSqO#xn0jȫ_Y1;ǃ;{	Ї?D3by^2me:&bWp=ՕfcXN4uqƆêICܓլ9$[7rB"$_Kټ.^YUOOeJ !?T,S85X&gQ$P'du**Y
٤7r\!)`MvTPKLڷ     PK  ]W            7   ch/qos/logback/core/rolling/helper/TokenConverter.class]OAi.]"ǅ@14%M/]Xwp%DB?E<3ǅ\ξ'sw /ꠀ1X{PH]ٓA`0`(Vk2QḘ4O#`*<QQAOF2ڗeʄ~9^.0MX~^6|0m5ZgP8mh tG0^omjɨAGիTgƲ5ؑ/:Ef*Q[$y>ݕiP?֮m9^@k̓ef!N
@n}v4hq
.
kT_7Hύh?@W/8I)G:S	쯦'Q
n˲`Ӎ.hT2Ucf	
"9U_;A15y|	Xz!	b
<T2uy|"MͣPK+`    PK  ]W            4   ch/qos/logback/core/sift/AbstractDiscriminator.classQOA^hATP!hBcB&ЧFu)m~'_L$$<PĹ#infwr5/X. \?Qnc?TZf 8367H*Cv^3{(ET<~-0VHjٗJ3xrmE{xư(a,өuSjH|<QdBZcaԜ2ˇ{)YnJ\"Z2V
Ҵg@ݧHKv)cH<Dh)*?djsP4dp)Uf܎Jπ)}N|zV5-ѭFm\Cd$d~ɿxY OI9p.XLw|̦0Äפh\/x?dM$;ľĿ
PKO    PK  ]W            .   ch/qos/logback/core/sift/AppenderFactory.classPJ@kcU~Dq) l׸1Fy(qB7̛ϯ 78"^L*S\<3adzt쮮^I;b@8/+g[0[U6d"J$vrt9t_71a2	1"\KcfMCVLJMI<irFG̴Vȹ!pC}7#=
p`~PK,Z     PK  ]W            >   ch/qos/logback/core/sift/AppenderFactoryUsingSiftModel$1.classSn1=N<:ʫ n *VJJ.ڕ318.baX|z&)#پs=_ Í"2#`9~དྷڋd/txC⾑~-Qu!gPWPtEj%P̣>FzC%}T^JnB7$o1)Vmm*'hggkhB=݈,Mh#c>Ã)W7jiZ_;`Lh8궄	do+>K"Gjͽ}c1SX/mʴ[C#/Bצot'IIqtVXiͻ+c؜۟_V9ζolKMB5"X.Ј3׵MRV<Mҁ{kYl'?:9s`ҾD8sTfdgdI*MRcvMeɾUR1\p?@ƾ,.%e\I%z=,JgiDwPK
3Y    PK  ]W            <   ch/qos/logback/core/sift/AppenderFactoryUsingSiftModel.classX[}0d!ibL$	
p5Yr*}fw'd:3Khm={wlZ{{م->}ޙｯx㟫
B*P/|N[Ԣi-;Lӓ@}5>ڎ0EAXE#TɳчL;6Zr!4-=1Sz::.[R\Hj.01	~sS-[4؆ۂmlJFcZK'l#;FA1{
nJoNm)NZFjyާ/	9.XVъ=,=I*YfRmĎfYCAfvy'^\`^	u#8Ҫ*␀,P]WF
Ǯ,Pn	2=;	ΠĮ靳
PV5UFRu.0~+YPy6Se\-#*ގL%=Z6.u\wΚ6HK|$юu0lHzn`etYM8ΊًǧwU($OQ+)(\B8ff]楋Pގ#8.s
Ž*2*@pW~"P1)F^:؋iqb	1^& J=fUD欃*WT<w
wԍk96w:FHؽ%iiI#mG:vȳjjxbhx@ݍH  B<U)}eў:΍$*㹼:M]N.%vY&(iGm<$TؠF
92;w"ޭ༊%<#p#
g`
rl:>uyv$^h3ێ4393zڧ	,VJ
eDjl[ǌ>$tkFKu9cI-=Y|?sؕ{vXyzgc}Rf̶-A	tWZ%nsR[})7ҩU
,0[v{<L)mX2@`7VstB,PBoMqTM.|f>sR+]KmE6pPcޯX$:;ܳCmTu	ͼGY*MRK6q]vvt73塶z8zlk=~qA*~$=\>'ʡx=ʓ:ƲR>Wy5KXUpY**yE
p|j3׫4d^s/%~])SnOLN袧.*t=Po⏬µ62f7\>WИi.s]<ܯlYsN9U9{;ٻ"^y
&2*'cm|^^^!dgא[b+g|i҇\t
eMel^Ʈ\R|"~m8J1boNcxBC^I%$UU1<Uȋ$qj''+~"W"n)m]5].X-w"惽wV1@14kЎAL1ǩΚYYq<Ex磤|>νO$iP*t`x{=nz~61$=u!۹}n'ZC+8rDO}k%p`QZKXxu₄yAG.їV$)8ufi	t8I?OSx´gsn	ks=g]/3o}ysxXCx-ϻs<[E"1 E\%_PQW_
xT}?WvZ6ԻOzYDɗ'c
|]o"BG[.ϟ],B?-B?OEߟWBPK    PK  ]W            .   ch/qos/logback/core/sift/AppenderTracker.classWSW(ZJRx!HVXD[
Kݸ~yk}Lok9,A6Ƈ=~ws p?QZNȚI%켞KQ˛f8,Pn Cku2C95#Y&+7ЍY065ʈARMQ?r4؃usB7U\٤}!Frl-xxt.)J"%MuEޔqdvŐ}bHBe<X3p\B&c
=07Q5)Ǣ,'|KCOdɴC0pZMj:.-0)|sSwid;~l	=)N3)eO{&L{[F/R%^'&7ڢk(S'"3skif]'F1 \bۚ*m0$#Kb^2]zݞsZZ[p(mPߛGBqL04
=bde5ofۓnZ
-g.+*!S8WU +vM튇Li"2x!7OU6Q,AgQjnpm6/kUbgLLqx1VdfHԮ| l]s@{D͌)y%A/k0(򳗡T	leK]t|Ә,IRrC^^}lRs}[W*ڕRU`$̂jWtzx s4&_lc8â+FKu]s2ms:u4H]E؝:|pjT=YI-a|/%|OmpfFsY/r]"jQ>J]uNFGCRYŶ5[wǫ
UԘuQt>Ѝ&H?Mӳ߄śntOӸ7i\Gs3n= źawZfiaZP г!zv#G&WqD)s--bbbCmas;

CNgisiwf%,OQ@Qs-#%ۛxk<9KacDS4=ql~ND/Ǻqf,X rrx|Gm,͞$\cK"ɷ*҂A4vX ,Xk
k?#V'A$t5Ի@3!qwK$7fi레@}?Tb|.&pnvmJF\/+^YPMz]d5E ksQ..%>"yDMHċ#"x-W#+kQpT.\
O#B³,ۛf?{a|qخ!zmLBO^3pHP⽂ng*wPKɣC  j  PK  ]W            3   ch/qos/logback/core/sift/DefaultDiscriminator.classN@CBB(%
*Ao*!(("aCُ`JUĂǎCbl9w.ǧ ."#l	s1ٗXܾ6m_	3l[VJǵrMIb0jao":₇,aEX!=n
ʽ+.{zP0ds2K=pd	5+}CdtOY})luvw3!x96Z͖65u%lݨ-
%C/VkJ䨍qP'gN}#}?T8ֳ6&JJdAJ@6YFvn/r,љ8(ǱH%.*#\nQY\l-UrURXU^u67äB[S]3	3PKf־    PK  ]W            ,   ch/qos/logback/core/sift/Discriminator.class;o>sv&FblT̴}̼Ē"vFĲDļt}v6FE&dd:W&22 S
PA7ZI(ؚ383I\#*6=ީ"Xm\0-!)i\Eɩn /
D`0201+0qx\@>7
e PK[fI     PK  ]W            2   ch/qos/logback/core/sift/NOPSiftModelHandler.classSjA=YFjMBSGMbP,*Dldf'N/诂Cwft	.<;{vCA#P?|7z%}RyGPg< 
tBhHclawM
.YͥI6 q_ґ>{\Fz{mRJ2f(8b#
~^<LgP(dNxY"gxeևBwTZld;1vm?q/гF
/uaTHDE@ő0$'=lel0Ϗ}11b7.ci>auTE`od$j39 f6eZd5$pnRΓDa,JQ!piyU	J_R8S؞*Y X2hp3PH7'H݂6fl[6xb' 4,@5qhmmF
ʨΆUn1nPKx޵  &  PK  ]W            /   ch/qos/logback/core/sift/SiftModelHandler.classWsW-k%e8NTme9>TvLm'iv@X퍥]ewƼ

7h733L+ß]=j˒px|;s?{ 4t	Yk[)˦\Offu?0O 
QbOR(Y̔=גzy}t
E͘NڎL	\kN o#K#J>_x{f
tыCK>rYS#K
pD ir%Ӝv
f݊Z{dmbbG]p
G,f
7VT0^515iL*Y%
vVa@ f
<r7
3S4L>80(S4)Uב
e:Ʋ#/P]c-Lqb?OҪ~2ahq@sL	lשe@,Mi6	
	BۜR	0ёU}˳Kcl6TQSm
-7-l^-SE5.)Tl"Guc}
ʹ	<rZ٢a+rqEmk>	L
--Yf<Ѡ	<#s06Dn%0Y
guy;fI``nULEt@$Jر|Xj3<Y隤5,X%V"sATg:"cU{E
Kϩ=űpk79Fu7nIB/LYlG.TJһb.Zfql]F^@!EͪH\Ekv>>l| /lKkS?,rxNT3wPʶY{:8]](|q7KuxX7۽s6Oq<PIm\OZZC;CS|Y-fk`­5gn> ޼YKK×w8wےe|_Wٛ>}X۾ŬYzOSygݱYZ.m/Ï
wZF]g([,yV܎48θn@fy^knỬ]fTy=so!H7J/^N?4\zZ_sj̪W-nXBk@
b,6O2F/5JǛ57l\4kW޽OVMvBs#J䞆?<y)bu1Z^Յr߆|~)ʺGpgL娿
79 X&F
53WAZ.ǷAC #G5)1~+>$;\subox{*yt2$I-<&auw1ՒAX2v'񤖌o!g=<
(b}Oٜ8S{3+&9{iJfw7Ĺ(yTxT(c14QjGs:p}˔Ũ<g<{?"[H潜MnJ>/\y=rxL×%#
S/p CymL̟g\k#JVJv;+0|Cnl8[h`y˵}]	Wkd2tIiJ7E[oU8	翃9= ?o"-~?"?PKw`+    PK  ]W            ,   ch/qos/logback/core/sift/SiftProcessor.classRn17mB@/V !(JqS:x>Bo7+>sg7 wq#J*2c2^W\x߼R	X#U˟IX&1saO`mc3DX4C̣ pÝYC1L܋PmT6ˍj_9,8nN"~ג6Pޡ,BSl*'	!"V Hgo>?kLJH֌jfdizӽ:
7`ڽ'"c%]=#cV:#*X's`4^ %pk3)*ǨpVO*QǕ)YiH+y*}	g?Tsp58\)$ǐkFy'PKv  D  PK  ]W            2   ch/qos/logback/core/sift/SiftingAppenderBase.classXS.HHS	c;$\b#F	qq0BcYE-iM6:ig6i⾛#m6KfS3Bg:]=Yٲg{s 649 ?Z"YÊԲ8O?eyX41=xmtHTs
M %f+s6pl/:ݿ؊O!@XA8=<3	nܸ!
Tw
tfEF>K=KݸGU5ZZ`\F=6}TMsC 橣
1WVt'Бԭg5^_͑J gu"t*-CCˆ)!m
dr4љOT|>gRrCp1,1GnT3%m-q@@PdU"Y#O$4Zɧewx@Uڻiو(,Fȗi=!pGЊ1IӇ.6Q(x*HCpem&$IΪ'̚ղ9KfֱEj)1KQFOuK#Iˎr\L6jYpI
d۱K'cTJ;Y섛0i-a\; Rp
K]^BdL'U4	
(i*')*XFHdhwd[>Mˣu؎$R
V%>+gIVpĴdڢSV[[sIU``M@I9ZM52XڹaΜ055G}:qbir]9kݬj&ɹ}EcyIZ~NBjEi9e_njc]c21$~/*x	/3IÁ\P
^eGksF'1ϛt9pڌ-L6
ܢòi7g2]PӜ		5|w'}UI4T߈GjekEܖmR	`#6o-ֿP|MhUmz'MSve|ak-CM{M/0ܸԢɮKt0gf57bSoQhKPQ(nBZ ٹ%/Tҫȅ<2Wai(?G
X,:,:,0."![gŁV.:*Sozm6ċg
עkׇ&G}<FLhGuI՝eH*ai@|	_/ʥ k7tɋM$
3'v"~u_Î\lƷ{n:ҋŷ8|׫f.)=|5%k{RRbO*<LlΖlg'nvstʑITho)ioz8Spoy9SCs2ξKxّ&8SE qyy?ԾT	ZG:^vZ?hp!.1XBM&wmЃeę8P]5s$(;,h=`.ʃF'Ӊf
'?'ǙEO8).aL,oe@&d
p?FHt\[-%oy<+%Jx|O26yɬn'X|?Im@II!J_j(e~_>WЮNi賂Px
_KM0Uq^7a66P@Ǝ#~9l/sM(-F@Ya9Fit$}>?Lh:2Ab;~?>Tbⷑq*X|;w(%1@SG"%pptq,ņʁ{׼6q/p+ui@މ-xG7cmcsU7uՆ%:BS*pE\)uooaUa,X_;v??PKfO  c  PK  ]W            8   ch/qos/logback/core/spi/AbstractComponentTracker$1.classT[OA^
**Zei
HAb	4NځnݝE/&>d|Gn	&;93dc@HCXGQbv<rEn
ëIc)*Tk-lGCᦦ"η:=G'b:3$7,na*B_T~=Րч~V4Km^cdu%-#/CQ^R$*i1!K1=V6}eIqߜ1{lSMg-/Qu늒4rHx닜'9DR{SǋEɭ}J-em+5e8y\;MlUqJUK+X\Һ6eXjԚV%CD>b(1%SJ̶	.^wAQMs%bY䯶[m<(Umq;U/8uҗ>rI_5۴On3tRn8f}Ӷ	3̷(j `cAn%og&eALnSOܡv1
w/׃q{G(>Ao#&̜+4}l_(YgI	IL;?!ŠchjnÛL`a6 v.`>7Bhd PKxNh  7  PK  ]W            8   ch/qos/logback/core/spi/AbstractComponentTracker$2.classT[OA^)+UAjն(KH
IEbIi۝:;%䋉 7n윙3s3g韟 <=	R[H ɰtʷ]iqvߗf7;z}	HCt_\%zTjiL0!{ȏrcm
`1B,rQ,oyF4wz)о[~UW߉:mpȫݨjS3u鉽A%oqnkGxpQOVeȟ<fU}yO"'ˍho+=
!!17Foxv^	~Pnx
h
csRQ=0|_,jtKqm2W&<U:aHQvO?󄮹#gN:FKs`l`L7k$4'h2o`H}UiL%p4懧p@8K4sg{KSԋȍڈ}[.|Ǖ~Dҝ'ZAwm,.X$熳xʇ(Sʡf6LǄ4Gr%PK9N    PK  ]W            8   ch/qos/logback/core/spi/AbstractComponentTracker$3.classT]OA=~AP
VU)U_I+DIE"4NvNIxbG?2ݶ>lwsg=ޙ b)3H IoXoe+--X
hajw'=ϣ#9p
{עWX
Ƒ!dű\ᵬ׍Cif_s<ǬbzL!rz>ypZRsCX[{1lަ0CxlcjtlaG0zR$LrFrnH/.#[	}0AW+iʓ΀6JZ%r
#[J%$dq'n9a8mhtHje=sZ0]il[
=2»BD'=Wh{m>? MvU;oϕyyRW]O.pԹQKfiP6\4|7le 7>(K&{p@KsτsWK0!<r}&BAW\xFw(T`
lsg7x0""8_b@)D&vF{ʌci_PK>&S    PK  ]W            <   ch/qos/logback/core/spi/AbstractComponentTracker$Entry.classU[OGok;%߂ɅK%
N(PiMԪf]O<RU>5RSUrΜw93׿V;#BkX٪d7$	9۱!Hn!6&$Ln#[uwV-umbC̹֭{5]EG9cU]kg
n;;*A8J'M=dڴD7zT{!Vч~&qBQ^Bl59w[VuVZ;<VgU7p/*&%PQG-cM00ʡ.>҄="rSdH>hlϼǒuEf%˃XW[G`|v^Q7bUrKVu˪jCl+k3*<J_NR̿c9|UX!YZt+ˢN$G[5OT'
דhb.݅fKbVVиtmH3+n7XOPf}5y՝3ĶsV_װKU^eٮVk-m[yCj`K+#Ӱn'6	/7e=cO)ԏ=2
ceY^}JғJHeK8B:}ʆ~ :ht
wYBH=xI&A@T to?O2s=
sQER40]St>KG	?ES`4~D馎GS$^D~ԭXf?":LA8x:{i?MwD*^EF^{BN19ZRPC*QLE%qRQqSc4;tYy K4<Makz
8¬na,beshxi6Bh<g<)ϳ"SU ~lOC<E)	Vx|
u<ʚ=0PKeZ91    PK  ]W            H   ch/qos/logback/core/spi/AbstractComponentTracker$RemovalPredicator.classOO1 z/֓&BHp#QCԸb[Hj ~(cY9 k2&3o q GE[р	Hfg	3\HOgZIM9zS郑DpM<:RF~0ꉍS䰫ͪjNRμ6o8)F:jf_]~l"!IK8YVJwҺkm]]s*7JIZi	?^'m B!c la߰w9_2ۨdg+ZQGPKI_('  Z  PK  ]W            6   ch/qos/logback/core/spi/AbstractComponentTracker.classY|S&RZZ!iA"RJԴ)Ҥ$)|M9؜s`:tXmN6t/t6um{s4~_y~福C *NrL0gs$6'tnsyc@8+
N
.)(
4wl;
`|\v
qɹ7(heG0RC1J<溎X⃙(j(>3%|1>BV\P0P/Û؆@z  ZOn3ۅ$
Lf
*Ci*Z(֣z4'`*?7蝛\`p՟: nT	jePk*6[cwkEˆmj]@<ua5 sQ%Nհ@wlk3]i,4YjX$,;
"_,QƂFHdyz,[UӠvf,6Ho8V@+4H7ߠG"hz"8>QS/Dw&hTI`԰
-
:$MlV,[2w4l'p	çeq1E䟫#8YRu=4DphE
R0!kDZ#H
v_\HdVk薊YnHTN	QPFQi!=I!Not4!)5FvD4b31waxgπ{p"
iӘ8uH%)T[Յm.ŬiO7hX:Bcu2u2
Ù$&}kﵲ

^X.sgM&<f*\ 酸r>,f2Xk(׻`+
7JIly|AhSVFh[5:[k7Z$,˸5+Q7R|nU('R9؅&IK\2$pēsXډKYGrj@GB!bvаpc./k]f O÷̶|e
BKh`xe{^<A
fdLBh\W_mm]ܲeR2Kݚy4B}Mgz[xYk6ݦ׶nm۴lݻ^_kԵZ`w8w*Emwjɍ	]"7tѶ@D(3jD2 ]8o=Q:m	-`f;l'+%H%,<6Hȹ̌cګaa[<ͨe]4̚B9ZY<"!Kgru҈˳15.8:Mȅ<4z^Y
푶$y(r$d;d#\9NDOdЂ1uJqnrlZPf\F*mO :Kư+g,kOܷ
A7^̩`?dMzYJd!n{7] $/N?
2TOzQ}Mf
X%XݰaFwP^-X5rRqb1-J4.ő-˯ُ`B!A<waTko{)󛸯%ӉыUb2xSgt9#~/JLx}+8s Qy0j?<Qr8 I81ߏi\tV~xOُ/f8tFRQ̢sҩ.#XЄ'CRi&,kVJ4ζZ?ᜯq'8)XJ"=pR?Nm
o춑FY8I|hU8Ȼt'	~=ocpT!"g<2+M.L?T/)Epݤ:lgG$gtboZ)ZWJgl>z-BSY>ĆVbAs2C+ҠiIhگ3v^c@Q+C3k]SU<0qڏջ_Vcm.g_y,╸Uq-:CpY9~[K;]8S5k;w&RyR~ov2N|#jAkMVj!h;ձ9P1_Lq;n33)LƳHrϤ~v~2 MIt}|vRXog(Ai 4eQyUnzFu, !*yՏpػS(#yh+yyڼ'2?{UlU2TIJ.eH"e/7l)S#/!Ŷ5
 .QgrU5
 UV*pJqBYR5y~|n+]Sd4g?8:S	SoO:Ѥ^\,#,<?p>c	NAг/睌32OF/,S)L%
+%a#y&$
%W]@NtY-1tݴ28ݞI<sw*OґOa$\K\ҡclEd8tLz䆿>>Jz! b*Tn.u4,/h<4412$eɂg 2bQEԒ%#e~_JB\*pkV)RJe+q8K-Vj+	&rR(x}>2b) v~ܽjEiWXy_MDHҼY^M>;l?ݛװJ\qfAܻ M8{_Ac㫭6UbuyRW%Jnzn~M-F8qӯ|s7,Gl#6aM;c.0F 2[$')Xg5p	{޵RaIWo$N7p٠RMEIӎAѪfm 
j1C`sLv`y?XyVl7G!i,c!s"K
s=F(9NYhݽ\%UuPKlcGu    PK  ]W            0   ch/qos/logback/core/spi/AppenderAttachable.classRAO0~Ee6B 1Yaƃ5ج+8 0,{i 
]hB7Iq0&	C*]H0%N
8DК9#4@!h0\\[^Y ,Kf7y<dJMtiǏK.p6ٍ{[dqdwD0wҢ=:KpC_5Q{!q+qln.v]rF4㋹qɺr [#jlhTckP/pC8-pS3h\l`͍	tWPKzO    PK  ]W            4   ch/qos/logback/core/spi/AppenderAttachableImpl.classWSg~|mBQAQB`+-B5$kXXvcQ=m;ӿC/=:ꨭ֙{tz8Nld}=c_}	|T<"1욓HaUR᱙99a0M1Gz6)1N935|vJ$JPΰh$) ;d_n=1QjP#o0t2M+ɈaHYiFG*(<"BPpψ)IdRY3rPt͏{b9Um椒TU+'Qo/C}{Q*drVd&KF6;tpfqCˎ/5W(MWKs6P2hQ]uD6CHy갼d"na=8PYA1y0+ikq}ܮ.F;!MER䍢6S"pz]-[T휤fwxw'kiN9|ÛPeɬwD2~GpsPWRd2tYIn!IZU49[3ڨ	)g{c*FOI[	7Gh{M[VV%o_wW`hq
n~TJpZR[&1-U00~|5sIr*s*kt%o<&_;pu>>gB(;
jBzK͹K_r=ߵ0xmyʕUurr5MYvznHvDKifDT*HC#Siڱ-
/X>:6oF9\&!Wx7nn^80BZ*"}@]Gig:u>0eQ=}7bt_@#݉%Z/ۉ=|D6Ϩ|c;T;NjiеUhG n;wB..;;gt6eΪlӴuGk^%zq{{{Opą.v˖ܷz~N*q5%vQ)^t}a/<: zp7)*Jt";-a
MHОǄL;fL%/)5rP-0JK4"6oo_u23eٿ)~;,)-?eѮ'bx&exX0p!تCzm"4J#%'<U!**ĒtxJx| |Ibum<?xB{e#<7zV~wlqMnd(!ඍ#ؘSԤ#w5_@P@ì_
tXAK aX^Ò9[hҀYsTJ@@4Q۲r
gY>
pb~I"CZk
8a5G)KPYcSbwZ55EThMߴcVC`P黸pXF9X~-J>%8wgT4O-	ڈ1N<vI~qXK~ґϧ`/&1mPe{PK?b    PK  ]W            :   ch/qos/logback/core/spi/BasicSequenceNumberGenerator.classRJ1=SjnD0 E2Qi6&Ψ?B
~%KEE\>}Ă>d<d#ǰ,ʶyӞՅ:ۗWmTN튶bmkʱ<ҹ<t⌌S&"--y%Bk|x` (0K<TW2Rĭr5e#T.*-VRh"JmS-rӚv=3^5,'[4BMx$MC+EX8e6j6F޷B~i"6vR$oɴH{b:Dk :A2#g+g<¿O='&7!KS_(uRl _~.F.՗s'PKt    PK  ]W            .   ch/qos/logback/core/spi/ComponentTracker.classuRR0=a
*"02uYܥδ01dk1$8>_>~mK}h{&? º)Yg!?y6kYl`aᘟqOrx}eE"n]vvɩVBy0!2̽mo
?{34ϋsaX<>}ۍƷxLa7MRu\IUL:`	DqTĺI-^vj۵Reĉ>RTdԀ'_BA:z:_ir)/ݿ&rJz)EU[OK^6);Dahc}{PvWaffCXlhpr^4qN>f0z"ܼoá<-#X%m.x\R^
gOoPKq#  R  PK  ]W            :   ch/qos/logback/core/spi/ConfigurationEvent$EventType.classTOP=6CA&(JEQ䇸YRfjב?IFFGEpƘmN{s}W s(Hco+t[FRw\Sicm,VLۛ7(2B3k9mU,U5_-W6+jQpԋ"׏Ȉr.uM+jsJ9NˈsR\]ŲWsqFF3N2TpV92HҺ3=뭟cX .0M6 ){4R1qGqQ%c6~TKͶY~p7},;4ZcZvc2&q!dٖ0,f6"hD##G7eLCŴәgCU	4xɲMeUcI+R^Wdɩ
õ]u0$޶3]^mDua^ۥ@:Avgz+x*Nۭ+/u>͝\3[ޚ$ߎA.ڶKO"z䟝F8;x0c$D?6"-(?CeBu0CpE%Og	j,ɦ>bҿ|]5򥅷Jw!6C |(IϻJ>j7/R1~-MDZI:tfpzM w_>Nj  tP2!D0AK"H|čD/OMaf1UZx(0GbY?PK  3  PK  ]W            0   ch/qos/logback/core/spi/ConfigurationEvent.classUsE~$4""V)CZZkIMm$Gz8~?:2:8C9{9B~\*envyw}w_p$&pFCL$RO17lѐSw-ǒg2#!,tlmxh0#Ȼc\<	%ώj͙+޺r^4R&!]Pi\0
rm\1\;~z_}P.;IZgn1McN*NV7fA>qE`]ۼbR.<JyVUCU
qaaf!븡!cفrIrZ1;z&baz
mI-,Ӛ>凂Vwlȗܑ>Zf9'B
!6)_%-Ti
n?䞥ß1ٶ)G>qoS $ǡ`Bߊ\S?DD3ty$|uyU{m6Ng[B펵ifWTATLfqt}Um^ʓ55Ķeu߲0-_	U=וўma2e;6Ҽ:f6SU5gXx"[\e/ri亇zG>DB'oP"mfI
8P&
koo[)N7B:ΩO?:T`#u/Q?,{9s-ަw1z/ m' ]>g@0RnX0R&C7W6owۻ|L@]1qg(HqFilFj|1N(\×_Wà^&@&}0IwA>7L.F7UH$(ҠnZ>P+ ýi6JAMPcoke|*fPKK  P	  PK  ]W            8   ch/qos/logback/core/spi/ConfigurationEventListener.class10C
XaK,JH!(48 BHx<X~~O +2$Wl}qRfxuPxmTQ}¤Tb\S):R-x	ワBF/:jJ Љ']BzPKE       PK  ]W            *   ch/qos/logback/core/spi/ContextAware.class}P=O0Wi
R<20!RJA0;IS"(Z!޽}_ .pC8+V<	m$^
vj͍M-g%W9˖RXB6ɬ+/'N7GBroz҄dԚB^qRoTFyV_GnN7h(%aL[WAuzc=b/AkGn`PKGeЫ     PK  ]W            .   ch/qos/logback/core/spi/ContextAwareBase.classV[sFNQb(N- RB岶7Y2HwR`}kg:eqkWsoϞ?B A*:Űo΍bj.*CEМRѣ *C<_J=2ns<ʛH-5ix\~-1mAȆ-斡Ep*_ysVhLZGU`?1`ڂ(r}᎘~G3nps	aĸn	^؈	aK3ƛ-8eN,()RqmHEH
U{(,x75Km&%N`DIpz۾-l؎(vU3XcyI!)r:
FUvo7RwU1p*s;R=T|MPy֜(ñ[\
<>RO>9Ŋ|Ӎ^|Hn5!I;]h{82c5*.c!B=R㉝p	SNK2Ud=L=%\H7.	iedyNn3SG3)+ҴӴeVk^zK[#{i'fpV3l֢$,;4-v8%*/>*͐إ$ZI"Juo!"PoZ4ʯH?KP߮pb˻׀QɚsTWiؾ8'w-7nED,U+/hR֝<+Mc;dnPvY3%NmŴb,jU+x,Qb2+<9{׸QЅ=5͵j%Vmc~}k &/hQ&unV=QUñTr5c "4җ
֦qi铃K6&X2J2}i) 0Lcw_?F557,9G퐣><w!<H9ex͌%_ 7z%tWѧ{MS9`
]aA%5nvbx*Gh܋r 2ܳFB]&]:'<9ԨwgrG5([{09A>pmYѣ{·X_+)_btwyO	JFM׈O.r!/FZ
陱}l=L%WT-YSTMN!|9P (hR(g(q[\ZM|+[Ur
nQ/5t0"Jl+<ERLҊnm"・Lw6pb=_/lO{D;ĳ
s>s{&^%>_'~' + ^%> a&PA2{
[|qPK%  
  PK  ]W            .   ch/qos/logback/core/spi/ContextAwareImpl.classV]sF=k'Q(81'Zh1i&(NZ`-olaY2~NߙBHotzW'&V{=ܻw p?EBXAn0}Wyf)5Wx(4ngbzѧ *CB+YNʰJUReSStŚ{1EZ3ٴ%nYb`Y	G 2(Z5\o6Q!nt!N<`r0DybzM5W^pȇ/aƹa^\; :b67yצ(8#
FUq`$CIBݙ&/	a21mKmMǘ*NԖ|WT)MVLu+5O4%TMG0	`
eau1p2SGR*>U^%-ӌb0]gXSKG
>Vq^=Q''TEi\z[-hHbNJvf;B˸Gs$1SpU4é y_! npS"b+m=CxtUݦʿ
$-;M۶e7ռal7lp
!H(U$nz lƍEn_r:i2"Z!Bݡu9JFV5gf?&^א.ʖ!TOPcsE%kG)m~%bj& Zh;YO44[u[t)Pl%+:k3-[EH+3.gK*ˎP+X1&3\*®q͵uc76<fXβ*Z4[k"`-ׇpQ͚3w(ﮨ*HTr8Jm'iz~i+obUzߍE_q$x=}dк0>aN),ja;x3y31DVh})s=m92|o}pFGWAl9mOC!׃TMqd:y@kQ?S}<>@
쩜!-{<)/4<9C>Z~Bda}4ʝ_פ^쳖ߙɿx!luJ0RC=MɾN ղV[-TLP$q$c#
}0)gI$P
'/2/qm"ކYJ\[Z@ه]lHZM
dpo}-h7ʙy58X$K ^	$kCwwM$>$~;="~č@- k$Fճ6aKlհ1{PK7奻p  
  PK  ]W            1   ch/qos/logback/core/spi/CyclicBufferTracker.classSEǿW%P`Jъ616	Eslʑw7Q:cg\f`&>/1 EHBDŰd8+ꩬ&&m*]4ZF7=r!՚c&S(cX)vT]S/鞏!uR~l=N&`HXT~[z4nE!?9	[ܴ3U+8[ĞbK\۶yT:Ͳ;>GQ];JaZњ\NȔc|ł{p{>J)T0LhD9|&d-X4tf43P$]ks$ܒ/L,/kU[)UI
,anۚx9W4mLtR*bi-ksgƹ_SmV*+{G[v_.vEiJӮ)z
<_n;D-PhP&r|}VU"CUbjb.sy1aguZGeJ&]#j^
W/|͗bUmSDtZv鞈5CKW<
cmA7!wy\Z"_^.8J>1;q4tzjɖ[rct"{̊īFTyYwbnD?°@oIntί!}L )qF&z4fhvH6F`)K']`C
B4.xN[Z'wM[C%]?ye?CGE.<{5$\aGwHpOjYMә%92ſGxiE/]`j.<({glϝj;]L)Zy<~F_8B~{l^<[4n;E~6-o0'w_rOU}/|>A:kW,H&lއ
c.zO 
]zk^:2
^pu~v~PK;,5O  F  PK  ]W            5   ch/qos/logback/core/spi/DeferredProcessingAware.classu=
@EMx m| iC6nCZb(CB`{\0֫ph(rتkèd&MS^	V}$f=a7Z"aэ.!`PK5í}      PK  ]W            (   ch/qos/logback/core/spi/ErrorCodes.classSMo@mKJK?Bq 8!D)
K:vTAIuvz?~ ?
1v[57o_730 sKp	w2N;e0#f_.@s'OOTch}3Xs۝K[Dqy`ݿjrSre<+D
m"Rq3T[J""-y3iI`E|J5XeH1&(Fc{#!HO'uz$mYc.ltn_aGAw_Ή"h@0::]{MJjy5`?,Dx.L%"GLR
yyk_)dw$lnqIp5dp,}M5YCɡ0rU6	̅E$"z{nPisʫfK%b&LSu%LcI{V,F0ؓ%uU ؆[݄n%·
)NG~@'V	RƩ0yط*
[.
1<'UPK{=  b  PK  ]W            .   ch/qos/logback/core/spi/FilterAttachable.classR]K0sucs~<,ym9
'gYf?%޶cºBrN99 ܂*LGw&D4VYi#1\|M%LgR
C5v-㵣ch,nkױ3(]%OZ)=W4(^Medz*Ŕ}j{E(r!VHn/ʒ\ORTE!mɱw:7Ez7SwXjPtQzl&䣉o- nC?pG	t7ܝBX PK"}w2  p  PK  ]W            2   ch/qos/logback/core/spi/FilterAttachableImpl.classUkOW=?
	#qq	y4upSh
$H{ll^R񽿤Rۯ4jQ?'TQ]bl)Y{g̙33{|5xD<
*|}=VM<K?eT+-D
zJ{oYJOj]O[Ȯoeu o4,An;B*EOHFଂAC8'Q33S_yZ3N8	IJD5"[+#]=vaJ|%S|.G(WvOîژ" .$RKFY
WWgS̃d Ӹ "3ޥ6[u{&-ȭO䖲_\8ggaWU pMup3OVUdF=yS )nE\swW'U%lUf oT;zWKY|onz=!0BۻQBfMɁMR^`:EpqerKk[	ei:
2-%%K
# V|V83bt׉.c<aHy=N&	՚Ep7EZ;XMoV|φ"caRտ[B'-׍vDp_/TpvA8nS~Unc Umǎ bl{~G}{俼䀋A+9ϐݶH)<##|C)Oco;7X6UKvMZyVV˔O8;&~"ގLz[,ߔ~ʴ]N{nx#?`:>|asL>)g~?;+~=2 :38#Q{D 1u5\Am%9f*<VXXjұ_lmߣͱ-
FLAt8ޤ}l,ӣdJ}m[<m	&{׶PK)]  f	  PK  ]W            )   ch/qos/logback/core/spi/FilterReply.classRmO`=ڭ[-R'
İ9ƒO]XZ:d$B4>y:1뇞s}W XUcͷAFݲߘv:f5^;Α.YC	§t&5P,Vv%ADP(nWxꪆADK2̫jH]n0m/!#[:-ӳU?p숸#`TnQ߄:ǖr^3]g5k]r~c7n͖s}7Zg6zϳ$*=D*	Nk,_h`@~jBG\l֝b=<G>ӥܫc(֡2/h?۶Bo,w	Re[Q+$ddt!9jo
W7i#t(c0A>q%~	Bm|ĵ?P0G!eBUl`%@hxϩt="Dgΐ9|
ᔊALs.YU~YLbԆTm(ZMk/GX_tI+)$L"PD0zST`e{XPK +ʂf    PK  ]W            '   ch/qos/logback/core/spi/LifeCycle.class==
1"^NSz JXƸf
fMVYx %&"N߼ޏ'9"D8M]qqbX\Z.̑
qf#{<m	LK(+[/
RZF< 3!(#)2=>#>PKϤ      PK  ]W            )   ch/qos/logback/core/spi/LogbackLock.classOn@cCGRB+S QYPϗ_b
)GEM
Jvٝه43>*zp%y"J̢V9#BmNxQkc3U$V(j}ބЪ-/Mh&.BF1+x)SS&#~ݧJOLqc_E';cl0%jM>[]<16o\VվPK   2  PK  ]W            9   ch/qos/logback/core/spi/PreSerializationTransformer.class}O=A|z(l :*	{uuQi
?P^Lf&tECK3	&
X3adVku28YCP[g+)RB)}i-)72jw@E1OV|[F7E(fo+R}ȵˣPEϯVnPKH   E  PK  ]W            /   ch/qos/logback/core/spi/PropertyContainer.classej@ji/ݣK/,
yͲn׆ݸ|5>U)gs:X)B`kVZUpńuՕf[g+1sm@xoJn{)<!Q̄y[rQE!"Lҫdkkeo$,_]Zƹm5μ64$h0D:(_PKh   K  PK  ]W            -   ch/qos/logback/core/spi/PropertyDefiner.class;o>snv&FblTLԢJԴ̼"vFĲDļt}v6F\F8畤V8'5
K)
hh .)Kfd
/-JNuAsHVFf fz2vH21p PKE      PK  ]W            +   ch/qos/logback/core/spi/ScanException.classK/QV=Z-1KbS$Hq3L|$Db!kQ,ř;Eɹw^vw`	SDM"E	}~
;~f#_*!"2*_JZ.H!D&.df̦q<VV\axGҨMA;Ny}p%H|unD?^2jpaC_Q&q8f+ډzV /kub!*Sps?k
gbi:gFhG.B6J1/~zR.'J`WZ;@6yRcPy^2LFڬ	hVi/`N|ZЮ64Fc.KH^~:Xl(h	TPK+Ȥ    PK  ]W            5   ch/qos/logback/core/spi/SequenceNumberGenerator.classuO90sB))aKjycBB o<
)v4\ KtH6MesY|	=v['ꮨP&Sy[Oy(S@w<D]Vݬe)u~aİa PK§      PK  ]W            ,   ch/qos/logback/core/status/ErrorStatus.classNAETDD*2G&{3NV=>'>e&wU]]_o/ l[m6}oJ;[ DY$"[p(|0^iN<
-<SPyAm4ʘ.ъ"W-D0)IBVQM!~nyn+ӑo([oAK2MH}ϩt6F4/EP񖐹T]m;'ҌһkQFͬ1|:hm!fxϰf9VysW@)ƛC)Gk$~i!\\'8E@X
9PKHn9l    PK  ]W            +   ch/qos/logback/core/status/InfoStatus.classKO@˛ 3ѣЃ&&RkY,\H<P oIDFOnKˍ;ݐ{>
I$2H"Űo)LD]8?aT>R\XUo~milESvϕkDJbo
V2Tf;74Y)r8n[5d5w:
ߜIG!:,SPC}	~y+3~eZrPe?t?S+F@{NMU{#DE5@rX"okG|Ia(R]	׈Ҋ{0B+He \'N	85p6PK4j    PK  ]W            2   ch/qos/logback/core/status/NopStatusListener.classQN@%		pAPP(hTV(ҟSrG!g7(R'+x.PsPo&a)WRD2`мֱn^`p.īIEdDh%Lfy*ebON3āKopf_j?*yAL72E^lSOO#B[f%yR1R:Oy%E8NL^zkK)wq3HwЛ-86-ac#yhX7XW+cqоwd?PKO;"  '  PK  ]W            8   ch/qos/logback/core/status/OnConsoleStatusListener.classQJ@}ӦZA/Z]ABm\4ٍ_GCͼ+lQBم㡂*0[YްP%iMy|&|/HNꑌ9&{q
K{XGh];"OYpoEsۥRCyE*0}AHZE3RWKӗ8K\IdBy" 3ՐИ
4	ũ̶n2ri{@Y,6ml$+ϠǼܲX.V-z
hcFA!v>|n-hBKȻPKK	5  +  PK  ]W            =   ch/qos/logback/core/status/OnErrorConsoleStatusListener.classQNA}'x
X%QD_
qo1{h[d{6`N]8J(9W	l;*-XbY&226т/ebD,)O|,ciN^R*.63<ZN		-?HVG.jZ3gZ+=Vq"
kX\,S4HW!&\˴AeB8oD̈́YOh~P
R\t ز7J_^ƺds63m4c]r ';/p~qWN%eS/PK7  :  PK  ]W            5   ch/qos/logback/core/status/OnFileStatusListener.classT]SE=
β. a$@``Ԙ HC3az?J!UIUh?$,dt{9>}o nb7HhC{h/#ۗ{=]
;R\"{3z*PrsH@<;^%֙vdn k&}i21%9cn<8,fEI5ϒU
"
֊5_RҚ)'j"KzL+`_2ϼ~v;> Pd\xĎ,1=fhowv(C
Vf11ͽ0p	ј^󵡖w0RH$٢IFRd->qElU~50#QO-9P~-oysx<]
CIonlrZ`J/u{Eeć1e$4#t$)Y(+5ݎt)G6=?	ԡG]pg.RKb8aTaܹt;Iݣu^M4uUz}3M|'P"JCξb]h견\fk+h"Cϲ*R!u(+QbzȾNc3Wg<zd>IbxPE4HyT.^N[O	aChspչvNR=%&s- +>"fOR
|pr(]u0u0nJq`R6if4埃ĄCYc,JȿSTX
Otsz}%wt8N%FvgN^z)`'T|bq)HF7:C_`э8aB
`!|Q`,k"]#X,HOM_n^x1J	 SO"ojF-5&IFВ
Ih>M/!Oq8@doq>ý&B/
DH+b"a[  ;PKɲ    PK  ]W            @   ch/qos/logback/core/status/OnPrintStreamStatusListenerBase.classVYSU=fd&8$
,2@\b3t{	}E2UE,7ena~ߟp518\Yi3w%s=+LֵĂY'MH;&P`i&0uxeΏcyX3b*'z[*Y+W9ݼR[
(6s
,M'бM`eɛlɢFt &o33g]	fUzNrf`9?VkV䮷w
{q}FJ`_-؊τ8),O~ZEkݮXO&u	]vM6nY+(+KE9n쀐@F=}m5d<:}eDB;lA<$B
QS7b0#Q12IC%W<	&ykm_|	'pRGG0 &^hȅq9+C6*m£xL)C8ŬH-,^Z]J]cDǨ38ZWe6f.mvThia:yX+º̙NIt@I7I\4e(0_d6onțߚY!LsƜjPהTd`Vv֊h0nz)fKVb.φsىccg'NM`H&չ&|rZ;ßX#ifaNKY7g'MϖѦI6Žlo[u@rݎĜ(2l(733UKmJ	W;l$6oh@_v
Z/]baCU72J)4Y#|9(j8_*5j"F$Q㭌zjHl*e7XŘd_+Ԕ85hK|n@2hs9v
y밉Ov59泙22[1
trv]rl|D:т=(p,<@S:9w!/#@w=w	wi	{KY~3|(~>/8ُ(߻Cok=O([QZ)
A`3пv=ݽW}>3ǈq#*\PBfv\@7`NN~r#1/;--#E<_Ƙ薫~ÓG28wuK0@C:`XS 
A(~9`XL#˓a3*>F:R.2]o$U2(A)ZupD?Nŋx~_E3?ukGǰ+9@T%?wuZq"Wеož-QA>A,ϩӪ4Gի\(ق׸GmxD1Z:miM>%X,xf/,c}[BT{x3PB2{P3eVv3-]D	;xd+.^j[yښ_{
VJI5WTfR?)'T$NBdu-UtaMjk*dGE[c:b*PK  (  PK  ]W            '   ch/qos/logback/core/status/Status.classSn1=NҤM[Z
^
%)R!Ej)ěq7.݄x(Y'苏gx<7 /9d@V`:C-DӴ PT|{ީ@\9cS9((0s"e90rUX`|PWs;s'ʍ2{u/0ĭD(ۭaF)IVXSx|cE@`<^0U OESr,}ԍ	?ʶOss$ȘR2aٚaVhX[93qW)Vk};(;ˍ~Z:Ҕ
<
,uv
؞*;[+_JK kT/`I+#а_wG~6^^] IͰo\D"iV˘o>3h/ً/K(d8Gx,^
7qm07yV_'5k#eZpkɟ`dȩXm~ix`!Y܀c1Ԫ?nPKO7    PK  ]W            +   ch/qos/logback/core/status/StatusBase.classWSV`A`cI8`6 ]k	iͻNI4M6qmf:/;2I!Ԛ2#s99o7 N\*(Q+6~>n'ƵعX23Z&n4ji]AI02lDjsZ{\KLQ%e$:$gX&_24J^zG˰^<R8[}ĸIE6+p9=@BE 
<3z:MX`=Qܢb+;2Z=ժC_f-E;<KE
k^Jgl*'2CƌkFGTq7vd~gfRXԗO&DFOu_#EA	ij)=HfјZUGVм>)VVh^jlڈOlH3~6cE>#vIq|`p@AZ(@aeLvAqY7sC*L2`ksK-7+ץa	{rhL428$F8.JRLrN?T<ATE/Hɨi-ݧ_8&;N>2aVs* UHSz{r9=*`TAuaŎfY!=)$a/~@0c";G6;'bE_'vx#}^/(x0+u٬`l:44<bo&i&F+!"92K]q-\k
z<q9]JY-"1ӏ'OxϮ4U"l)]Hbv`3 y^/tMJܕ=DhW*ONEFHFM<4XE;w$fǡՕQ#egԐ53dLk)Cm+3-3pq!C$Ι4ۚ7 ^I`l*vW2](TQtl4<FVX9,GcΫONK%mNt6|8Af!ٲ6fWOL+Ar=zXVV\=YM8iRFc^kXܾ{TL?fͫ#6]
^(</=߼L\/o=L9OkSlשWr/Tڦ,Aan{2hUB"ۦ9	@1W NEU>Rh	PPCm
պPZƶ4x}a74-L8YFsprprprpKf
ItM%m_,t.$|90"&:zދ-dA܋0	V_{\( _"V|Fă
އu
.|qtZl'ywT."jlٮlol|}"gV߉
sR	&tuaR"aWYIt;u;0_ऋNfy祫**|K
nܴhce<n^\TPgl-DQȋ 
ZM<ݿu^_fS#lK7!JFci1LM-F cTGldnR#~c|h-),-<ѳ/TlVXl(E6Wn*,5|Xmn^9Yt*hWnt,:d[igo8"~8r
Uo.<.bz$8g>fVv
4O\cj/"F<@,ɲEV2r׉'ygɚLE25_S/ᵼθb''M(J7Q8]XNI?5͙4?G@+?r<\6^}[$X˗quȚ|o.WIƷmpnAoOpTv
6tLm8>uh/MKwQ`\.58jf
. 7;s)cF
%arkՆ`ҴPKfb
  e  PK  ]W            /   ch/qos/logback/core/status/StatusListener.classON0}nC
~	5ᑡ#)R:9Ωu	~_Qs
S={w-z^7emW/R[GZ/](Ԑː7jdA`j7yIWt/Y9y
|C$HlE4ؾTY3sVXr&ֿd\ge*0Xiz0Q&L;r&k	#bvOv]氫F?PKW{p     PK  ]W            5   ch/qos/logback/core/status/StatusListenerAsList.classSn@=!riib"U\,x
J[N%
$PH| ]G
H̓wgΜ=3;O {]TPuPPG>R2#ƾNt'T`aM,C.TX`C+i.t2;y!i.v3*Qفn~
=-2:V=\uE=IB^G=IǜDŌt4Pf3VbmZ\yyX%܊]_wH ,OT18F?%?
s4smbblU@XfxVͳuFP7'h~F{7x&-ܞq=Hu}
^l-˳^xfV.Fa}n?R5,sFN}FSy]kPK    PK  ]W            .   ch/qos/logback/core/status/StatusManager.classQ=O0<嫤;!뚐bpJ5~ ?
J/wz{` HG]RS!FM[DLu\,/Etdð&f3(U(jfIEM"aNm[.aeE^QQo
+J5/F+j
TL_3FK
R	㌩:!m]~~٤LFY/YeF=҃ ]{vЧzp;u~mPK!
X  X  PK  ]W            +   ch/qos/logback/core/status/StatusUtil.classY	xT=7%H
a7P	AEp&dd2g&
j[Vm.-(nH]akkjvvբ{d2@/o޻ߗ'?	XU@	\&<*</|A.w-^sI+xD<W~701κXcM8.HZut8ݓk?јBIK!|@p<a%GFb񴵞҃+TM4`L
U=Hȹ!ѽaZ{9J[q+)
A
CY&Co+Sы,mF
s
`\4gp/t4eNPe`)P3j$rQ^΋zG*L>FmT0ie.]ݚ[hsp<
cƠ^(L:맯00oa_%+LߖNFE$Z`>48Y$Sr3]N3LDTh?D2s`N)Kʼeą51K[ukEtʇ%
#Noi>gmKMaBiIƙH¸ơ"M_-gVX4-	'SԚdUMW8CptLs&͓6HTQC+ՙ1T_S<ak$}l]`ńM	kʹ(p{t"j<q9ؤa[NS8*ƘԵE/ϠZ"bR,:i8I)0O.񅔧96tm=V<bb"zTQ%%{&.gFeb՝&:SĈSb1"ĥS#2*a5hKg"9p4p/Ii6o
wY\I9Y()"1C*=X61ʍ&ndFE-9yr7ab`'eylaNŲ])E0VFcJ&FWv$ʈJ+
ܛqy'DcV2-p
z2fMψI>T&o2n+޾X
\/[b&Azr$S2#ɪ)i,ZGQmh*PmT#l	{[.;)S9ƙu&'qK'2aW;i`jH3wʛqk\fgS9	VQvΨs`2+TǙʴF$3M/pj$u`>9T`daP4X
9ku-nOaL%L2|=ӹ[v[홟^D--Wbui%"&
U1{p	VT-L*XQ0 >$:DJj]C)fq$ғ(BWx3.(v#)M0iIDP[[gOVl0 hw1 cX\=qj߈YQ!=WK  ":G$
Au1ږ^FWf*"xms8^*RT6j1nz8GE[Vܕd[]Q̶DO2b-Sey(ϐ#w{?w
U?!~|Dq(fA65 &Jc<,1QPx2<,p9OOrl~V2RfM?*nUV5CaYH(, ǐ,;LAC`(Ϲ[y+/j1]{Qj`^6p7E('¤U;0r0]TAn(<#f{*<8WoY+JwYUxzL*2oFtS1/e:
~{>ޗ_K+d[]=G1Jk :.Y:zn2nWhՓiyfYi.Q|}r,.Qڅjw>kcY/[N2wH4)E[:lw['.,"z4?f]882;a4Q	.i[,<~'.j!mI}X~+w/ܮYxa#=(1Ohޝ7!$ҏU85]k'7<Vxq.ۍ>,7sc<?"8;.#̨[SCTj
^ضdǟ.3oed$\B>!
1b1ٲ+v
b_6[߷un2[Gj!ŽtQa8~#o|+|9w;|t_ف@z6;+guS$f"Ųfո ͸@^Lo^;ی:+{|dI5YKϳnr]}!V
3>pE]ݟ`.^LaWmپjg/_S$/+%>-o;
t0_Djz%Z5Yg6#Tx̢_ô6RP#`_\Gd{Ha[3ťr-jH AiI76ۿoGŷ) ]5#HRU7GWwûѣz)גp#3&6͛qnӭL!z,ze&xŝ1V?u[]sŧ}7'(ĭZvwc	~BίSmr;uE]Oa˼t)f9%[g&hxtؤm	0Xcyq|%HQ2Bժ֭ꖑei#C+{f&kY w#O޳H|WWo5HʄdZ&
:ٞށz
d[9YnC
`L=N<D{?xuUl'b+=<yB6:w8'6B,_^e>&M( 7v%
H VK@ \ɲ'H$>y G9<0		&7R,6ι[U9~wzb?n/}۩j5#3󶍮ށWl!'RP_Ʊ>yd&n-7Cn3z6DԪMd>y!Laqq("ȴ~Dh(cKibp_KHjuN	~b|_ՙ!r~޸YGljK45;VM|ҦV2^^sM:B8H:&&:6)}VU-4 yRPKTN
  ~  PK  ]W            >   ch/qos/logback/core/status/ViewStatusMessagesServletBase.classY	xTu4bᱍlxX,0,	ak,,4dBܦifi!qIӴM6MIڦM%i.qtqf`/r9Ϲ>G/~vyC"`
sCav͸cG3On>?^`Ns:v[5"A
̃!ؑHŏx&76b&9ۊ;P:6{,1,t,AU"WRt)sX$X4f"35ౚR:Ri|.XMoBq%n<37aIK
܌en)XXn[.ZYwp"ώ%ʲf<cfǸΎ5R0pn嶄cv7׬s}PUPҭe~8(n"f`5ˬK|&L{@!M(NeI55XD:nĘqw7mqlyEje]?fb
a~$HvTh=v3tOrרB`ih[n*70z*Қ
#o}{keywhUں;Z#6 iN9uuaArJ߭AUZ$2aMڢhA؇{.mf,Ms`0}TvmtL;ko+;Vp@pKZe%f&Б^c?Ti!ƍ9d%\xALf21|M#4`kd Wo$-;$*S8DWNVOY&#Xٖ+dl΍<ެ*!5JNs
KF3'z8{c(6wwDu餝pzQm8fhDt)ᘕKё\&M291s۶NF7Zomܫj#nܴن5ub]#9x'G\&nmmmTbHZh먕`1jRo27LFѪ羹n_Tmu馻|mS
IU8(4X1W6yD#,iˮ9'o<&8Gƨ3p#Ѣ'm ~UGTθtwv<2бu?wpV.C03;/} qbWCm[SS!KwӹkںcGSX[F1Ǝ>a^KIU2_0]L*<Iht^?xC>ӬQt5򈗊"Œ3q4O >j>FOf:QǾ~Jx':>=,2^R@Ԋ9A g+~oFTpMpy]ԫsp1* }Dt1^2PtnvS-**2G>;m[DiyGlis84=yQ>j4]!|`wv%f8[4B%XG̘tߟ_Q~TU_ßg_Qzxn%9Ttu'F4W^x8,T7Gs&}4k}(Xd옛R]`]jFZZU,gRAJCxY0Bw*֗?0ONhe,tt7QDdgVz`k
.L+'DaT?Joo9sEJlLSK%$旪5Kt0%hHHҹ^<i:sr#u]>
YYl45Mz$ȐŊ?a臏6&Y⣛sTlO	-K*͆,L:L[0fEѬ7$+u% sV;c[b+\fK-Ay3Ib²JQ-JV*]JwuAݐY_ԑVLÃ6:R/
^]`!VzzcMaƠl2dq{A-ۉs(K'ZN[㿾ZzYl%C4qa	zzX8>4yETWe!ib0KݐTWAu3aJ4mf#]s_W@2++!3St!ZͧrIlw:kG,{Ѓ:ҝKPIi|;n*M#o%7DV\l`0GPጫ'a/WT|bu#1G0t>_ҴOLW`g- YB*L+]]1DȥWmv-(E}1_:tI9. s
WeBcJrL揩l"'
OXieUߠDݹ@NHךt숺hg̋X4Kkv$="W=,#Nr@P5WIg[ާN3RwBpjzv'z*1Ɍe]ohq6^+Q5YsE*vvVU7&ncT0V!҈!	N_>sE|%"9-stgT: r7ݺݎ*
/k˵)TW~
<x~kU[[7ۙ+h`&B}wz94î:U˾:MaO)ÑaN51X.jaO*_NQ?Gl6w#aDMmXC	܉Ј=h  =3](Go=oGoxw㓜u]4XR*
÷q/~|E-잋^Ge2WPI}"^C ];șT"zH>M
)-N<@Ȅ¢>rkNzc^^s^^ݜ/x|}b;g[5WXډB c	i%!$&{,7JSpqHC*AXUig+{")xBPK}#>.xӧƪv̏^RB[aYz.ji&KtPn*ߢٶXDJ&h~RFyH&[9Łxt9>|UƩ\RE~k~k~k~k~hU48	n(=uz==uzL_RJ໧>/xV[
O࿕ʛ?8ó/\y#]&.z3Q~+m|u6WxFeъ
@ILEXSyY檯N/zm_o,	T|]5?pEs38AyswwрwS0W0w*ӍĔj+%AVrIҳBT\ *bAS/L8]KFVߏ=9魋|ʧ"y'KWVT;U-բj'eΌްk\[?%bvG/a3~W6r.ib:M?Bf|Q:cL{I$iP%@O崆rm-|*Z2*e<_қV>po魪$/J
@=5u
Rln):^.rsXS!d4s60)%K˘h2rIT4jhHpl(;xM|f5[箦K2#Zt!b_^-̧	9!''PKqG    PK  ]W            +   ch/qos/logback/core/status/WarnStatus.classKO@RDQW"#GML4D ڔҍmăe-
=?o/ !P6ƽ
Gn,x0fhH a&
)No1ԅ+cJpkS'\6,3U2p4]D#84-{H,ve:ySyKeµ.TC\CisOsL]t}Voj1'l~1ԧb`C[tS<:j22gji邢qjbwoS@{,Dy,9Cb<
DQ2q銻?\R`}#VJB;PK>j    PK  ]W            )   ch/qos/logback/core/subst/Node$Type.classSOP=oZK[P
	̸a+uKmG7$DFg(}ϩ(lzr;{_}(0;(QwזŞ4IjE7
YG],olI
"t\6*v'/I\e-G
+уC
c3L{w	z}sSᲂ~dC(=*MoüqF8Ix&QMc?l,
Q3t,.3CV9Gua/zHl/JYn^݋7z@ilӽ`GԜ^-C9t<~vΖ!KwNLԋycOVF͘ah	ܠuQ\R[-SA5c{T~6í}KҧQ*g؏A-nXGie<@rI	o1B}D)?PDLqV  n"#s<	zO8?ߠSӼ.%s*-$avP"T1tp[|
fhm!k|[#H=/`[!|z~,̴dZϤ*\1rId('~෍F^Jn2KSq{p_0}簰2PKTx    PK  ]W            $   ch/qos/logback/core/subst/Node.classV[W$I0Bp,t6b!;ni2Ì͵m!~{C`wŤ]+OZ}KΙA\/,8=w? 8BkhA@Ec(X=[8=s,{CU
S1Dױ\,gv(N,+)j?IAi]Nth5cr@gqkLJSGTQ1/
;c=)ߥc7гm^fGxOhы}}(sꕪmX
8 IOo^jRѰOOg`'o砎qH`ς1o:vV9\ϰ=W'lc^ n4VŬǑF8N(s:8,Fݭ.2 [`vp`JZ~FǏc笡Lo iIvryő-=8^Q
:pl,{sd.h)9McaPL8!е@KMhg8I)iUc"B-S<%AQi֚Q6I<אui-OOQLp)dic
gZKtmB[	괎6c0/5ݒUߒLˢ9bsKRVLi|^hW6Ш;U,5f1c8eÚ2Uohc{$ϥfNmǍZY<a#
~onaTfuP@ k]+'Tuӥ~iɪ%&<,
eL7%cq<׫qӛs*nW@vc"
9vHŇ{9i
)Q|ŕUo4|.+IVEgrI9%?l$caW,/:|M{|~xL5QL^>ff]I<#Үl_e>Wx`>j
fcl-XnZR7
D&{Z&wm7)
±SˣЎ0)IpA+VtRnf7NrLva:1>c_?lKJ**a.I`o;Dnfs_#b9Ɛ)7+a~hWpe9zaCHzQ劕]Un!*#Zkh?W?Ya?6N	no)8?&-Ud庍\&,Oߞ)ɳo997 <61#yoQ NquL%x|?ˬ\SW4	^836W!AMAw-n޿TxJCwqXÁB>zL@x!UU+Pyi?]5~	| I/'QnCL$
ONr@l)ݹy<V;3yg'z"Yޤ
o_G%ZEP,!t!2JnJh(N7)画ݾV]kN=`gOP-˙%[$)4'gI-I;)6'Vs
	_!AYbBbM!+$s"i*$Bzӣ,GPLcȻ)˔41äƈ)2"1ȿ/ȼDtx ,]L~qn476]E`i/M I,|ϭ 83"D])~wM剭u"g=m3.G^f-p炔HEj	;
S:$CeŦ%zeE/gBTGjSoFQ|q|/~/PKdӑ  Z  PK  ]W            9   ch/qos/logback/core/subst/NodeToStringTransformer$1.classR]oA=[pk)V,tƈ
MM
>
۝:|VcGlHŦnvsgs~	Aֆ`9j0IEr<[/Jxz6ԉו#?	9fB3
.Oȣ`Ǘe/Qa<+7R
1캽aL:
&.s)Wv`	%o[MvMon`|1F-)?^1f ѨT&jm5?h/;?NGé,8LkR`XXtgC|ˀGB^BPOؓ3ЀsפA!ZqIMgL?:9qq,~ĵ	`M%+U̔Yq).~lůX>zU)DP
VqTC:Mbȥ<"uM7:FvzVj$淪˴ˠ/*#}oPKO3  T  PK  ]W            7   ch/qos/logback/core/subst/NodeToStringTransformer.classX	xTo2,yI @`(JdBDP0@MMB0cH30.Vk7UUX.}߫7Z7!	,a޻s߽{޼g c<B
9A߬WHwu) 	;pGC4MDU8ڽNVq*\0Z]F{͌"q=Xo44|oTUcbḧ}ш"F%BU+V4YlO.(+;{K;$I,PlF{HJ6ҵB'˓s˚cdM֔
<E8Sm!0|4'JXb,TL^.0a$Xr
3q+e#R4C᪦P¤rrJR_`\PR_fi[=N+0q(d(%uΖr@ᠾ6r<l.@@^01
-ͧ&	T4
ѤL+CHWZXNjCNJ۶`O+
R@-T
(UJ
ZF Khаg\1T;g#JzhЂ'b(g4aUeTާm=z+l4L#./xqrtKp:eatD+LvKp)Glt%uԆէyTh2ɰZ2oˡSU,V)>%15tQFf<4[`2E#x<o6	[lҴpõF#b1=XiI4ppTbAhDC1p4ڛ]d
3]MI5$,;
u	g-N^^OMc+^u:BfOt12#p
CRŌ-p-sz
7HM>-0S܄Eí 6*ˌpLKm}	ؘ$0tM]ÇlvuJ'>*pHyI{ׅRpeq65Zk=sں}>if;#et14"pSSћ`in0MMF$H<i.|F>&z$$n7F$ht&htlQ"-j/	EbId4IY23w6Nr̮K="jc]c/ʅ2z
.[RYąRg4ƳcSRK&aCHxNxRCzT[-;J[W6նMQdmk`i5RX$o,9Q牑bMG:
z-ɍx
`O:̞9U#Tnv̤>)?]HQԖ9x9'e	'&Hz-lN57 龖sFq&TcIaN"WxWi2gVPR3yxOxpf+F}U9䰳Y9?0HK-ei[nuGt385£"Ic>Fy$<5KeVblƁz:de$qA<2UNS*qi:HVS%꼠j;BjQlW$O[4KC2SNPfI]<,Zlb)Ө.5I]=l=ѮdCXضve˒Ɩb,YT"
s#rDS8م	.tM(`{j̖Aj齙^h\Di%GhjNQ_-^x`3Z$c=ф$Cu
,b(`~,Nb8M^Kt-`1u\b^oau>w WN?}1v2;p6[2|2g}~|_Hj$5gԝ4|!eUQ{*,ZJkp::$ډ2 Wge^G?޳;@=`,jߤ+FߢFVrPgsO.CH|W@{d\#]3e S;޳*Q<NTRVh4"N"7CH~PDb)~F9p~*
"W!Y'wH1ٝx|\~;fۋ1	
V%sF%
o%)9
#h؋^>,ǅv*O3P22y~؎<9UՎQ$i ,k;j4+Є֌6Ԍ_DjV%eSƯԑu>9*/
NwٿUOG|q~&ފɕe|1^T;*!,9>o$ks}~lvzG0$ѫ]>K:h?VK@?Z5@tN{}V3:ILKX.C֒:7]Aktp/&_|{̂;uTnd*f>wPR@8MoPT񫢆?rAdWWƋ6OKTF9a&5Kw7q>d~oF#r'f;1W]9<QnU1+?nN=zq nL6{(KH5\M]Z⸎pgݾ5f[qn۱Xdٺ{딳x3ypX91OV&-M[#E̪~'yWt0`f|[b;'cvYDm[JOlCc!< Ee{xzcx?!TaOJ\ƹU8]$;3]L Ծݲ訤.z mfok|
;n^'s|+ExSc/o@gwN.r	V'd:foɌN
o0s]`IS4t9M.~.le=#Z_4[صثٻҦX!FcP&gsN?m4|_+_4$yݎ&#CSÄeq1
ڒ#'o~uX}>dCtx15NҔ;x<_-,&V= Wҭ!mVcр7tAbz
QeWEx[YBv[ܜL1." <'</
PKQU#  '  PK  ]W            (   ch/qos/logback/core/subst/Parser$1.classRn@=ԥi(4-bB¥H(q>Tg5u~g@B~ 53x;?}?v)
dLdcV*;!mOFVӡmWr	1B14=<>O
ȣ`hb&^Hz`[w~M
ޚ[JKu
(1Nm7(%ry7:.3cn<=9z/Q+dVLvwZmWWL\tvn]JOYo!Ӕ#jiCћÀ#=xFbj&5ŁFhJ[H㮈'rdP=BPX"j\)gX;cԏpJ{pv*zF$o4iN~Xl}De	fO*\?{KX%Tp5HNsImoYtVbP#wtI:,=l<_)PKe&	  V  PK  ]W            &   ch/qos/logback/core/subst/Parser.classX[~geeP.j낫.K"^uQⰌ02nvgAMڴ-IFmRӠUfҟɓ=geAǝ9ww{xÅ"/*<(VP~ZM-߸o1MAQ]}w	|(¯@bTLjD*7fsYqtHZbsTE+5'F&l2FbX`Tjdcgֈtꈟj")?ޱTYlYb%fUK-?jX`ڈN>+f\-թGHAEZ#V4ѓV@D})
XZXǈgCp`a%ڴt01|Б
J4re6i/6,1gɭfA`&/Ul'2}FR3e[TldBm"*v"*ب)OP~I3ڠޮ
jL;DTkUZT*Ng,1&0HLS/p?CEfQ>dҒVVAY<F#bBb{&>	8,8q'Cfxv]H\Y@-4z4V?6%Q9>phpU`Fv~J˙$`)w*LQPggMYxCJMif}ӚH	-;ӖJS9&@V4+`Z
hf`Wu=S\N$R֧d_`u~d0,@<`t4%>✊o2DĻ1!jzfF23lHy*yX|[w𢂧DeZ	:hX$[5myLSf1H"?WBОs&ki<.T.,
.L@|A2oh<qN?V_fEZwtEz"-d|Ϥc<tkfuQi'5^SN-f=*ܸsgzLkꂠfvkC̝E5`0W3[0Y+Q4Ց'_IĦӢO"G?O5lmҔt'|3`$z垌qKYT4<0t%}C YziLwrbRƵ(զPyTZ-ݦ[GL3 E@H9+0ezJbُEYlFrJ+EKXK
k}Vb`<̥)mڑ4GUD5$̎*5lV'Fn׋>^|̢¨aq3D眹`\O9[/ɫ.e\3onPmxC(!Ug%|6%X9Xކ_WX^w~En΄̢-=uB_e44F؈*^IZ-,r_
WȑC%ю|/em
7&<an|6xQcvPNi>`s{ƇB唾ʑK4PEW(sss'",G'+ NnCZicoA
^~Km¶aեV-|M÷~ϬXt?Ez!Vw[C1]r2=mBK{hʥj ͅ..8T]*aaaw2A2k#y<.pt	:^܇!ޣ^B?^"A	¿?>	>&|E1㚛;p#~-ȴ;
xPݸd輇s$RCTG8:DtAj|u,n:/y)U&ʉlz+l<PPL2'4L`,b=:޹&|(H:,ħ/f+FeIT_ܐ/ J/q<^XQ$.|V6- \#L3vr>2+;z&
5BvOxg~:{N*Ⱦ¤:ޫ-Nq!K1-&ܒ)-A\_#Kna;,tZCT]t=͖2/ϖyUCn[MT!VJCoQI6yw~Ӗux}?p`{{VUV9mƋ>:tүsI$^y"Sϭ+QVKƗ`EN'Mx'>~(6cvo96v0;'$ԧx(8hd
ܵ8=Z~i^mG5`-w<?QPK:=R	    PK  ]W            *   ch/qos/logback/core/subst/Token$Type.classTOP=V̡aJEA7aȒ
fK?TVoI2!
=ݖwگ>~ +Rƭ]5=t=K7u_-{*}mVAA
|11i.䘂8O\ęv
g͢VyW}IA'b/+H+ܦ&+
T9mu$}ueڮca:jζQݵL.aH0nPyOambM^z}^^8_Q)d.֜НYȔc4h:cHrⶂ)|'D3uL:^PIewS9zcjy%j3v2'54ոYv}]eH<wƷ<ޙS#mҙ2]El]l%(n3oMS܌׭}	982(Ǳ<qbGy4 =sl xJ&9&ͦ@iFGnzN"[~&3l`\~3fq_.︔%Bl0D(MLcN)F@/k0bgJ^	7!HmCHM$(}>0
>Or,t#D@A&"YQt`RAuLM^9X#Kx,0'Br;PKc  f  PK  ]W            %   ch/qos/logback/core/subst/Token.classU[SF$lZvpK 5FRD6*6X23ӟNߛ[Ht::mϮNw˷gs?'

ɕ^tfٙah7CF(Re'
kwE'jvykW7pQ}pR<|HA+ҾvhXCz*TvnWЁ;iCmXPi%\PЃ^n?jwF՗Я` 	*iv)mmp/*]@3TzYvzQQ1tiz2sPv4ӱ_
y
u\ćfNR{j>@>N>\C_0)ꪂ9@zmUT<䔂i2|vrk
fOjƒpWNm53K8
%6shU˦\+蕼V0ttZeOwJezYf	SjCj_SEu0#:oISE@ΪVb	s˲n;YC&Hyrlgudm2>cPW񧙌B,1u(ǾnmB!"$蜋g\_ԊU9daI3V-k_Wr|
ｾ7i0reG2*+bT"?+aa\%7u1DD\hF}BNn=#v-v6 6W{
?K<AGRpviu DRtݐ4Lx"izidcGhO-Npr6)"|#]ߡ1	'l c:B	4l@>$tNT$^}>e>fHm҆ I!7$d3]1"ȷc>a*<[rs5!SgCM I
ڭ"Gnoe>CPcZk/=hQWsBE
~B?dUD f5נz%taҀD62։.9 oqƇ4J)Wq9WJ78	Y
	۩l4t#4wI?%$FܥS.tOźm#=PKzo  	  PK  ]W            8   ch/qos/logback/core/subst/Tokenizer$TokenizerState.classTOP=oc" JA-#L0t,!~ ]Pv|DFg(} 趤s=|`y	!)cG}֪g~j3\i	0DDch/˅ҖV^,Kq	.FB39oS|׋FU9oW;t" Pz1̼iŁnHH*MaНɖv]uUwM# n/YE(8}rus-y\^u]Jhg9\@*;X<COze1[#*Hġ
`ODf3ٖfB%"K6d9j}jzejSf5K\C+gq~MvCۯu8qEЬuJÙlNWް\mVSYsa.[haSUV\?az0(E1=qP;6]Knd| a
d?|R4DruGkic!&Y9Ns
+tUXx	BNË{L&1p%	|B)I+𒩤vsK*"bK`fIی6\_O0,~,Bc;BXCH"@>/4e4)ٛƌa8?B'PKP  w  PK  ]W            )   ch/qos/logback/core/subst/Tokenizer.classVs~V%F`c!2J#q6d9saqRSi&l?e3m3Iۙ`3
2mgβlڙ֞]>7}O 'Exi؆uM=Qҭu`6-F"GPvhG7ʵD<7rH35;+/y˨ۆ@[f$Lgsù̏GIЎ~4씊<+vhnlZޭ	eK`Wf]5d=>
q`
grV29{^qp4Df܏@:^RbZof̚A_Q
"T$a q^Y׫/:ҟ
OG4$~rhZz)H=pЪy*Ieh*#xd^9pĩ
L
OjxN
YcV^=I
XtQG.~ HK-:޲ka
/"EJŰ{ s~Flf;Ϧ
Odr؅(,q?.jŘ@ZFG`w4>=QhGV P3z2TNh|9Y'zUÔ4*LMgrRxEU)t뭸aZ5̯$<kv:#_rJ-``֏9
0ݬ0,nlF:w-h(@]^IF?soeY*7yiݗ*iŎi3F5ϔYY׫>{ެ	JML*	V[V=9ڸ;Si еVY*:ӛX
L]0*LXtve9KUb@u5*piC
Nc̖ՂqΔ7B<ì5jECI,*鵚Qk}t'X=(!$@B͂~;ռ|J*g<%=݇	m1vXƓK?G!K>m6%]xSݹ_i#8zo+wxǕ<̖G7z1>@q?]rחm_)h~ 9ƽlbxj"X0t[8&ZDo<tjg&Wx(:Z2WFY] 8A<;
k6p8ENx'8|"ٌÜ-rG\^[6~J^Chû\׸\كEu_(El|K'IYtMvd;v-L!A .e9%KnarngW,k2v:$&go$R2E\Ux~
>oqv]'k0Mcq\dڣFwɴ#{2ɴ=vl6h {}\v]D
ǛT3ЁL2Ҥrrrrdʑ&}t=Gv?v	wn<գk_S9>WE5__T2J2Q'!֗apJeh~JiU;Ks> uwHɇ?b|V;;5Qc7ާ+eg(|	߽GHOGa9ڸK9"7J^:@lx!Z]>Wj1w@+Mz8jgg`J3{PKj  n  PK  ]W            4   ch/qos/logback/core/testUtil/CoreTestConstants.class]sP4iB&֪~BuAJR"Bi{Ŝ &,r\HL^yݗw e#;Cs~83Tp7N	"Ha',H
a#P/LY0u^%owzlR4$k-@SL"/"BcEqd;42EZtAg/4N͎n2+Q *mr¢-`ffN`y*Hq2)bZ$fRmXRVc-QQ-CL	voE5[:i)[#K{O1ZU47@q~dwd흢<&P^=ֶ[Du[PET9EA:>`g8#s0qz*RŦ^j㳾Qtb2BǑ㶼fn K`PA"A
Z9n"xzo ߄B;ț9]{90Ǐso$<>17(|$Oq-e:ZG1T~PKIE    PK  ]W            7   ch/qos/logback/core/testUtil/DelayingListAppender.classn@ƿM8I-m?PPS8HU	h+R@JɁ㬒-m
K+Qqx(Ĭ&Z!`o Q	$uhRH3]Sгr܏D܎Ӷ'!<bHo
_-YifAVG{)<{{Α;yr3M(`aBGQ?Mgr5Pd:p>;{Dq2hJS<86|qy(E
,:zwe$ˠ
u7Gz:^ӉQe('gԧWmTq=fTAC-'B/4f$9{N8m~DvڤγKk0vguA?rPi.x]-yLM&YLIh}v8(X`vJ .{ViEf&)
pg%Nu(>b<IYAԐ1uLO4'LkOLGvONp_PJTJH!%6(4a$Y(NFJ
*VFgktvl:J)<ۿN0^7PKSڐe    PK  ]W            /   ch/qos/logback/core/testUtil/DummyEncoder.classU[sF=B!	PH0Pz	@siB!-Tv[D%g&?}o Zcote[akߞs>kG0A	C2bHUjWjYf+fCڪe?5=;(s[m0HҰTL񥲯d
̊lsQp5_uy^Tдfh`2U12$\R]1ْЌj%dfqL0.k0=ښ4HLYc8ma()N|3L&cz$Lɸ+MMw"RufgIqAJF CUMk2èb+M]g
ɉnʸۤUW]s|)+J/e;OiXbcťRamn}ncuCߕq9
m~2vPq{_Ɯij#AŞ}O*Dk>)W6	R
[%-(T$y:yQ3ԕ^Yml(e]kV}Sih|.FJ2ž(;-Lor35ڹO&XPh=ZW_}հ;XS%HIl% 茔lrfY72#+!h؎Sb6B\ڄV\컅o]TӅ{&!RP2I$t+e7jm+-hQؓ`7ښ4cUE&XT*8`՟,a<Tm]۬\	G`PyEKRH%Py],Ւ@aܗT	Tc6ȹƸ@GnaS;!ƴH_Kza٣{?^ r'=e PqceFU	53ϧ3xxQg"`V
;msVZ|ON~w9L
.h}s7|	"EqM܉{ĝ݉{(5'|*#i
~'#c[6i	bB1gquO1ɩ|a	I1OioLHxd:@m3]̵C\x.QL;|]s/-s9J}]/ĥŧq'!ﳿ!y/4Ϳ)puSI]){szGJSڪR>Uaq^gɓCLwgQ܃{!z#A~0{ͫj%7ԫ5uG#-@.HvkS^u[:HwaPv}ާrne:S9BbtuM9;dAuy(hkt

wPu/_C
8?PK,_  ;
  PK  ]W            2   ch/qos/logback/core/testUtil/EnvUtilForTests.classTSW=7ٰ
F@Ԃ?쨭VV 	*7a%+aHOLP3ЇKAwo|_^"L ~b[ۛrGN)hp=7&Mu6`ė[ا4eWY7UɩgSٺzohh%2,88DZzJeXh_u	ЭXiGj[yf
cCc@	ሎ&GQylWRM;I~&KrTz2rS3S]Y䤉S8-Bwܰ[aP@^^tכW	i4p4o.bY[~@K7{dꅁK1+7oHc\q'*Ьj{Nhe8Uj쀬rNmK~tkdM=3-ioW<~ZrBtdĐDlg!aHK+6{<82s2R@I. -)l`~m iLL!O/V_/e]yf[YEܡlVu*sŢS-Ŋ#ZVmW]]²KzpQrq$0#!!Z
5
Hy檋].A
ǳ{/
P]eiSC;Kƕz3tܒO&@R{yZrF\yw8I#|C#0ĕ!>|L9YpuJؠ6Gs3 8D-ed#ZӞwFc>gtTU(+cvR`˟YROᴪJWɈ&fWoꯑl83<T{3h~	)"lػҽdl7޽@ -g@"A^~mp,
|teŚJ1wFǫ&r@#l	su"p gt"Rr7p=b]=E/k-Z8Ӣ]ucX7xuqĀAjE4~Vk7>̓dLTYy<jfh!y]ǂ2:ʖ@utwhHXh2ђ
Le{f	5G[l))"V2_ܺcfKxvyՄJ({Zx;PKj  	  PK  ]W            /   ch/qos/logback/core/testUtil/FileTestUtil.classTRA=C 4

rJ@XxhbOfc;OJ|,˞(JTfOO3?׾ 86Z
i/
w}TݙK2
Cj4?o! ܒa[r_Uu{5Spc-}HED:a4B6,t]ݣ
:A7=Kl+(f`zL]F7eHU:{덤V&mVӾ/ܟ\[<QR6p01#5ypts]eiG1˼&h8O^Z_V~tf0l:WQ"JyY8ΐV$\`h-`*@<h,/p/ɖyJc7zI+=kC⑺>]:`D8KGSʫ&{V5BO\tAPJG:B/
]X*煂ϱ4ڸn#z%_?7ukbwxPE4RV֨jĹuo["Yܜ aQ$"%#;jPR%a10:AK;mlC5;{(8	 'p]8
)>zm_Eǽi'c~^}t0b{t_6oC$Mk/}8@0 B:+!cnjeg1Etmܦug#EV._۾^%܌q(s PK'<\    PK  ]W            3   ch/qos/logback/core/testUtil/FileToBufferUtil.classWisW=,716H,lM	,	!11dҖrc[i ;3YɾNfɞsYIU!ej>OUf%JB={_?oVBhB
(qYų#i8hQR
U@u
+~JFw&䚫)6L"6z,Ё
:UlAWUPR EY{͆UD]` *ĳVfNK-S<Ydq~^@gfYN>kqӱFL"$ 
 v
2z{Tum=Sjq@*BZ(U$
dR^}WlQ?7/p_)/}idUqZfJs|*8je
 )RqjoYsdN+KkjSiE:,3!&?8 I:G:392x 'xcU!}V~9咮
Nl<FKո_@[b+Zģƻ꒝oCB҄Ih
yFn\!&ߐZ]r\bl6'%´xT`NOy[/@؟7e=k5=-+^Ii[)՚>4i4GkFzZ.O)iz+2XP`EZdmfÇ·*<):gW8Q+͓],tԎgQJii6{i2,,xgllծ:V9|QGm0ՠe`klG8orwB˗Ʈl}ʊ@˔15hs۟
Ʀuzu/O%zCtWG98HznM2
[.Tu@5#O:Uy^$שq<,Mv'o[䲤=kKsPng,'tgJXIzGVl%XF-=,5yZKd/)-X27]2tV/OZb1We_bTfG:n=x>8*Tۛc?M6Bț|s7~	9(WpW9{ZKP:7]}tvZAP=2JqF؃.ތzQ @2yKXv)h~SA%g3.-<x/t#$/ed'ޯ{n%8:ѿɁq85Vq\9IolȥG9y90pE;/facE	 u?ʹ%:DLͽ/__!W]>D׸[+G2TQ
n'Y?T/]P^3J^! M%c_	)Yjf{Q&\\oe輻y;7˽s.VbA7aloXK|ǳ
M?C̏آp_-߲hV;bhn"')Xe>g8="2
T1Jw	$9V2*9*ja6N;\~,._oo3KtP|5죘YɒFKӵ;ݧ|0KJ?\^I?V%%\]r\+G!PKj    PK  ]W            5   ch/qos/logback/core/testUtil/MockInitialContext.classRNA=]t)JUP@(%<H4|(6qNڡ۝~&&QƳF)lf3{w OG99
bq;xketdbFV 
8{M4>Z/s,><8,a%7 2AhX5oR	W39=(S2V<\+:n,NVY
^Thk{@۱D	<tp)a6pH
ȼSi:V'^K%YPFMԟP6=CdO_*2;_*Kp6aY&20$T/t(& )8W%qIr
>E`.K6CB{%rkMڴ̉'_9Aɛ,h+^&}<VlY;PK'7  R  PK  ]W            <   ch/qos/logback/core/testUtil/MockInitialContextFactory.classT[OA-l,"U.b(m"ZH4)]&e`[S!_0Q3ۥPCM;3g|Ι9)uD3Ѕn2-Jܖkr!j3ɫW.Yi{>7%R8g&a9+ԡ!@
ϰ!ƦeK?!a3,:kdWMתR/m^su`-/\Y[6O hK'5+˫S
 [|mEkҒNۖ=!m`SC7 2h?ǥ52|vWlT|f$VfT6=N(o+%X%,ɂG\w-_uh}QcX2a<#JDzlY0`V@0'uUۗl>ۊ}y3z{$|ϭp83ZUT/䰖˭NIEٵd'9^myꤵ)r90l'|zѫ6JD,*2t{S/0.SנV&LYs`4 KBF 0OcB]йC?}@/͝#yl
 S6MIb3$f!N0X"
"4Π1zl j\iqS<J0@T^%e<T6ĮET9"cӧM>B^PK    PK  ]W            .   ch/qos/logback/core/testUtil/NPEAppender.classMO17(
~ܣ 	<$Q@qR,O&e7ٙ鴯o v"	D3!ΰtk5]isv/j/`'u!bmH2
]uuJzZ[GT^	b@jڍfm!z.(Y.=^.)r4]9`(Pa)ZB8UQ']j1LP0GI,Աx\}h${\g_j\^X
}GJs/o(6a&3 Y<#+> )@al&\,f~Sr䣘<a
I|B|@,kFD3ʓg,[bPh+_}PK'L    PK  ]W            -   ch/qos/logback/core/testUtil/RandomUtil.classQn@=qΣ-BhX%W !E
j;&(z`2>MAj% 	!L%ל{׿|	COyb^0d!!Cu{Z*>
'
y>ɔc<9ř!h0tnd	HDhhh3/'+HlÆEo:U.su&}YP|;Se<?Zڼ,z\!eX	3+
}4IbCDj,
um`%PN\=@Mt&^H[o.<]Bpy"EYB_yrvEA\mwqe![+5ҸݗOo^p~΂bƟQM[tPO
h9O\3ݙ߈J/ 7W.u7>tPK]    PK  ]W            5   ch/qos/logback/core/testUtil/StringListAppender.classTkOP~.-""1pHEn:pP!Fu[3
smG+$4Q]al,e=y}{?Xū0|HB`(ȟtS.를R8jUUcS1U!U4k`?Tfie9mIV30DC$KB7zVjZxj2JD27{I-NB~	F7CPV+0;$5rf[	^]aaPf,ŰԢݍ}		\Pn喀iU?#>bE4s++&di]tB,P)@}JŪ46v3ɍ$CZS<,	'U׵yUeeRSƀu-Nu̕WE*(UHPZЩ1hj6^h$FT>X06^PȼC"Hʬ5W2P5nkCӘtB:`mvtUx2Cv@o,s>%ۘ`h'9X
Z?.gZ/zh3=|0NzlAR"1zӥ1IHw^Q|\ESqU(riJl<'^`ڇ^>$4Yl&pR]"[CjG
lFxQҮW!QMmO+!$f0psdc;R |+o+#Cg/PKD;!j.  J  PK  ]W            2   ch/qos/logback/core/testUtil/TeeOutputStream.classR[oAF(KP
-Z+jղPY5&hB	-iX'ttˠ_ibD}G,[
1ang9go? <v0C-=ݑtGG1dP۵eX;k$4Æ<rp,,8<æWC/PyPhxBmq5dimLĐ<a(Oh{&e0}Sk]WPpaiЮ9Xu((>]q4&n1䴚$m;.!7Q-Crt>)σ.9'>Ԡfz4ZM|>b
ShNnQϥ.7
jѧy-@kw|NHŸr֫3̟7NPܡH4hUYGw)<&c5 3ͼ/NAU_aDk'rfcŸ\6%<\RhLT&.G#fl&uݣA?$m+NS~Xcqf~l~"k&ߋQ PKյ    PK  ]W            8   ch/qos/logback/core/testUtil/TrivialStatusListener.classooPƟKBtAU͌/XE}#/.Um!W3fsQ?xnAK鹧^Nc<"#$C^|>!#z"ePʕ\4c><~R~At:22<o:nͭcr=l?x%
4|{w(%#ȗ5ɾ#9pXKjAoȺ	fpK*n긅e4zx:3*-(~לPlwb96yln.qj5=Cl]m;m	];M	#3hѨth6WpYi،J+f)ym?pZxLR-y( 跂5L 41(PLP:C(`woΑ>f(gȝ;3,"N6hD4*0з
`Uz%S	yѬ U2rF1WfU%PR'ÓI#>eX!%:ɉ٭A$B9@ۘ`SK1s&dX^'&b3PKRN    PK  ]W            3   ch/qos/logback/core/testUtil/XTeeOutputStream.classN@ƿI8.i4۲GA\T)49f:T}(."qxE(8xgok ;XP@х㣄2]t&Tz8"҉FQ8;5D#ByW#nuPZ%jڭ~|T?o(֩<%ЉtG
O	,L(ng_S먱4
drb;:
~(Aǜ :jMX0a2GhwZw#8u$,}e|,iCek̗޶l"fćWɶw~4Yogx	'.h9<a[9 
gyvŜ]ڂ^0/<sp{ߪs*#/eިj ܋;\9)«LPK    PK  ]W            .   ch/qos/logback/core/util/AggregationType.classTkO`=ݭ,2"w)(/lNlRJbHOh2>kUn1d;9s\?~~1	H{wWnS3oJ^̺[Sc! "#xR]_
W/e8h+hk/
BqmiTZXE)Z,.קex߹ljX]MF	.0:#qՂRLL	t[D
dΨ[غSW*[ᓶ"n
OPrn7[3E[͞8|rٓ1b9˱̪̅h KhbdLBaI:s}P?AhU-,7MtUJTUݳaqmyH.{MuoZqͪ;(5ά
vܙ
.d&48dsS~zcsba2
OϸyO<`<CA<D	i"%ӇNWեLJan6E&'1'O)qOyl2._0R>҈
B-DXEZIŚhjbIF;ѫ䓺>#d$8qɄIwоZ'@/mwC(cPK1  u  PK  ]W            +   ch/qos/logback/core/util/COWArrayList.classWsW>kV$]nڄ$v[(*G1u\8v!;m`-uVZg%	@-%iM[(C; 3 //0|z5|s?wF8NzVzKKPѨs,b8mh@NVL+WKJNE}mz)IqJ2tJL(nA=tFs'rβq9<6uxq	Q^hpeCq>꘽6U:3cz[}iZ3KK.a`CCP/i,%4DP!6}*͇
u?(CafyZY#s<A(&PfіL3;9+hvc2H:PhkfO^K&(gݹ I9w>scKNAwX[ǙL!}ِa,nWA D
T'Q.W8el/E9>Z>X-/3<?~@$w:F>)< 9,=jYmD-vI>-,sa:юL~sʄK@-~H1TTGqpO[hWH,q\)&q đ952W)K/W|/PU#a!^h	ߘE^uJ^[3`Xλi}C&ߴ˨ T+Uz{`xz|hd}
V8,!f0>BQY2&yÙ-l5;&ʲ5R
e(kuݭA݈g&̭ޅRBW-r x]j6f)#p>-	P)wh2y.rFgFt/W-l6WEC+vɊ:0e?2n_R8t,<<)(GUŷ	"QD"3yvu3l?*k)E.]8Tk{HW殈Ƀ8:
~#:h'6KԎn!8!佟Ŭކ5R;WI˾OUJ\!٫tڒBƤ=[Pi (=&$Kj;ƞzĞDgZ).mэ<띲\Ze#qgqoQS`%qF!|$<I}CI'<psԾ\`ODוiu<EFDq<nmiX!:,p[MV䦥`&ǂkɁ6)۲	~k+
hzNS7>Kۚ,mĿ,{O\Z6ޭ!mkv5"hȣG<Gϡ<<ik͓0y%O\ow%yY=pNmQqb2+2k0X
9biO4}K'<^DheS٭lKO<	6.w+	(=z	4=
4֤W\4&i<ρ4
/lMň<O"<
Z<sR5e&/ D_Dq#ӫHG3@iF͌q^G
#:!&EN+F1z}.ױ6(\?bK\ϱ
i<L̼{E߁=?p`ҁE9yH|^!{_7OyΥԦH5T7ЇYe\XOz9o1whڛHo7и޸n?Dz.ɲץ܌?a+jɭ3K+fz+Q[4
8F%,⺔mxov'" ?Bk6?ȧrml "h3>NFT&۷IJuЍ$k
]ϼ-9]ϷPK@\  P  PK  ]W            >   ch/qos/logback/core/util/CachingDateFormatter$CacheTuple.classQMO@}Hۃ@G/Bq)X--1Ggzl23vۙ7 زBBx/{ۻ&dOU!]u!ov0p
0vpރ녑t'ZnSxC΅a4Zh׀3PE;j$c-Fc]ʄgRm*oQ0	azu	fgRKf2ɨ#zazHC[K$2
2uBO-	UȨc%K5`'}P6{lȞʋc[Ȱ/_@)zcsR:϶<֑#;\eXD
%i泜`5k`osNM>PKoƁw  s  PK  ]W            3   ch/qos/logback/core/util/CachingDateFormatter.classVmSW=,E_ZR	RkEXRA@k(Vln`u7_:ԙN?3֞yEaryyy^<:4]	
_6]}ͲH:
[frV@ vpZ`$pzd孛0k:EigFWTnGTw"m2B酡OoZ/P31c!{@CY&VzH6P;9/wpLǻzu*-8㔁1,p%T_sK
z&ۤUDOARn(QME+^)[sPGQн 21`,{9CW[M\)U/	||,(0g]	酦E6g,H2Id%#61!iWAki>eT[:5h78UU:ˡU,	8qSǂE,	40#|{cq]'JVkyknQ6pk^'k.׌ۖdFwg_[69V%+3^>dImd*_UΔZ OƨCY~piM{13yO'e<\p<T)`ZS6؊8깶NYKFꗨng{phnR<
p.ExTR5ߦSש6I,G7t?fJ#}o}J`YG=$?.qoyc	^;G_݁;Wx/ EN3mE=U7XX"*AX6ONݩq鯣}S#UZw
MYyp{jG1\/q)#sM=m$6R8F#9JDL=gQ~hq01M21;џi5j%Q 0NK#lW@G_|sŚx@皥[
K)m(?6jDnMŔڡDbԑB.P{AF%T:!H&ƭ.>i$%*U
Y<$y
QEJ{!	0
qU8Q(ߣ?PKD  l
  PK  ]W            0   ch/qos/logback/core/util/CharSequenceState.classP]KA=ffA>cDBH>BoӠc. 	z;E/
8sϙ{3l/rCuƟh3)¥TrŐF%lT~O\<"O\2rD20A70
;.*28֦fIo7V7#1*}t>CBjXpĵ2"I\0U$(ƩZY:4DC,Dhdk
(7u
kP/Y,M-P'aQtFqW_v&pL	F0l~PKDP  	  PK  ]W            8   ch/qos/logback/core/util/CharSequenceToRegexMapper.classVۗE*΄
@DL&̀bL׌ۓI33
ig/x<?;::gsNW_wf|C A!aD֎jYC3ü2DtSw1bCAL<q7Cs.ˮkni>bü*wjf3Jw,THb6k#5V͖-gnds5.#
Njx1n3(Μ߱u=
XekUrIEe
+d兮*:2=(V2z31(,p17 \rmݬkqJ|.,-Z[#[קHUtDd2@W#;	g 
`N\EF\Ԃ^D>
+NDG8ث6!s\2B uL+)МwRS4ðJ; (U$ʤt"ve9rh#
N@NdXZFy2˚_wkOuO`-d&_Etjqf
*˰%䁤EWşqCv&tgXeGC*qūP%~uQ@YU9G(Rqh.j
wBÊuR͢6^fvŎ8dqϼ_>Tt)vl1PQ&	3/c
\5%,أ*	`QC9Bn.,&+6bJ`5cf⽹rk:Y?3wwM<L~L yG0̧?Qrϼ62\SNJv]<Ӛ''SSհ|.l^!M%˲\ǵ"wkVKzYP$Ր{d=ތ-U ;k.9GQk>z̊5m_`;1oMMA*rK,7MnW:Q>krU(WR<0Rt4O41z@+o=5s,s/z`Bb2b@NQOO5yn+
˷yC?wUgǛܺ'f*hȽr:&`~OVJ?BG&9US9D3ӸquSECpTOS[M2t6oιX3E30(Iq_@h%d3da
sIc͞f2nggr6u#>g.KaߢCAIG9ѿxf?2ƾ7JP#
:y{\46+3{x$HR/. 	HkBMME}Ls̟=\۰q	\%ȶձG櫣am㠏*5uAѢ__=ޞPʭezQhgJe)OCN	xQqi7*Jxm 5w}`_8N
-i}JByO3\5Sc0dW`p(9x@ddO!.ѲA7A{qxo~)<DDZ
4Dw)w7Z&IAe̡Yj2&t*8!tɌ=h^AQAZ^r|U]SaPK\  ^  PK  ]W            (   ch/qos/logback/core/util/CloseUtil.classMo@iq'm;-$
rUv*Es+?
1kƥ,ygvߙyfGo 60
EGBs>Mvmg_	!kGU&p/4~J_E-~BH@$(tDaQ*-Lё2]2]vL79I<?k
{ep'
[GDеyr*ɞ֭$^M<+]6{cB՝B}0f>XK&ĩ>%Ŝ¬L=.V%hpb6ޒ%~#S@;--?aJz9^, yTqhʴ*#k"j08ksE5Ve^%\f{yUR՜D##~1U9$6r
cxcY11+ֆ=a޳u<9ȹPK`    PK  ]W            .   ch/qos/logback/core/util/ContentTypeUtil.classR=oP=/qƱ$$%4Wp\#CK%D@EbvM򊱋/aE$V$~Sϱ_}5P,CQP;r;v{==EE3AC]G"AKS9<;)Aj:h0yx^9duDq$uE[92~%vM\{c{Q۩ñO9qF>ڐc
F81y^TĔ'	I3O_[ՓY֖3#AϜRbˍE^RO+#Kh6`(]EiOh@:VWΫŒ]
FqN}9M*|)M˞a@xb5TN2	Jl`/0p❥P{~)Qܪt
dQ^=Z\]S!*QD &aaRO3[MiF~fK2(j,WEQ=NQ>me
PKP    PK  ]W            *   ch/qos/logback/core/util/ContextUtil.classV[WWN(Q!V[
jc
^0f}]}sA]]m3	,/Cfg>񭂀hy-rUדe֓>2鸚:}GA
a_S3ds7L[N&J}CT ]sc>Gw3Zo=%9a@!?6mt5tG Uԉ8;єbGUq	h[eZH[li'	TpJivP4<gUs!3bW5_yݔ1}9v.+S<b*&$@oEw[
!m`RP-VUUzᲂ+*n[|Te5f0^峅\<^*]Fi|P}Ki۞a8B^Z.3|/H0n3QˮLU}M;S۲6l]VWglmCf,Vy8kiḾGqU̡ M&;p;EOw3|RK0s/=ewv`}v87LPX%mhUKmyrJm.٨tk-luv 9 ZODmjS~ܐY]&ɸ&QM@ƪV
ǰL.L#.
v~26JJu2I[Sj~As3ۋ~l	B5MJ>G3Y<¡/xqǗ:yCv|JN_?5ro\vYe<%Ԝiv9L;K+"|/q@+>-3`<mϯg?|,"2p6xx#^px/1lB<svp\;$9;PG\8ϰKARNȓs1	&qi>oS$%SO+|ݓ2Tc
ʞ%"
N/ULYe5K5">xu '^~K,eίn+
1*-*5 D/o'PSDOĈWk(:n;v٠ ,rIKd=Ҟnn!?6,6G
#^MoC	vM. FSgI}zga{CMZ9rCM͌Jmzgxe,Vo_PKT%    PK  ]W            5   ch/qos/logback/core/util/DatePatternToRegexUtil.classUNW]6!1@)$%KS0MKjC(:O3JܟSJDJUЏ?UF\ gZ{C
|*(XѾE+4LxCMB|TKm+Y'16*Fx
f@UЪ.υ8mUQ,bS瑐T\Ujqj3mZPЩs
+H*nGv#f-	49U27:>Oe'@ɀS쇷 "z ⛌9%fjO AwUYvP
Zyx
{*Űr#cMC7*Oad{>0sX07U~xFY+'0:xl5.Cr+vTzUWkYm,Ixe3}c̐N̞/4N6cH!MiWtId`r:<bQi鶱fXΜWl[|Ir)2f+kYÞײEٝ4۔U):Bg_
Ej˻36x]7^ˋ#='/Boȭꫜ2U@APuۋZ9 М1TlCqpa6Lb#SR~v)Hs97%>i|=4on!n#_2Cns/%$`mp]-0;͐yE^6mプD|uwЊ?a"QS~!

_sǸUv
Yh!snr;oii A
q\%I-D;C?>=x45
}?F};MGcԃM(|g&/?8H90?Bq\TiqW02yRneJ~UM7]~ei	?|w$
G}x`"ܝ?PK޻U=K    PK  ]W            4   ch/qos/logback/core/util/DefaultInvocationGate.classT]Se~&BX>( 4@[UIv(4	4!	:S3KX.l\8no{S/)ɱ=eB3==yyYl*$0SĞ:n'gZ^)+gpXmhWVUgO,ލjQ-]װY5re5t&.`ڦHT&
WDu}{({aT`U=6^F©۞wLŸVM;iXAc^{U1pf7GsWpȴ
Cg!kN3'Eմˮ#>$G}&/ir)9Uܖ;Y?ׯ=\<L%6S|^Y-B)^\+<	ǮymVP!ڠ\a\$Sbа[઄OT~u=lx[<C̺mիۆ[з-e&}cЫ^}hYOvVpاL}ܙ9]ɝ~{ye/1NHޥA<e,nr^$-%5)'|CJ:KIF3A(]ZBAy#g$h;q)h,c$#HSm{+1chcDcLh~$IN Z
bF4Iw5w|D}A(JYͳJZH#qfQ{#:zoq#s?`0J?CN	f*1#imlCyrD{#
j,O7Y"ڢG1Il(ʟ,ysrȒB,	}?6QטtY8?.}Jf~8(-!ӯMXnوs?z~Co#sGh=듷Kw_!@^!<'JUn7Q*uH7>nVI-x]ӑ;}zAɨ7PKҵ.  y  PK  ]W            ,   ch/qos/logback/core/util/DelayStrategy.class;o>sNv&FblTҒ}ԜĒJvFĲDļt}FμԊJFf
M/FҢT̜TF!C@J@h&+$8 PK8      PK  ]W            )   ch/qos/logback/core/util/DirectJson.classXytT%30,	( blHbH +! y$0@uAnZ]X(Sj.ԥ9]Or޼qRr3.ߝX}HCdj0w!3_Գ
4dV
x5(.
E{@$jĂҚ`g#a|a`*i􆃑Ҫ1jϊjfBs6Zf`&
qg*ȳ
d#&(Uu\0eO4Zb`ƙ'eyT6m4B|Nw(2#aEY,m,o
uZX%8_T'E6BV?6 K
,2^%6FXV']``.ږʍҺ+ŊĊIӫ
iOcmGC]c]l`eDUsme2{JMoJlLl1PuфYղ@x/{l@#)&b߰)kx&4kΖ!3`(m^fsA-b(m0c2˖|v4Lx{5Vy*_cfH8q2a3b7597
;AuYQk{%K
Rxaӷ67] ֮34<!
P^E؍=$j0`@L$rl}*)x],Q|1s#=r!|M}DHDm*5pLdlhQ3_6p ^M
8`22y-8]}9eIVܮ !~j.A,UXZWٰmݺ-u[vŤ:E*E"zs{KFXM]֞E5M2,ᥛ66noy?OV74&&F*Er78P5k
V'ę
ءv3ٙcAFO23E#CV8dP{yXT >RBa}bfTҩ-1m0K|j[B]`괠Rua;դU>|F"1+QXIA:fzyO"f>#*$v*3Q&È) z|OLG;-^&c}Οd*'z9jF*BͰгEѳţʹ% Y%n}XMeFYO2HVBNkDֺP2}%b1ei30wku=|/)?$?H$aGG(3I~$1JS3<y,>|_|_Ӥ9wd.2mJ=;Њf8:8?An-+!+}'$5<媻Q7)LcVǸLTb$*RI)^VEKST䝀KIzd񑜅z7>Q$G	]6MD	\$k(,_,q,3?ǹG1U&z+hao6P3ɂ> {,lK6g[*sl͹tӜbN[m
/^@ޏ,dM1h PYߦT,+O`yeۖVR-UR->ͬz $էpi[fi;,4Hӎm'
~~Z~T Hv0Cw0(va1q'|X,	qEϐ.q1|#!]ǝ2uiҦߢ0E}Z'U?*F6řB+~
?tqMBD]_LsuBI
âT]0iۉI8ƕ\K(⏢#pͻI{ٸ}KF{745S]`k\//$OfL_el,ɘ. ݔUhf{<cG^tryRޖxq#MCyqC0Vm,X/;뙵E8N1^3YʑNux*hg#mJ2=蚦I2!$u}S|o6I-Q|$+ TAac̹lz	VD-N"*qwZ@l5.><%XaUBx:yV9zqvt]2;$HB	XqW{˼cn,qV{r=q|^ϒU{&DѱWl.\~>J9Ew1WW
ZϹl)cn9H
owxnxI瘿0.s]v2'qxui:%,/e:Tn̤
?@-lNsΫ 5Nڑ{`j+5ϭ*kYS
	qhjqBRy햗UGW

3yQ2Wʅ1*2z#)|o.',cDW	a^'0o旄y00/)7yƆtճyNણ<kKvg6o$= ]̅Dzy ߘ 1 4yh_qy]rwYߣ'EDyJH*w"k~=>9/ேF{E;({
PW>&s|ߨn6$&ܔD_;|l;;?mH"_q
ԝKwiԿ3A҂woM|N(^ޥyEp{3tNn}䭔'QIrZczg3oq*ZSVB2Qò<.r	qs̓^_w|KebPKE    PK  ]W            '   ch/qos/logback/core/util/Duration.classWw
,Y^@đJ `# GeZE]ZܸMGҦJ_)}7Pӆ>/9~jzgvmɶPx4Νߝ>#jD73jəlMjjkG+<^)ǰ:Ft(DFg.vD349Px~PhVe`#~bw	DAO?d˃xv&My#}TnCŲcCSC4î'Mx_Rm[ƀao -v-C)EK5n@x<a=m&J#)Xf°#7 c[Q ǽxZ|bU`bfmF<5>z;~#CBTp:7! b>ЙdL88`Ct;"z5Q0(j3QRd
ϙF^`e΍]"
F<öϥX8=C]>9^P0&4t22-&nK/5KM)B+t$)'	
T!JԹ9=uW%tT=c6_0"@\ ZQȩi.Ҭj]𸯤4Q7҄:ug
27c1J< 6'
&]C=y <|g;|'/{՞мLyg4u5/1OW2=g+&&'WrhFǓq6c: ȇ/z(5\cS)-d<chϦR_G,KTB%GGӱ̹h|x8MtmD:;_zr4;%64%鞦F<9rsR3xVָ*[P iT}B4AV(n}PpfbŖ5fUkЃ;խ N{=I5#JHj|9P~P9J)g˭s{Iđ^:Ǉev._l87Mj[j%)Zo(ϲṘ2A;ԪAô<"~a"
&W
$pÂ"1p׏cɋ{aJ͘5K=ʆ՜mZso4tL;yW'MTF*TrfUt!g4SLap+*}2şvoQnaYT3Tk~<W9>O&|W
%ܰ:_mX^N|
$jm2l-GћkD
Ss-={Cm)m!0,CC&.ސ=/Q)bRd;\Xl#kA`)ruܠvqHN t	]j2Ԁҵrz#@sxSP7GI4EQ7By9J)pE'sb<Bh>~nzzE[key܈S~lfS6z,"]Duۺ'Sm4־8r߷
l}*}4M;S,g<['-dCig	eAŅ)mV'e4v,>s<坊(=j8.g
CP,_T?M"~L²(7d4nM$Ow~	9jltuu$S̍қ$"浛%\M̭zy	+6-4Q+MuUR9 ِǔ;wy?{e*S^gda?L_WM;k9%ߑ{lOvPKmk    PK  ]W            ;   ch/qos/logback/core/util/DynamicClassLoadingException.classQKNA}Adhaq`&,7CZisą&=[ch"ƅUիWG 5H!m!CSS~CTԞdPp	P`XtGZ]/=ȹPհϽ3SZ8Q(}y>7U|@J
FhІV15T`B=G"|}k>3dj D;c0]'5򿂙p$
Ctu?A9TPu-vGE2WX Xt!a
3%/!ߌ<EZH=]Bʓ2P I@JX$"T| PK)W  &  PK  ]W            &   ch/qos/logback/core/util/EnvUtil.classWS,5B)Nņnk/b#-iՂM.Mus^L:}L2}Jg?q~hZՃvw}?i|A:Bt0֌T(R7̬+N[%ć#hEvGv%UsFf*k;fjյ
e^zEөXvY{e`
ć2ukcrctb.݈
&
F"ə+Tg"֠SGbzueX.E.yy:O U)

:hC춶uPŤY:Vٵ5EuuW>v<-+*eQ!$4fm;S
gvPHCj#H⤎@kO
ՉŨ:9ےLuMzYI+grЕV	\يp^ǋh^q"	Ȋq$p&\tLbJMR{i/c'gj;fua
7\6\ryz0>-v:NjU8PGۖZqYY{
d*5jf"X«
:6A7^
9K;s{^-LΚZqq+ɒQ4e
{:ZKVižUyMGyvB5d]M
E0Gwb[A55/ xY`B82Vɜ[-.%cYhEñ'ye7aqĲ
smK|3T~({lEoE@K86ĹV0>tOKirً Y,k[~@Uêu3ZĪt]G	N6I<}.D55*T}җYdRwS%)qD`{v{۵{v2fmVk$Ů=\~%xn)fsqv悽dr+ߤT-N^yͧgxG(Weȡ/;

mpD*xWۄ6D[7Б;B>r@=OP 8A|iJSTbk|1nzCD4$]㮈<$yD,YJg|bu&fGCRR
*JH|M=Oui"qx8h0
z"zަ~Fxƿũ*.%5ʺE8(t4>5;x`4|Xh(ĩcV!Aq?[e/0o/14N(ei|9ջx9}B}/>BBpGo]rS&3]7ql'	Z:^e|/a.3KZHt@Ā	FCtznWI
eѶn"#
e4 
w}׉`W'G>ب@}1KOj*ٟe[2^bf˭ldhvܖ۔x+oq]KLSSį*^5D?aIC9HrM5J/:unc0KsSS*65#bMX#,Ź'kn)CCfwʇ\S{nԌnԐ=ePwP5^HhBP8"Cw{(}*DPKE;  G  PK  ]W            4   ch/qos/logback/core/util/ExecutorServiceUtil$1.classVksF=8	P
)
`;NMk#olY2:@_h+ҙb(v_w:ޕWi:_#6
Q{Jv~0$C56ud!ƐҴc
rL#;/y[pW;|_C.`4ه"7ɝ+Ǔѐ[i$;Ϡ˪+xyQ[.CaשC8pƗłj	Ùdj{o[r
A#8ʰ,xÒ>v!7p\Û:N$C5WnNӛy;mV
8➆4,{4&
q{^}8#VF
͢tM_q.I%X
<~d4DN*^qEVyCP1LZR4@éW7J0
WsNaT 
QckQ7%*5y%V#OE0X.AX7=h1zbl>2q\ƄILQm(xȐ\[
拖R@*܋iyEӘMpQS⦎fɫ'd U^6 mF'hu,6Cچ;ҕ'-	a\TwzׄmL(qL;-2$
Tt]S݇¨\Fus};;ac
*w~VBq}!i\3JuK折ק:yQY^QjҜ۝19sh;!ak)S6eTFTI۰!:'Z	ON;kq']^y14َGq<my}0B\?lxĘv^_q\+w2\xRۨb.ƹeM:m[N*U
߬Uρ2m}4l͓M8ށA]D`ߠݍ>g&3=>I2H|Dwz`GoߤuDoTkLUls|n \_Ui' CW=QyBΗH:D 8)ëtksH8Oxse(CFBLKth<PQ^}њJ_1s'2&f2$כ{[@̪_|q7erԁ4z0
eo4L<b`G#=Eή/4Bė>	"6}GPKPz  \
  PK  ]W            2   ch/qos/logback/core/util/ExecutorServiceUtil.classVkSW~A$X-(	Z"j-`! m.c^@LC?_[~N,s{yO 7^0Xږբ\Mn3~.m)jT56Yт\U[bRuYS.ۖn0݌zm]7H8-q]3-IL?D8.bCW:	VȼD4b*%*x1_B<L2D%\RHxa"яyI&frs!NE$R#'E'5۔53
80yDn?FqFYplg1e(R:I\6Q`8OP.v.g\7tM6y c0	'~6VsviMBevGJbu۪;ZVabZTaZ@TU0u/RmQX63RJ
[A2BTV˖T/(Jas$}W%nU׫wC΂ePLgfZg#M?RiDq[" 0܍憢m[6S
)N'Y`SoY	^;dJ*IjLi6qݣkG&p%$.#hb&|JKL\,%\-P{`YRmYo\6Q47םܑ&jY2{b̻%TZcfMn"1D)j$)!*"i)h(X%i9r'ZQ)~9?ҽ&|A-nxP2?3lNV:PmCpO;JieI0 1ip 71NX&`Ȁa=]3.h)J;.5GkK2bݏz<5%x9Ye(Lz3.
}[9W~;gaNszk1Kalm.*I`k=;qo~%I+qv@#'tY/]^$_
?;$ïqWtq[+狎>G;z{= #t;=})?NQBרi Ƀ'"`d[@p)¯h	Tls7ߏPs2Bp?PKbX  t
  PK  ]W            '   ch/qos/logback/core/util/FileSize.classVmw~ƖkGM,!(VH]dd/A1cyjWH+jRڴII)$i9{>;z}43{ܹoֿ #
]CzWO9^dZ)˫T÷Tvd~CFBXCĀ]yL9[N͕nH]U;1}0Bu o KU[e7}_(b_[&p*Qض1n֊fCuLS<
&13mcW"..׼FUP"?À_28xm疩4ܚn
~.a`IR mD1
	[S'!t˘g̺l+:NtmP!.J3M`?
ۺ#˦SM_f7-Ymύ1m xܐϵLu_O?
t| G'p(0pL13SK
GvyVnTS 4r1ta>=̈1C:NxrډdFNt\e\aX^ʒmWBvvr"҂@l@oۡ*Ot\V	,Ks|7##YV
}xVB \6gYq`1 V@vlR!V,Y2kv@n3'mZYEՁF̡cɵ5۲tt)N
v<	oZKNmifCOں{<#xq۝Ni9MrXNF^fɜʠFMufVguͨ/r.WBZU/kqw=?nq];k^}pD/
O%utZojߩd@35m![7@δ|v[Ýk16qtWY?VFu|۞$p*`_)<=hZ*2m?H#ﺲqz]5EeL&3~B<\%u-6|`vik*enௐwcoR9abl7Hꂺ&;9O|˴>
~OQU$[:SI㎺GRfSX|@>{7yON<g:@sp'B$O)2z8M`
8J`
%{s-#Hܾ<rr3[$0N;_e0)xpAH
qyv*`xkt)]k;Ϊ31B<0ϻw#j9nү"iF4~@#Lɾuٮ67Fh͕?bHna1VI-\g+P$O/p7I K̋2SyJW}S,1=:	T5ɦ~2NWݔǏ
+_0@Kp);|Ď-?G<L}o)~8s-5_Wj|W\>_qPKd    PK  ]W            '   ch/qos/logback/core/util/FileUtil.classW_~̲^0+[iH@"\LͰ;Ȳ"Moiڦik/m%j>.O89=?r
#Epp++!?bX1ch@GSz}qjjMI㺽S+X2
JH[	~K3Z%TÅd
,LrIPcjn8$xlk_eÉkv=)
~܃r+3-|۶p5*Hmjl0G(y{#Z֍8215>T/QmG%˨Rp/6FN6yL%A	[ca;XM
6cUDTnͲոm-PY@WK)%41-SZu*tH& vsyA+ ^FGi9x<0qݲ-?*؎jYaCjܧYFҌcֲ6	|>`'vI4v؈&
vc|,Kg,L,@O^
SV	B5areIdO$mz4	Cx.1'yG^!'NQV԰0/MI=KUЇ~]Qb9Z**j"s}y[3:&U "md`A؆)&cXX::ͩ|f"+הL-#xyL?8"Rˏ:epj]#iicsH	ϳҹr˱.$"/2`ȴ
^)R9Uhb&2蝻|Q!j
hӈt1c٢걤Igplj9&8nKC[=BوrYZ{rt@3!#,lDXj;Ct:{ccbDD'˺;,k_&	U9bsbAg.	AȄTamM,&1=Iw&ab,_P*qښ1he;
ͻ+3Lz)>Ud ^EIvy@_	2v:`@.1\\E^ze'?5b$ISԣ3ij"xPר5$0ew%QͲNk@`|]SɽAۤ
ӼdeNgui[Z&ð-Tm=lD-n]qm<k*-Uҳ>mO	 =V(-*	ӳJwDK*+;^?O2,_xǌ-E=ڼ_`:j<ӬMaI&
l%weT4X'g n+tY2.a]*袢ia^6}<Kj|)~8
&4!篙TS|ёKxhC7֢VY8o穫_#!*jR(MaTx5aljqu2HΘp{m3V2|o:eB*@81<U.pMx2ҦV2~6l2+II[(骄sjhYF[JںnzKkꮠHa4%[Sx<	x\) >}!r	yg;!h/x]zzay@&ܗ	)<*o4N!:	O(
yYm3U{@ui50q3wb[sl]|sN)TE0<ZLnnz^N7c/D+$a7.x	e_3IOKf{h^tяzҍ)^ESAZ_Y8O.c~z/;xeZ@ x|\mOVhE등MF%	22qQF5
 	|I4Y pKPGtCS@vIj',gA>޺ix]v/*B6/ʽ)LL~Yj:-P~lyҜI5<G&u0:34^wz:)_8{pA8W|6
AyWu}mr *31Q-UǖَD(g/Ac8NiwmIJ#xo1z1N?ӓc	z3ANѣDi\dWY:9${Ħ#J{W2(4K!Wrޮ:(-".kC^O2(=Ɉ9[#3t+phC)BdThBTFtM95~_r]CI<<w_3CPKjƎ	    PK  ]W            )   ch/qos/logback/core/util/FixedDelay.classRN@=86NBSІ@Ax,H,([86sXT*BbQ;CVܧ9#M4mP4a8(aa_r/퟊ e!#n3[힅L&0,'E<xDxY*Co_^54YGATT|uCqhԷQI1ZNgba4z(Mx*n`2s_$R֍x"UDVbQw<71Zu8K/Gun&X '5uz&"iw3S^"_uLy_=0KeX
V*4Hc@GtG4fy˭o15&uc{xv|%Fp0w\eR޸}:nLUqb[|PK-9j    PK  ]W            9   ch/qos/logback/core/util/IncompatibleClassException.classR2A=HDBYPfRMPEl}gtE3cGA"ܞx͝{{ι=r `"&K#	ݦuieYѹr=^$Hч4Ò}l+rTSV-kǵYkpD1@Z|S9,LY#үKtN]x>l2]:VU	DZ}~
rxazecavAW\gUdkdg/8kӂ5e%NcX?nLs^yܚ-~ϩ}xؖftoE3]|^Gc!ZP	H1
31LeyZL2FFmH=Jq 1#G$)31B@udMf#4G:f6f3PK9    PK  ]W            ,   ch/qos/logback/core/util/InterruptUtil.class}S[OA˭hAeQ%`L1)b۰er)I v)
/s.ww??XZtȚF9.w7P	YHG/x(zK_F/<z37Q0߉&!f,|(lU;xEWǀAC(2~pu>7VJх]fU4MF	 vKɑqdi*q(8NrĴf)˘1Q̵f.[	TF'ǮhF2{qavKOQPn#˩rt'=o>,^^o((ۺ)7*וG|4EzP
T/BmCJj;uf=踜Za0܋N߸QoJjeʹpw78]aDrŦL]ksI#1CП@In]tIY[^<a1vJl:9G<raXX$hx$%8=i׉
7}qI .8
֬f+?e}@'mCr-R(T]R1wJHLZiSRdY[P]NO\o Ad(PKN6s  a  PK  ]W            -   ch/qos/logback/core/util/InvocationGate.classUNN@I N|pcJڡ!N!tO4~G="zlKw? 渌nԇ^nR}
--+Z!᪓[)X;%{]uC $l{'t+%aaSk4av<{88	׈0{_Mq>f PK呺      PK  ]W            '   ch/qos/logback/core/util/JNDIUtil.classUmWE~lByi)P

b(6j$(j=daw'>?_A<dI$#0w3{s;w [
=z%-gg{iqtc{"^
4w^5tZ4mSg$e
Q	鴟y$5EQD+~xa,WuaZUU߲L 4pntjtUê.C떵.WkaWK%J(.cTXE{LkoE^5J^wMq^>\Ť!pM_rzaHؙ0bw

1-<{b$6EeuC7LS1<n2V ܜ7H -{E|+x!(xnXEɜKz.[+>/2q8f_VCB4NYx)=UWƷ{Զ`6(W޴ber:e.GVoE$8MDlhGCdgMNQ]Lޚ(ncjjw
XLSPd\]ՑrJ*}lP{S/	ҵk>MMVsd%Ɗ)[ ==p	
8^%Gj QD×m2̴8g4N
ׅEɳ;68r{2RCe;?;y,D[Vr~b96ܬ=4|Eja]l8c ]StN'ꡏYDG&x\Rk8`Fp׈lP%lZPq"Gc20p"0u"q%ԶL?7ty~  ;pW?~D
S$
@i"q4@]L`Fի {>5(mg'U+K
O?c5WT1&*=(SYrh[~__*~0'feҥ5++Qp>Axpk<PKĔ9  >	  PK  ]W            '   ch/qos/logback/core/util/Loader$1.classSkOA=CP ڢ$H֐tlnwpv/B4w
읝s;~	ABA/r~Xs*uJ),3Lw@oȦ)H6pM"OUmXp!aamt`c90B"c-wsE[*4Z#.xPhKLc¤0IR)u0QPkϕ^n+mȐf,:99^w?
T˕nldයB-qrNky,QMnҺ[*!nܬί{eo;.#y
?
&P?j+5B(ZXe7]rlPTb(2_Jԏ*1^Q5C+;PtED'ZpnM^,[/VxOGKqd<uSa8{/ؔ(#KvBwOR	
'Sd[~+7r$+oyY7A-5Y)P2dUJU@PKCb  e  PK  ]W            '   ch/qos/logback/core/util/Loader$2.classRjQ&M6kzi^ld.-Pŵ
?6{p/2(h }f1va̙7̙ӳ_<V%
T,TQ#lx#磎@w<I'MTZe&4"h{8>&,Gb,@81QGÀi	:I/!vU=B훘ü,gsLruBt	Knd@(

"汱H%@rCRB>	*釁މAEW{"HeXIFnWoxP$i$LF!.7{P<i*ڜ8g߳tBLFzha.,<BsNc"~ 䅎y;a(-cA	j-m,eio ?a|[	+|8;|Zn.\c2o6,n/S8	NkESW\M&Q-HT}l64-PK    PK  ]W            %   ch/qos/logback/core/util/Loader.classX	Wi@0;12u6#;uظn1L"	dB19BCF#۸4iYitO;-ƦsNi{77}͠
}7s}~ם<~TZCZ	s8oF&?g&cL9.P3:vԇF6hMNl5%p\ICRth@٬
4<ef0}Eb$=H&lچ2Bvcz@ӒX96͌Uq{t܏M3Ԓܤ1NbUL؇.
б
43L0{YC:CEtH-hŗl165L,7OEŏ~t!뢒M,TeiC2G*`aYYH~|hxT-,3
!mVg뽴FT9㣊26+㰰E%܏8ʣ}jc>84e^
ܹEY0& I+Eń"ø@IvF&c9y3x\npն\Nn1IV};XL!N͍C\xbTd<
Y
ރogdٶ3?OjOcn+YO9BVҶiskNOͤI*lW&OT~אб TJ8:Xb1>V㋲rWmrs:)O%3L^|8,-HRi5M	`ESmQl?P:.踈U2qM(~2+2?i[8\
Dgu|g\u²ҦVVlt}0ŭsEYl4%ylHSk@v+$V12'\r	w`Le.=/ecUnf"gE'FXɩ	n\t([Nehny޴KVHOvJ{{T%H`cFaoo4V鬱,()Q_MLi'v)MVz:K+tKl?_o)+4>!ck9fgW윻t'VcfzvJ
@-vpxW~+,Q+Y(J
XʏU^.Yeχ
Vvp`[7w%ͻ!߮ep!cޣ)I}ߢf։y9㙌i+Wf~@
_sxoU
sV$))Nu8
 n(oN	;Mo^X/HohzV,4r/M5aȒ/eW	GiP&fn)׻{nUva;{6U8޿r!8!i,0* 飋~pu}^!Fj~uηQ ?箪F
4"'*??ޡ%Lke%4)YdHI<Hƥ?U=WjS9<L}V-keΖȵ[/o#N5YcP.E˯P$~1H?<QW؟a棢*~k+UdKt,yذљS]:0rN@K/x&
l8DGg&NZ33/g70|_%$kEMK$o78UT0Siqrjzj%EK4^lJH]w
XnaF9gڨw&g]Oy0=y*T3rk+%cE]gn;귐-؀x%7qMOj'm]t_~{A߃lGi"7|
ieSH^ņr`ZԳ;PKNS    PK  ]W            +   ch/qos/logback/core/util/LocationUtil.classSkO@=#+]jYa [E_Hw5,`Ptnk;5?WFhO2xt{>9w돏aV.4)Hh؍f3p-j*?`hx׿ +mrm^%2tmI	{4r^Q@Z:_eJ"pꄬ]3ղe?1l?F$07.D;C׃I^^݋h@f>O؇rʊ%箊C8b8dVG\ЏxQk?ui<.9s"c-ꖨKKj(@wQN4^Uȍ>
Z¨nPyPٜQG~+h\ϒΙASpANCŰt_n7ˋW*bCroOߡ2f}ĢFdRr6YB;{Mh̃yrYΎh7	Qshg:q n6'LN3
9T^T`7Z[ 
1oeЋS{q	F6^&o2cЗw>Bks<j \u`]EɬM BOP-kسL=ݶ?Sz{=1Xř`z v&bods냍T܈9E[xG}byӚAȤp($t:<#@qcȒ$<a_"2!FJ=Ts
r8Tȑy:#`;zk%a*nQ
Ŝ	PKY":  I  PK  ]W            1   ch/qos/logback/core/util/NetworkAddressUtil.classV]WG~&n+_"H	bHjm	ȗpZ>.]]D+xz=ʋGxjlbhOϼ3xC
*
GpT a/]rVuc=m86c#?GG,G+1DѨ"4T0[UJMq׳kz2E1DsTMhVѢmz6,0f9K3Ǩz]It4RZZF)je{vm407}˱%h8-#vVP^9ڣጴḯn;cOY
#jƐY
XJ*'
%1㼊$Nֵh.<,{Fߖ΃."#0_M:.iXB5ԛdS
Ch
ɟZ2{ؕg%5|.k
w-ЉhZ^q6e+UM0Z;{$Y
RF_^?⺆I䶩fUA/:ƺ3T
)r-jŜ@nBw/"A_D1!^(L
$ojd:ےZ_
?bc:w;E/-Lds3K2Y}Wm!aT,U$L8NdomJ+ku(T޸PxPE1W
( 7{V}&7C챪zʉCKgtwfgBOHBFw?=.[3K;ӇN W^ٚtjS^>QGCYt\Ü$
o6E}l
7Ox)J<|LAnslBf(hA#_o([
2V1W{8;@R^TA6F RéjdPWG!fUښw_S]ykw>ñ8W|)8/w.ɟqN1#%=6jΥBMw*4ǈݧ|W~gH% d:!Rpۑ (8Adqב4.	g[}Dhݏ5I9X%uU]),%8ȡt'侗w/$Oi	T)iP`C2LCf"\p1yP˙~}LRd
n "#<3ask<c1^Ka`]f5l
T<ܫh432
ʽ ?8[PK  
  PK  ]W            +   ch/qos/logback/core/util/OptionHelper.classYi`T,yK !E&	AE $->&20f qkZ[m...1V[k[Rw{L&1Tw},W`n
^	Li1ZFlG˚m;Ͱ%P4Xg	m>
~%f{ZvS-mFxWK84[V$7ͤ@Z5R){a!
Zڴď2L0QG9*NꚄ1	e;KYF̊O)2zMl!+XozĂeH^ɨUXZ#Ɂ%~ǒ+@Zt46Nhc
~Lt
3tE9P+tGӌ$I,
u3"TdG5W%
#۬aQC {%|'<0KdסIG3@ӹt؊
[FnZIۣ%kIXS4c!	SZ$f
x
3jo4'+Ipi23z#ጟw:`^cIazbF<]X:,gIG,
eXcV2Rm)k
(tT"Ҳ6gm2"1P-xvVH\T&tŻq{Km'{e.U+m<PDbyȘa-KXu\,wc?ұ^+?6`$u9mUfiYf8X}YhHi\04lF7kR9Hd2B&Ғl
=:")PV8"h|t֩ 
#AzTRf##=1\P0UR'^-)q	.R#}0jh{Y<A2}+JRT\4S2e.y5ۓxR~wZ?m9Y"9pf?Ҹ^ulTt܀|!}4>,?"&q[Ro/b|\	M:nmt;mDS1H\;)kJZǝri$%5ބL4,>ǈV
rrP=+ikvn
_~zH47T7ѴYC#?uZrJ۫mAlhhPx}+o``(n
ŵ`W{[1%+Y;%+ݻLUR!6CUYX=܂1M׏+͉B0/<qSir:a[1-ыFl(m" ?[΢?S	qH'7L
!̷lss!#sqƇqxCEOv9uUql2Mig7	F䂍-1i4klHv,4ND'`j(I#ʿ)J>e^XʇF,F~$H[V焣#ߕff;^J=.MY$n7~ENcom 2ǧS:udY,d*Fj3ua׌YEKfikѭ_GM#&/񑂛%u+$ř_6$f2Z$"/m34foɤї ~qJPasUDVye9_neSCMNwEUwtZڬAjeb@ݰ#6خ-	E/*$MTsSLf97e:t_YlA9F;jر=vCQޙ_+Q҈FC z0s.3jf鸠jbjΏ6D[0ViE6w	_̿W_ 9?5?Ѽf{QĿG> R"H-NxC9ڼOhhlDi?nïX˝uJO	j
<txߤt|rcRqP\b<p>E,mP@
4xk<bs
@@ 9j]|G(BU )-8GV_I6M
b-@),|2TmZܪx#(9)A1m
`j
v?ʎ~'X#C p
&wsE5E6k<![==śGp 5y$"[Sη45Ob	,l%cN	L	`)LX.M-++
hW]3wq#19/	S#ra0l9PXxFcN<Xx6q<^8fh|
3ՐX4M##</p$cg	hdݟ=UNyy9NtxRQNn[%-_e"+5*JrWP]cL8]	Mix0]rTy]QOuǴ{ė0.T\vhUhYUu@8疣).om>􅯘Vb:,NA"
L	M3?*2@|٬Ҩ's^!OC<k6N
wd\ؓŎ=JmemA+o\駆C'`c.ꐵuQ Φ%pfs[ i`/u;}^{PS%gx-
7Dko[_n%7]?K:?9qnjm<r^kGfh>wIPGeRkqӃr((UI00
P#	ڥ`1pkH!Y,5bnXsW$27Hg7͹xC*ΜUFO`jOYIY<ELcaKYEd@^4eB$Utq:fB*V5N^Ζ@Ί5
9Xq3tv0pI ø(bJRPE3iV.f?Q-\7dř'$ЕK
SsK(G( <Ҁ:NOw20J<qX]>CFGo[JŁKy*,ťHhb\>+2jpNEt<.%
KL$[F<o!1
5PK٠M    PK  ]W            6   ch/qos/logback/core/util/PropertySetterException.classNA֖"APJ4Qq
^xhiIe̬3pO|
H| _xf(sN7 /QC :ʨnD4_~S:%TvU:xI;nxA|8}"C3Z4S$<GmD}}#md9o>Ɲvs\YyJDғr`@	mZ'RI&?/?Jm}$	s7ٰ/͡߀{8Kn,aC{?/@][dG4&>!JkED9L$_)ڔO
 b|⬀9?Eqs%"g|*kXhiD<Za3$Wpݵdsk\,6.Q.{MsYs/-pw7PK<?]    PK  ]W            3   ch/qos/logback/core/util/SimpleInvocationGate.classSNQ=nY] TZ*Ж" HДD^v.nD' _xA&|:w[11٤w3s3gN, @|"~t3Lj[[fM(J5Ll4vL}ڵ55ljez"/UKAr-KNKTGF Cwưwa,qdU^}<!ZڶD*b=ٖrrյd=SM	!\pCBrU2/9Qb#ܔq0,xŨM͹ !{"FeqGj0SaFS'>&NH"ЫٍѳVKBr{զd(f諵F%
3;.]'_4,jtL,RYU;er
e!Zk$7+]\E$ 6[7#OҊ jRuuî'vUG."51
#ih
!@ii<e0=O`'i߅9{]A8NnQY!u0céSz8SGEڠ%V)cC;|\xǝTl&:{R_0|;F9ƈXyqX܇(|;(1Z3ly[^51q18gSфыhCn Hg~z-k>⽗WL~;̺=㴮x~PKOZB  J  PK  ]W            9   ch/qos/logback/core/util/StatusListenerConfigHelper.classV[SF`F%- 	N4bcRZhzHr~D;5}!tҗ>71Dfη9{_ &aH06c
v(7Tm;,f`ڎj:vJ!yK}[\sjtSw3T
WkbF	)IvɭC	OFFMhf#Prt#.:z|č"ZβUgah8y&XߞhchahX$|$ct2ܽc
fNWu᤿_8q.$h7IYˤЃ^	}2n47)B1Tm^OY.a(()6E?;&20tjW~vIOLň[ePD%l"=Qxޯ**6À~Yx=bq!;Ct«͹Ě+.2j^wd
yzLaZ}_U7զdf?KxxA%/Ys	r$|+qd|E\tχr禟q-ӣbh={qlDZƲ8SSi+qqD3P=SnV
fdASU؛v6ua;
R0r	{S<%8_zr
W!A-KEhqPkT.i=HԴ\֟sc 0ۓ>>g3tSV1)Z97>h\P2f3\+/2$Ldi|^^Q
v0zSQzF}0UG +Ѕ'e-ƽ*YoUP%j#Է*Jqd/G~kXw6;<%iD쎠H+$^]/(K)]}\	Y{hk1
uTd $!&	(F\:}eh XUGh0
7<_=j0=4D 9ĝ D?D<=Eb2Y$1pBb#Rۨ;O=*T*6\
'+']e
h#H{$OT| `UjdKyLLCxP-o[ďgQ":<}<>/DaD7@)^q"T*	(,GH^crzPKs  
  PK  ]W            ,   ch/qos/logback/core/util/StatusPrinter.classXx/ل "dyl	$!fH63$Z[ghh[XCVVҾޙl7s3{ϹϹ{i a:B(3SUcp
V&J PVV0
5]`Ir;S:սn2Unof\7*IZ}oq-:`ܴފsuc;VñV=/k̷b*چ6
,S)H9]=ە0nҶ!PF
h°,ۍvQ7*4̔Ee^	j&hTstnzqi2,Kƥ</V=jv\TG4j6zLt1Y]c1v0ܭI#z\sI>Nc?4i('R4T
,>)-I*TZ z̖g8dWq>3%,k(pq$//Uw8W ,͏!o.$0jUoԳ\%-j8	ʍdtcu:|.<1Jq;{vd$#CrQT~р%'Sܱkv&{nt۩Ne
y<ѤfvH6$ޱ{F">xm?ոPfk{'[4؊&$`E-
kxKg*4
MZ\@UgϣwW7k50VO0@ƫ[G;z(^,B#wBKlTt2̹}ё2[p9HVxl$Ǣ'q>5)7z3fgcwM}B.q9ffdi;N&\㭸,m8u,"jN3Tڔqӌj^Z26ٕT6ma5pҥQu܄HMSՂqTաDq+n:nrc}K[m\׺q39D$^wHNFVܤ[O'0-a$ipcNu^(sg%~:~OZm"܇5<A|qxC>Ⲇ<](
~Gr"GZG~Hv'q6/#/$-dj>48(R#u;l
nPSTϤ`v'LiLZfsoOz"vHNR\cNQck_tGeyom^z9 1tܙ{m\$ p˗HBw-3\56+0;ީs輙H:ft_r31^4;n35kPFΙr{N|eHz0
[]t̊[GqGVwׅMDfegzVQ<keVcnOP;Y~T
%dqjwNʓV'o<gxs^HWIjڄKvIH7n{ukC 6쨷hǓ|$9Q
rpuUhtJ^
ׅ	,\w~\zD)Y'z7Vg,j흽|'g'.򾋸J0r_[SF&cf4}d\P5W`މR@dgokx(,;-ߓـyG<b!(OY>Խ	x]O3ІQ>p2];8FV+Ĥ\ }S}CcaLkL?gb0[9ƿ	&$`~z$\U,	WbPp`9IÐՠ$Uu8wSx#s"j%<O/(zG1OC|6Wr6=|d+)"TYH*U&DH&e\H&-J.["$J嘤/r|Sn:/c\M>z\FҙyL!xmidJ%jY6Q&*`Gty.>bQ#z6_`uA5^p&XUD#V
`)Sf
3p5Naɪȣ\|_
ExI%>Ɗ"ODy-׸Ga[\M
Ȯ"VC
b|@!4UB@fqp`J4"f {U"
*D0
F&f[P[/@^wb
H10zEmTo?^;Φ檧CšX_U: @>G 0}c 7lݏX9Տw?cr$x'](cm?4݋u<o@VsX^*4Y>~A+~	BǸmtW4q%1JI*F@P.Iz֤4Gwrԏ\>9`$H+
xi,Gbh9?'G:jB1F^xt<B<J]<x	4 kc?.5h;b.^pq?BY);k:~Qt
r1~_(5~/^<FRJː<_R&e
+.8*c*\5xk'q$.Fԧ4*_+U&q'^Wp%PK
    PK  ]W            3   ch/qos/logback/core/util/StringCollectionUtil.classV]SF=@n|5il$6!ub/!T[HFi~@B~A:3>?ә|ܕlcy0#={9w% A	ANl+{\QCh^7tg?/D00GD &yٲ}mZw)Vt`9NHxSjY5mb6{Y5-CK7JiR!4QaE7iApNGA$ǘSg1pݾSu]68f*]T#ޑ.0lůD9!y
VMߓptGǴb4A\F#.!!R>
ˊ:;)a
Wh+TR=u#,Ǉ>wP^SQ衚;UBM2,&w,L
J$q4J~#]V[UaziQm7i	&5NgQɘOnnK+a+}misOk IXm),6HrMͺl
3T
F0u:mrLaGEtJMQW=s	3C"Vv_m֐?ʱH,^2f%|W+%ɘWJG}p+ԣcy*ՆoPӿGR#yf-FXԳ}A09=tg"x}Cא</*y q?ѻ<i81q ~c%1]1,¸D@WL
o#F4QcDlrSu/Wi0;d 8`E$CPGQsϐzi2XW>ysb[$PU*Ƒ,RtaK%7#Ү}k|N9|MD-v'PI
!9C[bE(g(2嗸!sx/M OLO;?sL̴\hi&f;LLPQ чȄ80MH"EʔeX[ZM̋g
g̳
uww?y(C1*PKB)W  	  PK  ]W            )   ch/qos/logback/core/util/SystemInfo.classQKK@ڧϋP"JB$]ӭin+=)(q*T=|;}3;_ NGI)id3s	}3ruNH6,BԚ/dy& yIL@=Z̚*X"bIBg;(6B#jN8m+<Hs2P&й!u!Pyn#{
4R=G(^)5=6!4KwTzGC+Jz%Ih[ё=i>~Um31XFM[s:6a%Q5
g}5mwboPK81FF    PK  ]W            '   ch/qos/logback/core/util/TimeUtil.classRA@ n kD` *r0f4xٹvp&XZP\!}}?,`5:ЀFFNd0?VSqU5@}<BIh$iMZ-K+@$F&w#-j[ %=jj^[q"{%hg2_fˈ8j|JÄ@7bLs/TĎ*GF)U0e$Eթki=焇[7mj]>W~\ؓvH+	f"ЧʦcE3w3wTNK7Io5@t:x[2ov-Mp#b@huC:z~Qj_z'J
چ3acB`3Lu魧}Cp+/^Ag2V_A$n
T0`zy@/|lMܢ
`1G_3xeWw|x<P00\`UBC>sW"8&K2 &'I$M$t͜G3,x4]&[ן62S)cԛ"KU\׼ǵq}vҵ]
Rx
Et}pH|qIبL{kGɥ\
nR1	H'JgNG
֪PKF  y  PK  ]W            2   META-INF/maven/ch.qos.logback/logback-core/pom.xmlXoF?)Rz]Z	% Et*Rz%kkQ
b>,[h9g
B*|N;q|hGŔӘqtY@萈8BNos͜|ֹX)[.tvrBBE_AI`X)?#Zs=LkG
OnEDB{T$=:sb@c-1#%3;mʅx-i 2Xc
	[f6}$SL7'2R57$x̀uv4GdQ]V`I"U8	l5hN,{\6C X72[W:A~I3'!j8ȣ"Xxv\s^,䮏9LwgGXÓ&%I!uBOEꀿ
!N@?j#ihw쑡Y!4Q]"vn1aU "G=2,>B-JM!a|=#"`45i^S0KSzTDI3ZPp¦$fdhx:`!xm@	М4lw19YgNHfѶ]e_j^kw}w{w-;lG ϬѭBsDa{IFų+햏[y1qrTބp_UDrn	h<7؋8IBz)Y01cI(
5})*/s& R;|٭Ojvk0>3ZQʨ5nI+
^	uR߯pMnv2U$khѓ!pD[3)+x έՀo=<YôO⪹jѳܚ`D6WЍú1nxO+.9E$b+IǪw=rDI|"Ӌ;썻mvooqq/0yv K<XMR26=$φ|S*^o#;2SAƶ>jZBۈKTUW@+	p:tD_


',lx,v'dBC*v^Ͷk&n=\n\7/ޜ>KN/?_>眿(&9///%"޼Z:<bOp׈5GS34KlOQUG|?PKV    PK  ]W            9   META-INF/maven/ch.qos.logback/logback-core/pom.propertiesK,*LKL.LOOJLM/JJ//- 
&gAR3l
LM PK
u9   >   PK  ]W               META-INF/INDEX.LISTN0}
^
v!pwSox[p2Jmq^ .B#;
w澪<[7yX>=֋χؾ"n*ej~U^#xz]L?s%WKFOԣG3}zl(B6o(,5Pnq	t΢ v0CpP@Jiz[9^Dn:xV
,2+?kf["12<aK$z&& rf$۔#'e%7wa]b}U%VϹI@[֋%3䖤aXz`oPKM    PK  ]W               module-info.classiS@TD3'""j7*"'%KY3YJGYv(jglS;{ `ڱC;1F/Fit4,sQz15v/\ǦZR6.b_R6$г_iK2x$J95F IHhĤB$uy8$VU+?QQ,{<طe:[uᘀ4Yկ4"%H'P"f"AĀ&dLI8̮Дu&qᰢάM$8_8k14LRNs<2q{&-G"nW\R˨.<.qYD:]ڔ@ۥGPk$;*Ao:jI)mGؼJwN]	.@OƦ<kjJ 2(mc)¼ár['[8".JBT+l!f~
)ZrLJUYCof>FB66Y#*Tۏs?vtUޠUsm%uVUm[Njq圥WUPoFExد:6Jꗬ[N;u?hՁNtnb1pe8db1#QcN0'Wk[],s\dbfeg.3?10Ky9ʲF(Q'IR=MjoR7Kb5t"E~K)RJqJ PKXJ  L  PK
 
    ]W            	                META-INF/  PK   ]W
  &               +   META-INF/MANIFEST.MFPK
 
    ]W                         z  ch/PK
 
    ]W                           ch/qos/PK
 
    ]W                           ch/qos/logback/PK
 
    ]W                           ch/qos/logback/core/PK
 
    ]W                           ch/qos/logback/core/boolex/PK
 
    ]W                         X  ch/qos/logback/core/encoder/PK
 
    ]W                           ch/qos/logback/core/filter/PK
 
    ]W                           ch/qos/logback/core/helpers/PK
 
    ]W                         	  ch/qos/logback/core/hook/PK
 
    ]W                         <	  ch/qos/logback/core/html/PK
 
    ]W                         s	  ch/qos/logback/core/joran/PK
 
    ]W            !             	  ch/qos/logback/core/joran/action/PK
 
    ]W            &             	  ch/qos/logback/core/joran/conditional/PK
 
    ]W                          .
  ch/qos/logback/core/joran/event/PK
 
    ]W            %             l
  ch/qos/logback/core/joran/event/stax/PK
 
    ]W                         
  ch/qos/logback/core/joran/node/PK
 
    ]W            !             
  ch/qos/logback/core/joran/sanity/PK
 
    ]W                         +  ch/qos/logback/core/joran/spi/PK
 
    ]W                         g  ch/qos/logback/core/joran/util/PK
 
    ]W            %               ch/qos/logback/core/joran/util/beans/PK
 
    ]W                           ch/qos/logback/core/layout/PK
 
    ]W                            ch/qos/logback/core/model/PK
 
    ]W            &             X  ch/qos/logback/core/model/conditional/PK
 
    ]W            $               ch/qos/logback/core/model/processor/PK
 
    ]W            0               ch/qos/logback/core/model/processor/conditional/PK
 
    ]W                         ,
  ch/qos/logback/core/model/util/PK
 
    ]W                         i
  ch/qos/logback/core/net/PK
 
    ]W                         
  ch/qos/logback/core/net/server/PK
 
    ]W                         
  ch/qos/logback/core/net/ssl/PK
 
    ]W                           ch/qos/logback/core/pattern/PK
 
    ]W            "             P  ch/qos/logback/core/pattern/color/PK
 
    ]W            #               ch/qos/logback/core/pattern/parser/PK
 
    ]W            !               ch/qos/logback/core/pattern/util/PK
 
    ]W                           ch/qos/logback/core/property/PK
 
    ]W                         K  ch/qos/logback/core/read/PK
 
    ]W                           ch/qos/logback/core/recovery/PK
 
    ]W                           ch/qos/logback/core/rolling/PK
 
    ]W            #               ch/qos/logback/core/rolling/helper/PK
 
    ]W                         8  ch/qos/logback/core/sift/PK
 
    ]W                         o  ch/qos/logback/core/spi/PK
 
    ]W                           ch/qos/logback/core/status/PK
 
    ]W                           ch/qos/logback/core/subst/PK
 
    ]W                           ch/qos/logback/core/testUtil/PK
 
    ]W                         Q  ch/qos/logback/core/util/PK
 
    ]W                           META-INF/maven/PK
 
    ]W                           META-INF/maven/ch.qos.logback/PK
 
    ]W            +               META-INF/maven/ch.qos.logback/logback-core/PK   ]Wε>    "             :  ch/qos/logback/core/Appender.classPK   ]W޹RY    &               ch/qos/logback/core/AppenderBase.classPK   ]Wj    2               ch/qos/logback/core/AsyncAppenderBase$Worker.classPK   ]WԌyf
    +             0   ch/qos/logback/core/AsyncAppenderBase.classPK   ]WQ?h    ,             -  ch/qos/logback/core/BasicStatusManager.classPK   ]W~h^  \  )             6  ch/qos/logback/core/ConsoleAppender.classPK   ]WL"1    !             mB  ch/qos/logback/core/Context.classPK   ]W^H  @(  %             ^E  ch/qos/logback/core/ContextBase.classPK   ]WU`T	    '             U  ch/qos/logback/core/CoreConstants.classPK   ]Ww  "  &             _  ch/qos/logback/core/FileAppender.classPK   ]W3#  L                p  ch/qos/logback/core/Layout.classPK   ]WbO  H	  $             Zr  ch/qos/logback/core/LayoutBase.classPK   ]Wn~  t  *             u  ch/qos/logback/core/LifeCycleManager.classPK   ]WSO!)s  n  *             |x  ch/qos/logback/core/LogbackException.classPK   ]W[  R  .             Gz  ch/qos/logback/core/OutputStreamAppender.classPK   ]W⅜    -             7  ch/qos/logback/core/PropertyDefinerBase.classPK   ]WF     4             ,  ch/qos/logback/core/UnsynchronizedAppenderBase.classPK   ]W    4             ,  ch/qos/logback/core/boolex/EvaluationException.classPK   ]W%" J=  e  /               ch/qos/logback/core/boolex/EventEvaluator.classPK   ]W!klX  U  3               ch/qos/logback/core/boolex/EventEvaluatorBase.classPK   ]WcĴ    9             e  ch/qos/logback/core/boolex/JaninoEventEvaluatorBase.classPK   ]W:J  ~  (               ch/qos/logback/core/boolex/Matcher.classPK   ]W
pӄ    /             v  ch/qos/logback/core/encoder/ByteArrayUtil.classPK   ]WAzm    -             W  ch/qos/logback/core/encoder/EchoEncoder.classPK   ]WvX     )             ɬ  ch/qos/logback/core/encoder/Encoder.classPK   ]Wl    -               ch/qos/logback/core/encoder/EncoderBase.classPK   ]WC1  u  0               ch/qos/logback/core/encoder/JsonEscapeUtil.classPK   ]Wz
    7               ch/qos/logback/core/encoder/LayoutWrappingEncoder.classPK   ]Wԉ&_  s  8               ch/qos/logback/core/encoder/NonClosableInputStream.classPK   ]Ws    6               ch/qos/logback/core/filter/AbstractMatcherFilter.classPK   ]WV,j  
  0               ch/qos/logback/core/filter/EvaluatorFilter.classPK   ]Wm[*    '               ch/qos/logback/core/filter/Filter.classPK   ]Wa%&    .             [  ch/qos/logback/core/helpers/CyclicBuffer.classPK   ]We`    -               ch/qos/logback/core/helpers/NOPAppender.classPK   ]Wg	  K  8               ch/qos/logback/core/helpers/ThrowableToStringArray.classPK   ]W{  
  +               ch/qos/logback/core/helpers/Transform.classPK   ]W    2               ch/qos/logback/core/hook/DefaultShutdownHook.classPK   ]W˫A      +               ch/qos/logback/core/hook/ShutdownHook.classPK   ]WZ/
  r  /               ch/qos/logback/core/hook/ShutdownHookBase.classPK   ]W1^      )               ch/qos/logback/core/html/CssBuilder.classPK   ]WQojy    -               ch/qos/logback/core/html/HTMLLayoutBase.classPK   ]W~?h   9  1               ch/qos/logback/core/html/IThrowableRenderer.classPK   ]W-Z    3               ch/qos/logback/core/html/NOPThrowableRenderer.classPK   ]Wb(  '  6               ch/qos/logback/core/joran/GenericXMLConfigurator.classPK   ]Wz6  %  5             s ch/qos/logback/core/joran/JoranConfiguratorBase.classPK   ]Wc     .              ch/qos/logback/core/joran/JoranConstants.classPK   ]W%Jj    B              ch/qos/logback/core/joran/ModelClassToModelHandlerLinkerBase.classPK   ]Wc~  	  1             u ch/qos/logback/core/joran/ParamModelHandler.classPK   ]WXΆ%  Z  -               ch/qos/logback/core/joran/action/Action.classPK   ]W,  Z  7             & ch/qos/logback/core/joran/action/ActionUtil$Scope.classPK   ]W℣3H    1             ) ch/qos/logback/core/joran/action/ActionUtil.classPK   ]Wu  R  5             , ch/qos/logback/core/joran/action/AppenderAction.classPK   ]WFo    8             0 ch/qos/logback/core/joran/action/AppenderRefAction.classPK   ]Wާɿ    6             g3 ch/qos/logback/core/joran/action/BaseModelAction.classPK   ]WwEG   \  <             9 ch/qos/logback/core/joran/action/ContextPropertyAction.classPK   ]WC  n  ;             ; ch/qos/logback/core/joran/action/ConversionRuleAction.classPK   ]WA
Q    ;             A ch/qos/logback/core/joran/action/DefinePropertyAction.classPK   ]Wң  8  ;             vE ch/qos/logback/core/joran/action/EventEvaluatorAction.classPK   ]W*Z_    J             H ch/qos/logback/core/joran/action/ImcplicitActionDataForBasicProperty.classPK   ]W?r  "  :             J ch/qos/logback/core/joran/action/ImplicitModelAction.classPK   ]WD	  s  8             vP ch/qos/logback/core/joran/action/ImplicitModelData.classPK   ]W
0W  
  J             R ch/qos/logback/core/joran/action/ImplicitModelDataForComplexProperty.classPK   ]W{m    3             T ch/qos/logback/core/joran/action/ImportAction.classPK   ]W=\  i$  4             X ch/qos/logback/core/joran/action/IncludeAction.classPK   ]WI}  R  0             Yi ch/qos/logback/core/joran/action/NOPAction.classPK   ]WtZm  <  4             4k ch/qos/logback/core/joran/action/NewRuleAction.classPK   ]W
;H  

  2             {p ch/qos/logback/core/joran/action/ParamAction.classPK   ]W(1  p  <             #u ch/qos/logback/core/joran/action/PreconditionValidator.classPK   ]W7={  8  5             z ch/qos/logback/core/joran/action/PropertyAction.classPK   ]WJ`E  B  D             ~ ch/qos/logback/core/joran/action/SequenceNumberGeneratorAction.classPK   ]Wz#  z  ;             Ձ ch/qos/logback/core/joran/action/SerializeModelAction.classPK   ]W!o@[  l  9             F ch/qos/logback/core/joran/action/ShutdownHookAction.classPK   ]Wd>p{    1              ch/qos/logback/core/joran/action/SiftAction.classPK   ]W6  i	  ;              ch/qos/logback/core/joran/action/StatusListenerAction.classPK   ]WV    6              ch/qos/logback/core/joran/action/TimestampAction.classPK   ]Wl      5              ch/qos/logback/core/joran/conditional/Condition.classPK   ]W	qvu  5  6              ch/qos/logback/core/joran/conditional/ElseAction.classPK   ]Wq  !  4             z ch/qos/logback/core/joran/conditional/IfAction.classPK   ]W$F  3
  E             ۙ ch/qos/logback/core/joran/conditional/PropertyEvalScriptBuilder.classPK   ]WV$    E             7 ch/qos/logback/core/joran/conditional/PropertyWrapperForScripts.classPK   ]W:ύv  5  6             ? ch/qos/logback/core/joran/conditional/ThenAction.classPK   ]W  \  /              ch/qos/logback/core/joran/event/BodyEvent.classPK   ]Wrnx    .             t ch/qos/logback/core/joran/event/EndEvent.classPK   ]W"%  ,  .             H ch/qos/logback/core/joran/event/SaxEvent.classPK   ]W6  #  6              ch/qos/logback/core/joran/event/SaxEventRecorder.classPK   ]WXՅ    0             " ch/qos/logback/core/joran/event/StartEvent.classPK   ]W:[    4             J ch/qos/logback/core/joran/event/stax/BodyEvent.classPK   ]W3 Y    3             x ch/qos/logback/core/joran/event/stax/EndEvent.classPK   ]WNO=  s  5             2 ch/qos/logback/core/joran/event/stax/StartEvent.classPK   ]Wz    4              ch/qos/logback/core/joran/event/stax/StaxEvent.classPK   ]WJp    <              ch/qos/logback/core/joran/event/stax/StaxEventRecorder.classPK   ]WT   n  2              ch/qos/logback/core/joran/node/ComponentNode.classPK   ]Wo"  
  J              ch/qos/logback/core/joran/sanity/AppenderWithinAppenderSanityChecker.classPK   ]WOBw    +             Q ch/qos/logback/core/joran/sanity/Pair.classPK   ]W"!@X    4             ! ch/qos/logback/core/joran/sanity/SanityChecker.classPK   ]W}    3              ch/qos/logback/core/joran/spi/ActionException.classPK   ]Wه  m  :              ch/qos/logback/core/joran/spi/CAI_WithLocatorSupport.classPK   ]W ^    :             9 ch/qos/logback/core/joran/spi/ConfigurationWatchList.classPK   ]W.a-    3              ch/qos/logback/core/joran/spi/ConsoleTarget$1.classPK   ]W4-    3              ch/qos/logback/core/joran/spi/ConsoleTarget$2.classPK   ]WGJ
    1              ch/qos/logback/core/joran/spi/ConsoleTarget.classPK   ]WŃ1%    0              ch/qos/logback/core/joran/spi/DefaultClass.classPK   ]W  `
  B             
  ch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry.classPK   ]WaN<  F
  /              ch/qos/logback/core/joran/spi/ElementPath.classPK   ]W!    3              ch/qos/logback/core/joran/spi/ElementSelector.classPK   ]W:    /             ? ch/qos/logback/core/joran/spi/EventPlayer.classPK   ]Wǩ9  '  >             | ch/qos/logback/core/joran/spi/HostClassAndPropertyDouble.classPK   ]W$ڕn  t  2             ! ch/qos/logback/core/joran/spi/JoranException.classPK   ]WEG]   i  3              ch/qos/logback/core/joran/spi/NewRuleProvider.classPK   ]WK     /             7 ch/qos/logback/core/joran/spi/NoAutoStart.classPK   ]W    3              ch/qos/logback/core/joran/spi/NoAutoStartUtil.classPK   ]Wg0:    -               ch/qos/logback/core/joran/spi/RuleStore.classPK   ]Ww{t  #
  A             i" ch/qos/logback/core/joran/spi/SaxEventInterpretationContext.classPK   ]W}
  "  7             L( ch/qos/logback/core/joran/spi/SaxEventInterpreter.classPK   ]W  !  3             .6 ch/qos/logback/core/joran/spi/SimpleRuleStore.classPK   ]Wx  r  +             E ch/qos/logback/core/joran/spi/XMLUtil.classPK   ]W]>    ?             tG ch/qos/logback/core/joran/util/ConfigurationWatchListUtil.classPK   ]WיW    >             N ch/qos/logback/core/joran/util/ParentTag_Tag_Class_Tuple.classPK   ]W)jK    5             P ch/qos/logback/core/joran/util/PropertySetter$1.classPK   ]WL  .  3             S ch/qos/logback/core/joran/util/PropertySetter.classPK   ]W
	  U  <             h ch/qos/logback/core/joran/util/StringToObjectConverter.classPK   ]WVp  r  :             %r ch/qos/logback/core/joran/util/beans/BeanDescription.classPK   ]W*	H[    ?             u ch/qos/logback/core/joran/util/beans/BeanDescriptionCache.classPK   ]Wf    A             y ch/qos/logback/core/joran/util/beans/BeanDescriptionFactory.classPK   ]Wl  q  3             ~ ch/qos/logback/core/joran/util/beans/BeanUtil.classPK   ]W =.n  &  +             6 ch/qos/logback/core/layout/EchoLayout.classPK   ]WB    -              ch/qos/logback/core/model/AppenderModel.classPK   ]W b  d  0             % ch/qos/logback/core/model/AppenderRefModel.classPK   ]W:jX}  	  .             : ch/qos/logback/core/model/ComponentModel.classPK   ]W:ۿ    +              ch/qos/logback/core/model/DefineModel.classPK   ]WeW|    3              ch/qos/logback/core/model/EventEvaluatorModel.classPK   ]WGMH      +             Ҙ ch/qos/logback/core/model/INamedModel.classPK   ]WԪk    -             ʙ ch/qos/logback/core/model/ImplicitModel.classPK   ]WzȻ  W  +              ch/qos/logback/core/model/ImportModel.classPK   ]W)."    ,              ch/qos/logback/core/model/IncludeModel.classPK   ]WkVFVF    3             z ch/qos/logback/core/model/InsertFromJNDIModel.classPK   ]WfvO  H  %             ! ch/qos/logback/core/model/Model.classPK   ]WMA    .             í ch/qos/logback/core/model/ModelConstants.classPK   ]Wݕ     9             ` ch/qos/logback/core/model/ModelHandlerFactoryMethod.classPK   ]W«>    +              ch/qos/logback/core/model/ModelUtil$1.classPK   ]Wt  	  )             " ch/qos/logback/core/model/ModelUtil.classPK   ]W+EK!  *
  3              ch/qos/logback/core/model/NamedComponentModel.classPK   ]W%8l    *              ch/qos/logback/core/model/NamedModel.classPK   ]W'\o    *             C ch/qos/logback/core/model/ParamModel.classPK   ]W<X  	  -             
 ch/qos/logback/core/model/PropertyModel.classPK   ]Wf+`v  .  <              ch/qos/logback/core/model/SequenceNumberGeneratorModel.classPK   ]W
    3              ch/qos/logback/core/model/SerializeModelModel.classPK   ]W>r    1               ch/qos/logback/core/model/ShutdownHookModel.classPK   ]W=Z  m  )              ch/qos/logback/core/model/SiftModel.classPK   ]Wڱt  
  3              ch/qos/logback/core/model/StatusListenerModel.classPK   ]Wq  
  .             W ch/qos/logback/core/model/TimestampModel.classPK   ]Wi^`    5             C ch/qos/logback/core/model/conditional/ElseModel.classPK   ]Wky'    ?              ch/qos/logback/core/model/conditional/IfModel$BranchState.classPK   ]Wb  v  3              ch/qos/logback/core/model/conditional/IfModel.classPK   ]W\    5              ch/qos/logback/core/model/conditional/ThenModel.classPK   ]W0V    =              ch/qos/logback/core/model/processor/AllowAllModelFilter.classPK   ]WT
  X  :              ch/qos/logback/core/model/processor/AllowModelFilter.classPK   ]Wkc    >              ch/qos/logback/core/model/processor/AppenderModelHandler.classPK   ]W@    G             ~ ch/qos/logback/core/model/processor/AppenderRefDependencyAnalyser.classPK   ]WQC    A              ch/qos/logback/core/model/processor/AppenderRefModelHandler.classPK   ]W1^  Q  >             M ch/qos/logback/core/model/processor/ChainedModelFilter$1.classPK   ]WBB  
  <              ch/qos/logback/core/model/processor/ChainedModelFilter.classPK   ]W>  \  <             j ch/qos/logback/core/model/processor/DefaultProcessor$1.classPK   ]W15!     I              ch/qos/logback/core/model/processor/DefaultProcessor$TraverseMethod.classPK   ]WTz8X  7  :              ch/qos/logback/core/model/processor/DefaultProcessor.classPK   ]WD  d  <              ch/qos/logback/core/model/processor/DefineModelHandler.classPK   ]WV    <             % ch/qos/logback/core/model/processor/DenyAllModelFilter.classPK   ]WO
  D  9             B' ch/qos/logback/core/model/processor/DenyModelFilter.classPK   ]W}    >             ) ch/qos/logback/core/model/processor/DependencyDefinition.classPK   ]W2 	    D             + ch/qos/logback/core/model/processor/EventEvaluatorModelHandler.classPK   ]W<T    @             /5 ch/qos/logback/core/model/processor/ImplicitModelHandler$1.classPK   ]WraN0  y#  >             7 ch/qos/logback/core/model/processor/ImplicitModelHandler.classPK   ]WY7    <             1G ch/qos/logback/core/model/processor/ImportModelHandler.classPK   ]Wo#ыV    D             }L ch/qos/logback/core/model/processor/InsertFromJNDIModelHandler.classPK   ]W      5             ES ch/qos/logback/core/model/processor/ModelFilter.classPK   ]WY  +	  :             GT ch/qos/logback/core/model/processor/ModelHandlerBase.classPK   ]Wi^  D  ?             X ch/qos/logback/core/model/processor/ModelHandlerException.classPK   ]WpE  #  D             wZ ch/qos/logback/core/model/processor/ModelInterpretationContext.classPK   ]W^i    9             .i ch/qos/logback/core/model/processor/NOPModelHandler.classPK   ]W6%I:  H  8             5k ch/qos/logback/core/model/processor/PhaseIndicator.classPK   ]W    9             l ch/qos/logback/core/model/processor/ProcessingPhase.classPK   ]WQ4]  ;  <             o ch/qos/logback/core/model/processor/ProcessorException.classPK   ]W4	    >             q ch/qos/logback/core/model/processor/PropertyModelHandler.classPK   ]WZ7    H             { ch/qos/logback/core/model/processor/RefContainerDependencyAnalyser.classPK   ]WVkW|  i  M             D ch/qos/logback/core/model/processor/SequenceNumberGeneratorModelHandler.classPK   ]Wa:  ]  D             ; ch/qos/logback/core/model/processor/SerializeModelModelHandler.classPK   ]WҦ%X    B              ch/qos/logback/core/model/processor/ShutdownHookModelHandler.classPK   ]WI~    D             e ch/qos/logback/core/model/processor/StatusListenerModelHandler.classPK   ]W0g  ^  ?             U ch/qos/logback/core/model/processor/TimestampModelHandler.classPK   ]WArm    F             d ch/qos/logback/core/model/processor/conditional/ElseModelHandler.classPK   ]W阓    K             E ch/qos/logback/core/model/processor/conditional/IfModelHandler$Branch.classPK   ]WM	    D             Q ch/qos/logback/core/model/processor/conditional/IfModelHandler.classPK   ]W*w    F             ֹ ch/qos/logback/core/model/processor/conditional/ThenModelHandler.classPK   ]WM  H  ,              ch/qos/logback/core/model/util/TagUtil.classPK   ]Wr  	  7             8 ch/qos/logback/core/net/AbstractSSLSocketAppender.classPK   ]W5!!  c  6             q ch/qos/logback/core/net/AbstractSocketAppender$1.classPK   ]WbRm  +  4              ch/qos/logback/core/net/AbstractSocketAppender.classPK   ]WrW  9  6              ch/qos/logback/core/net/AutoFlushingObjectWriter.classPK   ]W2$    L              ch/qos/logback/core/net/DefaultSocketConnector$ConsoleExceptionHandler.classPK   ]Wy5X,  Q  4               ch/qos/logback/core/net/DefaultSocketConnector.classPK   ]W2e:  z  7              ch/qos/logback/core/net/HardenedObjectInputStream.classPK   ]WHh    0             - ch/qos/logback/core/net/LoginAuthenticator.classPK   ]W؏f      *              ch/qos/logback/core/net/ObjectWriter.classPK   ]WI  1  1              ch/qos/logback/core/net/ObjectWriterFactory.classPK   ]W	O8    *              ch/qos/logback/core/net/QueueFactory.classPK   ]W^>\  G  =               ch/qos/logback/core/net/SMTPAppenderBase$SenderRunnable.classPK   ]W&U  M  .              ch/qos/logback/core/net/SMTPAppenderBase.classPK   ]WX"   i  >             x ch/qos/logback/core/net/SocketConnector$ExceptionHandler.classPK   ]Wǹ  k  -              ch/qos/logback/core/net/SocketConnector.classPK   ]WaV.6
  7  0              ch/qos/logback/core/net/SyslogAppenderBase.classPK   ]Wlq    -             b' ch/qos/logback/core/net/SyslogConstants.classPK   ]W -    0             P* ch/qos/logback/core/net/SyslogOutputStream.classPK   ]Wq+Տ  )  C             . ch/qos/logback/core/net/server/AbstractServerSocketAppender$1.classPK   ]Ws|Vol	    A             1 ch/qos/logback/core/net/server/AbstractServerSocketAppender.classPK   ]W      +             ; ch/qos/logback/core/net/server/Client.classPK   ]Wm   -  2             < ch/qos/logback/core/net/server/ClientVisitor.classPK   ]Wf"    =             = ch/qos/logback/core/net/server/ConcurrentServerRunner$1.classPK   ]W)M    I             A@ ch/qos/logback/core/net/server/ConcurrentServerRunner$ClientWrapper.classPK   ]WJTM	  .  ;             _C ch/qos/logback/core/net/server/ConcurrentServerRunner.classPK   ]WP    9             WM ch/qos/logback/core/net/server/RemoteReceiverClient.classPK   ]WшC    A             N ch/qos/logback/core/net/server/RemoteReceiverServerListener.classPK   ]W.(  U  ?             0Q ch/qos/logback/core/net/server/RemoteReceiverServerRunner.classPK   ]Wt    ?             LT ch/qos/logback/core/net/server/RemoteReceiverStreamClient.classPK   ]WJA;  	  @             \ ch/qos/logback/core/net/server/SSLServerSocketAppenderBase.classPK   ]WRM    3             ` ch/qos/logback/core/net/server/ServerListener.classPK   ]W@c.  B  1             Db ch/qos/logback/core/net/server/ServerRunner.classPK   ]W>  A  9             c ch/qos/logback/core/net/server/ServerSocketListener.classPK   ]Wk$    D             g ch/qos/logback/core/net/ssl/ConfigurableSSLServerSocketFactory.classPK   ]W6%    >              k ch/qos/logback/core/net/ssl/ConfigurableSSLSocketFactory.classPK   ]Wqh  {  >             n ch/qos/logback/core/net/ssl/KeyManagerFactoryFactoryBean.classPK   ]W'uC    5             q ch/qos/logback/core/net/ssl/KeyStoreFactoryBean.classPK   ]W\  o  %             Ly ch/qos/logback/core/net/ssl/SSL.classPK   ]W     .             z ch/qos/logback/core/net/ssl/SSLComponent.classPK   ]W    1             { ch/qos/logback/core/net/ssl/SSLConfigurable.classPK   ]W1    =             (} ch/qos/logback/core/net/ssl/SSLConfigurableServerSocket.classPK   ]W^}Q    7             B ch/qos/logback/core/net/ssl/SSLConfigurableSocket.classPK   ]Wyl  \  2              ch/qos/logback/core/net/ssl/SSLConfiguration.classPK   ]WmX    7              ch/qos/logback/core/net/ssl/SSLContextFactoryBean.classPK   ]W,A  W  A             & ch/qos/logback/core/net/ssl/SSLNestedComponentRegistryRules.classPK   ]W)	    <             ֔ ch/qos/logback/core/net/ssl/SSLParametersConfiguration.classPK   ]W  @  9             i ch/qos/logback/core/net/ssl/SecureRandomFactoryBean.classPK   ]W)ϊ    @              ch/qos/logback/core/net/ssl/TrustManagerFactoryFactoryBean.classPK   ]W  	  4              ch/qos/logback/core/pattern/CompositeConverter.classPK   ]W  
  +             é ch/qos/logback/core/pattern/Converter.classPK   ]W#  k	  /             ͬ ch/qos/logback/core/pattern/ConverterUtil.classPK   ]W8D8  
  2              ch/qos/logback/core/pattern/DynamicConverter.classPK   ]W    ,              ch/qos/logback/core/pattern/FormatInfo.classPK   ]W["  p	  5             7 ch/qos/logback/core/pattern/FormattingConverter.classPK   ]Wo
  t  <              ch/qos/logback/core/pattern/IdentityCompositeConverter.classPK   ]W|X  O  2             
 ch/qos/logback/core/pattern/LiteralConverter.classPK   ]WȢ@
  0  3               ch/qos/logback/core/pattern/PatternLayoutBase.classPK   ]WjV  	  :              ch/qos/logback/core/pattern/PatternLayoutEncoderBase.classPK   ]W.^     6              ch/qos/logback/core/pattern/PostCompileProcessor.classPK   ]WŖ  	  =             < ch/qos/logback/core/pattern/ReplacingCompositeConverter.classPK   ]Wt`    -             = ch/qos/logback/core/pattern/SpacePadder.classPK   ]WͶ  1  5              ch/qos/logback/core/pattern/color/ANSIConstants.classPK   ]W3    ?              ch/qos/logback/core/pattern/color/BlackCompositeConverter.classPK   ]W5    >              ch/qos/logback/core/pattern/color/BlueCompositeConverter.classPK   ]W恧    B              ch/qos/logback/core/pattern/color/BoldBlueCompositeConverter.classPK   ]W\7'    B              ch/qos/logback/core/pattern/color/BoldCyanCompositeConverter.classPK   ]W
    C             ) ch/qos/logback/core/pattern/color/BoldGreenCompositeConverter.classPK   ]Wr@    E             E ch/qos/logback/core/pattern/color/BoldMagentaCompositeConverter.classPK   ]W    A             f ch/qos/logback/core/pattern/color/BoldRedCompositeConverter.classPK   ]WfwD    C             } ch/qos/logback/core/pattern/color/BoldWhiteCompositeConverter.classPK   ]W"    D              ch/qos/logback/core/pattern/color/BoldYellowCompositeConverter.classPK   ]W>NЦ    >              ch/qos/logback/core/pattern/color/CyanCompositeConverter.classPK   ]Wmw    H              ch/qos/logback/core/pattern/color/ForegroundCompositeConverterBase.classPK   ]W`>    >              ch/qos/logback/core/pattern/color/GrayCompositeConverter.classPK   ]W    ?              ch/qos/logback/core/pattern/color/GreenCompositeConverter.classPK   ]W)l    A              ch/qos/logback/core/pattern/color/MagentaCompositeConverter.classPK   ]Wq    =              ch/qos/logback/core/pattern/color/RedCompositeConverter.classPK   ]W
ˣ    ?              ch/qos/logback/core/pattern/color/WhiteCompositeConverter.classPK   ]WH    @             ! ch/qos/logback/core/pattern/color/YellowCompositeConverter.classPK   ]WG#	  j  1             8 ch/qos/logback/core/pattern/parser/Compiler.classPK   ]WT  X  6             ; ch/qos/logback/core/pattern/parser/CompositeNode.classPK   ]W4  <  7             x ch/qos/logback/core/pattern/parser/FormattingNode.classPK   ]WF`
  I
  -             } ch/qos/logback/core/pattern/parser/Node.classPK   ]WWV>q<  Q  8              ch/qos/logback/core/pattern/parser/OptionTokenizer.classPK   ]Ww[
  ;   /             # ch/qos/logback/core/pattern/parser/Parser.classPK   ]W#  
  :             1 ch/qos/logback/core/pattern/parser/SimpleKeywordNode.classPK   ]W'z  
  .             6 ch/qos/logback/core/pattern/parser/Token.classPK   ]Wg37  E  C             = ch/qos/logback/core/pattern/parser/TokenStream$TokenizerState.classPK   ]Wv
    4             SA ch/qos/logback/core/pattern/parser/TokenStream.classPK   ]W.    ;             mL ch/qos/logback/core/pattern/util/AlmostAsIsEscapeUtil.classPK   ]W[`    5             bN ch/qos/logback/core/pattern/util/AsIsEscapeUtil.classPK   ]W4
      2             qP ch/qos/logback/core/pattern/util/IEscapeUtil.classPK   ]W(  K
  8             mQ ch/qos/logback/core/pattern/util/RegularEscapeUtil.classPK   ]W[    ;             _W ch/qos/logback/core/pattern/util/RestrictedEscapeUtil.classPK   ]WvR    C             Y ch/qos/logback/core/property/CanonicalHostNamePropertyDefiner.classPK   ]WzT]H  1  <             [ ch/qos/logback/core/property/FileExistsPropertyDefiner.classPK   ]Wq    @             ^^ ch/qos/logback/core/property/ResourceExistsPropertyDefiner.classPK   ]W@1d  y  3             =a ch/qos/logback/core/read/CyclicBufferAppender.classPK   ]Wh  i  +             e ch/qos/logback/core/read/ListAppender.classPK   ]W;    6              g ch/qos/logback/core/recovery/RecoveryCoordinator.classPK   ]Wz      3             j ch/qos/logback/core/recovery/RecoveryListener.classPK   ]W!q-    <             k ch/qos/logback/core/recovery/ResilientFileOutputStream.classPK   ]WF
    <             fp ch/qos/logback/core/recovery/ResilientOutputStreamBase.classPK   ]W"Y    >             { ch/qos/logback/core/recovery/ResilientSyslogOutputStream.classPK   ]WeBؙ    O             v ch/qos/logback/core/rolling/DefaultTimeBasedFileNamingAndTriggeringPolicy.classPK   ]W>*E    <              ch/qos/logback/core/rolling/FixedWindowRollingPolicy$1.classPK   ]Wis    :              ch/qos/logback/core/rolling/FixedWindowRollingPolicy.classPK   ]W*  #  5              ch/qos/logback/core/rolling/RollingFileAppender.classPK   ]W#;1    /              ch/qos/logback/core/rolling/RollingPolicy.classPK   ]WoJ  	  3             , ch/qos/logback/core/rolling/RollingPolicyBase.classPK   ]WWk׆    1              ch/qos/logback/core/rolling/RolloverFailure.classPK   ]Ww~0  `  =             y ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP$Usage.classPK   ]W;<
    7             u ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP.classPK   ]WL{  p  ?              ch/qos/logback/core/rolling/SizeAndTimeBasedRollingPolicy.classPK   ]Wh
P  	  ;              ch/qos/logback/core/rolling/SizeBasedTriggeringPolicy.classPK   ]WF  `  H              ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicy.classPK   ]WM
  -  L              ch/qos/logback/core/rolling/TimeBasedFileNamingAndTriggeringPolicyBase.classPK   ]Wv-  &  8              ch/qos/logback/core/rolling/TimeBasedRollingPolicy.classPK   ]W   y  2              ch/qos/logback/core/rolling/TriggeringPolicy.classPK   ]W    6             6 ch/qos/logback/core/rolling/TriggeringPolicyBase.classPK   ]WT0#    7             < ch/qos/logback/core/rolling/helper/ArchiveRemover.classPK   ]W|m    8              ch/qos/logback/core/rolling/helper/CompressionMode.classPK   ]W|/  k  5              ch/qos/logback/core/rolling/helper/Compressor$1.classPK   ]W()  a  G              ch/qos/logback/core/rolling/helper/Compressor$CompressionRunnable.classPK   ]W     3              ch/qos/logback/core/rolling/helper/Compressor.classPK   ]WX  B  ;              ch/qos/logback/core/rolling/helper/DateTokenConverter.classPK   ]WaQ]  y  9             j	 ch/qos/logback/core/rolling/helper/FileFilterUtil$1.classPK   ]Wi
gc    9             . ch/qos/logback/core/rolling/helper/FileFilterUtil$2.classPK   ]Wf{    7              ch/qos/logback/core/rolling/helper/FileFilterUtil.classPK   ]W(~n    8              ch/qos/logback/core/rolling/helper/FileNamePattern.classPK   ]WN  L  6             $ ch/qos/logback/core/rolling/helper/FileStoreUtil.classPK   ]Wї  "
  >             +) ch/qos/logback/core/rolling/helper/IntegerTokenConverter.classPK   ]Wa՟      ;             y. ch/qos/logback/core/rolling/helper/MonoTypedConverter.classPK   ]WI44g    8             / ch/qos/logback/core/rolling/helper/PeriodicityType.classPK   ]W<BE  ~  3             N3 ch/qos/logback/core/rolling/helper/RenameUtil.classPK   ]Wl    :             < ch/qos/logback/core/rolling/helper/RollingCalendar$1.classPK   ]W
cצ     8             ? ch/qos/logback/core/rolling/helper/RollingCalendar.classPK   ]WXL#  [  I             N ch/qos/logback/core/rolling/helper/SizeAndTimeBasedArchiveRemover$1.classPK   ]W੔w  
  G             %S ch/qos/logback/core/rolling/helper/SizeAndTimeBasedArchiveRemover.classPK   ]Wm<=  {  V             X ch/qos/logback/core/rolling/helper/TimeBasedArchiveRemover$ArhiveRemoverRunnable.classPK   ]WLڷ     @             Z ch/qos/logback/core/rolling/helper/TimeBasedArchiveRemover.classPK   ]W+`    7             k ch/qos/logback/core/rolling/helper/TokenConverter.classPK   ]WO    4             bm ch/qos/logback/core/sift/AbstractDiscriminator.classPK   ]W,Z     .             ko ch/qos/logback/core/sift/AppenderFactory.classPK   ]W
3Y    >             p ch/qos/logback/core/sift/AppenderFactoryUsingSiftModel$1.classPK   ]W    <             ;s ch/qos/logback/core/sift/AppenderFactoryUsingSiftModel.classPK   ]WɣC  j  .             { ch/qos/logback/core/sift/AppenderTracker.classPK   ]Wf־    3             $ ch/qos/logback/core/sift/DefaultDiscriminator.classPK   ]W[fI     ,             C ch/qos/logback/core/sift/Discriminator.classPK   ]Wx޵  &  2              ch/qos/logback/core/sift/NOPSiftModelHandler.classPK   ]Ww`+    /              ch/qos/logback/core/sift/SiftModelHandler.classPK   ]Wv  D  ,              ch/qos/logback/core/sift/SiftProcessor.classPK   ]WfO  c  2              ch/qos/logback/core/sift/SiftingAppenderBase.classPK   ]WxNh  7  8              ch/qos/logback/core/spi/AbstractComponentTracker$1.classPK   ]W9N    8             	 ch/qos/logback/core/spi/AbstractComponentTracker$2.classPK   ]W>&S    8              ch/qos/logback/core/spi/AbstractComponentTracker$3.classPK   ]WeZ91    <             v ch/qos/logback/core/spi/AbstractComponentTracker$Entry.classPK   ]WI_('  Z  H              ch/qos/logback/core/spi/AbstractComponentTracker$RemovalPredicator.classPK   ]WlcGu    6              ch/qos/logback/core/spi/AbstractComponentTracker.classPK   ]WzO    0             y ch/qos/logback/core/spi/AppenderAttachable.classPK   ]W?b    4             & ch/qos/logback/core/spi/AppenderAttachableImpl.classPK   ]Wt    :              ch/qos/logback/core/spi/BasicSequenceNumberGenerator.classPK   ]Wq#  R  .             ƿ ch/qos/logback/core/spi/ComponentTracker.classPK   ]W  3  :              ch/qos/logback/core/spi/ConfigurationEvent$EventType.classPK   ]WK  P	  0             O ch/qos/logback/core/spi/ConfigurationEvent.classPK   ]WE       8             S ch/qos/logback/core/spi/ConfigurationEventListener.classPK   ]WGeЫ     *             O ch/qos/logback/core/spi/ContextAware.classPK   ]W%  
  .              ch/qos/logback/core/spi/ContextAwareBase.classPK   ]W7奻p  
  .              ch/qos/logback/core/spi/ContextAwareImpl.classPK   ]W;,5O  F  1             W ch/qos/logback/core/spi/CyclicBufferTracker.classPK   ]W5í}      5              ch/qos/logback/core/spi/DeferredProcessingAware.classPK   ]W{=  b  (              ch/qos/logback/core/spi/ErrorCodes.classPK   ]W"}w2  p  .              ch/qos/logback/core/spi/FilterAttachable.classPK   ]W)]  f	  2              ch/qos/logback/core/spi/FilterAttachableImpl.classPK   ]W +ʂf    )              ch/qos/logback/core/spi/FilterReply.classPK   ]WϤ      '             < ch/qos/logback/core/spi/LifeCycle.classPK   ]W   2  )             - ch/qos/logback/core/spi/LogbackLock.classPK   ]WH   E  9             \ ch/qos/logback/core/spi/PreSerializationTransformer.classPK   ]Wh   K  /              ch/qos/logback/core/spi/PropertyContainer.classPK   ]WE      -              ch/qos/logback/core/spi/PropertyDefiner.classPK   ]W+Ȥ    +              ch/qos/logback/core/spi/ScanException.classPK   ]W§      5              ch/qos/logback/core/spi/SequenceNumberGenerator.classPK   ]WHn9l    ,              ch/qos/logback/core/status/ErrorStatus.classPK   ]W4j    +             } ch/qos/logback/core/status/InfoStatus.classPK   ]WO;"  '  2             @ ch/qos/logback/core/status/NopStatusListener.classPK   ]WK	5  +  8              ch/qos/logback/core/status/OnConsoleStatusListener.classPK   ]W7  :  =             ] ch/qos/logback/core/status/OnErrorConsoleStatusListener.classPK   ]Wɲ    5              ch/qos/logback/core/status/OnFileStatusListener.classPK   ]W  (  @             f ch/qos/logback/core/status/OnPrintStreamStatusListenerBase.classPK   ]WO7    '             ` ch/qos/logback/core/status/Status.classPK   ]Wfb
  e  +              ch/qos/logback/core/status/StatusBase.classPK   ]WW{p     /             R ch/qos/logback/core/status/StatusListener.classPK   ]W    5              ch/qos/logback/core/status/StatusListenerAsList.classPK   ]W!
X  X  .              ch/qos/logback/core/status/StatusManager.classPK   ]WTN
  ~  +             H ch/qos/logback/core/status/StatusUtil.classPK   ]WqG    >             2" ch/qos/logback/core/status/ViewStatusMessagesServletBase.classPK   ]W>j    +             1 ch/qos/logback/core/status/WarnStatus.classPK   ]WTx    )             3 ch/qos/logback/core/subst/Node$Type.classPK   ]Wdӑ  Z  $             w6 ch/qos/logback/core/subst/Node.classPK   ]WO3  T  9             = ch/qos/logback/core/subst/NodeToStringTransformer$1.classPK   ]WQU#  '  7             8@ ch/qos/logback/core/subst/NodeToStringTransformer.classPK   ]We&	  V  (             zM ch/qos/logback/core/subst/Parser$1.classPK   ]W:=R	    &             O ch/qos/logback/core/subst/Parser.classPK   ]Wc  f  *             Y ch/qos/logback/core/subst/Token$Type.classPK   ]Wzo  	  %             \ ch/qos/logback/core/subst/Token.classPK   ]WP  w  8             a ch/qos/logback/core/subst/Tokenizer$TokenizerState.classPK   ]Wj  n  )             d ch/qos/logback/core/subst/Tokenizer.classPK   ]WIE    4             l ch/qos/logback/core/testUtil/CoreTestConstants.classPK   ]WSڐe    7             n ch/qos/logback/core/testUtil/DelayingListAppender.classPK   ]W,_  ;
  /             q ch/qos/logback/core/testUtil/DummyEncoder.classPK   ]Wj  	  2             Jw ch/qos/logback/core/testUtil/EnvUtilForTests.classPK   ]W'<\    /             | ch/qos/logback/core/testUtil/FileTestUtil.classPK   ]Wj    3              ch/qos/logback/core/testUtil/FileToBufferUtil.classPK   ]W'7  R  5             C ch/qos/logback/core/testUtil/MockInitialContext.classPK   ]W    <              ch/qos/logback/core/testUtil/MockInitialContextFactory.classPK   ]W'L    .              ch/qos/logback/core/testUtil/NPEAppender.classPK   ]W]    -              ch/qos/logback/core/testUtil/RandomUtil.classPK   ]WD;!j.  J  5              ch/qos/logback/core/testUtil/StringListAppender.classPK   ]Wյ    2             K ch/qos/logback/core/testUtil/TeeOutputStream.classPK   ]WRN    8             Ė ch/qos/logback/core/testUtil/TrivialStatusListener.classPK   ]W    3             x ch/qos/logback/core/testUtil/XTeeOutputStream.classPK   ]W1  u  .             o ch/qos/logback/core/util/AggregationType.classPK   ]W@\  P  +              ch/qos/logback/core/util/COWArrayList.classPK   ]WoƁw  s  >              ch/qos/logback/core/util/CachingDateFormatter$CacheTuple.classPK   ]WD  l
  3             ˨ ch/qos/logback/core/util/CachingDateFormatter.classPK   ]WDP  	  0              ch/qos/logback/core/util/CharSequenceState.classPK   ]W\  ^  8              ch/qos/logback/core/util/CharSequenceToRegexMapper.classPK   ]W`    (              ch/qos/logback/core/util/CloseUtil.classPK   ]WP    .             3 ch/qos/logback/core/util/ContentTypeUtil.classPK   ]WT%    *              ch/qos/logback/core/util/ContextUtil.classPK   ]W޻U=K    5             ' ch/qos/logback/core/util/DatePatternToRegexUtil.classPK   ]Wҵ.  y  4              ch/qos/logback/core/util/DefaultInvocationGate.classPK   ]W8      ,             e ch/qos/logback/core/util/DelayStrategy.classPK   ]WE    )             G ch/qos/logback/core/util/DirectJson.classPK   ]Wmk    '             1 ch/qos/logback/core/util/Duration.classPK   ]W)W  &  ;              ch/qos/logback/core/util/DynamicClassLoadingException.classPK   ]WE;  G  &              ch/qos/logback/core/util/EnvUtil.classPK   ]WPz  \
  4              ch/qos/logback/core/util/ExecutorServiceUtil$1.classPK   ]WbX  t
  2             Z ch/qos/logback/core/util/ExecutorServiceUtil.classPK   ]Wd    '             } ch/qos/logback/core/util/FileSize.classPK   ]WjƎ	    '             6 ch/qos/logback/core/util/FileUtil.classPK   ]W-9j    )              ch/qos/logback/core/util/FixedDelay.classPK   ]W9    9             ! ch/qos/logback/core/util/IncompatibleClassException.classPK   ]WN6s  a  ,             , ch/qos/logback/core/util/InterruptUtil.classPK   ]W呺      -             	 ch/qos/logback/core/util/InvocationGate.classPK   ]WĔ9  >	  '              ch/qos/logback/core/util/JNDIUtil.classPK   ]WCb  e  '              ch/qos/logback/core/util/Loader$1.classPK   ]W    '             Y ch/qos/logback/core/util/Loader$2.classPK   ]WNS    %              ch/qos/logback/core/util/Loader.classPK   ]WY":  I  +              ch/qos/logback/core/util/LocationUtil.classPK   ]W  
  1               ch/qos/logback/core/util/NetworkAddressUtil.classPK   ]W٠M    +             	& ch/qos/logback/core/util/OptionHelper.classPK   ]W<?]    6             H3 ch/qos/logback/core/util/PropertySetterException.classPK   ]WOZB  J  3             U5 ch/qos/logback/core/util/SimpleInvocationGate.classPK   ]Ws  
  9             8 ch/qos/logback/core/util/StatusListenerConfigHelper.classPK   ]W
    ,             = ch/qos/logback/core/util/StatusPrinter.classPK   ]WB)W  	  3             9I ch/qos/logback/core/util/StringCollectionUtil.classPK   ]W81FF    )             M ch/qos/logback/core/util/SystemInfo.classPK   ]WF  y  '             O ch/qos/logback/core/util/TimeUtil.classPK   ]WV    2             R META-INF/maven/ch.qos.logback/logback-core/pom.xmlPK   ]W
u9   >   9             EX META-INF/maven/ch.qos.logback/logback-core/pom.propertiesPK   ]WM                 X META-INF/INDEX.LISTPK   ]WXJ  L               sZ module-info.classPK    
  ]   PK  #W              META-INF/MANIFEST.MF  ]o0#?xT 킘Tn*+VMڕWCㄆv~ΗG<w[z&*IEwn[H9&g' #,@Ʋ|b-v{BȔ{:ՐĤ9#-3/9_m$*5Z71eZ$尣RM0	8iSVL/tkKm׮|ˍTZHBd%ZRe smE]>ie,ϑW
L=miHi̵z*H?(G{W#9!:!FBNtH:72mwxKgʗr{aaN!GN@wݚ:B\[!ŭT\0x`Ǝ_r0+\7jʴQ	2acƗ>.>Ƈ]ZEq$DŲr3`lJ$z=WWS$zO/5x KiujGvԍNZV~s­|n;fPK[ >  C  PK
    #W            	   META-INF/PK
    #W               META-INF/versions/PK
    #W               META-INF/versions/9/PK
    #W               org/PK
    #W            
   org/slf4j/PK
    #W               org/slf4j/event/PK
    #W               org/slf4j/helpers/PK
    #W               org/slf4j/spi/PK
    #W               META-INF/maven/PK
    #W               META-INF/maven/org.slf4j/PK
    #W            #   META-INF/maven/org.slf4j/slf4j-api/PK  #W               META-INF/LICENSE.txtURn0}⩕B{ڛIL1e}!Bl3}
mW	9{ӫՇ]wo_9C7@۩O2!rQCIQ;ڽW}{C72N:DoC vT_Zx ΙNHЛ|To}QaT̚lvՠWzdUvm0gDu㹏o:6|vh(4zo8htލ
Y:wNMN`FSջ7ir
sE`Mg;
(N1U#O 8DݩCQ4w&[1Gnhp#solhyC9J(@×rK Ԃ? 3K22	UT/TOՂ6
pu]2ZdzX Jf2KQ(bi"_,X&d
o ,ߔ$QêHWZ
ԦkZ>)(O6hLĶs^eAqsAӤddQҨ%a
&O48e+P7Wiy%3.;v6`MRpF4'$;kzЏv
JJ$kyPKrzI    PK  #W               org/slf4j/ILoggerFactory.class;o>Nv&Ft4,}O"JvFĲDļt}FBF5
̼tkMu֌\Eɩn9¨遌`cd`d`f Fl ;db  PKx      PK  #W               org/slf4j/IMarkerFactory.class;o>^v&Ft4,}OĢ"JvFĲDļt}FBF5
̼tkMu֌l%ŌtD12𤤖$&gZIMq%e22:Vd(##3  ;\ qJn  PK     PK  #W               org/slf4j/Logger.classsUǿ>ǖG!byATQڴFҤ%Tmzn
?8?ȌW(7
s=s#SFH~E=kBT,ۏ{б=߰}/Z
':^ތ9`	'3ҿT0Y6:hPoڦ^ñH≽4n_b	V_WMhCт-m԰b1caUfF*9*nӱv-" l
$fk].pidj,pF,;Hua"k:߉۾HW\w8ބkdgO)
Cbc9uTGDN^ܞs6tIõ7b<.F2\4nY"gXnDV"IqߥDo8%7ث*L^Vr򌎳g&f_T
sMcـ7u؎ኬ͢/Đ)hy-Űi&.S'1JU+uGu$Pҕ92-9RO	509NʁIeKS0n
SH,}=90J>1m$cXрwi%iJU	?i,	tfIlMHf;!wd
+c`?ozjnB1[#6|>-㾑]5l']}sIdLϤemG.op9/p._pmE@4ECh@6PFÙ4m#_fbuVdR΍.R>LN=G_A_VBk(OgnVޥ*CVIWjԮũQ'u,bVӸSpbؔ[{43N;W1Mp
1`_ǐߣy,5S=PwO'ZbP-4a|iR!Cf½&([HwdNYiL@/nǞsWCwRg=O=zoI*#eUH<BtNL=+iZ5cb?D??i|ÔQ|IWmG9uڛL[e,`r!Q7NkGţ5.KƮKmJ
+@iwިXЈh#^6嘹.mX,2WdUfYeUfYeUf,YX+@Ck̉Jh~!_g0KYRd"%,Ef)2KYRd,GXRXB):chga[rK&pfgX,l2,]k,,g,Rbץu)1SYz,%f)1KYJa ˱5+XjX*YoPK@%2C  
  PK  #W               org/slf4j/LoggerFactory.class[	|o,{y$v.T.+69$Ŗ%";!	őqDqmۻ'memHvrRJ.nv)7rb~X|vDA{NӼxpK2:H?~SĨN#㡖t*m$Q$rQUbK$Ime*"Ud4fPpK[4L2U6S	ںz,Qf4a'p$
@gnTHK߱agL݉L4Gͣ.'	BcN]}Gp|B,vFu3ۥ`
$^BKurCI19#)3!JZ%:SP<RS4HML3:%SX*JLi-@3tAki4SBp42RV8FX谈괁i
*htC|mZ_a,
j-U"ct&mZv'"#Q	"j<iItO8l&mX*FE1F<GiC6
yj)Ϯ+1OL+&hDaa&N;3i+oKG>pRR[Yɝm;Bߝ#9'쒥]kXBf"׵SC)hP70i>T,MG6gе2ۙ[w]ttAb94f"Ä9ODCD!)T!u<~O72O"Ae}X8bQQ}|h۠>*QD0(8~bYu̠K@:GmQ<C}>vA1JMt\IzSrAtFJ8^ӵôrj{=lD.AP4r)bЭ"O%#83n{f#3aXʴ&bOc5aӊw]gzwTKwd2c)IogM=J
'74+YEpL6+bi1"H
`Bx$EwNz*1x2鋚A*ljLYui2{z/m)w8O()Z/tAM'S2-jb=:}(a'A4vt+m0ϏD|$NeZ{C<
f>δy0 ,5e,#A):	N4elYit$ .Rn
NTX3'3'85\\|Ur;<㑐}KS=hi	4J)%L)ҿ=ߒijUQU}#3^φqTD:0HQ0ܒtzРK@
ل:aOkT$kOzTfIyzp
@țuƉbaE; ʯ'J%]wݪdoJmNbZTP2o3/N7H\:-=9JԿ#$,'}Ŋ{i
AN;YY(N)Hȩh_tmI%3,'.fZz*
%UGܡ 	q42HI?x~δcJ%bm	bn$JWЬ?;j%|9AnDX
أebh%KAqI{d<7'	jo,=dWUr~kbY2N2ς2\ڄ& x-QǠV
)opE-<}E\7PpHć[I};o0IQ:L%ST:eZZj5d
z[ =\npHmY㟈6s1KJ
eh^^E\۝j9)>fLg\-Oy%Sy@"!f<GA[.<_z[3꼰7lG//FghH"
^heNV֋IZJW%pj7%GK`l`֗NVr*PH`p#%.I\皴M8)`k5|6sΗѓMu!$ : @;R2+T/7
'baMX-tnjsz1E";ak%XJUV,j*L_c6n7"H,B+Y1MLاz!N]g*agNf#Ɍ(PB9({VeKYenY>=McpPhnQVWVWNGNip¡>jHҝT&> 0zu3;%uWQHi!c;	{傉< %&vJGT7S;5-s=uیC
vN>´?ॢc%lv;CshҝI:rmSS;Weٽ#>MXZ@PvMNF[u$G!P;5;yLEÈd:)p
@}}&4pFJ+0O
IeF	J@vc̰[T#SDl}"QQQTq0$dr?ßTAe72]:uY<Tz~3W=Ño7bg+}n%[H7a^"I
NrtopvۙZ}Q͈!9m{ENe=>6Z )vI|zɑ}N~?)[ޡHmx䑉@(n:"f:lL*@=䎇UlFIuɛIwQRo$itS
ne>+>~
6Pgrj3C͂?
Dgtؔ
߅Eɿik%:3ŋ%fN|7Auo_0nہn S
ĳO(j&m17\%fF7ʈm7Sإ3xl{{HܬpZUeAfs%?u~.NT-lq (71&>lWNLx@#g%$=jcx4(
υNn?!N33g~o
$'Ỳ÷~ʹo
zyکhL-[GYswގ5NXC1ʼ+A@p=s{={>fH:L+1N.tK-Qs 'xDяE2pˑgN@S u͗mj{o(zbUXU'qhyi_0]T'+k` _fٵ޻noW{}"jcZS/$O&9Lk_uMg@H_B!1ʳſ2;ngEe)+ik=^yof9?C$@Mܜ.̾-|'O:<>?nC
QP
)Y;={={]9fx9M@2$EnXGEH
ݒ${CpY} ¹	]Ea$Aɴ՞o$j'}mt, ǖcc[R嶂U11e
K:Ӄ)@hؖcZP{*^OlE(l/-<%Y|-OnmյzxǤ<0]ܙYe`Ddq0
~ߩߋX	I>c	4܈ogO[f+/wMoxQԇ2_w#p	 5oE^'B{ew=2'|/)b(jYöD4/̽Lҵv@q+KTU\lTw틋d6SOx wWe5~;,\]d	'XVC9QTO<{>̳r*'"}D )ϒ cˏY
S?GvW<OΡ	EVuOJP\ErX5b^hi-.k|YV2fL1_)2&?)yPU")Nc	$$XrjPFm44ZYyJ{-+ގvDl$'`P`CB

[C$gThiv\ѵ6!u/15[jw
dTY9?z"_{P?j&|'~SP`k'>S#)u&u@+sk78-T7w@ؾXLGUviJ
ѵ7e=t*5֢9~hlS7%75ƿ/bR1~%o7Q87;\#330v1;0v+i|^>ߖ_YZ9;[G.7 ZLNkfy+ǯ>*1oGhzC9h_iܪ\3F7;jhI2jTNKgT&EUtjh	ZJ]B7QL
tݢȿ Nڤ`TE뵹<D
5k!UZmaZ-n0׍;Ydg-,(FtYֿB.贲Z[Է\򙽭'+iMQ^a.{iQq!ƜߊoCojzYgPi
m%IB	KOT[]qFDkոg=%b-i`S];)A`, c#bx?d/m<GmL@֧hq>vUǨiga9@@a< ͥQT7@nTv j
{ƕ(+qf->[j֣Z[fLաmV"k\y={ ;ŧ?5Ik.ůS[%L='88fvzw3W	HnjDcP=1N^%Dthm0C1QH.xp#p Ln
ehDЍ&Mpo<M0M[gABST#$?|ݱc'L0eN< 6S_0LW2znmǩ	:h}4@(5A^ytA{̀\%emژ+=&tvy?8͂f-}NT9Nsg8F;I|ӡe;@tӀ	g:הO1dCcokˡӁ'B\EO2>].vM ߯ؿؿٿ_S}Г.|OQ1+J4s@y
/2q k5.Gװzv	oYfZ
QmDye:v+eսOhWTA	j Y{Y;x;l,WNw1 W)0^zqdg <+9Gg751#MC?]32w9<74~mG?Q;/J["A=$jJ΀PPhAe|	):۱;]X.9pL}WS7ߋq%bgÚsWɹ<'QL~jKt=`TyUqU#4ZΕ]r%W<ڛA<vrx+l|2<UbS~O٥yhh0˚/W֬jZwP}^m:TaSUL`ۙq3cWRJ<xUp-/"m
krBMb9Ŷo@/祝Mkxũ?nxhxցAem	ԝ,d,/Ki-i/<*dPcPZ]9xE!TuK)K"PTc#j$'suJT
yEЂZT,&Α@"JftRal)rݼU`~ց1޸|NTq<@z
Wʕz>[ݪ4V_8W:=Yt\pn`e
kZh_Jsx--ho _N˛4ȭ-+;PTh{qDm>rxUDVۏ3_; O;+
^WhArdzUYVPy*׹6ɍ_&'̶%^Bq͎aK'ˡ]8I.(duhb;Nsyj@%h	{Y5%*+%bf]>^FBʮ;Eb-p t*)5`ce͹}p{O"N^;pPXطV좹zhEG^8B pdࢫU0lԪbA*kie .;E,a#QCosh{Lև*p ~f>dX]dj˂1Nl
ybDPDaR
gtv^2
ш7~-Ӯ-g@[6:84q\P[>Ʒ 8S_x;mpրkmcn8e}Ri<+>l/ߦ~cA۴
p0r13A
DPIF|oG0*7Qf8ߚ˨Rika\~S趫r#61Paη!/0Gc6glf9`Ӥ;N4S!-yƘiy}XqU]vmdQh珜5qU
ISyʚ蓥ʷj={i:VA6? i8	.)%'ߢ-E:n͊tt]i-,VeynJc*>|cy^?yauYv C6SF(4:M箼hhʳ26E-%?
3œqʑFsC8s.τ.U=y%ph UGSEzQjǁ jjѢnZZ"Aik';ckye!90bJo$SX́\	Wv̓-1

㻊i9+sqBKAg
Gzii5PKf!oxAܾK( %@23i=#W%r,%g]ɪbϣ2_
׀ѿd? DE:/mef!5ǲ2WLnWޑ$}Ԇ5nEie}}\Y~/kY
$xo<#:UQ?H+	-i1pFMTpFVTPKCi  C  PK  #W            #   org/slf4j/LoggerFactoryFriend.class}PMK@}kh7E9qQ
I
=RZS(ăgfvf߼7?^ aIr*y=~
]nP8/9fU6QT03QI=0#HQc(1,YuZٙyժf˾O9kgXy"0(հ#J]-"}LX<YJr+ֿz*o^}a{q'-T
UЮû5OB#m<90/	ʌr~.CXH똢g LcrQ=^EvrZ*EBۄ %[*CyRʅ	PKuh  '  PK  #W               org/slf4j/MDC$1.classUL10󵅔O``&B
H/%VQ"%1 8`u (03̹d.+wꦤQc랐zMHtxqM;	ӿSdgQ!AC{!g=<}PK~œ      PK  #W                org/slf4j/MDC$MDCCloseable.classuRN@lK
~ETL&/#^W,6igh4>~=;gL]!"a` 
ÌԭнmX,ܮAw<u0^j^*ǫ6*:4$UBj!)96x_ߨ$C1B?2b:0U~"#o\CZ2(WFJU\FfɯnD	J^`	Ca[L;doA/wA9F-`{L.T䨩-d@5Х0Ź)GIIBGb+'B1L<L8G&4Uc\	UFۚ{ZRE]Pq)Ռ.RK|ͷ5ۣ7_:
dHRTE"V+:H2V(2FY
PK#    PK  #W               org/slf4j/MDC.classV[SEl$!	fs#C47@BuXe03Β/ZTiiZ-}R_	ws =x/:f-KLϵL
Am=mV1=2uM<sexɉbFC)n&wN.'xA,ۋOɸU6ТX[v$UȜVlr	hh6twZw#ЙPrFl;/9SJuRq,YsΤׯ_Ot)E\e)5͛y^Ű-[щ=(ص)S#5®%DBw?#_w?c%O28*=	t^8q] Aҫ0~J-pT]+iH$R0'4ǓۈőmywEw fS>pxyZRk5+pZK}墚=
+Neg\؛~FYoO۞5`P`gUլ],JwP/xK$ucZmxC]`ϥto/b(K.#B{Dpn]G(aggk:XF|W5vTafH;E1.p_eӣ\
вٴUC%f;T-z&g~ǯRD#J-oB72W^*Gwwtlj>;<<2ȯ0rH>7;6Q}COQ=%~!fj2h.OIwL
.jL6xFIYf_?r~A4X"XqSi}AٍɛrFҽK'J5l\Ǣs_w*Pp*NogUs38YNmMP]vrPD),fLTju1<\x=h.L%^aw{>4~Qu4#^e|
>t/oZoOҼii+FIP o޷Mv;hlߺ/>A?>ޱ]j}tH}N4LE¾I;VQdf?V\ߘtA}峵m컃dXk{|"jDaxIGuY	Gd!C	uD_ч]-n~*3HTow
e<.PMv?o hOϟ}xFL^<3-PbJߪxE\^Nܹ@*XQ!b7
	; j
9PbMIAB{(jet|_EEmBCheJVW)@t^L8}N"a*aiSuAբ`LϬ"R$Ct=>XyɹPIз9<KF	˸ XsmbgiLL.ENWu}ml
lR̃9SB%uGpov:v4ӛjjx	ڢPKM\6<  
  PK  #W               org/slf4j/Marker.classuR]OA=S"_X0q_xØ4UbY662l/۩O2j L;眽g]PX26O89+:g2)ΓÓ1e.BU$}J<)HN{>ԾJ{Nj7EI1bG`8bQN.ooáj{@jib?#HN;#U-ikZ=}IGک	
T϶I؉ڥ.8)X4#ʑXQ:U$:s*ҕݹwL3T!vy튼*}/eqpsãR})mFx* cxFMDy?ϣTA;x?L
!b1k|#<ړs!nY1/r/PKgõ    PK  #W               org/slf4j/MarkerFactory.classS[OA-l]n厀E+Ҋz	5"E^4v(K.$&_Q@M|d춴Bagܾ\;4  
;/aYcTr=0"
T
QhS+VzG_ήptmCBnimvaqm50b4|79Gщ.zcȑ!RnU09e4ͻ,ل|>
r/	ۢP5Đa
#Taʱd}RzȦ_s MqGcWpYCWBXmb;Ӽ0RY.-Qv|K
r
N5L*a
Iʶ©]iьQvyM]ĒK*	H)7*d-eȒx)5i&f&ֹ#=۲02VK-ET=3U{r}-CG^
/Sc+hn&hyvDH#N]3O:H nѩA:B$ݦVu
 " OPR_aݷ<;="Vܹ*¨oBpۈ}C?ƕ<rp3]9F"70Cj%AnlDއ,g) ,IsE>cKy_PK&
    PK  #W            )   org/slf4j/event/DefaultLoggingEvent.classVksg~0F
ƻ@`5hHⅈ
l&eG:cg3ڙNywey|Xx/9ye?0_"#NAXִ
+zV7J=#va
UUHVű夾Y}Qv\(9#'ݸ{)V;M1i>w{TDѫ \Ԭݪ\
36*v*~ei|A9]
:c٭xxCśRDkXگJ*~+Bd؇䬠۳l4'BHXO,A
㰊5$(Uc%nŦIyMMLrHIGX.FA81.*v\~Wq{	Da_׳YկjU	=9^Rqfl&%\ބS}ۊL8)^S<0sm·qAE\K4ิ"!R%.HcPTε-xEU!^gX޾"9kW(|Uq
s%:SƼD>fW-sW)㞞Hɮ(׎5d$֦[g@<K8UiV5$f),fdPlq!?).|	ZtsL Tt/SQr+3ڪK B%2S@Z[Cݮk3W\McNnΦXNVsBxYé坆%$5gu4IEE-=4Gi
]B iEHȋ2D9.2ZkHų(vy
4͊7\]F{u
f;iwi\
GLjJ{iD_ zol޳t
6=xg=i
=
8}SnwyV}&^@Il A'=s8 v8fX@%ʹ]7Kd7y{l`'o
o n:/n!,@NIZ1 x^)$6Ou.x˴ӥ~vاJ
t"<(DHQƪxE.M$$IP`XfH0eb)
"s)v0zQC[*_ԩ2HDr$uA۠lm~%*ithmQ4v<a/Ky剛%+zk܋.	Sv\ɚaIqȐ:>}үj3ȧUd-iwBu
B2.6?(k!&:",y"uuiqQtpl6:E-(HYy"bo@j֍ukgu	:DAC<n#Er9o6X?r(U_gҠ~~PK\   C  PK  #W            $   org/slf4j/event/EventConstants.class}N@&vhHK3XִS|.W&.| xڀs@Y,0B1+{+;
Hc1LYF|5{P1d.'%C~ϢPUc)ۖ{*dȷ-kw0,Oc}F"Erwe91W;uwTݼ
6߳V{*^}۴Kɘ
n@zy{eSh*"5Y!ê!=aFq灌y"Փk3l?
Zg!O22VWxx}K9 ޜ-m.y,Rh	H%)Cŉ_QrjUPK̔vJr  R  PK  #W            *   org/slf4j/event/EventRecordingLogger.classU[WWNnC 
FZ+5D0^ƢA+Xmzڵje}i.	y?
J!8,[9ڕܺ06B㵭ڼ-M6Cn$C43VNI)G2τ
$j]Mev%@=Q(88zF h]
p"3Vxখ+6K'Tc!fzNHCʏ'<=zn|Q^{RDӑ)3
Umco9hgۤ7Ăn|^Ϫ8#Jf~,Tdq΋`8)Ą1$%"La/x[ *=n?w{
7_5-`Rmٓu[:Na4/H*fCddV='t2ek^lN6b<eAuCܐPn[yՠ	sxCгǨ}vꓳunHe>a`ʹe:.727<FV?(%]3d9o5K^OS
f*SbP.,.jpPMvVuS,zE)^ڇ.ȹ6 b=涡b2&c;;)gDZnݙ3׬6[{l۲[un
h
n/D=t>
zz]2Ch7hTSnkTӾݝKߑ=cWڣ?HhzSkOfC4Qf=zQ^tQ~R%˳kbVNwQ0]8Ne0<]e4$iG
NbOZ#I8>$y.9f_e/D+e_a;:B$g$= G'0SaJF
Izup$~o}:#Z}ȱ]H9~䥎Hȫ@而) ɢT&d1oL?t=NPޕ&E_d:1ĕtbR?TwӉtś#tG,Dxg/wS+w ӔZ%h5GoK(E?VOUЀVM2T9`_p(XrQ$j<Nv

ZJ%lK}PK    PK  #W            "   org/slf4j/event/KeyValuePair.class}S[OAf햲-@nEHL &5MOCYb%᧘AD1XhΙ=9o U>]~6/뛻fa[eYd.ѥ!:HZJݴy`0[U3"@sN*2&Qp>ɝaX\-@ 0c7s4	0ogHku`}0oOlue ,``1xU$1_e
uđܒؼVc;+)5H3cٮ9*ܦtƆ&n1;+CfV*[Ul>4-{^)r;ϫCٱH+0Щ+s/}/,54@RGn%ؘAU(Bxڅ[. 5wqf$#?;F ڍ.
!t2,=N0D
ip\'3>A;E1.Eh0#LO%i 2.GHWm$ dc*I[x=wmJR1 XS"M} O(([|g|g!0Og
4b0D"%6.+GHT%wZ|G|/ɬ PK V    PK  #W               org/slf4j/event/Level.classuTmSF~
p84	8/5%cZSې$mFTH-NR2m?ӽCI5Zg_n LÔ0k醵=6M;
W݆?CMAB\X(2ۚf/W9pEA ե"
ۓ2G>QHq䪂2H7kF2bT aGrl!Hw=mv-]5.^C\ucgh{@Faa&q;kFPr]\	MCpִMwjⲧ\e&0x)20/L*B91Y$eketk^kQrT}tl	iZee/\Cmܴ]fRaao1L),y	d8x0:2n;nnTmjlMq'Q[\ܧu,d2)u,JI>͍v{w'2T1;
X"iVyYg6mciEDۮvSNUɽ=
q$%fnnl[cH14 eGuiRrO+BhjyzJf;\rdrYS{.]h!~=>OGʏtH(au#z!1<wPE~zR}}ʹiޜUy&Op#5Ԑ-nOb*ye1'_!*_/s%E{Es4&z-\H7|J|m',ΟD!I$C2J$A=zx^$L8<ÝUN0><c|1O7D~uj8&fqH
0[b{>
mZpuf. "S9gn ?RO**T	RDŖ.OxD?ʟ3Q5_$j'5XGFDU((#Z@ I>WOkL5(S]\l&PK1    PK  #W            "   org/slf4j/event/LoggingEvent.class}N0PZmwV "!n $@pHE\8M[c\9́c@O
 [R^nHC+
cPjz
C7ڼin|jJaC-F>À3';YhC a<QS$EPAӒ<_Ɔu)B4&~7KR&`Z;
:S	Bֻ7V	\8ch_OPn0g[3'c+y*~-tAԢШ/C~
/Z?jB-ḽ,vMSGn#iMlpg@=}VA*@[: W$I/eˤ+=Fz&7	Sn,}x\sλ5w1,:SPKƋkݬ  0  PK  #W            ,   org/slf4j/event/SubstituteLoggingEvent.classUkSF=kFy𐡉I
BC҄֮n#bdH2ΐ2Iۙ~e?ӻ+a:}jsg ,I!
b3Gzҫ}ceU]gR3$L 
L.e~82n6Wu\ӭV+jib[#ZUOA?>0lhN5f:jisMmJ
8kb2`41ыE!Uy\Tp	Ra;z`HsM	
URe
TY6C*&a䴂%Q1G/ܦ*`[K>E;ĵ+bl㚢zqjV%LX[Ȑt͊s!+_+XzeЋ\nFX倲]MߵH@Y`[un<y&ڎFJRUwn%|[ub	7/ ީ)AfVzeװ^Ui[67FݲIJmq}@Ky0f:t9
W@A%m*hXIo*͇W|t:C/mWhgT
DnN[KS^<yΫ3z@N4~!ג4qZٰK
ߝCjF_괹K;*|p|8.UOw#h^O\Ϻxe}o:R?0'cLju{ϸg|uG$20|ol]?GŸݡ7ݍNWh~K,I0pފpFjq<&?;½OhN	E\=/?QCka"a""8?O}#o>}r	%rS`3]
O*O5O'(c)_,M? Qt"\ȂT'x*St""a:(OO%DHK+a"kՁ?<+"Sa"D~+2&r0"a"Dtʈ̆h@75O8Od9E󏏘?n>A;A-IGIn,wB
iizPOPn%.FԗyաT~OL/5-%/0"aD?%!&R*#&bҁy[y;$[ePKyx  E
  PK  #W            &   org/slf4j/helpers/AbstractLogger.class	lWǿgz}dmٚI4کs8Mp|Չc7\dlכafqܤIPPRBHRJR	T@H\ތgwvެygv{;D^2**>Z4><qFL0{7WQ%UyZRxxzǙ=<x&`P7)Q-3
fgMhsRV3Đ"z/5Hw1;51} ƌFUgP{PZtU{DX5ѽ^Z}QcvMfErsJЃX-:Om2n-q9iYd.+،wsC*m,rk
!NxZQۖM,PN[qfw`pNBn잦avZ
֣Ov?w#*a@t:Qx207̇v"W>+fDsUi@C"JCV3rSHwddxE(&sbFDЧͅ53W}zW@{8z$}Kq:~xG#LbOЍBSZ~
4@j*M$SݱYhY:䚗\,/!J18kՍ_tx;B葁F ;'hb\AܛWݱ)
\dB7̉|Ịa6.*P+8;QkS#z<>UlƽtѽU#Ǡ	9C[v$MhgiVڛ$e73>E`":?w-k6
j>XeɆn,de0'Pbbq_Պfɏt$a|˚WjG=f\tw?v?0=΅c|ཁM%$isC
ShlΘB7<)e]S4{hB,)睸AFG'p؛bhbbxU4Kg:W7୒`cfWnRmZߛ_i'5O4b2}TxX+ExAbU8 /5tH}e	RݢÀ 2& ͨE(=IO!i*(8֛Un-j8f;)x3ۼzzF'qVH<]ZS FKz/p͛.\ n=O/^p>zZ6YDvQAr
}ZWN.ˮ&dGoo́7_`Ϟt#'"GypluٯHzď"f7F(\nRhr+h-Iv _%6h	*ZZ:\%>Bd>z뀼ZR0}QG9R|Q Q藊QR#εy_u(GIv[<.*fZ>J}|x [()nG|t﬌r9w;{"꿜Gk Aq)>JI}=O?]RRe!2}h}|K~~]RR9
u5 x>r\;~QJO?KRRrey2} _[)>J}ѾB>;2>J}NBF-G)Ƥ?R|K}*˼U-Gi
H- u(-Q~^Vl,Gi7[6GkwpQZO# t#uS>J}I|ൂ>:`R۾2>J}N;CUr9Ȯ# +GMGh(#Q"ѣ rxe>4}4\GC
c5⣌GB]
4zxe>r\w=^2rX<NK5d>}|4
^P)>}4bh`G(#~W;!JQF#ٵA^ c~&e3ST͞YVCט82qƹs\Dnϕq|ʎQ&^s9{,R}6gS}b9,VKnP|!ϯ{W;5s||؂h=B;kvvvvVGl
R^߈Jműͯܦ=~Ϗh-??g{D޵ueW!k$ճci2ʮG
L󬨠ͮͮͮͮ#BAF6٬CtJQUZ?+PK~	  1$  PK  #W            )   org/slf4j/helpers/BasicMDCAdapter$1.classS]oA=gYBko*m@Hj􁆤2eׅ.&+|&LQƻPL0l3wǙs;2@00";Wrrdk(<'>C3L7G鍥kECe^+ۆpLw,qb8w[_5mӫ1|;u
Y4Lt]ɇ
HZ2N_u!1UHui`Ptômn1Z(fi!4f]L6L[ėG6wL)wȰ<O,CۛN.Lqxϳj-1^eS#D;Zf!VͯH%vB.f]e]6غҢ~啭[3(K̠۶pw]"Cu(KIV8nY5hV
`sD?*4F(ӓ,=@Zab>aYOs$
IuT|88x@UIlPgH!NuLu
?eLcBSYC^z4>"PKX£>    PK  #W            '   org/slf4j/helpers/BasicMDCAdapter.classsUǿ'
fKi	(P.-VHZW6v	E}R/3Bq'or첛lT'3{}9 p+2"hUꊚ1T[ԊCniPABCb2px1S֌fٙeKSsjlb"KA7zv5;Qm?Wf18!͚f3{^l!0j qr4`3[tYZ#
\ɖs+fZI5&RmY3sZ+f1ėdQ5͊Ӓf0dlN?UoƱtD2va=
bCEHTFuߔʅp3t	sэMStQdB=`H
P8^q;b\f:zDs=.:M:jʊM
N񕲡hh'*οM(8,
:n|C2i9uʙ5dRKE*m]l	9yL1tT+U}Ug4
>jl->Oh߳,XsU5ޔ="O`U=Sc3zT1̾p7fp|=Y:M?h2O!zrMՖ4*צj"k:e=x͑ӊX`|w	UЫէiJ!yx:j`B:&W [1#6ƾv+Ƽ8~\źh0?hRkigCԬv^ Lfe
ն56N:c
t38?;&=G0[dBmk`!ͮ!v2=Β-~Ϸڍ6>wMq.ޣ;;},]e69+#SO)9<ͣM<@
yبt@o	C9g8+e
qCA?0"{E#Ybtm)o&w?'cӏ=~W"xw]9.P
T tu|Ĥ؉~\FsN+əES̑j*7O=PǓy>OWOWgs憐'G9%gx:F^&(&\F)\!&qXN\ gSB|9-'ш#kMɇ:ODb+]ǢGsRն6(|pSxu<[},x'd_ygz<ӗk
5зh SEȫ7<J=eFLHΣ	KNׅ`;wjc}_2u
5E}޹L(廾pp.1_42KeXj:,sy[t_!ə\l&菧PKk  
  PK  #W            #   org/slf4j/helpers/BasicMarker.classVKpU=O݊6#:[,	8X'Nd-vn2	0	df10*"8RTA,gł
;X(yV[VP}{=O ťB+hA@ǼgJ57
@ki~pwO^AT[TuR`[ǬItAϏ7uCUЦw	찝L4w>S4Jeéd՝3#=遐FWIK]+@GJ%cN/
:s>W0ʮi[Ql<ǚ/ZA,զ
ͪJ1t`dY`S	1~&SAϧcFsmMj5{cS=LVŃھqta{8O<=FeMaH؍4YV
O	-A<DUzXtś=:ewtצ{$}rOU<*ѵ:ƂhD1Ȥ4+G'٪^1'8 %n
!e8ʵU㐔jSW0kTަ6<1r*0scusLńLpC!9a[wÉ!MqR38|aQ[cX
N] ;x(n-

i9E7ڵ\pLg#NGX0CUqu~hN}թoMsVzo-}pl|8'24:61ڛ&̡]eӆs\.y
jG'*ƈ[4Ya	W/e㚍'KyTr@Qvn뱪Fެ2(+_Gnnce%ldl}}56&і7{z~a6eÜLmkF_?}l®:)u4+]`{&h6JHȳㄼlh<M[mxixT8zaZ{ 7L]ú>C
tL%װUlpFx@<D{PK,m orqHA\yh2_Xk<jmy> eXBT:v tK]}!LBqx?Y`)pހ]/^K>ۣ1ja9%dH
%r t	}iIe:
7%jW5F~A/u޸}.j4'gYWi{vGBh7ِx8~eQ6lcuE"/!~-!+Ns_6d=I&)
!=Q !̲B8>5g~Ea	+ ůhGKС``^7	}o"j'#wtQ"-" QA9
4p874䤮%d}ZWRF׻ހx grl.HІ)H7xL|{JKf~u RCCUG#X?|f(2ǉOɷkx:Ж18&SXT]l<E:1-/_:1#Geʞxx;LGzg{$gUW+#ο$އ<&IN@5sZx%Qϼ6VtX? PKEɋ  Y
  PK  #W            *   org/slf4j/helpers/BasicMarkerFactory.classTrF=+9rq	HC!
mZ'CBJf&VGA2iC33|S,+Mi޽?p(P5 ͐Opa>+dH/ٮ0-
fVh;VkUAT04eoƾ'-VO3hN TR:*iet$~qD;~դ,qڞ{
_0]y"',Ƥgf+GзF5spLt9?+k2r8^R?"ȧX
yϺƤ/
\VxOПH,
I ;2'틦ThpHfokvawOTz+Rk.aTlWo5*ŝ-rSP*'9S_;vOK(*nQS	)y.Zٌ+j!xfavTe%QD$j25[bÖgw|UcnzrVhDtoEnA/ [lm̫(:)CRtZFpP&M)s0tv.鿋#3gdu1=t5ZK\F3#I&<n
,',Vp/UE"TcH]%ZULQ?05L
t6E
E,~FDUǕW#_"3s4\pc_Eo~CJ&ztk<?ƕΖV,лL1X=cXFE}PK=U    PK  #W            (   org/slf4j/helpers/CheckReturnValue.classN0@$T`舗nLD)
kWSP*HX:ş_ 88sy*̜B^M)yȗ+SRuNJeS9d -UYYy
]'t
	m}^EzFc]艡U}!pzW;crF˅q=<%zsQ
sUíaߌ'40gAɒ zoaO@`4
lr3aثnPKd    PK  #W            '   org/slf4j/helpers/FormattingTuple.classRnQ](aHֻ@;&6jlL4EӧÐiƿQD?2sB9{vZ{u/ hhH!CFPx(۷znp抑uEk~jO8C:C'WZGۍW:?;m(EBiGHWk&	;9[(_,tB(Ds]ѱ5B޾J}i.%l<x_<$d6aoM
OtNv/f&#ѻ j#B1*Z^QyRkhͳAq8]caI:ǑW	We~Q7w$saFY' sc>5կ!lÆR'd6=AlL`̕W4nwXbsʟM1)Sx Kw_gBIS@,Mx	dc2riL 9bL5O7;W|JPK.  C  PK  #W            ,   org/slf4j/helpers/LegacyAbstractLogger.classN@ƿBC@+M.U	dmxA	zAC:^*r-oVO?EB"r6(0+j}-;Aj>B3>J_V,²1o#\>ɠGwvl":b0vcC$ۨDҬ+5Qs	嵍Zjy@hɽ>=Q* ~X<+rR0鋓h t/"1T5$'b.C}1T'\RuAI֩8z

ZE~81,-(ϛs*mb~X,u:g6i3x71?Ph.gCe[xkfR1ILu
)'1KS0TB6SK,&1[S0
PK8O    PK  #W            *   org/slf4j/helpers/MarkerIgnoringBase.classSUυ@ nRіXy	MTKCcyUJB[B.aiK7>Ŷj}ǌ:3tFgϹ	+|ܛ  T@|
TA56L*Os3T3<0R)nYΠzP5+Ơk. 5P뇀ρ	ռxJ7LMO$vkS]cI!@RB*3hLWpZSizaDI_Fib0PV A[ыTʠgVM]h]qFR.e/=jS $*I(s2
SDQ'E-uSJQ$KD3@4})qB"!EBEBQ[j%	kqJa(EBEBr\if)uN(3I!:E}"!:CQ4˫?I"PyXy.EudPHZf4tv8,AU`	XO$,+msFؒրƀuRۋ5ƸTuReǩ-lsLe9ܿGQ$CZnͩuŎI)t>,qs^:*vgjr86GFDp2".sq0l:&xd)Pe8mzފafTR5%}{S}hWbp,mA-j2\t1ugA`șF4oe QneI_^^Ȃ~UUh?z3a3Wu?Djp?nxy& [f>u'6'ZZնE8wmiû7˲XtXveEY?݇P>
.a]kѠŗ=|¢0hQ[-ZaAC|S>qYn=C7#
`h[0K2,re<q
KWdMx%
˫rfG\`鐭fY\`
ΡXzayM6Da9(OskԲa'&{%
*¢,e4v K7eu4#,2,6Ĝaykn
KdٛXt,1WXd;Ǝ`2"[n{%˘l 
z%2,%Iy_baI2!~Ez%
i;pl#vX.L?/`x? S8̜ûyH֯]2^]ג!-{].v]`1|E]PK`    PK  #W            (   org/slf4j/helpers/MessageFormatter.classY	x~=fHB  	ݐ 䌆H 	H05Nn x+*ؚV)BaG-ֳ=wV*,96a>:;?ϟ<PwVR6k*XZAk	y|P9'Ɓá  m,PЬy[@R&hQC!- j{D 8⌍Pk[W܊&Whkjs%$HHkB+MjW+Q}n[
iΜgDE:\A$ҢK91Ab$DHu9J|g`cEp0HF~F%8	-0/^zhej@mјݠ\0ADLP_hjk| S_&+89z5i(^-3eeb_#H|D_;
bALyv*=Z*ƖjPR`6[S[$|E@Kc*+X«-0nI.o|
4ϕPɪJ#/e)(bTOpaAmܥףAVu
*dO29%3c0m[-X+V.YDA
j,zۋu5+
m0+BC("*Iڼ^:z)JfhPWī<{t.j#hV{Y%ACU06jLPdɷ*tԀ z߫>hnVu$F@lVЎ-=
@\!AJ$W\&^	r ;\dP(R.QnRp3nH(;%bq]xAK$HqiI=TUpgTg
3(x_'?RqWMXhGǘK	xX`NuEY9eǫ\NnǷߠ<~_6UyMeCZv
-ǣ
[)G;v|Wcx#z	rV<lJ	8*#ZV\^5xOqL!I_pk;UiYN6Co]%l	'n#cYy|PNWj-GRR,{R
x`ŷRl`şJşIҁ!I^R҅W/_=T_Fifη֥tl%ᆘڷvxu%5A~rǧUk$ +[<ZBn%b@{ihA9>["V{@SO
<~Q&?u#ҡ!26iS#61.rb::Ӓ n$O:o4ZXHryteC0~NРAks~ON_#r3{hoH8SCm0^54/vnٟw%0pT
ZG.wUmqa(d¯n}mC:ﭰ%:BU~ϫM*oŔJRC`ZivUa?
$=o|/n-%ÜVn%/:dvD9
9!?yg"x^_EmGZ;rN#M0&׽|Ig"jr$727>I;uC}")Ȇ**H%h2xЃ05f4	K!gcw"|[f&!ÔCd; lt++(r^"Y-yEPL_ϱglLىy3-i~LqF`2LJqW4KRfLa;-,ϰlDU-u;Wm1\(X8+,V3!ӯ8]> hq0X#a)j,uYxx<.X
U\װc;uxw-8wp
}-z=fb}}®Zl">)YUԂ\/,9M=3#dyN1DM/db* iL.N˒qSNHm2zԘ=:Ȭ\:lZF8L`aطI$Qъ%dϓXt?0>Cbe*.6 GЗAnSΊg݆TZjac}ƬA-hG
gDgN=	m%.u`Yw#z0.M06u`3%[
0u
al
J7$ׇqcPr!5:0;
ɝa|Y6$øCg#n"Cm&2
K)8G(*|""+0ԉT42"-b64\)q]b<(Foqaa-H$)bx(a]$c51~HoT:d":0Rf(ޥ⅍vvYӭ&$2#K~a$sXf1MY QH/Q/g^Z%w~\EHrYLC-&<xͨu/21y 㝮4<}leZp>'=a {W.~:ORLY#QϤz0Qb*?av>i.DKTF5bt!fsDP&$铆D^2'zvm&z
Bd$6#)Phr##@Ec`ӕy^'^#fFn~G:;$BNb Kq.2U0ޘ4l=k%1\&c7bψ9`/&%^A^EKɽ/&qpx6WB)KȽkRr_IȽW8_q6rcA}=^O
&wɽܛ~ٸߌ[?H[G~ro%r{07.f^Љ}#o"N[}+o&m8<qO<ܧvpܯ!侃ܯ%};@7q%qpq'~J;6rwNrGg?"\pp.~Gb,<=&PKG  `  PK  #W            !   org/slf4j/helpers/NOPLogger.classOlT˟&ڎu-Faae[pt-S!4ڕ?;Kb#;!qA@.〸
ILB\GnHHH{vк:{͋?So  sA<HBV^u4_2jzѩTLwL]Sm3FVӐƓd)/]3
n<@fWK0*ޣt2G7cgQ]іc_]ce;^ݰFa&X0H:	-\jLwXbK)cix4&ꛖ U1&0ȍFjؕrݵ$>[q9ouqc^fFE#8U;$ֶr]tm8nͨcJF1JO`⿌1ȅ$]/LcE5n282g:7i?`hsZҼu~-N=ah~pV
1븭_
֓ᾆ$s{Zß	wit*Q3:~Sjd[6,kgydq5.x|(Ax/2x>
	ax+`b1<U@cXP<	/]i4!x$(=煮i5+A&ڡ}~(
Y#8DLIDD	-┈gXÆEK]a~ghXN<;J9's<Ceag!/Sh:Sh:ONވ@toJ)4tctҩ4J}Dޖ\@t"Щ4mi:D AY(FmtM4Fݍ@tJi4wtt?4ON"MtFiߤtwi!x:X(ݟmfZ7>mLRk	;Sɧ(ha;qL|71[;؜!Nyb,9?i*6c9{\lqHv6@+$;;.ͮ,]هĮ;]ٕnh	]/H4Bvf/]ٯD`Wi#|^fhZvfĮ7#k4[%!u=ivf0N:N]?=
:)z ݅/g[mtFPKe_2K    PK  #W            (   org/slf4j/helpers/NOPLoggerFactory.class}QN@=#
VEDх(c01BL0bܚf(&1qQ;=q
@kL!C3D!NO!C!Q\1@:̮ֹ8үVqznMt1lN`ԹAG82h'`\_4'g6t;&1~]ƗjZGx-j~uW͒q_e`!ڈޥDrBF}{94TH1"a	yB=COE(0ǹJ+b%jKPKI[M  H  PK  #W            %   org/slf4j/helpers/NOPMDCAdapter.classS[S@>+J+ER@ L)LoҦ$ұJr<	Mhݓsw. 9H@2!CaQ#7=82:UI%ȶvӓL3egǵt6U9HՌKFXWuv^uAjJuCZZ*)1YQL0$&Ճjꝃʸ
ݿOe2]DZ@nj2]}>E`0;sFMOuTMFn:hF퇓Ъ"ʌJH"N*<cLng`hK
TM
NriL髂.w |$~dyMEᬹZ
;Qłmː75<x?@!<3BY<<"~Bd8%?p!G"eYH.#tmQ
gBKQX'>خ #-/j:9^~75=Խ%SD2PDKUeXj|b۵k}O¥J`+n5bƷ%PKLӾb`    PK  #W            3   org/slf4j/helpers/NOP_FallbackServiceProvider.class}OPƟ
W'(!+"jȈ	`ʋe]!O%*!2vu[i{<o? Y]ȐtaTUS)7
QsHr #0gef[;UOYvM?Ьr9p,C2"EFgXt,Yۗu)Jf3[32$f@A{_5aYˋ
_lXFyvJ *bw{kWn0V/pW&b%fU2.3`#Wq!{ckM}-*Ljz%.~@B^˭l뭴e8C&*|#hrefA;%DTq*sG8\ub7HjBDPF)56@_!
0qm%/tS|FD7ӿ
ua<'
i7)fI.!^Wd~q^xNg)n#4{yB,^#F k;Fk$(lQJ	!I+J="˰~%םاFoqnHwdGXJ8;i>c*&[X>n4wɛs- (0SE`ʋj4>2>
PK=Љ  k  PK  #W            '   org/slf4j/helpers/NamedLoggerBase.classRMo@}q4@R(q@ނ8R	doVS;$gďB@S	Y;;~_߾:J(0,,BhLĉpDz	P*yD(A
UL-,"lwXFS9r豈%Ch$R߭9hL_&jgA`e".N5:^"k2^tX\2N_FJb#ήW>Vt'"L"ɥ?6zGo{zĴUW7et5]`5ϝF2V1aosHdw2'56a)+Gpk0g'TN^J66J
u\X0s;Ŷ9m`k l&3naQ)\|W/WۙͫPKMy]  7  PK  #W            ,   org/slf4j/helpers/NormalizedParameters.classV]WUݗ&JC|4ZJmE(@Q*c
4Lp2M
t-YvY}oHa;w9{s=8H	1
qhX[y[v1hxNpU .H@א4
C`5z~v7l_uKoU쀇ZŮլ-*@,'dv'![~yb{:Q)8E`ͯ~c`z{x"IniQ8e
$MCsk-w){AYWFjWs+VꧽMMe͍om%чsvE.'1^1*^hV-+Tnl	yE	ddalyNY^)1).nٗ4`#.uzcF&XZdbL$Xęd>*6&r+[.x9gg;jLi"dA|*=
"MI6þ^͐͌b.5p
ƚμ	Lx촷wJG	TDǳ6+7UR˖09Ι7JGGXAݵj[/016޼yk#Oj*؞(
49n:XV%۝
"?ۘQ*6uY
{DT#ꍊvQV穊&:|CNUrbr!4so.\Ofn96sd'	7g]hI'cԬc7B$rIBo/5a.Вʧ
!]GH#$B!n7U~k6Eu0pn;<;|P.lIʴ3hۦ4^-~GH~C϶Vͽ
 bzYΞY46R%9Rmt9Cߑ,vnEbWIJ/hfl8
cN'|'C;E&\HvgI#KI%4rƅ$?)gh
ClH7G/=k#Mr\}鍏Ou]q@~8W*qwA?`k'Q6	KcuN
R2%D4>Q'?H>GF اab`c\VOz1uc)%QVPK  	  PK  #W            (   org/slf4j/helpers/SubstituteLogger.classZ	xT>'3򒘍KL%$eH&x3nmVkV[&U׶ZV۪]^&&_N?/| *pA6C
鐁p&mi]tO!
V#8ʦdA&d)BF;XݡFj
PPK
TȇmzWpuHQo(EZB#V:|߅0Ja8Bf۩/Bq&	Kv@(6Ho-3	y}m,
OwW'3Z8hA1&0x]ZOo[7[7i*t<o`ytkțP%erFpO70-N
1'!Oj\F9,vĮv<'ְJ*1ڠ)?U31R[cj<$1.%R"E;eԤpmgk"f
$C/6
*4J֚U9,Z5V/[CV*4Roܲ[f::l͠Uliܶ-[5llղrl`k
>+%~T3\ok?VR;7APƖx.[l	2Mn/bKP6[w/aKP
2-Xg\+,4+U*t۩~
cK0-p'C
?6&[ocK0-NvYYnRaZQQ!,n{cKp-AMp|-l	%8dKp
Yx}BC$m9zpOJ_4VfSϨ,<7h5o
i@>/

/oWXoӅ
/+Ygl}Ɨ
VFxU{`6gׯ\v
}+y
Gx-vmىi[6zS.P"LNk63{{lN ҜOVMtQTj~uь|+W5\ @P[MEt'2SJ߮?cHFKg(̆*K@ihЃ~:
,b[5k4j
}
m"c*|	HŚhG*9׮iUЉ0n)0{מѷqGej0Klb$d\TG:UcD۵ͿY9X,'7)X0~t|<=D Y'ʽP'ю7\&\G<=xV3xM6yۻ`O*i
.bLtԋZPLɯv鍡VXr,dƣZ4[`lr2Ka`ìNWW\6I |MK3otjtUrP~_tByWʛf%w8F+{p"5XحYg>MAͳAbbN@.lνV
x^Mbi	q#Xal!dq$ҰrmBMїz99u*vb"PotǭiI%ѳXm8
IJI6&wҳصUkF@>jw(=6*ydA5B[e18b҄ž8;fO<'D͜ԃe$2DI"r!qBIyHX:1ᝃp<l8zm&ѱk0X`t*9f>Q(([c`_"[:gP"p\
}pCBlfS-*N2QtﶰSq3`So'̍Fsq gEv.
99d8
a)2V6lDg.6u\ZlYV=M&zІOٜ<.x
a~p3f<ZˍNzŊo钣I.*GGGtqYnR9K	겯W
[7u+	!Lb79ēztNVu}\f[jFz4@5T\طQaߞ@5'")T@mCB'-Pu{/aKZ
Y@!PuLA"z ijN PraS&$PO@5'rdO)Ts<O / P>;$Kqo'P@-@!ʰ\Pa@	*$} 2jGIa/P؟IV.!ʰoD/(#@}K#"
MKAC(̀<TK92: PFXvs)HA.I%q
;L(V
	CT@]-6ITwF΋KWn{VM!JZG2vaMZKn{A&zNZԍrkh;@,2%P	V9z!N PnV5).;,P-qe@̸a[[VBu\4#i
'y*l/PRvH@BFۓ=#CT^D/;px1
$
'@]Fuq	T8@=$GM]@#ku)cv,P;˳pa\] .?yx9	pAl3~}7:l!otm01x'.wE;gSrD!Ρ4<Jb`O+L|캹7*H05~4?|HK
vr׵>`K9z J@ѦA	i*gH:P: w=pA(yye+pR&u8<%&Ϡiy?[Xw"z-!f"G/%̜
?q>w\!!t2v>̆
t(iQ.|fkBa:z!k Lp)Pͧ8⽇*sbND1e⚶Qԋ9vڰx78QoFX,ωX$S:·QGω&LT|Q3[23γ,X`225V52'Aq72KBȍtHY髊EÏkxܫPKx'
  ,  PK  #W            /   org/slf4j/helpers/SubstituteLoggerFactory.classVmoT=I&u&{6mPwe]hB22onfR^\9v/CTiBXf4s9ϋO 0wCVS5ղeX._ObI)POڎin[m|Ϭ8ͦ
qN['eφg9-BAZ`.=NỮrwhT2*(G[BAO]{g|l;=|曾¥U@<kNPGu|#cF`OS4ѹ\e0zI
g8YܒDvGwDץ*rSԾOQCD((pǱaj{㎊D{aMƞ#zhS(`^LZ.6	'zG/p`,>^T@ta++`z]hdjwY'
4$F_>KȠ *l4e[-smύmlivp-ގŌGIk6дa0`2W3%y~jc(]A$a<پ]K!Փ)Lu8k
Og520J}P;Sj65K[|WRsL$#9y<L!KCǰgWP#Z)x)CbGP
:ƅ#LsyGk{,y$4~xLA_>U/|7LOl7fN1U
1nV	bbeBȓ/Y=}R?g:!\=SR鵎o([Z' @S(L*R9EaKr$pO_wFb̄Tnж\y+w=!'铐YY$@jMvt	wpC!B9t+/{`U6nsH|PK$    PK  #W            1   org/slf4j/helpers/SubstituteServiceProvider.classoOPƟpC	(
%!)o:.vkSI"!D2ڲ!Ysss@UWHcICknj{Cn'-ܧBq_8CђM1?n\:ZSw\v\^M.+Z
 `"0^D׸
VW4d0^Z|S5tGdSi\4ɶN%YQ*Ϸrb'q393?wlqʙ/NǶ-	鮰/&*<;	kJ&gTE\&d޺pðvM&wa
`AöQ5a*ɇ@O~7fD>'{)
Ye}Y0Eܙo5WvU=	ߨjHWWe\`'6đ^װH]EB{V(xtV:c4i91Gò-AqHEEN~+42P+i4zgcP%L %^
cm³Cu(<?~}xwt*~);G  |GPK><p    PK  #W            .   org/slf4j/helpers/ThreadLocalMapOfStacks.classTkOG=]p0<qy@@H8Ҕ4bıݵ6"U%vTPYZ{sν3_'ylꅦ
#U2+_.5⊂`3h`^3J>x`Wu|HʧjT,UMzbèngF]Mz~<ӵʒ(3c#D7	p4t^"ȜܨK)b\PӴn
40UdV3kMd
F.&b7E[
EtCr[Yk.7+eJw")ڨDݨWmB=:
ei{nycN!DV)X)K9x;1:}iX
|٨7,Sѽ˙,g:/e:?Vc)X67wMk-2,kVQV/9]L
/C#mDw;?|I>@ަ	NkguX%ɞ"yD,@qrtS#k־x]/j[6җ4(HNtiqyFso"X~iIC
ĎNw$yWe<xbYefuQ7>!3bm
sB	nxGZH;~;'vLzDT`4	fk܅Xj0nqR.rz=os@SH"ʕVg0C~i
??]~7=G'HKdeAM@}Ǧ	iH}hH pҝ q4bf0Y,%Ř]ͥ8P"dAILuپu>X9X&M	b_$JJLt6yN^-q,cJjY׬+_vy})'n_Nc,iG#vm^AsBc0Zc 
eYo3&æmp%zδM/̙og]_=Σ_m{#	fPK   h	  PK  #W               org/slf4j/helpers/Util$1.classm=
@&Q0XZX(Xx5>ò,<7:|z? 2zic%ec[R $+)TsCs9o*̈́.a6n\ees	+c@Sg!"JPKxt[      PK  #W            8   org/slf4j/helpers/Util$ClassContextSecurityManager.classRN1=w@^ .#	AٸXǚqt+~eI4Ls=M,$Hژ@h	s#{C<RFa
H>Fk=_RRMhֺ9d`P:Cacwe[0W]alWmݥgNZzLF7*$v단Y<NssQ+q;Z`=ncN=yioIg0eBia鏫FXg ? \9+/X󞊛(n0"ǤyKF
sC3W0=@F;(}"&+b|YX
WV|PKǵm|    PK  #W               org/slf4j/helpers/Util.classV[SGveP
nD6"1F	"* j\p\et̪{b>&/@
Xo*$? $_wL%)>|ϏtP!#u#kv1{UYjnm!&gReɢaYMǎ!!˖2RO@|	4
i.&ӑĖU@Fg=_?:%/ndeHC@
,]ӟ]B@iخcŬgMu]NKߴ3iW,a@w2]ح!yY?@B|lX^v\kxT	i"Fz/&{zNt6Ƹ2<ױ}y_sаtVmHdڜqurl'㊢:!]J×k\nm?4$ȢS!gy>V^qXdm`舎WqT`3W֊,	kxoPk͹F;Cƌ'YU	 5XS
c5h8%{]ˍL~;#paZr2;)ӞL)RSLyQͥ饼ilMlOMdAAt0Q ]满tghҘah0Ἆ[6CzJjgwWFdq}"M"pIǘK[O
Ej7*6	=-d(֤8cxGsM)e0	Aj6IRAw[=L*|9ӖC+W'syhڇb]`3J|_Jy2wWXuF)3X'ǒzn	DVת<%;
]eUUW3!"dx0!"S
K !5]^k\NR& ˹
jÃx̩*~X
_ĨSvU:o
HMw,g
48]z$Jo2hz@\V{>LsW.7М~Gƒ>ClEd03ǫh6lUe~z`?ͷbQ ϳюx)p@h5X֣3\	ΦT$vF.S['	1yhLy-(Hҿ'{=< @PoEm<H_Q1yJDp - =#؉Oۗ?BvL,܀$1F !oRrcK	TI}.w:+_'T&x%lG`@yA]oWնD/g*o,yzO2u(p$hIPS|4L54!B! ԈrP̛qqA5I*QCx?r0u$4't
2!ZGAR>f}OCald`(y\XJ2}+
h+>
H>mZVBgTG[w1Ao(n \Xj疰,8e@ji20W;Ҫ
PKL    PK  #W            '   org/slf4j/spi/CallerBoundaryAware.class;o>Nv&Ft4,L}Ĝ"ҼĢJĢTvFĲDļt}FT>%Ey֚a\Eɩn9X,iccd`d`f Fl ;db  PK
ͅ      PK  #W            0   org/slf4j/spi/DefaultLoggingEventBuilder$1.classRn@=PZZL)*l@Hi⢈<PǢ3MIX B(+R63̽s<5=	$5aX%&dLa\9k^*,rt`0,תs>Q]oh+"0Jf90)όxusn!qȑgHu5p7ʠ8-,Wn>|-ɽ{gt
9Tq}pV)(%hvpf,Vm%7 αNWɐ_Tzn&6sB5 'ړ}$e;\U|.."|csOGl^}Ȼ	U=G!MD4,<$CKt|Qݹ[fH8	6MK?p#ԻthfAD4ӯbsXEk(-m<Nh=zIF&6vm@?(uIGi'xJ.Ϩ>gPKV  J  PK  #W            .   org/slf4j/spi/DefaultLoggingEventBuilder.classX	|&1rHQ&!")*A% f,lv.Z-jgP-
z
֞==Lfwa&yߛ}ǟІP
bTm7Q=n=wJ*-"xg*4CS7íhۆ`uѯ`<K6T$gW4jIA׮BqnCtC+T47mŷxO0ShDni8~z_2(91(
GFrz3Y
l5v934ԡ^A9-tԀd8%s/qhPq0SQrH*bd$kN
F#'lhr\$aw Tkx*֧Cw'MJ"ٖEl*wGs4$,2#Æĳl4S(a	SwDP/(5h/pK]"r<fP0#;3wlM"/ְD=nDh$\vn+q&ޯKY8[	C1:LSrQ.ӰPpVZM
m:Ĕs5D75;GGj
aMvPIc@ d%/\؜a.6mєBK6vB\BЋZ(kI/8AkLdQPtL
k?SVT6ب!

9u5nEbzT[ZcPLPMAqCg2u]&2a+3zSas!2
~Lt|HÕraqS;pr,EH"~
t<;[2l:k8nPP
@#IԓqS,L.y~#>&
7Bi%I)Z1Snc۳\p>-n9Gvqؙ~
QEQZ*>RI2A<sy6Cva]7cD#&]<cӰSd<]wkkc`B>*i/+C:z9R wwmOdwyVfMg*<5kb#NHfD۝֢vj´<,vV
G\SR	RE_\K. A3@Α@4>(NڡM4qAt-펄cz2%RmɄ_Yޅ c'Jc΄s-
'{&vmRaD=ɭԂj[UVD8Ѻ̱.\\6IF0E#zh#	v=0xħLO>6ït"ezYfuYb4f;s{D/8y
]*/NjH%W,ExK#"B3o1tb)H#z8|W+yn2xONg^(8bMs^Tfi~ P6<Þ:k:/%(,l mn$iS;e$P"OF:e8牣+x!%[īw6y67Lୱ*%~`ԓz.P+3@+J|/l[]I{l=ަa+7~5ٟa1T.lleExu@Y&Hzb:QzHIlOcnB8ǩ*z~c)ØlՎ9rTU#40Zv=6tHǫ߁YH	k4$U*c3~یh̄,b1k,bb	.hrBX`zx=~**H*5xv1m:"3m
ddЩ¨7u7tLk9Tk'ҫRSꗼVMgf`7GqV;1IBZTm(	wr2
PqV{Nf:fWuJ=?g,,J%Z`Y!m(n~t{>w^1VW;'P4_m>W==RZvX;߷>Q~X2҇O'?"%~_ݏ/L'.}J_AZ|#Vq7z^*v? V!,.l9xqcu'n>b+8T}K*+odp#-~G>ӹ3MK;{v#g2b
F;wPB]`c.;NFuVD/睏3G
w3`˚ݱPp'DV_/[F{s [<\6A	[GX	,p-Q,ѝ⽒Gp/Pܙ'q_G1OƷL^E%Wu\s7lŒ VQa=(!<Vjq(cgE;x%"V0,-wPb	߆&[+8iuvN岼]9k,_(drsP.~lY
]eAG]9*"^j?tNr7Q}\¤O>jɉoߒŒ PKI
  ~  PK  #W            '   org/slf4j/spi/LocationAwareLogger.classmN@mU*ZZ6&F6ݱJ
	BB.\N3Pn.| x!5Y|'d= c8֠p.Ubikj2fe*skwep co,O?x\jAjcEkb?:^B"dy9gb2е}uwS
Us_
`+d&-S/\ntV4OLާ\HpbB|
pOAڠTt霂jO
xx@}@;\iGPK-    PK  #W            '   org/slf4j/spi/LoggerFactoryBinder.class;o>v&Ft4,L}"J̼"vFĲDļt}Pzj	rF
My(֌:sKD:V 2ҁ:KS2sRڱ8N	%(59$5ge`c y$	&A
 PK:ĵ     PK  #W            %   org/slf4j/spi/LoggingEventAware.class;o>Nv&Ft4,L}̼tײԼĢTvFĲDļt}FtFE
T&5KS2sR0, 42X@ PKRވ      PK  #W            '   org/slf4j/spi/LoggingEventBuilder.classTKO@M!ᕶ~HHK
$DApZaaYG`Ad`}z j^ЈZ/}4B!7ݮTzk\Yt{[dڸuM_(o53?klI+u踓6hl):ot+$Q17Wh|qn9'#5y:ɚsL
.nGM+;RS
ͩHj=#1ܒ&t(?ootZ.01dZ*-7W*nfG|%\ln5{
]{O H
#Zzh\s-GP zQi1.SqMBWDoR
ÿKf`6}v!d]ĹX`PK)    PK  #W               org/slf4j/spi/MDCAdapter.classRKO@Ae>*ȥMMEº,5 qvCi1i0|̓>@
Ǌi߳"ZrD	4<:O?y̖x!Mpr="a?!%^#@3*PT^!OAH.Ghv,]BTWLs*H*̅Bs_*qrܳ@<Kե5XӤjufwgsK׀zx?E(2T5lj[-ב]Mh6i~'߁yCd_#?PKo|M    PK  #W            '   org/slf4j/spi/MarkerFactoryBinder.class;o>v&Ft4,L}Ģ"J̼"vFĲDļt}Pzj	rF
My(֌:sKD:V 2ҁ:KS2sRڱ8N	%(59$5ge`c y$	&A
 PK     PK  #W            *   org/slf4j/spi/NOPLoggingEventBuilder.class[S@϶B\/r  "H\jgǇPB&8<@ptr<YbZ69߳g~	 3 Bh=΄"RbgX,dU6	ccFh0DQC.%JqTٝMdUJ2e@	4ne72NHOL2^UE44pl _ә@hM;	ddU̚g]1d%%l	,cҏL,)G$hdbRy:>"Mp#@#MCVZ0dMMŢ"CpQzB	tx]ھjK$m%YR=]U=Z7y^PLn9˼k蟼m'yy9@ݙ.ejinbk(ƚ` ά#]D'`A:]x &`mT$]K>fߞ]o;_݂	tbW.3Єa.
zOd;!Ik"s!}/w2vRA]dW3.oR5AЏL }$چ|KrMHp_I :?}vAúpB	g~ǑRC΅aYuB7>(GSpR^WPʤp}Юl(ĸAg;cq`'\oԻ7qxK]<cju8[BrX+9OW&t$gg,c8K`U-G29Ć[4$
'©R)ӷ/tѷ蓛l4B,;_G[Fg8gĦjiܯq
[(k,
@hػQ'_g6 PKmO  [  PK  #W            (   org/slf4j/spi/SLF4JServiceProvider.classuAK@gmZ S{q/y*Q&21ddП'*}}z (8wlu]<+I7	rC)޳k(C`[47х){1bY92wl6TIK,<x~*?k٢rMTp,\3Vc*ɓ)
l+#*:vHО35.;݃N'p Ir`
PKY     PK  #W            *   META-INF/maven/org.slf4j/slf4j-api/pom.xmlVmo6^!,1a%A Xa@VtPFR }'%A
{ܑ
?l2A֠4yM@Ȕ}~}߿% 1sy+csJ3<`KVH_oYpR[맧kwzr2\ߢc|kAsmk0c{3yb]LAQ>0gW0oJUc@CHY0e%kBQ8Sujlf̬ uZ,ҶV+T
>(Ý0ydK$=~`
҈V˳_ȴR[txQqW@l6]KV*wFW\4)Y 	iFf6k]صj(hMhnrCƇKo/TlwTm</.GH[g\J1UzX(wX	h6(S=tB9h<5ix~fin;>=z.$eu.=æ4/`3}<Z+!ٮŁR(@Vx]׊݊;-@ͷZzTZ5ߍf
tzX]EGg`yY vB^^>,{7zJ
8\o^z2!F=uF1|Z3D+<alk@lt}b~q7_CϤ#o^@bx+@୯=.VVΤmOsaՕn~<
IAM\PxzJHٚ' $C(QH@kFG-M9hUF
fJ9?m}M}  m~_ECPKP      PK  #W            1   META-INF/maven/org.slf4j/slf4j-api/pom.propertiesK,*LKL.L-I3M,J//- ER3l, PK2   5   PK  #W            %   META-INF/versions/9/module-info.classUMR1_ 87CY,,jN#r<E&h/^~?? {1}7z4pȍkJr9٤hZr,8X "~ˌ+޾
t	\scz	\9N1 \sdt򐳭t3k*`aHsOuɄS;!9fxV+vo~u݀y6D'$h{pux}'9 PKo   M  PK   #W[ >  C                  META-INF/MANIFEST.MF  PK
 
    #W            	               META-INF/PK
 
    #W                           META-INF/versions/PK
 
    #W                           META-INF/versions/9/PK
 
    #W                         
  org/PK
 
    #W            
             /  org/slf4j/PK
 
    #W                         W  org/slf4j/event/PK
 
    #W                           org/slf4j/helpers/PK
 
    #W                           org/slf4j/spi/PK
 
    #W                           META-INF/maven/PK
 
    #W                           META-INF/maven/org.slf4j/PK
 
    #W            #             E  META-INF/maven/org.slf4j/slf4j-api/PK   #WrzI                   META-INF/LICENSE.txtPK   #Wx                   y  org/slf4j/ILoggerFactory.classPK   #W                  O  org/slf4j/IMarkerFactory.classPK   #W@%2C  
               T	  org/slf4j/Logger.classPK   #WCi  C               .  org/slf4j/LoggerFactory.classPK   #Wuh  '  #             -  org/slf4j/LoggerFactoryFriend.classPK   #W~œ                   /  org/slf4j/MDC$1.classPK   #W#                  q0  org/slf4j/MDC$MDCCloseable.classPK   #WM\6<  
               m2  org/slf4j/MDC.classPK   #Wgõ                 8  org/slf4j/Marker.classPK   #W&
                 :  org/slf4j/MarkerFactory.classPK   #W\   C  )             =  org/slf4j/event/DefaultLoggingEvent.classPK   #W̔vJr  R  $             D  org/slf4j/event/EventConstants.classPK   #W    *             E  org/slf4j/event/EventRecordingLogger.classPK   #W V    "             K  org/slf4j/event/KeyValuePair.classPK   #W1                 N  org/slf4j/event/Level.classPK   #WƋkݬ  0  "             R  org/slf4j/event/LoggingEvent.classPK   #Wyx  E
  ,             T  org/slf4j/event/SubstituteLoggingEvent.classPK   #W~	  1$  &             Y  org/slf4j/helpers/AbstractLogger.classPK   #WX£>    )             c  org/slf4j/helpers/BasicMDCAdapter$1.classPK   #Wk  
  '             Yf  org/slf4j/helpers/BasicMDCAdapter.classPK   #WEɋ  Y
  #             Yl  org/slf4j/helpers/BasicMarker.classPK   #W=U    *             s  org/slf4j/helpers/BasicMarkerFactory.classPK   #Wd    (             9w  org/slf4j/helpers/CheckReturnValue.classPK   #W.  C  '             x  org/slf4j/helpers/FormattingTuple.classPK   #W8O    ,             {  org/slf4j/helpers/LegacyAbstractLogger.classPK   #W`    *             }  org/slf4j/helpers/MarkerIgnoringBase.classPK   #WG  `  (             Ȃ  org/slf4j/helpers/MessageFormatter.classPK   #We_2K    !               org/slf4j/helpers/NOPLogger.classPK   #WI[M  H  (               org/slf4j/helpers/NOPLoggerFactory.classPK   #WLӾb`    %               org/slf4j/helpers/NOPMDCAdapter.classPK   #W=Љ  k  3             L  org/slf4j/helpers/NOP_FallbackServiceProvider.classPK   #WMy]  7  '             6  org/slf4j/helpers/NamedLoggerBase.classPK   #W  	  ,             a  org/slf4j/helpers/NormalizedParameters.classPK   #Wx'
  ,  (             X  org/slf4j/helpers/SubstituteLogger.classPK   #W$    /             հ  org/slf4j/helpers/SubstituteLoggerFactory.classPK   #W><p    1               org/slf4j/helpers/SubstituteServiceProvider.classPK   #W   h	  .             Ʒ  org/slf4j/helpers/ThreadLocalMapOfStacks.classPK   #Wxt[                   B  org/slf4j/helpers/Util$1.classPK   #Wǵm|    8             *  org/slf4j/helpers/Util$ClassContextSecurityManager.classPK   #WL                   org/slf4j/helpers/Util.classPK   #W
ͅ      '               org/slf4j/spi/CallerBoundaryAware.classPK   #WV  J  0               org/slf4j/spi/DefaultLoggingEventBuilder$1.classPK   #WI
  ~  .               org/slf4j/spi/DefaultLoggingEventBuilder.classPK   #W-    '               org/slf4j/spi/LocationAwareLogger.classPK   #W:ĵ     '               org/slf4j/spi/LoggerFactoryBinder.classPK   #WRވ      %               org/slf4j/spi/LoggingEventAware.classPK   #W)    '             f  org/slf4j/spi/LoggingEventBuilder.classPK   #Wo|M                   org/slf4j/spi/MDCAdapter.classPK   #W     '               org/slf4j/spi/MarkerFactoryBinder.classPK   #WmO  [  *             #  org/slf4j/spi/NOPLoggingEventBuilder.classPK   #WY     (             &  org/slf4j/spi/SLF4JServiceProvider.classPK   #WP      *             r  META-INF/maven/org.slf4j/slf4j-api/pom.xmlPK   #W2   5   1               META-INF/maven/org.slf4j/slf4j-api/pom.propertiesPK   #Wo   M  %               META-INF/versions/9/module-info.classPK    C C   N    PK
     	4            	   META-INF/PK
    43        META-INF/MANIFEST.MFN@DOE_	߮u) 73;RbO),ݽ5k)`+$Bx<M|JXG]I)+{wgӧO9+FZ9yQ8^.pgM=m
[|Ǥ
/?{Fҵl-~`"x#7g1_\šH{
|/f>7kɥ5|PK
    4m  ^,     META-INF/LICENSE.txtZ[s~rSi4i牱䆭CiDn&% . =dwVM5IٳE/˝u:^<?utBMv<h7W\6scʽz~ZJY]-7xws'>qw}{ws-~]SW
	j.T;=rnk3'	M#Z%;1Ie['dWtbtVTc_^>[i7X{!pKUAUB֌۝N>hxΔcX/cO+Mzw
P	 8s+lv[z!S@me#Ic$핐%I	ZY/^Ao
i
!
RcWҴ$arxùxg,я71ɪG3/eFGqB_RW Y*;w!#J	N,`E+;U<׍+VN$ٹe	\hЄvGI%/i;aA: dAFu`R+'3=6L\Z]^&Qy|x[<'$ְ[	)GZoUkM[p4IY3htqw3r!8#A^?Pv;Q|lpcl(?jkZ	Q9|RoRyH\1=qtLH^cBRs g'NPn*-pc4	(KҘp#-1bZY<HM?å>dąn`x8[
dV9X[BA[/eΰⓋW#$Sc
Wh7; 
$AP|#:Tp~*܊܅r8k iՃ&Wbi|66|y6yaX唃H!K4LouNՓ/ı0HVRT)h:Fj'2㤓N D%"Ѩ'Ju"9S6/'\Q6	pHd6
~J"KQMm7n ;<xAEz>h#ZLjDe}5ie^f^˰H5 腍l(uD>[_`FWPhd!R+K:"7@)AZV"r75wTXBJ	v?V>f+kF/2DAfmprtTiǖȏx4`YC<Q\ьBM(P.#PDaF"l"4u<vR܀ѦblPFEHJ$tmKr7K?Hp۷Yf&KTIH  9S 	T{\3KǗz'spxY[4S"Tsᆡۂc=	%8
+B@߀\j}E޷4?b1ϔsv3J\2`r"KY3]a;6u<j ~Q1<Q`&M>
ʾo48U+lv8"	ɭquNZMY[@(j_`)_DVOˎq-$obn.5?B
c::e[VAn%L T"ƹd0<FiFO</E#nQ[.`|GQM`ŝo29S1LŦ(ShF}F#/yUquEX.
ҰO
;Ou+	َQpPn3gXi#l6Q!7"Of.O YZ!2H
V)rm艸z셼䓎i[~ܪZ9!TR}8$2d{&Qi죰硎Aw'=l{([-CeU$XxsSw .8nKձ] ,V
yS	
!? sgAU-T<&3pINKh%Voճq {c=rgٕAL9,+ZO	>)Y"(Ifb<2Aŗ5sgJ2%S/I
6}ԔAddITgu>Iy=@	]'MTũezٔgTe
 Y V/s0#Pwa_fM[8"5P":LflȪ[w̤ս$
Gg~
UjlmDL ;1`D*虘80O[5Q*Ұ	+s
UƑF:ag|흹2b1]hSY<<ъӹJ$ΦyI۪IgD1&cةu|K͎	^5@7:aRcK88l]%;rmӚyEjf"Vׯ̀
՗vKR͍P_ad.1)X1D[(>C#S 7Ī|t{?3]B΁)wv#jL_5lqn
N}:CC6ժFo;	tr)~4jVQ+bӁړlȦ7_
Δ ԟJ;jҶ]1	7yc`HKa>]Rušq?ˉs/q?[r=?,u07bu^ZX~_h~K'ф+U6&MDsRp M."{
`z\[z?]߽\|B~u^N~Y_so@6t@73N<gMo5s:p
хP%<mt87vΔ:Ei3˱9|&E.ϗXyПn =X|аtN;,!tjh`_,mw1g!BGmq-v|~0zNeM Vr;J@z9
ֳgH( |gx!ƙjwXc[F9FygfO.Z5&~l^9R7j$z"xM+qxea4]
 or\,J	h",)>OB˝1<I䲝fjExPGʮT|ǠwՒ4c6Awa6Boy̗Z</Acc'ĭd43GotMv9!4(KL'ݢ$DO,L{&]3>csmhJЮ
`ՙѹ-!Q ъ)Gkm&CW*QӹF:-l>ƌ6F]8WWXWϽG/no?ߠiZ z/o>%.(kiBB>F:Zr
$;o)D_gh2!Nz..L@A.uԦ:	@;vv7"zV p6/i?'
(Nr@!c嶋hfqZݨ
ݐM.r4Fa|_PM<½kϤ!o9e/UBzG>HgO*.("#\<x61FT8"ufC29م@CϽrj}T%_П3NpKH&h
ێp@	,toiI\PK
    4BZ   f      META-INF/NOTICE.txt51  Wtv7?@ZPE5&NC\ņT!"gBoy9[aJɓ1wmfJ=PK
     4               org/PK
     4               org/apache/PK
     4               org/apache/commons/PK
     4               org/apache/commons/logging/PK
    4lI:B  r  $   org/apache/commons/logging/Log.class}RMK@|ۦVj~GmAzTn[lR<Q(A{03B?>
#y.TWAwcLdgw%efa,wgR@3Щ|\'Sw'Fqfa<C
Q7/*0VRIf~lTD68x6kɉv\kE(5p9ƴNFaIB;gYVh쁲eb$ˆ閷~?_@=Y^ힻ9D7T'xx 
l2o2o1o1o3o3xx|}}i}+pPK
    4V\\v  "  :   org/apache/commons/logging/LogConfigurationException.classSn@=6q^+JҒiMK>"*Ѩ/q\%vW E G!f7E3zX,沸!a]m	w$lHؔLaBFZ	M0=DfedDe˸&
p]qE3(|;1L4k{̙Jޚ&|aa%xz`+QOGaX/$:%'#ȳX!N0Xjaeتr"jRSO-{7}Gl
e.ynݱC}mք
fmlVjynhzMfƅd'yo'ɘ6wkiKY;)UNe70|)	}3H-6鄦4UxHf3u,Ѓ @$JAqVHdY}'ZpHLa	PTUJO)+EaM?P:W(و{XJȓ]EC2WAVY](j@~ZJte2}z}c=6H(آPUBb ]Q'Nr85F[њC}L԰aF,PK
    4t?_3e  X  -   org/apache/commons/logging/LogFactory$1.classQKB1ѓfiY]iP #8TPx?8N[LUWE~T3+۷ǳw?>1v}l]_R	%,PC`
tB(h4IBE\l+g.ABHa.	sҍ\; Oʡv<qH{-ѸKH3CQzz^E
DـLFJ&AHXgIA5
SiFm^sVg30G9)lZL,4+f"8\нF=\DSx;MW.p:;zCեvͧb+vhjA)dޑG!uaƔ9fPK
    4åA  G  -   org/apache/commons/logging/LogFactory$2.classSn@=8	.nC\KPJH"f8[9^D_D+u,Z(ΌϜ|㎏&M
Tqљ 
. n|g<JyDoR>0tN|Myǚ韀֨,;i=Uz$Y&M&s0V|=Ôkg3Nw@-xzrFda$XFBO&:ˣT'	DclTc0XZ%ʒ˰z(bjGoL"G/U:c:W엎LIj猧mqmԤC-~FB
7ព?*4W,y|G{;G,dk(XPq,"WR`%B#}B׽z(5\&b1PK
    4    -   org/apache/commons/logging/LogFactory$3.classSMo@}qbL]ҔP
@JP0 RJC}㬜loeo"_?
1R"̾x3_߾g:xZ\X3f
6=4px4;:Xch;c>A(x7<1ڝ#^Hd@g2z&ӾCRD*xBW25CyO|"+8De*N0Za_f5
y|3i5yU6{nrʢp,P%J VQDUѭTI}iJT!J$|>"YErٷz,>F"dRςRZaZ0l_sRzlBuz,%)[񢿪<xA{eіH*v,:
,tJjݝ3&
%¶qy(q(/
Z
'X&Dw?xHq?95+dKDPvM-HyB6iWPK
    4+SA    -   org/apache/commons/logging/LogFactory$4.classSkSI=
Y.F
IA}/D [oͤ5恛YQgc5V}>3<6r0o⺉&VL4jbDD-Ø`?Or0)mY9U)S0ccl\\ô;K6Xd-7}<͝q(vj1~(j(ׅ况.Q0TwjA!
({_65e@VUK0,qŞ.,>iK_KXwe**ؕ^qDz0=
{IgG[|'ֱl ͏
hoP'p\oPjw:wcv/rC:D<XO٥%*	]QXmK!]WDQi4{{"h`cy"ޠ hc澈R
:xng਌$oT5G{
U'F;vd"MHI(w(IOVla;{&;%U6&	;wNoX<zG@ANZ+q7@OAؕsUciՔ0WZT㷔*#+pׂ6Γ
rco9zq@#Gӯ`>,Y<_`d8IG8n荺F!1	cFSF9,X1X3ԍ2cg5
.SpELPK
    47
    -   org/apache/commons/logging/LogFactory$5.classT[S@)!

T-B%(
DU
"0!IRF~Q`dGQg" 8C;{6| sxbDŨ*TRZŤ)
5hFA:ɧvNߒZtHGg4tH4:H=:I9:ѭc	91T:c-[,+ة1݂íLѶ[ :^ԕ2 yo=b.4M偱Q۵1Iro1}
y
37
Z@)cE6tLϖچ(dM+<ǐ`E%vw(,:9Lڊ(yڒne
y`[ͫO"A:7$-1-~r7En2(#|:),':<NU/Nx1{=Câf\=,1t>JS=7ǭrUM9$!k})%eJ$֯$	mB#(ƠN9ЊʻCc_4RP
/aLl-%.<
YY%+?ӥ}_?Ds'NY?>?DVc1>zF9cd27_UQ3zR3%2]CLɣ]G.e		-ze*kDYIEuxC3&qMz?FVPK
    4=ͫ%  R  +   org/apache/commons/logging/LogFactory.class||̻ݽtz`M1 F
jX8Nҙӝ|E;Ž6^q[ nqKܒرı)yw' +̛73oo}l/~c
:6ؤc'آjxkut\GV:ӱ];u<E
:t1cHnO1cDǨuܣC:>Ouq}:1g:?:Eǿ_w:~?u?:u!taӅU.u1D]d©pb.Fb.b."St1Qt1YSt1Un]Lt]8NMEP!]ܡG?ŽO}8t]tũv]D"f=v.6f8.N3L8.ζsb]ls<8..vq]\lťvq]\nWŕvq]<`Ob]춋=q[.s؈P8F.n9B..b*؄*4܌vй.8:`;b*Fp1(@6F;
cxt8a\y`9g.2L#p:\h.b"[0
Fb;ű<:W2<80,bE\;\,Y+ep.3G˸X΋`*X.+U\5e-岊YuN܅gqqsqrqq{"ps[bxSNp.Bb(Nq<%8t<)Jz(eSTjFU?vZSNQ1h.~xS4qt".nuո)Nq22~X7;z)<xSOs6f8E^L;nx*&)~DNq7F;Nq7^13e\<ʬ>ۜb?S$43)^WExxQsg׷7Wr#Eܡ;CN_
x"wu{=`(PDf}D i#h~OvҸ?
u,x՝͐Һ]؝00#>O8Z78ܭ>w{(l#$CRn"n%.xd;LJBz|᰿gGf1p+?$2+gXԽrOzC]ݞ5G& d'Yjtqh	z:|&t=&Y8<ا?G7Sq:,w
?r/S5`"#Q_!u,Ssx ALZӲm1CD|ޘ+D~o
FHY6BѳA(YvJit6VP*0mP;n(s(%BeдQٳNx
`Ga)\D6J.DcSj[Oy뉗`ǀΰFw6zHKǢ@ay0{X*Yrl'5g͢Pv
I)HPGQTcejj1ٳ֤#{bv@vJbR9ZqƘ?TXEiZ$Hg&kcTDcu>mV|>nՔt@AQ4<BFFm;$8Iq0
3	L#L>-H.L3uM!'eY-]%PayȸY>0p%0LH~nZÚ"
[Pͺ3HMJ:tFIIc lVuikYg}⡰YeJE#6%59b8xoG hǛ\08H6v0׃Nh9>#HZnE!:rܨo+^.^UUPNdUǻ#,A&7:S<<ᨧУVy;:]RYl#]{|>&4kH)͏z&O FIF{R/%ɡoHʋVA">xyMm}CEiujW5囼neť
u-D3*F$4ÖYEKN[Q\|]K2n/Н*ΥCP(JmCS͡3k
l\#(xEtܯHC|K%q|ƝaYEмx"<#~{,围{<Q_8Rp'l\B|EpVmĺZ}>TtQa}mfHVbhK8ɾ=%t#؊)J=hB;84V&]i>dN^_$bo"mi9vr[jBr2_	JgI&Y:bg]qr6:hYSي`O+O×"	2RiB	r;=Ze\UEl<a?4uy%x;%tYeuz~uyCq~E2EOjTHSfĜZ`N-HNe]e9٦UFdw3nDnFRɆ<ǰl'Z'3CuMd7tk
Jm#Yqe䩭G|iHje &XrAMƳm!2WBwԇbaAZ,On(-2Ķtŕ!3lHJMF=hcp'u'v"d?[gQFw֒G5vC: dΑS:]@OK[is4T6 
E1ȧ+]y
2
RnhPBXXI8N${y}O0MG<yiAdd#̰fb6WKU5Ѝrؚ2wi|-8fMic}CmvیCVWaHԢ!H.]n?gszIHZ\O{ғO5$$H4,gP}/pWD	aGgpQZRi&gb>w+zV$kkֺXD6>
Є(	-
d;f1eNcFf93EMD@zg|IÚ̈/Q.#NqmL=[9kwY;[Дθ'!F}MUmme*>VsuZ0	a FL*N}	wCKi-F{
9RIFUe=0Ḳ0%h%B}OW"Ig!)_L2)
m`
MkxǜEtNAM! l6(6<S+)2o220P 3fmfa#k5?C8(( ~7%ק5/4mMw"7Ԑ	ʓ\2S &4x@<dHt(#y(|=fKɰ_Bc^uvw
i2	tJ~F<jqA8̍7"kiHoz@=vC9u2 ?0#v3n/]/{m0Ξ )OHUH5=2oǚkD]5(f+E9V#o&lvN&|ct
|a|' -ahSfZ0zZ)niՐIZ#=@V*O;M}|5aBRA4)5\2WJ
N.JƙUt#h{:VI7ɮDBh>}48Bg)mY#5r Ulΐh!t&!*MC|̮eқǩYMbNF2w^BPY+'oм0*%sAְx5)Ҹ?H/7'fAiSMGn6$,Du']	KiEa2mZcLZ\7b0Q/o
.pN<#mTKF^{T	77:_j8˒HӍr~?R;Օ71E,~!>1j	l	(Stu,!K%ұɌJEL_"1Ò%mFb!.AoLr#|4`I"L:T֗4m})KLSp
M>0_V8,4dpO
;Db8[ďehR*<])]qe|#=q]ML6O@<h"l[p&׈i8Id:Rd875P3ɽY<JcMH͘~=	OD+DfId5<.Sm4Eаoc"S#imd--gr#q:~YhM!l|« fa
{$vHeqFpPl(!!@:"1#sĐsr)m(F	G|q;u͎"ft[uh<,7P]]ôn^JI'uMpW
9Z1kuzCQU48܊[ELi9k{J j+##cL懍;4n$T`h#r
(RP+&Cn*ن]?f^/
=.ߵ4ďm@|Z"ӖvOZڧR)K&g4
Twvw&>k
; oigQjm#<<Kϧ{0ʝt`oCH|2>xﶃ:h<pjBrǠD{VhO@aN+Ae!=nIdr ϛTdmu2Yꦜ	I2s%){ٜ^9v!mnv8=v(k r㸶(&߁0)1svU[h½
BgkXpr;`H

)*: Nyv(z>u^zQѫI	-^Y@GRAhWi4'Phh꟞jrwc\e\V9SS o$<;>9.C,ُ{KC4M2y;㩙Jfp\ĸ("2Sf̎{#^qS$KiFM%!WuB]By gPuWQ^W.Rg|9 DȀ$BLД 2@Ɇ%,V`+EY~6)`r<ܪ,;cv+G)Ge_Y/*ke9TJ
|ʉA:F4aRp*'J+*\e.V^c҅J7*!<C-ʩxK^IkhZ٦Ae#>leL|G9܊Snϔ;KNr~-lN#ʽ¥')ʃbK,RCb	Kʣ}2*Vȣ56 
q-Yw{@qX,_
sa `V8]젹
6{LN h=+ֽIlJWެ=+\ԕ*wQͮ0w@ԛ*y33U9Ɍ}p]^2g:&TҴ[+EZK'[('p,F2re0WW,Bup6A)6C%HhAvBxVѐ!ڥb	2A}RX3ϏS'a\R-վYy
.<<d)`
9|8_UDWДj`6i+	b[Ln;wmKVm%0mPdk2[zBmlRJ9ķ}\C* )-iSD~v4MA
ob,NskKMui9u&`;=iNƎ~Nf*wW?x.qv>hAK7^a_|I J(m\|7vUY	i~5M:˄MKLR$4Zrl5[HsHإfyM_"4H	X=l%96iA2G'"{(3🼃2NvZsEz᭢!Vf!Y)9{Cr8˴3k~bV/{ݙzBcpHNn BrQ-Sd	;H
=$6ov|Nl:4 e$e.OD3Pk|hr|{aƎnBj
jE]M0Jc3az6d@U<\XKD Bz1ԫBzK F+az^
upz=ܤn]xTSo_-z+;S.Vuu'S;h<F'8WE:OPj/V}ؤ>?Pmcx8ԧvCc<ȤZa? V<чa0)^H˧*~A}vȆom4C@<BX]Bs>f:ۼSPm}$Фpmm~\z9b'd^ڒc.UQ<Sf4Q^ΩƝӢd*`M酟n;{ ~ -%Y9rerL,ZIuHm6CZ9ޜN_<â&aA[VO^U֓Xcm-`c>8"Ap^H	c{vgK2Uڗ\Is%!uL$\˅G"-"9qkm
G3˻8j7ZGkT$x[0.'Iȱ.י5x|*Dzv/0<8"5eV(clžm.G1Op1`	1g4KxPy6-O'xr2B>e:
r",r*nvB#>h)NbA)8-\?k ܎]Կ_^d}"#'(^|"o?&J?s=*t8?B\8	SKkzOAYo;,@qxPqаMC0"Y8B1:1ox?&1GǇX8
3]&ߋ|Xgd 8;qP|(Q$b8J/r@,sE	ՊizQBs"EuT6zib6᧟
KD[EH\,ԾQĤ%{E03"l\4ƈW8"3D
iZ6_oQY{4eF΂)s
6>*
fmT
¢NscWXہ\M/>M0٬E`|"qbl
	O(IC`>c0^ 핤7	q%V?LjLR0 3:IL{f(Ym#-9{'>re0Dm#r}8? DB #-9{a|Z?'U`!6B0vV4&<[$\buavC] Յ؟&V_`T5A<;Yڎ9 wq]MAZBʉ\Ap\βeJd`2Z0GYF6F
q6dDF@}K"kv1] Pr Cy+/hzS^0CT^\U(T^a9WRZU ;	m(AL ΦV;_.PW(vzH}(WpQ{oFps@t#qu_f2FmK
VA\qTs_1ky=MM9ȯo;05/왼6Pl@>8Nٯ6&?YMAIv8mg7}Ɩ<OTd%p,,
&HK m}2WoX-D>V
="=XF
}X~
j/QNﰞЦ~lDBE#}_$*C!b0QCn$2RKgPaOzX}F/͓XRлTios'I, et56&t_vWr)0U˱!*
s^	%t]*c8Skn"`mi)6b4rzVQ}jDRDz`+zҚdiͰ^[ad8C[
gkkaVb1d;y)4R+hKmZ;F4c2mȤr<
szϒt%m20kSaI)&˔xg,&s(, }SB1RD,]Ob״K-Юɍ"l<deS&ܜw78]B{WiwqLJR^w0:m$込"J=Z'	OFhA8N;0{}Zh6Apvl΄s*m+\۵FBC!.aviGcF7BYB'L +M=-` /ݨKP-Fi9mn=);Lxt(\ȿ	e8IcВK?۶,rKy0J^C˥}ƍ9 ClPa#`ܶO`Sk̷l*9ھ5N0a2ǵrGj3Ę nM@5λ!3فvIɘ?Cn/!fm͠hfٵlq͉']RFyo#Y+E'?&gr&O@.ʯSIϚ0WFߛsIDthT}Cx f8j/I
T)N&Vyo"LQW74kCS/p'9O9OSOg^z ϼ~&lMÌ$\ݏŊ9
0Q3Ktx|Wax||V~D	F8QDdg1&h3ͻ3KCjn07PK
    4  
  *   org/apache/commons/logging/LogSource.classWisU=ä!d !,JٜK a!4fdfz'.(h_2%e
˽fy%ɘP}{_/ex#   
 	9URqQ_*TqXC*V񢊗TD-"Aԋ\Dk
NL;hĕb>ZI
b׋
bUܨ[
I4Րf
nՐN
6hȢWix7k8*F
ON
)ix;4*{
7i8]
ڣ`aKk~P$t"ҝԳٍ
M9NP]WP33r~-,ֵL۽5jىF$nRV:IZ-"Q+!OruF:]`CnF5ς+f"pW2	ђ6'I[:v.X6w[3j[*"+6œftSP!CA&#cq18|o8&)i#K3]$uY_֝[#<mS(<>+gǍRr4q#0莶b^V<I~N0
'18ۤ]xtT߲cRK|KoWKRPCEz:n3F 	V9s1l'Q04JܮvJ|LMrXPxJcIs԰7۶P±F-(-Ĭ\|x[.LMks+ٟg#*TmTflтU0oҏp74'uP7.z5Nߝ&!jIe gq~)B)}ĈXRnԤC%r6ymV>$6	V@
z3L4ed|cBιK`lH֗ɱx2)#nlu
ggϱl[j!ɯG<>ea+*OΠ~4Z|̧I95COj}RUɥP_4&ҤlX<|b4@9,n@Bra`|59R|
Mb旳F`w*oABE2{O ÃG6ޡÇ
{X݀Ulwrĥq+}en>{p5хVf<J}/N!#A0&g𖖖92Cɒ=d0 of&[2<#z8:Ȟ	dwBwI c/JQ9mbI(R-	G94yWxƁq\:KNL>=}W*-cWF}mH5]-I7
V^5\{'9nc|_vu!\0wJ "wi'meE_[)G`C;%׋A6
7raR~>wb~!,şa%f#tꅨaVU*S
^vH2mq9]]u?YW1QԠ֠ݜi3-c^jVDv̎븽u,~I@R֯fn0.ݽG'Č!OG<obO^IQ%	Uƕ2qh PK
     4                org/apache/commons/logging/impl/PK
    4{    1   org/apache/commons/logging/impl/Jdk14Logger.classMTU/_Ҵ)
~@iCPPvH&a$CmuJ.istaݹtҥK=;	~&?c8ч؍qg1'obR3eqs,.p	xWxU~
G,,V%$%,Hb&s+.@ v]YVłu#ֲ鰩c*WVɨM5BB0aPj!֮g3yH憘U̼Vug$}Fi^t@_ȥʒXP	#1_ZfIM.:ZI:.PmBXaJ۰II,N甄Ռ-z3ћ	uYJ%SS"kTNɨ#Iz<PoTR/u5Q0C2j>:6tԵ j.gPf)KZU*(սi
iٔA9h
PtήtiaՉ:-?Fʉ[`Ve

xzR$2:q\WN9
ᬌ}hсNcHu-%##Yc%+2r,((JX2nᶌ.txA6;<z{,"(гfX>[*M 1sfTjG]]vJ<,7nZtvuꂽdJ>7[e6^Mlvl2y$0o	
6;X<,*eE/)V7>NսiG&LMٓ(uT}`}\ >& h$[;=o`࢙{w{s
k>h Y&d ^ۤKlQO#"oH<?=ympH=A#AR[%VJ[=Bd<0K@]$.q	
N*E1GQ`Ɩ"BN;KAA2+oh5f#ÔaaI"1R9(7y;B;p-uUux!둽;; y!4	Q
,mcB~eg+Bݲiw- 'Mܶ4uLO M(֊)ihKF[.
-NV*iW1] whm];!C4Z ~Do%%"jh@eCZ DZVPM	/dQAbSA[3ABn_/
 U}gx$ϙbPK
    4p%Ⳛ!  H  4   org/apache/commons/logging/impl/LogFactoryImpl.class\	|T?2/`XuHBVYkV$ EL^L
ֺ JŵTmj֥jTbιM2~񛻜{۹O|'阥cu1W<u,бPuT8]3t<S:qE:qAtӱC-:nqxqwKǟx?V:ީxxPu|@C:vxX#:\_xTu|HGt|Ttq17:>:>ouBuLuQ:]J]E.VAktV!]uѮs"!NsI1!r"!"!
!Nw)1!9t8!9z8!68^pBvN4﹁1xY^8yW8y?2u'l7Tzoq6'p.'b>d9Տ>Sfr[94i_1k	\'Ŵo9|p	*!r"DQD!LcWuN9q챟ECb$h18Yqd0PNqLF2mpi,Vi9i	,e"2i48iqݸ˅:KZNֺeх.|W-܅os'r>>X'¿^~]7tW_~&<~~8W \D
*VF5.%'.яK.2pKd  nv1plv4gdRU.1Y&%f`K9.1V$\pDQ]ZM.Q]b).w	?t&lufZhE.q6qwb= oYɻ=m3|!ooS؈zCᘷ}n!_xb&/B9n(o/m47j
h6#ގQ0k!{hT"$iL-˛Oe%˻!3x	5yIb	5YxVVLmAUo 3">?sJ5,Y#c3%G[ 
Zh7ڍPhЭbkQ['fŧ-7>%Tpd{%-h^caZr ;o F|Y:
kJ'in/ƚ0N
zYK*((|:ɕٓ6z
PKa)wMmHRMEu'WF[y2>%b4:CX>X XXh3">VrdF62&]ZrC+S.nT2/hn;k쾷oZ*pp[Aa0BfQ^,Ѧ,<UnlfVIvd;%Ğت>!3SOq	Rt]{}{Xɐi'wOO=d
WVL'U󡩺ѩ\Ż
Huu$yq\s
+BbnS$xAme*S\-[
O#<Oޝ*+yӲOmN#+Tog~2NQLɾd0B9o>SɁ?Q0ji
KkV^aYe+$U֕.]U^'ǢEvQűF@ј/DH"f0
One)m7 A<dUKkWBv n0԰Adk`)b}3i2?6y[ލIFisgTJs'i|*
wLTi	>F^]1<ؙt:,r#S	3$Z**Dh2
"ۭ
w	6|-p48%="C9m~CqRG3"%GXfw'3#n$;Rt1x=46OVhD6	3e:ݪV,PYj%So`rrU/NMn[Y]R^tIadCFl:^ݰf\5r+кRج}	=[j1mf`cJ+_oGYˌfSNe8-A*mۢ<#;OQK]ዴ1FgtDCm-|֘5cʰ&鮢W"?_7_l-+y*YҨ6}1'ff%k'gv9aѾi#[YRE5L~V[MhM=n7",[`-XrH$`\XJa"[f!>02۩dP5"d:Ñs%KJ/[b\*!^k2"i͡֐bDȒ:Q`MJa^a|e_k%w:Oh5Ǵ	/@O峅/FI?#)(%UPwU<s~IL¾}e͒t#W EBԵHzVnJ>^(e
7=fz\eo 捶Jhk3m2~4=DjkoLkk/fI2Bюq	%$&%޶JK:zQVHP5{Mѽ6%fgyԞm9H)|dbg
(,}1)L[`0d{Xj2 l'쓬MH_[YSt=o;Dj¿\:K/!ޛ릟@"1>[h~M&fhn
ZJzZ{}w[jI[oTnj>*XYmn*>rE؈qX=(~mi*tsxNU邗VFhB?BDq5'V d
'S'ҚMrir_2)6|v|v!d
d2M#i]Lfn
O03phI˶jC#"f^-B]27|
,]KIRLȸ['"5nJAMA"
{l"HLeX?X7u'٥fb;|AS6ȕ;Hs͒Bz٫G"D+XÙhV$$Ƌ^C`g2äw=іɚA
n /㗦j MdQ#t9!)]V8)|Y֬Q	Q-@h䷚F/;Dh59<F`/Dr	zX	dwuh ue{8Th}/5=u ʺy:@ Eۉ(LCQ[rőh8w#^lLA4Tl
؄Mؠ^ʴ)z:YXMj1NR[{T':W;,u(+nNؚ	#k!ؾ:=Cm3]R:@%:4B-V;)-6:u{P̋Џd[rHF	LPD.tə0\IJ6b"7ʝ(ۤsZV L?r-J{Z/d~!ck1ڶX`.xX^%;ı3CN
~^6yډ{% |q2Jt[NSv0]p
Ij:I_!D3͈`Q<tKZw{zP/ؗ!OHN=͕RX}1!`Dmd]̂
VS{Ƿ|yO,qQg9&&aj+ ư0GXrT=8%_'=H,H3DgFSM\DYcḯR)'7tDtد(e$SiC'G5Yl( xTPOmUTcŶzWPnEe^b/xmeT?V_N^Krǧ_a✿E_㜿R%t̋	~WȺ௡Vu{ @IT{VOQ};ՂJj{Es<-
Auk+
uå/ Qt2H`R>H}0P7ɽ3-H|Gaؖpar~]<!ؠA:rhbt13ՙLc4G>HqOGSB+ XK{qgiC&{PLy|,ϡ 6XOyl5r.sE;徿i^m
(r9GUG!n?}4hs׆H^_"qWh}MMѴ
a۝FI<KM2"4,J"m̏tǬx~x#p,S
r,삧=d)rzc0{]E0=d#pWQ'	l8.>#:$1f'Lf.e[<ٽ<-ga[Zs	At:,bZCĀ^:yOzpTI]8O18{9<G":shýpo5 {ә<tx#E9dHv=x
zuǺ/	(9*R[p>d-n5(`	ӵiNd9d$Nql2_A8SH
'!Oy

T<D=T(/%XEe6(9p&RmMyTR;BR>ϧp\T1C(_o8Z
+_d,Pm
,\Upr5
kUUuܠc0"j?P@ܣ+W7IxwإaUO):Wt|S3#u.~/@Z,jrVIj.j.Ub(UDV,W׉zu}6uOlYm_KNj@mTC\6=jVm3u8@6a.^(FL#7C2\ˎXQIp	GQd%|$<q,z`[!這?$Ƕ'wpl۠Ƣ}k#U8[l$hBͅ{`&gKvIsGv%Ѿ$Pv;\:JwF/3XuGH?; -Wi /=g~c)F6V窇'V&"գ2_GusNr?eaU2^ W~(D0>{y$@|Z@ʙj'9UcVqJ
cߧ9g	B{u_Kķ&
.fEF)0^qBfP^de U<*(膻a2V+C`2)#a2
v*"e,UuQ)+%oQ(?TbxNYB1H=tN T'5
M#"J4TXҩ!Mդ	o!B-Ʒ>+.Qh}<3e˚Y^zjIc*B>r9AW=gr5zytU.
PͰ·]GS&Ay6쀑9UΥ;&R>I	+tenq7,P.EtB+2:K(/oRrĔCRC>בv)?>X(~rLV:qH|u`ȟ.5݉8,;"6nP3lP/=-bO(c֭^vRmb]Ns5t|
AUs%w(H` 85&8^	z'YO7H,Ӭ1o5Mqb3D
65γ,Un;H~	&pȋrj\{n&PNXqլ$; 6yD-yJoc^{LP/z)W/^ՐCyaz=WoMPByz+,]	Ք/WU?vz)->c|kbmAY?k1J%%&|~K/Zeɡ16#|]GN
/oKeHB3MO
C
qSGH֨PPsCO~i!9KyXfPpӄ[r@T:J343ULge'"w˶ZwzɢM9gLIr:al}V{KIRElHvbeqP,x 2!!tP*qjŃ,ϣY<aKį$O=~
,<#xv&C(O8*yʬ5SIӽ#P.VY}mmϺ=LKm`!ܮHRA~U-O0O.@aXClkJK>.&FCiy,fO'`@NNe+=zWb9*knp`	-҅b$IBzb8hG-1wlnM'ϻt3 Sr<I̽DGa^U}W
.
P߄A[0L}FW'LR?\#WL68SԦ3g2(m!^0rSAZ=9Wpy񈒂6cbmismOC탦@@MٚR	s~d^{E<"
|OΝK繻I>lQs~;{>pЬTR[4̴NQ=дr5W]	phG#}8MC$<Eg<kWBh2?u81n푿Bq`᮶yfB-A%r)aE9@s 	ѝTv,3<څ-J-$>RZn?T0T/V BN7fjSHsHUZj3\hy|@[ {b\+R1L|jepVk(1m	<UZ5RH[m9jqVc)ZikD[uتv,ܮsFܥR	Ak۵Gk >i-Ul|[Zb/-G^d2įWL@?{ ςd`?etTHFNW$L Ra
ג!.t)̳JDdWKh˸ _킼|yT%_9Irn̕q{gFd,e-Y4G1(i(H,-63 ߐ^Ze^FCT5	?~ruxg;D Fy9n^Uo{4<2;E5uXHց@}]p[1nbR;	N`_!*852uD|<D1qA	 H"'kDYF9
Mr07U&OPwv'&2ȶmqzM%2_RzI"g"9"ǧ˯4D
D)R-o^ظW,9,ɴw߻r!7zW#/Ᲊɏ(Xˬ4	i_D6y2d+`f(Z\g}CL ;čpv_&^<R	?5`$?#XZK8Q
r=?4F//!
ix7K>N"
Tx
Xm"IWTwʭ3ɶ(ۻ.5Pn~;fFR1$Jr}/"
	VChmH鳚ԬP`XYb#<D#JE f⢳ZDtNt!RlCn:j!7%l6(
Ra&N_>*U|`J|zUB#aX`=#=đಞo#˕aEKB7Ji=e!Nm)DdSgbshLy7Z|>cl rAE|N/2nu%۠Ch/γ?Ax|^Y4[t5?12ͫ#ٽR-PK
    4A    -   org/apache/commons/logging/impl/NoOpLog.class[o0ǏKtel0BL:iR=K=%qL3| >؍O_Pgвaӆ-mxZUMhrsIPǧ/[9L7L_&=/'ŀX𐝌>z&tsT
]g426;":9Ǝ/<|D:B
W'Pq#.uJ{YM 0Om*іđD9#-Eeق4
:6N}ur{#`,?!
0lv
o Ab21A"
m,l8 upÕQfKPq,6,X.(;)/xG+'\۩+E^FL%<TJ|'$6'?oHԐ FgU睱55Cc?z?5~~^==lͨ3
lj5o@vrd7|h@$%@C
[7o2Kkc?ˊPK
    4    1   org/apache/commons/logging/impl/SimpleLog$1.classSmo0~
aݺQ^[02>M*!M Q4njJJWC6^|G!Y5mlH`wξ__Qxhe㑍68pAkF,p.%=dh;>r/*2?#n1;{=&1tg:*ܚU\*xLlB*d$]DZ$!2E_**"}Ǉ5LT9ǆ'</H8Q%aH>'70RIzN$g&3H4/a
fJCȲ&r([;Cc:eZތa
0P&<zIr	h'2QT!C?^j_cI1>x,I
gQhM3,
^6i8CTOp>67HV!nz
.Xsm\'iGG8Q=0 u$l}Cu|&XsLvi]/|`H%ͨPK
    4u8  $  /   org/apache/commons/logging/impl/SimpleLog.classZ|TՙIpI@IȀЀH"y`"*N&7d&Lth]Zv
$iG[}Uk_ۇn܄d3{s^̝|O_2e*#'
KH!GLiQ5Fg4PkƬq35X8_BjTRjܡMfoVj|A5G4]u*Wyר|*oTyשYUޢr[URZkUަvTA*׫ܠrM*wRKeK^(M45Ҭ{TNzWfTIS'6Opvp6?~/Bu2zPzR=Mc^ZC饭qW~BFǽ^;!
G4yz_0}B}Fϊ'˰Vi9iFhllО܈ОKҼ פ;i^9^Yo<~s4yX̳-}Egӻ:ϡwtGӹ΋l1}_%E4Ri/\Ly9}[Mѕ%tV2zE5;:H_ѹ^ֹUuWu:~Et&*M }Yt>("9қL\ĔQ
R	ÒuL%+`'P	&`4g\K2\n.MEc)lob/sejnIҒ:sJnt+XSX.?#7uj'x'$6-SS슒.j~=VFMQVK\
j _S.ei-:m.G\ゟfKN\7[\&\`0q;doLB=DZ{6aC%ñ{0dp$PLFr<&mS(6㩊uL3bD2M#WVo[]ZfomSsCe+qz]4jͭ	P7m[_VS)7
WlݵmyT9iL]cm$MHZ+j&W67ʒph4[E!7v@mS\gEKﲩ3dml Us(df9ȴU.Z=Ezk0c$,ThVIf}dzΝXO
HavRi},CF C4"l(Z5cP.B-xȨ
얡hHCH]QP?46.G4\c-E24c)CuD4BJܙ`(d$ūq #8F`@7N105-u)`M$ŖIm&)4#2P$%rQPF4%A:ʹ1fv|[}6к@(+PD]O47";È&hcwAWc`泺m	>bk,1Q;NU-"8׀ŰH)ql@FʄHb`I.0nYa<hw#CbN8Q-JHwٽQ+fH!fu`\`ŉhC=<	r		N&ڳ](SV0Un$|9nU7rpҒ.4sͱdمK=}uǢE1SXm	tsA@
!G;e!{ɞv(4&&;xrYGu+FJ]F,KKc0l*T|iU9*LHU8%Y25dz"1pFDJIU1CdD
7Y}.<Qk>
>+QI˭JZnWrJk2@S]=uSi`zTFZsۗ=ManZkX\JkM'Ifi"b_7mខҎ`^9dkנ[u1oaHG,Dl&RMkv LMLs%'sҖwdIvb3a%1(Rr>3
ITK&Nfڂ'0~A6
/*ھ"hii):|0-t
)TKʧw {/9~̗f9X'lz}3S g  8?:`0'GCy/$8y'^FX'QP*ݏKBb-ek;K5cpfÞtnto8?G#t?Jq<äSo.#xihn>p<KU ƨݔ3q
{\IkiRi0m"K7SG!KR-OGi5}
<Nc>h,HOsIOQ=
ʧ <B3A1:I~vac?Ǖv- [znJJs_*Q<K;|F)9JFq4|(<L%FRueI[<dʤon(vf3 ir1yL+@dZ	j"O 4Q+?ϢYl2#S|@{eOlzkZz6wޤvRљ=oG =͏ Fqz^9<6
#N"ΠG޼\;W/NG+ nۼ#~WBr2HELf ƩdjYU<ӷlF:O;۞11xkQ;挼T6|ǌ?ǎdm88y<JOr@Rv6p_9se.|ɹȢ.kUB 7ѾE4g7'
r~aJF[{2yYn+9,E	)Seb^;x'spťDٔG9d1s\	;Y
?OM#~[8NmQj(v7c{ځ%E
P%]埥m\Ǩ9o6~-~G?	˨(~]Tjg[ix)ʝ܅-R)⹏V(+ї^|BN+qV7*ORx4+RŔS)c)8:rwQ4i>ϧ#ј z0ؓY83uaac_ggQ8}NNv2uʵlVͫ
Q!#4i/=O3>'T+^LI
O1C3>Gps2MقoD/ђR#sSsM`k,.u)8YvYpMX>3^_4g8/LAjXm^fI*Ol܅ZspԪUos).ݨ[]{7Iz9L͏Y9)pyWhq&j]U^e 3[7F;*<Uyq[R5p˖i!xYnjA5D7cY=LY a1ְ Y0C5=8퀉_.Omt\leVL#(\U絸q7ΩO:G7@jw#YZ1˃Xy;
2Ǩ"kU"h@
<H?xX:>o( 
iV?NL{Pp
Htӽn	cH3HQQ̽%b]
Wpo:.빌`V|qnS-OD$FCfDH]1Gw{?1eoh.7_#=[(9!+YFɇA豋ǵ,>0eKYLsv+i#.ګU@ke?}oijeT~1BA|9sNq&ȽPzF`&%IyPK
    4    5   org/apache/commons/logging/impl/WeakHashtable$1.classMo@MҸqZLB NV*Z"q۸C^WS 
8NTTZ;gwCk[iφ)83(j̩
JuPiW0*\u9hRY[5vrB`F2zQ"3	:qq:øSS~?'LTJ/)!nJlMHkJC
vAԥ	,;2ܑ2	]eнkAeWO
FJ
KIFH_c9:e
T+ݓX} :嚰§XS隃(Y5vGyUYea0

)SKu
/x;F,0':èQ6"<!"SgXH6~hU7p!\s.c12p PK
    41&    5   org/apache/commons/logging/impl/WeakHashtable$2.classQ=O0}״M-v>TvTB E01VU"񳘐(muaw:~}#G!CBD tb%gM	kUsCh̋$ZjV5a(-e*'V0JłWMr*c|E.0eit
eJgL=KzqNWhn֕5uF	;r8a{LR4V3	l7ڝ4qlIpy?зх.9D-x|ص8
yp#o?,PK
    4Wmo    9   org/apache/commons/logging/impl/WeakHashtable$Entry.classTnU]۞x׸i&jN2MB4MAm	CH;{ɌW/H4 R$>OA}f3/}YϿy,f:)L,l=X93,OqŚkB6^a$9\
xGwjK.
	yd'dS'Sk}rmmm4U+Zԛ
B߽T4md
lD،kkfuږݵ[e]-oa9]׺읫v؉즫)	S.;-KV(xH(y6TQv{%ϏJaHm
<O+*$]s<mS)0R"ǵ>egQ~vvsa}.yMG$|E9-_Y)@|C**.Kkcp;э{ڎw 닻U9bWtGґO9TׄwraC#8}Y<?,M$n*>Z1FkӏqG2k7;0s]ٞeaA[%2lU&ϒfن$Mc |N\i,$Wb^3H>x_٥3ܩ`P3?&q0byI8gN1-Lc/E-f)8EmT/6h
o#X"fp-}zuQO^EeFk$pARNo{Gk*|@\
YeTY>IefiEc@t/7f*NPK
    4Bw  	  >   org/apache/commons/logging/impl/WeakHashtable$Referenced.classVoSU~hK]aەE76dW33ݝքB?	Nј`w{׍:FJI<Ͽ(
7&6qU	%x/=0pD&^J 2nFLCl^𪄓rIb0Kx91	8!a8i#DJ"!"fn88vթmù=sc]wxj@(O\~K6{%۹eezaWR*GʹyiRU
Gw_ =_Kv/p[;w;
ƥJ'heE >8ɩZMyUP
JM͵V`R!{߄cDh{Ѩ]xa	uF^#BbǝɊH_SkU֧;U
uThI5ySm1R߽̕N	{47Q'?E]EfVz~+
oˁ%85$moTUAYIiqPMYJInc<Ɨ*湷@ڄib~GHY
x|3>Ч38yǏ kdH@61)?=dpsa:`xgl,:,V8p+
kxmtC*BF4p}D;7|,q繆>HtR`Il!d,:R0B6%ku~w>A2XB@<CX7_jWs8$iNO`FנicYX-5Kki}ɱz[JGC?!C1@`O1.s~4=eھb"<,Ә]j	ƙX]YNvI^mzGOG/ /-:?PK
    4piiv4    ;   org/apache/commons/logging/impl/WeakHashtable$WeakKey.classTn@=8q-k[( ^@H<&nRo 	>W$_3N4EBJ*9/Ƞn(!0&op',qZq26kr=ܓnK9nnAaMkK%wʸȆնTભj#JǗܤv(m YGuT)5~4"~G-w~X[//[Jz*ZeX`IP¿èЕ<fS-"sٻcvX v"W=nsc?HZ*\A駔J!]WGWXȾwkF
ԓcf +!OS"giuZ-{҅nW?@{
N)wLo"ԻTBsdKJ(Jմ+Y@&>^IdRzS$4	eRot\Ns'p
raȽ?"3z	TBà#(zj+8G+ObPK
    4*Zsx  .  3   org/apache/commons/logging/impl/WeakHashtable.classXkPT~>ݳ,E+\/Q
.GX]^4ޓMb.-mHh533鴓I;mg=}s..}w޿_bF1 ~7>ƃᬆ/i'4<)
4hkx^74=Є8Q\l(V!<c{)x{	$dRx,REHk)JKv˵=½C^h
鐍N:E>v	_!B~!!Bb^|ǅ8'pҋO
0Qˋ gqȋ	yGx\N/#__o/o	9/!qxq^\ǽ
ի(̯^v<r*GPz48u;\^ԏczR7:wOfұx9SX,ap+bdd['-;$7|yݺ #&=VYP XH?z;eӟ6[ɁPd8CPH≁ņ=rbw$5+HA
AEŢ2g_F覚LdeRjeW?Ci+ƌXz9ѯ+itH3;[tϲ{CO6#R3pf訞/7l[v{*,ٹ(6ŪK["$cƽq^Px,CMxMw7wthij<е/ǫNgRU^e$Ux<q6jL([ԵOS%@xgHNdToKA=2yH4Dw$SkB#Td͉YHGbF<맾	v>iSXY4sJj%c6Ib4bcv"2'[ՙk9Շ%.	|29&]XK5/f"X"%1dl
%sfin7ص6̢^gt1Z`g;I=&I+'T6{9 |i&<grͼ07oT4)dR8;R8W¦c<N'7)cPWj)pe	{ NB!Y*9I^~&g%G%58 8qzGQ~	ŗy-E"ä<ɿ+^25ų/WՌ;kGQBV#),F}zm9o)#s@dA=m	Qx(ZrG84z`~{Akj^Ei#
}
΀
4d.GY
(
ڀ{o+BET8h$M A>IO1,簄3X<| Fi}h۠%<@|8k䊰yOD=iYZ\}[5,wiQXI[Qs_v2MWMIU	*g'<jY}kO(c o[p9!
}CGяҟtȵp"mòɆe%e/8ۦ0ψcMA4X4oW(cھmbXhb(q/fkΤk+X:
=t~Ƶa9VeW	jGD9=&!>dY\2-H>Smpmpu7s#Ċ):~U*9_s2F珅bU/fc_k3gxN2^ĲÎ#ea4#рeeиFJFQ,+:׌,b-~\z%kn=il'yO/bƤid񌙁
p6w;"c[M4|+NT90h7C^l
r2V5,mL3S?regXeSr96)]d$ FT=զd,"=lgdV7\L0_ T-Dj}z;ZJ93M{j\EӪu8}-(:FȦB\RķЏ i'ʘìWǇ89~<PK
     	4            	          A    META-INF/PK
    43                '   META-INF/MANIFEST.MFPK
    4m  ^,             '  META-INF/LICENSE.txtPK
    4BZ   f                META-INF/NOTICE.txtPK
     4                      AQ  org/PK
     4                      As  org/apache/PK
     4                      A  org/apache/commons/PK
     4                      A  org/apache/commons/logging/PK
    4lI:B  r  $             org/apache/commons/logging/Log.classPK
    4V\\v  "  :             org/apache/commons/logging/LogConfigurationException.classPK
    4t?_3e  X  -           X  org/apache/commons/logging/LogFactory$1.classPK
    4åA  G  -             org/apache/commons/logging/LogFactory$2.classPK
    4    -             org/apache/commons/logging/LogFactory$3.classPK
    4+SA    -           c  org/apache/commons/logging/LogFactory$4.classPK
    47
    -             org/apache/commons/logging/LogFactory$5.classPK
    4=ͫ%  R  +           "  org/apache/commons/logging/LogFactory.classPK
    4  
  *           H  org/apache/commons/logging/LogSource.classPK
     4                       AO  org/apache/commons/logging/impl/PK
    4{    1           5P  org/apache/commons/logging/impl/Jdk14Logger.classPK
    4p%Ⳛ!  H  4           V  org/apache/commons/logging/impl/LogFactoryImpl.classPK
    4A    -           w  org/apache/commons/logging/impl/NoOpLog.classPK
    4    1           z  org/apache/commons/logging/impl/SimpleLog$1.classPK
    4u8  $  /           |  org/apache/commons/logging/impl/SimpleLog.classPK
    4    5           ^  org/apache/commons/logging/impl/WeakHashtable$1.classPK
    41&    5             org/apache/commons/logging/impl/WeakHashtable$2.classPK
    4Wmo    9             org/apache/commons/logging/impl/WeakHashtable$Entry.classPK
    4Bw  	  >           ؔ  org/apache/commons/logging/impl/WeakHashtable$Referenced.classPK
    4piiv4    ;             org/apache/commons/logging/impl/WeakHashtable$WeakKey.classPK
    4*Zsx  .  3             org/apache/commons/logging/impl/WeakHashtable.classPK      	  t    PK  K;P              META-INF/MANIFEST.MF  T]o0}G?XyRv m*II-Jl4~!%= {9K93+uEapk;HhaE/$L3Y**XaECށFVn3/q~'d%]NJgQ%N	Ȭ$0 ]K-~O;W٤[VMBC+բLA2XWmmRmP^gL˟h^:V(f5(dK}2&!F+?`osEݭK^Hq_T8:b3Ysis/LL6`	a+_VMm&Nrr#|G`+W{3smSKuq.,SN̰xiw(=\g>(|6:?1k!$#i\ΰ)qkWE*E2TX?uٷ3s{Ļf]FaKkQRz?*OPKL  _  PK
    K;P            	   META-INF/PK
    K;P               javax/PK
    K;P            
   javax/xml/PK
    K;P               javax/xml/soap/PK
    K;P               META-INF/maven/PK
    K;P                META-INF/maven/jakarta.xml.soap/PK
    K;P            5   META-INF/maven/jakarta.xml.soap/jakarta.xml.soap-api/PK  K;P               META-INF/LICENSE.mdRˎ6W4( 9mEFwH!3O\b-vWWU?~wSO@z6,=@
vz@Kv.̓{<Ώ)&Pztc3OCO9s|玮m"HFddͳ4g0?53~,޿;~\l
	&6vO?P7nP3
8G?ǫKWϮj\}~ƶ};-pF3H_
yQ1р L.#G)eV֥X56♷;!#+.8	I|U9~
 J6&
<ٱ[C-]Cd;0Gbp(q~ɶ1hv1SxIbФNQ\rzch#˂+M*2J,k#	K/UvkMRJ@LP2kTe]j@JeFfWfZIhU_04s%L0ю)#d*AjSXLly 
?ʐްAW\ACByA-K~ŅP<7Q)Yfw<8$$CS,\Q*ؖkŷ>|Raji-e\=?:WkaaM``JPHFpp	\ڋ丬l&	*z~q9-p070zPץX*BF;`qavՁ(.%;KK&"V<(ڀ\hqQ0\WPK[G2  f  PK  K;P               META-INF/NOTICE.mdUMo0WaG&-k
;(+-ߏ6-!vHYs翦0#ۡZފws5r%
j^N EG	T,5* /	YSY^w^CE*(T+͗ġ1g*f/΅VI+Q-L
JȚn38ɎhK%J *ܿ,<o6=bfpOaDSڻ\:ݞgyq3Kׂ2JIb~Lg7.4&pe<9XGaq}z%zEK3t^ԢV\՞>t\vQ%KXФB)Fy)|{Ci*98`p/R~dn&Vq|jF'wah<-Od,mEDDߍ(dBKԖF 9#ZF!jI$^d!Įb9]s,Rـ;Ljɉ!]}g`4(M(X7؁6kw1'œȃ#Q_={hâjFB g֦
UVI7
=hI`|Ӻ[uH$Lvobh|H-&NyilM˭D[!c啩{fY\aˎtI*1aά|K *h<bw
"oƐAD@]#GUYƑE]%љ4d'@17׆p,95}Q	!p8мuIXFs fV\^ާFn#}cj$U*o*i3PK")-  ?  PK  K;P            &   javax/xml/soap/SOAPHeaderElement.classmN0Д@[b`L1u(b 5I-+UT«1 <:A(cs?..z.BAl<ĻЊG&O_\Jgde,&t`AXU֧WySF)Ll_խfNVݍe*>VG/ʖy,n?
 tʹpm<E&x61.wP]f$-&
HiuHrzJqRi	:t>_PKŰ
    PK  K;P                javax/xml/soap/SOAPElement.classV[W@U*`zbobmSO{˃o!xBIKZz: M||3;; `E(>i?tC+IMF }>W.ic)-4i1'IשH VttkNKQe-W6!Wa.!.c$2n!γ6mZ2I)W#k;V4J`Qa26CX4V`KT5[q\^5hrZX^<nDź.H]6
Qβv7Lmj#h/4}͊qJqlxW0"~zD`gN]Ol]yqM
5
6U(=ⁱ1^<ь貮iʴ4X<	o|ӆgVv,zj=333zS/i}}0u#L>'ݛ4UK*V/oͫ`B%VڶJ?Mmx_;<S쑵ʚՔ{aڗ)&7	F܀)䢈"tx	0f9`&_pwb/
U!<"=5$5:Sn&_e=B ~/
/6PKJmW  	  PK  K;P               javax/xml/soap/Node.classuN0ې)@[XؘʄhHݍcTN\%)WcP.DaGl? b!Z1RE4%"&.0Y0xEbUBp٠%/s#V<[NKVEl)D;!mR(#TϏ&v]dJIu&}ЯfWU Wn{?ϛ=-"z-yh:cl.m1XHm8'%"dsZJ;OPKA5    PK  K;P            "   javax/xml/soap/SOAPException.class}mOPJa0<@w^vu_C1~ _c,Dig2s:ߴ{v7  8HW(V0Y4DdȸÜt1,(ᢌVr	glKƎ`_бlڦwCB8;)!);3m^+oswC$JH6kuv̪Qg-갊^W<ӱId ۢ\.-	c?6UmGJ{kZe%j?;NK.M{|Ue\#jơcFƅA)͜R䝚[wLc͊
IAΨIWU\ØQI;"߳,^b&_evK;u"O?+nVR;QFvtexw$Zv{N±Ħ=40N_~Bdzj%z+Z&}F#Bg7Dđ F60SۀtB:mQsb|`#=@(Б rDڀN $&QWOM7T5H鄦 *$v9XxDS"E]q EvHjN Oa_#IOhFm[tRNr(㴊Aa>wABe9DYmh %#3N"סJutj:ݭvWe&ސ[߷̑i	sD87PK.N    PK  K;P               javax/xml/soap/Name.classE
@54B=DmMA I0(#il-z*AqzX#pỘL4Qp (O/37,
!֩JRzӧc-R/NV*cqe3ubY_H@`ƶ	#:6'z[~PKN !z      PK  K;P            '   javax/xml/soap/SOAPElementFactory.classUOA-=z="HREAE^ʫ@1)qkW-OaD2ޝLٙٽ'YlɈ B23BJx,'2JL¼0X뢌,Cs	/S'U6ScZJrلp$һ+o<CpQ7t{a v]>C`<mۺS!,DMM.lo3`P7<
RUfjH90v

b誛 o4uӠuFlG.]"Dڶt#sW(+r#{u0g UN/1NC6M`FĮ˾賏v-i[NvԼ7A9m-'uaM	]XQЁN	
/Đ#7 uQ.0.=WZԳGb}kDm3^HzQ
$+Bt5C1l|L<τz2yWynUlxN\wxfh:PiMW׃ }Z"!fHZi4
!+IV9^Y>&
? FwG~}xa_/VR 0w	*T
1"QRN}j 
j =
G<4y28q7
4!kAh;;G;
϶!#|Pi)5^F-eWp/
B-8h
>>;5*P?'k=Dy0oʭ/PK    PK  K;P                javax/xml/soap/SOAPFactory.classU[SEulHIdL\JX.	H4bl3lB~(2>*//zzvݧ~L'r
0񡌏RV}32
2ft^
sbWbA(¸X%&|na-X*!]dOa3gX<5:~`U.!yr`LB{&"!1Hz`9|Z.rom.\+̳:&/,_`HelmwY~sAiz|eF20F-|4)A!34eJ`C&9Vܮr0Nb0p $\˴&HUkl	vTjS_-"VmF<vCIRv:t;&yr(^^M%-QDE*c1`旳ԉ)U5]ʠV=-S1(!W+xi=&:N£Ps:ɲZZkSyV\cբi3kG貙nkJ8wt$_ut-'ljg`glSf:q
uִ.WlT|Vc/UuzZև(-*tLģm7xղKܓpqVc-1>Q)OdTEL!|qNV#~$i"VRL>yɗ$TzdD@\
<
HޗiU9lsstI'vo n%q~z *lKI%;v }\o2^E5h:i	1PжnAeXp!xߢyƮ@R/	y2<1<<Y"yIrzp:FZ$7
5{љet2-"=3C?P".:gеJ@ix;{r"Mc{s'ZL;ί(I0Hdsivi_oʵLzF_QrvcB޺I.!cPK1Z  
  PK  K;P               javax/xml/soap/Detail.classQJ@icc[Uѓ^܃HELAt[6l$5~%NSxX_ 0c|p0iXFzRQyJKD	O.iʈN6z;J@1_Fsp:xTQ3ri&ncKa(kz0-HFs{ 4Zej!#p^)8kPZ%-?<ؑ#'կӅ0-_7PKH    PK  K;P            %   javax/xml/soap/SOAPFaultElement.class;o>Nv6vvvFҢT̜TF` ҜלԼĲDFyU__XA B?'1/]?)+5($ET=##33 #db` PKSv      PK  K;P               javax/xml/soap/SOAPFault.classT[O@>TVYq]XE@!Y|I-m^|3m^7 5x[CӘG=XO5)7B)woZG3㹡EUSy@O
N]ۘDJq	s(	,eQ@?
14.LۥQ`Z[jb~5s^93R9ܼ]|7+bv}ov;5[W&:L}v)[TLM[AO,c~G3dPHjYh2;.n;9T_͢PדTSk6WwNT|*ݼUV&;v=9^Rfs.аF~q6e.
k>O@9w5	4z5j[AJHs¢mx*,[Ճ`V*9WSfPaVBuv>-a-F<7H3d2^2tv˔yUdPKz'    PK  K;P            $   javax/xml/soap/SOAPBodyElement.class;o>Nv6vvvFҢT̜TF` JלԼĲDF9U__XA @?'1/]?)+5($ET=##33 #db` PKa_:u      PK  K;P                javax/xml/soap/DetailEntry.class;o>Nv6vvvFҢT̜TFԒ׼JĲDF)U__X$\>15'575	@H21 PKw      PK  K;P               javax/xml/soap/SOAPHeader.classSN@HTSЅaACXˤ))SN
W,
]4s;v> N8V@@ӴؐqAVm
k㡥6im:dsv/KUXg#aUGwDuFw<cc:49{\(]w4rC
oy´'*l
]Tx#ЊXV[i~rwB+~۞˶IQIIQ)VPim5z4k-,5W),17,KN4L.P8ׂ?&wJ/	COy0Z
>y9H^8lO`QQʄٖ$qBfvJxO6cped!7#.,b\'/PKo/    PK  K;P            7   javax/xml/soap/ServiceLoaderUtil$ExceptionHandler.classN1OaQoqbtaф肑}d2 >+>eJ MI{{zN7 gM"\[1l3DKRI/TimKJܭs-h-c\
mnjB3n^OPi|h;x׬	=z)/ݽyF!7=_Wbi[4CyD3]ji10)N5_KSd=!5(50aɺZRmaTy}mkA?KR0ad3we1ы
5=+.)2gJQԧHP,(+ĢB<KqQ$UPK6\o    PK  K;P            &   javax/xml/soap/ServiceLoaderUtil.classWWGC2ƖplGBĦbLSF=hi4m}_i^2IڸkI{zh$4HN轧~-z/mx=N
B6<\)8oi,JKBzYd<F#>('B识ēa|O|T4cOd	|J|τ>'!|AX}ZƗŗU|M4_ck2)Ԓ/8FQerzN~2	xbRBp0%4O:mr&2TsR
ݛ:sm.K=KfO..Y52c9oMw{L՚q+Ncfgg
.9>߾Dӗta,Ac~9XkVGYɑĜ"Z(`HV"q7ݔ$8]	\lG%P\`bW]䥅co>	WqQg7ߒm	8k7f-یzXou&*ʪ}Ul*VRGv,tsRgdܱO/'5\Z4D)D#{*t-oRE2CbYyWgp=ܪ	Hع&,J916wyoծJGQtG[r%ϨyIt\s
Y{īNƜ;5rco
NVbѲ/94ak֫n565C+g4m-ttGusD<&VQӊ9،aebyB|xNC7#?O?SsBqO.ICÐ&L_yZb!%6E+׸d0R}ʶvtyglJx>~gQPp2^T^V[NAg[2~`)^v;h9u$feA	_Vm1-7331TGD䙻		V+/
^k
ynF1rvp&f067JmɊˆTNuJO_>>	ҿi]qT՝yOԺvmt5		7t坂Ul	Mq!XkRd%K\srs-_E!=^,ݢ.,肩]
USlq5lܭ BZ{n`r+Rŝ{xneNKgg_<Ϡ\~:	Sđyu6`Q;sz_&o˫]I/gB6[w?["\f:gN?^3p#K;oBz:v;U8߶@o;Q)	$_@]$Y@@Kؒ*@
F/"$bb 
GZ֯ᮗMi*h9MߒVG#p(mg!Pޏ~Sq2L\d1Hh;qDЅ<G)w t	ڪ`г񮲍Se!O)?v]2R2NNP:n.izF]R^k^=rMܷ䫈v6wx[3hLv
h-`T`[n4qN"?stFx`vĭeLr늒"	B)B,뮕$]);ˍR[*1z<7H
e k
+r	\=së]`W4Xb"+#k-c%{:<)7PIBPOp+äWR,2]J^#".1rf(G;9ֹ#AK[QwZFۣ2-J8^x o`g\h敢V'::	r[㜛hf'Ɉe{}Cg[rR:F"
lcO.Wq^*phg2Y@ܭ+r"wTLӆVN(	|sDha#Cj?eVN.	PKP!g
    PK  K;P               javax/xml/soap/SOAPBody.classN@g)(&"$&D4ċ]n2BJm0ovo3|{kP@3.lE7zCB:6%Au36	;!#eI=}ќ@j3פY9%lړ٢뢤?b\QoZujL=1ځ޸G`
5؝ivli|<KɃ:Lr̩!:K"TWm*$-Z	kق@qz4v#PŔ@yދPp4yz\r6YR22Qڄ/Bl@ t%(GN`+Ba'BvaoT PKt\7i    PK  K;P            #   javax/xml/soap/MessageFactory.classT[sF1(@-(5J138	FlRd0/K)3m)ĉ
{vw.ǟ as
,y
?Rຂ
nj0▔?jPq[jFqGO+czPjrY|X^Kg+Fmy{f8<evC9]2C俢5O:5,5WH02l_b|v.o
#?xKQ<ǵm&;Ye2DT_.-ڑ{2f_뼝0`>Ym~۾Kv x$AFirN %pU݉AB
S82|-c
_2\dfUoYaǳrHwVlEB7-iAa`1I@hj
(!&:0!͂U0&E1˔ƐvG;:ǥ2|oZff2Fx*)<V'Aڦ=²wONTqVz[sXry7
rv4*
TBb}t
젩t{0}#㺈PQ}i9Aa'18<Vz&yd88E4}0ctzv$ccf8G3y\ 9JvoHg712H-!-#ekFWA[oxn_ƉE0qQaĜT'OCNaM:]rx:M:̘%Ҿ0o*B_")\NRBRb[GJ+o8@J3|,iwf!(ݦPKS'k    PK  K;P                javax/xml/soap/SOAPMessage.classVmWE.R
hP-D*L
	&iڢ'S؞nܝE+~/z~Gy3$@df}s_w 9R ;Q6eBPAU!x@
n&2[r:S͕*^)eGF!MOUk3pj5\Ɵ^6) X5_*뺩
H
Ɋn*LTjԨC຤q:j)ǢTfCwGN<֛\L<_/8[X;&}.62 Ҏϔ(T&M;Qø[j&0_ۻF15C64T=h?rMq\7Ryl-|6^_nfm`
D-7GY;t?+*WP>RKH[
ZOx in`v	"c(gݺ3cs\?RY55b!-NpX4EQz
@.եk>}~ꍀ)u]0C9@	bWf?4^sV\Vˑ
Le~XVg>CX4p(F7nPͻ~)˵UP3v$0LWpk+>5ٴlδRSt5C/pmD8A
#uՠÜ**NHw̿_D=
н@s!||ߝ R~Wz@ml8f'љ$3UK뒓mRcK>Mvk8:qJ68f.4XJMUg7r-2.q	5ˀr7+(L,^|I
W[ I	|]qO >B(``RaJ7`	$`UX(Ch-DB%xp<<,w<oÂ\a	o%ʊ'[Uܧ)) gF`I=?e
K'0|ѕ_[</;2d2/&<y%|ha
Bhgv6|;/Q+배SL.@,m1zC 
-y
-Cð	`
C5Bh2&MYA3N3:w[Ӵí4]Myp[iQ౬N	
uA}
>'fPKO    PK  K;P            1   javax/xml/soap/MimeHeaders$MatchingIterator.classUoE^{&1Ihꖦ4ؤ@Ґ`'BAE
b㬜-:%\8OK.A 5p[n-_͛y}7usYjz0&3R<ۉ0.ńTLjxSrFqQ
oCVjϫⲊiHpKb^rMp@q]q؜U
2V2+rV53bNƢO?b&\6Rfu,U6W\B	D',r'=B~䊀.zO޲͙zet^1ʴE|p,9dl )b\=gۦ-,gt;^Xɖ$&GdTK,k5o dfbǤ:fz֘?⃟]j]6uh^$xǧEpXG?)<)px:rxQK:(I8-f0bΘv]1-/NZ"FV(r%YFCݾ|
|FJhJO'+81jrT8>H%MSM(7haD(?Ώ:d
R?p4OxDab
Qz6Ll cx\\=LCUzT<'-9V5(F|B7?ĉ:8*toz^HmߕI7ֶ?VEy ?cM-6f%^U
E|p12,at}i-5b7HDJ:ŏC|eA:S<&49Ua-Y2wl=<>ɉQ{)>6yfy<C~9SҍUFF1~I~b~^չ㉀6
B}^  ]]74o4?^|( J Qx9zg7#^hZNoPKN^    PK  K;P                javax/xml/soap/MimeHeaders.classVYSWzYhdQP0`ЀND8		blvhq%$*y6IESTb*ZU<<Ҙv43jO{~>
	~`8.by׏Bc8'tJG8-g;c~p6*Lsb}1*I$2B.cZBՠMLF2jLKP↡{Sj&e$5uJKSΩ\VOEG%fsiMBf>:?fLu6:hǬ1z
=mH{)Ʃ
m(73O)M6jjDMQie5Α&&aO]aJ5lX7?|	ο80ͥgu954Jhخ.A*bpVM\Tg`@}V|^0s+c$uj;kf9-(Uf=ԱBT V5W ,txQ+0|"HHyQEh4)*4l	_gU[E<;g`+qQ%$ԗ̮`
.)L!
P
I%2+v,S)-z܌fdlV7
	mٶ	D=bR0
Ẃx!^?.7qTB\{Jh(
ɋѯi֝j)MɊn⤬!.6U圚ēzՌV92')鳳w2I	$٫q#k/nSf/IN|2κ"fqr-2F;bv~œ	bo e;Pղe	Exвu-@>i_aX9"hIQ7ƚZ~:ԔGwT"y`C@i<.|!e-L [ŽR৽d'b?x>tc 1f- 1Ѷ	mhg@'PBzy8R,^ƷIsE!?<ҾGbZIKmnzcԬˣ*P5ZS߼rr5$Z!Wsjo-bw	QKߺtJqA~GLC%Bız-X-XygP123Ndg9J"m$qӼVtN"l-eeà)ysq56R1{~̉̕9̙%xs(5Sop$u
Elyl|H?k;pvs
P!~D$	>wϦ%c.=CV`u詀"$uF3h,uz5-R
{R/x~Y`1{`|Bb_[0Zu/svX0<"Ӂ!J+ծ{t)b7-_/!+ڷV\-jQZ춦|Un2K}룮o9qXYш3qؼ6V:؅[cp)]"dhLhޱ6`eNPKM
    PK  K;P               javax/xml/soap/MimeHeader.classuQN@=C)gƸѸ11.&.>L)Db𣌷D0Ǚ{ιpJ:VsHc-	6Cx<88AApO:;6\
ie }%{Q#0?CEi
9?;7?1:"neKڼu477~2Q2'	D&20Lda0e(LZ]юj6=N/CJʪAuk->!e*IHB]a	X$dkLT0U%F)X8;~CW<c%h&s_\* PK~96X  _  PK  K;P               javax/xml/soap/SOAPPart.classU[OQmKb)ARa/ B"ŗ,n+`>;^}}sӟZL"8Jaz.ɴ,3Vdz.QxYtwE`&'QhָDnB<kv` *3zEc4Jqgmw9D%nX5neLf~G7U^vu۪ȴ*Qr$J5 Y%:UBUƌ*}۬ipEgdy0Hj+'Ǘ'ȠMƷuLE[qmOSzJ.L+/CCtsUW7-;̵ܪ/&-wo
Ңe檇4C^fj
+(ښmHì{1]uTkԖ>q #o9Q(
 6ƾjF[-FwhZE98*B)))TEM六VMOPF/u p^$I3O`f/t	X=(6"%B,o
8
L2pJ|rg_HO|	zI<PR:&hF=/B/JtU?Ōo`|_t
DQASkZԋ@1۰#
l6Aނ_C}hS
41؅Ůla4֜p,4>iD9^PK7QM    PK  K;P            #   javax/xml/soap/AttachmentPart.classTMwD8*u\Ж6Z٦|$ICGq	DY28ll9]tɂYmyҴZhy7oϟ>0YdA54jjFEa͐Zaxb'WmnQvL}'d\{ut-kIJn7'x {B֝EDSe;EK:`خIʡe
?6f1·\Y )kq0Ƿ^-2I#)Yܩ0LZ\<!nrxUzJ}r.Ԕ8cTU}T8PmeKƽ++qG-nK瀫v[=Ԛ03k<Eqө6H:n[mczG<^'[(u)UbSܝ]Z$ #c?g4fwcrrmg^k*M@;M&xC0q-nvv]WU'h7gd]kKǵR\Jcug6ok<He.}hj6zB{Z53T͆iv`UGjMk`Ypb|J8t%cDcK_HI2)ͥg35Kx ,#F}`@q<9h&O9+F371q){+W0=s$<Yt`n>h,rCO0\+÷Ǵ2!G` Ͷ1žE}Z;"J]&+?iG
ctF(bc9Gb1$FZޏPWO0SV/kv&Vp+mZJ~\mD'uF:Д.?N7:FgωnİDv
zmF/^ PKBEE  	  PK  K;P            !   javax/xml/soap/SOAPEnvelope.classN0EKix<6<ouRHTC¯(ĤUH̽wkJ%$"mIg$8zVF
m?x%ժΌZT
niQi"_Hf	{1UT8y^ۜ-7sw1)^aZEt^O%P~4{Sd\2ټp|-)͝ϝǷ\);bod~grPKb  (  PK  K;P            *   javax/xml/soap/SOAPConnectionFactory.classTmOA~^)`(B[[L@,	~!˱n_0Qk<;X
4܋b:5d4d5Ơa*J]r1D@CkխbuR^}/JkFSXWo,nsv}!wl_r[ָ6st;{d((5«]K(0V{;ư|gAVհrݜDylaHӱܐFޠt:sh1geW*7a;953R2L/5*N3DT72FI1L]ui~Q7m)<[zC>
>a;R]4<=a.|MCvV}LI'n\J6TO,,Ʊ$qa95m~uO+<ASmr}0,B⾿|qfw]0C2Lyp+DӴv'O I^%-z$Zɒ#Hf.#F(o;vdnd(n"&CɞW"1"жM"=D?Cďh/1QQ~X8]ߴ	namREƃ}މ0C
l"~'(PKl}a    PK  K;P            #   javax/xml/soap/SOAPConnection.classRMO@}815P(RBBC YEQVOHQ!Z7V.v6TckBJTG6[}w`QR2*;LU(K31&cY#Ҩ?>0I"\@jBVdicpBp8eFXla$sUrޣj6=Sd;|h|Kl&尛L8}C[b-64'mp\<4g2PrSB֣MX넰 efKJFVAx >Es9'e
9.L2Yzosr{rQި{G\e+<g\rvRkPK    PK  K;P               javax/xml/soap/SAAJResult.class[S@ij뵴@TT"NmABXK42"g?4L9?=gϏ ᅎ:tQ:!#I5(bJô
&CrОfH,]ΐ]u<~P[kǥH-wGsՏg<f }s\~,1+G6ߗ
t-jnI%u/6kQ0L[(o <$h0/U׸'a-bY
-Cefb"lG-{^%C*9O1"ṁE,0l0terkҷk殨k
hMckZ
Zl)/iiy6&Z	TsKF[s.wn6w᫙tjj
lZ>`$j]WY;,]ނ^o0t5Sq@.9.rPߧuQ3h52)1N6diSdE3.ut"!/.UYFxD<B!j֏]fҨ初*qd3:8uNaÄQᒅbUʽJXDĚ} S8zLB3FPKLxq  h  PK  K;P            $   javax/xml/soap/SAAJMetaFactory.classT]SP=U@")
~΀-mL}\¥ӤJ_	,ww{lν7 x)n CX=	%%!HHBCZ
!a.*)մ,
z*_H%Rj(b5_SR!xBF-Qt,ͨ2'Mvᔹ면)UϡzP}5lx*=a]O&o$Os1O;լwt1U~+k:TELeZt>K!/SWF
 +lD+ȰR/"B*UFh6-U5wlea31f]L)f82.=A9ߗRBF	b/-A0)H&zx]aqSۆl1%#.hN	Dx0Vsw	R}rng_N'i͠tB`l(s^e:w$.jRLNuHXg*Ԧ
3`C&/y>G(ȺJ#/ 	1+G-#+ |';B0&ED
(E)\'
z`[MJ',Nvw=E )	~Lc"gp=w<PK]r  u  PK  K;P               javax/xml/soap/Text.class;o>^vNv.vnvFbԼFf
(FҢT̜TtHjE^VbY"#0Я/O,I12DsRK0 /J/7NOecd`d`BfYX@,v  PKݢ      PK  K;P            $   javax/xml/soap/FactoryFinder$1.classmo0nfJa<m躉:UuC*0)c/jRgrQaH| >imY>|x須'6VAg6RɤŐm3XQW0,vIHJ'
xx̵LϙJ2f(QJݐǱ
B/A/mBWMZDqH1׌r:h^Rܘw/@ľfX`DyL&reOd)B‫n(4?d :
}HdXvڞuhі_E:STF1eV$kZyE	(3כֿuƵ_7^-=J?b/PD:4#H`hCk(p؀m,J| }<GaܱUFHwwP1r.eY$[aM#/'egHC<21v[4++`<x_PK  +  PK  K;P            $   javax/xml/soap/FactoryFinder$2.class}R]o0=W,ll|@m44i4`R<N8@K<?H<!nҀ,Qcs߾x*lp6vl
Xxh3Qkf°~|܏
R/jRIs^\2T`X=JI}~$28)2bdB_)%QēDP̥/a'1]XOR
n푏NFem\FOTS) L-2Fj1ڽ8Ձ>T*9ZcA
6Xh;d:n0l_}zw{yDBazĈɿ]v]ng7?jİBФvsԔel-Z'0J(*4:U̲
{4gku#WS{Hylj|M۸wqnnPKY>    PK  K;P            "   javax/xml/soap/FactoryFinder.classY	|y?iwgxk}CF։-ǲ,aHla@W#iծ]	Rr4Mzp@phIeP@[r6mM$i&iIppjZj7{}oϿ 6C^B/>gy:)=A?jxы/r+U
_u/|
,b.)^^d-ߖ<]W
+/V4Ћ|X>^^?Ot_^< h_z+㢆_{QސK"!<]¥	75]h4@(«BM^E^Q,*]̕[>Mb=(kb&b|kbO%XZgD|,E@]^₀H(0Hl`,n=
Վ$H\j^`nƦ=]-ޝ
MX%pUӑ9bѝh_D٠=2MBõf|
PKA5
%G@[eƑ=iPyCKogSGwKcSok{Îֆ`C[϶?ݝ8穢X4EݡulVr@~nWcsZ:hƻB#d"ݡ%ߝEWrТKmf+ڧL`WyF*^3Uiڌp<=q31IN73k*()u"
ў$E"C&>s8nCI1OGfs*?E\9pʧnRu&\[hXkb7ZڽnCܯoՎAaԼE7L?$JfrY
PKP:˙k:D8a&bG͸a:ɷ;K-$4MLH$-}(#av
%tEiQ5%L=L4nU$л]$E1FSӪ+Su5J
̳4ߊ{Z5LwiLDr00kr8}8}=jHͣ96"+\lX6=V=1`*ʪ4ޛ>5޿2SỦS\ ߁̓r(ҝO؃>a+)rFRV3L{}a.rGIM\roK8ogl$6-Qu0qxP"lQkq&1:^ *ف`sD`Vb(pDcjYQB@*u9VH'p׺c`l$8hFdl1kqClx|\7}Ċ(QQ@,0uXRj/iMKCb$F*ۙo
4YT!iC\/❂Z4
b2h4dxqiS "v՚ؐiQۃy8UPPp"ib!ZE$50B;c+}
=Jt]Db=bd|3ηQ!n]Li]s{U9I'lc$G=6DM8ǘIY

\&kr>n	HklV2`%0 dMIPFbn?S%m]ӳ-UszYA>lU;A|YFqĜƎwX|f@~+1X3xx}Mu>&H^3q+cU/j"(EB`7Tҧn;	C3!BMm:),h*$3X[Cck֛ytBX!es7٧'GKOk:/&IHrJY׼y9ox"h֥ >:8}XC9jUھ`K\jHTrh(Kck(L@\Y:+9S咱T3u7݂wOи[1o{+?>ԭD*_%3ÊtbOIPβܻ)}/$v~}yNLr>.[	ÑXcQsd]4g
Ǽ}$IdS)UĦ+Rw}ӿofpeyJH?\4؁ũҶX}6gT+2u]A=ʬ}Bd#є)^&$Wxĭu#idG"i}=qkHltOLm633=qkފR/ cIK}Э^M g2cEGc)s*ʹ֭t'^j|}A_B'-2Kڗ#5$WgD {P w"g%9σC8zG~wr%Y-G~~]q
	E2̧G-v>
 q$8x8π}$&_wWO]{&1&$<~mLmknWLUK}ZWwqY~]&0AjlqXs(;=9߼q÷q,\h;XN߂bbڰA@5ZtIC[9;[Ab<҅ә;Q$~nw+2tzGzv3ӥqfwH]xC)gǸOnS/wpgy7%J#x/G{}=j
װJ/DCu2r\zPXqqFTT.)NaM6IO;&'HQ0[?pSAz+*e!Pdr\^!NsM+)H-!*l0).-G)筚+VOXC@<UuXwB8Թp		 5>~n83C59'!LOR~5Ut:_J),]Nctvp3ʉ09ngV]t{9'p^$$G;طb!c GJO3!r}SCqJy1?a|92Igq?C	%P̀tQ@v<'@7W9k(%|D5P3|nf\SY.ߡK4@S`'L-/Q=&Ծ~,=DJO43/K10I$خ1X
{ȟFmk&.Xһ'߷׷sצ~DzUccAr)CQsɵ->­~$Y*>y4;+VM"ncw*QteNknJ*]:{T71iC;ٙ;;(.lU^®87ЈsD2>?q:ii4F'/3y?K0Uçb'	Sx/ER|/3U|_k|{ߢԗ
|[%H%nJc$}5%q	+L|	 8fTu#ϿfziFKށz{AC
b2Qxz±q%H
ESIXlJy]:KTYh91?b*Vf
)9w)U
҅T>rek_e;] E4vµ{籾WVN% ?gx˙
?VO*=7dG\jQImR	;q?v.1Rθ-W"%^
{۹<n@>cS^tNP0"9J@ÖMxFjU*C:.6%&XknvI:}=O2"V$g7%Z _FnRն.@Xybʄb%#)}w*7v%b4	&LSNt֖.Y-nfƙn
Tv6T64xvx|TKUȿVfgT36.ɬFZt6㆟P[e>	4zYn{yB9<s*<]9O5?h PKX@fg  $$  PK  K;P            "   javax/xml/soap/SOAPConstants.class[S@ςBzW/ॡxih)MZDӤӤ?o>8xvI h;=l~ f`ì$x("nU	jqTgpq*e]mRiTeF@^eWd3j}#ۏa 0(Mb%(m)w)ޠfcs3ֵQ8VNnc׽m&Ҩհy[RaT%0ZFAKȦFI5kw͠aN
KkT5UZU:#IKmN_ pRxP7uucg
tP'v-a<ſ8QZVqK$Њ$xI75/I8Jn@$O
Rr}F;%ֶ%=fi;l%_8UO-5X%pe5Zdӹ"婛b_c^Y;tM;rV1o32 Ne\'/g ϽCE;5	~3PRLsaG9o(p/X>WH&BCg50EӒJ=(GK7b}[bڭ:vˮ	տk;QЖ}܇@~ہ/&q)E.>,%y6~N|3Y#>aA"
!1 O	mB>^3)><R<|1ŗ/
D'@Υx?2^5?/NvFX|&B{
F7YfeOb>s&C1qG1$>c]_PK|Vu    PK  K;P            <   META-INF/maven/jakarta.xml.soap/jakarta.xml.soap-api/pom.xmlko6rQ'΅PWҖDIoHj׎]gCrOwaʢw[:"|M߭:ެ䮍^Xs:I{D{A8ɄK"lH	ĉ |N|;%x5ŜM963y,qt@!@xi/|&@lyATHNǉ)HsvF!$ԴfRƻs{{kQ|%!pXM;ř<uPw塵c8dmͲܵ}M<`"n=c9lco8?s^ٛjr4펆r>^b-	# B72K=.`_}i	ՒBԖ\MbTR
bHHaY./tMȫ둓B'11J̨]fK NPŜ\`9s2|lH9	'rɝ$>q_~Άb >Nde@#FN#=ܝW6T,
]ɓ
Zކ#IjO9-ɡBMݔ(k/QD8BGm0mA74U[ь{n
)7{ڶ
y5юpHk|投<`895 !Ҍ_)>FK	[loF&4A5CD6I0^]i
1`y*o.s5|uV*3A-f|zޮŖOi^p6Р4ĀM-wjE{($B)#$0rЬ#JWqq|
؆ɂ#0NTЙ fT9`Pc(i @/idN5e.in#S2YAWÑ~eVE\lBsSa\&JoI@wfS)Sx,Ph[Ar,oS̩E$4QԪG4@'^RbqSiwVaa>L&*DBpVSq/`qtOp0q53u43aLi2Hi!4mGH$d.!](C S̀5gT!<7UBv'`+ZSP-5I$P%7 U3(
dhUc*MŰ!rnɦ3_Ծ s3#xhK&T_,@
p,!=%.l[
w#ЋA2Q[0ۂUhG`NfCv:4զ1=(	Ǆ[.e٭Ć2ujڪTC]2n`!&Tb밄vYUm{MwfKȚ%{1NVp{GB
²ǳ]] C[IHAZ\=H{t4v/sʪn(J3/1/mK0Ynin0Xa'Id6mQz˿1lVpJ16R%EY5\?,kJGgF֌Nz
׷VMJDΖϋf(דZܩ;S
ޯaf\SkTe8`Wɉ=թNrҀIaL'%
~A[AtVaLM̊ݱ_ۛu8[@׼>]4꒢`κo }2o〪ϰ pٯDJTyܟGzi)rs5/6K/<
)l{־X>y2o+?4(S>)S9g]si-6^pVO2~vAHߵh}~urpd>tTLH\J>p#9D-U]Y'_8h2U%72?:^mSR"[g;`zO4SZ]j.S\8O]UeE٧)70f\Y-А@
̇آ9r v+>yqZ^XKW]5(ePb)ELfug7U[aU=躑J
^JI/N81.L^i58AnaT-~WIA7ôߪdZV$ck/R:{T >	9ݣEǺA&WKט_
C7oƉtY#VY.<\$N d"*%'nT9u"=#"rt鰿vIAm\Y^r$F]&0W`Y.W 8"$" ^/mm2+́2!բ[G
f
x=>q9쫒ȷNgWoqV_j7TZHK6ܿ}8fޫZ*QuYYjG8$݈{5nz*hZ5сGO50;
.HX/ /	-o
HC*eP*
-*@w_d߂l^qu^7'@fsxãjf\Z[ͤf76S*GN;rL ߋAc襡wFe[/~1!2S8G$g-<")?s9okS㿡uMFau"q
7l8:g{O.cUm蘈ΑW%jx28C2I A(̓EP=.xPRϴB9FM2rҋ-
h{.e8+!EYXɏv[a2AUl:Z|< n9ot< a9ҎƠ_E2)ϝڎO
`OK*/\,M1&d?wϳ\{YgJI˔V9xIyCUc9]N>[]1lӾ?욖E{IS>BA3N&իarz;wص8kG;oTx}vu:4 HӟA2&ԄZGAb=aw$ݬ/no3E=ϊ\#룇fFzV'̕T0ohEMk~B(*i9X;	BjϲWݳAQ|Uks
vwPKm-
  -G  PK  K;P            C   META-INF/maven/jakarta.xml.soap/jakarta.xml.soap-api/pom.propertiesK,*LKL.LJN,*Iԫ+O,M,J//-"UZTgkgg PK
=8   G   PK  K;P               module-info.classmN0EA_C,#."*L0Q4*~>B؆FP̹3||	1UX^Fɋ_>AhӘgJBkB۷PLt5aD&zCHsEGG*ahUFI!2ҁ6.lyރ/sQ0=&
U.}B#5O9bI|_blaJ%x
4V¹קq:`jsPKDn    PK   K;PL  _                  META-INF/MANIFEST.MF  PK
 
    K;P            	             ^  META-INF/PK
 
    K;P                           javax/PK
 
    K;P            
               javax/xml/PK
 
    K;P                           javax/xml/soap/PK
 
    K;P                           META-INF/maven/PK
 
    K;P                          +  META-INF/maven/jakarta.xml.soap/PK
 
    K;P            5             i  META-INF/maven/jakarta.xml.soap/jakarta.xml.soap-api/PK   K;P[G2  f                 META-INF/LICENSE.mdPK   K;P")-  ?               /  META-INF/NOTICE.mdPK   K;PŰ
    &             
  javax/xml/soap/SOAPHeaderElement.classPK   K;PJmW  	                  javax/xml/soap/SOAPElement.classPK   K;PA5                   javax/xml/soap/Node.classPK   K;P.N    "             L  javax/xml/soap/SOAPException.classPK   K;PN !z                     javax/xml/soap/Name.classPK   K;P    '             z  javax/xml/soap/SOAPElementFactory.classPK   K;P1Z  
                  javax/xml/soap/SOAPFactory.classPK   K;PH                 o  javax/xml/soap/Detail.classPK   K;PSv      %               javax/xml/soap/SOAPFaultElement.classPK   K;Pz'                   javax/xml/soap/SOAPFault.classPK   K;Pa_:u      $                javax/xml/soap/SOAPBodyElement.classPK   K;Pw                    !  javax/xml/soap/DetailEntry.classPK   K;Po/                 "  javax/xml/soap/SOAPHeader.classPK   K;P6\o    7             ^$  javax/xml/soap/ServiceLoaderUtil$ExceptionHandler.classPK   K;PP!g
    &             2&  javax/xml/soap/ServiceLoaderUtil.classPK   K;Pt\7i                 .  javax/xml/soap/SOAPBody.classPK   K;PS'k    #             G0  javax/xml/soap/MessageFactory.classPK   K;PO                  4  javax/xml/soap/SOAPMessage.classPK   K;PN^    1             9  javax/xml/soap/MimeHeaders$MatchingIterator.classPK   K;PM
                  h=  javax/xml/soap/MimeHeaders.classPK   K;P~96X  _               C  javax/xml/soap/MimeHeader.classPK   K;P7QM                 eE  javax/xml/soap/SOAPPart.classPK   K;PBEE  	  #             H  javax/xml/soap/AttachmentPart.classPK   K;Pb  (  !             L  javax/xml/soap/SOAPEnvelope.classPK   K;Pl}a    *             M  javax/xml/soap/SOAPConnectionFactory.classPK   K;P    #             P  javax/xml/soap/SOAPConnection.classPK   K;PLxq  h               R  javax/xml/soap/SAAJResult.classPK   K;P]r  u  $             U  javax/xml/soap/SAAJMetaFactory.classPK   K;Pݢ                   X  javax/xml/soap/Text.classPK   K;P  +  $             Y  javax/xml/soap/FactoryFinder$1.classPK   K;PY>    $             [  javax/xml/soap/FactoryFinder$2.classPK   K;PX@fg  $$  "             ^  javax/xml/soap/FactoryFinder.classPK   K;P|Vu    "             n  javax/xml/soap/SOAPConstants.classPK   K;Pm-
  -G  <             r  META-INF/maven/jakarta.xml.soap/jakarta.xml.soap-api/pom.xmlPK   K;P
=8   G   C             '  META-INF/maven/jakarta.xml.soap/jakarta.xml.soap-api/pom.propertiesPK   K;PDn                 Ѐ  module-info.classPK    . .   "    PK  nqP              META-INF/MANIFEST.MF  TM0#,HIU M%VP!z5[0i쿯ᳫ"K~3y,i,^@R-T#c
 ǳ7Mv4ͲK@+mEn2!9~8L^5	Ć࣠0s(4h4)Bw1WbR$weT3QU
@T$45>AtH녏v$w@%*6},ԍ}NqŲ.q$%
hsASA[QRR}!jP4wl@P$*5xE+ȌL'=iAH9Ԕ-cV@At@_puyeҩt5E:_2SfD^l&ru"6IRfE27ifu7kދ|`D)h%MLuzTqk%Y$e]ßLiB7B
c!Joi C~&O!ziX{=;gf1#2zz_ݡ=v/PK7dXk    PK
    nqP            	   META-INF/PK
    nqP               org/PK
    nqP            
   org/jvnet/PK
    nqP               org/jvnet/staxex/PK
    nqP               org/jvnet/staxex/util/PK
    nqP               META-INF/maven/PK
    nqP                META-INF/maven/org.jvnet.staxex/PK
    nqP            (   META-INF/maven/org.jvnet.staxex/stax-ex/PK  nqP               META-INF/LICENSE.mdRˎ6W4( 9mEFwH!3O\b-vWWU?~wSO@z6,=@
vz@Kv.̓{<Ώ)&Pztc3OCO9s|玮m"HFddͳ4g0?53~,޿;~\l
	&6vO?P7nP3
8G?ǫKWϮj\}~ƶ};-pF3H_
yQ1р L.#G)eV֥X56♷;!#+.8	I|U9~
 J6&
<ٱ[C-]Cd;0Gbp(q~ɶ1hv1SxIbФNQ\rzch#˂+M*2J,k#	K/UvkMRJ@LP2kTe]j@JeFfWfZIhU_04s%L0ю)#d*AjSXLly 
?ʐްAW\ACByA-K~ŅP<7Q)Yfw<8$$CS,\Q*ؖkŷ>|Raji-e\=?:WkaaM``JPHFpp	\ڋ丬l&	*z~q9-p070zPץX*BF;`qavՁ(.%;KK&"V<(ڀ\hqQ0\WPK[G2  f  PK  nqP               META-INF/NOTICE.mdXn6}WCv%ym7HK 8mEJHj/$%I|s83Ù$	?5ܪ|/}/%"Ւ*K;.cDkI;Y̟Ow+r&$D )kQUV	[*D(-FС2i2(J8lZN3U+S*>|PiZ8Ii,[<̤M)+h2܏뢾볏QAtARYtj82=9ptoeYkI`
|sc<xլIeZ
Ua9eoec~0<ppEw­06Qply?XcC$ϯ A wLeطJ~ޣ5TTĸ񅱠J\B3<0S_Y-;BՄ]9F@C]}Ox2c46TS9&wg#(ݹB=$d=36'{t20nZGQdy`G6c=;&l͕/Q%Q4	jדpH?G,]2EJw
"9xd딬
X(Bj]0-8\ˉ"$[ɎI-R;A
c1o4qt݌J3CqRABrbs3&lnA|xz̔tj?NM:f"H6O){aY;wQY"	
&r6Îwn";Qr:I[ȋܭEÄ́7U
Zõ E
]D;qPe-)'բfX^ۺk.ܰPnePgqK0nrUELZ`7YazcK]%&KeE\h19^`Z=N (x=Jmw 5)N}ceDVXQxHz7ɽ7=%w_3d_YiW:=^Np_'ko0J~6zH{wz	j:()!'RHp֥U?IA
an9L_"DKW8*Sx.)x83Ю?b~Jm{{8
w~%RYG!|'Aݿ7Wl=8]W_a"/gfZi#2@h="<%8˸8)eܚOe<:zɘΣGv{i]篯Fg8r{LDI36":i)
d{eEN5,~{s8L;n1=^j=IkOcf]^mOUJg`1)-P1L;4MѴ(z4cL&H4^yBmf^Au*:wM̌qo^thߨݫ 
s{5tjɽPZL݀fFw)V8c&&j';Cز!нcɈ
`w@4cS՘ە2Ü?PKA    PK  nqP            )   org/jvnet/staxex/util/DummyLocation.classkKAٴ5]+H
Aߊ @:^`
O}(QU=y;l$GJrVMXgHja;ڗZy!r>f+b%!+ʕKJmR2!c__yO;fتx~]AtdZ4p_^ԥ;KK-u[&gue$
AVV0_(Fmq[M^ӾrMN)qdٽ5/-y^l/IDaoQoIZ;hA74I#WRRqZWg08ni#``x sȞ@
%F 7 ɞPrqr{xO+^{K,Q\7PK
"  c  PK  nqP            1   org/jvnet/staxex/util/DOMStreamReader$Scope.classV[oTU̥)m(-
e
X
h)833g1Q+^&D#&R@o&
	Rt:H>{ַo`aԣ'aSxB[UڞSr
oö0cB;;؍eO{èEOrx.xA 5vLзڶlJfTt95GyJǻ
iFtTZDޑư	|͖m78Rs\>hl;9uŕx23.ɤZ-!Ov*-;0,r:I.mS&ɜ*{-74-LH2KF=h1s&+S)sZMl%Fv<`
Fܞ
jΝ3+wId#}8gd+Ky
Э)BAPX?ܐÅ0d`vLr1;	s%!r1]b,$<cb:uGBjd:0uDJAX:Ti;0aa cq364`
S"oLȻHue)f3:e=t.4ޱjsdSzܞo/xHmwm;rn80GF:'μe@qf%{H5utt~OfƁi܃٬i'
OLx?(CLΪdBsrT^ x(gIF]z	*|{."驿"_24]%c<=6D$'Y;b7+-_C@??%%U}#^[GoB\ȟwPK"EJ!E$Pi}}	p
B~E5eTL`4E*'PuA1vAoHFL#B*6.kG>TDWLu[\*T䇰~}XÙZV ATWl,zRTkJRtھYD<$8b-wa!rBe' Hk_u=fZki4"Ze' e+Pt"W(T*[![HL'|Jzg)8/gLsY[<%9*.F,c^x32{%c(cP#t DhMP7A -gY)"w"'k]ǱؔZ4br]yRvەHsJ}LǦD"YP5♊1Q?hOQ"jpq}-ߡ0ﱗ}Y3>>/J-̿/,Wjf|}=rIqșyKx#ZW+犨;,rIlk#PK    PK  nqP            +   org/jvnet/staxex/util/DOMStreamReader.classZ	|T7k&/BXD6YB &d $L mj-. ҊZmZ۪]mks˛$Ǽ{?=3 f+>NF* T#|T(r)9cXy'>*Y2Q&LQi\( 2?˽"Mt<͐L=Kf˼s4OVP->O(Ų:YD.KT#}LkXe?]:?],o^nYO+.SEUt\e.Ӻ .~Z
2r]J*˕r(d!I^[*4~,Bmt3:X;%dbSBMC>_+įd~&?}J^>-}?vQ24O{nm>	ή0FñP<[cp4Aȫm>5Ob5kc4nPatl7^=*ClET6'bvI6u'DɊmpND+G%XH<!#[Dw:EvqYO0e+Xp)j
JJNc`Y#Hba@9hcS8*=n		"݉K2a
Fx8Qcܨ<-qjw(ˉwGK7([ؚ/ʿS[U1AjNZfQ!]YoW,91jogaՕ7޾{3aؖp5
l?k2z~nj:hD[,{i\;:+%]p}A
ƾlJ
NU
I	wؼ@U˴%\Ĩf5mX%F[:[yZsK[XtLK"ԶhJ
22y&;Sŕi+>3+϶%p=StFJ Rg2Dpva$/9TNNcџ=Ѹ@4,ܢ 涙d{wB ^3DyδIz	:PSRnY(DVb|#ɐמ[`"by0d
5uj$
d;c-fk&L˴7zG<*a\fi}sL)u
ˡ\[h~W$RaD$nzsW%YuŊu0Hܩ#F[mgWfm
wFePڶзPGKEuUg	C/{DY|o
UV[ĳњiixdS>*Oዅ֝S^m1+n,C6vI KOΦݡ.3xY~yDv){4ђH&~M܍JΥ:1pV1v0_&x37-Ire
N`E"n.^Nw&I_&9j]8hL8`xIнl9f.ϤqIzX2zPh=&^s&eU1<*7/7G0aI[=%Ԯ.`SЩ*^n-D#bU	j{MGMzL41
NP8#,',-E!IXzeKV-9"CO=&TP4\;J<8LG:pm~:@n3h8hǊ;ͫ4X[_P۸Ǌk)"^x`IlK2S8k-@š(gB-說ܾ}Is֨1~?jങ7+U4IvsnsxcACkazʤ#[N
폃*`WzJbQK3&gM>Mp&4."$3:NҤ8Kz
'LP	7BxGM:A?2a`;(!sހy}XbكMHS!I[LUq
gPVxIY^&>¿MzY%O#* ܧñ#&9℔	LnjbU@(`To潁k/p=%/;@i_g[Ur.Jq+;aTŬ
y0&H9*r\dv:Mw"U<Z5q@?6"+ӵ \ {0xȄaTBRBUR~Jowv-^Gʉq]FH>;4RեS qKol+6i`
`rTms:-H/.ʍ]GcDqIdwGǵ'Fckj	ECxC]]a{
L}1Vc}ZFO4P bSgw
rM'o-.#ѕP=WAgJGID7؄ wlDgZS.x%^=)jvQB8zm>\\ZpuɠuX')\	ltvǛ:D{mi <3J*}՚	؉a&|
~cݲ=O3ux]꾐pׯep00\G^wC!K]q@Ѽv)rp9EˣE	p߅!"j4|i
0{(f'O00"K2 lؕ?JsYT%_C6~xrp-\w3Z_?I'$(>pj(^2pK<<!q܎`wIEc|20
<*wF<Q(܅,~݋{[vc
ݽv/]!0{`1aE1o8	0d#V웍3{ϼ%⍌ .|x
{(1B5G+lߐp];lx˷ދ3
&j
~CrMvrS_oG`/sqxb|i?Gm"Fq}(q$2Nsh)M=}EӴASOq˘)6(*_'BT(+?P9.V^.NmS<cd"@Y	9O0cET4

TFh,BTiit? ڱ5Mx\
57`LNS||I(?gKl)]Hx؃jƩ^mK<WvHj![_vS~{v0\>N*em&#
b8M8*Ea&U`![*hY
b^3~fB~	54*XQIAjZGD9=ԁse-U6Asyȥ41Z|Lͥ\Hj/Rb(
+ߋ¤#C+{1}eF(*R5#s>jmP
+`޶,e_ѠuwJ#xZ/mkKG
Gh8**<G1k
B7_c~tReN*YF
V.
QY	#0-jYr[5a|sѣצ
j-2AL*YZM"]Z\*!<JN1DЖ)萉}f?~$4 ad3Җ$Ⱦs{ uQUY\	vځLtl6d>ͧ.>,>#^H^k&XmI\c#<pa:گe7^^ȥ|=t1N+cAG>	NMJRR&>*fc7ϫ2GiGxNK]9S҅>I]WZ5lGQ.oa,=BV9Hq{Z)~hJ#,ӱc/>nՎBlJ9=8*8+՗q:-ۋ<k|;\޺ls3M0ϤD-m4׻V8ar1kSNGZi Ian[s5o}Q]MAsĩQ2sr YP,KECsҷ~wzml`&o SJ$p1<34ISt2p[JvI
.Yv!biX&<5<Q
#W6lsɿzV|NwlYiTuS-2t2#9T]*T_l]IMH02vR_0o2o#:}O@gbѯaj>kŬx]%QLӰL޼Il,Փ|?kL{Qp+T&oEs*BnnLP=T}:1o82GOYq̋/fA^.=~˚Lloap/p-t
_q7=ܾRqp+u21I6.Z{3wdA.v*ӥl #;34spF.o!MI};&yÆ,4SF<:	uN]U-9|}()t{쾗f24=ܔ&F7
ن#
F>L2lmdb##dcQ.c$pQOا"fX.diįZTzO!
w(
t[e~|n#ei<sCc6~R@
,u"rC3D1c
c02/z8RU|#t@
k%rœERՂ4l/UQbr4-UE\oKNC&k0>c6
QdEИ|bPc,d+.%b{{Y5Q_]ߠdYćtҳ@NN#oWV
X9P~Sg	^c9:@kX-gY_δMU)ֻa#2b|	F=GMc[sP:MLSSk݀I;ž!v
v	UrlsmU^̿jܨ"oJk:ܭzn)±%PF܌,cmy*4PTT
;pnas
nI)ʓ.~X6zWŖ|ob%ƞ#bcTJw:ȓ??<1oR~
J);)2K[)@ju63>N79MKv"_雯^dAJXzl,jF!kgW7l~Tfӓte9IhdUSnKMӞ{V,KF9!qqCY|pO̭?vлRA_?[G+;"S~2=A͸lOmrjpZ0(Dyl	5薍$=fzpr)|ht<_91efX1[o1ryWk{=9===_:ت;,QK;'Qm䂣Sxx+g|j\3s"c2>D?'up]qQre<K5*ԬSgPڭ3\
ڻ̏+⨜'oIϟ0NwOQ?sX$/pu"Pjy+\S*9c.7U[\%mXؓkPHɭÆ#٩Nsw}R$Ko!.y&-GLs4,4ި՘zVK2!Ǝ(u?kBNp[eؓO!6prs֡SH򠊎o9Uq1	D֊	-1&,ӟ@wOiyZʇI>'Eƻ쫿Fwl۞?!a&|0˅W];
W&θ(ߕM\94ɕGAprNōWLO;	qI#C\14IN4FX`jAt2
ՠؙo٣${aOߋmP\$J/r;U_#yM"nxqs8\zQbLs9)vqԱk=2LxOsi')L~}\[$v:rzrYnZp||8"t]3皅	(sAk.ۖdYFyzVV7\Z5*IkaKPWfv! 2:sED2([?
ݔrcU)ʩBJygɼ;H/
SAy2f\zʝ4?PKHާ Y  #;  PK  nqP            *   org/jvnet/staxex/util/FinalArrayList.class]KA3Ͳ,3!$AX*HF]YПՕE?jd{f3Ϸw 8H"<K!8r
DJhMڷ7eۡL,鴤>MF1/C{hrrsrd.Sҩɞ	@n=Kq+fJpȗ̮|ƚ8疹>ăR|rp^i^Mvvl$oud筞\
1Y6Y2lI;`0
A=A9١3."PbX:1tNQ6(2}sJȵ<Y@t
Oefçc34s,a;qPK  
  PK  nqP            ,   org/jvnet/staxex/util/MtomStreamWriter.classm`ϥEL`0_uSm<;? 1LkEoWqN=a5_3&w|NW
at,+.uJDVG*ɧ~fO854pe_0n}vR$|8g[@
.a7PK%      PK  nqP            G   org/jvnet/staxex/util/XMLStreamReaderToXMLStreamWriter$Breakpoint.classR]kA=$f]__0B΋mP
TmLۉ2Q}`|JlK0EY9gν;?O UEܭ=\
CIKѕa51~vfJ)2RE?W2/^צOo3ͤ+fB˷~[-юhg>L:"Zu=5`6H~b࿉c$5DA,
+FrćFEy{[IM&uh$쐡Z_doq_')r'Ѳe6/#ٗBa!COJ#_);Yv|xXQB%Txa<.>ͧ&zEzerKk
S.:e>6	Q<|	'(|IW(JqyoHk$:;Tp#Y1
8'H1 dr!O~<|(\3/n({tb	PKi"  T  PK  nqP            <   org/jvnet/staxex/util/XMLStreamReaderToXMLStreamWriter.classX	xT$o2Ȇ@a0BbI$`$2:Ig&$vSܷ.-hVZ	F,`Uh]o.uikk[[^4{o&5s޽{{y<R+|؂r}$_a+(Ke
}>h6BphۏIGkWu
pE͋rP>Qу2B9*!!G4<1/p2~Ǐ'xÏi~~ǲ'Sa)!O=+R!d(kѯ2zIo4֋}!Ȇ?
L_kB,/B*/Sÿ4[7bhRAFxMH$̄wƺ*zI5h"iDHSp
s.2vH(й
hi
Xwr|pfmF(ƺ5F\VHfBqg2YLmf4hF$bgh
GCF-4j<O|'tqm8aFv3pr5
*[ISk7QՌ#lMF<,sgѓ
E;ffo;%6x};EU61*.j{.Miۼ|D5Pk!ډYS\$rB0s=I=0FEfO*&Shcr+
*\
cuH]7ĩC(J1mֈmhRÿfFk#fet,ҋ*LxXxH"GSMĺSd
5C`Kq[eUvWUȱ9ֶ%`*N[mQʼd8s͌
~.#cVPjSw$l2^}}2\o/6vF[9XwͬK\O(D:ulGvx't:.xȲTcqZu!3*9FɶG,:Q:¸Ha;&:LlUb`0f
AQʻ݈0f:p]zEKh3U @44Toh`:tRn!]elHiW3X'$lr	YMB>%Vt[Fd[,i:`$VXl]W(`eקQ+k3	۩^Mur5Iek*WWy*_WPdB$])yQQiJt5Cj`2Kln<|@HNkʸZ(kAN
E2b_ڑLvzzz,]$>,YxpF!]
RD-!XWUKĪB*dNt7@Z/2x[qktNX%Pa^·eX&OSY|{lˌUHn?ko2B䤲1sX
yLNپqcKpTo#$!΋ o1|fvg9N[ZoYZ\wE1<GKsMϰ\!bܻːAfaP-ׄF|7^JgH3d*-^3 oYy5rY2_jeֻMw}KF`:nY6k$uRLƎRAr*\K)),H,tH,\-\OifjĈc׺r6I)sKŝ6>IRd5T/DiقN'j8/
n&qT%Ewx7p!<qZc?c/g=3X8
i_ T} 	̣őns&&!R&?
WpQK,ϑ!#^Y#߅n!KGCDRnSIELzrу^J6זludc*ږ	@N Q*~TݘǤVŤ*@{'X.*|-PDS
(1 JeeY-WAx󷓿(8<{;+<*؏R.]˥{k?vy<{#@b|Cs`1[ׇf>}=ӖZ^p#\#
3X,!s[! 42TM(:{Pf,Cj!b#a8ľI8qϘ0Q_3/3-y;Bu\JåʏT..WB*ר͸^7Vhj;-Riđ*#I-7T)5TH(Zi(*N`RoLm/F4No0ɂq!g 
` Bne>s
OḄ2tbg8gjpJ٭%LMGbj&)yPR~4iGWc Їd]QՇFɇXvĽWZ}X"ŷ2Ӳ]:||?M>0KNu2{^;c
@VeEw\͜siBp%Gx\p)G[2PJrH
nJ?.+ob+6j854^i *\K.]
#a%]r3]I
3d8g9CrBf(<NʽtH3(ծNXԸ˭b佸Sz;R'jY<t0~Ă0$Zgc̎Gy!֏'x6d?oc؄EƊռ⮱ΡJ9ŵ5`=/qqaRpg_?,;Iqd u.4:ó\h >8{7Kr1땅X+sSg"&MT*+X!8WD)4YB<|gtԗXB_&/LbA}HߓI:\z>΁)L?k0lnJxULʷqW2r}~7W
oPphM ִiϒkw7f1D}jB[F8BrgOWitl	Gv9M%NY<rX|K1z>ņ*č
gk0ߞރix|j?_,;x&[F(/|$@\cUxкuL:Ϧ\帜6d4kwQMFej,0
d'bgZXDݓώ'PKb
  |  PK  nqP            +   org/jvnet/staxex/StAxSOAPBody$Payload.class}NPE.^qJ4eٸcFISiX|4>e"|g_ .pcWCі-n zF#sO,Ks!Jћ0TUG=r4'#ʐױ%	H!C5t<8:߆R*HpW6FǷU5ّpѠ
#q5ah%T6U#6[e'
:*Uڼ?򥢝D,cXW]Qe[ߗ+HFV/-pfGvBiiZi&4:4-"dHD
(.T<2)&;2PKAS    PK  nqP            #   org/jvnet/staxex/StAxSOAPBody.classOJ@}ĮՓ
SB@ۚ.!M$-_QH(3o7_ p,DRM	݇mцmE8*TfB[ir]<Nny=%1N70Ҋ{S&fF#rQ%~k`S{"Яi2WE*ǯN,|7Nkn3j.Gj~&Zw;	>z ;y~PKqh1     PK  nqP            1   org/jvnet/staxex/NamespaceContextEx$Binding.class1N@E8 )rP!
V,Ea 3l5]=ȡkPa_3OfT
okO_/SU3	Y7KNHÔXLvY{}3lvNyzk8E7εfZ[OKG#9&"
	'yN8PK0J   %  PK  nqP            )   org/jvnet/staxex/NamespaceContextEx.classQJ1WkUk {PsRP/HװdI͖փGq[A\-!aL|pS#1CyQ&#tH;Ԣ,eISNZ
K8b!x5ʌpѿIa3/ttKϟ\"8HJEY.SԈ~n$jۻӢ|T:D:ooMzD!Y[pvvX(~W]u=5p;PKc 	  4  PK  nqP            *   org/jvnet/staxex/Base64EncoderStream.classSǿgw}eG~	hE]
H,6,,.dYtui6iޛf:oB֩/l0|ysy	d` !i1$i񊖍*Η#6Fm\b:mLy0UZ뒍
չ9'<`k%}QP#
jb>]{ckbNr):=0Ҟ>*,;Ko&
mota@>l\tlZ(iO)rW":Vfdr6CIe,JfvBzE@,.^:Ɠ,:`rΦh.W
5ۻWu]`GFD;͑'cL]M.GSr! UM%EsՕj(78V*[c@{I^VFBY*%8[ͧsiT6;Њ=!41:ԇЄ"$zCxaop6>9Uh{|obCEƕ̅0&izqF6,!БqUa}'̲n-Bv5Vh`L2;$WXR{)\H.1U2yVVL40㨭>?ko]ڭf͹dSü=P0~OE2]
nnF]K-$3bϐ>ǩkyt㙑mǱAc J%_\pt|>'T {Fw^U _AU& `flf]x9FH6<:9B']uG%j͑iy8j_aVWkvG:}3kSw]{n9Y&e9cx/d
}&yp̢yN1꟨!t=r;kjčo'ko hb(6|\Ov
Ř}f7qKIJ<;E>mjRާ<4$A-61/iվ{[l*Es2CT5ȟ+V=ڬe
5W`1w,rOW^.r1apl=^Q^Nla1]Y!SHno~ǦU~KV=Y{`?Ntz|wpF=y?DuuKN|.J&TܞBKN~.h#LF~nK6YE,[d
Rlti5>@Ikk[n[]XThnEm:6+_o0D;.c6_ﰝ| e _~_ ?=>ox_ ~KV;Ղ3uW}gl5CW~F,c2h:}vqTxkR-Ns't`ٌ0WWRF4n҅e8͛͘3O#+ᕳO	K	O2OɹxB2i+dyy\bdHFr)cdFNqR&2IVI)F.2MIKd$F%$E6q#[e#^Idl~ɐd|QdXrd,y<yPVCR *kd\'Hd${<*G^"I7y\zr<)d#8yJNAh/2]7-yePK޻    PK  nqP            !   org/jvnet/staxex/BinaryText.classM
@g?v6xXk\Åps
,| JxXKѭa4R.dsPo]$f-s&0rXmjsgec3!Vֱy#sp\Ji~a?k@RAo PK,0      PK  nqP            $   org/jvnet/staxex/Base64Encoder.classTS[Un~״yHJQP,i:QJi#yЇi¼tキ]vӑ
v::ѵ7WXt"{ιw^ƤA;-5"AƐTdx]#.=~Uerb^1V<<Cwh4L۱%a,V
d<{f6o-55S/yö픜Vn/VnL'p5s-5e4LzZаGN*.+)༼Y+PҜcW zNB.hԗN7 Va荗
̊qHUrjΡ2jbPR_ZjtV%ZWD)_HlG7yRi/G81CG'rL?mu*'k}/SEΏqLq#PWW25&Ky>̀W`ŬeC>$lߠ<^ wB~"zJh;`?AZJiҮq?CgSCo6Й蓑om&wz=6(rCOS$׊QI9}T1=
R}{
!Bt.DHJ
!"$D}*^eݞ'Qa='oӢ-|6@
 |s!vÛmD\|T^Pͧl2B4w'@'PÕqOfQ5B[xV\­Y X䓄h>}$hY5~&rtѠ\'CGǃAiSbɠ<,Wtʆz1Ə/F0끍DK>(6	GLK
ڔ
JgM!.ƣde79)?$ט.GY
1B&f#Ὤ[|A2TjOT՚*ܩvB@bg}o᫐NwiqTi].>JxE9'RRPK(c5    PK  nqP            (   org/jvnet/staxex/XMLStreamReaderEx.classRMO@}* "~lLq"O!R'Xn]HW=Q?P7;[u+֪*('P*nCUBz3~U)P!'=ié!Dw@qRNIZ=Y`	_&uGO8u0pܔP-7cBkm[RlD
nTO2~B؛|{ސY׬8Y6~?,-O1sX@ 0neOo{f2bOv|(C2YH2u"!#=$"6%!,"P%-r,$ڇO £lg53(Ț`E1F;PK'd  s  PK  nqP            2   org/jvnet/staxex/Base64Data$Base64DataSource.classT]OA=VDA>J[mPФI4I]6SRFDQ;n)1mܝ{1~`ObnLu,2zaH@RGFǒ{}Sy+Z'/yMԬ,&|kc˧3Cφ{$y[vavngfJ!q^"fqQ/N:<TrupiG1?V;EkGzSlrN*iG29vP:AxYUGvUXc!V8cYu-U0L_f0MxaGE.BTyuxqR{?
Uo!xUZckW+דh"<.my^+rgptۇǢ &ViV0յD ]bBA~<^pm"\tGrt\.4Zb15}Ԉhw8 #5ZGzp%@2o0B|W1F+u7hUgh_6o'0CFл4/X:;ޅF[rSth>Zn5<~lIB`nL|nPXB<yj470PK    PK  nqP            <   org/jvnet/staxex/Base64Data$Base64StreamingDataHandler.classTkOA=Ӗ.l
BmlADZM
|>
eŲKvUczg[K)<{;wS ØA1
d0 MB\FehhF$<0t'p7eٛv]qy^k	#c7LÝdP+"S<OFej¼le>YeLY:C}0κnYRVgVmy
;,wsSpss#J4u{*G'h%}=W OF0}c55Ғn-pHɧ]HxB;VN_ՒǬ)ſu(WVmKY|e_/]/gJ kU:c9ϯ
z ]xS1 xԢNA=L`R3zծ)ᅂLcF,<0{߸RJ9:(W榶e[{
Vh:'|u9WXC% xQtZw8]ˮʷ-8wkT{.I]K$UPa

h
Z|S>EۧMyKGC	ivhQ+n
7z!VN=.*rE7dc'z;Dp/#$>@M䷐EijަL/d?C_i*Q|Ą`cbdMrz
_BHBDa/R_(]߇v"?<h
PKoM    PK  nqP            3   org/jvnet/staxex/Base64Data$FilterDataHandler.classodƟ/eۮ뺭ݡF43cttJ3VZszvqc-Ap.A@ @B@BJJ$wz{>Q,$Ё4)I<s1Rqy˶	
jlF޳g9>mxƬaJ;*L9S+g|emtO圼Qjo*ުU螱JвmS%\69-7e07IlJC;BUcG,uM`D2uѳz[(\#7}mFYsè- Tl

@P:<^MrlGx;hI*^c3A=%NH<'qQbRbJ@͗23'7xAVo\bZ%h8ws;2^АÜzZY,J&1/_'prpkm\C&az /Fj)
٭aXZ
4fF
>i`7h/5qm2SoGNrv6Dru!=é:m6	c,|(>>4@p`uhF
9u߆"V^$	li
ip{m[<Rr{Eļ(-B}9uCjMDjSF½jo[uAͨ})ukHf2v@@G6La
^8uPFUx%8Vp0Oz9NK+
}G/ϏfL/x2d
dd,262eU2
ozcl-8c8JGa'uSqV=Ar=H$%%RKeqkDŁ(=.NI{@lAjkABd?b"0YG?PK    PK  nqP            #   org/jvnet/staxex/Base64Data$1.class}RjA=GWm5ֶiMBPY
mBڀ%uXGY%U		˔@E;s=w~	<2xa#6^bakΔc;|$VC>nvX*i3gOb[*љzB Iz<8Z91QJ	}(tjwS%~.ݏ<o[ệ$#'aX7!
'_d\yYyAo¾-X9㍅mͥJ+3T(DK3sO_?xF$xcIN/)_h3c{$] ;F΂FV*FOїMh!y
`.vb7ىzY3}-9?$je<G$?$PKHL2t    PK  nqP            !   org/jvnet/staxex/Base64Data.classX	|uf5jA t qZE`IKAIFbծM]HL8vb+$Bp7iIӦqӻi\7JZ	~7+ hKVyyc;^y|~Ee\,"ixUG>^c&cJ75 F[^QokL]>ouu<~~HǏ
?ձPLbe=Աoez>ƿh5o:MqU[:6:4"&K.䖇)O4?UH()Ԩ@ pk,1S["Hk$7S-0SH:m	%Mٰ32#}D︽kQ:I0`]$dbD]l'5DRfOsTDosfUf@mO&̦C=<;3_<+J,ZXNX]Zczs뮎mlBXdN	X:?n2MD,ப̀L=0;Q0'H*&'s J,oOz:03uLdèv9ftf"ѻGmɳ5M^9莋hsosy)ʂm){fqRYU}=A^fz,Zmz͢UKe-[fxQ$E9}+$y1Cχ2fc*9c md.1]<Á xl5(ge<q٣p7sTH[u3#ٿ96`Kt+ӓKKw		Ĳl.LrtUǘ f}$HMxeLҚbޛe̝I_M`_u+j}{=rI+3caҩ%Lf?c'SM)ǨQFA
{4*RqHbǰKL4[r#O2fw?ܒJs9Ǫr\.Hi9YhYEI&x۱.3Df:xy}iDk~
9u,a)ө6I
R4{o
,ɾcdk堁g`7kS;e	N΃cLG3K*d@
Hx%(t07L碏FaN
-+	BMԠ2*hATi>-d"|KjzcQ$3ScF
Zq-7{#q.|3)C-jyOhNj"kjp1!NcfvRF-C0h%hA
ƠtAh/Yh:7X.f?Mm D]]B$2pApwNB=SUk-Y;-T hARfdi
f\|1T_yT;	301.u )[S
Af!>?Θ|0/"nM3PܖcJM/Wu(lѬΗMq~RA~_3hRP1UhЙfˆTOzל
pZ-}Pso'Û;SxICeU͓KXGK,ֺZ+9k^E̔)
1;+LqS|a6xqHKkA3lr[[N޳^.(In+2NJOAӌZm$"Je0_-F4'T2n]b*sbl1֜n3KVC* [0%2fxXvֱu;\7yI)RwI@4F]
F&7:Iu:VxІ^&@B.<+{oax#\C/Cz2CFy0o8.goS|a`nc=t"(e-,a=4Yf廅s,P6`#B1+"m~OzEO0	"RYz*w8묏I'P$+,RRe<R$v̭F,Gǆ)x
ո7HUBFY,ag3)E;z(,JkCwx芲KQN۔{[Η~+?0.v5QkA%qgaZLwdQ<`_n]a3ǌ.~
YELGQy1%g1K@脃i*)TqYQ%h<pUA>$I(hABŃr:C|<C1iXJ~IwSY
QI &ȦJ25'Σ+d'ibq
P@sϨ]{+ｸ@bf<C;}137#F_ۄ4ܮB΢ݒf9]g{x0J,i\CkX856fnZXDw HbGwki%6lUhl"JǺodIޏ|۲klP!f4KƵtkI5KiC6wT

|2hvr;tڑE`muCFHt;}qD]qoрq-:%Zo(ˎ9X?nฃ*kWz`rϝIF";W6w
k6X
?nq4<U4E>,|}#y,袣KP<
ݧ(ԏmBeMH!aރ}xS >G=x>ty;M+0>o>s呗3A=0XN|s>ֿ/s η|>b?*\&"D2
bc3B<K:O6x<eObv
a,
{е7j&&OOzs(z).<FƟ*dgJ ?wK-[hoztBb}\jF]egުOe9oqGpԦϮE㩅FPgZay&x陬BZT\1*R¹Gc%籬+\s5<Po<0syQ?t5X>-bU\v1[=a'Uf;69set-jEJNWp+}
;e좯b/;7Otx6\+?q#W7n8>ayB$7}MQMgTjqx>֠k|TS}44,saޤWiL6K6s1<c]c
pD{p0֌`)HLzPػ@q};lrD?#6ɏ?n)K?wYjXV	UVHL6O~:Z%#XnbCf6]扅ȧ_eY	N<o|<Do]x¬+Xh51v+
C2a4Aӕb.#gx|[ʓpk5k8;g:''
*W0]xB|uFOݦ9ײalL>+hc{!@(&3"d9|9c{WwpQ;
}ԥOc+7m7=|}mh?-(4jOF˹ɾ9mC)=~K&r4UvMt%rSJEy.t\klRWIMe8ɤ[͗nRWu4'V4ȉLPKB.(     PK  nqP            +   org/jvnet/staxex/StreamingDataHandler.classRn@=8vjBKڔPh!Js.oE}	VԖo%uؕDk@Uk4iٙ9g?~:*T- vXy >4rGr׵N+stvP9c~G0,5O"8mW38r}Vo|,ƒR>!?^)bX%&4JOz	RT::#:gN'0Bdϰr,<YZ,Wnoy0:
oƶ]oSpBuܨ}vѥJLW*L:Lߖ9RZ?i[fHlư6o;[)]ܑ%
y=$k%6JJJ%i Z_}%7dMZX$a	w L$[!┢-ĴxZDj"YnTXS\y\Yĵw=i)ѺAx4)ajx+" SK"@Wy.*3<uߡD7FcPK8    PK  nqP            (   org/jvnet/staxex/XMLStreamWriterEx.classRn@-!$B$BSQɴH
)Yu0| xvZ켷3 ^QKA k,
݃hDS	١{gps/bx,boT.=i®
2kFT~{;V]?[{g|:dHc&s/<DԲי=//d0\/ƉHk#c0 f%JcJNș kd
}|x͢/cF.צl][Pl[
о:c9W1J=ߧߒw^WpA;.U UMF\`sL9F0mYy!P
_w	wm+VۚI
*/PKf    PK  nqP            .   org/jvnet/staxex/ByteArrayOutputStreamEx.classT[OQNwK/.RnJPv)⥠
I"$%$,fwKZ~*17_MFdϙ3;7_,y$Œ U,Q1,(As!3t->cmU=y"yVI?mCN35omz7l+77n\Fr9cQes(^ꮞ뇺v(2e]Uլy]p7[`R
-Va$1,-gx2 "#"]pu/(kXV.5CLCY kbS
ᑂ<ቂȄ`4ücCl'O+w%n4FPs'<ަrUkGQ%7xмTBC.k;"~A0)
ig«@7QځaA,.  (Rvg\F0Ԋj#q XTO=6~D>E28D+ǌQaix_hġGsfc%W+V=&=5.,)-yϤE߄F;k:&ޜ@KP<*hH4Nf1EUaƴFvtMt"nzCJ=m
L@R?0pN2yIp7PK6Y  K  PK  nqP            "   org/jvnet/staxex/MtomEnabled.classPEh4 
K'XX՘<ގ!~%Fv){.s |# 9IfƲ;~Jp;
Zԏp+DiʸdMFiZCݝJq,d1Us^Mrw8X/L	/)wN&Z;]ci
ܦڮ/
tPKC   L  PK  nqP            /   META-INF/maven/org.jvnet.staxex/stax-ex/pom.xmlks۸ɇ^%ۗįX'\C"!6_܌{|OQ]32^h'A܉_ݻ7ho7BX.Eķ#	Df32QёM Nj	`Ή'Q 
̟#HpF\)|a~AK/m%NB =YBrY((:e"lG,xf9D(I(DQxp+	ڮp脙>W7ZE;TN\iΎzR+BK//3YPXNrL!Rno47k@|ߢ%ءH/HC` mquu~i&^`SW7^K-d~"%sm֔z>S%V]+SXf% .bAH
z.NCۅO#]eM0U(	IP@o~M uG-Rk:gˈ::AGW熞 6g\RR(
~
]t
|l+ap΢C!x!Fl4\-YN ]!SҶ邺AHv+5'J.1JIbƺPPrDYþJ6X'%TI069
:TjW(\mmklmN9
' 6|<⣿N@ƷY% 17% ـz
"Vu?uFcr="&`z)1̩W͞AD3%rG!d0zC,6.TWP"݄\/1ʰ6H̀{РWS`UBIr%W ZPEt**u-6nNLBYȊ5V2T6+/ 1]ZnlS7366z1eDi#~%ܜAWSP!`F<m8!ueTJi#jȞ+4,XW[#
g'pm"Wc<coQ2]r;Q
Oe"KO!]Tv=:'. m!H(_˷PV;Ub$yEvK"J/HrJKUQ542-=R] ^@e`PɪA~25 2^Cev{xQ.	Yh_nؗjS@|+
h*#3OcVЍoΕiQUf/ΚnC,Tsᨥ'gO~LmԥF~ dK\ttu%Ȏ9[5V"UQĜ6ߧhِ,$MuhHHf#WyN;n$w	S!pvdˇ58G4VYs]"Č	Ue{T}.tMb'Ψ>R}odX{lPp7ʶ^qnzLћ^wy^f%^K=YhO`mf\:`8v09]X߀=ޣ2VR٘n<vi2P}2. .x+uXE.D˚xL(sH޵6ϻ^bضT4Nӄ"*Cj)XYTJN Dg[hW]
VG=GyO#:@:lXiNLH|ހJ>Pt#"瑼c5'g_OMZ1zaKUS_(6L{,x	e6g}Weroyݸ̏J-]kOqBo-vnmD͞.[[I~6gH/~]]_Xd4
>ch[Vf;Xi"Q/:fuyҖߡU0K:ܖ[
mt[Lp٢tv
](?C.$j7x}!kkm7Km\^kI\J6X/4
I/D3b5{y}2[]Krivq<t\7XPt8
	㨓YvJU	Ҩu"DH>6»ar_ʴ|P UGqc~Dk凜Hpj?
>ilssk@H\G:/X^P'7->W4!卯cAW#>Am&+"80Nţѧg_|Xj>3QߙqV1z_zeӓwMyfE,YdmX
<zYʩ,C-vAD4	l{-ҎvӖ9kP^qʌjW3ռ'}s[iw̉o9ګoIlPtQ$l;0T-k0"2):񸎂1:{m5+%?0KmzEmyV^N.
]y*yVɆjleF	fI)f
^7@_+V)0+y%o
B?}|Pm]Wt3{nŖ+K&=NӐf
_Q*
Yc_nʮhޛGx7ԟ"UR
=+95Shr1wPK;`
  =  PK  nqP            6   META-INF/maven/org.jvnet.staxex/stax-ex/pom.propertiesK,*LKL.L-.IMJ//- RK@2@Ԣ<[C==c. PKh7   :   PK  nqP               module-info.class]MN0Q6:op	b	8QPQ-zg.NoL^MASQtΥl	voE":{4L_R2L	(0u<I0se|
ñqWmE*0بZs0GNW]|Rڽs>ou`uf]>huG0,qiS]]~ PK[   q  PK   nqP7dXk                    META-INF/MANIFEST.MF  PK
 
    nqP            	             d  META-INF/PK
 
    nqP                           org/PK
 
    nqP            
               org/jvnet/PK
 
    nqP                           org/jvnet/staxex/PK
 
    nqP                           org/jvnet/staxex/util/PK
 
    nqP                         8  META-INF/maven/PK
 
    nqP                          e  META-INF/maven/org.jvnet.staxex/PK
 
    nqP            (               META-INF/maven/org.jvnet.staxex/stax-ex/PK   nqP[G2  f                 META-INF/LICENSE.mdPK   nqPA                 \  META-INF/NOTICE.mdPK   nqP
"  c  )             
  org/jvnet/staxex/util/DummyLocation.classPK   nqP    1               org/jvnet/staxex/util/DOMStreamReader$Scope.classPK   nqPHާ Y  #;  +             4  org/jvnet/staxex/util/DOMStreamReader.classPK   nqP  
  *             0  org/jvnet/staxex/util/FinalArrayList.classPK   nqP%      ,             2  org/jvnet/staxex/util/MtomStreamWriter.classPK   nqPi"  T  G             3  org/jvnet/staxex/util/XMLStreamReaderToXMLStreamWriter$Breakpoint.classPK   nqPb
  |  <             6  org/jvnet/staxex/util/XMLStreamReaderToXMLStreamWriter.classPK   nqPAS    +             C  org/jvnet/staxex/StAxSOAPBody$Payload.classPK   nqPqh1     #             E  org/jvnet/staxex/StAxSOAPBody.classPK   nqP0J   %  1             F  org/jvnet/staxex/NamespaceContextEx$Binding.classPK   nqPc 	  4  )             G  org/jvnet/staxex/NamespaceContextEx.classPK   nqP޻    *             ]I  org/jvnet/staxex/Base64EncoderStream.classPK   nqP,0      !             P  org/jvnet/staxex/BinaryText.classPK   nqP(c5    $             Q  org/jvnet/staxex/Base64Encoder.classPK   nqP'd  s  (             V  org/jvnet/staxex/XMLStreamReaderEx.classPK   nqP    2             W  org/jvnet/staxex/Base64Data$Base64DataSource.classPK   nqPoM    <             Z  org/jvnet/staxex/Base64Data$Base64StreamingDataHandler.classPK   nqP    3             ^  org/jvnet/staxex/Base64Data$FilterDataHandler.classPK   nqPHL2t    #             Pb  org/jvnet/staxex/Base64Data$1.classPK   nqPB.(     !             Fd  org/jvnet/staxex/Base64Data.classPK   nqP8    +             7t  org/jvnet/staxex/StreamingDataHandler.classPK   nqPf    (             v  org/jvnet/staxex/XMLStreamWriterEx.classPK   nqP6Y  K  .             x  org/jvnet/staxex/ByteArrayOutputStreamEx.classPK   nqPC   L  "             {  org/jvnet/staxex/MtomEnabled.classPK   nqP;`
  =  /              }  META-INF/maven/org.jvnet.staxex/stax-ex/pom.xmlPK   nqPh7   :   6             Z  META-INF/maven/org.jvnet.staxex/stax-ex/pom.propertiesPK   nqP[   q                 module-info.classPK    & & A  2    PK
     TP            	   META-INF/PK
    TP       META-INF/MANIFEST.MF}Ao0,+XaB вRғŉ!6@97h
~&[iY6:
v& h1q(K(4X
$\ns@whKTJ(3<nS 6wʍؓ!
И	h@5xOaN!|<U<M
hXBs2j3Enw}t;uIwA34w${{heLVk(<%7%ʟP4nA(pHJJ!wyr
])gx@P{k%R]L#l25]ھ?VΣ
AJ՚W*Xrm8
MAacsjfMHŇnZ(i/v\\~	K?PaG6XQ?Ju^ʳ!{_^ﵻw=q/PK
     TP               com/PK
     TP               com/sun/PK
     TP               com/sun/activation/PK
     TP               com/sun/activation/viewers/PK
     TP               com/sun/activation/registries/PK
     TP               javax/PK
     TP               javax/activation/PK
    TP]-R5  r     META-INF/NOTICE.mdmM1z3z[ZX!TiAf܉K&L8]"ñW#d2YãtљWꧥ&>l#7؀
t|%}Fk>aڃ
nv#RQLXnokćs}'V+؅806+kQb) 4SĢAN .ȩU &ٌ||K޹D:a9属Q)lKS$Đ(6գ,߅Ofeݍ|K^mLC#IBNRD_49}topt%52d:ù(\jwj؂%cGwBzԸ겹]٫oDЉy_}vN	G*qTM}=µ-aږZ橥lc-ֳz"aMucyds	y/O=ԛ^PK
    TP\ݗ)  E     META-INF/mimetypes.defaulteN0SXu=x4Mָky{MTo9Z
1]a
0z+GQoU.\2QOko1 ^sͮa(uG@"IP}@&c/M)291gqnϾe40GXft=)uS;RdЄ6&0L܈Z.U\k_"#ғPD-J@)Kx-9$.zLȳ>^H	[
/ùAfNv$PK
    TP}`5x2  f     META-INF/LICENSE.mdRˎ6W4($'Zmx}HI4Dy)<AKآ#|rz/NrjR3v?9]نhN϶[(~I΅yr1B9Xr#JnlW:i0'>yN0ѵMɨ,4y&:fƏP7~֏M!#ƭa<xuu
C4ٵ6C1OB?ضo`ſAvw]au=v"c<*&5}xEZb(ʺf[<w'ddcwݸԼ5!o2O^ƤA';vxkc@p𳥋{lH?/11 R86.s/I>\=Sp) 
^KNXomdYpUVFem$^|a:a	%]@NqI*]) 	UFp
Q3UP) ʌC+m7˖f21eD^L%]vRs-/`\a4^V?H+hH(4/9e/&J{?p<ˌĿqcE_5
Q@۲5t~aWy6҇/^j#Lm8,s'R'j3L1,	C	ꗵHQT3BV.+C{U
ä: 8AEOR2o8T89Ǣ%cfPAok^<VȈc63̮:%dgi$VĊ%\-9J
wPK
    TP   $     META-INF/mailcap.defaulṯ
0yG~k4!Ic}{SqQBx
$vj-LlIH
ah`WGJPg./j)&u~d|i<Vҕ7{PK
    TPb(]    2   com/sun/activation/viewers/ImageViewerCanvas.classR[OQζeP
(xrIE_a{l-]ĿUDqڢ%1&휹~~3E2pSi6H\T⒎R((DfuL-?
^C-,[yV+UDɐ\kV)1SXo	%pMIedP>\i6,ߵdӵZRG6Cc-$CM}ߜ+5<sy!_+_(vʆp}jIʐ;>4pCsOq
{u!V#v{R{S5&1ab]EKM%X0K&aIu7paJW]Y1=Ϝ*ضqah[&%Dh^KxED	3۳)W=ގzmP=U$6Kr3z!Xv@,A$HREi0YfBԓHTRPJ6L8 >)LqQUQ׃S3~MU*kUJ}ERY|!*o0*FMW[KGLH"{KG,L4a!+
tFqbb1jzjAqбJw4u<.`#N,&PK
    TPe	BS    ,   com/sun/activation/viewers/ImageViewer.classVwUI:t.PBw(mA"--ڪ8M2ɤ.#c=ߝtl{zw}o0aFk	_BxPC5F5n
cH	Vaj! g	wDt6![T!9!	qk
F1!뤜nJq
x,5DOJO=9ϫxAAuʰ'-=)'۞/Fʳ&r	˜4|{2kCPD1a^IG
u۰;;K28nlλ!.'Mz,[Ȏ1I!õd_S>oz]N6X3y
2xZx)N5ﮂ*Ay,e.C\JI;WcYN-= -+,0d[yfbR0,3[9[^3m:㠍Myf td:ikULwRyS}/dɀGFίU+1齎gb^kbfz:Ԛ⭳au[YΗ2wYRں@ݶ[pkq^dި&ܬtWtt. LukEAxS[x[;84ΨxO@Ǉ8#|Q\8
΂I;]qcN*U t1ˎs8Fzc:yp_ߪN)\4V/ ]Ur+!^J>7:.6=G1ьcSǐ$BB。<J
̔sgo숙9g+T϶۴օ
,6l|
ʅʋQH|t-rLB$qh68S\nj=ҏ4oHzff/(h=C4,o&ř/ʢV*H<9"Z{*R~v,rF.gDhr<QyR巭￉K1lY٨D"o\ 4'iB	Zlލ,jشcLE(hGU*[JF|FǓtwyPeT				'BI̠zx$~DU}s%]GQUXf4b5
iAmKNp;sUp	`?Dp5f,|hRJہNI=oɇ)i!wNy2'fP;̜0~n`	]-!,!5GáEԝME(9RDcˉS
XFVʶ/EgpmnXSZQuEĊX˶UϠei\@+%rp
/2>S41&[yֲ
jVt#3J.G$柢]x	쥵D/q1yjIhDbUAP-TYZpjZG{NZf*jET9P,E:͹_R*N[
l&z&
3(h#@W?e[ˆnbڗ?FPK
    TP  }  +   com/sun/activation/viewers/TextViewer.classU[W[E&	K(XhmŪ&wRBA@IrCsKտW]
kYO>_oNB!{f|s0\]WfA2\C2
0jF_(D9WXS5[ӰFsa|
5T-5JR}B[
RCZCF t)Вܗ2.*tE9Ca9Ym;;#\Ik7:vvOu<i[iesðy)P3jZ;γѾ5eƤi|pVeZiN[g3;/)Mp
^ykޜ#ÝyR-UR#zh8i*8<{1TXACcuPtfȼ@G~oZ}"O\aEif|O5~#Oœ,	֔@+3Rkv;$E5wNv
w1x]17}1U`uЊ]t2Ɯ'hQ鸅긇]r1Iyb]uб]%M
@0r:,:>Cw탆Q 3C8ƉI|AorYZFz$ĖF=[]RU)|DB) D{!=o{ٗܭh
& u͚n]D7=mb0I)}Y[n?%\&ѭ>9x.	k\	frvZ.W(z͏ƒWvE_VشeK0S;TR9n
A)E{#EԵ7Ric\9)DLO2e1K^ANQ[BFs]SG2=:>	15)a7/_?h{@+BhG:Ђ]dKw0J3d"1 O8'b1PԘ.XBc	M	~9&B(
}o!ZI}AWly1Z6~B`g]B/_B[ly/0]{_(ӏ&X$gIcr*	|OHχ1"<&3D8N0׈

QdG8x:naQw+@tUE	7bx{O.`U/j?PK
    TPd[	    +   com/sun/activation/viewers/TextEditor.classX	x\Uof7y}YIim2IZ֤MK4i#bZ%̼$$3q%ipB BQDU}_qWw?w&t2'{g_3?
`0Qhû*6p
C	LX8jr~wRٗ X{e}D>,M,㄀|TI&|Ld~s
OxD$>%ا{LS"鴐~gex!>/||
x|f
~S-#k{l`~d
s㎭=j7c^n6I!0lG^q7bTVŢ=XtSNH a:=)2}4K;(Xv幾s
A;hh=Ǎ&*3ۢ#I{$>0Ϣ(ڞ6n#+hdЉ,[k˞
jBen6mM^XQgPmM=׎OQi]{86Ԙ9:cN<qH.#p,D=onE=MҤM`Ok	ˊ\p4oK!-ױJc?`Qas4^"GCE(\\37揟6tԉS<l=v(Y9əMħ/GVZ1<ix5N4"
E]YaZx؉C],]ĵtsNvh[D/fI,HU)ˍ3}t}iuƝH{
,6wȉ&RRJĩhgJ=گ(sY
3@-銍v Jf~rNЉ[]vcg%趰,/pzhG3>O	fR&[1]{[E'-&RٜָW~X-~t|E°x?^WMA/_>g,2ҾeI3K)<c<K_Ⴖ=F1:Yhp&|o<&yAV*K*@R&ii&nq#2͈J3U쳙C
l
ZjYVb%Pe*W-Q:0gÜ֒nHz:aoY&<'*WO`,Q\:RgvOw=P\!TaU9X#nHrXF&>OGкF<z.I@`)mYv4< ^/֍?S
r4s|ӂ&8cac5Zje(]4O96?<K$Ŧc_1-܏~ح^	:7fgl;NIY9LuLòdZ:ZNop$1 Avt@C,s,TyKondw%j2JM:;L[r$yxєJXůxLR͒'JUz+'^9ʹW.rzkÏP)Ath*&''/ _@ C@@@ 3IɓI(Q	4O$ybObѾP(|~7Ť..*Obuy$j<MBL>$V	b5c
BT.審eXM+P .7b-y҆ZzG
x%ֳo1\{S[q
iia:dV	? 	bL`uɫ)<<p
p]SmXP_m&>}3]D頦|)㾘_a&ƽo7v1pJ΂8$wH?CՀ|X%4+έ1"_:iez&1X)*Bԣe'+kh`p9[%-4D-e~<BQӷ/l
JgK1Ԑs%S9f$q(ʭ]ѶenkCuZ
)0^kb13:Rg=^=R!\oNUβ-O>,)Vgn՞rEQ8*7&qzB4M/;;y9˖$L[*Ѫ:f*f&zh[XeGoC7Żf\[6zVf;!*x%ݙ*ڇ7Yio#>Ymn2i,3pJWiPQȎm5;cL׻fqaZEnJ3Hjī҉`W{+xGF!}$IN0cdCvu*!zVgPK
    TP#c  	  1   com/sun/activation/registries/LineTokenizer.classVIle=dsb7+uijH.1i	M4%{Ob-ϸ
B@YJ>CZQ	z8,'@*!U	8Mˁ}{Xc [2>80*<!!1I)~#>|Ha>1(11#2&<8*c2|^3CYSAaBMFZ'Gfj,31+3	.RsKKO&lSZ3	5C7tk'!52A$ՏvTZDلPWҙw$̂S~Zڌ`9_D~u朞;-m,&ܵcQ5WAMh6_5m/n-DhG>1{ZO[[29rs#8S
fBʳo,['ȴqThF`z	
+oGAtSjI8%9~aހ^SHI0q ;VHZU54re\i0J
%;(CZA=Bi͘R݉v)<6U#|UM[fYR8n߸V.J8|d%_e}^dOkCUOAĢrf$	RXٲYYImtd}@qW+z{f13˃6=amkbAaV;z
Ǳkp^
w*<a-H~DOeDDثves4zys]<ŶECIΤxS;m~?3?	?s06RFndgL
o-KI%ԜcK\RCV`?2etn8nV46as:7xpG9tu,Fv./O=\G_H'4 }jw}R53vqp<RT\J,~"~~iwwH}r@pRB, W0ޅYBїe*.~.!*"`&MJZ]8oaַJ&߲2x^|f35496ra-<ۨTA~jaj	5AfHDAUxZED
ZO)/y5u&-Z۴QmMK&['Ӭ6V~n*"ǪU<ʧ.^Z«xxEcy'+ks+WpP`wBDe߻?u
xQF8s+ě
){o>v7=nb	= PK
    TPQ    0   com/sun/activation/registries/MimeTypeFile.classWsSVteq1B
زe
CxɤƁ:M^K׶@Ɛg_	͛4/BMiR i03ڙΤJ+6={o;}rō RXnYN4
#n}R5<nS~&F5~n"'J3nxórFsrx^{A^K^vA^n+r8«r7n]xC~t-F5tm7ZqH~)hxWџ0LOh1lFb -%(MFfP:(}qgmD,i}c2JBٙ34F:&=;"ɡ@&llƒ@e±!m)'B$CImKdp֟?KeQ3ͽ۲FdWH)W4}wHLItx#ei0m횒eH候r=MX_
]r
TIvmiX\Dl;L'_iRf"ڝP[@8RF:d,oCL2ܗM"~;J'6yKY)j3kٝe&b[F<ǯ-~3u8)&w	hP#KےtDqIV陎{Хn	T(.kgUY.ᒻx]S%Q	.-A߮B&ܱLҿjՊRۘcAЭ8"2ef?ȽWsC.W۟SQ03Iq:r#jV"uiҲX>pV9+h}Ljs*`2v+vV_f
R:/IѨj¸ƻm};Hvh쫧E݃V5e3'eJҽ窎c8Dsf+2d[rVR:
zZ5RG693n&'8#Fz=7v4mdfr}Ǝ.9bc9ߺLesSN-jeԏHVhܝ3♫~-079-J%YU\X-'\#SL^h"\
+t	1ey낐-`w=<O7<'aklqpQɃs;ڠ}UAr^ǹqX
hGqv? N!.>pWB>nFn"ԣ	S؄h%Hڄ)1Hm>jcpf͸ (£v
5485{5pCN޷Swx0<dXA8y=͞<,,U$"pp@NƷTEVki-Fc?^tq^la|ߚR^L(V0x2[Ƅ((^y>VTpX/:3Q2۱-3eVj~kZ&PsL+r~
3R_o],*wbC[,_<LxYfxJޮ+䣶9V6`0B,/L)>d]ы:Dy!m
WNE2QYk'5_`,IxXP		v9"-AZ9v%ce>E/IލH&0Bz0><Aģx
<B]N,Gѫ0
}kNI3j,KU\b-]3k+7QVN"nqXt2x9\3㟓hAOQ|%fdInUϒ	4ScNOiqo?qӢ{1\z$Z{NO ;WQleia
~t:{]XCY4egmHʢ+gƮǰSjfTwYQZqH bYX^p1ey
cNM4!a"%Pɓؔ_fS~5uv7ȧ7XhA؉CHj9L-Gp {ǧOj;>?
7?|R~s3礨	A^ᔨ#gD>qV܃sE/}RqswQfz\˷ y蠷Ym, 	;N}xN'SOMl`m*Khhֺ.VCEloa]VkḈMDGCvPK
    TP	e^    1   com/sun/activation/registries/MimeTypeEntry.classRMo@}kMkA(-	)4q
p(HH	Ur%lؑT_D[	$~ ?
1)$ K3޼_~ xf+Ta`Ck&<rwṁ4?<LD2^P/	QD]j{<z@5|/8b!ϓ~	Ó
d/n"!b1]
RjR, ~F<bX4!HvL3kq4}.H?}J2%-XX"VGB?Xha)ACF{ܧyxxا-.I+;B }4V7@FvNɗ0y9El6;d7P&l	d0n*"zm4<i㒗wKWh9,+B++2[g;SpG)ja`]#/U,]0K]6vPK
    TP"%    9   com/sun/activation/registries/MailcapParseException.classPJAcq5MTy2)('G6aQbfQPOΡUͼ8A
v84kjh	8gƚt(P*ѽhl6񝚄4(PXņ&8h&JfRYID^+j~D_<z΄@?S9"+鯹@}eq/
_pv\Tpp8PvBq2[PQק,(WK|FNhu
,Cb2/QG\aw*Vnw?PK
    TPYǋ+  %  /   com/sun/activation/registries/MailcapFile.classY	xՑ[4-tX|!a,_:@621l6,k(d a@$ؐ%1BA3|߷_?#<q:I9SxM/KM:e"ůd|zM߸C
/~ӛNvS	si2ACnMoKN=)G2n:KHF7WYpDOrGIqX?si}&"iDcr<uf7- UaYRdkhvSL\
I/
\sܴ.ObKD1:$'<Twէ(X>Ne:yγܴ^y:W\s}xco
nb*hKMZ@8nIΈf{0'jn5&o`>%
%Ne*.Ņ5x(][䪏uY(j6E:@G=E` tBئ[VEA  X:nvz!P8Y
5wEKQ( 2n:8D{4V&½|{M<!ӗT3tSkqa22+L8 LTe
EBݮxpS{CPP3wzrz͞@<AYn`z:%(V8V2=bS^1Y	{<k֘	'd\U͖է|hv&3v#2yҶ5"fF1|;CAP\5h'eN틤Ԑ0-!Ǣf*OQ3ڹ6ΤGPkY	xxg|'wu'ݸ45ˌy0Ι(&B>S[{5ZZ0;::6nH[ g{ .PFj0{(RQpznF$bVYA$7
 Ffcy4!(Ō.Nj~mr dhV=P$߱x}GFu'n3a,0;[c_ <i-RYE&3|@LKSa')Q
hhP.a[1
Aa"FO2xq,C+ ؖmPSօE|5v#%WF

	ڒLS?-96јѢ'b3>F:JX@<1x1ּ1!%|u1z^&[RZqj	Oܢɭᵸ7F<6yy$S̺x<PM<)I<+f;Ov> 7t꤯t$#4j5D;-}>sޡ78VLu+N?'x
Ʃ(+/JNdt-{vXn,݌̄\xipHǹD~^*P] b73Mj˒+/[yvZ
 "^zamH$fϘKrkuk-ommi)+utQxQ ɝQcQ[m3qP!hݢU/ߩ1ֽGu">L/ιrYDʏ(iO8mݏ1+3g㹊iV:$1.,d.ذA^]12z%m@M	.+;򊣒=ozU%cQ3Yd`zq-sIYf/ߘv[r/o^ذfU=6Xclf='#1z(%cIgBTgK4Q8L2+z.!`p:hhwk&zb	˕\m`tRInTX7'zׅD^;6YY4EԮ6
<VKcHGiG"9Y_j|%)A۱"VGAR&h5kG:9Eʭ¿2R7UTЄA*"~*
Є~6SqݑUu=~?CS&R=M@*\A(c~)Jh:ͤTEau
5R-d,%yV/%wmBJdBkFۉc.`bQ
E&Ϫ(XFȠnXC|b.h;vQӮe}TA*9?E\=FPD'P3-K{+t)^l;&JcUp9d|~Pa`h8gm &ҋ7m@ q5eY{p6W>D!OirSz,pU\T^Vѱ4wJ2$~]-bI94WqMpbﾔF50?	vUp'g0A\C$&V['ڮ`
X,C߱Tw!Q0]*{̀yYSH$-隓|c!/w%T
\
jAA
 F}wȻv!0APV׋tAX%X!:ighӣ47DBTMb2R>?I!.ػ*GBkAcNhR6vy&Q UP>1P6 ? I~h xw^,G>:UionjO@dXfs?j*4aoK)AD+|ex4KT=sBX2wr"lRYIjT|NҺ~Kyك4_Vx!Z 2^kQ]EOAYҿ%.JS;"x	eW,rZQ;ly+װrE?O}E++^A,50{7 HJطeXJϨD=pϨrU܎xc{8x]p]H(>K?)T<!vC(Ȼ{|]0~WNf܏wLP 2{"1҅Y߼nPm_S<wSv!?:Tu>^t	eN@rӪ^i/ec%'WJT+OaWOG6KaJr%H1n}nw
͂RQXMPBʡp14# BYv΢gSusΧ٠nቴK6.yS,>"1?9@#ކq!ݨ~s~Ny6i~AFK8kK5:͕GbM>-m<ckǂ5:5kYSQ_VC5ck)]T<S
<՞Zg*_.ŖnѢެdxenѬR[AR%RhJ×IdMzݫYaIZ/4HFj;DVZL^&[Y՝-MOfPc7:s']hrzsZq	^wњZr\~YdHy+I͝իysS^Q9Ɉ!c^æZ<^Cl(kH]xI2䖫4okr9tp"`n~e
#:7˥Rsh+ߛ@![#zhhQ蚧J5,<?rπhTȵ	 '޼D?MG]6'rιrُ\'B>j]T^@
Z:ON{͸{xJW@2^MFV|=gK^s
>-w8Hp'}&p78nsx+y+q7oq'Q3{|	_͗w򍼛o=ݼG mSo>p?;W|??|a~HQae:*sy%ɏ*&~R~R.秕+r3?s=|PyWE_.~YWT4~Mߨuu1οU:R78AWz+{ G}??S)OC&yE*c~ǽ.r PseݏZZ<!<pDPS<Ekab`5OɌ)#9h.w*+U^ Lx~r10#7q$8Y9E?ARCRG[W\z$X6xIy
4<H3Ra*BR0-wJPSN}B{t.9;3:ў=kJPr[9t0e}N'9Bziz>I:a:ؖHiG5虧cRu]gC\8:\~ђ8x.Btv>%;1r:OJELWd/Dѿ dV h-d)²񨦤GL	aDZ0RT:Qq=MP.,U;`Ic>$>IǺOZPNMClg4]iҒ9tP7e+4A1Bɧp:C-kU
)e"]uJIZZ'Eמ]{cZ2SuF9FJxfaAZWԽ6=()k4\Z@!y`&z+H%yjIH#E~u_X
PK
    TPVt  C  4   com/sun/activation/registries/MailcapTokenizer.classWklWfwqli⍃zdKGk;NNIzlOwg(mڦI[Z
1H`ɏTNH	!~HB@Jj;3]?R{ϙs={v|7&x`,4*CA̦E1 '8C~|ɏx܇'X'8#(O	\ψճs<// /	 g|=};N %HS5̽ji$Tҝ6 ITzw2%!ӟ(<b_3LKI&}er+әLi!T%Gj<#׍ķ1f)asG5CJ2&΢/L
HS=Im
.Vy/
Q^MR7A-VP9Q{ռ.p(zA­LXP4jԏ3ymD/PVz6Y
iy[cE>XBmA3->㶁5#=
h3c1m[.DRwY5)SJ^rcWF0%E3eBf(kHq]:
;%c5f8W4Znf.o45eՎnfX}NpBf>0}ԌzJ6-4)0ZJ/jq|XrT$^z)	겾P\0+36]Sxaltဂn_@Wѧ|S&vAAց{܋N	͞j(G	F7sMSpr͎@oՂM
Ⰴekk8PMUpPa,&AS-A _@V-:;

ƽ?xD˘HfKaPNS$T+̕X`U%DI@ ՌB1uDu}Occ1$!Sohdob\5:&16o7RǉZm^A
.晵fYs39scL Քхn­N9vRl\1ܱMӐb!նN-K\F ^mp3o[F:d#Uiȵ>aظJPA#GGo,-ز,,/4RE#+n
c?(E(6#&~t68b<$.Xg(^Z<b\p+7+ǠM9FCIl-#\!\%*7"ݖ]%LAz	ۉ]><W,aaH)j-v[~OX.Pb.-p`v	JCϕdnvsx򲑓KXy᳨'&0&g+3^`l<"Զ
"O|j2njeQЙk&1ˈL"Cͧ(b~ <2RJ>;+(
'':Nf>><Ǝz{y<A<e,p*)?ǋ%^o2~ǯ`c #L``K""NDW@^U^0z ;aVnQ =~o͹aUG8jՈIv7.3]HۭA*t]7JsOUe{,Uee7@s\T3<r+~tI\F,4e6+WYZKgn1'=1*7Yao=st,xNSu$3\쁼ke'IvսIY8;q}۸	3HBVJkr*1.@mQJ%IO
-:ޟlAZbgn풛3sw:#00	,O.k}Ȉ#2ewW65姁~ewG}<zb;\{[4n7<tkb`=˓niAM Lcc`2ч|O*_
fX*f-:s'&pJJV(+GTӀF?PTS5pw]Max>Jɇ,xg,:PK
    TP?mt  K  .   com/sun/activation/registries/LogSupport.classTiSY=/IۈFȸ1HZqn K'tҩN`BZZGY݀_r}{}׏ALmOk85CAŤ$&x8/pݗyJaW0*%q7TTQYVU@<HN*]ks4ZelU
tK.ILZu˻ d-ħE)WrU+Kw,dIi/^YM\ԌfnZ2=˩ZMϵdZzDl6IK+fɶ8zKYsY_ο
8#TorbuJN˭Y벑Jt~Cح▎9VqG]:`{:$0ةweً1`adf"\s#l\ #x≎+af~wx9^U`G1/a
dC vh*izFetZQҬhPCݚZ 0
Y_j-J
A?OzN`n
޵tG:{}nF`&ҤkUml"&!(" }]*JB0{ڝY5b1C1#Qـ=Qo[hm(5i#A+uØiB!z1F2=~>I.$Y,IF#EZz
ckлIMqN"	;ܼ#Ub]!R1NI?8H5q%N0	(i-W_YEHw~@vt3Y `W>4S6btt%UTI9O~PK
    TP>}    *   javax/activation/CommandInfo$Beans$1.classROAze"bV/&&`BrU#oֲpG
EQέMl
vv{ Юqc*&}yPiNK@itd/z	! Dr rU#5b>Bޞ2$($S_DF
Q;Y
Y&5z>V&}YHFN0E,X
Vqf<OTY䝒QJf&nxa7~2ʜFl?]0lXQs52~<-3,;
#QPZs}i³tBdu&ococ.=Dzv*iM'Vo{m5Z,3z?'˰(9%[)O-%W9?M媓8O&]x#Rw
^"owp8\N/u*X/aY\Ɯph
/PK
    TPg+    -   javax/activation/MimeTypeParseException.classPN@c$$@E.J2)Q9CN>*G!v$ݹٙӽ@A	{U5D&֐P4H&#(dǁ
*12RhRBRsTLyfS}T_/=K7shDS*N?%1x(p	|E#92<s%_o0:\`;w%b~k+Ek;K~:8whTk鶱WOPK
    TPS      $   javax/activation/CommandObject.classeN
@՘h[kY@AH!؟N3, ?Jq'tRaf::̴2"7`sgWG5Ti䌇FfH؜gH_8C⭾$XH/`b}MJJj>~.PAp,YTTצg
OPK
    TPߙ    *   javax/activation/MailcapCommandMap$1.classSmOA~^{E+o"""bہ+(ĤE	~1ۻ,^-BoW/H8whD.w73<; 3Xс$"aTG#KAx2aR'Tka!1']0ĲugtJ\S^tȒ{wֹ/CaM0]WKAH~o[Jns%=,pXܵ2<=K%ЙEݒ%,EW)_%%\ʖ>,}g> @KpA_%B C1Bak9^@e
Bmz["Ð
!)

]ұof
̡}Ps	
<E461D@XU_]s՗T$+S0jqePWڥ)gO&wx"\aTR`*sѠC:);ؑ
HӕiFK93ieDN]$: 襕<{L7o:Wh$3I{Hoж2zC$>ooSXDoHC1XǈhTpqDy鯅"0Koi,k:YF\0q\%CN9҈PK
    TP$=|  	  3   javax/activation/DataSourceDataContentHandler.classmSUޔ
ajBXH@QJ,t1ưt|߷tFaѾ?Ƈ0,0{{}5iD;^+rm)W0фILEU)X
WAr+SzqߔC6P-^Xc]{i=cVzBw])!f[kKFye8{UIwtpS'
;ݵۖcXδn<0lZ30:F]и]0~ִE</IzqA/;&Eg&wbp'Sݩcd\K>Iv/rznq;CK]!L%itML~.<\\+w˦cWR$YlZ˾ĴsTqHjn"+ZIx\5?*}MEJ6M1zS,)_RAEr*BN<"gTBcHPC	
{TqH_ǀxOvsZJv1
t̢yCUC.Pgh=ñY,Oe''ƧKv9"rRER-n%`]sC|3sU!3u {5OKVK=O%_aE/oo[Ma
R X&%^*V*Pp|~i-rlOp~;}(J[t1h>A]8K\ܩmip99~G~<G>ߣ(q3/࿢$=8தg$5OSvʽb7kr	¹M}IF-6bYAքKۅ0N.1$%V=C=$Nc)xrFD`OD	DHvac\4	=#q2ԺBT,,HT?g>U<NP8̸@'-ަF]m1(QNFDv1s7D^[Hy2'Br;;DP-ZoumϐV"Mhs4K7𢛡A. 
-?W}n_PK
    TP&-  r  %   javax/activation/FileDataSource.classTkOA=º-@yCT
		Hbbb۔-A?U&j$~5G˶5fu9gܙ)hýV$0)tD@ɴgubZf^,hxaQCU4k,'Jy}_62CJsZGܵ[lyqJ-X.2Y2e
Y^-횕-+;֜/n%j1⾵/.t`x,r{?V,{ӵyI4E.W]Z1y'wPr\0b9Qu 6Q:ˎ횶+bH';2Sn]n_V9dT^pRK%|	DQw{;!8tቁvtDhɻ``$h701^Rqrܹ25N~ɀ"VysW*\FAs1L
t$G&ӓ	ou2@2[˲o&ꥶQjgmߡ>A6k2&>@IIBHϞ"3^C9.yxN)HaPRBra)Wjh9c2B^b/B+7軉[lMod{u	(qw'R\a1e%zH%	褔NZ2kƗPE=x?ZC
S7?Q|.^T'&J9P˘_]IPK
    TP3    !   javax/activation/CommandMap.classVRW=#ɌFXnGK"`.-\/?H)U^W%y"U)ߑ'9wfXIt.ݧOwg Q5#hmw0fٝø	t]3pS:>50IWgUs5|/u|e#:ְ+/DK(DYÑ#X,ُg㌆hAIuRg;`5gWu#*lI䥛UbEۻJi
R^*vQWҝwvgKpku슆jtXo<r4ۄ<I1zr!h--*#bD.!0Vյ'7,YVj4nXPBá&zc(IYlIWIו<twLᦄoJd1DQgHx"Wd`ԓpFGmrI7N'o8κ{7Xz.b[0[]6tcJI<X*zP̑+rn*
LndT2]aȍ°c2N+5Gq~aC8C:Lcp:&lu!6X4`c!&Edx|L&2j&_o3R,ʂϫs#iyFÁMU\\.
֯ &iɫ
aV+$(^RrmlNIœRhpHmZbNzÌPes9h5iURԼ4K\Y(=|{<CUuM᰿{m*s<Ν4;/=ENpl7=.AGsDVs|
%_cG%
o?xxV^5SE}[=s6ϐy	_$K88|ݴՎ򯑑1┎NR9E^ȦVH-cݲt/}etp{TktF0|3iY΀ax:NL$u$4f}\ߍ$5~QJ0^cTc,3\;1Z-sCi)CUiL]O<aZ+d!r&D4G]ٙ|%@JL-cO=k3|0꾑(Ffc{9$RPDGsCDB8n^gth_o~3	rAw؇PK
    TP    (   javax/activation/SecuritySupport$5.classR]kA=nmlSiM6BDAJjؾO6C:u;Ά (4.ݽ{/ O.A.C0y29bz'<Q&W^H%K#Ʈ	T*:
sBS)ذǲdf7e)(g	Ϭp+J"UQhc{HGToȹ'Y*{g(\o`L&^Kmgn܎@TRa(FEЌfGbظ\"C{^Ö)7yg$hU"ÊgJj_ՅPk?e؜t6V=ÌEko@V k鐝jZ	UH
/Q.(F;"&OaXn\
s/7+tPǪnN:/PK
    TPjgD    "   javax/activation/CommandInfo.class}Tn1=iQIӰ(в4TRUEH<!'1e TI	_
[AB>oAkOMF=s|
nGхLp*n6p&0E1h
R8T6g_~7yzzu,~!RP^9^s+ff=JٳlI¹%/㎥Ɛ">uZ\k-\沘m"ս.ܺc6lEgOwײ,
.C6w?Nl"^*(Cގerj`$rIgi)y*5kZsyQ5X+
U10o*]NA,YjקgbWMĀ:QoW2;_d=W,0%/̧iDy/bҬ4Daۣtv,\q1KV\.]|MZ܅Vu춧-]QSmwڶլû/>vKSP &;UWIQz
G=Wz*hdܓH~@ 1w:`~
 4&9.}d0^)W
(@8XIӬm$s:92ji|GK"aWYnJF(F&L}8%$nxrcɏ
mc܌
}Bt RHPFF ZUIM~	h9fx҄g,EQ
!WqqV1+8Iق5oLV!@I8I(%&Uz/PK
    TP@Լ1
  
  ,   javax/activation/MimeTypeParameterList.classWkt3I&`+"$ (b^ iH`F$;!C, VU6VZN[?~qǧI	U̝;·!p6H`PD!ZqIЀ%-)GRB~I PHq|'CAbG_NZx \j#<*<b$DvI<lIU_
8_8.Ji=a8Fmǜl۠>2itnwS@YgR
:iC➤e;l'3ӴL[ش]ۓsߴLbHo>]O:&iT风Ow̤նLI[f|7m#;%rlQ#%UQ6e}.mϊDݰ(Jr=iҰ8|1xG'6m󠡢`{)~=m/c>,=d_=H gVؔ^+0
B:ɬ@Ec~&:Ɍi+/YN%'-c|Eȴ%'g\2ocĤĞ0SCcQ:_'>fZ;tZdF*_h[P[ c͜firƊTj{TOq`25n6eVr鍆5Q<OWhX4Z
}ؤAǈOcq"^)
_Ǖm̖@oO2391ӊGq#k
Yӌ<Gg;*K5:N&cGU˥k˓gNe^cYX2@s<k!Xk&3y	ӢGA<GxƑ=Js[Ɓ1*YFA#G3e)sS^7VmJ9{iTƑX/S2UB$4lë._N[-5}	t(^2lPq 66uvkho]Ë5|opF4vsp^ɖ؜O}MNvfv/o_甩7avRI']Nʙ˓א_O[mܱX4T;Moɫ%m&/1,;6zt)SNt	7t\e]N	N[
pΪkpӵOW6eSg]4Vs֖sW`% #U7VΝ±(y3𾮸;X/A)oZV]S[KnvrY/<
ߜ2ڸURqeVU,uH{,~ƘoA?6=WC\7pIG4e^"[jyPxΡ
1u戏[7P4
?#s
Ŋ5uQ,J4Ok?0þlU~.ӨJz7
/>	rR")"]O0)J(ߕ''r%]ϡ= Y1U5 Suzϱ7WQ5
sWzye|]+aJq3syqf0ȬogY1w
;uF8va^aL(x欶qo !/p~Cx	=<
E1xJiQgr<+sb;؃
""!jr!Co*)2]񭆟:4t`d3L*[!1#b`#:Q黈Bq>EW "qu 
M
B_P"sm
$#s]"J>ee*QszjtNKg[wk~څgoVWov$PMZiԿ({#
6X<Y۩VNj[d
SgJs4+3,)8`66/t=z_q:YNbzB͋)?\19Awbvnri,qnj8H,al4[FӐn&bdҏokE\@oz_9Fg/>^K_¾ۍ$H;%e=;.ƾQ[;$vݢT/:|eX<)x=g]Bx!ՊPF|(Zvڥu1yqQMK!e͜~uyEVF.%kpկzL~>T>xuS_s1wpwT50&
xo
/ۃZcK|_xB|J	%Wk'xdzl.2\fFrQ&|6
2E%։*"jED=D"
{KqT4*6BBy;PR
彰UUaՔ76#ZN90(RE?@TNދL.fCǉTĸEoSSӭ 953GE,PSC鞂ۭI˼fi0i^b]
u67][tWtVэ~&+5lq"BC]@|bI
KWI|(ꓷ}p R>
N(\'PK
    TPa    (   javax/activation/SecuritySupport$3.classT]oG=^2I䃔BNm!1v@Rz,Fc+O׼ćj''ޝMP-yΝ3{ PC_×Y,\&f
_spB?Oas\Xqc%I/`sp6R čD]zSH(6$áPM~ؠ?"C SSwRT'!rscM߉@G<NS	U	CkrIIMO-(tjkƾzXknnF3q3d:2YY{ =n6cpw+~%7k1vM')rܐIE%K6PS*6u5W9JZԌ=yOޓLJA\DJ9Y(㺅0QcpߜX<L帙+\LYb
nY,~TV[Lb8q,;vO}Hʽ3Юun~hK<_F0T2тS^w;ߑ;fh]$(@nP%'Pn|^Mf?`H?m=&A_\.m,f-zp펓ug`3<Oh! pGi=c8A3I
iiB _`s,O=Nq5⸹zSA?ï8k>X؁e~Foufstɻ,.Qŋ8˘bWiUM\*}JȺ4KTtsT1SgQ#Ib%|jE0Y$( Gpx4xVE}bA>qt:PK
    TPԈ    -   javax/activation/MimetypesFileTypeMap$1.classSRA=CB6YKmA
^*bQ/d3njvS,|w({7
@*3}N_?~X'1a"Iqf*I&%1o஁{KғC,beГXWKB%<pw+[θޑZuyZ|rk{vAVnDR&^_1f^(
GS0WbEWXR&HvX E͝T'j>Y!yf$5q*XC*̆<O[K,'X!OA-&|n,1L\mN7a8r©+{ĩj4U2]`;hQeP0={DsOj+3\j$SqŵO'_2}e۝2Ataiz>=zK
l`_p/D|>V[߈ћD;b#ķ9u7d3I2H`nOk} g'H}9KnSX$n봳
䰉9ɦ:H!nЬKM7B41܊&yoGQ#OI9҈~ PK
    TPVv     3   javax/activation/UnsupportedDataTypeException.classP=OA})
b"DCGbB ckr,?e9&&n13}l9H)%/Ldl	e<ԄRDn<iO
ƌ;q}@>	!<*f!L$N^)z/:ePg`QеF-$Zn<MC}c$}PN8B%7qp{<H̹|;N5[q,9:Ow1Wmf
h.p̣aoZ9ȴ,i PK
    TP&.r  
  (   javax/activation/CommandInfo$Beans.classWisU==KzI&$0	[H"Ɉ""H4
qtIw	}_PA, (-R?%3	CT[ν/~-x??gj!cgNw	czè!#{Esh*0d(Ew:e1d얱GF:b}B0Eof8x [(gBN##+f#2'!YW͌%iݚV328ΠPն[QiHzZלD~EB:4
VJ00Pnw}iJ"mw!a4ihBcDuLZCCJV[.&a}RSR$rlhi(u&~zdIsHnН->,M$T,+'i}@Mo4=)VK2
LMCOZ6X mWMu'>RrHNG+R$a4qCg}c7n]|t9]vd<(!<~܌xuZ)D\gʚbj:6O:2v]V@YZ=\A#QЀ8'炂G
d)xO(xO
3
s

EP^%ԭ񊂃8xUkx]BG~N 9cr.nie]*Fo(xo	fHmٗiv
 oLmy
f1cfHBt2Ɖa%E^0]}1{SkbSHTg)>󾌣3#L)xe[NTZ[jFv2w s$Qw2NL飝,±dCRV,d2ܬ2^hgk/4hXJJ\"jmf%e^!YY3nqyqV @vMS<lSߛt?E"bەúIM3krB&BFc{жF~H(c߬kiScemboStq-S~xeE14q`/A:ˁlK\~.J^VSƾ
+່ZR{@cW3M'qmOt;K9Ȭoby4PڛF9(ǡDma6[hܦh/Van']@i9G{ooc0ʡ﹀Ԉ
QU:QW(<IgHN	iE1Pn)X<|i)>Cϰc3@;=ȡ_x? ~ī;Ɲ~	i>>o E׸՜׎ډx
j[-Dޕm܄;DD|CfmD筅,o-lDh%QFRFߨ*DA ɨ:bV7|wmI+,9mղyebm?	Mb[69|g]j,/ס8l!ʏP0X<. <ugy'e5zW-/c+cGR1lo|ݽo]pt5F駊PK
    TPc    "   javax/activation/FileTypeMap.classUkWU7 BmAPiVCA0%ɄkkbR?Z	;	6!;s=g9w_?`ǌqE$>pUCF,>19u<Ataz[̨

7u[o֊^άf;nڴ<{l^ry"y[wK<#yP6+[OgۢY.fuMfNO5GЎYl{sOMeT+mHw(җu,b7!oˮ
=Yxv|D3_[OtJZMSzVQ+c+0ҜTZ5Zu9kg"0tB`,;6cbi!K1Ŝ'k.B9L1kN͵rmR%1pC$~`xhXV=ᬆU_ aX7|umx9$=U
|oXs*fu˯OKw6H|e`w&Wd͎ŏ67jmIk;/Er\CXƵhN>::5]^!(P=*z0_T׫ϙ'w[9t|7x]YrvX/qul8DZqrB	Ϗn j oD9\i̧3|
w\Sa|3NxSAX)5'po5 `dgdSH㹾>:&10=}t<Ft|:6JO]I.&<),=*}IFĨ.KI\U(R8(8!Jh0W
S'4n
i1Ch\RmI;_Φ~C9z֞R
b5queؙ-~uEbա|%1ꡊw=y2`m %r$o])!,s!'^^gTxPK
    TP]M=
  I  +   javax/activation/MimetypesFileTypeMap.classXy|T˼7	D@B
V@Y 0yL:3ABkk֢U[,UjDP[qC[muknuaw,$#?s9~sc p*`%N>_6
|̓p<pZ|ݍo`eMcon3k2C}Y`/˃ɸ[63	>Y߃8(
Ht2p:1D1
;,k󄇺?)
xL>?5xփza~9+X
%VR^p6
SmT$MXd*͑NkuO,(h+W.WP
cT(Zv[Nۭ͡hJXM[CBPbK#	YX$PY>g-e/)Z;7YաMQ[L<
%"2Pj;i%6nw
)%Bfۻn7HHQ!5}ӶݩHvNrtnVzoՖ
/茊f4j_e%݉0Gc{AQ/-%mlmGIZaTO*-]dźST
u.JEh4k|
X%ٝtJծY$D⢨
Ϫv	yrm6Q>MxP^M1jtt!/Ig'+t&Ծ3-<]hV8gώCۘJFwX)NʊeAa9)6js[u
TnWJ2,Lc@o6vœFk̟Edd]f}iBT#8M(L/șimnbG&k$uaYݑ(a?3Zj56&^_L\& .@m&VlϠ/67nlYVV\|bޥ
˨mf{iM&؈LS8a4;&tѕ&,f'7wG=V{@K`ě¼c-9RBYap(6;ļem㈉x171U&^ĄDPS9sM")Ěyc$;@ayeVN!5.ESa\6S5ҕFix8ev3[yLU't5TUI6k䅶Bx16}xiD5+x0G_=%}{V'uV4;Ǘ8m]]E8$S-&W&]V"MZ1XIL["s%0s&P"\g9ൠ%#Zvłǻzc^:J6į]l"7	8l9il^@%,!]}3"9Fxi
Eh<QE7m/{[oO
AdD)haQQy)+<3
hku! m5=YCŽQ:*"NeU1M5ڭV5
7%3X1P8,l:M0y2[d`͐ rx4jH{|e"A!y"9ɺ]j9Y!C޶M
ˇQ4s܂x!Ǭ,
6zDTCcgjT}мEpy-ՇPTNzGӇA¯*rBk!©Vmlm$8rTTz} }~E}Ɣʊ0S8?M= >ub5M}
V0.(PMvތ|7@nʧt`2btK$qRݸ(s;¥˻؁/#	Wf|rf|k:s!5XKWkܥZ!O{َw%N\H4ǩS|]t)XPAUsEUॏUkg=L>j\ӝ3zQ,k{.5ddK/iѓkO\[=كqq.s/WK=M/B=f"Su`iwzܘ.~<G2ХMC]\!xqadW0ϓj<kxJ򌯓q ߢn`)ьr bDG7M7ɹ8w=n.|nuٍ8a|Ӥ=K+c.6v>셉oAIϲӀ[m;ul!Ў/a6Sd]zKzpC!7
"LuSy
&΅*ȬRN=Sۇ92:TT5vHU 2g|.v`|A] P٫6hC[)g0hm`}Cz*ar)Rm~,A0%Y?f糴
ˊ2EX&=`s*=j/f5[|yUsjP'y5Lkt^G{ϳ}G)#=VPjԙjAfG<WU8#mjRbdޡ607d"M;!M.nBL5Lp/>}}Ly sc&9b>;82D'>OE/qS+#U>D^TD~JYUùy;sgsn1S-'H[67+
>''VUu;_W3͢Qt2^c t;pX4.FUB5L-IR4VlM,m/I"pCm.c2	=%y
Ӡt\J*Pr<GQ2vp[})l4׋lrA."ϝ^˳/n1Yⴲoj鼙KH}79䀝ߘ\+v<ɖWAf.vp(]lǲ4:C
gVvzUFv<5(5&-\r*e *|Ԯm}9'&Fr/|C'h45[Oy1zBn	Q:(B[
쓳/	:mp#V$b(ͩӏ3T^؛'6ܦөC<=rzNj'X2=[P-]벡['ӝƧiΗrI.έՇϞr؅{*haQ/7O]J4̴?13ҺJSǟ"_ *]bj=SUj)2,ghR砕5jE_L rc:9O:`A,Q:~f0d{fo}9.p.TCxڱQJtd$ۃ琺uY˺y=[sϪHG k A>svgx
mL?9m?PK
    TP/    ,   javax/activation/DataHandlerDataSource.classRMo@}q.IiK[H%q".RZqVV:r7U?\ >8pB:ijEV@>μvv֗.~x>(æ-ܳp=l{x0Fݕ	zDPDF	b2+tj݋ےPZz-V28#(%]sN $f1C#[HcXSPa@|y$C#is`2Ռ6[k#9|ק~];!#޾6Zg.88sv8pc9ʱ*M̯hNdd+x@Lfj֦M`(тpbe5T`'!B)~G	_pHEgpf͟{|3ǮwN|9-r)B&N:]Éit	I9N̾p0MYPK
    TP~'   Z  !   javax/activation/DataSource.class]ANAEHDMn;		aprҙ4	ࡌ!^tz3=+CL֎Wۇɂ7l}e[!!mWAi4oke۝*2]r(r>妼R Uͺpo~"{eSX?~|H@ $! Q}֮:gG9RXջԻ?PK
    TP#{  0  (   javax/activation/MailcapCommandMap.classY	xT~ϝIdr	!`Ha	B 	H0L&Lfd"bݷX	E[Ū}]e{f&y|9y|ؓ!wyu녆fc)~Ͻ~5~^dz.<xOы?{,̓x?8c:"^xED@\Sbd{,5UD^|W59\!C{Gzd.JHatuYR(1b,)įFt2A&fKLFLVb](VKr/B&QxiU =2#g+%gzdZ?#=R9^+sաUy<T@žP_
XZ/(XH.KF]$Մ]].pl}}0QHe,*`sq{84G^ry@jx _w\Dz0iYo	\"Mi%{H{|U<e5DCPcwPlU`s8@xu ֮Iwg &
6E;T'h=5ю@!]͛/ZuÕ<%AG2Ġx rmp4м2:OH[Bڣum::HWh`t`w=#	6
dE:)蘣2]i~u88*͑ca^o-GBVۣ֫JM9WKp`D\%S~QI2+aRSӥAͺ4
<<ʒܤ#Ns4ב,Nk/Ţ)sk
WB-X,lmDxu
`~[twVhV~$G=aPY)[ܵ*j_<`6co9*Xr_mZR1&6"/IP]<ģ1l9c$
n]6`(\hm}mO[=:b\V-m䷙x,]w鷐2@sʛm4#T<00CJ:gM'(p"<aR4Ђ!Pk \dJHɈBnjO
*61XN*lqMqѡPh#w$'t.<sYr֬J̝V~BPtkh?c|CVJ*Ji%ʐ]+T-e!kBӁ/n3V|*TtX[A.2p?v	
NQQz26RROJz%#aѪŕ	-p#\-*U4ZaeF$re@"d.ACfl1Uڔ2Xm;a*j*UEѩ\PFd$7%cD	Ƥ"-u
&r!1Q!
'TG`+
Vuv`K,ڡ$NaI#n\r/P 2<>ڈDOJ..;T.3ri+g|ܐ+\e' l1j4d`(8\#ײ
O5{J!-7KV%<j*oȍTgIj%]@,_?A!<8hY^̇mK d"J,cƃpIn6Ug8t
G%+Une5nm?yI9=&NvC;T4&Js,bm$?m{M&wsض6xYTg"t7o	fV|\mmTAG[S+a;w&'X^988'aԪY]΀mO<jQ-NҐyXG͢N;Oc4s)渭S-M6эOHj;쫻@*>AI56jmpo%nP|
gnwYaN$SىYO_I(B_	hY)%#	o$.B	q'3|nRWG=cQcm}]{K*9P&3DhVV55	wloJdn
h
qaHqNI!6i<N6B\.i@W#q>z?aUItg9u]^jZ{VEaan!
N	Bg͎YJ}ZhW:Ƙ\]vި
X4lUX%Laop/Vk[afc+ 4ss4
QtBp1b|<6@%Gg_-<mzi(pkXq yxaSZoy/g >zS.0K,Pc;)%67P3-02ax5_
]IA6`O(<13b p-vׅ<i|7n ܂#p;x܍I`q/eŅ,< N|@e~7%r}aW؏',zaOWc(.e.H}}S"sW;hc
.u,Օt,9TYDyKCI/Ɩ_YlS(X[ևq0nl/MK-Une؃{_*~ڮD-ѣix1)Uj̯>`c葭h0/B-gM>Rj^>=2mow/)+x]eǯvHk&ҔF)ux
/Vo|clٻ(w}_m\k{;O|xk\&^f
^{ϷcI]*M(}4>9OmmѵD$o:\om3bx$̊Ch(pYM֒8gHS+yIS",ĺ'1f><bBe C%r|ePZAeUn 7533?~sgNҥʓ

̧҂*sg1{Z`iDS&*;Ld'|\+NfYX~$B2ʛ<Q~mWU&TMyʬqx=86ntg1Qs[ x0!â{L<mK.rȇy{
)+jE.岒8HkA6ap1@jx)g_$b-{PG#'ş_	' _Q|ǨWe/9F[q~RWC\2gs0Δ<e$grm&gp<H6`R-*έx|D2Td\I]dʗdX3odz+obreYǑ
,E6FYuTAu2	TH͛!2eLQwLaJW)­.8,>jF?<zİ0|LԣZrgGs:2-RῐQ3('CQcs&Dcs)1DTaf,۶Bp#[J#S0XL+̈́8IC8>Q~C;NN+ +B=@mfQ8-ԬԚyNJT-kb7w(z2^
T/s0Eb#h|Yi4C4Ur"SۇlBmɋyUIj'56mO<JU\Bː'
Ts&H#&2,r,b-VsRsnۚN=l7
ÜR=85oRP~GSkkLCϳ2(\s1n.rAc>U+1nG0äc҆Ri˶`lE
$U҉
<&!,]X+dU.5m<5xĦڅ3̙NTA(CYcv BcȰD3 Wφ_NcA,4٣BSԲ/S{Pi:e`bfd=>/vs >|E}
%r5min{
VuX+כvYBf12[ӎ3\~;nfu51?G54'ﵭau)5>|S>6q^4**.G{z9xՁ-VۘnN](&'m++L=nb񔣻W|7Nc<8+YQACt83pyE:QΗ881pg|s$y&8Rwu
I3 \LUe2m҉jd ғ=ǿC9y!(1S%˸H^A@fy1U=#Y\gUTNTZ5rc*Dڤ	U0Ŭ}D%Y.wR 	j59HK6ϛp|.(9g	ɇO'pv|<ߛ??y8.*姘!?gzl~7]	;ϸR>n>;>'>^;$LvM,ϙYysϡϡmu/aFcf!|d&'@

Y	"Uw~Ro}XdI٫i2ArPHPLrCNR7 fƄLmVb);ІGTZؐ~Y{+4qM+[ ǄNF/Z c.]~mz5ƛ=2BjcƢXx&`6"&E-Z1iSpVkRܬwg6h3v6zxZ״s6jUxO6Oi%W.õŗ2\K&<olĺ]MĺPvV!V$8ppp|6p\zFrQm"y^J`iuOwutJ֧L`JCȶh4Hc?/KlP.E_}=6~\+=NG0jPWf=%> [m)&k+זc1GkBUX& /rm-hA?>|L@\M{MWsf<5;i1l^X15N]b5j]mj
.7G^s*vRNx:#qQĥ^U7"WMج~b+)u,Kָʹ|w9iƕ继DH#@sUwoXvmmO-
eA[-։j]tJN,mYWSLx/]c8(x8?"te>f3bOCivdU_ʰ"c>DU	~֪T@:uCz~RMV+UffgO{G~F|o2h7zh?[Lnnݎaڝ]L|wTj~{	=h%M Cns!bӎ<2?ƪsSNw90tۭ6ZMʢГ̣:6?IyL3]eOfm?-Lx]/yyoh'_8Ҙdseư̓&pK![Pf\LﰟVWAy.PK
    TP-(  F  (   javax/activation/SecuritySupport$1.classRMo@}8Y.4mH@BV"!9J^Gq  ~0vRTH};of|ؿ~	u԰S=6>G〡\ie_0TzSwD(-ҜqLL3HB

{Iv2benp&fbЪ*HQ(O#*hrp?zВ	cR=HD$
FV"-0GInBJ.|RX:LPiqz⾇kCv=92-Fa\=í31T5^'2z.7;-C:vh+v%uke;HZIHmՏ`F(NC/펬:|BFX}
KAg$w-!u䔰B`w8_Q	>>LC<.t= CRR!lb[dCAGcJ)7qqnuJ|PK
    TPYc  
  +   javax/activation/ActivationDataFlavor.classVrU]3N&3$$P!!K2PʄH"
^&4%W}'URV~?akt:}k?gp1^؁LrRdYf18et7UgHha>akh8{mU
eU]),zS]9f )g/]K}FA<gMyNZ(4uQQ׮UO]*°cu;ǝ0ptlfn5ӵevq|rvdW+y:"ʸw!y3SseVsIv	ѱ2N/zAQjN
t^1ˮLTght.(n?OE6$r¾PeBWXf<WUmTENr(z7*0+`[alD3[r썒*jF6+՚[QeCɎ9{2~[.)Ս0~wyUnPg/lb2aJ.nɞsduBR؇)П9
`\ppj
XXJu݃-4_jrXa"1ddN`/cJ
L&.pζ>7>dt֒r-h#ڱ'qz-Um啮?f"䗺8LiOtJ{	~)}}l6?#k|S,qYڲyэAtpBMD)Gi<c9G BO'a~PqHDˮu. oVŷ	F.xOSB!qMĢ]OtA1H2 7ZK)5&!I]FC|<1=F",dL
ů-o%#

0Cis[ǑHxg9w>AkI>_}UX. ~X]t~n)+Xq6.v~v\}@ BfCkfbc|#Fѓ):vpDXIb14ڹH=O^?WZ<`apOdq$d|$?4bc4uu0
M%o۟Mi &i9=k}p<yXE5_Men#xANPK
    TPn    (   javax/activation/SecuritySupport$2.classRj1=%l]-Md1Y(RMKpZ՚ZHZC?U:R1C"F3gH?%.|,౏u<ᩇ&C}̳fʰ9cd\
E)>+3ph/Jwх#^'#X{B)ώ֟kXRB;ZAnQ&<5r̍Ui-G\sWեbXZ3J{'"53yS^cv,Wit}XR hymxaryu[.TLrOZI@wS2L'Sasp gQK P5*Zޑmp8GЊA?N_CѰ
\:7h*0>?QCZ-
FÕ}e&eYd-grԾqp[4kM"b +	ÍPK
    TP.O
  {&  "   javax/activation/DataHandler.classYy`y}+t8l1 	@+.qleū]ywNI8m;vHV:X2!иMtӐ9Z78MߛAy $l?[.:}[-Qw=|_-?P˿jZ~'._]7]O?jyS-?st\[.j~VTqa>U,\W..E\X$Z8\X(Ndd5'%,ťNs\b\u>(䫥@-R"+
%2KR*]RkRK]ROAi.]pmRE4fIy%7Uź,ѥM,]/D"zv^xD`[gsCt&g

LĶ'xmyGW{bȗ
3*;ю'#3qPƀh(L[=ǢmJh¦rcq
F~|aACzkΎMC:
ofGQVkAtqZ48;BD}=Ã}^i	շ}Sd
jZ8ٳpۂmԠ/ڶkG400R`\i3ǳi)ĲN am	c
eRH]tycP[u{
ђeqm!_h
?(X
3?H2Ei9\
ǽ!,Aca6ƱR*"_ ]J
sQ	]nf͓$>-&p,%ƦYes?9<4+QS?slΆcV .d+gvr*鲒ItӼIf[Gna_
H!kbLG+8c|} @r%2Q1MDR[yJ$$>O0lJi 土غC~)aN[Rvܢ*F]N&6ESI!+
ܽ*Dʨ
Fc PS]Ub's]kՅ#餎):IޤL5c;|d֮XGVĆ<'9DZz}HҥKG@rKJ	2nLgh43j%/Q<8hk 
܅
P|0pH-7pD-*&X9IHDRte!!TJa}xxUx2`$V:Zq2&}WyPUs]
QbVN
Jb$&!JrF4<̦8SO%:2QaMCe)č:(;
0`l6ĭc>cY>ينl7 2PN4NW-&~Y٭CJ!d.wr8 gIP{Bэ`Đ{ţb#Ui<EjJ^β&4emNT83d@rLS];fixJm?b35&<D͢&}b$c:f1Z^dTIJQZI]3V4Ͼr9]8d
=p evNG8MgOZH4AQ:TrTBbeb P2d)w*zxeD0i͌M|+dOY2P78D	*w8ń=K9-2L"gL%
6Y̲"Փ0bnݬєTrHa)v[J[rb(1y'Ow&&˓V/c:
n*b
,	o+a^L3?/%wͯ5*R3y=5؃>x{o͝=j7;|s?b.5߃4K'!׸ohY^S-j"jl>%dsZ\jE\^6لFWXlFÝ(fT؎&
**u;Rb[B!a<1-qp]knU_\C7 ?vJEՖtq68)]<`ksgm#eS!?.
ת׃?@^Yd^F_F(9E> d?bR6,{MXQ|s؄SlTO+(qT8*Pfը9\"O)gP&1ObJ/P\dSd/cam4Q/hy86څ$IK$!|d|cK$/NI bPĊ8GhbwԜ(Gi1vP1ʋ_FՓhi}Uc ^3<j[jy:Ѱ:<gQ_buX41ft$܌ߤbt^rAGw}Kf?K~b7X~J<.<)N_dR2YU[AF݇1>!r6Q|TF-u<z
u\(a]+x߲u񥬞ݭڷy
9-E1,1,rVgXҌ#oyȚshs4YRUdɼ*nv#[*+(:K=dVH#n&y-xfllV%q`>~:8MބO	r³eP/$>e&5*~Ypأiϧ߆KbSLm[&d-U~KpQQvgLseYdF	͓Ѭ1,+BU2 w%(err-2$d{p|$sravhZ+'|a\|~rrs㨒|IPgVՓj,#cSfJ5w댝wCA$ WrJF&S($58\c&?2xV=`"ps[0agNre]~	%2
9Ļ2λEߎSz#'6*\Yq7ݢên_eF-uq8:my]%owugl^G졢Ub1[g}"7g4[Im/r2W0egUƬQ@Sk
i5HRmġ haV52A2,h*3gOceNshỉZ94NYZGր2m*^5ųɊ2ΙYl/gױokgUPGW:xAWPkM3IK2Ufu/;Q-3g+3ﺂbύ}d_.\AŪbǝun^aLR^]}
Q}c	U[uc }#h#_kGAvVM&,6c֍unm+zmKG^D]xPۃk{v7NjvhIQzv
/ǣ4YsRǥ94W
7}n5Q٠rA[!CA\mvjd(:HBFABX<t3[2vWx2nKAüe*M*ߒ-Jsc{_q2z[.kE=L;;EF14TqTYNa=LC>,(J(מ`<F>AuGI,>⏞jΪ4]_3_4_mWwOJyYO=	d#`MR);iet?uWE@>G~j?)H"XdbPK
    TPN:    (   javax/activation/SecuritySupport$4.classT]S@=[%@EPPE҂?Q(ڂC?%݁h0ɶ_|Ugtx'O|QouXf=ܳ7O F1
8G8`q[ĉh8ق8
 Ysc9.04;d>ea[*p1qCƤ_əRqQĢ|["pjPN`N{&]4%l唅r|K8j-_ZY50JZЙQ2D*Z,.C[eɓʺ=0+3$*r\+]5W*@ZH**ia+Yk^	iNj89.2~)عE2!j/p\21&:D'&v3b-q%eLL᪉k%jUu7@f~85=YJTÞ
YVPXZ7L&,]!nxꢺ3%k9jǩsʿ!ujo/
2`Hgo/02ʢT3xrUUoکgR'N3pfH&İ>%Qљ'(S1oRo{1hl"p4zGНa/z+ЍYK{ƙM$G6}4|16aÝ_7gx#
ofќ['K-UH8
QMΣw]X<PxDtuk+	߆}i,w;p8Ho"(g d!z&a`z/sNr!B1LU'PK
    TPD  *  /   javax/activation/ObjectDataContentHandler.classVWWmb\AFAn-6.a7&>}/Up,}i?3w׈$hrܹ3{~#}8;<&Sif/hW:LSah0F;X=~ ၆0-P~m0Y.,
Ktx%)/Ys-,Lf2y3d÷V U]it3ӋVΣ5{͚}Z_J[rIyٮ#g9ބjb;wMԎzD
Q7O;&mǺWY[JbAbvsfa,(Uo&n /[脂SFle6 yЈ7U3{4e*1>1RYFEha(O~0'90!|FYWU5xŊGZ\#c

sKIF;l|mAt@7Hq:u|A'qJg8 1[YӱGs\бGrXtKw*\7p^PnVݛ5vS杞
l$v`,Ppxw][\Yؒ[MݙAL:6t<SF@ooDg']A-ww 6nY;Y*.uʽ:xj=y|4iGUVA<w$61>YƘ[
2]fh9yFu"y6
=N?^U!>yVIIGOJ:$[.$CU}-(	B<++$BO=CP h)DDGD4d="ӀqdESH 
dHUK%ZHqA}u?_(_߸>B$5ZPj8PYF[&jHpؖ-x(MܠloOÈi<t~TҝD)0ɗ QuH~D8[Łghc4ϷўMnM
CR%s<b>EVƏklq$4.c""_dq
>0f
jaZs.]AR
OO3Ulb.':=Utmb4gFw6C#UD{(7ѿ#mdp*qHTѻ7/jK2bzц!VpIZk
+LD\`Tv]KΖ}iHpĨ^ɧJvmIPK
    TPڀw  f  &   javax/activation/SecuritySupport.classV]SF=kT$h>JG&IZ&-)Na$(5G2S%d♖NJ{=ޕ?/ xc5,HᡎGxቆgkV4T4|#E
?hx#~14,iYXr-6Lߗ@sԚ@zݔUۑZ;{mn4hX3=[=tmzkL+wvR]Z-[ͦe-,N 0y57'0Q
K
*%s1w[%+~=#x<0v1햖f+b	)H;>c޵rKnV,Ş%j-|,1wBYNd}l2@e$j{Wߣ"#қ*ة0UȝD~u)U>>MہG>X0K[iqXgU0>:n*O=JJb=JgXIZ&s*gΫz?kɳ<G6JRT,vs
%#0_<cy}
5ogw\"5iINL5W&qdxkOs\?IK~tKwF˸uWUp7rm0C"B}#\HcTWmd֧g}C/Ͼ0Q]$	`0
Op7BR[!	bŊF)ӴĚ&RTN6o#Rʅ
w
Z`#2X3_b0_>7DyJ1rqa5mשv7pp_K>)ݿavMzm(tՙt9vKM|m8$v
ҩqJ:5-Xq'xzPK
    TP%S      0   javax/activation/DataContentHandlerFactory.class;o>NvvvFĒTĒDԼļ"FK
ĲDļt̼tkMP~brIfYbIf~>VkFҢT̜TF9L%n@*@12ha(T# QIY%lL b1I&6 PK
    TPz       javax/activation/MimeType.classWsTW~Nv774	
n`+B!4@jBBR)P$f7ݽB~~|XeS:Sq;Tgj}ι7e0ɞ{{q޳M[0SSAlNB)f˗B,GxЇ5<Qƙ2|UV'rxJOK3ró3y9e[*Gξ<#p99/\}I1%9PK^(N[SFiS1cFr">lv-=,1ef:#Тƍ1ۚ1l+XS9Du{RɌm$Q#%fiN_K먀'5N~+iN3#Ʊ3FڒoOZҰ<Zm+iJK
۠_c#"ۗpcG]ƴb@eFf/9n
>9VL75-P)p>7KXBzruo)[WY`COR%'+Tj)GUHFt{lR`MJl{2js9|*mf,%jw;aكY{:k\RY[:6EUH} AB7v̗K$=(
ʌNɞI1H?=eexq"ۗoT6=fI	/,-؎b	kL1Q=.9pk3[ǽ1^1	~ʳtq`DʎȔFLJH6K<"k?Iy"v*rJGH?k:^ǠMx:~!aWNwJi۸}RüRzYtqM]thR붅L
z_ѹm{{Б;+}ZGSDa. -ԥ+,z؉2RT69hem+W@Z=}{g[nSt![B)'4K㲚ZLW%ZWp2%ze;r,uZ
'o39.z{eD8WX`KSn6lfғoɖwWʳ:aO(9ﲝw|~ʯ&%',ڕl3j8渃Q8<%WV"҃ЮMɱkimJ܁lNJuŧM-ic7%|<# THunIzp3{]Ab-Ρ*{9tgǊmzz`aR/ڧ8n 3ТtJl=ٴC;pv/9=psTds9OӰ^C`m`lʇxU;bl.jI^I.,\@s-|XFj=2o0t	i6-:1JkQ=4ѷc/IP1ǰ~hE2̢epG`b0b _QKQ8'q/`1`MdG/8cV%,6bW9id>FD%5=Uq>e7^yK \-\<lj3(ǳ='9\[{]BQB/_q7$x~ˤ_!Wgy)BkE`u9;fʱV\PY۔ϳ+8Png
)V-z
oϻ!T}C]2V͉{gzh<M<5p{aTcu1,`TqQA]G%iv	GǛsX{$`ht;rvi9}WU\fB'/yU~Z{>j2]n·շK(^GݢR0aÕEn7p1)kh(BE !QJyTTa}qH1[
QbGxCϡr:bY271;'|b%#,VBFhWs8+44bpd@CXWJ14/nj\F]}壗PYҩb,y
I^	P(Y͜_!.|cw4uΦK؝wkS]9scM}'QDAoJ8Qla*6[iqRllrxH%IVAuU~?F!*PK
    TP?v+  V  )   javax/activation/DataContentHandler.classN@ƿJbIXMO*ĄZVRRv
<2N""qn~|_
@.j.=LbՎ()k<
Hj~_J\o]P]@zM_qfj#e~i$I.M]컨ذ6L8?ېu/&\x648XV/ƃDٴHr"؍2HӼp2O)pz&͒$ΗDi@(!?CX#:]en`SX[s6v]PPK
    TPU(    $   javax/activation/URLDataSource.class}S]OA=ӯ-B$& 1nB۔-㓯(&>(얲j6;ssΜ; P.NSV`wØ{rrxࡂG
zEi9Ss^)Y)0ضgL/نe2+hD/䭷@hF׷
#U*;Zݐf0`3F#MHfk[V^ISmu~_ci2v+Ymu,/HDg7i{JZaWX@!V]fa3]תl'츤פLjna{
=iy2#YǭOT	,WE
U,mHTn)xbTjjlݞ:tXưXE^n	T~a>/_5(p;뗒WEX5ݼhC<jw܎F$yS]vv;?dr1@^;@2"#'&˯ONU?~9(0F1pz*|I>]j|`(f>g)@TNgŕb>"($?0"ԵSSX(i*1~
׉8U_H*]U#MkɝuaWdeDȉpU7	/h8:w]Po _&R̚zS׳艐,~Oʈ`وjzX'#NoA)<x)'+PK
    TP    $   javax/activation/DataHandler$1.classTkOA=Cey"B<
(Ф`x!|#,fI"D춖&h4{ܙgνs߮>kB3!"X-
a#F5$4i>۔/пv IBy$]ӶҕIrH+Vάd@0k3R97s\GCrldL7Use2Z~!&hX3-;UζMsy6dzG:&^e)'٬bSfd5Ern]f|P
-;ji,IIo2vִ֕o4<y˓:Ь:Ш#.Sxc3Ŝyn҉2WHyd䧥=PLYV=}>vSUhxi%bHREc?Q )a]08vLWm<n%ЎWBMY"|O/_-
 }K|">|hD;mЂ{#W׉%1=ԗsC|DeU>AG)"k|8Űaz1n=C%{яv"F8uigIsy ~0yטd<̺b5/ž, 4Κ$Wy}N4!8Yyt:8
q-w PK
    TP]@t         module-info.classMMA0*>x<
(#|mlvf^?ɶNA ʴ-VTcў(bNXcIrVZ%JtL	Y̌C|fv^,U6Д77k} P#f:k`bޠgNUPK
     TP               META-INF/maven/PK
     TP            "   META-INF/maven/com.sun.activation/PK
     TP            5   META-INF/maven/com.sun.activation/jakarta.activation/PK
    NTPrd  
  <   META-INF/maven/com.sun.activation/jakarta.activation/pom.xmlio6+8Tv[*겤Zkd[(hHFR}L_Y;	ww1{lj4'BRNd4Dlv2Ϟt/AM~gtV)C#GEMfeJ"<ҚbEdN6DIX7|&p@JQlA
 Q8cZ	XI1OEM[I9JIOtI 8Ox-*ZTLXȪjtX$JJEdJ:GI[Οw*N)I|VN  oI'Cs⢲:޾I&#AdHCx8wo.1eRaV&4K^`e?
(
BEh Q07!Z(AWeיEF}zaQp]gip|&YVWꕙSKRYd_d,wpkġ m\hѢnH
B 8ibS%d wCmf*I`
Bh|5PlIns놪ڋ]
v	Ѧ-MPfEۂ~E-jy6}0=qϏ-verF=ۆeSI7t
MhM䊚,+}}r(`IJ*> >&gtUM:Zr;Q5s}.EgVЭGhcINѫ)z 3Φt0:,Re
jdbub,1.(}mt(#KR!zD-LqW+/,Kiiq3_QDg[7?">ғӐ)QE%¬f|G%oکgȢ읎1t
P-(H$Jy[Ɋ/vc
጖:b-ϙFK 
RRs~!7;2NS}qL%KsD;H;6
Z(~;;PUi-os
:"enV-/>vv8_%>6%}ɶWS^wBжgvӫWno[xz!- d5T,}E =,ɀqEJܴBV*#Bwvb(Qo{Ԅ+zv~zs~G;ȿ:.8<M6'!w%O~p#>%J5),fD?*sH<|4Qorm +dipnפ'])VVl
φp\uk+g`uvJC,a30=z*u*!"0T :55e 5^LM\%\8F(xM4xa8m1So.<}^~Kӱe\
-\P9	
Ӗ^Rv6KgVhGS׭g^K½mm[+1C3_BzܘvnZ=L=
!lPK
    TP~h   y   C   META-INF/maven/com.sun.activation/jakarta.activation/pom.propertiesMɱ@0OqJ6/p8h&ލ?_#K-00`"+q:UEY+0u.6/.D+q&a0
l,D6JjPK
     TP            	          A    META-INF/PK
    TP               '   META-INF/MANIFEST.MFPK
     TP                      A^  com/PK
     TP                      A  com/sun/PK
     TP                      A  com/sun/activation/PK
     TP                      A  com/sun/activation/viewers/PK
     TP                      A  com/sun/activation/registries/PK
     TP                      AL  javax/PK
     TP                      Ap  javax/activation/PK
    TP]-R5  r               META-INF/NOTICE.mdPK
    TP\ݗ)  E               META-INF/mimetypes.defaultPK
    TP}`5x2  f               META-INF/LICENSE.mdPK
    TP   $             w
  META-INF/mailcap.defaultPK
    TPb(]    2           0  com/sun/activation/viewers/ImageViewerCanvas.classPK
    TPe	BS    ,             com/sun/activation/viewers/ImageViewer.classPK
    TP  }  +             com/sun/activation/viewers/TextViewer.classPK
    TPd[	    +             com/sun/activation/viewers/TextEditor.classPK
    TP#c  	  1           #  com/sun/activation/registries/LineTokenizer.classPK
    TPQ    0           N)  com/sun/activation/registries/MimeTypeFile.classPK
    TP	e^    1           2  com/sun/activation/registries/MimeTypeEntry.classPK
    TP"%    9           4  com/sun/activation/registries/MailcapParseException.classPK
    TPYǋ+  %  /           =6  com/sun/activation/registries/MailcapFile.classPK
    TPVt  C  4           
J  com/sun/activation/registries/MailcapTokenizer.classPK
    TP?mt  K  .           R  com/sun/activation/registries/LogSupport.classPK
    TP>}    *           V  javax/activation/CommandInfo$Beans$1.classPK
    TPg+    -           X  javax/activation/MimeTypeParseException.classPK
    TPS      $           BZ  javax/activation/CommandObject.classPK
    TPߙ    *           9[  javax/activation/MailcapCommandMap$1.classPK
    TP$=|  	  3           ^  javax/activation/DataSourceDataContentHandler.classPK
    TP&-  r  %           b  javax/activation/FileDataSource.classPK
    TP3    !           f  javax/activation/CommandMap.classPK
    TP    (           ?k  javax/activation/SecuritySupport$5.classPK
    TPjgD    "           Em  javax/activation/CommandInfo.classPK
    TP@Լ1
  
  ,           p  javax/activation/MimeTypeParameterList.classPK
    TPa    (           D{  javax/activation/SecuritySupport$3.classPK
    TPԈ    -           ~  javax/activation/MimetypesFileTypeMap$1.classPK
    TPVv     3             javax/activation/UnsupportedDataTypeException.classPK
    TP&.r  
  (           /  javax/activation/CommandInfo$Beans.classPK
    TPc    "             javax/activation/FileTypeMap.classPK
    TP]M=
  I  +             javax/activation/MimetypesFileTypeMap.classPK
    TP/    ,             javax/activation/DataHandlerDataSource.classPK
    TP~'   Z  !           8  javax/activation/DataSource.classPK
    TP#{  0  (           T  javax/activation/MailcapCommandMap.classPK
    TP-(  F  (             javax/activation/SecuritySupport$1.classPK
    TPYc  
  +             javax/activation/ActivationDataFlavor.classPK
    TPn    (           ½  javax/activation/SecuritySupport$2.classPK
    TP.O
  {&  "             javax/activation/DataHandler.classPK
    TPN:    (             javax/activation/SecuritySupport$4.classPK
    TPD  *  /             javax/activation/ObjectDataContentHandler.classPK
    TPڀw  f  &             javax/activation/SecuritySupport.classPK
    TP%S      0             javax/activation/DataContentHandlerFactory.classPK
    TPz                 javax/activation/MimeType.classPK
    TP?v+  V  )             javax/activation/DataContentHandler.classPK
    TPU(    $           )  javax/activation/URLDataSource.classPK
    TP    $           g  javax/activation/DataHandler$1.classPK
    TP]@t                 v  module-info.classPK
     TP                      I  META-INF/maven/PK
     TP            "          v  META-INF/maven/com.sun.activation/PK
     TP            5            META-INF/maven/com.sun.activation/jakarta.activation/PK
    NTPrd  
  <           	  META-INF/maven/com.sun.activation/jakarta.activation/pom.xmlPK
    TP~h   y   C             META-INF/maven/com.sun.activation/jakarta.activation/pom.propertiesPK    = =       //
//  ---------
// |.##> <##.|  CardContact Software & System Consulting
// |#       #|  32429 Minden, Germany (www.cardcontact.de)
// |#       #|  Copyright (c) 1999-2006. All rights reserved
// |'##> <##'|  See file COPYING for details on licensing
//  ---------
//
// Setup runtime environment
//

//
// Shortcut to reset card and display atr
//
function reset() {
        card = new Card(_scsh3.reader);

        var atr = card.reset(Card.RESET_COLD);
        print(atr.toByteString());
        return atr;
}


//
// Shortcut to exchange APDU with card
//
function apdu(data) {
        if (typeof(card) == "undefined")
                card = new Card(_scsh3.reader);

        var res = card.plainApdu(new ByteString(data, HEX));
        if (card.SW != 0x9000) {
                print("Card error SW1/SW2=" + card.SW.toString(16) + " - " + card.SWMSG);
        }
        return res;
}


//
// Determine platform id
//
// 1 - SCSH3 command line and ScriptRunner
// 2 - GUI Shell
// 3 - Eclipse Plug-in
// 4 - ScriptingServer
//
function getPlatformID() {
	var sysid = GPSystem.getSystemID();
	sysid = sysid.toString(OID).split(".");
	sysid = parseInt(sysid[sysid.length - 5]);
	return sysid;
}



//
// Minimal assert() function
//
function assert(condition, message) {
	if (!condition) {
		if (!message) {
			message = "Assertion failed";
		} else {
			message = "Assertion failed - " + message;
		}
		throw new GPError("shell", GPError.USER_DEFINED, 0, message);
	}
}


//
// Function used by scripts to define minimum version requirements
//
function requires(version) {
	var s = version.split(".");
	assert(s.length >= 1);

	var reqmajor = parseInt(s[0]);
	var reqminor = (s.length >= 2) ? parseInt(s[1]) : 0;
	var reqbuild = (s.length >= 3) ? parseInt(s[2]) : 0;

	var id = GPSystem.getSystemID();
	var s = id.toString(OID).split(".");

	var major = parseInt(s[s.length - 4]);
	var minor = parseInt(s[s.length - 3]);
	var build = parseInt(s[s.length - 2]);

	if ((major < reqmajor) ||
	    ((major == reqmajor) && (minor < reqminor)) ||
	    ((major == reqmajor) && (minor == reqminor) && (build < reqbuild))) {
		print("This script uses features only available in version " + version + " or later.");
		print("It may not run as expected, please update to a more current version.");
		GPSystem.wait(1500);
	}
}



//
// Even shorter shortcuts
//
function r()     { return reset(); };
function a(data) { return apdu(data); };
function q()     { quit(); };



//
// Display help to user
//
function help() {
        print("q | quit                 Quit shell");
        print("r | reset                Reset card in reader");
        print("a | apdu(string)         Send APDU to card");
        print("print(string, ..)        Print string(s)");
        print("load(file)               Load and execute file");
        print("assert(expression, ..)   Assert that expressions are all true");
        print("defineClass(file)        Load Java class defining native objects");
        print("restart                  Restart shell (clears all variables)\n");
        print("or any other valid ECMAScript expression.");
        print("See doc/index.html for the complete documentation.\n");
        print("If this is the first time you use the Smart Card Shell and you want");
        print("to try it out, then insert a card into your reader and enter");
        print(" load(\"tools/explore.js\")");
}


// All GP classes report errors through GPError
defineClass("de.cardcontact.scdp.engine.Shell");
defineClass("de.cardcontact.scdp.gp.GPError");
defineClass("de.cardcontact.scdp.gp.GPSystem");
defineClass("de.cardcontact.scdp.gp.ByteString");
defineClass("de.cardcontact.scdp.gp.GPByteBuffer");
defineClass("de.cardcontact.scdp.gp.GPAtr");
defineClass("de.cardcontact.scdp.gp.Card");
defineClass("de.cardcontact.scdp.gp.GPKey");
defineClass("de.cardcontact.scdp.gp.GPCrypto");
defineClass("de.cardcontact.scdp.gp.GPXML");
defineClass("de.cardcontact.scdp.gp.GPTLV");
defineClass("de.cardcontact.scdp.gp.GPTLVList");
defineClass("de.cardcontact.scdp.gp.Application");
defineClass("de.cardcontact.scdp.gp.GPApplication");
defineClass("de.cardcontact.scdp.gp.GPSecurityDomain");
defineClass("de.cardcontact.scdp.gp.GPSecureChannel");
defineClass("de.cardcontact.scdp.gp.GPScpKeySet");
defineClass("de.cardcontact.scdp.gp.GPScp02");
defineClass("de.cardcontact.scdp.gp.GPScp03");
defineClass("de.cardcontact.scdp.gp.ApplicationFactory");
defineClass("de.cardcontact.scdp.js.JsX509");
defineClass("de.cardcontact.scdp.js.JsCRL");
defineClass("de.cardcontact.scdp.xmldsig.JsXMLSignature");
defineClass("de.cardcontact.scdp.js.JsASN1");
defineClass("de.cardcontact.scdp.js.JsKeyStore");
defineClass("de.cardcontact.scdp.js.JsCardFile");
defineClass("de.cardcontact.scdp.js.JsIsoSecureChannel");
defineClass("de.cardcontact.scdp.js.JsOCSPQuery");
defineClass("de.cardcontact.scdp.js.JsLDAP");
defineClass("de.cardcontact.scdp.js.JsSOAPConnection");
defineClass("de.cardcontact.scdp.js.JsURLConnection");
defineClass("de.cardcontact.scdp.js.JsTLSSocket");
defineClass("de.cardcontact.scdp.cms.JsCMSSignedData");
defineClass("de.cardcontact.scdp.cms.JsCMSEnvelopedData");
defineClass("de.cardcontact.scdp.cms.JsCMSGenerator");
defineClass("de.cardcontact.scdp.pkcs11.JsPKCS11Provider");
defineClass("de.cardcontact.scdp.pkcs11.JsPKCS11Session");
defineClass("de.cardcontact.scdp.pkcs11.JsPKCS11Object");
defineClass("de.cardcontact.scdp.js.JsScript");
defineClass("de.cardcontact.scdp.cardsim.JsCardSimulationAdapter");
defineClass("de.cardcontact.scdp.sss.JsShamirSharedSecret");

if (GPSystem.mapFilename("scsh/oid/oid.js")) {
	load("scsh/oid/oid.js");
}

switch(getPlatformID()) {
	case 1:
		defineClass("de.cardcontact.scdp.js.JsTask");
		break;
	case 2:
		defineClass("de.cardcontact.scdp.scsh3.OutlineNode");
		defineClass("de.cardcontact.scdp.scsh3.Dialog");
		defineClass("de.cardcontact.scdp.scsh3.AccessTerminal");
		defineClass("de.cardcontact.scdp.scsh3.Task");
		break;
}


// Load persistent settings which defines the _scsh3 object

var filename = GPSystem.mapFilename(".settings.js", GPSystem.AUTO);

if (filename) {
        if (filename.equals(GPSystem.mapFilename(".settings.js", GPSystem.SYS))) {
                GPSystem.trace(GPSystem.mapFilename(".settings.js", GPSystem.SYS));
                GPSystem.trace("Warning: File .settings.js found in installation directory !");
                GPSystem.trace("This happens, when you selected the installation directory as");
                GPSystem.trace("user directory and saved settings to the .settings.js file.");
                GPSystem.trace("In this case, the .settings.js file in the installation");
                GPSystem.trace("directory takes precendence over any other .settings.js.");
                GPSystem.trace("You should remove the .settings.js file and create/use your own");
                GPSystem.trace("user directory rather than the installation directory.");
        }
        load(filename);
} else {
        var _scsh3 = new Object();
}

_scsh3.setProperty = function(property, value) {
        this[property] = value;
        var filename = GPSystem.mapFilename(".settings.js", GPSystem.AUTO);
        if (!filename) {
                filename = GPSystem.mapFilename(".settings.js", GPSystem.USR);
        }
        var cf = new java.io.FileWriter(filename);
        cf.write("//\n");
        cf.write("// Automatically generated file - Do not change\n");
        cf.write("//\n");
        cf.write("var _scsh3 = new Object();\n");
        for (i in this) {
                if (!(this[i] instanceof Function)) {
                        cf.write("_scsh3[\"" + i + "\"] = \"" + this[i] + "\";\n");
                }
        }
        cf.close();
}
To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/9.3.1/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation.
Daemon will be stopped at the end of the build 

> Configure project :
Version org.openscdp:scsh:3.18.77
Unpacking /var/www/jenkins/shared/org.openscdp/scsh-mods/1.0.183/fss/scsh-mods.tgz

> Task :clean

> Task :dependencies

------------------------------------------------------------
Root project 'scsh'
------------------------------------------------------------

runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.openscdp:scdp4j:latest.integration -> 3.18.110
|    +--- org.openscdp:ocf-core:2.0.115
|    |    \--- net.java.dev.jna:jna:5.19.1
|    +--- org.openscdp:sc-hsm-provider:2.0.93
|    |    +--- org.slf4j:slf4j-api:2.0.9
|    |    \--- org.openscdp:ocf-core:latest.integration -> 2.0.115 (*)
|    +--- org.openscdp:opensc-java:0.4.18
|    |    \--- commons-logging:commons-logging-api:1.1
|    +--- com.sun.xml.messaging.saaj:saaj-impl:1.5.3
|    |    +--- jakarta.xml.soap:jakarta.xml.soap-api:1.4.2
|    |    +--- org.jvnet.staxex:stax-ex:1.8.3
|    |    \--- com.sun.activation:jakarta.activation:1.2.2
|    +--- org.bouncycastle:bcprov-jdk18on:1.83
|    +--- org.bouncycastle:bcpkix-jdk18on:1.83
|    |    \--- org.bouncycastle:bcutil-jdk18on:1.83
|    |         \--- org.bouncycastle:bcprov-jdk18on:1.83
|    +--- org.mozilla:rhino:1.9.1
|    \--- org.mozilla:rhino-xml:1.9.1
|         \--- org.mozilla:rhino:1.9.1
+--- org.openscdp:ocf-core:latest.integration -> 2.0.115 (*)
+--- org.openscdp:ocf-ui:latest.integration -> 2.0.115
|    \--- org.openscdp:ocf-core:2.0.115 (*)
+--- org.openscdp:ocf-daemon:latest.integration -> 2.0.115
|    \--- org.openscdp:ocf-core:2.0.115 (*)
\--- ch.qos.logback:logback-classic:1.4.14
     +--- ch.qos.logback:logback-core:1.4.14
     \--- org.slf4j:slf4j-api:2.0.7 -> 2.0.9

(*) - Indicates repeated occurrences of a transitive dependency subtree. Gradle expands transitive dependency subtrees only once per project; repeat occurrences only display the root of the subtree, followed by this annotation.

A web-based, searchable dependency report is available by adding the --scan option.

[Incubating] Problems report is available at: file:///var/lib/jenkins/workspace/scsh/build/reports/problems/problems-report.html

Deprecated Gradle features were used in this build, making it incompatible with Gradle 10.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/9.3.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed
Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.3.1/userguide/configuration_cache_enabling.html
#
# Configuration file for OpenCard Framework (OCF)
#

#
# OpenCard.services lists all CardServiceFactories that OCF should recognize
#
# de.cardcontact.opencard.factory.IsoCardServiceFactory         provides FileAccessCardService for ISO cards
# opencard.opt.util.PassThruCardServiceFactory                  provides transparent APDU access

OpenCard.services = de.cardcontact.opencard.factory.SmartCardHSMCardServiceFactory \
                    de.cardcontact.opencard.factory.AppletCHVCardServiceFactory \
                    de.cardcontact.opencard.factory.IsoCardServiceFactory \
                    opencard.opt.util.PassThruCardServiceFactory \
                    de.cardcontact.opencard.factory.GlobalPlatformCardServiceFactory \
                    de.cardcontact.opencard.factory.SmartCardHSMCardServiceFactory \
                    de.cardcontact.opencard.factory.RemoteClientCardServiceFactory



#
# OpenCard.terminals lists all CardTerminalFactories that OCF should recognize

# de.cardcontact.opencard.terminal.smartcardio.SmartCardIOFactory provides access to card readers via javax.smartcardio
#
# Define "SUN" as third parameter to select the native SmartCardIO in the JRE.
# Define "JNA" as third parameter to select the jnasmartcardio implementation.
# Define "JNA-EXCLUSIVE" as third parameter to use SCARD_SHARE_EXCLUSIVE to card/token access.
OpenCard.terminals = de.cardcontact.opencard.terminal.smartcardio.SmartCardIOFactory|*|SUN \
					 de.cardcontact.opencard.terminal.jcopsim.JCOPSimCardTerminalFactory|JCOPSimulation|JCOPSIM|0|localhost|8050|30000


#
# de.cardcontact.opencard.terminal.jcopsim.JCOPSimCardTerminalFactory is a card terminal
# factory that provides access to a JCOP remote terminal
#
# It can be configured using parameters appended to the class name
#
#       |<name>|<type>|<device>|<hostname>|<port>
#
#        name                   friendly name used by OCF
#        type                   Must be JCOPSIM
#        device                 Device number used by OCF
#        hostname (optional)    Name of the remote host (DEFAULT: localhost)
#        port (optional)        Port number of the remote host (DEFAULT: 8050)
#
# OpenCard.terminals = de.cardcontact.opencard.terminal.jcopsim.JCOPSimCardTerminalFactory|JCOPSimulation|JCOPSIM|0|localhost|8050|30000

#
# Use ApduIO card terminal (SUN JCWDE terminal simulator)
# It can be configured using parameters appended to the class name
#
# In order to use this driver, you must add the apduio.jar from Suns JavaCard development kit to the class path
#
#       |<name>|<type>|<device>|<hostname>|<port>
#
#        name                   friendly name used by OCF
#        type                   Must be JCWDPSIM
#        device                 Device number used by OCF
#        hostname (optional)    Name of the remote host (DEFAULT: localhost)
#        port (optional)        Port number of the remote host (DEFAULT: 9025)
# OpenCard.terminals = de.cardcontact.opencard.terminal.jcwdpsim.JCWDPSimCardTerminalFactory|JCWDPSimulation|JCWDPSIM|0|localhost|9025

#
# de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory is a card terminal
# factory that provides a CT-API bridge. It requires ctapi-jni shared object or DLL in the library path.
#
# It can be configured using parameters appended to the class name
#
#       |<name>|<type>|<device>|<libname>
#
#        name           friendly name used by OCF
#        type           Must be AUTO, CTAPI or CTAPIKBD. Use the postfix -NOPOLL to disable polling
#        device         Port number used in CT_INIT()
#        libname        Name of DLL or shared object (without .dll, .so or lib...)
#
# When the type CTAPIKBD is defined, then the terminal implements the PERFORM VERIFICATION
# function that enables input of PIN codes on the card reader rather than on the screen
#
# AUTO uses device enumeration via CT_list() which is a proprietary extension only available in the
# CT-API module provides by the sc-hsm-embedded project (https://github.com/CardContact/sc-hsm-embedded)
#
#OpenCard.terminals = de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|SCHSM|AUTO|0|ctccid

# ORGA ECO 5000 with CardContact ECO5000 driver
#OpenCard.terminals = de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|ECO5000|CTAPI|1|cteco5000

# ORGA MCT 5000
#OpenCard.terminals = de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|MCT|CTAPIKBD-NOPOLL|1|ctorg32

# Reiner SCT CT-API Driver
#OpenCard.terminals = de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|REINERSCT|CTAPIKBD|1|ctrsct32 \

# G+D ICT800 STD
#OpenCard.terminals = de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|ICT800|CTAPIKBD|1|ctapiw32

#ACG HFDualIsoRFID on COM4
#OpenCard.terminals = de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|ACGDUAL|CTAPI|3|ctacgdual

# Gemplus GCR700
#OpenCard.terminals = de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|GCR700|CTAPIKBD|1|ctgemw32

#
# Debugging can be enabled for individual modules
#
# EMERGENCY - System is unusable; numeric value is 0
# ALERT - Action must be taken immediately; numeric value is 1
# CRITICAL - Critical condition; numeric value is 2
# ERROR - Error condition; numeric value is 3
# WARNING - Warning condition; numeric value is 4
# NOTICE - Normal but significant condition; numeric value is 5
# INFO - Informational; numeric value is 6
# DEBUG - Debugging information; numeric value is 7
# LOWEST - Even more details; numeric value is 8
#

# For a full trace, enable this
# OpenCard.trace = opencard:8 de.cardcontact:8

# If you want to see APDU exchanged between terminal and card, enable this
#OpenCard.trace = opencard.core.service.CardChannel:8 de.cardcontact.opencard.service.isocard.IsoCardSelector:8
#!/bin/sh

echo $0
INSTALLDIR=$(dirname $0)
WORKSPACE=`pwd`
cd ${INSTALLDIR}

java -classpath 'lib/*' -Dorg.bouncycastle.asn1.allow_unsafe_integer=true -Djava.library.path=./lib -Dscdp.workspace=${WORKSPACE} de.cardcontact.scdp.engine.ScriptRunner $*

RC=$?
cd ${WORKSPACE}
exit ${RC}
@echo off
setlocal ENABLEDELAYEDEXPANSION
set userdir=%CD%
cd /d %~dp0
if defined CLASSPATH (set CLASSPATH=%CLASSPATH%;./bin) else (set CLASSPATH=./bin)
FOR /R .\lib %%G IN (*.jar) DO set CLASSPATH=!CLASSPATH!;%%G
Echo The Classpath definition is %CLASSPATH%
if exist jre (set JAVA=jre\bin\java) else (set JAVA=java)
Echo Starting %JAVA%
%JAVA% -Xmx1024m -Dsun.security.smartcardio.t1GetResponse=false -Dorg.bouncycastle.asn1.allow_unsafe_integer=true -Djava.library.path=./lib -Dscdp.workspace=%userdir% de.cardcontact.scdp.engine.ScriptRunner %*
#!/bin/sh
java -Dsun.security.smartcardio.t1GetResponse=false -Dorg.bouncycastle.asn1.allow_unsafe_integer=true -Djava.library.path=./lib -classpath 'lib/*' de.cardcontact.scdp.engine.CommandProcessor
@echo off
setlocal ENABLEDELAYEDEXPANSION
set userdir=%CD%
cd /d %~dp0
if defined CLASSPATH (set CLASSPATH=%CLASSPATH%;./bin) else (set CLASSPATH=./bin)
FOR /R .\lib %%G IN (*.jar) DO set CLASSPATH=!CLASSPATH!;%%G
Echo The Classpath definition is %CLASSPATH%
if exist jre (set JAVA=jre\bin\java) else (set JAVA=java)
Echo Starting %JAVA%
%JAVA% -Xmx1024m -Dsun.security.smartcardio.t1GetResponse=false -Dorg.bouncycastle.asn1.allow_unsafe_integer=true -Djava.library.path=./lib de.cardcontact.scdp.engine.CommandProcessor
#!/bin/sh
cd $(dirname $0)

# If no card reader can be found, then most likely the Java runtime does not find the PCSC client library.
# You will then need to find the folder containing PCSC on MacOSX or libpcsclite.so on Linux and specify
# that path in the Java system property sun.security.smartcardio.library
#
# Examples are
#  -Dsun.security.smartcardio.library=/System/Library/Frameworks/PCSC.framework/Versions/Current/PCSC
#  -Dsun.security.smartcardio.library=lib/x86_64-linux-gnu/libpcsclite.so
#
# If you are using a HDPI Display and the Smart Card Shell appears to small, then try adding
#  -Dsun.java2d.uiScale=2
# to scale the display by 2. The value must be an integer.
#
java -Dsun.security.smartcardio.t1GetResponse=false -Dorg.bouncycastle.asn1.allow_unsafe_integer=true -Djava.library.path=./lib -classpath 'lib/*' de.cardcontact.scdp.scsh3.GUIShell



@echo off
setlocal ENABLEDELAYEDEXPANSION
set userdir=%CD%
cd /d %~dp0
if defined CLASSPATH (set CLASSPATH=%CLASSPATH%;./bin) else (set CLASSPATH=./bin)
FOR /R .\lib %%G IN (*.jar) DO set CLASSPATH=!CLASSPATH!;%%G
Echo The Classpath definition is %CLASSPATH%
if exist jre (set JAVAW=jre\bin\javaw) else (set JAVAW=javaw)
Echo Starting %JAVAW%
start %JAVAW% -Xmx1024m -Dsun.security.smartcardio.t1GetResponse=false -Dorg.bouncycastle.asn1.allow_unsafe_integer=true -Djava.library.path=./lib de.cardcontact.scdp.scsh3.GUIShell
           (     (                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ghcjldjmepqimqiirkhrlfrndrnbrofspkqpkqpkqpkrpkrqkrqlrqlrqlrqlsqlsrlsrmsrmsrmsrmtrmtrmtsmtsntsntsntsntsnusnusnusnutnutnutoutoutoutoutoutoutoutoutovtovtovtovtovtovtovtovtovtovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovtovtovtovtovtovtovtovtovtovtovtoutoutoutoutoutoutoutoutoutoutnutnutnutnutnusnusntsntsntsntsntsmtsmtsmtrmtrmsrmsrmsrmsrlsrlsqlsqlrqlrqlrqkrqkrpkrpkqpkqpjqpjqpjqojqofroarodqmeqmgqliqjlqhophildildfgb~}~                                                                                                                                                                                                                                                                            2GVz~{Ysuotnpjjmfjmfprknrkjrmjrmgsngsodsphspkrpkrqlrqlrqlrqlsqlsrlsrmsrmsrmtrmtrmtsmtsntsntsntsnusnusnutnutoutoutoutoutoutovtovtovtovuovuovuovupvupvupvupvupvupvupvupvupvupvupvupvupvupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupvupvupvupvupvupvupvupvupvupvupvupvupvupvupvupvupvupvuovuovuovuovuovtovtovtovtoutoutoutoutoutnutnutnusnusntsntsntsntsmtsmtsmtrmtrmsrmsrmsrlsrlsqlrqlrqlrqkrqkrpkrpkqpkqpjqpgrocrofrngrnirliqlmqjpqjjleileopiosmput}~qQ)                                                                                                                                                                                                                                                        ѵ
@debmlqhglcdjeflejqhmtgqwgowjkxnlxqlxukxxizjzf{xmvmrpoqqoqqorrprrprrprrprrpsspsspsspssqssqssqttqttqttqttqttqttrttrttruuruuruuruuruuruuruusuusuusuusuusuusuusuusuusuusvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsuusuusuusuusuusuusuusuusuusuusuuruuruuruuruuruuruuruuruurttrttrttqttqttqttqttqttqssqsspsspsspsspsspssprrprrprrprrorroqqoqqoqqoqqnqqnpplqowlue{iyxiytjwqkwmkwijwfnvfpvelsdipdelbcihflnlr}g|c                                                                                                                                                                                                                                     ̲[{fbdkpYtzconrqprpqtprvjotgkrekrelsikuniuojvthvuiv|ivgxuktlpnnppnppnppoppoppoppoppoqqoqqpqqpqqpqqpqqprrprrqrrqrrqrrqrrqrrqrrqssqssrssrssrssrssrssrssrssrssrssrttrttrttrttrttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttrttrttrttrttrttrttrttrssrssrssrssrssrssrssrssrssrssqssqssqssqrrqrrqrrqrrqrrqrrprrprrpqqpqqpqqpqqpqqoqqoppoppoppoppnppnppnppnppnoomoomoomoolpmujt~fw{huthusguniumhthjtdkrdjqfjqintoptopspoqnmqyb~pYvccjp~w@                                                                                                                                                                                                                        ƾ^ysh{^_fkkshlriputr`rr_on]rkcyog|sp{po{lozopwoqvpqupqqqporpmspurq}qr{qs{qs{qs{qs{rs|rt|rt|rt|rt|st|st}su}su}su}su}tu}tu}tu}tu~tv~tv~tv~tv~uv~uv~uv~uv~uv~uvuwuwuwuwuwuwuwuwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwuwuwuwuwuwuwuwuwuwuwuw~uv~uv~uv~uv~uv~uv~tv~tv~tv~tv~tv}tu}tu}tu}tu}su}su}su}su}su|st|st|rt|rt|rt|rt{rs{qs{qs{qs{qszqrzqrzqrzqrzpr|pqtqplronqoppotopuopwnpynozknzon{roxnfqjbnl\pp]sq^hotgkpjrekz_arn2                                                                                                                                                                                                            Xepmi}khmoloufjdhliosmoforkosnjnpelndlsenvboy`py_py\pz[qzYryYryWty^szcq|bq|br}br}cr}cr}cs~cs~ds~ds~ds~ds~dt~eteteteteteueufufufufufufufufvfvfvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvfvfvfvfvfufufufufufufueueuetetetetetetdt~ds~ds~ds~ds~ds~cs~cr}cr}cr}br}br}bq|bq|bq|aq|aq|aq|bq|\rxUsxWqxWqxZoy[oy]ox_oxamxcmuckrdklimnnrmnqjkndhmqbfktdi~knln~ifqmjvxx#                                                                                                                                                                                                Ygpppdozfvuertcpflnitnktdgo]XaUfRnJoBr=|71*)&&)*,......./////////00000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000///////////.......-----+)(&&()06<z@qInQlSeW_~en\ischsmdjmrbnsdpxetqdofnn<
                                                                                                                                                                                        MsfiffikqlsqhoriqwjwelsWjoPqmR}|HwI{LMNLD<;9889;;==>>>>>>??????@@@@@@@@@@AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAA@@@@@@@@@@@??????>>>>>>======<<;::8778:;BJMLJGzGuP|zOokUhmdkquiupgoognpiqfiiggg}o                                                                                                                                                                            N~|o]h}ltzhncnm^rmfpmmht_d}Kp6#"4In]c{kfseol\pkalkxfl{lsq`jyw헡~(                                                                                                                                                                ^gpn_dbqppngeuijfjlflrUnzLnE|EB42@CCzJlSlxekpdhjsghlecpoobfdhlk򝙙3                                                                                                                                                        ƶY|njqh[l{eWv_gp[{tk}ot_Gq,(,("!"#"" !'*'+Do]~{mryrhenYTt]jzcri\wkh잓2                                                                                                                                                `pijfd_qthjqbfn_wyo_fkOmO>1$(!   '#/<M}Lk~\ciuvldl]ho_orfic`ohkꔐ:                                                                                                                                        ^gmnZeiarl[teunei_{fj_q<!!!! !'&&&'''''''''''(((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(((((((((((((((((((((''''''''''''&&&&&&&&&%%%&     :]oycgg\slcXqb_ojZeigkl횙/                                                                                                                                    \kkmikhnnglpilrqhowRftGqG7!!!!!!!!!!!!!"""""""""""""""#####################################################################################"""""""""""""""""""!!!!!!!!!!!!!         5DEoOcrelujpoimfkkdikhhhi睝!                                                                                                                                    P}}b_euqjyr[ynd}gtT_?s1!!   /=pQ\~zdrwlawpXrnfcagwww𤨥}                                                                                                                        Yxief`xaqqcplohoMcy?x6)          '3<uJ`vlelminn`]u^khhs견	                                                                                                                "SzrklMNry^doobyDt1!                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                               
/Aql^valpw[J}KogiU~L                                                                                                        ckbsvcytpthuZrrmgb}Jo<+!!                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           )9Gkd^zooidrWplps_wlcp㜘(                                                                                                    ^x~lgqbftrnrqcqgkWiF3!! !!!               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                      1BSendh|m_oko^bpjfqxtz觯                                                                                                !_e]lpjnlnnjnsiuQg90# ""$                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                "  !.6Mdpeqjfjkhkhkgah_H                                                                                            edogfteem`srlojnubzVs3 '$%              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              #"%0Ror^wlfjoniai[bpadkf蕦#                                                                                        UUd_`vcowhmhllzGo1#%           !!!!!!!!!!!!!!!!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             #!.Ckhhwidksd\s_Rc^|𰶲}                                                                                    
r\hj\pjYw`js`ielgzI*"&"           !!!!!!!!!!!!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!             # (Dhbvd`fo\Ts[Xle`jm                                                                                VljqijjmvhmrjegnGz,!"          !!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!            )Cv`biinfhrdeffhfmﻷ                                                                            ͿgvlmnjrnknosgnqiknwK$"!          !!!!!!!!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!          !Ffisimdkobifijenykn'                                                                    \x^jfyilzmrziq\h~8(%!$ !        !!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!          !#&4~WcyvdmvhntehYfbp𸻷	                                                                    
uSni^nj~mn}ns|eqbj:%*$'!!        !!!!!!!!!!!!"""""""""""""""""""##################################################""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!         $!'#6\dx`myinzhiYjfQmg                                                                HPnd_tkzokskqgf?u' #        !!!!!!!!!!!""""""""""""""""##################################################################""""""""""""""""""""""""""""!!!!!!!!!!!!!         !$:pb`nelujfYofJi^n                                                            h|lmTwk]rhxmingnjjE(!#         !!!!!!!!!!""""""""""""""#############################################################################"""""""""""""""""""""""!!!!!!!!!!!!         !%@ddhahshcXmcNrf|il                                                        kmffotkfqgiqg_qqLv5!!&(#       !!!!!!!!!!"""""""""""""#####################################################################################""""""""""""""""""""!!!!!!!!!!!          $#0FqYkkclaalbjofkdd9                                                    NslljnfhqhkthexyM8"!')#       !!!!!!!!!""""""""""""########################$$$$$$$$$$$$$$$$$$$$$$##############################################"""""""""""""""""!!!!!!!!!!!          %#3Fz_rteobblbdh`mggz                                                    khneqsql]|tl~ov[Pv%       !!!!!!!!"""""""""""#################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$################################"""""""""""""""!!!!!!!!!!!        "JqipTnfxfVvkmkelb                                                    3elbkokqbogzpx^S&      !!!!!!!!!""""""""""###############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##########################"""""""""""""""!!!!!!!!!!        #L|irWiatk]|eie_f\½N½                                            Mdnfgmj|nogwXwxA#      !!!!!!!!""""""""""#############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$######################""""""""""""""!!!!!!!!!!        ;Pppiapwg{agd^g_~¸x¹                                            [ormgoihnk~oohxUzF$      !!!!!!!!"""""""""############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$###################"""""""""""""!!!!!!!!!         ?Pvweifncweao`icjlg                                            xhkmfpngnlxmoemu<4        !!!!!!!"""""""""###########$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#################""""""""""""!!!!!!!!!!       -;Nlnhfkvgx`gf`fg                                            :moriqqlppvmlis|>4"      !!!!!!!"""""""""##########$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$################"""""""""""!!!!!!!!!        5G^llfdcrkp^egfhhkjd_^X)                                            Pzzlmtintprvxsiav~*$#      !!!!!!!""""""""##########$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$###############"""""""""""!!!!!!!!!       +B[qeohne{fVziliobgx`k|fox`k8                                            SmktlishkomqtuslZv,%#      !!!!!!!""""""""#########$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$##############""""""""""!!!!!!!!!       !$(.:xGh~Ncscepmgodleiatm_|ghhvems_jsckpdi;                                            qjxtnxmknsqsmsnP|#       !!!!!!!""""""""########$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$############"""""""""""!!!!!!!!       ,=L{p[rXepZlo^ro_up^jp_fo]aldhflugzheiibpjasaek\ie]                                            skxskwpoppprjurP#      !!!!!!!"""""""#########$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$############""""""""""!!!!!!!!       !(/5:~@mGgxOmsSpnXpjZoh]qhjngpngjmdjmdhlbhlejfoeelccpccqedkffh                                            uixuhwuqojrp_uyG!"      !!!!!!!"""""""########$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$############"""""""""!!!!!!!!!      &:Ozuo^tZnYlZmclriyyfz`lqNplfjnrhoqimqjjpkepjeamfWkhOgoMhokblx_k                                            ulxrjusslgrkXvE#       !!!!!!"""""""########$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$###########""""""""""!!!!!!!!      &088?xIlRky\othmmhmfspkwtlsqkoiknimqkohlo_longrvesofqjimokesjahm`dka[glYfnkbns`m                                            |zxtnzrmuowfeuhPv<$      !!!!!!"""""""########$$$$$$$$$$%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$###########"""""""""!!!!!!!!      ".Emz~ph~mjln~nrznstluolukoyipwfspcojbmdfpcnvawmlbx^}]~m`xbgqpkbzl\zmY}lUiicgdllaqj`p                                            tttqmwpoukwddxiKw?%      !!!!!!"""""""#######$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$##########"""""""""!!!!!!!!      "-9AJUn\g~ppqmqunousovtqtsqspoqooqlrriooipljqomrpppnonkooepndshlwbvddu[gtikhsjbrm^sl]aif`fkoblobk                                            rtvjlulotgz^b}jEw= %     !!!!!!"""""""#######$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$########$$"""""""""!!!!!!!!       5Ljrzyniwtbs}\r~akpxkqylpvqptprnprnqslprjkrjkphkojknonmrtiuudxis_`LesYljlXiuMhw^injhhjkbkkbZigWjhsdhtcg                                            rvvplqrpspuibtpA~9"      !!!!!!""""""#######$$$$$$$$$%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$#####$! """""""""!!!!!!!!      &5AJUv`o}foxlrvqtvowtmyplxpprupruoqtppqppnoonqpmqropsopsonqnkmmjjmnjnqkqlofhu_lpgjij`fm]hofjlhggkkgljfahg]ffibekef                                            ovutmowpqvqtbmx;3!$!     !!!!!!""""""#######$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$#####$!""""""""!!!!!!!!      ';W|vpwpqtptpusztrrttmtyisyhsxrrrrrrqqqqqqqqqppppppooqqqqqqqonommlmmllmlklkkklkhllknjljkjilkijiihhhiikggigffhfffggcee                                            mtrtnovpqvssfq}>4!#      !!!!!"""""""######$$$$$$$$$%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$#####$$"! !"""""!!!!!!!!      ,@KMTqao|vt}v}~pusuutvvttvsrttprxqrxpqxrrrrrrqqqqqqqqqppppppoooooonnnnnnmmmmmmllllllpppkkkeeefffkkkkkkhhhhhhhhheeeccc___jjjwwwr                                            lrqwqrunpvqqhr}?4!#      !!!!!!""""""######$$$$$$$$$%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&'''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$####"'+&!!"""""!!!!!!!     !2L_ymkwm}qpn}qvtvuu{utrvtrvsqttqrxvqxupxrrrqqqqqqqqqqqqppppppooonnnmmmnnnmmmmmmlllmmmjjjkkkooommmhhhfffhhhgggbbb___uuu7kkk                                            mtsyrsuopqoofr|?4!#     !!!!!!""""""######$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&&&&&''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%$$$$$$$$$$$$####"%)&#!!"""""!!!!!!!     /DUan}~svtzt|uuu~t{szuv{wvrwtovtmxumwtptuvrv~ow|owrrrqqqqqqqqqppppppoooooonnnnnnnnnmmmmmmllllllggggggiiiiiieeefffdddkkk~-                                                    nsrwqrtnopppdr|@4!#      !!!!!""""""#######$$$$$$$%%%%%%%%%%%&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%$$$$$$$$$$$####"%*($"!"""""!!!!!!! "5Rnzzl|ozvsyx~z}rvotruww~xvswujxthxthwtgwtnsuzruowowrrrqqqqqqqqqppppppoooooopppooommmmmmlllllljjjppppppdddcccnnn|||6                                                            krqvpqvopqqqes|@4!#     !!!!!!""""""######$$$$$$$$%%%%%%%%%&&&&&&&&&&&&&''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%$$$$$$$$$$$#####$%$#! !""""!!!!!!!.J]akw}tz{u~x|}xxx|wwyxzztr|rt|vy|wx{vuyutyurwwnwujvujvviuunususszptzptqqqqqqqqqpppppppppoooooooooooommmmmmlllmmmnnnhhh]]]nnnI	                                                                        jrqvpqxrsuuuer}?4!#      !!!!!""""""######$$$$$$$$%%%%%%%%%&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%$$$$$$$$$$$########" !""""!!!!#7Pq{szu|{}z~swsxuy}}yx|wq}pcpf~qj~rn|plyslytnwukvvjvvjuuiuunussssxqrxqrqqqqqqqqqppppppoooooonnnoooooommmmmmkkkhhhfffz6	                                                                                    ksrvssvrrttter}>4 "    !!!!!!""""""#####$$$$$$$$%%%%%%%%%&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%$$$$$$$#"%$#""##!$+%!"""!! (Jehoxuwzy||}||~}y~|yz|xyzxwz{wx~wurzxr|srzrsxuxwvztx{sx{sxytyysyttussurvsrwtquqnqnoooqqqqqqmmmooorrrqqqnnnmmmooonnnhhhmmmtS                                                                                                ltrvssurrssser}>4 "    !!!!!""""""######$$$$$$$%%%%%%%%%&&&&&&&&&&&''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%$$$$$$$$#$$#""# "(/%!""" 2O}zx}w|w|{}||}v|v~}tz{uwy{twptqxztzsuztwxvzuvryrzqyu{~szwqusprnrootpkunltnyyypppooottttttnnnlllqqqooodddt}}}w?                                                                                                        ltrvssurrssser}>4 "     !!!!!"""""######$$$$$$$%%%%%%%%%&&&&&&&&&&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$%%$#""$ %&*$""! 6Ybczmvv}y{y{~|z}}z|z|x{v{~v{|yzzzyz{yy~xzwz}ww|vy{vz{vyztzzs{zs{yrzwqwwpwvsswsuxtryutxvowvolllrrrqqqllllllpppmmmnnniUxxx                                                                                                                ltsvssurrsssfs}>4 "     !!!!!""""""#####$$$$$$$%%%%%%%%%&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$%%####%!'&% $;Wzrzx}noko|r{t{u{yy~{y|u{uzt{sz}xz{{x{|yyxywwwwuz}u{}tz{t{zs{yszyrzyrzwqxvrrvssztrvqotpjtpiqqqooouuuttteeennndG
                                                                                                                        ltsvtturrsssfs}>4!"      !!!!!"""""######$$$$$$$%%%%%%%%&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$###$#&((+;R[bsyx~{xo~p~x}}}z|w|x{xzv{zyz|rz{m|{k|yl{xj|woywtwypxxoxxjwwiwwhvvlvvowuqsrnoorqqvttzqs{ss|uuuuulllhhhj|||f>                                                                                                                                    ltsvttvsssssfs~>4!"     !!!!!""""""#####$$$$$$$%%%%%%%%&&&&&&&&&'''''''''''''''''''(((((((((((((((((''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$###$$$"#).+'3Lk~~}}}|z{no~x}~}z|w|wzuzuzxzz{qy{j|{h{yh{xf|wlywrwxoxxmwwiwwgvvevvjvvltsnqqossxuuurrtkltjlunpgggkX!www                                                                                                                                            ltswttvssqsset~?5!"     !!!!!"""""######$$$$$$%%%%%%%%&&&&&&&&&'''''''''''''''''(((((((((((((((((((((((((''''''''''''''''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$##$$";dcat|zzx{y~}~yz{~z}|~|{{||y{{v{|v{|u|zu{zx{x}yxwxtxqyvvxxsxxsvwrtwrtvqtvqxtpzurzusztuwqrnknhmoqz~fT                                                                                                                                                    muswttvssqttet~?5!"      !!!!!"""""#####$$$$$$$%%%%%%%%&&&&&&&&'''''''''''''''((((((((((((((((((((((((((((((('''''''''''''''''''''''''&&&&&&&&&&&&&&%%%%%%%%%%%$$$$$$$$$##%$",NVa~z}}~~|z{y|w~|~~~~}~{~y|{~|{y||y{{v|}u||t{zt{yxzx}xwwxtxqyvvxxswwruwruvqtvquupyspzsrxrpuopwqrzx{eF                                                                                                                                                                nusoutsss{stnt~;1'"    !!!!!""""""#####$$$$$$%%%%%%%%&&&&&&&&''''''''''''''(((((((((((((((((((((((((((((((((((('''''''''''''''''''''''&&&&&&&&$"$(.0//#"((" !"#$&+*.:Rcijy~~~~~~~~~}}}}}}||||||{{{{{{zzzzzzyyyyyyzzzzzzxxxwwwxxxzzz{{{tttsssxxxtttmmmvvvvvvrrrvvvk@                                                                                                                                                                        nutovtsss{stnt~;1'"    !!!!!"""""#####$$$$$$$%%%%%%%&&&&&&&&&'''''''''''''((((((((((((((((((((((((((((((((((((((('''''''''''''''''''''&&&&&&&&$#$(-0..#"((" !"&'$'-5<EJWk~~~~~~}}}}}}|||||||||{{{{{{zzz{{{~~~zzzvvvtttvvvwwwvvvqqqrrrwwwuuurrrwwwzzzrrrqqqv7
                                                                                                                                                                                    nutovtsss{stot~<1'"    !!!!!"""""#####$$$$$$%%%%%%%%&&&&&&&&''''''''''''(((((((((((((((((((((((((((((((((((((((((('''''''''''''''''''''&&&&&&%),)$*,,+%$&&"#(&!"%.DWi{z~~~~~~~}}}}}}}}}||||||{{{{{{zzzzzzxxxwwwyyyxxxxxxzzz{{{yyyvvvzzzyyytttuuummmuuux/                                                                                                                                                                                            outovuttt{stot~<1'"   !!!!!"""""#####$$$$$$$%%%%%%%&&&&&&&&''''''''''''((((((((((((((((((((((((((((((((((((((((((((('''''''''''''''''''&&&&&&%(+)%)+**&%&% #('',+/8Ma|~|~~~~~~~~~}}}}}}||||||{{{{{{{{{zzzzzzxxxvvv{{{{{{uuusssuuuttttttssspppvvv~~~|+                                                                                                                                                                                                    outovuttt{stot<1'"   !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&&''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((''''''''''''''''''&&&&&&&"&+*+#! )+** #%-F`u}yr|~~~~~~}}}}}}|||||||||{{{{{{zzzzzzyyyzzz{{{yyyyyywwwwwwyyyxxxtttzzz愄+
                                                                                                                                                                                                            outpvuttt{tuot<1'"   !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&&'''''''''''((((((((((((((((((((((((((((((((((((((((((((((((('''''''''''''''''&&&&&&&$"&(()$"! )***(025ARe|t|~~~~~~}}}}}}}}}||||||{{{{{{zzzzzzyyyyyyzzzzzzuuuwwwyyyvvvrrrttt~~~+                                                                                                                                                                                                                    outpvuttt{tuot<2("   !!!!"""""#####$$$$$$%%%%%%%&&&&&&&&'''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((''''''''''''''''&&&&&&%*.'!%'()!#'+*""@Tfz}x|}y{s|}~~~~~~}}}}}}||||||{{{{{{zzzzzzzzzyyyyyyxxxwwwvvvxxxuuuppp܀$                                                                                                                                                                                                                            ovtpvuttt|tuot<2("  !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&'''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((('''''''''''''''''&&&&&%')'%&'''"!"$*03:MRWh~u||~~~~~~}}}}}}|||||||||zzz|||zzzyyyyyyzzzxxxwwwuuuvvvxxx~~~*                                                                                                                                                                                                                                ovtpvuttt|tuou<2(#  !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((('''''''''''''''&&&&&&'!'0(%$$*.!=`~stu{~~~~}}}}}}||||||{{{{{{zzz{{{{{{yyyxxxxxxxxxwwwxxxύ                                                                                                                                                                                                                                        ovupwuttt|tuou<2(#  !!!!!"""""####$$$$$$%%%%%%%&&&&&&&'''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((('''''''''''''''&&&&&&'##'&$&+(()/>JVe|}|{~~~~}}}}}}||||||{{{{{{uuuxxxyyyssstttyyỷ                                                                                                                                                                                                                                                ovupwuttt|tupu<2(#  !!!!"""""#####$$$$$$%%%%%%%&&&&&&&''''''''''((((((((((((((((((((((((((((((((((((((((((((((((((((((((''''''''''''''&&&&&&&&&%122":V{|v~vx~z~~y|~~~~}}}}}}||||||{{{{{{{{{xxx{{{wwwvvvwwwuuuȃ#                                                                                                                                                                                                                                                        pvupwuuuu|tupu<2(#  !!!!"""""#####$$$$$$%%%%%%&&&&&&&&''''''''''(((((((((((((((((((((()(((((((((((((((((((((((((((((((((''''''''''''''&&&&&&&%&($%*/0<=MZt{x|~~~~~~~}}}}}}|||||||||{{{{{{zzzzzzwwwzzzuuuqqq.                                                                                                                                                                                                                                                            pvupwuuuu|tupu=2(# !!!!!"""""#####$$$$$%%%%%%%&&&&&&&''''''''''((((((((((((((((((()))))))))(((((((((((((((((((((((((((((''''''''''''''&&&&&&&%'9A(# Ju}~{ww|{~zyzzvy~~~~~~~~~}}}}}}||||||{{{{{{zzzzzzxxxwwwuuu                                                                                                                                                                                                                                                                    pvupwuuuu|tupu=2(# !!!!!"""""####$$$$$$%%%%%%%&&&&&&&'''''''''(((((((((((((((((())))))))))))))((((((((((((((((((((((((((''''''''''''''&&&&&&&'(+02>CCUr~}~~}~~~~~~}}}}}}||||||{{{{{{zzzzzz{{{ttt|||,                                                                                                                                                                                                                                                                            nvuqwvuuu~uvqu<1)# !!!!!""""#####$$$$$$%%%%%%&&&&&&&''''''''''(((((((((((((((()))))))))))))))))(((((((((((((((((((((((((''''''(((''''&'''&%&')("-EXz~|{~~wwwwzz~~~~~~~}}}}}}{{{|||{{{{{{zzz|||{{{vvv                                                                                                                                                                                                                                                                                uxvswvuuuvvvlvA7%#   !!!!"""""#####$$$$$$%%%%%%&&&&&&&''''''''''((((((((((((((()))))))))))))))))))((((((((((((((((((((((((''''''###%())'#""&*&"'4BDJXk}~~}~~~~}}}}}}|||}}}|||{{{xxx{{{~~~vvvvvv9                                                                                                                                                                                                                                                                                        {xxvvvtttqxwexD< #$" !!!!"""""#####$$$$$%%%%%%%&&&&&&&'''''''''((((((((((((((()))))))))))))))))))))(((((((((((((((((((((((''''''!(+,'#+$2DQf~}}}~~~}}}}}}|||}}}{{{~~~uuu'                                                                                                                                                                                                                                                                                            ywwvvvtttrywevD=!##" !!!!"""""#####$$$$$%%%%%%%&&&&&&&'''''''''((((((((((((((())))))))))))))))))))))((((((((((((((((((((((''''''(*+++($#"*)%'*5Qb\`v~~~~~~}}}|||{{{|||yyy~~~}}}qqqE                                                                                                                                                                                                                                                                                                ywwvvvtttrywew~D>!##"!!!!!"""""####$$$$$$%%%%%%%&&&&&&''''''''''(((((((((((((())))))))))))))))))))))))(((((((((((((((((((((''''''0375.$ ./+($&3]|{}{{~~~~~~~{{{{{{||||||zzz~~~}}}sss7                                                                                                                                                                                                                                                                                                        xwwtttuuuryvbt|C>!"#!!!!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''((((((((((((((())))))))))))))))))))))))((((((((((((((((((((''''''',-((&''''$'8PW^}|||{{{|||~~~~~~{{{ppp#                                                                                                                                                                                                                                                                                                            uuutttuuutywbt|B>!""!!!!!!""""#####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))))(((((((((((((((((((('''''''.,  '0+ $'5L^v~~~}}}~~~{{{vvvrrrN                                                                                                                                                                                                                                                                                                                    uuutuusuutyxds{B<!""!!!!!!""""#####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))))(((((((((((((((((((('''''''+**)#".Oj}}~~~~~~}}}|||~~~{{{uuuA                                                                                                                                                                                                                                                                                                                        uuuruutwwtyxfr{B;!""!!!!!"""""#####$$$$$$%%%%%%&&&&&&&'''''''''((((((((((((())))))))))))))))))))))))))(((((((((((((((((((('''''''
/.-) Co}zyz~~~~~~}}}||||||~~~yyywww3
                                                                                                                                                                                                                                                                                                                            wwwqttsuusxvhu}A~? !"!!!!!"""""#####$$$$$%%%%%%%&&&&&&''''''''''((((((((((((())))))))))))))))))))))))))(((((((((((((((((((''''''''!$)(24*1Q`|~zz~~~||||||||||||xxxv,                                                                                                                                                                                                                                                                                                                                wwwqttsuusxviv@}@ !"!!!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((())))))))))))))))))))))))))(((((((((((((((((((''''''''''%(63$&Fi{~zuu~~~|||}}}yyy~~~tttP                                                                                                                                                                                                                                                                                                                                        twwqttsuusxviv@}@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((())))))))))))))))))))))))))(((((((((((((((((('''''''''')$$(8rw|||{{{zzz~~~zzzsssG                                                                                                                                                                                                                                                                                                                                        twwqttsvvsxviv@}@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))))((((((((((((((((((('''''''''+)$#&or|{{{|||}}}zzz|||wwwA                                                                                                                                                                                                                                                                                                                                            twwqttsvvsxvjvB}A    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))))(((((((((((((((((((''''''''')"'>m~~~~~yyywwwsss7	                                                                                                                                                                                                                                                                                                                                                    twwqttsvvsxvjvB}A    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))))((((((((((((((((((''''''''''#()-b~~~~~~~~yyywwwxxx1                                                                                                                                                                                                                                                                                                                                                        twwqttsvvsxvjvB}B      !!!!"""""#####$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))))(((((((((((((((((('''''''''',Gov~zyw~~~xxx{{{-                                                                                                                                                                                                                                                                                                                                                            twwqttsvvsxvjvB}B !!!!!"""!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((())))))))))))))))))))))))(((((((((((((((((('''''''''''38[x~yvu~~~}}}}}}}}}www+                                                                                                                                                                                                                                                                                                                                                                hyvtusvxqv{lmyoSVJNUTRV[VKHF@;4-('""! ! $'''(,-) $+(())('&&&&'(**((((((((((())))))))))))))))))))))))(((((((((((()$,40+#')2::$&|~~~~~~~~~{{{zzz,
                                                                                                                                                                                                                                                                                                                                                                    jzyyyvvvo{~pt|rGq:y,t1v9x8z7|;A<56952/*,+%%"$*+$%$#&)%'%$"))())('&&&&'(**((((((((((())))))))))))))))))))))))(((((((((((()$,30+ *.16:&!z~~~|||zzzzzzyyyŘ2
                                                                                                                                                                                                                                                                                                                                                                        vsp}lnxn{u[sP~HyN|\}_}`flxu~{}{yy|{xnhh`K93/,)' &,3)"$#"""#&(,--,,**((((((((())))))))))))))))))))))))(((((((((((((((&#',./"22 "Yn}~~~|||}}}}}}yyyŔ3                                                                                                                                                                                                                                                                                                                                                                            rq~o|ruvnwrcfY]hd`bdinqrz~~}ujcZRRJF:750-(#,5,"&$""!#&(,,,++)*((((((((())))))))))))))))))))))))(((((((((((((((&$'+-/' -0('R`~~~|||{{{}}}Ɛ7                                                                                                                                                                                                                                                                                                                                                                                mtrtxxx|~iyzSv~:7!  %((.9CMZcry~|reZN?1%+6+!"&*,'#  %((((((((())))))))))))))))))))))))(((((((((((((((('''%063(A_}}}~~~{{{~~~~~~xxx݈7                                                                                                                                                                                                                                                                                                                                                                                    ovvuvyruwjxxX|=8"%#!")03:EPXb`hlrw{ygXK>5:51* #+/)# "%(*(&###%(((((((())))))))))))))))))))))))(((((((((((((('''('%/3.'#"GW~~~~~~www                                                                                                                                                                                                                                                                                                                                                                                        wv{xszrovjwvW=3"$%!.6@N^dqx{z{jYC?<&$,,-#"/30,(((((((())))))))))))))))))))))))((((((((((((((%!(-&$()'&.1~~~~~~~~~                                                                                                                                                                                                                                                                                                                                                                                        yty}tz{tzoxwWz|=5 !$&# "0?O]d_aq{}qZNDIL4(---&"#$+-,+(((((((())))))))))))))))))))))))((((((((((((((&$()%%&'%&9={{{|||{{{.                                                                                                                                                                                                                                                                                                                                                                                            ttswrv}vwbyB8#""#$###"!;QSjJ".01134+(  +97(((((((())))))))))))))))))))))))(((((((((((((((,' $'!gyyy9#                                                                                                                                                                                                                                                                                                                                                                                                |vstutvwww^y@8 &#!"""#$$$#%&%%%$AUZas}~pI?KD6/-,)($"#(02(((((((())))))))))))))))))))))))(((((((((((((()-&$%!,-l}}}xxx#                                                                                                                                                                                                                                                                                                                                                                                                    hzrtxstvvnxw[z?9    %.& "'(**+,,++**# $)B`{{xZ9!&/01-%"$(((((((()))))))))))))))))))))))(((((((((((((('-4$#& :]yyy4                                                                                                                                                                                                                                                                                                                                                                                                    lzrxxtwvvpxw^yA:! #+$ "&'((('&$#  "(0AT]cqtzbOE;+%%'*-*&'(((((((()))))))))))))))))))))))((((((((((((((',0$"&(0Ocxxx8                                                                                                                                                                                                                                                                                                                                                                                                        mzr|wu{uwtwxewD<"  '! "'(((# $!
Fh{]<.0+*(((((((()))))))))))))))))))))))(((((((((((((((+,$! '1J~}}}9                                                                                                                                                                                                                                                                                                                                                                                                            lyt|ux{uyvwxewD<"%# !!!#""""! !#"!"/JWah{~fQD=2(''**(((((((()))))))))))))))))))))))((((((((((((((())%$#%?Yw|||;                                                                                                                                                                                                                                                                                                                                                                                                            iwy}t|{tzwvyewD<!!&'&$! "'*/0,)!%&)-*-@Xqu|n]H/+,(('()))()(()))*))))))))))))))))((((((((((((((('#&)$Ns*                                                                                                                                                                                                                                                                                                                                                                                                                nwwwwzyuy{vxlwA7  "##"!!   !"#$%(()( "()!%3HZiiO>+)2+((++$&&(+,,,,)&()))))))))))))))((((((((((((((('##%*5d{~~~:                                                                                                                                                                                                                                                                                                                                                                                                                qwvpxwvvv}vwrv=2!*$ !!!"##########)( $!BVmR8¾/-4.((/. !"',00//)"')))))))))))))))(((((((((((((((%" $.C{~~~}}}~~~~~~+                                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$))  !&+)"#=OQjlbYJ&(&(,+#$%'+--,,*&())))))))))))))((((((((((((((((('$9Ky~~~K	                                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$))""%)1/,(.<Ah~gQ"$(*)%&&'+++++*()))))))))))))))(((((((((((((((())$;My}}}9                                                                                                                                                                                                                                                                                                                                                                                                                        qwvrxwvvv}vwqv>3 )#!!!!""""#####$$((##$(-./,(&##(C[u{}F.(''&'((())))*+,*))))))))))))))((((((((((((((('*/'Ok}}}}}}V                                                                                                                                                                                                                                                                                                                                                                                                                        qwvrxwvvv}vwqv>3 )#!!!!""""#####$$(($$%(,031.((Q||<4('%%'**)((((),.+))))))))))))))((((((((((((((('+4*O{~~~V                                                                                                                                                                                                                                                                                                                                                                                                                            qwvrxwvvv}vwqv>3 )#!!!!""""#####$$$$$$   "'03.*!4Wwc_8*"#---+$&''(,0,()))))))))))))((((((((((((((((*13*d+                                                                                                                                                                                                                                                                                                                                                                                                                            qwvrxwvvv}vwqv>3 )#!!!!""""#####$$##$$$-43+"Sy~[=*!!/..,#%&&',1-()))))))))))))(((((((((((((((().6)i~~~_                                                                                                                                                                                                                                                                                                                                                                                                                            qwvrxwvvv}vwqv>3 )#!!!!""""#####$$''%!$/0/)"%(8Hh}P5'../. #('%*2-()))))))))))))(((((((((((((((('%>Hw}}}W                                                                                                                                                                                                                                                                                                                                                                                                                            qwvrxwvvv}vwqv>3 )#!!!!""""#####$$('&!"-02-&'(0>iK5!'.//-#)'%*2-()))))))))))))((((((((((((((((&#<L{}~~~E                                                                                                                                                                                                                                                                                                                                                                                                                            qwvrxwvvv}vwqv>3 )#!!!!""""#####$$  ,.0/$ !(()% "'/.U}[R('.0.(#.*%)/+))))))))))))))((((((((((((((()$Hs}}}}#                                                                                                                                                                                                                                                                                                                                                                                                                            qwvrxwvvv}vwqv>3 )#!!!!""""#####$$ !-032'!!'&'#!(.,Y~VQ)'00,'#/+%).+))))))))))))))((((((((((((((()%Du{zzzb                                                                                                                                                                                                                                                                                                                                                                                                                                qwvrxwvvv}vwqv>3 )#!!!!""""#####$$##*,/.)%$%%$#!  #1Rhve/,1,(&%6/$'*)))))))))))))))((((((((((((((()%Z}}}]                                                                                                                                                                                                                                                                                                                                                                                                                                qwvrxwvvv}vwqv>3 )#!!!!""""#####$$##*,/.)&$%%$#!  1Ui}_//1+('%7/$'))))))))))))))))((((((((((((((()%X}}}N                                                                                                                                                                                                                                                                                                                                                                                                                                qwvrxwvvv}vwqv>3 )#!!!!""""#####$$$$$$!!  $&(+++++-'E_}x71-)($&<2$&&())))))))))))))(((((((((((((((('eC                                                                                                                                                                                                                                                                                                                                                                                                                                qwvrxwvvv}vwqv>3 )#!!!!""""#####$$$$$$   $&(++,,+.)G^|w:1+)*#&<2$&&()))))))))))))((((((((((((((((('e7                                                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$)) "()(%"!"$)1/)Khq-)#'.)%)4,&/+)))))))))))))(((((((((((((((('*5`}}}.                                                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$)) #()(%"!"$+0-)Kht-'%(.)%)4,&/+)))))))))))))(((((((((((((((('*5`~~~|||,                                                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$$$$$)+--,*%!!"#"%%Jr}]((+,*( '5-"',*)))))))))))))(((((((((((((((('*,ezzz#                                                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$##$%)+--+*%"!"#"%'Fova)(,,)) '5-#',*)))))))))))))(((((((((((((((('*+e|||!                                                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$  &+.-**''()**,'&'"WQI)(1.*($2-'),*)))))))))))))(((((((((((((((('("j~~~|||)                                                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$  %)++)(%&(**+,'&+(VXK'*0/*'$2-()+*)))))))))))))((((((((((((((((')#j~~~1                                                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$  $$! !(/201(7T~yE5"(43*#"1.+*)))))))))))))))(((((((((((((((('(f}}}9                                                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$!"$#! $(,--,&BYxpG6"(33+$"0.+*)))))))))))))))((((((((((((((((''d}}}E                                                                                                                                                                                                                                                                                                                                                                                                                                qwvrxwvvv}vwqv>3 )#!!!!""""#####$$&&$!!()&#!!"krY-&&&52)&#.--+)))))))))))))))(((((((((((((((('&X~~~Q                                                                                                                                                                                                                                                                                                                                                                                                                                qwvrxwvvv}vwqv>3 )#!!!!""""#####$$''$! #&'&%%#!.9fdX,'$'20)'$-,,+)))))))))))))))((((((((((((((((''U~~~~~~`                                                                                                                                                                                                                                                                                                                                                                                                                                qwvrxwvvv}vwqv>3 )#!!!!""""#####$$++$$%)20/*<k~w|D+!"#(,+((%',++*())))))))))))))(((((((((((((((((' Dp|||a                                                                                                                                                                                                                                                                                                                                                                                                                                qwvrxwvvv}vwqv>3 )#!!!!""""#####$$**##$)30-'#,4Qm|xt@)%%$())(())+**)()))))))))))))))(((((((((((((((('"Fe|||                                                                                                                                                                                                                                                                                                                                                                                                                                qwvrxwvvv}vwqv>3 )#!!!!""""#####$$*)  &-76/!5AMeR((''#%(+1-()((()))))))))))))))(((((((((((((((((&>Mv~~~?                                                                                                                                                                                                                                                                                                                                                                                                                            qwvrxwvvv}vwqv>3 )#!!!!""""#####$$)(")31) @Wd{njX?++'&!"(,2/('&'()))))))))))))))(((((((((((((((('(;Lw~~~}}}W                                                                                                                                                                                                                                                                                                                                                                                                                            rwvpxwvvv~vwrv=2 )#!!!!""##$$###""('%.+BtzjR1"%//(#(/72'$#$()))))))))))))))((((((((((((((((&-5Bz}}}V                                                                                                                                                                                                                                                                                                                                                                                                                            myvuxwwvwywxkvA7 ##$"!!!"! "$(,.%% $')( (:F^xwp]F*%($++(&"$(+/-('''))))))))))))))))((((((((((((((((&%-8f}}}/                                                                                                                                                                                                                                                                                                                                                                                                                            f{tzwuyuwswxbuD<" #.% !!! !(0;>$"#&/-!(Lfz|ydC(+*''(())(((())))))))))))))))))))((((((((((((((((& %)X~~~~~~C                                                                                                                                                                                                                                                                                                                                                                                                                            mwv}uw|twvvwbwB:&# !!  !!!"#$""""%&&$-H__fnxxeUF</&%&&%(((((((())))))))))))))))))))))((((((((((((((()%$('Qh|||                                                                                                                                                                                                                                                                                                                                                                                                                        qvytztwvvwa{|A9"#!! !%(('#%&$!
$U~w}_7
/0##(((((((())))))))))))))))))))))((((((((((((((()$$%"Mc}~~~|||~~~A                                                                                                                                                                                                                                                                                                                                                                                                                        twsutuvvwwawA9 '&&#"! #&*-,+'#/,*/ERbjyx_MC8(###$'%%'(((((((())))))))))))))))))))))(((((((((((((((($#$'<Av~~~}}}G	                                                                                                                                                                                                                                                                                                                                                                                                                    vwqwruvvwwbuA:!!$*))%#" $(-2220-((11*#AX~}yP()0*& %((((((((())))))))))))))))))))))((((((((((((((((&!"+00|~~~}}}Ǯ0                                                                                                                                                                                                                                                                                                                                                                                                                    wvtuw|twrww\z>6 '$ !#&%%%"#"#%'&*ES[e~{gB<MF3,+'$#%&&*-.(((((((())))))))))))))))))))))(((((((((((((((()'#%%#Ro~}}}}}}A                                                                                                                                                                                                                                                                                                                                                                                                                zvv}tx{twpwwZ{~<5'"$(((%.G`}~~v>)4772)!"%+12/(((((((())))))))))))))))))))))((((((((((((((((''%#"Mp~yyyͥ3                                                                                                                                                                                                                                                                                                                                                                                                                rtvxuxyvynxwWy{<6!" "'"*9KYa_dmszsWD6?>/$&)++)'(+,,-+$$(((((((())))))))))))))))))))))((((((((((((((('+0%%)1,k~~~~~~?                                                                                                                                                                                                                                                                                                                                                                                                            otvsrtutvnyxY|~>7 $"" %-"*0:I]kst~~y|fD$''$"$%&&''+//.-)  (((((((()))))))))))))))))))))))((((((((((((((',4%'0+v~~~|||ҟ,                                                                                                                                                                                                                                                                                                                                                                                                            rttxuuyvwpyxZ{?8$%#$+/5=ISb`htuy}~}~jVJF>861-+)(,.,*'&&&'+--,($$(((((((()))))))))))))))))))))))(((((((((((((('+0*'(+!K`}}}}}}                                                                                                                                                                                                                                                                                                                                                                                                        tvt|zzywwmvtWy?7&&(-6DSbvzsxrfT?-%&/,$*1/+'&&&%)--,(%%(((((((()))))))))))))))))))))))(((((((((((((('+/+)'(Kjyyy~~~񏏏8                                                                                                                                                                                                                                                                                                                                                                                                    fw~suzwqqyuju{u[_VYa_ZWVh|yvwy~w~i]URF>;@:*'')****)# %,'"" $+/0**((--(((((((()))))))))))))))))))))))((((((((((((((('&+0("),*Us}}}|||}}}ף'                                                                                                                                                                                                                                                                                                                                                                                                    dv~pty{su{pwzrRwM?}C}M|NzO|P|R~iyw||}~~~~{qhgWH83-&('',+)&#"#(+&!!$,12**((..(((((((()))))))))))))))))))))))((((((((((((((('%*2)"+1#]wzzz|||}}}낂E                                                                                                                                                                                                                                                                                                                                                                                                nt{|uxvv}owoQqH~9w=wEwDzA~FL@2|6:=:71/)%%%&**$#!! ""()(%&(*,+(##"!&'''""(((((((()))))))))))))))))))))))(((((((((((((((('#2:4-&O~~~{{{~~~ܐ;                                                                                                                                                                                                                                                                                                                                                                                            sy|uxonvi{r\[MR\[Z]aYOPPMGA:1'!  #$#! "   #$&&'(((*-,)#"! &'''!!((((((((())))))))))))))))))))))(((((((((((((((((!1;4,'\|||{{{{{{ۙ4                                                                                                                                                                                                                                                                                                                                                                                            twwqttsvvsxvjv@~@!!!!""""#""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))(((((((((((((((&%37.$>S{}ypr|}}}}|||ِ,                                                                                                                                                                                                                                                                                                                                                                                    twwqttsvvsxvjv@~@    !!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))((((((((((((((('%37-% B]zrt}~~~~~~|||}}}~~~܋H"                                                                                                                                                                                                                                                                                                                                                                                twwqttsvvsxvjv@~@    !!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))((((((((((((('/7,&&'15-%*CG[}~~~~~~|||{{{{{{݉J                                                                                                                                                                                                                                                                                                                                                                             twwqttsvvsxvjv@~@    !!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))((((((((((((('/7,&&'04.')HSd~~~|||||||||xxx߈M                                                                                                                                                                                                                                                                                                                                                                        twwqttsvvsxvjv@~@    !!!!"""""#####$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))((((((((((((('0:/'%$*--+!!&%Ps~~~~~~}}}|||}}}yyy܎J                                                                                                                                                                                                                                                                                                                                                                        twwqttsvvsxvjv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))((((((((((((('.5.&$#(-++#" %-^lv~~~~~~~~~}}}zzz~~~xxxۑG	                                                                                                                                                                                                                                                                                                                                                                    twwqttsvvsxviv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((())))))))))))))))))))))))(((((((((((((%###"!!%(*+*& *[uyw|~~~~~~}}}|||zzzvvvۖF                                                                                                                                                                                                                                                                                                                                                                twwqttsuusxviv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((())))))))))))))))))))))))(((((((((((((&$#$#""%&*)(($ !9]lw|}~~~}}}}}}|||zzz}}}oooٚD                                                                                                                                                                                                                                                                                                                                                            twwqttsuusxviv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((())))))))))))))))))))))))(((((((((((()$ &''$#"%(....)##",k~zv~~~~~~~~~~~~www~~~{{{oooԘH
                                                                                                                                                                                                                                                                                                                                                        twwqttsuusxviv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((())))))))))))))))))))))))(((((((((((()%"%))(%$#$&+-.-*) ,?fdv~~~}}}yyy|||{{{pppӕL                                                                                                                                                                                                                                                                                                                                                twwqttsuusxviv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&''''''''''((((((((((((())))))))))))))))))))))))((((((((((((((+/0./*%!  $*.00$&84!#\}}}~~~}}}zzz|||{{{xxxnnnԌU                                                                                                                                                                                                                                                                                                                                            twwqttsuusxviv@~@    !!!!"""""#####$$$$$$%%%%%%&&&&&&&'''''''''((((((((((((()))))))))))))))))))))))))((((((((((((),..-,)&$""%(,,-%*2-.9Tbzzz~~~yyyxxxqqqωZ                                                                                                                                                                                                                                                                                                                                        twwqttsuusxviv@~@    !!!!!""""#####$$$$$$%%%%%%&&&&&&&'''''''''((((((((((((()))))))))))))))))))))))))((((((((((('-1.-,+))''$$#&&+/+&(1.#+\myyy~~~~~~{{{zzz~~~}}}tttЇ_                                                                                                                                                                                                                                                                                                                                     twwqsssuurwviv~@~@    !!!!!""""#####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((())))))))))))))))))))))))((((((((((('+.)&%$'*++'&$&&(&&''((&3S^qz|||{{{~~~|||xxx}}}}}}sssφ_                                                                                                                                                                                                                                                                                                                                twwosssuurwviv~@|A   !!!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((())))))))))))))))))))))))(((((((((((()+!#,23-)$###&%!"  !2Qvy~~~~~~}||}}}~|~~~~~~zzzxxxyyyyyyE
                                                                                                                                                                                                                                                                                                                            sxxtttuuuuvvft}?;!#!!!!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((())))))))))))))))))))))))(((((((((((()*&###&),,*(&&&&""%'''$"!/G]ns~~}|}|~|~y|v{z|}}{{|||zzz{{{wwwppp̓L                                                                                                                                                                                                                                                                                                                        pyxzvvwttwvwes|>4"&" !!!!"""""####$$$$$$%%%%%%%&&&&&&'''''''''((((((((((((((())))))))))))))))))))))(((((((((((((((()))('&&''''''###'**("&=Wwx~|}~|}|~{{z{{}|{}z}}y~~w~u|p|w|}|{{{{{{{zzz{{{{{{sss͆U                                                                                                                                                                                                                                                                                                                    pxvwttvttwwwft}?6"%! !!!!"""""#####$$$$$%%%%%%%&&&&&&&'''''''''(((((((((((((())))))))))))))))))))))(((((((((((((((((((('''''''''**(),,+' ! +GWUf~~~~~}~{{|~||||||{{{{{{zzzzzz{{{zzzˀ6	                                                                                                                                                                                                                                                                                                            nvuwttvttwwwgu}?7"%! !!!!"""""#####$$$$$$%%%%%%&&&&&&&'''''''''((((((((((((((())))))))))))))))))))((((((((((((((((((((((''''''''..,+/..,&,38mzw}z|xz}~~}~y~x~|}{||||||||{{{{{{zzz{{{xxxxxxzzzΒA                                                                                                                                                                                                                                                                                                        nvuwttvttwwwgu@7"%! !!!!"""""#####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((((()))))))))))))))))))((((((((((((((((((((((''''''''+*$$%'*,)$!'?QXc~wwzz~}~~}~~~}~}}|}}}||||||{{{{{{zzzzzzsssyyyzzzvvvхK                                                                                                                                                                                                                                                                                                pxvyvvxuuxxxgu~@6"%! !!!!!""""#####$$$$$$%%%%%%&&&&&&&''''''''''(((((((((((((((()))))))))))))))))((((((((((((((((((((((('''''''')'%)-,*"6Ztsqop~|{||}zzz~||y}~}~}}}||||||{{{{{{zzz{{{|||vvvsssxxx{{{ʓ8                                                                                                                                                                                                                                                                                            pxvxuuxuuxxxgu~?7"%! !!!!!"""""####$$$$$$%%%%%%%&&&&&&&'''''''''((((((((((((((((())))))))))))))(((((((((((((((((((((((((''''''''))! $),-)&'(%$+9>JSi~~~{v~r}oxx}~}}}}}}||||||{{{{{{www|||xxxvvvsssqqqӋ<                                                                                                                                                                                                                                                                                    qyxxuuxuuxxxgu~?6"%! !!!!!"""""#####$$$$$%%%%%%%&&&&&&&''''''''''((((((((((((((((())))))))))))(((((((((((((((((((((((((('''''''')) "&*-01.*)'#"7Zx}zyzy|~zs~l}gxu}~~~}}}||||||{{{{{{}}}xxxxxx|||xxxzzzzzzttt~~~ɝ)                                                                                                                                                                                                                                                                                owvxuuwttuuuhu@6"%!  !!!!"""""#####$$$$$$%%%%%%&&&&&&&''''''''''(((((((((((((((((((())))))(((((((((((((((((((((((((((('''''''''--+*)&%%$%*,,-/+%$""(1BPnzv}w}w~x}y|}~|~vz{~~~~~~~}}}}}}||||||{{{|||yyyzzzyyyxxxzzzyyyvvvrrrxxẋ6                                                                                                                                                                                                                                                                        nvuxuuwttuuuhu@6"%!  !!!!"""""#####$$$$$$%%%%%%%&&&&&&&''''''''''((((((((((((((((((((((((((((((((((((((((((((((((((((('''''''''0/.-+'%%#$(*-01+%&%3[|~}~{uu}q}r|x}|}yz}~~~~~~~}}}}}}}}}||||||{{{{{{zzzzzzyyyyyyxxxxxx~~~rrruuu݂Ŏ,                                                                                                                                                                                                                                                                    nvuxuuwttuuuhu@6"%!  !!!!!"""""####$$$$$$%%%%%%%&&&&&&&''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((''''''''').1.'# !&'((%$%&(*''..ALbw|}}}z||~}~~~~~~~~}}}}}}||||||{{{{{{zzzzzzzzzyyyyyyxxxttt{{{vvvpppuuu℄                                                                                                                                                                                                                                                            nvtxuuwttuuuhu@5"%!  !!!!!"""""#####$$$$$$%%%%%%&&&&&&&&''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((('''''''''(.3/'# %&&&$#%&+/&#"?[rzx}}|yzz~~~~~~~~~}}}}}}||||||{{{{{{zzzzzzyyyyyyxxx|||tttxxx~~~xxxqqqzzz2"                                                                                                                                                                                                                                                        nvtxuuwttuuugt@5"%!  !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&'''''''''''((((((((((((((((((((((((((((((((((((((((((((((((((''''''''''"*-+%!!&)*($%&&$$&+-,(!$/<H`qz|~|yvwy~{~~~~~~~}}}}}}}}}||||||{{{{{{zzzzzzyyyyyysssuuuzzztttuuuwwwtttsss2                                                                                                                                                                                                                                                mutxuuwttuuugt@5"%!   !!!!"""""#####$$$$$$%%%%%%%&&&&&&&&'''''''''''((((((((((((((((((((((((((((((((((((((((((((((((('''''''''' ),+%!!')*($%%$$$&./,,'FZkz~}{{}~}xtux{~~~~~~}}}}}}||||||{{{{{{zzzzzzzzzyyyqqq}}}uuuttt}}}vvvqqqzzzyyyvvvtttB3	                                                                                                                                                                                                                                        mutxuuwtttttgt?5"$!   !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&''''''''''''((((((((((((((((((((((((((((((((((((((((((((((('''''''''''&'321* ",,-)#",14+$&-*%*;EL^|~~|tv|~{~~~~~~~~~~}}}}}}||||||{{{{{{zzzzzzyyysssyyyyyyqqqyyy{{{rrruuuuuuwwwsssyyyA*                                                                                                                                                                                                                                mutwuuwtttttgt?5"$!   !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&&'''''''''''(((((((((((((((((((((((((((((((((((((((((((((('''''''''''''(431* ",--*#",02)#"$(,'#FU\fu||uw|~{~~~~~~~}}}}}}|||||||||{{{{{{zzzzzzxxx|||wwwyyy|||vvvtttyyyxxxssstttwwwqqqrrr|||D#                                                                                                                                                                                                                            mutwuuvssrttfu~?5!#    !!!!!"""""#####$$$$$$$%%%%%%%&&&&&&&&''''''''''''(((((((((((((((((((((((((((((((((((((((((((''''''''''''''''''&&&&&&&&&&&%%%%%%%%%$$$$$$!).7G]x}{z|{z{~{s}o|n|o|r}|v}{{{{zyzywvwv}v~vxxtwt|xrxyqtyrrxsovtqvrwup{up~umvsoF%                                                                                                                                                                                                                mutwttvssrttfu~?5!"     !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&&'''''''''''''(((((((((((((((((((((((((((((((((((((((((''''''''''''''''''&&&&&&&&&&&&%%%%%%%%%$$$$$$#4HYfy~~||{|~}||~s~|p|p|q}s~|w}|{{{{zzyxvwv}w~vxxtxt|yrxyrtysrxsowtqvrwvq{up~vnqoloppqqqK                                                                                                                                                                                                        mutwttvsstttgt~?5!"     !!!!!"""""#####$$$$$$$%%%%%%%&&&&&&&&'''''''''''''((((((((((((((((((((((((((((((((((((((('''''''''''''''''''&&&&&&&&&&&&%%%%%%%%%$$$$$$-++*  5Tv|~wy{{x{{t~mlpw{z|{zzz|}~z}z{z{t|zs{zt|vzzu}zs}ys|yt{wvyuxwt{rs{nt{ltziszdswx}~vttpppwwwkkkE                                                                                                                                                                                                muswttvsstttfs~?5!"     !!!!!""""""#####$$$$$$%%%%%%%%&&&&&&&&'''''''''''''(((((((((((((((((((((((((((((((((((('''''''''''''''''''''&&&&&&&&&&&&%%%%%%%%%%$$$$$*,,($1J_u|{}}}}w}posx|{}{|zz|~}{}z{z{u|zu{zt|vy{v}zt|zs|yt{wvyvxyt{tt{pt{otzmszkuyimnssrsssiiirrrtttuuue`                                                                                                                                                                                        ltswttvsstttfs~?5!"     !!!!!"""""#####$$$$$$$%%%%%%%&&&&&&&&&''''''''''''''((((((((((((((((((((((((((((((((''''''''''''''''''''''&&&&&&&&&&&&%%%%%%%%%%%$$$$$!%-+)##;Z{{vjw~|z}|vv}{{~|{~w|~pxoxz{yzy{ys{xr|uq{ur{xvvz{t|~r~p~q|rzqxqtwxsvusssyyyqqqlllsssqqqnnnU                                                                                                                                                                                ltswttvsssssfs~?4!"     !!!!!"""""######$$$$$$%%%%%%%%&&&&&&&&&'''''''''''''''((((((((((((((((((((((((((('''''''''''''''''''''''''&&&&&&&&&&&&%%%%%%%%%%%$$$$$  &,*)#%7Obqqwvw|x~}~~yy~}|}}}|y~{swsxy|x|zzzv{zs|wr{vs{xww{{t|s}q}r{sxsu~ttzvvstsppprrrttttttssspppnnnggghhha                                                                                                                                                                    ltsvttvsssssfs}>4!"     !!!!!""""""#####$$$$$$$%%%%%%%%&&&&&&&&&'''''''''''''''''((((((((((((((((((((('''''''''''''''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%$$$$$#$#%%)*)%"#%4JT[m~|y|z{{z}zv}r|q~t~}{tsw~x~sy{tyzsxzuxzzwy~vy}vv{vtuxoo|kl}hqyoyxyxxxsssrrrpppmmmvvvvvvvvvssslllhhhk	                                                                                                                                                                ltsvsswrruuufs}>4!"     !!!!!"""""######$$$$$$$%%%%%%%%&&&&&&&&&'''''''''''''''''''((((((((((((''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&%%%%%%%%%%%$$$$$"!$'*+'# ! $&)=RSR[e~p{|y}{}|}z|w|v~t}}zvv}x}zy}r{zt{ytyyvxx|wy~vy|vwzvuuyqo{nk|jt{ttstpppsssuuuuuuuuuppptttppplllqqqtttnnnlllz	                                                                                                                                                    jsqwqryrtvvvfs}?4"$     !!!!!""""""#####$$$$$$$%%%%%%%%&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$)+-)+('"+=Tx{{{zxvwzwyssi}|i}{j}zi}yj}tq|tw|y~zywx|wxzwwwxvnysg|qaknxpvtvttttttssssssrrrrrrqqqqqqqqqppppppoooooolllfff{#}}}                                                                                                                                                lrqwpqwpqrrres}@5"$      !!!!!"""""######$$$$$$$%%%%%%%%&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$  &&'%!!#)&&" "-=MS[bhn|vzz{||z|yu|}u}}u{r}xp|ss{sv|w{}x{wxywyyvyxwxtvvqxuoxrswtuuuttttttssssssrrrrrrqqqqqqqqqqqqppppppoooooonnnkkkhhhzzz_	                                                                                                                                    nsrxqsunppppes}@5"$!    !!!!!""""""######$$$$$$$%%%%%%%%&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$21"")-*&%$&*+).1'!0Hb~w}{wtz|yw{t}ttsr{mrynrzzsx{tu~{qpnkp{tvttttttttttssssssrrrrrrqqqqqqqqqppppppooooooqqqmmmjjjlllccchhhe	                                                                                                                        nusystvoqqppgs}@4!#!    !!!!!!"""""######$$$$$$$%%%%%%%%%&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%$$$$$-,%   $))'%$##$$%)+'$#$*:IRY[~b|qz~vwy}vyws|t~vy~wqzxpzzow|tu~zs}p~o|rztwtuuuttttttssssssrrrrrrqqqqqqqqqqqqppppppooollltttooolllqqqllldddlllp|||
                                                                                                                    msrxqsvopwrris~@4!#!     !!!!!""""""######$$$$$$$%%%%%%%%%&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%$$$$$('()++*($#! #( !(./(*;L]zlmstv}xxytvysk~wf{xb{zey|mv~xr~pytzuutuuutttttttttssssssrrrrrrqqqqqqqqqppppppnnnkkksssnnnkkknnnmmmiiillliiieee|||Y                                                                                                        ntsunpwpqvttgr~?5!#     !!!!!!""""""######$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%$$$$$$%%%%$#$%$%$#"!%!!#%# !"1<@GPTTw]tryzvx{vs{{xu{vm{vm{wqywwvxztxxuvvvvuuuuuuttttttssssssrrrrrrqqqqqqqqqqqqppppppsssllllllqqqoooiiilllmmmffflllnnnbbbfffh                                                                                                pxuunpwpqwrucmy<4!$!     !!!!!""""""######$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%$$$$$$   !#&'&$ "$''$!,9J^{trxwuxszoz}nt}nq~or~os|muxswvywuuvuuttttttsssrsrrsrqrqrrrqqqqqqqqrpprppqoqnoonqsqmnnjkjpppqrrkklllmjjkjjkiijiiidddeffO                                                                                    quuqnrtquouicwqB7"!    !!!!!!""""""######$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&&&&''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%$$$$$$$###"!!!"#%%%$!!"!!  #$$$$06<AFNY}hq~xv}{y}{xwxxqvzmu|nqzppzupxtrwuruussttqwxrywqwxpwvqutoqqpmqrkqskqtltp{nktplsqkoqjktomrpmnlgopinpilngkkglihnkjnkimhhc_`liiYsw                                                                        oqrkmunqxfw]b~kG{; &      !!!!!!""""""######$$$$$$$$%%%%%%%%%%%&&&&&&&&&&&&&&&&&''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%$$$$$$$$$$$%$$######"#"""""#"""!     !"$:]llqxspv}ii|jc}pdxoiurlusrtwws}qn~~l||my{outsltvfqwdowdofogqh{xjtzknzliunfuq`pq`pq_op`podqjeqjirihphfshjojh^a^Zi]j{nKw}                                                            rrrpluqmvjvbexjNz?%      !!!!!""""""#######$$$$$$$$%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%$$$$$$$$$$$$#########""""""""!!!!!!!!  !#"$&&$2?FS~aqmp{rvttyquvrzut}tx~sz{qyumtuqvrrtmqrnrrqttttuspssnptpptootnounosmmonnlmnimmenlemldmmhllijjkiknijogipfjojnlilbfe[c_Za]ckf~~:                                                        {yytmyrmvoxegwiRz>%      !!!!!!""""""#######$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$#########"""""""""!!!!!!!   &+,)' 1Pvwtbvlusotjtnt~txqxugvrcupatnjpwpm|vjzj}{td{tcyrfwoipnmhnoelt_lv[kvZkv[kvbksdkphimkikrglqfmmdmlemjfljgkhghhhh\^Z]^[rsq-                                            xo{skwuvnksnZyH#!      !!!!!!""""""#######$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$#########"""""""""!!!!!!!  #%'&)4?FOmZjznqvvyrwwoyypvzqrxrpwrkrslnvnmvpnwduicuihtjkpnlpnkmqkksijugjugisfishjpkjnoilqijlhnhhnddkgdmhekieljdjibhkggjeghfebddYc^cqmN                                            rvjytiwvrqkqp]sxH!#      !!!!!!"""""""#######$$$$$$$$$%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$##########"""""""""!!!!!!!  "'&#3Lmyjs\q[~sbwvjuurksrjoviougpuVxiUxi]vkbrogpqkmsnktmhwngvngumismipnjlsilriihgkaenbfngfoieolcmncknajogkmceeccbee]idQd`V                                            LrjwqkwrqqmoofpoQ#!     !!!!!!"""""""#######$$$$$$$$$%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$##########"""""""""!!!!!!!  %$"!! &/7@Vvfoqqplutmxspxspvrpnqrmpqppopootolsnmrnkpmlmnlknkkmkjkknjlphnqhmgknannaljchjdekgbjkdklellflibgeadedeihfgge6                                            *tlzrlvporqprkplR$!     !!!!!!"""""""#######$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$##########"""""""""!!!!!!!!  ()%"(:S}rhqbsfrhymuxmtyopwnozoiwnisogrpfmqfkqeiogimiojlrgpsfpfkmZoi\lh_hgbekgcljclkdllemjekjeijdflfcmed                                            oluljrilqnrvvtl[w,%$     !!!!!!!"""""""#######$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$###########"""""""""!!!!!!!!  %-4<Nmyqnmrlollpqmrwnswmttmrqkollnjmnhmlhoogoldnjajfdmdkodlmcmkdkjfkhhggiffhdfibfiaegdefjcdkfd                                            ||mnvjouqswyujbw*$$     !!!!!!!"""""""########$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$############"""""""""!!!!!!!!   #:Omor}hhio{ksugsohrljrgjpcilakk`piaph_pefocln`nk_mibkhbhgecffcggafh_fg^egdefldfkcf                                            znpsjrrnrrwnmjt}?5"     !!!!!!""""""""########$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$############""""""""""!!!!!!!!  '&! "&+5|Hk^iisngxrfxqgxngsmkjjndgs[cviimtkivkgtieuhgviipjiklj^jfZieXieXhe^ffq]ff                                            <ilngqohomynpfnv<5 !      !!!!!!""""""""########$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$############"""""""""""!!!!!!!!  +*" .HltljUjZzkdnjpehz`gljsxjgwhewicugfteepgehhfZjeYieVifVhe[ff8[ff                                                psohpjiolppiyV{G$      !!!!!!""""""""#########$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$#############""""""""""!!!!!!!!!  $&%%%#!$-?qTcqschdh`hsKj{Shy\htgfsmelmegjcdffe`he\ie[hd[ff                                                    eoghnk}oqiyYxyB$      !!!!!!!""""""""#########$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$##############"""""""""""!!!!!!!!!  #&%%(%&>gs]dpHdtLcuXesfdqmeorijshjhhgbhe\ie[hd[hd                                                    bgndlplrcph{qy_U'       !!!!!!!""""""""##########$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$###############"""""""""""!!!!!!!!!    &3AjKcu[`ro_mtcjtgdrfbkfbkeaakea                                                        +ipfqtqm^}umqw]Rx&      !!!!!!!"""""""""##########$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$################""""""""""""!!!!!!!!!   0Qltejwfltgdsfbmfbmea+                                                            
snnhoghrihthdwyN9!')'!      !!!!!!!"""""""""###########$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##################""""""""""""!!!!!!!!!        "%"2EwZoo_l_OlqJgk^hloifngc
                                                            ºOnggnulgrhish^rrMx6!&(%!       !!!!!!!""""""""""############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$###################"""""""""""""!!!!!!!!!!        !$"/DoTii`j__j`fndfbd                                                                orSxl\tjxploiqkmG%""#!"       !!!!!!!!""""""""""#############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$######################""""""""""""""!!!!!!!!!!        !?cdgaipgcTmaJqduhi                                                                    	Ppe]ul{qmqjrggAx%"!#!"       !!!!!!!!"""""""""""###############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##########################"""""""""""""""!!!!!!!!!!!        !:p__ibktieUneHk_                                                                        0Rrj^qlno~pthtek<'-&)!!        !!!!!!!!!"""""""""""##################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$################################""""""""""""""""!!!!!!!!!!!        %"(#5\cz`mxhlyfgVjdLnfM                                                                        y^mg{lo{ou{hq_i:*(#&          !!!!!!!!!""""""""""""############################$$$$$$$$$################################################""""""""""""""""""!!!!!!!!!!!         " $&4~Vbxt`jthmtegVf`ez㚚                                                                            ƻ4voommtnlootgorjmpwM&         !!!!!!!!!!"""""""""""""##############################################################################""""""""""""""""""""!!!!!!!!!!!!         "Eehphlchm`gehffmqhk\                                                                                ikqhllnwjmrjggmIz-         !!!!!!!!!!""""""""""""""######################################################################"""""""""""""""""""""""!!!!!!!!!!!!!         (As__gflcgqbaeecfl|~З                                                                                        .]jk[ni_~gktbjhrf{K*%$,( ##       !!!!!!!!!!!"""""""""""""""""##########################################################""""""""""""""""""""""""""""!!!!!!!!!!!!!!          %'!"&Dk^ucaem[Wx`UhbYffO                                                                                        Ud`d|gowgnkol|Hl/%($!"        !!!!!!!!!!!!""""""""""""""""""""#########################################""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!          %"+Bfhevhehq`]uaTb[yƠ                                                                                                -ktngscen`tvopoqxa{Xu2#('( !        !!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!          $$% .Por[uihknpi]gYbo`iogJ                                                                                                    	cahajokonpokp{lyTk;1#!%$"          !!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!           !" -6|Mduftiekihjdhfag`~                                                                                                        jhsbfttosthyiocgC,'+!!$         !!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!            !(#)=]atciobnim\_njdqxxz߇                                                                                                            <vmsawunsnw_vtnjc~Jr<,          !!!!!!!!!!!!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!            )7Dld]zqnihrYnhmn]soivg                                                                                                                {lZvknQRqx_gqvc|Lt3"!"#           !!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              !  /Foq^wbkmtYK}Lqfj[{x                                                                                                                        mghfzfqqdpntjtQe|Az6)                    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 &2<uL`wodokill^aualfhv˔                                                                                                                                c`fvqj{q\{pejwVa@s2!"! !   /<nQ\~{eswl`vmWrkecahuwwΛ7                                                                                                                                        2uwwkkhooinohnsqkqzTivJtI8"  """""""""#############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##################"""""""""""!!!!!!!!!!     5DEpOdrglviomijckkdiignmn锔U                                                                                                                                            @u{|_jncrm\texpgmb~imas=
""""! "('(((((((())))))))))))******************************************************************************************))))))))))))))(((((((((('''''''''&&&&&&%&     9]o{dih]tlbWp`_ni^glnss򌊊r                                                                                                                                                Kzzjfarujlseiqbz{rafmQoR@2%)"!"                              !!!!!!!!!!!!!!!!!!!!!!!                                                   '#/<M}Lk~\bivwnen^hoanqfgd^wps󌈋|                                                                                                                                                        Dyurg[m|gZyakt`~wn~qvaIs-)-)#"#$#" !'+'+Eo]~{mszsjgp\Vv]ixbqg\zpo헋u
                                                                                                                                                                Eq{xadcssrqigxlnjnniotWp|NpG~GD5 !2@CCzJlSlxekpfjjuhjnedpoobdclppu
                                                                                                                                                                        4n\h}ksygnepo`tohqoojvahMr6$"4In^e|kgseml\qkblkvdkxiqk]gxy}؏Y                                                                                                                                                                                    kmkhkkniotltxpxwkwcjq[msWxsS}|K|KOPQNF>=;:;;==?@@@@@AAAAAABBBBBCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCBBBBBBAAAAAAA@@@@@@????>>>>>===;;9889;<CKNLKHHyOzySupWjp`gnthtvmvphpkelfijljj5                                                                                                                                                                                            Ppywsgrziuteqwgsjorjtpluemtc[iyXnUuLtDx?91+*((*,-/000000001111111122222222222223333333333333333333333333333333333333333333333333333333333333333333333333333332222222222222222211111111100000000///////......,*)&&)*/7<|AuHqQrTkXevjq`irbgqlflotdppbnwersgpjqp񇇊                                                                                                                                                                                                        /trm{jgpspsvgnfknotxppmrsrrusmrriosgptfqwdrxctyaty_vx^ww\yu\yuZ|sawyfseteufufufufvgvgvgvgvhwhwhwhwhwhwixixixixixixixjyjyjyjyjyjyjyjyjyjykzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzjyjyjyjyjyjyjyjyjyjyjyjyjyjyjyjyixixixixixixixixixhwhwhwhwhwhwgvgvgvgvfvfvfufufueuetetetetdt~ds~ds~ds~cs~cr}cr}br}cp}^twWypYvrYvr[uu\su^qv`qvaovbotdnqflpjooorqopommjlquchksdkmpmpzedrnk~זR                                                                                                                                                                                                                    A~{{_`gkqxnqwhotwrjupismhuoh|rq~urus}so|sozunyvlxxktyhr{ip~exxmsw}tu~tv~tv~tv~uv~uvuwuwvwvwvwvxvxvxwxwxwxwywywyxyxyxyxyxzxzxzxzxzyzyzyzyzyzyzyzyzy{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{yzyzyzyzyzyzyzyzyzyzyzyzxzxzxzxzxzxzxzxyxyxyxyxywywywywywxwxwxwxvxvxvxvwvwvwuwuw~uv~uv~uv~tv~tv}tu}tu}tu}su}su}su|st|rt|rt|rt{rs{qs}ptuujm|bpyfrwfuuhvtixrlzpl{pl|sp|spyonsmfpkermfupgelrkotovfiz^`yr㓑o|}                                                                                                                                                                                                                            ϷVddkpZugpqprtoqtrqtrlqshopgpphmtlovpnxqlwvk{wk|~i|i}xnwosqqrrqrrqssrssrssrssrssrttsttsttsttsttsuutuutuutuutuutuutvvtvvuvvuvvuvvuvvuvvuvvuwwuwwuwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwuwwuwwuwwuvvuvvuvvuvvuvvuvvuvvuvvtvvtvvtuutuutuutuutuutuusuusttsttsttsttsttrttrssrssrssrssqssqrrqrrqrrqrrprrpqqpqqpqqoqqoppoppoppmqnvkug||gzuhytiyojunkviltekqemmfmnjoqorpnqppqmnon~doWtfdiyޓ                                                                                                                                                                                                                                             
!|nnpmklifhhgjjhopirriuwks{mpwqn|tm{xl{jihzozpurrttrttruuruuruusuusuusvvsvvsvvtvvtvvtvvtwwtwwtwwuwwuwwuwwuwwuxxuxxuxxuxxvxxvxxvxxvxxvyyvyyvyyvyyvyyvyyvyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyyvyyvyyvyyvyyvyyvyyvyyvyyvyyvyyvxxvxxvxxvxxvxxvxxvxxuxxuxxuxxuxxuxxuwwuwwuwwuwwtwwtwwtwwtvvtvvtvvsvvsvvsvvsuusuusuuruuruuruurttqttqttqttqttqsspsspsspssprrprrnsqxlxef~yh~vj}qkxolzjmuiqygstgqqelmeggcffhjgmmkl򙉛7v~                                                                                                                                                                                                                                                                o
5`~wwyqqqmpjloipqmoromrqkrqirrissgtsjtsnsrntrotrotrotsotsouspuspusputputputqvtqvtqvtqvuqvuqvurwurwurwurwurwvrwvrwvrwvsxvsxvsxvsxvsxvsxvsxwsxwsxwsxwsxwsxwsxwsxwsxwtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywsxwsxwsxwsxwsxwsxwsxwsxwsxwsxwsxwsxwsxwsxwsxvsxvsxvsxvsxvsxvsxvrwvrwvrwvrwvrwvrwurwurwurwurwuqvuqvuqvuqvtqvtqvtqvtputputputpuspusousousotsotrotrntrntrnsrnsqnsqmsqmrqmrqmrqlrplqphrqerqgqqgppipokpomomnokjmgkmhnpnrttuyzނŏEl
	                                                                                                                                                                                                                                                                                }C\}~~
vxz                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ?                                                                                                                                                                                                                     ?                                                                                                                                                                                                                                                                                                                                                                                                                 ?                              ?                              ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ?                                                                                                                                                                                                                                                                                                                                                                                               ?                                                                                                                    ?                                                                                                                                                                                                                                                                                                                                                                                                                                      ?                                                                                                                                                                                                                    ?                   ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ?                   ?                                                                                                                                                                                                ?                                                                                                                                                                  ?                                                                                                                                                                                                                                                                                           ?                                                                                                                     ?                                                                                                 ?                                                                                                      ?                                                                                                          ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ?                              ?                              ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ?                                                                                                                                                                                                                                             ?                                                                                                                         ?                                             PNG

   
IHDR         \rf   	pHYs       
OiCCPPhotoshop ICC profile  xڝSgTS=BKKoR RB&*!	J!QEEȠQ,
!{kּ>H3Q5B.@
$p d!s# ~<<+" x M0B\t8K @zB @F&S  `cb P- `' { [!  eD h; VE X0 fK9 - 0IWfH    0Q) { `##x  FW<+*  x<$9E[-qWW.(I+6aa@.y24  x6_-"bbϫp@  t~,/;m%h^uf@ Wp~<<EJB[aW}g_Wl~<$2]GLϒ	bG"IbX*QqD2"B)%d,>5 j>{-]cK'Xt  o(hw?G% fIq  ^D$.Tʳ?  D*A,`6B$BB
dr`)B(Ͱ*`/@4Qhp.U=pa(	Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F; 2G1Q=C7Fdt1r=6Ыhڏ>C03l0.B8,	c˱"VcϱwE	6wB aAHXLXNH $4	7	Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw
ǈg(gwLӋT071oUX**|
J&*/TުUUT^S}FU3S	ԖUPSSg;goT?~YYLOCQ_ cx,!k
u5&|v*=9C3J3WRf?qtN	(~))4L1e\kXHQG6EYAJ'\'GgSSݧ
M=:.kDwn^Loy}/TmGX$<5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=
Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ?0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz %gA[z|!?:eAAA!h쐭!ΑiP~aa~'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl{/]py.,:@LN8A*%w%
yg"/6шC\*NH*Mz쑼5y$3,幄'L
Lݛ:v m2=:1qB!Mggfvˬen/kY-
BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
+V<*mOW~&zMk^ʂkU
}]OX/Yߵa>(xoʿܔĹdff-[n
ڴ
VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-
6
U#pDy	
:v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ
8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-    cHRM  z%        u0  `  :  o_F 8IDATx                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        #   17,  # =M2  ʳ L>M   @[; OOO>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   `

  ̹    *  
   '!#           


 ___                                                                                                                                                                                             ++( 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       [D ?    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    !:[                                                                                                                                                                                                                       CL,
1
 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       J
E#                                                                                                                                                                                                             1hV 

# 
       	               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                         
 !{_                                                                                                                                                                                                        *q$7       
		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     	        	 
 h{                                                                                                                                                                                            BjE     
     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               	    
 
   
 (ԟ                                                                                                                                                                                    lI -       	    
  
 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      	      } ;y                                                                                                                                                                     0½l\  	        :
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   	    C                                                                                                                                                          Az@      
  $                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $     	       '""'                                                                                                                                                             ?r=   
    ( #       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ) %    3  	   	 
x                                                                                                                                                       Fp=  
  	 (  &  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        *  
       

 ~                                                                                                                                            ;n@    
  / ( 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            	     
    $   
 v                                                                                                                                        .w<  	   7% # 	 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
    0   
      
w

&


                                                                                                                                	
	 nH   	      5&                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
 & 
  	*     y
                                                                                                                            Y 
   $ 2!   	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
  #   	  
Qfnk                                                                                                                    [K		   
   *!  
                                                                                                                                                                                                                                                                                                  +#   
     4냖                                                                                                                  1Y 
  
  *)              	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ,*    
  ` U                                                                                                            p0
  	   #  	     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
 
   		  $    	     x                                                                                                        	Q2 

     * ,            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	          . + !   	
   }                                                                                                    $i    
 $                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               &         a:                                                                                                e0		
    &    	            	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              (    
 |                                                                                            "?	
   
   #!           
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
          $"    
    9:                                                                                    m'    # /   
                       	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                             0                                                                                       ('      
	  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              	  		         &H                                                                             
׳y4 
 
  , +           
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      , /  
 
  ҇                                                                               !9 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
          6                                                                    	Y     
 ,          	         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       . 
  
    u                                                                   	>     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           	     7                                                                  >    	  & 
   	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                          )         j                                                            ͳM0    
 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                    !0  
  N                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               -        , !                                                       73    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
  
 
            3   6bfl؞                                                9                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       )                9                                                      >86"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                	                           "                                                0      %                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           	                                                                                                                $    
                          ,gg\ə                                         >0    	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                 1  9                                              -      /                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                *                                            @LP                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    #    
                                                                                         

 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
   *    
                                                                                   "1    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	 	  	                                                               4                                           &                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     !                                                                                                "      	 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
    	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               &  
           		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
  
                                                       	
	$&"vsu                                                     (    	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  # (  
                                                    $$$*'(.06)#                                                        '       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                               
                      	
	.+.
:893(8                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               	   !                                                                 1+),HJs                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                	    	                                                                            )))778 HJG                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                              333                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  	         	      
                                                                      '''***                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                	                                                                               444                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                 
                                                              222                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
     	 
                                                             ;;;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                  
                               
      			           333                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    &&&222                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

  
 	                                                              ,,,444                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                '   
   
            
         	                                
     			 BBB                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                &&&                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
  
                                
                 	     WWW                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ==?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
                
              
    (   
   
         
                 
                                     

DDJ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
          	

                                                                                      <<<                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            	                                   
             	 
                                                                          			 ...			                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                        u


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                           			s(((***޺                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    &&&_                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	  ( !                  	 	                                                         


  g***,,,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     	                                                                       j---                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            #   
                                 
                          `                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                              


  i>>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      !                                                                          n%%%                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        	       
                                                                                


zGGG                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	    . ! 
 
          
                                                            s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                                                                     """,,,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              	                        	                                             			@@@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                  ###                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  )                                                                      222###                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                   ,,,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	     	      	 # 3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          &   
    %  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         )     
                                                                                          '''                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2          	                                                                             '''y&&&                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (((u333                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           $               	                                                                  +++p444                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   '''m===                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             	                            
  1  
 
     
        
                                                                               l999                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 o111                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             *      
 
  
           

                                                            q222                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       k,,,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              2             
  	 
   	                                                     


l"""                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
  
                              	                                                                                                                                                                                                                                                             
         % 5 H                  	  
            
                                                             [OOO                                                                                                                                                                                                                                                                                                                                             	     
             		 
    
                                                                                                                                                                                                                                                                                                                                                                                                                         `222                                                                                                                                                                                                                                                                                                                                        
          )           	  
 
  
   
                                                                                                                                                                                                                                                  	     7                                                                                                                          i%%%                                                                                                                                                                                                                                                                                                                                                                             	 (#
 
	                       	   	 
 
                                                                                                                                                                                                                                                                                                                                                                                                                !!!                                                   			                                                                                                                                                                                                                                                                                           
   
        
             	            -  
              	                                                                                                                                                                                                                                   :  # 	                                                                                                                   a>>>                                                       ...                                                                                                                                                                                                                                                                                                
                  
                  
  	                                                                                                                                                                                                                                                                                                                                                                                               111                                                                                                                                                                                                                                                                                                                                                                                    5 
 
  
        	 "       
 	 ' 
                                                                                                                                                                                                                                     
   + !                                                                                                                        ^---                                                                                                                                                                                                                                                                                                                                                                    
                 
	 %     	        
      
   	                                                                                                                                                                                                                                                                                                                                     m"""                                                                                                                                                                                                                                                                                                                                                                                                 %	         *       7   
                                                                                                                                                                                                                         5 #                                                                                                                ###                                                                                                                                                                                                                                                                                                                                                                                                                     '  	    
       	       "                                                                                                                                                                                                                                                                                                                                        t...                                                                                                                                                                                                                                                                                                                                                                                                                   
 
  '      
         -                   
                                                                                                                                                                                                     *                                                                                                                         (((                                                                                                 


                                                                                                                                                                                                                                                                                                                              
 #            
      %                                                                                                                                                                                                                                                                                                                                  (((                                                                                                                                                                                                                                                                                                                                                                                     
 
                                      	  1     	      
 , 5   !  
  
                                                                                                                                                                                                       	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     	  #
     
       
       	                                                                                                                                                                                                                                                                                                                               ...                                                                                                                    """                                                                                                                                                                                                                                                                                                         
  $      	  		      $                                                                                                                                                                                                                                                                                                                                                                                                                                                     ///                                                                                                                                                                                                                                            	                                                                             
            	                                                                                                                                                                           
                                                                                                      )))                                                                                                                                         


 ...                                                                                                                                                                                                                                                                                                             	 
               
        	   	                                                                                                                                                    
   	                                                                                                              '''                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                        
                                                                                                                                                                    
                                                                                                                                                                                                                                                          !!!                                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               	          	      0                                                                                                                                                                                                                                                                                          ###                                                                                                                                                           


                                                                                                                                                                                                                                                                                                                                                                              	          
    
 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         +  $        
  	 	   /                                                                                                                                                                                                                                                                                                                                                                                                                                        000                                                                                                                                                                                                                                                                                                                                                               2                                                                                                                                                                                                                                                                                                                                                                                                                                                           


                                                                                                                                                                                                                                                                                                                                                           #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   			                                                                                                                                                                                                                                                                                                                                                "    	          
                                                                                                                                                                                                                                                                                   			                                                                                                                                                                                          $$$                                                                                                                                                                                                                                                                                                                                                        
	 
                                                                                                                                                                                                                                                                                                                             


                                                                                                                                                                                                           ===                                                                                                                                                                                                                                                                                                                                   $ 
         

 %                                                                                                                                                        	                                                                                                                                                                                                                                                                                                                                                XXX                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                			                                                                                                                                                                                                                                                                                  
        
                                                                                                                                                        	                                                                                                                               	                                                                                                                                                                                                                     <AL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    			  53.                                                                                                                                                                                                                                                                                                                                                           
             	                                                                                                                                0       	                                                                                                                 	                                                                                                                                                                                      '''  446                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     >>>                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                             
 
                                                                                                                                                                                                                                                                     DDD                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                               			                                                                                                                                        QQQ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ;;;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
             
                                                                                                                                                                                                                                                                          }                                                                                                                              			  %%%                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                 ###                                                                                                                                                                                                                                                                                                                                                          	                & 	             "                                                                                                                                                            !                                                                                                                     ???                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                               	                                                                                                            2                                                                                                                        


                                                                                                                                                                                                                                                                                                                                                                                        	  %  	            # 
                                                                                                                                                                    	
                                                                                              n                                                                                                       ###                                                                                                                                                                                                                                                                                                                                                                                            
                   
                                                                                                                                                                                 	                                                                                                          222                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      %                '                                                                                                                                                                                                                                                                                      J                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                %                                                                                                                                                                                 
                                                                                                                  _ګ$$$	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                	    $ 	  
        "    $                                                                                                                                                                         
                                                                                                  \"                                                                                                                                                                                                                                                                                                                                                           	                                                                                     	 
       	   !                                                                                                                                                                                                                                                                                                XؓAAA                                                                                            )))                                                                                                                                                                                                                                                                          	                                                   	  
   &    
   	 	    ) #
                                                                                                                                                                                                 
                                                                                         q                                                                                   ,,,                                                                                                                                                                                                                                                                                               	                                               
 
  
 	        
  # 	    
                                                                                                                                                                                           	        0                                                                                                TՐ222                                                                   ,,,                                                                                                                                                                                                                                                                                                                              	                       
  
   
                                                                                                                                                                                                         	 
                                                                                                     z                                                                                                                                                                                                                                                                                                                                                                                                                   	                  #    
 
                                                                                                                                                                                                            -  ( 
                                                                                                   G                                                                                                                                                                                                                                                                                                                                                                                                                                                
 	  
         
  # "        	                                                                                                                                                                                                            
   	                                                                                                    {///                                                                                                                                                                                                                                                                                                                                                                                                 
      
     
 
                                                                                                                                                                                                                        
 -  ! 
  
                                                                              			Fh 


                                          ???                                                                                                                                                                                                                                                                                                                                                  	               
                 	                                                                                                                                                                                                                                                                                                                                      5### 


                                                                                                                                                                                                                                                                                                                                                                           
     	   	       
                                                                                                                                                                                                                       	   	      
  M 	                                                                
m                                                                                                                                                                                                                                                                                                                                                                            	       
   
 
             % "                                                                                                                                                                                                                                             
                                                                                                >_***                                                                                                                                                                                                                                                                                                                                            	                  
                
     

 	                                  
                                                                                                                                                                                                 	        5  +                                                                              Dأb


           444                                                                                                                                                                                                                                                                                                                    	 
   	       	  
 
 
 
 	                                                                                                                                                                                                                                                                            
                                                                                             !(((                                                                                                                                                                                                                                                                                                                
 
 
     "                     	  	    
 &  	         	   	                                                                                                                                                                                                                                           1                                                                    q+++                                                                                                                                                                                                                                                                                                                                   	             	 	            	  
     
                                                                                                                                                                                                                                                                                                                                                                                                    8n000                                                                                                                                                                                                                                                                                                                                      	                 
                   	                                                                                                                                                                                                                                 
        
          b    	                                                                    9m222                                                                                                                                                                                                                                                                                                                                     3%           	                                                                                                                                                                                                                                                                                                                                                                                                                                              9l...                                                                                                                                                                                                                                                                                                                                     	     
                                                                                                                                                                                                                                                                                                                                                                                    	         E  #                                               
               ?Ԕk...                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 			?ԓ(                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         )  5   
    
  	                        	                       			  Aѐt(((                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             			 


 Bώ0	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + 
 I )   	  
                                                                            @ֆ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         			     B                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
   # ,                                                            D                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  "                                                                          D			&                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
           
 *  # , / 
                 
                                           GG9888


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             !    
 	                                                                         P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
            )                                                                           X                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    	                       
           	                                                         L Dڑ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
               
                                                             L ---                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	                                                                                  


O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                


I Ձ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                             			I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Nw


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       	  
                                                            I ~


			                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
  
            
                                                Qu                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                , 	  
                                                                      A                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  	                                                        Q}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
           
 "     
&                                                            


  75&y+++                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        	            	 
     
                                                                      3.0%%%                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
 
                                                                   0)***                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                	                                                                         _s!                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
 !                                                                                  #dO


>>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     	  % $  
         
                                                                               
j򻾾m+
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
            	   
          "
  	    
                                                                   		tj'''                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      	  
                                                                              		{t###                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       	                               !  >	   
                                                                   


|ق%%%                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                    			      			   r                                                                                                                                                                    	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 $   "                                      
                  h                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
 + +                     	                                       	     ؝n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             	                                                                 r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               # A)         	 
                        	                                      			 			s999                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ;+ &  	   
                                                                     )))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          L%                                              


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          , '                                                                 ///                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            5 5 	   !                                                                     (.ݼӯQQQ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ? 1    
 	         	                                                                        00 OǈFFF444                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @ @ 	        
                     	                                         66ƾ୴$$$000 ,,,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
    
                                                                         BB ,ׯ///DDD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               I         
      
                                                               J  3ڢ{{{                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                  N                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
      	              
                                                	           O                                                     	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   +   	                                          
      	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
 , ,                                      
              
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $ *  	   	                          
    	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	                          	 	                                                               
        	 &                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

 
       
 	 
            
          	   	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                "       
       	                                                                                	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +                         		                                                    z                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
        
    
                                                          ""        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
  " ?    
   
    	    	                                             

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  % 1     
   
  	                                                      	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	   #
     
	                                               $&%y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
        %% =?8                                            %&      
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
 "&$	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
 	    


                                             #&)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  &)*                                                  #$$l                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              HB=                                                $# $   
  (                            	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	                               $       $
                                                        ++-q                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           	.*:                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                     !JJF                                                        $$#                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          "#                                                               	774    
  #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    "        	  DCC                                                                '&%                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                95U⩘   
  3      
  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
       )                                                                        ++)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  JFS                                                                        	CBE     ( %  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
  % *      & GFK                                                                                 $%!#&                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                             	
(             
  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	  # (     
)-%	JKQ                                                                                        .,.98; 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             #%&                                                                                               	?=C'       *+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 HGT                                                                                                 GEA      	 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
        "$$
                                                                                                      540?29     5 %                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     % 6     &$"%NGQ                                                                                                           :KBA(     	 	 
  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            	 	        *" HEG                                                                                                                    I\B$  	
 0   %                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       	                
  )      1@E>                                                                                                                            Qy *       9%  % 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
    
 	      455DDD                                                                                                                             444}$
    #    )                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            	                   
+13!                                                                                                                                      ??=z%	          '  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           $ 
         '%%%##                                                                                                                                           FFG#
        #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              9       ,('"                                                                                                                                      J       
   %                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           	     
  .-5     GGG                                                                                                                                             <;: "         
 +                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                	      %*                                                                                                                                              	   J&s           ! 
    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              	           +*%     GGG                                                                                                                                                      
ILH "澼
   	  
         

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          	      
      
 *&-                                                                                                                                                                                9>8 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
  
  .,7                                                                                                                                                                                          cda
	
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
   
.-%	                                                                                                                                                                                                        

cpHн	


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    	                           
  


*'			                                                                                                                                                                                                                
`a\$                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $%!                                                                                                                                                                                                                               	]m3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

                                                                                                                                                                                                                                                 

[_a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   mtt	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              =    IENDB`           (     (                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

                                                                                                                                                                                
!#$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$#!
                                                                                                                                                                
%+169<>????????????????????????>>=================================================================================================================================================================<;851+%
                                                                                                                                                    #+4>EMTY]_``aaaaaaaaaaaaaaaaaaaa`_^]]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[[YVRLD=4+#                                                                                                                                        
#.;EP[ -6v#AT%Md&Rn&Vs&Yw&Yx&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&[z'[{'\}']~'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^']~'\|&Yx&Ur%Oh#CW .7sXOD:.#
                                                                                                                                
 ,;HU -6t$I_&Ws,Zv7]u;aw<c|:e6c8i;n<r<r>t>s?v@xAyAzB{B|B|C}B}C}C}B|B|A{<s0elbjjdD;^XcjqmfUUNT^bdTRSKLLAAa_O]urCepfX\caalfW]fafemijlmNQjiXc``jsh\Saspf^M_j\OsgmleD;^XcjqmfUUNT^bdTRSKLLAAa_O]urCepfX\caalfW]fafemijlmNQjiXc__jrg\S`roe]L^iZNpeji_=x3lIt?h~9bz+]z&Yw$Kb /8rSG:, 
                                                                                                                    &4DS";K%Qk*Yt8[q7_x5e7g8i9j9k9j;n=q=s>t?v@w@xAyB{AzB|C~DDDEEDCC~<u/bNLEelXHUJ]hT[nn_QQ[mp^UV]mnnReosSWrpmvrmQARMGVd\bcagsf`cnYKPb^ok^`ircKG`rV>E`ba<TQGgmXHUJ]hT[nn_QQ[mp^UV]mnnReosSWrpmvrmQARMGVd\bcagsf`cnYKPb^ok^`hqbJG_qU>D^``;ROFdiVFRHYcGw<e{,]z%Sn"<LRC4&                                                                                                            *;L!9G%Oj*Tn2Tj3`|5b6d6g5d8j:l;n<o=r<p<q?v@x@wAzAyAzC~C}C}C~ED~EEDEE>y0fSUM[bghkNIsn]a|vee_nsjorhi`seeit^UebOXn{ieag^eiPOe_Ma]\erecUgbsnaZ\f_N"v$wci[cn`ad[[P]cghkNIsn]a|vee_nsjorhi`seeit^UebOXn{ieag^eiPOe_Ma]\erecUgbrmaZ\e_M"u$vbgZam__bYYNZacdgKFmhX\X}2`{%Ql!:HK:*                                                                                                        ,?Q$Ld)Zv5Xm1]y3^{4a~5c6c6g6g9k:l;n=q>s?t>t@wAyAx@x@wBzC}EEFFFED~DEE?{2j[a\`icdsWD^meTls_ehn_dfimdOUe`bsbYbgbM]_R_bfYbbXSU^]nmV\nbibpbbuo^dirsmJgnnb`adseiabjcdsWD^meTls_ehn_dfimdOUe`bsbYbgbM]_R_bfYbbXSU^]nmV\nbiapbauo^diqslIfmma^_bpcf^`g`aoTBZh`PflDl)\z$MfP>,                                                                                                .A!7Du%Oh,Pg.Vn1[w2_z3`|5c6d5d7g8i9j9k:l=r>t?u?w@x@xAyAzB{BzD}FFFFFEFGFF@|3k\bpb^UZtoZV[YNQdeaio^Y[P_imW`Y_jSBfxnTb_bm`SK]ged^dYd{k_m_`RahCZtgrtfz{b\V]wde_hfjvd_UZtoZV[YNQdeaio^Y[P_imW`Y_jSBfxnTb_bm`SK]ged^dYd{k_m_`RahCZtgrsfyza[U\vcd]fdgsa]SWokWSWTKM__U8bz%Pj!7Et@.                                                                                        -A#BU(]|6Wk/Yt0[v1]y3`|4a~4b7f8h7i8j:l:k:m=q?u@v@xAyAyAxB{D~EDEFGFFFHGGE>y3l]jo[Ucavygic[mgHPQgsfcqcbcycYWb|tRRgoqqdnrcfdjngjbha_tunb[gKWuecob]zonvjfW8oriVQgst]Vcavygic[mgHPQgsfcqcbcycYWb|tRRgoqqdnrcfdjngjbha_tunb[gKWuecoa\ynmvjeW8npgTPdpqZS_]rtbd^WgaDKL`Ms(^~#CV@-                                                                                
*?#FZ)\y/Pe.Vo/Xs/Zt1\x3a}5b5c7g8i9j9k:n;n=r>s>t@w=tAzB|C}C~C}B|B|FEC~EEGEGGF>y2l\TXpj\ddkntTaMiyVgrq^_jvhc[ujjgh^aJhYUaRd`UZ_a_cWbahh_rp^ZaQknQhhibau^hcakkauohjg[\sk\ddkntTaMiyVgrq^_jvhc[ujjgh^aJhYUaRd`UZ_a_cWbahh_rp^ZaQknQhgibau]gc`jj_smfhdYZohYa`fjnQ\IcqQ`ihFr(]|#F[>*
                                                                            
&;#DX(\z1Sh.Wp.Wr0Yu/Zt1[w3`|5c6f8g9i8k:m;p;o>s?t@vAw@wBzC}D~DD~EFGGFFFHHHGFA}4m_\^qylP^yYohWopfQ]YXRX\jh{dmhptsZ`_do``jjqf_lqWfoitlu}f?[djaQn\`\_oa`X_ml]gnqnidbtzlP^yYohWopfQ]YXRX\jh{dmhptsZ`_do``jjqf_lqWfoitlu}f?[djaQn\`[_na_W_kj\flolga`pvhMZ}syUibRhh_LVSCq(]}#EY:&
                                                                         4!9Gl(]|3Th-Uo.Xr/Xs1[w1^z3`}4c4a~7g8h6f6h:k<o<n<q>s@wAxAzAzC}D~DEFFFFHHEGHHHG@}4me_dXZvV+qfmO\ljbiqdc_cYhcpVc^kqeeigmbYftskcgip~imkorgcju`m_VVSZ`LIbiadiginjgXiwqgiZ[vV+qfmO\ljbiqdc_cYhcpVc^kqeeigmbYftskcgip~imkorgcju`m_VVSZ`LIah`dhfhmieWgtodgXYrS*ylbhLXfd]ci]\X[Bo(^~!9Hl4                                                                     
,D%Pk3Sf+Sl-Vo/Xr.Wq0Yu2_{3a~4b~4a~7h8i9i9k8j;o=r>s=q=rAx@y@xC}C|DEFFFFFHGHIHHGA~4ma`mmbjb?Wjmg\ejcQehghphlhkhejeuggmfogbehlqpdrpphfpgdgikf~nwspjf_wgdgoeXimiigrjckmhrpcjb?Wjmg\ejcQehghphlhkhejeuggmfogbehlqpdrpphfpgdgikf~nwspje_wgdgndXhlhhephaijfom`f_=TegbW_d]L^a``f_Ho%QlC,
                                                                    #;%Nh.Qg+Rk,Un.Wq.Xs0Yu0Zv0\w2^y3`}5d7h9i:l:n;o<q=r>t?u<p@v@x@xC}C|B|EDDGGEFGIFEFFA~4mUbhoiguu]eefizrjTba\msc_jjpescelvsZsnhSeow|[Z\mmdmmfgmsbjf|mjj`eseeemjW]ftuehmh_^kmskguu]eefizrjTba\msc_jjpescelvsZsnhSeow|[Z\mmdmmfgmsbjf{mjj`drdeeliV]ersdfjf]\hjogdppYa`acsjcO[ZUdiZV9c{%Oi:#                                                            
."?Ps*Zv*Of,Sl,Uo.Wq.Xs/Xs1\x3a}4b5e6f8g9j:l:n;n<q=r=q>r?vAxAzB{C}D~C}D~D~C~FGHHHIIHHF>y1gF[gjmnrremmp_ewsh`rhnlbgqh\cqhYNiql`j]c__k`oinj^ajjchg]_j|kfehgpmbbincqrfj_hoohMblmnnrremmp_ewsh`rhnlbgqh\cqhYNiql`j]c__k`oinj^ajjchg]_j|kfehgombbimboqei]fmmfK`ijjjnmahhj[_okaZi`ecY]`*\z"?Pr/
                                                            #;&So3Rf+Rj,Tm-Vp-Vo0[u1]y3^{3a|4c5e7f8i9j:l:n;o<q=r>t?u@wAxAzB{C}D~DEEDDEHHHIIHHF>x4mYK`^kpnicknn_Xsx{dkbnvj_ef][ivqYSdttjn`ptgl`nek[hacpkntf^ittniklptgsknaetrl]\okucQe`lpnicknn_Xsx{dkbnvj_ef][ivqYSdttjn`ptgl`nek[hacpkntf^ittniklptgrkn`etqk\[mjsaPc]ilje_fiiZSlpr]c[ek`V[En%Tp:#                                                            
+#CWy1Zs)Ne*Ri,Tm,Vo-Un0[v2]z3_|3b~4c6e7g8i9j:k9l;o<q=r>t?u@wAxAzB{C}D~DEFFGFEHGHIHHGA~4mhN`_elltcdnrpefqukibiropn\UXhonpodlyyk]cvtyhkidXQc^ffeq|sszoPbruytwejjah{u_dl_otTdaflltcdnrpefqukibiropn\UXhonpodlyyk]cvtyhkidXQc^ffeq|sszoPbruxtwdjj`gyt]bj]lrSa_chho__hki_`imcaZ`gdebS,Zu#CWy,                                                        4&Ur4Sg*Qi*Rk-Un-Wr/Xs0\w2^z3_}3b5c6f7g6e9j:l9m;o<p=r>s>s>tAxAzB{B{B{C}C}C|FGDEFGGHHEGA~4ml_`dKml{umtozolliolulmgu|~ynyrepxtlzyocllhdhXfjmWfdsyhZdVRblhkfld{s\WscmfdgYfxgdfLml{umtozolliolulmgu|~ynyrepxtlzyocllhdhXfjmWfdsyhZdVRblhkfld{s\VrbleceXdvdbcJjhvpinisieebgckbc]iunW|&Vs5                                                    %!5BV*Xu)Oe*Ri,Sl-Vo.Wr.Xs1\x2^z3`}4b5d6f7g7g7f:l:n;n<q=r>s?u?vAxAz@x@wC|C}C{B{FGFFFGIGFEFA~3ledexdR^}vhdbvdba]kehheYhxxk^pu[ltpeYlgfkptvmmujf_dzlakujQgulpfhTjum3ioZwh`jcVplj{eR^}vhdbvdba]kehheYhxxk^pu[ltpeYlgfkptvmmujf_dzlakujPfulpegTjtl3inYvf_haTmigwbPZxqc_]p^\[Vc]__\Q]kkp,]z!6CV%                                                    
+%Oh5Vj*Pg*Rj,Tm,Tn-Vq/Zu1]x2^{3`~3`|4b5e7f8i8h:l:n;o<q<p=r>s?u@v@x?v@xB{C}C}D~FGGHHHIGEEFA}4mhlhwwmWaqspfuihrgogp}kmsdnocvv]Z^ukpvgZRxylxvnmvn[]pr~}cMmiyt~t^ouRhqpztpobtumzxmWaqspfuihrgogp}kmsdnocvv]Z^ukpvgZRxylxvnmvn[]pr~}cMmiyt~t^otQgpoxrnm`qrjvsiT]lnkancaj`g_gvqabgZbDl%Pk+
                                                    1&Zy.Od*Ph*Rj,Tn.Wp-Wq0Zv1]x2_{3_}3`|4b6e7g8i9j:l:n;o<q=r=s?u@wAxAzB{C}D~DEFFGEGHHIGEFF@{4m_h_cqmprz~w^rzeynnZ]}}vSWr{vMfoXeU{gXswiacmhov{nxlhgwediqdecfmvx}s{ysrvseq~qZiqcermprz~w^rzeynnZ]}}vSWr{vMfoXeU{gXswiacmhov{nxlhgwediqdecfmvx}sz~ysqurdo}|oYgn`bnilmtxqYkr^pffTVqqkKNel['[z1                                                    !6BM*Yu)Of*Qh+Sk,Un.Wq.Yt/Zt0\w2_|4`~4c5d6f6e8h9i:l:n;o;p=r>t?u@wAxAzB{AyD~DD}FFGEFHHIIFFFA~4l_kom|qxl_Rjpm{jbpxfgrfbjYw}f\{tg)Z|jy`kmxupVjkxsjtbccte`pmgjpxjt{tax{{kUnjhlittp}qxl_Rjpm{jbpxfgrfbjYw}f\{tg)Z|jy`kmxupVjkxsjtbccte`pmgjpxjs{saxzzjTmhfjfqqmymsh[Oejgtc\hn^^h]Y`Piqm,]z!9GP                                                    !$Lc1Ui)Of*Qi+Sk,Tn-Vp.Yt0[v1]y1]z3_}3b~4b4b4b7g9j:l:n:m;n<p=r>s?u?t>uAzAyC|C}C|EFGGHHHHIHHGA~3kM]f^]HYpmqpZrwUjruejzkq`\nymqjj[cryhtjqswmkwufVXqr|j{|limkjyVh\supuYr~\bUek`^HYqmqpZrwUjruejzkq`\nymqjj[cryhtjqswmkwufVXpq~|j{|limkjxVh\rtntXp|Z`Tch][FVl{hkjUkoObil\anaeVRajDl$Mf!                                                    #&Uq3Re)Og*Og)Ph-Tn-Wq.Yt/Yu1^y3_|3`~4b5d6f7g6f7g9i9l;n;p=q>t?t?v?t@xB{C}C|C~D}FEGGHHFGIHHGA~4mYbh}uY[alxxq_fzj`cltqzxuckmqlmpobpstqmjexmqzwuv}e_`sbjvx~xpmjlZZ~lx`mxozifxjabjmvY[alxxq_fzj`cltqzxuckmqlmpobpstqmjexmqzwuv}e_`sbjvx~xpmjlZZ~lw`lwnxgduh_`gj|rVX]grqkZ`rbY\cjgsmkhX_`Ho&Uq#                                                    $&Xv/Ma)Nf*Qi*Qh-Vo.Xq/Yu0[v1^y3_|4a4c5d6f7g8i7g7f8k;o<q=r>t>s@wAxAzB{AzB{C}C{D~DGFHHHIIHHF@|4mUXd||srJPsxhrcq|hfkx_zrlzu{{unpjxqklxYL{e_[^{{qmdzuYTqmhbsstv^rzu|qnkxq^_i}srJPsxhrcq|hfkx_zrlzu{{unpjxqklxYL{e_[^{{qmdzuYTqmhbsstv]ryt~zolivo\]f{xonGMnrbl]jsa^bnWngalhlkRz&Yw$                                                    %'\{(H])Og)Of)Qh,Tn.Xr/Yu0[w1]y2]z4a4c5d5d6e8i9i8i:m;o<q=q>s>t>tAxAzB{B{AxC}EEEFGGEEHIHHGA~3klm]ort{f`cxq}qrnYwcak[k|w}louVnzw}eYn}xxaPmvdcsnxxdPnConpclekxf}yx~qorzyvarst{f`cxq}qrnYwcak[k|w}louVnzw}eYn}xxaPmvdcsnxxdPnConpblekxf|yw}ompxws^noovb\^rkvjjyxeRlZXaR`nhmi'\|%                                                    %'\}'J`)Og*Qi*Ri+Rk,Tm.Xs0[w0]x1\x3^|4b5c6e7g8i9j:l:n;o;o<p=q<p=rAxAzAyAzC}DEFFFEHFFHHHHGA~3k_lmxlqem]wrrp^T~qj{{zkZ_^Wz`crLdlsfYgTurephjp^wVi~kbZmnB@~gnhfuskvqjur{mqem]wrrp^T~qj{{zkZ_^Wz`crLdlsfYgTurephjp^wVi~kbZmnB@}fngetri}}togrowjm|ahYqlliXNthapsnm`QUSNb']}%                                                    %']~)Ne)Ph+Rj*Rj+Sl,Tm.Xs0[w1^z3_|4a4c5d5d6e8h9j:l:n:m;o<p=r<p=r@vAzAyC}D~C~D}FFGFGHFFGHHGA~3lqqanpuz~eqlvWxsmmysssGrssvr_fnmxndd|{sntt~sYo~Z}sgqykppJpkiih~zhjm{~{fqquz~eqlvWxsmmysssGrssvr_fnmxndd|{sntt~sYo~Z}sgqykpoJojhhg}yghky~{xcmmq{ux`|zjenQoziccwslffe@`'^%                                                    %']~(Lc(Og+Rj*Sl-Vp.Wp.Yt.Wr0]x3_|4a4c5d5d6e8i9j:l:m;o<p<p>s>s@wAxAzB{C}D~DD~EFGGFEFHFFHGA~4mup}sctw{]awzqi]r~gvv~XYjrzddo~pzl~v||zylm|ZWzirYjv}scvrmswokwtv_l{}|^mzvdtw{]awzqi]r~gvv~XYjrzddo~pzl~v||zylm|ZWzirYjv}scvrmsvokvsu^ky|z\kvra{oruY]pxrwzzg`Ugq]hhoNN'^%                                                    %']~)Ne)Ph+Rj+Tm-Vp.Xr.Xr.Wr/[v1]y2^{3a}5d5d6e8h9j9k8k;n;p=r>s>s@wAxAzB{AzC|DEFFGFGEGIHHHGA~4mgNgpJs[u{wln|mOm^myzr}nnllmaowywvXnzejf}iu||mttltrw}nwvqmtomorkqslp~rpjsTlsKs[u{wln|mOm^myzr}nnllmaowywvXnzejf}iu||mttltrw}nwvqmtomork~qsko|qnh~pRjpHoXpuqghtgKfWeotngpcb`__U'^%                                                    %']~)Ne)Ph+Qi+Tm+Sl.Xr/Zu0\w1^z2^{2]z2`|4b4c5c6e9j:l:n8j9l<o>s>r>tAxAzB{B{D~C}D~FED~EHHHIIGHGA~4m`e|akh^r^hvemdfffss{|w~tmouadoet|jskYvuw|wytrpw|iss|mpzknbkh^r^hvemdfffss{|w~tmouadoet|jskYvuw|wytrpw|hrrzlnxil~_hd}~|YlyXam]e[]\\gfrswq'^%                                                    %']~(Md(Ne*Pg+Tm,Uo.Wp/Zu0\w1^z3`}4a4c3`|4b5d6f9i:l:n;o;o:m=r?u?vAxAzB{C}D~B|C{D~DDGHHHIIGED?y3jokq~wj}z|i[ociktYnryky}l_fxsylxpo{lZizotiotrvtt|[t{hfflygy}txxj~{}i[ociktYnryky}l_fxsylxpo{lYiyotiotrvtt{[szgeekw|evzqt}sfxuvcVh]b}cjQdtfk_qviw'^%                                                    %']~(Mc'Md*Qj+Tm-Vp.Xr/Zv/Zt0]y3`}4a3a}4a~5c7f8i9j:l:n;o<q=r>t?u@wAxAzB{C}D~DEFFGGHHHIIFEGA}3jy`hk~ln~txwptsnv_afTrz}pIFnj^omo}}~wn^j{}wfu}q}~v[_|Z]in~tuxi}hmnln~txwptsnv_afTrz}pIFnj^omo}}~wn^j{}wfu}q}~v[_{Y]im}ssvgzfjkzhjxorpilkyz}xvsciUWZJc'^%                                                    %']~)Nf(Of+Rj+Tm-Vp.Xr/Zv.Ys0\w2_|4a4c5d6f7g8i9j:l:n;o<q=q>t?u?u@vAzB{C}C}DEFFEGGGHIIHHGA}3kzr}wUMqkw{hhahqvxfef]^^QQtr`qS{{kpwvs{kq{t{{~`e}mxss}pfu{q_rma|xUMqkw{hhahqvxfef]^^QQtr`qS{{kpwvs{kq{t{{~`e}mxss}peuzp^q~k_y~tRKmgqx|sbaZ_hlm\[[SSSHH'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv0\w1^z3`}4a4c5d6f7g8h7f7f8j:l<q=r>t?u?u?uAzB{C}D~DEFED~DGFGIFHHF?y3k^\SxkZh[o|enrccoshiqeygkcRe`Whwpvxt{zqwl\aupqs~w\WshNVrvuJhcW{kZh[o|enrccoshiqeygkcRe`Whwpvxt{zqwl\aupqs~w[WshMUqtsIe`Uw~hWcWjv_hzyj\[fvyh^^dsqrX'^%                                                    %']~(Me)Og+Rj+Tm,Tn-Un.Yu0\w1^z3`}3_|4c5d6f7g7g7e:l:n;o<q=r>t>s?uAx@yAzC}B{DEFEEEGHFGFGHG@}4mbe]jtz{}\Wmsxxp~{|sxx{ogyt_i|xszpx{`_xp]tmmxxufysulmzq\/1v{mtqswmmamuz{}\Wmsxxp~{|sxx{ogyt_i|xszpx{`_xp]tmmxxufysullyp\/1uzkroqtjj^jquwxXSzfkonfuzruvmmetg'^%                                                    %']~)Nf)Ph+Rj*Sl-Vp.Xr.Xt/[v0]y3`}4`~4b5d6f7g8i9j:l:n;o<q=r>s?t@wAx@x@xAzD~C~EFEGGHHFFFFHG@{4mjqnq{vviRowc~pxzqux|v]fxqsvityu\opaprykttiaeomgmt|rttow|~Xztqqwv{st}vviRowc~pxzqux|v]fxqsvityu\opaprykttiaeomgmt{rttow{}XyroousxpqyqqeOiyp]u}gnoufiknqhSYg'^%                                                    %']~(Lc)Ph*Ph*Qi-Vp.Xr/Zv/Zu1^z3`}4a3a}4b6f5c8i9j:l:n;o<q<q>t?u@wAxAzAyAzD~DEFFFGHHFFGFFG@|4llrtpekkgmi]`uvr{okl`p{grho|cOxdtptqcZmzvvpvju~poraqzQkzxtmenvxmzx|wqekkgmi]`uvr{okl`p{grho|cOxdtptqcZmzvvpvju~poraqzQkzxsldmtvkwuysmbg|fbgcXZmmipueaaWcloZc'^%                                                    %']~)Nf'Md*Ph+Tm-Vp.Wp/Zv/Zu0]y3_|3_}4c4b5c4b7h9j9j:m;o<q=r>t?t?v?u@xB{C}D~C~EEEEGHHHGGGHFA~4ll{jdtpx{sk~xV`_xvrtrstieracwvtxu|w|sxqpqjxXfuurm{veEzc`xmetpx{sk~xV`_xvrtrstieracwvtxu|w|sxqpqjxXfuurmzueDxb_ujbplrumevpQZXnykguhee{e\'^%                                                    %']~)Nf)Ph+Rj+Tm,Uo.Xr/Zv0\w/[v1]y3`~4c3a~4b5c7g9j:l:n;o<q=r>t>r>t?u>uAyAzD~C~EDFGGHGHIIHHF@{3js|}yw{mrjy~xg|y|wswp|z|ojxev|xsn`up|n||nlMnpVhsw{hrvxq|x{mrjy~xg|y|wswp|z|ojxev|xsn`up|n||nlMnpUhsw{hquvo~xtw}hmeryzuo_rynsovvqqhd'^%                                                    %']~)Nf(Of*Og*Ph+Qj.Vo/Zv0\w1^z3`}4a4c3a~4c5d6f8h:l:n;o<q=q>t?u@wAxAz@xC}D~DEFFGGFFHIIHHGA~4lnzdiy}~^nsloqkkhnbzxrru}z{s{Xg~|fV|dht{us{}yrty}Mi~~~ztvy~g||diy}~^nsloqkkhnbzxrru}z{s{Xg~|fV|dht{us{}yqsx|Mh}}}ystw|eyw`eswwYgk{cef``]aWjhb'^%                                                    %']~)Nf)Ph*Qi*Rj,Tn.Xr/Zv0\w1^z3`}4a4c5d5c5d7h9j:k:n;o<q=r>t?u@wAxAzB{C}B{DEDEGGHHHIIFGGA~4mhyxVToyxzfs}fmx~uVvnttrTc\ekrn~itwrmqxpqlxpltywujc~d}z{xat|yVToyxzfs}fmx~uVvnttrTc\ekrn~itwrmqxpqlxpltywuib}c{yyv_qxuSQjsqr`kt^d}lqiNhaspd'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Wp.Xs0\w1^z3`}4a3a}5d6f7g8i9j9j:n;o<q=r=q=p=r=p>uAzC}C}B{DED~FDEGHIIHHD?y4m9Yn~r}tzokqko[u}^xgkuy}qv}v|yv}{vst}z}znsq^^{wvt{fxf>`qr}tzokqko[u}^xgkuy}qv}v|yv}{vst}z}znsq]]zvurydvd=^mzmwot~iejdg{Tk{qTsi[]e'^%                                                    %']~)Nf)Ph*Pi*Rk,Tm.Vo-Vq0[v1^z3`}3_|3`|5d6f7g7g9j:l:n;o<q<p<p=p=rAxAzB{C}D~DD~EEGEFGGIIHHGA~4mIX~uz_rtvYtx`tfi~l^^c~|lP~y}tul{u}ygshnqgoZhrnu~xmP_uz_rtvYtx`tfi~l^^c~|lP~y}tul{u}ygshnqgoZhqmt|vk|N]}{pt[lno{y}SjmXh{[]sn^R'^%                                                    %']~(Md)Og+Rj+Tm-Vp.Xr/Zv/[u1^z3`}4a4c5d6f7g7g8h:l:m;n;n<p=s>s?uAxAzB{C}D~C~EFFFGFEGIIFGGA~4mmisxy|~}ztvmxswumcuf|Nkvvtlngfh|wosyksuzsjolbr_vmw|kzryxy|~}ztvmxswumcuf|Nkvvtlngfh|wosyksuzsjolaq^ulv~ziwovssuvurvzk{lclz}fitoe'^%                                                    %']~)Me(Og+Rj+Tm-Vp.Xr.Xt.Ys1]y1]y2]z3a}5d6f7g8h9j:l:n;o<q=q>t>s>s@vAzB{C}C|B|D~FFEDFGEGIHHFA~3ljovxtevgiqmok}{}pmsb~n|rzvkrogatytwsyqticRvp{vy|ytevgiqmok}{}pmsb~n|rzvkrogatytwsxpshbQtnxsvy~up`}xo`bhe{z~vxb^w|'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr-Wr/Zu1^z2]z3^|3b~5d6f7g7g8h9k:n;o<q=r=s>s>t@v@y@x@xC|C}EFFGEFHHIIHHG?{2i|ramtkyvi~|uXolo}_wkoudjtbvekf^}aW{v[xosyuyykz~mNm||fpukyvi~|uXolo}_wkoudjtbvekf^}aW{v[xosyuyykz}~~lMl}zycmqgtqdw~wslRfceunTgt'^%                                                    %']~)Nf)Ph+Rj*Sk,Uo.Vo/Zv0\w1^z3`}2^{3b~5d6f7g7g8h:l:n;o<q<o>t?u?v@v?v@wAyB{C~DFFGFHGHIHHHGA~3jak~unqo^akkr~xsrWNqqo{yxngtk^tvyudlbjojLj~si|wpqz{mltxoqo^akkr~xsrWNqqo{yxngtk^tvyudlbjojLj~si|wpqz~ykjqtlmkZ]fflwnjhPHe|caj'^%                                                    %']~(Ld)Ph+Rj+Tm-Vp.Xr/Zv0\w0\w1]y2^{2`{3`}5d7g7g8h9k:n;n;o<o=q=r>sAxAz?v@xD~C}EFFGGHHHIIHHGA~4mbnxrf\y}{zyW_trx}xmsfs{|jsw{fg}||{mxyrf\y}{zyW_trx}xmsfs{|jsw{fg}{{ykuunaXsv{szypsnOVhztdhm'^%                                                    %']~(Me)Ph+Rj+Tm-Vp.Xr/Zv0\w1^z1\x3_}4c3`|4b6e6f7f8h:n;o<q=r=r>r>tAxAzB{B{BzB|D}FFGGHHHIIHHGA~4mP`tkMvRgpx~ueeTytzsro{nxt~x}qiwvtjw~yceugueXhzlMvRgpx~ueeTytzsro{nxt~x}qiwvtjw~ybdtftdVfwiKryNbjvo{usj\[Lkpsue'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv/Zu1^z3`}4a4c5d6f5c6e7g9i9k:n<q;o=r?u@wAx@yB{AyBzB{C}EFGGGFHIHGFF@|4lR]timhbNPmrm|m|kxn}xpsxs~l\\rsbpmnpii|}nvyokZmtnz~onbopkv{T]pvae`|~[IKewyy~ie{w~yzrez~rcnesnuhl|ur~l\\rsbpmnpii~tytaw~xxwixyrXcw}fid]KLfyzy|hcxtzttl_'^%                                                    %']~(Me(Og*Pi+Tm-Vp.Wq/Zv/Yt1^z3`}4a4c4c5d5d6f9i:l:n9l:n:m<o>r?uAxAzB{B{BzB|C}EFGGHFHIIHGF?{4mfVc|swx|]nvrs}mex||h|{th\\Fw7i}PuZz[{OuVyRv8i|OuZ{\{QvHqMsOuNuKrWyRvSwUxYzWyJrCoUwQvKrUwUwOuEoQv^}]}UwXzNtBnHqUxOuVy_}QvQv\{SwUxBnKsPu\{UxNtNuTwKrFpQvSw]|_}`~SwHq]|bYzVyVyZ{Sw^}UxUwQvMsQvBn7h{PuZz[{OuVyRv8i|OuZ{\{QvHqMsOuOuNx__hsk`~wm}}saw|p[f|q|rsvxXgnuijrc\lo|~l['^%                                                    %']~'Kb(Nf*Qi+Tm-Vp.Xr/Zv/Zt1^z3`}4a4c5d6f7g8i9j:l:n;o9l<p>t?u?u?u@xAzB|D~B{EFEGGHHFIIHHGA~4moifmxwp{hpUn~y||lptaj|}m^~JfqK`hGX]S^aEPPLWVKWWKXYKY[MX[NX[JVZLWZMX[PY\PY\PZ\QZ]R[]QZ]MY[LX[PZ\PZ\QZ]Q[]Q[]Q[]NY\NZ\P[]OZ\KX[NY\OZ\NZ\NZ\P[]P[]NZ\O[]P[]NZ\NZ\R[]Q[]NZ\OZ\P[]OZ\P[]NZ\O[]MY\NZ\KX[NZ\P[]OZ\P[]R[]PZ]NY\P[]PZ]NY\OZ\R[]R[]LY[OZ\S\^Q[]Q[]MY[OZ\PZ\R[]Q[]QZ]PY\OY\PZ\MX[IVZLXZLXZMX[NY[NY[NX[IVZKWYMWZLXZKX[LXYOXXQYWLSRT_aEU\K\bJajWtetjrvVntpm{nyyoijt{r|jtbiPgtpr~pbvsdf~|U'^%                                                    %']~(Md)Ph+Rj+Tm-Vp.Xr/Zv0\w0\x2^z3_}3a~5d6f7g7h9j9j8j9l:m=q>t?u>t?u@x?vB{D~DEFFFDD~D~HIIHHGA~4mqmj}}mswppxoQuzkgxTXt|m]dTtIcjijxn`tossadhafmiqwknvrlvykxjzsnsmspoqqorrprrprrpssqssqssqssqttrttrttrttruuruusuusuusuusuusuusvvsvvsvvsvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvtvvsvvsvvsvvsvvsvvsuusuusuusuusuusuusuusuuruuruurttrttrttrttqttqssqssqsspssprrprrorroqqoqqnqqnqqnppmpplqorlrhxxivqjtiltgpu_dkadinprqbsgfoPdfJgtf|vtps{{zy{oizyz~hmp~iiovyeJim_[isJ'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv0\w1^z3`}4a4c4b6f7g8i9j8i8j;o;o=r>t>s@wAx?vB{B{BzC~EFFGFFFFGGEGGA~3jlpeyxrtpcxuvnoxcgn|~sCrOfnqpnwcb`Tdddhqn\slatjevhixgiygjvijtjkxkjzlizki{kj{lj{lj|lk|ml|ml}ml}nl}nm}nm~nm~nm~om~on~on~on~on~onpnpnpnpnpopopopopopopopopopopopopopopopopopopopopopopopopopnpnpnpnpn~on~on~on~on~on~on~on~on~om~om~nm}nm}nm}nm}nl}ml|ml|ml|mk|lk{lj{lj{kjzkizkizjizjhyihyigxigvihrhitghwehvegtfgqhbqj`po\ffkgYk|eeqmiTdjWvruxwwv}vsdvt{lzlhz|ZliibbiW'^%                                                    %']~)Nf(Nf)Og+Tm-Vp.Xr/Zv0\w1^z3`}3`~4c4c6f7g8i9i:l:n;o;o=r=r?u@wAx@yB{AzBzB|C{EEGGHHGHHFGGA~4ltu}s{||nP|}yqcex|fjSoybsvggiqTbtcknp`ph_oeyfpU{LB??AFIHHIIIJJJJJKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKKKKKKKJJJJJJIIIHHHGGGFFFD?==@IRydmmbvme\kl]uckv[flhmgqsEbm]hz~~xj~uzowvuwgKxrrmftYZi|'^%                                                    %']~)Nf(Og+Rj+Tm-Uo.Xr.Yu0\w1^z3`}4a3a~4b4b5c5d8h:l9k9l:m<q<o=q>t@v@xB{B|D~C}EFFGGHHHGHHHG@}4mzl~|o}}rxny|po{PKitut}fW^`efqmm{_kSvv3(01*&$$$%%&&&&&&''''''''''(((((((((((((((((((((((((((((((((((((((((''''''''''''&&&&&&%%%%%$$$$###%)/.'1Ossx[hnhj_ffk\dpmxXjsRs|{{vx}iywjwvjozen{o}svcas'^%                                                    %']~)Me(Of+Rj*Sk-Vp.Xr/Zv/Zu0\w2_|3`~4c5d6f7g8i9j:l:n;o:m:l;n=p?v@v@yB{C}D~DEFFFGHHHIGHHGA~4mli~twrvxoseump|py`mSkvsrnP^Tqncebkgu70'%-4hdsa^mlaUfYsok^jr]wtw|tvo{psnqrimz_ludf{n|obi'^%                                                    %']~)Nf(Og*Qi*Sk-Vp.Xr/Zv/Zt/[v3_|4a4c5d6f7g8i9j9i:n;o<q<p>s>s@wAxAzAyC}D~C}EEDEGHHHIGFGFA~4mocvwv~}{lx}||vovfas{hgmY`SyvXhX`s2&!  !!!!!!"""""""""########################################"""""""""""""!!!!!!!!     $/\pdRtqT]dWhgmbqwj{yiytryxufquysuqke{t~vk'^%                                                    %']~)Nf(Ne*Pi+Tm-Vp-Tm.Yt/Yt1^z3`}4a3a~5d6f6e8i8h8h8k:m;o<p>t>s>t@w@yAyC}D~C}C}C}C~FGHGHGHHHGA~4mqkot~~myfnxw{tmXr{qotV[Ssqhq`iQy* !  #"""""########$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##########"""""""!!!!!  !'Mun\enmd[aWpmqXnvgy~{qqpyy~gr`yfv~mlusmf|q'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv0\w0\x2^z2]z2_{5c5d6e7h7g8h8j:l;o=r>t?u=r@vAzB{C}C|C}D~EEGGHHHIIHGGA~4msstfvpm~ivqpjouZ{|P^Or_s_l<} 8yoZhnYReQ}s~]vrr}~zwcqjwf}~talgf`chsrk'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv0\w1]y3`}4`~3b~4b5d6e7g8h8h8k:m<p=r>t?u?vAxAzB{C}C|B{C}EFGGHGFHIHGGA~3jzu|ornC~etz}{w{nzg]y~eOhhzWbhIz!         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            
Ev]bcwQkTm{v]v|n~|opjAx~`n}yrw~splocqlx`le'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv0\w1^z3`}4a3b~4b6f7g8i9i:k8j;o<q=r>t?u@wAxAzB{C}D~DEFFGEEEEGFGHG@}3kwuyzVpt|zh}~kf~ffhcfjggQm-&          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         #*Kh`bbchffhfy|cy|v~vSk{~xnuyrasusszrtptplo'^%                                                    %']~)Nf)Og+Rj+Tm-Vp.Xr/Zv0\w1^z3`}3_|4c5d6e6e7g9j9i:n:m<q;n>t?u@w@v@yB{C}D~DEFFGEFFGHIHHFA~4mjy~v}~nzyt|wvbq}UdR|odgb2(       !!!!!!!!!!!!""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!       %.b\|wh^XfRm|v[yq~tt{qwxwzyfqojx~ojurxlx'^%                                                    %']~'Kb(Md+Rj+Tm+Sl.Xr/Zv/[v1^z3`}4`~4c5d6f5d6e9j:l:m:m;p=r>t?u@wAxAzB{B|D~DEFFGFFFGIHHHF?z4mYm||v|v~x}eQa]fu]dcB!%       !!!!!!!!""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!       #=^]apVSeb}`}}atw||ouum~swuloxndiu'^%                                                    %']~(Ld)Ph*Ph*Rk-Vp.Xr/Zv0\w0\x2^{3^|3a~5d6f7g8i9j:l9l;o<q;n=q?u?v@vAzB{AzD~DEFFGGGHHIHHHGA~4mmauryup{x~uq]~c^awl_Zr'       !!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!      $Tm}qfXd]`y|Yxuxgxr~ztz|~niqwnx~qimmfbm'^%                                                    %']~)Me)Ph+Rj*Rj,Tn.Wq/Zv0\w0]x3_|3_}4c4b6f7g8i9j9i8k;o<q=r=r=p=rAx?wAzAzD~DEFFGGHHHIHHHGA~4lzcrt{yyz{v}oQ`Ziku`m5#%!"!     !!!!!!"""""""""""##########################""""""""""""""""""!!!!!!!!      ! 0nXf}bdRb^xfmiutx~}tt|}ss|vulqzvwve_`l'^%                                                    %']~)Nf)Ph+Rj+Tm,Tm-Un,Uo/Zt0\w2^{2]z2`|3a~6f6e8i9j:l:n;o<q=r>t?u?u@w@xAzC}D~DD~EEEEHHHIIGHGA~3kuuza~qNdVghUm&#      !!!!!!""""""""######################################"""""""""""""!!!!!!!!      "Mg~_aKdU`h{|xz_~~~yzu{x~uwq{}r'^%                                                    %']~)Nf)Ph+Qj+Tm,Tm-Tm.Xt0[v/Yt2^z4a3b~4c5e7g8h7f7g9l;o<q=r>t?u@wAxAzB{C}D~DD}EEFGHHGGIHHGA~4mwxzzktzxyyxsz~~|oovsji`n\pibI('     !!!!!"""""""##############################################""""""""""!!!!!!!     ##Bha[]iWqhgp}hi}whpytrrqpkvpsrpep~~oe'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Vo.Xt0\w0]y3`}4a4c5d5d6e8i7g8i9l:m<q<q>t?u>sAxAzB{C}D~DC}D~DFFHHHHIGGFA}2i{~}nv}}|}k[V_yhjdup*#!   !!!!!"""""""#########$$$$$$$$$$$$$$$$$$$$$$$$$#################""""""""!!!!!!!    &\nir`b[Y_gujqvwu}szsztuxlssh'^%                                                    %']~)Nf)Ph*Ph*Rk-Vp.Xr/Zv0\w1^z2_|3_}4c5d6f6e7g9j8i7i:l<q;n=r?u@wAxAzB{C}D~DEC|EGGHHHIIHGF@|4lrzrwuzor^]]cdqT      !!!!!""""""#######$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#############"""""""!!!!!!     J{z[gWW`zqj~uw~o~ryyfh{`av~xW'^%                                                    %']~)Nf)Ph+Rj+Sl,Tn.Wq.Yt/Zu1^z3`}3_}3b~5d6f7g6f7f8i9l9k;n=r=r=q?vAxAzB{C}B{AzEFFFGHHHIIHHGA~4mo{ri~}vyz{lsntpifeuimC   !!!!""""""######$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##########"""""""!!!!!!    5de`j_gdmifszzmex|zunyooxojpay}j'^%                                                    %']~(Lc(Of+Rj+Tm+Rk.Vo.Ws/Zt0]x3`}4a4c5d6f7g7g7f9i:n;n<q=r>t=q>t?t?wAzC}C|C}EFFFGHGHIIGHG@{2i`qysq_opj{~pZ_gumghpt/!   !!!!"""""######$$$$$$$$$$%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$########"""""""!!!!!    "Dbdhlcjlef[gojix|so\k|~}j}cuz~prrvges{'^%                                                    %']~)Nf)Ph+Rj+Tm,Tm.Wq/Zv/[v1^z2^{3`~4c4b4b~5d8i9j:l:n;o<q=r>t?t@wAx@xAyAzB{B|C|DEFGFDGIIGGG?z3jku|nqvvztwwVUb~ndY{ "   !!!!"""""#####$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$#######""""""!!!!!     *7Esahiqf\kavlaqv`i\cmfu|kmq|~osvknv|w}|yjoqs'^%                                                    %']~(Me)Og*Pi+Tm-Vp.Xr/Zv0\w1^z2^z2^{3`|3a~4b6e8i9i9j9m;n<q=r>t?u@wAxAzB{B{C}C~C}BzDGGEEHIHEHF@|4lglw_f{x|{toj`l}laL"   !!!!"""""####$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$#######""""""!!!!!    *9>{Momh^kgQtlUykYhk]hii`dq\bp]dkqqrz\bt~q|squiwr|x|{v'^%                                                    %']~)Nf)Ph*Pi*Rk-Vp.Vp/Zv0\w1^z3`}4a4c5d6f7g8i8i:l:n;o;p<p=q>r@w@v@xAyAzD~DEEFGFHHHIFFFGA~4l~}o{twnwvjysipup`C!     !!!""""#####$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$#######"""""!!!!!    /4BydknfQiTg\zhmdkrfduvbuohgpl[]laUfmg_nxqvor~||we~lkrdp}x}'^%                                                    %']~(Lc)Ph*Qi+Sl-Vp.Xr/Zv0\w0\x3`}4a4c5d6f7g8i8h9i8k:m;o<p=r=q@w@w?w@wAyC|DEFEFFHHGIIHFF?{3kr~{rujuroysqnht^;#   !!!""""#####$$$$$$%%%%%%%%%%&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$######""#""!!!!!    *4Mwzmigbhetknhmreppdokipfsnd|bql_{]hnzlZtlWcfif`nr}~v|m~~mc{u}qdhg`y'^%                                                    %']~)Nf(Og*Qj+Tm-Vp.Wq/Zv.Xr1^z2^{3_}4c5d6f7g8i8h9j:n;o;o=q>s?u@w@v?w@xC}D~C~EFFFEGHHIIHHF?z3kuymynowtqhaui7"   !!!!""""####$$$$$%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$$#####""!!"!!!!!    #/I~qos|p\tsZknsmotoonnqlnrkipiklmrfwhp^ivX_eqVgrlieejd\gfkfjxt{wfztt{vvuRq'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Vo.Yu/[u1]y2^z3_|3`|5c6f7g8i9j:l:n;o;n;n=r?u?u@v?wB{C}D~C~C|FEEGHHHIIHHGA~4l~vpv|pxopqnjaq}/"   !!!""""####$$$$$%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$######"!!!!!!    "&?lslildvrnltviquqqqpppnonnnnpppnnnkkkkjklllhhhhhhihhfffaab\\\gtyskpwqfvnvx~_^'^%                                                    %']~)Nf(Of+Rj+Tm-Vp.Wp.Xs0\w1^z3`}3`~3a~3`}4b~6e8i9j:l:n;o<q=r=r<o>t?u@x@wB{D~C~C|EDEFGGGHIHFGA~4luaz_odqwpqqnjcs/ "   !!!""""####$$$$$%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%$$$$$$$$#####"(# "!!!   '@aytj}grntspuuqotqqqvtovppppppooonnnlllllllllkkkiiihghggf]]]aaaqz~zwg}]kx{y^wiu~~wtroone'^%                                                    %']~)Nf)Ph*Ph*Rj,Tm.Wp-Up/Zu1^z3`}4a3a}3a~5d6e6e8i9j:m;n<q=r>t>r>s?uAzB{C}C}C~EFFGGHGGIHHFGA~4mrwv{rs}yx{zgqrs~miar~0 #  !!!!"""####$$$$%%%%%%&&&&&&&&&&''''''''''''&&&&&&&&&&&&&&&&%%%%%%%%%$$$$$$$#####"(% "!!! 3\wlofprrwruttmwsevrgurxotmupppoooooonnnmmmlllkkkkkkbbb^^^kw|~}s{wl}ltpwnpnnwv'^%                                                    %']~)Nf)Ph*Ph*Qi,Tm.Wq-Up.Xr/[v2^z4a4c3`}4b6e8i9j:l:n;o<q<p=s?u@w?t?wB{AzD~DEFFGGHHHIHGFFA~4mz||px}nooppplcs/ #   !!!"""####$$$$%%%%%%&&&&&&&&'''''''''''''''''''&&&&&&&&&&&&&%%%%%%%%%$$$$$$#####"##!!!!$Mr|~~plts|usvut{ol{oqypowrjuuftthuttqsynqpppooonnnmmmnnnkkkbbbdhj{}xyxuj{ptu|euv{px'^%                                                    %']~(Lc)Ph+Rj+Tm-Vp.Xr/Zv0[v0\w2^z4a4c3`}3`|5c8i8i:l:n;o<q=q=r>r@w@v@yB{C}D~DEEFGGHHHIIHFG?{4mqzmnsrrnbs~.!  !!!!"""###$$$$$%%%%%&&&&&&&''''''''''''''''''''''''&&&&&&&&&&&%%%%%%%%$$$$$$#"#$""(% =issnrvq{szzutxyrukztk{ntur{pwzqywqwopqmtplsoppponoooohhhdddkuy|}{x}~{||}|uyghk]s'^%                                                    %']~)Nf)Ph*Qj*Rj,Uo.Xr/Zv0\w1^z3`}4a3a}4a~5d6e6e7e9i:n:l;o=r>t=q>s@vAzB{C}D~C~C|DFGGHHHIIGGGA~4mi_~zzszzdosrqmcs/!   !!!"""####$$$$%%%%%&&&&&&''''''''''''''''''''''''''''&&&&&&&&&&%%%%%%%$$$$$$##$#""*F[sgxf{txysysz|xzv|vw}s{|uw|tx|rz}nz{oywpuvpqusnqtllllmlmcccvyqrf\~yrrkqx||nkkddcZY'^%                                                    %']~)Nf)Ph+Rj*Rk,Un.Wq/Yu0\w1^z3`}4a4c5d6f7g8i9j9j9l9k:m<p>t?u@wAxAzB{C}D~C}B{EFGGFFFHIHGFA~4mmmio{pzwxgossqmcs/"   !!!"""###$$$$%%%%%&&&&&&''''''''''''''''''''''''''''''&&&&&&&&&%%%%%%%$$$$$$######(?Vftvzqvi~y{|w|uxvzyyox|ixwkztruurryktxgsxkrulopurrxnlmcbhkltqn{dk`xtk{kvk}sz|nowwnoti'^%                                                    %']~(Ld)Ph+Rj*Sl,Tm-Tm-Wr/Yt0\x1]y4a4c5d6f7g8i9j:l:n;n:n;n=q?u@wAx@xAyAyB{DD~FFFGHFFGIHHG@|2iruo~rm{rtsrmbu0 !  !!!"""###$$$$%%%%%&&&&&'''''''''''''''''''''''''''''''''&&&&&&&&&%&%##%&&$$%$#"!8JW||yzhn{{yxt}}}zyzv~ywwzvrywtxw{uvuusowqjvqkvprtpsooiefhjorGI~}|r}mhz~~x{|sw'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Wp-Wr0\w1^z3_|3_}4c5d6f7g8i9j:l:n;o<q=r=q=q@w@v@x?v@xB{DEFEGGHHFHIHHGA~3kz~{hxsntssndu/#  !!!"""###$$$$%%%%&&&&&''''''''''(((((((((((''''''''''''''&&&&&&&&%"'.-"&% #$$!)8Ad|u|x~||zw|z~}|||~|{|y|zzvy{tz{syywxvturw~uustouuqurokfcpprnvd{qy~w{{}xeiv'^%                                                    %']~)Nf)Ph*Qj*Rk-Uo.Wq.Xt0[v0\w2^{4a3b~4b6f7g7g8h9j9k9k<q=r<p<o>s@v?wAyB|D~DEFEEDFHHGHHHG@|4mzy~~z|ru}kjttrnit/&  !!"""###$$$$%%%%%&&&&&''''''''((((((((((((((('''''''''''''&&&&&&%%&%'(''% "0Tpzz{v{}}~~~|~~}}{||z{{yzzzzzyyyzxxzyyvuvsvvqvusttrrsgghkqtwg~~yuyxtxukm~~yuqrht{~jq'^%                                                    %']~)Me(Og*Pi*Rk,Tm.Vo.Ws/[v0]x2_|4a4c5d5e5d5d8h9j8j8i<q=r=r=q>t>s?vAzC}D~DD}FFGFGHGHFGGFA~4m|~ynuv|lttrngt/% !!!"""###$$$$%%%%&&&&&'''''''((((((((((((((((((('''''''''''&&&&&&%%(%'.*#!/C[{~px|~~~}}}||||||{{{zzzyyyxxxwwwwwwwwwuuussslllotvp{{]xu}vxglm}zxvwvm'^%                                                    %']~)Nf)Ph*Pi*Qi,Tm.Wq.Xt0\w1^z3`}3`~3b~5d6f6e6e7g9j9k9l<q=r>t?u@w@wAzB{C}C}DEFFEGHHHGHFGFA~4m{uzyrzwlutrnhu/% !!!"""###$$$%%%%&&&&&'''''''((((((((((((((((((((('''''''''''&&&&&&%$')$&/.Acy{{{}q~~~~~~}}}}}}|||{{{zzzyyyyyyxxxyyyxxxtttmmmquw~vv|}|s|kqvv{woz'^%                                                    %']~)Nf)Ph+Rj*Rj,Un.Xr.Yt/Yt1]y3`}4a3a}4b5d6e8i9j:l:n;o<q=r=q>s@wAxAzB{C}C|C}EFEGGHHHIIGGGA~4m}|~t}zv}{dkttrnhu/% !!"""###$$$$%%%%&&&&'''''''(((((((((((((((((((((((''''''''''&&&&&%&(%&'" *B^y~ou}~~~~~~~}}}|||{{{{{{zzzyyyxxxwwwwwwooollldv{p|vr~muqoknp|yt'^%                                                    %']~(Ld)Ph+Qj+Sl-Vp.Xr/Zv.Xr1^z2^{4a3b~5d6f7f6e9j:l9l;o<q=r<p=q@wAxAzB{C}D~DEFFGGHGGIIHGGA~3k~{~yQshmutsoiu/&!!!"""###$$$%%%%%&&&&''''''((((((((((((((((((((((((('''''''''&&&&&'$&&&%(Q{zvx{~~~~~}}}~~~}}}{{{zzz{{{xxxyyyuuulllxyyw}pny{{uNmx||zvyo{vjto'^%                                                    %']~(Ld(Ne)Og*Qh-Vp.Xr/Zv/Yt0]y3`}4`~4c5d6f6e6e8h9j8k:m<q=r>t>s@w@w@x@xB|BzC}DEFGFEGHIHGGG@|2ie|wumutsoiu/&!!!"""###$$$%%%%&&&&''''''(((((((((((((((((((((((((('''''''''&&&&&&%#'/';nts}~~|~~||~~~~~~~~}}}|||{{{zzzyyyzzzwwwllloy|}awy}n~~}{}zvz'^%                                                    %']~'Kb(Ne+Rj+Tm-Vp.Xr/Zv0\w1^z3`}3_}4c5c5d7g8i8h:k9l;o;o=r>t?t@wAx@xB{C}D~C~D}EEGEFHGGGGHF?z1gtypluusoiv/&!!!"""##$$$$%%%%&&&&''''''(((((((((((((((((((((((((((''''''''&&&&&%$*3(&R{}}yz{~|yx|}~~}}}|||{{{{{{zzzyyyvvvkkl{|pzytxu|{u'^%                                                    %']~'Ja'Lc*Pi+Tm,Sl.Xr/Zv0\w1^z3`}4a3a}4b5d7g7g8h9j8j9l:m=r>t>s@wAx@yAzC}C|DEEFGGFGFGGHHF@|3keyomuusoiv/& !!!""###$$$$%%%&&&&''''''((((((((((((((((((((((((((((''''''''&&&&&&%)(:^~||~wy}{~~}||||||||||||yyy{{{qqqtnzx~vyxns}'^%                                                    %']~(Me(Of*Qi*Sl-Vp.Xr/Zv0\w0[w2^{4a2`|4b6f7g7g6e9j:n:m<q=q=r>r?vAxAzB{C}D~C~EFDGGHEFHHGHGA~4mwl~zsvuv|sofx5"# !!"""###$$$%%%%&&&&''''''((((((((((())((((((((((((((('''''(!%-$$&3Gk~~}}~~~~}}}|||{{{}}}vvvnpp}~|r}~ys{x{rwwomw'^%                                                    %']~(Ld'Md*Qi+Tm-Uo.Xr.Xs0\w1^z3`}3_}2`|4b6f6e7h9i:l:n;o;n<o=r=r?vAx@xB{C}D~C}D}EEGGGFGGHHGGA~4mnxwuuzupcw8!% !!"""###$$$%%%%&&&&'''''(((((((((())))))((((((((((((('''''&)10"!*%9dp~zy~~~}}}|||{{{zzzvvvuvw|utux}~pjlw'^%                                                    %']~'Ja(Ne+Rj+Tm-Vp.Xr/Zv0[v1^z3`}3_}4c5d6f6e8i9j:k9l;o:m<p>t>t?v@w@yAyAzD~DEFEGFGHHHHHHGA~4m~osuuu|upbu7!#!!!"""###$$$%%%%&&&&'''''((((((((())))))))(((((((((((('''''&0-#&)$+Bnu~~~~~~~~~{{{{{{pppr|{~yvz{m{{'^%                                                    %']~(Ld(Of+Qj+Tm-Vp.Xr/Zv0\w1^z3`}3`~3a~5d6f7g8i9j:l:n:m:m<p>t?u@wAx@yB{B|C}DEEEGFGHHIIGFFA~4mvhrst}vqbt~5!"!!!"""##$$$$%%%&&&&''''''((((((((())))))))((((((((((((''''')+'U~z~{~~~~~~}}}|||}}}nnntwZ|wrz~}}{zu{}|zozyn'^%                                                    %']~(Lc)Og+Rj+Tm-Vp.Xr/Zv0\w0]x3_|4`~4c5d6f7g8h9j:l:n:m<q=r>t>t?v@wAzB{C}BzB{AyEFFFHHGHIHHGA~4mztrtu{vpcr~7!"!!!"""##$$$$%%%&&&&''''''(((((((()))))))))(((((((((((('''''(!6$Jzzx|~~~}}}|||xxxoqr{u~quv}~}|}u||r'^%                                                    %']~)Nf)Og*Pi+Tm,Uo.Vo/Zv0\w0\x3`}4a4c5d6f7g8i9i9j:n:n;o=r>t?t@wAxAzAzC}D~DEFEFGHHEGIFGFA~4m|~}rsu{vpcr~8 !!!!"""##$$$$%%%&&&&'''''((((((((()))))))))((((((((((('''''''+&1ow~~{|~~~~~~|||xxxqtu}z~uukmd'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Vo/Zv0\w1^z3`}4a3b~4b6e7f7h8h9j:n;o<q=r>t>r>t@v@y@xB{D~DEFFGGGHHHFFGG@|4mzuoqtu{vpcr~9  !!!""###$$$%%%%&&&&'''''((((((((()))))))))(((((((((((''''''(&&f~|}~}~~}}}wwwqtuyw|p{||zv{mt'^%                                                    %']~)Me)Og+Rj+Tm-Vp.Xr.Xs0\w1^z3`}3`~3a}4b5d5d6f8h:l:m:m;n=r>t>t?u@vAzB{C}C}DEFFFGHHHIHHHG@|4ml{~~m{|wtrtv{vqeq7 !###%&$%$$&'&&&'''''((((((((()))))))))((((((((()(%')'&$&.fz}}}}~~~wwwqsuyzy~z|v}{jwuoy}|ro{'^%                                                    %']~(Me)Ph*Qj*Qh*Qi,Sl/Zv0\w1^z3`}4a3a}3`}5d7g8i9j:l9l;o<q=r>t?u@wAxAzB{C}D~C~EFFEFHHHHHFHGA~4mu~z}~pvtzxnduzA,--/*&"$%'*$!'('(''&'((((((((()))))))))(((((((((&'-& &)/;m}}rzxxxprs||vx}y~wytyz{'^%                                                    %']~)Nf)Ph+Rj*Rk,Tm.Wp.Xt/Zu0\x2^{4a3b~4b5d7g8i8h:l:n;o<q<p>s?u@wAxAzB{B|D~DEFFGGHHHIIHFGA~4mswpuzpuyyku|pF}BNQYSPLB93-0("!%'%#&'&'&&'*+)((((((()))))))))(((((((()#%3($44"r~~~~~~|||pqr|q~|xlp}~}v|'^%                                                    %']~(Ld(Og+Rj+Tm-Vp.Xr/Zv/Zu0\x3`}4`~4c5c5d6e6f8h9i:n:m9l:m=s?u@w@w@xAyB{D~C~D}EFDFGGGIIHGF?z3k}|two~tpxtRMZZ`j{ty}wtxp}r}lcX@61$.!#$")-+++((((((()))))))))((((((((((&$,/$)!R}{{{prsy|uuj|rxv|p{'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv0\w1^z3`}3_}3a}4a~4b5c7g9i:l9l9k9k<o>t?u@w@v@xB{C}D~DD~D~EFGHHHIIHHF?{3l{w~puvzvtVz7''!$.5FXfrwyu|{r~~qV>/'.))*$!%((((((())))))))((((((((((''%(5'F~~~~~~ttt|q|xz}ihywo~{orpk'^%                                                    %']~)Nf)Ph+Qj+Tm-Vp.Xr/Zv0\w1^z3`}4a4c5c5d7f8h9j:l9m:m;p<p=r>r>s?u@xAzC}D~DEEEFGHHHIIHHGA~4m~xxszzqpU}/%"(?Xizv~|}~||^>;#!-%)2%(((((()))))))))((((((((()%%*%($1{vvvz|np~~~^{'^%                                                    %']~(Me(Ne*Ph+Tm-Vp.Xr.Yt.Ys0[w2^{4a4c5d6f7g8i9j:l9m:m<q=r>t?t?v?tAzB{C}D~DEFEEGGHGIIHHGA~3ksvrr]y3 #!#,(3[qt1)40+$ +1(((((()))))))))((((((((((''#$!kz}}}qx{}z|}y|}sykk'^%                                                    %']~(Md'Md*Qj+Tm-Uo.Wq.Xs/[u0\x2^{3_}2`|4a~5d7f8i9j9i:n;o<p<o=r?u>tAx@xB{AyD~C}EEDFGHHHIIGHGA~4mno~trvrto\{5 ) $(('%"$,8fx{i/$-)')(((((()))))))))(((((((((',*"Fopq{umylu~}{zyp'^%                                                    %']~)Nf(Og+Rj+Tm-Vp.Wq.Yt0\w1^z3`}4`~4b3`}6f7g8i9j:k:n;o<q;n<p?u@w@w@xAzC}D~DD~FEFFFGGIGDGF@}4m|pqxrvp^y8 '%))%!2a~{E(.&(((((()))))))))(((((((((',) ={xxxy|xw~zyyyx'^%                                                    %']~)Nf)Ph+Rj+Tm,Tm.Xr/Zv0[v0\w2^{4a3a}5d5d7g6f8i8i9l;o<q=r>t?u@w@vAzB{C}D~DD}EDDDGGHIFEHGA~4m}{xstwstax:!%#!"%$7\R7#",('))((()*))))))(((((((((''& "attt|~v{pz'^%                                                    %']~)Nf(Og+Rj+Tm-Uo.Xr/Zv0\w0[w1]y4a4c5c5d6f8i9i9j:n:m<q=r>t?u>t?uAzB{C}D~DEFEFFGHHHIHFGA~4m~wpvwsrhw3 $$!"$)-'"'Na##0),##*--'&*)))))((((((((((%!?uuupn~stwi}'^%                                                    %']~)Nf)Ph*Pi*Sk,Tm.Wp/Zv0\w1^z3`}4a4c4b6f7g8i8h8h8k9l<q<p>t?u@wAxAzB{C}B{C~EFFGGHGGHIHFF?{3kxromvvtplw/) "####"&($)
*S{X7(-"!+/-'&*))))((((((((((('T~~~tuurwtn~x|xwvppofe'^%                                                    %']~)Nf)Ph*Qi+Sl,Tn.Xr.Xt0\w1^z3`}4a3`|4a~6f7g5d8h:l9m:n;p=r>s=q=r@vAzB{C}D~DAyD}FFGHFGGHHHG?{2hxxt|}rnvvtpjw0& !"""###&("(33%!S{}yb$(&')((+*())))(((((((((('+#&h~~~}}}{|vz~~zrxmwxx~yyzz~s'^%                                                    %']~&I_(Ne*Ph*Rk+Sl-Un-Wr0\w0]y3`}4a4c5d6f7g8i9j:l:n;o;o<o>t=r>s@v@xB{C}D~DEEFGGHHHIIHHG@{2h}|~znwvtpjw0& !"""###&&#!%05%	pvF'!*.(%'.,())))((((((((((&,)5vvv~YZyu~'^%                                                    %']~(Md(Og)Ne*Rk-Vp.Wq.Yu/[v1^z3_|2^{2_z4b6f7g8i9j9j:n;o<q<p=r?u>s>s?wB{C}C|C~EFFGFHHHGIHFF?{3lx}nwvtpjw0& !"""###"!$ 32 B|u2.0%#%..())))((((((((((&%(Nzuvvv}s}pu'^%                                                    %']~(Ld)Ph*Qj+Tm-Vp.Xr/Zv/Zu0\w3`}2^{3`|4b5d7g8i9j9j9l;o<q=r<q=q>s@v>u@xC}D~DEEDFFHHHIHFHGA~4mumvvtpjw0& !"""##$ -()0(%&]B!-0"%&-.())))((((((((((' )kv{zzz}v~wxz}}u~v}'^%                                                    %']~)Nf)Ph+Rj*Sl,Tn.Xr/Zv0\w0]x2^z4a2`|3`}5d7g8i9j:l:n;o<q=r=r=p>tAx@yB{C}D~DEFEGGHHHIHFHGA~4m{nwvtpjw0& !"""##$ "35'$% $SV(-,)))+())))(((((((((((0~wwwz}lsyxw'^%                                                    %']~(Md(Nf+Rj+Tm,Uo.Wq/Zv0\w1^z2]z2^{2`|4b4b6e8i8h9k:n:l9l;o>t?u@wAxAzB{C}D~DEFDEFHHGHHHHGA~4m~nwvtpjw0& !"""####$,/(#%&!Jk0-'0-%()))))(((((((((((:|||{qy|}'^%                                                    %']~(Lc(Ne*Qi+Tm-Vp.Xr/Zv0\w1^z2^{2]z3a}5d6e7g8i9j8h8k9l:m<p>t?t?u@w@yB{C}D~DEC|B|C}DEGGGFHHGA~4mtnvvtpjw0& !"""###$%"#)++-<|z6''2-#()))))(((((((((''Cxxx|{sy}|z|t|'^%                                                    %']~)Nf(Og+Rj*Sk,Uo.Xr.Xs.Xr0[w3`}4a4c5d6f7g8i9j:l:n;o<q=r>t>s@wAxAzAzB{B{C~EB{D~FEGHHIIGHGA~4m{yzmvvtpjw0& !"""###'(#+%!#.&D{*!+%0'&-())))((((((((('%"Jvvvywu|n|}'^%                                                    %']~)Nf)Ph+Rj*Rj+Sl.Vo-Wr.Ys0\x3`}4`~3a~4c6e7g8i9j:l:n;o<q=r>t>s>t?u@xAyB{C|B{C|DEGFHHHIIHHG?{3k]wmvvtpjw0& !"""###%%#(--% "Fj%',#.(',)))))((((((((('&!Jssseurwx~'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv0\w1^z3`}3_}4c5d6f6f7g8h9j:n;o<q=r>t>s?uAxAzAyB|C}DC{FFGGHHHIIHHF?{3llxnvvtpjw0& !"""##$! *0-)&'($MP(,+ ++)*)))))(((((((((''Itttxv}uwz{{p'^%                                                    %']~)Nf)Ph*Pi+Tm-Vp.Xr/Zv0\w1^z3`}3_}3a}4a~5d6e7g8h9j9k;n<q=r>t?u@wAxAz@x@xC|DEFFGGGHHIIHEFA~4mnwvtpjw0& !"""##$!&% (22"&n}<$2+).)))))))(((((((((''Fxxxt~'^%                                                    %']~)Nf'Lc+Rj*Sk,Tn.Xr/Zv0\w1^z3`}3_|3a~5d6f6e7h9i9k9l9l9l<o>t?u@wAxAzB{C}C|AzEEFGGGHHIHGHF?{4mnwvtpjw0& !"""###$$  *+&Vi+"5,(/+()))))((((((((('(?}}}uw}y'^%                                                    %']~(Md(Of+Qj*Rj,Tm.Vo/Yu0\w1^z3`}4a4c5d6f6e6e8h:l9l9l;o<o;o>t?u@wAzB{C}B{B{C}D}DGGHHHIGHEGA~2i}nwvtpjw0& !"""###&)!!(+%/B$0*"(-*()))))(((((((((('4xxxh{|ssr'^%                                                    %']~(Lc)Ph+Rj+Tm,Uo.Wp-Wr.Xr0\w3`}4a4c5d6f7g8i8h:k:n9k:m<o>t?u@wAxAzB{C}D~C~EFEDFHHHHIHHFA~4m~~vynwvtpjw0& !"""###')"+8/*n{}]!&'(+)))))))))(((((((((('"/k~vvvyvu~rk~}'^%                                                    %']~'J`(Ne+Rj+Tm-Vp.Wp-Wr/Zu0\w1\x3_}3a}5c6f7g8i8h:l:n9k8j;n>t?t?v@wAzB{B|D~DEFDFGHHGHHFHGA~4m~onwvtplw/( !""$%# &''7#/mb--'&5+$&))))))(((((((((('%,[|}}}{{{nzrv'^%                                                    %']~'J`'Md*Og*Rj-Uo.Xr-Vq.Xr0\w3`}4a4c5d6f7g8i9j:l9l:l;n<p<o<p=r?uAzB{B|C|C~EFFGGHHGHIHFGA~4mp~txqmvttphw3$$ #!#.. )$!Y{|s.(-''1*%&))))))(((((((((('%"Jnnno{przym~'^%                                                    %']~)Nf)Og*Ph*Rj-Vp.Xr-Vq-Wp/Zu3`}4`~4b4c6f7g8h9j:l9k:n<p=r>t>s>s>s?vAzC}D~C~D~FFGGHHGIIHHF@{3jr|uvrvvtr_x8&!   "**"$#Dd[4")'(*('()*))))))(((((((((((%2xxxxw|~o}~ooy'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Vp.Xs/Zt0\x1\x2]z2_{4b6f7g8h7g8i9l;o<q=r>t?u@w@v>uAyC}C}DDFFFFHHHIIHHG@}3kw~xtvsp_x5"&"",/%(M~xG&+"((((((()))))))(((((((((((%,`~~~uuudtvz{x'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Vo.Yu0[v1^z3`}3`~2`{3`}4b6f8i9j:l:n;o<q=r=r?t@wAxAzAyB|D~DDFFFDHHHIHHHFA~4m}|vrto^x4)'$#%*+( (6:h|zh&#+#"+((((((())))))))((((((((('&"!=}tttix|}z~us'^%                                                    %']~(Kb(Ne*Pi*Rj,Tm.Wp/Zv0\w1^z3`}4a4c4b4b6e8i9j9j8j9l<p=r>t>r@wAx>u?vC}B{C~EFDGGHGHIIHHF?z3ky|ztvsqXz1$# ')0Sz}h()7/#"'..((((((())))))))((((((((('(&$\z~~~rttU{m|yk'^%                                                    %']~(Kb)Ph+Rj+Tm-Vp.Xr/Zv0\w1^z2^{4`~4c5d6f7f8i9j:k7i8j<q=q<p?u?u@wAzAyC}D~DEFFGGEGGIHHHGA~4m}rsv{uqX|1$%9Rk}{rux~Z*+&"('(./'!((((((())))))))((((((((('-*'+~uuugquiy~~s'^%                                                    %']~(Ld)Og+Rj+Tm,Un-Tm.Ws0[v1^z3`}3_|4c5d4b7g8i7g9i:n;o;p=q>t?u@wAxAzB{C}D~DDEFGEGHHIIHHGA~4myzvvv}upYz8(&!*0:Ph}xxz}v|wtZC0*)#,-&$'-.'$((((((())))))))((((((((('*-)!]~~~~pppkwqpxx'^%                                                    %']~(Kb)Og+Rj+Tm-Uo-Tm-Vq0\w1]y1]y4a3b~4c6f6e6f7g8i9k;o<q=r>t?u@wAxAzAyC}C}B|EEFFDHHGIIHHGA~4mkv|unoyuOGRLPp{wwvuxwrzu~sbRC9/($%'!)'#0.(*-((((((())))))))((((((((((&*.#&(hxxxjnoZz}'^%                                                    %']~)Nf)Ph+Rj*Qi,Tm.Xr/Zv/[u1]y3`}4a4c5d6f7g7g7g8i8k:m<q<p=q?t@wAxAzAyAzAyB{EFFFDGHFGGGHG?{3jqs|xnzoO|GzT}V[TUVM?2-0'!%&&'*)$#$'&$((((((())))))))(((((((((('"';( Frrrbmql~'^%                                                    %']~)Nf(Nf*Og*Rj,Tm.Vo/Zv0\w1^z3`}4a4c5d6f6e8i7e8h:n;n:m:m<q>r?u@v@xAyB{C|DEEEEDFGHHGGHG@|4mutwtnkuzC.033+)(###""%&'&()'#$''%((((((())))))))(((((((((((03!a|uq}}}ttt_szb'^%                                                    %']~(Lc)Og*Ph*Qi,Sl.Vo.Yt0\w0\x2^{3`~4c5d6f6e6e8h:l9l:n<q=r<q?u@wAx@x@wB{D~DEFFGFHHHIIHHGA~4mrttzvq`q4!#$#%%$%&&%&&&%&'(('()((((((())))))))((((((((('++'8+1n}{{{hjkZqzk'^%                                                    %']~(Me)Ph+Rj*Ph+Rk.Xr/Zv.Ys/Zu2]z3_|3a}4b5d6e7g8h:l:n;o<q=r>t?u@w?uAzB{C}D~C}D~EEFFGGHIIGGF@{2iwqtu{vpcr~8  !!!""###$$$%%%%&&&&'''''((((((((()))))))))((((((((%09&(2+#1p~~~wwwkmnXr{y}'^%                                                    %']~)Nf(Og)Og*Rk-Vp.Vp.Yu0\w1^z2]z4a4c5d5d5c7g9j:l:n;o<q=r>t>r?v@v@xB{B|B{B|C}DFGEHHHIIHGF@|4lpyrtu{vpcr~8  !!!"""##$$$$%%%&&&&'''''((((((((()))))))))(((((((('+-#!(,'-lt{}}}uuujlm^u}yl~'^%                                                    %']~'Kb(Nf*Og*Rj-Vp.Xr/Zv0\w1^z3`}4a4c4a~6f7g8i8h9j8j8i;n<p;n>s?uAxAzB{C}D~DEEFDDEEFHIHHGA~4m~rtu{vpcr~8  !!!"""##$$$$%%%&&&&''''''(((((((()))))))))(((((((()$"! '-)/uxs~~~~~~ssslno]t}yy'^%                                                    %']~)Nf'Md*Pi+Tm-Vp.Xr/Zv0\w1^z3`}3_|3b~4b6f7g8i8i9j9l:m;n;n;o=r?uAxAzB{C}D~DD}FFGFEEHIIHHGA~4mrtu{vpcr~8  !!!"""##$$$$%%%&&&&''''''((((((((())))))))(((((((()%#**!(02$:iw~~~~~~~~~tttill]s|q'^%                                                    %']~)Nf'Lb+Qj+Tm,Un-Tm-Up/Zt0\x0[w3_}3a}5c5e7g8i9j9j9m:n;o<p>t?u@wAxAzB{C}D~B{C|FFGGGFHIIHHFA~4mzrtu{vpcr~8  !!!"""###$$$%%%%&&&&'''''((((((((()))))))(((((((((')/1.' !)/)1%+qu~~~~~~|||tttjmnXqyu'^%                                                    %']~(Ld'Md+Rj+Sl,Tn.Vp.Yt/Zt/[v1\x3^|3b~5c5d6e8i9j:l8j8i9l<o=s>s?uAxAzB{C}B{B{D}ED~GGGGGHGFHGA~4mqsuzvocr}8  !!"""###$$$%%%%&&&&'''''(((((((((())))))((((((((('+-&%*+&#&)%)"-p~}~~~~}}|~}}wwwlopUgnq~'^%                                                    %']~)Me)Ph+Rj+Tm,Un.Wq.Yu/Zu0\x2^{4a4c5c6e7g7h9i:l9m:l:m;n>t>r>t@vAzAzB{BzB{D~EDFEFGHIHEEF?z2hqsu|vocr}6!  !!"""###$$$%%%%&&&&''''''((((((((((())((((((((((((*'*1*#$"%!,g|~~}~~{}}y{~}}}xxxikkhqth}}'^%                                                    %']~(Ld(Of+Rj+Tm-Vp-Tm-Up.Xr0\w3_|3_|4b4b6f7g8i8h9i:n;o<q=r>t?u@wAxAzAyC}C|C}B{FEGFHHHIGEFE?y2irvvsobs~/!$ !!!""###$$$$%%%&&&&''''''((((((((((((((((((((((((((('''''''&#*+ 4d~z|z~|{}~}z}|{~vz{|}}{{yyyooo[beXr{w'^%                                                    %']~)Me)Ph*Qi+Sl-Vp.Wq.Xs.Ys1^z3`}2]z3a}3a~6f7g7g9i9k:n;o<q=r<q>r?u?u@xB{C}C|C~D}FFGGHHGGGGHF>y2izqussneu0!$!!!"""##$$$$%%%%&&&&''''''((((((((((((((((((((((((((''''''&+*+.*-Kzu||x~~|~z~||{||{{{zzzrrrrtu\kqqw'^%                                                    %']~)Nf)Ph+Rj*Rj,Tm.Xr/Zv0\w1^z3`}3_}4b5d6f7g8i7f7g8k;o<q=q>t?t>t@wAzB{AzD~C}DEEFFHEHIIHHG?{2iqtsspev1!$!!!"""###$$$%%%%&&&&''''''((((((((((((((((((((((((('''''''')#'-(>kun~||y|~z~}}|||{{{zzzyyyqqqefgcmqd'^%                                                    %']~)Nf)Ph*Pi*Sl,Uo.Xr/Zv0\w0\x3`}4a4c3`}5d7g8i9j8i9l;o<q=r=r>r?uAxAzAyAyD~DDFEDFHHHIIHHGA}2iqvvtpeu0!$!!!"""###$$$%%%%&&&&&''''''(((((((((((((((((((((((('''''''')#).,'!"/Q~y}~}}q~ky|}|~|||{{{{{{xxxxxxmmm`ef]ousw'^%                                                    %']~)Nf)Ph+Rj*Qi+Rk-Un/Zv0\w0\x2^{4a3a}4b5d7g8i9j:l:n:m;o<q>t?u@wAxAzAyAzD~DEFFGFEGHIIHFEA}4mqutrndu0 $ !!"""###$$$$%%%%&&&&'''''''((((((((((((((((((((((''''''''&,.)$#&.00#5l{|{t}r|s|}}t{}~~~}}|||{{{zzzzzzyyyxxxqqqgii[eiXs|}'^%                                                    %']~(Ld)Ph+Rj+Tm,Tm.Xr/Yu0\w0]x2_|4a4c5d5d6e6e8h:l:n:m9l<o>t?u@wAx?v@wC}BzC}D}EFGEEFEGHHGFA~4mqutrndu0 $ !!!"""###$$$%%%%&&&&&'''''''((((((((((((((((((((''''''''''"&3-!#)(#&,Qxs|syx}||~~~~}}}}}}|||{{{zzzyyyyyyzzzuuulllmopZiodx'^%                                                    %']~(Md)Ph+Rj+Tm-Vp.Xr/Zv0[v0]y3`}4a3b~5d5d5c6e8h9j:n;n;p=q=r=q=r@wAzAzC}C|DEFFGGGHGHHFFF?z3jqutrndt/ $ !!!"""###$$$$%%%%&&&&&'''''''(((((((((((((((((('''''''''').-%%#&$(+ 8\}r{|yy}}~~~}}}|||{{{{{{zzzyyyxxxvvvyyynnndeegoqRnwk'^%                                                    %']~(Md(Ne)Og*Rj,Un.Xr.Yt0\w1^z3`}4a4c5c5e6e8i9j:l:n;o<q=r=s=q?uAxAzB{C}D~DEFEFGHHHIIGGF?z1gqutrndt/ $  !!"""###$$$$%%%%%&&&&''''''''((((((((((((((((''''''''''''$3'!.,!'0+!0Iayx}y}xky{}}}}}|~}}~||~{{|zzyyyyzyxywuvuvxyuuwllldfhYfk\t|u|'^%                                                    %']~(Ld'Lc)Og*Rj,Uo.Xr/Zv0\w1^z3`}4a3a}4b5d6e8i9j:l:n9k<q=r>t?u@w?u?vB{C}C|DD~DFFFFHGHHFHG@}2iqussmbu0 "  !!!"""###$$$$%%%%&&&&&'''''''''(((((((((((('''''''''''''&(..%$*)!(.$"(1Hnx||}|x}{zx|pzq~zw|{{zx|y|xv{vy}wvyytsxsnsqnmhlif]hjWs|g~'^%                                                    %']~(Me(Ne+Rj+Tm,Uo.Vp.Yt0\w0\w2]z3^|3`|5d6f7f8i9j9i9m9l<p<q=r?u@wAx@xB{C}C|B|B{D~EGGHHHGFFGGA~4mptsrmbu0"  !!!"""###$$$$%%%%%&&&&&''''''''''''((((''''''''''''''''&&&%#&('%$&'$"$&%#$!%/Kruw~zxwz}}v~vu}~q|s{}yy}w|qx}wwwq}ypswsluvnusmqmfgfdfg_mqa|j~'^%                                                    %']~(Lc(Ne+Rj*Sl,Uo.Wp.Xs/Zt0\w1]y3^|3a}5c6f7g8i9j8i9l:m;n;n<o?u@wAxAzB{B{C|C}D~C}EGGHHGGHHHGA~4mptsqmcs/"   !!!"""###$$$$%%%%%&&&&&''''''''''''''''''''''''''''''&&&&&&&&%%%%%%%$$$$#&+%4]{~zv~xxrs}yyzyz{|xzys|vu{sxzqxxtzt{xptq|pqzssvmmlfffX\^^jnXt~ut'^%                                                    %']~)Nf)Ph+Rj*Sl,Uo.Xr/Yu0\w1^z3`}4a4c5d6f7g7g9j:l9l:m;o;n;o>s@wAxAzB{B{BzC}EFEFGHGGGIHHF?z4mptrqmbs/!   !!!"""####$$$$%%%%%&&&&&&'''''''''''''''''''''''''''&&&&&&&&&%%%%%%%$$$$%!%.'9cxu~zswz~z~y}xqvx|yv|yyyo{wpyyzs{q~qxtrxusrttqqqooogggcff\glVr|u}}'^%                                                    %']~)Nf)Ph*Qj*Rk,Tn.Xr/Zv0\w0]y2^z3_|3a}4b6f7g7g9j:l:m:m;p<p>t?u?uAx>uB{C}D~DD~C}C}GFDFFHFGHF?z3losrrnbs~.!  !!!""""###$$$$%%%%%%&&&&&&''''''''''''''''''''''''&&&&&&&&&&%%%%%%%$$$$$%  (+$ !>N^{~ryt~yzvyp{xtxw}pxzrwy|vw~vvsxof~fpxqvqurrrqqqsssiiiccccfg[gkZs{p'^%                                                    %']~)Nf(Of*Pi*Ph+Rk.Xr/Zv0\w1^z2^{3_}2`{3`}5d7g8i9j:k9m;o<q<p>t?u@wAx@xB{C}D~DD~EFGGFFFIIHGFA~4mopqplcs/ #   !!!"""####$$$$%%%%%%&&&&&&&''''''''''''''''''''&&&&&&&&&&&%%%%%%%%$$$$$%+% )$$7Tvr{~s|{~~uk}zl}wm}rwyv|vwzuxswtiyppurursrrrrrrqqqoooqqqiiieeedggU^aYlrh'^%                                                    %']~)Nf)Ph*Ph*Qh*Qj.Vp/Yu0\w1^z2^{4a4c5d6f5d8i9j7g7i:l<p<o<q>s@wAxAzAzC}D~DEFFFFHHEGIHHG@}4mrss~miar~0 #  !!!!"""####$$$$%%%%%%&&&&&&&&&'''''''''''''&&&&&&&&&&&&&&%%%%%%%%%$$$$$"+,'*%#%&-+!Fjxr|q}uw{s|pv|poyvpt}|pm{rwqursssrrrqqqqqqpppooonnnjjjfffdde_egQem`|x'^%                                                    %']~(Ld)Ph*Ph*Ph+Rk.Wp.Yu0\w1^z1\x2^{4c5d5d5c8i9j9j9l8j;o=r>s=q=rAx@y@xC}C|DEFFFFFHGHIHHGA~4mqqqnjcs/ "   !!!""""###$$$$$%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%$$$$$$#&'&''$! %! (& *D`{k~k{svxql|td{xnu}oytxsussssrrrqqqqqqppppppnnnoonnnnkkkaaa`ac]bd^imTmuq}'^%                                                    %']~)Nf(Ne+Rj*Sl,Sl.Xr/Zv0\w0]y2^{2^{2_{3`|4b6e8i9j:l:n;o<q=r>t?u<p@v@x@xC}C|B|EDDGGEFGIFEFFA~4mqrrnjaq}/"  !!!!""""###$$$$$%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%$$$$$$$#"!! #%! !%%!3Imxoprgz{mozorzmuvttvvsssrrrrrrqqqqqqooopppppplllmmmommjjjhff]]]\^^bhi\joa|q{|{'^%                                                    %']~(Ld)Ph+Rj+Tm-Vp.Xr/Zv0\w0\x1\x3_|4c5d6f7g8h9j:l:n;n<q=r=q>r?vAxAzB{C}D~C}D~D~C~FGHHHIIHHF>y1glowtqh`uh6"   !!!!"""####$$$$$$%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$#"""!""#"!!! ""!&.Np|pew^izjfwrmustry|m|{lzvnqquenthnh~rhtujmtohppbnoamjdngef__e_aR\ZRffKfnbw'^%                                                    %']~'Kb)Ph+Rj+Tm-Vp.Xr/Zv/Zt1^z3`}4a4c5d6f7g8i9j:l:n;o<q=r>t?u@wAxAzB{C}D~DEEDDEHHHIIHHF>x4mnozqpkjv^=#   !!!""""####$$$$$$%%%%%%%%%&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%$$$$$$$$#####$""""#!!"""  !!! ,9Uzrjo]iiluuryhsthrppowvluwokynkqlmgko_lp]kodlokhkqfjodkaadY^\\c_]cbdrvr'^%                                                    %']~(Ld'Md)Nf*Qi,Un.Xr.Yt.Xr1^z3`}4a4c5d6f7g8i9j:k9l;o<q=r>t?u@wAxAzB{C}D~DEFFGFEHGHIHHGA~4m}}tipuqaC!    !!!!""""#####$$$$$$%%%%%%%%%%%%%&&&%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$######"""""!!!!!  !&' 3>Pt~pdpUr[otlhkzjmx_xbcsihmoijvefzfgvfipohhlflddoienndli_ea[[\]\`wz'^%                                                    %']~(Ld)Ph+Qj+Tm,Uo.Xr/Zv0[v1^z3`}4a4c5d6f7g6e9j:l9m;o<p=r>s>s>tAxAzB{B{B{C}C}C|FGDEFGGHHEGA~4mh]izj^L"   !!!!""""#####$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$######""""""!!!!!   !#! /?Tz}oajUl`lnklpmrnkrmjomkklhmijvfnfimWkk`eljalpcmlcjfbcgx{'^%                                                    %']~(Md(Og+Qj+Tm-Vp.Xr/Zv/[v1^z3`}4a4c5d6f7g7g7f:l:n;n<q=r>s?u?vAxAz@x@wC|C}C{B{FGFFFGIGFEFA~3l[Zg~mdZ{ "   !!!!"""""#####$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$########""""""!!!!!    2BOxyjlbYg_~jglkkbmjdnkgkicmcdnaegcffheeiddjfcfs'^%                                                    %']~(Ld(Og+Rj+Tm-Vp.Vp.Xt0\w1^z3`}4a3a}4b5e7f8i8h:l:n;o<q<p=r>s?u@v@x?v@xB{C}C}D~FGGHHHIGEEFA}4mlsyumghpt/!   !!!!"""""#####$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$########""""""!!!!!      +<GtfgpeXdQvkaXkqgkhk\vi_ngfbifVgeYff'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr.Xt0\w1^z3`}3`~3`|4b6e7g8i9j:l:n;o<q=r=s?u@wAxAzB{C}D~DEFFGEGHHIGEFF@{4mn{xjhfuimC    !!!!"""""######$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##########"""""""!!!!!   $,"#=I|Yju|\gz^akddteiufghfeVidUnl'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv/[u0]x3`}4a4c5d6f6e8h9i:l:n;o;p=r>t?u@wAxAzB{AyD~DD}FFGEFHHIIFFFA~4l~|ddjdqU      !!!!!"""""#######$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$###########""""""""!!!!!!    $%:@{<kPasnanyefjgaduwy'^%                                                    %']~)Nf)Ph+Rj+Tm-Uo.Wq/Zv0\w1^z2^{3`~3b~4b4b4b7g9j:l:n:m;n<p=r>s?u?t>uAzAyC|C}C|EFGGHHHHIHHGA~3k`]dwgjcto*!#    !!!!!""""""########$$$$$$$$$$$$$$$$$$$$$$$$$$$$#############"""""""""!!!!!!    !
/cdlrdekdaz'^%                                                    %']~(Ld)Ph*Ph*Qi-Uo.Wq/Zv/Zu1^z3`}3`~4b5d6f7g6f7g9i9l;n;p=q>t?t?v?t@xB{C}C|C~D}FEGGHHFGIHHGA~4mtts`o]mjaI&'     !!!!!!""""""###########$$$$$$$$$$$$$$####################""""""""""!!!!!!      "!;dcYSi\eil'^%                                                    %']~(Md)Og+Rj*Qi-Vp.Xr/Zv0\w1^z3`}4a4c5d6f7g8i7g7f8k;o<q=r>t>s@wAxAzB{AzB{C}C{D~DGFHHHIIHHF@|4mPl]hhUo$ #!    !!!!!""""""""######################################""""""""""""!!!!!!!      Kf|_`LgVu'^%                                                    %']~)Me)Ph)Og*Qi,Tn.Xr/Zv0\w1]y2^{4a4c5d5d6e8i9i8i:m;o<q=q>s>t>tAxAzB{B{AxC}EEEFGGEEHIHHGA~3kUjdikuao6%'!!    !!!!!!""""""""""#############################"""""""""""""""!!!!!!!!      #!0mXf~adQg`'^%                                                    %']~(Me)Ph*Qj*Rj+Rk-Tm.Xt0\w0]x1]y3^|4b5c6e7g8i9j:l:n;o;o<p=q<p=rAxAzAyAzC}DEFFFEHFFHHHHGA~3kcbeul_Wr(     !!!!!!!""""""""""""""##########"""""""""""""""""""""""""!!!!!!!!!      $OkzoeWc_ax~'^%                                                    %']~)Nf)Ph+Rj*Rj+Sl-Tm.Xt0\w1^z3`}4a4c5d5d6e8h9j:l:n:m;o<p=r<p=r@vAzAyC}D~C~D}FFGFGHFFGHHGA~3lWjfgu]bbB")"     !!!!!!!!""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!       %<ZZ`pUQeb'^%                                                    %']~(Ld(Og+Rj*Sl-Vp.Wp.Yu.Xr0]x3`}4a4c5d5d6e8i9j:l:m;o<p<p>s>s@wAxAzB{C}D~DD~EFGGFEFHFFHGA~4mWdS~nega0*"!      !!!!!!!!!"""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!       &+`Yzxg^WfRy'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr.Xs.Xr/[v1]y2^{3a}5d5d6e8h9j9k8k;n;p=r>s>s@wAxAzB{AzC|DEFFGFGEGIHHHGA~4mmsvcfjhiTm)&&!      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!         #"%Lfab_bfghj'^%                                                    %']~)Nf)Ph+Qj+Tm+Sl.Xr/Zv0\w1^z2^{2]z2`|4b4c5c6e9j:l:n8j9l<o>s>r>tAxAzB{B{D~C}D~FED~EHHHIIGHGA~4mjRmmzWbhJ|         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           
Cv~\ahtQlVn'^%                                                    %']~(Me(Ne*Ph+Tm,Uo.Wp/Zv0\w1^z3`}4a4c3`|4b5d6f9i:l:n;o;o:m=r?u?vAxAzB{C}D~B|C{D~DDGHHHIIGED?y3jVfUo\x`n<}  7xsZhjVWgU'^%                                                    %']~(Md'Md*Qj+Tm-Vp.Xr/Zv/Zt0]y3`}4a3a}4a~5c7f8i9j:l:n;o<q=r>t?u@wAxAzB{C}D~DEFFGGHHHIIFEGA}3j_d[qofq`iRy) !  #""""########$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##########"""""""!!!!!   !&LtlZdljb^dZxz'^%                                                    %']~)Nf(Of+Rj+Tm-Vp.Xr/Zv.Ys0\w2_|4a4c5d6f7g8i9j:l:n;o<q=q>t?u?u@vAzB{C}C}DEFFEGGGHIIHHGA}3k^fZytXiY_t2&!  !!!!!""""""""###########################################"""""""""""!!!!!!!     #.ZodTtqR]f[qv~'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv0\w1^z3`}4a4c5d6f7g8h7f7f8j:l<q=r>t?u?u?uAzB{C}D~DEFED~DGFGIFHHF?y3kVdZqnceejft70'$-3eap`_lk_Vh[|~|'^%                                                    %']~(Me)Og+Rj+Tm,Tn-Un.Yu0\w1^z3`}3_|4c5d6f7g7g7e:l:n;o<q=r>t>s?uAx@yAzC}B{DEFEEEGHFGFGHG@}4mm^e`dfrmn{]iTwv3(01*&%$$%%&&&&&''''''''(((((((((((((((((((((((((((((((((((((((((((((''''''''''&&&&&&%%%%%$$$$##"#$(..&0OtrwYeoii^ddm^h'^%                                                    %']~)Nf)Ph+Rj*Sl-Vp.Xr.Xt/[v0]y3`}4`~4b5d6f7g8i9j:l:n;o<q=r>s?t@wAx@x@xAzD~C~EFEGGHHFFFFHG@{4m}sXdtajnpbpk]qjretV~LB??AGIHIIIJJJJJKKKKLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLKKKKKJJJJJJIIIHHHGGFFEEFD><=?IQzaq|mfomgYkl]tbiv[gsnt'^%                                                    %']~(Lc)Ph*Ph*Qi-Vp.Xr/Zv/Zu1^z3`}4a3a}4b6f5c8i9j:l:n;o<q<q>t?u@wAxAzAyAzD~DEFFFGHHFFGFFG@|4lsrg\jggnql`skdujfuigyjiylewnctp`ymfzkk{kj{lj{lj|mk|ml|ml}ml}nl}nm~nm~om~om~on~on~on~onpnpopopopopopopopopopopopoqoqoqoqoqoqoqopopopopopopopopopopopopopopopopopopopnpnpn~on~on~on~on~on~om~nm}nm}nm}nm}ml|ml|ml|mk|lk{lj{lj{kjzkizkizjhzjhyihyigxhgxhhvjcqn]tj`vhavferfcrgcqhbpj^gelj]mkk'^%                                                    %']~)Nf'Md*Ph+Tm-Vp.Wp/Zv/Zu0]y3_|3_}4c4b5c4b7h9j9j:m;o<q=r>t?t?v?u@xB{C}D~C~EEEEGHHHGGGHFA~4lrxqmqq_ggW`b`bjg_ln\pu[rhcibgedffdffdggeggeggehhfhhfhhfiifiigiigiigiigjjgjjhjjhjjhkkhkkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkikkhkkhkkhkkhjjhjjhjjgjjgjjgjjgiigiigiifiifiifhhfhhehhehheggeggdggdffdffcffceebeebeebddaccacc_dbe`grXokZnd[i\_gU_`]edhlllpkt'^%                                                    %']~)Nf)Ph+Rj+Tm,Uo.Xr/Zv0\w/[v1]y3`~4c3a~4b5c7g9j:l:n;o<q=r>t>r>t?u>uAyAzD~C~EDFGGHGHIIHHF@{3j'^%                                                    %']~)Nf(Of*Og*Ph+Qj.Vo/Zv0\w1^z3`}4a4c3a~4c5d6f8h:l:n;o<q=q>t?u@wAxAz@xC}D~DEFFGGFFHIIHHGA~4l'^%                                                    %']~)Nf)Ph*Qi*Rj,Tn.Xr/Zv0\w1^z3`}4a4c5d5c5d7h9j:k:n;o<q=r>t?u@wAxAzB{C}B{DEDEGGHHHIIFGGA~4m'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Wp.Xs0\w1^z3`}4a3a}5d6f7g8i9j9j:n;o<q=r=q=p=r=p>uAzC}C}B{DED~FDEGHIIHHD?y4m'^%                                                    %']~)Nf)Ph*Pi*Rk,Tm.Vo-Vq0[v1^z3`}3_|3`|5d6f7g7g9j:l:n;o<q<p<p=p=rAxAzB{C}D~DD~EEGEFGGIIHHGA~4m'^%                                                    %']~(Md)Og+Rj+Tm-Vp.Xr/Zv/[u1^z3`}4a4c5d6f7g7g8h:l:m;n;n<p=s>s?uAxAzB{C}D~C~EFFFGFEGIIFGGA~4m'^%                                                    %']~)Me(Og+Rj+Tm-Vp.Xr.Xt.Ys1]y1]y2]z3a}5d6f7g8h9j:l:n;o<q=q>t>s>s@vAzB{C}C|B|D~FFEDFGEGIHHFA~3l'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr-Wr/Zu1^z2]z3^|3b~5d6f7g7g8h9k:n;o<q=r=s>s>t@v@y@x@xC|C}EFFGEFHHIIHHG?{2i'^%                                                    %']~)Nf)Ph+Rj*Sk,Uo.Vo/Zv0\w1^z3`}2^{3b~5d6f7g7g8h:l:n;o<q<o>t?u?v@v?v@wAyB{C~DFFGFHGHIHHHGA~3j'^%                                                    %']~(Ld)Ph+Rj+Tm-Vp.Xr/Zv0\w0\w1]y2^{2`{3`}5d7g7g8h9k:n;n;o<o=q=r>sAxAz?v@xD~C}EFFGGHHHIIHHGA~4m'^%                                                    %']~(Me)Ph+Rj+Tm-Vp.Xr/Zv0\w1^z1\x3_}4c3`|4b6e6f7f8h:n;o<q=r=r>r>tAxAzB{B{BzB|D}FFGGHHHIIHHGA~4m'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv/Zu1^z3`}4a4c5d6f5c6e7g9i9k:n<q;o=r?u@wAx@yB{AyBzB{C}EFGGGFHIHGFF@|4l'^%                                                    %']~(Me(Og*Pi+Tm-Vp.Wq/Zv/Yt1^z3`}4a4c4c5d5d6f9i:l:n9l:n:m<o>r?uAxAzB{B{BzB|C}EFGGHFHIIHGF?{4m'^%                                                    %']~'Kb(Nf*Qi+Tm-Vp.Xr/Zv/Zt1^z3`}4a4c5d6f7g8i9j:l:n;o9l<p>t?u?u?u@xAzB|D~B{EFEGGHHFIIHHGA~4m'^%                                                    %']~(Md)Ph+Rj+Tm-Vp.Xr/Zv0\w0\x2^z3_}3a~5d6f7g7h9j9j8j9l:m=q>t?u>t?u@x?vB{D~DEFFFDD~D~HIIHHGA~4m'^%                                                    %']~)Nf)Ph+Rj+Tm-Vp.Xr/Zv0\w1^z3`}4a4c4b6f7g8i9j8i8j;o;o=r>t>s@wAx?vB{B{BzC~EFFGFFFFGGEGGA~3j'^%                                                    %']~)Nf(Nf)Og+Tm-Vp.Xr/Zv0\w1^z3`}3`~4c4c6f7g8i9i:l:n;o;o=r=r?u@wAx@yB{AzBzB|C{EEGGHHGHHFGGA~4l'^%                                                    %']~)Nf(Og+Rj+Tm-Uo.Xr.Yu0\w1^z3`}4a3a~4b4b5c5d8h:l9k9l:m<q<o=q>t@v@xB{B|D~C}EFFGGHHHGHHHG@}4m'^%                                                    %']~)Me(Of+Rj*Sk-Vp.Xr/Zv/Zu0\w2_|3`~4c5d6f7g8i9j:l:n;o:m:l;n=p?v@v@yB{C}D~DEFFFGHHHIGHHGA~4m'^%                                                    %']~)Ne(Og*Qi*Sk-Vp.Xr/Zv/Zt/[v3_|4a4c5d6f7g8i9j9i:n;o<q<p>s>s@wAxAzAyC}D~C}EEDEGHHHIGFGFA~4m'^%                                                    %']~)Ne(Ne*Ph+Tm-Vp-Tm.Ys/Yt1^z3`}4a3a~5d6f6e8i8h8h8k:m;o<p>t>s>t@w@yAyC}D~C}C}C}C~FGHGHGHHHGA~4m'^%                                                    %']~)Ne)Ph+Rj+Tm-Vp.Xr/Zu0\w0\x2^z2]z2_{5c5d6e7h7g8h8j:l;o=r>t?u=r@vAzB{C}C|C}D~EEGGHHHIIHGGA~4m'^%                                                    %']~)Ne)Ph+Rj+Tm-Vp.Xr/Zu0[w1]y3`}4`~3b~4b5d6e7g8h8h8k:m<p=r>t?u?vAxAzB{C}C|B{C}EFGGHGFHIHGGA~3j'^%                                                    $']~)Ne)Ph+Rj+Tm-Vp.Xr/Zu0[w1^z3_|4a3b~4b6f7g8i9i:k8j;o<q=r>t?u@wAxAzB{C}D~DEFFGEEEEGFGHG@}3k'^$                                                    #']~)Ne)Og+Rj+Tm-Vp.Xr/Zu0[w1^z3_|3_|4c5d6e6e7g9j9i:n:m<q;n>t?u@w@v@yB{C}D~DEFFGEFFGHIHHFA~4m'^#                                                    !'\}&H](Mc+Rj+Tl+Sl.Xr/Zu/Zv1^z3_|4`~4c5d6f5d6e9j:l:m:m;p=r>t?u@wAxAzB{B|D~DEFFGFFFGIHHHF?z4mz']}!                                                    '\{)I^)Og*Pg*Rj-Vp.Xr/Yu0[w0\x2]z3^|3a~5d6f7g8i9j:l9l;o<q;n=q?u?v@vAzB{AzD~DEFFGGGHHIHHHGA~4m'\|                                                    &Yw3Qe)Og*Qi*Ri,Tm.Wq/Yu0[v0]w3^{3_}4c4b6f7g8i9j9i8k;o<q=r=r=p=rAx?wAzAzD~DEFFGGHHHIHHHGA~4lm&Zx                                                    
&Ws6Tg)Og*Qi+Sk,Sl,Un,Tm/Yt0\v2]z2]z2`|3a~6f6e8i9j:l:n;o<q=r>t?u?u@w@xAzC}D~DD~EEEEHHHIIGHGA~3kW}&Wt
                                                    %Qkw5Xm)Of*Ph+Sk+Sl,Sl.Wr0Zu.Xs1]y4`~3b~4c5e7g8h7f7g9l;o<q=r>t?u@wAxAzB{C}D~DD}EEFGHHGGIHHGA~4mEn%Rmz                                                    ">O9+Yv)Of*Qh+Sk,Un-Un-Wr0[v0\x2_|4`~4c5d5d6e8i7g8i9l:m<q<q>t?u>sAxAzB{C}D~DC}D~DFFHHHHIGGFA}2i1a~#AT=                                                        
'\{+La)Oe*Ph,Tn.Wp.Xs0Zv1]x1^z3^|4c5d6f6e7g9j8i7i:l<q;n=r?u@wAxAzB{C}D~DEC|EGGHHHIIHGF@|4l'\|                                                            &Uq7Xl*Pg*Qi+Rk-Un-Wq.Xs1]x2^{2^|3a}5d6f7g6f7f8i9l9k;n=r=r=q?vAxAzB{C}B{AzEFFFGHHHIIHHGA~4mQw&Wt                                                            
#AT7/]x)Og*Ri*Ph,Tl-Uo.Xq0[v2^z3`}4b5d6f7g7g7f9i:n;n<q=r>t=q>t?t?wAzC}C|C}EFFFGHGHIIGHG@{2i0`}#CW8
                                                                &Yx4Sf*Qi*Qi-Tm-Wr.Xs0\w1\x2^|3b4a~4b~5d8i9j:l:n;o<q=r>t?t@wAx@xAyAzB{B|C|DEFGFDGIIGGG?z3ji&Zy                                                                
%PjZ1[t*Qh+Rk,Tm-Wq/Xs0[v1[w1\x2_z2`}4a~6e8i9i9j9m;n<q=r>t?u@wAxAzB{B{C}C~C}BzDGGEEHIHEHF@|4l3b}%PjZ
                                                                    &Yx3Sf+Rj+Rk-Vp.Xr0[u1]y3^{3a}4c5e7f8i8i:l:n;o;p<p=q>r@w@v@xAyAzD~DEEFGFHHHIFFFGA~4l_&Zy                                                                        
%OhN-]y*Of,Sl,Uo.Wq.Xs1\x2^{3a}4b5e6f8h8h9i8k:m;o<p=r=q@w@w?w@wAyC|DEFEFFHHGIIHFF?{3k-_}%PiM
                                                                            &Xv8\s+Rj,Un,Sl/Yt0Yu1[x2`|4b5d6f7h8g9j:n;o;o=q>s?u@w@v?w@xC}D~C~EFFFEGHHIIHHF?z3kJr&Yw
                                                                                &Xv5Tg+Sl,Un/Wr/Xs1Zv1\w3`}5d6e7h8i:k:m;o;n;n=r?u?u@v?wB{C}D~C~C|FEEGHHHIIHHGA~4lZ&Zx                                                                                        %Mg<)]|.Nc-Uo.Xr0Zu0Zw1\x1\x2_z4b7g8h9j9m;n<p=q=r<o>t?u@x@wB{D~C~C|EDEFGGGHHHFGA~4lk)_%Oh<                                                                                                	&Uq`*]{.Od.Wp/Ys1[w0[v1\x3`|4a~4b7f8h9k:l;p<q>s>q>r?tAyBzC}C}C~EFFGGHGGHGHFGA}4mw*_&Vs^                                                                                                        	&Vsi*]{2Sg.Vo0Zu0\w0Zv1]x4`}6e7g8i9k:m;o;n<q>s?v>s>vAz@yC}C~DEEFFGGGHGGEF@}3lk*_~&Wuh                                                                                                            	&Vr[)^}8Ym/Yt0[v/Yt0Zt2]z5d6e8h8k9l;n<n<p=p?u?t?wAyB{C|C}D~DEFFGGGHHGEF>z3lX~)^&WtZ                                                                                                                    %Oi:&Xw9^v/Wo0Yt1]x2^z3_{4`}6d8i8h9k;n<p;n<p>s?w@xAzB{A{AyC|EFFFFFGGFEF@|3kCl&Zz%Rl9                                                                                                                                &Xw,\x5Wm1]y3_{4a~5c6d6f6f7h:k<p=q>s?t?v@wAyBzAy@wC|DEEDD~DFFFED?{2j\-`~&Zz
                                                                                                                                        &RmB'Yx3_y:]s3`|5b6d6g7g7h8h:k<o=r>s=s>t>t?vAzAyC}C~C~DEC~C~D~FEEE>x0fd:h'[{&Uq@                                                                                                                                                    
&RnN'Zx1_{;^u6]w5e7g8i9j9j9j<p<o<q;o<q>t@xAyB{A{C}C~DDB|DEEDD>y1g{Sx1b'\|&UrK                                                                                                                                                                
$Ja*&Wu'Zy0]zAf}@e|?f~5_z8e9i;m;o<q=s?u?v@xAy@x@x@wAzC}C~B{C|DCC~=u1ho^Cl2d']}&Zz%Oi(                                                                                                                                                                                $I_*%Uqj&Wu&Yw&Yy&Zz&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&Zy&[z'[{'\}']~'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^'^']~']}'[{&Ywf%Oh&                                                                                                                                                                                                        



	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                              ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               PNG

   
IHDR         \rf   	pHYs       
OiCCPPhotoshop ICC profile  xڝSgTS=BKKoR RB&*!	J!QEEȠQ,
!{kּ>H3Q5B.@
$p d!s# ~<<+" x M0B\t8K @zB @F&S  `cb P- `' { [!  eD h; VE X0 fK9 - 0IWfH    0Q) { `##x  FW<+*  x<$9E[-qWW.(I+6aa@.y24  x6_-"bbϫp@  t~,/;m%h^uf@ Wp~<<EJB[aW}g_Wl~<$2]GLϒ	bG"IbX*QqD2"B)%d,>5 j>{-]cK'Xt  o(hw?G% fIq  ^D$.Tʳ?  D*A,`6B$BB
dr`)B(Ͱ*`/@4Qhp.U=pa(	Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F; 2G1Q=C7Fdt1r=6Ыhڏ>C03l0.B8,	c˱"VcϱwE	6wB aAHXLXNH $4	7	Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw
ǈg(gwLӋT071oUX**|
J&*/TުUUT^S}FU3S	ԖUPSSg;goT?~YYLOCQ_ cx,!k
u5&|v*=9C3J3WRf?qtN	(~))4L1e\kXHQG6EYAJ'\'GgSSݧ
M=:.kDwn^Loy}/TmGX$<5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=
Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ?0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz %gA[z|!?:eAAA!h쐭!ΑiP~aa~'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl{/]py.,:@LN8A*%w%
yg"/6шC\*NH*Mz쑼5y$3,幄'L
Lݛ:v m2=:1qB!Mggfvˬen/kY-
BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
+V<*mOW~&zMk^ʂkU
}]OX/Yߵa>(xoʿܔĹdff-[n
ڴ
VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-
6
U#pDy	
:v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ
8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-    cHRM  z%        u0  `  :  o_F 8IDATx                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   bA
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           bA
                                                                                                                                                                                                             B,@2 $     	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            bA
                                                                                                                                                  G0                     D- 
]R	&	                                        =Uf                 
             
           
                                                    
    
                     	                                                   
                                           
             
           
                                                    
    
                     	                                              
                                         bbb                                                                                                                                                  Q5	D
d
M
                                                                                        	                   
                                                                            	                                           
                                                        	                   
                                                                            	                                   
                     
 '{{_?       xxx                                                                                                                                               P5	:gV  
                                                                            
                       	                                                                                                    	                                                               
                       	                                                                                                      	                                     " "#  OO^>      bbb                                                                                                                          H1          Z;	o	                                                4KW  		 
                                                                         
                                        
             	                         
                                
                                                                            
                                        
             	                          	                                                |                                                                                                                                           L22	g^                                                                                                                                                                                                                                                                                                                                                                                                                                                                               9>5 .) żq]=                                                                                                                                     U9	S^                                                                  
                           	                                                                                  
                           	                                                                                 	            ITU $2_W:	S                                                                                                                                  V9	`                                                                      	                 
      	                                     	                 	                    	                                                                                                    
      	                                     	                 	                    	                                                                           
       	  	              <A:  пX:	i                                                                                                                        T8	W                                                                                   
        	                                                                                                                                                     
        	                                                                                                                                                                   .21 	
 ƳV9	                                                                                                               J03                                                                                                                  
                                                                               
                                                                           
                                                                            
                                                            %(& A оK2޵                                                                                                         g 	                                                                                                                                                             	      
                                                     	                                                                                                      	      
                                                    
             
                   
                           ,/#  f                                                                                                        Y;	\                                                                                                                                            
            
                                                  
                                  
                                                      
            
                                                
             
       
       
                                     ;A@ ]Z<{                                                                                               K2@l                                                                                               
                                                                 
                 
   
        
      
                                                                                   
                 
   
      	                                                           5@A mL3@                                                                                              
c                                                                                                                                                                   
    	                
                             	                                                                              
    	                
                           
                                       
	 %2 
c                                                                                          M3HN                                                                                                                  
                                                                                                         
                                                                                                          6;4 
OM3I                                                                                       	b                                                                                                        
                          
             	  
                   	                               	          
                     
                          
             	  
                   	                                        
                                            *6 
a                                                                                 7$$ 	C                                                                                             
                                                       
                                      
                                                      
                                                       
                                      
                                                                                    ,0+ D:&%                                                                           W                                                                                                                                                                            
                                                                                                                             
                                                           
                              
! [                                                                              
O                                                                                                               	 
 
                                                             
         
                          
                	 
 
                                                             
         
                         
                   	  
  
                           
 (/4 M                                                                          2!!"                                                                                                                                               
                                                                                                     	                                                 
                                                                                                     
                                               
              
7$%                                                                       >
                                                                                                                                    
      	                              
                
                                         	                                                                       
      	                              
                
                                       	                                                                                                 
 =                                                                       .                                                                                                                                     	          
                     
       
        
    	                                                              	        	                                                     	          
                     
       
        
    	                                                           	       	                                                                      +                                                                      !                                                	                                                           	                 	                  
                                                                           	                     
                                           	                 	                  
                                                                           	                   
                                                                               "                                                                       	                                                                                                                                            	        	                                 	                                                                                                                                         	        	                                 	                                                                                                  
                                                  	                                                                                                                                                                                                    	              
                        
                                                                                                         
        
               	              
                        
                                                                                                    
         
                   
       	       	  
      
                                                                                                                                                                                                                                       
        	                                  	               
                           
        	                                                                             
        	                                  	               
                          	                                                                    	          
                                                                                                                                                                                                                                	                   
            	                                 	                                           
                                                           	                   
            	                                 	                                                                                            
                                                                                                                                                                                                         
    
  	             
                                                                     	             
                                  	                	                   
  	             
                                                                     	             
                               	            
 	                 
                	  	             
                                                                                                                                                                                                             
 	                  
                                                  	                                        
                    
                      	                     
                                                  	                                        
             
                       	                  	        
                                                                                                                                                                                                                   
                                                        	  
                             	         
              	                         
  	       
                                                        	  
                          	           
                                        
                                                                                                                                                                                                                  	 
  	                             
                          	                                                                        
      
      
                   
                    
                          	                                     	                                	   
     
  
   	          
                                                                                                                                                                                                                                                       	                                                 	            
                                  
                                            	                                                 	            
                                	                                                                                                                                                                                                                                                                   
                        
                
                                            
 	                                     
    	                            
                
                                            
 	                         
                              
  	               
               
                                                                                                                                                                                                                     
                   	                  
                  	          	                 
                                                      
                   	                  
                  	          	                  	                                                  	              	                                                                                                                                                                                                                   	     	                       
      	            
         
                                 
                          	  
       
                      	                       
      	            
         
                                   
                         	   
       
                         
     
                                                                                                                                                                                                     	                                                                                                                        	                      
                                                                                                                      	                      
                               
                                                                                                                                                                                                                                   
                     
      
                   
                            	                                                       	                          
      
                   
                            	                                                     	                        	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                    
                   
                	 
        	   	                                                 	                                   
                   
                	 
        	   	                                           	                     
            	                   	                                                                                                                                                                                                                                     	                               
         
           
                                                                                          	                               
         
           
                                                                           	                                                                                                                                                                                                                                                                           
                                                           
                                        
#             	                            
                                                           
                                          	#                 
       
                                                                                                                                                                                                                 	                                      	                  	                                          
       
                                                             	                  	                                          
         
                                                                                                                                                                                                                                                                                  
                     
                                                             	              	         
                                   
                     
                                                             	                                                     	                                                                                                                                                                                                                                 	              
                                                                                                                            	              
                                                                                                                              	 
                    	                                                                                                                                                                                                        
    	                           
                    
        	                                           
                         
    	                           
                    
        	                                          
             
                                   	                                                                                                                                                                                                    
                                                    
    
         	 
                                                      
                                                                      
    
         	 
                                                     
                       
                                                                                                                                                                                                                                            	                                                                         
       	      
                                       	     	                                                                         
       	      
                                        	                                                                                                                                                                                                                   	         
                      
                 
      
              
             	                                             	                             
                 
      
              
             	                                            	                        
      
      
  	      	   	                                                                                                                                                                                                                               	                          
                         	     
                                                                                  	                          
                         	     
                                       
                                          
                                                                                                                                                                                                                                         	      
   	                                                                                                                                                                                                                                                                                                                           

	   #                                                              	                                                                                                                                                                                                	  
               
    
                	                                 	                                                                                                                                                                                                                                                                                                      
          "&
 (0
 "                       
  
                       	                                                                                                                                                                                                            
                                               	        
   	                                                                                                                                                                                                                                                                                                           	             $' I:  	               
                                 
 
  	                                                                                                                                                                                                               
                            
                            	     
 
                                                                                                                                                                                                                                                                                                                       
         ;6 A=                                                               	                                                                                                                                                                                                                                                   
   6! 4  
                                                                                                                                                                                                                                                                                                                                                    
  (     IE 
                                                            
 	                                                                                                                                                                                                 
                 	      	          	               	 +  ?/ 6                                                                                                                                                                                                                                                                                                                                                              8  2 ( 
   _P           	                                    
                                                                                                                                                                                                                                                                             #  0 N( (  	              
                                                                                                                                                                                                                                                                                                                                            	  , +  ' 
   \U-        
                                   	                                                                                                                                                                                                                                               
 
           
                          4 O2      	                                                                                                                                                                                                                                                                                                                                                        )        dZ. 
                      
 
            
    
                                                                                                                                                                                                                            
   	                      0  B K4                                                                                                                                                                                                                                                                                                                                                                                   a:  < %   WR%                                                                                                                                                                                                                                                        
             
             (  3 A9   
                                                                                                                                                                                                                                                                                                                                                                                                 C;  ;    ?<   
                                                                                                                                                                                                                                        
                            
                , C5                                                                                                                                                                                                                                                                                                                                                         F8 .
                                                                                                                                                                                                                                                                                                   
      K,                                                                                                                                                                                                                                                                                                                                             
        N.                                                  
                                                                                                                                                                                                                   	         	     	 	     
  ;%                                                                                                                                                                                                                                                                                                                                                                                  " >&  
	                 
          
 	                       
                                                                                                                                                                                                                                 	                  6%                                                                                                                                                                                                                                                                                                                                                          
         8'                                                                                                                                                                                                                                                                                                 >$       	                                                                                                                                                                                                                                                                                                                                                                                A%                                                                                                                                                                                                                                                               
   	               	                  % 3                                                                                                                                                                                                                                                                                                                                                                                  
            6 (             	                                                                                                                                                                                                                                                                                ( 
                                                                                                                                                                                                                                                                                                                                                                         
             	 8!       
                                            
                                                                                                                                                                                                                                  
 
 7                                                                                                                                                                                                                                                                                                    	                                                                     	       	    	 
                                                                                                                                                                                                                                                   "     
                                                                                                                                                                                                                                                                                                                                                                                                                                        -          ! 
             
       	                                                                                                                                                                                                                                              	     $      
                    '                                                                                                                                                                                                                                                                                                                                                                                                                 #   	                   " 
                         
                                                                                                                                                                                                                             	             ,
                                                                                                                                                                                                                                                                                                                                                                                                                  "                                             
                                                                                                                                                                                                                              	          	                                                                                                                                                                                                                                                                                                                                                                                               
 *                           
     
                                                                                                                                                                                                                              	                                 
                                                                                                                                                                                                                                                                                                                                                                                        	    )           	  	   	  
      
                                   	                                                                                                                                                                                                                                                    	                                                                                                                                                                                                                                                                                                                                                                             .       
          
                             
                                                                                                                                                                                                                                                          
               
                                                                                                                                                                                                                                                                                                                                                                                      
  +          	
                   '                     
           
                                                                                                                                                                                                                                  	    	      
                  
                                                                                                                                                                                                                                                                                                                                              
       4  
                
 	        
       %" 	                
                  
                                                                                                                                                                            

                                   	      
                                                                                                                                                                                                                                                                                                                          	    $    
                
           
    
   	                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                   	 
  
 
                             !              
                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                	          	    & $  	 
         
                                   
  	                              
                      	 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          	        ) " 
  
        
 
                         $!    
                                  
                   
                                                                                                                                                                                              
       
                                                                                                                                                                                                                                                                                                                                           	                       #,     
                       	       
    
  	   
                                                                                                                                                                                            
      	                                                                                                                                                                                                                                                                                                                                                   	  
 ' *                            	  )& "  
          	      
        	              
                                                                                                                                                                                                                            
   	                                                                                                                                                                                                                                                                                                                                                 
     	    )    	   
    	    	             
 )& "        	         
       	       	               	    
 
  
                                                                                                                                                                                                                 	                                                                                                                                                                                                                                                                                                                        
   ' ) 	 	
              
            	 "	 !   	                             	                   
          
                                                                                                                                                                                                 	   
      	                                                                                                                                                                                                                                                                                 	          	   & ,  

   
                         '" (&% 	                                                                                                                                                                                                                                                                                      	        
                                                                                                                                                                                                                                                                                                   ' 	                              ($ ! 
                                                             	       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                  $ * 
                                    
  *% &$                      
                                                  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
  % ' 
 
                                    
 !
 -'&  !                                                
                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                     
      
               7 1   
          	     	                     22% &!                      
                        	         
   	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " 1   
   	 	                            
 ') )$  
                              
                           
                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                        % - $  
                          
  .*" " 	       	 
     	            
                                        	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              /     	                  	                
 +# .+                                           	                             
                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                      0     
 
                      :5 '$       
                               	     
       	             	                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                       3 ' 
                                	 *#
 40$ 	 
                                         	           
                                      	                                                                                                                                                                                                                                                                                                                                                                                                                                                  
      C  
                                           )' /)                     	                    	                                                                                                                                                                                                                                                                 	       
                                                                                                                                                                                                                                                          	 D 1                                                59  %" 
                                                    	                              	                                                                                                                                                                                                                    	                    	 
    	                                                                                                                                                                                                                                                                /                                                           6. +) 
                                                
             
                                                                                                                                                                                                                                                  
   	                                                                                                                                                                                                                                                                                        ; / 	                                              82 )$ 
	                                                                 	                      	                                                                                                                                                                                               	                         	                                                                                                                                                                                                                                                               	  = .                                                   93 (" 
                  	 
                                
        	                                                                                                                                                                                                                            & 
           	                                                                                                                                                                                                                                               	    
      

  ? "     	 	                                  91! (#                	 	          
                                          $ 
                       
                                                                                                                                                                                       	 
  
 	                                                                                                                                                                                                                        	        = & 		   	                                      7, *&                               	                                                	                                                                                                                                                                                                       	                       	                     
                                                                                                                                                                        0 '                                    	 2& *,(     
        	 
                 
               
                                                  	                                                                                                                                                                                                	                         
    
     
	     
                                                                                                                                       	      F H           	                               ('
 +*         	  
         	                                    
                  	              	       
        	                                                                                                                                                                                            
                  
              #               
 	  
 
                 
                                                                                                                  ( "  
                                                   ("  
       	  
                                       
                          
 
    
 
     	          
                                                                                                                                                                                                                            &   
       
 ,          
      
/    +	 !
 	                                                                                                                            C ' 	                                                          0+ #       $        	          	                                                 
           "    
                                                                                                                                                                                                                  
       	 
  	                   	  /           2 , 

                                                                                                                       
 &  
                                                                                 	       	                               	                                 	               
  
                                                                                                                                                                                                                                        	    # , +    * " ,      	                                                                                                               5  
                                                     
 &$. 
	                      
      	   
                 
  
         
                                                                                                                                                                                                                                      
        	             	                    
      #  
 
 . !  	   Y 2 3 
  	   	                                                                                                       - 	                                                            .,( (                     
 	      
                                                   	                   
  
                                                                                                                                                                                                  
         
    
                    
                   M (1 >       8$                                                                                                        
 #  
  
                                                                   
   	                	           	   
            	         
     	           	                                                                                                                                                                                                  	
        
            
                                      (      
  
 & 
 = 1                                                                                                 	   	                                                 	  
    
          
 	             	                                         	              	       
                                                                                                                                                                                                                                  	    	                   	                                  E. 8     

    =        
                                                                           
                                                    	  
                 
        
                         
                  
  
   	      
         
                                                                                                                                                                                                     	                                                       	 7(  ,  
     4 5                                                                                 
       
                                               


                         	     
                              
        	                       
                                                                                                                                                                                                                                    
                                                     
         
 3.  %  
  		  0  '                                                                                                                                                     
  		        
           	        	        
                                                           	                                                                                                                                                                                                             
                                                                                              
 <$   	 	 
  / 	                                                                                                                                               	                
              	     
 
                      	    
                                                                                                                                                                                                                  	 	                                                                                                    
      ? :   
   ' R                                                                                  	                                                               
  	     	  	   	                          	        
                                                                                                                                                                                                                                                                                                                                                                  
    $ ! (  
  	                                                                                                                                                                     
 	 
      
                                  
     
    	       	         
                                                                                                                                                                                                                                                	                                                                                                        
 
      	 * 	  	   	                                                                                                                                                        	 	      
       
  	    	   
    
    	 
             
   
           	                                                                                                                                                                                                                                          
   	  
                                                                                                     
                                                                                                                                                                                                  
  
        
   
              	    	     	               
   
   
                                                                                                                                                                                                         	% 
         	        
                                                                                    
                                                                                                                                                                                                        	 	                    	   	*                                                                                                                                                                                                                   
 
 
                                                                                                                 
                                                                       	  	                                                        	&                 
         	         
                           
           	 	                                                                                                                                                                                                                       	       
                                                                            
               
    
 
                                                                                   
                                                                          
     	    
       	 
  
                                                   	          	                                                                                                                                                                                                 	      
     
                                                                                                   	   
                                                                                       	                                                                                                            
                       0                
                                                                                                                                                                                                                                                                                                                                        
         
    	    	 
                                                                                 
                                                          
         
          	        	   	                	!     	                     
          	                                                                                                                                                                                           
  	            	                                                                                   
             ! 
                                                                                                                                                                     
           	       
   
 	     
    
       
      
          
                	                                                                                                                                                                                                 
        	                                                                                       	        
   .        
 2                                                                                           
                                                             	 
                                  
                  	           	   
 
                                                                                                                                                                                                                      	      	                                                                                                        2  
    !  9$ !                                                                                      " & 	                                                   (                                                     	       ! 
     	               
   	    
       	                                                                                                                                                                                                           
     	      
                                                                               	 ) 3       9! 5          
                                                                         ( (    
                                          
    	!         
                  
               	            	                                                                                                                                                                                                                                 	 	       
                                                               
 $ 4  	   
 2 :"                                                                                             !  
                                                   "! 
	                	          
 
                
     
      	                  	     
  	                                                                                                                                                                                                                                                         
                         " % &    	  	 0# ?                                                                                                     0 /                                           


  +#
 $      
   
         
      	   
 	              
                
                                        
                                                                                                                                                                                      	        	 
       
                  	             	    * ' 
     & 4  $                                                                                                        4   	                                                  
	   	             
                
                     	 
                                	    	                                                                                                                                                                                   	  	"       	     
 	                                   	  . ,      / 8   	                                                                                                               	 ?	 #  
                                           '     	 	    	       	   
                                        
               	   
    
                                                                                                                                                                                        	 	
   
              
 (             	                     	   (  & 	    % + "
                                                                                                                     $ 0 9                                           
         	 
   
      	                 
                                
      
   	                	 
%            	                                                                                                                                                                                                                
 	  	          	  
                            
          ? *                                                                                                                         9                                              E7 
        
      	            	                                
         	  	      
                                                                                                                                                                                                                                                                         
   	         	        
    
 $
  
                                                                                                                      
  
 C! <  	                                               5-  	                 
                         
                                                  
                                                                                                                                                                                                                         
     
 
 	    	 )   % 	       
                                                                                                                                      " D +                                                            "           
        
         "               	                   
   

    	                                                                                                                                                                                          
                      
           	  
	    
       
                                                                                                                             
   0                                       	
  N@               	         & 	                                             
      
    
      	                                                                                                                                                                                                             
 	               
      
 B-                                                                                                                                                                   	      D   	    
                	         UG     	                  
                        	                  	                                                                                                                                                                                                                                                   	 
 	                          	  	     	                                                                                                                                                   	       
  B' 6    
             
                                   
                                         
        
                 
                                                                                                                                                                                                   	 
     
     
                                                                                                                                                                                                                                                         
  K'   O    	                             QA  	     	          	                 
                
    	                             	                                                                                                                                                                                                           	    
      	                                                                                                                                                                                                                                                                        
 
 I" 
	 !  
                         J=   	        
                         	     
        	                         
         	      
 	                                                                                                                                                                                                                             	                                                                                                                                                                                                                                                                             B+ I           
                              	 
                    	                               	   	                          
 	                                                                                                                                                                                                      	 
                 
                                                                                                                                                                                                                                                           	         ?  4  	                                    % >0 	                 	   	 	   
       	          	           
                  	                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                      3 - , 9                                   


   H< 
        
                         	  
   
                  	   
              	                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                  
    	  " -   %        	                      


   A2 $  
            
 	           
      
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2   /     
                                4 4%   
      	       	                        
         	               
                                                                                                                                                                                                   
                
      
                                                                                                                                                                                                                                                                              <   %         
                   
   @5              	                   
             	           	                                                                                                                                                                                                                              	                                                                                                                                                                                                                                                                                                                                      . Y. ;         
  
                  
      
  
                        	         	              
                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                 
 	 D%   3   
                                      <2 "      
                           
   
         
                                                                                                                                                                                                                	                  
                                                                                                                                                                                                                                                                                                                	      $ L- P %	                          


                        
                    	                 
 	                                                                                                                                                                                                                       	   0  	 	 
 	                                                                                                                                                                                                                                                                                                        
        
 . Y* 9    
   
                          	     	     	   
 	                
 	       
   
.  	  	                	                                                                                                                                                                                                          
           
    	                                                                                                                                                                                                                                                                                                    
  	    H + " ,     
                            			    1* +"      
           	                                	          
 
   
     	                                                                                                                                                                                      	       
                                                                                                                                                                                                                                                                                                        	      		      -                                            2) ) 
    	   
   	         6     
 	        	      
  
     	 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
       
      +                                       7. $ 	         	        "                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               	     : * 	 #                    
    	    
 70 ' 
 
                                     
    
              
                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                          
                   ; -  
 %   
     	 
             
    73 )           
                    
   
         	                                                                                                                                                                                               	      
           
                                                                                                                                                                                                                                                                                                                               
  6! %
     
     
                  
    '  *"      '              	           
               
                                                                                                                                                                                                       	          	                                                                                                                                                                                                                                                                                                                                                             8    *   *      	 
     
        
     %  5*   
 
        
          
     
                                                                                                                                                                                                                   	   
    
        
                                                                                                                                                                                                                                                                                                                                                              8& 8 $  
          	                )" %      	   
                 
            
          
                                                                                                                                                                                                      	 	 	 	              
       
 	                                                                                                                                                                                                                                                                                                                                               	   , ,  ) %                         %! (       
  
                 	            	   
                                                                                                                                                                                                    
   	                
    
                                                                                                                                                                                                                                                                                                                                                             R H  ) $                          			       
 $ 	 $                                	                                                                                                                                                                                            	  $       	   
                                                                                                                                                                                                                                                                                                                                                                                 
	 2 2   !                                   -#	         
"       	       
   	                                                                                                                                                                                                         		 	            	  
 
-  
 	    	                                                                                                                                                                                                                                                                                                                                                                                  -     
                            XJ 		 
 
   
             	 )                                                                                                                                                                                                                   		      	     	  	      
                                                                                                                                                                                                                                                                                                                                                                                             + +    (            
 
 
     
   
            	              	  
       	                                                                                                                                                                                            	                                                                                                                                                                                                                                                                                                                                                                                                                         1 D 
  - 	  	    
  	 
 	        	                      
                                                                                                                                                                                                                                  	 !         

  
                                                                                                                                                                                                                                                                                                                                                                                                     
  ; >   " "            
                        
  	 
    	       
   	                                                                                                                                                                                 
       
             	                                                                                                                                                                                                                                                                                                                                                                                                                      $ $ ?        	         
    	       	               
   
                                                                                                                                                                                  	             
               
                                                                                                                                                                                                                                                                                                                                                                                                                      
      # #     
    
   
                 
                                                                                                                                                                                                                
         
     !                                                                                                                                                                                                                                                                                                                                                                                                                                        =    "  "  
                                     	                                                                                                                                                                                             	 
   
      
  
              	  
  !                                                                                                                                                                                                                                                                                                                                                                                                                                                         		 
 	      
 	         	                                                                                                                                                                                                                             *                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ' 
      
       
 
                                                                                                                                                                                                 	    	                  	  	    

     
                                                                                                                                                                                                                                                                                                                                                                                                                                      		 	                       
                                                                                                                                                                                                                	                
  
                                                                                                                                                                                                                                                                                                                                                                                   	   	                                                                                                                                                                                                                                     
        
   	    	 
      !                                                                                                                                                                                                                                                                                                                                                                                                         
 
  
 	               
  
 
          	      
                                                                                                                                                                                               	                       	  
 
        
                                                                                                                                                                                                                                                                                                                                                                                       !  	          	                                                                                                                                                                                                                                                                              
  '6   %   
                                                                                                                                                                                                                                                                                                                                                         
       
  $   0   
                         
                                                                                                                                                                                                                       
                           	 +                                                                                                                                                                                                                                                                                                                                                                                       , 
        
   
        	                                                                                                                                                                                                                                           	   	                     
            %                                                                                                                                                                                                                                                                                                                                                                % 
        	 
  	                     	     
                                                                                                                                                                                                         
                   
          	 	                                                                                                                                                                                                                                                                                                                                                                           
                              	     
                                                                                                                                                                                                                     
           	                    
 
 &   3                                                                                                                                                                                                                                                                                                                                                         
  5  	                                                                                                                                                                                                                                                                   	   3 	    
   
    
          +  -*  # *  K4                                                                                                                                                                                                                                                                                                                                                                                        
  
  *    +   (#              0      
                 	                                                                                                                                                                                                 	 
  	 #       	      '"  %!  	 5  P2                                                                                                                                                                                                                                                                                                                                                                           & !      - 
                                   
         
                                                                                                                                                                                                           
 
               	 )       3  N) (    	                                                                                                                                                                                                                                                                                                                                                    
    ' - %   
  % &#                       
   
          
                                                                                                                                                                                                                        	           
   	 
    	 
        
	  
     ! *  7% 8                                                                                                                                                                                                                                                                                                                                                                     4         *%  	            
               	   
 	                                                                                                                                                                                                  	         
       	      	       
     )*    D  2 4  	                                                                                                                                                                                                                                                                                                                                           	        
  ) 
      +&!     
 
    	           
                        
                                                                                                                                                                                    
             	   2   	       
      &"       	    
  
                                                                                                                                                                                                                                                                                                                           	 	  	      
   .' "           	  	         
 	  
      -  
                                                                                                                                                                                                                                        	       
         
	   "    

 
                                                                                                                                                                                                                                                                                                                              
        .<-  

             	      
         	   	   	     	                                                                                                                                                                                	                                             	    
    
   

 
 5,            
                                                                                                                                                                                                                                                                                                             
         	
  
   '( #  	
                                              
                                                                                                                                                                                                     
              
    	 
 	    	 
   
 	 	
                                                                                                                                                                                                        
          
             	   
   
              
                                                                                                                                                                                                       
       	      	!                  
       
 
  
       
                                
        
            	        	             
                        	
 
                    
   	  
        '        	          
            	          
                                                                                                                                                                                                    		       
           
                       
       
          
 
    
&             
                 
         	 
     	    	 	
 
 
      
    
                              
 
    
&           

                
          
           	             	                                                                                                                                                                                                               ) 	    	
 	 
              
%          	           

    
      

          	               	    #    	 	
     )      	 
               

%   
      	        
  
   
      

          	 	                   "             
' 
    	  
             
      	                                                                                                                                                                                                                       
 %     
 
               
             	   	        
      
           	                   
      	   
    
      
 
%     
 
               
             	   	        
      
           	                 
             
 
 
     #     
 	                                                                                                                                                                                                                
                	 
'               
 	           	
               
      
      	                          
                	 
'               
 	           	
               
      
                                   	      	        	 !                                                                                                                                                                                                          	     
            
 
 
                     
&    
     $ 
   	      
' 
           
          
       
     
            
 
 
                     
&    
     $ 
   	      
' 
           
        
       
   
            
    
       
                                                                                                                                                                                       	  	 	
            
           
  	          
    
        
 	   
            	           	         	 	
            
           
  	          
    
        
 	   
            	               
      	   
           
            
 	                                                                                                                                                                                                     	   	      
          
         
     
  
      
       	
      
              
                    
   	      
          
         
     
  
      
       	
      
              
           
             
       	          	      	                                                                                                                                                                                                  
          
                      	
          	     	           	 
     
  
   
               $         
    
%        
                      	
          	     	           	 
     
  
   
              
$   	       	
    #                              
                                                                                                                                                                                                        
     
            	  
      
%         
                 	         	 	   
         
 
  
            	        
            	  
      
%         
                 	         	 	   
         
 
  
               
   
  	 
        
           
     
                                                                                                                                                                                  	     /         	 
   	   
 
     	       

        	 #   	                                     	       	 
   6 
         	 
   	   
 
     	       

        	 #   	                                     	          	 

    4           	 
      	  
                                                                                                                                                                                                                             
     	 
              
           1 	         
     
&        
   
        
 	  
    	       
      
    
     	 
              
           1 	         
     
&        
   
        
 	  
    	       	      	  
  	       	               	                                                                                                                                                                                                   
                 	  	    
           	      
 	
    	    
                          
  
      
     
      
                 	  	    
           	      
 	
    	    
                          
  
      	      
                      
   
                                                                                                                                                                                                    
  	
           
        	      	    
 
     	                                 " 	              	     !>            	
           
        	      	    
 
     	                                 " 	        	
      
      >                 
      	   	                                                                                                                                                                                                   
                                   )    	         
        
      	    
 	             )    
 
    
                                  )    	         
        
      	    
 	  
          )    	     	             	           	   	                                                                                                                                                                                                                       
 	    	        
      	        
 
                                  	  
#          "            
                 
 	    	        
      	        
 
                                    	#      
    ! 	         
                  	                
                                                                                                                                                                                                   

                  	      
 
           
                             
     
     
                                	      
 
           
                            
      
     

                                	                                                                                                                                                                                                        
     	   	                   
     
     	   
     
   	 	       
                	     ( 
 	             	
      	   	                   
     
     	   
     
   	 	       
                	    ( 	 
                    	                                                                                                                                                                                                                                    

     
    #                               	   	 	   
(    
      	                 	        
 	   
     	      
  
 
!         
    #                               	   	 	   
(    
      	                 	          
    
 
 
       
   
              !                                                                                                                                                                                                                                                  	 
   
    
        		                      
        	   
                               	  
    
      	 
   
    
        		                      
        	   
                        
         
 
   
                 
    
                 	                                                                                                                                                                                          

 
          
     	  
       
 
  	     #      
    	             
              	               
   	     
               
     	  
       
 
  	     #      
    	             	            
                 	     	            	   	     	     
 	                                                                                                                                                                                           
         	                           	    	         	    	   	        
            	   	     
 
            	          	                           	    	         	    	   	        
           
   
     
 
         	
    	         
       
                                                                                                                                                                                                 	  )       
       
                 
             
    	                                     
         (       
       
                 
             
    	                                    	   	      
'             
    	                                                                                                                                                                                                       	 

                
 0  
 
                        
     
                  
#     	     
               
     	     	                
 0  
 
                        
     
                  
#     	     
             
         
 
           
    ,   	     
                                                                                                                                                                                                             
       "            
   	     
   	                       	    
 
  	   
     
           	 
             
       "            
   	     
   	                       	    
 
  	   
     
          	 
                    
 
                                                                                                                                                                                                         	
  
                  	          	  	         	
         
 
       	   	         
 
    
               
       	                   	          	  	         	
         
 
       	   	         
 
    
               
                                                                                                                                                                                                               
                    
       
    
  	 
          
 
          
)     
    	           
          )                	                      
       
    
  	 
          
 
          
)     
    	           
            )                	                      	 !        	                                                                                                                                                                                          
 
       #                 
  	            	       " 	                
 .                
       	      
 
      #                 
  	            	       " 	                
 .                  
        	      	 
      !         
          	                                                                                6                                                                                         	              	   	      	                     	      	           	                   
$    
      	                  	   	      	                     	      	           	                  
$       
   	                
    	                                                                                                                                                                                                  
        
  	                       
        	          
   	           	                                  
  	                       
        	          
              	                        
        	 
 	         
                                                                         3#                                                                                              	 
     	
   	  
            
 
         1 	
   	 
        
  
 
   
        
           %                   
      	
   	  
            
 
         1 	
   	 
        
  
 
   
                    %                           	 	  
           
                                                                          7$                                                                                                                      
      
     
         	
   	
 , +    	  	                                   	   	    
     	       	          
      
     
         	
   	
 , +    	  	                                   	   	         
                 
 	   	           
 	                                                                                 `                                                                                             	   	 	     
 
              
 	           
       	          &    	          	 
  	                  
       	          
 
    
 
              
 	           
       	          &    	          	 
  	                 	       	      
  
     	                                                                                                     3#`                                                                                        
                        	      	     
      
              
   
 
   
              
   
          
                        	      	     
      
              
   
 
   	
              
   	   
      
                     	 	                                                                                0 7                                                                                            "                  	    
      	  
       
                            	             
$ 
  
             !                  	    
      	  
       
                            	          	   # 	  
      	 	     
                          
                                                                                   7                                                                                               	
                 	      	       	        
      
                              	 	 
                  	     	                 	      	       	        
      
                              	 	 
           
           
            	        	                                                                                               
                                                                                                                                           
                
                    
                	            	                                       
                
                    
                	            	          
      
                                                                                                                                                                                                                                       	            
                         	
                      	                                              
     	            
                         	
                      	                             
               
                                                                                                                           	Q                                                                                                
 	       
             
 
   	
 	   
       
    	                                   	           
 	                     
 	       
             
 
   	
 	   
       
    	                                  
          	                                                                                                                                N3 B                                                                         	
 
                	        	                	                 	                              
            	
 
                	        	                	                 	                        
                             쾴                                                                                                     
                                                                                                         
                                                                                                 
                                                                                      
                                                                                                                               "t	                                                                            
    3 	    
   	
             	               	      
         	        
 	 
                 
        
    3 	    
   	
             	               	      
         	        
 	 
   
  
           
       
    0 	             
                                                                                                                  l 
                                                                 
           
 
  	 !    	     
               	                
   
   	 
           
                      
           
 
  	 !    	     
               	                
   
   	 
           
       
            
        	
 	   	                                                                                                                          't                                                         
             	                      
            
                        
             7             
        	                      
            
                                	      6     
           
  	                                                                                                                                   $N< 	                                                                               	             
   	      $ 	          
 
                
   	
   	        
%     	                   	             
   	      $ 	          
 
                
   	
             
$      	 	                 
                                                                                                                                          G/
I                                                                      	    	
                     	            	           
           
         
 	                       	    	
                     	            	           
           
 
         
          
       
          
                                                                                                                                                          *#H6                                                                      
         
      	 
              	 
             	       	          
            
               
            
         
      	 
              	 
             	       	          	           
                                                                                                                                                                                        .8 D0                                                         
      
       
         	    
      
   	     	    	                    	 	   
% 
     	     	
       
      
       
         	    
      
   	     	    	                     	   
% 
     	                                                                                                                                                                                             )@5                                             
        	     	
                                   	
   "                      
      	          
 	    
 	   
      
        	     	
                                   	
   "                      
      	          
    	 

 	   
    	   
                                                                                                                                                                                      
      
   
      - 
  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               	   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    bA
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              bA
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            bA
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 s=?    IENDB`           (     (                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ghcjldjmepqimqiirkhrlfrndrnbrofspkqpkqpkqpkrpkrqkrqlrqlrqlrqlsqlsrlsrmsrmsrmsrmtrmtrmtsmtsntsntsntsntsnusnusnusnutnutnutoutoutoutoutoutoutoutoutovtovtovtovtovtovtovtovtovtovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovuovtovtovtovtovtovtovtovtovtovtovtoutoutoutoutoutoutoutoutoutoutnutnutnutnutnusnusntsntsntsntsntsmtsmtsmtrmtrmsrmsrmsrmsrlsrlsqlsqlrqlrqlrqkrqkrpkrpkqpkqpjqpjqpjqojqofroarodqmeqmgqliqjlqhophildildfgb~}~                                                                                                                                                                                                                                                                            2GVz~{Ysuotnpjjmfjmfprknrkjrmjrmgsngsodsphspkrpkrqlrqlrqlrqlsqlsrlsrmsrmsrmtrmtrmtsmtsntsntsntsnusnusnutnutoutoutoutoutoutovtovtovtovuovuovuovupvupvupvupvupvupvupvupvupvupvupvupvupvupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupwupvupvupvupvupvupvupvupvupvupvupvupvupvupvupvupvupvupvuovuovuovuovuovtovtovtovtoutoutoutoutoutnutnutnusnusntsntsntsntsmtsmtsmtrmtrmsrmsrmsrlsrlsqlrqlrqlrqkrqkrpkrpkqpkqpjqpgrocrofrngrnirliqlmqjpqjjleileopiosmput}~qQ)                                                                                                                                                                                                                                                        ѵ
@debmlqhglcdjeflejqhmtgqwgowjkxnlxqlxukxxizjzf{xmvmrpoqqoqqorrprrprrprrprrpsspsspsspssqssqssqttqttqttqttqttqttrttrttruuruuruuruuruuruuruusuusuusuusuusuusuusuusuusuusvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsvvsuusuusuusuusuusuusuusuusuusuusuuruuruuruuruuruuruuruuruurttrttrttqttqttqttqttqttqssqsspsspsspsspsspssprrprrprrprrorroqqoqqoqqoqqnqqnpplqowlue{iyxiytjwqkwmkwijwfnvfpvelsdipdelbcihflnlr}g|c                                                                                                                                                                                                                                     ̲[{fbdkpYtzconrqprpqtprvjotgkrekrelsikuniuojvthvuiv|ivgxuktlpnnppnppnppoppoppoppoppoqqoqqpqqpqqpqqpqqprrprrqrrqrrqrrqrrqrrqrrqssqssrssrssrssrssrssrssrssrssrssrttrttrttrttrttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttsttrttrttrttrttrttrttrttrssrssrssrssrssrssrssrssrssrssqssqssqssqrrqrrqrrqrrqrrqrrprrprrpqqpqqpqqpqqpqqoqqoppoppoppoppnppnppnppnppnoomoomoomoolpmujt~fw{huthusguniumhthjtdkrdjqfjqintoptopspoqnmqyb~pYvccjp~w@                                                                                                                                                                                                                        ƾ^ysh{^_fkkshlriputr`rr_on]rkcyog|sp{po{lozopwoqvpqupqqqporpmspurq}qr{qs{qs{qs{qs{rs|rt|rt|rt|rt|st|st}su}su}su}su}tu}tu}tu}tu~tv~tv~tv~tv~uv~uv~uv~uv~uv~uvuwuwuwuwuwuwuwuwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwuwuwuwuwuwuwuwuwuwuwuw~uv~uv~uv~uv~uv~uv~tv~tv~tv~tv~tv}tu}tu}tu}tu}su}su}su}su}su|st|st|rt|rt|rt|rt{rs{qs{qs{qs{qszqrzqrzqrzqrzpr|pqtqplronqoppotopuopwnpynozknzon{roxnfqjbnl\pp]sq^hotgkpjrekz_arn2                                                                                                                                                                                                            Xepmi}khmoloufjdhliosmoforkosnjnpelndlsenvboy`py_py\pz[qzYryYryWty^szcq|bq|br}br}cr}cr}cs~cs~ds~ds~ds~ds~dt~eteteteteteueufufufufufufufufvfvfvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwhwgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvgvfvfvfvfvfufufufufufufueueuetetetetetetdt~ds~ds~ds~ds~ds~cs~cr}cr}cr}br}br}bq|bq|bq|aq|aq|aq|bq|\rxUsxWqxWqxZoy[oy]ox_oxamxcmuckrdklimnnrmnqjkndhmqbfktdi~knln~ifqmjvxx#                                                                                                                                                                                                Ygpppdozfvuertcpflnitnktdgo]XaUfRnJoBr=|71*)&&)*,......./////////00000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000///////////.......-----+)(&&()06<z@qInQlSeW_~en\ischsmdjmrbnsdpxetqdofnn<
                                                                                                                                                                                        MsfiffikqlsqhoriqwjwelsWjoPqmR}|HwI{LMNLD<;9889;;==>>>>>>??????@@@@@@@@@@AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAA@@@@@@@@@@@??????>>>>>>======<<;::8778:;BJMLJGzGuP|zOokUhmdkquiupgoognpiqfiiggg}o                                                                                                                                                                            N~|o]h}ltzhncnm^rmfpmmht_d}Kp6#"4In]c{kfseol\pkalkxfl{lsq`jyw헡~(                                                                                                                                                                ^gpn_dbqppngeuijfjlflrUnzLnE|EB42@CCzJlSlxekpdhjsghlecpoobfdhlk򝙙3                                                                                                                                                        ƶY|njqh[l{eWv_gp[{tk}ot_Gq,(,("!"#"" !'*'+Do]~{mryrhenYTt]jzcri\wkh잓2                                                                                                                                                `pijfd_qthjqbfn_wyo_fkOmO>1$(!   '#/<M}Lk~\ciuvldl]ho_orfic`ohkꔐ:                                                                                                                                        ^gmnZeiarl[teunei_{fj_q<!!!! !'&&&'''''''''''(((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(((((((((((((((((((((''''''''''''&&&&&&&&&%%%&     :]oycgg\slcXqb_ojZeigkl횙/                                                                                                                                    \kkmikhnnglpilrqhowRftGqG7!!!!!!!!!!!!!"""""""""""""""#####################################################################################"""""""""""""""""""!!!!!!!!!!!!!         5DEoOcrelujpoimfkkdikhhhi睝!                                                                                                                                    P}}b_euqjyr[ynd}gtT_?s1!!v t /=pQ\~zdrwlawpXrnfcagwww𤨥}                                                                                                                        Yxief`xaqqcplohoMcy?x6)u          t'3<uJ`vlelminn`]u^khhs견	                                                                                                                "SzrklMNry^doobyDt1!E                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                              E 
/Aql^valpw[J}KogiU~L                                                                                                        ckbsvcytpthuZrrmgb}Jo<+!!1                  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                           0)9Gkd^zooidrWplps_wlcp㜘(                                                                                                    ^x~lgqbftrnrqcqgkWiF3!! !!!Fm               !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                    lF  1BSendh|m_oko^bpjfqxtz觯                                                                                                !_e]lpjnlnnjnsiuQg90# ""$  d.              !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                .c"  !.6Mdpeqjfjkhkhkgah_H                                                                                            edogfteem`srlojnubzVs3 '$%  |            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              #"%0Ror^wlfjoniai[bpadkf蕦#                                                                                        UUd_`vcowhmhllzGo1#%
F           !!!!!!!!!!!!!!!!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!             E
#!.Ckhhwidksd\s_Rc^|𰶲}                                                                                    
r\hj\pjYw`js`ielgzI*"&" (          !!!!!!!!!!!!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!            ( # (Dhbvd`fo\Ts[Xle`jm                                                                                VljqijjmvhmrjegnGz,!" JV         !!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!           UI )Cv`biinfhrdeffhfmﻷ                                                                            ͿgvlmnjrnknosgnqiknwK$"! n         !!!!!!!!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!          l!Ffisimdkobifijenykn'                                                                    \x^jfyilzmrziq\h~8(%!$ !
Y        !!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!          X
!#&4~WcyvdmvhntehYfbp𸻷	                                                                    
uSni^nj~mn}ns|eqbj:%*$'!!
    !!!!!!!!!!!!"""""""""""""""""""##################################################""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!         
$!'#6\dx`myinzhiYjfQmg                                                                HPnd_tkzokskqgf?u' # =
V  !!!!!!!!!!""""""""""""""""##################################################################""""""""""""""""""""""""""""!!!!!!!!!!!!!         U
<!$:pb`nelujfYofJi^n                                                            h|lmTwk]rhxmingnjjE(!# d

  !!!!!!!!""""""""""""""#############################################################################"""""""""""""""""""""""!!!!!!!!!!!!         

b!%@ddhahshcXmcNrf|il                                                        kmffotkfqgiqg_qqLv5!!&(#	

M  !!!!!"""""""""""""#####################################################################################""""""""""""""""""""!!!!!!!!!!!         L

	 $#0FqYkkclaalbjofkdd9                                                    NslljnfhqhkthexyM8"!')#	
  !!""""""""""""########################$$$$$$$$$$$$$$$$$$$$$$##############################################"""""""""""""""""!!!!!!!!!!!         

	 %#3Fz_rteobblbdh`mggz                                                    khneqsql]|tl~ov[Pv% =		
: """""""""""#################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$################################"""""""""""""""!!!!!!!!!!!        :
		;"JqipTnfxfVvkmkelb                                                    3elbkokqbogzpx^S&  i	
}!!""""""""###############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##########################"""""""""""""""!!!!!!!!!!        }
	f#L|irWiatk]|eie_f\½N½                                            Mdnfgmj|nogwXwxA#   	
% !""""""#############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$######################""""""""""""""!!!!!!!!!!       &
	 ;Pppiapwg{agd^g_~¸x¹                                            [ormgoihnk~oohxUzF$     	
\!!"""############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$###################"""""""""""""!!!!!!!!!      ^
	 ?Pvweifncweao`icjlg                                            xhkmfpngnlxmoemu<4        I	
 !"###########$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#################""""""""""""!!!!!!!!!!     
	G-;Nlnhfkvgx`gf`fg                                            :moriqqlppvmlis|>4"      !w	
;!"#########$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$################"""""""""""!!!!!!!!!    =
	t 5G^llfdcrkp^egfhhkjd_^X)                                            Pzzlmtintprvxsiav~*$#      !! 		
h}!"#######$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$###############"""""""""""!!!!!!!!!   }y|n
		+B[qeohne{fVziliobgx`k|fox`k8                                            SmktlishkomqtuslZv,%#      !!!!-	
 {wy !"####$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$##############""""""""""!!!!!!!!!  }vty!
	,!$(.:xGh~Ncscepmgodleiatm_|ghhvems_jsckpdi;                                            qjxtnxmknsqsmsnP|#       !!!!!_	
Itrx!"##$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$############"""""""""""!!!!!!!!  uopxM
	\,=L{p[rXepZlo^ro_up^jp_fo]aldhflugzheiibpjasaek\ie]                                            skxskwpoppprjurP#      !!!!!!	
ekoy !"$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$############""""""""""!!!!!!!! vlhmk
	!(/5:~@mGgxOmsSpnXpjZoh]qhjngpngjmdjmdhlbhlejfoeelccpccqedkffh                                            uixuhwuqojrp_uyG!"      !!!!!!!"	
(ffp~!#$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$############"""""""""!!!!!!!!!ylddk+
	&:Ozuo^tZnYlZmclriyyfz`lqNplfjnrhoqimqjjpkepjeamfWkhOgoMhokblx_k                                            ulxrjusslgrkXvE#       !!!!!!""P	
D`fs "#$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$###########""""""""""!!!!!!! ob]`I
	M&088?xIlRky\othmmhmfspkwtlsqkoiknimqkohlo_longrvesofqjimokesjahm`dka[glYfnkbns`m                                            |zxtnzrmuowfeuhPv<$      !!!!!!"""	
T\hx!##$$$$%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$###########"""""""""!!!!!!  udYWW
	".Emz~ph~mjln~nrznstluolukoyipwfspcojbmdfpcnvawmlbx^}]~m`xbgqpkbzl\zmY}lUiicgdllaqj`p                                            tttqmwpoukwddxiKw?%      !!!!!!"""""

'}Ux\m "#$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$##########"""""""""!!!!!! |iYRxSy*


"-9AJUn\g~ppqmqunousovtqtsqspoqooqlrriooipljqomrpppnonkooepndshlwbvddu[gtikhsjbrm^sl]aif`fkoblobk                                            rtvjlulotgz^b}jEw= %     !!!!!!""""""E	
;sSuas!"#%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$########$$"""""""""!!!!!  o]PuKn=}
	
B 5Ljrzyniwtbs}\r~akpxkqylpvqptprnprnqslprjkrjkphkojknonmrtiuudxis_`LesYljlXiuMhw^injhhjkbkkbZigWjhsdhtcg                                            rvvplqrpspuibtpA~9"      !!!!!!""""""|	
}FiTwf{#$%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$#####$! """""""""!!!!! wcRw
Gh
Ci
	
u5AJUv`o}foxlrvqtvowtmyplxpprupruoqtppqppnoonqpmqropsopsonqnkmmjjmnjnqkqlofhu_lpgjij`fm]hofjlhggkkgljfahg]ffibekef                                            ovutmowpqvqtbmx;3!$!     !!!!!!""""""##	

!sJhZ~n!#$%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$#####$!""""""""!!!! ~jV~
Gh@^!

	

:W|vpwpqtptpusztrrttmtyisyhsxrrrrrrqqqqqqqqqppppppooqqqqqqqonommlmmllmlklkkklkhllknjljkjilkijiihhhiikggigffhfffggcee                                            mtrtnovpqvssfq}>4!#      !!!!!"""""""##A	
2eMl`v "$$%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$#####$$"! !"""""!!!  r]Jl>[
-g
	
%*ao|vt}v}~pusuutvvttvsrttprxqrxpqxrrrrrrqqqqqqqqqppppppoooooonnnnnnmmmmmmllllllpppkkkeeefffkkkkkkhhhhhhhhheeeccc___jjjwwwr                                            lrqwqrunpvqqhr}?4!#      !!!!!!""""""###	
|>^Sth~!#$%%%%&&&&&&&&&&&&&&&&&&&&&'''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$####"'+&!!"""""!!! ydPt?\4T
	
[Ppn}qvtvuu{utrvtrvsqttqrxvqxupxrrrqqqqqqqqqqqqppppppooonnnmmmnnnmmmmmmlllmmmjjjkkkooommmhhhfffhhhgggbbb___uuu7kkk                                            mtsyrsuopqoofr|?4!#     !!!!!!""""""#####
	

nFbZ~q"#$%&&&&&&&&&&&&&&&&''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%$$$$$$$$$$$$####"%)&#!!"""""!! lV~Cb
6Nx

	
	rt{szuv{wvrwtovtmxumwtptuvrv~ow|owrrrqqqqqqqqqppppppoooooonnnnnnnnnmmmmmmllllllggggggiiiiiieeefffdddkkk~-                                                    nsrwqrtnopppdr|@4!#      !!!!!""""""######E	
+`Ljcz "$&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%$$$$$$$$$$$####"%*($"!"""""!! u_Ij9Q#]
	
>-otruww~xvswujxthxthwtgwtnsuzruowowrrrqqqqqqqqqppppppoooooopppooommmmmmlllllljjjppppppdddcccnnn|||6                                                            krqvpqvopqqqes|@4!#     !!!!!!""""""###### 	
|:\Tuk"$%&&&&&&&&&&''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%$$$$$$$$$$$#####$%$#! !""""!! }hSu;S&<

	
VYy|wx{vuyutyurwwnwujvujvviuunususszptzptqqqqqqqqqpppppppppoooooooooooommmmmmlllmmmnnnhhh]]]nnnI	                                                                        jrqvpqxrsuuuer}?4!#      !!!!!""""""######$$	

pFa\t #$%&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%$$$$$$$$$$$########" !""""!  pRw6I%,p

	
d|sj~rn|plyslytnwukvvjvvjuuiuunussssxqrxqrqqqqqqqqqppppppoooooonnnoooooommmmmmkkkhhhfffz6	                                                                                    ksrvssvrrttter}>4 "    !!!!!!""""""#####$$$O	
&bMke|!#%&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%$$$$$$$#"%$#""##!$+%!"""! 2i7M[,7A"%*L
	
87rzrsxuxwvztx{sx{sxytyysyttussurvsrwtquqnqnoooqqqqqqmmmooorrrqqqnnnmmmooonnnhhhmmmtS                                                                                                ltrvssurrssser}>4 "    !!!!!""""""######$$$!	
7]Uvm"$%&&&''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%$$$$$$$$#$$#""# "(/%!""")z8_zKMT?:<-*-1
	
`cuztwxvzuvryrzqyu{~szwqusprnrootpkunltnyyypppooottttttnnnlllqqqooodddt}}}w?                                                                                                        ltrvssurrssser}>4 "     !!!!!"""""######$$$$$ 

tEb]u #$%''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%$$$$$$$$%%$#""$ %&*$""!4QSoxKe\EUK@B<01.!""x


|vy{vz{vyztzzs{zs{yrzwqwwpwvsswsuxtryutxvowvolllrrrqqqllllllpppmmmnnniUxxx                                                                                                                ltsvssurrsssfs}>4 "     !!!!!""""""#####$$$$$$b	
 iMkf~!#&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$%%####%!'&% $9Qqcj{^gbK^K;K=470%'#Y
	
KAuz}u{}tz{t{zs{yszyrzyrzwqxvrrvssztrvqotpjtpiqqqooouuuttteeennndG
                                                                                                                        ltsvtturrsssfs}>4!"      !!!!!"""""######$$$$$$"	
1aVvn#%&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$$###$#&((+;R[brvqx|prsiik_[_UINA8;%*+;
	


emtwypxxoxxjwwiwwhvvlvvowuqsrnoorqqvttzqs{ss|uuuuulllhhhj|||f>                                                                                                                                    ltsvttvsssssfs~>4!"     !!!!!""""""#####$$$$$$$%3	
|Bc^v!#%&'''''''''''''(((((((((((((((((''''''''''''''''''''''''''''''''&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$###$$$"#).+'3Ljzzwusllj^^^SOSK>C8/3*
	


$#lywrwxoxxmwwiwwgvvevvjvvltsnqqossxuuurrtkltjlunpgggkX!www                                                                                                                                            ltswttvssqsset~?5!"     !!!!!"""""######$$$$$$%%u 	

qNkf|"$&&'''''''''(((((((((((((((((((((((((''''''''''''''''''''''''''''&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$$$$##$$";dcat~}|}xqyqhsk^fbUXXIHH745&$$n

	


 ^Ivvxxsxxsvwrtwrtvqtvqxtpzurzusztuwqrnknhmoqz~fT                                                                                                                                                    muswttvssqttet~?5!"      !!!!!"""""#####$$$$$$$%%$ 	
)gUum #%&''''''((((((((((((((((((((((((((((((('''''''''''''''''''''''''&&&&&&&&&&&&&&%%%%%%%%%%%$$$$$$$$$##%$",NVa~z}}}|{x{ulumbldT\YIJJ;::,**N
	



 
	n|vvxxswwruwruvqtvquupyspzsrxrpuopwqrzx{eF                                                                                                                                                                nusoutsss{stnt~;1'"    !!!!!""""""#####$$$$$$%%%%O  	
;e]u!#%&'''(((((((((((((((((((((((((((((((((((('''''''''''''''''''''''&&&&&&&&$"$(.0//#"((" !"#$&+*.:Rcijy~~~{{{tttkkk^^^PPP???///4
	

 
 
94xxxzzz{{{tttsssxxxtttmmmvvvvvvrrrvvvk@                                                                                                                                                                        nutovtsss{stnt~;1'"    !!!!!"""""#####$$$$$$$%%%%"   

yJid{!$%&'((((((((((((((((((((((((((((((((((((((('''''''''''''''''''''&&&&&&&&$#$(-0..#"((" !"&'$'-5<EJWk|||vvvnnncccTTTDDD444$$)
~



 
 
 
dbvvvqqqrrrwwwuuurrrwwwzzzrrrqqqv7
                                                                                                                                                                                    nutovtsss{stot~<1'"    !!!!!"""""#####$$$$$$%%%%%%)   	
 oSrk"$'((((((((((((((((((((((((((((((((((((((((('''''''''''''''''''''&&&&&&%),)$*,,+%$&&"#(&!"%.DWi{z~}}}xxxpppfffXXXIII999)))a
	


 
 	 #{{{yyyvvvzzzyyytttuuummmuuux/                                                                                                                                                                                            outovuttt{stot~<1'"   !!!!!"""""#####$$$$$$$%%%%%%s   	
1hZ|r $&'(((((((((((((((((((((((((((((((((((((((((('''''''''''''''''''&&&&&&%(+)%)+**&%&% #('',+/8Ma|~|~~~zzzsssiii\\\NNN>>>---D
	



 
 	 	LIuuuttttttssspppvvv~~~|+                                                                                                                                                                                                    outovuttt{stot<1'"   !!!!!"""""#####$$$$$$%%%%%%%%    	

Biay"%&'((((((((((((((((((((((((((((((((((((((((((''''''''''''''''''&&&&&&&"&+*+#! )+** #%-F`u}yr|~~~{{{uuulllaaaRRRBBB222! 1
	

 
 	 	 	sszyyyxxxtttzzz愄+
                                                                                                                                                                                                            outpvuttt{tuot<1'"   !!!!!"""""#####$$$$$$%%%%%%%&R   	

yOnh#%''(((((((((((((((((((((((((((((((((((((((((('''''''''''''''''&&&&&&&$"&(()$"! )***(025ARe|t||||wwwooodddVVVGGG777'&){

	


 	 	 	<7vvvrrrttt~~~+                                                                                                                                                                                                                    outpvuttt{tuot<2("   !!!!"""""#####$$$$$$%%%%%%%&&#    	
"pWwo #&'(((((((((((((((((((((((((((((((((((((((((((''''''''''''''''&&&&&&%*.'!%'()!#'+*""@Tfz}x|}y{s|}}}}yyyqqqhhh[[[KKK;;;+++`
	


 	 	 	 
edppp܀$                                                                                                                                                                                                                            ovtpvuttt|tuot<2("  !!!!!"""""#####$$$$$$%%%%%%%&&&9     	
3k^u!$&'(((((((((((((((((((((((((((((((((((((((((('''''''''''''''''&&&&&%')'%&'''"!"$*03:MRWh~u|{~~zzzuuukkk___PPP@@@000E
	


 	 	 	 	 ,%~~~*                                                                                                                                                                                                                                ovtpvuttt|tuou<2(#  !!!!!"""""#####$$$$$$%%%%%%%&&&!     	
Dld{"%&'(((((((((((((((((((((((((((((((((((((((((('''''''''''''''&&&&&&'!'0(%$$*.!=`~stuz|||{vvvmmmbbbTTTDDD444#"3
	

 	 	 	 	 	ZW                                                                                                                                                                                                                                        ovupwuttt|tuou<2(#  !!!!!"""""####$$$$$$%%%%%%%&&&&&     	

zQqk #%''((((((((((((((((((((((((((((((((((((((((('''''''''''''''&&&&&&'##'&$&+(()/>JVe|}|{|{{xxwpppfffXXXHHH888((+{

	

	 	 	 	 	 
ٰ	                                                                                                                                                                                                                                                ovupwuttt|tupu<2(#  !!!!"""""#####$$$$$$%%%%%%%&&&&&o     	
#qZzr!$&'((((((((((((((((((((((((((((((((((((((((((''''''''''''''&&&&&&&&&%122":V{|v~vx~z~~~vywzxsssiii\\\MMM===---a
	

	 	 	 	 	 	
f                                                                                                                                                                                                                                                    pvupwuuuu|tupu<2(#  !!!!"""""#####$$$$$$%%%%%%&&&&&&%      	
4m`w"$&'((((((()(((((((((((((((((((((((((((((((((''''''''''''''&&&&&&&%&($%*/0<=MZt{x|}||xvutkkk```QQQAAA111F
	

	 	 	 	 	 	 

	                                                                                                                                                                                                                                                    pvupwuuuu|tupu=2(# !!!!!"""""#####$$$$$%%%%%%%&&&&&&&U      	
Enf}"%&'(()))))))))(((((((((((((((((((((((((((((''''''''''''''&&&&&&&%'9A(# Ju}~{ww|{~zyzyt~tuuumnbccUUUEEE555#"5
	
	 	 	 	 	 	 	
ڈ                                                                                                                                                                                                                                                        pvupwuuuu|tupu=2(# !!!!!"""""####$$$$$$%%%%%%%&&&&&&&%      	

{Qsl #%'()))))))))))))((((((((((((((((((((((((((''''''''''''''&&&&&&&'(+02>CCUr~}~z|yuwqmhffXYYIII999)).}

	
		 	 	 	 	 	 	
                                                                                                                                                                                                                                                        nvuqwvuuu~uvqu<1)# !!!!!""""#####$$$$$$%%%%%%&&&&&&&''A       	
 u[{r!$'())))))))))))))(((((((((((((((((((((((((''''''(((''''&'''&%&')("-EXz~|{~~vt}py~jttdld[]\MMM===---h
	
		 	 	 	 	 	 	 
ڤ                                                                                                                                                                                                                                                            uxvswvuuuvvvlvA7%#   !!!!"""""#####$$$$$$%%%%%%&&&&&&&''#       	
0paw"%'())))))))))))))((((((((((((((((((((((((''''''###%())'#""&*&"'4BDJXkzx{~ruximk_a^RSRBBB111P
	
		 	 	 	 	 	 	 	
/                                                                                                                                                                                                                                                            {xxvvvtttqxwexD< #$" !!!!"""""#####$$$$$%%%%%%%&&&&&&&'''6        	
Apf} #&'())))))))))))))(((((((((((((((((((((((''''''!(+,'#+$2DQf~~||wvvpnndccUUUFFF666" <
	

	 	 	 	 	 	 	 	 
۵                                                                                                                                                                                                                                                                ywwvvvtttrywevD=!##" !!!!"""""#####$$$$$%%%%%%%&&&&&&&'''"       

Otl!$&(())))))))))))))((((((((((((((((((((((''''''(*+++($#"*)%'*5Qb\`v}}}xxxqqqfffYYYIII999((2




		 	 	 	 	 	 	 	
=                                                                                                                                                                                                                                                                ywwvvvtttrywew~D>!##"!!!!!"""""####$$$$$$%%%%%%%&&&&&&''''',        	
zYzr!$'()))))))))))))))(((((((((((((((((((((''''''0375.$ ./+($&3]|{}{{~~~~yyyssshhh\\\MMM===--.s
	

		 	 	 	 	 	 	 	 
                                                                                                                                                                                                                                                                    xwwtttuuuryvbt|C>!"#!!!!!!"""""####$$$$$$%%%%%%&&&&&&&'''''         	
*t`w"%'())))))))))))))((((((((((((((((((((''''''',-((&''''$'8PW^}zzztttkkk___PPPAAA111[
	


		 	 	 	 	 	 	 	 	
M                                                                                                                                                                                                                                                                    uuutttuuutywbt|B>!""!!!!!!""""#####$$$$$$%%%%%%&&&&&&&''''''!         	
<rf}#%'()))))))))))))(((((((((((((((((((('''''''.,  '0+ $'5L^v{{{vvvnnnbbbTTTDDD555 E
	


	 	 	 	 	 	 	 	 	 

                                                                                                                                                                                                                                                                    uuutuusuutyxds{B<!""!!!!!!""""#####$$$$$$%%%%%%&&&&&&&''''''u        	
Ksk $&'())))))))))))(((((((((((((((((((('''''''+**)#".Oj}}}}}wwwpppeeeXXXHHH888&%6
	


		 	 	 	 	 	 	 	 	
\                                                                                                                                                                                                                                                                        uuuruutwwtyxfr{B;!""!!!!!"""""#####$$$$$$%%%%%%&&&&&&&'''''''         	

~Vxq!$&())))))))))))(((((((((((((((((((('''''''
/.-) Co}zyz~~~yyyrrrggg[[[LLL<<<++0}

	


		 	 	 	 	 	 	 	 	 
                                                                                                                                                                                                                                                                        wwwqttsuusxvhu}A~? !"!!!!!"""""#####$$$$$%%%%%%%&&&&&&''''''''s         	
 y^u"%'()))))))))))(((((((((((((((((((''''''''!$)(24*1Q`|~zz~~~zzztttjjj^^^OOO@@@///j
	



		 	 	 	 	 	 	 	 	 	
_                                                                                                                                                                                                                                                                            wwwqttsuusxviv@}@ !"!!!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''          	
/ucz#%'())))))))))(((((((((((((((((((''''''''''%(63$&Fi{~zuu|||uuummm```SSSEEE333U
	



	 	 	 	 	 	 	 	 	 	 
                                                                                                                                                                                                                                                                            twwqttsuusxviv@}@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''w          	
@ti #&'()))))))))(((((((((((((((((('''''''''')$$(8rw}}}wwwooocccXXXFFF555$"D
	


	 	 	 	 	 	 	 	 	 	 		[                                                                                                                                                                                                                                                                                twwqttsvvsxviv@}@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(          	
Mvn!$&(()))))))((((((((((((((((((('''''''''+)$#&or|}}}xxxqqqfffYYYJJJ:::&&5
	


		 	 	 	 	 	 	 	 	 	 	                                                                                                                                                                                                                                                                                twwqttsvvsxvjvB}A    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''( z          	

Y{r!$&()))))))(((((((((((((((((((''''''''')"'>m~~~~~zzzrrriii\\\MMM===--1|

	


		 	 	 	 	 	 	 	 	 	 	W                                                                                                                                                                                                                                                                                    twwqttsvvsxvjvB}A    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''((!           	
#y`w"%'())))))((((((((((((((((((''''''''''#()-b~}~~~{{{tttkkk___QQQAAA111h
	



		 	 	 	 	 	 	 	 	 	  	                                                                                                                                                                                                                                                                                    twwqttsvvsxvjvB}B      !!!!"""""#####$$$$$%%%%%%&&&&&&&'''''''''(( |           	
2ve|#%'()))))(((((((((((((((((('''''''''',Gov~zxu|||uuummmaaaTTTDDD444T
	



	 	 	 	 	 	 	 	 	 	  	S                                                                                                                                                                                                                                                                                        twwqttsvvsxvjvB}B !!!!!"""!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((#            	
Auj #&'()))(((((((((((((((((('''''''''''38[x~xtp}xxxoooeeeWWWHHH777#!A
	


	 	 	 	 	 	 	 	 	 	   	m                                                                                                                                                                                                                                                                                        hyvtusvxqv{lmyoSVJNUTRV[VKHF@;4-('""! ! $'''(,-) $+(())('&&&&'(**!           	
Oxn!$&(())(((((((((((()$,40+#')2::$&|}}}yyyttteeeXXXMMM;;;('6

	


		 	 	 	 	 	 	 	 	   	K                                                                                                                                                                                                                                                                                            jzyyyvvvo{~pt|rGq:y,t1v9x8z7|;A<56952/*,+%%"$*+$%$#&)%'%$"))())('&&&&'(**(.            	

Y|s!$&())(((((((((((()$,30+ *.16:&!zzzztttggg___PPP<<<++0}

	


		 	 	 	 	 	 	 	 	    	                                                                                                                                                                                                                                                                                               vsp}lnxn{u[sP~HyN|\}_}`flxu~{}{yy|{xnhh`K93/,)' &,3)"$#"""#&(,--,,*$            	
!|aw"%'()(((((((((((((((&#',./"22 "Yn}{{{uuukkk___QQQCCC222k
	


		 	 	 	 	 	 	 	 	    	9                                                                                                                                                                                                                                                                                                rq~o|ruvnwrcfY]hd`bdinqrz~~}ujcZRRJF:750-(#,5,"&$""!#&(,,,++)*<             	
0xf|#%'((((((((((((((((&$'+-/' -0('R`}}}vvvnnnbbbUUUDDD444Y
	


	 	 	 	 	 	 	 	 	     	ݬ                                                                                                                                                                                                                                                                                                   mtrtxxx|~iyzSv~:7!  %((.9CMZcry~|reZN?1%+6+!"&*,'#  %($            	
>wj #&&'(((((((((((((('''%063(A_~~~xxxpppeeeXXXFFF:::" G
	

		 	 	 	 	 	 	 	     	(                                                                                                                                                                                                                                                                                                    ovvuvyruwjxxX|=8"%#!")03:EPXb`hlrw{ygXK>5:51* #+/)# "%(*(&###%(O             	
Lyn!$%''((((((((((('''('%/3.'#"GW~~~zzzrrrgggZZZKKK<<<)(<
	

		 	 	 	 	 	 	 	      	ܑ                                                                                                                                                                                                                                                                                                       wv{xszrovjwvW=3"$%!.6@N^dqx{z{jYC?<&$,,-#"/30,(%
             	

W}r!#%'(((((((((((%!(-&$()'&.1{{{sssjjj]]]NNN>>>--5

	

		 	 	 	 	 	 	 	                                                                                                                                                                                                                                                                                                              yty}tz{tzoxwWz|=5 !$&# "0?O]d_aq{}qZNDIL4(---&"#$+-,+((e             	
~^v!$&'((((((((((&$()%%&'%&9=|||vvvlll```QQQAAA112r
	


		 	 	 	 	 	 	 	      	t                                                                                                                                                                                                                                                                                                           ttswrv}vwbyB8#""#$###"!;QSjJ".01134+(  +97((&              	
*zdz"$&'((((((((((,' $'!g|||wwwnnnbbbSSSDDD444`
	



	 	 	 	 	 	 	 	       		                                                                                                                                                                                                                                                                                                            |vstutvwww^y@8 &#!"""#$$$#%&%%%$AUZas}~pI?KD6/-,)($"#(02((( }              	
9xh~"%&'(((((((()-&$%!,-l~~~xxxpppdddWWWGGG888 M
	


	 	 	 	 	 	 	 	       	R                                                                                                                                                                                                                                                                                                               hzrtxstvvnxw[z?9    %.& "'(**+,,++**# $)B`{{xZ9!&/01-%"$((('2              	

Fxl #%&'(((((('-4$#& :]zzzrrrgggZZZJJJ;;;&$A
	


		 	 	 	 	 	 	        	ݺ                                                                                                                                                                                                                                                                                                                   lzrxxtwvvpxw^yA:! #+$ "&'((('&$#  "(0AT]cqtzbOE;+%%'*-*&'((((#              	

P{p #%''(((((',0$"&(0Oc{{{sssiii\\\MMM===+*9


	


		 	 	 	 	 	 	        -                                                                                                                                                                                                                                                                                                                   mzr|wu{uwtwxewD<"  '! "'(((# $!
Fh{]<.0+*(((('N               	

[t!$&'((((((+,$! '1J~|||vvvkkk___PPPAAA005|

	


		 	 	 	 	 	 	         	ܓ                                                                                                                                                                                                                                                                                                                       lyt|ux{uyvwxewD<"%# !!!#""""! !#"!"/JWah{~fQD=2(''**(((((&               	
!~ax!$&'((((())%$#%?Yw~~~wwwnnnbbbTTTCCC444m
	




	 	 	 	 	 	 	                                                                                                                                                                                                                                                                                                                                 iwy}t|{tzwvyewD<!!&'&$! "'*/0,)!%&)-*-@Xqu|n]H/+,(('()(r               	
.{f|"$&'(((('#&)$NsxxxpppdddVVVFFF777\
	



	 	 	 	 	 	 	         	b                                                                                                                                                                                                                                                                                                                           nwwwwzyuy{vxlwA7  "##"!!   !"#$%(()( "()!%3HZiiO>+)2+((++$&%+               	
<yi"%&'((('##%*5d{zzzqqqfffXXXIII:::#!L
	


		 	 	 	 	 	          	 I                                                                                                                                                                                                                                                                                                                            qwvpxwvvv}vwrv=2!*$ !!!"##########)( $!BVmR8¾/-4.((/. !""               	

Hym #%''((%" $.C{{{{tttiii\\\LLL<<<('@
	


		 	 	 	 	 	          	0                                                                                                                                                                                                                                                                                                                               qwvrxwvvv}vwqv>3 )#!!!!""""#####$$))  !&+)"#=OQjlbYJ&(&(,+#$%&O                	

S{q #%''(('$9Ky|||uuukkk^^^OOO???,,7


	


		 	 	 	 	 	           	ܐ                                                                                                                                                                                                                                                                                                                                   qwvrxwvvv}vwqv>3 )#!!!!""""#####$$))""%)1/,(.<Ah~gQ"$(*)%&&')                	
\t!$&'())$;My~~~vvvnnn```RRRBBB114{
	


		 	 	 	 	 	                                                                                                                                                                                                                                                                                                                                              qwvrxwvvv}vwqv>3 )#!!!!""""#####$$((##$(-./,(&##(C[u{}F.(''&'(((( ~                	
"bx!$&&*/'OkyyyooocccTTTEEE444l
	




	 	 	 	 	 	           	P                                                                                                                                                                                                                                                                                                                                       qwvrxwvvv}vwqv>3 )#!!!!""""#####$$(($$%(,031.((Q||<4('%%'**)('<                 	
/{e{"$%*4*O{zzzrrreeeXXXGGG777Z
	



	 	 	 	 	 	            	ܭ                                                                                                                                                                                                                                                                                                                                           qwvrxwvvv}vwqv>3 )#!!!!""""#####$$$$$$   "'03.*!4Wwc_8*"#---+$&$                	
;zi~"%(03*d{{{ssshhhZZZKKK:::" M
	


		 	 	 	 	                                                                                                                                                                                                                                                                                                                                                       qwvrxwvvv}vwqv>3 )#!!!!""""#####$$##$$$-43+"Sy~[=*!!/..,#%%k               
 
	

Fzm #&,5)i}}}uuujjj\\\MMM===(&D
	


		 	 	 	 	            	l                                                                                                                                                                                                                                                                                                                                               qwvrxwvvv}vwqv>3 )#!!!!""""#####$$''%!$/0/)"%(8Hh}P5'../. #(&-              
 
 
 
	

P|p "#<Gw~~~wwwlll___PPP@@@-,;


	


		 	 	 	 	             	 7                                                                                                                                                                                                                                                                                                                                               qwvrxwvvv}vwqv>3 )#!!!!""""#####$$('&!"-02-&'(0>iK5!'.//-#)&!            
 
 
 
 
 
	

Zt8Jz}xxxoooaaaSSSBBB217

	


		 	 	 	 	             (                                                                                                                                                                                                                                                                                                                                                   qwvrxwvvv}vwqv>3 )#!!!!""""#####$$  ,.0/$ !(()% "'/.U}[R('.0.(#.*$d           
 
 
 
 
 
 
 
	
`wAm}zzzpppdddUUUEEE556r
	




	 	 	 	 	              	u                                                                                                                                                                                                                                                                                                                                                       qwvrxwvvv}vwqv>3 )#!!!!""""#####$$ !-032'!!'&'#!(.,Y~VQ)'00,'#/+%(&         
 
 
 
 
 
 
 
 
 	
*~d{9j}{{{{rrrfffXXXHHH888b
	



	 	 	 	 	              	o                                                                                                                                                                                                                                                                                                                                                       qwvrxwvvv}vwqv>3 )#!!!!""""#####$$##*,/.)%$%%$#!  #1Rhve/,1,(&%6/$&$       
 
 
 
 
 
 
 
 
 
 
	
6{iFzy|||ttthhh[[[KKK:::!T
	


		 	 	 	              -                                                                                                                                                                                                                                                                                                                                                           qwvrxwvvv}vwqv>3 )#!!!!""""#####$$##*,/.)&$%%$#!  1Ui}_//1+('%7/$'(f     
 
 
 
 
 
 
 
 
 
 
 
 


	
C{
p<qplw{y~~~uuukkk]]]MMM===&$G
	


		 	 	 	              	r                                                                                                                                                                                                                                                                                                                                                               qwvrxwvvv}vwqv>3 )#!!!!""""#####$$$$$$!!  $&(+++++-'E_}x71-)($&<2$&&'/    
 
 
 
 
 
 
 
 
 
 
 
 
 
 

	

Q{<`qoadvozs}xxxmmm___PPP@@@+*=
	


		 	 	 	               	ݾ 7                                                                                                                                                                                                                                                                                                                                                               qwvrxwvvv}vwqv>3 )#!!!!""""#####$$$$$$   $&(++,,+.)G^|w:1+)*#&<2$&&'$  
 
 
 
 
 
 
 
 
 
 
 
 
 
   

	

/I``SUjdnwk{zyyyyooobbbSSSBBB//:

	


		 	 	 	               !                                                                                                                                                                                                                                                                                                                                                                   qwvrxwvvv}vwqv>3 )#!!!!""""#####$$)) "()(%"!"$)1/)Khq-)#'.)%)4,&/+(s
 
 
 
 
 
 
 
 
 
 
 
 
 
     

	
CIEW[Yjhjyp{yzzzqqqdddUUUEEE336{
	




	 	 	 	               `                                                                                                                                                                                                                                                                                                                                                                       qwvrxwvvv}vwqv>3 )#!!!!""""#####$$)) #()(%"!"$+0-)Kht-'%(.)%)4,&/+)(;
 
 
 
 
 
 
 
 
 
 
 
 
       


	
pHLJ\[\neo|r{||||rrrfffXXXGGG777m
	



	 	 	 	                ܭ                                                                                                                                                                                                                                                                                                                                                                          qwvrxwvvv}vwqv>3 )#!!!!""""#####$$$$$$)+--,*%!!"#"%%Jr}]((+,*( '5-"',*)(%
 
 
 
 
 
 
 
 
 
 
        


	
&#hNMM^Z`nhsuyv||}}}ttthhhZZZJJJ999a
	


		 	 	                                                                                                                                                                                                                                                                                                                                                                                           qwvrxwvvv}vwqv>3 )#!!!!""""#####$$##$%)+--+*%"!"#"%'Fova)(,,)) '5-#',*))( 

 
 
 
 
 
 
 
 
          


	
/,[QMRa\ekolv}uvvvkkk\\\LLL<<<" Q
	


		 	 	                L                                                                                                                                                                                                                                                                                                                                                                               qwvrxwvvv}vwqv>3 )#!!!!""""#####$$  &+.-**''()**,'&'"WQI)(1.*($2-'),*)))(J
 
 
 
 
 
 
 
            



	
43VNQTbb`qpmz{yxxxlll___NNN>>>'%H
	


		 	 	                 ܘ                                                                                                                                                                                                                                                                                                                                                                                  qwvrxwvvv}vwqv>3 )#!!!!""""#####$$  %)++)(%&(**+,'&+(VXK'*0/*'$2-()+*)))('
 
 
 
 
 
              




::PUUSfdbpqo{{{zzzoooaaaRRR@@@-,?





		 	 	                                                                                                                                                                                                                                                                                                                                                                                                    qwvrxwvvv}vwqv>3 )#!!!!""""#####$$  $$! !(/201(7T~yE5"(43*#"1.+*))))))("
 
 
 
                

	

D@L^VVefboto{z}{zzzpppcccTTTDDD00;

	


		 	 	                 3                                                                                                                                                                                                                                                                                                                                                                                       qwvrxwvvv}vwqv>3 )#!!!!""""#####$$!"$#! $(,--,&BYxpG6"(33+$"0.+*)))))))(h

 
                  

	
}LFIWYVdhdurq}wyv{|sxypppeeeVVVFFF558z
	




	 	 	                 n                                                                                                                                                                                                                                                                                                                                                                                          qwvrxwvvv}vwqv>3 )#!!!!""""#####$$&&$!!()&#!!"krY-&&&52)&#.--+)))))))((9
                    
	
!rHJGUZVhedqkmkpqhmmdddWWWHHH777m
	



	 	 	                  ݱ                                                                                                                                                                                                                                                                                                                                                                                              qwvrxwvvv}vwqv>3 )#!!!!""""#####$$''$! #&'&%%#!.9fdX,'$'20)'$-,,+))))))))(%                   
	
$"hFKFXVVa]_^ab\^_UUUHHH999b
	


		 	                                                                                                                                                                                                                                                                                                                                                                                                                 qwvrxwvvv}vwqv>3 )#!!!!""""#####$$++$$%)20/*<k~w|D+!"#(,+((%',++*())))))))(!
                   
	
'(\FFEOMNPPQMMNEEE999 V
	


		 	                  ?                                                                                                                                                                                                                                                                                                                                                                                                   qwvrxwvvv}vwqv>3 )#!!!!""""#####$$**##$)30-'#,4Qm|xt@)%%$())(())+**)()))))))))(d                    


	
+*L<;<>>><;<444$"E
	


		 	                   u                                                                                                                                                                                                                                                                                                                                                                                                      qwvrxwvvv}vwqv>3 )#!!!!""""#####$$*)  &-76/!5AMeR((''#%(+1-()((()))))))))((9                    
	

'%=.,-+*+" 8
	


		 	                   ݰ ,                                                                                                                                                                                                                                                                                                                                                                                                       qwvrxwvvv}vwqv>3 )#!!!!""""#####$$)(")31) @Wd{njX?++'&!"(,2/('&'())))))))))(%                    

	


+)

	


		 	                                                                                                                                                                                                                                                                                                                                                                                                                              rwvpxwvvv~vwrv=2 )#!!!!""##$$###""('%.+BtzjR1"%//(#(/72'$#$()))))))))))("
                   
 

	

~~

	




	 	                   6                                                                                                                                                                                                                                                                                                                                                                                                               myvuxwwvwywxkvA7 ##$"!!!"! "$(,.%% $')( (:F^xwp]F*%($++(&"$(+/-(''')))))))))))))(p                 
 
 
 
	

	




	 	                   b                                                                                                                                                                                                                                                                                                                                                                                                                  f{tzwuyuwswxbuD<" #.% !!! !(0;>$"#&/-!(Lfz|ydC(+*''(())(((()))))))))))))))))((N                
 
 
 
 

	




		                    ے                                                                                                                                                                                                                                                                                                                                                                                                                      mwv}uw|twvvwbwB:&# !!  !!!"#$""""%&&$-H__fnxxeUF</&%&&%(((((((())))))))))))))))))))('/              
 
 
 
 
 
 

	
	


		                    !잝                                                                                                                                                                                                                                                                                                                                                                                                                       qvytztwvvwa{|A9"#!! !%(('#%&$!
$U~w}_7
/0##(((((((()))))))))))))))))))))($            
 
 
 
 
 
 
 
 

	


		                    ssB                                                                                                                                                                                                                                                                                                                                                                                                                        twsutuvvwwawA9 '&&#"! #&*-,+'#/,*/ERbjyx_MC8(###$'%%'(((((((())))))))))))))))))))))'!          
 
 
 
 
 
 
 
 
 
 

	



		                    hf|||H	                                                                                                                                                                                                                                                                                                                                                                                                                    vwqwruvvwwbuA:!!$*))%#" $(-2220-((11*#AX~}yP()0*& %((((((((())))))))))))))))))))))('x        
 
 
 
 
 
 
 
 
 
 
 
 



	


		                    VS~~~}}}Ǯ0                                                                                                                                                                                                                                                                                                                                                                                                                    wvtuw|twrww\z>6 '$ !#&%%%"#"#%'&*ES[e~{gB<MF3,+'$#%&&*-.(((((((())))))))))))))))))))))(''V       
 
 
 
 
 
 
 
 
 
 
 
 
 	 



	



                    A=}}}}}}A                                                                                                                                                                                                                                                                                                                                                                                                                zvv}tx{twpwwZ{~<5'"$(((%.G`}~~v>)4772)!"%+12/(((((((())))))))))))))))))))))(('&5     
 
 
 
 
 
 
 
 
 
 
 
 
 	 	 	 




	

	                  ,'yyyͥ3                                                                                                                                                                                                                                                                                                                                                                                                                rtvxuxyvynxwWy{<6!" "'"*9KYa_dmszsWD6?>/$&)++)'(+,,-+$$(((((((())))))))))))))))))))))((('$   
 
 
 
 
 
 
 
 
 
 
 
 
 	 	 	 	 	 




	
                 xx~~~~~~?                                                                                                                                                                                                                                                                                                                                                                                                            otvsrtutvnyxY|~>7 $"" %-"*0:I]kst~~y|fD$''$"$%&&''+//.-)  (((((((()))))))))))))))))))))))((('"
 
 
 
 
 
 
 
 
 
 
 
 
 
 	 	 	 	 	 	 	


	

               nm~~~|||ҟ,                                                                                                                                                                                                                                                                                                                                                                                                            rttxuuyvwpyxZ{?8$%#$+/5=ISb`htuy}~}~jVJF>861-+)(,.,*'&&&'+--,($$(((((((()))))))))))))))))))))))(((('
 
 
 
 
 
 
 
 
 
 
 
 	 	 	 	 	 	 	 	 	


	
             
_^}}}}}}                                                                                                                                                                                                                                                                                                                                                                                                        tvt|zzywwmvtWy?7&&(-6DSbvzsxrfT?-%&/,$*1/+'&&&%)--,(%%(((((((()))))))))))))))))))))))((((('r

 
 
 
 
 
 
 
 
 
 	 	 	 	 	 	 	 	 	 	 	



	
           URyyy~~~񏏏8                                                                                                                                                                                                                                                                                                                                                                                                    fw~suzwqqyuju{u[_VYa_ZWVh|yvwy~w~i]URF>;@:*'')****)# %,'"" $+/0**((--(((((((()))))))))))))))))))))))(((((''X
 
 
 
 
 
 
 
 
 	 	 	 	 	 	 	 	 	 	 	 	 	
	

	

          D@}}}|||}}}ף'                                                                                                                                                                                                                                                                                                                                                                                                    dv~pty{su{pwzrRwM?}C}M|NzO|P|R~iyw||}~~~~{qhgWH83-&('',+)&#"#(+&!!$,12**((..(((((((()))))))))))))))))))))))(((((('&>
 
 
 
 
 
 
 	 	 	 	 	 	 	 	 	 	 	 	 	 	 		

	

        2.zzz|||}}}낂E                                                                                                                                                                                                                                                                                                                                                                                                nt{|uxvv}owoQqH~9w=wEwDzA~FL@2|6:=:71/)%%%&**$#!! ""()(%&(*,+(##"!&'''""(((((((()))))))))))))))))))))))((((((('%,
 
 
 
 
 	 	 	 	 	 	 	 	 	 	 	 	 	 	   			


	


	      &!}}~~~{{{~~~ܐ;                                                                                                                                                                                                                                                                                                                                                                                            sy|uxonvi{r\[MR\[Z]aYOPPMGA:1'!  #$#! "   #$&&'(((*-,)#"! &'''!!((((((((())))))))))))))))))))))((((((('&"
 
 
 	 	 	 	 	 	 	 	 	 	 	 	 	 	     			


	

	    vv|||{{{{{{ۙ4                                                                                                                                                                                                                                                                                                                                                                                            twwqttsvvsxvjv@~@!!!!""""#""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))((((('&%#
 	 	 	 	 	 	 	 	 	 	 	 	 	 	       			

	

	   hg{{{}}}|||ِ,                                                                                                                                                                                                                                                                                                                                                                                    twwqttsvvsxvjv@~@    !!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))((((''%# \
	 	 	 	 	 	 	 	 	 	 	 	 	        		



	

 PNvllluuu|||~~~~~~|||}}}~~~܋H"                                                                                                                                                                                                                                                                                                                                                                                twwqttsvvsxvjv@~@    !!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))(((('%$!v_8~		 	 	 	 	 	 	 	 	 	 	          		


	

64hTTTbbbnnnvvv}}}~~~~~~|||{{{{{{݉J                                                                                                                                                                                                                                                                                                                                                                             twwqttsvvsxvjv@~@    !!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))((('&$!ydMi#n		 	 	 	 	 	 	 	 	            		



	
%#eGGGVVVdddooowww}}}~~~|||||||||xxx߈M                                                                                                                                                                                                                                                                                                                                                                        twwqttsvvsxvjv@~@    !!!!"""""#####$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))(('&$"{fPl*h

		 	 	 	 	 	 	              		

	
*)[IIIXXXeeepppxxx}}}~~~~~~}}}|||}}}yyy܎J                                                                                                                                                                                                                                                                                                                                                                        twwqttsvvsxvjv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))('&$"}hSp0d
			 	 	 	 	                	

	
0/SJJJYYYfffqqqxxx~~~~~~~~~~~~}}}zzz~~~xxxۑG	                                                                                                                                                                                                                                                                                                                                                                    twwqttsvvsxviv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((()))))))))))))))))))))))(&%"kUs4c



	 	 	 	                  	





22OLLLZZZgggrrryyy~~~~~~~~~}}}|||zzzvvvۖF                                                                                                                                                                                                                                                                                                                                                                twwqttsuusxviv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((())))))))))))))))))))))('%# mWv:a

	

	 	                    	

	

77KNNN\\\iiirrrzzz}}}~~~}}}}}}|||zzz}}}oooٚD                                                                                                                                                                                                                                                                                                                                                            twwqttsuusxviv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((()))))))))))))))))))))('&# oYy?`

	



                     		


	

<<GOOO]]]jjjssszzz~~~~~~~~~~~~~~~www~~~{{{oooԘH
                                                                                                                                                                                                                                                                                                                                                        twwqttsuusxviv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&'''''''''(((((((((((((())))))))))))))))))))('&$ r[|Da
	



		                     		

	
??DPPP^^^jjjssszzz~~~~~~}}}yyy|||{{{pppӕL                                                                                                                                                                                                                                                                                                                                                twwqttsuusxviv@~@    !!!!"""""#####$$$$$%%%%%%%&&&&&&''''''''''((((((((((((()))))))))))))))))))((&$!s^Gc~
	

	 	                    			

	
}AADQQQ```kkktttzzz~~~}}}~~~}}}zzz|||{{{xxxnnnԌU                                                                                                                                                                                                                                                                                                                                            twwqttsuusxviv@~@    !!!!"""""#####$$$$$$%%%%%%&&&&&&&'''''''''((((((((((((())))))))))))))))))((&$"u_Jdy
	

	   	                    		

	
wCCCSSS```llltttzzz}}}zzz~~~yyyxxxqqqωZ                                                                                                                                                                                                                                                                                                                                        twwqttsuusxviv@~@    !!!!!""""#####$$$$$$%%%%%%&&&&&&&'''''''''((((((((((((()))))))))))))))))((&$"waKf r
	

	     	                    	

	
!lEEETTTaaammmuuu{{{~~~yyy~~~~~~{{{zzz~~~}}}tttЇ_                                                                                                                                                                                                                                                                                                                                     twwqsssuurwviv~@~@    !!!!!""""#####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((())))))))))))))))('%"ydMi&j
	

	       	                    	

	
'%`FFFUUUbbbmmmvvv{{{~~~|||{{{~~~|||xxx}}}}}}sssφ_                                                                                                                                                                                                                                                                                                                                twwosssuurwviv~@|A   !!!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))))))('%"|fPl+g
	

	         	                    	


	
*)YHHHVVVcccmnnvvv{{{~~~~~~~~~}||}}}~|~~~~~~zzzxxxyyyyyyE
                                                                                                                                                                                                                                                                                                                            sxxtttuuuuvvft}?;!#!!!!!!"""""####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((())))))))))))))('%#}iRo0d
	

	           	                    	


	
/.SIII[WWjdemqmuxuy|z}~~~}|}|~|~y|v{z|}}{{|||zzz{{{wwwppp̓L                                                                                                                                                                                                                                                                                                                        pyxzvvwttwvwes|>4"&" !!!!"""""####$$$$$$%%%%%%%&&&&&&'''''''''((((((((((((((())))))))))))('%# jTr6`


	

		                                 	
	


33LQIJbXYaiajtjqzsu}|x~y{{}|{}z}}y~~w~u|p|w|}|{{{{{{{zzz{{{{{{sss͆U                                                                                                                                                                                                                                                                                                                    pxvwttvttwwwft}?6"%! !!!!"""""#####$$$$$%%%%%%%&&&&&&&'''''''''(((((((((((((()))))))))))('&# lWu9`

	

		                                   	

	

76INLKY[Yegepqpvwx|{~~}~~~~}~{{|~||||||{{{{{{zzzzzz{{{zzzˀ6	                                                                                                                                                                                                                                                                                                            nvuwttvttwwwgu}?7"%! !!!!"""""#####$$$$$$%%%%%%&&&&&&&'''''''''((((((((((((((()))))))))('&$ nXw>_

	


		                                     	
	

8;EMMM[[[ifhspr|v{z}~~}~y~x~|}{||||||||{{{{{{zzz{{{xxxxxxzzzΒA                                                                                                                                                                                                                                                                                                        nvuwttvttwwwgu@7"%! !!!!"""""#####$$$$$$%%%%%%&&&&&&&'''''''''(((((((((((((((()))))))('&$!pZzB_
	


		                                     	
	
?=DPNOa[]ogj{nvt}y|~}~~~}~}}|}}}||||||{{{{{{zzzzzzsssyyyzzzvvvхK                                                                                                                                                                                                                                                                                                pxvyvvxuuxxxgu~@6"%! !!!!!""""#####$$$$$$%%%%%%&&&&&&&''''''''''(((((((((((((((()))))('&$!r[|E`
	
		                   ML                   

	
C?CVMRhYavdmlvs~w}|zzz~||y}~}~}}}||||||{{{{{{zzz{{{|||vvvsssxxx{{{ʓ8                                                                                                                                                                                                                                                                                            pxvxuuxuuxxxgu~?7"%! !!!!!"""""####$$$$$$%%%%%%%&&&&&&&'''''''''((((((((((((((((()))((&$!s^Hby
	
		                  W&&U                  	
	
x@BBPPPa]_ohkxpuu|z~~{v~r}oxx}~}}}}}}||||||{{{{{{www|||xxxvvvsssqqqӋ<                                                                                                                                                                                                                                                                                    qyxxuuxuuxxxgu~?6"%! !!!!!"""""#####$$$$$%%%%%%%&&&&&&&''''''''''((((((((((((((((()((&$!t_Jdr
	
		                  d'''(a                  	

	
n@CBQQQb__pik{quv|{}}ys~l}gxu}~~~}}}||||||{{{{{{}}}xxxxxx|||xxxzzzzzzttt~~~ɝ)                                                                                                                                                                                                                                                                                owvxuuwttuuuhu@6"%!  !!!!"""""#####$$$$$$%%%%%%&&&&&&&''''''''''(((((((((((((((((''%$"vaKf"m
	
		                  s''''-,p                  	

	

 "e=FAKVNYa]kjj{rut}y||~vz{~~~~~~~}}}}}}||||||{{{|||yyyzzzyyyxxxzzzyyyvvvrrrxxẋ6                                                                                                                                                                                                                                                                        nvuxuuwttuuuhu@6"%!  !!!!"""""#####$$$$$$%%%%%%%&&&&&&&''''''''''(((((((((((((((('%$!xcMh'h
	
		                  '''''0/- }                  	
	

"'\<HAMXSacctjlpwt}y~~yz}~~~~~~~}}}}}}}}}||||||{{{{{{zzzzzzyyyyyyxxxxxx~~~rrruuu݂Ŏ,                                                                                                                                                                                                                                                                    nvuxuuwttuuuhu@6"%!  !!!!!"""""####$$$$$$%%%%%%%&&&&&&&''''''''''((((((((((((((('&$!zdOk,d
	
		                  	
'''''')-&                  	

	

(,TAIBPVRaaaolnyqyv}{~~~~~~~~~~}}}}}}||||||{{{{{{zzzzzzzzzyyyyyyxxxttt{{{vvvpppuuu℄                                                                                                                                                                                                                                                            nvtxuuwttuuuhu@5"%!  !!!!!"""""#####$$$$$$%%%%%%&&&&&&&&''''''''''((((((((((((('&$"|fPm0b
	
			                  !'''''''(.2'
                  	
	
*.OCHETVVcbepjq{rxy{||~~~~~~~~}}}}}}||||||{{{{{{zzzzzzyyyyyyxxx|||tttxxx~~~xxxqqqzzz2"                                                                                                                                                                                                                                                        nvtxuuwttuuugt@5"%!  !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&'''''''''''((((((((((('&$"}iSp4^


	
			                  
 #''''''''"*-*!                  	
	


43LEJHQWY[dgemrnuxy{x}~x~~}~~~~~~}}}}}}}}}||||||{{{{{{zzzzzzyyyyyysssuuuzzztttuuuwwwtttsss2                                                                                                                                                                                                                                                mutxuuwttuuugt@5"%!   !!!!"""""#####$$$$$$%%%%%%%&&&&&&&&'''''''''''((((((((('&%"jUs8_

	

			                  /%''''''''' ),+%
.                  	
	

25IDKKOX\[dhgnqtwtz{u}}|~~~~~~~~~}}}}}}||||||{{{{{{zzzzzzzzzyyyqqq}}}uuuttt}}}vvvqqqzzzyyyvvvtttB3	                                                                                                                                                                                                                                        mutxuuwtttttgt?5"$!   !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&''''''''''''((((((('&%"lVu>^

	


		                  B&''''''''''&'321* ?                  	
	

58ECLMQZ[afeupluqzx|}}~~~~~~~~~~~~}}}}}}||||||{{{{{{zzzzzzyyysssyyyyyyqqqyyy{{{rrruuuuuuwwwsssyyyA*                                                                                                                                                                                                                                mutwuuwtttttgt?5"$!   !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&&'''''''''''(((((('&%# nXx@^
	


		                W'''''''''''''(431* !T                	
	

5;EFMNV[Zkfc|oj{vtzzz}}}~~~~~~~~~}}}}}}|||||||||{{{{{{zzzzzzxxx|||wwwyyy|||vvvtttyyyxxxssstttwwwqqqrrr|||D#                                                                                                                                                                                                                            mutwuuvssrttfu~?5!#    !!!!!"""""#####$$$$$$$%%%%%%%&&&&&&&&''''''''''''((('&%# oZzC_
	

		                p''''''''''''''''''&&&&&%m                	
	

?>DJNNV[Yaiekrruu|{v}x~z~{s}o|n|o|r}|v}{{{{zyzywvwv}v~vxxtwt|xrxyqtyrrxsovtqvrwup{up~umvsoF%                                                                                                                                                                                                                mutwttvssrttfu~?5!"     !!!!!"""""#####$$$$$$%%%%%%%&&&&&&&&'''''''''''''('&%# p[|E`}
	

		                	
''''''''''''''''''&&&&&&&%
                	
	

~;>?JMLW^[ciionvwt}~w}~|~s~|p|p|q}s~|w}|{{{{zzyxvwv}w~vxxtxt|yrxyrtysrxsowtqvrwvq{up~vnqoloppqqqK                                                                                                                                                                                                        mutwttvsstttgt~?5!"     !!!!!"""""#####$$$$$$$%%%%%%%&&&&&&&&''''''''''''&&%# r\~Gav
	

		                #'''''''''''''''''''&&&&&&&&& 
                	
	

vFABHPMVX_c`slosr|kyijow{z|{zzz|}~z}z{z{t|zs{zt|vzzu}zs}ys|yt{wvyuxwt{rs{nt{ltziszdswx}~vttpppwwwkkkE                                                                                                                                                                                                muswttvsstttfs~?5!"     !!!!!""""""#####$$$$$$%%%%%%%%&&&&&&&&''''''''''&&$# s^Icq
	

		                .%''''''''''''''''''''&&&&&&&&&&#,                		
	

m>CBNPTZZdegjnuit}h}kqw|{}{|zz|~}{}z{z{u|zu{zt|vy{v}zt|zs|yt{wvyvxyt{tt{pt{otzmszkuyimnssrsssiiirrrtttuuue`                                                                                                                                                                                        ltswttvsstttfs~?5!"     !!!!!"""""#####$$$$$$$%%%%%%%&&&&&&&&&''''''''&&$# u_Je#k
	

		               G&''''''''''''''''''''&&&&&&&&&&&&#E               	
	

! fDD<WWBa`Vlglvnzyr~y~~zuv}{{~|{~w|~pxoxz{yzy{ys{xr|uq{ur{xvvz{t|~r~p~q|rzqxqtwxsvusssyyyqqqlllsssqqqnnnU                                                                                                                                                                                ltswttvsssssfs~?4!"     !!!!!"""""######$$$$$$%%%%%%%%&&&&&&&&&''''''&&%# uaLg(f
	

		               j''''''''''''''''''''''&&&&&&&&&&&&%$f               	
	

"'\>E=KQNX\`igoup{}v|{{}wy~}|}}}|y~{swsxy|x|zzzv{zs|wr{vs{xww{{t|s}q}r{sxsu~ttzvvstsppprrrttttttssspppnnnggghhha                                                                                                                                                                    ltsvttvsssssfs}>4!"     !!!!!""""""#####$$$$$$$%%%%%%%%&&&&&&&&&'''''&%# wbMi*c
	

		               	''''''''''''''''''''''&&&&&&&&&&&&&%%%               
	

,g,HU:TYQ]_ijkvoz{qxvzzz}zv}r|q~t~}{tsw~x~sy{tyzsxzuxzzwy~vy}vv{vtuxoo|kl}hqyoyxyxxxsssrrrpppmmmvvvvvvvvvssslllhhhk	                                                                                                                                                                ltsvsswrruuufs}>4!"     !!!!!"""""######$$$$$$$%%%%%%%%&&&&&&&&&'''&%# xcNk
0^
		

			               "#''''''''''''''''''''''&&&&&&&&&&&&&&%%%% !               	
		


8d,N[;U_L^g]foomwyv~}x|{~}z|w|v~t}}zvv}x}zy}r{zt{ytyyvxx|wy~vy|vwzvuuyqo{nk|jt{ttstpppsssuuuuuuuuuppptttppplllqqqtttnnnlllz	                                                                                                                                                    jsqwqryrtvvvfs}?4"$     !!!!!""""""#####$$$$$$$%%%%%%%%&&&&&&&&&&'&%#!zePm
3]


	

			               >&''''''''''''''''''''''&&&&&&&&&&&&&&%%%%%%#<               	
	


AvYz(`z@goekmootsuuwzwyssi}|i}{j}zi}yj}tq|tw|y~zywx|wxzwwwxvnysg|qaknxpvtvttttttssssssrrrrrrqqqqqqqqqppppppoooooolllfff{#}}}                                                                                                                                                lrqwpqwpqrrres}@5"$      !!!!!"""""######$$$$$$$%%%%%%%%&&&&&&&&&%%#!{gQo6\

	


			              b'''''''''''''''''''''''&&&&&&&&&&&&&&&%%%%%%%%^              	
	


Gs+f7pFrSs^uhvswyz||z|yu|}u}}u{r}xp|ss{sv|w{}x{wxywyyvyxwxtvvqxuoxrswtuuuttttttssssssrrrrrrqqqqqqqqqqqqppppppoooooonnnkkkhhhzzz_	                                                                                                                                    nsrxqsunppppes}@5"$!    !!!!!""""""######$$$$$$$%%%%%%%%&&&&&&&%$# |hSr
9[

	



		             
''''''''''''''''''''''&&&&&&&&&&&&&&&&&%%%%%%%%%             	
	

Iw
g|)B]x}}tzz~wtz|yw{t}ttsr{mrynrzzsx{tu~{qpnkp{tvttttttttttssssssrrrrrrqqqqqqqqqppppppooooooqqqmmmjjjlllccchhhe	                                                                                                                        nusystvoqqppgs}@4!#!    !!!!!!"""""######$$$$$$$%%%%%%%%%&&&&&%$# ~iTt
<[
	



		             )$''''''''''''''''''''''&&&&&&&&&&&&&&&&&%%%%%%%%%%%!'             	
	
Mtf{->KUY{a{qz~vwy}vyws|t~vy~wqzxpzzow|tu~zs}p~o|rztwtuuuttttttssssssrrrrrrqqqqqqqqqqqqppppppooollltttooolllqqqllldddlllp|||
                                                                                                                    msrxqsvopwrris~@4!#!     !!!!!""""""######$$$$$$$%%%%%%%%%&&&%$#!kVv
?[
	


		            O&'''''''''''''''''''''&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%$L            		
	

Kxau&8J\zlmstv}xxytvysk~wf{xb{zey|mv~xr~pytzuutuuutttttttttssssssrrrrrrqqqqqqqqqppppppnnnkkksssnnnkkknnnmmmiiillliiieee|||Y                                                                                                        ntsunpwpqvttgr~?5!#     !!!!!!""""""######$$$$$$$%%%%%%%%%%%$#!lWxA\~
	


		            
x''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%$$t	            	
	
Ryfw*7=FOTTw]tryzvx{vs{{xu{vm{vm{wqywwvxztxxuvvvvuuuuuuttttttssssssrrrrrrqqqqqqqqqqqqppppppsssllllllqqqoooiiilllmmmffflllnnnbbbfffh                                                                                                pxuunpwpqwrucmy<4!$!     !!!!!""""""######$$$$$$$$%%%%%%%%$##!mXzB^y
	


		            
 "''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%$$$	            	
	
Uzhz,9J^{trxwuxszoz}nt}nq~or~os|muxswvywuuvuuttttttsssrsrrsrqrqrrrqqqqqqqqrpprppqoqnoonqsqmnnjkjpppqrrkklllmjjkjjkiijiiidddeffO                                                                                    quuqnrtquouicwqB7"!    !!!!!!""""""######$$$$$$$$%%%%%%$#" nY{D^t
	


		           J&'''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%$$$$$#G           

	
"U{i|"/6<AFNY}hq~xv}{y}{xwxxqvzmu|nqzppzupxtrwuruussttqwxrywqwxpwvqutoqqpmqrkqskqtltp{nktplsqkoqjktomrpmnlgopinpilngkkglihnkjnkimhhc_`liiYsw                                                                        oqrkmunqxfw]b~kG{; &      !!!!!!""""""######$$$$$$$$%%%%$$" nZ}E`p
	

		           	y'''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%$$$$$$$u           	
	
%V}j}$:]llqxspv}ii|jc}pdxoiurlusrtwws}qn~~l||my{outsltvfqwdowdofogqh{xjtzknzliunfuq`pq`pq_op`podqjeqjirihphfshjojh^a^Zi]j{nKw}                                                            rrrpluqmvjvbexjNz?%      !!!!!""""""#######$$$$$$$$%%$$" oZ~Fa!j
	

		           %"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%$$$$$$$$$
$           	
	

*W~k} !#&&$2?FS~aqmp{rvttyquvrzut}tx~sz{qyumtuqvrrtmqrnrrqttttuspssnptpptootnounosmmonnlmnimmenlemldmmhllijjkiknijogipfjojnlilbfe[c_Za]ckf~~:                                                        {yytmyrmvoxegwiRz>%      !!!!!!""""""#######$$$$$$$$$$"!p\Gc
$e
	

		          Q%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$$$#N          	
	

.|Xk~!(*(' 1Pvwtbvlusotjtnt~txqxugvrcupatnjpwpm|vjzj}{td{tcyrfwoipnmhnoelt_lv[kvZkv[kvbksdkphimkikrglqfmmdmlemjfljgkhghhhh\^Z]^[rsq-                                            xo{skwuvnksnZyH#!      !!!!!!""""""#######$$$$$$##"!q]Hd
(a
	

			          &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$          	
	

3xYl}#&%)4?FOmZjznqvvyrwwoyypvzqrxrpwrkrslnvnmvpnwduicuihtjkpnlpnkmqkksijugjugisfishjpkjnoilqijlhnhhnddkgdmhekieljdjibhkggjeghfebddYc^cqmN                                            rvjytiwvrqkqp]sxH!#      !!!!!!"""""""#######$$$$##" r]If
,_
	

			         9$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$## 
7         	
	

7vZn$%#3Lmyjs\q[~sbwvjuurksrjoviougpuVxiUxi]vkbrogpqkmsnktmhwngvngumismipnjlsilriihgkaenbfngfoieolcmncknajogkmceeccbee]idQd`V                                            LrjwqkwrqqmoofpoQ#!     !!!!!!"""""""#######$$##" t_Jh.]

	

			         	m&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$####k         	
	



:u[o&/7@Vvfoqqplutmxspxspvrpnqrmpqppopootolsnmrnkpmlmnlknkkmkjkknjlphnqhmgknannaljchjdekgbjkdklellflibgeadedeihfgge6                                            *tlzrlvporqprkplR$!     !!!!!!"""""""#########" t`Lk1\


	


			         %!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$######	#         			


=u[o(:S}rhqbsfrhymuxmtyopwnozoiwnisogrpfmqfkqeiogimiojlrgpsfpfkmZoi\lh_hgbekgcljclkdllemjekjeijdflfcmed                                            oluljrilqnrvvtl[w,%$     !!!!!!!"""""""######"" uaMm
5\

	



		       Z%&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$########"X       		


Dr`s%-4<Nmyqnmrlollpqmrwnswmttmrqkollnjmnhmlhoogoldnjajfdmdkodlmcmkdkjfkhhggiffhdfibfiaegdefjcdkfd                                            ||mnvjouqswyujbw*$$     !!!!!!!"""""""####"!wcOo
8]

	



		       
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$###########       		


Hqat#:Omor}hhio{ksugsohrljrgjpcilakk`piaph_pefocln`nk_mibkhbhgecffcggafh_fg^egdefldfkcf                                            znpsjrrnrrwnmjt}?5"     !!!!!!""""""""##"! wdQs
<_
	


		      S$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$############"!Q      
	


Iw
at"&+5|Hk^iisngxrfxqgxngsmkjjndgs[cviimtkivkgtieuhgviipjiklj^jfZieXieXhe^ffq]ff                                            <ilngqohomynpfnv<5 !      !!!!!!"""""""""! yfSv
?a
	


		      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$############""""      	
	

	My
du.HltljUjZzkdnjpehz`gljsxjgwhewicugfteepgehhfZjeYieVifVhe[ff8[ff                                                psohpjiolppiyV{G$      !!!!!!""""""!  ziW{Ef
	


		     P$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$#############"""""!N     	
	


Q{fv!$-?qTcqschdh`hsKj{Shy\htgfsmelmegjcdffe`he\ie[hd[ff                                                    eoghnk}oqiyYxyB$      !!!!!!!"""! }k[Jl
	


		     
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$##############""""""""     	
	

Vhy&>gs]dpHdtLcuXesfdqmeorijshjhhgbhe\ie[hd[hd                                                    bgndlplrcph{qy_U'       !!!!!!!"! o_Ps
	


		    	X#$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$###############""""""""""!V    	
	

![k{&3AjKcu[`ro_mtcjtgdrfbkfbkeaakea                                                        +ipfqtqm^}umqw]Rx&      !!!!!! !seX}%
	

		   &$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$################""""""""""""!%   	
	

'bp0Qltejwfltgdsfbmfbmea+                                                            
snnhoghrihthdwyN9!')'!      !!!!  yk`,
	

			  	c$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##################""""""""""""!!!!`  	
	
/hu"%"2EwZoo_l_OlqJgk^hloifngc
                                                            ºOnggnulgrhish^rrMx6!&(%!       !!! si5
	

			6 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$###################"""""""""""""!!!!!!5	
	
8p{!$"/DoTii`j__j`fndfbd                                                                orSxl\tjxploiqkmG%""#!"       !  |rA
	

			z#####$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$######################""""""""""""""!!!!!!!!!w	
	
Bx!?cdgaipgcTmaJqduhi                                                                    	Ppe]ul{qmqjrggAx%"!#!"        }M
	

					O"##########$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##########################"""""""""""""""!!!!!!!!!!!M	
	

N!:p__ibktieUneHk_                                                                        0Rrj^qlno~pthtek<'-&)!!       Y
	

				'#################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$################################""""""""""""""""!!!!!!!!!!!   &		

[%"(#5\cz`mxhlyfgVjdLnfM                                                                        y^mg{lo{ou{hq_i:*(#&      h
	


		n""""############################$$$$$$$$$################################################""""""""""""""""""!!!!!!!!!!!      k		

h" $&4~Vbxt`jthmtegVf`ez㚚                                                                            ƻ4voommtnlootgorjmpwM&     v

	


		M """"""""##############################################################################""""""""""""""""""""!!!!!!!!!!!!        K		



v"Eehphlchm`gehffmqhk\                                                                                ikqhllnwjmrjggmIz-   

	


	."""""""""""""######################################################################"""""""""""""""""""""""!!!!!!!!!!!!!         
-		



(As__gflcgqbaeecfl|~З                                                                                        .]jk[ni_~gktbjhrf{K*%$,( ##

	



t!!!"""""""""""""""""##########################################################""""""""""""""""""""""""""""!!!!!!!!!!!!!!         q		



 %'!"&Dk^ucaem[Wx`UhbYffO                                                                                        Ud`d|gowgnkol|Hl/%($!"

	
V !!!!!!!""""""""""""""""""""#########################################""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!         T		




 %"+Bfhevhehq`]uaTb[yƠ                                                                                                -ktngscen`tvopoqxa{Xu2#('( !

	E!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!          
D		




$$% .Por[uihknpi]gYbo`iogJ                                                                                                    	cahajokonpokp{lyTk;1#!%$" $
	/   !!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!           .		

#!" -6|Mduftiekihjdhfag`~                                                                                                        jhsbfttosthyiocgC,'+!!$)
	x       !!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!            v			

)!(#)=]atciobnim\_njdqxxz߇                                                                                                            <vmsawunsnw_vtnjc~Jr<,0
	e          !!!!!!!!!!!!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!            c		

/)7Dld]zqnihrYnhmn]soivg                                                                                                                {lZvknQRqx_gqvc|Lt3"!"#5
	W           !!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!              U
		

4!  /Foq^wbkmtYK}Lqfj[{x                                                                                                                        mghfzfqqdpntjtQe|Az6) :
	L                   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                                 J			

9&2<uL`wodokill^aualfhv˔                                                                                                                                c`fvqj{q\{pejwVa@s2!"! ! ?
CC


> /<nQ\~{eswl`vmWrkecahuwwΛ7                                                                                                                                        2uwwkkhooinohnsqkqzTivJtI8"E<  """""""""#############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##################"""""""""""!!!!!!!!!!     <D5DEpOdrglviomijckkdiignmn锔U                                                                                                                                            @u{|_jncrm\texpgmb~imas=
J:""""! "('(((((((())))))))))))******************************************************************************************))))))))))))))(((((((((('''''''''&&&&&&%&    9H9]o{dih]tlbWp`_ni^glnss򌊊r                                                                                                                                                Kzzjfarujlseiqbz{rafmQoR@2%)"R8!"                              !!!!!!!!!!!!!!!!!!!!!!!                                                  7Q '#/<M}Lk~\bivwnen^hoanqfgd^wps󌈋|                                                                                                                                                        Dyurg[m|gZyakt`~wn~qvaIs-)-)#$#"!'+'+Eo]~{mszsjgp\Vv]ixbqg\zpo헋u
                                                                                                                                                                Eq{xadcssrqigxlnjnniotWp|NpG~GD5 !2@CCzJlSlxekpfjjuhjnedpoobdclppu
                                                                                                                                                                        4n\h}ksygnepo`tohqoojvahMr6$"4In^e|kgseml\qkblkvdkxiqk]gxy}؏Y                                                                                                                                                                                    kmkhkkniotltxpxwkwcjq[msWxsS}|K|KOPQNF>=;:;;==?@@@@@AAAAAABBBBBCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCBBBBBBAAAAAAA@@@@@@????>>>>>===;;9889;<CKNLKHHyOzySupWjp`gnthtvmvphpkelfijljj5                                                                                                                                                                                            Ppywsgrziuteqwgsjorjtpluemtc[iyXnUuLtDx?91+*((*,-/000000001111111122222222222223333333333333333333333333333333333333333333333333333333333333333333333333333332222222222222222211111111100000000///////......,*)&&)*/7<|AuHqQrTkXevjq`irbgqlflotdppbnwersgpjqp񇇊                                                                                                                                                                                                        /trm{jgpspsvgnfknotxppmrsrrusmrriosgptfqwdrxctyaty_vx^ww\yu\yuZ|sawyfseteufufufufvgvgvgvgvhwhwhwhwhwhwixixixixixixixjyjyjyjyjyjyjyjyjyjykzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzkzjyjyjyjyjyjyjyjyjyjyjyjyjyjyjyjyixixixixixixixixixhwhwhwhwhwhwgvgvgvgvfvfvfufufueuetetetetdt~ds~ds~ds~cs~cr}cr}br}cp}^twWypYvrYvr[uu\su^qv`qvaovbotdnqflpjooorqopommjlquchksdkmpmpzedrnk~זR                                                                                                                                                                                                                    A~{{_`gkqxnqwhotwrjupismhuoh|rq~urus}so|sozunyvlxxktyhr{ip~exxmsw}tu~tv~tv~tv~uv~uvuwuwvwvwvwvxvxvxwxwxwxwywywyxyxyxyxyxzxzxzxzxzyzyzyzyzyzyzyzyzy{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{y{yzyzyzyzyzyzyzyzyzyzyzyzxzxzxzxzxzxzxzxyxyxyxyxywywywywywxwxwxwxvxvxvxvwvwvwuwuw~uv~uv~uv~tv~tv}tu}tu}tu}su}su}su|st|rt|rt|rt{rs{qs}ptuujm|bpyfrwfuuhvtixrlzpl{pl|sp|spyonsmfpkermfupgelrkotovfiz^`yr㓑o|}                                                                                                                                                                                                                            ϷVddkpZugpqprtoqtrqtrlqshopgpphmtlovpnxqlwvk{wk|~i|i}xnwosqqrrqrrqssrssrssrssrssrttsttsttsttsttsuutuutuutuutuutuutvvtvvuvvuvvuvvuvvuvvuvvuwwuwwuwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvxxvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwvwwuwwuwwuwwuvvuvvuvvuvvuvvuvvuvvuvvtvvtvvtuutuutuutuutuutuusuusttsttsttsttsttrttrssrssrssrssqssqrrqrrqrrqrrprrpqqpqqpqqoqqoppoppoppmqnvkug||gzuhytiyojunkviltekqemmfmnjoqorpnqppqmnon~doWtfdiyޓ                                                                                                                                                                                                                                             
!|nnpmklifhhgjjhopirriuwks{mpwqn|tm{xl{jihzozpurrttrttruuruuruusuusuusvvsvvsvvtvvtvvtvvtwwtwwtwwuwwuwwuwwuwwuxxuxxuxxuxxvxxvxxvxxvxxvyyvyyvyyvyyvyyvyyvyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwzzwyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyywyyvyyvyyvyyvyyvyyvyyvyyvyyvyyvyyvxxvxxvxxvxxvxxvxxvxxuxxuxxuxxuxxuxxuwwuwwuwwuwwtwwtwwtwwtvvtvvtvvsvvsvvsvvsuusuusuuruuruuruurttqttqttqttqttqsspsspsspssprrprrnsqxlxef~yh~vj}qkxolzjmuiqygstgqqelmeggcffhjgmmkl򙉛7v~                                                                                                                                                                                                                                                                o
5`~wwyqqqmpjloipqmoromrqkrqirrissgtsjtsnsrntrotrotrotsotsouspuspusputputputqvtqvtqvtqvuqvuqvurwurwurwurwurwvrwvrwvrwvsxvsxvsxvsxvsxvsxvsxwsxwsxwsxwsxwsxwsxwsxwsxwtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywtywsxwsxwsxwsxwsxwsxwsxwsxwsxwsxwsxwsxwsxwsxwsxvsxvsxvsxvsxvsxvsxvrwvrwvrwvrwvrwvrwurwurwurwurwuqvuqvuqvuqvtqvtqvtqvtputputputpuspusousousotsotrotrntrntrnsrnsqnsqmsqmrqmrqmrqlrplqphrqerqgqqgppipokpomomnokjmgkmhnpnrttuyzނŏEl
	                                                                                                                                                                                                                                                                                }C\}~~
vxz                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ?                                                                                                                                                                                                                     ?                                                                                                                                                                                                                                                                                                                                                                                                                 ?                              ?                              ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ?                                                                                                                                                                                                                                                                                                                                                                                               ?                                                                                                                                                                                                                                                                                                                                                                                    ?                       ?                                                                                                                                                                                                                                                                                                                                              ?                      ?                                                                                                                                                                                                                                                                                    ?                                                                                                                                                                                                                                                   ?                                                                                                                                                                                                                    ?                                                                                               ?                   ?                                                                                                                                                                                                ?                                                                                                                                                                  ?                                                                                                                                                                                                                                                                                           ?                                                                                                                     ?                                                                                                 ?                                                                                                      ?                                                                                                          ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ?                              ?                              ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ?                                                                                                                                                                                                                                             ?                                                                                                                         ?                                             PNG

   
IHDR         \rf   	pHYs       
OiCCPPhotoshop ICC profile  xڝSgTS=BKKoR RB&*!	J!QEEȠQ,
!{kּ>H3Q5B.@
$p d!s# ~<<+" x M0B\t8K @zB @F&S  `cb P- `' { [!  eD h; VE X0 fK9 - 0IWfH    0Q) { `##x  FW<+*  x<$9E[-qWW.(I+6aa@.y24  x6_-"bbϫp@  t~,/;m%h^uf@ Wp~<<EJB[aW}g_Wl~<$2]GLϒ	bG"IbX*QqD2"B)%d,>5 j>{-]cK'Xt  o(hw?G% fIq  ^D$.Tʳ?  D*A,`6B$BB
dr`)B(Ͱ*`/@4Qhp.U=pa(	Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F; 2G1Q=C7Fdt1r=6Ыhڏ>C03l0.B8,	c˱"VcϱwE	6wB aAHXLXNH $4	7	Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw
ǈg(gwLӋT071oUX**|
J&*/TުUUT^S}FU3S	ԖUPSSg;goT?~YYLOCQ_ cx,!k
u5&|v*=9C3J3WRf?qtN	(~))4L1e\kXHQG6EYAJ'\'GgSSݧ
M=:.kDwn^Loy}/TmGX$<5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=
Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ?0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz %gA[z|!?:eAAA!h쐭!ΑiP~aa~'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl{/]py.,:@LN8A*%w%
yg"/6шC\*NH*Mz쑼5y$3,幄'L
Lݛ:v m2=:1qB!Mggfvˬen/kY-
BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
+V<*mOW~&zMk^ʂkU
}]OX/Yߵa>(xoʿܔĹdff-[n
ڴ
VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-
6
U#pDy	
:v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ
8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-    cHRM  z%        u0  `  :  o_F 8IDATx                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        #   17,  # =M2  ʳ L>M   @[; OOO>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   `

  ̹    *  
   '!#           


 ___                                                                                                                                                                                             ++( 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       [D ?    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    !:[                                                                                                                                                                                                                       CL,
1
 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       J
E#                                                                                                                                                                                                             1hV 

# 
       	               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                         
 !{_                                                                                                                                                                                                        *q$7       
		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     	        	 
 h{                                                                                                                                                                                            BjE     
     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               	    
 
   
 (ԟ                                                                                                                                                                                    lI -       	    
  
 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      	      } ;y                                                                                                                                                                     0½l\  	        :
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   	    C                                                                                                                                                          Az@      
  $                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $     	       '""'                                                                                                                                                             ?r=   
    ( #       
   $                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              )    ) %    3  	   	 
x                                                                                                                                                       Fp=  
  	 (  &  
      !&  Ʀ Ԯ 5Q #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ѯ 
 -X           *  
       

 ~                                                                                                                                            ;n@    
  / ( 
                BU    "/ 4N                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Գ  "= 6T             	     
    $   
 v                                                                                                                                        .w<  	   7% # 	 
                A]    "0 1S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               گ    9 6\	                 
    0   
      
w

&


                                                                                                                                	
	 nH   	      5&                          Cc     #8 ,T                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ݮ     3 8c                         
 & 
  	*     y
                                                                                                                            Y 
   $ 2!   	                                      %@ *R                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   . <l
                                     
  #   	  
Qfnk                                                                                                                 ^e
   
  .$ #    
           	                "3             "                                                                                                                                                                                                                                                                                                                              ؕ     ) <l                                       	  	   
 	  
 56:                                                                                                         6q    -*    
                                  #5              
!                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ݑ      $ >q                                             	         	 
  1526                                                                                                        p0
  	   #  	     
                                          Kt
           ء s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                u        >q
                                                  
 
   		  $    	     x                                                                                                     	VW	  
   + *!                                                     "5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Bw                                                            	   
    


1.3                                                                                                $i    
 $                                                          	
 Lw
 	           w                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          y           @v
 
                                                                  &         a:                                                                                             vM     . $                                                          	 .                     	%                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ?w
                                                                  
     
 	"110                                                                                        "?	
   
   #!           
                                                          
 Eq 
              m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           p               9q 
                                                                   
          $"    
    9:                                                                                 ~B    * <%                                                                    #                           #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   	 3m                                                                             	   )		 444                                                                            ('      
	  
                                                                                 1c                r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                t                (c                                                                                            	  		         &H                                                                             
׳y4 
 
  , +           
                                                          
 $X                   h                                                                                                                                                                                                                                                                                                                                                                                                                                                                         k                   X	 
                                                                                 , /  
 
  ҇                                                                               !9 	                                                                                                      K                    v                                                                                                                                                                                                                                                                                                                                                                                                                                    y                  M $                                                                                                          
          6                                                                    	Y     
 ,          	         
                                                               $ A                                   t 
K \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                B '                                                                                             . 
  
    u                                                                   	>     
                                                                                                      % 6                        j                                                                                                                                                                                                                                                                                                                                                                                                                                          m                    7 *                                                                                                                   	     7                                                                  >    	  & 
   	                                                                          ( *                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -  .                                                                
                          )         j                                                            ͳM0    
 
                                                                                                          	     +                                         [ O                                                                                                                                                                                                                                                                                                                                                                                                                                                    $ 0  
 
 	                                                                                                               
                                                                    !0  
  N                                                                                                  
       ,                                              o                                                                                                                                                                                                                                                                                                                                                                                                                                             3  
 
  
                                                                                                            -        , !                                                       73    
                                                                                                                       +                                        p S
 Y
                                                                                                                                                                                                                                                                                                                                                                                                                                  4 	   	                                                                                                                      
  
 
            3   6bfl؞                                                9                                                                                                                                     +                                      o (                                                                                                                                                                                                                                                                                                                                                                                                                        5 
  
                                                                                                                )                9                                                      >86"                                                                                                                                               +                                         t N
 _                                                                                                                                                                                                                                                                                                                                                                                                        4   
  
 	                                                                                               	                           "                                                0      %                                                                                                                                  (                                             q ,                                                                                                                                                                                                                                                                                                                                                                                                   4     
 
 	                                                                                       $    
                          ,gg\ə                                         >0    	                                                                                                                                                (                                              w Q ^                                                                                                                                                                                                                                                                                                                                                                                      	 3     	 
                                                                            
                                 1  9                                              -      /                                                                                                                                              & -                                                  r &                                                                                                                                                                                                                                                                                                                                                                                       4    
 
 
                                                                         
                                *                                            @LP                                                                                                                                                           0                                                 s 
V Z                                                                                                                                                                                                                                                                                                                                                                  2                                                                     #    
                                                                                         

 
                                                                                                                                                           2 
                                                   v                                                                                                                                                                                                                                                                                                                                                                -     
                                                 
   *    
                                                                                   "1    
                                                                                                                                                                           4                                                     m e 
K                                                                                                                                                                                                                                                                                                                                                    +    
  
                                          	 	  	                                                               4                                           &                                                                                                                                                                            6                                                             o                                                                                                                                                                                                                                                                                                                                      *     
 
                                      !                                                                                                "      	 
                                                                                                                                                                              5                                                                s 
4                                                                                                                                                                                                                                                                                                                             ' "                               
    	                                                                                                                                                                                                                                                                                               2                                                              } O b                                                                                                                                                                                                                                                                                                                       # %    
                       &  
           		                                                                                                                                                                                                                                                                                  .                                                                   x                                                                                                                                                                                                                                                                                                            )     
              
  
                                                       	
	$&"vsu                                                     (    	                                                                                                                                                                                (                                                                    n n ?                                                                                                                                                                                                                                                                                                      ,     
 	  
     
  # (  
                                                    $$$*'(.06)#                                                        '       
                                                                                                                                                                                           %                                                             h                                                                                                                                                                                                                                                                                            0     
 
           
                               
                      	
	.+.
:893(8                                                                                                                                                                                                                                                                        '                                                           |                                                                                                                                                                                                                                                                                      3    	  
 		  
    !                                                                 1+),HJs                                                                                                                                                                                                                                                                                                     )                                                                  n n A                                                                                                                                                                                                                                                                       4      	
 
  	 	    	                                                                            )))778 HJG                                                                                                                                                                                                                                                                                          	               *                                                                   f                                                                                                                                                                                                                                                               1	       
                                                                             333                                                                                                                                                                                                                                                                                                                          )                                                                       }                                                                                                                                                                                                                                                 	  7     
 
     
                                                                      '''***                                                                                                                                                                                                                                                                                                                                        .                                                                     j y 	0                                                                                                                                                                                                                                             5     
     	 
                                                                               444                                                                                                                                                                                                                                                                                                                                            0                                                                      z _ V                                                                                                                                                                                                                                          5 
 	  
   
                
                                                              222                                                                                                                                                                                                                                                                                                                                                              4 
                                                                     s                                                                                                                                                                                                                                1   	                                     
                                                                                                                                                                                                                                                                                                                                                                                                              4                                                                                                                                                                                                                                                                                                    * 
    

                                                        ;;;                                                                                                                                                                                                                                                                                                                                                                                              2                                                                          m z 	0                                                                                                                                                                                                                 
               
                               
      			           333                                                                                                                                                                                                                                                                                                                                                                                                               1                                                                           { 
f 
P                                                                                                                                                                                                            	
 
 
                                             &&&222                                                                                                                                                                                                                                                                                                                                                                                                                           -                                                                                  o                                                                                                                                                                                           "  	
  
                                                          ,,,444???                                                                                                                                                                                                                                                                                                                                                                                                                                               '                                                                              ~                                                                                                                                                                                     # 
                 	                                
     			 BBB888888                                                                                                                                                                                                                                                                                                                                                                                                                                            (  #                                                                             o                                                                                                                                                                             $' 
  	                                                                        &&&   777777                                                                                                                                                                                                                                                                                                                                                                                                                                                                       *                                                                                  p { 	2                                                                                                                                                                     $ 
 
 
                     
                 	     WWWIII                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ,                                                                                 } k J                                                                                                                                                        
 ('  
 

 		                                                                               ==?111                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         +                                                                                      b                                                                                                                                     & 
 
 	           
                                     

DDJLM?|~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   , ,                                                                                    s                                                                                                                                        '"  

 
 

                                                      <<<LM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ( / 
                                                                                   ~                                       	                                                                                       %   

 	                                                     			 ...			WX                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              3 
                                                                                  s                                                                                                                       %#   
 
	
                                                              u


kl                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              0                                                                                    q  #                        
                                                                                        !    

                                                         			s(((ab                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 2                                                                                       w ~ 	.                                                                                                         

 
 	
 	                                                            &&&_Z[                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
            0                                                                                          | y 
9
                                                                                                   	 	                                                        


  g***TU                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               +                                                                                     o F                                                                                            
 
	 
 	                                            j--->@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (  '                                                                                       
T                                                                                       !   	  
         
                          `[]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      *                                                                                          
_                                                                                   $" 
  	
 
                                         


  i>>>13                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     +                                                                                                                                                                           

 &)  	  	
                                          n%%%TV                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         -                                                                                                                                                                                (' 
 
 	 	                                         


zGGG24                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                                                                                                                                                                    (" 	 
  	                                            sbd                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               . 
                                                                                                                                                           &%   

 
                                              """,,,>@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	             1 
                                                                                                                                                        %"                                       			jl                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             1                                                                                                                                                   !  
                                ###df                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     /                                                                                                                                                

  	
 	                             222###GI                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 -                                                                                                                                         

  


 	                               ,,,>@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        &                                                                                                                                                                  >@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             *                                                                                                                              $"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                                                                                                       '$  


                                       $$$gi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               -                                                                                                                         	 )&  


 


                                   '''y&&&ce                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ,                                                                                                            )%  


  			                                     )))u000DG                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .                   	                                                                                       '#  


                              +++p444>A                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             .                                                                                                     $     			                               '''m===58                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
           1                                                                                              "  

  


                                           l99958                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      /                                                                                             


                                              o111=@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            =  $                                                                                         

  


                                           q222                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
        -                                                                                           


  


                                                 m+++LO                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       2                                                                                     / &  

                                     


l"""MP                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
 
  2                                                                                            
 3    
 _                                               Z]                                                                                                                                                                                                                                                                                                                                                                
  
                              	                                                                                                                                                                                                                                                                                                        5           P `Z                                      [sw                                                                                                                                                                                                                                                                                                                                                                   	     
             		 
    
                                                                                                                                                                                                                                                                                                                                            6                E \W                              `222                                                                                                                                                                                                                                                                                                                                                                      
          )           	  
 
  
   
                                                                                                                                                                                                                                                                                                 7                       = SP                                    i%%%AE                                                                                                                                                                                                                                                                                                                                                                              	 (#
 
	                       	   	 
 
                                                                                                                                                                                                                                                                                                             2                              %  A=                                   !!!W[                                                                                                                                                                                                                                                                                                                                                                             
   
        
             	            -  
              	                                                                                                                                                                                                                                                                      +                                    2  .+                            a>>>ڴ                                                                                                                                                                                                                                                                                                                                                                                           
                  
                  
  	                                                                                                                                                                                                                                                                                      !                                          ? 
 "!                     111+/                                                                                                                                                                                                                                                                                                                                                                                                                   5 
 
  
        	 "       
 	 ' 
                                                                                                                                                                                                                                                                     )                                              C b^             ^LP                                                                                                                                                                                                                                                                                                                                                                                                
                 
	 %     	        
      
   	                                                                                                                                                                                                                                                        /                                                    
 D c^         m"""                                                                                                                                                                                                                                                                                                                                                                                                                      %	         *       7   
                                                                                                                                                                                                                                             	 2                                                          > XS    ###KO                                                                                                                                                                                                                                                                                                                                                                                                                                       '  	    
       	       "                                                                                                                                                                                                                                            3                                                                ! 0 B>   t...                                                                                                                                                                                                                                                                                                                                                                                                                                               
 
  '      
         -                   
                                                                                                                                                                                                                      /                                                                      4  +(     (((9=                                                                                                                                                                                                                                                                                                                                                                                                                                                               
 #            
      %                                                                                                                                                                                                                                   )                                                                      B  (((                                                                                                                                                                                                                                                                                                                                                                                                                 
 
                                      	  1     	      
 , 5   !  
  
                                                                                                                                                                                                                  	                                                                      E b\6:                                                                                                                                                                                                                                                                                                                                                                                                                                                       	  #
     
       
       	                                                                                                                                                                                                             	                                                                        J}M                                                                                                                                                                                                                                                                                                                                                                                                                                                        
  $      	  		      $                                                                                                                                                                                                                                                                                     djs   rm                                                                                                                                                                                                                                                                                                                                                                                                   	                                                                             
            	                                                                                                                                                                                                                                                        m(m                                                                                                                                                                                                                                                                                                                                                                                                                                                                          	 
               
        	   	                                                                                                                                                                                                                                          5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                        
                                                                                                                                                                ^                                                                                      	7Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        	 
  	          
                                                                                                                                                                                                                                                                       "6 , m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  & 	           	  " ,                                                                                                                                                                                                                                                      Op   m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                      
 <                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               +  $        
  	 	   /                                                                                                                                                   #  		         5                                                                                    5T                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
          
                                                                                                                                                          ($    
      
	                                                                                       1    n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
         # %
                                                                                                                                                         

 ++   


                                                                                              Nj   n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
               	                                                                                                                                                     +) 
 
  		
 	   


  


                                                                                         	 0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 "    	          
                                                                                                                             )$   

                  M                                                                                7]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
	 
                                                                                                                                                             %  


  


        			  


                                                                                         '9    n                                                                                                                                                                                          ===                                                                                                                                                                                                                                                                                                                                   $ 
         

 %                                                                                                                             
	 
 
                 F                                                                                       f,                                                                                                                                                                                        XXX                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                           ! 

 
 


                  			                                                                                       n                                                                                                                                                                                        			                                                                                                                                                                                                                                                                           
       !   	                                                                                                                    
 )"   
 		                     


     
                                                                                  &    n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -$  
                                                                                                                R]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
             	                                                                                       	 2 
 	
 

   
   
                             K                                                                                      
 =                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   = 
   		                                     			                                                                                          7 n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                               4       
                                                   L                                                                                 An&                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                               *  &   
 
                                                  C                                                                               1Ԓ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        .       	 
                                               5                                                                                    	o;n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         6   
  
                                                             


  


 


                                                                               4k o                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          	           
               
                                                                                                           <   
 	  	                                                  

                                                                                  &n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                    
                                                                                                              :     
                                                               	                                                                               	 7 n                                                                                                                                                                                                                                                                                                                                                                                                                                                                          	                 1               &                                                                                                     5     
 
 	  
            
                                          			   


                                                                                =h                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      . #   
 	     	                                                            			  


                                                                               n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        	  %  	            # 
                                                                                               $ *   
 
	 	      	
                                                                  =                                                                               U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                   
                                                                                                     
3     	         	                                                                    +                                                                             R	N+ﱒ                                                                                                                                                                                                                                                                                                                                                                                                                                                                             %                '                                                                                         
 :    
 
                                                                                                                                                      
P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        %                                                                                                 ;     	               
                                                                        


                                                                             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                       	     ! 	         
 
                                                                                                      7                      
 
                                                                     P                                                                          k	-ђ                                                                                                                                                                                                                                                                                                 	                                                                                     	 
       	   !                                                                                                    / !    	                                                                                        I                                                                           I @                                                                                                                                                                                                                                                                                                                              	                                                   	  
   &    
   	 	    ) #
                                                                                               # *   
 
 	                        
                                                               ;                                                                            <_)                                                                                                                                                                                                                                                                                                                                 	                                               
 
  
 	        
  # 	    
                                                                                              	3     	                  	        0                                                                     *                                                                                                                                                                                                                                                                                                                                                                                                                                            	                       
  
   
                                                                                                
 :    
 
                              	 
                                                                                                                                                    on                                                                                                                                                                                                                                                                                                                                                             	                  #    
 
                                                                                             8                                        -  ( 
                                                            O                                                                   h2ԑ                                                                                                                                                                                                                                                                                                                                                                                       
 	  
         
  # "        	                                                                                         5     	                                        
   	                                                                                  O                                                                   H                                                                                                                                                                                                                                                                                                                                                                    
      
     
 
                                                                                                 , "   
 
                                           
 -  ! 
  
                                                                I                                                                      E	P)﯑                                                                                                                                                                                                                                                                                                                                                        	               
                 	                                                                            +    
	                                                                                                                                              7                                                                                                                                                                                                                                                                                                                                                                                                   
     	   	       
                                                                                                 4    
 
                                        	   	      
  M 	                                                                       &                                                                    "0 kV                                                                                                                                                                                                                                                                                                                         	       
   
 
             % "                                                                                                        	 :     
                                                          
                                                                                                                              z                                                                                                                                                                                                                                                                                              	                  
                
     

 	                                  
                                                                    8                                                         	        5  +                                                                     R                                                               |pp                                                                                                                                                                                                                                                                                                      	 
   	       	  
 
 
 
 	                                                                                                                             0     	                                                                             
                                                                      M                                                               i	                                                                                                                                                                                                                                                                                  
 
 
     "                     	  	    
 &  	         	   	                                                                                                      $ (   
 	                                                                    1                                                                        >                                                                
 pU                                                                                                                                                                                                                                                                            	             	 	            	  
     
                                                                                                                                       1   
 
 	                                                                                                                                                               ,                                                               R	8                                                                                                                                                                                                                                                                            	                 
                   	                                                                                                     8     	                                                        
        
          b    	                                                               			                                                                     pA                                                                                                                                                                                                                                                                          3%           	                                                                                                                                                                      8      
                                                                                                                                                                       


      U                                                            ?	J                                                                                                                                                                                                                                                                             	     
                                                                                                                                                                                                                     1     	                                                                                           	         E  #                                               


         Q                                                            #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   & $   
 	                                                                                                                                                                                                     


  


                                                            /k Q                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   .   
 
 	                                                                                                                                      )  5   
    
  	                        	             /                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      6     
                                                                                                                                                                                                  


                                                           ,G T                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      6                                                                                                                                                      + 
 I )   	  
                                               U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1     	                                                                                                                                                                                                        			 


                                                              )G X                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   # #    
                                                                                                                                                         
   # ,                                            


  


    A                                                     ~
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
/   
  	                                                                                                                                                                   "                                                       -                                                        &) Z                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
 6      
                                                                                                                                                   
           
 *  # , / 
                 
                                                                                  ~	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      6                                                                                                                                                                                    ! ( 	       	 
                                          			 


   

                                                       "* W                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             -     	                                                                                                                                                                          
            )                                          O                                                   vI                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $   
 
	 	                                                                                                                                                                      	                       
           	                              			      ;                                                   - L                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          /    
 
                                                                                                                                                                     
               
                                                 $                                                v                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           4     
                                                                                                                                                                                      	                                                        			                                                      <H=                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 0                                                                                                                                                                                                      
                                                  V                                                  x                                                                                                                                                                                                                                                                                                                                                                                                                                                                           $     
  	                                                                                                                                                                                                               
                                        
     E                                             IG/                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +   
 
	 	                                                                                                                                                                                                                                                                	  
	     /                                          u   \                                                                                                                                                                                                                                                                                                                                                                                                                                                                  	 1    
 
                                                                                                                                                                                                                                         	  
                              	      	 	                                             WIz                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1     	                                                                                                                                                                                                                                                     
  
            
                         X                                             j   x                                                                                                                                                                                                                                                                                                                                                                                                                                                                    &    
 	 	                                                                                                                                                                                                                                                               , 	  
                            	      O                                          cH                                                                                                                                                                                                                                                                                                                                                                                                                                                               
&   
 
	 	                                                                                                                                                                                                                                                                          
  	                                5                                         ]                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
  .    
 
                                                                                                                                                                                                                                                             
           
 "     
&                     	                                             s7]a                                                                                                                                                                                                                                                                                                                                                                                                                                                                  /     	                                                                                                                                                                                                                                                                      	           	 
 ! '
 % 
                          


   	                                         &娪#                                                                                                                                                                                                                                                                                                                                                                                                                                                     %     
	                                                                                                                                                                                                                                                                                 
 
                            P                                     M'$*_d                                                                                                                                                                                                                                                                                                                                                                                                                                                $   
 
 	                                                                                                                                                                                                                                                                                                                	            			                                     `s!2                                                                                                                                                                                                                                                                                                                                                                                                                    	 -    
 
                                                                                                                                                                                                                                                                                                    
 !                                                       +?:#dO
|w999                                                                                                                                                                                                                                                                                                                                                                                                                               .     	                                                                                                                                                                                                                                                                                                              	  % $  
         
            	                                  &  
j򻾾m+
                                                                                                                                                                                                                                                                                                                                                                                                            $     
                                                                                                                                                                                                                                                                                   
            	   
          "
  	    
                   P                                ,)     		tjDDD&&&                                                                                                                                                                                                                                                                                                                                                                               
"     	 	                                                                                                                                                                                                                                                                                                                                     	  
                             5                            , 2/    		{t###III                                                                                                                                                                                                                                                                                                                                                                                *                                                                                                                                                                                                                                                                                         	                               !  >	   
                                                      
      


|ق%%%AAA(((                                                                                                                                                                                                                                                                                                                                                                                 )                                                                                                                                                                                                                                                                                                                                                                 
                       \                            & D? 			      			   r888                                                                                                                                                                    	                                                                                                                                                                        
 	                                                                                                                                                                                                                                                                                                                                                       $   "             	 
    H                              $ :Q                h                                                                                                                                                                                                                                                                                                                                                       
 %     
                                                                                                                                                                                                                                                                                                                                                                                                         	      

        )                       -"                   g                                                                                                                                                                                                                                                                                                                                          *                                                                                                                                                                                                                                                                                                                                                                                                           
 + +              
                             " 0                    	     ؝n                                                                                                                                                                                                                                                                                                                       "     	 	                                                                                                                                                                                                                                                                                                                                                                                                                    	            	  Y                             
 
                  r                                                                                                                                                                                                                                                                                                           
    
 
 
                                                                                                                                                                                                                                                                                                                                                                                                                             # A)             =                           " 4                              			 			s999                                                                                                                                                                                                                                                                                                                %   
                                                                                                                                                                                                                                                                                                                                                                                                                                  =, #       

                                # 51                                   )))                                                                                                                                                                                                                                                                                $     
	                                                                                                                                                                                                                                                                                                                                                                                                                                      M' 9        ^                                           


                                                                                                                                                                                                                                                                                          
 
 	                                                                                                                                                                                                                                                                                                                                                                                                                                                
 2#        J                        %                                 ///                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                     
   7       '                     " E,                                                     (.ݼӯQQQ                                                                                                                                                                                                                                           #     	                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
   
                    	  ##                                                                   00 OǈFFF444                                                                                                                                                                                                                                        
	 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	 
	       8                      7                 	                                         66ƾ୴$$$000 ,,,                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
  
                         EF                                                                       BB ,ׯ///DDD                                                                                                                                                                                                       # 
  
   	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  	    
                         *    
                                                               J  3ڢ{{{                                                                                                                                                                                          "  
   
 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
 	 
      -                                                                                                      N                                                                                                                                                                                       
  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                     4     	              
                                                	           O                                                     	                                                                                                                   % 
  
  
	 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      	  
	        "              8 ##  	                                          
      	                                                                                                                                                                                     ) 
 
 
  	 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
 
       *                   ,: ,                                      
              
                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          $ *  	   	                          
    	                                                                                                                                                                            -     
	 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               	 
	        -               *        	                          	 	                                                               
        	 &                                                                                                      2     
	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
        6                *                   

 
       
 	 
            
          	   	                                                                                                                                                                          
"     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                	          "               !^                               "       
       	                                                                                	                                                                                                     =   	 
  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
            @                                                        +                         		                                                    z                                                                                                                     9 	  	 
 
	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    	       <                                                                
        
    
                                                          ""        
                                                                                                  	  2     
 	  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    	          5            O                                                                  
  " ?    
   
    	    	                                             

                                                                                                               'H       	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       	            &M ѝ           
                                                                           % 1     
   
  	                                                      	                                                                                            0 !       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " 2         7                                                                                       	   #
     
	                                               $&%y                                                                                                             	  0K   	  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  	      ,M 	                                                                                                        
        %% =?8                                            %&      
                                                                                                 1I       	 	 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   	 	 	     	 ,K                                                                                                                 
 "&$	                                                                                                                                                      ,?      	 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              	 	      (A                                                                                                                  
 	    


                                             #&)                                                                                                         @X                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      8W                                                                                                                  &)*                                                  #$$l                                                                                                    "/  (                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ) /                                                                                                                 HB=                                                $# $   
  (                            	                                  BV                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               9V                                     	                               $       $
                                                        ++-q                                                                                             0?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (?                                                                                                                                                                  	.*:                    
                                       >P                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      5N                                          
                     !JJF                                                        $$#                                                                                  5E                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -D                                                                                             "#                                                               	774    
  #                                                       
  <L                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3J 	                                                              "        	  DCC                                                                '&%                                                                       5D 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          .D                                                                                                                                                     95U⩘   
  3      
  	                                     9H                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   1F к                                                      
       )                                                                        ++)                                                             6C 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 -C                                                                         JFS                                                                        	CBE     ( %  
                                          8F                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1E                                          
  % *      & GFK                                                                                 $%!#&                                                +7 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              %6                                              
                                                                                                
=A@    . %          	                          :F                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 1F                               	         $ /     HNH                                                                                        .,.98; 
                                                  #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        #                                                    #%&                                                                                               	?=C'       *+                                   5?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ->                                                   HGT                                                                                                 GEA      	 
                               -6                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            '5                                  
        "$$
                                                                                                      540?29     5 %                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         % 6     &$"%NGQ                                                                                                        
+                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                         
  	   '2&DEC                                                                                                                    I\B$  	
 0   %                 &(                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            !)     	                
  )      1@E>                                                                                                                           -+/y*       9% % 	             
 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     	  	                 
    
       &&&DDD                                                                                                                             444}$
    #    )               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	                   
+13!                                                                                                                                      ??=z%	          '  	     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	          $ 
         '%%%##                                                                                                                                           FFG#
        #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   	           9       ,('"                                                                                                                                      J       
   %                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           	     
  .-5     GGG                                                                                                                                             <;: "         
 +                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                	      %*                                                                                                                                              	   J&s           ! 
    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              	           +*%     GGG                                                                                                                                                      
ILH "澼
   	  
         

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          	      
      
 *&-                                                                                                                                                                                9>8 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
  
  .,7                                                                                                                                                                                          cda
	
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
   
.-%	                                                                                                                                                                                                        

cpHн	


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    	                           
  


*'			                                                                                                                                                                                                                
`a\$                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  $%!                                                                                                                                                                                                                               	]m3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

                                                                                                                                                                                                                                                 

[_a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   mtt	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              #hkR    IENDB` JFIF XX   C 


		
%# , #&')*)-0-(0%()( C



(((((((((((((((((((((((((((((((((((((((((((((((((((   l"                3       !1"Q2Aa#RSqBD               "          1!Aa   ? %JxH\?W{gkh 
[i gQ)%Xv fm~
O,8!YSa<pm:Q_ 2	쥧w@y>==cJJRN)HX/fȕvv~M]%yr^ToqTxv
	
ԕʰ!__jB*}B3EڗN2[e!sN[N0A:Y]赦%bm-ʈ
hpx$Vy73
4F>ߺ,gVfL(JG# ([ċ
mu>2Ǎ(JN>lZZoKs鶽Nvm]\*5?b b3hۉpKBԡܩqAK@jϹI/ǰ%
&ae_~vK֢?Ti6rC[ tgRzxY44t
m$ؖҳ!-+=A\Ӝ``s)XZyo2-
.tdg< ,QH}M4VI :n/2pSMkDzJ>R9OOc'M8A[^5
Xr4lveWګȘJ\Ͽ<Jj	&'Я)8GK(}utq7~u0{ n(ehVeUpԩ-W֠$BյE,6Hl%򉈣\:ߘr;4EBaHA[篐@q}n_piS\":T\8{w5ٵہWn2܍
JRqJxΉ)u6P~R4`cT"ed2MOCc8AG{Z.T+űY9 rz:ZP7iM\yE<d 
e)
Q)
g#1z[a:-Z~;>܆о 2cOF-(XASH3P#	>cs֛F3WLlQmo$ىPNG

   
IHDR         a   @IDATxcd0#$ ӄG#^B%(
" ib ^ Exn    IENDB`PNG

   
IHDR         a   RIDATxcd0"s1#.>~Ÿh(MX${"zQ$@`@q R% M    IENDB`GIF89a    w  !    ,          4̜tdD|Բ\$䜢D<ܬĮl,̌tܶT̮d         ,䴦ԤtĪlL|ܲ\   D   4ԔĪtT   L4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              DBAB&DC):/d@#Ək!".Tr˖,Y: Ɂ(s3/D N*"$@<z4e9(!`8w=	#80@ɓaha(@<pܞȸ`|%t:V

@`1b{!C򇶖mic:O$(rrh}c%;pe|!Gdϼ{[@G\:rWN
VLy[$-Mۇv1r36lGjl %q@j%Ax7,AB8vZwyu`%iKDIL\@kaWL-$CgКu6b}eXU00_+8p@ATEhM(It@TI:@NMIӚjO) %geU?̈́@XҟtL A*H袊6ܐ  ;PNG

   
IHDR         (-S   sRGB   PLTE                   			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHl͔L   tRNS @f   bKGD H   	pHYs        tIME#	D[l   8IDATc`H "0*P8  fD`@ B  Pb
\q    IENDB`PNG

   
IHDR         (-S   PLTE                     			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHl   tRNS @f   IDATxcd@@cs?
rB~A 1-q\    IENDB`PNG

   
IHDR         (-S   PLTE                     			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHl   tRNS @f   0IDATxcd@0<,,`
.$@+X   /,_$    IENDB`PNG

   
IHDR         (-S   PLTE                     			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHl   tRNS @f   EIDATxcd@@c``s~1	E~1~D@'  EpkA7Z  *$˴
    IENDB`PNG

   
IHDR         (-S   PLTE                     			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHl   tRNS @f   =IDATxcd@ B0rp"BF C.p*p& U      IENDB`PNG

   
IHDR         (-S   sRGB   PLTE                   			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHl   tRNS @f   bKGD H   	pHYs        tIME:
Ȑz   2IDATc` |(4FFTFFH	Wi.[q)L 
  gp5    IENDB`PNG

   
IHDR         (-S   sRGB   PLTE                			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHlͽw/   tRNS @f   bKGD H   	pHYs        tIMEP   NIDATuQ
 !BGO9,=1kC(E v@2@!jܸҳxzJCN~&(
c    IENDB`PNG

   
IHDR         (-S   PLTE                     			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHl   tRNS @f   >IDATxcd@@cs?̋*U3B3/7G` @q_  !rG    IENDB`PNG

   
IHDR         (-S   PLTE                     			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHl   tRNS @f   3IDATxcd@H`y8!\ZPC1U@qPasѽ 
|    IENDB`PNG

   
IHDR         (-S  PLTE                   			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHl   tRNS @f   bKGD H   	pHYs        tIME
;a   5IDATc` (  `p>"F
YF@ׂn(h#4  Zm:A    IENDB`PNG

   
IHDR         (-S   PLTE                     			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHl   tRNS @f   >IDATxcd@@cs?A>>0	8A|<Z0Űa 2$1    IENDB`PNG

   
IHDR         (-S   sRGB   PLTE                			,,,999EEERRR___lllxxx𠠤>  ]  |          $$HHll> ] |( 2 < F U m$Hlʹ>* ]? |T i ~ ٓ  $Hlڐ>> ]] ||     $Hl*> ?] T| i ~   $Hl> ] (| 2 < F U m$Hl >  ]  |         $$HHll > ] |( 2 < F U$mHl >* ]? |T i ~ ٓ $Hlΐڴ >> ]] ||    $Hl *> ?] T| i ~  $Hl > ] (| 2 < F U$mHl  >  ]  |        $$HHll > ]( |2 < F U m$Hlʹ* >? ]T |i ~  ٪ $Hlڐ> >] ]| |    $Hl> *] ?| T i ~  $Hl> ] | ( 2 < F U$mHle   tRNS @f   bKGD H   	pHYs        tIME5)<ڿl   6IDATc`ؠ W6$aC
P
`0#2  "_    IENDB`/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2015 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 * Consult your license package for usage terms and conditions.
 *
 * @fileoverview Generate a key pair suitable for public key authentication
 */

var File = require("scsh/file/File").File;
var CVC = require("scsh/eac/CVC").CVC;
var PublicKeyReference = require('scsh/eac/PublicKeyReference').PublicKeyReference;
var SmartCardHSM = require("scsh/sc-hsm/SmartCardHSM").SmartCardHSM;
var SmartCardHSMInitializer = require("scsh/sc-hsm/SmartCardHSM").SmartCardHSMInitializer;
var SmartCardHSMKeySpecGenerator = require("scsh/sc-hsm/SmartCardHSM").SmartCardHSMKeySpecGenerator;
var CAConnection = require("scsh/sc-hsm/CAConnection").CAConnection;
var ManagePKA = require("scsh/sc-hsm/ManagePKA").ManagePKA;
var HSMKeyStore = require("scsh/sc-hsm/HSMKeyStore").HSMKeyStore;
var PKCS10Generator = require("scsh/x509/PKCS10Generator").PKCS10Generator;
var PKIXCommon = require("scsh/x509/PKIXCommon").PKIXCommon;
var DKEK = require("scsh/sc-hsm/DKEK").DKEK;
var PaperKeyEncoding = require("scsh/sc-hsm/PaperKeyEncoding").PaperKeyEncoding;



function KeyManager(card) {
	this.crypto = new Crypto();
	this.lastfile = GPSystem.mapFilename("", GPSystem.USR);
	this.initializedWithTransportPIN = false;

	this.loadPlugins();

	Card.setCardEventListener(this);
	this.cardRemovedListener = {};

	if (card) {
		this.setCard(card);
	}
}

KeyManager.INITIALIZE = "Initialize Device";
KeyManager.GENERATE_PIN = "Generate Random PINs";
KeyManager.GENERATE_RSA_KEY = "Generate RSA Key";
KeyManager.ENTER_KEY_LABEL = "Enter Key Label";
KeyManager.ENTER_KEY_REFERENCE = "Enter Key Reference";
KeyManager.GENERATE_ECC_KEY = "Generate ECC Key";
KeyManager.IMPORT_PKCS12 = "Import from PKCS#12 (Old)";
KeyManager.SELECT_KEY_SIZE = "Select Key Size";
KeyManager.SELECT_CURVE = "Select Curve";
KeyManager.DELETE_KEY = "Delete Key";
KeyManager.CREATE_DKEK_SHARE = "Create DKEK Share";
KeyManager.IMPORT_DKEK_SHARE = "Import DKEK Share";
KeyManager.GENERATE_AES_KEY = "Generate AES Key";
KeyManager.RSA_ALGORITHM_LIST = "<html><p>Possible algorithms for RSA key</p><ul><li>RSA_RAW(20)</li><li>RSA_DECRYPT_RAW(21)</li><li>RSA_DECRYPT_V15(22)</li><li>RSA_DECRYPT_OAEP(23)</li><li>RSA_V15_SHA1(31)</li><li>RSA_V15_SHA256(33)</li><li>RSA_V15_SHA512(35)</li><li>RSA_PSS(40)</li><li>RSA_PSS_SHA1(41)</li><li>RSA_PSS_SHA256(43)</li><li>RSA_PSS_SHA512(45)</li><li>DEFAULT_SIGN(A0)</li><li>WRAP(92)</li></ul>" +
				"<p>Enter as comma separated list of hexadecimal codes or names</p><p>Leave empty to allow all algorithms</p></html>";
KeyManager.ECC_ALGORITHM_LIST = "<html><p>Possible algorithms for ECC key</p><ul><li>ECDSA(70)</li><li>ECDSA_SHA1(71)</li><li>ECDSA_SHA1(72)</li><li>ECDSA_SHA256(73)</li><li>ECDSA_SHA384(74)</li><li>ECDSA_SHA512(75)</li><li>ECDH(80)</li><li>ECDH_AUTPUK(83)</li><li>ECDH_XKEK(84)</li><li>DEFAULT_SIGN(A0)</li><li>WRAP(92)</li></ul>" +
				"<p>Enter as comma separated list of hexadecimal codes or names</p><p>Leave empty to allow all algorithms</p></html>";
KeyManager.AES_ALGORITHM_LIST = "<html><p>Possible algorithms for AES key</p><ul><li>CBC_ENC(10)</li><li>CBC_DEC(11)</li><li>CMAC(18)</li><li>WRAP(92)</li><li>REPLACE(94)</li><li>DERIVE_SP800_56C(99)</li></ul>" +
				"<p>Enter as comma separated list of hexadecimal codes or names</p></html>";

KeyManager.BUG31 =	"<html><p>Version 3.1 of the SmartCard-HSM has a bug that prevents importing a RSA or ECC key with algorithm list.</p><br>" +
			"<p>A key generated with algorithm list can be exported, but the import into a SmartCard-HSM with 3.1 will fail.</p>" +
			"<p>Suggested workaround is to leave the algorithm list empty for keys that shall be exported.</p><br>" +
			"<p>The bug has been fixed in 3.2. A key exported with algorithm list in 3.1 can be imported in 3.2.</p></html>";

KeyManager.BUGAES =	"<html><p>Version 3.1 and 3.2 of the SmartCard-HSM have a bug that causes weak AES keys with little to no entropy (see #172 in CDN).</p><br>" +
			"<p>Do not use this version in a productive environment for generating AES keys. The bug has been fixed in 3.3.</p></html>";

KeyManager.BUGWRAP =	"<html><p>Versions before 3.6 and 4.1 of the SmartCard-HSM have a bug that prevents the export of<br>" +
			"3072 or 4096 bit RSA keys if an algorithm list is defined (see #240 and #241 in CDN).</p><br>" +
			"<p>We strongly recommend to update to the latest version before creating such a key.</p></html>";

KeyManager.GENERATING_KEY = "Generating key can take up to 60 seconds, please wait...";
KeyManager.GENERATING_KEY_DONE = "Key generated";
KeyManager.KEY_LABEL_EXISTS = "A key with that label does already exit";
KeyManager.KEY_REFERENCE_INVALID = "A key reference must be between 8 and 16 character long, typically with country code (2), mnemonic (1-9) and serial (5)";
KeyManager.INVALID_ALGORITHM_LIST = "Invalid algorithm list";

KeyManager.LOGIN_WITH_USER_PIN = "Login with User PIN";
KeyManager.LOGIN_WITH_USER_PIN_PAD = "Login with PIN PAD";
KeyManager.LOGIN_WITH_USER_BIO1 = "Login with Biometric Template 1";
KeyManager.LOGIN_WITH_USER_BIO2 = "Login with Biometric Template 2";
KeyManager.LOGOUT = "Logout";
KeyManager.ENTER_USER_PIN = "Enter User PIN";

KeyManager.USER_PIN = "User PIN";
KeyManager.TRANSPORT_PIN = "Transport PIN";
KeyManager.PUBLIC_KEY_AUTHENTICATION = "Public Key Authentication";
KeyManager.PUBLIC_KEY_AUTHENTICATION_OR_PIN = "Public Key Authentication or User PIN";
KeyManager.PUBLIC_KEY_AUTHENTICATION_AND_PIN = "Public Key Authentication and User PIN";
KeyManager.BIOMETRIC_MATCH_SOC = "Biometric Matching (SoC)";
KeyManager.BIOMETRIC_MATCH_SOC_OLD = "Biometric Matching (SoC-Old)";
KeyManager.BIOMETRIC_MATCH_NT = "Biometric Matching (NT)";

KeyManager.CHANGE_PIN = "Change User-PIN";
KeyManager.UNBLOCK_PIN = "Unblock User-PIN";
KeyManager.RESET_PIN = "Reset User-PIN";
KeyManager.CHANGE_SOPIN = "Change SO-PIN";
KeyManager.CHANGE_SOPIN_RANDOM = "Change SO-PIN to Random Value";

KeyManager.WITH_RRC = "Unblocking PIN with SO-PIN allowed";
KeyManager.WITH_RRC_PIN = "Resetting PIN with SO-PIN allowed";
KeyManager.WITHOUT_RRC = "Resetting and unblocking PIN with SO-PIN not allowed";

KeyManager.EXPORT_PUBLIC_KEY = "Export Public Key";
KeyManager.REGISTER_PUBLIC_KEY = "Register Public Key";
KeyManager.AUTHENTICATE_PUBLIC_KEY = "Authenticate with Public Key";
KeyManager.REPLACE_PUBLIC_KEY = "Replace Public Key";

KeyManager.EXPORT_KEY = "Wrap Key (and Certificate)";
KeyManager.IMPORT_KEY = "Unwrap Key (and Certificate)";

KeyManager.GENERATE_PKCS10 = "Generate PKCS#10 Request";
KeyManager.IMPORT_CERTIFICATE = "Import Certificate";
KeyManager.EXPORT_CERTIFICATE = "Export Certificate";
KeyManager.DUMP_CERTIFICATE = "Dump Certificate";
KeyManager.DELETE_CACERTIFICATE = "Delete CA Certificate";

KeyManager.IMPORT_DATAOBJECT = "Import Data Object";
KeyManager.EXPORT_DATAOBJECT = "Export Data Object";
KeyManager.DELETE_DATAOBJECT = "Delete Data Object";

KeyManager.IMPORT_AESKEY = "Import AES Key";

KeyManager.DKEK_SELECT = "Select Device Key Encryption scheme";
KeyManager.DKEK_NONE = "No DKEK";
KeyManager.DKEK_RANDOM_DKEK = "Randomly generated DKEK";
KeyManager.DKEK_SHARES = "DKEK Shares";
KeyManager.DKEK_NO_OF_SHARES = "Enter number of DKEK shares"
KeyManager.KEY_DOMAIN_LABEL = "Key Domain Label (Optional)";
KeyManager.DKEK_KEY_DOMAINS = "Key Domains";
KeyManager.DKEK_NO_OF_KEY_DOMAINS = "Enter number of key domains"

KeyManager.CREATE_DKEK_DOMAIN = "Create DKEK Key Domain";
KeyManager.CREATE_XKEK_DOMAIN = "Create XKEK Key Domain";
KeyManager.ASSOCIATE_XKEK_DOMAIN = "Associate XKEK Key Domain";
KeyManager.DELETE_KEY_DOMAIN = "Delete Key Domain";
KeyManager.DELETE_KEK = "Delete Key Encryption Key";
KeyManager.SIGN_KEY_DOMAIN_MEMBERSHIP = "Group Signer Operations";
KeyManager.CREATE_EXCHANGE_KEY = "Create Exchange Key";
KeyManager.DERIVE_XKEK = "Derive XKEK";

KeyManager.EXPORT_ID = "Export Device ID";
KeyManager.REMOTE_UPDATE = "Remote Update";

KeyManager.FIX_SECP521 = "Fix wrong key size";

KeyManager.SIGFORM_KDM = "Static key domain membership (>=3.4)";
KeyManager.SIGFORM_KDA = "Static key domain association (>=3.4)";
KeyManager.SIGFORM_KDM3 = "Key domain membership (<3.4)";

KeyManager.CURVES = [ "secp192r1", "secp256r1", "secp384r1", "secp521r1", "brainpoolP192r1", "brainpoolP224r1", "brainpoolP256r1", "brainpoolP256t1", "brainpoolP320r1", "brainpoolP384r1", "brainpoolP512r1", "secp192k1", "secp256k1" ];



KeyManager.prototype.detectPlugins = function(dir) {
//	print("dir: " + dir);
	var f = new File(dir);
	var l = f.list();
	for (var i = 0; i < l.length; i++) {
		if (l[i].search(/^\d\d\d-.*-plugin\.js$/) == 0) {
			var name = l[i];
//			print("Found : " + name);
			if (typeof(this.pluginMap[name]) == "undefined") {
				var p = { dir: dir, name: l[i] };
				this.plugins.push( p );
				this.pluginMap[name] = p;
			}
		}
	}
}



KeyManager.prototype.loadPlugins = function() {
	this.plugins = [];
	this.pluginMap = [];

	var udir = GPSystem.mapFilename("keymanager/plugins", GPSystem.USR);
	var sdir = GPSystem.mapFilename("keymanager/plugins", GPSystem.SYS);
	var cdir = GPSystem.mapFilename("plugins", GPSystem.CWD);

	if (cdir.equals(sdir)) {		// Run from Smart Card Shell
		this.detectPlugins(udir);
		this.detectPlugins(sdir);
	} else {
		this.detectPlugins(cdir);	// Run as copy in a workspace
	}

	this.plugins.sort( function(a,b) { return a.name.localeCompare(b.name) });

	for (var i = 0; i < this.plugins.length; i++) {
		var plugin = this.plugins[i];
//		print(plugin.name);

		var fn = plugin.dir + "/" + plugin.name;
		fn = fn.substr(0, fn.lastIndexOf("."));
//		print(fn);
		var exp = require(fn);
		plugin.instance = new exp.Plugin(this);
		GPSystem.trace("Loaded plug-in: " + plugin.instance);
	}
}



KeyManager.prototype.hasTokenManagementKey = function() {
	return this.managementToken && this.managementToken.tmk;
}



KeyManager.prototype.determineSOPIN = function(salt) {
	var soPIN = "3537363231383830";

	if (this.hasTokenManagementKey()) {
		this.kmksalt = salt;
		soPIN = this.managementToken.deriveSOPIN(this.id, this.kmksalt).toString(HEX);
	}

	this.devcfg = {
		soPIN : soPIN
	}
}



KeyManager.prototype.setCard = function(card) {
	this.sc = new SmartCardHSM(card);
	this.ks = new HSMKeyStore(this.sc);

	var devAutCert = this.sc.readBinary(SmartCardHSM.C_DevAut);
	this.certchain = SmartCardHSM.validateCertificateChain(this.crypto, devAutCert);

	if (this.certchain == null) {
		throw new GPError("KeyManager", GPError.CRYPTO_FAILED, 0, "Device authentication failed");
	}

//	this.sc.openSecureChannel(this.crypto, this.certchain.publicKey);

	print("");

	var str = "";
	var mem = this.sc.getFreeMemory();
	if (mem > -1) {
		var str = "Free memory " + mem + " byte";
		if (mem == 32767) {
			str += " (at least)";
		}
	}

	if (typeof(this.sc.major) != "undefined") {
		print("SmartCard-HSM " + this.sc.getVersionInfo() + "          " + str);
	}

	print("Issuer Certificate : " + this.certchain.dica);
	print("Device Certificate : " + this.certchain.devicecert);
	print("Default Key Domain : " + this.certchain.publicKey.getComponent(Key.ECC_QX).toString(HEX));

	this.provisioningURL = this.sc.getProvisioningURL();
	if (this.provisioningURL) {
		print("Provisioning URL   : " + this.provisioningURL);
	}

	var tmkkcv = this.sc.getTokenManagementKeyKCV();
	if (tmkkcv) {
		var str = tmkkcv.toString(HEX);
		var kmksalt = this.sc.getTokenManagementKeySalt();
		if (kmksalt) {
			str += " (" + kmksalt.toString(HEX) + ")";
		}
		print("Token Managmnt Key : " + str);
	}

	// Some cards have a CHR in the device certificate that exceeds 16 bytes
	var chr = this.certchain.devicecert.getCHR();
	if (chr.toString().length > 16) {
		this.chr = new PublicKeyReference(chr.toString().substr(0, 16));
	} else {
		this.chr = chr;
	}

	if (this.certchain.dica) {
		this.id = "/" + this.certchain.dica.getCAR().getHolder() + "/" + this.certchain.dica.getCHR().getHolder() + "/" + chr.getHolder();
	}

	this.managePKA = new ManagePKA(this.sc, chr.getBytes());

	this.profileName = GPSystem.mapFilename(chr.getHolder() + ".profile.json", GPSystem.USR);

	this.hasProfile = false;			// We have a profile file for this device
	this.readProfile();

	if (!this.hasProfile) {
		this.determineSOPIN(kmksalt);
	}

	this.authenticationState = this.sc.queryUserPINStatus();

	this.createOutline();
}



KeyManager.prototype.promptAutoInsert = function(readerName) {
	if (!this.autoInsert) {
		if (Dialog.prompt("Automatically access card with Key Manager ?")) {
			this.autoInsert = true;
		} else {
			Card.setCardEventListener();		// Remove event listener
			return false;
		}
	}
	return true;
}



KeyManager.prototype.cardInserted = function(readerName) {
	if (!this.promptAutoInsert()) {
		return;
	}

	GPSystem.trace("Inserted: " + readerName);
	var card = new Card(readerName);
	this.setCard(card);
}



KeyManager.prototype.cardRemoved = function(readerName) {
	GPSystem.trace("Removed: " + readerName);

	var listener = this.cardRemovedListener[readerName];
	if (listener) {
		delete this.cardRemovedListener[readerName];
		listener.cardRemoved();
	} else {
		this.view = new OutlineNode("Please insert card");
		this.view.show();
	}
}



KeyManager.prototype.setCardRemovedListener = function(readerName, listener) {
	if (listener) {
		this.cardRemovedListener[readerName] = listener;
	} else {
		delete this.cardRemovedListener[readerName];
	}
}



KeyManager.prototype.populateAuthentication = function() {
	this.authview = new OutlineNode("User Authentication");
	this.authview.setUserObject(this);
	this.view.insert(this.authview);

	var pinsw = this.sc.queryUserPINStatus();
	this.updateAuthenticationStatus(pinsw);

	this.populatePKAStatus();

	this.sopinview = new OutlineNode("SO-PIN");
	this.sopinview.setUserObject(this);
	this.view.insert(this.sopinview);

	this.updateSOPINStatus();

	pinsw = this.sc.queryPINStatus(0x85);
	if ((pinsw != 0x6A88) && (pinsw != 0x6A86)) {
		this.bio1view = new OutlineNode(SmartCardHSM.describePINStatus(pinsw, "Biometric Feature 1"));
		this.bio1view.setUserObject(this);
		this.bio1view.setContextMenu( [ KeyManager.LOGIN_WITH_USER_BIO1, KeyManager.LOGOUT ] );
		this.view.insert(this.bio1view);
	}

	pinsw = this.sc.queryPINStatus(0x86);
	if ((pinsw != 0x6A88) && (pinsw != 0x6A86)) {
		this.bio2view = new OutlineNode(SmartCardHSM.describePINStatus(pinsw, "Biometric Feature 2"));
		this.bio2view.setUserObject(this);
		this.bio2view.setContextMenu( [ KeyManager.LOGIN_WITH_USER_BIO2, KeyManager.LOGOUT ] );
		this.view.insert(this.bio2view);
	}

}



KeyManager.prototype.changedAuthenticationStatus = function(sw) {
	if (((this.authenticationState == 0x9000) && (sw != 0x9000)) ||
	    ((this.authenticationState != 0x9000) && (sw == 0x9000))) {
		this.authenticationState = sw;
		this.createOutline();
	} else {
		this.authenticationState = sw;
		this.updateAuthenticationStatus(sw);
	}
}



KeyManager.prototype.populatePKAStatus = function() {
	if (this.managePKA.isActive()) {
		this.pkaview = new OutlineNode("Public Key Authentication");
		this.pkaview.setUserObject(this);

		this.view.insert(this.pkaview);

		if (this.managePKA.canEnumeratePublicKeys()) {
			for (var i = 0; i < this.managePKA.getNumberOfPublicKeys(); i++) {
				var node = new OutlineNode("");
				node.setUserObject(this);
				node.id = i;
				node.setContextMenu( [ KeyManager.REPLACE_PUBLIC_KEY ] );
				this.pkaview.insert(node);
			}
		}
		this.updatePKAStatus();
	}
}



KeyManager.prototype.updatePKAStatus = function() {
	var str = this.managePKA.describeStatus();
	if (this.managePKA.getMissingPublicKeys()) {
		var contextMenu = [ KeyManager.REGISTER_PUBLIC_KEY ];
	} else {
		var contextMenu = [ KeyManager.AUTHENTICATE_PUBLIC_KEY, KeyManager.LOGOUT ];
	}
	this.pkaview.setContextMenu(contextMenu);
	this.pkaview.setLabel(str);

	if (this.pkaview.childs.length > 0) {
		var pklist = this.managePKA.enumeratePublicKeys();
		for (var i = 0; i < pklist.length; i++) {
			var pk = pklist[i];
			switch(pk.status) {
				case ManagePKA.KEY_PRESENT:
					var str = pk.chr.toString(ASCII);
					break;
				case ManagePKA.KEY_NOT_FOUND:
					var str = "No key registered yet";
					break;
				case ManagePKA.KEY_ALREADY_AUTHENTICATED:
					var str = pk.chr.toString(ASCII) + " (authenticated)";
					break;
			}

			var node = this.pkaview.childs[i];
			node.setLabel(str);
		}
	}
}



KeyManager.prototype.updateAuthenticationStatus = function(sw) {
	var str = SmartCardHSM.describePINStatus(sw, "User PIN");

	if (sw == 0x9000) {
		var contextMenu = [ KeyManager.LOGOUT, KeyManager.CHANGE_PIN ];
	} else if (sw == 0x6A88) {
		var contextMenu = [ ];
	} else if (sw == 0x6983) {
		var contextMenu = [ ];
		if (this.sc.isResetRetryCounterEnabled()) {
			contextMenu.push(KeyManager.UNBLOCK_PIN);
			if (this.sc.isPINResetEnabled()) {
				contextMenu.push(KeyManager.RESET_PIN);
			}
		}
	} else {
		var contextMenu = [ KeyManager.LOGIN_WITH_USER_PIN,
					KeyManager.LOGIN_WITH_USER_PIN_PAD,
					KeyManager.CHANGE_PIN,
					KeyManager.UNBLOCK_PIN,
					KeyManager.RESET_PIN,
					KeyManager.LOGOUT
 					];
	}

	this.authview.setContextMenu(contextMenu);
	this.authview.setLabel(str);
}



KeyManager.prototype.updateSOPINStatus = function() {
	var sopinsw = this.sc.queryInitializationCodeStatus();
	var str = SmartCardHSM.describePINStatus(sopinsw, "SO PIN");
	this.sopinview.setContextMenu([ KeyManager.CHANGE_SOPIN ]);
	this.sopinview.setLabel(str);
}



KeyManager.prototype.updateBioMatchStatus = function() {
	if (this.bio1view) {
		var sw = this.sc.queryPINStatus(0x85);
		var str = SmartCardHSM.describePINStatus(sw, "Biometric Feature 1");
		this.bio1view.setLabel(str);
	}

	if (this.bio2view) {
		var sw = this.sc.queryPINStatus(0x86);
		var str = SmartCardHSM.describePINStatus(sw, "Biometric Feature 2");
		this.bio2view.setLabel(str);
	}
}



KeyManager.prototype.populateKeyDomains = function() {
	var kdid = 0;
	this.keydomains = [];

	do	{
		var status = this.sc.queryKeyDomainStatus(kdid);
		if ((status.sw == 0x6D00) || (status.sw == 0x6A86)) {
			return;
		}

		status.label = this.sc.getKeyDomainLabel(kdid);

		var node = new OutlineNode("Key Domain");
		node.kdid = kdid;
		node.setUserObject(this);
		this.view.insert(node);
		var dom = { kdid: kdid, status: status, node: node };
		this.keydomains.push(dom);
		this.updateKeyDomainStatus(kdid, status);

		for (var i = 0; i < this.plugins.length; i++) {
			var plugin = this.plugins[i].instance;
			if (plugin.addKeyDomainInformation) {
				plugin.addKeyDomainInformation(dom);
			}
		}

		kdid++;
	} while ((status.sw == 0x9000) || (status.sw == 0x6A88));
}



KeyManager.prototype.updateKeyDomainStatus = function(kdid, status) {
	var dom = this.keydomains[kdid];
	var node = dom.node;
	dom.status = status;

	var contextMenu = [ ];

	var str;
	if (status.sw == 0x6A88) {
		str = "Key domain " + kdid + " not created";
		contextMenu.push( KeyManager.CREATE_DKEK_DOMAIN );
		contextMenu.push( KeyManager.CREATE_XKEK_DOMAIN );
	} else {
		if (this.authenticationState == 0x9000) {
			var contextMenu = [ KeyManager.GENERATE_RSA_KEY, KeyManager.GENERATE_ECC_KEY, KeyManager.GENERATE_AES_KEY ];
		}

		if (typeof(status.keyDomain) != "undefined" ) {
			str = "XKEK with KCV " + status.kcv.toString(HEX) + " in key domain " + status.keyDomain.left(8).toString(HEX);
			contextMenu.push( KeyManager.CREATE_EXCHANGE_KEY, KeyManager.ASSOCIATE_XKEK_DOMAIN );
		} else {
			if (status.outstanding == 0) {
				str = "DKEK with KCV " + status.kcv.toString(HEX);
			} else {
				str = "DKEK set-up in progress with " + status.outstanding + " of " + status.shares + " shares missing";
				contextMenu.push( KeyManager.IMPORT_DKEK_SHARE );
			}
		}

		if (status.label) {
			str += " (" + status.label + ")";
		}

		contextMenu.push( KeyManager.DELETE_KEK );
		contextMenu.push( KeyManager.DELETE_KEY_DOMAIN );
	}


	for (var i = 0; i < this.plugins.length; i++) {
		var plugin = this.plugins[i].instance;
		if (plugin.addKeyDomainContextMenu) {
			plugin.addKeyDomainContextMenu(contextMenu, this.authenticationState, dom);
		}
	}

	dom.node.setContextMenu(contextMenu);
	dom.node.setLabel(str);
}



KeyManager.prototype.createDKEKDomain = function(node) {
	var shares = 0;
	var str = Dialog.prompt(KeyManager.DKEK_NO_OF_SHARES, "1");
	if (str == null) {
		return;
	}

	var shares = parseInt(str);

	var str = Dialog.prompt(KeyManager.KEY_DOMAIN_LABEL, "");
	if (str == null) {
		return;
	}

	var status = this.sc.createDKEKKeyDomain(node.kdid, shares, str);
	if (status.sw == 0x9000) {
		this.updateKeyDomainStatus(node.kdid, status);
	} else {
		print("Creating DKEK key domain failed with SW1/2=" + status.sw.toString(HEX));
	}
}



KeyManager.prototype.createXKEKDomain = function(node) {
	var fname = Dialog.prompt("Enter name for file containing key domain membership", this.lastfile, null, "*.kdm");

	if (fname == null) {
		return null;
	}

	var f = new File(fname);
	var chain = f.readAllAsBinary();
	f.close();

	if (chain.byteAt(0) != 0x30) {
		throw new GPError("KeyManager", GPError.INVALID_DATA, 0, "File does not contain a key domain membership");
	}

	var a = new ASN1(chain);
//	print(a);
	var oid = new ByteString("CardContact 4 2 1", OID);
	assert(a.get(0).value.equals(oid), "Invalid file format");
	var groupkey = new CVC(a.find(0x63).get(0));
	var devcert = new CVC(a.find(0x62).get(0));
	var dicacert = new CVC(a.find(0x61).get(0));
	var kdm = a.find(0x53);
	if (kdm == null) {
		var kdm = a.find(0x54).getBytes();
	} else {
		kdm = kdm.getBytes();
	}

	var root = SmartCardHSM.rootCerts[dicacert.getCAR()];
	assert(dicacert.verifyWithCVC(this.crypto, root));
	assert(devcert.verifyWith(this.crypto, dicacert.getPublicKey(root.getPublicKey()), dicacert.getPublicKeyOID()));
	assert(groupkey.verifyATWith(this.crypto, devcert.getPublicKey(root.getPublicKey()), devcert.getPublicKeyOID()));

	this.lastfile = fname;

	this.sc.verifyCertificate(dicacert);
	this.sc.verifyCertificate(devcert);

	var status = this.sc.createXKEKKeyDomain(node.kdid, groupkey, kdm);

	if (status.sw == 0x9000) {
		this.updateKeyDomainStatus(node.kdid, status);
	} else {
		print("Creating XKEK key domain failed with SW1/2=" + status.sw.toString(HEX));
	}
}



KeyManager.prototype.associateXKEKDomain = function(node) {
	var fname = Dialog.prompt("Enter name for file containing key domain association", this.lastfile, null, "*.kda");

	if (fname == null) {
		return null;
	}

	var f = new File(fname);
	var chain = f.readAllAsBinary();
	f.close();

	if (chain.byteAt(0) != 0x30) {
		throw new GPError("KeyManager", GPError.INVALID_DATA, 0, "File does not contain a key domain association");
	}

	var a = new ASN1(chain);
//	print(a);
	var oid = new ByteString("CardContact 4 4 1", OID);
	assert(a.get(0).value.equals(oid), "Invalid file format");
	var groupkey = new CVC(a.find(0x63).get(0));
	var devcert = new CVC(a.find(0x62).get(0));
	var dicacert = new CVC(a.find(0x61).get(0));
	var assdomainuid = a.find(0x51).getBytes();
	var kda = a.find(0x56).getBytes();

	var root = SmartCardHSM.rootCerts[dicacert.getCAR()];
	assert(dicacert.verifyWithCVC(this.crypto, root));
	assert(devcert.verifyWith(this.crypto, dicacert.getPublicKey(root.getPublicKey()), dicacert.getPublicKeyOID()));
	assert(groupkey.verifyATWith(this.crypto, devcert.getPublicKey(root.getPublicKey()), devcert.getPublicKeyOID()));

	this.lastfile = fname;

	this.sc.verifyCertificate(dicacert);
	this.sc.verifyCertificate(devcert);

	var status = this.sc.associateXKEKKeyDomain(node.kdid, groupkey, assdomainuid, kda);

	if (status.sw == 0x9000) {
		this.updateKeyDomainStatus(node.kdid, status);
		print("Association established");
	} else {
		print("Associating XKEK key domain failed with SW1/2=" + status.sw.toString(HEX));
	}
}



KeyManager.prototype.groupSignerOperation = function(node) {
	var sigform = [ KeyManager.SIGFORM_KDM, KeyManager.SIGFORM_KDA, KeyManager.SIGFORM_KDM3 ];
	var format = Dialog.prompt("Select signature format", sigform[0], sigform);

	if (format == null) {
		return;
	}

	if (format == KeyManager.SIGFORM_KDA) {
		this.signKeyDomainAssociation(node, format);
	} else {
		this.signKeyDomainMembership(node, format);
	}
}



KeyManager.prototype.signKeyDomainMembership = function(node, format) {

	var fname = Dialog.prompt("Enter file name for device id", this.lastfile, null, "*.id");

	if (fname == null) {
		return null;
	}

	var f = new File(fname);
	var chain = f.readAllAsBinary();
	f.close();

	if (chain.byteAt(0) != 0x30) {
		throw new GPError("KeyManager", GPError.INVALID_DATA, 0, "File does not contain a device id");
	}

	var a = new ASN1(chain);
//	print(a);
	var oid = new ByteString("CardContact 4 1 1", OID);
	assert(a.get(0).value.equals(oid), "Invalid file format");
	var devcert = new CVC(a.find(0x62).get(0));
	var dicacert = new CVC(a.find(0x61).get(0));

	var root = SmartCardHSM.rootCerts[dicacert.getCAR()];
	assert(dicacert.verifyWithCVC(this.crypto, root));
	assert(devcert.verifyWith(this.crypto, dicacert.getPublicKey(root.getPublicKey()), dicacert.getPublicKeyOID()));

	this.lastfile = fname;

	var cert = new CVC(node.cert);
	var pk = cert.getPublicKey();
	var domainuid = pk.getComponent(Key.ECC_QX);

	var ok = Dialog.prompt("Add device " + devcert.getCHR() + " to key domain " + domainuid.toString(HEX) + " (Cancel for No) ?");
	if (ok == null) {
		print("User abort");
		return;
	}

	var key = node.parent.key;

	if (format == KeyManager.SIGFORM_KDM3) {
		var input = devcert.getPublicKey().getComponent(Key.ECC_QX);
	} else {
		var input = ByteString.valueOf(0x54).concat(devcert.getPublicKey().getComponent(Key.ECC_QX));
	}

	print("Input : " + input);

	var crypto = this.sc.getCrypto();

	var signature = crypto.sign(key, Crypto.ECDSA_SHA256, input);
	signature = CVC.unwrapSignature(signature, key.getSize() + 7 >> 3);

	if (format == KeyManager.SIGFORM_KDM3) {
		signature = new ASN1(0x53, signature);
	} else {
		signature = new ASN1(0x54, signature);
	}

	var dica;
	var devicecert;
	if (node.cvclist.length == 1) {
		dica = this.certchain.dica;
		devicecert = this.certchain.devicecert;
	} else {
		dica = node.cvclist[2];
		devicecert = node.cvclist[1];
	}

	var asn = new ASN1(ASN1.SEQUENCE,
			new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("CardContact 4 2 1", OID)),
			new ASN1(0x61, dica.getASN1()),
			new ASN1(0x62, devicecert.getASN1()),
			new ASN1(0x63, cert.getASN1()),
			signature
	);

	print(asn);

	var fname = fname.substr(0, fname.lastIndexOf(".")) + "-" + domainuid.toString(HEX) + ".kdm";

	var f = new File(fname);
	f.writeAll(asn.getBytes());
	f.close();
	print("Key Domain Membership written to " + fname);
}



KeyManager.prototype.signKeyDomainAssociation = function(node, format) {

	var fname = Dialog.prompt("Enter file name for any key domain membership", this.lastfile, null, "*.kdm");

	if (fname == null) {
		return null;
	}

	var f = new File(fname);
	var chain = f.readAllAsBinary();
	f.close();

	if (chain.byteAt(0) != 0x30) {
		throw new GPError("KeyManager", GPError.INVALID_DATA, 0, "File does not contain a device id");
	}

	var a = new ASN1(chain);
//	print(a);
	var oid = new ByteString("CardContact 4 2 1", OID);
	assert(a.get(0).value.equals(oid), "Invalid file format");
	var gscert = new CVC(a.find(0x63).get(0));
	var devcert = new CVC(a.find(0x62).get(0));
	var dicacert = new CVC(a.find(0x61).get(0));
	var root = SmartCardHSM.rootCerts[dicacert.getCAR()];
	assert(dicacert.verifyWithCVC(this.crypto, root));
	assert(devcert.verifyWith(this.crypto, dicacert.getPublicKey(root.getPublicKey()), dicacert.getPublicKeyOID()));
	assert(gscert.verifyATWith(this.crypto, devcert.getPublicKey(root.getPublicKey()), devcert.getPublicKeyOID()));

	this.lastfile = fname;

	var cert = new CVC(node.cert);
	var pk = cert.getPublicKey();
	var domainuid = pk.getComponent(Key.ECC_QX);
	var pk = gscert.getPublicKey();
	var assdomainuid = pk.getComponent(Key.ECC_QX);

	var ok = Dialog.prompt("Associate key domain " + assdomainuid.toString(HEX) + " with this key domain " + domainuid.toString(HEX) + " (Cancel for No) ?");
	if (ok == null) {
		print("User abort");
		return;
	}

	var key = node.parent.key;

	var input = ByteString.valueOf(0x56).concat(assdomainuid);

	print("Input : " + input);

	var crypto = this.sc.getCrypto();

	var signature = crypto.sign(key, Crypto.ECDSA_SHA256, input);
	signature = CVC.unwrapSignature(signature, key.getSize() + 7 >> 3);

	signature = new ASN1(0x56, signature);

	var dica;
	var devicecert;
	if (node.cvclist.length == 1) {
		dica = this.certchain.dica;
		devicecert = this.certchain.devicecert;
	} else {
		dica = node.cvclist[2];
		devicecert = node.cvclist[1];
	}

	var asn = new ASN1(ASN1.SEQUENCE,
			new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("CardContact 4 4 1", OID)),
			new ASN1(0x61, dica.getASN1()),
			new ASN1(0x62, devicecert.getASN1()),
			new ASN1(0x63, cert.getASN1()),
			new ASN1(0x51, assdomainuid),
			signature
	);

	print(asn);

	var fname = fname.substr(0, fname.lastIndexOf("/") + 1) + assdomainuid.toString(HEX) + "-" + domainuid.toString(HEX) + ".kda";

	var f = new File(fname);
	f.writeAll(asn.getBytes());
	f.close();
	print("Key Domain Association written to " + fname);
}



KeyManager.prototype.createExchangeKey = function(node) {
	var kdid = node.kdid;

	var dom = new Key();
	dom.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));

	var label = Dialog.prompt(KeyManager.ENTER_KEY_LABEL, "");
	if (label == null) {
		return;
	}

	if (this.sc.getKey(label)) {
		Dialog.prompt(KeyManager.KEY_LABEL_EXISTS);
		return;
	}

	var spec = new SmartCardHSMKeySpecGenerator(Crypto.EC, dom);

	spec.setKeyDomain(kdid);
	spec.setAlgorithms(ByteString.valueOf(SmartCardHSM.ALG_ECDHXKEK));
	spec.setCHR(this.chr);
	spec.setInnerCAR(this.chr);

	print(KeyManager.GENERATING_KEY);
	var req = this.ks.generateKeyPair(label, spec);
	this.ks.storeEndEntityCertificate(label, req);

	print(KeyManager.GENERATING_KEY_DONE);
	this.createOutline();
}



KeyManager.prototype.deriveXKEK = function(node) {
	var fname = Dialog.prompt("Enter name for file containing peer public key", this.lastfile, null, "*.pka");

	if (fname == null) {
		return null;
	}

	var f = new File(fname);
	var chain = f.readAllAsBinary();
	f.close();

	if (chain.byteAt(0) != 0x30) {
		throw new GPError("KeyManager", GPError.INVALID_DATA, 0, "File does not contain an authenticated public key");
	}

	var a = new ASN1(chain);
	print(a);
	var oid = new ByteString("CardContact 4 3 1", OID);
	assert(a.get(0).value.equals(oid), "Invalid file format");
	var peerkey = new CVC(a.find(0x63).get(0));
	var devcert = new CVC(a.find(0x62).get(0));
	var dicacert = new CVC(a.find(0x61).get(0));

	var root = SmartCardHSM.rootCerts[dicacert.getCAR()];
	assert(dicacert.verifyWithCVC(this.crypto, root));
	assert(devcert.verifyWith(this.crypto, dicacert.getPublicKey(root.getPublicKey()), dicacert.getPublicKeyOID()));
	assert(peerkey.verifyATWith(this.crypto, devcert.getPublicKey(root.getPublicKey()), devcert.getPublicKeyOID()));

	this.lastfile = fname;

	this.sc.verifyCertificate(dicacert);
	this.sc.verifyCertificate(devcert);

	this.sc.deriveXKEK(node.parent.key.getId(), peerkey, new ByteString("DerivationParam", ASCII));

	var status = this.sc.queryKeyDomainStatus(node.parent.parent.kdid);
	this.updateKeyDomainStatus(node.parent.parent.kdid, status);
}



KeyManager.prototype.deleteKEK = function(node) {
	var status = this.sc.deleteKEK(node.kdid);
	if (status.sw == 0x9000) {
		this.updateKeyDomainStatus(node.kdid, status);
	} else {
		print("Deleting KEK failed with SW1/2=" + status.sw.toString(HEX));
	}
}



KeyManager.prototype.deleteDomain = function(node) {
	var status = this.sc.deleteKeyDomain(node.kdid);
	this.updateKeyDomainStatus(node.kdid, { sw: 0x6A88 });

	for (var i = 0; i < this.plugins.length; i++) {
		var plugin = this.plugins[i].instance;
		if (plugin.deleteKeyDomain) {
			plugin.deleteKeyDomain(node);
		}
	}
}



KeyManager.prototype.login = function() {
	var pin = Dialog.prompt(KeyManager.ENTER_USER_PIN, this.devcfg.userPIN ? this.devcfg.userPIN : "*");
	if (pin == null) {
		return;
	}

	var sw = this.sc.verifyUserPIN(new ByteString(pin, ASCII));

	if (sw == 0x6700) {
		print("Wrong PIN length, try again");
	} else {
		this.changedAuthenticationStatus(sw);
	}
}



KeyManager.prototype.loginPinPAD = function() {
	var cs = this.sc.getNativeCardService();
	cs.useClassThreePinPad(true);

	var sw = this.sc.verifyUserPIN();
	this.changedAuthenticationStatus(sw);
}



KeyManager.prototype.loginBioMatch = function(p2) {
	this.sc.card.sendSecMsgApdu(Card.ALL, 0x80, 0x20, 0x00, p2, new ByteString("7F2400", HEX));
//	this.sc.card.sendSecMsgApdu(Card.ALL, 0x80, 0x20, 0x00, p2, new ByteString("7F 2E 81 93 81 81 90 24 00 5F 15 08 61 07 27 68 17 2E 40 12 3D 40 33 3F 78 3E 48 98 4B 4A 76 1F 50 A1 44 5C B5 0F 5D 48 3A 5E 74 2D 5F 73 16 60 6F 07 62 4C 00 63 6F 27 63 72 63 64 B3 4A 69 95 48 73 B4 31 7E 70 14 88 91 19 8C 8E 2E 8E 6F 35 96 71 2B 97 6E 01 98 77 62 99 77 4B 9A 76 3D 9B 74 10 9E 55 19 A3 92 37 A4 B1 1C A5 50 17 AB 57 25 AE 4E 38 AE 72 47 AE 55 19 B4 5B 24 B5 51 3F B6 5C 2E B9 86 53 BA 9C 1B BC 5D 33 BD 61 4D BD 5D 24 BF 9D 1E C3 60", HEX));
	var sw = this.sc.queryUserPINStatus();
	this.changedAuthenticationStatus(sw);
	this.updateBioMatchStatus();
}



KeyManager.prototype.logout = function() {
	this.sc.logout();
	var card = new Card(_scsh3.reader);
	this.setCard(card);
}



KeyManager.prototype.promptNewPIN = function(pintype, usedefault) {
	switch(pintype) {
		case 1:
			var name = "SO-PIN";
			var pin = this.devcfg.soPIN ? this.devcfg.soPIN : usedefault ? "3537363231383830" : "*";
			break;
		case 2:
			var name = "User-PIN";
			var pin = this.devcfg.userPIN ? this.devcfg.userPIN : usedefault ? "648219" : "*";
			break;
		case 3:
			var name = "Transport-PIN";
			var pin = this.devcfg.transportPIN ? this.devcfg.transportPIN : usedefault ? "835212" : "*";
			break;
		default:
			throw new Error("Invalid argument");
	}

	while(true) {
		var oldpin = pin == "*" ? "" : pin;
		pin = Dialog.prompt("Enter new " + name + " (leave empty to generate random PIN)", pin);
		if (pin == null) {
			return;
		}
		if (pin.length == 0) {
			var rnd = this.sc.generateRandom(8);
			if (pintype == 1) {
				pin = rnd.toString(HEX);
			} else {
				pin = this.decimalize(rnd.bytes(0,8), 6);
			}
			continue;
		}
		if (pintype == 1) {
			var valid = false;
			try	{
				new ByteString(pin, HEX);
				valid = true;
			}
			catch(e) {};

			if (!valid || pin.length != 16) {
				var ok = Dialog.prompt("SO-PIN must be a 16 digit hexadecimal string. Try again ?");
				if (ok == null) {
					return;
				}
				continue;
			}
		} else {
			if ((pin.length < 6) || (pin.length > 16)) {
				var ok = Dialog.prompt("PIN must be between 6 and 16 characters. Try again ?");
				if (ok == null) {
					return;
				}
				continue;
			}
		}

		if (!pin.equals(oldpin)) {
			var pin2 = Dialog.prompt("Repeat new " + name, "*");
			if (pin2 == null) {
				return;
			}

			if (!pin.equals(pin2)) {
				var ok = Dialog.prompt("First new PIN does not match second new PIN. Try again ?");
				if (ok == null) {
					return;
				}
				pin = "*";
				continue;
			}
		}
		break;
	}

	return pin;
}



KeyManager.prototype.changeSOPIN = function(sopin, random) {
	var def = this.devcfg.soPIN ? this.devcfg.soPIN : "*";

	var str = Dialog.prompt("Enter current SO-PIN", def);

	if (str == null) {
		return;
	}

	var oldpin = str;

	newpin = this.promptNewPIN(1, false);

	if (!newpin) {
		return;
	}

	try	{
		this.sc.changeInitializationCode(new ByteString(oldpin, HEX), new ByteString(newpin, HEX));
		print("SO-PIN changed");

		if (this.hasProfile) {
			if (Dialog.prompt("Update profile on disk with changed SO-PIN (Cancel for No) ?")) {
				if (this.devcfg.soPIN) {
					this.devcfg.soPIN = newpin;
				}
			} else {
				delete this.devcfg.soPIN;
			}
			this.writeProfile();
		} else {
			if (Dialog.prompt("Keep a profile on disk to save the SO-PIN (Cancel for No) ?")) {
				this.devcfg.soPIN = newpin;
				this.writeProfile();
			}
		}
	}
	catch(e) {
		print("PIN change failed : " + e);
	}

	this.updateSOPINStatus();
}



KeyManager.prototype.changePIN = function() {
	var def = this.devcfg.userPIN ? this.devcfg.userPIN : "*";

	var str = Dialog.prompt("Enter current PIN", def);

	if (str == null) {
		return;
	}

	var oldpin = str;

	newpin = this.promptNewPIN(2, false);

	if (!newpin) {
		return;
	}

	try	{
		this.sc.changeUserPIN(new ByteString(oldpin, UTF8), new ByteString(newpin, UTF8));
		var sw = this.sc.card.SW;
		print("PIN changed");

		if (this.hasProfile) {
			if (Dialog.prompt("Update profile on disk with changed PIN (Cancel for No) ?")) {
				if (this.devcfg.userPIN) {
					this.devcfg.userPIN = newpin;
				}
			} else {
				delete this.devcfg.userPIN;
			}
			this.writeProfile();
		}
	}
	catch(e) {
		print("PIN change failed : " + e);
		var sw = this.sc.queryUserPINStatus();
	}

	this.changedAuthenticationStatus(sw);
}



KeyManager.prototype.unblockPIN = function(withReset) {
	var sopin = Dialog.prompt("Enter Initialization Code (SO-PIN)", this.devcfg.soPIN ? this.devcfg.soPIN : "*");

	if (sopin == null) {
		return;
	}

	sopin = new ByteString(sopin, HEX);
	pin = null;

	if (withReset) {
		var newpin = this.promptNewPIN(2, false);

		if (newpin == null) {
			return;
		}

		pin = new ByteString(newpin, UTF8);
	}

	try	{
		this.sc.unblockUserPIN(sopin, pin);
		print(withReset ? "PIN reset" : "PIN unblocked");

		if (this.hasProfile && withReset) {
			if (Dialog.prompt("Update profile on disk with changed PIN (Cancel for No) ?")) {
				this.devcfg.userPIN = newpin;
			} else {
				delete this.devcfg.userPIN;
			}
			this.writeProfile();
		}
	}
	catch(e) {
		if (this.sc.card.SW == 0x6D00) {
			print("PIN unblock not allowed");
		} else {
			print("PIN unblock failed : " + e);
		}
	}

	this.updateSOPINStatus();
	this.updateAuthenticationStatus(this.sc.queryUserPINStatus());
}



KeyManager.prototype.populateKeys = function() {
	this.sc.enumerateKeys();
	var keys = this.sc.getKeys();
	for (var i = 0; i < keys.length; i++) {
		this.addKey(keys[i]);
	}
}



KeyManager.prototype.addEECertificate = function(keynode, key) {
	if (!this.ks.hasCertificate(key)) {
		return;
	}

	var cert = this.ks.getCertificate(key);

	if (cert.length < 16) {
		print("Does not seem to be a certificate(" + key.getLabel() + ")");
		return;
	}

	if (cert.byteAt(0) == 0x30) {
		var x509 = new X509(cert);
		var label = x509.getSubjectDNString();
		var asn = new ASN1(cert);
		var contextmenu = [];
	} else {
		var cvclist = SmartCardHSM.parseCertificateList(cert);

		var cvc = cvclist[0];
		var label = cvc.toString();
		cvc.decorate();
		var asn = cvc.getASN1();

		if (CVC.isECDSA(cvc.getPublicKeyOID())) {
			var contextmenu = [ KeyManager.EXPORT_PUBLIC_KEY ];

			if (this.authenticationState == 0x9000) {
				contextmenu.push(KeyManager.SIGN_KEY_DOMAIN_MEMBERSHIP);
				contextmenu.push(KeyManager.DERIVE_XKEK);
			}
		} else {
			var contextmenu = [ KeyManager.GENERATE_PKCS10 ];
		}
	}

	contextmenu.push(KeyManager.IMPORT_CERTIFICATE);
	contextmenu.push(KeyManager.EXPORT_CERTIFICATE);
	contextmenu.push(KeyManager.DUMP_CERTIFICATE);

	var certnode = new OutlineNode(label);
	certnode.setUserObject(this);
	certnode.setContextMenu(contextmenu);
	certnode.setIcon("certificate");
	certnode.cert = cert;
	if (cvclist) {
		certnode.cvclist = cvclist;
	}

	certnode.insert(asn);

	keynode.insert(certnode);

	if ((cert.byteAt(0) == 0x67) || (cert.byteAt(0) == 0x7F)) {
		for (var i = 1; i < cvclist.length; i++) {
			var cvc = cvclist[i];
			var label = cvc.toString();
			cvc.decorate();
			var asn = cvc.getASN1();

			var certnode = new OutlineNode(label);
			certnode.setIcon("certificate");
			certnode.cert = cvc.getBytes();

			certnode.insert(asn);

			keynode.insert(certnode);
		}
	}
}



KeyManager.prototype.addKey = function(key) {
	var label = key.getLabel() + " (" + key.getId();
	var type = key.getType();
	if (type) {
		label += ", " + type;
	}
	var size = key.getSize();
	if (size) {
		label += "-" + size;
	}
	label += ")";
	var keynode = new OutlineNode(label);
	keynode.key = key;
	keynode.keylabel = label;
	keynode.setUserObject(this);
	keynode.setIcon("key");

	var pid = key.getPKCS15Id();
	if (pid) {
		var str = "Key Identifier: " + pid.toString(HEX);
		keynode.skidnode = new OutlineNode(str);
		keynode.insert(keynode.skidnode);
	}

	if (typeof(key.useCounter) != "undefined") {
		var str = "Key use counter: " + key.useCounter;
		keynode.usecounternode = new OutlineNode(str);
		keynode.insert(keynode.usecounternode);
	}

	if (key.algorithms) {
		var str = "Algorithms: " + SmartCardHSM.decodeAlgorithmList(key.algorithms);
		keynode.algorithmnode = new OutlineNode(str);
		keynode.insert(keynode.algorithmnode);
	}

	var contextMenu = [ ];
	for (var i = 0; i < this.plugins.length; i++) {
		var plugin = this.plugins[i].instance;
		if (plugin.addKeyContextMenu) {
			plugin.addKeyContextMenu(contextMenu, this.authenticationState, keynode);
		}
	}

	if (this.authenticationState == 0x9000) {
		contextMenu.push(KeyManager.EXPORT_KEY);
		contextMenu.push(KeyManager.DELETE_KEY);

		if (key.desc && (key.desc.tag == 0xA0)) {
			var a1 = key.desc.find(0xA1);
			if (a1.get(0).get(1).value.toUnsigned() == 528) {
				contextMenu.push(KeyManager.FIX_SECP521);
				print("Invalid key length encoding detected for key " + label + ". Fix available in context menu for key.");
			}
		}
	}
	keynode.setContextMenu(contextMenu);
	this.addEECertificate(keynode, key);

	if (typeof(key.keyDomain) == "undefined") {
		this.view.insert(keynode);
	} else {
		this.keydomains[key.keyDomain].node.insert(keynode);
	}

	for (var i = 0; i < this.plugins.length; i++) {
		var plugin = this.plugins[i].instance;
		if (plugin.addKeyInformation) {
			plugin.addKeyInformation(keynode);
		}
	}
}



KeyManager.prototype.populateCACertificates = function() {
	var certs = this.sc.enumerateCACertificates();
	for (var i = 0; i < certs.length; i++) {
		this.addCACertificate(certs[i], this.sc.getCACertificate(certs[i]));
	}
}



KeyManager.prototype.addCACertificate = function(label, cert) {
	var contextmenu = [];

	try	{
		if (cert.byteAt(0) == 0x30) {
			var x509 = new X509(cert);
			displabel = label + " (" + x509.getSubjectDNString() + ")";
			var asn = new ASN1(cert);
		} else {
			var cvc = new CVC(cert);
			displabel = label + " (" + cvc.toString() + ")";
			cvc.decorate();
			var asn = cvc.getASN1();
		}
	}
	catch(e) {
		print(cert);
		print(e);
		return;
	}

	contextmenu.push(KeyManager.EXPORT_CERTIFICATE);
	contextmenu.push(KeyManager.DUMP_CERTIFICATE);

	if (this.authenticationState == 0x9000) {
		contextmenu.push(KeyManager.DELETE_CACERTIFICATE);
	}

	var certnode = new OutlineNode(displabel);
	certnode.setUserObject(this);
	certnode.setContextMenu(contextmenu);
	certnode.setIcon("certificate");
	certnode.cert = cert;
	certnode.certlabel = label;

	certnode.insert(asn);

	this.view.insert(certnode);
}



KeyManager.prototype.deleteCACertificate = function(node) {
	this.ks.deleteCACertificate(node.certlabel);
	node.remove();
}



KeyManager.prototype.addDataObject = function(label, fid) {
	var contextmenu = [ KeyManager.EXPORT_DATAOBJECT, KeyManager.DELETE_DATAOBJECT ];

	var donode = new OutlineNode(label + " (" + fid.toString(HEX) + ")");
	donode.setUserObject( {
		expandListener: function(node) {
			node.bin = node.km.sc.readBinary(fid);
			var str = node.bin.left(256).toString(HEX);
			if (node.bin.length > 256) {
				str += "...";
			}
			node.childs[0].setLabel(str);
			if (node.childs[1] == undefined) {
				try	{
					var asn = new ASN1(node.bin);
					node.insert(asn);
				}
				catch(e) {};
			}
		},
		actionListener: function(node, action) {
			node.km.actionListener(node, action);
		}
	}
	);
	donode.setContextMenu(contextmenu);
	donode.setIcon("binary");
	donode.label = label;
	donode.km = this;
	donode.fid = fid;
	donode.insert(new OutlineNode("<Data>"));

	this.view.insert(donode);
}



KeyManager.prototype.populateDataObjects = function(node) {
	var dos = this.sc.enumerateDataObjects();
	for (var i = 0; i < dos.length; i++) {
		this.addDataObject(dos[i], this.sc.getDataObjectFileIdentifier(dos[i]));
	}
}



KeyManager.prototype.importDataObject = function(node) {

	while (true) {
		var label = Dialog.prompt("Enter label for data object", "");

		if (label == null) {
			return;
		}

		if (this.sc.enumerateDataObjects().indexOf(label) != -1) {
			Dialog.prompt("A data object with that label does already exist");
			continue;
		}
		break;
	}

	var options = [ "Import from file", "Enter hexadecimal" ];

	var opt = Dialog.prompt("Select input option", options[0], options);

	if (opt == null) {
		return;
	}

	if (opt == options[0]) {
		var fname = Dialog.prompt("Enter name of file to import", this.lastfile, null, "");

		if (fname == null) {
			return;
		}

		var f = new File(fname);
		var bin = f.readAllAsBinary();
		f.close();

		this.lastfile = fname;
	} else {
		var inp = Dialog.prompt("Enter hexadecimal input", "");
		if (inp == null) {
			return;
		}
		var bin = new ByteString(inp, HEX);
	}

	var options = [ "without authentication", "only after authentication" ];

	var mode = Dialog.prompt("Data object is readable", options[0], options);

	if (mode == null) {
		return;
	}

	var privObj = (mode == options[1]);

	this.sc.importDataObject(label, privObj, bin);

	this.addDataObject(label, this.sc.getDataObjectFileIdentifier(label));
}




KeyManager.prototype.exportDataObject = function(node) {
	if (typeof(node.bin) == "undefined") {
		print("Must expand node first");
		return;
	}

	var fname = Dialog.prompt("Enter name of file to export to", this.lastfile, null, "");

	if (fname == null) {
		return;
	}

	var f = new File(fname);
	f.writeAll(node.bin);
	f.close();

	print("Data object exported to " + fname);
}




KeyManager.prototype.deleteDataObject = function(node) {
	this.sc.deleteDataObject(node.label);
	node.remove();
}




KeyManager.prototype.createOutline = function() {
	print("Creating outline...");
	var isInitialized = this.sc.isInitialized();

	var id = this.certchain.devicecert.getCHR().toString();
	id = id.substr(0, id.length - 5);

	var label = this.sc.getLabel();
	if (!label) {
		label = "SmartCard-HSM";
	}

	var str = label + " (" + id + ")";

	if (!isInitialized) {
		str += " - Not initialized";
	}

	this.view = new OutlineNode(str);
	this.view.setUserObject(this);

	if (isInitialized) {
		if ((this.authenticationState == 0x9000) || this.initializedWithTransportPIN) {
			var contextMenu = [	KeyManager.GENERATE_RSA_KEY,
						KeyManager.GENERATE_ECC_KEY,
						KeyManager.GENERATE_AES_KEY,
						KeyManager.IMPORT_KEY,
						KeyManager.IMPORT_CERTIFICATE,
						KeyManager.IMPORT_PKCS12,
						KeyManager.IMPORT_AESKEY,
						KeyManager.IMPORT_DATAOBJECT ];
		} else {
			var contextMenu = [];
		}

		contextMenu.push( KeyManager.INITIALIZE );
		contextMenu.push( KeyManager.CREATE_DKEK_SHARE );
		contextMenu.push( KeyManager.EXPORT_ID );

		if (this.provisioningURL) {
			contextMenu.push( KeyManager.REMOTE_UPDATE );
		}

		for (var i = 0; i < this.plugins.length; i++) {
			var plugin = this.plugins[i].instance;
			if (plugin.addDeviceContextMenu) {
				plugin.addDeviceContextMenu(contextMenu, isInitialized, this.authenticationState);
			}
		}

		this.view.setContextMenu(contextMenu);
		this.populateAuthentication();
		this.populateKeyDomains();
		this.populateKeys();
		this.populateCACertificates();
		this.populateDataObjects();
	} else {
		this.view.setContextMenu([	KeyManager.GENERATE_PIN,
						KeyManager.INITIALIZE ]);
	}

	this.view.show();
}



KeyManager.prototype.exportPublicKey = function(certnode) {
	var cert = new ASN1(certnode.cert);

	assert(cert.tag == 0x67, "Invalid certificate form. Is not an authenticated public key");

	var asn = new ASN1(ASN1.SEQUENCE,
			new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("CardContact 4 3 1", OID)),
			new ASN1(0x61, this.certchain.dica.getASN1()),
			new ASN1(0x62, this.certchain.devicecert.getASN1()),
			new ASN1(0x63, cert)
	);

	print(asn);

	var fname = GPSystem.mapFilename(this.certchain.devicecert.getCHR().toString() + "-" + certnode.parent.key.getLabel() + ".pka", GPSystem.USR);

	var fname = Dialog.prompt("Enter file name for public key export", fname, null, "*.pka");

	if (fname == null) {
		return;
	}

	var f = new File(fname);
	f.writeAll(asn.getBytes());
	f.close();

	print("Public key exported to " + fname);
}



KeyManager.prototype.exportDeviceId = function() {
	var asn = new ASN1(ASN1.SEQUENCE,
			new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("CardContact 4 1 1", OID)),
			new ASN1(0x61, this.certchain.dica.getASN1()),
			new ASN1(0x62, this.certchain.devicecert.getASN1())
		    );

//	print(asn);

	var fname = GPSystem.mapFilename(this.certchain.devicecert.getCHR().toString() + ".id", GPSystem.USR);

	var fname = Dialog.prompt("Enter file name for device id", fname, null, "*.id");

	if (fname == null) {
		return;
	}

	var f = new File(fname);
	f.writeAll(asn.getBytes());
	f.close();

	print("Device Id exported to " + fname);
}



KeyManager.prototype.generatePKCS10 = function(certnode) {
	var cert = new CVC(certnode.cert);

	var dn = Dialog.prompt("Enter Distinguished Name (DN) for PKCS#10 request", "c=UT,o=ACME,cn=Joe Doe");

	if (dn == null) {
		return;
	}

	var subject = PKIXCommon.parseDN(dn);

	var gen = new PKCS10Generator(this.sc.getCrypto());

	gen.setSignatureAlgorithm(Crypto.RSA_SHA256);

	gen.setSubject(subject);

	gen.setPublicKey(cert.getPublicKey());

	var req = gen.generateCertificationRequest(certnode.parent.key);

	var fname = GPSystem.mapFilename("req_" + certnode.parent.keylabel + ".pem", GPSystem.USR);

	var fname = Dialog.prompt("Enter file name for PKCS#10 request", fname, null, "*.pem");

	if (fname == null) {
		return;
	}

	var f = new File(fname);
	if (fname.substr(-3) == "pem") {
		f.writeAll(PKIXCommon.toPEM("CERTIFICATE REQUEST", req.getBytes()));
	} else {
		f.writeAll(req.getBytes());
	}
	f.close();

	print("PKCS#10 Request written to " + fname);
}



KeyManager.prototype.importCertificate = function(certnode) {
	var fname = Dialog.prompt("Enter file name of certificate", this.lastfile, null, "*.pem");

	if (fname == null) {
		return null;
	}

	var f = new File(fname);
	var bin = f.readAllAsBinary();
	f.close();

	if (bin.byteAt(0) == 0x30) {
		var cert = new X509(bin);
	} else {
		var bin = PKIXCommon.parsePEM("CERTIFICATE", bin.toString(ASCII));
		if (bin.length == 0 || bin.byteAt(0) != 0x30) {
			print(fname + " does not seem to be a X509 certificate");
			return;
		}
		var cert = new X509(bin);
	}

	print(cert);

	var ok = Dialog.prompt("OK to insert this certificate");

	if (ok == null) {
		return;
	}

	var label = cert.getSubjectDNString();
	if (certnode.parent == null) {
		this.ks.storeCACertificate(label, cert);
		this.createOutline();
	} else {
		this.ks.storeEndEntityCertificate(certnode.parent.key, cert);
		certnode.setLabel(label);
	}

	print("Certificate " + label + " imported");
}



KeyManager.prototype.exportCertificate = function(certnode) {

	var fname = GPSystem.mapFilename("cert_" + certnode.parent.keylabel + ".pem", GPSystem.USR);

	var fname = Dialog.prompt("Enter file name for exported certificate", fname, null, "*.pem");

	if (fname == null) {
		return;
	}

	var f = new File(fname);
	if (fname.substr(-3) == "pem") {
		f.writeAll(PKIXCommon.toPEM("CERTIFICATE", certnode.cert));
	} else {
		f.writeAll(certnode.cert);
	}
	f.close();

	print("Certificate written to " + fname);
}



KeyManager.prototype.dumpCertificate = function(certnode) {
	var cert = certnode.cert;

	if (cert.byteAt(0) == 0x30) {
		var x = new X509(cert);
		print(x);
	} else {
		var x = new CVC(cert);
		x.decorate();
		print(x.getASN1());
	}
}



KeyManager.prototype.registerPublicKey = function(id) {
	var fname = Dialog.prompt("Enter file name for public key import", this.lastfile, null, "*.pka");

	if (fname == null) {
		return null;
	}

	var f = new File(fname);
	var chain = f.readAllAsBinary();
	f.close();

	if (chain.byteAt(0) != 0x30) {
		throw new GPError("KeyManager", GPError.INVALID_DATA, 0, "File does not contain a public key with certificates");
	}

	this.lastfile = fname;

	var a = new ASN1(chain);
	print(a);

	if (a.get(0).tag == ASN1.OBJECT_IDENTIFIER) {
		var oid = new ByteString("CardContact 4 3 1", OID);
		assert(a.get(0).value.equals(oid), "Invalid file format");
		var pk = new CVC(a.find(0x63).get(0));
		var devcert = new CVC(a.find(0x62).get(0));
		var dicacert = new CVC(a.find(0x61).get(0));
	} else {
		var pk = new CVC(a.get(0));
		var devcert = new CVC(a.get(1));
		var dicacert = new CVC(a.get(2));
	}

	assert(dicacert.verifyWithCVC(this.crypto, SmartCardHSM.rootCerts[dicacert.getCAR()]));
	assert(devcert.verifyWith(this.crypto, dicacert.getPublicKey(SmartCardHSM.rootCerts.UTSRCACC100001.getPublicKey()), dicacert.getPublicKeyOID()));

	var str = (typeof(id) == "undefined" ? "Add the key issued to " : "Replace key " + id + " with ");
	var ok = Dialog.prompt(str + pk.getCHR() + " on device " + devcert.getCHR() + " (Cancel for No) ?");
	if (ok == null) {
		return;
	}

	this.managePKA.registerPublicKey(pk, devcert, dicacert, id);
	this.updatePKAStatus();
//	this.updateAuthenticationStatus(this.sc.queryUserPINStatus());
}



KeyManager.prototype.authenticateWithPublicKey = function() {
 	var readers = Card.getReaderList();

	var reader = Dialog.prompt("Please select card reader with public key", "", readers);

	if (reader == null) {
		return;
	}

	var pcard = new Card(reader);
	pcard.reset(Card.RESET_COLD);

	var sc = new SmartCardHSM(pcard);
	var ks = new HSMKeyStore(sc);

	var keys = ks.enumerateKeys()
	var keylabel = Dialog.prompt("Please select a key for public key authentication", "", keys);

	if (keylabel == null) {
		return;
	}

	var key = ks.getKey(keylabel);
	var cert = ks.getCertificate(keylabel);
	var cvc = new CVC(cert);

	var status = this.managePKA.checkKeyStatus(cvc.getCHR());

	if (status == ManagePKA.KEY_NOT_FOUND) {
		print("Key not registered as public key for authentication");
		return;
	}

	if (status == ManagePKA.KEY_ALREADY_AUTHENTICATED) {
		print("Key already authenticated");
		return;
	}

	var cs = sc.getNativeCardService();
	cs.useClassThreePinPad(true);

	var sw = sc.verifyUserPIN();
	if (sw != 0x9000) {
		print(SmartCardHSM.describePINStatus(sw, "User PIN"));
		return;
	}

	this.managePKA.performAuthentication(sc, key);
	this.updatePKAStatus();
	this.changedAuthenticationStatus(this.sc.queryUserPINStatus());
}



KeyManager.prototype.initialize = function() {
	var initializer = new SmartCardHSMInitializer(this.sc.card);

	var changeSOPIN = false;
	var newSOPIN;
	if (this.sc.isInitialized()) {
		var soPIN = Dialog.prompt("Enter Initialization Code (SO-PIN)", this.devcfg.soPIN ? this.devcfg.soPIN : "*");
		if (soPIN == null) {
			return;
		}
		if (soPIN.length == 0) {
			soPIN = "3537363231383830";
		}

		if (this.hasTokenManagementKey()) {
			var opt = [ "Keep current SO-PIN", "Set a new managed SO-PIN", "Set a user selected SO-PIN", "Set the Default SO-PIN" ];
			var str = Dialog.prompt("Select option", opt[0], opt);
			if (str == null) {
				return;
			}
			if (str == opt[1]) {
				changeSOPIN = true;
			} else if (str == opt[2]) {
				changeSOPIN = true;
				str = this.promptNewPIN(1, false);
				if (str == null) {
					return;
				}
				newSOPIN = new ByteString(str, HEX)
			} else if (str == opt[3]) {
				changeSOPIN = true;
				newSOPIN = new ByteString("3537363231383830", HEX)
			}
		}
	} else {
		var soPIN = this.promptNewPIN(1, true);
		if (!soPIN) {
			return;
		}
		if (this.devcfg.soPIN && (soPIN != this.devcfg.soPIN)) {
			newSOPIN = soPIN;
		}
	}

	initializer.setInitializationCode(new ByteString(soPIN, HEX));

	var label = Dialog.prompt("Define a label (optional)", "");
	if (label == null) {
		return;
	}
	if (label) {
		initializer.setLabel(label);
	}

	var provURL = Dialog.prompt("Define a provisioning URL (optional)", "");
	if (provURL == null) {
		return;
	}
	if (provURL) {
		initializer.setProvisioningURL(provURL);
	}

	if (this.hasTokenManagementKey() && !newSOPIN) {
		var salt = this.kmksalt;
		if (changeSOPIN) {
			var salt = this.crypto.generateRandom(8);
		}
		initializer.setTokenManagementKey(this.managementToken.kcv, salt);
	}

	var options = [ KeyManager.USER_PIN, KeyManager.TRANSPORT_PIN, KeyManager.PUBLIC_KEY_AUTHENTICATION];
	if ((this.sc.major > 3) || ((this.sc.major >= 3) && (this.sc.minor >= 4))) {
		options.push(KeyManager.PUBLIC_KEY_AUTHENTICATION_OR_PIN);
		options.push(KeyManager.PUBLIC_KEY_AUTHENTICATION_AND_PIN);
	}
	options.push(KeyManager.BIOMETRIC_MATCH_SOC);
	options.push(KeyManager.BIOMETRIC_MATCH_SOC_OLD);
	options.push(KeyManager.BIOMETRIC_MATCH_NT);

	var authmech = Dialog.prompt("Select authentication mechanism", KeyManager.USER_PIN, options);

	if ((authmech == null) || (!authmech.equals(KeyManager.USER_PIN) &&
				   !authmech.equals(KeyManager.TRANSPORT_PIN) &&
				   !authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION) &&
				   !authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION_OR_PIN) &&
				   !authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION_AND_PIN) &&
				   !authmech.equals(KeyManager.BIOMETRIC_MATCH_SOC) &&
				   !authmech.equals(KeyManager.BIOMETRIC_MATCH_SOC_OLD) &&
				   !authmech.equals(KeyManager.BIOMETRIC_MATCH_NT))) {
		return;
	}

	if (authmech.equals(KeyManager.USER_PIN) ||
	    authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION_OR_PIN) ||
	    authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION_AND_PIN) ||
	    authmech.equals(KeyManager.TRANSPORT_PIN)) {
		var rrc = Dialog.prompt("Allow RESET RETRY COUNTER", KeyManager.WITHOUT_RRC, [
						KeyManager.WITHOUT_RRC,
						KeyManager.WITH_RRC,
						KeyManager.WITH_RRC_PIN ]);

		if ((rrc == null) || (!rrc.equals(KeyManager.WITH_RRC) &&
				!rrc.equals(KeyManager.WITH_RRC_PIN) &&
				!rrc.equals(KeyManager.WITHOUT_RRC))) {
			return;
		}
	}

	if (authmech.equals(KeyManager.USER_PIN) ||
		authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION_OR_PIN) ||
		authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION_AND_PIN)) {
		var userPIN = this.promptNewPIN(2, true);
		initializer.setUserPIN(new ByteString(userPIN, ASCII));
		initializer.setResetRetryCounterMode(!rrc.equals(KeyManager.WITHOUT_RRC));
		initializer.setResetRetryCounterResetOnlyMode(rrc.equals(KeyManager.WITH_RRC));
	} else if (authmech.equals(KeyManager.TRANSPORT_PIN)) {
		var transportPIN = this.promptNewPIN(3, true);
		initializer.setUserPIN(new ByteString(transportPIN, ASCII));
		initializer.setTransportPINMode(true);
		initializer.setResetRetryCounterMode(!rrc.equals(KeyManager.WITHOUT_RRC));
		initializer.setResetRetryCounterResetOnlyMode(rrc.equals(KeyManager.WITH_RRC));
		this.initializedWithTransportPIN = true;
	} else if (authmech.equals(KeyManager.BIOMETRIC_MATCH_SOC)) {
		var socmgr = new ByteString("D276000172536F434D01", HEX);
		initializer.setBioTemplate(0, socmgr, 0x80);		// PIN
		initializer.setBioTemplate(1, socmgr, 0x00);		// Bio
	} else if (authmech.equals(KeyManager.BIOMETRIC_MATCH_SOC_OLD)) {
		var socmgr = new ByteString("FF64652E6264722E62736F6301", HEX);
		initializer.setBioTemplate(0, socmgr, 0x80);		// PIN
		initializer.setBioTemplate(1, socmgr, 0x00);		// Bio
	} else if (authmech.equals(KeyManager.BIOMETRIC_MATCH_NT)) {
		var socmgr = new ByteString("F14E4653657276657253616D706C65", HEX);
		initializer.setBioTemplate(0, socmgr, 0x01);
//		initializer.setBioTemplate(1, socmgr, 0x02);
	}
	if (authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION) ||
		authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION_OR_PIN) ||
		authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION_AND_PIN)) {
		var str = Dialog.prompt("Enter total number of public keys", "1");

		if (str == null) {
			return;
		}
		var numberOfPublicKeys = parseInt(str);

		var str = Dialog.prompt("Enter number of public keys required for authentication", "1");

		if (str == null) {
			return;
		}
		var requiredPublicKeysForAuthentication = parseInt(str);

		initializer.setPublicKeyAuthenticationParameter(requiredPublicKeysForAuthentication, numberOfPublicKeys);
		if (authmech.equals(KeyManager.PUBLIC_KEY_AUTHENTICATION_AND_PIN)) {
			initializer.setCombinedAuthenticationMode(true);
		}

		var str = Dialog.prompt("Allow replacing registered public keys (Cancel for No) ?");
		if (str == "OK") {
			initializer.setReplacePKAKeyMode(true);
		}
	}

	var dkek = this.sc.major >= 3 ? KeyManager.DKEK_KEY_DOMAINS : KeyManager.DKEK_NONE;
	dkek = Dialog.prompt(KeyManager.DKEK_SELECT, dkek, [
						KeyManager.DKEK_NONE,
						KeyManager.DKEK_RANDOM_DKEK,
						KeyManager.DKEK_SHARES,
						KeyManager.DKEK_KEY_DOMAINS]);

	if (dkek == null) {
		return;
	}

	if (dkek.equals(KeyManager.DKEK_KEY_DOMAINS)) {
		var str = Dialog.prompt(KeyManager.DKEK_NO_OF_KEY_DOMAINS, "4");
		initializer.setKeyDomains(parseInt(str));
	} else if (!dkek.equals(KeyManager.DKEK_NONE)) {
		var shares = 0;
		if (dkek.equals(KeyManager.DKEK_SHARES)) {
			var str = Dialog.prompt(KeyManager.DKEK_NO_OF_SHARES, "1");
			if (str == null) {
				return;
			}

			var shares = parseInt(str);
		}
		initializer.setDKEKShares(shares);
	}

	print("Initializing, please wait...");
	initializer.initialize();

	if (this.hasProfile) {
		if (this.devcfg.soPIN && !soPIN.equals(this.devcfg.soPIN)) {
			if (Dialog.prompt("Update profile on disk with changed SO-PIN (Cancel for No) ?")) {
				this.devcfg.soPIN = soPIN;
			} else {
				delete this.devcfg.soPIN;
			}
		}
		if (userPIN) {
			if (this.devcfg.userPIN && !userPIN.equals(this.devcfg.userPIN)) {
				if (Dialog.prompt("Update profile on disk with changed User-PIN (Cancel for No) ?")) {
					this.devcfg.userPIN = userPIN;
				} else {
					delete this.devcfg.userPIN;
				}
			}
			delete this.devcfg.transportPIN;
		}
		if (transportPIN) {
			if (this.devcfg.transportPIN && !transportPIN.equals(this.devcfg.transportPIN)) {
				if (Dialog.prompt("Update profile on disk with changed Transport-PIN (Cancel for No) ?")) {
					this.devcfg.transportPIN = transportPIN;
				} else {
					delete this.devcfg.transportPIN;
				}
			}
			delete this.devcfg.userPIN;
		}
		this.writeProfile();
	} else {
		if (!soPIN.equals(this.devcfg.soPIN)) {
			if (Dialog.prompt("Keep a profile on disk to save the PINs (Cancel for No) ?")) {
				this.devcfg.soPIN = soPIN;
				if (userPIN) {
					this.devcfg.userPIN = userPIN;
				}
				if (transportPIN) {
					this.devcfg.transportPIN = transportPIN;
				}
				this.writeProfile();
			}
		}
	}

	if (changeSOPIN) {
		print("Old SO-PIN " + soPIN);
		var oldSOPIN = new ByteString(soPIN, HEX);

		if (!newSOPIN) {
			this.determineSOPIN(salt);
			var newSOPIN = new ByteString(this.devcfg.soPIN, HEX);
		}
		this.sc.changeInitializationCode(oldSOPIN, newSOPIN);
	}

	print("Initializing complete");
	this.authenticationState = this.sc.queryUserPINStatus();
	this.createOutline();
}



KeyManager.prototype.remoteUpdate = function() {
	this.sc.card.remoteUpdate(this.provisioningURL);
	if (this.sc.card.remoteMessage) {
		print("Remote Update completed - " + this.sc.card.remoteMessage + "(" + this.sc.card.remoteMessageId + ")");
	} else {
		print("Remote Update completed");
	}
	this.createOutline();
}



KeyManager.prototype.createDKEKShareFile = function(nofm) {
	var fname = Dialog.prompt("Enter file name for DKEK share", this.lastfile, null, "*.pbe");

	if (fname == null) {
		return;
	}

	if (fname.indexOf(".") == -1) {
		fname += ".pbe";
	}

	var f = new File(fname);
	if (f.exists()) {
		var rsp = Dialog.prompt("File does already exists. OK to overwrite ?");
		if (rsp == null) {
			return;
		}
	}

	if (nofm) {
		var pwd = this.shareSecret();
		if (pwd == null) {
			return;
		}
	} else {
		var pwd = Dialog.prompt("Enter password for DKEK share", "**");
		if (pwd == null) {
			return;
		}

		var pwd2 = Dialog.prompt("Please repeat password for DKEK share", "**");
		if (pwd2 == null) {
			pwd.clear();
			return;
		}

		if (!pwd.equals(pwd2)) {
			pwd.clear();
			pwd2.clear();
			print("Passwords entered do not match");
			return;
		}

		pwd2.clear();
	}

	var rnd1 = this.sc.generateRandom(32);
	var rnd2 = this.crypto.generateRandom(32);
	var rnd = rnd1.xor(rnd2);
	rnd1.clear();
	rnd2.clear();

	var encdkekshare = DKEK.encryptKeyShare(rnd, pwd);

	pwd.clear();
	rnd.clear();

	f.writeAll(encdkekshare);
	f.close();

	print("New DKEK share written to " + fname);
	this.lastfile = fname;
}



KeyManager.prototype.dumpPaperKey = function(share) {
	print("\n\nThe PaperKey below contains 4 lines with 3 by 4 characters that");
	print("resemble the DKEK share and a check value for each line.\n");
	print("The following characters are replaced for readability.\n");
	print("    Upper case I -> !");
	print("    Upper case O -> *");
	print("    Lower case l -> %");
	print("\nPlease save this key by writing it down or copying it. Then restart");
	print("the PC to remove potential traces of the key material.\n");

	print("----8<------8<----\n");
	print(PaperKeyEncoding.dumpKey(share));
	print("----8<------8<----");
}



KeyManager.prototype.createDKEKSharePaperKey = function() {
	var rnd1 = this.sc.generateRandom(32);
	var rnd2 = this.crypto.generateRandom(32);
	var share = rnd1.xor(rnd2);
	rnd1.clear();
	rnd2.clear();
	this.dumpPaperKey(share);
	share.clear();
}



KeyManager.prototype.convertDKEKShareFileToPaperKey = function(nofm) {

	var fname = Dialog.prompt("Enter file name containing DKEK share", this.lastfile, null, "*.pbe");

	if (fname == null) {
		return;
	}

	var f = new File(fname);
	var encdkekshare = f.readAllAsBinary();
	f.close();

	if (nofm) {
		var pwd = this.reconstructSecret();
	} else {
		var pwd = Dialog.prompt("Enter password for DKEK share", "**");
		// Dialog.prompt("**") returns a ByteString rather than a String
	}

	if (pwd == null) {
		return null;
	}

	var share = DKEK.decryptKeyShare(encdkekshare, pwd);
	pwd.clear();

	this.dumpPaperKey(share);
	share.clear();
}



KeyManager.prototype.createDKEKShare = function() {
	var opt = [ "Create DKEK Share as File (Password)", "Create DKEK Share as File (n-of-m)", "Create DKEK Share as PaperKey", "Convert File to PaperKey", "Convert File to PaperKey (n-of-m)" ];
	var sel = Dialog.prompt("Choose DKEK Share Format", opt[0], opt);

	if (sel == null) {
		return;
	}
	switch(sel) {
		case opt[0]:
			this.createDKEKShareFile(false);
			break;
		case opt[1]:
			this.createDKEKShareFile(true);
			break;
		case opt[2]:
			this.createDKEKSharePaperKey();
			break;
		case opt[3]:
			this.convertDKEKShareFileToPaperKey(false);
			break;
		case opt[4]:
			this.convertDKEKShareFileToPaperKey(true);
			break;
	}
}



KeyManager.prototype.shareSecret = function() {
	var str = Dialog.prompt("Total number of shares", "3");
	if (str == null) {
		return null;
	}
	var totalshares = parseInt(str);
	if (totalshares < 2 || totalshares > 100) {
		print("Total number of shares must be between 2 and 100");
		return null;
	}

	var str = Dialog.prompt("Shares required to reconstruct secret", "2");
	if (str == null) {
		return null;
	}

	var threshold = parseInt(str);
	if (threshold < 2 || threshold > totalshares) {
		print("Threshold shares must be between 2 and " + totalshares);
		return null;
	}

	var html = "<html><p>The DKEK will be enciphered using a randomly generated 64 bit password.<br>" +
		             "This password is split using a (" + threshold + "-of-" + totalshares + ") threshold scheme.</p><br>" +
			 "<p>Please keep the generated and encrypted DKEK file in a safe location. We also recommend <br>" +
			     "to keep a paper printout, in case the electronic version becomes unavailable. A printable version <br>" +
			     "of the file can be generated using \"openssl base64 -in &lt;filename&gt;\".</p><br>" +
			 "<p>Press YES to continue</p></html>";

	var str = Dialog.prompt(html);
	if (str == null) {
		return;
	}

	var sss = new ShamirSharedSecret(64);

	var prime = sss.getPrime();
	var pwd = this.crypto.generateRandom(8);
	pwd = sss.trimSecret(pwd);

	var shares = sss.createShares(pwd, threshold, totalshares);

//	print(prime.toString(HEX));

	for (var i = 0; i < totalshares; i++) {
//		print(shares[i].toString(HEX));
		var html = "<html><p>Share " + (i + 1) + " of " + totalshares + "</p><br>" +
				  "<p>Prime " + prime.toString() + "</p><br>" +
				  "<p>Share ID " + (i + 1) + "</p><br>" +
				  "<p>Share value " + shares[i].toString() + "</p><br>" +
				  "<p>Please note ALL values above and press YES when finished</p></html>";
		Dialog.prompt(html);
	}

	return pwd;
}



KeyManager.prototype.promptShare = function(name) {
	do	{
		var str = Dialog.prompt("Enter " + name, "");
		if (str == null) {
			return null;
		}
		str = str.replace(":", "");
		str = str.replace(" ", "");
		var val = new ByteString(str, HEX);
		if (val.length != 8) {
			print("Entered value must be 8 bytes");
		}
	} while (val.length != 8);
	return val;
}



KeyManager.prototype.reconstructSecret = function() {
	var str = Dialog.prompt("Number of shares to enter", "2");
	if (str == null) {
		return null;
	}
	var cnt = parseInt(str);
	if (cnt < 2 || cnt > 100) {
		print("Number of shares must be between 2 and 100");
		return null;
	}

	var prime = this.promptShare("prime");
	if (prime == null) {
		return null;
	}

	var sss = new ShamirSharedSecret(prime);

	for (var i = 0; i < cnt; i++) {
		str = Dialog.prompt("Enter share id", "" + (i + 1));
		if (str == null) {
			return null;
		}
		var id = parseInt(str);
		var share = this.promptShare("share #" + id);
		if (share == null) {
			return null;
		}
		sss.addShare(id, share);
	}

	return sss.reconstructSecret();
}



KeyManager.prototype.importDKEKShareFromFile = function(nofm) {
	var fname = Dialog.prompt("Enter file name containing DKEK share", this.lastfile, null, "*.pbe");

	if (fname == null) {
		return;
	}

	var f = new File(fname);
	var encdkekshare = f.readAllAsBinary();
	f.close();

	if (nofm) {
		var pwd = this.reconstructSecret();
	} else {
		var pwd = Dialog.prompt("Enter password for DKEK share", "**");
		// Dialog.prompt("**") returns a ByteString rather than a String
	}

	if (pwd == null) {
		return null;
	}

	var share = DKEK.decryptKeyShare(encdkekshare, pwd);
	pwd.clear();
	this.lastfile = fname;
	return share;
}



KeyManager.prototype.importDKEKShareFromPaperKey = function() {
	var bb = new ByteBuffer();
	var pc = new PaperKeyEncoding();

	print("\nEnter the PaperKey line by line. You can leave out spaces and the dash.");
	print("The PaperKey does not contain the characters O (capital o), I (capital i)");
	print("or l (lower L), in case of doubts what you see in the printout.");

	for (var i = 0; i < 4; i++) {
		while(true) {
			var str = Dialog.prompt("Enter line " + (i + 1) + " of the key", "");
			if (str == null) {
				print("Aborted...");
				return;
			}

			try	{
				var segment = pc.decodeSegment(i, str);
				bb.append(segment);
				segment.clear();
				break;
			}
			catch(e) {
				Dialog.prompt(e.message);
			}
		}
	}

	var share = bb.toByteString();
	bb.clear();
	return share;
}



KeyManager.prototype.inputDKEKShare = function() {
	var opt = [ "Import DKEK Share from File (Password)", "Import DKEK Share from File (n-of-m)", "Import DKEK Share as PaperKey" ];
	var sel = Dialog.prompt("Choose DKEK Share Format", opt[0], opt);

	if (sel == null) {
		return null;
	}
	var share;
	switch(sel) {
		case opt[0]:
			share = this.importDKEKShareFromFile(false);
			break;
		case opt[1]:
			share = this.importDKEKShareFromFile(true);
			break;
		case opt[2]:
			share = this.importDKEKShareFromPaperKey();
			break;
	}
	return share;
}



KeyManager.prototype.importDKEKShare = function(node) {
	var share = this.inputDKEKShare();

	if (share == null) {
		return;
	}

	var status = this.sc.importKeyShare(node.kdid, share);
	share.clear();

	if (status.sw != 0x9000) {
		print("Import failed with SW1/SW2 = " + status.sw.toString(16));
	}
	this.updateKeyDomainStatus(node.kdid, status);
	print("Import complete.");
}




KeyManager.prototype.generateRSAKey = function(node) {
	var kdid = node.kdid;

	var keysize = Dialog.prompt(KeyManager.SELECT_KEY_SIZE, "2048", [ "1024", "1536", "2048", "3072", "4096" ]);
	if (keysize == null) {
		return;
	}
	keysize = parseInt(keysize);

	var label = "";
	while(true) {
		var label = Dialog.prompt(KeyManager.ENTER_KEY_LABEL, label);
		if (label == null) {
			return;
		}

		if (this.sc.getKey(label)) {
			if (Dialog.prompt(KeyManager.KEY_LABEL_EXISTS) == null) {
				return;
			}
			continue;
		}
		break;
	}

	var chr = this.chr.toString();
	while(true) {
		var chr = Dialog.prompt(KeyManager.ENTER_KEY_REFERENCE, chr);
		if (chr == null) {
			return;
		}

		if (chr.length < 8 || chr.length > 16) {
			if (Dialog.prompt(KeyManager.KEY_REFERENCE_INVALID) == null) {
				return;
			}
			continue;
		}
		break;
	}

	var spec = new SmartCardHSMKeySpecGenerator(Crypto.RSA, keysize);

	if (typeof(kdid) != "undefined" ) {
		spec.setKeyDomain(kdid);
	}

	spec.setCHR(new PublicKeyReference(chr));
	spec.setInnerCAR(this.chr);

	var algolist = "";
	while(true) {
		var algolist = Dialog.prompt(KeyManager.RSA_ALGORITHM_LIST, algolist);
		if (algolist == null) {
			return;
		}

		if (algolist.length > 0) {
			var algo = SmartCardHSM.encodeAlgorithmList(algolist);
			if (algo == null) {
				if (Dialog.prompt(KeyManager.INVALID_ALGORITHM_LIST) == null) {
					return;
				}
				continue;
			}

			if (algo.find(ByteString.valueOf(0x92)) != -1) {
				if ((this.sc.major == 3) && (this.sc.minor == 1)) {
					if (Dialog.prompt(KeyManager.BUG31) == null) {
						continue;
					}
				}
				if ((this.sc.major == 3 && this.sc.minor < 6 && keysize == 3072) ||
				    (this.sc.major == 4 && this.sc.minor < 1 && keysize == 4096)) {
					if (Dialog.prompt(KeyManager.BUGWRAP) == null) {
						continue;
					}
				}
			}
			spec.setAlgorithms(algo);
		}
		break;
	}

	print(KeyManager.GENERATING_KEY);
	var req = this.ks.generateKeyPair(label, spec);
	this.ks.storeEndEntityCertificate(label, req);

	print(KeyManager.GENERATING_KEY_DONE);
	this.createOutline();
}



KeyManager.prototype.generateECCKey = function(node) {
	var kdid = node.kdid;

	var curve = Dialog.prompt(KeyManager.SELECT_CURVE, "brainpoolP256r1", KeyManager.CURVES);
	if (curve == null) {
		return;
	}

	var dom = new Key();
	dom.setComponent(Key.ECC_CURVE_OID, new ByteString(curve, OID));

	var label = "";
	while(true) {
		var label = Dialog.prompt(KeyManager.ENTER_KEY_LABEL, label);
		if (label == null) {
			return;
		}

		if (this.sc.getKey(label)) {
			if (Dialog.prompt(KeyManager.KEY_LABEL_EXISTS) == null) {
				return;
			}
			continue;
		}
		break;
	}

	var chr = this.chr.toString();
	while(true) {
		var chr = Dialog.prompt(KeyManager.ENTER_KEY_REFERENCE, chr);
		if (chr == null) {
			return;
		}

		if (chr.length < 8 || chr.length > 16) {
			if (Dialog.prompt(KeyManager.KEY_REFERENCE_INVALID) == null) {
				return;
			}
			continue;
		}
		break;
	}

	var spec = new SmartCardHSMKeySpecGenerator(Crypto.EC, dom);

	if (typeof(kdid) != "undefined" ) {
		spec.setKeyDomain(kdid);
	}

	spec.setCHR(new PublicKeyReference(chr));
	spec.setInnerCAR(this.chr);

	var algolist = "";
	while(true) {
		var algolist = Dialog.prompt(KeyManager.ECC_ALGORITHM_LIST, algolist);
		if (algolist == null) {
			return;
		}

		if (algolist.length > 0) {
			var algo = SmartCardHSM.encodeAlgorithmList(algolist);
			if (algo == null) {
				if (Dialog.prompt(KeyManager.INVALID_ALGORITHM_LIST) == null) {
					return;
				}
				continue;
			}

			if ((this.sc.major == 3) && (this.sc.minor == 1) && (algo.find(ByteString.valueOf(0x92)) != -1)) {
				if (Dialog.prompt(KeyManager.BUG31) == null) {
					continue;
				}
			}
			spec.setAlgorithms(algo);
		}
		break;
	}

	print(KeyManager.GENERATING_KEY);
	var req = this.ks.generateKeyPair(label, spec);
	this.ks.storeEndEntityCertificate(label, req);

	print(KeyManager.GENERATING_KEY_DONE);
	this.createOutline();
}



KeyManager.prototype.generateAESKey = function(node) {
	if ((this.sc.major == 3) && ((this.sc.minor == 1) || (this.sc.minor == 1))) {
		if (Dialog.prompt(KeyManager.BUGAES) == null) {
			return;
		}
	}


	var kdid = node.kdid;

	var keysize = Dialog.prompt(KeyManager.SELECT_KEY_SIZE, "128", [ "128", "192", "256" ] );
	if (keysize == null) {
		return;
	}
	keysize = parseInt(keysize);

	var label = "";
	while(true) {
		var label = Dialog.prompt(KeyManager.ENTER_KEY_LABEL, label);
		if (label == null) {
			return;
		}

		if (this.sc.getKey(label)) {
			if (Dialog.prompt(KeyManager.KEY_LABEL_EXISTS) == null) {
				return;
			}
			continue;
		}
		break;
	}

	var spec = new SmartCardHSMKeySpecGenerator(Crypto.AES, keysize);

	if (typeof(kdid) != "undefined") {
		spec.setKeyDomain(kdid);
	}

	var algolist = "CBC_ENC,CBC_DEC,CMAC,WRAP,DERIVE_SP800_56C";
	while(true) {
		var algolist = Dialog.prompt(KeyManager.AES_ALGORITHM_LIST, algolist);
		if (algolist == null) {
			return;
		}

		var algo = SmartCardHSM.encodeAlgorithmList(algolist);
		if (algo == null) {
			if (Dialog.prompt(KeyManager.INVALID_ALGORITHM_LIST) == null) {
				return;
			}
			continue;
		}

		spec.setAlgorithms(algo);
		break;
	}

	print(KeyManager.GENERATING_KEY);
	var req = this.ks.generateKey(label, spec);

	print(KeyManager.GENERATING_KEY_DONE);
	this.createOutline();
}



KeyManager.prototype.exportKey = function(node) {
	var fname = GPSystem.mapFilename(node.keylabel + ".wky", GPSystem.USR);

	var fname = Dialog.prompt("Enter file name for key export", fname, null, "*.wky");

	if (fname == null) {
		return null;
	}

	var bin = this.ks.exportKey(node.key);

	var f = new File(fname);
	f.writeAll(bin);
	f.close();
	print("Key exported to " + fname);
}



KeyManager.prototype.importKey = function(node) {
	var fname = Dialog.prompt("Enter file name for key import", this.lastfile, null, "*.wky");

	if (fname == null) {
		return null;
	}

	var f = new File(fname);
	var bin = f.readAllAsBinary();
	f.close();

	if (bin.byteAt(0) != 0x30) {
		throw new GPError("KeyManager", GPError.INVALID_DATA, 0, "File does not contain a wrapped key");
	}

	this.lastfile = fname;
	this.ks.importKey(bin);
	this.createOutline();
}



KeyManager.prototype.importPKCS12 = function(node) {
	var str = Dialog.prompt(KeyManager.DKEK_NO_OF_SHARES, "1");
	if (str == null) {
		return;
	}

	var shares = parseInt(str);

	var dkek = new DKEK(this.crypto);
	for (var cnt = 0; cnt < shares; cnt++) {
		var dkekshare = this.inputDKEKShare();
		dkek.importDKEKShare(dkekshare);
		dkekshare.clear();
	}

	do	{
		var file = Dialog.prompt("Select PKCS#12 container", this.lastfile, null, "*.p12");

		if (file == null) {
			return;
		}

		var pwd = Dialog.prompt("Enter PKCS#12 password", "*");

		if (pwd == null) {
			return;
		}

		var p12 = new KeyStore("BC", "PKCS12", file, pwd);
		this.lastfile = file;

		var aliases = p12.getAliases();

		do	{
			var alias = Dialog.prompt("Select key", "", aliases);
			assert(alias != null);

			var key = new Key();
			key.setType(Key.PRIVATE);
			key.setID(alias);
			try	{
				p12.getKey(key);
			}
			catch(e) {
				print(e);
				key = null;
			}
			var cert = p12.getCertificate(alias);

			print(cert);

			do	{
				var alias = Dialog.prompt("Enter key name for import", alias);
				if (alias == null) {
					return;
				}
				if (!this.ks.hasKey(alias)) {
					break;
				}
				Dialog.prompt("A key with label " + alias + " does already exists. Please choose a different name");
			} while (1);

			if (key != null) {
				print("Importing key and certificate...");

				var pubkey = cert.getPublicKey();
				var blob = dkek.encodeKey(key, pubkey);

				if (pubkey.getComponent(Key.MODULUS)) {
					hkey = this.ks.importRSAKey(alias, blob, pubkey.getSize());
					var signalgo = Crypto.RSA_PSS_SHA256;
				} else {
					hkey = this.ks.importECCKey(alias, blob, pubkey.getSize());
					var signalgo = Crypto.ECDSA_SHA256;
				}

				this.ks.storeEndEntityCertificate(alias, cert);

				// Test import
				var msg = new ByteString("Hello World", ASCII);

				var signature = hkey.sign(signalgo, msg);

				assert(this.crypto.verify(pubkey, signalgo, msg, signature), "Signature verification of imported key failed");
				print("Import completed");
			} else {
				print("Importing certificate...");

				this.ks.storeCACertificate(alias, cert);

			}
			this.createOutline();
		} while (aliases.length > 1 && Dialog.prompt("Import more keys ?"));

	} while (Dialog.prompt("Import more PKCS#12 files ?"));
	dkek.clear();
}



KeyManager.prototype.importAESKey = function(node) {
	var str = Dialog.prompt(KeyManager.DKEK_NO_OF_SHARES, "1");
	if (str == null) {
		return;
	}

	var shares = parseInt(str);

	var dkek = new DKEK(this.crypto);
	for (var cnt = 0; cnt < shares; cnt++) {
		var dkekshare = this.inputDKEKShare();
		dkek.importDKEKShare(dkekshare);
		dkekshare.clear();
	}

	do	{
		var alias = "";
		do	{
			alias = Dialog.prompt("Enter key name for import", alias);
			if (alias == null) {
				return;
			}
			if (!this.ks.hasKey(alias)) {
				break;
			}
			Dialog.prompt("A key with label " + alias + " does already exists. Please choose a different name");
		} while (1);

		while (true) {
			var value = Dialog.prompt("Enter key value", "");
			if (value == null) {
				return;
			}

			try	{
				var bin = new ByteString(value, HEX);
				if ((bin.length != 16) && (bin.length != 24) && (bin.length != 32)) {
					print("Key must be 16, 24, or 32 bytes long");
					continue;
				}
			}
			catch(e) {
				print("Invalid input: " + e.message);
				continue;
			}
			break;
		}

		var aes = new Key();
		aes.setComponent(Key.AES, bin);

		var keyid = this.crypto.sign(aes, Crypto.AES_CMAC, new ByteString("KeyCheckValue", ASCII)).left(8);

		// Encode AES key into blob
		var blob = dkek.encodeAESKey(aes);
//		dkek.dumpKeyBLOB(blob);

		var key = this.ks.importAESKey(alias, blob, aes.getSize(), keyid);


		this.createOutline();
	} while (Dialog.prompt("Import more AES keys ?"));
	dkek.clear();
}



KeyManager.prototype.deleteKey = function(node) {
	this.ks.deleteKey(node.key);
	node.remove();

	for (var i = 0; i < this.plugins.length; i++) {
		var plugin = this.plugins[i].instance;
		if (plugin.deleteKey) {
			plugin.deleteKey(node);
		}
	}
}



KeyManager.prototype.readProfile = function() {
	try	{
		var f = new File(this.profileName);
		var c = f.readAllAsString();
		f.close();
		this.devcfg = JSON.parse(c);
		this.hasProfile = true;
		if (this.devcfg.soPIN) {
			print("Retrieved SO-PIN from profile");
		}
		if (this.devcfg.userPIN) {
			print("Retrieved User-PIN from profile");
		}
		if (this.devcfg.transportPIN) {
			print("Retrieved Transport-PIN from profile");
		}
	}
	catch(e) {
	}
}



KeyManager.prototype.writeProfile = function() {
	var f = new File(this.profileName);
	f.writeAll(JSON.stringify(this.devcfg, null, "\t"));
	f.close();
	this.hasProfile = true;
	print("Profile saved to " + this.profileName);
}



KeyManager.prototype.decimalize = function(raw, count) {
	// Decimalize raw binary data in parameter raw into a numeric sequence of count digits
	var c;
	do	{
		var str = raw.toString(HEX);
		c = count;
		var result = "";
		var i = 0;

		while ((i < str.length) && (c > 0)) {
			var d = str.charCodeAt(i);
			if ((d >= 0x30) && (d <= 0x39)) {
				result = result.concat(String.fromCharCode(d));
				c--;
			}
			i++;
		}
		if (c > 0) {
			raw = raw.not();
		}

	} while (c > 0);

	return result;
}



KeyManager.prototype.generatePINs = function() {
	var rnd = this.sc.generateRandom(24);
	var soPIN = rnd.bytes(0,8).toString(HEX);
	var userPIN = this.decimalize(rnd.bytes(8,8), 6);
	var transportPIN = this.decimalize(rnd.bytes(16,8), 6);

	print("\nSO-PIN        : " + soPIN);
	print(  "User-PIN      : " + userPIN);
	print(  "Transport-PIN : " + transportPIN);

	if (Dialog.prompt("Use the PINs as default values when initializing this device (Cancel for No) ?")) {
		this.devcfg.soPIN = soPIN;
		this.devcfg.userPIN = userPIN;
		this.devcfg.transportPIN = transportPIN;

		if (!this.hasProfile && Dialog.prompt("Save generated PINs to disk (Warning: Will be saved in plain) ?")) {
			this.writeProfile();
		}
	}
}



KeyManager.prototype.fixSECP521 = function(source) {
	var key = source.key;

	print("Old PRKD");
	print(key.desc);

	var prkd = SmartCardHSM.buildPrkDforECC(key.getPKCS15Id(), key.getLabel(), 521);
	print("New PRKD");
	print(prkd);

	var fid = ByteString.valueOf((SmartCardHSM.PRKDPREFIX << 8) + key.getId());
	this.sc.updateBinary(fid, 0, prkd.getBytes());
	key.setDescription(prkd);
}



KeyManager.prototype.actionListener = function(source, action) {
	for (var i = 0; i < this.plugins.length; i++) {
		var plugin = this.plugins[i].instance;
		if (plugin.actionListener) {
			if (plugin.actionListener(source, action)) {
				return;
			}
		}
	}

	switch(action) {
		case KeyManager.INITIALIZE:
			this.initialize();
			break;
		case KeyManager.EXPORT_ID:
			this.exportDeviceId();
			break;
		case KeyManager.REMOTE_UPDATE:
			this.remoteUpdate();
			break;
		case KeyManager.GENERATE_PIN:
			this.generatePINs();
			break;
		case KeyManager.GENERATE_RSA_KEY:
			this.generateRSAKey(source);
			break;
		case KeyManager.GENERATE_ECC_KEY:
			this.generateECCKey(source);
			break;
		case KeyManager.GENERATE_AES_KEY:
			this.generateAESKey(source);
			break;
		case KeyManager.EXPORT_KEY:
			this.exportKey(source);
			break;
		case KeyManager.IMPORT_KEY:
			this.importKey();
			break;
		case KeyManager.IMPORT_PKCS12:
			this.importPKCS12();
			break;
		case KeyManager.CREATE_DKEK_SHARE:
			this.createDKEKShare();
			break;
		case KeyManager.IMPORT_DKEK_SHARE:
			this.importDKEKShare(source);
			break;
		case KeyManager.DELETE_KEY:
			this.deleteKey(source);
			break;
		case KeyManager.EXPORT_PUBLIC_KEY:
			this.exportPublicKey(source);
			break;
		case KeyManager.SIGN_KEY_DOMAIN_MEMBERSHIP:
			this.groupSignerOperation(source);
			break;
		case KeyManager.GENERATE_PKCS10:
			this.generatePKCS10(source);
			break;
		case KeyManager.IMPORT_CERTIFICATE:
			this.importCertificate(source);
			break;
		case KeyManager.EXPORT_CERTIFICATE:
			this.exportCertificate(source);
			break;
		case KeyManager.DELETE_CACERTIFICATE:
			this.deleteCACertificate(source);
			break;
		case KeyManager.DUMP_CERTIFICATE:
			this.dumpCertificate(source);
			break;
		case KeyManager.IMPORT_DATAOBJECT:
			this.importDataObject(source);
			break;
		case KeyManager.EXPORT_DATAOBJECT:
			this.exportDataObject(source);
			break;
		case KeyManager.DELETE_DATAOBJECT:
			this.deleteDataObject(source);
			break;
		case KeyManager.IMPORT_AESKEY:
			this.importAESKey(source);
			break;
		case KeyManager.LOGIN_WITH_USER_PIN:
			this.login();
			break;
		case KeyManager.LOGIN_WITH_USER_PIN_PAD:
			this.loginPinPAD();
			break;
		case KeyManager.LOGIN_WITH_USER_BIO1:
			this.loginBioMatch(0x85);
			break;
		case KeyManager.LOGIN_WITH_USER_BIO2:
			this.loginBioMatch(0x86);
			break;
		case KeyManager.CHANGE_PIN:
			this.changePIN(false);
			break;
		case KeyManager.CHANGE_SOPIN:
			this.changeSOPIN(true);
			break;
		case KeyManager.UNBLOCK_PIN:
			this.unblockPIN(false);
			break;
		case KeyManager.RESET_PIN:
			this.unblockPIN(true);
			break;
		case KeyManager.LOGOUT:
			this.logout();
			break;
		case KeyManager.REGISTER_PUBLIC_KEY:
			this.registerPublicKey();
			break;
		case KeyManager.REPLACE_PUBLIC_KEY:
			this.registerPublicKey(source.id);
			break;
		case KeyManager.AUTHENTICATE_PUBLIC_KEY:
			this.authenticateWithPublicKey();
			break;
		case KeyManager.CREATE_DKEK_DOMAIN:
			this.createDKEKDomain(source);
			break;
		case KeyManager.CREATE_XKEK_DOMAIN:
			this.createXKEKDomain(source);
			break;
		case KeyManager.DELETE_KEY_DOMAIN:
			this.deleteDomain(source);
			break;
		case KeyManager.ASSOCIATE_XKEK_DOMAIN:
			this.associateXKEKDomain(source);
			break;
		case KeyManager.CREATE_EXCHANGE_KEY:
			this.createExchangeKey(source);
			break;
		case KeyManager.DELETE_KEK:
			this.deleteKEK(source);
			break;
		case KeyManager.DERIVE_XKEK:
			this.deriveXKEK(source);
			break;
		case KeyManager.FIX_SECP521:
			this.fixSECP521(source);
			break;
		default:
			print("Unknown action: " + action);
	}
}


var mt;
if (typeof(km) == "object") {
	mt = km.managementToken;
}

var km = new KeyManager();

var reader = _scsh3.reader;

if (mt) {
	print("Continue to use management token");
	km.managementToken = mt;
	if (reader && (reader.length > 0)) {
		reader = reader + ";!" + km.managementToken.sc.card.readerName;
	} else {
		reader = "!" + km.managementToken.sc.card.readerName;
	}
}

var card = new Card(reader);
km.setCard(card);

print("-------------------------------------------------------------------");
print("Please right-click on nodes in the outline to see possible actions.");
print("For most operations you will need to authenticate first using a");
print("mechanism from the User PIN context menu.");
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Plug-In
 */

var File = require("scsh/file/File").File;
var FileEncryptor = require("scsh/file/FileEncryptor").FileEncryptor;



/**
 * Create a plug-in instance
 *
 * @constructor
 * @class Key Manager Plug-In for file encryption.
 * @param {KeyManager] km the associated key manager
 */
function EncryptionPlugin(km) {
	this.km = km;
}

// All plug-ins must export a symbol "Plugin"
exports.Plugin = EncryptionPlugin;

EncryptionPlugin.ENCRYPT_FILE = "Encrypt File";
EncryptionPlugin.DECRYPT_FILE = "Decrypt File";



/**
 * Add an entry to the context menu associated with a key in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 * @param {Outline} keynode the node created for this key before it is added to the outline
 */
EncryptionPlugin.prototype.addKeyContextMenu = function(contextMenu, authenticationState, keynode) {
	if (authenticationState == 0x9000) {
		var type = keynode.key.getType();
		if (type == "AES") {
			contextMenu.push(EncryptionPlugin.ENCRYPT_FILE);
		}
		if ((type == "AES") || (type == "EC")) {
			contextMenu.push(EncryptionPlugin.DECRYPT_FILE);
		}
	}
}



/**
 * Handle action triggered from the outline context menu
 *
 * @param {Outline} source the source outline node of this action
 * @param {String} action the action selected from the context menu
 * @type Boolean
 * @return true if the action was handled
 */
EncryptionPlugin.prototype.actionListener = function(source, action) {
	switch(action) {
		case EncryptionPlugin.ENCRYPT_FILE:
			this.encryptFile(source);
			return true;
		case EncryptionPlugin.DECRYPT_FILE:
			this.decryptFile(source);
			return true;
	}
	return false;
}



/**
 * Prompt for a file and encrypt.
 */
EncryptionPlugin.prototype.encryptFile = function(source, action) {
	print("");
	print("WARNING: This is a proof-of-concept only and file formats may change at any time");
	print("         Use for testing an evaluation only.");

	var modes = [ "Use AES directly (Native)", "Use derived AES key (Derived)" ];

	var mode = Dialog.prompt("Select mode", modes[0], modes);
	if (!mode) {
		return;
	}

	var variant = mode == modes[0] ? FileEncryptor.NATIVE : FileEncryptor.DERIVED;

	var fname = "";
	if (this.lastPlainFileName) {
		fname = this.lastPlainFileName;
	}

	var fname = Dialog.prompt("Select file to encrypt", fname, null, "");
	if (!fname) {
		return;
	}

	this.lastPlainFileName = fname;

	var f = new File(fname);
	var bin = f.readAllAsBinary();
	f.close();

	if (variant == FileEncryptor.NATIVE) {
		var duration = Math.trunc(bin.length / 5000) + 1;
		print("Encryption of " + bin.length + " bytes in Native mode will take approximately " + duration + " seconds");
		if (duration > 60) {
			if (!Dialog.prompt("Continue ?")) {
				return;
			}
		}
	}

	fname = fname + ".enc";
	var fname = Dialog.prompt("Save encrypted file as", fname, null, "");
	if (!fname) {
		return;
	}

	var f = new File(fname);
	if (f.exists()) {
		if (Dialog.prompt("File does already exist. Overwrite ?") == null) {
			return;
		}
	}

	var fe = new FileEncryptor(this.km.sc, variant);

	fe.deriveKey(source.key);

	var bin = fe.encrypt(bin);

	f.writeAll(bin);
	f.close();
	print("Encryption complete.");
}



EncryptionPlugin.prototype.decryptFile = function(source, action) {
	var fname = "";
	if (this.lastPlainFileName) {
		fname = this.lastPlainFileName + ".enc";
	}

	var fname = Dialog.prompt("Select encrypted file", fname, null, "");
	if (!fname) {
		return;
	}

	var f = new File(fname);
	var bin = f.readAllAsBinary();
	f.close();

	this.lastPlainFileName = fname.substring(0, fname.lastIndexOf("."));

	var fe = new FileEncryptor(this.km.sc);

	var ofs = fe.parseHeader(bin);

	var fname = Dialog.prompt("Save encrypted file as", this.lastPlainFileName, null, "");
	if (!fname) {
		return;
	}

	var f = new File(fname);

	if (f.exists()) {
		if (Dialog.prompt("File does already exist. Overwrite ?") == null) {
			return;
		}
	}

	fe.deriveKey(source.key);

	var bin = fe.decrypt(bin.bytes(ofs));

	f.writeAll(bin);
	f.close();
	print("Decryption complete.");
}



EncryptionPlugin.prototype.toString = function() {
	return "Encryption-Plugin";
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Plug-In to import keys from a PKCS#12 container
 */

var DKEK = require("scsh/sc-hsm/DKEK").DKEK;



/**
 * Create a plug-in instance
 *
 * @constructor
 * @class A plug-in example
 * @param {KeyManager] km the associated key manager
 */
function ImportP12(km) {
	this.km = km;
}

// All plug-ins must export a symbol "Plugin"
exports.Plugin = ImportP12;

ImportP12.PLUGIN_ACTION = "Import from PKCS#12";



/**
 * Add an entry to the context menu associated with the device entry in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Boolean} isInitialized the device is initialized
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 */
ImportP12.prototype.addDeviceContextMenu = function(contextMenu, isInitialized, authenticationState) {
	if (authenticationState == 0x9000) {
		contextMenu.push(ImportP12.PLUGIN_ACTION);
	}
}



/**
 * Add an entry to the context menu associated with a key in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 * @param {Outline} keynode the node created for this key before it is added to the outline
 */
ImportP12.prototype.addKeyContextMenu = function(contextMenu, authenticationState, keynode) {
}



/**
 * Handle action triggered from the outline context menu
 *
 * @param {Outline} source the source outline node of this action
 * @param {String} action the action selected from the context menu
 * @type Boolean
 * @return true if the action was handled
 */
ImportP12.prototype.actionListener = function(source, action) {
//	print("Source: " + source);
//	print("Action: " + action);
	if (!action.equals(ImportP12.PLUGIN_ACTION)) {
		return false;
	}

	this.importP12();

	return true;
}


ImportP12.prototype.importP12 = function() {
	var sc = this.km.sc;
	var crypto = this.km.crypto;

	var kdid = -1;
	do {
		kdid++;
		var kd = sc.queryKeyDomainStatus(kdid);
		if ((kd.sw == 0x6A86) || (kd.sw == 0x6D00)) {
			Dialog.prompt("No empty key domain found.");
			return
		}
	} while (kd.sw != 0x6A88);

	// Create DKEK domain with random DKEK
	sc.createDKEKKeyDomain(kdid, 1);
	var share = crypto.generateRandom(32);
	sc.importKeyShare(kdid, share);

	// Create DKEK encoder and import share
	var dkek = new DKEK(crypto);
	dkek.importDKEKShare(share);

	do	{
		var file = Dialog.prompt("Select PKCS#12 container", "", null, "*.p12");

		if (file == null) {
			return;
		}

		var pwd = Dialog.prompt("Enter PKCS#12 password", "*");

		if (pwd == null) {
			return;
		}

		var p12 = new KeyStore("BC", "PKCS12", file, pwd);

		var aliases = p12.getAliases();

		do	{
			var alias = Dialog.prompt("Select key", "", aliases);
			assert(alias != null);

			var key = new Key();
			key.setType(Key.PRIVATE);
			key.setID(alias);
			try	{
				p12.getKey(key);
			}
			catch(e) {
				print(e);
				key = null;
			}
			var cert = p12.getCertificate(alias);

			print(cert);

			do	{
				var alias = Dialog.prompt("Enter key name for import", alias);
				if (alias == null) {
					return;
				}
				if (!this.km.ks.hasKey(alias)) {
					break;
				}
				Dialog.prompt("A key with label " + alias + " does already exists. Please choose a different name");
			} while (1);

			if (key != null) {
				print("Importing key and certificate...");

				var pubkey = cert.getPublicKey();
				var blob = dkek.encodeKey(key, pubkey);

				if (pubkey.getComponent(Key.MODULUS)) {
					hkey = this.km.ks.importRSAKey(alias, blob, pubkey.getSize());
					var signalgo = Crypto.RSA_PSS_SHA256;
				} else {
					hkey = this.km.ks.importECCKey(alias, blob, pubkey.getSize());
					var signalgo = Crypto.ECDSA_SHA256;
				}

				this.km.ks.storeEndEntityCertificate(alias, cert);

				// Test import
				var msg = new ByteString("Hello World", ASCII);

				var signature = hkey.sign(signalgo, msg);

				assert(crypto.verify(pubkey, signalgo, msg, signature), "Signature verification of imported key failed");
				print("Import completed");
			} else {
				var str = "OK";
				if (sc.getCACertificate(alias)) {
					str = Dialog.prompt("CA Certificate alias does exists (OK to overwrite)");
				}

				if (str == "OK") {
					print("Importing certificate...");

					this.km.ks.storeCACertificate(alias, cert);
				}
			}
			this.km.createOutline();
		} while (aliases.length > 1 && Dialog.prompt("Import more keys ?"));

	} while (Dialog.prompt("Import more PKCS#12 files ?"));
	dkek.clear();
	sc.deleteKEK(kdid);
}



ImportP12.prototype.toString = function() {
	return "ImportP12-Plugin";
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Plug-In
 */


/**
 * Create a plug-in instance
 *
 * @constructor
 * @class A plug-in example
 * @param {KeyManager] km the associated key manager
 */
function ManagementToken(km) {
	this.km = km;
}

// All plug-ins must export a symbol "Plugin"
exports.Plugin = ManagementToken;

ManagementToken.USE_TOKEN_ACTION = "Use as Management Token";
ManagementToken.RELEASE_TOKEN_ACTION = "Release Management Token";



/**
 * Add an entry to the context menu associated with the device entry in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Boolean} isInitialized the device is initialized
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 */
ManagementToken.prototype.addDeviceContextMenu = function(contextMenu, isInitialized, authenticationState) {
	if (typeof(this.km.managementToken) == "undefined") {
		if (isInitialized && authenticationState == 0x9000) {
			contextMenu.push(ManagementToken.USE_TOKEN_ACTION);
		}
	} else {
		contextMenu.push(ManagementToken.RELEASE_TOKEN_ACTION);
	}
}



/**
 * Use the current token as management token
 *
 */
ManagementToken.prototype.useAsManagementToken = function() {
	this.sc = this.km.sc;
	this.ks = this.km.ks;
	this.id = this.km.id;
	this.certchain = this.km.certchain;
	this.km.managementToken = this;

	var tmklist = [];

	var keys = this.sc.getKeys();
	for (var i = 0; i < keys.length; i++) {
		var key = keys[i];
		if ((key.getType() == "AES") && key.algorithms && (key.algorithms.find(ByteString.valueOf(SmartCardHSM.ALG_CMAC)) >= 0)) {
			tmklist.push(key.getLabel());
		}
	}

	if (tmklist.length > 0) {
		var label = tmklist[0];

		if (tmklist.length > 1) {
			var label = Dialog.prompt("Select token management key", tmklist[0], tmklist);
			if (label == null) {
				return;
			}
		}

		this.tmk = this.sc.getKey(label);
		this.kcv = key.getPKCS15Id();
		if (this.kcv.length != 8) {
			print("No subject key identifier found. Generating one...");
			this.kcv = this.tmk.sign(Crypto.AES_CMAC, new ByteString("KeyCheckValue", ASCII)).left(8);
		}
		print("Using AES key '" + label + "' with KCV " + this.kcv.toString(HEX) + " to manage the SO-PIN");
	}

	this.task = new Task(this);
	this.task.setContextMenu([ ManagementToken.RELEASE_TOKEN_ACTION ]);
	this.km.cardRemoved(this.sc.card.readerName);
	print("See Tasks tab for management token");
	this.km.promptAutoInsert();
}



/**
 * Release and reset the management token
 */
ManagementToken.prototype.releaseManagementToken = function() {
	delete this.km.managementToken;
	this.sc.logout();
	this.sc.card.close();
	this.task.dispose();
}



/**
 * Derive the SO-PIN using the token management key
 */
ManagementToken.prototype.deriveSOPIN = function(id, seed) {
	var inp = new ByteString(id, ASCII);
	if (seed) {
		inp = inp.concat(seed);
	}
	var cmac = this.tmk.sign(Crypto.AES_CMAC, inp);
	return cmac.left(8);
}



/**
 * Handle action triggered from the outline context menu
 *
 * @param {Outline} source the source outline node of this action
 * @param {String} action the action selected from the context menu
 * @type Boolean
 * @return true if the action was handled
 */
ManagementToken.prototype.actionListener = function(source, action) {
	switch(action) {
		case ManagementToken.USE_TOKEN_ACTION:
			this.useAsManagementToken();
			return true;
		case ManagementToken.RELEASE_TOKEN_ACTION:
			this.releaseManagementToken();
			return true;
	}
	return false;
}



ManagementToken.prototype.toString = function() {
	return "Management-Token " + this.id;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Plug-In
 */


/**
 * Create a plug-in instance
 *
 * @constructor
 * @class A plug-in example
 * @param {KeyManager] km the associated key manager
 */
function PortalConnector(km) {
	this.km = km;
}

// All plug-ins must export a symbol "Plugin"
exports.Plugin = PortalConnector;

PortalConnector.USE_TOKEN_ACTION = "Connect to Portal";
PortalConnector.RELEASE_TOKEN_ACTION = "Release Portal Token";



/**
 * Add an entry to the context menu associated with the device entry in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Boolean} isInitialized the device is initialized
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 */
PortalConnector.prototype.addDeviceContextMenu = function(contextMenu, isInitialized, authenticationState) {
	if (isInitialized) {
		contextMenu.push(PortalConnector.USE_TOKEN_ACTION);
	}
}



/**
 * Use the current token as management token
 *
 */
PortalConnector.prototype.useAsPortalConnector = function() {

	var url = this.km.sc.getProvisioningURL();

	if (!url) {
		url = "https://www.pki-as-a-service.net/rt/hsm";
	}

	url = Dialog.prompt("Connect to ", url);
	if (!url) {
		return;
	}

	var session = new PortalSession(this.km.sc, this.km.id, url);

	var readerName = this.km.sc.card.readerName;
	this.km.cardRemoved(readerName);
	this.km.autoInsert = false;

	var rl = [];
	if (_scsh3.reader) {
		var rl = _scsh3.reader.split(";");
	}

	if (rl.indexOf("!" + readerName) == -1) {
		rl.push("!" + readerName);
		_scsh3.reader = rl.join(";");
	}

	this.km.setCardRemovedListener(readerName, session);
	session.task.start();
	print("See Tasks tab for portal token");
}



/**
 * Handle action triggered from the outline context menu
 *
 * @param {Outline} source the source outline node of this action
 * @param {String} action the action selected from the context menu
 * @type Boolean
 * @return true if the action was handled
 */
PortalConnector.prototype.actionListener = function(source, action) {
	switch(action) {
		case PortalConnector.USE_TOKEN_ACTION:
			this.useAsPortalConnector();
			return true;
	}
	return false;
}



PortalConnector.prototype.toString = function() {
	return "Portal Connector Plugin";
}



function PortalSession(sc, id, url) {
	this.sc = sc;
	this.id = id;
	this.url = url;

	this.task = new Task(this);
	this.task.setContextMenu([ PortalConnector.RELEASE_TOKEN_ACTION ]);
}



PortalSession.prototype.run = function() {
	GPSystem.trace("Connected");
	this.sc.card.allowCardSpecificRemoteUpdateService(true);

	try	{
		this.sc.card.remoteUpdate(this.url);
		this.sc.logout();
		this.sc.card.close();
	}
	catch(e) {
		print("Connection failed : " + e.message);
	}

	var rl = [];
	if (_scsh3.reader) {
		var rl = _scsh3.reader.split(";");
	}

	var i = rl.indexOf("!" + this.sc.card.readerName);
	if (i >= 0) {
		rl.splice(i);
		_scsh3.reader = rl.join(";");
	}

	GPSystem.trace("Disconnected");
	this.task.disposeAtExit = true;
//	this.task.dispose();
}



PortalSession.prototype.actionListener = function(source, action) {
	switch(action) {
		case PortalConnector.RELEASE_TOKEN_ACTION:
			this.sc.card.cancelRemoteUpdate();
			return true;
	}
	return false;
}



PortalSession.prototype.cardRemoved = function() {
	print("Card removed");
	this.sc.card.cancelRemoteUpdate();
}



PortalSession.prototype.toString = function() {
	return "Portal-Token " + this.id + " connected to " + this.url;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Plug-In
 */

var SmartCardHSMKeySpecGenerator = require('scsh/sc-hsm/SmartCardHSM').SmartCardHSMKeySpecGenerator;
var File = require("scsh/file/File").File;



/**
 * Create a plug-in instance
 *
 * @constructor
 * @class A plug-in example
 * @param {KeyManager] km the associated key manager
 */
function ClonePlugin(km) {
	this.km = km;
}

// All plug-ins must export a symbol "Plugin"
exports.Plugin = ClonePlugin;

ClonePlugin.COPY_KEYS = "Copy Keys from Management Token";



/**
 * Add an entry to the context menu associated with the device entry in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Boolean} isInitialized the device is initialized
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 */
ClonePlugin.prototype.addDeviceContextMenu = function(contextMenu, isInitialized, authenticationState) {
	if (this.km.managementToken && (authenticationState == 0x9000)) {
		contextMenu.push(ClonePlugin.COPY_KEYS);
	}
}



/**
 * Handle action triggered from the outline context menu
 *
 * @param {Outline} source the source outline node of this action
 * @param {String} action the action selected from the context menu
 * @type Boolean
 * @return true if the action was handled
 */
ClonePlugin.prototype.actionListener = function(source, action) {
	switch(action) {
		case ClonePlugin.COPY_KEYS:
			this.copyKeys(source);
			return true;
	}
	return false;
}



/**
 * Enumerate all key domains
 *
 * @param {SmartCardHSM} sc the token to look at
 * @type Object[]
 * @return the key domain status
 */
ClonePlugin.prototype.enumerateKeyDomains = function(sc) {
	var kd = [];
	var kdidx = -1;
	do {
		kdidx++;
		var kds = sc.queryKeyDomainStatus(kdidx);
		if (kds.sw == 0x9000) {
			kds.kdidx = kdidx;
			kd.push( kds  );
		}
	} while ((kds.sw != 0x6A86) && (kds.sw !== 0x6D00));

	return kd;
}



/**
 * Copy keys from the management token into the target token for all identical key domains
 *
 * @param {OutlineNode} the key domain outline node
 */
ClonePlugin.prototype.copyKeys = function(kd) {
	if (this.km.managementToken == undefined) {
		print("No management token found. Please insert management token and authenticate,");
		print("then select 'Use as management token' from the device context menu");
		return;
	}
	var mks = this.km.managementToken.ks;
	var tks = this.km.ks;

	var mkd = this.enumerateKeyDomains(mks.sc);
	var tkd = this.enumerateKeyDomains(tks.sc);

	// Create a list of XKEK key domains that are present on the master and the target
	var ckd = [];
	for (var i = 0; i < tkd.length; i++) {
		if (tkd[i].keyDomain) {
			for (var j = 0; j < mkd.length; j++) {
				if (mkd[j].keyDomain && mkd[j].keyDomain.equals(tkd[i].keyDomain)) {
					print("Found XKEK Key Domain " + tkd[i].keyDomain.toString(HEX));
					ckd.push( { m: mkd[j], t: tkd[i] } );
				}
			}
		}
	}

	// Establish a XKEK for all identical key domains
	var dom = new Key();
	dom.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));
	for (var i = 0; i < ckd.length; i++) {
		var spec = new SmartCardHSMKeySpecGenerator(Crypto.EC, dom);

		spec.setKeyDomain(ckd[i].m.kdidx);
		spec.setAlgorithms(ByteString.valueOf(SmartCardHSM.ALG_ECDHXKEK));

		print("Generating exchange keys...");
		var label = "ex";
		if (mks.hasKey(label)) {
			mks.deleteKey(label);
		}
		var mreq = mks.generateKeyPair(label, spec);
		var mkey = mks.getKey(label);

		spec.setKeyDomain(ckd[i].t.kdidx);
		if (tks.hasKey(label)) {
			tks.deleteKey(label);
		}
		var treq = tks.generateKeyPair(label, spec);
		var tkey = tks.getKey(label);

		print("Key agreement...");
		mks.sc.verifyCertificate(this.km.certchain.dica);
		mks.sc.verifyCertificate(this.km.certchain.devicecert);
		mks.sc.deriveXKEK(mkey.getId(), treq, new ByteString("DerivationParam", ASCII));
		mks.deleteKey(label);

		tks.sc.verifyCertificate(this.km.managementToken.certchain.dica);
		tks.sc.verifyCertificate(this.km.managementToken.certchain.devicecert);
		tks.sc.deriveXKEK(tkey.getId(), mreq, new ByteString("DerivationParam", ASCII));
		tks.deleteKey(label);
	}

	var mkd = this.enumerateKeyDomains(mks.sc);
	var tkd = this.enumerateKeyDomains(tks.sc);

	// Create a list of key domains with the same KEK
	var ckd = [];
	for (var i = 0; i < tkd.length; i++) {
		for (var j = 0; j < mkd.length; j++) {
			if (tkd[i].kcv.equals(mkd[j].kcv)) {
				ckd[mkd[j].kdidx] = mkd[j];
			}
		}
	}

	var list = mks.enumerateKeys();

	// Find all keys that in matching key domains and that are not yet present on the target
	for (var i = 0; i < list.length; i++) {
		var key = mks.getKey(list[i]);
		if (ckd[key.keyDomain]) {
			if (key.algorithms != undefined && key.algorithms.find(ByteString.valueOf(SmartCardHSM.ALG_WRAP, 1)) < 0) {
				continue;
			}
			if (!tks.hasKey(key.getLabel())) {
				print("Transfering key '" + key.getLabel() + "'...");
				var keyblob = mks.exportKey(key);
				var newkey = tks.importKey(keyblob);

				tks.sc.updateKey(newkey);
				this.km.addKey(newkey);
			}
		}
	}
	print("Copy complete.");
}



ClonePlugin.prototype.toString = function() {
	return "Clone-Plugin";
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Plug-In Template
 */


/**
 * Create a plug-in instance
 *
 * @constructor
 * @class A plug-in example
 * @param {KeyManager] km the associated key manager
 */
function PluginExample(km) {
	this.km = km;
}

// All plug-ins must export a symbol "Plugin"
exports.Plugin = PluginExample;

PluginExample.PLUGIN_ACTION = "Test-Plugin";



/**
 * Add an entry to the context menu associated with the device entry in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Boolean} isInitialized the device is initialized
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 */
PluginExample.prototype.addDeviceContextMenu = function(contextMenu, isInitialized, authenticationState) {
	print("isInitialized: " + isInitialized);
	print("authenticationState: " + authenticationState.toString(16));
	contextMenu.push(PluginExample.PLUGIN_ACTION);
}



/**
 * Supplement additional key domain infos
 *
 * Called after the key domain entry has been created in the outline.
 * The dom object contains the properties
 *
 * kdid - The index in the list of key domains
 * status - The status as returned by SmartCardHSM.parseKeyDomainStatus()
 * node  The associated Outline node
 *
 * @param {Object} dom key domain information
 */
PluginExample.prototype.addKeyDomainInformation = function(dom) {
}



/**
 * Postprocessing after a key domain delete
 *
 * Called after the key domain entry has been delete in the outline.
 * The dom object contains the properties
 *
 * kdid - The index in the list of key domains
 * status - The status as returned by SmartCardHSM.parseKeyDomainStatus()
 * node  The associated Outline node
 *
 * @param {Object} dom key domain information
 */
PluginExample.prototype.deleteKeyDomain = function(dom) {
}



/**
 * Add an entry to the context menu associated with a key domain in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 * @param {Object} dom key domain information
 */
PluginExample.prototype.addKeyDomainContextMenu = function(contextMenu, authenticationState, keydomainnode) {
}



/**
 * Supplement additional key infos
 *
 * @param {Outline} keynode the node created for this key. The key object is stored in the key property.
 */
PluginExample.prototype.addKeyInformation = function(keynode) {
}



/**
 * Add an entry to the context menu associated with a key in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 * @param {Outline} keynode the node created for this key before it is added to the outline
 */
PluginExample.prototype.addKeyContextMenu = function(contextMenu, authenticationState, keynode) {
	print("authenticationState: " + authenticationState.toString(16));
	contextMenu.push(PluginExample.PLUGIN_ACTION);
}



/**
 * Postprocessing after a key delete
 *
 * @param {Object} key key node in the outline
 */
PluginExample.prototype.deleteKey = function(node) {
}



/**
 * Handle action triggered from the outline context menu
 *
 * @param {Outline} source the source outline node of this action
 * @param {String} action the action selected from the context menu
 * @type Boolean
 * @return true if the action was handled
 */
PluginExample.prototype.actionListener = function(source, action) {
	print("Source: " + source);
	print("Action: " + action);
	return action.equals(PluginExample.PLUGIN_ACTION);
}



PluginExample.prototype.toString = function() {
	return "Test-Plugin 1";
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Plug-In
 */

var CVC = require("scsh/eac/CVC").CVC;


/**
 * Create a plug-in instance
 *
 * @constructor
 * @class A plug-in example
 * @param {KeyManager] km the associated key manager
 */
function SignExample(km) {
	this.km = km;
}

// All plug-ins must export a symbol "Plugin"
exports.Plugin = SignExample;

SignExample.PLUGIN_ACTION = "Sign Data";



/**
 * Add an entry to the context menu associated with the device entry in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Boolean} isInitialized the device is initialized
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 */
//SignExample.prototype.addDeviceContextMenu = function(contextMenu, isInitialized, authenticationState) {
//}



/**
 * Add an entry to the context menu associated with a key in the outline
 *
 * @param {String[]} contextMenu the list of entries in the context menu
 * @param {Number} authenticationState the status returned in the last authentication query (SW1/SW2)
 * @param {Outline} keynode the node created for this key before it is added to the outline
 */
SignExample.prototype.addKeyContextMenu = function(contextMenu, authenticationState, keynode) {
	if (authenticationState == 0x9000) {
		contextMenu.push(SignExample.PLUGIN_ACTION);
	}
}



/**
 * Handle action triggered from the outline context menu
 *
 * @param {Outline} source the source outline node of this action
 * @param {String} action the action selected from the context menu
 * @type Boolean
 * @return true if the action was handled
 */
SignExample.prototype.actionListener = function(source, action) {
	print("Source: " + source);
	print("Action: " + action);
	if (!action.equals(SignExample.PLUGIN_ACTION)) {
		return false;
	}

	var key = source.key;

	var crypto = this.km.sc.getCrypto();
	var algo = Crypto.RSA_PSS_SHA256;

	var str = Dialog.prompt("Enter message to sign", "Hello World");
	assert(str != null, "Abort by user");

	var msg = new ByteString(str, ASCII);
	var signature = crypto.sign(key, algo, msg);
	print("Signature : " + signature);

	var cert = source.childs[source.childs.length - 1].cert;

	if (cert.byteAt(0) == 0x30) {
		cert = new X509(cert);
	} else {
		cert = new CVC(cert);
	}
	print(cert);

	var crypto = new Crypto();
	var valid = crypto.verify(cert.getPublicKey(), algo, msg, signature);

	print("Signature is " + (valid ? "valid" : "invalid"));
	return true;
}



SignExample.prototype.toString = function() {
	return "Sign-Plugin";
}
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Function to name tags contained in Access Rules (EF.ARR)
 */



//
// Identify tags in the Expanded Access Rule found in EF_ARR
//
function ARRDecorator(asn1) {
	var recurse = false;
	var crt = false;
	
	switch(asn1.tag) {
	case 0x80:
		asn1.setName("accessMode");
		break;
	case 0x81:
		asn1.setName("commandP2");
		break;
	case 0x82:
		asn1.setName("commandP1");
		break;
	case 0x83:
		asn1.setName("commandP1P2");
		break;
	case 0x84:
		asn1.setName("commandINS");
		break;
	case 0x85:
		asn1.setName("commandINSP2");
		break;
	case 0x86:
		asn1.setName("commandINSP1");
		break;
	case 0x87:
		asn1.setName("commandINSP1P2");
		break;
	case 0x88:
		asn1.setName("commandCLA");
		break;
	case 0x89:
		asn1.setName("commandCLAP2");
		break;
	case 0x8A:
		asn1.setName("commandCLAP1");
		break;
	case 0x8B:
		asn1.setName("commandCLAP1P2");
		break;
	case 0x8C:
		asn1.setName("commandCLAINS");
		break;
	case 0x8D:
		asn1.setName("commandCLAINSP2");
		break;
	case 0x8E:
		asn1.setName("commandCLAINSP1");
		break;
	case 0x8F:
		asn1.setName("commandCLAINSP1P2");
		break;
	case 0x90:
		asn1.setName("always");
		break;
	case 0x97:
		asn1.setName("never");
		break;
	case 0x9C:
		asn1.setName("stateMachineDesc");
		break;
	case 0x9E:
		asn1.setName("securityConditionByte");
		break;
	case 0xA4:
		asn1.setName("authentication(AT)");
		crt = true;
		break;
	case 0xB4:
		asn1.setName("secureMessagingMac(CT)");
		crt = true;
		break;
	case 0xB6:
		asn1.setName("secureMessaging(DST)");
		crt = true;
		break;
	case 0xB8:
		asn1.setName("secureMessagingEnc(CCT)");
		crt = true;
		break;
	case 0xA0:
		asn1.setName("or");
		recurse = true;
		break;
	case 0xA7:
		asn1.setName("not");
		recurse = true;
		break;
	case 0xAF:
		asn1.setName("and");
		recurse = true;
		break;
	}
	
	if (recurse) {
		for (var i = 0; i < asn1.elements; i++) {
			ARRDecorator(asn1.get(i));
		}
	}
	
	if (crt) {
		for (var i = 0; i < asn1.elements; i++) {
			CRTDecorator(asn1.get(i));
		}
	}
}
//
//  ---------
// |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
// |#       #|  
// |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
// |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
//  --------- 
//
//  This file is part of OpenSCDP.
//
//  OpenSCDP is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation; either version 2 of the License, or
//  (at your option) any later version.
//
//  OpenSCDP is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with OpenSCDP; if not, write to the Free Software
//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
//
//  Simple test runner framework





// ---------------------------
// Create a test runner object
//
function TestRunner(name) {

	this.name = name;
	this.testGroupRunners = new Array();
	this.testProcedures = new Array();
	this.testMapper = new Array();
	this.testGroupPrototype = new TestGroup();
	this.testProcedurePrototype = new TestProcedure();
	this.testReport = new TestReport();
}



//
// Add a test group to the test runner
// This will iterate through all test cases and locate used procedures and steps
//
TestRunner.prototype.addTestGroup = function(testGroup) {
	var tgrs = this.testGroupRunners;
	
	tgr = new TestGroupRunner(this, testGroup);

	tgrs.push(tgr);
}



//
// Create test group from XML file and add to test runner
// 
TestRunner.prototype.addTestGroupFromXML = function (file, parameter) {
	// Parse XML file.
	var parser = new GPXML();
	parser.defineArrayElement("/testgroup", "testcase,function", "id,Name");
	parser.defineArrayElement("/testgroup/testcase/procedures", "procedure");
	var xml = parser.parse(file);
	
	// Determine CTOR function
	var ctor = xml.constructor.Script;
	if (!ctor) {
		// Use a default constructor unless defined in XML profile
		ctor = function(name, parameter) { TestGroup.call(this, name, parameter); };
	}
	
	// Make CTOR available in scope object
	// this[xml.id] = ctor;
	
	// Set correct prototype object
	ctor.prototype = new TestGroup();
	ctor.prototype.constructor = ctor;
	ctor.prototype.usedProcedures = new Array();
	
	// Add test cases to prototype object
	var testcases = xml.testcase;
	for (var i in testcases) {
		if (i != "arrayIndex") {
			var s = testcases[i].Script;
			s.XML = testcases[i];
			ctor.prototype["case" + i] = s;
			if (testcases[i].procedures) {
				var procedures = testcases[i].procedures.procedure;
				ctor.prototype.usedProcedures[i] = new Array();
				
				for (var p = 0; p < procedures.length; p++) {
					ctor.prototype.usedProcedures[i].push(procedures[p].id);
				}
			}
		}
	}
	
	// Add setup function to prototype object
	if (xml.setup) {
		ctor.prototype["setUp"] = xml.setup.Script;
	}
	
	// Add teardown function to prototype object
	if (xml.teardown) {
		ctor.prototype["tearDown"] = xml.teardown.Script;
	}
	
	// Add functions to prototype object
	var functions = xml["function"];
	for (var i in functions) {
		if (i != "arrayIndex") {
			var s = functions[i].Script;
			ctor.prototype[i] = s;
		}
	}
	
	ctor.XML = xml;
	
	var tc = new ctor(xml.id, parameter);
	
	this.addTestGroup(tc);
}



//
// Add a test procedure constructor to the list
// Use the getName() method to obtain the test procedure name
//
TestRunner.prototype.addTestProcedure = function(proc) {
	var name = proc.getName();
	if (name) {
		this.testProcedures[name] = proc;
	}
}



//
// Create test procedure from XML file and add to test runner
// 
TestRunner.prototype.addTestProcedureFromXML = function (file, parameter) {
	// Parse XML file.
	var parser = new GPXML();
	parser.defineArrayElement("/testprocedure", "teststep,function", "id,Name");
	var xml = parser.parse(file);

	// Determine CTOR function
	var ctor = xml.constructor.Script;
	if (!ctor) {
		// Use a default constructor unless defined in XML profile
		ctor = function(testgroup, name, parameter) { TestProcedure.call(this, testgroup, name, parameter); };
	}

	// Make CTOR available in scope object
	// this[xml.id] = ctor;
	
	// Set correct prototype object
	ctor.prototype = new TestProcedure();
	ctor.prototype.constructor = ctor;
	var teststeps = xml.teststep;
	for (var i in teststeps) {
		if (i != "arrayIndex") {
			var s = teststeps[i].Script;
			ctor.prototype["step" + i] = s;
		}
	}
	if (xml.setup) {
		ctor.prototype["setUp"] = xml.setup.Script;
	}
	if (xml.teardown) {
		ctor.prototype["tearDown"] = xml.teardown.Script;
	}
	
	// Add functions to prototype object
	var functions = xml["function"];
	for (var i in functions) {
		if (i != "arrayIndex") {
			var s = functions[i].Script;
			ctor.prototype[i] = s;
		}
	}

	ctor.XML = xml;
	ctor.getName = function() { return xml.id; };	

	this.testProcedures[xml.id] = ctor;
}



//
// Return constructor of test procedure
// 
TestRunner.prototype.getTestProcedure = function(name) {
	return this.testProcedures[name];
}



//
// Return number of failed tests
// 
TestRunner.prototype.getFailedCounter = function() {
	return this.failedCounter;
}



//
// Return log of last test run
// 
TestRunner.prototype.getLog = function() {
	return this.log;
}



//
// Add test to test mapper, which maps test unique id to listening object
//
TestRunner.prototype.addTest = function(name, listener) {
	this.testMapper[name] = listener;
}



//
// Run all test groups
//
TestRunner.prototype.run = function() {
	this.failedCounter = 0;
	this.log = "";
	for (var i = 0; i < this.testGroupRunners.length; i++) {
		var testGroupRunner = this.testGroupRunners[i];
		testGroupRunner.run();
	}
}



//
// Enable or disable test
//
TestRunner.prototype.enable = function(name, state) {
	var listener = this.testMapper[name];
	if (listener && listener.enable) {
		return listener.enable(state);
	} else {
		throw new GPError("TestRunner", GPError.OBJECT_NOT_FOUND, 0, name);
	}
}



//
// isEnabled query from TestGroup runner
//
TestRunner.prototype.isEnabled = function(name) {
	var listener = this.testMapper[name];
	if (listener && listener.isEnabled) {
		return listener.isEnabled();
	}
	return true;
}



//
// hasPassed Listener
//
TestRunner.prototype.hasPassed = function(name, log) {
//	print("hasPassed(" + name + ")");
	if (log) {
		this.log += log;
	}
	var listener = this.testMapper[name];
	if (listener && listener.hasPassed) {
		listener.hasPassed(log);

		if (listener.getXML) {
			var result = new TestResult(name, true, log, listener.getXML());
			this.testReport.addResult(result);
		}
	} else {
		print("No receiver for passed notification : " + name);
//		for (var i in this.testMapper) {
//			print("- " + i);
//		}
	}
}



//
// hasFailed Listener
//
TestRunner.prototype.hasFailed = function(name, log) {
//	print("hasFailed(" + name + ")");
	if (log) {
		this.log += log;
	}
	var listener = this.testMapper[name];
	if (listener && listener.hasFailed) {
		listener.hasFailed(log);

		if (listener.getXML) {
			var result = new TestResult(name, false, log, listener.getXML());
			this.testReport.addResult(result);
		}
		this.failedCounter++;
	}
}



/**
 * Write test report
 */
TestRunner.prototype.report = function(fn) {
	this.testReport.writeReport(fn);
	print("Report written to " + fn);
}



// ----------------------------------------
// Constructor for a TestGroupRunner object
//
function TestGroupRunner(testRunner, testGroup) {
	this.testRunner = testRunner;
	this.testGroup = testGroup;
	
	var testcases = testGroup.getTestCaseNames();
	
	for (var i = 0; i < testcases.length; i++) {
		var tcr = new TestCaseRunner(this, testcases[i]);
	}
}



//
// run this test group
//
TestGroupRunner.prototype.run = function() {
	var test = this.testGroup;
	
	test.run(this.testRunner);
}




// ---------------------------------------
// Constructor for a TestCaseRunner object
//
function TestCaseRunner(testGroupRunner, testCase) {
	this.testGroupRunner = testGroupRunner;
	this.testCase = testCase;
	this.selected = true;
	
	var testRunner = testGroupRunner.testRunner;
	testRunner.addTest(testGroupRunner.testGroup.getName() + "/" + testCase, this);
			
	this.xml = testGroupRunner.testGroup.getTestCase(testCase).XML;

	var testGroup = testGroupRunner.testGroup;
		
	var testprocedures = testGroup.getUsedTestProceduresForTestCase(testCase);
	
	if (testprocedures) {
		for (var i = 0; i < testprocedures.length; i++) {
			var tpr = new TestProcedureRunner(this, testprocedures[i]);
		}
	}
}



//
// Run this test case
//
TestCaseRunner.prototype.run = function() {
	var test = this.testGroupRunner.testGroup;
	
	test.runTestCase(this.testCase, this.testGroupRunner.testRunner);
}



//
// Tell test runner if case is enabled
//
TestCaseRunner.prototype.isEnabled = function() {
	return this.selected;
}



//
// Add a log entry to the test case node
//
TestCaseRunner.prototype.addLog = function(log) {
}



//
// Get log for the test case node
//
TestCaseRunner.prototype.getLog = function() {
	return this.log;
}



/**
 * Return describing XML element
 *
 * @type Object
 * @return the XML element for this test case
 */
TestCaseRunner.prototype.getXML = function() {
	return this.xml;
}



//
// Listener for passed notifications
// 
TestCaseRunner.prototype.hasPassed = function(log) {
	this.failed = false;
	this.addLog(log);
}



//
// Listener for failed notifications
// 
TestCaseRunner.prototype.hasFailed = function(log) {
	this.failed = true;
	this.addLog(log);
}



//
// Clear result of test
//
TestCaseRunner.prototype.clearResult = function() {
	this.failed = false;
}




//
// Enable or disable test
//
TestCaseRunner.prototype.enable = function(state) {
	this.selected = state;
}




// --------------------------------------------
// Constructor for a TestProcedureRunner object
//
function TestProcedureRunner(testCaseRunner, testProcedure) {
	this.testCaseRunner = testCaseRunner;
	this.testProcedure = testProcedure;
	
	var tp = this.testCaseRunner.testGroupRunner.testRunner.testProcedures[testProcedure];

	if (tp) {
		var list = new Array();
		for (var i in tp.prototype) {
			if (i.substr(0, 4) == "step") {
				var step = i.substr(4);
				list.push(step);
			}
		}

		list.sort();
		
		for (var i = 0; i < list.length; i++) {
			var tpsr = new TestStepRunner(this, list[i]);
		}
	} else {
		print("No test procedure implementation found for " + testProcedure);
	}
}




// ---------------------------------------
// Constructor for a TestStepRunner object
//
function TestStepRunner(testProcedureRunner, testStep) {
	this.testProcedureRunner = testProcedureRunner;
	this.testStep = testStep;
	
	var testCaseRunner = testProcedureRunner.testCaseRunner;	
	var testGroupRunner = testCaseRunner.testGroupRunner;
	var testRunner = testGroupRunner.testRunner;
	var testName = testGroupRunner.testGroup.getName() + "/" + 
	               testCaseRunner.testCase + "/" + 
	               testProcedureRunner.testProcedure + "/" +
	               testStep;
	               
	testRunner.addTest(testName, this);
}



//
// Receive passed notifications
//
TestStepRunner.prototype.hasPassed = function() {
}



//
// Clear test result display
//
TestStepRunner.prototype.clearResult = function() {
}


function TestReport() {
	this.testResults = [];
}



TestReport.prototype.addResult = function(result) {
	this.testResults.push(result);
}



TestReport.prototype.writeReport = function(filename) {
	var xml = <testreport/>
	
	for (var i = 0; i < this.testResults.length; i++) {
		var r = this.testResults[i];
		var x = r.toXML();
		xml.testcaseresult += x;
	}

	var os = new java.io.FileOutputStream(filename);
	var fw = new java.io.OutputStreamWriter(os, "UTF-8");

	fw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
	fw.write("<?xml-stylesheet type=\"text/xsl\" href=\"docreport.xsl\" ?>\n");

	fw.write(xml.toXMLString());
	fw.close();
}



function TestResult(id, verdict, log, tcxml) {
	this.id = id;
	this.verdict = verdict;
	this.log = log;
	this.tcxml = tcxml;
}



TestResult.prototype.toXML = function() {
	var source = this.id.split("/")[0];
	var sourceid = this.id.split("/")[1];

	var xml = <testcaseresult id={this.id} source={source} sourceid={sourceid}/>;

	xml.name = <name>{this.tcxml.name.elementValue}</name>;

	xml.verdict = <verdict>{ this.verdict ? "Passed" : "Failed" }</verdict>;
	xml.log = <log>{ "\n" + this.log + "\n" }</log>;
	return xml;
}
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Function to name tags contained in Control Reference Templates (CRT)
 */



//
// Identify tags in the Control Reference Template
//
function CRTDecorator(asn1) {
	switch(asn1.tag) {
	case 0x80:
		asn1.setName("cryptographicMechanism");
		break;
	case 0x81:
		asn1.setName("fileIdentifierOrPath");
		break;
	case 0x82:
		asn1.setName("dFName");
		break;
	case 0x83:
		asn1.setName("secretOrPublicKeyReference");
		break;
	case 0x84:
		asn1.setName("sessionOrPrivateKeyReference");
		break;
	case 0x85:
		asn1.setName("nullBlock");
		break;
	case 0x86:
		asn1.setName("chainingBlock");
		break;
	case 0x87:
		asn1.setName("initialBlock");
		break;
	case 0x88:
		asn1.setName("previousChallenge");
		break;
	case 0x89:
		asn1.setName("proprietaryDataElementIndex");
		break;
	case 0x8A:
		asn1.setName("proprietaryDataElementIndex");
		break;
	case 0x8B:
		asn1.setName("proprietaryDataElementIndex");
		break;
	case 0x8C:
		asn1.setName("proprietaryDataElementIndex");
		break;
	case 0x8D:
		asn1.setName("proprietaryDataElementIndex");
		break;
	case 0x90:
		asn1.setName("cardHashCode");
		break;
	case 0x91:
		asn1.setName("cardRandomNumber");
		break;
	case 0x92:
		asn1.setName("cardTimeStamp");
		break;
	case 0x93:
		asn1.setName("dsiCounter");
		break;
	case 0x94:
		asn1.setName("challengeOrDerivationParameter ");
		break;
	case 0x95:
		asn1.setName("usageQualifier");
		break;
	case 0x8E:
		asn1.setName("cryptographicContentReference");
		break;
	}
}
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Core classes to construct card outlines
 */



load("FCPDecorator.js");
load("CRTDecorator.js");
load("ARRDecorator.js");



//
// CTOR - OutlineCard default
//
function OutlineCard(outlineFactory, card, applicationFactory, aidlist) {

	this.factory = outlineFactory;
        this.card = card;
	this.af = applicationFactory;
	this.aidlist = aidlist;
		
        this.atr = card.reset(Card.RESET_COLD);

        // Create OutlineNode object and register in card object
        
        var name = card.profile.CardManufacturerProduct.Name;

	if (!name) {
		name = "Card";
	}
	
        var view = new OutlineNode(name);
        view.setUserObject(this);
        this.view = view;
}



//
// Expand clicked on node
//
// Read application list from EF_DIR or from card profile
//
OutlineCard.prototype.expandListener = function() {
        if (this.expanded)
                return;
                
        var view = this.view;

	//
	// Display ATR
	//
	var atrnode = this.factory.newOutlineATR(this.atr);
	
	view.insert(atrnode.view);

	//
	// Get list of application instances from card profile
	//
	var applicationInstances = this.card.profile.ApplicationInstances.ApplicationInstance;

	//
	// Make sure that we got a list
	//	
	assert(applicationInstances instanceof Array);

        //
        // Try reading the EF_DIR
        //
	var hasEFDIR = true;
	
	try	{
		var efdir = new CardFile(this.card, ":2F00");
	}
	catch(e) {
		print("Exception selecting EF_DIR. Assuming no EF_DIR...\n" + e);
		hasEFDIR = false;
	}

	//
	// Create a list of application identifier
	//
	var aidlist;
	
	if (this.aidlist) {
		aidlist = this.aidlist;
	} else {
		aidlist = new Array();
	}
	
	if (hasEFDIR) {
		//
		// Add MF to the list of applications
		//
		aidlist.push(new ByteString("3F00", HEX));

		//		
		// Read all AIDs from EF_DIR
		//
		
	        for (var rec = 1; rec < 255; rec++) {
        	        var record;
	                try     {
	                        record = efdir.readRecord(rec);
	                }
	                catch(e) {
	                	if ((e instanceof GPError) && (e.reason == 0x6A83))
	                		break;
	                        print(e);
	                        break;
	                }

	                var tlv = new ASN1(record);
                
	                for (var i = 0; i < tlv.elements; i++) {
	                        var t = tlv.get(i);
	                        switch(t.tag) {
	                        case 0x4F:
	                                aid = t.value;
	                                if (!aidlist[aid])
		                                aidlist.push(aid);
	                                break;
	                        }
	                }
		}
	} else {
		//
		// Create application list from card profile
		//
        	for (aid in  applicationInstances) {
        		if (aid == "arrayIndex")
        			continue;
        		aidlist.push(new ByteString(aid, HEX));
        	}
	}

	//
	// Sort the list of application identifier
	//	
	aidlist.sort();
	
	for (var i = 0; i < aidlist.length; i++) {
		var aid = aidlist[i];
		var applinstance = applicationInstances[aid.toString(HEX)];
		if (applinstance) {
/*
			print("from Card Profile: " + applinstance);
			print("  Label     : " + applinstance.Label);
			print("  AID       : " + applinstance.AID);
			print("  ProfileID : " + applinstance.ProfileID);
*/
			var uniqueId = new ByteString(applinstance.ProfileID, HEX);
					
			var instance = this.af.getApplicationInstance(new Object(), aid, this.card, uniqueId);
				
                        var struct = null;
                        
                        if (instance.profile.DataStructure) {
                        	struct = instance.profile.DataStructure.FileStructure;
                        }
                        
                        var path;
                        if (aid.length <= 2) {
	                        path = ":" + aid.toString(HEX);
                        } else {
                                path = "#" + aid.toString(HEX);
                        }
		        
		        var applentry;
		        if (struct) {                
	                        applentry = this.factory.newOutlineDF(this.card, path, applinstance.Label, struct);
	                } else {
	                        applentry = this.factory.newOutlineApplet(instance);
	                }
                        view.insert(applentry.view);
      		} else {
      			print("No profile found for aid " + aid);
      		}
	}

        this.expanded = true;
}





//
// CTOR - ATR Outline
// 
function OutlineATR(factory, atr) {
	this.factory = factory;
	this.atr = atr;

        // Create OutlineNode object and register in ATR object
        var view = new OutlineNode("ATR=" + this.atr.toByteString().toString(HEX));
        view.setIcon("atr");
        view.setUserObject(this);
        this.view = view;
}


OutlineATR.prototype.selectedListener = function() {
	print(this.atr);
}





//
// CTOR - FCP Outline
//
function OutlineFCP(factory, fcp) {
	this.factory = factory;
	this.fcp = fcp;

        // Create OutlineNode object and register in FCP object
        var view = new OutlineNode("FCP=" + this.fcp.toString(HEX));
        view.setIcon("header");
        view.setUserObject(this);
        this.view = view;

	if ((fcp.byteAt(0) == 0x62) ||
	    (fcp.byteAt(0) == 0x64) ||
	    (fcp.byteAt(0) == 0x6F)) {
	        try	{
	        	var asn = new ASN1(this.fcp);
	        	FCPDecorator(asn);
			view.insert(asn);
	        }
	        catch(e) {
	        	print(e);
	        	print("Unable to decode FCP structure");
	        }
	} else {
	}
}





//
// CTOR - Outline node for DFs
//
function OutlineDF(factory, card, id, name, profile) {
	if (arguments.length == 0)
		return;
		
	this.factory = factory;
        this.card = card;
        this.id = id;

        // Create OutlineNode object and register in OutlineDF object
        var view = new OutlineNode(name, true);
        view.setUserObject(this);
        this.view = view;
        
        this.profile = profile;
}





//
// Event handler for expand notifications
//
OutlineDF.prototype.expandListener = function() {

        if (this.expanded)
                return;

        var view = this.view;
        var eflist = this.profile.EF;
        
        try	{
        	var df = new CardFile(this.card, this.id);
		this.df = df;
				
		var fcp = df.getFCPBytes();
		if (fcp && (fcp.length > 1)) {
			var fcpmodel = this.factory.newOutlineFCP(fcp);
			view.insert(fcpmodel.view);	
		}
				
		for (var i = 0; i < eflist.length; i++) {
		        var ef = this.factory.newOutlineEF(this.df, eflist[i].name, eflist[i]);
		        view.insert(ef.view);
		}
	}
	catch(e) {
		print(e);
	}
        
        this.expanded = true;
}





//
// CTOR - Outline node for EFs
//
function OutlineEF(factory, df, name, profile) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
        this.df = df;

        // Create OutlineNode object and register in OutlineEF object
        var view = new OutlineNode(name, true);
        view.setIcon("document");
        view.setUserObject(this);
        this.view = view;
        
        this.profile = profile;
}



//
// Event handler for expand notification
//
OutlineEF.prototype.expandListener = function() {
        if (this.expanded)
                return;

        var view = this.view;
        var efdesc = this.profile;

	try	{
	        var ef = new CardFile(this.df, ":" + efdesc.fid);
	}
	catch(e) {
		print(e);
		return;
	}
		
	var isTransparent = true;
	var fcp = ef.getFCPBytes();
	var filelength = -1;
	if (fcp && (fcp.length > 1)) {
		var fcpmodel = this.factory.newOutlineFCP(fcp);
		view.insert(fcpmodel.view);
		isTransparent = ef.isTransparent();
		filelength = ef.getLength();
	} else {
		isTransparent = (efdesc.type == "T");
	}
		
        if (isTransparent) {
		try	{
			if (filelength > 0) {
		                var bs = ef.readBinary(0, filelength);
		        } else {
		                var bs = ef.readBinary();
		        }
	        }
	        catch(e) {
	       		print(e);
	       		this.expanded = true;
	       		return;
		}

		var bindata = this.factory.newDataOutline(bs, efdesc.format);
		view.insert(bindata.view);
		
        } else {
                for (var rec = 1; rec < 255; rec++) {
                        try     {
                                ef.readRecord(rec);
                                var record = this.factory.newOutlineRecord(ef, rec, efdesc);
                                view.insert(record.view);
                        }
                        catch(e) {
                              	if ((e instanceof GPError) && (e.reason == 0x6A83))
                			break;
                                print(e);
                                break;
                        }
                }
        }
        
        this.expanded = true;
}




//
// CTOR - Outline node for data object retrievable with GET_DATA
//
function OutlineDataObject(factory, df, id, name, format) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
        this.df = df;
	this.id = id;
	this.format = format;
		
        // Create OutlineNode object and register in OutlineEF object
        print(name + "(" + id.toString(16) + ")");
        var view = new OutlineNode(name + "(" + id.toString(16) + ")", true);
        view.setIcon("document");
        view.setUserObject(this);
        this.view = view;
}



//
// Event handler for expand notification
//
OutlineDataObject.prototype.expandListener = function() {
        if (this.expanded)
                return;

        var view = this.view;

	var card = this.df.card;
	
	var bs = card.sendApdu(0x00, 0xCA, this.id >> 8, this.id & 0xFF, 0);
	
	if (card.SW != 0x9000) {
		var bs = card.sendApdu(0x80, 0xCA, this.id >> 8, this.id & 0xFF, 0);
	}
	
	if (card.SW != 0x9000) {
		print("Error getting object: " + card.SWMSG);
	} else {
		var bindata = this.factory.newDataOutline(bs, this.format);
		view.insert(bindata.view);
        }
        
        this.expanded = true;
}




//
// CTOR - Outline for records in an EF
//
function OutlineRecord(factory, ef, no, efdesc) {
	this.factory = factory;
        this.ef = ef;
        this.no = no;
        this.efdesc = efdesc;
                
        // Create OutlineNode object and register in OutlineRecord object
        var view = new OutlineNode("Record#" + no, true);
        view.setIcon("record");
        view.setUserObject(this);
        this.view = view;
}



//
// Expand event handler for records
//
OutlineRecord.prototype.expandListener = function() {
        if (this.expanded)
                return;

        var view = this.view;
        var ef = this.ef;

        var bs = ef.readRecord(this.no);

	var bindata = this.factory.newDataOutline(bs, this.efdesc.format);
	view.insert(bindata.view);
        
        this.expanded = true;
}





//
// CTOR - Binary data outline
//
function DataOutline(factory, data, format) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
	this.data = data;
	this.format = format;
	
	var ddata = data;
	if (ddata.length > 256) {
		ddata = data.bytes(0, 256);
	}
	
	var view = new OutlineNode(ddata.toString(HEX));
        view.setIcon("binary");
	view.setUserObject(this);
	this.view = view;
	this.decorate(format);
}



DataOutline.prototype.decorate = function(format) {

	var view = this.view;
	var data = this.data;
		
	if (format && ((format.substr(0, 4) == "asn1") || (format.substr(0, 7) == "tlvlist")) && (data.length >= 2)) {
                var total = data.length;
                
                while(total >= 2) {
                	try	{
	                        var asn = new ASN1(data);
	                }
	                catch(e) {
	                	print("Error in TLV structure: " + e);
	                	return;
	                }
	                
                        this.asn = asn;
                        this.asn1DecoratorHook(format);
                        view.insert(asn);
                        total -= asn.size;
                        
                        if (format.substr(0, 4) == "asn") {
                                break;
                        }

                        data = data.bytes(asn.size);
                        if ((data.length == 0) || (data.byteAt(0) == 0x00) || (data.byteAt(0) == 0xFF)) {
                                break;
                        }
                }
                        
                if (total > 0) {
                        var sparecontent = new OutlineNode(total + " spare bytes");
                        view.insert(sparecontent);
                }
        }
}



DataOutline.prototype.asn1DecoratorHook = function(format) {
	var i = format.indexOf(".");
	
	if (i > 0) {
		switch(format.substr(i + 1)) {
		case "arr" :
			ARRDecorator(this.asn);
			break;
		}
	}
}



DataOutline.prototype.selectedListener = function() {
	print("--------------------------------------------------------------------------------");
	print(this.data);

	var i = 0;
	
	if (this.format) {
		i = this.format.indexOf(".");
	}
	
	if (i > 0) {
		switch(this.format.substr(i + 1)) {
		case "x509" :
			try 	{
				var x509 = new X509(this.data);
				print("Decoded certificate:");
				print(x509.toString());
			}
			catch(e) {
				print(e);
			}
			break;
		}
	}
	
}





//
// CTOR - OutlineFactory
// Derive from this class to include custom made outline elements
//
function CardOutlineFactory() {
	
}



//
// Method to create new OutlineATR object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineATR = function(atr) {
	return new OutlineATR(this, atr);
}



//
// Method to create new OutlineDF object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineDF = function(card, id, name, profile) {
	return new OutlineDF(this, card, id, name, profile);
}



//
// Method to create new OutlineApplet object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineApplet = function(instance) {
	throw new GPError("CardOutlineFactory", GPError.INVALID_USAGE, 0, "Must overwrite newOutlineApplet to use explorer functionality");
}



//
// Method to create new OutlineEF object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineEF = function(df, name, profile) {
	return new OutlineEF(this, df, name, profile);
}



//
// Method to create new OutlineDataObject object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineDataObject = function(df, id, name, format) {
	return new OutlineDataObject(this, df, id, name, format);
}



//
// Method to create new OutlineFCP object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineFCP = function(fcp) {
	return new OutlineFCP(this, fcp);
}



//
// Method to create new OutlineRecord object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineRecord = function(ef, no, efdesc) {
	return new OutlineRecord(this, ef, no, efdesc);
}



//
// Method to create new DataOutline object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newDataOutline = function(data, format) {
	return new DataOutline(this, data, format);
}
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Core classes to construct card outlines
 *
 * Changes to Version 1.0
 *
 *  - Added support for nested DF structures (requires updated application profiles)
 *  - Added support for PKCS#15 / ISO 7816-15 formatted cards
 *
 */



load("tools/FCPDecorator.js");
load("tools/CRTDecorator.js");
load("tools/ARRDecorator.js");
load("tools/p15classes.js");


//
// CTOR - OutlineCard default
//
function OutlineCard(outlineFactory, card, applicationFactory, aidlist) {

	this.factory = outlineFactory;
	this.card = card;
	this.af = applicationFactory;
	this.presetaidlist = aidlist;

	this.atr = card.reset(Card.RESET_COLD);

	this.pkcs15 = new PKCS15(card);

	// Create OutlineNode object and register in card object

	var name = card.profile.CardManufacturerProduct.Name;

	if (!name) {
		name = "Card";
	}

	var view = new OutlineNode(name);
	view.setUserObject(this);
	this.view = view;
}



//
// Expand clicked on node
//
// Read application list from EF_DIR or from card profile
//
OutlineCard.prototype.expandListener = function() {
	if (this.expanded)
		return;

	var view = this.view;

	//
	// Display ATR
	//
	var atrnode = this.factory.newOutlineATR(this.atr);

	view.insert(atrnode.view);

	//
	// Get list of application instances from card profile
	//
	var applicationInstances = this.card.profile.ApplicationInstances.ApplicationInstance;

	//
	// Make sure that we got a list
	//
	assert(applicationInstances instanceof Array);

	//
	// Try reading the EF_DIR
	//
	var hasEFDIR = true;

	var aidlist = new Array();

	try	{
		this.pkcs15.readApplicationDirectory();
		aidlist = this.pkcs15.getAidList();
		aidlist["3F00"] = null;
	}
	catch(e) {
		print("Exception selecting EF_DIR. Assuming no EF_DIR...\n" + e);
		hasEFDIR = false;

		//
		// Create application list from card profile
		//
		for (var aid in  applicationInstances) {
			if (aid == "arrayIndex")
				continue;
			aidlist[aid] = null;
		}
	}

	var sortedaidlist = new Array();
	for (var aid in aidlist) {
		sortedaidlist.push(aid);
	}

	if (this.presetaidlist) {
		for (var i = 0; i < this.presetaidlist.length; i++) {
			sortedaidlist.push(this.presetaidlist[i]);
		}
	}

	sortedaidlist.sort();

	for (var i = 0; i < sortedaidlist.length; i++) {
		var aid = sortedaidlist[i];
		var at = aidlist[aid];
		var applinstance = applicationInstances[aid.toString(HEX)];
		if (applinstance) {
/*
			print("from Card Profile: " + applinstance);
			print("  Label     : " + applinstance.Label);
			print("  AID       : " + applinstance.AID);
			print("  ProfileID : " + applinstance.ProfileID);
*/
			var uniqueId = new ByteString(applinstance.ProfileID, HEX);

			var instance = this.af.getApplicationInstance(new Object(), new ByteString(aid, HEX), this.card, uniqueId);

			var struct = null;

			if (instance.profile.DataStructure) {
				struct = instance.profile.DataStructure;
			}

			var path;
			if (aid.length <= 4) {
				path = ":" + aid.toString(HEX);
			} else {
				path = "#" + aid.toString(HEX);
			}

			var applentry;
			if (struct) {
				applentry = this.factory.newOutlineDF(this.card, null, path, applinstance.Label, struct);
			} else {
				applentry = this.factory.newOutlineApplet(instance);
			}
			view.insert(applentry.view);
	  	} else {
	  		print("No profile found for aid " + aid);
	  	}
	  	if (at) {
			if ((!at.ddo) && ((aid == "A000000063504B43532D3135") || (aid.substr(0, 10) == "E828BD080F"))) {
				var t = new ASN1(new ByteString("7300", HEX));
				at.ddo = new PKCS15_CIODDO(t);
		  	}
		  	if (at.ddo) {
				var applentry;
				applentry = this.factory.newOutlinePKCS15(this.pkcs15, aid, at);
				view.insert(applentry.view);
	  		}
	  	}
	}

	this.expanded = true;
}





//
// CTOR - ATR Outline
//
function OutlineATR(factory, atr) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
	this.atr = atr;

	// Create OutlineNode object and register in ATR object
	var view = new OutlineNode("ATR=" + this.atr.toByteString().toString(HEX));
	view.setIcon("atr");
	view.setUserObject(this);
	view.setToolTip("Click to decode ATR");
	this.view = view;
}


OutlineATR.prototype.selectedListener = function() {
	print(this.atr);
}





//
// CTOR - FCP Outline
//
function OutlineFCP(factory, fcp) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
	this.fcp = fcp;

	// Create OutlineNode object and register in FCP object
	var view = new OutlineNode("FCP=" + this.fcp.toString(HEX));
	view.setIcon("header");
	view.setUserObject(this);
	this.view = view;

	if ((fcp.byteAt(0) == 0x62) ||
		(fcp.byteAt(0) == 0x64) ||
		(fcp.byteAt(0) == 0x6F)) {
		try	{
			var asn = new ASN1(this.fcp);
			FCPDecorator(asn);
			view.insert(asn);
		}
		catch(e) {
			print(e);
			print("Unable to decode FCP structure");
		}
	} else {
	}
}





//
// CTOR - Outline node for DFs
//
function OutlineDF(factory, card, parentdf, id, name, profile) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
	this.card = card;
	this.parentdf = parentdf;
	this.id = id;

	// Create OutlineNode object and register in OutlineDF object
	var view = new OutlineNode(name, true);
	view.setUserObject(this);
	this.view = view;

	this.profile = profile;
}





//
// Event handler for expand notifications
//
OutlineDF.prototype.expandListener = function() {

	if (this.expanded)
		return;

	var view = this.view;

	var eflist = null;
	if (this.profile && this.profile.FileStructure) {
		eflist = this.profile.FileStructure.EF;
	}

	var dflist = null;
	if (this.profile && this.profile.DirectoryStructure) {
		dflist = this.profile.DirectoryStructure.DF;
	}

	var dolist = null;
	if (this.profile && this.profile.DataObjectStructure) {
		dolist = this.profile.DataObjectStructure.DF;
	}

	try	{
		var df;

		if (this.parentdf) {
			df = new CardFile(this.parentdf.df, this.id);
			} else {
			df = new CardFile(this.card, this.id);
			}
		this.df = df;

		var fcp = df.getFCPBytes();
		if (fcp && (fcp.length > 1)) {
			var fcpmodel = this.factory.newOutlineFCP(fcp);
			view.insert(fcpmodel.view);
		}

		if (dflist) {
			for (var i = 0; i < dflist.length; i++) {
				var dfp = dflist[i];

				var sdf = this.factory.newOutlineDF(this.card, this, ":" + dfp.fid, dfp.name, dfp);
				view.insert(sdf.view);
			}
		}

		if (eflist) {
			for (var i = 0; i < eflist.length; i++) {
				var ef = this.factory.newOutlineEF(this.df, eflist[i].name, eflist[i]);
				view.insert(ef.view);
			}
		}

		if (dolist) {
			for (var i = 0; i < dolist.length; i++) {
				var doo = this.factory.newOutlineDataObject(this.df, dolist[i].id, dolist[i].name, dolist.format);
				view.insert(doo.view);
			}
		}
	}
	catch(e) {
		print(e);
	}

	this.expanded = true;
}



//
// CTOR - Outline node for EFs
//
function OutlineEF(factory, df, name, profile) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
	this.df = df;

	// Create OutlineNode object and register in OutlineEF object
	var view = new OutlineNode(name, true);
	view.setIcon("document");
	view.setUserObject(this);
	this.view = view;

	this.profile = profile;
}



//
// Event handler for expand notification
//
OutlineEF.prototype.expandListener = function() {
	if (this.expanded)
		return;

	var view = this.view;
	var efdesc = this.profile;

	try	{
		var ef = new CardFile(this.df, ":" + efdesc.fid);
	}
	catch(e) {
		print(e);
		return;
	}

	var isTransparent = true;
	var fcp = ef.getFCPBytes();
	var filelength = -1;
	if (fcp && (fcp.length > 1)) {
		var fcpmodel = this.factory.newOutlineFCP(fcp);
		view.insert(fcpmodel.view);
		isTransparent = ef.isTransparent();
		filelength = ef.getLength();
	} else {
		isTransparent = (efdesc.type == "T");
	}

	if (isTransparent) {
		try	{
			if (filelength > 0) {
				var bs = ef.readBinary(0, filelength);
			} else {
				var bs = ef.readBinary();
			}
		}
		catch(e) {
			print(e);
			this.expanded = true;
			return;
		}

		var bindata = this.factory.newDataOutline(bs, efdesc.format);
		view.insert(bindata.view);

	} else {
		for (var rec = 1; rec < 255; rec++) {
			try {
				ef.readRecord(rec);
				var record = this.factory.newOutlineRecord(ef, rec, efdesc);
				view.insert(record.view);
			}
			catch(e) {
				if ((e instanceof GPError) && (e.reason == 0x6A83))
					break;
				print(e);
				break;
			}
		}
	}

	this.expanded = true;
}




//
// CTOR - Outline node for data object retrievable with GET_DATA
//
function OutlineDataObject(factory, df, id, name, format) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
	this.df = df;
	this.id = id;
	this.format = format;

	// Create OutlineNode object and register in OutlineEF object
	print(name + "(" + id.toString(16) + ")");
	var view = new OutlineNode(name + "(" + id.toString(16) + ")", true);
	view.setIcon("document");
	view.setUserObject(this);
	this.view = view;
}



//
// Event handler for expand notification
//
OutlineDataObject.prototype.expandListener = function() {
	if (this.expanded)
		return;

	var view = this.view;

	var card = this.df.card;

	var bs = card.sendApdu(0x00, 0xCA, this.id >> 8, this.id & 0xFF, 0);

	if (card.SW != 0x9000) {
		var bs = card.sendApdu(0x80, 0xCA, this.id >> 8, this.id & 0xFF, 0);
	}

	if (card.SW != 0x9000) {
		print("Error getting object: " + card.SWMSG);
	} else {
		var bindata = this.factory.newDataOutline(bs, this.format);
		view.insert(bindata.view);
	}

	this.expanded = true;
}




//
// CTOR - Outline for records in an EF
//
function OutlineRecord(factory, ef, no, efdesc) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
	this.ef = ef;
	this.no = no;
	this.efdesc = efdesc;

	// Create OutlineNode object and register in OutlineRecord object
	var view = new OutlineNode("Record#" + no, true);
	view.setIcon("record");
	view.setUserObject(this);
	this.view = view;
}



//
// Expand event handler for records
//
OutlineRecord.prototype.expandListener = function() {
	if (this.expanded)
		return;

	var view = this.view;
	var ef = this.ef;

	var bs = ef.readRecord(this.no);

	var bindata = this.factory.newDataOutline(bs, this.efdesc.format);
	view.insert(bindata.view);

	this.expanded = true;
}





//
// CTOR - Binary data outline
//
function DataOutline(factory, data, format) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
	this.data = data;
	this.format = format;

	var ddata = data;
	if (ddata.length > 256) {
		ddata = data.bytes(0, 256);
	}

	var view = new OutlineNode(ddata.toString(HEX));
	view.setIcon("binary");
	view.setUserObject(this);
	view.setToolTip("Select format from context menu");
	view.setContextMenu(DataOutline.ctxMenuList);
	this.view = view;
	this.decorate(format);
}


DataOutline.ctxMenuList = ["as Hexdump", "as ASN1", "as X509"];

DataOutline.prototype.decorate = function(format) {

	var view = this.view;
	var data = this.data;

	if (format && ((format.substr(0, 4) == "asn1") || (format.substr(0, 7) == "tlvlist")) && (data.length >= 2)) {
		var i = format.indexOf(".");

		if ((i > 0) && (format.substr(i + 1) == "striprecordheader")) {
			data = data.bytes(2);
		}

		var total = data.length;

		while(total >= 2) {
			try	{
				var asn = new ASN1(data);
			}
			catch(e) {
				print("Error in TLV structure: " + e);
				return;
			}

			this.asn = asn;
			this.asn1DecoratorHook(format);
			view.insert(asn);
			total -= asn.size;

			if (format.substr(0, 3) == "asn") {
				break;
			}

			data = data.bytes(asn.size);
			if ((data.length == 0) || (data.byteAt(0) == 0x00) || (data.byteAt(0) == 0xFF)) {
				break;
			}
		}

		if (total > 0) {
			var sparecontent = new OutlineNode(total + " spare bytes");
			view.insert(sparecontent);
		}
	}
}



DataOutline.prototype.asn1DecoratorHook = function(format) {
	var i = format.indexOf(".");

	if (i > 0) {
		switch(format.substr(i + 1)) {
		case "arr" :
			ARRDecorator(this.asn);
			break;
		}
	}
}



DataOutline.prototype.actionListener = function(node, action) {
	print("--------------------------------------------------------------------------------");

	switch(action) {
		case DataOutline.ctxMenuList[0]:
			print(this.data);
			break;
		case DataOutline.ctxMenuList[1]:
			var asn;
			try	{
				asn = new ASN1(this.data);
				print(asn);
			}
			catch(e) {
				print("Error in TLV structure: " + e);
				return;
			}
			break;
		case DataOutline.ctxMenuList[2]:
			try 	{
				var x509 = new X509(this.data);
				print(x509.toString());
			}
			catch(e) {
				print(e);
			}
			break;
	}
}



//
// CTOR - Outline node for PKCS15 structures
//
function OutlinePKCS15(factory, pkcs15, aid, at) {
	if (arguments.length == 0)
		return;

	this.factory = factory;
	this.pkcs15 = pkcs15;
	this.aid = aid;
	this.at = at;

	var name = this.at.label;
	if (!name) {
		name = aid;
	}

	name = "PKCS#15 \"" + name + "\"";

	// Create OutlineNode object and register in OutlineDF object
	var view = new OutlineNode(name, true);
	view.setUserObject(this);
	this.view = view;
}





//
// Event handler for expand notifications
//
OutlinePKCS15.prototype.expandListener = function() {

	if (this.expanded)
		return;

	var view = this.view;
	var at = this.at;

	if (!at.ddo.ciaInfoPath) {
		// Set a default path 5032 to EF.CIAInfo
		var tlv = new ASN1(new ByteString("300404025032", HEX));
		at.ddo.ciaInfoPath = new PKCS15_Path(tlv);
		at.ddo.ciaInfoPath.aid = "#" + this.aid;
	}

	var cia = this.pkcs15.getCIAInfo(at.ddo.ciaInfoPath);

	var label = cia.label;
	if (!label) {
		label = "CIAInfo";
	} else {
		label = "CIAInfo \"" + label + "\"";
	}

	cia.tlv.setName(label);
	view.insert(cia.tlv);

	if (!at.ddo.odfPath) {
		// Set a default path 5031 to EF.OD
		var tlv = new ASN1(new ByteString("300404025031", HEX));
		at.ddo.odfPath = new PKCS15_Path(tlv);
		at.ddo.odfPath.aid = "#" + this.aid;
	}

	this.pkcs15.readObjectListForApplication(at);

	for (var i = 0; i < at.objlist.length; i++) {
		var o = at.objlist[i];

		var label = o.label;
		if (!label) {
			label = o.type;
		} else {
			label = o.type + " \"" + label + "\"";
		}

		if ((o.type == "X509Certificate") || (o.type == "TrustedX509Certificate") || (o.type == "UsefulX509Certificate")) {
			var onode = new OutlineNode(label, true);
			view.insert(onode);
			o.tlv.setName("CIO");
			onode.insert(o.tlv);

			if (o.value && (o.value instanceof PKCS15_Path)) {
				try	{
					var bs = this.pkcs15.readCardObject(this.pkcs15.df, o.value);
					var bindata = this.factory.newDataOutline(bs, "asn1.x509");
					onode.insert(bindata.view);
				}
				catch(e) {
					print("Unable to read certificate: " + e);
				}
			}
		} else {
			o.tlv.setName(label);
			view.insert(o.tlv);
		}
	}

	this.expanded = true;
}





//
// CTOR - OutlineFactory
// Derive from this class to include custom made outline elements
//
function CardOutlineFactory() {

}



//
// Method to create new OutlineATR object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineATR = function(atr) {
	return new OutlineATR(this, atr);
}



//
// Method to create new OutlineDF object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineDF = function(card, parentdf, id, name, profile) {
	return new OutlineDF(this, card, parentdf, id, name, profile);
}



//
// Method to create new OutlineApplet object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineApplet = function(instance) {
	throw new GPError("CardOutlineFactory", GPError.INVALID_USAGE, 0, "Must overwrite newOutlineApplet to use explorer functionality");
}



//
// Method to create new OutlinePKCS15 object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlinePKCS15 = function(pkcs15, aid, at) {
	return new OutlinePKCS15(this, pkcs15, aid, at);
}



//
// Method to create new OutlineEF object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineEF = function(df, name, profile) {
	return new OutlineEF(this, df, name, profile);
}



//
// Method to create new OutlineDataObject object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineDataObject = function(df, id, name, format) {
	return new OutlineDataObject(this, df, id, name, format);
}



//
// Method to create new OutlineFCP object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineFCP = function(fcp) {
	return new OutlineFCP(this, fcp);
}



//
// Method to create new OutlineRecord object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newOutlineRecord = function(ef, no, efdesc) {
	return new OutlineRecord(this, ef, no, efdesc);
}



//
// Method to create new DataOutline object
//
// Overwrite if you want to tailor this behaviour
//
CardOutlineFactory.prototype.newDataOutline = function(data, format) {
	return new DataOutline(this, data, format);
}
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Function to name tags contained in FCP, FMD or FCI data structure
 */



//
// Decorator for security attributes in FCPs
//
function SADecorator(asn1) {
	var recurse = false;
	
	switch(asn1.tag) {
	case 0x86:
		asn1.setName("proprietarySecurityAttributes");
		break;
	case 0x8B:
		asn1.setName("securityAttributeReferenceExpanded");
		break;
	case 0x8C:
		asn1.setName("securityAttributeCompact");
		break;
	case 0x8B:
		asn1.setName("securityAttributeExtended");
		break;
	case 0xA0:
		asn1.setName("securityAttributeForDataObjects");
		recurse = true;
		break;
	case 0xA1:
		asn1.setName("securityAttributeForInterfaces");
		recurse = true;
		break;
	case 0xAB:
		asn1.setName("securityAttributeTemplateExpanded");
		for (var i = 0; i < asn1.elements; i++) {
			ARRDecorator(asn1.get(i));
		}
		break;
	}
	
	if (recurse) {
		for (var i = 0; i < asn1.elements; i++) {
			SADecorator(asn1.get(i));
		}
	}
}



//
// Identify tags in the FCP and assign a name
//
function FCPDecorator(asn1) {
	switch(asn1.tag) {
	case 0x62:
		asn1.setName("FCP");
		break;
	case 0x64:
		asn1.setName("FMD");
		break;
	case 0x6F:
		asn1.setName("FCI");
		break;
	}
	
	for (var i = 0; i < asn1.elements; i++) {
		var t = asn1.get(i);
		switch(t.tag) {
		case 0x80:
			t.setName("numberOfBytes");
			break;
		case 0x81:
			t.setName("numberOfBytesStructural");
			break;
		case 0x82:
			t.setName("fileDescriptor");
			break;
		case 0x83:
			t.setName("fileIdentifier");
			break;
		case 0x84:
			t.setName("dFName");
			break;
		case 0x85:
			t.setName("proprietaryInformationPlain");
			break;
		case 0x87:
			t.setName("idOfFCIExtension");
			break;
		case 0x88:
			t.setName("shortFileIdentifier");
			break;
		case 0x8A:
			t.setName("lifeCycleStatusByte");
			break;
		case 0x8D:
			t.setName("idOfSecurityEnvironmentTemplates");
			break;
		case 0x8B:
			t.setName("securityAttributeExtended");
			break;
		case 0xA5:
			t.setName("proprietaryInformationTLV");
			break;
		case 0xAC:
			t.setName("cryptoMechanismsIdentifier");
			break;
		default:
			SADecorator(t);
		}
	}
}
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Core classes to construct card outlines
 */



load("FCPDecorator.js");
load("CRTDecorator.js");
load("ARRDecorator.js");


//
// CTOR - ATR Outline
// 
function OutlineATR(atr) {
	this.atr = atr;

        // Create OutlineNode object and register in ATR object
        var view = new OutlineNode("ATR=" + this.atr.toByteString().toString(HEX));
        view.setIcon("atr");
        view.setUserObject(this);
        this.view = view;
}


OutlineATR.prototype.selectedListener = function() {
	print(this.atr);
}


//
// CTOR - FCP Outline
//
function OutlineFCP(fcp) {
	this.fcp = fcp;

        // Create OutlineNode object and register in FCP object
        var view = new OutlineNode("FCP=" + this.fcp.toString(HEX));
        view.setIcon("header");
        view.setUserObject(this);
        this.view = view;
        
        try	{
        	var asn = new ASN1(this.fcp);
        	FCPDecorator(asn);
		view.insert(asn);
        }
        catch(e) {
        	print("Unable to decode FCP structure");
        }
}



//
// CTOR - Outline node for DFs
//
function OutlineDF(card, id, name, profile) {
        this.card = card;
        this.id = id;

        // Create OutlineNode object and register in OutlineDF object
        var view = new OutlineNode(name, true);
        view.setUserObject(this);
        this.view = view;
        
        this.profile = profile;
}



//
// Event handler for expand notifications
//
OutlineDF.prototype.expandListener = function() {

        if (this.expanded)
                return;

        var view = this.view;
        var eflist = this.profile.EF;
        
        try	{
        	var df = new CardFile(this.card, this.id);
		this.df = df;
				
		var fcp = df.getFCPBytes();
		if (fcp && (fcp.length > 1)) {
			var fcpmodel = new OutlineFCP(fcp);
			view.insert(fcpmodel.view);	
		}
				
		for (var i = 0; i < eflist.length; i++) {
		        var ef = new OutlineEF(this.df, eflist[i].name, eflist[i]);
		        view.insert(ef.view);
		}
	}
	catch(e) {
		print(e);
	}
        
        this.expanded = true;
}





//
// CTOR - Outline node for EFs
//
function OutlineEF(df, name, profile) {
        this.df = df;

        // Create OutlineNode object and register in OutlineEF object
        var view = new OutlineNode(name, true);
        view.setIcon("document");
        view.setUserObject(this);
        this.view = view;
        
        this.profile = profile;
}



//
// Event handler for expand notification
//
OutlineEF.prototype.expandListener = function() {
        if (this.expanded)
                return;

        var view = this.view;
        var efdesc = this.profile;

	try	{        
	        var ef = new CardFile(this.df, ":" + efdesc.fid);
	}
	catch(e) {
		print(e);
		return;
	}
		
	var isTransparent = true;
	
	if (efdesc.fid.length > 2) {  // Select by FID or SFI
		var fcp = ef.getFCPBytes();
		if (fcp && (fcp.length > 1)) {
			var fcpmodel = new OutlineFCP(fcp);
			view.insert(fcpmodel.view);
			isTransparent = ef.isTransparent();
		} else {
			isTransparent = (efdesc.type == "T");
		}
	}
		
        if (isTransparent) {
        	var filesize = -1;
        	if (fcp) {
	        	filesize = ef.getLength();
	       	
	        	if (filesize > 1024)
	        		print("Please wait, reading " + filesize + " bytes...");
	        } else {
        		print("Please wait, reading card...");
	        }
        		
		try	{
			if (filesize > 0) {
				print("reading " + filesize);
		                var bs = ef.readBinary(0, filesize);
		        } else {
		                var bs = ef.readBinary();
		        }
	        }
	        catch(e) {
	       		print(e);
	       		this.expanded = true;
	       		return;
		}

		var bindata = new DataOutline(bs, efdesc.format);
		view.insert(bindata.view);
		
        } else {
                for (var rec = 1; rec < 255; rec++) {
                        try     {
                                ef.readRecord(rec);
                                var record = new OutlineRecord(ef, rec, efdesc);
                                view.insert(record.view);
                        }
                        catch(e) {
                              	if ((e instanceof GPError) && (e.reason == 0x6A83))
                			break;
                                print(e);
                                break;
                        }
                }
        }
        
        this.expanded = true;
}





//
// CTOR - Outline for records in an EF
//
function OutlineRecord(ef, no, efdesc) {
        this.ef = ef;
        this.no = no;
        this.efdesc = efdesc;
                
        // Create OutlineNode object and register in OutlineRecord object
        var view = new OutlineNode("Record#" + no, true);
        view.setIcon("record");
        view.setUserObject(this);
        this.view = view;
}



//
// Expand event handler for records
//
OutlineRecord.prototype.expandListener = function() {
        if (this.expanded)
                return;

        var view = this.view;
        var ef = this.ef;

        var bs = ef.readRecord(this.no);

	var bindata = new DataOutline(bs, this.efdesc.format);
	view.insert(bindata.view);
        
        this.expanded = true;
}



//
// CTOR - Binary data outline
//
function DataOutline(data, format) {
	this.data = data;

	var ddata = data;
	if (ddata.length > 256) {
		ddata = data.bytes(0, 256);
	}
	
	var view = new OutlineNode(ddata.toString(HEX));
        view.setIcon("binary");
	view.setUserObject(this);
	this.view = view;
	
	if (((format == "asn1") || (format == "tlvlist")) && (data.length >= 2)) {
                var total = data.length;
                
                while(total >= 2) {
                	try	{
	                        var asn = new ASN1(data);
	                }
	            	catch(e) {
	            		print("Exception creating ASN.1 object: " + e);
	            		break;
	            	}
                        view.insert(asn);
                        total -= asn.size;
                        
                        if (format == "asn1") {
                                break;
                        }

                        data = data.bytes(asn.size);
                        if ((data.length == 0) || (data.byteAt(0) == 0x00) || (data.byteAt(0) == 0xFF)) {
                                break;
                        }
                }
                        
                if (total > 0) {
                        var sparecontent = new OutlineNode(total + " spare bytes");
                        view.insert(sparecontent);
                }
        }
}



DataOutline.prototype.selectedListener = function() {
	print("--------------------------------------------------------------------------------");
	print(this.data);
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Core elements of a test group containing individual test cases
 */



/**
 * Create a test group object containing test cases.
 * 
 * @class
 * <p>Abstract base class implementing a group of test cases.</p>
 * <p>Actual test group objects are derived from this base class.</p>
 * <p>Each test case is created as a method of this object.</p>
 * @constructor
 * @param {String} name the name of the test group
 * @param {Object} parameter the parameter object for this group of tests
 */
function TestGroup(name, parameter) {

	this.name = name;
	this.parameter = parameter;
//	this.logfile = new String("--- TestGroup " + name + "\n");
	this.marker = null;
	
//	print("TestGroup constructor called");
}



/**
 * Log a text message.
 * 
 * @param {String} message the message to add to the log
 */
TestGroup.prototype.log = function(message) {
	GPSystem.trace(message);
//	this.logfile += message + "\n";
//	print(message);
}



/**
 * Setup method called before invoking each individual test case.
 */
TestGroup.prototype.setUp = function() {
//	this.log("TestGroup.setUp() called");
}



/**
 * Teardown method called after invocation of a test case.
 */
TestGroup.prototype.tearDown = function() {
//	this.log("TestGroup.tearDown() called");
}



/**
 * Verify that the given assertion evaluates to true. Throw an exception if result is false.
 * 
 * @param {Boolean} result true if assertion is valid
 * @param {String} message the message to log in case result is false
 */
TestGroup.prototype.assertTrue = function(result, message) {
	if (!result) {
		if (this.marker) {
			throw new Error("Assertion failed for [" + this.marker + "]: " + message);
		} else {
			throw new Error("Assertion failed: " + message);
		}
	}
}



/**
 * Verify that the given values are equal. Throw an exception if not.
 * 
 * @param {Any} first the first argument
 * @param {Any} second the second argument
 * @param {String} message the message to log in case result is false
 */
TestGroup.prototype.assertEquals = function(first, second, message) {
	if (first != second) {
		if (this.marker) {
			throw new Error("Assertion failed for [" + this.marker + "]: " + message);
		} else {
			throw new Error("Assertion failed: " + message);
		}
	}
}



/**
 * Sets a marker used to identify a context in which an assertion failed.
 * 
 * <p>A context can be a certain iteration
 * or group of assertions. A marker allows to further identify the area of a problem.</p>
 * 
 * @param {String} marker the marker to set
 */
TestGroup.prototype.setMarker = function(marker) {
	this.marker = marker;
}



/**
 * Returns the name of test group.
 * 
 * @type String
 * @return the name of the test group
 */
TestGroup.prototype.getName = function() {
		return this.name;
}



/**
 * Returns a list of tests as sorted array of test case names.
 * 
 * @type String[]
 * @return the sorted array of test case names
 */
TestGroup.prototype.getTestCaseNames = function() {
	var tests = new Array();
	
	for (f in this) {
		if (f.substr(0, 4) == "case") {
			if (this[f] instanceof Function) {
				tests.push(f.substr(4));
			}
		}
	}

	tests.sort();
	return tests;
}



/**
 * Returns a specific test case function.
 * 
 * @param {String} name the test case name
 * @type Function
 * @return the test case method
 */
TestGroup.prototype.getTestCase = function(name) {
	return this["case" + name];
}



/**
 * Returns a list of test procedure names referenced by a test case.
 * 
 * @param {String} test case name
 * @type String[]
 * @return a list of test procedure names or undefined
 */
TestGroup.prototype.getUsedTestProceduresForTestCase = function(name) {
	if (this.constructor.prototype.usedProcedures) {
		return this.constructor.prototype.usedProcedures[name];
	} else {
		return undefined;
	}
}



/**
 * Run a named test procedure.
 * 
 * <p>This method is called by code in a test case to run a test procedure.</p>
 * <p>This method uses the test runner to create a new instance of the test procedure object.
 * All test steps in the procedure are executed and the test procedure object is returned to
 * the caller for further processing of test results.</p>
 * 
 * @param {String} name the test procedure name
 * @param {Object} param the parameter object to pass to the execution of the test procedure
 * @type TestProcedure
 * @return the test procedure object
 */
TestGroup.prototype.runTestProcedure = function(name, param) {
	if (!this.testRunner) {
		throw new GPError("TestGroup", GPError.INVALID_USAGE, 0, "No test runner defined");
	}
	var proc = this.testRunner.getTestProcedure(name);
	var test = new proc(name, this, param);
	test.run();
	
	return test; 
}



/**
 * Report progress of passed steps in a test procedure to the test runner. This method is used internally.
 * 
 * @private
 * @param {String} procedure the procedure name
 * @param {String} step the step name
 */
TestGroup.prototype.reportProgress = function(procedure, step) {
	if (this.testRunner) {
		var runner = this.testRunner;
		var uniqueName = this.currentTestCase + "/" + procedure + "/" + step;
		runner.hasPassed(uniqueName, null);
	}
}



/**
 * Initialize a test run. This method is used internally.
 * @private
 */
TestGroup.prototype.initTestRun = function() {
	this.marker = null;
}



/**
 * Run a single test case. This method is called internally. Use {@link #runTestCase} for running a single test case.
 * 
 * @private
 * @type boolean
 * @return true if test passed
 */
TestGroup.prototype.runTestCaseInternal = function(casename, runner) {
	var result = false;
	this.currentTestCase = this.name + "/" + casename;
	this.testRunner = runner;

//	this.logfile = "";

	var starttime = new Date();
	GPSystem.markTrace();
	logentry = "+ TestCase " + this.currentTestCase + " started " + starttime;
	print(logentry);
	this.log(logentry);
	try {
		this.setUp();
		var func = this.getTestCase(casename);
		func.call(this);
		this.tearDown();
		var endtime = new Date();
		logentry = "+ TestCase " + this.currentTestCase + " completed on " + endtime + " after " + (endtime.valueOf() - starttime.valueOf()) + " ms";
		print(logentry);
		this.log(logentry);
		if (runner) {
			var logfile = GPSystem.copyTrace();
			runner.hasPassed(this.currentTestCase, logfile);
		}
		result = true;
	}
	catch(e) {
		var endtime = new Date();
		logentry = "+ TestCase " + this.currentTestCase + " failed on " + endtime + " after " + (endtime.valueOf() - starttime.valueOf()) + " ms";
		print(logentry);
		this.log(logentry);
		
		logentry = "  ### - " + e;
		print(logentry);
		this.log(logentry);
		for (j in e) {
			logentry = "  ### " + j + " = " + e[j];
			print(logentry);
			this.log(logentry);
		}
		
		if (runner) {
			var logfile = GPSystem.copyTrace();
			runner.hasFailed(this.currentTestCase, logfile);
		}
	}
	return result;
}



/**
 * Runs all tests in a test group.
 * 
 * <p>This method can be used to run a test group without a test runner. In that case leave the runner
 * argument empty or null.</p>
 * 
 * @param {TestRunner} runner the test runner to report progress or undefined or null
 */
TestGroup.prototype.run = function(runner) {
	this.initTestRun();
	
	var tests = this.getTestCaseNames();
	
	var startgroup = new Date();
	var logentry = "TestGroup " + this.name + " started " + startgroup;
	var failures = 0;
	print(logentry);
	this.log(logentry);
	
	for (var i = 0; i < tests.length; i++) {
		var uniqueName = this.name + "/" + tests[i];
		
		if (runner) {
			if (!runner.isEnabled(uniqueName))
				continue;
		}
		
		if (!this.runTestCaseInternal(tests[i], runner)) {
			failures++;
		}
	}

	var endgroup = new Date();
	logentry = "TestGroup " + this.name + " completed on " + endgroup + " with " + failures + " failed tests";
	print(logentry);
	this.log(logentry);
}



/**
 * Run a single test in a test group, optionally using a test runner.
 * 
 * @param {String} casename the name of the test case
 * @param {TestRunner} the test runner object or undefined or null
 */
TestGroup.prototype.runTestCase = function(casename, runner) {
	this.initTestRun();
	this.runTestCaseInternal(casename, runner);
}
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Core elements of a test procedure
 */


//
// Constructor
// 
function TestProcedure(name, testgroup, parameter) {

	this.name = name;
	this.testgroup = testgroup;
	this.parameter = parameter;
//	print("TestProcedure constructor called");
}



//
// Log message to console
// 
TestProcedure.prototype.log = function(message) {
	this.testgroup.log(message);
//	print(message);
}



//
// Setup object for a test procedure
//
TestProcedure.prototype.setUp = function() {
//	this.log("TestProcedure.setUp() called");
}



//
// Remove residue from test procedure
// 
TestProcedure.prototype.tearDown = function() {
//	this.log("TestProcedure.tearDown() called");
}



//
// Verify that assertion is true
//
TestProcedure.prototype.assertTrue = function(result, message) {
	this.testgroup.assertTrue(result, message);
}



//
// Verify that expressions are equal
//
TestProcedure.prototype.assertEquals = function(first, second, message) {
	this.testgroup.assertEquals(first, second, message);
}



//
// Run all tests in a test procedure
//
TestProcedure.prototype.run = function() {
	var steps = new Array();
	
	for (f in this) {
		if (f.substr(0, 4) == "step") {
			if (this[f] instanceof Function) {
				steps.push(f);
			}
		}
	}

	steps.sort();
	
	for (var i = 0; i < steps.length; i++) {
		var step = steps[i].substr(4);
//		print("    Step " + step + " of procedure " +  this.name);
		this.setUp();
		this[steps[i]].call(this);
		this.tearDown();

		var testgroup = this.testgroup;
		testgroup.reportProgress(this.name, step);
	}
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Test runner framework
 */



/**
 * Create a test runner using a Smart Card Shell outline for navigation
 *
 * @class Class implementing a graphical test runner
 * @constructor
 * @param {String} name the test suite name
 */
function TestRunner(name) {

	this.name = name;
	this.testGroupRunners = new Array();
	this.testProcedures = new Array();
	this.testMapper = new Array();
	this.testGroupPrototype = new TestGroup();
	this.testProcedurePrototype = new TestProcedure();
	this.testReport = new TestReport();
	
	// Create root node and set as view
	var view = new OutlineNode(name, true);
	if (typeof(view.expand) == "function") {
		view.setContextMenu(["run", "clear", "report", "expand", "collapse"]);
	} else {
		view.setContextMenu(["run", "clear", "report"]);
	}
	view.setUserObject(this);
	this.view = view;

	view.show();
}



/**
 * Set directory to write reports
 *
 * @param {String} dir the directory to store reports
 */
TestRunner.prototype.setReportDirectory = function(dir) {
	this.reportDir = dir;
}



/**
 * Event listener for actions selected from context menu
 *
 * @param {Object} source the outline node for which the action was invoked
 * @param {String} actionName the name of the action selected
 */
TestRunner.prototype.actionListener = function(source, actionName) {
	switch(actionName) {
	case "run" :
		this.run();
		break;
	case "clear" :
		this.clearResults();
		break;
	case "report" :
		this.report();
		break;
	case "expand" :
		this.expandAll();
		break;
	case "collapse" :
		this.collapseAll();
		break;
	}
}



/**
 * Expand all test groups
 */
TestRunner.prototype.expandAll = function() {
	for each (c in this.view.childs) {
		c.expand();
	}
}



/**
 * Collapse all test groups
 */
TestRunner.prototype.collapseAll = function() {
	for each (c in this.view.childs) {
		c.collapse();
	}
}



/**
 * Write test report
 */
TestRunner.prototype.report = function() {
	var fn = GPSystem.dateTimeByteString().toString(HEX) + "_TestReport.xml";
	if (this.reportDir == undefined) {
		var fn = GPSystem.mapFilename(fn, GPSystem.USR);
	} else {
		var fn = this.reportDir + "/" + fn;
	}
	var fn = Dialog.prompt("Select output file for report", fn, null, "*.xml");
	if (fn != null) {
		this.testReport.writeReport(fn);
		print("Report written to " + fn);
	}
}



/**
 * Add a test group to the test runner
 *
 * <p>This call will iterate through all test cases and locate used procedures and steps.</p>
 *
 * @param {TestGroup} testGroup the test group object
 */
TestRunner.prototype.addTestGroup = function(testGroup) {
	var tgrs = this.testGroupRunners;
	
	tgr = new TestGroupRunner(this, testGroup);

	tgrs.push(tgr);

	var view = this.view;	
	view.insert(tgr.view);
}



/**
 * Create test group from XML file and add to test runner
 *
 * @param {String} file the file name containing the test group
 * @param {Object} parameter the parameter object
 */
TestRunner.prototype.addTestGroupFromXML = function (file, parameter) {
	// Parse XML file.
	var parser = new GPXML();
	parser.defineArrayElement("/testgroup", "testcase,function", "id,Name");
	parser.defineArrayElement("/testgroup/testcase/procedures", "procedure");
	var xml = parser.parse(file);

	// Determine CTOR function
	var ctor = xml.constructor.Script;
	if (!ctor) {
		// Use a default constructor unless defined in XML profile
		ctor = function(name, parameter) { TestGroup.call(this, name, parameter); };
	}
	
	// Make CTOR available in scope object
	// this[xml.id] = ctor;
	
	// Set correct prototype object
	ctor.prototype = new TestGroup();
	ctor.prototype.constructor = ctor;
	ctor.prototype.usedProcedures = new Array();
	
	// Add test cases to prototype object
	var testcases = xml.testcase;
	for (var i in testcases) {
		if (i != "arrayIndex") {
			var s = testcases[i].Script;
			s.XML = testcases[i];
			ctor.prototype["case" + i] = s;
			if (testcases[i].procedures) {
				var procedures = testcases[i].procedures.procedure;
				ctor.prototype.usedProcedures[i] = new Array();
				
				for (var p = 0; p < procedures.length; p++) {
					ctor.prototype.usedProcedures[i].push(procedures[p].id);
				}
			}
		}
	}
	
	// Add setup function to prototype object
	if (xml.setup) {
		ctor.prototype["setUp"] = xml.setup.Script;
	}
	
	// Add teardown function to prototype object
	if (xml.teardown) {
		ctor.prototype["tearDown"] = xml.teardown.Script;
	}
	
	// Add functions to prototype object
	var functions = xml["function"];
	for (var i in functions) {
		if (i != "arrayIndex") {
			var s = functions[i].Script;
			ctor.prototype[i] = s;
		}
	}
	
	ctor.XML = xml;
	
	var tc = new ctor(xml.id, parameter);
	
	this.addTestGroup(tc);
}



/**
 * Add a test procedure constructor to the list
 *
 * <p>Use the getName() method to obtain the test procedure name</p>
 *
 * @param {TestProcedure} proc the test procedure object
 */
TestRunner.prototype.addTestProcedure = function(proc) {
	var name = proc.getName();
	if (name) {
		this.testProcedures[name] = proc;
	}
}



/**
 * Create test procedure from XML file and add to test runner
 *
 * @param {String} file the file name containing the test procedure
 * @param {Object} parameter the parameter object
 */
TestRunner.prototype.addTestProcedureFromXML = function (file, parameter) {
	// Parse XML file.
	var parser = new GPXML();
	parser.defineArrayElement("/testprocedure", "teststep,function", "id,Name");
	var xml = parser.parse(file);

	// Determine CTOR function
	var ctor = xml.constructor.Script;
	if (!ctor) {
		// Use a default constructor unless defined in XML profile
		ctor = function(testgroup, name, parameter) { TestProcedure.call(this, testgroup, name, parameter); };
	}

	// Make CTOR available in scope object
	// this[xml.id] = ctor;
	
	// Set correct prototype object
	ctor.prototype = new TestProcedure();
	ctor.prototype.constructor = ctor;
	var teststeps = xml.teststep;
	for (var i in teststeps) {
		if (i != "arrayIndex") {
			var s = teststeps[i].Script;
			ctor.prototype["step" + i] = s;
		}
	}
	if (xml.setup) {
		ctor.prototype["setUp"] = xml.setup.Script;
	}
	if (xml.teardown) {
		ctor.prototype["tearDown"] = xml.teardown.Script;
	}
	
	// Add functions to prototype object
	var functions = xml["function"];
	for (var i in functions) {
		if (i != "arrayIndex") {
			var s = functions[i].Script;
			ctor.prototype[i] = s;
		}
	}

	ctor.XML = xml;
	ctor.getName = function() { return xml.id; };	

	this.testProcedures[xml.id] = ctor;
}



/**
 * Return constructor of test procedure
 *
 * @param {String} name the name of the test procedure
 * @type TestProcedure
 * @return the test procedure object
 */
TestRunner.prototype.getTestProcedure = function(name) {
	return this.testProcedures[name];
}



/**
 * Add test to test mapper, which maps test unique id to listening object
 *
 * @param {String} name the unique test name
 * @param {Object} listener the listener object implementing the clearResults(), enable(), isEnabled(), hasPassed() and hasFailed() methods
 */
TestRunner.prototype.addTest = function(name, listener) {
	this.testMapper[name] = listener;
}



/**
 * Run all test groups
 */
TestRunner.prototype.run = function() {
	for (var i = 0; i < this.testGroupRunners.length; i++) {
		var testGroupRunner = this.testGroupRunners[i];
		testGroupRunner.run();
	}
}



/** 
 * Clear result of last test run
 */
TestRunner.prototype.clearResults = function() {
	for (var i in this.testMapper) {
		var listener = this.testMapper[i];
		if (listener) {
			listener.clearResult();
		}
	}
	this.testReport = new TestReport();
}



/**
 * Enable or disable test
 *
 * @param {String} name the unique test name
 * @param {Boolean} state the enable / disable state
 */
TestRunner.prototype.enable = function(name, state) {
	var listener = this.testMapper[name];
	if (listener && listener.enable) {
		return listener.enable(state);
	} else {
		throw new GPError("TestRunner", GPError.OBJECT_NOT_FOUND, 0, name);
	}
}



/**
 * isEnabled query from TestGroup runner
 *
 * @param {String} name the unique test name
 * @type boolean
 * @return true if the test is enabled
 */
TestRunner.prototype.isEnabled = function(name) {
	var listener = this.testMapper[name];
	if (listener) {
		return listener.isEnabled();
	}
	return true;
}



/**
 * hasPassed Listener
 * 
 * @param {String} name the unique test name
 * @param {String} log the test log
 */
TestRunner.prototype.hasPassed = function(name, log) {
	var listener = this.testMapper[name];
	if (listener) {
		listener.hasPassed(log);
		
		if (listener.getXML) {
			var result = new TestResult(name, true, log, listener.getXML());
			this.testReport.addResult(result);
		}
	} else {
		print("No receiver for passed notification : " + name);
		for (var i in this.testMapper) {
			print("- " + i);
		}
	}
}



/**
 * hasFailed Listener
 * 
 * @param {String} name the unique test name
 * @param {String} log the test log
 */
TestRunner.prototype.hasFailed = function(name, log) {
	var listener = this.testMapper[name];
	if (listener) {
		listener.hasFailed(log);
		if (listener.getXML) {
			var result = new TestResult(name, false, log, listener.getXML());
			this.testReport.addResult(result);
		}
	}
}



/**
 * Create a TestGroupRunner containing the TestCases
 *
 * @class Class implementing a harness to run test groups
 * @constructor
 * @param {TestRunner} testRunner the associated test runner
 * @param {TestGroup= testGroup the test group
 */
function TestGroupRunner(testRunner, testGroup) {
	this.testRunner = testRunner;
	this.testGroup = testGroup;
	
	var view = new OutlineNode(testGroup.getName());
	view.setContextMenu(["run"]);
	view.setUserObject(this);
	
	this.view = view;

	var testcases = testGroup.getTestCaseNames();
	
	for (var i = 0; i < testcases.length; i++) {
		var tcr = new TestCaseRunner(this, testcases[i]);
		view.insert(tcr.view);
	}
}



/**
 * Event listener for context menu
 *
 * @param {Object} source the outline node for which the action was invoked
 * @param {String} actionName the name of the action selected
 */
TestGroupRunner.prototype.actionListener = function(source, action) {
	switch(action) {
	case "run" : 
		this.run();
		break;
	}
}



/**
 * Run this test group
 */
TestGroupRunner.prototype.run = function() {
	var test = this.testGroup;
	
	test.run(this.testRunner);
}




/**
 * Construct a TestCaseRunner object
 *
 * @class Class implementing a test case harness
 * @constructor
 * @param {TestGroupRunner} the parent test group runner
 * @param {String} the test case name
 */
function TestCaseRunner(testGroupRunner, testCase) {
	this.testGroupRunner = testGroupRunner;
	this.testCase = testCase;
	this.selected = true;

	var testRunner = testGroupRunner.testRunner;
	testRunner.addTest(testGroupRunner.testGroup.getName() + "/" + testCase, this);

	this.xml = testGroupRunner.testGroup.getTestCase(testCase).XML;

	var view = new OutlineNode(testCase + " " + this.xml.name.elementValue);

	view.setUserObject(this);
	view.setIcon("selected");
	view.setContextMenu(["select", "deselect", "run"]);
	this.view = view;

	var testGroup = testGroupRunner.testGroup;

	var testprocedures = testGroup.getUsedTestProceduresForTestCase(testCase);

	if (testprocedures) {
		for (var i = 0; i < testprocedures.length; i++) {
			var tpr = new TestProcedureRunner(this, testprocedures[i]);
			view.insert(tpr.view);
		}
	}
}



/**
 * Event listener for context menu
 *
 * @param {Object} source the outline node for which the action was invoked
 * @param {String} actionName the name of the action selected
 */
TestCaseRunner.prototype.actionListener = function(source, actionName) {
	print("Action " + actionName);
	switch(actionName) {
	case "select":
		this.selected = true;
		source.setIcon("selected");
		break;
	case "deselect":
		this.selected = false;
		source.setIcon("deselected");
		break;
	case "run":
		this.run();
		break;
	}
}



/**
 * Run this test case
 */
TestCaseRunner.prototype.run = function() {
	var test = this.testGroupRunner.testGroup;
	
	test.runTestCase(this.testCase, this.testGroupRunner.testRunner);
}



/**
 * Tell test runner if case is enabled
 *
 * @type boolean
 * @return true if enabled
 */
TestCaseRunner.prototype.isEnabled = function() {
	return this.selected;
}



/**
 * Add a log entry to the test case node
 *
 * @param {String} log the test log
 */
TestCaseRunner.prototype.addLog = function(log) {
	var view = this.view;
	var lognode = new TestLogFile(this, log);
	this.log = lognode;
	view.insert(lognode.view);
}



/**
 * Return describing XML element
 *
 * @type Object
 * @return the XML element for this test case
 */
TestCaseRunner.prototype.getXML = function() {
	return this.xml;
}



/**
 * Listener for passed notifications
 *
 * @param {String} log the test log
 */
TestCaseRunner.prototype.hasPassed = function(log) {
	this.failed = false;
	var view = this.view;
	view.setIcon("passed");
	this.addLog(log);
}



/**
 * Listener for failed notifications
 *
 * @param {String} log the test log
 */
TestCaseRunner.prototype.hasFailed = function(log) {
	this.failed = true;
	var view = this.view;
	view.setIcon("failed");
	this.addLog(log);
}



/**
 * Clear result of test
 */
TestCaseRunner.prototype.clearResult = function() {
	this.failed = false;
	var view = this.view;
	if (this.selected) {
		view.setIcon("selected");
	} else {
		view.setIcon("deselected");
	}
}



/**
 * Enable or disable test
 *
 * @param {Boolean} state true for enabled
 */
TestCaseRunner.prototype.enable = function(state) {
	var view = this.view;
	this.selected = state;
	if (this.selected) {
		view.setIcon("selected");
	} else {
		view.setIcon("deselected");
	}
}




/**
 * Constructor for test log entry in outline
 */
function TestLogFile(parent, log) {
	this.log = log;
	
	var view = new OutlineNode("Log from " + Date());
	this.view = view;
	view.setUserObject(this);
}



//
// Listener for node selection - Display log
//
TestLogFile.prototype.selectedListener = function() {
	print("--------------------------------------------------------------------------------");
	print(this.log);
}



// --------------------------------------------
// Constructor for a TestProcedureRunner object
//
function TestProcedureRunner(testCaseRunner, testProcedure) {
	this.testCaseRunner = testCaseRunner;
	this.testProcedure = testProcedure;
	
	var view = new OutlineNode(testProcedure);
	this.view = view;

	var tp = this.testCaseRunner.testGroupRunner.testRunner.testProcedures[testProcedure];

	if (tp) {
		var list = new Array();
		for (var i in tp.prototype) {
			if (i.substr(0, 4) == "step") {
				var step = i.substr(4);
				list.push(step);
			}
		}

		list.sort();
		
		for (var i = 0; i < list.length; i++) {
			var tpsr = new TestStepRunner(this, list[i]);
			view.insert(tpsr.view);
		}
	} else {
		print("No test procedure implementation found for " + testProcedure);
	}
}




// ---------------------------------------
// Constructor for a TestStepRunner object
//
function TestStepRunner(testProcedureRunner, testStep) {
	this.testProcedureRunner = testProcedureRunner;
	this.testStep = testStep;
	
	var view = new OutlineNode(testStep);
	this.view = view;

	var testCaseRunner = testProcedureRunner.testCaseRunner;	
	var testGroupRunner = testCaseRunner.testGroupRunner;
	var testRunner = testGroupRunner.testRunner;
	var testName = testGroupRunner.testGroup.getName() + "/" + 
	               testCaseRunner.testCase + "/" + 
	               testProcedureRunner.testProcedure + "/" +
	               testStep;
	               
	testRunner.addTest(testName, this);
}



//
// Receive passed notifications
//
TestStepRunner.prototype.hasPassed = function() {
	var view = this.view;
	view.setIcon("passed");
}



//
// Clear test result display
//
TestStepRunner.prototype.clearResult = function() {
	var view = this.view;
	view.setIcon();
}



function TestReport() {
	this.testResults = [];
}



TestReport.prototype.addResult = function(result) {
	this.testResults.push(result);
}



TestReport.prototype.writeReport = function(filename) {
	var xml = <testreport/>
	
	for (var i = 0; i < this.testResults.length; i++) {
		var r = this.testResults[i];
		var x = r.toXML();
		xml.testcaseresult += x;
	}

	var os = new java.io.FileOutputStream(filename);
	var fw = new java.io.OutputStreamWriter(os, "UTF-8");

	fw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
	fw.write("<?xml-stylesheet type=\"text/xsl\" href=\"docreport.xsl\" ?>\n");

	fw.write(xml.toXMLString());
	fw.close();
}



function TestResult(id, verdict, log, tcxml) {
	this.id = id;
	this.verdict = verdict;
	this.log = log;
	this.tcxml = tcxml;
}



TestResult.prototype.toXML = function() {
	var source = this.id.split("/")[0];
	var sourceid = this.id.split("/")[1];

	var xml = <testcaseresult id={this.id} source={source} sourceid={sourceid}/>;

	xml.name = <name>{this.tcxml.name.elementValue}</name>;

	xml.verdict = <verdict>{ this.verdict ? "Passed" : "Failed" }</verdict>;
	xml.log = <log>{ "\n" + this.log + "\n" }</log>;
	return xml;
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview
 * Simple CRL generator class
 */

if (typeof(__ScriptingServer) == "undefined") {
	load("pkixcommon.js");
}

 

/**
 * Create a Certificate Revocation List (CRL) generator.
 *
 * @class Class implementing a CRL certificate generator
 * @constructor
 *
 * @param {Crypto} crypto the crypto provider to use for signing operations
 */
function CRLGenerator(crypto) {
	this.crypto = crypto;
	this.reset();
}


CRLGenerator.unspecified = 0;
CRLGenerator.keyCompromise = 1;
CRLGenerator.cACompromise = 2;
CRLGenerator.affiliationChanged = 3;
CRLGenerator.superseded = 4;
CRLGenerator.cessationOfOperation = 5;
CRLGenerator.certificateHold = 6;
CRLGenerator.removeFromCRL = 8;
CRLGenerator.privilegeWithdrawn = 9;
CRLGenerator.aACompromise = 10;



/**
 * Resets all internal state variables.
 *
 */
CRLGenerator.prototype.reset = function() {
	this.extensions = [];
	this.revokedCertificates = [];
	this.nextUpdate = null;
}



/**
 * Sets the isser name.
 *
 * <p>The issuer name must be a JavaScript object containing the properties:</p>
 * <ul>
 *  <li>C - the country</li>
 *  <li>O - the organization</li>
 *  <li>OU - the organization unit</li>
 *  <li>CN - the common name</li>
 * </ul>
 * <p>Example:</p>
 * <pre>
 *	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 * </pre>
 * @param {Object} issuer the issuer name
 */
CRLGenerator.prototype.setIssuer = function(issuer) {
	this.issuer = issuer;
}



/**
 * Sets the timestamp for this CRL
 *
 * @param {Date} datetime the current date and time
 */
CRLGenerator.prototype.setThisUpdate = function(datetime) {
	this.thisUpdate = datetime;
}



/**
 * Sets the timestamp for the next update
 *
 * @param {Date} datetime the date and time of the next update
 */
CRLGenerator.prototype.setNextUpdate = function(datetime) {
	this.nextUpdate = datetime;
}



/**
 * Sets the signature algorithm.
 *
 * @param {Number} alg the signature algorithm, must be one of Crypto.RSA, Crypto.RSA_SHA256 or Crypto.ECDSA_SHA256
 */
CRLGenerator.prototype.setSignatureAlgorithm = function(alg) {
	this.signatureAlgorithm = alg;
}



/**
 * Adds an extension to the CRL
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *    Extension  ::=  SEQUENCE  {
 *        extnID      OBJECT IDENTIFIER,
 *        critical    BOOLEAN DEFAULT FALSE,
 *        extnValue   OCTET STRING
 *                    -- contains the DER encoding of an ASN.1 value
 *                    -- corresponding to the extension type identified
 *                    -- by extnID
 *        }
 *</pre>
 * @param {String} extnID the extensions object identifier
 * @param {Boolean} critical the extension is critical
 * @param {ByteString} the extension value as ByteString
 */
CRLGenerator.prototype.addExtension = function(extnID, critical, extnValue) {
	var t = new ASN1("extension", ASN1.SEQUENCE,
				new ASN1("extnID", ASN1.OBJECT_IDENTIFIER, new ByteString(extnID, OID))
			);

	if (critical) {
		t.add(new ASN1("critical", ASN1.BOOLEAN, new ByteString("FF", HEX)));
	}

	t.add(new ASN1("extnValue", ASN1.OCTET_STRING, extnValue));
	this.extensions.push(t);

}



/**
 * Adds the authority public key identifier extension based on the issuers key.
 *
 * <p>The key identifier is calculated as SHA-1 hash over the contents of the
 * issuer public key (Without tag, length and number of unused bits.</p>
 */
CRLGenerator.prototype.addAuthorityKeyIdentifierExtension = function(publicKey) {
	if (publicKey.getComponent(Key.MODULUS)) {
		var spi = PKIXCommon.createRSASubjectPublicKeyInfo(publicKey);
	} else {
		var spi = PKIXCommon.createECSubjectPublicKeyInfo(publicKey, this.encodeECDomainParameter);
	}

	var keyvalue = spi.get(1).value.bytes(1);
	var hash = this.crypto.digest(Crypto.SHA_1, keyvalue);
	
	var t = new ASN1(ASN1.SEQUENCE,
					new ASN1(0x80, hash)
				);
	this.addExtension("id-ce-authorityKeyIdentifier", false, t.getBytes());
}



/**
 * Adds the CRL number extension.
 *
 */
CRLGenerator.prototype.addCRLNumberExtension = function(crlnumber) {
	var t = new ASN1(ASN1.INTEGER,
					PKIXCommon.convertUnsignedInteger(ByteString.valueOf(crlnumber))
				);
	this.addExtension("id-ce-cRLNumber", false, t.getBytes());
}



/**
 * Add a revoked certificate to the list. This adds the complete DER encoded structure.
 *
 * @param {ASN1} revokedCertificate the information related to the revoked certificate
 */
CRLGenerator.prototype.addRevokedCertificate = function(revokedCertificate) {
	this.revokedCertificates.push(revokedCertificate);
}



/**
 * Add a revoked certificate to the list. This adds the complete DER encoded structure.
 *
 * @param {ByteString} serial the serial number of the certificate to revoke
 * @param {Date} timestamp the revocation time, optional, default is now
 * @param {Number) reason the revocation reason
 * @param {ASN1) ext the crl entry extensions
 */
CRLGenerator.prototype.revokeCertificate = function(serial, timestamp, reason, ext) {
	if (typeof(timestamp) == "undefined") {
		timestamp = new Date();
	}
	var t = new ASN1("revokedCertificate", ASN1.SEQUENCE, 
				new ASN1("userCertificate", ASN1.INTEGER, PKIXCommon.convertUnsignedInteger(serial)),
				new ASN1("revocationTime", ASN1.UTCTime, new ByteString(PKIXCommon.dtoUTC(timestamp), ASCII))
				);

	if (typeof(ext) == "undefined") {
		ext = new ASN1("crlExtensions", ASN1.SEQUENCE);
	}
	
	if ((typeof(reason) != "undefined") && (reason != -1)) {
		ext.add(new ASN1("reason", ASN1.SEQUENCE,
					new ASN1("extnID", ASN1.OBJECT_IDENTIFIER, new ByteString("id-ce-cRLReasons", OID)),
					new ASN1("extnValue", ASN1.OCTET_STRING,
						(new ASN1("cRLReason", ASN1.ENUMERATED, ByteString.valueOf(reason))).getBytes())
					)
				);
		t.add(ext);
	}
	
	this.revokedCertificates.push(t);
}



/**
 * Load list of revoked certificates from an existing CRL
 *
 * @param {String} filename the file name of the DER encoded CRL
 * @type Number
 * @return the value of the CRLNumber extension, 0 if extension not defined or -1 if file could not be loaded
 */
CRLGenerator.prototype.loadCRLEntries = function(filename) {
	var crlnumber = 0;
	
	try	{
		var crlbin = PKIXCommon.readFileFromDisk(filename);
		var crl = new ASN1(crlbin);
		print(crl);
		var tbs = crl.get(0);
		var i = 0;
		if ((i < tbs.length) && (tbs.get(i).tag == ASN1.INTEGER)) {		// Skip version if present
			i++;
		}
		i += 3;		// Skip signature, issuer, thisUpdate
		if ((i < tbs.length) && (tbs.get(i).tag == ASN1.UTCTime)) {		// nextUpdate if present
			i++;
		}
		if ((i < tbs.length) && (tbs.get(i).tag == ASN1.SEQUENCE)) {
			for (var j = 0; j < tbs.get(i).elements; j++) {
				this.revokedCertificates.push(tbs.get(i).get(j));
			}
			i++;
		}
		if ((i < tbs.length) && (tbs.get(i).tag == 0xA0)) {
			var l = tbs.get(i).get(0);
			var oid = new ByteString("id-ce-cRLNumber", OID);
			for (var j = 0; j < l.elements; j++) {
				var ext = l.get(j);
				if (ext.get(0).value.equals(oid)) {
					var extval = new ASN1(ext.get(1).value);
					crlnumber = extval.value.toUnsigned();
				}
			}
			
		}
	}
	catch(e) {
		GPSystem.trace(e);
		return -1;
	}
	return crlnumber;
}



/**
 * Gets the issuer name as TLV object
 *
 * @return the issuer RDNSequence
 * @type ASN1
 */
CRLGenerator.prototype.getIssuer = function() {
	if (this.issuer instanceof ASN1) {
		return this.issuer;
	} else {
		return PKIXCommon.encodeName(this.issuer);
	}
}



/**
 * Gets the thisUpdate TLV object
 *
 * @return the thisUpdate UTC encoded time
 * @type ASN1
 */
CRLGenerator.prototype.getThisUpdate = function() {
	var t = new ASN1("thisUpdate", ASN1.UTCTime, new ByteString(PKIXCommon.dtoUTC(this.thisUpdate), ASCII));
	return t;
}



/**
 * Gets the nextUpdate TLV object
 *
 * @return the nextUpdate UTC encoded time
 * @type ASN1
 */
CRLGenerator.prototype.getNextUpdate = function() {
	var t = new ASN1("nextUpdate", ASN1.UTCTime, new ByteString(PKIXCommon.dtoUTC(this.nextUpdate), ASCII));
	return t;
}



/**
 * Gets the signature algorithm TLV object
 *
 * @return the signature algorithm object
 * @type ASN1
 */
CRLGenerator.prototype.getSignatureAlgorithm = function() {
	var t = new ASN1("signatureAlgorithm", ASN1.SEQUENCE);

	if (this.signatureAlgorithm == Crypto.RSA) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("1.2.840.113549.1.1.5", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else if (this.signatureAlgorithm == Crypto.RSA_SHA256) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("1.2.840.113549.1.1.11", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else if (this.signatureAlgorithm == Crypto.ECDSA_SHA256) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("ecdsa-with-SHA256", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else {
		throw new GPError("CRLGenerator", GPError.INVALID_MECH, this.signatureAlgorithm, "Invalid algorithm");
	}
		
	return t;
}

 

/**
 * Gets revoked certificates
 *
 * @return the list of revoked certificates
 * @type ASN1
 */
CRLGenerator.prototype.getRevokedCertificates = function() {
	var t = new ASN1("revokedCertificates", ASN1.SEQUENCE);
	for (var i = 0; i < this.revokedCertificates.length; i++) {
		t.add(this.revokedCertificates[i]);
	}
	return t;
}



/**
 * Gets the CRL extension as TLV object
 *
 * @return the CRL extensions
 * @type ASN1
 */
CRLGenerator.prototype.getExtensions = function() {
	var t = new ASN1("extensions", 0xA0);
	var s = new ASN1("extensions", ASN1.SEQUENCE);
	
	t.add(s);
	
	for (var i = 0; i < this.extensions.length; i++) {
		s.add(this.extensions[i]);
	}
	return t;
}



/**
 * Gets the part of the CRL that will be signed
 *
 * @return the TBSCertificate part
 * @type ASN1
 */
CRLGenerator.prototype.getTbsCertificateList = function() {
	var t = new ASN1("tbsCertList", ASN1.SEQUENCE);
	t.add(new ASN1("version", ASN1.INTEGER, new ByteString("01", HEX)));
	t.add(this.getSignatureAlgorithm());
	t.add(this.getIssuer());
	t.add(this.getThisUpdate());
	if (this.nextUpdate != null) {
		t.add(this.getNextUpdate());
	}
	if (this.revokedCertificates.length > 0) {
		t.add(this.getRevokedCertificates());
	}
	if (this.extensions.length > 0) {
		t.add(this.getExtensions());
	}
	return t;
}



/**
 * Generates the certificate.
 *
 * @return the generated certificate
 * @type X509
 */
CRLGenerator.prototype.generateCRL = function(privateKey) {
	var certlist = new ASN1("certificateList", ASN1.SEQUENCE);
	
	var tbs = this.getTbsCertificateList();
	certlist.add(tbs);
	certlist.add(this.getSignatureAlgorithm());
	
	var signature = this.crypto.sign(privateKey, this.signatureAlgorithm, tbs.getBytes());
	signature = (new ByteString("00", HEX)).concat(signature);

	var signatureValue = new ASN1("signatureValue", ASN1.BIT_STRING, signature);
	certlist.add(signatureValue);
	
	return certlist;
}



function CRLGeneratorTest() {

	var crypto = new Crypto();
	
	var caPrivateKey = new Key();
	caPrivateKey.setType(Key.PRIVATE);

	var caPublicKey = new Key();
	caPublicKey.setType(Key.PUBLIC);
	caPublicKey.setSize(1024);

	crypto.generateKeyPair(Crypto.RSA, caPublicKey, caPrivateKey);

//	var caPrivKey = new Key("profiles/kp_rsa_private.xml");

	var x = new CRLGenerator(crypto);

	x.reset();
	x.setSignatureAlgorithm(Crypto.RSA);
	var issuer = [{ C:"UT" },{ O:"ACME Corporation" },{ CN:"Test-CA" }];
	x.setIssuer(issuer);
	var now = new Date();
	x.setThisUpdate(now);
	var nextMonth = new Date();
	nextMonth.setMonth((now.getMonth() + 1) % 12);
	x.setNextUpdate(nextMonth);
	x.addAuthorityKeyIdentifierExtension(caPublicKey);
	x.addCRLNumberExtension(11);
	
	x.revokeCertificate(new ByteString("01", HEX));
	x.revokeCertificate(new ByteString("80", HEX), new Date());
	x.revokeCertificate(new ByteString("80", HEX), new Date(), CRLGenerator.keyCompromise);
	x.revokeCertificate(new ByteString("80", HEX), new Date(), CRLGenerator.superseded, new ASN1("crlExtensions", ASN1.SEQUENCE));
	
	var crl = x.generateCRL(caPrivateKey);
	
	var fn = GPSystem.mapFilename("crl.crl", GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, crl.getBytes());

	print(crl);
	
	var x = new CRLGenerator(crypto);
	x.reset();
	x.setSignatureAlgorithm(Crypto.RSA);
	var issuer = [{ C:"UT" },{ O:"ACME Corporation" },{ CN:"Test-CA" }];
	x.setIssuer(issuer);
	var now = new Date();
	x.setThisUpdate(now);
	var nextMonth = new Date();
	nextMonth.setMonth((now.getMonth() + 1) % 12);
	x.setNextUpdate(nextMonth);
	var crlnumber = x.loadCRLEntries(fn);
	assert(crlnumber == 11);
	x.addAuthorityKeyIdentifierExtension(caPublicKey);
	x.addCRLNumberExtension(crlnumber + 1);
	
	x.revokeCertificate(crypto.generateRandom(8), new Date(), CRLGenerator.keyCompromise);
	var crl = x.generateCRL(caPrivateKey);
//	PKIXCommon.writeFileToDisk(fn, crl.getBytes());
	
	print(crl);
}


/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Utility class for Elliptic Curve Cryptography
 */


function ECCUtils() {
}



/**
 * Wrap a ECDSA signature in the format r || s into a TLV encoding as defined by RFC 3279
 *
 * @param signature ByteString containing the concatenation of r and s as unsigned integer values
 * @returns ASN.1 SEQUENCE objects containing two signed integer r and s
 */
ECCUtils.wrapSignature = function(signature) {
	var len = signature.length / 2;

	// r and s are unsigned big integer. We might need to pad a zero for ASN.1 INTEGER which is signed
	var r = signature.bytes(0, len);
	if (r.byteAt(0) >= 0x80) {
		r = ByteString.valueOf(0, 1).concat(r);
	}

	var s = signature.bytes(len, len);
	if (s.byteAt(0) >= 0x80) {
		s = ByteString.valueOf(0, 1).concat(s);
	}

	var t = new ASN1(ASN1.SEQUENCE);
	t.add(new ASN1(ASN1.INTEGER, r));
	t.add(new ASN1(ASN1.INTEGER, s));

	return t.getBytes();
}



/**
 * Integer to octet string conversion
 */
ECCUtils.I2O = function(value, length) {
	if (value.length > length) {
		value = value.right(length);
	}
	while (value.length < length) {
		value = ECCUtils.PAD.left((length - value.length - 1 & 15) + 1).concat(value);
	}
	return value;
}
ECCUtils.PAD = new ByteString("00000000000000000000000000000000", HEX);



/**
 * Unwrap a ECDSA signature from the TLV encoding according to RFC3279 into the concatenation
 * of the unsigned integer r and s
 *
 * @param signature TLV encoded signature
 * @returns concatenation of r and s
 */
ECCUtils.unwrapSignature = function(signature, keylen) {
	var t = new ASN1(signature);
	if (typeof(keylen) != "undefined") {
		var r = ECCUtils.I2O(t.get(0).value, keylen);
		var s = ECCUtils.I2O(t.get(1).value, keylen);
	} else {
		var r = t.get(0).value;
		if (r.byteAt(0) == 00)
			r = r.bytes(1);

		var s = t.get(1).value;
		if (s.byteAt(0) == 00)
			s = s.bytes(1);
	}

	return r.concat(s);
}



/**
 * Decode domain parameter from ECParameters
 *
 * <pre>
 *	ECParameters ::= SEQUENCE {
 *		version INTEGER{ecpVer1(1)} (ecpVer1),
 *		fieldID FieldID,
 *		curve Curve,
 *		base ECPoint,
 *		order INTEGER,
 *		cofactor INTEGER OPTIONAL,
 *		...
 *	}
 *
 *	Curve ::= SEQUENCE {
 *		a FieldElement,
 *		b FieldElement,
 *		seed BIT STRING OPTIONAL
 *	}
 *
 *	FieldElement ::= OCTET STRING
 *	ECPoint ::= OCTET STRING
 *	FieldID ::= SEQUENCE {
 *		fieldType OBJECT IDENTIFIER,
 *		parameters ANY DEFINED BY fieldType
 *	}
 *	prime-field OBJECT IDENTIFIER ::= { ansi-x9-62 fieldType(1) 1 }
 *	Prime-p ::= INTEGER
 * </pre>
 */
ECCUtils.decodeECParameters = function(tlv) {
	assert(tlv.tag == ASN1.SEQUENCE);

	var key = new Key();
	key.setType(Key.PUBLIC);

	// version
	assert(tlv.get(0).value.toSigned() == 1);

	// fieldID
	assert(tlv.get(1).tag == ASN1.SEQUENCE);
	assert(tlv.get(1).get(1).tag = ASN1.INTEGER);

	var prime = tlv.get(1).get(1).value;
	if (prime.byteAt(0) == 0) {		// Strip leading zero byte
		prime = prime.bytes(1);
	}
	key.setComponent(Key.ECC_P, prime);

	// curve
	assert(tlv.get(2).tag == ASN1.SEQUENCE);
	assert(tlv.get(2).get(0).tag == ASN1.OCTET_STRING);

	var coeff_A = tlv.get(2).get(0);
	key.setComponent(Key.ECC_A, coeff_A.value);

	var coeff_B = tlv.get(2).get(1);
	key.setComponent(Key.ECC_B, coeff_B.value);

	// base
	assert(tlv.get(3).tag == ASN1.OCTET_STRING);
	var pkbin = tlv.get(3).value;
	assert(pkbin.byteAt(0) == 4);
	pkbin = pkbin.bytes(1);

	key.setComponent(Key.ECC_GX, pkbin.left(pkbin.length >> 1));
	key.setComponent(Key.ECC_GY, pkbin.right(pkbin.length >> 1));

	// order
	assert(tlv.get(4).tag == ASN1.INTEGER);
	var groupOrder = tlv.get(4).value;
	if (groupOrder.byteAt(0) == 0) {		// Strip leading zero byte
		groupOrder = groupOrder.bytes(1);
	}
	key.setComponent(Key.ECC_N, groupOrder);

	// cofactor
	if (tlv.elements > 5) {
		assert(tlv.get(5).tag == ASN1.INTEGER);
		var cofactor = tlv.get(0).value;
		if (cofactor.byteAt(0) == 0) {		// Strip leading zero byte
			cofactor = cofactor.bytes(1);
		}
		key.setComponent(Key.ECC_H, cofactor);
	}

	return key;
}



ECCUtils.ECParametersToString = function(key) {
	var str = "EC Parameter:\n";

	str += "  prime " + key.getComponent(Key.ECC_P) + "\n";
	str += "  curve a " + key.getComponent(Key.ECC_A) + "\n";
	str += "  curve b " + key.getComponent(Key.ECC_B) + "\n";
	str += "  generator x " + key.getComponent(Key.ECC_GX) + "\n";
	str += "  generator y " + key.getComponent(Key.ECC_GY) + "\n";
	str += "  order " + key.getComponent(Key.ECC_N) + "\n";
	str += "  cofactor " + key.getComponent(Key.ECC_H) + "\n";
	return str;
}



// List of object identifier used in Key.setComponent(ECC_CURVE_OID)

// Fp curves defined by ANSI X6.92
ECCUtils.prime192v1 = new ByteString("1.2.840.10045.3.1.1", OID);
ECCUtils.prime192v2 = new ByteString("1.2.840.10045.3.1.2", OID);
ECCUtils.prime192v3 = new ByteString("1.2.840.10045.3.1.3", OID);
ECCUtils.prime239v1 = new ByteString("1.2.840.10045.3.1.4", OID);
ECCUtils.prime239v2 = new ByteString("1.2.840.10045.3.1.5", OID);
ECCUtils.prime239v3 = new ByteString("1.2.840.10045.3.1.6", OID);
ECCUtils.prime256v1 = new ByteString("1.2.840.10045.3.1.7", OID);

// F2m curves defined by ANSI X6.92
ECCUtils.c2pnb163v1 = new ByteString("1.2.840.10045.3.0.1", OID);
ECCUtils.c2pnb163v2 = new ByteString("1.2.840.10045.3.0.2", OID);
ECCUtils.c2pnb163v3 = new ByteString("1.2.840.10045.3.0.3", OID);
ECCUtils.c2pnb176w1 = new ByteString("1.2.840.10045.3.0.4", OID);
ECCUtils.c2tnb191v1 = new ByteString("1.2.840.10045.3.0.5", OID);
ECCUtils.c2tnb191v2 = new ByteString("1.2.840.10045.3.0.6", OID);
ECCUtils.c2tnb191v3 = new ByteString("1.2.840.10045.3.0.7", OID);
ECCUtils.c2pnb208w1 = new ByteString("1.2.840.10045.3.0.10", OID);
ECCUtils.c2tnb239v1 = new ByteString("1.2.840.10045.3.0.11", OID);
ECCUtils.c2tnb239v2 = new ByteString("1.2.840.10045.3.0.12", OID);
ECCUtils.c2tnb239v3 = new ByteString("1.2.840.10045.3.0.13", OID);
ECCUtils.c2pnb272w1 = new ByteString("1.2.840.10045.3.0.16", OID);
ECCUtils.c2pnb304w1 = new ByteString("1.2.840.10045.3.0.17", OID);
ECCUtils.c2tnb359v1 = new ByteString("1.2.840.10045.3.0.18", OID);
ECCUtils.c2pnb368w1 = new ByteString("1.2.840.10045.3.0.19", OID);
ECCUtils.c2tnb431r1 = new ByteString("1.2.840.10045.3.0.20", OID);

// Fp curves defined by SECG
ECCUtils.secp224r1 = new ByteString("1.3.132.0.33", OID);
ECCUtils.secp256r1 = ECCUtils.prime256v1;
ECCUtils.secp384r1 = new ByteString("1.3.132.0.34", OID);
ECCUtils.secp521r1 = new ByteString("1.3.132.0.35", OID);

// F2m curves defined by SECG
ECCUtils.sect163r2 = new ByteString("1.3.132.0.15", OID);
ECCUtils.sect233r1 = new ByteString("1.3.132.0.27", OID);
ECCUtils.sect283r1 = new ByteString("1.3.132.0.17", OID);
ECCUtils.sect409r1 = new ByteString("1.3.132.0.37", OID);
ECCUtils.sect571r1 = new ByteString("1.3.132.0.39", OID);

ECCUtils.brainpoolP160r1 = new ByteString("1.3.36.3.3.2.8.1.1.1", OID);
ECCUtils.brainpoolP160t1 = new ByteString("1.3.36.3.3.2.8.1.1.2", OID);
ECCUtils.brainpoolP192r1 = new ByteString("1.3.36.3.3.2.8.1.1.3", OID);
ECCUtils.brainpoolP192t1 = new ByteString("1.3.36.3.3.2.8.1.1.4", OID);
ECCUtils.brainpoolP224r1 = new ByteString("1.3.36.3.3.2.8.1.1.5", OID);
ECCUtils.brainpoolP224t1 = new ByteString("1.3.36.3.3.2.8.1.1.6", OID);
ECCUtils.brainpoolP256r1 = new ByteString("1.3.36.3.3.2.8.1.1.7", OID);
ECCUtils.brainpoolP256t1 = new ByteString("1.3.36.3.3.2.8.1.1.8", OID);
ECCUtils.brainpoolP320r1 = new ByteString("1.3.36.3.3.2.8.1.1.9", OID);
ECCUtils.brainpoolP320t1 = new ByteString("1.3.36.3.3.2.8.1.1.10", OID);
ECCUtils.brainpoolP384r1 = new ByteString("1.3.36.3.3.2.8.1.1.11", OID);
ECCUtils.brainpoolP384t1 = new ByteString("1.3.36.3.3.2.8.1.1.12", OID);
ECCUtils.brainpoolP512r1 = new ByteString("1.3.36.3.3.2.8.1.1.13", OID);
ECCUtils.brainpoolP512t1 = new ByteString("1.3.36.3.3.2.8.1.1.14", OID);

/* Test all curve parameter
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime192v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime192v2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime192v3);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime239v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime239v2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime239v3);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime256v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb163v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb163v2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb163v3);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb176w1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb191v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb191v2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb191v3);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb208w1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb239v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb239v2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb239v3);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb272w1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb304w1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb359v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb368w1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb431r1);

var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.secp224r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.secp256r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.secp384r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.secp521r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.sect163r2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.sect233r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.sect283r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.sect409r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.sect571r1);

var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP160r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP160t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP192r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP192t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP224r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP224t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP256r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP256t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP320r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP320t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP384r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP384t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP512r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP512t1);
*/
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Encrypt a file using hybrid encryption mode
 */

var File = require("scsh/file/File").File;
var FileEncryptor = require("scsh/file/FileEncryptor").FileEncryptor;
var PublicKeyFile = require("scsh/file/PublicKeyFile").PublicKeyFile;


function EncryptFile() {

}



EncryptFile.prototype.loadPublicKey = function(fname) {
	this.pkf = new PublicKeyFile(fname);
}



EncryptFile.prototype.selectPublicKey = function() {
	var fname = typeof(this.pkFileName) != "undefined" ? this.pkFileName : "";
	fname = Dialog.prompt("Select recipient public key", fname, null, "*.pka");
	if (!fname) {
		throw new Error("User abort");
	}
	this.loadPublicKey(fname);
	this.pkFileName = fname;
}



EncryptFile.prototype.selectFileToEncrypt = function() {
	var fname = typeof(this.plainFileName) != "undefined" ? this.plainFileName : "";
	fname = Dialog.prompt("Select file to encrypt", fname, null, "");
	if (!fname) {
		throw new Error("User abort");
	}

	this.plainFileName = fname;

	fname = Dialog.prompt("Save encrypted file as", fname + ".enc", null, "");
	if (!fname) {
		throw new Error("User abort");
	}

	var f = new File(fname);
	if (f.exists()) {
		if (Dialog.prompt("File does already exist. Overwrite ?") == null) {
			throw new Error("User abort");
		}
	}

	this.encFileName = fname;
}



EncryptFile.prototype.encrypt = function() {
	var fenc = new FileEncryptor(undefined, FileEncryptor.HYBRID);
	fenc.deriveKey(this.pkf.getChain()[0]);

	var f = new File(this.plainFileName);
	var bin = f.readAllAsBinary();
	f.close();

	bin = fenc.encrypt(bin);

	var f = new File(this.encFileName);
	f.writeAll(bin);
	f.close();

	print("Encryption complete.");
}


if (typeof(e) == "undefined") {
	var e = new EncryptFile();
}

e.selectPublicKey();
e.selectFileToEncrypt();
e.encrypt();




/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Generic smart card explorer
 */

load("OutlineCore.js");

function OutlineCard() {

        // Create card object
        var card = new Card(_scsh3.reader);
        this.atr = card.reset(Card.RESET_COLD);

        this.card = card;

        // Create OutlineNode object and register in object
        var view = new OutlineNode("Card");
        view.setUserObject(this);
        this.view = view;
}



//
// Expand clicked on node
//
OutlineCard.prototype.expandListener = function() {
        if (this.expanded)
                return;
                
        var view = this.view;

	//
	// Display ATR
	//
	var atrnode = new OutlineATR(this.atr);
	view.insert(atrnode.view);
        this.expanded = true;

        //
        // Explore files in MF
        //
	try	{
		var mf = new CardFile(this.card, ":3F00");
				
	        var struct = GPXML.parse("genericmf.xml");
	        this.mf = new OutlineDF(this.card, ":3F00", "MF", struct);
	        view.insert(this.mf.view);
	}
	catch(e) {
		print("Card does not seem to have a compatible MF\n" + e);
	}

        //
        // Obtain list of applications from EF_DIR
        //
        var isTransparent = true;
        try	{
		var efdir = new CardFile(this.card, ":2F00");
		var fci = efdir.getFCPBytes();
		if (fci) {
			isTransparent = efdir.isTransparent();
		} else {
			isTransparent = true;
		}
        }
        catch(e) {
                print("Card does not seem to have a compatible EF_DIR\n" + e);
                return;
        }
                
        for (var rec = 1; rec < 255; rec++) {
                var record;
                try     {
	                if (isTransparent) {
	                	record = efdir.readBinary();
	                } else {
	                        record = efdir.readRecord(rec);
	                }
                }
                catch(e) {
                        print(e);
                        break;
                }

                var tlv = new ASN1(record);
                
                var label = null;
                var aid = null;
                        
                for (var i = 0; i < tlv.elements; i++) {
                        var t = tlv.get(i);
                        switch(t.tag) {
                        case 0x50:
                                label = t.value.toString(UTF8);
                                break;
                        case 0x4F:
                                aid = t.value;
                                break;
                        }
                }

                if (label && aid) {
                        var applentry;

                       	if (!label) {
                       		if (!aid) {
                       			label = "Invalid entry in EF.DIR";
                       		} else {
                       			label = aid.toString(HEX);
                       		}
                       	}
                        	
			applentry = new OutlineNode(label);
			applentry.insert(tlv);
			view.insert(applentry);
                }
                
                if (efdir.isTransparent())
                	break;
        }
}





//
// Outline root node erzeugen
// 
var cardoutline = new OutlineCard();

cardoutline.view.show();
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview General File I/O Class
 */



/**
 * Create a reference to a file system object (file or directory)
 *
 * @class Class implementing basic support for files
 * @constructor
 * @param {String} name relative or absolute file path
 */
function File(name) {
	this.name = name;
}



/**
 * Return absolute path
 *
 * @param{Number} mode one of GPSystem.AUTO, GPSystem.CWD, GPSystem.USR or GPSystem.SYS. See GPSystem.mapFilename() for details
 * @type String
 * @return the absolute path
 */
File.prototype.getAbsolutePath = function(mode) {
	if (typeof(mode) == "undefined") {
		mode = GPSystem.CWD;
	}
	if (typeof(this.abspath) == "undefined") {
		this.abspath = GPSystem.mapFilename(this.name, mode);
	}
	return this.abspath;
}



/**
 * @private
 * Return a java.io.File object
 */
File.prototype.getFile = function() {
	if (typeof(this.file) == "undefined") {
		this.file = new java.io.File(this.getAbsolutePath(GPSystem.AUTO));
	}
	return this.file; 
}



/**
 * Close streams associated with file
 */
File.prototype.close = function() {
	if (typeof(this.os) != "undefined") {
		this.os.close();
		delete(this.os);
	}

	if (typeof(this.is) != "undefined") {
		this.is.close();
		delete(this.is);
	}
}



/**
 * @private
 * Return a java.io.FileInputStream
 */
File.prototype.getInputStream = function() {
	if (typeof(this.is) == "undefined") {
		this.is = new java.io.FileInputStream(this.getAbsolutePath(GPSystem.AUTO));
	}
	return this.is; 
}



/**
 * @private
 * Return a java.io.FileOutputStream
 */
File.prototype.getOutputStream = function() {
	if (typeof(this.os) == "undefined") {
		this.os = new java.io.FileOutputStream(this.getAbsolutePath(GPSystem.CWD));
	}
	return this.os; 
}



/**
 * Read complete file into ByteString object
 *
 * @type ByteString
 * @return the binary content
 */
File.prototype.readAllAsBinary = function() {
	var is = this.getInputStream();

	// Determine file size
	var flen = is.available();

	// Allocate native byte array
	var bs = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, flen);

	// Read into byte array
	var len = is.read(bs);

	this.close();

	// Allocate JavaScript ByteBuffer from native/wrapped byte array
	var bb = new ByteBuffer(bs);

	// Convert to JavaScript ByteString
	var data = bb.toByteString();

	return data;
}



/**
 * Read complete file into String object
 *
 * @type String
 * @return the text content
 */
File.prototype.readAllAsString = function(encoding) {

	if (typeof(encoding) == "undefined") {
		encoding = UTF8;
	}

	return this.readAllAsBinary().toString(encoding);
}



/**
 * Write the object to file
 *
 * @param{Object} obj to write to file (Using toString() for any other than String and ByteString)
 * @param{Number} one of UTF8 or ASCII (Default is UTF8)
 */
File.prototype.writeAll = function(obj, encoding) {
	if ((typeof(obj) != "string") && !(obj instanceof ByteString)) {
		obj = obj.toString();
	}
	if (typeof(obj) == "string") {
		if (typeof(encoding) == "undefined") {
			encoding = UTF8;
		}
		obj = new ByteString(obj, encoding);
	}

	var os = this.getOutputStream();
	os.write(obj);
	this.close();
}



/**
 * Return list of files contained in the directory referenced by the File object
 *
 * @type String[]
 * @return the list of file names
 */
File.prototype.list = function() {
	var list = this.getFile().list();
	var jslist = [];
	
	for (var i = 0; i < list.length; i++) {
		jslist.push(new String(list[i]));
	}
	return jslist;
}



/**
 * Return the parent file of this file object
 *
 * @type File
 * @return the parent file object or null
 */
File.prototype.getParentFile = function() {
	var file = this.getFile();
	var parent = file.getParent();
	if (parent == null) {
		return null;
	}
	return new File(parent);
}



File.test = function() {
	var file = new File("test.bin");
	var b = new ByteString("Hello World", ASCII);
	file.writeAll(b);
	
	var file = new File("test.bin");
	var c = file.readAllAsBinary();
	print(c.toString(ASCII));
	
	var file = new File("test.txt");
	var s = "Hello World";
	file.writeAll(s);
	
	var file = new File("test.txt");
	var c = file.readAllAsString();
	print(c);
	
	var dir = file.getParentFile();
	print(dir.getAbsolutePath());
	print(dir.list());
	
}
<?xml version="1.0" encoding="UTF-8"?>
<FileStructure arrayElement="EF" arrayIndex="#">
    <EF fid="2F00" format="asn1.efdir" name="EF_DIR" />
    <EF fid="2F01" format="asn1" name="EF_ATR" />
    <EF fid="0030" format="asn1.arr" name="EF_ARR" />
</FileStructure>    
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  @fileoverview
 *  Classes to parse PKCS#15 data structures
 */



/**
 * Return the BIT STRING as integer value
 *
 * @param {ByteString} the ASN.1 BIT STRING to convert
 * @return the converted integer
 * @type Number
 */
function IntFromBitString(b) {
	assert(b.length < 5);
	var bits = b.bytes(1).toUnsigned();
	return bits << ((4 - b.length) << 3);
}

/*
print("0080 - ", IntFromBitString(new ByteString("0080", HEX)).toString(16));
print("0180 - ", IntFromBitString(new ByteString("0180", HEX)).toString(16));
print("0780 - ", IntFromBitString(new ByteString("0780", HEX)).toString(16));
print("078000 - ", IntFromBitString(new ByteString("078000", HEX)).toString(16));
print("07800000 - ", IntFromBitString(new ByteString("07800000", HEX)).toString(16));
*/



/**
 * Creates a PKCS#15 path from the encoded TLV structure
 *
 * @class <p>This class provides for access to PKCS#15 structures.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * Path ::= SEQUENCE {
 * 		efidOrPath OCTET STRING,
 *		index INTEGER (0..cia-ub-index) OPTIONAL,
 *		length [0] INTEGER (0..cia-ub-index) OPTIONAL
 *	}( WITH COMPONENTS {..., index PRESENT, length PRESENT}|
 * 	   WITH COMPONENTS {..., index ABSENT, length ABSENT})
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the path
 */
function PKCS15_Path(tlv) {
	assert(tlv.elements > 0);

	var t = tlv.get(0);
	assert(t.tag == ASN1.OCTET_STRING);

	t.setName("efidOrPath");
	this.efidOrPath = "";

	for (var i = 0; i < t.length; i += 2) {
		if (t.length - i >= 2) {
			this.efidOrPath += ":" + t.value.bytes(i, 2).toString(HEX);
		} else {
			this.efidOrPath += ":" + ByteString.valueOf(t.value.byteAt(i) >> 3).toString(HEX);
		}
	}

	if (tlv.elements == 3) {
		t = tlv.get(1);
		assert(t.tag == ASN1.INTEGER);
		assert(t.length > 0);
		t.setName("index");
		this.index = t.value.toSigned();

		t = tlv.get(2);
		assert(t.tag == 0x80);
		assert(t.length > 0);
		t.setName("length");
		this.length = t.value.toSigned();
	}
}



/**
 * Gets the absolute in the OCF format.
 *
 * @param {String} df the current directory
 * @return the path in OCF encoding
 * @type String
 */
PKCS15_Path.prototype.getAbsolutePath = function(df) {
	if (this.aid) {
		return this.aid + this.efidOrPath;
	}

	var p = this.efidOrPath;
	if (p.slice(0, 5) != ":3F00") {
		p = df + p;
	}

	return p;
}



/**
 * Convert the object to a human readable string
 *
 * @return the string representation of the object
 * @type String
 */
PKCS15_Path.prototype.toString = function() {
	var str = "{";

	if (this.efidOrPath) {
		str += "efidOrPath=" + this.efidOrPath;
	}

	if (this.index) {
		str += ",index=" + this.index;
	}

	if (this.length) {
		str += ",length=" + this.length;
	}
	str += "}";
	return str;
}



/**
 * Creates a CIO DDO object from data usually stored in EF_DIR.
 *
 * @class <p>Class to decode CIO DDO objects.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * CIODDO ::= SEQUENCE {
 * 		providerId OBJECT IDENTIFIER OPTIONAL,
 * 		odfPath Path OPTIONAL,
 *		ciaInfoPath [0] Path OPTIONAL,
 *		aid [APPLICATION 15] OCTET STRING (SIZE(1..16)),
 *		(CONSTRAINED BY {-- Must be an AID in accordance with ISO/IEC 7816-4--})
 *		OPTIONAL,
 *		... -- For future extensions
 * } -- Context tag 1 is historical and shall not be used
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO DDO
 */
function PKCS15_CIODDO(tlv) {
	assert(tlv.tag == 0x73);

	var i = 0;

	if (i < tlv.elements) {
		var t = tlv.get(i);
		if (t.tag == ASN1.OBJECT_IDENTIFIER) {
			this.providerId = t.toString();
			i++;
		}
	}

	if (i < tlv.elements) {
		var t = tlv.get(i);
		if (t.tag == ASN1.SEQUENCE) {
			this.odfPath = new PKCS15_Path(t);
			i++;
		}
	}

	if (i < tlv.elements) {
		var t = tlv.get(i);
		if (t.tag == 0xA0) {
			this.ciaInfoPath = new PKCS15_Path(t);
			i++;
		}
	}
}



/**
 * Convert the object to a human readable string
 *
 * @return the string representation of the object
 * @type String
 */
PKCS15_CIODDO.prototype.toString = function() {
	var str = "{";

	if (this.providerId) {
		str += "providerId=" + this.providerId + ",\n";
	}

	if (this.odfPath) {
		str += "odfPath=" + this.odfPath + ",\n";
	}

	if (this.ciaInfoPath) {
		str += "ciaInfoPath=" + this.ciaInfoPath + ",\n";
	}
	str += "}";
	return str;
}



/**
 * Creates a structure to access an application template from EF_DIR.
 *
 * @class <p>This class provides for access to an application template.</p>
 * @constructor
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO DDO
 */
function PKCS15_ApplicationTemplate(tlv) {
	assert(tlv.tag == 0x61);
	assert(tlv.elements > 0);

	for (var i = 0; i < tlv.elements; i++) {
		var t = tlv.get(i);
		switch(t.tag) {
			case 0x4F:
				this.aid = t.value.toString(HEX);
				break;
			case 0x50:
				this.label = t.value.toString(UTF8);
				break;
			case 0x51:
				this.path = ":" + t.value.toString(HEX);
				break;
			case 0x73:
				this.ddo = new PKCS15_CIODDO(t);
				break;
		}
	}
}

/**
 * The application identifier for this application.
 * @type String
 */
PKCS15_ApplicationTemplate.prototype.aid = "";

/**
 * The application label for this application.
 * @type String
 */
PKCS15_ApplicationTemplate.prototype.label = "";

/**
 * The path for this application.
 * @type String
 */
PKCS15_ApplicationTemplate.prototype.path = "";

/**
 * The PKCS#15 Directory Data Object (DDO) for this application.
 * @type PKCS15_CIODDO
 */
PKCS15_ApplicationTemplate.prototype.ddo = "";

/**
 * The list of Cryptographic Information Objects (CIO).
 * @see PKCS15.readObjectListForApplication
 * @type PKCS15_CIO[]
 */
PKCS15_ApplicationTemplate.prototype.objlist = null;



/**
 * Convert the object to a human readable string
 */
PKCS15_ApplicationTemplate.prototype.toString = function() {
	var str = "{";

	if (this.aid) {
		str += "aid=" + this.aid + ",\n";
	}

	if (this.label) {
		str += "label=" + this.label + ",\n";
	}

	if (this.path) {
		str += "path=" + this.path + ",\n";
	}

	if (this.ddo) {
		str += "ddo=" + this.ddo + ",\n";
	}
	str += "}";
	return str;
}



/**
 * Creates a CIAInfo object.
 *
 * @class <p>Class to decode CIAInfo objects.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * CIAInfo ::= SEQUENCE {
 *		version INTEGER {v1(0),v2(1)} (v1|v2,...),
 *		serialNumber OCTET STRING OPTIONAL,
 *		manufacturerID Label OPTIONAL,
 *		label [0] Label OPTIONAL,
 *		cardflags CardFlags,
 *		seInfo SEQUENCE OF SecurityEnvironmentInfo OPTIONAL,
 *		recordInfo [1] RecordInfo OPTIONAL,
 *		supportedAlgorithms [2] SEQUENCE OF AlgorithmInfo OPTIONAL,
 *		issuerId [3] Label OPTIONAL,
 *		holderId [4] Label OPTIONAL,
 *		lastUpdate [5] LastUpdate OPTIONAL,
 *		preferredLanguage PrintableString OPTIONAL, -- In accordance with IETF RFC 1766
 *		profileIndication [6] SEQUENCE OF ProfileIndication OPTIONAL,
 *		...
 *		} (CONSTRAINED BY { -- Each AlgorithmInfo.reference value shall be unique --})
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIAInfo
 */
function PKCS15_CIAInfo(tlv) {
	assert(tlv.tag == ASN1.SEQUENCE);
	assert(tlv.elements > 2);

	this.tlv = tlv;
	var i = 0;
	var t;

	tlv.setName("CIAInfo");

	// version
	t = tlv.get(i);
	assert(t.tag == ASN1.INTEGER);
	t.setName("version");
	this.version = t.value.toSigned();
	i++;

	// serialNumber
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.OCTET_STRING)) {
		t.setName("serialNumber");
		this.serialNumber = t.value;
		i++;
	}

	// manufacturerID
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.UTF8String)) {
		t.setName("manufacturerID");
		this.manufacturerID = t.value.toString(UTF8);
		i++;
	}

	// label
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0x80)) {
		t.setName("label");
		this.label = t.value.toString(UTF8);
		i++;
	}

	t = tlv.get(i);
	assert(t.tag == ASN1.BIT_STRING);
	if (t.length > 1) {
		this.cardflags = t.value.bytes(1,1).toUnsigned();
		t.setName("cardflags {" + this.getCardflagsAsString() + " }");
	} else {
		this.cardflags = 0;
	}
	i++;

	// seInfo SEQUENCE OF SecurityEnvironmentInfo OPTIONAL,
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.SEQUENCE)) {
		t.setName("seInfo");
		print("CIAInfo.seInfo not further decoded : " + t);
		this.seInfo = "### not implemented ###";
		i++;
	}

	// recordInfo [1] RecordInfo OPTIONAL,
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0xA1)) {
		t.setName("recordInfo");
		print("CIAInfo.recordInfo not further decoded : " + t);
		this.recordInfo = "### not implemented ###";
		i++;
	}

	// supportedAlgorithms [2] SEQUENCE OF AlgorithmInfo OPTIONAL,
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0xA2)) {
		t.setName("supportedAlgorithms");
		this.supportedAlgorithms = new Array();
		for (var j = 0; j < t.elements; j++) {
			var alg = new AlgorithmInfo(t.get(j));
			this.supportedAlgorithms.push(alg);
		}
		i++;
	}

	// issuerId [3] Label OPTIONAL,
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0xA3)) {
		t.setName("issuerId");
		print("CIAInfo.issuerId not further decoded : " + t);
		this.issuerId = "### not implemented ###";
		i++;
	}

	// holderId [4] Label OPTIONAL,
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0xA4)) {
		t.setName("holderId");
		print("CIAInfo.holderId not further decoded : " + t);
		this.holderId = "### not implemented ###";
		i++;
	}

	// lastUpdate [5] LastUpdate OPTIONAL,
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0xA5)) {
		t.setName("lastUpdate");
		print("CIAInfo.lastUpdate not further decoded : " + t);
		this.lastUpdate = "### not implemented ###";
		i++;
	}

	// preferredLanguage PrintableString OPTIONAL, -- In accordance with IETF RFC 1766
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.PrintableString)) {
		t.setName("preferredLanguage");
		this.preferredLanguage = t.value.toString(ASCII);
		i++;
	}

	// profileIndication [6] SEQUENCE OF ProfileIndication OPTIONAL,
	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0xA6)) {
		t.setName("profileIndicator");
		print("CIAInfo.profileIndicator not further decoded : " + t);
		this.profileIndication = "### not implemented ###";
		i++;
	}
}



/**
 * Gets the card flags as string of concatenated flags.
 * @return the string containing the flags separated by a blank
 * @type String
 */
PKCS15_CIAInfo.prototype.getCardflagsAsString = function() {
	return (this.cardflags & 0x80 ? " readonly" : "") +
	       (this.cardflags & 0x40 ? " authRequired" : "") +
	       (this.cardflags & 0x20 ? " prnGeneration" : "");
}



/**
 * Convert the object to a human readable string
 *
 * @return the string representation of the object
 * @type String
 */
PKCS15_CIAInfo.prototype.toString = function() {
	var str = "CIAInfo { ";

	str += "version=" + this.version + ",\n";

	if (typeof(this.serialNumber) != "undefined") {
		str += "serialNumber=" + this.serialNumber + ",\n";
	}

	if (typeof(this.manufacturerID) != "undefined") {
		str += "manufacturerID=" + this.manufacturerID + ",\n";
	}

	if (typeof(this.label) != "undefined") {
		str += "label=" + this.label + ",\n";
	}

	str += "cardflags=" + this.getCardflagsAsString() + ",\n";

	if (typeof(this.supportedAlgorithms) != "undefined") {
		str += "supportedAlgorithms={\n";
		for (var i = 0; i < this.supportedAlgorithms.length; i++) {
			str += this.supportedAlgorithms[i].toString() + "\n";
		}
		str += "},\n";
	}

	if (typeof(this.preferredLanguage) != "undefined") {
		str += "preferredLanguage=" + this.preferredLanguage + ",\n";
	}

	str += "}";
	return str;
}



/**
 * Create an AlgorithmInfo object from TLV data
 *
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * AlgorithmInfo ::= SEQUENCE {
 *   reference Reference,
 *   algorithm CIO-ALGORITHM.&id({AlgorithmSet}),
 *   parameters CIO-ALGORITHM.&Parameters({AlgorithmSet}{@algorithm}),
 *   supportedOperations CIO-ALGORITHM.&Operations({AlgorithmSet}{@algorithm}),
 *   objId CIO-ALGORITHM.&objectIdentifier ({AlgorithmSet}{@algorithm}),
 *   algRef Reference OPTIONAL
 * }
 *
 * CIO-ALGORITHM ::= CLASS {
 *   &id INTEGER UNIQUE,
 *   &Parameters,
 *   &Operations Operations,
 *   &objectIdentifier OBJECT IDENTIFIER OPTIONAL
 *   } WITH SYNTAX {
 *   PARAMETERS &Parameters OPERATIONS &Operations ID &id [OID &objectIdentifier]
 * }
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the AlgorithmInfo
 */
function AlgorithmInfo(tlv) {
	if (tlv && (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements >= 5);

		this.tlv = tlv;

		var i = 0;
		var t;

		assert((t = tlv.get(i)).tag == ASN1.INTEGER);
		t.setName("reference");
		this.reference = t.value.toSigned();
		i++;

		assert((t = tlv.get(i)).tag == ASN1.INTEGER);
		t.setName("algorithm");
		this.algorithm = t.value.toSigned();
		i++;

		t = tlv.get(i);
		t.setName("parameters");
		this.parameters = t;
		i++;

		assert((t = tlv.get(i)).tag == ASN1.BIT_STRING);
		this.supportedOperations = t.value.bytes(1,1).toUnsigned();
		t.setName("supportedOperations {" + this.getOperationsAsString() + " }");
		i++;

		if (i < tlv.elements) {
			assert((t = tlv.get(i)).tag == ASN1.OBJECT_IDENTIFIER);
			t.setName("objId");
			this.objId = t.value.toString(OID);
			i++;
		}

		if (i < tlv.elements) {
			assert((t = tlv.get(i)).tag == ASN1.INTEGER);
			t.setName("algRef");
			this.algRef = t.value.toSigned();
			i++;
		}
	}
}



/**
 * Gets the operations flags as string of concatenated tokens.
 * @return the string containing the flags separated by a blank
 * @type String
 */
AlgorithmInfo.prototype.getOperationsAsString = function() {
	return (this.supportedOperations & 0x80 ? " compute-checksum" : "") +
           (this.supportedOperations & 0x40 ? " compute-signature" : "") +
           (this.supportedOperations & 0x20 ? " verify-checksum" : "") +
           (this.supportedOperations & 0x10 ? " verify-signature" : "") +
           (this.supportedOperations & 0x08 ? " encipher" : "") +
           (this.supportedOperations & 0x04 ? " decipher" : "") +
           (this.supportedOperations & 0x02 ? " hash" : "") +
           (this.supportedOperations & 0x01 ? " generate-key" : "");

}



/**
 * Convert the object to a human readable string
 *
 * @return the string representation of the object
 * @type String
 */
AlgorithmInfo.prototype.toString = function() {
	var str = "AlgorithmInfo { ";

	if (typeof(this.reference) != "undefined") {
		str += "reference=" + this.reference + ",\n";
	}

	if (typeof(this.algorithm) != "undefined") {
		str += "algorithm=0x" + this.algorithm.toString(16) + ",\n";
	}

	if (typeof(this.parameters) != "undefined") {
		str += "parameters=" + this.parameters + ",\n";
	}

	if (typeof(this.supportedOperations) != "undefined") {
		str += "supportedOperations=" + this.getOperationsAsString() + ",\n";
	}

	if (typeof(this.objId) != "undefined") {
		str += "objId=" + this.objId + ",\n";
	}

	if (typeof(this.algRef) != "undefined") {
		str += "algRef=" + this.algRef + ",\n";
	}

	str += "}";

	return str;
}



/**
 * Create a Cryptographic Information Object (CIO)
 *
 * @class <p>This is the base class for all cryptographic objects in a PKCS#15 data structure.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * CommonObjectAttributes ::= SEQUENCE {
 *		label Label OPTIONAL,
 *		flags CommonObjectFlags OPTIONAL,
 *		authId Identifier OPTIONAL,
 *		userConsent INTEGER (1..cia-ub-userConsent) OPTIONAL,
 *		accessControlRules SEQUENCE SIZE (1..MAX) OF AccessControlRule OPTIONAL,
 *		...
 *	} (CONSTRAINED BY {-- authId should be present if flags.private is set.
 *	-- It shall equal an authID in one authentication object in the AOD -- })
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 */
function PKCS15_CIO(tlv) {
	if (tlv && (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements >= 3);

		this.tlv = tlv;

		var coa = tlv.get(0);
		assert(coa.tag == ASN1.SEQUENCE);

		coa.setName("commonObjectAttributes");
		var i = 0;
		var t;

		if ((i < coa.elements) && ((t = coa.get(i)).tag == ASN1.UTF8String)) {
			t.setName("label");
			this.label = t.value.toString(UTF8);
			i++;
		}

		// D-Trust card has empty bitstring element
		if ((i < coa.elements) && ((t = coa.get(i)).tag == ASN1.BIT_STRING) && (t.value.length > 1)) {
			this.flags = t.value.bytes(1,1).toUnsigned();
			t.setName("flags {" + this.getFlagsAsString() + " }");
			i++;
		}

		if ((i < coa.elements) && ((t = coa.get(i)).tag == ASN1.OCTET_STRING)) {
			t.setName("authId");
			this.authId = t.value;
			i++;
		}

		if ((i < coa.elements) && ((t = coa.get(i)).tag == ASN1.INTEGER)) {
			t.setName("userConsent");
			this.userConsent = t.value.toSigned();
			i++;
		}

		if ((i < coa.elements) && ((t = coa.get(i)).tag == ASN1.SEQUENCE)) {
			t.setName("accessControlRules");
			this.accessControlRules = t.value;
			i++;
		}
	}
}



/**
 * Gets the common object flags as string of concatenated flags.
 * @return the string containing the flags separated by a blank
 * @type String
 */
PKCS15_CIO.prototype.getFlagsAsString = function() {
	return  (this.flags & 0x80 ? " private" : "") +
		(this.flags & 0x40 ? " modifiable" : "") +
		(this.flags & 0x20 ? " internal" : "");
}



/**
 * Convert the object to a human readable string
 *
 * @return the string representation of the object
 * @type String
 */
PKCS15_CIO.prototype.toString = function() {
	var str = "CommonObjectAttributes { ";

	if (typeof(this.label) != "undefined") {
		str += "label=" + this.label + ",\n";
	}

	if (typeof(this.flags) != "undefined") {
		str += "flags=" + this.getFlagsAsString() + ",\n";
	}

	if (typeof(this.authId) != "undefined") {
		str += "authId=" + this.authId + ",\n";
	}

	if (typeof(this.userConsent) != "undefined") {
		str += "userConsent=" + this.userConsent + ",\n";
	}

	if (typeof(this.accessControlRules) != "undefined") {
		str += "accessControlRules=" + this.accessControlRules + ",\n";
	}

	str += "}";
	return str;
}



/**
 * Create a Common Key Attribute Object
 *
 * @class <p>This class adds common key attributes to the base CIO class.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * CommonKeyAttributes ::= SEQUENCE {
 *		iD Identifier,
 *		usage KeyUsageFlags,
 *		native BOOLEAN DEFAULT TRUE,
 *		accessFlags KeyAccessFlags OPTIONAL,
 *		keyReference KeyReference OPTIONAL,
 *		startDate GeneralizedTime OPTIONAL,
 *		endDate [0] GeneralizedTime OPTIONAL,
 *		algReference [1] SEQUENCE OF Reference OPTIONAL,
 *		... -- For future extensions
 *		}
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CIO PKCS15_CIO is the base class
 */
function PKCS15_CommonKeyAttributes(tlv) {
	// Call superclass constructor
	PKCS15_CIO.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {
		tlv = tlv.get(1);
		tlv.setName("commonKeyAttributes");
		var i = 0;
		var t;

		assert((t = tlv.get(i)).tag == ASN1.OCTET_STRING);
		t.setName("iD");
		this.iD = t.value;
		i++;

		assert((t = tlv.get(i)).tag == ASN1.BIT_STRING);
		this.usage = t.value.bytes(1).toUnsigned(true);
		t.setName("usage {" + this.getUsageAsString() + " }");
		i++;

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.BOOLEAN)) {
			t.setName("native");
			this.native_ = t.value.toUnsigned();
			i++;
		} else {
			this.native_ = true;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.BIT_STRING)) {
			this.accessFlags = t.value.bytes(1).toUnsigned(true);
			t.setName("accessFlags {" + this.getAccessFlagsAsString() + " }");
			i++;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.INTEGER)) {
			t.setName("keyReference");
			this.keyReference = t.value.toSigned();
			i++;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.GeneralizedTime)) {
			t.setName("startDate");
			this.startDate = t.getDate();
			i++;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0x80)) {
			t.setName("endDate");
			this.endDate = t.getDate();
			i++;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0xA1)) {
			assert(t.isconstructed);
			t.setName("algReference");
			this.algReference = new Array();
			for (var j = 0; j < t.elements; j++) {
				assert(t.get(j).tag == ASN1.INTEGER);
				t.get(j).setName("reference");
				this.algReference.push(t.get(j).value.toSigned());
			}
			i++;
		}
	}
}

PKCS15_CommonKeyAttributes.prototype = new PKCS15_CIO();



/**
 * Gets the key usage flags as string of concatenated flags.
 * @return the string containing the flags separated by a blank
 * @type String
 */
PKCS15_CommonKeyAttributes.prototype.getUsageAsString = function() {
	return  (this.usage & 0x0080 ? " encipher" : "") +
		(this.usage & 0x0040 ? " decipher" : "") +
		(this.usage & 0x0020 ? " sign" : "") +
		(this.usage & 0x0010 ? " signRecover" : "") +
		(this.usage & 0x0008 ? " keyEncipher" : "") +
		(this.usage & 0x0004 ? " keyDecipher" : "") +
		(this.usage & 0x0002 ? " verify" : "") +
		(this.usage & 0x0001 ? " verifyRecover" : "") +
		(this.usage & 0x8000 ? " derive" : "") +
		(this.usage & 0x4000 ? " nonRepudiation" : "");
}



/**
 * Gets the key access flags as string of concatenated flags.
 * @return the string containing the flags separated by a blank
 * @type String
 */
PKCS15_CommonKeyAttributes.prototype.getAccessFlagsAsString = function() {
	return	(this.accessFlags & 0x80 ? " sensitive" : "") +
		(this.accessFlags & 0x40 ? " extractable" : "") +
		(this.accessFlags & 0x20 ? " alwaysSensitive" : "") +
		(this.accessFlags & 0x10 ? " neverExtractable" : "") +
		(this.accessFlags & 0x08 ? " cardGenerated" : "");
}



/**
 * Convert the object to a human readable string
 * @return content information
 * @type String
 */
PKCS15_CommonKeyAttributes.prototype.toString = function() {

	var str = PKCS15_CIO.prototype.toString.call(this);
	str += "\nCommonKeyAttributes { ";

	if (typeof(this.iD) != "undefined") {
		str += "iD=" + this.iD + ",\n";
	}

	if (typeof(this.usage) != "undefined") {
		str += "usage=" + this.getUsageAsString() + ",\n";
	}

	if (typeof(this.native_) != "undefined") {
		str += "native=" + this.native_ + ",\n";
	}

	if (typeof(this.accessFlags) != "undefined") {
		str += "accessFlags=" + this.getAccessFlagsAsString() + ",\n";
	}

	if (typeof(this.keyReference) != "undefined") {
		str += "keyReference=" + this.keyReference + ",\n";
	}

	if (typeof(this.startDate) != "undefined") {
		str += "startDate=" + this.startDate + ",\n";
	}

	if (typeof(this.endDate) != "undefined") {
		str += "endDate=" + this.endDate + ",\n";
	}

	if (typeof(this.algReference) != "undefined") {
		str += "algReference=" + this.algReference + ",\n";
	}

	str += "}";
	return str;
}



/**
 * Create a Common Private Key Attribute Object
 *
 * @class <p>This class adds common private key attributes to the common key attribute class.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * CommonPrivateKeyAttributes ::= SEQUENCE {
 * name Name OPTIONAL,
 * keyIdentifiers [0] SEQUENCE OF CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 * generalName [1] GeneralNames OPTIONAL,
 * ... -- For future extensions
 * }
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CommonKeyAttributes PKCS15_CommonKeyAttributes is the base class
 */
function PKCS15_CommonPrivateKeyAttributes(tlv) {
	// Call superclass constructor
	PKCS15_CommonKeyAttributes.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {
		var t = tlv.get(2);
		if (t.tag == 0xA0) {
			t.setName("subClassAttributes");

			assert(t.elements == 1);
			t = t.get(0);
			t.setName("commonPrivateKeyAttributes");

			var i = 0;
			if (t.elements > i) {
				print("### Not decoded ### " + t);
			}
		}
	}
}

PKCS15_CommonPrivateKeyAttributes.prototype = new PKCS15_CommonKeyAttributes();



/**
 * Create a Common Secret Key Attribute Object
 *
 * @class <p>This class adds common secret key attributes to the common key attribute class.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * CommonSecretKeyAttributes ::= SEQUENCE {
 *   keyLen INTEGER OPTIONAL, -- keylength (in bits)
 *   -- For future extensions
 *  }
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CommonKeyAttributes PKCS15_CommonKeyAttributes is the base class
 */
function PKCS15_CommonSecretKeyAttributes(tlv) {
	// Call superclass constructor
	PKCS15_CommonKeyAttributes.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {
		var t = tlv.get(2);
		if (t.tag == 0xA0) {
			t.setName("subClassAttributes");

			assert(t.elements == 1);
			t = t.get(0);
			t.setName("commonSecretKeyAttributes");

			var i = 0;
			var o = t.get(i++);
			assert(o.tag == ASN1.INTEGER);
			o.setName("keyLen");

			if (t.elements > i) {
				print("### Not decoded ### " + t);
			}
		}
	}
}

PKCS15_CommonSecretKeyAttributes.prototype = new PKCS15_CommonKeyAttributes();



/**
 * Create a Private Key Object
 *
 * @class <p>This class adds private key attributes to the common private key attribute class.</p>
 * <p>The class supports RSA and ECC keys.</p>
 * <p>RSA keys are decoded from the following ASN.1 structure:</p>
 * <pre>
 * PrivateRSAKeyAttributes ::= SEQUENCE {
 * value Path,
 * modulusLength INTEGER, -- modulus length in bits, e.g. 1024
 * keyInfo KeyInfo {NULL, PublicKeyOperations} OPTIONAL,
 * ... -- For future extensions
 * }
 * </pre>
 * <p>ECC keys are decoded from the following ASN.1 structure:</p>
 * <pre>
 * PrivateECKeyAttributes ::= SEQUENCE {
 * value Path,
 * keyInfo KeyInfo {Parameters, PublicKeyOperations} OPTIONAL,
 * ... -- For future extensions
 * }
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CommonPrivateKeyAttributes PKCS15_CommonPrivateKeyAttributes is the base class
 */
function PKCS15_PrivateKey(tlv) {
	// Call superclass constructor
	PKCS15_CommonPrivateKeyAttributes.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {
		var t = tlv.get(tlv.elements - 1);

		assert(t.tag == 0xA1);
		assert(t.elements >= 1);
		t.setName("typeAttributes");

		t = t.get(0);

		switch(tlv.tag) {
		case 0x30: this.decodePrivateRSAKey(t); break;
		case 0xA0: this.decodePrivateECCKey(t); break;
		default:
			this.type = "PrivateKey"; break;
			print("### Not decoded ### " + t);
		}
	}
}

PKCS15_PrivateKey.prototype = new PKCS15_CommonPrivateKeyAttributes();



/**
 * Decodes the RSA key structure.
 *
 * @private
 * @param {ASN1} tlv the TLV structure
 */
PKCS15_PrivateKey.prototype.decodePrivateRSAKey = function(tlv) {
	this.type = "PrivateRSAKey";
	tlv.setName("privateRSAKeyAttributes");

	var t = tlv.get(0);
	this.value = new PKCS15_Path(t);
	t.setName("value");

	t = tlv.get(1);
	assert(t.tag == ASN1.INTEGER);
	this.modulusLength = t.value.toSigned();
	t.setName("modulusLength");

	if (tlv.elements > 2) {
		t = tlv.get(2);
		if (t.tag == ASN1.INTEGER) {
			t.setName("reference");
		} else {
			t.setName("paramsAndOps");
		}
	}
}



/**
 * Decodes the ECC key structure.
 *
 * @private
 * @param {ASN1} tlv the TLV structure
 */
PKCS15_PrivateKey.prototype.decodePrivateECCKey = function(tlv) {
	this.type = "PrivateECCKey";
	tlv.setName("privateECCKeyAttributes");

	var t = tlv.get(0);
	this.value = new PKCS15_Path(t);
	t.setName("value");

	if (tlv.elements > 1) {
		t = tlv.get(1);
		if (t.tag == ASN1.INTEGER) {
			t.setName("reference");
		} else {
			t.setName("paramsAndOps");
		}
	}
}



/**
 * Create a Secret Key Object
 *
 * @class <p>This class adds secret key attributes to the common secret key attribute class.</p>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CommonSecretKeyAttributes PKCS15_CommonSecretKeyAttributes is the base class
 */
function PKCS15_SecretKey(tlv) {
	// Call superclass constructor
	PKCS15_CommonSecretKeyAttributes.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {
		var t = tlv.get(tlv.elements - 1);

		assert(t.tag == 0xA1);
		assert(t.elements >= 1);
		t.setName("typeAttributes");

		t = t.get(0);

		// ToDo: Decode GenericKeyAttributes
		this.type = "SecretKey";
		print("### Not decoded ### " + t);
	}
}

PKCS15_SecretKey.prototype = new PKCS15_CommonSecretKeyAttributes();



/**
 * Create a Common Certificate Attribute Object
 *
 * @class <p>This class adds common certificate attributes to the base CIO class.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * CommonCertificateAttributes ::= SEQUENCE {
 * iD Identifier,
 * authority BOOLEAN DEFAULT FALSE,
 * identifier CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 * certHash [0] CertHash OPTIONAL,
 * trustedUsage [1] Usage OPTIONAL,
 * identifiers [2] SEQUENCE OF CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 * validity [4] Validity OPTIONAL,
 * ...
 * } -- Context tag [3] is reserved for historical reasons
 * NOTE PKCS #15 uses context tag [3].
 * Usage ::= SEQUENCE {
 * keyUsage KeyUsage OPTIONAL,
 * extKeyUsage SEQUENCE SIZE (1..MAX) OF OBJECT IDENTIFIER OPTIONAL,
 * ...
 * } (WITH COMPONENTS {..., keyUsage PRESENT} | WITH COMPONENTS {..., extKeyUsage PRESENT})
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CIO PKCS15_CIO is the base class
 */
function PKCS15_CommonCertificateAttributes(tlv) {
	// Call superclass constructor
	PKCS15_CIO.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {
		var tlv = tlv.get(1);
		tlv.setName("commonCertificateAttributes");
		var i = 0;
		var t;

		assert((t = tlv.get(i)).tag == ASN1.OCTET_STRING);
		t.setName("iD");
		this.iD = t.value;
		i++;

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.BOOLEAN)) {
			t.setName("authority");
			this.authority = (t.value.toUnsigned() > 0);
			i++;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.SEQUENCE)) {
			t.setName("identifier");
			this.identifier = t.value;
			i++;
		}

		// Uncommon fields missing
	}
}

PKCS15_CommonCertificateAttributes.prototype = new PKCS15_CIO();



/**
 * Convert the object to a human readable string
 * @return content information
 * @type String
 */
PKCS15_CommonCertificateAttributes.prototype.toString = function() {
	var str = PKCS15_CIO.prototype.toString.call(this);
	str += "\nCommonCertificateAttributes { ";

	str += "iD=" + this.iD + ",\n";

	if (typeof(this.authority) != "undefined") {
		str += "authority=" + this.authority + ",\n";
	}

	if (typeof(this.identifier) != "undefined") {
		str += "identifier=" + this.identifier + ",\n";
	}
	str += "}";
	return str;
}



/**
 * Create a Certificate Attribute Object
 *
 * @class <p>This class adds X.509 certificate attributes to the common certificate attribute class.</p>
 * <p>The class decodes the following ASN.1 syntax for X.509 certificates:</p>
 * <pre>
 * X509CertificateAttributes ::= SEQUENCE {
 * value ObjectValue { Certificate },
 * subject Name OPTIONAL,
 * issuer [0] Name OPTIONAL,
 * serialNumber CertificateSerialNumber OPTIONAL,
 * ... -- For future extensions
 * }
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CommonCertificateAttributes PKCS15_CommonCertificateAttributes is the base class
 */
function PKCS15_Certificate(tlv) {
	// Call superclass constructor
	PKCS15_CommonCertificateAttributes.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {

		var t = tlv.get(2);
		assert(t.tag == 0xA1);
		assert(t.elements == 1);
		t.setName("typeAttributes");
		t = t.get(0);
		t.setName("certificateAttributes");

		switch(tlv.tag) {
		case 0x30: this.decodeX509Certificate(t); break;
		default:
			this.type = "Certificate"; break;
			print("### Not decoded ### " + t);
		}
//		print("Certificate:" + t);
	}
}

PKCS15_Certificate.prototype = new PKCS15_CommonCertificateAttributes();



/**
 * Decodes a X.509 certificate structure.
 *
 * @private
 * @param {ASN1} the tlv structure containing the certificate data
 */
PKCS15_Certificate.prototype.decodeX509Certificate = function(tlv) {
	this.type = "X509Certificate";
	tlv.setName("x509CertificateAttributes");

	var t = tlv.get(0);
	t.setName("value");

	if (t.tag == ASN1.SEQUENCE) {
		this.value = new PKCS15_Path(t);
	}

	var i = 1;

	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.SEQUENCE)) {
		t.setName("subject");
		i++;
	}

	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0xA0)) {
		t.setName("issuer");
		i++;
	}

	if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.INTEGER)) {
		t.setName("serialNumber");
		this.serialNumber = t.value;
		i++;
	}
}



/**
 * Create a Common Authentication Object Attribute Object
 *
 * @class <p>This class adds common authentication object attributes to the base CIO class.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * CommonAuthenticationObjectAttributes ::= SEQUENCE {
 *    authId Identifier OPTIONAL,
 *    authReference Reference OPTIONAL,
 *    seIdentifier [0] Reference OPTIONAL,
 *    ... -- For future extensions
 * }
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CIO PKCS15_CIO is the base class
 */
function PKCS15_CommonAuthenticationObjectAttributes(tlv) {
	// Call superclass constructor
	PKCS15_CIO.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {
		var tlv = tlv.get(1);
		tlv.setName("commonAuthenticationObjectAttributes");
//		print("CommonAuthenticationObjectAttributes:" + tlv);

		var i = 0;
		var t;

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.OCTET_STRING)) {
			t.setName("authIdThis");
			this.authIdThis = t.value;
			i++;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.INTEGER)) {
			t.setName("authReference");
			this.authReference = t.value.toSigned();
			i++;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0x80)) {
			t.setName("seIdentifier");
			this.seIdentifier = t.value.toSigned();
			i++;
		}
	}
}

PKCS15_CommonAuthenticationObjectAttributes.prototype = new PKCS15_CIO();



/**
 * Convert the object to a human readable string
 *
 * @return the string representation of the object
 * @type String
 */
PKCS15_CommonAuthenticationObjectAttributes.prototype.toString = function() {

	var str = PKCS15_CIO.prototype.toString.call(this);
	str += "\nCommonAuthenticationObjectAttributes { ";

	if (typeof(this.authIdThis) != "undefined") {
		str += "authIdThis=" + this.authIdThis + ",\n";
	}

	if (typeof(this.authReference) != "undefined") {
		str += "authReference=" + this.authReference + ",\n";
	}

	if (typeof(this.seIdentifier) != "undefined") {
		str += "seIdentifier=" + this.seIdentifier + ",\n";
	}

	if (typeof(this.pwd) != "undefined") {
		str += "pwd=" + this.pwd.toString() + ",\n";
	}

	str += "}";
	return str;
}



/**
 * Create an Authentication Object
 *
 * @class <p>This class adds authentication object attributes to the common authentication object class.</p>
 * <p>The class supports password objects.</p>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CommonAuthenticationObjectAttributes PKCS15_CommonAuthenticationObjectAttributes is the base class
 */
function PKCS15_AuthenticationObject(tlv) {
	// Call superclass constructor
	PKCS15_CommonAuthenticationObjectAttributes.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {
		var t = tlv.get(tlv.elements - 1);
		assert(t.tag == 0xA1);
		assert(t.elements == 1);
		t.setName("typeAttribute");
		t = t.get(0);

		switch(t.tag) {
		case 0x30:
			this.pwd = new PKCS15_PasswordAuthenticationObject(t);
			break;
		default:
			print("### Unsupported authentication object type : " + t);
			break;
		}
	}
}

PKCS15_AuthenticationObject.prototype = new PKCS15_CommonAuthenticationObjectAttributes();



/**
 * Create a Password Authentication Object
 *
 * @class <p>This class supports password authentication objects.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * PasswordAttributes ::= SEQUENCE {
 *	pwdFlags PasswordFlags,
 *	pwdType PasswordType,
 *	minLength INTEGER (cia-lb-minPasswordLength..cia-ub-minPasswordLength),
 *	storedLength INTEGER (0..cia-ub-storedPasswordLength),
 *	maxLength INTEGER OPTIONAL,
 *	pwdReference [0] Reference DEFAULT 0,
 *	padChar OCTET STRING (SIZE(1)) OPTIONAL,
 *	lastPasswordChange GeneralizedTime OPTIONAL,
 *	path Path OPTIONAL,
 *	... -- For future extensions
 * }
 * PasswordFlags ::= BIT STRING {
 *	case-sensitive (0),
 *	local (1),
 *	change-disabled (2),
 *	unblock-disabled (3),
 *	initialized (4),
 *	needs-padding (5),
 *	unblockingPassword (6),
 *	soPassword (7),
 *	disable-allowed (8),
 *	integrity-protected (9),
 *	confidentiality-protected (10),
 *	exchangeRefData (11)
 *	} (CONSTRAINED BY { -- "unblockingPassword" and "soPassword" cannot both be set -- })
 * PasswordType ::= ENUMERATED {bcd, ascii-numeric, utf8, half-nibble-bcd, iso9564-1, ...}
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 */
function PKCS15_PasswordAuthenticationObject(tlv) {
	if (tlv && (tlv instanceof ASN1)) {

		tlv.setName("passwordAuthenticationObject");

		var i = 0;
		var t;

		assert((t = tlv.get(i)).tag == ASN1.BIT_STRING);
		this.pwdFlags = IntFromBitString(t.value);
		t.setName("pwdFlags {" + this.getPwdFlagsAsString() + " }");
		i++;

		assert((t = tlv.get(i)).tag == ASN1.ENUMERATED);
		this.pwdType = t.value.toUnsigned();
		t.setName("pwdType {" + this.getPwdTypeAsString() + " }");
		i++;

		assert((t = tlv.get(i)).tag == ASN1.INTEGER);
		t.setName("minLength");
		this.minLength = t.value.toSigned();
		i++;

		assert((t = tlv.get(i)).tag == ASN1.INTEGER);
		t.setName("storedLength");
		this.storedLength = t.value.toSigned();
		i++;

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.INTEGER)) {
			t.setName("maxLength");
			this.maxLength = t.value.toSigned();
			i++;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == 0x80)) {
			t.setName("pwdReference");
			this.pwdReference = t.value.toSigned();
			i++;
		}
	}
}



/**
 * Gets the password flags as string of concatenated flags.
 * @return the string containing the flags separated by a blank
 * @type String
 */
PKCS15_PasswordAuthenticationObject.prototype.getPwdFlagsAsString = function() {
	return	(this.pwdFlags & 0x800000 ? " case-sensitive" : "") +
		(this.pwdFlags & 0x400000 ? " local" : "") +
		(this.pwdFlags & 0x200000 ? " change-disabled" : "") +
		(this.pwdFlags & 0x100000 ? " unblock-disabled" : "") +
		(this.pwdFlags & 0x080000 ? " initialized" : "") +
		(this.pwdFlags & 0x040000 ? " needs-padding" : "") +
		(this.pwdFlags & 0x020000 ? " unblockingPassword" : "") +
		(this.pwdFlags & 0x010000 ? " soPassword" : "") +
		(this.pwdFlags & 0x008000 ? " disable-allowed" : "") +
		(this.pwdFlags & 0x004000 ? " integrity-protected" : "") +
		(this.pwdFlags & 0x002000 ? " confidentiality-protected" : "") +
		(this.pwdFlags & 0x001000 ? " exchangeRefData" : "") +
		(this.pwdFlags & 0x000800 ? " resetRetryCounter1" : "") +
		(this.pwdFlags & 0x000400 ? " resetRetryCounter2" : "");
}



/**
 * Gets the password type.
 * @return the string containing the password type (BCD, ASCII-NUMERIC, UTF8, HALF-NIBBLE-BCD or ISO9564-1)
 * @type String
 */
PKCS15_PasswordAuthenticationObject.prototype.getPwdTypeAsString = function() {

	var str = "" + this.pwdType;
	switch(this.pwdType) {
		case  0 : str = "BCD"; break;
		case  1 : str = "ASCII-NUMERIC"; break;
		case  2 : str = "UTF8"; break;
		case  3 : str = "HALF-NIBBLE-BCD"; break;
		case  4 : str = "ISO9564-1"; break;
	}
	return str;
}



/**
 * Convert the object to a human readable string
 *
 * @return the string representation of the object
 * @type String
 */
PKCS15_PasswordAuthenticationObject.prototype.toString = function() {
	var str = "Password { ";

	if (typeof(this.pwdFlags) != "undefined") {
		str += "pwdFlags=" + this.getPwdFlagsAsString() + ",\n";
	}

	if (typeof(this.pwdType) != "undefined") {
		str += "pwdType=" + this.getPwdTypeAsString() + ",\n";
	}

	if (typeof(this.minLength) != "undefined") {
		str += "minLength=" + this.minLength + ",\n";
	}

	if (typeof(this.storedLength) != "undefined") {
		str += "storedLength=" + this.storedLength + ",\n";
	}

	if (typeof(this.maxLength) != "undefined") {
		str += "maxLength=" + this.maxLength + ",\n";
	}

	if (typeof(this.pwdReference) != "undefined") {
		str += "pwdReference=" + this.pwdReference + ",\n";
	}

	str += "}";
	return str;
}



/**
 * Create a Common Data Container Object Attribute Object
 *
 * @class <p>This class adds common data container attributes to the base CIO class.</p>
 * <p>The class decodes the following ASN.1 syntax:</p>
 * <pre>
 * CommonDataContainerObjectAttributes ::= SEQUENCE {
 * 		applicationName Label OPTIONAL,
 * 		applicationOID OBJECT IDENTIFIER OPTIONAL,
 * 		iD Identifier OPTIONAL,
 * 		... -- For future extensions
 * 		} (WITH COMPONENTS {..., applicationName PRESENT}
 * 		| WITH COMPONENTS {..., applicationOID PRESENT})
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CIO PKCS15_CIO is the base class
 */
function PKCS15_CommonDataContainerObjectAttributes(tlv) {
	// Call superclass constructor
	PKCS15_CIO.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {
		var tlv = tlv.get(1);
		tlv.setName("commonDataContainerObjectAttributes");
		var i = 0;
		var t;

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.UTF8String)) {
			t.setName("applicationName");
			this.applicationName = t.value.toString(UTF8);
			i++;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.OBJECT_IDENTIFIER)) {
			t.setName("applicationOID");
			this.applicationOID = t.value.toString(OID);
			i++;
		}

		if ((i < tlv.elements) && ((t = tlv.get(i)).tag == ASN1.ASN1.OCTET_STRING)) {
			t.setName("iD");
			this.iD = t.value;
			i++;
		}
	}
}

PKCS15_CommonDataContainerObjectAttributes.prototype = new PKCS15_CIO();



/**
 * Convert the object to a human readable string
 *
 * @return the string representation of the object
 * @type String
 */
PKCS15_CommonDataContainerObjectAttributes.prototype.toString = function() {

	var str = PKCS15_CIO.prototype.toString.call(this);
	str += "\nCommonDataContainerObjectAttributes { ";

	if (typeof(this.applicationName) != "undefined") {
		str += "applicationName=" + this.applicationName + ",\n";
	}

	if (typeof(this.applicationOID) != "undefined") {
		str += "applicationOID=" + this.applicationOID + ",\n";
	}

	if (typeof(this.iD) != "undefined") {
		str += "iD=" + this.iD + ",\n";
	}

	str += "}";
	return str;
}



/**
 * Create a Data Container Object
 *
 * @class <p>This class adds data container objects to the common data container object attributes class.</p>
 * <p>The class decodes the following ASN.1 syntax for opaque data objects with indirect path reference:</p>
 * <pre>
 * OpaqueDOAttributes ::= ObjectValue {CIO-OPAQUE.&Type}
 *
 * ObjectValue { Type } ::= CHOICE {
 * 		indirect ReferencedValue,
 * 		direct [0] Type,
 * 		... -- For future extensions
 * }
 *
 * ReferencedValue ::= CHOICE {
 * 		path Path,
 * 		url URL
 * } -- The syntax of the object is determined by the context
 * </pre>
 * @constructor
 * @param {ASN1} the tlv structure containing the CIO
 * @see PKCS15_CommonDataContainerObjectAttributes PKCS15_CommonDataContainerObjectAttributes is the base class
 */
function PKCS15_DataContainerObject(tlv) {
	// Call superclass constructor
	PKCS15_CommonDataContainerObjectAttributes.call(this, tlv);

	if (tlv && (tlv instanceof ASN1)) {

		var t = tlv.get(2);
		assert(t.tag == 0xA1);
		assert(t.elements == 1);
		t.setName("typeAttributes");
		t = t.get(0);
		t.setName("dataContainerAttributes");

		switch(tlv.tag) {
		case 0x30: this.decodeOpaqueDOIndirectPath(t); break;
		default:
			print("### Unsupported data container object type : " + t);
		}
	}
}

PKCS15_DataContainerObject.prototype = new PKCS15_CommonDataContainerObjectAttributes();



/**
 * Decodes an oqaque data object.
 *
 * @private
 * @param {ASN1} the tlv structure containing the opaque data object
 */
PKCS15_DataContainerObject.prototype.decodeOpaqueDOIndirectPath = function(tlv) {
	this.type = "OpaqueDOIndirectPath";
	tlv.setName("OpaqueDOIndirectPath");

	this.indirectPath = new PKCS15_Path(tlv);
}



/**
 * Convert the object to a human readable string
 *
 * @return the string representation of the object
 * @type String
 */
PKCS15_DataContainerObject.prototype.toString = function() {

	var str = PKCS15_CommonDataContainerObjectAttributes.prototype.toString.call(this);
	str += "\nDataContainerObject { ";

	if (typeof(this.indirectPath) != "undefined") {
		str += "indirectPath=" + this.indirectPath + ",\n";
	}

	str += "}";
	return str;
}



/**
 * Create an object to access the PKCS#15 structure on a card.
 *
 * @class <p>This class provides for direct access to a PKCS#15 data structure on a card.</p>
 * <p>The calling application will typically use:</p>
 * <pre>
 * var card = new Card(_scsh3.reader);
 * var p15 = new PKCS15(card);
 * var appllist = p15.readApplicationDirectory();
 * var aid;
 * for (var i in appllist) {
 *   print(i);
 *   aid = i;
 * }
 * var at = appllist[aid];
 * p15.readObjectListForApplication(at);
 * for (var i = 0; i < at.objlist.length; i++) {
 *   print(at.objlist[i]);
 * }
 * </pre>
 * @constructor
 * @param {Card} card the card object to use for card access.
 */
function PKCS15(card) {
	this.card = card;
}



/**
 * Reads the application directory from EF_DIR.
 *
 * <p>The method supports linear variable and transparent EFs. It creates an internal table of
 *    of applications.</p>
 *
 * @return hash table of application templates index by application identifier
 * @type PKCS15_ApplicationTemplate[]
 */
PKCS15.prototype.readApplicationDirectory = function() {
	this.ef_dir = new CardFile(this.card, ":3F00:2F00");

	this.aidlist = new Array();

	if (this.ef_dir.isTransparent()) {
		var data = this.ef_dir.readBinary();
//		print(data);

		while((data.length > 0) && (data.byteAt(0) == 0x61)) {
			var tlv = new ASN1(data);
//			print(tlv);
			data = data.bytes(tlv.size);
//			print(data);

			var at = new PKCS15_ApplicationTemplate(tlv);
			this.aidlist[at.aid] = at;
		}

	} else {
		var rec = 1;
		while(rec < 256) {
			var data;
			try {
				data = this.ef_dir.readRecord(rec);
			}
			catch(e) {
				if (!(e instanceof GPError) || (e.error != GPError.CARD_COMM_ERROR)) {
					print(e);
					throw(e);
				}
				break;
			}

			var tlv = new ASN1(data);
			var at = new PKCS15_ApplicationTemplate(tlv);
			this.aidlist[at.aid] = at;
			rec++;
		}
	}
	return this.aidlist;
}



/**
 * Reads from the transparent file referenced in the PKCS#15 path object.
 *
 * @private
 * @param {String} df the current DF in OCF path notation.
 * @param {PKCS15_Path} path the relative or absolute path to the EF
 * @return the content of the file
 * @type ByteString
 */
PKCS15.prototype.readCardObject = function(df, path) {

	var p = path.getAbsolutePath(df);
	print("Reading from: " + p);
	var ef = new CardFile(this.card, p);
	var data;
	if (path.index) {
		data = ef.readBinary(path.index, path.length);
	} else {
		var len = ef.getLength();
		data = ef.readBinary(0, len);
	}
	return data;
}



/**
 * Parse a list of TLV objects
 *
 * @param {ByteString} data the binary data with TLV objects
 * @return the list of ASN1 objects
 * @type ASN1[]
 */
PKCS15.parseObjectList = function(data) {

	var list = new Array();
	var len = data.length;

	while(len > 0) {
		if ((data.byteAt(0) == 0x00) || (data.byteAt(0) == 0xFF)) {
			len--;
			data = data.bytes(1);
		} else {
//			print(data);
			var tlv = new ASN1(data);
			var tlvsize = tlv.size;
			len -= tlvsize;
			data = data.bytes(tlvsize);
			list.push(tlv);
//			print("parseObjectList: " + tlv);
		}
	}
	return list;
}



/**
 * Reads PKCS#15 objects from card file which can be either transparent or record oriented.
 *
 * @param {String} df the current DF in OCF path notation.
 * @param {PKCS15_Path} path the relative or absolute path to the EF
 * @return the array of TLV objects read from the file
 * @type ASN1[]
 */
PKCS15.prototype.readCardObjects = function(df, path) {

	var p = path.getAbsolutePath(df);
	print("Reading from: " + p);
	var ef = new CardFile(this.card, p);
	var list = new Array();

	var isTransparent = true;
	try	{
		isTransparent = ef.isTransparent();
	}
	catch(e) {
		// Ignore
	}
	if (isTransparent) {
		var data;
		if (path.index) {
			data = ef.readBinary(path.index, path.length);
		} else {
			try	{
				var len = ef.getLength();
				data = ef.readBinary(0, len);
			}
			catch(e) {
				data = ef.readBinary(0);
			}
		}

		var len = data.length;

		try	{
			while(len > 0) {
				if ((data.byteAt(0) == 0x00) || (data.byteAt(0) == 0xFF)) {
					len--;
					data = data.bytes(1);
				} else {
//					print(data);
					var tlv = new ASN1(data);
					var tlvsize = tlv.size;
					len -= tlvsize;
					data = data.bytes(tlvsize);
					list.push(tlv);
//					print("readCardObjects: " + tlv);
				}
			}
		}
		catch(e) {
			print("Error reading cryptographic information object: " + e);
			print(data);
		}
	} else {
		var rec = 1;
		while(rec < 256) {
			var data;
			try {
				data = ef.readRecord(rec);
			}
			catch(e) {
				if (!(e instanceof GPError) || (e.error != GPError.CARD_COMM_ERROR)) {
					print(e);
					throw(e);
				}
				break;
			}

			data = data.bytes(2);	// Strip of first two bytes
//			print("Data : " + data);
			if (data.length > 2) {	// Record might be empty
				try	{
					var tlv = new ASN1(data);
					list.push(tlv);
//					print("readCardObjects: " + tlv);
				}
				catch(e) {
					print("Error reading cryptographic information object: " + e);
					print(data);
				}
			}
			rec++;
		}
	}
	return list;
}



/**
 * Reads all CIO objects for an application and adds the CIO objects to the objlist property
 *
 * @param {PKCS15_ApplicationTemplate} at the application template
 */
PKCS15.prototype.readObjectListForApplication = function(at) {
	if (!at.ddo) {
		throw new Error("Application has no PKCS#15 information");
	}

	if (!at.ddo.odfPath) {
		throw new Error("Application has no odfPath");
	}

	at.objlist = new Array();

	var dos = this.readCardObjects(":3F00", at.ddo.odfPath);

	// Determine current DF
	var df = at.ddo.odfPath.getAbsolutePath(":3F00");
	df = df.slice(0, -5);
	this.df = df;

	for (var i = 0; i < dos.length; i++) {
		var tlv = dos[i];
		assert(tlv.isconstructed);
		var ciotype = tlv.tag;
		var path = new PKCS15_Path(tlv.get(0));

//		print("Path = " + path);
		try	{
			var cios = this.readCardObjects(df, path);
		}
		catch(e) {
			print(e);
			continue;
		}

		for (var j = 0; j < cios.length; j++) {
			var tlv = cios[j];

			var cio;
			switch(ciotype) {
				case 0xA0:
					cio = new PKCS15_PrivateKey(tlv);
//					cio.type = "PrivateKey";
					break;
				case 0xA1:
//					cio = new PKCS15_PublicKey(tlv);
					cio = new PKCS15_CIO(tlv);
					cio.type = "PublicKey";
					break;
				case 0xA2:
//					cio = new PKCS15_PublicKey(tlv);
					cio = new PKCS15_CIO(tlv);
					cio.type = "TrustedPublicKey";
					break;
				case 0xA3:
//					cio = new PKCS15_SecretKey(tlv);
					cio = new PKCS15_CIO(tlv);
					cio.type = "SecretKey";
					break;
				case 0xA4:
					cio = new PKCS15_Certificate(tlv);
//					cio.type = "Certificate";
					break;
				case 0xA5:
					cio = new PKCS15_Certificate(tlv);
					cio.type = "Trusted" + cio.type;
					break;
				case 0xA6:
					cio = new PKCS15_Certificate(tlv);
					cio.type = "Useful" + cio.type;
					break;
				case 0xA7:
					cio = new PKCS15_DataContainerObject(tlv);
					cio.type = "DataContainerObject";
					break;
				case 0xA8:
					cio = new PKCS15_AuthenticationObject(tlv);
					cio.type = "AuthObject";
					break;
				default:
					assert(false);
			}
			at.objlist.push(cio);
		}
	}
}



/**
 * Reads and return the CIAInfo structure referenced by the PKCS#15 path element.
 *
 * @param {PKCS15_Path} path the path to the CIAInfo file
 * @return the CIAInfo description
 * @type PKCS15_CIAInfo
 */
PKCS15.prototype.getCIAInfo = function(path) {

	var cia = this.readCardObject(":3F00", path);
	var tlv = new ASN1(cia);
	return new PKCS15_CIAInfo(tlv);
}



/**
 * Return the hash table of application templates
 *
 * @return the hash table of application templates
 * @type PKCS15_ApplicationTemplate[]
 */
PKCS15.prototype.getAidList = function() {
	return this.aidlist;
}

/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A PKCS#10 generator class based on RFC5280
 */

load("pkixcommon.js");


/**
 * Create a PKCS#10 certificate request
 *
 * @class Class implementing a PKCS#10 certificate request
 * @constructor
 *
 * @param {Crypto} crypto the crypto provider to use for signing operations
 */
function PKCS10Generator(crypto) {
	this.crypto = crypto;
	this.reset();
}



/**
 * Resets all internal state variables.
 *
 */
PKCS10Generator.prototype.reset = function() {
	this.extensions = new Array();
	this.attributes = new Array();
}



/**
 * Sets the subject name.
 *
 * <p>The subject name must be a JavaScript object containing the properties:</p>
 * <ul>
 *  <li>C - the country</li>
 *  <li>O - the organization</li>
 *  <li>OU - the organization unit</li>
 *  <li>CN - the common name</li>
 * </ul>
 * <p>Example:</p>
 * <pre>
 *	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
 * </pre>
 * @see PKIXCommon.encodeName()
 * @param {Object} subject the subject name
 */
PKCS10Generator.prototype.setSubject = function(subject) {
	this.subject = subject;
}



/**
 * Sets the subjects public key
 *
 * <p>The methods accepts ECC and RSA Public Keys.</p>
 *
 * @param {Key} publicKey the subjects public key
 */
PKCS10Generator.prototype.setPublicKey = function(publicKey) {
	this.publicKey = publicKey;
}



/**
 * Sets the signature algorithm. Currently only Crypto.RSA is supported
 *
 * @param {Number} alg the signature algorithm, only Crypto.RSA supported
 */
PKCS10Generator.prototype.setSignatureAlgorithm = function(alg) {
	this.signatureAlgorithm = alg;
}



/**
 * Adds an extension to the certificate
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *    Extension  ::=  SEQUENCE  {
 *        extnID      OBJECT IDENTIFIER,
 *        extnValue   OCTET STRING
 *                    -- contains the DER encoding of an ASN.1 value
 *                    -- corresponding to the extension type identified
 *                    -- by extnID
 *        }
 *</pre>
 * @param {String} extnID the extensions object identifier
 * @param {ByteString} the extension value as ByteString
 */
PKCS10Generator.prototype.addExtension = function(extnID, extnValue) {
	var t = new ASN1("extension", ASN1.SEQUENCE,
				new ASN1("extnID", ASN1.OBJECT_IDENTIFIER, new ByteString(extnID, OID))
			);

	t.add(new ASN1("extnValue", ASN1.OCTET_STRING, extnValue));
	this.extensions.push(t);
}



/**
 * Adds the key usage extension.
 *
 * <p>The following flags are defined:</p>
 * <pre>
 * PKCS10Generator.digitalSignature = 0x0080;
 * PKCS10Generator.nonRepudiation   = 0x0040;
 * PKCS10Generator.keyEncipherment  = 0x0020;
 * PKCS10Generator.dataEncipherment = 0x0010;
 * PKCS10Generator.keyAgreement     = 0x0008;
 * PKCS10Generator.keyCertSign      = 0x0004;
 * PKCS10Generator.cRLSign          = 0x0002;
 * PKCS10Generator.encipherOnly     = 0x0001;
 * PKCS10Generator.decipherOnly     = 0x8000;
 * </pre>
 * @param {Number} the key usage flags as combination of the flags defined above.
 */
PKCS10Generator.prototype.addKeyUsageExtension = function(flags) {
	var t = new ASN1(ASN1.BIT_STRING, PKIXCommon.bitstringForInteger(flags));
	this.addExtension("2.5.29.15", t.getBytes());
}

// Deprecated: Use PKIXCommon. instead
PKCS10Generator.digitalSignature	= 0x0080;
PKCS10Generator.nonRepudiation		= 0x0040;
PKCS10Generator.keyEncipherment		= 0x0020;
PKCS10Generator.dataEncipherment	= 0x0010;
PKCS10Generator.keyAgreement		= 0x0008;
PKCS10Generator.keyCertSign			= 0x0004;
PKCS10Generator.cRLSign				= 0x0002;
PKCS10Generator.encipherOnly		= 0x0001;
PKCS10Generator.decipherOnly		= 0x8000;



/**
 * Adds extended key usages
 *
 * @param {String[]} the list of extended key usage object identifier
 */
PKCS10Generator.prototype.addExtendedKeyUsageExtension = function(keyusages) {
	var t = new ASN1(ASN1.SEQUENCE);
	for (var i = 0; i < keyusages.length; i++) {
		t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString(keyusages[i], OID)));
	}
	this.addExtension("id-ce-extKeyUsage", t.getBytes());
}



/**
 * Adds the BasicConstraints extension.
 *
 * @param {Boolean} cA the certificate belongs to a CA
 * @param {Number} pathLenConstraint the maximum number of subordinate CA certificates
 */
PKCS10Generator.prototype.addBasicConstraintsExtension = function(cA, pathLenConstraint) {
	var t = new ASN1("BasicConstraints",ASN1.SEQUENCE);
	if (cA) {
		t.add(new ASN1("cA", ASN1.BOOLEAN, new ByteString("FF", HEX)));
	}
	if (pathLenConstraint >= 0) {
		var bb = new ByteBuffer();
		bb.append(pathLenConstraint);
		t.add(new ASN1("pathLenConstraint", ASN1.INTEGER, bb.toByteString()));
	}
	this.addExtension("2.5.29.19", t.getBytes());
}



/**
 * Gets the subject name as TLV object
 *
 * @return the issuer RDNSequence
 * @type ASN1
 */
PKCS10Generator.prototype.getSubject = function() {
	return PKIXCommon.encodeName(this.subject);
}



/**
 * Gets the subject's public key as TLV object
 *
 * @return the subject's public key info
 * @type ASN1
 */
PKCS10Generator.prototype.getSubjectPublicKeyInfo = function() {
	if (this.publicKey.getComponent(Key.MODULUS)) {
		return PKIXCommon.createRSASubjectPublicKeyInfo(this.publicKey);
	} else {
		return PKIXCommon.createECSubjectPublicKeyInfo(this.publicKey, this.encodeECDomainParameter);
	}
}



/**
 * Gets the extension attribute as TLV object
 *
 * @return the certificate extensions
 * @type ASN1
 */
PKCS10Generator.prototype.getExtensions = function() {
	var t = new ASN1("extensions", ASN1.SEQUENCE);
	t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("1.2.840.113549 1 9 14", OID)));
	var s = new ASN1("extensions", ASN1.SET);
	t.add(s);
	var l = new ASN1("extensions", ASN1.SEQUENCE);
	s.add(l);
	
	for (var i = 0; i < this.extensions.length; i++) {
		l.add(this.extensions[i]);
	}
	return t;
}



/**
 * Gets the attributes as TLV object
 *
 * @return the request attributes
 * @type ASN1
 */
PKCS10Generator.prototype.getAttributes = function() {
	var t = new ASN1("attributes", 0xA0);
	
	if (this.extensions.length > 0) {
		t.add(this.getExtensions());
	}
	
	for (var i = 0; i < this.attributes.length; i++) {
		t.add(this.attributes[i]);
	}
	
	return t;
}



/**
 * Gets the part of the request that will be signed
 *
 * @return the TBSCertificate part
 * @type ASN1
 */
PKCS10Generator.prototype.getTbsRequest = function() {
	var t = new ASN1("certificationRequestInfo", ASN1.SEQUENCE);
	t.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX)));
	t.add(this.getSubject());
	t.add(this.getSubjectPublicKeyInfo());
	t.add(this.getAttributes());
	return t;
}



/**
 * Gets the signature algorithm TLV object
 *
 * @return the signature algorithm object
 * @type ASN1
 */
PKCS10Generator.prototype.getSignatureAlgorithm = function() {
	var t = new ASN1("signatureAlgorithm", ASN1.SEQUENCE);

	if (this.signatureAlgorithm == Crypto.RSA) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("1.2.840.113549.1.1.5", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else if (this.signatureAlgorithm == Crypto.RSA_SHA256) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("1 2 840 113549 1 1 11", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else {
		throw new GPError("PKCS10Generator", GPError.INVALID_MECH, this.signatureAlgorithm, "Invalid algorithm");
	}
		
	return t;
}



/**
 * Generates the certificate.
 *
 * @return the generated certificate
 * @type ASN1
 */
PKCS10Generator.prototype.generateCertificationRequest = function(privateKey) {
	var request = new ASN1("certificationRequest", ASN1.SEQUENCE);
	
	var tbs = this.getTbsRequest();
	request.add(tbs);
	request.add(this.getSignatureAlgorithm());
	
	var signature = this.crypto.sign(privateKey, this.signatureAlgorithm, tbs.getBytes());
	signature = (new ByteString("00", HEX)).concat(signature);

	var signatureValue = new ASN1("signatureValue", ASN1.BIT_STRING, signature);
	request.add(signatureValue);
	
	return request;
}



function PKCS10GeneratorTest() {

	var crypto = new Crypto();
	
	var reqPrivateKey = new Key();
	reqPrivateKey.setType(Key.PRIVATE);

	var reqPublicKey = new Key();
	reqPublicKey.setType(Key.PUBLIC);
	reqPublicKey.setSize(1024);
	
	crypto.generateKeyPair(Crypto.RSA, reqPublicKey, reqPrivateKey);
	
	var x = new PKCS10Generator(crypto);

	x.reset();
	x.setSignatureAlgorithm(Crypto.RSA_SHA256);

	var subject = [{C:"UT"}, {O:"Utopia CA"}, {OU:"ACME Corporation"}, {CN:"Joe Doe"} ];
	
	x.setSubject(subject);

	x.setPublicKey(reqPublicKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );

	var req = x.generateCertificationRequest(reqPrivateKey);
	var fn = GPSystem.mapFilename("cert.csr", GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, req.getBytes());

	print(req);
	
	return req;
}
<?xml version="1.0" encoding="UTF-8"?>
<FileStructure arrayElement="EF" arrayIndex="#">
    <EF fid="2F00" format="asn1" name="EF_DIR" />
    <EF fid="2F01" format="asn1" name="EF_ATR" />
    <EF fid="0030" format="asn1" name="EF_ARR" />
    <EF fid="5030" format="asn1" name="EF_5030" />
    <EF fid="5031" format="asn1" name="EF_OD" />
    <EF fid="5032" format="asn1" name="EF_CIAInfo" />
    <EF fid="5033" format="asn1" name="EF_5033" />
    <EF fid="5034" format="asn1" name="EF_5034" />
    <EF fid="5035" format="asn1" name="EF_PrKD" />
    <EF fid="5036" format="asn1" name="EF_PuKD" />
    <EF fid="5037" format="asn1" name="EF_AOD" />
    <EF fid="5038" format="asn1" name="EF_CD" />
    <EF fid="5039" format="asn1" name="EF_DCOD" />
</FileStructure>    
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Basic helper functions to convert PKCS#8 data to GP keys and vice versa
 */



/**
 * Empty constructor
 */
function PKCS8() {
}



PKCS8.idEcPublicKey = new ByteString("id-ecPublicKey", OID);
PKCS8.rsaEncryption = new ByteString("1.2.840.113549.1.1.1", OID);

/**
 * Convert x/y coordinates to uncompressed format
 *
 * @param {ByteString} x the x coordinate
 * @param {ByteString} y the y coordinate
 * @type ByteString
 * @return ByteString containing compressed format
 *
 */ 
PKCS8.encodeUncompressedECPoint = function(x,y) {

	bb = new ByteBuffer();

	// uncompressed encoding
	bb.append(new ByteString("04", HEX));
	bb.append(x);
	bb.append(y);

	return bb.toByteString();
}



/**
 * Convert uncompressed format to x and y coordinates
 *
 * @param {ByteString} compressed point
 * @type Object
 * @return Object with ByteString properties x and y
 *
 */ 
PKCS8.decodeUncompressedECPoint = function(uncompressedPoint) {

	// Determine the size of the coordinates ignoring the indicator byte '04'
	var length = uncompressedPoint.length - 1;

	var sizeOfCoordinate = length >> 1;

	var xValue = uncompressedPoint.bytes(1, sizeOfCoordinate);
	var yValue = uncompressedPoint.bytes(1 + sizeOfCoordinate, sizeOfCoordinate);

	return { x:xValue, y:yValue };
} 



/**
 * Integer to octet string conversion
 *
 * @param {ByteString} value the encoded integer value
 * @param {Number} the number of digits
 * @type ByteString
 * @return the truncated or padded result
 */
PKCS8.I2O = function(value, length) {
	if (value.length > length) {
		value = value.right(length);
	}
	while (value.length < length) {
		value = PKCS8.PAD.left((length - value.length - 1 & 15) + 1).concat(value);
	}
	return value;
}
PKCS8.PAD = new ByteString("00000000000000000000000000000000", HEX);



/**
 * Strips leading zeros of a ByteString
 *
 * @param {ByteString} value the ByteString value
 * @return the stripped ByteString object, may be an empty ByteString
 * @type ByteString
 */
PKCS8.stripLeadingZeros = function(value, size) {
	if (typeof(size) == "undefined") {
		var limit = value.length;
	} else {
		limit = value.length - size;
	}
	
	var i = 0;
	for (; (i < limit) && (value.byteAt(i) == 0); i++);
	
	return value.bytes(i);
}



/**
 * Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
 *
 * This prevent interpretation of the integer representation if converted into
 * a signed ASN1 INTEGER.
 *
 * @param {ByteString} value the value to convert
 * @return the converted value
 * @type ByteString
 */
PKCS8.convertUnsignedInteger = function(value) {
	assert(value.length > 0);
	
	var i = 0;
	for (; (i < value.length - 1) && (value.byteAt(i) == 0); i++);
	
	if (value.byteAt(i) >= 0x80) {
		value = (new ByteString("00", HEX)).concat(value.bytes(i));
	} else {
		value = value.bytes(i);
	}
	
	return value;
}



/**
 * Encode a given GP ECC private key as specified by the PKCS#8 format
 *
 * @param {Key} the private key object that should be encoded
 * @return the encoded PKCS#8 private key
 * @type ByteString
 */
PKCS8.encodeECCKeyUsingPKCS8Format = function(privateKey) {
	var privateKeyInfo = new ASN1(ASN1.SEQUENCE);
	
	// Set the version number - must be zero
	privateKeyInfo.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX)));
	
	var privateKeyAlgorithm = new ASN1(ASN1.SEQUENCE);
	privateKeyAlgorithm.add(new ASN1(ASN1.OBJECT_IDENTIFIER, PKCS8.idEcPublicKey));
	
	var domainInfo = new ASN1(ASN1.SEQUENCE);
	
	// Cofactor - must be 1
	domainInfo.add(new ASN1(ASN1.INTEGER, PKCS8.stripLeadingZeros(privateKey.getComponent(Key.ECC_H))));
	
	var field = new ASN1(ASN1.SEQUENCE);
	
	// we are using a prime field
	field.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("prime-field", OID))); // prime field
	
	var primeOrder = privateKey.getComponent(Key.ECC_P);
	if (primeOrder.byteAt(0) >= 0x80) { // signed int? -> add 0x00
		field.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX).concat(privateKey.getComponent(Key.ECC_P))));
	} else {
		field.add(new ASN1(ASN1.INTEGER, privateKey.getComponent(Key.ECC_P)));
	}
	
	domainInfo.add(field);
	
	// Coefficients a and b
	var coeff = new ASN1(ASN1.SEQUENCE);
	
	// first coefficient
	coeff.add(new ASN1(ASN1.OCTET_STRING, privateKey.getComponent(Key.ECC_A)));
	
	// second coefficient
	coeff.add(new ASN1(ASN1.OCTET_STRING, privateKey.getComponent(Key.ECC_B)));
	
	domainInfo.add(coeff);
	
	// Base point (uncompressed)
	var gx = privateKey.getComponent(Key.ECC_GX);
	var gy = privateKey.getComponent(Key.ECC_GY);
	
	domainInfo.add(new ASN1(ASN1.OCTET_STRING, PKCS8.encodeUncompressedECPoint(gx, gy)));
	
	// group order generated by the base point
	var groupOrder = privateKey.getComponent(Key.ECC_N);
	if (groupOrder.byteAt(0) >= 0x80) { // signed int? -> add 0x00
		domainInfo.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX).concat(privateKey.getComponent(Key.ECC_N))));
	} else {
		domainInfo.add(new ASN1(ASN1.INTEGER, privateKey.getComponent(Key.ECC_N)));
	}
	
	privateKeyAlgorithm.add(domainInfo);
	
	// encode the key information
	privateKeyInfo.add(privateKeyAlgorithm);
	
	// encode the private key
	var encodedPrivateKey = new ASN1(ASN1.OCTET_STRING);
	
	var pk = privateKey.getComponent(Key.ECC_D);
	var key = new ASN1(ASN1.SEQUENCE);
	key.add(new ASN1(ASN1.INTEGER, new ByteString("01", HEX)));
	key.add(new ASN1(ASN1.OCTET_STRING, pk));
	
	encodedPrivateKey.add(key);
	
	privateKeyInfo.add(encodedPrivateKey);
	
//	print(privateKeyInfo);
	return privateKeyInfo.getBytes();	
}



/**
 * Encode RSA private key as defined in PKCS#1
 *
 * RSAPrivateKey ::= SEQUENCE {
 *     version           Version,
 *     modulus           INTEGER,  -- n
 *     publicExponent    INTEGER,  -- e
 *     privateExponent   INTEGER,  -- d
 *     prime1            INTEGER,  -- p
 *     prime2            INTEGER,  -- q
 *     exponent1         INTEGER,  -- d mod (p-1)
 *     exponent2         INTEGER,  -- d mod (q-1)
 *     coefficient       INTEGER,  -- (inverse of q) mod p
 *     otherPrimeInfos   OtherPrimeInfos OPTIONAL
 * }
 * @param {Key} privateKey the private RSA key in CRT format
 * @type ByteString
 * @return the encoded RSA key
 */
PKCS8.encodeRSAKey = function(privateKey, publicKey) {
	var rsaPrivateKey = 
		new ASN1(ASN1.SEQUENCE);
		
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));
	if (typeof(publicKey) != "undefined") {
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(publicKey.getComponent(Key.MODULUS))));
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(publicKey.getComponent(Key.EXPONENT))));
	} else {
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));
	}
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));		// Private Exponent not at interface for CRT format
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_P))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_Q))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_DP1))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_DQ1))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_PQ))));

	return rsaPrivateKey.getBytes();
}



/**
 * Encode a given GP RSA private key as specified by the PKCS#8 format
 *
 * @param {Key} the private key object that should be encoded
 * @return the encoded PKCS#8 private key
 * @type ByteString
 */
PKCS8.encodeRSAKeyUsingPKCS8Format = function(privateKey, publicKey) {
	var privateKeyInfo = new ASN1(ASN1.SEQUENCE);
	
	// Set the version number - must be zero
	privateKeyInfo.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX)));
	
	var privateKeyAlgorithm = new ASN1(ASN1.SEQUENCE);
	privateKeyAlgorithm.add(new ASN1(ASN1.OBJECT_IDENTIFIER, PKCS8.rsaEncryption));
	privateKeyAlgorithm.add(new ASN1(ASN1.NULL));
	
	// encode the key information
	privateKeyInfo.add(privateKeyAlgorithm);
	
	// encode the private key
	var encodedPrivateKey = new ASN1(ASN1.OCTET_STRING, PKCS8.encodeRSAKey(privateKey, publicKey));
	
	privateKeyInfo.add(encodedPrivateKey);
	
//	print(privateKeyInfo);
	return privateKeyInfo.getBytes();	
}



/**
 * Encode a given GP private key as specified by the PKCS#8 format
 *
 * For now we only support the encoding of ECC private keys in a prime field
 *
 * @param {Key} the private key object that should be encoded
 * @return the encoded PKCS#8 private key
 * @type ByteString
 */
PKCS8.encodeKeyUsingPKCS8Format = function(privateKey, publicKey) {
	
	assert(privateKey.getType() == Key.PRIVATE);
	if (typeof(privateKey.getComponent(Key.ECC_P)) != "undefined") {
		return PKCS8.encodeECCKeyUsingPKCS8Format(privateKey);
	} else {
		return PKCS8.encodeRSAKeyUsingPKCS8Format(privateKey, publicKey);
	}
}



/**
 * Decode a given PKCS#8 ECC private key from the given ByteString and create a GP key object
 *
 * For now we only support the decoding of ECC private keys in a prime field
 * 
 * @param {ASN1} algparam the algorithm parameter from AlgorithmInfo
 * @param {ASN1} privateKey the privateKey element from the PKCS#8 structure
 * @return the GP key object
 * @type Key
 */
PKCS8.decodeECCKeyFromPKCS8Format = function(domainParameter, encodedKey) {
	
	var key = new Key();
	
	key.setType(Key.PRIVATE);
	
	key.setComponent(Key.ECC_D, encodedKey.get(1).value);
	
	// Decode the domain parameters
	var cofactor = domainParameter.get(0);
	key.setComponent(Key.ECC_H, cofactor.value);
	
	var order = domainParameter.get(1).get(1);
	key.setComponent(Key.ECC_P, PKCS8.stripLeadingZeros(order.value));
	
	var coeff_A = domainParameter.get(2).get(0);
	key.setComponent(Key.ECC_A, coeff_A.value);
	
	var coeff_B = domainParameter.get(2).get(1);
	key.setComponent(Key.ECC_B, coeff_B.value);
	
	var generatorPoint = domainParameter.get(3).value;
	
	var coordinates = PKCS8.decodeUncompressedECPoint(generatorPoint);
	
	key.setComponent(Key.ECC_GX, coordinates.x);
	key.setComponent(Key.ECC_GY, coordinates.y);
	
	var groupOrder = domainParameter.get(4);
	
	key.setComponent(Key.ECC_N, PKCS8.stripLeadingZeros(groupOrder.value));
	
	return key;	
}



/**
 * Decode a given PKCS#8 RSA private key from the given ByteString and create a GP key object
 *
 * @param {ByteString} the private key object in PKCS#8 format
 * @param {ASN1} algparam the algorithm parameter from AlgorithmInfo
 * @param {ASN1} privateKey the privateKey element from the PKCS#8 structure
 * @return the GP key object
 * @type Key
 */
PKCS8.decodeRSAKeyFromPKCS8Format = function(algparam, privateKey) {
	
	var key = new Key();
	
	key.setType(Key.PRIVATE);
	
	assert(algparam.tag == ASN1.NULL);
	assert(!algparam.isconstructed);
	assert(algparam.length == 0);
	
	assert(privateKey.tag == ASN1.SEQUENCE);
	assert(privateKey.isconstructed);
	assert(privateKey.elements >= 9);
	
	for (var i = 0; i < 9; i++) {
		var e = privateKey.get(i);
		assert(e.tag == ASN1.INTEGER);
		assert(!e.isconstructed);
	}
	
	assert(privateKey.get(0).value.toUnsigned() == 0);
	
	var p = PKCS8.stripLeadingZeros(privateKey.get(4).value);
	var l = p.length;
	key.setComponent(Key.CRT_P,   p);
	key.setComponent(Key.CRT_Q,   PKCS8.I2O(privateKey.get(5).value, l));
	key.setComponent(Key.CRT_DP1, PKCS8.I2O(privateKey.get(6).value, l));
	key.setComponent(Key.CRT_DQ1, PKCS8.I2O(privateKey.get(7).value, l));
	key.setComponent(Key.CRT_PQ,  PKCS8.I2O(privateKey.get(8).value, l));

	return key;	
}



/**
 * Decode a given PKCS#8 private key from the given ByteString and create a GP key object
 *
 * For now we only support the decoding of ECC private keys in a prime field
 * 
 * @param {ByteString} the private key object in PKCS#8 format
 * @return the GP key object
 * @type Key
 */
PKCS8.decodeKeyFromPKCS8Format = function(encodedKey) {
	var p8 = new ASN1(encodedKey);
	
	assert(p8.isconstructed);
	assert(p8.elements >= 3);
	
	var version = p8.get(0);
	assert(version.tag == ASN1.INTEGER);
	assert(version.value.toUnsigned() == 0);
	
	var pkai = p8.get(1);
	assert(pkai.tag == ASN1.SEQUENCE);
	assert(pkai.isconstructed);
	assert(pkai.elements == 2);
	var keytype = pkai.get(0);
	
	assert(keytype.tag == ASN1.OBJECT_IDENTIFIER);
	
	var algparam = pkai.get(1);
	
	var privateKey = p8.get(2);
	assert(privateKey.tag == ASN1.OCTET_STRING);
	if (privateKey.isconstructed) {
		privateKey = privateKey.get(0);
	} else {
		privateKey = new ASN1(privateKey.value);
	}
	
	if (keytype.value.equals(PKCS8.rsaEncryption)) {
		return PKCS8.decodeRSAKeyFromPKCS8Format(algparam, privateKey);
	} else if (keytype.value.equals(PKCS8.idEcPublicKey)) {
		return PKCS8.decodeECCKeyFromPKCS8Format(algparam, privateKey);
	} else {
		throw new Error("Unknown key type " + keytype.value.toString(OID));
	}
}



/**
 * Simple self-test
 */
PKCS8.test = function() {

	// Set OID for EC curve
	var ecCurve = "1.3.36.3.3.2.8.1.1.7";
    
    var crypto = new Crypto("BC");
    
    // Create empty public key object
    var pubKey = new Key();
    pubKey.setType(Key.PUBLIC);
    pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString(ecCurve, OID)); 

    // Create empty private key object
    var priKey = new Key();
    priKey.setType(Key.PRIVATE);
    priKey.setComponent(Key.ECC_CURVE_OID, new ByteString(ecCurve, OID)); 
    
    // Generate key pair
    crypto.generateKeyPair(Crypto.EC, pubKey, priKey);
	       
    // Encode
    var p8Key = PKCS8.encodeKeyUsingPKCS8Format(priKey);
    
    // Decode
    var decodedKeyObject = PKCS8.decodeKeyFromPKCS8Format(p8Key);
    
    // Compare
    assert(decodedKeyObject.getComponent(Key.ECC_D).equals(priKey.getComponent(Key.ECC_D)));
    
    assert(decodedKeyObject.getComponent(Key.ECC_GX).equals(priKey.getComponent(Key.ECC_GX)));
    assert(decodedKeyObject.getComponent(Key.ECC_GY).equals(priKey.getComponent(Key.ECC_GY)));
    assert(decodedKeyObject.getComponent(Key.ECC_A).equals(pubKey.getComponent(Key.ECC_A)));
    assert(decodedKeyObject.getComponent(Key.ECC_B).equals(pubKey.getComponent(Key.ECC_B)));
     
    // Encode
    var refp8Key = PKCS8.encodeKeyUsingPKCS8Format(decodedKeyObject);
	
    // Compare
    assert(p8Key.equals(refp8Key));	
	
	
    // Create empty public key object
	var pubKey = new Key();
    pubKey.setType(Key.PUBLIC);
    pubKey.setSize(1024); 

    // Create empty private key object
    var priKey = new Key();
    priKey.setType(Key.PRIVATE);
    
    // Generate key pair
    crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);
	       
    // Encode
    var p8Key = PKCS8.encodeKeyUsingPKCS8Format(priKey);
    
    // Decode
    var decodedKeyObject = PKCS8.decodeKeyFromPKCS8Format(p8Key);
    
    // Compare
    assert(decodedKeyObject.getComponent(Key.CRT_P).equals(priKey.getComponent(Key.CRT_P)));
    assert(decodedKeyObject.getComponent(Key.CRT_Q).equals(priKey.getComponent(Key.CRT_Q)));
    assert(decodedKeyObject.getComponent(Key.CRT_DP1).equals(priKey.getComponent(Key.CRT_DP1)));
    assert(decodedKeyObject.getComponent(Key.CRT_DQ1).equals(priKey.getComponent(Key.CRT_DQ1)));
    assert(decodedKeyObject.getComponent(Key.CRT_PQ).equals(priKey.getComponent(Key.CRT_PQ)));

    // Encode
    var refp8Key = PKCS8.encodeKeyUsingPKCS8Format(decodedKeyObject);
	
    // Compare
    assert(p8Key.equals(refp8Key));	
}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview Common classes and functions for PKIX
 */

 

/**
 * Common functions and constants
 */
function PKIXCommon() {
}


PKIXCommon.digitalSignature	= 0x0080;
PKIXCommon.nonRepudiation		= 0x0040;
PKIXCommon.keyEncipherment		= 0x0020;
PKIXCommon.dataEncipherment	= 0x0010;
PKIXCommon.keyAgreement		= 0x0008;
PKIXCommon.keyCertSign			= 0x0004;
PKIXCommon.cRLSign				= 0x0002;
PKIXCommon.encipherOnly		= 0x0001;
PKIXCommon.decipherOnly		= 0x8000;


 
/**
 * Convert integer to fixed length string with leading zeros.
 *
 * @private
 * @param {Number} value the value to convert to a string.
 * @param {Number} digits the number of digits in output string. Must be <= 20.
 * @return the 0-padded string
 * @type String
 */
PKIXCommon.itos = function(value, digits) {
	if (digits > 20) {
		throw new Error("Digits must be <= 20");
	}
	var str = "" + value;
	str = "0000000000000000000".substr(19 - (digits - str.length)).concat(str);
	return str;
}



/**
 * Convert date and time to UTC string with format YYMMDDHHMMSSZ.
 *
 * @param {Date} d the date object.
 * @return the date/time string.
 * @type String
 */
PKIXCommon.dtoUTC = function(d) {
	var s = PKIXCommon.itos(d.getUTCFullYear() % 100, 2) +
			PKIXCommon.itos(d.getUTCMonth() + 1, 2) +
			PKIXCommon.itos(d.getUTCDate(), 2) +
			PKIXCommon.itos(d.getUTCHours(), 2) +
			PKIXCommon.itos(d.getUTCMinutes(), 2) +
			PKIXCommon.itos(d.getUTCSeconds(), 2) + "Z";
	return s;
}



/**
 * Add the specified number of days to a date object
 * 
 * @param {Date} d the date object
 * @param {Number} days the number of days to add, may be negative
 * @type Date
 * @return a new Date object
 */
PKIXCommon.addDays = function(d, days) {
	var hour = d.getUTCHours();
	var minute = d.getUTCMinutes();
	var second = d.getUTCSeconds();
	var cd = new Date(d);
	cd.setHours(12);
	
	var ts = cd.getTime();
	ts += days * 24 * 60 * 60 * 1000;
	var nd = new Date(ts);
	
	nd.setUTCHours(hour);
	nd.setUTCMinutes(minute);
	nd.setUTCSeconds(second);
	return nd;
}



/**
 * Converts the integer value into a BIT STRING value.
 * <p>The function interprets the integer value as bitmap, where
 * bit 0 is the most significant bit of the least significant byte.</p>
 * <p>The function adds the minimum number of bytes to the final bit string
 * and encodes the "number of unused bits at the beginning.</p>
 * 
 * @param {Number} val the value to convert
 * @return the bit string
 * @type ByteString
 */
PKIXCommon.bitstringForInteger = function(val) {
	var bb = new ByteBuffer();
	var b = 0;
	
	// Encode starting with the least significant byte
	while (val > 0) {
		b = val & 0xFF;
		bb.append(b);
		val = val >> 8;
	}
	
	// Determine number of unused bits
	var i = 0;
	while ((i < 8) && !(b & 1)) {
		i++;
		b >>= 1;
	}
	
	bb.insert(0, i);
	return bb.toByteString();
}



/**
 * Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
 *
 * This prevent interpretation of the integer representation if converted into
 * a signed ASN1 INTEGER.
 *
 * @param {ByteString} value the value to convert
 * @return the converted value
 * @type ByteString
 */
PKIXCommon.convertUnsignedInteger = function(value) {
	assert(value.length > 0);
	
	var i = 0;
	for (var i = 0; (i < value.length - 1) && (value.byteAt(i) == 0); i++);
	
	if (value.byteAt(i) >= 0x80) {
		value = (new ByteString("00", HEX)).concat(value.bytes(i));
	} else {
		value = value.bytes(i);
	}
	
	return value;
}



/**
 * Creates the EC Public Key as subjectPublicKeyInfo TLV structure object.
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *	SubjectPublicKeyInfo  ::=  SEQUENCE  {
 *		algorithm            AlgorithmIdentifier,
 *		subjectPublicKey     BIT STRING  }
 *
 *	AlgorithmIdentifier  ::=  SEQUENCE  {
 *		algorithm               OBJECT IDENTIFIER,
 *		parameters              ANY DEFINED BY algorithm OPTIONAL  }
 * 
 *	id-ecPublicKey OBJECT IDENTIFIER ::= {
 *		iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 }
 *
 *	ECParameters ::= CHOICE {
 *		namedCurve         OBJECT IDENTIFIER,
 *		implicitCurve      NULL,
 *		specifiedCurve     SpecifiedECDomain }
 * </pre>
 * @return the subjectPublicKey TLV structure
 * @type ASN1
 */
PKIXCommon.createECSubjectPublicKeyInfo = function(publicKey, encodeECDomainParameter) {
	var t = new ASN1("subjectPublicKeyInfo", ASN1.SEQUENCE);

	var algorithm = new ASN1("algorithm", ASN1.SEQUENCE,
			new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("1.2.840.10045.2.1", OID))
		);

	if (encodeECDomainParameter) {
		if (publicKey.getComponent(Key.ECC_P)) {		// Make sure curve components are available if only curve oid is defined
			publicKey.setComponent(Key.ECC_CURVE_OID, publicKey.getComponent(Key.ECC_CURVE_OID));
		}
		var ecParameter = 
			new ASN1("ecParameters", ASN1.SEQUENCE,
				new ASN1("version", ASN1.INTEGER, new ByteString("01", HEX)),
				new ASN1("fieldID", ASN1.SEQUENCE,
					new ASN1("fieldType", ASN1.OBJECT_IDENTIFIER, new ByteString("prime-field", OID)),
					new ASN1("prime", ASN1.INTEGER, 
						PKIXCommon.convertUnsignedInteger(publicKey.getComponent(Key.ECC_P)))
				),
				new ASN1("curve", ASN1.SEQUENCE,
					new ASN1("a", ASN1.OCTET_STRING, 
						PKIXCommon.convertUnsignedInteger(publicKey.getComponent(Key.ECC_A))),
					new ASN1("b", ASN1.OCTET_STRING, 
						PKIXCommon.convertUnsignedInteger(publicKey.getComponent(Key.ECC_B)))
				),
				new ASN1("base", ASN1.OCTET_STRING,
						(new ByteString("04", HEX)).concat(publicKey.getComponent(Key.ECC_GX)).concat(publicKey.getComponent(Key.ECC_GY))),
				new ASN1("order", ASN1.INTEGER,
					PKIXCommon.convertUnsignedInteger(publicKey.getComponent(Key.ECC_N)))
			);
		
		var cofactor = publicKey.getComponent(Key.ECC_H);
		var i = 0;
		for (; (i < cofactor.length) && (cofactor.byteAt(i) == 0); i++);
		if (i < cofactor.length) {
			ecParameter.add(new ASN1("cofactor", ASN1.INTEGER, cofactor.bytes(i)));
		}
		algorithm.add(ecParameter);	
	} else {
		algorithm.add(new ASN1("parameters", ASN1.OBJECT_IDENTIFIER, publicKey.getComponent(Key.ECC_CURVE_OID)));
	}
	
	t.add(algorithm);
	
	// Prefix a 00 to form correct bitstring
	// Prefix a 04 to indicate uncompressed format
	var keybin = new ByteString("0004", HEX);
	keybin = keybin.concat(publicKey.getComponent(Key.ECC_QX));
	keybin = keybin.concat(publicKey.getComponent(Key.ECC_QY));
	t.add(new ASN1("subjectPublicKey", ASN1.BIT_STRING, keybin));

	return t;
}



/**
 * Creates the RSA Public Key as subjectPublicKeyInfo TLV structure object.
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *	SubjectPublicKeyInfo  ::=  SEQUENCE  {
 *		algorithm            AlgorithmIdentifier,
 *		subjectPublicKey     BIT STRING  }
 *
 *	AlgorithmIdentifier  ::=  SEQUENCE  {
 *		algorithm               OBJECT IDENTIFIER,
 *		parameters              ANY DEFINED BY algorithm OPTIONAL  }
 * 
 *	pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 }
 *
 *	rsaEncryption OBJECT IDENTIFIER ::=  { pkcs-1 1}
 *
 *	RSAPublicKey ::= SEQUENCE {
 *		modulus            INTEGER,    -- n
 *		publicExponent     INTEGER  }  -- e
 * </pre>
 *
 * @return the subjectPublicKey TLV structure
 * @type ASN1
 */
PKIXCommon.createRSASubjectPublicKeyInfo = function(publicKey) {
	var t = new ASN1("subjectPublicKeyInfo", ASN1.SEQUENCE);
	
	t.add(new ASN1("algorithm", ASN1.SEQUENCE,
		new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("1.2.840.113549.1.1.1", OID)),
		new ASN1("parameters", ASN1.NULL, new ByteString("", HEX))
	       ));
	// Prefix a 00 to form correct bitstring
	var keybin = new ByteString("00", HEX);

	var modulus = publicKey.getComponent(Key.MODULUS);
	modulus = PKIXCommon.convertUnsignedInteger(modulus);
	
	var exponent = publicKey.getComponent(Key.EXPONENT);
	exponent = PKIXCommon.convertUnsignedInteger(exponent);

	var rsapub = new ASN1("RSAPublicKey", ASN1.SEQUENCE,
			new ASN1("modulus", ASN1.INTEGER, modulus),
			new ASN1("publicKeyExponent", ASN1.INTEGER, exponent));

	keybin = keybin.concat(rsapub.getBytes());
	t.add(new ASN1("subjectPublicKey", ASN1.BIT_STRING, keybin));

	return t;
}



/**
 * Creates a relative distinguished name component.
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *	RelativeDistinguishedName ::=
 *		SET SIZE (1..MAX) OF AttributeTypeAndValue
 *
 *	AttributeTypeAndValue ::= SEQUENCE {
 *		type     AttributeType,
 *		value    AttributeValue }
 *
 *	AttributeType ::= OBJECT IDENTIFIER
 *
 *	AttributeValue ::= ANY -- DEFINED BY AttributeType
 *
 *	DirectoryString ::= CHOICE {
 *		teletexString           TeletexString (SIZE (1..MAX)),
 *		printableString         PrintableString (SIZE (1..MAX)),
 *		universalString         UniversalString (SIZE (1..MAX)),
 *		utf8String              UTF8String (SIZE (1..MAX)),
 *		bmpString               BMPString (SIZE (1..MAX)) }
 *</pre>
 *
 * @param {String} name the components name
 * @param {String} oid the oid for the RDN
 * @param {ASN1} value the value object
 * @return the 
 */
PKIXCommon.makeRDN = function(name, oid, value) {
	return new ASN1(name, ASN1.SET,
				new ASN1(ASN1.SEQUENCE,
					new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString(oid, OID)),
					value
				)
			);
}



/**
 * Adds names from the name object to the RDNSequence.
 *
 * @param {ASN1} t the sequence object
 * @param {Object} name the name object
 */
PKIXCommon.addNames = function(t, name) {
	if (name.C) {
		t.add(PKIXCommon.makeRDN("country", "id-at-countryName", new ASN1(ASN1.PrintableString, new ByteString(name.C, ASCII))));
	}
	if (name.O) {
		t.add(PKIXCommon.makeRDN("organization", "id-at-organizationName", new ASN1(ASN1.UTF8String, new ByteString(name.O, UTF8))));
	}
	if (name.OU) {
		t.add(PKIXCommon.makeRDN("organizationalUnit", "id-at-organizationalUnitName", new ASN1(ASN1.UTF8String, new ByteString(name.OU, UTF8))));
	}
	if (name.S) {
		t.add(PKIXCommon.makeRDN("stateOrProvince", "id-at-stateOrProvinceName", new ASN1(ASN1.UTF8String, new ByteString(name.S, UTF8))));
	}
	if (name.L) {
		t.add(PKIXCommon.makeRDN("locality", "id-at-localityName", new ASN1(ASN1.UTF8String, new ByteString(name.L, UTF8))));
	}
	if (name.DC) {
		t.add(PKIXCommon.makeRDN("domainComponent", "id-domainComponent", new ASN1(ASN1.UTF8String, new ByteString(name.DC, UTF8))));
	}
	if (name.T) {
		t.add(PKIXCommon.makeRDN("title", "id-at-title", new ASN1(ASN1.UTF8String, new ByteString(name.T, UTF8))));
	}
	if (name.G) {
		t.add(PKIXCommon.makeRDN("givenName", "id-at-givenName", new ASN1(ASN1.UTF8String, new ByteString(name.G, UTF8))));
	}
	if (name.SN) {
		t.add(PKIXCommon.makeRDN("surname", "id-at-surname", new ASN1(ASN1.UTF8String, new ByteString(name.SN, UTF8))));
	}
	if (name.CN) {
		t.add(PKIXCommon.makeRDN("commonName", "id-at-commonName", new ASN1(ASN1.UTF8String, new ByteString(name.CN, UTF8))));
	}
	if (name.SERIALNUMBER) {
		t.add(PKIXCommon.makeRDN("serialNumber", "id-at-serialNumber", new ASN1(ASN1.UTF8String, new ByteString(name.SERIALNUMBER, UTF8))));
	}
	if (name.DNQ) {
		t.add(PKIXCommon.makeRDN("dnQualifier", "id-at-dnQualifier", new ASN1(ASN1.UTF8String, new ByteString(name.DNQ, UTF8))));
	}
	if (name.E) {
		t.add(PKIXCommon.makeRDN("emailAddress", "id-emailAddress", new ASN1(ASN1.IA5String, new ByteString(name.E, ASCII))));
	}
	if (name.UID) {
		t.add(PKIXCommon.makeRDN("userId", "id-userId", new ASN1(ASN1.UTF8String, new ByteString(name.UID, UTF8))));
	}
}



/**
 * Gets the dn as TLV object
 *
 * <p>This function support two format for names</p>
 * <pre>
 *  var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 * or
 *  var issuer = [ { C:"UT"}, { O:"ACME Corporation" }, { CN:"Test-CA"} ];
 * </pre>
 *
 * <p>It supports the following RDNs:</p>
 * <ul>
 * <li>C - country</li>
 * <li>O - organization</li>
 * <li>OU - organizational unit</li>
 * <li>S - state or province</li>
 * <li>L - locality</li>
 * <li>T - title</li>
 * <li>G - given name</li>
 * <li>SN - surname</li>
 * <li>CN - common name</li>
 * <li>SERIALNUMBER - serial number</li>
 * <p>The first format sorts the RDS in the sequence C,O,OU,S,L,T,G,SN,CN,SERIALNUMBER</p>
 * </ul>
 * @param {Object} name the name object
 * @return the RDNSequence
 * @type ASN1
 */
PKIXCommon.encodeName = function(name) {
	var t = new ASN1("subject", ASN1.SEQUENCE);
	if (typeof(name.C) == "undefined") {
		for (var i = 0; i < name.length; i++) {
			PKIXCommon.addNames(t, name[i]);
		}
	} else {
		PKIXCommon.addNames(t, name);
	}
	return t;
}



/**
 * Writes a byte string object to file
 *
 * <p>The filename is mapped to the workspace location.</p>
 *
 * @param {String} filename the fully qualified name of the file
 * @param {ByteString} content the content to write
 */
PKIXCommon.writeFileToDisk = function(filename, content) {
	var file = new java.io.FileOutputStream(filename);
	file.write(content);
	file.close();
}



/**
 * Loads a binary file from disk
 *
 * @param {String} filename the fully qualified file name
 * @return the binary content
 * @type ByteString
 */
PKIXCommon.readFileFromDisk = function(filename) {
	// Open stream
	var f = new java.io.FileInputStream(filename);
	
	// Determine file size
	var flen = f.available();

	// Allocate native byte array
	var bs = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, flen);
	
	// Read into byte array
	var len = f.read(bs);

	f.close();
	
	// Allocate JavaScript ByteBuffer from native/wrapped byte array
	var bb = new ByteBuffer(bs);
	
	// Convert to JavaScript ByteString
	var data = bb.toByteString();

	return data;
}



PKIXCommon.test = function() {
	var issuer = { C:"C", O:"O", OU:"OU", SP:"SP", L:"L", DC:"DC", T:"T", G:"G", SN:"SN", CN:"CN", SERIALNUMBER:"serial", DNQ:"DNQ" };
	var dn = PKIXCommon.encodeName(issuer);
	print(dn);
	
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("00", HEX));
	assert(r.toString(HEX) == "00");
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("80", HEX));
	assert(r.toString(HEX) == "0080");
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("FF", HEX));
	assert(r.toString(HEX) == "00FF");
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("0000", HEX));
	assert(r.toString(HEX) == "00");
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("0080", HEX));
	assert(r.toString(HEX) == "0080");
	var r = PKIXCommon.convertUnsignedInteger(new ByteString("000080", HEX));
	assert(r.toString(HEX) == "0080");

}
/**
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @fileoverview A X509 certificate generator class following RFC5280
 */

if (typeof(__ScriptingServer) == "undefined") {
	load("pkixcommon.js");
}

/**
 * Create a X.509 certificate generator.
 *
 * @class Class implementing a X.509 certificate generator
 * @constructor
 *
 * @param {Crypto} crypto the crypto provider to use for signing operations
 */
function X509CertificateGenerator(crypto) {
	this.crypto = crypto;
	this.encodeECDomainParameter = true;
	this.reset();
}



/**
 * Resets all internal state variables.
 *
 */
X509CertificateGenerator.prototype.reset = function() {
	this.extensions = new Array();
	
}



/**
 * Sets the serial number.
 *
 * @param {ByteString} serialNumber the serial number for the certificate
 */
X509CertificateGenerator.prototype.setSerialNumber = function(serialNumber) {
	this.serialNumber = serialNumber;
}



/**
 * Sets the isser name.
 *
 * <p>The issuer name must be a JavaScript object containing the properties:</p>
 * <ul>
 *  <li>C - the country</li>
 *  <li>O - the organization</li>
 *  <li>OU - the organization unit</li>
 *  <li>CN - the common name</li>
 * </ul>
 * <p>Example:</p>
 * <pre>
 *	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 * </pre>
 * @param {Object} issuer the issuer name
 */
X509CertificateGenerator.prototype.setIssuer = function(issuer) {
	this.issuer = issuer;
}



/**
 * Sets the effective date for the certificate.
 *
 * @param {String or Date} date the date in format YYMMDDHHMMSSZ
 */
X509CertificateGenerator.prototype.setNotBefore = function(date) {
	this.notBefore = date;
}



/**
 * Sets the expiration date for the certificate.
 *
 * @param {String or Date} date the date in format YYMMDDHHMMSSZ
 */
X509CertificateGenerator.prototype.setNotAfter = function(date) {
	this.notAfter = date;
}



/**
 * Sets the subject name.
 *
 * <p>The subject name must be a JavaScript object containing the properties:</p>
 * <ul>
 *  <li>C - the country</li>
 *  <li>O - the organization</li>
 *  <li>OU - the organization unit</li>
 *  <li>CN - the common name</li>
 * </ul>
 * <p>Example:</p>
 * <pre>
 *	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
 * </pre>
 * @param {Object} subject the subject name
 */
X509CertificateGenerator.prototype.setSubject = function(subject) {
	this.subject = subject;
}



/**
 * Sets the subjects public key
 *
 * <p>The methods accepts ECC and RSA Public Keys.</p>
 *
 * @param {Key} publicKey the subjects public key
 */
X509CertificateGenerator.prototype.setPublicKey = function(publicKey) {
	this.publicKey = publicKey;
}



/**
 * Sets the signature algorithm. Currently only Crypto.RSA is supported
 *
 * @param {Number} alg the signature algorithm, only Crypto.RSA supported
 */
X509CertificateGenerator.prototype.setSignatureAlgorithm = function(alg) {
	this.signatureAlgorithm = alg;
}



/**
 * Adds an extension to the certificate
 *
 * <p>The structure is defined as:</p>
 * <pre>
 *    Extension  ::=  SEQUENCE  {
 *        extnID      OBJECT IDENTIFIER,
 *        critical    BOOLEAN DEFAULT FALSE,
 *        extnValue   OCTET STRING
 *                    -- contains the DER encoding of an ASN.1 value
 *                    -- corresponding to the extension type identified
 *                    -- by extnID
 *        }
 *</pre>
 * @param {String} extnID the extensions object identifier
 * @param {Boolean} critical the extension is critical
 * @param {ByteString} the extension value as ByteString
 */
X509CertificateGenerator.prototype.addExtension = function(extnID, critical, extnValue) {
	var t = new ASN1("extension", ASN1.SEQUENCE,
				new ASN1("extnID", ASN1.OBJECT_IDENTIFIER, new ByteString(extnID, OID))
			);

	if (critical) {
		t.add(new ASN1("critical", ASN1.BOOLEAN, new ByteString("FF", HEX)));
	}

	t.add(new ASN1("extnValue", ASN1.OCTET_STRING, extnValue));
	this.extensions.push(t);

}



/**
 * Adds the key usage extension.
 *
 * <p>The following flags are defined:</p>
 * <pre>
 * PKIXCommon.digitalSignature = 0x0080;
 * PKIXCommon.nonRepudiation   = 0x0040;
 * PKIXCommon.keyEncipherment  = 0x0020;
 * PKIXCommon.dataEncipherment = 0x0010;
 * PKIXCommon.keyAgreement     = 0x0008;
 * PKIXCommon.keyCertSign      = 0x0004;
 * PKIXCommon.cRLSign          = 0x0002;
 * PKIXCommon.encipherOnly     = 0x0001;
 * PKIXCommon.decipherOnly     = 0x8000;
 * </pre>
 * @param {Number} the key usage flags as combination of the flags defined above.
 */
X509CertificateGenerator.prototype.addKeyUsageExtension = function(flags) {
	var t = new ASN1(ASN1.BIT_STRING, PKIXCommon.bitstringForInteger(flags));
	this.addExtension("2.5.29.15", true, t.getBytes());
}

// Deprecated: Use PKIXCommon. instead
X509CertificateGenerator.digitalSignature	= 0x0080;
X509CertificateGenerator.nonRepudiation		= 0x0040;
X509CertificateGenerator.keyEncipherment	= 0x0020;
X509CertificateGenerator.dataEncipherment	= 0x0010;
X509CertificateGenerator.keyAgreement		= 0x0008;
X509CertificateGenerator.keyCertSign		= 0x0004;
X509CertificateGenerator.cRLSign			= 0x0002;
X509CertificateGenerator.encipherOnly		= 0x0001;
X509CertificateGenerator.decipherOnly		= 0x8000;



/**
 * Adds the BasicConstraints extension.
 *
 * @param {Boolean} cA the certificate belongs to a CA
 * @param {Number} pathLenConstraint the maximum number of subordinate CA certificates
 */
X509CertificateGenerator.prototype.addBasicConstraintsExtension = function(cA, pathLenConstraint) {
	var t = new ASN1("BasicConstraints",ASN1.SEQUENCE);
	if (cA) {
		t.add(new ASN1("cA", ASN1.BOOLEAN, new ByteString("FF", HEX)));
	}
	if (pathLenConstraint >= 0) {
		var bb = new ByteBuffer();
		bb.append(pathLenConstraint);
		t.add(new ASN1("pathLenConstraint", ASN1.INTEGER, bb.toByteString()));
	}
	this.addExtension("2.5.29.19", true, t.getBytes());
}



/**
 * Adds the subject public key identifier extension based on the certificates subject key.
 *
 * <p>The key identifier is calculated as SHA-1 hash over the contents of the
 * subject public key (Without tag, length and number of unused bits.</p>
 */
X509CertificateGenerator.prototype.addSubjectKeyIdentifierExtension = function() {
	var spi = this.getSubjectPublicKeyInfo();
	var keyvalue = spi.get(1).value.bytes(1);
	var crypto = new Crypto();
	var hash = crypto.digest(Crypto.SHA_1, keyvalue);
	
	var t = new ASN1(ASN1.OCTET_STRING, hash);
	this.addExtension("2.5.29.14", false, t.getBytes());
}



/**
 * Adds the authority public key identifier extension based on the issuers key.
 *
 * <p>The key identifier is calculated as SHA-1 hash over the contents of the
 * issuer public key (Without tag, length and number of unused bits.</p>
 *
 * @param {Key} publicKey the authority subject key
 */
X509CertificateGenerator.prototype.addAuthorityKeyIdentifierExtension = function(publicKey) {
	if (publicKey.getComponent(Key.MODULUS)) {
		var spi = PKIXCommon.createRSASubjectPublicKeyInfo(publicKey);
	} else {
		var spi = PKIXCommon.createECSubjectPublicKeyInfo(publicKey, this.encodeECDomainParameter);
	}

	var keyvalue = spi.get(1).value.bytes(1);
	var crypto = new Crypto();
	var hash = crypto.digest(Crypto.SHA_1, keyvalue);
	
	var t = new ASN1(ASN1.SEQUENCE,
					new ASN1(0x80, hash)
				);
	this.addExtension("2.5.29.35", false, t.getBytes());
}



/**
 * Adds the CRL distribution point URLs.
 *
 * @param {String[]} url a list of URLs
 */
X509CertificateGenerator.prototype.addCRLDistributionPointURL = function(url) {
	var t = new ASN1("cRLDistributionPoints", ASN1.SEQUENCE);

	for (var i = 0; i < url.length; i++) {
		t.add(	new ASN1("cRLDistributionPoint", ASN1.SEQUENCE,
					new ASN1("distributionPoint", 0xA0,
						new ASN1("fullName", 0xA0,
							new ASN1("uniformResourceIdentifier", 0x86, new ByteString(url[i], ASCII))
						)
					)
				));
	}
	this.addExtension("id-ce-cRLDistributionPoints", false, t.getBytes());
}



/**
 * Adds the extended key usage extension
 *
 * @param {String[]} oids the list of object identifier names
 * @param {Boolean} critical the extension is critical
 */
X509CertificateGenerator.prototype.addExtendedKeyUsages = function(oids, critical) {
	var t = new ASN1("extKeyUsages", ASN1.SEQUENCE);

	for (var i = 0; i < oids.length; i++) {
		t.add( new ASN1("keyPurposeId", ASN1.OBJECT_IDENTIFIER, new ByteString(oids[i], OID) ));
	}
	this.addExtension("id-ce-extKeyUsage", critical, t.getBytes());
}



/**
 * Gets the issuer name as TLV object
 *
 * @return the issuer RDNSequence
 * @type ASN1
 */
X509CertificateGenerator.prototype.getIssuer = function() {
	if (this.issuer instanceof ASN1) {
		return this.issuer;
	} else {
		return PKIXCommon.encodeName(this.issuer);
	}
}



/**
 * Gets the certificate validity as TLV object
 *
 * @return the certificates validity
 * @type ASN1
 */
X509CertificateGenerator.prototype.getValidity = function() {
	var t = new ASN1("validity", ASN1.SEQUENCE);

	var ts = this.notBefore;
	if (typeof(ts) != "string") {
		ts = PKIXCommon.dtoUTC(this.notBefore);
	}
	t.add(new ASN1("notBefore", ASN1.UTCTime, new ByteString(ts, ASCII)));
	
	var ts = this.notAfter;
	if (typeof(ts) != "string") {
		ts = PKIXCommon.dtoUTC(this.notAfter);
	}
	t.add(new ASN1("notAfter", ASN1.UTCTime, new ByteString(ts, ASCII)));
	return t;
}



/**
 * Gets the subject name as TLV object
 *
 * @return the issuer RDNSequence
 * @type ASN1
 */
X509CertificateGenerator.prototype.getSubject = function() {
	if (this.subject instanceof ASN1) {
		return this.subject;
	} else {
		return PKIXCommon.encodeName(this.subject);
	}
}



/**
 * Gets the subject's public key as TLV object
 *
 * @return the subject's public key info
 * @type ASN1
 */
X509CertificateGenerator.prototype.getSubjectPublicKeyInfo = function() {
	if (this.publicKey.getComponent(Key.MODULUS)) {
		return PKIXCommon.createRSASubjectPublicKeyInfo(this.publicKey);
	} else {
		return PKIXCommon.createECSubjectPublicKeyInfo(this.publicKey, this.encodeECDomainParameter);
	}
}



/**
 * Gets the certificate extension as TLV object
 *
 * @return the certificate extensions
 * @type ASN1
 */
X509CertificateGenerator.prototype.getExtensions = function() {
	var t = new ASN1("extensions", 0xA3);
	var s = new ASN1("extensions", ASN1.SEQUENCE);
	
	t.add(s);
	
	for (var i = 0; i < this.extensions.length; i++) {
		s.add(this.extensions[i]);
	}
	return t;
}



/**
 * Gets the part of the certificate that will be signed
 *
 * @return the TBSCertificate part
 * @type ASN1
 */
X509CertificateGenerator.prototype.getTbsCertificate = function() {
	var t = new ASN1("tbsCertificate", ASN1.SEQUENCE);
	t.add(new ASN1("version", 0xA0,
			new ASN1("version", ASN1.INTEGER, new ByteString("02", HEX))));
	t.add(new ASN1("serialNumber", ASN1.INTEGER, PKIXCommon.convertUnsignedInteger(this.serialNumber)));
	t.add(this.getSignatureAlgorithm());
	t.add(this.getIssuer());
	t.add(this.getValidity());
	t.add(this.getSubject());
	t.add(this.getSubjectPublicKeyInfo());
	t.add(this.getExtensions());
	return t;
}



/**
 * Gets the signature algorithm TLV object
 *
 * @return the signature algorithm object
 * @type ASN1
 */
X509CertificateGenerator.prototype.getSignatureAlgorithm = function() {
	var t = new ASN1("signatureAlgorithm", ASN1.SEQUENCE);

	if (this.signatureAlgorithm == Crypto.RSA) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("1.2.840.113549.1.1.5", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else if (this.signatureAlgorithm == Crypto.RSA_SHA256) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("1.2.840.113549.1.1.11", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else if (this.signatureAlgorithm == Crypto.ECDSA_SHA256) {
		t.add(new ASN1("algorithm", ASN1.OBJECT_IDENTIFIER, new ByteString("ecdsa-with-SHA256", OID)));
		t.add(new ASN1("parameters", ASN1.NULL, new ByteString("", HEX)));
	} else {
		throw new GPError("X509CertificateGenerator", GPError.INVALID_MECH, this.signatureAlgorithm, "Invalid algorithm");
	}
		
	return t;
}

 

/**
 * Generates the certificate.
 *
 * @return the generated certificate
 * @type X509
 */
X509CertificateGenerator.prototype.generateX509Certificate = function(privateKey) {
	var certificate = new ASN1("certificate", ASN1.SEQUENCE);
	
	var tbs = this.getTbsCertificate();
	certificate.add(tbs);
	certificate.add(this.getSignatureAlgorithm());
	
	var signature = this.crypto.sign(privateKey, this.signatureAlgorithm, tbs.getBytes());
	signature = (new ByteString("00", HEX)).concat(signature);

	var signatureValue = new ASN1("signatureValue", ASN1.BIT_STRING, signature);
	certificate.add(signatureValue);
	
//	print(certificate);
	return new X509(certificate.getBytes());
}



function X509CertificateGeneratorRSATest() {

	var crypto = new Crypto();
	
	var caPrivateKey = new Key();
	caPrivateKey.setType(Key.PRIVATE);

	var caPublicKey = new Key();
	caPublicKey.setType(Key.PUBLIC);
	caPublicKey.setSize(1024);
	
	crypto.generateKeyPair(Crypto.RSA, caPublicKey, caPrivateKey);
	
//	var caPrivKey = new Key("profiles/kp_rsa_private.xml");

	var x = new X509CertificateGenerator(crypto);

	x.reset();
	x.setSerialNumber(new ByteString("01", HEX));
	x.setSignatureAlgorithm(Crypto.RSA);
	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
	x.setIssuer(issuer);
	x.setNotBefore("060825120000Z");
	x.setNotAfter("160825120000Z");
	var subject = { C:"UT", O:"Utopia CA", OU:"ACME Corporation", CN:"Joe Doe" };
	x.setSubject(subject);

	x.setPublicKey(caPublicKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );
							
	x.addBasicConstraintsExtension(true, 0);
	x.addSubjectKeyIdentifierExtension();
	x.addAuthorityKeyIdentifierExtension(caPublicKey);

	var cert = x.generateX509Certificate(caPrivateKey);
	var fn = GPSystem.mapFilename("cert_rsa.cer", GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, cert.getBytes());

	cert.verifyWith(cert);

	print(cert);
}



function X509CertificateGeneratorECCTest() {

	var crypto = new Crypto();
	
	var caPrivateKey = new Key();
	caPrivateKey.setType(Key.PRIVATE);

	var caPublicKey = new Key();
	caPublicKey.setType(Key.PUBLIC);
	caPublicKey.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP256r1", OID));
	
	crypto.generateKeyPair(Crypto.EC, caPublicKey, caPrivateKey);

	var x = new X509CertificateGenerator(crypto);

	x.reset();
	x.setSerialNumber(new ByteString("01", HEX));
	x.setSignatureAlgorithm(Crypto.ECDSA_SHA256);
	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
	x.setIssuer(issuer);
	var t = new Date();
	x.setNotBefore(t);
	x.setNotAfter(PKIXCommon.addDays(t, 180));
	var subject = { C:"UT", O:"Utopia CA", OU:"ACME Corporation", CN:"Joe Doe" };
	x.setSubject(subject);

	x.setPublicKey(caPublicKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );
							
	x.addBasicConstraintsExtension(true, 0);
	x.addSubjectKeyIdentifierExtension();
	x.addAuthorityKeyIdentifierExtension(caPublicKey);

	var cert = x.generateX509Certificate(caPrivateKey);
	
	var fn = GPSystem.mapFilename("cert_ecc.cer", GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, cert.getBytes());

	cert.verifyWith(cert);
	
	print(cert);
	print(new ASN1(cert.getBytes()));
}

// X509CertificateGeneratorECCTest();
/*
 *  ---------
 * |.##> <##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  X509Name - Class to support X500 Names
 */

// 	Name ::= CHOICE {
// 	     RDNSequence }
// 	
// 	RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
// 	
// 	RelativeDistinguishedName ::=
// 		SET OF AttributeTypeAndValue
// 	
// 	AttributeTypeAndValue ::= SEQUENCE {
// 		type     AttributeType,
// 		value    AttributeValue }
// 	
// 	AttributeType ::= OBJECT IDENTIFIER
// 	
// 	AttributeValue ::= ANY DEFINED BY AttributeType
   
   
function X509Name() {

	if (arguments.length == 1) {
		if (arguments[0] instanceof ASN1) {
			var seq = arguments[0];
			if (!seq.isconstructed) {
				throw new GPError("X509Name", GPError.INVALID_DATA, 1, "Name must be constructed");
			}

			var seq = seq.get(0);
			if (seq.tag != ASN1.SEQUENCE) {
				throw new GPError("X509Name", GPError.INVALID_DATA, 1, "RDNSequence must be SEQUENCE");
			}
			
			this.rdn = new Array();
			for (var i = 0; i < seq.elements; i++) {
				var set = seq.get(i)
//				print("RDN" + i + ": " + set);
				if (set.tag != ASN1.SET) {
					throw new GPError("X509Name", GPError.INVALID_DATA, 1, "RDNSequence must only contain SETs");
				}
				for (var j = 0; j < set.elements; j++) {
					var attr = set.get(j);
					if (attr.tag != ASN1.SEQUENCE) {
						throw new GPError("X509Name", GPError.INVALID_DATA, 1, "AttributeTypeAndValue must be SEQUENCE");
					}
					if (attr.elements != 2) {
						throw new GPError("X509Name", GPError.INVALID_DATA, 1, "AttributeTypeAndValue must have 2 elements");
					}
					var attrType = attr.get(0);
					if (attrType.tag != ASN1.OBJECT_IDENTIFIER) {
						throw new GPError("X509Name", GPError.INVALID_DATA, 1, "AttributeType must be OBJECT IDENTIFIER");
					}
					var oid = attrType.value.toString(HEX);
					var attrValue = attr.get(1);
//					print("Type " + oid + " = " + attrValue);
					this.rdn[oid] = attrValue;
				}
			}
		} else {
			throw new GPError("X509Name", GPError.INVALID_TYPE, 1, "Argument must be of type ASN1");
		}			
	}
}



function X509Name_hasRDN(oid) {
	return this.rdn[oid] != undefined;
}



function X509Name_getRDNAsString(oid) {

	var r = this.rdn[oid];
	if (r == undefined) {
		throw new GPError("X509Name", GPError.INVALID_INDEX,0,"No matching RDN found");
	}
	
	if (r.tag == ASN1.UTF8String) {
		return r.value.toString(UTF8);
	} else {
		return r.value.toString(ASCII);
	}
}



function X509Name_toString() {
	var result = "";
	
	if (this.hasRDN(X509Name.commonName)) {
		result += "CN=" + this.getRDNAsString(X509Name.commonName);
	}

	if (this.hasRDN(X509Name.organizationalUnitName)) {
		if (result.length > 0)
			result += ",";
			
		result += "OU=" + this.getRDNAsString(X509Name.organizationalUnitName);
	}

	if (this.hasRDN(X509Name.organizationName)) {
		if (result.length > 0)
			result += ",";
			
		result += "O=" + this.getRDNAsString(X509Name.organizationName);
	}

	if (this.hasRDN(X509Name.countryName)) {
		if (result.length > 0)
			result += ",";
			
		result += "C=" + this.getRDNAsString(X509Name.countryName);
	}

	return result;	
}


X509Name.name = "550429";
X509Name.surname = "550404";
X509Name.givenname = "55042A";
X509Name.initials = "55042B";
X509Name.generationQualifier = "55042C";
X509Name.commonName = "550403";
X509Name.localityName = "550407";
X509Name.stateOrProvinceName = "550408";
X509Name.organizationName = "55040A";
X509Name.organizationalUnitName = "55040B";
X509Name.title = "55040C";
X509Name.dnQualifier = "55042C";
X509Name.countryName = "550406";
X509Name.serialNumber = "550405";
X509Name.emailAddress = "2A864886F70D010901";

X509Name.prototype.toString = X509Name_toString;
X509Name.prototype.getRDNAsString = X509Name_getRDNAsString;
X509Name.prototype.hasRDN = X509Name_hasRDN;


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:annotation>
        <xs:documentation>Schema for SCDP API documentation</xs:documentation>
    </xs:annotation>
    <xs:element name="class" type="ClassType"/>
    <xs:complexType name="ClassType">
        <xs:annotation>
            <xs:documentation>Definitions and descriptions for a class</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="description" type="DescriptionType" minOccurs="1" maxOccurs="1"/>
            <xs:element name="constant" type="FieldType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="field" type="FieldType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="constructor" type="ConstructorType" minOccurs="0"
                maxOccurs="unbounded"/>
            <xs:element name="method" type="MethodType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="FieldType">
        <xs:annotation>
            <xs:documentation>Definitions and descriptions for a field or constant contained in a
            class</xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="xs:anyType">
                <xs:attribute name="name" type="xs:string"/>
                <xs:attribute name="type" type="xs:string"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="ConstructorType">
        <xs:annotation>
            <xs:documentation>Definitions and descriptions for a method contained in a
            class</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="signature" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
            <xs:element name="description" type="DescriptionType" minOccurs="1" maxOccurs="1"/>
            <xs:element name="argument" type="ArgumentType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="example" type="xs:anyType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="exception" type="ExceptionType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="MethodType">
        <xs:annotation>
            <xs:documentation>Definitions and descriptions for a method contained in a
            class</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="signature" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
            <xs:element name="description" type="DescriptionType" minOccurs="1" maxOccurs="1"/>
            <xs:element name="argument" type="ArgumentType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="return" type="ReturnType" minOccurs="1" maxOccurs="1"/>
            <xs:element name="example" type="xs:anyType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="exception" type="ExceptionType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="ArgumentType">
        <xs:complexContent>
            <xs:extension base="xs:anyType">
                <xs:attribute name="name" type="xs:string"/>
                <xs:attribute name="type" type="xs:string"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="ReturnType">
        <xs:complexContent>
            <xs:extension base="xs:anyType">
                <xs:attribute name="type" type="xs:string"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="ExceptionType">
        <xs:complexContent>
            <xs:extension base="xs:anyType">
                <xs:attribute name="name" type="xs:string"/>
                <xs:attribute name="value" type="xs:string"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="DescriptionType" mixed="true">
        <xs:complexContent>
            <xs:extension base="xs:anyType">
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>Application - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>Application - Reference Documentation</h1>
        <p>
                    
            <p>An instance of the Application class represents an application
                    on a smart card.</p>
                    
            <p>Instances of this class are created using the getApplicationInstance() method
           of the application factory.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">Application() constructor</a>
            </li>
            <li>
                <a href="#run">run()</a>
            </li>
            <li>
                <a href="#select">select()</a>
            </li>
            <li>
                <a href="#sendApdu">sendApdu()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>ByteString</td>
                <td>aid</td>
                <td>Application identifier for this application.</td>
            </tr>
            <tr>
                <td>Card</td>
                <td>card</td>
                <td>Card object associated with application.</td>
            </tr>
            <tr>
                <td>Card</td>
                <td>crypto</td>
                <td>Crypto object associated with application.</td>
            </tr>
            <tr>
                <td>Array</td>
                <td>data[]</td>
                <td>Associative array of data elements.</td>
            </tr>
            <tr>
                <td>Array</td>
                <td>key[]</td>
                <td>Associative array of keys.</td>
            </tr>
            <tr>
                <td>Object</td>
                <td>profile</td>
                <td>Deserialized application profile.</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">Application(String profile)</p>
        <p class="signature">Application(String profile, ByteString aid, Card card, Crypto crypto, Object dataMapper)</p>
        <h3>Description</h3>
                    
        <p>Create an Application object and initialize from profile.</p>
                    
        <p>This constructor is provided for special development and testing purposes.
               The preferred method is to use the getApplicationInstance() method of the
               ApplicationFactory.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>profile</td>
                <td>Name of file containing Global Platform Application profile. The file name
                  will be mapped to the file system of the runtime environment.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>aid</td>
                <td>Application identifier for application.</td>
            </tr>
            <tr>
                <td>
                    <code>Card</code>
                </td>
                <td>card</td>
                <td>Card object to associate Application with or null if none defined.</td>
            </tr>
            <tr>
                <td>
                    <code>Crypto</code>
                </td>
                <td>crypto</td>
                <td>Crypto object to associate Application with.</td>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>dataMapper</td>
                <td>Data mapper object to be used for external data elements or null if none defined.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>On or more arguments are not of the expected type</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var application = new Application("profiles/ap_sample.xml");

assert(application != null);

</pre>
        <h2 id="run">run()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void run(String scriptName)</p>
        <h3>Description</h3>
                    
        <p>Locate and execute script fragment in application profile.</p>
                    
        <p>This method does the complete initialization of the key and data
               properties according to the declarations for this script fragment</p>
                    
        <p>Key profiles are obtained from the ApplicationFactory that created the
               Application object.</p>
                    
        <p>External data elements are mapped using the data mapper defined in the
               constructor or the getApplicationInstance() method of the application
               factory.</p>
                    
        <p>Warning: This method is an extension to the methods defined in the Global Platform
               Scripting specification. It is provided as development and test aid.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>scriptName</td>
                <td>Name of script fragment to execute.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


// application.run("Get Status");
application.run("UnitA1 GPError");
application.run("UnitA2 GPSystem getVersion");
application.run("UnitA3 ByteString constructor fuction");
application.run("UnitA4 ByteString byteAt() method");
application.run("UnitA5 ByteString pad() method");
application.run("UnitA6 ByteString toString() method");
// application.run("IntegrationB4 GPApplication Properties");
// application.run("IntegrationB5 DES Key get Method");
// application.run("IntegrationB6 RSA Key get Methods");
// application.run("IntegrationB7 GPApplication Key Profile Creation");
// application.run("IntegrationB9 Crypto Method Changes");
// application.run("IntegrationB22 GPApplication putKey");
// application.run("IntegrationB24 GPApplication select");
// application.run("IntegrationB30 DES Key set Methods");
// application.run("IntegrationB31 RSA Key set Methods");
application.run("IntegrationB32 DataElement TLV L16");
application.run("IntegrationB33 TLV L16 constructor");
// application.run("IntegrationB34 TLVList L16 constructor");
// application.run("IntegrationB35 GPApplication APDU Wrap");
// application.run("Select only");


</pre>
        <h2 id="select">select()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString select()</p>
        <p class="signature">ByteString select(Boolean next, Boolean noData)</p>
        <p class="signature">ByteString select(Boolean next, Number[] sw)</p>
        <p class="signature">ByteString select(Boolean next, Boolean noData, Number[] sw)</p>
        <h3>Description</h3>
                    
        <p>Select application on ICC.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>next</td>
                <td>Used to control parameter P1 in the select command. True
               will select next application with matching AID. Default is false.</td>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>noData</td>
                <td>Ignore data returned from card. Default is false.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 response codes.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Data returned from card in response to select.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var aid = new ByteString("D040000017010101", HEX);
var card = new Card(_scsh3.reader);
var crypto = new Crypto();

var application = new Application(
            "profiles/ap_test.xml", aid, card, crypto, new Object());

var resp = application.select();
assert(resp instanceof ByteString);
print(resp);

var resp = application.select(false, false);
assert(resp instanceof ByteString);
print(resp);

var resp = application.select(false, [ 0x9000 ]);
assert(resp instanceof ByteString);
print(resp);

var resp = application.select(true, false, [ 0x6A86 ]);
assert(resp instanceof ByteString);
print(resp);

</pre>
        <h2 id="sendApdu">sendApdu()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number le)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number le, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number le)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number le, Number[] sw)</p>
        <h3>Description</h3>
        <p>Transmit a Command-APDU to the ICC and receive the Response-APDU.</p>
                             
        <p>The method updates the fields SW, SW1, SW2 and response of the associated card object
                        with the values received from the ICC.</p>
                             
        <p>An array of valid return codes can be passed as argument sw. If the SW1/SW2 from the ICC does
                        not match with one of the entries in the array, then an GPError.CARD_COMM_ERROR exception is raised.</p>
                             
        <p>The method supports ISO7816-4 extended format. This is automatically used, if the length of the data
                        argument exceeds 255 or if the argument le exceeds 256.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>cla</td>
                <td>The CLA byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ins</td>
                <td>The INS byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p1</td>
                <td>The P1 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p2</td>
                <td>The P2 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>The data bytes to be send in the Command-APDU for case 3 or case 4 commands</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>le</td>
                <td>The number of bytes expected in the response. 256 is encoded as '00' in short format.
                                          65536 is encoded as '0000' in extended format.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 return codes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Response APDU received from ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call or SW array contain a type other than Number</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>A communication error with the ICC occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The status word return by the ICC does not match one of the expected result</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data for the command APDU exceeds 65536</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The value given for Le is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Case 1: 0022F3A4 - MANAGE SE

resp = application.sendApdu(0x00, 0x22, 0xF3, 0xA4);
assert(resp instanceof ByteString);
print(application.card.SW.toString(16) + " - " + resp);

resp = card.sendApdu(0x00, 0x22, 0xF3, 0xA4, [0x9000]);
assert(resp instanceof ByteString);


// Case 2: 00B201F400 - READ RECORD from EF_STATUS

resp = card.sendApdu(0x00, 0xB2, 0x01, 0x24, 0);
assert(resp instanceof ByteString);
print(card.SW.toString(16) + " - " + resp);

assert(resp.length &gt; 0);
assert(application.card.SW == 0x9000);

resp = card.sendApdu(0x00, 0xB2, 0x01, 0x24, 0, [0x9000]);
assert(resp.length &gt; 0);


// Case 3: 002A90A008 - HASH

resp = application.sendApdu(0x00, 0x2A, 0x90, 0xA0, new ByteString(
            "9000800431323334", HEX));
assert(resp instanceof ByteString);
print(application.card.SW.toString(16) + " - " + resp);

assert(card.SW == 0x9000);

resp = application.sendApdu(0x00, 0x2A, 0x90, 0xA0, new ByteString(
            "9000800431323334", HEX),[0x9000]);


// Case 4: 00A40204022F0000 - SELECT EF_STATUS

resp = application.sendApdu(0x00, 0xA4, 0x02, 0x04, new ByteString("EF04", HEX), 0);
assert(resp instanceof ByteString);
print(application.card.SW.toString(16) + " - " + resp);

assert(application.card.SW == 0x9000);
assert(resp.length &gt; 0);

resp = application.sendApdu(0x00, 0xA4, 0x02, 0x04, 
            new ByteString("EF04", HEX), 0, [0x9000]);
assert(resp.length &gt; 0);

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>ApplicationFactory - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>ApplicationFactory - Reference Documentation</h1>
        <p>
                    
            <p>Repository for application and key profiles, as well as factory to create
           instances of Application, GPApplication or GPSecurityDomain objects,
           which resemble the execution environment for Global Platform Scripts.
        </p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">ApplicationFactory() constructor</a>
            </li>
            <li>
                <a href="#addKeyProfile">addKeyProfile()</a>
            </li>
            <li>
                <a href="#addApplicationProfile">addApplicationProfile()</a>
            </li>
            <li>
                <a href="#getApplicationInstance">getApplicationInstance()</a>
            </li>
        </ul>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">ApplicationFactory(Crypto crypto)</p>
        <p class="signature">ApplicationFactory(Crypto crypto, Function scope)</p>
        <h3>Description</h3>
                    
        <p>Create an instance of the ApplicationFactory.</p>
                    
        <p>The application factory is used as a repository of application and
               key profiles. It can create instances of the Application, GPApplication and
               GPSecurityDomain objects using the getApplicationInstance() method.</p>
                    
        <p>If used in a module, then the argument scope allows to pass a function
               from the module scope. Script fragments in the application profile
               will have the same module scope as the function.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Crypto</code>
                </td>
                <td>crypto</td>
                <td>Crypto object to be associated with applications</td>
            </tr>
            <tr>
                <td>
                    <code>Function</code>
                </td>
                <td>scope</td>
                <td>A function in the module scope in which application profile script shall be created</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>On or more arguments are not of the expected type</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var crypto = new Crypto();

var af = new ApplicationFactory(crypto);
assert(af != null);

</pre>
        <h2 id="addKeyProfile">addKeyProfile()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void addKeyProfile(String profileName)</p>
        <h3>Description</h3>
                                    
        <p>Deserialize the key profile stored in the file specified by profileName and store
               it under the UniqueId in an internal repository.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>profileName</td>
                <td>Name of key profile. Will be mapped to a physical file by the runtime environment.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

af.addKeyProfile("profiles/kp_single_des_1.xml");
af.addKeyProfile("profiles/kp_double_des.xml");
af.addKeyProfile("profiles/kp_triple_des.xml");

</pre>
        <h2 id="addApplicationProfile">addApplicationProfile()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void addApplicationProfile(String profileName)</p>
        <h3>Description</h3>
                                    
        <p>Deserialize the application profile stored in the file specified by profileName and store
               it under the UniqueId in an internal repository.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>profileName</td>
                <td>Name of application profile. Will be mapped to a physical file by the runtime environment.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

af.addApplicationProfile("profiles/ap_test.xml");

</pre>
        <h2 id="getApplicationInstance">getApplicationInstance()</h2>
        <h3>Prototype</h3>
        <p class="signature">Application getApplicationInstance(Object dataMapper, ByteString aid, ByteString uniqueId)</p>
        <p class="signature">Application getApplicationInstance(Object dataMapper, ByteString aid, Card card)</p>
        <p class="signature">Application getApplicationInstance(Object dataMapper, ByteString aid, Card card, ByteString uniqueId)</p>
        <h3>Description</h3>
                              
        <p>Create and initialize an Application, GPApplication or GPSecurityDomain object based on the
             the definition in the XML profile.</p>
                              
        <p>The dataMapper object is used to read and write data element from an external source.
             The object must provide a get(name, fixed, length) function that returns a ByteString
             object. The arguments name, fixed and length are initialized from the respective fields
             in the application profile. The dataMapper will be associated with the application instance.</p>
                              
        <p>The aid is used to initialize the aid property of the Application objects. It is
             furthermore used to locate an application instance if a card object is provided as
             argument.</p>
                              
        <p>The optional card argument can be used to define the card property of the Application
             object. If a card object is defined, then the list of application instances in the
             card profile can be used to locate the appropriate application profile in the application
             factory.</p>
                              
        <p>The optional uniqueId can be used to identify an application profile previously
             registered in the application factory. If the uniqueId is not given as argument, then
             it is determined from the list of application instances in the card profile.</p>
                              
        <p>Use the run() method to execute scripts defined in the application profile.</p>
                              
        <p/>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>dataMapper</td>
                <td>Object to provide mapping of data element from an external
                     source to data element accessible from within scripts</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>aid</td>
                <td>Application identifier for instance</td>
            </tr>
            <tr>
                <td>
                    <code>Card</code>
                </td>
                <td>card</td>
                <td>Card object to be used for instance or null</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>uniqueId</td>
                <td>UniqueID of application profile to be used</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Application</code>
                </td>
                <td>The method returns an Application object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var card = new Card(_scsh3.reader);
var aid = new ByteString("A0000002471001", HEX);
var id = new ByteString("2B0601040181C31F0000", HEX);

// Simple data mapper that returns the name of the data element as value
var dataMapper = new Object();
dataMapper.get = function(name, fixed, length, encoding) {
    return new ByteString("DE " + name + " Fixed=" + fixed + " Length=" + length +
    " Encoding=" + encoding, ASCII); };
dataMapper.put = function(name, value, encoding) {
    print("DE " + name + " Value=" + value.toString(encoding) +
    " Encoding=" + encoding); };

var appl = af.getApplicationInstance(dataMapper, aid, card, id);

appl.run("Hello World Test");

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>ASN1 - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>ASN1 - Reference Documentation</h1>
        <p>Implementation of support for ASN.1 data structures using DER encoding rule</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">ASN1() constructor</a>
            </li>
            <li>
                <a href="#add">add()</a>
            </li>
            <li>
                <a href="#get">get()</a>
            </li>
            <li>
                <a href="#find">find()</a>
            </li>
            <li>
                <a href="#remove">remove()</a>
            </li>
            <li>
                <a href="#getBytes">getBytes()</a>
            </li>
            <li>
                <a href="#getDate">getDate()</a>
            </li>
            <li>
                <a href="#setName">setName()</a>
            </li>
            <li>
                <a href="#ASN1.defineObjectIdentifier">ASN1.defineObjectIdentifier()</a>
            </li>
            <li>
                <a href="#toString">toString()</a>
            </li>
            <li>
                <a href="#ASN1.nameForObjectIdentifier">ASN1.nameForObjectIdentifier()</a>
            </li>
            <li>
                <a href="#toString">toString()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>UNIVERSAL</td>
                <td>END_OF_CONTENTS ASN.1 class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>APPLICATION</td>
                <td>APPLICATION ASN.1 class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CONTEXT</td>
                <td>CONTEXT ASN.1 class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>PRIVATE</td>
                <td>PRIVATE ASN.1 class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>END_OF_CONTENTS</td>
                <td>END_OF_CONTENTS ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>BOOLEAN</td>
                <td>BOOLEAN ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INTEGER</td>
                <td>INTEGER ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>BIT_STRING</td>
                <td>BIT_STRING ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>OCTET_STRING</td>
                <td>OCTET_STRING ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>NULL</td>
                <td>NULL ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>OBJECT_IDENTIFIER</td>
                <td>OBJECT_IDENTIFIER ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>OBJECT_DESCRIPTOR</td>
                <td>OBJECT_DESCRIPTOR ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>EXTERNAL_TYPE</td>
                <td>EXTERNAL_TYPE ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>REAL</td>
                <td>REAL ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ENUMERATED</td>
                <td>ENUMERATED ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>EMBEDDED_PDV</td>
                <td>EMBEDDED_PDV ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>UTF8String</td>
                <td>UTF8String ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RELATIVE_OID</td>
                <td>RELATIVE_OID ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SEQUENCE</td>
                <td>SEQUENCE ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SET</td>
                <td>SET ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>NumericString</td>
                <td>NumericString ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>PrintableString</td>
                <td>PrintableString ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>T61String</td>
                <td>T61String ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>IA5String</td>
                <td>IA5String ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>UTCTime</td>
                <td>UTCTime ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>GeneralizedTime</td>
                <td>GeneralizedTime ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>GeneralString</td>
                <td>GeneralString ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>UniversalString</td>
                <td>UniversalString ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>BMPString</td>
                <td>BMPString ASN.1 object</td>
            </tr>
        </table>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>tag</td>
                <td>The combined value of the tag, containing the class, constructed flag and number</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>length</td>
                <td>Length of the value field</td>
            </tr>
            <tr>
                <td>ByteString</td>
                <td>value</td>
                <td>The value field</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>tagclass</td>
                <td>The class of the ASN.1 object. Is one of ASN1.UNIVERSAL, ASN1.APPLICATION, ASN1.CONTEXT or ASN1.PRIVATE</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>tagnumber</td>
                <td>The number element of the tag</td>
            </tr>
            <tr>
                <td>Boolean</td>
                <td>isconstructed</td>
                <td>True, if the object is a constructed ASN.1 object</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>size</td>
                <td>Size of the concatenation of tag, length and value field</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>elements</td>
                <td>Number of elements in a constructed object. 0 for primitive objects</td>
            </tr>
            <tr>
                <td>String</td>
                <td>name</td>
                <td>Name of object</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">ASN1(Number tag)</p>
        <p class="signature">ASN1(Number tag, ByteString value)</p>
        <p class="signature">ASN1(Number tag, ASN1 object*)</p>
        <p class="signature">ASN1(ByteString encoded)</p>
        <p class="signature">ASN1(String name, Number tag)</p>
        <p class="signature">ASN1(String name, Number tag, ByteString value)</p>
        <p class="signature">ASN1(String name, Number tag, ASN1 object*)</p>
        <p class="signature">ASN1(String name, ByteString encoded)</p>
        <h3>Description</h3>
        Create an ASN.1 object, either primitive or constructed. The constructor without a value or
                     with a list of TLV objects will
                     create a constructed object, which can be further completed using the add() method. The constructor
                     with a value field will create a primitive, immutuable object
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>tag</td>
                <td>Tag value, including class, primitive/constructed flag and id</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>name</td>
                <td>Object name to be assigned to the object</td>
            </tr>
            <tr>
                <td>
                    <code>ASN1</code>
                </td>
                <td>object</td>
                <td>One or more ASN1 object(s) to be included in constructed object</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>Value field of object</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>encoded</td>
                <td>DER encoded ASN.1 object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>ByteString does not contain a valid DER encoded object</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new ASN1(ASN1.SEQUENCE);
assert(t instanceof ASN1);
assert(t.tag == ASN1.SEQUENCE);
assert(t.length == 0);
assert(t.value.toString(HEX) == "");

assert(t.tagclass == ASN1.UNIVERSAL);
assert(t.tagnumber == 16);
assert(t.isconstructed);
assert(t.size == 2);
assert(t.elements == 0);
t = new ASN1("singleSequence", ASN1.SEQUENCE);
print(t);

t = new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX));
assert(t instanceof ASN1);
assert(t.tag == ASN1.OBJECT_IDENTIFIER);
assert(t.length == 3);
assert(t.value.toString(HEX) == "2A1200");

assert(t.tagclass == ASN1.UNIVERSAL);
assert(t.tagnumber == 6);
assert(!t.isconstructed);
assert(t.size == 5);
t = new ASN1("objectIdentifier", ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX));
print(t);

t = new ASN1(new ByteString("06022A11", HEX));
assert(t instanceof ASN1);
assert(t.tag == ASN1.OBJECT_IDENTIFIER);
assert(t.length == 2);
assert(t.value.toString(HEX) == "2A11");

assert(t.tagclass == ASN1.UNIVERSAL);
assert(t.tagnumber == 6);
assert(!t.isconstructed);
assert(t.size == 4);
t = new ASN1("fromByteString", new ByteString("06022A11", HEX));
print(t);

t = new ASN1(ASN1.SEQUENCE,
		new ASN1(ASN1.OCTET_STRING, new ByteString("Hello World", ASCII)),
		new ASN1(ASN1.GeneralizedTime, new ByteString("20051010120000Z", ASCII)));

assert(t instanceof ASN1);
assert(t.tag == ASN1.SEQUENCE);
assert(t.elements == 2);

assert(t.tagclass == ASN1.UNIVERSAL);
assert(t.tagnumber == 16);
assert(t.isconstructed);
assert(t.size == 32);
t = new ASN1("complexSequence", ASN1.SEQUENCE,
		new ASN1(ASN1.OCTET_STRING, new ByteString("Hello World", ASCII)),
		new ASN1(ASN1.GeneralizedTime, new ByteString("20051010120000Z", ASCII)));
print(t);


root = new X509("root.cer");
bs = root.getBytes();
print(bs);
t = new ASN1(bs);
assert(t instanceof ASN1);
print(t);

</pre>
        <h2 id="add">add()</h2>
        <h3>Prototype</h3>
        <p class="signature">ASN1 add(ASN1 object*)</p>
        <p class="signature">ASN1 add(Number index, ASN1 object*)</p>
        <h3>Description</h3>
        Add one or more ASN.1 objects to a constructed object at index or at the end.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>ASN1</code>
                </td>
                <td>object</td>
                <td>ASN.1 objects to add</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Zero based index</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ASN1</code>
                </td>
                <td>The object the method is applied to</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>Object must be constructed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new ASN1(ASN1.SEQUENCE);
t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX)));

t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX)),
      new ASN1(ASN1.PrintableString, new ByteString("Hello World", ASCII)));

t.add(0, new ASN1(ASN1.INTEGER, new ByteString("01", HEX)));

</pre>
        <h2 id="get">get()</h2>
        <h3>Prototype</h3>
        <p class="signature">ASN1 get(Number index)</p>
        <h3>Description</h3>
        <p>Get ASN.1 object at zero based index from constructed object.</p>
                             
        <p>This method does not provide a copy of the element, but a reference to it. Changes
                        to the element will have an effect in parent objects or other instances
                        obtained with the get() method</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Zero based offset</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ASN1</code>
                </td>
                <td>New ASN1 object representing the element at the requested index</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>Index is out of range</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>Object must be constructed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new ASN1(ASN1.SEQUENCE);
t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX)));
t.add(new ASN1(ASN1.OCTET_STRING, new ByteString("ÄÖÜ", UTF8)));

n = t.get(0);
assert(n instanceof ASN1);
assert(n.tag == ASN1.OBJECT_IDENTIFIER);
assert(n.length == 3);

n = t.get(1);
assert(n instanceof ASN1);
assert(n.tag == ASN1.OCTET_STRING);
assert(n.length == 6);

</pre>
        <h2 id="find">find()</h2>
        <h3>Prototype</h3>
        <p class="signature">ASN1 find(Number tag)</p>
        <p class="signature">ASN1 find(Number tag, Number index)</p>
        <p class="signature">ASN1 find(Number tag, ASN1 cursor)</p>
        <h3>Description</h3>
        <p>Find ASN1 object with matching tag.</p>
                             
        <p>The method can be called with an object after which the search will start.
                        The constant value null indicates the beginning of the list.</p>
                             
        <p>This method does not provide a copy of the element, but a reference to it. Changes
                        to the element will have an effect in parent objects or other instances
                        obtained with the get() method</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>tag</td>
                <td>The tag value to search for</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Zero based offset of the object at which the search is started.</td>
            </tr>
            <tr>
                <td>
                    <code>ASN1</code>
                </td>
                <td>cursor</td>
                <td>The object after which the search resumes or null for a new search</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ASN1</code>
                </td>
                <td>New ASN1 object representing the found element or null if no match found</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>Index is out of range</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>Object must be constructed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new ASN1(ASN1.SEQUENCE);
t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX)));
t.add(new ASN1(ASN1.OCTET_STRING, new ByteString("ÄÖÜ", UTF8)));
t.add(new ASN1(ASN1.INTEGER, new ByteString("00", HEX)));
t.add(new ASN1(0x5F1C, new ByteString("5F1C", HEX)));
t.add(new ASN1(ASN1.INTEGER, new ByteString("0000", HEX)));

n = t.find(ASN1.OBJECT_IDENTIFIER);
assert(n instanceof ASN1);
assert(n.tag == ASN1.OBJECT_IDENTIFIER);

n = t.find(ASN1.INTEGER);
assert(n instanceof ASN1);
assert(n.tag == ASN1.INTEGER);
assert(n.length == 1);


n = t.find(ASN1.INTEGER, n);
assert(n instanceof ASN1);
assert(n.tag == ASN1.INTEGER);
assert(n.length == 2);

n = t.find(ASN1.INTEGER, n);
assert(n == null);

n = t.find(ASN1.OBJECT_IDENTIFIER, n);
assert(n instanceof ASN1);
assert(n.tag == ASN1.OBJECT_IDENTIFIER);


n = t.find(ASN1.INTEGER, 1);
assert(n instanceof ASN1);
assert(n.tag == ASN1.INTEGER);
assert(n.length == 1);

n = t.find(ASN1.INTEGER, 3);
assert(n instanceof ASN1);
assert(n.tag == ASN1.INTEGER);
assert(n.length == 2);

n = t.find(ASN1.OBJECT_IDENTIFIER, 0);
assert(n instanceof ASN1);
assert(n.tag == ASN1.OBJECT_IDENTIFIER);

n = t.find(0x5F1C);
assert(n instanceof ASN1);
assert(n.tag == 0x5F1C);

n = t.find(0x5F1D);
assert(n == null);

</pre>
        <h2 id="remove">remove()</h2>
        <h3>Prototype</h3>
        <p class="signature">void remove(Number index)</p>
        <h3>Description</h3>
        <p>Remove ASN.1 object at zero based index from constructed object.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Zero based offset</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>Index is out of range</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>Object must be constructed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new ASN1(ASN1.SEQUENCE);
t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX)));
t.add(new ASN1(ASN1.OCTET_STRING, new ByteString("ÄÖÜ", UTF8)));

t.remove(0);

n = t.get(0);
assert(n instanceof ASN1);
assert(n.tag == ASN1.OCTET_STRING);
assert(n.length == 6);

</pre>
        <h2 id="getBytes">getBytes()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getBytes()</p>
        <h3>Description</h3>
        Return the DER encoded ASN.1 object
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The DER encoded object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new ASN1(ASN1.SEQUENCE);
t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX)));
assert(t.getBytes().toString(HEX) == "300506032A1200");

</pre>
        <h2 id="getDate">getDate()</h2>
        <h3>Prototype</h3>
        <p class="signature">Date getDate()</p>
        <h3>Description</h3>
        Return the value field of a primitive ASN.1 object as a date. This usually works for
                     for GeneralizedTime objects which store date and time in ISO8601 format.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The DER encoded object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>Object must be primitive</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>Value field does not contain a valid date and time</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Local time
t = new ASN1(ASN1.GeneralizedTime, new ByteString("20050929113422", ASCII));
d = t.getDate();
print(d);
assert(d.toString().substr(0,24) == "Thu Sep 29 2005 11:34:22");

// UTC time
t = new ASN1(ASN1.GeneralizedTime, new ByteString("20050929113422Z", ASCII));
d = t.getDate();
assert(d.getTime() == 1127993662000);

// CEST time
t = new ASN1(ASN1.GeneralizedTime, new ByteString("20050929133422+0200", ASCII));
d = t.getDate();
assert(d.getTime() == 1127993662000);

// Local time with millisecond
t = new ASN1(ASN1.GeneralizedTime, new ByteString("20050929113422.1", ASCII));
d = t.getDate();
assert(d.toString().substr(0,24) == "Thu Sep 29 2005 11:34:22");

// UTC time with millisecond
t = new ASN1(ASN1.GeneralizedTime, new ByteString("20050929113422.1Z", ASCII));
d = t.getDate();
assert(d.getTime() == 1127993662001);

// CEST time with millisecond
t = new ASN1(ASN1.GeneralizedTime, new ByteString("20050929133422.1+0200", ASCII));
d = t.getDate();
assert(d.getTime() == 1127993662001);

</pre>
        <h2 id="setName">setName()</h2>
        <h3>Prototype</h3>
        <p class="signature">setName(String name)</p>
        <h3>Description</h3>
        Assign a name to the ASN.1 object.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new ASN1(ASN1.SEQUENCE);
t.setName("testObject");
print(t.toString());

</pre>
        <h2 id="ASN1.defineObjectIdentifier">ASN1.defineObjectIdentifier()</h2>
        <h3>Prototype</h3>
        <p class="signature">defineObjectIdentifier(String name, String definition)</p>
        <h3>Description</h3>
                    
        <p>Add a definition for a symbolic object identifier to the internal registry.</p>
                    
        <p>The definition may be recursive and can use the dotted or spaced format.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

ASN1.defineObjectIdentifier("openscdp-test", "1.3.6.1.4.1.24991.0");
ASN1.defineObjectIdentifier("openscdp-test-sub1", "openscdp-test.4");
ASN1.defineObjectIdentifier("openscdp-test-sub2", "openscdp-test branch(5)");

var b = new ByteString("openscdp-test-sub2", OID);
print(b);
assert(b.toString(OID) == "1.3.6.1.4.1.24991.0.5");

</pre>
        <h2 id="toString">toString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String toString()</p>
        <h3>Description</h3>
        Dump the contents of the ASN.1 object
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>Dump of ASN.1 object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Argument must be of type Number and either Card.RESET_COLD or Card.RESET_WARM</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new ASN1(ASN1.SEQUENCE);
t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX)));
print(t.toString());

</pre>
        <h2 id="ASN1.nameForObjectIdentifier">ASN1.nameForObjectIdentifier()</h2>
        <h3>Prototype</h3>
        <p class="signature">nameForObjectIdentifier(ByteString oid)</p>
        <h3>Description</h3>
                    
        <p>Return a name for the object identifier passed or undefined if no matching name is found.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>The object identifier name or undefined</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b = new ByteString("openscdp-test-sub2", OID);
print(b);
assert(b.toString(OID) == "1.3.6.1.4.1.24991.0.5");
assert(ASN1.nameForObjectIdentifier(b) == "openscdp-test-sub2");
assert(ASN1.nameForObjectIdentifier(new ByteString("0102", HEX)) === undefined);

</pre>
        <h2 id="toString">toString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String toString()</p>
        <h3>Description</h3>
        Dump the contents of the ASN.1 object
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>Dump of ASN.1 object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Argument must be of type Number and either Card.RESET_COLD or Card.RESET_WARM</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new ASN1(ASN1.SEQUENCE);
t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString("2A1200", HEX)));
print(t.toString());

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>Atr - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>Atr - Reference Documentation</h1>
        <p>
    </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">Atr() constructor</a>
            </li>
            <li>
                <a href="#toByteString">toByteString()</a>
            </li>
            <li>
                <a href="#toString">toString()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>formatByte</td>
                <td>Format byte from ATR returned by ICC (2.Byte)</td>
            </tr>
            <tr>
                <td>ByteString</td>
                <td>historicalBytes</td>
                <td>Historical bytes</td>
            </tr>
            <tr>
                <td>ByteString</td>
                <td>interfaceBytes</td>
                <td>Interface bytes</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>tckByte</td>
                <td>Check byte (T=0, T=1) or word (T=CL)</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">Atr(ByteString atr)</p>
        <h3>Description</h3>
        Validate and decode ATR
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>atr</td>
                <td>ATR</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>ATR is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


atr = new Atr(new ByteString("3BBD18008131FE45805102670414B1010102008105", HEX));

print(atr);
print(atr.formatByte);
print(atr.historicalBytes);
print(atr.interfaceBytes);
print(atr.tckByte);

atr = new Atr(new ByteString("A2131088", HEX));
print(atr);
atr = new Atr(new ByteString("92231088", HEX));
print(atr);
atr = new Atr(new ByteString("3B85004934313000", HEX));
print(atr);
atr = new Atr(new ByteString("3B840034310100", HEX));
print(atr);
atr = new Atr(new ByteString("3B8A813140434D49434152444F313331", HEX));
print(atr);
atr = new Atr(new ByteString("3B8A81314F4395010190900900012091", HEX));
print(atr);
atr = new Atr(new ByteString("3B8481014D538102", HEX));
print(atr);
atr = new Atr(new ByteString("3B85004D46430110", HEX));
print(atr);
atr = new Atr(new ByteString("3B600000", HEX));
print(atr);
atr = new Atr(new ByteString("3B91948031FE4966", HEX));
print(atr);
atr = new Atr(new ByteString("3BF39400FF80B1FE491F034D3253", HEX));
print(atr);
atr = new Atr(new ByteString("3B91948031FE4967", HEX));
print(atr);
atr = new Atr(new ByteString("3BF89400FF80B1FE451F03D276000028FF051A", HEX));
print(atr);
atr = new Atr(new ByteString("3BF31100FF80B1F0491F034C454F", HEX));
print(atr);
atr = new Atr(new ByteString("3BFD9400FF80B1FE451F030068D276000028FF051E009000", HEX));
print(atr);
atr = new Atr(new ByteString("3BFF9400FF80B1FE451F030068D276000028FF051E3180009000", HEX));
print(atr);
atr = new Atr(new ByteString("3BFD9400FF80B1FE451F030068D276000028FF0524009000", HEX));
print(atr);
atr = new Atr(new ByteString("3BFF9400FF80B1FE451F030068D276000028FF05243180009000", HEX));
print(atr);
atr = new Atr(new ByteString("3BFD9400FF80B1FE451F030068D276000028FF0523009000", HEX));
print(atr);
atr = new Atr(new ByteString("3BFF9400FF80B1FE451F030068D276000028FF05233180009000", HEX));
print(atr);
atr = new Atr(new ByteString("3BEF00FF813152454D46432049424D2034304839363031", HEX));
print(atr);
atr = new Atr(new ByteString("3BEF00FF81315045656308041302500002000000010120", HEX));
print(atr);
atr = new Atr(new ByteString("3B6F00008031E06B8034030103038034555555", HEX));
print(atr);
atr = new Atr(new ByteString("3B6F00008031E06B8403030406555555555555", HEX));
print(atr);
atr = new Atr(new ByteString("3BEF00FF813150456563080B4002800008187002010400", HEX));
print(atr);
atr = new Atr(new ByteString("3BBB18008131FE4580670412B0020182018105", HEX));
print(atr);
atr = new Atr(new ByteString("3BBB18008131FE4580670414B0010182018105", HEX));
print(atr);
atr = new Atr(new ByteString("3BBD18008131FE45805102670412B0020182208105", HEX));
print(atr);
atr = new Atr(new ByteString("3BBD18008131FE45805101670412B0020182208105", HEX));
print(atr);
atr = new Atr(new ByteString("3BFF1800FF8131FE45454C435F56312E3020202020202020", HEX));
print(atr);
atr = new Atr(new ByteString("3BBD18008131FE45805102670414B1010182038105", HEX));
print(atr);
atr = new Atr(new ByteString("3BBD18008131FE45805101670414B1010182038105", HEX));
print(atr);
atr = new Atr(new ByteString("3BBD18008131FE45805102670414B1010182108105", HEX));
print(atr);
atr = new Atr(new ByteString("3BBD18008131FE45805101670414B1010182108105", HEX));
print(atr);
atr = new Atr(new ByteString("3B9F1881B1FE451FC3006D05A3010031B873B7B5DB009000A9", HEX));
print(atr);
atr = new Atr(new ByteString("3B00", HEX));
print(atr);
atr = new Atr(new ByteString("3F00", HEX));
print(atr);
atr = new Atr(new ByteString("3BF0FFFFFFF0FFFFFFF1FFFFFFF0FFFFFFFFFFFFFF00", HEX));
print(atr);
atr = new Atr(new ByteString("3B8001", HEX));
print(atr);


</pre>
        <h2 id="toByteString">toByteString()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString toByteString()</p>
        <h3>Description</h3>
        Return the encoded ATR as ByteString object
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>ATR</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

bs = new ByteString("3BBD18008131FE45805102670414B1010102008105", HEX)
atr = new Atr(bs);
assert(atr.toByteString().equals(bs));

</pre>
        <h2 id="toString">toString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String toString()</p>
        <h3>Description</h3>
        Return the ATR in human readable format
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>Decoded ATR</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

bs = new ByteString("3BBD18008131FE45805102670414B1010102008105", HEX)
atr = new Atr(bs);
val = atr.toString();

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
         JFIF  H H   C  C  P"            	
    } !1AQa"q2#BR$3br	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        	
   w !1AQaq"2B	#3Rbr
$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz   ? k_?t+/\Fuj<'_[Hz;K^]{~4x 6߂5pǈtGd
ZeO|v7.-uK<]2-,|7Acʹو<HܗG9$?~ycK-nglaT\<^:,Tjpp,<U*O8.,~'a(TVT.ZΎJ)Q;uYsTOM~ DǧOowG4O Eï´n'$z0 T" I[ '~  	 _0 | Ý] 
?t9 ;_<; F? ==WT" I[ ?X3+h _kQ 
?t; 7_?g;bGgG8H-eY _'H~x+N0sw?5w>fP$OXrEN
<iOAT;7(8\҅7AT\0u)ܔÙ(IËprO2k.VVRqqWڌ>9cXI#HHGGRUԆVRU
>?fcIcÿx4/FGίyV}V[CWBXm˦j" T:MӼ@3vhWRusp<bG(+OC#^r8zX<<ԝN_^u(J5UF9ψw81t%skPեQYT$T7-HBi~_7<#'ƙv&ז؍-I$]#K?üW]g
/T⿏
ZAzZ"	]j 2<ٞ))H̨Tb@$cj U|;+_ϸ
-t9Ri߰k_<spy{|M75;7'!>otWQ7HִB@5\cEfn*|8lmώ<1g8%<ckѿe٫@e}7Q"5y}^陲,XI5oO6쏇	Ҷoo4+cҀ3cR_~JXeD~9Ö.Iⶭ xnĚ4W9Ǯ8+;e	oim(¬0E1@1=:Pm޲]*3xQXx 5E QE QE TmdGlqޤ!z7L!~Rp}H l@o7SHK6nU(/6vS'X}Ab n$nJ n[pATn	<x4 ?:ZF<tҀ%`3q㞢uFl ~ $c9uqPO]qY1\q^JȒYi sG Xǂ\ ӽP+tXOŁrU]:8P@ < Քǿ|t#u83RYbKevA8="$iUcdܤ21uZdF_OLD6pz8}];50<2c3ǯ8~]TPrbaT~g4][ސg#>Շui|rO qsׯ9r~W b)@8cFFy8w9zc\YvcנGN@6Y(ܹHisaD[>2q |qcFz?4vd댃9НߧDnO|:WD.F;G(7u"`y@ϧ9%
89'$
StuNnc;Q3>B}Cg'<O'gCn< tG?F0l($jVv=:5F_pA O<kᶑJ4$=9>X~ SܒuO:W7I-ٗO5|(TrOP9=O=x xDJp.H'i#k9Ф4$8ϥ}=odv0~P@`s>YAxqpyh!a9ӿ_ʢbS}O8˷5+
2|ـ3.SPMylz=l?<f|G8' q:qJ/9ׁӯ#xCђ.'6~%  ;Ϩ~	 eC˓<=1(潜હ9G$~ɒ0J~;W'
5 ;r@=zT~X!V(>n bz63%\L⭋@y8{;{U4z9cXJ,y{ti<Yxܜܟ<<__Rq@U`s9?\Wkjуjl[vإ1Eyv.+/Z"Hvm
s~4yvp'p6G= yޕm/cV@?tuBNznZTyFǹDqT08^i֞$zih:TeGnyc@s6>)t p9 =$O%b]N%[`EQLZBxR}O}B@׮Ahps%,c;a~8׵_RSuKA=:z O= 	KՉw>l~_x]^6ު+c?u3HՄ𦡪	F1BDC'3}' 5K}FɬLvq߇!8XP9zϵQς,ЙM`:bPG~O;|[{hL3C&$EӉb3E2Oٻ^	Yks'?N~rs}~ 
d%Ozzϰ ?/^ܶ r 朌?1ߚoٟOo
$׏z9筋̞ٗ2 %l$& ~W|,Od;8k>_C!RCWrm6R3+`m431~)Q]{zGլS7`"z }wz&ӆ-_s0,,I .#䃌W5y ڱYr65$Q<{q~w/a.ӍFxԉ.cӥ$  ר${ }%q s;z҃6؈{W-~?7ټY/@zQdFlW/ '56J3ǫG9+Fd~ž#0q$  t't\NWQm<AkYW;1 oM p;c5ou=wRi4%Q- Ty/s,9ffuQ> d{׵ }
?b^2Րshq$pss;xG|NH  }Gy|I0G
`hyqA9I˩m$sd1ןj k$7[$窐nA9LKr-f{vӀ`c_	~xCľ5_Kj7̷rB  8^|U =	-hα odyn愒rw=7MRH;!0yz9 : HLTt$n\`tb@<[ʴ~)ʴI oa	M6W
1MR)weH G<P)r6^NM.mՊO~I8NS#sH
8<?_Zr?L3zg:g.[i0 ]O0pBw*F<7ĝ'JmoUM7WN7,̕ /{X%P\57h8ml463uq %G#@l. J3omgSKueJReFi³tp؊URcğ2n%%Rx(TPTNY!s8P~JIלΝI});I3[xOMXwZ{=9Hn1{r%#f? kڍÖۉvmVW=d6s$mFnM՘ww<wž5E{ciw~?5xx<KD|䘾g xtK[C1[CFC1H(¤qƀ*F Py3,ބa~"Ztuafҫ|n9V$d3AߊQf#
rO(U.U+u?Q{.6Kq/0%3+, ԣGu-0HZ:W藀~|+]kF
ƑYL07:G&vv&$K༟pO?a߈ 싦oXZfgOt/K|=MA[ލskRWHдCH[-RNbIF*$I$JI/$F:odM-.$TVInmsd4cV`JY\FVSєA k] ?i/ a,xLGį|=/M+Pot%6^&9mtQIWW'GQ ho٧
e~Kž]σt
<f<G[D}3 kF42+ḞS9Xۢ]SWTSj9r2[.'fE~:|\  -
x_/jχ"}kotcKSӮg🆼AoΟ{wqwCsиVC^8 bߵWm|c}އk?
CϤ"VWӼ1;zެ!^kaG،E]m}{4+o~Wkw?Pio	G,CWKxgz5zTKӦKvtGc*|O}^~h|_jo|GxMųix~uHN>"T`BEq(ɤd5vEE|sX|  g7WxG>;ďO|/yj4AԭuMF[8f]rX&w^|qG_	a?~3 >bᆥk$f9O3+^-Q dEMZP!r9rm+NNnь;FNͻ{N}Zg5]\mv-mlg|g7|_WMѿT :|Vcᯄ~|?e =CRVmik7Q0n$I	z)3bO+Ln|y}R?~/Z,.5A6i5ojZƅqumzo/$4ts.efvf?k+I{E&n+?IsoFOj  pkQoc \xgt_zz_ᆍ"AwOZ4-Atov396|J
>:G~& S. xg ;&ym?:^Ϭ:'LOaKhB3.TکN|)(J_ɥuw_+	 c%kmhs`1ִ~%tmʹe:?uϏY,KX׃>%={+tV{;I1\4Q]m}{;sr˗+ky~_/?_/@ !w
|1n?x[S^6!mM2hDv:GNoi  iᧆ>)]mM
zMoT%h:%Cws޾tIjKv(JVq{4OE|;$D?e/rQ?g?~46ڴ^]KEId״JI%PNjZ=uHGU  ~?dW|j=⟃
Vxx*:w?I5	J,L/I6 "ѩRn抻Mlz'fފ UϏx^)I{[Ezh65֑4VV:VfVh1dכ|g  /~x[U|;OC#Ӽ>$Ci:u%KOoF>ݤY--@3E֚vrO\ݹ]ת3Oړv~;D<G5aa4n4o_Vy?<73:Ʋď4hI
+|UsP+B𶑦K!/tMҡϗP/e8O<ƊAfi٦5g?_8#	O_\xjw\΂$.
k~SQhvQ]o,?q~ iυ k]~(_/,u <A>-oys[/te?,Ry]wE{:{I]<EG8?O|4~&Y zvY˩m9a,q'IF _~_54|5WW>frn~k	ۃ&ke.cS[L| Aԥ:Rq^'˪Nɴ\=X}
-RE 4>| ǫ! ֦f[& =}ON9`g_@SAzH(Pߵ@
ߑ]G AȮ?[}vcБЂA:
E* ci>?˸NiMHZ\;®Ns``ǷUJG;v280^߆ycv'"MII$x¾$vْwA>cq4K-$@.!R@8? Q&fd	>I`88r
[)I8A{ yw
g	-i5rAcI\ƝkH^̊p<!RLtlw# _B8>`>D~Ȫ"7h8#,9Lz(k2$\`հK%Vb/tOue!{o
*y	W qsIO:<`YnrSs;He88&R4RZ0\`"$ߐ2zhɠmP#K;+08]o$<wʭss9؋@}N[|[g~
x-44IE[6v|x|G+mNBxB)K+DXYw`Tdv@1ڂ3jW/mpXyR)̒ 	e '9'z
3ڿ5Gx6& L$gg*^<:{_,F|	FrNHEcҀ>VϘCR=sjj˓vnikJh|QP%Y)$Hy
 @S/}Gqjvwp,pt/[XrIRN
dmQdpF@xlfE";`@l.[<#wRGrA8- oOHV|_H@ŲEmy6@9=>:7?xbŚSe*--/&l4g+ǿ99F1[ME/Vm&-[-Hmn{0#n@G\}sYR6աln -;sv3FH5:yjO>5rY g"GʭpaXsۚuq%K絊>α<RBnjU]TDfݟ8|Qo4\o{K|?k3==NH¶&0%g_>K{Mez--u(5w r$q=w)ןߴ<CM^{;3#þ,dbĤi`Z} 
Ǻ]6[=cfGӧ~+ռ/i彽߿kL(0rYn/c`9{v#|&~k?~#I̺\qj	ke[e/~oZ, kfL|XZ6q@Oc'XVnA աہ?fOyH|0O]Gdf0\q_$x x8/8u[dNNdĳI̓\7M}{<MoEvJV.Ɉc΀[ܓI䜚 i.4[bthY9-N9<EM|Alj.iZ{c]*onx~_'.売7Ɨi0*#;-eI kį1ZZ	osqʭ?"5RB1 kQ kRk_^/G46 m${χ?ƾ ׈Eq1_7Wۃg
M\@0 ҃p'ӌ  i
gdGgO?&VXrsϘlG<Y cvZE-{Pti"	 _NG
=;WE??Ya5j6o2Ku1A)Ǡƭ$\^-.d<9U;sJ׎+;O|>ӼQ/o5{S5%nR4!1yjui
3orc,7rJ/|-̆[ۍQEt {O?_kW="KGub>z'nO(=M~yٳM/
h-Yhs!2P}^_ l|CZfm!Oè[73~x-懮oQO6vIWhG)fpw
 ~.[XXH!جzx
!3NTq^nkiq1ӎ=Ej\|J&4S(-2\pcPHÀHn?kO\ A=%}:)FMa;8$c8Ĳ|[@a 
st?f|efn1zvk&d>WmwY-	2''4~K;H{@g3IfG4}Ikwb͑l~'d?CM7X`nCe:"^2=ӭ i$O n䎤 *tN®I@k_75 PaKILq7M*wA0 ?O֒˰dP+`G,Z ;,3)siB sӚ/"H \: {ko\uOU4!e"Lぐ;qֺ)l_$p$$޷,#}}
 w0xNm1c 	>RNH=zk^?\̝#  s + l]?gMg$dLYsQKbD8?B.,{,cE \|Mq%?c@hHqӒsӽ~HN#H;sqzPj9]rS*j6UَO}1XXBꡰ`9*xh31粓ۯ\sęq$y1OR3t]$VgkW(U&fw-
 ~||=gñk0Dʮܒ3g V$^md 2npy_2m~/U]]rTc^Kgf=Pfa@ h>a|GƏմ2ʨ9>q_k~kIys]N}[A[G{,mF	\?=7zmG7ֹBp2y ךƗŕN}o%A-2\j1ku,*	p_tKx~,N-xgmప%S;T+C0#e dUx*L"qA`Vv^~Oϛ
(_IA~>mnlYl&q/obHDO9"*cr"1=˻l0OF#Ҹ~G7y}<wqXd8VUoQ)FL#'{c9=L)w,EN{\5*ҬUʟ!bXh,LOLSo)φiqaX;/{NhJj%Z4s
q5 4<y;x\^kk8em-&x,g
5i%r;a Mx'~)k6J<5겥
ưŗ6ZN5L'Rh̑:r|Q}׃aYL4BmOG,yj@2o2䲔WdFotoux7@mˤV^0&Ćf
ìbJTjMRR F~k:XW8c&IѧJ-=!ZR? 5iCyҪXϯ:NJrrIuJRKtCh(G
F|7 ǋI nKAsNta>0ġ{HP3Z_&?
H|m~?kO2LW-OşX\[]]hWSMYjg;ytu{m4YmiR4]6j|>4
_l5m.S+MBt{^KՍIkqm,RG!׿h?ּ]gGu *xNޟ5>i^\xvO%C$0NW)D¿ N*/	>| |{Q-af=M×2]ݬ=Av߬_K '!ߵηXB|-Jx Ay_|Ug]~^nuOZԬA5ŧ%(oE_צӊU+[%+]_tgԿ 6?_<KY=wWIXum~ XW5-WS3il*,㼵kk-??x[ҿ`n.K~;o%lhZ[SIKE8,m> 'k?oϋ<]S?dx;Sx]i[_S0ct7ƿnx-غ^YMmc h?'O Xg?^'~\?ƳۅT<)Y#P[U.[0$(Vee5]ʣ/Tů[ vč7GC%-#B|1 u% -  b(%oWou_'_D5O
nZC]x3ZI/$I5;7QkYuHZ_N?f/~_k+^;վ'K]7%ٷ'^6:խ-g>bHcCg_No/=WĿc^ݯ|cktZp4UZMHn	rNG.`m--tu>=~ռM5>|'j7Ju?<OO5sGǀlv׉.lΩ87U / 3 ~#|M?t/؋ d=o^A{K/i:e.al6pM-^ c_*׆xwO ;
S@<Kg>
񗂵+42}cMOM_þ!Ҭ)fFԭm_
?7߳oo-'Oy;w|FݞH߂G
cǅ5
-K{=wN,|\zo7E-I7t鷟*tQӔ%~oI l2y-_'#{ҿjg/.~ҭ?ࢾ1X\\$g5o=:vGZxLw ?Ix+	WC現5~?gkg;i_>q{[u+e|UP4,SѪ1 -??Q
k/~_XVA<Mҭ#|kçj?4-<]]\=giqwfźzR:M٤<]jMV$$vVĈW
L
l: - ؇Oh/_  KuK
WWmM3ekq4^e
ߊ4'El UK-|)F_'EPksz5V4/\/5 `_/o#Q~am^>&494h9?
:_?-|K}.ꭥ_	b{kX%C-Uw
pjZQc&woE㧧# L^o~ǆ|'&[|FּEs7W`xVH|:ϮS{KړY[9/ l E M]{'8>yik&?S=Z[rQ:,S.'VKKh˳e3 $~,_Qc	M G!_
xH i<Ix·WS-oei֥Z(O.e~ hoO ୿RMy?[7u{Xxqi>|U'/|O*Eg'FQ2Jܶw^瑩-ΧV_k{+;qkeǶ2#'_UeO7<$Yj~-]Z'cmE"UJD"W b[ǯZ1M]/{'|Y~o:&{ML'T[C{sk3  ~ O g _~_˯Ɨ|B_AIFKMD>e{i5fm㳁9q#	0#ӟ<g|BK|V|+{'miL4YVL쭯?ӡhZHZ7fմv`Чͩ)(nknNv  +qßrvէV)^U-YИ<9?शFoxǅ*L]㏈<W⫳j.KknilZ)L ]L=,:~f<5	~*/Zǰ) zfBF:d#f3	= P>&|>>>^Sᗉ<9*x+^ucoxkDuJ{)zYm2m=-.[[ ?KsomO
NI&3KVWﶖ?ػ	 %ڃ{ț?Sği|K CfeTԝlHVɚ3a !O	 >s_x 毭.}sė|q!'}]$<p^X=ԋn?V
joxXS
qy= }oڟn<G</4XkZ
>PC,-WY55लW$K~^(
 H5~xǐx~TԬo|>/
X]HDs^#yZDI;EZk}}=~}sTu*Npd4Gk-uxjxQ `/6ĭවw?	NG񎇮
{\FWҤ}P-.͵3k  h >ξ5M}#'GIi/iφui!tkINF{+K}&ԧߵw{-E+G7l>5w?Bމwu-<Yth
Ko'Pkn_G{
c7xcgDg~K߇Ե 4{6{["ov{9g^Z_麖ey %k^ֻBZ>mr_FK;Vw? Fo&_ğ'_~xύ>9<}{R[[/KNլ|=jҦm.5]NPL֟YP 0 :g؋sே΅ ڣÿmSwO_A^+O
1wmdmS N dG >yi.=!Ҽ)⏂`oo<3W3s$7'?fߵGmįZԦ3Rw[# Exe-ZhAkiyPb+k^ھ/׾*5_RQ2M_g~?	U$/w%=Y<K7M0vD[M,E&m	J0 HO_	>~G4|,}ͤ;wWFUMF=mU i 㟈|m  U?eO
izŎ=?>9>>kBEox Vi
{k<Iٮdiso4S3/|9wnZ;ֵ{Vumn:KtPeIqYM M1fK5\ԬӃWu)Քd,?5V]rUbKQ"I};i+;. P(
s8_\Vr>xA ģ¹=9xzܕ?ot"%< CUOId=;2X 0}xǽTl<3޺U!EX.y^M3v%q=Oq\hN],dUyǿN`[ilehnAY߷A ?vxtta2;@[	qZޣuw<H0=3G-_` nb$q;1]/+
R#QD7) zs\ӄ~lt`W'0E:]GƷ@$:Ġ,A
x8?Hp:3=)Iox	-c nu83srƩw
/eq1C޳ʿښuI'v>AϹ<-O3K񕎊xrej,7]*S6jZ郺_3@уӎG%i
O ?2wDDJo7<,|+OM,~V_\`'@5k9GM?k1tS 2	٤!@O /,|{&u4 ߬h%@bp:bV'▋xN,,S,1K&>v:y5o#^u7\ɔ"L22 Oz0ԧ[Z
0NSVqKՕN)Sb~Ij}7|K% [{o*Ir,Hsa%gė! cBHm!e5;9#+<_W9#Ѭ-]d8ef7c Wy_]+7HzQ@p Q1 Wf~(v]NeмU*e)-PޜMlʼt}]:Qv*o]wB:7<Sala$jv!kg| 2XW./I,IOkoZi@y"~aA^iok&kapΫIif'hQuhKQpҿ 
뷎#Ʊ3qEz&BXe^cuu%(yoj\3":f'E]-]S4od]H0W&RO܎9
;M2$+hmƪX@®6>SS4}E;'!b:y=:zT\ex(I8nǮ+^-L9qnTth'ISoq[˰X[:8jt䬹RiKmLK;_C"f^ץyoxrDc5Uz6ҽ*渻o8&2rvq~qԚ3*Nc>V6!)FSԚ4ʪ*vaM;Э8)YIh}aW-j4E&v5ϏZ.tR
WUeַZLP7=ou7q^}%2Gm/LX ,~g_<,('9{3N<@/bWvw:6XChe]8ː[Q|Yx۝ӥ0XI<JZÚϫo|nnTեv_ҶN[:KE[6CX\zM=$uoB ;Kt߃ a`HE
*(ydk`d)r81^U{8t^K;HhVN
~GKJ<%dYiRFhC<|R3$b)M0$7i%gJ.xj^W䮮|qqN_>LYS{d9OǀQbA2{~osf_Ŭx8Kxv# +O3fC+p0)[Ox=,Q12Z;܏I$<Ivv
68L5,#[<me<G<v0NCBi8աR`WKf>r*dVh8=wZSԧW@րK^j*2$,Wh8xOei'&]ݠ:ZIwr<dڞ 5;˩o#ni IX yo7}oK]$7gU1ʒ0B#9;f{ƟKSִM&iOe׶KSivч `Fb
Iҵ`}Oԡ4OC, E9׏i u
:e}w80x,]\d`xKٳm#P:,]O\ O^௱W[֊M?ֵ)TJڸo߲j,'K.iI0>[gȼ9kƯ#Y]QM?V(T	*;`uSTcmXx-K5	(d`r s@k#!ᘼLY27'/8}M_)b_{Z奙`2v2:rv3|74[$;pVe{ "/hxkG̓
s$rX;xs=2xrKxmN$F$㨯ܰG2 P	I=v9 h=[]sDDеյ8?3
 0q|xjigG}òREbS {@- ǈtp$#B*T,e@U؞8k_+P3;@\dޘ9:ƔCo$:,UUNTI&4g,ğ@7qGsp;|F_`۬	70}>F|J@A
>%FڽcR;;f]ks%}vǧN+6%Yj8bDȤ~^(?OmGu_	ޡ f+ %_\.\Nz?ڻVj٢e MNP@U zy?ҼOi2bIc`9,eMc
qص?ÇyQ~s.^[kEKcB1ׇ<Gh"֏6)'ɷ
ՂI$4Y ʐdG޹F  D8[1@q	%ndɫ|(]XS#>	O?U_xIB`\ܛR:svSӱUW!.HdC~<r;7^e}2'
v 7 z Ӽ[XZCɁjvNGnatbʳ[^\# CC{l۩=Վ4SIEex!njz yZ@t6SM'IC}ycD*R@<=1Gd6	6S$']wzŴV}fʥKd`$l#
mo*$ܤ2́8z d%RO#dTӡp+E	Ӯ
z[hZjEIb0y PJ{{;cYIZ3)'9 d𶗧x3vM:"67@峜e0>m|ǚYP*8WrÿaGxm,.|'fYİ*3p2qki:Y< 
]G2FHC10CUc F={P9Ky9I
8WH#0$ yMZ\ S}3cx
|YueFYu=CN1l !Qz O <Kyb<Q^u)U%7
te){8I28(Wk~wy}E)+QTWrN;_N3ߞ(rIx?L3a=?ϯ`g' kyZu~r>/^m&]'Zzm.}6?1,01LdB/~8MK$۾+\sjJ}
6:`e&o瓜c~?֚T220ܬ
ܬ +.H$#2GO> x[? qbq2K5R)֪y6:lVҕUWfSZ*	{G6[ӥfXFU%c˖8vNt^47R7P׼=h# ^mPyp[x3qY[EM^~JVTb'6	&j%֎Hbvk{k[Mn
Cf_Rov#F> 6s?ٝw8焾>_iY#JMǒKբ' x?߆M|B8FwUB521t+),>x<%6|^8X:r~'K8rs,_7եW e94QN:#ǟ1/sm[[>$e<EŏzR[]GYiX?u I?|.m^877֊qjH&2[>F?qB״j~( b~מ,-7|><!uxĿ<[fGw W\6h6^$з4}C]tHȰpy3.qJS(ՠjtЕJU"P֩U[
YPBJ9ѫ=NXǿb??-gĺ'
j~Ǿ-7!~x
|cW jz][ g4/Tkl ms io7x+l)+
R&oY5y
F ߱k7/Kv?o~;A|	k^o+E:ޣ}<7s{}w}3uu4Ͻ~~zW7z[ilg:
-Ǉ4w=wsC5$"Eٽ_[+^6I=z=.~Vxw_ğO_ێy4|r6=wzSӴ
 z3-æ
^K8y \Z?uZ~:Û؋J[yaiy#N>0?ğx_],ښ:jyv6F?~5?d~;~^Kfoͣ?I4m&-Nڮs^hxbӥm'Q7Gf ?m hÍ+:T?-Rhm|Q	u9U\hr%{o Y+76S_[WcN ||sᯁ#m_0x@#i>5O]jD3xG/tj\A4rR'߂߶+Oo7ĝ& x_\`Լ4v5]/-n%h,/մuӟ|1_ןxC]

"_KM2LӼ-acegoeoϲ
#Č	~|;
xffw|3gyY{O-Ϭ_j7g[=elY$Af~>wa7;&3m?Kߌu_ u^h ]Z<-NMJZ獼{?W"Gzt9x?7o|/>X
^\Bnosu;Zx
:lEyg+07Im%}qϟ˽BWw mIuZ;]U%It\PIMGD5|V%Z5}gXO5+]kHk
e[[t.}iot;Qi$`{lAL+/=;m#h׵Oj[}Wt?_]C+UmI5_EKV.bI-K;y#G؇i[NQot˷.VW:/]SV5ִ>RE%? x/|G#Sl];L!$IKcK`["YSzΣ	i:n(a׵[oYO.Sֵ)o5[H#a!5˿w.(|_cծ4]֡]OEGEqts:tV+wHY8{ 4<{/"ٲ D<UZ
Φ./mtQ{skxo#ZwKh"wSn>~%τh|C4Q~V0#JU0ķ \",IW-ׂ5k:N]"{i)ivզ,m%R@&aiOa_> 
ZlJnA~i_
\AռGo?ןb
 }Sb|W>7yh>qv5ئibsh7ҵKIb5X-/̲I$Q~Է
E<_]lGvxoS].Q%\&q$7zx?@/ewLWΛ 	N3H6dwN#cn+xTQ3@ߵo'7 ~6>O
xo[Z/4eֽqi\OOk/*? ~ <_&t\GOK3"Gw
ٵ~l go3YO_	/)u?)cO.hlFMim[[66ڂXE
q? ~Ŷ_#Ζ_+?e7/tggq{S:d71eWao$]xHm.m/n _ֺRMJWizw~at q߲0>͇|mwZ  w :5
55?om{gM`xF|!y6|M_ 96|:Z?&&$ZO/^]bh-t\G$qf~Ho #	u=3M>xv94>ipIklti,'Hnt-,&O6K~˟' ςB5L)j4' 7^<]6g˭&bBIgmAӻT]};j8d;??T
Ӷ? 	mWo5}#|%^X[GivH4UL~|s|a~_z3KOŏYxFx=ͮxTO'<Cj~o3&eϮZ\i:wQ^?79~οoi~|2 C?}S^|Y>w>ikZ֠/	`GϿl>9j ůo\OⱲ2݆kfOQ&Vۤk9,ROMӾjV;%kw+_{#gOۇE?ag&~	
cM?TK)5hxG^0)4+A\XMۘ&y gL5h)Zu}蚇|%^&^$ /wLյtug_K xBέIӦ_uOw'K+]xݮ<z<2kQ!DM<QxWx?~/_Y^6
Gt_S4iw,4[GsLtei.~eI;G>K9wa?ώ4Kim7am|>[Ok߈4hִ6
	x 78H>|& v ~8~ׂ-Ӽq xZ__|۵:N#ux\BӦ'?G<A'_}o~.E<a%߇i:Ke 2+[N -X΢giF߲ok¯~[?cS MGm..4SFӧ:5żOw^"Cse,Rʎ?//_I5iEK]n  .](uuu{O#bkx{ϋ^mXSV^c8%5ws]q
wx[\w
fHD
>+3O+k~+,rΫOtB⸓~!< bߊ > ~^]BUcqiៈ$^x!y.<QjѫN2}Hݞ:vZ&&cm6FZnQCgaipCieei6ֶQ	\mn|~-yU潭r  :̺ՂHʱ=On=?Wĭ
T.-eyP/rQ <UK.pA
B` q3 88/!sh?֦[XT!L=}ja0 >3Pe [s`2zd}ۓUM0sskO>i[#Tz,u^ c$ibX
=3\^8?qںgU!u95kRy2m9^p? }9$/1}9F9ڀ",`1}:["K򝍝A=Tn FČt;1Ͳ̦c:QWV0o0<ߔbٵ5|D(RI;iݵ{/;i T#搲#R#\4"<dl_?BqIkB<'dP3p1#J8 ~=l>I+L=8ҡ{]%RM05j41[d.,|Uq+g] wڷ<mG۹ SjmlqZ_c* w({w<f*#m@
BI>g?Uel]A4MxEg-+_(p
ZnɴzIqO-Ùnyiɸ\9#b?ujc\	 z]TO2>b .O88 cR9~cg9k7[2qIZy7%Nk(1_qQaFT ڹ[m̴V\cdk w<θK*ds
0Bz33ǧ};qׂy9:qӃ:VK0Aa $px9
^YM/ucmwvkIik,m3oLX늊i.%22H,-r0O$dxۭ9`L`ʦTpX@qlzuѴ;(DI+ny\esǭT[T
qwWO\UzrO?OOruc\&  NOTkwl>zoԄ9?D*wyJW`9 щ:b˳`~ 6`yTmz/7o NغncFP<WJH3p$ᛟ'Kw0yN0r>8e' `Y^Ic?]c .,aç 烚jkt:kfMEӪ:wu]s#ӯf{':G`p}w'N~!pTp0N#Ѓ۽NPI*@8NO^WˣMiTߕ[~'	qȥH6Fz\L˦[Ǧ\pOam0|8x9^u<	l$9hd# i'jtQwq9sͼ >zMzx,2je9^qJJӂj285ƭ
8uBZI)/}-N~>/pg9`
A>G2	/Mii7)8FS(R?Ux}J	>Hll0=w+@AF~!8;up>0qvKp+'hooCǫYuD#Rhͽei9.sşYNj:=݅vrϼ^r~G:yFCd3+5^B\ڇCLG>=z^u'k[wiOQ&]1܌Ƽ(9p5x<\ʬw5/&xxFMj´:*l}+X06-^@^Eyǭfc<ʣk@ Ԁz-^af<R%wF0H" ڷ|MAmil<s j8> .g
x<Է-*ҖoelDiJɽvVs:rʯyA*ZkgɈ&Ql,-4ѦRFFʍ<ֿJ5/3DW}tPe̠$s4۸'H^G $v_e*;7let~FQRӋM4i4֍Yg ^?EŅ
$P9 	c=1_A=7"#Ǖ滅RC0ڧkVG.0:n9z2EPHΩnNUA_Aj se
u{gtr{C!Q!H<ߕmCGY5M*pFbssjPkHMD$Q$
!@r$qsr=QZ=WKӵʕ",\O?L@?<Yei]|q<?(N>X|`d޹5?:4nn|p tB+eRbpU<čۏ<P_4imʩ
@9e|EN ;nhJqDH9uσ?Ti-ħv<s('',<[>WE2\4 H5#nW`Nq@z}ͦ:@6nqmp}JГH5ImR1PGVS%픂Kind	`pya r8F68d|Ok#y& &`0z s@q]MR^2Z4cLcq+>xR
, S$Gqgn@R	OCӎktCjf#)1#)?H+ڃOk&PU`neF qӐ(*aMعc2폛?sW߲ L#X+)'ԖZK./][o{k,e^m؁:oI|W\4C5vrb#N9 ~cJ7vv=|i̮2{*@"Fp!jd)Łc}w}TV^?bT,^)Re|}rs~rQ<=:w"@JɞC9'~}}ik$*&3	~z˴AT6>|r{s؃k=CC,}N#~d}y 1g'A3N\OI"̟+H ߶?5+w𵽫R,x郟ι?~[r4Lku#l3dI} }Co$5;ZMޯGDū2K"=>vpsecm<>#=vWZ(xGmR/tWN\Z[TG8oT`
?FUeee
YHV 	85g?cٗŚι𜺝n,#44f[]Nyg;y/Ӆ|pZ<eL_-L.(唳|sGO(c<7)b]:j4iêÿ~U(YdjζLTuRԫSZ411QR$RSq'0m?DyЏ׵(g?ߚI ?h^W /^F/x  ϡ G! & ܿ--Vק-G#ӚݮE	]r"R?e#Z
U ?e#Z
S ?? "M
_#i _?yk`9^=G|>$V{xbEPĴ Nw9O ?h_6WU;(4mBǅU6ډZ[
SU Ut fNSR^0puM4dғҺn3I3PWqRRrʥmK,M=ZM6(y|-"ĭھ~ji&-o-kwS熣%ަ-"3*Lc?:]O.^͒ڇc;=6C"a8AO8-l $P[[©ƀ*E""*VkÎ🂲^jUdj/b
*R)Ӗ'4(PQNp%;ٴ,^6q(PХN*4)˚ۜS 4|7{U,-hy
\p|=z_PO
 $X@?ue/Y\*	.jZ;j$_?Eh>|R?G"bKP_M8Rݓr(v>'7 ΐI<.|e |$u	@x* rAc\o_!뙴-'[ yf*@ʓڋ|,/5z̀_rH^5vޕ|MpfqZٹv7RN|IyxZS4v=F/9+A}O^h4Gjo]L~,].Hɭ(((*ǧ	# 8'=괗cW?@TV#\bN' MG?	 E`2e>r.sPB|?_@S>wyqo  Qc4W#]?l  DI;pڋ,Tuf9#<=(~g?"g!x|>Eu '+퇞xo-INg|d1~<ƫ.2PGBW9ҹۯ"ש\s;qb pD_YRu{IFVJJͻ:Ďy1+hfJ;p+˒1(=2?}[$,x!\+$w#Sy!F#ݭV\ҝ8G^&1]Vj.oߪv(. $<th>Rw9 gpZD<92?O@z~1ߙeݩ\~~c/U2UZ5¬ҋu*85if{xg/8JJչl$ҋznv{;p,A'=1J<`޽tWr(¨㎭ps~Fy8G cKb1ӴV޶kr>tF1KeemwLT?-BFs~14yKvc#֔nv 9ǵdOshlO`Cj⓻J+Wme}Z;k^d4k2<$* p=9f8b}:ɑ9cׁKqtV2$G\s*9$b+:y,F}
Jm'k4ϯ}{^=~m=w^Mb  99xqFH9=G^=@R1 }zdp1~3f$G@	ϧ\ ӭeu_-n
kn;-vFMF[hiXu n9X]rKn^Oq06	#n:28 5'tי~RI$ {wT99xזɷ׽J]4_v7YZcIY$e@A+r=sr*7afg/q=H#;așNK;3~^H0F@,Nq!SeeCM}nYrۧOo}R-g]=VRtu@;=x>#E rvĒ
p7	< N6Q||E{$Vנ'{{]ni;g{h1.IY$kkK>6 o<TuoOCw"#mb+>xjyF	oǐ+гZE<߀G?Y5O]{=WM6.p,w
Hs<^"x#3x*sFO9lFsԜr
Hj6;d?_]o[^W^z=_u앟m-zzJ"@"HXY\0qz/*Dg u{Nz=)4E/޼'9[18eh*`Op83nݓ+m{-5c|EOXFeV*|Ѓ	3SFCʌpН8ݑRhfmR?ҐߪƣKc9T&4ٻDF!|RsZ^\j-%{u?U+>K[+klYW?f){Id@\;GlҮa3+#tY0Rʹb?29f/?-i}ϥ;+o+dOqygs1QT92BNz`G}	82J^f/.؂E!Uq/8- [l5V{5knݓğKrbg;]pscfϧΙ*4d
dp=y+`^Om+Ax9$l3[Pc5Z[@cG'O3%NHO -(Y=[mY+=֫WdK/;_.ۋyЌh@pyH g`W!q+Y^k$_F2N? Gc>\gڱ!λ|  ^>S<ESsl]jaki*5ZWW91-Zޞ /,QucX|KNL-5{9	=j.8zsWR>@!I(n \W76()#u'x%O^qߡ˽&w[8
UmAFUƤu%'j-IBnǃ_pwjRm
\K{[IexjV0O-xK'N ldz=<#ZlRy*l&X7ĠSgCOy'/!;Sʘ/fHW39<ҿAɼ_Τh#(/Q+[w<|O
Eʓ%$TfؖleP=NF=?CM7/sr9$ƸuQh7ne	G,0y3ʳY9A"ެA9 {bY`~"ۨbs/vR<z,]{\5h_kӕ+mOǞ7`BsM-5jz^!ʓuopN;.ysl4{60GqgR
z硸R`b,*ߐz^eJ2RԢӋ]WMyiVk͏|'{ѤҮ\Z=@v81ּo$G8[)qB#3 @ZsXeLjx#L{ʤ:	`U2`n 1|)0}61ǲz`\
X\X7Vos\v
w1e	#};+npIAey/n՛9-"0 4Z5b	 #Гӵ ಑FSP{WzyymdpZAD`5\-ҮC ckW1+7
ޫ	 \A
ܠfPY٥mp2@(i-v@${Б}%scO*VE9VeaA#
u)f.	P{|0c%B||[Ƒɫ2YT)q\{Bхju%A1 
@ےCs^ 8^Ab$*\Hm$6ȣ{κ/΅\@Ih kZ5idfeRcz`[5i'H`,31
N $c99ٷ!'J\R4WI` u~=rA=kb-ݸ0vpmt8K8"pq8<qV#ҵ=4W:_"itX<*W~qV\MuvKnTX.UnVA*>Mķqt%Q'_Rx=*'֕C47
.(5o7Kek9?1C'	$qs暟<AHWUu'Wu՜pYYǓ`9
ωn@R?x|g[#]Fc,{ve
ʒ}N(5TUR\e  9+Q 'b"3mR rrFQ_fjZOؙb]q٤JI2I>Wu׌ˣjNد`Bn?̗%ח
ūYq|{,8$3 tŶ Rr]@ǌ`[au+wk<	^HCd4JAYbpEݑ (9
z}zf(`|V%,<;q](Va8Йʹn*8rA湶䪽B2)x8e;gمUm%	N_Z '
l.+tl#vʠd`r=J62^Y\Hnme29 ux$X4PrN郞r8Úg<*56վT) Xm<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>ByteBuffer - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>ByteBuffer - Reference Documentation</h1>
        <p>Implementation of a mutuable byte buffer.</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">ByteBuffer() constructor</a>
            </li>
            <li>
                <a href="#toString">toString()</a>
            </li>
            <li>
                <a href="#append">append()</a>
            </li>
            <li>
                <a href="#byteAt">byteAt()</a>
            </li>
            <li>
                <a href="#clear">clear()</a>
            </li>
            <li>
                <a href="#copy">copy()</a>
            </li>
            <li>
                <a href="#find">find()</a>
            </li>
            <li>
                <a href="#insert">insert()</a>
            </li>
            <li>
                <a href="#toByteString">toByteString()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>length</td>
                <td>Number of bytes in the ByteBuffer</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteBuffer()</p>
        <p class="signature">ByteBuffer(String stringValue, Number encoding)</p>
        <p class="signature">ByteBuffer(ByteString byteString)</p>
        <h3>Description</h3>
        <p>Create a empty ByteBuffer object or a ByteBuffer object containing the data from stringValue decoded
            according to format defined in argument encoding or a ByteBuffer object containing the ByteString object passed as
            argument</p>
                    
        <p>The following encoding formats can be used for the stringValue argument:</p>
                    
        <p>HEX - A string containing hexadecimal characters and arbitrary delimiters.</p>
                    
        <p>ASCII - A string containing ASCII characters and characters from Latin-1.</p>
                    
        <p>UTF8 - A string containing Unicode characters.</p>
                    
        <p>BASE64 - A string containing BASE-64 encoded data.</p>
                    
        <p>OID - A string containing an object identifier in dotted notation or
               separated by blanks (This is a proprietary extension to Global Platform Scripting).</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>stringValue</td>
                <td>String containing the encoded binary data</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>encoding</td>
                <td>Encoding format. Must be one of HEX, ASCII, UTF8,
            BASE64 or OID</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>byteString</td>
                <td>ByteString object with data</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ENCODING</td>
                <td>The argument encoding contains an unknown encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The argument stringValue contains characters not compatible with the encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteBuffer();

assert(x != null);
assert(x instanceof ByteBuffer);


x = new ByteBuffer("1234", HEX);

assert(x.length == 2);
assert(x.toString() == "12 34");


x = new ByteBuffer("0x1234 56.78.90+AB#cd'EF", HEX);

assert(x.length == 8);
assert(x.toString() == "12 34 56 78 90 AB CD EF");


x = new ByteBuffer("1234ABCDÄÖÜß", ASCII);

assert(x.length == 12);
assert(x.toString() == "31 32 33 34 41 42 43 44 C4 D6 DC DF");


x = new ByteBuffer("1234ABCDÄÖÜß", UTF8);

assert(x.length == 16);
assert(x.toString() == "31 32 33 34 41 42 43 44 C3 84 C3 96 C3 9C C3 9F");


x = new ByteBuffer("SGVsbG8gV29ybGQ=", BASE64);

assert(x.length == 11);
assert(x.toString(ASCII) == "Hello World");


x = new ByteBuffer(new ByteString("1234", HEX));

assert(x.length == 2);
assert(x.toString() == "12 34");


x = new ByteBuffer("1.2.840.113549.1.1.2", OID);

assert(x.length == 9);
assert(x.toString(OID) == "1.2.840.113549.1.1.2");
assert(x.toString(HEX) == "2A864886F70D010102");


x = new ByteBuffer("1 2 840 113549 1 1 2", OID);

assert(x.toString(HEX) == "2A864886F70D010102");


</pre>
        <h2 id="toString">toString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String toString(Number encoding)</p>
        <h3>Description</h3>
        Return string containing binary data in given encoding
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>encoding</td>
                <td>Encoding to present the binary data in. Must be one of ASCII, HEX, UTF8, BASE64 or CN.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>String representing data from ByteBuffer</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteBuffer("41 42 43", HEX);
assert(x.toString(HEX) == "414243");

x = new ByteBuffer("41 42 43 C4 D6 DC DF", HEX);
assert(x.toString(ASCII) == "ABCÄÖÜß");

x = new ByteBuffer("C3 84 C3 96 C3 9C C3 9F", HEX);
assert(x.toString(UTF8) == "ÄÖÜß");

x = new ByteBuffer("Hello World", ASCII);
assert(x.toString(BASE64) == "SGVsbG8gV29ybGQ=");

</pre>
        <h2 id="append">append()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteBuffer append(ByteBuffer byteBuffer)</p>
        <p class="signature">ByteBuffer append(ByteString byteString)</p>
        <p class="signature">ByteBuffer append(Number byteValue)</p>
        <p class="signature">ByteBuffer append(String stringValue)</p>
        <h3>Description</h3>
        Append to the ByteBuffer at the end the content of the ByteBuffer or ByteString object, the ASCII encoded string or the byte
                     given as argument.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytebuffer.html">ByteBuffer</a>
                    </code>
                </td>
                <td>byteBuffer</td>
                <td>ByteBuffer object to be appended to ByteBuffer</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>byteString</td>
                <td>ByteString object to be appended to ByteBuffer</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>stringValue</td>
                <td>String containing ASCII characters to be appended to ByteBuffer</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>byteValue</td>
                <td>Single byte value</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteBuffer</code>
                </td>
                <td>Returns the ByteBuffer object this method is applied to</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteBuffer();

x.append(new ByteBuffer("ABC", ASCII));
assert(x.toString() == "41 42 43");

x.append("123");
assert(x.toString() == "41 42 43 31 32 33");

x.append(new ByteString("ABC", ASCII));
assert(x.toString() == "41 42 43 31 32 33 41 42 43");

str = 0x20;
x.append(str);
assert(x.toString() == "41 42 43 31 32 33 41 42 43 20");

</pre>
        <h2 id="byteAt">byteAt()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number byteAt(Number offset)</p>
        <h3>Description</h3>
        Return the byte at the zero based offset in the ByteBuffer
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>Zero based offset</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Value of byte as unsigned integer</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>Argument offset is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteBuffer("123ABCÄÖÜ", ASCII);
assert(typeof(x.byteAt(0) == "number"));
assert(x.byteAt(0) == 0x31);
assert(x.byteAt(3) == 0x41);
assert(x.byteAt(6) == 0xC4);

</pre>
        <h2 id="clear">clear()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteBuffer clear()</p>
        <p class="signature">ByteBuffer clear(Number offset)</p>
        <p class="signature">ByteBuffer clear(Number offset, Number length)</p>
        <h3>Description</h3>
        Clears the area specified by offset and length in the ByteBuffer. Bytes behind the cleared area
                     are moved to offset. If length is missing, then the remaining length from offset to the end
                     of the ByteBuffer is cleared. If offset and length are missing from the argument list, then
                     the whole ByteBuffer is cleared.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>The zero based offset in the ByteBuffer where the clear operation is started.
                     Zero is assumed if offset is missing.</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>length</td>
                <td>The length of the area to be cleared. If length is missing, then the maximum
                     number of bytes up to the end of the ByteBuffer is assumed.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteBuffer</code>
                </td>
                <td>The ByteBuffer object the method is applied to</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>Argument offset is out of range</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>Argument length is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteBuffer("123456", ASCII);

x.clear(2, 2);
assert(x.toString(ASCII) == "1256");

x.clear(2);
assert(x.toString(ASCII) == "12");

x.clear();
assert(x.length == 0);

</pre>
        <h2 id="copy">copy()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteBuffer copy(Number offset, ByteBuffer byteBuffer)</p>
        <p class="signature">ByteBuffer copy(Number offset, ByteString byteString)</p>
        <p class="signature">ByteBuffer copy(Number offset, Number byteValue)</p>
        <p class="signature">ByteBuffer copy(Number offset, String stringValue)</p>
        <h3>Description</h3>
        Copy the bytes from the argument into the ByteBuffer at offset and replace the bytes contained.
                     The length of the ByteBuffer is not changed.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>Zero based offset at which the bytes from the argument are copied to</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytebuffer.html">ByteBuffer</a>
                    </code>
                </td>
                <td>byteBuffer</td>
                <td/>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>byteString</td>
                <td/>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>byteValue</td>
                <td>Value of a single unsigned byte</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>stringValue</td>
                <td>ASCII encoded string</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteBuffer</code>
                </td>
                <td>The ByteBuffer object this method is applied to</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The argument offset is out of range</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The offset plus the length of the argument exceeds the end of the
                 ByteBuffer</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteBuffer("123456", ASCII);

x.copy(0, "AB");
assert(x.toString(ASCII) == "AB3456");

y = new ByteBuffer("CD", ASCII);
x.copy(2, y);
assert(x.toString(ASCII) == "ABCD56");

y = new ByteString("EF", ASCII);
x.copy(4, y);
assert(x.toString(ASCII) == "ABCDEF");

</pre>
        <h2 id="find">find()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number find(ByteString value)</p>
        <p class="signature">Number find(ByteString value, Number offset)</p>
        <h3>Description</h3>
        Find the first occurence of the value starting at offset.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>ByteString to locate in ByteBuffer</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>Zero based offset to start search at. Zero is assumed if argument is missing.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Zero based offset at which the ByteString is found or -1 if the ByteString is not found.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>Argument offset is out of range</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteBuffer("ABCDABCD", ASCII);
y = new ByteString("BC", ASCII);

assert(x.find(y) == 1);
assert(x.find(y, 2) == 5);
assert(x.find(y, -2) == 1);

y = new ByteString("CD", ASCII);
assert(x.find(y, 4) == 6);

y = new ByteString("CD", ASCII);
assert(x.find(y, 6) == 6);

y = new ByteString("CB", ASCII);
assert(x.find(y) == -1);

y = new ByteString("BCDE", ASCII);
assert(x.find(y) == -1);

y = new ByteString("", ASCII);
assert(x.find(y) == 0);

x = new ByteBuffer("", ASCII);
y = new ByteString("", ASCII);
assert(x.find(y) == 0);
assert(x.find(y, 0) == 0);

</pre>
        <h2 id="insert">insert()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteBuffer insert(Number offset, ByteBuffer byteBuffer)</p>
        <p class="signature">ByteBuffer insert(Number offset, ByteString byteString)</p>
        <p class="signature">ByteBuffer insert(Number offset, Number byteValue)</p>
        <p class="signature">ByteBuffer insert(Number offset, String stringValue)</p>
        <h3>Description</h3>
        Insert the bytes from the argument at offset.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>Zero based offset at which the bytes are inserted</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytebuffer.html">ByteBuffer</a>
                    </code>
                </td>
                <td>byteBuffer</td>
                <td>ByteBuffer object to be appended to ByteBuffer</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>byteString</td>
                <td>ByteString object to be appended to ByteBuffer</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>stringValue</td>
                <td>String containing ASCII characters to be appended to ByteBuffer</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>byteValue</td>
                <td>Single byte value</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteBuffer</code>
                </td>
                <td>Returns the ByteBuffer object this method is applied to</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The argument offset is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteBuffer("123456", ASCII);

x.insert(0, "AB");
assert(x.toString(ASCII) == "AB123456");

y = new ByteBuffer("CD", ASCII);
x.insert(2, y);
assert(x.toString(ASCII) == "ABCD123456");

y = new ByteString("EF", ASCII);
x.insert(10, y);
assert(x.toString(ASCII) == "ABCD123456EF");

x.insert(1, 0x31);
assert(x.toString(ASCII) == "A1BCD123456EF");

</pre>
        <h2 id="toByteString">toByteString()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString toByteString()</p>
        <p class="signature">ByteString toByteString(Number offset)</p>
        <p class="signature">ByteString toByteString(Number offset, Number count)</p>
        <h3>Description</h3>
        Return all or a fraction of the ByteBuffer as ByteString.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>Zero based offset in ByteBuffer. Default is 0.</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>count</td>
                <td>Number of bytes to return. Default is all.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Bytes as ByteString object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The argument offset is out of range</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The argument count is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteBuffer("123456", ASCII);

y = x.toByteString();
assert(y.toString(ASCII) == "123456");

y = x.toByteString(3);
assert(y.toString(ASCII) == "456");

y = x.toByteString(2, 2);
assert(y.toString(ASCII) == "34");

y = x.toByteString(6, 0);
assert(y.toString(ASCII) == "");

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>ByteString - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>ByteString - Reference Documentation</h1>
        <p>Implementation of an immutable binary string, similar to the String class.</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">ByteString() constructor</a>
            </li>
            <li>
                <a href="#and">and()</a>
            </li>
            <li>
                <a href="#byteAt">byteAt()</a>
            </li>
            <li>
                <a href="#bytes">bytes()</a>
            </li>
            <li>
                <a href="#concat">concat()</a>
            </li>
            <li>
                <a href="#crc">crc()</a>
            </li>
            <li>
                <a href="#equals">equals()</a>
            </li>
            <li>
                <a href="#find">find()</a>
            </li>
            <li>
                <a href="#getL">getL()</a>
            </li>
            <li>
                <a href="#getLV">getLV()</a>
            </li>
            <li>
                <a href="#left">left()</a>
            </li>
            <li>
                <a href="#neg">neg()</a>
            </li>
            <li>
                <a href="#not">not()</a>
            </li>
            <li>
                <a href="#or">or()</a>
            </li>
            <li>
                <a href="#pad">pad()</a>
            </li>
            <li>
                <a href="#right">right()</a>
            </li>
            <li>
                <a href="#startsWith">startsWith()</a>
            </li>
            <li>
                <a href="#toBase64">toBase64()</a>
            </li>
            <li>
                <a href="#toBcd">toBcd()</a>
            </li>
            <li>
                <a href="#toHex">toHex()</a>
            </li>
            <li>
                <a href="#toSigned">toSigned()</a>
            </li>
            <li>
                <a href="#toString">toString()</a>
            </li>
            <li>
                <a href="#toUnsigned">toUnsigned()</a>
            </li>
            <li>
                <a href="#xor">xor()</a>
            </li>
            <li>
                <a href="#add">add()</a>
            </li>
            <li>
                <a href="#clear">clear()</a>
            </li>
            <li>
                <a href="#valueOf">valueOf()</a>
            </li>
            <li>
                <a href="#fromJSON">fromJSON()</a>
            </li>
            <li>
                <a href="#asSigned">asSigned()</a>
            </li>
            <li>
                <a href="#asUnsigned">asUnsigned()</a>
            </li>
            <li>
                <a href="#biAdd">biAdd()</a>
            </li>
            <li>
                <a href="#sub">sub()</a>
            </li>
            <li>
                <a href="#mod">mod()</a>
            </li>
            <li>
                <a href="#modInverse">modInverse()</a>
            </li>
            <li>
                <a href="#modPow">modPow()</a>
            </li>
            <li>
                <a href="#multiply">multiply()</a>
            </li>
            <li>
                <a href="#divide">divide()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>XOR</td>
                <td>Constant used in crc() method</td>
            </tr>
        </table>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>length</td>
                <td>Number of bytes in the ByteString</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString(String stringValue, Number encoding)</p>
        <h3>Description</h3>
                    
        <p>Create a ByteString object containing the data from stringValue decoded
               according to format defined in argument encoding</p>
                    
        <p>The following encoding formats can be used for the stringValue argument:</p>
                    
        <p>HEX - A string containing hexadecimal characters and arbitrary delimiters.</p>
                    
        <p>ASCII - A string containing ASCII characters and characters from Latin-1.</p>
                    
        <p>UTF8 - A string containing Unicode characters.</p>
                    
        <p>BASE64 - A string containing BASE-64 encoded data.</p>
                    
        <p>OID - A string containing an object identifier in dotted notation or
               separated by blanks (This is a proprietary extension to Global Platform Scripting).</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>stringValue</td>
                <td>String containing the encoded binary data</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>encoding</td>
                <td>Encoding format. Must be one of HEX, ASCII, UTF8,
            BASE64 or OID</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments given</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ENCODING</td>
                <td>The argument encoding contains an unknown encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The argument stringValue contains characters not compatible with the encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>On or more arguments are not of the expected type</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("1234", HEX);

assert(x.length == 2);
assert(x.toString() == "12 34");


x = new ByteString("", HEX);

assert(x.length == 0);
assert(x.toString() == "");


x = new ByteString("0x1234 56.78.90+AB#cd'EF", HEX);

assert(x.length == 8);
assert(x.toString() == "12 34 56 78 90 AB CD EF");


x = new ByteString("1234ABCDÄÖÜß", ASCII);

assert(x.length == 12);
assert(x.toString() == "31 32 33 34 41 42 43 44 C4 D6 DC DF");


x = new ByteString("1234ABCDÄÖÜß", UTF8);

assert(x.length == 16);
assert(x.toString() == "31 32 33 34 41 42 43 44 C3 84 C3 96 C3 9C C3 9F");


x = new ByteString("SGVsbG8gV29ybGQ=", BASE64);

assert(x.length == 11);
assert(x.toString(ASCII) == "Hello World");


x = new ByteString("1.2.840.113549.1.1.2", OID);

assert(x.length == 9);
assert(x.toString(OID) == "1.2.840.113549.1.1.2");
assert(x.toString(HEX) == "2A864886F70D010102");


x = new ByteString("1 2 840 113549 1 1 2", OID);

assert(x.toString(HEX) == "2A864886F70D010102");


</pre>
        <h2 id="and">and()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString and(ByteString value)</p>
        <h3>Description</h3>
        The bitwise AND of the object for which this method is called and the argument.
            Both must be of equal size
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>ByteString object of same size to use in bitwise
            and operation</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The result of the and operation as ByteString</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>Object and argument have different length</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("AA A5 55", HEX);
y = new ByteString("55 A5 AA", HEX);
z = x.and(y);
assert(z.toString(HEX) == "00A500", HEX);

</pre>
        <h2 id="byteAt">byteAt()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number byteAt(Number offset)</p>
        <h3>Description</h3>
        Return the value of the byte at the zero based offset
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>Zero based offset</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>The value of the byte at offset</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>Offset is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("123ABCÄÖÜ", ASCII);
assert(typeof(x.byteAt(0)) == "number");
assert(x.byteAt(0) == 0x31);
assert(x.byteAt(3) == 0x41);
assert(x.byteAt(6) == 0xC4);

</pre>
        <h2 id="bytes">bytes()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString bytes(Number offset)</p>
        <p class="signature">ByteString bytes(Number offset, Number count)</p>
        <h3>Description</h3>
        Extract count bytes from a ByteString starting at zero based offset.
           If count is missing then the all remaining bytes from offset are extracted.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>Zero based offset from which bytes are extracted</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>count</td>
                <td>Number of bytes to extract</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString containing the extracted bytes</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The offset is out of range</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The offset plus the count exceeds the length of the buffer</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("123ABC???", ASCII);
y = x.bytes(3, 3);
assert(y.toString(ASCII) == "ABC");

y = x.bytes(6);
assert(y.toString(ASCII) == "???");

y = x.bytes(9);
assert(y.toString(ASCII) == "");

</pre>
        <h2 id="concat">concat()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString concat(ByteString value)</p>
        <h3>Description</h3>
        Concatenate ByteString for which the method is called with argument value and return a new ByteString object.
           The ByteString for which the method is called is not changed.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>ByteString to append to object for which the method is called</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object containing the concatenation of both objects</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("123", ASCII);
y = new ByteString("414243", HEX);

z = x.concat(y);

assert(z.toString(ASCII) == "123ABC");

z = z.concat(new ByteString("", HEX));

assert(z.toString(ASCII) == "123ABC");

</pre>
        <h2 id="crc">crc()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString crc(Number method)</p>
        <h3>Description</h3>
        Calculate a checksum for the ByteString object using the method defined by argument method
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>method</td>
                <td>
                    <p>The method to use for checksum calculation.</p>
                                           
                    <p>Currently only XOR is available, calculating the XOR checksum across all bytes in the ByteString</p>
                </td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>Argument method must be XOR</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("A55A", HEX);
c = x.crc(ByteString.XOR);
assert(c.toString(HEX) == "FF");

x = new ByteString("", HEX);
c = x.crc(ByteString.XOR);
assert(c.toString(HEX) == "00");

</pre>
        <h2 id="equals">equals()</h2>
        <h3>Prototype</h3>
        <p class="signature">Boolean equals(ByteString value)</p>
        <h3>Description</h3>
        Check if both ByteString have the same length and contain the same value.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>ByteString object to check against</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>true if both ByteString are equal, otherwise false</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("414243", HEX);
y = new ByteString("ABC", ASCII);

assert(x.equals(y));

y = new ByteString("CBA", ASCII);
assert(!x.equals(y));

y = new ByteString("ABCD", ASCII);
assert(!x.equals(y));

y = new ByteString("AB", ASCII);
assert(!x.equals(y));

</pre>
        <h2 id="find">find()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number find(ByteString value)</p>
        <p class="signature">Number find(ByteString value, Number offset)</p>
        <h3>Description</h3>
        Search the ByteString for the first occurance of the ByteString specified in argument value.
            Start at zero based offset or 0 if offset is not defined.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>ByteString to search for</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>Zero based index to start search at. 0 is assumed if parameter is not present</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Zero based offset at which the search string was found or -1 if the search string
               could not be found</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>Offset given in argument is out of range</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("ABCDABCD", ASCII);
y = new ByteString("BC", ASCII);

assert(typeof(x.find(y)) == "number");
assert(x.find(y) == 1);
assert(x.find(y, 2) == 5);
assert(x.find(y, -2) == 1);

y = new ByteString("CD", ASCII);
assert(x.find(y, 4) == 6);

y = new ByteString("CD", ASCII);
assert(x.find(y, 6) == 6);

y = new ByteString("CB", ASCII);
assert(x.find(y) == -1);

y = new ByteString("BCDE", ASCII);
assert(x.find(y) == -1);

y = new ByteString("", ASCII);
assert(x.find(y) == 0);

x = new ByteString("", ASCII);
y = new ByteString("", ASCII);
assert(x.find(y) == 0);
assert(x.find(y, 0) == 0);

</pre>
        <h2 id="getL">getL()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getL(Number method)</p>
        <h3>Description</h3>
                    
        <p>Return a length field encoded as per specification in method.</p>
                    
        <p>TLV.EMV encodes the length field with a variable length as per
               ASN.1 DER encoding. Values in the range 0 to 127 are encoded in one byte.
               Values in the range 128 to 255 are encoded in two bytes with a leading '81'.
               Length fields in the range 256 to 65535 are encoded in three bytes with a
               leading '82' and two bytes in MSB/LSB order. Length fields in the range 65536
               to 16777215 are encoded in four bytes with a leading '83' and three bytes in
               MSB/LSB format.</p>
        			
        <p>TLV.DGI encodes length values between 0 and 254 in one byte and length values
               between 255 and 65535 in three bytes with a leading 'FF' and two bytes in
               MSB/LSB format.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>method</td>
                <td>Must be either TLV.EMV or TLV.DGI.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Length field as ByteString</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>Length must not exceed 65535 for DGI encoding</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>The encoding method is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("", ASCII);
y = x.getL(TLV.EMV);
assert(y.toString(HEX) == "00");

y = x.getL(TLV.DGI);
assert(y.toString(HEX) == "00");


x = new ByteString("123ABC", ASCII);
y = x.getL(TLV.EMV);
assert(y.toString(HEX) == "06");

y = x.getL(TLV.DGI);
assert(y.toString(HEX) == "06");


x = new ByteString("01234567890123456789012345678901234567890123456789012345" +
                   "67890123456789012345678901234567890123456789012345678901" +
                   "2345678901234567", ASCII);
y = x.getL(TLV.EMV);
assert(y.toString(HEX) == "8180");

y = x.getL(TLV.DGI);
assert(y.toString(HEX) == "80");


x = new ByteString("01234567890123456789012345678901234567890123456789012345" +
                   "67890123456789012345678901234567890123456789012345678901" +
                   "23456789012345678901234567890123456789012345678901234567" +
                   "89012345678901234567890123456789012345678901234567890123" +
                   "4567890123456789012345678901234", ASCII);
y = x.getL(TLV.EMV);
assert(y.toString(HEX) == "81FF");

y = x.getL(TLV.DGI);
assert(y.toString(HEX) == "FF00FF");


x = new ByteString("01234567890123456789012345678901234567890123456789012345" +
                   "67890123456789012345678901234567890123456789012345678901" +
                   "23456789012345678901234567890123456789012345678901234567" +
                   "89012345678901234567890123456789012345678901234567890123" +
                   "45678901234567890123456789012345", ASCII);
y = x.getL(TLV.EMV);
assert(y.toString(HEX) == "820100");

y = x.getL(TLV.DGI);
assert(y.toString(HEX) == "FF0100");

</pre>
        <h2 id="getLV">getLV()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getLV(Number method)</p>
        <h3>Description</h3>
        Prefix the ByteString with a length field as specified by method.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>method</td>
                <td>Must be either TLV.EMV or TLV.DGI</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Length field concatenated with content</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>Length must not exceed 65535 for DGI encoding</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>The encoding method is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("", ASCII);
y = x.getLV(TLV.EMV);
assert(y.toString(HEX) == "00");

y = x.getLV(TLV.DGI);
assert(y.toString(HEX) == "00");


x = new ByteString("123ABC", ASCII);
y = x.getLV(TLV.EMV);
assert(y.toString(HEX) == "06313233414243");

y = x.getLV(TLV.DGI);
assert(y.toString(HEX) == "06313233414243");


x = new ByteString("01234567890123456789012345678901234567890123456789012345" +
                   "67890123456789012345678901234567890123456789012345678901" +
                   "2345678901234567", ASCII);
y = x.getLV(TLV.EMV);
assert(y.equals(x.getL(TLV.EMV).concat(x)));

y = x.getLV(TLV.DGI);
assert(y.equals(x.getL(TLV.DGI).concat(x)));


x = new ByteString("01234567890123456789012345678901234567890123456789012345" +
                   "67890123456789012345678901234567890123456789012345678901" +
                   "23456789012345678901234567890123456789012345678901234567" +
                   "89012345678901234567890123456789012345678901234567890123" +
                   "45678901234567890123456789012345", ASCII);
y = x.getLV(TLV.EMV);
assert(y.equals(x.getL(TLV.EMV).concat(x)));

y = x.getLV(TLV.DGI);
assert(y.equals(x.getL(TLV.DGI).concat(x)));

</pre>
        <h2 id="left">left()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString left(Number value)</p>
        <h3>Description</h3>
        Extract the leftmost number of bytes as specified in the argument.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>value</td>
                <td>Number of leftmost bytes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object with leftmost bytes</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The length specified exceeds the length of the ByteString</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("123ABC", ASCII);
y = x.left(3);
assert(y.toString(ASCII) == "123");

y = x.left(9);
assert(y.toString(ASCII) == "123ABC");

</pre>
        <h2 id="neg">neg()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString neg()</p>
        <p class="signature">ByteString neg(Number size)</p>
        <h3>Description</h3>
        <p>Return a ByteString object with the negative binary value of the ByteString object the method is applied to.</p>
                     
        <p>The method calculates the ones-complement by inverting all bits and adding 1.</p>
                     
        <p>The method can be applied to ByteString objects of arbitrary length.</p>
                     
        <p>If no size argument is given, then the resulting ByteString has the same length as the ByteString object the method
                is called for</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>size</td>
                <td>The number of bytes in the resulting ByteString</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object with negative value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The size argument must be equals or larger than the length of the ByteString</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("0101", HEX);
y = x.neg();
assert(y.toString(HEX) == "FEFF");

x = new ByteString("0101", HEX);
y = x.neg(3);
assert(y.toString(HEX) == "FFFEFF");

x = new ByteString("0000", HEX);
y = x.neg(3);
assert(y.toString(HEX) == "000000");

x = new ByteString("FFFF", HEX);
y = x.neg();
assert(y.toString(HEX) == "0001");

x = new ByteString("", HEX);
y = x.neg();
assert(y.toString(HEX) == "");

x = new ByteString("", HEX);
y = x.neg(2);
assert(y.toString(HEX) == "0000");

</pre>
        <h2 id="not">not()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString not()</p>
        <h3>Description</h3>
        Return an new ByteString object with all bits inverted.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object of same size with all bits inverted.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("0101", HEX);

y = x.not();
assert(y.toString(HEX) == "FEFE");

y = y.not();
assert(y.toString(HEX) == "0101");

x = new ByteString("", HEX);

y = x.not();
assert(y.toString(HEX) == "");

</pre>
        <h2 id="or">or()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString or(ByteString value)</p>
        <h3>Description</h3>
        Return a new ByteString object containing the bitwise OR of the ByteString object for which the method is called
                     and the argument. Both ByteString objects must have the same length.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>ByteString argument.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object containing the result of the OR operation.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The length of the ByteString argument must be equal to the length of the ByteString object.</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("AA A5 55", HEX);
y = new ByteString("55 A5 AA", HEX);
z = x.or(y);
assert(z.toString(HEX) == "FFA5FF", HEX);

</pre>
        <h2 id="pad">pad()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString pad(Number method)</p>
        <p class="signature">ByteString pad(Number method, Boolean optional)</p>
        <h3>Description</h3>
        Return ByteString padded to the right according to the method
                     specified.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>method</td>
                <td>The padding method to use. Must be either
                     Crypto.ISO9797_METHOD_1 or Crypto.ISO9797_METHOD_2. Method 1 will append the
                     appropriate number of '00' bytes to complete the 8 byte block, whereas method 2 will
                     append an '80' followed by the appropriate number of '00' bytes. Crypto.ISO9797_METHOD_1_16
                     or Crypto.ISO9797_METHOD_2_16 use a 16 byte block size.</td>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>optional</td>
                <td>If optional is true, then padding will only occur
                     if the length is not a multiple of the block size. Default is false.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object containing the extracted bytes.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>Invalid padding method</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("123ABC", HEX);

y = x.pad(Crypto.ISO9797_METHOD_1);
assert(y.toString(HEX) == "123ABC0000000000");

y = x.pad(Crypto.ISO9797_METHOD_1_16);
assert(y.toString(HEX) == "123ABC00000000000000000000000000");

y = x.pad(Crypto.ISO9797_METHOD_2);
assert(y.toString(HEX) == "123ABC8000000000");

y = x.pad(Crypto.ISO9797_METHOD_2_16);
assert(y.toString(HEX) == "123ABC80000000000000000000000000");

x = new ByteString("123ABC11223333", HEX);

y = x.pad(Crypto.ISO9797_METHOD_1);
assert(y.toString(HEX) == "123ABC1122333300");

y = x.pad(Crypto.ISO9797_METHOD_2);
assert(y.toString(HEX) == "123ABC1122333380");

x = new ByteString("123ABC112233338877665544332211", HEX);

y = x.pad(Crypto.ISO9797_METHOD_1_16);
assert(y.toString(HEX) == "123ABC11223333887766554433221100");

y = x.pad(Crypto.ISO9797_METHOD_2_16);
assert(y.toString(HEX) == "123ABC11223333887766554433221180");

x = new ByteString("123ABC1122333399", HEX);

y = x.pad(Crypto.ISO9797_METHOD_1, true);
assert(y.toString(HEX) == "123ABC1122333399");

y = x.pad(Crypto.ISO9797_METHOD_2, true);
assert(y.toString(HEX) == "123ABC1122333399");

x = new ByteString("123ABC11223333998877665544332211", HEX);

y = x.pad(Crypto.ISO9797_METHOD_1_16, true);
assert(y.toString(HEX) == "123ABC11223333998877665544332211");

y = x.pad(Crypto.ISO9797_METHOD_2_16, true);
assert(y.toString(HEX) == "123ABC11223333998877665544332211");

</pre>
        <h2 id="right">right()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString right(Number count)</p>
        <h3>Description</h3>
        Return the rightmost bytes of the ByteString as specified by the argument.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>count</td>
                <td>The number of bytes to extract.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object containing the extracted bytes.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The count argument must not exceed the length of the ByteString.</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("123ABC", ASCII);
y = x.right(3);
assert(y.toString(ASCII) == "ABC");

y = x.right(9);
assert(y.toString(ASCII) == "123ABC");

</pre>
        <h2 id="startsWith">startsWith()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number startsWith(ByteString value)</p>
        <h3>Description</h3>
        Return the number of bytes by which the ByteString and the argument start with the same bytes.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>ByteString to test against.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Number of equal bytes in object and argument.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("123ABC", ASCII);
y = new ByteString("123", ASCII);

assert(typeof(x.startsWith(y)) == "number");
assert(x.startsWith(y) == 3);
assert(y.startsWith(x) == 3);

y = new ByteString("1234", ASCII);
assert(x.startsWith(y) == 3);

y = new ByteString("01234", ASCII);
assert(x.startsWith(y) == 0);

</pre>
        <h2 id="toBase64">toBase64()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString toBase64()</p>
        <p class="signature">ByteString toBase64(Boolean linebreak)</p>
        <h3>Description</h3>
        <p>Return a new ByteString object containing the BASE64 encoding of the ByteString object for which the
                     method is called.</p>
                             
        <p>The resulting ByteString will only contain ASCII characters.</p>
                             
        <p>If the linebreak argument is true, then a newline is inserted after each 62. character (48 Bytes).</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>linebreak</td>
                <td>If true, a newline is inserted after each 62. character. Default is false.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object containing BASE64 encoded ASCII string.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("Hello World", ASCII);
y = x.toBase64();
assert(y.toString(ASCII) == "SGVsbG8gV29ybGQ=");

x = new ByteString("The quick brown fox jumped over the lazy dog12345", ASCII);
y = x.toBase64(false);
assert(y.toString(ASCII) ==
  "VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cxMjM0NQ==");

x = new ByteString("The quick brown fox jumped over the lazy dog12345", ASCII);
y = x.toBase64(true);
assert(y.toString(ASCII) ==
  "VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cxMjM0\nNQ==");

x = new ByteString("", ASCII);
y = x.toBase64(true);
assert(y.length == 0);

</pre>
        <h2 id="toBcd">toBcd()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString toBcd()</p>
        <p class="signature">ByteString toBcd(Number countBytes)</p>
        <h3>Description</h3>
        <p>Return a new ByteString object containing the BCD encoded binary value of the ByteString for which the method is called.</p>
                             
        <p>The ByteString can be up to 63 bits long.</p>
                             
        <p>If the optional countBytes argument is given, then the resulting ByteString has countBytes length. If the resulting
                        ByteString is longer than the BCD encoded value, then zeros are padded to the left. If the resulting ByteString
                        is smaller than the BCD encoded value, then only the rightmost digits are preserved.</p>
                  
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>countBytes</td>
                <td>Length of resulting ByteString.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td>New ByteString object containing BCD encoded value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The countBytes argument is invalid.</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("0101", HEX);
y = x.toBcd();
assert(y.toString(HEX) == "0257");

y = x.toBcd(3);
assert(y.toString(HEX) == "000257");

y = x.toBcd(1);
assert(y.toString(HEX) == "57");

x = new ByteString("7FFFFFFFFFFFFFFF", HEX);

y = x.toBcd();
assert(y.toString(HEX) == "09223372036854775807");

y = x.toBcd(0);
assert(y.toString(HEX) == "");

</pre>
        <h2 id="toHex">toHex()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString toHex()</p>
        <p class="signature">ByteString toHex(Number countBytes)</p>
        <h3>Description</h3>
        <p>Return a new ByteString object containing in ASCII the HEX encoded binary value of the ByteString for which the method is called.</p>
                             
        <p>The ByteString can be of arbitrary length.</p>
                             
        <p>If the optional countBytes argument is given, then the resulting ByteString has countBytes length. If the resulting
                        ByteString is longer than the HEX encoded value, then ASCII zeros ('0') are padded to the left. If the resulting ByteString
                        is smaller than the HEX encoded value, then only the rightmost digits are preserved.</p>
                  
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>countBytes</td>
                <td>Optional argument specifying the bytes the length of the resulting ByteString.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object containing ASCII encoded HEX string.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>Type countBytes argument is negativ.</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("65666768", HEX);
y = x.toHex();
assert(y.toString(ASCII) == "65666768");

x = new ByteString("65666768", HEX);
y = x.toHex(10);
assert(y.toString(ASCII) == "0065666768");

x = new ByteString("65666768", HEX);
y = x.toHex(4);
assert(y.toString(ASCII) == "6768");

x = new ByteString("", HEX);
y = x.toHex();
assert(y.toString(ASCII) == "");

</pre>
        <h2 id="toSigned">toSigned()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number toSigned()</p>
        <p class="signature">Number toSigned(Boolean littleEndian)</p>
        <h3>Description</h3>
        <p>Return the signed binary value of the ByteString.</p>
                             
        <p>The ByteString can be of arbitrary length, however the number of significant bits must not exceed 32.
                        Leading zeros for positive values or ones for negative values are skipped. The first bit in the
                        ByteString is used as sign bit.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>littleEndian</td>
                <td>Assume little endian encoding format. Optional argument, default is false.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ByteString as 32 bit signed integer value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The number of significant bits exceeds 32.</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("", HEX);
assert(typeof(x.toSigned()) == "number");
assert(x.toSigned() == 0);

x = new ByteString("0123", HEX);
assert(x.toSigned() == 0x0123);

x = new ByteString("FF", HEX);
assert(x.toSigned() == -1);

x = new ByteString("7FFFFFFF", HEX);
assert(x.toSigned() == 0x7FFFFFFF);

x = new ByteString("007FFFFFFF", HEX);
assert(x.toSigned() == 0x7FFFFFFF);

x = new ByteString("007FEDCBA0", HEX);
assert(x.toSigned() == 0x7FEDCBA0);

x = new ByteString("FFFFFFFF", HEX);
assert(x.toSigned() == -1);

x = new ByteString("FFFFFFFFFF", HEX);
assert(x.toSigned() == -1);

x = new ByteString("FF80000000", HEX);
assert(x.toSigned() == -0x80000000);

x = new ByteString("", HEX);
assert(x.toSigned(true) == 0);

x = new ByteString("0123", HEX);
assert(x.toSigned(true) == 0x2301);

x = new ByteString("FF", HEX);
assert(x.toSigned(true) == -1);

x = new ByteString("FFFFFF7F", HEX);
assert(x.toSigned(true) == 0x7FFFFFFF);

x = new ByteString("FFFFFF7F00", HEX);
assert(x.toSigned(true) == 0x7FFFFFFF);

x = new ByteString("A0CBED7F00", HEX);
assert(x.toSigned(true) == 0x7FEDCBA0);

x = new ByteString("FFFFFFFF", HEX);
assert(x.toSigned(true) == -1);

x = new ByteString("FFFFFFFFFF", HEX);
assert(x.toSigned(true) == -1);

x = new ByteString("00000080FF", HEX);
assert(x.toSigned(true) == -0x80000000);

</pre>
        <h2 id="toString">toString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String toString()</p>
        <p class="signature">String toString(Number encoding)</p>
        <h3>Description</h3>
        Return a String containing the ByteString value in the encoding specified by the argument or as hexadecimal string.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>encoding</td>
                <td>Encoding format, one of ASCII, UTF8, BASE64 or CN.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>String containing ByteString value in specified encoding format.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>ByteString can not be expressed in specified encoding.</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ENCODING</td>
                <td>Unknown encoding format specified.</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("41 42 43", HEX);
assert(x.toString(HEX) == "414243");

x = new ByteString("41 42 43 C4 D6 DC DF", HEX);
assert(x.toString(ASCII) == "ABCÄÖÜß");

x = new ByteString("C3 84 C3 96 C3 9C C3 9F", HEX);
assert(x.toString(UTF8) == "ÄÖÜß");

x = new ByteString("Hello World", ASCII);
assert(x.toString(BASE64) == "SGVsbG8gV29ybGQ=");

</pre>
        <h2 id="toUnsigned">toUnsigned()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number toUnsigned()</p>
        <p class="signature">Number toUnsigned(Boolean littleEndian)</p>
        <h3>Description</h3>
        <p>Return the unsigned binary value of the ByteString.</p>
                             
        <p>The ByteString can be of arbitrary length, however the number of significant bits must not exceed 64.
                        Leading zeros are skipped.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>littleEndian</td>
                <td>Assume little endian encoding format. Optional argument, default is false.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ByteString as 64 bit unsigned integer value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The number of significant bits exceeds 64.</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("", HEX);
assert(typeof(x.toUnsigned()) == "number");
assert(x.toUnsigned() == 0);

x = new ByteString("0123", HEX);
assert(x.toUnsigned() == 0x0123);

x = new ByteString("FF", HEX);
assert(x.toUnsigned() == 255);

x = new ByteString("FFFFFFFF", HEX);
assert(x.toUnsigned() == 0xFFFFFFFF);

x = new ByteString("00FFFFFFFF", HEX);
assert(x.toUnsigned() == 0xFFFFFFFF);

x = new ByteString("00DFEDCBA0", HEX);
assert(x.toUnsigned() == 0xDFEDCBA0);

x = new ByteString("007FFFFFFFFFFFFFFF", HEX);
assert(x.toUnsigned() == 0x7FFFFFFFFFFFFFFF);

x = new ByteString("7FEDCBA0DFEDCBA0", HEX);
assert(x.toUnsigned() == 0x7FEDCBA0DFEDCBA0);


x = new ByteString("", HEX);
assert(x.toUnsigned(true) == 0);

x = new ByteString("0123", HEX);
assert(x.toUnsigned(true) == 0x2301);

x = new ByteString("FF", HEX);
assert(x.toUnsigned(true) == 0xFF);

x = new ByteString("FFFFFF8F", HEX);
assert(x.toUnsigned(true) == 0x8FFFFFFF);

x = new ByteString("FFFFFFFFFFFFFF7F00", HEX);
assert(x.toUnsigned(true) == 0x7FFFFFFFFFFFFFFF);

x = new ByteString("70CBED7FA0CBED7F00", HEX);
assert(x.toUnsigned(true) == 0x7FEDCBA07FEDCB70);

</pre>
        <h2 id="xor">xor()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString xor(ByteString value)</p>
        <h3>Description</h3>
        Return a new ByteString object containing the bitwise exclusive or of the ByteString object for which the method is called
                     and the argument. Both ByteString objects must have the same length.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>ByteString argument.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object containing the result of the XOR operation.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The length of the ByteString argument must be equal to the length of the ByteString object.</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

x = new ByteString("AA A5 55", HEX);
y = new ByteString("55 A5 AA", HEX);
z = x.xor(y);

assert(z.toString(HEX) == "FF00FF", HEX);

</pre>
        <h2 id="add">add()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString add(Number value)</p>
        <h3>Description</h3>
                    
        <p>Returns a ByteString with the same length, which is the total of the objects value, interpreted
               as big unsigned integer value, plus the signed value.</p>
                    
        <p>This method is suitable for implementing sequence counters, in particular for secure messaging.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>value</td>
                <td>The signed value to add.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object that is the total of base plus value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var base = new ByteString("00", HEX);
var r = base.add(1)
assert(r.toString(HEX) == "01", HEX);

var r = r.add(-1)
assert(r.toString(HEX) == "00", HEX);

var r = r.add(-1)
assert(r.toString(HEX) == "FF", HEX);

var base = new ByteString("FFFFFFFFFFFFFFFF", HEX);
var r = base.add(2)
assert(r.toString(HEX) == "0000000000000001", HEX);
var r = r.add(-1)
assert(r.toString(HEX) == "0000000000000000", HEX);
var r = r.add(-1)
var base = new ByteString("FFFFFFFFFFFFFFFF", HEX);

</pre>
        <h2 id="clear">clear()</h2>
        <h3>Prototype</h3>
        <p class="signature">clear()</p>
        <h3>Description</h3>
                    
        <p>Overwrite buffer with zeros to clear sensitive informations.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b = new ByteString("A5", HEX);
b.clear();

assert(b.toString(HEX) == "00", HEX);

</pre>
        <h2 id="valueOf">valueOf()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString ByteString.valueOf(Number value)</p>
        <p class="signature">ByteString ByteString.valueOf(Number value, Number octets)</p>
        <h3>Description</h3>
                    
        <p>Returns a ByteString encoding the value in big endian format.</p>
                    
        <p>If the argument octets is not provided, the value is encoded on the minimum
               number of bytes.</p>
                    
        <p>If the argument octets is provided, the value is encoded on the given number of bytes,
               possibly truncating the value.</p>
                    
        <p>The number range is -(2^63) to 2^63 - 1.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>value</td>
                <td>The value to convert.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object encoding the integer value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var r = ByteString.valueOf(0);
assert(r.toString(HEX) == "00");

var r = ByteString.valueOf(0, 2);
assert(r.toString(HEX) == "0000");

var r = ByteString.valueOf(1);
assert(r.toString(HEX) == "01");

var r = ByteString.valueOf(1, 2);
assert(r.toString(HEX) == "0001");

var r = ByteString.valueOf(256);
assert(r.toString(HEX) == "0100");

var r = ByteString.valueOf(256, 1);
assert(r.toString(HEX) == "00");

var r = ByteString.valueOf(0x80000000);
assert(r.toString(HEX) == "80000000");

var r = ByteString.valueOf(-1);
assert(r.toString(HEX) == "FFFFFFFFFFFFFFFF");

var r = ByteString.valueOf(-1, 2);
assert(r.toString(HEX) == "FFFF");

</pre>
        <h2 id="fromJSON">fromJSON()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString ByteString.fromJSON(Object json)</p>
        <h3>Description</h3>
                    
        <p>Returns a ByteString created from the JSON encoded class format.</p>
                    
        <p>The JSON object must contain a property "clazz" with value "ByteString" and a
               property "value" with a hexadecimal encoded string.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>json</td>
                <td>The JavaScript object</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object encoding the value property</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call or JSON object does not contain the required properties</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b1 = new ByteString("1234", HEX);
var j = JSON.stringify(b1);
assert(j == '{"clazz":"ByteString","value":"1234"}');
var o = JSON.parse(j);
var b2 = ByteString.fromJSON(o);
assert(b2.equals(b1));

</pre>
        <h2 id="asSigned">asSigned()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString asSigned()</p>
        <h3>Description</h3>
        Return the signed binary value of the ByteString.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>ByteString as signed integer value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var unsigned = new ByteString("80", HEX);
var signed = unsigned.asSigned();
assert(unsigned.toString(HEX) == "80");
assert(signed.toString(HEX) == "0080");

var unsigned = new ByteString("7F", HEX);
var signed = unsigned.asSigned();
assert(unsigned.toString(HEX) == "7F")
assert(signed.toString(HEX) == "7F");

var b = new ByteString("00 01", HEX);
var signed = b.asSigned();
assert(b.toString(HEX) == "0001");
assert(signed.toString(HEX) == "0001");

</pre>
        <h2 id="asUnsigned">asUnsigned()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString asUnsigned()</p>
        <p class="signature">ByteString asUnsigned(Number length)</p>
        <h3>Description</h3>
        Return the unsigned binary value of the ByteString.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>length</td>
                <td>The minimum size of the ByteString.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>ByteString as unsigned integer value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b = new ByteString("00 01", HEX);
var unsigned = b.asUnsigned();
assert(unsigned.toString(HEX) == "01");

var b = new ByteString("00 00 01", HEX);
var unsigned = b.asUnsigned(2);
assert(unsigned.toString(HEX) == "0001");

var b = new ByteString("00 01", HEX);
var unsigned = b.asUnsigned(2);
assert(unsigned.toString(HEX) == "0001");

var b = new ByteString("01 01", HEX);
var unsigned = b.asUnsigned();
assert(unsigned.toString(HEX) == "0101");

var b = new ByteString("CA FE", HEX);
var unsigned = b.asUnsigned(4);
assert(unsigned.toString(HEX) == "0000CAFE");

var b = new ByteString("00", HEX);
var unsigned = b.asUnsigned();
assert(unsigned.toString(HEX) == "00");

</pre>
        <h2 id="biAdd">biAdd()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString biAdd(ByteString value)</p>
        <h3>Description</h3>
        Returns a ByteString which is the total of the objects value, interpreted as big signed integer value, plus the signed value.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>The signed big integer to add.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object that is the total of base plus value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b = new ByteString("00 FF", HEX);
var total = b.biAdd(new ByteString("00 FF 01", HEX));
assert(total.toString(HEX) == "010000");

var b = new ByteString("7F", HEX);
var total = b.biAdd(new ByteString("01", HEX));
assert(total.toString(HEX) == "0080");

var b = new ByteString("FF FF", HEX);
var total = b.biAdd(new ByteString("01", HEX));
assert(total.toString(HEX) == "00");

</pre>
        <h2 id="sub">sub()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sub(ByteString value)</p>
        <h3>Description</h3>
        Returns a ByteString which is the difference of the objects value, interpreted as big signed integer value, minus the signed value.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>The signed big integer to subtract.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object that is the difference of base minus value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b = new ByteString("00 80", HEX);
var difference = b.sub(new ByteString("01", HEX));
assert(difference.toString(HEX) == "7F");

var b = new ByteString("00", HEX);
var difference = b.sub(new ByteString("01", HEX));
assert(difference.toString(HEX) == "FF");

var b = new ByteString("7F", HEX);
var difference = b.sub(new ByteString("FF", HEX));
assert(difference.toString(HEX) == "0080");

</pre>
        <h2 id="mod">mod()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString mod(ByteString m)</p>
        <h3>Description</h3>
        Returns a non-negative ByteString which is the objects value, interpreted as big signed integer value, modulo the unsigned m.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>m</td>
                <td>The modulo as unsigned big integer.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New non-negative ByteString object that is base value mod m.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b = new ByteString("0B", HEX);
var value = b.mod(new ByteString("07", HEX));
assert(value.toString(HEX) == "04");

</pre>
        <h2 id="modInverse">modInverse()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString modInverse(ByteString m)</p>
        <h3>Description</h3>
        Returns ByteString which is the multiplicative inverse of the objects value, interpreted as big signed integer value, modulo the unsigned m.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>m</td>
                <td>The modulo as unsigned big integer.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object that is base^-1 mod m.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b = new ByteString("17", HEX);
var value = b.modInverse(new ByteString("78", HEX));
assert(value.toString(HEX) == "2F");

</pre>
        <h2 id="modPow">modPow()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString modPow(ByteString exponent, ByteString m)</p>
        <h3>Description</h3>
        Returns ByteString which is the objects value, interpreted as big signed integer value, raised to the power of exp modulo the unsigned m.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>exponent</td>
                <td>The exponent as signed big integer.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>m</td>
                <td>The modulo as unsigned big integer.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object that is base^exponent mod m.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b = new ByteString("03 DF", HEX);
var exp = new ByteString("03 E5", HEX);
var m = new ByteString("04 00", HEX);
var value = b.modPow(exp, m);
assert(value.toString(HEX) == "035F");

</pre>
        <h2 id="multiply">multiply()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString multiply(ByteString factor)</p>
        <h3>Description</h3>
        Returns ByteString which is the objects value, interpreted as big signed integer value, multiplied by the unsigned factor.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>factor</td>
                <td>The factor as signed big integer.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object that is base * factor.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b = new ByteString("10", HEX);
var factor = new ByteString("02", HEX);
var value = b.multiply(factor);
assert(value.toString(HEX) == "20");

</pre>
        <h2 id="divide">divide()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString divide(ByteString divisor)</p>
        <h3>Description</h3>
        Returns ByteString which is the objects value, interpreted as big signed integer value, divided by the unsigned divisor.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>divisor</td>
                <td>The divisor as signed big integer.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>New ByteString object that is base / divisor.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var b = new ByteString("20", HEX);
var divisor = new ByteString("02", HEX);
var value = b.divide(divisor);
assert(value.toString(HEX) == "10");

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>Card - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>Card - Reference Documentation</h1>
        <p>Class to allow access to ICC</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">Card() constructor</a>
            </li>
            <li>
                <a href="#reset">reset()</a>
            </li>
            <li>
                <a href="#getATR">getATR()</a>
            </li>
            <li>
                <a href="#sendApdu">sendApdu()</a>
            </li>
            <li>
                <a href="#plainApdu">plainApdu()</a>
            </li>
            <li>
                <a href="#getCardService">getCardService()</a>
            </li>
            <li>
                <a href="#setCredential">setCredential()</a>
            </li>
            <li>
                <a href="#clearCredential">clearCredential()</a>
            </li>
            <li>
                <a href="#sendSecMsgApdu">sendSecMsgApdu()</a>
            </li>
            <li>
                <a href="#close">close()</a>
            </li>
            <li>
                <a href="#setCardEventListener">setCardEventListener()</a>
            </li>
            <li>
                <a href="#remoteUpdate">remoteUpdate()</a>
            </li>
            <li>
                <a href="#getReaderList">getReaderList()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>T0</td>
                <td>T=0 protocol</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>T1</td>
                <td>T=1 protocol</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>T14</td>
                <td>T=14 protocol</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>OTHER</td>
                <td>Other protocol</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>PICCA</td>
                <td/>
            </tr>
            <tr>
                <td>Number</td>
                <td>PICCB</td>
                <td/>
            </tr>
            <tr>
                <td>Number</td>
                <td>RESET_COLD</td>
                <td>Perform cold reset</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RESET_WARM</td>
                <td>Perform warm reset if supported by reader, otherwise cold reset</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CPRO</td>
                <td>Usage qualifier for MAC protected command-APDU in sendSecMsgApdu()</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CENC</td>
                <td>Usage qualifier for encrypted command-APDU in sendSecMsgApdu()</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RPRO</td>
                <td>Usage qualifier for MAC protected response-APDU in sendSecMsgApdu()</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RENC</td>
                <td>Usage qualifier for encrypted response-APDU in sendSecMsgApdu()</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ALL</td>
                <td>All access modes or all usage qualifier in sendSecMsgApdu()</td>
            </tr>
        </table>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>ByteString</td>
                <td>response</td>
                <td>Last response APDU received from ICC</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SW</td>
                <td>Last status word SW1/SW2 received from ICC</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SW1</td>
                <td>Last status byte SW1 received from ICC</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SW2</td>
                <td>Last status byte SW2 received from ICC</td>
            </tr>
            <tr>
                <td>String</td>
                <td>SWMSG</td>
                <td>Message for SW1/SW2 (Extension to GP)</td>
            </tr>
            <tr>
                <td>opencard.core.terminal.CardTerminal</td>
                <td>nativeCardTerminal</td>
                <td>OCF Card Terminal</td>
            </tr>
            <tr>
                <td>String</td>
                <td>readerName</td>
                <td>Card terminal name</td>
            </tr>
            <tr>
                <td>String</td>
                <td>maxReaderCAPDU</td>
                <td>Command APDU limit by the card terminal (Optional)</td>
            </tr>
            <tr>
                <td>String</td>
                <td>maxReaderRAPDU</td>
                <td>Command APDU limit by the card terminal (Optional)</td>
            </tr>
            <tr>
                <td>String</td>
                <td>remoteMessage</td>
                <td>Message received from server during remote update</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>remoteMessageId</td>
                <td>Message id received from server during remote update</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">Card()</p>
        <p class="signature">Card(String reader)</p>
        <p class="signature">Card(String reader, String cardProfileName)</p>
        <h3>Description</h3>
                    
        <p>Create an object representing an ICC in a reader.</p>
                    
        <p>The name of the card terminal can be passed as argument reader. If the
               card reader supports multiple slots, then the slot number can be specified
               by appending a hash '#' and the slot number. Slot numbers start at 1, 0 means
               any slot and is the default value (e.g. "MCT#2" selects the card reader "MCT" and the
               card in slot 2).</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>reader</td>
                <td>Card terminal name</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>cardProfileName</td>
                <td>Name of file containing Global Platform card profile</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_CONNECT_FAILED</td>
                <td>Establishing a connection to the card fails as the card is not present or mute</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>A communication error with the ICC occured</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

card = new Card();
assert(card instanceof Card);

card = new Card("");
assert(card instanceof Card);

card = new Card(_scsh3.reader);
assert(card instanceof Card);

card = new Card("", "profiles/cp_jcop41.xml");
assert(card instanceof Card);

dumpxml(card.profile, "");

</pre>
        <h2 id="reset">reset()</h2>
        <h3>Prototype</h3>
        <p class="signature">Atr reset(Number resetMode)</p>
        <h3>Description</h3>
        			Perform a cold or warm reset with the ICC.
        
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>resetMode</td>
                <td>Reset mode, either Card.RESET_COLD or Card.RESET_WARM.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Atr</code>
                </td>
                <td>ATR returned by ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Argument must be of type Number and either Card.RESET_COLD or Card.RESET_WARM</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>A communication error with the ICC occured</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

card = new Card();
atr = card.reset(Card.RESET_COLD);
print("Format Byte     : " + atr.formatByte.toString(16));
print("Interface Bytes : " + atr.interfaceBytes);
print("Historical Bytes: " + atr.historicalBytes);
print("Check Bytes     : " + atr.tckByte.toString(16));
print(atr);

</pre>
        <h2 id="getATR">getATR()</h2>
        <h3>Prototype</h3>
        <p class="signature">Atr getATR()</p>
        <h3>Description</h3>
        			Return ATR of last reset
        
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Atr</code>
                </td>
                <td>ATR returned by ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

card = new Card();
card.reset(Card.RESET_COLD);
atr = card.getATR();
print("Format Byte     : " + atr.formatByte.toString(16));
print("Interface Bytes : " + atr.interfaceBytes);
print("Historical Bytes: " + atr.historicalBytes);
print("Check Bytes     : " + atr.tckByte.toString(16));
print(atr);

</pre>
        <h2 id="sendApdu">sendApdu()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number le)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number le, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number le)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number le, Number[] sw)</p>
        <h3>Description</h3>
        <p>Transmit a Command-APDU to the ICC and receive the Response-APDU.</p>
                             
        <p>The method updates the fields SW, SW1, SW2 and response with the values received from the ICC.</p>
                             
        <p>An array of valid return codes can be passed as argument sw. If the SW1/SW2 from the ICC does
                        not match with one of the entries in the array, then an GPError.CARD_COMM_ERROR exception is raised.</p>
                             
        <p>The method supports ISO7816-4 extended format. This is automatically used, if the length of the data
                        argument exceeds 255 or if the argument le exceeds 256.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>cla</td>
                <td>The CLA byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ins</td>
                <td>The INS byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p1</td>
                <td>The P1 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p2</td>
                <td>The P2 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>The data bytes to be send in the Command-APDU for case 3 or case 4 commands</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>le</td>
                <td>The number of bytes expected in the response. 65536 is encoded as '0000' in extended format.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 return codes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Response APDU received from ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call or SW array contain a type other than Number</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>A communication error with the ICC occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The status word return by the ICC does not match one of the expected result</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data for the command APDU exceeds 65536</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The value given for Le is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Case 1: 0022F3A4 - MANAGE SE

resp = card.sendApdu(0x00, 0x22, 0xF3, 0xA4);
print(card.SW.toString(16) + " - " + resp);

// Must return ByteString, null or undefined ?
assert(card.SW == 0x9000);
assert(card.SW1 == 0x90);
assert(card.SW2 == 0x00);

resp = card.sendApdu(0x00, 0x22, 0xF3, 0xA4, [0x9000]);
// Must return ByteString, null or undefined ?


// Case 2: 00B201F400 - READ RECORD from EF_DIR

resp = card.sendApdu(0x00, 0xB2, 0x01, 0xF4, 0);
print(card.SW.toString(16) + " - " + resp);

assert(resp.length &gt; 0);
assert(card.SW == 0x9000);
assert(card.response.equals(resp));

resp = card.sendApdu(0x00, 0xB2, 0x01, 0xF4, 0, [0x9000]);
assert(resp.length &gt; 0);


// Case 3: 002A90A008 - HASH

resp = card.sendApdu(0x00, 0x2A, 0x90, 0xA0, new ByteString("9000800431323334", HEX));
print(card.SW.toString(16) + " - " + resp);

assert(card.SW == 0x9000);

resp = card.sendApdu(0x00, 0x2A, 0x90, 0xA0,
                            new ByteString("9000800431323334", HEX),[0x9000]);


// Case 4: 00A40204022F0000 - SELECT EF_DIR

resp = card.sendApdu(0x00, 0xA4, 0x02, 0x04, new ByteString("2F00", HEX), 0);
print(card.SW.toString(16) + " - " + resp);

assert(card.SW == 0x9000);
assert(resp.length &gt; 0);

resp = card.sendApdu(0x00, 0xA4, 0x02, 0x04, new ByteString("2F00", HEX), 0, [0x9000]);
assert(resp.length &gt; 0);

</pre>
        <h2 id="plainApdu">plainApdu()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sendApdu (ByteString apdu)</p>
        <p class="signature">ByteString sendApdu (ByteString apdu, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (ByteString apdu, Number[] sw, Number usageQualifier)</p>
        <h3>Description</h3>
        <p>Transmit a Command-APDU to the ICC and receive the Response-APDU.</p>
                             
        <p>The method updates the fields SW, SW1, SW2 and response with the values received from the ICC.</p>
                             
        <p>An array of valid return codes can be passed as argument sw. If the SW1/SW2 from the ICC does
                        not match with one of the entries in the array, then an GPError.CARD_COMM_ERROR exception is raised.</p>
                             
        <p>This method is an extension to the Global Platform Scripting specification.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>apdu</td>
                <td>Command-APDU in plain format consisting of CLA|INS|P1|P2|Lc|Data|Le</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 return codes</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>usageQualifier</td>
                <td>Usage qualifier to be passed to secure messaging transformation</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Response APDU received from ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call or SW array contain a type other than Number</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>A communication error with the ICC occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_SW</td>
                <td>The status word return by the ICC does not match one of the expected result</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Case 1: 0022F3A4 - MANAGE SE

resp = card.plainApdu(new ByteString("0022F3A4", HEX));
print(card.SW.toString(16) + " - " + resp);

// Must return ByteString, null or undefined ?
assert(card.SW == 0x9000);
assert(card.SW1 == 0x90);
assert(card.SW2 == 0x00);

resp = card.plainApdu(new ByteString("0022F3A4", HEX), [0x9000]);
// Must return ByteString, null or undefined ?


// Case 2: 00B201F400 - READ RECORD from EF_DIR

resp = card.plainApdu(new ByteString("00B201F400", HEX));
print(card.SW.toString(16) + " - " + resp);

assert(resp.length &gt; 0);
assert(card.SW == 0x9000);
assert(card.response.equals(resp));

resp = card.plainApdu(new ByteString("00B201F400", HEX), [0x9000]);
assert(resp.length &gt; 0);


// Case 3: 002A90A008 - HASH

resp = card.plainApdu(new ByteString("002A90A0089000800431323334", HEX));
print(card.SW.toString(16) + " - " + resp);

assert(card.SW == 0x9000);

resp = card.plainApdu(new ByteString("002A90A0089000800431323334", HEX), [0x9000]);


// Case 4: 00A40204022F0000 - SELECT EF_DIR

resp = card.plainApdu(new ByteString("00A40204022F0000", HEX));
print(card.SW.toString(16) + " - " + resp);

assert(card.SW == 0x9000);
assert(resp.length &gt; 0);

resp = card.plainApdu(new ByteString("00A40204022F0000", HEX), [0x9000]);
assert(resp.length &gt; 0);

</pre>
        <h2 id="getCardService">getCardService()</h2>
        <h3>Prototype</h3>
        <p class="signature">Object getCardService(String className)</p>
        <h3>Description</h3>
        <p>Obtain OCF card service for API given in className</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>className</td>
                <td>OCF Card Service class or interface name</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>The native Java class providing the service</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>Card service not found</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// var cs = card.getCardService("de.cardcontact.opencard.service.smartcardhsm.SmartCardHSMCardService");

</pre>
        <h2 id="setCredential">setCredential()</h2>
        <h3>Prototype</h3>
        <p class="signature">setCredential(Object credential)</p>
        <h3>Description</h3>
                    
        <p>Provide an object that contains the credential required to transform the APDU when
               using sendSecMsgApdu().</p>
                    
        <p>Currently only a secure channel credential can be supplied. A secure channel credential
               is a JavaScript object that supplies a wrap() and optionally an unwrap() method. The
               wrap() method is called to transform the command-APDU, the unwrap() method is called to
               transform the response-APDU.</p>
        	
        <p>The usage qualifier in the sendSecMsgApdu() determins, which part of the command and response APDU are to be
               protected and how. Any of the following four options can be combined: MAC protected command APDU (CPRO), encrypted
               command APDU (CENC), MAC protected response APDU (RPRO) and encrypted response APDU (RENC).</p>
                    
        <p>The usage qualifier controls the transformation of command and reponse APDU. It is passed
               to the wrap() and unwrap() method as the second parameter.</p>
                    
        <p>The usage qualifier can be defined by or'ing the constants Card.CPRO, Card.CENC, Card.RPRO or
               Card.RENC. Use Card.ALL as a combination of the above.</p>
                    
        <p>Subsequent calls to this method will overwrite the previous credential.</p>
                    
        <p>This method is an extension to the Global Platform Scripting specification.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>credential</td>
                <td>Object to be used as credential.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td>Method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


//
// Define SecureChannelCredential class constructor
//
function SecureChannelCredential() {
}

//
// Wrap command-APDU with secure messaging
//
SecureChannelCredential.prototype.wrap = function(apduToWrap, usageQualifier) {
	print("APDU to wrap with usageQualifier " + usageQualifier + " :");
	print(apduToWrap);

	// Put secure messaging transformation here

	return(apduToWrap);
}


//
// Unwrap response-APDU with secure messaging
//
SecureChannelCredential.prototype.unwrap = function(apduToUnwrap, usageQualifier) {
	print("APDU to unwrap with usageQualifier " + usageQualifier + " :");
	print(apduToUnwrap);

	// Put secure messaging transformation here

	return(apduToUnwrap);
}

card.reset(Card.RESET_COLD);

// Allocate a secure channel credential
var sc = new SecureChannelCredential();

card.setCredential(sc);

// Allocate a cardfile object

var response = card.sendSecMsgApdu(Card.ALL, 0x00, 0xA4, 0x02, 0x04,
                            new ByteString("2F00", HEX), 0, [0x9000]);
print(response);


</pre>
        <h2 id="clearCredential">clearCredential()</h2>
        <h3>Prototype</h3>
        <p class="signature">clearCredential()</p>
        <h3>Description</h3>
                    
        <p>Clear credential for card service</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td>Method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

</pre>
        <h2 id="sendSecMsgApdu">sendSecMsgApdu()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, Number[] sw)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, ByteString data)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, ByteString data, Number[] sw)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, Number le)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, Number le, Number[] sw)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, ByteString data, Number le)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, ByteString data, Number le, Number[] sw)</p>
        <h3>Description</h3>
        <p>Transmit a Command-APDU to the ICC and receive the Response-APDU.</p>
                             
        <p>If a secure channel is set with the setCredential() method, then this credential
                        will be used to tranform the command and response APDU accordingly. During this
                        transformation process, the usageQualifier is passed to the wrapping / unwrapping
                        methods.</p>
                             
        <p>The method updates the fields SW, SW1, SW2 and response with the values received from the ICC.</p>
                             
        <p>An array of valid return codes can be passed as argument sw. If the SW1/SW2 from the ICC does
                        not match with one of the entries in the array, then an GPError.CARD_COMM_ERROR exception is raised.</p>
                             
        <p>The method supports ISO7816-4 extended format. This is automatically used, if the length of the data
                        argument exceeds 255 or if the argument le exceeds 255.</p>
                             
        <p>This method is an extension to the Global Platform Scripting specification.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>usageQualifier</td>
                <td>Usage qualifier for secure messaging transformation. Can be a combination of
                Card.CPRO, Card.CENC, Card.RPRO, Card.RENC and Card.ALL.</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>cla</td>
                <td>The CLA byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ins</td>
                <td>The INS byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p1</td>
                <td>The P1 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p2</td>
                <td>The P2 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>The data bytes to be send in the Command-APDU for case 3 or case 4 commands</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>le</td>
                <td>The number of bytes expected in the response. 255 is encoded as '00' in short format.
                                          65536 is encoded as '0000' in extended format.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 return codes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Response APDU received from ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call or SW array contain a type other than Number</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>A communication error with the ICC occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The status word return by the ICC does not match one of the expected result</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data for the command APDU exceeds 65536</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The value given for Le is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See sendApdu() and setCredential() for an example

</pre>
        <h2 id="close">close()</h2>
        <h3>Prototype</h3>
        <p class="signature">close()</p>
        <h3>Description</h3>
        	
        <p>Release card object, closing communication channel with the card</p>
        	
        <p>If close() is not explicitly called for a card object, then the smart card
	   communication channel will be closed during garbage collection at latest</p>
        	
        <p>The method is usefull to ensure, that other applications can get access
	   to the card.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

card.close();

</pre>
        <h2 id="setCardEventListener">setCardEventListener()</h2>
        <h3>Prototype</h3>
        <p class="signature">setCardEventListener(Object handler)</p>
        <h3>Description</h3>
                    
        <p>Static method to register a script object that receives cardInserted and cardRemoved events.</p>
                    
        <p>The cardInserted and cardRemoved methods provide the reader name as argument.</p>
                    
        <p>The handler must implement both methods.</p>
                    
        <p>The cardNotification method is optional and called when the properties remoteMessage and
               remoteMessageId are updated during remote update processing.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>handler</td>
                <td>The event handler</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var handler = {
	cardInserted: function(readerName) {
		print("Card inserted into " + readerName);
	},
	cardRemoved: function(readerName) {
		print("Card removed from " + readerName);
	}
	cardNotification: function(readerName) {
		print("Notification for " + readerName);
	}
}
Card.setCardEventListener(handler);

</pre>
        <h2 id="remoteUpdate">remoteUpdate()</h2>
        <h3>Prototype</h3>
        <p class="signature">remoteUpdate(String url)</p>
        <p class="signature">remoteUpdate(String url, String sessionId)</p>
        <h3>Description</h3>
                    
        <p>Update the card using the remote update service located at the given URL.</p>
                    
        <p>The sessionId can be used to link the card update to a current user session with the server.</p>
                    
        <p>Remote notifications are made available in the remoteMessageId and remoteMessage property of the
               card object.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>url</td>
                <td>The URL of the remote terminal endpoint on the server</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>sessionId</td>
                <td>The sessionId used in the session cookie</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


</pre>
        <h2 id="getReaderList">getReaderList()</h2>
        <h3>Prototype</h3>
        <p class="signature">Card.getReaderList()</p>
        <h3>Description</h3>
                    
        <p>Return the list of attached card readers</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>The list of reader names</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var list = Card.getReaderList();

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>CardFile - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>CardFile - Reference Documentation</h1>
        <p>
            <p>Class implementing support for ISO7816-4 elementary and dedicated files on an ICC</p>
                             
            <p>Objects created using this class represent a file on the ICC. Each file has an
                    associated absolute path, that uniquely identifies the file in the hierarchical
                    file system of the ICC. The path is constructed from file identifiers and/or file
                    names. File identifier are 16 bit hexadecimal value prefixed by a ':'. File names
                    are hexadecimal strings prefixed with '#'. They usually contain the Application
                    Identifier (AID) assigned to an application dedicated file or an applet.</p>
                             
            <p>The class provided for two variant of the constructor. The first variant requires
                    a card object to bind the file to a specific card activated in a reader. This is
                    quite typically the MF (":3F00"), an application DF or an applet. Subsequent
                    instantiations of CardFile objects shall use the second variant of the CardFile
                    constructor, which takes a parent
                    object as first argument. This second variant accepts relative paths, which are
                    then evalutated relative to the parent CardFile object.</p>
            	     
            <p>When an application is selected using an AID, then the CardFile object may
                    have the MF as parent. This will however not construct an invalid path
                    ":3F00#A00000270101", but allocate a new CardFile objects that inherits
                    the credentials from the MF. This construct is suitable, if credentials from the
                    MF level are valid in subordinate DF as well.</p>
            	     
            <p>Short file identifier are supported as 1 byte file identifier. Specify a 
                    8 bit hexadecimal value rather than the 16 bit hexadecimal file id.
                    ":3F00:12" for example refers to a file in the MF with short file identifier 18.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">CardFile() constructor</a>
            </li>
            <li>
                <a href="#getFCPBytes">getFCPBytes()</a>
            </li>
            <li>
                <a href="#getFileID">getFileID()</a>
            </li>
            <li>
                <a href="#isDirectory">isDirectory()</a>
            </li>
            <li>
                <a href="#isTransparent">isTransparent()</a>
            </li>
            <li>
                <a href="#isCyclic">isCyclic()</a>
            </li>
            <li>
                <a href="#getLength">getLength()</a>
            </li>
            <li>
                <a href="#getRecordSize">getRecordSize()</a>
            </li>
            <li>
                <a href="#exists">exists()</a>
            </li>
            <li>
                <a href="#readBinary">readBinary()</a>
            </li>
            <li>
                <a href="#readRecord">readRecord()</a>
            </li>
            <li>
                <a href="#updateBinary">updateBinary()</a>
            </li>
            <li>
                <a href="#updateRecord">updateRecord()</a>
            </li>
            <li>
                <a href="#appendRecord">appendRecord()</a>
            </li>
            <li>
                <a href="#performCHV">performCHV()</a>
            </li>
            <li>
                <a href="#setCredential">setCredential()</a>
            </li>
            <li>
                <a href="#createFile">createFile()</a>
            </li>
            <li>
                <a href="#deleteFile">deleteFile()</a>
            </li>
            <li>
                <a href="#activateFile">activateFile()</a>
            </li>
            <li>
                <a href="#deactivateFile">deactivateFile()</a>
            </li>
            <li>
                <a href="#sendApdu">sendApdu()</a>
            </li>
            <li>
                <a href="#sendSecMsgApdu">sendSecMsgApdu()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>READ</td>
                <td>READ access mode in setCredential().</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>UPDATE</td>
                <td>UPDATE access mode in setCredential().</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>APPEND</td>
                <td>APPEND access mode in setCredential().</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SELECT</td>
                <td>SELECT access mode in setCredential().</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CREATE</td>
                <td>CREATE access mode in setCredential().</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DELETE</td>
                <td>DELETE access mode in setCredential().</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ACTIVATE</td>
                <td>ACTIVATE access mode in setCredential().</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DEACTIVATE</td>
                <td>DEACTIVATE access mode in setCredential().</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ALL</td>
                <td>All access modes or all usage qualifier in setCredential()</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">CardFile(Card card, String path)</p>
        <p class="signature">CardFile(CardFile parent, String path)</p>
        <h3>Description</h3>
        Obtain access to an existing file on an ICC.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Card</code>
                </td>
                <td>card</td>
                <td>Card object to operate on</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>path</td>
                <td>Path to object</td>
            </tr>
            <tr>
                <td>
                    <code>CardFile</code>
                </td>
                <td>parent</td>
                <td>Parent CardFile object used to share session</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.OBJECT_NOT_FOUND</td>
                <td>File not found</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

card = new Card(_scsh3.reader);

root = new CardFile(card, ":3F00");
print(root);
print(root.getFCPBytes());

// Select EF_DIR with file identifier 2F00
efdir = new CardFile(root, ":2F00");
print(efdir);
print(efdir.getFCPBytes());

// Select EF_DIR with short file identifier 1E (dec. 30)
efdir = new CardFile(root, ":1E");
print(efdir);
print(efdir.getFCPBytes());

df = new CardFile(card, "#D040000017010101");
print(df);
print(df.getFCPBytes());

efsvpd = new CardFile(df, ":EF01");
print(efsvpd);
print(efsvpd.getFCPBytes());

df = new CardFile(card, ":3F00:3F01");
print(df);
print(df.getFCPBytes());

efsvpd = new CardFile(df, ":EF01");
print(efsvpd);
print(efsvpd.getFCPBytes());

</pre>
        <h2 id="getFCPBytes">getFCPBytes()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getFCPBytes()</p>
        <h3>Description</h3>
                    
        <p>Get the bytes returned as File Control Parameter (FCP) in response to the select file command APDU.</p>
                    
        <p>This method can be used to ensure, that the object on the ICC is selected.</p>
                    
        <p>This method is not available for files refered to by a short file identifier. It will return
               the FCP of the directory instead.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Header returned by the ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

efsvpd = new CardFile(card, "#D040000017010101:EF01");

fcp = efsvpd.getFCPBytes();
print(fcp.toString(HEX));
assert(fcp);

</pre>
        <h2 id="getFileID">getFileID()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getFileID()</p>
        <h3>Description</h3>
                    
        <p>Return the file identifier as indicated in the file control parameter (FCP)</p>
                    
        <p>This method is not available for files refered to by a short file identifier</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>File identifier</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

ef = new CardFile(card, ":3F00:2F00");

fid = ef.getFileID();
assert(typeof(fid) == "number");
assert(fid == 0x2F00);

</pre>
        <h2 id="isDirectory">isDirectory()</h2>
        <h3>Prototype</h3>
        <p class="signature">Boolean isDirectory()</p>
        <h3>Description</h3>
                    
        <p>Use file control parameter to determine if the file is a dedicated file</p>
                    
        <p>This method is not available for files refered to by a short file identifier</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>True, if file is dedicated file</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

df = new CardFile(card, ":3F00");
assert(df.isDirectory());
ef = new CardFile(df, ":2F00");
assert(!ef.isDirectory());

</pre>
        <h2 id="isTransparent">isTransparent()</h2>
        <h3>Prototype</h3>
        <p class="signature">Boolean isTransparent()</p>
        <h3>Description</h3>
                    
        <p>Use file control parameter to determine if the file is a transparent elementary file</p>
                    
        <p>This method is not available for files refered to by a short file identifier</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>True, if file is a transparent elementary file</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

ef = new CardFile(card, "#D040000017010101:EF01");
assert(ef.isTransparent());

ef = new CardFile(card, ":3F00:2F00");
assert(!ef.isTransparent());

</pre>
        <h2 id="isCyclic">isCyclic()</h2>
        <h3>Prototype</h3>
        <p class="signature">Boolean isCyclic()</p>
        <h3>Description</h3>
                    
        <p>Use file control parameter to determine if the file is a cyclic elementary file</p>
                    
        <p>This method is not available for files refered to by a short file identifier</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>True, if file is a cyclic linear elementary file</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

ef = new CardFile(card, ":3F00:2F00");
assert(!ef.isCyclic());

</pre>
        <h2 id="getLength">getLength()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getLength()</p>
        <h3>Description</h3>
                    
        <p>Use file control parameter to determine length of the file</p>
                    
        <p>This method is not available for files refered to by a short file identifier</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Length in byte</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

ef = new CardFile(card, "#D040000017010101:EF01");
len = ef.getLength();
assert(typeof(len) == "number");
assert((len == 550) || (len == 12));

ef = new CardFile(card, ":3F00:2F00");
len = ef.getLength();
assert((len == 200) || (len == 800));

</pre>
        <h2 id="getRecordSize">getRecordSize()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getRecordSize()</p>
        <h3>Description</h3>
                    
        <p>Use file control parameter to determine maximum size of a record</p>
                    
        <p>This method is not available for files refered to by a short file identifier</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Maximum size of record</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

ef = new CardFile(card, ":3F00:2F00");
assert(typeof(ef.getRecordSize()) == "number");
assert(ef.getRecordSize() &gt; 0);

</pre>
        <h2 id="exists">exists()</h2>
        <h3>Prototype</h3>
        <p class="signature">Boolean exists(String file)</p>
        <h3>Description</h3>
                    
        <p>Check if file exists in dedicated file</p>
                    
        <p>This method is not available for files refered to by a short file identifier</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>True, if the file exists</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new CardFile(card, ":3F00");
assert(root.exists(":2F00"));
assert(!root.exists(":2F77"));

</pre>
        <h2 id="readBinary">readBinary()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString readBinary()</p>
        <p class="signature">ByteString readBinary(Number offset)</p>
        <p class="signature">ByteString readBinary(Number offset, Number length)</p>
        <h3>Description</h3>
        Read content of transparent EF
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>Zero based offset at which data should be read. Default is 0</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>length</td>
                <td>Number of bytes to be read. Default is all</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Data read from EF</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_USAGE</td>
                <td>The card service layer reported an error</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>The card terminal layer reported an error</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Using a file identifier
efsvpd = new CardFile(card, "#D040000017010101:EF01");

svpd = efsvpd.readBinary();

print(svpd);

// Using a short file identifier
efsvpd = new CardFile(card, "#D040000017010101:01");

svpd = efsvpd.readBinary();

print(svpd);

</pre>
        <h2 id="readRecord">readRecord()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString readRecord(Number record)</p>
        <h3>Description</h3>
        Read record from linear file
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>record</td>
                <td>Record number</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Record read from linear EF</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_USAGE</td>
                <td>The card service layer reported an error</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>The card terminal layer reported an error</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Using a file identifier
efdir = new CardFile(card, ":3F00:2F00");

dir = efdir.readRecord(1);

print(dir);

// Using a short file identifier
efdir = new CardFile(card, ":3F00:1E");

dir = efdir.readRecord(1);

print(dir);

</pre>
        <h2 id="updateBinary">updateBinary()</h2>
        <h3>Prototype</h3>
        <p class="signature">updateBinary(Number offset, ByteString data)</p>
        <h3>Description</h3>
                    
        <p>Write data to transparent file at offset.</p>
                    
        <p>A method writeBinary() is provided for backward compatibility with scripts written before
               version 3.4. Please refrain from use.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>offset</td>
                <td>Zero based offset in transparent elementary file</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>Date to be written</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td>Method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_USAGE</td>
                <td>The card service layer reported an error</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>The card terminal layer reported an error</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Using a file identifier
efsvpb = new CardFile(card, "#D040000017010101:EF03");

efsvpb.updateBinary(0, new ByteString("Hello World", ASCII));

efsvpb = new CardFile(card, "#D040000017010101:03");

efsvpb.updateBinary(0, new ByteString("Hello World", ASCII));

</pre>
        <h2 id="updateRecord">updateRecord()</h2>
        <h3>Prototype</h3>
        <p class="signature">updateRecord(Number record, ByteString data)</p>
        <h3>Description</h3>
                    
        <p>Write record to linear file.</p>
                    
        <p>A method writeRecord() is provided for backward compatibility with scripts written before
               version 3.4. Please refrain from use.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>record</td>
                <td>Record number starting at 1</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>Date to be written</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td>Method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_USAGE</td>
                <td>The card service layer reported an error</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>The card terminal layer reported an error</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Using a file identifier
efdir = new CardFile(card, ":3F00:2F00");
efdir.updateRecord(2, 
  new ByteString("611C4F08D040000017001001500A53565369676E61747572530454312E30", HEX));

</pre>
        <h2 id="appendRecord">appendRecord()</h2>
        <h3>Prototype</h3>
        <p class="signature">appendRecord(ByteString data)</p>
        <h3>Description</h3>
        Append a record with data to linear file.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>Date to be written to appended record</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td>Method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_USAGE</td>
                <td>The card service layer reported an error</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>The card terminal layer reported an error</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Using a file identifier
efdir = new CardFile(card, ":3F00:2F00");
efdir.appendRecord(
  new ByteString("611C4F08D040000017001001500A53565369676E61747572530454312E30", HEX));

</pre>
        <h2 id="performCHV">performCHV()</h2>
        <h3>Prototype</h3>
        <p class="signature">performCHV(Boolean global, Number reference)</p>
        <p class="signature">performCHV(Boolean global, Number reference, ByteString value)</p>
        <h3>Description</h3>
        Perform cardholder verification.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>global</td>
                <td>True, if global reference data is to be used. False, if reference data
                                               resides in the directory of the CardFile object.</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>reference</td>
                <td>Reference to data to be used for CHV.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>Cardholder verification value (e.g. PIN or PASSWORD)</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>True, if cardholder verification is successful.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>An card terminal error occured or the CHV was aborted</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Allocate a cardfile object
var root = new CardFile(card, ":3F00");

// Perform cardholder verification (e.g. PIN entry) for global reference data 1
root.performCHV(true, 1);

// Perform cardholder verification procedure using given data for global reference data 1
root.performCHV(true, 1, new ByteString("241122FFFFFFFFFF", HEX));

// Perform cardholder verification (e.g. PIN entry) for local reference data 1 (Signature-PIN)
var dfssig = new CardFile(card, "#D040000017001201");
dfssig.performCHV(false, 1);

</pre>
        <h2 id="setCredential">setCredential()</h2>
        <h3>Prototype</h3>
        <p class="signature">setCredential(Number accessMode, Number usageQualifier, Object credential)</p>
        <h3>Description</h3>
                    
        <p>Provide an object that contains the credential required to access the file in the
               specified mode.</p>
                    
        <p>Currently only a secure channel credential can be supplied. A secure channel credential
               is a JavaScript object that supplies a wrap() and optionally an unwrap() method. The
               wrap() method is called to transform the command-APDU, the unwrap() method is called to
               transform the response-APDU. The transformation is applied, if the file access operation
               (e.g. readBinary()) matches the access mode.</p>
                    
        <p>The access mode can be defined by or'ing the constants CardFile.READ, CardFile.UPDATE or
               CardFile.APPEND. Use CardFile.ALL as a combination of the above.</p>
        	
        <p>The usage qualifier determins, which part of the command and response APDU are to be
               protected and how. Any of the following four options can be combined: MAC protected command APDU (CPRO), encrypted 
               command APDU (CENC), MAC protected response APDU (RPRO) and encrypted response APDU (RENC).</p>
                    
        <p>The usage qualifier controls the transformation of command and reponse APDU. It is passed
               to the wrap() and unwrap() method as the second parameter.</p>
                    
        <p>The usage qualifier can be defined by or'ing the constants Card.CPRO, Card.CENC, Card.RPRO or
               Card.RENC. Use Card.ALL as a combination of the above.</p>
                    
        <p>Usage qualifier are stored per access mode. Use multiple calls to setCredential(), if different
               access modes require different usage qualifier.</p>
                    
        <p>Subsequent calls to this method will overwrite the previous credential for an access mode.</p>
                    
        <p>If the CardFile object was created as the child of a parent DF (the second constructor
               option), then all credentials are stored with the top-most parent CardFile in the
               hierarchy. Credentials are stored based on the file's path on the card, so subsequent
               CardFile objects with the same file identifier will inherit a once defined credential.
               If this is not desired, then the CardFile object must be created without a parent
               dependency.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>accessMode</td>
                <td>Bitwise or'ing of CardFile.READ, CardFile.UPDATE or CardFile.APPEND to
               specify the access mode for which this credential is applicable.</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>usageQualifier</td>
                <td>Bitwise or'ing of Card.CPRO, Card.CENC,
               Card.RPRO or Card.RENC. Card.ALL is a combination of all.</td>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>credential</td>
                <td>Object to be used as credential.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td>Method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


//
// Define SecureChannelCredential class constructor
//
function SecureChannelCredential() {
}

//
// Wrap command-APDU with secure messaging
//
SecureChannelCredential.prototype.wrap = function(apduToWrap, usageQualifier) {
	print("APDU to wrap with usageQualifier " + usageQualifier + " :");
	print(apduToWrap);
	
	// Put secure messaging transformation here
	
	return(apduToWrap);
}


//
// Unwrap response-APDU with secure messaging
//
SecureChannelCredential.prototype.unwrap = function(apduToUnwrap, usageQualifier) {
	print("APDU to unwrap with usageQualifier " + usageQualifier + " :");
	print(apduToUnwrap);
	
	// Put secure messaging transformation here
	
	return(apduToUnwrap);
}


// Allocate a secure channel credential
var sc = new SecureChannelCredential();

// Allocate a cardfile object
var efsvpd = new CardFile(card, "#D040000017010101:EF01");
efsvpd.setCredential(CardFile.READ, Card.ALL, sc);
svpd = efsvpd.readBinary();


</pre>
        <h2 id="createFile">createFile()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void createFile(ByteString fcp)</p>
        <p class="signature">Void createFile(ByteString fcp, Number fileDescriptorByte)</p>
        <h3>Description</h3>
                    
        <p>Create a new file object on the card subordinate to the dedicated file for
               which this method is called.</p>
        	
        <p>The data passed in the method invocation must match the data supplied to the
               card operating system in the CREATE FILE APDU.</p>
                    
        <p>The optional parameter fileDescriptorByte can be used to set P1 of the
               command APDU to a specific value as defined in ISO 7816-9.</p>
        	
        <p>The command APDU will be send using secure messaging, if a credential
               is set for the object that has the access mode CardFile.CREATE defined.</p>
            
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>fcp</td>
                <td>File control parameter defining the properties of the new card object. Format and encoding depends on the card operation system.</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>fileDescriptorByte</td>
                <td>File descriptor byte passed as P1 in the command APDU. 0 if missing.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_USAGE</td>
                <td>A card service error occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>A card terminal error occured</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Create an EF_DIR on a Starcos 3.1 card
var fcp = new ByteString("621A8205044100500F83022F00850203208801F08A0105A1038B0102", HEX);

var mf = new CardFile(card, ":3F00");
mf.createFile(fcp);

</pre>
        <h2 id="deleteFile">deleteFile()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void deleteFile()</p>
        <p class="signature">Void deleteFile(String fileIdentifier)</p>
        <p class="signature">Void deleteFile(String fileIdentifier, boolean isDF)</p>
        <h3>Description</h3>
                    
        <p>Delete a file object from the card.</p>
                    
        <p>If this method is called without parameters, then the card object represented
               by the CardFile object is deleted (DELETE SELF).</p>
        	
        <p>If this method is called with a fileIdentifier argument, then a file objects
               within the dedicated file represented by the CardFile object is deleted.</p>
        	
        <p>By default, the method assumes that the subordinate file is a EF. This can
               be overwritten by setting the isDF argument to true.</p>
        	
        <p>The command APDU will be send using secure messaging, if a credential
               is set for the object that has the access mode CardFile.DELETE defined.</p>
            
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>fileIdentifier</td>
                <td>File identifier (FID or AID).</td>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>isDF</td>
                <td>Indicator, that the file to be deleted is a DF. Default is false.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The fileIdentifier argument must be a single id, not a path.</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_USAGE</td>
                <td>A card service error occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>An card terminal error occured or the CHV was aborted</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Delete EF_DIR in MF
var mf = new CardFile(card, ":3F00");
mf.deleteFile(":2F00");

// Delete DF using DELETE SELF method
var df = new CardFile(card, "#A0000000041234");
df.deleteFile();

// Delete DF from MF
mf.deleteFile(":DF01", true);

</pre>
        <h2 id="activateFile">activateFile()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void activateFile()</p>
        <h3>Description</h3>
                    
        <p>Activate the file object on the card represented by this CardFile object
               using the ACTIVATE FILE command APDU defined by ISO 7816-9.</p>
        	
        <p>The command APDU will be send using secure messaging, if a credential
               is set for the object that has the access mode CardFile.ACTIVATE defined.</p>
            
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_USAGE</td>
                <td>A card service error occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>An card terminal error occured or the CHV was aborted</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Activate DF
var df = new CardFile(card, "#A0000000041234");
df.activate();

</pre>
        <h2 id="deactivateFile">deactivateFile()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void deactivateFile()</p>
        <h3>Description</h3>
                    
        <p>De-activate the file object on the card represented by this CardFile object
               using the DEACTIVATE FILE command APDU defined by ISO 7816-9.</p>
        	
        <p>The command APDU will be send using secure messaging, if a credential
               is set for the object that has the access mode CardFile.DEACTIVATE defined.</p>
            
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>An error occured while talking to the ICC</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_USAGE</td>
                <td>A card service error occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>An card terminal error occured or the CHV was aborted</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// De-activate DF
var df = new CardFile(card, "#A0000000041234");
df.deactivate();

</pre>
        <h2 id="sendApdu">sendApdu()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sendApdu(Number cla, Number ins, Number p1, Number p2)</p>
        <p class="signature">ByteString sendApdu(Number cla, Number ins, Number p1, Number p2, Number[] sw)</p>
        <p class="signature">ByteString sendApdu(Number cla, Number ins, Number p1, Number p2, ByteString data)</p>
        <p class="signature">ByteString sendApdu(Number cla, Number ins, Number p1, Number p2, ByteString data, Number[] sw)</p>
        <p class="signature">ByteString sendApdu(Number cla, Number ins, Number p1, Number p2, Number le)</p>
        <p class="signature">ByteString sendApdu(Number cla, Number ins, Number p1, Number p2, Number le, Number[] sw)</p>
        <p class="signature">ByteString sendApdu(Number cla, Number ins, Number p1, Number p2, ByteString data, Number le)</p>
        <p class="signature">ByteString sendApdu(Number cla, Number ins, Number p1, Number p2, ByteString data, Number le, Number[] sw)</p>
        <h3>Description</h3>
        <p>Transmit a Command-APDU to the ICC and receive the Response-APDU.</p>
                             
        <p>This methods works similar to Card.sendApdu(), but also ensures, that the object for which 
                        the method is called is selected before the APDU is transmitted.</p>
                             
        <p>The method updates the fields SW, SW1, SW2 and SWMSG and response with the values received from the ICC.</p>
                             
        <p>An array of valid return codes can be passed as argument sw. If the SW1/SW2 from the ICC does
                        not match with one of the entries in the array, then an GPError.CARD_COMM_ERROR exception is raised.</p>
                             
        <p>The method supports ISO7816-4 extended format. This is automatically used, if the length of the data
                        argument exceeds 255 or if the argument le exceeds 256.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>cla</td>
                <td>The CLA byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ins</td>
                <td>The INS byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p1</td>
                <td>The P1 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p2</td>
                <td>The P2 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>The data bytes to be send in the Command-APDU for case 3 or case 4 commands</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>le</td>
                <td>The number of bytes expected in the response. 256 is encoded as '00' in short format.
                                          65536 is encoded as '0000' in extended format.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 return codes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Response APDU received from ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call or SW array contain a type other than Number</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>A communication error with the ICC occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The status word return by the ICC does not match one of the expected result</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data for the command APDU exceeds 65536</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The value given for Le is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See Card.sendApdu() for an example

</pre>
        <h2 id="sendSecMsgApdu">sendSecMsgApdu()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, Number[] sw)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, ByteString data)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, ByteString data, Number[] sw)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, Number le)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, Number le, Number[] sw)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, ByteString data, Number le)</p>
        <p class="signature">ByteString sendSecMsgApdu(Number usageQualifier, Number cla, Number ins, Number p1, Number p2, ByteString data, Number le, Number[] sw)</p>
        <h3>Description</h3>
        <p>Transmit a Command-APDU to the ICC and receive the Response-APDU.</p>
                             
        <p>This methods works similar to Card.sendSecMsgApdu() but uses credentials
                        set for the object for which this method is called.</p>
        		 
        <p>This method also ensures, that the object for which the method is called
                        is selected before the APDU is transmitted.</p>
                             
        <p>If a secure channel is set with the setCredential() method, then this credential
                        will be used to tranform the command and response APDU accordingly. During this
                        transformation process, the usageQualifier is passed to the wrapping / unwrapping
                        methods. APDUs send with this method will be transformed using the credential
                        set for the CardFile.SELECT access mode.</p>
                             
        <p>The method updates the fields SW, SW1, SW2 and SWMSG and response with the values received from the ICC.</p>
                             
        <p>An array of valid return codes can be passed as argument sw. If the SW1/SW2 from the ICC does
                        not match with one of the entries in the array, then an GPError.CARD_COMM_ERROR exception is raised.</p>
                             
        <p>The method supports ISO7816-4 extended format. This is automatically used, if the length of the data
                        argument exceeds 255 or if the argument le exceeds 256.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>usageQualifier</td>
                <td>Usage qualifier for secure messaging transformation. Can be a combination of
                Card.CPRO, Card.CENC, Card.RPRO, Card.RENC and Card.ALL.</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>cla</td>
                <td>The CLA byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ins</td>
                <td>The INS byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p1</td>
                <td>The P1 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p2</td>
                <td>The P2 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>The data bytes to be send in the Command-APDU for case 3 or case 4 commands</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>le</td>
                <td>The number of bytes expected in the response. 256 is encoded as '00' in short format.
                                          65536 is encoded as '0000' in extended format.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 return codes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Response APDU received from ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call or SW array contain a type other than Number</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>A communication error with the ICC occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The status word return by the ICC does not match one of the expected result</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data for the command APDU exceeds 65536</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The value given for Le is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See Card.sendApdu() for an example

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>CardSimulationAdapter - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>CardSimulationAdapter - Reference Documentation</h1>
        <p>
            <p>Class to control a card simulation adapter that forwards APDUs to a script implementation</p>
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">CardSimulationAdapter() constructor</a>
            </li>
            <li>
                <a href="#setSimulationObject">setSimulationObject()</a>
            </li>
            <li>
                <a href="#start">start()</a>
            </li>
            <li>
                <a href="#stop">stop()</a>
            </li>
        </ul>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">CardSimulationAdapter(String adapter, String parameter)</p>
        <h3>Description</h3>
                    
        <p>Create a new card simulation adapter.</p>
                    
        <p>Currently only the JCOP Simulation adapter is available. It is configured as adapter
               name "JCOPSimulation" with the port number as parameter.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>adapter</td>
                <td>Name of the simulation adapter</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>source</td>
                <td>The parameter used to initialise the adapter</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var sa = new CardSimulationAdapter("JCOPSimulation", "8050");

</pre>
        <h2 id="setSimulationObject">setSimulationObject()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setSimulationObject(Object simulation)</p>
        <h3>Description</h3>
                    
        <p>Set the object that receives reset() and processAPDU() calls from the
               card simulation adapter.</p>
                    
        <p>The simulation object must implement the following methods:</p>
                    void reset(Number coldOrWarm);
            ByteString processAPDU(ByteString capdu);
            
        <p>The parameter coldOrWarm allows to differentiate between a cold and a warm
               reset. This parameter is currently always 0 (cold reset).</p>
                    
        <p>The parameter capdu contains the raw command APDU, including CLA, INS, P1, P2 and
               conditionally the Lc, Command Data and Le field.</p>
                    
        <p>The processAPDU() method must return the response APDU as ByteString object,
               with the conditional response data field and the trailer bytes SW1/SW2.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>simulation</td>
                <td>The object that implements the card simulation</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Create a very simple card simulator
var simulationObject = new Object();

// The simulator needs a processAPDU method
simulationObject.processAPDU = function(capdu) {
	print("Received APDU: " + capdu);
	var rapdu = capdu.concat(new ByteString("9000", HEX));
	return rapdu;
}

// The simulator needs a reset method
simulationObject.reset = function(type) {
	print("Reset type: " + type);
	var atr = new ByteString("3B600000", HEX);
	return atr;
}

sa.setSimulationObject(simulationObject);

</pre>
        <h2 id="start">start()</h2>
        <h3>Prototype</h3>
        <p class="signature">void start()</p>
        <h3>Description</h3>
                    
        <p>Starts the simulator adapter.</p>
                    
        <p>If the adapter is already running, it is stopped first.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

sa.start();

var card = new Card("JCOPSimulation");

var atr = card.reset(Card.RESET_COLD);

print(atr);

assert(atr.toByteString().toString(HEX) == "3B600000");

var rapdu = card.sendApdu(0x00, 0x10, 0x01, 0x02, new ByteString("1234", HEX), [0x9000]);

assert(rapdu.toString(HEX) == "00100102021234");

</pre>
        <h2 id="stop">stop()</h2>
        <h3>Prototype</h3>
        <p class="signature">void stop()</p>
        <h3>Description</h3>
                    
        <p>Stops the simulator adapter.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

sa.stop();

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
<h2>Changes in version 3.18 (2024-02-22)</h2>
<ul>
<li>Migration to new build system</li>
<li>Provider a distribution for Windows that include a JRE</li>
<li>Improve SmartCard-HSM support in Key Manager</li>
<li>Support SCP03 in GPSecurityDomain</li>
<li>Switch to Logback as logging framework</li>
<li>Add a Task class for headless environments</li>
<li>Switch to Logback as logging framework</li>
<li>Fix display error caused by concurrent access</li>
</ul>
<h2>Changes in version 3.17 (2020-06-22)</h2>
<ul>
<li>Refactor terminal selection dialog</li>
<li>Integrate web client for accessing the PKI-as-a-Service portal</li>
<li>Remove artefacts in lib/ before installing over existing installation</li>
</ul>
<h2>Changes in version 3.16 (2018-03-21)</h2>
<ul>
<li>Add support for CMS Enveloped Data</li>
<li>Replace tracing support in OCF with SLF4J</li>
<li>Change naming scheme in lib/ to include version numbers</li>
</ul>
<h2>Changes in version 3.15 (2018-11-30)</h2>
<ul>
<li>Add support for 64 bit integer in ByteString.toUnsigned()</li>
<li>Add support for BigInteger arithmetic in ByteString class</li>
<li>Change to latest Bouncycastle and Rhino version</li>
</ul>
<h2>Changes in version 3.14 (2018-05-04)</h2>
<ul>
<li>Add Task class to run and manage background tasks</li>
<li>Add support for importing PKCS#12 files with ECC keys (KeyManager)</li>
<li>Fix SOAPException class not found problem on Java &gt; 8</li>
<li>Add padding modes with 16 byte block size in ByteString.pad()</li>
<li>Enable warning when assigning to undeclared global variables</li>
</ul>
<h2>Changes in version 3.13</h2>
<ul>
<li>Automatically determine OID when setting EC domain parameter P (query with Key.getComponent(Key.ECC_CURVE_OID))</li>
<li>Add option to return PIN entered in Dialog.prompt() as ByteString</li>
<li>Add .clear() to ByteString to zeroize buffer with sensitive information</li>
<li>Add plug-in support in SmartCard-HSM Key Manager</li>
<li>Add feature to add DKEK shares in Key Manager</li>
</ul>
<h2>Changes in version 3.12</h2>
<ul>
<li>Source code moved to CardContact Developer Network (CDN)</li>
<li>Add scsh Modules</li>
<li>Add SmartCard-HSM Key Manager</li>
</ul>
<h2>Changes in version 3.7</h2>
<ul>
<li>Added new web connectivity with URLConnection and SOAPConnection classes</li>
<li>Added new support for XML Signatures</li>
<li>Improved support for cryptographic modules using PKCS#11</li>
<li>Enhanced support for Secure Messaging with new algorithms and support for EAC 2.0</li>
<li>Added new cryptographic primitives</li>
<li>Added special support in ASN.1 for TLV objects defined in EMV</li>
<li>Added support for javax.smartcardio in the underlying Opencard Framework</li>
<li>Added facility to simulate smart cards using scripting objects</li>
<li>Fixed a lot of minor bugs</li>
</ul>
<h2>Changes in version 3.6</h2>
<ul>
<li>Added support for AES cipher</li>
<li>Added support for ECC curves on F2M</li>
<li>Added support for SHA-2 family</li>
<li>Restructured code into library and SCSH3 component</li>
<li>Scripts are now moved to a different <a href="http://www.openscdp.org/scripts/index.html">package</a></li>
<li>Fixed problem with UTF-8 encodings on command line</li>
<li>Fixed design flaw in CardFile.sendApdu()</li>
<li>Fixed a lot of minor bugs</li>
</ul>
<h2>Changes in version 3.5</h2>
<ul>
<li>Added support for PKCS#11 modules</li>
<li>Added support for key stores</li>
<li>Added trace functionality for APDUs exchanged with cards</li>
<li>Improved scripts for German eGK</li>
<li>Moved development environment to Java 1.5</li>
<li>Upgraded to latest version of third party libraries</li>
<li>Improved documentation</li>
<li>Fixed all kind of bugs</li>
</ul>
<h2>Changes in version 3.4</h2>
<ul>
<li>Added support for secure messaging with IsoSecureChannel class</li>
<li>Added support for secure messaging in Card class</li>
<li>Added support for secure messaging in CardFile class</li>
<li>Added full support for Elliptic Curve Cryptography (EC-Keys, ECDSA and ECDH)</li>
<li>Improved handling of various smart cards in ISO card service</li>
<li>Upgraded to latest version of third party libraries</li>
<li>Improved documentation</li>
<li>Fixed all kind of bugs</li>
</ul>
<h2>Changes in version 3.3</h2>
<ul>
<li>Added outline node functionality to build explorer like GUIs</li>
<li>Added support for Global Platform profiles</li>
<li>Added support for more Global Platform scripting classes</li>
<li>Added explorer for various smart card applications</li>
<li>Added basic support for CMS</li>
<li>Added support for JavaCard applet loading</li>
<li>Added methods to Key and Crypto classes</li>
<li>Added card terminal to access JCOP card simulation from IBM JCOP tools</li>
<li>Improved support for Linux</li>
<li>Improved documentation</li>
<li>Fixed all kind of bugs</li>
</ul>
<h2>Changes in version 3.2</h2>
<ul>
<li>Implementation of Key, Crypto and CRL classes</li>
<li>CardFile.performCHV() allows PIN verification using OCF mechanisms</li>
<li>Support for access to native Java classes using LiveConnect added</li>
<li>Basic support for Linux added (only command line version)</li>
<li>Streamlined console output in GUIShell</li>
<li>Replaced crypto provider with new version</li>
</ul>
<h2>Changes in version 3.1</h2>
<ul>
<li>Graphical user interface</li>
<li>Management of current working directory, workspace directory and system directory for file lookup</li>
<li>Persistent configuration information in the _scsh3 object</li>
<li>Implementation of GPSystem class</li>
</ul>
<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>CMSEnvelopedData - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>CMSEnvelopedData - Reference Documentation</h1>
        <p>Class for CMS Enveloped Data handling</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">CMSEnvelopedData() constructor</a>
            </li>
            <li>
                <a href="#getContent">getContent()</a>
            </li>
            <li>
                <a href="#getRecipientSubjectKeyIds">getRecipientSubjectKeyIds()</a>
            </li>
        </ul>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">CMS(ByteString encoded)</p>
        <h3>Description</h3>
        Create a CMS object
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>encoded</td>
                <td>ASN.1 encoded bytestring containing the CMS object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.GPError.INVALID_TYPE</td>
                <td>Argument type is invalid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>Argument contains no valid encoded CMS enveloped data object</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See getContent()

</pre>
        <h2 id="getContent">getContent()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getContent(Key privateKey, X509 recipientCertificate)</p>
        <p class="signature">ByteString getContent(Key privateKey, ByteString subject key identifier)</p>
        <h3>Description</h3>
        Return the encapsulated enveloped content as a ByteString object.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Returns the encapsulated enveloped content</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

print("Generating generating key pair and X509 certificate for Recipient...\n");

var privKey = new Key();
privKey.setType(Key.PRIVATE);

var pubKey = new Key();
pubKey.setType(Key.PUBLIC);
pubKey.setSize(2048);

var crypto = new Crypto();
crypto.generateKeyPair(Crypto.RSA, pubKey, privKey);

var x = new X509CertificateGenerator(crypto);

x.reset();
x.setSerialNumber(new ByteString("01", HEX));
x.setSignatureAlgorithm(Crypto.RSA);
var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
x.setIssuer(issuer);
x.setNotBefore("060825120000Z");
x.setNotAfter("260825120000Z");
var subject = { C:"UT", O:"Utopia CA", OU:"ACME Corporation", CN:"Recipient #B" };
x.setSubject(subject);
x.setPublicKey(pubKey);
x.addKeyUsageExtension(	X509CertificateGenerator.digitalSignature |
							X509CertificateGenerator.keyCertSign |
							X509CertificateGenerator.dataEncipherment |
							X509CertificateGenerator.cRLSign );

x.addBasicConstraintsExtension(true, 0);
x.addSubjectKeyIdentifierExtension();
x.addAuthorityKeyIdentifierExtension(pubKey);

var cert = x.generateX509Certificate(privKey);

// Generate the Enveloped Data CMS object

var content = new ByteString("Hello World!", ASCII);

var gen = new CMSGenerator(CMSGenerator.TYPE_ENVELOPED_DATA);
gen.setDataContent(content);
gen.addRecipient(cert);

var envelopedData = gen.generate();

// Get the decrypted content of the Enveloped Data CMS object
// via X509 certificate

print(new ASN1(envelopedData));

var cms = new CMSEnvelopedData(envelopedData);

var result = cms.getContent(privKey, cert);

assert(content.equals(result));

// via subject key identifier

var skidList = cms.getRecipientSubjectKeyIds();

var result = cms.getContent(privKey, skidList[0]);

assert(content.equals(result));

</pre>
        <h2 id="getRecipientSubjectKeyIds">getRecipientSubjectKeyIds()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString[] getRecipientSubjectKeyIds()</p>
        <h3>Description</h3>
        Return the subject key id of all recipients of the CMS message as a bytestring
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString[]</code>
                </td>
                <td>Array containing the bytestring encoded Subject Key Identifier</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var skidList = cms.getRecipientSubjectKeyIds();
assert(skidList.length &gt; 0);


</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>CMSGenerator - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>CMSGenerator - Reference Documentation</h1>
        <p>Class for CMS generation according to RFC 3852</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">CMSGenerator() constructor</a>
            </li>
            <li>
                <a href="#setDataContent">setDataContent()</a>
            </li>
            <li>
                <a href="#addSigner">addSigner()</a>
            </li>
            <li>
                <a href="#addCertificate">addCertificate()</a>
            </li>
            <li>
                <a href="#addRecipient">addRecipient()</a>
            </li>
            <li>
                <a href="#generate">generate()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>TYPE_SIGNED_DATA</td>
                <td>Indicator for signed data content</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>TYPE_ENVELOPED_DATA</td>
                <td>Indictator for enveloped data</td>
            </tr>
            <tr>
                <td>String</td>
                <td>TYPE_DIGESTED_DATA</td>
                <td>Indicator for digested data</td>
            </tr>
            <tr>
                <td>String</td>
                <td>TYPE_ENCRYPTED_DATA</td>
                <td>Indicator for encrypted data</td>
            </tr>
            <tr>
                <td>String</td>
                <td>TYPE_AUTHENTICATED_DATA</td>
                <td>Indicator for authenticated data</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">CMSGenerator(Number type)</p>
        <h3>Description</h3>
                    
        <p>Create a CMS generator object for the specified type</p>
                    
        <p>Note: The current implementation only supports signed data and enveloped data</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>type</td>
                <td>Type of CMS object that should be generated</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.GPError.INVALID_TYPE</td>
                <td>Argument type is invalid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>Argument contains no valid encoded CMS signed data object</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

try {
	var gen = new CMSGenerator(CMSGenerator.TYPE_ENVELOPED_DATA);
} catch (e) {
	assert(e instanceof GPError);
}

try {
	var gen = new CMSGenerator(CMSGenerator.TYPE_DIGESTED_DATA);
} catch (e) {
	assert(e instanceof GPError);
}

try {
	var gen = new CMSGenerator(CMSGenerator.TYPE_ENCRYPTED_DATA);
} catch (e) {
	assert(e instanceof GPError);
}

try {
	var gen = new CMSGenerator(CMSGenerator.TYPE_AUTHENTICATED_DATA);
} catch (e) {
	assert(e instanceof GPError);
}

var gen = new CMSGenerator(CMSGenerator.TYPE_SIGNED_DATA);
assert(gen != null);

var edGen = new CMSGenerator(CMSGenerator.TYPE_ENVELOPED_DATA);
assert(edGen != null);

</pre>
        <h2 id="setDataContent">setDataContent()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setDataContent(ByteString data)</p>
        <h3>Description</h3>
        Set the data content of the CMS object.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>Data content</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many or missing arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var content = new ByteString("Hello World!", ASCII);
gen.setDataContent(content);
edGen.setDataContent(content);

</pre>
        <h2 id="addSigner">addSigner()</h2>
        <h3>Prototype</h3>
        <p class="signature">void addSigner(Key privateKey, X509 certificate, String signingAlgorithm)</p>
        <p class="signature">void addSigner(Key privateKey, X509 certificate, String signingAlgorithm, includeSignerInCMS)</p>
        <p class="signature">void addSigner(Key privateKey, ByteString keyIdentifier, String signingAlgorithm)</p>
        <h3>Description</h3>
                    
        <p>Add a signer key for the object.</p>
                    
        <p>Starting with 3.15, the API has changed, replacing the ByteString digestOID with String signingAlgorithm.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>privateKey</td>
                <td>Private key of the signer</td>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>certificate</td>
                <td>Certificate of the signer</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>keyIdentifier</td>
                <td>The signer key identifier</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>signingAlgorithm</td>
                <td>Java algorithm name for hashing and signing (e.g. "SHA256withRSA")</td>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>includeSignerInCMS</td>
                <td>Include signer certificate</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many or missing arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var crypto = new Crypto();

// Generate an asymmetric key pair and a certificate for A
print("Generating generating key pair and X509 certificate for Signer A...\n");

var privKeyA = new Key();
privKeyA.setType(Key.PRIVATE);

var pubKeyA = new Key();
pubKeyA.setType(Key.PUBLIC);
pubKeyA.setSize(2048);

crypto.generateKeyPair(Crypto.RSA, pubKeyA, privKeyA);

var x = new X509CertificateGenerator(crypto);

x.reset();
x.setSerialNumber(new ByteString("01", HEX));
x.setSignatureAlgorithm(Crypto.RSA);
var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
x.setIssuer(issuer);
x.setNotBefore("060825120000Z");
x.setNotAfter("260825120000Z");
var subject = { C:"UT", O:"Utopia CA", OU:"ACME Corporation", CN:"Signer #A" };
x.setSubject(subject);
x.setPublicKey(pubKeyA);
x.addKeyUsageExtension(	X509CertificateGenerator.digitalSignature |
							X509CertificateGenerator.keyCertSign |
							X509CertificateGenerator.cRLSign );

x.addBasicConstraintsExtension(true, 0);
x.addSubjectKeyIdentifierExtension();
x.addAuthorityKeyIdentifierExtension(pubKeyA);

var certA = x.generateX509Certificate(privKeyA);

var keyid = certA.getNative().getExtensionValue("2.5.29.14").bytes(4);

gen.addCertificate(certA);

gen.addSigner(privKeyA, certA, "SHA256withRSA");

gen.addSigner(privKeyA, keyid, "SHA256withRSA");

</pre>
        <h2 id="addCertificate">addCertificate()</h2>
        <h3>Prototype</h3>
        <p class="signature">void addCertificate(X509 certificate)</p>
        <h3>Description</h3>
        Add a certificate to the CMS object.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>certificate</td>
                <td>Certificate of the signer or associated CA</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many or missing arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// see addSigner() for Signed Data example

</pre>
        <h2 id="addRecipient">addRecipient()</h2>
        <h3>Prototype</h3>
        <p class="signature">void addRecipient(X509 certificate)</p>
        <h3>Description</h3>
        Add a recipient to the CMS object.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>certificate</td>
                <td>Certificate of the recipient</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many or missing arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>
print("Generating generating key pair and X509 certificate for Recipient B...\n");

var privKeyB = new Key();
privKeyB.setType(Key.PRIVATE);

var pubKeyB = new Key();
pubKeyB.setType(Key.PUBLIC);
pubKeyB.setSize(2048);

crypto.generateKeyPair(Crypto.RSA, pubKeyB, privKeyB);

var x = new X509CertificateGenerator(crypto);

x.reset();
x.setSerialNumber(new ByteString("01", HEX));
x.setSignatureAlgorithm(Crypto.RSA);
var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
x.setIssuer(issuer);
x.setNotBefore("060825120000Z");
x.setNotAfter("260825120000Z");
var subject = { C:"UT", O:"Utopia CA", OU:"ACME Corporation", CN:"Recipient #B" };
x.setSubject(subject);
x.setPublicKey(pubKeyB);
x.addKeyUsageExtension(	X509CertificateGenerator.digitalSignature |
							X509CertificateGenerator.keyCertSign |
							X509CertificateGenerator.dataEncipherment |
							X509CertificateGenerator.cRLSign );

x.addBasicConstraintsExtension(true, 0);
x.addSubjectKeyIdentifierExtension();
x.addAuthorityKeyIdentifierExtension(pubKeyB);

var certB = x.generateX509Certificate(privKeyB);

edGen.addRecipient(certA);
edGen.addRecipient(certB);

</pre>
        <h2 id="generate">generate()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString generate()</p>
        <p class="signature">ByteString generate(ByteString contentOID)</p>
        <h3>Description</h3>
        Generate the CMS object
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The ASN.1 encoded cms object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many or missing arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Generate Signed Data

var contentOID = new ByteString("0.4.0.127.0.7.3.2.2", OID);

var cms = gen.generate(contentOID);

print(new ASN1(cms));

var t = new CMSSignedData(cms);

var contentTypeOID = t.getEContentType();
assert(contentTypeOID.equals(contentOID));

certs = t.getSignedDataCertificates();

assert(certs != null);

print("Number of certificates: " + certs.length);

for (i = 0; i &lt; certs.length; i++) {
	print("#" + i+ ": " + certs[i].toString());
}

print("Signed content: " + t.getSignedContent().toString(ASCII));


ns = t.getNumberOfSigners();
for (i = 0; i &lt; ns; i++) {

	signature = t.getSignerInfoSignature(i);
	assert(signature != null);
	print("Signature [" + i + "]: " + signature.toString());
}

ns = t.getNumberOfSigners();
assert(ns != null);

print("Number of signers:" + ns);

for (i = 0; i &lt; ns; i++) {
	print("SignerIdentifier Type: " + t.getSignerInfoSIDType(i));
	valid = t.isSignerInfoSignatureValid(i);
	assert(valid != null);
	print("Signer information signature [" + i + "]: " + (valid == true ? "valid" : "invalid"));
}

// Generate Enveloped Data

var cms = edGen.generate(contentOID);

print(new ASN1(cms));

var t = new CMSEnvelopedData(cms);

var contentA = t.getContent(privKeyA, certA);
var contentB = t.getContent(privKeyB, certB);

assert(content.equals(contentA));
assert(contentA.equals(contentB));

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>CMSSignedData - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>CMSSignedData - Reference Documentation</h1>
        <p>Class for CMS Signed Data handling</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">CMSSignedData() constructor</a>
            </li>
            <li>
                <a href="#getSignedContent">getSignedContent()</a>
            </li>
            <li>
                <a href="#getSignedDataVersion">getSignedDataVersion()</a>
            </li>
            <li>
                <a href="#getSignedDataDigestAlgorithms">getSignedDataDigestAlgorithms()</a>
            </li>
            <li>
                <a href="#getSignedDataCertificates">getSignedDataCertificates()</a>
            </li>
            <li>
                <a href="#getEContentType">getEContentType()</a>
            </li>
            <li>
                <a href="#getNumberOfSigners">getNumberOfSigners()</a>
            </li>
            <li>
                <a href="#getSignerInfoVersion">getSignerInfoVersion()</a>
            </li>
            <li>
                <a href="#getSignerInfoSIDType">getSignerInfoSIDType()</a>
            </li>
            <li>
                <a href="#isCertificateAvailable">isCertificateAvailable()</a>
            </li>
            <li>
                <a href="#getSignerInfoDigestAlgorithm">getSignerInfoDigestAlgorithm()</a>
            </li>
            <li>
                <a href="#getSignerInfoSignedAttribute">getSignerInfoSignedAttribute()</a>
            </li>
            <li>
                <a href="#getCertificate">getCertificate()</a>
            </li>
            <li>
                <a href="#getSignerInfoSignatureAlgorithm">getSignerInfoSignatureAlgorithm()</a>
            </li>
            <li>
                <a href="#getSignerInfoSignature">getSignerInfoSignature()</a>
            </li>
            <li>
                <a href="#isSignerInfoSignatureValid">isSignerInfoSignatureValid()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>SID_ISSUERANDSERIALNUMBER</td>
                <td>SID object uses issuer and serial number for public key identification</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SID_SUBJECTKEYIDENTIFIER</td>
                <td>SID uses subject key identifier for public key identification</td>
            </tr>
            <tr>
                <td>String</td>
                <td>ATTR_MESSAGEDIGEST</td>
                <td>Object identifier of CMS attribute message digest</td>
            </tr>
            <tr>
                <td>String</td>
                <td>ATTR_SIGNINGTIME</td>
                <td>Object identifiert of CMS attribute signing time</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">CMS(ByteString encoded)</p>
        <h3>Description</h3>
        Create a CMS object
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>encoded</td>
                <td>ASN.1 encoded bytestring containing the CMS object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.GPError.INVALID_TYPE</td>
                <td>Argument type is invalid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>Argument contains no valid encoded CMS signed data object</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

encCMS = new ByteString("30 82 05 6d 06 09 2a 86 48 86 f7 0d 01 07 02 a0 82 05 5e 30 82 05 5a 02 01 \
01 31 0b 30 09 06 05 2b 0e 03 02 1a 05 00 30 1c 06 09 2a 86 48 86 f7 0d 01 07 01 a0 0f 04 0d 48 65 6c \
6c 6f 20 57 6f 72 6c 64 0d 0a a0 82 03 aa 30 82 03 a6 30 82 02 0e a0 03 02 01 02 02 11 31 7b af d2 33 \
e0 31 6f a2 d7 83 3a 7a f8 f9 93 d5 30 0d 06 09 2a 86 48 86 f7 0d 01 01 05 05 00 30 54 31 12 30 10 06 \
03 55 04 03 0c 09 56 53 69 67 20 43 41 20 31 31 31 30 2f 06 03 55 04 0a 0c 28 54 45 53 54 20 2d 20 48 \
61 75 70 74 76 65 72 62 61 6e 64 20 c3 b6 73 74 65 72 72 2e 20 53 6f 7a 69 61 6c 76 65 72 73 2e 31 0b \
30 09 06 03 55 04 06 13 02 41 54 30 1e 17 0d 30 35 31 31 30 33 31 30 30 35 34 32 5a 17 0d 31 30 31 31 \
30 33 31 30 30 35 34 32 5a 30 70 31 1f 30 1d 06 03 55 04 03 0c 16 58 58 58 4f 74 74 6f 20 58 58 58 4f \
74 74 61 6b 72 69 6e 67 65 72 31 31 30 2f 06 03 55 04 0a 0c 28 54 45 53 54 20 2d 20 48 61 75 70 74 76 \
65 72 62 61 6e 64 20 c3 b6 73 74 65 72 72 2e 20 53 6f 7a 69 61 6c 76 65 72 73 2e 31 0d 30 0b 06 03 55 \
04 0b 0c 04 56 53 69 67 31 0b 30 09 06 03 55 04 06 13 02 41 54 30 49 30 13 06 07 2a 86 48 ce 3d 02 01 \
06 08 2a 86 48 ce 3d 03 01 01 03 32 00 04 bc 10 1e d9 44 4b 6b 3f 13 1c 61 69 94 61 ce 8a 8a ab 2f be \
a8 7e cf e8 ba 4e 08 69 2c 21 30 3a bd 3b 52 c2 66 3a 6e 92 93 d5 49 ce 75 14 82 59 a3 81 b1 30 81 ae \
30 13 06 03 55 1d 23 04 0c 30 0a 80 08 46 f9 06 e6 e7 08 0f 24 30 11 06 03 55 1d 0e 04 0a 04 08 4a be \
a1 1f 28 a5 64 86 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 06 c0 30 16 06 03 55 1d 20 04 0f 30 0d 30 \
0b 06 09 2a 28 00 0a 01 04 01 66 00 30 31 06 08 2b 06 01 05 05 07 01 01 04 25 30 23 30 21 06 08 2b 06 \
01 05 05 07 30 01 86 15 68 74 74 70 3a 2f 2f 31 34 39 2e 32 33 39 2e 31 36 2e 32 30 39 30 29 06 03 55 \
1d 11 04 22 30 20 81 1e 61 6e 64 72 65 61 73 2e 73 63 68 77 69 65 72 40 63 61 72 64 63 6f 6e 74 61 63 \
74 2e 64 65 30 0d 06 09 2a 86 48 86 f7 0d 01 01 05 05 00 03 82 01 81 00 09 cc ad 93 50 5c 10 1c a5 41 \
a7 a8 4d 2d bb 35 67 7e e2 31 85 46 ce a0 cb 8c 8c b2 2b 84 a9 32 96 65 03 11 04 78 d4 9f e3 e9 3b a2 \
9b 6a 42 3b e4 05 c2 23 20 33 27 83 89 aa 06 c2 3e ed e8 11 27 e0 3d d4 5e ba 35 84 04 cf 4e 2a 6e 49 \
da 3d 32 82 43 94 db e1 43 80 e0 7f 7b 6f d1 ca 36 d8 e3 cf 0f f7 46 bd 94 af a3 99 1b 55 28 53 4f 13 \
55 96 42 10 c0 2f 87 c9 53 86 e5 d2 bd a2 2b 6a c9 56 43 45 5c cd c9 a0 a8 13 ec 5a 4f 3b 55 72 94 82 \
6e 63 14 4b ce 2f 7c e9 6c 61 13 e1 de 97 6a 72 f5 c4 a8 b7 5e d0 bf 01 1c 37 c0 3d 3b 74 bc c0 05 08 \
93 b3 8c 06 07 4b dc ab 3b cd 7e 00 48 42 44 18 89 da f7 c6 c1 dd 0e 27 d7 1a c7 f8 77 80 5f 48 d1 8f \
17 52 20 2d 02 0e 90 95 68 4c 2e 78 da 0a dd eb 0b a4 6c 4b 7a 7b 6b b0 78 1b 3b 08 f4 80 d0 cb 5f 03 \
60 4f 08 af db 94 95 ba 15 ac f8 3f 09 12 f7 e2 1d 63 6b 93 07 6b 71 50 f4 fc 35 89 e1 55 68 63 14 de \
81 0a 53 f4 9a 7b b8 3e 37 51 a7 ad e2 d5 99 36 6e c0 cd 76 af 14 eb 25 3c fa cb 74 f6 f6 6e 91 19 7e \
dc 33 60 06 5a 9a b4 95 54 4f 48 f3 68 3a 7d 8d e0 b6 e7 93 78 0e 77 be 64 b6 d3 23 14 a1 b2 cc ad 36 \
8f af b0 72 85 f3 2b 83 e2 11 6c 35 0e 1d 27 38 c9 b5 c0 c5 f5 6f 41 e9 7d 76 9a ef 9f 6a 46 86 53 26 \
31 82 01 7a 30 82 01 76 02 01 01 30 69 30 54 31 12 30 10 06 03 55 04 03 0c 09 56 53 69 67 20 43 41 20 \
31 31 31 30 2f 06 03 55 04 0a 0c 28 54 45 53 54 20 2d 20 48 61 75 70 74 76 65 72 62 61 6e 64 20 c3 b6 \
73 74 65 72 72 2e 20 53 6f 7a 69 61 6c 76 65 72 73 2e 31 0b 30 09 06 03 55 04 06 13 02 41 54 02 11 31 \
7b af d2 33 e0 31 6f a2 d7 83 3a 7a f8 f9 93 d5 30 09 06 05 2b 0e 03 02 1a 05 00 a0 81 b4 30 23 06 09 \
2a 86 48 86 f7 0d 01 09 04 31 16 04 14 83 eb 53 1b fd 10 f9 17 77 04 41 c7 f5 48 dc d8 41 e7 0f dd 30 \
1c 06 09 2a 86 48 86 f7 0d 01 09 05 31 0f 17 0d 30 36 30 31 31 31 31 35 31 38 32 30 5a 30 18 06 09 2a \
86 48 86 f7 0d 01 09 03 31 0b 06 09 2a 86 48 86 f7 0d 01 07 01 30 28 06 0b 2a 86 48 86 f7 0d 01 09 10 \
02 04 31 19 30 17 0c 0a 74 65 78 74 2f 70 6c 61 69 6e 06 09 2a 86 48 86 f7 0d 01 07 01 30 2b 06 0b 2a \
86 48 86 f7 0d 01 09 10 02 13 31 1c 30 1a 30 18 30 16 04 14 88 ab 4d 53 d5 df 3e 59 08 1d 33 23 3f af \
90 f1 66 88 51 1e 30 0b 06 07 2a 86 48 ce 3d 04 01 05 00 04 37 30 35 02 19 00 ac 2c 31 b1 33 fa 43 f7 \
2e b8 ca 6b af 5a 02 8e 1e b4 53 a2 1f 4a d0 55 02 18 75 0d 25 89 57 2e f2 31 95 0d e3 94 35 c3 31 75 \
4f 0a 31 f6 ab b0 04 02", HEX);

t = new CMSSignedData(encCMS);
assert(t != null);

</pre>
        <h2 id="getSignedContent">getSignedContent()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString[] getSignedContent()</p>
        <h3>Description</h3>
        Return the encapsulated signed content as a ByteString object.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Returns the encapsulated signed content</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

referenceData = new ByteString("48 65 6C 6C 6F 20 57 6F 72 6C 64 0D 0A", HEX);
assert(t.getSignedContent().equals(referenceData));
print("Signed content: " + t.getSignedContent());

</pre>
        <h2 id="getSignedDataVersion">getSignedDataVersion()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getSignedDataVersion()</p>
        <h3>Description</h3>
        Return the encoded version number of the signed data object.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Returns the encoded version number</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

assert(t.getSignedDataVersion() == 0 || 
	   t.getSignedDataVersion() == 1 ||
	   t.getSignedDataVersion() == 2 ||
	   t.getSignedDataVersion() == 3 ||
	   t.getSignedDataVersion() == 4);

print("Signed data version: " + t.getSignedDataVersion());

</pre>
        <h2 id="getSignedDataDigestAlgorithms">getSignedDataDigestAlgorithms()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString[] getSignedDataDigestAlgorithms()</p>
        <h3>Description</h3>
        Return an array containing the bytestring encoded OIDs of the signed data object.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString[]</code>
                </td>
                <td>Array containing the bytestring encoded OIDs</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.USER_DEFINED</td>
                <td>No OID at specified position</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

oids = t.getSignedDataDigestAlgorithms();

assert(oids != null);

print("Number of OIDs: " + oids.length);

for (i = 0; i &lt; oids.length; i++) {
	print("#" + i+ ": " + oids[i].toString(OID));
}


</pre>
        <h2 id="getSignedDataCertificates">getSignedDataCertificates()</h2>
        <h3>Prototype</h3>
        <p class="signature">X509[] getSignedDataCertificates()</p>
        <h3>Description</h3>
        Return an array containing certificates of the signed data object.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>Array containing the certificates</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

certs = t.getSignedDataCertificates();

assert(certs != null);

print("Number of certificates: " + certs.length);

for (i = 0; i &lt; certs.length; i++) {
	print("#" + i+ ": " + certs[i].toString());
}

</pre>
        <h2 id="getEContentType">getEContentType()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getEContentType()</p>
        <h3>Description</h3>
        Return a bytestring containing the OID of the econtent
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>ByteString containing the OID</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

eContentType = t.getEContentType();

assert(eContentType != null);
assert(eContentType.toString(OID) == "1.2.840.113549.1.7.1");

print(eContentType.toString(OID));

</pre>
        <h2 id="getNumberOfSigners">getNumberOfSigners()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getNumberOfSigners()</p>
        <h3>Description</h3>
        Return the number of signer and (respectively) the available signer info objects
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Number of signers</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

ns = t.getNumberOfSigners();

assert(ns != null);

print("Number of signers: " + ns);
	   
</pre>
        <h2 id="getSignerInfoVersion">getSignerInfoVersion()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getSignerInfoVersion(Number index)</p>
        <h3>Description</h3>
        Return version number of the specified signer info object
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Index of the signer info object for which to retrieve the version number</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Signer info version number</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index of the signer info object is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

ns = t.getNumberOfSigners();

// Get all available signer info version numbers

for (i = 0; i &lt; ns; i++) {

	siVersion = t.getSignerInfoVersion(i);

	assert(siVersion != null);

	print("Signer info version [" + i + "]: " + siVersion);

	assert(siVersion == 0 || 
		   siVersion == 1 ||
		   siVersion == 2 ||
		   siVersion == 3 ||
		   siVersion == 4);	   
}

try {
	siVersion = t.getSignerInfoVersion(200);
} catch (e) {
	assert(e instanceof GPError);
}

</pre>
        <h2 id="getSignerInfoSIDType">getSignerInfoSIDType()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getSignerInfoSIDType(Number index)</p>
        <h3>Description</h3>
        Determine and return the type used by the SID
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Index of the signer info object for which to determine the SID type</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>SID type</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index of the signer info object is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

sidType = t.getNumberOfSigners();

for (i = 0; i &lt; ns; i++) {

	sidType = t.getSignerInfoSIDType(i);

	assert(sidType != null);

	print("SID type [" + i + "]: " + sidType);

}

try {
	sidType = t.getSignerInfoSIDType(200);
} catch (e) {
	assert(e instanceof GPError);
}

</pre>
        <h2 id="isCertificateAvailable">isCertificateAvailable()</h2>
        <h3>Prototype</h3>
        <p class="signature">Boolean isCertificateAvailable(Number index)</p>
        <h3>Description</h3>
        Verify if the certificate specified by the SID is available
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Index of the signer info object that specifies the SID</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>Indicator if certificate is available</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index of the signer info object is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

ns = t.getNumberOfSigners();

for (i = 0; i &lt; ns; i++) {

	available = t.isCertificateAvailable(i);

	assert(available != null);

	print("Certificate for SID of signer info [" + i + "]: " + (available == true ? "available" : "not available"));

}

try {
	sidType = t.isCertificateAvailable(200);
} catch (e) {
	assert(e instanceof GPError);
}

</pre>
        <h2 id="getSignerInfoDigestAlgorithm">getSignerInfoDigestAlgorithm()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getSignerInfoDigestAlgorithm()</p>
        <h3>Description</h3>
        Return a bytestring containing the OID of the signer info digest algorithm.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Index of the signer info object that specifies the SID</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Array containing the bytestring encoded OIDs</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index of the signer info object is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

ns = t.getNumberOfSigners();

for (i = 0; i &lt; ns; i++) {

	oid = t.getSignerInfoDigestAlgorithm(i);
	
	assert(oid != null);

	print("OID digest algorithm [" + i + "]: " + oid.toString(OID));
}

</pre>
        <h2 id="getSignerInfoSignedAttribute">getSignerInfoSignedAttribute()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getSignerInfoSignedAttribute(Number index, Number type)</p>
        <h3>Description</h3>
        Return a bytestring containing the value field of the signed attribute.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Index of the signer info object that specifies the SID</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>type</td>
                <td>OID of the signed attribute</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>ByteString containing the value field of the attribute</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index of the signer info object is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

md = t.getSignerInfoSignedAttribute(0, CMSSignedData.ATTR_MESSAGEDIGEST);

assert(md != null);

print("Attribute message digest: " + md.toString());
st = t.getSignerInfoSignedAttribute(0, CMSSignedData.ATTR_SIGNINGTIME);

// No signing time present
assert(st != null);
print("Attribute signing time: " + st.toString(ASCII));

</pre>
        <h2 id="getCertificate">getCertificate()</h2>
        <h3>Prototype</h3>
        <p class="signature">X509 getCertificate(Number index)</p>
        <h3>Description</h3>
        Get the certificate specified by the SID of the signer info element
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Index of the signer info object that specifies the SID</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>The specified certificate</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index of the signer info object is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

ns = t.getNumberOfSigners();

for (i = 0; i &lt; ns; i++) {

	available = t.isCertificateAvailable(i);

	assert(available != null);

	if (available) {
		
		cert = t.getCertificate(i);
		
		assert(cert != null);
	}
}

try {
	sidType = t.isCertificateAvailable(200);
} catch (e) {
	assert(e instanceof GPError);
}

</pre>
        <h2 id="getSignerInfoSignatureAlgorithm">getSignerInfoSignatureAlgorithm()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getSignerInfoSignatureAlgorithm()</p>
        <h3>Description</h3>
        Return a bytestring containing the OID of the signer info digest algorithm.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Index of the signer info object that specifies the SID</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>ByteString containing the OID</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index of the signer info object is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

ns = t.getNumberOfSigners();

for (i = 0; i &lt; ns; i++) {

	oid = t.getSignerInfoSignatureAlgorithm(i);
	
	assert(oid != null);

	print("OID digest algorithm [" + i + "]: " + oid.toString(OID));
}

</pre>
        <h2 id="getSignerInfoSignature">getSignerInfoSignature()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getSignerInfoSignature()</p>
        <h3>Description</h3>
        Return a bytestring containing the signature
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Index of the signer info object that specifies the SID</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>ByteString containing the signature</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index of the signer info object is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

ns = t.getNumberOfSigners();

for (i = 0; i &lt; ns; i++) {

	signature = t.getSignerInfoSignature(i);
	
	assert(signature != null);

	print("Signature [" + i + "]: " + signature.toString());
}

</pre>
        <h2 id="isSignerInfoSignatureValid">isSignerInfoSignatureValid()</h2>
        <h3>Prototype</h3>
        <p class="signature">Boolean isSignerInfoSignatureValid(Number index)</p>
        <p class="signature">Boolean isSignerInfoSignatureValid(Number index, ByteString encodedCert)</p>
        <p class="signature">Boolean isSignerInfoSignatureValid(Number index, X509 cert)</p>
        <h3>Description</h3>
        Verify if the signature specified by the SID available
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Index of the signer info object that specifies the SID</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>Indicator if signature is valid</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index of the signer info object is invalid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ENCODING</td>
                <td>The encoding of the provided signer certificate is invalid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.OBJECT_NOT_FOUND</td>
                <td>No suitable signer certificate for verification found within the provided data structure</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new CMSSignedData(encCMS);
assert(t != null);

ns = t.getNumberOfSigners();

assert(ns != null);

for (i = 0; i &lt; ns; i++) {

	valid = t.isSignerInfoSignatureValid(i);

	assert(valid != null);

	print("Signer information signature [" + i + "]: " + (valid == true ? "valid" : "invalid"));
	
	valid = t.isSignerInfoSignatureValid(i, t.getCertificate(i));

	assert(valid != null);

	print("Signer information signature [" + i + "]: " + (valid == true ? "valid" : "invalid"));

	valid = t.isSignerInfoSignatureValid(i, t.getCertificate(i).getBytes());

	assert(valid != null);

	print("Signer information signature [" + i + "]: " + (valid == true ? "valid" : "invalid"));
}

try {
	valid = t.isSignerInfoSignatureValid(200);
} catch (e) {
    assert(e instanceof GPError);
}


/*
 * Read a byte string object from file
 *
 * The filename is mapped to the location of the script
 *
 * name		Name of file
 *
 */
function readFileFromDisk(name) {

	// Map filename
	var filename = GPSystem.mapFilename(name, GPSystem.CWD);
	print("Reading " + filename);

	var file = new java.io.FileInputStream(filename);
	
	var content = new ByteBuffer();
	var buffer = new ByteString("                                                                                                                                                                                                                                                                ", ASCII);
	var len;
	
	while ((len = file.read(buffer)) &gt;= 0) {
		content.append(buffer.bytes(0, len));
	}
	
	file.close();
	return(content.toByteString());
}

// Read certificate from disk
var signerCertificate = readFileFromDisk("dscert.der");

var encCMS = new ByteString("30 82 02 E6 06 09 2A 86 48 86 F7 0D 01 07 02 A0 82 02 D7 30 82 02 D3 02 01 \
03 31 0F 30 0D 06 09 60 86 48 01 65 03 04 02 01 05 00 30 81 E9 06 06 67 81 08 01 01 01 A0 81 DE 04 81 DB \
30 81 D8 02 01 00 30 0D 06 09 60 86 48 01 65 03 04 02 01 05 00 30 81 C3 30 25 02 01 01 04 20 51 B6 FC 0E \
F1 94 6F 3A 86 D2 A4 C9 55 7C 5D 8E CF F1 31 13 B4 13 10 89 C5 C4 8B F7 29 1F FD F5 30 25 02 01 02 04 20 \
A9 A1 B0 9D FD 59 80 87 AB 3F CE 4A E2 EC 65 B1 A1 52 5B D2 58 BF C2 7D F4 41 9F 8A 65 E5 47 45 30 25 02 \
01 03 04 20 40 3E 4D 17 C2 6E BC 83 24 11 89 81 61 D8 FD 5D 99 C5 8E E8 65 CB 37 59 B5 29 AA 78 2C 7E DE \
00 30 25 02 01 0E 04 20 A7 79 07 9D 29 BA E6 C9 AD 7A 5E DE 93 9B 50 06 13 99 6C 9E 41 46 E4 6B D6 E5 B1 \
BE A6 19 0F C8 30 25 02 01 04 04 20 5F AB AD 4B F8 67 B3 E4 E6 A8 0F 0F EC 22 A3 76 50 5E A3 FF 48 43 48 \
5B 12 78 C5 90 9F 64 9B 07 31 82 01 CF 30 82 01 CB 02 01 01 30 5A 30 53 31 0B 30 09 06 03 55 04 06 13 02 \
44 45 31 17 30 15 06 03 55 04 0A 0C 0E 48 4A 50 20 43 6F 6E 73 75 6C 74 69 6E 67 31 17 30 15 06 03 55 04 \
0B 0C 0E 43 6F 75 6E 74 72 79 20 53 69 67 6E 65 72 31 12 30 10 06 03 55 04 03 0C 09 48 4A 50 20 50 42 20 \
43 53 02 03 01 60 01 30 0D 06 09 60 86 48 01 65 03 04 02 01 05 00 A0 48 30 15 06 09 2A 86 48 86 F7 0D 01 \
09 03 31 08 06 06 67 81 08 01 01 01 30 2F 06 09 2A 86 48 86 F7 0D 01 09 04 31 22 04 20 16 38 8D 9D DB 7A \
4D 02 C0 68 FC 4B B8 2C 01 31 05 BF CA 06 92 8A 6E 76 2D A2 DB 35 C5 20 24 31 30 0D 06 09 2A 86 48 86 F7 \
0D 01 01 0B 05 00 04 82 01 00 10 DB F9 D0 4B EA 3E 5D E0 F7 5A 2D 78 A6 7D 4F 24 26 F5 E2 E0 DD 4B 38 69 \
80 B4 1E 8E 0F BF D3 83 DB FD DF 29 0A 8E 17 5E B1 99 73 08 C3 95 D5 49 74 FF 28 A6 E4 2E 1D 4D 56 9A 04 \
E3 56 E5 26 C4 B3 0B 5E B9 CB CB 2A DA 58 C9 54 B8 44 D3 AE 8B A3 ED 82 1D AD 50 AC 85 E0 A9 F6 EB E8 D7 \
5F 5D 4E 8E 3A DD 24 BD B0 BE 57 0E 0C 50 38 BF F8 67 6F 32 79 32 3B 10 B6 1C C2 1C 82 F6 EB 5E D8 B2 B4 \
49 05 85 2D 1A 79 D7 7E 0A 49 AB 63 6B E8 2E 79 0C BD 8A 9E 72 73 77 6E 04 5F E5 14 7A 1E 6B E7 9C 47 3E \
A1 F3 3E 7E 68 DC CC E9 61 71 EC ED 90 1E 3C 5F 7C 63 6F BB 9D 64 03 C1 1D B3 A0 00 87 39 7A BB F9 2B D3 \
50 FC 59 50 3D D1 1E 26 77 F2 B0 87 C9 79 75 30 1F C9 5D 4D 95 9F 77 16 3F 3F D0 D4 17 1D AE B0 22 77 16 \
2D 03 A6 A0 28 76 F0 08 1B 78 19 9C 70 5F 89 AD 9A 38 B1 75 06", HEX);

t = new CMSSignedData(encCMS);
assert(t != null);

valid = t.isSignerInfoSignatureValid(0, signerCertificate);

assert(valid != null);

print("Signer information signature [" + i + "]: " + (valid == true ? "valid" : "invalid"));


</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
<h2>Invoking the Graphical User Interface</h2>
<p>The shell is provided in a version with a graphical user interface as well
   as a version than runs from the command line. The later can be used for batch
   processing, whereas the former is better suited for development and interactive
   activities.</p>
<p>The GUI version can be started from the Start menu and comes up with a dialog
   that allows the selection of a workspace or configuration file.</p>
<p>The GUI version of the shell is started with the scsh3gui executable. It accepts
   the same command line arguments as the command line version, except for the --interactive
   and --list-readers options.</p>
<p>The initial workspace configuration is read from the .scsh3config file located in the
   user's home directory.</p>
<h2>Command Line Arguments</h2>
<p>The shell can be started from the command line using the
   scsh3 or scsh3gui executable. Configuration files and scripts are always located relative
   to the current directory from which the shell is invoked.</p>
<p>The following command line parameter are accepted:</p>
<pre>scsh3 [--list-readers] [--interactive] [-D&lt;key&gt;=&lt;value&gt;] [scripts]*
       --list-readers     Provide a list of card reader names
       --interactive      Enter interactive mode
       -D&lt;key&gt;=&lt;value&gt;    Set Java system property</pre>
      <p>Parameter passed to
         the shell are interpreted as file names containing ECMA script code. They
         are executed in the sequence as defined. After successfull completion of
         the script the shell enters interactive mode, if the argument --interactive
         is given.</p>
<h2>Defining a Web Proxy for OCSP Queries</h2>
<p>Support for web proxies in http transport can be defined by setting the
   Java system properties http.proxyHost and http.proxyPort using the -D command line argument.</p>
<p>The following example configures the http transport to use the proxy server
   on IP address 192.168.0.254 listening at port 3128. </p>
<pre>scsh3 -Dhttp.proxyHost=192.168.0.254 -Dhttp.proxyPort=3128</pre>
<p>If your proxy requires a password for authentication, then you must login to the
   proxy using your web browser before using the OCSP functionality.</p>
<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate --><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
<h2>Shell Configuration</h2>
<p>All configuration of the shell is done from within the scripting environment. The top level
   scripting object is instantiated when the shell is started. This so called global object contains
   all global variables and function definitions. When executing scripts, then these run in the context
   of the global object.</p>
<p>During startup, the Smart Card Shell will try to find and execute the CONFIG.JS file, unless the user
   specifies an alternative script for configuration. The CONFIG.JS file provides for the basic shell configuration.
   It defines the required scripting classes, global definitions and shortcut functions. After the CONFIG.JS
   script is completed, the shell is ready configured.</p>
<p>In the default CONFIG.JS file, a global object under the name "_scsh3" is created. This object
   contains <a href="settings.html">persistent configuration informations</a> that can be changed from
   within the scripting environment.</p>

<h2>Card Terminal Configuration</h2>
<p>The Smart Card Shell uses the OpenCard Framework (OCF) to access card terminals and
   smart cards. OCF has it's own configuration mechanism using a property file named opencard.properties.</p>
<p>When OCF is started by the Smart Card Shell, then OCF looks for configuration information in
   three different locations:</p>
<ul>
<li>[java.home]/lib/opencard.properties</li>
<li>[user.home]/.opencard.properties</li>
<li>[user.dir]/opencard.properties</li>
<li>[user.dir]/.opencard.properties</li>
</ul>
<p>[java.home] is the directory where the Java runtime is installed. The configuration file
   there may be used for system and application wide configurations.</p>
<p>[user.home] is the user's home directory on the system. For Windows this is the
   "Document and Settings"/"User Name" directory.</p>
<p>[user.dir] is the current directory when the application is started.</p>
<p>OCF will read configuration information in the order defined above. The Smart Card Shell
   installation places a default opencard.properties file in the directory where the executable
   is installed. This default configuration enables all PC/SC card terminals and configures the
   necessary card service factories.</p>
<p>A user specific configuration can be added by creating a file named .opencard.properties in the
   home directory of the user.</p>
<h3>Adding CT-API Card Terminals</h3>
<p>The Smart Card Shell comes bundled with the CardContact JNI2CTAPI and CTAPI4OCF drivers. These allow
   to access CT-API card terminals from OCF. JNI2CTAPI is a Java Native Interface to the CT-API dll or shared
   object provided by the card terminal manufacturer. CTAPI4OCF implements an OCF card terminal driver that
   maps OCF methods to CT-BCS card terminal commands.</p>
<p>A CT-API card terminal is added using the</p>
<pre>    de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory</pre>
<p>card terminal factory. This factory can be configured with four parameter separated by a '|'</p>
<pre>    |name|type|device|libname</pre>
<p>The parameter name is a user selected friendly name for the card terminal. The parameter type must contain
   'CTAPI'. The port number to be used in CT_INIT() is defined by the device field.</p>
<p>The name of the DLL or shared object is defined in the libname field. The name of the DLL or shared
   object must be given without extension or leading 'lib'.</p>
<p>The following example shows the configuration for 3 different CT-API card terminals:</p>
<pre>
# ORGA ECO 5000 with CardContact ECO5000 driver
OpenCard.terminals = \
 de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|ECO5000|CTAPI|1|cteco5000

# ORGA MCT 5000
OpenCard.terminals = \
 de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|MCT|CTAPI|1|ctorg32

# Reiner SCT CT-API Driver
OpenCard.terminals = \
 de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|REINERSCT|CTAPI|1|ctrsct32

# G+D ICT800 STD
OpenCard.terminals = \
 de.cardcontact.opencard.terminal.ctapi4ocf.CTAPICardTerminalFactory|ICT800|CTAPI|1|ctapiw32
</pre>
<p>If more than one CT-API card reader shall be added, then the factory and configuration must be
   given multiple times on the same line, separated by blanks. Entries can span multiple lines, if they end
   with a backslash as shown above.</p>
<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate --><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>CRL - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>CRL - Reference Documentation</h1>
        <p>
            <p>Class implementing support for Certificate Revocation Lists (CRL)</p>
                             
            <p>This class provides a wrapper for java.security.cert.X509CRL objects. All methods
                 from this Java class are available through the LiveConnect mechanism.</p>
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">CRL() constructor</a>
            </li>
            <li>
                <a href="#getNative">getNative()</a>
            </li>
        </ul>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">CRL(ByteString dercrl)</p>
        <p class="signature">CRL(String crlfile)</p>
        <h3>Description</h3>
        Create certificate revocation list object from DER encoded CRL
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>dercrl</td>
                <td>DER encoded certificate revocation list</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>crlfile</td>
                <td>
                    <p>Filename of file containing DER encoded certificate revocation list.</p>
                                      
                    <p>Unless an absolute file name is given, the path is relative to the location of the
                  script in which the constructor is called.</p>
                </td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The certificate revocation list has an invalid or unrecognized structure</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var crl = new CRL("root.crl");

var ncrl = crl.getNative();

print(ncrl.getVersion());


</pre>
        <h2 id="getNative">getNative()</h2>
        <h3>Prototype</h3>
        <p class="signature">java.security.X509CRL getNative()</p>
        <h3>Description</h3>
        <p>Return underlying native java.security.X509CRL object. All methods of the 
                     Java object are available through the LiveConnect mechanism.</p>
                             
        <p>For methods with return type byte[], as ByteString object is created.</p>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>java.security.X509CRL</code>
                </td>
                <td>Native Java object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var crl = new CRL("root.crl");
var ncrl = crl.getNative();

// Use Java native method to obtain version of CRL
print("Version: " + ncrl.getVersion());

// Call Java native method to obtain encoded format
var encoded = ncrl.getEncoded();

// Call Java native method get IssuerDN()
print("Issuer: " + ncrl.getIssuerDN());

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>Crypto - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>Crypto - Reference Documentation</h1>
        <p>Implements access to cryptographic services.</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">Crypto() constructor</a>
            </li>
            <li>
                <a href="#encrypt">encrypt()</a>
            </li>
            <li>
                <a href="#decrypt">decrypt()</a>
            </li>
            <li>
                <a href="#sign">sign()</a>
            </li>
            <li>
                <a href="#verify">verify()</a>
            </li>
            <li>
                <a href="#deriveKey">deriveKey()</a>
            </li>
            <li>
                <a href="#digest">digest()</a>
            </li>
            <li>
                <a href="#generateKeyPair">generateKeyPair()</a>
            </li>
            <li>
                <a href="#generateRandom">generateRandom()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA</td>
                <td>RSA algorithm</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_ISO9796_2</td>
                <td>RSA algorithm in ISO-9796-2 variant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_PKCS1</td>
                <td>RSA Encryption with PKCS#1 V1.5 padding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_OAEP</td>
                <td>RSA Encryption with OAEP padding using SHA-1 and MGF1</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_OAEP_SHA224</td>
                <td>RSA Encryption with OAEP padding using SHA-224 and MGF1</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_OAEP_SHA256</td>
                <td>RSA Encryption with OAEP padding using SHA-256 and MGF1</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_OAEP_SHA384</td>
                <td>RSA Encryption with OAEP padding using SHA-384 and MGF1</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_OAEP_SHA512</td>
                <td>RSA Encryption with OAEP padding using SHA-512 and MGF1</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_SHA1</td>
                <td>SHA-1 with RSA signature algorithm and PKCS#1 V1.5 encoding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_SHA224</td>
                <td>SHA-224 with RSA signature algorithm and PKCS#1 V1.5 encoding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_SHA256</td>
                <td>SHA-256 with RSA signature algorithm and PKCS#1 V1.5 encoding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_SHA384</td>
                <td>SHA-384 with RSA signature algorithm and PKCS#1 V1.5 encoding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_SHA512</td>
                <td>SHA-512 with RSA signature algorithm and PKCS#1 V1.5 encoding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_PSS_SHA1</td>
                <td>SHA-1 with RSA signature algorithm and PKCS#1 V1.5 encoding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_PSS_SHA224</td>
                <td>SHA-224 with RSA signature algorithm and PSS encoding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_PSS_SHA256</td>
                <td>SHA-256 with RSA signature algorithm and PSS encoding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_PSS_SHA384</td>
                <td>SHA-384 with RSA signature algorithm and PSS encoding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>RSA_PSS_SHA512</td>
                <td>SHA-512 with RSA signature algorithm and PSS encoding</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>EC</td>
                <td>Elliptic curve key operation</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECDSA</td>
                <td>Elliptic curve digital signature algorithm without hash</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECDSA_SHA1</td>
                <td>Elliptic curve digital signature algorithm using SHA-1</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECDSA_SHA224</td>
                <td>Elliptic curve digital signature algorithm using SHA-224</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECDSA_SHA256</td>
                <td>Elliptic curve digital signature algorithm using SHA-256</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECDSA_SHA384</td>
                <td>Elliptic curve digital signature algorithm using SHA-384</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECDSA_SHA512</td>
                <td>Elliptic curve digital signature algorithm using SHA-512</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECDH</td>
                <td>Elliptic curve Diffie-hellman algorithm</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECDHC</td>
                <td>Elliptic curve Diffie-hellman algorithm with cofactor</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECDHP</td>
                <td>Elliptic curve Diffie-hellman algorithm returning x and y coordinate of shared point</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>EC_MULTIPLY_ADD</td>
                <td>Elliptic curve point multiplication and addition</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>EC_MULTIPLY_SUB</td>
                <td>Elliptic curve point multiplication and substraction</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECELGAMAL</td>
                <td>ElGamal Decryption</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES_CBC</td>
                <td>Cipher Block Chaining encryption using DES</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES_ECB</td>
                <td>Electronic Cook Book encryption using DES</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>AES_CBC</td>
                <td>Cipher Block Chaining encryption using AES</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>AES_ECB</td>
                <td>Electronic Cook Book encryption using AES</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>AES_CTR</td>
                <td>Segmented Integer Counter (CTR) encryption using AES</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>AES_CMAC</td>
                <td>Message Authentication Code (MAC) acccording to NIST Special Publication 800-38B</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>MD5</td>
                <td>MD5 message digest algorithm</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SHA_1</td>
                <td>SHA-1 message digest algorithm</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SHA_224</td>
                <td>SHA-224 message digest algorithm</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SHA_256</td>
                <td>SHA-256 message digest algorithm</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SHA_384</td>
                <td>SHA-384 message digest algorithm</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SHA_512</td>
                <td>SHA-512 message digest algorithm</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES_MAC</td>
                <td>Message authentication code using 3DES for each block</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES_MAC_EMV</td>
                <td>Message authentication code using DES for each block and 3DES for final block (Retail MAC)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES_CBC_LP</td>
                <td>Variant of DES_CBC encryption used for wrap operations (Length || Key || ISOPadding)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES_CBC_P</td>
                <td>Variant of DES_CBC encryption used for wrap operations (Key || ISOPadding)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES_ECB_LP</td>
                <td>Variant of DES_ECB encryption used for wrap operations (Length || Key || ISOPadding)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES_ECB_P</td>
                <td>Variant of DES_ECB encryption used for wrap operations (Key || ISOPadding)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ISO9797_METHOD_1</td>
                <td>Padding method according to ISO 9797 with 8 byte block size</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ISO9797_METHOD_2</td>
                <td>Padding method according to ISO 9797 with 8 byte block size</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ISO9797_METHOD_1_16</td>
                <td>Padding method according to ISO 9797 with 16 byte block size</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ISO9797_METHOD_2_16</td>
                <td>Padding method according to ISO 9797 with 16 byte block size</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES</td>
                <td>Constant to denote a single length (56 bit) DES key in generateKey()</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES2</td>
                <td>Constant to denote a double length (112 bit) DES key in generateKey()</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES3</td>
                <td>Constant to denote a double length (168 bit) DES key in generateKey()</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>HMAC_SHA1</td>
                <td>Constant to denote a Hashmac using SHA-1</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>HMAC_SHA256</td>
                <td>Constant to denote a Hashmac using SHA-256</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>HMAC_SHA384</td>
                <td>Constant to denote a Hashmac using SHA-256</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>HMAC_SHAMD5</td>
                <td>Constant to denote a Hashmac using MD5</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">Crypto()</p>
        <p class="signature">Crypto(String provider)</p>
        <p class="signature">Crypto(String provider, String password)</p>
        <h3>Description</h3>
        Create a crypto object and bind it to the given cryptographic service provider.
                     If no provider is defined, then the default provider "BC" will be used.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>provider</td>
                <td>Name of cryptographic service provider (JCE Provider)</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>password</td>
                <td>Password to activated provider</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>On or more arguments are not of the expected type</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

crypto = new Crypto();
assert(crypto != null);

crypto = new Crypto("BC");
assert(crypto != null);


</pre>
        <h2 id="encrypt">encrypt()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString encrypt(Key key, Number mech, ByteString data)</p>
        <p class="signature">ByteString encrypt(Key key, Number mech, ByteString data, ByteString iv)</p>
        <h3>Description</h3>
                    
        <p>Encrypt the plain data using the algorithm defined by mech and the specified key.</p>
                    
        <p>The Crypto.RSA mechanism performs a plain RSA encrypt operation with no encoding format.</p>
                    
        <p>The Crypto.RSA_ISO9796_2 mechanism performs a plain RSA encrypt operation with no encoding format
               but according to ISO 9697-2. The result is less than half of the modulus.</p>
                    
        <p>The Crypto.PKCS1 mechanism performs a plain RSA encrypt operation with PKCS1 V1.5 encoding format.</p>
                    
        <p>The Crypto.OAEP_XXX mechanism performs a plain RSA encrypt operation with
               PKCS1 V2.1 OEAP encoding format using the selected message digest algorithm.</p>
                    
        <p>If the algorithm requires an initialisation vector, then the additional
               argument iv must be specified (DES_CBC, AES_CBC or AES_CTR).</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>Key object representing the key</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>mech</td>
                <td>Algorithm to be used to decryption. Must be one of
                                         Crypto.DES_CBC, Crypto.DES_ECB, Crypto.AES_CBC, Crypto.AES_ECB,
                                         Crypto.AES_ECB or Crypto.RSA.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>The data to be encrypted</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Returns the plain text value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>The mechanism is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Instantiate crypto service
var crypto = new Crypto();

// Define 3 different single DES key values
var key1 = new ByteString("7CA110454A1A6E57", HEX);
var key2 = new ByteString("0131D9619DC1376E", HEX);
var key3 = new ByteString("9DC1376E0131D961", HEX);

var plain = new ByteString("01A1D6D039776742", HEX);
var cipher;
var result;

// Create three single DES keys, a double DES key and a triple DES key
var deskey1 = new Key();
deskey1.setComponent(Key.DES, key1);

var deskey2 = new Key();
deskey2.setComponent(Key.DES, key2);

var deskey3 = new Key();
deskey3.setComponent(Key.DES, key3);

var des2key = new Key();
des2key.setComponent(Key.DES, key1.concat(key2));

var des3key = new Key();
des3key.setComponent(Key.DES, key1.concat(key2).concat(key3));


// Single DES ECB encrypt
cipher = new ByteString("690F5B0D9A26939B", HEX);

result = crypto.encrypt(deskey1, Crypto.DES_ECB, plain);
assert(result.equals(cipher));


// Single DES ECB decrypt
result = crypto.decrypt(deskey1, Crypto.DES_ECB, cipher);
assert(result.equals(plain));


// Double DES ECB encrypt
cipher = plain;
cipher = crypto.encrypt(deskey1, Crypto.DES_ECB, cipher);
cipher = crypto.decrypt(deskey2, Crypto.DES_ECB, cipher);
cipher = crypto.encrypt(deskey1, Crypto.DES_ECB, cipher);

result = crypto.encrypt(des2key, Crypto.DES_ECB, plain);
assert(result.equals(cipher));


// Double DES ECB decrypt
result = crypto.decrypt(des2key, Crypto.DES_ECB, cipher);
assert(result.equals(plain));


// Triple DES ECB encrypt
cipher = plain;
cipher = crypto.encrypt(deskey1, Crypto.DES_ECB, cipher);
cipher = crypto.decrypt(deskey2, Crypto.DES_ECB, cipher);
cipher = crypto.encrypt(deskey3, Crypto.DES_ECB, cipher);

result = crypto.encrypt(des3key, Crypto.DES_ECB, plain);
assert(result.equals(cipher));


// Triple DES ECB decrypt
result = crypto.decrypt(des3key, Crypto.DES_ECB, cipher);
assert(result.equals(plain));


// Single DES CBC encrypt
var plain = new ByteString("01A1D6D0397767423977674201A1D6D0", HEX);
var iv = new ByteString("59D9839733B8455D", HEX);
var v;

v = plain.bytes(0, 8);
v = v.xor(iv);
v = crypto.encrypt(deskey1, Crypto.DES_ECB, v);
cipher = v;

v = plain.bytes(8, 8);
v = cipher.xor(v);
v = crypto.encrypt(deskey1, Crypto.DES_ECB, v);
cipher = cipher.concat(v);

result = crypto.encrypt(deskey1, Crypto.DES_CBC, plain, iv);
assert(result.equals(cipher));


// Single DES CBC decrypt
result = crypto.decrypt(deskey1, Crypto.DES_CBC, cipher, iv);
assert(result.equals(plain));


// Encrypt and decrypt with AES key

var key = new Key();

// Make key a 128 bit AES key
key.setComponent(Key.AES, new ByteString("000102030405060708090a0b0c0d0e0f", HEX));
var plain = new ByteString("00112233445566778899aabbccddeeff", HEX);
var cipher = new ByteString("69c4e0d86a7b0430d8cdb78070b4c55a", HEX);

var result = crypto.encrypt(key, Crypto.AES_ECB, plain);
assert(cipher.equals(result));

var result = crypto.decrypt(key, Crypto.AES_ECB, cipher);
assert(plain.equals(result));


// Make key a 192 bit AES key
key.setComponent(Key.AES, new ByteString(
            "000102030405060708090a0b0c0d0e0f1011121314151617", HEX));
var plain = new ByteString("00112233445566778899aabbccddeeff", HEX);
var cipher = new ByteString("dda97ca4864cdfe06eaf70a0ec0d7191", HEX);
var result = crypto.encrypt(key, Crypto.AES_ECB, plain);
assert(cipher.equals(result));

var result = crypto.decrypt(key, Crypto.AES_ECB, cipher);
assert(plain.equals(result));


// Make key a 256 bit AES key
key.setComponent(Key.AES, new ByteString(
            "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", HEX));
var plain = new ByteString("00112233445566778899aabbccddeeff", HEX);
var cipher = new ByteString("8ea2b7ca516745bfeafc49904b496089", HEX);
var result = crypto.encrypt(key, Crypto.AES_ECB, plain);
assert(cipher.equals(result));

var result = crypto.decrypt(key, Crypto.AES_ECB, cipher);
assert(plain.equals(result));


// AES CTR mode
key.setComponent(Key.AES, new ByteString("2b7e151628aed2a6abf7158809cf4f3c", HEX));
var plain = new ByteString("6bc1bee22e409f96e93d7e117393172a", HEX);
var cipher = new ByteString("874d6191b620e3261bef6864990db6ce", HEX);
var iv = new ByteString("F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF", HEX);

var result = crypto.encrypt(key, Crypto.AES_CTR, plain, iv);
assert(cipher.equals(result));

var result = crypto.decrypt(key, Crypto.AES_CTR, cipher, iv);
assert(plain.equals(result));

// Decrypt and encrypt as basically the same in CTR mode
var result = crypto.encrypt(key, Crypto.AES_CTR, cipher, iv);
assert(plain.equals(result));


// RSA encrypt with plain input block

// Make RSA private key from modulus and private exponent

var rsaprkey = new Key();
rsaprkey.setType(Key.PRIVATE);

rsaprkey.setComponent(Key.MODULUS, new ByteString(
            "b4a7e46170574f16a97082b22be58b6a2a629798419be12872a4bdba626cfae9" +
            "900f76abfb12139dce5de56564fab2b6543165a040c606887420e33d91ed7ed7", HEX));
rsaprkey.setComponent(Key.EXPONENT, new ByteString(
            "9f66f6b05410cd503b2709e88115d55daced94d1a34d4e32bf824d0dde6028ae" +
            "79c5f07b580f5dce240d7111f7ddb130a7945cd7d957d1920994da389f490c89", HEX));

// Make RSA public key from modulus and public exponent

var rsapukey = new Key();
rsapukey.setType(Key.PUBLIC);
rsapukey.setComponent(Key.MODULUS, new ByteString(
            "b4a7e46170574f16a97082b22be58b6a2a629798419be12872a4bdba626cfae9"+
            "900f76abfb12139dce5de56564fab2b6543165a040c606887420e33d91ed7ed7", HEX));
rsapukey.setComponent(Key.EXPONENT, new ByteString("11", HEX));


var inp = new ByteString(
            "2600000000000000000000000000000000000000000000000000000000000000" +
            "0000000000000000000000000000000000000000000000000000000000000000", HEX);
assert(inp.length == 64);

var cipher = crypto.encrypt(rsaprkey, Crypto.RSA, inp);

print(cipher);

var plain = crypto.decrypt(rsapukey, Crypto.RSA, cipher);

print(plain);
assert(plain.equals(inp));


// RSA encrypt with OAEP padding

var inp = new ByteString("Message", ASCII);

var cipher = crypto.encrypt(rsapukey, Crypto.RSA_OAEP, inp);

print(cipher);

var plain = crypto.decrypt(rsaprkey, Crypto.RSA, cipher);

print("Decrypted OAEP block:");
print(plain);

assert(plain.byteAt(0) == 0);

var plain = crypto.decrypt(rsaprkey, Crypto.RSA_OAEP, cipher);
assert(plain.equals(inp));


//RSA encrypt with PKCS#1 V1.5 padding

var inp = new ByteString("Message", ASCII);

var cipher = crypto.encrypt(rsapukey, Crypto.RSA_PKCS1, inp);

print(cipher);

var plain = crypto.decrypt(rsaprkey, Crypto.RSA, cipher);

print("Decrypted PKCS#1 V1.5 block:");
print(plain);

assert(plain.byteAt(0) == 0);
assert(plain.byteAt(1) == 2);

var plain = crypto.decrypt(rsaprkey, Crypto.RSA_PKCS1, cipher);
assert(plain.equals(inp));


// Encrypt and decrypt with RSA primitive using ISO 9796-2 (DINSIG) variant that
// ensures that the numeric value of the output message is less than half of the
// modulus
var inp = new ByteString(
            "260000000000000000000000000000000000000000000000000000000000000" +
            "000000000000000000000000000000000000000000000000000000000000000BC", HEX);
assert(inp.length == 64);

var cipher = crypto.encrypt(rsaprkey, Crypto.RSA_ISO9796_2, inp);

print(cipher);

var plain = crypto.decrypt(rsapukey, Crypto.RSA_ISO9796_2, cipher);
assert(plain.equals(inp));

// Make RSA private key from CRT components stored in key profile

var rsaprkey = new Key("profiles/kp_rsa_private_crt.xml");

// Make RSA public key from modulus and public exponent stored in key profile

var rsapukey = new Key("profiles/kp_rsa_public.xml");

// rsaprkey.setComponent(Key.EXPONENT, rsapukey.getComponent(Key.EXPONENT));

var inp = new ByteString(
            "2600000000000000000000000000000000000000000000000000000000000000" +
            "0000000000000000000000000000000000000000000000000000000000000000", HEX);
assert(inp.length == 64);

var cipher = crypto.encrypt(rsaprkey, Crypto.RSA, inp);

print(cipher);

var plain = crypto.decrypt(rsapukey, Crypto.RSA, cipher);

print(plain);
assert(plain.equals(inp));

</pre>
        <h2 id="decrypt">decrypt()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString decrypt(Key key, Number mech, ByteString data)</p>
        <p class="signature">ByteString decrypt(Key key, Number mech, ByteString data, ByteString iv)</p>
        <h3>Description</h3>
                     
        <p>Decrypt the cipher in data using the algorithm defined by mech and the specified key.
                If the algorithm requires an initialisation vector, then the additional
                argument iv must be specified (DES_CBC, AES_CBC or AES_CTR).</p>
                    
        <p>The Crypto.RSA mechanism performs a plain RSA decrypt operation with no encoding format.</p>
                    
        <p>The Crypto.RSA_ISO9796_2 mechanism performs a plain RSA decrypt operation with no encoding format
               but according to ISO 9697-2.</p>
                    
        <p>The Crypto.PKCS1 mechanism performs a RSA decrypt operation with PKCS1 V1.5 encoding format.</p>
                    
        <p>The Crypto.OAEP_XXX mechanism performs a RSA decrypt operation with
               PKCS1 V2.1 OEAP encoding format using the selected message digest algorithm and MGF1.</p>
        			
        <p>This method can also be used to perform an ECDH or an ECDHC with cofactor primitive
                using a private EC key. The method treats the data as x and y coordinate of the
                EC public key from the sending party.</p>
        			
        <p>The Crypto.ECDH method return as result the x coordinate of the multiplication of the private key
                value d with the public point Q (result = xof(d * q))</p>
        			
        <p>The Crypto.ECDHC method returns as result the x coordinate of the multiplication of the private key
                value d with the cofactor h and the public point Q (result = xof(d * h * q)). The
                cofactor is a parameter of the curve.</p>
        			
        <p>The Crypto.ECDHP method returns as result the concatenation of the x and y coordinate
                of the multiplication of the private key value d with the public point Q (result = d * h * q).
                This method is a non-standard variant, only available with the default BouncyCastle crypto provider.</p>
        			
        <p>The ECDH decryption is a basic building block for cipher operations based on ECC.
                The result of the decrypt operation is a common secret, which can be either used
                directly as secret key or used as input to a key derivation process.</p>
        			
        <p>The Crypto.ECELGAMAL mechanism performs an ElGamal decrypt operation.
                The cryptogram is an ASN1 sequence containing the EC Points for blinding and cipher.
                 Each point is encoded as public key sequence.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>Key object representing the key</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>mech</td>
                <td>Algorithm to be used to decryption. Must be one of
                                         Crypto.DES_CBC, Crypto.DES_ECB, Crypto.AES_CBC,
                                         Crypto.AES_ECB, Crypto.AES_CTR, Crypto.RSA,
                                         Crypto.ECDH, Crypto.ECDHC, Crypto.ECDHP or Crypto.ECELGAMAL.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>The cryptogram</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Returns the plain text value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The data or initial vector provided is invalid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>The mechanism is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See encrypt() for a complete example using DES and RSA

// ECDH Generating a shared secret between Bob and Alice to exchange protected messages

var pubKeyBob = new Key();
pubKeyBob.setType(Key.PUBLIC);
pubKeyBob.setComponent(Key.ECC_CURVE_OID, new ByteString("1.2.840.10045.3.1.1", OID));

var priKeyBob = new Key();
priKeyBob.setType(Key.PRIVATE);
priKeyBob.setComponent(Key.ECC_CURVE_OID, new ByteString("1.2.840.10045.3.1.1", OID));
crypto.generateKeyPair(Crypto.EC, pubKeyBob, priKeyBob);

var pubKeyAlice = new Key();
pubKeyAlice.setType(Key.PUBLIC);
pubKeyAlice.setComponent(Key.ECC_CURVE_OID,
                                    new ByteString("1.2.840.10045.3.1.1", OID));

var priKeyAlice = new Key();
priKeyAlice.setType(Key.PRIVATE);
priKeyAlice.setComponent(Key.ECC_CURVE_OID,
                                    new ByteString("1.2.840.10045.3.1.1", OID));
crypto.generateKeyPair(Crypto.EC, pubKeyAlice, priKeyAlice);

var inputBob = pubKeyBob.getComponent(Key.ECC_QX).concat(
                                    pubKeyBob.getComponent(Key.ECC_QY));
var inputAlice = pubKeyAlice.getComponent(Key.ECC_QX).concat(
                                    pubKeyAlice.getComponent(Key.ECC_QY));


var secretAlice = crypto.decrypt(priKeyAlice, Crypto.ECDH, inputBob);
print(secretAlice);

var secretBob = crypto.decrypt(priKeyBob, Crypto.ECDH, inputAlice);
print(secretBob);

assert(secretBob.equals(secretAlice));


var secretAlice = crypto.decrypt(priKeyAlice, Crypto.ECDHC, inputBob);
print(secretAlice);

var secretBob = crypto.decrypt(priKeyBob, Crypto.ECDHC, inputAlice);
print(secretBob);

assert(secretBob.equals(secretAlice));


var secretAlice = crypto.decrypt(priKeyAlice, Crypto.ECDHP, inputBob);
print(secretAlice);

var secretBob = crypto.decrypt(priKeyBob, Crypto.ECDHP, inputAlice);
print(secretBob);

assert(secretBob.equals(secretAlice));

// ElGamal decryption

// Create dummy EC Points representing the ELGamal ciphertext pair of blinding and cipher

var blindingPoint = new Key();
blindingPoint.setType(Key.PUBLIC);
blindingPoint.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP320r1", OID));

var cipherPoint = new Key();
cipherPoint.setType(Key.PUBLIC);
cipherPoint.setComponent(Key.ECC_CURVE_OID, new ByteString("brainpoolP320r1", OID));

var priKey = new Key();
priKey.setType(Key.PRIVATE);

var crypto = new Crypto();
crypto.generateKeyPair(Crypto.EC, blindingPoint, priKey);
crypto.generateKeyPair(Crypto.EC, cipherPoint, priKey);

// Encode ciphertext pair

var blinding = new ByteString("04", HEX);
blinding = blinding.concat(blindingPoint.getComponent(Key.ECC_QX));
blinding = blinding.concat(blindingPoint.getComponent(Key.ECC_QY));

cipher = new ByteString("04", HEX);
cipher = cipher.concat(cipherPoint.getComponent(Key.ECC_QX));
cipher = cipher.concat(cipherPoint.getComponent(Key.ECC_QY));

var seq = new ASN1(ASN1.SEQUENCE);

var pubSeq = new ASN1(0x7F49);
pubSeq.add(new ASN1(0x06, new ByteString("brainpoolP320r1", OID)));
pubSeq.add(new ASN1(0x86, blinding));
seq.add(pubSeq);

var pubSeq = new ASN1(0x7F49);
pubSeq.add(new ASN1(0x06, new ByteString("brainpoolP320r1", OID)));
pubSeq.add(new ASN1(0x86, cipher));
seq.add(pubSeq);

// ElGamal decryption

var c = new Crypto();
var resp = c.decrypt(priKey, Crypto.ECELGAMAL, seq.getBytes());

print(new ASN1(resp));

</pre>
        <h2 id="sign">sign()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sign(Key key, Number mech, ByteString data)</p>
        <p class="signature">ByteString sign(Key key, Number mech, ByteString data, ByteString iv)</p>
        <h3>Description</h3>
                    
        <p>Sign the data provided using the mechanism and key specified. If the
               algorithms requires an initialisation vector, then it can be provided
               in the iv argument.</p>
                    
        <p>When the Crypto.RSA argument is supplied, then RSA with SHA-1 and PKCS#1 V1.5 encoding is used as
               signature algorithm. Crypto.RSA has the same effect as Crypto.RSA_SHA1.</p>
                    
        <p>When the Crypto.ECDSA argument is supplied, then ECDSA without a hash is used, i.e. the
               hash value must be provided as input.</p>
                    
        <p>A signature created using ECDSA is encoded in an ASN1 SEQUENCE object containing an
               INTEGER object r and s. See RFC3279 for details.</p>
                    
        <p>A method to convert a TLV encoded ECDSA signature into a binary concatenation
               of the x and y coordinate is provided in the tools/eccutils.js script.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>Key reference object to be used for signature generation</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mech</td>
                <td>Signature algorithm to be used. Must be one of Crypto.DES_MAC,
                                            Crypto.DES_MAC_EMV, Crypto.AES_MAC, Crypto.AES_CMAC, Crypto.RSA* or Crypto.ECDSA*.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>Input data for signature computation</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>iv</td>
                <td>Initialisation vector for symmetric algorithm</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Signature value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>The mechanism is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Instantiate crypto service
var crypto = new Crypto();


// Define 3 different single DES key values
var key1 = new ByteString("7CA110454A1A6E57", HEX);
var key2 = new ByteString("0131D9619DC1376E", HEX);
var key3 = new ByteString("9DC1376E0131D961", HEX);

var plain = new ByteString("Hello World !!!!", ASCII);
var cipher;
var result;


// Create three single DES keys, a double DES key and a triple DES key
var deskey1 = new Key();
deskey1.setComponent(Key.DES, key1);

var deskey2 = new Key();
deskey2.setComponent(Key.DES, key2);

var deskey3 = new Key();
deskey3.setComponent(Key.DES, key3);

var des2key = new Key();
des2key.setComponent(Key.DES, key1.concat(key2));

var des3key = new Key();
des3key.setComponent(Key.DES, key1.concat(key2).concat(key3));


// Triple DES MAC
cipher = crypto.encrypt(des3key, Crypto.DES_ECB, plain.bytes(0, 8));
cipher = cipher.xor(plain.bytes(8, 8));
cipher = crypto.encrypt(des3key, Crypto.DES_ECB, cipher);

result = crypto.sign(des3key, Crypto.DES_MAC, plain);
assert(result.equals(cipher));


// Triple DES MAC according to EMV (aka Retail MAC)
cipher = crypto.encrypt(deskey1, Crypto.DES_ECB, plain.bytes(0, 8));
cipher = cipher.xor(plain.bytes(8, 8));
cipher = crypto.encrypt(deskey1, Crypto.DES_ECB, cipher);
cipher = crypto.decrypt(deskey2, Crypto.DES_ECB, cipher);
cipher = crypto.encrypt(deskey1, Crypto.DES_ECB, cipher);

result = crypto.sign(des2key, Crypto.DES_MAC_EMV, plain);
assert(result.equals(cipher));


// AES MAC
// Make key a 128 bit AES key
var key = new Key();
key.setComponent(Key.AES, new ByteString("000102030405060708090a0b0c0d0e0f", HEX));
var plain = new ByteString("01234567890123456789012345678901", ASCII);
var cipher = crypto.encrypt(key, Crypto.AES_ECB, plain.bytes(0, 16));
cipher = cipher.xor(plain.bytes(16, 16));
var cipher = crypto.encrypt(key, Crypto.AES_ECB, cipher);

result = crypto.sign(key, Crypto.AES_MAC, plain);
assert(result.equals(cipher));


//AES CMAC
//Make key a 128 bit AES key
var key = new Key();
key.setComponent(Key.AES, new ByteString("2b7e151628aed2a6abf7158809cf4f3c", HEX));
var plain = new ByteString("6bc1bee22e409f96e93d7e117393172aae2d8a571" +
                           "e03ac9c9eb76fac45af8e5130c81c46a35ce411", HEX);
var mac = crypto.sign(key, Crypto.AES_CMAC, plain);
var ref = new ByteString("dfa66747de9ae63030ca32611497c827", HEX);
assert(ref.equals(mac));


// RSA with SHA-1
var rsaprkey = new Key("profiles/kp_rsa_private_crt.xml");
var rsapukey = new Key("profiles/kp_rsa_public.xml");

var message = new ByteString("Hello World !", ASCII);

var signature = crypto.sign(rsaprkey, Crypto.RSA, message);

print("Plain PKCS#1 V1.5 = " + crypto.decrypt(rsapukey, Crypto.RSA, signature));
assert(crypto.verify(rsapukey, Crypto.RSA, message, signature));

// RSA with SHA-224

var signature = crypto.sign(rsaprkey, Crypto.RSA_SHA224, message);

print("Plain PKCS#1 V1.5 = " + crypto.decrypt(rsapukey, Crypto.RSA, signature));
assert(crypto.verify(rsapukey, Crypto.RSA_SHA224, message, signature));

// RSA with SHA-256

var signature = crypto.sign(rsaprkey, Crypto.RSA_SHA256, message);

print("Plain PKCS#1 V1.5 = " + crypto.decrypt(rsapukey, Crypto.RSA, signature));
assert(crypto.verify(rsapukey, Crypto.RSA_SHA256, message, signature));

//RSA with SHA-1 and PSS

var signature = crypto.sign(rsaprkey, Crypto.RSA_PSS_SHA1, message);

print("Plain PSS = " + crypto.decrypt(rsapukey, Crypto.RSA, signature));
assert(crypto.verify(rsapukey, Crypto.RSA_PSS_SHA1, message, signature));


//Create empty public key object and set size
var rsapukey = new Key();
rsapukey.setType(Key.PUBLIC);
rsapukey.setSize(1024);

// Create empty private key object and set size
var rsaprkey = new Key();
rsaprkey.setType(Key.PRIVATE);

// Generate key pair
crypto.generateKeyPair(Crypto.RSA, rsapukey, rsaprkey);

//RSA with SHA-256 and PSS

var signature = crypto.sign(rsaprkey, Crypto.RSA_PSS_SHA256, message);

print("Plain PSS = " + crypto.decrypt(rsapukey, Crypto.RSA, signature));
assert(crypto.verify(rsapukey, Crypto.RSA_PSS_SHA256, message, signature));


// ECDSA Fp with SHA-1
var eccprkey = new Key("profiles/kp_ec_private.xml");
var eccpukey = new Key("profiles/kp_ec_public.xml");

var message = new ByteString("Hello World !", ASCII);

var signature = crypto.sign(eccprkey, Crypto.ECDSA_SHA1, message);

assert(crypto.verify(eccpukey, Crypto.ECDSA_SHA1, message, signature));


/*
// ECDSA F2m with SHA-1
var eccprkey = new Key("profiles/kp_ec_f2m_private.xml");
var eccpukey = new Key("profiles/kp_ec_f2m_public.xml");

var message = new ByteString("Hello World !", ASCII);

var signature = crypto.sign(eccprkey, Crypto.ECDSA_SHA1, message);

assert(crypto.verify(eccpukey, Crypto.ECDSA_SHA1, message, signature));
*/
// see Crypto.generateKeyPair for longer ECC keys


// HMAC
var msg = new ByteString("The quick brown fox jumps over the lazy dog", ASCII);
var key = new Key();
key.setComponent(Key.GENERIC, new ByteString("key", ASCII));

assert(crypto.sign(key, Crypto.HMAC_SHA1, msg).equals(new ByteString("de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9", HEX)));
assert(crypto.sign(key, Crypto.HMAC_SHA256, msg).equals(new ByteString("f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8", HEX)));
assert(crypto.sign(key, Crypto.HMAC_SHA384, msg).equals(new ByteString("D7F4727E2C0B39AE0F1E40CC96F60242D5B7801841CEA6FC592C5D3E1AE50700582A96CF35E1E554995FE4E03381C237", HEX)));
assert(crypto.sign(key, Crypto.HMAC_MD5, msg).equals(new ByteString("80070713463e7749b90c2dc24911e275", HEX)));

</pre>
        <h2 id="verify">verify()</h2>
        <h3>Prototype</h3>
        <p class="signature">Boolean verify(Key key, Number mech, ByteString data, ByteString signature)</p>
        <p class="signature">Boolean verify(Key key, Number mech, ByteString data, ByteString signature, ByteString iv)</p>
        <h3>Description</h3>
                    
        <p>Verify the signature applied to data with the mechanism and key specified</p>
                    
        <p>For ECDSA the signature must be TLV encoded as defined in RFC3279.</p>
                    
        <p>A method to convert a ECDSA signature encoded as binary concatenation
               of the x and y coordinate into the TLV format is provided in the tools/eccutils.js script.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>Key reference object to be used for signature verificaton</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mech</td>
                <td>Verification algorithm to be used. Must be one of Crypto.DES_MAC,
                                            Crypto.DES_MAC_EMV, Crypto.AES_MAC, Crypto.RSA* or Crypto.ECDSA*.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>Input data for signature computation</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>signature</td>
                <td>Signature to be verified</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>iv</td>
                <td>Initialisation vector for symmetric algorithm</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>True, if the signature was valid, false otherwise</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>The mechanism is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Instantiate crypto service
var crypto = new Crypto();

// Define 3 different single DES key values
var key1 = new ByteString("7CA110454A1A6E57", HEX);
var key2 = new ByteString("0131D9619DC1376E", HEX);
var key3 = new ByteString("9DC1376E0131D961", HEX);

var plain = new ByteString("Hello World !!!!", ASCII);
var cipher;
var result;

// Create three single DES keys, a double DES key and a triple DES key
var des1key = new Key();
des1key.setComponent(Key.DES, key1);

var des2key = new Key();
des2key.setComponent(Key.DES, key1.concat(key2));

var des3key = new Key();
des3key.setComponent(Key.DES, key1.concat(key2).concat(key3));

// Single DES MAC
result = crypto.sign(des1key, Crypto.DES_MAC, plain);
var ok = crypto.verify(des1key, Crypto.DES_MAC, plain, result);
assert(ok);

// Triple DES MAC
result = crypto.sign(des3key, Crypto.DES_MAC, plain);
var ok = crypto.verify(des3key, Crypto.DES_MAC, plain, result);
assert(ok);

// Triple DES MAC according to EMV (aka Retail MAC)
result = crypto.sign(des2key, Crypto.DES_MAC_EMV, plain);
var ok = crypto.verify(des2key, Crypto.DES_MAC_EMV, plain, result);
assert(ok);


// AES MAC
// Make key a 128 bit AES key
var key = new Key();
key.setComponent(Key.AES, new ByteString("000102030405060708090a0b0c0d0e0f", HEX));
var plain = new ByteString("01234567890123456789012345678901", ASCII);

result = crypto.sign(key, Crypto.AES_MAC, plain);
var ok = crypto.verify(key, Crypto.AES_MAC, plain, result);
assert(ok);


//AES CMAC
//Make key a 128 bit AES key
var key = new Key();
key.setComponent(Key.AES, new ByteString("000102030405060708090a0b0c0d0e0f", HEX));
var plain = new ByteString("01234567890123456789012345678901", ASCII);

result = crypto.sign(key, Crypto.AES_CMAC, plain);
var ok = crypto.verify(key, Crypto.AES_CMAC, plain, result);
assert(ok);


// RSA

var cert = new X509("root.cer");
var ncert = cert.getNative();

var message = ncert.getTBSCertificate();
var signature = ncert.getSignature();
var key = cert.getPublicKey();

assert(crypto.verify(key, Crypto.RSA, message, signature));


// ECDSA

var cert = new X509("ecdsacert.cer");
var key = cert.getPublicKey();

var message = new ByteString("Hello World", ASCII);

// Be carefull if the most significant bit of r or s is 1. In that case you need
// to add a 00 to prevent interpretation as negative integer
var r = new ByteString("06CF31FCE556DC74F7B0B3061E47300CC11B3F5BFD01976A", HEX);
var s = new ByteString("33F8D70EF472EEC8489CAA705837FA5F0156BF70CFD371FD", HEX);

var signature = new ASN1(ASN1.SEQUENCE);
signature.add(new ASN1(ASN1.INTEGER, r));
signature.add(new ASN1(ASN1.INTEGER, s));

assert(crypto.verify(key, Crypto.ECDSA_SHA1, message, signature.getBytes()));


</pre>
        <h2 id="deriveKey">deriveKey()</h2>
        <h3>Prototype</h3>
        <p class="signature">void deriveKey (Key masterKey, Number mech, ByteString data, Key derivedKey)</p>
        <h3>Description</h3>
                    
        <p>Derive key from a master key using the mechanism specified and data for diversification.</p>
                    
        <p>The resulting DES key is parity adjusted, so that the number of 1 bits in each byte
               of the key value is odd.</p>
                    
        <p>This method can be used to calculate a public key (point) by multiplying the point with a skalar
               value and adding a second point (EC_MULTIPLY_ADD). This method is used in the PACE protocol to determine
               a temporary generator point using the formular G' = s * G + P. The variant EC_MULTIPLY_SUB performs a substration
               instead of an addition.</p>
                    
        <p>The parameter G is the point from the masterKey, the point P is provided by the public key value in derivedKey and
               the skalar value s is provided in the argument data. The result is stored as public key value in derivedKey.</p>
                    
        <p>If the public point P is undefined, then only the skalar multiplication is performed. If the argument data
               is null, then only the point addition is performed.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>masterKey</td>
                <td>Master key to use for derivation algorithm</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mech</td>
                <td>Derivation algorithm. Must be Crypto.DES_CBC or Crypto.DES_ECB.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>Derivation data. The length of the derivation data determines the length
                        of the resulting key (8/16 or 24 Bytes). For method EC_MULTIPLY_ADD the argument
                        determines the skalar value. If data is null, then the skalar multiplication is skipped and
                        only the point addition is performed.</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>derivedKey</td>
                <td>The key object to store the resulting key value.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>None</code>
                </td>
                <td>The method does not return data</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Instantiate crypto service
var crypto = new Crypto();

// Create a single DES key, a double DES key and a triple DES key
var des1key = new Key("profiles/kp_single_des_1.xml");
var des2key = new Key("profiles/kp_double_des.xml");
var des3key = new Key("profiles/kp_triple_des.xml");

// Define derivation parameter
var dpara8  = new ByteString("0102030405060708", HEX);
var dpara16 = new ByteString("01020304050607081020304050607080", HEX);
var dpara24 = new ByteString("010203040506070810203040506070801122334455667788", HEX);

var derivedKey = new Key();
var reference;

// Derive a single DES key
crypto.deriveKey(des1key, Crypto.DES_ECB, dpara8, derivedKey);
reference = crypto.encrypt(des1key, Crypto.DES_ECB, dpara8);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a double DES key
crypto.deriveKey(des1key, Crypto.DES_ECB, dpara16, derivedKey);
reference = crypto.encrypt(des1key, Crypto.DES_ECB, dpara16);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a triple DES key
crypto.deriveKey(des1key, Crypto.DES_ECB, dpara24, derivedKey);
reference = crypto.encrypt(des1key, Crypto.DES_ECB, dpara24);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a single DES key
crypto.deriveKey(des2key, Crypto.DES_ECB, dpara8, derivedKey);
reference = crypto.encrypt(des2key, Crypto.DES_ECB, dpara8);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a double DES key
crypto.deriveKey(des2key, Crypto.DES_ECB, dpara16, derivedKey);
reference = crypto.encrypt(des2key, Crypto.DES_ECB, dpara16);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a triple DES key
crypto.deriveKey(des2key, Crypto.DES_ECB, dpara24, derivedKey);
reference = crypto.encrypt(des2key, Crypto.DES_ECB, dpara24);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a single DES key
crypto.deriveKey(des3key, Crypto.DES_ECB, dpara8, derivedKey);
reference = crypto.encrypt(des3key, Crypto.DES_ECB, dpara8);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a double DES key
crypto.deriveKey(des3key, Crypto.DES_ECB, dpara16, derivedKey);
reference = crypto.encrypt(des3key, Crypto.DES_ECB, dpara16);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a triple DES key
crypto.deriveKey(des3key, Crypto.DES_ECB, dpara24, derivedKey);
reference = crypto.encrypt(des3key, Crypto.DES_ECB, dpara24);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));


var iv = new ByteString("0000000000000000", HEX);

// Derive a single DES key
crypto.deriveKey(des1key, Crypto.DES_CBC, dpara8, derivedKey);
reference = crypto.encrypt(des1key, Crypto.DES_CBC, dpara8, iv);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a double DES key
crypto.deriveKey(des1key, Crypto.DES_CBC, dpara16, derivedKey);
reference = crypto.encrypt(des1key, Crypto.DES_CBC, dpara16, iv);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a triple DES key
crypto.deriveKey(des1key, Crypto.DES_CBC, dpara24, derivedKey);
reference = crypto.encrypt(des1key, Crypto.DES_CBC, dpara24, iv);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a single DES key
crypto.deriveKey(des2key, Crypto.DES_CBC, dpara8, derivedKey);
reference = crypto.encrypt(des2key, Crypto.DES_CBC, dpara8, iv);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a double DES key
crypto.deriveKey(des2key, Crypto.DES_CBC, dpara16, derivedKey);
reference = crypto.encrypt(des2key, Crypto.DES_CBC, dpara16, iv);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a triple DES key
crypto.deriveKey(des2key, Crypto.DES_CBC, dpara24, derivedKey);
reference = crypto.encrypt(des2key, Crypto.DES_CBC, dpara24, iv);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a single DES key
crypto.deriveKey(des3key, Crypto.DES_CBC, dpara8, derivedKey);
reference = crypto.encrypt(des3key, Crypto.DES_CBC, dpara8, iv);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a double DES key
crypto.deriveKey(des3key, Crypto.DES_CBC, dpara16, derivedKey);
reference = crypto.encrypt(des3key, Crypto.DES_CBC, dpara16, iv);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Derive a triple DES key
crypto.deriveKey(des3key, Crypto.DES_CBC, dpara24, derivedKey);
reference = crypto.encrypt(des3key, Crypto.DES_CBC, dpara24, iv);
assert(keyequals(derivedKey.getComponent(Key.DES), reference));

// Calculate a new point by multiplying G with skalar s and adding P.
// This method is used to implement PACE as defined by the
// Extended Access Control 2.x specification

var P = new Key();
P.setComponent(Key.ECC_CURVE_OID, new ByteString("1.3.36.3.3.2.8.1.1.5", OID));
P.setComponent(Key.ECC_QX, new ByteString(
            "A99D861875FDCAF2406B6CE4423C1FE2EB4396A8636CF039C723DDEE", HEX));
P.setComponent(Key.ECC_QY, new ByteString(
            "634A17EA9EC0DC8611EF51CDF46E8247C64A2B9F8ECFCE53B690ADC0", HEX));

var G = new Key();
G.setComponent(Key.ECC_CURVE_OID, new ByteString("1.3.36.3.3.2.8.1.1.5", OID));
G.setComponent(Key.ECC_QX, P.getComponent(Key.ECC_GX));
G.setComponent(Key.ECC_QY, P.getComponent(Key.ECC_GY));

var s = new ByteString("3924D2D1E31CE13C", HEX);

// Calculate G' = s * G + P
crypto.deriveKey(G, Crypto.EC_MULTIPLY_ADD, s, P);

// This method does not change the generator point directly, but the public key point
// in the derived key. For PACE the public key point ECC_QX/Y must be copied
// to ECC_GX/Y !
assert(P.getComponent(Key.ECC_QX).toString(HEX) ==
            "992042B9D17CBDFA5915EAE4292E62A3F6582071622371F47C2C717E");
assert(P.getComponent(Key.ECC_QY).toString(HEX) ==
            "16FC907BD3D87C7F45F56533DE33909A3A1D1E25487615284BC741E7");


var G1 = new Key();
G1.setType(Key.PUBLIC);
G1.setComponent(Key.ECC_CURVE_OID, new ByteString("1.3.36.3.3.2.8.1.1.5", OID));

var G = new Key();
G.setComponent(Key.ECC_CURVE_OID, new ByteString("1.3.36.3.3.2.8.1.1.5", OID));
G.setComponent(Key.ECC_QX, P.getComponent(Key.ECC_GX));
G.setComponent(Key.ECC_QY, P.getComponent(Key.ECC_GY));

var s = new ByteString("3924D2D1E31CE13C", HEX);

// Calculate G'' = s * G
crypto.deriveKey(G, Crypto.EC_MULTIPLY_ADD, s, G1);

var P = new Key();
P.setComponent(Key.ECC_CURVE_OID, new ByteString("1.3.36.3.3.2.8.1.1.5", OID));
P.setComponent(Key.ECC_QX, new ByteString(
            "A99D861875FDCAF2406B6CE4423C1FE2EB4396A8636CF039C723DDEE", HEX));
P.setComponent(Key.ECC_QY, new ByteString(
            "634A17EA9EC0DC8611EF51CDF46E8247C64A2B9F8ECFCE53B690ADC0", HEX));

//Calculate G'' = G'' + P
crypto.deriveKey(G1, Crypto.EC_MULTIPLY_ADD, null, P);

assert(P.getComponent(Key.ECC_QX).toString(HEX) ==
            "992042B9D17CBDFA5915EAE4292E62A3F6582071622371F47C2C717E");
assert(P.getComponent(Key.ECC_QY).toString(HEX) ==
            "16FC907BD3D87C7F45F56533DE33909A3A1D1E25487615284BC741E7");

</pre>
        <h2 id="digest">digest()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString digest(Number mech, ByteString data, Number iterations)</p>
        <h3>Description</h3>
        Calculate message digest for data using hash algorithm specified in argument mech.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mech</td>
                <td>Digest algorithm. Must be either Crypto.SHA_x or Crypto.MD5.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>Message to process</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>iterations</td>
                <td>Optional parameter defining the number of iterations to perform with the previous result as input for the next round (Default 1). This is an extension to the GP specification.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Message digest for given data</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>The mechanism is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var message = new ByteString("Hello World", ASCII);
var hash = crypto.digest(Crypto.SHA_1, message);
print("SHA1: " + hash);
var hash = crypto.digest(Crypto.MD5, message);
print("MD5: " + hash);


var message = new ByteString("", HEX);
var ref = new ByteString("da39a3ee5e6b4b0d3255bfef95601890afd80709", HEX);
var hash = crypto.digest(Crypto.SHA_1, message);
assert(ref.equals(hash));

var message = new ByteString("61", HEX);
var ref = new ByteString("86f7e437faa5a7fce15d1ddcb9eaeaea377667b8", HEX);
var hash = crypto.digest(Crypto.SHA_1, message);
assert(ref.equals(hash));

var message = new ByteString("616263", HEX);
var ref = new ByteString("a9993e364706816aba3e25717850c26c9cd0d89d", HEX);
var hash = crypto.digest(Crypto.SHA_1, message);
assert(ref.equals(hash));

var message = new ByteString(
            "6162636465666768696a6b6c6d6e6f707172737475767778797a", HEX);
var ref = new ByteString("32d10c7b8cf96570ca04ce37f2a19d84240d3a89", HEX);
var hash = crypto.digest(Crypto.SHA_1, message);
assert(ref.equals(hash));

var message = new ByteString("616263", HEX);
var ref = new ByteString(
            "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7", HEX);
var hash = crypto.digest(Crypto.SHA_224, message);
assert(ref.equals(hash));

var message = new ByteString("616263", HEX);
var ref = new ByteString(
            "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", HEX);
var hash = crypto.digest(Crypto.SHA_256, message);
assert(ref.equals(hash));

var message = new ByteString("616263", HEX);
var ref = new ByteString(
            "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded163" +
            "1a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7", HEX);
var hash = crypto.digest(Crypto.SHA_384, message);
assert(ref.equals(hash));

var message = new ByteString("616263", HEX);
var ref = new ByteString(
            "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" +
            "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f", HEX);
var hash = crypto.digest(Crypto.SHA_512, message);
assert(ref.equals(hash));



var message = new ByteString("", HEX);
var ref = new ByteString("d41d8cd98f00b204e9800998ecf8427e", HEX);
var hash = crypto.digest(Crypto.MD5, message);
assert(ref.equals(hash));

var message = new ByteString("61", HEX);
var ref = new ByteString("0cc175b9c0f1b6a831c399e269772661", HEX);
var hash = crypto.digest(Crypto.MD5, message);
assert(ref.equals(hash));

var message = new ByteString("616263", HEX);
var ref = new ByteString("900150983cd24fb0d6963f7d28e17f72", HEX);
var hash = crypto.digest(Crypto.MD5, message);
assert(ref.equals(hash));

var message = new ByteString(
            "6162636465666768696a6b6c6d6e6f707172737475767778797a", HEX);
var ref = new ByteString("c3fcd3d76192e4007dfb496cca67e13b", HEX);
var hash = crypto.digest(Crypto.MD5, message);
assert(ref.equals(hash));

</pre>
        <h2 id="generateKeyPair">generateKeyPair()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void generateKeyPair(Number mech, Key pubKey, Key priKey)</p>
        <h3>Description</h3>
                    
        <p>Generate an asymmetric key pair according to the specification from the
               public key object.</p>
                    
        <p>For RSA key, the key size must be defined using the Key.setSize() method.</p>
                    
        <p>For EC keys, the curve parameter must be set using the setComponent() method.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mech</td>
                <td>Type of key pair, must be either Crypto.RSA or Crypto.EC.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The type of key is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// RSA Example - Generate a 1024 bit RSA key pair

// Create empty public key object and set size
var pubKey = new Key();
pubKey.setType(Key.PUBLIC);
pubKey.setSize(1024);

// Create empty private key object and set size
var priKey = new Key();
priKey.setType(Key.PRIVATE);

// Generate key pair
crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);

// Extract key components...
var modulus = pubKey.getComponent(Key.MODULUS);
print("RSA Modulus:");
print(modulus);

var publicexponent = pubKey.getComponent(Key.EXPONENT);
print("RSA Public Exponent:");
print(publicexponent);

print("CRT prime P");
var crt_p = priKey.getComponent(Key.CRT_P);
print(crt_p);

print("CRT prime Q");
var crt_q = priKey.getComponent(Key.CRT_Q);
print(crt_q);

print("CRT prime exponent P");
var crt_dp = priKey.getComponent(Key.CRT_DP1);
print(crt_dp);

print("CRT prime exponent Q");
var crt_dq = priKey.getComponent(Key.CRT_DQ1);
print(crt_dq);

print("CRT coefficient pq");
var crt_pq = priKey.getComponent(Key.CRT_PQ);
print(crt_pq);

// ... and reassemble in newly created key
var pubKey = new Key();
pubKey.setType(Key.PUBLIC);
pubKey.setComponent(Key.MODULUS, modulus);
pubKey.setComponent(Key.EXPONENT, publicexponent);

var priKey = new Key();
priKey.setType(Key.PRIVATE);
priKey.setComponent(Key.CRT_P, crt_p);
priKey.setComponent(Key.CRT_Q, crt_q);
priKey.setComponent(Key.CRT_DP1, crt_dp);
priKey.setComponent(Key.CRT_DQ1, crt_dq);
priKey.setComponent(Key.CRT_PQ, crt_pq);
priKey.setComponent(Key.EXPONENT, publicexponent);

// Verify that keys still work
var message = new ByteString("Hello World", ASCII);

var cryptogram = crypto.sign(priKey, Crypto.RSA, message);

assert(crypto.verify(pubKey, Crypto.RSA, message, cryptogram));

// ECC Example - Generate a 192 bit key pair over the prime192v1 curve

// Create empty public key object
var pubKey = new Key();
pubKey.setType(Key.PUBLIC);

// Select prime192v1 curve using it's object identifier
pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString("1.2.840.10045.3.1.1", OID));

// Print out the curve parameter selected
print("Curve Fp:");
print(pubKey.getComponent(Key.ECC_P));
print("Curve A:");
print(pubKey.getComponent(Key.ECC_A));
print("Curve B:");
print(pubKey.getComponent(Key.ECC_B));
print("Parameter Gx:");
print(pubKey.getComponent(Key.ECC_GX));
print("Parameter Gy:");
print(pubKey.getComponent(Key.ECC_GY));
print("Parameter N:");
print(pubKey.getComponent(Key.ECC_N));
print("Parameter H:");
print(pubKey.getComponent(Key.ECC_H));

// Create empty private key object
var priKey = new Key();
priKey.setType(Key.PRIVATE);

// Generate key pair
crypto.generateKeyPair(Crypto.EC, pubKey, priKey);

// Extract and print private and public key values
print("Public Key Qx:");
var qx = pubKey.getComponent(Key.ECC_QX);
assert(qx.length == 24);
print(qx.toString(HEX));
var qy = pubKey.getComponent(Key.ECC_QY);
assert(qy.length == 24);
print("Public Key Qy:");
print(qy.toString(HEX));
var d = priKey.getComponent(Key.ECC_D);
print("Private Key D:");
print(d.toString(HEX));

// Reassemble keys
var pubKey = new Key();
pubKey.setType(Key.PUBLIC);
pubKey.setComponent(Key.ECC_QX, qx);
pubKey.setComponent(Key.ECC_QY, qy);
pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString("1.2.840.10045.3.1.1", OID));

var priKey = new Key();
priKey.setComponent(Key.ECC_D, d);
priKey.setComponent(Key.ECC_CURVE_OID, new ByteString("1.2.840.10045.3.1.1", OID));

// Test keys to verify integrity
var message = new ByteString("Hello World", ASCII);

var cryptogram = crypto.sign(priKey, Crypto.ECDSA_SHA1, message);

assert(crypto.verify(pubKey, Crypto.ECDSA_SHA1, message, cryptogram));


// ECC Example - Generate a 571 bit key pair over the secp521r1 curve

// Create empty public key object
var pubKey = new Key();
pubKey.setType(Key.PUBLIC);

// Select secp521r1 curve using it's object identifier
pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString("1.3.132.0.35", OID));

// Print out the curve parameter selected
print("Curve P:");
print(pubKey.getComponent(Key.ECC_P));
print("Curve A:");
print(pubKey.getComponent(Key.ECC_A));
print("Curve B:");
print(pubKey.getComponent(Key.ECC_B));
print("Parameter Gx:");
print(pubKey.getComponent(Key.ECC_GX));
print("Parameter Gy:");
print(pubKey.getComponent(Key.ECC_GY));
print("Parameter N:");
print(pubKey.getComponent(Key.ECC_N));
print("Parameter H:");
print(pubKey.getComponent(Key.ECC_H));

// Create empty private key object
var priKey = new Key();
priKey.setType(Key.PRIVATE);

// Generate key pair
crypto.generateKeyPair(Crypto.EC, pubKey, priKey);

// Extract and print private and public key values
print("Public Key Qx:");
var qx = pubKey.getComponent(Key.ECC_QX);
assert(qx.length == 66);
print(qx.toString(HEX));
var qy = pubKey.getComponent(Key.ECC_QY);
assert(qy.length == 66);
print("Public Key Qy:");
print(qy.toString(HEX));
var d = priKey.getComponent(Key.ECC_D);
print("Private Key D:");
print(d.toString(HEX));

// Reassemble keys
var pubKey = new Key();
pubKey.setType(Key.PUBLIC);
pubKey.setComponent(Key.ECC_QX, qx);
pubKey.setComponent(Key.ECC_QY, qy);
pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString("1.3.132.0.35", OID));

var priKey = new Key();
priKey.setComponent(Key.ECC_D, d);
priKey.setComponent(Key.ECC_CURVE_OID, new ByteString("1.3.132.0.35", OID));

// Test keys to verify integrity
var message = new ByteString("Hello World", ASCII);

var cryptogram = crypto.sign(priKey, Crypto.ECDSA_SHA512, message);

assert(crypto.verify(pubKey, Crypto.ECDSA_SHA512, message, cryptogram));


var pubKey = new Key();
pubKey.setType(Key.PUBLIC);
// Select secp224k1 curve using it's object identifier
pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString("secp224k1", OID));

print("Curve P:");
print(pubKey.getComponent(Key.ECC_P));
print("Curve A:");
print(pubKey.getComponent(Key.ECC_A));
print("Curve B:");
print(pubKey.getComponent(Key.ECC_B));
print("Parameter Gx:");
print(pubKey.getComponent(Key.ECC_GX));
print("Parameter Gy:");
print(pubKey.getComponent(Key.ECC_GY));
print("Parameter N:");
print(pubKey.getComponent(Key.ECC_N));
print("Parameter H:");
print(pubKey.getComponent(Key.ECC_H));

// Create empty private key object
var priKey = new Key();
priKey.setType(Key.PRIVATE);

// Generate key pair
crypto.generateKeyPair(Crypto.EC, pubKey, priKey);

// Test keys to verify integrity
var message = new ByteString("Hello World", ASCII);

var cryptogram = crypto.sign(priKey, Crypto.ECDSA_SHA224, message);

assert(crypto.verify(pubKey, Crypto.ECDSA_SHA224, message, cryptogram));

</pre>
        <h2 id="generateRandom">generateRandom()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString generateRandom(Number length)</p>
        <h3>Description</h3>
        Generate a ByteString of given length with random data
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>length</td>
                <td>Number of random bytes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Returns length bytes of random data</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var val1 = crypto.generateRandom(10);
assert(val1.length == 10);

var val2 = crypto.generateRandom(10);
assert(val2.length == 10);

assert(val1 != val2);

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>Card - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>Card - Reference Documentation</h1>
        <p>CryptoScript interpreter</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">Card() constructor</a>
            </li>
            <li>
                <a href="#isEmpty">isEmpty()</a>
            </li>
            <li>
                <a href="#getStack">getStack()</a>
            </li>
            <li>
                <a href="#push">push()</a>
            </li>
            <li>
                <a href="#top">top()</a>
            </li>
            <li>
                <a href="#pop">pop()</a>
            </li>
            <li>
                <a href="#record">record()</a>
            </li>
            <li>
                <a href="#collect">collect()</a>
            </li>
            <li>
                <a href="#eval">eval()</a>
            </li>
            <li>
                <a href="#dup">dup()</a>
            </li>
            <li>
                <a href="#swap">swap()</a>
            </li>
            <li>
                <a href="#concat">concat()</a>
            </li>
            <li>
                <a href="#range">range()</a>
            </li>
            <li>
                <a href="#xor">xor()</a>
            </li>
            <li>
                <a href="#sha1">sha1()</a>
            </li>
            <li>
                <a href="#sha256">sha256()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>ByteString</td>
                <td>response</td>
                <td>Last response APDU received from ICC</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">CryptoScript(Key key, Number stacksize)</p>
        <h3>Description</h3>
                    
        <p>Create a new CryptoScript interpreter bound to a key with a given stack size.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>The key object for which the script shall be executed</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>stacksize</td>
                <td>The number of bytes allocated for the execution stack</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var key = new Key();
var csi = new CryptoScript(key, 1000);

</pre>
        <h2 id="isEmpty">isEmpty()</h2>
        <h3>Prototype</h3>
        <p class="signature">boolean isEmpty</p>
        <h3>Description</h3>
                    
        <p>Return true if stack is empty</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>True if stack is empty</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

assert(csi.isEmpty());

</pre>
        <h2 id="getStack">getStack()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString[] getStack()</p>
        <h3>Description</h3>
                    
        <p>Return the current evaluation stack, with the topmost stack entry in index 0 of the array.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString[]</code>
                </td>
                <td>List of stack elements</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var stack = csi.getStack();
assert(stack.length == 0);

</pre>
        <h2 id="push">push()</h2>
        <h3>Prototype</h3>
        <p class="signature">push(ByteString value)</p>
        <h3>Description</h3>
                    
        <p>Push a byte string onto the stack</p>
                    
        <p>This method records an op code if recording is enabled with record().</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>The ByteString to push onto the stack</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var ref = new ByteString("012345", HEX);
csi.push(ref);
var stack = csi.getStack();
assert(stack.length == 1);
assert(stack[0].equals(ref));
csi.pop();
assert(csi.isEmpty());

</pre>
        <h2 id="top">top()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString top()</p>
        <h3>Description</h3>
                    
        <p>Return copy of topmost stack element</p>
                    
        <p>This method records an op code if recording is enabled with record().</p>
                    
        <p>For convenience, this method returns the topmost element, while in the
               SmartCard-HSM the topmost element is only removed, but not returned anywhere.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Copy of the topmost element on the stack</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

csi.push(ref);
assert(csi.top().equals(ref), "top() failed");
csi.pop();
assert(csi.isEmpty());

</pre>
        <h2 id="pop">pop()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString pop()</p>
        <h3>Description</h3>
                    
        <p>Take topmost element from stack</p>
                    
        <p>This method does not record an op code.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Copy of the topmost element on the stack</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

csi.push(ref);
assert(csi.pop().equals(ref), "pop() failed");

</pre>
        <h2 id="record">record()</h2>
        <h3>Prototype</h3>
        <p class="signature">record()</p>
        <h3>Description</h3>
                    
        <p>Start recording the op code sequence for later retrieval using collect().</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See collect() for an example

</pre>
        <h2 id="collect">collect()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString collect()</p>
        <h3>Description</h3>
                    
        <p>Collect sequence of op codes generated after calling record.</p>
                    
        <p>The resulting byte string can be executed using eval() or the CryptoScript interpreter in the
               SmartCard-HSM.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Sequence of op codes</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var ref = new ByteString("012345", HEX);

// Start recording op codes
csi.record();

// Push reference and record op code
csi.push(ref);

// Collect all recorded op codes
var code = csi.collect();

// Element is still on stack
assert(csi.pop().equals(ref));
assert(csi.isEmpty());

// Playback recorded op code sequence
csi.eval(code);

// Result must be the same
assert(csi.pop().equals(ref));
assert(csi.isEmpty());

</pre>
        <h2 id="eval">eval()</h2>
        <h3>Prototype</h3>
        <p class="signature">eval(ByteString sequence)</p>
        <h3>Description</h3>
                    
        <p>Evaluate a secure of op codes recorded with collect()</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>sequence</td>
                <td>Sequence of op codes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

//Do nothing
csi.eval(new ByteString("0000", HEX));

</pre>
        <h2 id="dup">dup()</h2>
        <h3>Prototype</h3>
        <p class="signature">dup()</p>
        <h3>Description</h3>
                    
        <p>Duplicate topmost stack element.</p>
                    
        <p>This method records an op code if recording is enabled with record().</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

csi.record();

csi.push(ref);
csi.dup();

var code = csi.collect();

csi.pop().equals(ref);
csi.pop().equals(ref);
assert(csi.isEmpty());

// Replay
csi.eval(code);

csi.pop().equals(ref);
csi.pop().equals(ref);
assert(csi.isEmpty());

</pre>
        <h2 id="swap">swap()</h2>
        <h3>Prototype</h3>
        <p class="signature">swap()</p>
        <h3>Description</h3>
                    
        <p>Swap two topmost stack elements.</p>
                    
        <p>This method records an op code if recording is enabled with record().</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

csi.record();

var ref2 = new ByteString("Hello", ASCII);

csi.push(ref);
csi.push(ref2);
csi.swap();

var code = csi.collect();

csi.pop().equals(ref);
csi.pop().equals(ref2);
assert(csi.isEmpty());

//Replay
csi.eval(code);

csi.pop().equals(ref);
csi.pop().equals(ref2);
assert(csi.isEmpty());

</pre>
        <h2 id="concat">concat()</h2>
        <h3>Prototype</h3>
        <p class="signature">concat()</p>
        <h3>Description</h3>
                    
        <p>Concat two topmost stack elements.</p>
                    
        <p>This method records an op code if recording is enabled with record().</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

csi.record();

var ref1 = new ByteString("My ", ASCII);
var ref2 = new ByteString("first ", ASCII);
var ref3 = new ByteString("CryptoScript", ASCII);

csi.push(ref1);
csi.push(ref2);
csi.push(ref3);
csi.concat();
csi.top().toString(ASCII).equals("first CryptoScript");
csi.concat();

var code = csi.collect();

csi.pop().equals(new ByteString("My first CryptoScript", ASCII));
assert(csi.isEmpty());

//Replay
csi.eval(code);

csi.pop().equals(new ByteString("My first CryptoScript", ASCII));
assert(csi.isEmpty());

</pre>
        <h2 id="range">range()</h2>
        <h3>Prototype</h3>
        <p class="signature">range(from, length)</p>
        <h3>Description</h3>
                    
        <p>Extract the range of bytes from the topmost operand on the stack.</p>
                    
        <p>A positive value in from denotes the 0-based offset in the byte array. A negative
               value denotes the offset relative to the end of the byte array, i.e. a value of 
               -1 denotes the last byte in the array.</p>
                    
        <p>This method records an op code if recording is enabled with record().</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

csi.record();

var op = new ByteString("010203", HEX);

csi.push(op);
csi.range(0, 1);
assert(csi.pop().equals(op.left(1)));

csi.range(1, 1);
assert(csi.pop().equals(op.bytes(1, 1)));

csi.range(2, 1);
assert(csi.pop().equals(op.bytes(2, 1)));

csi.range(-1, 1);
assert(csi.pop().equals(op.right(1)));

csi.pop();
assert(csi.isEmpty());

var code = csi.collect();
print(code);

//Replay
csi.eval(code);

assert(csi.isEmpty());

</pre>
        <h2 id="xor">xor()</h2>
        <h3>Prototype</h3>
        <p class="signature">xor()</p>
        <h3>Description</h3>
                    
        <p>XOR the two topmost operands on the stack.</p>
                    
        <p>The resulting operand has the same size than the longer operands.
               The short operand is repeated as often as required to process the
               longer operand.</p>
                    
        <p>This method records an op code if recording is enabled with record().</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

csi.record();

var opA5 = new ByteString("A5", HEX);
var opA5s = new ByteString("A5A5A5", HEX);
var op0 = new ByteString("000000", HEX);

csi.push(opA5);
csi.dup();
csi.xor();

assert(csi.pop().equals(op0.left(1)));
assert(csi.isEmpty());


csi.push(opA5s);
csi.push(opA5);
csi.xor();

assert(csi.pop().equals(op0));
assert(csi.isEmpty());


csi.push(opA5);
csi.push(opA5s);
csi.xor();

assert(csi.pop().equals(op0));
assert(csi.isEmpty());

var code = csi.collect();
print(code);

//Replay
csi.eval(code);

assert(csi.isEmpty());

</pre>
        <h2 id="sha1">sha1()</h2>
        <h3>Prototype</h3>
        <p class="signature">sha1()</p>
        <h3>Description</h3>
                    
        <p>Apply SHA-1 digest to topmost element on the stack and push result.</p>
                    
        <p>This method records an op code if recording is enabled with record().</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

csi.record();

var ref = new ByteString("Hello World", ASCII);
csi.push(ref);
csi.sha1();

var crypto = new Crypto();
var digest = crypto.digest(Crypto.SHA_1, ref);

var code = csi.collect();
print(code);

assert(csi.pop().equals(digest));
csi.pop();
assert(csi.isEmpty());

//Replay
csi.eval(code);

assert(csi.pop().equals(digest));
csi.pop();
assert(csi.isEmpty());

</pre>
        <h2 id="sha256">sha256()</h2>
        <h3>Prototype</h3>
        <p class="signature">sha1()</p>
        <h3>Description</h3>
                    
        <p>Apply SHA-256 digest to topmost element on the stack and push result.</p>
                    
        <p>This method records an op code if recording is enabled with record().</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

csi.record();

var ref = new ByteString("Hello World", ASCII);
csi.push(ref);
csi.sha256();

var crypto = new Crypto();
var digest = crypto.digest(Crypto.SHA_256, ref);

var code = csi.collect();
print(code);

assert(csi.pop().equals(digest));
csi.pop();
assert(csi.isEmpty());

//Replay
csi.eval(code);

assert(csi.pop().equals(digest));
csi.pop();
assert(csi.isEmpty());

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>Dialog - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>Dialog - Reference Documentation</h1>
        <p>
            <p>Class implementing simple user dialogs for scripts</p>
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">Dialog() constructor</a>
            </li>
            <li>
                <a href="#prompt">prompt()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>java.swing.JFrame</td>
                <td>frame</td>
                <td>The parent for dialogs</td>
            </tr>
        </table>
        <h2 id="prompt">prompt()</h2>
        <h3>Prototype</h3>
        <p class="signature">String prompt(message)</p>
        <p class="signature">String prompt(message, defaultValue)</p>
        <p class="signature">String prompt(message, defaultValue, selectionList)</p>
        <p class="signature">String prompt(message, defaultValue, selectionList, fileFilter)</p>
        <h3>Description</h3>
                    
        <p>Show a modal dialog and prompt user to enter or select a value.</p>
                    
        <p>The variant with a single argument shows the message and allows the user
               to press "OK" or "Cancel".</p>
                    
        <p>Specifying a default value allows the user to enter some data.</p>
                    
        <p>Specifying a default value "*" allows the user to enter a PIN or password.
               The PIN or password entered is returned as String. For enhanced security use "**" as default
               values in which case the resulting PIN or password is returned as ByteString. The ByteString can be
               zeroized using the clear() method after the entered value has been processed.</p>
                    
        <p>A selection list extends the text entry with a drop-down list of
               possible options. The user may still enter a different value.</p>
                    
        <p>Specifying a file filter will create a "Browse..." button that allows
               the user to pick a name from a file selection dialog. Selection of
               files and directories are allowed.</p>
                    
        <p>The file filter can be specified as regular expression ("/.*\.txt/") or simple
               file extension (e.g. "txt", ".txt" or "*.txt").</p>
                    
        <p>The file filter is only applied to file names, but not to directories.</p>
                    
        <p>When a file filter is specified, the selectionList parameter may be null.</p>
                    
        <p>The message argument may be plain text or well formed HTML code.</p>
                    
        <p>If the user aborts the dialog, then null is returned.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>message</td>
                <td>The text to display in the dialog</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>defaultValue</td>
                <td>The value to preset the input field with</td>
            </tr>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>selectionList</td>
                <td>List of values the user may select from or null</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>fileFilter</td>
                <td>File filter for file selection dialog</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>The value "OK" or the entered value or null if cancel was pressed</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


var s = Dialog.prompt("Hello World. Press OK");
assert(s == "OK");

var s = Dialog.prompt("Hello World. Press CANCEL");
assert(s == null);

var s = Dialog.prompt("Hello World. Enter 'OK'", "");
assert(s == "OK");

var s = Dialog.prompt("Enter password and press 'OK'", "*");
assert(typeof(s) == "string");

var s = Dialog.prompt("Enter password and press 'OK'", "**");
assert(s instanceof ByteString);

var s = Dialog.prompt("Hello World. Press CANCEL", "");
assert(s == null);

var s = Dialog.prompt("&lt;html&gt;&lt;p&gt;Hello World.&lt;/p&gt;&lt;p&gt;Enter &lt;b&gt;'OK'&lt;/b&gt;&lt;/p&gt;&lt;/html&gt;", "This is a very long text to see if all of it is displayed correctly. Replace this with 'OK'");
assert(s == "OK");

var s = Dialog.prompt("Hello World. Select 'OK'", "", ["A", "OK", "C"]);
assert(s == "OK");

var s = Dialog.prompt("Hello World. Select 'OK'", "Not OK", ["A", "OK", "C"]);
assert(s == "OK");

var s = Dialog.prompt("Hello World. Select a file", "c:/tmp", null, "*.txt");
assert(s != null);

print("Selected File : " + s);

var s = Dialog.prompt("Hello World. Press CANCEL", "c:/tmp", null, "*.txt");
assert(s == null);

var s = Dialog.prompt("Hello World. Select a file", "", ["c:/tmp", "d:/tmp"], "*.txt");
assert(s != null);

print("Selected File : " + s);

var s = Dialog.prompt("Hello World. Select a file", "", ["c:/tmp", "d:/tmp"], "/.*\.txt/");
assert(s != null);

print("Selected File : " + s);

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?>
    

    
    
        
            
            
                h2 { margin-top:1cm; }            
                h1 { margin-top:0.5cm; }            
            
                 - Reference Documentation
            
            
                 - Reference Documentation

                <p/>

                Index of Methods
                
                    <a href="#Constructor">() constructor</a>
                    
                
                
                
                    Constants
                    
                        
                            
                            
                            
                        
                        TypeNameDescription
                        
                            
                        
                    
                
                
                
                    Properties
                    
                        
                            
                            
                            
                        
                        TypeNameDescription
                        
                            
                        
                    
                
                
                
                    Constructor
                    
                
                
                

            
        
    
    
    
    

        Prototype
        

        Description
        

        
            
        
            
        

        Example
        
    

    
    
        <a href="">#()</a>
    
    
        
    

        ()

        Prototype
        

        Description
        

        
            
        
        
        Return
        
            
                
                
            
            
        
        
        
        
        Example
        
    

    
    
        Arguments
        
            
                
                
                
            
            TypeNameDescription
            
        
    
    
    
    
        
    
    
    
    
        Exceptions
        
            
                
                
                
            
            NameValueDescription
            
        
    
    
    
    
        
    
    
    
    
      
    

    
    
        
    
    
    
    
        <p/>
    

    
        <a href=""/>
    
    
    
        <b/>
    

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
    <h1>Download</h1>
    <p>The Smart Card Shell is provided as IzPack installer and as a zipped file archive. The IzPack installer can be used
		on Windows, Linux and MacOS systems and is supplied as a self-contained jar archive. Just double-click on the jar
		file or enter <code>java -jar scsh3.x.y.jar</code>.</p>
	<p>The zipped file archive contains a ready to run setup. Just unpack on your disk and start the application with the
		provided .exe, .cmd or shell files.</p>
	<p>The second zip contains a bundled Java 17 JRE for Windows 64.</p>
    <h2>Latest stable version is 3.18.77</h2>
    <ul>
      <li><a href="../download/scsh3/scsh-3.18.77-installer.jar">IzPack Installer (.jar, 18MB)</a></li>
      <li><a href="../download/scsh3/scsh-3.18.77.zip">File Archive (.zip, 18MB)</a></li>
      <li><a href="../download/scsh3/scsh-withJRE-3.18.77.zip">File Archive with bundled Java 17 JRE(.zip, 60MB)</a></li>
    </ul>
    <p>See <a href="changes.html">CHANGES</a> for the list of things that changed in this release.</p>
    <p>The source code is available at the <a href="http://www.cardcontact.de/cdn/about.html">CardContact Developers Network</a>.</p>
<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
<h2>Locating Files</h2>
<p>When calling load() to execute ECMAScripts, then the file name can be given
   with either an absolute or a relative path. An absolute path starts at the root of the file
   system, e.g. "C:\" on Windows or "/" on a UNIX like system. It uniquely identifies the file on
   the host system and requires no additional processing. However, specifying a relative file
   path allows a more flexible setup of script files and directories, in particular if scripts
   shall be reused or run on systems with different directory configurations.</p>
<p>The shell maintains 3 different directories</p>
<ul>
  <li>a current working directory (CWD)</li>
  <li>a workspace directory (USR)</li>
  <li>and a system directory (SYS)</li>
</ul>
<p>When a relative file name given, then the file is first searched relative to the current
   working directory. If it can not be found, then the workspace directory and finally the
   system directory is examined. If it can not be found in either location, then an error is
   returned.</p>
<p>The system directory (SYS) is determined by the location of the shell executable file and does not
   change once the shell is started. The location of the executable is usually selected
   during installation (Installation directory, e.g. "c:\Program Files\CardContact\Smart Card Shell 3")
   and read/only for users that do not have administration privileges.</p>
<p>The workspace directory (USR) is selected by the user when the shell is started. This directory usually
   contains the initial CONFIG.JS file, which provides for the initial shell configuration.</p>
<p>The GUI version of the shell provides a dialog to select the workspace, in the command line
   version the workspace directory is determined by the directory from which the shell is
   executed (Not to confuse with the system directory, which is the location of the executable itself !)</p>
<p>Initially the current working directory (CWD) is set to the workspace directory (USR).
   Before a script file is loaded and executed, the current working directory is changed
   to the directory where the script was found. When calling a script from within another
   script, the location of the subordinate script is again determined by a search for the
   file in the current working directory, the workspace directory and the system directory.
   After the script terminated, the previous current working directory is restored.</p>
<h3>Locating modules</h3>
<p>Modules are scripts included with the require() statement as defined in the modules specification of <a href="http://www.commonjs.org/">CommonJS</a></p>
<p>A module id is translated into a file name by adding ".js" and searching the three directories CWD, USR and SYS</p>
<p>If a module is found, then the script is loaded and executed, but in contrast to scripts executed mit load(), the
   current working directory is not changed, but remains the CWD of the last script executed with load().</p>
<h3>Common pitfalls</h3>
<p>Care should be taken when script files have the same name but reside in different directories.
   File name resolution for a relative file path always starts with the current working
   directory, which is determined by the location of the script that is containing the load()
   statement. Therefore a script executed from the system directory has the current working
   directory set to the system directory and will therefore find files in this location first.
   Only if the included file can not be found in the current working directory, then the user and
   system directories are searched in turn. Overwriting a file in the system directory with a file
   of the same name in the user directory has no effect, if this file is included from a script in the
   system directory.</p>
<p>If you want to select a specific file, you should use the <a href="gpsystem.html#mapFilename">GPSystem.mapFilename()</a>
   method to obtain an absolute path for use in the load() statement.</p>
<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate --><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3 - Getting Started</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
<h1>Getting Started</h1>
<p>At this point you should have installed the Smart Card Shell. If not, please have a look
   at the <a href="installation.html">installation instructions</a>.</p>
<p>After you started the Smart Card Shell and selected a working directory, you will see
   a window divided into two panes. The left pane will be empty and the right pane will show a
   text area, which works as a console and is the main user interface of the Smart Card Shell.</p>
<p>The left pane is called the outline. It will be filled with informations generated when you
   run scripts. You can drag the divider between the two panes and change the amount of space
   allocated to the outline and the text area.</p>
<p>To end the shell, you can either enter "quit" into the text area or select "Exit" from the "File"
   menu.</p>
<h2>Quick Start</h2>
<p>Insert a smart card into your reader and enter:</p>
<pre>
&gt r
</pre>
<p>If everythings is installed correctly, then you should see the Answer to Reset (ATR) for your card.</p>
<p>If you feel like more, try</p>
<pre>
&gt load("tools/explore.js");
</pre>
<p>and see for yourself.</p>
<h2>Understanding the Shell Concept</h2>
<p>The Smart Card Shell uses a JavaScript interpreter and compiler to execute scripts. JavaScript is a
typeless, object-oriented programming language commonly used in web browsers for active HTML pages.
The language syntax is very similar to Java and C.</p>
<p>The shell is directly connected to the JavaScript interpreter, so any input in the text area
must be valid JavaScript code. Whenever you enter a command into the shell, this command is evaluated
by the interpreter, executed and the resulting value displayed to the user. Give it a try and enter:</p>
<pre>
&gt 1000 + 2000
</pre>
<p>After pressing ENTER the shell will display</p>
<pre>
3000
&gt
</pre>
<p>and is ready to accept the next command.</p>
<p>Invoking functions is as simple. To print something on the command line or from within a script
   you can invoke the print() function. The print() function will print all passed arguments separated
   by a whitespace and a final line break.</p>
<pre>
&gt print("Value", 100, 200);
</pre>
<p>will result in</p>
<pre>
Value 100 200
&gt
</pre>
<p>When entering a function name without parentheses, the shell will invoke this function with the
   result of the previous command as argument. This can be quite handy, if you define functions which
   shall continue processing on the output of the previous function. However this functionality is
   only available when entering commands in the shell. When writing scripts, you need to store the result
   in a variable instead.</p>
<p>The help() function can be invoked with or without parentheses and it will display a short help text.
   The function itself is defined in the CONFIG.JS script, which is run as the initial configuration
   script when you start the shell.</p>
<p>Don't be surprised, if only a few commands are build-in commands. Most of the time you will write and
   use scripts to do something with the Smart Card Shell.</p>
<p>Variables can be assigned a value without prior declaration. The script interpreter will take
   care of the best storage type and any conversion necessary.</p>
<p>You can define global and local variables. Global variables are created when you first assign
   a value to it:</p>
<pre>
&gt globalVariable = "Test";
</pre>
   creates a global variable named <code>globalVariable</code> and with a string value "Test". Local variable are
   declared with a <code>var</code> prefix:
<pre>
&gt var localVariable = "Hello";
</pre>
<p>Local variables are only valid within the function in which they are defined.</p>

<h2>Running Scripts</h2>
<p>Most of the time you will run scripts that are either supplied with the Smart Card Shell or
   which you developed for your own purpose. A script can be compiled and executed using the
   <code>load()</code> method build into the scripting enviroment.</p>
<p>The <code>load()</code> method accepts a string as the script name:</p>
<pre>
&gt load("tools/explore.js");
</pre>
<p>Remember, that all commands entered in the shell must be valid JavaScript code.
   Specifying a full path requires you to escape the backslash character with an
   additional backslash, because this notation is required for string literals:</p>
<pre>
&gt load("c:\\myscripts\\explore.js");
</pre>
<p>For your own convenience and better portability to other operating systems, we
   recommend to use the forward slash instead. This does not need to be escaped:</p>
<pre>
&gt load("c:/myscripts/explore.js");
</pre>
<p>You can also run scripts from the "File" / "Run Script" menu or by entering CTRL-R.</p>
<p>The shell is using a simple scheme to map file names used in scripts to files in
   the operating environment. As a rule of thumb, all file names are resolved relative to
   the location of the script which is currently running. If a file cannot be found relative
   to the location of the script, then in turn the working directory and the installation directory is
   searched. See <a href="filelocation.html">Locating Files</a> for details.</p>
<p>The scripts supplied with the Smart Card Shell are located in directories underneath the
   installation directory (Usually "c:\Program Files\CardContact\Smart Card Shell 3"). The <code>tools</code>
   directory contains a number of scripts that provide support for common tasks. Other directories
   contain script for specific card applications (e.g. <a href="icaomrtd.html">ICAO MRTD</a>,
   <a href="emv.html">EMV</a>, <a href="geldkarte.html">GeldKarte</a>, <a href="egk.html">eGK</a>
   and <a href="hpc.html">HPC</a>)</p>

<h2>Selecting a Card Reader</h2>
<p>Unless you explicitly selected a card reader from the "Options" / "Reader Configuration", the shell will
   use the first card reader in the system as default reader. Once you select a card reader, the JavaScript
   variable <code>_scsh3.reader</code> will be set to the name of the reader. You can reference this
   <a href="settings.html">configuration variable</a> in your own scripts.</p>

<h2>Defining and Using Objects</h2>
<p>JavaScript supports object-oriented programming, but uses prototype objects rather than
   classes. A prototype object contains the common properties of all instances of the same object.
   Common properties can be, for example, constants and methods.</p>
<p>Objects are created using the <code>new</code> operator. Following the new operator you can define a function
   that acts as a constructor. You can pass arguments to this function to initialize the newly created object.</p>
<p>Constructor functions in JavaScript are similar to classes in Java. By defining a constructor function
   and assigning other functions to the prototype of a constructor you can build your own objects and
   methods. The following code shows the concept:</p>
<pre>
//
// Define constructor and class Point
//
function Point(x, y) {
        this.x = x;
        this.y = y;
}

//
// Define method add() and assign to the prototype object, making it available
// for all instances created with the Point constructor function
//
Point.prototype.add = function(x, y) {
        this.x += x;
        this.y += y;
}

//
// Define a toString() method
//
Point.prototype.toString = function() {
        return("y = " + this.x + ", y = " + this.y);
}

var p = new Point(10, 20);

p.add(20, 10);
print(p);
</pre>

<p>The Smart Card Shell supports a large number of predefined classes (aka constructor functions) and methods
   to work with smart cards, cryptographic material, data structures and PKI services. See the main page for
   a complete reference of Global Platform and shell scripting classes.</p>

<h2>Using Modules</h2>
<p>The Smart Card Shell supports modules as defined in the <a href="https://en.wikipedia.org/wiki/CommonJS">CommonJS</a> specification.</p>
<p>A module is a script that exports functions that other scripts or modules can use. Modules have their own top level scope, so
   global variables or functions declared in a module are only visible within the module. Only functions or variables declared in the <i>export</i>
   variable are visible to others.<p>
<p>A module can be included using the require() statement, which returns the contents of the <i>export</i> variable from the module:</p>
<pre>
CVC = require('scsh/eac/CVC').CVC;
</pre>
<p>The above statements inspects the cache for a module with the id scsh/eac/CVC. If no such module exists in the internal cache, then
the Smart Card Shell <a href="filelocation.html">locates the module</a> file CVC.js, executes it and stores the resulting exports in the cache.
Modules are executed only once, so transitive use in other modules is possible and effective.</p>
<p>To declare a module, you must assign your exports to the variable exports defined in the module scope:</p>
<pre>
function CVC() {
	...
}

exports.CVC = CVC;
</pre>
<p>In the module, you can use the variable <i>module</i> to access the module id and module URI. The module id is the id used in the require()
statement, while the URI is the absolute filename where the module was loaded from.</p>
<pre>
print(module.id);
print(module.uri);
</pre>
<p>outputs for a module included with require('scsh/eac/CVC') from a user workspace (USR) /home/user/scsh_workspace:</p>
<pre>
scsh/eac/CVC
/home/user/scsh_workspace/scsh/eac/CVC.js
</pre>
<p>If you need to access resources relative to the location of the module, then the recommended way is to
extract the module path from the module URI:</p>
<pre>
// Remove "file:" and trailing module name
modulepath = module.uri.substr(0, module.uri.lastIndexOf("/")).substr(5);
</pre>
<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate --><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>GPApplication - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>GPApplication - Reference Documentation</h1>
        <p>
                    
            <p>An instance of the GPApplication class represents an application
           on a Global Platform card.</p>
                    
            <p>Instances of this class are created using the getApplicationInstance() method
           of the application factory.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">GPApplication() constructor</a>
            </li>
            <li>
                <a href="#run">run()</a>
            </li>
            <li>
                <a href="#select">select()</a>
            </li>
            <li>
                <a href="#sendApdu">sendApdu()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>ByteString</td>
                <td>aid</td>
                <td>Application identifier for this application.</td>
            </tr>
            <tr>
                <td>Card</td>
                <td>card</td>
                <td>Card object associated with application.</td>
            </tr>
            <tr>
                <td>Card</td>
                <td>crypto</td>
                <td>Crypto object associated with application.</td>
            </tr>
            <tr>
                <td>Array</td>
                <td>data[]</td>
                <td>Associative array of data elements.</td>
            </tr>
            <tr>
                <td>Array</td>
                <td>key[]</td>
                <td>Associative array of keys.</td>
            </tr>
            <tr>
                <td>Object</td>
                <td>profile</td>
                <td>Deserialized application profile.</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">GPApplication(String profile)</p>
        <p class="signature">GPApplication(String profile, ByteString aid, Card card, Crypto crypto, Object dataMapper)</p>
        <h3>Description</h3>
                    
        <p>Create a GPApplication object and initialize from profile.</p>
                    
        <p>This constructor is provided for special development and testing purposes.
               The preferred method is to use the getApplicationInstance() method of the
               ApplicationFactory.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>profile</td>
                <td>Name of file containing Global Platform Application profile. The file name
                  will be mapped to the file system of the runtime environment.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>aid</td>
                <td>Application identifier for application.</td>
            </tr>
            <tr>
                <td>
                    <code>Card</code>
                </td>
                <td>card</td>
                <td>Card object to associate Application with or null if none defined.</td>
            </tr>
            <tr>
                <td>
                    <code>Crypto</code>
                </td>
                <td>crypto</td>
                <td>Crypto object to associate Application with.</td>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>dataMapper</td>
                <td>Data mapper object to be used for external data elements or null if none defined.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>On or more arguments are not of the expected type</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var sd = new GPApplication("profiles/ap_sample.xml");

assert(sd != null);

</pre>
        <h2 id="run">run()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void run(String scriptName)</p>
        <h3>Description</h3>
                    
        <p>Locate and execute script fragment in application profile.</p>
                    
        <p>This method does the complete initialization of the key and data
               properties according to the declarations for this script fragment</p>
                    
        <p>Key profiles are obtained from the ApplicationFactory that created the
               Application object.</p>
                    
        <p>External data elements are mapped using the data mapper defined in the
               constructor or the getApplicationInstance() method of the application
               factory.</p>
                    
        <p>Warning: This method is an extension to the methods defined in the Global Platform
               Scripting specification. It is provided as development and test aid.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>scriptName</td>
                <td>Name of script fragment to execute.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

</pre>
        <h2 id="select">select()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString select()</p>
        <p class="signature">ByteString select(Boolean next, Boolean noData)</p>
        <p class="signature">ByteString select(Boolean next, Number[] sw)</p>
        <p class="signature">ByteString select(Boolean next, Boolean noData, Number[] sw)</p>
        <h3>Description</h3>
                    
        <p>Select application on ICC.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>next</td>
                <td>Used to control parameter P1 in the select command. True
               will select next application with matching AID. Default is false.</td>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>noData</td>
                <td>Ignore data returned from card. Default is false.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 response codes.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Data returned from card in response to select.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

/*
var aid = new ByteString("D040000017010101", HEX);
var card = new Card(_scsh3.reader);
var crypto = new Crypto();

var application = new GPApplication("profiles/ap_test.xml", aid, card, crypto, 
                                    new Object());

var resp = application.select();
assert(resp instanceof ByteString);
print(resp);

var resp = application.select(false, false);
assert(resp instanceof ByteString);
print(resp);

var resp = application.select(false, [ 0x9000 ]);
assert(resp instanceof ByteString);
print(resp);

var resp = application.select(true, false, [ 0x6A86 ]);
assert(resp instanceof ByteString);
print(resp);
*/

</pre>
        <h2 id="sendApdu">sendApdu()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number le)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number le, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number le)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number le, Number[] sw)</p>
        <h3>Description</h3>
        <p>Transmit a Command-APDU to the ICC and receive the Response-APDU.</p>
                             
        <p>The method updates the fields SW, SW1, SW2 and response of the associated card object
                        with the values received from the ICC.</p>
                             
        <p>An array of valid return codes can be passed as argument sw. If the SW1/SW2 from the ICC does
                        not match with one of the entries in the array, then an GPError.CARD_COMM_ERROR exception is raised.</p>
                             
        <p>The method supports ISO7816-4 extended format. This is automatically used, if the length of the data
                        argument exceeds 255 or if the argument le exceeds 256.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>cla</td>
                <td>The CLA byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ins</td>
                <td>The INS byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p1</td>
                <td>The P1 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p2</td>
                <td>The P2 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>The data bytes to be send in the Command-APDU for case 3 or case 4 commands</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>le</td>
                <td>The number of bytes expected in the response. 256 is encoded as '00' in short format.
                                          65536 is encoded as '0000' in extended format.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 return codes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Response APDU received from ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call or SW array contain a type other than Number</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>A communication error with the ICC occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The status word return by the ICC does not match one of the expected result</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data for the command APDU exceeds 65536</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The value given for Le is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>
/*
// Case 1: 0022F3A4 - MANAGE SE

resp = application.sendApdu(0x00, 0x22, 0xF3, 0xA4);
assert(resp instanceof ByteString);
print(application.card.SW.toString(16) + " - " + resp);

resp = card.sendApdu(0x00, 0x22, 0xF3, 0xA4, [0x9000]);
assert(resp instanceof ByteString);


// Case 2: 00B201F400 - READ RECORD from EF_STATUS

resp = card.sendApdu(0x00, 0xB2, 0x01, 0x24, 0);
assert(resp instanceof ByteString);
print(card.SW.toString(16) + " - " + resp);

assert(resp.length &gt; 0);
assert(application.card.SW == 0x9000);

resp = card.sendApdu(0x00, 0xB2, 0x01, 0x24, 0, [0x9000]);
assert(resp.length &gt; 0);


// Case 3: 002A90A008 - HASH

resp = application.sendApdu(0x00, 0x2A, 0x90, 0xA0,
            new ByteString("9000800431323334", HEX));
assert(resp instanceof ByteString);
print(application.card.SW.toString(16) + " - " + resp);

assert(card.SW == 0x9000);

resp = application.sendApdu(0x00, 0x2A, 0x90, 0xA0, 
            new ByteString("9000800431323334", HEX),[0x9000]);


// Case 4: 00A40204022F0000 - SELECT EF_STATUS

resp = application.sendApdu(0x00, 0xA4, 0x02, 0x04, new ByteString("EF04", HEX), 0);
assert(resp instanceof ByteString);
print(application.card.SW.toString(16) + " - " + resp);

assert(application.card.SW == 0x9000);
assert(resp.length &gt; 0);

resp = application.sendApdu(0x00, 0xA4, 0x02, 0x04, 
            new ByteString("EF04", HEX), 0, [0x9000]);
assert(resp.length &gt; 0);
*/
</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>GPError - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>GPError - Reference Documentation</h1>
        <p>Exception class thrown by various GP functions</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">GPError() constructor</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>ACCESS_DENIED</td>
                <td>Access to resource denied</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ARGUMENTS_MISSING</td>
                <td>A required argument is missing from the argument list</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CARD_COMM_ERROR</td>
                <td>Card communication error</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CARD_INVALID_SW</td>
                <td>A SW1/SW2 returned by the ICC is not as expected</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CRYPTO_FAILED</td>
                <td>Cryptographic operation failed</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DATA_TOO_LARGE</td>
                <td>Data supplied is too large for operation</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DEVICE_ERROR</td>
                <td>Hardware device reported error</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INVALID_ARGUMENTS</td>
                <td>Too many arguments supplied in argument list</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INVALID_DATA</td>
                <td>Invalid data supplied as argument</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INVALID_ENCODING</td>
                <td>Invalid encoding format used in argument</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INVALID_INDEX</td>
                <td>Index is out of bounds</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INVALID_KEY</td>
                <td>Invalid key for operation</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INVALID_LENGTH</td>
                <td>Length is out of range</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INVALID_MECH</td>
                <td>Invalid mechanism specified</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INVALID_TAG</td>
                <td>Invalid tag value or format</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INVALID_TYPE</td>
                <td>Invalid type given as argument</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>INVALID_USAGE</td>
                <td>Invalid usage</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>KEY_NOT_FOUND</td>
                <td>Key not found</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>OBJECTCREATION- FAILED</td>
                <td>Object could not be created</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SECURE_CHANNEL_ WRONG_STATE</td>
                <td>Secure channel is in wrong state for desired operation</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>TAG_ALREADY_EXISTS</td>
                <td>Tag does already exist in TLVList that must contain unique tags</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>TAG_NOT_FOUND</td>
                <td>Tag not found</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>OBJECT_NOT_FOUND</td>
                <td>Object could not be found</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>NOT_YET_VALID</td>
                <td>Object is not yet valid</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>EXPIRED</td>
                <td>Object is expired</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SIGNATURE_FAILED</td>
                <td>Signature verification failed</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>AUTHENTICATION_FAILED</td>
                <td>Authentication failed</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>NOT_AUTHENTICATED</td>
                <td>Not authenticated for operation</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>AUTHENTICATION_METHOD_BLOCKED</td>
                <td>Authentication method is blocked</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>OUT_OF_MEMORY</td>
                <td>Out of memory</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CARD_CONNECT_FAILED</td>
                <td>Failed to connect to card</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CARD_REMOVED</td>
                <td>Card removed</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>USER_ABORT</td>
                <td>Operation aborted by user</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>UNDEFINED</td>
                <td>Undefined error code</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>UNSUPPORTED</td>
                <td>Unsupported operation</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>USER_DEFINED</td>
                <td>User defined error</td>
            </tr>
        </table>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>String</td>
                <td>className</td>
                <td>Class throwing the exception</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>error</td>
                <td>Error code. Must be one of the defined constants</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>reason</td>
                <td>Reason for exception, e.g. the argument causing the exception</td>
            </tr>
            <tr>
                <td>String</td>
                <td>message</td>
                <td>Human readable message describing the error</td>
            </tr>
            <tr>
                <td>String</td>
                <td>fileName</td>
                <td>The name of the file containing the source code</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>lineNumber</td>
                <td>The line in the source code where the exception occurred</td>
            </tr>
            <tr>
                <td>String</td>
                <td>stack</td>
                <td>List of file names and line numbers resembling the call stack</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">GPError(String className, Number error, Number reason, String message)</p>
        <h3>Description</h3>
        Create a new GPError object with the fields set to the arguments.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>className</td>
                <td>Class throwing the exception</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>error</td>
                <td>Error code. Must be one of the defined constants</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>reason</td>
                <td>Reason for exception, e.g. the argument causing the exception</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>message</td>
                <td>Human readable message describing the error</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Throw from within script
try	{
	throw new GPError("test.class", 1, 2, "script");
	assert(false);
}

catch(e) {
	assert(e instanceof GPError);
	assert(e.className == "test.class");
	assert(e.error == 1);
	assert(e.reason == 2);
	assert(e.message == "script");
	print(e.fileName);
	print(e.lineNumber);
	print(e.stack);
}

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        		    GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

		    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

			    NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

		     END OF TERMS AND CONDITIONS

	    How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA


Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Library General
Public License instead of this License.
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>GPSecurityDomain - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>GPSecurityDomain - Reference Documentation</h1>
        <p>
                    
            <p>An instance of the GPSecurityDomain class represents an application
           that is a security domain on a smart card.</p>
                    
            <p>Instances of this class are created using the getApplicationInstance() method
           of the application factory.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">GPSecurityDomain() constructor</a>
            </li>
            <li>
                <a href="#deleteAID">deleteAID()</a>
            </li>
            <li>
                <a href="#installForInstall">installForInstall()</a>
            </li>
            <li>
                <a href="#installForInstallAndSelectable">installForInstallAndSelectable()</a>
            </li>
            <li>
                <a href="#installForLoad">installForLoad()</a>
            </li>
            <li>
                <a href="#loadByName">loadByName()</a>
            </li>
            <li>
                <a href="#openSecureChannel">openSecureChannel()</a>
            </li>
            <li>
                <a href="#select">select()</a>
            </li>
            <li>
                <a href="#sendApdu">sendApdu()</a>
            </li>
            <li>
                <a href="#run">run()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>ByteString</td>
                <td>aid</td>
                <td>Application identifier for this application.</td>
            </tr>
            <tr>
                <td>Card</td>
                <td>card</td>
                <td>Card object associated with application.</td>
            </tr>
            <tr>
                <td>Card</td>
                <td>crypto</td>
                <td>Crypto object associated with application.</td>
            </tr>
            <tr>
                <td>Array</td>
                <td>data[]</td>
                <td>Associative array of data elements.</td>
            </tr>
            <tr>
                <td>Array</td>
                <td>key[]</td>
                <td>Associative array of keys.</td>
            </tr>
            <tr>
                <td>Object</td>
                <td>profile</td>
                <td>Deserialized application profile.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>scp</td>
                <td>Preselected SCP protocol version (2 or 3, Default probe)</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">GPSecurityDomain(String profile)</p>
        <p class="signature">GPSecurityDomain(String profile, ByteString aid, Card card, Crypto crypto, Object dataMapper)</p>
        <h3>Description</h3>
                    
        <p>Create a GPSecurityDomain object and initialize from profile.</p>
                    
        <p>This constructor is provided for special development and testing purposes.
               The preferred method is to use the getApplicationInstance() method of the
               ApplicationFactory.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>profile</td>
                <td>Name of file containing Global Platform Application profile. The file name
                  will be mapped to the file system of the runtime environment.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>aid</td>
                <td>Application identifier for application.</td>
            </tr>
            <tr>
                <td>
                    <code>Card</code>
                </td>
                <td>card</td>
                <td>Card object to associate Application with or null if none defined.</td>
            </tr>
            <tr>
                <td>
                    <code>Crypto</code>
                </td>
                <td>crypto</td>
                <td>Crypto object to associate Application with.</td>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>dataMapper</td>
                <td>Data mapper object to be used for external data elements or null if none defined.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>On or more arguments are not of the expected type</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var card = new Card(_scsh3.reader);
var crypto = new Crypto();
var sdAid = new ByteString("A000000003000000", HEX);

var sd = new GPSecurityDomain("profiles/ap_sample.xml", sdAid, card, crypto);

assert(sd != null);
assert(sd.aid != null);
assert(sd.aid instanceof ByteString);
assert(sd.aid.equals(sdAid));
assert(sd.card != null);
assert(sd.crypto != null);

</pre>
        <h2 id="deleteAID">deleteAID()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString deleteAID(ByteString aid)</p>
        <p class="signature">ByteString deleteAID(ByteString aid, Number[] sw)</p>
        <p class="signature">ByteString deleteAID(ByteString aid, Boolean relatedObjects)</p>
        <p class="signature">ByteString deleteAID(ByteString aid, Boolean relatedObjects, Number[] sw)</p>
        <h3>Description</h3>
                    
        <p>Delete application, module or load file stored under given aid using
               the Global Platform DELETE_FILE APDU.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>aid</td>
                <td>Application identifier of application, module or load file.</td>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>relatedObjects</td>
                <td>True to delete related objects. Default is false.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 status codes.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The method returns the data returned by the ICC in response to the DELETE_FILE command.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>Communication with the ICC failed</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The ICC returned an unexpected status word SW1/SW2</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// var applAid = new ByteString("", HEX);
// sd.deleteAID(applAid, [0x9000, 0x6A88] );

</pre>
        <h2 id="installForInstall">installForInstall()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString installForInstall(ByteString loadFileAID, ByteString executableModuleAID, ByteString applicationAID, ByteString privileges, ByteString installParam, ByteString installToken)</p>
        <p class="signature">ByteString installForInstall(ByteString loadFileAID, ByteString executableModuleAID, ByteString applicationAID, ByteString privileges, ByteString installParam, ByteString installToken, Number[] sw)</p>
        <h3>Description</h3>
                    
        <p>Create an instance of an application under the given AID using the executable module
               from the load file as the template.</p>
                    
        <p>The optional argument sw allows to define a list of acceptable
               status word returned by the ICC. If the argument is missing, then 9000 is
               the only acceptable status word.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>loadFileAID</td>
                <td>Application identifier of load file.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>executableModuleAID</td>
                <td>Application identifier of module in load file.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>applicationAID</td>
                <td>Application identifier for instance to be created.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>privileges</td>
                <td>Application privileges.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>installParam</td>
                <td>Installation parameter.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>installToken</td>
                <td>Install token to authenticate install process or null if not defined.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 status codes.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The method returns the data returned by the ICC in response to the INSTALL command.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>Communication with the ICC failed</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The ICC returned an unexpected status word SW1/SW2</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

/*
var loadFileAid = new ByteString("A000000001", HEX);
var moduleAid = new ByteString("A00000000101", HEX);
var applAid = new ByteString("A00000000102", HEX);
var applPrivileges = new ByteString("00", HEX);
var installParam = new ByteString("C900", HEX);

sd.installForInstall(loadFileAid, moduleAid, applAid, applPrivileges, installParam, null);
*/
</pre>
        <h2 id="installForInstallAndSelectable">installForInstallAndSelectable()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString installForInstallAndSelectable(ByteString loadFileAID, ByteString executableModuleAID, ByteString applicationAID, ByteString privileges, ByteString installParam, ByteString installToken)</p>
        <p class="signature">ByteString installForInstallAndSelectable(ByteString loadFileAID, ByteString executableModuleAID, ByteString applicationAID, ByteString privileges, ByteString installParam, ByteString installToken, Number[] sw)</p>
        <h3>Description</h3>
                    
        <p>Create an instance of an application under the given AID using the executable module
               from the load file as the template.</p>
                    
        <p>After instantiating the applet, it is selectable with the select command.</p>
                    
        <p>The optional argument sw allows to define a list of acceptable
               status word returned by the ICC. If the argument is missing, then 9000 is
               the only acceptable status word.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>loadFileAID</td>
                <td>Application identifier of load file.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>executableModuleAID</td>
                <td>Application identifier of module in load file.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>applicationAID</td>
                <td>Application identifier for instance to be created.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>privileges</td>
                <td>Application privileges.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>installParam</td>
                <td>Installation parameter.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>installToken</td>
                <td>Install token to authenticate install process or null if not defined.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 status codes.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The method returns the data returned by the ICC in response to the INSTALL command.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>Communication with the ICC failed</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The ICC returned an unexpected status word SW1/SW2</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

/*
var loadFileAid = new ByteString("A000000001", HEX);
var moduleAid = new ByteString("A00000000101", HEX);
var applAid = new ByteString("A00000000102", HEX);
var applPrivileges = new ByteString("00", HEX);
var installParam = new ByteString("C900", HEX);

sd.installForInstallAndSelectable(loadFileAid, moduleAid, applAid, applPrivileges,
                                  installParam, null);
*/
</pre>
        <h2 id="installForLoad">installForLoad()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString installForLoad(ByteString loadFileAID, ByteString securityDomainAID, ByteString loadFileDataBlockHash, ByteString loadParam, ByteString loadToken)</p>
        <h3>Description</h3>
                    
        <p>Prepare the download of a load file into the ICC with a subsequent load(),
               loadByName() or loadWithProfile() method.</p>
                    
        <p>The optional argument sw allows to define a list of acceptable
               status word returned by the ICC. If the argument is missing, then 9000 is
               the only acceptable status word.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>loadFileAID</td>
                <td>Application identifier of load file.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>securityDomainAID</td>
                <td>Application identifier of security domain or null if not used.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>loadFileDataBlockHash</td>
                <td>Hash of load file data blocks or null if not used.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>loadParam</td>
                <td>Load parameter or null if not used.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>loadToken</td>
                <td>Load token to authenticate load process or null if not used.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 status codes.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The method returns the data returned by the ICC in response to the INSTALL command.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>Communication with the ICC failed</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The ICC returned an unexpected status word SW1/SW2</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

/*
var loadFileAid = new ByteString("A000000001", HEX);
var sdAid = new ByteString("A000000003000000", HEX);

sd.installForLoad(loadFileAid, sdAid, null, null, null);
*/

</pre>
        <h2 id="loadByName">loadByName()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString loadByName(String capFileName)</p>
        <p class="signature">ByteString loadByName(ByteString capFileName)</p>
        <p class="signature">ByteString loadByName(ByteString capFileName, [[aid, dap]])</p>
        <h3>Description</h3>
                    
        <p>Read cap file and transfer into GP card using the LOAD command APDU.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>capFileName</td>
                <td>Name of cap file. Will be mapped to a file name in the runtime environment.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>capFileName</td>
                <td>Name of cap file as ByteString. Will be mapped to a file name in the runtime environment.</td>
            </tr>
            <tr>
                <td>
                    <code>[[ByteString,ByteString]]</code>
                </td>
                <td>[[aid,dap]]</td>
                <td>Pair of application identifier and data block signature - Not yet supported</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Data returned in last LOAD block</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.OBJECT_NOT_FOUND</td>
                <td>Cap file not found or invalid cap file structure</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>Communication with the ICC failed</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The ICC returned an unexpected status word SW1/SW2</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// sd.loadByName("musclecard/CardEdge.cap");

</pre>
        <h2 id="openSecureChannel">openSecureChannel()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number openSecureChannel(Number level)</p>
        <p class="signature">Number openSecureChannel(Number level, Number version)</p>
        <p class="signature">Number openSecureChannel(Number level, Number version, Number index) (not supported yet)</p>
        <h3>Description</h3>
                    
        <p>Read cap file and transfer into GP card using the LOAD command APDU.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>level</td>
                <td>Level of security requested for the secure channel.</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>version</td>
                <td>Key set version.</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Key set version index.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Level of security selected for the secure channel.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>Communication with the ICC failed</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The ICC returned an unexpected status word SW1/SW2</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var level = sd.openSecureChannel(0x01);
assert(level == 0x01);
assert(sd.secureChannel != null);
assert(sd.secureChannel.state == SC_CLOSE);

var level = sd.openSecureChannel(0x03, 0x02);
assert(level == 0x03);
assert(sd.secureChannel != null);
assert(sd.secureChannel instanceof GPScp02);
assert(sd.secureChannel.state == SC_CLOSE);

var scp02 = sd.secureChannel;

assert(scp02.securityLevel == 0x03);
assert(scp02.hostChallenge == null);
assert(scp02.keyVersion == null);

scp02.initializeUpdate(0x00, 0x00);

assert(scp02.hostChallenge != null);
assert(scp02.hostChallenge instanceof ByteString);
print(scp02.hostChallenge);

assert(scp02.keyVersion != null);
assert(scp02.keyVersion == 0x00);

assert(scp02.cardChallenge != null);
print(scp02.cardChallenge);
assert(scp02.cardCryptogram != null);
print(scp02.cardCryptogram);
assert(scp02.diversificationData != null);
print(scp02.diversificationData);
assert(scp02.sequenceCounter != null);
print(scp02.sequenceCounter);

var masterSENC = new Key("profiles/kp_jcop_default_s-enc.xml");
var masterSMAC = new Key("profiles/kp_jcop_default_s-mac.xml");

/*
var kmc = new Key("profiles/kp_kmc.xml");

var derivationData = scp02.diversificationData.right(6);

var derivationParam = derivationData.concat(new ByteString("F001", HEX)).concat(derivationData).concat(new ByteString("0F01", HEX));

var masterSENC = new Key();
crypto.deriveKey(kmc, Crypto.DES_ECB, derivationParam, masterSENC);
print("SC-ENC: " + masterSENC.getComponent(Key.DES));

var derivationParam = derivationData.concat(new ByteString("F002", HEX)).concat(derivationData).concat(new ByteString("0F02", HEX));

var masterSMAC = new Key();
crypto.deriveKey(kmc, Crypto.DES_ECB, derivationParam, masterSMAC);
print("SC-MAC: " + masterSMAC.getComponent(Key.DES));

*/

var derivationPostfix = scp02.sequenceCounter.concat(new ByteString("000000000000000000000000", HEX));

// Derive S-ENC session key
var derivationPrefix = new ByteString("0182", HEX);
var derivationParam = derivationPrefix.concat(derivationPostfix);

print("Input to session S-ENC derivation: " + derivationParam);

var sessionSENC = new Key();
crypto.deriveKey(masterSENC, Crypto.DES_CBC, derivationParam, sessionSENC);


// Derive S-MAC session key
var derivationPrefix = new ByteString("0101", HEX);
var derivationParam = derivationPrefix.concat(derivationPostfix);

print("Input to session S-MAC derivation: " + derivationParam);

var sessionSMAC = new Key();
crypto.deriveKey(masterSMAC, Crypto.DES_CBC, derivationParam, sessionSMAC);

scp02.setEncKey(sessionSENC);
scp02.setMacKey(sessionSMAC);

scp02.externalAuthenticate(0x03);

var rsp = sd.sendApdu(0x80, 0xCA, 0x00, 0x66, 0x00); // Send GET DATA command
print(rsp);

// AIDs for Smart Card HSM
var loadFileAid = new ByteString("E82B0601040181C31F020101", HEX);
var moduleAid =   new ByteString("E82B0601040181C31F0201", HEX);
var applAid =     new ByteString("E82B0601040181C31F0201", HEX);

// Clean the card
print("Delete old smart card HSM applet instance...");
sd.deleteAID(applAid, [0x9000, 0x6A88, 0x6A80] );
print("Delete old smart card HSM applet load file...");
sd.deleteAID(loadFileAid, [0x9000, 0x6A88, 0x6A80] );

print("InstallForLoad smart card HSM applet...");
sd.installForLoad(loadFileAid, sdAid, null, null, null);
print("Loading smart card HSM applet...");
sd.loadByName("javacard/smartcardhsm.cap");

print("Instantiating smart card HSM applet...");
var applPrivileges = new ByteString("00", HEX);
var installParam = new ByteString("C900", HEX);
sd.installForInstallAndSelectable(loadFileAid, moduleAid, applAid, applPrivileges, installParam, null);


</pre>
        <h2 id="select">select()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString select()</p>
        <p class="signature">ByteString select(Boolean next, Boolean noData)</p>
        <p class="signature">ByteString select(Boolean next, Number[] sw)</p>
        <p class="signature">ByteString select(Boolean next, Boolean noData, Number[] sw)</p>
        <h3>Description</h3>
                    
        <p>Select security domain on ICC.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>next</td>
                <td>Used to control parameter P1 in the select command. True
               will select next application with matching AID. Default is false.</td>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>noData</td>
                <td>Ignore data returned from card. Default is false.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 response codes.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Data returned from card in response to select.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>Communication with the ICC failed</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The ICC returned an unexpected status word SW1/SW2</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

/*
var aid = new ByteString("D040000017010101", HEX);
var card = new Card(_scsh3.reader);
var crypto = new Crypto();

var application = new Application("profiles/ap_test.xml", aid, card, crypto,
                                  new Object());

var resp = application.select();
assert(resp instanceof ByteString);
print(resp);

var resp = application.select(false, false);
assert(resp instanceof ByteString);
print(resp);

var resp = application.select(false, [ 0x9000 ]);
assert(resp instanceof ByteString);
print(resp);

var resp = application.select(true, false, [ 0x6A86 ]);
assert(resp instanceof ByteString);
print(resp);
*/

</pre>
        <h2 id="sendApdu">sendApdu()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number le)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, Number le, Number[] sw)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number le)</p>
        <p class="signature">ByteString sendApdu (Number cla, Number ins, Number p1, Number p2, ByteString data, Number le, Number[] sw)</p>
        <h3>Description</h3>
        <p>Transmit a Command-APDU to the ICC and receive the Response-APDU.</p>
                             
        <p>The method updates the fields SW, SW1, SW2 and response of the associated card object
                        with the values received from the ICC.</p>
                             
        <p>An array of valid return codes can be passed as argument sw. If the SW1/SW2 from the ICC does
                        not match with one of the entries in the array, then an GPError.CARD_COMM_ERROR exception is raised.</p>
                             
        <p>The method supports ISO7816-4 extended format. This is automatically used, if the length of the data
                        argument exceeds 255 or if the argument le exceeds 256.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>cla</td>
                <td>The CLA byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ins</td>
                <td>The INS byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p1</td>
                <td>The P1 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>p2</td>
                <td>The P2 byte for the Command-APDU</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>The data bytes to be send in the Command-APDU for case 3 or case 4 commands</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>le</td>
                <td>The number of bytes expected in the response. 256 is encoded as '00' in short format.
                                          65536 is encoded as '0000' in extended format.</td>
            </tr>
            <tr>
                <td>
                    <code>Number[]</code>
                </td>
                <td>sw</td>
                <td>Array of acceptable SW1/SW2 return codes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Response APDU received from ICC</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call or SW array contain a type other than Number</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_COMM_ERROR</td>
                <td>A communication error with the ICC occured</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CARD_INVALID_SW</td>
                <td>The status word return by the ICC does not match one of the expected result</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data for the command APDU exceeds 65536</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_LENGTH</td>
                <td>The value given for Le is out of range</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>
/*
// Case 1: 0022F3A4 - MANAGE SE

resp = application.sendApdu(0x00, 0x22, 0xF3, 0xA4);
assert(resp instanceof ByteString);
print(application.card.SW.toString(16) + " - " + resp);

resp = card.sendApdu(0x00, 0x22, 0xF3, 0xA4, [0x9000]);
assert(resp instanceof ByteString);


// Case 2: 00B201F400 - READ RECORD from EF_STATUS

resp = card.sendApdu(0x00, 0xB2, 0x01, 0x24, 0);
assert(resp instanceof ByteString);
print(card.SW.toString(16) + " - " + resp);

assert(resp.length &gt; 0);
assert(application.card.SW == 0x9000);

resp = card.sendApdu(0x00, 0xB2, 0x01, 0x24, 0, [0x9000]);
assert(resp.length &gt; 0);


// Case 3: 002A90A008 - HASH

resp = application.sendApdu(0x00, 0x2A, 0x90, 0xA0,
            new ByteString("9000800431323334", HEX));
assert(resp instanceof ByteString);
print(application.card.SW.toString(16) + " - " + resp);

assert(card.SW == 0x9000);

resp = application.sendApdu(0x00, 0x2A, 0x90, 0xA0,
            new ByteString("9000800431323334", HEX),[0x9000]);


// Case 4: 00A40204022F0000 - SELECT EF_STATUS

resp = application.sendApdu(0x00, 0xA4, 0x02, 0x04,
            new ByteString("EF04", HEX), 0);
assert(resp instanceof ByteString);
print(application.card.SW.toString(16) + " - " + resp);

assert(application.card.SW == 0x9000);
assert(resp.length &gt; 0);

resp = application.sendApdu(0x00, 0xA4, 0x02, 0x04,
            new ByteString("EF04", HEX), 0, [0x9000]);
assert(resp.length &gt; 0);
*/
</pre>
        <h2 id="run">run()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void run(String scriptName)</p>
        <h3>Description</h3>
                    
        <p>Locate and execute script fragment in application profile.</p>
                    
        <p>This method does the complete initialization of the key and data
               properties according to the declarations for this script fragment</p>
                    
        <p>Key profiles are obtained from the ApplicationFactory that created the
               Application object.</p>
                    
        <p>External data elements are mapped using the data mapper defined in the
               constructor or the getApplicationInstance() method of the application
               factory.</p>
                    
        <p>Warning: This method is an extension to the methods defined in the Global Platform
               Scripting specification. It is provided as development and test aid.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>scriptName</td>
                <td>Name of script fragment to execute.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>GPSystem - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>GPSystem - Reference Documentation</h1>
        <p>Class implementing the Global Platform GPSystem class</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">GPSystem() constructor</a>
            </li>
            <li>
                <a href="#getVersion">getVersion()</a>
            </li>
            <li>
                <a href="#wait">wait()</a>
            </li>
            <li>
                <a href="#trace">trace()</a>
            </li>
            <li>
                <a href="#isTraceOn">isTraceOn()</a>
            </li>
            <li>
                <a href="#setTraceLevel">setTraceLevel()</a>
            </li>
            <li>
                <a href="#log">log()</a>
            </li>
            <li>
                <a href="#markTrace">markTrace()</a>
            </li>
            <li>
                <a href="#copyTrace">copyTrace()</a>
            </li>
            <li>
                <a href="#getVendorObject">getVendorObject()</a>
            </li>
            <li>
                <a href="#getSystemID">getSystemID()</a>
            </li>
            <li>
                <a href="#dateTimeByteString">dateTimeByteString()</a>
            </li>
            <li>
                <a href="#mapFilename">mapFilename()</a>
            </li>
        </ul>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">None</p>
        <h3>Description</h3>
        The GPSystem class only provides class functions. No objects can be instantiated.
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

</pre>
        <h2 id="getVersion">getVersion()</h2>
        <h3>Prototype</h3>
        <p class="signature">String getVersion()</p>
        <h3>Description</h3>
        <p>Retrieve the version of the Global Platform Scripting specification implemented by the runtime.</p>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>String containing the version number</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

version = GPSystem.getVersion();

assert(version == "1.1.0");

</pre>
        <h2 id="wait">wait()</h2>
        <h3>Prototype</h3>
        <p class="signature">wait(Number ms)</p>
        <h3>Description</h3>
        <p>Wait for a specified period</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ms</td>
                <td>The time to wait in milliseconds</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The argument stringValue contains characters not compatible with the encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

start = new Date().valueOf();
waitingTime = 1000;

GPSystem.wait(waitingTime);

stop = new Date().valueOf();
elapsed = stop - start;

// Allow a tolerance of 10 ms
print("Wait: " + waitingTime + " ms / Elapsed: " + elapsed + " ms");
assert(((elapsed - 50) &lt;= waitingTime) &amp;&amp; ((elapsed + 50) &gt;= waitingTime));

</pre>
        <h2 id="trace">trace()</h2>
        <h3>Prototype</h3>
        <p class="signature">boolean trace(Object o)</p>
        <h3>Description</h3>
        <p>Append data to the trace file by calling the objects "toString()" method.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>o</td>
                <td>The object to trace</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>Boolean value indicating the success (true) or failure (false) of the tracing</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The argument stringValue contains characters not compatible with the encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

rval = GPSystem.trace("Testoutput from GPSystem.trace()");
// assert(rval == true);

try {
	GPSystem.trace(null);
}
catch (e) {
	assert(e instanceof GPError);
	assert(e.error == GPError.INVALID_TYPE);
}

</pre>
        <h2 id="isTraceOn">isTraceOn()</h2>
        <h3>Prototype</h3>
        <p class="signature">boolean isTraceOn()</p>
        <p class="signature">boolean isTraceOn(String class, Number level)</p>
        <h3>Description</h3>
        <p>Return true if the trace is enabled.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>class</td>
                <td>The class name from this this log entry is created</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>level</td>
                <td>The log level, which is one of GPSystem.[DEBUG, INFO, WARN, ERROR, FATAL]</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>Boolean value indicating if tracing is enabled</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

assert(typeof(GPSystem.isTraceOn()) == "boolean");
assert(typeof(GPSystem.isTraceOn("de.cardcontact.scdp.gp.GPSystem", GPSystem.INFO)) == "boolean");

</pre>
        <h2 id="setTraceLevel">setTraceLevel()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setTraceLevel(String class, Number level)</p>
        <h3>Description</h3>
        <p>Set trace level for given class. Not all implementations support the full feature set.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>class</td>
                <td>The class name from this this log entry is created</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>level</td>
                <td>The log level, which is one of GPSystem.[DEBUG, INFO, WARN, ERROR, FATAL]</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

GPSystem.setTraceLevel("", GPSystem.INFO);		// The default

</pre>
        <h2 id="log">log()</h2>
        <h3>Prototype</h3>
        <p class="signature">boolean log(Number level, String class, Object o)</p>
        <h3>Description</h3>
        <p>Log information for class at level by calling the objects "toString()" method.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>level</td>
                <td>The log level, which is one of GPSystem.[DEBUG, INFO, WARN, ERROR, FATAL]</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>class</td>
                <td>The class name from this this log entry is created</td>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>o</td>
                <td>The object to log</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>Boolean value indicating the success (true) or failure (false) of the tracing</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The argument stringValue contains characters not compatible with the encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

GPSystem.log(GPSystem.DEBUG, "ClassName", "Output at DEBUG log level");
GPSystem.log(GPSystem.INFO,  "ClassName", "Output at INFO log level");
GPSystem.log(GPSystem.WARN,  "ClassName", "Output at WARN log level");
GPSystem.log(GPSystem.ERROR, "ClassName", "Output at ERROR log level");
GPSystem.log(GPSystem.FATAL, "ClassName", "Output at FATAL log level");
GPSystem.log(GPSystem.FATAL, "ClassName", null);

</pre>
        <h2 id="markTrace">markTrace()</h2>
        <h3>Prototype</h3>
        <p class="signature">markTrace()</p>
        <h3>Description</h3>
        <p>Mark the current position in the trace output for later retrieval of
                        trace output using the copyTrace() method.</p>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

GPSystem.markTrace();

</pre>
        <h2 id="copyTrace">copyTrace()</h2>
        <h3>Prototype</h3>
        <p class="signature">String copyTrace()</p>
        <h3>Description</h3>
        <p>Return the trace starting with the position marked with the
                        markTrace() method up to the very last entry.</p>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>Copy of the recent trace entries or null if unsupported</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var msg ="Hello World";
GPSystem.trace(msg);
var t = GPSystem.copyTrace();

if (t != null) {
	assert(t == msg + "\n");
}


</pre>
        <h2 id="getVendorObject">getVendorObject()</h2>
        <h3>Prototype</h3>
        <p class="signature">getVendorObject(String objectName)</p>
        <h3>Description</h3>
        <p>Retrieve a vendor specific object</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>objectName</td>
                <td>The name of the object</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>The created object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.OBJECTCREATIONFAILED</td>
                <td>The desired object could not be created</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

try {
	obj = GPSystem.getVendorObject("myObject");
}
catch (e) {
	assert(e instanceof GPError);
	assert(e.error == GPError.OBJECTCREATIONFAILED);
}

</pre>
        <h2 id="getSystemID">getSystemID()</h2>
        <h3>Prototype</h3>
        <p class="signature">getSystemID()</p>
        <h3>Description</h3>
        	
        <p>Get the ID of the system.</p>
        	
        <p>For the smart card development platform a unique object identifier is returned.</p>
                    
        <p>It has the following components:
                  OpenSCDP.Runtime.MajorVersion.MinorVersion.Build.SerialNumber.</p>
        	
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The ID of the system or null if none available</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var id = GPSystem.getSystemID();
print(id);
var s = id.toString(OID).split(".");

print("Runtime : " + s[s.length - 5]);
print("Major   : " + s[s.length - 4]);
print("Minor   : " + s[s.length - 3]);
print("Build   : " + s[s.length - 2]);
print("Serial  : " + s[s.length - 1]);


</pre>
        <h2 id="dateTimeByteString">dateTimeByteString()</h2>
        <h3>Prototype</h3>
        <p class="signature">dateTimeByteString()</p>
        <h3>Description</h3>
        <p>Return a ByteString containing the current date and time</p>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The current date and time</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

time = GPSystem.dateTimeByteString();
assert(time != null);
assert(time instanceof ByteString);

</pre>
        <h2 id="mapFilename">mapFilename()</h2>
        <h3>Prototype</h3>
        <p class="signature">mapFilename(String filename, Number location)</p>
        <p class="signature">mapFilename(String filename)</p>
        <h3>Description</h3>
        <p>Searches for a file at the given location and maps the filename to the system specific absolute path.</p>
        		  If no location is specified the function uses the default location identifier GPSystem.AUTO.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>filename</td>
                <td>Filename</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>location</td>
                <td>Location indicator (GPSystem.CWD, GPSystem.USR, GPSystem.SYS, GPSystem.AUTO) </td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>Absolute path of the file. Null if the file was not found.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

absFilename = GPSystem.mapFilename("config.js", GPSystem.SYS);
assert(absFilename != null);

absFilename = GPSystem.mapFilename("config.js");
assert(absFilename != null);

absFilename = GPSystem.mapFilename("novalidfile.js");
assert(absFilename == null);

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>GPXML - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>GPXML - Reference Documentation</h1>
        <p>
                  
            <p>Core XML parser for Global Platform Profiles.</p>
                  
            <p>XML profiles are deserialized into a tree of ECMAScript objects. Child elements
         are created as a property under the parent object with the name of the XML
         element. Attributes are created as a property with the same name and of type
         String.</p>
                  
            <p>Namespaces are silently ignored (e.g. gp:Key is stored as property Key).</p>
                  
            <p>If an element contains a value, then the characters are collected into the
         elementValue property.</p>
                  
            <p>If an element contains CDATA, then the characters are collected into the
         elementValue property.</p>
                  
            <p>If a Script element is found and there is no explicit script definition using
         defineScriptElement(), then the content of the element is evaluated as
         an ECMAScript function without parameter and stored under the Script property
         of the parent element.</p>
                  
            <p>If a parent element defines the arrayElement and arrayIndex attributes, then
         client elements with the same name are deserialized as an array.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">GPXML() constructor</a>
            </li>
            <li>
                <a href="#defineArrayElement">defineArrayElement()</a>
            </li>
            <li>
                <a href="#defineScriptElement">defineScriptElement()</a>
            </li>
            <li>
                <a href="#parse">parse()</a>
            </li>
            <li>
                <a href="#parseApplicationProfile">parseApplicationProfile()</a>
            </li>
        </ul>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">GPXML()</p>
        <h3>Description</h3>
                    
        <p>Create a parser object to parse the specified XML file.</p>
                    
        <p>The actual parsing is done using the GPXML.prototype.parse() method.</p>
                
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var parser = new GPXML();

</pre>
        <h2 id="defineArrayElement">defineArrayElement()</h2>
        <h3>Prototype</h3>
        <p class="signature">defineArrayElement(String path, String arrayElement)</p>
        <p class="signature">defineArrayElement(String path, String arrayElement, String arrayIndex)</p>
        <h3>Description</h3>
        <p>Define which XML child nodes must be deserialized as JavaScript array.</p>
                             
        <p>This has the same effect as specifying an arrayElement and arrayIndex
                        attribute at an XML node.</p>
                             
        <p>Multiple values for arrayElement and arrayIndex can be specified in
                        a comma separated list.</p>
                             
        <p>The array can be either indexed by integer ("#") or using
						an attribute as key value.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>path</td>
                <td>Path to the XML node that contains array elements.</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>arrayElement</td>
                <td>Comma separated list of array elements.</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>arrayIndex</td>
                <td>"#" to index array with integer offset starting at 0 or attribute containing key value.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

parser.defineArrayElement("/Root/Child3/Child4", "Array1");
parser.defineArrayElement("/Root/Child3/Child5", "Array1", "name");
parser.defineArrayElement("/Root/Child3/Child6", "Array1,Array2", "#,name");

</pre>
        <h2 id="defineScriptElement">defineScriptElement()</h2>
        <h3>Prototype</h3>
        <p class="signature">defineScriptElement(String path)</p>
        <p class="signature">defineScriptElement(String path, Boolean asFunction)</p>
        <h3>Description</h3>
        <p>Define which XML nodes are to be interpreted as script code.</p>
                             
        <p>By default all &lt;Script&gt; elements are parsed as script code.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>path</td>
                <td>Path to the XML node that shall be interpreted as script code.</td>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>asFunction</td>
                <td>if set to true, then the script fragment is treated as function.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

parser.defineScriptElement("/Root/AnonymousFunction/Script");
parser.defineScriptElement("/Root/Function/Script", true);
parser.defineScriptElement("/Root/FunctionNoScript", true);
parser.defineScriptElement("/Root/Script", false);
parser.defineScriptElement("/Root/PlainScript", false);

</pre>
        <h2 id="parse">parse()</h2>
        <h3>Prototype</h3>
        <p class="signature">Object parse(String filename)</p>
        <p class="signature">Object parse(ByteString file)</p>
        <h3>Description</h3>
                    
        <p>Parse the XML formatted file specified by filename and create
               a tree of ECMAScript objects.</p>
                    
        <p>The file can be provided as ByteString. If the ByteString starts with
               1F8B, then it is treated as GZIP file.</p>
        			
        <p>The parse() method without arguments can be used with an instance object,
			   the other two variants are static methods.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>filename</td>
                <td>File name of XML file. Will be mapped to a physical file by the runtime environment.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>Root element of document object model</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Dynamic variant
var profile = parser.parse("parsertest2.xml");
dumpxml(profile, "");
assert(profile);
assert(profile.rootAttr1 == "rootAttr1");
assert(profile.rootAttr2 == "rootAttr2");
assert(profile.Child1);
assert(profile.Child1.child1Attr1 == "child1Attr1");
assert(profile.Child1.child1Attr2 == "child1Attr2");

assert(profile.Child2);
assert(profile.Child2.child2Attr1 == "child2Attr1");
assert(profile.Child2.elementValue == "child2Value");

assert(profile.Child3);
assert(profile.Child3.Child4);
assert(profile.Child3.Child4.Array1);
assert(profile.Child3.Child4.Array1.length == 3);
assert(profile.Child3.Child4.Array1[0].name == "a1");
assert(profile.Child3.Child4.Array1[1].arrayAttr1 == "arrayAttr1");
assert(profile.Child3.Child4.Array1[2].name == "a2");

assert(profile.Child3);
assert(profile.Child3.Child5);
assert(profile.Child3.Child5.Array1);
assert(profile.Child3.Child5.Array1["a1"].name == "a1");
assert(profile.Child3.Child5.Array1["a2"].arrayAttr2 == "arrayAttr2");
assert(profile.Child3.Child5.Array1["a3"].name == "a3");

assert(profile.Child3);
assert(profile.Child3.Child6);
assert(profile.Child3.Child6.Array1);
assert(profile.Child3.Child6.Array1[0].name == "a1");
assert(profile.Child3.Child6.Array1[1].arrayAttr1 == "arrayAttr1");
assert(profile.Child3.Child6.Array1[2].name == "a2");
assert(profile.Child3.Child6.Array2);
assert(profile.Child3.Child6.Array2["b1"].name == "b1");
assert(profile.Child3.Child6.Array2["b2"].arrayAttr5 == "arrayAttr5");
assert(profile.Child3.Child6.Array2["b3"].name == "b3");

assert(profile.AnonymousFunction.Script instanceof Function);
globalResult = "";
profile.AnonymousFunction.Script();
assert(globalResult == "globalResult");

assert(profile.Function.Script instanceof Function);
assert(profile.Function.Script(1, 2) == 3);

assert(profile.FunctionNoScript.Script instanceof Function);
assert(profile.FunctionNoScript.Script(1, 2) == 3);

assert(profile.PlainScript.Script instanceof JsScript);

profile.PlainScript.Script.execute(this);
assert(f(1 ,2) == 3);

// Static variant

var profile = GPXML.parse("parsertest.xml");
dumpxml(profile, "");
assert(profile);
assert(profile.rootAttr1 == "rootAttr1");
assert(profile.rootAttr2 == "rootAttr2");
assert(profile.Child1);
assert(profile.Child1.child1Attr1 == "child1Attr1");
assert(profile.Child1.child1Attr2 == "child1Attr2");

assert(profile.Child2);
assert(profile.Child2.child2Attr1 == "child2Attr1");
assert(profile.Child2.elementValue == "child2Value");

assert(profile.Child3);
assert(profile.Child3.Child4);
assert(profile.Child3.Child4.Array1);
assert(profile.Child3.Child4.Array1.length == 3);
assert(profile.Child3.Child4.Array1[0].name == "a1");
assert(profile.Child3.Child4.Array1[1].arrayAttr1 == "arrayAttr1");
assert(profile.Child3.Child4.Array1[2].name == "a2");

assert(profile.Child3);
assert(profile.Child3.Child5);
assert(profile.Child3.Child5.Array1);
assert(profile.Child3.Child5.Array1["a1"].name == "a1");
assert(profile.Child3.Child5.Array1["a2"].arrayAttr2 == "arrayAttr2");
assert(profile.Child3.Child5.Array1["a3"].name == "a3");

assert(profile.AnonymousFunction.Script instanceof Function);
globalResult = "";
profile.AnonymousFunction.Script();
assert(globalResult == "globalResult");

assert(profile.Function.Script instanceof Function);
assert(profile.Function.Script(1, 2) == 3);

</pre>
        <h2 id="parseApplicationProfile">parseApplicationProfile()</h2>
        <h3>Prototype</h3>
        <p class="signature">Object parse(String filename)</p>
        <h3>Description</h3>
        <p>Parse the XML formatted application profile specified by filename and create
                        a tree of ECMAScript objects.</p>
                             
        <p>The elements Key, DataElement, Function and ScriptFragment are
                        deserialized as arrays.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>filename</td>
                <td>File name of XML file. Will be mapped to a physical file by the runtime environment.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>Root element of document object model</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// var profile = GPXML.parseApplicationProfile("appl.xml");
// dumpxml(profile, "");

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>HttpRequest - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>HttpRequest - Reference Documentation</h1>
        <p>
                    
            <p>Class implementing the request passed to a scripting servlet.</p>
                    
            <p>Instances of this class wrap the HttpServletRequest from the Servlet API and allow
           scripts easy access to properties of an incoming HTTP connection.</p>
                    
            <p>Instances of this class can not be created directly, but are passed as
           argument to the handleRequest() method.</p>
                    
            <p>Form fields and uploaded files can be accessed using the parameters property.
           It contains all form field names and the associated value. Uploaded files
           are stored as ByteString values.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">HttpRequest() constructor</a>
            </li>
            <li>
                <a href="#getSession">getSession()</a>
            </li>
            <li>
                <a href="#getEntityAsString">getEntityAsString()</a>
            </li>
            <li>
                <a href="#getEntityAsXML">getEntityAsXML()</a>
            </li>
            <li>
                <a href="#getEntityAsInputStream">getEntityAsInputStream()</a>
            </li>
            <li>
                <a href="#getHeaderField">getHeaderField()</a>
            </li>
            <li>
                <a href="#getHeaderFieldList">getHeaderFieldList()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>String</td>
                <td>method</td>
                <td>The HTTP request method (GET, POST, PUT, DELETE, etc)</td>
            </tr>
            <tr>
                <td>String</td>
                <td>contextPath</td>
                <td>The context path under which the servlet is installed. "" for root.</td>
            </tr>
            <tr>
                <td>String</td>
                <td>servletPath</td>
                <td>The path that called this servlet</td>
            </tr>
            <tr>
                <td>String</td>
                <td>pathInfo</td>
                <td>The additional path elements after the servlets URL or null</td>
            </tr>
            <tr>
                <td>String</td>
                <td>queryString</td>
                <td>The query part of an URL after the '?' or null</td>
            </tr>
            <tr>
                <td>String</td>
                <td>contentType</td>
                <td>The MIME type of the body of the request or null</td>
            </tr>
            <tr>
                <td>String</td>
                <td>contentLength</td>
                <td>The length of content in the request</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>localPort</td>
                <td>The local port that received this request</td>
            </tr>
            <tr>
                <td>Object</td>
                <td>parameters</td>
                <td>Associative array with form fields</td>
            </tr>
            <tr>
                <td>HttpServletRequest</td>
                <td>nativeRequest</td>
                <td>The native request</td>
            </tr>
        </table>
        <h2 id="getSession">getSession()</h2>
        <h3>Prototype</h3>
        <p class="signature">HttpSession getSession()</p>
        <h3>Description</h3>
                    
        <p>Obtain - and possibly create - a session object for this connection</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>HttpSession</code>
                </td>
                <td>The session object associated with this request</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

function testSession(req, res) {
	GPSystem.trace("TestSession");
	var session = req.getSession();
	GPSystem.trace("Session id " + session.id);
	GPSystem.trace("Session is new: " + session.isNew);
	GPSystem.trace("Native object " + session.nativeSession);
}

</pre>
        <h2 id="getEntityAsString">getEntityAsString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String getEntityAsString()</p>
        <h3>Description</h3>
                    
        <p>Read the entity from an HTTP request and return it as String.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>The content of the request's entity as string</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

function testEntityString(req, res) {
	GPSystem.trace("TestEntityString");
	var s = req.getEntityAsString();
	GPSystem.trace("Entity (length=" + s.length + "): " + s)
	res.print(s);
}

</pre>
        <h2 id="getEntityAsXML">getEntityAsXML()</h2>
        <h3>Prototype</h3>
        <p class="signature">XML getEntityAsXML()</p>
        <h3>Description</h3>
                    
        <p>Read the entity from an HTTP request and parse as XML structure.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>XML</code>
                </td>
                <td>The content of the request's entity as XML object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

function testEntityXML(req, res) {
	GPSystem.trace("TestEntityXML");
	var xml = req.getEntityAsXML();
	GPSystem.trace("Entity: " + xml.toString());
	res.print(xml);
}

</pre>
        <h2 id="getEntityAsInputStream">getEntityAsInputStream()</h2>
        <h3>Prototype</h3>
        <p class="signature">java.io.InputStream getEntityAsInputStream()</p>
        <h3>Description</h3>
                    
        <p>Obtain the input stream to read the entity from the HTTP request.</p>
                    
        <p>This method is a special function to provide for backward compatibility with the GPXML class.
               It may be removed in future releases.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>java.io.InputStream</code>
                </td>
                <td>The input stream to read the entity</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

function testEntityInputStream(req, res) {
	GPSystem.trace("TestEntityInputStream");
	var is = req.getEntityAsInputStream();

	var parser = new GPXML();
	var r = parser.parse(is);

	GPSystem.trace("Entity: " + r.p.elementValue);
	res.println(r.p.elementValue);
}

</pre>
        <h2 id="getHeaderField">getHeaderField()</h2>
        <h3>Prototype</h3>
        <p class="signature">String[] getHeaderField(String fieldName)</p>
        <h3>Description</h3>
                    
        <p>Returns a list of values for given header field.</p>
                    
        <p>If the field does already exists, then undefined is returned</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>fieldName</td>
                <td>The HTTP header field name</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>The list of values for this header field</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

function testHeader(req, res) {
	GPSystem.trace("TestHeader");

	var headers = req.getHeaderFieldList();
	GPSystem.trace(headers);
	for (var i = 0; i &lt; headers.length; i++) {
		print(headers[i] + " : " + req.getHeaderField(headers[i]));
	}

	var fieldList = req.getHeaderField("x-test");
	if (fieldList) {
		var str = fieldList[0];
		GPSystem.trace(str);
		res.addHeaderField("y-test", str);
	}
}

</pre>
        <h2 id="getHeaderFieldList">getHeaderFieldList()</h2>
        <h3>Prototype</h3>
        <p class="signature">String[] getHeaderFieldList()</p>
        <h3>Description</h3>
                    
        <p>Returns a list of header fields contained in the response.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>The list of header fields</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See getHeaderField for an example

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>HttpResponse - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>HttpResponse - Reference Documentation</h1>
        <p>
                    
            <p>Class implementing the response passed to a scripting servlet.</p>
                    
            <p>Instances of this class wrap the HttpServletResponse from the Servlet API and allow
           scripts easy access to properties of an outgoing HTTP response.</p>
                    
            <p>Instances of this class can not be created directly, but are passed as
           argument to the handleRequest() method.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">HttpResponse() constructor</a>
            </li>
            <li>
                <a href="#addHeaderField">addHeaderField()</a>
            </li>
            <li>
                <a href="#setContentType">setContentType()</a>
            </li>
            <li>
                <a href="#setCharacterEncoding">setCharacterEncoding()</a>
            </li>
            <li>
                <a href="#setContentLength">setContentLength()</a>
            </li>
            <li>
                <a href="#setStatus">setStatus()</a>
            </li>
            <li>
                <a href="#write">write()</a>
            </li>
            <li>
                <a href="#print">print()</a>
            </li>
            <li>
                <a href="#println">println()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_CONTINUE</td>
                <td>Status code (100) indicating the client can continue.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_SWITCHING_PROTOCOLS</td>
                <td>Status code (101) indicating the server is switching protocols according to Upgrade header.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_OK</td>
                <td>Status code (200) indicating the request succeeded normally.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_CREATED</td>
                <td>Status code (201) indicating the request succeeded and created a new resource on the server.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_ACCEPTED</td>
                <td>Status code (202) indicating that a request was accepted for processing, but was not completed.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_NON_AUTHORITATIVE_INFORMATION</td>
                <td>Status code (203) indicating that the meta information presented by the client did not originate from the server.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_NO_CONTENT</td>
                <td>Status code (204) indicating that the request succeeded but that there was no new information to return.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_RESET_CONTENT</td>
                <td>Status code (205) indicating that the agent SHOULD reset the document view which caused the request to be sent.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_PARTIAL_CONTENT</td>
                <td>Status code (206) indicating that the server has fulfilled the partial GET request for the resource.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_MULTIPLE_CHOICES</td>
                <td>Status code (300) indicating that the requested resource corresponds to any one of a set of representations, each with its own specific location.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_MOVED_PERMANENTLY</td>
                <td>Status code (301) indicating that the resource has permanently moved to a new location, and that future references should use a new URI with their requests.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_FOUND</td>
                <td>Status code (302) indicating that the resource reside temporarily under a different URI.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_MOVED_TEMPORARILY</td>
                <td>Status code (302) indicating that the resource has temporarily moved to another location, but that future references should still use the original URI to access the resource.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_SEE_OTHER</td>
                <td>Status code (303) indicating that the response to the request can be found under a different URI.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_NOT_MODIFIED</td>
                <td>Status code (304) indicating that a conditional GET operation found that the resource was available and not modified.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_USE_PROXY</td>
                <td>Status code (305) indicating that the requested resource MUST be accessed through the proxy given by the Location field.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_TEMPORARY_REDIRECT</td>
                <td>Status code (307) indicating that the requested resource resides temporarily under a different URI.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_BAD_REQUEST</td>
                <td>Status code (400) indicating the request sent by the client was syntactically incorrect.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_UNAUTHORIZED</td>
                <td>Status code (401) indicating that the request requires HTTP authentication.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_PAYMENT_REQUIRED</td>
                <td>Status code (402) reserved for future use.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_FORBIDDEN</td>
                <td>Status code (403) indicating the server understood the request but refused to fulfill it.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_NOT_FOUND</td>
                <td>Status code (404) indicating that the requested resource is not available.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_METHOD_NOT_ALLOWED</td>
                <td>Status code (405) indicating that the method specified in the Request-Line is not allowed for the resource identified by the Request-URI.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_NOT_ACCEPTABLE</td>
                <td>Status code (406) indicating that the resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_PROXY_AUTHENTICATION_REQUIRED</td>
                <td>Status code (407) indicating that the client MUST first authenticate itself with the proxy.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_REQUEST_TIMEOUT</td>
                <td>Status code (408) indicating that the client did not produce a request within the time that the server was prepared to wait.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_CONFLICT</td>
                <td>Status code (409) indicating that the request could not be completed due to a conflict with the current state of the resource.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_GONE</td>
                <td>Status code (410) indicating that the resource is no longer available at the server and no forwarding address is known.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_LENGTH_REQUIRED</td>
                <td>Status code (411) indicating that the request cannot be handled without a defined Content-Length.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_PRECONDITION_FAILED</td>
                <td>Status code (412) indicating that the precondition given in one or more of the request-header fields evaluated to false when it was tested on the server.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_REQUEST_ENTITY_TOO_LARGE</td>
                <td>Status code (413) indicating that the server is refusing to process the request because the request entity is larger than the server is willing or able to process.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_REQUEST_URI_TOO_LONG</td>
                <td>Status code (414) indicating that the server is refusing to service the request because the Request-URI is longer than the server is willing to interpret.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_UNSUPPORTED_MEDIA_TYPE</td>
                <td>Status code (415) indicating that the server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_REQUESTED_RANGE_NOT_SATISFIABLE</td>
                <td>Status code (416) indicating that the server cannot serve the requested byte range.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_EXPECTATION_FAILED</td>
                <td>Status code (417) indicating that the server could not meet the expectation given in the Expect request header.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_INTERNAL_SERVER_ERROR</td>
                <td>Status code (500) indicating an error inside the HTTP server which prevented it from fulfilling the request.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_NOT_IMPLEMENTED</td>
                <td>Status code (501) indicating the HTTP server does not support the functionality needed to fulfill the request.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_BAD_GATEWAY</td>
                <td>Status code (502) indicating that the HTTP server received an invalid response from a server it consulted when acting as a proxy or gateway.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_SERVICE_UNAVAILABLE</td>
                <td>Status code (503) indicating that the HTTP server is temporarily overloaded, and unable to handle the request.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_GATEWAY_TIMEOUT</td>
                <td>Status code (504) indicating that the server did not receive a timely response from the upstream server while acting as a gateway or proxy.</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SC_HTTP_VERSION_NOT_SUPPORTED</td>
                <td>Status code (505) indicating that the server does not support or refuses to support the HTTP protocol version that was used in the request message.</td>
            </tr>
        </table>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>HttpServletResponse</td>
                <td>nativeResponse</td>
                <td>The native HttpServletResponse object</td>
            </tr>
        </table>
        <h2 id="addHeaderField">addHeaderField()</h2>
        <h3>Prototype</h3>
        <p class="signature">void addHeaderField(String key, String value)</p>
        <p class="signature">void addHeader(String key, String value) (Deprecated)</p>
        <h3>Description</h3>
                    
        <p>Add a http header field to the response.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>key</td>
                <td>The header field name</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>value</td>
                <td>The header field value</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See HTTPResponse.getHeaderField for an example

</pre>
        <h2 id="setContentType">setContentType()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setContentType(String contentType)</p>
        <h3>Description</h3>
                    
        <p>Set the content type for the response.</p>
                    
        <p>See also javax.servlet.http.HttpServletResponse.setContentType.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>contentType</td>
                <td>The content type</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


</pre>
        <h2 id="setCharacterEncoding">setCharacterEncoding()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setCharacterEncoding(String encoding)</p>
        <h3>Description</h3>
                    
        <p>Set the character encoding for the response.</p>
                    
        <p>See also javax.servlet.http.HttpServletResponse.setCharacterEncoding.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>encoding</td>
                <td>The desired character encoding for the response</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


</pre>
        <h2 id="setContentLength">setContentLength()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setContentLength(Number length)</p>
        <h3>Description</h3>
                    
        <p>Set the content length for the response entity.</p>
                    
        <p>See also javax.servlet.http.HttpServletResponse.setContentLength.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>length</td>
                <td>The number of bytes in the response's entity</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


</pre>
        <h2 id="setStatus">setStatus()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setStatus(Number code)</p>
        <h3>Description</h3>
                    
        <p>Set the status code for the response entity.</p>
                    
        <p>See also javax.servlet.http.HttpServletResponse.setStatus.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>code</td>
                <td>The status code, e.g. any of the SC_ constants defined above</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


</pre>
        <h2 id="write">write()</h2>
        <h3>Prototype</h3>
        <p class="signature">void write(ByteString data)</p>
        <h3>Description</h3>
                    
        <p>Write binary data as part of the response.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>Binary data to be written to the response stream</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


</pre>
        <h2 id="print">print()</h2>
        <h3>Prototype</h3>
        <p class="signature">void print(String data)</p>
        <h3>Description</h3>
                    
        <p>Write String data as part of the response.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>data</td>
                <td>Text data to be written to the response stream</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


</pre>
        <h2 id="println">println()</h2>
        <h3>Prototype</h3>
        <p class="signature">void println(String data)</p>
        <h3>Description</h3>
                    
        <p>Write String data followed by CR/LF as part of the response.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>data</td>
                <td>Text data to be written to the response stream</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>HttpSession - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>HttpSession - Reference Documentation</h1>
        <p>
                    
            <p>Script wrapper object for a http session.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">HttpSession() constructor</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Boolean</td>
                <td>isNew</td>
                <td>True if the session is new</td>
            </tr>
            <tr>
                <td>String</td>
                <td>id</td>
                <td>The session id</td>
            </tr>
        </table>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
      <p>The Smart Card Shell 3 is an interactive development and scripting tool that allows
         easy access to smart cards on an APDU level as well as on a file system
         level. It can be used to develop and test smart card applications, in particular
         applications integrated into a Public Key Infrastructure (PKI).</p>
      <p>It is a Java application using the <a href="http://www.openscdp.org/ocf/index.html">OpenCard Framework</a> supporting most smart cards
         compliant with ISO7816-4. The Smart Card Shell uses <a href="http://developer.mozilla.org/en/docs/JavaScript">JavaScript</a>
         as command and script language provided by the <a href="http://www.mozilla.org/rhino/">Mozilla Rhino Engine</a>.
         It has support for classes defined in the <a href="http://www.globalplatform.org">Global Platform</a>
         Scripting specification and defines additional classes to support ASN.1/TLV encoding, X509 certificates,
         OCSP, LDAP and SOAP. The scripting engine supports <a href="http://developer.mozilla.org/en/E4X_Tutorial">E4X</a> for simple XML processing.</p>
      <p>See the <a href="http://www.openscdp.org/scripts/index.html">list of supported cards and applications</a>, if your card or application is already
         supported. Take a look at the <a href="http://www.openscdp.org/screenshot.html">screenshots</a> to get an
         idea of what the software looks like.</p>
      <h2>Usage</h2>
      <ul>
      <li><a href="http://www.openscdp.org/scsh3/download.html">Download</a></li>
      <li><a href="installation.html">Installation</a></li>
      <li><a href="gettingstarted.html">Getting Started</a></li>
      <li><a href="troubleshooting.html">Troubleshooting</a></li>
      <li><a href="commandline.html">Command Line Arguments</a></li>
      <li><a href="shellcmd.html">Build-in Shell Commands</a></li>
      <li><a href="filelocation.html">Locating Files</a></li>
      <li><a href="configuration.html">Shell and Card Terminal Configuration</a></li>
      <li><a href="settings.html">Persistent Configuration Settings</a></li>
      <li><a href="http://www.openscdp.org/scripts/index.html">Supported Cards and Applications</a></li>
      </ul>
      <h2>Global Platform Scripting Classes</h2>
      <ul>
      <li><a href="gperror.html">GPError - Exceptions thrown by GP methods</a></li>
      <li><a href="gpsystem.html">GPSystem - Access to information (date, version) and tracing functions</a></li>
      <li><a href="bytestring.html">ByteString - Immutuable byte buffer</a></li>
      <li><a href="bytebuffer.html">ByteBuffer - Mutuable byte buffer</a></li>
      <li><a href="tlv.html">TLV - Tag Length Value encoded data structures</a></li>
      <li><a href="tlvlist.html">TLVList - List of Tag Length Value encoded data structures</a></li>
      <li><a href="card.html">Card - Access to ICC</a></li>
      <li><a href="atr.html">Atr - Class to hold the Answer to Reset returned by the ICC</a></li>
      <li><a href="key.html">Key - Class to describe cryptographic keys</a></li>
      <li><a href="crypto.html">Crypto - Cryptographic operations</a></li>
      <li><a href="application.html">Application - Class representing a card application</a></li>
      <li><a href="gpapplication.html">GPApplication - Class representing a card application on a Global Platform card</a></li>
      <li><a href="gpsecuritydomain.html">GPSecurityDomain - Class representing a security domain
                          on a Global Platform card</a></li>
      </ul>
      <h2>OpenSCDP Scripting Classes</h2>
      <ul>
      <li><a href="asn1.html">ASN1 - DER encoded ASN.1 objects</a></li>
      <li><a href="cardfile.html">CardFile - Elementary and dedicated files on ISO 7816-4 smart cards</a></li>
      <li><a href="isosecurechannel.html">IsoSecureChannel - Support for secure messaging from ISO 7816-4 and eSignK</a></li>
      <li><a href="applicationfactory.html">ApplicationFactory - Repository for Global Platform profiles</a></li>
      <li><a href="gpxml.html">GPXML - Parser for XML files, Global Platform Profiles in particular</a></li>
      <li><a href="jsscript.html">JsScript - Class for loading and running scripts</a></li>
      <li><a href="cardsimulationadapter.html">CardSimulationAdapter - Script based simulation of cards</a></li>
      <li><a href="x509.html">X509 - Certificates according to X.509 V3</a></li>
      <li><a href="crl.html">CRL - Certificates revocation lists according to X.509</a></li>
      <li><a href="keystore.html">KeyStore - Container to securely store cryptographic keys</a></li>
      <li><a href="cmssigneddata.html">CMSSignedData - Cryptographic Message Syntax Signed Data</a></li>
      <li><a href="cmsgenerator.html">CMSGenerator - Cryptographic Message Syntax Signed Data Generator</a></li>
      <li><a href="xmlsignature.html">XMLSignature - Support for XML Signature generation and verification</a></li>
      <li><a href="ocspquery.html">OCSPQuery - Query certificate status from an OCSP responder</a></li>
      <li><a href="ldap.html">LDAP - Query information from directory using LDAP</a></li>
      <li><a href="soapconnection.html">SOAPConnection - Call SOAP web services</a></li>
      <li><a href="urlconnection.html">URLConnection - Read from and write to resources identified by an URL</a></li>
      <li><a href="pkcs11provider.html">PKCS11Provider - Support for cryptographic modules with a PKCS#11 interface</a></li>
      <li><a href="pkcs11session.html">PKCS11Session - Session management and cryptographic operations</a></li>
      <li><a href="pkcs11object.html">PKCS11Object - Support for creating and accessing PKCS#11 objects</a></li>
      </ul>
      <h2>Smart Card Shell GUI Classes</h2>
      <ul>
      <li><a href="outlinenode.html">OutlineNode - Class to build outline trees.</a></li>
      <li><a href="dialog.html">Dialog - Support for simple prompts in scripts.</a></li>
      <li><a href="task.html">Task - Class to run and manage background tasks.</a></li>
      </ul>
	  <p>Additional tools classes are documented as <a href="jsdoc/index.html">JSDoc</a></p>
      <p>The online documentation is for latest beta version of the Smart Card Shell. The latest stable version may not
         yet contain all functions described here.</p>
      <h2>Download</h2>
      <p>You can always find the
          <a href="http://www.openscdp.org/scsh3/download.html">latest version of the Smart Card Shell</a>
       on our website.</p>
      <h2>License</h2>
      <p>This program is free software; you can redistribute it and/or
         modify it under the terms of the GNU General Public License version 2
         as published by the Free Software Foundation.</p>

      <p>This program is distributed in the hope that it will be useful,
         but WITHOUT ANY WARRANTY; without even the implied warranty of
         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
         <a href="gpl.txt">GNU General Public License</a> for more details.</p>

      <p>You should have received a copy of the GNU General Public License
         along with this program; if not, write to the Free Software
         Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.</p>
      <p>If you would like to include this software or parts of it in your own software and do
         not publish your code under the GPL, then you will need a commercial license from us (Dual-license).</p>
      <p>We also provide support, integration and development services for OpenSCDP, as well as
         consulting services for your smart card project. Please contact <img src="support.png" align="absmiddle"> for
         details.</p>
      <p>The raw picture for the banner on top was kindly provided by www.photocase.com.</p>
      <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3 - Installation</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
<h1>Installing the Smart Card Shell</h1>
<p>The Smart Card Shell is a Java program that can be installed on most operating
   systems for which a Java runtime is available. During development, the shell
   is tested on Windows, Linux and MacOS.</p>
<h2>Requirements</h2>
<h3>Java Runtime</h3>
<p>The Smart Card Shell requires a Java Runtime Environment (JRE), which is version 1.11 at minimum.
   The PC must fulfil the usual requirements of an office system.</p>
<h3>Card Reader</h3>
<p>You will need a contact or contactless smart card reader with PC/SC
   or CT-API driver. PC/SC readers are supported by the default installation.</p>
<p>For CT-API card readers you will need to enter the correct CT-API DLL or shared object
   into the OCF configuration file. See the <a href="configuration.html">configuration documentation</a> for
   supported readers and special configuration options.</p>
<h2>Installing on Windows</h2>
<p>The Smart Card Shell can be installed on any Windows, Linux and MacOS system with a working Java Runtime Environment.</p>
<p>There are two installation options:</p>
<ul>
<li>Installing from an IzPack installer file or</li>
<li>Unpacking from a .ZIP file</li>
</ul>
<p>If you install from the IzPack file, then all the required entries in the start menu are created automatically.</p>
<p>If you do not have installation privileges for your PC or just don't like to use the installer,
   then the software is available in a .ZIP archive. This archive is basically a snapshot of a working
   installation and can be put into any directory you like.</p>
<p>The console version of the shell can be started with the SCSH3.CMD, the graphical version with
   the SCSH3GUI.CMD file.</p>
<h2>Installing on Linux or Mac OS X</h2>
<p>To use the Smart Card Shell on Linux you will need the PC/SC subsystem available as package in your distribution or
   available at the <a href="http://pcsclite.alioth.debian.org/">MUSCLE</a> project. You can also use a CT-API driver,
   if a Linux version is available for your reader.</p>
<p>To install the Smart Card Shell on Linux or Mac OS X you will need to either use the IzPack installer or unpack the .ZIP file into a
   directory of your choice.</p>
<p>Shell scripts are provided to start the console and graphical version of the Smart Card Shell. Please make sure the start scripts
   are marked executable.</p>
<h3>No card readers found on Big Sur or some Linux variants</h3>
<p>If no card reader can be found, then most likely the Java runtime does not find the PCSC client library.
   You will then need to find the folder containing PCSC on MacOSX or libpcsclite.so on Linux and specify
   that path in the Java system property sun.security.smartcardio.library.</p>
<pre>
Examples are
 -Dsun.security.smartcardio.library=/System/Library/Frameworks/PCSC.framework/Versions/Current/PCSC
 -Dsun.security.smartcardio.library=lib/x86_64-linux-gnu/libpcsclite.so
</pre>
<p>See <a href="https://bugs.openjdk.java.net/browse/JDK-8252412">JDK-8252412</a> for details on the Big Sur issue.</p>
<h3>Launcher still starts the older version installed</h3>
<p>You need to run kbuildsycoca5/kbuildsyscoca6 to update the cache of .desktop files.</p>
<h2>Selecting a Working Directory</h2>
<p>When you start the Smart Card Shell, it will ask you for a working directory.
   Please select a directory which you will use to store the scripts you are writing.</p>
<p>If you do not select a working directory, then the shell will use the installation
   directory (usually "c:\Program Files\CardContact\Smart Card Shell 3") as default. In most cases this is
   not convenient, so please try and select your own working directory.</p>
<p>The working directory will be used to store the configuration options (e.g. selected card reader).
   You can use different working directories, e.g. one for each project.</p>
<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>IsoSecureChannel - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>IsoSecureChannel - Reference Documentation</h1>
        <p>
                    
            <p>Class to support a secure communication channel via secure messaging according to ISO 7816-4
           and CWA 14890 (eSign-K).</p>
                    
            <p>This implementation supports 3-TDES and AES keys for MAC and encryption.</p>
                    
            <p>For 3-TDES keys the MAC algorithm is ISO 9797 Algorithm 3 (Retail-MAC or EMV-MAC),
           the encryption algorithm is DES-CBC.</p>
                    
            <p>For AES keys the MAC algorithm is AES-CMAC and the encryption algorithm is AES-CBC.</p>
                    
            <p>Three policies for handling send sequence counters are available:</p>
                    
            <p>SSC_DEFAULT_POLICY</p>
                    
            <p>If a send sequence counter for MAC is defined, then it
           is incremented for each new MAC and prepended to the protected message.</p>
                    
            <p>If a send sequence counter for encryption is defined, then it is incremented
           for each new cryptogram and used as initialisation vector.</p>
                    
            <p>SSC_SYNC_POLICY</p>
                    
            <p>If a send sequence counter for MAC is defined, then it is
           incremented for each new MAC and prepended to the protected message.</p>
                    
            <p>The same send sequence counter is used as initialisation vector for
           encrypted data (EAC 2.0 with 3-TDES).</p>
                    
            <p>SSC_SYNC_ENC_POLICY</p>
                    
            <p>If a send sequence counter for MAC is defined, then it is
           incremented for each new MAC and prepended to the protected message.</p>
                    
            <p>The same send sequence counter is encrypted and the result is used as
           initialisation vector for encrypted data. This has the same effect as
           prepending the message to be encrypted with the SSC (EAC 2.0 with AES).</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">IsoSecureChannel() constructor</a>
            </li>
            <li>
                <a href="#setEncKey">setEncKey()</a>
            </li>
            <li>
                <a href="#setMacKey">setMacKey()</a>
            </li>
            <li>
                <a href="#setMACSendSequenceCounter">setMACSendSequenceCounter()</a>
            </li>
            <li>
                <a href="#setEncryptionSendSequenceCounter">setEncryptionSendSequenceCounter()</a>
            </li>
            <li>
                <a href="#setIV">setIV()</a>
            </li>
            <li>
                <a href="#setMacLength">setMacLength()</a>
            </li>
            <li>
                <a href="#wrap">wrap()</a>
            </li>
            <li>
                <a href="#unwrap">unwrap()</a>
            </li>
            <li>
                <a href="#setCRT">setCRT()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>SSC_DEFAULT_POLICY</td>
                <td>Default SSC policy</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SSC_SYNC_POLICY</td>
                <td>Same send sequence counter for MAC and encryption</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SSC_SYNC_ENC_POLICY</td>
                <td>Same send sequence counter for MAC and encrypted SSC for encryption</td>
            </tr>
        </table>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>ByteString</td>
                <td>encryptionSendSequenceCounter</td>
                <td>Current value of send sequence counter for encryption</td>
            </tr>
            <tr>
                <td>ByteString</td>
                <td>MACSendSequenceCounter</td>
                <td>Current value of send sequence counter for MAC calculation</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">IsoSecureChannel(Crypto crypto)</p>
        <p class="signature">IsoSecureChannel(Crypto crypto, Number policy)</p>
        <h3>Description</h3>
                    
        <p>Instantiate an IsoSecureChannel object that allows to wrap command-APDUs and unwrap
               response-APDUs using secure messaging as defined in ISO 7816-4 and CWA 14890 (eSign-K).</p>
                    
        <p>The object instantiated with this constructor must be further initialized using
               the setEncKey(), setMacKey() and setMACSendSequenceCounter() methods.</p>
                    
        <p>The class only supports 3DES/CBC and RetailMAC as cryptographic algorithms using a double or triple length DES key.</p>
                    
        <p>Objects of this class can be used in Card.setCredential() and CardFile.setCredential() as
               credential object.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Crypto</code>
                </td>
                <td>crypto</td>
                <td>Crypto object to use for cryptographic operations</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>policy</td>
                <td>One of SSC_DEFAULT_POLICY, SSC_SYNC_POLICY or SSC_SYNC_ENC_POLICY</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var crypto = new Crypto();
var isc = new IsoSecureChannel(crypto);

</pre>
        <h2 id="setEncKey">setEncKey()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setEncKey(Key kenc)</p>
        <h3>Description</h3>
                    
        <p>Set the key to be used for encryption of command-APDUs and decryption of
               response-APDUs.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>kenc</td>
                <td>The encryption key</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Argument must be of type Key</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var kencval = new ByteString("7CA110454A1A6E570131D9619DC1376E4A1A6E570131D961", HEX);
var kenc = new Key();
kenc.setComponent(Key.DES, kencval);

isc.setEncKey(kenc);

</pre>
        <h2 id="setMacKey">setMacKey()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setMacKey(Key kmac)</p>
        <h3>Description</h3>
                    
        <p>Set the key to be used for calculating and verifying the message authentication code (MAC).</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>kmac</td>
                <td>The message authentication key</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Argument must be of type Key</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var kmacval = new ByteString("0131D9619DC1376E7CA110454A1A6E579DC1376E7CA11045", HEX);
var kmac = new Key();
kmac.setComponent(Key.DES, kmacval);

isc.setMacKey(kmac);

</pre>
        <h2 id="setMACSendSequenceCounter">setMACSendSequenceCounter()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setMACSendSequencCounter(ByteString ssc)</p>
        <h3>Description</h3>
                    
        <p>Set the initial value for the send sequence counter using for message authentication codes.</p>
                    
        <p>If a send sequence counter is defined, then this counter will be incremented
               for each command or response APDU that contains a MAC.</p>
                    
        <p>The deprecated setSendSequenceCounter() maps to this method.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>ssc</td>
                <td>The initial value for the send sequence counter or null</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>The argument must be of type ByteString</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var ssc = new ByteString("FFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);

</pre>
        <h2 id="setEncryptionSendSequenceCounter">setEncryptionSendSequenceCounter()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setEncryptionSendSequencCounter(ByteString ssc)</p>
        <h3>Description</h3>
                    
        <p>Set the initial value for the send sequence counter used for encryption.</p>
                    
        <p>If a send sequence counter is defined, then this counter will be incremented
               for each command or response APDU that contains encrypted contents.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>ssc</td>
                <td>The initial value for the send sequence counter or null</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>The argument must be of type ByteString</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// see setMACSendSequenceCounter() for an example.

</pre>
        <h2 id="setIV">setIV()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setIV(ByteString iv)</p>
        <h3>Description</h3>
                    
        <p>Set the initial vector for DES/CBC encryption and decryption.</p>
                    
        <p>The default value used without using this method is '0000000000000000'.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>iv</td>
                <td>The initial vector or null</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>The argument must be of type ByteString</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var iv = new ByteString("1111111111111111", HEX);
isc.setIV(iv);

</pre>
        <h2 id="setMacLength">setMacLength()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setMacLength(Number maclen)</p>
        <h3>Description</h3>
                    
        <p>Set the length of the message authentication code as number of most significant
               bytes from the last cryptographic operation.</p>
                    
        <p>The default value is 8 byte.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>maclen</td>
                <td>The number of leftmost / most significant bytes to be used as MAC</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>The argument must be of type ByteString</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

isc.setMacLength(8);

</pre>
        <h2 id="wrap">wrap()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString wrap(ByteString apduToWrap, Number usageQualifier)</p>
        <h3>Description</h3>
                    
        <p>Wrap a command-APDU with a secure messaging block.</p>
                    
        <p>Depending on the usageQualifier, no transformation (0), an encryption (Card.CENC), a MAC
	   calculation (Card.CPRO) or both (Card.CENC|Card.CPRO) is performed.</p>
        	
        <p>The APDU is transformed as defined in ISO 7816-4 and CWA 14890 (eSignK).</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>apduToWrap</td>
                <td>The command APDU to wrap</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>usageQualifier</td>
                <td>A bitwise combination of Card.CPRO and Card.CENC.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Wrapped command APDU</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>The type of the argument passed to the method is invalid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>The cryptographic operating is not supported by the selected crypto service</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// #### Using 3-TDES with short APDUs ####

var ssc = new ByteString("FFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);

// Case 1 Command APDU CLA=00 INS=10 P1=20 P2=30
var apdu = new ByteString("00102030", HEX);

// Case 1 Plain 	-&gt; CLA'|INS|P1|P2
var r = isc.wrap(apdu, 0);

// Test result
assert(r.toString(16) == "08102030");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFF6");



// Case 1 CENC  	-&gt; CLA'|INS|P1|P2
var r = isc.wrap(apdu, Card.CENC);

// Test result
assert(r.toString(16) == "08102030");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFF6");



// Case 1 CPRO		-&gt; CLA'|INS|P1|P2|Lc'|TLmac
var r = isc.wrap(apdu, Card.CPRO);

// Test result
var exp = new ByteString("0C1020300A8E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFF70C10203080000000", HEX));
exp = exp.concat(mac);
assert(r.equals(exp));



// Case 1 CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLmac
var r = isc.wrap(apdu, Card.CENC|Card.CPRO);

// Test result
var exp = new ByteString("0C1020300A8E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFF80C10203080000000", HEX));
exp = exp.concat(mac);
assert(r.equals(exp));



// Case 2s Command APDU CLA=00 INS=10 P1=20 P2=30 Le=80
var apdu = new ByteString("0010203080", HEX);

// Case 2s Plain		-&gt; CLA'|INS|P1|P2|Lc'|TLle|00
var r = isc.wrap(apdu, 0);

// Test result
assert(r.toString(16) == "081020300396018000");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFF8");



// Case 2s CENC		-&gt; CLA'|INS|P1|P2|Lc'|TLle|00
var r = isc.wrap(apdu, Card.CENC);

// Test result
assert(r.toString(16) == "081020300396018000");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFF8");



// Case 2s CPRO		-&gt; CLA'|INS|P1|P2|Lc'|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CPRO);

// Test result
var exp = new ByteString("0C1020300D9701808E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFF90C102030800000009701808000000000", HEX));
exp = exp.concat(mac).concat(new ByteString("00", HEX));
assert(r.equals(exp));



// Case 2s CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CPRO|Card.CENC);

// Test result
var exp = new ByteString("0C1020300D9701808E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFFA0C102030800000009701808000000000", HEX));
exp = exp.concat(mac).concat(new ByteString("00", HEX));
assert(r.equals(exp));



// Case 3s Command APDU CLA=00 INS=10 P1=20 P2=30 Lc=04 Data=41424344
var apdu = new ByteString("001020300441424344", HEX);

// Case 3s Plain		-&gt; CLA'|INS|P1|P2|Lc'|TLplain
var r = isc.wrap(apdu, 0);

// Test result
assert(r.toString(16) == "0810203006800441424344");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFFA");



// Case 3s CENC		-&gt; CLA'|INS|P1|P2|Lc'|TLenc
var r = isc.wrap(apdu, Card.CENC);

// Test result
var exp = new ByteString("081020300B860901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC,
            new ByteString("4142434480000000", HEX), iv);
exp = exp.concat(enc);
assert(r.equals(exp));
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFFB");



// Case 3s CPRO		-&gt; CLA'|INS|P1|P2|Lc'|TLplain|TLmac
var r = isc.wrap(apdu, Card.CPRO);

// Test result
var exp = new ByteString("0C102030108104414243448E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFFC0C102030800000008104414243448000", HEX));
exp = exp.concat(mac);
assert(r.equals(exp));


// Case 3s CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLmac
var r = isc.wrap(apdu, Card.CENC|Card.CPRO);

// Test result
var exp = new ByteString("0C10203015870901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC,
            new ByteString("4142434480000000", HEX), iv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("8E08", HEX));
var macinp = new ByteString("FFFFFFFFFFFFFFFD0C10203080000000870901", HEX);
macinp = macinp.concat(enc);
macinp = macinp.concat(new ByteString("8000000000", HEX));
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, macinp);
exp = exp.concat(mac);
assert(r.equals(exp));



// Case 4s Command APDU CLA=00 INS=10 P1=20 P2=30 Lc=04 Data=41424344 Le=80
var apdu = new ByteString("00102030044142434480", HEX);

// Case 4s Plain		-&gt; CLA'|INS|P1|P2|Lc'|TLplain|TLle|00
var r = isc.wrap(apdu, 0);

// Test result
assert(r.toString(16) == "081020300980044142434496018000");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFFD");



// Case 4s CENC		-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLle|00
var r = isc.wrap(apdu, Card.CENC);

// Test result
var exp = new ByteString("081020300E860901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC,
            new ByteString("4142434480000000", HEX), iv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("96018000", HEX));
assert(r.equals(exp));
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFFE");



// Case 4s CPRO		-&gt; CLA'|INS|P1|P2|Lc'|TLplain|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CPRO);

// Test result
var exp = new ByteString("0C102030138104414243449701808E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFFF0C1020308000000081044142434497018080000000000000", HEX));
exp = exp.concat(mac).concat(new ByteString("00", HEX));
assert(r.equals(exp));



// Case 4s CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CENC|Card.CPRO);

// Test result
var exp = new ByteString("0C10203018870901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC,
            new ByteString("4142434480000000", HEX), iv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("9701808E08", HEX));
var macinp = new ByteString("00000000000000000C10203080000000870901", HEX);
macinp = macinp.concat(enc);
macinp = macinp.concat(new ByteString("970180", HEX));
macinp = macinp.concat(new ByteString("8000", HEX));
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, macinp);
exp = exp.concat(mac).concat(new ByteString("00", HEX));
assert(r.equals(exp));


//#### Using 3-TDES with extended APDUs ####

var ssc = new ByteString("FFFFFFFFFFFFFFF8", HEX);
isc.setMACSendSequenceCounter(ssc);

//Case 2e Command APDU CLA=00 INS=10 P1=20 P2=30 Le=000180
var apdu = new ByteString("00102030000180", HEX);

// Case 2e Plain		-&gt; CLA'|INS|P1|P2|Lc'|TLle|00
var r = isc.wrap(apdu, 0);

// Test result
assert(r.toString(16) == "08102030000004960201800000");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFF8");



// Case 2e CENC		-&gt; CLA'|INS|P1|P2|Lc'|TLle|00
var r = isc.wrap(apdu, Card.CENC);

// Test result
assert(r.toString(16) == "08102030000004960201800000");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFF8");



// Case 2e CPRO		-&gt; CLA'|INS|P1|P2|Lc'|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CPRO);

// Test result
var exp = new ByteString("0C10203000000E970201808E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFF90C102030800000009702018080000000", HEX));
exp = exp.concat(mac).concat(new ByteString("0000", HEX));
// print("Expected " + exp);
// print("Received " + r);
assert(r.equals(exp));



// Case 2e CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CPRO|Card.CENC);

// Test result
var exp = new ByteString("0C10203000000E970201808E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFFA0C102030800000009702018080000000", HEX));
exp = exp.concat(mac).concat(new ByteString("0000", HEX));
assert(r.equals(exp));



//Case 3e Command APDU CLA=00 INS=10 P1=20 P2=30 Lc=04 Data=41424344
var apdu = new ByteString("0010203000000441424344", HEX);

// Case 3e Plain		-&gt; CLA'|INS|P1|P2|Lc'|TLplain
var r = isc.wrap(apdu, 0);

// Test result
assert(r.toString(16) == "08102030000006800441424344");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFFA");



// Case 3e CENC		-&gt; CLA'|INS|P1|P2|Lc'|TLenc
var r = isc.wrap(apdu, Card.CENC);

// Test result
var exp = new ByteString("0810203000000B860901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC,
            new ByteString("4142434480000000", HEX), iv);
exp = exp.concat(enc);
assert(r.equals(exp));
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFFB");



// Case 3e CPRO		-&gt; CLA'|INS|P1|P2|Lc'|TLplain|TLmac
var r = isc.wrap(apdu, Card.CPRO);

// Test result
var exp = new ByteString("0C1020300000108104414243448E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFFC0C102030800000008104414243448000", HEX));
exp = exp.concat(mac);
assert(r.equals(exp));


// Case 3e CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLmac
var r = isc.wrap(apdu, Card.CENC|Card.CPRO);

// Test result
var exp = new ByteString("0C102030000015870901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC,
            new ByteString("4142434480000000", HEX), iv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("8E08", HEX));
var macinp = new ByteString("FFFFFFFFFFFFFFFD0C10203080000000870901", HEX);
macinp = macinp.concat(enc);
macinp = macinp.concat(new ByteString("8000000000", HEX));
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, macinp);
exp = exp.concat(mac);
assert(r.equals(exp));



//Case 4e Command APDU CLA=00 INS=10 P1=20 P2=30 Lc=000004 Data=41424344 Le=000180
var apdu = new ByteString("00102030000004414243440180", HEX);

// Case 4e Plain		-&gt; CLA'|INS|P1|P2|Lc'|TLplain|TLle|00
var r = isc.wrap(apdu, 0);

// Test result
assert(r.toString(16) == "0810203000000A800441424344960201800000");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFFD");



// Case 4e CENC		-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLle|00
var r = isc.wrap(apdu, Card.CENC);

// Test result
var exp = new ByteString("0810203000000F860901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC,
            new ByteString("4142434480000000", HEX), iv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("960201800000", HEX));
assert(r.equals(exp));
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFFE");



// Case 4e CPRO		-&gt; CLA'|INS|P1|P2|Lc'|TLplain|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CPRO);

// Test result
var exp = new ByteString("0C102030000014810441424344970201808E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFFF0C1020308000000081044142434497020180800000000000", HEX));
exp = exp.concat(mac).concat(new ByteString("0000", HEX));
assert(r.equals(exp));



// Case 4e CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CENC|Card.CPRO);

// Test result
var exp = new ByteString("0C102030000019870901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC,
            new ByteString("4142434480000000", HEX), iv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("970201808E08", HEX));
var macinp = new ByteString("00000000000000000C10203080000000870901", HEX);
macinp = macinp.concat(enc);
macinp = macinp.concat(new ByteString("97020180", HEX));
macinp = macinp.concat(new ByteString("80", HEX));
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, macinp);
exp = exp.concat(mac).concat(new ByteString("0000", HEX));
assert(r.equals(exp));



// Special case: No MAC and no ENC
var ssc = new ByteString("FFFFFFFFFFFFFFF8", HEX);
isc.setMACSendSequenceCounter(ssc);

//Case 2e Command APDU CLA=00 INS=10 P1=20 P2=30 Le=000180
var apdu = new ByteString("00102030000000", HEX);

// Case 2e Plain		-&gt; CLA'|INS|P1|P2|Lc'|TLle|00
var r = isc.wrap(apdu, 0);

// Test result
assert(r.toString(16) == "08102030000004960200000000");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFF8");




// Using AES with SSC default policy

var isc = new IsoSecureChannel(crypto);

var kencval = new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX);
var kenc = new Key();
kenc.setComponent(Key.AES, kencval);

isc.setEncKey(kenc);


var kmacval = new ByteString("0131D9619DC1376E7CA110454A1A6E57", HEX);
var kmac = new Key();
kmac.setComponent(Key.AES, kmacval);

isc.setMacKey(kmac);

var ssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);

var iv = new ByteString("11111111111111111111111111111111", HEX);
isc.setIV(iv);

//Case 4s Command APDU CLA=00 INS=10 P1=20 P2=30 Lc=04 Data=41424344 Le=80
var apdu = new ByteString("00102030044142434480", HEX);

//Case 4s CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CENC|Card.CPRO);

//Test result
var exp = new ByteString("0C10203020871101", HEX);
var enc = crypto.encrypt(kenc, Crypto.AES_CBC,
            new ByteString("41424344800000000000000000000000", HEX), iv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("9701808E08", HEX));
var macinp = new ByteString(
            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70C" +
			"102030800000000000000000000000871101", HEX);
macinp = macinp.concat(enc);
macinp = macinp.concat(new ByteString("970180", HEX));
macinp = macinp.concat(new ByteString("80000000000000000000", HEX));
var mac = crypto.sign(kmac, Crypto.AES_CMAC, macinp);
exp = exp.concat(mac.left(8)).concat(new ByteString("00", HEX));

// print("Expected " + exp);
// print("Received " + r);

assert(r.equals(exp));



// Using AES with SSC_SYNC_POLICY

var isc = new IsoSecureChannel(crypto, IsoSecureChannel.SSC_SYNC_POLICY);

var kencval = new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX);
var kenc = new Key();
kenc.setComponent(Key.AES, kencval);

isc.setEncKey(kenc);


var kmacval = new ByteString("0131D9619DC1376E7CA110454A1A6E57", HEX);
var kmac = new Key();
kmac.setComponent(Key.AES, kmacval);

isc.setMacKey(kmac);

var ssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);
var nextssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7", HEX);

var iv = new ByteString("00000000000000000000000000000000", HEX);


//Case 4s Command APDU CLA=00 INS=10 P1=20 P2=30 Lc=04 Data=41424344 Le=80
var apdu = new ByteString("00102030044142434480", HEX);

//Case 4s CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CENC|Card.CPRO);

//Test result
var exp = new ByteString("0C10203020871101", HEX);
var enc = crypto.encrypt(kenc, Crypto.AES_CBC, new ByteString(
            "41424344800000000000000000000000", HEX), nextssc);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("9701808E08", HEX));

var macinp = nextssc.concat(new ByteString(
            "0C102030800000000000000000000000871101", HEX));
macinp = macinp.concat(enc);
macinp = macinp.concat(new ByteString("970180", HEX));
macinp = macinp.concat(new ByteString("80000000000000000000", HEX));
var mac = crypto.sign(kmac, Crypto.AES_CMAC, macinp);
exp = exp.concat(mac.left(8)).concat(new ByteString("00", HEX));

// print("Expected " + exp);
// print("Received " + r);

assert(r.equals(exp));


//Using AES with SSC_SYNC_POLICY

var isc = new IsoSecureChannel(crypto, IsoSecureChannel.SSC_SYNC_ENC_POLICY);

var kencval = new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX);
var kenc = new Key();
kenc.setComponent(Key.AES, kencval);

isc.setEncKey(kenc);


var kmacval = new ByteString("0131D9619DC1376E7CA110454A1A6E57", HEX);
var kmac = new Key();
kmac.setComponent(Key.AES, kmacval);

isc.setMacKey(kmac);

var ssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);
var nextssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7", HEX);

var iv = new ByteString("00000000000000000000000000000000", HEX);


//Case 4s Command APDU CLA=00 INS=10 P1=20 P2=30 Lc=04 Data=41424344 Le=80
var apdu = new ByteString("00102030044142434480", HEX);

//Case 4s CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CENC|Card.CPRO);

//Test result
var exp = new ByteString("0C10203020871101", HEX);
var niv = crypto.encrypt(kenc, Crypto.AES_CBC, nextssc, iv);
var enc = crypto.encrypt(kenc, Crypto.AES_CBC, new ByteString(
            "41424344800000000000000000000000", HEX), niv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("9701808E08", HEX));

var macinp = nextssc.concat(new ByteString(
            "0C102030800000000000000000000000871101", HEX));
macinp = macinp.concat(enc);
macinp = macinp.concat(new ByteString("970180", HEX));
macinp = macinp.concat(new ByteString("80000000000000000000", HEX));
var mac = crypto.sign(kmac, Crypto.AES_CMAC, macinp);
exp = exp.concat(mac.left(8)).concat(new ByteString("00", HEX));

// print("Expected " + exp);
// print("Received " + r);

assert(r.equals(exp));



//Using AES with SSC default policy and odd instruction byte

var isc = new IsoSecureChannel(crypto);

var kencval = new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX);
var kenc = new Key();
kenc.setComponent(Key.AES, kencval);

isc.setEncKey(kenc);


var kmacval = new ByteString("0131D9619DC1376E7CA110454A1A6E57", HEX);
var kmac = new Key();
kmac.setComponent(Key.AES, kmacval);

isc.setMacKey(kmac);

var ssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);

var iv = new ByteString("11111111111111111111111111111111", HEX);
isc.setIV(iv);

//Case 4s Command APDU CLA=00 INS=11 P1=20 P2=30 Lc=04 Data=41424344 Le=80
var apdu = new ByteString("00112030048002123480", HEX);

//Case 4s CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CENC|Card.CPRO);

//Test result
var exp = new ByteString("0C1120301F8510", HEX);
var enc = crypto.encrypt(kenc, Crypto.AES_CBC, new ByteString(
            "80021234800000000000000000000000", HEX), iv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("9701808E08", HEX));
var macinp = new ByteString(
            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70C" +
            "1120308000000000000000000000008510", HEX);
macinp = macinp.concat(enc);
macinp = macinp.concat(new ByteString("970180", HEX));
macinp = macinp.concat(new ByteString("8000000000000000000000", HEX));
var mac = crypto.sign(kmac, Crypto.AES_CMAC, macinp);
exp = exp.concat(mac.left(8)).concat(new ByteString("00", HEX));

print("Expected " + exp);
print("Received " + r);

assert(r.equals(exp));

</pre>
        <h2 id="unwrap">unwrap()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString unwrap(ByteString apduToUnwrap, Number usageQualifier)</p>
        <h3>Description</h3>
                    
        <p>Unwrap a response-APDU from a secure messaging block and check the encryption and MAC.</p>
                    
        <p>Depending on the usageQualifier, no transformation (0), an decryption (Card.RENC), a MAC
	   verification (Card.RPRO) or both (Card.RENC|Card.RPRO) is performed.</p>
        	
        <p>The APDU is transformed as defined in ISO 7816-4 and CWA 14890 (eSignK).</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>apduToUnwrap</td>
                <td>The response APDU to unwrap</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>usageQualifier</td>
                <td>A bitwise combination of Card.RPRO and Card.RENC.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Unwrapped response APDU</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>The type of the argument passed to the method is invalid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>The cryptographic operating is not supported by the selected crypto service</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>Either the MAC verification or data block decryption failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var isc = new IsoSecureChannel(crypto);

var kencval = new ByteString("7CA110454A1A6E570131D961" +
                             "9DC1376E4A1A6E570131D961", HEX);
var kenc = new Key();
kenc.setComponent(Key.DES, kencval);
isc.setEncKey(kenc);

var kmacval = new ByteString("0131D9619DC1376E7CA11045" +
                             "4A1A6E579DC1376E7CA11045", HEX);
var kmac = new Key();
kmac.setComponent(Key.DES, kmacval);
isc.setMacKey(kmac);

var iv = new ByteString("1111111111111111", HEX);
isc.setIV(iv);

var ssc = new ByteString("0000000000000000", HEX);
isc.setMACSendSequenceCounter(ssc);

// SW1/SW2 only, Plain			-&gt; SW1/SW2
// Prepare response from ICC
var apdu = new ByteString("9000", HEX);

var r = isc.unwrap(apdu, 0);

// Test result
assert(r.toString(16) == "9000");



// SW1/SW2 only, RPRO			-&gt; TLmac|SW1/SW2
// Prepare response from ICC
var apdu = new ByteString("8E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "00000000000000018000000000000000", HEX));
apdu = apdu.concat(mac);
apdu = apdu.concat(new ByteString("9000", HEX));

var r = isc.unwrap(apdu, Card.RPRO);

// Test result
assert(r.toString(16) == "9000");



// SW1/SW2 only, RPRO with SW1SW2	-&gt; TLsw|TLmac|SW1/SW2
// Prepare response from ICC
var apdu = new ByteString("990212348E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "00000000000000029902123480000000", HEX));
apdu = apdu.concat(mac);
apdu = apdu.concat(new ByteString("9000", HEX));

var r = isc.unwrap(apdu, Card.RPRO);

// Test result
assert(r.toString(16) == "1234");



// Data | SW1/SW2, Plain		-&gt; TLplain|SW1/SW2
// Prepare response from ICC
var apdu = new ByteString("8004414243449000", HEX);

var r = isc.unwrap(apdu, 0);

// Test result
assert(r.toString(16) == "414243449000");



// Data | SW1/SW2, RENC			-&gt; TLenc|SW1/SW2
// Prepare response from ICC
var apdu = new ByteString("860901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC, new ByteString(
            "4142434480000000", HEX), iv);
apdu = apdu.concat(enc);
apdu = apdu.concat(new ByteString("9000", HEX));

var r = isc.unwrap(apdu, Card.RENC);

// Test result
assert(r.toString(16) == "414243449000");
assert(isc.sendSequenceCounter.toString(16) == "0000000000000003");



// Data | SW1/SW2, RPRO			-&gt; TLplain|TLmac|SW1/SW2
// Prepare response from ICC
var apdu = new ByteString("810441424344", HEX);
var macinp = new ByteString("0000000000000004", HEX);
macinp = macinp.concat(apdu);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, macinp.pad(Crypto.ISO9797_METHOD_2));
apdu = apdu.concat(new ByteString("8E08", HEX));
apdu = apdu.concat(mac);
apdu = apdu.concat(new ByteString("9000", HEX));

var r = isc.unwrap(apdu, Card.RPRO);

// Test result
assert(r.toString(16) == "414243449000");



// Data | SW1/SW2, RPRO with SW1/SW2	-&gt; TLplain|TLsw|TLmac|SW1/SW2
// Prepare response from ICC
var apdu = new ByteString("81044142434499021234", HEX);
var macinp = new ByteString("0000000000000005", HEX);
macinp = macinp.concat(apdu);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, macinp.pad(Crypto.ISO9797_METHOD_2));
apdu = apdu.concat(new ByteString("8E08", HEX));
apdu = apdu.concat(mac);
apdu = apdu.concat(new ByteString("9000", HEX));

var r = isc.unwrap(apdu, Card.RPRO);

// Test result
assert(r.toString(16) == "414243441234");



// Data | SW1/SW2, RENC|RPRO		-&gt; TLenc|TLmac|SW1/SW2
// Prepare response from ICC
var apdu = new ByteString("870901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC, new ByteString(
            "4142434480000000", HEX), iv);
apdu = apdu.concat(enc);
var macinp = new ByteString("0000000000000006", HEX);
macinp = macinp.concat(apdu);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, macinp.pad(Crypto.ISO9797_METHOD_2));
apdu = apdu.concat(new ByteString("8E08", HEX));
apdu = apdu.concat(mac);
apdu = apdu.concat(new ByteString("9000", HEX));

var r = isc.unwrap(apdu, Card.RPRO|Card.RENC);

// Test result
assert(r.toString(16) == "414243449000");



// Data | SW1/SW2, RENC|RPRO with SW1/SW2	-&gt; TLenc|TLsw|TLmac|SW1/SW2
// Prepare response from ICC
var apdu = new ByteString("870901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC, new ByteString(
            "4142434480000000", HEX), iv);
apdu = apdu.concat(enc);
apdu = apdu.concat(new ByteString("99021234", HEX));
var macinp = new ByteString("0000000000000007", HEX);
macinp = macinp.concat(apdu);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, macinp.pad(Crypto.ISO9797_METHOD_2));
apdu = apdu.concat(new ByteString("8E08", HEX));
apdu = apdu.concat(mac);
apdu = apdu.concat(new ByteString("9000", HEX));

var r = isc.unwrap(apdu, Card.RPRO|Card.RENC);

// Test result
assert(r.toString(16) == "414243441234");



// Using AES with default policy

var isc = new IsoSecureChannel(crypto);

var kencval = new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX);
var kenc = new Key();
kenc.setComponent(Key.AES, kencval);

isc.setEncKey(kenc);


var kmacval = new ByteString("0131D9619DC1376E7CA110454A1A6E57", HEX);
var kmac = new Key();
kmac.setComponent(Key.AES, kmacval);

isc.setMacKey(kmac);

var ssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);

var iv = new ByteString("11111111111111111111111111111111", HEX);
isc.setIV(iv);


//Data | SW1/SW2, RENC|RPRO with SW1/SW2	-&gt; TLenc|TLsw|TLmac|SW1/SW2
//Prepare response from ICC
var apdu = new ByteString("871101", HEX);
var enc = crypto.encrypt(kenc, Crypto.AES_CBC, new ByteString(
            "41424344800000000000000000000000", HEX), iv);
apdu = apdu.concat(enc);
apdu = apdu.concat(new ByteString("99021234", HEX));
var macinp = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7", HEX);
macinp = macinp.concat(apdu);
macinp = macinp.concat(new ByteString("800000000000000000", HEX));
var mac = crypto.sign(kmac, Crypto.AES_CMAC, macinp);
apdu = apdu.concat(new ByteString("8E08", HEX));
apdu = apdu.concat(mac.left(8));
apdu = apdu.concat(new ByteString("9000", HEX));

// print("APDU " + apdu);
var r = isc.unwrap(apdu, Card.RPRO|Card.RENC);

// print("Received " + r);

//Test result
assert(r.toString(16) == "414243441234");



//Using AES with SSC_SYNC_POLICY

var isc = new IsoSecureChannel(crypto, IsoSecureChannel.SSC_SYNC_POLICY);

var kencval = new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX);
var kenc = new Key();
kenc.setComponent(Key.AES, kencval);

isc.setEncKey(kenc);


var kmacval = new ByteString("0131D9619DC1376E7CA110454A1A6E57", HEX);
var kmac = new Key();
kmac.setComponent(Key.AES, kmacval);

isc.setMacKey(kmac);

var ssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);
var nextssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7", HEX);

var iv = new ByteString("00000000000000000000000000000000", HEX);


//Data | SW1/SW2, RENC|RPRO with SW1/SW2	-&gt; TLenc|TLsw|TLmac|SW1/SW2
//Prepare response from ICC
var apdu = new ByteString("871101", HEX);
var enc = crypto.encrypt(kenc, Crypto.AES_CBC, new ByteString(
            "41424344800000000000000000000000", HEX), nextssc);
apdu = apdu.concat(enc);
apdu = apdu.concat(new ByteString("99021234", HEX));
var macinp = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7", HEX);
macinp = macinp.concat(apdu);
macinp = macinp.concat(new ByteString("800000000000000000", HEX));
var mac = crypto.sign(kmac, Crypto.AES_CMAC, macinp);
apdu = apdu.concat(new ByteString("8E08", HEX));
apdu = apdu.concat(mac.left(8));
apdu = apdu.concat(new ByteString("9000", HEX));

// print("APDU " + apdu);
var r = isc.unwrap(apdu, Card.RPRO|Card.RENC);

// print("Received " + r);

//Test result
assert(r.toString(16) == "414243441234");



//Using AES with SSC_SYNC_ENC_POLICY

var isc = new IsoSecureChannel(crypto, IsoSecureChannel.SSC_SYNC_ENC_POLICY);

var kencval = new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX);
var kenc = new Key();
kenc.setComponent(Key.AES, kencval);

isc.setEncKey(kenc);


var kmacval = new ByteString("0131D9619DC1376E7CA110454A1A6E57", HEX);
var kmac = new Key();
kmac.setComponent(Key.AES, kmacval);

isc.setMacKey(kmac);

var ssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);
var nextssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7", HEX);

var iv = new ByteString("00000000000000000000000000000000", HEX);


//Data | SW1/SW2, RENC|RPRO with SW1/SW2	-&gt; TLenc|TLsw|TLmac|SW1/SW2
//Prepare response from ICC
var apdu = new ByteString("871101", HEX);
var niv = crypto.encrypt(kenc, Crypto.AES_CBC, nextssc, iv);
var enc = crypto.encrypt(kenc, Crypto.AES_CBC, new ByteString(
            "41424344800000000000000000000000", HEX), niv);
apdu = apdu.concat(enc);
apdu = apdu.concat(new ByteString("99021234", HEX));
var macinp = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7", HEX);
macinp = macinp.concat(apdu);
macinp = macinp.concat(new ByteString("800000000000000000", HEX));
var mac = crypto.sign(kmac, Crypto.AES_CMAC, macinp);
apdu = apdu.concat(new ByteString("8E08", HEX));
apdu = apdu.concat(mac.left(8));
apdu = apdu.concat(new ByteString("9000", HEX));

// print("APDU " + apdu);
var r = isc.unwrap(apdu, Card.RPRO|Card.RENC);

// print("Received " + r);

//Test result
assert(r.toString(16) == "414243441234");



//Using AES with default policy and TLV data

var isc = new IsoSecureChannel(crypto);

var kencval = new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX);
var kenc = new Key();
kenc.setComponent(Key.AES, kencval);

isc.setEncKey(kenc);


var kmacval = new ByteString("0131D9619DC1376E7CA110454A1A6E57", HEX);
var kmac = new Key();
kmac.setComponent(Key.AES, kmacval);

isc.setMacKey(kmac);

var ssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);

var iv = new ByteString("11111111111111111111111111111111", HEX);
isc.setIV(iv);


//Data | SW1/SW2, RENC|RPRO with SW1/SW2	-&gt; TLenc|TLsw|TLmac|SW1/SW2
//Prepare response from ICC
var apdu = new ByteString("8510", HEX);
var enc = crypto.encrypt(kenc, Crypto.AES_CBC, new ByteString(
            "80021234800000000000000000000000", HEX), iv);
apdu = apdu.concat(enc);
apdu = apdu.concat(new ByteString("99021234", HEX));
var macinp = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7", HEX);
macinp = macinp.concat(apdu);
macinp = macinp.concat(new ByteString("80000000000000000000", HEX));
var mac = crypto.sign(kmac, Crypto.AES_CMAC, macinp);
apdu = apdu.concat(new ByteString("8E08", HEX));
apdu = apdu.concat(mac.left(8));
apdu = apdu.concat(new ByteString("9000", HEX));

print("APDU " + apdu);
var r = isc.unwrap(apdu, Card.RPRO|Card.RENC);

print("Received " + r);

//Test result
assert(r.toString(16) == "800212341234");



//Using AES with default policy and plain data

var isc = new IsoSecureChannel(crypto);

var kencval = new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX);
var kenc = new Key();
kenc.setComponent(Key.AES, kencval);

isc.setEncKey(kenc);


var kmacval = new ByteString("0131D9619DC1376E7CA110454A1A6E57", HEX);
var kmac = new Key();
kmac.setComponent(Key.AES, kmacval);

isc.setMacKey(kmac);

var ssc = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6", HEX);
isc.setMACSendSequenceCounter(ssc);

var iv = new ByteString("11111111111111111111111111111111", HEX);
isc.setIV(iv);


//Data | SW1/SW2, RENC|RPRO with SW1/SW2	-&gt; TLenc|TLsw|TLmac|SW1/SW2
//Prepare response from ICC
var apdu = new ByteString("B304", HEX);
var enc = crypto.encrypt(kenc, Crypto.AES_CBC, new ByteString(
            "80021234800000000000000000000000", HEX), iv);
apdu = apdu.concat(new ByteString("80021234", HEX));
apdu = apdu.concat(new ByteString("99021234", HEX));
var macinp = new ByteString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7", HEX);
macinp = macinp.concat(apdu);
macinp = macinp.concat(new ByteString("800000000000", HEX));
var mac = crypto.sign(kmac, Crypto.AES_CMAC, macinp);
apdu = apdu.concat(new ByteString("8E08", HEX));
apdu = apdu.concat(mac.left(8));
apdu = apdu.concat(new ByteString("9000", HEX));

print("APDU " + apdu);
var r = isc.unwrap(apdu, Card.RPRO);

print("Received " + r);

//Test result
assert(r.toString(16) == "800212341234");



</pre>
        <h2 id="setCRT">setCRT()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setCRT(ByteString crt)</p>
        <h3>Description</h3>
                    
        <p>Set a cryptographic reference template to be included in the body of the
               command APDU.</p>
                    
        <p>The CRT is included in the MAC if the tag is odd.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>crt</td>
                <td>The cryptographic reference template or null</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>The argument must be of type ByteString</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var isc = new IsoSecureChannel(crypto);

var kencval = new ByteString("7CA110454A1A6E570131D961" +
                             "9DC1376E4A1A6E570131D961", HEX);
var kenc = new Key();
kenc.setComponent(Key.DES, kencval);
isc.setEncKey(kenc);

var kmacval = new ByteString("0131D9619DC1376E7CA11045" +
                             "4A1A6E579DC1376E7CA11045", HEX);
var kmac = new Key();
kmac.setComponent(Key.DES, kmacval);
isc.setMacKey(kmac);

var iv = new ByteString("1111111111111111", HEX);
isc.setIV(iv);

var crt = new ByteString("B803830103", HEX);
isc.setCRT(crt);

var ssc = new ByteString("FFFFFFFFFFFFFFFD", HEX);
isc.setMACSendSequenceCounter(ssc);

//Case 4s Command APDU CLA=00 INS=10 P1=20 P2=30 Lc=04 Data=41424344 Le=80
var apdu = new ByteString("00102030044142434480", HEX);

// Case 4s Plain		-&gt; CLA'|INS|P1|P2|Lc'|TLplain|TLle|00
var r = isc.wrap(apdu, 0);

// Test result
assert(r.toString(16) == "081020300EB80383010380044142434496018000");
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFFD");



// Case 4s CENC		-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLle|00
var r = isc.wrap(apdu, Card.CENC);

// Test result
var exp = new ByteString("0810203013B803830103860901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC, new ByteString(
            "4142434480000000", HEX), iv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("96018000", HEX));
assert(r.equals(exp));
assert(isc.sendSequenceCounter.toString(16) == "FFFFFFFFFFFFFFFE");



// Case 4s CPRO		-&gt; CLA'|INS|P1|P2|Lc'|TLplain|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CPRO);

// Test result
var exp = new ByteString("0C10203018B8038301038104414243449701808E08", HEX);
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, new ByteString(
            "FFFFFFFFFFFFFFFF0C10203080000000" +
            "81044142434497018080000000000000", HEX));
exp = exp.concat(mac).concat(new ByteString("00", HEX));
assert(r.equals(exp));


var crt = new ByteString("B903830103", HEX);
isc.setCRT(crt);

// Case 4s CENC|CPRO	-&gt; CLA'|INS|P1|P2|Lc'|TLenc|TLle|TLmac|00
var r = isc.wrap(apdu, Card.CENC|Card.CPRO);

// Test result
var exp = new ByteString("0C1020301DB903830103870901", HEX);
var enc = crypto.encrypt(kenc, Crypto.DES_CBC, new ByteString(
            "4142434480000000", HEX), iv);
exp = exp.concat(enc);
exp = exp.concat(new ByteString("9701808E08", HEX));
var macinp = new ByteString("00000000000000000C10203080000000B903830103870901", HEX);
macinp = macinp.concat(enc);
macinp = macinp.concat(new ByteString("970180", HEX));
macinp = macinp.concat(new ByteString("8000000000", HEX));
var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, macinp);
exp = exp.concat(mac).concat(new ByteString("00", HEX));

// print("Expected " + exp);
// print("Received " + r);

assert(r.equals(exp));


</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>JsScript - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>JsScript - Reference Documentation</h1>
        <p>
            <p>Class implementing support for compiling and running script fragments</p>
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">JsScript() constructor</a>
            </li>
            <li>
                <a href="#newDynamicScope">newDynamicScope()</a>
            </li>
            <li>
                <a href="#execute">execute()</a>
            </li>
        </ul>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">JsScript(String filename)</p>
        <p class="signature">JsScript(String filename, Number lineno, String source)</p>
        <h3>Description</h3>
        Compile script.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>filename</td>
                <td>Name of file containing the script</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>lineno</td>
                <td>Starting line number (1 = first line)</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>source</td>
                <td>The source code</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var scriptsource = 'globalvar = 123; var localvar = 456;function f() { return 1};';

var s = new JsScript("sample", 1, scriptsource);


</pre>
        <h2 id="newDynamicScope">newDynamicScope()</h2>
        <h3>Prototype</h3>
        <p class="signature">void newDynamicScope(String constructor)</p>
        <h3>Description</h3>
                    
        <p>Create a new dynamic scope using the given constructor function.</p>
                    
        <p>A dynamic scope inherits all predefined top level functions and properties,
               but is otherwise a clean top level scope. Use this to create a runtime
               environment to execute scripts.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>constructor</td>
                <td>The name of the constructor function for the scope</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>A new dynamic scope derived from the top level scope</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var scope = JsScript.newDynamicScope("Object");

</pre>
        <h2 id="execute">execute()</h2>
        <h3>Prototype</h3>
        <p class="signature">Object execute(Object scope)</p>
        <p class="signature">Object execute(Object scope, String cwd)</p>
        <h3>Description</h3>
                    
        <p>Execute script within the defined scope object.</p>
                    
        <p>The caller may specify a current working directory (cwd) which is used
               when executing the script. If not specified, then the
               current working directory of the calling script is used.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>scope</td>
                <td>The top level scope object for script execution.</td>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>cwd</td>
                <td>The current working directory to use. </td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>The result of evaluating the script, i.e. the last assignment or function return in the code.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

s.execute(scope);

assert(typeof(globalvar) == "undefined");
assert(typeof(scope.globalvar) != "undefined");

var thisdir = GPSystem.mapFilename("", GPSystem.CWD);
var subdir = GPSystem.mapFilename("scriptdir", GPSystem.CWD);

var s = new JsScript(subdir + "/test.js");

// Execute script with current directory of this script
// The script will set the global variable cwd
s.execute(this);
assert(thisdir == cwd);

// Execute script with subdirectory relative to this script
s.execute(this, subdir);
assert(subdir == cwd);

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>Key - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>Key - Reference Documentation</h1>
        <p>
            <p>Implements support for cryptographic keys.</p>
                             
            <p>Use this class to create cryptographic keys. Key values are either
                    set in the key profile or defined using the setComponent() method.</p>
                             
            <p>To use AES with 192 or 256 bit, you will need to install the Java
                    Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy
                    available from the site where you downloaded your Java runtime.
                    See java.sun.com or Google for details on how to install these
                    files.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">Key() constructor</a>
            </li>
            <li>
                <a href="#setType">setType()</a>
            </li>
            <li>
                <a href="#getType">getType()</a>
            </li>
            <li>
                <a href="#setSize">setSize()</a>
            </li>
            <li>
                <a href="#getSize">getSize()</a>
            </li>
            <li>
                <a href="#setComponent">setComponent()</a>
            </li>
            <li>
                <a href="#getComponent">getComponent()</a>
            </li>
            <li>
                <a href="#getECPoint">getECPoint()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>SECRET</td>
                <td>Secret key type in setType() and getType() method</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>PRIVATE</td>
                <td>Private key type in setType() and getType() method</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>PUBLIC</td>
                <td>Public key type in setType() and getType() method</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DES</td>
                <td>DES secure key component</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>AES</td>
                <td>AES secure key component</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>MODULUS</td>
                <td>RSA key component (modulus)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>EXPONENT</td>
                <td>RSA key component (exponent)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CRT_P</td>
                <td>RSA private key component P</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CRT_Q</td>
                <td>RSA private key component Q</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CRT_DP1</td>
                <td>RSA private key component (D mod P^-1)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CRT_DQ1</td>
                <td>RSA private key component (D mod P^-1)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CRT_PQ</td>
                <td>RSA private key component (Q^-1 mod P)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_D</td>
                <td>EC private key component</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_QX</td>
                <td>EC public key component, x coordinate of point q</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_QY</td>
                <td>EC public key component, y coordinate of point q</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_CURVE_OID</td>
                <td>Object identifier of named curve</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_A</td>
                <td>Elliptic curve coefficient a</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_B</td>
                <td>Elliptic curve coefficient b</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_GX</td>
                <td>Elliptic curve x coordinate of generator point G</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_GY</td>
                <td>Elliptic curve y coordinate of generator point G</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_N</td>
                <td>Elliptic curve order of base point G</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_H</td>
                <td>Elliptic curve cofactor of generator point G</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_P</td>
                <td>Elliptic curve prime p (Fp)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_M</td>
                <td>Elliptic curve degree m (F2^m)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_K1</td>
                <td>Elliptic curve reduction polynom exponent k1 (F2^m)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_K2</td>
                <td>Elliptic curve reduction polynom exponent k2 (F2^m)</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>ECC_K3</td>
                <td>Elliptic curve reduction polynom exponent k3 (F2^m)</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">Key()</p>
        <p class="signature">Key(String profile)</p>
        <p class="signature">Key(Key otherKey)</p>
        <h3>Description</h3>
        <p>Create an empty key object and set properties from profile or existing key.</p>
                             
        <p>If no profile or existing key is specified, then an empty key is created.</p>
                             
        <p>See the examples in the directory ./profiles how to create
                        XML key profiles.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>profile</td>
                <td>Name of file containing Global Platform key profile</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>otherKey</td>
                <td>Existing key whose components are copied into the new key</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>On or more arguments are not of the expected type</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var key = new Key();
assert(key != null);

var key = new Key("profiles/kp_single_des_1.xml");
assert(key != null);

assert(key.profile);
assert(key.profile.UniqueID == "2B0601040181C31F100001");
assert(key.profile.ProfileVersion == "1.1.0");
assert(key.profile.ErrataVersion == "0");
assert(key.profile.Description.elementValue == "Single DES Test Key 1");
assert(key.profile.Revisions);
assert(key.profile.Revisions.Revision.length == 1);
assert(key.profile.Revisions.Revision[0]);
assert(key.profile.Revisions.Revision[0].Version == "1.0.0");
assert(key.profile.Revisions.Revision[0].Date == "2005-12-09");
assert(key.profile.Revisions.Revision[0].Time == "00:00:00");
assert(key.profile.Revisions.Revision[0].By == "www.openscdp.org");
assert(key.profile.Revisions.Revision[0].Digest == "00000000");
assert(key.profile.KeyInfo);
assert(key.profile.KeyInfo.Name == "SingleDESTest1");
assert(key.profile.KeyInfo.Type == "SECRET");
assert(key.profile.KeyInfo.SubType == "DES");
assert(key.profile.KeyInfo.Size == "64");
assert(key.profile.KeyInfo.Mode == "TEST");
assert(key.profile.Attribute);
assert(key.profile.Attribute.Sensitive == "false");
assert(key.profile.Attribute.Importable == "true");
assert(key.profile.Attribute.Exportable == "true");
assert(key.profile.Usage);
assert(key.profile.Usage.Encrypt == "true");
assert(key.profile.Usage.Decrypt == "true");
assert(key.profile.Usage.DecryptEncrypt == "true");
assert(key.profile.Usage.Sign == "true");
assert(key.profile.Usage.Verify == "true");
assert(key.profile.Usage.Wrap == "true");
assert(key.profile.Usage.Unwrap == "true");
assert(key.profile.Usage.UnwrapWrap == "true");
assert(key.profile.Usage.Derive == "true");
assert(key.profile.Value);
assert(key.profile.Value.Format == "DES");
assert(key.profile.Value.Component);
assert(key.profile.Value.Component.length == 1);
assert(key.profile.Value.Component[0].Value == "7CA110454A1A6E57");
assert(key.profile.Value.Component[0].Encoding == "HEX");

var newkey = new Key(key);

assert(newkey.getType() == Key.SECRET);
assert(newkey.getSize() == 64);
assert(newkey.profile == key.profile);
assert(newkey.getComponent(Key.DES).toString(HEX) == "7CA110454A1A6E57");

var key = new Key("profiles/kp_aes_128.xml");
assert(key != null);
assert(key.getComponent(Key.AES).toString(HEX) == "7CA110454A1A6E570131D9619DC1376E");

var key = new Key("profiles/kp_ec_public.xml");
assert(key != null);
assert(key.getComponent(Key.ECC_P).length == 24);

</pre>
        <h2 id="setType">setType()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setType(Number type)</p>
        <h3>Description</h3>
        <p>Set the basic key type to either Key.SECRET, Key.PRIVATE or Key.PUBLIC.</p>
                             
        <p>If a profile was used to create the key, then the profile.KeyInfo.Type property
                        is updated accordingly.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>type</td>
                <td>Type of key. Must be either Key.SECRET, Key.PRIVATE or Key.PUBLIC</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>None</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var key = new Key();

key.setType(Key.SECRET);
key.setType(Key.PRIVATE);
key.setType(Key.PUBLIC);

key = new Key("profiles/kp_single_des_1.xml");

key.setType(Key.SECRET);
key.setType(Key.PRIVATE);
key.setType(Key.PUBLIC);

</pre>
        <h2 id="getType">getType()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getType()</p>
        <h3>Description</h3>
        Get the basic key type which is either Key.SECRET, Key.PRIVATE or Key.PUBLIC.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>The type of the key or the undefined value if the type is not specified</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var key = new Key();

key.setType(Key.SECRET);
assert(key.getType() == Key.SECRET);

key = new Key("profiles/kp_single_des_1.xml");
assert(key.getType() == Key.SECRET);


</pre>
        <h2 id="setSize">setSize()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setSize(Number size)</p>
        <h3>Description</h3>
                    
        <p>Set the key size in number of bits for the key, if not already set from the profile.</p>
                    
        <p>This method should be used to specify the key size in a key template passed to the
               Crypto.generateKeyPair() method.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>size</td>
                <td>Number of bits for key</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>None</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var key = new Key();
key.setType(Key.PRIVATE);
key.setSize(1024);

</pre>
        <h2 id="getSize">getSize()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getSize()</p>
        <h3>Description</h3>
        Get the size of the key expressed as number of bits
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>The number of bits comprising this key</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var key = new Key();

key.setType(Key.PUBLIC);
key.setSize(1024);
assert(key.getSize() == 1024);

key = new Key("profiles/kp_single_des_1.xml");
assert(key.getSize() == 64);


</pre>
        <h2 id="setComponent">setComponent()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setComponent(Number type, ByteString value)</p>
        <h3>Description</h3>
                    
        <p>Set a component for the cryptographic key.</p>
                    
        <p>For DES keys only the component Key.DES is defined.</p>
                    
        <p>For AES keys only the component Key.AES is defined. If you want to use AES with 192 or 256 bit,
               then will need to install the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy
               available from the site where you downloaded your Java runtime.
               See java.sun.com or Google for details on how to install these
               files.</p>
                    
        <p>RSA private keys can be composed in one of two ways, either with Key.MODULUS and Key.EXPONENT or
               with Key.CRT_P, Key.CRT_Q, Key.CRT_DP, Key.CRT_DQ and Key.CRT_PQ.</p>
        	
        <p>ECC private and public keys can be composed by specifying the elliptic curve and the private
               value D or the public point Q, which consists of a x and y coordinate.</p>
                    
        <p>The elliptic curve can be either defined by the object identifier (in binary format)
               of the named curve or by specifying the individual curve parameter (p, a, b, Gx, Gy, n, h)
               for Fp or (m, k1, k2, k3, Gx, Gy, n, h) for F2m. </p>
                    
        <p>See the script in tools/eccutils.js for a list of pre-defined curve object identifier.</p>
                    
        <p>All key parameter are interpreted as unsigned big integer.</p>
                    
        <p>If the key type is not yet determined, then the first call
               of setComponent() will define the key type and subsequent
               setComponent() calls must only overwrite or extend the key component
               values already defined. This, however, only works if the key type can
               be derived from the component supplied (e.g. the key type (Private/Public) can
               not be automatically determined when specifying the modulus).</p>
                    
        <p>Keys are only constructed from components at the time
               they are needed by a cryptographic operation. The key itself
               is then stored as a session value until a subseqent call to
               setComponent() erases the cached key.</p>
        	
        <p>To allow for the RSA blinding operation, the public key exponent can be defined
               for RSA CRT private keys. This is done with the Key.EXPONENT component. If no
               Key.EXPONENT is defined for a RSA CRT private key, then no RSA blinding will be used.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>type</td>
                <td>Component of key provided in value. Must be
              one of Key.DES, Key.AES, Key.MODULUS, Key.EXPONENT, Key.CRT_* or Key.ECC_*</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>Value of component identified by type argument</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>None</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The value provided for the key component is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var key = new Key();

// Make key a single length DES key (56 bit)
key.setComponent(Key.DES, new ByteString("7CA110454A1A6E57", HEX));
assert(key.getSize() == 64);

// Make key a double length DES key (112 bit)
key.setComponent(Key.DES, new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX));
assert(key.getSize() == 128);

// Make key a triple length DES key (168 bit)
key.setComponent(Key.DES,
            new ByteString("7CA110454A1A6E570131D9619DC1376E9DC1376E0131D961", HEX));
assert(key.getSize() == 192);

key = new Key("profiles/kp_single_des_1.xml");
assert(key.getSize() == 64);

// Make key a single length DES key (56 bit) - Overwriting value from profile
key.setComponent(Key.DES, new ByteString("7CA110454A1A6E57", HEX));

// Make key a double length DES key (112 bit)
key.setComponent(Key.DES, new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX));

// Make key a triple length DES key (168 bit)
key.setComponent(Key.DES,
            new ByteString("7CA110454A1A6E570131D9619DC1376E9DC1376E0131D961", HEX));


// Make AES key

var key = new Key();

// Make key a 128 bit AES key
key.setComponent(Key.AES, new ByteString("000102030405060708090a0b0c0d0e0f", HEX));
assert(key.getSize() == 128);

// Make key a 192 bit AES key
key.setComponent(Key.AES,
            new ByteString("000102030405060708090a0b0c0d0e0f1011121314151617", HEX));
assert(key.getSize() == 192);

// Make key a 256 bit AES key
key.setComponent(Key.AES, new ByteString("000102030405060708090a0b0c0d0e0f" +
                                         "101112131415161718191a1b1c1d1e1f", HEX));
assert(key.getSize() == 256);


// Make RSA private key from modulus and private exponent

var key = new Key();

key.setType(Key.PRIVATE);

key.setComponent(Key.MODULUS, new ByteString(
            "b4a7e46170574f16a97082b22be58b6a2a629798419be12872a4bdba626cfae9" +
            "900f76abfb12139dce5de56564fab2b6543165a040c606887420e33d91ed7ed7", HEX));
key.setComponent(Key.EXPONENT, new ByteString(
            "9f66f6b05410cd503b2709e88115d55daced94d1a34d4e32bf824d0dde6028ae" +
            "79c5f07b580f5dce240d7111f7ddb130a7945cd7d957d1920994da389f490c89", HEX));
assert(key.getSize() == 512);


// Make RSA private key from CRT components

var key = new Key();

key.setType(Key.PRIVATE);

key.setComponent(Key.CRT_P, new ByteString(
            "c0a0758cdf14256f78d4708c86becdead1b50ad4ad6c5c703e2168fbf37884cb", HEX));
key.setComponent(Key.CRT_Q, new ByteString(
            "f01734d7960ea60070f1b06f2bb81bfac48ff192ae18451d5e56c734a5aab8a5", HEX));
key.setComponent(Key.CRT_DP1, new ByteString(
            "b54bb9edff22051d9ee60f9351a48591b6500a319429c069a3e335a1d6171391", HEX));
key.setComponent(Key.CRT_DQ1, new ByteString(
            "d3d83daf2a0cecd3367ae6f8ae1aeb82e9ac2f816c6fc483533d8297dd7884cd", HEX));
key.setComponent(Key.CRT_PQ, new ByteString(
            "b8f52fc6f38593dabb661d3f50f8897f8106eee68b1bce78a95b132b4e5b5d19", HEX));
assert(key.getSize() == 512);


// Make RSA public key from modulus and public exponent

var key = new Key();

key.setType(Key.PUBLIC);

key.setComponent(Key.MODULUS, new ByteString(
            "b4a7e46170574f16a97082b22be58b6a2a629798419be12872a4bdba626cfae9" +
            "900f76abfb12139dce5de56564fab2b6543165a040c606887420e33d91ed7ed7", HEX));
key.setComponent(Key.EXPONENT, new ByteString("11", HEX));
assert(key.getSize() == 512);


// Make ECC private key (Fp) / prime192v1

var key = new Key();
key.setType(Key.PRIVATE);

// Setting the curve parameter using an object identifier automatically sets all
// parameter
var oid = new ByteString("1.2.840.10045.3.1.1", OID);
key.setComponent(Key.ECC_CURVE_OID, oid);
assert(key.getComponent(Key.ECC_P).toString(16).equals(
            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"));
assert(key.getComponent(Key.ECC_A).toString(16).equals(
            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"));
assert(key.getComponent(Key.ECC_B).toString(16).equals(
            "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"));
assert(key.getComponent(Key.ECC_GX).toString(16).equals(
            "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012"));
assert(key.getComponent(Key.ECC_GY).toString(16).equals(
            "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811"));
assert(key.getComponent(Key.ECC_N).toString(16).equals(
            "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"));
assert(key.getComponent(Key.ECC_H).toString(16).equals(
            "000000000000000000000000000000000000000000000001"));

key.setComponent(Key.ECC_D, new ByteString(
            "C2C7ACAB793AF41C242456CE64D5B61054629AC23B27A0E0", HEX));
assert(key.getSize() == 192);

// Setting the prime automatically tries to determine the curve OID
var l = [ "secp192r1", "secp256r1", "brainpoolP192r1", "brainpoolP224r1", "brainpoolP256r1", "brainpoolP320r1", "secp192k1", "secp192k1"];
for (var i = 0; i &lt; l.length; i++) {
	var s = l[i];
	print(s);
	var oid = new ByteString(s, OID);
	var k1 = new Key();
	k1.setType(Key.PUBLIC);
	k1.setComponent(Key.ECC_CURVE_OID, oid);
	var p = k1.getComponent(Key.ECC_P);

	var k2 = new Key();
	k2.setType(Key.PUBLIC);
	k2.setComponent(Key.ECC_P, p);
	assert(k2.getComponent(Key.ECC_CURVE_OID).equals(oid));
}

// Make ECC public key (Fp) / prime192v1

var key = new Key();
key.setType(Key.PUBLIC);
key.setComponent(Key.ECC_CURVE_OID, new ByteString("1.2.840.10045.3.1.1", OID));
key.setComponent(Key.ECC_QX, new ByteString(
            "BBA0C04725F939ABE6A0D1E9CEB82F336B3A04205C6E5094", HEX));
key.setComponent(Key.ECC_QY, new ByteString(
            "FE6D6A3F6F72616D7488113AF4ABA44581ADEE297B984A08", HEX));
assert(key.getSize() == 192);


// Make ECC private key (F2m) / c2m239v1

var key = new Key();
key.setType(Key.PRIVATE);
key.setComponent(Key.ECC_CURVE_OID, new ByteString("1.2.840.10045.3.0.11", OID));

assert(key.getComponent(Key.ECC_M).toString(16).equals("EF"));
assert(key.getComponent(Key.ECC_K1).toString(16).equals("24"));
assert(key.getComponent(Key.ECC_K2).toString(16).equals("00"));
assert(key.getComponent(Key.ECC_K3).toString(16).equals("00"));
assert(key.getComponent(Key.ECC_B).toString(16).equals(
            "790408F2EEDAF392B012EDEFB3392F30F4327C0CA3F31FC383C422AA8C16"));
assert(key.getComponent(Key.ECC_GX).toString(16).equals(
            "57927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D"));
assert(key.getComponent(Key.ECC_GY).toString(16).equals(
            "61D8EE5077C33FECF6F1A16B268DE469C3C7744EA9A971649FC7A9616305"));
assert(key.getComponent(Key.ECC_N).toString(16).equals(
            "2000000000000000000000000000000F4D42FFE1492A4993F1CAD666E447"));
assert(key.getComponent(Key.ECC_H).toString(16).equals(
            "000000000000000000000000000000000000000000000000000000000004"));

key.setComponent(Key.ECC_D, new ByteString(
            "145642755521911534651321230007534120304391871461646461466464667494947990", HEX));
assert(key.getSize() == 239);


// Make ECC public key (F2m) / c2m239v1

var key = new Key();
key.setType(Key.PUBLIC);
key.setComponent(Key.ECC_CURVE_OID, new ByteString("1.2.840.10045.3.0.11", OID));
key.setComponent(Key.ECC_QX, new ByteString(
            "5894609CCECF9A92533F630DE713A958E96C97CCB8F5ABB5A688A238DEED", HEX));
key.setComponent(Key.ECC_QY, new ByteString(
            "6DC2D9D0C94EBFB7D526BA6A61764175B99CB6011E2047F9F067293F57F5", HEX));
assert(key.getSize() == 239);

</pre>
        <h2 id="getComponent">getComponent()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getComponent(Number type)</p>
        <h3>Description</h3>
        Return a component of a key. Key components can only be retrieved, if they
                     are accessible. Key components stored in a HSM are usally not accessible.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>type</td>
                <td>Component of key requested. Must be one of
              Key.DES, Key.AES, Key.MODULUS, Key.EXPONENT, Key.CRT_* or Key.ECC_*</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The value of the key component or undefined if the component is not defined.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var key = new Key();

// Make key a single length DES key (56 bit)
key.setComponent(Key.DES, new ByteString("7CA110454A1A6E57", HEX));
assert(key.getComponent(Key.DES).toString(HEX) == "7CA110454A1A6E57");

// Make key a double length DES key (112 bit)
key.setComponent(Key.DES, new ByteString("7CA110454A1A6E570131D9619DC1376E", HEX));
assert(key.getComponent(Key.DES).toString(HEX) == "7CA110454A1A6E570131D9619DC1376E");

// Make key a triple length DES key (168 bit)
key.setComponent(Key.DES,
            new ByteString("7CA110454A1A6E570131D9619DC1376E9DC1376E0131D961", HEX));
assert(key.getComponent(Key.DES).toString(HEX) ==
            "7CA110454A1A6E570131D9619DC1376E9DC1376E0131D961");

// Create key from profile
key = new Key("profiles/kp_single_des_1.xml");
assert(key.getComponent(Key.DES).toString(HEX) == "7CA110454A1A6E57");

// Change component initialized by profile
key.setComponent(Key.DES, new ByteString("A110454A1A6E577C", HEX));
assert(key.getComponent(Key.DES).toString(HEX) == "A110454A1A6E577C");


</pre>
        <h2 id="getECPoint">getECPoint()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getECPoint()</p>
        <h3>Description</h3>
        Return an ECPoint object.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>org.bouncycastle.math.ec.ECPoint</code>
                </td>
                <td>The ECPoint corresponding to the ECC_QX and ECC_QY components.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>ECC_QX and ECC_QY must be specified</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var key = new Key();
key.setType(Key.PUBLIC);
key.setComponent(Key.ECC_CURVE_OID, new ByteString("1.2.840.10045.3.1.1", OID));
key.setComponent(Key.ECC_QX, new ByteString(
            "bba0c04725f939abe6a0d1e9ceb82f336b3a04205c6e5094", HEX));
key.setComponent(Key.ECC_QY, new ByteString(
            "fe6d6a3f6f72616d7488113af4aba44581adee297b984a08", HEX));
var ecp = key.getECPoint();
assert(ecp.getAffineXCoord().toBigInteger().toString(16) == "bba0c04725f939abe6a0d1e9ceb82f336b3a04205c6e5094");
assert(ecp.getAffineYCoord().toBigInteger().toString(16) == "fe6d6a3f6f72616d7488113af4aba44581adee297b984a08");


</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>KeyStore - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>KeyStore - Reference Documentation</h1>
        <p>Class implementing access to Java key stores from JavaScript</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">KeyStore() constructor</a>
            </li>
            <li>
                <a href="#getAliases">getAliases()</a>
            </li>
            <li>
                <a href="#getKey">getKey()</a>
            </li>
            <li>
                <a href="#getCertificate">getCertificate()</a>
            </li>
            <li>
                <a href="#setKey">setKey()</a>
            </li>
            <li>
                <a href="#setCertificate">setCertificate()</a>
            </li>
            <li>
                <a href="#store">store()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>java.security.KeyStore</td>
                <td>native</td>
                <td>The native Java keystore object</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">KeyStore(String provider, String type, String filename, String password)</p>
        <p class="signature">KeyStore(String provider, String type, String filename)</p>
        <p class="signature">KeyStore(String provider, String type)</p>
        <p class="signature">KeyStore(String provider)</p>
        <h3>Description</h3>
        <p>Create and load key store</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>provider</td>
                <td>Provider to use for key store access</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>type</td>
                <td>Key store type. Default is "jks".</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>filename</td>
                <td>Name of file containing keys. Default is empty.</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>password</td>
                <td>Password used to access key store. Default is no password.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>Accessing key store failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var ks = new KeyStore("BC", "BKS", "sample.bks", "1234");
// var ks = new KeyStore("SUN", "JKS");
// var ks = new KeyStore("SunJCE", "JCEKS");

</pre>
        <h2 id="getAliases">getAliases()</h2>
        <h3>Prototype</h3>
        <p class="signature">String[] getAliases()</p>
        <h3>Description</h3>
                    
        <p>Return list of aliases defined in key store.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>Array containing alias names from key store</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>Accessing key failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var aliases = ks.getAliases();
for (var i = 0; i &lt; aliases.length; i++) {
	print(aliases[i]);
}

</pre>
        <h2 id="getKey">getKey()</h2>
        <h3>Prototype</h3>
        <p class="signature">getKey(Key key)</p>
        <p class="signature">getKey(Key key, String password)</p>
        <h3>Description</h3>
                    
        <p>Link key object with key instance in key store using the key id.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>Key object</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>password</td>
                <td>Password to access key instance</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>Accessing key failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var k = new Key();
k.setType(Key.PRIVATE);
k.setID("openscdp");

ks.getKey(k, "1234");

</pre>
        <h2 id="getCertificate">getCertificate()</h2>
        <h3>Prototype</h3>
        <p class="signature">getCertificate(String alias)</p>
        <h3>Description</h3>
                    
        <p>Get named certificate from keystore.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>alias</td>
                <td>Alias name of certificate</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var cert = ks.getCertificate("openscdp");
assert(cert.getSubjectDNString() == "E=support@openscdp.org,C=DE,L=Minden," +
                                    "O=CardContact,CN=OpenSCDP");

</pre>
        <h2 id="setKey">setKey()</h2>
        <h3>Prototype</h3>
        <p class="signature">setKey(Key key)</p>
        <p class="signature">setKey(Key key, String password)</p>
        <p class="signature">setKey(Key key, String password, X590[] certificates)</p>
        <h3>Description</h3>
                    
        <p>Store key in key store, encrypted with optional password. Private keys may only be stored
               with associated certificate chain.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>Key object</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>password</td>
                <td>Password to access key instance</td>
            </tr>
            <tr>
                <td>
                    <code>X509[]</code>
                </td>
                <td>certificates</td>
                <td>Chain of certificates</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>Accessing key failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

k.setID("test");

ks.setKey(k, "1234", [cert]);

</pre>
        <h2 id="setCertificate">setCertificate()</h2>
        <h3>Prototype</h3>
        <p class="signature">setCertificate(String alias, X509 certificate)</p>
        <h3>Description</h3>
                    
        <p>Store certificate in key store.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>certificate</td>
                <td>Certificate</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>Accessing key failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

ks.setCertificate("test", cert);

</pre>
        <h2 id="store">store()</h2>
        <h3>Prototype</h3>
        <p class="signature">store()</p>
        <p class="signature">store(String filename)</p>
        <p class="signature">setKey(String filename, String password)</p>
        <h3>Description</h3>
                    
        <p>Save keystore to persistent storage</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>filename</td>
                <td>File name for storing the key store</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>password</td>
                <td>Password to access key instance</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>Accessing key failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

ks.store("newstore.bks", "1234");

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>LDAP - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>LDAP - Reference Documentation</h1>
        <p>Class implementing support for the Lightweight Directory Access Protocol (LDAP)</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">LDAP() constructor</a>
            </li>
            <li>
                <a href="#get">get()</a>
            </li>
            <li>
                <a href="#search">search()</a>
            </li>
        </ul>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">LDAP(String url)</p>
        <h3>Description</h3>
        <p>Bind to LDAP server at given url.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>url</td>
                <td>URL of LDAP server to bind against.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Arguments must be of type X509</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

ldap = new LDAP("ldap://ldap.ecard.sozialversicherung.at/c=at");

</pre>
        <h2 id="get">get()</h2>
        <h3>Prototype</h3>
        <p class="signature">Array get(String dn)</p>
        <h3>Description</h3>
        <p>Return a node in the LDAP directory.</p>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Array</code>
                </td>
                <td>Array of attributes stored with the node.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Arguments must be of type X509</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>An error occured talking to the LDAP server</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

node = ldap.get("o=Hauptverband der österreichischen Sozialversicherungsträger");

for (i in node) {
	print(i + " = " + node[i]);
}

</pre>
        <h2 id="search">search()</h2>
        <h3>Prototype</h3>
        <p class="signature">Array search(String start, String filter)</p>
        <h3>Description</h3>
        <p>Search for an entry in the LDAP directory using a starting point and a search filter.</p>
                             
        <p>The search filter must conform to RFC2254</p>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Array</code>
                </td>
                <td>Array of entries in the LDAP directory. An entry itself is an array with the
                             attributes as index.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Arguments must be of type X509</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>An error occured talking to the LDAP server</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

list = ldap.search("ou=VPSig CA 2," +
                   "o=Hauptverband der österreichischen Sozialversicherungsträger",
                   "(&amp;(cn=VP750126:PNSER:11716977281833697432792823912539163133345)" +
                   "(SNgesperrt=TRUE))");

for (i = 0; i &lt; list.length; i++) {
	print(list[i]._name);
	for (j in list[i]) {
		print(j + " = " + list[i][j]);
	}
}

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>OCSPQuery - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>OCSPQuery - Reference Documentation</h1>
        <p>Class implementing support for the Online Certificate Status Protocol (OCSP)</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">OCSPQuery() constructor</a>
            </li>
            <li>
                <a href="#add">add()</a>
            </li>
            <li>
                <a href="#execute">execute()</a>
            </li>
            <li>
                <a href="#post">post()</a>
            </li>
            <li>
                <a href="#getStatus">getStatus()</a>
            </li>
            <li>
                <a href="#getStatusString">getStatusString()</a>
            </li>
            <li>
                <a href="#getRevocationTime">getRevocationTime()</a>
            </li>
            <li>
                <a href="#getRequest">getRequest()</a>
            </li>
            <li>
                <a href="#getResponse">getResponse()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>GOOD</td>
                <td>Certificate is valid</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>UNKNOWN</td>
                <td>Certificate is unknown to the responder</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>REVOKED</td>
                <td>Certificate was revoked</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>KEYCOMPROMISE</td>
                <td>Certificate was revoked because the key was compromised</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CACOMPROMISE</td>
                <td>Certificate was revoked because the CA key was compromised</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>AFFILIATIONCHANGED</td>
                <td>Certificate was revoked because the affiliation changed</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>SUPERSEDED</td>
                <td>Certificate was revoked because a new certificate was issued</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CESSATIONOFOPERATION</td>
                <td>Certificate was revoked because the CA discontinued operation</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CERTIFICATEHOLD</td>
                <td>Certificate is on hold</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>REMOVEFROMCRL</td>
                <td>Certificate was revoked and can now be removed form CRL</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>PRIVILEGEWITHDRAWN</td>
                <td>Certificate was revoked because the privileges granted by to the owner were withdrawn</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>AACOMPROMISE</td>
                <td>Certificate was revoked</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">OCSPQuery(X509 rootCert, X509 issuerCert)</p>
        <p class="signature">OCSPQuery(X509 issuerCert)</p>
        <h3>Description</h3>
        <p>Create OCSPQuery object that can be used to collect certificates for which the
                     the status can be queried from an OCSP responder.</p>
                             
        <p>The URL for the OCSP responder is taken from isserCert.</p>
        					 
        <p>If the root certificate is ommited from the constructor, then the
                        signature on the OCSP response is only validated against
                        the list of certificates in the OCSPResponse. No link to a
                        trusted anchor is verified in that case.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>rootCert</td>
                <td>Root certificate used for verification of OCSP response signature</td>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>issuerCert</td>
                <td>Certificate of instance that issued the certificate for which
                a query should be done.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Arguments must be of type X509</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

rootcert = new X509("root.cer");
cacert = new X509("ca.cer");

query = new OCSPQuery(cacert);

query = new OCSPQuery(rootcert, cacert);

</pre>
        <h2 id="add">add()</h2>
        <h3>Prototype</h3>
        <p class="signature">OCSPQuery add(X509 cert)</p>
        <h3>Description</h3>
        Add a certificate to the query. The certificate must be issued by the instance
                     identified by the isserCert certificate in the OCSPQuery constructor.
                     Multiple certificates can be included in a single query.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>cert</td>
                <td>Certificate to include in query</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>OCSPQuery</code>
                </td>
                <td>The object this method is applied to</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>Certificate is invalid for inclusion in query</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

goodcert = new X509("ee_good.cer");
revokedcert = new X509("ee_revoked.cer");

query.add(goodcert);
assert(query.add(revokedcert) instanceof OCSPQuery);

</pre>
        <h2 id="execute">execute()</h2>
        <h3>Prototype</h3>
        <p class="signature">OCSPQuery execute()</p>
        <p class="signature">OCSPQuery execute(String url)</p>
        <h3>Description</h3>
        Execute query against OCSP server. This is a one in all method. It extracts the
                     URL from the issuer certificate (unless specified), builds the request, posts the message, obtains
                     the response and decodes the status information.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>url</td>
                <td>URL of OCSP responder.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>OCSPQuery</code>
                </td>
                <td>The object this method is applied to</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>The query could not be completed successfully</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

/*

assert(query.execute() instanceof OCSPQuery);

*/

</pre>
        <h2 id="post">post()</h2>
        <h3>Prototype</h3>
        <p class="signature">OCSPQuery post(String url, ByteString request)</p>
        <p class="signature">OCSPQuery post(String url, ByteString request, String[] header)</p>
        <h3>Description</h3>
        Send a request to the server identified by the url with a custom HTTP header. This
                     method is suitable for test setups using custom build requests and header
                     fields.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>url</td>
                <td>URL of OCSP responder.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>request</td>
                <td>DER encoded request</td>
            </tr>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>header</td>
                <td>Custom HTTP header field in the format "key: value". Will disable
                                                automatically generated header fields Content-Type and Content-Length.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The response returned from the server</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>One or more arguments do not match</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>The query could not be completed successfully</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

/*
var request = query.getRequest();
var response = query.post("http://ocsp.ecard.sozialversicherung.at", request);
assert(response.length &gt; 0);

var header = [ "Content-Length: " + request.length, "Content-Type: application/ocsp-request" ];
var response = query.post("http://ocsp.ecard.sozialversicherung.at", request, header);
assert(response.length &gt; 0);
*/

</pre>
        <h2 id="getStatus">getStatus()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getStatus(X509 cert)</p>
        <h3>Description</h3>
        Query status from cached result of previous query operation
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>cert</td>
                <td>Certificate in question</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Status of the certificate as indicated by the responder. This is one of the
                              constant values defined for this object.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Arguments must be of type X509</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>The query could not be completed successfully</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

assert(query.getStatus(goodcert) == OCSPQuery.GOOD);
assert(query.getStatus(revokedcert) != OCSPQuery.GOOD);

</pre>
        <h2 id="getStatusString">getStatusString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String getStatusString(X509 cert)</p>
        <h3>Description</h3>
        Query status from cached result of previous query operation and return a human readable string
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>cert</td>
                <td>Certificate in question</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>Status of the certificate as indicated by the responder.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Arguments must be of type X509</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>The query could not be completed successfully</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

print("ee_good.cer    : " + query.getStatusString(goodcert));
print("ee_revoked.cer : " + query.getStatusString(revokedcert));

</pre>
        <h2 id="getRevocationTime">getRevocationTime()</h2>
        <h3>Prototype</h3>
        <p class="signature">Date getRevocationTime(X509 cert)</p>
        <h3>Description</h3>
        Query revocation time from cached result of previous query operation
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>cert</td>
                <td>Certificate in question</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Date</code>
                </td>
                <td>Revocation time of the certificate as indicated by the responder.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Arguments must be of type X509</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>The query could not be completed successfully</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var rt = query.getRevocationTime(revokedcert);
assert(rt instanceof Date);
print("ee_revoked.cer : " + rt);

</pre>
        <h2 id="getRequest">getRequest()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getRequest()</p>
        <h3>Description</h3>
        Obtain DER encoded OCSP request
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>DER encoded request.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>An error occured building the request</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

req = query.getRequest();
assert(req instanceof ByteString);
print(req.toString(HEX));

</pre>
        <h2 id="getResponse">getResponse()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getResponse()</p>
        <h3>Description</h3>
        Obtain DER encoded OCSP response as returned from OCSP server
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>DER encoded response.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>An error occured building the response</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

res = query.getResponse();
assert(res instanceof ByteString);
print(res.toString(HEX));

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>OutlineNode - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>OutlineNode - Reference Documentation</h1>
        <p>
                    
            <p>The OutlineNode class provides functions to create an outline tree in the Smart Card Shell.</p>
                    
            <p>The Outline can be used to display hierarchical data. A tree consists of nodes represented
           by instances of the OutlineNode class. You can create nodes, add child nodes, remove nodes
           and control the behaviour of the tree using action listeners defined for user objects of
           nodes.</p>
                    
            <p>The appearance of a node can be changed dynamically. You can change the label, the icon and
           set a tool-tip text, which is displayed when the user moves the mouse over the node.</p>
                    
            <p>Using the setContextMenu method, you can add context menues to node, which are
           activated when the user clicks on the node with the right mouse button.</p>
                    
            <p>Any actions on the outline performed by the user are delegated to action listener
           methods implemented by the user object. These methods (expandListener(), collapseListener(),
       selectedListener() and actionListener()) are activated on their own threads, so long running
           actions are possible.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">OutlineNode() constructor</a>
            </li>
            <li>
                <a href="#insert">insert()</a>
            </li>
            <li>
                <a href="#remove">remove()</a>
            </li>
            <li>
                <a href="#show">show()</a>
            </li>
            <li>
                <a href="#collapse">collapse()</a>
            </li>
            <li>
                <a href="#expand">expand()</a>
            </li>
            <li>
                <a href="#setContextMenu">setContextMenu()</a>
            </li>
            <li>
                <a href="#setToolTip">setToolTip()</a>
            </li>
            <li>
                <a href="#setIcon">setIcon()</a>
            </li>
            <li>
                <a href="#setLabel">setLabel()</a>
            </li>
            <li>
                <a href="#setUserObject">setUserObject()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Object</td>
                <td>parent</td>
                <td>Parent of this OutlineNode object</td>
            </tr>
            <tr>
                <td>Object[]</td>
                <td>childs</td>
                <td>Childs of this OutlineNode object</td>
            </tr>
            <tr>
                <td>String</td>
                <td>icon</td>
                <td>Name of icon selected with setIcon()</td>
            </tr>
            <tr>
                <td>String</td>
                <td>tooltip</td>
                <td>Tooltip set with setToolTip()</td>
            </tr>
            <tr>
                <td>String[]</td>
                <td>contextMenu</td>
                <td>Context menu set with setContextMenu()</td>
            </tr>
            <tr>
                <td>Object</td>
                <td>userObject</td>
                <td>Object registered as user object in setUserObject()</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">OutlineNode(String name)</p>
        <p class="signature">OutlineNode(String name, boolean expandable)</p>
        <h3>Description</h3>
                    
        <p>Create an OutlineNode object.</p>
                    
        <p>The OutlineNode class is not automatically defined and only available in
               the Smart Card Shell.</p>
                    
        <p>OutlineNode objects can receive expandListener(), collapseListener() selectedListener() and actionListener() events
               from the outline. If such methods are defined in user objects, then they overwrite the expandListener(),
               collapseListener(), selectedListener() or actionListener() in the OutlineNode object.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>name</td>
                <td>Name to show in tree view</td>
            </tr>
            <tr>
                <td>
                    <code>boolean</code>
                </td>
                <td>expandable</td>
                <td>Show expander for node, even if the OutlineNode has no childs.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>On or more arguments are not of the expected type</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

cnt = 0;

defineClass("de.cardcontact.scdp.scsh3.OutlineNode");


OutlineNode.prototype.expandListener = function() { 
	print("expand called for " + this );
};


OutlineNode.prototype.selectedListener = function() { 
	print("selected called for " + this );
};


OutlineNode.prototype.collapseListener = function() { 
	print("collapse called for " + this );
};


OutlineNode.prototype.actionListener = function(name) { 
	print("action(" + name + ") called for " + this );

	if (name == "add") {
		var node = new OutlineNode("node" + cnt, true);
		cnt++;
		
		node.setContextMenu(["add", "remove", "---", "expand", "collapse", "---", "deselected", "selected", "passed", "failed", "---", "setToolTip", "removeToolTip", "---", "changeLabel"]);
	
		this.insert(node);
	} else if (name == "remove") {
		this.remove();
	} else if (name == "expand") {
		this.expand();
	} else if (name == "collapse") {
		this.collapse();
	} else if (name == "setToolTip") {
		this.setToolTip("Tooltip#" + cnt);
		cnt++;
	} else if (name == "removeToolTip") {
		this.setToolTip();
	} else if (name == "changeLabel") {
		this.setLabel("Label#" + cnt);
		cnt++;
	} else {
		this.setIcon(name);
	}
};


var outline = new OutlineNode("root");

</pre>
        <h2 id="insert">insert()</h2>
        <h3>Prototype</h3>
        <p class="signature">insert()</p>
        <p class="signature">insert(Object child, Number index)</p>
        <p class="signature">insert(Object child)</p>
        <h3>Description</h3>
                    
        <p>Add a child to the outline node. The child must be OutlineNode object or any
               scriptable object that implements a tree model (e.g. ASN1).</p>
                    
        <p>show() will automatically make the node to the root node of the outline.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>child</td>
                <td>Child object to insert</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Position at which to insert the child elements. The last
              position is assumed, if no index is given.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Insert other node
var node = new OutlineNode("Testnode");
outline.insert(node);

// Insert ASN1 structure
var root = new X509("root.cer");
bs = root.getBytes();
var t = new ASN1(bs);
assert(t instanceof ASN1);

outline.insert(t);

</pre>
        <h2 id="remove">remove()</h2>
        <h3>Prototype</h3>
        <p class="signature">remove()</p>
        <p class="signature">remove(Object child)</p>
        <h3>Description</h3>
                    
        <p>Remove the child object from the node.</p>
                    
        <p>If no child is specified, then the node for which this method is called is
               removed from the parent node.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>child</td>
                <td>Child object to be removed</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Insert other node
var node = new OutlineNode("Remove-Testnode");
outline.insert(node);

// Insert ASN1 structure
var root = new X509("root.cer");
bs = root.getBytes();
var t = new ASN1(bs);
assert(t instanceof ASN1);

outline.insert(t);

outline.remove(node);
outline.remove(t);

</pre>
        <h2 id="show">show()</h2>
        <h3>Prototype</h3>
        <p class="signature">show()</p>
        <p class="signature">show(String title)</p>
        <h3>Description</h3>
                    
        <p>Make tree of outline node visible and allow user interaction.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>title</td>
                <td>Title of outline to display</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

outline.show();

</pre>
        <h2 id="collapse">collapse()</h2>
        <h3>Prototype</h3>
        <p class="signature">collapse()</p>
        <h3>Description</h3>
                    
        <p>Collapse the node programmatically</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

outline.collapse();

</pre>
        <h2 id="expand">expand()</h2>
        <h3>Prototype</h3>
        <p class="signature">expand()</p>
        <h3>Description</h3>
                    
        <p>Expand the node programmatically</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

outline.expand();

</pre>
        <h2 id="setContextMenu">setContextMenu()</h2>
        <h3>Prototype</h3>
        <p class="signature">setContextMenu(String[] entries)</p>
        <h3>Description</h3>
                    
        <p>Set content of context menu.</p>
                    
        <p>Selected actions trigger an actionLister() method call on the user object.</p>
                    
        <p>A separator can be defined using "---" as entry.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>entries</td>
                <td>Array of context menu entries</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

outline.setContextMenu(["add"]);

</pre>
        <h2 id="setToolTip">setToolTip()</h2>
        <h3>Prototype</h3>
        <p class="signature">setToolTip(String toolTipText)</p>
        <p class="signature">setToolTip()</p>
        <h3>Description</h3>
                    
        <p>Set a text to display as tool tip, which is displayed when the mouse is held over the node.</p>
                    
        <p>If no text is defined, the tool tip is removed.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>toolTipText</td>
                <td>Text to display</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

outline.setToolTip("Press the right mouse button to see context menu");

</pre>
        <h2 id="setIcon">setIcon()</h2>
        <h3>Prototype</h3>
        <p class="signature">setIcon(String iconName)</p>
        <p class="signature">setIcon()</p>
        <h3>Description</h3>
                    
        <p>Change the icon of the node to the named icon or reset to the default.</p>
                    
        <p>The name of the icon is mapped to the file name &lt;iconName&gt;.png and
               located in the icons directory directly underneath the installation directory.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>iconName</td>
                <td>Name of icon</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

outline.setIcon("selected");

</pre>
        <h2 id="setLabel">setLabel()</h2>
        <h3>Prototype</h3>
        <p class="signature">setLabel(String label)</p>
        <h3>Description</h3>
                    
        <p>Change the label of the node to the given string.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>label</td>
                <td>Label for node</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

outline.setLabel("Changed label");

</pre>
        <h2 id="setUserObject">setUserObject()</h2>
        <h3>Prototype</h3>
        <p class="signature">setUserObject(Object userObject)</p>
        <h3>Description</h3>
                    
        <p>Register a user object for this node. Any events are delegated to this user object if a
               event method is provided.</p>
                    
        <p>selectedListener(OutlineNode source) is called if the user is selecting the node.</p>
                    
        <p>expandListener(OutlineNode source) is called if the user is expanding the node.</p>
                    
        <p>collapseListener(OutlineNode source) is called if the user is collapsing the node.</p>
                    
        <p>actionListener(OutlineNode source, String action) is called if the user is selecting from the context menu.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>userObject</td>
                <td>Object to receive events.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

outline.setUserObject(new Object());

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>PKCS11Object - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>PKCS11Object - Reference Documentation</h1>
        <p>Class implementing support for objects in cryptographic token with PKCS#11 interface</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">PKCS11Object() constructor</a>
            </li>
            <li>
                <a href="#getAttribute">getAttribute()</a>
            </li>
            <li>
                <a href="#getNumberAttribute">getNumberAttribute()</a>
            </li>
            <li>
                <a href="#getBooleanAttribute">getBooleanAttribute()</a>
            </li>
            <li>
                <a href="#destroy">destroy()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKO_DATA</td>
                <td>PKCS#11 object class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKO_CERTIFICATE</td>
                <td>PKCS#11 object class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKO_PUBLIC_KEY</td>
                <td>PKCS#11 object class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKO_PRIVATE_KEY</td>
                <td>PKCS#11 object class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKO_SECRET_KEY</td>
                <td>PKCS#11 object class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKO_HW_FEATURE</td>
                <td>PKCS#11 object class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKO_DOMAIN_PARAMETERS</td>
                <td>PKCS#11 object class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKO_MECHANISM</td>
                <td>PKCS#11 object class</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_CLASS</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_TOKEN</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_PRIVATE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_LABEL</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_APPLICATION</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_VALUE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_OBJECT_ID</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_CERTIFICATE_TYPE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_ISSUER</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_SERIAL_NUMBER</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_SERIAL_NUMBER</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_OWNER</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_ATTR_TYPES</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_TRUSTED</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_CERTIFICATE_CATEGORY</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_JAVA_MIDP_SECURITY_DOMAIN</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_URL</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_HASH_OF_SUBJECT_PUBLIC_KEY</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_HASH_OF_ISSUER_PUBLIC_KEY</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_CHECK_VALUE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_KEY_TYPE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_SUBJECT</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_ID</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_SENSITIVE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_ENCRYPT</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_DECRYPT</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_WRAP</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_UNWRAP</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_SIGN</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_SIGN_RECOVER</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_VERIFY</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_VERIFY_RECOVER</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_DERIVE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_START_DATE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_END_DATE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_MODULUS</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_MODULUS_BITS</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_PUBLIC_EXPONENT</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_PRIVATE_EXPONENT</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_PRIME_1</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_PRIME_2</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_EXPONENT_1</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_EXPONENT_2</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_COEFFICIENT</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_PRIME</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_SUBPRIME</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_BASE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_PRIME_BITS</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_SUB_PRIME_BITS</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_VALUE_BITS</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_VALUE_LEN</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_EXTRACTABLE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_LOCAL</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_NEVER_EXTRACTABLE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_ALWAYS_SENSITIVE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_KEY_GEN_MECHANISM</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_MODIFIABLE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_ECDSA_PARAMS</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_EC_PARAMS</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_EC_POINT</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_SECONDARY_AUTH</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_AUTH_PIN_FLAGS</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_ALWAYS_AUTHENTICATE</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKA_WRAP_WITH_TRUSTED</td>
                <td>PKCS#11 attribute</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKK_RSA</td>
                <td>PKCS#11 key type</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKK_ECDSA</td>
                <td>PKCS#11 key type</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKK_EC</td>
                <td>PKCS#11 key type</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKK_DES</td>
                <td>PKCS#11 key type</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKK_DES2</td>
                <td>PKCS#11 key type</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKK_DES3</td>
                <td>PKCS#11 key type</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKK_AES</td>
                <td>PKCS#11 key type</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">PKCS11Object(PKCS11Session session)</p>
        <h3>Description</h3>
                    
        <p>Create a PKCS#11 object within the given session using the provided
               list of attributes. The object is created in the selected token.</p>
        	
        <p>The constructor accepts an associative array of attributes. The key must be
               one of the PKCS11Object.CKA_xxx values. The value can be a number, a string,
               a ByteString or boolean value. At least the CKA_CLASS must be defined.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>PKCS11Session</code>
                </td>
                <td>session</td>
                <td>Previously opened session with PKCS#11 device</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// var p = new PKCS11Provider("c:/programme/smart card bundle/opensc-pkcs11.dll");
var p = new PKCS11Provider("C:/usr/local/lsm/bin/lsmpkcs11.dll");

// Login as user in a read/write session
var s = new PKCS11Session(p, 1, true);
s.login("12345678");

var attr = new Array();

attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_DES;
attr[PKCS11Object.CKA_LABEL] = "MyTestKey";
attr[PKCS11Object.CKA_TOKEN] = true;
attr[PKCS11Object.CKA_VALUE] = new ByteString("0101010101010101", HEX);

// Create object
var o = new PKCS11Object(s, attr);

</pre>
        <h2 id="getAttribute">getAttribute()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getAttribute(Number attr)</p>
        <h3>Description</h3>
        	
        <p>Return the requested attribute as ByteString</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>attr</td>
                <td>One of the CKA_ attributes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Value of attribute. null is returned if the attribute is not defined.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.OBJECT_NOT_FOUND</td>
                <td>The requested attribute can not be read</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

print("CKA_LABEL = " + o.getAttribute(PKCS11Object.CKA_LABEL).toString(ASCII));

</pre>
        <h2 id="getNumberAttribute">getNumberAttribute()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getAttribute(Number attr)</p>
        <h3>Description</h3>
        	
        <p>Return the requested attribute as Number</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>attr</td>
                <td>One of the CKA_ attributes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Value of attribute</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.OBJECT_NOT_FOUND</td>
                <td>The requested attribute is not defined or can not be read</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

print("CKA_KEY_TYPE = " + o.getNumberAttribute(PKCS11Object.CKA_KEY_TYPE));

</pre>
        <h2 id="getBooleanAttribute">getBooleanAttribute()</h2>
        <h3>Prototype</h3>
        <p class="signature">Boolean getBooleanAttribute(Number attr)</p>
        <h3>Description</h3>
        	
        <p>Return the requested attribute as boolean value</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>attr</td>
                <td>One of the CKA_ attributes</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>Boolean value of attribute</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.OBJECT_NOT_FOUND</td>
                <td>The requested attribute is not defined or can not be read</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

print("CKA_TOKEN = " + o.getBooleanAttribute(PKCS11Object.CKA_TOKEN));

</pre>
        <h2 id="destroy">destroy()</h2>
        <h3>Prototype</h3>
        <p class="signature">void destroy()</p>
        <h3>Description</h3>
                    
        <p>Destroy the object</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>Error removing object</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

o.destroy();

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>PKCS11Provider - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>PKCS11Provider - Reference Documentation</h1>
        <p>Class implementing support for cryptographic token with PKCS#11 interface</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">PKCS11Provider() constructor</a>
            </li>
            <li>
                <a href="#getSlots">getSlots()</a>
            </li>
            <li>
                <a href="#initToken">initToken()</a>
            </li>
            <li>
                <a href="#getKeyStore">getKeyStore()</a>
            </li>
            <li>
                <a href="#cleanup">cleanup()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>String</td>
                <td>providerName</td>
                <td>Name under which this provider is registered</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">PKCS11Provider(String providerName)</p>
        <h3>Description</h3>
        <p>Load and access provider module.</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>providerName</td>
                <td>Name and path of .DLL or shared object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// var p = new PKCS11Provider("c:/programme/smart card bundle/opensc-pkcs11.dll");
var p = new PKCS11Provider("C:/usr/local/lsm/bin/lsmpkcs11.dll");
// var p = new PKCS11Provider("C:/programme/opensc/bin/pkcs11-spy.dll");

</pre>
        <h2 id="getSlots">getSlots()</h2>
        <h3>Prototype</h3>
        <p class="signature">Array getSlots()</p>
        <h3>Description</h3>
                    
        <p>Return an array of native PKCS11Slot objects.</p>
        	
        <p>The objects in the array are of type org.opensc.pkcs11.wrap.PKCS11Slot.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Array</code>
                </td>
                <td>Array of native PKCS11Slot objects</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var slots = p.getSlots();
var slot = 0;

for (var i = 0; i &lt; slots.length; i++) {
	var s = slots[i];
	print("Slot #" + s.getId());
	print(" Description       : " + s.getDescription());
	print(" Manufacturer      : " + s.getManufacturer());
	print(" Hardware Version  : " + s.getHardwareVersion());
	print(" Firmware Version  : " + s.getFirmwareVersion());
	print(" isTokenPresent    : " + s.isTokenPresent());
	print(" isHardwareDevice  : " + s.isHardwareDevice());
	print(" isRemovableDevice : " + s.isRemovableDevice());
	
	if (s.isTokenPresent()) {
		var label = s.getTokenLabel();

		if (label == "SBOXTEST1") {
			print("Found " + label);
			slot = s.getId();
		}
	
		print("  Token :");
		print("  Label                     : " + label);
		print("  Manufacturer              : " + s.getTokenManufacturer());
		print("  Model                     : " + s.getTokenModel());
		print("  Serial Number             : " + s.getTokenSerialNumber());
		print("  Max PIN Length            : " + s.getTokenMaxPinLen());
		print("  Min PIN Length            : " + s.getTokenMinPinLen());
		print("  hasTokenProtectedAuthPath : " + s.hasTokenProtectedAuthPath());
		
		var mechs = s.getMechanisms();
		for (var j = 0; j &lt; mechs.length; j++) {
			print("   Mechanisms #" + j);
			var m = mechs[j];
			print("   Type         : " + m.getType() + " (" + m.getTypeName() + ")");
			print("   Min Key Size : " + m.getMinKeySize());
			print("   Max Key Size : " + m.getMaxKeySize());
			print("   Flags        : " + m.getFlags());
		}
	}
}

</pre>
        <h2 id="initToken">initToken()</h2>
        <h3>Prototype</h3>
        <p class="signature">initToken(Number slotId, String soPIN, String label)</p>
        <h3>Description</h3>
                    
        <p>Initialize token in referenced slot and set the Security Officer (SO) PIN and label.</p>
                    
        <p>If the token is already initialized, then the  SO PIN must match the tokens SO PIN.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>slotId</td>
                <td>The slot id of the slot to initialize</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>soPIN</td>
                <td>The Security Officers PIN</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>label</td>
                <td>The tokens label</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

p.initToken(slot, "abcdefgh", "SBOXTEST1");

</pre>
        <h2 id="getKeyStore">getKeyStore()</h2>
        <h3>Prototype</h3>
        <p class="signature">KeyStore getKeyStore(Number slot)</p>
        <p class="signature">KeyStore getKeyStore(Number slot, String userPIN)</p>
        <h3>Description</h3>
                    
        <p>Obtain the key store for a token in the selected slot.</p>
                    
        <p>The key store can be used to create key objects that
               represent keys in the token.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>slot</td>
                <td>Slot number</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>userPIN</td>
                <td>User PIN for token</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>KeyStore</code>
                </td>
                <td>KeyStore object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var ks = p.getKeyStore(slot, "12345678");

var aliases = ks.getAliases();
for (var i = 0; i &lt; aliases.length; i++) {
	print(aliases[i]);
}

var k = new Key();
k.setType(Key.PRIVATE);
k.setID(aliases[0]);

ks.getKeyFromKeyStore(k);

var c = new Crypto(p.providerName);

var message = new ByteString("Hello World", ASCII);
var signature = c.sign(k, Crypto.RSA, message);

print(signature);


</pre>
        <h2 id="cleanup">cleanup()</h2>
        <h3>Prototype</h3>
        <p class="signature">cleanup()</p>
        <h3>Description</h3>
        	
        <p>Cleanup provider and release used system resources.</p>
        	
        <p>This will be done automatically when the Java Runtime terminates.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

p.cleanup();

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>PKCS11Session - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>PKCS11Session - Reference Documentation</h1>
        <p>Class implementing support for cryptographic token with PKCS#11 interface</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">PKCS11Session() constructor</a>
            </li>
            <li>
                <a href="#login">login()</a>
            </li>
            <li>
                <a href="#initPIN">initPIN()</a>
            </li>
            <li>
                <a href="#setPIN">setPIN()</a>
            </li>
            <li>
                <a href="#enumerateObjects">enumerateObjects()</a>
            </li>
            <li>
                <a href="#generateKey">generateKey()</a>
            </li>
            <li>
                <a href="#generateKeyPair">generateKeyPair()</a>
            </li>
            <li>
                <a href="#wrapKey">wrapKey()</a>
            </li>
            <li>
                <a href="#unwrapKey">unwrapKey()</a>
            </li>
            <li>
                <a href="#deriveKey">deriveKey()</a>
            </li>
            <li>
                <a href="#signInit">signInit()</a>
            </li>
            <li>
                <a href="#sign">sign()</a>
            </li>
            <li>
                <a href="#signUpdate">signUpdate()</a>
            </li>
            <li>
                <a href="#signFinal">signFinal()</a>
            </li>
            <li>
                <a href="#verifyInit">verifyInit()</a>
            </li>
            <li>
                <a href="#verify">verify()</a>
            </li>
            <li>
                <a href="#verifyUpdate">verifyUpdate()</a>
            </li>
            <li>
                <a href="#verifyFinal">verifyFinal()</a>
            </li>
            <li>
                <a href="#encryptInit">encryptInit()</a>
            </li>
            <li>
                <a href="#encrypt">encrypt()</a>
            </li>
            <li>
                <a href="#encryptUpdate">encryptUpdate()</a>
            </li>
            <li>
                <a href="#encryptFinal">encryptFinal()</a>
            </li>
            <li>
                <a href="#decryptInit">decryptInit()</a>
            </li>
            <li>
                <a href="#decrypt">decrypt()</a>
            </li>
            <li>
                <a href="#decryptUpdate">decryptUpdate()</a>
            </li>
            <li>
                <a href="#decryptFinal">decryptFinal()</a>
            </li>
            <li>
                <a href="#close">close()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RSA_PKCS_KEY_PAIR_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RSA_PKCS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RSA_9796</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RSA_X_509</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_MD2_RSA_PKCS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_MD5_RSA_PKCS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA1_RSA_PKCS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RIPEMD128_RSA_PKCS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RIPEMD160_RSA_PKCS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RSA_PKCS_OAEP</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RSA_X9_31_KEY_PAIR_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RSA_X9_31</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA1_RSA_X9_31</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RSA_PKCS_PSS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA1_RSA_PKCS_PSS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DSA_KEY_PAIR_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DSA</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DSA_SHA1</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DH_PKCS_KEY_PAIR_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DH_PKCS_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_X9_42_DH_KEY_PAIR_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_X9_42_DH_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_X9_42_DH_HYBRID_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_X9_42_MQV_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA256_RSA_PKCS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA384_RSA_PKCS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA512_RSA_PKCS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA256_RSA_PKCS_PSS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA384_RSA_PKCS_PSS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA512_RSA_PKCS_PSS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC2_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC2_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC2_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC2_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC2_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC2_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC4_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC4</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES2_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES3_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES3_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES3_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES3_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES3_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DES3_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CDMF_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CDMF_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CDMF_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CDMF_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CDMF_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CDMF_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_MD2</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_MD2_HMAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_MD2_HMAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_MD5</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_MD5_HMAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_MD5_HMAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA_1</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA_1_HMAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA_1_HMAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RIPEMD128</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RIPEMD128_HMAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RIPEMD128_HMAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RIPEMD160</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RIPEMD160_HMAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RIPEMD160_HMAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST3_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST3_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST3_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST3_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST3_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST3_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST5_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST128_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST5_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST128_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST5_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST128_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST5_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST128_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST5_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST128_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST5_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CAST128_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC5_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC5_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC5_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC5_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC5_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_RC5_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_IDEA_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_IDEA_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_IDEA_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_IDEA_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_IDEA_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_IDEA_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_GENERIC_SECRET_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CONCATENATE_BASE_AND_KEY</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CONCATENATE_BASE_AND_DATA</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_CONCATENATE_DATA_AND_BASE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_XOR_BASE_AND_DATA</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_EXTRACT_KEY_FROM_KEY</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SSL3_PRE_MASTER_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SSL3_MASTER_KEY_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SSL3_KEY_AND_MAC_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SSL3_MASTER_KEY_DERIVE_DH</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_TLS_PRE_MASTER_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_TLS_MASTER_KEY_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_TLS_KEY_AND_MAC_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_TLS_MASTER_KEY_DERIVE_DH</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SSL3_MD5_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SSL3_SHA1_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_MD5_KEY_DERIVATION</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_MD2_KEY_DERIVATION</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SHA1_KEY_DERIVATION</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_MD2_DES_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_MD5_DES_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_MD5_CAST_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_MD5_CAST3_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_MD5_CAST5_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_MD5_CAST128_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_SHA1_CAST5_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_SHA1_CAST128_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_SHA1_RC4_128</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_SHA1_RC4_40</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_SHA1_DES3_EDE_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_SHA1_DES2_EDE_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_SHA1_RC2_128_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBE_SHA1_RC2_40_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PKCS5_PBKD2</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_PBA_SHA1_WITH_SHA1_HMAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_KEY_WRAP_LYNKS</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_KEY_WRAP_SET_OAEP</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_ECB64</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_CBC64</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_OFB64</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_CFB64</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_CFB32</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_CFB16</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_CFB8</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_WRAP</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_PRIVATE_WRAP</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_SKIPJACK_RELAYX</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_KEA_KEY_PAIR_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_KEA_KEY_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_FORTEZZA_TIMESTAMP</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_BATON_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_BATON_ECB128</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_BATON_ECB96</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_BATON_CBC128</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_BATON_COUNTER</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_BATON_SHUFFLE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_BATON_WRAP</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_ECDSA_KEY_PAIR_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_EC_KEY_PAIR_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_ECDSA</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_ECDSA_SHA1</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_ECDH1_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_ECDH1_COFACTOR_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_ECMQV_DERIVE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_JUNIPER_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_JUNIPER_ECB128</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_JUNIPER_CBC128</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_JUNIPER_COUNTER</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_JUNIPER_SHUFFLE</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_JUNIPER_WRAP</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_FASTHASH</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_AES_KEY_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_AES_ECB</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_AES_CBC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_AES_MAC</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_AES_MAC_GENERAL</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_AES_CBC_PAD</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DSA_PARAMETER_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_DH_PKCS_PARAMETER_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>CKM_X9_42_DH_PARAMETER_GEN</td>
                <td>PKCS#11 mechanism constant</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">PKCS11Session(PKCS11Provider provider, Number slot)</p>
        <p class="signature">PKCS11Session(PKCS11Provider provider, Number slot, Boolean readWrite)</p>
        <h3>Description</h3>
                    
        <p>Open a new session using the given provider and selected slot.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>PKCS11Provider</code>
                </td>
                <td>provider</td>
                <td>Previously loaded provider</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>slot</td>
                <td>Slot id to use</td>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>readWrite</td>
                <td>True, if session shall allow write access to token. Default is false.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var p = new PKCS11Provider("C:/usr/local/lsm/bin/lsmpkcs11.dll");

var s = new PKCS11Session(p, 1, false);
s.close();

</pre>
        <h2 id="login">login()</h2>
        <h3>Prototype</h3>
        <p class="signature">login(String password)</p>
        <p class="signature">login(String password, Boolean so)</p>
        <h3>Description</h3>
                    
        <p>Login into token as user or security officer</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>password</td>
                <td>Password to be used for login</td>
            </tr>
            <tr>
                <td>
                    <code>Boolean</code>
                </td>
                <td>so</td>
                <td>True, if login as security officer is requested. Default is false</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Login as user in a read only session
var s = new PKCS11Session(p, 1, false);
s.login("12345678");
s.close();

// Login as security officer in a read/write session
var s = new PKCS11Session(p, 1, true);
s.login("abcdefgh", true);
s.close();

</pre>
        <h2 id="initPIN">initPIN()</h2>
        <h3>Prototype</h3>
        <p class="signature">initPIN(String password)</p>
        <h3>Description</h3>
                    
        <p>Initialize user PIN.</p>
                    
        <p>The user PIN can be initialized in a read/write session authenticated
               by the SO PIN.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>password</td>
                <td>The new user PIN</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Login as security officer in a read/write session
var s = new PKCS11Session(p, 1, true);
s.login("abcdefgh", true);
s.initPIN("12345678");
s.close();

</pre>
        <h2 id="setPIN">setPIN()</h2>
        <h3>Prototype</h3>
        <p class="signature">setPIN(String oldPIN, String newPIN)</p>
        <h3>Description</h3>
                    
        <p>Change the user PIN.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>oldPIN</td>
                <td>The old user PIN</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>newPIN</td>
                <td>The new user PIN</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Login as security officer in a read/write session
var s = new PKCS11Session(p, 1, true);
s.setPIN("12345678", "12345678");
s.close();

</pre>
        <h2 id="enumerateObjects">enumerateObjects()</h2>
        <h3>Prototype</h3>
        <p class="signature">enumerateObjects()</p>
        <p class="signature">enumerateObjects(, Array filterAttrs)</p>
        <h3>Description</h3>
                    
        <p>Enumerate all objects available in the session</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Array</code>
                </td>
                <td>filterAttrs</td>
                <td>Array of filter attributes (CKA_*)</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Array of PKCS11Objects</code>
                </td>
                <td>Objects found</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Login as user in a read only session
var s = new PKCS11Session(p, 1, false);
s.login("12345678");

print("All objects:");
var objs = s.enumerateObjects();
for (var i = 0; i &lt; objs.length; i++) {
	print(" Class :" + objs[i].getNumberAttribute(PKCS11Object.CKA_CLASS));
	var label = objs[i].getAttribute(PKCS11Object.CKA_LABEL);
	if (label) {
		print(" Label :" + objs[i].getAttribute(PKCS11Object.CKA_LABEL).toString(ASCII));
	}
}

print("Objects with CKA_CLASS = CKO_SECRET_KEY:");
var attr = new Array();
attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;

var objs = s.enumerateObjects(attr);
for (var i = 0; i &lt; objs.length; i++) {
	print(" Class :" + objs[i].getNumberAttribute(PKCS11Object.CKA_CLASS));
	var label = objs[i].getAttribute(PKCS11Object.CKA_LABEL);
	if (label) {
		print(" Label :" + objs[i].getAttribute(PKCS11Object.CKA_LABEL).toString(ASCII));
	}
}

s.close();

</pre>
        <h2 id="generateKey">generateKey()</h2>
        <h3>Prototype</h3>
        <p class="signature">PKCS11Object generateKey(Number mechanism, ByteString param, Array keyAttr)</p>
        <h3>Description</h3>
                    
        <p>Call C_GenerateKey() to generate a symmetric key using the mechanism specified with
               given parameter. The key object is allocated using the attributes from keyAttr.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mechanism</td>
                <td>A PKCS#11 mechanism as defined by one of the PKCS11Session.CKM_xxx constants</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>param</td>
                <td>Parameter for the generation mechanism</td>
            </tr>
            <tr>
                <td>
                    <code>Array</code>
                </td>
                <td>keyAttr</td>
                <td>Array of key attributes (CKA_*)</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>PKCS11Objects</code>
                </td>
                <td>New key object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Generate a 168 bit DES key

var s = new PKCS11Session(p, 1, true);
s.login("12345678");

var attr = new Array();
attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_DES3;
attr[PKCS11Object.CKA_ENCRYPT] = true;
attr[PKCS11Object.CKA_DECRYPT] = true;
attr[PKCS11Object.CKA_LABEL] = "GeneratedDES3Key";

var key = s.generateKey(PKCS11Session.CKM_DES3_KEY_GEN, null, attr);

s.close();

</pre>
        <h2 id="generateKeyPair">generateKeyPair()</h2>
        <h3>Prototype</h3>
        <p class="signature">PKCS11Object[] generateKeyPair(Number mechanism, ByteString param, Array pubAttr, Array priAttr)</p>
        <h3>Description</h3>
                    
        <p>Call C_GenerateKeyPair() to generate a key pair using the mechanism specified with
               given parameter. Key objects are allocated using the attributes from pubAttr and priAttr.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mechanism</td>
                <td>A PKCS#11 mechanism as defined by one of the PKCS11Session.CKM_xxx constants</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>param</td>
                <td>Parameter for the generation mechanism</td>
            </tr>
            <tr>
                <td>
                    <code>Array</code>
                </td>
                <td>pubAttr</td>
                <td>Array of public key attributes (CKA_*)</td>
            </tr>
            <tr>
                <td>
                    <code>Array</code>
                </td>
                <td>priAttr</td>
                <td>Array of private key attributes (CKA_*)</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>PKCS11Objects[]</code>
                </td>
                <td>Array containing the public key object at index 0, the private key
                                       object at index 1.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Generate a 2048 bit RSA key pair

var s = new PKCS11Session(p, 1, true);
s.login("12345678");

var priAttr = new Array();
priAttr[PKCS11Object.CKA_SIGN] = true;
priAttr[PKCS11Object.CKA_DECRYPT] = true;
priAttr[PKCS11Object.CKA_UNWRAP] = true;
priAttr[PKCS11Object.CKA_SENSITIVE] = true;
priAttr[PKCS11Object.CKA_ID] = new ByteString("23", HEX);
priAttr[PKCS11Object.CKA_PRIVATE] = true;
priAttr[PKCS11Object.CKA_LABEL] = "GeneratedPrivateKey";

var pubAttr = new Array();
pubAttr[PKCS11Object.CKA_VERIFY] = true;
pubAttr[PKCS11Object.CKA_ENCRYPT] = true;
pubAttr[PKCS11Object.CKA_WRAP] = true;
pubAttr[PKCS11Object.CKA_MODULUS_BITS] = 2048;
pubAttr[PKCS11Object.CKA_PUBLIC_EXPONENT] = new ByteString("010001", HEX);
pubAttr[PKCS11Object.CKA_LABEL] = "GeneratedPublicKey";

var keys = s.generateKeyPair(PKCS11Session.CKM_RSA_PKCS_KEY_PAIR_GEN, null, pubAttr, priAttr);

s.close();

</pre>
        <h2 id="wrapKey">wrapKey()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString wrapKey(Number mechanism, ByteString param, PKCS11Object wrappingKey, PKCS11Object key)</p>
        <h3>Description</h3>
                    
        <p>Call C_WrapKey() to wrap a key using another and the mechanism specified with
               given parameter.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mechanism</td>
                <td>A PKCS#11 mechanism as defined by one of the PKCS11Session.CKM_xxx constants</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>param</td>
                <td>Parameter for the generation mechanism</td>
            </tr>
            <tr>
                <td>
                    <code>PKCS11Object</code>
                </td>
                <td>wrappingKey</td>
                <td>The wrapping key</td>
            </tr>
            <tr>
                <td>
                    <code>PKCS11Object</code>
                </td>
                <td>key</td>
                <td>The key to be wrapped</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The wrapped key</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var s = new PKCS11Session(p, 1, true);
s.login("12345678");

// Generate a 56 bit DES key

var attr = new Array();
attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_DES;
attr[PKCS11Object.CKA_ENCRYPT] = true;
attr[PKCS11Object.CKA_DECRYPT] = true;
attr[PKCS11Object.CKA_EXTRACTABLE] = true;
attr[PKCS11Object.CKA_LABEL] = "GeneratedDESKeyForWrapping";

var key = s.generateKey(PKCS11Session.CKM_DES_KEY_GEN, null, attr);

var attr = new Array();
attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_DES;
attr[PKCS11Object.CKA_ENCRYPT] = true;
attr[PKCS11Object.CKA_DECRYPT] = true;
attr[PKCS11Object.CKA_WRAP] = true;
attr[PKCS11Object.CKA_UNWRAP] = true;
attr[PKCS11Object.CKA_LABEL] = "GeneratedDESWrappingKey";

var wrapkey = s.generateKey(PKCS11Session.CKM_DES_KEY_GEN, null, attr);

var wrappedkey = s.wrapKey(PKCS11Session.CKM_DES_ECB, null, wrapkey, key);

var attr = new Array();
attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_DES;
attr[PKCS11Object.CKA_ENCRYPT] = true;
attr[PKCS11Object.CKA_DECRYPT] = true;
attr[PKCS11Object.CKA_TOKEN] = true;
attr[PKCS11Object.CKA_LABEL] = "UnwrappedDESKey";

s.unwrapKey(PKCS11Session.CKM_DES_ECB, null, wrapkey, wrappedkey, attr);

s.close();

</pre>
        <h2 id="unwrapKey">unwrapKey()</h2>
        <h3>Prototype</h3>
        <p class="signature">PKCS11Object unwrapKey(Number mechanism, ByteString param, PKCS11Object wrappingKey, ByteString wrappedKey, Array keyAttr)</p>
        <h3>Description</h3>
                    
        <p>Call C_UnwrapKey() to unwrap a key using another and the mechanism specified with
               given parameter.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mechanism</td>
                <td>A PKCS#11 mechanism as defined by one of the PKCS11Session.CKM_xxx constants</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>param</td>
                <td>Parameter for the generation mechanism</td>
            </tr>
            <tr>
                <td>
                    <code>PKCS11Object</code>
                </td>
                <td>wrappingKey</td>
                <td>The wrapping key</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>wrappedKey</td>
                <td>The wrapped key</td>
            </tr>
            <tr>
                <td>
                    <code>Array</code>
                </td>
                <td>keyAttr</td>
                <td>Array of key attributes (CKA_*)</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>PKCS11Objects</code>
                </td>
                <td>Unwrapped key object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See wrapKey() for an example

</pre>
        <h2 id="deriveKey">deriveKey()</h2>
        <h3>Prototype</h3>
        <p class="signature">PKCS11Object deriveKey(Number mechanism, ByteString param, PKCS11Object baseKey, Array keyAttr)</p>
        <h3>Description</h3>
                    
        <p>Call C_DeriveKey() to derive one key from another and the mechanism specified with
               given parameter.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mechanism</td>
                <td>A PKCS#11 mechanism as defined by one of the PKCS11Session.CKM_xxx constants</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>param</td>
                <td>Parameter for the generation mechanism</td>
            </tr>
            <tr>
                <td>
                    <code>PKCS11Object</code>
                </td>
                <td>baseKey</td>
                <td>The base key</td>
            </tr>
            <tr>
                <td>
                    <code>Array</code>
                </td>
                <td>keyAttr</td>
                <td>Array of key attributes for the derived key (CKA_*)</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>PKCS11Objects</code>
                </td>
                <td>Derived key object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var s = new PKCS11Session(p, 1, true);
s.login("12345678");

// Generate a 56 bit DES key

var attr = new Array();
attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_DES;
attr[PKCS11Object.CKA_DERIVE] = true;
attr[PKCS11Object.CKA_LABEL] = "GeneratedDESKeyForDerive";

var key = s.generateKey(PKCS11Session.CKM_DES_KEY_GEN, null, attr);

var attr = new Array();
attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_DES;
attr[PKCS11Object.CKA_LABEL] = "DerivedDESKey";

var derivedkey = s.deriveKey(PKCS11Session.CKM_SHA1_KEY_DERIVATION, null, key, attr);

s.close();

</pre>
        <h2 id="signInit">signInit()</h2>
        <h3>Prototype</h3>
        <p class="signature">signInit(Number mechanism, PKCS11Object key)</p>
        <p class="signature">signInit(Number mechanism, Key key)</p>
        <p class="signature">signInit(Number mechanism, PKCS11Object key, ByteString parameter)</p>
        <p class="signature">signInit(Number mechanism, Key key, ByteString parameter)</p>
        <h3>Description</h3>
                    
        <p>Call C_SignInit() to start a PKCS#11 signature operation.</p>
                    
        <p>The method accepts keys in two different formats. Either as
               PKCS11Object or as Key object. The former can be obtained using
               the PKCS11Session.enumerateObjects() methods, the later using the
           KeyStore.getKeyFromKeyStore() method.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mechanism</td>
                <td>A PKCS#11 mechanism as defined by one of the PKCS11Session.CKM_xxx constants</td>
            </tr>
            <tr>
                <td>
                    <code>PKCS11Object</code>
                </td>
                <td>key</td>
                <td>A PKCS11Object</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>A Key object</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>parameter</td>
                <td>Parameter passed with mechanism</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Login as user in a read/write session
var s = new PKCS11Session(p, 1, true);
s.login("12345678");

// Create RSA private session key
var attr = new Array();

attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_PRIVATE_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_RSA;
attr[PKCS11Object.CKA_LABEL] = "MyPrivateRSAKey";

attr[PKCS11Object.CKA_PRIME_1] = new ByteString("c0a0758cdf14256f78d4708c86becdead1b50ad4ad6c5c703e2168fbf37884cb", HEX);
attr[PKCS11Object.CKA_PRIME_2] = new ByteString("f01734d7960ea60070f1b06f2bb81bfac48ff192ae18451d5e56c734a5aab8a5", HEX);
attr[PKCS11Object.CKA_EXPONENT_1] = new ByteString("b54bb9edff22051d9ee60f9351a48591b6500a319429c069a3e335a1d6171391", HEX);
attr[PKCS11Object.CKA_EXPONENT_2] = new ByteString("d3d83daf2a0cecd3367ae6f8ae1aeb82e9ac2f816c6fc483533d8297dd7884cd", HEX);
attr[PKCS11Object.CKA_COEFFICIENT] = new ByteString("b8f52fc6f38593dabb661d3f50f8897f8106eee68b1bce78a95b132b4e5b5d19", HEX);

attr[PKCS11Object.CKA_MODULUS] = new ByteString("b4a7e46170574f16a97082b22be58b6a2a629798419be12872a4bdba626cfae9900f76abfb12139dce5de56564fab2b6543165a040c606887420e33d91ed7ed7", HEX);
attr[PKCS11Object.CKA_PUBLIC_EXPONENT] = new ByteString("11", HEX);

var prk = new PKCS11Object(s, attr);


// Create RSA public key
var attr = new Array();

attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_PUBLIC_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_RSA;
attr[PKCS11Object.CKA_LABEL] = "MyPublicRSAKey";

attr[PKCS11Object.CKA_MODULUS] = new ByteString("b4a7e46170574f16a97082b22be58b6a2a629798419be12872a4bdba626cfae9900f76abfb12139dce5de56564fab2b6543165a040c606887420e33d91ed7ed7", HEX);
attr[PKCS11Object.CKA_PUBLIC_EXPONENT] = new ByteString("11", HEX);

var puk = new PKCS11Object(s, attr);


// Create RSA public key in SCSH3
var key = new Key();
key.setType(Key.PUBLIC);
key.setComponent(Key.MODULUS, new ByteString("b4a7e46170574f16a97082b22be58b6a2a629798419be12872a4bdba626cfae9900f76abfb12139dce5de56564fab2b6543165a040c606887420e33d91ed7ed7", HEX));
key.setComponent(Key.EXPONENT, new ByteString("11", HEX));

var crypto = new Crypto();


// Initiate signing operation
s.signInit(PKCS11Session.CKM_SHA1_RSA_PKCS, prk);

// Single step signing
var msg = new ByteString("Hello World", ASCII);
var signature = s.sign(msg);

print("Signature : " + signature);


// Decrypt block with public key
var plain = crypto.decrypt(key, Crypto.RSA, signature);
print("Plain = " + plain);

// Verify signature with SCSH3
assert(crypto.verify(key, Crypto.RSA, msg, signature));


// Verify signature with PKCS#11
s.verifyInit(PKCS11Session.CKM_SHA1_RSA_PKCS, puk);

// Single step verifying
var msg = new ByteString("Hello World", ASCII);
assert(s.verify(msg, signature));


// Initiate signing operation
s.signInit(PKCS11Session.CKM_SHA1_RSA_PKCS, prk);

// Multi-Step signing (Step 1)
var msg = new ByteString("Hello ", ASCII);
s.signUpdate(msg);

// Multi-Step signing (Step 2)
var msg = new ByteString("World", ASCII);
s.signUpdate(msg);
var signature = s.signFinal();

print("Signature : " + signature);

var plain = crypto.decrypt(key, Crypto.RSA, signature);
print("Plain = " + plain);

// Verify signature with SCSH3
var msg = new ByteString("Hello World", ASCII);
assert(crypto.verify(key, Crypto.RSA, msg, signature));


// Initiate verifying operation
s.verifyInit(PKCS11Session.CKM_SHA1_RSA_PKCS, puk);

// Multi-Step verifying (Step 1)
var msg = new ByteString("Hello ", ASCII);
s.verifyUpdate(msg);

// Multi-Step verifying (Step 2)
var msg = new ByteString("World", ASCII);
s.verifyUpdate(msg);
assert(s.verifyFinal(signature));

s.close();


</pre>
        <h2 id="sign">sign()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString sign(ByteString message)</p>
        <h3>Description</h3>
                    
        <p>Call C_Sign() to finish a PKCS#11 signature operation.</p>
        	
        <p>The method returns the signature.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>message</td>
                <td>Message to be signed</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Signature</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.signInit() for a complete example

</pre>
        <h2 id="signUpdate">signUpdate()</h2>
        <h3>Prototype</h3>
        <p class="signature">signUpdate(ByteString message)</p>
        <h3>Description</h3>
                    
        <p>Call C_SignUpdate() to continue a PKCS#11 signature operation.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>message</td>
                <td>Partial message to be signed</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.signInit() for a complete example

</pre>
        <h2 id="signFinal">signFinal()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString signFinal()</p>
        <h3>Description</h3>
                    
        <p>Call C_SignFinal() to finish a PKCS#11 signature operation.</p>
        	
        <p>The method returns the signature.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Signature</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.signInit() for a complete example

</pre>
        <h2 id="verifyInit">verifyInit()</h2>
        <h3>Prototype</h3>
        <p class="signature">verifyInit(Number mechanism, PKCS11Object key)</p>
        <p class="signature">verifyInit(Number mechanism, Key key)</p>
        <p class="signature">verifyInit(Number mechanism, PKCS11Object key, ByteString parameter)</p>
        <p class="signature">verifyInit(Number mechanism, Key key, ByteString parameter)</p>
        <h3>Description</h3>
                    
        <p>Call C_verifyInit() to start a PKCS#11 signature verification operation.</p>
                    
        <p>The method accepts keys in two different formats. Either as
               PKCS11Object or as Key object. The former can be obtained using
               the PKCS11Session.enumerateObjects() methods, the later using the
           KeyStore.getKeyFromKeyStore() method.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mechanism</td>
                <td>A PKCS#11 mechanism as defined by one of the PKCS11Session.CKM_xxx constants</td>
            </tr>
            <tr>
                <td>
                    <code>PKCS11Object</code>
                </td>
                <td>key</td>
                <td>A PKCS11Object</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>A Key object</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>parameter</td>
                <td>Parameter passed with mechanism</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.signInit() for a complete example

</pre>
        <h2 id="verify">verify()</h2>
        <h3>Prototype</h3>
        <p class="signature">boolean verify(ByteString message, ByteString signature)</p>
        <h3>Description</h3>
                    
        <p>Call C_Verify() to finish a PKCS#11 signature verification operation.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>message</td>
                <td>Message to be verified</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>signature</td>
                <td>Signature to be verified</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>boolean</code>
                </td>
                <td>True if the signature is valid</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.signInit() for a complete example

</pre>
        <h2 id="verifyUpdate">verifyUpdate()</h2>
        <h3>Prototype</h3>
        <p class="signature">verifyUpdate(ByteString message)</p>
        <h3>Description</h3>
                    
        <p>Call C_VerifyUpdate() to continue a PKCS#11 signature verification operation.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>message</td>
                <td>Partial message to be verified</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.signInit() for a complete example

</pre>
        <h2 id="verifyFinal">verifyFinal()</h2>
        <h3>Prototype</h3>
        <p class="signature">boolean signFinal(ByteString signature)</p>
        <h3>Description</h3>
                    
        <p>Call C_VerifyFinal() to finish a PKCS#11 signature verification operation.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>boolean</code>
                </td>
                <td>True if signature is valid</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.signInit() for a complete example

</pre>
        <h2 id="encryptInit">encryptInit()</h2>
        <h3>Prototype</h3>
        <p class="signature">encryptInit(Number mechanism, PKCS11Object key)</p>
        <p class="signature">encryptInit(Number mechanism, Key key)</p>
        <p class="signature">encryptInit(Number mechanism, PKCS11Object key, ByteString parameter)</p>
        <p class="signature">encryptInit(Number mechanism, Key key, ByteString parameter)</p>
        <h3>Description</h3>
                    
        <p>Call C_EncryptInit() to start a PKCS#11 encryption operation.</p>
                    
        <p>The method accepts keys in two different formats. Either as
               PKCS11Object or as Key object. The former can be obtained using
               the PKCS11Session.enumerateObjects() methods, the later using the
           KeyStore.getKeyFromKeyStore() method.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mechanism</td>
                <td>A PKCS#11 mechanism as defined by one of the PKCS11Session.CKM_xxx constants</td>
            </tr>
            <tr>
                <td>
                    <code>PKCS11Object</code>
                </td>
                <td>key</td>
                <td>A PKCS11Object</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>A Key object</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>parameter</td>
                <td>Parameter passed with mechanism</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Login as user in a read/write session
var s = new PKCS11Session(p, 1, true);
s.login("12345678");

// Define 3 different single DES key values
var keyval1 = new ByteString("7CA110454A1A6E57", HEX);
var keyval2 = new ByteString("0131D9619DC1376E", HEX);
var keyval3 = new ByteString("9DC1376E0131D961", HEX);

// Create crypto object for internal reference
var crypto = new Crypto();

// Create DES session key
var attr = new Array();

attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_DES;
attr[PKCS11Object.CKA_LABEL] = "MyPrivateDESKey1";
attr[PKCS11Object.CKA_ID] = new ByteString("0101", HEX);
attr[PKCS11Object.CKA_TOKEN] = false;
attr[PKCS11Object.CKA_SENSITIVE] = true;
attr[PKCS11Object.CKA_EXTRACTABLE] = false;
attr[PKCS11Object.CKA_VALUE] =  keyval1;

var k1p11 = new PKCS11Object(s, attr);

// Internal reference
var k1ref = new Key();
k1ref.setComponent(Key.DES, keyval1);


// Create DES2 session key
var attr = new Array();

attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_DES2;
attr[PKCS11Object.CKA_LABEL] = "MyPrivateDESKey2";
attr[PKCS11Object.CKA_ID] = new ByteString("0102", HEX);
attr[PKCS11Object.CKA_TOKEN] = false;
attr[PKCS11Object.CKA_SENSITIVE] = true;
attr[PKCS11Object.CKA_EXTRACTABLE] = false;
attr[PKCS11Object.CKA_VALUE] =  keyval1.concat(keyval2);

var k2p11 = new PKCS11Object(s, attr);

// Internal reference
var k2ref = new Key();
k2ref.setComponent(Key.DES, keyval1.concat(keyval2));


// Create DES3 session key
var attr = new Array();

attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_SECRET_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_DES3;
attr[PKCS11Object.CKA_LABEL] = "MyPrivateDESKey3";
attr[PKCS11Object.CKA_ID] = new ByteString("0103", HEX);
attr[PKCS11Object.CKA_TOKEN] = false;
attr[PKCS11Object.CKA_SENSITIVE] = true;
attr[PKCS11Object.CKA_EXTRACTABLE] = false;
attr[PKCS11Object.CKA_VALUE] =  keyval1.concat(keyval2).concat(keyval3);

var k3p11 = new PKCS11Object(s, attr);

// Internal reference
var k3ref = new Key();
k3ref.setComponent(Key.DES, keyval1.concat(keyval2).concat(keyval3));


var message = new ByteString("Hello World !!!!", ASCII);
var iv = new ByteString("0000000000000000", HEX);


// Encrypt with PKCS#11 - single step
s.encryptInit(PKCS11Session.CKM_DES_ECB, k1p11);
var cipher = s.encrypt(message);
print("Cipher : " + cipher);

// Verify with internal reference
var ref = crypto.encrypt(k1ref, Crypto.DES_ECB, message);
print("Ref    : " + ref);
assert(ref.equals(cipher));

// Decrypt with PKCS#11
s.decryptInit(PKCS11Session.CKM_DES_ECB, k1p11);
var plain = s.decrypt(cipher);
print("Plain : " + plain.toString(ASCII));
assert(plain.equals(message));

// Encrypt with PKCS#11 - multi step
s.encryptInit(PKCS11Session.CKM_DES_ECB, k1p11);
var cipher = s.encryptUpdate(message.left(8));
var cipher = cipher.concat(s.encryptUpdate(message.right(8)));

var l = s.encryptFinal();
assert(l == null);

print("Cipher : " + cipher);
assert(ref.equals(cipher));


// Encrypt with PKCS#11 - single step
s.encryptInit(PKCS11Session.CKM_DES3_ECB, k2p11);
var cipher = s.encrypt(message);
print("Cipher : " + cipher);

// Verify with internal reference
var ref = crypto.encrypt(k2ref, Crypto.DES_ECB, message);
print("Ref    : " + ref);
assert(ref.equals(cipher));

// Decrypt with PKCS#11
s.decryptInit(PKCS11Session.CKM_DES3_ECB, k2p11);
var plain = s.decrypt(cipher);
print("Plain : " + plain.toString(ASCII));
assert(plain.equals(message));

// Encrypt with PKCS#11 - multi step
s.encryptInit(PKCS11Session.CKM_DES3_ECB, k2p11);
var cipher = s.encryptUpdate(message.left(8));
var cipher = cipher.concat(s.encryptUpdate(message.right(8)));

var l = s.encryptFinal();
assert(l == null);

print("Cipher : " + cipher);
assert(ref.equals(cipher));


// Encrypt with PKCS#11 - single step
s.encryptInit(PKCS11Session.CKM_DES3_ECB, k3p11);
var cipher = s.encrypt(message);
print("Cipher : " + cipher);

// Verify with internal reference
var ref = crypto.encrypt(k3ref, Crypto.DES_ECB, message);
print("Ref    : " + ref);
assert(ref.equals(cipher));

// Decrypt with PKCS#11
s.decryptInit(PKCS11Session.CKM_DES3_ECB, k3p11);
var plain = s.decrypt(cipher);
print("Plain : " + plain.toString(ASCII));
assert(plain.equals(message));

// Encrypt with PKCS#11 - multi step
s.encryptInit(PKCS11Session.CKM_DES3_ECB, k3p11);
var cipher = s.encryptUpdate(message.left(8));
var cipher = cipher.concat(s.encryptUpdate(message.right(8)));

var l = s.encryptFinal();
assert(l == null);

print("Cipher : " + cipher);
assert(ref.equals(cipher));


// Encrypt with PKCS#11 - single step
s.encryptInit(PKCS11Session.CKM_DES_CBC, k1p11, iv);
var cipher = s.encrypt(message);
print("Cipher : " + cipher);

// Verify with internal reference
var ref = crypto.encrypt(k1ref, Crypto.DES_CBC, message, iv);
print("Ref    : " + ref);
assert(ref.equals(cipher));

// Decrypt with PKCS#11
s.decryptInit(PKCS11Session.CKM_DES_CBC, k1p11, iv);
var plain = s.decrypt(cipher);
print("Plain : " + plain.toString(ASCII));
assert(plain.equals(message));

// Encrypt with PKCS#11 - multi step
s.encryptInit(PKCS11Session.CKM_DES_CBC, k1p11, iv);
var cipher = s.encryptUpdate(message.left(8));
var cipher = cipher.concat(s.encryptUpdate(message.right(8)));

var l = s.encryptFinal();
assert(l == null);

print("Cipher : " + cipher);
assert(ref.equals(cipher));


// Encrypt with PKCS#11 - single step
s.encryptInit(PKCS11Session.CKM_DES3_CBC, k2p11, iv);
var cipher = s.encrypt(message);
print("Cipher : " + cipher);

// Verify with internal reference
var ref = crypto.encrypt(k2ref, Crypto.DES_CBC, message, iv);
print("Ref    : " + ref);
assert(ref.equals(cipher));

// Decrypt with PKCS#11
s.decryptInit(PKCS11Session.CKM_DES3_CBC, k2p11, iv);
var plain = s.decrypt(cipher);
print("Plain : " + plain.toString(ASCII));
assert(plain.equals(message));

// Encrypt with PKCS#11 - multi step
s.encryptInit(PKCS11Session.CKM_DES3_CBC, k2p11, iv);
var cipher = s.encryptUpdate(message.left(8));
var cipher = cipher.concat(s.encryptUpdate(message.right(8)));

var l = s.encryptFinal();
assert(l == null);

print("Cipher : " + cipher);
assert(ref.equals(cipher));


// Encrypt with PKCS#11 - single step
s.encryptInit(PKCS11Session.CKM_DES3_CBC, k3p11, iv);
var cipher = s.encrypt(message);
print("Cipher : " + cipher);

// Verify with internal reference
var ref = crypto.encrypt(k3ref, Crypto.DES_CBC, message, iv);
print("Ref    : " + ref);
assert(ref.equals(cipher));

// Decrypt with PKCS#11
s.decryptInit(PKCS11Session.CKM_DES3_CBC, k3p11, iv);
var plain = s.decrypt(cipher);
print("Plain : " + plain.toString(ASCII));
assert(plain.equals(message));

// Encrypt with PKCS#11 - multi step
s.encryptInit(PKCS11Session.CKM_DES3_CBC, k3p11, iv);
var cipher = s.encryptUpdate(message.left(8));
var cipher = cipher.concat(s.encryptUpdate(message.right(8)));

var l = s.encryptFinal();
assert(l == null);

print("Cipher : " + cipher);
assert(ref.equals(cipher));

// Encrypt / decrypt with RSA

// Create RSA private key
var attr = new Array();

attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_PRIVATE_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_RSA;
attr[PKCS11Object.CKA_LABEL] = "MyPrivateRSAKey";

attr[PKCS11Object.CKA_PRIME_1] = new ByteString("c0a0758cdf14256f78d4708c86becdead1b50ad4ad6c5c703e2168fbf37884cb", HEX);
attr[PKCS11Object.CKA_PRIME_2] = new ByteString("f01734d7960ea60070f1b06f2bb81bfac48ff192ae18451d5e56c734a5aab8a5", HEX);
attr[PKCS11Object.CKA_EXPONENT_1] = new ByteString("b54bb9edff22051d9ee60f9351a48591b6500a319429c069a3e335a1d6171391", HEX);
attr[PKCS11Object.CKA_EXPONENT_2] = new ByteString("d3d83daf2a0cecd3367ae6f8ae1aeb82e9ac2f816c6fc483533d8297dd7884cd", HEX);
attr[PKCS11Object.CKA_COEFFICIENT] = new ByteString("b8f52fc6f38593dabb661d3f50f8897f8106eee68b1bce78a95b132b4e5b5d19", HEX);

attr[PKCS11Object.CKA_MODULUS] = new ByteString("b4a7e46170574f16a97082b22be58b6a2a629798419be12872a4bdba626cfae9900f76abfb12139dce5de56564fab2b6543165a040c606887420e33d91ed7ed7", HEX);
attr[PKCS11Object.CKA_PUBLIC_EXPONENT] = new ByteString("11", HEX);

var prk = new PKCS11Object(s, attr);


// Create RSA public key
var attr = new Array();

attr[PKCS11Object.CKA_CLASS] = PKCS11Object.CKO_PUBLIC_KEY;
attr[PKCS11Object.CKA_KEY_TYPE] = PKCS11Object.CKK_RSA;
attr[PKCS11Object.CKA_LABEL] = "MyPublicRSAKey";

attr[PKCS11Object.CKA_MODULUS] = new ByteString("b4a7e46170574f16a97082b22be58b6a2a629798419be12872a4bdba626cfae9900f76abfb12139dce5de56564fab2b6543165a040c606887420e33d91ed7ed7", HEX);
attr[PKCS11Object.CKA_PUBLIC_EXPONENT] = new ByteString("11", HEX);

var puk = new PKCS11Object(s, attr);

var message = new ByteString("Hello World !!!!", ASCII);

s.encryptInit(PKCS11Session.CKM_RSA_PKCS, puk);
var cipher = s.encrypt(message);

print("Cipher = " + cipher);

s.decryptInit(PKCS11Session.CKM_RSA_PKCS, prk);
var plain = s.decrypt(cipher);

print("Plain = " + plain.toString(ASCII));


</pre>
        <h2 id="encrypt">encrypt()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString encrypt(ByteString message)</p>
        <h3>Description</h3>
                    
        <p>Call C_Encrypt() to perform a PKCS#11 encryption operation.</p>
        	
        <p>The method returns the cipher text.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>message</td>
                <td>Message to be encrypted</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Cipher text</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.encryptInit() for a complete example

</pre>
        <h2 id="encryptUpdate">encryptUpdate()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString encryptUpdate(ByteString message)</p>
        <h3>Description</h3>
                    
        <p>Call C_EncryptUpdate() to encrypt a block of data in a PKCS#11 encryption operation.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>message</td>
                <td>Partial message to be encrypted</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Cipher text</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.encryptInit() for a complete example

</pre>
        <h2 id="encryptFinal">encryptFinal()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString encryptFinal()</p>
        <h3>Description</h3>
                    
        <p>Call C_EncryptFinal() to finish a PKCS#11 encryption operation.</p>
        	
        <p>The method returns the last encrypted block or null, depending on the algorithm.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Last encrypted block or null</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.encryptInit() for a complete example

</pre>
        <h2 id="decryptInit">decryptInit()</h2>
        <h3>Prototype</h3>
        <p class="signature">decryptInit(Number mechanism, PKCS11Object key)</p>
        <p class="signature">decryptInit(Number mechanism, Key key)</p>
        <p class="signature">decryptInit(Number mechanism, PKCS11Object key, ByteString parameter)</p>
        <p class="signature">decryptInit(Number mechanism, Key key, ByteString parameter)</p>
        <h3>Description</h3>
                    
        <p>Call C_DecryptInit() to start a PKCS#11 decryption operation.</p>
                    
        <p>The method accepts keys in two different formats. Either as
               PKCS11Object or as Key object. The former can be obtained using
               the PKCS11Session.enumerateObjects() methods, the later using the
           KeyStore.getKeyFromKeyStore() method.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>mechanism</td>
                <td>A PKCS#11 mechanism as defined by one of the PKCS11Session.CKM_xxx constants</td>
            </tr>
            <tr>
                <td>
                    <code>PKCS11Object</code>
                </td>
                <td>key</td>
                <td>A PKCS11Object</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>key</td>
                <td>A Key object</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>parameter</td>
                <td>Parameter passed with mechanism</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.encryptInit() for a complete example

</pre>
        <h2 id="decrypt">decrypt()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString decrypt(ByteString message)</p>
        <h3>Description</h3>
                    
        <p>Call C_Decrypt() to perform a PKCS#11 decryption operation.</p>
        	
        <p>The method returns the plain text.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>message</td>
                <td>Message to be decrypted</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Plain text</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.encryptInit() for a complete example

</pre>
        <h2 id="decryptUpdate">decryptUpdate()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString decryptUpdate(ByteString message)</p>
        <h3>Description</h3>
                    
        <p>Call C_DecryptUpdate() to decrypt a block of data in a PKCS#11 decryption operation.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>message</td>
                <td>Partial message to be decrypted</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Plain text</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.encryptInit() for a complete example

</pre>
        <h2 id="decryptFinal">decryptFinal()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString decryptFinal()</p>
        <h3>Description</h3>
                    
        <p>Call C_DecryptFinal() to finish a PKCS#11 decryption operation.</p>
        	
        <p>The method returns the last decrypted block or null, depending on the algorithm.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Last decrypted block or null</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>PKCS#11 operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// See PKCS11Session.encryptInit() for a complete example

</pre>
        <h2 id="close">close()</h2>
        <h3>Prototype</h3>
        <p class="signature">close()</p>
        <h3>Description</h3>
                    
        <p>Close session</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var s = new PKCS11Session(p, 1, false);
s.close();

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
<h2>Persistent Configuration Settings</h2>
<p>Persistent configuration informations are available to scripts as properties of the _scsh3 object. This object is
   instantiated in the default CONFIG.JS file and filled with values from the SETTINGS.JS
   file.</p>
<p>Persistent settings can be set and saved to disk using the _scsh3.putProperty() method. This
   method accepts a key and a value and saves the updated configuration into a new SETTINGS.JS
   file. The SETTINGS.JS file is placed in the workspace directory by default.</p>
<p>Example: To use a specific card terminal in a new card object, you could use</p>
<pre>
    var card = new Card(_scsh3.reader);
</pre>
<h3>Pre-defined configuration fields</h3>
<p>The following configuration elements are available</p>
<table border="1">
<tr>
 <td>Key</td>
 <td>Value</td>
</tr>
<tr>
 <td>reader</td>
 <td>Name of the card reader selected in Options/Reader Configuration</td>
</tr>
</table>
<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate --><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
      <h2>Build-in Shell Commands</h2>
        <p>The full potential of the shell can be explored using JavaScript expressions,
           which are evaluated immediately. Only a few commands are provided by the shell
           object, whereas the majority of functions are in the scripting classes.</p>
        <h3>help</h3>
        <p>Display a short help in interactive mode</p>
        <h3>q | quit</h3>
        <p>Terminate shell.</p>
        <h3>r | reset</h3>
        <p>Reset card in reader and display Answer to Reset returned by card.</p>
        <h3>a | apdu(String apdu)</h3>
        <p>Send APDU to card. The argument apdu must be a string that
           contains in hexadecimal encoding the concatenation of CLA|INS|P1|P2|Lc|Data|Le</p>
        <h3>print(...)</h3>
        <p>All arguments passed to the print() function are converted using the
           toString() method and are concatenated with a trailing blank. The resulting
           string is printed with a '\n' appended.</p>
        <p>If the object is of type ByteString, then a hexadecimal dump is generated.</p>
        <h3>load(String filename)</h3>
        <p>Load, compile and execute ECMA script.</p>
        <p>Unless an absolute file name is given, the path is relative to the location
           of the script in which the function is called. See <a href="filelocation.html">Locating Files</a>
           for details.</p>
        <h3>launch(String moduleid)</h3>
        <p><a href="filelocation.html">Locate the module</a> with moduleid and launch as main module. All modules referenced using
           require() will be maintained in the main module.</p>
        <h3>defineClass(String classfilename)</h3>
        <p>Load Java class file and define new ECMA class constructor in script runtime.
           The Java class must be derived from org.mozilla.javascript.ScriptableObject.</p>
        <h3>assert(condition, message)</h3>
        <p>The condition argument is evaluated. If the result is false, then an
           exception is thrown with message. This is useful for test script.</p>
      <h2>Extending Shell Commands</h2>
        <p>When an expression entered on the command line is evaluated to
           be a function and no arguments are given, then the function is called
           with the result of the last evaluation. Shell commands
           can therefore be extended by simply defining a function in ECMA Script
           (e.g. as part of a startup script).</p>
        <p>Example: Define a function do()</p>
<pre>function mydo(last) {
  print("mydo() called with " + last);
}</pre>
        <p>Now when you enter "mydo" in the shell, this evaluates to a function object, which is then called
           with the result of the last evaluation.</p>
<pre>&gt;"Hello World";
Hello World
&gt;mydo
mydo() called with Hello World
&gt;
</pre>

<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate --><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>SOAPConnection - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>SOAPConnection - Reference Documentation</h1>
        <p>
            <p>Class implementing a SOAP Connection object used to call SOAP WebServices</p>
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">SOAPConnection() constructor</a>
            </li>
            <li>
                <a href="#call">call()</a>
            </li>
            <li>
                <a href="#close">close()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>String</td>
                <td>SOAP11</td>
                <td>SOAP 1.1 protocol</td>
            </tr>
            <tr>
                <td>String</td>
                <td>SOAP12</td>
                <td>SOAP 1.2 protocol</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">SOAPConnection()</p>
        <h3>Description</h3>
        Create a SOAPConnection object.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>soapVersion</td>
                <td>SOAP version, one of SOAPConnection.SOAP11 or SOAP12. Default is SOAP12</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var soapConnection = new SOAPConnection(SOAPConnection.SOAP12);

</pre>
        <h2 id="call">call()</h2>
        <h3>Prototype</h3>
        <p class="signature">XML call(String url, XML soapBodyElement)</p>
        <p class="signature">XML call(URLConnection urlconnection, XML soapBodyElement)</p>
        <h3>Description</h3>
                    
        <p>Create a SOAP message with the given element in the SOAP body.</p>
                    
        <p>Submit the message to the service endpoint and receive response.</p>
                    
        <p>The service endpoint can be specified either using a string with the URL or
               by using a preconfigured URLConnection instance. The later is useful, if
               additional connection parameters like timeouts or TLS keystores need to be
               specified.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>url</td>
                <td>The URL of the service endpoint</td>
            </tr>
            <tr>
                <td>
                    <code>URLConnection</code>
                </td>
                <td>urlconnection</td>
                <td>The URLConnection object</td>
            </tr>
            <tr>
                <td>
                    <code>XML</code>
                </td>
                <td>soapMessage</td>
                <td>The element in the SOAP body</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var typ = new Namespace("urn:test/types");

var request = 
			&lt;typ:ConvertRequest xmlns:typ="urn:test/types"&gt;
				&lt;id&gt;12&lt;/id&gt;
				&lt;input&gt;cid:440510063901&lt;/input&gt;
			&lt;!--You may enter ANY elements at this point--&gt;
			&lt;/typ:ConvertRequest&gt;


// Using a URL string
var url = "http://localhost:8080/se/soap";

var response = soapConnection.call(url, request);

print(response);

print(response.output);


// Using a URLConnection
var conn = new URLConnection("http://localhost:8080/se/soap");

conn.setConnectTimeout(10000);	// Set timeout to 10 seconds
conn.setReadTimeout(10000);

var response = soapConnection.call(conn, request);

print(response);

print(response.output);


// Using an URLConnection and HTTPs
var conn = new URLConnection("https://localhost:8443/se/soap");

var truststore = new KeyStore("SUN", "jks", "truststore", "openscdp");
var keystore = new KeyStore("SUN", "jks", "clientkeystore", "openscdp");

conn.setTLSKeyStores(truststore, keystore, "openscdp");

var response = soapConnection.call(conn, request);

print(response);

print(response.output);


</pre>
        <h2 id="close">close()</h2>
        <h3>Prototype</h3>
        <p class="signature">void close()</p>
        <h3>Description</h3>
                    
        <p>Close SOAP connection and free used resources.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DEVICE_ERROR</td>
                <td>Closing the SOAP connection failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

soapConnection.close();

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>ShamirSharedSecret - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>ShamirSharedSecret - Reference Documentation</h1>
        <p>
    </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">ShamirSharedSecret() constructor</a>
            </li>
            <li>
                <a href="#addShare">addShare()</a>
            </li>
            <li>
                <a href="#reconstructSecret">reconstructSecret()</a>
            </li>
            <li>
                <a href="#getPrime">getPrime()</a>
            </li>
            <li>
                <a href="#trimSecret">trimSecret()</a>
            </li>
            <li>
                <a href="#createShares">createShares()</a>
            </li>
        </ul>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">ShamirSharedSecret(ByteString prime)</p>
        <p class="signature">ShamirSharedSecret(Number bits)</p>
        <h3>Description</h3>
        Create an instance to generate or reconstruct a shared secret
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>prime</td>
                <td>The prime to be used</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>bits</td>
                <td>The number of bits for the randomly generated prime</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var prime = new ByteString("e25cb644c99928ff", HEX);
var sss = new ShamirSharedSecret(prime);

</pre>
        <h2 id="addShare">addShare()</h2>
        <h3>Prototype</h3>
        <p class="signature">addShare(Number id, ByteString share)</p>
        <h3>Description</h3>
        Add the share identified by id.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>id</td>
                <td>The id for the share</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>share</td>
                <td>The share value</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var share = [
	new ByteString("dabd6f8a03d16d54", HEX),
	new ByteString("62d50d9144316251", HEX),
	new ByteString("cd4961dd4e2a804d", HEX)
];

var sss = new ShamirSharedSecret(prime);
sss.addShare(1, share[0]);
sss.addShare(2, share[1]);

</pre>
        <h2 id="reconstructSecret">reconstructSecret()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString reconstructSecret()</p>
        <h3>Description</h3>
        Reconstruct the shared secret from previously added shares.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The recovered secret</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var s = sss.reconstructSecret();
// print(s);
var ref = new ByteString("70491B3DF9D84F58", HEX);
assert(s.equals(ref));

</pre>
        <h2 id="getPrime">getPrime()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getPrime()</p>
        <h3>Description</h3>
        Return the prime generated or set in the constructor.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The prime</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var sss = new ShamirSharedSecret(64);
var prime = sss.getPrime();
print("Prime " + prime);

</pre>
        <h2 id="trimSecret">trimSecret()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString trimSecret(ByteString secret)</p>
        <h3>Description</h3>
        Ensure that the secret is smaller than the prime using a modulo operation.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The trimmed secret</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var secret = crypto.generateRandom(9);
print("Secret (raw)  " + secret);

secret = sss.trimSecret(secret);
print("Secret (trim) " + secret);

</pre>
        <h2 id="createShares">createShares()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString[] createShares(ByteString secret, Number threshold, Number shares)</p>
        <h3>Description</h3>
        Create the shares for a given secret. The numeric value of the secret must be smaller than the prime.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>secret</td>
                <td>The secret to split. Must be smaller than the prime</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>threshold</td>
                <td>The number of shares required to reconstruct</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>shares</td>
                <td>The total number of shares.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString[]</code>
                </td>
                <td>An array containing the shares</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var sss = new ShamirSharedSecret(prime);
var shares = sss.createShares(secret, 2, 3);

for (var i = 0; i &lt; shares.length; i++) {
	print("Id " + (i + 1) + " : " + shares[i]);
}

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        #! /usr/bin/perl

# usage: 
#     stt [OPTIONS] FILE [...]
#     stt -M FILE [...]
#     stt -c TEMPLATE FILE
#
# OPTIONS:
#    -L TEMPLATEDIR
#    -M
# 
# Updates files that depend on DreamWeaver-style templates.  Examines
# each FILE given on the command-line to see if it appears to depend
# on a DreamWeaver-style template, and if so, updates that file from
# the template whose name is mentioned in the <!-- #BeginTemplate
# "template" --> block in the file.  If "-L TEMPLATEDIR" is specified,
# looks for the templates themselves in TEMPLATEDIR.  If more than one
# "-L TEMPLATEDIR" is given, looks for each template in each
# TEMPLATEDIR specified, in the order given.  If a template is not
# found in any of the TEMPLATEDIRs, or if no "-L TEMPLATEDIR"
# arguments are present, looks for the template in the current
# directory.  The original version of each file is saved with a "~"
# suffix.
#
# If the -M option is given, does not actually update any files; just
# parses each file to see what template it depends on, and outputs
# a make-style dependency list for the files.
#
#
# Mark Phillips
#
# $Log: stt,v $
# Revision 1.1.1.1  2003/03/20 20:05:17  mphillips
# initial import
#

use strict;

$| = 1;

# Hash of templates.  The keys to this hash are template files
# names.  Each hash value is the list returned by calling
# parse_stt() for that template.
my %templates = ();
my %template_paths = ();


# Parse options
my $dodeps = 0;
my $create = 0;
my ($template,$file);
my @TEMPLATEDIRS = ();
while ($ARGV[0] =~ m/^-/) {
    if ($ARGV[0] eq "-M") {
	$dodeps = 1;
	shift;
    } elsif ($ARGV[0] eq "-c") {
	shift;
	$create = 1;
	$template = shift;
	$file     = shift;
    } elsif ($ARGV[0] eq "-L") {
	shift;
	my $dir = shift;
	$dir =~ s|/$||;  # remove trailing '/', if any
	if (! -d $dir) {
	    die "Can't read directory $dir\n";
	} else {
	    push(@TEMPLATEDIRS, $dir);
	}
    }
}

if ($create) {
    if (-f $file) {
	die "File already exists: $file\n";
    }
    open(OUT, ">$file") ||
	die "Can't write file $file\n";
    open(IN, "<$template") ||
	die "Can't read template $template\n";
    print OUT qq|<!-- #BeginTemplate "$template" -->\n|;
    while (<IN>) {
        print OUT $_;
    }
    print OUT qq|<!-- #EndTemplate -->\n|;
    close(OUT);
    close(IN);
    exit;
}

if (!@ARGV) {
    die "no files to process\n";
}

my $file;
while ($file = shift) {
    if (! -f $file) {
	die "Can't read input file $file\n";
    }
    if (! -w $file) {
	die "No permission to modify file $file\n";
    }
    my ($F_text, @F_editables) = @{parse_stt($file)};
    
    my ($template_name,$pre,$post) = parse_templated_file_text($F_text);
    if (!$template_name) {
	print "warning: $file does not appear to use a template; skipping it\n"
	    unless $dodeps;
	next;
    }
    if (!$templates{$template_name}) {
	my $template_path = find_template($template_name);
	if (!$template_path) {
	    print "warning: can't locate template $template_name; skipping file $file\n"
		unless $dodeps;
	    next;
	}
	$templates{$template_name} = parse_stt($template_path);
	$template_paths{$template_name} = $template_path;
    }

    if ($dodeps) {
	print "$file: $template_paths{$template_name}\n";
	next;
    }
    print "applying template $template_paths{$template_name} to $file\n";

    my ($T_text, @T_editables) = @{$templates{$template_name}};

    my $output = $T_text;
    my ($e,$name,$text);
    my %editables_done = ();
    foreach $e (@F_editables) {
	$name  = $e->{name};
	$text = $e->{text};
	$output =~ s|%%%EDITABLE_${name}_EDITABLE%%%|$text|s;
	$editables_done{$name} = 1;
    }
    foreach $e (@T_editables) {
	$name = $e->{name};
	$text = $e->{text};
	if (!$editables_done{$name}) {
	    $output =~ s|%%%EDITABLE_${name}_EDITABLE%%%|$text|s;
	}
    }
    rename($file, "$file~");
    open(OUT, ">$file");
    print OUT $pre;
    print OUT $output;
    print OUT $post;
    close(OUT);
}

# This function parses a DreamWeaver-style input file (template
# or HTML file), processing blocks delimited by
# 
#     <!-- #BeginEditable "name" -->
# 
# and
# 
#     <!-- #EndEditable -->
# 
# Each such block is called an "editable".  The string in quotes in
# the BeginEditable line is called the name of the editable, and any
# text between the above two markers is called the text of the
# editable.  This function returns a reference to a two-element list.
# The first element in the return list is a string which consists of
# the entire text of the input file, with the text of each editable
# replaced with the special string
# 
#     %%%EDITABLE_name_EDITABLE%%%
# 
# The second element of the return list is a list of hash references,
# one for each editable in the file.  Each such hash has two keys,
# "name", and "text", whose values give the name and text of that
# editable.
sub parse_stt {
    my $sttfile = shift;
    if (! -r $sttfile) {
	die "can't read file $sttfile\n";
    }
    open(IN, "<$sttfile");
    my $rawtext = "";
    while (<IN>) { $rawtext .= $_; }
    close(IN);

    my $text = "";
    my @editables = ();

    while ( $rawtext =~ m|<!--\s*#BeginEditable\s*|sg ) {

	 # Set $i to the position at end of above match, i.e. at beginning
	 # of the quoted name of this editable region
	 my $i = pos($rawtext);

	 # Save text up to $i
	 $text .= substr($rawtext, 0, $i);

	 # Chop off the saved text from the beginning of $rawtext
	 $rawtext     = substr($rawtext, $i);

	 # Get the name of the editable
         my $editablename;
	 if ( ($editablename) = ($rawtext =~ m|^\s*"([a-zA-Z0-9_-]*)"\s*-->|s) ) {
	     # Add the quoted name to the text
	     $text .= qq|"$editablename" -->|;
	     # Remove it from $rawtext
	     $rawtext =~ s|^\s*"([a-zA-Z0-9_-]*)"\s*-->||s;
	 } else {
	     die "Can't find name of Editable region (near char $i in file $sttfile)\n";
	 }
	 # Add the subst string for this editable to the text
	 $text .= "%%%EDITABLE_${editablename}_EDITABLE%%%";

	 # Now read the text of the editable itself, and the closing #EndEditable stuff
	 if ( $rawtext =~ m|<!--\s*#EndEditable\s*-->|sg ) {
	      $i = pos($rawtext);
	      my $editabletext = substr($rawtext, 0, $i);
	      $editabletext =~ s|<!--\s*#EndEditable\s*-->||s;
	      $text .= qq|<!-- #EndEditable -->|;
	      $rawtext = substr($rawtext, $i);
	      # Add this editable to the list
	      my %editable = ();
	      $editable{'name'} = $editablename;
	      $editable{'text'} = $editabletext;
	      push(@editables, \%editable);
	  } else {
	      die "Can't find end of editable region '$editablename'\n";
	  }

     }
    # Append any remaining text
    $text .= $rawtext;

    # Return the template and the list of editables
    return [$text, @editables];
}

sub get_template_name_from_text
{
    my $text = shift;
    my $template_name;
    if ( ($template_name) = ($text =~ m|<\!--\s*#BeginTemplate\s*"([^\"]+)"\s*-->|s) ) {
	$template_name =~ s/^\s+//;
	$template_name =~ s/\s+$//;
        return $template_name;
    }
    return undef;
}

sub parse_templated_file_text
{
    my $text = shift;
    my $template_name;
    my ($pre,$post);
    if ( ($template_name) = ($text =~ m|<\!--\s*#BeginTemplate\s*"([^\"]+)"\s*-->|sg) ) {
	$template_name =~ s/^\s+//;
	$template_name =~ s/\s+$//;
        $pre = $text;
        $pre =~ s|(<\!--\s*#BeginTemplate\s*"[^\"]+"\s*-->\s*\n?).*$|$1|s;
        $post = $text;
        $post =~ s|^.*(<\!--\s*#EndTemplate\s*-->)|$1|s;
        return ($template_name,$pre,$post);
    }
    return (undef,undef,undef);
}

sub find_template
{
    my $file = shift;
    my $dir;
    foreach $dir (@TEMPLATEDIRS) {
	if (-r "$dir/$file") { return "$dir/$file"; }
    }
    if (-r $file) { return $file; }
    return undef;
}
body {
	background-color: #f8f8f8;
}

#wrapper {
	background-color: white;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10pt;
/*	width: 60em; */
	width: 750px;
	min-width: 750px;
	padding: 1em;
	margin-left: auto;
	margin-right: auto;
}

#navigator { 
	float: left;
	margin-top: 2em;
	width: 10em; 
	padding: 0;
}


#navigator ul {
	margin: 0;
	padding: 0;
	padding-right: 0.5em;
	list-style: none;
}


#navigator li {
	margin: 0;
	padding: 0;
}

#navigator li ul {
	padding-bottom: 1em;
}

#navigator li li {
	line-height: 35px;
	border-bottom: 1px dashed #C5DB76;
	padding-left: 10px;
/*	background-color: #e8e8e8; */
	background-color: #fafafa;
}

#navigator a {
	color: black;
	text-decoration: none;
	border: none;
}

#navigator a:hover {
	text-decoration: underline;
	color: #787878;
}


#pagelist { 
	float: left;
	margin-top: 2em;
	width: 10em; 
}

#pagelist h1 {
	font-size: 10pt;
}

#pagelist ul {
	padding: 0;
	list-style: none;
}

#pagelist li ul {
	padding-bottom: 1em;
}

#main {
	margin-left: 10em;
	margin-top: 2em;
	width: 46em;
	min-height: 50em;
}

p,a,td {
	font-size: 10pt;
}

h1 {
	font-size: 16pt;
}

h2 {
	width: 100%;
	font-size: 13pt;
	margin-top: 1cm;
	background-color: #e8e8e8;
	color: #404040;
}

h3 {
	font-size: 11pt;
}

pre {
	font-size: 9pt;
	background: #f8f8f8;
	border: 1px solid #d8d8d8;
	overflow: auto;
}

pre.sourcecode {
	font-size: 9pt;
	background: #f8f8f8;
	border: 1px solid #d8d8d8;
	overflow: auto;
	counter-reset: LineNumberCounter;
}

pre.sourcecode:hover code:before {
	content: "   ";
}

pre.sourcecode code:before {
	content: counter(LineNumberCounter, decimal-leading-zero ) " ";
	counter-increment: LineNumberCounter;
}

p.signature {
	width: 100%;
	font-family: "Courier New", monospaced;
	font-size: 9pt;
	background: #f8f8f8;
	border: 1px solid #d8d8d8;
}

p.copyright {
	font-size: 8pt;
}

table.content {
	width: 100%;
	table-layout: fixed;
	border: 1px solid #d8d8d8;
	border-collapse: collapse;
	border-spacing: 0px;
}

table.content td {
	border: 1px solid #d8d8d8;
}


table.content th {
	border: 1px solid #d8d8d8;
	text-align: left;
}

img { 
	border-style: none;
	display: block;
	margin-left: auto;
	margin-right: auto;
}
PNG

   
IHDR         ȴM   PLTE   $$$777III[[[mmm3  M  f              ::WWuu3 J `  w( / 7 > F M U l"Dfƪ3" J1 `@ wO ^ n } Ҍ   "Df׈33 GG \\ pp        )Rz"3 1J @` Ow ^ n }    "Df3 M "f + 3 < D M U h|:Wu 3  P  m           33MMff 3 M f" + 3 < D M Uh:|Wu 3" J1 `@ wO ^ n } Ҍ  "Df̈ת 33 MM ff      :Wu 3 (P 7m E T b q 3Mf  3  U  w        --DD[[qq 3& M3 f@ M Y f s  :WuȒׯ3 3M Mf f      :Wu3 M &f 3 @ M Y f s :Wu"'F   bKGD H   	pHYs    od   IDATxU tVAfɶK
_za=>F~]RϹ$~Sfj6إ:%r5lZxnPhP@wJ6H&
Epڄ	j%uj׫͵e:D;|oUS7N*E3)(LP
dcxbFܿ)gȡw    IENDB`<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>Task - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>Task - Reference Documentation</h1>
        <p>
                    
            <p>The Task host class allows to define and control background tasks in the Smart Card Shell.</p>
                    
            <p>A background task consists of a user object that implements a run() method and an actionListener()
       method to receive user notification. A Task object provides for visualization in the task tab of the
           Smart Card Shell and controls to start and stop the task. It also implements a message queue
           for asynchronously passing messages from other tasks or scripts.</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">Task() constructor</a>
            </li>
            <li>
                <a href="#start">start()</a>
            </li>
            <li>
                <a href="#stop">stop()</a>
            </li>
            <li>
                <a href="#post">post()</a>
            </li>
            <li>
                <a href="#poll">poll()</a>
            </li>
            <li>
                <a href="#setContextMenu">setContextMenu()</a>
            </li>
            <li>
                <a href="#setToolTip">setToolTip()</a>
            </li>
            <li>
                <a href="#setIcon">setIcon()</a>
            </li>
            <li>
                <a href="#setMessage">setMessage()</a>
            </li>
            <li>
                <a href="#getTaskList">getTaskList()</a>
            </li>
            <li>
                <a href="#dispose">dispose()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>String</td>
                <td>icon</td>
                <td>Name of icon selected with setIcon()</td>
            </tr>
            <tr>
                <td>String</td>
                <td>tooltip</td>
                <td>Tooltip set with setToolTip()</td>
            </tr>
            <tr>
                <td>String[]</td>
                <td>contextMenu</td>
                <td>Context menu set with setContextMenu()</td>
            </tr>
            <tr>
                <td>Object</td>
                <td>userObject</td>
                <td>Object registered as user object in constructor</td>
            </tr>
            <tr>
                <td>String</td>
                <td>status</td>
                <td>Task status, one of created, running, failed, passed</td>
            </tr>
            <tr>
                <td>Boolean</td>
                <td>disposeAtExit</td>
                <td>Property that can be set to dispose the task when it finishes.</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">Task(Object userObject)</p>
        <h3>Description</h3>
                    
        <p>Create a Task object with associated user object. Add task entry in tasks tab.</p>
                    
        <p>A newly created task object can be started using the start() method. It can be stopped with stop() method.</p>
                    
        <p>A call to dispose() will stop the task, clear the queue and remove the task entry from the task list.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>userObject</td>
                <td>The user object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments given</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>On or more arguments are not of the expected type</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

function TaskTest() {
	this.name = "Task#" + TaskTest.CNT++;
	this.task = new Task(this);
	this.task.setContextMenu([ "Start", "Stop", "Trace", "Post", "Dispose" ]);
	this.task.setToolTip("Tooltip");
}

TaskTest.CNT = 1;


TaskTest.prototype.start = function() {
	this.task.start();
}



TaskTest.prototype.run = function() {
	var i = 10;
	do	{
		print("Hello");
		GPSystem.trace("Trace");
		this.task.setMessage("Running " + i);
		var o = this.task.poll(1000);

		if (o) {
			print("Received " + o);
		}
	} while (i-- &gt; 0);
}


TaskTest.prototype.actionListener = function(source, action) {
	print("Source / Action: " + source + "/" + action);

	switch(action) {
		case "Start":
			this.task.start();
			break;
		case "Stop":
			this.task.stop();
			break;
		case "Trace":
			print(GPSystem.copyTrace());
			break;
		case "Post":
			this.task.post("Message");
			break;
		case "Dispose":
			this.task.dispose();
			break;
	}
}



TaskTest.prototype.toString = function() {
	return this.name;
}


for (var i = 0; i &lt; 20; i++) {
	new TaskTest();
}

</pre>
        <h2 id="start">start()</h2>
        <h3>Prototype</h3>
        <p class="signature">start()</p>
        <h3>Description</h3>
                    
        <p>Start the task by creating a dynamic scope and calling the run() method of the user object.</p>
                    
        <p>Start can be called multiple time, creating subsequent synchronous executions of run().</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

task.start();

</pre>
        <h2 id="stop">stop()</h2>
        <h3>Prototype</h3>
        <p class="signature">stop()</p>
        <h3>Description</h3>
                    
        <p>Stop the task by sending an interupt signal to the running task and clear the queue.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

task.stop();

</pre>
        <h2 id="post">post()</h2>
        <h3>Prototype</h3>
        <p class="signature">post(Object object)</p>
        <h3>Description</h3>
                    
        <p>Post an object to the queue maintained for this task.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>object</td>
                <td>Object to be added to queue.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

task.post("Message");

</pre>
        <h2 id="poll">poll()</h2>
        <h3>Prototype</h3>
        <p class="signature">Object poll(Number timeout)</p>
        <h3>Description</h3>
                    
        <p>Poll for an object from the queue maintained for this task.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>timeout</td>
                <td>Number of milliseconds to wait for object.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Object</code>
                </td>
                <td>The object retrieved from the queue or null, if no object available within specified time.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var o = task.poll(1);
print(o);

</pre>
        <h2 id="setContextMenu">setContextMenu()</h2>
        <h3>Prototype</h3>
        <p class="signature">setContextMenu(String[] entries)</p>
        <h3>Description</h3>
                    
        <p>Set content of context menu.</p>
                    
        <p>Selected actions trigger an actionLister() method call on the user object.</p>
                    
        <p>A separator can be defined using "---" as entry.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>entries</td>
                <td>Array of context menu entries</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

task.setContextMenu(["add"]);

</pre>
        <h2 id="setToolTip">setToolTip()</h2>
        <h3>Prototype</h3>
        <p class="signature">setToolTip(String toolTipText)</p>
        <p class="signature">setToolTip()</p>
        <h3>Description</h3>
                    
        <p>Set a text to display as tool tip, which is displayed when the mouse is held over the node.</p>
                    
        <p>If no text is defined, the tool tip is removed.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>toolTipText</td>
                <td>Text to display</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

task.setToolTip("Press the right mouse button to see context menu");

</pre>
        <h2 id="setIcon">setIcon()</h2>
        <h3>Prototype</h3>
        <p class="signature">setIcon(String iconName)</p>
        <p class="signature">setIcon()</p>
        <h3>Description</h3>
                    
        <p>Change the icon of the node to the named icon or reset to the default.</p>
                    
        <p>The name of the icon is mapped to the file name &lt;iconName&gt;.png and
               located in the icons directory directly underneath the installation directory.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>iconName</td>
                <td>Name of icon</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

task.setIcon("selected");

</pre>
        <h2 id="setMessage">setMessage()</h2>
        <h3>Prototype</h3>
        <p class="signature">setMessage(String message)</p>
        <h3>Description</h3>
                    
        <p>Change the message of the node to the given string.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>message</td>
                <td>Message for node</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for method invocation</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

task.setMessage("Changed label");

</pre>
        <h2 id="getTaskList">getTaskList()</h2>
        <h3>Prototype</h3>
        <p class="signature">Task[] Task.getTaskList()</p>
        <h3>Description</h3>
                    
        <p>Return the list of currently defined tasks</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Task[]</code>
                </td>
                <td>The list of tasks.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

</pre>
        <h2 id="dispose">dispose()</h2>
        <h3>Prototype</h3>
        <p class="signature">dispose()</p>
        <h3>Description</h3>
                    
        <p>Stop task, clear queue and remove from task list.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Void</code>
                </td>
                <td>The method does not return a value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

GPSystem.wait(1000);
task.dispose();

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
<h1>Text goes here</h1>
<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>TLV - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>TLV - Reference Documentation</h1>
        <p>Implementation of an immutable TLV object with different encoding formats.</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">TLV() constructor</a>
            </li>
            <li>
                <a href="#getL">getL()</a>
            </li>
            <li>
                <a href="#getLV">getLV()</a>
            </li>
            <li>
                <a href="#getTag">getTag()</a>
            </li>
            <li>
                <a href="#getTLV">getTLV()</a>
            </li>
            <li>
                <a href="#getTV">getTV()</a>
            </li>
            <li>
                <a href="#getValue">getValue()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>EMV</td>
                <td>EMV encoding format, which follows ASN.1 / DER encoding rule</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>DGI</td>
                <td>DGI encoding format using a 2 byte tag and a one or three byte length field</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>L16</td>
                <td>L16 encoding format using a 2 byte tag and a two byte length field</td>
            </tr>
        </table>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>encodingMode</td>
                <td>Encoding mode used for TLV object. One of TLV.EMV, TLV.DGI or TLV.L16</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>size</td>
                <td>Combined length of tag, length and value field</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">TLV(Number tag, ByteString value, Number encoding)</p>
        <h3>Description</h3>
                    
        <p>Create a TLV object initialized with the arguments given.</p>
                    
        <p>TLV objects are composed of a tag, a length and a value field.
               The binary encoding format for the tag and length can be defined
               with the encoding parameter.</p>
                    
        <p>For EMV encoding the tag field has a variable length of up to 4 bytes. 
               The length field has a variable length of up to 4 byte. Both fields are
               encoded as specified as per ASN.1 Basic Encoding Rule (ISO 8825).</p>
                    
        <p>For DGI encoding the tag field has a fixed length of two bytes.
               The length field contains one byte for values between 0 and 254. The length
               is encoded in three bytes for values between 255 and 65535, with the first byte
               set to 'FF'.</p>
                    
        <p>For L16 encoding the tag field has a fixed length of two bytes.
               The length field is always two byte long and is encoded in big endian / 
               little endian format.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>tag</td>
                <td>Tag value</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>Value field of TLV object</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>encoding</td>
                <td>Encoding for tag and length field. Must be one of TLV.EMV, TLV.DGI or TLV.L16.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ENCODING</td>
                <td>The argument encoding is invalid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TAG</td>
                <td>The tag value is invalid for the selected encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data supplied for the value fields exceeds the maximum length</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.EMV);
assert(t.encodingMode == TLV.EMV);
assert(t.size == 5);

t = new TLV(0x0601, new ByteString("2A1234", HEX), TLV.EMV);
assert(t.encodingMode == TLV.EMV);
assert(t.size == 6);

try {
	// Invalid tag for EMV	
	t = new TLV(0x6FFFFF, new ByteString("2A1234", HEX), TLV.EMV);
} catch (e) {
	assert(e instanceof GPError);
}

t = new TLV(0x1201, new ByteString("561000", ASCII), TLV.DGI);
assert(t.encodingMode == TLV.DGI);
assert(t.size == 9);

t = new TLV(0x12, new ByteString("561000", ASCII), TLV.DGI);
assert(t.encodingMode == TLV.DGI);
assert(t.size == 9);

t = new TLV(0x3221, new ByteString("123456", HEX), TLV.L16);
assert(t.encodingMode == TLV.L16);
assert(t.size == 7);

t = new TLV(0x32, new ByteString("123456", HEX), TLV.L16);
assert(t.encodingMode == TLV.L16);
assert(t.size == 7);

</pre>
        <h2 id="getL">getL()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getL()</p>
        <h3>Description</h3>
        Return the value of the length field of the TLV object.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The length field of the object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.EMV);
assert(t.getL().toString(HEX) == "03");

// 130 bytes
t = new TLV(0x06, new ByteString(
    "00010203040506070809000102030405060708090001020304050607080900010203040" + 
    "50607080900010203040506070809000102030405060708090001020304050607080900" +
    "01020304050607080900010203040506070809000102030405060708090001020304050" +
    "60708090001020304050607080900010203040506070809", HEX), TLV.EMV);
assert(t.getL().toString(HEX) == "8182");

// 260 bytes
t = new TLV(0x06, new ByteString(
    "00010203040506070809000102030405060708090001020304050607080900010203040" +
    "50607080900010203040506070809000102030405060708090001020304050607080900" +
    "01020304050607080900010203040506070809000102030405060708090001020304050" +
    "60708090001020304050607080900010203040506070809000102030405060708090001" +
    "02030405060708090001020304050607080900010203040506070809000102030405060" +
    "70809000102030405060708090001020304050607080900010203040506070809000102" +
    "03040506070809000102030405060708090001020304050607080900010203040506070" +
    "80900010203040506070809", HEX), TLV.EMV);
assert(t.getL().toString(HEX) == "820104");

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.L16);
assert(t.getL().toString(HEX) == "0003");

t = new TLV(0x06, new ByteString(
    "00010203040506070809000102030405060708090001020304050607080900010203040" +
    "50607080900010203040506070809000102030405060708090001020304050607080900" +
    "01020304050607080900010203040506070809000102030405060708090001020304050" +
    "60708090001020304050607080900010203040506070809000102030405060708090001" +
    "02030405060708090001020304050607080900010203040506070809000102030405060" +
    "70809000102030405060708090001020304050607080900010203040506070809000102" +
    "03040506070809000102030405060708090001020304050607080900010203040506070" +
    "80900010203040506070809", HEX), TLV.L16);
assert(t.getL().toString(HEX) == "0104");

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.DGI);
assert(t.getL().toString(HEX) == "03");

t = new TLV(0x06, new ByteString(
    "00010203040506070809000102030405060708090001020304050607080900010203040" +
    "50607080900010203040506070809000102030405060708090001020304050607080900" +
    "01020304050607080900010203040506070809000102030405060708090001020304050" +
    "60708090001020304050607080900010203040506070809000102030405060708090001" +
    "02030405060708090001020304050607080900010203040506070809000102030405060" +
    "70809000102030405060708090001020304050607080900010203040506070809000102" +
    "03040506070809000102030405060708090001020304050607080900010203040506070" +
    "80900010203040506070809", HEX), TLV.DGI);
assert(t.getL().toString(HEX) == "FF0104");

</pre>
        <h2 id="getLV">getLV()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getLV()</p>
        <h3>Description</h3>
        Return the combined length and value field of the object
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The combined length and value field</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.EMV);
assert(t.getLV().toString(HEX) == "032A1234");

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.L16);
assert(t.getLV().toString(HEX) == "00032A1234");

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.DGI);
assert(t.getLV().toString(HEX) == "032A1234");

</pre>
        <h2 id="getTag">getTag()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number getTag()</p>
        <h3>Description</h3>
        Return the value of the tag field as numeric value-
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Numeric value of the tag field</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.EMV);
assert(typeof(t.getTag()) == "number");
assert(t.getTag() == 0x06);

t = new TLV(0x9F03, new ByteString("2A1234", HEX), TLV.EMV);
assert(typeof(t.getTag()) == "number");
assert(t.getTag() == 0x9F03);

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.L16);
assert(t.getTag() == 0x06);

t = new TLV(0x061F, new ByteString("2A1234", HEX), TLV.DGI);
assert(t.getTag() == 0x061F);

</pre>
        <h2 id="getTLV">getTLV()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getTLV()</p>
        <h3>Description</h3>
        Return the concatenation of tag, length and value as a sequence of byte using the encoding mode
                     specified in the constructor
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The concatenation of tag, length and value</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.EMV);
assert(t.getTLV().toString(HEX) == "06032A1234");

t = new TLV(0x1201, new ByteString("561000", ASCII), TLV.DGI);
assert(t.getTLV().toString(HEX) == "120106353631303030");

t = new TLV(0x3221, new ByteString("123456", HEX), TLV.L16);
assert(t.getTLV().toString(HEX) == "32210003123456");

</pre>
        <h2 id="getTV">getTV()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getTV()</p>
        <h3>Description</h3>
        Return the field tag and value of the TLV in the specified encoding format.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Concatenated tag and length field</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.EMV);
assert(t.getTV().toString(HEX) == "062A1234");

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.L16);
assert(t.getTV().toString(HEX) == "00062A1234");

t = new TLV(0x061F, new ByteString("2A1234", HEX), TLV.DGI);
assert(t.getTV().toString(HEX) == "061F2A1234");

</pre>
        <h2 id="getValue">getValue()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getValue()</p>
        <h3>Description</h3>
        Return the value field of the TLV object
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The value field of the TLV object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.EMV);
assert(t.getValue().toString(HEX) == "2A1234");

t = new TLV(0x06, new ByteString("2A1234", HEX), TLV.L16);
assert(t.getValue().toString(HEX) == "2A1234");

t = new TLV(0x061F, new ByteString("2A1234", HEX), TLV.DGI);
assert(t.getValue().toString(HEX) == "2A1234");

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>TLVList - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>TLVList - Reference Documentation</h1>
        <p>Implementation of a mutable TLV object list.</p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">TLVList() constructor</a>
            </li>
            <li>
                <a href="#index">index()</a>
            </li>
            <li>
                <a href="#append">append()</a>
            </li>
            <li>
                <a href="#appendValue">appendValue()</a>
            </li>
            <li>
                <a href="#appendValueIndex">appendValueIndex()</a>
            </li>
            <li>
                <a href="#deleteByIndex">deleteByIndex()</a>
            </li>
            <li>
                <a href="#deleteByTag">deleteByTag()</a>
            </li>
            <li>
                <a href="#findIndex">findIndex()</a>
            </li>
            <li>
                <a href="#find">find()</a>
            </li>
            <li>
                <a href="#updateValue">updateValue()</a>
            </li>
            <li>
                <a href="#updateValueIndex">updateValueIndex()</a>
            </li>
            <li>
                <a href="#toByteString">toByteString()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>encodingMode</td>
                <td>Encoding mode used for TLV object. One of TLV.EMV, TLV.DGI or TLV.L16</td>
            </tr>
            <tr>
                <td>Number</td>
                <td>length</td>
                <td>The number of TLV objects in the list</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">TLVList(ByteString tlvStream, Number encoding)</p>
        <h3>Description</h3>
                    
        <p>Create a TLV list object initialized with the tlv objects encoded within the given ByteString object.</p>
                    
        <p>For EMV encoding the tag field has a variable length of up to 4 bytes. 
               The length field has a variable length of up to 4 byte. Both fields are
               encoded as specified as per ASN.1 Basic Encoding Rule (ISO 8825).</p>
                    
        <p>For DGI encoding the tag field has a fixed length of two bytes.
               The length field contains one byte for values between 0 and 254. The length
               is encoded in three bytes for values between 255 and 65535, with the first byte
               set to 'FF'.</p>
                    
        <p>For L16 encoding the tag field has a fixed length of two bytes.
               The length field is always two byte long and is encoded in big endian / 
               little endian format.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>tlvStream</td>
                <td>ByteString containing the encoded tlv objects</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>encoding</td>
                <td>Encoding for tag and length field of the tlv objects in the ByteString. Must be one of TLV.EMV, TLV.DGI or TLV.L16.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ENCODING</td>
                <td>The argument encoding is invalid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TAG</td>
                <td>The tag value is invalid for the selected encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data supplied for the value fields exceeds the maximum length</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


// EMV
data = new ByteString("61050102030405620100630A00010203040506070809", HEX);

// Create a TLV list
list = new TLVList(data, TLV.EMV);
assert(list.length == 3);

// Create a TLV list with "illegal" ASN.1 DER encoding
list = new TLVList(new ByteString("9f030100", HEX), TLV.EMV);
assert(list.length == 1);

// DGI
data = new ByteString("7F1F05010203040500630A00010203040506070809", HEX);

list = new TLVList(data, TLV.DGI);
assert(list.length == 2);

// L16
data = new ByteString("7F1F000501020304050063000A00010203040506070809", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 2);

</pre>
        <h2 id="index">index()</h2>
        <h3>Prototype</h3>
        <p class="signature">TLV index(Number index)</p>
        <h3>Description</h3>
        Returns a TLV object which represents the TLV stored within the TLVList at the given index. The index is zero based.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Index of the TLV object</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>TLV</code>
                </td>
                <td>TLV object at the specified index</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index is not valid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>


// EMV
data = new ByteString("610501020304056201008E0A00010203040506070809", HEX);

// Create a TLV list
list = new TLVList(data, TLV.EMV);
assert(list.length == 3);

tag_61 = list.index(0);
assert(tag_61 != null);
assert(tag_61.getTag() == 0x61);

tag_62 = list.index(1);
assert(tag_62 != null);
assert(tag_62.getTag() == 0x62);

tag_8e = list.index(2);
assert(tag_8e != null);
assert(tag_8e.getTag() == 0x8E);

// Invalid index
try {
	tag = list.index(10);
} catch (e) {
	assert(e instanceof GPError);
}

// Check various EMV length encodings

data = new ByteString("6181050102030405", HEX);
list = new TLVList(data, TLV.EMV);
tlv = list.index(0);
assert(tlv.getTag() == 0x61);
assert(tlv.getValue().length == 5);
assert(tlv.getValue().toString(HEX) == "0102030405");

data = new ByteString("618200050102030405", HEX);
list = new TLVList(data, TLV.EMV);
tlv = list.index(0);
assert(tlv.getTag() == 0x61);
assert(tlv.getValue().length == 5);
assert(tlv.getValue().toString(HEX) == "0102030405");

</pre>
        <h2 id="append">append()</h2>
        <h3>Prototype</h3>
        <p class="signature">append(ByteString tlvStream)</p>
        <p class="signature">append(Number tag, ByteString value)</p>
        <p class="signature">append(TLV tlv)</p>
        <h3>Description</h3>
        Appends the specified TLV data to the end of the existing list of TLV objects.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>tlvStream</td>
                <td>TLV as a single stream of bytes in a ByteString.</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>tag</td>
                <td>Tag to be used to be added to the list.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>Value to be used to be added to the List. </td>
            </tr>
            <tr>
                <td>
                    <code>TLV</code>
                </td>
                <td>tlv</td>
                <td>TLV as a TLV object.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index is not valid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TAG</td>
                <td>The tag value is invalid for the selected encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data supplied for the value fields exceeds the maximum length</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.TAG_ALREADY_EXISTS</td>
                <td>The tag of the specified TLV object already exists within the TLV list</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// L16 encoded data
data = new ByteString("7F1F00050102030405", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 1);

// append(Number, Value)
list.append(0x63, new ByteString("00010203040506070809", HEX));
assert(list.length == 2);

// append(ByteString) 
list.append(new ByteString("0061000A00010203040506070809", HEX));
assert(list.length == 3);

// append(TLV)
t = new TLV(0x3221, new ByteString("123456", HEX), TLV.L16);
list.append(t);
assert(list.length == 4);

// try to append an invalid type
try {
 	list.append("HALLO");
} catch (e) {
	assert(e instanceof GPError);
}

// try to append a tag with an already existing tag number
try {
	t = new TLV(0x3221, new ByteString("123456", HEX), TLV.L16);
	list.append(t);
} catch (e) {
	assert(e instanceof GPError);
}

</pre>
        <h2 id="appendValue">appendValue()</h2>
        <h3>Prototype</h3>
        <p class="signature">appendValue(Number tag, ByteString value)</p>
        <h3>Description</h3>
        Appends the data to the existing data for the specified tag.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>tag</td>
                <td>Tag to be used to be added to the list.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>Value to be used to be added to the List. </td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TAG</td>
                <td>The tag value is invalid for the selected encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data supplied for the value fields exceeds the maximum length</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// L16 encoded data
data = new ByteString("7F1F00050102030405", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 1);

// appendValue(Number, Value)
list.appendValue(0x7F1F, new ByteString("06070809", HEX));

tlv = list.index(0);
assert(tlv.getValue().toString(HEX) == "010203040506070809");

</pre>
        <h2 id="appendValueIndex">appendValueIndex()</h2>
        <h3>Prototype</h3>
        <p class="signature">appendValueIndex(Number index, ByteString value)</p>
        <h3>Description</h3>
        Appends the data to the existing data for the specified zero-based index into the TLVStream.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Tag to be used to be added to the list.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>Value to be used to be added to the List. </td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TAG</td>
                <td>The tag value is invalid for the selected encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index is not valid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data supplied for the value fields exceeds the maximum length</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// L16 encoded data
data = new ByteString("7F1F00050102030405", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 1);

// appendValueIndex(Number, Value)
list.appendValueIndex(0, new ByteString("06070809", HEX));

tlv = list.index(0);
assert(tlv.getValue().toString(HEX) == "010203040506070809");

</pre>
        <h2 id="deleteByIndex">deleteByIndex()</h2>
        <h3>Prototype</h3>
        <p class="signature">deleteByIndex(Number index)</p>
        <h3>Description</h3>
        Delete the specified TLV from the list using a zero based index.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Zero based index number that represents the Tag that will be deleted from the list.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index is not valid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// L16 encoded data
data = new ByteString("7F1F000501020304050061000A00010203040506070809", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 2);

// deleteByIndex(Number)
list.deleteByIndex(0);
assert(list.length == 1);

tlv = list.index(0);
assert(tlv.getTLV().toString(HEX) == "0061000A00010203040506070809");

</pre>
        <h2 id="deleteByTag">deleteByTag()</h2>
        <h3>Prototype</h3>
        <p class="signature">deleteByTag(Number tag)</p>
        <h3>Description</h3>
        Delete the specified TLV from the list by tag value.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>tag</td>
                <td>Number of Tag that will be deleted from the list.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index is not valid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.TAG_NOT_FOUND</td>
                <td>The specified tag could not be found</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// L16 encoded data
data = new ByteString("7F1F000501020304050061000A00010203040506070809", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 2);

// deleteByTag(Number)
list.deleteByTag(0x7F1F);
assert(list.length == 1);

tlv = list.index(0);
assert(tlv.getTLV().toString(HEX) == "0061000A00010203040506070809");

</pre>
        <h2 id="findIndex">findIndex()</h2>
        <h3>Prototype</h3>
        <p class="signature">Number findIndex(Number tag)</p>
        <h3>Description</h3>
        Searches the list for a specified tag, and returns a zero based index for that TLV.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>tag</td>
                <td>The Tag that will be searched for within the list.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>Index that indicates the location of the TLV within TLV list or -1 if not found.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TAG</td>
                <td>The tag value is invalid for the selected encoding format</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// L16 encoded data
data = new ByteString("7F1F000501020304050061000A00010203040506070809", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 2);

index_tag_61 = list.findIndex(0x61);
assert(typeof(index_tag_61) == "number");
assert(index_tag_61 == 1);

index_tag_63 = list.findIndex(0x63);
assert(index_tag_63 == -1);

</pre>
        <h2 id="find">find()</h2>
        <h3>Prototype</h3>
        <p class="signature">TLV find(Number tag)</p>
        <h3>Description</h3>
        Searches the list for a specified tag, and returns a TLV object.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>tag</td>
                <td>The Tag that will be searched for within the list.</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>TLV</code>
                </td>
                <td>A TLV object which contains the data stored for that Tag or null if the Tag was not found.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TAG</td>
                <td>The tag value is invalid for the selected encoding format</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// L16 encoded data
data = new ByteString("7F1F000501020304050061000A00010203040506070809", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 2);

tag_61 = list.find(0x61);
assert(tag_61 != null);

tag_63 = list.find(0x63);
assert(tag_63 == null);

</pre>
        <h2 id="updateValue">updateValue()</h2>
        <h3>Prototype</h3>
        <p class="signature">updateValue(Number tag, ByteString value)</p>
        <h3>Description</h3>
        Updates the data for the specified tag.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>tag</td>
                <td>Tag to be used to be added to the list.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>Data to replace existing value of TLV specified by tag with. </td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TAG</td>
                <td>The tag value is invalid for the selected encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data supplied for the value fields exceeds the maximum length</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// L16 encoded data
data = new ByteString("7F1F00050102030405", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 1);

// appendValue(Number, Value)
list.updateValue(0x7F1F, new ByteString("06070809", HEX));

tlv = list.index(0);
assert(tlv.getValue().toString(HEX) == "06070809");

</pre>
        <h2 id="updateValueIndex">updateValueIndex()</h2>
        <h3>Prototype</h3>
        <p class="signature">updateValueIndex(Number index, ByteString value)</p>
        <h3>Description</h3>
        Updates the data for the specified zero-based index into the TLVStream.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>index</td>
                <td>Tag to be used to be added to the list.</td>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>value</td>
                <td>Value to be used to be added to the List. </td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TAG</td>
                <td>The tag value is invalid for the selected encoding format</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_INDEX</td>
                <td>The specified index is not valid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.DATA_TOO_LARGE</td>
                <td>The data supplied for the value fields exceeds the maximum length</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// L16 encoded data
data = new ByteString("7F1F00050102030405", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 1);

// appendValueIndex(Number, Value)
list.updateValueIndex(0, new ByteString("06070809", HEX));

tlv = list.index(0);
assert(tlv.getValue().toString(HEX) == "06070809");

</pre>
        <h2 id="toByteString">toByteString()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString toByteString()</p>
        <h3>Description</h3>
        Returns the contents of the entire list, including T, L and V values in a TLV format as a ByteString object.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The concatenated T, L and V values in a TLV format.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// L16 encoded data
data = new ByteString("7F1F000501020304050061000A00010203040506070809", HEX);

list = new TLVList(data, TLV.L16);
assert(list.length == 2);

t = list.toByteString();
assert(t != null);

assert(t.toString() == data.toString());

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="xml" indent="yes"/>

    
    <xsl:template match="/class">
        <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;!-- #BeginTemplate "template.dwt" --&gt;
        </xsl:text>
        <html>
            <head>
            <style type="text/css">
            </style>
                <xsl:text disable-output-escaping="yes">
&lt;!-- #BeginEditable "TITLE" --&gt;
                </xsl:text>
                <title><xsl:value-of select="@name"/> - Reference Documentation</title>
                <xsl:text disable-output-escaping="yes">
&lt;!-- #EndEditable --&gt;
                </xsl:text>
            </head>
            <body>
                <xsl:text disable-output-escaping="yes">
&lt;!-- #BeginEditable "BODY" --&gt;
                </xsl:text>
                <h1><xsl:value-of select="@name"/> - Reference Documentation</h1>

                <p><xsl:apply-templates select="description"/></p>

                <h2>Index of Methods</h2>
                <ul>
                    <li><a href="#Constructor"><xsl:value-of select="@name"/>() constructor</a></li>
                    <xsl:apply-templates select="method" mode="index"/>
                </ul>
                
                <xsl:if test="constant">
                    <h2>Constants</h2>
                    <table class="content">
                        <colgroup>
                            <col width="100" />
                            <col width="200"/>
                            <col/>
                        </colgroup>
                        <tr><th>Type</th><th>Name</th><th>Description</th></tr>
                        <xsl:for-each select="constant">
                            <tr><td><xsl:value-of select="@type"/></td><td><xsl:value-of select="@name"/></td><td><xsl:value-of select="."/></td></tr>
                        </xsl:for-each>
                    </table>
                </xsl:if>
                
                <xsl:if test="field">
                    <h2>Properties</h2>
                    <table class="content">
                        <colgroup>
                            <col width="100"/>
                            <col width="120"/>
                            <col/>
                        </colgroup>
                        <tr><th>Type</th><th>Name</th><th>Description</th></tr>
                        <xsl:for-each select="field">
                            <tr><td><xsl:value-of select="@type"/></td><td><xsl:value-of select="@name"/></td><td><xsl:value-of select="."/></td></tr>
                        </xsl:for-each>
                    </table>
                </xsl:if>
                
                <xsl:if test="constructor">
                    <h2 id="Constructor">Constructor</h2>
                    <xsl:apply-templates select="constructor"/>
                </xsl:if>
                
                <xsl:apply-templates select="method" mode="full"/>

                <xsl:text disable-output-escaping="yes">
&lt;!-- #EndEditable --&gt;
                </xsl:text>
                
            </body>
        </html>
        <xsl:text disable-output-escaping="yes">
&lt;!-- #EndTemplate --&gt;
        </xsl:text>
    </xsl:template>
    
    
    <xsl:template match="constructor">

        <h3>Prototype</h3>
        <xsl:apply-templates select="signature"/>

        <h3>Description</h3>
        <xsl:apply-templates select="description"/>

        <xsl:if test="argument">
            <xsl:call-template name="arguments"/>
        </xsl:if>
            
        <xsl:call-template name="exceptions"/>

        <h3>Example</h3>
        <pre><xsl:value-of select="example"/></pre>
    </xsl:template>

    
    <xsl:template match="method" mode="index">
        <li><a><xsl:attribute name="href">#<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/>()</a></li>
    </xsl:template>
    
        
    <xsl:template match="method" mode="full">

        <h2><xsl:attribute name="id"><xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/>()</h2>

        <h3>Prototype</h3>
        <xsl:apply-templates select="signature"/>

        <h3>Description</h3>
        <xsl:apply-templates select="description"/>

        <xsl:if test="argument">
            <xsl:call-template name="arguments"/>
        </xsl:if>
        
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr><td><code><xsl:value-of select="return/@type"/></code></td><td><xsl:value-of select="return/."/></td></tr>
        </table>
        
        <xsl:call-template name="exceptions"/>
        
        <h3>Example</h3>
        <pre><xsl:value-of select="example"/></pre>
    </xsl:template>

    
    <xsl:template name="arguments">
        <h3>Arguments</h3>
        <table class="content" >
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr><th>Type</th><th>Name</th><th>Description</th></tr>
            <xsl:apply-templates select="argument"/>
        </table>
    </xsl:template>
    
    
    <xsl:template match="argument">
        <tr>
            <td>
                <code>
                    <xsl:choose>
                        <xsl:when test="@type = 'ByteString'">
                            <a><xsl:attribute name="href">bytestring.html</xsl:attribute>ByteString</a>
                        </xsl:when>
                        <xsl:when test="@type = 'ByteBuffer'">
                            <a><xsl:attribute name="href">bytebuffer.html</xsl:attribute>ByteBuffer</a>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:value-of select="@type"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </code>
            </td>
            <td>
                <xsl:value-of select="@name"/>
            </td>
            <td>
                <xsl:call-template name="description"/>
            </td>
        </tr>
    </xsl:template>
    
    
    <xsl:template name="exceptions">
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr><th>Name</th><th>Value</th><th>Description</th></tr>
            <xsl:apply-templates select="exception"/>
        </table>
    </xsl:template>
    
    
    <xsl:template match="exception">
        <tr><td><xsl:value-of select="@name"/></td><td><xsl:value-of select="@value"/></td><td><xsl:value-of select="."/></td></tr>
    </xsl:template>
    
    
    <xsl:template match="signature">
      <p class="signature"><xsl:value-of select="."/></p>
    </xsl:template>

    
    <xsl:template match="description" name="description">
        <xsl:apply-templates/>
<!-- 
        <p><xsl:value-of select="."/></p>
		<xsl:copy-of select="./*"/>
-->
    </xsl:template>
    
    
    <xsl:template match="p">
        <p><xsl:apply-templates/></p>
    </xsl:template>
    
    
    <xsl:template match="a">
        <a><xsl:attribute name="href"><xsl:value-of select="@href"/></xsl:attribute><xsl:value-of select="."/></a>
    </xsl:template>

    
    <xsl:template match="b">
        <b><xsl:apply-templates/></b>
    </xsl:template>
    
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
<title>Smart Card Shell 3</title>
<!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
<h1>Troubleshooting</h1>
<p>If something goes wrong with the Smart Card Shell, then this document might
   provide you with the answers you are looking for.</p>
<h2>Installation and Startup</h2>
<h3>The Smart Card Shell does not start</h3>
<p>If you start the Smart Card Shell from the "Start" menue and it does not come
   up with a window, then you should try to start the program manually:</p>
<ol>
<li>Open a command line</li>
<li>Change to the Smart Card Shell installation directory (e.g. cd "c:\Program Files\CardContact\Smart Card Shell 3")</li>
<li>Enter the following command:</li>
</ol>
<pre>
scsh3gui.cmd
</pre>
<p>This command runs the Smart Card Shell without the wrapper. The output on the console should indicate
   where the problem might be.</p>
<h2>Configuration</h2>
<h3>Changing the card reader is not stored in persistant storage</h3>
<p>When the card reader is changed, then the new configuration value
   is written to the <code>.settings.js</code> configuration script. This
   script is executed during startup. Please make sure, that the script
   is stored in your working directory or the installation directory.</p>
<h2>Locating files</h2>
<h3>The Shell does not find my files</h3>
<p>If the shell seems to be unable to locate your files, then check the following:</p>
<ul>
<li>Absolute path names should always work</li>
<li>Relative path names are resolved relative to the location of the currently running script, the
    working directory and the installation directory (See <a href="filelocation.html">Locating Files</a>).</li>
<li>When calling a function that was previously defined in a script, then the current directory is either
    the directory of the calling script or, if entered on the command line, the working directory</li>
</ul>
<h2>My card does not seem to work</h2>
<p>There may be situations, where the Smart Card Shell does not work with your specific card.
   In this case we recommend to enable tracing and try again to analyse the Command- and Response-APDUs
   exchanged between the Shell and your card.</p>
<p>Tracing of APDUs can be enable by editing the <code>opencard.properties</code> file with
   a text editor and by uncommenting the line that reads</p>
<pre>
#OpenCard.trace = opencard.core.service.CardChannel:8
</pre>
<p>to</p>
<pre>
OpenCard.trace = opencard.core.service.CardChannel:8
</pre>
<p>After you restart the shell, you will see trace messages in the form:</p>
<pre>
--- thread    Thread[Thread-5,6,main]
--- source    opencard.core.service.CardChannel@e14ebc, is open, not jammed


[DEBUG    ] opencard.core.service.CardChannel.sendCommandAPDU
--- message   opencard.core.terminal.CommandAPDU@169df00
0000:  00 A4 04 00 07 A0 00 00 02 47 10 01 00           .........G...

--- thread    Thread[Thread-5,6,main]
--- source    opencard.core.service.CardChannel@e14ebc, is open, not jammed


[DEBUG    ] opencard.core.service.CardChannel.response:
--- message   opencard.core.terminal.ResponseAPDU@1af8502
0000:  6F 11 84 07 A0 00 00 02 47 10 01 A5 06 50 04 4D  o.......G....P.M
0010:  52 54 44 90 00                                   RTD..
</pre>
<!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate --><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>URLConnection - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>URLConnection - Reference Documentation</h1>
        <p>
                    
            <p>Class implementing an URL connection to a resource. This class can be used to
           put, get, post or delete local and remote resources (CRUD operations).</p>
                
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">URLConnection() constructor</a>
            </li>
            <li>
                <a href="#setConnectTimeout">setConnectTimeout()</a>
            </li>
            <li>
                <a href="#setReadTimeout">setReadTimeout()</a>
            </li>
            <li>
                <a href="#setTLSKeyStores">setTLSKeyStores()</a>
            </li>
            <li>
                <a href="#addHeaderField">addHeaderField()</a>
            </li>
            <li>
                <a href="#getHeaderField">getHeaderField()</a>
            </li>
            <li>
                <a href="#getHeaderFieldList">getHeaderFieldList()</a>
            </li>
            <li>
                <a href="#get">get()</a>
            </li>
            <li>
                <a href="#getBinary">getBinary()</a>
            </li>
            <li>
                <a href="#post">post()</a>
            </li>
            <li>
                <a href="#postBinary">postBinary()</a>
            </li>
            <li>
                <a href="#put">put()</a>
            </li>
            <li>
                <a href="#deleteResource">deleteResource()</a>
            </li>
            <li>
                <a href="#toString">toString()</a>
            </li>
        </ul>
        <h2>Properties</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="120"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>Number</td>
                <td>responseCode</td>
                <td>The HTTP response code</td>
            </tr>
            <tr>
                <td>String</td>
                <td>responseMessage</td>
                <td>The HTTP response message</td>
            </tr>
            <tr>
                <td>X509[]</td>
                <td>serverCertificates</td>
                <td>The certificate chain returned by the server in a TLS connection. The server certificate is the first element</td>
            </tr>
            <tr>
                <td>String</td>
                <td>contentEncoding</td>
                <td>The encoding format for the content</td>
            </tr>
            <tr>
                <td>String</td>
                <td>contentLength</td>
                <td>The length of the content</td>
            </tr>
            <tr>
                <td>String</td>
                <td>contentType</td>
                <td>The content type</td>
            </tr>
            <tr>
                <td>Date</td>
                <td>date</td>
                <td>The date form the header field</td>
            </tr>
            <tr>
                <td>Date</td>
                <td>expiration</td>
                <td>The expiration from the header field</td>
            </tr>
            <tr>
                <td>Date</td>
                <td>lastModified</td>
                <td>The date of last modification from the header field</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">URLConnection(String url)</p>
        <h3>Description</h3>
        Create a connection object to access a resource identified by the URL.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>url</td>
                <td>URL of the resource to access</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var cwd = GPSystem.mapFilename("urltest.dat", GPSystem.CWD);

var urlConnection = new URLConnection("file:" + cwd);

</pre>
        <h2 id="setConnectTimeout">setConnectTimeout()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setConnectTimeout(Number ms)</p>
        <h3>Description</h3>
                    
        <p>Sets the number of milliseconds to wait for a connect to the remote system.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ms</td>
                <td>The timeout in milliseconds</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

urlConnection.setConnectTimeout(10000);		// 10 seconds

</pre>
        <h2 id="setReadTimeout">setReadTimeout()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setReadTimeout(Number ms)</p>
        <h3>Description</h3>
                    
        <p>Sets the number of milliseconds to wait for a response from the remote system.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ms</td>
                <td>The timeout in milliseconds</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

urlConnection.setReadTimeout(10000);		// 10 seconds

</pre>
        <h2 id="setTLSKeyStores">setTLSKeyStores()</h2>
        <h3>Prototype</h3>
        <p class="signature">void setTLSKeyStores(KeyStore truststore, KeyStore keystore, String keypassword)</p>
        <h3>Description</h3>
                    
        <p>Sets the key stores to be used for TLS connections.</p>
                    
        <p>The trust store contains CA certificates that can be used to verify
               the server certificate.</p>
                    
        <p>The key store contains the private key, certificate and CA certificates 
               to be used for TLS client authentication.</p>
                    
        <p>Setting a TLS key store only has an effect for connections using 
               transport layer security (e.g. https).</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>KeyStore</code>
                </td>
                <td>truststore</td>
                <td>The keystore containing trusted certificates for server authentication</td>
            </tr>
            <tr>
                <td>
                    <code>KeyStore</code>
                </td>
                <td>keystore</td>
                <td>An optional key store containing the private key and certificates for TLS client authentication</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>keypassword</td>
                <td>The password to recover the private key</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var truststore = new KeyStore("SUN", "jks", "truststore", "openscdp");
var keystore = new KeyStore("SUN", "jks", "clientkeystore", "openscdp");

var urlConnection = new URLConnection("https://localhost:8443");

urlConnection.setTLSKeyStores(truststore, keystore, "openscdp");

var page = urlConnection.get();

</pre>
        <h2 id="addHeaderField">addHeaderField()</h2>
        <h3>Prototype</h3>
        <p class="signature">void addHeaderField(String fieldName, String value)</p>
        <h3>Description</h3>
                    
        <p>Add a HTTP header field to the request.</p>
                    
        <p>If the field does already exists, then a further element is added.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>fieldName</td>
                <td>The HTTP header field name</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>ms</td>
                <td>The field value</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

urlConnection.addHeaderField("x-my-header", "My private header field");

</pre>
        <h2 id="getHeaderField">getHeaderField()</h2>
        <h3>Prototype</h3>
        <p class="signature">String[] getHeaderField(String fieldName)</p>
        <h3>Description</h3>
                    
        <p>Returns a list of values for given header field.</p>
                    
        <p>If the field does already exists, then undefined is returned</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>fieldName</td>
                <td>The HTTP header field name</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>The list of values for this header field</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

urlConnection.getHeaderField("x-my-header");

</pre>
        <h2 id="getHeaderFieldList">getHeaderFieldList()</h2>
        <h3>Prototype</h3>
        <p class="signature">String[] getHeaderFieldList()</p>
        <h3>Description</h3>
                    
        <p>Returns a list of header fields contained in the response.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>The list of header fields</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

urlConnection.getHeaderFieldList();

</pre>
        <h2 id="get">get()</h2>
        <h3>Prototype</h3>
        <p class="signature">String get()</p>
        <h3>Description</h3>
                    
        <p>Read from the resource the full content as string.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>The content of the resource as string</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var urlConnection = new URLConnection("file:" + cwd);
var page = urlConnection.get();
assert(page.equals("Hello World\n"));

</pre>
        <h2 id="getBinary">getBinary()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getBinary()</p>
        <p class="signature">ByteString getAsByteString()</p>
        <h3>Description</h3>
                    
        <p>Read from the resource the full content as binary content.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The content of the resource as bytestring</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var urlConnection = new URLConnection("file:" + cwd);
var page = urlConnection.getAsByteString();
assert(page.equals(new ByteString("48656C6C6F20576F726C640D0A", HEX)));

</pre>
        <h2 id="post">post()</h2>
        <h3>Prototype</h3>
        <p class="signature">String post(String str)</p>
        <h3>Description</h3>
                    
        <p>Write the text to the resource and receive response.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>str</td>
                <td>The content to write</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>The content of the resource as string</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var url = "http://localhost:8080/";
var urlConnection = new URLConnection(url + "admin?restart");

urlConnection.addHeaderField("x-my-header", "My private header field");

var page = urlConnection.get();
print("GET:\n" + page);
print(urlConnection.responseCode + " - " + urlConnection.responseMessage);
print("ContentEncoding : " + urlConnection.contentEncoding);
print("ContentLength : " + urlConnection.contentLength);
print("ContentType : " + urlConnection.contentType);
print("Date : " + urlConnection.date);
print("Expiration : " + urlConnection.expiration);
print("Last Modified : " + urlConnection.lastModified);
var hl = urlConnection.getHeaderFieldList();
print("Header field list : " + hl);
for each (var s in hl) {
	var v = urlConnection.getHeaderField(s);
	print(s + " : " + v);
}

assert(urlConnection.responseCode == 200);


var urlConnection = new URLConnection(url + "admin");

var script = "GPSystem.trace(\"Hello World\");\n";

var result = urlConnection.post(script);
print("POST:\n" + result);

var result = urlConnection.post(script);
print("POST:\n" + result);


var urlConnection = new URLConnection(url + "admin");

var page = urlConnection.get();
print("GET:\n" + page);


</pre>
        <h2 id="postBinary">postBinary()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString post(ByteString data)</p>
        <h3>Description</h3>
                    
        <p>Write binary data to the resource and receive response.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>data</td>
                <td>The content to write</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>The content of the resource as ByteString</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var url = "http://localhost:8080/";
var urlConnection = new URLConnection(url + "admin?restart");

var urlConnection = new URLConnection(url + "admin");

var script = 
"function handleRequest(req, res) {\n" +
"var cl = req.contentLength;\n" + 
"print(cl);\n" +
"var is = req.getEntityAsInputStream();\n" +
"var bs = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, cl);\n" +
"is.read(bs);\n" +
"var bb = new ByteBuffer(bs);\n" +
"print(bb.toByteString());\n" +
"res.setContentLength(3);\n" +
"res.write(new ByteString(\"Yes\", ASCII));\n" +
"}\n";



var result = urlConnection.post(script);
print("POST:\n" + result);

var urlConnection = new URLConnection(url + "se");

var data = new ByteString("Hello World", ASCII);
var result = urlConnection.postBinary(data);

assert(result.toString(ASCII) == "Yes");


</pre>
        <h2 id="put">put()</h2>
        <h3>Prototype</h3>
        <p class="signature">String put(String str)</p>
        <h3>Description</h3>
                    
        <p>Write the text to the resource and receive response.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>str</td>
                <td>The content to write</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var url = "http://localhost:8080/";
var urlConnection = new URLConnection(url + "admin?restart");

var page = urlConnection.get();
print("GET:\n" + page);


var urlConnection = new URLConnection(url + "admin");

var script = "GPSystem.trace(\"Hello World\");\n";

var result = urlConnection.put(script);
print("PUT:\n" + result);

var result = urlConnection.put(script);
print("PUT:\n" + result);


var urlConnection = new URLConnection(url + "admin");

var page = urlConnection.get();
print("GET:\n" + page);


</pre>
        <h2 id="deleteResource">deleteResource()</h2>
        <h3>Prototype</h3>
        <p class="signature">void deleteResource()</p>
        <h3>Description</h3>
                    
        <p>Delete the resource.</p>
                    
        <p>The delete operation only works for connections using HTTP.</p>
                    
        <p>The method is not named "delete" because delete is a reserved name
               in the Rhino JavaScript implementation.</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var url = "http://localhost:8080/";

var urlConnection = new URLConnection(url + "admin");

urlConnection.deleteResource();


</pre>
        <h2 id="toString">toString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String toString()</p>
        <h3>Description</h3>
                    
        <p>Return the URL as string</p>
                
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>The URL</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

assert(urlConnection.toString() == url + "admin");

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>X509 - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>X509 - Reference Documentation</h1>
        <p>
            <p>Class implementing support for X509 certificates</p>
                             
            <p>This class provides a wrapper for java.security.cert.X509 objects. All methods
                 from this Java class are available through the LiveConnect mechanism.</p>
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">X509() constructor</a>
            </li>
            <li>
                <a href="#getNative">getNative()</a>
            </li>
            <li>
                <a href="#getBytes">getBytes()</a>
            </li>
            <li>
                <a href="#getSerialNumber">getSerialNumber()</a>
            </li>
            <li>
                <a href="#getSerialNumberString">getSerialNumberString()</a>
            </li>
            <li>
                <a href="#getSubjectKeyIdentifier">getSubjectKeyIdentifier()</a>
            </li>
            <li>
                <a href="#getAuthorityKeyIdentifier">getAuthorityKeyIdentifier()</a>
            </li>
            <li>
                <a href="#getNotBefore">getNotBefore()</a>
            </li>
            <li>
                <a href="#getNotAfter">getNotAfter()</a>
            </li>
            <li>
                <a href="#getIssuerDNString">getIssuerDNString()</a>
            </li>
            <li>
                <a href="#getSubjectDNString">getSubjectDNString()</a>
            </li>
            <li>
                <a href="#getOCSPResponderURL">getOCSPResponderURL()</a>
            </li>
            <li>
                <a href="#getPublicKey">getPublicKey()</a>
            </li>
            <li>
                <a href="#verify">verify()</a>
            </li>
            <li>
                <a href="#verifyWith">verifyWith()</a>
            </li>
        </ul>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">X509(ByteString dercert)</p>
        <p class="signature">X509(String certfile)</p>
        <h3>Description</h3>
        Create certificate object from DER encoded certificate or read from file
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>
                        <a href="bytestring.html">ByteString</a>
                    </code>
                </td>
                <td>dercert</td>
                <td>DER encoded certificate</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>certfile</td>
                <td>
                    <p>Filename of file containing DER encoded certificate</p>
                                      
                    <p>Unless an absolute file name is given, the path is relative to the location of the
                  script in which the constructor is called.</p>
                </td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>The certificate has an invalid or unrecognized structure</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new X509("root.cer");

print("Issuer  : " + root.getIssuerDNString());
print("Subject : " + root.getSubjectDNString());

bs = new ByteString("\
MIIGGzCCBAOgAwIBAgIRAS31fRUU00bNe4A4sqZ44wQwDQYJKoZIhvcNAQEFBQAw \
VDESMBAGA1UEAwwJUm9vdC1DQSAxMTEwLwYDVQQKDChURVNUIC0gSGF1cHR2ZXJi \
YW5kIMO2c3RlcnIuIFNvemlhbHZlcnMuMQswCQYDVQQGEwJBVDAeFw0wNTA2MjMx \
NzI3MDJaFw0zMDA2MjMxNzI3MDJaMFYxFDASBgNVBAMMC1N5c3RlbSBDQSAxMTEw \
LwYDVQQKDChURVNUIC0gSGF1cHR2ZXJiYW5kIMO2c3RlcnIuIFNvemlhbHZlcnMu \
MQswCQYDVQQGEwJBVDCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKWL \
/7+RLD7eqAiqbFtN/3sWgw5nfA3G6vYcVvV4CzXFlzJVk6xtiu/sYlSQK18tbyF4 \
7DfNuHANV24lutFOoGLuhJkSWbqONcNvplD7a+XIniAdSgSBxcJnXvZ4xJ+Bd5TH \
U4CXvcqDGpEaEAgnhpiVPoBMHK/r1eMrLsb9+HryCKBrC0dzVPPKX+HAz2wj757x \
KdlrBva7dFz5pbDDZmifmTko4fj4DQS5quu4MVq2vs1D9km2BZXCgU5Fo6OWoL0a \
U3B4amLzNA981E2niLovz+18DB340/PlgctE6FaM8XQv9Omoe/nUqImM/J+T8uIp \
kFCy+1cuhXGRpqRnHvEq88COsvDFI6vKfwd9Duko+IjUzpq3MIa2bXURBU3kDD79 \
sl1i1uy9Sx6YtwTZBoPIQZP+7WjlZnT4nBpJl2r0qKFKJH3nBJVntlzlSna1gc4u \
HZBkvrfDnLG/RGGBsiqkzdx0myM8mON/veLbY5Nd+SUBm1bWAw0BSbz+3jBtHQID \
AQABo4IBZDCCAWAwEwYDVR0jBAwwCoAIRtDR1WyRFs4wEQYDVR0OBAoECEvRRLys \
X0iFMA4GA1UdDwEB/wQEAwICBDAxBggrBgEFBQcBAQQlMCMwIQYIKwYBBQUHMAGG \
FWh0dHA6Ly8xNDkuMjM5LjE2LjIwOTCB3gYDVR0fBIHWMIHTMIHQoHOgcYZvbGRh \
cDovLzE0OS4yMzkuMTYuMjA5L289VEVTVCUyMC0lMjBIYXVwdHZlcmJhbmQlMjAl \
ZjZzdGVyci4lMjBTb3ppYWx2ZXJzLixjPUFUP2NlcnRpZmljYXRlUmV2b2NhdGlv \
bkxpc3Q7YmluYXJ5olmkVzBVMRMwEQYDVQQDDApDUkwtU2lnbmVyMTEwLwYDVQQK \
DChURVNUIC0gSGF1cHR2ZXJiYW5kIMO2c3RlcnIuIFNvemlhbHZlcnMuMQswCQYD \
VQQGEwJBVDASBgNVHRMBAf8ECDAGAQH/AgEAMA0GCSqGSIb3DQEBBQUAA4ICAQAY \
P81wkoVpuE6Dtg72snt2KnwURfI1KAD+WgDBKLcSUD+uO2ks7CpRWaqD5WW47lQD \
KsGwLyRmwEfmNBPh15TMYkTvynUwD3WBaPPr59Hy7QrUcdRU511my0CnS3W+2L4a \
oLCuyRvlozuIhBHCfSKsYFZwHrT90J+B9NFnlWCGsxg0xsKpatcXsrMOQTlX3dOl \
5pu9KEoKlryZArD7UDBqMAqKQ9srx1a23AJKREFyJ6a4aW/voZvpoHMsQQPbm8xb \
vQPZaUUqY7R9g/9ZgVdeDrjEJU8qtptSL1ixVbvmpKM0g+G4tda83VfVY5qeto6E \
QLmst4yNA/uv5MxCtEu/DthxUScGkY1erV6LMb97u4m4mx87SxKPBhCdZx76BEgU \
t0bLFAlG63h1bZ3UFcoDR3PSjF1QwUPO6DroCMVpUYRGnli123KQ63lKCOxQqwl+ \
te7x3uEWKgN8FwUKCLYGnBIiBA2c7igRiyKaOon+43kYt+GAyBvOdH1n/EjHQVHE \
h3xwWNCsiAn6XFjlL61i0r5dshBl+rWWyUbNpHXqHuPnm8Zn37DXwmvxU9qdc0TA \
Y8M0uMYAw1rkDoo2zGb2nxAbmmp7L8J2cFE/6TJ6R7gdxY/0uwaIdRHBr844kscO \
i0dKmGsaCPxCVq5venNSatNMEvOgyEloLGqoq3S+xQ==", BASE64);

ca = new X509(bs);

print("Issuer  : " + ca.getIssuerDNString());
print("Subject : " + ca.getSubjectDNString());

</pre>
        <h2 id="getNative">getNative()</h2>
        <h3>Prototype</h3>
        <p class="signature">java.security.X509Certificate getNative()</p>
        <h3>Description</h3>
        <p>Return underlying native java.security.X509Certificate object. All methods of the
                     Java object are available through the LiveConnect mechanism.</p>
                             
        <p>For methods with return type byte[], as ByteString object is created.</p>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>java.security.X509Certificate</code>
                </td>
                <td>Native Java object</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var root = new X509("root.cer");
var ncert = root.getNative();
print("Version: " + ncert.getVersion());

</pre>
        <h2 id="getBytes">getBytes()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getBytes()</p>
        <h3>Description</h3>
        Return certificate in encoded format
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>Encoded certificate</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new X509("root.cer");
bs = root.getBytes();
root = new X509(bs);

print("Subject : " + root.getSubjectDNString());

</pre>
        <h2 id="getSerialNumber">getSerialNumber()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getSerialNumber()</p>
        <h3>Description</h3>
        Return the serial number.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>serial number</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new X509("root.cer");

serial = root.getSerialNumber();

print("Serial number  : " + serial);

</pre>
        <h2 id="getSerialNumberString">getSerialNumberString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String getSerialNumberString()</p>
        <h3>Description</h3>
        Return the serial number as decimal strin.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>Serial number as decimal string</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new X509("root.cer");

serial = root.getSerialNumberString();

print("Serial number  : " + serial);

</pre>
        <h2 id="getSubjectKeyIdentifier">getSubjectKeyIdentifier()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getSubjectKeyIdentifier()</p>
        <h3>Description</h3>
        Return the RFC 5280 type 1 unique identifier for the subject's public key (SHA-1 of encoded public key).
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>SubjectPublicKey value from extension or null if not defined</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new X509("ca.cer");

spkid = root.getSubjectKeyIdentifier();

print("SubjectPublicKeyIdentifier : " + spkid);

assert((new ByteString("44 2A FB B6 64 C5 38 0F", HEX)).equals(spkid));

</pre>
        <h2 id="getAuthorityKeyIdentifier">getAuthorityKeyIdentifier()</h2>
        <h3>Prototype</h3>
        <p class="signature">ByteString getAuthorityKeyIdentifier()</p>
        <h3>Description</h3>
        Return the unique identifier for the issuer's public key.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>ByteString</code>
                </td>
                <td>AuthorityPublicKey value from extension or null if not defined</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new X509("ca.cer");

apkid = root.getAuthorityKeyIdentifier();

print("AuthorityPublicKeyIdentifier : " + apkid);

</pre>
        <h2 id="getNotBefore">getNotBefore()</h2>
        <h3>Prototype</h3>
        <p class="signature">Date getNotBefore()</p>
        <h3>Description</h3>
        Return the time from which on the certificate is valid.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Date</code>
                </td>
                <td>The effective date of the certificate</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

cert = new X509("ca.cer");
print(cert);
print("Not before : " + cert.getNotBefore());

</pre>
        <h2 id="getNotAfter">getNotAfter()</h2>
        <h3>Prototype</h3>
        <p class="signature">Date getNotAfter()</p>
        <h3>Description</h3>
        Return the time from which on the certificate is expired.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Date</code>
                </td>
                <td>The expiration date of the certificate</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

cert = new X509("ca.cer");

print("Not after : " + cert.getNotAfter());

</pre>
        <h2 id="getIssuerDNString">getIssuerDNString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String getIssuerDNString()</p>
        <h3>Description</h3>
        Return a string containing the Issuer Distinguished Name in a human readable form.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>String containing the Issuer DN</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new X509("root.cer");

dn = root.getIssuerDNString();
assert(dn);

print("Issuer  : " + dn);

</pre>
        <h2 id="getSubjectDNString">getSubjectDNString()</h2>
        <h3>Prototype</h3>
        <p class="signature">String getSubjectDNString()</p>
        <h3>Description</h3>
        Return a string containing the Subject Distinguished Name in a human readable form.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>String containing the Subject DN</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new X509("root.cer");

var dn = root.getSubjectDNString();
assert(dn);

print("Subject : " + dn);

</pre>
        <h2 id="getOCSPResponderURL">getOCSPResponderURL()</h2>
        <h3>Prototype</h3>
        <p class="signature">String getOCSPResponderURL()</p>
        <h3>Description</h3>
        Return a string containing the URL of the OCSP responder for this certificate.
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>String containing the OCSP Responder URL</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new X509("root.cer");

url = root.getOCSPResponderURL();
assert(url);

print("OCSP Responder URL : " + url);

</pre>
        <h2 id="getPublicKey">getPublicKey()</h2>
        <h3>Prototype</h3>
        <p class="signature">Key getPublicKey()</p>
        <p class="signature">Key getPublicKey(Key template)</p>
        <h3>Description</h3>
        <p>Extract public key from certificate.</p>
                             
        <p>If no template is given, then a new Key object is created. If the key template
                     is provided, then it will be filled with the appropriate values.</p>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>New key object or object provided as template.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_KEY</td>
                <td>The key could not be extracted from the certificate</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var root = new X509("root.cer");

var key = root.getPublicKey();
assert(key instanceof Key);

assert(key.getType() == Key.PUBLIC);
assert(key.getSize() == 4096);
assert(key.getComponent(Key.MODULUS).toString(HEX) ==
	"D0FC391648CD018C07FD9A9EFCBB0BC88C6D6A72575C4862" +
	"6A632BAE0E6E8091B22CDEFD952BA19E4AF06B2380C3DCE1" +
	"0678FBDD408B7E2E9D8341760079761161C42A0917143E26" +
	"A787B74426CEC430A55E71DEDB391A501696DF116E21D270" +
	"6F0B88CC4AEEA2EC5E8032F5E9FA45B6A4DB51346FAC26AF" +
	"FCB694A6067C0D2F2C9488489BEA5ED0D18B0ABC98A526B2" +
	"62CDE334873AEC73CF57570A8508BCABE224ED97D84F81B6" +
	"FF8F1639E8245FDF143664FACF301DB53640262B9F79FFAD" +
	"12619EAA5A54473D82E8EF876270DAAA5CD57D8557CAA23C" +
	"64C1FCB508E11261EA65DF4667FD168E797D6B7FC01E668A" +
	"3172F906D5A8E45CEB9A7FB8C34FF44230F6DB6CD7415D52" +
	"9879447908E13E09A5EC323C4C6E0F9FCF3B0E426C76C140" +
	"0B3AE3945D03DF7037697FC47B944B7DF1D5DFD18F600579" +
	"0CCB8B82F1D4061F0C837959CF0F091BF072F6F8CA552DFD" +
	"CF5D998B020025C986BA8934F7B5BC277F12313CE2BA533C" +
	"84285F95C7ED028D5A4D0CEECE2708AE1C024D27C26627B2" +
	"F413D9B83C6C82381FD1CBD181A8D453000897F985252BF2" +
	"9FEC0078BBCB8704E5856B8D46E10C4AB9B63B1A26F68C1B" +
	"8F9EE48B1B73005ACCC330C4D20EE3479249FAF2CAD17B6C" +
	"383330549C723C7695D6DF6170E56866FE4F598C8BF3F691" +
	"04DD5C0CC1BD82FC398B1FA7AF4D5EB4EEC06652CE1DBECE" +
	"2F1E47E966E60F45");
assert(key.getComponent(Key.EXPONENT).toString(HEX) == "010001");


var key = root.getPublicKey(key);
assert(key instanceof Key);
assert(key.getType() == Key.PUBLIC);

var root = new X509("ecdsacert.cer");
var key = root.getPublicKey();
assert(key instanceof Key);
assert(key.getType() == Key.PUBLIC);
assert(key.getSize() == 192);
assert(key.getComponent(Key.ECC_QX).toString(HEX) ==
            "ED5A2BEB600D48E3B3301AE29DCCFA2A2AD85733AD5F09B0");
assert(key.getComponent(Key.ECC_QY).toString(HEX) ==
            "6DC91E96758FA281D45787759FA5BEA1A4E2AD7564A062F4");

</pre>
        <h2 id="verify">verify()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void verify(Key publicKey)</p>
        <h3>Description</h3>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>publicKey</td>
                <td>Public key</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>Invalid certificate structure</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>Signature algorithm not supported or provider not found</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>Signature is not valid</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_KEY</td>
                <td>The key is invalid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var root = new X509("root.cer");
var ca = new X509("ca.cer");

var rootKey = root.getPublicKey();
root.verify(rootKey);
ca.verify(rootKey);

try	{
	var caKey = ca.getPublicKey();
	ca.verify(caKey);
	assert(false);
}
catch(e) {
	assert(e instanceof GPError);
	assert(e.error == GPError.CRYPTO_FAILED);
}

</pre>
        <h2 id="verifyWith">verifyWith()</h2>
        <h3>Prototype</h3>
        <p class="signature">Void verifyWith(X509 superior)</p>
        <h3>Description</h3>
        Verify if certificate was signed with private key related to superior certificate
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>X509</code>
                </td>
                <td>superior</td>
                <td>Certificate from which the public key will be extracted</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_DATA</td>
                <td>Invalid certificate structure</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_MECH</td>
                <td>Signature algorithm not supported or provider not found</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>Signature is not valid</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

root = new X509("root.cer");
ca = new X509("ca.cer");
root.verifyWith(root);
ca.verifyWith(root);

try	{
	ca.verifyWith(ca);
	assert(false);
}
catch(e) {
	assert(e instanceof GPError);
	assert(e.error == GPError.CRYPTO_FAILED);
}

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- #BeginTemplate "template.dwt" -->
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- #BeginEditable "TITLE" -->
                
        <title>XMLSignature - Reference Documentation</title>
        <!-- #EndEditable -->
<link rel=stylesheet type="text/css" href="style.css"/>
<meta name="author" content="Andreas Schwier"/>
</head>
<body>
<div id="wrapper">
<div><a href="http://www.cardcontact.de"><img src="banner.jpg" width="750" height="80"/></a></div>
<div id="pagelist">
	<h1>Smart Card Shell</h1>
	<ul>
		<li>
			<ul>
				<li><a href="index.html">Home</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="gperror.html">GPError</a></li>
				<li><a href="gpsystem.html">GPSystem</a></li>
				<li><a href="bytestring.html">ByteString</a></li>
				<li><a href="bytebuffer.html">ByteBuffer</a></li>
				<li><a href="tlv.html">TLV</a></li>
				<li><a href="tlvlist.html">TLVList</a></li>
				<li><a href="card.html">Card</a></li>
				<li><a href="atr.html">Atr</a></li>
				<li><a href="key.html">Key</a></li>
				<li><a href="crypto.html">Crypto</a></li>
				<li><a href="application.html">Application</a></li>
				<li><a href="gpapplication.html">GPApplication</a></li>
				<li><a href="gpsecuritydomain.html">GPSecDomain</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="asn1.html">ASN1</a></li>
				<li><a href="cardfile.html">CardFile</a></li>
				<li><a href="isosecurechannel.html">IsoSecureChannel</a></li>
				<li><a href="applicationfactory.html">ApplFactory</a></li>
				<li><a href="gpxml.html">GPXML</a></li>
				<li><a href="jsscript.html">JsScript</a></li>
				<li><a href="cardsimulationadapter.html">CardSim</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="x509.html">X509</a></li>
				<li><a href="crl.html">CRL</a></li>
				<li><a href="keystore.html">KeyStore</a></li>
				<li><a href="cmssigneddata.html">Signed CMS</a></li>
				<li><a href="cmsenvelopeddata.html">Enveloped CMS</a></li>
				<li><a href="cmsgenerator.html">CMS Generator</a></li>
				<li><a href="xmlsignature.html">XMLSignature</a></li>
				<li><a href="sss.html">SSS</a></li>
				<li><a href="ocspquery.html">OCSPQuery</a></li>
				<li><a href="ldap.html">LDAP</a></li>
				<li><a href="soapconnection.html">SOAP</a></li>
				<li><a href="urlconnection.html">URLConnection</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="pkcs11provider.html">PKCS11Provider</a></li>
				<li><a href="pkcs11session.html">PKCS11Session</a></li>
				<li><a href="pkcs11object.html">PKCS11Object</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="outlinenode.html">OutlineNode</a></li>
				<li><a href="dialog.html">Dialog</a></li>
				<li><a href="task.html">Task</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="jsdoc/index.html">Tools</a></li>
				<li><a href="scsh-jsdoc/index.html">Modules</a></li>
			</ul>
		</li>
		<li>
			<ul>
				<li><a href="http://www.openscdp.org">OpenSCDP</a></li>
			</ul>
		</li>
	</ul>
</div>

<div id="main">
<!-- #BeginEditable "BODY" -->
                
        <h1>XMLSignature - Reference Documentation</h1>
        <p>
            <p>Class implementing support for XML Digital Signatures</p>
                             
            <p>This class provides for the ability to create and verify XML Digital Signatures.</p>
        </p>
        <h2>Index of Methods</h2>
        <ul>
            <li>
                <a href="#Constructor">XMLSignature() constructor</a>
            </li>
            <li>
                <a href="#addReference">addReference()</a>
            </li>
            <li>
                <a href="#sign">sign()</a>
            </li>
            <li>
                <a href="#verify">verify()</a>
            </li>
            <li>
                <a href="#saveAs">saveAs()</a>
            </li>
        </ul>
        <h2>Constants</h2>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>String</td>
                <td>INCLUSIVE</td>
                <td>The Canonical XML (without comments) canonicalization method algorithm URI</td>
            </tr>
            <tr>
                <td>String</td>
                <td>INCLUSIVE_WITH_COMMENTS</td>
                <td>The Canonical XML with comments canonicalization method algorithm URI</td>
            </tr>
            <tr>
                <td>String</td>
                <td>EXCLUSIVE</td>
                <td>The Exclusive Canonical XML (without comments) canonicalization method algorithm URI</td>
            </tr>
            <tr>
                <td>String</td>
                <td>EXCLUSIVE_WITH_COMMENTS</td>
                <td>The Exclusive Canonical XML with comments canonicalization method algorithm URI</td>
            </tr>
            <tr>
                <td>String</td>
                <td>BASE64</td>
                <td>The Base64 transform algorithm URI</td>
            </tr>
            <tr>
                <td>String</td>
                <td>ENVELOPED</td>
                <td>The Enveloped Signature transform algorithm URI</td>
            </tr>
            <tr>
                <td>String</td>
                <td>XPATH</td>
                <td>The XPath transform algorithm URI</td>
            </tr>
            <tr>
                <td>String</td>
                <td>XPATH2</td>
                <td>The XPath Filter 2 transform algorithm URI</td>
            </tr>
            <tr>
                <td>String</td>
                <td>XSLT</td>
                <td>The XSLT transform algorithm URI</td>
            </tr>
        </table>
        <h2 id="Constructor">Constructor</h2>
        <h3>Prototype</h3>
        <p class="signature">XMLSignature(String filename)</p>
        <h3>Description</h3>
        Create object and initialize from document in referenced file.
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>filename</td>
                <td>Name of file containing XML document, signed or unsigned.</td>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var ds = new XMLSignature("xmlsig1.xml");

</pre>
        <h2 id="addReference">addReference()</h2>
        <h3>Prototype</h3>
        <p class="signature">void addReference(String uri, Number digestMech)</p>
        <p class="signature">void addReference(String uri, Number digestMech, String[] transformations)</p>
        <h3>Description</h3>
        <p>Add a reference to the SignedInfo</p>
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>uri</td>
                <td>The URI pointing to the signed data</td>
            </tr>
            <tr>
                <td>
                    <code>Number</code>
                </td>
                <td>digestMech</td>
                <td>One of Crypto.SHA_1, Crypto.SHA_256, Crypto.SHA_512 or Crypto.MD5</td>
            </tr>
            <tr>
                <td>
                    <code>String[]</code>
                </td>
                <td>transformations</td>
                <td>List of transformations to apply for reference</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

ds.addReference("", Crypto.SHA_256, [XMLSignature.ENVELOPED]);
ds.addReference("./xmlsig1.xml", Crypto.SHA_256);

</pre>
        <h2 id="sign">sign()</h2>
        <h3>Prototype</h3>
        <p class="signature">void sign(Crypto crypto, String c14n, Number mech, Key privateKey, Key publicKey)</p>
        <h3>Description</h3>
                    
        <p>Create signature using the private key and signature mechanism.</p>
                    
        <p>The data to be signed is canonicalized using the selected method.</p>
                    
        <p>The public key is stored in the KeyInfo section.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Crypto</code>
                </td>
                <td>crypto</td>
                <td>The crypto service to use</td>
            </tr>
            <tr>
                <td>
                    <code>String</code>
                </td>
                <td>c14n</td>
                <td>The canonicalization method to apply</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>mech</td>
                <td>The signature mechanism to use</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>privateKey</td>
                <td>The private key used for signing</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>publicKey</td>
                <td>The public key to be included in KeyInfo</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>The cryptographic signing operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

// Create empty public key object and set size
var pubKey = new Key();
pubKey.setType(Key.PUBLIC);
pubKey.setSize(1024);

// Create empty private key object and set size
var priKey = new Key();
priKey.setType(Key.PRIVATE);

var crypto = new Crypto();

// Generate key pair
crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);

ds.sign(crypto, XMLSignature.EXCLUSIVE, Crypto.RSA_SHA256, priKey, pubKey);

</pre>
        <h2 id="verify">verify()</h2>
        <h3>Prototype</h3>
        <p class="signature">boolean verify(Crypto crypto, Key publicKey)</p>
        <h3>Description</h3>
                    
        <p>Verify XML signature using the public key provided.</p>
                
        <h3>Arguments</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <th>Type</th>
                <th>Name</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>
                    <code>Crypto</code>
                </td>
                <td>crypto</td>
                <td>The crypto service to use</td>
            </tr>
            <tr>
                <td>
                    <code>Key</code>
                </td>
                <td>publicKey</td>
                <td>The public key to be used for verification</td>
            </tr>
        </table>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.CRYPTO_FAILED</td>
                <td>The cryptographic verifying operation failed</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

assert(ds.verify(crypto, pubKey));

</pre>
        <h2 id="saveAs">saveAs()</h2>
        <h3>Prototype</h3>
        <p class="signature">void saveAs(String filename)</p>
        <h3>Description</h3>
        <p>Save XML Digital Signature to file.</p>
        <h3>Return</h3>
        <table>
            <colgroup>
                <col width="100"/>
                <col/>
            </colgroup>
            <tr>
                <td>
                    <code/>
                </td>
                <td/>
            </tr>
        </table>
        <h3>Exceptions</h3>
        <table class="content">
            <colgroup>
                <col width="100"/>
                <col width="200"/>
                <col/>
            </colgroup>
            <tr>
                <th>Name</th>
                <th>Value</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.ARGUMENTS_MISSING</td>
                <td>Too few arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_ARGUMENTS</td>
                <td>Too many arguments in call</td>
            </tr>
            <tr>
                <td>GPError</td>
                <td>GPError.INVALID_TYPE</td>
                <td>Type of argument is invalid for call</td>
            </tr>
        </table>
        <h3>Example</h3>
        <pre>

var fn = GPSystem.mapFilename("xmlsig2.xml", GPSystem.CWD);

ds.saveAs(fn);

</pre>
        <!-- #EndEditable -->
<br/>
<p class="copyright">&copy; Copyright 2003 - 2026 <a href="http://www.cardcontact.de">CardContact Systems GmbH</a>
, Minden, Germany</p>
</div>
</div>
</body>
</html>
<!-- #EndTemplate -->
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
AlgorithmInfo
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="AlgorithmInfo";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<B>PREV CLASS</B><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="CardOutlineFactory.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class AlgorithmInfo</H2>
<PRE>Object
   |
   +--<b>AlgorithmInfo</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>AlgorithmInfo</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#algorithm">algorithm</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#algRef">algRef</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#objId">objId</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#parameters">parameters</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#reference">reference</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#supportedOperations">supportedOperations</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#tlv">tlv</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#AlgorithmInfo()">AlgorithmInfo</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create an AlgorithmInfo object from TLV data


      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getOperationsAsString">getOperationsAsString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the operations flags as string of concatenated tokens.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="algorithm"><!-- --></A>
   <H3>algorithm</H3>
   <PRE>Object&nbsp;<B>algorithm</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="algRef"><!-- --></A>
   <H3>algRef</H3>
   <PRE>Object&nbsp;<B>algRef</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="objId"><!-- --></A>
   <H3>objId</H3>
   <PRE>Object&nbsp;<B>objId</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="parameters"><!-- --></A>
   <H3>parameters</H3>
   <PRE>Object&nbsp;<B>parameters</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="reference"><!-- --></A>
   <H3>reference</H3>
   <PRE>Object&nbsp;<B>reference</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="supportedOperations"><!-- --></A>
   <H3>supportedOperations</H3>
   <PRE>Object&nbsp;<B>supportedOperations</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="tlv"><!-- --></A>
   <H3>tlv</H3>
   <PRE>Object&nbsp;<B>tlv</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="AlgorithmInfo()"><!-- --></A><H3>
AlgorithmInfo</H3>
<PRE><B>AlgorithmInfo</B>(tlv)</PRE>


<UL>
   Create an AlgorithmInfo object from TLV data

 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 AlgorithmInfo ::= SEQUENCE {
   reference Reference,
   algorithm CIO-ALGORITHM.&id({AlgorithmSet}),
   parameters CIO-ALGORITHM.&Parameters({AlgorithmSet}{@algorithm}),
   supportedOperations CIO-ALGORITHM.&Operations({AlgorithmSet}{@algorithm}),
   objId CIO-ALGORITHM.&objectIdentifier ({AlgorithmSet}{@algorithm}),
   algRef Reference OPTIONAL
 }

 CIO-ALGORITHM ::= CLASS {
   &id INTEGER UNIQUE,
   &Parameters,
   &Operations Operations,
   &objectIdentifier OBJECT IDENTIFIER OPTIONAL
   } WITH SYNTAX {
   PARAMETERS &Parameters OPERATIONS &Operations ID &id [OID &objectIdentifier]
 }
 </pre>
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the AlgorithmInfo    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="getOperationsAsString"><!-- --></A>
   <H3>getOperationsAsString</H3>
   <PRE>String <B>getOperationsAsString</B>()</PRE>
   
      <UL>Gets the operations flags as string of concatenated tokens.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string containing the flags separated by a blank   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string representation of the object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<B>PREV CLASS</B><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="CardOutlineFactory.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
CRLGenerator
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="CRLGenerator";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-crlgenerator.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="CardOutlineFactory.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="DataOutline.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class CRLGenerator</H2>
<PRE>Object
   |
   +--<b>CRLGenerator</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>CRLGenerator</B>
   

</DL>
   
   <P>
   <BR/>Class implementing a CRL certificate generator
 <BR/><I>Defined in <a href='overview-summary-crlgenerator.js.html'>crlgenerator.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#crypto">crypto</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!aACompromise">aACompromise</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!affiliationChanged">affiliationChanged</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!cACompromise">cACompromise</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!certificateHold">certificateHold</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!cessationOfOperation">cessationOfOperation</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!keyCompromise">keyCompromise</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!privilegeWithdrawn">privilegeWithdrawn</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!removeFromCRL">removeFromCRL</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!superseded">superseded</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!unspecified">unspecified</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#CRLGenerator()">CRLGenerator</A></B>(&lt;Crypto&gt; crypto)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Certificate Revocation List (CRL) generator.
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addAuthorityKeyIdentifierExtension">addAuthorityKeyIdentifierExtension</A></B>(publicKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds the authority public key identifier extension based on the issuers key.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addCRLNumberExtension">addCRLNumberExtension</A></B>(crlnumber)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds the CRL number extension.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addExtension">addExtension</A></B>(&lt;String&gt; extnID, &lt;Boolean&gt; critical, extnValue)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds an extension to the CRL


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addRevokedCertificate">addRevokedCertificate</A></B>(&lt;ASN1&gt; revokedCertificate)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Add a revoked certificate to the list.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;X509</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#generateCRL">generateCRL</A></B>(privateKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Generates the certificate.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getExtensions">getExtensions</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the CRL extension as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getIssuer">getIssuer</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the issuer name as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getNextUpdate">getNextUpdate</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the nextUpdate TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getRevokedCertificates">getRevokedCertificates</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets revoked certificates
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getSignatureAlgorithm">getSignatureAlgorithm</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the signature algorithm TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getTbsCertificateList">getTbsCertificateList</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the part of the CRL that will be signed
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getThisUpdate">getThisUpdate</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the thisUpdate TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Number</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#loadCRLEntries">loadCRLEntries</A></B>(&lt;String&gt; filename)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Load list of revoked certificates from an existing CRL
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#reset">reset</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Resets all internal state variables.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#revokeCertificate">revokeCertificate</A></B>(&lt;ByteString&gt; serial, &lt;Date&gt; timestamp, reason, ext)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Add a revoked certificate to the list.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setIssuer">setIssuer</A></B>(&lt;Object&gt; issuer)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the isser name.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setNextUpdate">setNextUpdate</A></B>(&lt;Date&gt; datetime)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the timestamp for the next update
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setSignatureAlgorithm">setSignatureAlgorithm</A></B>(&lt;Number&gt; alg)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the signature algorithm.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setThisUpdate">setThisUpdate</A></B>(&lt;Date&gt; datetime)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the timestamp for this CRL
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="crypto"><!-- --></A>
   <H3>crypto</H3>
   <PRE>Object&nbsp;<B>crypto</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!aACompromise"><!-- --></A>
   <H3>aACompromise</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>aACompromise</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!affiliationChanged"><!-- --></A>
   <H3>affiliationChanged</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>affiliationChanged</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!cACompromise"><!-- --></A>
   <H3>cACompromise</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>cACompromise</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!certificateHold"><!-- --></A>
   <H3>certificateHold</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>certificateHold</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!cessationOfOperation"><!-- --></A>
   <H3>cessationOfOperation</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>cessationOfOperation</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!keyCompromise"><!-- --></A>
   <H3>keyCompromise</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>keyCompromise</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!privilegeWithdrawn"><!-- --></A>
   <H3>privilegeWithdrawn</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>privilegeWithdrawn</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!removeFromCRL"><!-- --></A>
   <H3>removeFromCRL</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>removeFromCRL</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!superseded"><!-- --></A>
   <H3>superseded</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>superseded</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!unspecified"><!-- --></A>
   <H3>unspecified</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>unspecified</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="CRLGenerator()"><!-- --></A><H3>
CRLGenerator</H3>
<PRE><B>CRLGenerator</B>(&lt;Crypto&gt; crypto)</PRE>


<UL>
   Create a Certificate Revocation List (CRL) generator.
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>crypto</CODE> -  the crypto provider to use for signing operations    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="addAuthorityKeyIdentifierExtension"><!-- --></A>
   <H3>addAuthorityKeyIdentifierExtension</H3>
   <PRE>void <B>addAuthorityKeyIdentifierExtension</B>(publicKey)</PRE>
   
      <UL>Adds the authority public key identifier extension based on the issuers key.

 <p>The key identifier is calculated as SHA-1 hash over the contents of the
 issuer public key (Without tag, length and number of unused bits.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addCRLNumberExtension"><!-- --></A>
   <H3>addCRLNumberExtension</H3>
   <PRE>void <B>addCRLNumberExtension</B>(crlnumber)</PRE>
   
      <UL>Adds the CRL number extension.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addExtension"><!-- --></A>
   <H3>addExtension</H3>
   <PRE>void <B>addExtension</B>(&lt;String&gt; extnID, &lt;Boolean&gt; critical, extnValue)</PRE>
   
      <UL>Adds an extension to the CRL

 <p>The structure is defined as:</p>
 <pre>
    Extension  ::=  SEQUENCE  {
        extnID      OBJECT IDENTIFIER,
        critical    BOOLEAN DEFAULT FALSE,
        extnValue   OCTET STRING
                    -- contains the DER encoding of an ASN.1 value
                    -- corresponding to the extension type identified
                    -- by extnID
        }
</pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>extnID</CODE> -  the extensions object identifier  
      </UL> 
   
     <UL><CODE>critical</CODE> -  the extension is critical  
      </UL> 
   
     <UL><CODE>the</CODE> -  extension value as ByteString    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addRevokedCertificate"><!-- --></A>
   <H3>addRevokedCertificate</H3>
   <PRE>void <B>addRevokedCertificate</B>(&lt;ASN1&gt; revokedCertificate)</PRE>
   
      <UL>Add a revoked certificate to the list. This adds the complete DER encoded structure.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>revokedCertificate</CODE> -  the information related to the revoked certificate    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="generateCRL"><!-- --></A>
   <H3>generateCRL</H3>
   <PRE>X509 <B>generateCRL</B>(privateKey)</PRE>
   
      <UL>Generates the certificate.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the generated certificate   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getExtensions"><!-- --></A>
   <H3>getExtensions</H3>
   <PRE>ASN1 <B>getExtensions</B>()</PRE>
   
      <UL>Gets the CRL extension as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the CRL extensions   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getIssuer"><!-- --></A>
   <H3>getIssuer</H3>
   <PRE>ASN1 <B>getIssuer</B>()</PRE>
   
      <UL>Gets the issuer name as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the issuer RDNSequence   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getNextUpdate"><!-- --></A>
   <H3>getNextUpdate</H3>
   <PRE>ASN1 <B>getNextUpdate</B>()</PRE>
   
      <UL>Gets the nextUpdate TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the nextUpdate UTC encoded time   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getRevokedCertificates"><!-- --></A>
   <H3>getRevokedCertificates</H3>
   <PRE>ASN1 <B>getRevokedCertificates</B>()</PRE>
   
      <UL>Gets revoked certificates</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the list of revoked certificates   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getSignatureAlgorithm"><!-- --></A>
   <H3>getSignatureAlgorithm</H3>
   <PRE>ASN1 <B>getSignatureAlgorithm</B>()</PRE>
   
      <UL>Gets the signature algorithm TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the signature algorithm object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getTbsCertificateList"><!-- --></A>
   <H3>getTbsCertificateList</H3>
   <PRE>ASN1 <B>getTbsCertificateList</B>()</PRE>
   
      <UL>Gets the part of the CRL that will be signed</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the TBSCertificate part   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getThisUpdate"><!-- --></A>
   <H3>getThisUpdate</H3>
   <PRE>ASN1 <B>getThisUpdate</B>()</PRE>
   
      <UL>Gets the thisUpdate TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the thisUpdate UTC encoded time   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="loadCRLEntries"><!-- --></A>
   <H3>loadCRLEntries</H3>
   <PRE>Number <B>loadCRLEntries</B>(&lt;String&gt; filename)</PRE>
   
      <UL>Load list of revoked certificates from an existing CRL</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>filename</CODE> -  the file name of the DER encoded CRL  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the value of the CRLNumber extension, 0 if extension not defined or -1 if file could not be loaded 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="reset"><!-- --></A>
   <H3>reset</H3>
   <PRE>void <B>reset</B>()</PRE>
   
      <UL>Resets all internal state variables.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="revokeCertificate"><!-- --></A>
   <H3>revokeCertificate</H3>
   <PRE>void <B>revokeCertificate</B>(&lt;ByteString&gt; serial, &lt;Date&gt; timestamp, reason, ext)</PRE>
   
      <UL>Add a revoked certificate to the list. This adds the complete DER encoded structure.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>serial</CODE> -  the serial number of the certificate to revoke  
      </UL> 
   
     <UL><CODE>timestamp</CODE> -  the revocation time, optional, default is now  
      </UL> 
   
     <UL><CODE>Number</CODE> - ) reason the revocation reason  
      </UL> 
   
     <UL><CODE>ASN1</CODE> - ) ext the crl entry extensions    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setIssuer"><!-- --></A>
   <H3>setIssuer</H3>
   <PRE>void <B>setIssuer</B>(&lt;Object&gt; issuer)</PRE>
   
      <UL>Sets the isser name.

 <p>The issuer name must be a JavaScript object containing the properties:</p>
 <ul>
  <li>C - the country</li>
  <li>O - the organization</li>
  <li>OU - the organization unit</li>
  <li>CN - the common name</li>
 </ul>
 <p>Example:</p>
 <pre>
	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 </pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>issuer</CODE> -  the issuer name    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setNextUpdate"><!-- --></A>
   <H3>setNextUpdate</H3>
   <PRE>void <B>setNextUpdate</B>(&lt;Date&gt; datetime)</PRE>
   
      <UL>Sets the timestamp for the next update</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>datetime</CODE> -  the date and time of the next update    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setSignatureAlgorithm"><!-- --></A>
   <H3>setSignatureAlgorithm</H3>
   <PRE>void <B>setSignatureAlgorithm</B>(&lt;Number&gt; alg)</PRE>
   
      <UL>Sets the signature algorithm.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>alg</CODE> -  the signature algorithm, must be one of Crypto.RSA, Crypto.RSA_SHA256 or Crypto.ECDSA_SHA256    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setThisUpdate"><!-- --></A>
   <H3>setThisUpdate</H3>
   <PRE>void <B>setThisUpdate</B>(&lt;Date&gt; datetime)</PRE>
   
      <UL>Sets the timestamp for this CRL</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>datetime</CODE> -  the current date and time    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-crlgenerator.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="CardOutlineFactory.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="DataOutline.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
CardOutlineFactory
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="CardOutlineFactory";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-CardOutlineFactory2.0.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="AlgorithmInfo.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="CRLGenerator.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class CardOutlineFactory</H2>
<PRE>Object
   |
   +--<b>CardOutlineFactory</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>CardOutlineFactory</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-CardOutlineFactory2.0.js.html'>CardOutlineFactory2.0.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->


   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#CardOutlineFactory()">CardOutlineFactory</A></B>()
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#newDataOutline">newDataOutline</A></B>(data, format)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#newOutlineApplet">newOutlineApplet</A></B>(instance)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#newOutlineATR">newOutlineATR</A></B>(atr)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#newOutlineDataObject">newOutlineDataObject</A></B>(df, id, name, format)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#newOutlineDF">newOutlineDF</A></B>(card, id, name, profile)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#newOutlineEF">newOutlineEF</A></B>(df, name, profile)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#newOutlineFCP">newOutlineFCP</A></B>(fcp)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#newOutlinePKCS15">newOutlinePKCS15</A></B>(pkcs15, aid, at)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#newOutlineRecord">newOutlineRecord</A></B>(ef, no, efdesc)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="CardOutlineFactory()"><!-- --></A><H3>
CardOutlineFactory</H3>
<PRE><B>CardOutlineFactory</B>()</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="newDataOutline"><!-- --></A>
   <H3>newDataOutline</H3>
   <PRE>Object <B>newDataOutline</B>(data, format)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="newOutlineApplet"><!-- --></A>
   <H3>newOutlineApplet</H3>
   <PRE>void <B>newOutlineApplet</B>(instance)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="newOutlineATR"><!-- --></A>
   <H3>newOutlineATR</H3>
   <PRE>Object <B>newOutlineATR</B>(atr)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="newOutlineDataObject"><!-- --></A>
   <H3>newOutlineDataObject</H3>
   <PRE>Object <B>newOutlineDataObject</B>(df, id, name, format)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="newOutlineDF"><!-- --></A>
   <H3>newOutlineDF</H3>
   <PRE>Object <B>newOutlineDF</B>(card, id, name, profile)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="newOutlineEF"><!-- --></A>
   <H3>newOutlineEF</H3>
   <PRE>Object <B>newOutlineEF</B>(df, name, profile)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="newOutlineFCP"><!-- --></A>
   <H3>newOutlineFCP</H3>
   <PRE>Object <B>newOutlineFCP</B>(fcp)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="newOutlinePKCS15"><!-- --></A>
   <H3>newOutlinePKCS15</H3>
   <PRE>Object <B>newOutlinePKCS15</B>(pkcs15, aid, at)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="newOutlineRecord"><!-- --></A>
   <H3>newOutlineRecord</H3>
   <PRE>Object <B>newOutlineRecord</B>(ef, no, efdesc)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-CardOutlineFactory2.0.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="AlgorithmInfo.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="CRLGenerator.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
DataOutline
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="DataOutline";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="CRLGenerator.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="ECCUtils.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class DataOutline</H2>
<PRE>Object
   |
   +--<b>DataOutline</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>DataOutline</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-OutlineCore.js.html'>OutlineCore.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#data">data</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#factory">factory</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#format">format</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!ctxMenuList">ctxMenuList</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#DataOutline()">DataOutline</A></B>(data, format)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#actionListener">actionListener</A></B>(node, action)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#asn1DecoratorHook">asn1DecoratorHook</A></B>(format)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#decorate">decorate</A></B>(format)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#selectedListener">selectedListener</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="data"><!-- --></A>
   <H3>data</H3>
   <PRE>Object&nbsp;<B>data</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="factory"><!-- --></A>
   <H3>factory</H3>
   <PRE>Object&nbsp;<B>factory</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="format"><!-- --></A>
   <H3>format</H3>
   <PRE>Object&nbsp;<B>format</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!ctxMenuList"><!-- --></A>
   <H3>ctxMenuList</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>ctxMenuList</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="DataOutline()"><!-- --></A><H3>
DataOutline</H3>
<PRE><B>DataOutline</B>(data, format)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="actionListener"><!-- --></A>
   <H3>actionListener</H3>
   <PRE>void <B>actionListener</B>(node, action)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="asn1DecoratorHook"><!-- --></A>
   <H3>asn1DecoratorHook</H3>
   <PRE>void <B>asn1DecoratorHook</B>(format)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="decorate"><!-- --></A>
   <H3>decorate</H3>
   <PRE>void <B>decorate</B>(format)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="selectedListener"><!-- --></A>
   <H3>selectedListener</H3>
   <PRE>void <B>selectedListener</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="CRLGenerator.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="ECCUtils.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
ECCUtils
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="ECCUtils";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-eccutils.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="DataOutline.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="EncryptFile.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class ECCUtils</H2>
<PRE>Object
   |
   +--<b>ECCUtils</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>ECCUtils</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-eccutils.js.html'>eccutils.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP160r1">brainpoolP160r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP160t1">brainpoolP160t1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP192r1">brainpoolP192r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP192t1">brainpoolP192t1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP224r1">brainpoolP224r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP224t1">brainpoolP224t1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP256r1">brainpoolP256r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP256t1">brainpoolP256t1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP320r1">brainpoolP320r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP320t1">brainpoolP320t1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP384r1">brainpoolP384r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP384t1">brainpoolP384t1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP512r1">brainpoolP512r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!brainpoolP512t1">brainpoolP512t1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2pnb163v1">c2pnb163v1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2pnb163v2">c2pnb163v2</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2pnb163v3">c2pnb163v3</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2pnb176w1">c2pnb176w1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2pnb208w1">c2pnb208w1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2pnb272w1">c2pnb272w1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2pnb304w1">c2pnb304w1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2pnb368w1">c2pnb368w1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2tnb191v1">c2tnb191v1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2tnb191v2">c2tnb191v2</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2tnb191v3">c2tnb191v3</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2tnb239v1">c2tnb239v1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2tnb239v2">c2tnb239v2</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2tnb239v3">c2tnb239v3</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2tnb359v1">c2tnb359v1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!c2tnb431r1">c2tnb431r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!PAD">PAD</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!prime192v1">prime192v1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!prime192v2">prime192v2</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!prime192v3">prime192v3</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!prime239v1">prime239v1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!prime239v2">prime239v2</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!prime239v3">prime239v3</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!prime256v1">prime256v1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!secp224r1">secp224r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!secp256r1">secp256r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!secp384r1">secp384r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!secp521r1">secp521r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!sect163r2">sect163r2</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!sect233r1">sect233r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!sect283r1">sect283r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!sect409r1">sect409r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!sect571r1">sect571r1</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#ECCUtils()">ECCUtils</A></B>()
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!decodeECParameters">decodeECParameters</A></B>(tlv)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Decode domain parameter from ECParameters


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!ECParametersToString">ECParametersToString</A></B>(key)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!I2O">I2O</A></B>(value, length)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Integer to octet string conversion
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!unwrapSignature">unwrapSignature</A></B>(signature, keylen)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Unwrap a ECDSA signature from the TLV encoding according to RFC3279 into the concatenation
 of the unsigned integer r and s
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!wrapSignature">wrapSignature</A></B>(signature)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Wrap a ECDSA signature in the format r || s into a TLV encoding as defined by RFC 3279
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="!s!brainpoolP160r1"><!-- --></A>
   <H3>brainpoolP160r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP160r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP160t1"><!-- --></A>
   <H3>brainpoolP160t1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP160t1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP192r1"><!-- --></A>
   <H3>brainpoolP192r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP192r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP192t1"><!-- --></A>
   <H3>brainpoolP192t1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP192t1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP224r1"><!-- --></A>
   <H3>brainpoolP224r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP224r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP224t1"><!-- --></A>
   <H3>brainpoolP224t1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP224t1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP256r1"><!-- --></A>
   <H3>brainpoolP256r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP256r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP256t1"><!-- --></A>
   <H3>brainpoolP256t1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP256t1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP320r1"><!-- --></A>
   <H3>brainpoolP320r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP320r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP320t1"><!-- --></A>
   <H3>brainpoolP320t1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP320t1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP384r1"><!-- --></A>
   <H3>brainpoolP384r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP384r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP384t1"><!-- --></A>
   <H3>brainpoolP384t1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP384t1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP512r1"><!-- --></A>
   <H3>brainpoolP512r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP512r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!brainpoolP512t1"><!-- --></A>
   <H3>brainpoolP512t1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>brainpoolP512t1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2pnb163v1"><!-- --></A>
   <H3>c2pnb163v1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2pnb163v1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2pnb163v2"><!-- --></A>
   <H3>c2pnb163v2</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2pnb163v2</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2pnb163v3"><!-- --></A>
   <H3>c2pnb163v3</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2pnb163v3</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2pnb176w1"><!-- --></A>
   <H3>c2pnb176w1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2pnb176w1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2pnb208w1"><!-- --></A>
   <H3>c2pnb208w1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2pnb208w1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2pnb272w1"><!-- --></A>
   <H3>c2pnb272w1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2pnb272w1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2pnb304w1"><!-- --></A>
   <H3>c2pnb304w1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2pnb304w1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2pnb368w1"><!-- --></A>
   <H3>c2pnb368w1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2pnb368w1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2tnb191v1"><!-- --></A>
   <H3>c2tnb191v1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2tnb191v1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2tnb191v2"><!-- --></A>
   <H3>c2tnb191v2</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2tnb191v2</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2tnb191v3"><!-- --></A>
   <H3>c2tnb191v3</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2tnb191v3</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2tnb239v1"><!-- --></A>
   <H3>c2tnb239v1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2tnb239v1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2tnb239v2"><!-- --></A>
   <H3>c2tnb239v2</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2tnb239v2</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2tnb239v3"><!-- --></A>
   <H3>c2tnb239v3</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2tnb239v3</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2tnb359v1"><!-- --></A>
   <H3>c2tnb359v1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2tnb359v1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!c2tnb431r1"><!-- --></A>
   <H3>c2tnb431r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>c2tnb431r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!PAD"><!-- --></A>
   <H3>PAD</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>PAD</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!prime192v1"><!-- --></A>
   <H3>prime192v1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>prime192v1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!prime192v2"><!-- --></A>
   <H3>prime192v2</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>prime192v2</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!prime192v3"><!-- --></A>
   <H3>prime192v3</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>prime192v3</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!prime239v1"><!-- --></A>
   <H3>prime239v1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>prime239v1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!prime239v2"><!-- --></A>
   <H3>prime239v2</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>prime239v2</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!prime239v3"><!-- --></A>
   <H3>prime239v3</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>prime239v3</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!prime256v1"><!-- --></A>
   <H3>prime256v1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>prime256v1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!secp224r1"><!-- --></A>
   <H3>secp224r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>secp224r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!secp256r1"><!-- --></A>
   <H3>secp256r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>secp256r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!secp384r1"><!-- --></A>
   <H3>secp384r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>secp384r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!secp521r1"><!-- --></A>
   <H3>secp521r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>secp521r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!sect163r2"><!-- --></A>
   <H3>sect163r2</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>sect163r2</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!sect233r1"><!-- --></A>
   <H3>sect233r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>sect233r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!sect283r1"><!-- --></A>
   <H3>sect283r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>sect283r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!sect409r1"><!-- --></A>
   <H3>sect409r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>sect409r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!sect571r1"><!-- --></A>
   <H3>sect571r1</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>sect571r1</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="ECCUtils()"><!-- --></A><H3>
ECCUtils</H3>
<PRE><B>ECCUtils</B>()</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="!s!decodeECParameters"><!-- --></A>
   <H3>decodeECParameters</H3>
   <PRE>&lt;static&gt; Object <B>decodeECParameters</B>(tlv)</PRE>
   
      <UL>Decode domain parameter from ECParameters

 <pre>
	ECParameters ::= SEQUENCE {
		version INTEGER{ecpVer1(1)} (ecpVer1),
		fieldID FieldID,
		curve Curve,
		base ECPoint,
		order INTEGER,
		cofactor INTEGER OPTIONAL,
		...
	}

	Curve ::= SEQUENCE {
		a FieldElement,
		b FieldElement,
		seed BIT STRING OPTIONAL
	}

	FieldElement ::= OCTET STRING
	ECPoint ::= OCTET STRING
	FieldID ::= SEQUENCE {
		fieldType OBJECT IDENTIFIER,
		parameters ANY DEFINED BY fieldType
	}
	prime-field OBJECT IDENTIFIER ::= { ansi-x9-62 fieldType(1) 1 }
	Prime-p ::= INTEGER
 </pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!ECParametersToString"><!-- --></A>
   <H3>ECParametersToString</H3>
   <PRE>&lt;static&gt; Object <B>ECParametersToString</B>(key)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!I2O"><!-- --></A>
   <H3>I2O</H3>
   <PRE>&lt;static&gt; Object <B>I2O</B>(value, length)</PRE>
   
      <UL>Integer to octet string conversion</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!unwrapSignature"><!-- --></A>
   <H3>unwrapSignature</H3>
   <PRE>&lt;static&gt; Object <B>unwrapSignature</B>(signature, keylen)</PRE>
   
      <UL>Unwrap a ECDSA signature from the TLV encoding according to RFC3279 into the concatenation
 of the unsigned integer r and s</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>signature</CODE> -  TLV encoded signature  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        concatenation of r and s 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!wrapSignature"><!-- --></A>
   <H3>wrapSignature</H3>
   <PRE>&lt;static&gt; Object <B>wrapSignature</B>(signature)</PRE>
   
      <UL>Wrap a ECDSA signature in the format r || s into a TLV encoding as defined by RFC 3279</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>signature</CODE> -  ByteString containing the concatenation of r and s as unsigned integer values  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        ASN.1 SEQUENCE objects containing two signed integer r and s 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-eccutils.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="DataOutline.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="EncryptFile.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
EncryptFile
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="EncryptFile";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-encrypt-file.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="ECCUtils.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="File.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class EncryptFile</H2>
<PRE>Object
   |
   +--<b>EncryptFile</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>EncryptFile</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-encrypt-file.js.html'>encrypt-file.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->


   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#EncryptFile()">EncryptFile</A></B>()
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#encrypt">encrypt</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#loadPublicKey">loadPublicKey</A></B>(fname)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#selectFileToEncrypt">selectFileToEncrypt</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#selectPublicKey">selectPublicKey</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="EncryptFile()"><!-- --></A><H3>
EncryptFile</H3>
<PRE><B>EncryptFile</B>()</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="encrypt"><!-- --></A>
   <H3>encrypt</H3>
   <PRE>void <B>encrypt</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="loadPublicKey"><!-- --></A>
   <H3>loadPublicKey</H3>
   <PRE>void <B>loadPublicKey</B>(fname)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="selectFileToEncrypt"><!-- --></A>
   <H3>selectFileToEncrypt</H3>
   <PRE>void <B>selectFileToEncrypt</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="selectPublicKey"><!-- --></A>
   <H3>selectPublicKey</H3>
   <PRE>void <B>selectPublicKey</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-encrypt-file.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="ECCUtils.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="File.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
File
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="File";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-file.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="EncryptFile.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="GLOBALS.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class File</H2>
<PRE>Object
   |
   +--<b>File</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>File</B>
   

</DL>
   
   <P>
   <BR/>Class implementing basic support for files
 <BR/><I>Defined in <a href='overview-summary-file.js.html'>file.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#name">name</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#File()">File</A></B>(&lt;String&gt; name)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a reference to a file system object (file or directory)
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#close">close</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Close streams associated with file
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getAbsolutePath">getAbsolutePath</A></B>(&lt;Number&gt; mode)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Return absolute path
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;<a href="File.html">File</a></CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getParentFile">getParentFile</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Return the parent file of this file object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String[]</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#list">list</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Return list of files contained in the directory referenced by the File object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#readAllAsBinary">readAllAsBinary</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Read complete file into ByteString object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#readAllAsString">readAllAsString</A></B>(encoding)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Read complete file into String object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#writeAll">writeAll</A></B>(&lt;Object&gt; obj, encoding)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Write the object to file
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!test">test</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="name"><!-- --></A>
   <H3>name</H3>
   <PRE>Object&nbsp;<B>name</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="File()"><!-- --></A><H3>
File</H3>
<PRE><B>File</B>(&lt;String&gt; name)</PRE>


<UL>
   Create a reference to a file system object (file or directory)
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  relative or absolute file path    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="close"><!-- --></A>
   <H3>close</H3>
   <PRE>void <B>close</B>()</PRE>
   
      <UL>Close streams associated with file</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getAbsolutePath"><!-- --></A>
   <H3>getAbsolutePath</H3>
   <PRE>String <B>getAbsolutePath</B>(&lt;Number&gt; mode)</PRE>
   
      <UL>Return absolute path</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>mode</CODE> -  one of GPSystem.AUTO, GPSystem.CWD, GPSystem.USR or GPSystem.SYS. See GPSystem.mapFilename() for details  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the absolute path 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getParentFile"><!-- --></A>
   <H3>getParentFile</H3>
   <PRE><a href="File.html">File</a> <B>getParentFile</B>()</PRE>
   
      <UL>Return the parent file of this file object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the parent file object or null 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="list"><!-- --></A>
   <H3>list</H3>
   <PRE>String[] <B>list</B>()</PRE>
   
      <UL>Return list of files contained in the directory referenced by the File object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the list of file names 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="readAllAsBinary"><!-- --></A>
   <H3>readAllAsBinary</H3>
   <PRE>ByteString <B>readAllAsBinary</B>()</PRE>
   
      <UL>Read complete file into ByteString object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the binary content 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="readAllAsString"><!-- --></A>
   <H3>readAllAsString</H3>
   <PRE>String <B>readAllAsString</B>(encoding)</PRE>
   
      <UL>Read complete file into String object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the text content 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="writeAll"><!-- --></A>
   <H3>writeAll</H3>
   <PRE>void <B>writeAll</B>(&lt;Object&gt; obj, encoding)</PRE>
   
      <UL>Write the object to file</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>obj</CODE> -  to write to file (Using toString() for any other than String and ByteString)  
      </UL> 
   
     <UL><CODE>one</CODE> -  of UTF8 or ASCII (Default is UTF8)    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!test"><!-- --></A>
   <H3>test</H3>
   <PRE>&lt;static&gt; void <B>test</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-file.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="EncryptFile.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="GLOBALS.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
GLOBALS
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="GLOBALS";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="File.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineATR.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class GLOBALS</H2>
<PRE>Object
   |
   +--<b>GLOBALS</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>GLOBALS</B>
   

</DL>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->


   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!ARRDecorator">ARRDecorator</A></B>(asn1)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!CRLGeneratorTest">CRLGeneratorTest</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!CRTDecorator">CRTDecorator</A></B>(asn1)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!FCPDecorator">FCPDecorator</A></B>(asn1)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Number</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!IntFromBitString">IntFromBitString</A></B>(b)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Return the BIT STRING as integer value
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!PKCS10GeneratorTest">PKCS10GeneratorTest</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!SADecorator">SADecorator</A></B>(asn1)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!X509CertificateGeneratorECCTest">X509CertificateGeneratorECCTest</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!X509CertificateGeneratorRSATest">X509CertificateGeneratorRSATest</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="!s!ARRDecorator"><!-- --></A>
   <H3>ARRDecorator</H3>
   <PRE>&lt;static&gt; void <B>ARRDecorator</B>(asn1)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!CRLGeneratorTest"><!-- --></A>
   <H3>CRLGeneratorTest</H3>
   <PRE>&lt;static&gt; void <B>CRLGeneratorTest</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!CRTDecorator"><!-- --></A>
   <H3>CRTDecorator</H3>
   <PRE>&lt;static&gt; void <B>CRTDecorator</B>(asn1)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!FCPDecorator"><!-- --></A>
   <H3>FCPDecorator</H3>
   <PRE>&lt;static&gt; void <B>FCPDecorator</B>(asn1)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!IntFromBitString"><!-- --></A>
   <H3>IntFromBitString</H3>
   <PRE>&lt;static&gt; Number <B>IntFromBitString</B>(b)</PRE>
   
      <UL>Return the BIT STRING as integer value</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  ASN.1 BIT STRING to convert  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the converted integer   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!PKCS10GeneratorTest"><!-- --></A>
   <H3>PKCS10GeneratorTest</H3>
   <PRE>&lt;static&gt; Object <B>PKCS10GeneratorTest</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!SADecorator"><!-- --></A>
   <H3>SADecorator</H3>
   <PRE>&lt;static&gt; void <B>SADecorator</B>(asn1)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!X509CertificateGeneratorECCTest"><!-- --></A>
   <H3>X509CertificateGeneratorECCTest</H3>
   <PRE>&lt;static&gt; void <B>X509CertificateGeneratorECCTest</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!X509CertificateGeneratorRSATest"><!-- --></A>
   <H3>X509CertificateGeneratorRSATest</H3>
   <PRE>&lt;static&gt; void <B>X509CertificateGeneratorRSATest</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="File.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineATR.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
OutlineATR
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="OutlineATR";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="GLOBALS.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineCard.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class OutlineATR</H2>
<PRE>Object
   |
   +--<b>OutlineATR</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>OutlineATR</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-OutlineCore.js.html'>OutlineCore.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#atr">atr</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#factory">factory</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#OutlineATR()">OutlineATR</A></B>(atr)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#selectedListener">selectedListener</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="atr"><!-- --></A>
   <H3>atr</H3>
   <PRE>Object&nbsp;<B>atr</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="factory"><!-- --></A>
   <H3>factory</H3>
   <PRE>Object&nbsp;<B>factory</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="OutlineATR()"><!-- --></A><H3>
OutlineATR</H3>
<PRE><B>OutlineATR</B>(atr)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="selectedListener"><!-- --></A>
   <H3>selectedListener</H3>
   <PRE>void <B>selectedListener</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="GLOBALS.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineCard.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
OutlineCard
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="OutlineCard";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-explore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineATR.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineDataObject.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class OutlineCard</H2>
<PRE>Object
   |
   +--<b>OutlineCard</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>OutlineCard</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-explore.js.html'>explore.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#atr">atr</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#OutlineCard()">OutlineCard</A></B>()
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#expandListener">expandListener</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="atr"><!-- --></A>
   <H3>atr</H3>
   <PRE>Object&nbsp;<B>atr</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="OutlineCard()"><!-- --></A><H3>
OutlineCard</H3>
<PRE><B>OutlineCard</B>()</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="expandListener"><!-- --></A>
   <H3>expandListener</H3>
   <PRE>void <B>expandListener</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-explore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineATR.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineDataObject.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
OutlineDF
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="OutlineDF";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineDataObject.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineEF.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class OutlineDF</H2>
<PRE>Object
   |
   +--<b>OutlineDF</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>OutlineDF</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-OutlineCore.js.html'>OutlineCore.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#card">card</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#factory">factory</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#id">id</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#parentdf">parentdf</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#profile">profile</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#OutlineDF()">OutlineDF</A></B>(card, id, name, profile)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#expandListener">expandListener</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="card"><!-- --></A>
   <H3>card</H3>
   <PRE>Object&nbsp;<B>card</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="factory"><!-- --></A>
   <H3>factory</H3>
   <PRE>Object&nbsp;<B>factory</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="id"><!-- --></A>
   <H3>id</H3>
   <PRE>Object&nbsp;<B>id</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="parentdf"><!-- --></A>
   <H3>parentdf</H3>
   <PRE>Object&nbsp;<B>parentdf</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="profile"><!-- --></A>
   <H3>profile</H3>
   <PRE>Object&nbsp;<B>profile</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="OutlineDF()"><!-- --></A><H3>
OutlineDF</H3>
<PRE><B>OutlineDF</B>(card, id, name, profile)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="expandListener"><!-- --></A>
   <H3>expandListener</H3>
   <PRE>void <B>expandListener</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineDataObject.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineEF.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
OutlineDataObject
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="OutlineDataObject";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-CardOutlineFactory2.0.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineCard.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineDF.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class OutlineDataObject</H2>
<PRE>Object
   |
   +--<b>OutlineDataObject</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>OutlineDataObject</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-CardOutlineFactory2.0.js.html'>CardOutlineFactory2.0.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#df">df</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#factory">factory</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#format">format</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#id">id</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#OutlineDataObject()">OutlineDataObject</A></B>(factory, df, id, name, format)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#expandListener">expandListener</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="df"><!-- --></A>
   <H3>df</H3>
   <PRE>Object&nbsp;<B>df</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="factory"><!-- --></A>
   <H3>factory</H3>
   <PRE>Object&nbsp;<B>factory</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="format"><!-- --></A>
   <H3>format</H3>
   <PRE>Object&nbsp;<B>format</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="id"><!-- --></A>
   <H3>id</H3>
   <PRE>Object&nbsp;<B>id</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="OutlineDataObject()"><!-- --></A><H3>
OutlineDataObject</H3>
<PRE><B>OutlineDataObject</B>(factory, df, id, name, format)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="expandListener"><!-- --></A>
   <H3>expandListener</H3>
   <PRE>void <B>expandListener</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-CardOutlineFactory2.0.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineCard.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineDF.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
OutlineEF
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="OutlineEF";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineDF.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineFCP.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class OutlineEF</H2>
<PRE>Object
   |
   +--<b>OutlineEF</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>OutlineEF</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-OutlineCore.js.html'>OutlineCore.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#df">df</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#factory">factory</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#profile">profile</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#OutlineEF()">OutlineEF</A></B>(df, name, profile)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#expandListener">expandListener</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="df"><!-- --></A>
   <H3>df</H3>
   <PRE>Object&nbsp;<B>df</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="factory"><!-- --></A>
   <H3>factory</H3>
   <PRE>Object&nbsp;<B>factory</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="profile"><!-- --></A>
   <H3>profile</H3>
   <PRE>Object&nbsp;<B>profile</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="OutlineEF()"><!-- --></A><H3>
OutlineEF</H3>
<PRE><B>OutlineEF</B>(df, name, profile)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="expandListener"><!-- --></A>
   <H3>expandListener</H3>
   <PRE>void <B>expandListener</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineDF.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineFCP.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
OutlineFCP
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="OutlineFCP";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineEF.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlinePKCS15.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class OutlineFCP</H2>
<PRE>Object
   |
   +--<b>OutlineFCP</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>OutlineFCP</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-OutlineCore.js.html'>OutlineCore.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#factory">factory</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#fcp">fcp</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#OutlineFCP()">OutlineFCP</A></B>(fcp)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="factory"><!-- --></A>
   <H3>factory</H3>
   <PRE>Object&nbsp;<B>factory</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="fcp"><!-- --></A>
   <H3>fcp</H3>
   <PRE>Object&nbsp;<B>fcp</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="OutlineFCP()"><!-- --></A><H3>
OutlineFCP</H3>
<PRE><B>OutlineFCP</B>(fcp)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->


<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineEF.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlinePKCS15.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
OutlinePKCS15
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="OutlinePKCS15";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-CardOutlineFactory2.0.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineFCP.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineRecord.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class OutlinePKCS15</H2>
<PRE>Object
   |
   +--<b>OutlinePKCS15</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>OutlinePKCS15</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-CardOutlineFactory2.0.js.html'>CardOutlineFactory2.0.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#aid">aid</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#at">at</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#factory">factory</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#pkcs15">pkcs15</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#OutlinePKCS15()">OutlinePKCS15</A></B>(factory, pkcs15, aid, at)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#expandListener">expandListener</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="aid"><!-- --></A>
   <H3>aid</H3>
   <PRE>Object&nbsp;<B>aid</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="at"><!-- --></A>
   <H3>at</H3>
   <PRE>Object&nbsp;<B>at</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="factory"><!-- --></A>
   <H3>factory</H3>
   <PRE>Object&nbsp;<B>factory</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="pkcs15"><!-- --></A>
   <H3>pkcs15</H3>
   <PRE>Object&nbsp;<B>pkcs15</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="OutlinePKCS15()"><!-- --></A><H3>
OutlinePKCS15</H3>
<PRE><B>OutlinePKCS15</B>(factory, pkcs15, aid, at)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="expandListener"><!-- --></A>
   <H3>expandListener</H3>
   <PRE>void <B>expandListener</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-CardOutlineFactory2.0.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineFCP.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="OutlineRecord.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
OutlineRecord
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="OutlineRecord";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlinePKCS15.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS10Generator.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class OutlineRecord</H2>
<PRE>Object
   |
   +--<b>OutlineRecord</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>OutlineRecord</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-OutlineCore.js.html'>OutlineCore.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#ef">ef</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#efdesc">efdesc</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#factory">factory</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#no">no</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#OutlineRecord()">OutlineRecord</A></B>(ef, no, efdesc)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#expandListener">expandListener</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="ef"><!-- --></A>
   <H3>ef</H3>
   <PRE>Object&nbsp;<B>ef</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="efdesc"><!-- --></A>
   <H3>efdesc</H3>
   <PRE>Object&nbsp;<B>efdesc</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="factory"><!-- --></A>
   <H3>factory</H3>
   <PRE>Object&nbsp;<B>factory</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="no"><!-- --></A>
   <H3>no</H3>
   <PRE>Object&nbsp;<B>no</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="OutlineRecord()"><!-- --></A><H3>
OutlineRecord</H3>
<PRE><B>OutlineRecord</B>(ef, no, efdesc)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="expandListener"><!-- --></A>
   <H3>expandListener</H3>
   <PRE>void <B>expandListener</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-OutlineCore.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlinePKCS15.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS10Generator.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS10Generator
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS10Generator";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-pkcs10.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineRecord.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS10Generator</H2>
<PRE>Object
   |
   +--<b>PKCS10Generator</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS10Generator</B>
   

</DL>
   
   <P>
   <BR/>Class implementing a PKCS#10 certificate request
 <BR/><I>Defined in <a href='overview-summary-pkcs10.js.html'>pkcs10.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#crypto">crypto</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!cRLSign">cRLSign</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!dataEncipherment">dataEncipherment</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!decipherOnly">decipherOnly</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!digitalSignature">digitalSignature</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!encipherOnly">encipherOnly</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!keyAgreement">keyAgreement</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!keyCertSign">keyCertSign</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!keyEncipherment">keyEncipherment</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!nonRepudiation">nonRepudiation</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS10Generator()">PKCS10Generator</A></B>(&lt;Crypto&gt; crypto)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a PKCS#10 certificate request
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addBasicConstraintsExtension">addBasicConstraintsExtension</A></B>(&lt;Boolean&gt; cA, &lt;Number&gt; pathLenConstraint)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds the BasicConstraints extension.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addExtendedKeyUsageExtension">addExtendedKeyUsageExtension</A></B>(keyusages)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds extended key usages
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addExtension">addExtension</A></B>(&lt;String&gt; extnID, extnValue)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds an extension to the certificate


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addKeyUsageExtension">addKeyUsageExtension</A></B>(flags)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds the key usage extension.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#generateCertificationRequest">generateCertificationRequest</A></B>(privateKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Generates the certificate.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getAttributes">getAttributes</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the attributes as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getExtensions">getExtensions</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the extension attribute as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getSignatureAlgorithm">getSignatureAlgorithm</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the signature algorithm TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getSubject">getSubject</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the subject name as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getSubjectPublicKeyInfo">getSubjectPublicKeyInfo</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the subject's public key as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getTbsRequest">getTbsRequest</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the part of the request that will be signed
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#reset">reset</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Resets all internal state variables.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setPublicKey">setPublicKey</A></B>(&lt;Key&gt; publicKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the subjects public key


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setSignatureAlgorithm">setSignatureAlgorithm</A></B>(&lt;Number&gt; alg)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the signature algorithm.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setSubject">setSubject</A></B>(&lt;Object&gt; subject)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the subject name.
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="crypto"><!-- --></A>
   <H3>crypto</H3>
   <PRE>Object&nbsp;<B>crypto</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!cRLSign"><!-- --></A>
   <H3>cRLSign</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>cRLSign</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!dataEncipherment"><!-- --></A>
   <H3>dataEncipherment</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>dataEncipherment</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!decipherOnly"><!-- --></A>
   <H3>decipherOnly</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>decipherOnly</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!digitalSignature"><!-- --></A>
   <H3>digitalSignature</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>digitalSignature</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!encipherOnly"><!-- --></A>
   <H3>encipherOnly</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>encipherOnly</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!keyAgreement"><!-- --></A>
   <H3>keyAgreement</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>keyAgreement</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!keyCertSign"><!-- --></A>
   <H3>keyCertSign</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>keyCertSign</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!keyEncipherment"><!-- --></A>
   <H3>keyEncipherment</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>keyEncipherment</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!nonRepudiation"><!-- --></A>
   <H3>nonRepudiation</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>nonRepudiation</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS10Generator()"><!-- --></A><H3>
PKCS10Generator</H3>
<PRE><B>PKCS10Generator</B>(&lt;Crypto&gt; crypto)</PRE>


<UL>
   Create a PKCS#10 certificate request
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>crypto</CODE> -  the crypto provider to use for signing operations    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="addBasicConstraintsExtension"><!-- --></A>
   <H3>addBasicConstraintsExtension</H3>
   <PRE>void <B>addBasicConstraintsExtension</B>(&lt;Boolean&gt; cA, &lt;Number&gt; pathLenConstraint)</PRE>
   
      <UL>Adds the BasicConstraints extension.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>cA</CODE> -  the certificate belongs to a CA  
      </UL> 
   
     <UL><CODE>pathLenConstraint</CODE> -  the maximum number of subordinate CA certificates    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addExtendedKeyUsageExtension"><!-- --></A>
   <H3>addExtendedKeyUsageExtension</H3>
   <PRE>void <B>addExtendedKeyUsageExtension</B>(keyusages)</PRE>
   
      <UL>Adds extended key usages</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  list of extended key usage object identifier    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addExtension"><!-- --></A>
   <H3>addExtension</H3>
   <PRE>void <B>addExtension</B>(&lt;String&gt; extnID, extnValue)</PRE>
   
      <UL>Adds an extension to the certificate

 <p>The structure is defined as:</p>
 <pre>
    Extension  ::=  SEQUENCE  {
        extnID      OBJECT IDENTIFIER,
        extnValue   OCTET STRING
                    -- contains the DER encoding of an ASN.1 value
                    -- corresponding to the extension type identified
                    -- by extnID
        }
</pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>extnID</CODE> -  the extensions object identifier  
      </UL> 
   
     <UL><CODE>the</CODE> -  extension value as ByteString    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addKeyUsageExtension"><!-- --></A>
   <H3>addKeyUsageExtension</H3>
   <PRE>void <B>addKeyUsageExtension</B>(flags)</PRE>
   
      <UL>Adds the key usage extension.

 <p>The following flags are defined:</p>
 <pre>
 PKCS10Generator.digitalSignature = 0x0080;
 PKCS10Generator.nonRepudiation   = 0x0040;
 PKCS10Generator.keyEncipherment  = 0x0020;
 PKCS10Generator.dataEncipherment = 0x0010;
 PKCS10Generator.keyAgreement     = 0x0008;
 PKCS10Generator.keyCertSign      = 0x0004;
 PKCS10Generator.cRLSign          = 0x0002;
 PKCS10Generator.encipherOnly     = 0x0001;
 PKCS10Generator.decipherOnly     = 0x8000;
 </pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  key usage flags as combination of the flags defined above.    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="generateCertificationRequest"><!-- --></A>
   <H3>generateCertificationRequest</H3>
   <PRE>ASN1 <B>generateCertificationRequest</B>(privateKey)</PRE>
   
      <UL>Generates the certificate.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the generated certificate   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getAttributes"><!-- --></A>
   <H3>getAttributes</H3>
   <PRE>ASN1 <B>getAttributes</B>()</PRE>
   
      <UL>Gets the attributes as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the request attributes   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getExtensions"><!-- --></A>
   <H3>getExtensions</H3>
   <PRE>ASN1 <B>getExtensions</B>()</PRE>
   
      <UL>Gets the extension attribute as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the certificate extensions   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getSignatureAlgorithm"><!-- --></A>
   <H3>getSignatureAlgorithm</H3>
   <PRE>ASN1 <B>getSignatureAlgorithm</B>()</PRE>
   
      <UL>Gets the signature algorithm TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the signature algorithm object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getSubject"><!-- --></A>
   <H3>getSubject</H3>
   <PRE>ASN1 <B>getSubject</B>()</PRE>
   
      <UL>Gets the subject name as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the issuer RDNSequence   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getSubjectPublicKeyInfo"><!-- --></A>
   <H3>getSubjectPublicKeyInfo</H3>
   <PRE>ASN1 <B>getSubjectPublicKeyInfo</B>()</PRE>
   
      <UL>Gets the subject's public key as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the subject's public key info   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getTbsRequest"><!-- --></A>
   <H3>getTbsRequest</H3>
   <PRE>ASN1 <B>getTbsRequest</B>()</PRE>
   
      <UL>Gets the part of the request that will be signed</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the TBSCertificate part   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="reset"><!-- --></A>
   <H3>reset</H3>
   <PRE>void <B>reset</B>()</PRE>
   
      <UL>Resets all internal state variables.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setPublicKey"><!-- --></A>
   <H3>setPublicKey</H3>
   <PRE>void <B>setPublicKey</B>(&lt;Key&gt; publicKey)</PRE>
   
      <UL>Sets the subjects public key

 <p>The methods accepts ECC and RSA Public Keys.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>publicKey</CODE> -  the subjects public key    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setSignatureAlgorithm"><!-- --></A>
   <H3>setSignatureAlgorithm</H3>
   <PRE>void <B>setSignatureAlgorithm</B>(&lt;Number&gt; alg)</PRE>
   
      <UL>Sets the signature algorithm. Currently only Crypto.RSA is supported</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>alg</CODE> -  the signature algorithm, only Crypto.RSA supported    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setSubject"><!-- --></A>
   <H3>setSubject</H3>
   <PRE>void <B>setSubject</B>(&lt;Object&gt; subject)</PRE>
   
      <UL>Sets the subject name.

 <p>The subject name must be a JavaScript object containing the properties:</p>
 <ul>
  <li>C - the country</li>
  <li>O - the organization</li>
  <li>OU - the organization unit</li>
  <li>CN - the common name</li>
 </ul>
 <p>Example:</p>
 <pre>
	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
 </pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>subject</CODE> -  the subject name    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <UL>   
   <B>See:</B><UL>- PKIXCommon.encodeName()</UL>
   </UL>
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-pkcs10.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="OutlineRecord.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS10Generator.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_ApplicationTemplate.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15</H2>
<PRE>Object
   |
   +--<b>PKCS15</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15</B>
   

</DL>
   
   <P>
   <BR/><p>This class provides for direct access to a PKCS#15 data structure on a card.</p>
 <p>The calling application will typically use:</p>
 <pre>
 var card = new Card(_scsh3.reader);
 var p15 = new PKCS15(card);
 var appllist = p15.readApplicationDirectory();
 var aid;
 for (var i in appllist) {
   print(i);
   aid = i;
 }
 var at = appllist[aid];
 p15.readObjectListForApplication(at);
 for (var i = 0; i < at.objlist.length; i++) {
   print(at.objlist[i]);
 }
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#card">card</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15()">PKCS15</A></B>(&lt;Card&gt; card)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create an object to access the PKCS#15 structure on a card.
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;PKCS15_ApplicationTemplate[]</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getAidList">getAidList</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Return the hash table of application templates
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;<a href="PKCS15_CIAInfo.html">PKCS15_CIAInfo</a></CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getCIAInfo">getCIAInfo</A></B>(&lt;<a href="PKCS15_Path.html">PKCS15_Path</a>&gt; path)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Reads and return the CIAInfo structure referenced by the PKCS#15 path element.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;PKCS15_ApplicationTemplate[]</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#readApplicationDirectory">readApplicationDirectory</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Reads the application directory from EF_DIR.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1[]</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#readCardObjects">readCardObjects</A></B>(&lt;String&gt; df, &lt;<a href="PKCS15_Path.html">PKCS15_Path</a>&gt; path)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Reads PKCS#15 objects from card file which can be either transparent or record oriented.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#readObjectListForApplication">readObjectListForApplication</A></B>(&lt;<a href="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</a>&gt; at)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Reads all CIO objects for an application and adds the CIO objects to the objlist property
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ASN1[]</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!parseObjectList">parseObjectList</A></B>(&lt;ByteString&gt; data)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Parse a list of TLV objects
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="card"><!-- --></A>
   <H3>card</H3>
   <PRE>Object&nbsp;<B>card</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15()"><!-- --></A><H3>
PKCS15</H3>
<PRE><B>PKCS15</B>(&lt;Card&gt; card)</PRE>


<UL>
   Create an object to access the PKCS#15 structure on a card.
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>card</CODE> -  the card object to use for card access.    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="getAidList"><!-- --></A>
   <H3>getAidList</H3>
   <PRE>PKCS15_ApplicationTemplate[] <B>getAidList</B>()</PRE>
   
      <UL>Return the hash table of application templates</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the hash table of application templates   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getCIAInfo"><!-- --></A>
   <H3>getCIAInfo</H3>
   <PRE><a href="PKCS15_CIAInfo.html">PKCS15_CIAInfo</a> <B>getCIAInfo</B>(&lt;<a href="PKCS15_Path.html">PKCS15_Path</a>&gt; path)</PRE>
   
      <UL>Reads and return the CIAInfo structure referenced by the PKCS#15 path element.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>path</CODE> -  the path to the CIAInfo file  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the CIAInfo description   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="readApplicationDirectory"><!-- --></A>
   <H3>readApplicationDirectory</H3>
   <PRE>PKCS15_ApplicationTemplate[] <B>readApplicationDirectory</B>()</PRE>
   
      <UL>Reads the application directory from EF_DIR.

 <p>The method supports linear variable and transparent EFs. It creates an internal table of
    of applications.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        hash table of application templates index by application identifier   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="readCardObjects"><!-- --></A>
   <H3>readCardObjects</H3>
   <PRE>ASN1[] <B>readCardObjects</B>(&lt;String&gt; df, &lt;<a href="PKCS15_Path.html">PKCS15_Path</a>&gt; path)</PRE>
   
      <UL>Reads PKCS#15 objects from card file which can be either transparent or record oriented.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>df</CODE> -  the current DF in OCF path notation.  
      </UL> 
   
     <UL><CODE>path</CODE> -  the relative or absolute path to the EF  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the array of TLV objects read from the file   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="readObjectListForApplication"><!-- --></A>
   <H3>readObjectListForApplication</H3>
   <PRE>void <B>readObjectListForApplication</B>(&lt;<a href="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</a>&gt; at)</PRE>
   
      <UL>Reads all CIO objects for an application and adds the CIO objects to the objlist property</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>at</CODE> -  the application template    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!parseObjectList"><!-- --></A>
   <H3>parseObjectList</H3>
   <PRE>&lt;static&gt; ASN1[] <B>parseObjectList</B>(&lt;ByteString&gt; data)</PRE>
   
      <UL>Parse a list of TLV objects</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>data</CODE> -  the binary data with TLV objects  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the list of ASN1 objects   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS10Generator.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_ApplicationTemplate.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_ApplicationTemplate
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_ApplicationTemplate";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_AuthenticationObject.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_ApplicationTemplate</H2>
<PRE>Object
   |
   +--<b>PKCS15_ApplicationTemplate</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_ApplicationTemplate</B>
   

</DL>
   
   <P>
   <BR/><p>This class provides for access to an application template.</p>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;String</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#aid">aid</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The application identifier for this application.</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;<a href="PKCS15_CIODDO.html">PKCS15_CIODDO</a></CODE></FONT></TD>
   <TD><CODE><B><A HREF="#ddo">ddo</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The PKCS#15 Directory Data Object (DDO) for this application.</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;String</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#label">label</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The application label for this application.</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;PKCS15_CIO[]</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#objlist">objlist</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The list of Cryptographic Information Objects (CIO).</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;String</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#path">path</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The path for this application.</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_ApplicationTemplate()">PKCS15_ApplicationTemplate</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Creates a structure to access an application template from EF_DIR.
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="aid"><!-- --></A>
   <H3>aid</H3>
   <PRE>String&nbsp;<B>aid</B></PRE>
   <UL>
   The application identifier for this application.
   
   </UL>
   <HR>
   
   <A NAME="ddo"><!-- --></A>
   <H3>ddo</H3>
   <PRE><a href="PKCS15_CIODDO.html">PKCS15_CIODDO</a>&nbsp;<B>ddo</B></PRE>
   <UL>
   The PKCS#15 Directory Data Object (DDO) for this application.
   
   </UL>
   <HR>
   
   <A NAME="label"><!-- --></A>
   <H3>label</H3>
   <PRE>String&nbsp;<B>label</B></PRE>
   <UL>
   The application label for this application.
   
   </UL>
   <HR>
   
   <A NAME="objlist"><!-- --></A>
   <H3>objlist</H3>
   <PRE>PKCS15_CIO[]&nbsp;<B>objlist</B></PRE>
   <UL>
   The list of Cryptographic Information Objects (CIO).
   
   </UL>
   <HR>
   
   <A NAME="path"><!-- --></A>
   <H3>path</H3>
   <PRE>String&nbsp;<B>path</B></PRE>
   <UL>
   The path for this application.
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_ApplicationTemplate()"><!-- --></A><H3>
PKCS15_ApplicationTemplate</H3>
<PRE><B>PKCS15_ApplicationTemplate</B>(tlv)</PRE>


<UL>
   Creates a structure to access an application template from EF_DIR.
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO DDO    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>Object <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_AuthenticationObject.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_AuthenticationObject
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_AuthenticationObject";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_ApplicationTemplate.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_Certificate.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_AuthenticationObject</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<a href='PKCS15_CommonAuthenticationObjectAttributes.html'>PKCS15_CommonAuthenticationObjectAttributes</a>
               |
               +--<b>PKCS15_AuthenticationObject</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_AuthenticationObject</B>
   
      <DT>extends <a href='PKCS15_CommonAuthenticationObjectAttributes.html'>PKCS15_CommonAuthenticationObjectAttributes</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds authentication object attributes to the common authentication object class.</p>
 <p>The class supports password objects.</p>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/><B>See:</B><UL>- <a href="PKCS15_CommonAuthenticationObjectAttributes.html#">PKCS15_CommonAuthenticationObjectAttributes is the base class</a></UL>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#pwd">pwd</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   
   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CommonAuthenticationObjectAttributes.html">PKCS15_CommonAuthenticationObjectAttributes</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CommonAuthenticationObjectAttributes.html#authIdThis'>authIdThis</a>, <a href='PKCS15_CommonAuthenticationObjectAttributes.html#authReference'>authReference</a>, <a href='PKCS15_CommonAuthenticationObjectAttributes.html#seIdentifier'>seIdentifier</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;


   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_AuthenticationObject()">PKCS15_AuthenticationObject</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create an Authentication Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CommonAuthenticationObjectAttributes.html">PKCS15_CommonAuthenticationObjectAttributes</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CommonAuthenticationObjectAttributes.html#toString'>toString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="pwd"><!-- --></A>
   <H3>pwd</H3>
   <PRE>Object&nbsp;<B>pwd</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_AuthenticationObject()"><!-- --></A><H3>
PKCS15_AuthenticationObject</H3>
<PRE><B>PKCS15_AuthenticationObject</B>(tlv)</PRE>


<UL>
   Create an Authentication Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CommonAuthenticationObjectAttributes.html#">PKCS15_CommonAuthenticationObjectAttributes is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->


<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_ApplicationTemplate.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_Certificate.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_CIAInfo
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_CIAInfo";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_Certificate.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CIO.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_CIAInfo</H2>
<PRE>Object
   |
   +--<b>PKCS15_CIAInfo</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_CIAInfo</B>
   

</DL>
   
   <P>
   <BR/><p>Class to decode CIAInfo objects.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CIAInfo ::= SEQUENCE {
		version INTEGER {v1(0),v2(1)} (v1|v2,...),
		serialNumber OCTET STRING OPTIONAL,
		manufacturerID Label OPTIONAL,
		label [0] Label OPTIONAL,
		cardflags CardFlags,
		seInfo SEQUENCE OF SecurityEnvironmentInfo OPTIONAL,
		recordInfo [1] RecordInfo OPTIONAL,
		supportedAlgorithms [2] SEQUENCE OF AlgorithmInfo OPTIONAL,
		issuerId [3] Label OPTIONAL,
		holderId [4] Label OPTIONAL,
		lastUpdate [5] LastUpdate OPTIONAL,
		preferredLanguage PrintableString OPTIONAL, -- In accordance with IETF RFC 1766
		profileIndication [6] SEQUENCE OF ProfileIndication OPTIONAL,
		...
		} (CONSTRAINED BY { -- Each AlgorithmInfo.reference value shall be unique --})
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#cardflags">cardflags</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#holderId">holderId</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#issuerId">issuerId</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#label">label</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#lastUpdate">lastUpdate</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#manufacturerID">manufacturerID</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#preferredLanguage">preferredLanguage</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#profileIndication">profileIndication</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#recordInfo">recordInfo</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#seInfo">seInfo</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#serialNumber">serialNumber</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#supportedAlgorithms">supportedAlgorithms</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#tlv">tlv</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#version">version</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_CIAInfo()">PKCS15_CIAInfo</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Creates a CIAInfo object.
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getCardflagsAsString">getCardflagsAsString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the card flags as string of concatenated flags.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="cardflags"><!-- --></A>
   <H3>cardflags</H3>
   <PRE>Object&nbsp;<B>cardflags</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="holderId"><!-- --></A>
   <H3>holderId</H3>
   <PRE>Object&nbsp;<B>holderId</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="issuerId"><!-- --></A>
   <H3>issuerId</H3>
   <PRE>Object&nbsp;<B>issuerId</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="label"><!-- --></A>
   <H3>label</H3>
   <PRE>Object&nbsp;<B>label</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="lastUpdate"><!-- --></A>
   <H3>lastUpdate</H3>
   <PRE>Object&nbsp;<B>lastUpdate</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="manufacturerID"><!-- --></A>
   <H3>manufacturerID</H3>
   <PRE>Object&nbsp;<B>manufacturerID</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="preferredLanguage"><!-- --></A>
   <H3>preferredLanguage</H3>
   <PRE>Object&nbsp;<B>preferredLanguage</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="profileIndication"><!-- --></A>
   <H3>profileIndication</H3>
   <PRE>Object&nbsp;<B>profileIndication</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="recordInfo"><!-- --></A>
   <H3>recordInfo</H3>
   <PRE>Object&nbsp;<B>recordInfo</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="seInfo"><!-- --></A>
   <H3>seInfo</H3>
   <PRE>Object&nbsp;<B>seInfo</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="serialNumber"><!-- --></A>
   <H3>serialNumber</H3>
   <PRE>Object&nbsp;<B>serialNumber</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="supportedAlgorithms"><!-- --></A>
   <H3>supportedAlgorithms</H3>
   <PRE>Object&nbsp;<B>supportedAlgorithms</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="tlv"><!-- --></A>
   <H3>tlv</H3>
   <PRE>Object&nbsp;<B>tlv</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="version"><!-- --></A>
   <H3>version</H3>
   <PRE>Object&nbsp;<B>version</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_CIAInfo()"><!-- --></A><H3>
PKCS15_CIAInfo</H3>
<PRE><B>PKCS15_CIAInfo</B>(tlv)</PRE>


<UL>
   Creates a CIAInfo object.
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIAInfo    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="getCardflagsAsString"><!-- --></A>
   <H3>getCardflagsAsString</H3>
   <PRE>String <B>getCardflagsAsString</B>()</PRE>
   
      <UL>Gets the card flags as string of concatenated flags.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string containing the flags separated by a blank   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string representation of the object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_Certificate.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CIO.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_CIO
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_CIO";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CIAInfo.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CIODDO.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_CIO</H2>
<PRE>Object
   |
   +--<b>PKCS15_CIO</b>
</PRE>

   
      <DL>
      <DT>
         <B>Direct Known Subclasses:</B> 
         <DD>
                  <a href='PKCS15_CommonCertificateAttributes.html'>PKCS15_CommonCertificateAttributes</a>, <a href='PKCS15_CommonAuthenticationObjectAttributes.html'>PKCS15_CommonAuthenticationObjectAttributes</a>, <a href='PKCS15_CommonDataContainerObjectAttributes.html'>PKCS15_CommonDataContainerObjectAttributes</a>, <a href='PKCS15_CommonKeyAttributes.html'>PKCS15_CommonKeyAttributes</a>
         </DD>
      </DL>
   


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_CIO</B>
   

</DL>
   
   <P>
   <BR/><p>This is the base class for all cryptographic objects in a PKCS#15 data structure.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonObjectAttributes ::= SEQUENCE {
		label Label OPTIONAL,
		flags CommonObjectFlags OPTIONAL,
		authId Identifier OPTIONAL,
		userConsent INTEGER (1..cia-ub-userConsent) OPTIONAL,
		accessControlRules SEQUENCE SIZE (1..MAX) OF AccessControlRule OPTIONAL,
		...
	} (CONSTRAINED BY {-- authId should be present if flags.private is set.
	-- It shall equal an authID in one authentication object in the AOD -- })
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#accessControlRules">accessControlRules</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#authId">authId</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#flags">flags</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#label">label</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#tlv">tlv</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#userConsent">userConsent</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_CIO()">PKCS15_CIO</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Cryptographic Information Object (CIO)
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getFlagsAsString">getFlagsAsString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the common object flags as string of concatenated flags.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="accessControlRules"><!-- --></A>
   <H3>accessControlRules</H3>
   <PRE>Object&nbsp;<B>accessControlRules</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="authId"><!-- --></A>
   <H3>authId</H3>
   <PRE>Object&nbsp;<B>authId</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="flags"><!-- --></A>
   <H3>flags</H3>
   <PRE>Object&nbsp;<B>flags</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="label"><!-- --></A>
   <H3>label</H3>
   <PRE>Object&nbsp;<B>label</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="tlv"><!-- --></A>
   <H3>tlv</H3>
   <PRE>Object&nbsp;<B>tlv</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="userConsent"><!-- --></A>
   <H3>userConsent</H3>
   <PRE>Object&nbsp;<B>userConsent</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_CIO()"><!-- --></A><H3>
PKCS15_CIO</H3>
<PRE><B>PKCS15_CIO</B>(tlv)</PRE>


<UL>
   Create a Cryptographic Information Object (CIO)
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="getFlagsAsString"><!-- --></A>
   <H3>getFlagsAsString</H3>
   <PRE>String <B>getFlagsAsString</B>()</PRE>
   
      <UL>Gets the common object flags as string of concatenated flags.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string containing the flags separated by a blank   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string representation of the object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CIAInfo.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CIODDO.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_CIODDO
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_CIODDO";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CIO.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonAuthenticationObjectAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_CIODDO</H2>
<PRE>Object
   |
   +--<b>PKCS15_CIODDO</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_CIODDO</B>
   

</DL>
   
   <P>
   <BR/><p>Class to decode CIO DDO objects.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CIODDO ::= SEQUENCE {
 		providerId OBJECT IDENTIFIER OPTIONAL,
 		odfPath Path OPTIONAL,
		ciaInfoPath [0] Path OPTIONAL,
		aid [APPLICATION 15] OCTET STRING (SIZE(1..16)),
		(CONSTRAINED BY {-- Must be an AID in accordance with ISO/IEC 7816-4--})
		OPTIONAL,
		... -- For future extensions
 } -- Context tag 1 is historical and shall not be used
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#ciaInfoPath">ciaInfoPath</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#odfPath">odfPath</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#providerId">providerId</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_CIODDO()">PKCS15_CIODDO</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Creates a CIO DDO object from data usually stored in EF_DIR.
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="ciaInfoPath"><!-- --></A>
   <H3>ciaInfoPath</H3>
   <PRE>Object&nbsp;<B>ciaInfoPath</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="odfPath"><!-- --></A>
   <H3>odfPath</H3>
   <PRE>Object&nbsp;<B>odfPath</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="providerId"><!-- --></A>
   <H3>providerId</H3>
   <PRE>Object&nbsp;<B>providerId</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_CIODDO()"><!-- --></A><H3>
PKCS15_CIODDO</H3>
<PRE><B>PKCS15_CIODDO</B>(tlv)</PRE>


<UL>
   Creates a CIO DDO object from data usually stored in EF_DIR.
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO DDO    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string representation of the object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CIO.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonAuthenticationObjectAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_Certificate
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_Certificate";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_AuthenticationObject.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CIAInfo.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_Certificate</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<a href='PKCS15_CommonCertificateAttributes.html'>PKCS15_CommonCertificateAttributes</a>
               |
               +--<b>PKCS15_Certificate</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_Certificate</B>
   
      <DT>extends <a href='PKCS15_CommonCertificateAttributes.html'>PKCS15_CommonCertificateAttributes</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds X.509 certificate attributes to the common certificate attribute class.</p>
 <p>The class decodes the following ASN.1 syntax for X.509 certificates:</p>
 <pre>
 X509CertificateAttributes ::= SEQUENCE {
 value ObjectValue { Certificate },
 subject Name OPTIONAL,
 issuer [0] Name OPTIONAL,
 serialNumber CertificateSerialNumber OPTIONAL,
 ... -- For future extensions
 }
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/><B>See:</B><UL>- <a href="PKCS15_CommonCertificateAttributes.html#">PKCS15_CommonCertificateAttributes is the base class</a></UL>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#type">type</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   
   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CommonCertificateAttributes.html">PKCS15_CommonCertificateAttributes</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CommonCertificateAttributes.html#iD'>iD</a>, <a href='PKCS15_CommonCertificateAttributes.html#authority'>authority</a>, <a href='PKCS15_CommonCertificateAttributes.html#identifier'>identifier</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;


   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_Certificate()">PKCS15_Certificate</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Certificate Attribute Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CommonCertificateAttributes.html">PKCS15_CommonCertificateAttributes</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CommonCertificateAttributes.html#toString'>toString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="type"><!-- --></A>
   <H3>type</H3>
   <PRE>Object&nbsp;<B>type</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_Certificate()"><!-- --></A><H3>
PKCS15_Certificate</H3>
<PRE><B>PKCS15_Certificate</B>(tlv)</PRE>


<UL>
   Create a Certificate Attribute Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CommonCertificateAttributes.html#">PKCS15_CommonCertificateAttributes is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->


<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_AuthenticationObject.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CIAInfo.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_CommonAuthenticationObjectAttributes
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_CommonAuthenticationObjectAttributes";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CIODDO.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonCertificateAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_CommonAuthenticationObjectAttributes</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<b>PKCS15_CommonAuthenticationObjectAttributes</b>
</PRE>

   
      <DL>
      <DT>
         <B>Direct Known Subclasses:</B> 
         <DD>
                  <a href='PKCS15_AuthenticationObject.html'>PKCS15_AuthenticationObject</a>
         </DD>
      </DL>
   


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_CommonAuthenticationObjectAttributes</B>
   
      <DT>extends <a href='PKCS15_CIO.html'>PKCS15_CIO</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds common authentication object attributes to the base CIO class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonAuthenticationObjectAttributes ::= SEQUENCE {
    authId Identifier OPTIONAL,
    authReference Reference OPTIONAL,
    seIdentifier [0] Reference OPTIONAL,
    ... -- For future extensions
 }
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/><B>See:</B><UL>- <a href="PKCS15_CIO.html#">PKCS15_CIO is the base class</a></UL>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#authIdThis">authIdThis</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#authReference">authReference</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#seIdentifier">seIdentifier</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   
   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_CommonAuthenticationObjectAttributes()">PKCS15_CommonAuthenticationObjectAttributes</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Common Authentication Object Attribute Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="authIdThis"><!-- --></A>
   <H3>authIdThis</H3>
   <PRE>Object&nbsp;<B>authIdThis</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="authReference"><!-- --></A>
   <H3>authReference</H3>
   <PRE>Object&nbsp;<B>authReference</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="seIdentifier"><!-- --></A>
   <H3>seIdentifier</H3>
   <PRE>Object&nbsp;<B>seIdentifier</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_CommonAuthenticationObjectAttributes()"><!-- --></A><H3>
PKCS15_CommonAuthenticationObjectAttributes</H3>
<PRE><B>PKCS15_CommonAuthenticationObjectAttributes</B>(tlv)</PRE>


<UL>
   Create a Common Authentication Object Attribute Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CIO.html#">PKCS15_CIO is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string representation of the object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CIODDO.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonCertificateAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_CommonCertificateAttributes
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_CommonCertificateAttributes";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonAuthenticationObjectAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonDataContainerObjectAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_CommonCertificateAttributes</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<b>PKCS15_CommonCertificateAttributes</b>
</PRE>

   
      <DL>
      <DT>
         <B>Direct Known Subclasses:</B> 
         <DD>
                  <a href='PKCS15_Certificate.html'>PKCS15_Certificate</a>
         </DD>
      </DL>
   


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_CommonCertificateAttributes</B>
   
      <DT>extends <a href='PKCS15_CIO.html'>PKCS15_CIO</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds common certificate attributes to the base CIO class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonCertificateAttributes ::= SEQUENCE {
 iD Identifier,
 authority BOOLEAN DEFAULT FALSE,
 identifier CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 certHash [0] CertHash OPTIONAL,
 trustedUsage [1] Usage OPTIONAL,
 identifiers [2] SEQUENCE OF CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 validity [4] Validity OPTIONAL,
 ...
 } -- Context tag [3] is reserved for historical reasons
 NOTE PKCS #15 uses context tag [3].
 Usage ::= SEQUENCE {
 keyUsage KeyUsage OPTIONAL,
 extKeyUsage SEQUENCE SIZE (1..MAX) OF OBJECT IDENTIFIER OPTIONAL,
 ...
 } (WITH COMPONENTS {..., keyUsage PRESENT} | WITH COMPONENTS {..., extKeyUsage PRESENT})
 </pre>
 <BR/><B>See:</B><UL>- <a href="PKCS15_CIO.html#">PKCS15_CIO is the base class</a></UL><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#authority">authority</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#iD">iD</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#identifier">identifier</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   
   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_CommonCertificateAttributes()">PKCS15_CommonCertificateAttributes</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Common Certificate Attribute Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="authority"><!-- --></A>
   <H3>authority</H3>
   <PRE>Object&nbsp;<B>authority</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="iD"><!-- --></A>
   <H3>iD</H3>
   <PRE>Object&nbsp;<B>iD</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="identifier"><!-- --></A>
   <H3>identifier</H3>
   <PRE>Object&nbsp;<B>identifier</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_CommonCertificateAttributes()"><!-- --></A><H3>
PKCS15_CommonCertificateAttributes</H3>
<PRE><B>PKCS15_CommonCertificateAttributes</B>(tlv)</PRE>


<UL>
   Create a Common Certificate Attribute Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CIO.html#">PKCS15_CIO is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        content information   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonAuthenticationObjectAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonDataContainerObjectAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_CommonDataContainerObjectAttributes
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_CommonDataContainerObjectAttributes";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonCertificateAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonKeyAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_CommonDataContainerObjectAttributes</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<b>PKCS15_CommonDataContainerObjectAttributes</b>
</PRE>

   
      <DL>
      <DT>
         <B>Direct Known Subclasses:</B> 
         <DD>
                  <a href='PKCS15_DataContainerObject.html'>PKCS15_DataContainerObject</a>
         </DD>
      </DL>
   


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_CommonDataContainerObjectAttributes</B>
   
      <DT>extends <a href='PKCS15_CIO.html'>PKCS15_CIO</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds common data container attributes to the base CIO class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonDataContainerObjectAttributes ::= SEQUENCE {
 		applicationName Label OPTIONAL,
 		applicationOID OBJECT IDENTIFIER OPTIONAL,
 		iD Identifier OPTIONAL,
 		... -- For future extensions
 		} (WITH COMPONENTS {..., applicationName PRESENT}
 		| WITH COMPONENTS {..., applicationOID PRESENT})
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/><B>See:</B><UL>- <a href="PKCS15_CIO.html#">PKCS15_CIO is the base class</a></UL>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#applicationName">applicationName</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#applicationOID">applicationOID</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#iD">iD</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   
   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_CommonDataContainerObjectAttributes()">PKCS15_CommonDataContainerObjectAttributes</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Common Data Container Object Attribute Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="applicationName"><!-- --></A>
   <H3>applicationName</H3>
   <PRE>Object&nbsp;<B>applicationName</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="applicationOID"><!-- --></A>
   <H3>applicationOID</H3>
   <PRE>Object&nbsp;<B>applicationOID</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="iD"><!-- --></A>
   <H3>iD</H3>
   <PRE>Object&nbsp;<B>iD</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_CommonDataContainerObjectAttributes()"><!-- --></A><H3>
PKCS15_CommonDataContainerObjectAttributes</H3>
<PRE><B>PKCS15_CommonDataContainerObjectAttributes</B>(tlv)</PRE>


<UL>
   Create a Common Data Container Object Attribute Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CIO.html#">PKCS15_CIO is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string representation of the object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonCertificateAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonKeyAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_CommonKeyAttributes
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_CommonKeyAttributes";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonDataContainerObjectAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonPrivateKeyAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_CommonKeyAttributes</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<b>PKCS15_CommonKeyAttributes</b>
</PRE>

   
      <DL>
      <DT>
         <B>Direct Known Subclasses:</B> 
         <DD>
                  <a href='PKCS15_CommonPrivateKeyAttributes.html'>PKCS15_CommonPrivateKeyAttributes</a>, <a href='PKCS15_CommonSecretKeyAttributes.html'>PKCS15_CommonSecretKeyAttributes</a>
         </DD>
      </DL>
   


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_CommonKeyAttributes</B>
   
      <DT>extends <a href='PKCS15_CIO.html'>PKCS15_CIO</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds common key attributes to the base CIO class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonKeyAttributes ::= SEQUENCE {
		iD Identifier,
		usage KeyUsageFlags,
		native BOOLEAN DEFAULT TRUE,
		accessFlags KeyAccessFlags OPTIONAL,
		keyReference KeyReference OPTIONAL,
		startDate GeneralizedTime OPTIONAL,
		endDate [0] GeneralizedTime OPTIONAL,
		algReference [1] SEQUENCE OF Reference OPTIONAL,
		... -- For future extensions
		}
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/><B>See:</B><UL>- <a href="PKCS15_CIO.html#">PKCS15_CIO is the base class</a></UL>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#accessFlags">accessFlags</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#algReference">algReference</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#endDate">endDate</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#iD">iD</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#keyReference">keyReference</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#native_">native_</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#startDate">startDate</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#usage">usage</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   
   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_CommonKeyAttributes()">PKCS15_CommonKeyAttributes</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Common Key Attribute Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getAccessFlagsAsString">getAccessFlagsAsString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the key access flags as string of concatenated flags.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getUsageAsString">getUsageAsString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the key usage flags as string of concatenated flags.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="accessFlags"><!-- --></A>
   <H3>accessFlags</H3>
   <PRE>Object&nbsp;<B>accessFlags</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="algReference"><!-- --></A>
   <H3>algReference</H3>
   <PRE>Object&nbsp;<B>algReference</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="endDate"><!-- --></A>
   <H3>endDate</H3>
   <PRE>Object&nbsp;<B>endDate</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="iD"><!-- --></A>
   <H3>iD</H3>
   <PRE>Object&nbsp;<B>iD</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="keyReference"><!-- --></A>
   <H3>keyReference</H3>
   <PRE>Object&nbsp;<B>keyReference</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="native_"><!-- --></A>
   <H3>native_</H3>
   <PRE>Object&nbsp;<B>native_</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="startDate"><!-- --></A>
   <H3>startDate</H3>
   <PRE>Object&nbsp;<B>startDate</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="usage"><!-- --></A>
   <H3>usage</H3>
   <PRE>Object&nbsp;<B>usage</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_CommonKeyAttributes()"><!-- --></A><H3>
PKCS15_CommonKeyAttributes</H3>
<PRE><B>PKCS15_CommonKeyAttributes</B>(tlv)</PRE>


<UL>
   Create a Common Key Attribute Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CIO.html#">PKCS15_CIO is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="getAccessFlagsAsString"><!-- --></A>
   <H3>getAccessFlagsAsString</H3>
   <PRE>String <B>getAccessFlagsAsString</B>()</PRE>
   
      <UL>Gets the key access flags as string of concatenated flags.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string containing the flags separated by a blank   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getUsageAsString"><!-- --></A>
   <H3>getUsageAsString</H3>
   <PRE>String <B>getUsageAsString</B>()</PRE>
   
      <UL>Gets the key usage flags as string of concatenated flags.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string containing the flags separated by a blank   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        content information   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonDataContainerObjectAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonPrivateKeyAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_CommonPrivateKeyAttributes
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_CommonPrivateKeyAttributes";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonKeyAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonSecretKeyAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_CommonPrivateKeyAttributes</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<a href='PKCS15_CommonKeyAttributes.html'>PKCS15_CommonKeyAttributes</a>
               |
               +--<b>PKCS15_CommonPrivateKeyAttributes</b>
</PRE>

   
      <DL>
      <DT>
         <B>Direct Known Subclasses:</B> 
         <DD>
                  <a href='PKCS15_PrivateKey.html'>PKCS15_PrivateKey</a>
         </DD>
      </DL>
   


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_CommonPrivateKeyAttributes</B>
   
      <DT>extends <a href='PKCS15_CommonKeyAttributes.html'>PKCS15_CommonKeyAttributes</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds common private key attributes to the common key attribute class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonPrivateKeyAttributes ::= SEQUENCE {
 name Name OPTIONAL,
 keyIdentifiers [0] SEQUENCE OF CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 generalName [1] GeneralNames OPTIONAL,
 ... -- For future extensions
 }
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/><B>See:</B><UL>- <a href="PKCS15_CommonKeyAttributes.html#">PKCS15_CommonKeyAttributes is the base class</a></UL>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->


   
   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CommonKeyAttributes.html#iD'>iD</a>, <a href='PKCS15_CommonKeyAttributes.html#usage'>usage</a>, <a href='PKCS15_CommonKeyAttributes.html#native_'>native_</a>, <a href='PKCS15_CommonKeyAttributes.html#accessFlags'>accessFlags</a>, <a href='PKCS15_CommonKeyAttributes.html#keyReference'>keyReference</a>, <a href='PKCS15_CommonKeyAttributes.html#startDate'>startDate</a>, <a href='PKCS15_CommonKeyAttributes.html#endDate'>endDate</a>, <a href='PKCS15_CommonKeyAttributes.html#algReference'>algReference</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;


   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_CommonPrivateKeyAttributes()">PKCS15_CommonPrivateKeyAttributes</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Common Private Key Attribute Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CommonKeyAttributes.html#getUsageAsString'>getUsageAsString</a>, <a href='PKCS15_CommonKeyAttributes.html#getAccessFlagsAsString'>getAccessFlagsAsString</a>, <a href='PKCS15_CommonKeyAttributes.html#toString'>toString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_CommonPrivateKeyAttributes()"><!-- --></A><H3>
PKCS15_CommonPrivateKeyAttributes</H3>
<PRE><B>PKCS15_CommonPrivateKeyAttributes</B>(tlv)</PRE>


<UL>
   Create a Common Private Key Attribute Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CommonKeyAttributes.html#">PKCS15_CommonKeyAttributes is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->


<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonKeyAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_CommonSecretKeyAttributes.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_CommonSecretKeyAttributes
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_CommonSecretKeyAttributes";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonPrivateKeyAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_DataContainerObject.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_CommonSecretKeyAttributes</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<a href='PKCS15_CommonKeyAttributes.html'>PKCS15_CommonKeyAttributes</a>
               |
               +--<b>PKCS15_CommonSecretKeyAttributes</b>
</PRE>

   
      <DL>
      <DT>
         <B>Direct Known Subclasses:</B> 
         <DD>
                  <a href='PKCS15_SecretKey.html'>PKCS15_SecretKey</a>
         </DD>
      </DL>
   


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_CommonSecretKeyAttributes</B>
   
      <DT>extends <a href='PKCS15_CommonKeyAttributes.html'>PKCS15_CommonKeyAttributes</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds common secret key attributes to the common key attribute class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonSecretKeyAttributes ::= SEQUENCE {
   keyLen INTEGER OPTIONAL, -- keylength (in bits)
   -- For future extensions
  }
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/><B>See:</B><UL>- <a href="PKCS15_CommonKeyAttributes.html#">PKCS15_CommonKeyAttributes is the base class</a></UL>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->


   
   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CommonKeyAttributes.html#iD'>iD</a>, <a href='PKCS15_CommonKeyAttributes.html#usage'>usage</a>, <a href='PKCS15_CommonKeyAttributes.html#native_'>native_</a>, <a href='PKCS15_CommonKeyAttributes.html#accessFlags'>accessFlags</a>, <a href='PKCS15_CommonKeyAttributes.html#keyReference'>keyReference</a>, <a href='PKCS15_CommonKeyAttributes.html#startDate'>startDate</a>, <a href='PKCS15_CommonKeyAttributes.html#endDate'>endDate</a>, <a href='PKCS15_CommonKeyAttributes.html#algReference'>algReference</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;


   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_CommonSecretKeyAttributes()">PKCS15_CommonSecretKeyAttributes</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Common Secret Key Attribute Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CommonKeyAttributes.html#getUsageAsString'>getUsageAsString</a>, <a href='PKCS15_CommonKeyAttributes.html#getAccessFlagsAsString'>getAccessFlagsAsString</a>, <a href='PKCS15_CommonKeyAttributes.html#toString'>toString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_CommonSecretKeyAttributes()"><!-- --></A><H3>
PKCS15_CommonSecretKeyAttributes</H3>
<PRE><B>PKCS15_CommonSecretKeyAttributes</B>(tlv)</PRE>


<UL>
   Create a Common Secret Key Attribute Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CommonKeyAttributes.html#">PKCS15_CommonKeyAttributes is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->


<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonPrivateKeyAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_DataContainerObject.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_DataContainerObject
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_DataContainerObject";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonSecretKeyAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_PasswordAuthenticationObject.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_DataContainerObject</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<a href='PKCS15_CommonDataContainerObjectAttributes.html'>PKCS15_CommonDataContainerObjectAttributes</a>
               |
               +--<b>PKCS15_DataContainerObject</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_DataContainerObject</B>
   
      <DT>extends <a href='PKCS15_CommonDataContainerObjectAttributes.html'>PKCS15_CommonDataContainerObjectAttributes</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds data container objects to the common data container object attributes class.</p>
 <p>The class decodes the following ASN.1 syntax for opaque data objects with indirect path reference:</p>
 <pre>
 OpaqueDOAttributes ::= ObjectValue {CIO-OPAQUE.&Type}

 ObjectValue { Type } ::= CHOICE {
 		indirect ReferencedValue,
 		direct [0] Type,
 		... -- For future extensions
 }

 ReferencedValue ::= CHOICE {
 		path Path,
 		url URL
 } -- The syntax of the object is determined by the context
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/><B>See:</B><UL>- <a href="PKCS15_CommonDataContainerObjectAttributes.html#">PKCS15_CommonDataContainerObjectAttributes is the base class</a></UL>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->


   
   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CommonDataContainerObjectAttributes.html">PKCS15_CommonDataContainerObjectAttributes</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CommonDataContainerObjectAttributes.html#applicationName'>applicationName</a>, <a href='PKCS15_CommonDataContainerObjectAttributes.html#applicationOID'>applicationOID</a>, <a href='PKCS15_CommonDataContainerObjectAttributes.html#iD'>iD</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;


   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_DataContainerObject()">PKCS15_DataContainerObject</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Data Container Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_DataContainerObject()"><!-- --></A><H3>
PKCS15_DataContainerObject</H3>
<PRE><B>PKCS15_DataContainerObject</B>(tlv)</PRE>


<UL>
   Create a Data Container Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CommonDataContainerObjectAttributes.html#">PKCS15_CommonDataContainerObjectAttributes is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string representation of the object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_CommonSecretKeyAttributes.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_PasswordAuthenticationObject.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_PasswordAuthenticationObject
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_PasswordAuthenticationObject";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_DataContainerObject.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_Path.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_PasswordAuthenticationObject</H2>
<PRE>Object
   |
   +--<b>PKCS15_PasswordAuthenticationObject</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_PasswordAuthenticationObject</B>
   

</DL>
   
   <P>
   <BR/><p>This class supports password authentication objects.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 PasswordAttributes ::= SEQUENCE {
	pwdFlags PasswordFlags,
	pwdType PasswordType,
	minLength INTEGER (cia-lb-minPasswordLength..cia-ub-minPasswordLength),
	storedLength INTEGER (0..cia-ub-storedPasswordLength),
	maxLength INTEGER OPTIONAL,
	pwdReference [0] Reference DEFAULT 0,
	padChar OCTET STRING (SIZE(1)) OPTIONAL,
	lastPasswordChange GeneralizedTime OPTIONAL,
	path Path OPTIONAL,
	... -- For future extensions
 }
 PasswordFlags ::= BIT STRING {
	case-sensitive (0),
	local (1),
	change-disabled (2),
	unblock-disabled (3),
	initialized (4),
	needs-padding (5),
	unblockingPassword (6),
	soPassword (7),
	disable-allowed (8),
	integrity-protected (9),
	confidentiality-protected (10),
	exchangeRefData (11)
	} (CONSTRAINED BY { -- "unblockingPassword" and "soPassword" cannot both be set -- })
 PasswordType ::= ENUMERATED {bcd, ascii-numeric, utf8, half-nibble-bcd, iso9564-1, ...}
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#maxLength">maxLength</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#minLength">minLength</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#pwdFlags">pwdFlags</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#pwdReference">pwdReference</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#pwdType">pwdType</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#storedLength">storedLength</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_PasswordAuthenticationObject()">PKCS15_PasswordAuthenticationObject</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Password Authentication Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getPwdFlagsAsString">getPwdFlagsAsString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the password flags as string of concatenated flags.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getPwdTypeAsString">getPwdTypeAsString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the password type.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="maxLength"><!-- --></A>
   <H3>maxLength</H3>
   <PRE>Object&nbsp;<B>maxLength</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="minLength"><!-- --></A>
   <H3>minLength</H3>
   <PRE>Object&nbsp;<B>minLength</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="pwdFlags"><!-- --></A>
   <H3>pwdFlags</H3>
   <PRE>Object&nbsp;<B>pwdFlags</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="pwdReference"><!-- --></A>
   <H3>pwdReference</H3>
   <PRE>Object&nbsp;<B>pwdReference</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="pwdType"><!-- --></A>
   <H3>pwdType</H3>
   <PRE>Object&nbsp;<B>pwdType</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="storedLength"><!-- --></A>
   <H3>storedLength</H3>
   <PRE>Object&nbsp;<B>storedLength</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_PasswordAuthenticationObject()"><!-- --></A><H3>
PKCS15_PasswordAuthenticationObject</H3>
<PRE><B>PKCS15_PasswordAuthenticationObject</B>(tlv)</PRE>


<UL>
   Create a Password Authentication Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="getPwdFlagsAsString"><!-- --></A>
   <H3>getPwdFlagsAsString</H3>
   <PRE>String <B>getPwdFlagsAsString</B>()</PRE>
   
      <UL>Gets the password flags as string of concatenated flags.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string containing the flags separated by a blank   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getPwdTypeAsString"><!-- --></A>
   <H3>getPwdTypeAsString</H3>
   <PRE>String <B>getPwdTypeAsString</B>()</PRE>
   
      <UL>Gets the password type.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string containing the password type (BCD, ASCII-NUMERIC, UTF8, HALF-NIBBLE-BCD or ISO9564-1)   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string representation of the object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_DataContainerObject.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_Path.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_Path
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_Path";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_PasswordAuthenticationObject.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_PrivateKey.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_Path</H2>
<PRE>Object
   |
   +--<b>PKCS15_Path</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_Path</B>
   

</DL>
   
   <P>
   <BR/><p>This class provides for access to PKCS#15 structures.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 Path ::= SEQUENCE {
 		efidOrPath OCTET STRING,
		index INTEGER (0..cia-ub-index) OPTIONAL,
		length [0] INTEGER (0..cia-ub-index) OPTIONAL
	}( WITH COMPONENTS {..., index PRESENT, length PRESENT}|
 	   WITH COMPONENTS {..., index ABSENT, length ABSENT})
 </pre>
 <BR/><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#efidOrPath">efidOrPath</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#index">index</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#length">length</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_Path()">PKCS15_Path</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Creates a PKCS#15 path from the encoded TLV structure
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getAbsolutePath">getAbsolutePath</A></B>(&lt;String&gt; df)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the absolute in the OCF format.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert the object to a human readable string
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="efidOrPath"><!-- --></A>
   <H3>efidOrPath</H3>
   <PRE>Object&nbsp;<B>efidOrPath</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="index"><!-- --></A>
   <H3>index</H3>
   <PRE>Object&nbsp;<B>index</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="length"><!-- --></A>
   <H3>length</H3>
   <PRE>Object&nbsp;<B>length</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_Path()"><!-- --></A><H3>
PKCS15_Path</H3>
<PRE><B>PKCS15_Path</B>(tlv)</PRE>


<UL>
   Creates a PKCS#15 path from the encoded TLV structure
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the path    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="getAbsolutePath"><!-- --></A>
   <H3>getAbsolutePath</H3>
   <PRE>String <B>getAbsolutePath</B>(&lt;String&gt; df)</PRE>
   
      <UL>Gets the absolute in the OCF format.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>df</CODE> -  the current directory  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the path in OCF encoding   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>String <B>toString</B>()</PRE>
   
      <UL>Convert the object to a human readable string</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the string representation of the object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_PasswordAuthenticationObject.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_PrivateKey.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_PrivateKey
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_PrivateKey";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_Path.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_SecretKey.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_PrivateKey</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<a href='PKCS15_CommonKeyAttributes.html'>PKCS15_CommonKeyAttributes</a>
               |
               +--<a href='PKCS15_CommonPrivateKeyAttributes.html'>PKCS15_CommonPrivateKeyAttributes</a>
                     |
                     +--<b>PKCS15_PrivateKey</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_PrivateKey</B>
   
      <DT>extends <a href='PKCS15_CommonPrivateKeyAttributes.html'>PKCS15_CommonPrivateKeyAttributes</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds private key attributes to the common private key attribute class.</p>
 <p>The class supports RSA and ECC keys.</p>
 <p>RSA keys are decoded from the following ASN.1 structure:</p>
 <pre>
 PrivateRSAKeyAttributes ::= SEQUENCE {
 value Path,
 modulusLength INTEGER, -- modulus length in bits, e.g. 1024
 keyInfo KeyInfo {NULL, PublicKeyOperations} OPTIONAL,
 ... -- For future extensions
 }
 </pre>
 <p>ECC keys are decoded from the following ASN.1 structure:</p>
 <pre>
 PrivateECKeyAttributes ::= SEQUENCE {
 value Path,
 keyInfo KeyInfo {Parameters, PublicKeyOperations} OPTIONAL,
 ... -- For future extensions
 }
 </pre>
 <BR/><B>See:</B><UL>- <a href="PKCS15_CommonPrivateKeyAttributes.html#">PKCS15_CommonPrivateKeyAttributes is the base class</a></UL><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#type">type</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   
   

   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CommonKeyAttributes.html#iD'>iD</a>, <a href='PKCS15_CommonKeyAttributes.html#usage'>usage</a>, <a href='PKCS15_CommonKeyAttributes.html#native_'>native_</a>, <a href='PKCS15_CommonKeyAttributes.html#accessFlags'>accessFlags</a>, <a href='PKCS15_CommonKeyAttributes.html#keyReference'>keyReference</a>, <a href='PKCS15_CommonKeyAttributes.html#startDate'>startDate</a>, <a href='PKCS15_CommonKeyAttributes.html#endDate'>endDate</a>, <a href='PKCS15_CommonKeyAttributes.html#algReference'>algReference</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;


   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_PrivateKey()">PKCS15_PrivateKey</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Private Key Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CommonKeyAttributes.html#getUsageAsString'>getUsageAsString</a>, <a href='PKCS15_CommonKeyAttributes.html#getAccessFlagsAsString'>getAccessFlagsAsString</a>, <a href='PKCS15_CommonKeyAttributes.html#toString'>toString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="type"><!-- --></A>
   <H3>type</H3>
   <PRE>Object&nbsp;<B>type</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_PrivateKey()"><!-- --></A><H3>
PKCS15_PrivateKey</H3>
<PRE><B>PKCS15_PrivateKey</B>(tlv)</PRE>


<UL>
   Create a Private Key Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CommonPrivateKeyAttributes.html#">PKCS15_CommonPrivateKeyAttributes is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->


<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_Path.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS15_SecretKey.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS15_SecretKey
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS15_SecretKey";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_PrivateKey.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS8.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS15_SecretKey</H2>
<PRE>Object
   |
   +--<a href='PKCS15_CIO.html'>PKCS15_CIO</a>
         |
         +--<a href='PKCS15_CommonKeyAttributes.html'>PKCS15_CommonKeyAttributes</a>
               |
               +--<a href='PKCS15_CommonSecretKeyAttributes.html'>PKCS15_CommonSecretKeyAttributes</a>
                     |
                     +--<b>PKCS15_SecretKey</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS15_SecretKey</B>
   
      <DT>extends <a href='PKCS15_CommonSecretKeyAttributes.html'>PKCS15_CommonSecretKeyAttributes</a> 
   

</DL>
   
   <P>
   <BR/><p>This class adds secret key attributes to the common secret key attribute class.</p>
 <BR/><B>See:</B><UL>- <a href="PKCS15_CommonSecretKeyAttributes.html#">PKCS15_CommonSecretKeyAttributes is the base class</a></UL><I>Defined in <a href='overview-summary-p15classes.js.html'>p15classes.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#type">type</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   
   

   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CommonKeyAttributes.html#iD'>iD</a>, <a href='PKCS15_CommonKeyAttributes.html#usage'>usage</a>, <a href='PKCS15_CommonKeyAttributes.html#native_'>native_</a>, <a href='PKCS15_CommonKeyAttributes.html#accessFlags'>accessFlags</a>, <a href='PKCS15_CommonKeyAttributes.html#keyReference'>keyReference</a>, <a href='PKCS15_CommonKeyAttributes.html#startDate'>startDate</a>, <a href='PKCS15_CommonKeyAttributes.html#endDate'>endDate</a>, <a href='PKCS15_CommonKeyAttributes.html#algReference'>algReference</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;


   
   &nbsp;<A NAME=""><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
   <TD><B>Fields inherited from class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A></B></TD>
   </TR>
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD><CODE>
   <a href='PKCS15_CIO.html#tlv'>tlv</a>, <a href='PKCS15_CIO.html#label'>label</a>, <a href='PKCS15_CIO.html#flags'>flags</a>, <a href='PKCS15_CIO.html#authId'>authId</a>, <a href='PKCS15_CIO.html#userConsent'>userConsent</a>, <a href='PKCS15_CIO.html#accessControlRules'>accessControlRules</a>
   </CODE></TD>
   </TR>
</TABLE>
&nbsp;



<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS15_SecretKey()">PKCS15_SecretKey</A></B>(tlv)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a Secret Key Object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->



&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CommonKeyAttributes.html#getUsageAsString'>getUsageAsString</a>, <a href='PKCS15_CommonKeyAttributes.html#getAccessFlagsAsString'>getAccessFlagsAsString</a>, <a href='PKCS15_CommonKeyAttributes.html#toString'>toString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="PKCS15_CIO.html">PKCS15_CIO</a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<a href='PKCS15_CIO.html#getFlagsAsString'>getFlagsAsString</a>
</CODE></TD>
</TR>
</TABLE>
&nbsp;

<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="type"><!-- --></A>
   <H3>type</H3>
   <PRE>Object&nbsp;<B>type</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS15_SecretKey()"><!-- --></A><H3>
PKCS15_SecretKey</H3>
<PRE><B>PKCS15_SecretKey</B>(tlv)</PRE>


<UL>
   Create a Secret Key Object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  tlv structure containing the CIO  
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<UL>   
<B>See:</B><UL>- <a href="PKCS15_CommonSecretKeyAttributes.html#">PKCS15_CommonSecretKeyAttributes is the base class</a></UL>
</UL>

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->


<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-p15classes.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_PrivateKey.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKCS8.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKCS8
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKCS8";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-pkcs8.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_SecretKey.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKIXCommon.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKCS8</H2>
<PRE>Object
   |
   +--<b>PKCS8</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKCS8</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-pkcs8.js.html'>pkcs8.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!idEcPublicKey">idEcPublicKey</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!PAD">PAD</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!rsaEncryption">rsaEncryption</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKCS8()">PKCS8</A></B>()
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Empty constructor
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!convertUnsignedInteger">convertUnsignedInteger</A></B>(&lt;ByteString&gt; value)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Key</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!decodeECCKeyFromPKCS8Format">decodeECCKeyFromPKCS8Format</A></B>(domainParameter, encodedKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Decode a given PKCS#8 ECC private key from the given ByteString and create a GP key object


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Key</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!decodeKeyFromPKCS8Format">decodeKeyFromPKCS8Format</A></B>(encodedKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Decode a given PKCS#8 private key from the given ByteString and create a GP key object


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Key</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!decodeRSAKeyFromPKCS8Format">decodeRSAKeyFromPKCS8Format</A></B>(&lt;ASN1&gt; algparam, &lt;ASN1&gt; privateKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Decode a given PKCS#8 RSA private key from the given ByteString and create a GP key object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!decodeUncompressedECPoint">decodeUncompressedECPoint</A></B>(uncompressedPoint)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert uncompressed format to x and y coordinates
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!encodeECCKeyUsingPKCS8Format">encodeECCKeyUsingPKCS8Format</A></B>(privateKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Encode a given GP ECC private key as specified by the PKCS#8 format
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!encodeKeyUsingPKCS8Format">encodeKeyUsingPKCS8Format</A></B>(privateKey, publicKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Encode a given GP private key as specified by the PKCS#8 format


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!encodeRSAKey">encodeRSAKey</A></B>(&lt;Key&gt; privateKey, publicKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Encode RSA private key as defined in PKCS#1


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!encodeRSAKeyUsingPKCS8Format">encodeRSAKeyUsingPKCS8Format</A></B>(privateKey, publicKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Encode a given GP RSA private key as specified by the PKCS#8 format
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!encodeUncompressedECPoint">encodeUncompressedECPoint</A></B>(&lt;ByteString&gt; x,&lt;ByteString&gt; y)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert x/y coordinates to uncompressed format
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!I2O">I2O</A></B>(&lt;ByteString&gt; value, length)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Integer to octet string conversion
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!stripLeadingZeros">stripLeadingZeros</A></B>(&lt;ByteString&gt; value, size)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Strips leading zeros of a ByteString
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!test">test</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Simple self-test
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="!s!idEcPublicKey"><!-- --></A>
   <H3>idEcPublicKey</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>idEcPublicKey</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!PAD"><!-- --></A>
   <H3>PAD</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>PAD</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!rsaEncryption"><!-- --></A>
   <H3>rsaEncryption</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>rsaEncryption</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKCS8()"><!-- --></A><H3>
PKCS8</H3>
<PRE><B>PKCS8</B>()</PRE>


<UL>
   Empty constructor
</UL>



   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="!s!convertUnsignedInteger"><!-- --></A>
   <H3>convertUnsignedInteger</H3>
   <PRE>&lt;static&gt; ByteString <B>convertUnsignedInteger</B>(&lt;ByteString&gt; value)</PRE>
   
      <UL>Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.

 This prevent interpretation of the integer representation if converted into
 a signed ASN1 INTEGER.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>value</CODE> -  the value to convert  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the converted value   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!decodeECCKeyFromPKCS8Format"><!-- --></A>
   <H3>decodeECCKeyFromPKCS8Format</H3>
   <PRE>&lt;static&gt; Key <B>decodeECCKeyFromPKCS8Format</B>(domainParameter, encodedKey)</PRE>
   
      <UL>Decode a given PKCS#8 ECC private key from the given ByteString and create a GP key object

 For now we only support the decoding of ECC private keys in a prime field</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>algparam</CODE> -  the algorithm parameter from AlgorithmInfo  
      </UL> 
   
     <UL><CODE>privateKey</CODE> -  the privateKey element from the PKCS#8 structure  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the GP key object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!decodeKeyFromPKCS8Format"><!-- --></A>
   <H3>decodeKeyFromPKCS8Format</H3>
   <PRE>&lt;static&gt; Key <B>decodeKeyFromPKCS8Format</B>(encodedKey)</PRE>
   
      <UL>Decode a given PKCS#8 private key from the given ByteString and create a GP key object

 For now we only support the decoding of ECC private keys in a prime field</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  private key object in PKCS#8 format  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the GP key object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!decodeRSAKeyFromPKCS8Format"><!-- --></A>
   <H3>decodeRSAKeyFromPKCS8Format</H3>
   <PRE>&lt;static&gt; Key <B>decodeRSAKeyFromPKCS8Format</B>(&lt;ASN1&gt; algparam, &lt;ASN1&gt; privateKey)</PRE>
   
      <UL>Decode a given PKCS#8 RSA private key from the given ByteString and create a GP key object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>algparam</CODE> -  the algorithm parameter from AlgorithmInfo  
      </UL> 
   
     <UL><CODE>privateKey</CODE> -  the privateKey element from the PKCS#8 structure  
      </UL> 
   
     <UL><CODE>the</CODE> -  private key object in PKCS#8 format  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the GP key object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!decodeUncompressedECPoint"><!-- --></A>
   <H3>decodeUncompressedECPoint</H3>
   <PRE>&lt;static&gt; Object <B>decodeUncompressedECPoint</B>(uncompressedPoint)</PRE>
   
      <UL>Convert uncompressed format to x and y coordinates</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>compressed</CODE> -  point  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        Object with ByteString properties x and y 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!encodeECCKeyUsingPKCS8Format"><!-- --></A>
   <H3>encodeECCKeyUsingPKCS8Format</H3>
   <PRE>&lt;static&gt; ByteString <B>encodeECCKeyUsingPKCS8Format</B>(privateKey)</PRE>
   
      <UL>Encode a given GP ECC private key as specified by the PKCS#8 format</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  private key object that should be encoded  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the encoded PKCS#8 private key   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!encodeKeyUsingPKCS8Format"><!-- --></A>
   <H3>encodeKeyUsingPKCS8Format</H3>
   <PRE>&lt;static&gt; ByteString <B>encodeKeyUsingPKCS8Format</B>(privateKey, publicKey)</PRE>
   
      <UL>Encode a given GP private key as specified by the PKCS#8 format

 For now we only support the encoding of ECC private keys in a prime field</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  private key object that should be encoded  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the encoded PKCS#8 private key   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!encodeRSAKey"><!-- --></A>
   <H3>encodeRSAKey</H3>
   <PRE>&lt;static&gt; ByteString <B>encodeRSAKey</B>(&lt;Key&gt; privateKey, publicKey)</PRE>
   
      <UL>Encode RSA private key as defined in PKCS#1

 RSAPrivateKey ::= SEQUENCE {
     version           Version,
     modulus           INTEGER,  -- n
     publicExponent    INTEGER,  -- e
     privateExponent   INTEGER,  -- d
     prime1            INTEGER,  -- p
     prime2            INTEGER,  -- q
     exponent1         INTEGER,  -- d mod (p-1)
     exponent2         INTEGER,  -- d mod (q-1)
     coefficient       INTEGER,  -- (inverse of q) mod p
     otherPrimeInfos   OtherPrimeInfos OPTIONAL
 }</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>privateKey</CODE> -  the private RSA key in CRT format  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the encoded RSA key 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!encodeRSAKeyUsingPKCS8Format"><!-- --></A>
   <H3>encodeRSAKeyUsingPKCS8Format</H3>
   <PRE>&lt;static&gt; ByteString <B>encodeRSAKeyUsingPKCS8Format</B>(privateKey, publicKey)</PRE>
   
      <UL>Encode a given GP RSA private key as specified by the PKCS#8 format</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  private key object that should be encoded  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the encoded PKCS#8 private key   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!encodeUncompressedECPoint"><!-- --></A>
   <H3>encodeUncompressedECPoint</H3>
   <PRE>&lt;static&gt; ByteString <B>encodeUncompressedECPoint</B>(&lt;ByteString&gt; x,&lt;ByteString&gt; y)</PRE>
   
      <UL>Convert x/y coordinates to uncompressed format</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>x</CODE> -  the x coordinate  
      </UL> 
   
     <UL><CODE>y</CODE> -  the y coordinate  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        ByteString containing compressed format 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!I2O"><!-- --></A>
   <H3>I2O</H3>
   <PRE>&lt;static&gt; ByteString <B>I2O</B>(&lt;ByteString&gt; value, length)</PRE>
   
      <UL>Integer to octet string conversion</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>value</CODE> -  the encoded integer value  
      </UL> 
   
     <UL><CODE>the</CODE> -  number of digits  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the truncated or padded result 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!stripLeadingZeros"><!-- --></A>
   <H3>stripLeadingZeros</H3>
   <PRE>&lt;static&gt; ByteString <B>stripLeadingZeros</B>(&lt;ByteString&gt; value, size)</PRE>
   
      <UL>Strips leading zeros of a ByteString</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>value</CODE> -  the ByteString value  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the stripped ByteString object, may be an empty ByteString   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!test"><!-- --></A>
   <H3>test</H3>
   <PRE>&lt;static&gt; void <B>test</B>()</PRE>
   
      <UL>Simple self-test</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-pkcs8.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS15_SecretKey.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="PKIXCommon.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
PKIXCommon
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="PKIXCommon";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-pkixcommon.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS8.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestCaseRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class PKIXCommon</H2>
<PRE>Object
   |
   +--<b>PKIXCommon</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>PKIXCommon</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-pkixcommon.js.html'>pkixcommon.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!cRLSign">cRLSign</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!dataEncipherment">dataEncipherment</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!decipherOnly">decipherOnly</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!digitalSignature">digitalSignature</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!encipherOnly">encipherOnly</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!keyAgreement">keyAgreement</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!keyCertSign">keyCertSign</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!keyEncipherment">keyEncipherment</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!nonRepudiation">nonRepudiation</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#PKIXCommon()">PKIXCommon</A></B>()
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Common functions and constants
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Date</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!addDays">addDays</A></B>(&lt;Date&gt; d, &lt;Number&gt; days)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Add the specified number of days to a date object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!addNames">addNames</A></B>(&lt;ASN1&gt; t, &lt;Object&gt; name)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds names from the name object to the RDNSequence.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!bitstringForInteger">bitstringForInteger</A></B>(&lt;Number&gt; val)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Converts the integer value into a BIT STRING value.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!convertUnsignedInteger">convertUnsignedInteger</A></B>(&lt;ByteString&gt; value)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!createECSubjectPublicKeyInfo">createECSubjectPublicKeyInfo</A></B>(publicKey, encodeECDomainParameter)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Creates the EC Public Key as subjectPublicKeyInfo TLV structure object.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!createRSASubjectPublicKeyInfo">createRSASubjectPublicKeyInfo</A></B>(publicKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Creates the RSA Public Key as subjectPublicKeyInfo TLV structure object.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!dtoUTC">dtoUTC</A></B>(&lt;Date&gt; d)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Convert date and time to UTC string with format YYMMDDHHMMSSZ.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!encodeName">encodeName</A></B>(&lt;Object&gt; name)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the dn as TLV object


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!makeRDN">makeRDN</A></B>(&lt;String&gt; name, &lt;String&gt; oid, &lt;ASN1&gt; value)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Creates a relative distinguished name component.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;ByteString</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!readFileFromDisk">readFileFromDisk</A></B>(&lt;String&gt; filename)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Loads a binary file from disk
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!test">test</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&lt;static&gt;&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#!s!writeFileToDisk">writeFileToDisk</A></B>(&lt;String&gt; filename, &lt;ByteString&gt; content)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Writes a byte string object to file


      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="!s!cRLSign"><!-- --></A>
   <H3>cRLSign</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>cRLSign</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!dataEncipherment"><!-- --></A>
   <H3>dataEncipherment</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>dataEncipherment</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!decipherOnly"><!-- --></A>
   <H3>decipherOnly</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>decipherOnly</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!digitalSignature"><!-- --></A>
   <H3>digitalSignature</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>digitalSignature</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!encipherOnly"><!-- --></A>
   <H3>encipherOnly</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>encipherOnly</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!keyAgreement"><!-- --></A>
   <H3>keyAgreement</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>keyAgreement</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!keyCertSign"><!-- --></A>
   <H3>keyCertSign</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>keyCertSign</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!keyEncipherment"><!-- --></A>
   <H3>keyEncipherment</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>keyEncipherment</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!nonRepudiation"><!-- --></A>
   <H3>nonRepudiation</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>nonRepudiation</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="PKIXCommon()"><!-- --></A><H3>
PKIXCommon</H3>
<PRE><B>PKIXCommon</B>()</PRE>


<UL>
   Common functions and constants
</UL>



   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="!s!addDays"><!-- --></A>
   <H3>addDays</H3>
   <PRE>&lt;static&gt; Date <B>addDays</B>(&lt;Date&gt; d, &lt;Number&gt; days)</PRE>
   
      <UL>Add the specified number of days to a date object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>d</CODE> -  the date object  
      </UL> 
   
     <UL><CODE>days</CODE> -  the number of days to add, may be negative  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        a new Date object 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!addNames"><!-- --></A>
   <H3>addNames</H3>
   <PRE>&lt;static&gt; void <B>addNames</B>(&lt;ASN1&gt; t, &lt;Object&gt; name)</PRE>
   
      <UL>Adds names from the name object to the RDNSequence.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>t</CODE> -  the sequence object  
      </UL> 
   
     <UL><CODE>name</CODE> -  the name object    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!bitstringForInteger"><!-- --></A>
   <H3>bitstringForInteger</H3>
   <PRE>&lt;static&gt; ByteString <B>bitstringForInteger</B>(&lt;Number&gt; val)</PRE>
   
      <UL>Converts the integer value into a BIT STRING value.
 <p>The function interprets the integer value as bitmap, where
 bit 0 is the most significant bit of the least significant byte.</p>
 <p>The function adds the minimum number of bytes to the final bit string
 and encodes the "number of unused bits at the beginning.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>val</CODE> -  the value to convert  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the bit string   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!convertUnsignedInteger"><!-- --></A>
   <H3>convertUnsignedInteger</H3>
   <PRE>&lt;static&gt; ByteString <B>convertUnsignedInteger</B>(&lt;ByteString&gt; value)</PRE>
   
      <UL>Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.

 This prevent interpretation of the integer representation if converted into
 a signed ASN1 INTEGER.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>value</CODE> -  the value to convert  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the converted value   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!createECSubjectPublicKeyInfo"><!-- --></A>
   <H3>createECSubjectPublicKeyInfo</H3>
   <PRE>&lt;static&gt; ASN1 <B>createECSubjectPublicKeyInfo</B>(publicKey, encodeECDomainParameter)</PRE>
   
      <UL>Creates the EC Public Key as subjectPublicKeyInfo TLV structure object.

 <p>The structure is defined as:</p>
 <pre>
	SubjectPublicKeyInfo  ::=  SEQUENCE  {
		algorithm            AlgorithmIdentifier,
		subjectPublicKey     BIT STRING  }

	AlgorithmIdentifier  ::=  SEQUENCE  {
		algorithm               OBJECT IDENTIFIER,
		parameters              ANY DEFINED BY algorithm OPTIONAL  }
 
	id-ecPublicKey OBJECT IDENTIFIER ::= {
		iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 }

	ECParameters ::= CHOICE {
		namedCurve         OBJECT IDENTIFIER,
		implicitCurve      NULL,
		specifiedCurve     SpecifiedECDomain }
 </pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the subjectPublicKey TLV structure   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!createRSASubjectPublicKeyInfo"><!-- --></A>
   <H3>createRSASubjectPublicKeyInfo</H3>
   <PRE>&lt;static&gt; ASN1 <B>createRSASubjectPublicKeyInfo</B>(publicKey)</PRE>
   
      <UL>Creates the RSA Public Key as subjectPublicKeyInfo TLV structure object.

 <p>The structure is defined as:</p>
 <pre>
	SubjectPublicKeyInfo  ::=  SEQUENCE  {
		algorithm            AlgorithmIdentifier,
		subjectPublicKey     BIT STRING  }

	AlgorithmIdentifier  ::=  SEQUENCE  {
		algorithm               OBJECT IDENTIFIER,
		parameters              ANY DEFINED BY algorithm OPTIONAL  }
 
	pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 }

	rsaEncryption OBJECT IDENTIFIER ::=  { pkcs-1 1}

	RSAPublicKey ::= SEQUENCE {
		modulus            INTEGER,    -- n
		publicExponent     INTEGER  }  -- e
 </pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the subjectPublicKey TLV structure   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!dtoUTC"><!-- --></A>
   <H3>dtoUTC</H3>
   <PRE>&lt;static&gt; String <B>dtoUTC</B>(&lt;Date&gt; d)</PRE>
   
      <UL>Convert date and time to UTC string with format YYMMDDHHMMSSZ.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>d</CODE> -  the date object.  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the date/time string.   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!encodeName"><!-- --></A>
   <H3>encodeName</H3>
   <PRE>&lt;static&gt; ASN1 <B>encodeName</B>(&lt;Object&gt; name)</PRE>
   
      <UL>Gets the dn as TLV object

 <p>This function support two format for names</p>
 <pre>
  var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 or
  var issuer = [ { C:"UT"}, { O:"ACME Corporation" }, { CN:"Test-CA"} ];
 </pre>

 <p>It supports the following RDNs:</p>
 <ul>
 <li>C - country</li>
 <li>O - organization</li>
 <li>OU - organizational unit</li>
 <li>S - state or province</li>
 <li>L - locality</li>
 <li>T - title</li>
 <li>G - given name</li>
 <li>SN - surname</li>
 <li>CN - common name</li>
 <li>SERIALNUMBER - serial number</li>
 <p>The first format sorts the RDS in the sequence C,O,OU,S,L,T,G,SN,CN,SERIALNUMBER</p>
 </ul></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the name object  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the RDNSequence   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!makeRDN"><!-- --></A>
   <H3>makeRDN</H3>
   <PRE>&lt;static&gt; Object <B>makeRDN</B>(&lt;String&gt; name, &lt;String&gt; oid, &lt;ASN1&gt; value)</PRE>
   
      <UL>Creates a relative distinguished name component.

 <p>The structure is defined as:</p>
 <pre>
	RelativeDistinguishedName ::=
		SET SIZE (1..MAX) OF AttributeTypeAndValue

	AttributeTypeAndValue ::= SEQUENCE {
		type     AttributeType,
		value    AttributeValue }

	AttributeType ::= OBJECT IDENTIFIER

	AttributeValue ::= ANY -- DEFINED BY AttributeType

	DirectoryString ::= CHOICE {
		teletexString           TeletexString (SIZE (1..MAX)),
		printableString         PrintableString (SIZE (1..MAX)),
		universalString         UniversalString (SIZE (1..MAX)),
		utf8String              UTF8String (SIZE (1..MAX)),
		bmpString               BMPString (SIZE (1..MAX)) }
</pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the components name  
      </UL> 
   
     <UL><CODE>oid</CODE> -  the oid for the RDN  
      </UL> 
   
     <UL><CODE>value</CODE> -  the value object  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!readFileFromDisk"><!-- --></A>
   <H3>readFileFromDisk</H3>
   <PRE>&lt;static&gt; ByteString <B>readFileFromDisk</B>(&lt;String&gt; filename)</PRE>
   
      <UL>Loads a binary file from disk</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>filename</CODE> -  the fully qualified file name  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the binary content   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!test"><!-- --></A>
   <H3>test</H3>
   <PRE>&lt;static&gt; void <B>test</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="!s!writeFileToDisk"><!-- --></A>
   <H3>writeFileToDisk</H3>
   <PRE>&lt;static&gt; void <B>writeFileToDisk</B>(&lt;String&gt; filename, &lt;ByteString&gt; content)</PRE>
   
      <UL>Writes a byte string object to file

 <p>The filename is mapped to the workspace location.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>filename</CODE> -  the fully qualified name of the file  
      </UL> 
   
     <UL><CODE>content</CODE> -  the content to write    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-pkixcommon.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKCS8.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestCaseRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
TestCaseRunner
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="TestCaseRunner";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKIXCommon.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestGroup.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class TestCaseRunner</H2>
<PRE>Object
   |
   +--<b>TestCaseRunner</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>TestCaseRunner</B>
   

</DL>
   
   <P>
   <BR/>Class implementing a test case harness
 <BR/><I>Defined in <a href='overview-summary-TestRunner.js.html'>TestRunner.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#selected">selected</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testCase">testCase</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testGroupRunner">testGroupRunner</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#xml">xml</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#TestCaseRunner()">TestCaseRunner</A></B>(testGroupRunner, testCase)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Construct a TestCaseRunner object
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#actionListener">actionListener</A></B>(&lt;Object&gt; source, &lt;String&gt; actionName)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Event listener for context menu
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addLog">addLog</A></B>(&lt;String&gt; log)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Add a log entry to the test case node
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#clearResult">clearResult</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Clear result of test
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#enable">enable</A></B>(&lt;Boolean&gt; state)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Enable or disable test
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getLog">getLog</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getXML">getXML</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Return describing XML element
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#hasFailed">hasFailed</A></B>(&lt;String&gt; log)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Listener for failed notifications
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#hasPassed">hasPassed</A></B>(&lt;String&gt; log)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Listener for passed notifications
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;boolean</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#isEnabled">isEnabled</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Tell test runner if case is enabled
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#run">run</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Run this test case
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="selected"><!-- --></A>
   <H3>selected</H3>
   <PRE>Object&nbsp;<B>selected</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testCase"><!-- --></A>
   <H3>testCase</H3>
   <PRE>Object&nbsp;<B>testCase</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testGroupRunner"><!-- --></A>
   <H3>testGroupRunner</H3>
   <PRE>Object&nbsp;<B>testGroupRunner</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="xml"><!-- --></A>
   <H3>xml</H3>
   <PRE>Object&nbsp;<B>xml</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="TestCaseRunner()"><!-- --></A><H3>
TestCaseRunner</H3>
<PRE><B>TestCaseRunner</B>(testGroupRunner, testCase)</PRE>


<UL>
   Construct a TestCaseRunner object
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  parent test group runner  
     </UL>
   
     <UL><CODE>the</CODE> -  test case name    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="actionListener"><!-- --></A>
   <H3>actionListener</H3>
   <PRE>void <B>actionListener</B>(&lt;Object&gt; source, &lt;String&gt; actionName)</PRE>
   
      <UL>Event listener for context menu</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>source</CODE> -  the outline node for which the action was invoked  
      </UL> 
   
     <UL><CODE>actionName</CODE> -  the name of the action selected    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addLog"><!-- --></A>
   <H3>addLog</H3>
   <PRE>void <B>addLog</B>(&lt;String&gt; log)</PRE>
   
      <UL>Add a log entry to the test case node</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>log</CODE> -  the test log    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="clearResult"><!-- --></A>
   <H3>clearResult</H3>
   <PRE>void <B>clearResult</B>()</PRE>
   
      <UL>Clear result of test</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="enable"><!-- --></A>
   <H3>enable</H3>
   <PRE>void <B>enable</B>(&lt;Boolean&gt; state)</PRE>
   
      <UL>Enable or disable test</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>state</CODE> -  true for enabled    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getLog"><!-- --></A>
   <H3>getLog</H3>
   <PRE>Object <B>getLog</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getXML"><!-- --></A>
   <H3>getXML</H3>
   <PRE>Object <B>getXML</B>()</PRE>
   
      <UL>Return describing XML element</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the XML element for this test case 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="hasFailed"><!-- --></A>
   <H3>hasFailed</H3>
   <PRE>void <B>hasFailed</B>(&lt;String&gt; log)</PRE>
   
      <UL>Listener for failed notifications</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>log</CODE> -  the test log    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="hasPassed"><!-- --></A>
   <H3>hasPassed</H3>
   <PRE>void <B>hasPassed</B>(&lt;String&gt; log)</PRE>
   
      <UL>Listener for passed notifications</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>log</CODE> -  the test log    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="isEnabled"><!-- --></A>
   <H3>isEnabled</H3>
   <PRE>boolean <B>isEnabled</B>()</PRE>
   
      <UL>Tell test runner if case is enabled</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        true if enabled 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="run"><!-- --></A>
   <H3>run</H3>
   <PRE>void <B>run</B>()</PRE>
   
      <UL>Run this test case</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="PKIXCommon.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestGroup.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
TestGroup
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="TestGroup";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestGroup.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestCaseRunner.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestGroupRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class TestGroup</H2>
<PRE>Object
   |
   +--<b>TestGroup</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>TestGroup</B>
   

</DL>
   
   <P>
   <BR/><p>Abstract base class implementing a group of test cases.</p>
 <p>Actual test group objects are derived from this base class.</p>
 <p>Each test case is created as a method of this object.</p>
 <BR/><I>Defined in <a href='overview-summary-TestGroup.js.html'>TestGroup.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#marker">marker</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#name">name</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#parameter">parameter</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#TestGroup()">TestGroup</A></B>(&lt;String&gt; name, &lt;Object&gt; parameter)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a test group object containing test cases.
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#assertEquals">assertEquals</A></B>(&lt;Any&gt; first, &lt;Any&gt; second, &lt;String&gt; message)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Verify that the given values are equal.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#assertTrue">assertTrue</A></B>(&lt;Boolean&gt; result, &lt;String&gt; message)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Verify that the given assertion evaluates to true.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getName">getName</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Returns the name of test group.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Function</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getTestCase">getTestCase</A></B>(&lt;String&gt; name)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Returns a specific test case function.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String[]</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getTestCaseNames">getTestCaseNames</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Returns a list of tests as sorted array of test case names.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;String[]</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getUsedTestProceduresForTestCase">getUsedTestProceduresForTestCase</A></B>(name)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Returns a list of test procedure names referenced by a test case.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#log">log</A></B>(&lt;String&gt; message)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Log a text message.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#run">run</A></B>(&lt;<a href="TestRunner.html">TestRunner</a>&gt; runner)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Runs all tests in a test group.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#runTestCase">runTestCase</A></B>(&lt;String&gt; casename, runner)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Run a single test in a test group, optionally using a test runner.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;<a href="TestProcedure.html">TestProcedure</a></CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#runTestProcedure">runTestProcedure</A></B>(&lt;String&gt; name, &lt;Object&gt; param)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Run a named test procedure.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setMarker">setMarker</A></B>(&lt;String&gt; marker)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets a marker used to identify a context in which an assertion failed.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setUp">setUp</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Setup method called before invoking each individual test case.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#tearDown">tearDown</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Teardown method called after invocation of a test case.
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="marker"><!-- --></A>
   <H3>marker</H3>
   <PRE>Object&nbsp;<B>marker</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="name"><!-- --></A>
   <H3>name</H3>
   <PRE>Object&nbsp;<B>name</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="parameter"><!-- --></A>
   <H3>parameter</H3>
   <PRE>Object&nbsp;<B>parameter</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="TestGroup()"><!-- --></A><H3>
TestGroup</H3>
<PRE><B>TestGroup</B>(&lt;String&gt; name, &lt;Object&gt; parameter)</PRE>


<UL>
   Create a test group object containing test cases.
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the name of the test group  
     </UL>
   
     <UL><CODE>parameter</CODE> -  the parameter object for this group of tests
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="assertEquals"><!-- --></A>
   <H3>assertEquals</H3>
   <PRE>void <B>assertEquals</B>(&lt;Any&gt; first, &lt;Any&gt; second, &lt;String&gt; message)</PRE>
   
      <UL>Verify that the given values are equal. Throw an exception if not.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>first</CODE> -  the first argument  
      </UL> 
   
     <UL><CODE>second</CODE> -  the second argument  
      </UL> 
   
     <UL><CODE>message</CODE> -  the message to log in case result is false    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="assertTrue"><!-- --></A>
   <H3>assertTrue</H3>
   <PRE>void <B>assertTrue</B>(&lt;Boolean&gt; result, &lt;String&gt; message)</PRE>
   
      <UL>Verify that the given assertion evaluates to true. Throw an exception if result is false.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>result</CODE> -  true if assertion is valid  
      </UL> 
   
     <UL><CODE>message</CODE> -  the message to log in case result is false    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getName"><!-- --></A>
   <H3>getName</H3>
   <PRE>String <B>getName</B>()</PRE>
   
      <UL>Returns the name of test group.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the name of the test group 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getTestCase"><!-- --></A>
   <H3>getTestCase</H3>
   <PRE>Function <B>getTestCase</B>(&lt;String&gt; name)</PRE>
   
      <UL>Returns a specific test case function.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the test case name  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the test case method 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getTestCaseNames"><!-- --></A>
   <H3>getTestCaseNames</H3>
   <PRE>String[] <B>getTestCaseNames</B>()</PRE>
   
      <UL>Returns a list of tests as sorted array of test case names.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the sorted array of test case names 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getUsedTestProceduresForTestCase"><!-- --></A>
   <H3>getUsedTestProceduresForTestCase</H3>
   <PRE>String[] <B>getUsedTestProceduresForTestCase</B>(name)</PRE>
   
      <UL>Returns a list of test procedure names referenced by a test case.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>test</CODE> -  case name  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        a list of test procedure names or undefined 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="log"><!-- --></A>
   <H3>log</H3>
   <PRE>void <B>log</B>(&lt;String&gt; message)</PRE>
   
      <UL>Log a text message.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>message</CODE> -  the message to add to the log    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="run"><!-- --></A>
   <H3>run</H3>
   <PRE>void <B>run</B>(&lt;<a href="TestRunner.html">TestRunner</a>&gt; runner)</PRE>
   
      <UL>Runs all tests in a test group.
 
 <p>This method can be used to run a test group without a test runner. In that case leave the runner
 argument empty or null.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>runner</CODE> -  the test runner to report progress or undefined or null    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="runTestCase"><!-- --></A>
   <H3>runTestCase</H3>
   <PRE>void <B>runTestCase</B>(&lt;String&gt; casename, runner)</PRE>
   
      <UL>Run a single test in a test group, optionally using a test runner.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>casename</CODE> -  the name of the test case  
      </UL> 
   
     <UL><CODE>the</CODE> -  test runner object or undefined or null    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="runTestProcedure"><!-- --></A>
   <H3>runTestProcedure</H3>
   <PRE><a href="TestProcedure.html">TestProcedure</a> <B>runTestProcedure</B>(&lt;String&gt; name, &lt;Object&gt; param)</PRE>
   
      <UL>Run a named test procedure.
 
 <p>This method is called by code in a test case to run a test procedure.</p>
 <p>This method uses the test runner to create a new instance of the test procedure object.
 All test steps in the procedure are executed and the test procedure object is returned to
 the caller for further processing of test results.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the test procedure name  
      </UL> 
   
     <UL><CODE>param</CODE> -  the parameter object to pass to the execution of the test procedure  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the test procedure object 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setMarker"><!-- --></A>
   <H3>setMarker</H3>
   <PRE>void <B>setMarker</B>(&lt;String&gt; marker)</PRE>
   
      <UL>Sets a marker used to identify a context in which an assertion failed.
 
 <p>A context can be a certain iteration
 or group of assertions. A marker allows to further identify the area of a problem.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>marker</CODE> -  the marker to set    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setUp"><!-- --></A>
   <H3>setUp</H3>
   <PRE>void <B>setUp</B>()</PRE>
   
      <UL>Setup method called before invoking each individual test case.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="tearDown"><!-- --></A>
   <H3>tearDown</H3>
   <PRE>void <B>tearDown</B>()</PRE>
   
      <UL>Teardown method called after invocation of a test case.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestGroup.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestCaseRunner.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestGroupRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
TestGroupRunner
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="TestGroupRunner";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestGroup.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestLogFile.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class TestGroupRunner</H2>
<PRE>Object
   |
   +--<b>TestGroupRunner</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>TestGroupRunner</B>
   

</DL>
   
   <P>
   <BR/>Class implementing a harness to run test groups
 <BR/><I>Defined in <a href='overview-summary-TestRunner.js.html'>TestRunner.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testGroup">testGroup</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testRunner">testRunner</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#TestGroupRunner()">TestGroupRunner</A></B>(&lt;<a href="TestRunner.html">TestRunner</a>&gt; testRunner, testGroup)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a TestGroupRunner containing the TestCases
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#actionListener">actionListener</A></B>(&lt;Object&gt; source, action)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Event listener for context menu
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#run">run</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Run this test group
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="testGroup"><!-- --></A>
   <H3>testGroup</H3>
   <PRE>Object&nbsp;<B>testGroup</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testRunner"><!-- --></A>
   <H3>testRunner</H3>
   <PRE>Object&nbsp;<B>testRunner</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="TestGroupRunner()"><!-- --></A><H3>
TestGroupRunner</H3>
<PRE><B>TestGroupRunner</B>(&lt;<a href="TestRunner.html">TestRunner</a>&gt; testRunner, testGroup)</PRE>


<UL>
   Create a TestGroupRunner containing the TestCases
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>testRunner</CODE> -  the associated test runner  
     </UL>
   
     <UL><CODE>TestGroup</CODE> - = testGroup the test group    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="actionListener"><!-- --></A>
   <H3>actionListener</H3>
   <PRE>void <B>actionListener</B>(&lt;Object&gt; source, action)</PRE>
   
      <UL>Event listener for context menu</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>source</CODE> -  the outline node for which the action was invoked  
      </UL> 
   
     <UL><CODE>actionName</CODE> -  the name of the action selected    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="run"><!-- --></A>
   <H3>run</H3>
   <PRE>void <B>run</B>()</PRE>
   
      <UL>Run this test group</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestGroup.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestLogFile.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
TestLogFile
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="TestLogFile";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestGroupRunner.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestProcedure.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class TestLogFile</H2>
<PRE>Object
   |
   +--<b>TestLogFile</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>TestLogFile</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-TestRunner.js.html'>TestRunner.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#log">log</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#TestLogFile()">TestLogFile</A></B>(parent, log)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Constructor for test log entry in outline
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#selectedListener">selectedListener</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="log"><!-- --></A>
   <H3>log</H3>
   <PRE>Object&nbsp;<B>log</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="TestLogFile()"><!-- --></A><H3>
TestLogFile</H3>
<PRE><B>TestLogFile</B>(parent, log)</PRE>


<UL>
   Constructor for test log entry in outline
</UL>



   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="selectedListener"><!-- --></A>
   <H3>selectedListener</H3>
   <PRE>void <B>selectedListener</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestGroupRunner.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestProcedure.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
TestProcedure
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="TestProcedure";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestProcedure.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestLogFile.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestProcedureRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class TestProcedure</H2>
<PRE>Object
   |
   +--<b>TestProcedure</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>TestProcedure</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-TestProcedure.js.html'>TestProcedure.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->


   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#TestProcedure()">TestProcedure</A></B>(name, testgroup, parameter)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#assertEquals">assertEquals</A></B>(first, second, message)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#assertTrue">assertTrue</A></B>(result, message)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#log">log</A></B>(message)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#run">run</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setUp">setUp</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#tearDown">tearDown</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="TestProcedure()"><!-- --></A><H3>
TestProcedure</H3>
<PRE><B>TestProcedure</B>(name, testgroup, parameter)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="assertEquals"><!-- --></A>
   <H3>assertEquals</H3>
   <PRE>void <B>assertEquals</B>(first, second, message)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="assertTrue"><!-- --></A>
   <H3>assertTrue</H3>
   <PRE>void <B>assertTrue</B>(result, message)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="log"><!-- --></A>
   <H3>log</H3>
   <PRE>void <B>log</B>(message)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="run"><!-- --></A>
   <H3>run</H3>
   <PRE>void <B>run</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setUp"><!-- --></A>
   <H3>setUp</H3>
   <PRE>void <B>setUp</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="tearDown"><!-- --></A>
   <H3>tearDown</H3>
   <PRE>void <B>tearDown</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestProcedure.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestLogFile.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestProcedureRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
TestProcedureRunner
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="TestProcedureRunner";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestProcedure.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestReport.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class TestProcedureRunner</H2>
<PRE>Object
   |
   +--<b>TestProcedureRunner</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>TestProcedureRunner</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-TestRunner.js.html'>TestRunner.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testCaseRunner">testCaseRunner</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testProcedure">testProcedure</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#TestProcedureRunner()">TestProcedureRunner</A></B>(testCaseRunner, testProcedure)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="testCaseRunner"><!-- --></A>
   <H3>testCaseRunner</H3>
   <PRE>Object&nbsp;<B>testCaseRunner</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testProcedure"><!-- --></A>
   <H3>testProcedure</H3>
   <PRE>Object&nbsp;<B>testProcedure</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="TestProcedureRunner()"><!-- --></A><H3>
TestProcedureRunner</H3>
<PRE><B>TestProcedureRunner</B>(testCaseRunner, testProcedure)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->


<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestProcedure.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestReport.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
TestReport
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="TestReport";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestProcedureRunner.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestResult.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class TestReport</H2>
<PRE>Object
   |
   +--<b>TestReport</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>TestReport</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-TestRunner.js.html'>TestRunner.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testResults">testResults</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#TestReport()">TestReport</A></B>()
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addResult">addResult</A></B>(result)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#writeReport">writeReport</A></B>(filename)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="testResults"><!-- --></A>
   <H3>testResults</H3>
   <PRE>Object&nbsp;<B>testResults</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="TestReport()"><!-- --></A><H3>
TestReport</H3>
<PRE><B>TestReport</B>()</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="addResult"><!-- --></A>
   <H3>addResult</H3>
   <PRE>void <B>addResult</B>(result)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="writeReport"><!-- --></A>
   <H3>writeReport</H3>
   <PRE>void <B>writeReport</B>(filename)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestProcedureRunner.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestResult.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
TestResult
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="TestResult";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestReport.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class TestResult</H2>
<PRE>Object
   |
   +--<b>TestResult</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>TestResult</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-TestRunner.js.html'>TestRunner.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#id">id</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#log">log</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#tcxml">tcxml</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#verdict">verdict</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#TestResult()">TestResult</A></B>(id, verdict, log, tcxml)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toXML">toXML</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="id"><!-- --></A>
   <H3>id</H3>
   <PRE>Object&nbsp;<B>id</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="log"><!-- --></A>
   <H3>log</H3>
   <PRE>Object&nbsp;<B>log</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="tcxml"><!-- --></A>
   <H3>tcxml</H3>
   <PRE>Object&nbsp;<B>tcxml</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="verdict"><!-- --></A>
   <H3>verdict</H3>
   <PRE>Object&nbsp;<B>verdict</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="TestResult()"><!-- --></A><H3>
TestResult</H3>
<PRE><B>TestResult</B>(id, verdict, log, tcxml)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="toXML"><!-- --></A>
   <H3>toXML</H3>
   <PRE>Object <B>toXML</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestReport.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
TestRunner
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="TestRunner";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestResult.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestStepRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class TestRunner</H2>
<PRE>Object
   |
   +--<b>TestRunner</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>TestRunner</B>
   

</DL>
   
   <P>
   <BR/>Class implementing a graphical test runner
 <BR/><I>Defined in <a href='overview-summary-TestRunner.js.html'>TestRunner.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#name">name</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testGroupPrototype">testGroupPrototype</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testGroupRunners">testGroupRunners</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testMapper">testMapper</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testProcedurePrototype">testProcedurePrototype</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testProcedures">testProcedures</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testReport">testReport</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#TestRunner()">TestRunner</A></B>(&lt;String&gt; name)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a test runner using a Smart Card Shell outline for navigation
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#actionListener">actionListener</A></B>(&lt;Object&gt; source, &lt;String&gt; actionName)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Event listener for actions selected from context menu
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addTest">addTest</A></B>(&lt;String&gt; name, &lt;Object&gt; listener)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Add test to test mapper, which maps test unique id to listening object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addTestGroup">addTestGroup</A></B>(&lt;<a href="TestGroup.html">TestGroup</a>&gt; testGroup)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Add a test group to the test runner


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addTestGroupFromXML">addTestGroupFromXML</A></B>(&lt;String&gt; file, &lt;Object&gt; parameter)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Create test group from XML file and add to test runner
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addTestProcedure">addTestProcedure</A></B>(&lt;<a href="TestProcedure.html">TestProcedure</a>&gt; proc)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Add a test procedure constructor to the list


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addTestProcedureFromXML">addTestProcedureFromXML</A></B>(&lt;String&gt; file, &lt;Object&gt; parameter)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Create test procedure from XML file and add to test runner
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#clearResults">clearResults</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Clear result of last test run
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#collapseAll">collapseAll</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Collapse all test groups
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#enable">enable</A></B>(&lt;String&gt; name, &lt;Boolean&gt; state)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Enable or disable test
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#expandAll">expandAll</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Expand all test groups
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getFailedCounter">getFailedCounter</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getLog">getLog</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;<a href="TestProcedure.html">TestProcedure</a></CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getTestProcedure">getTestProcedure</A></B>(&lt;String&gt; name)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Return constructor of test procedure
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#hasFailed">hasFailed</A></B>(&lt;String&gt; name, &lt;String&gt; log)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 hasFailed Listener
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#hasPassed">hasPassed</A></B>(&lt;String&gt; name, &lt;String&gt; log)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 hasPassed Listener
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;boolean</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#isEnabled">isEnabled</A></B>(&lt;String&gt; name)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 isEnabled query from TestGroup runner
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#report">report</A></B>(fn)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Write test report
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#run">run</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Run all test groups
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setReportDirectory">setReportDirectory</A></B>(&lt;String&gt; dir)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Set directory to write reports
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="name"><!-- --></A>
   <H3>name</H3>
   <PRE>Object&nbsp;<B>name</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testGroupPrototype"><!-- --></A>
   <H3>testGroupPrototype</H3>
   <PRE>Object&nbsp;<B>testGroupPrototype</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testGroupRunners"><!-- --></A>
   <H3>testGroupRunners</H3>
   <PRE>Object&nbsp;<B>testGroupRunners</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testMapper"><!-- --></A>
   <H3>testMapper</H3>
   <PRE>Object&nbsp;<B>testMapper</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testProcedurePrototype"><!-- --></A>
   <H3>testProcedurePrototype</H3>
   <PRE>Object&nbsp;<B>testProcedurePrototype</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testProcedures"><!-- --></A>
   <H3>testProcedures</H3>
   <PRE>Object&nbsp;<B>testProcedures</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testReport"><!-- --></A>
   <H3>testReport</H3>
   <PRE>Object&nbsp;<B>testReport</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="TestRunner()"><!-- --></A><H3>
TestRunner</H3>
<PRE><B>TestRunner</B>(&lt;String&gt; name)</PRE>


<UL>
   Create a test runner using a Smart Card Shell outline for navigation
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the test suite name
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="actionListener"><!-- --></A>
   <H3>actionListener</H3>
   <PRE>void <B>actionListener</B>(&lt;Object&gt; source, &lt;String&gt; actionName)</PRE>
   
      <UL>Event listener for actions selected from context menu</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>source</CODE> -  the outline node for which the action was invoked  
      </UL> 
   
     <UL><CODE>actionName</CODE> -  the name of the action selected    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addTest"><!-- --></A>
   <H3>addTest</H3>
   <PRE>void <B>addTest</B>(&lt;String&gt; name, &lt;Object&gt; listener)</PRE>
   
      <UL>Add test to test mapper, which maps test unique id to listening object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the unique test name  
      </UL> 
   
     <UL><CODE>listener</CODE> -  the listener object implementing the clearResults(), enable(), isEnabled(), hasPassed() and hasFailed() methods    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addTestGroup"><!-- --></A>
   <H3>addTestGroup</H3>
   <PRE>void <B>addTestGroup</B>(&lt;<a href="TestGroup.html">TestGroup</a>&gt; testGroup)</PRE>
   
      <UL>Add a test group to the test runner

 <p>This call will iterate through all test cases and locate used procedures and steps.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>testGroup</CODE> -  the test group object    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addTestGroupFromXML"><!-- --></A>
   <H3>addTestGroupFromXML</H3>
   <PRE>void <B>addTestGroupFromXML</B>(&lt;String&gt; file, &lt;Object&gt; parameter)</PRE>
   
      <UL>Create test group from XML file and add to test runner</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>file</CODE> -  the file name containing the test group  
      </UL> 
   
     <UL><CODE>parameter</CODE> -  the parameter object    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addTestProcedure"><!-- --></A>
   <H3>addTestProcedure</H3>
   <PRE>void <B>addTestProcedure</B>(&lt;<a href="TestProcedure.html">TestProcedure</a>&gt; proc)</PRE>
   
      <UL>Add a test procedure constructor to the list

 <p>Use the getName() method to obtain the test procedure name</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>proc</CODE> -  the test procedure object    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addTestProcedureFromXML"><!-- --></A>
   <H3>addTestProcedureFromXML</H3>
   <PRE>void <B>addTestProcedureFromXML</B>(&lt;String&gt; file, &lt;Object&gt; parameter)</PRE>
   
      <UL>Create test procedure from XML file and add to test runner</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>file</CODE> -  the file name containing the test procedure  
      </UL> 
   
     <UL><CODE>parameter</CODE> -  the parameter object    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="clearResults"><!-- --></A>
   <H3>clearResults</H3>
   <PRE>void <B>clearResults</B>()</PRE>
   
      <UL>Clear result of last test run</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="collapseAll"><!-- --></A>
   <H3>collapseAll</H3>
   <PRE>void <B>collapseAll</B>()</PRE>
   
      <UL>Collapse all test groups</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="enable"><!-- --></A>
   <H3>enable</H3>
   <PRE>Object <B>enable</B>(&lt;String&gt; name, &lt;Boolean&gt; state)</PRE>
   
      <UL>Enable or disable test</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the unique test name  
      </UL> 
   
     <UL><CODE>state</CODE> -  the enable / disable state
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="expandAll"><!-- --></A>
   <H3>expandAll</H3>
   <PRE>void <B>expandAll</B>()</PRE>
   
      <UL>Expand all test groups</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getFailedCounter"><!-- --></A>
   <H3>getFailedCounter</H3>
   <PRE>Object <B>getFailedCounter</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getLog"><!-- --></A>
   <H3>getLog</H3>
   <PRE>Object <B>getLog</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getTestProcedure"><!-- --></A>
   <H3>getTestProcedure</H3>
   <PRE><a href="TestProcedure.html">TestProcedure</a> <B>getTestProcedure</B>(&lt;String&gt; name)</PRE>
   
      <UL>Return constructor of test procedure</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the name of the test procedure  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the test procedure object 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="hasFailed"><!-- --></A>
   <H3>hasFailed</H3>
   <PRE>void <B>hasFailed</B>(&lt;String&gt; name, &lt;String&gt; log)</PRE>
   
      <UL>hasFailed Listener</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the unique test name  
      </UL> 
   
     <UL><CODE>log</CODE> -  the test log    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="hasPassed"><!-- --></A>
   <H3>hasPassed</H3>
   <PRE>void <B>hasPassed</B>(&lt;String&gt; name, &lt;String&gt; log)</PRE>
   
      <UL>hasPassed Listener</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the unique test name  
      </UL> 
   
     <UL><CODE>log</CODE> -  the test log    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="isEnabled"><!-- --></A>
   <H3>isEnabled</H3>
   <PRE>boolean <B>isEnabled</B>(&lt;String&gt; name)</PRE>
   
      <UL>isEnabled query from TestGroup runner</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>name</CODE> -  the unique test name  
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        true if the test is enabled 
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="report"><!-- --></A>
   <H3>report</H3>
   <PRE>void <B>report</B>(fn)</PRE>
   
      <UL>Write test report</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="run"><!-- --></A>
   <H3>run</H3>
   <PRE>void <B>run</B>()</PRE>
   
      <UL>Run all test groups</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setReportDirectory"><!-- --></A>
   <H3>setReportDirectory</H3>
   <PRE>void <B>setReportDirectory</B>(&lt;String&gt; dir)</PRE>
   
      <UL>Set directory to write reports</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>dir</CODE> -  the directory to store reports    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestResult.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="TestStepRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
TestStepRunner
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="TestStepRunner";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestRunner.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="X509CertificateGenerator.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class TestStepRunner</H2>
<PRE>Object
   |
   +--<b>TestStepRunner</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>TestStepRunner</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-TestRunner.js.html'>TestRunner.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testProcedureRunner">testProcedureRunner</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#testStep">testStep</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#TestStepRunner()">TestStepRunner</A></B>(testProcedureRunner, testStep)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#clearResult">clearResult</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#hasPassed">hasPassed</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="testProcedureRunner"><!-- --></A>
   <H3>testProcedureRunner</H3>
   <PRE>Object&nbsp;<B>testProcedureRunner</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="testStep"><!-- --></A>
   <H3>testStep</H3>
   <PRE>Object&nbsp;<B>testStep</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="TestStepRunner()"><!-- --></A><H3>
TestStepRunner</H3>
<PRE><B>TestStepRunner</B>(testProcedureRunner, testStep)</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="clearResult"><!-- --></A>
   <H3>clearResult</H3>
   <PRE>void <B>clearResult</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="hasPassed"><!-- --></A>
   <H3>hasPassed</H3>
   <PRE>void <B>hasPassed</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-TestRunner.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestRunner.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="X509CertificateGenerator.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
X509CertificateGenerator
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="X509CertificateGenerator";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-x509certificategenerator.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestStepRunner.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="X509Name.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class X509CertificateGenerator</H2>
<PRE>Object
   |
   +--<b>X509CertificateGenerator</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>X509CertificateGenerator</B>
   

</DL>
   
   <P>
   <BR/>Class implementing a X.509 certificate generator
 <BR/><I>Defined in <a href='overview-summary-x509certificategenerator.js.html'>x509certificategenerator.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#crypto">crypto</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#encodeECDomainParameter">encodeECDomainParameter</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!cRLSign">cRLSign</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!dataEncipherment">dataEncipherment</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!decipherOnly">decipherOnly</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!digitalSignature">digitalSignature</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!encipherOnly">encipherOnly</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!keyAgreement">keyAgreement</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!keyCertSign">keyCertSign</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!keyEncipherment">keyEncipherment</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!nonRepudiation">nonRepudiation</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#X509CertificateGenerator()">X509CertificateGenerator</A></B>(&lt;Crypto&gt; crypto)
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      Create a X.509 certificate generator.
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addAuthorityKeyIdentifierExtension">addAuthorityKeyIdentifierExtension</A></B>(&lt;Key&gt; publicKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds the authority public key identifier extension based on the issuers key.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addBasicConstraintsExtension">addBasicConstraintsExtension</A></B>(&lt;Boolean&gt; cA, &lt;Number&gt; pathLenConstraint)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds the BasicConstraints extension.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addCRLDistributionPointURL">addCRLDistributionPointURL</A></B>(&lt;String[]&gt; url)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds the CRL distribution point URLs.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addExtendedKeyUsages">addExtendedKeyUsages</A></B>(&lt;String[]&gt; oids, &lt;Boolean&gt; critical)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds the extended key usage extension
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addExtension">addExtension</A></B>(&lt;String&gt; extnID, &lt;Boolean&gt; critical, extnValue)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds an extension to the certificate


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addKeyUsageExtension">addKeyUsageExtension</A></B>(flags)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds the key usage extension.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#addSubjectKeyIdentifierExtension">addSubjectKeyIdentifierExtension</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Adds the subject public key identifier extension based on the certificates subject key.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;X509</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#generateX509Certificate">generateX509Certificate</A></B>(privateKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Generates the certificate.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getExtensions">getExtensions</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the certificate extension as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getIssuer">getIssuer</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the issuer name as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getSignatureAlgorithm">getSignatureAlgorithm</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the signature algorithm TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getSubject">getSubject</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the subject name as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getSubjectPublicKeyInfo">getSubjectPublicKeyInfo</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the subject's public key as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getTbsCertificate">getTbsCertificate</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the part of the certificate that will be signed
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;ASN1</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getValidity">getValidity</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Gets the certificate validity as TLV object
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#reset">reset</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Resets all internal state variables.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setIssuer">setIssuer</A></B>(&lt;Object&gt; issuer)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the isser name.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setNotAfter">setNotAfter</A></B>(date)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the expiration date for the certificate.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setNotBefore">setNotBefore</A></B>(date)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the effective date for the certificate.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setPublicKey">setPublicKey</A></B>(&lt;Key&gt; publicKey)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the subjects public key


      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setSerialNumber">setSerialNumber</A></B>(&lt;ByteString&gt; serialNumber)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the serial number.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setSignatureAlgorithm">setSignatureAlgorithm</A></B>(&lt;Number&gt; alg)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the signature algorithm.
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;void</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#setSubject">setSubject</A></B>(&lt;Object&gt; subject)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 Sets the subject name.
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="crypto"><!-- --></A>
   <H3>crypto</H3>
   <PRE>Object&nbsp;<B>crypto</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="encodeECDomainParameter"><!-- --></A>
   <H3>encodeECDomainParameter</H3>
   <PRE>Object&nbsp;<B>encodeECDomainParameter</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!cRLSign"><!-- --></A>
   <H3>cRLSign</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>cRLSign</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!dataEncipherment"><!-- --></A>
   <H3>dataEncipherment</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>dataEncipherment</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!decipherOnly"><!-- --></A>
   <H3>decipherOnly</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>decipherOnly</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!digitalSignature"><!-- --></A>
   <H3>digitalSignature</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>digitalSignature</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!encipherOnly"><!-- --></A>
   <H3>encipherOnly</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>encipherOnly</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!keyAgreement"><!-- --></A>
   <H3>keyAgreement</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>keyAgreement</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!keyCertSign"><!-- --></A>
   <H3>keyCertSign</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>keyCertSign</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!keyEncipherment"><!-- --></A>
   <H3>keyEncipherment</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>keyEncipherment</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!nonRepudiation"><!-- --></A>
   <H3>nonRepudiation</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>nonRepudiation</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="X509CertificateGenerator()"><!-- --></A><H3>
X509CertificateGenerator</H3>
<PRE><B>X509CertificateGenerator</B>(&lt;Crypto&gt; crypto)</PRE>


<UL>
   Create a X.509 certificate generator.
</UL>



   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>crypto</CODE> -  the crypto provider to use for signing operations    
     </UL>
   
   
   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="addAuthorityKeyIdentifierExtension"><!-- --></A>
   <H3>addAuthorityKeyIdentifierExtension</H3>
   <PRE>void <B>addAuthorityKeyIdentifierExtension</B>(&lt;Key&gt; publicKey)</PRE>
   
      <UL>Adds the authority public key identifier extension based on the issuers key.

 <p>The key identifier is calculated as SHA-1 hash over the contents of the
 issuer public key (Without tag, length and number of unused bits.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>publicKey</CODE> -  the authority subject key    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addBasicConstraintsExtension"><!-- --></A>
   <H3>addBasicConstraintsExtension</H3>
   <PRE>void <B>addBasicConstraintsExtension</B>(&lt;Boolean&gt; cA, &lt;Number&gt; pathLenConstraint)</PRE>
   
      <UL>Adds the BasicConstraints extension.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>cA</CODE> -  the certificate belongs to a CA  
      </UL> 
   
     <UL><CODE>pathLenConstraint</CODE> -  the maximum number of subordinate CA certificates    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addCRLDistributionPointURL"><!-- --></A>
   <H3>addCRLDistributionPointURL</H3>
   <PRE>void <B>addCRLDistributionPointURL</B>(&lt;String[]&gt; url)</PRE>
   
      <UL>Adds the CRL distribution point URLs.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>url</CODE> -  a list of URLs    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addExtendedKeyUsages"><!-- --></A>
   <H3>addExtendedKeyUsages</H3>
   <PRE>void <B>addExtendedKeyUsages</B>(&lt;String[]&gt; oids, &lt;Boolean&gt; critical)</PRE>
   
      <UL>Adds the extended key usage extension</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>oids</CODE> -  the list of object identifier names  
      </UL> 
   
     <UL><CODE>critical</CODE> -  the extension is critical    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addExtension"><!-- --></A>
   <H3>addExtension</H3>
   <PRE>void <B>addExtension</B>(&lt;String&gt; extnID, &lt;Boolean&gt; critical, extnValue)</PRE>
   
      <UL>Adds an extension to the certificate

 <p>The structure is defined as:</p>
 <pre>
    Extension  ::=  SEQUENCE  {
        extnID      OBJECT IDENTIFIER,
        critical    BOOLEAN DEFAULT FALSE,
        extnValue   OCTET STRING
                    -- contains the DER encoding of an ASN.1 value
                    -- corresponding to the extension type identified
                    -- by extnID
        }
</pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>extnID</CODE> -  the extensions object identifier  
      </UL> 
   
     <UL><CODE>critical</CODE> -  the extension is critical  
      </UL> 
   
     <UL><CODE>the</CODE> -  extension value as ByteString    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addKeyUsageExtension"><!-- --></A>
   <H3>addKeyUsageExtension</H3>
   <PRE>void <B>addKeyUsageExtension</B>(flags)</PRE>
   
      <UL>Adds the key usage extension.

 <p>The following flags are defined:</p>
 <pre>
 PKIXCommon.digitalSignature = 0x0080;
 PKIXCommon.nonRepudiation   = 0x0040;
 PKIXCommon.keyEncipherment  = 0x0020;
 PKIXCommon.dataEncipherment = 0x0010;
 PKIXCommon.keyAgreement     = 0x0008;
 PKIXCommon.keyCertSign      = 0x0004;
 PKIXCommon.cRLSign          = 0x0002;
 PKIXCommon.encipherOnly     = 0x0001;
 PKIXCommon.decipherOnly     = 0x8000;
 </pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>the</CODE> -  key usage flags as combination of the flags defined above.    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="addSubjectKeyIdentifierExtension"><!-- --></A>
   <H3>addSubjectKeyIdentifierExtension</H3>
   <PRE>void <B>addSubjectKeyIdentifierExtension</B>()</PRE>
   
      <UL>Adds the subject public key identifier extension based on the certificates subject key.

 <p>The key identifier is calculated as SHA-1 hash over the contents of the
 subject public key (Without tag, length and number of unused bits.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="generateX509Certificate"><!-- --></A>
   <H3>generateX509Certificate</H3>
   <PRE>X509 <B>generateX509Certificate</B>(privateKey)</PRE>
   
      <UL>Generates the certificate.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the generated certificate   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getExtensions"><!-- --></A>
   <H3>getExtensions</H3>
   <PRE>ASN1 <B>getExtensions</B>()</PRE>
   
      <UL>Gets the certificate extension as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the certificate extensions   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getIssuer"><!-- --></A>
   <H3>getIssuer</H3>
   <PRE>ASN1 <B>getIssuer</B>()</PRE>
   
      <UL>Gets the issuer name as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the issuer RDNSequence   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getSignatureAlgorithm"><!-- --></A>
   <H3>getSignatureAlgorithm</H3>
   <PRE>ASN1 <B>getSignatureAlgorithm</B>()</PRE>
   
      <UL>Gets the signature algorithm TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the signature algorithm object   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getSubject"><!-- --></A>
   <H3>getSubject</H3>
   <PRE>ASN1 <B>getSubject</B>()</PRE>
   
      <UL>Gets the subject name as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the issuer RDNSequence   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getSubjectPublicKeyInfo"><!-- --></A>
   <H3>getSubjectPublicKeyInfo</H3>
   <PRE>ASN1 <B>getSubjectPublicKeyInfo</B>()</PRE>
   
      <UL>Gets the subject's public key as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the subject's public key info   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getTbsCertificate"><!-- --></A>
   <H3>getTbsCertificate</H3>
   <PRE>ASN1 <B>getTbsCertificate</B>()</PRE>
   
      <UL>Gets the part of the certificate that will be signed</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the TBSCertificate part   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="getValidity"><!-- --></A>
   <H3>getValidity</H3>
   <PRE>ASN1 <B>getValidity</B>()</PRE>
   
      <UL>Gets the certificate validity as TLV object</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   
   <UL>
   <B>Returns:</B>
        <UL>
        the certificates validity   
        </UL>
   </UL>
   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="reset"><!-- --></A>
   <H3>reset</H3>
   <PRE>void <B>reset</B>()</PRE>
   
      <UL>Resets all internal state variables.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setIssuer"><!-- --></A>
   <H3>setIssuer</H3>
   <PRE>void <B>setIssuer</B>(&lt;Object&gt; issuer)</PRE>
   
      <UL>Sets the isser name.

 <p>The issuer name must be a JavaScript object containing the properties:</p>
 <ul>
  <li>C - the country</li>
  <li>O - the organization</li>
  <li>OU - the organization unit</li>
  <li>CN - the common name</li>
 </ul>
 <p>Example:</p>
 <pre>
	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 </pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>issuer</CODE> -  the issuer name    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setNotAfter"><!-- --></A>
   <H3>setNotAfter</H3>
   <PRE>void <B>setNotAfter</B>(date)</PRE>
   
      <UL>Sets the expiration date for the certificate.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>String</CODE> -  or Date} date the date in format YYMMDDHHMMSSZ    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setNotBefore"><!-- --></A>
   <H3>setNotBefore</H3>
   <PRE>void <B>setNotBefore</B>(date)</PRE>
   
      <UL>Sets the effective date for the certificate.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>String</CODE> -  or Date} date the date in format YYMMDDHHMMSSZ    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setPublicKey"><!-- --></A>
   <H3>setPublicKey</H3>
   <PRE>void <B>setPublicKey</B>(&lt;Key&gt; publicKey)</PRE>
   
      <UL>Sets the subjects public key

 <p>The methods accepts ECC and RSA Public Keys.</p></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>publicKey</CODE> -  the subjects public key    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setSerialNumber"><!-- --></A>
   <H3>setSerialNumber</H3>
   <PRE>void <B>setSerialNumber</B>(&lt;ByteString&gt; serialNumber)</PRE>
   
      <UL>Sets the serial number.</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>serialNumber</CODE> -  the serial number for the certificate    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setSignatureAlgorithm"><!-- --></A>
   <H3>setSignatureAlgorithm</H3>
   <PRE>void <B>setSignatureAlgorithm</B>(&lt;Number&gt; alg)</PRE>
   
      <UL>Sets the signature algorithm. Currently only Crypto.RSA is supported</UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>alg</CODE> -  the signature algorithm, only Crypto.RSA supported    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="setSubject"><!-- --></A>
   <H3>setSubject</H3>
   <PRE>void <B>setSubject</B>(&lt;Object&gt; subject)</PRE>
   
      <UL>Sets the subject name.

 <p>The subject name must be a JavaScript object containing the properties:</p>
 <ul>
  <li>C - the country</li>
  <li>O - the organization</li>
  <li>OU - the organization unit</li>
  <li>CN - the common name</li>
 </ul>
 <p>Example:</p>
 <pre>
	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
 </pre></UL>
   

   <!-- METHOD PARAMETERS START -->
   
   <UL>
   <B>Parameters:</B>
   
     <UL><CODE>subject</CODE> -  the subject name    
      </UL> 
   
   </UL>
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-x509certificategenerator.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="TestStepRunner.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<A HREF="X509Name.html"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
X509Name
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="X509Name";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-x509name.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="X509CertificateGenerator.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<B>NEXT CLASS</B></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>

<!-- ======== START OF CLASS DATA ======== -->
<H2>Class X509Name</H2>
<PRE>Object
   |
   +--<b>X509Name</b>
</PRE>


<HR>
<DL>
   <!-- Class definition -->
   <DT>class 
   <B>X509Name</B>
   

</DL>
   
   <P>
   <I>Defined in <a href='overview-summary-x509name.js.html'>x509name.js</a></I><BR/><BR/>
   </P>
   
   <HR>

<!-- ======== NESTED CLASS SUMMARY ======== -->

<!-- ======== END NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

   <A NAME="field_summary"><!-- --></A>
      <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
         <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
            <TD COLSPAN=2><FONT SIZE="+2">
               <B>Field Summary</B></FONT></TD>
         </TR>

   <!-- This is one instance field summary -->
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!commonName">commonName</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!countryName">countryName</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!dnQualifier">dnQualifier</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!emailAddress">emailAddress</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!generationQualifier">generationQualifier</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!givenname">givenname</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!initials">initials</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!localityName">localityName</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!name">name</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!organizationalUnitName">organizationalUnitName</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!organizationName">organizationName</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!serialNumber">serialNumber</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!stateOrProvinceName">stateOrProvinceName</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!surname">surname</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   
   <TR BGCOLOR="white" CLASS="TableRowColor">
   <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
   <CODE>&lt;static&gt; &nbsp;Object</CODE></FONT></TD>
   <TD><CODE><B><A HREF="#!s!title">title</A></B></CODE>
   <BR>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
   </TR>
   

   </TABLE>
   &nbsp;
   

   

<!-- =========== END FIELD SUMMARY =========== -->


<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
   <TD>
      <CODE>
	 <B>
	    <A HREF="#X509Name()">X509Name</A></B>()
      </CODE>
      <BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      
      </TD>
</TR>
</TABLE>

<!-- ======== END CONSTRUCTOR SUMMARY ======== -->

&nbsp;

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>


   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#getRDNAsString">getRDNAsString</A></B>(oid)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#hasRDN">hasRDN</A></B>(oid)
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>

   <TR BGCOLOR="white" CLASS="TableRowColor">
      <TD ALIGN="right" VALIGN="top" WIDTH="1%">
	 <FONT SIZE="-1">
	    <CODE>&nbsp;Object</CODE>
	 </FONT>
      </TD>
      <TD>
	 <CODE>
	    <B>
	       <A HREF="#toString">toString</A></B>()
	 </CODE>
	 <BR>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 
      </TD>
   </TR>


</TABLE>



<P>
<!-- ========== END METHOD SUMMARY =========== -->


<!-- ============ FIELD DETAIL START =========== -->

   <A NAME="field_detail"><!-- --></A>
   <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
      <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
         <TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
      </TR>
   </TABLE>

   
   <A NAME="!s!commonName"><!-- --></A>
   <H3>commonName</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>commonName</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!countryName"><!-- --></A>
   <H3>countryName</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>countryName</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!dnQualifier"><!-- --></A>
   <H3>dnQualifier</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>dnQualifier</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!emailAddress"><!-- --></A>
   <H3>emailAddress</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>emailAddress</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!generationQualifier"><!-- --></A>
   <H3>generationQualifier</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>generationQualifier</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!givenname"><!-- --></A>
   <H3>givenname</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>givenname</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!initials"><!-- --></A>
   <H3>initials</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>initials</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!localityName"><!-- --></A>
   <H3>localityName</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>localityName</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!name"><!-- --></A>
   <H3>name</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>name</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!organizationalUnitName"><!-- --></A>
   <H3>organizationalUnitName</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>organizationalUnitName</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!organizationName"><!-- --></A>
   <H3>organizationName</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>organizationName</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!serialNumber"><!-- --></A>
   <H3>serialNumber</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>serialNumber</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!stateOrProvinceName"><!-- --></A>
   <H3>stateOrProvinceName</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>stateOrProvinceName</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!surname"><!-- --></A>
   <H3>surname</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>surname</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   
   <A NAME="!s!title"><!-- --></A>
   <H3>title</H3>
   <PRE>&lt;static&gt;&nbsp;Object&nbsp;<B>title</B></PRE>
   <UL>
   
   
   </UL>
   <HR>
   


<!-- ============ FIELD DETAIL END =========== -->

    <!-- ========= CONSTRUCTOR DETAIL START ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1>
      <FONT SIZE="+2"><B>Constructor Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<A NAME="X509Name()"><!-- --></A><H3>
X509Name</H3>
<PRE><B>X509Name</B>()</PRE>




   </UL>


<!-- Constructor return value(s) -->

<!-- End constructor return value(s) -->

<!-- ADDITIONAL ATTRIBUTES -->

<HR/>
<!-- END ADDITIONAL ATTRIBUTES  -->

<!-- ========= CONSTRUCTOR DETAIL END ======== -->


<!-- ============ METHOD DETAIL START ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
   <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
      <TD COLSPAN=1><FONT SIZE="+2">
         <B>Method Detail</B></FONT>
      </TD>
   </TR>
</TABLE>

<!-- One single method detail entry -->

   <A NAME="getRDNAsString"><!-- --></A>
   <H3>getRDNAsString</H3>
   <PRE>Object <B>getRDNAsString</B>(oid)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="hasRDN"><!-- --></A>
   <H3>hasRDN</H3>
   <PRE>Object <B>hasRDN</B>(oid)</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>

   <A NAME="toString"><!-- --></A>
   <H3>toString</H3>
   <PRE>Object <B>toString</B>()</PRE>
   

   <!-- METHOD PARAMETERS START -->
   
   <!-- METHOD PARAMETERS END -->

   

   <!-- ADDITIONAL ATTRIBUTES START -->
   
   <!-- ADDITIONAL ATTRIBUTES  END -->
<HR>



<!-- ============ METHOD DETAIL END ========== -->

<!-- ========= END OF CLASS DATA ========= -->

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">  <A HREF="overview-summary-x509name.js.html"><FONT CLASS="NavBarFont1"><B>File</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"-->    <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="X509CertificateGenerator.html"><B>PREV CLASS</B></A><!-- 
   NEXT CLASS 
-->
&nbsp;<B>NEXT CLASS</B></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>

<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 All Classes 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" All Classes";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary.html" target="classFrame">All Classes</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="AlgorithmInfo.html" TARGET="classFrame">AlgorithmInfo</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="CardOutlineFactory.html" TARGET="classFrame">CardOutlineFactory</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="CRLGenerator.html" TARGET="classFrame">CRLGenerator</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="DataOutline.html" TARGET="classFrame">DataOutline</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="ECCUtils.html" TARGET="classFrame">ECCUtils</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="EncryptFile.html" TARGET="classFrame">EncryptFile</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="File.html" TARGET="classFrame">File</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="GLOBALS.html" TARGET="classFrame">GLOBALS</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineATR.html" TARGET="classFrame">OutlineATR</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineCard.html" TARGET="classFrame">OutlineCard</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineDataObject.html" TARGET="classFrame">OutlineDataObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineDF.html" TARGET="classFrame">OutlineDF</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineEF.html" TARGET="classFrame">OutlineEF</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineFCP.html" TARGET="classFrame">OutlineFCP</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlinePKCS15.html" TARGET="classFrame">OutlinePKCS15</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineRecord.html" TARGET="classFrame">OutlineRecord</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS10Generator.html" TARGET="classFrame">PKCS10Generator</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15.html" TARGET="classFrame">PKCS15</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_ApplicationTemplate.html" TARGET="classFrame">PKCS15_ApplicationTemplate</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_AuthenticationObject.html" TARGET="classFrame">PKCS15_AuthenticationObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_Certificate.html" TARGET="classFrame">PKCS15_Certificate</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CIAInfo.html" TARGET="classFrame">PKCS15_CIAInfo</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CIO.html" TARGET="classFrame">PKCS15_CIO</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CIODDO.html" TARGET="classFrame">PKCS15_CIODDO</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonAuthenticationObjectAttributes.html" TARGET="classFrame">PKCS15_CommonAuthenticationObjectAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonCertificateAttributes.html" TARGET="classFrame">PKCS15_CommonCertificateAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonDataContainerObjectAttributes.html" TARGET="classFrame">PKCS15_CommonDataContainerObjectAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonKeyAttributes.html" TARGET="classFrame">PKCS15_CommonKeyAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonPrivateKeyAttributes.html" TARGET="classFrame">PKCS15_CommonPrivateKeyAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonSecretKeyAttributes.html" TARGET="classFrame">PKCS15_CommonSecretKeyAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_DataContainerObject.html" TARGET="classFrame">PKCS15_DataContainerObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_PasswordAuthenticationObject.html" TARGET="classFrame">PKCS15_PasswordAuthenticationObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_Path.html" TARGET="classFrame">PKCS15_Path</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_PrivateKey.html" TARGET="classFrame">PKCS15_PrivateKey</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_SecretKey.html" TARGET="classFrame">PKCS15_SecretKey</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS8.html" TARGET="classFrame">PKCS8</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKIXCommon.html" TARGET="classFrame">PKIXCommon</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestCaseRunner.html" TARGET="classFrame">TestCaseRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestGroup.html" TARGET="classFrame">TestGroup</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestGroupRunner.html" TARGET="classFrame">TestGroupRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestLogFile.html" TARGET="classFrame">TestLogFile</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestProcedure.html" TARGET="classFrame">TestProcedure</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestProcedureRunner.html" TARGET="classFrame">TestProcedureRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestReport.html" TARGET="classFrame">TestReport</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestResult.html" TARGET="classFrame">TestResult</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestRunner.html" TARGET="classFrame">TestRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestStepRunner.html" TARGET="classFrame">TestStepRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="X509CertificateGenerator.html" TARGET="classFrame">X509CertificateGenerator</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="X509Name.html" TARGET="classFrame">X509Name</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>
 All Classes
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" All Classes";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

   <IMG SRC="./"/>

<H3 CLASS="FrameHeadingFont"></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary.html">All Classes</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="AlgorithmInfo.html" >AlgorithmInfo</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="CardOutlineFactory.html" >CardOutlineFactory</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="CRLGenerator.html" >CRLGenerator</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="DataOutline.html" >DataOutline</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="ECCUtils.html" >ECCUtils</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="EncryptFile.html" >EncryptFile</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="File.html" >File</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="GLOBALS.html" >GLOBALS</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineATR.html" >OutlineATR</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineCard.html" >OutlineCard</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineDataObject.html" >OutlineDataObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineDF.html" >OutlineDF</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineEF.html" >OutlineEF</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineFCP.html" >OutlineFCP</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlinePKCS15.html" >OutlinePKCS15</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineRecord.html" >OutlineRecord</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS10Generator.html" >PKCS10Generator</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15.html" >PKCS15</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_ApplicationTemplate.html" >PKCS15_ApplicationTemplate</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_AuthenticationObject.html" >PKCS15_AuthenticationObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_Certificate.html" >PKCS15_Certificate</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CIAInfo.html" >PKCS15_CIAInfo</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CIO.html" >PKCS15_CIO</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CIODDO.html" >PKCS15_CIODDO</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonAuthenticationObjectAttributes.html" >PKCS15_CommonAuthenticationObjectAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonCertificateAttributes.html" >PKCS15_CommonCertificateAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonDataContainerObjectAttributes.html" >PKCS15_CommonDataContainerObjectAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonKeyAttributes.html" >PKCS15_CommonKeyAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonPrivateKeyAttributes.html" >PKCS15_CommonPrivateKeyAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonSecretKeyAttributes.html" >PKCS15_CommonSecretKeyAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_DataContainerObject.html" >PKCS15_DataContainerObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_PasswordAuthenticationObject.html" >PKCS15_PasswordAuthenticationObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_Path.html" >PKCS15_Path</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_PrivateKey.html" >PKCS15_PrivateKey</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_SecretKey.html" >PKCS15_SecretKey</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS8.html" >PKCS8</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKIXCommon.html" >PKIXCommon</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestCaseRunner.html" >TestCaseRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestGroup.html" >TestGroup</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestGroupRunner.html" >TestGroupRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestLogFile.html" >TestLogFile</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestProcedure.html" >TestProcedure</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestProcedureRunner.html" >TestProcedureRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestReport.html" >TestReport</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestResult.html" >TestResult</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestRunner.html" >TestRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestStepRunner.html" >TestStepRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="X509CertificateGenerator.html" >X509CertificateGenerator</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="X509Name.html" >X509Name</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>
 API Help 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" API Help";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->

<HR>
<CENTER>
<H1>
How This API Document Is Organized</H1>
</CENTER>
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
Class</H3>
<BLOCKQUOTE>

<P>
Each class has its own separate page. Each of these pages has three sections consisting of a class description, summary tables, and detailed member descriptions:<UL>
<LI>Class inheritance diagram<LI>Direct Subclasses<LI>Class declaration<LI>Class description
<P>
<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
<P>
<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
Each summary entry contains the first sentence from the detailed description for that item. </BLOCKQUOTE>
<!--H3>
Tree (Class Hierarchy)</H3>
<BLOCKQUOTE>
There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all classes. The hierarchy page contains a list of classes. The classes are organized by inheritance structure starting with <code>Object</code>.<UL>
</BLOCKQUOTE-->
<!-- H3>
Deprecated API</H3>
<BLOCKQUOTE>
The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE-->
<H3>
Index</H3>
<BLOCKQUOTE>
The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, constructors, methods, and fields.</BLOCKQUOTE>
<H3>
Prev/Next</H3>
These links take you to the next or previous class, interface, package, or related page.<H3>
Frames/No Frames</H3>
These links show and hide the HTML frames.  All pages are available with or without frames.
<P>
<FONT SIZE="-1">
<EM>
This help file applies to API documentation generated using the standard doclet.</EM>
</FONT>
<BR>
<HR>

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD-->
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
Index ()
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="Index ()";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD-->
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="index-all.html" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->

<!--
 Listing of letters
-->
&nbsp;<A HREF="index-all.html#__A__">A</A>&nbsp;<A HREF="index-all.html#__B__">B</A>&nbsp;<A HREF="index-all.html#__C__">C</A>&nbsp;<A HREF="index-all.html#__D__">D</A>&nbsp;<A HREF="index-all.html#__E__">E</A>&nbsp;<A HREF="index-all.html#__F__">F</A>&nbsp;<A HREF="index-all.html#__G__">G</A>&nbsp;<A HREF="index-all.html#__H__">H</A>&nbsp;<A HREF="index-all.html#__I__">I</A>&nbsp;<A HREF="index-all.html#__K__">K</A>&nbsp;<A HREF="index-all.html#__L__">L</A>&nbsp;<A HREF="index-all.html#__M__">M</A>&nbsp;<A HREF="index-all.html#__N__">N</A>&nbsp;<A HREF="index-all.html#__O__">O</A>&nbsp;<A HREF="index-all.html#__P__">P</A>&nbsp;<A HREF="index-all.html#__R__">R</A>&nbsp;<A HREF="index-all.html#__S__">S</A>&nbsp;<A HREF="index-all.html#__T__">T</A>&nbsp;<A HREF="index-all.html#__U__">U</A>&nbsp;<A HREF="index-all.html#__V__">V</A>&nbsp;<A HREF="index-all.html#__W__">W</A>&nbsp;<A HREF="index-all.html#__X__">X</A>
<HR>
<!-- End letter listing -->

<A NAME="__A__"><!-- --></A><H2>
<B>A</B></H2>

<DL>
<DT><A HREF="CRLGenerator.html#aACompromise"><B>aACompromise</B></A> - 
Class field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIO.html#accessControlRules"><B>accessControlRules</B></A> - 
Instance field in  class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#accessFlags"><B>accessFlags</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="DataOutline.html#actionListener"><B>actionListener(node, action)</B></A> - 
Instance method in  class <A HREF="DataOutline.html">DataOutline</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroupRunner.html#actionListener"><B>actionListener(source, action)</B></A> - 
Instance method in  class <A HREF="TestGroupRunner.html">TestGroupRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#actionListener"><B>actionListener(source, actionName)</B></A> - 
Instance method in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#actionListener"><B>actionListener(source, actionName)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#addAuthorityKeyIdentifierExtension"><B>addAuthorityKeyIdentifierExtension(publicKey)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#addAuthorityKeyIdentifierExtension"><B>addAuthorityKeyIdentifierExtension(publicKey)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#addBasicConstraintsExtension"><B>addBasicConstraintsExtension(cA, pathLenConstraint)</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#addBasicConstraintsExtension"><B>addBasicConstraintsExtension(cA, pathLenConstraint)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#addCRLDistributionPointURL"><B>addCRLDistributionPointURL(url)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#addCRLNumberExtension"><B>addCRLNumberExtension(crlnumber)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#addDays"><B>addDays(d, days)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#addExtendedKeyUsageExtension"><B>addExtendedKeyUsageExtension(keyusages)</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#addExtendedKeyUsages"><B>addExtendedKeyUsages(oids, critical)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#addExtension"><B>addExtension(extnID, critical, extnValue)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#addExtension"><B>addExtension(extnID, critical, extnValue)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#addExtension"><B>addExtension(extnID, extnValue)</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#addKeyUsageExtension"><B>addKeyUsageExtension(flags)</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#addKeyUsageExtension"><B>addKeyUsageExtension(flags)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#addLog"><B>addLog(log)</B></A> - 
Instance method in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#addNames"><B>addNames(t, name)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestReport.html#addResult"><B>addResult(result)</B></A> - 
Instance method in  class <A HREF="TestReport.html">TestReport</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#addRevokedCertificate"><B>addRevokedCertificate(revokedCertificate)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#addSubjectKeyIdentifierExtension"><B>addSubjectKeyIdentifierExtension()</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#addTest"><B>addTest(name, listener)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#addTestGroup"><B>addTestGroup(testGroup)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#addTestGroupFromXML"><B>addTestGroupFromXML(file, parameter)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#addTestProcedure"><B>addTestProcedure(proc)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#addTestProcedureFromXML"><B>addTestProcedureFromXML(file, parameter)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#affiliationChanged"><B>affiliationChanged</B></A> - 
Class field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlinePKCS15.html#aid"><B>aid</B></A> - 
Instance field in  class <A HREF="OutlinePKCS15.html">OutlinePKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_ApplicationTemplate.html#aid"><B>aid</B></A> - 
Instance field in  class <A HREF="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="AlgorithmInfo.html#algorithm"><B>algorithm</B></A> - 
Instance field in  class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="AlgorithmInfo.html#"><B>AlgorithmInfo</B></A> - 
 class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="AlgorithmInfo.html#constructor_detail"><B>AlgorithmInfo(tlv)</B></A> - 
Constructor in  class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="AlgorithmInfo.html#algRef"><B>algRef</B></A> - 
Instance field in  class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#algReference"><B>algReference</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonDataContainerObjectAttributes.html#applicationName"><B>applicationName</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonDataContainerObjectAttributes.html">PKCS15_CommonDataContainerObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonDataContainerObjectAttributes.html#applicationOID"><B>applicationOID</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonDataContainerObjectAttributes.html">PKCS15_CommonDataContainerObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="GLOBALS.html#ARRDecorator"><B>ARRDecorator(asn1)</B></A> - 
Class method in  class <A HREF="GLOBALS.html">GLOBALS</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="DataOutline.html#asn1DecoratorHook"><B>asn1DecoratorHook(format)</B></A> - 
Instance method in  class <A HREF="DataOutline.html">DataOutline</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#assertEquals"><B>assertEquals(first, second, message)</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedure.html#assertEquals"><B>assertEquals(first, second, message)</B></A> - 
Instance method in  class <A HREF="TestProcedure.html">TestProcedure</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#assertTrue"><B>assertTrue(result, message)</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedure.html#assertTrue"><B>assertTrue(result, message)</B></A> - 
Instance method in  class <A HREF="TestProcedure.html">TestProcedure</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlinePKCS15.html#at"><B>at</B></A> - 
Instance field in  class <A HREF="OutlinePKCS15.html">OutlinePKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineATR.html#atr"><B>atr</B></A> - 
Instance field in  class <A HREF="OutlineATR.html">OutlineATR</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineCard.html#atr"><B>atr</B></A> - 
Instance field in  class <A HREF="OutlineCard.html">OutlineCard</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIO.html#authId"><B>authId</B></A> - 
Instance field in  class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonAuthenticationObjectAttributes.html#authIdThis"><B>authIdThis</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonAuthenticationObjectAttributes.html">PKCS15_CommonAuthenticationObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonCertificateAttributes.html#authority"><B>authority</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonCertificateAttributes.html">PKCS15_CommonCertificateAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonAuthenticationObjectAttributes.html#authReference"><B>authReference</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonAuthenticationObjectAttributes.html">PKCS15_CommonAuthenticationObjectAttributes</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__B__"><!-- --></A><H2>
<B>B</B></H2>

<DL>
<DT><A HREF="PKIXCommon.html#bitstringForInteger"><B>bitstringForInteger(val)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP160r1"><B>brainpoolP160r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP160t1"><B>brainpoolP160t1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP192r1"><B>brainpoolP192r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP192t1"><B>brainpoolP192t1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP224r1"><B>brainpoolP224r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP224t1"><B>brainpoolP224t1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP256r1"><B>brainpoolP256r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP256t1"><B>brainpoolP256t1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP320r1"><B>brainpoolP320r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP320t1"><B>brainpoolP320t1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP384r1"><B>brainpoolP384r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP384t1"><B>brainpoolP384t1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP512r1"><B>brainpoolP512r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#brainpoolP512t1"><B>brainpoolP512t1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__C__"><!-- --></A><H2>
<B>C</B></H2>

<DL>
<DT><A HREF="ECCUtils.html#c2pnb163v1"><B>c2pnb163v1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2pnb163v2"><B>c2pnb163v2</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2pnb163v3"><B>c2pnb163v3</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2pnb176w1"><B>c2pnb176w1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2pnb208w1"><B>c2pnb208w1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2pnb272w1"><B>c2pnb272w1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2pnb304w1"><B>c2pnb304w1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2pnb368w1"><B>c2pnb368w1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2tnb191v1"><B>c2tnb191v1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2tnb191v2"><B>c2tnb191v2</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2tnb191v3"><B>c2tnb191v3</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2tnb239v1"><B>c2tnb239v1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2tnb239v2"><B>c2tnb239v2</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2tnb239v3"><B>c2tnb239v3</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2tnb359v1"><B>c2tnb359v1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#c2tnb431r1"><B>c2tnb431r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#cACompromise"><B>cACompromise</B></A> - 
Class field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDF.html#card"><B>card</B></A> - 
Instance field in  class <A HREF="OutlineDF.html">OutlineDF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15.html#card"><B>card</B></A> - 
Instance field in  class <A HREF="PKCS15.html">PKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#cardflags"><B>cardflags</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#"><B>CardOutlineFactory</B></A> - 
 class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#constructor_detail"><B>CardOutlineFactory()</B></A> - 
Constructor in  class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#certificateHold"><B>certificateHold</B></A> - 
Class field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#cessationOfOperation"><B>cessationOfOperation</B></A> - 
Class field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIODDO.html#ciaInfoPath"><B>ciaInfoPath</B></A> - 
Instance field in  class <A HREF="PKCS15_CIODDO.html">PKCS15_CIODDO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#clearResult"><B>clearResult()</B></A> - 
Instance method in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestStepRunner.html#clearResult"><B>clearResult()</B></A> - 
Instance method in  class <A HREF="TestStepRunner.html">TestStepRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#clearResults"><B>clearResults()</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="File.html#close"><B>close()</B></A> - 
Instance method in  class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#collapseAll"><B>collapseAll()</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#commonName"><B>commonName</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#convertUnsignedInteger"><B>convertUnsignedInteger(value)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#convertUnsignedInteger"><B>convertUnsignedInteger(value)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#countryName"><B>countryName</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#createECSubjectPublicKeyInfo"><B>createECSubjectPublicKeyInfo(publicKey, encodeECDomainParameter)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#createRSASubjectPublicKeyInfo"><B>createRSASubjectPublicKeyInfo(publicKey)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#"><B>CRLGenerator</B></A> - 
 class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#constructor_detail"><B>CRLGenerator(crypto)</B></A> - 
Constructor in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="GLOBALS.html#CRLGeneratorTest"><B>CRLGeneratorTest()</B></A> - 
Class method in  class <A HREF="GLOBALS.html">GLOBALS</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#cRLSign"><B>cRLSign</B></A> - 
Class field in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#cRLSign"><B>cRLSign</B></A> - 
Class field in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#cRLSign"><B>cRLSign</B></A> - 
Class field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="GLOBALS.html#CRTDecorator"><B>CRTDecorator(asn1)</B></A> - 
Class method in  class <A HREF="GLOBALS.html">GLOBALS</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#crypto"><B>crypto</B></A> - 
Instance field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#crypto"><B>crypto</B></A> - 
Instance field in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#crypto"><B>crypto</B></A> - 
Instance field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="DataOutline.html#ctxMenuList"><B>ctxMenuList</B></A> - 
Class field in  class <A HREF="DataOutline.html">DataOutline</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__D__"><!-- --></A><H2>
<B>D</B></H2>

<DL>
<DT><A HREF="DataOutline.html#data"><B>data</B></A> - 
Instance field in  class <A HREF="DataOutline.html">DataOutline</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#dataEncipherment"><B>dataEncipherment</B></A> - 
Class field in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#dataEncipherment"><B>dataEncipherment</B></A> - 
Class field in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#dataEncipherment"><B>dataEncipherment</B></A> - 
Class field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="DataOutline.html#"><B>DataOutline</B></A> - 
 class <A HREF="DataOutline.html">DataOutline</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="DataOutline.html#constructor_detail"><B>DataOutline(data, format)</B></A> - 
Constructor in  class <A HREF="DataOutline.html">DataOutline</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_ApplicationTemplate.html#ddo"><B>ddo</B></A> - 
Instance field in  class <A HREF="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#decipherOnly"><B>decipherOnly</B></A> - 
Class field in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#decipherOnly"><B>decipherOnly</B></A> - 
Class field in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#decipherOnly"><B>decipherOnly</B></A> - 
Class field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#decodeECCKeyFromPKCS8Format"><B>decodeECCKeyFromPKCS8Format(domainParameter, encodedKey)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#decodeECParameters"><B>decodeECParameters(tlv)</B></A> - 
Class method in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#decodeKeyFromPKCS8Format"><B>decodeKeyFromPKCS8Format(encodedKey)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#decodeRSAKeyFromPKCS8Format"><B>decodeRSAKeyFromPKCS8Format(algparam, privateKey)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#decodeUncompressedECPoint"><B>decodeUncompressedECPoint(uncompressedPoint)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="DataOutline.html#decorate"><B>decorate(format)</B></A> - 
Instance method in  class <A HREF="DataOutline.html">DataOutline</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDataObject.html#df"><B>df</B></A> - 
Instance field in  class <A HREF="OutlineDataObject.html">OutlineDataObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineEF.html#df"><B>df</B></A> - 
Instance field in  class <A HREF="OutlineEF.html">OutlineEF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#digitalSignature"><B>digitalSignature</B></A> - 
Class field in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#digitalSignature"><B>digitalSignature</B></A> - 
Class field in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#digitalSignature"><B>digitalSignature</B></A> - 
Class field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#dnQualifier"><B>dnQualifier</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#dtoUTC"><B>dtoUTC(d)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__E__"><!-- --></A><H2>
<B>E</B></H2>

<DL>
<DT><A HREF="ECCUtils.html#"><B>ECCUtils</B></A> - 
 class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#constructor_detail"><B>ECCUtils()</B></A> - 
Constructor in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#ECParametersToString"><B>ECParametersToString(key)</B></A> - 
Class method in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineRecord.html#ef"><B>ef</B></A> - 
Instance field in  class <A HREF="OutlineRecord.html">OutlineRecord</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineRecord.html#efdesc"><B>efdesc</B></A> - 
Instance field in  class <A HREF="OutlineRecord.html">OutlineRecord</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_Path.html#efidOrPath"><B>efidOrPath</B></A> - 
Instance field in  class <A HREF="PKCS15_Path.html">PKCS15_Path</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#emailAddress"><B>emailAddress</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#enable"><B>enable(name, state)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#enable"><B>enable(state)</B></A> - 
Instance method in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#encipherOnly"><B>encipherOnly</B></A> - 
Class field in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#encipherOnly"><B>encipherOnly</B></A> - 
Class field in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#encipherOnly"><B>encipherOnly</B></A> - 
Class field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#encodeECCKeyUsingPKCS8Format"><B>encodeECCKeyUsingPKCS8Format(privateKey)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#encodeECDomainParameter"><B>encodeECDomainParameter</B></A> - 
Instance field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#encodeKeyUsingPKCS8Format"><B>encodeKeyUsingPKCS8Format(privateKey, publicKey)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#encodeName"><B>encodeName(name)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#encodeRSAKey"><B>encodeRSAKey(privateKey, publicKey)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#encodeRSAKeyUsingPKCS8Format"><B>encodeRSAKeyUsingPKCS8Format(privateKey, publicKey)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#encodeUncompressedECPoint"><B>encodeUncompressedECPoint(x,y)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="EncryptFile.html#encrypt"><B>encrypt()</B></A> - 
Instance method in  class <A HREF="EncryptFile.html">EncryptFile</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="EncryptFile.html#"><B>EncryptFile</B></A> - 
 class <A HREF="EncryptFile.html">EncryptFile</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="EncryptFile.html#constructor_detail"><B>EncryptFile()</B></A> - 
Constructor in  class <A HREF="EncryptFile.html">EncryptFile</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#endDate"><B>endDate</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#expandAll"><B>expandAll()</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineCard.html#expandListener"><B>expandListener()</B></A> - 
Instance method in  class <A HREF="OutlineCard.html">OutlineCard</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDataObject.html#expandListener"><B>expandListener()</B></A> - 
Instance method in  class <A HREF="OutlineDataObject.html">OutlineDataObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDF.html#expandListener"><B>expandListener()</B></A> - 
Instance method in  class <A HREF="OutlineDF.html">OutlineDF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineEF.html#expandListener"><B>expandListener()</B></A> - 
Instance method in  class <A HREF="OutlineEF.html">OutlineEF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlinePKCS15.html#expandListener"><B>expandListener()</B></A> - 
Instance method in  class <A HREF="OutlinePKCS15.html">OutlinePKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineRecord.html#expandListener"><B>expandListener()</B></A> - 
Instance method in  class <A HREF="OutlineRecord.html">OutlineRecord</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__F__"><!-- --></A><H2>
<B>F</B></H2>

<DL>
<DT><A HREF="DataOutline.html#factory"><B>factory</B></A> - 
Instance field in  class <A HREF="DataOutline.html">DataOutline</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineATR.html#factory"><B>factory</B></A> - 
Instance field in  class <A HREF="OutlineATR.html">OutlineATR</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDataObject.html#factory"><B>factory</B></A> - 
Instance field in  class <A HREF="OutlineDataObject.html">OutlineDataObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDF.html#factory"><B>factory</B></A> - 
Instance field in  class <A HREF="OutlineDF.html">OutlineDF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineEF.html#factory"><B>factory</B></A> - 
Instance field in  class <A HREF="OutlineEF.html">OutlineEF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineFCP.html#factory"><B>factory</B></A> - 
Instance field in  class <A HREF="OutlineFCP.html">OutlineFCP</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlinePKCS15.html#factory"><B>factory</B></A> - 
Instance field in  class <A HREF="OutlinePKCS15.html">OutlinePKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineRecord.html#factory"><B>factory</B></A> - 
Instance field in  class <A HREF="OutlineRecord.html">OutlineRecord</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineFCP.html#fcp"><B>fcp</B></A> - 
Instance field in  class <A HREF="OutlineFCP.html">OutlineFCP</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="GLOBALS.html#FCPDecorator"><B>FCPDecorator(asn1)</B></A> - 
Class method in  class <A HREF="GLOBALS.html">GLOBALS</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="File.html#"><B>File</B></A> - 
 class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="File.html#constructor_detail"><B>File(name)</B></A> - 
Constructor in  class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIO.html#flags"><B>flags</B></A> - 
Instance field in  class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="DataOutline.html#format"><B>format</B></A> - 
Instance field in  class <A HREF="DataOutline.html">DataOutline</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDataObject.html#format"><B>format</B></A> - 
Instance field in  class <A HREF="OutlineDataObject.html">OutlineDataObject</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__G__"><!-- --></A><H2>
<B>G</B></H2>

<DL>
<DT><A HREF="PKCS10Generator.html#generateCertificationRequest"><B>generateCertificationRequest(privateKey)</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#generateCRL"><B>generateCRL(privateKey)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#generateX509Certificate"><B>generateX509Certificate(privateKey)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#generationQualifier"><B>generationQualifier</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_Path.html#getAbsolutePath"><B>getAbsolutePath(df)</B></A> - 
Instance method in  class <A HREF="PKCS15_Path.html">PKCS15_Path</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="File.html#getAbsolutePath"><B>getAbsolutePath(mode)</B></A> - 
Instance method in  class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#getAccessFlagsAsString"><B>getAccessFlagsAsString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15.html#getAidList"><B>getAidList()</B></A> - 
Instance method in  class <A HREF="PKCS15.html">PKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#getAttributes"><B>getAttributes()</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#getCardflagsAsString"><B>getCardflagsAsString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15.html#getCIAInfo"><B>getCIAInfo(path)</B></A> - 
Instance method in  class <A HREF="PKCS15.html">PKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#getExtensions"><B>getExtensions()</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#getExtensions"><B>getExtensions()</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#getExtensions"><B>getExtensions()</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#getFailedCounter"><B>getFailedCounter()</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIO.html#getFlagsAsString"><B>getFlagsAsString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#getIssuer"><B>getIssuer()</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#getIssuer"><B>getIssuer()</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#getLog"><B>getLog()</B></A> - 
Instance method in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#getLog"><B>getLog()</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#getName"><B>getName()</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#getNextUpdate"><B>getNextUpdate()</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="AlgorithmInfo.html#getOperationsAsString"><B>getOperationsAsString()</B></A> - 
Instance method in  class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="File.html#getParentFile"><B>getParentFile()</B></A> - 
Instance method in  class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#getPwdFlagsAsString"><B>getPwdFlagsAsString()</B></A> - 
Instance method in  class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#getPwdTypeAsString"><B>getPwdTypeAsString()</B></A> - 
Instance method in  class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#getRDNAsString"><B>getRDNAsString(oid)</B></A> - 
Instance method in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#getRevokedCertificates"><B>getRevokedCertificates()</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#getSignatureAlgorithm"><B>getSignatureAlgorithm()</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#getSignatureAlgorithm"><B>getSignatureAlgorithm()</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#getSignatureAlgorithm"><B>getSignatureAlgorithm()</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#getSubject"><B>getSubject()</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#getSubject"><B>getSubject()</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#getSubjectPublicKeyInfo"><B>getSubjectPublicKeyInfo()</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#getSubjectPublicKeyInfo"><B>getSubjectPublicKeyInfo()</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#getTbsCertificate"><B>getTbsCertificate()</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#getTbsCertificateList"><B>getTbsCertificateList()</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#getTbsRequest"><B>getTbsRequest()</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#getTestCase"><B>getTestCase(name)</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#getTestCaseNames"><B>getTestCaseNames()</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#getTestProcedure"><B>getTestProcedure(name)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#getThisUpdate"><B>getThisUpdate()</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#getUsageAsString"><B>getUsageAsString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#getUsedTestProceduresForTestCase"><B>getUsedTestProceduresForTestCase(name)</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#getValidity"><B>getValidity()</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#getXML"><B>getXML()</B></A> - 
Instance method in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#givenname"><B>givenname</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="GLOBALS.html#"><B>GLOBALS</B></A> - 
 class <A HREF="GLOBALS.html">GLOBALS</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__H__"><!-- --></A><H2>
<B>H</B></H2>

<DL>
<DT><A HREF="TestCaseRunner.html#hasFailed"><B>hasFailed(log)</B></A> - 
Instance method in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#hasFailed"><B>hasFailed(name, log)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestStepRunner.html#hasPassed"><B>hasPassed()</B></A> - 
Instance method in  class <A HREF="TestStepRunner.html">TestStepRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#hasPassed"><B>hasPassed(log)</B></A> - 
Instance method in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#hasPassed"><B>hasPassed(name, log)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#hasRDN"><B>hasRDN(oid)</B></A> - 
Instance method in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#holderId"><B>holderId</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__I__"><!-- --></A><H2>
<B>I</B></H2>

<DL>
<DT><A HREF="ECCUtils.html#I2O"><B>I2O(value, length)</B></A> - 
Class method in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#I2O"><B>I2O(value, length)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDataObject.html#id"><B>id</B></A> - 
Instance field in  class <A HREF="OutlineDataObject.html">OutlineDataObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDF.html#id"><B>id</B></A> - 
Instance field in  class <A HREF="OutlineDF.html">OutlineDF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonCertificateAttributes.html#iD"><B>iD</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonCertificateAttributes.html">PKCS15_CommonCertificateAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonDataContainerObjectAttributes.html#iD"><B>iD</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonDataContainerObjectAttributes.html">PKCS15_CommonDataContainerObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#iD"><B>iD</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestResult.html#id"><B>id</B></A> - 
Instance field in  class <A HREF="TestResult.html">TestResult</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#idEcPublicKey"><B>idEcPublicKey</B></A> - 
Class field in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonCertificateAttributes.html#identifier"><B>identifier</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonCertificateAttributes.html">PKCS15_CommonCertificateAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_Path.html#index"><B>index</B></A> - 
Instance field in  class <A HREF="PKCS15_Path.html">PKCS15_Path</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#initials"><B>initials</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="GLOBALS.html#IntFromBitString"><B>IntFromBitString(b)</B></A> - 
Class method in  class <A HREF="GLOBALS.html">GLOBALS</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#isEnabled"><B>isEnabled()</B></A> - 
Instance method in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#isEnabled"><B>isEnabled(name)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#issuerId"><B>issuerId</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__K__"><!-- --></A><H2>
<B>K</B></H2>

<DL>
<DT><A HREF="PKCS10Generator.html#keyAgreement"><B>keyAgreement</B></A> - 
Class field in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#keyAgreement"><B>keyAgreement</B></A> - 
Class field in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#keyAgreement"><B>keyAgreement</B></A> - 
Class field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#keyCertSign"><B>keyCertSign</B></A> - 
Class field in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#keyCertSign"><B>keyCertSign</B></A> - 
Class field in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#keyCertSign"><B>keyCertSign</B></A> - 
Class field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#keyCompromise"><B>keyCompromise</B></A> - 
Class field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#keyEncipherment"><B>keyEncipherment</B></A> - 
Class field in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#keyEncipherment"><B>keyEncipherment</B></A> - 
Class field in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#keyEncipherment"><B>keyEncipherment</B></A> - 
Class field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#keyReference"><B>keyReference</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__L__"><!-- --></A><H2>
<B>L</B></H2>

<DL>
<DT><A HREF="PKCS15_ApplicationTemplate.html#label"><B>label</B></A> - 
Instance field in  class <A HREF="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#label"><B>label</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIO.html#label"><B>label</B></A> - 
Instance field in  class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#lastUpdate"><B>lastUpdate</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_Path.html#length"><B>length</B></A> - 
Instance field in  class <A HREF="PKCS15_Path.html">PKCS15_Path</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="File.html#list"><B>list()</B></A> - 
Instance method in  class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#loadCRLEntries"><B>loadCRLEntries(filename)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="EncryptFile.html#loadPublicKey"><B>loadPublicKey(fname)</B></A> - 
Instance method in  class <A HREF="EncryptFile.html">EncryptFile</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#localityName"><B>localityName</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestLogFile.html#log"><B>log</B></A> - 
Instance field in  class <A HREF="TestLogFile.html">TestLogFile</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestResult.html#log"><B>log</B></A> - 
Instance field in  class <A HREF="TestResult.html">TestResult</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#log"><B>log(message)</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedure.html#log"><B>log(message)</B></A> - 
Instance method in  class <A HREF="TestProcedure.html">TestProcedure</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__M__"><!-- --></A><H2>
<B>M</B></H2>

<DL>
<DT><A HREF="PKIXCommon.html#makeRDN"><B>makeRDN(name, oid, value)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#manufacturerID"><B>manufacturerID</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#marker"><B>marker</B></A> - 
Instance field in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#maxLength"><B>maxLength</B></A> - 
Instance field in  class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#minLength"><B>minLength</B></A> - 
Instance field in  class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__N__"><!-- --></A><H2>
<B>N</B></H2>

<DL>
<DT><A HREF="File.html#name"><B>name</B></A> - 
Instance field in  class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#name"><B>name</B></A> - 
Instance field in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#name"><B>name</B></A> - 
Instance field in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#name"><B>name</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#native_"><B>native_</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#newDataOutline"><B>newDataOutline(data, format)</B></A> - 
Instance method in  class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#newOutlineApplet"><B>newOutlineApplet(instance)</B></A> - 
Instance method in  class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#newOutlineATR"><B>newOutlineATR(atr)</B></A> - 
Instance method in  class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#newOutlineDataObject"><B>newOutlineDataObject(df, id, name, format)</B></A> - 
Instance method in  class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#newOutlineDF"><B>newOutlineDF(card, id, name, profile)</B></A> - 
Instance method in  class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#newOutlineEF"><B>newOutlineEF(df, name, profile)</B></A> - 
Instance method in  class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#newOutlineFCP"><B>newOutlineFCP(fcp)</B></A> - 
Instance method in  class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#newOutlinePKCS15"><B>newOutlinePKCS15(pkcs15, aid, at)</B></A> - 
Instance method in  class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CardOutlineFactory.html#newOutlineRecord"><B>newOutlineRecord(ef, no, efdesc)</B></A> - 
Instance method in  class <A HREF="CardOutlineFactory.html">CardOutlineFactory</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineRecord.html#no"><B>no</B></A> - 
Instance field in  class <A HREF="OutlineRecord.html">OutlineRecord</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#nonRepudiation"><B>nonRepudiation</B></A> - 
Class field in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#nonRepudiation"><B>nonRepudiation</B></A> - 
Class field in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#nonRepudiation"><B>nonRepudiation</B></A> - 
Class field in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__O__"><!-- --></A><H2>
<B>O</B></H2>

<DL>
<DT><A HREF="AlgorithmInfo.html#objId"><B>objId</B></A> - 
Instance field in  class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_ApplicationTemplate.html#objlist"><B>objlist</B></A> - 
Instance field in  class <A HREF="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIODDO.html#odfPath"><B>odfPath</B></A> - 
Instance field in  class <A HREF="PKCS15_CIODDO.html">PKCS15_CIODDO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#organizationalUnitName"><B>organizationalUnitName</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#organizationName"><B>organizationName</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineATR.html#"><B>OutlineATR</B></A> - 
 class <A HREF="OutlineATR.html">OutlineATR</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineATR.html#constructor_detail"><B>OutlineATR(atr)</B></A> - 
Constructor in  class <A HREF="OutlineATR.html">OutlineATR</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineCard.html#"><B>OutlineCard</B></A> - 
 class <A HREF="OutlineCard.html">OutlineCard</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineCard.html#constructor_detail"><B>OutlineCard()</B></A> - 
Constructor in  class <A HREF="OutlineCard.html">OutlineCard</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDataObject.html#"><B>OutlineDataObject</B></A> - 
 class <A HREF="OutlineDataObject.html">OutlineDataObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDataObject.html#constructor_detail"><B>OutlineDataObject(factory, df, id, name, format)</B></A> - 
Constructor in  class <A HREF="OutlineDataObject.html">OutlineDataObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDF.html#"><B>OutlineDF</B></A> - 
 class <A HREF="OutlineDF.html">OutlineDF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDF.html#constructor_detail"><B>OutlineDF(card, id, name, profile)</B></A> - 
Constructor in  class <A HREF="OutlineDF.html">OutlineDF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineEF.html#"><B>OutlineEF</B></A> - 
 class <A HREF="OutlineEF.html">OutlineEF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineEF.html#constructor_detail"><B>OutlineEF(df, name, profile)</B></A> - 
Constructor in  class <A HREF="OutlineEF.html">OutlineEF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineFCP.html#"><B>OutlineFCP</B></A> - 
 class <A HREF="OutlineFCP.html">OutlineFCP</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineFCP.html#constructor_detail"><B>OutlineFCP(fcp)</B></A> - 
Constructor in  class <A HREF="OutlineFCP.html">OutlineFCP</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlinePKCS15.html#"><B>OutlinePKCS15</B></A> - 
 class <A HREF="OutlinePKCS15.html">OutlinePKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlinePKCS15.html#constructor_detail"><B>OutlinePKCS15(factory, pkcs15, aid, at)</B></A> - 
Constructor in  class <A HREF="OutlinePKCS15.html">OutlinePKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineRecord.html#"><B>OutlineRecord</B></A> - 
 class <A HREF="OutlineRecord.html">OutlineRecord</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineRecord.html#constructor_detail"><B>OutlineRecord(ef, no, efdesc)</B></A> - 
Constructor in  class <A HREF="OutlineRecord.html">OutlineRecord</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__P__"><!-- --></A><H2>
<B>P</B></H2>

<DL>
<DT><A HREF="ECCUtils.html#PAD"><B>PAD</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#PAD"><B>PAD</B></A> - 
Class field in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#parameter"><B>parameter</B></A> - 
Instance field in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="AlgorithmInfo.html#parameters"><B>parameters</B></A> - 
Instance field in  class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDF.html#parentdf"><B>parentdf</B></A> - 
Instance field in  class <A HREF="OutlineDF.html">OutlineDF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15.html#parseObjectList"><B>parseObjectList(data)</B></A> - 
Class method in  class <A HREF="PKCS15.html">PKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_ApplicationTemplate.html#path"><B>path</B></A> - 
Instance field in  class <A HREF="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#"><B>PKCS10Generator</B></A> - 
 class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#constructor_detail"><B>PKCS10Generator(crypto)</B></A> - 
Constructor in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="GLOBALS.html#PKCS10GeneratorTest"><B>PKCS10GeneratorTest()</B></A> - 
Class method in  class <A HREF="GLOBALS.html">GLOBALS</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlinePKCS15.html#pkcs15"><B>pkcs15</B></A> - 
Instance field in  class <A HREF="OutlinePKCS15.html">OutlinePKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15.html#"><B>PKCS15</B></A> - 
 class <A HREF="PKCS15.html">PKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15.html#constructor_detail"><B>PKCS15(card)</B></A> - 
Constructor in  class <A HREF="PKCS15.html">PKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_ApplicationTemplate.html#"><B>PKCS15_ApplicationTemplate</B></A> - 
 class <A HREF="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_ApplicationTemplate.html#constructor_detail"><B>PKCS15_ApplicationTemplate(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_AuthenticationObject.html#"><B>PKCS15_AuthenticationObject</B></A> - 
 class <A HREF="PKCS15_AuthenticationObject.html">PKCS15_AuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_AuthenticationObject.html#constructor_detail"><B>PKCS15_AuthenticationObject(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_AuthenticationObject.html">PKCS15_AuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_Certificate.html#"><B>PKCS15_Certificate</B></A> - 
 class <A HREF="PKCS15_Certificate.html">PKCS15_Certificate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_Certificate.html#constructor_detail"><B>PKCS15_Certificate(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_Certificate.html">PKCS15_Certificate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#"><B>PKCS15_CIAInfo</B></A> - 
 class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#constructor_detail"><B>PKCS15_CIAInfo(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIO.html#"><B>PKCS15_CIO</B></A> - 
 class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIO.html#constructor_detail"><B>PKCS15_CIO(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIODDO.html#"><B>PKCS15_CIODDO</B></A> - 
 class <A HREF="PKCS15_CIODDO.html">PKCS15_CIODDO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIODDO.html#constructor_detail"><B>PKCS15_CIODDO(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_CIODDO.html">PKCS15_CIODDO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonAuthenticationObjectAttributes.html#"><B>PKCS15_CommonAuthenticationObjectAttributes</B></A> - 
 class <A HREF="PKCS15_CommonAuthenticationObjectAttributes.html">PKCS15_CommonAuthenticationObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonAuthenticationObjectAttributes.html#constructor_detail"><B>PKCS15_CommonAuthenticationObjectAttributes(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_CommonAuthenticationObjectAttributes.html">PKCS15_CommonAuthenticationObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonCertificateAttributes.html#"><B>PKCS15_CommonCertificateAttributes</B></A> - 
 class <A HREF="PKCS15_CommonCertificateAttributes.html">PKCS15_CommonCertificateAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonCertificateAttributes.html#constructor_detail"><B>PKCS15_CommonCertificateAttributes(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_CommonCertificateAttributes.html">PKCS15_CommonCertificateAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonDataContainerObjectAttributes.html#"><B>PKCS15_CommonDataContainerObjectAttributes</B></A> - 
 class <A HREF="PKCS15_CommonDataContainerObjectAttributes.html">PKCS15_CommonDataContainerObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonDataContainerObjectAttributes.html#constructor_detail"><B>PKCS15_CommonDataContainerObjectAttributes(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_CommonDataContainerObjectAttributes.html">PKCS15_CommonDataContainerObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#"><B>PKCS15_CommonKeyAttributes</B></A> - 
 class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#constructor_detail"><B>PKCS15_CommonKeyAttributes(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonPrivateKeyAttributes.html#"><B>PKCS15_CommonPrivateKeyAttributes</B></A> - 
 class <A HREF="PKCS15_CommonPrivateKeyAttributes.html">PKCS15_CommonPrivateKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonPrivateKeyAttributes.html#constructor_detail"><B>PKCS15_CommonPrivateKeyAttributes(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_CommonPrivateKeyAttributes.html">PKCS15_CommonPrivateKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonSecretKeyAttributes.html#"><B>PKCS15_CommonSecretKeyAttributes</B></A> - 
 class <A HREF="PKCS15_CommonSecretKeyAttributes.html">PKCS15_CommonSecretKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonSecretKeyAttributes.html#constructor_detail"><B>PKCS15_CommonSecretKeyAttributes(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_CommonSecretKeyAttributes.html">PKCS15_CommonSecretKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_DataContainerObject.html#"><B>PKCS15_DataContainerObject</B></A> - 
 class <A HREF="PKCS15_DataContainerObject.html">PKCS15_DataContainerObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_DataContainerObject.html#constructor_detail"><B>PKCS15_DataContainerObject(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_DataContainerObject.html">PKCS15_DataContainerObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#"><B>PKCS15_PasswordAuthenticationObject</B></A> - 
 class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#constructor_detail"><B>PKCS15_PasswordAuthenticationObject(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_Path.html#"><B>PKCS15_Path</B></A> - 
 class <A HREF="PKCS15_Path.html">PKCS15_Path</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_Path.html#constructor_detail"><B>PKCS15_Path(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_Path.html">PKCS15_Path</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PrivateKey.html#"><B>PKCS15_PrivateKey</B></A> - 
 class <A HREF="PKCS15_PrivateKey.html">PKCS15_PrivateKey</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PrivateKey.html#constructor_detail"><B>PKCS15_PrivateKey(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_PrivateKey.html">PKCS15_PrivateKey</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_SecretKey.html#"><B>PKCS15_SecretKey</B></A> - 
 class <A HREF="PKCS15_SecretKey.html">PKCS15_SecretKey</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_SecretKey.html#constructor_detail"><B>PKCS15_SecretKey(tlv)</B></A> - 
Constructor in  class <A HREF="PKCS15_SecretKey.html">PKCS15_SecretKey</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#"><B>PKCS8</B></A> - 
 class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#constructor_detail"><B>PKCS8()</B></A> - 
Constructor in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#"><B>PKIXCommon</B></A> - 
 class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#constructor_detail"><B>PKIXCommon()</B></A> - 
Constructor in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#preferredLanguage"><B>preferredLanguage</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#prime192v1"><B>prime192v1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#prime192v2"><B>prime192v2</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#prime192v3"><B>prime192v3</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#prime239v1"><B>prime239v1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#prime239v2"><B>prime239v2</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#prime239v3"><B>prime239v3</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#prime256v1"><B>prime256v1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#privilegeWithdrawn"><B>privilegeWithdrawn</B></A> - 
Class field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineDF.html#profile"><B>profile</B></A> - 
Instance field in  class <A HREF="OutlineDF.html">OutlineDF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineEF.html#profile"><B>profile</B></A> - 
Instance field in  class <A HREF="OutlineEF.html">OutlineEF</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#profileIndication"><B>profileIndication</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIODDO.html#providerId"><B>providerId</B></A> - 
Instance field in  class <A HREF="PKCS15_CIODDO.html">PKCS15_CIODDO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_AuthenticationObject.html#pwd"><B>pwd</B></A> - 
Instance field in  class <A HREF="PKCS15_AuthenticationObject.html">PKCS15_AuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#pwdFlags"><B>pwdFlags</B></A> - 
Instance field in  class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#pwdReference"><B>pwdReference</B></A> - 
Instance field in  class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#pwdType"><B>pwdType</B></A> - 
Instance field in  class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__R__"><!-- --></A><H2>
<B>R</B></H2>

<DL>
<DT><A HREF="File.html#readAllAsBinary"><B>readAllAsBinary()</B></A> - 
Instance method in  class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="File.html#readAllAsString"><B>readAllAsString(encoding)</B></A> - 
Instance method in  class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15.html#readApplicationDirectory"><B>readApplicationDirectory()</B></A> - 
Instance method in  class <A HREF="PKCS15.html">PKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15.html#readCardObjects"><B>readCardObjects(df, path)</B></A> - 
Instance method in  class <A HREF="PKCS15.html">PKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#readFileFromDisk"><B>readFileFromDisk(filename)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15.html#readObjectListForApplication"><B>readObjectListForApplication(at)</B></A> - 
Instance method in  class <A HREF="PKCS15.html">PKCS15</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#recordInfo"><B>recordInfo</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="AlgorithmInfo.html#reference"><B>reference</B></A> - 
Instance field in  class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#removeFromCRL"><B>removeFromCRL</B></A> - 
Class field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#report"><B>report(fn)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#reset"><B>reset()</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#reset"><B>reset()</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#reset"><B>reset()</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#revokeCertificate"><B>revokeCertificate(serial, timestamp, reason, ext)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#rsaEncryption"><B>rsaEncryption</B></A> - 
Class field in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#run"><B>run()</B></A> - 
Instance method in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroupRunner.html#run"><B>run()</B></A> - 
Instance method in  class <A HREF="TestGroupRunner.html">TestGroupRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedure.html#run"><B>run()</B></A> - 
Instance method in  class <A HREF="TestProcedure.html">TestProcedure</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#run"><B>run()</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#run"><B>run(runner)</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#runTestCase"><B>runTestCase(casename, runner)</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#runTestProcedure"><B>runTestProcedure(name, param)</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__S__"><!-- --></A><H2>
<B>S</B></H2>

<DL>
<DT><A HREF="GLOBALS.html#SADecorator"><B>SADecorator(asn1)</B></A> - 
Class method in  class <A HREF="GLOBALS.html">GLOBALS</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#secp224r1"><B>secp224r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#secp256r1"><B>secp256r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#secp384r1"><B>secp384r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#secp521r1"><B>secp521r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#sect163r2"><B>sect163r2</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#sect233r1"><B>sect233r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#sect283r1"><B>sect283r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#sect409r1"><B>sect409r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#sect571r1"><B>sect571r1</B></A> - 
Class field in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonAuthenticationObjectAttributes.html#seIdentifier"><B>seIdentifier</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonAuthenticationObjectAttributes.html">PKCS15_CommonAuthenticationObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#seInfo"><B>seInfo</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#selected"><B>selected</B></A> - 
Instance field in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="DataOutline.html#selectedListener"><B>selectedListener()</B></A> - 
Instance method in  class <A HREF="DataOutline.html">DataOutline</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="OutlineATR.html#selectedListener"><B>selectedListener()</B></A> - 
Instance method in  class <A HREF="OutlineATR.html">OutlineATR</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestLogFile.html#selectedListener"><B>selectedListener()</B></A> - 
Instance method in  class <A HREF="TestLogFile.html">TestLogFile</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="EncryptFile.html#selectFileToEncrypt"><B>selectFileToEncrypt()</B></A> - 
Instance method in  class <A HREF="EncryptFile.html">EncryptFile</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="EncryptFile.html#selectPublicKey"><B>selectPublicKey()</B></A> - 
Instance method in  class <A HREF="EncryptFile.html">EncryptFile</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#serialNumber"><B>serialNumber</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#serialNumber"><B>serialNumber</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#setIssuer"><B>setIssuer(issuer)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#setIssuer"><B>setIssuer(issuer)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#setMarker"><B>setMarker(marker)</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#setNextUpdate"><B>setNextUpdate(datetime)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#setNotAfter"><B>setNotAfter(date)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#setNotBefore"><B>setNotBefore(date)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#setPublicKey"><B>setPublicKey(publicKey)</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#setPublicKey"><B>setPublicKey(publicKey)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#setReportDirectory"><B>setReportDirectory(dir)</B></A> - 
Instance method in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#setSerialNumber"><B>setSerialNumber(serialNumber)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#setSignatureAlgorithm"><B>setSignatureAlgorithm(alg)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#setSignatureAlgorithm"><B>setSignatureAlgorithm(alg)</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#setSignatureAlgorithm"><B>setSignatureAlgorithm(alg)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS10Generator.html#setSubject"><B>setSubject(subject)</B></A> - 
Instance method in  class <A HREF="PKCS10Generator.html">PKCS10Generator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#setSubject"><B>setSubject(subject)</B></A> - 
Instance method in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#setThisUpdate"><B>setThisUpdate(datetime)</B></A> - 
Instance method in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#setUp"><B>setUp()</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedure.html#setUp"><B>setUp()</B></A> - 
Instance method in  class <A HREF="TestProcedure.html">TestProcedure</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#startDate"><B>startDate</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#stateOrProvinceName"><B>stateOrProvinceName</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#storedLength"><B>storedLength</B></A> - 
Instance field in  class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#stripLeadingZeros"><B>stripLeadingZeros(value, size)</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="CRLGenerator.html#superseded"><B>superseded</B></A> - 
Class field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#supportedAlgorithms"><B>supportedAlgorithms</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="AlgorithmInfo.html#supportedOperations"><B>supportedOperations</B></A> - 
Instance field in  class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#surname"><B>surname</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__T__"><!-- --></A><H2>
<B>T</B></H2>

<DL>
<DT><A HREF="TestResult.html#tcxml"><B>tcxml</B></A> - 
Instance field in  class <A HREF="TestResult.html">TestResult</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#tearDown"><B>tearDown()</B></A> - 
Instance method in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedure.html#tearDown"><B>tearDown()</B></A> - 
Instance method in  class <A HREF="TestProcedure.html">TestProcedure</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="File.html#test"><B>test()</B></A> - 
Class method in  class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS8.html#test"><B>test()</B></A> - 
Class method in  class <A HREF="PKCS8.html">PKCS8</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#test"><B>test()</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#testCase"><B>testCase</B></A> - 
Instance field in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#"><B>TestCaseRunner</B></A> - 
 class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedureRunner.html#testCaseRunner"><B>testCaseRunner</B></A> - 
Instance field in  class <A HREF="TestProcedureRunner.html">TestProcedureRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#constructor_detail"><B>TestCaseRunner(testGroupRunner, testCase)</B></A> - 
Constructor in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#"><B>TestGroup</B></A> - 
 class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroupRunner.html#testGroup"><B>testGroup</B></A> - 
Instance field in  class <A HREF="TestGroupRunner.html">TestGroupRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroup.html#constructor_detail"><B>TestGroup(name, parameter)</B></A> - 
Constructor in  class <A HREF="TestGroup.html">TestGroup</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#testGroupPrototype"><B>testGroupPrototype</B></A> - 
Instance field in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#testGroupRunner"><B>testGroupRunner</B></A> - 
Instance field in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroupRunner.html#"><B>TestGroupRunner</B></A> - 
 class <A HREF="TestGroupRunner.html">TestGroupRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroupRunner.html#constructor_detail"><B>TestGroupRunner(testRunner, testGroup)</B></A> - 
Constructor in  class <A HREF="TestGroupRunner.html">TestGroupRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#testGroupRunners"><B>testGroupRunners</B></A> - 
Instance field in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestLogFile.html#"><B>TestLogFile</B></A> - 
 class <A HREF="TestLogFile.html">TestLogFile</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestLogFile.html#constructor_detail"><B>TestLogFile(parent, log)</B></A> - 
Constructor in  class <A HREF="TestLogFile.html">TestLogFile</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#testMapper"><B>testMapper</B></A> - 
Instance field in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedure.html#"><B>TestProcedure</B></A> - 
 class <A HREF="TestProcedure.html">TestProcedure</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedureRunner.html#testProcedure"><B>testProcedure</B></A> - 
Instance field in  class <A HREF="TestProcedureRunner.html">TestProcedureRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedure.html#constructor_detail"><B>TestProcedure(name, testgroup, parameter)</B></A> - 
Constructor in  class <A HREF="TestProcedure.html">TestProcedure</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#testProcedurePrototype"><B>testProcedurePrototype</B></A> - 
Instance field in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedureRunner.html#"><B>TestProcedureRunner</B></A> - 
 class <A HREF="TestProcedureRunner.html">TestProcedureRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestStepRunner.html#testProcedureRunner"><B>testProcedureRunner</B></A> - 
Instance field in  class <A HREF="TestStepRunner.html">TestStepRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestProcedureRunner.html#constructor_detail"><B>TestProcedureRunner(testCaseRunner, testProcedure)</B></A> - 
Constructor in  class <A HREF="TestProcedureRunner.html">TestProcedureRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#testProcedures"><B>testProcedures</B></A> - 
Instance field in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestReport.html#"><B>TestReport</B></A> - 
 class <A HREF="TestReport.html">TestReport</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#testReport"><B>testReport</B></A> - 
Instance field in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestReport.html#constructor_detail"><B>TestReport()</B></A> - 
Constructor in  class <A HREF="TestReport.html">TestReport</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestResult.html#"><B>TestResult</B></A> - 
 class <A HREF="TestResult.html">TestResult</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestResult.html#constructor_detail"><B>TestResult(id, verdict, log, tcxml)</B></A> - 
Constructor in  class <A HREF="TestResult.html">TestResult</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestReport.html#testResults"><B>testResults</B></A> - 
Instance field in  class <A HREF="TestReport.html">TestReport</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestGroupRunner.html#testRunner"><B>testRunner</B></A> - 
Instance field in  class <A HREF="TestGroupRunner.html">TestGroupRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#"><B>TestRunner</B></A> - 
 class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestRunner.html#constructor_detail"><B>TestRunner(name)</B></A> - 
Constructor in  class <A HREF="TestRunner.html">TestRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestStepRunner.html#testStep"><B>testStep</B></A> - 
Instance field in  class <A HREF="TestStepRunner.html">TestStepRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestStepRunner.html#"><B>TestStepRunner</B></A> - 
 class <A HREF="TestStepRunner.html">TestStepRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestStepRunner.html#constructor_detail"><B>TestStepRunner(testProcedureRunner, testStep)</B></A> - 
Constructor in  class <A HREF="TestStepRunner.html">TestStepRunner</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#title"><B>title</B></A> - 
Class field in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="AlgorithmInfo.html#tlv"><B>tlv</B></A> - 
Instance field in  class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#tlv"><B>tlv</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIO.html#tlv"><B>tlv</B></A> - 
Instance field in  class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="AlgorithmInfo.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="AlgorithmInfo.html">AlgorithmInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_ApplicationTemplate.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIO.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIODDO.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CIODDO.html">PKCS15_CIODDO</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonAuthenticationObjectAttributes.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CommonAuthenticationObjectAttributes.html">PKCS15_CommonAuthenticationObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonCertificateAttributes.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CommonCertificateAttributes.html">PKCS15_CommonCertificateAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonDataContainerObjectAttributes.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CommonDataContainerObjectAttributes.html">PKCS15_CommonDataContainerObjectAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_DataContainerObject.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_DataContainerObject.html">PKCS15_DataContainerObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PasswordAuthenticationObject.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_Path.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="PKCS15_Path.html">PKCS15_Path</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#toString"><B>toString()</B></A> - 
Instance method in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestResult.html#toXML"><B>toXML()</B></A> - 
Instance method in  class <A HREF="TestResult.html">TestResult</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_Certificate.html#type"><B>type</B></A> - 
Instance field in  class <A HREF="PKCS15_Certificate.html">PKCS15_Certificate</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_PrivateKey.html#type"><B>type</B></A> - 
Instance field in  class <A HREF="PKCS15_PrivateKey.html">PKCS15_PrivateKey</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_SecretKey.html#type"><B>type</B></A> - 
Instance field in  class <A HREF="PKCS15_SecretKey.html">PKCS15_SecretKey</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__U__"><!-- --></A><H2>
<B>U</B></H2>

<DL>
<DT><A HREF="CRLGenerator.html#unspecified"><B>unspecified</B></A> - 
Class field in  class <A HREF="CRLGenerator.html">CRLGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="ECCUtils.html#unwrapSignature"><B>unwrapSignature(signature, keylen)</B></A> - 
Class method in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CommonKeyAttributes.html#usage"><B>usage</B></A> - 
Instance field in  class <A HREF="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIO.html#userConsent"><B>userConsent</B></A> - 
Instance field in  class <A HREF="PKCS15_CIO.html">PKCS15_CIO</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__V__"><!-- --></A><H2>
<B>V</B></H2>

<DL>
<DT><A HREF="TestResult.html#verdict"><B>verdict</B></A> - 
Instance field in  class <A HREF="TestResult.html">TestResult</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKCS15_CIAInfo.html#version"><B>version</B></A> - 
Instance field in  class <A HREF="PKCS15_CIAInfo.html">PKCS15_CIAInfo</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__W__"><!-- --></A><H2>
<B>W</B></H2>

<DL>
<DT><A HREF="ECCUtils.html#wrapSignature"><B>wrapSignature(signature)</B></A> - 
Class method in  class <A HREF="ECCUtils.html">ECCUtils</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="File.html#writeAll"><B>writeAll(obj, encoding)</B></A> - 
Instance method in  class <A HREF="File.html">File</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="PKIXCommon.html#writeFileToDisk"><B>writeFileToDisk(filename, content)</B></A> - 
Class method in  class <A HREF="PKIXCommon.html">PKIXCommon</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestReport.html#writeReport"><B>writeReport(filename)</B></A> - 
Instance method in  class <A HREF="TestReport.html">TestReport</A>
<DD>&nbsp;
</DL>

<HR>

<A NAME="__X__"><!-- --></A><H2>
<B>X</B></H2>

<DL>
<DT><A HREF="X509CertificateGenerator.html#"><B>X509CertificateGenerator</B></A> - 
 class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509CertificateGenerator.html#constructor_detail"><B>X509CertificateGenerator(crypto)</B></A> - 
Constructor in  class <A HREF="X509CertificateGenerator.html">X509CertificateGenerator</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="GLOBALS.html#X509CertificateGeneratorECCTest"><B>X509CertificateGeneratorECCTest()</B></A> - 
Class method in  class <A HREF="GLOBALS.html">GLOBALS</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="GLOBALS.html#X509CertificateGeneratorRSATest"><B>X509CertificateGeneratorRSATest()</B></A> - 
Class method in  class <A HREF="GLOBALS.html">GLOBALS</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#"><B>X509Name</B></A> - 
 class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="X509Name.html#constructor_detail"><B>X509Name()</B></A> - 
Constructor in  class <A HREF="X509Name.html">X509Name</A>
<DD>&nbsp;
</DL>

<DL>
<DT><A HREF="TestCaseRunner.html#xml"><B>xml</B></A> - 
Instance field in  class <A HREF="TestCaseRunner.html">TestCaseRunner</A>
<DD>&nbsp;
</DL>

<HR>

<!-- 
   Listing of letters
-->
&nbsp;<A HREF="index-all.html#__A__">A</A>&nbsp;<A HREF="index-all.html#__B__">B</A>&nbsp;<A HREF="index-all.html#__C__">C</A>&nbsp;<A HREF="index-all.html#__D__">D</A>&nbsp;<A HREF="index-all.html#__E__">E</A>&nbsp;<A HREF="index-all.html#__F__">F</A>&nbsp;<A HREF="index-all.html#__G__">G</A>&nbsp;<A HREF="index-all.html#__H__">H</A>&nbsp;<A HREF="index-all.html#__I__">I</A>&nbsp;<A HREF="index-all.html#__K__">K</A>&nbsp;<A HREF="index-all.html#__L__">L</A>&nbsp;<A HREF="index-all.html#__M__">M</A>&nbsp;<A HREF="index-all.html#__N__">N</A>&nbsp;<A HREF="index-all.html#__O__">O</A>&nbsp;<A HREF="index-all.html#__P__">P</A>&nbsp;<A HREF="index-all.html#__R__">R</A>&nbsp;<A HREF="index-all.html#__S__">S</A>&nbsp;<A HREF="index-all.html#__T__">T</A>&nbsp;<A HREF="index-all.html#__U__">U</A>&nbsp;<A HREF="index-all.html#__V__">V</A>&nbsp;<A HREF="index-all.html#__W__">W</A>&nbsp;<A HREF="index-all.html#__X__">X</A>


<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
  <!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD-->
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B></B>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="index-all.html" TARGET="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->

<HR>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>
Generated Javascript Documentation 
</TITLE>
</HEAD>
<FRAMESET cols="20%,80%">

<FRAMESET rows="40%,50%">
<FRAME src="overview-frame.html" name="overviewFrame">

<FRAME src="allclasses-frame.html" name="packageFrame">

</FRAMESET>

<FRAME src="overview-summary.html" name="classFrame">
</FRAMESET>
<NOFRAMES>
<H2>
Frame Alert</H2>

<P>
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
<BR>
Link to <A HREF="allclasses-frame.html">Non-frame version.</A></NOFRAMES>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 ARRDecorator.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" ARRDecorator.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-ARRDecorator.js.html" 
                                            target="classFrame">ARRDecorator.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 BaseTestRunner.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" BaseTestRunner.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-BaseTestRunner.js.html" 
                                            target="classFrame">BaseTestRunner.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 CRTDecorator.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" CRTDecorator.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-CRTDecorator.js.html" 
                                            target="classFrame">CRTDecorator.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 CardOutlineFactory.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" CardOutlineFactory.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-CardOutlineFactory.js.html" 
                                            target="classFrame">CardOutlineFactory.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 CardOutlineFactory2.0.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" CardOutlineFactory2.0.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-CardOutlineFactory2.0.js.html" 
                                            target="classFrame">CardOutlineFactory2.0.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="CardOutlineFactory.html" TARGET="classFrame">CardOutlineFactory</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineDataObject.html" TARGET="classFrame">OutlineDataObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlinePKCS15.html" TARGET="classFrame">OutlinePKCS15</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 FCPDecorator.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" FCPDecorator.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-FCPDecorator.js.html" 
                                            target="classFrame">FCPDecorator.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 OutlineCore.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" OutlineCore.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-OutlineCore.js.html" 
                                            target="classFrame">OutlineCore.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="DataOutline.html" TARGET="classFrame">DataOutline</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineATR.html" TARGET="classFrame">OutlineATR</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineDF.html" TARGET="classFrame">OutlineDF</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineEF.html" TARGET="classFrame">OutlineEF</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineFCP.html" TARGET="classFrame">OutlineFCP</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineRecord.html" TARGET="classFrame">OutlineRecord</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 TestGroup.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" TestGroup.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-TestGroup.js.html" 
                                            target="classFrame">TestGroup.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestGroup.html" TARGET="classFrame">TestGroup</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 TestProcedure.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" TestProcedure.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-TestProcedure.js.html" 
                                            target="classFrame">TestProcedure.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestProcedure.html" TARGET="classFrame">TestProcedure</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 TestRunner.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" TestRunner.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-TestRunner.js.html" 
                                            target="classFrame">TestRunner.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestCaseRunner.html" TARGET="classFrame">TestCaseRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestGroupRunner.html" TARGET="classFrame">TestGroupRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestLogFile.html" TARGET="classFrame">TestLogFile</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestProcedureRunner.html" TARGET="classFrame">TestProcedureRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestReport.html" TARGET="classFrame">TestReport</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestResult.html" TARGET="classFrame">TestResult</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestRunner.html" TARGET="classFrame">TestRunner</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="TestStepRunner.html" TARGET="classFrame">TestStepRunner</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 crlgenerator.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" crlgenerator.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-crlgenerator.js.html" 
                                            target="classFrame">crlgenerator.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="CRLGenerator.html" TARGET="classFrame">CRLGenerator</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 eccutils.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" eccutils.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-eccutils.js.html" 
                                            target="classFrame">eccutils.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="ECCUtils.html" TARGET="classFrame">ECCUtils</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 encrypt-file.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" encrypt-file.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-encrypt-file.js.html" 
                                            target="classFrame">encrypt-file.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="EncryptFile.html" TARGET="classFrame">EncryptFile</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 explore.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" explore.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-explore.js.html" 
                                            target="classFrame">explore.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="OutlineCard.html" TARGET="classFrame">OutlineCard</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 file.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" file.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-file.js.html" 
                                            target="classFrame">file.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="File.html" TARGET="classFrame">File</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>
Overview ()
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="Overview ()";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

   <IMG SRC="./"/>

<H3 class="FrameHeadingFont"><B></B></H3>
<TABLE BORDER="0" WIDTH="100%">
<TR>
<B></B></FONT></TD>
</TR>
</TABLE>

<TABLE BORDER="0" WIDTH="100%">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="allclasses-frame.html" TARGET="packageFrame">All Classes</A></FONT>
<P>
<FONT size="+1" CLASS="FrameHeadingFont">
Files</FONT>
<BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-ARRDecorator.js.html" TARGET="packageFrame">ARRDecorator.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-BaseTestRunner.js.html" TARGET="packageFrame">BaseTestRunner.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-CardOutlineFactory.js.html" TARGET="packageFrame">CardOutlineFactory.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-CardOutlineFactory2.0.js.html" TARGET="packageFrame">CardOutlineFactory2.0.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-crlgenerator.js.html" TARGET="packageFrame">crlgenerator.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-CRTDecorator.js.html" TARGET="packageFrame">CRTDecorator.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-eccutils.js.html" TARGET="packageFrame">eccutils.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-encrypt-file.js.html" TARGET="packageFrame">encrypt-file.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-explore.js.html" TARGET="packageFrame">explore.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-FCPDecorator.js.html" TARGET="packageFrame">FCPDecorator.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-file.js.html" TARGET="packageFrame">file.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-OutlineCore.js.html" TARGET="packageFrame">OutlineCore.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-p15classes.js.html" TARGET="packageFrame">p15classes.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-pkcs10.js.html" TARGET="packageFrame">pkcs10.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-pkcs8.js.html" TARGET="packageFrame">pkcs8.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-pkixcommon.js.html" TARGET="packageFrame">pkixcommon.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-TestGroup.js.html" TARGET="packageFrame">TestGroup.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-TestProcedure.js.html" TARGET="packageFrame">TestProcedure.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-TestRunner.js.html" TARGET="packageFrame">TestRunner.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-x509certificategenerator.js.html" TARGET="packageFrame">x509certificategenerator.js</A></FONT><BR>

<FONT CLASS="FrameItemFont"><A HREF="overview-x509name.js.html" TARGET="packageFrame">x509name.js</A></FONT><BR>

</TD>
</TR>
</TABLE>

<P>
&nbsp;
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 p15classes.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" p15classes.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-p15classes.js.html" 
                                            target="classFrame">p15classes.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="AlgorithmInfo.html" TARGET="classFrame">AlgorithmInfo</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15.html" TARGET="classFrame">PKCS15</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_ApplicationTemplate.html" TARGET="classFrame">PKCS15_ApplicationTemplate</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_AuthenticationObject.html" TARGET="classFrame">PKCS15_AuthenticationObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CIAInfo.html" TARGET="classFrame">PKCS15_CIAInfo</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CIO.html" TARGET="classFrame">PKCS15_CIO</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CIODDO.html" TARGET="classFrame">PKCS15_CIODDO</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_Certificate.html" TARGET="classFrame">PKCS15_Certificate</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonAuthenticationObjectAttributes.html" TARGET="classFrame">PKCS15_CommonAuthenticationObjectAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonCertificateAttributes.html" TARGET="classFrame">PKCS15_CommonCertificateAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonDataContainerObjectAttributes.html" TARGET="classFrame">PKCS15_CommonDataContainerObjectAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonKeyAttributes.html" TARGET="classFrame">PKCS15_CommonKeyAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonPrivateKeyAttributes.html" TARGET="classFrame">PKCS15_CommonPrivateKeyAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_CommonSecretKeyAttributes.html" TARGET="classFrame">PKCS15_CommonSecretKeyAttributes</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_DataContainerObject.html" TARGET="classFrame">PKCS15_DataContainerObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_PasswordAuthenticationObject.html" TARGET="classFrame">PKCS15_PasswordAuthenticationObject</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_Path.html" TARGET="classFrame">PKCS15_Path</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_PrivateKey.html" TARGET="classFrame">PKCS15_PrivateKey</A>
<BR>
</FONT></TD>
</TR>

<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS15_SecretKey.html" TARGET="classFrame">PKCS15_SecretKey</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 pkcs10.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" pkcs10.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-pkcs10.js.html" 
                                            target="classFrame">pkcs10.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS10Generator.html" TARGET="classFrame">PKCS10Generator</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 pkcs8.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" pkcs8.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-pkcs8.js.html" 
                                            target="classFrame">pkcs8.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKCS8.html" TARGET="classFrame">PKCS8</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 pkixcommon.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" pkixcommon.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-pkixcommon.js.html" 
                                            target="classFrame">pkixcommon.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="PKIXCommon.html" TARGET="classFrame">PKIXCommon</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="ARRDecorator.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>ARRDecorator.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'ARRDecorator.js'<BR/><BR/>
	
</p>

<hr>



<!-- ========== METHOD SUMMARY =========== -->

	<a name="method_summary"><!-- --></a>
	<table border="1" cellpadding="3" cellspacing="0" width="100%">
		<tr bgcolor="#CCCCFF" class="TableHeadingColor">
			<td colspan=2>
				<font size="+2">
					<b>Method Summary</b>
				</font>
			</td>
		</tr>
	
		
		   <tr bgcolor="white" class="TableRowColor">
		      <td align="right" valign="top" width="1%">
			 <font size="-1">
			    <code>static&nbsp;void</code>
			 </font>
		      </td>
		      <td>
			 <code>
			    <b>
			       <a href="GLOBALS.html#!s!ARRDecorator">ARRDecorator</a></b>(asn1)
			 </code>
			 <br>
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			 
		      </td>
		   </tr>
		
	
	</table>
    <p>

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/*
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Function to name tags contained in Access Rules (EF.ARR)
 */</span>



<span class="comment">//</span>
<span class="comment">// Identify tags in the Expanded Access Rule found in EF_ARR</span>
<span class="comment">//</span>
<span class="reserved">function</span> ARRDecorator(asn1) {
	var recurse = false;
	var crt = false;
	
	switch(asn1.tag) {
	case 0x80:
		asn1.setName(<span class="literal">"accessMode"</span>);
		break;
	case 0x81:
		asn1.setName(<span class="literal">"commandP2"</span>);
		break;
	case 0x82:
		asn1.setName(<span class="literal">"commandP1"</span>);
		break;
	case 0x83:
		asn1.setName(<span class="literal">"commandP1P2"</span>);
		break;
	case 0x84:
		asn1.setName(<span class="literal">"commandINS"</span>);
		break;
	case 0x85:
		asn1.setName(<span class="literal">"commandINSP2"</span>);
		break;
	case 0x86:
		asn1.setName(<span class="literal">"commandINSP1"</span>);
		break;
	case 0x87:
		asn1.setName(<span class="literal">"commandINSP1P2"</span>);
		break;
	case 0x88:
		asn1.setName(<span class="literal">"commandCLA"</span>);
		break;
	case 0x89:
		asn1.setName(<span class="literal">"commandCLAP2"</span>);
		break;
	case 0x8A:
		asn1.setName(<span class="literal">"commandCLAP1"</span>);
		break;
	case 0x8B:
		asn1.setName(<span class="literal">"commandCLAP1P2"</span>);
		break;
	case 0x8C:
		asn1.setName(<span class="literal">"commandCLAINS"</span>);
		break;
	case 0x8D:
		asn1.setName(<span class="literal">"commandCLAINSP2"</span>);
		break;
	case 0x8E:
		asn1.setName(<span class="literal">"commandCLAINSP1"</span>);
		break;
	case 0x8F:
		asn1.setName(<span class="literal">"commandCLAINSP1P2"</span>);
		break;
	case 0x90:
		asn1.setName(<span class="literal">"always"</span>);
		break;
	case 0x97:
		asn1.setName(<span class="literal">"never"</span>);
		break;
	case 0x9C:
		asn1.setName(<span class="literal">"stateMachineDesc"</span>);
		break;
	case 0x9E:
		asn1.setName(<span class="literal">"securityConditionByte"</span>);
		break;
	case 0xA4:
		asn1.setName(<span class="literal">"authentication(AT)"</span>);
		crt = true;
		break;
	case 0xB4:
		asn1.setName(<span class="literal">"secureMessagingMac(CT)"</span>);
		crt = true;
		break;
	case 0xB6:
		asn1.setName(<span class="literal">"secureMessaging(DST)"</span>);
		crt = true;
		break;
	case 0xB8:
		asn1.setName(<span class="literal">"secureMessagingEnc(CCT)"</span>);
		crt = true;
		break;
	case 0xA0:
		asn1.setName(<span class="literal">"or"</span>);
		recurse = true;
		break;
	case 0xA7:
		asn1.setName(<span class="literal">"not"</span>);
		recurse = true;
		break;
	case 0xAF:
		asn1.setName(<span class="literal">"and"</span>);
		recurse = true;
		break;
	}
	
	<span class="reserved">if</span> (recurse) {
		<span class="reserved">for</span> (var i = 0; i &lt; asn1.elements; i++) {
			ARRDecorator(asn1.get(i));
		}
	}
	
	<span class="reserved">if</span> (crt) {
		<span class="reserved">for</span> (var i = 0; i &lt; asn1.elements; i++) {
			CRTDecorator(asn1.get(i));
		}
	}
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="BaseTestRunner.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>BaseTestRunner.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'BaseTestRunner.js'<BR/><BR/>
	
</p>

<hr>



<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">//</span>
<span class="comment">//  ---------</span>
<span class="comment">// |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)</span>
<span class="comment">// |#       #|  </span>
<span class="comment">// |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting</span>
<span class="comment">// |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)</span>
<span class="comment">//  --------- </span>
<span class="comment">//</span>
<span class="comment">//  This file is part of OpenSCDP.</span>
<span class="comment">//</span>
<span class="comment">//  OpenSCDP is free software; you can redistribute it and/or modify</span>
<span class="comment">//  it under the terms of the GNU General Public License as published by</span>
<span class="comment">//  the Free Software Foundation; either version 2 of the License, or</span>
<span class="comment">//  (at your option) any later version.</span>
<span class="comment">//</span>
<span class="comment">//  OpenSCDP is distributed in the hope that it will be useful,</span>
<span class="comment">//  but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="comment">//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="comment">//  GNU General Public License for more details.</span>
<span class="comment">//</span>
<span class="comment">//  You should have received a copy of the GNU General Public License</span>
<span class="comment">//  along with OpenSCDP; if not, write to the Free Software</span>
<span class="comment">//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA</span>
<span class="comment">//</span>
<span class="comment">//  Simple test runner framework</span>





<span class="comment">// ---------------------------</span>
<span class="comment">// Create a test runner object</span>
<span class="comment">//</span>
<span class="reserved">function</span> TestRunner(name) {

	<span class="reserved">this</span>.name = name;
	<span class="reserved">this</span>.testGroupRunners = new Array();
	<span class="reserved">this</span>.testProcedures = new Array();
	<span class="reserved">this</span>.testMapper = new Array();
	<span class="reserved">this</span>.testGroupPrototype = new TestGroup();
	<span class="reserved">this</span>.testProcedurePrototype = new TestProcedure();
	<span class="reserved">this</span>.testReport = new TestReport();
}



<span class="comment">//</span>
<span class="comment">// Add a test group to the test runner</span>
<span class="comment">// This will iterate through all test cases and locate used procedures and steps</span>
<span class="comment">//</span>
TestRunner.<span class="reserved">prototype</span>.addTestGroup = <span class="reserved">function</span>(testGroup) {
	var tgrs = <span class="reserved">this</span>.testGroupRunners;
	
	tgr = new TestGroupRunner(<span class="reserved">this</span>, testGroup);

	tgrs.push(tgr);
}



<span class="comment">//</span>
<span class="comment">// Create test group from XML file and add to test runner</span>
<span class="comment">// </span>
TestRunner.<span class="reserved">prototype</span>.addTestGroupFromXML = <span class="reserved">function</span> (file, parameter) {
	<span class="comment">// Parse XML file.</span>
	var parser = new GPXML();
	parser.defineArrayElement(<span class="literal">"/testgroup"</span>, <span class="literal">"testcase,function"</span>, <span class="literal">"id,Name"</span>);
	parser.defineArrayElement(<span class="literal">"/testgroup/testcase/procedures"</span>, <span class="literal">"procedure"</span>);
	var xml = parser.parse(file);
	
	<span class="comment">// Determine CTOR function</span>
	var ctor = xml.constructor.Script;
	<span class="reserved">if</span> (!ctor) {
		<span class="comment">// Use a default constructor unless defined in XML profile</span>
		ctor = <span class="reserved">function</span>(name, parameter) { TestGroup.call(<span class="reserved">this</span>, name, parameter); };
	}
	
	<span class="comment">// Make CTOR available in scope object</span>
	<span class="comment">// this[xml.id] = ctor;</span>
	
	<span class="comment">// Set correct prototype object</span>
	ctor.<span class="reserved">prototype</span> = new TestGroup();
	ctor.<span class="reserved">prototype</span>.constructor = ctor;
	ctor.<span class="reserved">prototype</span>.usedProcedures = new Array();
	
	<span class="comment">// Add test cases to prototype object</span>
	var testcases = xml.testcase;
	<span class="reserved">for</span> (var i in testcases) {
		<span class="reserved">if</span> (i != <span class="literal">"arrayIndex"</span>) {
			var s = testcases[i].Script;
			s.XML = testcases[i];
			ctor.<span class="reserved">prototype</span>[<span class="literal">"case"</span> + i] = s;
			<span class="reserved">if</span> (testcases[i].procedures) {
				var procedures = testcases[i].procedures.procedure;
				ctor.<span class="reserved">prototype</span>.usedProcedures[i] = new Array();
				
				<span class="reserved">for</span> (var p = 0; p &lt; procedures.length; p++) {
					ctor.<span class="reserved">prototype</span>.usedProcedures[i].push(procedures[p].id);
				}
			}
		}
	}
	
	<span class="comment">// Add setup function to prototype object</span>
	<span class="reserved">if</span> (xml.setup) {
		ctor.<span class="reserved">prototype</span>[<span class="literal">"setUp"</span>] = xml.setup.Script;
	}
	
	<span class="comment">// Add teardown function to prototype object</span>
	<span class="reserved">if</span> (xml.teardown) {
		ctor.<span class="reserved">prototype</span>[<span class="literal">"tearDown"</span>] = xml.teardown.Script;
	}
	
	<span class="comment">// Add functions to prototype object</span>
	var functions = xml[<span class="literal">"function"</span>];
	<span class="reserved">for</span> (var i in functions) {
		<span class="reserved">if</span> (i != <span class="literal">"arrayIndex"</span>) {
			var s = functions[i].Script;
			ctor.<span class="reserved">prototype</span>[i] = s;
		}
	}
	
	ctor.XML = xml;
	
	var tc = new ctor(xml.id, parameter);
	
	<span class="reserved">this</span>.addTestGroup(tc);
}



<span class="comment">//</span>
<span class="comment">// Add a test procedure constructor to the list</span>
<span class="comment">// Use the getName() method to obtain the test procedure name</span>
<span class="comment">//</span>
TestRunner.<span class="reserved">prototype</span>.addTestProcedure = <span class="reserved">function</span>(proc) {
	var name = proc.getName();
	<span class="reserved">if</span> (name) {
		<span class="reserved">this</span>.testProcedures[name] = proc;
	}
}



<span class="comment">//</span>
<span class="comment">// Create test procedure from XML file and add to test runner</span>
<span class="comment">// </span>
TestRunner.<span class="reserved">prototype</span>.addTestProcedureFromXML = <span class="reserved">function</span> (file, parameter) {
	<span class="comment">// Parse XML file.</span>
	var parser = new GPXML();
	parser.defineArrayElement(<span class="literal">"/testprocedure"</span>, <span class="literal">"teststep,function"</span>, <span class="literal">"id,Name"</span>);
	var xml = parser.parse(file);

	<span class="comment">// Determine CTOR function</span>
	var ctor = xml.constructor.Script;
	<span class="reserved">if</span> (!ctor) {
		<span class="comment">// Use a default constructor unless defined in XML profile</span>
		ctor = <span class="reserved">function</span>(testgroup, name, parameter) { TestProcedure.call(<span class="reserved">this</span>, testgroup, name, parameter); };
	}

	<span class="comment">// Make CTOR available in scope object</span>
	<span class="comment">// this[xml.id] = ctor;</span>
	
	<span class="comment">// Set correct prototype object</span>
	ctor.<span class="reserved">prototype</span> = new TestProcedure();
	ctor.<span class="reserved">prototype</span>.constructor = ctor;
	var teststeps = xml.teststep;
	<span class="reserved">for</span> (var i in teststeps) {
		<span class="reserved">if</span> (i != <span class="literal">"arrayIndex"</span>) {
			var s = teststeps[i].Script;
			ctor.<span class="reserved">prototype</span>[<span class="literal">"step"</span> + i] = s;
		}
	}
	<span class="reserved">if</span> (xml.setup) {
		ctor.<span class="reserved">prototype</span>[<span class="literal">"setUp"</span>] = xml.setup.Script;
	}
	<span class="reserved">if</span> (xml.teardown) {
		ctor.<span class="reserved">prototype</span>[<span class="literal">"tearDown"</span>] = xml.teardown.Script;
	}
	
	<span class="comment">// Add functions to prototype object</span>
	var functions = xml[<span class="literal">"function"</span>];
	<span class="reserved">for</span> (var i in functions) {
		<span class="reserved">if</span> (i != <span class="literal">"arrayIndex"</span>) {
			var s = functions[i].Script;
			ctor.<span class="reserved">prototype</span>[i] = s;
		}
	}

	ctor.XML = xml;
	ctor.getName = <span class="reserved">function</span>() { <span class="reserved">return</span> xml.id; };	

	<span class="reserved">this</span>.testProcedures[xml.id] = ctor;
}



<span class="comment">//</span>
<span class="comment">// Return constructor of test procedure</span>
<span class="comment">// </span>
TestRunner.<span class="reserved">prototype</span>.getTestProcedure = <span class="reserved">function</span>(name) {
	<span class="reserved">return</span> <span class="reserved">this</span>.testProcedures[name];
}



<span class="comment">//</span>
<span class="comment">// Return number of failed tests</span>
<span class="comment">// </span>
TestRunner.<span class="reserved">prototype</span>.getFailedCounter = <span class="reserved">function</span>() {
	<span class="reserved">return</span> <span class="reserved">this</span>.failedCounter;
}



<span class="comment">//</span>
<span class="comment">// Return log of last test run</span>
<span class="comment">// </span>
TestRunner.<span class="reserved">prototype</span>.getLog = <span class="reserved">function</span>() {
	<span class="reserved">return</span> <span class="reserved">this</span>.log;
}



<span class="comment">//</span>
<span class="comment">// Add test to test mapper, which maps test unique id to listening object</span>
<span class="comment">//</span>
TestRunner.<span class="reserved">prototype</span>.addTest = <span class="reserved">function</span>(name, listener) {
	<span class="reserved">this</span>.testMapper[name] = listener;
}



<span class="comment">//</span>
<span class="comment">// Run all test groups</span>
<span class="comment">//</span>
TestRunner.<span class="reserved">prototype</span>.run = <span class="reserved">function</span>() {
	<span class="reserved">this</span>.failedCounter = 0;
	<span class="reserved">this</span>.log = <span class="literal">""</span>;
	<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.testGroupRunners.length; i++) {
		var testGroupRunner = <span class="reserved">this</span>.testGroupRunners[i];
		testGroupRunner.run();
	}
}



<span class="comment">//</span>
<span class="comment">// Enable or disable test</span>
<span class="comment">//</span>
TestRunner.<span class="reserved">prototype</span>.enable = <span class="reserved">function</span>(name, state) {
	var listener = <span class="reserved">this</span>.testMapper[name];
	<span class="reserved">if</span> (listener &amp;&amp; listener.enable) {
		<span class="reserved">return</span> listener.enable(state);
	} <span class="reserved">else</span> {
		throw new GPError(<span class="literal">"TestRunner"</span>, GPError.OBJECT_NOT_FOUND, 0, name);
	}
}



<span class="comment">//</span>
<span class="comment">// isEnabled query from TestGroup runner</span>
<span class="comment">//</span>
TestRunner.<span class="reserved">prototype</span>.isEnabled = <span class="reserved">function</span>(name) {
	var listener = <span class="reserved">this</span>.testMapper[name];
	<span class="reserved">if</span> (listener &amp;&amp; listener.isEnabled) {
		<span class="reserved">return</span> listener.isEnabled();
	}
	<span class="reserved">return</span> true;
}



<span class="comment">//</span>
<span class="comment">// hasPassed Listener</span>
<span class="comment">//</span>
TestRunner.<span class="reserved">prototype</span>.hasPassed = <span class="reserved">function</span>(name, log) {
<span class="comment">//	print("hasPassed(" + name + ")");</span>
	<span class="reserved">if</span> (log) {
		<span class="reserved">this</span>.log += log;
	}
	var listener = <span class="reserved">this</span>.testMapper[name];
	<span class="reserved">if</span> (listener &amp;&amp; listener.hasPassed) {
		listener.hasPassed(log);

		<span class="reserved">if</span> (listener.getXML) {
			var result = new TestResult(name, true, log, listener.getXML());
			<span class="reserved">this</span>.testReport.addResult(result);
		}
	} <span class="reserved">else</span> {
		print(<span class="literal">"No receiver for passed notification : "</span> + name);
<span class="comment">//		for (var i in this.testMapper) {</span>
<span class="comment">//			print("- " + i);</span>
<span class="comment">//		}</span>
	}
}



<span class="comment">//</span>
<span class="comment">// hasFailed Listener</span>
<span class="comment">//</span>
TestRunner.<span class="reserved">prototype</span>.hasFailed = <span class="reserved">function</span>(name, log) {
<span class="comment">//	print("hasFailed(" + name + ")");</span>
	<span class="reserved">if</span> (log) {
		<span class="reserved">this</span>.log += log;
	}
	var listener = <span class="reserved">this</span>.testMapper[name];
	<span class="reserved">if</span> (listener &amp;&amp; listener.hasFailed) {
		listener.hasFailed(log);

		<span class="reserved">if</span> (listener.getXML) {
			var result = new TestResult(name, false, log, listener.getXML());
			<span class="reserved">this</span>.testReport.addResult(result);
		}
		<span class="reserved">this</span>.failedCounter++;
	}
}



<span class="comment">/**
 * Write test report
 */</span>
TestRunner.<span class="reserved">prototype</span>.report = <span class="reserved">function</span>(fn) {
	<span class="reserved">this</span>.testReport.writeReport(fn);
	print(<span class="literal">"Report written to "</span> + fn);
}



<span class="comment">// ----------------------------------------</span>
<span class="comment">// Constructor for a TestGroupRunner object</span>
<span class="comment">//</span>
<span class="reserved">function</span> TestGroupRunner(testRunner, testGroup) {
	<span class="reserved">this</span>.testRunner = testRunner;
	<span class="reserved">this</span>.testGroup = testGroup;
	
	var testcases = testGroup.getTestCaseNames();
	
	<span class="reserved">for</span> (var i = 0; i &lt; testcases.length; i++) {
		var tcr = new TestCaseRunner(<span class="reserved">this</span>, testcases[i]);
	}
}



<span class="comment">//</span>
<span class="comment">// run this test group</span>
<span class="comment">//</span>
TestGroupRunner.<span class="reserved">prototype</span>.run = <span class="reserved">function</span>() {
	var test = <span class="reserved">this</span>.testGroup;
	
	test.run(<span class="reserved">this</span>.testRunner);
}




<span class="comment">// ---------------------------------------</span>
<span class="comment">// Constructor for a TestCaseRunner object</span>
<span class="comment">//</span>
<span class="reserved">function</span> TestCaseRunner(testGroupRunner, testCase) {
	<span class="reserved">this</span>.testGroupRunner = testGroupRunner;
	<span class="reserved">this</span>.testCase = testCase;
	<span class="reserved">this</span>.selected = true;
	
	var testRunner = testGroupRunner.testRunner;
	testRunner.addTest(testGroupRunner.testGroup.getName() + <span class="literal">"/"</span> + testCase, <span class="reserved">this</span>);
			
	<span class="reserved">this</span>.xml = testGroupRunner.testGroup.getTestCase(testCase).XML;

	var testGroup = testGroupRunner.testGroup;
		
	var testprocedures = testGroup.getUsedTestProceduresForTestCase(testCase);
	
	<span class="reserved">if</span> (testprocedures) {
		<span class="reserved">for</span> (var i = 0; i &lt; testprocedures.length; i++) {
			var tpr = new TestProcedureRunner(<span class="reserved">this</span>, testprocedures[i]);
		}
	}
}



<span class="comment">//</span>
<span class="comment">// Run this test case</span>
<span class="comment">//</span>
TestCaseRunner.<span class="reserved">prototype</span>.run = <span class="reserved">function</span>() {
	var test = <span class="reserved">this</span>.testGroupRunner.testGroup;
	
	test.runTestCase(<span class="reserved">this</span>.testCase, <span class="reserved">this</span>.testGroupRunner.testRunner);
}



<span class="comment">//</span>
<span class="comment">// Tell test runner if case is enabled</span>
<span class="comment">//</span>
TestCaseRunner.<span class="reserved">prototype</span>.isEnabled = <span class="reserved">function</span>() {
	<span class="reserved">return</span> <span class="reserved">this</span>.selected;
}



<span class="comment">//</span>
<span class="comment">// Add a log entry to the test case node</span>
<span class="comment">//</span>
TestCaseRunner.<span class="reserved">prototype</span>.addLog = <span class="reserved">function</span>(log) {
}



<span class="comment">//</span>
<span class="comment">// Get log for the test case node</span>
<span class="comment">//</span>
TestCaseRunner.<span class="reserved">prototype</span>.getLog = <span class="reserved">function</span>() {
	<span class="reserved">return</span> <span class="reserved">this</span>.log;
}



<span class="comment">/**
 * Return describing XML element
 *
 * <span class="attrib">@type</span> Object
 * <span class="attrib">@return</span> the XML element for this test case
 */</span>
TestCaseRunner.<span class="reserved">prototype</span>.getXML = <span class="reserved">function</span>() {
	<span class="reserved">return</span> <span class="reserved">this</span>.xml;
}



<span class="comment">//</span>
<span class="comment">// Listener for passed notifications</span>
<span class="comment">// </span>
TestCaseRunner.<span class="reserved">prototype</span>.hasPassed = <span class="reserved">function</span>(log) {
	<span class="reserved">this</span>.failed = false;
	<span class="reserved">this</span>.addLog(log);
}



<span class="comment">//</span>
<span class="comment">// Listener for failed notifications</span>
<span class="comment">// </span>
TestCaseRunner.<span class="reserved">prototype</span>.hasFailed = <span class="reserved">function</span>(log) {
	<span class="reserved">this</span>.failed = true;
	<span class="reserved">this</span>.addLog(log);
}



<span class="comment">//</span>
<span class="comment">// Clear result of test</span>
<span class="comment">//</span>
TestCaseRunner.<span class="reserved">prototype</span>.clearResult = <span class="reserved">function</span>() {
	<span class="reserved">this</span>.failed = false;
}




<span class="comment">//</span>
<span class="comment">// Enable or disable test</span>
<span class="comment">//</span>
TestCaseRunner.<span class="reserved">prototype</span>.enable = <span class="reserved">function</span>(state) {
	<span class="reserved">this</span>.selected = state;
}




<span class="comment">// --------------------------------------------</span>
<span class="comment">// Constructor for a TestProcedureRunner object</span>
<span class="comment">//</span>
<span class="reserved">function</span> TestProcedureRunner(testCaseRunner, testProcedure) {
	<span class="reserved">this</span>.testCaseRunner = testCaseRunner;
	<span class="reserved">this</span>.testProcedure = testProcedure;
	
	var tp = <span class="reserved">this</span>.testCaseRunner.testGroupRunner.testRunner.testProcedures[testProcedure];

	<span class="reserved">if</span> (tp) {
		var list = new Array();
		<span class="reserved">for</span> (var i in tp.<span class="reserved">prototype</span>) {
			<span class="reserved">if</span> (i.substr(0, 4) == <span class="literal">"step"</span>) {
				var step = i.substr(4);
				list.push(step);
			}
		}

		list.sort();
		
		<span class="reserved">for</span> (var i = 0; i &lt; list.length; i++) {
			var tpsr = new TestStepRunner(<span class="reserved">this</span>, list[i]);
		}
	} <span class="reserved">else</span> {
		print(<span class="literal">"No test procedure implementation found for "</span> + testProcedure);
	}
}




<span class="comment">// ---------------------------------------</span>
<span class="comment">// Constructor for a TestStepRunner object</span>
<span class="comment">//</span>
<span class="reserved">function</span> TestStepRunner(testProcedureRunner, testStep) {
	<span class="reserved">this</span>.testProcedureRunner = testProcedureRunner;
	<span class="reserved">this</span>.testStep = testStep;
	
	var testCaseRunner = testProcedureRunner.testCaseRunner;	
	var testGroupRunner = testCaseRunner.testGroupRunner;
	var testRunner = testGroupRunner.testRunner;
	var testName = testGroupRunner.testGroup.getName() + <span class="literal">"/"</span> + 
	               testCaseRunner.testCase + <span class="literal">"/"</span> + 
	               testProcedureRunner.testProcedure + <span class="literal">"/"</span> +
	               testStep;
	               
	testRunner.addTest(testName, <span class="reserved">this</span>);
}



<span class="comment">//</span>
<span class="comment">// Receive passed notifications</span>
<span class="comment">//</span>
TestStepRunner.<span class="reserved">prototype</span>.hasPassed = <span class="reserved">function</span>() {
}



<span class="comment">//</span>
<span class="comment">// Clear test result display</span>
<span class="comment">//</span>
TestStepRunner.<span class="reserved">prototype</span>.clearResult = <span class="reserved">function</span>() {
}


<span class="reserved">function</span> TestReport() {
	<span class="reserved">this</span>.testResults = [];
}



TestReport.<span class="reserved">prototype</span>.addResult = <span class="reserved">function</span>(result) {
	<span class="reserved">this</span>.testResults.push(result);
}



TestReport.<span class="reserved">prototype</span>.writeReport = <span class="reserved">function</span>(filename) {
	var xml = &lt;testreport/&gt;
	
	<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.testResults.length; i++) {
		var r = <span class="reserved">this</span>.testResults[i];
		var x = r.toXML();
		xml.testcaseresult += x;
	}

	var os = new java.io.FileOutputStream(filename);
	var fw = new java.io.OutputStreamWriter(os, <span class="literal">"UTF-8"</span>);

	fw.write(<span class="literal">"&lt;?xml version=\"</span>1.0\<span class="literal">" encoding=\"</span>UTF-8\<span class="literal">"?&gt;\n"</span>);
	fw.write(<span class="literal">"&lt;?xml-stylesheet type=\"</span>text/xsl\<span class="literal">" href=\"</span>docreport.xsl\<span class="literal">" ?&gt;\n"</span>);

	fw.write(xml.toXMLString());
	fw.close();
}



<span class="reserved">function</span> TestResult(id, verdict, log, tcxml) {
	<span class="reserved">this</span>.id = id;
	<span class="reserved">this</span>.verdict = verdict;
	<span class="reserved">this</span>.log = log;
	<span class="reserved">this</span>.tcxml = tcxml;
}



TestResult.<span class="reserved">prototype</span>.toXML = <span class="reserved">function</span>() {
	var source = <span class="reserved">this</span>.id.split(<span class="literal">"/"</span>)[0];
	var sourceid = <span class="reserved">this</span>.id.split(<span class="literal">"/"</span>)[1];

	var xml = &lt;testcaseresult id={<span class="reserved">this</span>.id} source={source} sourceid={sourceid}/&gt;;

	xml.name = &lt;name&gt;{<span class="reserved">this</span>.tcxml.name.elementValue}&lt;/name&gt;;

	xml.verdict = &lt;verdict&gt;{ <span class="reserved">this</span>.verdict ? <span class="literal">"Passed"</span> : <span class="literal">"Failed"</span> }&lt;/verdict&gt;;
	xml.log = &lt;log&gt;{ <span class="literal">"\n"</span> + <span class="reserved">this</span>.log + <span class="literal">"\n"</span> }&lt;/log&gt;;
	<span class="reserved">return</span> xml;
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="CRTDecorator.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>CRTDecorator.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'CRTDecorator.js'<BR/><BR/>
	
</p>

<hr>



<!-- ========== METHOD SUMMARY =========== -->

	<a name="method_summary"><!-- --></a>
	<table border="1" cellpadding="3" cellspacing="0" width="100%">
		<tr bgcolor="#CCCCFF" class="TableHeadingColor">
			<td colspan=2>
				<font size="+2">
					<b>Method Summary</b>
				</font>
			</td>
		</tr>
	
		
		   <tr bgcolor="white" class="TableRowColor">
		      <td align="right" valign="top" width="1%">
			 <font size="-1">
			    <code>static&nbsp;void</code>
			 </font>
		      </td>
		      <td>
			 <code>
			    <b>
			       <a href="GLOBALS.html#!s!CRTDecorator">CRTDecorator</a></b>(asn1)
			 </code>
			 <br>
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			 
		      </td>
		   </tr>
		
	
	</table>
    <p>

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/*
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Function to name tags contained in Control Reference Templates (CRT)
 */</span>



<span class="comment">//</span>
<span class="comment">// Identify tags in the Control Reference Template</span>
<span class="comment">//</span>
<span class="reserved">function</span> CRTDecorator(asn1) {
	switch(asn1.tag) {
	case 0x80:
		asn1.setName(<span class="literal">"cryptographicMechanism"</span>);
		break;
	case 0x81:
		asn1.setName(<span class="literal">"fileIdentifierOrPath"</span>);
		break;
	case 0x82:
		asn1.setName(<span class="literal">"dFName"</span>);
		break;
	case 0x83:
		asn1.setName(<span class="literal">"secretOrPublicKeyReference"</span>);
		break;
	case 0x84:
		asn1.setName(<span class="literal">"sessionOrPrivateKeyReference"</span>);
		break;
	case 0x85:
		asn1.setName(<span class="literal">"nullBlock"</span>);
		break;
	case 0x86:
		asn1.setName(<span class="literal">"chainingBlock"</span>);
		break;
	case 0x87:
		asn1.setName(<span class="literal">"initialBlock"</span>);
		break;
	case 0x88:
		asn1.setName(<span class="literal">"previousChallenge"</span>);
		break;
	case 0x89:
		asn1.setName(<span class="literal">"proprietaryDataElementIndex"</span>);
		break;
	case 0x8A:
		asn1.setName(<span class="literal">"proprietaryDataElementIndex"</span>);
		break;
	case 0x8B:
		asn1.setName(<span class="literal">"proprietaryDataElementIndex"</span>);
		break;
	case 0x8C:
		asn1.setName(<span class="literal">"proprietaryDataElementIndex"</span>);
		break;
	case 0x8D:
		asn1.setName(<span class="literal">"proprietaryDataElementIndex"</span>);
		break;
	case 0x90:
		asn1.setName(<span class="literal">"cardHashCode"</span>);
		break;
	case 0x91:
		asn1.setName(<span class="literal">"cardRandomNumber"</span>);
		break;
	case 0x92:
		asn1.setName(<span class="literal">"cardTimeStamp"</span>);
		break;
	case 0x93:
		asn1.setName(<span class="literal">"dsiCounter"</span>);
		break;
	case 0x94:
		asn1.setName(<span class="literal">"challengeOrDerivationParameter "</span>);
		break;
	case 0x95:
		asn1.setName(<span class="literal">"usageQualifier"</span>);
		break;
	case 0x8E:
		asn1.setName(<span class="literal">"cryptographicContentReference"</span>);
		break;
	}
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="CardOutlineFactory.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>CardOutlineFactory.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'CardOutlineFactory.js'<BR/><BR/>
	
</p>

<hr>



<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/*
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Core classes to construct card outlines
 */</span>



load(<span class="literal">"FCPDecorator.js"</span>);
load(<span class="literal">"CRTDecorator.js"</span>);
load(<span class="literal">"ARRDecorator.js"</span>);



<span class="comment">//</span>
<span class="comment">// CTOR - OutlineCard default</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineCard(outlineFactory, card, applicationFactory, aidlist) {

	<span class="reserved">this</span>.factory = outlineFactory;
        <span class="reserved">this</span>.card = card;
	<span class="reserved">this</span>.af = applicationFactory;
	<span class="reserved">this</span>.aidlist = aidlist;
		
        <span class="reserved">this</span>.atr = card.reset(Card.RESET_COLD);

        <span class="comment">// Create OutlineNode object and register in card object</span>
        
        var name = card.profile.CardManufacturerProduct.Name;

	<span class="reserved">if</span> (!name) {
		name = <span class="literal">"Card"</span>;
	}
	
        var view = new OutlineNode(name);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
}



<span class="comment">//</span>
<span class="comment">// Expand clicked on node</span>
<span class="comment">//</span>
<span class="comment">// Read application list from EF_DIR or from card profile</span>
<span class="comment">//</span>
OutlineCard.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
        <span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
                <span class="reserved">return</span>;
                
        var view = <span class="reserved">this</span>.view;

	<span class="comment">//</span>
	<span class="comment">// Display ATR</span>
	<span class="comment">//</span>
	var atrnode = <span class="reserved">this</span>.factory.newOutlineATR(<span class="reserved">this</span>.atr);
	
	view.insert(atrnode.view);

	<span class="comment">//</span>
	<span class="comment">// Get list of application instances from card profile</span>
	<span class="comment">//</span>
	var applicationInstances = <span class="reserved">this</span>.card.profile.ApplicationInstances.ApplicationInstance;

	<span class="comment">//</span>
	<span class="comment">// Make sure that we got a list</span>
	<span class="comment">//	</span>
	assert(applicationInstances instanceof Array);

        <span class="comment">//</span>
        <span class="comment">// Try reading the EF_DIR</span>
        <span class="comment">//</span>
	var hasEFDIR = true;
	
	try	{
		var efdir = new CardFile(<span class="reserved">this</span>.card, <span class="literal">":2F00"</span>);
	}
	catch(e) {
		print(<span class="literal">"Exception selecting EF_DIR. Assuming no EF_DIR...\n"</span> + e);
		hasEFDIR = false;
	}

	<span class="comment">//</span>
	<span class="comment">// Create a list of application identifier</span>
	<span class="comment">//</span>
	var aidlist;
	
	<span class="reserved">if</span> (<span class="reserved">this</span>.aidlist) {
		aidlist = <span class="reserved">this</span>.aidlist;
	} <span class="reserved">else</span> {
		aidlist = new Array();
	}
	
	<span class="reserved">if</span> (hasEFDIR) {
		<span class="comment">//</span>
		<span class="comment">// Add MF to the list of applications</span>
		<span class="comment">//</span>
		aidlist.push(new ByteString(<span class="literal">"3F00"</span>, HEX));

		<span class="comment">//		</span>
		<span class="comment">// Read all AIDs from EF_DIR</span>
		<span class="comment">//</span>
		
	        <span class="reserved">for</span> (var rec = 1; rec &lt; 255; rec++) {
        	        var record;
	                try     {
	                        record = efdir.readRecord(rec);
	                }
	                catch(e) {
	                	<span class="reserved">if</span> ((e instanceof GPError) &amp;&amp; (e.reason == 0x6A83))
	                		break;
	                        print(e);
	                        break;
	                }

	                var tlv = new ASN1(record);
                
	                <span class="reserved">for</span> (var i = 0; i &lt; tlv.elements; i++) {
	                        var t = tlv.get(i);
	                        switch(t.tag) {
	                        case 0x4F:
	                                aid = t.value;
	                                <span class="reserved">if</span> (!aidlist[aid])
		                                aidlist.push(aid);
	                                break;
	                        }
	                }
		}
	} <span class="reserved">else</span> {
		<span class="comment">//</span>
		<span class="comment">// Create application list from card profile</span>
		<span class="comment">//</span>
        	<span class="reserved">for</span> (aid in  applicationInstances) {
        		<span class="reserved">if</span> (aid == <span class="literal">"arrayIndex"</span>)
        			continue;
        		aidlist.push(new ByteString(aid, HEX));
        	}
	}

	<span class="comment">//</span>
	<span class="comment">// Sort the list of application identifier</span>
	<span class="comment">//	</span>
	aidlist.sort();
	
	<span class="reserved">for</span> (var i = 0; i &lt; aidlist.length; i++) {
		var aid = aidlist[i];
		var applinstance = applicationInstances[aid.toString(HEX)];
		<span class="reserved">if</span> (applinstance) {
<span class="comment">/*
			print("from Card Profile: " + applinstance);
			print("  Label     : " + applinstance.Label);
			print("  AID       : " + applinstance.AID);
			print("  ProfileID : " + applinstance.ProfileID);
*/</span>
			var uniqueId = new ByteString(applinstance.ProfileID, HEX);
					
			var instance = <span class="reserved">this</span>.af.getApplicationInstance(new Object(), aid, <span class="reserved">this</span>.card, uniqueId);
				
                        var struct = null;
                        
                        <span class="reserved">if</span> (instance.profile.DataStructure) {
                        	struct = instance.profile.DataStructure.FileStructure;
                        }
                        
                        var path;
                        <span class="reserved">if</span> (aid.length &lt;= 2) {
	                        path = <span class="literal">":"</span> + aid.toString(HEX);
                        } <span class="reserved">else</span> {
                                path = <span class="literal">"#"</span> + aid.toString(HEX);
                        }
		        
		        var applentry;
		        <span class="reserved">if</span> (struct) {                
	                        applentry = <span class="reserved">this</span>.factory.newOutlineDF(<span class="reserved">this</span>.card, path, applinstance.Label, struct);
	                } <span class="reserved">else</span> {
	                        applentry = <span class="reserved">this</span>.factory.newOutlineApplet(instance);
	                }
                        view.insert(applentry.view);
      		} <span class="reserved">else</span> {
      			print(<span class="literal">"No profile found for aid "</span> + aid);
      		}
	}

        <span class="reserved">this</span>.expanded = true;
}





<span class="comment">//</span>
<span class="comment">// CTOR - ATR Outline</span>
<span class="comment">// </span>
<span class="reserved">function</span> OutlineATR(factory, atr) {
	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.atr = atr;

        <span class="comment">// Create OutlineNode object and register in ATR object</span>
        var view = new OutlineNode(<span class="literal">"ATR="</span> + <span class="reserved">this</span>.atr.toByteString().toString(HEX));
        view.setIcon(<span class="literal">"atr"</span>);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
}


OutlineATR.<span class="reserved">prototype</span>.selectedListener = <span class="reserved">function</span>() {
	print(<span class="reserved">this</span>.atr);
}





<span class="comment">//</span>
<span class="comment">// CTOR - FCP Outline</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineFCP(factory, fcp) {
	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.fcp = fcp;

        <span class="comment">// Create OutlineNode object and register in FCP object</span>
        var view = new OutlineNode(<span class="literal">"FCP="</span> + <span class="reserved">this</span>.fcp.toString(HEX));
        view.setIcon(<span class="literal">"header"</span>);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;

	<span class="reserved">if</span> ((fcp.byteAt(0) == 0x62) ||
	    (fcp.byteAt(0) == 0x64) ||
	    (fcp.byteAt(0) == 0x6F)) {
	        try	{
	        	var asn = new ASN1(<span class="reserved">this</span>.fcp);
	        	FCPDecorator(asn);
			view.insert(asn);
	        }
	        catch(e) {
	        	print(e);
	        	print(<span class="literal">"Unable to decode FCP structure"</span>);
	        }
	} <span class="reserved">else</span> {
	}
}





<span class="comment">//</span>
<span class="comment">// CTOR - Outline node for DFs</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineDF(factory, card, id, name, profile) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;
		
	<span class="reserved">this</span>.factory = factory;
        <span class="reserved">this</span>.card = card;
        <span class="reserved">this</span>.id = id;

        <span class="comment">// Create OutlineNode object and register in OutlineDF object</span>
        var view = new OutlineNode(name, true);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
        
        <span class="reserved">this</span>.profile = profile;
}





<span class="comment">//</span>
<span class="comment">// Event handler for expand notifications</span>
<span class="comment">//</span>
OutlineDF.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {

        <span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
                <span class="reserved">return</span>;

        var view = <span class="reserved">this</span>.view;
        var eflist = <span class="reserved">this</span>.profile.EF;
        
        try	{
        	var df = new CardFile(<span class="reserved">this</span>.card, <span class="reserved">this</span>.id);
		<span class="reserved">this</span>.df = df;
				
		var fcp = df.getFCPBytes();
		<span class="reserved">if</span> (fcp &amp;&amp; (fcp.length &gt; 1)) {
			var fcpmodel = <span class="reserved">this</span>.factory.newOutlineFCP(fcp);
			view.insert(fcpmodel.view);	
		}
				
		<span class="reserved">for</span> (var i = 0; i &lt; eflist.length; i++) {
		        var ef = <span class="reserved">this</span>.factory.newOutlineEF(<span class="reserved">this</span>.df, eflist[i].name, eflist[i]);
		        view.insert(ef.view);
		}
	}
	catch(e) {
		print(e);
	}
        
        <span class="reserved">this</span>.expanded = true;
}





<span class="comment">//</span>
<span class="comment">// CTOR - Outline node for EFs</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineEF(factory, df, name, profile) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
        <span class="reserved">this</span>.df = df;

        <span class="comment">// Create OutlineNode object and register in OutlineEF object</span>
        var view = new OutlineNode(name, true);
        view.setIcon(<span class="literal">"document"</span>);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
        
        <span class="reserved">this</span>.profile = profile;
}



<span class="comment">//</span>
<span class="comment">// Event handler for expand notification</span>
<span class="comment">//</span>
OutlineEF.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
        <span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
                <span class="reserved">return</span>;

        var view = <span class="reserved">this</span>.view;
        var efdesc = <span class="reserved">this</span>.profile;

	try	{
	        var ef = new CardFile(<span class="reserved">this</span>.df, <span class="literal">":"</span> + efdesc.fid);
	}
	catch(e) {
		print(e);
		<span class="reserved">return</span>;
	}
		
	var isTransparent = true;
	var fcp = ef.getFCPBytes();
	var filelength = -1;
	<span class="reserved">if</span> (fcp &amp;&amp; (fcp.length &gt; 1)) {
		var fcpmodel = <span class="reserved">this</span>.factory.newOutlineFCP(fcp);
		view.insert(fcpmodel.view);
		isTransparent = ef.isTransparent();
		filelength = ef.getLength();
	} <span class="reserved">else</span> {
		isTransparent = (efdesc.type == <span class="literal">"T"</span>);
	}
		
        <span class="reserved">if</span> (isTransparent) {
		try	{
			<span class="reserved">if</span> (filelength &gt; 0) {
		                var bs = ef.readBinary(0, filelength);
		        } <span class="reserved">else</span> {
		                var bs = ef.readBinary();
		        }
	        }
	        catch(e) {
	       		print(e);
	       		<span class="reserved">this</span>.expanded = true;
	       		<span class="reserved">return</span>;
		}

		var bindata = <span class="reserved">this</span>.factory.newDataOutline(bs, efdesc.format);
		view.insert(bindata.view);
		
        } <span class="reserved">else</span> {
                <span class="reserved">for</span> (var rec = 1; rec &lt; 255; rec++) {
                        try     {
                                ef.readRecord(rec);
                                var record = <span class="reserved">this</span>.factory.newOutlineRecord(ef, rec, efdesc);
                                view.insert(record.view);
                        }
                        catch(e) {
                              	<span class="reserved">if</span> ((e instanceof GPError) &amp;&amp; (e.reason == 0x6A83))
                			break;
                                print(e);
                                break;
                        }
                }
        }
        
        <span class="reserved">this</span>.expanded = true;
}




<span class="comment">//</span>
<span class="comment">// CTOR - Outline node for data object retrievable with GET_DATA</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineDataObject(factory, df, id, name, format) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
        <span class="reserved">this</span>.df = df;
	<span class="reserved">this</span>.id = id;
	<span class="reserved">this</span>.format = format;
		
        <span class="comment">// Create OutlineNode object and register in OutlineEF object</span>
        print(name + <span class="literal">"("</span> + id.toString(16) + <span class="literal">")"</span>);
        var view = new OutlineNode(name + <span class="literal">"("</span> + id.toString(16) + <span class="literal">")"</span>, true);
        view.setIcon(<span class="literal">"document"</span>);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
}



<span class="comment">//</span>
<span class="comment">// Event handler for expand notification</span>
<span class="comment">//</span>
OutlineDataObject.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
        <span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
                <span class="reserved">return</span>;

        var view = <span class="reserved">this</span>.view;

	var card = <span class="reserved">this</span>.df.card;
	
	var bs = card.sendApdu(0x00, 0xCA, <span class="reserved">this</span>.id &gt;&gt; 8, <span class="reserved">this</span>.id &amp; 0xFF, 0);
	
	<span class="reserved">if</span> (card.SW != 0x9000) {
		var bs = card.sendApdu(0x80, 0xCA, <span class="reserved">this</span>.id &gt;&gt; 8, <span class="reserved">this</span>.id &amp; 0xFF, 0);
	}
	
	<span class="reserved">if</span> (card.SW != 0x9000) {
		print(<span class="literal">"Error getting object: "</span> + card.SWMSG);
	} <span class="reserved">else</span> {
		var bindata = <span class="reserved">this</span>.factory.newDataOutline(bs, <span class="reserved">this</span>.format);
		view.insert(bindata.view);
        }
        
        <span class="reserved">this</span>.expanded = true;
}




<span class="comment">//</span>
<span class="comment">// CTOR - Outline for records in an EF</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineRecord(factory, ef, no, efdesc) {
	<span class="reserved">this</span>.factory = factory;
        <span class="reserved">this</span>.ef = ef;
        <span class="reserved">this</span>.no = no;
        <span class="reserved">this</span>.efdesc = efdesc;
                
        <span class="comment">// Create OutlineNode object and register in OutlineRecord object</span>
        var view = new OutlineNode(<span class="literal">"Record#"</span> + no, true);
        view.setIcon(<span class="literal">"record"</span>);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
}



<span class="comment">//</span>
<span class="comment">// Expand event handler for records</span>
<span class="comment">//</span>
OutlineRecord.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
        <span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
                <span class="reserved">return</span>;

        var view = <span class="reserved">this</span>.view;
        var ef = <span class="reserved">this</span>.ef;

        var bs = ef.readRecord(<span class="reserved">this</span>.no);

	var bindata = <span class="reserved">this</span>.factory.newDataOutline(bs, <span class="reserved">this</span>.efdesc.format);
	view.insert(bindata.view);
        
        <span class="reserved">this</span>.expanded = true;
}





<span class="comment">//</span>
<span class="comment">// CTOR - Binary data outline</span>
<span class="comment">//</span>
<span class="reserved">function</span> DataOutline(factory, data, format) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.data = data;
	<span class="reserved">this</span>.format = format;
	
	var ddata = data;
	<span class="reserved">if</span> (ddata.length &gt; 256) {
		ddata = data.bytes(0, 256);
	}
	
	var view = new OutlineNode(ddata.toString(HEX));
        view.setIcon(<span class="literal">"binary"</span>);
	view.setUserObject(<span class="reserved">this</span>);
	<span class="reserved">this</span>.view = view;
	<span class="reserved">this</span>.decorate(format);
}



DataOutline.<span class="reserved">prototype</span>.decorate = <span class="reserved">function</span>(format) {

	var view = <span class="reserved">this</span>.view;
	var data = <span class="reserved">this</span>.data;
		
	<span class="reserved">if</span> (format &amp;&amp; ((format.substr(0, 4) == <span class="literal">"asn1"</span>) || (format.substr(0, 7) == <span class="literal">"tlvlist"</span>)) &amp;&amp; (data.length &gt;= 2)) {
                var total = data.length;
                
                <span class="reserved">while</span>(total &gt;= 2) {
                	try	{
	                        var asn = new ASN1(data);
	                }
	                catch(e) {
	                	print(<span class="literal">"Error in TLV structure: "</span> + e);
	                	<span class="reserved">return</span>;
	                }
	                
                        <span class="reserved">this</span>.asn = asn;
                        <span class="reserved">this</span>.asn1DecoratorHook(format);
                        view.insert(asn);
                        total -= asn.size;
                        
                        <span class="reserved">if</span> (format.substr(0, 4) == <span class="literal">"asn"</span>) {
                                break;
                        }

                        data = data.bytes(asn.size);
                        <span class="reserved">if</span> ((data.length == 0) || (data.byteAt(0) == 0x00) || (data.byteAt(0) == 0xFF)) {
                                break;
                        }
                }
                        
                <span class="reserved">if</span> (total &gt; 0) {
                        var sparecontent = new OutlineNode(total + <span class="literal">" spare bytes"</span>);
                        view.insert(sparecontent);
                }
        }
}



DataOutline.<span class="reserved">prototype</span>.asn1DecoratorHook = <span class="reserved">function</span>(format) {
	var i = format.indexOf(<span class="literal">"."</span>);
	
	<span class="reserved">if</span> (i &gt; 0) {
		switch(format.substr(i + 1)) {
		case <span class="literal">"arr"</span> :
			ARRDecorator(<span class="reserved">this</span>.asn);
			break;
		}
	}
}



DataOutline.<span class="reserved">prototype</span>.selectedListener = <span class="reserved">function</span>() {
	print(<span class="literal">"--------------------------------------------------------------------------------"</span>);
	print(<span class="reserved">this</span>.data);

	var i = 0;
	
	<span class="reserved">if</span> (<span class="reserved">this</span>.format) {
		i = <span class="reserved">this</span>.format.indexOf(<span class="literal">"."</span>);
	}
	
	<span class="reserved">if</span> (i &gt; 0) {
		switch(<span class="reserved">this</span>.format.substr(i + 1)) {
		case <span class="literal">"x509"</span> :
			try 	{
				var x509 = new X509(<span class="reserved">this</span>.data);
				print(<span class="literal">"Decoded certificate:"</span>);
				print(x509.toString());
			}
			catch(e) {
				print(e);
			}
			break;
		}
	}
	
}





<span class="comment">//</span>
<span class="comment">// CTOR - OutlineFactory</span>
<span class="comment">// Derive from this class to include custom made outline elements</span>
<span class="comment">//</span>
<span class="reserved">function</span> CardOutlineFactory() {
	
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineATR object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineATR = <span class="reserved">function</span>(atr) {
	<span class="reserved">return</span> new OutlineATR(<span class="reserved">this</span>, atr);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineDF object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineDF = <span class="reserved">function</span>(card, id, name, profile) {
	<span class="reserved">return</span> new OutlineDF(<span class="reserved">this</span>, card, id, name, profile);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineApplet object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineApplet = <span class="reserved">function</span>(instance) {
	throw new GPError(<span class="literal">"CardOutlineFactory"</span>, GPError.INVALID_USAGE, 0, <span class="literal">"Must overwrite newOutlineApplet to use explorer functionality"</span>);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineEF object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineEF = <span class="reserved">function</span>(df, name, profile) {
	<span class="reserved">return</span> new OutlineEF(<span class="reserved">this</span>, df, name, profile);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineDataObject object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineDataObject = <span class="reserved">function</span>(df, id, name, format) {
	<span class="reserved">return</span> new OutlineDataObject(<span class="reserved">this</span>, df, id, name, format);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineFCP object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineFCP = <span class="reserved">function</span>(fcp) {
	<span class="reserved">return</span> new OutlineFCP(<span class="reserved">this</span>, fcp);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineRecord object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineRecord = <span class="reserved">function</span>(ef, no, efdesc) {
	<span class="reserved">return</span> new OutlineRecord(<span class="reserved">this</span>, ef, no, efdesc);
}



<span class="comment">//</span>
<span class="comment">// Method to create new DataOutline object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newDataOutline = <span class="reserved">function</span>(data, format) {
	<span class="reserved">return</span> new DataOutline(<span class="reserved">this</span>, data, format);
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="CardOutlineFactory2.0.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>CardOutlineFactory2.0.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'CardOutlineFactory2.0.js'<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="CardOutlineFactory.html">CardOutlineFactory</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="OutlineDataObject.html">OutlineDataObject</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="OutlinePKCS15.html">OutlinePKCS15</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/*
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Core classes to construct card outlines
 *
 * Changes to Version 1.0
 *
 *  - Added support for nested DF structures (requires updated application profiles)
 *  - Added support for PKCS#15 / ISO 7816-15 formatted cards
 *
 */</span>



load(<span class="literal">"tools/FCPDecorator.js"</span>);
load(<span class="literal">"tools/CRTDecorator.js"</span>);
load(<span class="literal">"tools/ARRDecorator.js"</span>);
load(<span class="literal">"tools/p15classes.js"</span>);


<span class="comment">//</span>
<span class="comment">// CTOR - OutlineCard default</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineCard(outlineFactory, card, applicationFactory, aidlist) {

	<span class="reserved">this</span>.factory = outlineFactory;
	<span class="reserved">this</span>.card = card;
	<span class="reserved">this</span>.af = applicationFactory;
	<span class="reserved">this</span>.presetaidlist = aidlist;

	<span class="reserved">this</span>.atr = card.reset(Card.RESET_COLD);

	<span class="reserved">this</span>.pkcs15 = new PKCS15(card);

	<span class="comment">// Create OutlineNode object and register in card object</span>

	var name = card.profile.CardManufacturerProduct.Name;

	<span class="reserved">if</span> (!name) {
		name = <span class="literal">"Card"</span>;
	}

	var view = new OutlineNode(name);
	view.setUserObject(<span class="reserved">this</span>);
	<span class="reserved">this</span>.view = view;
}



<span class="comment">//</span>
<span class="comment">// Expand clicked on node</span>
<span class="comment">//</span>
<span class="comment">// Read application list from EF_DIR or from card profile</span>
<span class="comment">//</span>
OutlineCard.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
		<span class="reserved">return</span>;

	var view = <span class="reserved">this</span>.view;

	<span class="comment">//</span>
	<span class="comment">// Display ATR</span>
	<span class="comment">//</span>
	var atrnode = <span class="reserved">this</span>.factory.newOutlineATR(<span class="reserved">this</span>.atr);

	view.insert(atrnode.view);

	<span class="comment">//</span>
	<span class="comment">// Get list of application instances from card profile</span>
	<span class="comment">//</span>
	var applicationInstances = <span class="reserved">this</span>.card.profile.ApplicationInstances.ApplicationInstance;

	<span class="comment">//</span>
	<span class="comment">// Make sure that we got a list</span>
	<span class="comment">//</span>
	assert(applicationInstances instanceof Array);

	<span class="comment">//</span>
	<span class="comment">// Try reading the EF_DIR</span>
	<span class="comment">//</span>
	var hasEFDIR = true;

	var aidlist = new Array();

	try	{
		<span class="reserved">this</span>.pkcs15.readApplicationDirectory();
		aidlist = <span class="reserved">this</span>.pkcs15.getAidList();
		aidlist[<span class="literal">"3F00"</span>] = null;
	}
	catch(e) {
		print(<span class="literal">"Exception selecting EF_DIR. Assuming no EF_DIR...\n"</span> + e);
		hasEFDIR = false;

		<span class="comment">//</span>
		<span class="comment">// Create application list from card profile</span>
		<span class="comment">//</span>
		<span class="reserved">for</span> (var aid in  applicationInstances) {
			<span class="reserved">if</span> (aid == <span class="literal">"arrayIndex"</span>)
				continue;
			aidlist[aid] = null;
		}
	}

	var sortedaidlist = new Array();
	<span class="reserved">for</span> (var aid in aidlist) {
		sortedaidlist.push(aid);
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.presetaidlist) {
		<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.presetaidlist.length; i++) {
			sortedaidlist.push(<span class="reserved">this</span>.presetaidlist[i]);
		}
	}

	sortedaidlist.sort();

	<span class="reserved">for</span> (var i = 0; i &lt; sortedaidlist.length; i++) {
		var aid = sortedaidlist[i];
		var at = aidlist[aid];
		var applinstance = applicationInstances[aid.toString(HEX)];
		<span class="reserved">if</span> (applinstance) {
<span class="comment">/*
			print("from Card Profile: " + applinstance);
			print("  Label     : " + applinstance.Label);
			print("  AID       : " + applinstance.AID);
			print("  ProfileID : " + applinstance.ProfileID);
*/</span>
			var uniqueId = new ByteString(applinstance.ProfileID, HEX);

			var instance = <span class="reserved">this</span>.af.getApplicationInstance(new Object(), new ByteString(aid, HEX), <span class="reserved">this</span>.card, uniqueId);

			var struct = null;

			<span class="reserved">if</span> (instance.profile.DataStructure) {
				struct = instance.profile.DataStructure;
			}

			var path;
			<span class="reserved">if</span> (aid.length &lt;= 4) {
				path = <span class="literal">":"</span> + aid.toString(HEX);
			} <span class="reserved">else</span> {
				path = <span class="literal">"#"</span> + aid.toString(HEX);
			}

			var applentry;
			<span class="reserved">if</span> (struct) {
				applentry = <span class="reserved">this</span>.factory.newOutlineDF(<span class="reserved">this</span>.card, null, path, applinstance.Label, struct);
			} <span class="reserved">else</span> {
				applentry = <span class="reserved">this</span>.factory.newOutlineApplet(instance);
			}
			view.insert(applentry.view);
	  	} <span class="reserved">else</span> {
	  		print(<span class="literal">"No profile found for aid "</span> + aid);
	  	}
	  	<span class="reserved">if</span> (at) {
			<span class="reserved">if</span> ((!at.ddo) &amp;&amp; ((aid == <span class="literal">"A000000063504B43532D3135"</span>) || (aid.substr(0, 10) == <span class="literal">"E828BD080F"</span>))) {
				var t = new ASN1(new ByteString(<span class="literal">"7300"</span>, HEX));
				at.ddo = new PKCS15_CIODDO(t);
		  	}
		  	<span class="reserved">if</span> (at.ddo) {
				var applentry;
				applentry = <span class="reserved">this</span>.factory.newOutlinePKCS15(<span class="reserved">this</span>.pkcs15, aid, at);
				view.insert(applentry.view);
	  		}
	  	}
	}

	<span class="reserved">this</span>.expanded = true;
}





<span class="comment">//</span>
<span class="comment">// CTOR - ATR Outline</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineATR(factory, atr) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.atr = atr;

	<span class="comment">// Create OutlineNode object and register in ATR object</span>
	var view = new OutlineNode(<span class="literal">"ATR="</span> + <span class="reserved">this</span>.atr.toByteString().toString(HEX));
	view.setIcon(<span class="literal">"atr"</span>);
	view.setUserObject(<span class="reserved">this</span>);
	view.setToolTip(<span class="literal">"Click to decode ATR"</span>);
	<span class="reserved">this</span>.view = view;
}


OutlineATR.<span class="reserved">prototype</span>.selectedListener = <span class="reserved">function</span>() {
	print(<span class="reserved">this</span>.atr);
}





<span class="comment">//</span>
<span class="comment">// CTOR - FCP Outline</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineFCP(factory, fcp) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.fcp = fcp;

	<span class="comment">// Create OutlineNode object and register in FCP object</span>
	var view = new OutlineNode(<span class="literal">"FCP="</span> + <span class="reserved">this</span>.fcp.toString(HEX));
	view.setIcon(<span class="literal">"header"</span>);
	view.setUserObject(<span class="reserved">this</span>);
	<span class="reserved">this</span>.view = view;

	<span class="reserved">if</span> ((fcp.byteAt(0) == 0x62) ||
		(fcp.byteAt(0) == 0x64) ||
		(fcp.byteAt(0) == 0x6F)) {
		try	{
			var asn = new ASN1(<span class="reserved">this</span>.fcp);
			FCPDecorator(asn);
			view.insert(asn);
		}
		catch(e) {
			print(e);
			print(<span class="literal">"Unable to decode FCP structure"</span>);
		}
	} <span class="reserved">else</span> {
	}
}





<span class="comment">//</span>
<span class="comment">// CTOR - Outline node for DFs</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineDF(factory, card, parentdf, id, name, profile) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.card = card;
	<span class="reserved">this</span>.parentdf = parentdf;
	<span class="reserved">this</span>.id = id;

	<span class="comment">// Create OutlineNode object and register in OutlineDF object</span>
	var view = new OutlineNode(name, true);
	view.setUserObject(<span class="reserved">this</span>);
	<span class="reserved">this</span>.view = view;

	<span class="reserved">this</span>.profile = profile;
}





<span class="comment">//</span>
<span class="comment">// Event handler for expand notifications</span>
<span class="comment">//</span>
OutlineDF.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {

	<span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
		<span class="reserved">return</span>;

	var view = <span class="reserved">this</span>.view;

	var eflist = null;
	<span class="reserved">if</span> (<span class="reserved">this</span>.profile &amp;&amp; <span class="reserved">this</span>.profile.FileStructure) {
		eflist = <span class="reserved">this</span>.profile.FileStructure.EF;
	}

	var dflist = null;
	<span class="reserved">if</span> (<span class="reserved">this</span>.profile &amp;&amp; <span class="reserved">this</span>.profile.DirectoryStructure) {
		dflist = <span class="reserved">this</span>.profile.DirectoryStructure.DF;
	}

	var dolist = null;
	<span class="reserved">if</span> (<span class="reserved">this</span>.profile &amp;&amp; <span class="reserved">this</span>.profile.DataObjectStructure) {
		dolist = <span class="reserved">this</span>.profile.DataObjectStructure.DF;
	}

	try	{
		var df;

		<span class="reserved">if</span> (<span class="reserved">this</span>.parentdf) {
			df = new CardFile(<span class="reserved">this</span>.parentdf.df, <span class="reserved">this</span>.id);
			} <span class="reserved">else</span> {
			df = new CardFile(<span class="reserved">this</span>.card, <span class="reserved">this</span>.id);
			}
		<span class="reserved">this</span>.df = df;

		var fcp = df.getFCPBytes();
		<span class="reserved">if</span> (fcp &amp;&amp; (fcp.length &gt; 1)) {
			var fcpmodel = <span class="reserved">this</span>.factory.newOutlineFCP(fcp);
			view.insert(fcpmodel.view);
		}

		<span class="reserved">if</span> (dflist) {
			<span class="reserved">for</span> (var i = 0; i &lt; dflist.length; i++) {
				var dfp = dflist[i];

				var sdf = <span class="reserved">this</span>.factory.newOutlineDF(<span class="reserved">this</span>.card, <span class="reserved">this</span>, <span class="literal">":"</span> + dfp.fid, dfp.name, dfp);
				view.insert(sdf.view);
			}
		}

		<span class="reserved">if</span> (eflist) {
			<span class="reserved">for</span> (var i = 0; i &lt; eflist.length; i++) {
				var ef = <span class="reserved">this</span>.factory.newOutlineEF(<span class="reserved">this</span>.df, eflist[i].name, eflist[i]);
				view.insert(ef.view);
			}
		}

		<span class="reserved">if</span> (dolist) {
			<span class="reserved">for</span> (var i = 0; i &lt; dolist.length; i++) {
				var doo = <span class="reserved">this</span>.factory.newOutlineDataObject(<span class="reserved">this</span>.df, dolist[i].id, dolist[i].name, dolist.format);
				view.insert(doo.view);
			}
		}
	}
	catch(e) {
		print(e);
	}

	<span class="reserved">this</span>.expanded = true;
}



<span class="comment">//</span>
<span class="comment">// CTOR - Outline node for EFs</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineEF(factory, df, name, profile) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.df = df;

	<span class="comment">// Create OutlineNode object and register in OutlineEF object</span>
	var view = new OutlineNode(name, true);
	view.setIcon(<span class="literal">"document"</span>);
	view.setUserObject(<span class="reserved">this</span>);
	<span class="reserved">this</span>.view = view;

	<span class="reserved">this</span>.profile = profile;
}



<span class="comment">//</span>
<span class="comment">// Event handler for expand notification</span>
<span class="comment">//</span>
OutlineEF.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
		<span class="reserved">return</span>;

	var view = <span class="reserved">this</span>.view;
	var efdesc = <span class="reserved">this</span>.profile;

	try	{
		var ef = new CardFile(<span class="reserved">this</span>.df, <span class="literal">":"</span> + efdesc.fid);
	}
	catch(e) {
		print(e);
		<span class="reserved">return</span>;
	}

	var isTransparent = true;
	var fcp = ef.getFCPBytes();
	var filelength = -1;
	<span class="reserved">if</span> (fcp &amp;&amp; (fcp.length &gt; 1)) {
		var fcpmodel = <span class="reserved">this</span>.factory.newOutlineFCP(fcp);
		view.insert(fcpmodel.view);
		isTransparent = ef.isTransparent();
		filelength = ef.getLength();
	} <span class="reserved">else</span> {
		isTransparent = (efdesc.type == <span class="literal">"T"</span>);
	}

	<span class="reserved">if</span> (isTransparent) {
		try	{
			<span class="reserved">if</span> (filelength &gt; 0) {
				var bs = ef.readBinary(0, filelength);
			} <span class="reserved">else</span> {
				var bs = ef.readBinary();
			}
		}
		catch(e) {
			print(e);
			<span class="reserved">this</span>.expanded = true;
			<span class="reserved">return</span>;
		}

		var bindata = <span class="reserved">this</span>.factory.newDataOutline(bs, efdesc.format);
		view.insert(bindata.view);

	} <span class="reserved">else</span> {
		<span class="reserved">for</span> (var rec = 1; rec &lt; 255; rec++) {
			try {
				ef.readRecord(rec);
				var record = <span class="reserved">this</span>.factory.newOutlineRecord(ef, rec, efdesc);
				view.insert(record.view);
			}
			catch(e) {
				<span class="reserved">if</span> ((e instanceof GPError) &amp;&amp; (e.reason == 0x6A83))
					break;
				print(e);
				break;
			}
		}
	}

	<span class="reserved">this</span>.expanded = true;
}




<span class="comment">//</span>
<span class="comment">// CTOR - Outline node for data object retrievable with GET_DATA</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineDataObject(factory, df, id, name, format) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.df = df;
	<span class="reserved">this</span>.id = id;
	<span class="reserved">this</span>.format = format;

	<span class="comment">// Create OutlineNode object and register in OutlineEF object</span>
	print(name + <span class="literal">"("</span> + id.toString(16) + <span class="literal">")"</span>);
	var view = new OutlineNode(name + <span class="literal">"("</span> + id.toString(16) + <span class="literal">")"</span>, true);
	view.setIcon(<span class="literal">"document"</span>);
	view.setUserObject(<span class="reserved">this</span>);
	<span class="reserved">this</span>.view = view;
}



<span class="comment">//</span>
<span class="comment">// Event handler for expand notification</span>
<span class="comment">//</span>
OutlineDataObject.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
		<span class="reserved">return</span>;

	var view = <span class="reserved">this</span>.view;

	var card = <span class="reserved">this</span>.df.card;

	var bs = card.sendApdu(0x00, 0xCA, <span class="reserved">this</span>.id &gt;&gt; 8, <span class="reserved">this</span>.id &amp; 0xFF, 0);

	<span class="reserved">if</span> (card.SW != 0x9000) {
		var bs = card.sendApdu(0x80, 0xCA, <span class="reserved">this</span>.id &gt;&gt; 8, <span class="reserved">this</span>.id &amp; 0xFF, 0);
	}

	<span class="reserved">if</span> (card.SW != 0x9000) {
		print(<span class="literal">"Error getting object: "</span> + card.SWMSG);
	} <span class="reserved">else</span> {
		var bindata = <span class="reserved">this</span>.factory.newDataOutline(bs, <span class="reserved">this</span>.format);
		view.insert(bindata.view);
	}

	<span class="reserved">this</span>.expanded = true;
}




<span class="comment">//</span>
<span class="comment">// CTOR - Outline for records in an EF</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineRecord(factory, ef, no, efdesc) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.ef = ef;
	<span class="reserved">this</span>.no = no;
	<span class="reserved">this</span>.efdesc = efdesc;

	<span class="comment">// Create OutlineNode object and register in OutlineRecord object</span>
	var view = new OutlineNode(<span class="literal">"Record#"</span> + no, true);
	view.setIcon(<span class="literal">"record"</span>);
	view.setUserObject(<span class="reserved">this</span>);
	<span class="reserved">this</span>.view = view;
}



<span class="comment">//</span>
<span class="comment">// Expand event handler for records</span>
<span class="comment">//</span>
OutlineRecord.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
		<span class="reserved">return</span>;

	var view = <span class="reserved">this</span>.view;
	var ef = <span class="reserved">this</span>.ef;

	var bs = ef.readRecord(<span class="reserved">this</span>.no);

	var bindata = <span class="reserved">this</span>.factory.newDataOutline(bs, <span class="reserved">this</span>.efdesc.format);
	view.insert(bindata.view);

	<span class="reserved">this</span>.expanded = true;
}





<span class="comment">//</span>
<span class="comment">// CTOR - Binary data outline</span>
<span class="comment">//</span>
<span class="reserved">function</span> DataOutline(factory, data, format) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.data = data;
	<span class="reserved">this</span>.format = format;

	var ddata = data;
	<span class="reserved">if</span> (ddata.length &gt; 256) {
		ddata = data.bytes(0, 256);
	}

	var view = new OutlineNode(ddata.toString(HEX));
	view.setIcon(<span class="literal">"binary"</span>);
	view.setUserObject(<span class="reserved">this</span>);
	view.setToolTip(<span class="literal">"Select format from context menu"</span>);
	view.setContextMenu(DataOutline.ctxMenuList);
	<span class="reserved">this</span>.view = view;
	<span class="reserved">this</span>.decorate(format);
}


DataOutline.ctxMenuList = [<span class="literal">"as Hexdump"</span>, <span class="literal">"as ASN1"</span>, <span class="literal">"as X509"</span>];

DataOutline.<span class="reserved">prototype</span>.decorate = <span class="reserved">function</span>(format) {

	var view = <span class="reserved">this</span>.view;
	var data = <span class="reserved">this</span>.data;

	<span class="reserved">if</span> (format &amp;&amp; ((format.substr(0, 4) == <span class="literal">"asn1"</span>) || (format.substr(0, 7) == <span class="literal">"tlvlist"</span>)) &amp;&amp; (data.length &gt;= 2)) {
		var i = format.indexOf(<span class="literal">"."</span>);

		<span class="reserved">if</span> ((i &gt; 0) &amp;&amp; (format.substr(i + 1) == <span class="literal">"striprecordheader"</span>)) {
			data = data.bytes(2);
		}

		var total = data.length;

		<span class="reserved">while</span>(total &gt;= 2) {
			try	{
				var asn = new ASN1(data);
			}
			catch(e) {
				print(<span class="literal">"Error in TLV structure: "</span> + e);
				<span class="reserved">return</span>;
			}

			<span class="reserved">this</span>.asn = asn;
			<span class="reserved">this</span>.asn1DecoratorHook(format);
			view.insert(asn);
			total -= asn.size;

			<span class="reserved">if</span> (format.substr(0, 3) == <span class="literal">"asn"</span>) {
				break;
			}

			data = data.bytes(asn.size);
			<span class="reserved">if</span> ((data.length == 0) || (data.byteAt(0) == 0x00) || (data.byteAt(0) == 0xFF)) {
				break;
			}
		}

		<span class="reserved">if</span> (total &gt; 0) {
			var sparecontent = new OutlineNode(total + <span class="literal">" spare bytes"</span>);
			view.insert(sparecontent);
		}
	}
}



DataOutline.<span class="reserved">prototype</span>.asn1DecoratorHook = <span class="reserved">function</span>(format) {
	var i = format.indexOf(<span class="literal">"."</span>);

	<span class="reserved">if</span> (i &gt; 0) {
		switch(format.substr(i + 1)) {
		case <span class="literal">"arr"</span> :
			ARRDecorator(<span class="reserved">this</span>.asn);
			break;
		}
	}
}



DataOutline.<span class="reserved">prototype</span>.actionListener = <span class="reserved">function</span>(node, action) {
	print(<span class="literal">"--------------------------------------------------------------------------------"</span>);

	switch(action) {
		case DataOutline.ctxMenuList[0]:
			print(<span class="reserved">this</span>.data);
			break;
		case DataOutline.ctxMenuList[1]:
			var asn;
			try	{
				asn = new ASN1(<span class="reserved">this</span>.data);
				print(asn);
			}
			catch(e) {
				print(<span class="literal">"Error in TLV structure: "</span> + e);
				<span class="reserved">return</span>;
			}
			break;
		case DataOutline.ctxMenuList[2]:
			try 	{
				var x509 = new X509(<span class="reserved">this</span>.data);
				print(x509.toString());
			}
			catch(e) {
				print(e);
			}
			break;
	}
}



<span class="comment">//</span>
<span class="comment">// CTOR - Outline node for PKCS15 structures</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlinePKCS15(factory, pkcs15, aid, at) {
	<span class="reserved">if</span> (arguments.length == 0)
		<span class="reserved">return</span>;

	<span class="reserved">this</span>.factory = factory;
	<span class="reserved">this</span>.pkcs15 = pkcs15;
	<span class="reserved">this</span>.aid = aid;
	<span class="reserved">this</span>.at = at;

	var name = <span class="reserved">this</span>.at.label;
	<span class="reserved">if</span> (!name) {
		name = aid;
	}

	name = <span class="literal">"PKCS#15 \"</span><span class="literal">" + name + "</span>\<span class="literal">""</span>;

	<span class="comment">// Create OutlineNode object and register in OutlineDF object</span>
	var view = new OutlineNode(name, true);
	view.setUserObject(<span class="reserved">this</span>);
	<span class="reserved">this</span>.view = view;
}





<span class="comment">//</span>
<span class="comment">// Event handler for expand notifications</span>
<span class="comment">//</span>
OutlinePKCS15.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {

	<span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
		<span class="reserved">return</span>;

	var view = <span class="reserved">this</span>.view;
	var at = <span class="reserved">this</span>.at;

	<span class="reserved">if</span> (!at.ddo.ciaInfoPath) {
		<span class="comment">// Set a default path 5032 to EF.CIAInfo</span>
		var tlv = new ASN1(new ByteString(<span class="literal">"300404025032"</span>, HEX));
		at.ddo.ciaInfoPath = new PKCS15_Path(tlv);
		at.ddo.ciaInfoPath.aid = <span class="literal">"#"</span> + <span class="reserved">this</span>.aid;
	}

	var cia = <span class="reserved">this</span>.pkcs15.getCIAInfo(at.ddo.ciaInfoPath);

	var label = cia.label;
	<span class="reserved">if</span> (!label) {
		label = <span class="literal">"CIAInfo"</span>;
	} <span class="reserved">else</span> {
		label = <span class="literal">"CIAInfo \"</span><span class="literal">" + label + "</span>\<span class="literal">""</span>;
	}

	cia.tlv.setName(label);
	view.insert(cia.tlv);

	<span class="reserved">if</span> (!at.ddo.odfPath) {
		<span class="comment">// Set a default path 5031 to EF.OD</span>
		var tlv = new ASN1(new ByteString(<span class="literal">"300404025031"</span>, HEX));
		at.ddo.odfPath = new PKCS15_Path(tlv);
		at.ddo.odfPath.aid = <span class="literal">"#"</span> + <span class="reserved">this</span>.aid;
	}

	<span class="reserved">this</span>.pkcs15.readObjectListForApplication(at);

	<span class="reserved">for</span> (var i = 0; i &lt; at.objlist.length; i++) {
		var o = at.objlist[i];

		var label = o.label;
		<span class="reserved">if</span> (!label) {
			label = o.type;
		} <span class="reserved">else</span> {
			label = o.type + <span class="literal">" \"</span><span class="literal">" + label + "</span>\<span class="literal">""</span>;
		}

		<span class="reserved">if</span> ((o.type == <span class="literal">"X509Certificate"</span>) || (o.type == <span class="literal">"TrustedX509Certificate"</span>) || (o.type == <span class="literal">"UsefulX509Certificate"</span>)) {
			var onode = new OutlineNode(label, true);
			view.insert(onode);
			o.tlv.setName(<span class="literal">"CIO"</span>);
			onode.insert(o.tlv);

			<span class="reserved">if</span> (o.value &amp;&amp; (o.value instanceof PKCS15_Path)) {
				try	{
					var bs = <span class="reserved">this</span>.pkcs15.readCardObject(<span class="reserved">this</span>.pkcs15.df, o.value);
					var bindata = <span class="reserved">this</span>.factory.newDataOutline(bs, <span class="literal">"asn1.x509"</span>);
					onode.insert(bindata.view);
				}
				catch(e) {
					print(<span class="literal">"Unable to read certificate: "</span> + e);
				}
			}
		} <span class="reserved">else</span> {
			o.tlv.setName(label);
			view.insert(o.tlv);
		}
	}

	<span class="reserved">this</span>.expanded = true;
}





<span class="comment">//</span>
<span class="comment">// CTOR - OutlineFactory</span>
<span class="comment">// Derive from this class to include custom made outline elements</span>
<span class="comment">//</span>
<span class="reserved">function</span> CardOutlineFactory() {

}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineATR object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineATR = <span class="reserved">function</span>(atr) {
	<span class="reserved">return</span> new OutlineATR(<span class="reserved">this</span>, atr);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineDF object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineDF = <span class="reserved">function</span>(card, parentdf, id, name, profile) {
	<span class="reserved">return</span> new OutlineDF(<span class="reserved">this</span>, card, parentdf, id, name, profile);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineApplet object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineApplet = <span class="reserved">function</span>(instance) {
	throw new GPError(<span class="literal">"CardOutlineFactory"</span>, GPError.INVALID_USAGE, 0, <span class="literal">"Must overwrite newOutlineApplet to use explorer functionality"</span>);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlinePKCS15 object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlinePKCS15 = <span class="reserved">function</span>(pkcs15, aid, at) {
	<span class="reserved">return</span> new OutlinePKCS15(<span class="reserved">this</span>, pkcs15, aid, at);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineEF object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineEF = <span class="reserved">function</span>(df, name, profile) {
	<span class="reserved">return</span> new OutlineEF(<span class="reserved">this</span>, df, name, profile);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineDataObject object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineDataObject = <span class="reserved">function</span>(df, id, name, format) {
	<span class="reserved">return</span> new OutlineDataObject(<span class="reserved">this</span>, df, id, name, format);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineFCP object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineFCP = <span class="reserved">function</span>(fcp) {
	<span class="reserved">return</span> new OutlineFCP(<span class="reserved">this</span>, fcp);
}



<span class="comment">//</span>
<span class="comment">// Method to create new OutlineRecord object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newOutlineRecord = <span class="reserved">function</span>(ef, no, efdesc) {
	<span class="reserved">return</span> new OutlineRecord(<span class="reserved">this</span>, ef, no, efdesc);
}



<span class="comment">//</span>
<span class="comment">// Method to create new DataOutline object</span>
<span class="comment">//</span>
<span class="comment">// Overwrite if you want to tailor this behaviour</span>
<span class="comment">//</span>
CardOutlineFactory.<span class="reserved">prototype</span>.newDataOutline = <span class="reserved">function</span>(data, format) {
	<span class="reserved">return</span> new DataOutline(<span class="reserved">this</span>, data, format);
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="FCPDecorator.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>FCPDecorator.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'FCPDecorator.js'<BR/><BR/>
	
</p>

<hr>



<!-- ========== METHOD SUMMARY =========== -->

	<a name="method_summary"><!-- --></a>
	<table border="1" cellpadding="3" cellspacing="0" width="100%">
		<tr bgcolor="#CCCCFF" class="TableHeadingColor">
			<td colspan=2>
				<font size="+2">
					<b>Method Summary</b>
				</font>
			</td>
		</tr>
	
		
		   <tr bgcolor="white" class="TableRowColor">
		      <td align="right" valign="top" width="1%">
			 <font size="-1">
			    <code>static&nbsp;void</code>
			 </font>
		      </td>
		      <td>
			 <code>
			    <b>
			       <a href="GLOBALS.html#!s!FCPDecorator">FCPDecorator</a></b>(asn1)
			 </code>
			 <br>
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			 
		      </td>
		   </tr>
		
		   <tr bgcolor="white" class="TableRowColor">
		      <td align="right" valign="top" width="1%">
			 <font size="-1">
			    <code>static&nbsp;void</code>
			 </font>
		      </td>
		      <td>
			 <code>
			    <b>
			       <a href="GLOBALS.html#!s!SADecorator">SADecorator</a></b>(asn1)
			 </code>
			 <br>
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			 
		      </td>
		   </tr>
		
	
	</table>
    <p>

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/*
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Function to name tags contained in FCP, FMD or FCI data structure
 */</span>



<span class="comment">//</span>
<span class="comment">// Decorator for security attributes in FCPs</span>
<span class="comment">//</span>
<span class="reserved">function</span> SADecorator(asn1) {
	var recurse = false;
	
	switch(asn1.tag) {
	case 0x86:
		asn1.setName(<span class="literal">"proprietarySecurityAttributes"</span>);
		break;
	case 0x8B:
		asn1.setName(<span class="literal">"securityAttributeReferenceExpanded"</span>);
		break;
	case 0x8C:
		asn1.setName(<span class="literal">"securityAttributeCompact"</span>);
		break;
	case 0x8B:
		asn1.setName(<span class="literal">"securityAttributeExtended"</span>);
		break;
	case 0xA0:
		asn1.setName(<span class="literal">"securityAttributeForDataObjects"</span>);
		recurse = true;
		break;
	case 0xA1:
		asn1.setName(<span class="literal">"securityAttributeForInterfaces"</span>);
		recurse = true;
		break;
	case 0xAB:
		asn1.setName(<span class="literal">"securityAttributeTemplateExpanded"</span>);
		<span class="reserved">for</span> (var i = 0; i &lt; asn1.elements; i++) {
			ARRDecorator(asn1.get(i));
		}
		break;
	}
	
	<span class="reserved">if</span> (recurse) {
		<span class="reserved">for</span> (var i = 0; i &lt; asn1.elements; i++) {
			SADecorator(asn1.get(i));
		}
	}
}



<span class="comment">//</span>
<span class="comment">// Identify tags in the FCP and assign a name</span>
<span class="comment">//</span>
<span class="reserved">function</span> FCPDecorator(asn1) {
	switch(asn1.tag) {
	case 0x62:
		asn1.setName(<span class="literal">"FCP"</span>);
		break;
	case 0x64:
		asn1.setName(<span class="literal">"FMD"</span>);
		break;
	case 0x6F:
		asn1.setName(<span class="literal">"FCI"</span>);
		break;
	}
	
	<span class="reserved">for</span> (var i = 0; i &lt; asn1.elements; i++) {
		var t = asn1.get(i);
		switch(t.tag) {
		case 0x80:
			t.setName(<span class="literal">"numberOfBytes"</span>);
			break;
		case 0x81:
			t.setName(<span class="literal">"numberOfBytesStructural"</span>);
			break;
		case 0x82:
			t.setName(<span class="literal">"fileDescriptor"</span>);
			break;
		case 0x83:
			t.setName(<span class="literal">"fileIdentifier"</span>);
			break;
		case 0x84:
			t.setName(<span class="literal">"dFName"</span>);
			break;
		case 0x85:
			t.setName(<span class="literal">"proprietaryInformationPlain"</span>);
			break;
		case 0x87:
			t.setName(<span class="literal">"idOfFCIExtension"</span>);
			break;
		case 0x88:
			t.setName(<span class="literal">"shortFileIdentifier"</span>);
			break;
		case 0x8A:
			t.setName(<span class="literal">"lifeCycleStatusByte"</span>);
			break;
		case 0x8D:
			t.setName(<span class="literal">"idOfSecurityEnvironmentTemplates"</span>);
			break;
		case 0x8B:
			t.setName(<span class="literal">"securityAttributeExtended"</span>);
			break;
		case 0xA5:
			t.setName(<span class="literal">"proprietaryInformationTLV"</span>);
			break;
		case 0xAC:
			t.setName(<span class="literal">"cryptoMechanismsIdentifier"</span>);
			break;
		default:
			SADecorator(t);
		}
	}
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="OutlineCore.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>OutlineCore.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'OutlineCore.js'<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="DataOutline.html">DataOutline</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="OutlineATR.html">OutlineATR</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="OutlineDF.html">OutlineDF</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="OutlineEF.html">OutlineEF</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="OutlineFCP.html">OutlineFCP</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="OutlineRecord.html">OutlineRecord</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/*
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Core classes to construct card outlines
 */</span>



load(<span class="literal">"FCPDecorator.js"</span>);
load(<span class="literal">"CRTDecorator.js"</span>);
load(<span class="literal">"ARRDecorator.js"</span>);


<span class="comment">//</span>
<span class="comment">// CTOR - ATR Outline</span>
<span class="comment">// </span>
<span class="reserved">function</span> OutlineATR(atr) {
	<span class="reserved">this</span>.atr = atr;

        <span class="comment">// Create OutlineNode object and register in ATR object</span>
        var view = new OutlineNode(<span class="literal">"ATR="</span> + <span class="reserved">this</span>.atr.toByteString().toString(HEX));
        view.setIcon(<span class="literal">"atr"</span>);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
}


OutlineATR.<span class="reserved">prototype</span>.selectedListener = <span class="reserved">function</span>() {
	print(<span class="reserved">this</span>.atr);
}


<span class="comment">//</span>
<span class="comment">// CTOR - FCP Outline</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineFCP(fcp) {
	<span class="reserved">this</span>.fcp = fcp;

        <span class="comment">// Create OutlineNode object and register in FCP object</span>
        var view = new OutlineNode(<span class="literal">"FCP="</span> + <span class="reserved">this</span>.fcp.toString(HEX));
        view.setIcon(<span class="literal">"header"</span>);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
        
        try	{
        	var asn = new ASN1(<span class="reserved">this</span>.fcp);
        	FCPDecorator(asn);
		view.insert(asn);
        }
        catch(e) {
        	print(<span class="literal">"Unable to decode FCP structure"</span>);
        }
}



<span class="comment">//</span>
<span class="comment">// CTOR - Outline node for DFs</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineDF(card, id, name, profile) {
        <span class="reserved">this</span>.card = card;
        <span class="reserved">this</span>.id = id;

        <span class="comment">// Create OutlineNode object and register in OutlineDF object</span>
        var view = new OutlineNode(name, true);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
        
        <span class="reserved">this</span>.profile = profile;
}



<span class="comment">//</span>
<span class="comment">// Event handler for expand notifications</span>
<span class="comment">//</span>
OutlineDF.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {

        <span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
                <span class="reserved">return</span>;

        var view = <span class="reserved">this</span>.view;
        var eflist = <span class="reserved">this</span>.profile.EF;
        
        try	{
        	var df = new CardFile(<span class="reserved">this</span>.card, <span class="reserved">this</span>.id);
		<span class="reserved">this</span>.df = df;
				
		var fcp = df.getFCPBytes();
		<span class="reserved">if</span> (fcp &amp;&amp; (fcp.length &gt; 1)) {
			var fcpmodel = new OutlineFCP(fcp);
			view.insert(fcpmodel.view);	
		}
				
		<span class="reserved">for</span> (var i = 0; i &lt; eflist.length; i++) {
		        var ef = new OutlineEF(<span class="reserved">this</span>.df, eflist[i].name, eflist[i]);
		        view.insert(ef.view);
		}
	}
	catch(e) {
		print(e);
	}
        
        <span class="reserved">this</span>.expanded = true;
}





<span class="comment">//</span>
<span class="comment">// CTOR - Outline node for EFs</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineEF(df, name, profile) {
        <span class="reserved">this</span>.df = df;

        <span class="comment">// Create OutlineNode object and register in OutlineEF object</span>
        var view = new OutlineNode(name, true);
        view.setIcon(<span class="literal">"document"</span>);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
        
        <span class="reserved">this</span>.profile = profile;
}



<span class="comment">//</span>
<span class="comment">// Event handler for expand notification</span>
<span class="comment">//</span>
OutlineEF.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
        <span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
                <span class="reserved">return</span>;

        var view = <span class="reserved">this</span>.view;
        var efdesc = <span class="reserved">this</span>.profile;

	try	{        
	        var ef = new CardFile(<span class="reserved">this</span>.df, <span class="literal">":"</span> + efdesc.fid);
	}
	catch(e) {
		print(e);
		<span class="reserved">return</span>;
	}
		
	var isTransparent = true;
	
	<span class="reserved">if</span> (efdesc.fid.length &gt; 2) {  <span class="comment">// Select by FID or SFI</span>
		var fcp = ef.getFCPBytes();
		<span class="reserved">if</span> (fcp &amp;&amp; (fcp.length &gt; 1)) {
			var fcpmodel = new OutlineFCP(fcp);
			view.insert(fcpmodel.view);
			isTransparent = ef.isTransparent();
		} <span class="reserved">else</span> {
			isTransparent = (efdesc.type == <span class="literal">"T"</span>);
		}
	}
		
        <span class="reserved">if</span> (isTransparent) {
        	var filesize = -1;
        	<span class="reserved">if</span> (fcp) {
	        	filesize = ef.getLength();
	       	
	        	<span class="reserved">if</span> (filesize &gt; 1024)
	        		print(<span class="literal">"Please wait, reading "</span> + filesize + <span class="literal">" bytes..."</span>);
	        } <span class="reserved">else</span> {
        		print(<span class="literal">"Please wait, reading card..."</span>);
	        }
        		
		try	{
			<span class="reserved">if</span> (filesize &gt; 0) {
				print(<span class="literal">"reading "</span> + filesize);
		                var bs = ef.readBinary(0, filesize);
		        } <span class="reserved">else</span> {
		                var bs = ef.readBinary();
		        }
	        }
	        catch(e) {
	       		print(e);
	       		<span class="reserved">this</span>.expanded = true;
	       		<span class="reserved">return</span>;
		}

		var bindata = new DataOutline(bs, efdesc.format);
		view.insert(bindata.view);
		
        } <span class="reserved">else</span> {
                <span class="reserved">for</span> (var rec = 1; rec &lt; 255; rec++) {
                        try     {
                                ef.readRecord(rec);
                                var record = new OutlineRecord(ef, rec, efdesc);
                                view.insert(record.view);
                        }
                        catch(e) {
                              	<span class="reserved">if</span> ((e instanceof GPError) &amp;&amp; (e.reason == 0x6A83))
                			break;
                                print(e);
                                break;
                        }
                }
        }
        
        <span class="reserved">this</span>.expanded = true;
}





<span class="comment">//</span>
<span class="comment">// CTOR - Outline for records in an EF</span>
<span class="comment">//</span>
<span class="reserved">function</span> OutlineRecord(ef, no, efdesc) {
        <span class="reserved">this</span>.ef = ef;
        <span class="reserved">this</span>.no = no;
        <span class="reserved">this</span>.efdesc = efdesc;
                
        <span class="comment">// Create OutlineNode object and register in OutlineRecord object</span>
        var view = new OutlineNode(<span class="literal">"Record#"</span> + no, true);
        view.setIcon(<span class="literal">"record"</span>);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
}



<span class="comment">//</span>
<span class="comment">// Expand event handler for records</span>
<span class="comment">//</span>
OutlineRecord.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
        <span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
                <span class="reserved">return</span>;

        var view = <span class="reserved">this</span>.view;
        var ef = <span class="reserved">this</span>.ef;

        var bs = ef.readRecord(<span class="reserved">this</span>.no);

	var bindata = new DataOutline(bs, <span class="reserved">this</span>.efdesc.format);
	view.insert(bindata.view);
        
        <span class="reserved">this</span>.expanded = true;
}



<span class="comment">//</span>
<span class="comment">// CTOR - Binary data outline</span>
<span class="comment">//</span>
<span class="reserved">function</span> DataOutline(data, format) {
	<span class="reserved">this</span>.data = data;

	var ddata = data;
	<span class="reserved">if</span> (ddata.length &gt; 256) {
		ddata = data.bytes(0, 256);
	}
	
	var view = new OutlineNode(ddata.toString(HEX));
        view.setIcon(<span class="literal">"binary"</span>);
	view.setUserObject(<span class="reserved">this</span>);
	<span class="reserved">this</span>.view = view;
	
	<span class="reserved">if</span> (((format == <span class="literal">"asn1"</span>) || (format == <span class="literal">"tlvlist"</span>)) &amp;&amp; (data.length &gt;= 2)) {
                var total = data.length;
                
                <span class="reserved">while</span>(total &gt;= 2) {
                	try	{
	                        var asn = new ASN1(data);
	                }
	            	catch(e) {
	            		print(<span class="literal">"Exception creating ASN.1 object: "</span> + e);
	            		break;
	            	}
                        view.insert(asn);
                        total -= asn.size;
                        
                        <span class="reserved">if</span> (format == <span class="literal">"asn1"</span>) {
                                break;
                        }

                        data = data.bytes(asn.size);
                        <span class="reserved">if</span> ((data.length == 0) || (data.byteAt(0) == 0x00) || (data.byteAt(0) == 0xFF)) {
                                break;
                        }
                }
                        
                <span class="reserved">if</span> (total &gt; 0) {
                        var sparecontent = new OutlineNode(total + <span class="literal">" spare bytes"</span>);
                        view.insert(sparecontent);
                }
        }
}



DataOutline.<span class="reserved">prototype</span>.selectedListener = <span class="reserved">function</span>() {
	print(<span class="literal">"--------------------------------------------------------------------------------"</span>);
	print(<span class="reserved">this</span>.data);
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="TestGroup.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>TestGroup.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		Core elements of a test group containing individual test cases<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="TestGroup.html">TestGroup</a></b></td>
    <td><p>Abstract base class implementing a group of test cases.</p>
 <p>Actual test group objects are derived from this base class.</p>
 <p>Each test case is created as a method of this object.</p>
 </td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * <span class="attrib">@fileoverview</span> Core elements of a test group containing individual test cases
 */</span>



<span class="comment">/**
 * Create a test group object containing test cases.
 * 
 * <span class="attrib">@class</span>
 * &lt;p&gt;Abstract base class implementing a group of test cases.&lt;/p&gt;
 * &lt;p&gt;Actual test group objects are derived from this base class.&lt;/p&gt;
 * &lt;p&gt;Each test case is created as a method of this object.&lt;/p&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {String} name the name of the test group
 * <span class="attrib">@param</span> {Object} parameter the parameter object for this group of tests
 */</span>
<span class="reserved">function</span> TestGroup(name, parameter) {

	<span class="reserved">this</span>.name = name;
	<span class="reserved">this</span>.parameter = parameter;
<span class="comment">//	this.logfile = new String("--- TestGroup " + name + "\n");</span>
	<span class="reserved">this</span>.marker = null;
	
<span class="comment">//	print("TestGroup constructor called");</span>
}



<span class="comment">/**
 * Log a text message.
 * 
 * <span class="attrib">@param</span> {String} message the message to add to the log
 */</span>
TestGroup.<span class="reserved">prototype</span>.log = <span class="reserved">function</span>(message) {
	GPSystem.trace(message);
<span class="comment">//	this.logfile += message + "\n";</span>
<span class="comment">//	print(message);</span>
}



<span class="comment">/**
 * Setup method called before invoking each individual test case.
 */</span>
TestGroup.<span class="reserved">prototype</span>.setUp = <span class="reserved">function</span>() {
<span class="comment">//	this.log("TestGroup.setUp() called");</span>
}



<span class="comment">/**
 * Teardown method called after invocation of a test case.
 */</span>
TestGroup.<span class="reserved">prototype</span>.tearDown = <span class="reserved">function</span>() {
<span class="comment">//	this.log("TestGroup.tearDown() called");</span>
}



<span class="comment">/**
 * Verify that the given assertion evaluates to true. Throw an exception if result is false.
 * 
 * <span class="attrib">@param</span> {Boolean} result true if assertion is valid
 * <span class="attrib">@param</span> {String} message the message to log in case result is false
 */</span>
TestGroup.<span class="reserved">prototype</span>.assertTrue = <span class="reserved">function</span>(result, message) {
	<span class="reserved">if</span> (!result) {
		<span class="reserved">if</span> (<span class="reserved">this</span>.marker) {
			throw new Error(<span class="literal">"Assertion failed for ["</span> + <span class="reserved">this</span>.marker + <span class="literal">"]: "</span> + message);
		} <span class="reserved">else</span> {
			throw new Error(<span class="literal">"Assertion failed: "</span> + message);
		}
	}
}



<span class="comment">/**
 * Verify that the given values are equal. Throw an exception if not.
 * 
 * <span class="attrib">@param</span> {Any} first the first argument
 * <span class="attrib">@param</span> {Any} second the second argument
 * <span class="attrib">@param</span> {String} message the message to log in case result is false
 */</span>
TestGroup.<span class="reserved">prototype</span>.assertEquals = <span class="reserved">function</span>(first, second, message) {
	<span class="reserved">if</span> (first != second) {
		<span class="reserved">if</span> (<span class="reserved">this</span>.marker) {
			throw new Error(<span class="literal">"Assertion failed for ["</span> + <span class="reserved">this</span>.marker + <span class="literal">"]: "</span> + message);
		} <span class="reserved">else</span> {
			throw new Error(<span class="literal">"Assertion failed: "</span> + message);
		}
	}
}



<span class="comment">/**
 * Sets a marker used to identify a context in which an assertion failed.
 * 
 * &lt;p&gt;A context can be a certain iteration
 * or group of assertions. A marker allows to further identify the area of a problem.&lt;/p&gt;
 * 
 * <span class="attrib">@param</span> {String} marker the marker to set
 */</span>
TestGroup.<span class="reserved">prototype</span>.setMarker = <span class="reserved">function</span>(marker) {
	<span class="reserved">this</span>.marker = marker;
}



<span class="comment">/**
 * Returns the name of test group.
 * 
 * <span class="attrib">@type</span> String
 * <span class="attrib">@return</span> the name of the test group
 */</span>
TestGroup.<span class="reserved">prototype</span>.getName = <span class="reserved">function</span>() {
		<span class="reserved">return</span> <span class="reserved">this</span>.name;
}



<span class="comment">/**
 * Returns a list of tests as sorted array of test case names.
 * 
 * <span class="attrib">@type</span> String[]
 * <span class="attrib">@return</span> the sorted array of test case names
 */</span>
TestGroup.<span class="reserved">prototype</span>.getTestCaseNames = <span class="reserved">function</span>() {
	var tests = new Array();
	
	<span class="reserved">for</span> (f in <span class="reserved">this</span>) {
		<span class="reserved">if</span> (f.substr(0, 4) == <span class="literal">"case"</span>) {
			<span class="reserved">if</span> (<span class="reserved">this</span>[f] instanceof Function) {
				tests.push(f.substr(4));
			}
		}
	}

	tests.sort();
	<span class="reserved">return</span> tests;
}



<span class="comment">/**
 * Returns a specific test case function.
 * 
 * <span class="attrib">@param</span> {String} name the test case name
 * <span class="attrib">@type</span> Function
 * <span class="attrib">@return</span> the test case method
 */</span>
TestGroup.<span class="reserved">prototype</span>.getTestCase = <span class="reserved">function</span>(name) {
	<span class="reserved">return</span> <span class="reserved">this</span>[<span class="literal">"case"</span> + name];
}



<span class="comment">/**
 * Returns a list of test procedure names referenced by a test case.
 * 
 * <span class="attrib">@param</span> {String} test case name
 * <span class="attrib">@type</span> String[]
 * <span class="attrib">@return</span> a list of test procedure names or undefined
 */</span>
TestGroup.<span class="reserved">prototype</span>.getUsedTestProceduresForTestCase = <span class="reserved">function</span>(name) {
	<span class="reserved">if</span> (<span class="reserved">this</span>.constructor.<span class="reserved">prototype</span>.usedProcedures) {
		<span class="reserved">return</span> <span class="reserved">this</span>.constructor.<span class="reserved">prototype</span>.usedProcedures[name];
	} <span class="reserved">else</span> {
		<span class="reserved">return</span> undefined;
	}
}



<span class="comment">/**
 * Run a named test procedure.
 * 
 * &lt;p&gt;This method is called by code in a test case to run a test procedure.&lt;/p&gt;
 * &lt;p&gt;This method uses the test runner to create a new instance of the test procedure object.
 * All test steps in the procedure are executed and the test procedure object is returned to
 * the caller for further processing of test results.&lt;/p&gt;
 * 
 * <span class="attrib">@param</span> {String} name the test procedure name
 * <span class="attrib">@param</span> {Object} param the parameter object to pass to the execution of the test procedure
 * <span class="attrib">@type</span> TestProcedure
 * <span class="attrib">@return</span> the test procedure object
 */</span>
TestGroup.<span class="reserved">prototype</span>.runTestProcedure = <span class="reserved">function</span>(name, param) {
	<span class="reserved">if</span> (!<span class="reserved">this</span>.testRunner) {
		throw new GPError(<span class="literal">"TestGroup"</span>, GPError.INVALID_USAGE, 0, <span class="literal">"No test runner defined"</span>);
	}
	var proc = <span class="reserved">this</span>.testRunner.getTestProcedure(name);
	var test = new proc(name, <span class="reserved">this</span>, param);
	test.run();
	
	<span class="reserved">return</span> test; 
}



<span class="comment">/**
 * Report progress of passed steps in a test procedure to the test runner. This method is used internally.
 * 
 * <span class="attrib">@private</span>
 * <span class="attrib">@param</span> {String} procedure the procedure name
 * <span class="attrib">@param</span> {String} step the step name
 */</span>
TestGroup.<span class="reserved">prototype</span>.reportProgress = <span class="reserved">function</span>(procedure, step) {
	<span class="reserved">if</span> (<span class="reserved">this</span>.testRunner) {
		var runner = <span class="reserved">this</span>.testRunner;
		var uniqueName = <span class="reserved">this</span>.currentTestCase + <span class="literal">"/"</span> + procedure + <span class="literal">"/"</span> + step;
		runner.hasPassed(uniqueName, null);
	}
}



<span class="comment">/**
 * Initialize a test run. This method is used internally.
 * <span class="attrib">@private</span>
 */</span>
TestGroup.<span class="reserved">prototype</span>.initTestRun = <span class="reserved">function</span>() {
	<span class="reserved">this</span>.marker = null;
}



<span class="comment">/**
 * Run a single test case. This method is called internally. Use {<span class="attrib">@link</span> #runTestCase} for running a single test case.
 * 
 * <span class="attrib">@private</span>
 * <span class="attrib">@type</span> boolean
 * <span class="attrib">@return</span> true if test passed
 */</span>
TestGroup.<span class="reserved">prototype</span>.runTestCaseInternal = <span class="reserved">function</span>(casename, runner) {
	var result = false;
	<span class="reserved">this</span>.currentTestCase = <span class="reserved">this</span>.name + <span class="literal">"/"</span> + casename;
	<span class="reserved">this</span>.testRunner = runner;

<span class="comment">//	this.logfile = "";</span>

	var starttime = new Date();
	GPSystem.markTrace();
	logentry = <span class="literal">"+ TestCase "</span> + <span class="reserved">this</span>.currentTestCase + <span class="literal">" started "</span> + starttime;
	print(logentry);
	<span class="reserved">this</span>.log(logentry);
	try {
		<span class="reserved">this</span>.setUp();
		var func = <span class="reserved">this</span>.getTestCase(casename);
		func.call(<span class="reserved">this</span>);
		<span class="reserved">this</span>.tearDown();
		var endtime = new Date();
		logentry = <span class="literal">"+ TestCase "</span> + <span class="reserved">this</span>.currentTestCase + <span class="literal">" completed on "</span> + endtime + <span class="literal">" after "</span> + (endtime.valueOf() - starttime.valueOf()) + <span class="literal">" ms"</span>;
		print(logentry);
		<span class="reserved">this</span>.log(logentry);
		<span class="reserved">if</span> (runner) {
			var logfile = GPSystem.copyTrace();
			runner.hasPassed(<span class="reserved">this</span>.currentTestCase, logfile);
		}
		result = true;
	}
	catch(e) {
		var endtime = new Date();
		logentry = <span class="literal">"+ TestCase "</span> + <span class="reserved">this</span>.currentTestCase + <span class="literal">" failed on "</span> + endtime + <span class="literal">" after "</span> + (endtime.valueOf() - starttime.valueOf()) + <span class="literal">" ms"</span>;
		print(logentry);
		<span class="reserved">this</span>.log(logentry);
		
		logentry = <span class="literal">"  ### - "</span> + e;
		print(logentry);
		<span class="reserved">this</span>.log(logentry);
		<span class="reserved">for</span> (j in e) {
			logentry = <span class="literal">"  ### "</span> + j + <span class="literal">" = "</span> + e[j];
			print(logentry);
			<span class="reserved">this</span>.log(logentry);
		}
		
		<span class="reserved">if</span> (runner) {
			var logfile = GPSystem.copyTrace();
			runner.hasFailed(<span class="reserved">this</span>.currentTestCase, logfile);
		}
	}
	<span class="reserved">return</span> result;
}



<span class="comment">/**
 * Runs all tests in a test group.
 * 
 * &lt;p&gt;This method can be used to run a test group without a test runner. In that case leave the runner
 * argument empty or null.&lt;/p&gt;
 * 
 * <span class="attrib">@param</span> {TestRunner} runner the test runner to report progress or undefined or null
 */</span>
TestGroup.<span class="reserved">prototype</span>.run = <span class="reserved">function</span>(runner) {
	<span class="reserved">this</span>.initTestRun();
	
	var tests = <span class="reserved">this</span>.getTestCaseNames();
	
	var startgroup = new Date();
	var logentry = <span class="literal">"TestGroup "</span> + <span class="reserved">this</span>.name + <span class="literal">" started "</span> + startgroup;
	var failures = 0;
	print(logentry);
	<span class="reserved">this</span>.log(logentry);
	
	<span class="reserved">for</span> (var i = 0; i &lt; tests.length; i++) {
		var uniqueName = <span class="reserved">this</span>.name + <span class="literal">"/"</span> + tests[i];
		
		<span class="reserved">if</span> (runner) {
			<span class="reserved">if</span> (!runner.isEnabled(uniqueName))
				continue;
		}
		
		<span class="reserved">if</span> (!<span class="reserved">this</span>.runTestCaseInternal(tests[i], runner)) {
			failures++;
		}
	}

	var endgroup = new Date();
	logentry = <span class="literal">"TestGroup "</span> + <span class="reserved">this</span>.name + <span class="literal">" completed on "</span> + endgroup + <span class="literal">" with "</span> + failures + <span class="literal">" failed tests"</span>;
	print(logentry);
	<span class="reserved">this</span>.log(logentry);
}



<span class="comment">/**
 * Run a single test in a test group, optionally using a test runner.
 * 
 * <span class="attrib">@param</span> {String} casename the name of the test case
 * <span class="attrib">@param</span> {TestRunner} the test runner object or undefined or null
 */</span>
TestGroup.<span class="reserved">prototype</span>.runTestCase = <span class="reserved">function</span>(casename, runner) {
	<span class="reserved">this</span>.initTestRun();
	<span class="reserved">this</span>.runTestCaseInternal(casename, runner);
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="TestProcedure.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>TestProcedure.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'TestProcedure.js'<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="TestProcedure.html">TestProcedure</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/*
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Core elements of a test procedure
 */</span>


<span class="comment">//</span>
<span class="comment">// Constructor</span>
<span class="comment">// </span>
<span class="reserved">function</span> TestProcedure(name, testgroup, parameter) {

	<span class="reserved">this</span>.name = name;
	<span class="reserved">this</span>.testgroup = testgroup;
	<span class="reserved">this</span>.parameter = parameter;
<span class="comment">//	print("TestProcedure constructor called");</span>
}



<span class="comment">//</span>
<span class="comment">// Log message to console</span>
<span class="comment">// </span>
TestProcedure.<span class="reserved">prototype</span>.log = <span class="reserved">function</span>(message) {
	<span class="reserved">this</span>.testgroup.log(message);
<span class="comment">//	print(message);</span>
}



<span class="comment">//</span>
<span class="comment">// Setup object for a test procedure</span>
<span class="comment">//</span>
TestProcedure.<span class="reserved">prototype</span>.setUp = <span class="reserved">function</span>() {
<span class="comment">//	this.log("TestProcedure.setUp() called");</span>
}



<span class="comment">//</span>
<span class="comment">// Remove residue from test procedure</span>
<span class="comment">// </span>
TestProcedure.<span class="reserved">prototype</span>.tearDown = <span class="reserved">function</span>() {
<span class="comment">//	this.log("TestProcedure.tearDown() called");</span>
}



<span class="comment">//</span>
<span class="comment">// Verify that assertion is true</span>
<span class="comment">//</span>
TestProcedure.<span class="reserved">prototype</span>.assertTrue = <span class="reserved">function</span>(result, message) {
	<span class="reserved">this</span>.testgroup.assertTrue(result, message);
}



<span class="comment">//</span>
<span class="comment">// Verify that expressions are equal</span>
<span class="comment">//</span>
TestProcedure.<span class="reserved">prototype</span>.assertEquals = <span class="reserved">function</span>(first, second, message) {
	<span class="reserved">this</span>.testgroup.assertEquals(first, second, message);
}



<span class="comment">//</span>
<span class="comment">// Run all tests in a test procedure</span>
<span class="comment">//</span>
TestProcedure.<span class="reserved">prototype</span>.run = <span class="reserved">function</span>() {
	var steps = new Array();
	
	<span class="reserved">for</span> (f in <span class="reserved">this</span>) {
		<span class="reserved">if</span> (f.substr(0, 4) == <span class="literal">"step"</span>) {
			<span class="reserved">if</span> (<span class="reserved">this</span>[f] instanceof Function) {
				steps.push(f);
			}
		}
	}

	steps.sort();
	
	<span class="reserved">for</span> (var i = 0; i &lt; steps.length; i++) {
		var step = steps[i].substr(4);
<span class="comment">//		print("    Step " + step + " of procedure " +  this.name);</span>
		<span class="reserved">this</span>.setUp();
		<span class="reserved">this</span>[steps[i]].call(<span class="reserved">this</span>);
		<span class="reserved">this</span>.tearDown();

		var testgroup = <span class="reserved">this</span>.testgroup;
		testgroup.reportProgress(<span class="reserved">this</span>.name, step);
	}
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="TestRunner.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>TestRunner.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		Test runner framework<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="TestCaseRunner.html">TestCaseRunner</a></b></td>
    <td>Class implementing a test case harness
 </td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="TestGroupRunner.html">TestGroupRunner</a></b></td>
    <td>Class implementing a harness to run test groups
 </td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="TestLogFile.html">TestLogFile</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="TestProcedureRunner.html">TestProcedureRunner</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="TestReport.html">TestReport</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="TestResult.html">TestResult</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="TestRunner.html">TestRunner</a></b></td>
    <td>Class implementing a graphical test runner
 </td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="TestStepRunner.html">TestStepRunner</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * <span class="attrib">@fileoverview</span> Test runner framework
 */</span>



<span class="comment">/**
 * Create a test runner using a Smart Card Shell outline for navigation
 *
 * <span class="attrib">@class</span> Class implementing a graphical test runner
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {String} name the test suite name
 */</span>
<span class="reserved">function</span> TestRunner(name) {

	<span class="reserved">this</span>.name = name;
	<span class="reserved">this</span>.testGroupRunners = new Array();
	<span class="reserved">this</span>.testProcedures = new Array();
	<span class="reserved">this</span>.testMapper = new Array();
	<span class="reserved">this</span>.testGroupPrototype = new TestGroup();
	<span class="reserved">this</span>.testProcedurePrototype = new TestProcedure();
	<span class="reserved">this</span>.testReport = new TestReport();
	
	<span class="comment">// Create root node and set as view</span>
	var view = new OutlineNode(name, true);
	<span class="reserved">if</span> (typeof(view.expand) == <span class="literal">"function"</span>) {
		view.setContextMenu([<span class="literal">"run"</span>, <span class="literal">"clear"</span>, <span class="literal">"report"</span>, <span class="literal">"expand"</span>, <span class="literal">"collapse"</span>]);
	} <span class="reserved">else</span> {
		view.setContextMenu([<span class="literal">"run"</span>, <span class="literal">"clear"</span>, <span class="literal">"report"</span>]);
	}
	view.setUserObject(<span class="reserved">this</span>);
	<span class="reserved">this</span>.view = view;

	view.show();
}



<span class="comment">/**
 * Set directory to write reports
 *
 * <span class="attrib">@param</span> {String} dir the directory to store reports
 */</span>
TestRunner.<span class="reserved">prototype</span>.setReportDirectory = <span class="reserved">function</span>(dir) {
	<span class="reserved">this</span>.reportDir = dir;
}



<span class="comment">/**
 * Event listener for actions selected from context menu
 *
 * <span class="attrib">@param</span> {Object} source the outline node for which the action was invoked
 * <span class="attrib">@param</span> {String} actionName the name of the action selected
 */</span>
TestRunner.<span class="reserved">prototype</span>.actionListener = <span class="reserved">function</span>(source, actionName) {
	switch(actionName) {
	case <span class="literal">"run"</span> :
		<span class="reserved">this</span>.run();
		break;
	case <span class="literal">"clear"</span> :
		<span class="reserved">this</span>.clearResults();
		break;
	case <span class="literal">"report"</span> :
		<span class="reserved">this</span>.report();
		break;
	case <span class="literal">"expand"</span> :
		<span class="reserved">this</span>.expandAll();
		break;
	case <span class="literal">"collapse"</span> :
		<span class="reserved">this</span>.collapseAll();
		break;
	}
}



<span class="comment">/**
 * Expand all test groups
 */</span>
TestRunner.<span class="reserved">prototype</span>.expandAll = <span class="reserved">function</span>() {
	<span class="reserved">for</span> each (c in <span class="reserved">this</span>.view.childs) {
		c.expand();
	}
}



<span class="comment">/**
 * Collapse all test groups
 */</span>
TestRunner.<span class="reserved">prototype</span>.collapseAll = <span class="reserved">function</span>() {
	<span class="reserved">for</span> each (c in <span class="reserved">this</span>.view.childs) {
		c.collapse();
	}
}



<span class="comment">/**
 * Write test report
 */</span>
TestRunner.<span class="reserved">prototype</span>.report = <span class="reserved">function</span>() {
	var fn = GPSystem.dateTimeByteString().toString(HEX) + <span class="literal">"_TestReport.xml"</span>;
	<span class="reserved">if</span> (<span class="reserved">this</span>.reportDir == undefined) {
		var fn = GPSystem.mapFilename(fn, GPSystem.USR);
	} <span class="reserved">else</span> {
		var fn = <span class="reserved">this</span>.reportDir + <span class="literal">"/"</span> + fn;
	}
	var fn = Dialog.prompt(<span class="literal">"Select output file for report"</span>, fn, null, <span class="literal">"*.xml"</span>);
	<span class="reserved">if</span> (fn != null) {
		<span class="reserved">this</span>.testReport.writeReport(fn);
		print(<span class="literal">"Report written to "</span> + fn);
	}
}



<span class="comment">/**
 * Add a test group to the test runner
 *
 * &lt;p&gt;This call will iterate through all test cases and locate used procedures and steps.&lt;/p&gt;
 *
 * <span class="attrib">@param</span> {TestGroup} testGroup the test group object
 */</span>
TestRunner.<span class="reserved">prototype</span>.addTestGroup = <span class="reserved">function</span>(testGroup) {
	var tgrs = <span class="reserved">this</span>.testGroupRunners;
	
	tgr = new TestGroupRunner(<span class="reserved">this</span>, testGroup);

	tgrs.push(tgr);

	var view = <span class="reserved">this</span>.view;	
	view.insert(tgr.view);
}



<span class="comment">/**
 * Create test group from XML file and add to test runner
 *
 * <span class="attrib">@param</span> {String} file the file name containing the test group
 * <span class="attrib">@param</span> {Object} parameter the parameter object
 */</span>
TestRunner.<span class="reserved">prototype</span>.addTestGroupFromXML = <span class="reserved">function</span> (file, parameter) {
	<span class="comment">// Parse XML file.</span>
	var parser = new GPXML();
	parser.defineArrayElement(<span class="literal">"/testgroup"</span>, <span class="literal">"testcase,function"</span>, <span class="literal">"id,Name"</span>);
	parser.defineArrayElement(<span class="literal">"/testgroup/testcase/procedures"</span>, <span class="literal">"procedure"</span>);
	var xml = parser.parse(file);

	<span class="comment">// Determine CTOR function</span>
	var ctor = xml.constructor.Script;
	<span class="reserved">if</span> (!ctor) {
		<span class="comment">// Use a default constructor unless defined in XML profile</span>
		ctor = <span class="reserved">function</span>(name, parameter) { TestGroup.call(<span class="reserved">this</span>, name, parameter); };
	}
	
	<span class="comment">// Make CTOR available in scope object</span>
	<span class="comment">// this[xml.id] = ctor;</span>
	
	<span class="comment">// Set correct prototype object</span>
	ctor.<span class="reserved">prototype</span> = new TestGroup();
	ctor.<span class="reserved">prototype</span>.constructor = ctor;
	ctor.<span class="reserved">prototype</span>.usedProcedures = new Array();
	
	<span class="comment">// Add test cases to prototype object</span>
	var testcases = xml.testcase;
	<span class="reserved">for</span> (var i in testcases) {
		<span class="reserved">if</span> (i != <span class="literal">"arrayIndex"</span>) {
			var s = testcases[i].Script;
			s.XML = testcases[i];
			ctor.<span class="reserved">prototype</span>[<span class="literal">"case"</span> + i] = s;
			<span class="reserved">if</span> (testcases[i].procedures) {
				var procedures = testcases[i].procedures.procedure;
				ctor.<span class="reserved">prototype</span>.usedProcedures[i] = new Array();
				
				<span class="reserved">for</span> (var p = 0; p &lt; procedures.length; p++) {
					ctor.<span class="reserved">prototype</span>.usedProcedures[i].push(procedures[p].id);
				}
			}
		}
	}
	
	<span class="comment">// Add setup function to prototype object</span>
	<span class="reserved">if</span> (xml.setup) {
		ctor.<span class="reserved">prototype</span>[<span class="literal">"setUp"</span>] = xml.setup.Script;
	}
	
	<span class="comment">// Add teardown function to prototype object</span>
	<span class="reserved">if</span> (xml.teardown) {
		ctor.<span class="reserved">prototype</span>[<span class="literal">"tearDown"</span>] = xml.teardown.Script;
	}
	
	<span class="comment">// Add functions to prototype object</span>
	var functions = xml[<span class="literal">"function"</span>];
	<span class="reserved">for</span> (var i in functions) {
		<span class="reserved">if</span> (i != <span class="literal">"arrayIndex"</span>) {
			var s = functions[i].Script;
			ctor.<span class="reserved">prototype</span>[i] = s;
		}
	}
	
	ctor.XML = xml;
	
	var tc = new ctor(xml.id, parameter);
	
	<span class="reserved">this</span>.addTestGroup(tc);
}



<span class="comment">/**
 * Add a test procedure constructor to the list
 *
 * &lt;p&gt;Use the getName() method to obtain the test procedure name&lt;/p&gt;
 *
 * <span class="attrib">@param</span> {TestProcedure} proc the test procedure object
 */</span>
TestRunner.<span class="reserved">prototype</span>.addTestProcedure = <span class="reserved">function</span>(proc) {
	var name = proc.getName();
	<span class="reserved">if</span> (name) {
		<span class="reserved">this</span>.testProcedures[name] = proc;
	}
}



<span class="comment">/**
 * Create test procedure from XML file and add to test runner
 *
 * <span class="attrib">@param</span> {String} file the file name containing the test procedure
 * <span class="attrib">@param</span> {Object} parameter the parameter object
 */</span>
TestRunner.<span class="reserved">prototype</span>.addTestProcedureFromXML = <span class="reserved">function</span> (file, parameter) {
	<span class="comment">// Parse XML file.</span>
	var parser = new GPXML();
	parser.defineArrayElement(<span class="literal">"/testprocedure"</span>, <span class="literal">"teststep,function"</span>, <span class="literal">"id,Name"</span>);
	var xml = parser.parse(file);

	<span class="comment">// Determine CTOR function</span>
	var ctor = xml.constructor.Script;
	<span class="reserved">if</span> (!ctor) {
		<span class="comment">// Use a default constructor unless defined in XML profile</span>
		ctor = <span class="reserved">function</span>(testgroup, name, parameter) { TestProcedure.call(<span class="reserved">this</span>, testgroup, name, parameter); };
	}

	<span class="comment">// Make CTOR available in scope object</span>
	<span class="comment">// this[xml.id] = ctor;</span>
	
	<span class="comment">// Set correct prototype object</span>
	ctor.<span class="reserved">prototype</span> = new TestProcedure();
	ctor.<span class="reserved">prototype</span>.constructor = ctor;
	var teststeps = xml.teststep;
	<span class="reserved">for</span> (var i in teststeps) {
		<span class="reserved">if</span> (i != <span class="literal">"arrayIndex"</span>) {
			var s = teststeps[i].Script;
			ctor.<span class="reserved">prototype</span>[<span class="literal">"step"</span> + i] = s;
		}
	}
	<span class="reserved">if</span> (xml.setup) {
		ctor.<span class="reserved">prototype</span>[<span class="literal">"setUp"</span>] = xml.setup.Script;
	}
	<span class="reserved">if</span> (xml.teardown) {
		ctor.<span class="reserved">prototype</span>[<span class="literal">"tearDown"</span>] = xml.teardown.Script;
	}
	
	<span class="comment">// Add functions to prototype object</span>
	var functions = xml[<span class="literal">"function"</span>];
	<span class="reserved">for</span> (var i in functions) {
		<span class="reserved">if</span> (i != <span class="literal">"arrayIndex"</span>) {
			var s = functions[i].Script;
			ctor.<span class="reserved">prototype</span>[i] = s;
		}
	}

	ctor.XML = xml;
	ctor.getName = <span class="reserved">function</span>() { <span class="reserved">return</span> xml.id; };	

	<span class="reserved">this</span>.testProcedures[xml.id] = ctor;
}



<span class="comment">/**
 * Return constructor of test procedure
 *
 * <span class="attrib">@param</span> {String} name the name of the test procedure
 * <span class="attrib">@type</span> TestProcedure
 * <span class="attrib">@return</span> the test procedure object
 */</span>
TestRunner.<span class="reserved">prototype</span>.getTestProcedure = <span class="reserved">function</span>(name) {
	<span class="reserved">return</span> <span class="reserved">this</span>.testProcedures[name];
}



<span class="comment">/**
 * Add test to test mapper, which maps test unique id to listening object
 *
 * <span class="attrib">@param</span> {String} name the unique test name
 * <span class="attrib">@param</span> {Object} listener the listener object implementing the clearResults(), enable(), isEnabled(), hasPassed() and hasFailed() methods
 */</span>
TestRunner.<span class="reserved">prototype</span>.addTest = <span class="reserved">function</span>(name, listener) {
	<span class="reserved">this</span>.testMapper[name] = listener;
}



<span class="comment">/**
 * Run all test groups
 */</span>
TestRunner.<span class="reserved">prototype</span>.run = <span class="reserved">function</span>() {
	<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.testGroupRunners.length; i++) {
		var testGroupRunner = <span class="reserved">this</span>.testGroupRunners[i];
		testGroupRunner.run();
	}
}



<span class="comment">/** 
 * Clear result of last test run
 */</span>
TestRunner.<span class="reserved">prototype</span>.clearResults = <span class="reserved">function</span>() {
	<span class="reserved">for</span> (var i in <span class="reserved">this</span>.testMapper) {
		var listener = <span class="reserved">this</span>.testMapper[i];
		<span class="reserved">if</span> (listener) {
			listener.clearResult();
		}
	}
	<span class="reserved">this</span>.testReport = new TestReport();
}



<span class="comment">/**
 * Enable or disable test
 *
 * <span class="attrib">@param</span> {String} name the unique test name
 * <span class="attrib">@param</span> {Boolean} state the enable / disable state
 */</span>
TestRunner.<span class="reserved">prototype</span>.enable = <span class="reserved">function</span>(name, state) {
	var listener = <span class="reserved">this</span>.testMapper[name];
	<span class="reserved">if</span> (listener &amp;&amp; listener.enable) {
		<span class="reserved">return</span> listener.enable(state);
	} <span class="reserved">else</span> {
		throw new GPError(<span class="literal">"TestRunner"</span>, GPError.OBJECT_NOT_FOUND, 0, name);
	}
}



<span class="comment">/**
 * isEnabled query from TestGroup runner
 *
 * <span class="attrib">@param</span> {String} name the unique test name
 * <span class="attrib">@type</span> boolean
 * <span class="attrib">@return</span> true if the test is enabled
 */</span>
TestRunner.<span class="reserved">prototype</span>.isEnabled = <span class="reserved">function</span>(name) {
	var listener = <span class="reserved">this</span>.testMapper[name];
	<span class="reserved">if</span> (listener) {
		<span class="reserved">return</span> listener.isEnabled();
	}
	<span class="reserved">return</span> true;
}



<span class="comment">/**
 * hasPassed Listener
 * 
 * <span class="attrib">@param</span> {String} name the unique test name
 * <span class="attrib">@param</span> {String} log the test log
 */</span>
TestRunner.<span class="reserved">prototype</span>.hasPassed = <span class="reserved">function</span>(name, log) {
	var listener = <span class="reserved">this</span>.testMapper[name];
	<span class="reserved">if</span> (listener) {
		listener.hasPassed(log);
		
		<span class="reserved">if</span> (listener.getXML) {
			var result = new TestResult(name, true, log, listener.getXML());
			<span class="reserved">this</span>.testReport.addResult(result);
		}
	} <span class="reserved">else</span> {
		print(<span class="literal">"No receiver for passed notification : "</span> + name);
		<span class="reserved">for</span> (var i in <span class="reserved">this</span>.testMapper) {
			print(<span class="literal">"- "</span> + i);
		}
	}
}



<span class="comment">/**
 * hasFailed Listener
 * 
 * <span class="attrib">@param</span> {String} name the unique test name
 * <span class="attrib">@param</span> {String} log the test log
 */</span>
TestRunner.<span class="reserved">prototype</span>.hasFailed = <span class="reserved">function</span>(name, log) {
	var listener = <span class="reserved">this</span>.testMapper[name];
	<span class="reserved">if</span> (listener) {
		listener.hasFailed(log);
		<span class="reserved">if</span> (listener.getXML) {
			var result = new TestResult(name, false, log, listener.getXML());
			<span class="reserved">this</span>.testReport.addResult(result);
		}
	}
}



<span class="comment">/**
 * Create a TestGroupRunner containing the TestCases
 *
 * <span class="attrib">@class</span> Class implementing a harness to run test groups
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {TestRunner} testRunner the associated test runner
 * <span class="attrib">@param</span> {TestGroup= testGroup the test group
 */</span>
<span class="reserved">function</span> TestGroupRunner(testRunner, testGroup) {
	<span class="reserved">this</span>.testRunner = testRunner;
	<span class="reserved">this</span>.testGroup = testGroup;
	
	var view = new OutlineNode(testGroup.getName());
	view.setContextMenu([<span class="literal">"run"</span>]);
	view.setUserObject(<span class="reserved">this</span>);
	
	<span class="reserved">this</span>.view = view;

	var testcases = testGroup.getTestCaseNames();
	
	<span class="reserved">for</span> (var i = 0; i &lt; testcases.length; i++) {
		var tcr = new TestCaseRunner(<span class="reserved">this</span>, testcases[i]);
		view.insert(tcr.view);
	}
}



<span class="comment">/**
 * Event listener for context menu
 *
 * <span class="attrib">@param</span> {Object} source the outline node for which the action was invoked
 * <span class="attrib">@param</span> {String} actionName the name of the action selected
 */</span>
TestGroupRunner.<span class="reserved">prototype</span>.actionListener = <span class="reserved">function</span>(source, action) {
	switch(action) {
	case <span class="literal">"run"</span> : 
		<span class="reserved">this</span>.run();
		break;
	}
}



<span class="comment">/**
 * Run this test group
 */</span>
TestGroupRunner.<span class="reserved">prototype</span>.run = <span class="reserved">function</span>() {
	var test = <span class="reserved">this</span>.testGroup;
	
	test.run(<span class="reserved">this</span>.testRunner);
}




<span class="comment">/**
 * Construct a TestCaseRunner object
 *
 * <span class="attrib">@class</span> Class implementing a test case harness
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {TestGroupRunner} the parent test group runner
 * <span class="attrib">@param</span> {String} the test case name
 */</span>
<span class="reserved">function</span> TestCaseRunner(testGroupRunner, testCase) {
	<span class="reserved">this</span>.testGroupRunner = testGroupRunner;
	<span class="reserved">this</span>.testCase = testCase;
	<span class="reserved">this</span>.selected = true;

	var testRunner = testGroupRunner.testRunner;
	testRunner.addTest(testGroupRunner.testGroup.getName() + <span class="literal">"/"</span> + testCase, <span class="reserved">this</span>);

	<span class="reserved">this</span>.xml = testGroupRunner.testGroup.getTestCase(testCase).XML;

	var view = new OutlineNode(testCase + <span class="literal">" "</span> + <span class="reserved">this</span>.xml.name.elementValue);

	view.setUserObject(<span class="reserved">this</span>);
	view.setIcon(<span class="literal">"selected"</span>);
	view.setContextMenu([<span class="literal">"select"</span>, <span class="literal">"deselect"</span>, <span class="literal">"run"</span>]);
	<span class="reserved">this</span>.view = view;

	var testGroup = testGroupRunner.testGroup;

	var testprocedures = testGroup.getUsedTestProceduresForTestCase(testCase);

	<span class="reserved">if</span> (testprocedures) {
		<span class="reserved">for</span> (var i = 0; i &lt; testprocedures.length; i++) {
			var tpr = new TestProcedureRunner(<span class="reserved">this</span>, testprocedures[i]);
			view.insert(tpr.view);
		}
	}
}



<span class="comment">/**
 * Event listener for context menu
 *
 * <span class="attrib">@param</span> {Object} source the outline node for which the action was invoked
 * <span class="attrib">@param</span> {String} actionName the name of the action selected
 */</span>
TestCaseRunner.<span class="reserved">prototype</span>.actionListener = <span class="reserved">function</span>(source, actionName) {
	print(<span class="literal">"Action "</span> + actionName);
	switch(actionName) {
	case <span class="literal">"select"</span>:
		<span class="reserved">this</span>.selected = true;
		source.setIcon(<span class="literal">"selected"</span>);
		break;
	case <span class="literal">"deselect"</span>:
		<span class="reserved">this</span>.selected = false;
		source.setIcon(<span class="literal">"deselected"</span>);
		break;
	case <span class="literal">"run"</span>:
		<span class="reserved">this</span>.run();
		break;
	}
}



<span class="comment">/**
 * Run this test case
 */</span>
TestCaseRunner.<span class="reserved">prototype</span>.run = <span class="reserved">function</span>() {
	var test = <span class="reserved">this</span>.testGroupRunner.testGroup;
	
	test.runTestCase(<span class="reserved">this</span>.testCase, <span class="reserved">this</span>.testGroupRunner.testRunner);
}



<span class="comment">/**
 * Tell test runner if case is enabled
 *
 * <span class="attrib">@type</span> boolean
 * <span class="attrib">@return</span> true if enabled
 */</span>
TestCaseRunner.<span class="reserved">prototype</span>.isEnabled = <span class="reserved">function</span>() {
	<span class="reserved">return</span> <span class="reserved">this</span>.selected;
}



<span class="comment">/**
 * Add a log entry to the test case node
 *
 * <span class="attrib">@param</span> {String} log the test log
 */</span>
TestCaseRunner.<span class="reserved">prototype</span>.addLog = <span class="reserved">function</span>(log) {
	var view = <span class="reserved">this</span>.view;
	var lognode = new TestLogFile(<span class="reserved">this</span>, log);
	<span class="reserved">this</span>.log = lognode;
	view.insert(lognode.view);
}



<span class="comment">/**
 * Return describing XML element
 *
 * <span class="attrib">@type</span> Object
 * <span class="attrib">@return</span> the XML element for this test case
 */</span>
TestCaseRunner.<span class="reserved">prototype</span>.getXML = <span class="reserved">function</span>() {
	<span class="reserved">return</span> <span class="reserved">this</span>.xml;
}



<span class="comment">/**
 * Listener for passed notifications
 *
 * <span class="attrib">@param</span> {String} log the test log
 */</span>
TestCaseRunner.<span class="reserved">prototype</span>.hasPassed = <span class="reserved">function</span>(log) {
	<span class="reserved">this</span>.failed = false;
	var view = <span class="reserved">this</span>.view;
	view.setIcon(<span class="literal">"passed"</span>);
	<span class="reserved">this</span>.addLog(log);
}



<span class="comment">/**
 * Listener for failed notifications
 *
 * <span class="attrib">@param</span> {String} log the test log
 */</span>
TestCaseRunner.<span class="reserved">prototype</span>.hasFailed = <span class="reserved">function</span>(log) {
	<span class="reserved">this</span>.failed = true;
	var view = <span class="reserved">this</span>.view;
	view.setIcon(<span class="literal">"failed"</span>);
	<span class="reserved">this</span>.addLog(log);
}



<span class="comment">/**
 * Clear result of test
 */</span>
TestCaseRunner.<span class="reserved">prototype</span>.clearResult = <span class="reserved">function</span>() {
	<span class="reserved">this</span>.failed = false;
	var view = <span class="reserved">this</span>.view;
	<span class="reserved">if</span> (<span class="reserved">this</span>.selected) {
		view.setIcon(<span class="literal">"selected"</span>);
	} <span class="reserved">else</span> {
		view.setIcon(<span class="literal">"deselected"</span>);
	}
}



<span class="comment">/**
 * Enable or disable test
 *
 * <span class="attrib">@param</span> {Boolean} state true for enabled
 */</span>
TestCaseRunner.<span class="reserved">prototype</span>.enable = <span class="reserved">function</span>(state) {
	var view = <span class="reserved">this</span>.view;
	<span class="reserved">this</span>.selected = state;
	<span class="reserved">if</span> (<span class="reserved">this</span>.selected) {
		view.setIcon(<span class="literal">"selected"</span>);
	} <span class="reserved">else</span> {
		view.setIcon(<span class="literal">"deselected"</span>);
	}
}




<span class="comment">/**
 * Constructor for test log entry in outline
 */</span>
<span class="reserved">function</span> TestLogFile(parent, log) {
	<span class="reserved">this</span>.log = log;
	
	var view = new OutlineNode(<span class="literal">"Log from "</span> + Date());
	<span class="reserved">this</span>.view = view;
	view.setUserObject(<span class="reserved">this</span>);
}



<span class="comment">//</span>
<span class="comment">// Listener for node selection - Display log</span>
<span class="comment">//</span>
TestLogFile.<span class="reserved">prototype</span>.selectedListener = <span class="reserved">function</span>() {
	print(<span class="literal">"--------------------------------------------------------------------------------"</span>);
	print(<span class="reserved">this</span>.log);
}



<span class="comment">// --------------------------------------------</span>
<span class="comment">// Constructor for a TestProcedureRunner object</span>
<span class="comment">//</span>
<span class="reserved">function</span> TestProcedureRunner(testCaseRunner, testProcedure) {
	<span class="reserved">this</span>.testCaseRunner = testCaseRunner;
	<span class="reserved">this</span>.testProcedure = testProcedure;
	
	var view = new OutlineNode(testProcedure);
	<span class="reserved">this</span>.view = view;

	var tp = <span class="reserved">this</span>.testCaseRunner.testGroupRunner.testRunner.testProcedures[testProcedure];

	<span class="reserved">if</span> (tp) {
		var list = new Array();
		<span class="reserved">for</span> (var i in tp.<span class="reserved">prototype</span>) {
			<span class="reserved">if</span> (i.substr(0, 4) == <span class="literal">"step"</span>) {
				var step = i.substr(4);
				list.push(step);
			}
		}

		list.sort();
		
		<span class="reserved">for</span> (var i = 0; i &lt; list.length; i++) {
			var tpsr = new TestStepRunner(<span class="reserved">this</span>, list[i]);
			view.insert(tpsr.view);
		}
	} <span class="reserved">else</span> {
		print(<span class="literal">"No test procedure implementation found for "</span> + testProcedure);
	}
}




<span class="comment">// ---------------------------------------</span>
<span class="comment">// Constructor for a TestStepRunner object</span>
<span class="comment">//</span>
<span class="reserved">function</span> TestStepRunner(testProcedureRunner, testStep) {
	<span class="reserved">this</span>.testProcedureRunner = testProcedureRunner;
	<span class="reserved">this</span>.testStep = testStep;
	
	var view = new OutlineNode(testStep);
	<span class="reserved">this</span>.view = view;

	var testCaseRunner = testProcedureRunner.testCaseRunner;	
	var testGroupRunner = testCaseRunner.testGroupRunner;
	var testRunner = testGroupRunner.testRunner;
	var testName = testGroupRunner.testGroup.getName() + <span class="literal">"/"</span> + 
	               testCaseRunner.testCase + <span class="literal">"/"</span> + 
	               testProcedureRunner.testProcedure + <span class="literal">"/"</span> +
	               testStep;
	               
	testRunner.addTest(testName, <span class="reserved">this</span>);
}



<span class="comment">//</span>
<span class="comment">// Receive passed notifications</span>
<span class="comment">//</span>
TestStepRunner.<span class="reserved">prototype</span>.hasPassed = <span class="reserved">function</span>() {
	var view = <span class="reserved">this</span>.view;
	view.setIcon(<span class="literal">"passed"</span>);
}



<span class="comment">//</span>
<span class="comment">// Clear test result display</span>
<span class="comment">//</span>
TestStepRunner.<span class="reserved">prototype</span>.clearResult = <span class="reserved">function</span>() {
	var view = <span class="reserved">this</span>.view;
	view.setIcon();
}



<span class="reserved">function</span> TestReport() {
	<span class="reserved">this</span>.testResults = [];
}



TestReport.<span class="reserved">prototype</span>.addResult = <span class="reserved">function</span>(result) {
	<span class="reserved">this</span>.testResults.push(result);
}



TestReport.<span class="reserved">prototype</span>.writeReport = <span class="reserved">function</span>(filename) {
	var xml = &lt;testreport/&gt;
	
	<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.testResults.length; i++) {
		var r = <span class="reserved">this</span>.testResults[i];
		var x = r.toXML();
		xml.testcaseresult += x;
	}

	var os = new java.io.FileOutputStream(filename);
	var fw = new java.io.OutputStreamWriter(os, <span class="literal">"UTF-8"</span>);

	fw.write(<span class="literal">"&lt;?xml version=\"</span>1.0\<span class="literal">" encoding=\"</span>UTF-8\<span class="literal">"?&gt;\n"</span>);
	fw.write(<span class="literal">"&lt;?xml-stylesheet type=\"</span>text/xsl\<span class="literal">" href=\"</span>docreport.xsl\<span class="literal">" ?&gt;\n"</span>);

	fw.write(xml.toXMLString());
	fw.close();
}



<span class="reserved">function</span> TestResult(id, verdict, log, tcxml) {
	<span class="reserved">this</span>.id = id;
	<span class="reserved">this</span>.verdict = verdict;
	<span class="reserved">this</span>.log = log;
	<span class="reserved">this</span>.tcxml = tcxml;
}



TestResult.<span class="reserved">prototype</span>.toXML = <span class="reserved">function</span>() {
	var source = <span class="reserved">this</span>.id.split(<span class="literal">"/"</span>)[0];
	var sourceid = <span class="reserved">this</span>.id.split(<span class="literal">"/"</span>)[1];

	var xml = &lt;testcaseresult id={<span class="reserved">this</span>.id} source={source} sourceid={sourceid}/&gt;;

	xml.name = &lt;name&gt;{<span class="reserved">this</span>.tcxml.name.elementValue}&lt;/name&gt;;

	xml.verdict = &lt;verdict&gt;{ <span class="reserved">this</span>.verdict ? <span class="literal">"Passed"</span> : <span class="literal">"Failed"</span> }&lt;/verdict&gt;;
	xml.log = &lt;log&gt;{ <span class="literal">"\n"</span> + <span class="reserved">this</span>.log + <span class="literal">"\n"</span> }&lt;/log&gt;;
	<span class="reserved">return</span> xml;
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="crlgenerator.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>crlgenerator.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		Simple CRL generator class<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="CRLGenerator.html">CRLGenerator</a></b></td>
    <td>Class implementing a CRL certificate generator
 </td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

	<a name="method_summary"><!-- --></a>
	<table border="1" cellpadding="3" cellspacing="0" width="100%">
		<tr bgcolor="#CCCCFF" class="TableHeadingColor">
			<td colspan=2>
				<font size="+2">
					<b>Method Summary</b>
				</font>
			</td>
		</tr>
	
		
		   <tr bgcolor="white" class="TableRowColor">
		      <td align="right" valign="top" width="1%">
			 <font size="-1">
			    <code>static&nbsp;void</code>
			 </font>
		      </td>
		      <td>
			 <code>
			    <b>
			       <a href="GLOBALS.html#!s!CRLGeneratorTest">CRLGeneratorTest</a></b>()
			 </code>
			 <br>
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			 
		      </td>
		   </tr>
		
	
	</table>
    <p>

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * <span class="attrib">@fileoverview</span>
 * Simple CRL generator class
 */</span>

<span class="reserved">if</span> (typeof(__ScriptingServer) == <span class="literal">"undefined"</span>) {
	load(<span class="literal">"pkixcommon.js"</span>);
}

 

<span class="comment">/**
 * Create a Certificate Revocation List (CRL) generator.
 *
 * <span class="attrib">@class</span> Class implementing a CRL certificate generator
 * <span class="attrib">@constructor</span>
 *
 * <span class="attrib">@param</span> {Crypto} crypto the crypto provider to use for signing operations
 */</span>
<span class="reserved">function</span> CRLGenerator(crypto) {
	<span class="reserved">this</span>.crypto = crypto;
	<span class="reserved">this</span>.reset();
}


CRLGenerator.unspecified = 0;
CRLGenerator.keyCompromise = 1;
CRLGenerator.cACompromise = 2;
CRLGenerator.affiliationChanged = 3;
CRLGenerator.superseded = 4;
CRLGenerator.cessationOfOperation = 5;
CRLGenerator.certificateHold = 6;
CRLGenerator.removeFromCRL = 8;
CRLGenerator.privilegeWithdrawn = 9;
CRLGenerator.aACompromise = 10;



<span class="comment">/**
 * Resets all internal state variables.
 *
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.reset = <span class="reserved">function</span>() {
	<span class="reserved">this</span>.extensions = [];
	<span class="reserved">this</span>.revokedCertificates = [];
	<span class="reserved">this</span>.nextUpdate = null;
}



<span class="comment">/**
 * Sets the isser name.
 *
 * &lt;p&gt;The issuer name must be a JavaScript object containing the properties:&lt;/p&gt;
 * &lt;ul&gt;
 *  &lt;li&gt;C - the country&lt;/li&gt;
 *  &lt;li&gt;O - the organization&lt;/li&gt;
 *  &lt;li&gt;OU - the organization unit&lt;/li&gt;
 *  &lt;li&gt;CN - the common name&lt;/li&gt;
 * &lt;/ul&gt;
 * &lt;p&gt;Example:&lt;/p&gt;
 * &lt;pre&gt;
 *	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 * &lt;/pre&gt;
 * <span class="attrib">@param</span> {Object} issuer the issuer name
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.setIssuer = <span class="reserved">function</span>(issuer) {
	<span class="reserved">this</span>.issuer = issuer;
}



<span class="comment">/**
 * Sets the timestamp for this CRL
 *
 * <span class="attrib">@param</span> {Date} datetime the current date and time
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.setThisUpdate = <span class="reserved">function</span>(datetime) {
	<span class="reserved">this</span>.thisUpdate = datetime;
}



<span class="comment">/**
 * Sets the timestamp for the next update
 *
 * <span class="attrib">@param</span> {Date} datetime the date and time of the next update
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.setNextUpdate = <span class="reserved">function</span>(datetime) {
	<span class="reserved">this</span>.nextUpdate = datetime;
}



<span class="comment">/**
 * Sets the signature algorithm.
 *
 * <span class="attrib">@param</span> {Number} alg the signature algorithm, must be one of Crypto.RSA, Crypto.RSA_SHA256 or Crypto.ECDSA_SHA256
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.setSignatureAlgorithm = <span class="reserved">function</span>(alg) {
	<span class="reserved">this</span>.signatureAlgorithm = alg;
}



<span class="comment">/**
 * Adds an extension to the CRL
 *
 * &lt;p&gt;The structure is defined as:&lt;/p&gt;
 * &lt;pre&gt;
 *    Extension  ::=  SEQUENCE  {
 *        extnID      OBJECT IDENTIFIER,
 *        critical    BOOLEAN DEFAULT FALSE,
 *        extnValue   OCTET STRING
 *                    -- contains the DER encoding of an ASN.1 value
 *                    -- corresponding to the extension type identified
 *                    -- by extnID
 *        }
 *&lt;/pre&gt;
 * <span class="attrib">@param</span> {String} extnID the extensions object identifier
 * <span class="attrib">@param</span> {Boolean} critical the extension is critical
 * <span class="attrib">@param</span> {ByteString} the extension value as ByteString
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.addExtension = <span class="reserved">function</span>(extnID, critical, extnValue) {
	var t = new ASN1(<span class="literal">"extension"</span>, ASN1.SEQUENCE,
				new ASN1(<span class="literal">"extnID"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(extnID, OID))
			);

	<span class="reserved">if</span> (critical) {
		t.add(new ASN1(<span class="literal">"critical"</span>, ASN1.BOOLEAN, new ByteString(<span class="literal">"FF"</span>, HEX)));
	}

	t.add(new ASN1(<span class="literal">"extnValue"</span>, ASN1.OCTET_STRING, extnValue));
	<span class="reserved">this</span>.extensions.push(t);

}



<span class="comment">/**
 * Adds the authority public key identifier extension based on the issuers key.
 *
 * &lt;p&gt;The key identifier is calculated as SHA-1 hash over the contents of the
 * issuer public key (Without tag, length and number of unused bits.&lt;/p&gt;
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.addAuthorityKeyIdentifierExtension = <span class="reserved">function</span>(publicKey) {
	<span class="reserved">if</span> (publicKey.getComponent(Key.MODULUS)) {
		var spi = PKIXCommon.createRSASubjectPublicKeyInfo(publicKey);
	} <span class="reserved">else</span> {
		var spi = PKIXCommon.createECSubjectPublicKeyInfo(publicKey, <span class="reserved">this</span>.encodeECDomainParameter);
	}

	var keyvalue = spi.get(1).value.bytes(1);
	var hash = <span class="reserved">this</span>.crypto.digest(Crypto.SHA_1, keyvalue);
	
	var t = new ASN1(ASN1.SEQUENCE,
					new ASN1(0x80, hash)
				);
	<span class="reserved">this</span>.addExtension(<span class="literal">"id-ce-authorityKeyIdentifier"</span>, false, t.getBytes());
}



<span class="comment">/**
 * Adds the CRL number extension.
 *
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.addCRLNumberExtension = <span class="reserved">function</span>(crlnumber) {
	var t = new ASN1(ASN1.INTEGER,
					PKIXCommon.convertUnsignedInteger(ByteString.valueOf(crlnumber))
				);
	<span class="reserved">this</span>.addExtension(<span class="literal">"id-ce-cRLNumber"</span>, false, t.getBytes());
}



<span class="comment">/**
 * Add a revoked certificate to the list. This adds the complete DER encoded structure.
 *
 * <span class="attrib">@param</span> {ASN1} revokedCertificate the information related to the revoked certificate
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.addRevokedCertificate = <span class="reserved">function</span>(revokedCertificate) {
	<span class="reserved">this</span>.revokedCertificates.push(revokedCertificate);
}



<span class="comment">/**
 * Add a revoked certificate to the list. This adds the complete DER encoded structure.
 *
 * <span class="attrib">@param</span> {ByteString} serial the serial number of the certificate to revoke
 * <span class="attrib">@param</span> {Date} timestamp the revocation time, optional, default is now
 * <span class="attrib">@param</span> {Number) reason the revocation reason
 * <span class="attrib">@param</span> {ASN1) ext the crl entry extensions
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.revokeCertificate = <span class="reserved">function</span>(serial, timestamp, reason, ext) {
	<span class="reserved">if</span> (typeof(timestamp) == <span class="literal">"undefined"</span>) {
		timestamp = new Date();
	}
	var t = new ASN1(<span class="literal">"revokedCertificate"</span>, ASN1.SEQUENCE, 
				new ASN1(<span class="literal">"userCertificate"</span>, ASN1.INTEGER, PKIXCommon.convertUnsignedInteger(serial)),
				new ASN1(<span class="literal">"revocationTime"</span>, ASN1.UTCTime, new ByteString(PKIXCommon.dtoUTC(timestamp), ASCII))
				);

	<span class="reserved">if</span> (typeof(ext) == <span class="literal">"undefined"</span>) {
		ext = new ASN1(<span class="literal">"crlExtensions"</span>, ASN1.SEQUENCE);
	}
	
	<span class="reserved">if</span> ((typeof(reason) != <span class="literal">"undefined"</span>) &amp;&amp; (reason != -1)) {
		ext.add(new ASN1(<span class="literal">"reason"</span>, ASN1.SEQUENCE,
					new ASN1(<span class="literal">"extnID"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"id-ce-cRLReasons"</span>, OID)),
					new ASN1(<span class="literal">"extnValue"</span>, ASN1.OCTET_STRING,
						(new ASN1(<span class="literal">"cRLReason"</span>, ASN1.ENUMERATED, ByteString.valueOf(reason))).getBytes())
					)
				);
		t.add(ext);
	}
	
	<span class="reserved">this</span>.revokedCertificates.push(t);
}



<span class="comment">/**
 * Load list of revoked certificates from an existing CRL
 *
 * <span class="attrib">@param</span> {String} filename the file name of the DER encoded CRL
 * <span class="attrib">@type</span> Number
 * <span class="attrib">@return</span> the value of the CRLNumber extension, 0 if extension not defined or -1 if file could not be loaded
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.loadCRLEntries = <span class="reserved">function</span>(filename) {
	var crlnumber = 0;
	
	try	{
		var crlbin = PKIXCommon.readFileFromDisk(filename);
		var crl = new ASN1(crlbin);
		print(crl);
		var tbs = crl.get(0);
		var i = 0;
		<span class="reserved">if</span> ((i &lt; tbs.length) &amp;&amp; (tbs.get(i).tag == ASN1.INTEGER)) {		<span class="comment">// Skip version if present</span>
			i++;
		}
		i += 3;		<span class="comment">// Skip signature, issuer, thisUpdate</span>
		<span class="reserved">if</span> ((i &lt; tbs.length) &amp;&amp; (tbs.get(i).tag == ASN1.UTCTime)) {		<span class="comment">// nextUpdate if present</span>
			i++;
		}
		<span class="reserved">if</span> ((i &lt; tbs.length) &amp;&amp; (tbs.get(i).tag == ASN1.SEQUENCE)) {
			<span class="reserved">for</span> (var j = 0; j &lt; tbs.get(i).elements; j++) {
				<span class="reserved">this</span>.revokedCertificates.push(tbs.get(i).get(j));
			}
			i++;
		}
		<span class="reserved">if</span> ((i &lt; tbs.length) &amp;&amp; (tbs.get(i).tag == 0xA0)) {
			var l = tbs.get(i).get(0);
			var oid = new ByteString(<span class="literal">"id-ce-cRLNumber"</span>, OID);
			<span class="reserved">for</span> (var j = 0; j &lt; l.elements; j++) {
				var ext = l.get(j);
				<span class="reserved">if</span> (ext.get(0).value.equals(oid)) {
					var extval = new ASN1(ext.get(1).value);
					crlnumber = extval.value.toUnsigned();
				}
			}
			
		}
	}
	catch(e) {
		GPSystem.trace(e);
		<span class="reserved">return</span> -1;
	}
	<span class="reserved">return</span> crlnumber;
}



<span class="comment">/**
 * Gets the issuer name as TLV object
 *
 * <span class="attrib">@return</span> the issuer RDNSequence
 * <span class="attrib">@type</span> ASN1
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.getIssuer = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (<span class="reserved">this</span>.issuer instanceof ASN1) {
		<span class="reserved">return</span> <span class="reserved">this</span>.issuer;
	} <span class="reserved">else</span> {
		<span class="reserved">return</span> PKIXCommon.encodeName(<span class="reserved">this</span>.issuer);
	}
}



<span class="comment">/**
 * Gets the thisUpdate TLV object
 *
 * <span class="attrib">@return</span> the thisUpdate UTC encoded time
 * <span class="attrib">@type</span> ASN1
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.getThisUpdate = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"thisUpdate"</span>, ASN1.UTCTime, new ByteString(PKIXCommon.dtoUTC(<span class="reserved">this</span>.thisUpdate), ASCII));
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Gets the nextUpdate TLV object
 *
 * <span class="attrib">@return</span> the nextUpdate UTC encoded time
 * <span class="attrib">@type</span> ASN1
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.getNextUpdate = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"nextUpdate"</span>, ASN1.UTCTime, new ByteString(PKIXCommon.dtoUTC(<span class="reserved">this</span>.nextUpdate), ASCII));
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Gets the signature algorithm TLV object
 *
 * <span class="attrib">@return</span> the signature algorithm object
 * <span class="attrib">@type</span> ASN1
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.getSignatureAlgorithm = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"signatureAlgorithm"</span>, ASN1.SEQUENCE);

	<span class="reserved">if</span> (<span class="reserved">this</span>.signatureAlgorithm == Crypto.RSA) {
		t.add(new ASN1(<span class="literal">"algorithm"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"1.2.840.113549.1.1.5"</span>, OID)));
		t.add(new ASN1(<span class="literal">"parameters"</span>, ASN1.NULL, new ByteString(<span class="literal">""</span>, HEX)));
	} <span class="reserved">else</span> <span class="reserved">if</span> (<span class="reserved">this</span>.signatureAlgorithm == Crypto.RSA_SHA256) {
		t.add(new ASN1(<span class="literal">"algorithm"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"1.2.840.113549.1.1.11"</span>, OID)));
		t.add(new ASN1(<span class="literal">"parameters"</span>, ASN1.NULL, new ByteString(<span class="literal">""</span>, HEX)));
	} <span class="reserved">else</span> <span class="reserved">if</span> (<span class="reserved">this</span>.signatureAlgorithm == Crypto.ECDSA_SHA256) {
		t.add(new ASN1(<span class="literal">"algorithm"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"ecdsa-with-SHA256"</span>, OID)));
		t.add(new ASN1(<span class="literal">"parameters"</span>, ASN1.NULL, new ByteString(<span class="literal">""</span>, HEX)));
	} <span class="reserved">else</span> {
		throw new GPError(<span class="literal">"CRLGenerator"</span>, GPError.INVALID_MECH, <span class="reserved">this</span>.signatureAlgorithm, <span class="literal">"Invalid algorithm"</span>);
	}
		
	<span class="reserved">return</span> t;
}

 

<span class="comment">/**
 * Gets revoked certificates
 *
 * <span class="attrib">@return</span> the list of revoked certificates
 * <span class="attrib">@type</span> ASN1
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.getRevokedCertificates = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"revokedCertificates"</span>, ASN1.SEQUENCE);
	<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.revokedCertificates.length; i++) {
		t.add(<span class="reserved">this</span>.revokedCertificates[i]);
	}
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Gets the CRL extension as TLV object
 *
 * <span class="attrib">@return</span> the CRL extensions
 * <span class="attrib">@type</span> ASN1
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.getExtensions = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"extensions"</span>, 0xA0);
	var s = new ASN1(<span class="literal">"extensions"</span>, ASN1.SEQUENCE);
	
	t.add(s);
	
	<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.extensions.length; i++) {
		s.add(<span class="reserved">this</span>.extensions[i]);
	}
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Gets the part of the CRL that will be signed
 *
 * <span class="attrib">@return</span> the TBSCertificate part
 * <span class="attrib">@type</span> ASN1
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.getTbsCertificateList = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"tbsCertList"</span>, ASN1.SEQUENCE);
	t.add(new ASN1(<span class="literal">"version"</span>, ASN1.INTEGER, new ByteString(<span class="literal">"01"</span>, HEX)));
	t.add(<span class="reserved">this</span>.getSignatureAlgorithm());
	t.add(<span class="reserved">this</span>.getIssuer());
	t.add(<span class="reserved">this</span>.getThisUpdate());
	<span class="reserved">if</span> (<span class="reserved">this</span>.nextUpdate != null) {
		t.add(<span class="reserved">this</span>.getNextUpdate());
	}
	<span class="reserved">if</span> (<span class="reserved">this</span>.revokedCertificates.length &gt; 0) {
		t.add(<span class="reserved">this</span>.getRevokedCertificates());
	}
	<span class="reserved">if</span> (<span class="reserved">this</span>.extensions.length &gt; 0) {
		t.add(<span class="reserved">this</span>.getExtensions());
	}
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Generates the certificate.
 *
 * <span class="attrib">@return</span> the generated certificate
 * <span class="attrib">@type</span> X509
 */</span>
CRLGenerator.<span class="reserved">prototype</span>.generateCRL = <span class="reserved">function</span>(privateKey) {
	var certlist = new ASN1(<span class="literal">"certificateList"</span>, ASN1.SEQUENCE);
	
	var tbs = <span class="reserved">this</span>.getTbsCertificateList();
	certlist.add(tbs);
	certlist.add(<span class="reserved">this</span>.getSignatureAlgorithm());
	
	var signature = <span class="reserved">this</span>.crypto.sign(privateKey, <span class="reserved">this</span>.signatureAlgorithm, tbs.getBytes());
	signature = (new ByteString(<span class="literal">"00"</span>, HEX)).concat(signature);

	var signatureValue = new ASN1(<span class="literal">"signatureValue"</span>, ASN1.BIT_STRING, signature);
	certlist.add(signatureValue);
	
	<span class="reserved">return</span> certlist;
}



<span class="reserved">function</span> CRLGeneratorTest() {

	var crypto = new Crypto();
	
	var caPrivateKey = new Key();
	caPrivateKey.setType(Key.PRIVATE);

	var caPublicKey = new Key();
	caPublicKey.setType(Key.PUBLIC);
	caPublicKey.setSize(1024);

	crypto.generateKeyPair(Crypto.RSA, caPublicKey, caPrivateKey);

<span class="comment">//	var caPrivKey = new Key("profiles/kp_rsa_private.xml");</span>

	var x = new CRLGenerator(crypto);

	x.reset();
	x.setSignatureAlgorithm(Crypto.RSA);
	var issuer = [{ C:<span class="literal">"UT"</span> },{ O:<span class="literal">"ACME Corporation"</span> },{ CN:<span class="literal">"Test-CA"</span> }];
	x.setIssuer(issuer);
	var now = new Date();
	x.setThisUpdate(now);
	var nextMonth = new Date();
	nextMonth.setMonth((now.getMonth() + 1) % 12);
	x.setNextUpdate(nextMonth);
	x.addAuthorityKeyIdentifierExtension(caPublicKey);
	x.addCRLNumberExtension(11);
	
	x.revokeCertificate(new ByteString(<span class="literal">"01"</span>, HEX));
	x.revokeCertificate(new ByteString(<span class="literal">"80"</span>, HEX), new Date());
	x.revokeCertificate(new ByteString(<span class="literal">"80"</span>, HEX), new Date(), CRLGenerator.keyCompromise);
	x.revokeCertificate(new ByteString(<span class="literal">"80"</span>, HEX), new Date(), CRLGenerator.superseded, new ASN1(<span class="literal">"crlExtensions"</span>, ASN1.SEQUENCE));
	
	var crl = x.generateCRL(caPrivateKey);
	
	var fn = GPSystem.mapFilename(<span class="literal">"crl.crl"</span>, GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, crl.getBytes());

	print(crl);
	
	var x = new CRLGenerator(crypto);
	x.reset();
	x.setSignatureAlgorithm(Crypto.RSA);
	var issuer = [{ C:<span class="literal">"UT"</span> },{ O:<span class="literal">"ACME Corporation"</span> },{ CN:<span class="literal">"Test-CA"</span> }];
	x.setIssuer(issuer);
	var now = new Date();
	x.setThisUpdate(now);
	var nextMonth = new Date();
	nextMonth.setMonth((now.getMonth() + 1) % 12);
	x.setNextUpdate(nextMonth);
	var crlnumber = x.loadCRLEntries(fn);
	assert(crlnumber == 11);
	x.addAuthorityKeyIdentifierExtension(caPublicKey);
	x.addCRLNumberExtension(crlnumber + 1);
	
	x.revokeCertificate(crypto.generateRandom(8), new Date(), CRLGenerator.keyCompromise);
	var crl = x.generateCRL(caPrivateKey);
<span class="comment">//	PKIXCommon.writeFileToDisk(fn, crl.getBytes());</span>
	
	print(crl);
}


</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="eccutils.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>eccutils.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'eccutils.js'<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="ECCUtils.html">ECCUtils</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/*
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Utility class for Elliptic Curve Cryptography
 */</span>


<span class="reserved">function</span> ECCUtils() {
}



<span class="comment">/**
 * Wrap a ECDSA signature in the format r || s into a TLV encoding as defined by RFC 3279
 *
 * <span class="attrib">@param</span> signature ByteString containing the concatenation of r and s as unsigned integer values
 * <span class="attrib">@returns</span> ASN.1 SEQUENCE objects containing two signed integer r and s
 */</span>
ECCUtils.wrapSignature = <span class="reserved">function</span>(signature) {
	var len = signature.length / 2;

	<span class="comment">// r and s are unsigned big integer. We might need to pad a zero for ASN.1 INTEGER which is signed</span>
	var r = signature.bytes(0, len);
	<span class="reserved">if</span> (r.byteAt(0) &gt;= 0x80) {
		r = ByteString.valueOf(0, 1).concat(r);
	}

	var s = signature.bytes(len, len);
	<span class="reserved">if</span> (s.byteAt(0) &gt;= 0x80) {
		s = ByteString.valueOf(0, 1).concat(s);
	}

	var t = new ASN1(ASN1.SEQUENCE);
	t.add(new ASN1(ASN1.INTEGER, r));
	t.add(new ASN1(ASN1.INTEGER, s));

	<span class="reserved">return</span> t.getBytes();
}



<span class="comment">/**
 * Integer to octet string conversion
 */</span>
ECCUtils.I2O = <span class="reserved">function</span>(value, length) {
	<span class="reserved">if</span> (value.length &gt; length) {
		value = value.right(length);
	}
	<span class="reserved">while</span> (value.length &lt; length) {
		value = ECCUtils.PAD.left((length - value.length - 1 &amp; 15) + 1).concat(value);
	}
	<span class="reserved">return</span> value;
}
ECCUtils.PAD = new ByteString(<span class="literal">"00000000000000000000000000000000"</span>, HEX);



<span class="comment">/**
 * Unwrap a ECDSA signature from the TLV encoding according to RFC3279 into the concatenation
 * of the unsigned integer r and s
 *
 * <span class="attrib">@param</span> signature TLV encoded signature
 * <span class="attrib">@returns</span> concatenation of r and s
 */</span>
ECCUtils.unwrapSignature = <span class="reserved">function</span>(signature, keylen) {
	var t = new ASN1(signature);
	<span class="reserved">if</span> (typeof(keylen) != <span class="literal">"undefined"</span>) {
		var r = ECCUtils.I2O(t.get(0).value, keylen);
		var s = ECCUtils.I2O(t.get(1).value, keylen);
	} <span class="reserved">else</span> {
		var r = t.get(0).value;
		<span class="reserved">if</span> (r.byteAt(0) == 00)
			r = r.bytes(1);

		var s = t.get(1).value;
		<span class="reserved">if</span> (s.byteAt(0) == 00)
			s = s.bytes(1);
	}

	<span class="reserved">return</span> r.concat(s);
}



<span class="comment">/**
 * Decode domain parameter from ECParameters
 *
 * &lt;pre&gt;
 *	ECParameters ::= SEQUENCE {
 *		version INTEGER{ecpVer1(1)} (ecpVer1),
 *		fieldID FieldID,
 *		curve Curve,
 *		base ECPoint,
 *		order INTEGER,
 *		cofactor INTEGER OPTIONAL,
 *		...
 *	}
 *
 *	Curve ::= SEQUENCE {
 *		a FieldElement,
 *		b FieldElement,
 *		seed BIT STRING OPTIONAL
 *	}
 *
 *	FieldElement ::= OCTET STRING
 *	ECPoint ::= OCTET STRING
 *	FieldID ::= SEQUENCE {
 *		fieldType OBJECT IDENTIFIER,
 *		parameters ANY DEFINED BY fieldType
 *	}
 *	prime-field OBJECT IDENTIFIER ::= { ansi-x9-62 fieldType(1) 1 }
 *	Prime-p ::= INTEGER
 * &lt;/pre&gt;
 */</span>
ECCUtils.decodeECParameters = <span class="reserved">function</span>(tlv) {
	assert(tlv.tag == ASN1.SEQUENCE);

	var key = new Key();
	key.setType(Key.PUBLIC);

	<span class="comment">// version</span>
	assert(tlv.get(0).value.toSigned() == 1);

	<span class="comment">// fieldID</span>
	assert(tlv.get(1).tag == ASN1.SEQUENCE);
	assert(tlv.get(1).get(1).tag = ASN1.INTEGER);

	var prime = tlv.get(1).get(1).value;
	<span class="reserved">if</span> (prime.byteAt(0) == 0) {		<span class="comment">// Strip leading zero byte</span>
		prime = prime.bytes(1);
	}
	key.setComponent(Key.ECC_P, prime);

	<span class="comment">// curve</span>
	assert(tlv.get(2).tag == ASN1.SEQUENCE);
	assert(tlv.get(2).get(0).tag == ASN1.OCTET_STRING);

	var coeff_A = tlv.get(2).get(0);
	key.setComponent(Key.ECC_A, coeff_A.value);

	var coeff_B = tlv.get(2).get(1);
	key.setComponent(Key.ECC_B, coeff_B.value);

	<span class="comment">// base</span>
	assert(tlv.get(3).tag == ASN1.OCTET_STRING);
	var pkbin = tlv.get(3).value;
	assert(pkbin.byteAt(0) == 4);
	pkbin = pkbin.bytes(1);

	key.setComponent(Key.ECC_GX, pkbin.left(pkbin.length &gt;&gt; 1));
	key.setComponent(Key.ECC_GY, pkbin.right(pkbin.length &gt;&gt; 1));

	<span class="comment">// order</span>
	assert(tlv.get(4).tag == ASN1.INTEGER);
	var groupOrder = tlv.get(4).value;
	<span class="reserved">if</span> (groupOrder.byteAt(0) == 0) {		<span class="comment">// Strip leading zero byte</span>
		groupOrder = groupOrder.bytes(1);
	}
	key.setComponent(Key.ECC_N, groupOrder);

	<span class="comment">// cofactor</span>
	<span class="reserved">if</span> (tlv.elements &gt; 5) {
		assert(tlv.get(5).tag == ASN1.INTEGER);
		var cofactor = tlv.get(0).value;
		<span class="reserved">if</span> (cofactor.byteAt(0) == 0) {		<span class="comment">// Strip leading zero byte</span>
			cofactor = cofactor.bytes(1);
		}
		key.setComponent(Key.ECC_H, cofactor);
	}

	<span class="reserved">return</span> key;
}



ECCUtils.ECParametersToString = <span class="reserved">function</span>(key) {
	var str = <span class="literal">"EC Parameter:\n"</span>;

	str += <span class="literal">"  prime "</span> + key.getComponent(Key.ECC_P) + <span class="literal">"\n"</span>;
	str += <span class="literal">"  curve a "</span> + key.getComponent(Key.ECC_A) + <span class="literal">"\n"</span>;
	str += <span class="literal">"  curve b "</span> + key.getComponent(Key.ECC_B) + <span class="literal">"\n"</span>;
	str += <span class="literal">"  generator x "</span> + key.getComponent(Key.ECC_GX) + <span class="literal">"\n"</span>;
	str += <span class="literal">"  generator y "</span> + key.getComponent(Key.ECC_GY) + <span class="literal">"\n"</span>;
	str += <span class="literal">"  order "</span> + key.getComponent(Key.ECC_N) + <span class="literal">"\n"</span>;
	str += <span class="literal">"  cofactor "</span> + key.getComponent(Key.ECC_H) + <span class="literal">"\n"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">// List of object identifier used in Key.setComponent(ECC_CURVE_OID)</span>

<span class="comment">// Fp curves defined by ANSI X6.92</span>
ECCUtils.prime192v1 = new ByteString(<span class="literal">"1.2.840.10045.3.1.1"</span>, OID);
ECCUtils.prime192v2 = new ByteString(<span class="literal">"1.2.840.10045.3.1.2"</span>, OID);
ECCUtils.prime192v3 = new ByteString(<span class="literal">"1.2.840.10045.3.1.3"</span>, OID);
ECCUtils.prime239v1 = new ByteString(<span class="literal">"1.2.840.10045.3.1.4"</span>, OID);
ECCUtils.prime239v2 = new ByteString(<span class="literal">"1.2.840.10045.3.1.5"</span>, OID);
ECCUtils.prime239v3 = new ByteString(<span class="literal">"1.2.840.10045.3.1.6"</span>, OID);
ECCUtils.prime256v1 = new ByteString(<span class="literal">"1.2.840.10045.3.1.7"</span>, OID);

<span class="comment">// F2m curves defined by ANSI X6.92</span>
ECCUtils.c2pnb163v1 = new ByteString(<span class="literal">"1.2.840.10045.3.0.1"</span>, OID);
ECCUtils.c2pnb163v2 = new ByteString(<span class="literal">"1.2.840.10045.3.0.2"</span>, OID);
ECCUtils.c2pnb163v3 = new ByteString(<span class="literal">"1.2.840.10045.3.0.3"</span>, OID);
ECCUtils.c2pnb176w1 = new ByteString(<span class="literal">"1.2.840.10045.3.0.4"</span>, OID);
ECCUtils.c2tnb191v1 = new ByteString(<span class="literal">"1.2.840.10045.3.0.5"</span>, OID);
ECCUtils.c2tnb191v2 = new ByteString(<span class="literal">"1.2.840.10045.3.0.6"</span>, OID);
ECCUtils.c2tnb191v3 = new ByteString(<span class="literal">"1.2.840.10045.3.0.7"</span>, OID);
ECCUtils.c2pnb208w1 = new ByteString(<span class="literal">"1.2.840.10045.3.0.10"</span>, OID);
ECCUtils.c2tnb239v1 = new ByteString(<span class="literal">"1.2.840.10045.3.0.11"</span>, OID);
ECCUtils.c2tnb239v2 = new ByteString(<span class="literal">"1.2.840.10045.3.0.12"</span>, OID);
ECCUtils.c2tnb239v3 = new ByteString(<span class="literal">"1.2.840.10045.3.0.13"</span>, OID);
ECCUtils.c2pnb272w1 = new ByteString(<span class="literal">"1.2.840.10045.3.0.16"</span>, OID);
ECCUtils.c2pnb304w1 = new ByteString(<span class="literal">"1.2.840.10045.3.0.17"</span>, OID);
ECCUtils.c2tnb359v1 = new ByteString(<span class="literal">"1.2.840.10045.3.0.18"</span>, OID);
ECCUtils.c2pnb368w1 = new ByteString(<span class="literal">"1.2.840.10045.3.0.19"</span>, OID);
ECCUtils.c2tnb431r1 = new ByteString(<span class="literal">"1.2.840.10045.3.0.20"</span>, OID);

<span class="comment">// Fp curves defined by SECG</span>
ECCUtils.secp224r1 = new ByteString(<span class="literal">"1.3.132.0.33"</span>, OID);
ECCUtils.secp256r1 = ECCUtils.prime256v1;
ECCUtils.secp384r1 = new ByteString(<span class="literal">"1.3.132.0.34"</span>, OID);
ECCUtils.secp521r1 = new ByteString(<span class="literal">"1.3.132.0.35"</span>, OID);

<span class="comment">// F2m curves defined by SECG</span>
ECCUtils.sect163r2 = new ByteString(<span class="literal">"1.3.132.0.15"</span>, OID);
ECCUtils.sect233r1 = new ByteString(<span class="literal">"1.3.132.0.27"</span>, OID);
ECCUtils.sect283r1 = new ByteString(<span class="literal">"1.3.132.0.17"</span>, OID);
ECCUtils.sect409r1 = new ByteString(<span class="literal">"1.3.132.0.37"</span>, OID);
ECCUtils.sect571r1 = new ByteString(<span class="literal">"1.3.132.0.39"</span>, OID);

ECCUtils.brainpoolP160r1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.1"</span>, OID);
ECCUtils.brainpoolP160t1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.2"</span>, OID);
ECCUtils.brainpoolP192r1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.3"</span>, OID);
ECCUtils.brainpoolP192t1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.4"</span>, OID);
ECCUtils.brainpoolP224r1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.5"</span>, OID);
ECCUtils.brainpoolP224t1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.6"</span>, OID);
ECCUtils.brainpoolP256r1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.7"</span>, OID);
ECCUtils.brainpoolP256t1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.8"</span>, OID);
ECCUtils.brainpoolP320r1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.9"</span>, OID);
ECCUtils.brainpoolP320t1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.10"</span>, OID);
ECCUtils.brainpoolP384r1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.11"</span>, OID);
ECCUtils.brainpoolP384t1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.12"</span>, OID);
ECCUtils.brainpoolP512r1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.13"</span>, OID);
ECCUtils.brainpoolP512t1 = new ByteString(<span class="literal">"1.3.36.3.3.2.8.1.1.14"</span>, OID);

<span class="comment">/* Test all curve parameter
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime192v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime192v2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime192v3);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime239v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime239v2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime239v3);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.prime256v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb163v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb163v2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb163v3);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb176w1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb191v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb191v2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb191v3);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb208w1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb239v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb239v2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb239v3);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb272w1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb304w1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb359v1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2pnb368w1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.c2tnb431r1);

var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.secp224r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.secp256r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.secp384r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.secp521r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.sect163r2);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.sect233r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.sect283r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.sect409r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.sect571r1);

var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP160r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP160t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP192r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP192t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP224r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP224t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP256r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP256t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP320r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP320t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP384r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP384t1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP512r1);
var k = new Key();
k.setComponent(Key.ECC_CURVE_OID, ECCUtils.brainpoolP512t1);
*/</span>
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="encrypt-file.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>encrypt-file.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		Encrypt a file using hybrid encryption mode<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="EncryptFile.html">EncryptFile</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * <span class="attrib">@fileoverview</span> Encrypt a file using hybrid encryption mode
 */</span>

var File = require(<span class="literal">"scsh/file/File"</span>).File;
var FileEncryptor = require(<span class="literal">"scsh/file/FileEncryptor"</span>).FileEncryptor;
var PublicKeyFile = require(<span class="literal">"scsh/file/PublicKeyFile"</span>).PublicKeyFile;


<span class="reserved">function</span> EncryptFile() {

}



EncryptFile.<span class="reserved">prototype</span>.loadPublicKey = <span class="reserved">function</span>(fname) {
	<span class="reserved">this</span>.pkf = new PublicKeyFile(fname);
}



EncryptFile.<span class="reserved">prototype</span>.selectPublicKey = <span class="reserved">function</span>() {
	var fname = typeof(<span class="reserved">this</span>.pkFileName) != <span class="literal">"undefined"</span> ? <span class="reserved">this</span>.pkFileName : <span class="literal">""</span>;
	fname = Dialog.prompt(<span class="literal">"Select recipient public key"</span>, fname, null, <span class="literal">"*.pka"</span>);
	<span class="reserved">if</span> (!fname) {
		throw new Error(<span class="literal">"User abort"</span>);
	}
	<span class="reserved">this</span>.loadPublicKey(fname);
	<span class="reserved">this</span>.pkFileName = fname;
}



EncryptFile.<span class="reserved">prototype</span>.selectFileToEncrypt = <span class="reserved">function</span>() {
	var fname = typeof(<span class="reserved">this</span>.plainFileName) != <span class="literal">"undefined"</span> ? <span class="reserved">this</span>.plainFileName : <span class="literal">""</span>;
	fname = Dialog.prompt(<span class="literal">"Select file to encrypt"</span>, fname, null, <span class="literal">""</span>);
	<span class="reserved">if</span> (!fname) {
		throw new Error(<span class="literal">"User abort"</span>);
	}

	<span class="reserved">this</span>.plainFileName = fname;

	fname = Dialog.prompt(<span class="literal">"Save encrypted file as"</span>, fname + <span class="literal">".enc"</span>, null, <span class="literal">""</span>);
	<span class="reserved">if</span> (!fname) {
		throw new Error(<span class="literal">"User abort"</span>);
	}

	var f = new File(fname);
	<span class="reserved">if</span> (f.exists()) {
		<span class="reserved">if</span> (Dialog.prompt(<span class="literal">"File does already exist. Overwrite ?"</span>) == null) {
			throw new Error(<span class="literal">"User abort"</span>);
		}
	}

	<span class="reserved">this</span>.encFileName = fname;
}



EncryptFile.<span class="reserved">prototype</span>.encrypt = <span class="reserved">function</span>() {
	var fenc = new FileEncryptor(undefined, FileEncryptor.HYBRID);
	fenc.deriveKey(<span class="reserved">this</span>.pkf.getChain()[0]);

	var f = new File(<span class="reserved">this</span>.plainFileName);
	var bin = f.readAllAsBinary();
	f.close();

	bin = fenc.encrypt(bin);

	var f = new File(<span class="reserved">this</span>.encFileName);
	f.writeAll(bin);
	f.close();

	print(<span class="literal">"Encryption complete."</span>);
}


<span class="reserved">if</span> (typeof(e) == <span class="literal">"undefined"</span>) {
	var e = new EncryptFile();
}

e.selectPublicKey();
e.selectFileToEncrypt();
e.encrypt();




</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="explore.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>explore.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'explore.js'<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="OutlineCard.html">OutlineCard</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/*
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  Generic smart card explorer
 */</span>

load(<span class="literal">"OutlineCore.js"</span>);

<span class="reserved">function</span> OutlineCard() {

        <span class="comment">// Create card object</span>
        var card = new Card(_scsh3.reader);
        <span class="reserved">this</span>.atr = card.reset(Card.RESET_COLD);

        <span class="reserved">this</span>.card = card;

        <span class="comment">// Create OutlineNode object and register in object</span>
        var view = new OutlineNode(<span class="literal">"Card"</span>);
        view.setUserObject(<span class="reserved">this</span>);
        <span class="reserved">this</span>.view = view;
}



<span class="comment">//</span>
<span class="comment">// Expand clicked on node</span>
<span class="comment">//</span>
OutlineCard.<span class="reserved">prototype</span>.expandListener = <span class="reserved">function</span>() {
        <span class="reserved">if</span> (<span class="reserved">this</span>.expanded)
                <span class="reserved">return</span>;
                
        var view = <span class="reserved">this</span>.view;

	<span class="comment">//</span>
	<span class="comment">// Display ATR</span>
	<span class="comment">//</span>
	var atrnode = new OutlineATR(<span class="reserved">this</span>.atr);
	view.insert(atrnode.view);
        <span class="reserved">this</span>.expanded = true;

        <span class="comment">//</span>
        <span class="comment">// Explore files in MF</span>
        <span class="comment">//</span>
	try	{
		var mf = new CardFile(<span class="reserved">this</span>.card, <span class="literal">":3F00"</span>);
				
	        var struct = GPXML.parse(<span class="literal">"genericmf.xml"</span>);
	        <span class="reserved">this</span>.mf = new OutlineDF(<span class="reserved">this</span>.card, <span class="literal">":3F00"</span>, <span class="literal">"MF"</span>, struct);
	        view.insert(<span class="reserved">this</span>.mf.view);
	}
	catch(e) {
		print(<span class="literal">"Card does not seem to have a compatible MF\n"</span> + e);
	}

        <span class="comment">//</span>
        <span class="comment">// Obtain list of applications from EF_DIR</span>
        <span class="comment">//</span>
        var isTransparent = true;
        try	{
		var efdir = new CardFile(<span class="reserved">this</span>.card, <span class="literal">":2F00"</span>);
		var fci = efdir.getFCPBytes();
		<span class="reserved">if</span> (fci) {
			isTransparent = efdir.isTransparent();
		} <span class="reserved">else</span> {
			isTransparent = true;
		}
        }
        catch(e) {
                print(<span class="literal">"Card does not seem to have a compatible EF_DIR\n"</span> + e);
                <span class="reserved">return</span>;
        }
                
        <span class="reserved">for</span> (var rec = 1; rec &lt; 255; rec++) {
                var record;
                try     {
	                <span class="reserved">if</span> (isTransparent) {
	                	record = efdir.readBinary();
	                } <span class="reserved">else</span> {
	                        record = efdir.readRecord(rec);
	                }
                }
                catch(e) {
                        print(e);
                        break;
                }

                var tlv = new ASN1(record);
                
                var label = null;
                var aid = null;
                        
                <span class="reserved">for</span> (var i = 0; i &lt; tlv.elements; i++) {
                        var t = tlv.get(i);
                        switch(t.tag) {
                        case 0x50:
                                label = t.value.toString(UTF8);
                                break;
                        case 0x4F:
                                aid = t.value;
                                break;
                        }
                }

                <span class="reserved">if</span> (label &amp;&amp; aid) {
                        var applentry;

                       	<span class="reserved">if</span> (!label) {
                       		<span class="reserved">if</span> (!aid) {
                       			label = <span class="literal">"Invalid entry in EF.DIR"</span>;
                       		} <span class="reserved">else</span> {
                       			label = aid.toString(HEX);
                       		}
                       	}
                        	
			applentry = new OutlineNode(label);
			applentry.insert(tlv);
			view.insert(applentry);
                }
                
                <span class="reserved">if</span> (efdir.isTransparent())
                	break;
        }
}





<span class="comment">//</span>
<span class="comment">// Outline root node erzeugen</span>
<span class="comment">// </span>
var cardoutline = new OutlineCard();

cardoutline.view.show();
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="file.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>file.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		General File I/O Class<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="File.html">File</a></b></td>
    <td>Class implementing basic support for files
 </td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * <span class="attrib">@fileoverview</span> General File I/O Class
 */</span>



<span class="comment">/**
 * Create a reference to a file system object (file or directory)
 *
 * <span class="attrib">@class</span> Class implementing basic support for files
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {String} name relative or absolute file path
 */</span>
<span class="reserved">function</span> File(name) {
	<span class="reserved">this</span>.name = name;
}



<span class="comment">/**
 * Return absolute path
 *
 * <span class="attrib">@param</span>{Number} mode one of GPSystem.AUTO, GPSystem.CWD, GPSystem.USR or GPSystem.SYS. See GPSystem.mapFilename() for details
 * <span class="attrib">@type</span> String
 * <span class="attrib">@return</span> the absolute path
 */</span>
File.<span class="reserved">prototype</span>.getAbsolutePath = <span class="reserved">function</span>(mode) {
	<span class="reserved">if</span> (typeof(mode) == <span class="literal">"undefined"</span>) {
		mode = GPSystem.CWD;
	}
	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.abspath) == <span class="literal">"undefined"</span>) {
		<span class="reserved">this</span>.abspath = GPSystem.mapFilename(<span class="reserved">this</span>.name, mode);
	}
	<span class="reserved">return</span> <span class="reserved">this</span>.abspath;
}



<span class="comment">/**
 * <span class="attrib">@private</span>
 * Return a java.io.File object
 */</span>
File.<span class="reserved">prototype</span>.getFile = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.file) == <span class="literal">"undefined"</span>) {
		<span class="reserved">this</span>.file = new java.io.File(<span class="reserved">this</span>.getAbsolutePath(GPSystem.AUTO));
	}
	<span class="reserved">return</span> <span class="reserved">this</span>.file; 
}



<span class="comment">/**
 * Close streams associated with file
 */</span>
File.<span class="reserved">prototype</span>.close = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.os) != <span class="literal">"undefined"</span>) {
		<span class="reserved">this</span>.os.close();
		delete(<span class="reserved">this</span>.os);
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.is) != <span class="literal">"undefined"</span>) {
		<span class="reserved">this</span>.is.close();
		delete(<span class="reserved">this</span>.is);
	}
}



<span class="comment">/**
 * <span class="attrib">@private</span>
 * Return a java.io.FileInputStream
 */</span>
File.<span class="reserved">prototype</span>.getInputStream = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.is) == <span class="literal">"undefined"</span>) {
		<span class="reserved">this</span>.is = new java.io.FileInputStream(<span class="reserved">this</span>.getAbsolutePath(GPSystem.AUTO));
	}
	<span class="reserved">return</span> <span class="reserved">this</span>.is; 
}



<span class="comment">/**
 * <span class="attrib">@private</span>
 * Return a java.io.FileOutputStream
 */</span>
File.<span class="reserved">prototype</span>.getOutputStream = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.os) == <span class="literal">"undefined"</span>) {
		<span class="reserved">this</span>.os = new java.io.FileOutputStream(<span class="reserved">this</span>.getAbsolutePath(GPSystem.CWD));
	}
	<span class="reserved">return</span> <span class="reserved">this</span>.os; 
}



<span class="comment">/**
 * Read complete file into ByteString object
 *
 * <span class="attrib">@type</span> ByteString
 * <span class="attrib">@return</span> the binary content
 */</span>
File.<span class="reserved">prototype</span>.readAllAsBinary = <span class="reserved">function</span>() {
	var is = <span class="reserved">this</span>.getInputStream();

	<span class="comment">// Determine file size</span>
	var flen = is.available();

	<span class="comment">// Allocate native byte array</span>
	var bs = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, flen);

	<span class="comment">// Read into byte array</span>
	var len = is.read(bs);

	<span class="reserved">this</span>.close();

	<span class="comment">// Allocate JavaScript ByteBuffer from native/wrapped byte array</span>
	var bb = new ByteBuffer(bs);

	<span class="comment">// Convert to JavaScript ByteString</span>
	var data = bb.toByteString();

	<span class="reserved">return</span> data;
}



<span class="comment">/**
 * Read complete file into String object
 *
 * <span class="attrib">@type</span> String
 * <span class="attrib">@return</span> the text content
 */</span>
File.<span class="reserved">prototype</span>.readAllAsString = <span class="reserved">function</span>(encoding) {

	<span class="reserved">if</span> (typeof(encoding) == <span class="literal">"undefined"</span>) {
		encoding = UTF8;
	}

	<span class="reserved">return</span> <span class="reserved">this</span>.readAllAsBinary().toString(encoding);
}



<span class="comment">/**
 * Write the object to file
 *
 * <span class="attrib">@param</span>{Object} obj to write to file (Using toString() for any other than String and ByteString)
 * <span class="attrib">@param</span>{Number} one of UTF8 or ASCII (Default is UTF8)
 */</span>
File.<span class="reserved">prototype</span>.writeAll = <span class="reserved">function</span>(obj, encoding) {
	<span class="reserved">if</span> ((typeof(obj) != <span class="literal">"string"</span>) &amp;&amp; !(obj instanceof ByteString)) {
		obj = obj.toString();
	}
	<span class="reserved">if</span> (typeof(obj) == <span class="literal">"string"</span>) {
		<span class="reserved">if</span> (typeof(encoding) == <span class="literal">"undefined"</span>) {
			encoding = UTF8;
		}
		obj = new ByteString(obj, encoding);
	}

	var os = <span class="reserved">this</span>.getOutputStream();
	os.write(obj);
	<span class="reserved">this</span>.close();
}



<span class="comment">/**
 * Return list of files contained in the directory referenced by the File object
 *
 * <span class="attrib">@type</span> String[]
 * <span class="attrib">@return</span> the list of file names
 */</span>
File.<span class="reserved">prototype</span>.list = <span class="reserved">function</span>() {
	var list = <span class="reserved">this</span>.getFile().list();
	var jslist = [];
	
	<span class="reserved">for</span> (var i = 0; i &lt; list.length; i++) {
		jslist.push(new String(list[i]));
	}
	<span class="reserved">return</span> jslist;
}



<span class="comment">/**
 * Return the parent file of this file object
 *
 * <span class="attrib">@type</span> File
 * <span class="attrib">@return</span> the parent file object or null
 */</span>
File.<span class="reserved">prototype</span>.getParentFile = <span class="reserved">function</span>() {
	var file = <span class="reserved">this</span>.getFile();
	var parent = file.getParent();
	<span class="reserved">if</span> (parent == null) {
		<span class="reserved">return</span> null;
	}
	<span class="reserved">return</span> new File(parent);
}



File.test = <span class="reserved">function</span>() {
	var file = new File(<span class="literal">"test.bin"</span>);
	var b = new ByteString(<span class="literal">"Hello World"</span>, ASCII);
	file.writeAll(b);
	
	var file = new File(<span class="literal">"test.bin"</span>);
	var c = file.readAllAsBinary();
	print(c.toString(ASCII));
	
	var file = new File(<span class="literal">"test.txt"</span>);
	var s = <span class="literal">"Hello World"</span>;
	file.writeAll(s);
	
	var file = new File(<span class="literal">"test.txt"</span>);
	var c = file.readAllAsString();
	print(c);
	
	var dir = file.getParentFile();
	print(dir.getAbsolutePath());
	print(dir.list());
	
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="p15classes.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>p15classes.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		Classes to parse PKCS#15 data structures<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="AlgorithmInfo.html">AlgorithmInfo</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15.html">PKCS15</a></b></td>
    <td><p>This class provides for direct access to a PKCS#15 data structure on a card.</p>
 <p>The calling application will typically use:</p>
 <pre>
 var card = new Card(_scsh3.reader);
 var p15 = new PKCS15(card);
 var appllist = p15.readApplicationDirectory();
 var aid;
 for (var i in appllist) {
   print(i);
   aid = i;
 }
 var at = appllist[aid];
 p15.readObjectListForApplication(at);
 for (var i = 0; i < at.objlist.length; i++) {
   print(at.objlist[i]);
 }
 </pre>
 </td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_ApplicationTemplate.html">PKCS15_ApplicationTemplate</a></b></td>
    <td><p>This class provides for access to an application template.</p>
 </td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_AuthenticationObject.html">PKCS15_AuthenticationObject</a></b></td>
    <td><p>This class adds authentication object attributes to the common authentication object class.</p>
 <p>The class supports password objects.</p>
 </td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_Certificate.html">PKCS15_Certificate</a></b></td>
    <td><p>This class adds X.509 certificate attributes to the common certificate attribute class.</p>
 <p>The class decodes the following ASN.1 syntax for X.509 certificates:</p>
 <pre>
 X509CertificateAttributes ::= SEQUENCE {
 value ObjectValue { Certificate },
 subject Name OPTIONAL,
 issuer [0] Name OPTIONAL,
 serialNumber CertificateSerialNumber OPTIONAL,
 ...</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_CIAInfo.html">PKCS15_CIAInfo</a></b></td>
    <td><p>Class to decode CIAInfo objects.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CIAInfo ::= SEQUENCE {
		version INTEGER {v1(0),v2(1)} (v1|v2,...),
		serialNumber OCTET STRING OPTIONAL,
		manufacturerID Label OPTIONAL,
		label [0] Label OPTIONAL,
		cardflags CardFlags,
		seInfo SEQUENCE OF SecurityEnvironmentInfo OPTIONAL,
		recordInfo [1] RecordInfo OPTIONAL,
		supportedAlgorithms [2] SEQUENCE OF AlgorithmInfo OPTIONAL,
		issuerId [3] Label OPTIONAL,
		holderId [4] Label OPTIONAL,
		lastUpdate [5] LastUpdate OPTIONAL,
		preferredLanguage PrintableString OPTIONAL, -- In accordance with IETF RFC 1766
		profileIndication [6] SEQUENCE OF ProfileIndication OPTIONAL,
		...</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_CIO.html">PKCS15_CIO</a></b></td>
    <td><p>This is the base class for all cryptographic objects in a PKCS#15 data structure.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonObjectAttributes ::= SEQUENCE {
		label Label OPTIONAL,
		flags CommonObjectFlags OPTIONAL,
		authId Identifier OPTIONAL,
		userConsent INTEGER (1..cia-ub-userConsent) OPTIONAL,
		accessControlRules SEQUENCE SIZE (1..MAX) OF AccessControlRule OPTIONAL,
		...</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_CIODDO.html">PKCS15_CIODDO</a></b></td>
    <td><p>Class to decode CIO DDO objects.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CIODDO ::= SEQUENCE {
 		providerId OBJECT IDENTIFIER OPTIONAL,
 		odfPath Path OPTIONAL,
		ciaInfoPath [0] Path OPTIONAL,
		aid [APPLICATION 15] OCTET STRING (SIZE(1..16)),
		(CONSTRAINED BY {-- Must be an AID in accordance with ISO/IEC 7816-4--})
		OPTIONAL,
		...</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_CommonAuthenticationObjectAttributes.html">PKCS15_CommonAuthenticationObjectAttributes</a></b></td>
    <td><p>This class adds common authentication object attributes to the base CIO class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonAuthenticationObjectAttributes ::= SEQUENCE {
    authId Identifier OPTIONAL,
    authReference Reference OPTIONAL,
    seIdentifier [0] Reference OPTIONAL,
    ...</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_CommonCertificateAttributes.html">PKCS15_CommonCertificateAttributes</a></b></td>
    <td><p>This class adds common certificate attributes to the base CIO class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonCertificateAttributes ::= SEQUENCE {
 iD Identifier,
 authority BOOLEAN DEFAULT FALSE,
 identifier CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 certHash [0] CertHash OPTIONAL,
 trustedUsage [1] Usage OPTIONAL,
 identifiers [2] SEQUENCE OF CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 validity [4] Validity OPTIONAL,
 ...</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_CommonDataContainerObjectAttributes.html">PKCS15_CommonDataContainerObjectAttributes</a></b></td>
    <td><p>This class adds common data container attributes to the base CIO class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonDataContainerObjectAttributes ::= SEQUENCE {
 		applicationName Label OPTIONAL,
 		applicationOID OBJECT IDENTIFIER OPTIONAL,
 		iD Identifier OPTIONAL,
 		...</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_CommonKeyAttributes.html">PKCS15_CommonKeyAttributes</a></b></td>
    <td><p>This class adds common key attributes to the base CIO class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonKeyAttributes ::= SEQUENCE {
		iD Identifier,
		usage KeyUsageFlags,
		native BOOLEAN DEFAULT TRUE,
		accessFlags KeyAccessFlags OPTIONAL,
		keyReference KeyReference OPTIONAL,
		startDate GeneralizedTime OPTIONAL,
		endDate [0] GeneralizedTime OPTIONAL,
		algReference [1] SEQUENCE OF Reference OPTIONAL,
		...</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_CommonPrivateKeyAttributes.html">PKCS15_CommonPrivateKeyAttributes</a></b></td>
    <td><p>This class adds common private key attributes to the common key attribute class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonPrivateKeyAttributes ::= SEQUENCE {
 name Name OPTIONAL,
 keyIdentifiers [0] SEQUENCE OF CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 generalName [1] GeneralNames OPTIONAL,
 ...</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_CommonSecretKeyAttributes.html">PKCS15_CommonSecretKeyAttributes</a></b></td>
    <td><p>This class adds common secret key attributes to the common key attribute class.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 CommonSecretKeyAttributes ::= SEQUENCE {
   keyLen INTEGER OPTIONAL, -- keylength (in bits)
   -- For future extensions
  }
 </pre>
 </td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_DataContainerObject.html">PKCS15_DataContainerObject</a></b></td>
    <td><p>This class adds data container objects to the common data container object attributes class.</p>
 <p>The class decodes the following ASN.1 syntax for opaque data objects with indirect path reference:</p>
 <pre>
 OpaqueDOAttributes ::= ObjectValue {CIO-OPAQUE.&Type}

</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_PasswordAuthenticationObject.html">PKCS15_PasswordAuthenticationObject</a></b></td>
    <td><p>This class supports password authentication objects.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 PasswordAttributes ::= SEQUENCE {
	pwdFlags PasswordFlags,
	pwdType PasswordType,
	minLength INTEGER (cia-lb-minPasswordLength..cia-ub-minPasswordLength),
	storedLength INTEGER (0..cia-ub-storedPasswordLength),
	maxLength INTEGER OPTIONAL,
	pwdReference [0] Reference DEFAULT 0,
	padChar OCTET STRING (SIZE(1)) OPTIONAL,
	lastPasswordChange GeneralizedTime OPTIONAL,
	path Path OPTIONAL,
	...</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_Path.html">PKCS15_Path</a></b></td>
    <td><p>This class provides for access to PKCS#15 structures.</p>
 <p>The class decodes the following ASN.1 syntax:</p>
 <pre>
 Path ::= SEQUENCE {
 		efidOrPath OCTET STRING,
		index INTEGER (0..cia-ub-index) OPTIONAL,
		length [0] INTEGER (0..cia-ub-index) OPTIONAL
	}( WITH COMPONENTS {..., index PRESENT, length PRESENT}|
 	   WITH COMPONENTS {..., index ABSENT, length ABSENT})
 </pre>
 </td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_PrivateKey.html">PKCS15_PrivateKey</a></b></td>
    <td><p>This class adds private key attributes to the common private key attribute class.</p>
 <p>The class supports RSA and ECC keys.</p>
 <p>RSA keys are decoded from the following ASN.1 structure:</p>
 <pre>
 PrivateRSAKeyAttributes ::= SEQUENCE {
 value Path,
 modulusLength INTEGER, -- modulus length in bits, e.g.</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS15_SecretKey.html">PKCS15_SecretKey</a></b></td>
    <td><p>This class adds secret key attributes to the common secret key attribute class.</p>
 </td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

	<a name="method_summary"><!-- --></a>
	<table border="1" cellpadding="3" cellspacing="0" width="100%">
		<tr bgcolor="#CCCCFF" class="TableHeadingColor">
			<td colspan=2>
				<font size="+2">
					<b>Method Summary</b>
				</font>
			</td>
		</tr>
	
		
		   <tr bgcolor="white" class="TableRowColor">
		      <td align="right" valign="top" width="1%">
			 <font size="-1">
			    <code>static&nbsp;Number</code>
			 </font>
		      </td>
		      <td>
			 <code>
			    <b>
			       <a href="GLOBALS.html#!s!IntFromBitString">IntFromBitString</a></b>(b)
			 </code>
			 <br>
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			 Return the BIT STRING as integer value
		      </td>
		   </tr>
		
	
	</table>
    <p>

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  <span class="attrib">@fileoverview</span>
 *  Classes to parse PKCS#15 data structures
 */</span>



<span class="comment">/**
 * Return the BIT STRING as integer value
 *
 * <span class="attrib">@param</span> {ByteString} the ASN.1 BIT STRING to convert
 * <span class="attrib">@return</span> the converted integer
 * <span class="attrib">@type</span> Number
 */</span>
<span class="reserved">function</span> IntFromBitString(b) {
	assert(b.length &lt; 5);
	var bits = b.bytes(1).toUnsigned();
	<span class="reserved">return</span> bits &lt;&lt; ((4 - b.length) &lt;&lt; 3);
}

<span class="comment">/*
print("0080 - ", IntFromBitString(new ByteString("0080", HEX)).toString(16));
print("0180 - ", IntFromBitString(new ByteString("0180", HEX)).toString(16));
print("0780 - ", IntFromBitString(new ByteString("0780", HEX)).toString(16));
print("078000 - ", IntFromBitString(new ByteString("078000", HEX)).toString(16));
print("07800000 - ", IntFromBitString(new ByteString("07800000", HEX)).toString(16));
*/</span>



<span class="comment">/**
 * Creates a PKCS#15 path from the encoded TLV structure
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class provides for access to PKCS#15 structures.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * Path ::= SEQUENCE {
 * 		efidOrPath OCTET STRING,
 *		index INTEGER (0..cia-ub-index) OPTIONAL,
 *		length [0] INTEGER (0..cia-ub-index) OPTIONAL
 *	}( WITH COMPONENTS {..., index PRESENT, length PRESENT}|
 * 	   WITH COMPONENTS {..., index ABSENT, length ABSENT})
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the path
 */</span>
<span class="reserved">function</span> PKCS15_Path(tlv) {
	assert(tlv.elements &gt; 0);

	var t = tlv.get(0);
	assert(t.tag == ASN1.OCTET_STRING);

	t.setName(<span class="literal">"efidOrPath"</span>);
	<span class="reserved">this</span>.efidOrPath = <span class="literal">""</span>;

	<span class="reserved">for</span> (var i = 0; i &lt; t.length; i += 2) {
		<span class="reserved">if</span> (t.length - i &gt;= 2) {
			<span class="reserved">this</span>.efidOrPath += <span class="literal">":"</span> + t.value.bytes(i, 2).toString(HEX);
		} <span class="reserved">else</span> {
			<span class="reserved">this</span>.efidOrPath += <span class="literal">":"</span> + ByteString.valueOf(t.value.byteAt(i) &gt;&gt; 3).toString(HEX);
		}
	}

	<span class="reserved">if</span> (tlv.elements == 3) {
		t = tlv.get(1);
		assert(t.tag == ASN1.INTEGER);
		assert(t.length &gt; 0);
		t.setName(<span class="literal">"index"</span>);
		<span class="reserved">this</span>.index = t.value.toSigned();

		t = tlv.get(2);
		assert(t.tag == 0x80);
		assert(t.length &gt; 0);
		t.setName(<span class="literal">"length"</span>);
		<span class="reserved">this</span>.length = t.value.toSigned();
	}
}



<span class="comment">/**
 * Gets the absolute in the OCF format.
 *
 * <span class="attrib">@param</span> {String} df the current directory
 * <span class="attrib">@return</span> the path in OCF encoding
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_Path.<span class="reserved">prototype</span>.getAbsolutePath = <span class="reserved">function</span>(df) {
	<span class="reserved">if</span> (<span class="reserved">this</span>.aid) {
		<span class="reserved">return</span> <span class="reserved">this</span>.aid + <span class="reserved">this</span>.efidOrPath;
	}

	var p = <span class="reserved">this</span>.efidOrPath;
	<span class="reserved">if</span> (p.slice(0, 5) != <span class="literal">":3F00"</span>) {
		p = df + p;
	}

	<span class="reserved">return</span> p;
}



<span class="comment">/**
 * Convert the object to a human readable string
 *
 * <span class="attrib">@return</span> the string representation of the object
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_Path.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {
	var str = <span class="literal">"{"</span>;

	<span class="reserved">if</span> (<span class="reserved">this</span>.efidOrPath) {
		str += <span class="literal">"efidOrPath="</span> + <span class="reserved">this</span>.efidOrPath;
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.index) {
		str += <span class="literal">",index="</span> + <span class="reserved">this</span>.index;
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.length) {
		str += <span class="literal">",length="</span> + <span class="reserved">this</span>.length;
	}
	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Creates a CIO DDO object from data usually stored in EF_DIR.
 *
 * <span class="attrib">@class</span> &lt;p&gt;Class to decode CIO DDO objects.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * CIODDO ::= SEQUENCE {
 * 		providerId OBJECT IDENTIFIER OPTIONAL,
 * 		odfPath Path OPTIONAL,
 *		ciaInfoPath [0] Path OPTIONAL,
 *		aid [APPLICATION 15] OCTET STRING (SIZE(1..16)),
 *		(CONSTRAINED BY {-- Must be an AID in accordance with ISO/IEC 7816-4--})
 *		OPTIONAL,
 *		... -- For future extensions
 * } -- Context tag 1 is historical and shall not be used
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO DDO
 */</span>
<span class="reserved">function</span> PKCS15_CIODDO(tlv) {
	assert(tlv.tag == 0x73);

	var i = 0;

	<span class="reserved">if</span> (i &lt; tlv.elements) {
		var t = tlv.get(i);
		<span class="reserved">if</span> (t.tag == ASN1.OBJECT_IDENTIFIER) {
			<span class="reserved">this</span>.providerId = t.toString();
			i++;
		}
	}

	<span class="reserved">if</span> (i &lt; tlv.elements) {
		var t = tlv.get(i);
		<span class="reserved">if</span> (t.tag == ASN1.SEQUENCE) {
			<span class="reserved">this</span>.odfPath = new PKCS15_Path(t);
			i++;
		}
	}

	<span class="reserved">if</span> (i &lt; tlv.elements) {
		var t = tlv.get(i);
		<span class="reserved">if</span> (t.tag == 0xA0) {
			<span class="reserved">this</span>.ciaInfoPath = new PKCS15_Path(t);
			i++;
		}
	}
}



<span class="comment">/**
 * Convert the object to a human readable string
 *
 * <span class="attrib">@return</span> the string representation of the object
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CIODDO.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {
	var str = <span class="literal">"{"</span>;

	<span class="reserved">if</span> (<span class="reserved">this</span>.providerId) {
		str += <span class="literal">"providerId="</span> + <span class="reserved">this</span>.providerId + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.odfPath) {
		str += <span class="literal">"odfPath="</span> + <span class="reserved">this</span>.odfPath + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.ciaInfoPath) {
		str += <span class="literal">"ciaInfoPath="</span> + <span class="reserved">this</span>.ciaInfoPath + <span class="literal">",\n"</span>;
	}
	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Creates a structure to access an application template from EF_DIR.
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class provides for access to an application template.&lt;/p&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO DDO
 */</span>
<span class="reserved">function</span> PKCS15_ApplicationTemplate(tlv) {
	assert(tlv.tag == 0x61);
	assert(tlv.elements &gt; 0);

	<span class="reserved">for</span> (var i = 0; i &lt; tlv.elements; i++) {
		var t = tlv.get(i);
		switch(t.tag) {
			case 0x4F:
				<span class="reserved">this</span>.aid = t.value.toString(HEX);
				break;
			case 0x50:
				<span class="reserved">this</span>.label = t.value.toString(UTF8);
				break;
			case 0x51:
				<span class="reserved">this</span>.path = <span class="literal">":"</span> + t.value.toString(HEX);
				break;
			case 0x73:
				<span class="reserved">this</span>.ddo = new PKCS15_CIODDO(t);
				break;
		}
	}
}

<span class="comment">/**
 * The application identifier for this application.
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_ApplicationTemplate.<span class="reserved">prototype</span>.aid = <span class="literal">""</span>;

<span class="comment">/**
 * The application label for this application.
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_ApplicationTemplate.<span class="reserved">prototype</span>.label = <span class="literal">""</span>;

<span class="comment">/**
 * The path for this application.
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_ApplicationTemplate.<span class="reserved">prototype</span>.path = <span class="literal">""</span>;

<span class="comment">/**
 * The PKCS#15 Directory Data Object (DDO) for this application.
 * <span class="attrib">@type</span> PKCS15_CIODDO
 */</span>
PKCS15_ApplicationTemplate.<span class="reserved">prototype</span>.ddo = <span class="literal">""</span>;

<span class="comment">/**
 * The list of Cryptographic Information Objects (CIO).
 * <span class="attrib">@see</span> PKCS15.readObjectListForApplication
 * <span class="attrib">@type</span> PKCS15_CIO[]
 */</span>
PKCS15_ApplicationTemplate.<span class="reserved">prototype</span>.objlist = null;



<span class="comment">/**
 * Convert the object to a human readable string
 */</span>
PKCS15_ApplicationTemplate.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {
	var str = <span class="literal">"{"</span>;

	<span class="reserved">if</span> (<span class="reserved">this</span>.aid) {
		str += <span class="literal">"aid="</span> + <span class="reserved">this</span>.aid + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.label) {
		str += <span class="literal">"label="</span> + <span class="reserved">this</span>.label + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.path) {
		str += <span class="literal">"path="</span> + <span class="reserved">this</span>.path + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.ddo) {
		str += <span class="literal">"ddo="</span> + <span class="reserved">this</span>.ddo + <span class="literal">",\n"</span>;
	}
	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Creates a CIAInfo object.
 *
 * <span class="attrib">@class</span> &lt;p&gt;Class to decode CIAInfo objects.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * CIAInfo ::= SEQUENCE {
 *		version INTEGER {v1(0),v2(1)} (v1|v2,...),
 *		serialNumber OCTET STRING OPTIONAL,
 *		manufacturerID Label OPTIONAL,
 *		label [0] Label OPTIONAL,
 *		cardflags CardFlags,
 *		seInfo SEQUENCE OF SecurityEnvironmentInfo OPTIONAL,
 *		recordInfo [1] RecordInfo OPTIONAL,
 *		supportedAlgorithms [2] SEQUENCE OF AlgorithmInfo OPTIONAL,
 *		issuerId [3] Label OPTIONAL,
 *		holderId [4] Label OPTIONAL,
 *		lastUpdate [5] LastUpdate OPTIONAL,
 *		preferredLanguage PrintableString OPTIONAL, -- In accordance with IETF RFC 1766
 *		profileIndication [6] SEQUENCE OF ProfileIndication OPTIONAL,
 *		...
 *		} (CONSTRAINED BY { -- Each AlgorithmInfo.reference value shall be unique --})
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIAInfo
 */</span>
<span class="reserved">function</span> PKCS15_CIAInfo(tlv) {
	assert(tlv.tag == ASN1.SEQUENCE);
	assert(tlv.elements &gt; 2);

	<span class="reserved">this</span>.tlv = tlv;
	var i = 0;
	var t;

	tlv.setName(<span class="literal">"CIAInfo"</span>);

	<span class="comment">// version</span>
	t = tlv.get(i);
	assert(t.tag == ASN1.INTEGER);
	t.setName(<span class="literal">"version"</span>);
	<span class="reserved">this</span>.version = t.value.toSigned();
	i++;

	<span class="comment">// serialNumber</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.OCTET_STRING)) {
		t.setName(<span class="literal">"serialNumber"</span>);
		<span class="reserved">this</span>.serialNumber = t.value;
		i++;
	}

	<span class="comment">// manufacturerID</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.UTF8String)) {
		t.setName(<span class="literal">"manufacturerID"</span>);
		<span class="reserved">this</span>.manufacturerID = t.value.toString(UTF8);
		i++;
	}

	<span class="comment">// label</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0x80)) {
		t.setName(<span class="literal">"label"</span>);
		<span class="reserved">this</span>.label = t.value.toString(UTF8);
		i++;
	}

	t = tlv.get(i);
	assert(t.tag == ASN1.BIT_STRING);
	<span class="reserved">if</span> (t.length &gt; 1) {
		<span class="reserved">this</span>.cardflags = t.value.bytes(1,1).toUnsigned();
		t.setName(<span class="literal">"cardflags {"</span> + <span class="reserved">this</span>.getCardflagsAsString() + <span class="literal">" }"</span>);
	} <span class="reserved">else</span> {
		<span class="reserved">this</span>.cardflags = 0;
	}
	i++;

	<span class="comment">// seInfo SEQUENCE OF SecurityEnvironmentInfo OPTIONAL,</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.SEQUENCE)) {
		t.setName(<span class="literal">"seInfo"</span>);
		print(<span class="literal">"CIAInfo.seInfo not further decoded : "</span> + t);
		<span class="reserved">this</span>.seInfo = <span class="literal">"### not implemented ###"</span>;
		i++;
	}

	<span class="comment">// recordInfo [1] RecordInfo OPTIONAL,</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0xA1)) {
		t.setName(<span class="literal">"recordInfo"</span>);
		print(<span class="literal">"CIAInfo.recordInfo not further decoded : "</span> + t);
		<span class="reserved">this</span>.recordInfo = <span class="literal">"### not implemented ###"</span>;
		i++;
	}

	<span class="comment">// supportedAlgorithms [2] SEQUENCE OF AlgorithmInfo OPTIONAL,</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0xA2)) {
		t.setName(<span class="literal">"supportedAlgorithms"</span>);
		<span class="reserved">this</span>.supportedAlgorithms = new Array();
		<span class="reserved">for</span> (var j = 0; j &lt; t.elements; j++) {
			var alg = new AlgorithmInfo(t.get(j));
			<span class="reserved">this</span>.supportedAlgorithms.push(alg);
		}
		i++;
	}

	<span class="comment">// issuerId [3] Label OPTIONAL,</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0xA3)) {
		t.setName(<span class="literal">"issuerId"</span>);
		print(<span class="literal">"CIAInfo.issuerId not further decoded : "</span> + t);
		<span class="reserved">this</span>.issuerId = <span class="literal">"### not implemented ###"</span>;
		i++;
	}

	<span class="comment">// holderId [4] Label OPTIONAL,</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0xA4)) {
		t.setName(<span class="literal">"holderId"</span>);
		print(<span class="literal">"CIAInfo.holderId not further decoded : "</span> + t);
		<span class="reserved">this</span>.holderId = <span class="literal">"### not implemented ###"</span>;
		i++;
	}

	<span class="comment">// lastUpdate [5] LastUpdate OPTIONAL,</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0xA5)) {
		t.setName(<span class="literal">"lastUpdate"</span>);
		print(<span class="literal">"CIAInfo.lastUpdate not further decoded : "</span> + t);
		<span class="reserved">this</span>.lastUpdate = <span class="literal">"### not implemented ###"</span>;
		i++;
	}

	<span class="comment">// preferredLanguage PrintableString OPTIONAL, -- In accordance with IETF RFC 1766</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.PrintableString)) {
		t.setName(<span class="literal">"preferredLanguage"</span>);
		<span class="reserved">this</span>.preferredLanguage = t.value.toString(ASCII);
		i++;
	}

	<span class="comment">// profileIndication [6] SEQUENCE OF ProfileIndication OPTIONAL,</span>
	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0xA6)) {
		t.setName(<span class="literal">"profileIndicator"</span>);
		print(<span class="literal">"CIAInfo.profileIndicator not further decoded : "</span> + t);
		<span class="reserved">this</span>.profileIndication = <span class="literal">"### not implemented ###"</span>;
		i++;
	}
}



<span class="comment">/**
 * Gets the card flags as string of concatenated flags.
 * <span class="attrib">@return</span> the string containing the flags separated by a blank
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CIAInfo.<span class="reserved">prototype</span>.getCardflagsAsString = <span class="reserved">function</span>() {
	<span class="reserved">return</span> (<span class="reserved">this</span>.cardflags &amp; 0x80 ? <span class="literal">" readonly"</span> : <span class="literal">""</span>) +
	       (<span class="reserved">this</span>.cardflags &amp; 0x40 ? <span class="literal">" authRequired"</span> : <span class="literal">""</span>) +
	       (<span class="reserved">this</span>.cardflags &amp; 0x20 ? <span class="literal">" prnGeneration"</span> : <span class="literal">""</span>);
}



<span class="comment">/**
 * Convert the object to a human readable string
 *
 * <span class="attrib">@return</span> the string representation of the object
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CIAInfo.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {
	var str = <span class="literal">"CIAInfo { "</span>;

	str += <span class="literal">"version="</span> + <span class="reserved">this</span>.version + <span class="literal">",\n"</span>;

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.serialNumber) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"serialNumber="</span> + <span class="reserved">this</span>.serialNumber + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.manufacturerID) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"manufacturerID="</span> + <span class="reserved">this</span>.manufacturerID + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.label) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"label="</span> + <span class="reserved">this</span>.label + <span class="literal">",\n"</span>;
	}

	str += <span class="literal">"cardflags="</span> + <span class="reserved">this</span>.getCardflagsAsString() + <span class="literal">",\n"</span>;

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.supportedAlgorithms) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"supportedAlgorithms={\n"</span>;
		<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.supportedAlgorithms.length; i++) {
			str += <span class="reserved">this</span>.supportedAlgorithms[i].toString() + <span class="literal">"\n"</span>;
		}
		str += <span class="literal">"},\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.preferredLanguage) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"preferredLanguage="</span> + <span class="reserved">this</span>.preferredLanguage + <span class="literal">",\n"</span>;
	}

	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Create an AlgorithmInfo object from TLV data
 *
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * AlgorithmInfo ::= SEQUENCE {
 *   reference Reference,
 *   algorithm CIO-ALGORITHM.&amp;id({AlgorithmSet}),
 *   parameters CIO-ALGORITHM.&amp;Parameters({AlgorithmSet}{<span class="attrib">@algorithm</span>}),
 *   supportedOperations CIO-ALGORITHM.&amp;Operations({AlgorithmSet}{<span class="attrib">@algorithm</span>}),
 *   objId CIO-ALGORITHM.&amp;objectIdentifier ({AlgorithmSet}{<span class="attrib">@algorithm</span>}),
 *   algRef Reference OPTIONAL
 * }
 *
 * CIO-ALGORITHM ::= CLASS {
 *   &amp;id INTEGER UNIQUE,
 *   &amp;Parameters,
 *   &amp;Operations Operations,
 *   &amp;objectIdentifier OBJECT IDENTIFIER OPTIONAL
 *   } WITH SYNTAX {
 *   PARAMETERS &amp;Parameters OPERATIONS &amp;Operations ID &amp;id [OID &amp;objectIdentifier]
 * }
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the AlgorithmInfo
 */</span>
<span class="reserved">function</span> AlgorithmInfo(tlv) {
	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements &gt;= 5);

		<span class="reserved">this</span>.tlv = tlv;

		var i = 0;
		var t;

		assert((t = tlv.get(i)).tag == ASN1.INTEGER);
		t.setName(<span class="literal">"reference"</span>);
		<span class="reserved">this</span>.reference = t.value.toSigned();
		i++;

		assert((t = tlv.get(i)).tag == ASN1.INTEGER);
		t.setName(<span class="literal">"algorithm"</span>);
		<span class="reserved">this</span>.algorithm = t.value.toSigned();
		i++;

		t = tlv.get(i);
		t.setName(<span class="literal">"parameters"</span>);
		<span class="reserved">this</span>.parameters = t;
		i++;

		assert((t = tlv.get(i)).tag == ASN1.BIT_STRING);
		<span class="reserved">this</span>.supportedOperations = t.value.bytes(1,1).toUnsigned();
		t.setName(<span class="literal">"supportedOperations {"</span> + <span class="reserved">this</span>.getOperationsAsString() + <span class="literal">" }"</span>);
		i++;

		<span class="reserved">if</span> (i &lt; tlv.elements) {
			assert((t = tlv.get(i)).tag == ASN1.OBJECT_IDENTIFIER);
			t.setName(<span class="literal">"objId"</span>);
			<span class="reserved">this</span>.objId = t.value.toString(OID);
			i++;
		}

		<span class="reserved">if</span> (i &lt; tlv.elements) {
			assert((t = tlv.get(i)).tag == ASN1.INTEGER);
			t.setName(<span class="literal">"algRef"</span>);
			<span class="reserved">this</span>.algRef = t.value.toSigned();
			i++;
		}
	}
}



<span class="comment">/**
 * Gets the operations flags as string of concatenated tokens.
 * <span class="attrib">@return</span> the string containing the flags separated by a blank
 * <span class="attrib">@type</span> String
 */</span>
AlgorithmInfo.<span class="reserved">prototype</span>.getOperationsAsString = <span class="reserved">function</span>() {
	<span class="reserved">return</span> (<span class="reserved">this</span>.supportedOperations &amp; 0x80 ? <span class="literal">" compute-checksum"</span> : <span class="literal">""</span>) +
           (<span class="reserved">this</span>.supportedOperations &amp; 0x40 ? <span class="literal">" compute-signature"</span> : <span class="literal">""</span>) +
           (<span class="reserved">this</span>.supportedOperations &amp; 0x20 ? <span class="literal">" verify-checksum"</span> : <span class="literal">""</span>) +
           (<span class="reserved">this</span>.supportedOperations &amp; 0x10 ? <span class="literal">" verify-signature"</span> : <span class="literal">""</span>) +
           (<span class="reserved">this</span>.supportedOperations &amp; 0x08 ? <span class="literal">" encipher"</span> : <span class="literal">""</span>) +
           (<span class="reserved">this</span>.supportedOperations &amp; 0x04 ? <span class="literal">" decipher"</span> : <span class="literal">""</span>) +
           (<span class="reserved">this</span>.supportedOperations &amp; 0x02 ? <span class="literal">" hash"</span> : <span class="literal">""</span>) +
           (<span class="reserved">this</span>.supportedOperations &amp; 0x01 ? <span class="literal">" generate-key"</span> : <span class="literal">""</span>);

}



<span class="comment">/**
 * Convert the object to a human readable string
 *
 * <span class="attrib">@return</span> the string representation of the object
 * <span class="attrib">@type</span> String
 */</span>
AlgorithmInfo.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {
	var str = <span class="literal">"AlgorithmInfo { "</span>;

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.reference) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"reference="</span> + <span class="reserved">this</span>.reference + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.algorithm) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"algorithm=0x"</span> + <span class="reserved">this</span>.algorithm.toString(16) + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.parameters) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"parameters="</span> + <span class="reserved">this</span>.parameters + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.supportedOperations) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"supportedOperations="</span> + <span class="reserved">this</span>.getOperationsAsString() + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.objId) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"objId="</span> + <span class="reserved">this</span>.objId + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.algRef) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"algRef="</span> + <span class="reserved">this</span>.algRef + <span class="literal">",\n"</span>;
	}

	str += <span class="literal">"}"</span>;

	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Create a Cryptographic Information Object (CIO)
 *
 * <span class="attrib">@class</span> &lt;p&gt;This is the base class for all cryptographic objects in a PKCS#15 data structure.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * CommonObjectAttributes ::= SEQUENCE {
 *		label Label OPTIONAL,
 *		flags CommonObjectFlags OPTIONAL,
 *		authId Identifier OPTIONAL,
 *		userConsent INTEGER (1..cia-ub-userConsent) OPTIONAL,
 *		accessControlRules SEQUENCE SIZE (1..MAX) OF AccessControlRule OPTIONAL,
 *		...
 *	} (CONSTRAINED BY {-- authId should be present if flags.private is set.
 *	-- It shall equal an authID in one authentication object in the AOD -- })
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 */</span>
<span class="reserved">function</span> PKCS15_CIO(tlv) {
	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		assert(tlv.isconstructed);
		assert(tlv.elements &gt;= 3);

		<span class="reserved">this</span>.tlv = tlv;

		var coa = tlv.get(0);
		assert(coa.tag == ASN1.SEQUENCE);

		coa.setName(<span class="literal">"commonObjectAttributes"</span>);
		var i = 0;
		var t;

		<span class="reserved">if</span> ((i &lt; coa.elements) &amp;&amp; ((t = coa.get(i)).tag == ASN1.UTF8String)) {
			t.setName(<span class="literal">"label"</span>);
			<span class="reserved">this</span>.label = t.value.toString(UTF8);
			i++;
		}

		<span class="comment">// D-Trust card has empty bitstring element</span>
		<span class="reserved">if</span> ((i &lt; coa.elements) &amp;&amp; ((t = coa.get(i)).tag == ASN1.BIT_STRING) &amp;&amp; (t.value.length &gt; 1)) {
			<span class="reserved">this</span>.flags = t.value.bytes(1,1).toUnsigned();
			t.setName(<span class="literal">"flags {"</span> + <span class="reserved">this</span>.getFlagsAsString() + <span class="literal">" }"</span>);
			i++;
		}

		<span class="reserved">if</span> ((i &lt; coa.elements) &amp;&amp; ((t = coa.get(i)).tag == ASN1.OCTET_STRING)) {
			t.setName(<span class="literal">"authId"</span>);
			<span class="reserved">this</span>.authId = t.value;
			i++;
		}

		<span class="reserved">if</span> ((i &lt; coa.elements) &amp;&amp; ((t = coa.get(i)).tag == ASN1.INTEGER)) {
			t.setName(<span class="literal">"userConsent"</span>);
			<span class="reserved">this</span>.userConsent = t.value.toSigned();
			i++;
		}

		<span class="reserved">if</span> ((i &lt; coa.elements) &amp;&amp; ((t = coa.get(i)).tag == ASN1.SEQUENCE)) {
			t.setName(<span class="literal">"accessControlRules"</span>);
			<span class="reserved">this</span>.accessControlRules = t.value;
			i++;
		}
	}
}



<span class="comment">/**
 * Gets the common object flags as string of concatenated flags.
 * <span class="attrib">@return</span> the string containing the flags separated by a blank
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CIO.<span class="reserved">prototype</span>.getFlagsAsString = <span class="reserved">function</span>() {
	<span class="reserved">return</span>  (<span class="reserved">this</span>.flags &amp; 0x80 ? <span class="literal">" private"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.flags &amp; 0x40 ? <span class="literal">" modifiable"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.flags &amp; 0x20 ? <span class="literal">" internal"</span> : <span class="literal">""</span>);
}



<span class="comment">/**
 * Convert the object to a human readable string
 *
 * <span class="attrib">@return</span> the string representation of the object
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CIO.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {
	var str = <span class="literal">"CommonObjectAttributes { "</span>;

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.label) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"label="</span> + <span class="reserved">this</span>.label + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.flags) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"flags="</span> + <span class="reserved">this</span>.getFlagsAsString() + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.authId) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"authId="</span> + <span class="reserved">this</span>.authId + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.userConsent) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"userConsent="</span> + <span class="reserved">this</span>.userConsent + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.accessControlRules) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"accessControlRules="</span> + <span class="reserved">this</span>.accessControlRules + <span class="literal">",\n"</span>;
	}

	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Create a Common Key Attribute Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds common key attributes to the base CIO class.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * CommonKeyAttributes ::= SEQUENCE {
 *		iD Identifier,
 *		usage KeyUsageFlags,
 *		native BOOLEAN DEFAULT TRUE,
 *		accessFlags KeyAccessFlags OPTIONAL,
 *		keyReference KeyReference OPTIONAL,
 *		startDate GeneralizedTime OPTIONAL,
 *		endDate [0] GeneralizedTime OPTIONAL,
 *		algReference [1] SEQUENCE OF Reference OPTIONAL,
 *		... -- For future extensions
 *		}
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CIO PKCS15_CIO is the base class
 */</span>
<span class="reserved">function</span> PKCS15_CommonKeyAttributes(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CIO.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		tlv = tlv.get(1);
		tlv.setName(<span class="literal">"commonKeyAttributes"</span>);
		var i = 0;
		var t;

		assert((t = tlv.get(i)).tag == ASN1.OCTET_STRING);
		t.setName(<span class="literal">"iD"</span>);
		<span class="reserved">this</span>.iD = t.value;
		i++;

		assert((t = tlv.get(i)).tag == ASN1.BIT_STRING);
		<span class="reserved">this</span>.usage = t.value.bytes(1).toUnsigned(true);
		t.setName(<span class="literal">"usage {"</span> + <span class="reserved">this</span>.getUsageAsString() + <span class="literal">" }"</span>);
		i++;

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.BOOLEAN)) {
			t.setName(<span class="literal">"native"</span>);
			<span class="reserved">this</span>.native_ = t.value.toUnsigned();
			i++;
		} <span class="reserved">else</span> {
			<span class="reserved">this</span>.native_ = true;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.BIT_STRING)) {
			<span class="reserved">this</span>.accessFlags = t.value.bytes(1).toUnsigned(true);
			t.setName(<span class="literal">"accessFlags {"</span> + <span class="reserved">this</span>.getAccessFlagsAsString() + <span class="literal">" }"</span>);
			i++;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.INTEGER)) {
			t.setName(<span class="literal">"keyReference"</span>);
			<span class="reserved">this</span>.keyReference = t.value.toSigned();
			i++;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.GeneralizedTime)) {
			t.setName(<span class="literal">"startDate"</span>);
			<span class="reserved">this</span>.startDate = t.getDate();
			i++;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0x80)) {
			t.setName(<span class="literal">"endDate"</span>);
			<span class="reserved">this</span>.endDate = t.getDate();
			i++;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0xA1)) {
			assert(t.isconstructed);
			t.setName(<span class="literal">"algReference"</span>);
			<span class="reserved">this</span>.algReference = new Array();
			<span class="reserved">for</span> (var j = 0; j &lt; t.elements; j++) {
				assert(t.get(j).tag == ASN1.INTEGER);
				t.get(j).setName(<span class="literal">"reference"</span>);
				<span class="reserved">this</span>.algReference.push(t.get(j).value.toSigned());
			}
			i++;
		}
	}
}

PKCS15_CommonKeyAttributes.<span class="reserved">prototype</span> = new PKCS15_CIO();



<span class="comment">/**
 * Gets the key usage flags as string of concatenated flags.
 * <span class="attrib">@return</span> the string containing the flags separated by a blank
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CommonKeyAttributes.<span class="reserved">prototype</span>.getUsageAsString = <span class="reserved">function</span>() {
	<span class="reserved">return</span>  (<span class="reserved">this</span>.usage &amp; 0x0080 ? <span class="literal">" encipher"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.usage &amp; 0x0040 ? <span class="literal">" decipher"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.usage &amp; 0x0020 ? <span class="literal">" sign"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.usage &amp; 0x0010 ? <span class="literal">" signRecover"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.usage &amp; 0x0008 ? <span class="literal">" keyEncipher"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.usage &amp; 0x0004 ? <span class="literal">" keyDecipher"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.usage &amp; 0x0002 ? <span class="literal">" verify"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.usage &amp; 0x0001 ? <span class="literal">" verifyRecover"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.usage &amp; 0x8000 ? <span class="literal">" derive"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.usage &amp; 0x4000 ? <span class="literal">" nonRepudiation"</span> : <span class="literal">""</span>);
}



<span class="comment">/**
 * Gets the key access flags as string of concatenated flags.
 * <span class="attrib">@return</span> the string containing the flags separated by a blank
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CommonKeyAttributes.<span class="reserved">prototype</span>.getAccessFlagsAsString = <span class="reserved">function</span>() {
	<span class="reserved">return</span>	(<span class="reserved">this</span>.accessFlags &amp; 0x80 ? <span class="literal">" sensitive"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.accessFlags &amp; 0x40 ? <span class="literal">" extractable"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.accessFlags &amp; 0x20 ? <span class="literal">" alwaysSensitive"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.accessFlags &amp; 0x10 ? <span class="literal">" neverExtractable"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.accessFlags &amp; 0x08 ? <span class="literal">" cardGenerated"</span> : <span class="literal">""</span>);
}



<span class="comment">/**
 * Convert the object to a human readable string
 * <span class="attrib">@return</span> content information
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CommonKeyAttributes.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {

	var str = PKCS15_CIO.<span class="reserved">prototype</span>.toString.call(<span class="reserved">this</span>);
	str += <span class="literal">"\nCommonKeyAttributes { "</span>;

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.iD) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"iD="</span> + <span class="reserved">this</span>.iD + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.usage) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"usage="</span> + <span class="reserved">this</span>.getUsageAsString() + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.native_) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"native="</span> + <span class="reserved">this</span>.native_ + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.accessFlags) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"accessFlags="</span> + <span class="reserved">this</span>.getAccessFlagsAsString() + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.keyReference) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"keyReference="</span> + <span class="reserved">this</span>.keyReference + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.startDate) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"startDate="</span> + <span class="reserved">this</span>.startDate + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.endDate) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"endDate="</span> + <span class="reserved">this</span>.endDate + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.algReference) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"algReference="</span> + <span class="reserved">this</span>.algReference + <span class="literal">",\n"</span>;
	}

	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Create a Common Private Key Attribute Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds common private key attributes to the common key attribute class.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * CommonPrivateKeyAttributes ::= SEQUENCE {
 * name Name OPTIONAL,
 * keyIdentifiers [0] SEQUENCE OF CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 * generalName [1] GeneralNames OPTIONAL,
 * ... -- For future extensions
 * }
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CommonKeyAttributes PKCS15_CommonKeyAttributes is the base class
 */</span>
<span class="reserved">function</span> PKCS15_CommonPrivateKeyAttributes(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CommonKeyAttributes.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		var t = tlv.get(2);
		<span class="reserved">if</span> (t.tag == 0xA0) {
			t.setName(<span class="literal">"subClassAttributes"</span>);

			assert(t.elements == 1);
			t = t.get(0);
			t.setName(<span class="literal">"commonPrivateKeyAttributes"</span>);

			var i = 0;
			<span class="reserved">if</span> (t.elements &gt; i) {
				print(<span class="literal">"### Not decoded ### "</span> + t);
			}
		}
	}
}

PKCS15_CommonPrivateKeyAttributes.<span class="reserved">prototype</span> = new PKCS15_CommonKeyAttributes();



<span class="comment">/**
 * Create a Common Secret Key Attribute Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds common secret key attributes to the common key attribute class.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * CommonSecretKeyAttributes ::= SEQUENCE {
 *   keyLen INTEGER OPTIONAL, -- keylength (in bits)
 *   -- For future extensions
 *  }
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CommonKeyAttributes PKCS15_CommonKeyAttributes is the base class
 */</span>
<span class="reserved">function</span> PKCS15_CommonSecretKeyAttributes(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CommonKeyAttributes.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		var t = tlv.get(2);
		<span class="reserved">if</span> (t.tag == 0xA0) {
			t.setName(<span class="literal">"subClassAttributes"</span>);

			assert(t.elements == 1);
			t = t.get(0);
			t.setName(<span class="literal">"commonSecretKeyAttributes"</span>);

			var i = 0;
			var o = t.get(i++);
			assert(o.tag == ASN1.INTEGER);
			o.setName(<span class="literal">"keyLen"</span>);

			<span class="reserved">if</span> (t.elements &gt; i) {
				print(<span class="literal">"### Not decoded ### "</span> + t);
			}
		}
	}
}

PKCS15_CommonSecretKeyAttributes.<span class="reserved">prototype</span> = new PKCS15_CommonKeyAttributes();



<span class="comment">/**
 * Create a Private Key Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds private key attributes to the common private key attribute class.&lt;/p&gt;
 * &lt;p&gt;The class supports RSA and ECC keys.&lt;/p&gt;
 * &lt;p&gt;RSA keys are decoded from the following ASN.1 structure:&lt;/p&gt;
 * &lt;pre&gt;
 * PrivateRSAKeyAttributes ::= SEQUENCE {
 * value Path,
 * modulusLength INTEGER, -- modulus length in bits, e.g. 1024
 * keyInfo KeyInfo {NULL, PublicKeyOperations} OPTIONAL,
 * ... -- For future extensions
 * }
 * &lt;/pre&gt;
 * &lt;p&gt;ECC keys are decoded from the following ASN.1 structure:&lt;/p&gt;
 * &lt;pre&gt;
 * PrivateECKeyAttributes ::= SEQUENCE {
 * value Path,
 * keyInfo KeyInfo {Parameters, PublicKeyOperations} OPTIONAL,
 * ... -- For future extensions
 * }
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CommonPrivateKeyAttributes PKCS15_CommonPrivateKeyAttributes is the base class
 */</span>
<span class="reserved">function</span> PKCS15_PrivateKey(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CommonPrivateKeyAttributes.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		var t = tlv.get(tlv.elements - 1);

		assert(t.tag == 0xA1);
		assert(t.elements &gt;= 1);
		t.setName(<span class="literal">"typeAttributes"</span>);

		t = t.get(0);

		switch(tlv.tag) {
		case 0x30: <span class="reserved">this</span>.decodePrivateRSAKey(t); break;
		case 0xA0: <span class="reserved">this</span>.decodePrivateECCKey(t); break;
		default:
			<span class="reserved">this</span>.type = <span class="literal">"PrivateKey"</span>; break;
			print(<span class="literal">"### Not decoded ### "</span> + t);
		}
	}
}

PKCS15_PrivateKey.<span class="reserved">prototype</span> = new PKCS15_CommonPrivateKeyAttributes();



<span class="comment">/**
 * Decodes the RSA key structure.
 *
 * <span class="attrib">@private</span>
 * <span class="attrib">@param</span> {ASN1} tlv the TLV structure
 */</span>
PKCS15_PrivateKey.<span class="reserved">prototype</span>.decodePrivateRSAKey = <span class="reserved">function</span>(tlv) {
	<span class="reserved">this</span>.type = <span class="literal">"PrivateRSAKey"</span>;
	tlv.setName(<span class="literal">"privateRSAKeyAttributes"</span>);

	var t = tlv.get(0);
	<span class="reserved">this</span>.value = new PKCS15_Path(t);
	t.setName(<span class="literal">"value"</span>);

	t = tlv.get(1);
	assert(t.tag == ASN1.INTEGER);
	<span class="reserved">this</span>.modulusLength = t.value.toSigned();
	t.setName(<span class="literal">"modulusLength"</span>);

	<span class="reserved">if</span> (tlv.elements &gt; 2) {
		t = tlv.get(2);
		<span class="reserved">if</span> (t.tag == ASN1.INTEGER) {
			t.setName(<span class="literal">"reference"</span>);
		} <span class="reserved">else</span> {
			t.setName(<span class="literal">"paramsAndOps"</span>);
		}
	}
}



<span class="comment">/**
 * Decodes the ECC key structure.
 *
 * <span class="attrib">@private</span>
 * <span class="attrib">@param</span> {ASN1} tlv the TLV structure
 */</span>
PKCS15_PrivateKey.<span class="reserved">prototype</span>.decodePrivateECCKey = <span class="reserved">function</span>(tlv) {
	<span class="reserved">this</span>.type = <span class="literal">"PrivateECCKey"</span>;
	tlv.setName(<span class="literal">"privateECCKeyAttributes"</span>);

	var t = tlv.get(0);
	<span class="reserved">this</span>.value = new PKCS15_Path(t);
	t.setName(<span class="literal">"value"</span>);

	<span class="reserved">if</span> (tlv.elements &gt; 1) {
		t = tlv.get(1);
		<span class="reserved">if</span> (t.tag == ASN1.INTEGER) {
			t.setName(<span class="literal">"reference"</span>);
		} <span class="reserved">else</span> {
			t.setName(<span class="literal">"paramsAndOps"</span>);
		}
	}
}



<span class="comment">/**
 * Create a Secret Key Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds secret key attributes to the common secret key attribute class.&lt;/p&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CommonSecretKeyAttributes PKCS15_CommonSecretKeyAttributes is the base class
 */</span>
<span class="reserved">function</span> PKCS15_SecretKey(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CommonSecretKeyAttributes.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		var t = tlv.get(tlv.elements - 1);

		assert(t.tag == 0xA1);
		assert(t.elements &gt;= 1);
		t.setName(<span class="literal">"typeAttributes"</span>);

		t = t.get(0);

		<span class="comment">// ToDo: Decode GenericKeyAttributes</span>
		<span class="reserved">this</span>.type = <span class="literal">"SecretKey"</span>;
		print(<span class="literal">"### Not decoded ### "</span> + t);
	}
}

PKCS15_SecretKey.<span class="reserved">prototype</span> = new PKCS15_CommonSecretKeyAttributes();



<span class="comment">/**
 * Create a Common Certificate Attribute Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds common certificate attributes to the base CIO class.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * CommonCertificateAttributes ::= SEQUENCE {
 * iD Identifier,
 * authority BOOLEAN DEFAULT FALSE,
 * identifier CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 * certHash [0] CertHash OPTIONAL,
 * trustedUsage [1] Usage OPTIONAL,
 * identifiers [2] SEQUENCE OF CredentialIdentifier {{KeyIdentifiers}} OPTIONAL,
 * validity [4] Validity OPTIONAL,
 * ...
 * } -- Context tag [3] is reserved for historical reasons
 * NOTE PKCS #15 uses context tag [3].
 * Usage ::= SEQUENCE {
 * keyUsage KeyUsage OPTIONAL,
 * extKeyUsage SEQUENCE SIZE (1..MAX) OF OBJECT IDENTIFIER OPTIONAL,
 * ...
 * } (WITH COMPONENTS {..., keyUsage PRESENT} | WITH COMPONENTS {..., extKeyUsage PRESENT})
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CIO PKCS15_CIO is the base class
 */</span>
<span class="reserved">function</span> PKCS15_CommonCertificateAttributes(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CIO.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		var tlv = tlv.get(1);
		tlv.setName(<span class="literal">"commonCertificateAttributes"</span>);
		var i = 0;
		var t;

		assert((t = tlv.get(i)).tag == ASN1.OCTET_STRING);
		t.setName(<span class="literal">"iD"</span>);
		<span class="reserved">this</span>.iD = t.value;
		i++;

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.BOOLEAN)) {
			t.setName(<span class="literal">"authority"</span>);
			<span class="reserved">this</span>.authority = (t.value.toUnsigned() &gt; 0);
			i++;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.SEQUENCE)) {
			t.setName(<span class="literal">"identifier"</span>);
			<span class="reserved">this</span>.identifier = t.value;
			i++;
		}

		<span class="comment">// Uncommon fields missing</span>
	}
}

PKCS15_CommonCertificateAttributes.<span class="reserved">prototype</span> = new PKCS15_CIO();



<span class="comment">/**
 * Convert the object to a human readable string
 * <span class="attrib">@return</span> content information
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CommonCertificateAttributes.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {
	var str = PKCS15_CIO.<span class="reserved">prototype</span>.toString.call(<span class="reserved">this</span>);
	str += <span class="literal">"\nCommonCertificateAttributes { "</span>;

	str += <span class="literal">"iD="</span> + <span class="reserved">this</span>.iD + <span class="literal">",\n"</span>;

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.authority) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"authority="</span> + <span class="reserved">this</span>.authority + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.identifier) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"identifier="</span> + <span class="reserved">this</span>.identifier + <span class="literal">",\n"</span>;
	}
	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Create a Certificate Attribute Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds X.509 certificate attributes to the common certificate attribute class.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax for X.509 certificates:&lt;/p&gt;
 * &lt;pre&gt;
 * X509CertificateAttributes ::= SEQUENCE {
 * value ObjectValue { Certificate },
 * subject Name OPTIONAL,
 * issuer [0] Name OPTIONAL,
 * serialNumber CertificateSerialNumber OPTIONAL,
 * ... -- For future extensions
 * }
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CommonCertificateAttributes PKCS15_CommonCertificateAttributes is the base class
 */</span>
<span class="reserved">function</span> PKCS15_Certificate(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CommonCertificateAttributes.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {

		var t = tlv.get(2);
		assert(t.tag == 0xA1);
		assert(t.elements == 1);
		t.setName(<span class="literal">"typeAttributes"</span>);
		t = t.get(0);
		t.setName(<span class="literal">"certificateAttributes"</span>);

		switch(tlv.tag) {
		case 0x30: <span class="reserved">this</span>.decodeX509Certificate(t); break;
		default:
			<span class="reserved">this</span>.type = <span class="literal">"Certificate"</span>; break;
			print(<span class="literal">"### Not decoded ### "</span> + t);
		}
<span class="comment">//		print("Certificate:" + t);</span>
	}
}

PKCS15_Certificate.<span class="reserved">prototype</span> = new PKCS15_CommonCertificateAttributes();



<span class="comment">/**
 * Decodes a X.509 certificate structure.
 *
 * <span class="attrib">@private</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the certificate data
 */</span>
PKCS15_Certificate.<span class="reserved">prototype</span>.decodeX509Certificate = <span class="reserved">function</span>(tlv) {
	<span class="reserved">this</span>.type = <span class="literal">"X509Certificate"</span>;
	tlv.setName(<span class="literal">"x509CertificateAttributes"</span>);

	var t = tlv.get(0);
	t.setName(<span class="literal">"value"</span>);

	<span class="reserved">if</span> (t.tag == ASN1.SEQUENCE) {
		<span class="reserved">this</span>.value = new PKCS15_Path(t);
	}

	var i = 1;

	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.SEQUENCE)) {
		t.setName(<span class="literal">"subject"</span>);
		i++;
	}

	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0xA0)) {
		t.setName(<span class="literal">"issuer"</span>);
		i++;
	}

	<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.INTEGER)) {
		t.setName(<span class="literal">"serialNumber"</span>);
		<span class="reserved">this</span>.serialNumber = t.value;
		i++;
	}
}



<span class="comment">/**
 * Create a Common Authentication Object Attribute Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds common authentication object attributes to the base CIO class.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * CommonAuthenticationObjectAttributes ::= SEQUENCE {
 *    authId Identifier OPTIONAL,
 *    authReference Reference OPTIONAL,
 *    seIdentifier [0] Reference OPTIONAL,
 *    ... -- For future extensions
 * }
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CIO PKCS15_CIO is the base class
 */</span>
<span class="reserved">function</span> PKCS15_CommonAuthenticationObjectAttributes(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CIO.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		var tlv = tlv.get(1);
		tlv.setName(<span class="literal">"commonAuthenticationObjectAttributes"</span>);
<span class="comment">//		print("CommonAuthenticationObjectAttributes:" + tlv);</span>

		var i = 0;
		var t;

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.OCTET_STRING)) {
			t.setName(<span class="literal">"authIdThis"</span>);
			<span class="reserved">this</span>.authIdThis = t.value;
			i++;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.INTEGER)) {
			t.setName(<span class="literal">"authReference"</span>);
			<span class="reserved">this</span>.authReference = t.value.toSigned();
			i++;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0x80)) {
			t.setName(<span class="literal">"seIdentifier"</span>);
			<span class="reserved">this</span>.seIdentifier = t.value.toSigned();
			i++;
		}
	}
}

PKCS15_CommonAuthenticationObjectAttributes.<span class="reserved">prototype</span> = new PKCS15_CIO();



<span class="comment">/**
 * Convert the object to a human readable string
 *
 * <span class="attrib">@return</span> the string representation of the object
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CommonAuthenticationObjectAttributes.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {

	var str = PKCS15_CIO.<span class="reserved">prototype</span>.toString.call(<span class="reserved">this</span>);
	str += <span class="literal">"\nCommonAuthenticationObjectAttributes { "</span>;

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.authIdThis) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"authIdThis="</span> + <span class="reserved">this</span>.authIdThis + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.authReference) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"authReference="</span> + <span class="reserved">this</span>.authReference + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.seIdentifier) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"seIdentifier="</span> + <span class="reserved">this</span>.seIdentifier + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.pwd) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"pwd="</span> + <span class="reserved">this</span>.pwd.toString() + <span class="literal">",\n"</span>;
	}

	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Create an Authentication Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds authentication object attributes to the common authentication object class.&lt;/p&gt;
 * &lt;p&gt;The class supports password objects.&lt;/p&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CommonAuthenticationObjectAttributes PKCS15_CommonAuthenticationObjectAttributes is the base class
 */</span>
<span class="reserved">function</span> PKCS15_AuthenticationObject(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CommonAuthenticationObjectAttributes.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		var t = tlv.get(tlv.elements - 1);
		assert(t.tag == 0xA1);
		assert(t.elements == 1);
		t.setName(<span class="literal">"typeAttribute"</span>);
		t = t.get(0);

		switch(t.tag) {
		case 0x30:
			<span class="reserved">this</span>.pwd = new PKCS15_PasswordAuthenticationObject(t);
			break;
		default:
			print(<span class="literal">"### Unsupported authentication object type : "</span> + t);
			break;
		}
	}
}

PKCS15_AuthenticationObject.<span class="reserved">prototype</span> = new PKCS15_CommonAuthenticationObjectAttributes();



<span class="comment">/**
 * Create a Password Authentication Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class supports password authentication objects.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * PasswordAttributes ::= SEQUENCE {
 *	pwdFlags PasswordFlags,
 *	pwdType PasswordType,
 *	minLength INTEGER (cia-lb-minPasswordLength..cia-ub-minPasswordLength),
 *	storedLength INTEGER (0..cia-ub-storedPasswordLength),
 *	maxLength INTEGER OPTIONAL,
 *	pwdReference [0] Reference DEFAULT 0,
 *	padChar OCTET STRING (SIZE(1)) OPTIONAL,
 *	lastPasswordChange GeneralizedTime OPTIONAL,
 *	path Path OPTIONAL,
 *	... -- For future extensions
 * }
 * PasswordFlags ::= BIT STRING {
 *	case-sensitive (0),
 *	local (1),
 *	change-disabled (2),
 *	unblock-disabled (3),
 *	initialized (4),
 *	needs-padding (5),
 *	unblockingPassword (6),
 *	soPassword (7),
 *	disable-allowed (8),
 *	integrity-protected (9),
 *	confidentiality-protected (10),
 *	exchangeRefData (11)
 *	} (CONSTRAINED BY { -- "unblockingPassword" and "soPassword" cannot both be set -- })
 * PasswordType ::= ENUMERATED {bcd, ascii-numeric, utf8, half-nibble-bcd, iso9564-1, ...}
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 */</span>
<span class="reserved">function</span> PKCS15_PasswordAuthenticationObject(tlv) {
	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {

		tlv.setName(<span class="literal">"passwordAuthenticationObject"</span>);

		var i = 0;
		var t;

		assert((t = tlv.get(i)).tag == ASN1.BIT_STRING);
		<span class="reserved">this</span>.pwdFlags = IntFromBitString(t.value);
		t.setName(<span class="literal">"pwdFlags {"</span> + <span class="reserved">this</span>.getPwdFlagsAsString() + <span class="literal">" }"</span>);
		i++;

		assert((t = tlv.get(i)).tag == ASN1.ENUMERATED);
		<span class="reserved">this</span>.pwdType = t.value.toUnsigned();
		t.setName(<span class="literal">"pwdType {"</span> + <span class="reserved">this</span>.getPwdTypeAsString() + <span class="literal">" }"</span>);
		i++;

		assert((t = tlv.get(i)).tag == ASN1.INTEGER);
		t.setName(<span class="literal">"minLength"</span>);
		<span class="reserved">this</span>.minLength = t.value.toSigned();
		i++;

		assert((t = tlv.get(i)).tag == ASN1.INTEGER);
		t.setName(<span class="literal">"storedLength"</span>);
		<span class="reserved">this</span>.storedLength = t.value.toSigned();
		i++;

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.INTEGER)) {
			t.setName(<span class="literal">"maxLength"</span>);
			<span class="reserved">this</span>.maxLength = t.value.toSigned();
			i++;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == 0x80)) {
			t.setName(<span class="literal">"pwdReference"</span>);
			<span class="reserved">this</span>.pwdReference = t.value.toSigned();
			i++;
		}
	}
}



<span class="comment">/**
 * Gets the password flags as string of concatenated flags.
 * <span class="attrib">@return</span> the string containing the flags separated by a blank
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_PasswordAuthenticationObject.<span class="reserved">prototype</span>.getPwdFlagsAsString = <span class="reserved">function</span>() {
	<span class="reserved">return</span>	(<span class="reserved">this</span>.pwdFlags &amp; 0x800000 ? <span class="literal">" case-sensitive"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x400000 ? <span class="literal">" local"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x200000 ? <span class="literal">" change-disabled"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x100000 ? <span class="literal">" unblock-disabled"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x080000 ? <span class="literal">" initialized"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x040000 ? <span class="literal">" needs-padding"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x020000 ? <span class="literal">" unblockingPassword"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x010000 ? <span class="literal">" soPassword"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x008000 ? <span class="literal">" disable-allowed"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x004000 ? <span class="literal">" integrity-protected"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x002000 ? <span class="literal">" confidentiality-protected"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x001000 ? <span class="literal">" exchangeRefData"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x000800 ? <span class="literal">" resetRetryCounter1"</span> : <span class="literal">""</span>) +
		(<span class="reserved">this</span>.pwdFlags &amp; 0x000400 ? <span class="literal">" resetRetryCounter2"</span> : <span class="literal">""</span>);
}



<span class="comment">/**
 * Gets the password type.
 * <span class="attrib">@return</span> the string containing the password type (BCD, ASCII-NUMERIC, UTF8, HALF-NIBBLE-BCD or ISO9564-1)
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_PasswordAuthenticationObject.<span class="reserved">prototype</span>.getPwdTypeAsString = <span class="reserved">function</span>() {

	var str = <span class="literal">""</span> + <span class="reserved">this</span>.pwdType;
	switch(<span class="reserved">this</span>.pwdType) {
		case  0 : str = <span class="literal">"BCD"</span>; break;
		case  1 : str = <span class="literal">"ASCII-NUMERIC"</span>; break;
		case  2 : str = <span class="literal">"UTF8"</span>; break;
		case  3 : str = <span class="literal">"HALF-NIBBLE-BCD"</span>; break;
		case  4 : str = <span class="literal">"ISO9564-1"</span>; break;
	}
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Convert the object to a human readable string
 *
 * <span class="attrib">@return</span> the string representation of the object
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_PasswordAuthenticationObject.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {
	var str = <span class="literal">"Password { "</span>;

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.pwdFlags) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"pwdFlags="</span> + <span class="reserved">this</span>.getPwdFlagsAsString() + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.pwdType) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"pwdType="</span> + <span class="reserved">this</span>.getPwdTypeAsString() + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.minLength) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"minLength="</span> + <span class="reserved">this</span>.minLength + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.storedLength) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"storedLength="</span> + <span class="reserved">this</span>.storedLength + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.maxLength) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"maxLength="</span> + <span class="reserved">this</span>.maxLength + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.pwdReference) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"pwdReference="</span> + <span class="reserved">this</span>.pwdReference + <span class="literal">",\n"</span>;
	}

	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Create a Common Data Container Object Attribute Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds common data container attributes to the base CIO class.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax:&lt;/p&gt;
 * &lt;pre&gt;
 * CommonDataContainerObjectAttributes ::= SEQUENCE {
 * 		applicationName Label OPTIONAL,
 * 		applicationOID OBJECT IDENTIFIER OPTIONAL,
 * 		iD Identifier OPTIONAL,
 * 		... -- For future extensions
 * 		} (WITH COMPONENTS {..., applicationName PRESENT}
 * 		| WITH COMPONENTS {..., applicationOID PRESENT})
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CIO PKCS15_CIO is the base class
 */</span>
<span class="reserved">function</span> PKCS15_CommonDataContainerObjectAttributes(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CIO.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {
		var tlv = tlv.get(1);
		tlv.setName(<span class="literal">"commonDataContainerObjectAttributes"</span>);
		var i = 0;
		var t;

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.UTF8String)) {
			t.setName(<span class="literal">"applicationName"</span>);
			<span class="reserved">this</span>.applicationName = t.value.toString(UTF8);
			i++;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.OBJECT_IDENTIFIER)) {
			t.setName(<span class="literal">"applicationOID"</span>);
			<span class="reserved">this</span>.applicationOID = t.value.toString(OID);
			i++;
		}

		<span class="reserved">if</span> ((i &lt; tlv.elements) &amp;&amp; ((t = tlv.get(i)).tag == ASN1.ASN1.OCTET_STRING)) {
			t.setName(<span class="literal">"iD"</span>);
			<span class="reserved">this</span>.iD = t.value;
			i++;
		}
	}
}

PKCS15_CommonDataContainerObjectAttributes.<span class="reserved">prototype</span> = new PKCS15_CIO();



<span class="comment">/**
 * Convert the object to a human readable string
 *
 * <span class="attrib">@return</span> the string representation of the object
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_CommonDataContainerObjectAttributes.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {

	var str = PKCS15_CIO.<span class="reserved">prototype</span>.toString.call(<span class="reserved">this</span>);
	str += <span class="literal">"\nCommonDataContainerObjectAttributes { "</span>;

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.applicationName) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"applicationName="</span> + <span class="reserved">this</span>.applicationName + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.applicationOID) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"applicationOID="</span> + <span class="reserved">this</span>.applicationOID + <span class="literal">",\n"</span>;
	}

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.iD) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"iD="</span> + <span class="reserved">this</span>.iD + <span class="literal">",\n"</span>;
	}

	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Create a Data Container Object
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class adds data container objects to the common data container object attributes class.&lt;/p&gt;
 * &lt;p&gt;The class decodes the following ASN.1 syntax for opaque data objects with indirect path reference:&lt;/p&gt;
 * &lt;pre&gt;
 * OpaqueDOAttributes ::= ObjectValue {CIO-OPAQUE.&amp;Type}
 *
 * ObjectValue { Type } ::= CHOICE {
 * 		indirect ReferencedValue,
 * 		direct [0] Type,
 * 		... -- For future extensions
 * }
 *
 * ReferencedValue ::= CHOICE {
 * 		path Path,
 * 		url URL
 * } -- The syntax of the object is determined by the context
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the CIO
 * <span class="attrib">@see</span> PKCS15_CommonDataContainerObjectAttributes PKCS15_CommonDataContainerObjectAttributes is the base class
 */</span>
<span class="reserved">function</span> PKCS15_DataContainerObject(tlv) {
	<span class="comment">// Call superclass constructor</span>
	PKCS15_CommonDataContainerObjectAttributes.call(<span class="reserved">this</span>, tlv);

	<span class="reserved">if</span> (tlv &amp;&amp; (tlv instanceof ASN1)) {

		var t = tlv.get(2);
		assert(t.tag == 0xA1);
		assert(t.elements == 1);
		t.setName(<span class="literal">"typeAttributes"</span>);
		t = t.get(0);
		t.setName(<span class="literal">"dataContainerAttributes"</span>);

		switch(tlv.tag) {
		case 0x30: <span class="reserved">this</span>.decodeOpaqueDOIndirectPath(t); break;
		default:
			print(<span class="literal">"### Unsupported data container object type : "</span> + t);
		}
	}
}

PKCS15_DataContainerObject.<span class="reserved">prototype</span> = new PKCS15_CommonDataContainerObjectAttributes();



<span class="comment">/**
 * Decodes an oqaque data object.
 *
 * <span class="attrib">@private</span>
 * <span class="attrib">@param</span> {ASN1} the tlv structure containing the opaque data object
 */</span>
PKCS15_DataContainerObject.<span class="reserved">prototype</span>.decodeOpaqueDOIndirectPath = <span class="reserved">function</span>(tlv) {
	<span class="reserved">this</span>.type = <span class="literal">"OpaqueDOIndirectPath"</span>;
	tlv.setName(<span class="literal">"OpaqueDOIndirectPath"</span>);

	<span class="reserved">this</span>.indirectPath = new PKCS15_Path(tlv);
}



<span class="comment">/**
 * Convert the object to a human readable string
 *
 * <span class="attrib">@return</span> the string representation of the object
 * <span class="attrib">@type</span> String
 */</span>
PKCS15_DataContainerObject.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span>() {

	var str = PKCS15_CommonDataContainerObjectAttributes.<span class="reserved">prototype</span>.toString.call(<span class="reserved">this</span>);
	str += <span class="literal">"\nDataContainerObject { "</span>;

	<span class="reserved">if</span> (typeof(<span class="reserved">this</span>.indirectPath) != <span class="literal">"undefined"</span>) {
		str += <span class="literal">"indirectPath="</span> + <span class="reserved">this</span>.indirectPath + <span class="literal">",\n"</span>;
	}

	str += <span class="literal">"}"</span>;
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Create an object to access the PKCS#15 structure on a card.
 *
 * <span class="attrib">@class</span> &lt;p&gt;This class provides for direct access to a PKCS#15 data structure on a card.&lt;/p&gt;
 * &lt;p&gt;The calling application will typically use:&lt;/p&gt;
 * &lt;pre&gt;
 * var card = new Card(_scsh3.reader);
 * var p15 = new PKCS15(card);
 * var appllist = p15.readApplicationDirectory();
 * var aid;
 * for (var i in appllist) {
 *   print(i);
 *   aid = i;
 * }
 * var at = appllist[aid];
 * p15.readObjectListForApplication(at);
 * for (var i = 0; i &lt; at.objlist.length; i++) {
 *   print(at.objlist[i]);
 * }
 * &lt;/pre&gt;
 * <span class="attrib">@constructor</span>
 * <span class="attrib">@param</span> {Card} card the card object to use for card access.
 */</span>
<span class="reserved">function</span> PKCS15(card) {
	<span class="reserved">this</span>.card = card;
}



<span class="comment">/**
 * Reads the application directory from EF_DIR.
 *
 * &lt;p&gt;The method supports linear variable and transparent EFs. It creates an internal table of
 *    of applications.&lt;/p&gt;
 *
 * <span class="attrib">@return</span> hash table of application templates index by application identifier
 * <span class="attrib">@type</span> PKCS15_ApplicationTemplate[]
 */</span>
PKCS15.<span class="reserved">prototype</span>.readApplicationDirectory = <span class="reserved">function</span>() {
	<span class="reserved">this</span>.ef_dir = new CardFile(<span class="reserved">this</span>.card, <span class="literal">":3F00:2F00"</span>);

	<span class="reserved">this</span>.aidlist = new Array();

	<span class="reserved">if</span> (<span class="reserved">this</span>.ef_dir.isTransparent()) {
		var data = <span class="reserved">this</span>.ef_dir.readBinary();
<span class="comment">//		print(data);</span>

		<span class="reserved">while</span>((data.length &gt; 0) &amp;&amp; (data.byteAt(0) == 0x61)) {
			var tlv = new ASN1(data);
<span class="comment">//			print(tlv);</span>
			data = data.bytes(tlv.size);
<span class="comment">//			print(data);</span>

			var at = new PKCS15_ApplicationTemplate(tlv);
			<span class="reserved">this</span>.aidlist[at.aid] = at;
		}

	} <span class="reserved">else</span> {
		var rec = 1;
		<span class="reserved">while</span>(rec &lt; 256) {
			var data;
			try {
				data = <span class="reserved">this</span>.ef_dir.readRecord(rec);
			}
			catch(e) {
				<span class="reserved">if</span> (!(e instanceof GPError) || (e.error != GPError.CARD_COMM_ERROR)) {
					print(e);
					throw(e);
				}
				break;
			}

			var tlv = new ASN1(data);
			var at = new PKCS15_ApplicationTemplate(tlv);
			<span class="reserved">this</span>.aidlist[at.aid] = at;
			rec++;
		}
	}
	<span class="reserved">return</span> <span class="reserved">this</span>.aidlist;
}



<span class="comment">/**
 * Reads from the transparent file referenced in the PKCS#15 path object.
 *
 * <span class="attrib">@private</span>
 * <span class="attrib">@param</span> {String} df the current DF in OCF path notation.
 * <span class="attrib">@param</span> {PKCS15_Path} path the relative or absolute path to the EF
 * <span class="attrib">@return</span> the content of the file
 * <span class="attrib">@type</span> ByteString
 */</span>
PKCS15.<span class="reserved">prototype</span>.readCardObject = <span class="reserved">function</span>(df, path) {

	var p = path.getAbsolutePath(df);
	print(<span class="literal">"Reading from: "</span> + p);
	var ef = new CardFile(<span class="reserved">this</span>.card, p);
	var data;
	<span class="reserved">if</span> (path.index) {
		data = ef.readBinary(path.index, path.length);
	} <span class="reserved">else</span> {
		var len = ef.getLength();
		data = ef.readBinary(0, len);
	}
	<span class="reserved">return</span> data;
}



<span class="comment">/**
 * Parse a list of TLV objects
 *
 * <span class="attrib">@param</span> {ByteString} data the binary data with TLV objects
 * <span class="attrib">@return</span> the list of ASN1 objects
 * <span class="attrib">@type</span> ASN1[]
 */</span>
PKCS15.parseObjectList = <span class="reserved">function</span>(data) {

	var list = new Array();
	var len = data.length;

	<span class="reserved">while</span>(len &gt; 0) {
		<span class="reserved">if</span> ((data.byteAt(0) == 0x00) || (data.byteAt(0) == 0xFF)) {
			len--;
			data = data.bytes(1);
		} <span class="reserved">else</span> {
<span class="comment">//			print(data);</span>
			var tlv = new ASN1(data);
			var tlvsize = tlv.size;
			len -= tlvsize;
			data = data.bytes(tlvsize);
			list.push(tlv);
<span class="comment">//			print("parseObjectList: " + tlv);</span>
		}
	}
	<span class="reserved">return</span> list;
}



<span class="comment">/**
 * Reads PKCS#15 objects from card file which can be either transparent or record oriented.
 *
 * <span class="attrib">@param</span> {String} df the current DF in OCF path notation.
 * <span class="attrib">@param</span> {PKCS15_Path} path the relative or absolute path to the EF
 * <span class="attrib">@return</span> the array of TLV objects read from the file
 * <span class="attrib">@type</span> ASN1[]
 */</span>
PKCS15.<span class="reserved">prototype</span>.readCardObjects = <span class="reserved">function</span>(df, path) {

	var p = path.getAbsolutePath(df);
	print(<span class="literal">"Reading from: "</span> + p);
	var ef = new CardFile(<span class="reserved">this</span>.card, p);
	var list = new Array();

	var isTransparent = true;
	try	{
		isTransparent = ef.isTransparent();
	}
	catch(e) {
		<span class="comment">// Ignore</span>
	}
	<span class="reserved">if</span> (isTransparent) {
		var data;
		<span class="reserved">if</span> (path.index) {
			data = ef.readBinary(path.index, path.length);
		} <span class="reserved">else</span> {
			try	{
				var len = ef.getLength();
				data = ef.readBinary(0, len);
			}
			catch(e) {
				data = ef.readBinary(0);
			}
		}

		var len = data.length;

		try	{
			<span class="reserved">while</span>(len &gt; 0) {
				<span class="reserved">if</span> ((data.byteAt(0) == 0x00) || (data.byteAt(0) == 0xFF)) {
					len--;
					data = data.bytes(1);
				} <span class="reserved">else</span> {
<span class="comment">//					print(data);</span>
					var tlv = new ASN1(data);
					var tlvsize = tlv.size;
					len -= tlvsize;
					data = data.bytes(tlvsize);
					list.push(tlv);
<span class="comment">//					print("readCardObjects: " + tlv);</span>
				}
			}
		}
		catch(e) {
			print(<span class="literal">"Error reading cryptographic information object: "</span> + e);
			print(data);
		}
	} <span class="reserved">else</span> {
		var rec = 1;
		<span class="reserved">while</span>(rec &lt; 256) {
			var data;
			try {
				data = ef.readRecord(rec);
			}
			catch(e) {
				<span class="reserved">if</span> (!(e instanceof GPError) || (e.error != GPError.CARD_COMM_ERROR)) {
					print(e);
					throw(e);
				}
				break;
			}

			data = data.bytes(2);	<span class="comment">// Strip of first two bytes</span>
<span class="comment">//			print("Data : " + data);</span>
			<span class="reserved">if</span> (data.length &gt; 2) {	<span class="comment">// Record might be empty</span>
				try	{
					var tlv = new ASN1(data);
					list.push(tlv);
<span class="comment">//					print("readCardObjects: " + tlv);</span>
				}
				catch(e) {
					print(<span class="literal">"Error reading cryptographic information object: "</span> + e);
					print(data);
				}
			}
			rec++;
		}
	}
	<span class="reserved">return</span> list;
}



<span class="comment">/**
 * Reads all CIO objects for an application and adds the CIO objects to the objlist property
 *
 * <span class="attrib">@param</span> {PKCS15_ApplicationTemplate} at the application template
 */</span>
PKCS15.<span class="reserved">prototype</span>.readObjectListForApplication = <span class="reserved">function</span>(at) {
	<span class="reserved">if</span> (!at.ddo) {
		throw new Error(<span class="literal">"Application has no PKCS#15 information"</span>);
	}

	<span class="reserved">if</span> (!at.ddo.odfPath) {
		throw new Error(<span class="literal">"Application has no odfPath"</span>);
	}

	at.objlist = new Array();

	var dos = <span class="reserved">this</span>.readCardObjects(<span class="literal">":3F00"</span>, at.ddo.odfPath);

	<span class="comment">// Determine current DF</span>
	var df = at.ddo.odfPath.getAbsolutePath(<span class="literal">":3F00"</span>);
	df = df.slice(0, -5);
	<span class="reserved">this</span>.df = df;

	<span class="reserved">for</span> (var i = 0; i &lt; dos.length; i++) {
		var tlv = dos[i];
		assert(tlv.isconstructed);
		var ciotype = tlv.tag;
		var path = new PKCS15_Path(tlv.get(0));

<span class="comment">//		print("Path = " + path);</span>
		try	{
			var cios = <span class="reserved">this</span>.readCardObjects(df, path);
		}
		catch(e) {
			print(e);
			continue;
		}

		<span class="reserved">for</span> (var j = 0; j &lt; cios.length; j++) {
			var tlv = cios[j];

			var cio;
			switch(ciotype) {
				case 0xA0:
					cio = new PKCS15_PrivateKey(tlv);
<span class="comment">//					cio.type = "PrivateKey";</span>
					break;
				case 0xA1:
<span class="comment">//					cio = new PKCS15_PublicKey(tlv);</span>
					cio = new PKCS15_CIO(tlv);
					cio.type = <span class="literal">"PublicKey"</span>;
					break;
				case 0xA2:
<span class="comment">//					cio = new PKCS15_PublicKey(tlv);</span>
					cio = new PKCS15_CIO(tlv);
					cio.type = <span class="literal">"TrustedPublicKey"</span>;
					break;
				case 0xA3:
<span class="comment">//					cio = new PKCS15_SecretKey(tlv);</span>
					cio = new PKCS15_CIO(tlv);
					cio.type = <span class="literal">"SecretKey"</span>;
					break;
				case 0xA4:
					cio = new PKCS15_Certificate(tlv);
<span class="comment">//					cio.type = "Certificate";</span>
					break;
				case 0xA5:
					cio = new PKCS15_Certificate(tlv);
					cio.type = <span class="literal">"Trusted"</span> + cio.type;
					break;
				case 0xA6:
					cio = new PKCS15_Certificate(tlv);
					cio.type = <span class="literal">"Useful"</span> + cio.type;
					break;
				case 0xA7:
					cio = new PKCS15_DataContainerObject(tlv);
					cio.type = <span class="literal">"DataContainerObject"</span>;
					break;
				case 0xA8:
					cio = new PKCS15_AuthenticationObject(tlv);
					cio.type = <span class="literal">"AuthObject"</span>;
					break;
				default:
					assert(false);
			}
			at.objlist.push(cio);
		}
	}
}



<span class="comment">/**
 * Reads and return the CIAInfo structure referenced by the PKCS#15 path element.
 *
 * <span class="attrib">@param</span> {PKCS15_Path} path the path to the CIAInfo file
 * <span class="attrib">@return</span> the CIAInfo description
 * <span class="attrib">@type</span> PKCS15_CIAInfo
 */</span>
PKCS15.<span class="reserved">prototype</span>.getCIAInfo = <span class="reserved">function</span>(path) {

	var cia = <span class="reserved">this</span>.readCardObject(<span class="literal">":3F00"</span>, path);
	var tlv = new ASN1(cia);
	<span class="reserved">return</span> new PKCS15_CIAInfo(tlv);
}



<span class="comment">/**
 * Return the hash table of application templates
 *
 * <span class="attrib">@return</span> the hash table of application templates
 * <span class="attrib">@type</span> PKCS15_ApplicationTemplate[]
 */</span>
PKCS15.<span class="reserved">prototype</span>.getAidList = <span class="reserved">function</span>() {
	<span class="reserved">return</span> <span class="reserved">this</span>.aidlist;
}

</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="pkcs10.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>pkcs10.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		A PKCS#10 generator class based on RFC5280<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS10Generator.html">PKCS10Generator</a></b></td>
    <td>Class implementing a PKCS#10 certificate request
 </td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

	<a name="method_summary"><!-- --></a>
	<table border="1" cellpadding="3" cellspacing="0" width="100%">
		<tr bgcolor="#CCCCFF" class="TableHeadingColor">
			<td colspan=2>
				<font size="+2">
					<b>Method Summary</b>
				</font>
			</td>
		</tr>
	
		
		   <tr bgcolor="white" class="TableRowColor">
		      <td align="right" valign="top" width="1%">
			 <font size="-1">
			    <code>static&nbsp;Object</code>
			 </font>
		      </td>
		      <td>
			 <code>
			    <b>
			       <a href="GLOBALS.html#!s!PKCS10GeneratorTest">PKCS10GeneratorTest</a></b>()
			 </code>
			 <br>
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			 
		      </td>
		   </tr>
		
	
	</table>
    <p>

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * <span class="attrib">@fileoverview</span> A PKCS#10 generator class based on RFC5280
 */</span>

load(<span class="literal">"pkixcommon.js"</span>);


<span class="comment">/**
 * Create a PKCS#10 certificate request
 *
 * <span class="attrib">@class</span> Class implementing a PKCS#10 certificate request
 * <span class="attrib">@constructor</span>
 *
 * <span class="attrib">@param</span> {Crypto} crypto the crypto provider to use for signing operations
 */</span>
<span class="reserved">function</span> PKCS10Generator(crypto) {
	<span class="reserved">this</span>.crypto = crypto;
	<span class="reserved">this</span>.reset();
}



<span class="comment">/**
 * Resets all internal state variables.
 *
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.reset = <span class="reserved">function</span>() {
	<span class="reserved">this</span>.extensions = new Array();
	<span class="reserved">this</span>.attributes = new Array();
}



<span class="comment">/**
 * Sets the subject name.
 *
 * &lt;p&gt;The subject name must be a JavaScript object containing the properties:&lt;/p&gt;
 * &lt;ul&gt;
 *  &lt;li&gt;C - the country&lt;/li&gt;
 *  &lt;li&gt;O - the organization&lt;/li&gt;
 *  &lt;li&gt;OU - the organization unit&lt;/li&gt;
 *  &lt;li&gt;CN - the common name&lt;/li&gt;
 * &lt;/ul&gt;
 * &lt;p&gt;Example:&lt;/p&gt;
 * &lt;pre&gt;
 *	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
 * &lt;/pre&gt;
 * <span class="attrib">@see</span> PKIXCommon.encodeName()
 * <span class="attrib">@param</span> {Object} subject the subject name
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.setSubject = <span class="reserved">function</span>(subject) {
	<span class="reserved">this</span>.subject = subject;
}



<span class="comment">/**
 * Sets the subjects public key
 *
 * &lt;p&gt;The methods accepts ECC and RSA Public Keys.&lt;/p&gt;
 *
 * <span class="attrib">@param</span> {Key} publicKey the subjects public key
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.setPublicKey = <span class="reserved">function</span>(publicKey) {
	<span class="reserved">this</span>.publicKey = publicKey;
}



<span class="comment">/**
 * Sets the signature algorithm. Currently only Crypto.RSA is supported
 *
 * <span class="attrib">@param</span> {Number} alg the signature algorithm, only Crypto.RSA supported
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.setSignatureAlgorithm = <span class="reserved">function</span>(alg) {
	<span class="reserved">this</span>.signatureAlgorithm = alg;
}



<span class="comment">/**
 * Adds an extension to the certificate
 *
 * &lt;p&gt;The structure is defined as:&lt;/p&gt;
 * &lt;pre&gt;
 *    Extension  ::=  SEQUENCE  {
 *        extnID      OBJECT IDENTIFIER,
 *        extnValue   OCTET STRING
 *                    -- contains the DER encoding of an ASN.1 value
 *                    -- corresponding to the extension type identified
 *                    -- by extnID
 *        }
 *&lt;/pre&gt;
 * <span class="attrib">@param</span> {String} extnID the extensions object identifier
 * <span class="attrib">@param</span> {ByteString} the extension value as ByteString
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.addExtension = <span class="reserved">function</span>(extnID, extnValue) {
	var t = new ASN1(<span class="literal">"extension"</span>, ASN1.SEQUENCE,
				new ASN1(<span class="literal">"extnID"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(extnID, OID))
			);

	t.add(new ASN1(<span class="literal">"extnValue"</span>, ASN1.OCTET_STRING, extnValue));
	<span class="reserved">this</span>.extensions.push(t);
}



<span class="comment">/**
 * Adds the key usage extension.
 *
 * &lt;p&gt;The following flags are defined:&lt;/p&gt;
 * &lt;pre&gt;
 * PKCS10Generator.digitalSignature = 0x0080;
 * PKCS10Generator.nonRepudiation   = 0x0040;
 * PKCS10Generator.keyEncipherment  = 0x0020;
 * PKCS10Generator.dataEncipherment = 0x0010;
 * PKCS10Generator.keyAgreement     = 0x0008;
 * PKCS10Generator.keyCertSign      = 0x0004;
 * PKCS10Generator.cRLSign          = 0x0002;
 * PKCS10Generator.encipherOnly     = 0x0001;
 * PKCS10Generator.decipherOnly     = 0x8000;
 * &lt;/pre&gt;
 * <span class="attrib">@param</span> {Number} the key usage flags as combination of the flags defined above.
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.addKeyUsageExtension = <span class="reserved">function</span>(flags) {
	var t = new ASN1(ASN1.BIT_STRING, PKIXCommon.bitstringForInteger(flags));
	<span class="reserved">this</span>.addExtension(<span class="literal">"2.5.29.15"</span>, t.getBytes());
}

<span class="comment">// Deprecated: Use PKIXCommon. instead</span>
PKCS10Generator.digitalSignature	= 0x0080;
PKCS10Generator.nonRepudiation		= 0x0040;
PKCS10Generator.keyEncipherment		= 0x0020;
PKCS10Generator.dataEncipherment	= 0x0010;
PKCS10Generator.keyAgreement		= 0x0008;
PKCS10Generator.keyCertSign			= 0x0004;
PKCS10Generator.cRLSign				= 0x0002;
PKCS10Generator.encipherOnly		= 0x0001;
PKCS10Generator.decipherOnly		= 0x8000;



<span class="comment">/**
 * Adds extended key usages
 *
 * <span class="attrib">@param</span> {String[]} the list of extended key usage object identifier
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.addExtendedKeyUsageExtension = <span class="reserved">function</span>(keyusages) {
	var t = new ASN1(ASN1.SEQUENCE);
	<span class="reserved">for</span> (var i = 0; i &lt; keyusages.length; i++) {
		t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString(keyusages[i], OID)));
	}
	<span class="reserved">this</span>.addExtension(<span class="literal">"id-ce-extKeyUsage"</span>, t.getBytes());
}



<span class="comment">/**
 * Adds the BasicConstraints extension.
 *
 * <span class="attrib">@param</span> {Boolean} cA the certificate belongs to a CA
 * <span class="attrib">@param</span> {Number} pathLenConstraint the maximum number of subordinate CA certificates
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.addBasicConstraintsExtension = <span class="reserved">function</span>(cA, pathLenConstraint) {
	var t = new ASN1(<span class="literal">"BasicConstraints"</span>,ASN1.SEQUENCE);
	<span class="reserved">if</span> (cA) {
		t.add(new ASN1(<span class="literal">"cA"</span>, ASN1.BOOLEAN, new ByteString(<span class="literal">"FF"</span>, HEX)));
	}
	<span class="reserved">if</span> (pathLenConstraint &gt;= 0) {
		var bb = new ByteBuffer();
		bb.append(pathLenConstraint);
		t.add(new ASN1(<span class="literal">"pathLenConstraint"</span>, ASN1.INTEGER, bb.toByteString()));
	}
	<span class="reserved">this</span>.addExtension(<span class="literal">"2.5.29.19"</span>, t.getBytes());
}



<span class="comment">/**
 * Gets the subject name as TLV object
 *
 * <span class="attrib">@return</span> the issuer RDNSequence
 * <span class="attrib">@type</span> ASN1
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.getSubject = <span class="reserved">function</span>() {
	<span class="reserved">return</span> PKIXCommon.encodeName(<span class="reserved">this</span>.subject);
}



<span class="comment">/**
 * Gets the subject's public key as TLV object
 *
 * <span class="attrib">@return</span> the subject's public key info
 * <span class="attrib">@type</span> ASN1
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.getSubjectPublicKeyInfo = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (<span class="reserved">this</span>.publicKey.getComponent(Key.MODULUS)) {
		<span class="reserved">return</span> PKIXCommon.createRSASubjectPublicKeyInfo(<span class="reserved">this</span>.publicKey);
	} <span class="reserved">else</span> {
		<span class="reserved">return</span> PKIXCommon.createECSubjectPublicKeyInfo(<span class="reserved">this</span>.publicKey, <span class="reserved">this</span>.encodeECDomainParameter);
	}
}



<span class="comment">/**
 * Gets the extension attribute as TLV object
 *
 * <span class="attrib">@return</span> the certificate extensions
 * <span class="attrib">@type</span> ASN1
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.getExtensions = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"extensions"</span>, ASN1.SEQUENCE);
	t.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"1.2.840.113549 1 9 14"</span>, OID)));
	var s = new ASN1(<span class="literal">"extensions"</span>, ASN1.SET);
	t.add(s);
	var l = new ASN1(<span class="literal">"extensions"</span>, ASN1.SEQUENCE);
	s.add(l);
	
	<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.extensions.length; i++) {
		l.add(<span class="reserved">this</span>.extensions[i]);
	}
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Gets the attributes as TLV object
 *
 * <span class="attrib">@return</span> the request attributes
 * <span class="attrib">@type</span> ASN1
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.getAttributes = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"attributes"</span>, 0xA0);
	
	<span class="reserved">if</span> (<span class="reserved">this</span>.extensions.length &gt; 0) {
		t.add(<span class="reserved">this</span>.getExtensions());
	}
	
	<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.attributes.length; i++) {
		t.add(<span class="reserved">this</span>.attributes[i]);
	}
	
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Gets the part of the request that will be signed
 *
 * <span class="attrib">@return</span> the TBSCertificate part
 * <span class="attrib">@type</span> ASN1
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.getTbsRequest = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"certificationRequestInfo"</span>, ASN1.SEQUENCE);
	t.add(new ASN1(ASN1.INTEGER, new ByteString(<span class="literal">"00"</span>, HEX)));
	t.add(<span class="reserved">this</span>.getSubject());
	t.add(<span class="reserved">this</span>.getSubjectPublicKeyInfo());
	t.add(<span class="reserved">this</span>.getAttributes());
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Gets the signature algorithm TLV object
 *
 * <span class="attrib">@return</span> the signature algorithm object
 * <span class="attrib">@type</span> ASN1
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.getSignatureAlgorithm = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"signatureAlgorithm"</span>, ASN1.SEQUENCE);

	<span class="reserved">if</span> (<span class="reserved">this</span>.signatureAlgorithm == Crypto.RSA) {
		t.add(new ASN1(<span class="literal">"algorithm"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"1.2.840.113549.1.1.5"</span>, OID)));
		t.add(new ASN1(<span class="literal">"parameters"</span>, ASN1.NULL, new ByteString(<span class="literal">""</span>, HEX)));
	} <span class="reserved">else</span> <span class="reserved">if</span> (<span class="reserved">this</span>.signatureAlgorithm == Crypto.RSA_SHA256) {
		t.add(new ASN1(<span class="literal">"algorithm"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"1 2 840 113549 1 1 11"</span>, OID)));
		t.add(new ASN1(<span class="literal">"parameters"</span>, ASN1.NULL, new ByteString(<span class="literal">""</span>, HEX)));
	} <span class="reserved">else</span> {
		throw new GPError(<span class="literal">"PKCS10Generator"</span>, GPError.INVALID_MECH, <span class="reserved">this</span>.signatureAlgorithm, <span class="literal">"Invalid algorithm"</span>);
	}
		
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Generates the certificate.
 *
 * <span class="attrib">@return</span> the generated certificate
 * <span class="attrib">@type</span> ASN1
 */</span>
PKCS10Generator.<span class="reserved">prototype</span>.generateCertificationRequest = <span class="reserved">function</span>(privateKey) {
	var request = new ASN1(<span class="literal">"certificationRequest"</span>, ASN1.SEQUENCE);
	
	var tbs = <span class="reserved">this</span>.getTbsRequest();
	request.add(tbs);
	request.add(<span class="reserved">this</span>.getSignatureAlgorithm());
	
	var signature = <span class="reserved">this</span>.crypto.sign(privateKey, <span class="reserved">this</span>.signatureAlgorithm, tbs.getBytes());
	signature = (new ByteString(<span class="literal">"00"</span>, HEX)).concat(signature);

	var signatureValue = new ASN1(<span class="literal">"signatureValue"</span>, ASN1.BIT_STRING, signature);
	request.add(signatureValue);
	
	<span class="reserved">return</span> request;
}



<span class="reserved">function</span> PKCS10GeneratorTest() {

	var crypto = new Crypto();
	
	var reqPrivateKey = new Key();
	reqPrivateKey.setType(Key.PRIVATE);

	var reqPublicKey = new Key();
	reqPublicKey.setType(Key.PUBLIC);
	reqPublicKey.setSize(1024);
	
	crypto.generateKeyPair(Crypto.RSA, reqPublicKey, reqPrivateKey);
	
	var x = new PKCS10Generator(crypto);

	x.reset();
	x.setSignatureAlgorithm(Crypto.RSA_SHA256);

	var subject = [{C:<span class="literal">"UT"</span>}, {O:<span class="literal">"Utopia CA"</span>}, {OU:<span class="literal">"ACME Corporation"</span>}, {CN:<span class="literal">"Joe Doe"</span>} ];
	
	x.setSubject(subject);

	x.setPublicKey(reqPublicKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );

	var req = x.generateCertificationRequest(reqPrivateKey);
	var fn = GPSystem.mapFilename(<span class="literal">"cert.csr"</span>, GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, req.getBytes());

	print(req);
	
	<span class="reserved">return</span> req;
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="pkcs8.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>pkcs8.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		Basic helper functions to convert PKCS#8 data to GP keys and vice versa<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKCS8.html">PKCS8</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * <span class="attrib">@fileoverview</span> Basic helper functions to convert PKCS#8 data to GP keys and vice versa
 */</span>



<span class="comment">/**
 * Empty constructor
 */</span>
<span class="reserved">function</span> PKCS8() {
}



PKCS8.idEcPublicKey = new ByteString(<span class="literal">"id-ecPublicKey"</span>, OID);
PKCS8.rsaEncryption = new ByteString(<span class="literal">"1.2.840.113549.1.1.1"</span>, OID);

<span class="comment">/**
 * Convert x/y coordinates to uncompressed format
 *
 * <span class="attrib">@param</span> {ByteString} x the x coordinate
 * <span class="attrib">@param</span> {ByteString} y the y coordinate
 * <span class="attrib">@type</span> ByteString
 * <span class="attrib">@return</span> ByteString containing compressed format
 *
 */</span> 
PKCS8.encodeUncompressedECPoint = <span class="reserved">function</span>(x,y) {

	bb = new ByteBuffer();

	<span class="comment">// uncompressed encoding</span>
	bb.append(new ByteString(<span class="literal">"04"</span>, HEX));
	bb.append(x);
	bb.append(y);

	<span class="reserved">return</span> bb.toByteString();
}



<span class="comment">/**
 * Convert uncompressed format to x and y coordinates
 *
 * <span class="attrib">@param</span> {ByteString} compressed point
 * <span class="attrib">@type</span> Object
 * <span class="attrib">@return</span> Object with ByteString properties x and y
 *
 */</span> 
PKCS8.decodeUncompressedECPoint = <span class="reserved">function</span>(uncompressedPoint) {

	<span class="comment">// Determine the size of the coordinates ignoring the indicator byte '04'</span>
	var length = uncompressedPoint.length - 1;

	var sizeOfCoordinate = length &gt;&gt; 1;

	var xValue = uncompressedPoint.bytes(1, sizeOfCoordinate);
	var yValue = uncompressedPoint.bytes(1 + sizeOfCoordinate, sizeOfCoordinate);

	<span class="reserved">return</span> { x:xValue, y:yValue };
} 



<span class="comment">/**
 * Integer to octet string conversion
 *
 * <span class="attrib">@param</span> {ByteString} value the encoded integer value
 * <span class="attrib">@param</span> {Number} the number of digits
 * <span class="attrib">@type</span> ByteString
 * <span class="attrib">@return</span> the truncated or padded result
 */</span>
PKCS8.I2O = <span class="reserved">function</span>(value, length) {
	<span class="reserved">if</span> (value.length &gt; length) {
		value = value.right(length);
	}
	<span class="reserved">while</span> (value.length &lt; length) {
		value = PKCS8.PAD.left((length - value.length - 1 &amp; 15) + 1).concat(value);
	}
	<span class="reserved">return</span> value;
}
PKCS8.PAD = new ByteString(<span class="literal">"00000000000000000000000000000000"</span>, HEX);



<span class="comment">/**
 * Strips leading zeros of a ByteString
 *
 * <span class="attrib">@param</span> {ByteString} value the ByteString value
 * <span class="attrib">@return</span> the stripped ByteString object, may be an empty ByteString
 * <span class="attrib">@type</span> ByteString
 */</span>
PKCS8.stripLeadingZeros = <span class="reserved">function</span>(value, size) {
	<span class="reserved">if</span> (typeof(size) == <span class="literal">"undefined"</span>) {
		var limit = value.length;
	} <span class="reserved">else</span> {
		limit = value.length - size;
	}
	
	var i = 0;
	<span class="reserved">for</span> (; (i &lt; limit) &amp;&amp; (value.byteAt(i) == 0); i++);
	
	<span class="reserved">return</span> value.bytes(i);
}



<span class="comment">/**
 * Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
 *
 * This prevent interpretation of the integer representation if converted into
 * a signed ASN1 INTEGER.
 *
 * <span class="attrib">@param</span> {ByteString} value the value to convert
 * <span class="attrib">@return</span> the converted value
 * <span class="attrib">@type</span> ByteString
 */</span>
PKCS8.convertUnsignedInteger = <span class="reserved">function</span>(value) {
	assert(value.length &gt; 0);
	
	var i = 0;
	<span class="reserved">for</span> (; (i &lt; value.length - 1) &amp;&amp; (value.byteAt(i) == 0); i++);
	
	<span class="reserved">if</span> (value.byteAt(i) &gt;= 0x80) {
		value = (new ByteString(<span class="literal">"00"</span>, HEX)).concat(value.bytes(i));
	} <span class="reserved">else</span> {
		value = value.bytes(i);
	}
	
	<span class="reserved">return</span> value;
}



<span class="comment">/**
 * Encode a given GP ECC private key as specified by the PKCS#8 format
 *
 * <span class="attrib">@param</span> {Key} the private key object that should be encoded
 * <span class="attrib">@return</span> the encoded PKCS#8 private key
 * <span class="attrib">@type</span> ByteString
 */</span>
PKCS8.encodeECCKeyUsingPKCS8Format = <span class="reserved">function</span>(privateKey) {
	var privateKeyInfo = new ASN1(ASN1.SEQUENCE);
	
	<span class="comment">// Set the version number - must be zero</span>
	privateKeyInfo.add(new ASN1(ASN1.INTEGER, new ByteString(<span class="literal">"00"</span>, HEX)));
	
	var privateKeyAlgorithm = new ASN1(ASN1.SEQUENCE);
	privateKeyAlgorithm.add(new ASN1(ASN1.OBJECT_IDENTIFIER, PKCS8.idEcPublicKey));
	
	var domainInfo = new ASN1(ASN1.SEQUENCE);
	
	<span class="comment">// Cofactor - must be 1</span>
	domainInfo.add(new ASN1(ASN1.INTEGER, PKCS8.stripLeadingZeros(privateKey.getComponent(Key.ECC_H))));
	
	var field = new ASN1(ASN1.SEQUENCE);
	
	<span class="comment">// we are using a prime field</span>
	field.add(new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"prime-field"</span>, OID))); <span class="comment">// prime field</span>
	
	var primeOrder = privateKey.getComponent(Key.ECC_P);
	<span class="reserved">if</span> (primeOrder.byteAt(0) &gt;= 0x80) { <span class="comment">// signed int? -&gt; add 0x00</span>
		field.add(new ASN1(ASN1.INTEGER, new ByteString(<span class="literal">"00"</span>, HEX).concat(privateKey.getComponent(Key.ECC_P))));
	} <span class="reserved">else</span> {
		field.add(new ASN1(ASN1.INTEGER, privateKey.getComponent(Key.ECC_P)));
	}
	
	domainInfo.add(field);
	
	<span class="comment">// Coefficients a and b</span>
	var coeff = new ASN1(ASN1.SEQUENCE);
	
	<span class="comment">// first coefficient</span>
	coeff.add(new ASN1(ASN1.OCTET_STRING, privateKey.getComponent(Key.ECC_A)));
	
	<span class="comment">// second coefficient</span>
	coeff.add(new ASN1(ASN1.OCTET_STRING, privateKey.getComponent(Key.ECC_B)));
	
	domainInfo.add(coeff);
	
	<span class="comment">// Base point (uncompressed)</span>
	var gx = privateKey.getComponent(Key.ECC_GX);
	var gy = privateKey.getComponent(Key.ECC_GY);
	
	domainInfo.add(new ASN1(ASN1.OCTET_STRING, PKCS8.encodeUncompressedECPoint(gx, gy)));
	
	<span class="comment">// group order generated by the base point</span>
	var groupOrder = privateKey.getComponent(Key.ECC_N);
	<span class="reserved">if</span> (groupOrder.byteAt(0) &gt;= 0x80) { <span class="comment">// signed int? -&gt; add 0x00</span>
		domainInfo.add(new ASN1(ASN1.INTEGER, new ByteString(<span class="literal">"00"</span>, HEX).concat(privateKey.getComponent(Key.ECC_N))));
	} <span class="reserved">else</span> {
		domainInfo.add(new ASN1(ASN1.INTEGER, privateKey.getComponent(Key.ECC_N)));
	}
	
	privateKeyAlgorithm.add(domainInfo);
	
	<span class="comment">// encode the key information</span>
	privateKeyInfo.add(privateKeyAlgorithm);
	
	<span class="comment">// encode the private key</span>
	var encodedPrivateKey = new ASN1(ASN1.OCTET_STRING);
	
	var pk = privateKey.getComponent(Key.ECC_D);
	var key = new ASN1(ASN1.SEQUENCE);
	key.add(new ASN1(ASN1.INTEGER, new ByteString(<span class="literal">"01"</span>, HEX)));
	key.add(new ASN1(ASN1.OCTET_STRING, pk));
	
	encodedPrivateKey.add(key);
	
	privateKeyInfo.add(encodedPrivateKey);
	
<span class="comment">//	print(privateKeyInfo);</span>
	<span class="reserved">return</span> privateKeyInfo.getBytes();	
}



<span class="comment">/**
 * Encode RSA private key as defined in PKCS#1
 *
 * RSAPrivateKey ::= SEQUENCE {
 *     version           Version,
 *     modulus           INTEGER,  -- n
 *     publicExponent    INTEGER,  -- e
 *     privateExponent   INTEGER,  -- d
 *     prime1            INTEGER,  -- p
 *     prime2            INTEGER,  -- q
 *     exponent1         INTEGER,  -- d mod (p-1)
 *     exponent2         INTEGER,  -- d mod (q-1)
 *     coefficient       INTEGER,  -- (inverse of q) mod p
 *     otherPrimeInfos   OtherPrimeInfos OPTIONAL
 * }
 * <span class="attrib">@param</span> {Key} privateKey the private RSA key in CRT format
 * <span class="attrib">@type</span> ByteString
 * <span class="attrib">@return</span> the encoded RSA key
 */</span>
PKCS8.encodeRSAKey = <span class="reserved">function</span>(privateKey, publicKey) {
	var rsaPrivateKey = 
		new ASN1(ASN1.SEQUENCE);
		
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));
	<span class="reserved">if</span> (typeof(publicKey) != <span class="literal">"undefined"</span>) {
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(publicKey.getComponent(Key.MODULUS))));
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(publicKey.getComponent(Key.EXPONENT))));
	} <span class="reserved">else</span> {
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));
		rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));
	}
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, ByteString.valueOf(0)));		<span class="comment">// Private Exponent not at interface for CRT format</span>
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_P))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_Q))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_DP1))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_DQ1))));
	rsaPrivateKey.add(new ASN1(ASN1.INTEGER, PKCS8.convertUnsignedInteger(privateKey.getComponent(Key.CRT_PQ))));

	<span class="reserved">return</span> rsaPrivateKey.getBytes();
}



<span class="comment">/**
 * Encode a given GP RSA private key as specified by the PKCS#8 format
 *
 * <span class="attrib">@param</span> {Key} the private key object that should be encoded
 * <span class="attrib">@return</span> the encoded PKCS#8 private key
 * <span class="attrib">@type</span> ByteString
 */</span>
PKCS8.encodeRSAKeyUsingPKCS8Format = <span class="reserved">function</span>(privateKey, publicKey) {
	var privateKeyInfo = new ASN1(ASN1.SEQUENCE);
	
	<span class="comment">// Set the version number - must be zero</span>
	privateKeyInfo.add(new ASN1(ASN1.INTEGER, new ByteString(<span class="literal">"00"</span>, HEX)));
	
	var privateKeyAlgorithm = new ASN1(ASN1.SEQUENCE);
	privateKeyAlgorithm.add(new ASN1(ASN1.OBJECT_IDENTIFIER, PKCS8.rsaEncryption));
	privateKeyAlgorithm.add(new ASN1(ASN1.NULL));
	
	<span class="comment">// encode the key information</span>
	privateKeyInfo.add(privateKeyAlgorithm);
	
	<span class="comment">// encode the private key</span>
	var encodedPrivateKey = new ASN1(ASN1.OCTET_STRING, PKCS8.encodeRSAKey(privateKey, publicKey));
	
	privateKeyInfo.add(encodedPrivateKey);
	
<span class="comment">//	print(privateKeyInfo);</span>
	<span class="reserved">return</span> privateKeyInfo.getBytes();	
}



<span class="comment">/**
 * Encode a given GP private key as specified by the PKCS#8 format
 *
 * For now we only support the encoding of ECC private keys in a prime field
 *
 * <span class="attrib">@param</span> {Key} the private key object that should be encoded
 * <span class="attrib">@return</span> the encoded PKCS#8 private key
 * <span class="attrib">@type</span> ByteString
 */</span>
PKCS8.encodeKeyUsingPKCS8Format = <span class="reserved">function</span>(privateKey, publicKey) {
	
	assert(privateKey.getType() == Key.PRIVATE);
	<span class="reserved">if</span> (typeof(privateKey.getComponent(Key.ECC_P)) != <span class="literal">"undefined"</span>) {
		<span class="reserved">return</span> PKCS8.encodeECCKeyUsingPKCS8Format(privateKey);
	} <span class="reserved">else</span> {
		<span class="reserved">return</span> PKCS8.encodeRSAKeyUsingPKCS8Format(privateKey, publicKey);
	}
}



<span class="comment">/**
 * Decode a given PKCS#8 ECC private key from the given ByteString and create a GP key object
 *
 * For now we only support the decoding of ECC private keys in a prime field
 * 
 * <span class="attrib">@param</span> {ASN1} algparam the algorithm parameter from AlgorithmInfo
 * <span class="attrib">@param</span> {ASN1} privateKey the privateKey element from the PKCS#8 structure
 * <span class="attrib">@return</span> the GP key object
 * <span class="attrib">@type</span> Key
 */</span>
PKCS8.decodeECCKeyFromPKCS8Format = <span class="reserved">function</span>(domainParameter, encodedKey) {
	
	var key = new Key();
	
	key.setType(Key.PRIVATE);
	
	key.setComponent(Key.ECC_D, encodedKey.get(1).value);
	
	<span class="comment">// Decode the domain parameters</span>
	var cofactor = domainParameter.get(0);
	key.setComponent(Key.ECC_H, cofactor.value);
	
	var order = domainParameter.get(1).get(1);
	key.setComponent(Key.ECC_P, PKCS8.stripLeadingZeros(order.value));
	
	var coeff_A = domainParameter.get(2).get(0);
	key.setComponent(Key.ECC_A, coeff_A.value);
	
	var coeff_B = domainParameter.get(2).get(1);
	key.setComponent(Key.ECC_B, coeff_B.value);
	
	var generatorPoint = domainParameter.get(3).value;
	
	var coordinates = PKCS8.decodeUncompressedECPoint(generatorPoint);
	
	key.setComponent(Key.ECC_GX, coordinates.x);
	key.setComponent(Key.ECC_GY, coordinates.y);
	
	var groupOrder = domainParameter.get(4);
	
	key.setComponent(Key.ECC_N, PKCS8.stripLeadingZeros(groupOrder.value));
	
	<span class="reserved">return</span> key;	
}



<span class="comment">/**
 * Decode a given PKCS#8 RSA private key from the given ByteString and create a GP key object
 *
 * <span class="attrib">@param</span> {ByteString} the private key object in PKCS#8 format
 * <span class="attrib">@param</span> {ASN1} algparam the algorithm parameter from AlgorithmInfo
 * <span class="attrib">@param</span> {ASN1} privateKey the privateKey element from the PKCS#8 structure
 * <span class="attrib">@return</span> the GP key object
 * <span class="attrib">@type</span> Key
 */</span>
PKCS8.decodeRSAKeyFromPKCS8Format = <span class="reserved">function</span>(algparam, privateKey) {
	
	var key = new Key();
	
	key.setType(Key.PRIVATE);
	
	assert(algparam.tag == ASN1.NULL);
	assert(!algparam.isconstructed);
	assert(algparam.length == 0);
	
	assert(privateKey.tag == ASN1.SEQUENCE);
	assert(privateKey.isconstructed);
	assert(privateKey.elements &gt;= 9);
	
	<span class="reserved">for</span> (var i = 0; i &lt; 9; i++) {
		var e = privateKey.get(i);
		assert(e.tag == ASN1.INTEGER);
		assert(!e.isconstructed);
	}
	
	assert(privateKey.get(0).value.toUnsigned() == 0);
	
	var p = PKCS8.stripLeadingZeros(privateKey.get(4).value);
	var l = p.length;
	key.setComponent(Key.CRT_P,   p);
	key.setComponent(Key.CRT_Q,   PKCS8.I2O(privateKey.get(5).value, l));
	key.setComponent(Key.CRT_DP1, PKCS8.I2O(privateKey.get(6).value, l));
	key.setComponent(Key.CRT_DQ1, PKCS8.I2O(privateKey.get(7).value, l));
	key.setComponent(Key.CRT_PQ,  PKCS8.I2O(privateKey.get(8).value, l));

	<span class="reserved">return</span> key;	
}



<span class="comment">/**
 * Decode a given PKCS#8 private key from the given ByteString and create a GP key object
 *
 * For now we only support the decoding of ECC private keys in a prime field
 * 
 * <span class="attrib">@param</span> {ByteString} the private key object in PKCS#8 format
 * <span class="attrib">@return</span> the GP key object
 * <span class="attrib">@type</span> Key
 */</span>
PKCS8.decodeKeyFromPKCS8Format = <span class="reserved">function</span>(encodedKey) {
	var p8 = new ASN1(encodedKey);
	
	assert(p8.isconstructed);
	assert(p8.elements &gt;= 3);
	
	var version = p8.get(0);
	assert(version.tag == ASN1.INTEGER);
	assert(version.value.toUnsigned() == 0);
	
	var pkai = p8.get(1);
	assert(pkai.tag == ASN1.SEQUENCE);
	assert(pkai.isconstructed);
	assert(pkai.elements == 2);
	var keytype = pkai.get(0);
	
	assert(keytype.tag == ASN1.OBJECT_IDENTIFIER);
	
	var algparam = pkai.get(1);
	
	var privateKey = p8.get(2);
	assert(privateKey.tag == ASN1.OCTET_STRING);
	<span class="reserved">if</span> (privateKey.isconstructed) {
		privateKey = privateKey.get(0);
	} <span class="reserved">else</span> {
		privateKey = new ASN1(privateKey.value);
	}
	
	<span class="reserved">if</span> (keytype.value.equals(PKCS8.rsaEncryption)) {
		<span class="reserved">return</span> PKCS8.decodeRSAKeyFromPKCS8Format(algparam, privateKey);
	} <span class="reserved">else</span> <span class="reserved">if</span> (keytype.value.equals(PKCS8.idEcPublicKey)) {
		<span class="reserved">return</span> PKCS8.decodeECCKeyFromPKCS8Format(algparam, privateKey);
	} <span class="reserved">else</span> {
		throw new Error(<span class="literal">"Unknown key type "</span> + keytype.value.toString(OID));
	}
}



<span class="comment">/**
 * Simple self-test
 */</span>
PKCS8.test = <span class="reserved">function</span>() {

	<span class="comment">// Set OID for EC curve</span>
	var ecCurve = <span class="literal">"1.3.36.3.3.2.8.1.1.7"</span>;
    
    var crypto = new Crypto(<span class="literal">"BC"</span>);
    
    <span class="comment">// Create empty public key object</span>
    var pubKey = new Key();
    pubKey.setType(Key.PUBLIC);
    pubKey.setComponent(Key.ECC_CURVE_OID, new ByteString(ecCurve, OID)); 

    <span class="comment">// Create empty private key object</span>
    var priKey = new Key();
    priKey.setType(Key.PRIVATE);
    priKey.setComponent(Key.ECC_CURVE_OID, new ByteString(ecCurve, OID)); 
    
    <span class="comment">// Generate key pair</span>
    crypto.generateKeyPair(Crypto.EC, pubKey, priKey);
	       
    <span class="comment">// Encode</span>
    var p8Key = PKCS8.encodeKeyUsingPKCS8Format(priKey);
    
    <span class="comment">// Decode</span>
    var decodedKeyObject = PKCS8.decodeKeyFromPKCS8Format(p8Key);
    
    <span class="comment">// Compare</span>
    assert(decodedKeyObject.getComponent(Key.ECC_D).equals(priKey.getComponent(Key.ECC_D)));
    
    assert(decodedKeyObject.getComponent(Key.ECC_GX).equals(priKey.getComponent(Key.ECC_GX)));
    assert(decodedKeyObject.getComponent(Key.ECC_GY).equals(priKey.getComponent(Key.ECC_GY)));
    assert(decodedKeyObject.getComponent(Key.ECC_A).equals(pubKey.getComponent(Key.ECC_A)));
    assert(decodedKeyObject.getComponent(Key.ECC_B).equals(pubKey.getComponent(Key.ECC_B)));
     
    <span class="comment">// Encode</span>
    var refp8Key = PKCS8.encodeKeyUsingPKCS8Format(decodedKeyObject);
	
    <span class="comment">// Compare</span>
    assert(p8Key.equals(refp8Key));	
	
	
    <span class="comment">// Create empty public key object</span>
	var pubKey = new Key();
    pubKey.setType(Key.PUBLIC);
    pubKey.setSize(1024); 

    <span class="comment">// Create empty private key object</span>
    var priKey = new Key();
    priKey.setType(Key.PRIVATE);
    
    <span class="comment">// Generate key pair</span>
    crypto.generateKeyPair(Crypto.RSA, pubKey, priKey);
	       
    <span class="comment">// Encode</span>
    var p8Key = PKCS8.encodeKeyUsingPKCS8Format(priKey);
    
    <span class="comment">// Decode</span>
    var decodedKeyObject = PKCS8.decodeKeyFromPKCS8Format(p8Key);
    
    <span class="comment">// Compare</span>
    assert(decodedKeyObject.getComponent(Key.CRT_P).equals(priKey.getComponent(Key.CRT_P)));
    assert(decodedKeyObject.getComponent(Key.CRT_Q).equals(priKey.getComponent(Key.CRT_Q)));
    assert(decodedKeyObject.getComponent(Key.CRT_DP1).equals(priKey.getComponent(Key.CRT_DP1)));
    assert(decodedKeyObject.getComponent(Key.CRT_DQ1).equals(priKey.getComponent(Key.CRT_DQ1)));
    assert(decodedKeyObject.getComponent(Key.CRT_PQ).equals(priKey.getComponent(Key.CRT_PQ)));

    <span class="comment">// Encode</span>
    var refp8Key = PKCS8.encodeKeyUsingPKCS8Format(decodedKeyObject);
	
    <span class="comment">// Compare</span>
    assert(p8Key.equals(refp8Key));	
}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="pkixcommon.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>pkixcommon.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		Common classes and functions for PKIX<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="PKIXCommon.html">PKIXCommon</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * <span class="attrib">@fileoverview</span> Common classes and functions for PKIX
 */</span>

 

<span class="comment">/**
 * Common functions and constants
 */</span>
<span class="reserved">function</span> PKIXCommon() {
}


PKIXCommon.digitalSignature	= 0x0080;
PKIXCommon.nonRepudiation		= 0x0040;
PKIXCommon.keyEncipherment		= 0x0020;
PKIXCommon.dataEncipherment	= 0x0010;
PKIXCommon.keyAgreement		= 0x0008;
PKIXCommon.keyCertSign			= 0x0004;
PKIXCommon.cRLSign				= 0x0002;
PKIXCommon.encipherOnly		= 0x0001;
PKIXCommon.decipherOnly		= 0x8000;


 
<span class="comment">/**
 * Convert integer to fixed length string with leading zeros.
 *
 * <span class="attrib">@private</span>
 * <span class="attrib">@param</span> {Number} value the value to convert to a string.
 * <span class="attrib">@param</span> {Number} digits the number of digits in output string. Must be &lt;= 20.
 * <span class="attrib">@return</span> the 0-padded string
 * <span class="attrib">@type</span> String
 */</span>
PKIXCommon.itos = <span class="reserved">function</span>(value, digits) {
	<span class="reserved">if</span> (digits &gt; 20) {
		throw new Error(<span class="literal">"Digits must be &lt;= 20"</span>);
	}
	var str = <span class="literal">""</span> + value;
	str = <span class="literal">"0000000000000000000"</span>.substr(19 - (digits - str.length)).concat(str);
	<span class="reserved">return</span> str;
}



<span class="comment">/**
 * Convert date and time to UTC string with format YYMMDDHHMMSSZ.
 *
 * <span class="attrib">@param</span> {Date} d the date object.
 * <span class="attrib">@return</span> the date/time string.
 * <span class="attrib">@type</span> String
 */</span>
PKIXCommon.dtoUTC = <span class="reserved">function</span>(d) {
	var s = PKIXCommon.itos(d.getUTCFullYear() % 100, 2) +
			PKIXCommon.itos(d.getUTCMonth() + 1, 2) +
			PKIXCommon.itos(d.getUTCDate(), 2) +
			PKIXCommon.itos(d.getUTCHours(), 2) +
			PKIXCommon.itos(d.getUTCMinutes(), 2) +
			PKIXCommon.itos(d.getUTCSeconds(), 2) + <span class="literal">"Z"</span>;
	<span class="reserved">return</span> s;
}



<span class="comment">/**
 * Add the specified number of days to a date object
 * 
 * <span class="attrib">@param</span> {Date} d the date object
 * <span class="attrib">@param</span> {Number} days the number of days to add, may be negative
 * <span class="attrib">@type</span> Date
 * <span class="attrib">@return</span> a new Date object
 */</span>
PKIXCommon.addDays = <span class="reserved">function</span>(d, days) {
	var hour = d.getUTCHours();
	var minute = d.getUTCMinutes();
	var second = d.getUTCSeconds();
	var cd = new Date(d);
	cd.setHours(12);
	
	var ts = cd.getTime();
	ts += days * 24 * 60 * 60 * 1000;
	var nd = new Date(ts);
	
	nd.setUTCHours(hour);
	nd.setUTCMinutes(minute);
	nd.setUTCSeconds(second);
	<span class="reserved">return</span> nd;
}



<span class="comment">/**
 * Converts the integer value into a BIT STRING value.
 * &lt;p&gt;The function interprets the integer value as bitmap, where
 * bit 0 is the most significant bit of the least significant byte.&lt;/p&gt;
 * &lt;p&gt;The function adds the minimum number of bytes to the final bit string
 * and encodes the "number of unused bits at the beginning.&lt;/p&gt;
 * 
 * <span class="attrib">@param</span> {Number} val the value to convert
 * <span class="attrib">@return</span> the bit string
 * <span class="attrib">@type</span> ByteString
 */</span>
PKIXCommon.bitstringForInteger = <span class="reserved">function</span>(val) {
	var bb = new ByteBuffer();
	var b = 0;
	
	<span class="comment">// Encode starting with the least significant byte</span>
	<span class="reserved">while</span> (val &gt; 0) {
		b = val &amp; 0xFF;
		bb.append(b);
		val = val &gt;&gt; 8;
	}
	
	<span class="comment">// Determine number of unused bits</span>
	var i = 0;
	<span class="reserved">while</span> ((i &lt; 8) &amp;&amp; !(b &amp; 1)) {
		i++;
		b &gt;&gt;= 1;
	}
	
	bb.insert(0, i);
	<span class="reserved">return</span> bb.toByteString();
}



<span class="comment">/**
 * Removes leading zeros and prepends a single '00' to ByteStrings which have the most significant bit set.
 *
 * This prevent interpretation of the integer representation if converted into
 * a signed ASN1 INTEGER.
 *
 * <span class="attrib">@param</span> {ByteString} value the value to convert
 * <span class="attrib">@return</span> the converted value
 * <span class="attrib">@type</span> ByteString
 */</span>
PKIXCommon.convertUnsignedInteger = <span class="reserved">function</span>(value) {
	assert(value.length &gt; 0);
	
	var i = 0;
	<span class="reserved">for</span> (var i = 0; (i &lt; value.length - 1) &amp;&amp; (value.byteAt(i) == 0); i++);
	
	<span class="reserved">if</span> (value.byteAt(i) &gt;= 0x80) {
		value = (new ByteString(<span class="literal">"00"</span>, HEX)).concat(value.bytes(i));
	} <span class="reserved">else</span> {
		value = value.bytes(i);
	}
	
	<span class="reserved">return</span> value;
}



<span class="comment">/**
 * Creates the EC Public Key as subjectPublicKeyInfo TLV structure object.
 *
 * &lt;p&gt;The structure is defined as:&lt;/p&gt;
 * &lt;pre&gt;
 *	SubjectPublicKeyInfo  ::=  SEQUENCE  {
 *		algorithm            AlgorithmIdentifier,
 *		subjectPublicKey     BIT STRING  }
 *
 *	AlgorithmIdentifier  ::=  SEQUENCE  {
 *		algorithm               OBJECT IDENTIFIER,
 *		parameters              ANY DEFINED BY algorithm OPTIONAL  }
 * 
 *	id-ecPublicKey OBJECT IDENTIFIER ::= {
 *		iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 }
 *
 *	ECParameters ::= CHOICE {
 *		namedCurve         OBJECT IDENTIFIER,
 *		implicitCurve      NULL,
 *		specifiedCurve     SpecifiedECDomain }
 * &lt;/pre&gt;
 * <span class="attrib">@return</span> the subjectPublicKey TLV structure
 * <span class="attrib">@type</span> ASN1
 */</span>
PKIXCommon.createECSubjectPublicKeyInfo = <span class="reserved">function</span>(publicKey, encodeECDomainParameter) {
	var t = new ASN1(<span class="literal">"subjectPublicKeyInfo"</span>, ASN1.SEQUENCE);

	var algorithm = new ASN1(<span class="literal">"algorithm"</span>, ASN1.SEQUENCE,
			new ASN1(<span class="literal">"algorithm"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"1.2.840.10045.2.1"</span>, OID))
		);

	<span class="reserved">if</span> (encodeECDomainParameter) {
		<span class="reserved">if</span> (publicKey.getComponent(Key.ECC_P)) {		<span class="comment">// Make sure curve components are available if only curve oid is defined</span>
			publicKey.setComponent(Key.ECC_CURVE_OID, publicKey.getComponent(Key.ECC_CURVE_OID));
		}
		var ecParameter = 
			new ASN1(<span class="literal">"ecParameters"</span>, ASN1.SEQUENCE,
				new ASN1(<span class="literal">"version"</span>, ASN1.INTEGER, new ByteString(<span class="literal">"01"</span>, HEX)),
				new ASN1(<span class="literal">"fieldID"</span>, ASN1.SEQUENCE,
					new ASN1(<span class="literal">"fieldType"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"prime-field"</span>, OID)),
					new ASN1(<span class="literal">"prime"</span>, ASN1.INTEGER, 
						PKIXCommon.convertUnsignedInteger(publicKey.getComponent(Key.ECC_P)))
				),
				new ASN1(<span class="literal">"curve"</span>, ASN1.SEQUENCE,
					new ASN1(<span class="literal">"a"</span>, ASN1.OCTET_STRING, 
						PKIXCommon.convertUnsignedInteger(publicKey.getComponent(Key.ECC_A))),
					new ASN1(<span class="literal">"b"</span>, ASN1.OCTET_STRING, 
						PKIXCommon.convertUnsignedInteger(publicKey.getComponent(Key.ECC_B)))
				),
				new ASN1(<span class="literal">"base"</span>, ASN1.OCTET_STRING,
						(new ByteString(<span class="literal">"04"</span>, HEX)).concat(publicKey.getComponent(Key.ECC_GX)).concat(publicKey.getComponent(Key.ECC_GY))),
				new ASN1(<span class="literal">"order"</span>, ASN1.INTEGER,
					PKIXCommon.convertUnsignedInteger(publicKey.getComponent(Key.ECC_N)))
			);
		
		var cofactor = publicKey.getComponent(Key.ECC_H);
		var i = 0;
		<span class="reserved">for</span> (; (i &lt; cofactor.length) &amp;&amp; (cofactor.byteAt(i) == 0); i++);
		<span class="reserved">if</span> (i &lt; cofactor.length) {
			ecParameter.add(new ASN1(<span class="literal">"cofactor"</span>, ASN1.INTEGER, cofactor.bytes(i)));
		}
		algorithm.add(ecParameter);	
	} <span class="reserved">else</span> {
		algorithm.add(new ASN1(<span class="literal">"parameters"</span>, ASN1.OBJECT_IDENTIFIER, publicKey.getComponent(Key.ECC_CURVE_OID)));
	}
	
	t.add(algorithm);
	
	<span class="comment">// Prefix a 00 to form correct bitstring</span>
	<span class="comment">// Prefix a 04 to indicate uncompressed format</span>
	var keybin = new ByteString(<span class="literal">"0004"</span>, HEX);
	keybin = keybin.concat(publicKey.getComponent(Key.ECC_QX));
	keybin = keybin.concat(publicKey.getComponent(Key.ECC_QY));
	t.add(new ASN1(<span class="literal">"subjectPublicKey"</span>, ASN1.BIT_STRING, keybin));

	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Creates the RSA Public Key as subjectPublicKeyInfo TLV structure object.
 *
 * &lt;p&gt;The structure is defined as:&lt;/p&gt;
 * &lt;pre&gt;
 *	SubjectPublicKeyInfo  ::=  SEQUENCE  {
 *		algorithm            AlgorithmIdentifier,
 *		subjectPublicKey     BIT STRING  }
 *
 *	AlgorithmIdentifier  ::=  SEQUENCE  {
 *		algorithm               OBJECT IDENTIFIER,
 *		parameters              ANY DEFINED BY algorithm OPTIONAL  }
 * 
 *	pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 }
 *
 *	rsaEncryption OBJECT IDENTIFIER ::=  { pkcs-1 1}
 *
 *	RSAPublicKey ::= SEQUENCE {
 *		modulus            INTEGER,    -- n
 *		publicExponent     INTEGER  }  -- e
 * &lt;/pre&gt;
 *
 * <span class="attrib">@return</span> the subjectPublicKey TLV structure
 * <span class="attrib">@type</span> ASN1
 */</span>
PKIXCommon.createRSASubjectPublicKeyInfo = <span class="reserved">function</span>(publicKey) {
	var t = new ASN1(<span class="literal">"subjectPublicKeyInfo"</span>, ASN1.SEQUENCE);
	
	t.add(new ASN1(<span class="literal">"algorithm"</span>, ASN1.SEQUENCE,
		new ASN1(<span class="literal">"algorithm"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"1.2.840.113549.1.1.1"</span>, OID)),
		new ASN1(<span class="literal">"parameters"</span>, ASN1.NULL, new ByteString(<span class="literal">""</span>, HEX))
	       ));
	<span class="comment">// Prefix a 00 to form correct bitstring</span>
	var keybin = new ByteString(<span class="literal">"00"</span>, HEX);

	var modulus = publicKey.getComponent(Key.MODULUS);
	modulus = PKIXCommon.convertUnsignedInteger(modulus);
	
	var exponent = publicKey.getComponent(Key.EXPONENT);
	exponent = PKIXCommon.convertUnsignedInteger(exponent);

	var rsapub = new ASN1(<span class="literal">"RSAPublicKey"</span>, ASN1.SEQUENCE,
			new ASN1(<span class="literal">"modulus"</span>, ASN1.INTEGER, modulus),
			new ASN1(<span class="literal">"publicKeyExponent"</span>, ASN1.INTEGER, exponent));

	keybin = keybin.concat(rsapub.getBytes());
	t.add(new ASN1(<span class="literal">"subjectPublicKey"</span>, ASN1.BIT_STRING, keybin));

	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Creates a relative distinguished name component.
 *
 * &lt;p&gt;The structure is defined as:&lt;/p&gt;
 * &lt;pre&gt;
 *	RelativeDistinguishedName ::=
 *		SET SIZE (1..MAX) OF AttributeTypeAndValue
 *
 *	AttributeTypeAndValue ::= SEQUENCE {
 *		type     AttributeType,
 *		value    AttributeValue }
 *
 *	AttributeType ::= OBJECT IDENTIFIER
 *
 *	AttributeValue ::= ANY -- DEFINED BY AttributeType
 *
 *	DirectoryString ::= CHOICE {
 *		teletexString           TeletexString (SIZE (1..MAX)),
 *		printableString         PrintableString (SIZE (1..MAX)),
 *		universalString         UniversalString (SIZE (1..MAX)),
 *		utf8String              UTF8String (SIZE (1..MAX)),
 *		bmpString               BMPString (SIZE (1..MAX)) }
 *&lt;/pre&gt;
 *
 * <span class="attrib">@param</span> {String} name the components name
 * <span class="attrib">@param</span> {String} oid the oid for the RDN
 * <span class="attrib">@param</span> {ASN1} value the value object
 * <span class="attrib">@return</span> the 
 */</span>
PKIXCommon.makeRDN = <span class="reserved">function</span>(name, oid, value) {
	<span class="reserved">return</span> new ASN1(name, ASN1.SET,
				new ASN1(ASN1.SEQUENCE,
					new ASN1(ASN1.OBJECT_IDENTIFIER, new ByteString(oid, OID)),
					value
				)
			);
}



<span class="comment">/**
 * Adds names from the name object to the RDNSequence.
 *
 * <span class="attrib">@param</span> {ASN1} t the sequence object
 * <span class="attrib">@param</span> {Object} name the name object
 */</span>
PKIXCommon.addNames = <span class="reserved">function</span>(t, name) {
	<span class="reserved">if</span> (name.C) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"country"</span>, <span class="literal">"id-at-countryName"</span>, new ASN1(ASN1.PrintableString, new ByteString(name.C, ASCII))));
	}
	<span class="reserved">if</span> (name.O) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"organization"</span>, <span class="literal">"id-at-organizationName"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.O, UTF8))));
	}
	<span class="reserved">if</span> (name.OU) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"organizationalUnit"</span>, <span class="literal">"id-at-organizationalUnitName"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.OU, UTF8))));
	}
	<span class="reserved">if</span> (name.S) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"stateOrProvince"</span>, <span class="literal">"id-at-stateOrProvinceName"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.S, UTF8))));
	}
	<span class="reserved">if</span> (name.L) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"locality"</span>, <span class="literal">"id-at-localityName"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.L, UTF8))));
	}
	<span class="reserved">if</span> (name.DC) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"domainComponent"</span>, <span class="literal">"id-domainComponent"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.DC, UTF8))));
	}
	<span class="reserved">if</span> (name.T) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"title"</span>, <span class="literal">"id-at-title"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.T, UTF8))));
	}
	<span class="reserved">if</span> (name.G) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"givenName"</span>, <span class="literal">"id-at-givenName"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.G, UTF8))));
	}
	<span class="reserved">if</span> (name.SN) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"surname"</span>, <span class="literal">"id-at-surname"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.SN, UTF8))));
	}
	<span class="reserved">if</span> (name.CN) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"commonName"</span>, <span class="literal">"id-at-commonName"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.CN, UTF8))));
	}
	<span class="reserved">if</span> (name.SERIALNUMBER) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"serialNumber"</span>, <span class="literal">"id-at-serialNumber"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.SERIALNUMBER, UTF8))));
	}
	<span class="reserved">if</span> (name.DNQ) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"dnQualifier"</span>, <span class="literal">"id-at-dnQualifier"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.DNQ, UTF8))));
	}
	<span class="reserved">if</span> (name.E) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"emailAddress"</span>, <span class="literal">"id-emailAddress"</span>, new ASN1(ASN1.IA5String, new ByteString(name.E, ASCII))));
	}
	<span class="reserved">if</span> (name.UID) {
		t.add(PKIXCommon.makeRDN(<span class="literal">"userId"</span>, <span class="literal">"id-userId"</span>, new ASN1(ASN1.UTF8String, new ByteString(name.UID, UTF8))));
	}
}



<span class="comment">/**
 * Gets the dn as TLV object
 *
 * &lt;p&gt;This function support two format for names&lt;/p&gt;
 * &lt;pre&gt;
 *  var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 * or
 *  var issuer = [ { C:"UT"}, { O:"ACME Corporation" }, { CN:"Test-CA"} ];
 * &lt;/pre&gt;
 *
 * &lt;p&gt;It supports the following RDNs:&lt;/p&gt;
 * &lt;ul&gt;
 * &lt;li&gt;C - country&lt;/li&gt;
 * &lt;li&gt;O - organization&lt;/li&gt;
 * &lt;li&gt;OU - organizational unit&lt;/li&gt;
 * &lt;li&gt;S - state or province&lt;/li&gt;
 * &lt;li&gt;L - locality&lt;/li&gt;
 * &lt;li&gt;T - title&lt;/li&gt;
 * &lt;li&gt;G - given name&lt;/li&gt;
 * &lt;li&gt;SN - surname&lt;/li&gt;
 * &lt;li&gt;CN - common name&lt;/li&gt;
 * &lt;li&gt;SERIALNUMBER - serial number&lt;/li&gt;
 * &lt;p&gt;The first format sorts the RDS in the sequence C,O,OU,S,L,T,G,SN,CN,SERIALNUMBER&lt;/p&gt;
 * &lt;/ul&gt;
 * <span class="attrib">@param</span> {Object} name the name object
 * <span class="attrib">@return</span> the RDNSequence
 * <span class="attrib">@type</span> ASN1
 */</span>
PKIXCommon.encodeName = <span class="reserved">function</span>(name) {
	var t = new ASN1(<span class="literal">"subject"</span>, ASN1.SEQUENCE);
	<span class="reserved">if</span> (typeof(name.C) == <span class="literal">"undefined"</span>) {
		<span class="reserved">for</span> (var i = 0; i &lt; name.length; i++) {
			PKIXCommon.addNames(t, name[i]);
		}
	} <span class="reserved">else</span> {
		PKIXCommon.addNames(t, name);
	}
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Writes a byte string object to file
 *
 * &lt;p&gt;The filename is mapped to the workspace location.&lt;/p&gt;
 *
 * <span class="attrib">@param</span> {String} filename the fully qualified name of the file
 * <span class="attrib">@param</span> {ByteString} content the content to write
 */</span>
PKIXCommon.writeFileToDisk = <span class="reserved">function</span>(filename, content) {
	var file = new java.io.FileOutputStream(filename);
	file.write(content);
	file.close();
}



<span class="comment">/**
 * Loads a binary file from disk
 *
 * <span class="attrib">@param</span> {String} filename the fully qualified file name
 * <span class="attrib">@return</span> the binary content
 * <span class="attrib">@type</span> ByteString
 */</span>
PKIXCommon.readFileFromDisk = <span class="reserved">function</span>(filename) {
	<span class="comment">// Open stream</span>
	var f = new java.io.FileInputStream(filename);
	
	<span class="comment">// Determine file size</span>
	var flen = f.available();

	<span class="comment">// Allocate native byte array</span>
	var bs = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, flen);
	
	<span class="comment">// Read into byte array</span>
	var len = f.read(bs);

	f.close();
	
	<span class="comment">// Allocate JavaScript ByteBuffer from native/wrapped byte array</span>
	var bb = new ByteBuffer(bs);
	
	<span class="comment">// Convert to JavaScript ByteString</span>
	var data = bb.toByteString();

	<span class="reserved">return</span> data;
}



PKIXCommon.test = <span class="reserved">function</span>() {
	var issuer = { C:<span class="literal">"C"</span>, O:<span class="literal">"O"</span>, OU:<span class="literal">"OU"</span>, SP:<span class="literal">"SP"</span>, L:<span class="literal">"L"</span>, DC:<span class="literal">"DC"</span>, T:<span class="literal">"T"</span>, G:<span class="literal">"G"</span>, SN:<span class="literal">"SN"</span>, CN:<span class="literal">"CN"</span>, SERIALNUMBER:<span class="literal">"serial"</span>, DNQ:<span class="literal">"DNQ"</span> };
	var dn = PKIXCommon.encodeName(issuer);
	print(dn);
	
	var r = PKIXCommon.convertUnsignedInteger(new ByteString(<span class="literal">"00"</span>, HEX));
	assert(r.toString(HEX) == <span class="literal">"00"</span>);
	var r = PKIXCommon.convertUnsignedInteger(new ByteString(<span class="literal">"80"</span>, HEX));
	assert(r.toString(HEX) == <span class="literal">"0080"</span>);
	var r = PKIXCommon.convertUnsignedInteger(new ByteString(<span class="literal">"FF"</span>, HEX));
	assert(r.toString(HEX) == <span class="literal">"00FF"</span>);
	var r = PKIXCommon.convertUnsignedInteger(new ByteString(<span class="literal">"0000"</span>, HEX));
	assert(r.toString(HEX) == <span class="literal">"00"</span>);
	var r = PKIXCommon.convertUnsignedInteger(new ByteString(<span class="literal">"0080"</span>, HEX));
	assert(r.toString(HEX) == <span class="literal">"0080"</span>);
	var r = PKIXCommon.convertUnsignedInteger(new ByteString(<span class="literal">"000080"</span>, HEX));
	assert(r.toString(HEX) == <span class="literal">"0080"</span>);

}
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="x509certificategenerator.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>x509certificategenerator.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		A X509 certificate generator class following RFC5280<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="X509CertificateGenerator.html">X509CertificateGenerator</a></b></td>
    <td>Class implementing a X.509 certificate generator
 </td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

	<a name="method_summary"><!-- --></a>
	<table border="1" cellpadding="3" cellspacing="0" width="100%">
		<tr bgcolor="#CCCCFF" class="TableHeadingColor">
			<td colspan=2>
				<font size="+2">
					<b>Method Summary</b>
				</font>
			</td>
		</tr>
	
		
		   <tr bgcolor="white" class="TableRowColor">
		      <td align="right" valign="top" width="1%">
			 <font size="-1">
			    <code>static&nbsp;void</code>
			 </font>
		      </td>
		      <td>
			 <code>
			    <b>
			       <a href="GLOBALS.html#!s!X509CertificateGeneratorECCTest">X509CertificateGeneratorECCTest</a></b>()
			 </code>
			 <br>
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			 
		      </td>
		   </tr>
		
		   <tr bgcolor="white" class="TableRowColor">
		      <td align="right" valign="top" width="1%">
			 <font size="-1">
			    <code>static&nbsp;void</code>
			 </font>
		      </td>
		      <td>
			 <code>
			    <b>
			       <a href="GLOBALS.html#!s!X509CertificateGeneratorRSATest">X509CertificateGeneratorRSATest</a></b>()
			 </code>
			 <br>
			 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			 
		      </td>
		   </tr>
		
	
	</table>
    <p>

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/**
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2009 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * <span class="attrib">@fileoverview</span> A X509 certificate generator class following RFC5280
 */</span>

<span class="reserved">if</span> (typeof(__ScriptingServer) == <span class="literal">"undefined"</span>) {
	load(<span class="literal">"pkixcommon.js"</span>);
}

<span class="comment">/**
 * Create a X.509 certificate generator.
 *
 * <span class="attrib">@class</span> Class implementing a X.509 certificate generator
 * <span class="attrib">@constructor</span>
 *
 * <span class="attrib">@param</span> {Crypto} crypto the crypto provider to use for signing operations
 */</span>
<span class="reserved">function</span> X509CertificateGenerator(crypto) {
	<span class="reserved">this</span>.crypto = crypto;
	<span class="reserved">this</span>.encodeECDomainParameter = true;
	<span class="reserved">this</span>.reset();
}



<span class="comment">/**
 * Resets all internal state variables.
 *
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.reset = <span class="reserved">function</span>() {
	<span class="reserved">this</span>.extensions = new Array();
	
}



<span class="comment">/**
 * Sets the serial number.
 *
 * <span class="attrib">@param</span> {ByteString} serialNumber the serial number for the certificate
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.setSerialNumber = <span class="reserved">function</span>(serialNumber) {
	<span class="reserved">this</span>.serialNumber = serialNumber;
}



<span class="comment">/**
 * Sets the isser name.
 *
 * &lt;p&gt;The issuer name must be a JavaScript object containing the properties:&lt;/p&gt;
 * &lt;ul&gt;
 *  &lt;li&gt;C - the country&lt;/li&gt;
 *  &lt;li&gt;O - the organization&lt;/li&gt;
 *  &lt;li&gt;OU - the organization unit&lt;/li&gt;
 *  &lt;li&gt;CN - the common name&lt;/li&gt;
 * &lt;/ul&gt;
 * &lt;p&gt;Example:&lt;/p&gt;
 * &lt;pre&gt;
 *	var issuer = { C:"UT", O:"ACME Corporation", CN:"Test-CA" };
 * &lt;/pre&gt;
 * <span class="attrib">@param</span> {Object} issuer the issuer name
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.setIssuer = <span class="reserved">function</span>(issuer) {
	<span class="reserved">this</span>.issuer = issuer;
}



<span class="comment">/**
 * Sets the effective date for the certificate.
 *
 * <span class="attrib">@param</span> {String or Date} date the date in format YYMMDDHHMMSSZ
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.setNotBefore = <span class="reserved">function</span>(date) {
	<span class="reserved">this</span>.notBefore = date;
}



<span class="comment">/**
 * Sets the expiration date for the certificate.
 *
 * <span class="attrib">@param</span> {String or Date} date the date in format YYMMDDHHMMSSZ
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.setNotAfter = <span class="reserved">function</span>(date) {
	<span class="reserved">this</span>.notAfter = date;
}



<span class="comment">/**
 * Sets the subject name.
 *
 * &lt;p&gt;The subject name must be a JavaScript object containing the properties:&lt;/p&gt;
 * &lt;ul&gt;
 *  &lt;li&gt;C - the country&lt;/li&gt;
 *  &lt;li&gt;O - the organization&lt;/li&gt;
 *  &lt;li&gt;OU - the organization unit&lt;/li&gt;
 *  &lt;li&gt;CN - the common name&lt;/li&gt;
 * &lt;/ul&gt;
 * &lt;p&gt;Example:&lt;/p&gt;
 * &lt;pre&gt;
 *	var subject = { C:"UT", O:"ACME Corporation", CN:"Joe Doe" };
 * &lt;/pre&gt;
 * <span class="attrib">@param</span> {Object} subject the subject name
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.setSubject = <span class="reserved">function</span>(subject) {
	<span class="reserved">this</span>.subject = subject;
}



<span class="comment">/**
 * Sets the subjects public key
 *
 * &lt;p&gt;The methods accepts ECC and RSA Public Keys.&lt;/p&gt;
 *
 * <span class="attrib">@param</span> {Key} publicKey the subjects public key
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.setPublicKey = <span class="reserved">function</span>(publicKey) {
	<span class="reserved">this</span>.publicKey = publicKey;
}



<span class="comment">/**
 * Sets the signature algorithm. Currently only Crypto.RSA is supported
 *
 * <span class="attrib">@param</span> {Number} alg the signature algorithm, only Crypto.RSA supported
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.setSignatureAlgorithm = <span class="reserved">function</span>(alg) {
	<span class="reserved">this</span>.signatureAlgorithm = alg;
}



<span class="comment">/**
 * Adds an extension to the certificate
 *
 * &lt;p&gt;The structure is defined as:&lt;/p&gt;
 * &lt;pre&gt;
 *    Extension  ::=  SEQUENCE  {
 *        extnID      OBJECT IDENTIFIER,
 *        critical    BOOLEAN DEFAULT FALSE,
 *        extnValue   OCTET STRING
 *                    -- contains the DER encoding of an ASN.1 value
 *                    -- corresponding to the extension type identified
 *                    -- by extnID
 *        }
 *&lt;/pre&gt;
 * <span class="attrib">@param</span> {String} extnID the extensions object identifier
 * <span class="attrib">@param</span> {Boolean} critical the extension is critical
 * <span class="attrib">@param</span> {ByteString} the extension value as ByteString
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.addExtension = <span class="reserved">function</span>(extnID, critical, extnValue) {
	var t = new ASN1(<span class="literal">"extension"</span>, ASN1.SEQUENCE,
				new ASN1(<span class="literal">"extnID"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(extnID, OID))
			);

	<span class="reserved">if</span> (critical) {
		t.add(new ASN1(<span class="literal">"critical"</span>, ASN1.BOOLEAN, new ByteString(<span class="literal">"FF"</span>, HEX)));
	}

	t.add(new ASN1(<span class="literal">"extnValue"</span>, ASN1.OCTET_STRING, extnValue));
	<span class="reserved">this</span>.extensions.push(t);

}



<span class="comment">/**
 * Adds the key usage extension.
 *
 * &lt;p&gt;The following flags are defined:&lt;/p&gt;
 * &lt;pre&gt;
 * PKIXCommon.digitalSignature = 0x0080;
 * PKIXCommon.nonRepudiation   = 0x0040;
 * PKIXCommon.keyEncipherment  = 0x0020;
 * PKIXCommon.dataEncipherment = 0x0010;
 * PKIXCommon.keyAgreement     = 0x0008;
 * PKIXCommon.keyCertSign      = 0x0004;
 * PKIXCommon.cRLSign          = 0x0002;
 * PKIXCommon.encipherOnly     = 0x0001;
 * PKIXCommon.decipherOnly     = 0x8000;
 * &lt;/pre&gt;
 * <span class="attrib">@param</span> {Number} the key usage flags as combination of the flags defined above.
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.addKeyUsageExtension = <span class="reserved">function</span>(flags) {
	var t = new ASN1(ASN1.BIT_STRING, PKIXCommon.bitstringForInteger(flags));
	<span class="reserved">this</span>.addExtension(<span class="literal">"2.5.29.15"</span>, true, t.getBytes());
}

<span class="comment">// Deprecated: Use PKIXCommon. instead</span>
X509CertificateGenerator.digitalSignature	= 0x0080;
X509CertificateGenerator.nonRepudiation		= 0x0040;
X509CertificateGenerator.keyEncipherment	= 0x0020;
X509CertificateGenerator.dataEncipherment	= 0x0010;
X509CertificateGenerator.keyAgreement		= 0x0008;
X509CertificateGenerator.keyCertSign		= 0x0004;
X509CertificateGenerator.cRLSign			= 0x0002;
X509CertificateGenerator.encipherOnly		= 0x0001;
X509CertificateGenerator.decipherOnly		= 0x8000;



<span class="comment">/**
 * Adds the BasicConstraints extension.
 *
 * <span class="attrib">@param</span> {Boolean} cA the certificate belongs to a CA
 * <span class="attrib">@param</span> {Number} pathLenConstraint the maximum number of subordinate CA certificates
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.addBasicConstraintsExtension = <span class="reserved">function</span>(cA, pathLenConstraint) {
	var t = new ASN1(<span class="literal">"BasicConstraints"</span>,ASN1.SEQUENCE);
	<span class="reserved">if</span> (cA) {
		t.add(new ASN1(<span class="literal">"cA"</span>, ASN1.BOOLEAN, new ByteString(<span class="literal">"FF"</span>, HEX)));
	}
	<span class="reserved">if</span> (pathLenConstraint &gt;= 0) {
		var bb = new ByteBuffer();
		bb.append(pathLenConstraint);
		t.add(new ASN1(<span class="literal">"pathLenConstraint"</span>, ASN1.INTEGER, bb.toByteString()));
	}
	<span class="reserved">this</span>.addExtension(<span class="literal">"2.5.29.19"</span>, true, t.getBytes());
}



<span class="comment">/**
 * Adds the subject public key identifier extension based on the certificates subject key.
 *
 * &lt;p&gt;The key identifier is calculated as SHA-1 hash over the contents of the
 * subject public key (Without tag, length and number of unused bits.&lt;/p&gt;
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.addSubjectKeyIdentifierExtension = <span class="reserved">function</span>() {
	var spi = <span class="reserved">this</span>.getSubjectPublicKeyInfo();
	var keyvalue = spi.get(1).value.bytes(1);
	var crypto = new Crypto();
	var hash = crypto.digest(Crypto.SHA_1, keyvalue);
	
	var t = new ASN1(ASN1.OCTET_STRING, hash);
	<span class="reserved">this</span>.addExtension(<span class="literal">"2.5.29.14"</span>, false, t.getBytes());
}



<span class="comment">/**
 * Adds the authority public key identifier extension based on the issuers key.
 *
 * &lt;p&gt;The key identifier is calculated as SHA-1 hash over the contents of the
 * issuer public key (Without tag, length and number of unused bits.&lt;/p&gt;
 *
 * <span class="attrib">@param</span> {Key} publicKey the authority subject key
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.addAuthorityKeyIdentifierExtension = <span class="reserved">function</span>(publicKey) {
	<span class="reserved">if</span> (publicKey.getComponent(Key.MODULUS)) {
		var spi = PKIXCommon.createRSASubjectPublicKeyInfo(publicKey);
	} <span class="reserved">else</span> {
		var spi = PKIXCommon.createECSubjectPublicKeyInfo(publicKey, <span class="reserved">this</span>.encodeECDomainParameter);
	}

	var keyvalue = spi.get(1).value.bytes(1);
	var crypto = new Crypto();
	var hash = crypto.digest(Crypto.SHA_1, keyvalue);
	
	var t = new ASN1(ASN1.SEQUENCE,
					new ASN1(0x80, hash)
				);
	<span class="reserved">this</span>.addExtension(<span class="literal">"2.5.29.35"</span>, false, t.getBytes());
}



<span class="comment">/**
 * Adds the CRL distribution point URLs.
 *
 * <span class="attrib">@param</span> {String[]} url a list of URLs
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.addCRLDistributionPointURL = <span class="reserved">function</span>(url) {
	var t = new ASN1(<span class="literal">"cRLDistributionPoints"</span>, ASN1.SEQUENCE);

	<span class="reserved">for</span> (var i = 0; i &lt; url.length; i++) {
		t.add(	new ASN1(<span class="literal">"cRLDistributionPoint"</span>, ASN1.SEQUENCE,
					new ASN1(<span class="literal">"distributionPoint"</span>, 0xA0,
						new ASN1(<span class="literal">"fullName"</span>, 0xA0,
							new ASN1(<span class="literal">"uniformResourceIdentifier"</span>, 0x86, new ByteString(url[i], ASCII))
						)
					)
				));
	}
	<span class="reserved">this</span>.addExtension(<span class="literal">"id-ce-cRLDistributionPoints"</span>, false, t.getBytes());
}



<span class="comment">/**
 * Adds the extended key usage extension
 *
 * <span class="attrib">@param</span> {String[]} oids the list of object identifier names
 * <span class="attrib">@param</span> {Boolean} critical the extension is critical
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.addExtendedKeyUsages = <span class="reserved">function</span>(oids, critical) {
	var t = new ASN1(<span class="literal">"extKeyUsages"</span>, ASN1.SEQUENCE);

	<span class="reserved">for</span> (var i = 0; i &lt; oids.length; i++) {
		t.add( new ASN1(<span class="literal">"keyPurposeId"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(oids[i], OID) ));
	}
	<span class="reserved">this</span>.addExtension(<span class="literal">"id-ce-extKeyUsage"</span>, critical, t.getBytes());
}



<span class="comment">/**
 * Gets the issuer name as TLV object
 *
 * <span class="attrib">@return</span> the issuer RDNSequence
 * <span class="attrib">@type</span> ASN1
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.getIssuer = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (<span class="reserved">this</span>.issuer instanceof ASN1) {
		<span class="reserved">return</span> <span class="reserved">this</span>.issuer;
	} <span class="reserved">else</span> {
		<span class="reserved">return</span> PKIXCommon.encodeName(<span class="reserved">this</span>.issuer);
	}
}



<span class="comment">/**
 * Gets the certificate validity as TLV object
 *
 * <span class="attrib">@return</span> the certificates validity
 * <span class="attrib">@type</span> ASN1
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.getValidity = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"validity"</span>, ASN1.SEQUENCE);

	var ts = <span class="reserved">this</span>.notBefore;
	<span class="reserved">if</span> (typeof(ts) != <span class="literal">"string"</span>) {
		ts = PKIXCommon.dtoUTC(<span class="reserved">this</span>.notBefore);
	}
	t.add(new ASN1(<span class="literal">"notBefore"</span>, ASN1.UTCTime, new ByteString(ts, ASCII)));
	
	var ts = <span class="reserved">this</span>.notAfter;
	<span class="reserved">if</span> (typeof(ts) != <span class="literal">"string"</span>) {
		ts = PKIXCommon.dtoUTC(<span class="reserved">this</span>.notAfter);
	}
	t.add(new ASN1(<span class="literal">"notAfter"</span>, ASN1.UTCTime, new ByteString(ts, ASCII)));
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Gets the subject name as TLV object
 *
 * <span class="attrib">@return</span> the issuer RDNSequence
 * <span class="attrib">@type</span> ASN1
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.getSubject = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (<span class="reserved">this</span>.subject instanceof ASN1) {
		<span class="reserved">return</span> <span class="reserved">this</span>.subject;
	} <span class="reserved">else</span> {
		<span class="reserved">return</span> PKIXCommon.encodeName(<span class="reserved">this</span>.subject);
	}
}



<span class="comment">/**
 * Gets the subject's public key as TLV object
 *
 * <span class="attrib">@return</span> the subject's public key info
 * <span class="attrib">@type</span> ASN1
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.getSubjectPublicKeyInfo = <span class="reserved">function</span>() {
	<span class="reserved">if</span> (<span class="reserved">this</span>.publicKey.getComponent(Key.MODULUS)) {
		<span class="reserved">return</span> PKIXCommon.createRSASubjectPublicKeyInfo(<span class="reserved">this</span>.publicKey);
	} <span class="reserved">else</span> {
		<span class="reserved">return</span> PKIXCommon.createECSubjectPublicKeyInfo(<span class="reserved">this</span>.publicKey, <span class="reserved">this</span>.encodeECDomainParameter);
	}
}



<span class="comment">/**
 * Gets the certificate extension as TLV object
 *
 * <span class="attrib">@return</span> the certificate extensions
 * <span class="attrib">@type</span> ASN1
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.getExtensions = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"extensions"</span>, 0xA3);
	var s = new ASN1(<span class="literal">"extensions"</span>, ASN1.SEQUENCE);
	
	t.add(s);
	
	<span class="reserved">for</span> (var i = 0; i &lt; <span class="reserved">this</span>.extensions.length; i++) {
		s.add(<span class="reserved">this</span>.extensions[i]);
	}
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Gets the part of the certificate that will be signed
 *
 * <span class="attrib">@return</span> the TBSCertificate part
 * <span class="attrib">@type</span> ASN1
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.getTbsCertificate = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"tbsCertificate"</span>, ASN1.SEQUENCE);
	t.add(new ASN1(<span class="literal">"version"</span>, 0xA0,
			new ASN1(<span class="literal">"version"</span>, ASN1.INTEGER, new ByteString(<span class="literal">"02"</span>, HEX))));
	t.add(new ASN1(<span class="literal">"serialNumber"</span>, ASN1.INTEGER, PKIXCommon.convertUnsignedInteger(<span class="reserved">this</span>.serialNumber)));
	t.add(<span class="reserved">this</span>.getSignatureAlgorithm());
	t.add(<span class="reserved">this</span>.getIssuer());
	t.add(<span class="reserved">this</span>.getValidity());
	t.add(<span class="reserved">this</span>.getSubject());
	t.add(<span class="reserved">this</span>.getSubjectPublicKeyInfo());
	t.add(<span class="reserved">this</span>.getExtensions());
	<span class="reserved">return</span> t;
}



<span class="comment">/**
 * Gets the signature algorithm TLV object
 *
 * <span class="attrib">@return</span> the signature algorithm object
 * <span class="attrib">@type</span> ASN1
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.getSignatureAlgorithm = <span class="reserved">function</span>() {
	var t = new ASN1(<span class="literal">"signatureAlgorithm"</span>, ASN1.SEQUENCE);

	<span class="reserved">if</span> (<span class="reserved">this</span>.signatureAlgorithm == Crypto.RSA) {
		t.add(new ASN1(<span class="literal">"algorithm"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"1.2.840.113549.1.1.5"</span>, OID)));
		t.add(new ASN1(<span class="literal">"parameters"</span>, ASN1.NULL, new ByteString(<span class="literal">""</span>, HEX)));
	} <span class="reserved">else</span> <span class="reserved">if</span> (<span class="reserved">this</span>.signatureAlgorithm == Crypto.RSA_SHA256) {
		t.add(new ASN1(<span class="literal">"algorithm"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"1.2.840.113549.1.1.11"</span>, OID)));
		t.add(new ASN1(<span class="literal">"parameters"</span>, ASN1.NULL, new ByteString(<span class="literal">""</span>, HEX)));
	} <span class="reserved">else</span> <span class="reserved">if</span> (<span class="reserved">this</span>.signatureAlgorithm == Crypto.ECDSA_SHA256) {
		t.add(new ASN1(<span class="literal">"algorithm"</span>, ASN1.OBJECT_IDENTIFIER, new ByteString(<span class="literal">"ecdsa-with-SHA256"</span>, OID)));
		t.add(new ASN1(<span class="literal">"parameters"</span>, ASN1.NULL, new ByteString(<span class="literal">""</span>, HEX)));
	} <span class="reserved">else</span> {
		throw new GPError(<span class="literal">"X509CertificateGenerator"</span>, GPError.INVALID_MECH, <span class="reserved">this</span>.signatureAlgorithm, <span class="literal">"Invalid algorithm"</span>);
	}
		
	<span class="reserved">return</span> t;
}

 

<span class="comment">/**
 * Generates the certificate.
 *
 * <span class="attrib">@return</span> the generated certificate
 * <span class="attrib">@type</span> X509
 */</span>
X509CertificateGenerator.<span class="reserved">prototype</span>.generateX509Certificate = <span class="reserved">function</span>(privateKey) {
	var certificate = new ASN1(<span class="literal">"certificate"</span>, ASN1.SEQUENCE);
	
	var tbs = <span class="reserved">this</span>.getTbsCertificate();
	certificate.add(tbs);
	certificate.add(<span class="reserved">this</span>.getSignatureAlgorithm());
	
	var signature = <span class="reserved">this</span>.crypto.sign(privateKey, <span class="reserved">this</span>.signatureAlgorithm, tbs.getBytes());
	signature = (new ByteString(<span class="literal">"00"</span>, HEX)).concat(signature);

	var signatureValue = new ASN1(<span class="literal">"signatureValue"</span>, ASN1.BIT_STRING, signature);
	certificate.add(signatureValue);
	
<span class="comment">//	print(certificate);</span>
	<span class="reserved">return</span> new X509(certificate.getBytes());
}



<span class="reserved">function</span> X509CertificateGeneratorRSATest() {

	var crypto = new Crypto();
	
	var caPrivateKey = new Key();
	caPrivateKey.setType(Key.PRIVATE);

	var caPublicKey = new Key();
	caPublicKey.setType(Key.PUBLIC);
	caPublicKey.setSize(1024);
	
	crypto.generateKeyPair(Crypto.RSA, caPublicKey, caPrivateKey);
	
<span class="comment">//	var caPrivKey = new Key("profiles/kp_rsa_private.xml");</span>

	var x = new X509CertificateGenerator(crypto);

	x.reset();
	x.setSerialNumber(new ByteString(<span class="literal">"01"</span>, HEX));
	x.setSignatureAlgorithm(Crypto.RSA);
	var issuer = { C:<span class="literal">"UT"</span>, O:<span class="literal">"ACME Corporation"</span>, CN:<span class="literal">"Test-CA"</span> };
	x.setIssuer(issuer);
	x.setNotBefore(<span class="literal">"060825120000Z"</span>);
	x.setNotAfter(<span class="literal">"160825120000Z"</span>);
	var subject = { C:<span class="literal">"UT"</span>, O:<span class="literal">"Utopia CA"</span>, OU:<span class="literal">"ACME Corporation"</span>, CN:<span class="literal">"Joe Doe"</span> };
	x.setSubject(subject);

	x.setPublicKey(caPublicKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );
							
	x.addBasicConstraintsExtension(true, 0);
	x.addSubjectKeyIdentifierExtension();
	x.addAuthorityKeyIdentifierExtension(caPublicKey);

	var cert = x.generateX509Certificate(caPrivateKey);
	var fn = GPSystem.mapFilename(<span class="literal">"cert_rsa.cer"</span>, GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, cert.getBytes());

	cert.verifyWith(cert);

	print(cert);
}



<span class="reserved">function</span> X509CertificateGeneratorECCTest() {

	var crypto = new Crypto();
	
	var caPrivateKey = new Key();
	caPrivateKey.setType(Key.PRIVATE);

	var caPublicKey = new Key();
	caPublicKey.setType(Key.PUBLIC);
	caPublicKey.setComponent(Key.ECC_CURVE_OID, new ByteString(<span class="literal">"brainpoolP256r1"</span>, OID));
	
	crypto.generateKeyPair(Crypto.EC, caPublicKey, caPrivateKey);

	var x = new X509CertificateGenerator(crypto);

	x.reset();
	x.setSerialNumber(new ByteString(<span class="literal">"01"</span>, HEX));
	x.setSignatureAlgorithm(Crypto.ECDSA_SHA256);
	var issuer = { C:<span class="literal">"UT"</span>, O:<span class="literal">"ACME Corporation"</span>, CN:<span class="literal">"Test-CA"</span> };
	x.setIssuer(issuer);
	var t = new Date();
	x.setNotBefore(t);
	x.setNotAfter(PKIXCommon.addDays(t, 180));
	var subject = { C:<span class="literal">"UT"</span>, O:<span class="literal">"Utopia CA"</span>, OU:<span class="literal">"ACME Corporation"</span>, CN:<span class="literal">"Joe Doe"</span> };
	x.setSubject(subject);

	x.setPublicKey(caPublicKey);

	x.addKeyUsageExtension(	PKIXCommon.digitalSignature |
							PKIXCommon.keyCertSign |
							PKIXCommon.cRLSign );
							
	x.addBasicConstraintsExtension(true, 0);
	x.addSubjectKeyIdentifierExtension();
	x.addAuthorityKeyIdentifierExtension(caPublicKey);

	var cert = x.generateX509Certificate(caPrivateKey);
	
	var fn = GPSystem.mapFilename(<span class="literal">"cert_ecc.cer"</span>, GPSystem.USR);
	PKIXCommon.writeFileToDisk(fn, cert.getBytes());

	cert.verifyWith(cert);
	
	print(cert);
	print(new ASN1(cert.getBytes()));
}

<span class="comment">// X509CertificateGeneratorECCTest();</span>
</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title="x509name.js Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>x509name.js</h2>
	
</center>

	


<h4>Summary</h4>
<p>
	
		No overview generated for 'x509name.js'<BR/><BR/>
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>Class Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="X509Name.html">X509Name</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->


        <pre class="sourceview"><span class="comment">/*
 *  ---------
 * |.##&gt; &lt;##.|  Open Smart Card Development Platform (www.openscdp.org)
 * |#       #|  
 * |#       #|  Copyright (c) 1999-2006 CardContact Software &amp; System Consulting
 * |'##&gt; &lt;##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  --------- 
 *
 *  This file is part of OpenSCDP.
 *
 *  OpenSCDP is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  OpenSCDP is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with OpenSCDP; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 *  X509Name - Class to support X500 Names
 */</span>

<span class="comment">// 	Name ::= CHOICE {</span>
<span class="comment">// 	     RDNSequence }</span>
<span class="comment">// 	</span>
<span class="comment">// 	RDNSequence ::= SEQUENCE OF RelativeDistinguishedName</span>
<span class="comment">// 	</span>
<span class="comment">// 	RelativeDistinguishedName ::=</span>
<span class="comment">// 		SET OF AttributeTypeAndValue</span>
<span class="comment">// 	</span>
<span class="comment">// 	AttributeTypeAndValue ::= SEQUENCE {</span>
<span class="comment">// 		type     AttributeType,</span>
<span class="comment">// 		value    AttributeValue }</span>
<span class="comment">// 	</span>
<span class="comment">// 	AttributeType ::= OBJECT IDENTIFIER</span>
<span class="comment">// 	</span>
<span class="comment">// 	AttributeValue ::= ANY DEFINED BY AttributeType</span>
   
   
<span class="reserved">function</span> X509Name() {

	<span class="reserved">if</span> (arguments.length == 1) {
		<span class="reserved">if</span> (arguments[0] instanceof ASN1) {
			var seq = arguments[0];
			<span class="reserved">if</span> (!seq.isconstructed) {
				throw new GPError(<span class="literal">"X509Name"</span>, GPError.INVALID_DATA, 1, <span class="literal">"Name must be constructed"</span>);
			}

			var seq = seq.get(0);
			<span class="reserved">if</span> (seq.tag != ASN1.SEQUENCE) {
				throw new GPError(<span class="literal">"X509Name"</span>, GPError.INVALID_DATA, 1, <span class="literal">"RDNSequence must be SEQUENCE"</span>);
			}
			
			<span class="reserved">this</span>.rdn = new Array();
			<span class="reserved">for</span> (var i = 0; i &lt; seq.elements; i++) {
				var set = seq.get(i)
<span class="comment">//				print("RDN" + i + ": " + set);</span>
				<span class="reserved">if</span> (set.tag != ASN1.SET) {
					throw new GPError(<span class="literal">"X509Name"</span>, GPError.INVALID_DATA, 1, <span class="literal">"RDNSequence must only contain SETs"</span>);
				}
				<span class="reserved">for</span> (var j = 0; j &lt; set.elements; j++) {
					var attr = set.get(j);
					<span class="reserved">if</span> (attr.tag != ASN1.SEQUENCE) {
						throw new GPError(<span class="literal">"X509Name"</span>, GPError.INVALID_DATA, 1, <span class="literal">"AttributeTypeAndValue must be SEQUENCE"</span>);
					}
					<span class="reserved">if</span> (attr.elements != 2) {
						throw new GPError(<span class="literal">"X509Name"</span>, GPError.INVALID_DATA, 1, <span class="literal">"AttributeTypeAndValue must have 2 elements"</span>);
					}
					var attrType = attr.get(0);
					<span class="reserved">if</span> (attrType.tag != ASN1.OBJECT_IDENTIFIER) {
						throw new GPError(<span class="literal">"X509Name"</span>, GPError.INVALID_DATA, 1, <span class="literal">"AttributeType must be OBJECT IDENTIFIER"</span>);
					}
					var oid = attrType.value.toString(HEX);
					var attrValue = attr.get(1);
<span class="comment">//					print("Type " + oid + " = " + attrValue);</span>
					<span class="reserved">this</span>.rdn[oid] = attrValue;
				}
			}
		} <span class="reserved">else</span> {
			throw new GPError(<span class="literal">"X509Name"</span>, GPError.INVALID_TYPE, 1, <span class="literal">"Argument must be of type ASN1"</span>);
		}			
	}
}



<span class="reserved">function</span> X509Name_hasRDN(oid) {
	<span class="reserved">return</span> <span class="reserved">this</span>.rdn[oid] != undefined;
}



<span class="reserved">function</span> X509Name_getRDNAsString(oid) {

	var r = <span class="reserved">this</span>.rdn[oid];
	<span class="reserved">if</span> (r == undefined) {
		throw new GPError(<span class="literal">"X509Name"</span>, GPError.INVALID_INDEX,0,<span class="literal">"No matching RDN found"</span>);
	}
	
	<span class="reserved">if</span> (r.tag == ASN1.UTF8String) {
		<span class="reserved">return</span> r.value.toString(UTF8);
	} <span class="reserved">else</span> {
		<span class="reserved">return</span> r.value.toString(ASCII);
	}
}



<span class="reserved">function</span> X509Name_toString() {
	var result = <span class="literal">""</span>;
	
	<span class="reserved">if</span> (<span class="reserved">this</span>.hasRDN(X509Name.commonName)) {
		result += <span class="literal">"CN="</span> + <span class="reserved">this</span>.getRDNAsString(X509Name.commonName);
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.hasRDN(X509Name.organizationalUnitName)) {
		<span class="reserved">if</span> (result.length &gt; 0)
			result += <span class="literal">","</span>;
			
		result += <span class="literal">"OU="</span> + <span class="reserved">this</span>.getRDNAsString(X509Name.organizationalUnitName);
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.hasRDN(X509Name.organizationName)) {
		<span class="reserved">if</span> (result.length &gt; 0)
			result += <span class="literal">","</span>;
			
		result += <span class="literal">"O="</span> + <span class="reserved">this</span>.getRDNAsString(X509Name.organizationName);
	}

	<span class="reserved">if</span> (<span class="reserved">this</span>.hasRDN(X509Name.countryName)) {
		<span class="reserved">if</span> (result.length &gt; 0)
			result += <span class="literal">","</span>;
			
		result += <span class="literal">"C="</span> + <span class="reserved">this</span>.getRDNAsString(X509Name.countryName);
	}

	<span class="reserved">return</span> result;	
}


X509Name.name = <span class="literal">"550429"</span>;
X509Name.surname = <span class="literal">"550404"</span>;
X509Name.givenname = <span class="literal">"55042A"</span>;
X509Name.initials = <span class="literal">"55042B"</span>;
X509Name.generationQualifier = <span class="literal">"55042C"</span>;
X509Name.commonName = <span class="literal">"550403"</span>;
X509Name.localityName = <span class="literal">"550407"</span>;
X509Name.stateOrProvinceName = <span class="literal">"550408"</span>;
X509Name.organizationName = <span class="literal">"55040A"</span>;
X509Name.organizationalUnitName = <span class="literal">"55040B"</span>;
X509Name.title = <span class="literal">"55040C"</span>;
X509Name.dnQualifier = <span class="literal">"55042C"</span>;
X509Name.countryName = <span class="literal">"550406"</span>;
X509Name.serialNumber = <span class="literal">"550405"</span>;
X509Name.emailAddress = <span class="literal">"2A864886F70D010901"</span>;

X509Name.<span class="reserved">prototype</span>.toString = X509Name_toString;
X509Name.<span class="reserved">prototype</span>.getRDNAsString = X509Name_getRDNAsString;
X509Name.<span class="reserved">prototype</span>.hasRDN = X509Name_hasRDN;


</pre>
	<hr>



<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
 Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
	
		parent.document.title=" Overview";
	
}
</script>
</head>
<body bgcolor="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev">	&nbsp;<font class="NavBarFont1Rev"><b>Overview</b></font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1"> <font class="NavBarFont1">File</font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> 	<font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<center>
	
	   <h2>JSDoc Documentation</h2>
	
</center>


<h4>Summary</h4>
<p>
	
    	No summary generated for these documents.
	
</p>

<hr>


    <table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="#CCCCFF" class="TableHeadingColor">
    <td colspan=2><font size="+2">
    
        <b>File Summary</b>
    
    </font></td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-ARRDecorator.js.html">ARRDecorator.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-BaseTestRunner.js.html">BaseTestRunner.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-CardOutlineFactory.js.html">CardOutlineFactory.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-CardOutlineFactory2.0.js.html">CardOutlineFactory2.0.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-crlgenerator.js.html">crlgenerator.js</a></b></td>
    <td>Simple CRL generator class</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-CRTDecorator.js.html">CRTDecorator.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-eccutils.js.html">eccutils.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-encrypt-file.js.html">encrypt-file.js</a></b></td>
    <td>Encrypt a file using hybrid encryption mode</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-explore.js.html">explore.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-FCPDecorator.js.html">FCPDecorator.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-file.js.html">file.js</a></b></td>
    <td>General File I/O Class</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-OutlineCore.js.html">OutlineCore.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-p15classes.js.html">p15classes.js</a></b></td>
    <td>Classes to parse PKCS#15 data structures</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-pkcs10.js.html">pkcs10.js</a></b></td>
    <td>A PKCS#10 generator class based on RFC5280</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-pkcs8.js.html">pkcs8.js</a></b></td>
    <td>Basic helper functions to convert PKCS#8 data to GP keys and vice versa</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-pkixcommon.js.html">pkixcommon.js</a></b></td>
    <td>Common classes and functions for PKIX</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-TestGroup.js.html">TestGroup.js</a></b></td>
    <td>Core elements of a test group containing individual test cases</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-TestProcedure.js.html">TestProcedure.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-TestRunner.js.html">TestRunner.js</a></b></td>
    <td>Test runner framework</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-x509certificategenerator.js.html">x509certificategenerator.js</a></b></td>
    <td>A X509 certificate generator class following RFC5280</td>
    </tr>
    
    <tr bgcolor="white" class="TableRowColor">
    <td width="15%"><b><a href="overview-summary-x509name.js.html">x509name.js</a></b></td>
    <td>&nbsp;</td>
    </tr>
    
    </table>
    <hr/> 


<!-- ========== METHOD SUMMARY =========== -->

<!-- ========== END METHOD SUMMARY =========== -->




<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
  <tr align="center" valign="top">
  
  
  <td bgcolor="#FFFFFF" class="NavBarCell1Rev"> &nbsp;<font class="NavBarFont1Rev"><b>Overview</b></font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1"> <font class="NavBarFont1">File</font>&nbsp;</td>
  

  <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
  <td bgcolor="#EEEEFF" class="NavBarCell1">    <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
  </tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b></b></em>
</td>
</tr>

<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
  <a href="index.html" target="_top"><b>FRAMES</b></a>  &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<font size="-1">

</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 Class Hierarchy
</TITLE>
<LINK REL="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
<SCRIPT>
function asd()
{
parent.document.title=" Class Hierarchy";
}
</SCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="asd();">

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"><A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><b>Overview</b></A></FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev">  &nbsp;<FONT CLASS="NavBarFont1Rev"><b>Tree</b></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><b>Index</b></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><b>Help</b></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD BGCOLOR="#FFFFFF" ALIGN="right" VALIGN="top"><EM>
<B></B></EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="overview-summary.html" TARGET="_top"><B>NO FRAMES</B></A>
&nbsp;&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->

<HR>
<H2>Class Hierarchy</H2>

<UL><LI TYPE="circle">Object</LI><UL>
                <LI TYPE="circle"><B><a href='AlgorithmInfo.html'>AlgorithmInfo</a></B></LI> 
                <LI TYPE="circle"><B><a href='CardOutlineFactory.html'>CardOutlineFactory</a></B></LI> 
                <LI TYPE="circle"><B><a href='CRLGenerator.html'>CRLGenerator</a></B></LI> 
                <LI TYPE="circle"><B><a href='DataOutline.html'>DataOutline</a></B></LI> 
                <LI TYPE="circle"><B><a href='ECCUtils.html'>ECCUtils</a></B></LI> 
                <LI TYPE="circle"><B><a href='EncryptFile.html'>EncryptFile</a></B></LI> 
                <LI TYPE="circle"><B><a href='File.html'>File</a></B></LI> 
                <LI TYPE="circle"><B><a href='OutlineATR.html'>OutlineATR</a></B></LI> 
                <LI TYPE="circle"><B><a href='OutlineCard.html'>OutlineCard</a></B></LI> 
                <LI TYPE="circle"><B><a href='OutlineDataObject.html'>OutlineDataObject</a></B></LI> 
                <LI TYPE="circle"><B><a href='OutlineDF.html'>OutlineDF</a></B></LI> 
                <LI TYPE="circle"><B><a href='OutlineEF.html'>OutlineEF</a></B></LI> 
                <LI TYPE="circle"><B><a href='OutlineFCP.html'>OutlineFCP</a></B></LI> 
                <LI TYPE="circle"><B><a href='OutlinePKCS15.html'>OutlinePKCS15</a></B></LI> 
                <LI TYPE="circle"><B><a href='OutlineRecord.html'>OutlineRecord</a></B></LI> 
                <LI TYPE="circle"><B><a href='PKCS10Generator.html'>PKCS10Generator</a></B></LI> 
                <LI TYPE="circle"><B><a href='PKCS15.html'>PKCS15</a></B></LI> 
                <LI TYPE="circle"><B><a href='PKCS15_ApplicationTemplate.html'>PKCS15_ApplicationTemplate</a></B></LI> 
                <LI TYPE="circle"><B><a href='PKCS15_CIAInfo.html'>PKCS15_CIAInfo</a></B></LI> 
                <LI TYPE="circle"><B><a href='PKCS15_CIO.html'>PKCS15_CIO</a></B></LI> <UL>
                <LI TYPE="circle"><B><a href='PKCS15_CommonAuthenticationObjectAttributes.html'>PKCS15_CommonAuthenticationObjectAttributes</a></B></LI> <UL>
                <LI TYPE="circle"><B><a href='PKCS15_AuthenticationObject.html'>PKCS15_AuthenticationObject</a></B></LI> </UL>
                <LI TYPE="circle"><B><a href='PKCS15_CommonCertificateAttributes.html'>PKCS15_CommonCertificateAttributes</a></B></LI> <UL>
                <LI TYPE="circle"><B><a href='PKCS15_Certificate.html'>PKCS15_Certificate</a></B></LI> </UL>
                <LI TYPE="circle"><B><a href='PKCS15_CommonDataContainerObjectAttributes.html'>PKCS15_CommonDataContainerObjectAttributes</a></B></LI> <UL>
                <LI TYPE="circle"><B><a href='PKCS15_DataContainerObject.html'>PKCS15_DataContainerObject</a></B></LI> </UL>
                <LI TYPE="circle"><B><a href='PKCS15_CommonKeyAttributes.html'>PKCS15_CommonKeyAttributes</a></B></LI> <UL>
                <LI TYPE="circle"><B><a href='PKCS15_CommonPrivateKeyAttributes.html'>PKCS15_CommonPrivateKeyAttributes</a></B></LI> <UL>
                <LI TYPE="circle"><B><a href='PKCS15_PrivateKey.html'>PKCS15_PrivateKey</a></B></LI> </UL>
                <LI TYPE="circle"><B><a href='PKCS15_CommonSecretKeyAttributes.html'>PKCS15_CommonSecretKeyAttributes</a></B></LI> <UL>
                <LI TYPE="circle"><B><a href='PKCS15_SecretKey.html'>PKCS15_SecretKey</a></B></LI> </UL></UL></UL>
                <LI TYPE="circle"><B><a href='PKCS15_CIODDO.html'>PKCS15_CIODDO</a></B></LI> 
                <LI TYPE="circle"><B><a href='PKCS15_PasswordAuthenticationObject.html'>PKCS15_PasswordAuthenticationObject</a></B></LI> 
                <LI TYPE="circle"><B><a href='PKCS15_Path.html'>PKCS15_Path</a></B></LI> 
                <LI TYPE="circle"><B><a href='PKCS8.html'>PKCS8</a></B></LI> 
                <LI TYPE="circle"><B><a href='PKIXCommon.html'>PKIXCommon</a></B></LI> 
                <LI TYPE="circle"><B><a href='TestCaseRunner.html'>TestCaseRunner</a></B></LI> 
                <LI TYPE="circle"><B><a href='TestGroup.html'>TestGroup</a></B></LI> 
                <LI TYPE="circle"><B><a href='TestGroupRunner.html'>TestGroupRunner</a></B></LI> 
                <LI TYPE="circle"><B><a href='TestLogFile.html'>TestLogFile</a></B></LI> 
                <LI TYPE="circle"><B><a href='TestProcedure.html'>TestProcedure</a></B></LI> 
                <LI TYPE="circle"><B><a href='TestProcedureRunner.html'>TestProcedureRunner</a></B></LI> 
                <LI TYPE="circle"><B><a href='TestReport.html'>TestReport</a></B></LI> 
                <LI TYPE="circle"><B><a href='TestResult.html'>TestResult</a></B></LI> 
                <LI TYPE="circle"><B><a href='TestRunner.html'>TestRunner</a></B></LI> 
                <LI TYPE="circle"><B><a href='TestStepRunner.html'>TestStepRunner</a></B></LI> 
                <LI TYPE="circle"><B><a href='X509CertificateGenerator.html'>X509CertificateGenerator</a></B></LI> 
                <LI TYPE="circle"><B><a href='X509Name.html'>X509Name</a></B></LI> </UL></UL>

<HR>

<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"><A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><b>Overview</b></A></FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev">  &nbsp;<FONT CLASS="NavBarFont1Rev"><b>Tree</b></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><b>Index</b></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><b>Help</b></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD BGCOLOR="#FFFFFF" ALIGN="right" VALIGN="top"><EM>
<B></B></EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="overview-summary.html" TARGET="_top"><B>NO FRAMES</B></A>
&nbsp;&nbsp;
<SCRIPT>
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->

<hr>
<FONT SIZE="-1">

</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" parent="_parent">JSDoc</a> on Thu Jun 25 17:01:35 2026</div>
</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 x509certificategenerator.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" x509certificategenerator.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-x509certificategenerator.js.html" 
                                            target="classFrame">x509certificategenerator.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="X509CertificateGenerator.html" TARGET="classFrame">X509CertificateGenerator</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
 x509name.js 
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title=" x509name.js";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">

<H3 class="FrameHeadingFont"><B></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary-x509name.js.html" 
                                            target="classFrame">x509name.js</a></B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%">


<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="X509Name.html" TARGET="classFrame">X509Name</A>
<BR>
</FONT></TD>
</TR>

</TABLE>

</BODY>
</HTML>
/* JSDoc style sheet */

/* Define colors, fonts and other style attributes here to override the defaults */

/* Page background color */
body { background-color: #FFFFFF }

/* Table colors */
.TableHeadingColor     { background: #CCCCFF } /* Dark mauve */
.TableSubHeadingColor  { background: #EEEEFF } /* Light mauve */
.TableRowColor         { background: #FFFFFF } /* White */

/* Font used in left-hand frame lists */
.FrameTitleFont   { font-size: 10pt; font-family: Helvetica, Arial, san-serif }
.FrameHeadingFont { font-size: 10pt; font-family: Helvetica, Arial, san-serif }
.FrameItemFont    { font-size: 10pt; font-family: Helvetica, Arial, san-serif }

/* Example of smaller, sans-serif font in frames */
/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */

/* Navigation bar fonts and colors */
.NavBarCell1    { background-color:#EEEEFF;}/* Light mauve */
.NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */
.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}

.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}

.jsdoc_ctime    { font-family: Arial, Helvetica, sans-serif; font-size: 9pt;
                    text-align: right }

/* Sourcecode view */
.sourceview { background: #FFFFFF }
.attrib { color: #DD7777 }
.comment { color: #55AA55 }
.reserved { color: #FF5555 }
.literal { color: #5555FF }

<html>
<body bgcolor=#ffffff>

Copyright (c) 2000-2005 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
<p>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
and associated documentation files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
<p>
The above copyright notice and this permission notice shall be included in all copies or substantial
portions of the Software.
<p>
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
</body>
</html>
GLOBALPLATFORM LICENSE AGREEMENT 
This License Agreement ("the Agreement") is a legal agreement between you and 
GlobalPlatform, Inc., a Delaware corporation with a place of business at 900 Metro Center 
Boulevard, Foster City, California, 94404 ("GlobalPlatform"), which owns or licenses the 
Chip Card Technology, Software and Specifications relating to chip-based card products, as 
listed in the "Technical Downloads" page of the GlobalPlatform web site. As used in this 
Agreement: 
"You" or "you" means the company, entity or individual ("Licensee") that is acquiring a 
license under this Agreement. 
"Affiliate" is an entity that directly or indirectly controls, is controlled by, or is under common 
control with another entity, so long as such control exists. "Control" means beneficial 
ownership of more than fifty percent of the voting stock or equity in an entity. 
"End User" is a company, entity or individual that is the ultimate purchaser, either directly or 
indirectly, from Licensee or an Affiliate of Licensee, of a Compliant Product (as defined 
hereinafter). 
"Chip Card Technology" means each of the GlobalPlatform technologies listed in the 
"Technical Downloads" page of the GlobalPlatform web site, and Updates thereto (as defined 
hereinafter). 
"Software" means the software listed in the "Technical Downloads" page of the 
GlobalPlatform web site, and Updates thereto. 
"Specifications" means the specifications listed in the "Technical Downloads" page of the 
GlobalPlatform web site, and Updates thereto. 
"Update(s)" means any update, revision, or extension of some or all of the Chip Card 
Technology, Software, and Specifications. 
"Compliant Product" is a product or service that complies with one or more of the 
Specifications. 
You must accept all of the terms of this Agreement before viewing, downloading, taking 
possession of, or otherwise using the information governed by this Agreement. By clicking on 
the "ACCEPT" button below, you are consenting to be bound by and are becoming a party to 
this Agreement, and you are representing that you are authorized to bind your company, as 
identified by you in the Acceptance Form at the end of this Agreement, as a party to this 
Agreement. If you do not agree to all of the terms of this Agreement, click the "DO NOT 
ACCEPT" button at the end of this Agreement. 
1. GRANT OF LICENSE.  
1.1 License. GlobalPlatform hereby grants to Licensee, its Affiliates and End Users, a non-
exclusive, perpetual (except as provided for herein), royalty-free, fully paid-up, worldwide 
license in the Chip Card Technology and the Software for purposes of creating, developing, 
testing, demonstrating, using, producing, licensing, distributing, copying, selling and 
otherwise exploiting Compliant Products, and the right to reproduce and distribute the 
Specifications, subject to the conditions set forth in this Agreement.  
1.2 Modifications. Licensee, its Affiliates and End Users, shall not modify the Specifications. 
Licensee and its Affiliates may modify the Software, but only to the extent the Software, as 
modified, is used as or in connection with a product or service which is a Compliant Product.  
1.3 Sublicensing. Licensee, its Affiliates and End Users, shall not sublicense any of the 
Specifications. Licensee and its Affiliates may sublicense, through one or more 
intermediaries, the Software, to the extent necessary to create, develop, test, demonstrate, use, 
produce, license, distribute, copy, sell or otherwise exploit any Compliant Products, and may 
disclose the Specifications and Software to third party developers, subject to the conditions 
set forth in this Agreement. 
2. INTELLECTUAL PROPERTY. Licensee acknowledges and agrees that, as between 
Licensee and GlobalPlatform, all Chip Card Technology shall at all times be the exclusive 
property of GlobalPlatform, and nothing in this Agreement shall be construed to convey to 
Licensee any ownership interest in the Chip Card Technology, Software or Specifications. 
Licensee shall be the owner of any derivative works it develops based on the Chip Card 
Technology, including commercial implementations of the Software, but Licensee's 
ownership and use of such derivative works shall be subject in all respects to GlobalPlatform's 
ownership of the underlying Chip Card Technology and the terms and conditions upon which 
Licensee may use the underlying Chip Card Technology under this Agreement. 
GlobalPlatform acknowledges and agrees that, as between Licensee and GlobalPlatform, 
Compliant Products developed by Licensee shall be the exclusive property of Licensee. 
3. SUPPORT AND MAINTENANCE. GlobalPlatform shall have no obligation to Licensee, 
its Affiliates or End Users to support or maintain the Chip Card Technology. 
4. TERMINATION OF LICENSE.  
4.1 Breach. In the event of a breach of this Agreement by Licensee or its Affiliates, 
GlobalPlatform shall give Licensee written notice and an opportunity to cure. If the breach is 
not cured within thirty (30) days after written notice, or if the breach is of a nature that cannot 
be cured, then GlobalPlatform may immediately or thereafter terminate the licenses granted in 
this Agreement; provided, however, that Licensee, its Affiliates and End Users shall be 
permitted to continue to use Compliant Products created or obtained prior to such termination, 
and to use the Chip Card Technology, Specifications and Software as they existed on the date 
of such termination (but not subsequent Updates thereto), in a manner not inconsistent with 
the terms of this Agreement.  
4.2 Notice. Licensee may immediately terminate the licenses granted in this Agreement upon 
written notice to GlobalPlatform.  
4.3 Litigation. GlobalPlatform may terminate all or part of the licenses granted in this 
Agreement in the event Compliant Products sold by Licensee or its Affiliates give rise to a 
lawsuit against an Indemnified Party (as defined in Section 7 below), containing at least one 
claim predicated upon manufacture, use or sale of the Compliant Products and (a) for which 
the indemnification in Section 7 does not apply, (b) for which Licensee asserts that such 
indemnification does not apply, or (c) in the event that, in GlobalPlatform's reasonable 
opinion, Licensee does not have the resources to reasonably fulfill its obligations under 
Section 7. Notwithstanding the foregoing, Licensee, its Affiliates and End Users may continue 
to use the Chip Card Technology, Specifications and Software if Licensee agrees to assume 
the cost of defending such lawsuit and if, in GlobalPlatform's reasonable opinion, Licensee 
has the resources to reasonably fulfill its obligations under Section 7. 
5. NO WARRANTIES. Licensee acknowledges and agrees that the neither the Chip Card 
Technology nor the Software are necessarily ready for commercial use and that 
GlobalPlatform has not necessarily approved, registered, tested or certified their use with any 
payment or chip card system. GlobalPlatform makes no representations or warranties 
whatsoever regarding the Chip Card Technology, the Software or any derivative works 
thereof and is granting the licenses in Section 1 of this Agreement on an "AS-IS", "WHERE 
IS", basis, "WITH ALL FAULTS" known and unknown. WITHOUT LIMITING THE 
GENERALITY OF THE FOREGOING, GLOBALPLATFORM HEREBY DISCLAIMS 
ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, 
ANY IMPLIED WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, ANY 
IMPLIED WARRANTY OF NON-INFRINGEMENT AND ANY IMPLIED WARRANTY 
OF MERCHANTABILITY. 
6. NO DAMAGES. TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER 
PARTY SHALL BE LIABLE TO THE OTHER PARTY OR ANY THIRD PARTY FOR 
ANY DAMAGES UNDER ANY THEORY OF LAW, INCLUDING, WITHOUT 
LIMITATION, ANY SPECIAL, CONSEQUENTIAL, INCIDENTAL, OR PUNITIVE 
DAMAGES, NOR ANY DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS 
INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER MONETARY 
LOSS, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 
7. INDEMNIFICATION. Licensee shall indemnify, defend and hold harmless GlobalPlatform 
and its officers, directors, employees and agents (each, an "Indemnified Party") from all 
losses, costs, damages, claims and other expenses (including reasonable attorneys' fees) 
arising out of any claim by any third party in connection with use by Licensee, its Affiliates or 
End Users, of the Chip Card Technology or the Software, including, without limitation, 
claims asserting that any Licensee product or service infringes the patent, copyright, trade 
secret or other intellectual property anywhere in the world of such third party (each, a 
"Claim"); provided, however, that the indemnity set forth in this Section 7 shall not apply to 
the extent any Claim necessarily results from Licensee's (a) compliance with one or more of 
the Specifications, or (b) use of the Software in the form supplied by GlobalPlatform 
hereunder. 
8. EXPORT REGULATIONS. The Chip Card Technology, including technical data, may be 
subject to U.S. export control laws, including the U.S. Export Administration Act and its 
associated regulations, and may be subject to export or import regulations in other countries. 
Licensee agrees to comply strictly with all such regulations and acknowledges that it has the 
responsibility to obtain licenses to export, re-export, or import the Chip Card Technology. 
9. RESTRICTED RIGHTS. Use, duplication or disclosure by the United States government is 
subject to the restrictions as set forth in the Rights in Technical Data and Computer Software 
Clauses in DFARS 252.227-7013 (1) (ii) and FAR 52.227-19(a) through (d) as applicable. 
10. MISCELLANEOUS.  
10.1 Notices. All notices required under this Agreement shall be in writing. Notice shall be 
deemed given when delivered personally to an authorized representative or one (1) day after 
deposit for overnight delivery upon written verification of receipt. Notices and 
correspondence to GlobalPlatform should be sent to the attention of the Secretariat at the 
address shown above. Notices and correspondence to Licensee should be sent to the person or 
address identified by Licensee in the form completed below in connection with Licensee's 
acceptance of this Agreement.  
10.2 Governing Law. This Agreement shall be construed and interpreted under the internal 
laws of the United States and the State of Delaware, without giving effect to its principles of 
conflict of law.  
10.3 Entire Agreement. This Agreement constitutes the entire agreement and understanding 
between GlobalPlatform and Licensee regarding the subject matter contained herein. No 
modification or waiver of this Agreement shall be binding unless it is in writing and signed by 
both parties. If any provision of this Agreement is invalid, illegal or unenforceable, the parties 
shall omit it from the Agreement to the extent required. The remaining terms shall remain in 
full force and effect. This Agreement supersedes any and all prior agreements between 
GlobalPlatform and Licensee regarding Licensee's right to use the Chip Card Technology, or 
any prior versions thereof. 

OPEN CARD CONSORTIUM SOURCE LICENSE
Version 1.0
											8/10/1999
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS OPEN CARD CONSORTIUM 
SOURCE LICENSE ("AGREEMENT").  ANY DOWNLOADING, USE, REPRODUCTION OR DISTRIBUTION OF THE 
PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.  

1.  DEFINITIONS
"Contribution" means:  
  a) in the case of Open Card Consortium ("OCC"), the Original Program, and 
  b) in the case of each Contributor, 
    i)   changes to the Program, and
    ii)  additions to the Program;
where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.  A 
Contribution 'originates' from a Contributor if the program changes or additions that make up the Contribution were made by 
that Contributor itself or by anyone acting on such Contributor's behalf.  Contributions do not include additions to the Program 
which:  (i) are separate modules of software distributed separately or in conjunction with the Program under their own license 
agreement or no license agreement, and (ii) are not derivative works of the Program.  Changes referred to in this paragraph 
may be deletions and/or other alterations.

"Contributor" means OCC and any other entity that distributes the Program.  If a Recipient distributes the Program, the 
Recipient becomes also a Contributor, with respect to other Recipients.   

"Distribute" means to furnish, make available, or otherwise provide to another person or entity outside of the Recipient's own 
organization.   This definition does not include mere use or demonstration of the functioning software.   This definition does 
not include provision of the Program's object code or documentation if the object code or documentation so provided is 
obviously marked, on its face or cover, to reflect the copyright notices indicated in Section 3, or if in so providing the object 
code and documentation, the Recipient clearly indicates that they are subject to copyright protection but may be licensed from 
the Open Card Consortium or its licensees.

"Licensed Patents " means patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its 
Contribution alone or when combined with the Program.  

"Original Program" means the original version of the software accompanying this Agreement as released by OCC, including 
source code and/.or object code and including documentation, if any.  The Original Program as current at any given time may 
be available for licensing from the Open Card Consortium at www.opencard.org under this Agreement or a successor to 
this Agreement.


"Program" means the Original Program, with any Contributions, as supplied by a Contributor to Recipient under this 
Agreement.  Therefore, depending on the software and documentation actually received by Recipient, the Program may be (a) 
only the Original Program, or (b) the Original Program, accompanied by and/or modified by Contributions.  

"Recipient" means anyone who receives the Program under this Agreement.

2.  GRANT OF RIGHTS
  a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-
     free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and 
     sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code 
     form.

  b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-
     free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the 
     Contribution of such Contributor, if any, in source code and object code form.  This patent license shall apply to the 
     combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such 
     addition of the Contribution causes such combination to be covered by the Licensed Patents.  This patent license shall 
     not apply to any other combinations or hardware.

  c) Recipient understands and agrees that although each Contributor grants the licenses to its Contributions set forth 
     herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other 
     intellectual property rights of any other entity.  Each Contributor disclaims any liability to Recipient for claims 
     brought by any other entity based on infringement of intellectual property rights or otherwise.  As a condition to 
     exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any 
     other intellectual property rights needed, if any.  For example, if a third party patent license is required to allow 
     Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the 
     Program.

  d) Without changing the effect of Section 2(c),  each Contributor represents that to its knowledge it has sufficient 
     copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 

3.  REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license 
    agreement, provided that:

  a) the Contributor complies with the terms and conditions of this Agreement; and

  b) the Contributor's  license agreement:
    i)   effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including 
         warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability 
         and fitness for a particular purpose; 
    ii)  effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, 
         incidental and consequential damages, such as lost profits; 
    iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any 
         other party; and
    iv)  states that source code for the Program is available from such Contributor under this Agreement, and informs 
         licensees how to obtain it in a reasonable manner on or through a medium customarily used for software 
         exchange. 

When a Contributor distributes the Program in source code form:
  a) the Contributor must distribute it under this Agreement; and 
  b)the Contributor must include a copy of this Agreement with each copy of the Program.  

Each Contributor must include the following in a conspicuous location in the Program: 

Copyright  {year(s) here}, Open Card Consortium and others. All Rights Reserved. (Contributor should list here the 
years shown on the version received by the Contributor, as well as the year(s) of Contributor's Contributions),

In addition, each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows 
subsequent Recipients to identify the Contribution and the originator of the Contribution.  

Each Contributor agrees to provide condensed summaries of its Contributions to OCC periodically, from time to time on a 
schedule decided solely by Contributor, either with or without copies of the Program as modified by such Contributions.

4.  COMMERCIAL DISTRIBUTION
Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the 
like.  While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program 
in a commercial product offering must do so in a manner which does not create potential liability for other Contributors.   
Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial 
Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, 
damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against 
the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with 
its distribution of the Program in a commercial product offering.  The obligations in this section do not apply to any claims or 
Losses relating to any actual or alleged intellectual property infringement, except to the extent that the actual or alleged 
infringement arises from the Contribution(s) of the Commercial Contributor.  In order to qualify, an Indemnified Contributor 
must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to 
control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations.  The 
Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product offering, Product X.  That Contributor is then a 
Commercial Contributor.  If that Commercial Contributor then makes performance claims, or offers warranties related to 
Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.  Under this 
section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance 
claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor 
must pay those damages.

Contributor may only state that the Program it distributes is compatible with the Open Card Framework if Contributor specifies 
the version of the Program with which compatibility is claimed and if such Program has passed the then-current, unmodified 
OCC compatibility tests for that version of the Open Card Framework available from OCC. OCC may at any time, but is never 
required to, audit the Program for compatibility. If  OCC determines that the Program does not pass the applicable unmodified 
OCC compatibility tests, OCC may require the Contributor to cease claiming compatibility for that version.  Contributor must 
comply promptly and will exert commercially reasonable efforts to notify its licensees that the Program as provided to them 
under a claim of compatibility is actually not compatible.  Failure to comply promptly will be a breach of this Agreement under 
Section 7 below.  Recipient understands that no trademark rights are granted by virtue of this Agreement; any licensing of such 
rights will be the subject of a separate agreement.

5.  NO WARRANTY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, 
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT 
LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR 
FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using 
and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but 
not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or 
equipment, and unavailability or interruption of operations.  

6.  DISCLAIMER OF LIABILITY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS 
SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON 
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE 
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
DAMAGES.

7.  GENERAL
If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or 
enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision 
shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-
claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this 
Agreement shall terminate as of the date such litigation is filed.  In addition, If Recipient institutes patent litigation against any 
entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the 
Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under 
Section 2(b) shall terminate as of the date such litigation is filed. 

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of 
this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance.  The 
reasonable period of time is never to exceed sixty (60) calendar days.  If all Recipient's rights under this Agreement terminate, 
Recipient must cease using and distributing the Program as soon as reasonably practicable.  However, Recipient's obligations 
under this Agreement, and any and all licenses granted by Recipient relating to the Program, shall continue and survive.  

OCC may publish new versions (including revisions) of this Agreement from time to time.  OCC may also publish new 
versions of the Program from time to time, possibly including Contributions, but OCC is never obligated to include any 
particular Contribution.   Each new version of the Agreement, as well as each new version of the Program, will be given a 
distinguishing version number.  Each Contributor may distribute a version of the Program,(with or without that Contributor's 
Contributions), subject to the version of the Agreement under which the Contributor properly received it, or under a newer 
version of this Agreement, as the Contributor may choose.

No one other than OCC has the right to modify this Agreement.  Except as expressly stated in Sections 2(a) and 2(b) above, 
Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, 
by implication, by estoppel or otherwise.  All rights in the Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of 
America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action 
arose.  Each party waives its rights to a jury trial in any resulting litigation.  

	
Copyright  1997 - 1999 IBM Corporation.

Redistribution and use in source (source code) and binary (object code)
forms, with or without modification, are permitted provided that the
following conditions are met:
1. Redistributed source code must retain the above copyright notice, this
list of conditions and the disclaimer below.
2. Redistributed object code must reproduce the above copyright notice,
this list of conditions and the disclaimer below in the documentation
and/or other materials provided with the distribution.
3. The name of IBM may not be used to endorse or promote products derived
from this software or in any other form without specific prior written
permission from IBM.
4. Redistribution of any modified code must be labeled "Code derived from
the original OpenCard Framework".

THIS SOFTWARE IS PROVIDED BY IBM "AS IS" FREE OF CHARGE. IBM SHALL NOT BE
LIABLE FOR INFRINGEMENTS OF THIRD PARTIES RIGHTS BASED ON THIS SOFTWARE.  ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED.  IBM DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THIS
SOFTWARE WILL MEET THE USER'S REQUIREMENTS OR THAT THE OPERATION OF IT WILL
BE UNINTERRUPTED OR ERROR-FREE.  IN NO EVENT, UNLESS REQUIRED BY APPLICABLE
LAW, SHALL IBM BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  ALSO, IBM IS UNDER NO OBLIGATION
TO MAINTAIN, CORRECT, UPDATE, CHANGE, MODIFY, OR OTHERWISE SUPPORT THIS
SOFTWARE.
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
 <title>Mozilla Public License version 1.1</title>
 <style type="text/css">
  .very-strong{
   text-transform:uppercase;
  }
  dt{
   font-weight:bold;
  }
  dd p{
   margin:0;
  }
 </style>
</head>
<body>
 <h1>Mozilla Public License Version 1.1</h1>
 <h2 id="section-1">1. Definitions.</h2>
 <dl>
  <dt id="section-1.0.1">1.0.1. "Commercial Use"
  <dd>means distribution or otherwise making the Covered Code available to a third party.
  <dt id="section-1.1">1.1. "Contributor"
  <dd>means each entity that creates or contributes to the creation of Modifications.
  <dt id="section-1.2">1.2. "Contributor Version"
  <dd>means the combination of the Original Code, prior Modifications used by a Contributor,
   and the Modifications made by that particular Contributor.
  <dt id="section-1.3">1.3. "Covered Code"
  <dd>means the Original Code or Modifications or the combination of the Original Code and
   Modifications, in each case including portions thereof.
  <dt id="section-1.4">1.4. "Electronic Distribution Mechanism"
  <dd>means a mechanism generally accepted in the software development community for the
   electronic transfer of data.
  <dt id="section-1.5">1.5. "Executable"
  <dd>means Covered Code in any form other than Source Code.
  <dt id="section-1.6">1.6. "Initial Developer"
  <dd>means the individual or entity identified as the Initial Developer in the Source Code
   notice required by <a href="#exhibit-a">Exhibit A</a>.
  <dt id="section-1.7">1.7. "Larger Work"
  <dd>means a work which combines Covered Code or portions thereof with code not governed
   by the terms of this License.
  <dt id="section-1.8">1.8. "License"
  <dd>means this document.
  <dt id="section-1.8.1">1.8.1. "Licensable"
  <dd>means having the right to grant, to the maximum extent possible, whether at the
   time of the initial grant or subsequently acquired, any and all of the rights
   conveyed herein.
  <dt id="section-1.9">1.9. "Modifications"
  <dd>
   <p>means any addition to or deletion from the substance or structure of either the
    Original Code or any previous Modifications. When Covered Code is released as a
    series of files, a Modification is:
   <ol type="a">
    <li id="section-1.9-a">Any addition to or deletion from the contents of a file
     containing Original Code or previous Modifications.
    <li id="section-1.9-b">Any new file that contains any part of the Original Code or
     previous Modifications.
   </ol>
  <dt id="section-1.10">1.10. "Original Code"
  <dd>means Source Code of computer software code which is described in the Source Code
   notice required by <a href="#exhibit-a">Exhibit A</a> as Original Code, and which,
   at the time of its release under this License is not already Covered Code governed
   by this License.
  <dt id="section-1.10.1">1.10.1. "Patent Claims"
  <dd>means any patent claim(s), now owned or hereafter acquired, including without
   limitation, method, process, and apparatus claims, in any patent Licensable by
   grantor.
  <dt id="section-1.11">1.11. "Source Code"
  <dd>means the preferred form of the Covered Code for making modifications to it,
   including all modules it contains, plus any associated interface definition files,
   scripts used to control compilation and installation of an Executable, or source
   code differential comparisons against either the Original Code or another well known,
   available Covered Code of the Contributor's choice. The Source Code can be in a
   compressed or archival form, provided the appropriate decompression or de-archiving
   software is widely available for no charge.
  <dt id="section-1.12">1.12. "You" (or "Your")
  <dd>means an individual or a legal entity exercising rights under, and complying with
   all of the terms of, this License or a future version of this License issued under
   <a href="#section-6.1">Section 6.1.</a> For legal entities, "You" includes any entity
   which controls, is controlled by, or is under common control with You. For purposes of
   this definition, "control" means (a) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or otherwise, or (b)
   ownership of more than fifty percent (50%) of the outstanding shares or beneficial
   ownership of such entity.
 </dl>
 <h2 id="section-2">2. Source Code License.</h2>
 <h3 id="section-2.1">2.1. The Initial Developer Grant.</h3>
 <p>The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive
  license, subject to third party intellectual property claims:
 <ol type="a">
  <li id="section-2.1-a">under intellectual property rights (other than patent or
   trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform,
   sublicense and distribute the Original Code (or portions thereof) with or without
   Modifications, and/or as part of a Larger Work; and
  <li id="section-2.1-b">under Patents Claims infringed by the making, using or selling
   of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or
   otherwise dispose of the Original Code (or portions thereof).
  <li id="section-2.1-c">the licenses granted in this Section 2.1
   (<a href="#section-2.1-a">a</a>) and (<a href="#section-2.1-b">b</a>) are effective on
   the date Initial Developer first distributes Original Code under the terms of this
   License.
  <li id="section-2.1-d">Notwithstanding Section 2.1 (<a href="#section-2.1-b">b</a>)
   above, no patent license is granted: 1) for code that You delete from the Original Code;
   2) separate from the Original Code; or 3) for infringements caused by: i) the
   modification of the Original Code or ii) the combination of the Original Code with other
   software or devices.
 </ol>
 <h3 id="section-2.2">2.2. Contributor Grant.</h3>
 <p>Subject to third party intellectual property claims, each Contributor hereby grants You
  a world-wide, royalty-free, non-exclusive license
 <ol type="a">
  <li id="section-2.2-a">under intellectual property rights (other than patent or trademark)
   Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and
   distribute the Modifications created by such Contributor (or portions thereof) either on
   an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger
   Work; and
  <li id="section-2.2-b">under Patent Claims infringed by the making, using, or selling of
   Modifications made by that Contributor either alone and/or in combination with its
   Contributor Version (or portions of such combination), to make, use, sell, offer for
   sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor
   (or portions thereof); and 2) the combination of Modifications made by that Contributor
   with its Contributor Version (or portions of such combination).
  <li id="section-2.2-c">the licenses granted in Sections 2.2
   (<a href="#section-2.2-a">a</a>) and 2.2 (<a href="#section-2.2-b">b</a>) are effective
   on the date Contributor first makes Commercial Use of the Covered Code.
  <li id="section-2.2-d">Notwithstanding Section 2.2 (<a href="#section-2.2-b">b</a>)
   above, no patent license is granted: 1) for any code that Contributor has deleted from
   the Contributor Version; 2) separate from the Contributor Version; 3) for infringements
   caused by: i) third party modifications of Contributor Version or ii) the combination of
   Modifications made by that Contributor with other software (except as part of the
   Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code
   in the absence of Modifications made by that Contributor.
 </ol>
 <h2 id="section-3">3. Distribution Obligations.</h2>
 <h3 id="section-3.1">3.1. Application of License.</h3>
 <p>The Modifications which You create or to which You contribute are governed by the terms
  of this License, including without limitation Section <a href="#section-2.2">2.2</a>. The
  Source Code version of Covered Code may be distributed only under the terms of this License
  or a future version of this License released under Section <a href="#section-6.1">6.1</a>,
  and You must include a copy of this License with every copy of the Source Code You
  distribute. You may not offer or impose any terms on any Source Code version that alters or
  restricts the applicable version of this License or the recipients' rights hereunder.
  However, You may include an additional document offering the additional rights described in
  Section <a href="#section-3.5">3.5</a>.
 <h3 id="section-3.2">3.2. Availability of Source Code.</h3>
 <p>Any Modification which You create or to which You contribute must be made available in
  Source Code form under the terms of this License either on the same media as an Executable
  version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an
  Executable version available; and if made available via Electronic Distribution Mechanism,
  must remain available for at least twelve (12) months after the date it initially became
  available, or at least six (6) months after a subsequent version of that particular
  Modification has been made available to such recipients. You are responsible for ensuring
  that the Source Code version remains available even if the Electronic Distribution
  Mechanism is maintained by a third party.
 <h3 id="section-3.3">3.3. Description of Modifications.</h3>
 <p>You must cause all Covered Code to which You contribute to contain a file documenting the
  changes You made to create that Covered Code and the date of any change. You must include a
  prominent statement that the Modification is derived, directly or indirectly, from Original
  Code provided by the Initial Developer and including the name of the Initial Developer in
  (a) the Source Code, and (b) in any notice in an Executable version or related documentation
  in which You describe the origin or ownership of the Covered Code.
 <h3 id="section-3.4">3.4. Intellectual Property Matters</h3>
 <h4 id="section-3.4-a">(a) Third Party Claims</h4>
 <p>If Contributor has knowledge that a license under a third party's intellectual property
  rights is required to exercise the rights granted by such Contributor under Sections
  <a href="#section-2.1">2.1</a> or <a href="#section-2.2">2.2</a>, Contributor must include a
  text file with the Source Code distribution titled "LEGAL" which describes the claim and the
  party making the claim in sufficient detail that a recipient will know whom to contact. If
  Contributor obtains such knowledge after the Modification is made available as described in
  Section <a href="#section-3.2">3.2</a>, Contributor shall promptly modify the LEGAL file in
  all copies Contributor makes available thereafter and shall take other steps (such as
  notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who
  received the Covered Code that new knowledge has been obtained.
 <h4 id="section-3.4-b">(b) Contributor APIs</h4>
 <p>If Contributor's Modifications include an application programming interface and Contributor
  has knowledge of patent licenses which are reasonably necessary to implement that
  <abbr>API</abbr>, Contributor must also include this information in the
  <strong class="very-strong">legal</strong> file.
 <h4 id="section-3.4-c">(c) Representations.</h4>
 <p>Contributor represents that, except as disclosed pursuant to Section 3.4
  (<a href="#section-3.4-a">a</a>) above, Contributor believes that Contributor's Modifications
  are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the
  rights conveyed by this License.
 <h3 id="section-3.5">3.5. Required Notices.</h3>
 <p>You must duplicate the notice in <a href="#exhibit-a">Exhibit A</a> in each file of the
  Source Code. If it is not possible to put such notice in a particular Source Code file due to
  its structure, then You must include such notice in a location (such as a relevant directory)
  where a user would be likely to look for such a notice. If You created one or more
  Modification(s) You may add your name as a Contributor to the notice described in
  <a href="#exhibit-a">Exhibit A</a>. You must also duplicate this License in any documentation
  for the Source Code where You describe recipients' rights or ownership rights relating to
  Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity
  or liability obligations to one or more recipients of Covered Code. However, You may do so
  only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You
  must make it absolutely clear than any such warranty, support, indemnity or liability
  obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer
  and every Contributor for any liability incurred by the Initial Developer or such Contributor
  as a result of warranty, support, indemnity or liability terms You offer.
 <h3 id="section-3.6">3.6. Distribution of Executable Versions.</h3>
 <p>You may distribute Covered Code in Executable form only if the requirements of Sections
  <a href="#section-3.1">3.1</a>, <a href="#section-3.2">3.2</a>,
  <a href="#section-3.3">3.3</a>, <a href="#section-3.4">3.4</a> and
  <a href="#section-3.5">3.5</a> have been met for that Covered Code, and if You include a
  notice stating that the Source Code version of the Covered Code is available under the terms
  of this License, including a description of how and where You have fulfilled the obligations
  of Section <a href="#section-3.2">3.2</a>. The notice must be conspicuously included in any
  notice in an Executable version, related documentation or collateral in which You describe
  recipients' rights relating to the Covered Code. You may distribute the Executable version of
  Covered Code or ownership rights under a license of Your choice, which may contain terms
  different from this License, provided that You are in compliance with the terms of this
  License and that the license for the Executable version does not attempt to limit or alter the
  recipient's rights in the Source Code version from the rights set forth in this License. If
  You distribute the Executable version under a different license You must make it absolutely
  clear that any terms which differ from this License are offered by You alone, not by the
  Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and
  every Contributor for any liability incurred by the Initial Developer or such Contributor as
  a result of any such terms You offer.
 <h3 id="section-3.7">3.7. Larger Works.</h3>
 <p>You may create a Larger Work by combining Covered Code with other code not governed by the
  terms of this License and distribute the Larger Work as a single product. In such a case,
  You must make sure the requirements of this License are fulfilled for the Covered Code.
 <h2 id="section-4">4. Inability to Comply Due to Statute or Regulation.</h2>
 <p>If it is impossible for You to comply with any of the terms of this License with respect to
  some or all of the Covered Code due to statute, judicial order, or regulation then You must:
  (a) comply with the terms of this License to the maximum extent possible; and (b) describe
  the limitations and the code they affect. Such description must be included in the
  <strong class="very-strong">legal</strong> file described in Section
  <a href="#section-3.4">3.4</a> and must be included with all distributions of the Source Code.
  Except to the extent prohibited by statute or regulation, such description must be
  sufficiently detailed for a recipient of ordinary skill to be able to understand it.
 <h2 id="section-5">5. Application of this License.</h2>
 <p>This License applies to code to which the Initial Developer has attached the notice in
  <a href="#exhibit-a">Exhibit A</a> and to related Covered Code.
 <h2 id="section-6">6. Versions of the License.</h2>
 <h3 id="section-6.1">6.1. New Versions</h3>
 <p>Netscape Communications Corporation ("Netscape") may publish revised and/or new versions
  of the License from time to time. Each version will be given a distinguishing version number.
 <h3 id="section-6.2">6.2. Effect of New Versions</h3>
 <p>Once Covered Code has been published under a particular version of the License, You may
  always continue to use it under the terms of that version. You may also choose to use such
  Covered Code under the terms of any subsequent version of the License published by Netscape.
  No one other than Netscape has the right to modify the terms applicable to Covered Code
  created under this License.
 <h3 id="section-6.3">6.3. Derivative Works</h3>
 <p>If You create or use a modified version of this License (which you may only do in order to
 apply it to code which is not already Covered Code governed by this License), You must (a)
 rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL",
 "NPL" or any confusingly similar phrase do not appear in your license (except to note that
 your license differs from this License) and (b) otherwise make it clear that Your version of
 the license contains terms which differ from the Mozilla Public License and Netscape Public
 License. (Filling in the name of the Initial Developer, Original Code or Contributor in the
 notice described in <a href="#exhibit-a">Exhibit A</a> shall not of themselves be deemed to
 be modifications of this License.)
 <h2 id="section-7">7. <strong class="very-strong">Disclaimer of warranty</strong></h2>
 <p><strong class="very-strong">Covered code is provided under this license on an "as is"
  basis, without warranty of any kind, either expressed or implied, including, without
  limitation, warranties that the covered code is free of defects, merchantable, fit for a
  particular purpose or non-infringing. The entire risk as to the quality and performance of
  the covered code is with you. Should any covered code prove defective in any respect, you
  (not the initial developer or any other contributor) assume the cost of any necessary
  servicing, repair or correction. This disclaimer of warranty constitutes an essential part
  of this license. No use of any covered code is authorized hereunder except under this
  disclaimer.</strong>
 <h2 id="section-8">8. Termination</h2>
 <p id="section-8.1">8.1. This License and the rights granted hereunder will terminate
  automatically if You fail to comply with terms herein and fail to cure such breach
  within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which
  are properly granted shall survive any termination of this License. Provisions which, by
  their nature, must remain in effect beyond the termination of this License shall survive.
 <p id="section-8.2">8.2. If You initiate litigation by asserting a patent infringement
  claim (excluding declatory judgment actions) against Initial Developer or a Contributor
  (the Initial Developer or Contributor against whom You file such action is referred to
  as "Participant") alleging that:
 <ol type="a">
  <li id="section-8.2-a">such Participant's Contributor Version directly or indirectly
   infringes any patent, then any and all rights granted by such Participant to You under
   Sections <a href="#section-2.1">2.1</a> and/or <a href="#section-2.2">2.2</a> of this
   License shall, upon 60 days notice from Participant terminate prospectively, unless if
   within 60 days after receipt of notice You either: (i) agree in writing to pay
   Participant a mutually agreeable reasonable royalty for Your past and future use of
   Modifications made by such Participant, or (ii) withdraw Your litigation claim with
   respect to the Contributor Version against such Participant. If within 60 days of
   notice, a reasonable royalty and payment arrangement are not mutually agreed upon in
   writing by the parties or the litigation claim is not withdrawn, the rights granted by
   Participant to You under Sections <a href="#section-2.1">2.1</a> and/or
   <a href="#section-2.2">2.2</a> automatically terminate at the expiration of the 60 day
   notice period specified above.
  <li id="section-8.2-b">any software, hardware, or device, other than such Participant's
   Contributor Version, directly or indirectly infringes any patent, then any rights
   granted to You by such Participant under Sections 2.1(<a href="#section-2.1-b">b</a>)
   and 2.2(<a href="#section-2.2-b">b</a>) are revoked effective as of the date You first
   made, used, sold, distributed, or had made, Modifications made by that Participant.
 </ol>
 <p id="section-8.3">8.3. If You assert a patent infringement claim against Participant
  alleging that such Participant's Contributor Version directly or indirectly infringes
  any patent where such claim is resolved (such as by license or settlement) prior to the
  initiation of patent infringement litigation, then the reasonable value of the licenses
  granted by such Participant under Sections <a href="#section-2.1">2.1</a> or
  <a href="#section-2.2">2.2</a> shall be taken into account in determining the amount or
  value of any payment or license.
 <p id="section-8.4">8.4. In the event of termination under Sections
  <a href="#section-8.1">8.1</a> or <a href="#section-8.2">8.2</a> above, all end user
  license agreements (excluding distributors and resellers) which have been validly
  granted by You or any distributor hereunder prior to termination shall survive
  termination.
 <h2 id="section-9">9. <strong class="very-strong">Limitation of liability</strong></h2>
 <p><strong class="very-strong">Under no circumstances and under no legal theory, whether
  tort (including negligence), contract, or otherwise, shall you, the initial developer,
  any other contributor, or any distributor of covered code, or any supplier of any of
  such parties, be liable to any person for any indirect, special, incidental, or
  consequential damages of any character including, without limitation, damages for loss
  of goodwill, work stoppage, computer failure or malfunction, or any and all other
  commercial damages or losses, even if such party shall have been informed of the
  possibility of such damages. This limitation of liability shall not apply to liability
  for death or personal injury resulting from such party's negligence to the extent
  applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion
  or limitation of incidental or consequential damages, so this exclusion and limitation
  may not apply to you.</strong>
 <h2 id="section-10">10. <abbr title="United States">U.S.</abbr> government end users</h2>
 <p>The Covered Code is a "commercial item," as that term is defined in 48
  <abbr>C.F.R.</abbr> 2.101 (<abbr title="October">Oct.</abbr> 1995), consisting of
  "commercial computer software" and "commercial computer software documentation," as such
  terms are used in 48 <abbr>C.F.R.</abbr> 12.212 (<abbr title="September">Sept.</abbr>
  1995). Consistent with 48 <abbr>C.F.R.</abbr> 12.212 and 48 <abbr>C.F.R.</abbr>
  227.7202-1 through 227.7202-4 (June 1995), all <abbr>U.S.</abbr> Government End Users
  acquire Covered Code with only those rights set forth herein.
 <h2 id="section-11">11. Miscellaneous</h2>
 <p>This License represents the complete agreement concerning subject matter hereof. If
  any provision of this License is held to be unenforceable, such provision shall be
  reformed only to the extent necessary to make it enforceable. This License shall be
  governed by California law provisions (except to the extent applicable law, if any,
  provides otherwise), excluding its conflict-of-law provisions. With respect to
  disputes in which at least one party is a citizen of, or an entity chartered or
  registered to do business in the United States of America, any litigation relating to
  this License shall be subject to the jurisdiction of the Federal Courts of the
  Northern District of California, with venue lying in Santa Clara County, California,
  with the losing party responsible for costs, including without limitation, court
  costs and reasonable attorneys' fees and expenses. The application of the United
  Nations Convention on Contracts for the International Sale of Goods is expressly
  excluded. Any law or regulation which provides that the language of a contract
  shall be construed against the drafter shall not apply to this License.
 <h2 id="section-12">12. Responsibility for claims</h2>
 <p>As between Initial Developer and the Contributors, each party is responsible for
  claims and damages arising, directly or indirectly, out of its utilization of rights
  under this License and You agree to work with Initial Developer and Contributors to
  distribute such responsibility on an equitable basis. Nothing herein is intended or
  shall be deemed to constitute any admission of liability.
 <h2 id="section-13">13. Multiple-licensed code</h2>
 <p>Initial Developer may designate portions of the Covered Code as
  "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits
  you to utilize portions of the Covered Code under Your choice of the <abbr>MPL</abbr>
  or the alternative licenses, if any, specified by the Initial Developer in the file
  described in <a href="#exhibit-a">Exhibit A</a>.
 <h2 id="exhibit-a">Exhibit A - Mozilla Public License.</h2>
 <pre>"The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/

Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is ______________________________________.

The Initial Developer of the Original Code is ________________________.
Portions created by ______________________ are Copyright (C) ______
_______________________. All Rights Reserved.

Contributor(s): ______________________________________.

Alternatively, the contents of this file may be used under the terms
of the _____ license (the  "[___] License"), in which case the
provisions of [______] License are applicable instead of those
above. If you wish to allow use of your version of this file only
under the terms of the [____] License and not to allow others to use
your version of this file under the MPL, indicate your decision by
deleting the provisions above and replace them with the notice and
other provisions required by the [___] License. If you do not delete
the provisions above, a recipient may use your version of this file
under either the MPL or the [___] License."</pre>
 <p>NOTE: The text of this Exhibit A may differ slightly from the text of
  the notices in the Source Code files of the Original Code. You should
  use the text of this Exhibit A rather than the text found in the
  Original Code Source Code for Your Modifications.
</body>
</html>
